pax_global_header00006660000000000000000000000064141105721730014513gustar00rootroot0000000000000052 comment=d3837928885e91c9ddd465240b90a97aa342fda6 gnulib-20210822~d383792/000077500000000000000000000000001411057217300142775ustar00rootroot00000000000000gnulib-20210822~d383792/.cvsignore000066400000000000000000000000161411057217300162740ustar00rootroot00000000000000.msg testdir* gnulib-20210822~d383792/.gitattributes000066400000000000000000000003741411057217300171760ustar00rootroot00000000000000# See lib/git-merge-changelog.c for making this useful. ChangeLog merge=merge-changelog # Run this to make 'git diff' on texinfo files give nicer hunk context: # git config diff.texinfo.funcname '^@node[ ][ ]*\\([^,][^,]*\\)' *.texi* diff=texinfo gnulib-20210822~d383792/.gitignore000066400000000000000000000001001411057217300162560ustar00rootroot00000000000000*.orig *.rej *~ .#* \#*# allsnippets.tmp amsnippet.tmp testdir* gnulib-20210822~d383792/COPYING000066400000000000000000000017671411057217300153450ustar00rootroot00000000000000$Id: COPYING,v 1.3 2006-10-26 16:20:28 eggert Exp $ The files in here are mostly copyright (C) Free Software Foundation, and are under assorted licenses. Mostly, but not entirely, GPL. Many modules are provided dual-license, either GPL or LGPL at your option. The headers of files in the lib directory (e.g., lib/error.c) state GPL for convenience, since the bulk of current gnulib users are GPL'd programs. But the files in the modules directory (e.g., modules/error) state the true license of each file, and when you use 'gnulib-tool --lgpl --import ', gnulib-tool either rewrites the files to have an LGPL header as part of copying them from gnulib to your project directory, or fails because the modules you requested were not licensed under LGPL. Some of the source files in lib/ have different licenses. Also, the copy of maintain.texi in doc/ has a verbatim-copying license, and doc/standards.texi and make-stds.texi are GFDL. Most (but not all) m4/*.m4 files have nearly unlimited licenses. gnulib-20210822~d383792/ChangeLog000066400000000000000000242645671411057217300161030ustar00rootroot000000000000002021-08-22 Bruno Haible snippet/unused-parameter: Mark unused module obsolete. * modules/snippet/unused-parameter (Status, Notice): Mark as obsolete. 2021-08-22 Bruno Haible Make generated .in.h files as standalone as possible. Reported by Jan Engelhardt . * lib/stdlib.in.h (_GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEALLOC_FREE, _GL_ATTRIBUTE_MALLOC): Add fallback definitions. * lib/dirent.in.h (_GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC): Add fallback definitions. * lib/stdio.in.h (_GL_ATTRIBUTE_DEALLOC): Add fallback definition. * lib/math.in.h (_GL_ATTRIBUTE_CONST): Add fallback definition. * lib/pthread.in.h (_GL_ATTRIBUTE_PURE): Add fallback definition. * lib/threads.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/uchar.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/string.in.h (_GL_ATTRIBUTE_PURE): Move definition, for consistency with the other *.in.h files. * lib/se-context.in.h (_GL_ATTRIBUTE_MAYBE_UNUSED): Add fallback definition. * lib/se-label.in.h (_GL_ATTRIBUTE_MAYBE_UNUSED): Likewise. * lib/se-selinux.in.h (_GL_ATTRIBUTE_MAYBE_UNUSED): Likewise. * lib/textstyle.in.h: Use _GL_ATTRIBUTE_MAYBE_UNUSED instead of _GL_UNUSED. (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_MAYBE_UNUSED): Add fallback definitions. 2021-08-22 Bruno Haible gnulib-common.m4: Clarify logic behind _GL_UNUSED_LABEL. Reported by Paul Eggert. * m4/gnulib-common.m4 (gl_COMMON_BODY): Add comment and write the condition in a way that is close to the comment. 2021-08-22 Paul Eggert c-stack: depend on inttypes, mempcpy * modules/c-stack (Depends-on): Add inttypes, mempcpy. mempcpy problem reported by Evan Miller in: https://debbugs.gnu.org/50098#31 2021-08-22 Bruno Haible mountlist: Use recommended syntax for _GL_UNUSED_LABEL. * lib/mountlist.c (read_file_system_list): Add semicolon after _GL_UNUSED_LABEL. 2021-08-22 Bruno Haible gnulib-common.m4: Make _GL_UNUSED_LABEL effective for clang. * m4/gnulib-common.m4 (gl_COMMON_BODY): Make _GL_UNUSED_LABEL use _GL_ATTRIBUTE_UNUSED also for clang. 2021-08-22 Bruno Haible gnulib-common.m4: Use C2x [[maybe_unused]] when possible. * m4/gnulib-common.m4 (gl_COMMON_BODY): Define _GL_UNUSED as an alias of _GL_ATTRIBUTE_MAYBE_UNUSED, not of _GL_ATTRIBUTE_UNUSED. * lib/binary-io.h (__gl_setmode): Put _GL_UNUSED before, not after, the declaration. * lib/c-stack.c (null_action, segv_handler, overflow_handler, c_stack_action): Likewise. * lib/chown.c (chown): Likewise. * lib/clean-temp-simple.c (cleanup_action): Likewise. * lib/fts.c (dirent_inode_sort_may_be_useful, leaf_optimization, fts_set): Likewise. * lib/getgroups.c (getgroups): Likewise. * lib/getopt.c (_getopt_initialize): Likewise. * lib/getugroups.c (getugroups): Likewise. * lib/localename.c (gl_locale_name_thread_unsafe, gl_locale_name_thread, gl_locale_name_posix, gl_locale_name_environ): Likewise. * lib/mkdir.c (rpl_mkdir): Likewise. * lib/mkfifo.c (mkfifo): Likewise. * lib/mkfifoat.c (mkfifoat): Likewise. * lib/mknod.c (mknod): Likewise. * lib/mknodat.c (mknodat): Likewise. * lib/mountlist.c (me_remote): Likewise. * lib/openpty.c (openpty): Likewise. * lib/parse-datetime.y (yyerror): Likewise. * lib/passfd.c (sendfd, recvfd): Likewise. * lib/pthread-cond.c (pthread_condattr_destroy, pthread_cond_init, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, pthread_cond_broadcast, pthread_cond_destroy): Likewise. * lib/pthread-mutex.c (pthread_mutexattr_destroy, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_timedlock, pthread_mutex_unlock, pthread_mutex_destroy): Likewise. * lib/pthread-rwlock.c (pthread_rwlockattr_destroy, pthread_rwlock_init, pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock): Likewise. * lib/pthread-spin.c (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock, pthread_spin_destroy): Likewise. * lib/pthread-thread.c (pthread_attr_destroy): Likewise. * lib/readlink.c (readlink): Likewise. * lib/rename.c (rpl_rename): Likewise. * lib/set-permissions.c (set_permissions): Likewise. * lib/sockets.c (gl_sockets_startup): Likewise. * lib/stat-time.h (get_stat_birthtime_ns, get_stat_birthtime, stat_time_normalize): Likewise. * lib/strptime.c (__strptime_internal): Likewise. * lib/strtod.c (LDEXP): Likewise. * lib/symlink.c (symlink): Likewise. * lib/symlinkat.c (symlinkat): Likewise. * lib/tempname.c (try_dir, try_nocreate): Likewise. * lib/textstyle.in.h (styled_ostream_begin_use_class, styled_ostream_end_use_class, styled_ostream_get_hyperlink_ref, styled_ostream_get_hyperlink_id, styled_ostream_set_hyperlink, styled_ostream_flush_to_current_style, fd_ostream_create, term_ostream_get_color, term_ostream_set_color, term_ostream_get_bgcolor, term_ostream_set_bgcolor, term_ostream_get_weight, term_ostream_set_weight, term_ostream_get_posture, term_ostream_set_posture, term_ostream_get_underline, term_ostream_set_underline, term_ostream_get_hyperlink_ref, term_ostream_get_hyperlink_id, term_ostream_set_hyperlink, term_ostream_create, term_styled_ostream_create, html_styled_ostream_create, handle_color_option, handle_style_option, style_file_prepare, styled_ostream_create, libtextstyle_set_failure_exit_code): Likewise. * lib/unicodeio.c (exit_failure_callback, fallback_failure_callback): Likewise. * lib/wait-process.c (cleanup_slaves_action): Likewise. * tests/signature.h (SIGNATURE_CHECK2): Likewise. * tests/test-areadlink.c (do_areadlink): Likewise. * tests/test-areadlinkat.c (do_areadlinkat): Likewise. * tests/test-ceilf-ieee.c (main): Likewise. * tests/test-ceilf1.c (main): Likewise. * tests/test-dirent.c (dir): Likewise. * tests/test-fchownat.c (main): Likewise. * tests/test-fdopendir.c (main): Likewise. * tests/test-filenamecat.c (main): Likewise. * tests/test-floor1.c (main): Likewise. * tests/test-floorf-ieee.c (main): Likewise. * tests/test-floorf1.c (main): Likewise. * tests/test-fseeko.c (main): Likewise. * tests/test-fstatat.c (main): Likewise. * tests/test-ftello.c (main): Likewise. * tests/test-getdomainname.c (main): Likewise. * tests/test-getgroups.c (main): Likewise. * tests/test-gethostname.c (main): Likewise. * tests/test-math-c++.cc (OVERLOADED_CHECK): Likewise. * tests/test-mkdirat.c (main): Likewise. * tests/test-openat.c (main): Likewise. * tests/test-parse-datetime.c (main): Likewise. * tests/test-quotearg-simple.c (main): Likewise. * tests/test-quotearg.c (main): Likewise. * tests/test-sethostname2.c (main): Likewise. * tests/test-unlinkat.c (main): Likewise. * tests/test-version-etc.c (main): Likewise. * tests/test-xalloc-die.c (main): Likewise. * tests/test-xfprintf-posix.c (main): Likewise. * tests/test-xprintf-posix.c (main): Likewise. * tests/test-xvasprintf.c (main): Likewise. 2021-08-22 Bruno Haible gnulib-common.m4: Document the gnulib-internal _GL_ATTRIBUTE_* macros. * m4/gnulib-common.m4 (gl_COMMON_BODY): Add comments to the _GL_ATTRIBUTE_* macros, based on lib/attribute.h. 2021-08-22 Bernhard Voelker doc: fix order of stdlib functions * doc/gnulib.texi (node Glibc stdlib.h): Move mrand48_r after mkstemps. Reported by Benno Schulenberg. 2021-08-21 Bruno Haible c-stack: Test for libsigsegv once, not twice. * m4/sigsegv.m4: New file, based on modules/sigsegv. * modules/sigsegv (Files): Add it. (configure.ac): Require gl_SIGSEGV. Test gl_sigsegv_uses_libsigsegv instead of with_libsigsegv and gl_cv_lib_sigsegv. * m4/c-stack.m4 (gl_C_STACK): Likewise. 2021-08-21 Bruno Haible rawmemchr: Fix use in relocatable-prog-wrapper (regression 2021-08-20). * lib/rawmemchr.c: Restore test of HAVE_RAWMEMCHR. * modules/relocatable-prog-wrapper (Depends-on): Add stdalign. 2021-08-20 Paul Eggert rawmemchr: modernize and simplify * lib/rawmemchr.c (HAVE_RAWMEMCHR): Assume it’s not defined; otherwise this file would not be compiled. Include limits.h, stdalign.h, stdint.h, verify.h. (rawmemchr): Prefer uintptr_t to unsigned long and to size_t when it’s the better type. Verify that longword lacks padding. Use alignof rather than sizeof when checking alignment. Simplify by assuming C99 decl-after-statement, and by using multiplication rather than repeated shifting and OR (modern compilers can optimize the multiplication if needed). Avoid unnecessary casts. Don’t assume CHAR_WIDTH is 8. Convert back and forth between void * to suppress bogus GCC warnings about alignment. Omit a duplicate assignment to char_ptr. * modules/rawmemchr (Depends-on): Add stdalign, stdint, verify. 2021-08-17 Paul Eggert c-stack: fix libsigsegv dependency (regression 2021-05-18) Problem reported for GNU grep by Evan Miller (Bug#50098). * m4/c-stack.m4 (gl_C_STACK): Call gl_LIBSIGSEGV before testing gl_cv_lib_sigsegv. 2021-08-14 Bruno Haible doc: Update for glibc 2.34. * doc/posix-functions/timespec_getres.texi: New file. * doc/glibc-functions/_Fork.texi: New file. * doc/glibc-functions/closefrom.texi: New file. * doc/glibc-functions/dn_comp.texi: New file. * doc/glibc-functions/dn_skipname.texi: New file. * doc/glibc-functions/execveat.texi: New file. * doc/glibc-functions/posix_spawn_file_actions_addclosefrom_np.texi: New file. * doc/glibc-functions/res_dnok.texi: New file. * doc/glibc-functions/res_hnok.texi: New file. * doc/glibc-functions/res_mailok.texi: New file. * doc/glibc-functions/res_nmkquery.texi: New file. * doc/glibc-functions/res_nquery.texi: New file. * doc/glibc-functions/res_nquerydomain.texi: New file. * doc/glibc-functions/res_nsearch.texi: New file. * doc/glibc-functions/res_nsend.texi: New file. * doc/glibc-functions/res_ownok.texi: New file. * doc/glibc-functions/res_send.texi: New file. * doc/gnulib.texi: Include them. * doc/glibc-functions/inet_neta.texi: Remove file. * doc/glibc-functions/malloc_get_state.texi: Remove file. * doc/glibc-functions/malloc_set_state.texi: Remove file. * doc/glibc-functions/pthread_mutex_consistent_np.texi: Remove file. * doc/glibc-functions/pthread_mutexattr_getrobust_np.texi: Remove file. * doc/glibc-functions/pthread_mutexattr_setrobust_np.texi: Remove file. * doc/glibc-functions/pthread_yield.texi: Remove file. * doc/gnulib.texi: Don't include them. * doc/glibc-headers/resolv.texi: Update. * doc/pastposix-functions/h_errno.texi: Likewise. * doc/posix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. 2021-08-12 Paul Eggert memrchr-tests: port to GCC 12 * tests/test-memrchr.c: Bug#101494 is fixed in GCC 12. 2021-08-12 Akim Demaille snippet/_Noreturn: Fix typo * lib/_Noreturn.h: Fix spelling of 4. 2021-08-11 Paul Eggert dynarray: merge from glibc This also helps document glibc’s direction in using GCC’s memory-allocation checking. * lib/cdefs.h: Omit comments that glibc rejected. (__returns_nonnull, __attr_access_none, __attr_dealloc) (__attr_dealloc_free): New macros. * lib/libc-config.h: Undef the new macros that are defined unconditionally. * lib/malloc/dynarray_at_failure.c [_LIBC]: Do not include stdlib.h. (__libc_dynarray_at_failure) [_LIBC]: Call __libc_fatal, fixing a bad merge previously. 2021-08-08 Bruno Haible canonicalize-lgpl: Fix conflict with z/OS . Reported by Mike Fulton in via Eric Blake. * lib/canonicalize-lgpl.c (__stat): Remove macro. (file_accessible): Use 'stat' instead. 2021-08-08 Bruno Haible ptsname_r: Drop sync with glibc. * lib/ptsname_r.c: Drop _LIBC code. (__set_errno, __isatty, __stat, __ttyname_r, __ptsname_r): Remove macros. (ptsname_r): Rename local variable 'save_errno'. 2021-08-08 Bruno Haible config: Update after glibc changed. * config/srclist.txt: Remove two files that glibc dropped on 2013-12-17. 2021-08-08 Bruno Haible relocatable-lib-lgpl: Fix a memory leak related to a Windows DLL. Reported by Jonathan Boeing in . * lib/relocatable.c (DllMain): Avoid memory leak in a special case of repeated attach/detach. 2021-08-08 Bruno Haible fopen: Fix link error on native Windows. * modules/fopen (Depends-on): Add close. 2021-08-08 Bruno Haible fopen: Fix compilation error on AIX (regression from 2020-05-28). * modules/fopen (Depends-on): Add fcntl-h. 2021-08-08 Bruno Haible stdio: Improve GCC 11 allocation-deallocation checking. * lib/stdio.in.h (fdopen, fopen, tmpfile): For GCC >= 11: Declare nearly always. (popen): For GCC >= 11: Declare also when the platform already declares the function or when the module 'popen' is not in use. 2021-08-08 Bruno Haible dirent: Improve GCC 11 allocation-deallocation checking. * lib/dirent.in.h (opendir): For GCC >= 11: Declare also when the platform already declares the function or when the module 'opendir' is not in use. (fdopendir): For GCC >= 11: Declare also when the platform already declares the function or when the module 'fdopendir' is not in use. 2021-08-08 Bruno Haible stdlib, string, wchar: Improve GCC 11 allocation-deallocation checking. * lib/stdlib.in.h (aligned_alloc): For GCC >= 11: Declare also when the platform already declares the function or when the module 'aligned_alloc' is not in use. (calloc): For GCC >= 11: Declare nearly always. (canonicalize_file_name): For GCC >= 11: Declare also when the platform already declares the function or when the module 'canonicalize-lgpl' is not in use. (malloc, realloc): For GCC >= 11: Declare nearly always. * lib/malloc.in.h: Remove redundant include. (memalign): For GCC >= 11: Declare also when the platform already declares the function or when the module 'memalign' is not in use. * lib/string.in.h: Include always. (strdup): For GCC >= 11: Declare also when the platform already declares the function or when the module 'strdup' or 'strdup-posix' is not in use. * lib/wchar.in.h: Include always. (wcsdup): For GCC >= 11: Declare also when the platform already declares the function or when the module 'wcsdup' is not in use. * modules/free-posix (Depends-on): Add string, wchar. 2021-08-07 Bruno Haible gnulib-tool: Add support for Automake 1.16.4. Reported by in . * build-aux/test-driver-1.16.3.diff: Renamed from build-aux/test-driver.diff. * build-aux/test-driver.diff: Update to match Automake 1.16.4. * gnulib-tool (func_create_testdir, func_create_megatestdir): Try both .diff files. 2021-08-07 Bruno Haible gnulib-common.m4: Minor style fix. * m4/gnulib-common.m4 (gl_COMMON_BODY): Keep list of attributes sorted alphabetically. 2021-08-07 Bruno Haible uninorm, unistr: Improve GCC 11 allocation-deallocation checking. * lib/uninorm.in.h (uninorm_filter_free): Move declaration up. (uninorm_filter_create): Declare that deallocation must happen through 'uninorm_filter_free'. * lib/unistr.in.h: Include . (u8_strdup, u16_strdup, u32_strdup): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible ialloc: Prepare for allocation-deallocation checking. * lib/ialloc.h (imalloc, irealloc, icalloc): Add comment that deallocation must happen through 'free'. 2021-08-07 Bruno Haible aligned-malloc: Prepare for allocation-deallocation checking. * lib/aligned-malloc.h (aligned_free): Move declaration up. (aligned_malloc): Add comment that deallocation must happen through 'aligned_free'. 2021-08-07 Bruno Haible list, set, oset, map, omap: Prepare allocation-deallocation checking. * lib/gl_list.h (gl_list_create_empty, gl_list_nx_create_empty, gl_list_create, gl_list_nx_create): Add comment that deallocation must happen through 'gl_list_free'. * lib/gl_xlist.h (gl_list_create_empty, gl_list_create): Likewise. * lib/gl_sublist.h (gl_sublist_create, gl_sublist_nx_create): Likewise. * lib/gl_xsublist.h (gl_sublist_create): Likewise. * lib/gl_set.h (gl_set_create_empty, gl_set_nx_create_empty): Add comment that deallocation must happen through 'gl_set_free'. * lib/gl_xset.h (gl_set_create_empty): Likewise. * lib/gl_oset.h (gl_oset_create_empty, gl_oset_nx_create_empty): Add comment that deallocation must happen through 'gl_oset_free'. * lib/gl_xoset.h (gl_oset_create_empty): Likewise. * lib/gl_map.h (gl_map_create_empty, gl_map_nx_create_empty): Add comment that deallocation must happen through 'gl_map_free'. * lib/gl_xmap.h (gl_map_create_empty): Likewise. * lib/gl_omap.h (gl_omap_create_empty, gl_omap_nx_create_empty): Add comment that deallocation must happen through 'gl_omap_free'. * lib/gl_xomap.h (gl_omap_create_empty): Likewise. 2021-08-07 Bruno Haible xgetdomainname: Improve GCC 11 allocation-deallocation checking. * lib/xgetdomainname.h: Include . (xgetdomainname): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible xgetdomainname: Ensure .c file starts with '#include '. * lib/xgetaname-impl.h: New file, based on lib/xgethostname.c. * lib/xgethostname.c: Move implementation to lib/xgetaname-impl.h. * lib/xgetdomainname.c: Include . Include xgetaname-impl.h instead of xgethostname.c. * modules/xgethostname (Files): Add lib/xgetaname-impl.h. * modules/xgetdomainname (Files): Likewise. (Depends-on): Remove xgethostname. Add free-posix, xalloc. 2021-08-07 Bruno Haible xstrndup: Improve GCC 11 allocation-deallocation checking. * lib/xstrndup.h: Include instead of . (xstrndup): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible xstriconveh: Improve GCC 11 allocation-deallocation checking. * lib/xstriconveh.h: Include instead of . (xstr_cd_iconveh, xstr_iconveh): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible xmemdup0: Improve GCC 11 allocation-deallocation checking. * lib/xmemdup0.h: Include instead of . (xmemdup0): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible windows-spawn: Improve GCC 11 allocation-deallocation checking. * lib/windows-spawn.h: Include . (compose_command, compose_envblock): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible string-buffer: Improve GCC 11 allocation-deallocation checking. * lib/string-buffer.h: Include instead of . (sb_dupfree): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible striconveha: Improve GCC 11 allocation-deallocation checking. * lib/striconveha.h: Include instead of . (str_iconveha): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible striconveh: Improve GCC 11 allocation-deallocation checking. * lib/striconveh.h: Include instead of . (str_cd_iconveh, str_iconveh): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible striconv: Improve GCC 11 allocation-deallocation checking. * lib/striconv.h: Include instead of . (str_cd_iconv, str_iconv): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible relocatable-lib-lgpl: Improve GCC 11 allocation-deallocation checking. * lib/relocatable.h: Include . (compute_curr_prefix): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible regex-quote: Improve GCC 11 allocation-deallocation checking. * lib/regex-quote.h: Include instead of . (regex_quote): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible readline: Improve GCC 11 allocation-deallocation checking. * lib/readline.h: Include . (readline): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible read-file: Improve GCC 11 allocation-deallocation checking. * lib/read-file.h: Include instead of . (fread_file, read_file): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible pipe-filter-gi: Improve GCC 11 allocation-deallocation checking. * lib/pipe-filter.h (pipe_filter_gi_close): Move declaration up. (pipe_filter_gi_create): Declare that deallocation must happen through 'pipe_filter_gi_close'. 2021-08-07 Bruno Haible javaversion: Improve GCC 11 allocation-deallocation checking. * lib/javaversion.h: Include . (javaexec_version): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible ino-map: Improve GCC 11 allocation-deallocation checking. * lib/ino-map.h (ino_map_free): Move declaration up. (ino_map_alloc): Declare that deallocation must happen through 'ino_map_free'. 2021-08-07 Bruno Haible hash: Improve GCC 11 allocation-deallocation checking. * lib/hash.h (hash_free): Move declaration up. (hash_initialize, hash_xinitialize): Declare that deallocation must happen through 'hash_free'. 2021-08-07 Bruno Haible hamt: Improve GCC 11 allocation-deallocation checking. * lib/hamt.h (hamt_free): Move declaration up. (hamt_create, hamt_copy): Declare that deallocation must happen through 'hamt_free'. 2021-08-07 Bruno Haible get_progname_of: Improve GCC 11 allocation-deallocation checking. * lib/get_progname_of.h: Include . (get_progname_of): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible fts: Improve GCC 11 allocation-deallocation checking. * lib/fts_.h (fts_open): Declare that deallocation must happen through 'fts_close'. 2021-08-07 Bruno Haible eealloc: Improve GCC 11 allocation-deallocation checking. * lib/eealloc.h (eemalloc): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible di-set: Improve GCC 11 allocation-deallocation checking. * lib/di-set.h (di_set_free): Move declaration up. (di_set_alloc): Declare that deallocation must happen through 'di_set_free'. 2021-08-07 Bruno Haible [x]concat-filename: Improve GCC 11 allocation-deallocation checking. * lib/concat-filename.h: Include . (concatenated_filename, xconcatenated_filename): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible clean-temp: Improve GCC 11 allocation-deallocation checking. * lib/clean-temp.h (cleanup_temp_dir): Move declaration up. (create_temp_dir): Declare that deallocation must happen through 'cleanup_temp_dir'. 2021-08-07 Bruno Haible canon-host: Improve GCC 11 allocation-deallocation checking. * lib/canon-host.h: Include . (canon_host, canon_host_r): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible c-xvasprintf: Improve GCC 11 allocation-deallocation checking. * lib/c-xvasprintf.h: Include . (c_xasprintf, c_xvasprintf): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible bitsetv: Improve GCC 11 allocation-deallocation checking. * lib/bitsetv.h (bitsetv_free): Move declaration up. (bitsetv_alloc, bitsetv_create): Declare that deallocation must happen through 'bitsetv_free'. bitset: Improve GCC 11 allocation-deallocation checking. * lib/bitset.h (bitset_free): Move declaration up. (bitset_alloc, bitset_create): Declare that deallocation must happen through 'bitset_free'. (bitset_obstack_free): Move declaration up. (bitset_obstack_alloc): Declare that deallocation must happen through 'bitset_obstack_free'. 2021-08-07 Bruno Haible argv-iter: Improve GCC 11 allocation-deallocation checking. * lib/argv-iter.h (argv_iter_free): Move declaration up. (argv_iter_init_argv, argv_iter_init_stream): Declare that deallocation must happen through 'argv_iter_free'. 2021-08-07 Bruno Haible argp: Improve GCC 11 allocation-deallocation checking. * lib/argp-fmtstream.h (__argp_fmtstream_free, argp_fmtstream_free): Move declarations up. (__argp_make_fmtstream): Declare that deallocation must happen through '__argp_fmtstream_free'. (argp_make_fmtstream): Declare that deallocation must happen through 'argp_fmtstream_free'. 2021-08-07 Bruno Haible areadlink, areadlinkat: Improve GCC 11 allocation-deallocation checking. * lib/areadlink.h: Include instead of . (areadlink, areadlink_with_size, areadlinkat, areadlinkat_with_size): Declare that deallocation must happen through 'free'. 2021-08-07 Bruno Haible stdio: Improve GCC 11 allocation-deallocation checking. * lib/stdio.in.h (fdopen, fopen, tmpfile): Declare that deallocation must happen through 'fclose'. (popen): Declare that deallocation must happen through 'pclose'. * lib/stdio-safer.h (fopen_safer, tmpfile_safer): Declare that deallocation must happen through 'fclose'. (popen_safer): Declare that deallocation must happen through 'pclose'. (freopen_safer): Declare that arguments must be non-NULL. 2021-08-07 Bruno Haible dirent: Improve GCC 11 allocation-deallocation checking. * lib/dirent.in.h (closedir): Move declaration up. (opendir, fdopendir): Declare that deallocation must happen through 'closedir'. * lib/dirent-safer.h (opendir_safer): Likewise. * lib/opendirat.h (opendirat): Likewise. 2021-08-07 Bruno Haible stdlib, string, wchar: Improve GCC 11 allocation-deallocation checking. * lib/stdlib.in.h (free): Move declaration up. (aligned_alloc, calloc, canonicalize_file_name, malloc, realloc): Declare that deallocation must happen through 'free' (which may actually be 'rpl_free'). * lib/string.in.h: Include . (strdup): Declare deallocation. * lib/wchar.in.h: Include . (wcsdup): Declare deallocation. * lib/malloc.in.h: Include . (memalign): Declare deallocation. 2021-08-07 Bruno Haible year2038: Fix recommendation regarding -m64 flag. * m4/year2038.m4 (gl_YEAR2038_BODY): Recommend to put option --m64 in CC, not in CPPFLAGS and LDFLAGS. 2021-08-07 Bruno Haible quotearg: Tweak last commit. * lib/quotearg.h: Don't include . Remove stray semicolon. 2021-08-07 Bruno Haible malloca: Tweak last commit. * lib/malloca.h: Keep use and declaration of mmalloca close together. 2021-08-07 Bruno Haible dirname-lgpl, sh-quote, system-quote, xstriconv: Clean up includes. * lib/dirname.h: Don't include . * lib/sh-quote.h: Likewise. * lib/system-quote.h: Likewise. * lib/xstriconv.h: Likewise. 2021-08-07 Bruno Haible dfa: Improve GCC 11 allocation-deallocation checking. * lib/dfa.h (dfamust): Declare that deallocation must happen through dfamustfree. 2021-08-06 Paul Eggert glob: merge from glibc * lib/glob-libc.h, lib/glob.c: Merge changes from glibc 2.34. The result should be copyable directly into glibc. * modules/glob-h (glob-libc.gl.h): Also omit __THROWNL. 2021-08-03 Simon Josefsson announce-gen: Print SHA1/B64(SHA256) instead of MD5/SHA1. * build-aux/announce-gen (%digest_classes): Removed. (usage): Doc fix. (print_checksums): Instead of MD5/SHA1, print SHA1 and B64(SHA256), inspired by OpenSSH announcements. maintainer-makefile: Print checksums by default. * top/maint.mk (announcement): Drop --no-print-checksums. 2021-08-02 Paul Eggert manywarnings: enable some malloc warnings * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Stop adding -Wno-analyzer-double-free, -Wno-analyzer-null-dereference, and -Wno-analyzer-use-after-free, as these false alarms don’t seem to be as much of an issue now that we’ve pacified a couple of individual modules and GCC has some bug fixes. dfa: omit unneeded malloc+free Problem indirectly found by Coverity. * lib/dfa.c (enlistnew): New function, with most of the body of the old ‘enlist’. It assumes its arg NEW has been malloced and can be freed eventually. (enlist, addlists, dfamust): Use it. (dfamust): Omit an unnecessary malloc+free. year2038: port to unusual time_t platforms * m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): Check that time_t can go to 2**32 - 1, not to 2**63 - 1, as the former is enough to be year 2038 safe. Unsigned 32-bit time_t (AmigaOS) and signed 40-bit time_t (Unisys ClearPath) have occurred in the wild, and even if Gnulib code is rarely or never ported to them there’s no need to exclude them merely because of year 2038 issues. (gl_YEAR2038_BODY): Adjust messages to match. Use 2**32 - 1, not 2**32, as the test timestamp, to allow unsigned 32-bit time_t. 2021-08-01 Paul Eggert xalloc: no attribute (malloc (free)) on inline The GCC manual says you can’t use __attribute__ ((__malloc__ (free, 1))) on inline functions. Problem discovered when compiling diffutils 3.8 on RHEL 8.4 using a GCC 11.2.0 that I built myself. Perhaps the problem was not discovered earlier because the attribute works with ‘free’ (which is what I was seeing before on Fedora 34) but not with ‘rpl_free’ (seen on RHEL 8.4). Anyway, the GCC manual says it shouldn’t work at all, so don’t use it. * lib/xalloc.h (xnmalloc, xcharalloc): No longer inline. * lib/xmalloc.c (xcharalloc, xnmalloc): Move function bodies here. * m4/gnulib-common.m4 (_GL_ATTRIBUTE_DEALLOC) (_GL_ATTRIBUTE_DEALLOC_FREE): Document that these cannot be used on inline functions, as per the GCC 11.2.1 manual. sigsegv-tests: make more things static * tests/test-sigsegv-catch-segv1.c: * tests/test-sigsegv-catch-stackoverflow1.c: * tests/test-sigsegv-catch-stackoverflow2.c: Declare some functions and variables static, to pacify GCC when warning about external functions missing declarations. maint: improve -fanalyzer malloc checking * lib/backup-internal.h, lib/backupfile.h: * lib/canonicalize.h, lib/dfa.h, lib/dirname.h, lib/exclude.h: * lib/filenamecat.h, lib/malloca.h, lib/modechange.h: * lib/mountlist.h, lib/pagealign_alloc.h, lib/quotearg.h: * lib/readutmp.h, lib/savedir.h, lib/sh-quote.h, lib/system-quote.h: * lib/trim.h, lib/xgetcwd.h, lib/xgethostname.h, lib/xmalloca.h: * lib/xreadlink.h, lib/xstriconv.h, lib/xvasprintf.h: Add malloc-related attributes and include stdlib.h as needed. * lib/dfa.c: Include verify.h. (assume_nonnull): New macro. (dfamust): Use it to pacify GCC. * lib/malloca.c (mmalloca): Redo to pacify GCC, to cut down on the number of casts, and to avoid signed integer overflow on theoretical platforms. * lib/vasnprintf.c, tests/test-argmatch.c: Disable -Wanalyzer-null-argument here. * m4/manywarnings.m4: Update GCC bug report number in comment. 2021-08-01 Jim Meyering regex: pacify GCC 11.2.1's -fanalyzer * lib/regex_internal.c (re_node_set_merge): Add a debug assertion to pacify GCC 11.2.1's -fanalyzer. 2021-08-01 Bruno Haible limits-h tests: Add tests for BOOL_MAX and BOOL_WIDTH. * tests/test-limits-h.c (bool_attrs): New variable. Check value of BOOL_MAX. 2021-07-31 Paul Eggert regex: pacify GCC 11.2 -fanalyzer * lib/regex_internal.c (re_node_set_insert): Add a debug assertion to pacify GCC 11.2 -fanalyzer. maint: pacify GCC 11.2 -fanalyzer in crypto tests * tests/bench-digest.h (main): Report an error after memory exhaustion, instead of using a null pointer. 2021-07-30 Paul Eggert xalloc: add malloc-related function attributes * lib/quotearg.h, lib/xalloc.h: Include stdlib.h, for the benefit of _GL_ATTRIBUTE_RETURNS_NONNULL. * lib/quotearg.h (clone_quoting_options): * lib/xalloc.h (xmalloc, ximalloc, xzalloc, xizalloc, xcalloc) (xicalloc, xrealloc, xirealloc, xireallocarray, x2realloc) (x2nrealloc, xmemdup, ximemdup, xstrdup, xnmalloc, xcharalloc): Add _GL_ATTRIBUTE_DALLOC_FREE and _GL_ATTRIBUTE_RETURNS_NONNULL attributes as appropriate. gnulib-common: update for gcc -Wmismatched-dealloc * m4/gnulib-common.m4 (gl_COMMON_BODY): Define the macros _GL_ATTRIBUTE_DEALLOC and _GL_ATTRIBUTE_DEALLOC_FREE. These can be useful with gcc -Wmismatched-dealloc. gnulib-common: update for C2x 2020-12-11 draft Use blessed-by-draft-standard way to test for [[__deprecated__]] etc.; this is supported by GCC 11 and the fallback code should work fine with GCC 10 and earlier. * m4/gnulib-common.m4 (gl_COMMON_BODY): Define the macro _GL_HAS_C_ATTRIBUTE, and use it instead of __STDC_VERSION__ in deciding whether to use C2x attributes like [[__deprecated__]]. manywarnings: document GCC 11 warnings * build-aux/gcc-warning.spec: Add warnings introduced in GCC 11. None of them require Gnulib code changes, so this is just a documentation change. limits-h: add BOOL_MAX, BOOL_WIDTH * doc/posix-headers/limits.texi (limits.h): Document them. * lib/limits.in.h: Also define CHAR_WIDTH etc. if C2x. (BOOL_MAX, BOOL_WIDTH): New macros, from C2x. * m4/limits-h.m4 (gl_LIMITS_H): Also check BOOL_WIDTH. 2021-07-28 Simon Josefsson maintainer-makefile: Respect cfg.mk setting announcement_Cc_, reverting most of the previous patch. * top/maint.mk (announcement_mail_Cc_stable): Rename back to announcement_Cc_stable. (announcement_Cc_alpha): Rename back to announcement_mail_Cc_alpha. (announcement_Cc_): Renamed from announcement_mail_Cc_. (announcement_mail_headers_stable) (announcement_mail_headers_alpha): Use announcement_Cc_ again. 2021-07-28 Simon Josefsson maintainer-makefile: Fix announcement mail CC's. * top/maint.mk (announcement_Cc_stable): Rename to announcement_mail_Cc_stable. (announcement_Cc_alpha): Rename to announcement_mail_Cc_alpha. (announcement_mail_headers_stable) (announcement_mail_headers_alpha): Use announcement_mail_Cc_ instead of announcement_Cc_. 2021-07-25 Bruno Haible Assume GNU gettext >= 0.17. * modules/vasprintf (Notice): Remove. * modules/xvasprintf (Notice): Remove. * modules/xprintf (Notice): Remove. * modules/error (Notice): Remove. * modules/verror (Notice): Remove. * modules/argp (Notice): Remove. * modules/propername (Notice): Remove. * lib/propername.h: Remove outdated comment. 2021-07-19 Simon Josefsson gendocs.sh: Fix local rendering of HTML manuals. * build-aux/gendocs.sh (htmlarg): Don't use relative URLs. 2021-07-18 Paul Eggert explicit_bzero-tests: pacify GCC better Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2021-07/msg00039.html * tests/test-explicit_bzero.c: Ignore -Wmaybe-uninitialized. (stackbuf): Remove this static pointer, reverting recent change. (do_secret_stuff, test_stack): Revert these related changes too. 2021-07-17 Paul Eggert memrchr-tests: pacify GCC Pacify GCC 11.1.1 20210531 (Red Hat 11.1.1-3) x86-64. * tests/test-memrchr.c: Disable -Wmaybe-uninitialized. explicit_bzero-tests: pacify GCC Redo to pacify -Wmaybe-uninitialized with GCC 11.1.1 20210531 (Red Hat 11.1.1-3) x86-64. * tests/test-explicit_bzero.c (stackbuf): New static pointer. (do_secret_stuff): Use it. (test_stack): Set it to a local buffer. posixtm: pacify latest GCC Also, modernize while I’m at it. * lib/posixtm.c: Include c-ctype.h, idx.h, intprops.h, verify.h instead of stdlib.h. (ISDIGIT): Remove. All uses replaced by c_isdigit. (year, posix_time_parse): Prefer idx_t to size_t. Use assume instead of abort. (posixtime): Do not parse twice; once is enough. That way, we needn’t worry about a bogus warning about strcpy overrunning a buffer from GCC 11.1.1 20210531 (Red Hat 11.1.1-3) x86-64 when coreutils is configured with --enable-gcc-warnings. * modules/posixtm (Depends-on): Add c-ctype, intprops, verify. Remove stpcpy. 2021-07-17 Bruno Haible Don't use '#pragma weak' for thread functions in Linux/glibc>=2.34. Suggested by Florian Weimer in . * m4/threadlib.m4 (gl_PTHREADLIB_BODY): Set gl_pthread_in_glibc and set LIBPMULTITHREAD accordingly. (gl_STDTHREADLIB_BODY): Update comments. (gl_THREADLIB_BODY): Define USE_POSIX_THREADS_FROM_LIBC. * lib/glthread/thread.h (c11_threads_in_use): Define to 1 if all POSIX thread functions are in libc. * lib/glthread/lock.h (c11_threads_in_use): Likewise. * lib/glthread/cond.h (c11_threads_in_use): Likewise. * lib/glthread/tls.h (c11_threads_in_use): Likewise. 2021-07-17 Bruno Haible Fix cross-compilation test results. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): When cross-compiling, include before testing __GNU_LIBRARY__. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Likewise. 2021-07-14 Paul Eggert regex: modernize to newer regex bugset Problem reported by Hiroo Hayashi in: https://lists.gnu.org/r/bug-gnulib/2021-07/msg00024.html * m4/regex.m4 (gl_REGEX): Allow newer glibc behavior for ()0|\1, behavior where the regex compiles but does not match. Test for glibc bug 11053. * tests/test-regex.c (bug_regex11, main): Add casts needed for printf portability. (main): Allow newer glibc behavior for ()0|\1. regex: fix shell quoting problem in configuration * m4/regex.m4 (gl_REGEX): Fix quoting problems. These C programs are put into unquoted here-documents, so $ and \ need to be quoted. 2021-07-08 Paul Eggert select: port better to MinGW Problem reported by Eli Zaretskii in: https://lists.gnu.org/r/bug-gnulib/2021-07/msg00017.html * lib/select.c (rpl_select) [_WIN32 && !__CYGWIN__]: Pass a SOCKET, not a HANDLE, to FD_ISSET. 2021-07-06 Paul Eggert year2038: Add --disable-year2038 option Also, document this stuff better. Suggested by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2021-07/msg00011.html * doc/year2038.texi: Document --disable-year2038. * m4/year2038.m4 (gl_YEAR2038_BODY): Support ‘./configure --disable-year2038’ to disable 64-bit time_t when that is not the default. Arg is now either empty or nonempty (not a shell command) and is evaluated at m4 expansion time instead of at runtime; all callers changed. doc: clarify which module fixes 32-bit time_t * doc/posix-headers/time.texi: Make it clear that the 32-bit time_t problem is addressed by the year2038 module, not by the time module. 2021-07-01 Paul Eggert year2038: support glibc 2.34 _TIME_BITS=64 In glibc 2.34 on Linux kernels where time_t is traditionally 32-bit, defining _FILE_OFFSET_BITS=64 and _TIME_BITS=64 makes time_t 64-bit. Apps must define both macros. Gnulib applications that use either the largefile or the year2038 modules will want this behavior; largefile because it deals with the off_t and ino_t components of struct stat already, and so should also deal with time_t. * NEWS, doc/largefile.texi, doc/posix-headers/time.texi: Mention this. * m4/largefile.m4: Override two macros even in Autoconf 2.70 and later. (_AC_SYS_LARGEFILE_MACRO_VALUE): #undef $1 before #defining it, in case some other Gnulib macro has #defined it. (AC_SYS_LARGEFILE): Use AS_IF and AS_CASE to propagate AC_REQUIREs. Invoke gl_YEAR2038_BODY if we need to set _FILE_OFFSET_BITS=64. * m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): New macro. (gl_YEAR2038_BODY): New macro, with gl_YEAR2038’s old body; this macro is designed to be used directly instead of being AC_REQUIREd. It takes an argument specifying whether 64-bit is required. Set _TIME_BITS=64 if this makes a difference in time_t width when setting _FILE_OFFSET_BITS=64. Do not warn about 32-bit time_t more than once. * modules/largefile (Files): Add year2038.m4. (Depends-on): Require gl_YEAR2038_EARLY. relocatable-prog-wrapper: add m4 files Add .m4 files needed for standalone relocatable-prog-wrapper, so that ‘./gnulib-tool --test relocatable-prog-wrapper’ does not fail with diagnostics like ‘configure.ac:63: error: possibly undefined macro: gl_FUNC_MALLOC_POSIX’. * modules/relocatable-prog-wrapper (Files): Add m4/free.m4, m4/malloc.m4, m4/mempcpy.m4, m4/rawmemchr.m4, m4/realloc.m4. 2021-06-28 Bruno Haible strerror-override: Fix possible compilation error. Reported by Thomas Klausner . * lib/strerror-override.h (GNULIB_defined_strerror_override_macro): New macro. * lib/strerror-override.c (strerror_override): Don't define if GNULIB_defined_strerror_override_macro is set. 2021-06-27 Bruno Haible environ: Fix wrong autoconf test result in C++ mode. * m4/environ.m4 (gt_CHECK_VAR_DECL): Use a typedef'ed type, not an anonymous type. 2021-06-22 Egor Ignatov (tiny change) regex: fix undefined behavior Problem reported by Paul Eggert in: https://lists.gnu.org/r/bug-gnulib/2021-06/msg00115.html * lib/regexec.c (proceed_next_node): Don’t insert already-inserted node. 2021-06-21 Eric Blake sigsegv, sigsegv-tests: Assign my contributions to the FSF. * m4/sigaltstack.m4: Change copyright notice: Write "Copyright (C) FSF" instead of "Copyright (C) Eric Blake". * tests/altstack-util.h: Likewise. * tests/test-sigsegv-catch-stackoverflow1.c: Likewise. * tests/test-sigsegv-catch-stackoverflow2.c: Likewise. 2021-06-20 Bruno Haible unistd: Avoid compilation error in C++ mode on Solaris, HP-UX, mingw. Reported by Eli Zaretskii in . * lib/unistd.in.h (swab): Consider different declarations on Solaris, HP-UX, and old mingw. 2021-06-20 Bruno Haible Sync with GNU gettext. * lib/printf-parse.c: Ignore IN_LIBINTL and IN_LIBASPRINTF. * lib/vasnprintf.c: Ignore IN_LIBINTL. 2021-06-19 Bruno Haible Sync with GNU gettext. * lib/tsearch.c: Ignore IN_LIBINTL. * lib/localename-table.h: Likewise. * lib/localename.c: Ignore IN_LIBINTL in some places. 2021-06-19 Bruno Haible unistd: Improve conflict resolution between gnulib and textstyle.h. * lib/unistd.in.h (GNULIB_overrides_isatty): New macro. 2021-06-19 Bruno Haible stdio: Improve conflict resolution between gnulib and libintl.h. * lib/stdio.in.h (GNULIB_overrides_snprintf, GNULIB_overrides_sprintf, GNULIB_overrides_asprintf, GNULIB_overrides_vasprintf, GNULIB_overrides_vsnprintf, GNULIB_overrides_vsprintf): New macros. 2021-06-19 Bruno Haible declared.sh: Allow parsing 'extern "C"' lines. * build-aux/declared.sh: Don't concatenate lines to an 'extern "C" {' line. 2021-06-19 Bruno Haible unitypes: Fix trouble caused by installed older versions of unitypes.h. * modules/unitypes (configure.ac): Define _UC_RESTRICT through config.h. 2021-06-19 Bruno Haible sigsegv, sigsegv-tests: Assign my contributions to the FSF. * lib/sigsegv.in.h: Change copyright notice: Write "Copyright (C) FSF" instead of "Copyright (C) Bruno Haible". * lib/sigsegv.c: Likewise. * lib/stackvma.h: Likewise. * lib/stackvma.c: Likewise. * m4/sigaltstack.m4: Likewise. * m4/stack-direction.m4: Likewise. * tests/altstack-util.h: Likewise. * tests/mmap-anon-util.h: Likewise. * tests/test-sigsegv-catch-segv1.c: Likewise. * tests/test-sigsegv-catch-segv2.c: Likewise. * tests/test-sigsegv-catch-stackoverflow1.c: Likewise. * tests/test-sigsegv-catch-stackoverflow2.c: Likewise. 2021-06-18 Darren Kenny (tiny change) argp: Avoid possible NULL access in argp_help. Reported by Coverity. The invocation chain is: argp_help -> _help -> fill_in_uparams -> validate_uparams. * lib/argp-help.c (validate_uparams): Don't crash if state == NULL. 2021-06-16 Bruno Haible tsearch: Relicense under LGPLv2+. * modules/tsearch (License): Change to LGPLv2+. * lib/tsearch.c: Update license notice. 2021-06-15 Bruno Haible pipe-filter-ii tests: Fix long-standing failure on native Windows. * tests/test-pipe-filter-ii2-main.c: Include binary-io.h. (main): Avoid NL to CRLF conversion on standard output. * tests/test-pipe-filter-ii2-child.c: Include , binary-io.h. (main): Avoid NL to CRLF conversion on standard output. 2021-06-15 Bruno Haible xnanosleep: Improve module description. * modules/xnanosleep (Description): Improve. * lib/xnanosleep.h: Add comment. Make includable from C++. * lib/xnanosleep.c: Update comment. 2021-06-15 Bruno Haible xfreopen: Improve module description. * modules/xfreopen (Description): Improve. * lib/xfreopen.h: Add comments. Make includable from C++. * lib/xfreopen.c: Update comment. 2021-06-14 Paul Eggert idx: new printf/scanf length modifier macro * lib/idx.h (pIDX): New macro. 2021-06-13 Bruno Haible Align 2011-11-26 patch to 2021-04-11 patch (regression from 2021-04-11). Reported by Paul Eggert. * m4/unistd_h.m4 (gl_UNISTD_H_REQUIRE_DEFAULTS): Also initialize GNULIB_UNISTD_H_GETOPT variable. * modules/getopt-posix (configure.ac): Set GNULIB_UNISTD_H_GETOPT variable. * modules/unistd (Makefile.am): Rely on ${gl_include_guard_prefix} processing done by gnulib-tool since 2021-04-11. * gnulib-tool: Revert last change. * pygnulib/GLEmiter.py: Likewise. 2021-06-13 Paul Eggert * lib/stack.h (_GL_STACK_PREFIX): Omit stray semicolon. getopt-gnu: port back to Solaris 10 * gnulib-tool (func_emit_lib_Makefile_am) (func_emit_tests_Makefile_am): Don’t substitute things like $(GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT), as this mishandles unistd and getopt-gnu, which breaks ‘make check’ on Solaris 10 with getopt-gnu. * pygnulib/GLEmiter.py (lib_Makefile_am, tests_Makefile_am): Likewise, albeit hackier since I did not test this and so went with a trivial hack instead. 2021-06-13 Bruno Haible ialloc: Put appropriate license notice in source files. * lib/ialloc.h: Use LGPLv3+ notice. * lib/ialloc.c: Likewise. 2021-06-11 Paul Eggert xalloc: new idx_t-based allocators This is for code that prefers to use idx_t for sizes. * lib/basename.c (base_name): * lib/dfa.c (mbs_to_wchar, state_index, dfaoptimize, dfaanalyze) (icatalloc, enlist, allocmust, dfamust): * lib/exclude.c (struct exclude_pattern, free_exclude_segment) (file_pattern_matches, add_exclude, add_exclude_fp): * lib/getusershell.c (line_size, readname): * lib/linebuffer.c (readlinebuffer_delim): * lib/linebuffer.h (struct linebuffer): * lib/readtokens.c (readtoken, readtokens): * lib/readutmp.c (read_utmp): * lib/savedir.c (streamsavedir): * lib/stack.h (_GL_STACK_TYPE, _GL_STACK_PREFIX): * lib/userspec.c (parse_with_separator): * lib/xgethostname.c (XGETANAME): Prefer idx_t to size_t for indexes, and use idx_t-related allocators. * lib/basename.c: Do not include xstrndup.h. (basename): Simplify by always using memcpy. * lib/xalloc.h (ximalloc, xizalloc, xicalloc, xirealloc) (xireallocarray, ximemdup, ximemdup0) [GNULIB_XALLOC]: New decls. (x2nrealloc): Now just a decl, as the body is moved into xmalloc.c. * lib/xmalloc.c: Include ialloc.h. Rename some local parameters to be consistent with the .h files. (nonnull): New static function. (xmalloc, xcalloc): Simplify by using nonnull. (ximalloc, xirealloc, xireallocarray, xizalloc, xicalloc) (ximemdup, ximemdup0): New functions. (x2nrealloc): Moved here from xalloc.h. * modules/xalloc (Depends-on): Add ialloc. * modules/dirname (Depends-on): Removbe xstrndup. * modules/linebuffer (Depends-on): Add idx. ialloc: new module * lib/ialloc.c, lib/ialloc.h, modules/ialloc: New files. exclude: improve wide-character hashing * lib/exclude.c (string_hasher_ci): Take the modulo at the end rather than each time a wide character is retrieved; this should be more efficient and should hash better. 2021-06-11 Bruno Haible Make message in last commit more precise. Suggested by Eric Blake. * gnulib-tool (func_emit_tests_Makefile_am): Add more precision to 'check-notice' message. 2021-06-10 Bruno Haible Clarify where to report test failures from Gnulib tests. * gnulib-tool (func_emit_tests_Makefile_am): Emit a dependency of 'check-am' on 'check-notice' that prints a notice. 2021-06-10 Bruno Haible Clarify that compiler warnings in the Gnulib tests can be ignored. * gnulib-tool (func_emit_tests_Makefile_am): Emit overrides for CFLAGS and CXXFLAGS. Emit a dependency of 'all' on 'all-notice' that prints a notice. (func_emit_initmacro_start): Add a second argument. If it is true, emit code to require gl_CC_ALLOW_WARNINGS and gl_CXX_ALLOW_WARNINGS. (func_import, func_create_testdir): All callers updated. * m4/gnulib-common.m4 (gl_CC_ALLOW_WARNINGS, gl_CXX_ALLOW_WARNINGS): New macros. 2021-06-09 Bruno Haible sigsegv tests: Hide a null pointer from the compiler's optimizations. Patch by Paul Eggert. * tests/test-sigsegv-catch-stackoverflow2.c (null_pointer_to_volatile_int): New variable. (main): Use it. 2021-06-07 Bruno Haible get_ppid_of: Add support for DragonFly BSD. * lib/get_ppid_of.c: Treat DragonFly BSD like FreeBSD. 2021-06-07 Bruno Haible sigsegv: Document context type for DragonFly BSD. * lib/sigsegv.in.h (stackoverflow_context_t): On DragonFly BSD, it is a pointer to 'struct sigcontext'. 2021-06-07 Bruno Haible dynarray, scratch_buffer: Fix VPATH builds (regression from yesterday). * modules/dynarray (configure.ac): Invoke AC_PROG_MKDIR_P. (Makefile.am): Create malloc/ directory before creating malloc/dynarray.gl.h and malloc/dynarray-skeleton.gl.h. * modules/scratch_buffer (configure.ac): Invoke AC_PROG_MKDIR_P. (Makefile.am): Create malloc/ directory before creating malloc/scratch_buffer.gl.h. 2021-06-07 Bruno Haible ptsname_r: Add support for DragonFly BSD 6.0. * lib/ptsname_r.c (__ptsname_r): Add implementation for DragonFly BSD. * tests/test-ptsname_r.c (main): Treat Dragonfly BSD like Solaris. 2021-06-07 Bruno Haible Avoid some test failures on DragonFly BSD 6.0. * tests/test-c32isalnum.c (main): On Dragonfly BSD, disable tests that fail. * tests/test-c32isalpha.c (main): Likewise. * tests/test-c32islower.c (main): Likewise. * tests/test-c32isupper.c (main): Likewise. * tests/test-ptsname.c (main): Treat Dragonfly BSD like Solaris. 2021-06-07 Kamil Dudka mountlist: recognize fuse.portal as dummy file system * lib/mountlist.c [ME_DUMMY_0]: Add "fuse.portal" as a dummy file system (used in flatpak implementations). 2021-06-07 Bruno Haible host-os: Add support for DragonFly BSD. * m4/host-os.m4 (gl_HOST_OS): On DragonFly BSD, set HOST_OPERATING_SYSTEM to "DragonFly BSD", not "Dragonfly". 2021-06-07 Bruno Haible thread: Fix test link error on DragonFly BSD 6.0. * lib/glthread/thread.c (gl_thread_create): Moved to here... * lib/glthread/thread.h (gl_thread_create): ...from here. (_GLTHREAD_THREAD_INLINE): Remove macro. Remove _GL_INLINE_HEADER_BEGIN/END invocations. 2021-06-06 Bruno Haible sigsegv: Avoid a gcc warning "declaration of 'sig' shadows a parameter". Reported by Dmitry V. Levin in . * lib/sigsegv.c (sigsegv_handler): Use a different local variable name than 'sig'. 2021-06-06 Bruno Haible scratch_buffer: Avoid conflict with prepr. macros owned by the system. * lib/scratch_buffer.h: Don't include . Define _GL_LIKELY, _GL_UNLIKELY. Include malloc/scratch_buffer.gl.h instead of malloc/scratch_buffer.h. * modules/scratch_buffer (Depends-on): Add builtin-expect. (Makefile.am): Arrange to create malloc/scratch_buffer.gl.h from malloc/scratch_buffer.h. 2021-06-06 Bruno Haible dynarray: Avoid conflict with preprocessor macros owned by the system. * lib/dynarray.h: Don't include . Define _GL_LIKELY, _GL_UNLIKELY. Include malloc/dynarray.gl.h instead of malloc/dynarray.h. Include malloc/dynarray-skeleton.gl.h instead of malloc/dynarray-skeleton.c. * modules/dynarray (Depends-on): Add builtin-expect. (Makefile.am): Arrange to create malloc/dynarray.gl.h from malloc/dynarray.h and malloc/dynarray-skeleton.gl.h from malloc/dynarray-skeleton.c. 2021-06-06 Bruno Haible glob-h: Avoid conflict with preprocessor macros owned by the system. This fixes a compilation error on DragonFly BSD 6.0. * lib/glob.in.h: Don't include . Don't define __USE_GNU. Include glob-libc.gl.h instead of glob-libc.h. * modules/glob-h (Makefile.am): Arrange to create glob-libc.gl.h from glob-libc.h. * lib/libc-config.h: Add comment. 2021-06-06 Dmitry V. Levin * tests/test-regex.c (tests): Add test cases for *+ and ** regressions fixed by the previous commit. * tests/test-regex.c (tests): Remove the comment saying that some tests are not used. That comment was copied along with tests from glibc where some of these tests are commented out. 2021-06-06 Egor Ignatov (tiny change) * lib/regexec.c (set_regs): Pop if CUR_NODE has already been checked only when we have a fail stack. 2021-06-05 Bruno Haible lib-symbol-visibility: Make configure check work for newer GCC. Reported by Ozkan Sezer in . * m4/visibility.m4 (gl_VISIBILITY): Add a function definition for each declaration in the test program. 2021-06-05 Bruno Haible vasnprintf: Don't leak memory when memory allocation fails. Found by Coverity. Reported by Mike Fabian in . * lib/vasnprintf.c (VASNPRINTF): In places where a local variable points to heap-allocated storage, free that storage before doing 'goto out_of_memory;'. 2021-06-04 Bruno Haible gnulib-tool: Stop doing license notice replacements. * gnulib-tool: Don't document --more-symlinks and --more-hardlinks any more. (do_copyrights): Remove variable. (func_import): Don't perform license updates on imported files any more. * pygnulib/GLInfo.py: Don't document --more-symlinks any more. * doc/gnulib-intro.texi (Copyright): Document the new situation. * doc/gnulib.texi (Module description): Likewise. * NEWS: Mention the change. 2021-06-04 Bruno Haible git-merge-changelog: Fix license. * modules/git-merge-changelog (License): Change back to GPL. * lib/git-merge-changelog.c: Use a GPLv3+ notice. 2021-06-04 Bruno Haible Put GPLv3+ notices in source files where appropriate. * lib/*.{h,c}: Use GPLv3+ notice whenever the module description says so. * build-aux/pmccabe.css: Likewise. 2021-06-04 Bruno Haible Put LGPLv3+ notices in source files where appropriate. * lib/*.{h,c}: Use LGPLv3+ notice whenever the module description says so. 2021-06-04 Bruno Haible Put "LGPLv3+ or GPLv2+" notices in source files where appropriate. * lib/**.{h,c,gperf}: Use "LGPLv3+ or GPLv2+" notice whenever the module description says so. 2021-06-04 Bruno Haible Generate correct license notices in libunistring files. * lib/gen-uni-tables.c (output_library_license, output_tests_license): New functions. (output_predicate, output_category, output_combclass, output_bidi_category, output_decimal_digit, output_digit, output_numeric, output_mirror, output_joining_type, output_joining_group, output_scripts, output_scripts_byname, output_blocks, output_ident_category, output_lbrk_tables, output_wbrk_tables, output_gbp_table, output_decomposition_tables, output_composition_tables, output_simple_mapping, output_casing_rules): Invoke output_library_license. (output_predicate_test, output_decimal_digit_test, output_digit_test, output_numeric_test, output_joining_type_test, output_joining_group_test, output_gbp_test, output_simple_mapping_test): Invoke output_tests_license. * lib/uni*/*.h, lib/uni*/*.gperf: Regenerated. * tests/uni*/*.h: Likewise. 2021-06-04 Bruno Haible Generate correct license notices in libunistring files. * lib/uniname/gen-uninames.lisp (main): Emit a copyright and license notice. * lib/uniname/uninames.h: Regenerated. 2021-06-04 Bruno Haible Put LGPLv2+ notices in source files where appropriate. * lib/**.{h,c,gperf}: Use LGPLv2+ notice whenever the module description says so. 2021-06-04 Bruno Haible Put "unlimited" notices in source files where appropriate. * build-aux/prefix-gnulib-mk: Use "unlimited" notice, since the module description says so. 2021-06-04 Bruno Haible Put public domain notices in source files where appropriate. * lib/{alloca.c,atexit.c,memmove.c}: Use public domain notice. 2021-06-04 Bruno Haible Revamp check-copyright script. * check-copyright: Search only the first 50 lines of each file. Recognize 'LGPLv3+ or GPLv2+', 'unlimited', and 'public domain' license notices. For files that are part of several modules, consider the weakest among the licenses. Allocate more room for the first output column. 2021-06-04 Bruno Haible gnupload, git-merge-changelog: Fix module description. * gnulib-tool (func_import, func_create_testdir): Treat 'GPLv2+ build tool' like 'GPLed build tool'. * pygnulib/GLImport.py (prepare): Likewise. * modules/gnupload (License): Change to 'GPLv2+ build tool'. * modules/git-merge-changelog (License): Change to GPLv2+. 2021-06-04 Bruno Haible New directory with license notices. * etc/license-notices/*: New files. 2021-05-30 Paul Eggert reallocarray-tests: port to weird platforms * tests/test-reallocarray.c (main): Don’t assume that PTRDIFF_MAX / 2 + 1 <= SIZE_MAX. POSIX allows platforms where this isn’t true, though I don’t know of any examples. dfa, etc.: prefer xreallocarray to older name * lib/dfa.c (addtok_mb, realloc_trans_if_necessary, enlist): * lib/readtokens.c (readtokens): * tests/uninorm/test-u32-normalize-big.c: (read_normalization_test_file): Prefer xreallocarray to the equivalent xnrealloc. The newer name follows the glibc lead of ‘reallocarray’. 2021-05-30 Bruno Haible Write 'LGPLv3+ or GPLv2+' instead of 'LGPLv3+ or GPLv2'. * modules/* (License): Change. * gnulib-tool (func_import, func_create_testdir): Likewise. 2021-05-29 Paul Eggert sigsegv: Port to Solaris 11 Problem reported by Kiyoshi KANAZAWA in: https://lists.gnu.org/r/bug-m4/2021-05/msg00020.html * lib/stackvma.c (_FILE_OFFSET_BITS): #undef on Solaris and Android. 2021-05-24 Bruno Haible c-stack: Document another restriction. Triggered by a discussion with Paul Eggert. * lib/c-stack.h: Mention that ACTION should not use nested functions. 2021-05-22 Bruno Haible stdio: Fix compilation error on DragonFly BSD. * lib/stdio.in.h (fcloseall): Treat DragonFly BSD like FreeBSD. 2021-05-22 Larkin Nickle (tiny change) getprogname: port to Tru64 * lib/getprogname.c: Treat __osf__ like __sgi, except with /proc/123 instead of /proc/pinfo/123. 2021-05-21 Paul Eggert sigsegv: don’t assume SIGSTKSZ is a constant * m4/sigaltstack.m4 (SV_SIGALTSTACK): Don’t attempt to override SIGSTKSZ. Instead, use an array that is plenty large, while checking that it’s large enough. Also, be consistent about putting that array in static storage rather than on the stack. * tests/altstack-util.h (SIGSTKSZ): Don’t define. (MYSTACK_SIZE): New macro, used instead of SIGSTKSZ. (mystack_storage, mystack): Now static. (prepare_alternate_stack) [SIGSTKSZ]: Check that MYSTACK_SIZE is large enough. 2021-05-20 Paul Eggert fstatat: doc improvement * doc/posix-functions/fstatat.texi (fstatat): Mention AT_EMPTY_PATH when talking about empty strings. 2021-05-18 Bruno Haible c-stack: Support catching stack overflow on most platforms without libsigsegv. * lib/c-stack.c: Remove all Solaris-specific code. Include always. * m4/c-stack.m4: Remove all Solaris-specific code. (gl_C_STACK): Test $with_libsigsegv from module 'sigsegv'. * modules/c-stack (Files): Remove m4/libsigsegv.m4. (Depends-on): Add sigsegv. Remove havelib, intprops, inttypes, mempcpy, sigaction, stdbool. 2021-05-16 Bruno Haible sigsegv, c-stack: Avoid compilation error with glibc >= 2.34. * lib/sigsegv.in.h (SIGSTKSZ): On glibc systems, redefine to a suitable constant. * m4/sigaltstack.m4 (SV_SIGALTSTACK): Likewise. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Likewise. 2021-05-16 Bruno Haible sigsegv: Add tests. * tests/test-sigsegv-catch-segv1.c: New file, from GNU libsigsegv with modifications. * tests/test-sigsegv-catch-segv2.c: Likewise. * tests/test-sigsegv-catch-stackoverflow1.c: Likewise. * tests/test-sigsegv-catch-stackoverflow2.c: Likewise. * tests/altstack-util.h: Likewise. * tests/mmap-anon-util.h: Likewise. * modules/sigsegv-tests: New file. sigsegv: New module. * lib/sigsegv.in.h: New file, from GNU libsigsegv with modifications. * lib/sigsegv.c: Likewise. * lib/stackvma.h: Likewise. * lib/stackvma.c: Likewise. * m4/sigaltstack.m4: Likewise. * m4/stack-direction.m4: Likewise. * modules/sigsegv: New file. 2021-05-15 Pádraig Brady realloc-gnu: avoid glibc MALLOC_CHECK_ issue * tests/test-realloc-gnu.c (main): if MALLOC_CHECK_ env var is set then don't check ENOMEM is returned from realloc(). See https://sourceware.org/bugzilla/show_bug.cgi?id=27870 Note it doesn't suffice to unsetenv() this var within the program, as the hooks have already been set up at that stage. 2021-05-14 Paul Eggert c-stack: work around Solaris 11 bugs Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2021-05/msg00062.html * lib/c-stack.c: Always include sigsegv.h if HAVE_LIBSIGSEGV. (USE_LIBSIGSEGV): Do not use libsigsegv if the kernel has the si_addr bug and libsigsegv is too old to work around it. (segv_handler) [!USE_LIBSIGSEGV]: Do not trust si_addr if BOGUS_SI_ADDR_UPON_STACK_OVERFLOW. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Define BOGUS_SI_ADDR_UPON_STACK_OVERFLOW on Solaris 2.11 SPARC. And do not define HAVE_XSI_STACK_OVERFLOW_HEURISTIC. 2021-05-14 Bruno Haible fcntl tests: Avoid failure in MacPorts. Reported by Nicholas Gaya in . * tests/test-fcntl.c (main): Close fd 10 before assuming that it is closed. * tests/test-execute-main.c: Update comment. 2021-05-14 Bruno Haible linked-list-unportable-test: New module. * modules/linked-list-unportable-tests: New file, based on modules/linked-list-tests. * modules/linked-list-tests: Remove the unportable tests from here. Depend on linked-list-unportable-tests. 2021-05-14 Simon Josefsson valgrind-tests: Doc fix and introduce AM_VALGRINDFLAGS. * doc/valgrind-tests.texi (Using valgrind automatically): Clarify when the parallel vs serial test harness is used, suggested by Bruno Haible . * m4/valgrind-tests.m4: Add VALGRIND_PROGRAM and AM_VALGRINDFLAGS. 2021-05-14 Bruno Haible malloc-gnu, realloc-gnu, calloc-gnu: Ensure errno gets set to ENOMEM. * m4/malloc.m4 (gl_CHECK_MALLOC_POSIX): Set gl_cv_func_malloc_posix to 'no' also on Solaris. 2021-05-14 Bruno Haible DEPENDENCIES: Mention the requirement for 'join'. Reported by Simon Josefsson in . * DEPENDENCIES: Mention 'join' among the core POSIX utilities. 2021-05-14 Bruno Haible *alloc-gnu tests: Use ASSERT macro. * tests/test-malloc-gnu.c: Include "macros.h". (main): Use ASSERT. * tests/test-calloc-gnu.c: Include "macros.h". (main): Use ASSERT. * tests/test-realloc-gnu.c: Include "macros.h". (main): Use ASSERT. * tests/test-reallocarray.c: Include "macros.h". (main): Use ASSERT. * modules/malloc-gnu-tests (Files): Add tests/macros.h. * modules/calloc-gnu-tests (Files): Likewise. * modules/realloc-gnu-tests (Files): Likewise. * modules/reallocarray-tests (Files): Likewise. 2021-05-14 Simon Josefsson valgrind-tests: Fix 'sh: yes: unknown operand' error. * m4/valgrind-tests.m4: Protect variable usage. 2021-05-14 Simon Josefsson valgrind-tests: Fix LOG_VALGRIND when valgrind is missing. * m4/valgrind-tests.m4: Clear all variables when missing. 2021-05-14 Simon Josefsson valgrind-tests: Better option handling. * m4/valgrind-tests.m4: Support new variables VALGRINDFLAGS and DEFAULT_VALGRINDFLAGS. * doc/valgrind-tests.texi (Running self-tests under valgrind): Improve. 2021-05-14 Markus Mützel (tiny change) windows-spawn: Don't assume that UNICODE is not defined. * lib/windows-spawn.h (compose_handles_block): Use type STARTUPINFOA. 2021-05-13 Bruno Haible getrandom: Produce a better error code. Reported by Paul Eggert in . * lib/getrandom.c (getrandom): When open() fails with an error that does not indicate the absence of the file, fail with that error code, not with ENOSYS. 2021-05-13 Bruno Haible fstatat: Document a glibc 2.7 bug. * doc/posix-functions/fstatat.texi: Document an old glibc 2.7 bug. 2021-05-13 Bruno Haible posix_spawn, posix_spawnp: Fix build error on Minix 3.3. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): If posix_spawn does not exist but is declared, set REPLACE_POSIX_SPAWN. * doc/posix-functions/posix_spawn.texi: Update platforms list. * doc/posix-functions/posix_spawnp.texi: Likewise. 2021-05-13 Bruno Haible reallocarray tests: Avoid test failure on NetBSD. * tests/test-reallocarray.c (main): Accept EOVERFLOW error code. 2021-05-12 Bruno Haible gnulib-tool: Fail properly if the 'join' program is not found. Reported by Simon Josefsson in . * gnulib-tool: Bail out early of the 'join' program is not found. 2021-05-09 Bruno Haible {realloc,calloc}-gnu: Fix autoconf macro (regression 2021-04-18). * m4/realloc.m4 (gl_FUNC_REALLOC_POSIX): Don't reset REPLACE_REALLOC to 0 if it is already 1 after gl_FUNC_REALLOC_GNU was executed. * m4/calloc.m4 (gl_FUNC_CALLOC_POSIX): Don't reset REPLACE_CALLOC to 0 if it is already 1 after gl_FUNC_CALLOC_GNU was executed. {malloc,realloc,calloc}-gnu: Fix autoconf macro (regression 2021-04-18). * m4/malloc.m4 (gl_FUNC_MALLOC_GNU): Don't assume that _AC_FUNC_MALLOC_IF expands to a single shell statement. * m4/realloc.m4 (gl_FUNC_REALLOC_GNU): Don't assume that _AC_FUNC_REALLOC_IF expands to a single shell statement. * m4/calloc.m4 (gl_FUNC_CALLOC_GNU): Don't assume that _AC_FUNC_CALLOC_IF expands to a single shell statement. 2021-05-09 Bruno Haible malloc-gnu, realloc-gnu, calloc-gnu: Ensure errno gets set on IRIX. * m4/malloc.m4 (gl_CHECK_MALLOC_POSIX): Require AC_CANONICAL_HOST. Set gl_cv_func_malloc_posix to 'no' also on IRIX. malloc-gnu, realloc-gnu, calloc-gnu tests: Verify errno is set. * tests/test-malloc-gnu.c: Include . (main): Verify that, when an allocation larger than PTRDIFF_MAX failed, errno is ENOMEM. * tests/test-realloc-gnu.c: Likewise. * tests/test-calloc-gnu.c: Likewise. 2021-05-09 Bruno Haible getrandom: Fail with ENOSYS when the system has no randomness source. * lib/getrandom.c (getrandom): When open() fails, set errno to ENOSYS. 2021-05-09 Bruno Haible free tests: Avoid test failure on glibc < 2.15. * tests/test-free.c (main): Skip the hairy test on glibc < 2.15. 2021-05-08 Bruno Haible Fix build error when libintl is installed. * modules/posix_spawn_file_actions_addchdir-tests (Makefile.am): Link test-posix_spawn-chdir with libintl. * modules/posix_spawn_file_actions_addfchdir-tests (Makefile.am): Link test-posix_spawn-fchdir with libintl. 2021-05-07 Bruno Haible Fix build when an older libunistring is installed (regr. 2020-02-23). * modules/unitypes (configure.ac): Arrange to generate the .h file if the installed one is from a version < 0.9.11. * modules/unicase/base (configure.ac): Likewise. * modules/uniconv/base (configure.ac): Likewise. * modules/unilbrk/base (configure.ac): Likewise. * modules/uninorm/base (configure.ac): Likewise. * modules/unistdio/base (configure.ac): Likewise. * modules/unistr/base (configure.ac): Likewise. * modules/uniwbrk/base (configure.ac): Likewise. * modules/uniwidth/base (configure.ac): Likewise. * modules/unictype/base (configure.ac): Arrange to generate the .h file if the installed one is from a version < 0.9.8. * modules/unigbrk/base (configure.ac): Likewise. 2021-04-30 Bruno Haible immutable: Fix crash when immmalloc() fails. Found by GCC 11 '-fanalyzer'. * lib/immutable.c (immstrdup): Don't crash when immmalloc() fails. 2021-04-30 Bruno Haible supersede: Fix crash when malloc() fails. Found by GCC 11 '-fanalyzer'. * lib/supersede.c (create_temp_file): Don't crash when malloc() fails. 2021-04-27 Paul Eggert libc-config: fix include problem on older Debian https://lists.gnu.org/r/bug-gnulib/2021-04/msg00198.html * lib/cdefs.h: Use __GNULIB_CDEFS, not __GLIBC__, to determine whether to include the bits/* files. * lib/libc-config.h (__WORDSIZE): Remove. (__GNULIB_CDEFS): New macro. 2021-04-26 Paul Eggert gnulib-tool: port better to current Autoconf * doc/gnulib-tool.texi (Initial import): Don’t mention AC_PROG_CC_STDC as it’s deprecated in current Autoconf. * gnulib-tool (func_done_dir): Suggest replacing AC_PROG_CC_STDC and AC_PROG_CC_C99, as per current Autoconf. 2021-04-25 Paul Eggert reallocarray: a bit more tuning * lib/reallocarray.c: Include intprops.h. (reallocarray): Use INT_MULTIPLY_WRAPV instead of xalloc_oversized, as it now suffices and is likely a bit more efficient (five fewer machine insns on Ubuntu 20.10 x86-64). * modules/reallocarray (Depends-on): Depend on intprops, not xalloc-oversized. Use conditional dependencies to avoid building realloc-gnu when not needed. reallocarray: don’t crash if item size is 0 This problem affects only platforms where xalloc_oversized divides a number by the size arg. Fix this by defining xalloc_oversized (n, s) to work even if s == 0. * lib/malloca.h, lib/xalloc-oversized.h: Document new behavior. * lib/xalloc-oversized.h (__xalloc_oversized): Do not crash if S==0. * tests/test-reallocarray.c (main): Test for the bug. 2021-04-24 Paul Eggert xmalloca, etc.: avoid unlikely trap * lib/malloca.h (nmalloca): * lib/xmalloca.h (xnmalloca): Use size_t, not ptrdiff_t, to avoid implementation-defined behavior (which could include a trap) if N is 0 and S exceeds PTRDIFF_MAX. * lib/xalloc-oversized.h: Adjust comment to match. xmalloca, etc.: fix some xalloc-oversized issues * lib/malloca.h (nmalloca): * lib/xmalloca.h (xnmalloca): Convert S to ptrdiff_t to avoid arithmetic overflow if N and S are both narrower than ptrdiff_t. * lib/xalloc-oversized.h (xalloc_oversized): Don’t say that args must be ptrdiff_t or size_t or wider. The macro returns the correct answer even when that is not the case, and it’s the caller’s responsibility to avoid howlers like (xalloc_oversized (n, s) ? NULL : malloc (n * s)) when N and S are both narrower than ptrdiff_t and size_t. Add a comment to that effect. * lib/xmalloca.h: Include xalloc-oversized.h, since this file uses xalloc_oversized. Add comments about side effects and avoid unnecessary parens. * modules/xmalloca (Depends-on): Add xalloc-oversized. reallocarray: check for ptrdiff_t overflow * doc/glibc-functions/reallocarray.texi (reallocarray): Mention ptrdiff_t overflow. * lib/reallocarray.c (reallocarray): Reindent as per usual GNU. * lib/stdlib.in.h (reallocarray): Allow reallocarray to be replaced. * m4/reallocarray.m4 (gl_FUNC_REALLOCARRAY): Check for ptrdiff_t overflow. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Set up REPLACE_REALLOCARRAY. * modules/reallocarray (Files): Add malloc.m4. (configure.ac): Also test REPLACE_REALLOCARRAY. * modules/reallocarray-tests (Depends-on): Add stdint. * modules/stdlib (stdlib.h): Substitute REPLACE_REALLOCARRAY. * tests/test-reallocarray.c: Include stdint.h. (main): Check for ptrdiff_t overflow. calloc-gnu-tests: add overflow tests * tests/test-calloc-gnu.c (identity): New function, replacing ‘eight’. (main): Do 2 * log2(SIZE_MAX) tests instead of just two tests. Don’t bother to free on failure. 2021-04-22 Paul Eggert libc-config: port better to Fedora Rawhide Problem reported by Eric Blake in: https://lists.gnu.org/r/bug-gnulib/2021-04/msg00181.html * lib/cdefs.h: Make this closer to glibc, so that we can merge Gnulib into glibc here. (__attribute_maybe_unused__): Make identical to glibc’s definition, though with an additional comment. (__attribute_nonnull__): Add clarifying comment. Make inclusion of bits/wordsize.h, bits/long-double.h dependent on __GLIBC__, not on !__WORDSIZE. * lib/libc-config.h: Use __attribute_nonnull__, not __attribute_maybe_unused__, to detect whether to include sys/cdefs.h. 2021-04-21 Paul Eggert realloc: port to AIX 7.1 * lib/realloc.c (_GL_USE_STDLIB_ALLOC): Do not define. This module relies on GNU malloc. This fixes a test failure on AIX 7.1. malloc: simplify * lib/malloc.c: Omit unnecessary "#undef malloc". I recently introduced it by mistake. This module defines _GL_USE_STDLIB_ALLOC and so malloc isn’t redefined to rpl_malloc. malloca: avoid ptrdiff_t overflow * lib/malloca.c: Include idx.h, intprops.h. (mmalloca): Check for ptrdiff_t overflow. Since this module uses _GL_USE_STDLIB_ALLOC, it cannot assume GNU malloc semantics. * modules/malloca (Depends-on): Add idx, intprops. careadlinkat: avoid ptrdiff_t overflow * lib/careadlinkat.c: Include idx.h, minmax.h. (readlink_stk): Avoid ptrdiff_t overflow in object allocation. Since this module uses arbitrary allocators (including stdlib_allocator), it cannot assume GNU malloc semantics. * modules/careadlinkat (Depends-on): Add idx, minmax. execute-tests: pacify compiler * tests/test-execute-main.c (main): Use 0x7DEADBEE rather than 0xDEADBEEF for nonces, to avoid provoking AIX XLC compiler warning that the latter is out of int range. 2021-04-20 Paul Eggert malloc-gnu-tests, etc.: use volatile for clang In some more test locations, store the result of malloc etc. into a volatile pointer so that clang doesn’t optimize away the malloc and thus bypass the test. This fixes a malloc-gnu test failure on macOS 11.2.3 with clang 12.0.0 on ARM. * tests/test-alloca-opt.c (do_allocation): * tests/test-malloc-gnu.c (main): * tests/test-malloca.c (do_allocation): * tests/test-realloc-gnu.c (main): * tests/test-reallocarray.c (main): * tests/test-aligned-malloc.c (main): * tests/test-aligned_alloc.c (main): Store malloc etc. results into a volatile pointer. 2021-04-18 Paul Eggert malloc-gnu-tests: pacify -Walloc-size-larger-than * tests/test-malloc-gnu.c (main): * tests/test-realloc-gnu.c (main): Hide true intentions from GCC, to prevent diagnostics like “warning: argument 1 value ‘9223372036854775808’ exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]”. safe-alloc: fix pointer implementation The old implementation assumed that all pointers use the same internal representation, but the C standard doesn’t guarantee this. Use void * (pointer) not void ** (pointer-to-pointer) for the internal functions’ API. The internal functions now return NULL if and only if they failed, and the macros translate that into -1 or 0 to satisfy the existing API. * doc/safe-alloc.texi (Safe Allocation Macros): Mention overflow. * lib/safe-alloc.c: Major rewrite. Now this simply defines SAFE_ALLOC_INLINE and includes safe-alloc.h. * lib/safe-alloc.h: Include stddef.h, not stdlib.h. (SAFE_ALLOC_INLINE): New macro; use Gnulib inline function style. (safe_alloc_realloc_n): New API, which passes and returns the pointer, and which returns NULL if and only if failure occurs. (safe_alloc_check): New function. (ALLOC, ALLOC_N, ALLOC_N_UNINITIALIZED, REALLOC_N): Redo using the new API for internal functions, and using calloc which is good enough since it’s GNU-compatible now. (FREE): Expand to an expression rather than merely to something that needs a following ‘;’ to become a statement. * modules/safe-alloc (Depends-on): Add calloc-gnu. calloc-gnu: now LGPLv2+ * modules/calloc-gnu (License): Change from GPL to LGPLv2+. The old value was evidently a longstanding typo, and calloc will be needed by LGPLv2+ modules that will want to rely on GNU behavior. safe-alloc: simplify via reallocarray * lib/safe-alloc.c: Do not include xalloc-oversized.h. (safe_alloc_alloc_n, safe_alloc_realloc_n): Use reallocarray to check for size or ptrdiff_t overflow. * modules/reallocarray (License): Switch from LGPL to LGPLv2+, as this is needed for safe-alloc and anyway is more appropriate for this library function common with BSD. * modules/safe-alloc (Depends-on): Depend on reallocarray rather than xalloc-oversized. xalloc-oversized: fix SIZE_MAX optimization bug * lib/xalloc-oversized.h (xalloc_count_t): Remove; no longer needed and was evidently error-prone anyway. (xalloc_oversized): Omit some over-optimization that caused SIZE_MAX to not be treated as too large (the Gnulib convention) on unusual platforms where PTRDIFF_MAX == SIZE_MAX. This change should not affect typical platforms where PTRDIFF_MAX < SIZE_MAX. When optimizing, simply use ptrdiff_t instead of xalloc_count_t. xalloc: new function xreallocarray This is the same as xnrealloc, which perhaps should be deprecated. The name xreallocarray should be easier to remember now that reallocarray is a standard GNU function. * lib/xalloc.h [GNULIB_XALLOC]: Do not include xalloc-oversized.h. (xnmalloc, xnrealloc, x2nrealloc): Simplify by using xreallocarray. * lib/xmalloc.c (xreallocarray): New function. * modules/xalloc (Depends-on): Add reallocarray; remove xalloc-oversized. group-member: simplify via realloc-gnu * lib/group-member.c, modules/group-member: Simplify similarly to backupfile. backupfile: simplify via realloc-gnu * lib/backupfile.c: Do not include xalloc-oversized.h. (numbered_backup): Simplify now that realloc will do the right thing about ptrdiff_t overflow. * modules/backupfile (Depends-on): Add realloc-gnu; remove xalloc-oversized. safe-alloc: improve doc * doc/safe-alloc.texi: Clarify that reallocating an array appends uninitialized storage. Say ‘sizeof *p’ rather than ‘sizeof(*p)’ which would need a space before the paren to follow GNU style. malloc-gnu-tests, etc.: test ptrdiff_t overflow * modules/calloc-gnu-tests (Depends-on): * modules/malloc-gnu-tests (Depends-on): * modules/realloc-gnu-tests (Depends-on): Add stdint. * tests/test-calloc-gnu.c (main): * tests/test-malloc-gnu.c (main):, * tests/test-realloc-gnu.c (main): Test for ptrdiff_t overflow. malloc-gnu, etc.: prefer AS_CASE to woolly AS_IF * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Use AS_CASE. malloc-gnu, etc.: sync better with Autoconf * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Avoid some unnecessary differences from Autoconf’s versions. Separate our platforms into a different line so that it’s easier to diff. Use AS_IF in case the args use AC_REQUIRE. However, don’t bother with omitting the first newline, as omitting the newline is not Gnulib style and the difference doesn’t seem to matter here. 2021-04-18 Bruno Haible malloc-posix, realloc-posix, calloc-posix: Document affected platforms. * doc/posix-functions/malloc.texi: Re-add platforms list. * doc/posix-functions/realloc.texi: Likewise. * doc/posix-functions/calloc.texi: Likewise. 2021-04-18 Bruno Haible More systematic file naming. * m4/ctype_h.m4: Renamed from m4/ctype.m4. * m4/threads_h.m4: Renamed from m4/threads.m4. * m4/uchar_h.m4: Renamed from m4/uchar.m4. 2021-04-18 Bruno Haible Add comments after 2021-04-11 change. * m4/*_h.m4: Add comments regarding *_REQUIRE_DEFAULTS and *_MODULE_INDICATOR macros. 2021-04-18 Bruno Haible doc: Update for FreeBSD 13.0/arm64. * doc/posix-headers/stdint.texi: Mention FreeBSD 13 bug. * m4/stdint.m4: Update comment. 2021-04-17 Paul Eggert xalloc: adjust to malloc ptrdiff_t change * lib/xmalloc.c (HAVE_GNU_CALLOC, HAVE_GNU_MALLOC, HAVE_GNU_REALLOC): Remove. (xmalloc, xrealloc, xcalloc): Simplify by assuming GNU behavior. * modules/xalloc (Depends-on): Add calloc-gnu, malloc-gnu, realloc-gnu. malloc, etc.: check for ptrdiff_t overflow In glibc 2.30 and later, malloc, realloc and calloc reject attempts to create objects larger than PTRDIFF_MAX bytes. This patch changes malloc-gnu etc. to support this behavior on non-GNU hosts. It also makes this change for malloc-posix etc. since it’s a safety measure that ought to be in POSIX (perhaps we can talk them into that...). In writing this patch I found a complicated set of code that had accumulated over the years, some written by yours truly. I got rid of the code I couldn’t see the need for nowadays. Among other things, the GNU realloc behavior is no longer incompatible with the C standard, because in C17 the latter was relaxed to allow the former. If I went too far in cleaning up, the old stuff can be resurrected. This change is mostly for 32-bit platforms, since practical 64-bit platforms cannot create objects larger than PTRDIFF_MAX bytes anyway. * doc/posix-functions/calloc.texi: * doc/posix-functions/malloc.texi: * doc/posix-functions/realloc.texi: Mention ptrdiff_t issues, and go into more detail about what the gnu extension module does. * doc/posix-functions/realloc.texi: Fix now-obsolete commentary about C99 vs glibc, as C17 allows the glibc behavior and POSIX will follow suit when it gets around to it. * lib/calloc.c, lib/malloc.c, lib/realloc.c: Simplify by always supplying a GNU-compatible version, as that suffices for correctness and is good enough for performance. Include xalloc-oversized.h, and use xalloc_oversized to check for ptrdiff_t overflow. (NEED_CALLOC_GNU, NEED_MALLOC_GNU, NEED_REALLOC_GNU): Remove. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Don’t start with a newline. Fix message to match behavior. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Don’t test for size_t overflow, as the ptrdiff_t test is good enough. * m4/calloc.m4 (gl_FUNC_CALLOC_GNU): * m4/malloc.m4 (gl_FUNC_MALLOC_GNU): * m4/realloc.m4 (gl_FUNC_REALLOC_GNU): Do not define HAVE_CALLOC_GNU, HAVE_MALLOC_GNU, HAVE_REALLOC_GNU. It’s not worth the aggravation of maintaining these, as they are confusing (they don’t really mean GNU-compatible anyway). Don’t bother testing for GNU behavior if we have already decided to replace the function, since the replacement is always GNUish. * m4/calloc.m4 (gl_FUNC_CALLOC_POSIX): * m4/realloc.m4 (gl_FUNC_REALLOC_POSIX): Defer to gl_FUNC_MALLOC_POSIX. * m4/malloc.m4 (gl_FUNC_MALLOC_PTRDIFF, gl_CHECK_MALLOC_PTRDIFF): New macros. (gl_FUNC_MALLOC_POSIX): Use them to check for ptrdiff_t overflow. * modules/calloc-gnu, modules/malloc-gnu, modules/realloc-gnu: Remove no-longer-needed module indicators. * modules/calloc-posix, modules/malloc-posix, modules/realloc-posix: Depend on xalloc-oversized. * modules/malloc-posix: Require gl_FUNC_MALLOC_POSIX instead of calling it directly, so that other code can require it. * modules/realloc-posix: Depend on free-posix and malloc-posix. 2021-04-17 Bruno Haible stdio: Fix build error in some configurations (regression 2021-04-11). * m4/stdio_h.m4 (gl_STDIO_H): Move gl_STDIO_MODULE_INDICATOR and gl_MODULE_INDICATOR invocations from here... * modules/stdio (configure.ac): ... to here. 2021-04-17 Bruno Haible doc: Update for FreeBSD 11.0, 12.0, 13.0. * doc/posix-headers/*.texi: Update. * doc/glibc-headers/*.texi: Update. * doc/posix-functions/*.texi: Likewise. * doc/pastposix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): Update cross-compilation guess. 2021-04-16 Paul Eggert malloc, realloc: fix recently-introduced #undef typos * lib/malloc.c (malloc): * lib/realloc.c (malloc, realloc): #undef before using. 2021-04-14 Bruno Haible hamt tests: Fix link error. * modules/hamt-tests (Makefile.am): Link test-hamt against @LIBINTL@. 2021-04-14 Bruno Haible c-stack: Don't use an undefined C macro (regression from 2020-10-04). * lib/c-stack.c: Test GNU C version directly, without __GNUC_PREREQ. 2021-04-12 Bruno Haible doc: Fix confusion between LIBADD and LDADD. Reported by Reuben Thomas in . * doc/gnulib-tool.texi (Multiple instances): For programs, use LDADD, not LIBADD. 2021-04-11 Bruno Haible malloc, realloc, calloc: Support restricted library symbols on AIX. Suggested by Paul Eggert in . * lib/malloc.c: Drop the code that intends to collaborate with AC_FUNC_MALLOC. * lib/realloc.c: Drop the code that intends to collaborate with AC_FUNC_REALLOC. * lib/calloc.c: Drop the code that intends to collaborate with the nonexistent macro AC_FUNC_CALLOC. 2021-04-11 Bruno Haible Support several gnulib-tool invocations under the same configure.ac. Reported by Reuben Thomas in . This is done by defining the Gnulib module indicator variables per gnulib-tool invocation. So that a generated .h file is no longer influenced by the set of modules used in other gnulib-tool invocations. * gnulib-tool (func_compute_include_guard_prefix): Set module_indicator_prefix. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Use it to modify $(GNULIB_*) variable references in the Automake snippets. (func_emit_initmacro_start): Push macro definitions for GL_MACRO_PREFIX and GL_MODULE_INDICATOR_PREFIX. (func_emit_initmacro_end): Pop these macro definitions. * pygnulib/GLConfig.py (GLConfig.getIncludeGuardPrefix): New method. * pygnulib/GLEmiter.py (GLEmiter.initmacro_start): Push macro definitions for GL_MACRO_PREFIX and GL_MODULE_INDICATOR_PREFIX. (GLEmiter.initmacro_end): Pop these macro definitions. (GLEmiter.lib_Makefile_am, GLEmiter.tests_Makefile_am): Use the module indicator prefix to modify $(GNULIB_*) variable references in the Automake snippets. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_INIT_VARIABLE, gl_MODULE_INDICATOR_SET_VARIABLE): Use the value of GL_MODULE_INDICATOR_PREFIX. * m4/arpa_inet_h.m4: Use new idiom for header files that contain references to Gnulib module indicator variables: - Define the main macro through AC_DEFUN_ONCE. - Define a macro gl_*_H_REQUIRE_DEFAULTS that initializes the Gnulib module indicator variables (each prefixed with GL_MODULE_INDICATOR_PREFIX). - Invoke this macro in the gl_*_MODULE_INDICATOR macro. * m4/ctype.m4: Likewise. * m4/dirent_h.m4: Likewise. * m4/fcntl_h.m4: Likewise. * m4/fnmatch_h.m4: Likewise. * m4/glob_h.m4: Likewise. * m4/iconv_h.m4: Likewise. * m4/inttypes.m4: Likewise. * m4/langinfo_h.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/malloc_h.m4: Likewise. * m4/math_h.m4: Likewise. * m4/monetary_h.m4: Likewise. * m4/netdb_h.m4: Likewise. * m4/poll_h.m4: Likewise. * m4/pthread_h.m4: Likewise. * m4/pty_h.m4: Likewise. * m4/sched_h.m4: Likewise. * m4/search_h.m4: Likewise. * m4/signal_h.m4: Likewise. * m4/spawn_h.m4: Likewise. * m4/stddef_h.m4: Likewise. * m4/stdio_h.m4: Likewise. * m4/stdlib_h.m4: Likewise. * m4/string_h.m4: Likewise. * m4/strings_h.m4: Likewise. * m4/sys_file_h.m4: Likewise. * m4/sys_ioctl_h.m4: Likewise. * m4/sys_random_h.m4: Likewise. * m4/sys_resource_h.m4: Likewise. * m4/sys_select_h.m4: Likewise. * m4/sys_socket_h.m4: Likewise. * m4/sys_stat_h.m4: Likewise. * m4/sys_time_h.m4: Likewise. * m4/sys_times_h.m4: Likewise. * m4/sys_types_h.m4: Likewise. * m4/sys_uio_h.m4: Likewise. * m4/sys_utsname_h.m4: Likewise. * m4/sys_wait_h.m4: Likewise. * m4/termios_h.m4: Likewise. * m4/threads.m4: Likewise. * m4/time_h.m4: Likewise. * m4/uchar.m4: Likewise. * m4/unistd_h.m4: Likewise. * m4/utime_h.m4: Likewise. * m4/wchar_h.m4: Likewise. * m4/wctype_h.m4: Likewise. * modules/arpa_inet (configure.ac): Invoke the macro gl_*_H_REQUIRE_DEFAULTS explicitly. * modules/ctype (configure.ac): Likewise. * modules/dirent (configure.ac): Likewise. * modules/fcntl-h (configure.ac): Likewise. * modules/fnmatch-h (configure.ac): Likewise. * modules/glob-h (configure.ac): Likewise. * modules/iconv-h (configure.ac): Likewise. * modules/inttypes-incomplete (configure.ac): Likewise. * modules/langinfo (configure.ac): Likewise. * modules/locale (configure.ac): Likewise. * modules/malloc-h (configure.ac): Likewise. * modules/math (configure.ac): Likewise. * modules/monetary (configure.ac): Likewise. * modules/netdb (configure.ac): Likewise. * modules/poll-h (configure.ac): Likewise. * modules/pthread-h (configure.ac): Likewise. * modules/pty (configure.ac): Likewise. * modules/sched (configure.ac): Likewise. * modules/search (configure.ac): Likewise. * modules/signal-h (configure.ac): Likewise. * modules/spawn (configure.ac): Likewise. * modules/stddef (configure.ac): Likewise. * modules/stdio (configure.ac): Likewise. * modules/stdlib (configure.ac): Likewise. * modules/string (configure.ac): Likewise. * modules/strings (configure.ac): Likewise. * modules/sys_file (configure.ac): Likewise. * modules/sys_ioctl (configure.ac): Likewise. * modules/sys_random (configure.ac): Likewise. * modules/sys_resource (configure.ac): Likewise. * modules/sys_select (configure.ac): Likewise. * modules/sys_socket (configure.ac): Likewise. * modules/sys_stat (configure.ac): Likewise. * modules/sys_time (configure.ac): Likewise. * modules/sys_times (configure.ac): Likewise. * modules/sys_types (configure.ac): Likewise. * modules/sys_uio (configure.ac): Likewise. * modules/sys_utsname (configure.ac): Likewise. * modules/sys_wait (configure.ac): Likewise. * modules/termios (configure.ac): Likewise. * modules/threads-h (configure.ac): Likewise. * modules/time (configure.ac): Likewise. * modules/uchar (configure.ac): Likewise. * modules/unistd (configure.ac): Likewise. * modules/utime-h (configure.ac): Likewise. * modules/wchar (configure.ac): Likewise. * modules/wctype-h (configure.ac): Likewise. * m4/af_alg.m4: Update after a macro name changed. * m4/ctime.m4: Likewise. * m4/explicit_bzero.m4: Likewise. * m4/ffs.m4: Likewise. * m4/ffsl.m4: Likewise. * m4/ffsll.m4: Likewise. * m4/flock.m4: Likewise. * m4/fstat.m4: Likewise. * m4/getaddrinfo.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/gettimeofday.m4: Likewise. * m4/hostent.m4: Likewise. * m4/ioctl.m4: Likewise. * m4/localtime.m4: Likewise. * m4/mbslen.m4: Likewise. * m4/memchr.m4: Likewise. * m4/memmem.m4: Likewise. * m4/mempcpy.m4: Likewise. * m4/memrchr.m4: Likewise. * m4/mktime.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/passfd.m4: Likewise. * m4/pselect.m4: Likewise. * m4/rawmemchr.m4: Likewise. * m4/select.m4: Likewise. * m4/servent.m4: Likewise. * m4/sigabbrev_np.m4: Likewise. * m4/sigdescr_np.m4: Likewise. * m4/sockpfaf.m4: Likewise. * m4/stat.m4: Likewise. * m4/stpcpy.m4: Likewise. * m4/stpncpy.m4: Likewise. * m4/strcase.m4: Likewise. * m4/strcasestr.m4: Likewise. * m4/strchrnul.m4: Likewise. * m4/strdup.m4: Likewise. * m4/strerror.m4: Likewise. * m4/strerror_r.m4: Likewise. * m4/strerrorname_np.m4: Likewise. * m4/strftime-fixes.m4: Likewise. * m4/strncat.m4: Likewise. * m4/strndup.m4: Likewise. * m4/strnlen.m4: Likewise. * m4/strpbrk.m4: Likewise. * m4/strptime.m4: Likewise. * m4/strsep.m4: Likewise. * m4/strsignal.m4: Likewise. * m4/strstr.m4: Likewise. * m4/strtok_r.m4: Likewise. * m4/strverscmp.m4: Likewise. * m4/time_r.m4: Likewise. * m4/time_rz.m4: Likewise. * m4/timegm.m4: Likewise. * m4/timespec_get.m4: Likewise. * m4/tzset.m4: Likewise. * modules/accept (configure.ac): Likewise. * modules/bind (configure.ac): Likewise. * modules/connect (configure.ac): Likewise. * modules/flock (configure.ac): Likewise. * modules/getpeername (configure.ac): Likewise. * modules/getsockname (configure.ac): Likewise. * modules/getsockopt (configure.ac): Likewise. * modules/listen (configure.ac): Likewise. * modules/recv (configure.ac): Likewise. * modules/recvfrom (configure.ac): Likewise. * modules/send (configure.ac): Likewise. * modules/sendto (configure.ac): Likewise. * modules/setsockopt (configure.ac): Likewise. * modules/shutdown (configure.ac): Likewise. * modules/socket (configure.ac): Likewise. Use the gl_*_H_REQUIRE_DEFAULTS macros. * modules/nonblocking (configure.ac): Use the gl_*_H_REQUIRE_DEFAULTS and gl_MODULE_INDICATOR_INIT_VARIABLE macros. * modules/sigpipe (configure.ac): Likewise. * modules/windows-stat-override (configure.ac): Likewise. * m4/nonblocking.m4: Update a comment. * m4/sigpipe.m4: Likewise. 2021-04-11 Bruno Haible Rename GNULIB_OVERRIDES_CHAR16_T, GNULIB_OVERRIDES_CHAR32_T. * GNULIBHEADERS_OVERRIDE_CHAR16_T: Renamed from GNULIB_OVERRIDES_CHAR16_T. * GNULIBHEADERS_OVERRIDE_CHAR32_T: Renamed from GNULIB_OVERRIDES_CHAR32_T. Rename GNULIB_OVERRIDES_WINT_T. * GNULIBHEADERS_OVERRIDE_WINT_T: Renamed from GNULIB_OVERRIDES_WINT_T. 2021-04-11 Bruno Haible increment-serial: New program. * build-aux/increment-serial: New file. 2021-04-11 Bruno Haible useless-if-before-free: Implement --version option according to GCS. * build-aux/useless-if-before-free (copyright_year): New variable. (GetOptions): Print also a short copyright and license notice and author statement. libtool-next-version: Implement --version option according to GCS. * build-aux/libtool-next-version (scriptversion): New variable. (func_version): Deduce the copyright year from it. Terminate sentences with '.'. gnupload: Implement --version option according to GCS. * build-aux/gnupload (copyright_year, copyright): New variables. (--version): Print also a short copyright and license notice. git-version-gen: Implement --version option according to GCS. * build-aux/git-version-gen (version): State the license. Use wording from GCS. bootstrap: Implement --version option according to GCS. * build-aux/bootstrap (copyright_year, copyright): New variables. (--version): New option processing. announce-gen: Implement --version option according to GCS. * build-aux/announce-gen (copyright_year): New variable. (GetOptions): Print also a short copyright and license notice and author statement. 2021-04-10 Bruno Haible Simplify GNULIB_* variable initializations. * modules/gnulib-common.m4 (gl_MODULE_INDICATOR_INIT_VARIABLE): New macro. * m4/arpa_inet_h.m4 (gl_ARPA_INET_H_DEFAULTS): Use it. * m4/ctype.m4 (gl_CTYPE_H_DEFAULTS): Likewise. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Likewise. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Likewise. * m4/fnmatch_h.m4 (gl_FNMATCH_H_DEFAULTS): Likewise. * m4/glob_h.m4 (gl_GLOB_H_DEFAULTS): Likewise. * m4/iconv_h.m4 (gl_ICONV_H_DEFAULTS): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Likewise. * m4/langinfo_h.m4 (gl_LANGINFO_H_DEFAULTS): Likewise. * m4/locale_h.m4 (gl_LOCALE_H_DEFAULTS): Likewise. * m4/malloc_h.m4 (gl_MALLOC_H_DEFAULTS): Likewise. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Likewise. * m4/monetary_h.m4 (gl_MONETARY_H_DEFAULTS): Likewise. * m4/netdb_h.m4 (gl_NETDB_H_DEFAULTS): Likewise. * m4/poll_h.m4 (gl_POLL_H_DEFAULTS): Likewise. * m4/pthread_h.m4 (gl_PTHREAD_H_DEFAULTS): Likewise. * m4/pty_h.m4 (gl_PTY_H_DEFAULTS): Likewise. * m4/sched_h.m4 (gl_SCHED_H_DEFAULTS): Likewise. * m4/search_h.m4 (gl_SEARCH_H_DEFAULTS): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Likewise. * m4/spawn_h.m4 (gl_SPAWN_H_DEFAULTS): Likewise. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Likewise. * m4/strings_h.m4 (gl_HEADER_STRINGS_H_DEFAULTS): Likewise. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_H_DEFAULTS): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H_DEFAULTS): Likewise. * m4/sys_random_h.m4 (gl_SYS_RANDOM_H_DEFAULTS): Likewise. * m4/sys_resource_h.m4 (gl_SYS_RESOURCE_H_DEFAULTS): Likewise. * m4/sys_select_h.m4 (gl_SYS_SELECT_H_DEFAULTS): Likewise. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_H_DEFAULTS): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Likewise. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_DEFAULTS): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H_DEFAULTS): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H_DEFAULTS): Likewise. * m4/sys_wait_h.m4 (gl_SYS_WAIT_H_DEFAULTS): Likewise. * m4/termios_h.m4 (gl_TERMIOS_H_DEFAULTS): Likewise. * m4/threads.m4 (gl_THREADS_H_DEFAULTS): Likewise. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Likewise. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Likewise. * m4/utime_h.m4 (gl_UTIME_H_DEFAULTS): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H_DEFAULTS): Likewise. * m4/wctype_h.m4 (gl_WCTYPE_H_DEFAULTS): Likewise. 2021-04-10 Paul Eggert realloc: fix undef typo * lib/realloc.c: #undef realloc if config.h defines it. This fixes a typo that I introduced in 2011-04-08T18:39:01Z!eggert@cs.ucla.edu. Apparently nobody uses Gnulib realloc in that way? 2021-04-07 Bruno Haible execute tests: Avoid test failure in certain environments. Reported by Dmitry V. Levin in . * tests/test-execute-main.c (main): Close file descriptors 3..19. * tests/test-execute-child.c (main): Remove NetBSD workaround. * modules/execute-tests (configure.ac): Test for close_range function. 2021-04-07 Paul Eggert utimens: fix confusing arg type in internal func Although the old code was technically correct, this was accidental and it confused a GCC 11 prerelease. Reported by Ondrej Dubaj in: https://lists.gnu.org/r/bug-tar/2021-04/msg00000.html * lib/utimens.c (update_timespec): Change arg type from ‘struct timespec *[2]’ (pointer to array of 2 pointers to timespecs) to ‘struct timespec **’ (pointer to pointer to the first timespec in an array of 2 timespecs). Although the old code happened to be technically correct, it was misleading and confused Coverity. And though the type ‘struct timespec (**)[2]’ (pointer to pointer to array of 2 timespecs) would perhaps be more technically correct, it would be almost as confusing and would require changes elsewhere in this file; let’s quit while we’re ahead. xalloc: simplify integer overflow test * lib/xalloc.h (x2nrealloc): Simplify integer overflow detection. This is easier to maintain, and (unlike the old code) exact. 2021-04-06 Paul Eggert group-member: minor tweak to omit a * * lib/group-member.c: Include intprops.h. (get_group_info): Use INT_MULTIPLY_WRAPV instead of xalloc_oversized (which does a multiplication) followed by the same multiplication. The code was OK as-is; this is just conceptual simplification, possible now that we have xalloc_count_t. * modules/group-member: Depend on intprops. backupfile: less-aggressive buffer growth * lib/backupfile.c: Include intprops.h. (numbered_backup): Grow buffer by the usual 50%, not 100%. This is easier to do now that we have xalloc_count_t. * modules/backup-rename, modules/backupfile: Depend on intprops. xalloc-oversized: export xalloc_count_t * lib/xalloc-oversized.h (__xalloc_oversized, xalloc_oversized): * lib/xmalloca.h (nmalloca): Comment re restrictions on arg types. * lib/xalloc-oversized.h (xalloc_count_t): Rename from __xalloc_count_type; all uses changed. This publicizes the type. 2021-04-05 Paul Eggert xalloc: try to pacify gcc -Wsign-compare Problem reported by Marc Nieper-Wißkirchen in: https://lists.gnu.org/r/bug-gnulib/2021-04/msg00034.html * lib/xmalloc.c (xpalloc): For odd platforms where SIZE_MAX < IDX_MAX, use a tricky destination for INT_MULTIPLY_WRAPV instead of an explicit comparison to SIZE_MAX. This should be more likely to pacify gcc -Wsign-compare. 2021-04-05 Marc Nieper-Wißkirchen hamt: Fix coding errors. Reported by Bruno Haible in after a Coverity run. * lib/hamt.c (bucket_do_while, hamt_iterator): Add missing derefencing operator and silence a bogus warning on uninitialized variables. * tests/test-hamt.c (test_general): Replace two errorneous assignment operators with comparison operators. 2021-04-05 Fabrice Fontaine pthread-cond: Fix compilation error. * lib/pthread-cond.c (pthread_cond_wait): Use tv.nsec instead of tv.usec. 2021-04-04 Fabrice Fontaine pthread-cond: Fix wrong configure results when is absent. * m4/pthread-cond.m4 (gl_PTHREAD_COND): When does not exist, set HAVE_PTHREAD_COND_* to 0, not to 1. 2021-04-04 Bruno Haible backupfile, backup-rename: Trim dependencies. * lib/backupfile.h: Add comment. * lib/backupfile.c: Include , for readdir() declaration. * modules/backup-rename (Depends-on): Remove dirent-safer, fcntl. Add fcntl-h. * modules/backupfile (Depends-on): Likewise. Remove xalloc. Add xalloc-die. 2021-04-04 Bruno Haible doc: Fix syntax error (regression from 2021-04-02). * doc/posix-functions/strtol.texi: Put @item inside @itemize block. 2021-04-04 Marc Nieper-Wißkirchen hamt: Document the module in the Gnulib manual. Suggested by Bruno Haible in . * doc/containers.texi: Add a subsection to section 15.11 Container data types. * lib/hamt.h: Improve documentation on how Hamt_entry is supposed to be used. 2021-04-03 Paul Eggert savedir: avoid unlikely undefined behavior * lib/savedir.c (streamsavedir): Prefer idx_to size_t where either will do. Simplify reallocation of entries. Use xpalloc to reallocate name_space, to avoid some unlikely integer overflows. quotearg: avoid undefined and/or O(N**2) Avoid undefined and O(N**2) behavior in some very unlikely cases. * lib/quotearg.c (quotearg_n_options): Document that N must be less than MIN (INT_MAX, IDX_MAX), and add this to the abort test; this also avoids a conditional branch. Use xpalloc instead of xrealloc, to avoid O(N**2) behavior in very-unlikely cases. xgethostname: reorganize / simplify xgethostname and xgetdomainname were essentially copies long ago, but they’ve diverged. Bring them back together again by implementing the (rarely used) latter in terms of the former. And avoid some unnecessary realloc calls while we’re at it. * lib/xgetdomainname.c: Rewrite from scratch so that it merely includes xgethostname.c with a few preliminaries. * lib/xgethostname.c: Generalize so that it can be included from xgetdomainname.c. (GETANAME, XGETANAME): New macros. (INITIAL_HOSTNAME_LENGTH): Remove. No need for this parameter. Use 100 instead, as few hostnames are longer than that. (XGETANAME): Try getting the hostname into the stack first, as that avoids a malloc call in the usual case. Check for both POSIX-style truncation and SunOS 5.5 bug in a cleaner way, by simply checking string length. Don’t use x2realloc, which wastes time preserving buffer garbage; use xpalloc with NULL instead. Don’t bother shrinking buffer in the very rare case where the hostname is longer than sizeof buf; it’s not worth the aggravation. * modules/xgetdomainname (Depends-on): Remove free-posix, xalloc. Add xgethostname. 2021-04-03 Bruno Haible *-list tests: Add more tests. * tests/test-array_list.c (check_equals_by_forward_iteration, check_equals_by_backward_iteration): New functions. (main): Invoke them. * tests/test-carray_list.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. list: Add operations first_node, last_node. Reported by Marc Nieper-Wißkirchen in . * lib/gl_list.h (gl_list_first_node, gl_list_last_node): New functions. (struct gl_list_implementation): Add members first_node, last_node. * lib/gl_array_list.c (gl_array_first_node, gl_array_last_node): New functions. (gl_array_list_implementation): Add the new operations. * lib/gl_carray_list.c (gl_carray_first_node, gl_carray_last_node): New functions. (gl_carray_list_implementation): Add the new operations. * lib/gl_anylinked_list2.h (gl_linked_first_node, gl_linked_last_node): New functions. * lib/gl_linked_list.c (gl_linked_list_implementation): Add the new operations. * lib/gl_linkedhash_list.c (gl_linkedhash_list_implementation): Likewise. * lib/gl_anytree_list2.h (gl_tree_first_node, gl_tree_last_node): New functions. * lib/gl_avltree_list.c (gl_avltree_list_implementation): Add the new operations. * lib/gl_avltreehash_list.c (gl_avltreehash_list_implementation): Likewise. * lib/gl_rbtree_list.c (gl_rbtree_list_implementation): Likewise. * lib/gl_rbtreehash_list.c (gl_rbtreehash_list_implementation): Likewise. * lib/gl_sublist.c (gl_sublist_first_node, gl_sublist_last_node): New functions. (gl_sublist_list_implementation): Add the new operations. * lib/gl_list.hh (class gl_List): Add member functions first_node, last_node. * doc/containers.texi: Update table. 2021-04-03 Bruno Haible xalloc-die: Fix compilation error (regression from 2021-03-28). * lib/xalloc.h: Don't include idx.h and xalloc-oversized.h if the module 'xalloc' is not in use. * modules/xalloc-die (Depends-on): Remove xalloc-oversized. 2020-04-03 Marc Nieper-Wißkirchen hamt: New module. This module provides (persistent) hash array mapped tries. * MODULES.html.sh: Add hamt. * lib/hamt.c: New file. * lib/hamt.h: New file. * modules/hamt: New file. * modules/hamt-tests: New file. * tests/test-hamt.c: New file. 2021-04-02 Bruno Haible strtoul, strtoll, strtoull: Fix compilation warning. * lib/strtol.c (strtol): Undefine before defining as a macro. 2021-04-02 Bruno Haible strtoll: Work around a bug on native Windows and Minix. * lib/stdlib.in.h (strtoll): Override if REPLACE_STRTOLL is 1. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_STRTOLL. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Test whether strtoll works. Set REPLACE_STRTOLL. * modules/stdlib (Makefile.am): Substitute REPLACE_STRTOLL. * modules/strtoll (configure.ac): Test REPLACE_STRTOLL. * tests/test-strtoll.c (main): Add tests of hexadecimal integer syntax. * doc/posix-functions/strtoll.texi: Mention the bug. 2021-04-02 Bruno Haible strtol: Work around a bug on native Windows and Minix. * lib/stdlib.in.h (strtol): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether strtol is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOL, HAVE_STRTOL, REPLACE_STRTOL. * m4/strtol.m4 (gl_FUNC_STRTOL): Require gl_STDLIB_H_DEFAULTS. Test whether strtol works. Set REPLACE_STRTOL. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOL, HAVE_STRTOL, REPLACE_STRTOL. * modules/strtol (Status, Notice): Remove. (Depends-on): Add stdlib. (configure.ac): Test HAVE_STRTOL and REPLACE_STRTOL. Invoke gl_STDLIB_MODULE_INDICATOR. * tests/test-strtol.c (main): Add tests of hexadecimal integer syntax. * doc/posix-functions/strtol.texi: Mention the bug. 2021-04-02 Bruno Haible strtoull: Work around a bug on native Windows and Minix. * lib/stdlib.in.h (strtoull): Override if REPLACE_STRTOULL is 1. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_STRTOULL. * m4/strtoull.m4 (gl_FUNC_STRTOULL): Test whether strtoull works. Set REPLACE_STRTOULL. * modules/stdlib (Makefile.am): Substitute REPLACE_STRTOULL. * modules/strtoull (configure.ac): Test REPLACE_STRTOULL. * tests/test-strtoull.c (main): Add tests of hexadecimal integer syntax. * doc/posix-functions/strtoull.texi: Mention the bug. 2021-04-02 Bruno Haible strtoul: Work around a bug on native Windows and Minix. Reported by Eric Blake in . * lib/stdlib.in.h (strtoul): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether strtoul is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOUL, HAVE_STRTOUL, REPLACE_STRTOUL. * m4/strtoul.m4 (gl_FUNC_STRTOUL): Require gl_STDLIB_H_DEFAULTS. Test whether strtoul works. Set REPLACE_STRTOUL. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOUL, HAVE_STRTOUL, REPLACE_STRTOUL. * modules/strtoul (Status, Notice): Remove. (Depends-on): Add stdlib. (configure.ac): Test HAVE_STRTOUL and REPLACE_STRTOUL. Invoke gl_STDLIB_MODULE_INDICATOR. * tests/test-strtoul.c (main): Add tests of hexadecimal integer syntax. * doc/posix-functions/strtoul.texi: Mention the bug. 2021-04-02 Bruno Haible strtol, strtoul, strtoll, strtoull: Optimize. * lib/strtol.c (GROUP_PARAM_PROTO): New macro. (INTERNAL): Define differently if !USE_NUMBER_GROUPING. (INTERNAL (strtol)): Define without 'int group' parameter if !USE_NUMBER_GROUPING. (strtol): Don't define if !USE_NUMBER_GROUPING. 2021-04-02 Bruno Haible strto*l: Don't pass invalid arguments to isspace, isalnum, toupper. * lib/strtol.c (ISSPACE, ISALPHA, TOUPPER): Cast argument to 'unsigned char' before passing it to the functions isspace(), isalpha(), toupper(). 2021-04-02 Bruno Haible glob: Reject ~user syntax, when flag GLOB_TILDE_CHECK is given. Reported and patch suggested by Eli Zaretskii in . * lib/glob.c (__glob) [WINDOWS32]: If flag GLOB_TILDE_CHECK is given, do error handling like when ~user is allowed by the user is unknown. 2021-03-31 Paul Eggert xalloc: delay setting size until success * lib/xalloc.h (x2nrealloc): Don’t change *PN until after xrealloc succeeds, in case xalloc_die or one of its callees or longjmp targets uses *PN. Similar code in xpalloc already does this. 2021-03-28 Paul Eggert xalloc: new function xpalloc, from dfa Move xpalloc from dfa.c to xmalloc.c and change it from static to extern. The function is useful in other contexts; I’m about to use it in coreutils. * lib/dfa.c: Include idx.h, instead of rolling our own idx_t and IDX_MAX. Do not include intprops.h; no longer needed. (xpalloc): Move from here ... * lib/xmalloc.c (xpalloc): ... to here, and make it extern. Include intprops.h and minmax.h, needed by xpalloc. * lib/xalloc.h: Include idx.h, for idx_t. * modules/dfa (Depends-on): Add idx; remove intprops. * modules/xalloc (Depends-on): Add idx, intprops, minmax. 2021-03-28 Bruno Haible linked-list tests: Add another test for SIGNAL_SAFE_LIST. * tests/test-asyncsafe-linked_list-strong.c: Renamed from tests/test-asyncsafe-linked_list.c. * tests/test-asyncsafe-linked_list-strong.sh: Renamed from tests/test-asyncsafe-linked_list.sh. * tests/test-asyncsafe-linked_list-weak.c: New file, based on tests/test-asyncsafe-linked_list.c. * tests/test-asyncsafe-linked_list-weak.sh: New file, based on tests/test-asyncsafe-linked_list.sh. * modules/linked-list-tests (Files): Add tests/test-asyncsafe-linked_list-weak.*, tests/test-asyncsafe-linked_list-strong.*. (Makefile.am): Arrange to test also tests/test-asyncsafe-linked_list-weak.sh. Mark test-asyncsafe-linked_list-weak.sh and test-asyncsafe-linked_list-strong.sh as expected failures. 2021-03-27 Bruno Haible renameatu tests: Add unit test for bug found on macOS. * tests/test-renameatu.c (main): Add test for identical rename with RENAME_NOREPLACE. 2021-03-26 Bruno Haible unistdio/*-vasnprintf: Fix errno value (regression from yesterday). * modules/unistdio/u8-vasnprintf (Depends-on): Add free-posix. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. 2021-03-26 Bruno Haible vasnprintf: Fix memory leak (regression from yesterday). * lib/vasnprintf.c (VASNPRINTF): Restore omitted CLEANUP invocation. Some more simplifications of errno around free(). 2021-03-26 Akim Demaille fprintf-posix: fix typo * modules/fprintf-posix (Depends-on): Fix typo. 2021-03-25 Paul Eggert free-posix: use more often in other modules This lets us simplify cleanup code that calls ‘free’. * lib/amemxfrm.c (amemxfrm): * lib/areadlink-with-size.c (areadlink_with_size): * lib/areadlinkat-with-size.c (areadlinkat_with_size): * lib/astrxfrm.c (astrxfrm): * lib/dprintf.c (dprintf): * lib/execute.c (execute): * lib/execvpe.c (execvpe): * lib/fchdir.c (get_name): * lib/file-has-acl.c (file_has_acl): * lib/fprintf.c (fprintf): * lib/getcwd-lgpl.c (rpl_getcwd): * lib/getgroups.c (rpl_getgroups): * lib/link.c (link, rpl_link): * lib/linkat.c (link_immediate, link_follow, linkat_follow): * lib/localename.c (newlocale, duplocale): * lib/mgetgroups.c (mgetgroups): * lib/mountlist.c (read_file_system_list): * lib/pipe-filter-gi.c (pipe_filter_gi_close): * lib/putenv.c (_unsetenv, putenv): * lib/read-file.c (read_file): * lib/rename.c (rpl_rename): * lib/savedir.c (streamsavedir, savedir): * lib/spawni.c (do_open, __spawni): * lib/spawn-pipe.c (create_pipe): * lib/striconv.c (mem_cd_iconv, str_cd_iconv, str_iconv): * lib/striconveh.c (mem_cd_iconveh_internal, str_cd_iconveh) (mem_iconveh, str_iconveh): * lib/supersede.c (open_supersede, close_supersede): * lib/vasnprintf.c (VASNPRINTF): * lib/vdprintf.c (vdprintf): * lib/vfprintf.c (vfprintf): * lib/wcscoll-impl.h (wcscoll): * lib/wcsxfrm-impl.h (wcsxfrm): * lib/xgetdomainname.c (xgetdomainname): * lib/xgethostname.c (xgethostname): Simplify by assuming that ‘free’ preserves errno. * lib/localename.c: Do not include errno.h. * modules/amemxfrm, modules/areadlink-with-size: * modules/areadlinkat-with-size, modules/astrxfrm: * modules/c-vasnprintf, modules/dprintf, modules/execute: * modules/execvpe, modules/fchdir, modules/file-has-acl: * modules/fprintf-posix, modules/getcwd-lgpl, modules/getgroups: * modules/link, modules/linkat, modules/localename: * modules/mgetgroups, modules/mountlist, modules/pipe-filter-gi: * modules/posix_spawn-internal, modules/putenv, modules/read-file: * modules/rename, modules/savedir, modules/spawn-pipe: * modules/striconv, modules/striconveh, modules/supersede: * modules/vasnprintf, modules/vdprintf, modules/vfprintf-posix: * modules/wcscoll, modules/wcsxfrm, modules/xgetdomainname: * modules/xgethostname: Depend on free-posix. 2021-03-24 Paul Eggert renameatu: work around macOS 11.2 renameatx_np bug * lib/renameatu.c (renameatu) [RENAME_EXCL]: Use lstatat test here too. 2021-03-22 Bruno Haible clean-temp-simple: Fix a rare memory leak. * lib/clean-temp-simple.c (register_temporary_file): Fix cleanup code. 2021-03-22 Bruno Haible clean-temp-simple: Relicense under LGPLv2+. * modules/clean-temp-simple (License): Change to LGPLv2+. 2021-03-22 Bruno Haible clean-temp-simple: Remove dependency upon xalloc, xalloc-die, xlist. * lib/clean-temp-private.h (clean_temp_init): Change return type to 'int'. * lib/clean-temp-simple.h (register_temporary_file): Change return type to 'int'. * lib/clean-temp-simple.c: Don't include xalloc.h, gl_xlist.h. Include gl_list.h instead. (init_failed): New variable. (do_clean_temp_init): Set it. (clean_temp_init): Return an error indicator. (register_temporary_file): Invoke gl_list_nx_create_empty instead of gl_list_create_empty. Invoke strdup instead of xstrdup. Invoke gl_list_nx_add_first instead of gl_list_add_first. Return an error indicator. * lib/clean-temp.c (create_temp_dir, gen_register_open_temp): Call xalloc_die() if clean_temp_init or register_temporary_file failed. * modules/clean-temp-simple (Depends-on): Remove xalloc, xalloc-die, xlist. 2021-03-22 Bruno Haible clean-temp-simple: New module. * lib/clean-temp-simple.h: New file, based on lib/clean-temp.h. * lib/clean-temp-private.h: New file, based on lib/clean-temp.c. * lib/clean-temp-simple.c: New file, based on lib/clean-temp.c. * lib/clean-temp.h: Include clean-temp-simple.h. (register_temporary_file, unregister_temporary_file, cleanup_temporary_file): Remove declarations. * lib/clean-temp.c: Don't include , . Include , , clean-temp-simple.h, clean-temp-private.h. (file_cleanup_list_lock, file_cleanup_list): Moved to clean-temp-simple.c. (struct tempdir, dir_cleanup_list, struct closeable_fd, descriptors): Moved to clean-temp-private.h. (string_equals, SIZE_BITS, string_hash, fatal_signal_set, init_fatal_signal_set, asyncsafe_close): Moved to clean-temp-simple.c. (asyncsafe_fclose_variant): Use get_fatal_signal_set() here. (cleanup_action, do_init_clean_temp, clean_temp_once, init_clean_temp, register_temporary_file, unregister_temporary_file, do_unlink, cleanup_temporary_file): Moved to clean-temp-simple.c. (create_temp_dir, cleanup_temp_file, cleanup_temp_dir_contents, gen_register_open_temp, close_temp): Update for changed function names. (fclose_variant_temp): Don't call init_fatal_signal_set(). * modules/clean-temp-simple: New file, based on modules/clean-temp. * modules/clean-temp (Depends-on): Add clean-temp-simple, list. Remove stdint. (configure.ac): Don't define SIGNAL_SAFE_LIST here. 2021-03-22 Bruno Haible error: Relicense under LGPLv2+. Pino Toscano's approval is in . Paul Eggert's approval is in . * modules/error (License): Change to LGPLv2+. 2021-03-22 Bruno Haible getprogname: Relicense under LGPLv2+. Pino Toscano's approval is in . Paul Eggert's approval is in . Jim Meyering's approval is in . Gisle Vanem's approval is in . Daniel Richard G's approval is in . John David Anglin's approval is in . Benji Wiebe's approval is in . * modules/getprogname (License): Change to LGPLv2+. 2021-03-22 Bruno Haible fatal-signal: Relicense under LGPLv2+. Eric Blake's approval is in . * modules/fatal-signal (License): Change to LGPLv2+. 2021-03-22 Bruno Haible doc: Mention an open glibc bug. * doc/posix-functions/mbrtowc.texi: Mention the possible out-of-range wchar_t values returned by this function on glibc. * doc/posix-functions/mbtowc.texi: Likewise. 2021-03-22 Benno Schulenberg (tiny change) mbrtowc: Remove a redundant condition. * lib/mbrtowc-impl-utf8.h: There is no need to check for c == 0xf4 when !(c < 0xf4), as ten lines earlier c <= 0xf4 was established. 2021-03-22 Bruno Haible linkedhash-list: Relicense under LGPLv2+. Paul Eggert's approval is in . * modules/linkedhash-list (License): Change to LGPLv2+. 2021-03-21 Bruno Haible fatal-signal: Remove dependency upon xalloc. * lib/fatal-signal.h (at_fatal_signal): Change return type to 'int'. * lib/fatal-signal.c: Don't include xalloc.h. (at_fatal_signal): Return an error indicator. * modules/fatal-signal (Depends-on): Remove xalloc. * NEWS: Mention the change. * lib/term-style-control.c: Include xalloc.h. (ensure_other_signal_handlers): Test return value of at_fatal_signal. * lib/clean-temp.c (do_init_clean_temp): Likewise. * lib/wait-process.c (register_slave_subprocess): Likewise. * modules/term-style-control (Depends-on): Add xalloc-die. * modules/clean-temp (Depends-on): Likewise. * modules/wait-process (Depends-on): Likewise. 2021-03-21 Paul Eggert diacrit: remove * MODULES.html.sh (func_all_modules), NEWS: Remove diacrit. * lib/diacrit.c, lib/diacrit.h, modules/diacrit: Remove. tests: fix signed overflow issues * tests/test-dynarray.c (value_at): Avoid undefined behavior in signed integer multiplication. * tests/test-scratch-buffer.c (byte_at): Likewise, for the theoretically-possible case where size_t is narrower than int. 2021-03-21 Bruno Haible doc: More updates. * doc/glibc-functions/sethostname.texi: Update regarding macOS. * doc/glibc-functions/sethostname.texi: List the affected platforms. doc: Update for macOS 11.1. * doc/posix-headers/*.texi: Update. * doc/glibc-headers/*.texi: Update. * doc/posix-functions/*.texi: Likewise. * doc/pastposix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. * m4/aligned_alloc.m4 (gl_FUNC_ALIGNED_ALLOC): Update cross-compilation guess. 2021-03-21 Bruno Haible ftell: Document bug in macOS >= 10.15. * doc/posix-functions/ftell.texi: Mention the macOS bug. 2021-03-20 Bruno Haible ftello: Work around bug in macOS >= 10.15. Reported by Martin Storsjö in . * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): On macOS, don't define FUNC_UNGETC_BROKEN. Instead, set gl_ftello_broken_after_ungetc to yes. * m4/ftello.m4 (gl_FUNC_FTELLO): Invoke gl_FUNC_UNGETC_WORKS, and arrange to provide the workaround if ftello is broken after ungetc. * lib/ftello.c: Include , intprops.h. (ftello) [FTELLO_BROKEN_AFTER_UNGETC]: Implement from scratch. * modules/ftello (Files): Add m4/ungetc.m4. (Depends-on): Add intprops. * doc/posix-functions/ftello.texi: Mention the macOS bug. 2021-03-20 Bruno Haible math C++ tests: Fix compilation error on macOS 11.2. * lib/math.in.h (isnan): For clang >= 12 on macOS, declare 'rpl_isnan', not 'isnan'. 2021-03-18 Bruno Haible simple-atomic tests: Fix compilation error on Solaris 10. Reported by Tom G. Christensen in . * tests/test-simple-atomic.c (yield): Define only after all #includes. 2021-03-18 Bruno Haible simple-atomic: Fix compilation error on Solaris 10/x86_64 with cc. * lib/simple-atomic.c (atomic_compare_and_swap_ptr): Correct asm instruction. 2021-03-18 Paul Eggert argmatch: fix testing typo Problem and fix reported by Gisle Vanem in: https://lists.gnu.org/r/bug-gnulib/2021-03/msg00083.html * lib/argmatch.c (main) [TEST]: Fix address-of typo. 2021-03-14 Paul Eggert intprops: improve commentary * lib/intprops.h: Improve comments about promotion etc. 2021-03-14 Bruno Haible time_rz: Put reference documentation into the .h file. * lib/time.in.h (timezone_t, tzalloc, tzfree, localtime_rz, mktime_z): Add comments, based on modules/time_rz. * modules/time_rz (Comment): Remove section. 2021-03-14 Bruno Haible parse-datetime tests: Avoid a test failure on NetBSD. Reported by Thomas Klausner in . * tests/test-parse-datetime.c (main): Skip two tests on NetBSD. 2021-03-10 Paul Eggert libc-config: port to DragonFlyBSD 5.9 DragonFlyBSD defines __nonnull incompatibly with glibc, so avoid the use of __nonnull in Gnulib code. Problem reported by Gavin Smith in: https://lists.gnu.org/r/bug-gnulib/2021-03/msg00066.html * lib/cdefs.h (__attribute_nonnull__): Rename from __nonnull. All uses in Gnulib changed. There should be no need to change glibc code that is not shared with Gnulib. (__nonnull): New macro, defined in terms of __attribute_nonnull__, and which can be used in glibc code that is not shared with Gnulib. 2021-03-07 Paul Eggert manywarnings: modernize documentation Problem reported by Reuben Thomas in: https://lists.gnu.org/r/bug-gnulib/2021-03/msg00046.html * doc/manywarnings.texi (manywarnings): Update in the light of recent changes to the manywarnings module. 2021-03-07 Bruno Haible sysexits: Fix for Haiku. * lib/sysexits.in.h: Don't assume that , when it exists, defines anything. * doc/glibc-headers/sysexits.texi: Mention the Haiku bug. 2021-03-07 Bruno Haible Rename GNULIB_WCHAR_SINGLE to GNULIB_WCHAR_SINGLE_LOCALE. * lib/lc-charset-dispatch.c: Test GNULIB_WCHAR_SINGLE_LOCALE instead of GNULIB_WCHAR_SINGLE. * lib/wcwidth.c: Likewise. * tests/test-wcwidth.c: Likewise. * doc/multithread.texi: Document GNULIB_WCHAR_SINGLE_LOCALE instead of GNULIB_WCHAR_SINGLE. * NEWS: Document the change. 2021-03-06 Bruno Haible mbrtowc: Allow locking optimization independently of 'unlocked-io'. * lib/mbtowc-lock.h: Test GNULIB_MBRTOWC_SINGLE_THREAD instead of USE_UNLOCKED_IO. * doc/multithread.texi: Document GNULIB_MBRTOWC_SINGLE_THREAD. 2021-03-06 Bruno Haible regex: Allow locking optimization independently of 'unlocked-io'. * lib/regex_internal.h: Test GNULIB_REGEX_SINGLE_THREAD instead of USE_UNLOCKED_IO. * doc/multithread.texi: Document GNULIB_REGEX_SINGLE_THREAD. 2021-03-06 Bruno Haible exclude: Allow stdio optimization independently of 'unlocked-io'. * lib/exclude.c: Test GNULIB_EXCLUDE_SINGLE_THREAD instead of USE_UNLOCKED_IO. * modules/exclude (Depends-on): Add unlocked-io-internal. * doc/multithread.texi: Document GNULIB_EXCLUDE_SINGLE_THREAD. 2021-03-06 Bruno Haible readutmp: Optimize stdio accesses. * lib/readutmp.c: Include unlocked-io.h unconditionally. * modules/readutmp (Depends-on): Add unlocked-io-internal. 2021-03-06 Bruno Haible mountlist: Optimize stdio accesses. * lib/mountlist.c: Include unlocked-io.h unconditionally. * modules/mountlist (Depends-on): Add unlocked-io-internal. 2021-03-06 Bruno Haible getusershell: Optimize stdio accesses when possible. * lib/getusershell.c: Test GNULIB_GETUSERSHELL_SINGLE_THREAD instead of USE_UNLOCKED_IO. * modules/getusershell (Depends-on): Add unlocked-io-internal. * doc/multithread.texi: Document GNULIB_GETUSERSHELL_SINGLE_THREAD. 2021-03-06 Bruno Haible unlocked-io-internal: New module. * m4/unlocked-io.m4 (gl_FUNC_GLIBC_UNLOCKED_IO): Don't define USE_UNLOCKED_IO here. * modules/unlocked-io-internal: New file, based on modules/unlocked-io. * modules/unlocked-io (Description): Clarify. (Files, Depends-on): Just use the unlocked-io-internal module. (configure.ac): Define GNULIB_STDIO_SINGLE_THREAD and USE_UNLOCKED_IO here. * doc/multithread.texi: Clarify when the 'unlocked-io' module can be used. 2021-03-06 Bruno Haible posixtm: Remove unused includes. * lib/posixtm.c: Don't include , , unlocked-io.h. 2021-03-06 Bruno Haible dynarray: Add tests. * tests/test-dynarray.c: New file. * modules/dynarray-tests: New file. dynarray: Make the module usable on its own. * lib/dynarray.h: Document the exported API. Comments taken from lib/malloc/dynarray-skeleton.c and lib/malloc/dynarray.h. Distinguish an internal include from an include for instantiation. In the latter case, include and . * modules/dynarray (Depends-on): Add intprops. (Include): Reduce to just "dynarray.h". 2021-03-06 Bruno Haible scratch_buffer: Add comment. * lib/scratch_buffer.h: Add comment. 2021-03-06 Paul Eggert parse-datetime2: fix licensing Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2021-03/msg00017.html * gnulib-tool (func_get_license): Treat parse-datetime2 (actually, anything starting with "parse-datetime") like parse-datetime, as far as licenses go. 2021-03-06 Bruno Haible free-posix: Update documentation. * doc/posix-functions/free.texi: Add platform details. 2021-03-06 Bruno Haible doc: Update for glibc 2.33. * doc/glibc-functions/mallinfo2.texi: New file. * doc/gnulib.texi: Include it. (Glibc sys/vtimes.h): Remove section. * doc/glibc-functions/vtimes.texi: Remove file. * doc/pastposix-functions/h_errno.texi: Update. * doc/posix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. 2021-03-04 Bruno Haible stddef: Generalize tcc workaround to other compilers. Suggested by Paul Eggert in . * lib/stddef.in.h: Undefine the __need_* macros with all compilers. * doc/posix-headers/stddef.texi: Mention that the TinyCC bug also exists on macOS. 2021-03-04 Paul Eggert stdalign: port to tcc + glibc * lib/stdalign.in.h (_Alignas): Do not define using __attribute__ if __attribute__ is defined as a macro, as __attribute__ surely a no-op in that case and this is an area where __attribute__ cannot simply be ignored. * m4/stdalign.m4 (gl_STDALIGN_H): Include so that it #defines __attribute__(x) to nothing on glibc-based systems when non-GNU-C-compatible compilers are used. This exposes a bug in Tiny C Compiler 0.9.27’s implementation of _Alignas on glibc platforms. 2021-03-03 Bruno Haible asyncsafe-spin, simple-atomic: Add support for tcc/x86. * lib/asyncsafe-spin.c (memory_barrier): With tcc/x86, don't use the 'mfence' instruction. * lib/simple-atomic.c (memory_barrier): Likewise. asyncsafe-spin, simple-atomic: Add support for tcc. * lib/asyncsafe-spin.c (memory_barrier, atomic_compare_and_swap): On i386 and x86_64, treat tcc like older GCC or clang. * lib/simple-atomic.c (memory_barrier, atomic_compare_and_swap, atomic_compare_and_swap_ptr): Likewise. 2021-03-02 Bruno Haible stddef: Work around an interoperability problem of tcc with glibc. Reported by Luca Saiu in . * lib/stddef.in.h [__TINYC__]: In case of the special invocation convention, undefine the macros that TinyCC's should undefine but doesn't. * doc/posix-headers/stddef.texi: Mention the TinyCC bug. 2021-03-02 Paul Eggert mbrtowc: port to AIX 7.1 with xlc 12.1 Fix a problem with locks when building GNU Tar (Savannah commit 55f2a0772e08b9febac3ac0de5cb048d4c60d2f5) on AIX 7.1 with IBM XL C/C++ V12.1 using ‘./configure CC=xlc’. The link fails due to missing definitions of pthread_mutex_lock and pthread_mutex_unlock. GNU Tar uses unlocked-io and so should not need to worry about multithreading or locks. * lib/mbtowc-lock.h (mbtowc_with_lock) [USE_UNLOCKED_IO]: Don’t bother with locks, since this app is single-threaded. There may be similar linking problems with lib/nl_langinfo.c and lib/setlocale_null.c but my GNU Tar build didn’t run into them, so I left them alone for now. 2021-03-01 Paul Eggert unlocked-io: do not redefine getc_unlocked etc. I ran into this problem on AIX 7.1 with GNU Tar, which enables visibility of getc_unlocked etc. after testing whether they’re declared, causing argp-namefrob.h and unlocked-io.h to redefine the macros. * lib/argp-namefrob.h, lib/unlocked-io.h: (clearerr_unlocked, feof_unlocked ferror_unlocked) (fflush_unlocked, fgets_unlocked, fputc_unlocked, fputs_unlocked) (fread_unlocked, fwrite_unlocked, getc_unlocked, getchar_unlocked) (putc_unlocked, putchar_unlocked): Do not define if already defined. parse-datetime2: new module This splits the old parse-datetime into two parts; the first is parse-datetime2 which supports all the new bells and whistles, the second is parse-datetime, which reverts to its original intent. This avoids some bogus diagnostics when build GNU Tar with gcc -flto -fanalyze and with --enable-gcc-warnings. And it slims down the executable a bit. * NEWS: Mention this. * lib/parse-datetime.y (parser_control) [!GNULIB_PARSE_DATETIME2]: Omit parse_datetime_debug member. (debugging): New function. Use it everywhere the old code would load parse_datetime_debug. (parse_datetime_body): New static function, with the body of the old parse_datetime2. Set pc.parse_datetime_debug only if GNULIB_PARSE_DATETIME2. (parse_datetime2, parse_datetime): Use this new function. (parse_datetime2) [!GNULIB_PARSE_DATETIME2]: Remove. * modules/parse-datetime2: New file. 2021-02-27 Bruno Haible string-buffer: Fixes. * modules/string-buffer (License): Change to LGPL. * tests/test-string-buffer.c (main): Add another sb_appendf call, that is more likely to fail. 2021-02-25 Bernhard Voelker gitlog-to-changelog: output SHA in "empty commit message" warning * build-aux/gitlog-to-changelog: Add $sha to above warning diagnostic. 2021-02-24 Paul Eggert glob: include libc-config.h in a more-standard way Inspired by Tom Tromey’s report for RHEL 6 in: https://lists.gnu.org/r/bug-gnulib/2021-02/msg00088.html * lib/glob.c [!_LIBC]: Include libc-config.h, not just config.h * lib/glob.in.h: Include libc-config.h only if needed. 2021-02-21 Bruno Haible string-buffer: Add tests. * tests/test-string-buffer.c: New file. * modules/string-buffer-tests: New file. string-buffer: New module. * lib/string-buffer.h: New file. * lib/string-buffer.c: New file. * modules/string-buffer: New file. * doc/posix-functions/open_memstream.texi: Mention the new module. 2021-02-21 Bruno Haible scratch_buffer: Document the exported API. * lib/scratch_buffer.h: Add comments, taken from lib/malloc/scratch_buffer.h. 2021-02-21 Bruno Haible DEPENDENCIES: Update. * DEPENDENCIES: Require GCC >= 3.1. Tell where to find working GNU m4 tarballs. Mention awk. Point to pre-built packages for gettext, bison, gperf, texinfo. 2021-02-20 Bruno Haible parse-datetime: Fix comment. * modules/parse-datetime (Makefile.am): Fix comment. 2021-02-16 Bruno Haible passfd: Fix test failure on FreeBSD >= 12 and NetBSD in 64-bit mode. * lib/passfd.c (recvfd): Use the CMSG_SPACE macro to compute the value for msg_controllen. 2021-02-16 Paul Eggert Port better to macOS Mojave Problem reported by Tom Shields in: https://lists.gnu.org/r/bug-gnulib/2021-02/msg00064.html * config/srclist.txt: Comment out dynarray_finalize.c. * lib/dynarray.h (__libc_dynarray_at_failure): Don’t include libc-config.h here, as that’s the includer’s responsibility. * lib/malloc/dynarray_at_failure.c: * lib/malloc/dynarray_emplace_enlarge.c: * lib/malloc/dynarray_finalize.c: * lib/malloc/dynarray_resize.c: * lib/malloc/dynarray_resize_clear.c: If _LIBC is not defined, include libc-config.h. 2021-02-15 Bruno Haible linked-list test: Add test for SIGNAL_SAFE_LIST. (It currently fails.) * tests/test-asyncsafe-linked_list.sh: New file. * tests/test-asyncsafe-linked_list.c: New file. * modules/linked-list-tests (Files): Add them. (Depends-on): Add thread, yield, nanosleep, sigaction, sigprocmask. (Makefile.am): Arrange to compile test-asyncsafe-linked_list.c and run test-asyncsafe-linked_list.sh. 2021-02-14 Bruno Haible simple-atomic: Add tests. * tests/test-simple-atomic.c: New file. * modules/simple-atomic-tests: New file. simple-atomic: New module. * lib/simple-atomic.h: New file. * lib/simple-atomic.c: New file, based on lib/asyncsafe-spin.c. * modules/simple-atomic: New file. 2021-02-14 Bruno Haible Fix distinction of 32-bit/64-bit mode with xlc 13.1.3 on AIX. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI, gl_HOST_CPU_C_ABI_32BIT): Test __LP64__ instead of _ARCH_PPC64. * m4/lib-ld.m4 (AC_LIB_PROG_LD): Likewise. * lib/stddef.in.h: Likewise. 2021-02-13 Ozkan Sezer lib-symbol-visibility: Make it work with -Wmissing-prototypes. * m4/visibility.m4 (gl_VISIBILITY): Avoid error from simultaneous use of -Wmissing-prototypes and -Werror. 2021-02-08 Bruno Haible stddef: Fix test-stddef compilation error on MidnightBSD/x86. * lib/stddef.in.h (_GL_STDDEF_ALIGNAS, rpl_max_align_t, max_align_t): Don't ignore HAVE_MAX_ALIGN_T if the compiler is clang. 2021-02-08 Bruno Haible Document non-standard prototypes on MidnightBSD. * doc/posix-functions/initstate.texi: Mention different prototype on MidnightBSD 2.0. * doc/posix-functions/srandom.texi: Likewise. * doc/posix-functions/getlogin_r.texi: Likewise. * doc/glibc-functions/sethostname.texi: Likewise. 2021-02-08 Bruno Haible posixtm tests: Fix warnings seen on MidnightBSD/x86. * tests/test-posixtm.c (main): Convert two 'time_t' values to 'long' for printing. 2021-02-07 Bruno Haible Add cross-compilation guesses for MidnightBSD. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): When cross-compiling, use the result from native compilation. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Likewise. * m4/mbrtoc32.m4 (gl_MBRTOC32_SANITYCHECK): Likewise. * m4/mprotect.m4 (gl_FUNC_MPROTECT_WORKS): Likewise. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_SECURE): Likewise. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_F, gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_VSNPRINTF_ZEROSIZE_C99): Likewise. * m4/strfmon_l.m4 (gl_FUNC_STRFMON_L): Likewise. * m4/setlocale_null.m4 (gl_FUNC_SETLOCALE_NULL): Use predetermined result on MidnightBSD. 2021-02-07 Bruno Haible threadlib: Add support for MidnightBSD. * m4/threadlib.m4 (gl_WEAK_SYMBOLS, gl_THREADLIB_BODY): On MidnightBSD, use the same test as on FreeBSD. 2021-02-07 Bruno Haible host-os: Add support for MidnightBSD. * m4/host-os.m4 (gl_HOST_OS): On MidnightBSD, set HOST_OPERATING_SYSTEM to "MidnightBSD", not "Midnightbsd". 2021-02-07 Bruno Haible c-stack: Adjust for MidnightBSD. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): On MidnightBSD, set FAULT_YIELDS_SIGBUS. 2021-02-07 Bruno Haible relocatable-prog: Add support for MidnightBSD. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Use the ELF $ORIGIN trick also on MidnightBSD >= 1.1. * build-aux/config.libpath: Treat MidnightBSD like FreeBSD. * build-aux/reloc-ldflags: Likewise. 2021-02-07 Bruno Haible havelib: Add support for MidnightBSD. * build-aux/config.rpath: Treat MidnightBSD like FreeBSD >= 4. 2021-02-07 Bruno Haible wcwidth: Document MidnightBSD bug. * doc/posix-functions/wcwidth.texi: Mention MidnightBSD as an affected platform. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Update comments. 2021-02-07 Bruno Haible pthread_sigmask: Document MidnightBSD bug. * doc/posix-functions/pthread_sigmask.texi: Mention MidnightBSD as an affected platform. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Update cross-compilation guess accordingly. 2021-02-07 Bruno Haible immutable: Avoid test failures on MidnightBSD. * tests/test-immutable.c (install_segv_handler): On FreeBSD, install the handler also for SIGBUS. 2021-02-07 Bruno Haible c32is*: Avoid test failures on MidnightBSD. * tests/test-c32isalnum.c (main): On FreeBSD, disable tests that fail on MidnightBSD 1.1. * tests/test-c32isalpha.c (main): Likewise. * tests/test-c32isblank.c (main): Likewise. * tests/test-c32islower.c (main): Likewise. * tests/test-c32isupper.c (main): Likewise. 2021-02-05 Paul Eggert regex: fix comment location * lib/regexec.c (update_regs): Move comment. regex-tests: add bug 11053 test * tests/test-regex.c (main): New test case for glibc bug 11053. regex: debug check for set member duplicates * lib/regex_internal.c (re_node_set_insert): Add a DEBUG_ASSERT that would have caught some recently-fixed performance bugs that caused sets to contain duplicate members. regex: fix longstanding backref match bug This fixes a longstanding glibc bug concerning backreferences (2009-12-04). * lib/regexec.c (proceed_next_node, push_fail_stack) (pop_fail_stack): Push and pop the previous registers as well as the current ones. All callers changed. (set_regs): Also pop if CUR_NODE has already been checked, so that it does not get added as a duplicate set entry. (update_regs): Fix comment location. * tests/test-regex.c (tests): New constant. (bug_regex11): New test function. (main): Bump alarm value. Call new test function. regex: avoid duplicate in espilon closure * lib/regcomp.c (calc_eclosure_iter): Insert NODE into epsilon closure first rather than last. Otherwise, the epsilon closure might contain a duplicate of NODE. regex-tests: fix typo * tests/test-regex.c (main): Fix typo that would have caused an old test case to report incorrect values on failure. regex: make it easier to merge into glibc * lib/regex_internal.h [_LIBC]: Do not include Gnulib’s dynarray.h. regex: minor refactoring * lib/regexec.c (proceed_next_node): Use more-local decls. regex: avoid undefined behavior * lib/regexec.c (pop_fail_stack): If the stack is empty, return -1 instead of indulging in undefined behavior. This simplifies callers, and avoids undefined behavior in some cases (see glibc bug 11053, though this change does not fix that overall bug). regex: improve comments * lib/regexec.c: Add and correct comments about return values. 2021-01-31 Bruno Haible relocatable-prog-wrapper: Tweak today's patch. * build-aux/install-reloc (func_create_wrapper): Clean up free.o. 2021-01-31 Bruno Haible fmaf: Document QEMU bug. * doc/posix-functions/fmaf.texi: Add note about QEMU bug. 2021-01-31 Bruno Haible remainderl: Work around musl libc bug. * doc/posix-functions/remainderl.texi: Document musl libc bug. * m4/remainderl.m4 (gl_FUNC_REMAINDERL_WORKS): Add more tests. Update cross compilation guess. 2021-01-31 Bruno Haible log2l: Work around musl libc bugs. * doc/posix-functions/log2l.texi: Document musl libc bugs. * m4/log2l.m4 (gl_FUNC_LOG2L_WORKS): Add more tests. Update cross compilation guess. 2021-01-31 Bruno Haible log1pl: Work around musl libc bug. * doc/posix-functions/log1pl.texi: Document musl libc bug. * m4/log1pl.m4 (gl_FUNC_LOG1PL_WORKS): New macro. (gl_FUNC_LOG1PL): Invoke it. 2021-01-31 Bruno Haible log10l: Document musl libc bug. * doc/posix-functions/log10l.texi: Document musl libc bug. * m4/log10l.m4 (gl_FUNC_LOG10L_WORKS): Update comment and cross compilation guess. 2021-01-31 Bruno Haible logl: Document musl libc bug. * doc/posix-functions/logl.texi: Document musl libc bug. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): Update comment and cross compilation guess. 2021-01-31 Bruno Haible expm1l: Document musl libc bug. * doc/posix-functions/expm1l.texi: Document musl libc bug. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Update comment and cross compilation guess. 2021-01-31 Bruno Haible expl: Document musl libc bug. * doc/posix-functions/expl.texi: Document musl libc bug. * m4/expl.m4 (gl_FUNC_EXPL): Update comment and cross compilation guess. 2021-01-31 Bruno Haible relocatable-prog-wrapper: Update after recent changes. * lib/relocwrapper.c: Update comments. * modules/relocatable-prog-wrapper (Files): Add lib/scratch_buffer.h, lib/malloc/scratch_buffer*, lib/malloc.c, lib/realloc.c, lib/free.c, lib/mempcpy.c, lib/rawmemchr.c, m4/lstat.m4. Remove lib/lstat.c. (Depends-on): Add c99, eloop-threshold, fcntl-h, idx, intprops, libc-config, stddef, sys_stat. Remove alloca-opt. (configure.ac): Invoke gl_FUNC_MALLOC_POSIX, gl_FUNC_REALLOC_POSIX, gl_FUNC_FREE, gl_FUNC_MEMPCPY, gl_FUNC_RAWMEMCHR. * lib/canonicalize-lgpl.c (memmove): Undefine in the relocwrapper. * build-aux/install-reloc (func_create_wrapper): Compile also malloc/scratch_buffer_*.c, malloc.c, realloc.c, free.c, mempcpy.c, rawmemchr.c. Don't compile lstat.c. Make it possible to compile rawmemchr.c separately, unconditionally. * lib/rawmemchr.c: Don't define rawmemchr if not needed. Make it possible to compile mempcpy.c separately, unconditionally. * lib/mempcpy.c: Don't define mempcpy if not needed. Make it possible to compile free.c separately, unconditionally. * m4/free.m4 (gl_FUNC_FREE): Define HAVE_FREE_POSIX. * lib/free.c: Don't define rpl_free if not needed. Make it possible to compile realloc.c separately, unconditionally. * modules/realloc-posix (configure.ac): Invoke gl_MODULE_INDICATOR. * lib/realloc.c: Don't define rpl_realloc if not needed. Make it possible to compile malloc.c separately, unconditionally. * modules/malloc-posix (configure.ac): Invoke gl_MODULE_INDICATOR. * lib/malloc.c: Don't define rpl_malloc if not needed. 2021-01-31 Bruno Haible canonicalize-lgpl: Simplify. * lib/canonicalize-lgpl.c (_GL_USE_STDLIB_ALLOC): Remove macro. 2021-01-30 Bruno Haible canonicalize, canonicalize-lgpl: Straighten dependencies. * modules/canonicalize-lgpl (Depends-on): Remove free-posix, malloc-posix. Add unistd. * modules/canonicalize (Depends-on): Remove free-posix, xalloc. Add unistd. 2021-01-30 Bruno Haible scratch_buffer: Fix dependencies. * modules/scratch_buffer (Depends-on): Add malloc-posix, realloc-posix, free-posix. 2021-01-26 Bruno Haible doc: More precise wording. Reported by Reuben Thomas in . * doc/relocatable.texi (Enabling Relocatability): Talk about package management systems in general. doc: Remove obsolete text. Suggested by Reuben Thomas in . * doc/relocatable.texi (Enabling Relocatability): Stop mentioning an issue of libtool 1.5.x. 2021-01-26 Simon Josefsson maintainer-makefile: Mimic bootstrap's gnulib-srcdir guessing. * top/maint.mk (gnulib_dir): If $(srcdir)/gnulib doesn't exist, fall back to $GNULIB_SRCDIR. 2021-01-25 Bruno Haible posix_spawn_file_actions_* tests: Fix module dependencies. * modules/posix_spawn_file_actions_addclose-tests (Depends-on): Add posix_spawn_file_actions_destroy. * modules/posix_spawn_file_actions_addopen-tests (Depends-on): Likewise. * modules/posix_spawn_file_actions_adddup2-tests (Depends-on): Likewise. * modules/posix_spawn_file_actions_addchdir-tests (Depends-on): Likewise. * modules/posix_spawn_file_actions_addfchdir-tests (Depends-on): Likewise. 2021-01-25 Bruno Haible posix_spawn_file_actions_addclose: Relax configure test. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE): Test a negative file descriptor, not an out-of-range file descriptor. * tests/test-posix_spawn_file_actions_addclose.c (main): Add comment. * doc/posix-functions/posix_spawn_file_actions_addclose.texi: Update. 2021-01-25 Simon Josefsson getaddrinfo: Doc fix. * doc/posix-functions/getaddrinfo.texi (getaddrinfo): Gnulib does not support IDN. 2021-01-24 Bruno Haible getcwd: Fix cross-compilation guess for musl libc. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Guess no also on musl libc. * doc/posix-functions/getcwd.texi: Update platform info. 2021-01-24 Bruno Haible expm1l: Fix configure test result with GCC 10 on powerpc64le. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Change test to avoid GCC optimization. 2021-01-23 Bruno Haible utime: Fix configure test (regression 2020-12-04). Reported by Ryan Schmidt via Tim Rühsen in . * m4/utime.m4 (gl_FUNC_UTIME): In the test program, include , not . 2021-01-23 Paul Eggert libc-config: port to Xcode 7 Problem reported by Mattias Engdegård in: https://lists.gnu.org/r/emacs-devel/2021-01/msg01089.html * lib/cdefs.h (__nonnull): If already defined but glibc is not in use, override the definition with Gnulib’s _GL_ATTRIBUTE_NONNULL. This is needed for Xcode 7, which has a ‘#define __nonnull _Nonnull’ builtin for backwards-compatibility with an older Xcode syntax that GNUish code never uses. 2021-01-23 Bastien Roucariès explicit_bzero: Add fallback for other compilers. * lib/explicit_bzero.c (explicit_bzero): For other compilers, invoke memset through a volatile function pointer. explicit_bzero: Add support for clang. * lib/explicit_bzero.c (explicit_bzero): Add a compiler barrier for clang. 2021-01-21 Paul Eggert Port FALLTHROUGH to clang 3.4 and earlier Problem reported by Akim Demaille in: https://lists.gnu.org/r/bug-gnulib/2021-01/msg00241.html * lib/cdefs.h (__glibc_has_attribute): * m4/gnulib-common.m4 (gl_COMMON_BODY): Do not trust __has_attribute in clang 3.4 and earlier, as says that __has_attribute is unreliable in these old versions. 2021-01-20 Bruno Haible gc-random: Fix link error in tests. * modules/crypto/gc-random (Link): New section. * modules/crypto/gc-tests (Makefile.am): Link test-gc with $(LIB_GETRANDOM). 2021-01-20 Simon Josefsson gc-random: Replace implementation with call to getrandom. * lib/gc-gnulib.c [GNULIB_GC_RANDOM]: Replace #include's with those needed for getrandom. (gc_init): Remove old randomness code. (gc_done): Likewise. (randomize): Rewrite using getrandom, inspired by getentropy. * m4/gc-random.m4: Remove file. * modules/crypto/gc-random: Drop gc-random.m4, gl_GC_RANDOM, and LIB_GC_RANDOM. Add conditional dependency on getrandom. * modules/crypto/gc-tests (test_gc_LDADD): Drop LIB_GC_RANDOM. 2021-01-20 Bruno Haible exec*e tests: Avoid test failures on Cygwin. * tests/test-execle-main.c (main): On Cygwin, add /bin to the new PATH. * tests/test-execve-main.c (main): Likewise. * tests/test-execvpe-main.c (main): Likewise. 2021-01-20 Bruno Haible canonicalize-lgpl: Work around a Cygwin bug. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Test for lstat. Add a test case that involves a symbolic link to an existing file. * doc/posix-functions/realpath.texi: Mention the Cygwin bug. 2021-01-20 Bruno Haible doc: Document ptsname_r bug on Cygwin. * doc/glibc-functions/ptsname_r.texi: Mention Cygwin bug. 2021-01-20 Bruno Haible sethostname tests: Avoid test failure on Cygwin. * tests/test-sethostname2.c (main): Treat errno EACCESS like EPERM. 2021-01-19 Paul Eggert fnmatch, regex, fts: FALLTHROUGH consistency Be more consistent about how FALLTHROUGH is defined. For Gnulib, use attribute.h. For glibc, use __GNUC__ >= 7. Problem for glibc reported by Vaseeharan Vinayagamoorthy in: https://sourceware.org/pipermail/libc-alpha/2021-January/121778.html * lib/fnmatch.c (FALLTHROUGH) [_LIBC]: * lib/regex_internal.h (FALLTHROUGH) [_LIBC]: Don’t worry about Clang, as it’s not needed and provokes GCC. * lib/fts.c (FALLTHROUGH) [!_LIBC]: * lib/regex_internal.h (FALLTHROUGH) [!_LIBC]: Rely on attribute.h for FALLTHROUGH * modules/regex: Depend on attribute module. 2021-01-19 KO Myung-Hun spawn-pipe: Fix SIGSEGV on OS/2 kLIBC. * lib/spawn-pipe.c [OS/2 kLIBC]: Check directory correctly if it means a current directory. 2021-01-19 KO Myung-Hun dirent: Fix compilation error in C++ mode on OS/2 kLIBC. * lib/dirent.in.h (dirfd): Redefine dirfd macro as a rpl function always. 2021-01-19 KO Myung-Hun zerosize-ptr: Fix compilation on OS/2 kLIBC. * tests/zerosize-ptr.h [OS/2 kLIBC]: Don't use mmap(). 2021-01-19 KO Myung-Hun stddef: Fix compilation for max_align_t on OS/2 kLIBC. * lib/stddef.in.h [OS/2 kLIBC]: Include in C++ mode. 2021-01-19 KO Myung-Hun yield: Implement for OS/2 kLIBC. * modules/yield (Depends-on): Add sched_yield. sched_yield: Implement for OS/2 kLIBC. * lib/sched_yield.c (sched_yield) [OS/2 kLIBC]: New implementation. 2021-01-19 KO Myung-Hun spawn: Use special invocation for on OS/2 kLIBC. * lib/spawn.in.h: Use special invocation to include properly on OS/2 kLIBC. 2021-01-18 Bruno Haible noreturn tests: Avoid test failure on Solaris 10/x86 with cc. * tests/test-noreturn.c (main): Return 0. 2021-01-18 Bruno Haible uninorm tests: Fix compilation error on Cygwin. * tests/uninorm/test-nfc.c (n): Don't define when using a preinstalled libunistring on Windows. * tests/uninorm/test-nfd.c (n): Likewise. * tests/uninorm/test-nfkc.c (n): Likewise. * tests/uninorm/test-nfkd.c (n): Likewise. 2021-01-17 Bruno Haible immutable: Implement on native Windows. * lib/immutable.h (IMMUTABLE_EFFECTIVE): Set to 1 on native Windows. * lib/immutable.c: Include . (CreateFileMapping): New macro. (init_pagesize, init_mmap_file, alloc_pages, free_pages): Add implementation for native Windows. 2021-01-17 Bruno Haible canonicalize-lgpl tests: Fix link error. * modules/canonicalize-lgpl-tests (Makefile.am): Link test-canonicalize-lgpl with $(LIBINTL). 2021-01-17 Bruno Haible canonicalize-lgpl: Work around // handling in realpath() of musl 1.2.2. Reported by Natanael Copa in . * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Add a test whether // is the same as /, on Linux only. * lib/canonicalize-lgpl.c: Correct indentation of preprocessor directives. * doc/posix-functions/realpath.texi: Mention the musl 1.2.2 bug. 2021-01-17 Bruno Haible canonicalize[-lgpl] tests: Add more tests. * tests/test-canonicalize.c (main): Add detailed tests for // handling. * tests/test-canonicalize-lgpl.c (main): Likewise. 2021-01-17 Bruno Haible argp tests: Avoid test failures on Alpine Linux. * tests/test-argp-2.sh: Use the test framework (init.sh). Use the 'compare' function instead of 'diff -c'. * tests/test-argp-version-etc-1.sh: Likewise. 2021-01-17 Bruno Haible get-rusage-data tests: Avoid test failure on musl libc. * modules/get-rusage-data-tests (Files): Add m4/musl.m4. (configure.ac): Invoke gl_MUSL_LIBC. * tests/test-get-rusage-data.c (main): Treat musl libc like glibc. 2021-01-17 Bruno Haible immutable, get-rusage-data: Fix autoconf warning. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Define through AC_DEFUN_ONCE. 2021-01-16 Bruno Haible vma-iter: Port to 64-bit Haiku. * lib/vma-iter.c (vma_iterate): Adapt to changed signature of get_next_area_info. 2021-01-15 Bruno Haible doc: Update doc about realpath. * doc/posix-functions/realpath.texi: Update info about macOS. 2021-01-13 Paul Eggert verify: simplify static_assert configuration * lib/verify.h (_GL_HAVE__STATIC_ASSERT, _GL_HAVE__STATIC_ASSERT1): Do not define for C++. This should be good enough nowadays, since recent-enough C++ compilers have static_assert. (_GL_HAVE_STATIC_ASSERT_CXX11, _GL_HAVE_STATIC_ASSERT_CXX17): Remove. All uses replaced by simply checking __cpp_static_assert. 2021-01-13 Simon Josefsson lib-msvc-compat: Update libtool usage recommendation. * doc/ld-output-def.texi (Visual Studio Compatibility): Install .def files into libdir, not bindir. Have libfoo-*.def file depend on libfoo.la to fix parallell builds. 2021-01-12 Bruno Haible verify: Use C++11 static_assert when available. Reported by Alexandre Duret-Lutz in . * lib/verify.h (_GL_HAVE_STATIC_ASSERT_CXX11): New macro. (_GL_HAVE_STATIC_ASSERT_CXX17): Renamed from _GL_HAVE_STATIC_ASSERT1. (_GL_VERIFY): Use static_assert when available with C++11 syntax. 2021-01-11 Paul Eggert tempname: consume less entropy Derived from a glibc patch proposed by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2021-January/121302.html * lib/tempname.c: Include stdbool.h. (random_bits): New arg use_getrandom. (try_tempname_len): Skip getrandom on the first try, unless __GT_NOCREATE. * modules/tempname (Depends-on): Add stdbool. 2021-01-10 Bruno Haible lchmod-tests: Fix link error. * modules/lchmod-tests (Makefile.am): Don't assume that LIBINTL is set. 2021-01-10 Simon Josefsson Correct preceeding change. * top/gitsub.sh: Update link. 2021-01-09 Bruno Haible immutable: Add tests. * tests/test-immutable.sh: New file. * tests/test-immutable.c: New file. * modules/immutable-tests: New file. immutable: New module. * lib/immutable.h: New file. * lib/immutable.c: New file. * m4/immutable.m4: New file. * m4/mprotect.m4: New file, based on libffcall/m4/codeexec.m4. * modules/immutable: New file. 2021-01-10 Simon Josefsson Use https:// instead of git://. * build-aux/bootstrap (default_gnulib_url): Ditto. * config/srclistvars.sh: Ditto. * doc/gnulib-readme.texi (Git Checkout): Ditto. * doc/gnulib-tool.texi (VCS Issues): Ditto. * top/gitsub.sh: Update link. 2021-01-09 Paul Eggert snippet/_Noreturn: port to pedantic clang Problem reported by Joe Nelson in: https://lists.gnu.org/r/bug-gnulib/2021-01/msg00152.html * doc/noreturn.texi: Improve. * lib/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY): Do not assume _Noreturn works as-is when __STRICT_ANSI__ is defined, unless __STDC_VERSION__ indicates C11 or later. * lib/_Noreturn.h (_Noreturn): Fall back on __attribute__ ((__noreturn__)) if Clang; this merges the 2020-08-10T23:53:13Zbruno@clisp.org patch to m4/gnulib-common.m4. 2021-01-09 Darshit Shah Allow setting CVS username for gnu-web-doc-update. * build-aux/gnu-web-doc-update: Introduce new option --user to set the name of the user on Savannah, when it doesn't match $USER. 2021-01-09 Bruno Haible exp* tests: Work around clang 6.0.1 optimization bugs on x86. * tests/test-exp-ieee.h (test_function): Mark some variable as 'volatile'. * tests/test-exp2-ieee.h (test_function): Likewise. 2021-01-09 Bruno Haible fchmodat: Work around trailing slash bug in fchmodat() on AIX 7.2. * m4/fchmodat.m4 (gl_FUNC_FCHMODAT): In the test whether fchmodat works, also test for the trailing slashes behaviour. Define HAVE_NEARLY_WORKING_FCHMODAT if this is the only missing feature. * lib/fchmodat.c (fchmodat): If HAVE_NEARLY_WORKING_FCHMODAT, handle trailing slashes here. * modules/fchmodat (Depends-on): Sort by condition, not alphabetically. * doc/posix-functions/fchmodat.texi: Document the AIX bug. 2021-01-09 Bruno Haible fchmod-tests, fchmodat tests, lchmod tests: Add more tests. * tests/test-fchmod.c: Include . (BASE): New macro. (main): Add more tests. * tests/test-fchmodat.c (main): Add more tests. * tests/test-lchmod.c (main): Likewise. 2021-01-09 Bruno Haible utimensat: Fix typo in last commit. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Fix typo in macro explanation. 2021-01-09 Bruno Haible truncate: Document last workaround. * doc/posix-functions/truncate.texi: Document the AIX bug. 2021-01-08 Paul Eggert dynarray: work even if ‘free’ is replaced Problem reported by Darshit Shah in: https://lists.gnu.org/r/bug-gnulib/2021-01/msg00140.html * lib/malloc/dynarray-skeleton.c (DYNARRAY_FREE): New macro. Use it everywhere instead of DYNARRAY_NAME (free). tempname: don’t block for minutes Derived from a patch proposed by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2021-January/121302.html * lib/tempname.c (random_bits): Use GRND_NONBLOCK. tempname: sync with proposed glibc patch This is from Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2021-January/121301.html * lib/tempname.c (__lxstat64): Remove. (__lstat64, __stat64): New replacement macros. All uses changed. regex: stop using alloca * lib/regex_internal.h: Do not include or define __libc_use_alloca or alloca. Patch written by Adhemerval Zanella: https://sourceware.org/pipermail/libc-alpha/2021-January/121374.html * modules/regex (Depends-on): Remove alloca-opt. regexec: remove alloca usage in build_trtable Prompted by this different change proposed by Adhemerval Zanella: https://sourceware.org/pipermail/libc-alpha/2021-January/121373.html * lib/regexec.c (build_trtable): Prevent inlining, so that it doesn’t bloat the caller’s stack. Use auto variables instead of alloca/malloc. After these changes, build_trtable’s total stack allocation is only 20 KiB on a 64-bit machine, and this is less than glibc’s 64 KiB cutoff so there’s little point to using alloca to shrink it. Although Gnulib traditionally has used a 4 KiB cutoff, going to 20 KiB here should not be a significant problem in practice; Gnulib-using packages concerned about overflow of tiny stacks can compile with something like gcc -fstack-clash-protection. scratch_buffer: add scratch_buffer_dupfree macro * lib/scratch_buffer.h (__libc_scratch_buffer_dupfree): New macro, needed to support recent changes in this module. regex: remove alloca usage on regex set_regs Derived from this patch by Adhemerval Zanella: https://sourceware.org/pipermail/libc-alpha/2021-January/121372.html * lib/regex_internal.h: Include dynarray.h, for Gnulib. * lib/regexec.c (DYNARRAY_STRUCT, DYNARRAY_ELEMENT) (DYNARRAY_PREFIX): New macros. Include malloc/dynarray-skeleton.c. (set_regs): Use dynarray rather than alloca. * modules/regex (Depends-on): Add dynarray. dynarray: new module * config/srclist.txt: Mention the new files. * lib/cdefs.h (__attribute_maybe_unused__): New macro, like Gnulib’s _GL_ATTRIBUTE_MAYBE_UNUSED but with glibc naming conventions. * lib/libc-config.h: Use it instead of __glibc_likely. * lib/dynarray.h, modules/dynarray: New files. * lib/malloc/dynarray-skeleton.c, lib/malloc/dynarray.h: * lib/malloc/dynarray_at_failure.c: * lib/malloc/dynarray_emplace_enlarge.c: * lib/malloc/dynarray_finalize.c, lib/malloc/dynarray_resize.c: * lib/malloc/dynarray_resize_clear.c, modules/dynarray: New files, from glibc with the following changes needed for portability to compilers that are not recent-enough GCC. * lib/malloc/dynarray_at_failure.c: Include stdlib.h, for abort. (__libc_dynarray_at_failure) [!_LIBC]: Simply abort. * lib/malloc/dynarray_emplace_enlarge.c: * lib/malloc/dynarray_resize.c: Include intprops.h, and use INT_MULTIPLY_WRAPV instead of __builtin_mul_overflow. * lib/malloc/dynarray.h (__libc_dynarray_at_failure): Use _Noreturn instead of __attribute__ ((noreturn)). * lib/malloc/dynarray_resize_clear.c: Do not include stdlib.h; it’s not needed. (__libc_dynarray_resize_clear): Do not do arithmetic on void *. * lib/malloc/dynarray-skeleton.c (struct DYNARRAY_STRUCT): Do not use anonymous unions, as they are not in C99. All uses changed. Use __nonnull (X) instead of __attribute__ ((nonnull X)), and __attribute_maybe_unused__ instead of __attribute__ ((unused)). 2021-01-06 Simon Josefsson bootstrap: Fix parsing of package name. * build-aux/bootstrap (package): Attempt to use autoconf --trace to parse AC_INIT before falling back to sed expression. 2021-01-07 Bruno Haible localename: Fix link error with duplocale on AIX 7.2 (regr. 2019-12-18). * m4/locale_h.m4 (gl_LOCALE_H_DEFAULTS): Initialize LOCALENAME_ENHANCE_LOCALE_FUNCS. * m4/intl-thread-locale.m4 (gt_FUNC_USELOCALE): Set gt_working_uselocale. (gt_INTL_THREAD_LOCALE_NAME): Set gt_fake_locales, gt_good_uselocale, gt_localename_enhances_locale_funcs, LOCALENAME_ENHANCE_LOCALE_FUNCS. Define HAVE_GOOD_USELOCALE, LOCALENAME_ENHANCE_LOCALE_FUNCS. * m4/localename.m4 (gl_LOCALENAME): Test gt_localename_enhances_locale_funcs instead of gt_nameless_locales. * modules/locale (Makefile.am): Substitute LOCALENAME_ENHANCE_LOCALE_FUNCS. * lib/locale.in.h (newlocale, duplocale, freelocale): Don't override if module 'localename' is in use but LOCALENAME_ENHANCE_LOCALE_FUNCS is 0. * lib/localename.c (HAVE_GOOD_USELOCALE): Don't define here. (get_locale_t_name, newlocale, duplocale, freelocale): Define if LOCALENAME_ENHANCE_LOCALE_FUNCS. 2021-01-06 Bruno Haible logb: Fix test failure on glibc/powerpc. * doc/posix-functions/logb.texi: Update platform info. * m4/logb.m4 (gl_FUNC_LOGB_WORKS): Test against bug with negative subnormal numbers. 2021-01-06 Paul Eggert libc-config: simplify clang __has_* macros cdefs.h sometimes used names like __glibc_clang_has_attribute and sometimes __glibc_has_attribute. There is no need in glibc or Gnulib to distinguish clang from other compilers here, so be consistent and use the simpler names. * lib/cdefs.h (__glibc_has_builtin, __glibc_has_extension): Rename from __glibc_clang_has_builtin, __glibc_clang_has_extension. All uses changed. (__glibc_clang_has_attribute): Remove. All uses replaced by __glibc_has_attribute. * lib/libc-config.h [!__glibc_likely]: Undef them here too. This fixes a problem where __glibc_has_attribute was not undeffed. 2021-01-06 Bruno Haible flock: Update documentation. * doc/glibc-functions/flock.texi: Document what to expect on AIX and Solaris. 2021-01-06 Bruno Haible ilogbl: Fix compilation error with xlclang on AIX 7.2. * lib/math.in.h (ilogbl): Undefine macro before declaration. 2021-01-06 Bruno Haible ilogbl: Fix test failures on AIX 7.1 in 64-bit mode. * m4/ilogbl.m4 (gl_FUNC_ILOGBL_WORKS): Test also some denormalized argument. * doc/posix-functions/ilogbl.texi: Mention the AIX bug. 2021-01-06 Bruno Haible ilogb: Fix test failures on AIX 7.1 in 64-bit mode. * m4/ilogb.m4 (gl_FUNC_ILOGB_WORKS): Test also some denormalized argument. * doc/posix-functions/ilogb.texi: Mention the AIX bug. 2021-01-05 Bruno Haible fclose: Fix test failure on AIX 7.2. * m4/fclose.m4 (gl_FUNC_FCLOSE_STDIN): New macro. (gl_FUNC_FCLOSE): Invoke it. Set REPLACE_FCLOSE accordingly. * doc/posix-functions/fclose.texi: Update platform information. * doc/posix-functions/fflush.texi: Likewise. 2021-01-05 Bruno Haible pipe-filter-gi: Fix test failure on AIX 7.2. * lib/pipe-filter-aux.h (SSIZE_MAX) [AIX]: Set to 4096. 2021-01-05 Bruno Haible utimens, utimensat, fdutimensat: Avoid test failures on AIX 7.2. * lib/utimecmp.c (utimecmpat): On AIX, declare equality when the two times differ by less than 0.01 seconds. * tests/test-futimens.h (test_futimens): Pass UTIMECMP_TRUNCATE_SOURCE flag. 2021-01-05 Bruno Haible utimensat: Work around trailing slash bug in utimensat() on AIX 7.2. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Require AC_CANONICAL_HOST. Add a test for trailing slash handling. Improve cross-compilation guesses. Conditionally define HAVE_NEARLY_WORKING_UTIMENSAT. * lib/utimensat.c (rpl_utimensat): Add alternative implementation when HAVE_NEARLY_WORKING_UTIMENSAT is defined. * lib/utimens.c: Use the overridden utimensat when HAVE_NEARLY_WORKING_UTIMENSAT is defined. * doc/posix-functions/utimensat.texi: Mention the AIX bug. 2021-01-05 Bruno Haible ptsname_r, ptsname: Avoid test failures on AIX 7.2. * tests/test-ptsname_r.c (main): On AIX, set a 20-seconds timer. * tests/test-ptsname.c (main): Likewise. On AIX, open a pty through /dev/ptc and don't test the BSD ptys. 2021-01-05 Paul Eggert libc-config: merge from glibc Use a better way of keeping glibc and gnulib lib/cdefs.h mostly in sync, by using lib/cdefs.h only on platforms where does not work well enough for Gnulib. * lib/cdefs.h: Go back to using _SYS_CDEFS_H rather than _GL_DEFS_H as an include guard. (__THROW, __THROWNL, __NTH, __NTHNL): Define to noexcept for C++11 and later. (__glibc_objsize, __glibc_objsize0): New, for _FORTIFY_SOURCE=3. (__warndecl): Remove. (__attribute_copy__): New macro, for GCC 9 support. (__LDBL_REDIR, __LDBL_REDIR_DECL, __LDBL_REDIR1) (__LDBL_REDIR1_DECL, __LDBL_REDIR1_NTH, __REDIRECT_NTH_LDBL) (__REDIRECT_LDBL, __LDBL_REDIR_NTH): Redirections for IEEE long double on powerpc64le. (__LDBL_REDIR2_DECL): New macro. (__attr_access): New macro, for GCC 10 bounds checking. (__attribute_returns_twice__): New macro, for setjmp etc. * lib/libc-config.h: Include only if __glibc_likely is undefined. The following changes apply only if __glibc_likely is not defined. (__LDBL_REDIR2_DECL, __attr_access, __attribute_returns_twice__) (__glibc_clang_has_attribute, __glibc_clang_has_extension) (__glibc_objsize, __glibc_objsize0): Undef these new (or newer) macros. (__P, __PMT, __always_inline): Do not undef, since cdefs.h does that. (__glibc_likely): Do not undef, since this is inside ifndef __glibc_likely. (__warndecl): Do not undef; no longer defined. 2021-01-05 Jim Meyering maintainer-makefile: correct preceding change * top/maint.mk (syntax-check-rules): Use LC_ALL=C, not LANG=C. 2021-01-05 Paul Eggert maint: note syncs to glibc * config/srclist.txt: filename.h, idx.h, scratch_buffer.h and scratch_buffer_dupfree.c are now identical to glibc. Add commentary about some other syncs we’d like. * modules/filename, modules/idx (Maintainer): Add glibc. 2021-01-05 Bruno Haible truncate: Work around trailing slash bug in truncate() on AIX 7.2. * m4/truncate.m4 (gl_FUNC_TRUNCATE): Add a test whether truncate rejects trailing slashes. Set REPLACE_TRUNCATE and define TRUNCATE_TRAILING_SLASH_BUG if not. * lib/truncate.c (orig_truncate): New function. (truncate): Add alternative implementation when TRUNCATE_TRAILING_SLASH_BUG is defined. * modules/truncate (Depends-on): Add sys_stat, stat. 2021-01-05 Bruno Haible mkfifoat: Fix cross-compilation guess (regression from 2021-01-04). * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Fix copy-and-paste mistake. 2021-01-05 Bruno Haible ffsll: Override completely broken implementation on AIX in 32-bit mode. * m4/ffsll.m4 (gl_FUNC_FFSLL): Test whether ffsll minimally works. If not, set REPLACE_FFSLL. * lib/string.in.h (ffsll): Consider REPLACE_FFSLL. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_FFSLL. * modules/string (Makefile.am): Substitute REPLACE_FFSLL. * modules/ffsll (Depends-on, configure.ac): Consider REPLACE_FFSLL. * doc/glibc-functions/ffsll.texi: Mention the AIX 7.2 bug. 2021-01-04 Bruno Haible symlinkat: Fix trailing slash handling. * lib/symlinkat.c (rpl_symlinkat): Don't follow symlinks during the trailing slash handling. * modules/symlinkat (Depends-on): Update conditions. 2021-01-04 Bruno Haible mkfifoat: Update module description. * modules/mkfifoat (Depends-on): Update conditions after last commits. 2021-01-04 Bruno Haible link: Improve trailing slash handling on native Windows. * lib/link.c (link): If stat() fails, provide a better errno. 2021-01-04 Bruno Haible mkfifoat: Work around trailing slash bug in mknodat() on AIX 7.2. * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Set also REPLACE_MKNODAT. * lib/sys_stat.in.h (mknodat): Consider REPLACE_MKNODAT. * lib/mknodat.c: Add an overriding implementation of mknodat(). * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize REPLACE_MKNODAT. * modules/sys_stat (Makefile.am): Substitute REPLACE_MKNODAT. * modules/mkfifoat (Depends-on, configure.ac): Consider REPLACE_MKNODAT. * doc/posix-functions/mknodat.texi: Mention the AIX bug. mkfifoat: Work around trailing slash bug in mkfifoat() on AIX 7.2. * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Add a test whether mkfifoat rejects trailing slashes. Set REPLACE_MKFIFOAT if not. * lib/sys_stat.in.h (mkfifoat): Consider REPLACE_MKFIFOAT. * lib/mkfifoat.c: Add an overriding implementation of mkfifoat(). * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize REPLACE_MKFIFOAT. * modules/sys_stat (Makefile.am): Substitute REPLACE_MKFIFOAT. * modules/mkfifoat (Depends-on): Add fstatat. (configure.ac): Consider REPLACE_MKFIFOAT. * doc/posix-functions/mkfifoat.texi: Mention the AIX bug. 2021-01-04 Bruno Haible libc-config: Avoid overriding the headers from an installed newer glibc. Reported by Paul E Murphy in . * lib/cdefs.h: Use a different include guard than glibc's . * lib/libc-config.h: Update accordingly. 2021-01-04 Simon Josefsson maintainer-makefile: Invoke syntax-checks regardless of locale. * top/maint.mk (syntax-check-rules): Invoke sed with LANG=C environment because [a-z] may not include 'w' in all locales. 2021-01-04 Bruno Haible nstrftime, time_rz: Avoid using an obsolete Autoconf macro. Reported by Mike Gran in . * lib/time-internal.h: Test HAVE_STRUCT_TM_TM_ZONE, not HAVE_TM_ZONE. * lib/time_rz.c: Likewise. * lib/nstrftime.c: Set and test HAVE_STRUCT_TM_TM_ZONE, not HAVE_TM_ZONE. * m4/nstrftime.m4 (gl_FUNC_GNU_STRFTIME): Update comments. 2021-01-04 Bruno Haible expm1f-ieee: Work around AIX 7.2 bug. * m4/expm1f.m4 (gl_FUNC_EXPM1F): Initialize gl_expm1f_required. If module 'expm1f-ieee' is in use, check whether expm1f works according to IEEE. * m4/expm1f-ieee.m4: New file. * modules/expm1f-ieee (Files): Add it. (Depends-on): Update conditions. (configure.ac): Invoke gl_FUNC_EXPM1F_IEEE. * doc/posix-functions/expm1f.texi: Mention the AIX bug. 2021-01-04 Bruno Haible ffsl, ffsll: Work around AIX 7.2 problem. * lib/string.in.h: On AIX, include for the declarations of ffsl and ffsll. * doc/glibc-functions/ffsl.texi: Document the AIX 7.2 problem. * doc/glibc-functions/ffsll.texi: Likewise. 2021-01-04 Bruno Haible ssfmalloc: Fix includes. * lib/ssfmalloc.h: Include , for ffs(). * tests/test-ssfmalloc.c: Include , for memset(). 2021-01-03 Bruno Haible quotearg tests: Avoid test failures on Solaris 11.3. * tests/test-quotearg.sh: Copy the fr/ directory using 'cp -R', not 'cp -a'. 2021-01-03 Bruno Haible tests: Fix link errors on Solaris, when libunistring-optional is in use. * modules/wcwidth (Link): New section. * modules/wcswidth (Link): New section. * modules/mbchar (Link): New section. * modules/mbfile (Link): Link against libunistring. * modules/mbiter (Link): Likewise. * modules/mbuiter (Link): Likewise. * modules/mbmemcasecmp (Link): Likewise. * modules/mbscasecmp (Link): Likewise. * modules/mbscasestr (Link): Likewise. * modules/mbschr (Link): Likewise. * modules/mbscspn (Link): Likewise. * modules/mbslen (Link): Likewise. * modules/mbsncasecmp (Link): Likewise. * modules/mbsnlen (Link): Likewise. * modules/mbspbrk (Link): Likewise. * modules/mbspcasecmp (Link): Likewise. * modules/mbsrchr (Link): Likewise. * modules/mbssep (Link): Likewise. * modules/mbsspn (Link): Likewise. * modules/mbsstr (Link): Likewise. * modules/mbstok_r (Link): Likewise. * modules/mbswidth (Link): Likewise. * modules/exclude (Link): Likewise. * modules/propername (Link): Likewise. * modules/regex-quote (Link): Likewise. * modules/trim (Link): Likewise. * modules/mbmemcasecmp-tests (Makefile.am): Link the test program against libunistring. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/exclude-tests (Makefile.am): Likewise. * modules/regex-quote-tests (Makefile.am): Likewise. 2021-01-03 Bruno Haible c32ispunct tests: Avoid test failures on FreeBSD. * tests/test-c32ispunct.c (main): On FreeBSD, disable tests that fail on FreeBSD 12.1.1. 2021-01-04 Simon Josefsson doc: Repeat warning that --with-tests cannot be used twice. * doc/gnulib-tool.texi (Multiple instances): Remind reader of --with-tests limitation. 2021-01-03 Bruno Haible iconv, iconv_open: Improve documentation. Reported by Noah Misch in . * doc/posix-functions/iconv_open.texi: Add new paragraph "Portability problems handled by Gnulib". * doc/posix-functions/iconv.texi: Likewise. Update info about AIX. * m4/iconv.m4 (AM_ICONV_LINK): Improve comments. 2021-01-03 Bruno Haible iconv-h: Fix module description. * modules/iconv-h (Include): Check HAVE_ICONV_H. 2021-01-03 Noah Misch iconv_open: Fix module description. * modules/iconv_open (Include): Check HAVE_ICONV, like modules/iconv. 2021-01-03 Bruno Haible stddef: Override wrong max_align_t on AIX 7 with xlc in 64-bit mode. * m4/stddef_h.m4 (gl_STDDEF_H): Make check for good max_align_t stricter: Add tests for offsetof-based alignof. * lib/stddef.in.h (max_align_t): Override on AIX in 64-bit mode. * doc/posix-headers/stddef.texi: Document the AIX max_align_t bug. 2021-01-03 Bruno Haible free-posix: Work around GCC mis-optimization bug. Code by Bernhard Voelker . * lib/free.c (rpl_free): Add alternative complicated code for GCC. 2021-01-02 Bruno Haible valgrind-tests: Disable valgrind if it would cause all tests to fail. Suggested by Simon Josefsson in . * m4/valgrind-tests.m4 (gl_VALGRIND_TESTS): Test $VALGRIND on an executable produced by the current compiler. Set VALGRIND to empty if it does not work. Don't set VALGRIND to empty if it merely does not accept the --error-exitcode=1 --leak-check=full options. 2021-01-02 Bruno Haible valgrind-tests: Really enable the valgrind options test. * m4/valgrind-tests.m4 (gl_VALGRIND_TESTS): Don't assume that the valgrind options --error-exitcode=1 --leak-check=full always work. 2021-01-02 Bruno Haible utimensat: Fix test failures on macOS 10.13. * lib/utimensat.c: Include , . (rpl_utimensat): Check against invalid tv_nsec values. Before calling utimensat, recognize a filename ending in a slash that does not point to a directory. 2021-01-02 Bruno Haible utimens: Fix test failure on macOS 10.13. * lib/utimens.c: Include . utimens: Fix test failure on macOS 10.13. * lib/utimens.c (fdutimens): Before calling utimensat, recognize a filename ending in a slash that does not point to a directory. 2021-01-02 Bruno Haible utimens: Avoid test failures on macOS 10.13. Reported by Martin Storsjö in . * tests/test-utimens-common.h (check_ctime): Define to -1 on macOS. * tests/test-utimens.h (test_utimens): Don't expect a ctime change when only the atime is requested to change. * tests/test-futimens.h (test_futimens): Likewise. * tests/test-lutimens.h (test_lutimens): Likewise. 2021-01-02 Bruno Haible renameatu: Fix test failures on macOS. Reported by Martin Storsjö in . * lib/renameatu.c (renameatu): Don't call renameatx_np right away. Instead, treat it as a variant of renameat, with all possible bugs that renameat might have. 2021-01-02 Bruno Haible getgroups test: Avoid warning with glibc >= 2.32 and gcc >= 10. Reported by Bernhard Voelker in . * tests/test-getgroups.c: Silence gcc warnings of type -Wstringop-overflow. 2021-01-02 Bruno Haible timespec_get: Add tests. * tests/test-timespec_get.c: New file. * modules/timespec_get-tests: New file. timespec_get: New module. * lib/time.in.h (timespec_get): New declaration. * lib/timespec_get.c: New file. * m4/timespec_get.m4: New file. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_TIMESPEC_GET, HAVE_TIMESPEC_GET. * modules/time (Makefile.am): Substitute GNULIB_TIMESPEC_GET, HAVE_TIMESPEC_GET. * modules/timespec_get: New file. * tests/test-time-c++.cc (timespec_get): Check signature. * doc/glibc-functions/timespec_get.texi: Mention the new module. 2021-01-01 Bruno Haible time: Define TIME_UTC. * lib/time.in.h (TIME_UTC, GNULIB_defined_TIME_UTC): New macros. * m4/time_h.m4 (gl_HEADER_TIME_H_BODY): Set TIME_H_DEFINES_TIME_UTC. * modules/time (Makefile.am): Substitute TIME_H_DEFINES_TIME_UTC. * tests/test-time.c: Check that TIME_UTC is defined and a positive integer. * doc/posix-headers/time.texi: Mention TIME_UTC. 2021-01-01 Bruno Haible stddef: Try harder to get max_align_t defined on OpenBSD, part 2. * modules/stddef (Depends-on): Add extensions. 2021-01-01 Paul Eggert canonicalize: remove NARROW_ADDRESSES optimization * lib/canonicalize-lgpl.c, lib/canonicalize.c (NARROW_ADDRESSES): Remove, and remove all uses, as the optimization is arguably not worth the extra complexity. Suggested by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-December/121203.html 2021-01-01 Bruno Haible stddef: Try harder to get max_align_t defined on OpenBSD. * m4/stddef_h.m4 (gl_STDDEF_H): Require gl_USE_SYSTEM_EXTENSIONS. 2021-01-01 Bruno Haible aligned_alloc: Fix test failure on OpenBSD 6.8. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): On OpenBSD, define _ISOC11_SOURCE. * m4/aligned_alloc.m4 (gl_FUNC_ALIGNED_ALLOC): Require it. Update comment. 2021-01-01 Bruno Haible posixtm tests: Disable part of the test on plaforms where it fails. * tests/test-posixtm.c (T): Disable two tests on macOS as well. 2021-01-01 Bruno Haible c32isgraph/c32isprint/c32ispunct tests: Avoid test failures on OmniOS. * tests/test-c32isgraph.c (main): On Solaris, disable tests that fail on Solaris 11 OmniOS. * tests/test-c32isprint.c (main): Likewise. * tests/test-c32ispunct.c (main): Likewise. 2021-01-01 Paul Eggert libc-config: port to Sun C 5.9 * lib/libc-config.h (libc_hidden_proto): Omit ", ..." in macro definition. It’s not needed for Gnulib and elicits a diagnostic from Sun C 5.9 Patch 124867-12 2009/11/22. 2021-01-01 Bruno Haible quotearg tests: Avoid test failures on Solaris 11. * modules/quotearg-tests (Makefile.am): Set host_os in TESTS_ENVIRONMENT. * tests/test-quotearg.sh: On Solaris 11 systems, make a copy of the fr/ directory that contains the .mo file. 2021-01-01 Bruno Haible maint: Update copyright notices in --version output. List the most recent year in which changes were made, per . * build-aux/declared.sh (func_version): Say 2019. * build-aux/libtool-next-version (func_version): Likewise. * build-aux/run-test (func_version): Likewise. * check-module (COPYRIGHT_NOTICE): Say 2012. * lib/git-merge-changelog.c (main): Say 2020. 2020-12-31 Paul Eggert filename: change filename.h comment to LGPLv2.1+ * lib/filename.h: Change license notice to match what should be in glibc, and what modules/filename specifies. This is to simplify syncing with glibc. doc: mention year-0 bugs in Solaris etc. * doc/posix-functions/gmtime.texi, doc/posix-functions/gmtime_r.texi: * doc/posix-functions/localtime.texi: * doc/posix-functions/localtime_r.texi: * doc/posix-functions/mktime.texi: Mention year-0 bugs in localtime etc. 2020-12-31 Bruno Haible ptsname_r: Fix test failure on Solaris. * lib/ptsname_r.c (__ptsname_r) [__sun]: Don't test the major number of the device. 2020-12-31 Bruno Haible posixtm tests: Disable part of the test on plaforms where it fails. * tests/test-posixtm.c (T): Disable two tests on Solaris. 2020-12-31 Bruno Haible poll tests: Avoid test failure on AIX. * tests/test-poll.c (test_pipe): Disable the "expecting POLLHUP after shutdown" test on AIX. * doc/posix-functions/poll.texi: Mention the AIX bug. 2020-12-31 Bruno Haible poll tests: Avoid test failure on BSD and Solaris systems. * tests/test-poll.c (test_accept_first, test_socket_pair): Disable the "expecting POLLHUP after shutdown" test on all platforms except Linux. 2020-12-31 Paul Eggert fnmatch: merge from glibc + proposal This merges the change proposed by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-December/121212.html which fixes a Gnulib bug that led to a failed assert. * lib/fnmatch_loop.c (EXT): Use signed level, not unsigned, and check that it stays nonnegative. Use __flexarr instead of FLEXIBLE_ARRAY_MEMBER, to port better to glibc. * tests/test-fnmatch.c (main): New test cases, taken from glibc. glob: merge proposed glibc changes This merges the change proposed by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-December/121211.html * lib/glob.c (__lstat64, __stat64) [_LIBC]: Remove. 2020-12-31 Bruno Haible memalign: Work around Solaris bug. * lib/memalign.c: New file. * m4/memalign.m4: New file. * modules/memalign (Files): Add them. (Depends-on): Add malloc-h. (configure.ac): Invoke gl_FUNC_MEMALIGN. Conditionally compile memalign.c. Set module indicator. (Include): Include unconditionally. * doc/glibc-functions/memalign.texi: Mention the Solaris issues. malloc-h: Add tests. * tests/test-malloc-h.c: New file. * modules/malloc-h-tests: New file. * tests/test-malloc-h-c++.cc: New file. * modules/malloc-h-c++-tests: New file. malloc-h: New module. * lib/malloc.in.h: New file. * m4/malloc_h.m4: New file. * modules/malloc-h: New file. * doc/glibc-headers/malloc.texi: New file. * doc/gnulib.texi (Glibc Header File Substitutes): Include it. 2020-12-31 Bruno Haible unistd: Fix portability warnings. * lib/unistd.in.h (fchownat, unlinkat): Fix module name in warning. 2020-12-31 Bruno Haible utime: Fix compilation error on macOS and Solaris 9 (regr. 2020-12-24). Reported by Tom G. Christensen in . * lib/utime.c: Include . 2020-12-30 Karl Berry config: srclistvars doc. * config/srclistvars.sh: doc a couple of unusual source repo urls. 2020-12-30 Bruno Haible getlogin tests, getlogin_r tests: Avoid failure on Solaris OpenIndiana. * tests/test-getlogin.c (main): Don't fail if getlogin() returns NULL with no errno. * tests/test-getlogin_r.c (main): Don't fail if getlogin_r() returns EINVAL. 2020-12-29 Jim Meyering regex-tests: tweak to avoid a clang-10 warning * tests/test-regex.c: Compare with explicit zero, rather than as boolean to avoid this from clang-10: test-regex.c:315:9: error: converting the result of '<<' to a \ boolean always evaluates to true \ [-Werror,-Wtautological-constant-compare] if (! REG_STARTEND) hash: add casts-to-float to avoid clang-10 warnings * lib/hash.c (compute_bucket_size): Cast SIZE_MAX to float to avoid this warning from clang-10 (for use in grep): hash.c:501:11: error: implicit conversion from 'unsigned long' \ to 'float' changes value from 18446744073709551615 to \ 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion] if (SIZE_MAX <= new_candidate) (hash_insert_if_absent): Likewise. 2020-12-29 Paul Eggert canonicalize: fix size overflow treatment This also has some minor cleanups. * lib/canonicalize-lgpl.c, lib/canonicalize.c: No need to include stddef.h, since the code no longer refers directly to ptrdiff_t. * lib/canonicalize-lgpl.c (realpath_stk): * lib/canonicalize.c (canonicalize_filename_mode_stk): Treat size overflow like other out-of-memory. * lib/canonicalize.c: No need to include stdlib.h, since the code no longer refers to stdlib.h functions (other than those that canonicalize.h must declare). * lib/canonicalize.c (canonicalize_filename_mode_stk): Do not bother terminating the string result on error. 2020-12-29 Bruno Haible list-c++, [o]map-c++, [o]set-c++: Fix conflict with 'free-posix' module. * lib/gl_list.hh: Include . * lib/gl_map.hh: Likewise. * lib/gl_omap.hh: Likewise. * lib/gl_set.hh: Likewise. * lib/gl_oset.hh: Likewise. 2020-12-29 Paul Eggert canonicalize: fix ptrdiff_t overflow bug Problem reported by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-December/121182.html * lib/canonicalize-lgpl.c, lib/canonicalize.c: Include intprops.h. (NARROW_ADDRESSES): New constant. * lib/canonicalize-lgpl.c (realpath_stk):m * lib/canonicalize.c (canonicalize_filename_mode_stk): Work even if strlen (END) does not fit in idx_t, or if adding N to it overflows. * modules/canonicalize, modules/canonicalize-lgpl (Depends-on): Add intprops. 2020-12-28 Bruno Haible havelib: Fix for Solaris 11 OpenIndiana and Solaris 11 OmniOS. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): In acl_is_expected_elfclass, use 'expr', not 'test'. 2020-12-28 Bruno Haible ptsname_r: Fix a compiler warning on Solaris. * lib/ptsname_r.c (__ptsname_r): Reduce the scope of variable 'err'. 2020-12-28 Bruno Haible gnulib-tool: Fix logic whether to add a dummy.c. * gnulib-tool (func_remove_if_blocks): New function. (func_modules_add_dummy): Use it to eliminate all conditional statements from the automake snippet. 2020-12-28 Paul Eggert faccessat: revert recent EOVERFLOW change I misunderstood the glibc source code. Deduced from Adhemerval Zanella’s proposed glibc patch in: https://sourceware.org/pipermail/libc-alpha/2020-December/121131.html * doc/posix-functions/faccessat.texi: It is not a problem. * lib/canonicalize-lgpl.c, lib/canonicalize.c, lib/faccessat.c: (FACCESSAT_NEVER_OVERFLOWS): Remove. All uses removed. * lib/faccessat.c: Revert to simpler version now that LSTAT_FOLLOWS_SLASHED_SYMLINK must be false. * m4/faccessat.m4 (gl_FUNC_FACCESSAT_EOVERFLOW): Remove. All uses removed. * modules/canonicalize, modules/canonicalize-lgpl (Files): Remove m4/faccessat.m4. canonicalize-lgpl: accommodate picky cpp * lib/canonicalize-lgpl.c: Use "defined FUNC_REALPATH_WORKS" in case preprocessor is picky. Reported by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-December/121130.html canonicalize: simplify via scratch_buffer_dupfree * config/srclist.txt: Adjust accordingly. * lib/canonicalize-lgpl.c (realpath_stk): * lib/canonicalize.c (canonicalize_filename_mode_stk): Simplify by using scratch_buffer_dupfree. * lib/malloc/scratch_buffer.h (scratch_buffer_dupfree): New function. * lib/malloc/scratch_buffer_dupfree.c: New file. * modules/scratch_buffer (Files, Depends-on): Add malloc/scratch_buffer_dupfree.c. 2020-12-27 Paul Eggert regex: remove glibc21.m4 It doesn’t seem to be needed any more; at least, I couldn’t reproduce the circa-2013 problem. Perhaps the recent --conditional-dependencies fixes have removed the need for it. * m4/glibc21.m4: Remove. All uses removed. 2020-12-26 Bruno Haible gnulib-tool: Make --conditional-dependencies work with --with-tests. Reported by Paul Eggert in . * gnulib-tool (func_emit_tests_Makefile_am): Handle conditional dependencies like func_emit_lib_Makefile_am. 2020-12-26 Bruno Haible execvpe: Make dependency to stdbool explicit. * lib/execvpe.c: Include . * modules/execvpe (Depends-on): Add stdbool. execlp: Add tests. * tests/test-execlp-main.c: New file. * tests/test-execlp.sh: New file. * modules/execlp-tests: New file. execlp: New module. * lib/execlp.c: New file. * m4/execlp.m4: New file. * modules/execlp: New file. * doc/posix-functions/execlp.texi: Mention more Windows problems and the new module. execle: Add tests. * tests/test-execle-main.c: New file. * tests/test-execle.sh: New file. * modules/execle-tests: New file. execle: New module. * lib/execle.c: New file. * m4/execle.m4: New file. * modules/execle: New file. * doc/posix-functions/execle.texi: Mention more Windows problems and the new module. execl: Add tests. * tests/test-execl-main.c: New file. * tests/test-execl.sh: New file. * modules/execl-tests: New file. execl: New module. * lib/execl.c: New file. * m4/execl.m4: New file. * modules/execl: New file. * doc/posix-functions/execl.texi: Mention more Windows problems and the new module. execv: Add tests. * tests/test-execv-main.c: New file. * tests/test-execv.sh: New file. * modules/execv-tests: New file. execv: New module. * lib/execv.c: New file. * m4/execv.m4: New file. * modules/execv: New file. * doc/posix-functions/execv.texi: Mention more Windows problems and the new module. execvp: Add tests. * tests/test-execvp-main.c: New file. * tests/test-execvp.sh: New file. * modules/execvp-tests: New file. execvp: New module. * lib/execvp.c: New file. * m4/execvp.m4: New file. * modules/execvp: New file. * doc/posix-functions/execvp.texi: Mention more Windows problems and the new module. execvpe: Add tests. * tests/test-execvpe-main.c: New file. * tests/test-execvpe.sh: New file. * modules/execvpe-tests: New file. execvpe: New module. * lib/execvpe.c: New file. * m4/execvpe.m4: New file. * modules/execvpe: New file. * doc/glibc-functions/execvpe.texi: Mention the Windows problems and the new module. execve: Add tests. * tests/test-exec-child.c: New file. * tests/test-execve-main.c: New file. * tests/test-execve.sh: New file. * modules/execve-tests: New file. execve: New module. * lib/execve.c: New file. * m4/execve.m4: New file. * modules/execve: New file. * doc/posix-functions/execve.texi: Mention more Windows problems and the new module. execve, execvpe, execvp, execv, execl, execle, execlp: Prepare modules. * lib/unistd.in.h (execl, execle, execlp, execv, execve, execvp, execvpe): Add declarations for the new modules. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether execl, execle, execlp, execv, execve, execvp, execvpe are declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_EXEC*, HAVE_EXECVPE, REPLACE_EXEC*. * modules/unistd (Makefile.am): Substitute GNULIB_EXEC*, HAVE_EXECVPE, REPLACE_EXEC*. * tests/test-unistd-c++.cc: Check the signature of execl, execle, execlp, execv, execve, execvp, execvpe. 2020-12-26 Bruno Haible stack: Fix typo in comments. * lib/stack.h: Fix typo in comments. 2020-12-26 Bruno Haible bitset: Fix conflict with 'free-posix' module. * lib/bitset/base.h: Include . 2020-12-25 Paul Eggert idx: change idx.h comment to LGPLv2.1+ * lib/idx.h: Change license notice to match what should be in glibc. gnulib-tool will change it as appropriate anyway, so this is just to simplify syncing with glibc. 2020-12-25 Thien-Thi Nguyen MODULES.html.sh: Update after 2020-12-19 change. * MODULES.html.sh (func_all_modules): Do s/free/free-posix/. 2020-12-25 Bruno Haible Make it possible to turn off the mkdir override on Windows. * lib/sys_stat.in.h (mkdir): Conditionalize through GNULIB_MKDIR and GNULIB_MDA_MKDIR. Also support GNULIB_POSIXCHECK. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_MKDIR, GNULIB_MDA_MKDIR. * modules/sys_stat (Makefile.am): Substitute GNULIB_MKDIR, GNULIB_MDA_MKDIR. * modules/mkdir (configure.ac): Invoke gl_SYS_STAT_MODULE_INDICATOR. * doc/posix-functions/mkdir.texi: Mention also the 'sys_stat' module. Make it possible to turn off each of the Windows oldnames workarounds. * lib/fcntl.in.h (creat, open): Conditionalize each of the Windows oldnames workarounds through a GNULIB_MDA_ symbol. * lib/math.in.h (j0, j1, jn, y0, y1, yn): Likewise. * lib/search.in.h (lfind, lsearch): Likewise. * lib/stdio.in.h (fcloseall, fdopen, fileno, getw, putw, tempnam): Likewise. * lib/stdlib.in.h (ecvt, fcvt, gcvt, mktemp, putenv): Likewise. * lib/string.in.h (memccpy, strdup): Likewise. * lib/sys_stat.in.h (chmod, umask): Likewise. * lib/time.in.h (tzset): Likewise. * lib/unistd.in.h (access, chdir, close, dup, dup2, execl, execle, execlp, execv, execve, execvp, execvpe, getcwd, getpid, isatty, lseek, read, rmdir, swab, unlink, write): Likewise. * lib/utime.in.h (utime): Likewise. * lib/wchar.in.h (wcsdup): Likewise. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Initialize these GNULIB_MDA_ symbols. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Likewise. * m4/search_h.m4 (gl_SEARCH_H_DEFAULTS): Likewise. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Likewise. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Likewise. * m4/utime_h.m4 (gl_UTIME_H_DEFAULTS): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H_DEFAULTS): Likewise. * modules/fcntl-h (Makefile.am): Substitute these GNULIB_MDA_ symbols. * modules/math (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/utime-h (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. 2020-12-24 Paul Eggert canonicalize, canonicalize-lgpl: remove lint Pacify GCC. Some of these problems were reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-12/msg00217.html * lib/canonicalize-lgpl.c, lib/canonicalize.c: Sort shared include directives, for consistency. (IF_LINT): New macro. (suffix_requires_dir_check): Mark with _GL_ATTRIBUTE_PURE. * lib/canonicalize-lgpl.c (GCC_LINT, _GL_ATTRIBUTE_PURE) [_LIBC]: New macros. (realpath_stk): Suppress bogus -Wmaybe-uninitialized warning. * lib/canonicalize.c (canonicalize_filename_mode_stk): Omit unused local. Suppress bogus -Wmaybe-uninitialized warning. 2020-12-24 Bruno Haible spawn-pipe: Use posix_spawn by default on native Windows. * lib/spawn-pipe.c (SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN): New macro. (create_pipe): Use it to decide among the two possible implementations. * modules/spawn-pipe (Depends-on): Add posix_spawnattr_setpgroup. 2020-12-24 Bruno Haible unistd-safer: Implement pipe_safer on native Windows. * lib/pipe-safer.c (pipe_safer): Don't test HAVE_PIPE. * modules/unistd-safer (Depends-on): Add pipe-posix. 2020-12-24 Bruno Haible execute: Use posix_spawn by default on native Windows. * lib/execute.c (EXECUTE_IMPL_AVOID_POSIX_SPAWN): New macro. (execute): Use it to decide among the two possible implementations. 2020-12-24 Paul Eggert canonicalize-lgpl: merge proposed libc changes This merges the changes proposed for glibc in: https://sourceware.org/pipermail/libc-alpha/2020-December/121085.html https://sourceware.org/pipermail/libc-alpha/2020-December/121086.html * lib/canonicalize-lgpl.c: Include idx.h and filename.h unconditionally. (idx_t, IDX_MAX, FILE_SYSTEM_PREFIX_LEN, IS_ABSOLUTE_FILE_NAME) (ISSLASH) [_LIBC]: Remove. 2020-12-24 Bruno Haible posix_spawn-internal: Implement for native Windows. * lib/spawni.c (grow_inheritable_handles, shrink_inheritable_handles, close_inheritable_handles, memiszero, sigisempty, open_handle, do_open, do_dup2, do_close): New functions. (__spawni): Implement on native Windows. * modules/posix_spawn-internal (Depends-on): Add filename, concat-filename, findprog-in, malloca, windows-spawn. * doc/posix-functions/posix_spawn.texi: Update. * doc/posix-functions/posix_spawnp.texi: Likewise. 2020-12-24 Bruno Haible windows-spawn: Export another auxiliary function. * lib/windows-spawn.h (convert_CreateProcess_error): New declaration. * lib/windows-spawn.c (convert_CreateProcess_error): New function, extracted from spawnpvech. (spawnpvech): Use it. 2020-12-24 Bruno Haible windows-spawn: Export some more auxiliary functions. * lib/windows-spawn.h: Include . (struct inheritable_handles): New type. (init_inheritable_handles, compose_handles_block, free_inheritable_handles): New declarations. * lib/windows-spawn.c (init_inheritable_handles, compose_handles_block): New functions, based on spawnvech. (free_inheritable_handles): New function. (spawnpvech): Use them. 2020-12-24 Bruno Haible windows-spawn: Export another auxiliary function. * lib/windows-spawn.h (compose_envblock): New declaration. * lib/windows-spawn.c (compose_envblock): New function, extracted from spawnpvech. (spawnpvech): Use it. 2020-12-24 Bruno Haible windows-spawn: Export an auxiliary function. * lib/windows-spawn.h (compose_command): New declaration. * lib/windows-spawn.c (compose_command): New function, extracted from spawnpvech. (spawnpvech): Use it. 2020-12-24 Bruno Haible posix_spawn* tests: Add support for native Windows. * tests/test-posix_spawn-open1.c (DATA_FILENAME): Treat native Windows like Cygwin. * tests/test-posix_spawn-dup2-stdin.c (main): Don't assume the signals SIGHUP and SIGPIPE. On native Windows, don't call posix_spawnattr_setsigmask. * tests/test-posix_spawn-dup2-stdout.c (main): Likewise. * tests/test-posix_spawn-fchdir.c (main): Likewise. * tests/test-posix_spawn-chdir.c (test): Likewise. Accept the child output from Cygwin's 'pwd' program. * tests/test-posix_spawn-script.c (main): On native Windows, skip the executable-shell-script part of the test. * tests/test-posix_spawnp-script.c (main): Likewise. * modules/posix_spawn-tests (Depends-on): Add freopen, waitpid. (configure.ac): Don't define the POSIX_SPAWN_PORTED conditional. (Makefile.am): Don't test the POSIX_SPAWN_PORTED conditional. * modules/posix_spawnp-tests (Depends-on): Add waitpid. (configure.ac): Don't define the POSIX_SPAWN_PORTED conditional. (Makefile.am): Don't test the POSIX_SPAWN_PORTED conditional. * modules/posix_spawn_file_actions_addchdir-tests (Makefile.am): Don't test the POSIX_SPAWN_PORTED conditional. * modules/posix_spawn_file_actions_addfchdir-tests (configure.ac): Define the POSIX_SPAWN_PORTED conditional here. 2020-12-24 Bruno Haible sh-filename: Add support for native Windows. * m4/sh-filename.m4 (gl_SH_FILENAME): Treat native Windows like Cygwin. 2020-12-24 Paul Eggert careadlinkat: improve warning line number This propagates an idea first used in canonicalize-lgpl. * lib/careadlinkat.c (GCC_BOGUS_WRETURN_LOCAL_ADDR): New macro. (careadlinkat): Use it. linkat: use eloop-threshold * lib/linkat.c: Include eloop-threshold.h. Do not include sys/param.h. (MAXSYMLINKS): Remove. (link_follow, linkat_follow): Use __eloop_threshold instead of MAXSYMLINKS. * m4/linkat.m4 (gl_FUNC_LINKAT): Omit sys/param.h check. * modules/linkat (Depends-on): Add eloop-threshold. Sort. canonicalize-lgpl: use eloop-threshold * lib/canonicalize-lgpl.c [!_LIBC]: Include eloop-threshold.h. (MAXSYMLINKS, __eloop_threshold): Remove. * modules/canonicalize-lgpl (Depends-on): Add eloop-threshold. eloop-threshold: new module * config/srclist.txt: Add a comment about it. * lib/eloop-threshold.h, modules/eloop-threshold: New files. canonicalize: prefer faccessat to stat A proper faccessat doesn't have the EOVERFLOW problem, and can be more efficient as it needn't gather data from the filesystem to fill in struct stat. So use stat only if faccessat is absent, or when checking for symlink loops in canonicalize.c. * lib/canonicalize-lgpl.c, lib/canonicalize.c: Include fcntl.h, for AT_EACCESS. (FACCESSAT_NEVER_EOVERFLOWS): Default to false. (file_accessible): New function, based on faccessat but with a fallback to stat and with an EOVERFLOW workaround. (dir_check): Use it. (dir_suffix): New static constant. * lib/canonicalize-lgpl.c (FACCESSAT_NEVER_EOVERFLOWS) [_LIBC]: Use __ASSUME_FACCESSAT2 to set FACCESSAT_NEVER_EOVERFLOWS (__faccessat) [!_LIBC]: Define. (realpath_stk): Use dir_suffix now. * lib/canonicalize.c (canonicalize_filename_mode_stk): If logical, don't check each component's existence; just check at the end, as that's enough. * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE) (gl_CANONICALIZE_LGPL_SEPARATE): Require gl_FUNC_FACCESSAT_EOVERFLOW, gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, and check for faccessat. (gl_CANONICALIZE_LGPL_SEPARATE): Do not check for readlink, as the code does not use HAVE_READLINK. * modules/canonicalize, modules/canonicalize-lgpl (Files): Add m4/faccessat.m4, m4/lstat.m4. (Depends-on): Add fcntl-lh. faccessat: work around F_OK EOVERFLOW bug * doc/posix-functions/faccessat.texi: Mention the problem. * lib/faccessat.c (FACCESSAT_NEVER_EOVERFLOWS): Default to 0. (rpl_faccessat): If !FACCESSAT_NEVER_EOVERFLOWS, check for F_OK and EOVERFLOW, which means we can return 0. * m4/faccessat.m4 (gl_FUNC_FACCESSAT_EOVERFLOW): New macro. (gl_FUNC_FACCESSAT): Use it. stat failing with EOVERFLOW implies existence * lib/euidaccess.c (euidaccess): * lib/file-has-acl.c (file_has_acl): * lib/link.c (link, rpl_link): * lib/mkdir.c (rpl_mkdir): * lib/mkfifo.c (rpl_mkfifo): * lib/mknod.c (rpl_mknod): * lib/ptsname_r.c (__ptsname_r): * lib/symlink.c (rpl_symlink): * lib/symlinkat.c (rpl_symlinkat): * lib/unlink.c (rpl_unlink): * lib/unlinkat.c (rpl_unlinkat): * lib/utime.c (utime): If stat fails with EOVERFLOW the file exists, so treat it that way in file-existence tests that do not need struct stat values. canonicalize-lgpl: remove freea macro * lib/canonicalize-lgpl.c (freea) [_LIBC]: Remove; not needed. canonicalize, canonicalize-lgpl: fix symlink bug Problem reported by Adhemerval Zanella in: https://lists.gnu.org/r/bug-gnulib/2020-12/msg00155.html * lib/canonicalize-lgpl.c, lib/canonicalize.c: (suffix_requires_dir_check, dir_check): New functions. (GCC_BOGUS_WRETURN_LOCAL_ADDR): New macro, to put the diagnostic closer to the related GCC diagnostics. * lib/canonicalize-lgpl.c (realpath_stk): * lib/canonicalize.c (canonicalize_file_mode_stk): Use them to fix a bug with .../symlink-to-regular-file/ etc. * lib/canonicalize-lgpl.c (__stat) [!_LIBC]: New macro. (realpath_stk): New function, with the contents of the old __realpath and a new scratch buffer arg. This is needed to pacify GCC 10.1, as canonicalize.c is already doing. (__realpath): Use it. * tests/test-canonicalize-lgpl.c, tests/test-canonicalize.c: Add test cases for the bugs. 2020-12-24 Bruno Haible execute: Treat signalled processes like wait-process does. * lib/execute.c: Include , . (execute): Recognize the case where the exit code indicates a signalled child process. * tests/test-execute-main.c (main): Update expected test result. * modules/execute (Depends-on): Add sys_wait. 2020-12-24 Bruno Haible windows-spawn: Improve errno upon failure on native Windows. * lib/windows-spawn.c (spawnpvech): Map the CreateProcess errors ERROR_BAD_FORMAT and ERROR_BAD_EXE_FORMAT to ENOEXEC. * tests/executable-script.sh: New file. * tests/test-posix_spawn-script.c (main): Also try executing executable-script.sh. * tests/test-posix_spawnp-script.c (main): Likewise. * tests/test-execute-script.c (main): Likewise. * tests/test-spawn-pipe-script.c (main): Likewise. * modules/posix_spawn-tests (Files): Add tests/executable-script.sh. * modules/posix_spawnp-tests (Files): Likewise. * modules/execute-tests (Files): Likewise. * modules/spawn-pipe-tests (Files): Likewise. 2020-12-24 Bruno Haible findprog-in: Improve errno upon failure on native Windows. * lib/findprog-in.c (find_in_given_path): If the file basename has no dot and the search with a suffix returned no result, do also a search without a suffix, and set errno = ENOEXEC if we find a file in this way. * tests/test-spawn-pipe-script.c (main): Update expected errno. 2020-12-23 Bruno Haible posix_spawn, posix_spawnp: Fix execution of scripts. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_SECURE): New macro. (gl_POSIX_SPAWN_BODY): Invoke it. Set REPLACE_POSIX_SPAWN if posix_spawn or posix_spawnp allows unsecure execution of scripts. * doc/posix-functions/posix_spawn.texi: Document the script execution problem. * doc/posix-functions/posix_spawnp.texi: Likewise. 2020-12-23 Bruno Haible Add unit tests regarding execution of scripts. * tests/executable-script: New file. * tests/executable-shell-script: New file. * tests/test-posix_spawn-script.c: New file. * tests/test-posix_spawnp-script.c: New file. * tests/test-execute-script.c: New file. * tests/test-spawn-pipe-script.c: New file. * modules/posix_spawn-tests (Files): Add tests/test-posix_spawn-script.c, tests/executable-script, tests/executable-shell-script. (Makefile.am): Compile and run test-posix_spawn-script. * modules/posix_spawnp-tests (Files): Add tests/test-posix_spawnp-script.c, tests/executable-script, tests/executable-shell-script. (Makefile.am): Compile and run test-posix_spawnp-script. * modules/execute-tests (Files): Add tests/test-execute-script.c, tests/executable-script, tests/executable-shell-script. (Makefile.am): Compile and run test-execute-script. * modules/spawn-pipe-tests (Files): Add tests/test-spawn-pipe-script.c, tests/executable-script, tests/executable-shell-script. (Makefile.am): Compile and run test-spawn-pipe-script. 2020-12-23 Bruno Haible Don't execute scripts without '#!' marker through /bin/sh. This reflects the change done in glibc through and . * lib/spawni.c (internal_function): Remove macro. (script_execute): Remove function. (__spawni): Don't invoke script_execute. * lib/execute.c (execute): Disable the ENOEXEC handling. * lib/spawn-pipe.c (create_pipe): Likewise. * NEWS: Mention the change. 2020-12-23 Bruno Haible posix_spawn[p]: Fix compilation error on Windows (regr. 2020-12-14). Reported by Adrian Ebeling in . * lib/spawni.c (__spawni): Update function parameters. 2020-12-23 Bruno Haible posix_spawn tests: Add two more tests. * tests/test-posix_spawn-inherit0.c: New file, based on tests/test-posix_spawn-open2.c. * tests/test-posix_spawn-inherit1.c: New file, based on tests/test-posix_spawn-open2.c. * modules/posix_spawn-tests (Files): Add them. (Depends-on): Add fflush. (Makefile.am): Compile and run test-posix_spawn-inherit0 and test-posix_spawn-inherit1. 2020-12-23 Bruno Haible posix_spawn tests: Add another test. * tests/test-posix_spawn-open2.c: New file, based on tests/test-posix_spawn-open1.c. * modules/posix_spawn-tests (Files): Add it. (Makefile.am): Compile and run test-posix_spawn-open1. 2020-12-20 Bruno Haible Remove support for broken in AIX 3. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Simplify test programs. 2020-12-20 Bruno Haible Remove support for broken in BSD/OS and OSF/1. * lib/wchar.in.h: Don't include , . * lib/mbchar.h: Likewise. * lib/mbiter.h: Likewise. * lib/mbuiter.h: Likewise. * m4/stdint.m4 (gl_STDINT_INCLUDES): Likewise. * lib/mbfile.h: Don't include . * lib/mbswidth.h: Update comment. * lib/stdint.in.h: Don't include , , before . * lib/wctype.in.h: Likewise. * m4/btowc.m4 (gl_FUNC_BTOWC): Simplify test programs. * m4/iswblank.m4 (gl_FUNC_ISWBLANK): Likewise. * m4/iswdigit.m4 (gl_FUNC_ISWDIGIT): Likewise. * m4/iswxdigit.m4 (gl_FUNC_ISWXDIGIT): Likewise. * m4/mbrlen.m4 (gl_FUNC_MBRLEN, gl_MBRLEN_INCOMPLETE_STATE, gl_MBRLEN_RETVAL, gl_MBRLEN_NUL_RETVAL): Likewise. * m4/mbrtoc32.m4 (gl_MBRTOC32_SANITYCHECK): Likewise. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC, gl_MBRTOWC_INCOMPLETE_STATE, gl_MBRTOWC_SANITYCHECK, gl_MBRTOWC_NULL_ARG1, gl_MBRTOWC_NULL_ARG2, gl_MBRTOWC_RETVAL, gl_MBRTOWC_NUL_RETVAL, gl_MBRTOWC_STORES_INCOMPLETE, AC_FUNC_MBRTOWC): Likewise. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): Likewise. * m4/mbsnrtowcs.m4 (gl_MBSNRTOWCS_WORKS_IN_TRADITIONAL_LOCALE): Likewise. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS, gl_MBSRTOWCS_WORKS): Likewise. * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Likewise. * m4/mbswidth.m4 (gl_MBSWIDTH): Likewise. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H, gl_WCHAR_H_INLINE_OK): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcsdup.m4 (gl_FUNC_WCSDUP): Likewise. * m4/wcsnrtombs.m4 (gl_WCSNRTOMBS_WORKS_IN_TRADITIONAL_LOCALE): Likewise. * m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS, gl_WCSRTOMBS_TERMINATION, gl_WCSRTOMBS_NULL): Likewise. * m4/wcstok.m4 (gl_FUNC_WCSTOK): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/wctype_h.m4 (gl_WCTYPE_H): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * m4/wint_t.m4 (gt_TYPE_WINT_T): Likewise. * m4/wmemchr.m4 (gl_FUNC_WMEMCHR): Likewise. * m4/wmemcmp.m4 (gl_FUNC_WMEMCMP): Likewise. * m4/wmemcpy.m4 (gl_FUNC_WMEMCPY): Likewise. * m4/wmemmove.m4 (gl_FUNC_WMEMMOVE): Likewise. * m4/wmemset.m4 (gl_FUNC_WMEMSET): Likewise. 2020-12-20 Bruno Haible isnanf: Fix autoconf test. * m4/isnanf.m4 (gl_ISNANF_WORKS): Fix one of the NaN tests. 2020-12-20 Bruno Haible Remove some of the support for obsolete IRIX 4 and 5. * m4/mountlist.m4 (AC_FUNC_GETMNTENT): Don't test for getmntent in libsun. * tests/init.sh (setup_): Don't talk about IRIX 5. 2020-12-20 Bruno Haible filemode: Remove Cray support. * lib/filemode.c (IS_MIGRATED_FILE): Remove macro. (filemodestring): Don't produce an 'M' type. * m4/filemode.m4 (gl_FILEMODE): Don't invoke AC_STRUCT_ST_DM_MODE. * m4/st_dm_mode.m4: Remove file. * modules/filemode (Files): Remove it. 2020-12-20 Paul Eggert free-posix: assume glibc 2.33 fixes this. * m4/free.m4 (gl_FUNC_FREE): Assume glibc 2.33+ is fixed. Use compile-time test rather than guessing for cross-builds. 2020-12-20 Bruno Haible backupfile: Fix compilation error on native Windows (regr. 2018-10-23). Reported by Adrian Ebeling in . * lib/backupfile.c (fpathconf): Define fallback, like for pathconf. 2020-12-20 Bruno Haible float: Fix compilation error when gnulib's float.h exists twice. Reported by Santiago Vila . * lib/float.in.h (GNULIB_defined_long_double_union): New macro. 2020-12-19 Bruno Haible free-posix: Assume future POSIX compliance only on OpenBSD and Solaris. * m4/free.m4 (gl_FUNC_FREE): Guess yes only on OpenBSD and Solaris. Don't trust _POSIX_VERSION for this test. 2020-12-19 Paul Eggert free-posix: port to GNU/Linux * m4/free.m4 (gl_FUNC_FREE): Don’t assume GNU hosts are free of the bug, as it occurs on Ubuntu 20.10 x86-64 and, I assume, on other GNU/Linux hosts. 2020-12-19 Bruno Haible free-posix: Add tests. * tests/test-free.c: New file. * tests/macros.h (ASSERT_NO_STDIO, WRITE_MACROEXPANDED_INTEGER_TO_STDERR, WRITE_INTEGER_TO_STDERR, WRITE_TO_STDERR): New macros. * modules/free-posix-tests: New file. 2020-12-18 Bruno Haible free-posix: Add C++ declaration test. * tests/test-stdlib-c++.cc (free): New declaration. 2020-12-18 Bruno Haible free-posix: New module, renamed from 'free'. * modules/free-posix: Renamed from modules/free. (configure.ac): Update gl_STDLIB_MODULE_INDICATOR invocation. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_FREE_POSIX, not GNULIB_FREE. * modules/stdlib (Makefile.am): Substitute GNULIB_FREE_POSIX, not GNULIB_FREE. * lib/stdlib.in.h (free): Test GNULIB_FREE_POSIX, not GNULIB_FREE. * doc/posix-functions/free.texi: Mention the module 'free-posix' and what it does. * NEWS: Mention that module 'free' no longer exists. * modules/canonicalize (Depends-on): Add free-posix. Remove free. * modules/canonicalize-lgpl (Depends-on): Likewise. 2020-12-18 Bruno Haible free: Remove support for obsolete platforms. * m4/free.m4 (gl_FUNC_FREE): Assume free(NULL) works. Don't define CANNOT_FREE_NULL. * lib/free.c (rpl_free): Don't test CANNOT_FREE_NULL. * modules/free (Description): Update. * doc/posix-functions/free.texi: Don't mention SunOS 4 any more. 2020-12-18 Paul Eggert intprops: port to ICC 2021.1 Beta 20201112 * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW_P): Port to ICC 2021.1, which has a non-working __builtin_mul_overflow_p. Add a clause for other compilers that claim to support __builtin_mul_overflow_p, since we might as well find out about slackers other than Clang and ICC. (INT_MULTIPLY_WRAPV): ICC 2021 has GCC bug 91450, so treat it like older GCCs even when it claims to be a newer one. 2020-12-18 Bruno Haible intprops: Avoid potentially buggy __builtin_add_overflow in GCC 5, 6. Reported by Stefan Liebler in . * lib/intprops.h (_GL_HAS_BUILTIN_ADD_OVERFLOW): Don't define for GCC 5.x and 6.x. * lib/glob.c (size_add_wrapv): Don't use __builtin_add_overflow for GCC 5.x and 6.x. 2020-12-17 Bruno Haible free: Fix warning. Reported by Pádraig Brady in . * lib/stdlib.in.h (free): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether 'free' is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_FREE, REPLACE_FREE. * modules/stdlib (Makefile.am): Substitute GNULIB_FREE, REPLACE_FREE. * m4/free.m4 (gl_FUNC_FREE): Set REPLACE_FREE, instead of defining 'free' as a macro here. * modules/free (Depends-on): Add stdlib. (configure.ac): Test REPLACE_FREE. Invoke gl_STDLIB_MODULE_INDICATOR. 2020-12-17 Paul Eggert canonicalize-lgpl: fix AIX test failures This merges the recent canonicalize.c fix into canonicalize-lgpl.c. Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-12/msg00138.html * lib/canonicalize-lgpl.c: Include sys/stat.h. (__realpath): When testing a file name ending in '/', use stat rather than readlink, so that it does the right thing on AIX. * modules/canonicalize-lgpl (Depends-on): Add stat, sys_stat. canonicalize: omit second readlink when not needed * lib/canonicalize.c (canonicalize_filename_mode_stk): Omit second readlink when (can_exist != CAN_MISSING && startlen != 0 && !logical). Simplify. canonicalize: remove arbitrary 8192-byte limit Remove canonicalize.c’s arbitrary 8192-byte limit on platforms like GNU Hurd that do not define the PATH_MAX macro, and similarly for canonicalize-lgpl.c’s arbitrary 1024-byte limit. Do this by using scratch buffers. Lessen the number of differences between the two source files, to simplify this and future maintenance. * lib/canonicalize-lgpl.c (__realpath): * lib/canonicalize.c (canonicalize_filename_mode_stk): Use scratch buffers instead of malloc and malloca. This avoids the need for alloca, and avoids the need for malloc in most cases. * lib/canonicalize-lgpl.c, lib/canonicalize.c: Make these files easier to compare, e.g., by sorting include files and by switching to the GNU convention of calling file names "file names", not "path names". Include stdbool.h, scratch_buffer.h. * lib/canonicalize-lgpl.c (IDX_MAX) [_LIBC]: New macro. (malloca) [_LIBC]: Remove. [!_LIBC]: Do not include malloca.h. (get_path_max): New function, so that pathconf is called only in the rare and dubious case when when RESOLVED is not null and PATH_MAX is not defined. Invoke pathconf on "/" not the input file name, as we care about the longest file name starting from "/" (not from the input file name), and POSIX does not specify what pathconf does on a non-directory file anyway. If PATH_MAX is not defined, do not worry about overriding a path_max of 0, and do not let path_max exceed IDX_MAX. (__realpath): Remove an assumption that file name components cannot exceed 1024 bytes when PATH_MAX is not defined (wrong for the Hurd, presumably). When allocating the result, allocate it to just the right size; this costs nothing when the result is smaller than 1023 bytes, and for larger results it's probably worth the CPU to call realloc, as canonicalize.c already does. * lib/canonicalize.c: Include attribute.h. Do not include pathmax.h or xgetcwd.h. (PATH_MAX): Do not define, so file names longer than 8192 bytes work on platforms with no fixed limit. (canonicalize_filename_mode_stk): New function, with the content of the old canonicalize_filename_mode. Use getcwd instead of xgetcwd, and readlink instead of areadlink, since the scratch buffers now do memory management for us. Use rawmemchr instead of adding strlen. Use mempcpy instead of mempcpy + size. Assume free preserves errno. (canonicalize_filename_mode): Use it. * modules/canonicalize (Depends-on): Remove areadlink, pathmax, xgetcwd. Add attribute, free, getcwd, mempcpy, rawmemchr, scratch_buffer, stdbool, xalloc-die. * modules/canonicalize-lgpl (Depends-on): Remove alloca-opt, malloca, realloc-posix. Add scratch_buffer, stdbool. canonicalize-lgpl: simplify merge to glibc This patch lessens the differences between git glibc stdlib/canonicalize.c and lib/canonicalize-lgpl.c. The (perhaps wishful) goal is to make them identical. * lib/canonicalize-lgpl.c [!_LIBC]: Include , not config.h. Omit an unnecessary (!HAVE_CANONICALIZE_FILE_NAME || !FUNC_REALPATH_WORKS || defined _LIBC) #if. Do not include alloca.h, since we use malloca now. [_LIBC]: Include , and define dummy macros FILE_SYSTEM_PREFIX_LEN, IS_ABSOLUTE_FILE_NAME, ISSLASH, malloca, freea so that the mainline code can be kept #ifdef free. [!_LIBC]: Remove dummy macros for SHLIB_COMPAT, versioned_symbol, compat_symbol, weak_alias, __set_errno since libc-config.h does that. Add redirecting macros __mempcpy, __pathconf, __rawmemchr, __eloop_threshold. All uses of their definiens changed. (SIZE_MAX): Remove; no longer needed. (alloc_failed): Remove, and remove all instances. No need for alloc_failed now that free preserves errno. (__realpath): Default path_max to 1024 instead of 8192, as that’s the glibc tradition and is safer when the 2nd argument is null. Use __rawmemchr instead of strchr. Use __mempcpy where appropriate. Simplify test for overflow so that it does not need SIZE_MAX. Do not preserve errno around free or freea calls; no longer needed. Mark __realpath with libc_hidden_def. * modules/canonicalize-lgpl (Depends-on): Add free, libc-config, malloc-posix, mempcpy, realloc-posix, rawmemchr. * modules/free: Now LGPLv2+, for canonicalize-lgpl. free: preserve errno * lib/free.c (rpl_free): Preserve errno. Check for null only if CANNOT_FREE_NULL is defined, as an optimization for POSIX 2008 platforms that do not preserve errno. * m4/free.m4 (gl_FUNC_FREE): Check whether free preserves errno. Also, define CANNOT_FREE_NULL if free cannot free NULL. * modules/free (configure.ac): Also replace 'free' if it does not preserve errno. idx: simplify IDX_MAX, remove IDX_WIDTH * lib/idx.h (IDX_MAX): Simplify by removing obsolete reference to UNSIGNED_IDX_T. (IDX_WIDTH): Remove, since it’s not used and its value arguably should be PTRDIFF_WIDTH anyway. 2020-12-16 Bruno Haible posix_spawn_file_actions_addfchdir-tests: Rename test. * tests/test-posix_spawn-fchdir.c: Renamed from tests/test-posix_spawn5.c. * modules/posix_spawn_file_actions_addfchdir-tests (Files, Makefile.am): Update. posix_spawn_file_actions_addchdir-tests: Rename test. * tests/test-posix_spawn-chdir.c: Renamed from tests/test-posix_spawn4.c. * modules/posix_spawn_file_actions_addchdir-tests (Files, Makefile.am): Update. posix_spawn-tests: Rename test. * tests/test-posix_spawn-open1.c: Renamed from tests/test-posix_spawn3.c. * modules/posix_spawn-tests (Files, Makefile.am): Update. posix_spawnp-tests: Rename test. * tests/test-posix_spawn-dup2-stdin.c: Renamed from tests/test-posix_spawn2.c. * tests/test-posix_spawn-dup2-stdin.in.sh: Renamed from tests/test-posix_spawn2.in.sh. * modules/posix_spawnp-tests (Files, Makefile.am): Update. posix_spawnp-tests: Rename test. * tests/test-posix_spawn-dup2-stdout.c: Renamed from tests/test-posix_spawn1.c. * tests/test-posix_spawn-dup2-stdout.in.sh: Renamed from tests/test-posix_spawn1.in.sh. * modules/posix_spawnp-tests (Files, Makefile.am): Update. 2020-12-14 Bruno Haible findprog-in: Allow overriding the current directory. * lib/findprog.h (find_in_given_path): Add directory argument. * lib/findprog-in.c (find_in_given_path): Likewise. * lib/execute.c (execute): Update caller. * lib/spawn-pipe.c (create_pipe): Likewise. * lib/windows-spawn.c (spawnpvech): Likewise. * NEWS: Mention the change. 2020-12-14 Bruno Haible posix_spawn-internal: Make better use of 'const'. * lib/spawn_int.h (__spawni): Does not need write access to the elements of argv and envp. * lib/spawni.c (__spawni, script_execute): Likewise. * lib/spawn.c (posix_spawn): Update caller. * lib/spawnp.c (posix_spawnp): Likewise. 2020-12-14 Bruno Haible spawn: Make it compile on native Windows. * modules/spawn (Depends-on): Add signal-h. 2020-12-14 Bruno Haible windows-spawn: Avoid shadowing a variable. * lib/windows-spawn.c (spawnpvech): Rename local variable 'flags'. 2020-12-13 Paul Eggert string: port memchr macro to AIX 7.2 XLC Its defines a memchr macro to help inlining. * lib/string.in.h (memchr): #undef before #defining. canonicalize: fix AIX test failures Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-12/msg00109.html * lib/canonicalize.c (canonicalize_filename_mode): When testing a file name ending in '/', use stat rather than readlink, so that it does the right thing on AIX. * modules/canonicalize (Depends-on): Add readlink, to pull in the recent changes in the Gnulib readlink module. Assume readlink/readlinkat ERANGE fix * lib/areadlink-with-size.c (areadlink_with_size): * lib/areadlinkat-with-size.c (areadlinkat_with_size): * lib/careadlinkat.c (readlink_stk): Do not worry about readlink or readlinkat failing with errno == ERANGE, since the Gnulib readlink and readlinkat modules now fix that. getcwd: port to AIX * lib/getcwd.c [!_LIBC]: Undef stat64 before #defining it, in case our sys/stat.h #defined a function macro with the same name. readlink, readlinkat: add ERANGE portability Fix some portability issues with Gnulib's readlink and readlinkat, notably mostly working around the ERANGE problem in AIX and HP-UX. * doc/posix-functions/readlink.texi: * doc/posix-functions/readlinkat.texi: ERANGE problem is mostly fixed now. Mention AIX problem with trailing / and EINVAL. Lessen differences between these two files. * lib/readlink.c (rpl_readlink): * lib/readlinkat.c (rpl_readlinkat): If stat ("FILE/", ...) reports EOVERFLOW, treat FILE/ as an existing directory. Mostly work around READLINK_TRUNCATE BUG. Lessen spurious differences between the readlink and readlinkat code. * lib/readlinkat.c (rpl_readlinkat): Fix bug where stat was used where fstatat was intended. * m4/readlink.m4 (gl_FUNC_READLINK): Rename gl_cv_func_readlink_works to gl_cv_func_readlink_trailing_slash to identify readlink problems more precisely. All uses changed. Guess no on AIX or HP-UX for this variable. Add check for whether readlink truncates results, and define new macro READLINK_TRUCATE_BUG accordingly. * m4/readlinkat.m4 (gl_FUNC_READLINKAT): Also check gl_cv_func_readlink_trailing_slash when deciding whether to replace readlinkat. * modules/readlinkat (Depends-on): Most dependencies are also needed if replacing readlinkat. fstatat is different, as it is needed only if replacing an existing readlinkat. 2020-12-13 Bruno Haible spawn-pipe: Fix hanging processes on Windows (regression 2020-11-30). * lib/spawn-pipe.c (create_pipe): After spawning the subprocess, close the stdin_handle and/or stdout_handle. 2020-12-12 Bruno Haible Fix gnulib-tool error when some modules occur in tests/. * doc/gnulib.texi (Specification): Update statistics. (Autoconf macros): Don't suggest to use AC_LIBOBJ in a .m4 file. (Using AC_LIBOBJ): New section. * check-AC_LIBOBJ: New file. * modules/fnmatch-gnu (Files): Add lib/fnmatch.c. * modules/fopen-gnu (Files): Add lib/fopen.c. * modules/memmem (Files): Add lib/memmem.c. * modules/renameat (Files): Add lib/at-func2.c. * modules/strcasestr (Files): Add lib/strcasestr.c. * modules/strstr (Files): Add lib/strstr.c. 2020-12-11 Bruno Haible sh-quote, execute, spawn-pipe, etc.: Make better use of 'const'. * lib/sh-quote.h (shell_quote_argv): Does not need write access to the elements of argv. * lib/sh-quote.c (shell_quote_argv): Likewise. * lib/windows-spawn.h (prepare_spawn): Add 'const' the argument type and the return type. * lib/windows-spawn.c (prepare_spawn): Likewise. * lib/os2-spawn.h (prepare_spawn): Likewise. * lib/os2-spawn.c (prepare_spawn): Likewise. * lib/execute.h (execute): Does not need write access to the elements of prog_argv. * lib/execute.c (execute): Likewise. * lib/spawn-pipe.h (create_pipe_out, create_pipe_in, create_pipe_bidi): Likewise. * lib/spawn-pipe.c (create_pipe, create_pipe_bidi, create_pipe_in, create_pipe_out): Likewise. * lib/pipe-filter.h (pipe_filter_ii_execute, pipe_filter_gi_create): Likewise. * lib/pipe-filter-ii.c (pipe_filter_ii_execute): Likewise. * lib/pipe-filter-gi.c (pipe_filter_gi_create): Likewise. * lib/javaexec.h (execute_fn): Does not need write access to the elements of prog_argv. * lib/javaexec.c (execute_java_class): Update variable types and remove casts to 'char *'. * lib/csharpexec.h (execute_fn): Does not need write access to the elements of prog_argv. * lib/csharpexec.c (execute_csharp_using_mono, execute_csharp_using_sscli): Update variable types and remove casts to 'char *'. * lib/javacomp.c (compile_using_envjavac, compile_using_gcj, compile_using_javac, compile_using_jikes, is_envjavac_gcj, is_envjavac_gcj43, is_gcj_present, is_gcj_43, is_javac_present, is_jikes_present): Update variable types and remove casts to 'char *'. * lib/javaversion.c (execute_and_read_line): Does not need write access to the elements of prog_argv. * lib/csharpcomp.c (compile_csharp_using_mono, compile_csharp_using_sscli): Update variable types and remove casts to 'char *'. * tests/test-sh-quote.c (main): Update variable types and remove casts to 'char *'. * tests/test-execute-main.c (main): Update variable types and remove casts to 'char *'. * tests/test-spawn-pipe-main.c (test_pipe): Update variable types and remove casts to 'char *'. * NEWS: Mention the changes. 2020-12-11 Bruno Haible execute-tests: Fix compilation error with MSVC. * tests/test-execute-child.c (is_device): With _fstat, use 'struct _stat', not 'struct stat'. 2020-12-11 Paul Eggert vararrays: just use 2.70 * m4/vararrays.m4 (AC_C_VARARRAYS): Do not override Autoconf 2.70 and later, since Autoconf 2.70 matches Gnulib now. sys_types: just use 2.70 * m4/sys_types_h.m4 (AC_HEADER_MAJOR): Reindent to match Autoconf sources. Use Autoconf 2.70 as a prerequisite, not 2.69c. stdint: port to Autoconf 2.70 * m4/stdint.m4 (gl_STDINT_H): Check for inttypes.h and sys/types.h instead of assuming that AC_INCLUDES_DEFAULT does it. The old code relied on AC_INCLUDES_DEFAULT being called and setting ac_cv_header_inttypes_h and ac_cv_header_sys_types_h, but this does not occur in Autoconf 2.70. pid_t.m4: just use 2.70 * m4/pid_t.m4 (AC_TYPE_PID_T): Use Autoconf 2.70 as a prerequisite, not 2.69c. largefile: just use 2.70 * m4/largefile.m4 (_AC_SYS_LARGEFILE_TEST_INCLUDES): Use Autoconf 2.70 as a prerequisite, not 2.69c. AC_C_RESTRICT: update from Autoconf * m4/gnulib-common.m4 (gl_PROG_CC_C99): Use Autoconf 2.70 as a prerequisite, not 2.69c, since 2.70 is now out. (AC_C_RESTRICT): Define only for 2.70 or earlier. Try __restrict__ before __restrict. extensions: update from Autoconf * m4/extensions.m4 (AC_CHECK_INCLUDES_DEFAULT): Provide a default implementation for Autoconf 2.69 or earlier. (AC_USE_SYSTEM_EXTENSIONS): Copy from Autoconf git. Define only if Autoconf 2.70 or earlier, since 2.70.1 or later should be OK. alloca: update from Autoconf * m4/alloca.m4 (gl_PREREQ_ALLOCA): Trivial update to match Autoconf 2.70. 2020-12-11 Bruno Haible memchr: Work around memory overrun bug on AIX 7.2. * m4/memchr.m4 (gl_FUNC_MEMCHR): Test against AIX 7.2 bug. * doc/posix-functions/memchr.texi: Mention the AIX bug. 2020-12-11 Bruno Haible execute-tests: Fix compilation error on AIX in 32-bit mode. * tests/test-execute-child.c: In order to get the original definition of fstat, don't use '#undef fstat' and '#undef stat'. Instead, arrange to include the system's and use it before including other header files. 2020-12-10 Bruno Haible windows-spawn: Relicense under LGPLv2+. * modules/windows-spawn (License): Change to LGPLv2+. 2020-12-10 Bruno Haible execute, spawn-pipe: Fix memory leak on native Windows. * lib/windows-spawn.h (prepare_spawn): Add a second parameter. * lib/windows-spawn.c: Don't include xalloc.h. (quoted_arg_length, quoted_arg_string): New functions, extracted from prepare_spawn. (prepare_spawn): Use malloc instead of XNMALLOC. Allocate memory for all elements of *new_argv together. * modules/windows-spawn (Depends-on): Remove xalloc. Add malloc-posix. * lib/os2-spawn.h (prepare_spawn): Add a second parameter. * lib/os2-spawn.c: Don't include xalloc.h. (prepare_spawn): Use malloc instead of XNMALLOC. Allocate memory for all elements of *new_argv together. * lib/execute.c: Include xalloc.h. (execute): Check return value of prepare_spawn. Free the memory allocated by prepare_spawn. * modules/execute (Depends-on): Add xalloc-die. * lib/spawn-pipe.c: Include xalloc.h. (create_pipe): Check return value of prepare_spawn. Free the memory allocated by prepare_spawn. * modules/spawn-pipe (Depends-on): Add xalloc-die. 2020-12-10 Bruno Haible findprog-in: Relicense under LGPLv2+. Paul Smith's approval is in . * modules/findprog-in (License): Change to LGPLv2+. 2020-12-10 Bruno Haible findprog-in: Don't exit upon out-of-memory. * lib/findprog.h (find_in_given_path): Document ENOMEM as possible error code. * lib/findprog-in.c: Don't include xalloc.h. (find_in_given_path): Call concatenated_filename, not xconcatenated_filename. Call strdup, not xstrdup. Upon out-of-memory, return NULL with errno set. * modules/findprog-in (Depends-on): Remove xconcat-filename, xalloc. Add concat-filename, strdup-posix, malloc-posix. 2020-12-09 Bruno Haible fmaf: Work around a bug on FreeBSD 12.2/arm. * m4/fmaf.m4 (gl_FUNC_FMAF_WORKS): Add one more test. * doc/posix-functions/fmaf.texi: Mention the FreeBSD bug. 2020-12-09 Bruno Haible threadlib: Fix test-fstrcmp failure on FreeBSD 11. * m4/threadlib.m4 (gl_THREADLIB_BODY): When weak symbols are not present on FreeBSD, define PTHREAD_IN_USE_DETECTION_HARD. * lib/glthread/threadlib.c: Include . (glthread_in_use): For FreeBSD, provide an alternative implementation that uses pthread_key_create. 2020-12-09 Bruno Haible math C++ tests: Fix compilation error in with clang >= 7 on FreeBSD. * lib/math.in.h (isnan): For clang >= 7 on FreeBSD, declare 'rpl_isnan', not 'isnan'. 2020-12-08 Bruno Haible std-gnu11: Make compatible with Autoconf 2.70. * m4/std-gnu11.m4: Disable the entire file if Autoconf >= 2.70 is in use. 2020-12-08 Bruno Haible argp: Avoid undefined behaviour when invoking qsort(). This fixes a test-argp-2.sh test failure on macOS and FreeBSD. Reported by Jeffrey Walton in . * lib/argp-help.c (group_cmp): Remove third argument. (hol_sibling_cluster_cmp, hol_cousin_cluster_cmp): New functions, based upon hol_cluster_cmp. (hol_cluster_cmp): Use hol_cousin_cluster_cmp. (hol_entry_cmp): Rewritten to implement a total order. 2020-12-08 Bruno Haible argp: Improve comments. * lib/argp-help.c: Add sectioning comments. Write NULL to designate a null pointer. (struct hol_entry): Fix comment regarding sort order of group. (hol_entry_short_iterate, hol_entry_long_iterate): Add comment. (until_short, canon_doc_option, hol_entry_qcmp): Improve comment. (hol_cluster_is_child, argp_hol): Move functions. (HOL_ENTRY_PTRCMP): Remove unused macro. 2020-12-08 Bruno Haible argp: Don't pass invalid arguments to isspace() and isalnum(). * lib/argp-help.c (canon_doc_option): Cast character to 'unsigned int' before passing it to isspace() or isalnum(). 2020-12-08 Bruno Haible argp: Don't rely on undefined behaviour of _tolower(). Patch by Eric Blake . * lib/argp-help.c (hol_entry_cmp): Don't use _tolower on values that are not upper-case. Pass correct range to tolower. 2020-12-07 Bruno Haible unicodeio: Fix wrong result on FreeBSD. * lib/unicodeio.c (unicode_to_mb): Handle question mark fallback characters on all platforms. 2020-12-07 Bruno Haible get-rusage-data tests: Avoid test failure on FreeBSD/x86_64. * tests/test-get-rusage-data.c (main): Don't expect a strict increase on FreeBSD systems. 2020-12-07 Bruno Haible get-rusage-data: Fix link error on FreeBSD 12.2/arm64. * modules/get-rusage-data (configure.ac): Test whether sbrk exists. * lib/get-rusage-data.c (get_rusage_data_via_setrlimit): Define trivially of sbrk is not available. * doc/glibc-functions/sbrk.texi: Mention that the function does not exist in FreeBSD 12.2/arm64. * doc/glibc-functions/brk.texi: Likewise. 2020-12-07 Bruno Haible Correct interaction between gl_ANSI_CXX and AC_PROG_CXX. Suggested by Zack Weinberg in . * m4/ansi-c++.m4 (gl_ANSI_CXX): Mark AC_PROG_CXX as provided. * modules/uchar-c++-tests: Revert the workaround from 2020-08-18. 2020-12-07 Bruno Haible Tweak the Windows oldnames workaround. Reported by Daniel R. Hurtmans in . * lib/unistd.in.h: On native Windows, include and always. (getcwd): Use _GL_CXXALIAS_MDA_CAST. * lib/stdlib.in.h (putenv): Likewise. 2020-12-06 Paul Eggert doc: fix flat address space discussion * doc/gnulib-readme.texi (Other portability assumptions): Move the all-bits-zero assumption outside the flat address space section, since the two issues are independent. doc: document -static-libubsan more * doc/gnulib-readme.texi (High Quality): Document pros and cons of -static-libubsan a bit more. Mostly cons. 2020-12-06 Bruno Haible doc: Add more details regarding the undefined behaviour sanitizer. * doc/gnulib-readme.texi (High Quality): Describe -fsanitize-undefined-trap-on-error better. 2020-12-06 Bruno Haible Do the Windows oldnames workaround through the C++ GNULIB_NAMESPACE. Reported by Daniel R. Hurtmans in . * lib/c++defs.h (_GL_CXXALIAS_MDA_CAST): New macro. * lib/fcntl.in.h (creat, open): In C++ mode, when GNULIB_NAMESPACE is defined: 1. Define a symbol in this namespace. 2. Don't redirect using a preprocessor #define. * lib/math.in.h (j0, j1, jn, y0, y1, yn): Likewise. * lib/search.in.h (lfind, lsearch): Likewise. * lib/stdio.in.h (fcloseall, fdopen, fileno, getw, putw, tempnam): Likewise. * lib/stdlib.in.h (ecvt, fcvt, gcvt, mktemp, putenv): Likewise. * lib/string.in.h (memccpy, strdup): Likewise. * lib/sys_stat.in.h (chmod, umask): Likewise. * lib/time.in.h (tzset): Likewise. * lib/unistd.in.h (access, chdir, close, dup, dup2, execl, execle, execlp, execv, execve, execvp, execvpe, getcwd, getpid, isatty, lseek, read, rmdir, swab, unlink, write): Likewise. * lib/utime.in.h (utime): Likewise. * lib/wchar.in.h (wcsdup): Likewise. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_DECL_FCLOSEALL. (gl_STDIO_H): Set HAVE_DECL_FCLOSEALL. * modules/stdio (Makefile.am): Substitute HAVE_DECL_FCLOSEALL. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_ECVT, HAVE_DECL_FCVT, HAVE_DECL_GCVT. (gl_STDLIB_H): Set HAVE_DECL_ECVT, HAVE_DECL_FCVT, HAVE_DECL_GCVT. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_ECVT, HAVE_DECL_FCVT, HAVE_DECL_GCVT. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_EXECVPE. (gl_UNISTD_H): Set HAVE_DECL_EXECVPE. * modules/unistd (Makefile.am): Substitute HAVE_DECL_EXECVPE. * m4/wchar_h.m4 (gl_WCHAR_H_DEFAULTS): Initialize HAVE_DECL_WCSDUP. (gl_WCHAR_H): Set HAVE_DECL_WCSDUP. * modules/wchar (Makefile.am): Substitute HAVE_DECL_WCSDUP. 2020-12-06 Bruno Haible doc: Mention some missing function declarations. * doc/glibc-functions/execvpe.texi: Mention the missing declaration on AIX. * doc/glibc-functions/fcloseall.texi: Mention the missing declaration on FreeBSD. * doc/pastposix-functions/ecvt.texi: Mention the missing declaration on Cygwin. * doc/pastposix-functions/fcvt.texi: Likewise. * doc/pastposix-functions/gcvt.texi: Likewise. 2020-12-06 Bruno Haible doc: Tweak example. * doc/intprops.texi (Checking Integer Overflow): Use 'printf', not 'print'. 2020-12-06 Bruno Haible filenamecat-tests: Use idx_t for nonnegative ptrdiff_t variables. * tests/test-filenamecat.c: Include idx.h. (main): Mark prefixlen as nonnegative. * modules/filenamecat-tests (Depends-on): Add idx. 2020-12-06 Bruno Haible time_rz: Use idx_t for nonnegative ptrdiff_t variables. * lib/time_rz.c: Include idx.h. (save_abbr): Mark zone_size as nonnegative. * modules/time_rz (Depends-on): Add idx. 2020-12-06 Bruno Haible parse-datetime: Use idx_t for nonnegative ptrdiff_t variables. * lib/parse-datetime.y: Include idx.h. (textint): Mark digits as nonnegative. (parser_control): Mark dates_seen, days_seen, local_zones_seen, dsts_seen, times_seen, zones_seen as nonnegative. (lookup_word): Mark wordlen as nonnegative. (yylex): Mark count as nonnegative. (parse_datetime2): Mark tzsize as nonnegative. * modules/parse-datetime (Depends-on): Add idx. 2020-12-06 Bruno Haible fnmatch: Use idx_t for nonnegative ptrdiff_t variables. * lib/fnmatch.c: Include idx.h. In glibc, define idx_t directly. * lib/fnmatch_loop.c (EXT): Mark slen, new_used, plensize as nonnegative. * modules/fnmatch (Depends-on): Add idx. 2020-12-06 Bruno Haible c-stack: Use idx_t for nonnegative ptrdiff_t variables. * lib/c-stack.c: Include idx.h. (die): Mark buflen as nonnegative. * modules/c-stack (Depends-on): Add idx. 2020-12-06 Bruno Haible backupfile: Use idx_t for nonnegative ptrdiff_t variables. * lib/backupfile.c: Include idx.h. (numbered_backup): Mark base_offset as nonnegative. (backupfile_internal): Likewise. * modules/backup-rename (Depends-on): Add idx. * modules/backupfile (Depends-on): Likewise. 2020-12-05 Paul Eggert doc: fix curved quotes issue * doc/gnulib.texi: Set txicodequoteundirected and txicodequotebacktick so that ` and ' in examples do not generate curved single quotes that do the wrong thing when cut and pasted. doc: mention static and dynamic checking * doc/gnulib-readme.texi (High Quality): Add a bit of advice for static and dynamic checking. intprops: Add INT_ADD_OK etc. * doc/intprops.texi (Checking Integer Overflow): New section. * lib/intprops.h: From a suggestion by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-12/msg00051.html (SAFE_INT_ADD, SAFE_INT_SUBTRACT, SAFE_INT_MULTIPLY): New macros. doc: move exotic platfroms to Target Platforms * doc/gnulib-intro.texi (Supported Platforms) (Formerly Supported Platforms, Unsupported Platforms): New subsections, split off from Target Platforms. (Unsupported Platforms): Move the exotic-platform stuff here ... * doc/gnulib-readme.texi (Exotic platforms): ... from this removed section. doc: mention intptr_t etc. and IBM i * doc/gnulib-readme.texi (Other portability assumptions): Mention intptr_t and uintptr_t, and that arithmetic on them works in the usual way. (Exotic platforms): New section, containing material from the old 'Integer Portability' section. Also mention IBM i. * doc/intprops.texi (Wraparound Arithmetic): Say that the macros work on unsigned integers too. (Integer Portability): Remove. 2020-12-04 Bruno Haible utime: Fix a test failure on macOS 10.13. Reported by Martin Storsjö in . * m4/utime.m4 (gl_FUNC_UTIME): Test whether utime handles trailing slashes on files. * lib/utime.c (utime): Add alternative implementation for Unix platforms. * modules/utime (Depends-on): Add stat. * doc/posix-functions/utime.texi: Mention the macOS 10.13 bug. * doc/posix-functions/lstat.texi: Mention that macOS 10.13 also has the trailing-slash bug. * doc/posix-functions/open.texi: Likewise. * doc/posix-functions/stat.texi: Likewise. * doc/posix-functions/symlink.texi: Likewise. 2020-12-04 Paul Eggert intprops: update doc and mention Unisys * doc/gnulib-readme.texi (Other portability assumptions): Also mention ptrdiff_t when talking about widths and overflow. * doc/intprops.texi (Integer Properties): Summarize new section. (Arithmetic Type Properties): Document that EXPR_SIGNED no longer evaluates its argument. (Integer Bounds): Fix typo. (Wraparound Arithmetic): Remove obsolete comment about efficiency. Document that the _WRAPV macros now support pointers to unsigned integers. (Integer Range Overflow): Update SEI CERT citation. (Integer Portability): New subsection, which mentions the oddball Unisys platforms as non-Gnulib targets. 2020-12-03 Bruno Haible idx: Clarify that idx_t always behaves like a signed type. Suggested by Paul Eggert in . * lib/idx.h: Clarify that idx_t always behaves like a signed type. Don't test UNSIGNED_IDX_T. 2020-12-03 Bruno Haible idx: New module. * lib/idx.h: New file. * modules/idx: New file. * lib/canonicalize-lgpl.c: Include idx.h. Use idx_t instead of ptrdiff_t. * lib/canonicalize.c: Likewise. * modules/canonicalize-lgpl (Depends-on): Add idx. * modules/canonicalize (Depends-on): Likewise. 2020-12-03 Bruno Haible fprintf-posix-tests: Avoid a test failure on macOS 10.13. Reported by Martin Storsjö in . * tests/test-fprintf-posix3.c: Skip the test on macOS. (main): Return a different exit code at each point. Allow 100 KB extra memory consumption. * tests/test-fprintf-posix3.sh: Update. Remove the "get_rusage_as() doesn't work" diagnostic. 2020-12-02 Paul Eggert canonicalize: refactor can_mode flag * lib/canonicalize.c (MULTIPLE_BITS_SET): Remove, replacing with ... (multiple_bits_set): ... this new static function. Uses changed. (canonicalize_filename_mode): Refactor for clarity to avoid modifying the CAN_MODE argument. canonicalize: prefer signed integer types * lib/canonicalize.c: Include stddef.h, for ptrdiff_t. (seen_triple, canonicalize_filename_mode): Prefer signed to unsigned types where either will do, as they avoid some glitches in comparisons and can trap on overflow when debugging. canonicalize: fix most of another EOVERFLOW issue * lib/canonicalize.c (canonicalize_filename_mode): Do not call stat if fewer than 20 symlinks have been traversed. This avoids EOVERFLOW failure in the common case where there are not that many symlinks, while continuing to catch loops (or fail due to EOVERFLOW) in the unusual case when there are many symlinks to traverse. canonicalize: do not assume symlinks have st_ino * lib/canonicalize.c (canonicalize_filename_mode): When checking for loops, use st_dev and st_ino from the parent directory not from the symlink, as pre-2017 POSIX says these members are not reliable for symlinks. Couple this with START (the remaining file name to be resolved), not NAME (the whole file name with START as its suffix). * modules/canonicalize (Depends-on): Depend on stat, not lstat. canonicalize: fix EOVERFLOW bug * lib/canonicalize.c (canonicalize_filename_mode): When testing whether a directory entry is a symbolic link, or a directory or other, do not use lstat or stat or areadlink_with_size. Just use areadlink, as this suffices and it avoids the EOVERFLOW problem that lstat and stat have. * modules/canonicalize (Depends-on): Depend on areadlink instead of areadlink-with-size and stat. canonicalize-lgpl: fix EOVERFLOW bug * lib/canonicalize-lgpl.c: Do not include . (__realpath): Do not use lstat. Just use readlink, as this suffices and it avoids the EOVERFLOW problem that lstat has. * modules/canonicalize-lgpl (Depends-on): Remove lstat, sys_stat. 2020-12-02 Bruno Haible strsignal-tests: Fix test failure on macOS 10.13. Reported by Martin Storsjö in . * tests/test-strsignal.c (ASSERT_DESCRIPTION): Allow the actual result to be longer than the expected result. 2020-12-02 Bruno Haible Fix compilation errors in test-math-c++.cc on FreeBSD 12.2/arm64. * lib/math.in.h (_GL_INCLUDING_MATH_H): New macro, to work around recursive self-include problem on FreeBSD 12.2 in C++ mode. 2020-12-02 Bruno Haible spawn-pipe: Allow caller to specify directory for the subprocess. * lib/spawn-pipe.h (create_pipe_out, create_pipe_in, create_pipe_bidi): Add directory argument. * lib/spawn-pipe.c: Include canonicalize.h, filename.h, findprog.h. (create_pipe): Add directory argument. If specified, resolve the program file name and make it absolute, first. Pass the directory to spawnpvech and posix_spawn_file_actions_addchdir. (create_pipe_bidi, create_pipe_in, create_pipe_out): Add directory argument. * modules/spawn-pipe (Depends-on): Add canonicalize, filename, findprog-in, posix_spawn, posix_spawn_file_actions_addchdir. * tests/test-spawn-pipe-main.c (test_pipe): Update. * NEWS: Mention the change. * lib/csharpcomp.c (compile_csharp_using_mono, compile_csharp_using_sscli): Update. * lib/javacomp.c (is_envjavac_gcj, is_envjavac_gcj43, is_gcj_present, is_gcj_43): Update. * lib/javaversion.c (execute_and_read_line): Update. * lib/pipe-filter-gi.c (pipe_filter_gi_create): Update. * lib/pipe-filter-ii.c (pipe_filter_ii_execute): Update. 2020-12-02 Bruno Haible execute: Allow caller to specify directory for the subprocess. * lib/execute.h (execute): Add directory argument. * lib/execute.c: Include canonicalize.h, filename.h, findprog.h. (execute): Add directory argument. If specified, resolve the program file name and make it absolute, first. Pass the directory to spawnpvech and posix_spawn_file_actions_addchdir. * modules/execute (Depends-on): Add canonicalize, filename, findprog-in, posix_spawn, posix_spawn_file_actions_addchdir. * tests/test-execute-main.c: Add test for passing a directory. * tests/test-execute-child.c: Likewise. * tests/test-execute.sh: Update. * modules/execute-tests (Depends-on): Add mkdir. * NEWS: Mention the change. * lib/csharpcomp.c (compile_csharp_using_sscli): Update. * lib/csharpexec.c (execute_csharp_using_mono, execute_csharp_using_sscli): Update. * lib/javacomp.c (compile_using_envjavac, compile_using_gcj, compile_using_javac, compile_using_jikes, is_javac_present, is_jikes_present): Update. * lib/javaexec.c (execute_java_class): Update. 2020-12-01 Bruno Haible vma-iter: Add support for macOS11/arm64. Patch suggested by Hill Ma in and by Martin Storsjö in . * lib/vma-iter.c (vma_iterate): On arm64, use 64-bit type definitions. 2020-12-01 Bruno Haible spawn-pipe: Fix handling of OS/2 kLIBC. Reported by KO Myung-Hun in . * modules/spawn-pipe (configure.ac): Use the common idiom for recognizing the OS/2 operating system. 2020-11-30 Bruno Haible execute: Fix uninitialized use of errno. * lib/execute.c (execute): Preserve errno across several system calls. 2020-11-30 Bruno Haible access tests: Fix test failure on native Windows. * tests/test-access.c (main): Change permissions of f2 file before attempting to remove it. 2020-11-30 Paul Eggert faccessat: link with $(LIB_EACCESS) * modules/faccessat (Link:): Add $(LIB_EACCESS), since this module depends on euidaccess. 2020-11-30 Bruno Haible execute, spawn-pipe: Make multithread-safe on native Windows. * lib/windows-spawn.h: Include , . (dup_safer_noinherit, undup_safer_noinherit): Remove declarations. (spawnpvech): New declaration. * lib/windows-spawn.c: Include , , findprog.h. Don't include , cloexec.h, error.h, gettext.h. (_): Remove macro. (dup_noinherit, fd_safer_noinherit, dup_safer_noinherit, undup_safer_noinherit): Remove functions. (spawnpvech): New function. * modules/windows-spawn (Depends-on): Add findprog-in, stdint. Remove cloexec, dup2, error, gettext-h. * lib/execute.c: Include msvc-nothrow.h. (execute) [WIN32]: Use _get_osfhandle, spawnpvech instead of _spawnvpe. * lib/spawn-pipe.c: Include msvc-nothrow.h. (create_pipe) [WIN32]: Use _get_osfhandle, DuplicateHandle, spawnpvech instead of _spawnvpe. * modules/execute (Depends-on): Add msvc-nothrow. * modules/spawn-pipe (Depends-on): Likewise. 2020-11-30 Bruno Haible execute, spawn-pipe: Improve documentation. * lib/execute.h: Describe progname, prog_path, prog_argv. * lib/spawn-pipe.h: Likewise. 2020-11-30 Bruno Haible execute tests: Add more tests. * tests/test-execute-main.c: Add tests for reading, writing, isatty on inherited file descriptors >= 3. * tests/test-execute-child.c: Likewise. * tests/test-execute.sh: Update. 2020-11-30 Bruno Haible havelib: Fix for non-ELF platforms (regression 2019-11-17). Reported by comex in . * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): On non-ELF platforms, don't expect an ELF header. 2020-11-29 Akim Demaille bitset: use integer_length in table implementation * lib/bitset/table.c (tbitset_list_reverse): Use BITSET_FOR_EACH_BIT_REVERSE. 2020-11-29 Akim Demaille bitset: use integer_length in list implementation * lib/bitset/list.c (lbitset_list_reverse): Use BITSET_FOR_EACH_BIT_REVERSE. 2020-11-29 Akim Demaille bitset: use integer_length in vector implementation * lib/bitset/array.c (vbitset_list_reverse): Use BITSET_FOR_EACH_BIT_REVERSE. 2020-11-29 Akim Demaille bitset: use integer_length in array implementation * modules/bitset (Depends-on): Add integer_length_l. * lib/bitset/base.h (bitset_fls_, BITSET_FOR_EACH_BIT_REVERSE): New. * lib/bitset/array.c (abitset_list_reverse): Use it. 2020-11-29 Akim Demaille bitset: style: use consistent names * bitset/list.c (lbitset_list_reverse): Rename 'bcount' as 'bitcnt', and 'boffset' as 'bitoff', for consistency with the other implementations. * bitset/table.c (tbitset_list_reverse): Likewise. 2020-11-29 Akim Demaille bitset: style: sort header * lib/bitset/base.h (bitset_ffs): Rename as... (bitset_ffs_): this. (bitset_ffs_, BITSET_FOR_EACH_BIT): Move to better places. 2020-11-29 Akim Demaille bitset: tests: check BITSET_FOR_EACH_REVERSE * tests/test-bitset.c (compare, check_zero, check_one_bit, check_ones): Check BITSET_FOR_EACH_REVERSE. 2020-11-29 Bruno Haible spawn-pipe tests: Fix test failure with MSVC. * tests/test-spawn-pipe-child.c: Include . (gl_msvc_invalid_parameter_handler): New function. (main): Set a global invalid-parameter handler. * modules/spawn-pipe-tests (Depends-on): Add msvc-inval, stdint. 2020-11-29 Bruno Haible execute: Add tests. * tests/test-execute.sh: New file. * tests/test-execute-main.c: New file. * tests/test-execute-child.c: New file. * modules/execute-tests: New file. 2020-11-29 Bruno Haible fcntl: Work around NetBSD bug with F_DUPFD_CLOEXEC. * m4/fcntl.m4 (gl_FUNC_FCNTL): Test whether F_DUPFD_CLOEXEC actually works. * lib/fcntl.c (rpl_fcntl_DUPFD_CLOEXEC): On NetBSD, use the same fallback implementation as on Haiku. * tests/test-fcntl.c (main): Add a test whether F_DUPFD_CLOEXEC is effective. * doc/posix-functions/fcntl.texi: Mention the NetBSD bug. 2020-11-29 Bruno Haible spawn-pipe: Fix build on OS/2 kLIBC (regression 2020-11-28). * lib/os2-spawn.h: New file, based on lib/windows-spawn.h. * lib/os2-spawn.c: New file, based on lib/windows-spawn.c. * lib/spawn-pipe.c: On OS/2 kLIBC, include "os2-spawn.h". * lib/windows-spawn.c: Remove modifications for kLIBC. * modules/spawn-pipe (Files): Add the new files. (configure.ac): Arrange to compile os2-spawn.c on OS/2. 2020-11-28 Bruno Haible asyncsafe-spin: Fix compilation error with GCC on 32-bit SPARC. Reported by Paul Eggert in . * m4/sparcv8+.m4: New file. * modules/sparcv8+: New file. * modules/asyncsafe-spin (Depends-on): Add sparcv8+. 2020-11-28 Bruno Haible asyncsafe-spin: Fix build error with GCC on 32-bit SPARC. * lib/asyncsafe-spin.c: Don't use GCC >= 4.1 primitives on SPARC. 2020-11-28 Bruno Haible windows-spawn: New module. * lib/windows-spawn.h: Renamed from lib/w32spawn.h. Remove implementations. * lib/windows-spawn.c: Renamed from lib/w32spawn.h. * modules/windows-spawn: New file. * lib/execute.c: Include "windows-spawn.h" instead of "w32spawn.h". * lib/spawn-pipe.c: Likewise. * modules/execute (Files): Remove lib/w32spawn.h. (Depends-on): Add windows-spawn. Remove cloexec, msvc-nothrow, strpbrk, xalloc. (Makefile.am): Remove w32spawn.h from lib_SOURCES. * modules/spawn-pipe (Files): Remove lib/w32spawn.h. (Depends-on): Add windows-spawn. Remove cloexec, msvc-nothrow, strpbrk, xalloc. (Makefile.am): Remove w32spawn.h from lib_SOURCES. 2020-11-27 Bruno Haible ssfmalloc tests: Port to macOS 11. * tests/test-ssfmalloc.c (PAGESIZE_MAX): Set to 16384, not 8192. 2020-11-26 Bruno Haible Fix dependencies of modules that use '_exit' on native Windows. Reported by Jim Meyering in . * modules/_Exit (Depends-on): Add unistd. * modules/closein (Depends-on): Likewise. * modules/closeout (Depends-on): Likewise. * modules/forkpty (Depends-on): Likewise. * modules/posix_spawn-internal (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * modules/stat-time-tests (Depends-on): Likewise. 2020-11-26 Bruno Haible raise-tests: Fix compilation error on MSVC (regression 2020-11-25). * modules/raise-tests (Depends-on): Add unistd. * doc/posix-functions/_exit.texi: Mention the 'unistd' module. 2020-11-25 Jim Meyering setlocale-tests: do not trigger gcc's -Wanalyzer-possible-null-argument * tests/test-setlocale1.c (main): Assert that each strcmp argument is non-NULL, since we don't bother handing strdup failure. raise-tests: avoid GCC 11's new exit-from-signal-handler warning gcc's -Wanalyzer-unsafe-call-within-signal-handler exposed this. * tests/test-raise.c: Include unistd.h. (handler): Use _exit, not exit. 2020-11-23 Bruno Haible Use the correct printf format attribute for mingw. Reported by Reuben Thomas in . * modules/vfprintf-posix (configure.ac): Define GNULIB_VFPRINTF_POSIX. * modules/vprintf-posix (configure.ac): Define GNULIB_VPRINTF_POSIX. * lib/stdio.in.h (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM): New macros. (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from _GL_ATTRIBUTE_FORMAT_PRINTF. Use _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. (_GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM): Use _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. * modules/vasnprintf (Depends-on): Add stdio. * lib/vasnprintf.h: Include . (asnprintf, vasnprintf): Use the standard printf format attribute. * modules/xvasprintf (Depends-on): Add stdio. * lib/xvasprintf.h: Include . (xasprintf, xvasprintf): Use the standard printf format attribute. * modules/xprintf (Depends-on): List stdio first. * lib/xprintf.h (xprintf, xvprintf): Use a printf format attribute that depends on GNULIB_VPRINTF_POSIX. (xfprintf, xvfprintf): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * modules/c-vasnprintf (Depends-on): Add stdio. * lib/c-vasnprintf.h: Include . (c_vasnprintf): Use the standard printf format attribute. * modules/c-vasprintf (Depends-on): Add stdio. * lib/c-vasprintf.h: Include . (c_asprintf, c_vasprintf): Use the standard printf format attribute. * modules/c-vsnprintf (Depends-on): Add stdio. * lib/c-vsnprintf.h: Include . (c_vsnprintf): Use the standard printf format attribute. * modules/c-snprintf (Depends-on): Add stdio. * lib/c-snprintf.h: Include . (c_snprintf): Use the standard printf format attribute. * modules/c-xvasprintf (Depends-on): Add stdio. * lib/c-xvasprintf.h: Include . (c_xasprintf, c_xvasprintf): Use the standard printf format attribute. * modules/error (Depends-on): Depend on stdio always. * lib/error.h: Include . (_GL_ATTRIBUTE_SPEC_PRINTF): Remove macro. (error, error_at_line): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * lib/error.c (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from _GL_ATTRIBUTE_FORMAT_PRINTF. * modules/verror (Depends-on): Add stdio. * lib/verror.h: Include . Don't include "error.h". (verror, verror_at_line): Use the standard printf format attribute. * lib/verror.c: Include "error.h". * modules/argp (Depends-on): Add stdio. * lib/argp.h (argp_error, __argp_error, argp_failure, __argp_failure): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * modules/libtextstyle-optional (Depends-on): Add stdio. * lib/textstyle.in.h (ostream_printf, ostream_vprintf): Use the standard printf format attribute. * tests/test-nonblocking-misc.h (dbgfprintf): Use the standard printf format attribute. 2020-11-23 Pádraig Brady selinux-at, selinux-h: use const correct declarations * lib/se-selinux.in.h: Use const for "set" functions, to match current selinux, and support cleaner user code. * lib/selinux-at.c: Likewise. * lib/selinux-at.h: Likewise. 2020-11-22 Paul Eggert canonicalize-lgpl: fix memory leak * lib/canonicalize-lgpl.c (__realpath): Fix unlikely memory leak, which could have occurred if BUF was so large that malloc was called. Do this by allocating EXTRA_BUF and BUF at the same time; this eliminates the need to free BUF separately. 2020-11-22 Bruno Haible Fix missing module dependencies to 'xalloc' (regression 2020-10-19). * modules/xvasprintf (Depends-on): Add xalloc. * modules/pipe-filter-gi (Depends-on): Likewise. * modules/execute (Depends-on): Likewise, for w32spawn.h. * modules/spawn-pipe (Depends-on): Likewise. 2020-11-22 Jose E. Marchesi bootstrap: add option hooks * build-aux/bootstrap (bootstrap_print_option_usage_hook): Define. (bootstrap_option_hook): Likewise. (usage): Call bootstrap_print_option_usage_hook. 2020-11-22 Bruno Haible argp: Don't break getprogname on non-glibc systems. * m4/argp.m4 (gl_ARGP): Don't expect to exist when testing for program_invocation_name and program_invocation_short_name. 2020-11-22 Bruno Haible doc: Document . * doc/glibc-headers/link.texi: New file. * doc/gnulib.texi: Include it. 2020-11-22 Bruno Haible doc: Add references to the LSB. * doc/glibc-functions/*.texi: Add references to LSB 5.0. * doc/posix-functions/*.texi: Likewise. 2020-11-22 Bruno Haible doc: Fix a makeinfo warning (regression 2020-11-03). * doc/posix-functions/aligned_alloc.texi: Add missing @item. 2020-11-21 Paul Eggert parse-datetime: fix printf format typo * lib/parse-datetime.y (parse_datetime2): Fix format typo in previous patch to this file. Problem reported by Chris Elvidge in . setlocale-null-tests: work around GCC bug 44511 * tests/test-setlocale_null-mt-all.c: * tests/test-setlocale_null-mt-one.c: Ignore -Wreturn-type, to work around GCC bug 44511. nl_langinfo-tests: work around GCC bug 44511 * tests/test-nl_langinfo-mt.c: Ignore -Wreturn-type, to work around a GCC bug . Problem reported for GNU grep by Andreas Schwab . selinux-h: add stubs for selabel_open etc. Coreutils with --enable-gcc-warnings does not build on Ubuntu 20.10 because matchpathcon is deprecated in favor of selabel_open etc., so this patch adds stubs for these functions. * lib/se-label.c, lib/se-label.in.h, m4/selinux-label-h.m4: New files. * lib/se-selinux.in.h (struct selinux_opt): Add incomplete decl, as it is needed for selabel_open and selinux/selinux.h declares this type here. * modules/selinux-h (Files): Add the new files. (configure.ac): Add gl_HEADERS_SELINUX_LABEL_H. (lib_SOURCES): Add se-label.in.h, se-label.c. (BUILT_SOURCES): Add $(SELINUX_LABEL_H). (selinux/label.h): New rule, mimicking selinux/context.h. (MOSTLYCLEANFILES): Add selinux/label.h, selinux/label.h-t. (Include): Add selinux/label.h. 2020-11-21 Bruno Haible Update after 'test-driver' in Automake changed. * build-aux/test-driver.diff: Rebase. 2020-11-21 Daiki Ueno read-file: remove dead assignment * lib/read-file.c (fread_file): Remove dead assignment when RF_SENSITIVE is set, flagged by clang-analyzer. 2020-11-19 Akim Demaille bitset: tests: exercise the stats too * tests/test-bitset.c: Display the stats at the end of the test. * lib/bitset/stats.c (bitset_log_histogram_print): When diplaying the last bin, display "256-..." rather that "256-511", since the last bin does count item greater than or equal to 256. 2020-11-19 Akim Demaille bitset: tests: try harder to break it * tests/test-bitset.c (compare): Be ready to use bitsets larger than BITSET_LIST_SIZE. (main): Likewise. While at it, also exercise super small bitsets. 2020-11-19 Akim Demaille bitset: use ffs where possible in the vector implementation * lib/bitset/vector.c (vbitset_list): Use BITSET_FOR_EACH_BIT. 2020-11-19 Akim Demaille bitset: use ffs where possible in the table implementation * lib/bitset/table.c (tbitset_list): Use BITSET_FOR_EACH_BIT. 2020-11-19 Akim Demaille bitset: check empty and full bitsets * tests/test-bitset.c (check_zero, check_ones): New. (check_attributes): Use them. 2020-11-19 Akim Demaille bitset: be sure to always return a value * lib/bitset/array.c (abitset_small_list): Always update *next and return a value. 2020-11-19 Siddhesh Poyarekar vcs-to-changelog: Expect spaces in file names Reported by Thierry Bothorel in , * build-aux/vcstocl/vcs_git.py (exec_git_cmd): Do not transform tabs to spaces. (list_changes): Use tabs to identify file names. 2020-11-17 Akim Demaille bitset: strengthen tests * tests/test-bitset.c (compare): Also check count. Deal only with random values, move the one-bit tests to... (check_one_bit): this new function. (check_attributes): Call it. 2020-11-17 Akim Demaille bitset: fix iteration over table bitsets * lib/bitset/table.c (tbitset_list): Update bitno when windex is. 2020-11-17 Akim Demaille bitset: rename internal details for consistency * lib/bitset/table.c: Rename all the EBITSET_ symbols as TBITSET_. 2020-11-17 Akim Demaille bitset: test: run deterministic tests on several bitset sizes * tests/test-bitset.c (check_attributes): Run it with small and large sizes. 2020-11-17 Akim Demaille bitset: use ffs where possible in the list implementation * lib/bitset/list.c (lbitset_list): Use BITSET_FOR_EACH_BIT. 2020-11-17 Akim Demaille bitset: use ffs where possible in array implementation * lib/bitset/array.c (abitset_small_list): Use BITSET_FOR_EACH_BIT. 2020-11-17 Bruno Haible posixcheck: Don't enable GNULIB_POSIXCHECK in C++ mode. Reported by Tom G. Christensen in . * m4/posixcheck.m4 (gl_POSIXCHECK): Don't define GNULIB_POSIXCHECK in C++ mode. 2020-11-17 Bruno Haible Fix error when GNULIB_POSIXCHECK is enabled (regression 2019-06-04). * lib/unistd.in.h (copy_file_range): Don't assume that copy_file_range is always declared. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether copy_file_range is declared. 2020-11-17 Bruno Haible Fix link errors on AIX. * modules/clean-temp (Link): Link with $(LIBTHREAD). * modules/getumask (Link): Link with $(LIBTHREAD). * modules/getumask-tests (Makefile.am): Link test-getumask with $(LIBTHREAD). * modules/supersede (Link): Link with $(LIBTHREAD). * modules/supersede-tests (Makefile.am): Link test-supersede with $(LIBTHREAD). * modules/fatal-signal (Link): New section. * modules/execute (Link): New section. * modules/csharpexec (Link): Link with $(LIBTHREAD). * modules/javaexec (Link): Link with $(LIBTHREAD). * modules/spawn-pipe (Link): New section. * modules/spawn-pipe-tests (Makefile.am): Link test-spawn-pipe-main with $(LIBTHREAD). * modules/csharpcomp (Link): Link with $(LIBTHREAD). * modules/javacomp (Link): Link with $(LIBTHREAD). * modules/javaversion (Link): Link with $(LIBTHREAD). * modules/pipe-filter-gi (Link): New section. * modules/pipe-filter-gi-tests (Makefile.am): Link test-pipe-filter-gi1, test-pipe-filter-gi2-main with $(LIBTHREAD). * modules/pipe-filter-ii (Link): New section. * modules/pipe-filter-ii-tests (Makefile.am): Link test-pipe-filter-ii1, test-pipe-filter-ii2-main with $(LIBTHREAD). * modules/term-style-control (Link): New section. * modules/term-style-control-tests (Makefile.am): Link test-term-style-control-hello, test-term-style-control-yes with $(LIBTHREAD). * modules/wait-process (Link): New section. * modules/nonblocking-pipe-tests (Makefile.am): Link test-nonblocking-pipe-main with $(LIBTHREAD). * modules/nonblocking-socket-tests (Makefile.am): Link test-nonblocking-socket-main with $(LIBTHREAD). 2020-11-16 Bruno Haible Fix link errors on platforms with libunistring. * modules/c32isalnum (Link): New section. * modules/c32isalnum-tests (Makefile.am): Link test-c32isalnum with $(LIBUNISTRING). * modules/c32isalpha (Link): New section. * modules/c32isalpha-tests (Makefile.am): Link test-c32isalpha with $(LIBUNISTRING). * modules/c32isblank (Link): New section. * modules/c32isblank-tests (Makefile.am): Link test-c32isblank with $(LIBUNISTRING). * modules/c32iscntrl (Link): New section. * modules/c32iscntrl-tests (Makefile.am): Link test-c32iscntrl with $(LIBUNISTRING). * modules/c32isdigit (Link): New section. * modules/c32isdigit-tests (Makefile.am): Link test-c32isdigit with $(LIBUNISTRING). * modules/c32isgraph (Link): New section. * modules/c32isgraph-tests (Makefile.am): Link test-c32isgraph with $(LIBUNISTRING). * modules/c32islower (Link): New section. * modules/c32islower-tests (Makefile.am): Link test-c32islower with $(LIBUNISTRING). * modules/c32isprint (Link): New section. * modules/c32isprint-tests (Makefile.am): Link test-c32isprint with $(LIBUNISTRING). * modules/c32ispunct (Link): New section. * modules/c32ispunct-tests (Makefile.am): Link test-c32ispunct with $(LIBUNISTRING). * modules/c32isspace (Link): New section. * modules/c32isspace-tests (Makefile.am): Link test-c32isspace with $(LIBUNISTRING). * modules/c32isupper (Link): New section. * modules/c32isupper-tests (Makefile.am): Link test-c32isupper with $(LIBUNISTRING). * modules/c32isxdigit (Link): New section. * modules/c32isxdigit-tests (Makefile.am): Link test-c32isxdigit with $(LIBUNISTRING). * modules/unicodeio (Link): Mention $(LIBUNISTRING). * modules/unicodeio-tests (Makefile.am): Link test-unicodeio with $(LIBUNISTRING). 2020-11-16 Bruno Haible Fix link errors on platforms with libintl (e.g. Solaris and AIX). Reported by Tom G. Christensen in . * modules/getumask-tests (Makefile.am): Link test-getumask with $(LIBINTL). * modules/stack-tests (Makefile.am): Link test-stack with $(LIBINTL). * modules/supersede-tests (Makefile.am): Link test-supersede with $(LIBINTL). * modules/unicodeio-tests (Makefile.am): Link test-unicodeio with $(LIBINTL). 2020-11-16 Bruno Haible getumask: Document link dependencies. * modules/getumask (Link): New section. 2020-11-16 Bruno Haible Update link dependencies in modules after 2020-09-09 change. * modules/tempname (Link): Add $(LIB_CLOCK_GETTIME). * modules/mkdtemp (Link): Likewise. * modules/mkostemp (Link): Likewise. * modules/mkostemps (Link): Likewise. * modules/mkstemp (Link): Likewise. * modules/mkstemps (Link): Likewise. * modules/supersede (Link): Likewise. * modules/tmpfile (Link): Likewise. * modules/tmpfile-safer (Link): Likewise. 2020-11-15 Paul Eggert getumask-tests: port to Solaris 10 etc. Problem reported by Tom Christensen in: https://lists.gnu.org/r/bug-gnulib/2020-11/msg00062.html * modules/getumask-tests (test_getumask_LDADD): Add $(LIB_CLOCK_GETTIME). 2020-11-15 Akim Demaille bitset: use ffsl to accelerate iterations over set bits Suggested by Bruno Haible. * modules/bitset: Depend upon ffsl. * lib/bitset/base.h (bitset_ffs, BITSET_FOR_EACH_BIT): New. * lib/bitset/array.c (abitset_list): Use BITSET_FOR_EACH_BIT. 2020-11-15 Akim Demaille bitset: more tests * tests/test-bitset.c (compare): Make it clear that the random values should not be modified. Check bitset_first, bitset_last and BITSET_FOR_EACH. 2020-11-15 Akim Demaille bitset: fix the copy from lbitset to other types * lib/bitset/list.c (lbitset_copy): Rename as... (lbitset_copy_): this. (lbitset_copy): New. Dispatch to heterogeneous/homogeneous copy. 2020-11-15 Akim Demaille bitset: making debug traces more useful * lib/bitset.c (bitset_print): Print the bitset type in verbose mode. bitset: comment changes * lib/bitset.c: Move some documenting comments to... * lib/bitset.h: here. * lib/bitset/array.c: Fix some comments. 2020-11-14 Paul Eggert careadlinkat: warn better about GCC bug 93644 * lib/careadlinkat.c (readlink_stk): When --enable-gcc-warnings is not in effect, use "#warning" to let builders know more clearly about GCC bug 93644, because the bug triggers even if no -W option is given to GCC. 2020-11-13 Jim Meyering hard-locale-tests: avoid a -Wstrict-prototypes warning * tests/locale.c (main): Placate gcc's -Wstrict-prototypes by changing "main ()" to "main (void)". This was the only case that triggered a warning when building grep with --enable-gcc-warnings. 2020-11-11 Paul Eggert time_rz: simplify CVE-2017-7476 fix * lib/time_rz.c: Do not include limits.h; I think it was included under the mistaken impression that limits.h defines SIZE_MAX. (SIZE_MAX): Remove. (save_abbr): Put string length into a ptrdiff_t variable, so that the size comparison works naturally. This fixes CVE-2017-7476 in a cleaner way. parse-datetime: streamline overflow checking When parse-datetime.y’s overflow code was written, INT_ADD_WRAPV did not work for unsigned destinations, and since time_t might be unsigned that meant it did not work for time_t destinations. This limitation of INT_ADD_WRAPV has been fixed, so we can now streamline parse-datetime.y a bit. * lib/parse-datetime.y: Do not include limits.h, as LONG_MAX has not been used for a while. (yylex, parse_datetime2): Assume C99 declarations after statements. (yyles): Use INT_SUBTRACT_WRAPV instead of an explicit comparison to TYPE_MINIMUM. (parse_datetime2): No need for time_overflow now that INT_ADD_WRAPV works for unsigned results. parse-datetime-tests: port to Alpine Linux 3.12.1 * tests/test-parse-datetime.c: Include errno.h for errno, and unistd.h for _SC_TZNAME_MAX and sysconf. (main): In the outlandishly-long time zone abbreviation test, do not exceed TZNAME_MAX as this has undefined behavior, and on Alpine Linux 3.12.1 it makes the test fail. 2020-11-09 Pádraig Brady mgetgroups: avoid warning with clang * lib/mgetgroups.c: Xcode-12.1 identifies as GCC 4.2.1, so disable -Wpointer-sign for all clang versions. 2020-11-07 Bruno Haible gnulib-tool: Fix link error with 'version-etc' (regression 2020-05-29). Reported by Simon Josefsson in . * gnulib-tool (func_emit_tests_Makefile_am): Add libtests.a to LDADD a third time, after the second occurrence of ../lib/libgnu.a. * pygnulib/GLEmiter.py (tests_Makefile_am): Likewise. 2020-11-04 Paul Eggert tests: pacify Sun C 5.9 Without these changes, Sun C 5.9 (2009/11/22) issues complaints like “"test-nl_langinfo-mt.c", line 75: warning: statement not reached”. * tests/test-nl_langinfo-mt.c (thread1_func, thread2_func) (thread3_func, thread4_func, thread5_func, thread6_func, threadN_func): * tests/test-setlocale_null-mt-all.c (thread1_func, thread2_func): * tests/test-setlocale_null-mt-one.c (thread1_func, thread2_func): Remove unreachable ‘return NULL;’s. tests: port better to XLC 12.01 * tests/test-argmatch.c (CHECK): Do not use -1 as a subscript, even in code that is not executed, as IBM XLC 12.01 complains "The subscript -1 is less than zero." * tests/test-stdint.c (verify_width): Pass an (unused) 3rd argument to _GL_VERIFY, as ISO C requires. Otherwise, IBM XLC 12.01 complains "The invocation of macro _GL_VERIFY contains fewer arguments than are required by the macro definition." 2020-11-03 Bruno Haible aligned-malloc: Use fixes from the new modules. * modules/aligned-malloc (Depends-on): Add posix_memalign, aligned_alloc, memalign. (configure.ac): Use AC_CHECK_FUNCS_ONCE. 2020-11-03 Bruno Haible aligned_alloc: Add tests. * tests/test-aligned_alloc.c: New file. * modules/aligned_alloc-tests: New file. aligned_alloc: New module. * lib/stdlib.in.h (aligned_alloc): New declaration. * lib/aligned_alloc.c: New file. * m4/aligned_alloc.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether aligned_alloc is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_ALIGNED_ALLOC, HAVE_ALIGNED_ALLOC, REPLACE_ALIGNED_ALLOC. * modules/stdlib (Makefile.am): Substitute GNULIB_ALIGNED_ALLOC, HAVE_ALIGNED_ALLOC, REPLACE_ALIGNED_ALLOC. * modules/aligned_alloc: New file. * tests/test-stdlib-c++.cc (aligned_alloc): Check signature. * doc/posix-functions/aligned_alloc.texi: Mention the new module and the AIX bug. 2020-11-03 Bruno Haible posix_memalign: Add tests. * tests/test-posix_memalign.c: New file. * modules/posix_memalign-tests: New file. posix_memalign: New module. * lib/stdlib.in.h (posix_memalign): New declaration. * lib/posix_memalign.c: New file. * m4/posix_memalign.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether posix_memalign is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_POSIX_MEMALIGN, HAVE_POSIX_MEMALIGN, REPLACE_POSIX_MEMALIGN. * modules/stdlib (Makefile.am): Substitute GNULIB_POSIX_MEMALIGN, HAVE_POSIX_MEMALIGN, REPLACE_POSIX_MEMALIGN. * modules/posix_memalign: New file. * tests/test-stdlib-c++.cc (posix_memalign): Check signature. * doc/posix-functions/posix_memalign.texi: Mention the new module and the OpenBSD bug. 2020-11-03 Bruno Haible memalign: Add tests. * tests/test-memalign.c: New file. * modules/memalign-tests: New file. memalign: New module. * modules/memalign: New file. * doc/glibc-functions/memalign.texi: Mention the new module. 2020-11-03 Bruno Haible verify tests: Fix crash with GCC (regression 2020-11-02). * tests/test-verify.c (main): Fix initializer of s. 2020-11-03 Pádraig Brady mountlist: recognize more file system types as remote * lib/mountlist.c (ME_REMOTE): Sync previously unconsidered "remote" file systems from stat.c in coreutils. 2020-11-02 Bernhard Voelker verify tests: Fix -Wuninitialized warning (regression 2020-10-30). * tests/test-verify.c (main): Initialize state variable. Reported by Bruno Haible for GCC 5.4.0. 2020-11-02 Paul Eggert dfa.h: support inclusion from C++ * lib/dfa.h: Allow multiple inclusion, and inclusion from C++ code. The latter was suggested by Arnold Robbins. 2020-11-01 Bruno Haible ssfmalloc tests: Portability to Linux/PowerPC and Linux/SPARC. * tests/test-ssfmalloc.c: Include . (PAGESIZE_MAX): Set to 65536 on Linux/PowerPC. 2020-11-01 Bruno Haible verify tests: Fix compilation error with MSVC (regression 2020-10-30). * tests/test-verify.c (test_assume_noreturn): Fix declaration. 2020-11-01 Jim Meyering dfa-tests: test for today's invalid-merge fix * tests/test-dfa-invalid-merge.sh: New file. * modules/dfa-tests (Files): Add it. (TESTS): Add it. 2020-11-01 Norihiro Tanaka dfa: retain sequences of similar nodes in optimization DFA was merging similar nodes when it should not. For example, it would convert a+a+a to a+a. Now, a sequence of similar nodes is not merged. Problem reported by Gonzalo Padrino in https://bugs.gnu.org/44351 * lib/dfa.c (merge_nfa_state): Skip the follow for repetition in optimization. 2020-11-01 Jim Meyering test-dfa-match-aux.c: accept EREs, not BREs * tests/test-dfa-match-aux.c (main): Specify RE_SYNTAX_EGREP, not RE_SYNTAX_GREP, so tests can use ERE syntax rather than BRE. 2020-10-30 Bernhard Voelker verify tests: avoid -Wmissing-declarations warnings * tests/test-verify.c (test_assume_expressions): Add declaration. (test_assume_optimization): Likewise. (test_assume_noreturn): Likewise. (main): Move down after all other definitions. While at it, also call test_assume_expressions and test_assume_optimization as a runtime check. 2020-10-26 Paul Eggert sys_stat: update comments for S_IRWXUGO, S_IXUGO * lib/sys_stat.in.h (S_IXUGO, S_IRWXUGO): Update comments. Perhaps these macros should be removed, as they’re not in either POSIX or GNU. They could be moved to stat-macros.h, which would be cleaner in some sense. 2020-10-25 Bruno Haible ssfmalloc tests: Small tweaks. * tests/test-ssfmalloc.c: Add comments. (alloc_pages): Don't require PROT_EXEC bits. (block_sizes): Add more small sizes, for better coverage of ssfmalloc-bitmap.h. ssfmalloc tests: Portability to Minix. * modules/ssfmalloc-tests (Files): Add m4/mmap-anon.m4. (configure.ac): Invoke gl_FUNC_MMAP_ANON. * m4/mmap-anon.m4: Update comment. ssfmalloc: Portability to AIX. * modules/ssfmalloc (Include): Add ssfmalloc.h. (Link): New section. * modules/ssfmalloc-tests (Makefile.am): Link test-ssfmalloc with $(LIBTHREAD). ssfmalloc: Portability to Cygwin. * lib/ssfmalloc.h: Add parameter PAGESIZE_MAX. (pg_offset_t): Define depending on PAGESIZE_MAX. * tests/test-ssfmalloc.c: Undefine PAGESIZE. (PAGESIZE_MAX): New macro. ssfmalloc: Fix buffer overrun in bitmap search. * lib/ssfmalloc-bitmap.h (find_first_packet_set): Don't access the word *words_end. 2020-10-24 Paul Eggert doc: mention ‘restrict’ and C++ * doc/gnulib-readme.texi (C99 features assumed): Document that ‘restrict’ should be avoided in C++ code. 2020-10-20 Bernhard Voelker selinux-at, selinux-h: port to SELinux 3.1 The new release finally deprecated the typedef 'security_context_t', see . Use the simpler 'char *' instead. * lib/getfilecon.c (getfilecon): Adjust type of context parameter. (lgetfilecon): Likewise. (fgetfilecon): Likewise. (map_to_failure): Likewise. (rpl_getfilecon): Likewise. (rpl_lgetfilecon): Likewise. (rpl_fgetfilecon): Likewise. * lib/se-selinux.in.h (security_context_t): Remove typedef. (getcon): Adjust type of context parameter. (freecon): Likewise. (getfscreatecon): Likewise. (setfscreatecon): Likewise. (matchpathcon): Likewise. (getfilecon): Likewise. (lgetfilecon): Likewise. (fgetfilecon): Likewise. (setfilecon): Likewise. (lsetfilecon): Likewise. (fsetfilecon): Likewise. (security_check_context): Likewise. (security_check_context_raw): Likewise. (setexeccon): Likewise. (security_compute_create): Likewise. * lib/selinux-at.c (getfileconat): Likewise. (lgetfileconat): Likewise. (setfileconat): Likewise. (lsetfileconat): Likewise. * lib/selinux-at.h: Likewise. 2020-10-19 Bruno Haible xalloc-die: Fix link error with Solaris cc (regression 2020-07-27). * lib/xalloc.h (xalloc_die): Don't declare if GNULIB_XALLOC_DIE is 0. (xmalloc, xzalloc, xcalloc, xrealloc, x2realloc, xmemdup, xstrdup, XMALLOC, XNMALLOC, XZALLOC, XCALLOC, xnmalloc, xnrealloc, x2nrealloc, xcharalloc): Don't declare/define if GNULIB_XALLOC is 0. * modules/xalloc (configure.ac): Define GNULIB_XALLOC. * modules/xalloc-die (configure.ac): Define GNULIB_XALLOC_DIE. 2020-10-18 Bruno Haible ssfmalloc: Add tests. * tests/test-ssfmalloc.c: New file. * modules/ssfmalloc-tests: New file. ssfmalloc: New module. * lib/ssfmalloc.h: New file. * lib/ssfmalloc-bitmap.h: New file. * modules/ssfmalloc: New file. 2020-10-18 Bruno Haible wchar: Fix configure test result on some versions of AIX. Reported by Clément Chigot in . * m4/wchar_h.m4 (gl_WCHAR_H_INLINE_OK): Execute the test only on glibc systems. 2020-10-18 Bruno Haible time: Fix warning about asctime when asctime is not used. * lib/time.in.h (asctime_r, ctime, ctime_r): Fix _GL_WARN_ON_USE invocation. 2020-10-18 Bruno Haible *-list, *-oset, *-omap: Avoid a GCC warning (regression 2020-10-10). * lib/gl_anylinked_list2.h (gl_linked_iterator_free): Remove '_GL_ATTRIBUTE_CONST'. * lib/gl_anytree_list2.h (gl_tree_iterator_free): Likewise. * lib/gl_anytree_omap.h (gl_tree_iterator_free): Likewise. * lib/gl_anytree_oset.h (gl_tree_iterator_free): Likewise. * lib/gl_array_list.c (gl_array_iterator_free): Likewise. * lib/gl_array_omap.c (gl_array_iterator_free): Likewise. * lib/gl_array_oset.c (gl_array_iterator_free): Likewise. * lib/gl_carray_list.c (gl_carray_iterator_free): Likewise. 2020-10-18 Bruno Haible obstack: Fix a clang warning. * lib/obstack.c (print_and_abort): Mark as __attribute_noreturn__. 2020-10-16 Bruno Haible hash: Rename hash_delete to hash_remove. * lib/hash.h (hash_remove): Renamed from hash_delete. (hash_delete): New declaration. * lib/hash.c (hash_remove): Renamed from hash_delete. (hash_delete): New function. * tests/test-hash.c (main): Update. * lib/fts-cycle.c (leave_dir): Likewise. * NEWS: Mention the change. 2020-10-16 Bruno Haible hash, xhash: Make usable from C++. * lib/hash.h: Add extern "C". 2020-10-16 Bruno Haible hash, xhash: Move comments to the .h file. * lib/hash.c: Move comments meant for the user from here... * lib/xhash.c: ... and here... * lib/hash.h: ... to here. 2020-10-13 Philipp Klaus Krause (tiny change) Don't declare an intention to modify the return value of strerror. * tests/test-perror2.c (main): Assign the return value of strerror to a 'const char *' variable. 2020-10-11 Bruno Haible *printf: Avoid "expanded before it was required" warning. * m4/printf.m4 (gl_SNPRINTF_TRUNCATION_C99): Define through AC_DEFUN_ONCE. 2020-10-11 Benji Wiebe getprogname: Add support for OpenServer 6 and UnixWare 7. * lib/getprogname.c: Include , , . (getprogname): On OpenServer6 and UnixWare, read /proc//cmdline. 2020-10-11 Bruno Haible tests: Avoid a name clash on UnixWare. Reported by Tim Rice in . * tests/nap.h (nap): Define as gl_nap on OpenServer and UnixWare. 2020-10-11 Bruno Haible stdioext: Update comments regarding UnixWare. Reported by Tim Rice in . * lib/fbufmode.c: Update comments. * lib/fflush.c: Likewise. * lib/fpending.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.h: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.h: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.h: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.h: Likewise. * lib/fwriting.c: Likewise. 2020-10-11 Bruno Haible stdioext: Treat OpenServer 6 and UnixWare 7 like OpenServer 5. Reported by Tim Rice in . Uses the info from . * lib/stdio-impl.h: Test also __SCO_VERSION__ and __sysv5__. 2020-10-11 Bruno Haible stdioext: Avoid compilation errors on UnixWare 7. Reported by Tim Rice in . * lib/fbufmode.c: Don't include if it does not exist. * lib/fpurge.c: Likewise. * lib/freadable.h: Likewise. * lib/freading.h: Likewise. * lib/fwritable.h: Likewise. * lib/fwriting.h: Likewise. * m4/fbufmode.m4 (gl_FUNC_FBUFMODE): Test whether exists. * m4/fpurge.m4 (gl_FUNC_FPURGE): Likewise. * m4/freadable.m4 (gl_FUNC_FREADABLE): Likewise. * m4/freading.m4 (gl_FUNC_FREADING): Likewise. * m4/fwritable.m4 (gl_FUNC_FWRITABLE): Likewise. * m4/fwriting.m4 (gl_FUNC_FWRITING): Likewise. 2020-10-11 Bruno Haible stdioext: Update comments regarding Cygwin. * lib/fpending.c: Update comments. * lib/fpurge.c: Likewise. * lib/freadable.h: Likewise. * lib/freadable.c: Likewise. * lib/freading.h: Likewise. * lib/freading.c: Likewise. * lib/fwritable.h: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.h: Likewise. * lib/fwriting.c: Likewise. 2020-10-11 KO Myung-Hun Fix "warning: implicit declaration of function 'pthread_sigmask'". * lib/signal.in.h [__KLIBC__]: Include . * lib/sys_select.in.h [__KLIBC__]: Do not include . 2020-10-10 Bruno Haible *-list, *-oset, *-omap: Avoid possible compiler warnings. Reported by Marc Nieper-Wißkirchen in . * lib/gl_anylinked_list2.h (gl_linked_iterator, gl_linked_iterator_from_to): Mark as 'pure'. (gl_linked_iterator_free): Mark as 'const'. * lib/gl_anytree_list2.h (gl_tree_size, gl_tree_node_value, gl_tree_search_from_to, gl_tree_indexof_from_to, gl_tree_iterator, gl_tree_iterator_from_to, gl_tree_sortedlist_search, gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof, gl_tree_sortedlist_indexof_from_to): Mark as 'pure'. (gl_tree_iterator_free): Mark as 'const'. * lib/gl_anytree_omap.h (gl_tree_size, gl_tree_iterator): Mark as 'pure'. (gl_tree_iterator_free): Mark as 'const'. * lib/gl_anytree_oset.h (gl_tree_size, gl_tree_next_node, gl_tree_prev_node, gl_tree_iterator): Mark as 'pure'. (gl_tree_iterator_free): Mark as 'const'. * lib/gl_anytreehash_list1.h (node_position, compare_by_position, compare_position_threshold): Mark as 'pure'. * lib/gl_array_list.c (gl_array_size, gl_array_indexof_from_to, gl_array_search_from_to, gl_array_iterator, gl_array_iterator_from_to, gl_array_sortedlist_indexof_from_to, gl_array_sortedlist_indexof, gl_array_sortedlist_search_from_to, gl_array_sortedlist_search): Mark as 'pure'. (gl_array_iterator_free): Mark as 'const'. * lib/gl_array_omap.c (gl_array_size, gl_array_indexof, gl_array_search, gl_array_search_atleast, gl_array_iterator): Mark as 'pure'. (gl_array_iterator_free): Mark as 'const'. * lib/gl_array_oset.c (gl_array_size, gl_array_indexof, gl_array_search, gl_array_indexof_atleast, gl_array_search_atleast, gl_array_iterator, gl_array_iterator_atleast): Mark as 'pure'. (gl_array_iterator_free): Mark as 'const'. * lib/gl_carray_list.c (gl_carray_size, gl_carray_node_value, gl_carray_next_node, gl_carray_previous_node, gl_carray_get_at, gl_carray_indexof_from_to, gl_carray_search_from_to, gl_carray_iterator, gl_carray_iterator_from_to, gl_carray_sortedlist_indexof_from_to, gl_carray_sortedlist_indexof, gl_carray_sortedlist_search_from_to, gl_carray_sortedlist_search): Mark as 'pure'. (gl_carray_iterator_free): Mark as 'const'. 2020-10-10 Bruno Haible rbtree-list: Avoid possible compiler warnings. This mirrors the change of avltree-list on 2014-09-16. * lib/gl_rbtree_list.c (gl_rbtree_list_check_invariants): Add extern declaration. Add cast to void for ignored value of check_invariants. 2020-10-10 Marc Nieper-Wißkirchen stack: New module. * MODULES.html.sh: Add entry for the stack module. * modules/stack: New file. * modules/stack-tests: New file. * lib/stack.h: New file. * tests/test-stack.c: New file. 2020-10-10 Paul Eggert attribute: improve const, pure doc Problem reported by Marc Nieper-Wißkirchen in: https://lists.gnu.org/r/bug-gnulib/2020-10/msg00035.html * lib/attribute.h (ATTRIBUTE_CONST, ATTRIBUTE_PURE): Improv doc. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51971#c1 2020-10-05 Paul Eggert thread: pacify GCC on Solaris 10 Problem reported by Kiyoshi KANAZAWA for grep (Bug#43666#29). * lib/glthread/thread.h (gl_thread_self): Use ‘(pthread_t) 0’ instead of ‘(pthread_t) NULL’, to pacify GCC on Solaris 10 where pthread_t is unsigned int. 2020-10-04 Paul Eggert c-stack: avoid AS_IF Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-10/msg00018.html * m4/c-stack.m4 (gl_PREREQ_C_STACK): No need for AS_IF. c-stack: pacify GCC 9.3.1 when using libsigsegv * lib/c-stack.c [USE_LIBSIGSEGV]: Disable --suggest-attribute=pure. 2020-10-04 Bruno Haible localename: Fix a couple of "unused parameter" warnings. Reported by Marc Nieper-Wißkirchen in . * lib/localename.c (gl_locale_name_thread_unsafe, gl_locale_name_thread, gl_locale_name_posix, gl_locale_name_environ): Add _GL_UNUSED in parameter list. 2020-10-04 Bruno Haible vasnprintf: Don't use %n on modern, ISO C 99 compliant platforms. Suggested by Jeremie Courreges-Anglas in . * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Define HAVE_SNPRINTF_TRUNCATION_C99. * lib/vasnprintf.c (VASNPRINTF): Don't use %n if HAVE_SNPRINTF_RETVAL_C99 && HAVE_SNPRINTF_TRUNCATION_C99. 2020-10-03 Paul Eggert c-stack: streamline Solaris configuration * lib/c-stack.c: Omit mention of HAVE_SIGALTSTACK, since the code is used only if a test for sigaltstack worked in some other way. * m4/c-stack.m4 (gl_PREREQ_C_STACK): Do not require gl_LIBSIGSEGV; instead, execute gl_LIBSIGSEGV only if needed (because the XSI heuristic does not work). * modules/c-stack (Files): Add m4/libsigsegv.m4, since we no longer require the libsigsegv module. (Depends-on): Depend on havelib, not libsigsegv. c-stack: stop using SIGSTKSZ It’s been proposed to stop making SIGSTKSZ an integer constant: https://sourceware.org/pipermail/libc-alpha/2020-September/118028.html Also, using SIGSTKSZ in #if did not conform to current POSIX. Also, avoiding SIGSTKSZ makes the code simpler and easier to grok. * lib/c-stack.c (SIGSTKSZ): Remove. (alternate_signal_stack): Now a 64 KiB array, for simplicity. All uses changed. c-stack: fix libsigsegv typo Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-09/msg00175.html * lib/c-stack.c (USE_LIBSIGSEGV): Fix typo that caused libsigsegv to be used only on Solaris (exactly where it is not needed!). 2020-10-03 Thien-Thi Nguyen MODULES.html.sh: Fix typo. * MODULES.html.sh (Numeric conversion functions ): Fix typo. 2020-09-28 Paul Eggert version-etc: pacify Oracle Studio 12.6 Without this patch, it complains: "version-etc.h", line 64: warning: token-less macro argument (E_TOKENLESS_MACRO)" when in pedantic mode. * lib/version-etc.h (version_etc): Port to C89 macro rules. 2020-09-27 Bruno Haible Avoid "warning: The macro `AC_DECL_SYS_SIGLIST' is obsolete". Reported by Gavin Smith in . * m4/strsignal.m4 (gl_PREREQ_STRSIGNAL): Check for sys_siglist ourselves; don't use AC_DECL_SYS_SIGLIST. 2020-09-27 Bruno Haible Avoid "warning: The macro `_AC_COMPUTE_INT' is obsolete". Reported by Gavin Smith in . * m4/gethostname.m4 (gl_PREREQ_HOST_NAME_MAX): Use AC_COMPUTE_INT instead of _AC_COMPUTE_INT. 2020-09-27 Bruno Haible Avoid "warning: The macro `AC_HEADER_STDC' is obsolete". Reported by Gavin Smith in . Based on a patch by Paul Eggert. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): Don't require AC_HEADER_STDC. Don't test STDC_HEADERS. Assume exists. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Likewise. 2020-09-27 Bruno Haible Enable testing of prereleases of Autoconf 2.70. Suggested by Paul Eggert in . * m4/alloca.m4 (_AC_LIBOBJ_ALLOCA): Test for Autoconf >= 2.69c, not >= 2.70. * m4/largefile.m4 (AC_SYS_LARGEFILE): Likewise. * m4/pid_t.m4 (AC_TYPE_PID_T): Likewise. * m4/sys_types_h.m4 (AC_HEADER_MAJOR): Likewise. 2020-09-27 Bruno Haible Avoid "warning: The macro `AC_PROG_CC_STDC' is obsolete". Reported by Gavin Smith in . * m4/gnulib-common.m4 (gl_PROG_CC_C99): Use AC_PROG_CC_C99 or AC_PROG_CC, depending on the Autoconf version. 2020-09-27 Gavin Smith Avoid "warning: The macro `AC_HELP_STRING' is obsolete". * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Use AS_HELP_STRING instead of AC_HELP_STRING. * m4/libgcrypt.m4 (AM_PATH_LIBGCRYPT): Likewise. 2020-09-27 Bruno Haible Avoid "warning: $as_echo_n is obsolete" from autoconf 2.69c. Reported by Gavin Smith in . * m4/gnulib-common.m4 (gl_CACHE_VAL_SILENT): Use gl_SILENT. 2020-09-27 Bruno Haible extensions: Simplify last commit. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Don't require AC_GNU_SOURCE ever. 2020-09-26 Paul Eggert extensions: require AC_GNU_SOURCE only for <=2.63 Problem reported by Gavin Smith in: https://lists.gnu.org/r/autoconf/2020-09/msg00012.html * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Require AC_GNU_SOURCE only for Autoconf 2.63 and earlier, since it shouldn’t be needed after that, and Autoconf 2.70 complains about it being obsolete. 2020-09-26 Bruno Haible regex-tests: Make test more robust. * tests/test-regex.c (main): Make sure to revert the locale to "C" after the test in "tr_TR.UTF-8" locale. Exit if we can't revert it. 2020-09-25 Paul Eggert regex-tests: fix possible Turkish false-alarm * modules/regex-tests (Depends-on): Add wctype-h. * tests/test-regex.c: Include wctype.h. (main): Check that ‘i’ uppercases to ‘İ’ in Turkish, as the Turkish regex test assumes this. regex-tests: fix test and add debug output Perhaps this will fix the recent grep test failure reported at: https://buildfarm.opencsw.org/buildbot/builders/ggrep-solaris10-sparc/builds/199 At least, the debug output should help narrow down the failure. * tests/test-regex.c: Include stdarg.h, stdio.h. (exit_status): New var. (report_error): New function. (main): Use it to report failures to stdout instead of merely exiting with some nonzero status. The status info alone isn’t enough to do remote debugging. In the new tr_TR.UTF-8 test, clear regex before calling re_compile_pattern, fixing a portability bug. regex: no longer match glibc * config/srclist.txt: Comment out regex_internal.c for now. 2020-09-23 Paul Eggert regex: fix ignore-case Turkish bug * lib/regex_internal.c (build_wcs_upper_buffer): Do not assume that converting single-byte character to upper yields a single-byte character. This is not true for Turkish, where towupper (L'i') yields L'İ', which is not single-byte. * tests/test-regex.c (main): Test for this bug. regex: port to weird isascii platforms * lib/regex_internal.h (isascii) [!_LIBC]: Supply glibc version. 2020-09-20 Norihiro Tanaka dfa: make dfasupported a global function * lib/dfa.c (dfasupported): Rename, and make it global. Update caller. * lib/dfa.h (dfasupported): Add prototype. 2020-09-20 Bruno Haible canonicalize: Add support for UNC file names on native Windows. Reported and initial patch by Vaclav Slavik in . * lib/canonicalize.c (canonicalize_filename_mode): For UNC file names, extend the prefix to include the server. 2020-09-20 Bruno Haible supersede: Fix test failures on native Windows. * lib/supersede.c (open_supersede): Handle non-regular files on native Windows like on Solaris. * tests/test-supersede-open.h (test_open_supersede): Use O_BINARY flag. 2020-09-20 Paul Eggert test-stdalign: test Oracle Studio better * doc/posix-headers/stdalign.texi (stdalign.h): * tests/test-stdalign.c (main): Sun Studio Bug #2125432 seems to be fixed. c-stack: output diagnostic in single 'write' * lib/c-stack.c (die): In the typical case, use just one 'write' syscall to output the diagnostic, as this lessens interleaving. (die, c_stack_action): Assume C99. * modules/c-stack (Depends-on): Add c99, mempcpy. c-stack: improve checking if !libsigsegv If SIGINFO_WORKS, do not treat a null pointer dereference as if it were a stack overflow. Use uintptr_t and INT_ADD_WRAPV to avoid unlikely pointer overflow. Also, fix some obsolete code and typos. I found these problems while looking into this bug report: https://lists.gnu.org/r/grep-devel/2020-09/msg00053.html * lib/c-stack.c: Include c-stack.h first, to test interface. Include inttypes.h for UINTPTR_MAX, stdbool.h, stddef.h for max_align_t, intprops.h for INT_ADD_WRAPV. (USE_LIBSIGSEGV): New macro; use it to simplify later code. (SIGSTKSZ): Simplify setup. Work around libsigsegv bug only for libsigsegv 2.8 and earlier since the bug should be fixed after that. (alternate_signal_stack): Use max_align_t instead of doing it by hand. (segv_handler, overflow_handler, segv_handler) [DEBUG]: Assume sprintf returns byte count; this assumption is safe now. (page_size): New static volatile variable, since sysconf isn’t documented to be async-signal-safe on Solaris. This variable is present and used if (!USE_LIBSIGSEGV && HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK && HAVE_STACK_OVERFLOW_HANDLING && SIGINFO_WORKS). (segv_handler): Use it if present. Never report null pointer dereference as a stack overflow. Check for (unlikely) unsigned and/or pointer overflow. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Rename cache variables to gl_cv_sys_stack_overflow_works and gl_cv_sys_xsi_stack_overflow_heuristic. All uses changed. (gl_PREREQ_C_STACK): Do not require AC_FUNC_ALLOCA, since c-stack no longer uses STACK_DIRECTION. Do not check for unistd.h, since we depend on unistd. Fix shell typo ‘$"ac_cv_sys_xsi_stack_overflow_heuristic"’. * modules/c-stack (Depends-on): Sort. Add intprops, inttypes, stdbool, stddef. 2020-09-20 Bruno Haible Revert now-unnecessary override of config.guess on Alpine Linux 3.10. * m4/musl.m4: Revert 2020-09-19 patch. * m4/setlocale_null.m4: Likewise. * modules/setlocale-null: Likewise. 2020-09-19 Ben Pfaff Bruno Haible relocatable-prog: Fix for multiple relocatable library directories. * build-aux/reloc-ldflags: Fix handling of multiple relocatable library directories. Each one needs its own -Wl,-rpath,$dir option, instead of being attached to a single one. 2020-09-19 Jim Meyering test-verify.c: avoid -Wshadow warnings * tests/test-verify.c (gx): Rename global from "x". Adjust use. (enum): Capitalize member names. Adjust uses. 2020-09-19 Bruno Haible havelib: Avoid linking with libc.a on GNU systems. Reported by Bruce Dubbs in . * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): When processing the dependency_libs value of a .la file, ignore '-lc' options on GNU systems. 2020-09-19 Bruno Haible Fix recognition of musl libc on Alpine Linux 3.10. Reported by Jeffrey Walton in . * m4/musl.m4 (gl_MUSL_CANONICAL_HOST): New macro. (gl_MUSL_LIBC): Require it. * m4/setlocale_null.m4 (gl_FUNC_SETLOCALE_NULL): Likewise. * modules/setlocale-null (Files): Add m4/musl.m4. 2020-09-19 Bruno Haible nl_langinfo: Make multithread-safe on Solaris 10 and Solaris 11.3. Reported for Solaris 10 by Dagobert Michelsen via Paul Eggert in and for Solaris 11.3 by Jeffrey Walton in . * lib/nl_langinfo-lock.c: New file, based on lib/setlocale_null-lock.c. * lib/nl_langinfo.c: Include and or or . (ITEMS, MAX_RESULT_LEN): New macros. (nl_langinfo_unlocked): New function. (gl_get_nl_langinfo_lock): New declaration. (nl_langinfo_with_lock): New function, based on lib/setlocale_null.c. (rpl_nl_langinfo): Use nl_langinfo_with_lock instead of nl_langinfo. * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Require gl_PTHREADLIB. Define HAVE_THREADS_H. Set NL_LANGINFO_MTSAFE. If setting it to 0, also set REPLACE_NL_LANGINFO. (gl_PREREQ_NL_LANGINFO_LOCK): New macro. * modules/nl_langinfo (Files): Add lib/nl_langinfo-lock.c, lib/windows-initguard.h, m4/threadlib.m4, m4/visibility.m4. (configure.ac): Compile nl_langinfo-lock.c when NL_LANGINFO_MTSAFE is 0. * doc/posix-functions/nl_langinfo.texi: Mention the Solaris bug. 2020-09-18 Bruno Haible fsusage, getaddrinfo: Produce more regular configure output. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Remove AC_MSG_CHECKING without corresponding AC_MSG_RESULT. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Likewise. 2020-09-18 Bruno Haible Add back gl_SILENT. * m4/gnulib-common.m4 (GL_TMP_FD, gl_SILENT): New macros. 2020-09-18 Paul Eggert c-stack-tests: fix -fsanitize=undefined false alarm * tests/test-c-stack2.sh: Skip the test-harness self-test if ‘gcc -fsanitize=undefined’ is in use. 2020-09-17 Paul Eggert signalblocking: simplify and remove gl_SILENT gl_SILENT was problematic because if a trap was sprung, stderr generated during the trap was lost. Avoid the problem by removing the need for gl_SILENT. * m4/gnulib-common.m4 (GL_TMP_FD, gl_SILENT): Remove. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Simplify, avoiding the need for gl_SILENT while preserving the ability of the user to override the value of the cache variable, now ac_cv_func_sigprocmask. 2020-09-17 Bruno Haible sigprocmask: Fix configuration failure on Solaris 10 (regr. 2020-07-25). * m4/gnulib-common.m4 (GL_TMP_FD): New macro. (gl_SILENT): Use 'exec', not a compound statement, to redirect AS_MESSAGE_FD. 2020-09-17 Paul Eggert intprops, xalloc: avoid __builtin_mul_overflow_p with Clang Problem reported by Nelson H. F. Beebe for clang 9.0.1 in: https://lists.gnu.org/r/grep-devel/2020-09/msg00028.html * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW_P) [__clang__]: Define to 0. * lib/xalloc-oversized.h (xalloc_oversized) [__clang__]: Do not use __builtin_mul_overflow_p. libc-config: port __THROW to Ubuntu 4 * lib/cdefs.h (__THROW): Do not use __attribute__ ((__nothrow__)) for GCC 3.3. Problem reported by Jeffrey Walton in: https://lists.gnu.org/r/bug-gnulib/2019-07/msg00058.html The GCC 3.3.4 documentation says the attribute should work, but apparently it does not work on Ubuntu 4’s GCC 3.3. There seems little point or desire to research this circa-2004 platform further, so just avoid the attribute there. 2020-09-17 Jim Meyering test-dfa-match.sh: port timeout work-around to newer Busybox * tests/test-dfa-match.sh: Update timeout -t portability test to accommodate Busybox 1.30.0 and newer. 2020-09-16 Paul Eggert fnmatch: adjust to match glibc fix This fixes handling of collating symbols in fnmatch (glibc bug 26620). This does not affect Gnulib; it merely keeps Gnulib and glibc closer together, to help with any eventual merge, by incorporating a recent glibc patch. The patch and the following commentary is by Andreas Schwab. * lib/fnmatch_loop.c (FCT) [WIDE_CHAR_VERSION]: The variable idx contains the index into the extra array, whereas wextra points into the extra array at this index, containing the length of the following collating sequence in the wide character representation. 2020-09-16 Bruno Haible stat, fstat: Fix compilation error with old mingw headers. Reported by Eli Zaretskii in . * lib/stat-w32.c (VOLUME_NAME_NONE): Define if the Windows headers don't define it. 2020-09-16 Bruno Haible stat, fstat: Fix when compiling for versions older than Windows Vista. Reported by Eli Zaretskii in . * lib/stat-w32.c: Include . Test the value of _WIN32_WINNT that was originally set before we redefined it. * m4/stat.m4 (gl_PREREQ_STAT_W32): New macro. (gl_PREREQ_STAT): Require it. * m4/fstat.m4 (gl_PREREQ_FSTAT): Likewise. 2020-09-15 Paul Eggert dfa: remove dfa-heap-overrun workaround * lib/dfa.c (reorder_tokens): Go back to a single pass that both sets map[*] and does other things. This reverts 2020-09-14T01:20:01Z!eggert@cs.ucla.edu, which is no longer neeeded now that 2020-09-14T13:21:05Z!noritnk@kcn.ne.jp fixed the underlying problem. 2020-09-13 Paul Eggert dfa: avoid use of uninitialized constraint * lib/dfa.c (merge_nfa_state): Do not initialize the constraint to zero here. (dfaoptimize): Do it here instead, via xcalloc. This prevents the use of an uninitialized constraint by later code when ! (flags[i] & OPT_QUEUED) means merge_nfa_state was not called to initialize the constraint. Problem found by running 'valgrind src/grep -E '(^| )*(a|b)*(c|d)*( |$)' < /dev/null' on Ubuntu 18.04.5 x86-64. dfa: assume C99 in reorder_tokens * lib/dfa.c (reorder_tokens): Assume C99 and simplify. dfa: fix dfa-heap-overrun failure * lib/dfa.c (reorder_tokens): When setting map[d->follows[i].elems[j].index], instead of incorrectly assuming that (i < d->follows[i].elems[j].index), use two loops, one to set the map array and the other to use it. The incorrect assumption caused some elements to be missed, and this in turn caused grep's dfa-heap-overrun test to fail on Solaris 10 sparc when compiled with GCC. I found this bug while investigating https://buildfarm.opencsw.org/buildbot/builders/ggrep-solaris10-sparc/builds/183 and I think the bug also occurs on GNU/Linux but with more-subtle symptoms. The bug predates the recent dfa.c changes; perhaps the recent changes make the bug more likely. 2020-09-13 Bruno Haible parse-datetime: Make the build rule work with parallel 'make'. Reported by Daiki Ueno in . * modules/parse-datetime (Makefile.am): Use a phony target and the general idiom for rules that produce multiple files. 2020-09-13 Ben Pfaff getpass: Check for nonnull prompt argument while avoiding warnings. * lib/getpass.c (_GL_ARG_NONNULL): Define to empty. (getpass) [!_WIN32]: Print prompt only if nonnull. 2020-09-12 Paul Eggert dfa: epsilon-closure tweaks (Bug#40634) Rename BACKWORD to BACKWARD consistently. * lib/dfa.c (struct dfa): Reorder members to reduce fragmentation. (addtok_mb): Redo slightly to make it act more like a state machine. Check depth only when it increases. (epsclosure): Let the switch test the tokens. (dfaanalyze): Cache tindex. Simplify position loops. Prefer xcalloc to xnmalloc + explicit zeroing. Free BACKWARD only if it is not null, since we're testing that anyway. (dfaanalyze, build_state): Use merge2 instead of doing it by hand. 2020-09-12 Norihiro Tanaka dfa: use backward set in removal of epsilon closure When removing in epsilon closure, the code searched all nodes sequentially, and this was slow for some cases. Build a backward set before search, and only check previous position with the set. Problem reported in . * lib/dfa.c (struct dfa): New member 'epsilon'. (addtok_mb): Check whether a pattern has epsilon node or not. (epsclosure): New arg BACKWORD; caller changed. When removing epsilon node and reconnecting, check only previous positions. Treat BEG as if it were character. (dfaanalyze): Build backward set. 2020-09-10 Paul Eggert canonicalize: fix pointer indexing bugs Problem reported by Florian Weimer in: https://lists.gnu.org/r/bug-gnulib/2020-09/msg00025.html * lib/canonicalize-lgpl.c (__realpath): * lib/canonicalize.c (canonicalize_filename_mode): Do not generate a pointer past the end of the array. * lib/canonicalize.c (canonicalize_filename_mode): Do not use a pointer after passing it to realloc. 2020-09-09 Paul Eggert tempname: help merge with glibc Inspired by draft patches by Adhemerval Zanella in: https://sourceware.org/pipermail/libc-alpha/2020-September/117501.html https://sourceware.org/pipermail/libc-alpha/2020-September/117502.html * lib/tempname.c: Include stdalign.h, time.h. If _LIBC, do not include random-bits.h. (__getrandom, __clock_gettime64, __timespec64) [!_LIBC]: New macros. (RANDOM_BITS): Remove, replacing with ... (random_bits): ... this new static function. All uses changed. Add entropy each time if getrandom is not supported. (RANDOM_VALUE, BASE_62_DIGITS, BASE_62_POWER): Assume 64-bit support a la C99. (try_tempname_len): Take advantage of ASLR when initializing random value. * modules/tempname (Depends-on): Add clock-time, stdalign, time. getcwd: merge recent glibc changes * lib/getcwd.c (GETCWD_RETURN_TYPE) [!_LIBC]: New macro. (__getcwd, getcwd) [_LIBC && !GETCWD_RETURN_TYPE]: Add aliases. 2020-09-06 Bruno Haible attribute: Clarify which file to include. * modules/attribute (Include): Add "attribute.h". 2020-09-06 Bruno Haible pipe-filter-ii, pipe-filter-gi: Fix warnings on native Windows. * lib/pipe-filter-ii.c: Include . * lib/pipe-filter-gi.c: Likewise. 2020-09-05 Paul Eggert verify: avoid __builtin_assume Our latest attempt to use Clang’s __builtin_assume caused a crash in GNU Emacs that we spent quite some time tracking down as being caused by the switch to __builtin_assume. It’s not known whether the crash is due is a Clang bug or a portability bug in GNU Emacs. For now, play it safe and avoid __builtin_assume. * lib/verify.h (_GL_HAS_BUILTIN_ASSUME): Remove. (assume): Simplify by not trying to use Clang’s __builtin_assume. 2020-09-05 Bruno Haible Fix several "warning: no previous prototype for function". * modules/unicase/locale-language (Makefile.am): Add a 'static' keyword in front of the declaration of the lookup function in unicase/locale-languages.h. * modules/unictype/bidiclass-byname (Makefile.am): Likewise in unictype/bidi_byname.h. * modules/unictype/category-byname (Makefile.am): Likewise in unictype/categ_byname.h. * modules/unictype/combining-class-byname (Makefile.am): Likewise in unictype/combiningclass_byname.h. * modules/unictype/joininggroup-byname (Makefile.am): Likewise in unictype/joininggroup_byname.h. * modules/unictype/joiningtype-byname (Makefile.am): Likewise in unictype/joiningtype_byname.h. * modules/unictype/property-byname (Makefile.am): Likewise in unictype/pr_byname.h. * modules/unictype/scripts (Makefile.am): Likewise in unictype/scripts_byname.h. * modules/uninorm/composition (Makefile.am): Likewise in uninorm/composition-table.h. 2020-09-05 Bruno Haible select: Fix "warning: no previous prototype for function". * lib/select.c: Include . 2020-09-05 Bruno Haible Use module 'c99' when needed for variadic macros with '...' syntax. * modules/crypto/sm3 (Depends-on): Add c99. 2020-09-05 Bruno Haible Use module 'c99' when needed for subobject initializer syntax. * modules/tempname (Depends-on): Add c99. * modules/nstrftime-tests (Depends-on): Likewise. 2020-09-05 Bruno Haible Use module 'c99' when needed for declaration-after-statement syntax. * modules/backup-rename (Depends-on): Add c99. * modules/backupfile (Depends-on): Likewise. * modules/bitset-tests (Depends-on): Likewise. * modules/bitsetv (Depends-on): Likewise. * modules/c-strtod (Depends-on): Likewise. * modules/c-strtold (Depends-on): Likewise. * modules/clean-temp (Depends-on): Likewise. * modules/copy-file (Depends-on): Likewise. * modules/crypto/hmac-md5-tests (Depends-on): Likewise. * modules/crypto/hmac-sha1-tests (Depends-on): Likewise. * modules/crypto/hmac-sha256-tests (Depends-on): Likewise. * modules/crypto/hmac-sha512-tests (Depends-on): Likewise. * modules/crypto/md5-buffer (Depends-on): Likewise. * modules/crypto/md5-tests (Depends-on): Likewise. * modules/crypto/sha1-buffer (Depends-on): Likewise. * modules/crypto/sha1-tests (Depends-on): Likewise. * modules/crypto/sha256-buffer (Depends-on): Likewise. * modules/crypto/sha256-tests (Depends-on): Likewise. * modules/crypto/sha512-buffer (Depends-on): Likewise. * modules/crypto/sha512-tests (Depends-on): Likewise. * modules/diffseq (Depends-on): Likewise. * modules/fatal-signal (Depends-on): Likewise. * modules/fchmodat (Depends-on): Likewise. * modules/fstrcmp (Depends-on): Likewise. * modules/fsusage (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/fts-tests (Depends-on): Likewise. * modules/getumask (Depends-on): Likewise. * modules/git-merge-changelog (Depends-on): Likewise. * modules/hash-map (Depends-on): Likewise. * modules/hash-set (Depends-on): Likewise. * modules/lchmod (Depends-on): Likewise. * modules/libgmp-tests (Depends-on): Likewise. * modules/libtextstyle-optional-tests (Depends-on): Likewise. * modules/linkedhash-map (Depends-on): Likewise. * modules/linkedhash-set (Depends-on): Likewise. * modules/long-options (Depends-on): Likewise. * modules/mbrtoc32 (Depends-on): Likewise. * modules/memchr2-tests (Depends-on): Likewise. * modules/memmem-tests (Depends-on): Likewise. * modules/memrchr-tests (Depends-on): Likewise. * modules/mktime-internal (Depends-on): Likewise. * modules/nstrftime (Depends-on): Likewise. * modules/opendirat (Depends-on): Likewise. * modules/parse-datetime (Depends-on): Likewise. * modules/quotearg-simple-tests (Depends-on): Likewise. * modules/same (Depends-on): Likewise. * modules/supersede (Depends-on): Likewise. * modules/supersede-tests (Depends-on): Likewise. * modules/time_rz (Depends-on): Likewise. * modules/unistr/u16-chr-tests (Depends-on): Likewise. * modules/unistr/u32-chr-tests (Depends-on): Likewise. * modules/unistr/u8-chr-tests (Depends-on): Likewise. * modules/xalloc (Depends-on): Likewise. * modules/xnanosleep (Depends-on): Likewise. 2020-09-05 Bruno Haible Fix "warning: array initialized from parenthesized string constant". * tests/test-memmem.c (main): Remove parentheses around string constant. * tests/test-c-strcasestr.c (main): Likewise. * tests/test-strcasestr.c (main): Likewise. 2020-09-05 Bruno Haible argmatch tests: Fix ISO C compliance warning. * tests/test-argmatch.c: Omit semicolon after ARGMATCH_DEFINE_GROUP invocation. 2020-09-05 Bruno Haible uniname/uniname: Fix -Wshadow warning. * lib/uniname/uniname.c (unicode_name_word): Don't declare i upfront. * modules/uniname/uniname (Depends-on): Add c99. 2020-09-05 Bruno Haible uniname/uniname: Fix -Wshorten-64-to-32 warnings. * lib/uniname/uniname.c (unicode_name_word_lookup): Change type of last argument to size_t. (unicode_name_character): Change type of len, n1, n2, n3, words_length, n to size_t. 2020-09-05 Bruno Haible unistr/u{8,16,32}-uctomb: Avoid possible trouble with huge strings. * lib/unistr.in.h (u8_uctomb_aux, u8_uctomb, u16_uctomb_aux, u16_uctomb, u32_uctomb): Change type of last argument to ptrdiff_t. * lib/unistr/u8-uctomb.c (u8_uctomb): Likewise. * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Likewise. * lib/unistr/u16-uctomb.c (u16_uctomb): Likewise. * lib/unistr/u16-uctomb-aux.c (u16_uctomb_aux): Likewise. * lib/unistr/u32-uctomb.c (u32_uctomb): Likewise. 2020-09-01 Paul Eggert manywarnings: remove -Wchkp and -Wabi from C++ too Suggested by Reuben Thomas in: https://lists.gnu.org/r/bug-gnulib/2020-09/msg00001.html At some point somebody should merge the many other manywarnings-c.m4 changes into manywarnings-c++.m4 too, e.g., 2020-07-02T00:00:51Z!eggert@cs.ucla.edu. * m4/manywarnings-c++.m4 (gl_MANYWARN_ALL_GCC_CXX_IMPL): Remove -Wchkp, -Wabi. 2020-08-30 Bruno Haible strerrorname_np: Add tests. * tests/test-strerrorname_np.c: New file. * modules/strerrorname_np-tests: New file. strerrorname_np: New module. * lib/string.in.h (strerrorname_np): New declaration. * lib/strerrorname_np.c: New file. * m4/strerrorname_np.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Test whether strerrorname_np is declared. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRERRORNAME_NP, HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. * modules/string (Makefile.am): Substitute GNULIB_STRERRORNAME_NP, HAVE_STRERRORNAME_NP, REPLACE_STRERRORNAME_NP. * modules/strerrorname_np: New file. * tests/test-string-c++.cc: Verify the signature of strerrorname_np. * doc/glibc-functions/strerrorname_np.texi: Mention the new module and the glibc 2.32 bug. 2020-08-27 Paul Eggert perror, strerror_r: remove unportable tests Problem reported by Florian Weimer in: https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html * tests/test-perror2.c (main): * tests/test-strerror_r.c (main): Omit unportable tests. 2020-08-26 Bruno Haible stdint, wchar, wctype-h: Change configure message. * m4/wint_t.m4 (gt_TYPE_WINT_T): Say "checking whether wint_t is large enough..." instead of "checking whether wint_t is too small...". 2020-08-26 Bruno Haible time_rz: Change configure message. * m4/time_rz.m4 (gl_TIME_RZ): Say "checking whether localtime works even near extrema..." instead of "checking whether localtime loops forever near extrema...". 2020-08-26 Bruno Haible stdint: Change configure message. * m4/stdint.m4 (gl_STDINT_H): Say "checking whether stdint.h works without ISO C predefines..." instead of "checking whether stdint.h predates C++11...". 2020-08-26 Bruno Haible socketlib: Change configure message. * m4/socketlib.m4 (gl_SOCKETLIB): Say "checking for WSAStartup..." instead of "checking if we need to call WSAStartup in winsock2.h and -lws2_32...". 2020-08-26 Bruno Haible include_next: Change configure message. * m4/include_next.m4 (gl_INCLUDE_NEXT): Say "checking whether source code line length is unlimited..." instead of "checking whether system header files limit the line length...". 2020-08-26 Bruno Haible getcwd: Change configure message. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Say "checking whether getcwd succeeds when 4k < cwd_length < 16k..." instead of "checking whether getcwd aborts when 4k < cwd_length < 16k...". 2020-08-26 Bruno Haible chdir-long: Change configure message. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Say "checking whether this system supports file names of any length..." instead of "checking whether this system has an arbitrary file name length limit...". Set gl_cv_have_unlimited_file_name_length instead of gl_cv_have_arbitrary_file_name_length_limit. * modules/chdir-long (Depends-on, configure.ac): Update accordingly. 2020-08-26 Bruno Haible ceill: Change configure message. * m4/ceill.m4 (gl_FUNC_CEILL): Say "checking whether ceill() works..." instead of "checking whether ceill() breaks with small values...". 2020-08-26 Bruno Haible iconv: Change configure message. * m4/iconv.m4 (AM_ICONV): Say "checking whether iconv is compatible with its POSIX signature..." instead of "checking for iconv declaration...". Remove K&R C support. 2020-08-26 Paul Eggert getcwd: help the merge back into glibc This patch was inspired by Adhemerval Zanella’s proposed glibc patches: https://sourceware.org/pipermail/libc-alpha/2020-August/117294.html The idea is to make it easier for Gnulib lib/getcwd.c to match glibc io/getcwd-generic.c. * lib/getcwd.c [_LIBC]: Do not include pathmax.h. Include not-cancel.h. (HAVE_OPENAT, D_INO_IN_DIRENT, HAVE_MSVC_INVALID_PARAMETER_HANDLER) (HAVE_MINIMALLY_WORKING_GETCWD): Define for the _LIBC case. (__getcwd, __lstat, __readdir) [!_LIBC]: Remove these macros. (__close_nocancel_nostatus, __getcwd_generic, stat64, __fstat64) (__fstatat64, __lstat64, __readdir64, __fdopendir, __openat) (__rewinddir, __openat64, dirent64) [_LIBC]: New macros. (__getcwd_generic): Rename from __getcwd. Use the abovementioned macros for consistency with glibc. (weak_alias): Remove. 2020-08-25 Bruno Haible verify: Avoid warnings when assume(0) is used. Reported by Mattias Engdegård via Paul Eggert in . * lib/verify.h (assume): Use __builtin_unreachable if the argument is the constant 0. * tests/test-verify.c (f): New function. (state): New type. (test_assume_expressions, test_assume_optimization, test_assume_noreturn): New functions. 2020-08-25 Bruno Haible fstrcmp: Clarification regarding NOTE_ORDERED. * lib/fstrcmp.c (NOTE_ORDERED): Define to false. 2020-08-24 Paul Eggert diffseq: new option NOTE_ORDERED Problem reported by Phil Sainty . * NEWS: Mention this. * lib/diffseq.h (NOTE_ORDERED): New macro. (IF_LINT2): Remove; no longer needed. (compareseq): If (!NOTE_ORDERED), recurse on the smaller subproblem and iterate to do the larger. 2020-08-23 Paul Eggert sys_types: let Autoconf 2.70 do pid_t * m4/pid_t.m4 (AC_TYPE_PID_T): Redefine this Autoconf macro only for Autoconf versions 2.69 and earlier, since 2.70 will be fixed. 2020-08-23 Bruno Haible tests: Don't assume that pid_t fits in an 'int'. * tests/test-nonblocking-pipe-main.c (main): Use type 'pid_t' instead of 'int'. * tests/test-nonblocking-socket-main.c (main): Likewise. sys_types: Fix definition of pid_t on 64-bit MSVC. * m4/pid_t.m4: New file. * modules/sys_types (Files): Add it. * modules/dirent (Files): Likewise. * modules/fcntl-h (Files): Likewise. * modules/sched (Files): Likewise. * modules/signal-h (Files): Likewise. * modules/spawn (Files): Likewise. * modules/sys_stat (Files): Likewise. * modules/sys_wait (Files): Likewise. * modules/termios (Files): Likewise. * modules/unistd (Files): Likewise. 2020-08-23 Bruno Haible inttypes: Fix {PRI,SCN}*PTR on 32-bit native Windows (regr. 2020-07-21). * m4/inttypes.m4 (gl_INTTYPES_PRI_SCN): Fix syntax error in test program. 2020-08-23 Paul Eggert intprops: be consistent about +X vs X+0 * lib/intprops.h (_GL_SIGNED_INT_MAXIMUM): Simplify. intprops: fix INT_MULTIPLY_WRAPV bit-field bug The bug occurs when using INT_MULTIPLY_WRAPV (a, b, c) where B is a bit-field, on older GCC or non-GCC compilers where we do things ourselves instead of using __builtin_mul_overflow. Without this fix, INT_MULTIPLY_WRAPV would not compile, due to applying sizeof to a bit-field. * lib/intprops.h (_GL_INT_MULTIPLY_RANGE_OVERFLOW): Promote B before giving it to TYPE_WIDTH, in case B is a bit-field. 2020-08-23 Bruno Haible supersede: Avoid a failure when writing to /dev/null in Solaris zones. Reported by Jörg Sonnenberger via Thomas Klausner in . * lib/supersede.c (open_supersede): When opening an existing non-regular file on Solaris, use O_CREAT although it should not be necessary. 2020-08-23 Bruno Haible verify: Make assume work on bit field expressions (regr. 2020-08-22). Reported by Benno Schulenberg in . * lib/verify.h (assume): Use '_Bool' or 'bool' as type of the temporary variable. 2020-08-23 Bruno Haible libc-config: Improve comments. * lib/cdefs.h (__warndecl, __warnattr, __errordecl): Explain why we cannot use clang's __diagnose_if__ here. 2020-08-22 Bruno Haible verify: Do use __builtin_assume on clang. * lib/verify.h (assume): Use clang’s __builtin_assume, with a temporary variable in a statement expression. 2020-08-22 Bruno Haible sig2str: Add more signals. * lib/sig2str.c (numname_table): Add SIGCPUFAIL, SIGTHR, SIGBREAK. 2020-08-22 Bruno Haible doc: Update for OpenBSD 6.0, 6.7. * doc/*/*.texi: Update. * m4/printf.m4: Update comments and cross-compilation guesses. * m4/ceill.m4: Update comments. * m4/getcwd-abort-bug.m4: Likewise. * m4/ilogb.m4: Likewise. * m4/ilogbf.m4: Likewise. * m4/langinfo_h.m4: Likewise. * m4/modf.m4: Likewise. * m4/modff.m4: Likewise. 2020-08-22 Bruno Haible doc: Mention sig2str module. * doc/glibc-functions/sigabbrev_np.texi: Mention the sig2str module. 2020-08-21 Bruno Haible sigdescr_np: Add tests. * tests/test-sigdescr_np.c: New file. * modules/sigdescr_np-tests: New file. sigdescr_np: New module. * lib/string.in.h (sigdescr_np): New declaration. * lib/sigdescr_np.c: New file. * m4/sigdescr_np.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Test whether sigdescr_np is declared. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_SIGDESCR_NP, HAVE_SIGDESCR_NP. * modules/string (Makefile.am): Substitute GNULIB_SIGDESCR_NP, HAVE_SIGDESCR_NP. * modules/sigdescr_np: New file. * tests/test-string-c++.cc: Verify the signature of sigdescr_np. * doc/glibc-functions/sigdescr_np.texi: Mention the new module. 2020-08-20 Bruno Haible sigabbrev_np: Add tests. * tests/test-sigabbrev_np.c: New file. * modules/sigabbrev_np-tests: New file. sigabbrev_np: New module. * lib/string.in.h (sigabbrev_np): New declaration. * lib/sigabbrev_np.c: New file. * m4/sigabbrev_np.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Test whether sigabbrev_np is declared. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_SIGABBREV_NP, HAVE_SIGABBREV_NP. * modules/string (Makefile.am): Substitute GNULIB_SIGABBREV_NP, HAVE_SIGABBREV_NP. * modules/sigabbrev_np: New file. * tests/test-string-c++.cc: Verify the signature of sigabbrev_np. * doc/glibc-functions/sigabbrev_np.texi: Mention the new module. 2020-08-20 Bruno Haible stdalign tests: Skip test with AIX xlclang. * tests/test-stdalign.c (main): Skip alignas tests with AIX xlclang. 2020-08-20 Bruno Haible stdalign: Fix test failures on 32-bit platforms with clang versions < 8. * lib/stdalign.in.h (_Alignof): For clang versions < 8, use the same workaround as for GCC versions < 4.9. 2020-08-20 Siddhesh Poyarekar Sync up ProjectQuirks comments and documentation Transform the ProjectQuirks comments into a docstring so that it can be accessed from python as ProjectQuirks.__doc__ and harmonize descriptions with the documentation. * build-aux/vcstocl/projectquirks.py (ProjectQuirks): Transform comments into a docstring. * doc/vcs-to-changelog.texi: Sync up description with comments. Split ProjectQuirks out into its own file ProjectQuirks is used by external quirks files and importing it from vcs-to-changelog.py is broken since it was renamed to use hyphens. It is cleaner to put it in its own file anyway. * build-aux/vcstocl/projectquirks.py: A new file... * build-aux/vcs-to-changelog.py (ProjectQuirks): ...to which we move ProjectQuirks and import the file. 2020-08-19 Bruno Haible uchar: Fix compilation errors in C++ mode on macOS. * m4/uchar.m4 (gl_UCHAR_H): Require gl_ANSI_CXX if present. Include some system header file before attempting to use 'char16_t' and 'char32_t'. 2020-08-19 Bruno Haible ansi-c++-opt: Work around an autoconf macro reordering problem. * modules/ansi-c++-opt: Require gl_ANSI_CXX already in the early section. 2020-08-19 Bruno Haible math C++ tests: Fix compilation error in with GCC 10. * lib/math.in.h (cbrt, ceil, copysign, exp2, expm1, floor, fma, fmod, hypot, ilogb, log, log10, log1p, log2, logb, modf, remainder, rint, round, trunc): Use _GL_CXXALIASWARN1 instead of _GL_CXXALIASWARN. 2020-08-19 Bruno Haible uchar: Fix compilation errors in C++ mode on OpenBSD. * lib/uchar.in.h (char16_t, char32_t): Don't define in C++ mode if CXX_HAS_UCHAR_TYPES is 1. * m4/uchar.m4 (gl_UCHAR_H): Determine whether the C++ compiler predefines char16_t and char32_t. Substitute CXX_HAS_UCHAR_TYPES. * modules/uchar (Makefile.am): Substitute CXX_HAS_UCHAR_TYPES. 2020-08-19 Bruno Haible Fix compilation errors in C++ mode on OpenBSD. * lib/math.in.h (isfinite, isinf, isnan, signbit): In C++ mode on OpenBSD with clang, use the approach without C preprocessor macro. 2020-08-18 Bruno Haible uchar C++ tests: Fix side effect on math modules (regr. 2020-08-17). * modules/uchar-c++-tests (configure.ac): Don't use AC_LANG_PUSH and AC_LANG_POP. 2020-08-17 Paul Eggert verify: avoid __built_assume on Clang * lib/verify.h (assume): Do not use Clang’s __builtin_assume, as Clang 9 incorrectly diagnoses arguments as having side effects even when they do not. I guess Clang 9 considers any function call as if it had a side effect here. libc-config: avoid Clang’s __diagnose_if__ * lib/cdefs.h (__warndecl, __warnattr, __errordecl): For now, do not use __diagnose_if__ here, as this fails on Fedora 31 with Clang 9.0.1, with diagnostic "/usr/include/bits/stdio2.h:263:9: error: fgets called with bigger size than length of destination buffer [-Werror,-Wuser-defined-warnings]". I guess Clang 9 warns even for functions that are not called? careadlinkat: speedup for GCC 10 with GCC_LINT Inspired by a suggestion by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-08/msg00155.html * lib/careadlinkat.c (STACK_BUF_SIZE): New constant. (readlink_stk): New function, with most of the old careadlinkat contents and with a new STACK_BUF arg. Inline it in GCC 10 if GCC_LINT. (careadlinkat): Use the new function for everything but the stack buffer. * build-aux/gcc-warning.spec: Update comments. 2020-08-17 Bruno Haible Assume autoconf >= 2.64. * m4/std-gnu11.m4 (AC_PROG_CC, AC_PROG_CXX): Use _AC_DO_LIMIT always. 2020-08-17 Bruno Haible Revert autoupdate's revert. * config/srclist.txt: Mark regcomp.c as needing sync with glibc. 2020-08-17 Bruno Haible uchar C++ tests: Fix build error on FreeBSD 12. * modules/uchar-c++-tests (configure.ac): Test whether exists. (Makefile.am): Don't include test-uchar-c++2.cc in the compilation if does not exist. 2020-08-16 Paul Eggert time_rz: remove unused functions * lib/time_rz.c (isdst_differ, equal_tm): Remove; no longer used. time_rz: fix issues with mktime_z failures * lib/time_rz.c (mktime_z): Do not update *TM if revert_tz fails. Use a cheaper tm_yday test for failed mktime. 2020-08-16 Bruno Haible intprops test: Strengthen on clang. * tests/test-intprops.c (VERIFY): Use verify_stmt. 2020-08-16 Bruno Haible nstrftime: Guide inlining also on clang. * lib/nstrftime.c (iso_week_days): Inline also on clang. 2020-08-16 Bruno Haible intprops: Avoid bogus "warning: division by zero is undefined" on clang. * lib/intprops.h (_GL__GENERIC_BOGUS): Define to 1 on clang. 2020-08-16 Bruno Haible log2l: Disable MSVC workaround on clang. * lib/log2l.c (log2l): On clang, use the expression 0.0L/0.0L. 2020-08-16 Bruno Haible argp: Emit a warning also with clang. * lib/argp-help.c (__argp_short_program_name): Use #warning also on clang. 2020-08-16 Bruno Haible libc-config: Enable __REDIRECT macro also on clang. * lib/cdefs.h (__REDIRECT, __REDIRECT_NTH, __REDIRECT_NTHNL, __ASMNAME, __ASMNAME2): Define on clang like on GCC. 2020-08-16 Bruno Haible regex: Use initializer shorthand syntax also with clang. * lib/regcomp.c (utf8_sb_map): Use the initializer shorthand syntax also with clang. 2020-08-16 Bruno Haible regex: Use space optimization also with clang. * lib/regex_internal.h (re_token_t): Use a single byte for the type also with clang. 2020-08-16 Bruno Haible Use _Static_assert and static_assert primitives when present on clang. * lib/cdefs.h (_Static_assert): Don't define as a macro on clang. * lib/verify.h (_GL_HAVE__STATIC_ASSERT, _GL_HAVE__STATIC_ASSERT1, _GL_HAVE_STATIC_ASSERT1): Define as appropriate on clang. 2020-08-16 Bruno Haible Use 'throw ()' for optimization in C++ mode also on clang. * lib/cdefs.h (__THROW): Define to 'throw ()' also on clang. * lib/getopt-cdefs.in.h (__THROW): Likewise. * lib/md5.h (__THROW): Likewise. 2020-08-16 Bruno Haible absolute-header: Add support for clang. * modules/absolute-header (Makefile.am): Include '__clang__' in the HAVE_INCLUDE_NEXT expression. 2020-08-16 Bruno Haible Fix "warning: implicitly declaring library function 'strcasecmp'". * lib/argp-help.c: Include . 2020-08-16 Bruno Haible stdio: Don't break attribute 'scanf' on clang. * lib/stdio.in.h (scanf): Treat clang like GCC. 2020-08-16 Bruno Haible Use __restrict also on clang. * lib/argp.h (__restrict): Don't define as a macro on clang >= 3. * lib/glob.in.h (_Restrict_): Use __restrict on clang >= 3. * lib/unitypes.in.h (_UC_RESTRICT): Likewise. 2020-08-16 Bruno Haible pthread-spin: Use GCC built-ins also on clang. * lib/pthread-spin.c (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Use the newer GCC built-ins also on clang. 2020-08-16 Bruno Haible asyncsafe-spin tests: Update. * tests/test-asyncsafe-spin2.c: Update to match the change in lib/asyncsafe-spin.c from 2020-08-11. 2020-08-16 Bruno Haible setenv: Use tree code also with clang. * lib/setenv.c (USE_TSEARCH): Treat clang like GCC. 2020-08-16 Bruno Haible math: Optimize signbit also on clang. * lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Optimize also on clang. 2020-08-16 Bruno Haible avltreehash-list, rbtreehash-list: Optimize also on clang. * lib/gl_anytreehash_list1.h (add_nodes_to_buckets): Use __builtin_expect also on clang. 2020-08-16 Bruno Haible Fix "warning: 'WSASocketA' is deprecated: Use WSASocketW() instead". * lib/socket.c: Use WSASocketW, not WSASocketA. Fix "warning: format specifies type 'unsigned long'". * tests/test-nonblocking-writer.h (main_writer_loop): Cast dbgfprintf argument to match the format directive. Fix "warning: no case matching constant switch condition '0'". * tests/test-fcntl.c (check_flags): Add a 'default' case. Fix "warning: integer overflow in expression". * tests/test-strtol.c (main): Use an 'unsigned long' expression to remove a 'long' overflow. Fix "warning: "getpagesize" redefined". * tests/test-getcwd.c (getpagesize): Don't redefine if defined as a macro. Fix "warning: implicitly declaring library function 'strncasecmp'". * lib/strptime.c: Include . Fix "warning: 'snprintf' macro redefined". * lib/strerror_r.c (snprintf): Undefine before redefining. Fix "warning: address of array 'locale' will always evaluate to 'true'". * lib/nl_langinfo.c (ctype_codeset): Remove redundant NULL test. Fix "warning: '__stat64' macro redefined". * lib/glob.c (__stat64): Undefine also on MSVC/clang. Fix "warning: 'format' attribute argument not supported: rpl_printf". * lib/stdio.in.h (printf): Treat clang like GCC. Fix "warning: attribute declaration must precede definition" with clang. * lib/math.in.h (acosl, asinl, atanl, ceill, cosl, expl, fabsf, fabsl, floorl, fmodl, frexpf, frexpl, hypotf, hypotl, ldexpf, ldexpl, logl, log10l, modfl, sinl, sqrtl, tanl): Disable _GL_CXXALIASWARN invocation on non-glibc systems. * lib/netdb.in.h (gai_strerror): Likewise. * lib/stdio.in.h (snprintf, vfscanf, vscanf, vsnprintf): Likewise. * lib/sys_stat.in.h (fstat): Likewise. * lib/utime.in.h (utime): Likewise. Fix undesired warnings. * lib/sys_select.in.h: Disable all _GL_WARN_ON_USE invocations with clang. 2020-08-16 Bruno Haible C++ tests: Fix link errors on MSVC (regression from 2020-05-31). * modules/stdio-c++-tests (Makefile.am): Link test-stdio-c++ with $(LIB_GETRANDOM), needed for the rpl_tmpfile symbol. * modules/stdlib-c++-tests (Makefile.am): Link test-stdlib-c++ with $(LIB_GETRANDOM), needed for the mkdtemp and mkstemp symbols. 2020-08-16 Bruno Haible Don't use Autoconf quadrigraphs. * m4/alloca.m4 (_AC_LIBOBJ_ALLOCA): Use '#' instead of the corresponding Autoconf quadrigraph. * m4/free.m4 (gl_FUNC_FREE): Likewise. * m4/getloadavg.m4 (gl_PREREQ_GETLOADAVG): Likewise. * m4/largefile.m4 (_AC_SYS_LARGEFILE_TEST_INCLUDES, _AC_SYS_LARGEFILE_MACRO_VALUE): Likewise. * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Likewise. * m4/math_h.m4 (gl_MATH_H): Likewise. * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Likewise. 2020-08-16 Bruno Haible Fix quoting of AC_LANG_PROGRAM arguments. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Quote the AC_LANG_PROGRAM arguments through [[...]]. * m4/fpending.m4 (gl_FUNC_FPENDING): Likewise. * m4/fpurge.m4 (gl_FUNC_FPURGE): Likewise. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Likewise. * m4/ld-output-def.m4 (gl_LD_OUTPUT_DEF): Likewise. * m4/ld-version-script.m4 (gl_LD_VERSION_SCRIPT): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * m4/mountlist.m4 (gl_MOUNTLIST): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H): Likewise. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Likewise. * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Likewise. * m4/warnings.m4 (gl_COMPILER_OPTION_IF): Likewise. * m4/wcstok.m4 (gl_FUNC_WCSTOK): Likewise. * m4/wctype_h.m4 (gl_WCTYPE_H): Likewise. 2020-08-16 Bruno Haible Assume autoconf >= 2.64. * gnulib-tool (DEFAULT_AUTOCONF_MINVERSION): Set to 2.64. * DEPENDENCIES: Require Autoconf 2.64 or newer. * NEWS: Mention the changed requirement. * m4/00gnulib.m4 (_m4_divert_diversion, AC_DEFUN_ONCE): Remove macros. * m4/gnulib-common.m4 (AS_VAR_IF, AS_VAR_COPY): Remove macros. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Quote pushdef'ed variables. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Likewise. * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Likewise. * m4/warnings.m4 (gl_COMPILER_OPTION_IF): Likewise. (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C), gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++), gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)): Define through AC_DEFUN. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C), gl_MANYWARN_ALL_GCC(C++)): Likewise. * m4/iconv.m4 (AM_ICONV): Define through AC_DEFUN_ONCE directly. * m4/libunistring.m4 (gl_LIBUNISTRING): Likewise. * m4/configmake.m4: Update comment. 2020-08-16 Bruno Haible sys_ioctl: Simplify. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H): Remove confusing use of AC_INCLUDES_DEFAULT. 2020-08-16 Bruno Haible Fix quoting of AC_LANG_SOURCE arguments. * m4/printf.m4 (gl_PRINTF_ENOMEM): Fix an m4 quoting bug in the GL_NOCRASH expansion. * m4/locale-ar.m4 (gt_LOCALE_AR): Simplify m4 quoting. * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Likewise. * m4/locale-ja.m4 (gt_LOCALE_JA): Likewise. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. 2020-08-15 Paul Eggert nstrftime: be more predictable about errno This aligns nstrftime better with draft POSIX 202x strftime. * lib/nstrftime.c: Include errno.h. (width_add, __strftime_internal): Set errno on failure, and preserve it on success. Check for mktime_z failure. * modules/nstrftime (Depends-on): Add errno. * modules/nstrftime-tests (Depends-on): Add atoll, intprops. * tests/test-nstrftime.c: Include intprops.h, limits.h. (errno_test): New test function. (main): Call it. 2020-08-15 Bruno Haible canonicalize: Fix a problem of the autoconf test on MSVC/clang. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Remove undesired file from dependency analysis first. 2020-08-15 Bruno Haible Determine asm output option and filename suffix for MSVC/clang. * m4/asm-underscore.m4 (gl_C_ASM): Distinguish clang from cl and clang-cl. 2020-08-15 Bruno Haible doc: Update for MSVC/clang. * doc/*-functions/*printf.texi: Mention that MSVC/clang has two bugs that MSVC 14 does not have. 2020-08-15 Bruno Haible Revert autoupdate's revert. * config/srclist.txt: Mark mktime.c as needing sync with glibc. 2020-08-15 Bruno Haible frexpl: Fix configuration test result on MSVC. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Avoid a division by a constant zero. 2020-08-15 Bruno Haible Support compiling without -loldnames on native Windows. * m4/gnulib-common.m4 (GL_MDA_DEFINES, _GL_MDA_DEFINES): New macros. * m4/chown.m4 (AC_FUNC_CHOWN): In the test programs, use GL_MDA_DEFINES. (gl_FUNC_CHOWN, gl_FUNC_CHOWN_FOLLOWS_SYMLINK): Likewise. * m4/dup.m4 (gl_FUNC_DUP): Likewise. * m4/dup2.m4 (gl_FUNC_DUP2): Likewise. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Likewise. * m4/fchmodat.m4 (gl_FUNC_FCHMODAT): Likewise. * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): Likewise. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Likewise. * m4/fcntl.m4 (gl_FUNC_FCNTL): Likewise. * m4/fdopen.m4 (gl_FUNC_FDOPEN): Likewise. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Likewise. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): Likewise. * m4/fopen.m4 (gl_FUNC_FOPEN_GNU): Likewise. * m4/freopen.m4 (gl_FUNC_FREOPEN): Likewise. * m4/futimens.m4 (gl_FUNC_FUTIMENS): Likewise. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL, gl_FUNC_GETCWD_SIGNATURE): Likewise. * m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * m4/lseek.m4 (gl_FUNC_LSEEK): Likewise. * m4/mkdir.m4 (gl_FUNC_MKDIR): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Likewise. * m4/open-slash.m4 (gl_OPEN_TRAILING_SLASH_BUG): Likewise. * m4/poll.m4 (gl_FUNC_POLL): Likewise. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Likewise. * m4/pread.m4 (gl_FUNC_PREAD): Likewise. * m4/pselect.m4 (gl_FUNC_PSELECT): Likewise. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Likewise. * m4/ptsname_r.m4 (gl_PREREQ_PTSNAME_R): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/pwrite.m4 (gl_FUNC_PWRITE): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/select.m4 (gl_FUNC_SELECT): Likewise. * m4/setenv.m4 (gl_FUNC_UNSETENV): Likewise. * m4/strncat.m4 (gl_FUNC_STRNCAT): Likewise. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/utimens.m4 (gl_UTIMENS): Likewise. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. * m4/canonicalize.m4 (gl_CANONICALIZE_LGPL): On native Windows, don't test for getcwd. * m4/utime.m4 (gl_FUNC_UTIME): On native Windows, don't test for utime. * m4/wcsdup.m4 (gl_FUNC_WCSDUP): To test for wcsdup, use a test program with GL_MDA_DEFINES. * lib/c++defs.h (_GL_CXXALIAS_MDA): New macro. * lib/fcntl.in.h (creat, open): On native Windows, use the underscore- prefixed symbol. * lib/search.in.h (lfind, lsearch): Likewise. * lib/stdio.in.h (fcloseall, fdopen, fileno, getw, putw, tempnam): Likewise. * lib/stdlib.in.h (ecvt, fcvt, gcvt, mktemp, putenv): Likewise. * lib/string.in.h (memccpy, strdup): Likewise. * lib/sys_stat.in.h (chmod, umask): Likewise. * lib/time.in.h (tzset): Likewise. * lib/unistd.in.h (access, chdir, close, dup, dup2, execl, execle, execlp, execv, execve, execvp, execvpe, getcwd, getpid, isatty, lseek, read, rmdir, swab, unlink, write): Likewise. * lib/utime.in.h (utime): Likewise. * lib/wchar.in.h (wcsdup): Likewise. * lib/math.in.h (j0, j1, jn, y0, y1, yn): Likewise. (isfinite, isinf, isnan, signbit): On native Windows, don't define as an rpl_-prefixed macro. * lib/canonicalize-lgpl.c (__getcwd): On native Windows, use _getcwd. * lib/close.c (close_nothrow): On native Windows, use _close. * lib/creat.c (orig_creat): On native Windows, use _creat. * lib/dup.c (dup_nothrow): On native Windows, use _dup. * lib/dup2.c (dup2_nothrow): Use _dup2. * lib/fdopen.c (fdopen_nothrow): On native Windows, use _fdopen. * lib/getcwd-lgpl.c: On native Windows, use _getcwd. * lib/getcwd.c (getcwd_nothrow): Use _getcwd also on mingw. * lib/open.c (orig_open): On native Windows, use _open. * lib/read.c (read_nothrow): Use _read. * lib/rmdir.c: On native Windows, use _rmdir. * lib/unlink.c: On native Windows, use _unlink. * lib/write.c (write_nothrow): Use _write. * lib/sys_select.in.h (close): With clang, don't attach a warning on an undefined symbol. * lib/sys_socket.in.h (close): Likewise. * lib/sys_time.in.h (close): Likewise. * tests/test-spawn-pipe-child.c: On native Windows, use _fdopen. 2020-08-15 Bruno Haible Fix "unknown pragma ignored" warnings with clang on native Windows. * lib/cbrt.c: Don't use '#pragma fenv_access (off)' with clang. * lib/cbrtf.c: Likewise. * lib/ceil.c: Likewise. * lib/floor.c: Likewise. * lib/fma.c: Likewise. * lib/fmod.c: Likewise. * lib/rint.c: Likewise. * lib/round.c: Likewise. * lib/trunc.c: Likewise. * tests/test-ceil2.c: Likewise. * tests/test-ceilf2.c: Likewise. * tests/test-floor2.c: Likewise. * tests/test-floorf2.c: Likewise. * tests/test-trunc2.c: Likewise. * tests/test-truncf2.c: Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. 2020-08-15 Bruno Haible Fix compilation errors in C++ mode with clang on native Windows. * lib/pthread.in.h (pthread_*): Disable _GL_CXXALIASWARN invocation on non-glibc systems. * lib/sched.in.h (sched_yield): Likewise. 2020-08-14 Bruno Haible stdnoreturn: Work around problem with MSVC/clang. * m4/stdnoreturn.m4 (gl_STDNORETURN_H): On native Windows, include some system header after . * doc/posix-headers/stdnoreturn.texi: Mention the issue. 2020-08-14 Bruno Haible utime-h: Generate an utime.h file always. * modules/utime-h (Makefile.am): Generate utime.h always. * m4/utime_h.m4 (gl_UTIME_H): Don't set UTIME_H. Don't define GL_GENERATE_UTIME_H. 2020-08-14 Bruno Haible mktime, mktime-internal: Remove obsolete code. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Don't #undef putenv. 2020-08-14 Bruno Haible getcwd: Remove obsolete code. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Don't #undef mkdir. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. 2020-08-14 Bruno Haible tzset: Assume the function exists. * lib/time.in.h (tzset): Assume HAVE_TZSET is 1. * lib/tzset.c: Define rpl_tzset, not tzset. Assume HAVE_TZSET is 1. * modules/tzset (configure.ac): Don't test HAVE_TZSET. * m4/tzset.m4 (gl_FUNC_TZSET): Don't test for tzset. Don't set HAVE_TZSET. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Don't initialize HAVE_TZSET. * modules/time (Makefile.am): Don't substitute HAVE_TZSET. nstrftime: Assume tzset exists. * lib/nstrftime.c (HAVE_TZSET): Remove macro. (__strftime_internal): Test my_strftime, not HAVE_TZSET. * m4/nstrftime.m4 (gl_FUNC_GNU_STRFTIME): Don't test for tzset. mktime, mktime-internal: Assume tzset exists. * lib/mktime.c (my_tzset): Assume HAVE_TZSET is 1. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Don't test for tzset. 2020-08-14 Bruno Haible strdup: Assume the function exists. * m4/strdup.m4 (gl_FUNC_STRDUP, gl_FUNC_STRDUP_POSIX): Don't test whether strdup exists. * modules/strdup (Files): Remove lib/strdup.c. (configure.ac): Don't compile strdup.c. * modules/strdup-posix (Depends-on, configure.ac): Don't test ac_cv_func_strdup. * doc/posix-functions/strdup.texi: Update. * lib/unistr/u8-strdup.c: Assume HAVE_STRDUP is 1. * modules/unistr/u8-strdup (Files): Remove lib/unistr/u-strdup.h. (Depends-on): Remove unistr/u8-strlen. 2020-08-13 Bruno Haible sys_random: Work around an uClibc bug. Reported by akater via Stefan Kangas in . * lib/sys_random.in.h: On uClibc, include first. * m4/sys_random_h.m4 (gl_HEADER_SYS_RANDOM): Update comment. * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Likewise. * doc/glibc-headers/sys_random.texi: Mention the uClibc bug. 2020-08-12 Bruno Haible Avoid implicit conversion from 'unsigned int' to 'int' in initializers. Reported by Florian Weimer in . * lib/gen-uni-tables.c (output_predicate): Change the element type of the level3 array to 'unsigned int'. * lib/unictype/bitmap.h (bitmap_lookup): Access an 'unsigned int'. * lib/unictype/categ_*.h: Regenerated. * lib/unictype/ctype_*.h: Regenerated. * lib/unictype/pr_*.h: Regenerated. * lib/unictype/sy_*.h: Regenerated. * lib/unicase/cased.h: Regenerated. * lib/unicase/ignorable.h: Regenerated. 2020-08-12 Paul Eggert stdint: port intptr_t to more-recent MinGW Problem reported by Eli Zaretskii in . * lib/stdint.in.h (intptr_t, uintptr_t): Do not define on MinGW, even if _INTPTR_T_DEFINED and _UINTPTR_T_DEFINED are not defined. Apparently those two macros were removed in mingwrt-3.22 dated 2016-07-14. 2020-08-12 Bruno Haible thread-optim: Export function-like macros only. Suggested by Paul Eggert. * lib/thread-optim.h (gl_multithreaded): New macro. (IF_MT_DECL, IF_MT): Remove macros. * doc/multithread.texi (Multithreading Optimizations): Add a small example. * lib/fatal-signal.c: Update all uses. * lib/clean-temp.c: Likewise. * lib/localename.c: Likewise. * modules/localename (Depends-on): Add stdbool. 2020-08-12 Bruno Haible Revert autoupdate's revert. * config/srclist.txt: Mark regex.h as needing sync with glibc. 2020-08-11 Bruno Haible thread-optim: Fix a compiler warning. * lib/thread-optim.h (IF_MT_DECL): Define differently. 2020-08-11 Bruno Haible Use __restrict also on clang. * lib/cdefs.h (__restrict): Don't define as a macro on clang. (__restrict_arr): On clang, define like on GCC. * lib/regex.h (_Restrict_): Use '__restrict' also on clang. (_Restrict_arr_): Use _Restrict_ also on clang. * lib/spawn.in.h (_Restrict_): Use '__restrict' also on clang. (_Restrict_arr_): Use _Restrict_ also on clang. 2020-08-11 Bruno Haible Use flexible array syntax also on clang. * lib/cdefs.h (__flexarr, __glibc_c99_flexarr_available): For clang, define like for GCC 3. 2020-08-11 Bruno Haible fcntl: On native Windows, use _setmode, not setmode. * lib/fcntl.c (dupfd): Use _setmode, not setmode. * lib/binary-io.h: Update comment. * tests/test-cloexec.c: Call set_binary_mode, not setmode. * tests/test-dup2.c: Likewise. * tests/test-dup-safer.c: Likewise. * tests/test-fcntl.c: Likewise. 2020-08-11 Bruno Haible execute, spawn-pipe: Use _spawnvpe, not spawnvpe. * lib/execute.c (execute): Use _spawnvpe, not spawnvpe. * lib/spawn-pipe.c (create_pipe): Likewise. * tests/test-nonblocking-pipe-main.c (main): Likewise. * tests/test-nonblocking-socket-main.c (main): Likewise. * lib/wait-process.c: Update comment. * doc/posix-functions/fork.texi: Update. 2020-08-11 Bruno Haible asyncsafe-spin: Use GCC built-ins also on clang. * lib/asyncsafe-spin.c (asyncsafe_spin_init, do_lock, do_unlock): Use the newer GCC built-ins also on clang. 2020-08-11 Bruno Haible Use expression statements also on clang. * lib/cdefs.h (__extension__): Don't define to empty on clang. * lib/obstack.h (__extension__): Likewise. (obstack_object_size, obstack_room, obstack_make_room, obstack_empty_p, obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_ptr_grow_fast, obstack_int_grow_fast, obstack_blank, obstack_alloc, obstack_copy, obstack_copy0, obstack_finish, obstack_free): Enable as optimized macros also on clang. * lib/fpucw.h (fpucw_t etc.): Enable the definitions also on clang. 2020-08-10 Bruno Haible Use many __attribute__s with clang. * m4/gnulib-common.m4 (_Noreturn): Use __attribute__ __noreturn__ also on clang. * lib/cdefs.h (__glibc_clang_has_attribute, __glibc_clang_has_builtin): New macros. (__THROW, __THROWNL, __NTH, __NTHNL): Use __attribute__ __nothrow__ also on clang. (__warndecl, __warnattr, __errordecl): Use __attribute__ __diagnose_if__ also on older clang versions. (__attribute__): Don't define to empty on clang. (__attribute_malloc__): Use __attribute__ __malloc__ also on clang. (__attribute_pure__): Use __attribute__ __pure__ also on clang. (__attribute_const__): Use __attribute__ __const__ also on clang. (__attribute_used__): Use __attribute__ __used__ also on clang. (__attribute_noinline__): Use __attribute__ __noinline__ also on clang. (__attribute_deprecated__): Use __attribute__ __deprecated__ also on clang. (__attribute_format_arg__): Use __attribute__ __format_arg__ also on clang. (__attribute_format_strfmon__): Use __attribute__ __format__ __strfmon__ also on clang. (__nonnull): Use __attribute__ __nonnull__ also on clang. (__attribute_warn_unused_result__): Use __attribute__ __warn_unused_result__ also on clang. (__always_inline): Use __attribute__ __always_inline__ also on clang. (__attribute_artificial__): Use __attribute__ __artificial__ also on clang >= 7. (__glibc_unlikely, __glibc_likely): Use __builtin_expect also on older clang versions. (_Noreturn): Don't redefine on clang >= 3.5. * lib/arg-nonnull.h (_GL_ARG_NONNULL): Use __attribute__ __nonnull__ also on clang. * lib/dirent.in.h (_GL_ATTRIBUTE_PURE): Use __attribute__ __pure__ also on clang. * lib/stdlib.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/string.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/wchar.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/stdio.in.h (_GL_ATTRIBUTE_FORMAT): Use __attribute__ __format__ also on clang. * lib/monetary.in.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/textstyle.in.h (ostream_printf, ostream_vprintf): Likewise. * lib/unitypes.in.h (_UC_ATTRIBUTE_CONST): Use __attribute__ __const__ also on clang. (_UC_ATTRIBUTE_PURE): Use __attribute__ __pure__ also on clang. * lib/noreturn.h (_GL_NORETURN_FUNC, _GL_NORETURN_FUNCPTR): Use __attribute__ __noreturn__ also on clang. * lib/obstack.h (__attribute_noreturn__): Likewise. * lib/file-set.h (record_file): Use __attribute__ __nonnull__ also on clang. * lib/argp-help.c (hol_entry_long_iterate): Use __attribute__ always_inline also on clang. * tests/test-printf-posix.c (func1, func2, func3, func4): Test also on clang. 2020-08-10 Bruno Haible c-ldtoastr tests: Fix test failure. * tests/test-c-ldtoastr.c (main): Support platforms where 'long double' is longer than 'double'. 2020-08-10 Bruno Haible Revert autoupdate's revert. * config/srclist.txt: Mark intprops.h as needing sync with glibc. 2020-08-09 Bruno Haible string: Fix build error in C++ mode with clang (regression from today). * lib/warn-on-use.h (_GL_WARN_ON_USE_CXX): Expect two rettype parameters, one for GCC, one for clang. * lib/c++defs.h (_GL_CXXALIASWARN1_2): Update. * lib/string.in.h (strchr, strpbrk, strrchr): For clang, pass 'char *' as return type. 2020-08-09 Bruno Haible ftruncate: Use _chsize, not chsize. * m4/ftruncate.m4 (gl_PREREQ_FTRUNCATE): Test for _chsize, not chsize. * lib/ftruncate.c: Test HAVE__CHSIZE. (chsize_nothrow): Use _chsize, not chsize. 2020-08-09 Bruno Haible Silence warnings from clang 10 with -Wimplicit-fallthrough. * lib/dfa.c (FALLTHROUGH): Use __attribute__ __fallthrough__ also on clang >= 10. * lib/fnmatch.c (FALLTHROUGH): Likewise. * lib/fts.c (FALLTHROUGH): Likewise. * tests/macros.h (FALLTHROUGH): Likewise. * lib/regex_internal.h (FALLTHROUGH): Likewise. * config/srclist.txt: Mark it as needing sync with glibc. 2020-08-09 Bruno Haible stdbool tests: Enable the stricter tests also on clang. * tests/test-stdbool.c (ADDRESS_CHECK_OKAY): Define also on clang. (e): Enable the address-to-bool conversion test also on clang. 2020-08-09 Bruno Haible count-one-bits: Use __builtin_popcount{,l,ll} on clang. * lib/count-one-bits.h (COUNT_ONE_BITS): Use the GCC built-in. 2020-08-09 Bruno Haible Use attribute __aligned__ with clang. * lib/stdalign.in.h (_Alignas): Treat clang like GCC. * lib/stddef.in.h (_GL_STDDEF_ALIGNAS): Likewise. 2020-08-09 Bruno Haible Use __alignof__ with clang. * m4/stddef_h.m4 (gl_STDDEF_H): Test the alignment of max_align_t also on clang. * lib/alignof.h (alignof_type): Use __alignof__ also on clang. * lib/stdalign.in.h (_Alignof): Don't activate the GCC workaround on clang. * lib/malloca.h (sa_alignof): Use __alignof__ also on clang. * lib/bitset/list.c (lbitset_elt_alloc): Use __alignof__ also on clang. * lib/bitset/table.c (tbitset_elt_alloc): Likewise. * tests/test-stddef.c: Very the behaviour of __alignof__ also on clang. 2020-08-09 Bruno Haible ignore-value: Simplify on clang. * lib/ignore-value.h (ignore_value): With clang, no need to use the GCC workaround. 2020-08-09 Bruno Haible Use __typeof__ with clang. * m4/stdint.m4 (gl_STDINT_H): Check for SIZE_MAX also on "clang -std=gnu99". * lib/intprops.h (_GL_HAVE___TYPEOF__): Define to 1 also on clang. * tests/test-stdint.c (verify_same_types): Enable the check also on clang. 2020-08-09 Bruno Haible Add ability to emit user-defined warnings and errors with clang. * m4/gnulib-common.m4 (gl_COMMON_BODY): Define _GL_ATTRIBUTE_ERROR, _GL_ATTRIBUTE_WARNING using an attribute for clang. * lib/warn-on-use.h (_GL_WARN_ON_USE, _GL_WARN_ON_USE_ATTRIBUTE, _GL_WARN_ON_USE_CXX): Define using an attribute for clang. * lib/cdefs.h (__warndecl, __warnattr, __errordecl): Define using an attribute for clang. 2020-08-09 Bruno Haible intprops: Fix typo in comment. * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW_P): Fix typo in comment. 2020-08-09 Bruno Haible Use __builtin_signbit* with clang. * lib/math.in.h (signbit): Use __builtin_signbit{,f,l} also on clang. * m4/signbit.m4 (gl_SIGNBIT): Use __builtin_signbit{,f,l} also on clang. Set REPLACE_SIGNBIT_USING_BUILTINS, not REPLACE_SIGNBIT_USING_GCC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_SIGNBIT_USING_BUILTINS, not REPLACE_SIGNBIT_USING_GCC. * modules/math (Makefile.am): Substitute REPLACE_SIGNBIT_USING_BUILTINS, not REPLACE_SIGNBIT_USING_GCC. 2020-08-09 Bruno Haible Use __builtin_isnan with clang. * lib/isnanf-nolibm.h (isnanf): Use the GCC built-in __builtin_isnan, not __builtin_isnanf. Also on clang. * m4/isnanf.m4 (gl_HAVE_ISNANF_NO_LIBM, gl_ISNANF_WORKS): Use the GCC built-in __builtin_isnan, not __builtin_isnanf. Also on clang. * lib/isnand-nolibm.h (isnand): With clang, use the GCC built-in. * m4/isnand.m4 (gl_HAVE_ISNAND_IN_LIBM): With clang, use the GCC built-in. * lib/isnanl-nolibm.h (isnanf): Use the GCC built-in __builtin_isnan, not __builtin_isnanl. Also on clang. * m4/isnanl.m4 (gl_HAVE_ISNANL_NO_LIBM, gl_FUNC_ISNANL_WORKS): Use the GCC built-in __builtin_isnan, not __builtin_isnanl. Also on clang. * lib/math.in.h (__has_builtin): Remove macro. (isnanf, gl_isnan_f): Use the GCC built-in __builtin_isnan, not __builtin_isnanf. Also on clang. (isnand, gl_isnan_d): With clang, use the GCC built-in. (isnanl, gl_isnan_l): Use the GCC built-in __builtin_isnan, not __builtin_isnanl. Also on clang. (isnan): Use the GCC built-in __builtin_isnan in all three cases. Also on clang. 2020-08-09 Bruno Haible thread-optim: Fix logic error. Reported by Paul Eggert. * lib/thread-optim.h (IF_MT): Fix logic error. 2020-08-08 Bruno Haible localename: Use module 'thread-optim'. * lib/localename.c: Include thread-optim.h. (struniq): Use IF_MT macro. * modules/localename (Depends-on): Add thread-optim. clean-temp: Use module 'thread-optim'. * lib/clean-temp.c: Include thread-optim.h. (register_temporary_file, unregister_temporary_file, create_temp_dir, register_temp_file, unregister_temp_file, register_temp_subdir, unregister_temp_subdir, cleanup_temp_dir_contents, register_fd, close_temp, fclose_variant_temp): Use IF_MT macro. * modules/clean-temp (Depends-on): Add thread-optim. fatal-signal: Use module 'thread-optim'. * lib/fatal-signal.c: Include thread-optim.h. (at_fatal_signal, block_fatal_signals, unblock_fatal_signals): Use IF_MT macro. * modules/fatal-signal (Depends-on): Add thread-optim. 2020-08-08 Bruno Haible New module 'thread-optim'. * lib/thread-optim.h: New file. * modules/thread-optim: New file. * doc/multithread.texi (Multithreading Optimizations): New section. 2020-08-07 Paul Eggert doc: more updates for glibc 2.32 * doc/glibc-functions/lchmod.texi, doc/posix-functions/faccessat.texi: * doc/posix-functions/fchmodat.texi: Update. 2020-08-07 Bruno Haible doc: Update for glibc 2.32. * doc/glibc-functions/__libc_single_threaded.texi: New file. * doc/glibc-functions/pthread_attr_getsigmask_np.texi: New file. * doc/glibc-functions/pthread_attr_setsigmask_np.texi: New file. * doc/glibc-functions/sigabbrev_np.texi: New file. * doc/glibc-functions/sigdescr_np.texi: New file. * doc/glibc-functions/strerrordesc_np.texi: New file. * doc/glibc-functions/strerrorname_np.texi: New file. * doc/gnulib.texi: Include them. (Glibc sys/single_threaded.h): New section. * doc/pastposix-functions/h_errno.texi: Update. * doc/posix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. 2020-08-07 Bruno Haible alloca: No need to compile alloca.c with clang. * lib/alloca.c: Skip all code with clang. Use __builtin_alloca with clang. * lib/alloca.in.h (alloca): Define as __builtin_alloca on clang. 2020-08-06 Bruno Haible Use __builtin_assume with clang. * lib/verify.h (_GL_HAS_BUILTIN_ASSUME): New macro. (assume): Use __builtin_assume when available. 2020-08-06 Paul Eggert libgmp: add support * m4/libgmp.m4 (gl_LIBGMP): * modules/libgmp (configure.ac, Makefile.am): Support platforms requiring ‘#include ’ instead of ‘#include ’. 2020-08-06 Bruno Haible Consider that clang defines __OPTIMIZE__ like GCC does. * lib/streq.h: Define the inline functions also on clang. * lib/c-strcaseeq.h: Likewise. * lib/c++defs.h (_GL_CXXALIASWARN_2, _GL_CXXALIASWARN1_2): Don't enable the GCC workaround to clang. 2020-08-06 Bruno Haible safe-alloc: Remove unused code. * lib/safe-alloc.h (__GNUC_PREREQ): Remove macro. 2020-08-06 Bruno Haible Use __builtin_expect with clang everywhere. * lib/cdefs.h (__glibc_unlikely, __glibc_likely): Use the GCC built-in also on clang. 2020-08-05 Bruno Haible Use __builtin_ctz{,l,ll} and __builtin_ffs{,l,ll} with clang everywhere. * lib/count-trailing-zeros.h (COUNT_TRAILING_ZEROS): Use the GCC built-in also on clang. * lib/ffs.c: With clang, use the GCC built-in, not . * lib/ffsl.h: Likewise. Assume GCC_BUILTIN is defined. 2020-08-05 Bruno Haible Use __builtin_clz{,l,ll} with clang, also on Windows. * lib/integer_length.c: With clang, use the GCC built-in, not . * lib/integer_length_l.c: Likewise. * lib/count-leading-zeros.h (COUNT_LEADING_ZEROS): Use the GCC built-in also on clang. * lib/vasnprintf.c (divide): Likewise. 2020-08-04 Paul Eggert Update srclist.txt as per recent glibc changes * config/srclist.txt: Uncomment lines to reflect recent merges from Gnulib to glibc. 2020-08-03 Bruno Haible Prefer documented autoconf macro 'm4_if' over 'ifelse'. * m4/progtest.m4 (AM_PATH_PROG_WITH_TEST): Use m4_if instead of ifelse. 2020-08-03 Bruno Haible integer_length_ll: Optimize for MSVC in 64-bit mode. * lib/integer_length_l.c (MSVC_BUILTIN): Define for MSVC in 64-bit mode. (FUNC): On MSVC, use MSVC_BUILTIN if defined. 2020-08-03 Bruno Haible integer_length_ll: Optimize for MSVC in 32-bit mode. * lib/integer_length_l.c: Include . (integer_length): Define as inline function, like in lib/integer_length.c. 2020-08-03 Bruno Haible integer_length: Optimize for MSVC. * lib/integer_length.c: Include . (integer_length): With MSVC, use the _BitScanReverse built-in. 2020-08-03 Bruno Haible ffsll: Optimize for MSVC in 64-bit mode. * lib/ffsl.h (FUNC): On MSVC, use MSVC_BUILTIN if defined. * lib/ffsll.c (MSVC_BUILTIN): Define for MSVC in 64-bit mode. * lib/ffsl.c (MSVC_BUILTIN): Define for MSVC. 2020-08-03 Bruno Haible ffsll: Optimize for MSVC in 32-bit mode. * lib/ffsl.h: Include . (ffs): Define as inline function, like in lib/ffs.c. 2020-08-03 Bruno Haible ffs: Optimize for MSVC. * lib/ffs.c: Include . (ffs): With MSVC, use the _BitScanForward built-in. 2020-08-03 Bruno Haible sigprocmask: Try to avoid breakage for people who use an Autoconf cache. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Change the name of the cache variable. 2020-08-03 Harald van Dijk (tiny change) fopen: Avoid undesired interactions with glibc headers. * lib/fopen.c (_GL_ALREADY_INCLUDING_STDIO_H): Define this instead of __need_FILE, as the latter does not work with glibc. 2020-08-02 Paul Eggert fcntl: document some F_SETLK errno variations * doc/posix-functions/fcntl.texi (fcntl): Document OpenIndiana, GNU/Linux, FreeBSD on NFS files. 2020-08-02 Bruno Haible oset: Add an 'iterator_atleast' operation. * lib/gl_array_oset.c (gl_array_indexof_atleast): New function, extracted from gl_array_search_atleast. (gl_array_search_atleast): Use it. (gl_array_iterator_atleast): New function. (gl_array_oset_implementation): Use it. * lib/gl_anytree_oset.h (gl_tree_iterator_atleast): New function. * lib/gl_avltree_oset.c (gl_avltree_oset_implementation): Use it. * lib/gl_rbtree_oset.c (gl_rbtree_oset_implementation): Likewise. * lib/gl_oset.h (struct gl_oset_implementation): Add 'iterator_atleast' member. (gl_oset_iterator_atleast): New function. * lib/gl_oset.hh (gl_OSet): Add 'begin_atleast' member. (gl_OSet::iterator): Add another auxiliary constructor. * tests/test-array_oset.c (is_at_least, gl_sortedlist_indexof_atleast): New functions. (main): Test also gl_oset_iterator_atleast. * tests/test-avltree_oset.c (is_at_least): New function. (main): Test also gl_oset_iterator_atleast. * tests/test-rbtree_oset.c (is_at_least): New function. (main): Test also gl_oset_iterator_atleast. * tests/test-oset-c++.cc (is_at_most): New function. (main): Test also gl_OSet::begin_atleast. 2020-08-02 Bruno Haible oset-c++, omap-c++: Remove restriction for search_atleast method. * lib/gl_oset.hh (gl_OSet::search_atleast): Allow the threshold to be of a different type than the element. * lib/gl_omap.hh (gl_OMap::search_atleast): Allow the threshold to be of a different type than the key. 2020-08-01 Paul Eggert gnumakefile: say ‘$(MAKE)’ not ‘make’ * top/GNUmakefile (abort-due-to-no-makefile): Prefer ‘$(MAKE)’ to ‘make’ in a diagnostic. This change is backported from Autoconf. 2020-08-01 Bruno Haible Prefer documented autoconf macro 'm4_if' over 'ifelse'. * m4/autobuild.m4 (AB_INIT): Use m4_if instead of ifelse. * m4/csharpexec.m4 (gt_CSHARPEXEC): Likewise. * m4/javacomp.m4 (gt_JAVACOMP): Likewise. * m4/javaexec.m4 (gt_JAVAEXEC): Likewise. * m4/libtextstyle.m4 (gl_LIBTEXTSTYLE): Likewise. 2020-08-01 Bruno Haible libtextstyle-optional: Update tests. * modules/libtextstyle-optional-tests (configure.ac): Invoke gl_LIBTEXTSTYLE_OPTIONAL. 2020-08-01 Bruno Haible parse-datetime: Fix wrong #line statements. * modules/parse-datetime (Makefile.am): Correct #line statements also in parse-datetime-gen.h. 2020-08-01 Bruno Haible libtextstyle[-optional]: Allow requesting a minimum version. * m4/libtextstyle.m4 (gl_LIBTEXTSTYLE): Allow an optional argument. (gl_LIBTEXTSTYLE_NEWEST_VERSION, gl_LIBTEXTSTYLE_INITIALIZE, gl_LIBTEXTSTYLE_SEARCH): New macros. * modules/libtextstyle (configure.ac): Don't invoke gl_LIBTEXTSTYLE. * m4/libtextstyle-optional.m4 (gl_LIBTEXTSTYLE_OPTIONAL): Allow an optional argument. Invoke, not require, gl_LIBTEXTSTYLE. * modules/libtextstyle-optional (configure.ac): Don't invoke gl_LIBTEXTSTYLE_OPTIONAL. * NEWS: Mention the changes. 2020-07-31 Bruno Haible _GL_CMP: Improve documentation. Reported by Paul Eggert in . * m4/gnulib-common.m4 (gl_COMMON_BODY): Clarify what arguments can be passed. 2020-07-30 Paul Eggert largefile: sync with Autoconf master * m4/largefile.m4 (_AC_SYS_LARGEFILE_TEST_INCLUDES): Avoid undefined behavior on platforms where off_t is 32 bits. See: https://bugs.debian.org/742780 alloca: sync with Autoconf master * m4/alloca.m4 (_AC_LIBOBJ_ALLOCA): Do not define if Autoconf 2.70 or later, since Autoconf master now matches us. 2020-07-30 Bruno Haible unicodeio: Add comment. * lib/unicodeio.c (unicode_to_mb): Clarify why the code distinguishes different iconv behaviours. 2020-07-30 Paul Eggert Work around some Oracle Studio attribute bugs These were discovered when building bleeding-edge Emacs with Oracle Studio. * m4/gnulib-common.m4 (_GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_MAY_ALIAS): Port to Oracle Studio 12.6, which mishandles __attribute__ ((__cold__)) and __attribute__ ((__may_alias__)) even though __has_attribute says they work. 2020-07-29 Bruno Haible unicodeio: Fix wrong result on musl libc. Reported by A. Wilcox in . * lib/unicodeio.c (unicode_to_mb): Handle asterisk fallback characters on musl libc. * m4/unicodeio.m4 (gl_UNICODEIO): Invoke gl_MUSL_LIBC. * modules/unicodeio (Files): Add m4/musl.m4. 2020-07-29 Paul Eggert fsusage, regex, stat-size: remove Cray support As near as I can make out this is actually support for UNICOS/mp, last released 2005, and Cray hasn’t supported that for years. * config/srclist.txt: Comment out regex.h for now. * lib/fsusage.c (get_fs_usage): * lib/regex.h (re_comp, re_exec): * lib/stat-size.h (ST_NBLOCKSIZE): Don’t worry about _CRAY. 2020-07-29 Bruno Haible parse-datetime: Fix compilation error with bison 3.7. * modules/parse-datetime (Makefile.am): Create a generated header file parse-datetime-gen.h in the source directory. Correct #include and #line statements during preprocessing. 2020-07-28 Bruno Haible fopen-gnu: Create files correctly (regression from 2020-05-24). * lib/fopen.c (rpl_open): Pass a third argument to open(). 2020-07-27 Paul Eggert xalloc-die: don’t depend on xalloc This removes a circular dependency, as xalloc depends on xalloc-die. * modules/xalloc-die (Files): Add lib/xalloc.h. (Depends-on): Remove xalloc. Add extern-inline, stdint, xalloc-oversized (this is for xalloc.h). dfa-tests: port to MSVC Problem reported by Gisle Vanem in: https://lists.gnu.org/r/bug-gnulib/2020-07/msg00159.html Also, remove an unnecessary dependency on getprogname. * modules/dfa-tests (Depends-on): Remove getprogname. * tests/test-dfa-match-aux.c: Do not include getprogname.h. (exit_status): New static var. (dfawarn): Set it instead of exiting. Do not declare as _Noreturn, to pacify MSVC. (main): Return exit_status. 2020-07-26 Paul Eggert argz: pacify MSVC * lib/argz.in.h: Avoid "*/*" to pacify MSVC. Problem reported by Gisle Vanem. libgmp: remove dependency on havelib * m4/libgmp.m4 (gl_LIBGMP): If gl_HAVE_MODULE_HAVELIB is not defined, use the more-traditional AC_SEARCH_LIBS approach. This should work better with GNU Emacs configuration, which uses pkg-config instead of a havelib-style approach. * modules/havelib (gl_HAVE_MODULE_HAVELIB): New witness macro. * modules/libgmp (Depends-on): Remove havelib. libgmp: remove HAVE_GMP, LIB_GMP * m4/libgmp.m4 (gl_LIBGMP): Do not define HAVE_GMP and LIB_GMP, as they’re redundant. I’ll adjust GNU Coreutils accordingly. 2020-07-26 Bruno Haible inttypes: Remove support for AIX 4. * lib/inttypes.in.h: Assume that PRI_MACROS_BROKEN is 0. * m4/inttypes-pri.m4: Remove file. * m4/inttypes.m4 (gl_INTTYPES_PRI_SCN): Don't require gt_INTTYPES_PRI. (gl_INTTYPES_H_DEFAULTS): Don't initialize PRI_MACROS_BROKEN. * modules/inttypes-incomplete (Makefile.am): Don't substitute PRI_MACROS_BROKEN. * modules/inttypes (Files): Remove m4/inttypes-pri.m4. 2020-07-26 Bruno Haible gettimeofday: Remove workaround for Mac OS X 10.0. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Remove macro. (gl_FUNC_GETTIMEOFDAY): Don't invoke it. * lib/gettimeofday.c: Don't include localtime-buffer.h. (gettimeofday): Don't test GETTIMEOFDAY_CLOBBERS_LOCALTIME. * lib/localtime.c: Don't test GETTIMEOFDAY_CLOBBERS_LOCALTIME. * modules/gettimeofday (Depends-on): Remove localtime-buffer. * modules/localtime-buffer: Remove file. * lib/localtime-buffer.h: Remove file. * lib/localtime-buffer.c: Remove file. * m4/localtime-buffer.m4: Remove file. * MODULES.html.sh (Date and time ): Remove localtime-buffer. 2020-07-26 Bruno Haible tzset: Remove workaround for Solaris 2.6. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Remove macro. (gl_FUNC_TZSET): Don't invoke it. Don't define TZSET_CLOBBERS_LOCALTIME. Don't require gl_LOCALTIME_BUFFER_DEFAULTS. * lib/localtime-buffer.h: Don't test TZSET_CLOBBERS_LOCALTIME. * lib/localtime-buffer.c: Likewise. * lib/localtime.c: Likewise. * lib/tzset.c: Don't include localtime-buffer.h. (tzset): Don't test TZSET_CLOBBERS_LOCALTIME. * lib/nstrftime.c (__strftime_internal): Assume HAVE_RUN_TZSET_TEST is 1. * modules/tzset (Depends-on): Remove localtime-buffer. 2020-07-26 Bruno Haible expl: Simplify autoconf test. * m4/expl.m4 (gl_FUNC_EXPL): Merge the "checking whether expl() breaks with small values..." test into the "checking whether expl works..." test. 2020-07-26 Bruno Haible alloca: Remove Cray-2 and Cray Y-MP support. * m4/alloca.m4 (_AC_LIBOBJ_ALLOCA): Don't define CRAY_STACKSEG_END. Enable also on Autoconf >= 2.69. * lib/alloca.c (ADDRESS_FUNCTION, struct stack_control_header, struct stack_segment_linkage, struct stk_stat, struct stk_trailer, i00afunc): Remove. 2020-07-25 Bruno Haible multiarch: Prepare for x86_64+arm64 universal binaries in macOS 11. * m4/multiarch.m4 (gl_MULTIARCH): Recognize also the ARM architectures. 2020-07-25 Bruno Haible sigprocmask: Small autoconf macro improvement. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Make it possible for the user to override the value of gl_cv_func_sigprocmask. * m4/gnulib-common.m4 (gl_SILENT): New macro. 2020-07-25 Bruno Haible Small autoconf macro improvements. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Make it possible for the user to override the value of gl_cv_func_working_mktime. * m4/multiarch.m4 (gl_MULTIARCH): Show a line "checking whether the compiler produces multi-arch binaries..." in the configure output. * m4/size_max.m4 (gl_SIZE_MAX): When not found, say "no". * m4/parse-datetime.m4 (gl_C_COMPOUND_LITERALS): Improve indentation. 2020-07-25 Bruno Haible doc: Update for NetBSD 7.1, 8.0, 9.0. * doc/*/*.texi: Update. * m4/exp2l.m4: Update comments. * m4/expl.m4: Likewise. * m4/ilogb.m4: Likewise. * m4/ilogbf.m4: Likewise. * m4/log10l.m4: Likewise. * m4/logl.m4: Likewise. * m4/printf.m4: Likewise. * m4/rintl.m4: Likewise. * m4/wcwidth.m4: Likewise. 2020-07-24 Bruno Haible doc: Update for Mac OS X 10.13. * doc/*/*.texi: Update. * m4/expm1l.m4: Update comments. * m4/getgroups.m4: Likewise. * m4/getlogin_r.m4: Likewise. * m4/linkat.m4: Likewise. * m4/printf.m4: Likewise. 2020-07-24 Bruno Haible doc: Update for Cygwin 2.9.0. * doc/*/*.texi: Update. 2020-07-24 Paul Eggert parse-datetime: modernize doc * doc/parse-datetime.texi: Use more-current examples. Don’t lead with 32-bit time_t, as it’s on its way out. Capitalize “Epoch” to be consistent with POSIX. timespec: remove dependence on ‘verify’ * lib/timespec.h: Do not include verify.h; no longer needed. * modules/timespec (Depends-on): Remove ‘verify’. Optimize a few more three-valued comparisons * lib/timespec.h (timespec_cmp, timespec_sign): * lib/utimecmp.c (utimecmpat): Avoid conditional branches by using _GL_CMP. Fix _GL_CMP parenthesization typo * m4/gnulib-common.m4 (_GL_CMP): Properly parenthesize. 2020-07-24 Bruno Haible dfa: Revert breaking gawk. Reported by Arnold Robbins . * lib/dfa.c (compare): Don't reference the _GL_CMP macro. 2020-07-23 Bruno Haible Optimize three-valued comparison between integers. (a > b ? 1 : a < b ? -1 : 0) is the same as (a > b) - (a < b). * m4/gnulib-common.m4 (gl_COMMON): Define _GL_CMP. * lib/c-strcasecmp.c (c_strcasecmp): Use _GL_CMP. * lib/c-strncasecmp.c (c_strncasecmp): Likewise. * lib/dfa.c (compare): Likewise. * lib/fts.c (fts_compare_ino): Likewise. * lib/mbmemcasecmp.c (mbmemcasecmp): Likewise. * lib/mbscasecmp.c (mbscasecmp): Likewise. * lib/mbsncasecmp.c (mbsncasecmp): Likewise. * lib/memcasecmp.c (memcasecmp): Likewise. * lib/memcmp2.c (memcmp2): Likewise. * lib/savedir.c (direntry_cmp_inode): Likewise. * lib/strcasecmp.c (strcasecmp): Likewise. * lib/strncasecmp.c (strncasecmp): Likewise. * lib/unistr/u-cmp2.h (FUNC): Likewise. 2020-07-23 Bruno Haible lchmod: Use /proc on Cygwin. * lib/lchmod.c (lchmod): Use /proc on Cygwin. 2020-07-23 Ken Brown fchmodat: Use /proc on Cygwin * lib/fchmodat.c (fchmodat): Use /proc on Cygwin. 2020-07-21 Bruno Haible aligned-malloc: Optionally use aligned_alloc. * lib/aligned-malloc.h: Verify the alignment. (aligned_malloc): Use aligned_alloc as an alternative. * modules/aligned-malloc (configure.ac): Test for aligned_alloc. * doc/posix-functions/aligned_alloc.texi: Mention the modules 'aligned-malloc' and 'pagealign_alloc'. 2020-07-21 Bruno Haible aligned-malloc: Add tests. * tests/test-aligned-malloc.c: New file. * modules/aligned-malloc-tests: New file. aligned-malloc: New module. * lib/aligned-malloc.h: New file. * m4/malloc-align.m4: New file. * modules/aligned-malloc: New file. * doc/posix-functions/posix_memalign.texi: Mention the new module. * doc/glibc-functions/memalign.texi: Likewise. 2020-07-21 Bruno Haible inttypes: Fix PRI*PTR and SCN*PTR on 64-bit native Windows. * m4/inttypes.m4 (gl_INTTYPES_PRI_SCN): On 64-bit native Windows, make sure PRIPTR_PREFIX is defined to "ll", not "l". 2020-07-21 Bruno Haible printf-posix: Make an autoconf test more future-proof. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_N): Include before using uintptr_t. 2020-07-20 Bruno Haible list, oset, omap: Relicense some of the container modules under LGPLv2+. * modules/list (License): Change to LGPLv2+. * modules/array-list (License): Likewise. * modules/carray-list (License): Likewise. * modules/linked-list (License): Likewise. * modules/avltree-list (License): Likewise. * modules/rbtree-list (License): Likewise. * modules/oset (License): Likewise. * modules/array-oset (License): Likewise. * modules/avltree-oset (License): Likewise. * modules/rbtree-oset (License): Likewise. * modules/omap (License): Likewise. * modules/array-omap (License): Likewise. * modules/avltree-omap (License): Likewise. * modules/rbtree-omap (License): Likewise. 2020-07-20 Bruno Haible oset: Add an 'update' operation. * lib/gl_array_oset.c (gl_array_update): New function. (gl_array_oset_implementation): Use it. * lib/gl_avltree_omap.c (NODE_PAYLOAD_DISPOSE): Add parameters. * lib/gl_rbtree_omap.c (NODE_PAYLOAD_DISPOSE): Add parameters. * lib/gl_avltree_ordered.h (gl_tree_add_node_before): New function, extracted from gl_tree_nx_add_before. (gl_tree_nx_add_before): Invoke it. (gl_tree_add_node_after): New function, extracted from gl_tree_nx_add_after. (gl_tree_nx_add_after): Invoke it. (gl_tree_remove_node_no_free): New function, extracted from gl_tree_remove_node. (gl_tree_remove_node): Invoke it. * lib/gl_rbtree_ordered.h (gl_tree_add_node_before): New function, extracted from gl_tree_nx_add_before. (gl_tree_nx_add_before): Invoke it. (gl_tree_add_node_after): New function, extracted from gl_tree_nx_add_after. (gl_tree_nx_add_after): Invoke it. (gl_tree_remove_node_no_free): New function, extracted from gl_tree_remove_node. (gl_tree_remove_node): Invoke it. * lib/gl_anytree_oset.h (gl_tree_next_node): New function, extracted from gl_tree_iterator_next. (gl_tree_iterator_next): Invoke it. (gl_tree_prev_node, gl_tree_update): New functions. * lib/gl_avltree_oset.c (NODE_PAYLOAD_DISPOSE): Add parameters. (gl_avltree_oset_implementation): Use gl_tree_update. * lib/gl_rbtree_oset.c (NODE_PAYLOAD_DISPOSE): Add parameters. (gl_rbtree_oset_implementation): Use gl_tree_update. * lib/gl_oset.h (struct gl_oset_implementation): Add 'update' member. (gl_oset_update): New function. * lib/gl_oset.hh (gl_OSet): Add 'update' member. * modules/avltree-oset (configure.ac): Require AC_C_INLINE. * modules/rbtree-oset (configure.ac): Likewise. * tests/test-oset-update.h: New file. * tests/test-array_oset.c: Include test-oset-update.h. (main): Invoke test_update. * tests/test-avltree_oset.c: Likewise. * tests/test-rbtree_oset.c: Likewise. * modules/array-oset-tests (Files): Add tests/test-oset-update.h. * modules/avltree-oset-tests (Files): Likewise. * modules/rbtree-oset-tests (Files): Likewise. * tests/test-oset-c++.cc (action): New function. (main): Test the 'update' member function. 2020-07-15 Paul Eggert md5, sha1, sha256, sha512: pacify Autoconf 2.70 * m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Use m4_if rather than a shell if, so that the argument to AC_CHECK_HEADERS is a simple string that does not require shell evaluation. This fixes a warning generated by Autoconf 2.69b. 2020-07-12 Bruno Haible libgmp: Avoid warning when --without-libgmp is used. * lib/mini-gmp-gnulib.c: Ignore -Wsuggest-attribute=malloc only for GCC >= 8, not for GCC >= 4.6. 2020-07-12 Bruno Haible libgmp: Link to the correct shared library. * m4/libgmp.m4 (gl_LIBGMP): Invoke AC_LIB_HAVE_LINKFLAGS. * modules/libgmp (Depends-on): Add havelib. (Link): Mention $(LIBGMP) and $(LTLIBGMP). * modules/libgmp-tests (Makefile.am): Link test-libgmp with $(LIBGMP). 2020-07-12 Bruno Haible libgmp tests: Add some safety checks. * modules/libgmp-tests (Depends-on): Add verify. * tests/test-libgmp.c: Verify GMP_NUMB_BITS value. (main): Verify that gmp.h and libgmp versions match. 2020-07-10 Bruno Haible unicodeio: Fix wrong result on NetBSD. * lib/unicodeio.c (unicode_to_mb): Handle question mark fallback characters also on NetBSD. 2020-07-09 Bruno Haible unicodeio: Fix wrong result on Solaris 11. Reported by Kiyoshi Kanazawa via Akim Demaille in . * lib/unicodeio.c (unicode_to_mb): Handle question mark fallback characters on Solaris. * tests/test-unicodeio.c (main): In the "C" locale, expect either the UTF-8 output or the specified fallback. 2020-07-08 Bruno Haible unicodeio: Add tests. * tests/test-unicodeio.c: New file. * tests/test-unicodeio1.sh: New file. * tests/test-unicodeio2.sh: New file. * tests/test-unicodeio3.sh: New file. * modules/unicodeio-tests: New file. 2020-07-08 Bruno Haible unicodeio: Document link requirements. * modules/unicodeio (Link): New section. 2020-07-07 Bruno Haible doc: Remove support for some very old platforms. * doc/posix-functions/memcmp.texi: Don't mention "older platforms". * doc/posix-functions/memcpy.texi: Likewise. * doc/posix-functions/memmove.texi: Likewise. * doc/posix-functions/memset.texi: Likewise. * doc/posix-functions/getcwd.texi: Likewise. memchr: Remove support for some very old platforms. * m4/memchr-obsolete.m4: Remove file. * modules/memchr-obsolete: Remove file. * m4/memchr.m4 (gl_FUNC_MEMCHR): Assume module 'memchr-obsolete' is absent. Don't define HAVE_MEMCHR. * lib/string.in.h (memchr): Assume HAVE_MEMCHR is 1. * modules/memchr (Depends-on): Remove memchr-obsolete. (configure.ac): Assume HAVE_MEMCHR is 1. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Don't initialize HAVE_MEMCHR. * modules/string (Makefile.am): Don't substitute HAVE_MEMCHR. * doc/posix-functions/memchr.texi: Don't mention module 'memchr-obsolete'. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Assume HAVE_MEMCHR is 1. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Assume HAVE_MEMCHR is 1. * modules/strnlen (Depends-on): Remove memchr-obsolete. dup2: Remove support for some very old platforms. * m4/dup2-obsolete.m4: Remove file. * modules/dup2-obsolete: Remove file. * m4/dup2.m4 (gl_FUNC_DUP2): Assume module 'dup2-obsolete' is absent. Don't define HAVE_DUP2. * lib/unistd.in.h (dup2): Assume HAVE_DUP2 is 1. * lib/dup2.c: Likewise. * modules/dup2 (Depends-on, configure.ac): Likewise. (Depends-on): Remove dup2-obsolete. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Don't initialize HAVE_DUP2. * modules/unistd (Makefile.am): Don't substitute HAVE_DUP2. * doc/posix-functions/dup2.texi: Don't mention module 'dup2-obsolete'. 2020-07-07 Bruno Haible canonicalize: Trim module dependencies. * lib/hash-triple.h: Group declarations. * lib/hash-triple-simple.c: New file, extracted from lib/hash-triple.c. * lib/hash-triple.c: Don't include , , hash-pjw.h. (STREQ): Remove macro. (triple_hash, triple_compare_ino_str, triple_free): Remove functions. * modules/hash-triple-simple: New file, based on modules/hash-triple. * modules/hash-triple (Files): Remove lib/hash-triple.h. (Depends-on): Add hash-triple-simple. Remove hash-pjw. * modules/canonicalize (Depends-on): Remove hash-triple. Add hash-triple-simple. * modules/file-set (Depends-on): Likewise. 2020-07-07 Bruno Haible Clarify dependencies to double-slash-root. * modules/canonicalize (Files): Remove m4/double-slash-root.m4. (Depends-on): Add double-slash-root. * modules/canonicalize-lgpl (Depends-on): Add double-slash-root. * modules/dirname-lgpl (Depends-on): Add double-slash-root. 2020-07-06 Paul Eggert libgmp: new module The idea is to let programs simply include , and so long as they live within the mini-gmp subset they need not worry about whether the GMP libraries are installed. * MODULES.html.sh: Mention it. * config/srclist.txt: Mention files copied from GMP source. * config/srclistvars.sh (GMP): New var. * lib/mini-gmp-gnulib.c, m4/libgmp.m4, modules/libgmp: * modules/libgmp-tests, tests/test-libgmp.c: New files. * lib/mini-gmp.c, lib/mini-gmp.h: New files, copied from GMP. 2020-07-05 Bruno Haible mkancesdirs: Trim module dependencies. * lib/mkancesdirs.c: Include filename.h instead of dirname.h. * modules/mkancesdirs (Depends-on): Remove dirname-lgpl. Add filename. 2020-07-05 Bruno Haible getprogname: Trim module dependencies. * lib/getprogname.c: Include basename-lgpl.h instead of dirname.h. * modules/getprogname (Depends-on): Remove dirname-lgpl. Add basename-lgpl. 2020-07-05 Bruno Haible filenamecat-lgpl: Trim module dependencies. * lib/filenamecat-lgpl.c: Include basename-lgpl.h, filename.h instead of dirname.h. * modules/filenamecat-lgpl (Depends-on): Remove dirname-lgpl. Add basename-lgpl, filename. 2020-07-05 Bruno Haible backupfile, backup-rename: Trim module dependencies. * lib/backupfile.c: Include basename-lgpl.h instead of dirname.h. * modules/backupfile (Depends-on): Remove dirname-lgpl. Add basename-lgpl. * modules/backup-rename (Depends-on): Likewise. 2020-07-05 Bruno Haible argp: Trim module dependencies. * lib/argp-namefrob.h: Include basename-lgpl.h instead of dirname.h. * modules/argp (Depends-on): Remove dirname-lgpl. Add basename-lgpl. 2020-07-05 Bruno Haible basename-lgpl: New module. * lib/basename-lgpl.h: New file, based on lib/dirname.h and lib/basename-lgpl.c. * lib/basename-lgpl.c: Include basename-lgpl.h, not dirname.h. Include , filename.h. (last_component): Rename a local variable. * lib/dirname.h: Include basename-lgpl.h. (DOUBLE_SLASH_IS_DISTINCT_ROOT): Remove macro. (last_component, base_len): Remove declarations. * modules/basename-lgpl: New file. * modules/dirname-lgpl (Files): Remove lib/basename-lgpl.c. (Depends-on): Add basename-lgpl. Remove double-slash-root. (Makefile.am): Don't compile basename-lgpl.c. * doc/posix-functions/basename.texi: Mention the module 'basename-lgpl', not 'dirname'. 2020-07-05 Bruno Haible dirname, dirname-lgpl: Simplify. * m4/dirname.m4: Remove file. * modules/dirname (configure.ac): Don't invoke gl_DIRNAME. * modules/dirname-lgpl (Files): Remove m4/dirname.m4. (configure.ac): Don't invoke gl_DIRNAME_LGPL. 2020-07-05 Bernhard Voelker tests: avoid shadowing warning * tests/test-memchr.c (main): Give page_boundary variable a tight scope. 2020-07-05 Bruno Haible supersede: Add tests. * tests/test-supersede.c: New file. * tests/test-supersede-open.h: New file. * tests/test-supersede-fopen.h: New file. * modules/supersede-tests: New file. supersede: New module. * lib/supersede.h: New file. * lib/supersede.c: New file. * m4/supersede.m4: New file. * modules/supersede: New file. 2020-07-05 Bruno Haible Add some copyright headers. * lib/dev-ino.h: Add copyright header. * lib/di-set.h: Likewise. * lib/fchown-stub.c: Likewise. * lib/file-set.h: Likewise. * lib/hash-triple.h: Likewise. * lib/idcache.h: Likewise. * lib/ino-map.h: Likewise. * lib/mkancesdirs.h: Likewise. * lib/scratch_buffer.h: Likewise. * lib/se-context.in.h: Likewise. * lib/stdopen.h: Likewise. * lib/userspec.h: Likewise. 2020-07-04 Bruno Haible getrandom: Relicense under LGPLv2+. Paul Eggert's approval is in . * modules/getrandom (License): Change to LGPLv2+. 2020-07-04 Bruno Haible getumask: Add tests. * tests/test-getumask.c: New file. * modules/getumask-tests: New file. getumask: New module. * lib/sys_stat.in.h (getumask): New declaration. * lib/getumask.c: New file. * m4/getumask.m4: New file. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Test whether getumask is declared. (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_GETUMASK, HAVE_GETUMASK. * modules/sys_stat (Makefile.am): Substitute GNULIB_GETUMASK, HAVE_GETUMASK. * modules/getumask: New file. * tests/test-sys_stat-c++.cc (getumask): Check signature. * doc/glibc-functions/getumask.texi: New file. * doc/gnulib.texi (Glibc sys/stat.h): Include it. 2020-07-04 Bruno Haible clean-temp: Add support for temporary files with given mode. * lib/clean-temp.h (gen_register_open_temp): Add mode argument. * lib/clean-temp.c (struct try_create_file_params): New type. (try_create_file): New function. (gen_register_open_temp): Add mode argument. Use try_tempname instead of gen_tempname. 2020-07-04 Bruno Haible clean-temp: Document limitations. * lib/clean-temp.h: Document limitations. 2020-07-04 Bruno Haible clean-temp: Add support for temporary files with unpredictable names. * lib/clean-temp.h (gen_register_open_temp): New declaration. * lib/clean-temp.c: Include tempname.h. (gen_register_open_temp): New function. * modules/tempname (configure.ac): Define a module indicator. 2020-07-04 Bruno Haible clean-temp: Add support for temporary files anywhere in the file system. * lib/clean-temp.h (register_temporary_file, unregister_temporary_file, cleanup_temporary_file): New declarations. * lib/clean-temp.c (file_cleanup_list_lock, file_cleanup_list): New variables. (dir_cleanup_list_lock): Renamed from cleanup_list_lock. (dir_cleanup_list): Renamed from cleanup_list. (cleanup_action): Process the file_cleanup_list as well. (do_init_clean_temp): New function. (clean_temp_once): New variable. (init_clean_temp): New function. (create_temp_dir): Invoke it. (register_temporary_file, unregister_temporary_file, cleanup_temporary_file): New functions. (do_unlink, do_rmdir): Remove 'dir' argument. Add 'cleanup_verbose' argument. 2020-07-04 Bruno Haible clean-temp: Improve comments. * lib/clean-temp.h (open_temp, fopen_temp, close_temp, fclose_temp, fwriteerror_temp, close_stream_temp): Clarify intended use. * lib/clean-temp.c: Likewise. 2020-07-04 Bruno Haible clean-temp: Make multithread-safe, part 2. * lib/fatal-signal.h: Include . (get_fatal_signal_set): New declaration. * lib/fatal-signal.c (get_fatal_signal_set): New function. * lib/clean-temp.c: Include asyncsafe-spin.h, gl_linked_list.h. (struct closeable_fd): New type. (fatal_signal_set): New variable. (init_fatal_signal_set): New function. (asyncsafe_close, asyncsafe_fclose_variant): New functions. (cleanup_action): Invoke asyncsafe_close instead of close. (create_temp_dir): Invoke init_fatal_signal_set. (register_fd): Use a plain linked list. Add a 'struct closeable_fd *' element. (unregister_fd): Remove function. (close_temp): Cleanup descriptors list on the fly. Invoke init_fatal_signal_set. Invoke asyncsafe_close instead of close. (fclose_variant_temp): New function. (fclose_temp, fwriteerror_temp, close_stream_temp): Use it. * modules/clean-temp (Depends-on): Add asyncsafe-spin, linked-list. 2020-07-04 Bruno Haible clean-temp: Make multithread-safe, part 1. * lib/clean-temp.c: Include glthread/lock.h. (cleanup_list_lock): New variable. (register_temp_file, unregister_temp_file, register_temp_subdir, unregister_temp_subdir, cleanup_temp_dir_contents): Use it. (create_temp_dir): Likewise. Don't free the old array. (descriptors_lock): New variable. (register_fd, unregister_fd): Use it. * modules/clean-temp (Depends-on): Add lock. 2020-07-04 Bruno Haible fatal-signal: Make multithread-safe. * lib/fatal-signal.c (init_fatal_signals): Add comment. (do_init_fatal_signal_set): New function, extracted from init_fatal_signal_set. (fatal_signal_set_once): New variable. (init_fatal_signal_set): Use gl_once. 2020-07-03 Bruno Haible getrandom: Fix compilation error on native Windows (regr. 2020-06-28). * lib/getrandom.c: Don't include . Instead, define NTSTATUS. * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Include before . 2020-07-03 Bruno Haible dfa tests: Follow common file naming conventions. * tests/test-dfa-match-aux.c: Renamed from tests/dfa-match-aux.c. * tests/test-dfa-match.sh: Renamed from tests/dfa-match.sh. Update. * tests/test-dfa-invalid-char-class.sh: Renamed from tests/dfa-invalid-char-class.sh. Update. * modules/dfa-tests (Files, Makefile.am): Update. 2020-07-03 Bruno Haible asyncsafe-spin: Use GCC extended asm syntax for SunStudio 12 compiler. * lib/asyncsafe-spin.c (memory_barrier, atomic_compare_and_swap): Use the GCC extended asm syntax also for the Sun Studio 12 compilers. 2020-07-03 Bruno Haible asyncsafe-spin: Reduce code duplication. * lib/asyncsafe-spin.c (do_lock, do_unlock): New functions. (asyncsafe_spin_lock, asyncsafe_spin_unlock): Use them. * modules/asyncsafe-spin (configure.ac): Require AC_C_INLINE. 2020-07-03 Bruno Haible lchmod: Simplify after 2020-02-22 change. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Don't require AC_C_INLINE. 2020-07-03 Bruno Haible gen-uni-tables: Make sure the compiler does not barf on 'inline'. * modules/gen-uni-tables (configure.ac): Require AC_C_INLINE. 2020-07-03 Bruno Haible dfa: Make sure the compiler does not barf on 'inline'. * modules/dfa (configure.ac): Require AC_C_INLINE. 2020-07-03 Bruno Haible bitset: Make sure the compiler does not barf on 'inline'. * modules/bitset (configure.ac): New section. 2020-07-01 Paul Eggert manywarnings: improve port to GCC 10.1 * build-aux/gcc-warning.spec: Also list warnings that are default or are enabled by already-given flags. This lets us speed up checking for attributes, and makes the generated compilation commands shorter. Add -Wanalyzer-too-complex (too much noise). * m4/manywarnings.m4 (gl_MANYWARN_COMPLEMENT) (gl_MANYWARN_ALL_GCC): Use gl_AS_VAR_APPEND to append to shell variables that may have long values. (gl_MANYWARN_ALL_GCC): Omit flags that are default or are consequences of other flags, to speed up checking and shorten commands. tests: pacify gcc -fanalyzer on zerosize_ptr * tests/test-memcasecmp.c (main): * tests/test-memchr.c (main): * tests/test-memchr2.c (main): * tests/test-memcmp.c (main): * tests/test-memmem.c (main): * tests/test-memrchr.c (main): * tests/unistr/test-chr.h (main): * tests/unistr/test-cmp.h (test_cmp): Check whether zerosize_ptr returns NULL before using it. This pacifies GCC 10.1’s new fanalyzer option, and matches other uses of zerosize_ptr. 2020-07-01 Bruno Haible asyncsafe-spin: Add tests. * tests/test-asyncsafe-spin1.c: New file. * tests/test-asyncsafe-spin2.c: New file, based on tests/test-lock.c and tests/test-pthread-spin.c. * modules/asyncsafe-spin-tests: New file. 2020-07-01 Bruno Haible asyncsafe-spin: New module. * lib/asyncsafe-spin.h: New file. * lib/asyncsafe-spin.c: New file, based on lib/pthread-spin.c. * modules/asyncsafe-spin: New file. 2020-07-01 Bruno Haible windows-spin: Fix race condition on multiprocessor systems. * lib/windows-spin.c (glwthread_spin_init): Add a memory barrier. 2020-07-01 Bruno Haible pthread-spin: Add optimized fallback for GCC versions >= 4.1, < 4.7. * lib/pthread-spin.c (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): For GCC >= 4.1, < 4.7, use an implementation based on other GCC built-ins. 2020-07-01 Bruno Haible pthread-spin: Optimize fallback for GCC versions >= 4.7. * lib/pthread-spin.c (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Use a lock word instead of a lock byte. 2020-07-01 Bruno Haible pthread-spin: Add error checking. * lib/pthread-spin.c: Include . (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock) [GCC>=4.7]: Prefer an implementation that verifies the unlocks. * modules/pthread-spin (Depends-on): Add stdbool. 2020-07-01 Bruno Haible pthread-spin: Add tests. * tests/test-pthread-spin.c: New file, based on tests/test-lock.c. * modules/pthread-spin-tests: New file. 2020-07-01 Bruno Haible tests: Reduce code duplication. * tests/atomic-int-posix.h: New file, extracted from tests/test-pthread-mutex.c. * tests/test-pthread-mutex.c: Include it. Remove the corresponding code. * tests/test-pthread-rwlock.c: Likewise. * modules/pthread-mutex-tests (Files): Add tests/atomic-int-posix.h. * modules/pthread-rwlock-tests (Files): Likewise. 2020-07-01 Bruno Haible tests: Refactor. * tests/atomic-int-isoc.h: New file, extracted from tests/test-mtx.c. * tests/test-mtx.c: Include it. Remove the corresponding code. * modules/mtx-tests (Files): Add tests/atomic-int-isoc.h. 2020-07-01 Bruno Haible tests: Refactor. * tests/atomic-int-gnulib.h: New file, extracted from tests/test-lock.c. * tests/test-lock.c: Include it. Remove the corresponding code. * modules/lock-tests (Files): Add tests/atomic-int-gnulib.h. 2020-06-29 Bruno Haible sys_socket: Don't define socklen_t if it is already defined on mingw. Reported by Keith Marshall in , by Rahul Das in , and by Eli Zaretskii in . * lib/sys_socket.in.h (socklen_t): Remove definition. 2020-06-29 Bruno Haible alloca-opt: Fix warning on mingw. Reported and solution by Eli Zaretskii in . * lib/alloca.in.h: On mingw, include and then test again whether alloca is defined. 2020-06-28 Paul Eggert getrandom: do not depend on ‘open’ on mingw Similarly for at-internal, getloadavg. These modules do not call the ‘open’ function when they are compiled on mingw. On mingw, this avoids having to compile open.c when building Emacs, which does its own thing with ‘open’. * modules/at-internal, modules/getloadavg, modules/getrandom: (Depends-on): Don’t depend on ‘open’ on mingw. (Depends-on): Require AC_CANONICAL_HOST, for host_os. * modules/getloadavg (Depends-on): Depend on intprops, open, stdbool, stdlib only if compiling getloadavg.c. 2020-06-28 Bruno Haible doc: Add a note about sigprocmask vs. pthread_sigmask. * doc/posix-functions/sigprocmask.texi: Add note. 2020-06-28 Bruno Haible getrandom: Fix compilation errors on older versions of mingw. Reported by Eli Zaretskii in . * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Test whether exists. * lib/getrandom.c: If is not available, include and define/declare BCRYPT_ALG_HANDLE, BCRYPT_USE_SYSTEM_PREFERRED_RNG, BCryptGenRandom ourselves. 2020-06-28 Bruno Haible clean-temp: Fix wrong errno in error message. * lib/clean-temp.c (create_temp_dir): Save errno around unblock_fatal_signals call. 2020-06-27 Bruno Haible fatal-signal: Make multithread-safe. * lib/fatal-signal.c (at_fatal_signal): Don't free the old actions array. 2020-06-27 Bruno Haible clean-temp: Don't force deletion of temporary files on native Windows. * lib/clean-temp.h (open_temp, fopen_temp): Add delete_on_close argument. * lib/clean-temp.c (open_temp, fopen_temp): Likewise. * NEWS: Mention the change. * lib/javacomp.c (write_temp_file): Update. 2020-06-27 Bruno Haible fatal-signal: Make multithread-safe. * lib/fatal-signal.c: Include glthread/lock.h. (at_fatal_signal_lock): New variable. (at_fatal_signal): Use it. (fatal_signals_block_lock, fatal_signals_block_counter): New variables. (block_fatal_signals, unblock_fatal_signals): Use them. * modules/fatal-signal (Depends-on): Add lock. 2020-06-27 Paul Eggert getloadavg: don’t depend on fopen-gnu This is for Emacs, which does not need fopen-gnu for anything else, and which would need it only on a NetBSD platform where getloadavg does not work (does that even happen?). * lib/getloadavg.c (getloadavg) [__NetBSD__]: Use open, not fopen. * modules/getloadavg (Depends-on): Remove fopen-gnu. * tests/test-getloadavg.c (main): Fix typo. 2020-06-27 Bruno Haible tempname et al.: Fix link errors on MSVC (regression from 2020-05-31). * modules/tempname (Link): New section. * modules/mkdtemp (Link): Likewise. * modules/clean-temp (Link): Likewise. * modules/mkstemp (Link): Likewise. * modules/stdlib-safer (Link): Likewise. * modules/mkstemps (Link): Likewise. * modules/mkostemp (Link): Likewise. * modules/mkostemps (Link): Likewise. * modules/tmpfile (Link): Likewise. * modules/tmpfile-safer (Link): Likewise. * modules/javacomp (Link): Add $(LIB_GETRANDOM). * modules/argv-iter-tests (Makefile.am): Link test-argv-iter with $(LIB_GETRANDOM). * NEWS: Mention the changes. 2020-06-27 Bruno Haible fopen-gnu: Simplify code. * lib/fopen.c: Include . (rpl_fopen): Use a single variable open_flags instead of open_flags_standard and open_flags_gnu. Make open_flags_gnu a bool. * modules/fopen (Depends-on): Add stdbool. 2020-06-26 Bruno Haible canonicalize: Improve documentation. * lib/canonicalize.h (canonicalize_filename_mode): Document the failure return convention. 2020-06-26 Bruno Haible xgetcwd: Improve documentation. * lib/xgetcwd.c (xgetcwd): Document the failure return convention. 2020-06-26 Bruno Haible getcwd: Improve documentation. * lib/getcwd.c (__getcwd): Document the failure return convention. 2020-06-26 Bruno Haible fchdir: Improve documentation. * lib/fchdir.c (get_name, _gl_register_fd): Document the failure return convention. 2020-06-26 Bruno Haible filenamecat-lgpl: Set errno upon failure. * lib/filenamecat-lgpl.c (mfile_name_concat): Document the failure return convention. * modules/filenamecat-lgpl (Depends-on): Add malloc-posix. 2020-06-26 Bruno Haible areadlink-with-size: Set errno upon failure. * lib/areadlink-with-size.c (areadlink_with_size): Set errno when malloc fails. * lib/areadlinkat-with-size.c (areadlinkat_with_size): Add comment. 2020-06-26 Bruno Haible copy-file: Shrink dependencies. * modules/copy-file (Depends-on): Remove acl. Add acl-permissions, qcopy-acl. 2020-06-26 Bruno Haible doc: Mention declaration fixes implemented by some modules. * doc/posix-functions/chdir.texi: Mention the module 'chdir'. * doc/posix-functions/close.texi: Mention that Gnulib makes the function declaration appear in . * doc/posix-functions/dup.texi: Likewise. * doc/posix-functions/dup2.texi: Likewise. * doc/posix-functions/gethostname.texi: Likewise. * doc/posix-functions/isatty.texi: Likewise. * doc/posix-functions/lseek.texi: Likewise. * doc/posix-functions/unlink.texi: Likewise. * doc/posix-functions/read.texi: Mention the module 'read'. * doc/posix-functions/write.texi: Mention the effects of the module 'write'. 2020-06-25 Marc Nieper-Wißkirchen c-dtoastr, c-ldtoastr: new modules These modules provide the same functionality as the modules dtoastr and ldtoastr except for the formatting taking place in the C locale. * MODULES.html.sh: Add c-dtoastr and c-ldtoastr. * lib/c-dtoastr.c, lib/c-ldtoastr.c: New files. * lib/ftoastr.c: Prefix exported functions when the macro C_LOCALE is defined. Use c_snprintf and c_strtod/c_strtold instead of snprintf and strtod/strtold whhen the macro C_LOCALE is defined. * lib/ftoastr.h: Add prototypes for c_dtoastr and c_ldtoastr. * modules/c-dtoastr, modules/c-dtoastr-tests, modules/c-ldtoastr, modules/c-ldtoastr-tests: New files. * tests/test-c-dtoastr.c, tests/test-c-dtoastr.sh, tests-c-ldtoastr.c tests-c-ldtoastr.sh: New files. 2020-06-21 Bruno Haible tzset: Fix compilation warnings on mingw (regression from 2017-05-01). * lib/tzset.c: Include , . 2020-06-16 Bruno Haible thread: Avoid possible compiler warnings in uses of gl_thread_exit. * lib/glthread/thread.h (gl_thread_exit): Add a cast to void. 2020-06-16 Bruno Haible thread, thrd: Avoid a compiler warning. * lib/windows-thread.h (glwthread_thread_exit): Mark as non-returning. 2020-06-16 Biswapriyo Nath (tiny change) windows-thread: Avoid a compiler warning. * lib/windows-thread.h (glwthread_thread_exit): Change return type to void. * lib/windows-thread.c (glwthread_thread_exit): Likewise. 2020-06-15 Bruno Haible unictype/joininggroup-name: Fix warning on 64-bit mingw. Reported by Biswapriyo Nath in . * lib/unictype/joininggroup_name.c (ELEM): Cast struct offset to size_t first. 2020-06-06 Bruno Haible calloc-gnu tests: Avoid a test failure with clang. * tests/test-calloc-gnu.c (main): Mark the pointer variable as 'volatile', to defeat compiler optimizations. 2020-06-01 Paul Eggert getloadavg: fix double-increment bug * lib/getloadavg.c (getloadavg): Fix double-increment typo on Linux without glibc, Android, Cygwin. This fixes a bug I introduced in 2011-02-08T20:23:29Z!eggert@cs.ucla.edu. Problem and fix reported by Semen Verchenko in: https://lists.gnu.org/r/bug-gnulib/2020-06/msg00007.html tempname: use getrandom, not getentropy This removes a dependency, as getentropy depends on getrandom. * lib/tempname.c: Include sys/random.h instead of unistd.h. (RANDOM_BITS) [!_LIBC]: Use getrandom, not getentropy. * modules/tempname (Depends-on): Depend on getrandom, not getentropy. 2020-06-01 Bruno Haible doc: New chapter 'Multithreading'. * doc/multithread.texi: New file. * doc/gnulib.texi: Include it. 2020-06-01 Bruno Haible doc: Move 'Running self-tests under valgrind' section. * doc/gnulib.texi (Build Infrastructure Modules): Include valgrind-tests.texi here... (Miscellaneous Notes): ... not here. 2020-06-01 Bruno Haible doc: Move 'Visual Studio Compatibility' section. * doc/gnulib.texi (Native Windows Support): Include ld-output-def.texi here... (Build Infrastructure Modules): ... not here. 2020-06-01 Paul Eggert doc: improve randomness discussion Inspired by comments from Jeffrey Walton in: https://lists.gnu.org/r/bug-gnulib/2020-06/msg00002.html * doc/glibc-functions/getentropy.texi (getentropy): * doc/glibc-functions/getrandom.texi (getrandom): Improve discussion of problems with "random" data, and cite Ristenpart & Yilek. Also, mention GRND_INSECURE. 2020-06-01 Bruno Haible doc: Fix Texinfo syntax error. * doc/glibc-functions/getrandom.texi: Add missing '@item'. 2020-06-01 Asher Gordon doc: Change '.' to '@.' where appropriate. * doc/c-ctype.texi: Change '.' to '@.' where appropriate. * doc/glibc-functions/fstatfs.texi: Likewise. * doc/glibc-functions/fts_children.texi: Likewise. * doc/glibc-functions/fts_read.texi: Likewise. * doc/glibc-functions/getdirentries.texi: Likewise. * doc/glibc-functions/mkostemp.texi: Likewise. * doc/glibc-functions/mkostemps.texi: Likewise. * doc/glibc-functions/mkstemps.texi: Likewise. * doc/glibc-functions/preadv.texi: Likewise. * doc/glibc-functions/pwritev.texi: Likewise. * doc/glibc-functions/sendfile.texi: Likewise. * doc/glibc-functions/statfs.texi: Likewise. * doc/gnulib-intro.texi: Likewise. * doc/gnulib-tool.texi: Likewise. * doc/intprops.texi: Likewise. * doc/lib-symbol-visibility.texi: Likewise. * doc/licenses-texi.texi: Likewise. * doc/pastposix-functions/bcmp.texi: Likewise. * doc/pastposix-functions/bcopy.texi: Likewise. * doc/pastposix-functions/bzero.texi: Likewise. * doc/pastposix-functions/ecvt.texi: Likewise. * doc/pastposix-functions/fcvt.texi: Likewise. * doc/pastposix-functions/ftime.texi: Likewise. * doc/pastposix-functions/gcvt.texi: Likewise. * doc/pastposix-functions/getwd.texi: Likewise. * doc/pastposix-functions/index.texi: Likewise. * doc/pastposix-functions/mktemp.texi: Likewise. * doc/pastposix-functions/rindex.texi: Likewise. * doc/pastposix-functions/wcswcs.texi: Likewise. * doc/posix-functions/aio_cancel.texi: Likewise. * doc/posix-functions/aio_error.texi: Likewise. * doc/posix-functions/aio_fsync.texi: Likewise. * doc/posix-functions/aio_read.texi: Likewise. * doc/posix-functions/aio_return.texi: Likewise. * doc/posix-functions/aio_suspend.texi: Likewise. * doc/posix-functions/aio_write.texi: Likewise. * doc/posix-functions/creat.texi: Likewise. * doc/posix-functions/ctime.texi: Likewise. * doc/posix-functions/daylight.texi: Likewise. * doc/posix-functions/fgetpos.texi: Likewise. * doc/posix-functions/fopen.texi: Likewise. * doc/posix-functions/freopen.texi: Likewise. * doc/posix-functions/fseeko.texi: Likewise. * doc/posix-functions/fsetpos.texi: Likewise. * doc/posix-functions/fstatat.texi: Likewise. * doc/posix-functions/fstatvfs.texi: Likewise. * doc/posix-functions/ftello.texi: Likewise. * doc/posix-functions/ftruncate.texi: Likewise. * doc/posix-functions/getrlimit.texi: Likewise. * doc/posix-functions/lio_listio.texi: Likewise. * doc/posix-functions/localtime.texi: Likewise. * doc/posix-functions/lseek.texi: Likewise. * doc/posix-functions/mkstemp.texi: Likewise. * doc/posix-functions/mktime.texi: Likewise. * doc/posix-functions/open.texi: Likewise. * doc/posix-functions/openat.texi: Likewise. * doc/posix-functions/opendir.texi: Likewise. * doc/posix-functions/pread.texi: Likewise. * doc/posix-functions/pwrite.texi: Likewise. * doc/posix-functions/readdir.texi: Likewise. * doc/posix-functions/readdir_r.texi: Likewise. * doc/posix-functions/scandir.texi: Likewise. * doc/posix-functions/seekdir.texi: Likewise. * doc/posix-functions/setrlimit.texi: Likewise. * doc/posix-functions/statvfs.texi: Likewise. * doc/posix-functions/strftime.texi: Likewise. * doc/posix-functions/telldir.texi: Likewise. * doc/posix-functions/timezone.texi: Likewise. * doc/posix-functions/tmpfile.texi: Likewise. * doc/posix-functions/truncate.texi: Likewise. * doc/posix-functions/tzname.texi: Likewise. * doc/posix-functions/wcsftime.texi: Likewise. * doc/windows-sockets.texi: Likewise. 2020-05-31 Paul Eggert getrandom-tests: do not assume GRND_RANDOM yields short read * tests/test-getrandom.c (main): Omit assertion that getrandom (b, sizeof b, GRND_RANDOM | GRND_NONBLOCK) < sizeof b when b’s size is 100000. This assertion fails with Linux kernel 5.6.13, as that kernel ignores the GRND_RANDOM flag. The separate blocking pool is going away in the Linux kernel, and they’ve added a flag GRND_INSECURE instead; see: https://lore.kernel.org/linux-api/705c5a091b63cc5da70c99304bb97e0109be0a26.1577088521.git.luto@kernel.org/ The assertion was iffy anyway; what’s to prevent a kernel from lazily filling a large buffer with random bytes? read-file-test: pacify --enable-gcc-warnings * tests/test-read-file.c (test_read_file): Now static. tempname: merge from glibc and coreutils Also, merge in Gnulib’s more-recent methods of making it easier to share between Gnulib and glibc, and fix a few randomness glitches. * lib/tempname.c: Include libc-config.h, not config.h, if !_LIBC. (__set_errno): Remove; libc-config.h does that for us. Do not include . (__secure_getenv) [_LIBC]: New macro. (__try_tempname, __getpid, __gettimeofday) [!_LIBC]: Remove macros. (RANDOM_BITS): Rewrite. (RANDOM_VALUE_MAX, BASE_62_DIGITS, BASE_62_POWER): New macros. (random_value): New typedef. (try_file, try_dir, try_nocreate): Move up. (gen_tempname_len, try_tempname_len): New functions. (gen_tempname_len): Use a constant array rather than a switch. (try_tempname_len): Don’t assume string length fits in int. Generalize use of RANDOM_BITS. If _LIBC, don’t assume RANDOM_BITS has enough entropy (it’s a bit short). (__gen_tempname): Rewrite in terms of gen_tempname_len. (__try_tempname): Rewrite in terms of try_tempname_len. * lib/tempname.h (gen_tempname_len, try_tempname_len): New decls. * modules/tempname (Depends-on): Remove gettimeofday, sys_time. Add getentropy, libc-config. 2020-05-31 Bruno Haible getrandom, getentropy: Mention the crypto/gc-random module. Suggested by Simon Josefsson in . * doc/glibc-functions/getrandom.texi: Mention the quality issues and the crypto/gc-random module. * doc/glibc-functions/getentropy.texi: Likewise. 2020-05-31 Bruno Haible getentropy: Enhance tests. * tests/test-getentropy.c (main): Add one more test. * tests/test-unistd-c++.cc: Check the signature of getentropy. 2020-05-31 Bruno Haible getentropy: Work around a macOS and Solaris problem. * lib/unistd.in.h: Include , when needed for the 'getentropy' module. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize UNISTD_H_HAVE_SYS_RANDOM_H. * m4/sys_random_h.m4 (gl_HEADER_SYS_RANDOM): Set UNISTD_H_HAVE_SYS_RANDOM_H. * modules/unistd (Makefile.am): Substitute UNISTD_H_HAVE_SYS_RANDOM_H. * doc/glibc-functions/getentropy.texi: Document the macOS and Solaris problem. List more platforms. 2020-05-31 Paul Eggert fnmatch: merge from glibc Also, merge in Gnulib’s more-recent methods of making it easier to share between Gnulib and glibc. * lib/fnmatch.c: Reorder includes to match glibc better. Include libc-config.h instead of config.h. Include alloca.h only if _LIBC || HAVE_ALLOCA. Do not include "../locale/elem-hash.h" if _LIBC. Define macros for btowc, etc. if _LIBC. All uses simplified. Define FALLTHROUGH if _LIBC, instead of including attribute.h. Include intprops.h, since glibc has it now. (SIZE_MAX): Remove; use (size_t) -1 instead. Omit the "Comment out all this code" ifdef, since Gnulib has never really needed it. (STREQ): Remove; no longer used. (__libc_use_alloca, alloca, alloca_account): Define as needed if !_LIBC. (ISWCTYPE): Remove; all uses replaced by iswctype. (HANDLE_MULTIBYTE): Remove. All uses removed by assuming true. (internal_function): Remove. All uses removed. (STRUCT): New macro. (WIDE_CHAR_VERSION): Define to 0 instead of leaving undefined. (WMEMCMP): New macro. (FINDIDX): Define if _LIBC, and include and . (fnmatch): Prefer __glibc_likely and __glibc_unlikely to __builtin_expect. Check for integer overflow more systematically. Account for alloca storage better when recursive. Use strnlen instead of strlen for efficiency. * lib/fnmatch_loop.c: Include stdint.h if _LIBC, for int32_t etc. (struct STRUCT): New type. (FCT, EXT): New ENDS and ALLOCA_USED args. All callers changed. (FCT): Prefer __glibc_unlikely to __builtin_expect. Simplify by assuming WIDE_CHAR_SUPPORT. Copy _LIBC code from glibc without worrying Gnulib compatibility. Cast cold to UCHAR to avoid signedness warning. (END): Check for invalid pattern. (EXT): Improve alloca/malloc checking (taken from glibc), and improve it some more by using intprops.h and checking for integer overflow and using bool for booleans. * lib/libc-config.h (compat_symbol): New macro. (versioned_symbol): Make it ‘extern int dummy’ so that it’s acceptable to non-GCC when a trailing semicolon is added. * modules/fnmatch (Depends-on): Add alloca-opt, intprops, libc-config, strnlen. Remove alloca. 2020-05-31 Bruno Haible getrandom: Doc and test tweaks. * lib/getrandom.c (getrandom): Mention that it never returns 0, and that it sets errno when failing. * tests/test-getrandom.c (main): Disable the high-quality check on those platforms on which it fails. * doc/glibc-functions/getrandom.texi: Add Minix, AIX, HP-UX, IRIX, Cygwin to the list of platforms that don't have the function. Add a note about the quality of the result. * doc/glibc-headers/sys_random.texi: Don't mention the 'getrandom' declaration; this is fixed by module 'getrandom'. 2020-05-31 Bruno Haible getrandom: Add support for native Windows. * lib/getrandom.c: Include , , , . (CRYPT_VERIFY_CONTEXT): New macro. (LoadLibrary, CryptAcquireContext): Redirect to the variant with suffix 'A'. (GetProcAddress): New macro. (BCryptGenRandomFuncType): New type. (BCryptGenRandomFunc, initialized): New variables. (initialize): New function. (getrandom): On native Windows, use API when available, and API as fallback. * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Set LIB_GETRANDOM. * modules/getrandom (Link): New section. * modules/getentropy (Link): Likewise. * modules/getrandom-tests (Makefile.am): Link test-getrandom against $(LIB_GETRANDOM). * modules/getentropy-tests (Makefile.am): Link test-getentropy against $(LIB_GETRANDOM). * modules/sys_random-c++-tests (Makefile.am): Link test-sys_random-c++ against $(LIB_GETRANDOM). * doc/glibc-functions/getrandom.texi: Mention the native Windows support. 2020-05-31 Bruno Haible getrandom: Simplify the determination of the random number devices. Suggested by Paul Eggert in . * lib/getrandom.c (NAME_OF_RANDOM_DEVICE, NAME_OF_NONCE_DEVICE): New macros. * modules/getrandom (Depends-on): Remove crypto/gc-random. 2020-05-31 Bruno Haible crypto/gc-random: Fix list of crypto devices for Solaris. * m4/gc-random.m4 (gl_GC_RANDOM): Don't special-case Solaris. 2020-05-31 Akim Demaille list: fix GCC warnings * lib/gl_anytree_list2.h (gl_tree_iterator_free) (gl_tree_next_node, gl_tree_node_nx_set_value) (gl_tree_previous_node, gl_tree_next_node): Mark unused arguments. * lib/gl_anytree_oset.h (gl_tree_iterator_free): Likewise. * lib/gl_anylinked_list2.h (gl_linked_node_value) (gl_linked_node_nx_set_value, gl_linked_iterator_free): Likewise. * lib/gl_anytreehash_list2.h (gl_tree_search_from_to): Avoid using the same variable name in nested scopes. 2020-05-31 Bruno Haible list-c++, set-c++, oset-c++, map-c++, omap-c++: Don't fool the compiler. Reported by Akim Demaille in . * lib/gl_list.hh (gl_List::iterator::next): Avoid a reinterpret_cast. * lib/gl_set.hh (gl_Set::iterator::next): Likewise. * lib/gl_oset.hh (gl_OSet::iterator::next): Likewise. * lib/gl_map.hh (gl_Map::iterator::next): Likewise. * lib/gl_omap.hh (gl_OMap::iterator::next): Likewise. 2020-05-30 Bruno Haible wmemchr: Relicense under LGPLv2+. * modules/wmemchr (License): Set to LGPLv2+. 2020-05-30 Bruno Haible wmempcpy: New module. Reported by Paul Eggert in . * lib/wchar.in.h (wmempcpy): New declaration. * lib/wmempcpy.c: New file. * m4/wmempcpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmempcpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMPCPY, HAVE_WMEMPCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMPCPY, HAVE_WMEMPCPY. * modules/wmempcpy: New file. * tests/test-wchar-c++.cc: Check the signature of wmempcpy. * doc/glibc-functions/wmempcpy.texi: Mention the new module. * modules/mempcpy (Description): Fix typo. 2020-05-30 Bruno Haible crypto/gc-random: Fix list of crypto devices for NetBSD, OpenBSD. * m4/gc-random.m4 (gl_GC_RANDOM): Don't special-case NetBSD and OpenBSD. 2020-05-30 Bruno Haible sys_random: Work around macOS bug. * m4/sys_random_h.m4 (gl_HEADER_SYS_RANDOM): Include and before . * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Likewise. * lib/sys_random.in.h: On macOS, include and first. * doc/glibc-headers/sys_random.texi: Mention the macOS problem. 2020-05-30 Bruno Haible getrandom: Override incompatible system function on Solaris 11. * lib/sys_random.in.h (getrandom): Override if REPLACE_GETRANDOM is 1. * lib/getrandom.c (getrandom): When the system has getrandom, just invoke it. * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Set REPLACE_GETRANDOM if the system's getrandom function's prototype is not the expected one. * m4/sys_random_h.m4 (gl_SYS_RANDOM_H_DEFAULTS): Initialize REPLACE_GETRANDOM. * modules/sys_random (Makefile.am): Substitute REPLACE_GETRANDOM. * modules/getrandom (modules/getrandom): Consider REPLACE_GETRANDOM. * tests/test-getrandom.c (main): Allow error EINVAL as an alternative to EAGAIN. * doc/glibc-functions/getrandom.texi: Mention the new module and the Solaris problem. 2020-05-30 Bruno Haible sys_random: Add C++ tests. * tests/test-sys_random-c++.cc: New file. * modules/sys_random-c++-tests: New file. * modules/sys_random-tests (Depends-on): Depend on it. sys_random: Add tests. * tests/test-sys_random.c: New file. * modules/sys_random-tests: New file. sys_random: New module. * lib/sys_random.in.h: Use the common idioms for overridable header files. * m4/sys_random_h.m4: New file. * m4/getrandom.m4 (gl_FUNC_GETRANDOM): Require gl_SYS_RANDOM_H_DEFAULTS. * modules/sys_random: New file. * modules/getrandom (Files): Remove lib/sys_random.in.h. (Depends-on): Add sys_random. (configure.ac): Use gl_SYS_RANDOM_MODULE_INDICATOR, not gl_UNISTD_MODULE_INDICATOR. (Makefile.am): Don't generate sys/random.h here. * doc/glibc-headers/sys_random.texi: New file. * doc/gnulib.texi: Include it. 2020-05-30 Bruno Haible unistd: Remove conflicting declaration of getrandom(). * lib/unistd.in.h (getrandom): Remove declaration. * m4/unistd_h.m4 (gl_UNISTD_H): Don't test whether getrandom is declared. (gl_UNISTD_H_DEFAULTS): Don't initialize GNULIB_GETRANDOM, HAVE_GETRANDOM. * modules/unistd (Makefile.am): Don't substitute GNULIB_GETRANDOM, HAVE_GETRANDOM. 2020-05-30 Bruno Haible getrandom: Add tests. * tests/test-getrandom.c: New file. * modules/getrandom-tests: New file. 2020-05-30 Bruno Haible crypto/gc-random: Fix link error on MSVC. * m4/gc-random.m4 (gl_GC_RANDOM): Set LIB_GC_RANDOM. * modules/crypto/gc-random (Link): New section. * modules/crypto/gc-tests (Makefile.am): Link test-gc against $(LIB_GC_RANDOM). 2020-05-30 Bruno Haible Don't assume that UNICODE is not defined. Many Windows API functions are defined differently (redirecting to a function with suffix 'W') if the application defines the macro UNICODE than by default (redirecting to a function with suffix 'A'). * lib/clean-temp.c (OSVERSIONINFO, GetVersionEx): Redirect to the variant with suffix 'A'. * lib/dirent-private.h (WIN32_FIND_DATA): Likewise. * lib/gc-gnulib.c (CryptAcquireContext): Likewise. * lib/getaddrinfo.c (GetModuleHandle): Likewise. * lib/getlogin.c (GetUserName): Likewise. * lib/getlogin_r.c (GetUserName): Likewise. * lib/gettimeofday.c (LoadLibrary): Likewise. * lib/isatty.c (LoadLibrary, QueryFullProcessImageName): Likewise. * lib/link.c (GetModuleHandle, CreateHardLink): Likewise. * lib/localename.c (GetLocaleInfo, EnumSystemLocales): Likewise. * lib/mountlist.c (GetDriveType): Likewise. * lib/nonblocking.c (GetNamedPipeHandleState): Likewise. * lib/opendir.c (WIN32_FIND_DATA, GetFullPathName, FindFirstFile): Likewise. * lib/physmem.c (GetModuleHandle): Likewise. * lib/poll.c (GetModuleHandle, PeekConsoleInput, CreateEvent, PeekMessage, DispatchMessage): Likewise. * lib/progreloc.c (GetModuleFileName): Likewise. * lib/putenv.c (SetEnvironmentVariable): Likewise. * lib/read.c (GetNamedPipeHandleState): Likewise. * lib/readdir.c (FindNextFile): Likewise. * lib/relocatable.c (GetModuleFileName): Likewise. * lib/rename.c (MoveFileEx): Likewise. * lib/rewinddir.c (FindFirstFile): Likewise. * lib/select.c (GetModuleHandle, PeekConsoleInput, CreateEvent, PeekMessage, DispatchMessage): Likewise. * lib/sethostname.c (GetComputerNameEx, SetComputerNameEx): Likewise. * lib/socket.c (WSASocket): Likewise. * lib/stat-w32.c (LoadLibrary, GetFinalPathNameByHandle): Likewise. * lib/stat.c (WIN32_FIND_DATA, CreateFile, FindFirstFile): Likewise. * lib/stdio-read.c (GetNamedPipeHandleState): Likewise. * lib/stdio-write.c (GetNamedPipeHandleState): Likewise. * lib/tmpdir.c (GetTempPath): Likewise. * lib/tmpfile.c (OSVERSIONINFO, GetVersionEx, GetTempPath): Likewise. * lib/uname.c (OSVERSIONINFO, GetVersionEx): Likewise. * lib/utime.c (CreateFile, GetFileAttributes): Likewise. * lib/windows-cond.c (CreateEvent): Likewise. * lib/windows-rwlock.c (CreateEvent): Likewise. * lib/windows-timedmutex.c (CreateEvent): Likewise. * lib/windows-timedrecmutex.c (CreateEvent): Likewise. * lib/windows-timedrwlock.c (CreateEvent): Likewise. * lib/write.c (GetNamedPipeHandleState): Likewise. 2020-05-30 Bruno Haible physmem: Fix compilation errors on MSVC. * lib/physmem.c (PFN_MS_EX): Use BOOL, not WINBOOL. * modules/physmem (Depends-on): Add unistd. 2020-05-29 Bruno Haible gnulib-tool: Fix link errors with a particular set of modules on mingw. * gnulib-tool (func_emit_tests_Makefile_am): Add ../lib/libgnu.a to LDADD a second time, after the second occurrence of libtests.a. * pygnulib/GLEmiter.py (tests_Makefile_am): Likewise. 2020-05-29 Bruno Haible fnmatch: Rely on more gnulib modules. * modules/fnmatch (Depends-on): Add btowc, isblank, iswctype, wmemchr, wmempcpy, mempcpy. * lib/fnmatch.c: Assume that HAVE_WCTYPE_H, HAVE_BTOWC, HAVE_ISWCTYPE, HAVE_WMEMCHR, HAVE_WMEMPCPY, HAVE_ISBLANK, HAVE_DECL_ISBLANK, HAVE_MEMPCPY are all 1. * m4/fnmatch.m4 (gl_PREREQ_FNMATCH): Don't test for btowc, isblank, iswctype, mempcpy, wmemchr, wmemcpy, wmempcpy, . 2020-05-29 Bruno Haible Avoid dynamic lookup of Windows API functions when possible. * lib/getaddrinfo.c (GetProcAddress, getaddrinfo_func, freeaddrinfo_func, getnameinfo_func, getaddrinfo_ptr, freeaddrinfo_ptr, getnameinfo_ptr): Don't define in a build for Windows XP or higher. (use_win32_p): Define differently. * lib/link.c (GetProcAddress, CreateHardLinkFuncType, CreateHardLinkFunc, initialized, initialize): Don't define in a build for Windows XP or higher. 2020-05-29 Daiki Ueno read-file: disable buffering if RF_SENSITIVE is set * lib/read-file.c (read_file): Call setvbuf if RF_SENSITIVE. Suggested by Glenn Strauss. (fread_file): Suggest calling setvbuf before calling this function. Suggested by Bruno Haible. 2020-05-29 Bruno Haible wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset: Fix autoconf test. * m4/wmemchr.m4 (gl_FUNC_WMEMCHR): Link, not only compile, the test program. * m4/wmemcmp.m4 (gl_FUNC_WMEMCMP): Likewise. * m4/wmemcpy.m4 (gl_FUNC_WMEMCPY): Likewise. * m4/wmemmove.m4 (gl_FUNC_WMEMMOVE): Likewise. * m4/wmemset.m4 (gl_FUNC_WMEMSET): Likewise. 2020-05-29 Bruno Haible Fix compilation error on native Windows (regression from 2020-05-28). Reported by Daiki Ueno. * lib/gettimeofday.c (GetSystemTimePreciseAsFileTimeFunc): Define as macro when not using dynamic loading. * lib/isatty.c (GetNamedPipeClientProcessIdFunc, QueryFullProcessImageNameFunc): Likewise. * lib/stat-w32.c (GetFileInformationByHandleExFunc, GetFinalPathNameByHandleFunc): Likewise. 2020-05-29 Daiki Ueno fopen-gnu-tests: fix "\x" escape usage * tests/test-fopen-gnu.c (DATA): Use safer escape sequence. 2020-05-28 Bruno Haible Avoid dynamic loading of Windows API functions when possible. Reported by Steve Lhomme in . * lib/gettimeofday.c (GetProcAddress, GetSystemTimePreciseAsFileTimeFuncType, GetSystemTimePreciseAsFileTimeFunc, initialized, initialize): Don't define in a build for Windows 8 or higher. * lib/isatty.c (GetProcAddress, GetNamedPipeClientProcessIdFuncType, GetNamedPipeClientProcessIdFunc, QueryFullProcessImageNameFuncType, QueryFullProcessImageNameFunc, initialized, initialize): Don't define in a build for Windows Vista or higher. * lib/stat-w32.c (GetProcAddress, GetFileInformationByHandleExFuncType, GetFileInformationByHandleExFunc, GetFinalPathNameByHandleFuncType, GetFinalPathNameByHandleFunc, initialized, initialize): Likewise. 2020-05-28 Paul Eggert explicit_bzero-tests: improve -Wmissing-declarations pacification * tests/test-explicit_bzero.c: Now noinline. Suggested by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00300.html 2020-05-28 Bruno Haible Fix build errors due to read-file changes (regression from 2020-05-27). * lib/git-merge-changelog.c (read_changelog_file): Update read_file invocation. * tests/test-sameacls.c (main): Likewise. * tests/test-pipe-filter-gi1.c (main): Call read_file instead of read_binary_file. * tests/test-pipe-filter-ii1.c (main): Likewise. 2020-05-28 Bruno Haible fts: Make more robust in multithreaded applications. * lib/fts.c (fts_open): Pass an O_CLOEXEC flag to open(). * modules/fts (Depends-on): Add 'open'. 2020-05-28 Bruno Haible relocatable-prog: Make more robust in multithreaded applications. * lib/progreloc.c (O_CLOEXEC): Define fallback to 0 when use from module relocatable-prog-wrapper. (find_executable): Pass an O_CLOEXEC flag to open(). * modules/relocatable-prog (Depends-on): Add 'open'. 2020-05-28 Bruno Haible getloadavg: Make more robust in multithreaded applications. * lib/getloadavg.c (getloadavg): Pass an O_CLOEXEC flag to open(). Simplify use of O_CLOEXEC. * modules/getloadavg (Depends-on): Add 'open'. 2020-05-28 Bruno Haible vma-iter: Make more robust in multithreaded applications. * lib/vma-iter.c (rof_open, vma_iterate): Pass an O_CLOEXEC flag to open(). * modules/vma-iter (Depends-on): Add 'open'. 2020-05-28 Bruno Haible truncate: Make more robust in multithreaded applications. * lib/truncate.c (truncate): Pass an O_CLOEXEC flag to open(). 2020-05-28 Bruno Haible pagealign_alloc: Make more robust in multithreaded applications. * lib/pagealign_alloc.c (pagealign_alloc): Pass an O_CLOEXEC flag to open(). * modules/pagealign_alloc (Depends-on): Add 'open'. 2020-05-28 Bruno Haible openat: Make more robust in multithreaded applications. * lib/openat.c (openat_needs_fchdir): Pass an O_CLOEXEC flag to open(). 2020-05-28 Bruno Haible at-internal: Make more robust in multithreaded applications. * lib/openat-proc.c (openat_proc_name): Pass an O_CLOEXEC flag to open(). 2020-05-28 Bruno Haible mountlist: Make more robust in multithreaded applications. * lib/mountlist.c (read_file_system_list): Pass an O_CLOEXEC flag to open(). * modules/mountlist (Depends-on): Add 'open'. 2020-05-28 Bruno Haible login_tty: Make more robust in multithreaded applications. * lib/login_tty.c (login_tty): Pass an O_CLOEXEC flag to open(). * modules/login_tty (Depends-on): Add 'open'. 2020-05-28 Bruno Haible javacomp: Make more robust in multithreaded applications. * lib/javacomp.c (get_classfile_version): Pass an O_CLOEXEC flag to open(). * modules/javacomp (Depends-on): Add 'open'. 2020-05-28 Bruno Haible getprogname: Make more robust in multithreaded applications. * lib/getprogname.c (getprogname): Pass an O_CLOEXEC flag to open(). * modules/getprogname (Depends-on): Add 'open'. 2020-05-28 Bruno Haible get_progname_of: Make more robust in multithreaded applications. * lib/get_progname_of.c (get_progname_of): Pass an O_CLOEXEC flag to open(). * modules/get_progname_of (Depends-on): Add 'open'. 2020-05-28 Bruno Haible get_ppid_of: Make more robust in multithreaded applications. * lib/get_ppid_of.c (get_ppid_of): Pass an O_CLOEXEC flag to open(). * modules/get_ppid_of (Depends-on): Add 'open'. 2020-05-28 Bruno Haible get-rusage-as: Make more robust in multithreaded applications. * lib/get-rusage-as.c (get_rusage_as_via_setrlimit): Pass an O_CLOEXEC flag to open(). * modules/get-rusage-as (Depends-on): Add 'open'. 2020-05-28 Bruno Haible crypto/gc: Make more robust in multithreaded applications. * lib/gc-gnulib.c (randomize): Pass an O_CLOEXEC flag to open(). * modules/crypto/gc (Depends-on): Add 'open'. 2020-05-28 Bruno Haible copy-file: Make more robust in multithreaded applications. * lib/copy-file.c (qcopy_file_preserving): Pass an O_CLOEXEC flag to open(). 2020-05-28 Bruno Haible chown: Make more robust in multithreaded applications. * lib/chown.c (rpl_chown): Pass an O_CLOEXEC flag to open(). 2020-05-28 Bruno Haible doc: Fix statement about O_CLOEXEC (wrong since 2017-08-14). * doc/posix-headers/fcntl.texi: Gnulib no longer defines O_CLOEXEC to 0. 2020-05-28 Daiki Ueno fopen-gnu: make 'b' flag can be used with 'e' on Windows * lib/fopen.c (rpl_fopen): Pass O_BINARY to open, if a 'b' flag is specified on Windows. * tests/test-fopen-gnu.c (DATA): New define. (main): Add test for reading binary files with an 'e' flag. 2020-05-27 Bruno Haible Don't assume that UNICODE is not defined. Some Windows types, such as TCHAR, LPTSTR, LPCTSTR, are defined differently if the application defines the macro UNICODE. Reported by Steve Lhomme in . * lib/link.c (CreateHardLinkFuncType): Use LPCSTR, not LPCTSTR. * lib/localename.c (enum_locales_fn): Use LPSTR, not LPTSTR. * lib/stat-w32.c (GetFinalPathNameByHandleFuncType): Likewise. 2020-05-27 Bruno Haible Improve pattern for defining _WIN32_WINNT. Newer versions of the Windows API may not only add, but also remove API functions. Therefore, when the user is e.g. building for Windows 10, we should not set _WIN32_WINNT to e.g. Windows 8, as this may enable the use of APIs that were present in Windows 8 but removed in Windows 10. Suggested by Steve Lhomme in . * lib/ftruncate.c (_WIN32_WINNT): Don't set to a smaller value. * lib/sethostname.c (_WIN32_WINNT): Likewise. * lib/stat-w32.c (_WIN32_WINNT): Likewise. 2020-05-27 Bruno Haible javacomp: Make more robust in multithreaded applications. * lib/javacomp.c (write_temp_file): Pass an 'e' flag to fopen_temp. * modules/javacomp (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible mountlist: Make more robust in multithreaded applications. * lib/mountlist.c (setmntent, read_file_system_list): Pass an 'e' flag to fopen. * modules/mountlist (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible sethostname: Make more robust in multithreaded applications. * lib/sethostname.c (sethostname): Pass an 'e' flag to fopen. * modules/sethostname (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible readutmp: Make more robust in multithreaded applications. * lib/readutmp.c (read_utmp): Pass an 'e' flag to fopen. * modules/readutmp (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible getpass: Make more robust in multithreaded applications. * lib/getpass.c (getpass): Pass an 'e' flag to fopen. * modules/getpass (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible getloadavg: Make more robust in multithreaded applications. * lib/getloadavg.c (getloadavg): Pass an 'e' flag to fopen. * modules/getloadavg (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible exclude: Make more robust in multithreaded applications. * lib/exclude.c (add_exclude_file): Pass an 'e' flag to fopen. * modules/exclude (Depends-on): Add fopen-gnu. 2020-05-27 Bruno Haible bitset: Make more robust in multithreaded applications. * lib/bitset/stats.c (bitset_stats_read, bitset_stats_write): Pass an 'e' flag to fopen. * modules/bitset (Depends-on): Add fopen-gnu. 2020-05-27 Daiki Ueno read-file: add RF_SENSITIVE flag * lib/read-file.h (RF_SENSITIVE): New define. * lib/read-file.c (fread_file, read_file): Take into account of RF_SENSITIVE flag. * modules/read-file (Depends-on): Add explicit_bzero. This adds an alternative behavior of those functions to explicitly clear the internal memory block when it becomes unused. This is useful for reading sensitive information from a file. 2020-05-27 Daiki Ueno read-file: add flags to modify reading behavior * lib/read-file.h (RF_BINARY): New define. (fread_file, read_file): Take FLAGS argument. (read_binary_file): Remove. * lib/read-file.c (internal_read_file): Merge into ... (read_file): ... here. * modules/read-file-tests (Files): Add "tests/macros.h". * tests/test-read-file.c (main): Refactor using ASSERT macro. * NEWS: Mention this change. 2020-05-26 Bernhard Voelker doc/gnulib-intro.texi: add missing "to" in sentence Reported by Bjarni Ingi Gislason in . * doc/gnulib-intro.texi (Collaborative Development): Add "to". 2020-05-26 Bruno Haible count-one-bits: Fix MSVC specific code. Reported by Gisle Vanem in . * lib/count-one-bits.h (COUNT_ONE_BITS_GENERIC): Don't define if we're using GCC. [_MSC_VER]: Use correct syntax for #pragma intrinsic. (__popcnt64): In 32-bit mode, define as an inline function. (COUNT_ONE_BITS): Rename first argument to GCC_BUILTIN. 2020-05-26 Bruno Haible argz: Avoid name clashes through argz.h. Reported by Gisle Vanem in . * lib/argz.h: Don't use __ prefixed identifiers. (const): Remove definition. (argz_next): Remove inline definitions. 2020-05-26 Daiki Ueno read-file: make use of fopen-gnu * lib/read-file.c (read_file): Pass an 'e' flag to fopen. (read_binary_file): Likewise. * modules/read-file (Depends-on): Add fopen-gnu. 2020-05-25 Paul Eggert getentropy, getrandom: new modules * MODULES.html.sh (func_all_modules): * lib/unistd.in.h (getentropy, getrandom): * m4/unistd_h.m4 (gl_UNISTD_H, gl_UNISTD_H_DEFAULTS): * modules/unistd (unistd.h): Add support for getentropy, getrandom. * doc/glibc-functions/getentropy.texi (getentropy): * doc/glibc-functions/getrandom.texi (getrandom): These are now fixed on some platforms. * lib/getentropy.c, lib/getrandom.c, lib/sys_random.in.h: * m4/getentropy.m4, m4/getrandom.m4: * modules/getentropy, modules/getentropy-tests: * modules/getrandom, modules/getrandom-tests: * tests/test-getentropy.c, tests/test-getrandom.c: New files. 2020-05-25 Bruno Haible Add missing C99 dependencies. Reported by Paul Smith in . * modules/assert (Depends-on): Add c99. * modules/filenamecat-lgpl (Depends-on): Likewise. * modules/libc-config (Depends-on): Likewise. * modules/mktime (Depends-on): Likewise. * modules/random_r (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. * modules/scratch_buffer (Depends-on): Likewise. * modules/timespec-add (Depends-on): Likewise. * modules/timespec-sub (Depends-on): Likewise. * modules/verify (Depends-on): Likewise. 2020-05-24 Paul Eggert explicit_bzero-tests: pacify -Wmissing-declarations * tests/test-explicit_bzero.c (do_secret_stuff, test_stack): Now static. 2020-05-24 Bruno Haible fopen-gnu: Add tests. * tests/test-fopen-gnu.c: New file. * modules/fopen-gnu-tests: New file. fopen-gnu: New module. Suggested by Tim Rühsen in . * lib/fopen.c (rpl_fopen): When the fopen-gnu module is enabled and the mode contains an 'x' or 'e' flag, use open() followed by fdopen(). * m4/fopen.m4 (gl_FUNC_FOPEN_GNU): New macro. * modules/fopen-gnu: New file. * doc/posix-functions/fopen.texi: Document the 'fopen-gnu' module. 2020-05-24 Bruno Haible open, openat: Really support O_CLOEXEC. * lib/open.c (open): When have_cloexec is still undecided, do pass a O_CLOEXEC flag to orig_open. * lib/openat.c (rpl_openat): When have_cloexec is still undecided, do pass a O_CLOEXEC flag to orig_openat. * tests/test-open.h (test_open): Verify that O_CLOEXEC is honoured. * modules/open-tests (Depends-on): Add fcntl. * modules/openat-tests (Depends-on): Likewise. * modules/fcntl-safer-tests (Depends-on): Likewise. 2020-05-24 Bruno Haible fopen: Fix the trailing slash workaround. * lib/fopen.c (rpl_fopen): Parse the mode string. Recognize "r+" as a write access. Pass the right flags to open(). * tests/test-fopen.h (test_fopen): Add a few more tests on directories. 2020-05-23 Paul Eggert assure: new macro ‘affirm’ * lib/assure.h: Include verify.h. (affirm): New macro, after a suggestion by Marc Nieper-Wißkirchen in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00263.html and commentary by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00278.html * modules/assure (Depends-on:): Add verify. 2020-05-23 Bruno Haible calloc-gnu: Make test work in non-flat address spaces. Uses code by Paul Eggert. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Allow a calloc() implementation to return more than SIZE_MAX bytes, but only without wrap-around bugs. 2020-05-23 Bruno Haible calloc-gnu: Avoid wrong configure results with GCC's AddressSanitizer. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Split the AC_RUN_IFELSE into two AC_RUN_IFELSE invocations. 2020-05-23 Bruno Haible isnanf, isnanl, isnan: Don't use nonexistent builtins with clang. * m4/isnanf.m4 (gl_HAVE_ISNANF_NO_LIBM, gl_HAVE_ISNANF_IN_LIBM, gl_ISNANF_WORKS): Don't use __builtin_isnanf on clang versions that don't have it. * m4/isnanl.m4 (gl_HAVE_ISNANL_NO_LIBM, gl_HAVE_ISNANL_IN_LIBM, gl_FUNC_ISNANL_WORKS): Don't use __builtin_isnanl on clang versions that don't have it. * lib/isnanf-nolibm.h (__has_builtin): New macro. (isnanf): Don't use __builtin_isnanf on clang versions that don't have it. * lib/isnanl-nolibm.h (__has_builtin): New macro. (isnanl): Don't use __builtin_isnanl on clang versions that don't have it. * lib/math.in.h (__has_builtin): New macro. (isnanf): Don't use __builtin_isnanf on clang versions that don't have it. (isnanl): Don't use __builtin_isnanl on clang versions that don't have it. (isnan): Don't use the builtins on clang versions that don't have __builtin_isnanf and __builtin_isnanl. 2020-05-23 Bruno Haible calloc-gnu: Avoid wrong configure results with clang. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Mark the pointer variable as 'volatile', to defeat compiler optimizations. 2020-05-23 Bruno Haible isnanl, isnanl-nolibm: Make a test work better with "gcc -O2" on x86_64. * m4/exponentl.m4 (gl_LONG_DOUBLE_EXPONENT_LOCATION): Pass the 'long double' values by reference, with values taken from a statically allocated array. 2020-05-23 Bruno Haible findprog-in: Ignore directories. Reported by Frederick Eaton via Dmitry Goncharov in . * lib/findprog-in.c (find_in_given_path): When the file found is a directory, set errno to EACCES and, during a PATH search, continue searching. * modules/findprog-in (Depends-on): Add sys_stat, stat. 2020-05-23 Paul Eggert verify: document ‘assume’ better * lib/verify.h (assume): Say it’s for static analysis, not dynamic. 2020-05-22 Asher Gordon gendocs: Clarify licenses for templates. * doc/gendocs_template: Add a GNU All-Permissive license notice and bump Parent-Version. * doc/gendocs_template_min: Add a GNU All-Permissive license notice and copy the explanatory comment about the license notice at the bottom from gendocs_template. 2020-05-21 Bruno Haible group-member: Relicense under LGPLv2+. Jim Meyering's approval is in . Paul Eggert's approval is in . Eric Blake's approval is in . * modules/group-member (License): Change to LGPLv2+. 2020-05-21 Bruno Haible memmem: Avoid wrong configure results with "clang -fsanitize=undefined". Reported by Tim Rühsen in . * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): Use NULL + 1, not NULL. 2020-05-21 Bruno Haible regex: Avoid wrong configure results with "clang -fsanitize=leak". Reported by Tim Rühsen in . * m4/regex.m4 (gl_REGEX): Free compiled regexes and allocated registers before returning with status 0. 2020-05-21 Bruno Haible glob: Avoid wrong configure results with "clang -fsanitize=leak". Reported by Tim Rühsen in . * m4/glob.m4 (gl_GLOB): Free allocated memory before returning. 2020-05-21 Bruno Haible fchownat: Support clang -fsanitize=implicit-integer-sign-change better. Reported by Tim Rühsen in . * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG, gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): Cast -1 to uid_t or git_t, respectively. 2020-05-18 Tim Rühsen getdelim: Avoid wrong configure results with gcc -fsanitize=address. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Fix memleak. 2020-05-19 Paul Eggert ftoastr: fix ifndef typo * lib/ftoastr.h (_GL_FTOASTR_H): Define. 2020-05-19 Bruno Haible havelib: Tweak documentation. * doc/havelib.texi (Searching for Libraries): Fix typo. 2020-05-18 Siddhesh Poyarekar vcs-to-changelog: Rename vcs_to_changelog.py to use hyphens. This was needed earlier because modules had to import the main script, but that is no longer true. Rename the script so that it is consistent with all other scripts in gnulib and uses hyphens. * build-aux/vcs_to_changelog.py: Rename to... * build-aux/vcs-to-changelog.py: ... this. * doc/vcs-to-changelog.texi (VCS To ChangeLog): Update reference. * modules/vcs-to-changelog: Likewise. 2020-05-17 Bruno Haible Clarify intended usage of the license file modules. Reported by Asher Gordon in . * doc/licenses-texi.texi (License Texinfo sources): Mention the GNU AGPL. Explain the intended usage of the modules. * modules/fdl (Notice): Discourage use as a module. * modules/fdl-1.3 (Notice): Likewise. 2020-05-17 Akim Demaille hash: add hash_xinsert * lib/hash.h, lib/xhash.c (hash_xinsert): New. 2020-05-16 Bruno Haible findprog-lgpl: Fix link error (existing since 2008-09-02). * modules/findprog-lgpl (Makefile.am): Arrange to compile findprog-lgpl.c, not findprog.c. * lib/findprog.c (find_in_path): Add LGPLed replacement code for XNMALLOC. 2020-05-15 Paul Eggert c-stack: pacify -Wunused-result when DEBUG Problem reported by Marc Nieper-Wißkirchen in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00132.html * lib/c-stack.c (segv_handler, overflow_handler, segv_handler) [DEBUG]: Explicitly ignore write failures. 2020-05-13 Jim Meyering announce-gen: improve a comment * build-aux/announce-gen: Improve comment. 2020-05-12 Paul Eggert xalloc: pacify -Wanalyzer-possible-null-argument Problem reported for GCC 10.1.0 by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00118.html * lib/xmalloc.c (HAVE_GNU_MALLOC, HAVE_GNU_REALLOC): New constants. (xmalloc): Suppress unnecessary check if HAVE_GNU_MALLOC. (xrealloc): Suppress unnecssary check if HAVE_GNU_REALLOC. 2020-05-11 Paul Eggert careadlinkat: fix GCC 10 workaround * lib/careadlinkat.c (careadlinkat) [GCC_LINT]: Massage the code so that it’s closer to what it was before the GCC 10.1.0 workaround was introduced. This fixes a loop when !buffer and the bug workaround is in effect. Remove unnecessary casts. Defend in a different way against (buffer && !buffer_size), by adding at least 1 to buf_size each time through the loop. 2020-05-10 Bruno Haible doc: Mark HP-UX as unsupported. * doc/gnulib-intro.texi (Target Platforms): List HP-UX as unsupported. 2020-05-10 Paul Eggert careadlinkat: limit GCC workaround * lib/careadlinkat.c (careadlinkat): Limit workaround to GCC 10.1.0 and later, since the workaround is pretty bad and the GCC bug should get fixed. 2020-05-10 Bruno Haible havelib: Enhance documentation. * doc/havelib.texi (Searching for Libraries): Mention the bad consequences of using LIBxxx instead of LTLIBxxx and vice versa. 2020-05-10 Bruno Haible attribute: Clarify list of attributes. * lib/attribute.h: Reorder the list of attributes, and group them by purpose. 2020-05-10 Bruno Haible string: Fix compilation error in C++ mode. * lib/warn-on-use.h (_GL_WARN_ON_USE_CXX): In C mode, use plain _GL_WARN_ON_USE. * lib/string.in.h (strchr, strpbrk, strrchr): Use _GL_WARN_ON_USE_CXX instead of _GL_WARN_ON_USE. 2020-05-10 Akim Demaille announce-gen: add support for dist-lzip * build-aux/announce-gen (@archive_suffixes): Add tar.lz. 2020-05-09 Paul Eggert manywarnings: port to GCC 10.1 * build-aux/gcc-warning.spec: * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C)): Add GCC 10.1.0 warnings. careadlinkat: pacify -Wreturn-local-addr * lib/careadlinkat.c (careadlinkat) [GCC_LINT]: Pacify gcc 10’s -Wreturn-local-addr option. Simplify some of the later code. 2020-05-09 Paul Eggert attribute: remove ATTRIBUTE_DEPRECATED * lib/attribute.h: Improve recently-added comments, mostly by shortening them (use active voice, etc.). (ATTRIBUTE_DEPRECATED): Remove, as it duplicates DEPRECATED. Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00089.html 2020-05-09 Bruno Haible attribute: Add comments. * lib/attribute.h: Document each macro. 2020-05-09 Akim Demaille bitset: use the attribute module * modules/bitset: Depend on 'attribute'. * lib/bitset/base.h (ATTRIBUTE_UNUSED): Remove. * lib/bitset.c, lib/bitset/array.c, lib/bitset/list.c, * lib/bitset/stats.c, lib/bitset/table.c, lib/bitset/vector.c: Use MAYBE_UNUSED instead of ATTRIBUTE_UNUSED. 2020-05-09 Bruno Haible c-stack: Fix warning when DEBUG is enabled. Patch suggested by Marc Nieper-Wißkirchen in . * lib/c-stack.c: Include . 2020-05-09 Bruno Haible Remove redundant definitions of _GL_ATTRIBUTE_FORMAT. * lib/argp.h (_GL_ATTRIBUTE_FORMAT): Remove macro. * lib/argp-fmtstream.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/c-snprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/c-vasnprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/c-vasprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/c-vsnprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/c-xvasprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/error.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/parse-datetime.y (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/vasnprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/xprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. * lib/xvasprintf.h (_GL_ATTRIBUTE_FORMAT): Likewise. 2020-05-09 Bruno Haible Remove redundant definitions of _GL_ATTRIBUTE_ALLOC_SIZE. Reported by Akim Demaille in . * lib/eealloc.h (_GL_ATTRIBUTE_ALLOC_SIZE): Remove macro. * lib/pagealign_alloc.h (_GL_ATTRIBUTE_ALLOC_SIZE): Likewise. * lib/xalloc.h (_GL_ATTRIBUTE_ALLOC_SIZE): Likewise. 2020-05-09 Bruno Haible stdio, monetary: Don't redefine _GL_ATTRIBUTE_FORMAT. * lib/stdio.in.h (_GL_ATTRIBUTE_FORMAT): Don't override the definition that usually comes from m4/gnulib-common.m4. * lib/monetary.in.h (_GL_ATTRIBUTE_FORMAT): Likewise. 2020-05-09 Bruno Haible dirent, stdlib, wchar, string: Don't redefine _GL_ATTRIBUTE_PURE. * lib/dirent.in.h (_GL_ATTRIBUTE_PURE): Don't override the definition that usually comes from m4/gnulib-common.m4. * lib/stdlib.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/string.in.h (_GL_ATTRIBUTE_PURE): Likewise. * lib/wchar.in.h (_GL_ATTRIBUTE_PURE): Likewise. 2020-05-09 Bruno Haible uchar: Work around incorrect char16_t, char32_t types on Haiku 2020. * lib/uchar.in.h (char16_t): Define as macro if GNULIB_OVERRIDES_CHAR16_T. (char32_t): Define as macro if GNULIB_OVERRIDES_CHAR32_T. * m4/uchar.m4 (gl_TYPE_CHAR16_T, gl_TYPE_CHAR32_T): New macros. (gl_UCHAR_H): Invoke them. (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_OVERRIDES_CHAR16_T, GNULIB_OVERRIDES_CHAR32_T. * m4/mbrtoc32.m4 (gl_FUNC_MBRTOC32, gl_MBRTOC32_SANITYCHECK): Require gl_TYPE_CHAR32_T and test GNULIB_OVERRIDES_CHAR32_T. * modules/uchar (Makefile.am): Substitute GNULIB_OVERRIDES_CHAR16_T, GNULIB_OVERRIDES_CHAR32_T. 2020-05-09 Bruno Haible Macro tweaks. * m4/c32rtomb.m4 (gl_FUNC_C32RTOMB): Correct config.h comment. * m4/wint_t.m4 (gt_TYPE_WINT_T): Correct indentation. 2020-05-08 Bruno Haible c32rtomb: Avoid compilation failure on Haiku. * m4/c32rtomb.m4 (gl_FUNC_C32RTOMB): Test for c32rtomb without excluding inline definitions. * doc/posix-functions/c32rtomb.texi: Mention the Haiku problem. 2020-05-08 Bruno Haible mbrtoc32: Avoid compilation failure on Haiku. * m4/mbrtoc32.m4 (gl_CHECK_FUNC_MBRTOC32): New macro. (gl_FUNC_MBRTOC32, gl_MBRTOC32_SANITYCHECK): Use it instead of AC_CHECK_FUNCS_ONCE. * doc/posix-functions/mbrtoc32.texi: Mention the Haiku problem. 2020-05-08 Bruno Haible limits-h: Define LONG_BIT correctly on Haiku/x86_64. * lib/limits.in.h: Define and test _GL_ALREADY_INCLUDING_LIMITS_H. 2020-05-08 Bruno Haible list: Update documentation. Reported by Marc Nieper-Wißkirchen in . * doc/containers.texi (Container data types): Document the new list operations and their complexity. 2020-05-08 Bruno Haible ignore-value tests: Use module 'attribute'. * m4/gnulib-common.m4 (gl_COMMON_BODY): Fix a typo. * tests/test-ignore-value.c: Include attribute.h. (_GL_ATTRIBUTE_RETURN_CHECK): Remove macro. Use NODISCARD instead. * modules/ignore-value-tests (Depends-on): Add attribute. 2020-05-08 Bruno Haible uniname/uniname: Use module 'attribute'. * lib/uniname/gen-uninames.lisp: Emit a reference to ATTRIBUTE_PACKED. * lib/uniname/uninames.h: Regenerated. * lib/uniname/uniname.c: Include attribute.h. * modules/uniname/uniname (Depends-on): Add attribute. 2020-05-08 Bruno Haible c32rtomb: Use module 'attribute'. * lib/c32rtomb.c: Include attribute.h. (FALLTHROUGH): Remove macro. * modules/c32rtomb (Depends-on): Add attribute. 2020-05-08 Bruno Haible xsize: Use module 'attribute'. * lib/xsize.h: Include attribute.h. Use ATTRIBUTE_PURE. * modules/xsize (Depends-on): Add attribute. 2020-05-06 Paul Eggert * m4/gnulib-common.m4 (gl_COMMON_BODY): Minor style fixes. * lib/attribute.h: Minor style fixes. Fix version-etc glitch on OpenIndiana Problem reported by Mats Erik Andersson in: https://lists.gnu.org/r/bug-gnulib/2020-05/msg00067.html * lib/version-etc.h (_GL_ATTRIBUTE_SENTINEL): Remove defn that now clashes with gnulib-common.h. All uses changed. 2020-05-03 Paul Eggert attribute: new module This simplifies use of GCC and C2x attributes like ‘deprecated’. * MODULES.html.sh: Add attribute. * doc/attribute.texi, lib/attribute.h, modules/attribute: New files. * doc/gnulib.texi (Particular Modules): Add Attributes. * lib/backupfile.c, lib/fnmatch.c, lib/freopen-safer.c: * lib/mbrtoc32.c, lib/mbrtowc.c, lib/nstrftime.c, lib/quotearg.c: * lib/savewd.c, lib/unistr/u8-uctomb-aux.c, lib/unistr/u8-uctomb.c: * lib/vasnprintf.c: Include attribute.h, and let it define FALLTHROUGH. * lib/bitset/base.h, lib/c-stack.c (__attribute__): Remove macro. * lib/bitset/base.h (ATTRIBUTE_UNUSED): Define in terms of _GL_ATTRIBUTE_MAYBE_UNUSED, for forwards compatibility to C2x. * lib/dfa.c (FALLTHROUGH): Define consistently with gl_COMMON_BODY. This is a copy since Gawk doesn’t use Gnulib. * lib/di-set.h (_GL_ATTRIBUTE_NONNULL): Remove definition that is incompatible with gl_COMMON_BODY’s. All uses changed. * lib/fts.c: Include attribte.h, for FALLTHROUGH. Keep the existing FALLTHROUGH definition since Glibc might use it, and it does no harm to Gnulib’s FALLTHROUGH. * lib/fts_.h, lib/inttostr.h: (__GNUC_PREREQ): Remove; no longer needed. (__attribute_warn_unused_result__): Remove. All uses replaced by _GL_ATTRIBUTE_NODISCARD. * lib/gl_list.h, lib/gl_map.h, lib/gl_omap.h, lib/gl_oset.h: * lib/gl_set.h: Prefer _GL_ATTRIBUTE_NODISCARD to an ifdeffed __attribute__ ((__warn_unused_result__)), for forward compatibility to C2x. * lib/hash.h (_GL_ATTRIBUTE_WUR): Remove. All uses replaced by _GL_ATTRIBUTE_NODISCARD. (_GL_ATTRIBUTE_DEPRECATED): Remove, since gl_COMMON_BODY defines it. * lib/ino-map.h (_GL_ATTRIBUTE_NONNULL): Remove. All uses replaced by gl_COMMON_BODY’s implementation, which has a slightly different signature. * lib/safe-alloc.h (_GL_ATTRIBUTE_RETURN_CHECK): Remove. All uses replaced by _GL_ATTRIBUTE_NODISCARD. * lib/unused-parameter.h (_GL_UNUSED_PARAMETER): Define in terms of _GL_ATTRIBUTE_MAYBE_UNUSED. No doubt all uses should be replaced, at some point. * m4/gnulib-common.m4 (_GL_GNUC_PREREQ): New macro. (_Noreturn): Use it. (_GL_HAS_ATTRIBUTE, _GL_ATTRIBUTE_ALLOC_SIZE) (_GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_ARTIFICIAL) (_GL_ATTRIBUTE_COLD) (_GL_ATTRIBUTE_DEPRECATED, _GL_ATTRIBUTE_ERROR) (_GL_ATTRIBUTE_WARNING, _GL_ATTRIBUTE_EXTERNALLY_VISIBLE) (_GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT) (_GL_ATTRIBUTE_LEAF, _GL_ATTRIBUTE_MAY_ALIAS) (_GL_ATTRIBUTE_MAYBE_UNUSED) (_GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE) (_GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_NONSTRING) (_GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, _GL_ATTRIBUTE_PURE) (_GL_ATTRIBUTE_RETURNS_NONNULL) (_GL_ATTRIBUTE_SENTINEL): New macros. * modules/backup-rename, modules/backupfile, modules/c-vasnprintf: * modules/fnmatch, modules/freopen-safer, modules/fts: * modules/mbrtoc32, modules/mbrtowc, modules/nstrftime: * modules/quotearg, modules/savewd: * modules/unistdio/u16-u16-vasnprintf: * modules/unistdio/u16-vasnprintf: * modules/unistdio/u32-u32-vasnprintf: * modules/unistdio/u32-vasnprintf: * modules/unistdio/u8-u8-vasnprintf: * modules/unistdio/u8-vasnprintf: * modules/unistdio/ulc-vasnprintf: * modules/unistr/u8-uctomb, modules/vasnprintf: (Depends-on:): Add attribute module. 2020-05-03 Bruno Haible bison: Fix today's commit. * m4/bison.m4 (gl_PROG_BISON): Set ac_verc_fail to 'yes', not 'true'. 2020-05-03 Bruno Haible list-c++: Add get_first, get_last, set_first, set_last operations. * lib/gl_list.hh (class gl_List): Add methods get_first, get_last, set_first, set_last. * lib/gl_list.h: Tweak comments. 2020-05-03 Akim Demaille bison: rely on bison's %require to check a version requirement See https://lists.gnu.org/archive/html/bug-gnulib/2020-05/msg00021.html. * m4/bison.m4 (gl_PROG_BISON): Let bison itself decide if it it recent enough of not. So far it is the only know Yacc tool that supports '%require'. Other yaccs will actually even choke on seeing the -o option after the input file name. * m4/parse-datetime.m4: Simplify gl_PROG_BISON invocation. 2020-05-02 Bruno Haible list: Add get_first, get_last, set_first, set_last operations. * lib/gl_list.h (gl_list_get_first, gl_list_get_last, gl_list_nx_set_first, gl_list_nx_set_last): New functions. * lib/gl_xlist.h (gl_list_set_first, gl_list_set_last): New functions. 2020-05-02 Bruno Haible list: Remove redundant code for remove_first and remove_last operations. * lib/gl_list.h (struct gl_list_implementation): Remove fields remove_first, remove_last. (gl_list_remove_first, gl_list_remove_last): Implement in a generic way. * lib/gl_array_list.c: Revert last change. * lib/gl_carray_list.c: Likewise. * lib/gl_anylinked_list2.h: Likewise. * lib/gl_linked_list.c: Likewise. * lib/gl_linkedhash_list.c: Likewise. * lib/gl_anytree_list2.h: Likewise. * lib/gl_avltree_list.c: Likewise. * lib/gl_avltreehash_list.c: Likewise. * lib/gl_rbtree_list.c: Likewise. * lib/gl_rbtreehash_list.c: Likewise. * lib/gl_sublist.c: Likewise. 2020-05-02 Bruno Haible bison-i18n: Add support for cross-compilation. Reported by Hongxu Jia in via Akim Demaille . * m4/bison-i18n.m4 (BISON_I18N): Accept a configure option --with-bison-prefix=PREFIX and use it to determine BISON_LOCALEDIR. Don't use bison's --print-localedir option when cross-compiling. Also, fix an error message and a comment. 2020-05-01 Bruno Haible list: Add remove_first and remove_last operations. Suggested by Marc Nieper-Wißkirchen in . * lib/gl_list.h (struct gl_list_implementation): Add fields remove_first, remove_last. (gl_list_remove_first, gl_list_remove_last): New functions. * lib/gl_array_list.c (gl_array_remove_first, gl_array_remove_last): New functions, based on gl_array_remove_at. (gl_array_list_implementation): Implement the new operations. * lib/gl_carray_list.c (gl_carray_remove_first, gl_carray_remove_last): New functions, based on gl_carray_remove_at. (gl_carray_list_implementation): Implement the new operations. * lib/gl_anylinked_list2.h (gl_linked_remove_first, gl_linked_remove_last): New functions, based on gl_linked_remove_at. * lib/gl_linked_list.c (gl_linked_list_implementation): Implement the new operations. * lib/gl_linkedhash_list.c (gl_linkedhash_list_implementation): Likewise. * lib/gl_anytree_list2.h (gl_tree_remove_first, gl_tree_remove_last): New functions, based on gl_tree_remove_at. * lib/gl_avltree_list.c (gl_avltree_list_implementation): Implement the new operations. * lib/gl_avltreehash_list.c (gl_avltreehash_list_implementation): Likewise. * lib/gl_rbtree_list.c (gl_rbtree_list_implementation): Likewise. * lib/gl_rbtreehash_list.c (gl_rbtreehash_list_implementation): Likewise. * lib/gl_sublist.c (gl_sublist_remove_first, gl_sublist_remove_last): New functions, based on gl_sublist_remove_at. (gl_sublist_list_implementation): Implement the new operations. * lib/gl_list.hh (class gl_List): Add methods remove_first, remove_last. * tests/test-array_list.c (main): Test also gl_list_remove_first and gl_list_remove_last. * tests/test-avltree_list.c (main): Likewise. * tests/test-avltreehash_list.c (main): Likewise. * tests/test-carray_list.c (main): Likewise. * tests/test-linked_list.c (main): Likewise. * tests/test-linkedhash_list.c (main): Likewise. * tests/test-rbtree_list.c (main): Likewise. * tests/test-rbtreehash_list.c (main): Likewise. 2020-05-01 Bruno Haible parse-datetime: Fix a build failure with an older bison version. * modules/parse-datetime (Makefile.am): Don't do the post-processing of parse-datetime.tab.c if a suitable version of bison was not found. 2020-05-01 Bruno Haible bison: New module. * m4/bison.m4 (gl_PROG_BISON): New macro, extracted from m4/parse-datetime.m4. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): Invoke gl_PROG_BISON. * modules/bison: New file. * modules/parse-datetime (Files): Remove m4/bison.m4. (Depends-on): Add bison. 2020-05-01 Jose E. Marchesi Update users.txt. * users.txt: Add poke. 2020-04-28 Bruno Haible posix_spawn_file_actions_addfchdir tests: Enhance test. * tests/test-posix_spawn5.c: Include findprog.h. (test): New function, extracted from main. (main): Invoke it. Also, invoke it with a program name such as "bin/pwd". * modules/posix_spawn_file_actions_addfchdir-tests (Depends-on): Add findprog. 2020-04-28 Bruno Haible posix_spawn_file_actions_addchdir tests: Enhance test. * tests/test-posix_spawn4.c: Include findprog.h. (test): New function, extracted from main. (main): Invoke it. Also, invoke it with a program name such as "bin/pwd". * modules/posix_spawn_file_actions_addchdir-tests (Depends-on): Add findprog. 2020-04-28 Bruno Haible posix_spawn_file_actions_destroy: Fix a crash (bug from 2019-06-10). * lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy): Don't access elements of the wrong union member. 2020-04-27 Bruno Haible getdate: Remove deprecated module. * modules/getdate: Remove file. * doc/getdate.texi: Remove file. * lib/getdate.h: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible realloc: Remove deprecated module. * modules/realloc: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible calloc: Remove deprecated module. * modules/calloc: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible malloc: Remove deprecated module. * modules/malloc: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible fnmatch-posix: Remove deprecated module. * modules/fnmatch-posix: Remove file. * MODULES.html.sh (Enhancements for POSIX:2008 functions): Update. * NEWS: Mention the removal. 2020-04-27 Bruno Haible pipe: Remove deprecated module. * modules/pipe: Remove file. * lib/pipe.h: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible getopt: Remove deprecated module. * modules/getopt: Remove file. * NEWS: Mention the removal. 2020-04-27 Bruno Haible remove-dest-slash: Remove deprecated module. * modules/rename-dest-slash: Remove file. * MODULES.html.sh (Compatibility checks for POSIX:2008 functions): Update. * NEWS: Mention the removal. 2020-04-27 Bruno Haible unictype/bidicategory-*: Remove deprecated modules. * modules/unictype/bidicategory-all: Remove file. * modules/unictype/bidicategory-byname: Remove file. * modules/unictype/bidicategory-name: Remove file. * modules/unictype/bidicategory-of: Remove file. * modules/unictype/bidicategory-test: Remove file. * MODULES.html.sh (Unicode string functions): Update. * NEWS: Mention the removals. 2020-04-25 Paul Eggert Tune fts for FTS_LOGICAL+FTS_NOSTAT From a suggestion by Askar Safin in: https://lists.gnu.org/r/bug-gnulib/2020-04/msg00074.html * lib/fts.c (fts_build): If file types are known, optimize FTS_LOGICAL+FTS_NOSTAT for non-symlinks and non-directories the same way that we already optimize FTS_PHYSICAL+FTS_NOSTAT for non-directories. 2020-04-19 Bruno Haible vasnprintf: Add support for printing wide characters using escapes. * lib/vasnprintf.c (ENABLE_WCHAR_FALLBACK): Document optional macro. (wctomb_fallback): New function. (local_wctomb): New function. (local_wcrtomb): New function or macro. (MAX_ROOM_NEEDED): Adjust estimate for %lc. (VASNPRINTF): Simplify %ls code by use of local_wcrtomb. Add code for %lc. 2020-04-15 Paul Eggert fts: remove NOSTAT_LEAF_OPTIMIZATION It caused ‘find’ and ‘du’ to dump core, and it was useful only for obsolescent Linux filesystems anyway. Problem reported in: https://lists.gnu.org/r/bug-gnulib/2020-04/msg00068.html Quite possibly there is still a serious underlying fts bug with tight-loop-check and mutating file systems, but if so this patch should cause the bug to be triggered less often. * lib/fts.c (enum leaf_optimization): Remove NOSTAT_LEAF_OPTIMIZATION, as it’s problematic. (S_MAGIC_REISERFS, S_MAGIC_XFS): Remove; no longer needed. (leaf_optimization): Remove special cases for ReiserFS and XFS. (fts_read): Remove NOSTAT_LEAF_OPTIMIZATION code. * lib/fts_.h (struct _ftsent.fts_n_dirs_remaining): Remove. All uses removed. 2020-04-13 Bastien Roucariès explicit_bzero: Improve code style. * lib/explicit_bzero.c (explicit_bzero): Use '\0' instead of 0. 2020-04-13 Bastien Roucariès explicit_bzero: On native Windows, use SecureZeroMemory(). * lib/explicit_bzero.c: Include . (explicit_bzero): On native Windows, use SecureZeroMemory. 2020-04-13 Bastien Roucariès explicit_bzero: Use memset_s() when available. * lib/explicit_bzero.c (__STDC_WANT_LIB_EXT1__): Define. (explicit_bzero): Use memset_s when available. * m4/explicit_bzero.m4 (gl_PREREQ_EXPLICIT_BZERO): Test for memset_s. 2020-04-13 Bastien Roucariès explicit_bzero tests: Fix test failure on OpenBSD 6.5. * tests/test-explicit_bzero.c (test_heap): Handle implementations of free() that overwrite the memory with canaries. 2020-04-13 Akim Demaille bootstrap: recommend git submodule update --init Reported by Bruno Haible. * build-aux/bootstrap: recommand "git submodule update --init" rather than "git submodule init". 2020-04-12 Bruno Haible explicit_bzero: Add tests. * tests/test-explicit_bzero.c: New file. * modules/explicit_bzero-tests: New file. 2020-04-11 Bruno Haible explicit_bzero: Relicense under LGPLv2+. Approved by Paul Eggert. * modules/explicit_bzero (License): Change to LGPLv2+. 2020-04-10 Bruno Haible findprog, relocatable-prog: Ignore directories during PATH search. Reported by Frederick Eaton via Dmitry Goncharov in . * lib/findprog.c (find_in_path): When the file found in a PATH element is a directory, continue searching. * modules/findprog (Depends-on): Add sys_stat, stat. * modules/findprog-lgpl (Depends-on): Likewise. * lib/progreloc.c (maybe_executable): When the file found in a PATH element is a directory, continue searching. * lib/relocwrapper.c: Update comments. * modules/relocatable-prog-wrapper (Files): Add m4/largefile.m4. (configure.ac-early): New section. 2020-04-10 Bruno Haible MODULES.html.sh: Support for reproducible builds from git-less tarballs. Reported by Bernhard M. Wiedemann in . * MODULES.html.sh: In a git-less tarball, use the date of the first ChangeLog entry. 2020-04-04 Bruno Haible Fix comments: The gettext library is under LGPL 2.1, not LGPL 2.0. * m4/gettext.m4: Fix comments regarding the gettext library. * m4/intl-thread-locale.m4: Likewise. * m4/intlmacosx.m4: Likewise. * m4/lcmessage.m4: Likewise. * m4/nls.m4: Likewise. * m4/po.m4: Likewise. * m4/progtest.m4: Likewise. 2020-04-04 Jim Meyering maint: remove a stray inter-word space in a 6x-repeated comment Induce the changes by running this: re='by perl'; git grep -l "$re"|xargs perl -pi -e "s/$re/by perl/" * build-aux/announce-gen: Change "by perl" to "by perl". * build-aux/gitlog-to-changelog: Likewise. * build-aux/prefix-gnulib-mk: Likewise. * build-aux/update-copyright: Likewise. * build-aux/useless-if-before-free: Likewise. * tests/test-update-copyright.sh: Likewise. 2020-03-28 Bruno Haible Use module 'filename' instead of module 'dosname'. * lib/at-func.c: Include filename.h instead of dosname.h. * lib/unlinkat.c: Likewise. * modules/areadlinkat (Depends-on): Add filename. Remove dosname. * modules/areadlinkat-with-size (Depends-on): Likewise. * modules/faccessat (Depends-on): Likewise. * modules/fchmodat (Depends-on): Likewise. * modules/fchownat (Depends-on): Likewise. * modules/fstatat (Depends-on): Likewise. * modules/mkdirat (Depends-on): Likewise. * modules/mkfifoat (Depends-on): Likewise. * modules/readlinkat (Depends-on): Likewise. * modules/selinux-at (Depends-on): Likewise. * modules/symlinkat (Depends-on): Likewise. * modules/unlinkat (Depends-on): Likewise. * modules/utimensat (Depends-on): Likewise. * lib/at-func2.c: Include filename.h instead of dosname.h. * modules/linkat (Depends-on): Add filename. Remove dosname. * modules/renameatu (Depends-on): Likewise. * lib/canonicalize.c: Include filename.h instead of dosname.h. * lib/canonicalize-lgpl.c: Likewise. * modules/canonicalize (Depends-on): Add filename. * modules/canonicalize-lgpl (Depends-on): Likewise. * lib/dirname.h: Include filename.h instead of dosname.h. * modules/dirname-lgpl (Depends-on): Add filename. Remove dosname. * lib/fchdir.c: Include filename.h instead of dosname.h. * modules/fchdir (Depends-on): Add filename. Remove dosname. * lib/openat.c: Include filename.h instead of dosname.h. * modules/openat (Depends-on): Add filename. Remove dosname. * lib/rmdir.c: Include filename.h instead of dosname.h. * modules/rmdir (Depends-on): Add filename. Remove dosname. * lib/savewd.c: Include filename.h instead of dosname.h. * modules/savewd (Depends-on): Add filename. Remove dosname. * lib/unlink.c: Include filename.h instead of dosname.h. * modules/unlink (Depends-on): Add filename. Remove dosname. * modules/relocatable-prog-wrapper (Depends-on): Add filename. * lib/relocwrapper.c: Update comments. * modules/lstat (Depends-on): Remove dosname. 2020-03-28 Bruno Haible dosname: Redirect to 'filename'. Reported by Tim Rühsen in . * lib/dosname.h: Remove all definitions. Just include filename.h. * modules/dosname (Status, Notice): Mark as deprecated. (Depends-on): Add 'filename'. 2020-03-28 Bruno Haible dosname: Change IS_RELATIVE_FILE_NAME. * lib/dosname.h (IS_RELATIVE_FILE_NAME): On native Windows, OS/2, DOS, change the definition so that IS_RELATIVE_FILE_NAME("c:") is false. * NEWS: Mention the change. 2020-03-28 Bruno Haible filename: Copy some definitions from module 'dosname'. * lib/filename.h: Include , for IS_FILE_NAME_WITH_DIR. (HAS_DEVICE): Document macro. (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE): New macro. (IS_ABSOLUTE_FILE_NAME): Consider FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE. (IS_RELATIVE_FILE_NAME, IS_FILE_NAME_WITH_DIR): New macros. (IS_ABSOLUTE_PATH, IS_PATH_WITH_DIR): Define as deprecated aliases. * lib/relocatable.c (IS_FILE_NAME_WITH_DIR): Renamed from IS_PATH_WITH_DIR. (DllMain): Update. * lib/progreloc.c (IS_FILE_NAME_WITH_DIR): Renamed from IS_PATH_WITH_DIR. (find_executable): Update. * NEWS: Document the deprecations. 2020-03-25 Paul Eggert getopt-posix: port __GETOPT_PREFIX to macOS * lib/getopt-pfx-core.h (_GETOPT) [__APPLE__ && __GETOPT_PREFIX]: Define to work around a problem with asm on macOS (Bug#40205). 2020-03-22 Bruno Haible MODULES.html.sh: Add support for reproducible builds. Reported by Bernhard M. Wiedemann in . * MODULES.html.sh: Print the date of the last gnulib commit, not the current date. 2020-03-22 Bruno Haible Several modules: Depend on stat. * modules/acl-permissions (Depends-on): Add stat. * modules/canonicalize (Depends-on): Likewise. * modules/file-has-acl (Depends-on): Likewise. * modules/fstat (Depends-on): Likewise. * modules/fstatat (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/javacomp (Depends-on): Likewise. * modules/linkat (Depends-on): Likewise. * modules/mkdir (Depends-on): Likewise. * modules/pt_chown (Depends-on): Likewise. * modules/ptsname_r (Depends-on): Likewise. * modules/readlinkat (Depends-on): Likewise. * modules/rename (Depends-on): Likewise. * modules/renameatu (Depends-on): Likewise. * modules/tmpdir (Depends-on): Likewise. * modules/utimens (Depends-on): Likewise. * modules/relocatable-prog-wrapper (Depends-on): Add largefile. * modules/same (Depends-on): Remove stat. 2020-03-22 Bruno Haible acl-permissions: Improve autoconf macro. * m4/acl.m4 (gl_FUNC_ACL): Test the value of gl_need_lib_has_acl more reliably. 2020-03-22 Bruno Haible file-has-acl: Fix module description. * modules/file-has-acl (Files): Add lib/acl-internal.h, m4/acl.m4. (Depends-on): Depend on acl-permissions unconditionally. 2020-03-21 Bruno Haible unlink: Ensure errno also on native Windows. * modules/unlink (Depends-on): Add malloc-posix. 2020-03-21 Paul Eggert unlink: fix malloc errno typo Problem reported by Tim Rühsen in: https://lists.gnu.org/r/bug-gnulib/2020-03/msg00044.html * lib/unlink.c (rpl_unlink): Don’t mask malloc errno. 2020-03-16 Bruno Haible *printf-posix: Fix m4 error (regression from 2020-03-08). * m4/printf.m4 (gl_SNPRINTF_DIRECTIVE_N): Enable interpretation of brackets in AC_COMPILE_IFELSE invocation. 2020-03-08 Bruno Haible crypto/af_alg, renameatu, same, term-style-control: Depend on fstat. * modules/crypto/af_alg (Depends-on): Add fstat. * modules/renameatu (Depends-on): Likewise. * modules/same (Depends-on): Likewise. * modules/term-style-control (Depends-on): Likewise. 2020-03-08 Bruno Haible *printf-posix: Document why it's overridden on some glibc systems. Reported by Adrian Bunk in . * doc/posix-functions/*printf.texi: Document the problem with the %n directive on some glibc systems. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N): Adjust the cross-compilation guesses accordingly. 2020-03-07 Paul Eggert open, openat: port to (O_RDWR | O_RDONLY) != 0 Potential portability problem reported by Dan Gohman in: https://lists.gnu.org/r/bug-gnulib/2020-03/msg00000.html * lib/open.c (open): * lib/openat.c (rpl_openat): Don’t assume O_RDONLY is disjoint from O_RDWR. 2020-03-07 Bruno Haible openat: Fix theoretically possible issue on GNU/Hurd. Reported by Dan Gohman in . * lib/openat.c (rpl_openat): When testing whether flags contains O_RDWR, ignore the bits that are also set in O_RDONLY. 2020-02-24 Bruno Haible getloadavg: Don't use /usr/local when cross-compiling on AIX. Reported by Jens Rehsack in . * m4/getloadavg.m4 (gl_GETLOADAVG): Don't look in /usr/local/lib when cross-compiling. 2020-02-24 Bruno Haible fcntl: Add witness of gnulib override. Reported by Jens Rehsack in . * lib/fcntl.in.h (GNULIB_defined_rpl_fcntl, GNULIB_defined_fcntl): New macros. 2020-02-23 Assaf Gordon Update users.txt. * users.txt: Add datamash, time. 2020-02-23 Bruno Haible uni*/base: Use 'restrict'. * lib/unitypes.in.h (_UC_RESTRICT): New macro, based on '_Restrict_' from lib/regex.h. * lib/unistr.in.h (u8_cpy, u16_cpy, u32_cpy, u8_strcpy, u16_strcpy, u32_strcpy, u8_stpcpy, u16_stpcpy, u32_stpcpy, u8_strncpy, u16_strncpy, u32_strncpy, u8_stpncpy, u16_stpncpy, u32_stpncpy, u8_strcat, u16_strcat, u32_strcat, u8_strncat, u16_strncat, u32_strncat, u8_strtok, u16_strtok, u32_strtok): Use '_UC_RESTRICT'. * lib/uninorm.in.h (u8_normalize, u16_normalize, u32_normalize): Use '_UC_RESTRICT'. * lib/uniconv.in.h (u8_conv_to_encoding, u16_conv_to_encoding, u32_conv_to_encoding): Use '_UC_RESTRICT'. * lib/unicase.in.h (u8_toupper, u16_toupper, u32_toupper, u8_tolower, u16_tolower, u32_tolower, u8_totitle, u16_totitle, u32_totitle, u8_ct_toupper, u16_ct_toupper, u32_ct_toupper, u8_ct_tolower, u16_ct_tolower, u32_ct_tolower, u8_ct_totitle, u16_ct_totitle, u32_ct_totitle, u8_casefold, u16_casefold, u32_casefold, u8_ct_casefold, u16_ct_casefold, u32_ct_casefold, u8_casexfrm, u16_casexfrm, u32_casexfrm, ulc_casexfrm): Use '_UC_RESTRICT'. * lib/unilbrk.in.h (u8_possible_linebreaks, u16_possible_linebreaks, u32_possible_linebreaks, ulc_possible_linebreaks, u8_width_linebreaks, u16_width_linebreaks, u32_width_linebreaks, ulc_width_linebreaks): Use '_UC_RESTRICT'. * lib/uniwbrk.in.h (ulc_wordbreaks): Use '_UC_RESTRICT'. * lib/unistdio.in.h (ulc_sprintf, ulc_snprintf, ulc_asnprintf, ulc_vsprintf, ulc_vsnprintf, ulc_vasnprintf, u8_u8_sprintf, u8_u8_snprintf, u8_u8_asnprintf, u8_u8_vsprintf, u8_u8_vsnprintf, u8_u8_vasnprintf, u16_u16_sprintf, u16_u16_snprintf, u16_u16_asnprintf, u16_u16_vsprintf, u16_u16_vsnprintf, u16_u16_vasnprintf, u32_u32_sprintf, u32_u32_snprintf, u32_u32_asnprintf, u32_u32_vsprintf, u32_u32_vsnprintf, u32_u32_vasnprintf): Use '_UC_RESTRICT'. 2020-02-23 Bruno Haible glob, spawn: Use improved '_Restrict_' definition. * lib/glob.in.h (_Restrict_): Use same definition as in lib/regex.h. * lib/spawn.in.h (_Restrict_, _Restrict_arr_): Likewise. 2020-02-23 Bruno Haible crypto/gc: Use 'restrict'. * lib/gc.h (gc_pbkdf2_hmac, gc_pbkdf2_sha1): Use 'restrict'. * m4/gc.m4 (gl_GC): Require AC_C_RESTRICT. crypto/hmac-*: Use 'restrict'. * lib/hmac.h (hmac_md5, hmac_sha1, hmac_sha256, hmac_sha512): Use 'restrict'. * modules/crypto/hmac-md5 (configure.ac): Require AC_C_RESTRICT. * modules/crypto/hmac-sha1 (configure.ac): Likewise. * modules/crypto/hmac-sha256 (configure.ac): Likewise. * modules/crypto/hmac-sha512 (configure.ac): Likewise. crypto/sm3: Use 'restrict'. * lib/sm3.h (sm3_finish_ctx, sm3_read_ctx, sm3_buffer): Use 'restrict'. * m4/sm3.m4 (gl_SM3): Require AC_C_RESTRICT. crypto/*-buffer: Use 'restrict'. * lib/gl_openssl.h (GL_CRYPTO_FN (_finish_ctx), GL_CRYPTO_FN (_buffer), GL_CRYPTO_FN (_read_ctx)): Use 'restrict'. crypto/sha512-buffer: Use 'restrict'. * lib/sha512.h (sha512_finish_ctx, sha384_finish_ctx, sha512_read_ctx, sha384_read_ctx, sha512_buffer, sha384_buffer): Use 'restrict'. * modules/crypto/sha512-buffer (configure.ac): Require AC_C_RESTRICT. crypto/sha256-buffer: Use 'restrict'. * lib/sha256.h (sha256_finish_ctx, sha224_finish_ctx, sha256_read_ctx, sha224_read_ctx, sha256_buffer, sha224_buffer): Use 'restrict'. * modules/crypto/sha256-buffer (configure.ac): Require AC_C_RESTRICT. crypto/sha1-buffer: Use 'restrict'. * lib/sha1.h (sha1_finish_ctx, sha1_read_ctx, sha1_buffer): Use 'restrict'. * modules/crypto/sha1-buffer (configure.ac): Require AC_C_RESTRICT. crypto/md5-buffer: Use 'restrict'. * lib/md5.h (__md5_finish_ctx, __md5_read_ctx, __md5_buffer): Use 'restrict'. * modules/crypto/md5-buffer (configure.ac): Require AC_C_RESTRICT. crypto/md4: Use 'restrict'. * lib/md4.h (md4_finish_ctx, md4_read_ctx, md4_buffer): Use 'restrict'. * modules/crypto/md4 (configure.ac): Require AC_C_RESTRICT. crypto/md2: Use 'restrict'. * lib/md2.h (md2_finish_ctx, md2_read_ctx, md2_buffer): Use 'restrict'. * modules/crypto/md2 (configure.ac): Require AC_C_RESTRICT. crypto/rijndael: Use 'restrict'. * lib/rijndael-api-fst.h (rijndaelBlockEncrypt, rijndaelPadEncrypt, rijndaelBlockDecrypt, rijndaelPadDecrypt): Use 'restrict'. * modules/crypto/rijndael (configure.ac): Require AC_C_RESTRICT. crypto/arctwo: Use 'restrict'. * lib/arctwo.h (arctwo_encrypt, arctwo_decrypt): Use 'restrict'. * modules/crypto/arctwo (configure.ac): Require AC_C_RESTRICT. crypto/arcfour: Use 'restrict'. * lib/arcfour.h (arcfour_stream): Use 'restrict'. * modules/crypto/arcfour (configure.ac): Require AC_C_RESTRICT. careadlinkat: Use 'restrict'. * lib/careadlinkat.h (careadlinkat): Use 'restrict'. * modules/careadlinkat (configure.ac): Require AC_C_RESTRICT. * modules/relocatable-prog-wrapper (configure.ac): Likewise. regex-quote: Use 'restrict'. * lib/regex-quote.h (regex_quote_copy): Use 'restrict'. * modules/regex-quote (configure.ac): Require AC_C_RESTRICT. system-quote: Use 'restrict'. * lib/system-quote.h (system_quote_copy): Use 'restrict'. * modules/system-quote (configure.ac): Require AC_C_RESTRICT. sh-quote: Use 'restrict'. * lib/sh-quote.h (shell_quote_copy): Use 'restrict'. * modules/sh-quote (configure.ac): Require AC_C_RESTRICT. quotearg: Use 'restrict'. * lib/quotearg.h (quotearg_buffer): Use 'restrict'. * m4/quotearg.m4 (gl_QUOTEARG): Require AC_C_RESTRICT. parse-datetime: Use 'restrict'. * lib/parse-datetime.h (parse_datetime, parse_datetime2): Use 'restrict'. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): Require AC_C_RESTRICT. nstrftime: Use 'restrict'. * lib/strftime.h (nstrftime): Use 'restrict'. * m4/nstrftime.m4 (gl_FUNC_GNU_STRFTIME): Require AC_C_RESTRICT. mbstok_r: Use 'restrict'. * lib/string.in.h (mbstok_r): Use 'restrict'. xmemcoll: Use 'restrict'. * lib/xmemcoll.h (xmemcoll): Use 'restrict'. * modules/xmemcoll (configure.ac): Require AC_C_RESTRICT. memcoll: Use 'restrict'. * lib/memcoll.h (memcoll): Use 'restrict'. * m4/memcoll.m4 (gl_MEMCOLL): Require AC_C_RESTRICT. vasnprintf: Use 'restrict'. * lib/vasnprintf.h (asnprintf, vasnprintf): Use 'restrict'. * modules/vasnprintf (configure.ac): Require AC_C_RESTRICT. c-vasnprintf: Use 'restrict'. * lib/c-vasnprintf.h (c_vasnprintf): Use 'restrict'. * modules/c-vasnprintf (configure.ac): Require AC_C_RESTRICT. c-vsnprintf: Use 'restrict'. * lib/c-vsnprintf.h (c_vsnprintf): Use 'restrict'. * modules/c-vsnprintf (configure.ac): Require AC_C_RESTRICT. c-snprintf: Use 'restrict'. * lib/c-snprintf.h (c_snprintf): Use 'restrict'. * modules/c-snprintf (configure.ac): Require AC_C_RESTRICT. astrxfrm: Use 'restrict'. * lib/astrxfrm.h (astrxfrm): Use 'restrict'. * modules/astrxfrm (configure.ac): Require AC_C_RESTRICT. amemxfrm: Use 'restrict'. * lib/amemxfrm.h (amemxfrm): Use 'restrict'. * modules/amemxfrm (configure.ac): Require AC_C_RESTRICT. 2020-02-22 Paul Eggert fchmodat, lchmod: simplify It appears that we may have overengineered lchmod and fchmodat, in that the code was prepared for some hypothetical platforms but was so complicated that it was hard to understand. I attempted to improve the situation by simplifying the code when this simplification should not hurt on real platforms; we can re-add complexity later to port to platforms I didn’t know about. * lib/fchmodat.c (fchmodat): * lib/lchmod.c (lchmod): Put the ‘defined __linux__ || defined __ANDROID__’ #ifdef only around the /proc code that needs it. * lib/fchmodat.c (fchmodat): Coalese calls to orig_fchmodat. * lib/lchmod.c (__need_system_sys_stat_h): Omit; no longer needed. Do not include twice. (orig_lchmod) [HAVE_LCHMOD]: Remove, since we need not wrap lchmod on any known hosts. (lchmod): Do not defer to fchmodat, so that the lchmod module need not depend on the fchmodat module (which is a circular dependency). Do not use openat, since ‘open’ suffices. Coalesce calls to lchmod/chmod. * lib/lchmod.c, lib/sys_stat.in.h (lchmod): * m4/sys_stat_h.m4 (REPLACE_FSTAT): * modules/lchmod (Depends-on, configure.ac): * modules/sys_stat (Depends-on): Do not worry about replacing lchmod, since that shouldn’t happen. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Do not check for fchmodat. Do not worry about whether lchmod works on non-symlinks, since every known lchmod works on non-symlinks. * modules/lchmod (Depends-on): Remove circular dependency on fchmodat. 2020-02-22 Bruno Haible lchmod: Fix link error on Solaris 10 (regression from 2020-02-16). * lib/lchmod.c (lchmod): Use the code with lstat and chmod also when NEED_LCHMOD_NONSYMLINK_FIX is not defined. 2020-02-22 Bruno Haible Use 'restrict' in all POSIX function declarations. * lib/iconv.in.h (iconv): Use 'restrict'. * lib/inttypes.in.h (strtoimax, strtoumax): Likewise. * lib/monetary.in.h (strfmon_l): Likewise. * lib/pthread.in.h (pthread_create, pthread_mutex_init, pthread_mutexattr_gettype, pthread_mutexattr_getrobust, pthread_mutex_timedlock, pthread_rwlock_init, pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock, pthread_cond_init, pthread_cond_wait, pthread_cond_timedwait): Likewise. * lib/search.in.h (tdelete): Likewise. * lib/signal.in.h (pthread_sigmask, sigprocmask): Likewise. * lib/stdio.in.h (dprintf, fgets, fopen, fprintf, fputs, fread, freopen, fscanf, fwrite, getdelim, getline, printf, scanf, snprintf, sprintf, vdprintf, vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf): Likewise. * lib/stdlib.in.h (mbtowc, realpath, strtod, strtold, strtoll, strtoull): Likewise. * lib/string.in.h (strncat): Likewise. * lib/sys_socket.in.h (accept, getpeername, getsockname, getsockopt, recvfrom): Likewise. * lib/sys_stat.in.h (fstatat, lstat, stat): Likewise. * lib/time.in.h (strftime): Likewise. * lib/unistd.in.h (readlink, readlinkat): Likewise. * lib/wchar.in.h (mbrtowc, mbrlen, mbsrtowcs, mbsnrtowcs, wcrtomb, wcsrtombs, wcsnrtombs, wmemcpy, wcscpy, wcpcpy, wcsncpy, wcpncpy, wcscat, wcsncat, wcsxfrm, wcsstr, wcstok, wcsftime): Likewise. * m4/iconv_h.m4 (gl_ICONV_H): Require AC_C_RESTRICT. * m4/inttypes.m4 (gl_INTTYPES_INCOMPLETE): Likewise. * m4/monetary_h.m4 (gl_MONETARY_H): Likewise. * m4/search_h.m4 (gl_SEARCH_H): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Likewise. * m4/stdio_h.m4 (gl_STDIO_H): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H): Likewise. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H): Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Make consistent with the other *_h.m4 files. * m4/time_h.m4 (gl_HEADER_TIME_H): Likewise. 2020-02-22 Bruno Haible Update NEWS. * NEWS: Mention the last change. 2020-02-22 Paul Eggert chmodat, chownat: new modules These are split from fchmodat, fchownat. GNU Emacs needs the POSIX-specified fchmodat, but not the gnulib-specified chmodat and lchmodat. Split the latter two into a new module chmodat. Similarly for fchownat. This the same basic idea for why statat was split from fstatat on 2013-01-23. * lib/chmodat.c, lib/openat.h (CHMODAT_INLINE): Rename from FCHMODAT_INLINE. All uses changed. * lib/chownat.c, lib/openat.h (CHOWNAT_INLINE): Rename from FCHOWNAT_INLINE. All uses changed. * lib/openat.h: (chownat, lchownat): Define if GNULIB_CHOWNAT, not GNULIB_FCHOWNAT. (chmodat, lchmodat): Define if GNULIB_CHMODAT, not GNULIB_FCHMODAT. * modules/chmodat, modules/chownat, tests/test-chownat.c: New files. * modules/fchmodat (Files:): Remove lib/fchmodat.c. (configure.ac): Remove fchmodat module indicator. (Makefile.am): Omit chmodat.c. (Maintainer): Add self. * modules/fchownat: Similarly, but for chown. * tests/test-fchownat.c (BASE): Don't define if already defined. (do_chown, do_lchown) [!TEST_CHOWNAT]: Test fchownat instead. 2020-02-22 Bruno Haible users.txt: Add groff. Reported by Bjarni Ingi Gislason . * users.txt: Add groff. 2020-02-22 Bruno Haible gnulib-tool: Ensure copied files are writable. Reported by Benno Fünfstück in . * gnulib-tool (func_ensure_writable): New function. (func_ln_s, func_hardlink, func_lookup_file, func_import, func_create_testdir, copy-file): Invoke it after copying a file. 2020-02-22 Bruno Haible users.txt: Update. * users.txt: Update URLs to projects that have moved or switched to git. Use canonical host names. Prefer gitweb over cgit. Prefer the tree view over the summary view. Add gawk. 2020-02-21 Paul Eggert largefile: remove _DARWIN_USE_64_BIT_INODE It’s not needed in currently-supported macOS versions, and was problematic anyway in MacOS X 10.5 which was the only version that could use it. Problem reported by Peter Eisentraut in: https://lists.gnu.org/r/bug-autoconf/2020-02/msg00004.html * m4/largefile.m4 (AC_SYS_LARGEFILE): Don’t define _DARWIN_USE_64_BIT_INODE. This syncs with Autoconf master. Add ‘extern "C"’ to count-one-bits.h etc. This ports these .h files to C++. Problem reported by Simon Marchi in: https://lists.gnu.org/r/bug-gnulib/2020-02/msg00110.html * lib/count-leading-zeros.h, lib/count-one-bits.h: * lib/count-trailing-zeros.h: Add ‘extern "C"’. 2020-02-19 Bruno Haible uninorm/decompose-internal: Avoid "no previous prototype" warning. Reported by Tim Rühsen in . * lib/array-mergesort.h: Accept an optional macro definition STATIC_FROMTO. * lib/uninorm/decompose-internal.c (STATIC_FROMTO): New macro. 2020-02-16 Bruno Haible fchmodat: Make more future-proof. * m4/fchmodat.m4 (gl_FUNC_FCHMODAT): Define NEED_FCHMODAT_NONSYMLINK_FIX. (gl_PREREQ_FCHMODAT): New macro. * lib/fchmodat.c (fchmodat): Test NEED_FCHMODAT_NONSYMLINK_FIX. Access /proc only on Linux. Return EOPNOTSUPP only on Linux and on platforms without lchmod function. * modules/fchmodat (configure.ac): Invoke gl_PREREQ_FCHMODAT. 2020-02-16 Bruno Haible lchmod: Make more future-proof. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Define NEED_LCHMOD_NONSYMLINK_FIX. (gl_PREREQ_LCHMOD): New macro. * lib/lchmod.c (orig_lchmod): New function. (lchmod): Test NEED_LCHMOD_NONSYMLINK_FIX. Access /proc only on Linux. Return EOPNOTSUPP only on Linux and on platforms without lchmod function. * modules/lchmod (configure.ac): Invoke gl_PREREQ_LCHMOD. lchmod: Fix buggy override on macOS, HP-UX (regression from 2020-02-08). * modules/lchmod (Makefile.am): Don't add lchmod.c to lib_SOURCES. 2020-02-16 Paul Eggert xnanosleep: prefer pause, and get remaining time Problem reported by Vladimir Panteleev in: https://lists.gnu.org/r/bug-gnulib/2020-02/msg00052.html * lib/xnanosleep.c: Include intprops.h, unistd.h. (xnanosleep) [HAVE_PAUSE]: Prefer pause when sleeping infinitely. (xnanosleep): Obtain remaining time when nanosleep is interrupted. * m4/xnanosleep.m4 (gl_XNANOSLEEP): Check for 'pause'. * modules/xnanosleep (Depends-on): Add intprops, unistd. 2020-02-16 Bruno Haible lchmod: Improve cross-compilation guess. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Require AC_CANONICAL_HOST. When cross-compiling, guess depending on the platform. 2020-02-16 Bruno Haible fstrcmp: Add API to clean up resources. Reported by Akim Demaille in . * lib/fstrcmp.h (fstrcmp_free_resources): New declaration. * lib/fstrcmp.c (fstrcmp_free_resources): New function. 2020-02-14 Bruno Haible wctype-h: Fix compilation errors in C++ (regression from 2020-01-25). Reported by Christian Biesinger in . * lib/wctype.in.h (iswdigit, iswxdigit): Don't declare if the corresponding module is not enabled. * tests/test-wctype-h-c++.cc (iswdigit, iswxdigit): Don't check the prototype if the corresponding module is not enabled. 2020-02-13 Paul Eggert fchmodat, lchmod: port to buggy Linux filesystems Problem reported by Florian Weimer in: https://www.sourceware.org/ml/libc-alpha/2020-02/msg00534.html * lib/fchmodat.c (fchmodat): * lib/lchmod.c (lchmod): Don’t assume that chmod on the O_PATH-opened fd will do the right thing on a symbolic link. * lib/fchmodat.c (fchmodat): Don’t attempt to special-case any flag value other than AT_SYMLINK_NOFOLLOW. 2020-02-11 Paul Eggert lchmod: pacify Coverity CID 1491216 * lib/lchmod.c (lchmod): Redo #if nesting so that Coverity does not complain about unreachable code at the ‘struct stat st;’ declaration. 2020-02-10 Bruno Haible copysignf: Fix link error on HP-UX with cc. * m4/copysignf.m4 (gl_FUNC_COPYSIGNF): Require AC_CANONICAL_HOST. On HP-UX, set COPYSIGNF_LIBM to -lm. 2020-02-10 Bruno Haible pthread-mutex-tests, pthread-rwlock-tests: Fix link errors on HP-UX. * modules/pthread-mutex-tests (Makefile.am): Link test-pthread-mutex with $(LIB_SEMAPHORE). * modules/pthread-rwlock-tests (Makefile.am): Link test-pthread-rwlock with $(LIB_SEMAPHORE). 2020-02-10 Bruno Haible ptsname_r-tests: Avoid unused function warning. * tests/test-ptsname_r.c: Don't include null-ptr.h if we don't need it. 2020-02-08 Bruno Haible lchmod: Add tests. * tests/test-lchmod.c: New file. * modules/lchmod-tests: New file. 2020-02-08 Bruno Haible lchmod: Ensure declaration on HP-UX. * lib/sys_stat.in.h (lchown): Declare also on HP-UX. * doc/glibc-functions/lchmod.texi: Mention the HP-UX problem. 2020-02-08 Bruno Haible fchmodat: Strengthen tests. * tests/test-fchmodat.c (BASE): New macro. (main): Use it, to avoid conflicts with other unit tests. Verify that fchmodat changed the file permission bits. 2020-02-08 Bruno Haible fchmodat: Fix endless recursion on Cygwin (regression from 2020-02-07). * lib/fchmodat.c (orig_fchmodat): Move definition to immediately after '#undef __need_system_sys_stat_h'. 2020-02-08 Bruno Haible fchmodat: Improve cross-compilation guesses. * m4/fchmodat.m4 (gl_FUNC_FCHMODAT): Require AC_CANONICAL_HOST. When cross-compiling, guess depending on the platform. * doc/posix-functions/fchmodat.texi: Clarify. 2020-02-08 Bruno Haible Fix compilation errors in a testdir created with --with-c++-tests. * lib/c++defs.h (_GL_CXXALIASWARN1_2): Do not use __typeof__ (func), since it does not work any more with g++ >= 4.4. 2020-02-08 Bruno Haible doc: Update for glibc 2.31. * doc/glibc-functions/pthread_clockjoin_np.texi: New file. * doc/gnulib.texi: Include it. * doc/pastposix-functions/h_errno.texi: Update. * doc/posix-functions/*.texi: Likewise. 2020-02-08 Kenneth D'souza mountlist: consider smb3 file systems as remote * lib/mountlist.c (ME_REMOTE): Recognize file systems of type "smb3" as remote. 2020-02-07 Paul Eggert fchmodat: AT_SYMLINK_NOFOLLOW fix for non-symlinks Fix lchmod, and fchmodat with AT_SYMLINK_NOFOLLOW, so that they act like chmod on non-symlinks. * NEWS: * doc/glibc-functions/lchmod.texi (lchmod): * doc/posix-functions/fchmodat.texi (fchmodat): Mention this. * lib/fchmodat.c: Define __need_system_sys_stat_h before including config.h, and undef it after including sys/stat.h the first time. Include fcntl.h, stdio.h, unistd.h, intprops.h, and include sys/stat.h a second time after defining orig_fchmodat. (orig_fchmodat) [HAVE_FCHMODAT]: New function. (fchmodat) [HAVE_FCHMODAT]: Work around the AT_SYMLINK_NOFOLLOW bug. * lib/lchmod.c: New file. * lib/sys_stat.in.h (fchmodat, lchmod): Support replacing these functions. * m4/fchmodat.m4 (gl_FUNC_FCHMODAT): If fchmodat exists, test that AT_SYMLINK_NOFOLLOW works on non-symlinks. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Check for lstat. Test that lchmod works on non-symlinks. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Default REPLACE_FCHMODAT and REPLACE_LCHMOD to 0. * modules/fchmodat (Depends-on): Add fstatat, intprops, lchmod, unistd. (Depends-on, configure.ac): Check REPLACE_FCHMODAT too. * modules/lchmod (Files): Add lib/lchmod.c. (Depends-on): Add errno, fcntl-h, fchmodat, intprops, lstat, unistd. (configure.ac): Compile lchmod.c if needed. (lib_SOURCES): Add lchmod.c. * modules/sys_stat (sys/stat.h): Substitute REPLACE_FCHMODAT and REPLACE_LCHMOD. * tests/test-fchmodat.c: Include fcntl.h, sys/stat.h. (main): Test fchmodat with AT_SYMLINK_NOFOLLOW on non-symlinks. 2020-02-05 Marc Dionne (tiny change) mountlist: Consider AFS filesystems as remote df --local relies on the ME_REMOTE macro to determine if a given mount entry should be considered "local". There is special logic for nfs and smb/cifs mounts, but /afs as mounted by OpenAFS, the kernel's kafs module or AuriStorFS is treated as a local mount. * lib/mountlist.c (ME_REMOTE): Treat mounts of type 'afs' (OpenAFS, kernel kafs) and 'auristorfs' (AuriStorFS) as remote. 2020-02-04 Paul Eggert Port _Noreturn to older Clang Problem reported by Jeffery Walton in: https://lists.gnu.org/r/bug-gnulib/2020-02/msg00013.html * lib/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY): Assume _Noreturn works in Clang 3.5 and later. It is documented to work in Clang 3.5: http://releases.llvm.org/3.5.0/tools/clang/docs/AttributeReference.html and is not documented in Clang 3.4: https://releases.llvm.org/3.4/tools/clang/docs/LanguageExtensions.html Apple sets __clang_version__ to a different value, so use __apple_build_version__ there. See: https://lists.gnu.org/r/bug-gnulib/2020-02/msg00017.html 2020-02-04 Pádraig Brady test-canonicalize: avoid unused function warning * tests/test-canonicalize.c: Protect the inclusion of null-ptr.h with the same guard as that used to protect usage of the null_ptr function, so that one doesn't get a -Wunused warning. * tests/test-canonicalize-lgpl.c: Likewise. 2020-02-03 Paul Eggert libc-config: port to Apple’s Clang variant * lib/libc-config.h (__glibc_clang_prereq): Port to Apple’s Clang variant, which uses a different numbering scheme for __clang_major__. 2020-02-02 Bruno Haible Document the new modules list-c++, set-c++, oset-c++, map-c++, omap-c++. * doc/containers.texi: Document these new modules. 2020-02-02 Bruno Haible omap-c++: Add tests. * tests/test-omap-c++.cc: New file. * modules/omap-c++-tests: New file. omap-c++: New module. * lib/gl_omap.hh: New file, based on lib/gl_omap.h. * modules/omap-c++: New file. 2020-02-02 Bruno Haible map-c++: Add tests. * tests/test-map-c++.cc: New file. * modules/map-c++-tests: New file. map-c++: New module. * lib/gl_map.hh: New file, based on lib/gl_map.h. * modules/map-c++: New file. 2020-02-02 Bruno Haible oset-c++: Add tests. * tests/test-oset-c++.cc: New file. * modules/oset-c++-tests: New file. oset-c++: New module. * lib/gl_oset.hh: New file, based on lib/gl_oset.h. * modules/oset-c++: New file. 2020-02-02 Bruno Haible set-c++: Add tests. * tests/test-set-c++.cc: New file. * modules/set-c++-tests: New file. set-c++: New module. * lib/gl_set.hh: New file, based on lib/gl_set.h. * modules/set-c++: New file. 2020-02-02 Bruno Haible list-c++: Add tests. * tests/test-list-c++.cc: New file. * modules/list-c++-tests: New file. list-c++: New module. * lib/gl_list.hh: New file, based on lib/gl_list.h. * modules/list-c++: New file. 2020-02-02 Bruno Haible xalloc: Fix compilation error in C++ mode on FreeBSD 12. * lib/xalloc.h (xalloc_die): Comment out 'extern' keyword before '_Noreturn'. * lib/sigpipe-die.h (sigpipe_die): Likewise. 2020-02-02 Pádraig Brady read-file: reduce max size from SIZE_MAX to PTRDIFF_MAX On x86_64 with glibc-2.30, gcc 9.2 is giving: error: argument 2 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=] The details of this restriction are discussed at: https://stackoverflow.com/q/42574890/4421 * lib/read-file.c: s/SIZE_MAX/PTRDIFF_MAX/ 2020-02-02 Pádraig Brady sysctl.h: avoid including on glibc * lib/nproc.c: Avoid including deprecated and unneeded header on GLIBC. * lib/physmem.c: Likewise. 2020-02-02 Bruno Haible list, set, oset, map, omap: Avoid imperative voice in documentation. * lib/gl_list.h: Use descriptive sentences instead of imperative voice in the specification of functions. * lib/gl_set.h: Likewise. * lib/gl_oset.h: Likewise. * lib/gl_map.h: Likewise. * lib/gl_omap.h: Likewise. * lib/gl_*.h: Likewise. 2020-02-01 Bruno Haible ansi-c++-opt: Set CXXFLAGS to "-g -O2" by default. * m4/ansi-c++.m4 (gl_PROG_ANSI_CXX): Determine CXXFLAGS like AC_PROG_CXX does. 2020-01-29 Bruno Haible array-map, hash-map, linkedhash-map: Fix module description. * modules/array-map (Description): Fix description. * modules/hash-map (Description): Likewise. * modules/linkedhash-map (Description): Likewise. 2020-01-29 Paul Eggert dfa: do not depend on isblank This removes a difference between Gawk dfa.c and Gnulib dfa.c. * lib/dfa.c (isblank): Define if neither system nor Gnulib does. * modules/dfa (Depends-on): Remove isblank. * modules/isblank: Add a module indicator, for lib/dfa.c. dfa: do not assume 64-bit int Problem reported for VAX/VMS C (!) by Arnold Robbins in: https://lists.gnu.org/r/bug-gnulib/2020-01/msg00173.html * lib/dfa.c (CHARCLASS_PAIR): Bring back this macro. (CHARCLASS_WORD_BITS, charclass_word) [!UINT_LEAST64_MAX]: Fall back to 32-bit words. (CHARCLASS_INIT): Go back to having 8 32-bit args instead of 4 64-bit args. All uses changed. 2020-01-27 Paul Eggert regex: remove limits-h dependency * modules/regex (Depends-on): Remove limits-h, since the code no longer depends on ULONG_WIDTH already being defined. regex: port to non-GCC pre-IEC-60559 Problem reported by Arnold Robbins in: https://lists.gnu.org/r/bug-gnulib/2020-01/msg00154.html * lib/regex_internal.h (ULONG_WIDTH): Make this usable in #if. 2020-01-25 Bruno Haible c32isxdigit: Add tests. * tests/test-c32isxdigit.c: New file, based on tests/test-iswxdigit.c. * tests/test-c32isxdigit.sh: New file. * modules/c32isxdigit-tests: New file. c32isxdigit: New module. * lib/c32isxdigit.c: New file. * modules/c32isxdigit: New file. * doc/posix-functions/iswxdigit.texi: Mention the new module. 2020-01-25 Bruno Haible c32isupper: Add tests. * tests/test-c32isupper.c: New file. * tests/test-c32isupper.sh: New file. * modules/c32isupper-tests: New file. c32isupper: New module. * lib/c32isupper.c: New file. * modules/c32isupper: New file. * doc/posix-functions/iswupper.texi: Mention the new module. 2020-01-25 Bruno Haible c32isspace: Add tests. * tests/test-c32isspace.c: New file. * tests/test-c32isspace.sh: New file. * modules/c32isspace-tests: New file. c32isspace: New module. * lib/c32isspace.c: New file. * modules/c32isspace: New file. * doc/posix-functions/iswspace.texi: Mention the new module. 2020-01-25 Bruno Haible c32ispunct: Add tests. * tests/test-c32ispunct.c: New file. * tests/test-c32ispunct.sh: New file. * modules/c32ispunct-tests: New file. c32ispunct: New module. * lib/c32ispunct.c: New file. * modules/c32ispunct: New file. * doc/posix-functions/iswpunct.texi: Mention the new module. 2020-01-25 Bruno Haible c32isprint: Add tests. * tests/test-c32isprint.c: New file. * tests/test-c32isprint.sh: New file. * modules/c32isprint-tests: New file. c32isprint: New module. * lib/c32isprint.c: New file. * modules/c32isprint: New file. * doc/posix-functions/iswprint.texi: Mention the new module. 2020-01-25 Bruno Haible c32islower: Add tests. * tests/test-c32islower.c: New file. * tests/test-c32islower.sh: New file. * modules/c32islower-tests: New file. c32islower: New module. * lib/c32islower.c: New file. * modules/c32islower: New file. * doc/posix-functions/iswlower.texi: Mention the new module. 2020-01-25 Bruno Haible c32isgraph: Add tests. * tests/test-c32isgraph.c: New file. * tests/test-c32isgraph.sh: New file. * modules/c32isgraph-tests: New file. c32isgraph: New module. * lib/c32isgraph.c: New file. * modules/c32isgraph: New file. * doc/posix-functions/iswgraph.texi: Mention the new module. 2020-01-25 Bruno Haible c32isdigit: Add tests. * tests/test-c32isdigit.c: New file, based on tests/test-iswdigit.c. * tests/test-c32isdigit.sh: New file. * modules/c32isdigit-tests: New file. c32isdigit: New module. * lib/c32isdigit.c: New file. * modules/c32isdigit: New file. * doc/posix-functions/iswdigit.texi: Mention the new module. 2020-01-25 Bruno Haible c32iscntrl: Add tests. * tests/test-c32iscntrl.c: New file. * tests/test-c32iscntrl.sh: New file. * modules/c32iscntrl-tests: New file. c32iscntrl: New module. * lib/c32iscntrl.c: New file. * modules/c32iscntrl: New file. * doc/posix-functions/iswcntrl.texi: Mention the new module. 2020-01-25 Bruno Haible c32isblank: Add tests. * tests/test-c32isblank.c: New file. * tests/test-c32isblank.sh: New file. * modules/c32isblank-tests: New file. c32isblank: New module. * lib/c32isblank.c: New file. * modules/c32isblank: New file. * doc/posix-functions/iswblank.texi: Mention the new module. 2020-01-25 Bruno Haible c32isalpha: Add tests. * tests/test-c32isalpha.c: New file. * tests/test-c32isalpha.sh: New file. * modules/c32isalpha-tests: New file. c32isalpha: New module. * lib/c32isalpha.c: New file. * modules/c32isalpha: New file. * doc/posix-functions/iswalpha.texi: Mention the new module. 2020-01-25 Bruno Haible c32isalnum: Add tests. * tests/test-c32isalnum.c: New file. * tests/test-c32isalnum.sh: New file. * modules/c32isalnum-tests: New file. c32isalnum: New module. * lib/c32isalnum.c: New file. * lib/c32is-impl.h: New file. * modules/c32isalnum: New file. * doc/posix-functions/iswalnum.texi: Mention the new module. 2020-01-25 Bruno Haible uchar: Preparations for modules c32isalnum, ..., c32isxdigit. * lib/uchar.in.h (c32isalnum, c32isalpha, c32isblank, c32iscntrl, c32isdigit, c32isgraph, c32islower, c32isprint, c32ispunct, c32isspace, c32isupper, c32isxdigit): New declarations. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_C32ISALNUM, GNULIB_C32ISALPHA, GNULIB_C32ISBLANK, GNULIB_C32ISCNTRL, GNULIB_C32ISDIGIT, GNULIB_C32ISGRAPH, GNULIB_C32ISLOWER, GNULIB_C32ISPRINT, GNULIB_C32ISPUNCT, GNULIB_C32ISSPACE, GNULIB_C32ISUPPER, GNULIB_C32ISXDIGIT. * modules/uchar (Makefile.am): Substitute GNULIB_C32ISALNUM, GNULIB_C32ISALPHA, GNULIB_C32ISBLANK, GNULIB_C32ISCNTRL, GNULIB_C32ISDIGIT, GNULIB_C32ISGRAPH, GNULIB_C32ISLOWER, GNULIB_C32ISPRINT, GNULIB_C32ISPUNCT, GNULIB_C32ISSPACE, GNULIB_C32ISUPPER, GNULIB_C32ISXDIGIT. * tests/test-uchar-c++.cc: Test the signature of c32isalnum, c32isalpha, c32isblank, c32iscntrl, c32isdigit, c32isgraph, c32islower, c32isprint, c32ispunct, c32isspace, c32isupper, c32isxdigit. 2020-01-25 Bruno Haible mbchar, wctype: Use the corrected iswxdigit function. * modules/mbchar (Depends-on): Add iswxdigit. * modules/wctype (Depends-on): Likewise. iswxdigit: Add tests. * tests/test-iswxdigit.c: New file. * tests/test-iswxdigit.sh: New file. * modules/iswxdigit-tests: New file. iswxdigit: New module. * m4/iswxdigit.m4: New file. * lib/wctype.in.h (iswxdigit): Potentially override. (iswxdigit, rpl_iswxdigit): Test REPLACE_ISWXDIGIT, not REPLACE_ISWCNTRL. Rely on ISO C compliant definition. * lib/iswxdigit.c: New file. * m4/wctype_h.m4 (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_ISWXDIGIT, REPLACE_ISWXDIGIT. * modules/wctype-h (Makefile.am): Substitute GNULIB_ISWXDIGIT, REPLACE_ISWXDIGIT. * modules/iswxdigit: New file. * doc/posix-functions/iswxdigit.texi: Mention the portability problem. 2020-01-25 Bruno Haible lseek: Fix the override to not undo the effects of AC_SYS_LARGEFILE. Reported by John Donoghue in . * lib/lseek.c (rpl_lseek): When AC_SYS_LARGEFILE has enabled a 64-bit off_t on mingw, invoke _lseeki64 instead of lseek. 2020-01-25 Bruno Haible iswdigit tests: Avoid test failure on Cygwin. * tests/test-iswdigit.c (for_character): If mbrtowc cannot convert the byte sequence, return 0. iswdigit: Fix test failure on native Windows. * lib/wctype.in.h (rpl_iswdigit): Rely on ISO C compliant definition. mbchar, wctype: Use the corrected iswdigit function. * modules/mbchar (Depends-on): Add iswdigit. * modules/wctype (Depends-on): Likewise. iswdigit: Add tests. * tests/test-iswdigit.c: New file. * tests/test-iswdigit.sh: New file. * modules/iswdigit-tests: New file. iswdigit: New module. * m4/iswdigit.m4: New file. * lib/wctype.in.h (iswdigit): Potentially override. (iswdigit, rpl_iswdigit): Test REPLACE_ISWDIGIT, not REPLACE_ISWCNTRL. * lib/iswdigit.c: New file. * m4/wctype_h.m4 (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_ISWDIGIT, REPLACE_ISWDIGIT. * modules/wctype-h (Makefile.am): Substitute GNULIB_ISWDIGIT, REPLACE_ISWDIGIT. * modules/iswdigit: New file. * doc/posix-functions/iswdigit.texi: Mention the portability problem. 2020-01-25 Bruno Haible hard-locale tests: Make it easy to reuse the musl test. * m4/musl.m4: New file, extracted from modules/hard-locale-tests. * modules/hard-locale-tests (Files): Add it. (configure.ac): Invoke gl_MUSL_LIBC. 2020-01-24 Paul Eggert regex: port to Gawk on nonstandard platforms * lib/regex_internal.h (ULONG_WIDTH): Define if not already defined. This is useful for Gawk, which does not use the Gnulib stdlib-h module. Problem reported by Arnold Robbins in: https://lists.gnu.org/r/bug-gnulib/2020-01/msg00138.html 2020-01-21 Paul Eggert regex: fix bug with >=16 subexpressions * lib/regex_internal.h (struct re_backref_cache_entry): Use bitset_word_t as the type of eps_reachable_subexps_map, instead of unsigned short int. This fixes a bug I introduced to glibc in 2005-09-28T17:33:18Z!drepper@redhat.com (glibc commit 2c05d33f90861d074dc12808dafbde30f487b1a0, BZ #1302). Remove unused member 'unused'. regex: simplify definition of BITSET_WORD_BITS * config/srclist.txt: Remove regex.c, regex_internal.h temporarily. * lib/regex.c (__STDC_WANT_IEC_60559_BFP_EXT__): Define. * lib/regex_internal.h (BITSET_WORD_BITS): * modules/regex (Depends-on): Add limits-h. Simplify now that we can use ULONG_WIDTH. 2020-01-20 Bruno Haible mbrtoc32: Add note about FreeBSD 12. * m4/mbrtoc32.m4 (gl_MBRTOC32_SANITYCHECK): Guess no also on FreeBSD. * doc/posix-functions/mbrtoc32.texi: Mention that FreeBSD 12 is also affected. 2020-01-20 Bruno Haible unistr/u8-uctomb: Fix warning. Reported by Andreas Schwab in . * lib/unistr/u8-uctomb.c (FALLTHROUGH): New macro. (u8_uctomb): Add FALLTHROUGH markers. 2020-01-20 Bruno Haible lock: Fix test-once1 failure on FreeBSD 11 (regression from 2020-01-19). * lib/glthread/lock.c (glthread_once_multithreaded): New function. * lib/glthread/lock.h (glthread_once_multithreaded): New declaration. (glthread_once): Use it. 2020-01-19 Bruno Haible threadlib: Disable use of weak symbols on FreeBSD 11. Reported by Tim Rühsen in . * m4/threadlib.m4 (gl_WEAK_SYMBOLS): Require AC_CANONICAL_HOST. Test against a bug in FreeBSD 11. 2020-01-19 Bruno Haible iconv_open: Improve z/OS support. * lib/iconv_open-zos.gperf: Choose better aliases. Add mapping for ISO-8859-3, KOI8-R, KOI8-U, CP775, CP857, CP865, CP1129, CP1131, CP1257. Remove mapping for EUC-TW. 2020-01-18 Bruno Haible Rename ~~gnulib.m4 to zzgnulib.m4. Suggested by Paul Eggert. * m4/zzgnulib.m4: Renamed from m4/~~gnulib.m4. * gnulib-tool (func_get_filelist): Update. * pygnulib/GLModuleSystem.py (getFiles): Likewise. 2020-01-18 Bruno Haible doc: Update license notices. * doc/*.texi: Reference the GFDL 1.3 through a URL, rather than by reference to a section or to a "file as part of this distribution". 2020-01-18 Bruno Haible Avoid error "m4_require: circular dependency of AC_LANG_COMPILER(C)". Reported by Mats Erik Andersson in . * m4/00gnulib.m4 (gl_COMPILER_CLANG): Use _AC_COMPILE_IFELSE, not AC_EGREP_CPP. 2020-01-18 Bruno Haible Ensure Automake does not drop ~~gnulib.m4. * m4/~~gnulib.m4 (gl_ZZGNULIB): New macro. * m4/gnulib-common.m4 (gl_COMMON): Require it. 2020-01-18 Bruno Haible Fix major regression from 2020-01-10. Reported by Paul Eggert in . * m4/00gnulib.m4 (gl_COMPILER_CLANG, gl_COMPILER_PREPARE_CHECK_DECL): Don't AC_REQUIRE anything. (gl_COMPILER_PREPARE_CHECK_DECL): Define through AC_DEFUN, not AC_DEFUN_ONCE. Use _AC_COMPILE_IFELSE, not AC_COMPILE_IFELSE. (_AC_CHECK_DECL_BODY): If ac_compile_for_check_decl has not been set, use ac_compile instead. (AC_CHECK_DECL): Remove override. * m4/~~gnulib.m4: New file. * gnulib-tool (func_get_filelist): Add also ~~gnulib.m4. * pygnulib/GLModuleSystem.py (getFiles): Likewise. 2020-01-17 Bruno Haible Paul Eggert glob: Fix use-after-free bug. Reported by Tim Rühsen in . * lib/glob.c (__glob): Delay freeing dirname until after the use of end_name. 2020-01-16 Siddhesh Poyarekar vcs-to-changelog: Fix parsing of fndecl without args. * build-aux/vcstocl/frontend_c.py (FNDECL_RE): Fix regular expression for empty arguments. 2020-01-16 Siddhesh Poyarekar vcs-to-changelog: Add documentation. * doc/vcs-to-changelog.texi: New file. * doc/gnulib.texi (Build Infrastructure Modules): Add vcs-to-changelog section. 2020-01-16 Siddhesh Poyarekar vcs-to-changelog: Allow loading of custom quirks file. * build-aux/vcs_to_changelog.py: New commandline option -q. 2020-01-16 Siddhesh Poyarekar vcs-to-changelog: Fix formatting of ChangeLog output. * build-aux/vcstocl/vcs_git.py (list_changes): Add newline in print output. 2020-01-16 Siddhesh Poyarekar vcs-to-changelog: Drop python3 shebang from frontend_c.py. Reported in . * build-aux/vcstocl/frontend_c.py: Remove shebang. 2020-01-15 Simon Josefsson crypto/gc-pbkdf2: New module. * MODULES.html.sh (func_all_modules): Add gc-pbkdf2. * NEWS: Deprecated gc-pbkdf2-sha1 in favor of gc-pbkdf2. * lib/gc-pbkdf2.c: New file. * lib/gc-pbkdf2-sha1.c: Use new interface. * lib/gc.h (GC_MAX_DIGEST_SIZE, gc_pbkdf2_hmac): Add. * modules/crypto/gc-pbkdf2: New file. * modules/crypto/gc-pbkdf2-tests: New file. * tests/test-gc-pbkdf2.c: New file. 2020-01-12 Bruno Haible c32stombs: Add tests. * tests/test-c32stombs.c: New file, based on tests/test-c32srtombs.c. * tests/test-c32stombs-1.sh: New file, based on tests/test-c32srtombs-1.sh. * tests/test-c32stombs-2.sh: New file, based on tests/test-c32srtombs-2.sh. * tests/test-c32stombs-3.sh: New file, based on tests/test-c32srtombs-3.sh. * tests/test-c32stombs-4.sh: New file, based on tests/test-c32srtombs-4.sh. * modules/c32stombs-tests: New file, based on modules/c32srtombs-tests. c32stombs: New module. * lib/uchar.in.h (c32stombs): New declaration. * lib/c32stombs.c: New file. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_C32STOMBS. * modules/uchar (Makefile.am): Substitute GNULIB_C32STOMBS. * modules/c32stombs: New file. * tests/test-uchar-c++.cc: Test the signature of c32stombs. * doc/posix-functions/wcstombs.texi: Mention the new module. 2020-01-11 Jim Meyering perl: require the "warnings" module * m4/perl.m4: Also "use warnings", so we reject the perl found on at least one IRIX 6.5 system. Reported by Bruno Haible in https://lists.gnu.org/r/sed-devel/2020-01/msg00004.html 2020-01-10 Bruno Haible Fix major regression from 2020-01-04. Reported by Mats Erik Andersson in . * m4/00gnulib.m4 (gl_COMPILER_PREPARE_CHECK_DECL): Define through AC_DEFUN_ONCE. (AC_CHECK_DECL): Invoke, not require, it. 2020-01-10 Bruno Haible c32snrtombs: Add tests. * tests/test-c32snrtombs.c: New file, based on tests/test-wcsnrtombs.c. * tests/test-c32snrtombs-1.sh: New file, based on tests/test-wcsnrtombs1.sh. * tests/test-c32snrtombs-2.sh: New file, based on tests/test-wcsnrtombs2.sh. * tests/test-c32snrtombs-3.sh: New file, based on tests/test-wcsnrtombs3.sh. * tests/test-c32snrtombs-4.sh: New file, based on tests/test-wcsnrtombs4.sh. * modules/c32snrtombs-tests: New file, based on modules/wcsnrtombs-tests. c32snrtombs: New module. * lib/uchar.in.h (c32snrtombs): New declaration. * lib/wcsnrtombs-impl.h: Parameterize: Use macros FUNC, SCHAR_T, INTERNAL_STATE, WCRTOMB. * lib/wcsnrtombs.c (FUNC, SCHAR_T, INTERNAL_STATE, WCRTOMB): New macros. * lib/c32snrtombs.c: New file. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_C32SNRTOMBS. * modules/uchar (Makefile.am): Substitute GNULIB_C32SNRTOMBS. * modules/c32snrtombs: New file. * tests/test-uchar-c++.cc: Test the signature of c32snrtombs. * doc/posix-functions/wcsnrtombs.texi: Mention the new module. 2020-01-09 Bruno Haible c32srtombs: Add tests. * tests/test-c32srtombs.c: New file, based on tests/test-wcsrtombs.c. * tests/test-c32srtombs-1.sh: New file, based on tests/test-wcsrtombs1.sh. * tests/test-c32srtombs-2.sh: New file, based on tests/test-wcsrtombs2.sh. * tests/test-c32srtombs-3.sh: New file, based on tests/test-wcsrtombs3.sh. * tests/test-c32srtombs-4.sh: New file, based on tests/test-wcsrtombs4.sh. * modules/c32srtombs-tests: New file, based on modules/wcsrtombs-tests. c32srtombs: New module. * lib/uchar.in.h (c32srtombs): New declaration. * lib/wcsrtombs-impl.h: Parameterize: Use macros FUNC, SCHAR_T, INTERNAL_STATE, WCRTOMB. * lib/wcsrtombs.c (FUNC, SCHAR_T, INTERNAL_STATE, WCRTOMB): New macros. * lib/c32srtombs.c: New file. * lib/c32srtombs-state.c: New file, based on lib/wcsrtombs-state.c. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_C32SRTOMBS. * modules/uchar (Makefile.am): Substitute GNULIB_C32SRTOMBS. * modules/c32srtombs: New file. * tests/test-uchar-c++.cc: Test the signature of c32srtombs. * doc/posix-functions/wcsrtombs.texi: Mention the new module. 2020-01-08 Bruno Haible c32tob: Make consistent with mbrtoc32. * lib/c32tob.c: Include , , . (c32tob): If the char32_t encoding and the wchar_t encoding may differ, use c32rtomb, not wctob. * modules/c32tob (Files): Add m4/mbrtoc32.m4. (Depends-on): Add c32rtomb. (configure.ac): Require gl_MBRTOC32_SANITYCHECK. 2020-01-08 Bruno Haible c32rtomb: Add tests. * tests/test-c32rtomb.c: New file, based on tests/test-wcrtomb.c. * tests/test-c32rtomb.sh: New file, based on tests/test-wcrtomb.sh. * tests/test-c32rtomb-w32.c: New file, based on tests/test-wcrtomb-w32.c. * tests/test-c32rtomb-w32-1.sh: New file, based on tests/test-wcrtomb-w32-1.sh. * tests/test-c32rtomb-w32-2.sh: New file, based on tests/test-wcrtomb-w32-2.sh. * tests/test-c32rtomb-w32-3.sh: New file, based on tests/test-wcrtomb-w32-3.sh. * tests/test-c32rtomb-w32-4.sh: New file, based on tests/test-wcrtomb-w32-4.sh. * tests/test-c32rtomb-w32-5.sh: New file, based on tests/test-wcrtomb-w32-5.sh. * tests/test-c32rtomb-w32-6.sh: New file, based on tests/test-wcrtomb-w32-6.sh. * tests/test-c32rtomb-w32-7.sh: New file, based on tests/test-wcrtomb-w32-7.sh. * modules/c32rtomb-tests: New file. c32rtomb: New module. * lib/uchar.in.h (c32rtomb): New declaration. * lib/c32rtomb.c: New file, based on lib/unistr/u8-uctomb-aux.c. * m4/c32rtomb.m4: New file. * m4/uchar.m4 (gl_UCHAR_H): Test whether c32rtomb is declared. (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_C32RTOMB, HAVE_C32RTOMB, REPLACE_C32RTOMB. * modules/uchar (Makefile.am): Substitute GNULIB_C32RTOMB, HAVE_C32RTOMB, REPLACE_C32RTOMB. * modules/c32rtomb: New file. * tests/test-uchar-c++.cc: Test the signature of c32rtomb. * doc/posix-functions/c32rtomb.texi: Document the new module. * doc/posix-functions/wcrtomb.texi: Mention the new module. 2020-01-08 Bruno Haible mbrtoc32: Use the system's mbrtoc32 if it exists and basically works. * m4/mbrtoc32.m4 (gl_MBRTOC32_SANITYCHECK): New macro. (gl_FUNC_MBRTOC32): Require it. Set REPLACE_MBRTOC32 if mbrtoc32 exists but is not working. * lib/mbrtoc32.c: Include hard-locale.h, . (mbrtoc32): If the char32_t encoding and the wchar_t encoding may differ, use the system's mbrtoc32, adding workarounds. * modules/mbrtoc32 (Depends-on): Add hard-locale. * doc/posix-functions/mbrtoc32.texi: Mention the Solaris and native Windows problem. * lib/btoc32.c: Include , . (btoc32): If the char32_t encoding and the wchar_t encoding may differ, use mbrtoc32, not btowc. * modules/btoc32 (Depends-on): Add mbrtoc32. * lib/mbsrtoc32s.c (mbsrtoc32s): If the char32_t encoding and the wchar_t encoding may differ, use mbrtoc32, not mbsrtowcs. * modules/mbsrtoc32s (Depends-on): Update conditions. (configure.ac): Compile mbsrtoc32s-state.c unconditionally. * lib/mbsnrtoc32s.c (mbsnrtoc32s): If the char32_t encoding and the wchar_t encoding may differ, use mbrtoc32, not mbsnrtowcs. * modules/mbsnrtoc32s (Depends-on): Update conditions. (configure.ac): Compile mbsrtoc32s-state.c unconditionally. 2020-01-07 Bruno Haible wcrtomb: Make multithread-safe, except possibly on IRIX. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Don't set REPLACE_WCRTOMB to 1 when REPLACE_MBSTATE_T is set. Define WCRTOMB_C_LOCALE_BUG and WCRTOMB_RETVAL_BUG. * lib/wcrtomb.c (wcrtomb): Use original wcrtomb whenever available. Use wctomb only on IRIX. 2020-01-05 Jim Meyering tests: skip thread-using tests when threading is disabled sed's configure.ac specifies gl_DISABLE_THREADS, and that caused three thread-using gnulib tests to fail. Add an #if-guarded exit (77) to each of those, so they are skipped in this case. * tests/test-nl_langinfo-mt.c (main): Exit 77 when threading is disabled. * tests/test-setlocale_null-mt-all.c (main): Likewise. * tests/test-setlocale_null-mt-one.c (main): Likewise. 2020-01-05 Bruno Haible tests: Avoid GCC over-optimization caused by _GL_ARG_NONNULL attributes. Reported by Jim Meyering in . * lib/stdlib.in.h (GNULIB_defined_canonicalize_file_name): New macro. (GNULIB_defined_ptsname_r): New macro. * tests/test-canonicalize.c (_GL_ARG_NONNULL): Define to empty. (main): Disable the NULL argument test if canonicalize_file_name does not come from gnulib. * tests/test-canonicalize-lgpl.c (_GL_ARG_NONNULL): Define to empty. (main): Disable the NULL argument test if canonicalize_file_name does not come from gnulib. * tests/test-ptsname_r.c (_GL_ARG_NONNULL): Define to empty. (test_errors): Disable the NULL argument test if ptsname_r does not come from gnulib. 2020-01-04 Jim Meyering update-copyright: reenable its always-skipped test * tests/test-update-copyright.sh: Restore the "-pi" options removed on 2019-06-15. Without those, an internal preliminary test would fail, causing this test always to be skipped. Verify that the test is now run and passes via this: ./gnulib-tool --test --dir /tmp/x --with-tests update-copyright 2020-01-05 Bruno Haible mbstoc32s: Add tests. * tests/test-mbstoc32s.c: New file, based on tests/test-mbsrtoc32s.c. * tests/test-mbstoc32s-1.sh: New file, based on tests/test-mbsrtoc32s-1.sh. * tests/test-mbstoc32s-2.sh: New file, based on tests/test-mbsrtoc32s-2.sh. * tests/test-mbstoc32s-3.sh: New file, based on tests/test-mbsrtoc32s-3.sh. * tests/test-mbstoc32s-4.sh: New file, based on tests/test-mbsrtoc32s-4.sh. * modules/mbstoc32s-tests: New file, based on modules/mbsrtoc32s-tests. mbstoc32s: New module. * lib/uchar.in.h (mbstoc32s): New declaration. * lib/mbstoc32s.c: New file. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_MBSTOC32S. * modules/uchar (Makefile.am): Substitute GNULIB_MBSTOC32S. * modules/mbstoc32s: New file. * tests/test-uchar-c++.cc: Test the signature of mbstoc32s. * doc/posix-functions/mbstowcs.texi: Mention the new module. 2020-01-05 Bruno Haible Tweak recently added tests. * tests/test-mbrtoc32.c: Make signature consistent with uchar.in.h. * tests/test-mbsrtoc32s.c: Likewise. * tests/test-mbsnrtoc32s.c: Likewise. 2020-01-04 Bruno Haible mbsnrtoc32s: Add tests. * tests/test-mbsnrtoc32s.c: New file, based on tests/test-mbsnrtowcs.c. * tests/test-mbsnrtoc32s-1.sh: New file, based on tests/test-mbsnrtowcs1.sh. * tests/test-mbsnrtoc32s-2.sh: New file, based on tests/test-mbsnrtowcs2.sh. * tests/test-mbsnrtoc32s-3.sh: New file, based on tests/test-mbsnrtowcs3.sh. * tests/test-mbsnrtoc32s-4.sh: New file, based on tests/test-mbsnrtowcs4.sh. * modules/mbsnrtoc32s-tests: New file, based on modules/mbsnrtowcs-tests. mbsnrtoc32s: New module. * lib/uchar.in.h (mbsnrtoc32s): New declaration. * lib/mbsnrtowcs-impl.h: Parameterize: Use macros FUNC, DCHAR_T, INTERNAL_STATE, MBRTOWC. * lib/mbsnrtowcs.c (FUNC, DCHAR_T, INTERNAL_STATE, MBRTOWC): New macros. * lib/mbsnrtoc32s.c: New file. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_MBSNRTOC32S. * modules/uchar (Makefile.am): Substitute GNULIB_MBSNRTOC32S. * modules/mbsnrtoc32s: New file. * tests/test-uchar-c++.cc: Test the signature of mbsnrtoc32s. * doc/posix-functions/mbsnrtowcs.texi: Mention the new module. 2020-01-04 Bruno Haible mbsrtoc32s tests: Enhance test. * tests/test-mbsrtoc32s.c (main): Include a non-BMP character in the test strings for UTF-8 and GB18030. 2020-01-04 Bruno Haible mbsrtoc32s: Fix bug. * modules/mbsrtoc32s (configure.ac): Require gl_UCHAR_H, to make sure that SMALL_WCHAR_T is defined. 2020-01-04 Bruno Haible mbsrtoc32s: Add tests. * tests/test-mbsrtoc32s.c: New file, based on tests/test-mbsrtowcs.c. * tests/test-mbsrtoc32s-1.sh: New file, based on tests/test-mbsrtowcs1.sh. * tests/test-mbsrtoc32s-2.sh: New file, based on tests/test-mbsrtowcs2.sh. * tests/test-mbsrtoc32s-3.sh: New file, based on tests/test-mbsrtowcs3.sh. * tests/test-mbsrtoc32s-4.sh: New file, based on tests/test-mbsrtowcs4.sh. * modules/mbsrtoc32s-tests: New file, based on modules/mbsrtowcs-tests. mbsrtoc32s: New module. * lib/uchar.in.h (mbsrtoc32s): New declaration. * lib/mbsrtowcs-impl.h: Parameterize: Use macros FUNC, DCHAR_T, INTERNAL_STATE, MBRTOWC. * lib/mbsrtowcs.c (FUNC, DCHAR_T, INTERNAL_STATE, MBRTOWC): New macros. * lib/mbsrtoc32s.c: New file. * lib/mbsrtoc32s-state.c: New file, based on lib/mbsrtowcs-state.c. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_MBSRTOC32S. * modules/uchar (Makefile.am): Substitute GNULIB_MBSRTOC32S. * modules/mbsrtoc32s: New file. * tests/test-uchar-c++.cc: Test the signature of mbsrtoc32s. * doc/posix-functions/mbsrtowcs.texi: Mention the new module. 2020-01-04 Bruno Haible mbrtowc, mbrtoc32: Tighten dependendies. * modules/mbrtowc (Depends-on): Disable hard-locale, mbsinit if REPLACE_MBSTATE_T is 1. (configure.ac): Don't compile lc-charset-dispatch.c and mbtowc-lock.c if REPLACE_MBSTATE_T is 0. * modules/mbrtoc32 (Depends-on): Remove hard-locale, mbsinit. Disable mbrtowc dependency if REPLACE_MBSTATE_T is 1. (configure.ac): Don't compile lc-charset-dispatch.c and mbtowc-lock.c if REPLACE_MBSTATE_T is 0. 2020-01-04 Bruno Haible uchar: Decide about _GL_LARGE_CHAR32_T at configure time. * m4/uchar.m4 (gl_UCHAR_H): Set SMALL_WCHAR_T. * modules/uchar (Files): Add stdint.m4. (Makefile.am): Substitute SMALL_WCHAR_T. * lib/uchar.in.h (_GL_LARGE_CHAR32_T): Rely on SMALL_WCHAR_T. 2020-01-04 Bruno Haible Fix AC_CHECK_DECL so that it deactivates clang's built-in declarations. Reported by Martin Storsjö in . * m4/00gnulib.m4 (gl_COMPILER_CLANG, gl_COMPILER_PREPARE_CHECK_DECL): New macros. (_AC_CHECK_DECL_BODY, AC_CHECK_DECL): Augment. 2020-01-04 Bruno Haible btoc32: Add tests. * tests/test-btoc32.c: New file, based on tests/test-btowc.c. * tests/test-btoc32-1.sh: New file, based on tests/test-btowc1.sh. * tests/test-btoc32-2.sh: New file, based on tests/test-btowc2.sh. * modules/btoc32-tests: New file, based on modules/btowc-tests. btoc32: New module. * lib/uchar.in.h (btoc32): New declaration. * lib/btoc32.c: New file. * m4/uchar.m4 (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_BTOC32. * modules/uchar (Makefile.am): Substitute GNULIB_BTOC32. * modules/btoc32: New file. * tests/test-uchar-c++.cc: Test the signature of btoc32. * doc/posix-functions/btowc.texi: Mention the new module. 2020-01-03 Bruno Haible uchar tests: Avoid compilation error with HP cc. * tests/test-uchar.c: Disable a test when HP cc is in use. 2020-01-03 Bruno Haible mbrtoc32: Add tests. * tests/test-mbrtoc32.c: New file, based on tests/test-mbrtowc.c. * tests/test-mbrtoc32-1.sh: New file, based on tests/test-mbrtowc1.sh. * tests/test-mbrtoc32-2.sh: New file, based on tests/test-mbrtowc2.sh. * tests/test-mbrtoc32-3.sh: New file, based on tests/test-mbrtowc3.sh. * tests/test-mbrtoc32-4.sh: New file, based on tests/test-mbrtowc4.sh. * tests/test-mbrtoc32-5.sh: New file, based on tests/test-mbrtowc5.sh. * tests/test-mbrtoc32-w32.c: New file, based on tests/test-mbrtowc-w32.c. * tests/test-mbrtoc32-w32-1.sh: New file, based on tests/test-mbrtowc-w32-1.sh. * tests/test-mbrtoc32-w32-2.sh: New file, based on tests/test-mbrtowc-w32-2.sh. * tests/test-mbrtoc32-w32-3.sh: New file, based on tests/test-mbrtowc-w32-3.sh. * tests/test-mbrtoc32-w32-4.sh: New file, based on tests/test-mbrtowc-w32-4.sh. * tests/test-mbrtoc32-w32-5.sh: New file, based on tests/test-mbrtowc-w32-5.sh. * tests/test-mbrtoc32-w32-6.sh: New file, based on tests/test-mbrtowc-w32-6.sh. * tests/test-mbrtoc32-w32-7.sh: New file, based on tests/test-mbrtowc-w32-7.sh. * modules/mbrtoc32-tests: New file, based on modules/mbrtowc-tests. mbrtoc32: New module. * lib/uchar.in.h (mbrtoc32): New declaration. * lib/mbrtoc32.c: New file, based on lib/mbrtowc.c. * m4/mbrtoc32.m4: New file, based on m4/mbrtowc.m4. * m4/uchar.m4 (gl_UCHAR_H): Test whether mbrtoc32 is declared. (gl_UCHAR_H_DEFAULTS): Initialize GNULIB_MBRTOC32, HAVE_MBRTOC32, REPLACE_MBRTOC32. * modules/uchar (Makefile.am): Substitute GNULIB_MBRTOC32, HAVE_MBRTOC32, REPLACE_MBRTOC32. * modules/mbrtoc32: New file, based on modules/mbrtowc. * tests/test-uchar-c++.cc (mbrtoc32): Verify the signature. * modules/uchar-c++-tests (Makefile.am): Link test-uchar-c++ with $(LIB_MBRTOWC). * doc/posix-functions/mbrtoc32.texi: Document the new module. * doc/posix-functions/mbrtowc.texi: Mention the new module. 2020-01-03 Bruno Haible mbrtowc: Refactor to share code with mbrtoc32. * lib/mbrtowc-impl.h: New file, extracted from lib/mbrtowc.c. * lib/mbrtowc-impl-utf8.h: Likewise. * lib/mbrtowc.c (mbrtowc): Define macro FITS_IN_CHAR_TYPE. Include mbrtowc-impl.h. * modules/mbrtowc (Files): Add the new files. 2020-01-03 Jim Meyering doc: fix time.texi wording * doc/posix-headers/time.texi (time.h): Typo. 2020-01-03 Bruno Haible mbrtowc: Refactor locale charset dispatching. * lib/lc-charset-dispatch.h: New file, extracted from lib/mbrtowc.c. * lib/lc-charset-dispatch.c: New file, extracted from lib/mbrtowc.c. * lib/mbrtowc.c: Include lc-charset-dispatch.h. Don't include localcharset.h, streq.h. (enc_t): Remove type. (locale_enc): Remove function. (cached_locale_enc): Remove variable. (locale_enc_cached): Remove function. (mbrtowc): Invoke locale_encoding_classification. * m4/mbrtowc.m4 (gl_PREREQ_MBRTOWC): Update comment. * modules/mbrtowc (Files): Add lc-charset-dispatch.h, lc-charset-dispatch.c. (configure.ac): Arrange to compile lc-charset-dispatch.c. 2020-01-03 Paul Eggert doc: mention 32-bit time_t issue * doc/posix-headers/sys_stat.texi (sys/stat.h): * doc/posix-headers/time.texi (time.h): Mention 2038. 2020-01-03 Bruno Haible mbrtowc: Ensure the mbtowc_lock is unique. * lib/mbtowc-lock.c: New file, based on lib/setlocale-lock.c. * lib/mbtowc-lock.h: New file, extracted from lib/mbrtowc.c and lib/setlocale_null.c. * lib/mbrtowc.c: Include headers needed for mbtowc-lock.h. Don't include glthread/lock.h. Include mbtowc-lock.h. (mbtowc_lock): Remove declaration. (mbrtowc): Use mbtowc_with_lock. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): Require gl_PTHREADLIB. Check for threads.h. Set LIB_MBRTOWC. (gl_PREREQ_MBTOWC_LOCK): New macro. * modules/mbrtowc (Files): Add lib/mbtowc-lock.h, lib/mbtowc-lock.c, lib/windows-initguard.h, m4/threadlib.m4, m4/visibility.m4. (Depends-on): Remove lock. (configure.ac): Arrange to compile mbtowc-lock.c. (Link): Mention $(LIB_MBRTOWC) instead of $(LIBTHREAD). * modules/acl (Link): Likewise. * modules/argmatch (Link): Likewise. * modules/backup-rename (Link): Likewise. * modules/backupfile (Link): Likewise. * modules/closein (Link): Likewise. * modules/closeout (Link): Likewise. * modules/copy-file (Link): Likewise. * modules/csharpcomp (Link): Likewise. * modules/csharpexec (Link): Likewise. * modules/dfa (Link): Likewise. * modules/exclude (Link): Likewise. * modules/fnmatch (Link): Likewise. * modules/fnmatch-gnu (Link): Likewise. * modules/fnmatch-posix (Link): Likewise. * modules/glob (Link): Likewise. * modules/human (Link): Likewise. * modules/javacomp (Link): Likewise. * modules/javaexec (Link): Likewise. * modules/javaversion (Link): Likewise. * modules/mbfile (Link): Likewise. * modules/mbiter (Link): Likewise. * modules/mbmemcasecmp (Link): Likewise. * modules/mbmemcasecoll (Link): Likewise. * modules/mbrlen (Link): Likewise. * modules/mbscasecmp (Link): Likewise. * modules/mbscasestr (Link): Likewise. * modules/mbschr (Link): Likewise. * modules/mbscspn (Link): Likewise. * modules/mbsinit (Link): Likewise. * modules/mbslen (Link): Likewise. * modules/mbsncasecmp (Link): Likewise. * modules/mbsnlen (Link): Likewise. * modules/mbsnrtowcs (Link): Likewise. * modules/mbspbrk (Link): Likewise. * modules/mbspcasecmp (Link): Likewise. * modules/mbsrchr (Link): Likewise. * modules/mbsrtowcs (Link): Likewise. * modules/mbssep (Link): Likewise. * modules/mbsspn (Link): Likewise. * modules/mbsstr (Link): Likewise. * modules/mbstok_r (Link): Likewise. * modules/mbswidth (Link): Likewise. * modules/mbuiter (Link): Likewise. * modules/mkdir-p (Link): Likewise. * modules/propername (Link): Likewise. * modules/quote (Link): Likewise. * modules/quotearg (Link): Likewise. * modules/quotearg-simple (Link): Likewise. * modules/regex-quote (Link): Likewise. * modules/rpmatch (Link): Likewise. * modules/sh-quote (Link): Likewise. * modules/system-quote (Link): Likewise. * modules/trim (Link): Likewise. * modules/unistdio/ulc-asnprintf (Link): Likewise. * modules/unistdio/ulc-fprintf (Link): Likewise. * modules/unistdio/ulc-vasnprintf (Link): Likewise. * modules/unistdio/ulc-vasprintf (Link): Likewise. * modules/unistdio/ulc-vfprintf (Link): Likewise. * modules/unistdio/ulc-vsnprintf (Link): Likewise. * modules/unistdio/ulc-vsprintf (Link): Likewise. * modules/xfreopen (Link): Likewise. * modules/xmemcoll (Link): Likewise. * modules/yesno (Link): Likewise. * modules/regex (Link): Add $(LIB_MBRTOWC). * modules/acl-tests (Makefile.am): Link the programs with $(LIB_MBRTOWC) instead of $(LIBTHREAD). * modules/argmatch-tests (Makefile.am): Likewise. * modules/closein-tests (Makefile.am): Likewise. * modules/copy-file-tests (Makefile.am): Likewise. * modules/dfa-tests (Makefile.am): Likewise. * modules/fnmatch-tests (Makefile.am): Likewise. * modules/glob-tests (Makefile.am): Likewise. * modules/mbmemcasecmp-tests (Makefile.am): Likewise. * modules/mbmemcasecoll-tests (Makefile.am): Likewise. * modules/mbrtowc-tests (Makefile.am): Likewise. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsinit-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbsnrtowcs-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsrtowcs-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/quotearg-simple-tests (Makefile.am): Likewise. * modules/quotearg-tests (Makefile.am): Likewise. * modules/readtokens-tests (Makefile.am): Likewise. * modules/sh-quote-tests (Makefile.am): Likewise. * modules/system-quote-tests (Makefile.am): Likewise. * modules/unistdio/ulc-asnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vsnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vsprintf-tests (Makefile.am): Likewise. * modules/yesno-tests (Makefile.am): Likewise. * modules/exclude-tests (Makefile.am): Link the programs with $(LIB_MBRTOWC). * modules/regex-tests (Makefile.am): Likewise. * modules/regex-quote-tests (Makefile.am): Likewise. 2020-01-03 Bruno Haible getopt-posix: Fix compilation failure in testdirs. * lib/unistd.in.h: Include and only when the gnulib module 'getopt-posix' is enabled. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETOPT_POSIX. * modules/getopt-posix (configure.ac): Set GNULIB_GETOPT_POSIX as a module indicator. * modules/unistd (Makefile.am): Substitute GNULIB_GETOPT_POSIX. 2020-01-03 Bruno Haible doc: Mention the 64-bit inode number problem. * m4/largefile.m4 (AC_SYS_LARGEFILE): Mention that this macro fixes the 64-bit inode number problem. * doc/posix-functions/stat.texi: Mention that this module fixes the 64-bit inode number problem. * doc/posix-functions/lstat.texi: Likewise. * doc/posix-functions/fstat.texi: Likewise. * doc/posix-functions/readdir.texi: Add more details. * doc/posix-functions/readdir_r.texi: Likewise. 2020-01-02 Bruno Haible wcrtomb: Add more tests. * tests/test-wcrtomb-w32.c: Include localcharset.h. (test_one_locale): For the GB18030 and UTF-8 tests, verify that locale_charset() returns the expected value; otherwise, skip the test. * tests/test-wcrtomb-w32-6.sh: Remove old comment. * tests/test-wcrtomb-w32-7.sh: Likewise. * modules/wcrtomb-tests (Files): Add these files. (Depends-on): Add localcharset. (TESTS): Add test-wcrtomb-w32-6.sh, test-wcrtomb-w32-7.sh. 2020-01-02 Bruno Haible mbrtowc: Add more tests. * tests/test-mbrtowc-w32.c: Include localcharset.h. (test_one_locale): For the GB18030 and UTF-8 tests, verify that locale_charset() returns the expected value; otherwise, skip the test. * tests/test-mbrtowc-w32-6.sh: Remove old comment. * tests/test-mbrtowc-w32-7.sh: Likewise. * modules/mbrtowc-tests (Files): Add these files. (Depends-on): Add localcharset. (TESTS): Add test-mbrtowc-w32-6.sh, test-mbrtowc-w32-7.sh. 2020-01-02 Bruno Haible mbrtowc: Fix test failures on MSVC (regression by previous commit). * m4/mbrtowc.m4 (gl_MBRTOWC_STORES_INCOMPLETE): New macro. (gl_FUNC_MBRTOWC): Invoke it. Define MBRTOWC_STORES_INCOMPLETE_BUG. * lib/mbrtowc.c (rpl_mbrtowc): Add workaround for MBRTOWC_STORES_INCOMPLETE_BUG. * doc/posix-functions/mbrtowc.texi: Mention the MSVC bug. 2020-01-02 Paul Eggert doc: mention glibc bug 24269 * doc/regex.texi (Back-reference Operator): Add glibc bug 24269. Reformat slightly so that it looks nicer in the Grep manual. 2020-01-02 Bruno Haible mbrtowc: Don't replace mbstate_t on MSVC. * m4/mbrtowc.m4 (gl_MBSTATE_T_BROKEN): Require AC_CANONICAL_HOST. Ignore a missing mbsinit function on native Windows. * lib/wchar.in.h (GNULIB_defined_mbstate_t): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Strengthen the test, to detect an MSVC bug. * doc/posix-functions/wcrtomb.texi: Mention the MSVC bug. 2020-01-02 Bruno Haible setlocale-null: Avoid crashing the MSVC linker. * lib/setlocale-lock.c: Don't define IMP(gl_get_setlocale_null_lock) on MSVC. 2020-01-02 Bruno Haible wchar: Make the HP-UX workaround work on HP-UX 11.31. * modules/wchar (Depends-on): Add inttypes-incomplete. * lib/inttypes.in.h: Define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H. * lib/wchar.in.h: Test _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H instead of strtoimax. 2020-01-02 Bruno Haible mbrtowc: Fix compilation error on IRIX (regression from 2019-12-26). * lib/mbrtowc.c: Include . * modules/mbrtowc (Depends-on): Add stdint. 2020-01-01 Pádraig Brady md5, sha1, sha256, sha512: support --with-openssl=auto-gpl-compat * m4/gl-openssl.m4: Add a new "auto-gpl-compat" mode, which will auto enable use of openssl, only for >= version 3, which is newly licensed under the Apache Software License. 2020-01-01 Bruno Haible mbrtowc: Include function name in macro names. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): Define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ, not C_LOCALE_MAYBE_EILSEQ. (gl_MBRTOWC_C_LOCALE): Change cache variable name to gl_cv_func_mbrtowc_C_locale_sans_EILSEQ. * lib/mbrtowc.c: Test MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ, not C_LOCALE_MAYBE_EILSEQ. 2020-01-01 Bruno Haible c32tob: New module. * lib/uchar.in.h (_GL_LARGE_CHAR32_T): New macro. (c32tob): New declaration. * lib/c32tob.c: New file. * m4/uchar.m4 (gl_UCHAR_MODULE_INDICATOR, gl_UCHAR_H_DEFAULTS): New macros. (gl_UCHAR_H): Require gl_UCHAR_H_DEFAULTS. * modules/uchar (Depends-on): Add snippet/c++defs. (Makefile.am): Include c++defs.h and substitute GNULIB_C32TOB in uchar.h. * modules/c32tob: New file. * tests/test-uchar.c: Verify that _GL_LARGE_CHAR32_T is correctly defined. * tests/test-uchar-c++.cc: Include signature.h. Test the signature of c32tob. * modules/uchar-c++-tests (Files): Add tests/signature.h. * doc/posix-functions/wctob.texi: Mention the new module. 2020-01-01 Bruno Haible locale C++ tests: Fix link error on AIX (regression from 2019-12-18). * modules/locale-c++-tests (Makefile.am): Link test-locale-c++ with $(LIB_SETLOCALE). 2020-01-01 Bruno Haible hard-locale tests: Fix a conflict with the C++ tests. * modules/hard-locale-tests (Makefile.am): Build a program named 'current-locale', not 'locale'. 2020-01-01 Bruno Haible doc: Update documentation about wchar_t. * doc/*/*wc*.texi: Clarify that 64-bit AIX does not have a too small wchar_t type. 2020-01-01 Bruno Haible mbrtowc tests: Fix typos. * tests/test-mbrtowc.c (main): Fix typo. * tests/test-mbrtowc-w32.c (test_one_locale): Likewise. 2019-12-31 Paul Eggert maint: update copyright notices Before doing the following changes done by hand, I also ran ‘make update-copyright’ and ‘config/srclist-update uchar: Add C++ tests. * tests/test-uchar-c++.cc: New file. * tests/test-uchar-c++2.cc: New file. * modules/uchar-c++-tests: New file. uchar: Add tests. * tests/test-uchar.c: New file. * modules/uchar-tests: New file. uchar: New module. * lib/uchar.in.h: New file. * m4/uchar.m4: New file. * modules/uchar: New file. * doc/posix-headers/uchar.texi: Mention the new module. 2019-12-30 Jim Meyering localeinfo: ->simple would be wrong for LC_ALL=C That would lead to using unnecessary and expensive code paths in dfa.c. * lib/localeinfo.c (using_simple_locale): Fix recently-introduced logic error that would have made grep many times slower in the C locale. With this change, and a file created like this: yes 00 | head -10000000 > in Running grep as follows becomes more than 40 times faster: LC_ALL=C grep -Fw 0 in 2019-12-30 Paul Eggert doc: document trouble with back-references * doc/regex.texi (Back-reference Operator): Mention bugs etc. 2019-12-29 Paul Eggert doc: use “back-reference” for \1 etc. * doc/regex.texi: Consistently spell “back-reference” with a hyphen, since that’s how POSIX does it. 2019-12-26 Jim Meyering test-framework-sh: tighten an internal grep regexp * tests/init.sh (gl_shell_test_script_): Tighten the grep regexp that helps test for a working printf. 2019-12-26 Bruno Haible test-framework-sh: Avoid /bin/sh on AIX 7.2 due to its printf built-in. Reported by Paul Eggert in . Simplification by Jim Meyering. * tests/init.sh (gl_shell_test_script_): Add a test of printf of an octal escape sequence in a UTF-8 locale. 2019-12-26 Paul Eggert mbrtowc: port better to narrow-wchar_t platforms * lib/mbrtowc.c (mbrtowc): On platforms like AIX 7.2, where wchar_t is too narrow to represent all the Unicode characters, consider a byte sequence for an out-of-wchar_t-range character to be an encoding error. This fixes grep’s surrogate-pair test failure on AIX 7.2. 2019-12-24 Bruno Haible localcharset: Avoid referencing rpl_setlocale on native Windows. * lib/localcharset.c (setlocale): Undefine. 2019-12-24 Bruno Haible lock tests: Fix link error on HP-UX/hppa (regression from 2019-12-21). * m4/semaphore.m4: New file. * modules/lock-tests (Files): Add it. (configure.ac): Require gl_SEMAPHORE. (Makefile.am): Link test-lock with $(LIB_SEMAPHORE). 2019-12-24 Paul Eggert strptime: fix typo in previous patch Problem and fix reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00202.html * lib/strptime.c (day_of_the_week): Fix paren bug. 2019-12-24 Bruno Haible setlocale-null: Make it easy to rely on the lock in another library. * lib/setlocale-lock.c: Do not define anything if OMIT_SETLOCALE_LOCK is defined. 2019-12-23 Paul Eggert gethrxtime, mktime, nstrftime, strptime: tweak division performance Performanced analyzed by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00200.html * config/srclist.txt: Do not sync mktime.c for now. * lib/mktime.c (shr, ydhms_diff): * lib/nstrftime.c (SHR, tm_diff, __strftime_internal): * lib/strptime.c (day_of_the_week): * lib/xtime.h (xtime_sec): Redo with neither ‘%’ nor conditional branches. 2019-12-23 Bruno Haible setlocale-null: Export the lock function also on non-Windows platforms. * lib/setlocale-lock.c (DLL_EXPORTED): New macro. (gl_get_setlocale_null_lock): Declare as DLL_EXPORTED. * m4/setlocale_null.m4 (gl_PREREQ_SETLOCALE_LOCK): New macro. * modules/setlocale-null (configure.ac): Invoke it. (Files): Add m4/visibility.m4. 2019-12-22 Paul Eggert gethrxtime: fix rounding bug with negative args Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00192.html * lib/xtime.h (xtime_sec): Simplify calculation and correct bug with negative rounding. Common platforms can compute / and % with a single instruction, so the simplified code should be shorter and faster on these platforms anyway. 2019-12-22 Bruno Haible gethrxtime: remove incorrect overflow detection * lib/xtime.h (xtime_make): Remove attempt to prevent internal integer overflow, as it didn’t suffice. This reverts the xtime.h part of 2018-10-12T04:46:09Z!akim.demaille@gmail.com, which I cannot now see the need for anyway (even in cases where it works), as the patch is helpful only when the signs of S and NS disagree, and all callers pass nonnegative values for S and NS. 2019-12-22 Bruno Haible setlocale-null: Add standalone include file. * lib/setlocale_null.h: New file, extracted from lib/locale.in.h. * lib/locale.in.h: Include setlocale_null.h. (SETLOCALE_NULL_MAX, SETLOCALE_NULL_ALL_MAX, setlocale_null_r, setlocale_null): Remove declarations. * lib/setlocale_null.c: Include setlocale_null.h. * lib/localename.c: Likewise. * modules/setlocale-null (Files): Add lib/setlocale_null.h. (Depends-on): Add snippet/arg-nonnull. (Include): Allow either "setlocale_null.h" or . 2019-12-22 Bruno Haible strfmon_l: Fix test failures on FreeBSD and Cygwin. * m4/strfmon_l.m4 (gl_FUNC_STRFMON_L): Require gt_LOCALE_FR_UTF8. Add an AC_RUN_IFELSE test. * modules/strfmon_l (Files): Add locale-fr.m4, codeset.m4. * doc/posix-functions/strfmon_l.texi: Mention the FreeBSD and Cygwin problem. 2019-12-22 Bruno Haible Prefer lib_SOURCES to unconditional AC_LIBOBJ. * modules/at-internal: Prefer a lib_SOURCES augmentation to an unconditional AC_LIBOBJ. * modules/selinux-at: Likewise. * modules/xmemdup0: Likewise. * modules/xstrtoll: Likewise. 2019-12-22 Bruno Haible longlong: Mark module obsolete. * modules/longlong (Status, Notice): New sections. stdint: Assume that the compiler supports 'long long'. * lib/stdint.in.h (int64_t, uint64_t, intmax_t, uintmax_t, INT64_C, UINT64_C, INTMAX_C, UINTMAX_C): Assume HAVE_LONG_LONG_INT and HAVE_UNSIGNED_LONG_LONG_INT to be 1. * m4/stdint.m4 (gl_STDINT_H): Don't require AC_TYPE_LONG_LONG_INT, AC_TYPE_UNSIGNED_LONG_LONG_INT. * modules/stdint (Files): Remove longlong.m4. (Makefile.am): Don't substitute HAVE_LONG_LONG_INT, HAVE_UNSIGNED_LONG_LONG_INT. inttypes-incomplete: Assume that the compiler supports 'long long'. * lib/inttypes.in.h (_PRI64_PREFIX, _PRIu64_PREFIX, _SCN64_PREFIX, _SCNu64_PREFIX): Assume HAVE_LONG_LONG_INT and HAVE_UNSIGNED_LONG_LONG_INT to be 1. * m4/inttypes.m4 (gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION): Assume HAVE_LONG_LONG_INT to be 1. * modules/inttypes-incomplete (Makefile.am): Don't substitute HAVE_LONG_LONG_INT, HAVE_UNSIGNED_LONG_LONG_INT. malloca: Assume that the compiler supports 'long long'. * lib/malloca.h: Assume HAVE_LONG_LONG_INT to be 1. * m4/malloca.m4 (gl_MALLOCA): Don't require AC_TYPE_LONG_LONG_INT. * modules/malloca (Files): Remove longlong.m4. * modules/relocatable-prog-wrapper (Files): Likewise. atoll: Assume that the compiler supports 'long long'. * m4/atoll.m4 (gl_FUNC_ATOLL): Don't require AC_TYPE_LONG_LONG_INT. * modules/atoll (Files): Remove longlong.m4. strtoll: Assume that the compiler supports 'long long'. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Don't require AC_TYPE_LONG_LONG_INT. * modules/strtoll (Files): Remove longlong.m4. strtoull: Assume that the compiler supports 'long long'. * m4/strtoull.m4 (gl_FUNC_STRTOULL): Don't require AC_TYPE_UNSIGNED_LONG_LONG_INT. * modules/strtoull (Files): Remove longlong.m4. strtoimax, strtoumax: Assume that the compiler supports 'long long'. * lib/strtoimax.c: Assume HAVE_LONG_LONG_INT and HAVE_UNSIGNED_LONG_LONG_INT to be 1. * m4/strtoimax.m4 (gl_PREREQ_STRTOIMAX): Don't require AC_TYPE_LONG_LONG_INT. * m4/strtoumax.m4 (gl_PREREQ_STRTOUMAX): Don't require AC_TYPE_UNSIGNED_LONG_LONG_INT. * modules/strtoimax (Files): Remove longlong.m4. * modules/strtoumax (Files): Likewise. xstrtoll: Assume that the compiler supports 'long long'. * lib/xstrtol.h (xstrtoll, xstrtoull): Declare unconditionally. * modules/xstrtoll (configure.ac): Don't invoke AC_TYPE_LONG_LONG_INT. vasnprintf: Assume that the compiler supports 'long long'. * lib/printf-args.h: Assume HAVE_LONG_LONG_INT to be 1. * lib/printf-args.c (PRINTF_FETCHARGS): Likewise. * lib/printf-parse.c (PRINTF_PARSE): Likewise. * lib/vasnprintf.c (MAX_ROOM_NEEDED, VASNPRINTF): Likewise. * m4/intmax_t.m4 (gl_AC_TYPE_INTMAX_T, gt_AC_TYPE_INTMAX_T): Don't require AC_TYPE_LONG_LONG_INT. * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_ARGS, gl_PREREQ_PRINTF_PARSE, gl_PREREQ_VASNPRINTF): Likewise. * modules/vasnprintf (Files): Remove longlong.m4. * modules/c-vasnprintf (Files): Likewise. * modules/unistdio/u8-vasnprintf (Files): Likewise. * modules/unistdio/u8-u8-vasnprintf (Files): Likewise. * modules/unistdio/u16-vasnprintf (Files): Likewise. * modules/unistdio/u16-u16-vasnprintf (Files): Likewise. * modules/unistdio/u32-vasnprintf (Files): Likewise. * modules/unistdio/u32-u32-vasnprintf (Files): Likewise. * modules/unistdio/ulc-vasnprintf (Files): Likewise. gethrxtime: Assume that the compiler supports 'long long'. * lib/xtime.h (xtime_t): Define to 'long long int' always. (XTIME_PRECISION): Define to 1000000000 always. (xtime_make, xtime_sec): Optimize accordingly. * m4/gethrxtime.m4 (gl_XTIME): Don't require AC_TYPE_LONG_LONG_INT. * modules/gethrxtime (Files): Remove longlong.m4. integer_length*: Assume that the compiler supports 'long long'. * lib/integer_length.h (integer_length_ll): Declare unconditionally. * modules/integer_length (Files): Remove longlong.m4. (configure.ac): Don't require AC_TYPE_UNSIGNED_LONG_LONG_INT. * modules/integer_length_l (Files): Remove longlong.m4. (configure.ac): Don't require AC_TYPE_UNSIGNED_LONG_LONG_INT. * modules/integer_length_ll (Files): Remove longlong.m4. (configure.ac): Don't require AC_TYPE_UNSIGNED_LONG_LONG_INT. count-one-bits: Assume that the compiler supports 'long long'. * lib/count-one-bits.h (count_one_bits_ll): Define unconditionally. * m4/count-one-bits.m4: Remove file. * modules/count-one-bits (Files): Remove it. (configure.ac): Don't invoke gl_COUNT_ONE_BITS. * tests/test-count-one-bits.c (main): Test count_one_bits_ll unconditionally. count-trailing-zeros: Assume that the compiler supports 'long long'. * lib/count-trailing-zeros.h (count_trailing_zeros_ll): Define unconditionally. * m4/count-trailing-zeros.m4: Remove file. * modules/count-trailing-zeros (Files): Remove it. (configure.ac): Don't invoke gl_COUNT_TRAILING_ZEROS. * tests/test-count-trailing-zeros.c (main): Test count_trailing_zeros_ll unconditionally. count-leading-zeros: Assume that the compiler supports 'long long'. * lib/count-leading-zeros.h (count_leading_zeros_ll): Define unconditionally. * m4/count-leading-zeros.m4: Remove file. * modules/count-leading-zeros (Files): Remove it. (configure.ac): Don't invoke gl_COUNT_LEADING_ZEROS. * tests/test-count-leading-zeros.c (main): Test count_leading_zeros_ll unconditionally. 2019-12-22 Bruno Haible localcharset: Update support for OpenBSD. * lib/localcharset.c (alias_table): Map "US-ASCII" to "ASCII". 2019-12-21 Bruno Haible pthread_sigmask: Avoid test failure on NetBSD 8.0. * tests/test-pthread_sigmask2.c (main): Skip the error handling test on NetBSD. * doc/posix-functions/pthread_sigmask.texi: Mention the NetBSD problem. 2019-12-21 Bruno Haible threadlib: Improve code structure. * m4/threadlib.m4: Reorder macros. Add comments. 2019-12-21 Bruno Haible threadlib: Fix LIBMULTITHREAD on FreeBSD with --enable-threads=isoc. * m4/threadlib.m4 (gl_STDTHREADLIB_BODY): New macro (some code moved here from m4/threads.m4). (gl_THREADLIB_BODY): Don't test whether mtx_lock and cnd_timedwait exist in libc. Instead, rely on gl_STDTHREADLIB_BODY. (gl_STDTHREADLIB): New macro. * m4/threads.m4 (gl_THREADS_H): Require gl_STDTHREADLIB instead of gl_THREADLIB_BODY and gl_YIELD. Don't set LIBSTDTHREAD here. 2019-12-21 Bruno Haible sched_yield: Don't depend on threadlib and yield. * m4/threadlib.m4 (gl_PTHREADLIB): Document that it sets LIB_SCHED_YIELD. (gl_PTHREADLIB_BODY): Set LIB_SCHED_YIELD (code moved here from m4/yield.m4). * m4/sched_yield.m4 (gl_FUNC_SCHED_YIELD): Require gl_PTHREADLIB, not gl_THREADLIB and gl_YIELD. * m4/yield.m4 (gl_YIELD): Require gl_PTHREADLIB. Determine YIELD_LIB based on $(LIB_SCHED_YIELD). * m4/threads.m4 (gl_THREADS_H): Don't require gl_YIELD. Use $(LIB_SCHED_YIELD), not $(YIELD_LIB). * modules/sched_yield (Files): Remove yield.m4. Add threadlib.m4. (Depends-on): Remove threadlib. (Link): Mention $(LIB_SCHED_YIELD), not $(YIELD_LIB). * modules/threads-h (Files): Remove m4/yield.m4. * modules/pthread-cond-tests (Makefile.am): Link the programs against $(LIB_SCHED_YIELD), not $(YIELD_LIB). * modules/pthread-mutex-tests (Makefile.am): Likewise. * modules/pthread-once-tests (Makefile.am): Likewise. * modules/pthread-rwlock-tests (Makefile.am): Likewise. * modules/pthread-tss-tests (Makefile.am): Likewise. 2019-12-21 Bruno Haible threads-h: Don't depend on threadlib. * modules/threads-h (configure.ac-early): Invoke gl_ANYTHREADLIB_EARLY, not gl_THREADLIB_EARLY. 2019-12-21 Bruno Haible nl_langinfo tests: Fix link error (regression from 2019-12-18). * modules/nl_langinfo-tests (Makefile.am): Link also test-nl_langinfo with $(LIB_SETLOCALE). 2019-12-21 Bruno Haible threadlib: Remove unused dependency (left over from 2019-07-06). * modules/threadlib (Depends-on): Remove havelib. 2019-12-21 Bruno Haible New convention for multithread-safety tests. * tests/test-setlocale_null-mt-one.c: Renamed from tests/test-setlocale_null-one.c. * tests/test-setlocale_null-mt-all.c: Renamed from tests/test-setlocale_null-all.c. * modules/setlocale-null-tests (Files, Makefile.am): Update. 2019-12-21 Bruno Haible quotearg tests: Fix conflict with hard-locale tests. * tests/testlocale: Renamed from tests/locale. * modules/quotearg-tests (Files): Update. * tests/test-quotearg.sh (LOCALEDIR): Likewise. 2019-12-21 Bruno Haible pthread-thread, lock: On z/OS, use PTHREAD_RWLOCK_INITIALIZER_NP. Reported by Daniel Richard G. in * lib/pthread.in.h (PTHREAD_RWLOCK_INITIALIZER): Define to PTHREAD_RWLOCK_INITIALIZER_NP when possible. * lib/glthread/lock.h: Allow PTHREAD_RWLOCK_INITIALIZER_NP as an alternative to PTHREAD_RWLOCK_INITIALIZER. * lib/glthread/lock.c: Likewise. 2019-12-21 Bruno Haible memcmp tests: Work around the clang bug. * tests/test-memcmp.c (main): Use a volatile function pointer to disable the clang optimization. 2019-12-20 Bruno Haible localcharset: Add support for z/OS encoding names. * lib/localcharset.h: Mention which encodings are used as locale encodings on z/OS. 2019-12-20 Bruno Haible iconv_open: Add support for z/OS encoding names. Reported by Daniel Richard G. in . * lib/iconv_open-zos.gperf: New file. * modules/iconv_open (Files): Add iconv_open-zos.gperf. (Makefile.am): Add rules for generating iconv_open-zos.h from it. * lib/iconv_open.c (ICONV_FLAVOR_ZOS): New macro. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): On z/OS, use ICONV_FLAVOR_ZOS. * doc/posix-functions/iconv_open.texi: Mention z/OS. 2019-12-20 Bruno Haible doc: Document the problem of the per-thread locale functions on z/OS. * doc/posix-functions/uselocale.texi: Document the z/OS problem. * doc/posix-functions/newlocale.texi: Likewise. * doc/posix-functions/duplocale.texi: Likewise. * doc/posix-functions/freelocale.texi: Likewise. 2019-12-20 Bruno Haible localename, gettext: Fix host_os value for z/OS. * m4/intl-thread-locale.m4 (gt_FUNC_USELOCALE): Fix host_os value in cross-configuration code. 2019-12-19 Jim Meyering nstrftime: avoid a shadowing warning * lib/nstrftime.c (libc_hidden_def): Rename inner "i" to "j", to avoid shadowing an "i" declared hundreds of lines above. 2019-12-19 Paul Eggert dfa: struct dfamust now uses flexible array * lib/dfa.c: Include flexmember.h. (dfamust, dfamustfree): Adjust to struct dfamust change. This saves a call to malloc+free. * lib/dfa.h (struct dfamust): Make the final member a flexible array member. * modules/dfa (Depends-on): Add flexmember. dfa: fast->small for array elements * lib/dfa.c (charclass_word): Use uint_least64_t not uint_fast64_t, since this type is used in arrays. This change is more for documentation than for any practical effect, since the two types are the same on all known platforms. 2019-12-19 Bruno Haible iconv tests: Test canonicalized, not system-dependent, encoding names. * tests/test-iconv.c (main): Revert part of the 2016-08-17 patch. * modules/iconv-tests (Depends-on): Add iconv_open. 2019-12-18 Bruno Haible localename: Fix test failure on AIX 7.2. * m4/intl-thread-locale.m4 (gt_INTL_THREAD_LOCALE_NAME): Enable nameless locales on AIX. * lib/localename.c (gl_locale_name_thread_unsafe): Handle nameless locales on AIX. 2019-12-18 Paul Eggert Improve port of AC_C_RESTRICT to Oracle C++ Problem reported by Christian Biesinger in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00159.html * m4/gnulib-common.m4 (AC_C_RESTRICT): Port better to Oracle Developer Studio C++ 12.5 or later. 2019-12-18 Bruno Haible wchar: Fix test failures on AIX and MSVC (regression from 2019-12-07). * lib/wchar.in.h (GNULIB_defined_mbstate_t): Do define on AIX and MSVC. 2019-12-18 Bruno Haible localename: Ensure multithread-safety in future changes. * lib/localename.c (setlocale): Reference the system's setlocale(). (get_locale_t_name): Invoke setlocale_null instead of setlocale. (gl_locale_name_posix): Likewise. * modules/localename (Depends-on): Add setlocale-null. 2019-12-18 Bruno Haible setlocale-null: Make API more useful. * lib/locale.in.h (setlocale_null_r): Renamed from setlocale_null. All callers changed. (setlocale_null): New declaration. * lib/setlocale_null.c (setlocale_null_androidfix): New function, extracted from setlocale_null_unlocked. (setlocale_null_unlocked): Invoke it. (setlocale_null_r): Renamed from setlocale_null. (setlocale_null): New function, extracted from setlocale_mtsafe in setlocale.c. * lib/setlocale.c: Don't include . (setlocale_mtsafe): Invoke setlocale_null. * lib/setlocale-lock.c: Update comments. * doc/posix-functions/setlocale.texi: Mention both functions. 2019-12-18 Bruno Haible localename: Optimize code for native Windows. * lib/localename.c (gl_locale_name_posix): Remove handling of LC_ALL category (not allowed here). 2019-12-18 Bruno Haible setlocale: Make calls with NULL argument multithread-safe. * lib/setlocale.c: Include . (setlocale_mtsafe): New function. (setlocale_unixlike): Invoke setlocale_mtsafe instead of setlocale. (setlocale_improved): Renamed from rpl_setlocale. * m4/setlocale.m4 (gl_FUNC_SETLOCALE): Require gl_FUNC_SETLOCALE_NULL. Set and define NEED_SETLOCALE_IMPROVED and NEED_SETLOCALE_MTSAFE. Set LIB_SETLOCALE. * modules/setlocale (Depends-on): Add setlocale-null. Update conditions. (Link): New section. * tests/locale.c: Undefine setlocale. * tests/test-setlocale_null-one.c: Likewise. * tests/test-setlocale_null-all.c: Likewise. * modules/setlocale-tests (Makefile.am): Link the test programs with $(LIB_SETLOCALE). * modules/astrxfrm-tests (Makefile.am): Likewise. * modules/btowc-tests (Makefile.am): Likewise. * modules/c-ctype-tests (Makefile.am): Likewise. * modules/c-snprintf-tests (Makefile.am): Likewise. * modules/c-strcase-tests (Makefile.am): Likewise. * modules/c-vasprintf-tests (Makefile.am): Likewise. * modules/c-vsnprintf-tests (Makefile.am): Likewise. * modules/c-xvasprintf-tests (Makefile.am): Likewise. * modules/dfa-tests (Makefile.am): Likewise. * modules/duplocale-tests (Makefile.am): Likewise. * modules/hard-locale-tests (Makefile.am): Likewise. * modules/localcharset-tests (Makefile.am): Likewise. * modules/localename-tests (Makefile.am): Likewise. * modules/mbmemcasecmp-tests (Makefile.am): Likewise. * modules/mbmemcasecoll-tests (Makefile.am): Likewise. * modules/mbrtowc-tests (Makefile.am): Likewise. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsinit-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbsnrtowcs-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsrtowcs-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/nl_langinfo-tests (Makefile.am): Likewise. * modules/quotearg-tests (Makefile.am): Likewise. * modules/regex-tests (Makefile.am): Likewise. * modules/strfmon_l-tests (Makefile.am): Likewise. * modules/strtod-tests (Makefile.am): Likewise. * modules/strtold-tests (Makefile.am): Likewise. * modules/unicase/locale-language-tests (Makefile.am): Likewise. * modules/unicase/ulc-casecmp-tests (Makefile.am): Likewise. * modules/unicase/ulc-casecoll-tests (Makefile.am): Likewise. * modules/unigbrk/ulc-grapheme-breaks-tests (Makefile.am): Likewise. * modules/unistdio/u8-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u16-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u32-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Makefile.am): Likewise. * modules/uniwbrk/ulc-wordbreaks-tests (Makefile.am): Likewise. * modules/vasnprintf-posix-tests (Makefile.am): Likewise. * modules/wcrtomb-tests (Makefile.am): Likewise. * modules/wcsnrtombs-tests (Makefile.am): Likewise. * modules/wcsrtombs-tests (Makefile.am): Likewise. * modules/wcwidth-tests (Makefile.am): Likewise. * doc/posix-functions/setlocale.texi: Mention that the multithread- safety fix is also available in module 'setlocale'. 2019-12-18 Bruno Haible hard-locale: Make multithread-safe. * lib/hard-locale.h (hard_locale): Move documentation to here. * lib/hard-locale.c: Don't include . (GLIBC_VERSION): Remove macro. (hard_locale): Assume that all systems name the "C" and "POSIX" locales "C" or "POSIX". Invoke setlocale_null instead of setlocale. * modules/hard-locale (Depends-on): Remove strdup. Add setlocale-null. (configure.ac): Require gl_FUNC_SETLOCALE_NULL. Set LIB_HARD_LOCALE. (Link): New section. * modules/hard-locale-tests (Makefile.am): Link test-hard-locale against $(LIB_HARD_LOCALE). 2019-12-18 Bruno Haible hard-locale: Avoid test failure on Haiku. * tests/test-hard-locale.c (test_one): Treat Haiku like recent OpenBSD. 2019-12-18 Bruno Haible setlocale-null: Handle NULL result from setlocale. * lib/locale.in.h (setlocale_null): Document EINVAL return value. * lib/setlocale_null.c (setlocale_null_unlocked): Handle NULL result from setlocale or _wsetlocale. 2019-12-18 Bruno Haible hard-locale: Add test. * tests/test-hard-locale.c: New file. * tests/locale.c: New file. * modules/hard-locale-tests: New file. 2019-12-17 Paul Eggert dfa: do not match invalid UTF-8 * lib/dfa.c (struct dfa): Grow utf8_anychar_classes member array from 5 to 9 tokens; this is needed due to the changes to add_utf8_anychar. (charclass_index): 2nd arg is now pointer-to-const. (add_utf8_anychar): Match only valid UTF-8 byte sequences instead of allowing overlong encodings or surrogate halves. dfa: simplify charclass by assuming C99 * lib/dfa.c (CHARCLASS_WORD_BITS): Now always 64. (charclass_word): Now always uint_fast64_t. (CHARCLASS_PAIR): Remove. (CHARCLASS_INIT): Take 4 arguments instead of 8. All uses changed. fts: tune via calloc * lib/fts.c (fts_open): Prefer calloc to malloc + memset. dfa: tune via xzalloc * lib/dfa.c (dfaoptimize): Prefer xzalloc to xmalloc + memset. 2019-12-17 Bruno Haible localcharset: Fix multithread-safety bug on Windows and OS/2. * lib/localcharset.h (locale_charset): Clarify when the result becomes invalid. * lib/localcharset.c (locale_charset): Use a stack-allocated buffer to assemble the result. 2019-12-17 Bruno Haible localcharset: Optimize code for native Windows. * lib/localcharset.c (locale_charset): Don't bother calling setlocale (LC_ALL, NULL) since we're not interested in its result. 2019-12-17 Bruno Haible nl_langinfo: Fix multithread-safety bug on OpenBSD 3.8. * lib/nl_langinfo.c (ctype_codeset): Invoke setlocale_null instead of setlocale. * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Require gl_FUNC_SETLOCALE_NULL. Set LIB_NL_LANGINFO. * modules/nl_langinfo (Depends-on): Add setlocale-null. 2019-12-17 Bruno Haible nl_langinfo: Fix multithread-safety bug on mingw and MSVC. * lib/nl_langinfo.c (ctype_codeset, rpl_nl_langinfo): Use a stack-allocated buffer to assemble each result and different static buffers to return it. * tests/test-nl_langinfo-mt.c: New file. * modules/nl_langinfo-tests (Files): Add it. (Depends-on): Add thread, nanosleep. (Makefile.am): Build test-nl_langinfo-mt test. 2019-12-17 Bruno Haible langinfo: Document more details. * doc/posix-headers/langinfo.texi: List platform details. * doc/posix-functions/nl_langinfo.texi: Likewise. 2019-12-17 Bruno Haible mbsinit: Fix compilation error in mingw-w64 7.0 with _UCRT defined. Reported by Tom Kacvinsky and Martin Storsjö in . * lib/mbsinit.c: Accommodate an MSVC-like mbstate_t definition with mingw. 2019-12-17 Bruno Haible glob: Avoid warning on mingw. Reported by Christian Biesinger in . * lib/glob.c (__stat64): Undefine first. 2019-12-17 Paul Eggert xalloc: tune xzalloc for fresh allocations * lib/xmalloc.c (xzalloc): Use xcalloc rather than xmalloc+memset, because when the memory is freshly allocated from the OS via sbrk or mmap, calloc can avoid doing the memset. dfa: new function dfacopysyntax * lib/dfa.c (struct dfa): Move syntax member later so that dfacopysyntax can easily clear earlier members. (dfacopysyntax): New function, used by Gawk. 2019-12-16 Paul Eggert dfa: port _GL_ATTRIBUTE_MALLOC to Gawk Gawk does not use Gnulib, and does not define _GL_ATTRIBUTE_MALLOC. * lib/dfa.h (_GL_ATTRIBUTE_MALLOC): Define to empty if not already defined. dfa: remove one dependency on MB_CUR_MAX * lib/dfa.c (dfamust): No need to refer to MB_CUR_MAX here. dfa: remove struct lexer_state.cur_mb_len * lib/dfa.c (struct lexer_state): Remove cur_mb_len member, as it’s not needed and the code is simpler without it. All uses removed. 2019-12-16 Bruno Haible setlocale-null: Remove need for -lpthread on musl libc, *BSD, Haiku. Reported by Arnold Robbins . * lib/setlocale_null.c (c11_threads_in_use, pthread_in_use): New macros, copied from lib/glthread/lock.h. (pthread_mutex_lock, pthread_mutex_unlock): Mark as weak. (setlocale_null_with_lock): If pthread_in_use() is false, use setlocale_null_unlocked directly. * m4/threadlib.m4 (gl_WEAK_SYMBOLS): New macro, extracted from gl_THREADLIB_BODY. Define HAVE_WEAK_SYMBOLS. (gl_THREADLIB_BODY): Invoke gl_WEAK_SYMBOLS. * m4/setlocale_null.m4 (gl_FUNC_SETLOCALE_NULL): Invoke gl_WEAK_SYMBOLS. Set LIB_SETLOCALE_NULL to empty if weak symbols are supported. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Add comment. 2019-12-16 Paul Eggert dfa: make dfasyntax thread-safe Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00099.html * lib/dfa.c: Do not include locale.h. (struct dfa): Remove simple_locale member. All uses replaced by localeinfo.simple. (using_simple_locale): Remove; now present (with some changes) in localeinfo.c. (dfasyntax): No need to initialize removed member. localeinfo: record whether locale is simple * lib/localeinfo.c (using_simple_locale): New function, copied here from lib/dfa.c but with a change: it uses strcoll for its heuristic, instead of using setlocale. This lets it be thread-safe. * lib/localeinfo.h (struct localeinfo): New member ‘simple’. 2019-12-15 Bruno Haible duplocale: Fix multithread-safety bug on AIX. * lib/duplocale.c: Don't include . (rpl_duplocale): Invoke setlocale_null instead of setlocale. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Require gl_FUNC_SETLOCALE_NULL. Set LIB_DUPLOCALE. * modules/duplocale (Depends-on): Add setlocale-null. (Link): New section. * modules/duplocale-tests (Makefile.am): Link test-duplocale with $(LIB_DUPLOCALE). 2019-12-15 Bruno Haible setlocale-null: Add tests. * tests/test-setlocale_null.c: New file. * tests/test-setlocale_null-one.c: New file. * tests/test-setlocale_null-all.c: New file. * modules/setlocale-null-tests: New file. setlocale-null: New module. * lib/locale.in.h (SETLOCALE_NULL_MAX, SETLOCALE_NULL_ALL_MAX, setlocale_null): New declarations. * lib/setlocale_null.c: New file. * lib/setlocale-lock.c: New file. * m4/threadlib.m4 (gl_PTHREADLIB_BODY): Define C macro HAVE_PTHREAD_API. * m4/setlocale_null.m4: New file. * m4/locale_h.m4 (gl_LOCALE_H_DEFAULTS): Initialize GNULIB_SETLOCALE_NULL. * modules/locale (Makefile.am): Substitute GNULIB_SETLOCALE_NULL. * modules/setlocale-null: New file. * doc/posix-functions/setlocale.texi: Mention the new module. 2019-12-15 Bruno Haible lock tests: Skip test when no multithreading is enabled. * tests/test-rwlock1.c: Skip the test when no multithreading is enabled. 2019-12-14 Bruno Haible locale, duplocale, localename: Fix last patch. Reported by Daniel Richard G. in . * lib/locale.in.h (HAVE_WORKING_NEWLOCALE, HAVE_WORKING_DUPLOCALE): Don't define if locale_t does not exist. 2019-12-13 Bruno Haible locale, duplocale, localename: Fix errors if locale_t does not exist. Reported by Daniel Richard G. in . * lib/locale.in.h (HAVE_WORKING_NEWLOCALE, HAVE_WORKING_DUPLOCALE): New macros. * tests/test-locale.c: Test HAVE_WORKING_NEWLOCALE instead of HAVE_NEWLOCALE. * tests/test-localename.c: Likewise. * tests/test-duplocale.c: Test HAVE_WORKING_DUPLOCALE instead of HAVE_DUPLOCALE. * tests/test-locale-c++.cc: Likewise. 2019-12-13 Bruno Haible wcstok: Fix test failure on HP-UX. * m4/wcstok.m4 (gl_FUNC_WCSTOK): Set REPLACE_WCSTOK to 1 on HP-UX. * doc/posix-functions/wcstok.texi: Mention the HP-UX bug. 2019-12-12 Bruno Haible strtod, strtold tests: Avoid test failure on AIX 7.2. * tests/test-strtod1.c (main): Allow implementations in which ',' and '.' both are radix characters. * tests/test-strtold1.c (main): Likewise. 2019-12-12 Paul Eggert dfa: prefer ptrdiff_t for API, too Also, use ‘idx_t’ for ptrdiff_t values that must be nonnegative, but do this only for internal use for now. * NEWS: Mention the API change. * lib/dfa.c (idx_t, IDX_MAX): New type and max value, for internal use for now. Use them instead of ptrdiff_t and PTRDIFF_MAX for values known to be nonnegative. (dfaparse, dfaexec_mb, dfaexec_sb, dfaexec_noop, dfaexec): Prefer idx_t or ptrdiff_t to size_t for API. * lib/dfa.h (dfaparse, dfacomp, dfaexec): Prefer ptrdiff_t to size_t for API. stdalign: port to xlclang 16.01 Problem reportd by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00064.html * lib/stdalign.in.h (_Alignas): Do not use __attribute__ ((__aligned__ (...))) with xlclang, as a top-level ‘char __attribute__ ((__aligned__ (8))) c;’ does not work with xlclang version 16.01.0000.0001; the alignment directive is ignored. 2019-12-12 Bruno Haible duplocale: Fix test failure on AIX 7.2 with xlclang. * lib/duplocale.c: Include . (rpl_duplocale): Use a heap-allocated copy of the first setlocale return value. 2019-12-12 Bruno Haible stddef: Document the AIX xlc issue. * doc/posix-headers/stddef.texi: Document the NULL issue with AIX xlc. 2019-12-12 Bruno Haible duplocale: Don't attempt to override if locale_t does not exist. Reported by Daniel Richard G. in . * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): If locale_t does not exist, set HAVE_DUPLOCALE to 0. 2019-12-12 Bruno Haible wcwidth: Avoid test failure on AIX 7.2. * tests/test-wcwidth.c (main): Don't fail if wcwidth(0x200B) is negative. * doc/posix-functions/wcwidth.texi: Mention the AIX issue. 2019-12-12 Bruno Haible ilogbl: Work around Cygwin bug. * m4/ilogbl.m4 (gl_FUNC_ILOGBL_WORKS): Test whether ilogbl(0.0L) is correct. * doc/posix-functions/ilogbl.texi: Mention the Cygwin bug. 2019-12-12 Bruno Haible strtold: Work around Cygwin bug. * m4/strtold.m4 (gl_FUNC_STRTOLD): Add test for the underflow problem. If it is present, define STRTOLD_HAS_UNDERFLOW_BUG. * lib/strtod.c (HAVE_UNDERLYING_STRTOD): Set to 0 if STRTOLD_HAS_UNDERFLOW_BUG is defined. * doc/posix-functions/strtold.texi: Mention the Cygwin bug. 2019-12-12 Bruno Haible strtold: Fix autoconf test. * m4/strtold.m4 (gl_FUNC_STRTOLD): Test strtold, not strtod. 2019-12-11 Bruno Haible fsync tests: Skip test that is known to fail. * doc/posix-functions/fsync.texi: Update list of platforms. * tests/test-fsync.c (main): Skip test with read-only file descriptors that is known to fail on AIX and Cygwin. 2019-12-11 Bruno Haible getaddrinfo: Fix calling convention in 32-bit mode on native Windows. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Test whether getaddrinfo has a non-POSIX signature. If so, set REPLACE_GETADDRINFO. Define HAVE_GETADDRINFO as a C macro. * lib/netdb.in.h (getaddrinfo, freeaddrinfo): If REPLACE_GETADDRINFO, declare as replacement functions. * lib/getaddrinfo.c (getaddrinfo, freeaddrinfo): If HAVE_GETADDRINFO, define as no-op overrides. * m4/netdb_h.m4 (gl_NETDB_H_DEFAULTS): Initialize REPLACE_GETADDRINFO. * modules/netdb (Makefile.am): Substitute REPLACE_GETADDRINFO. * modules/getaddrinfo (Depends-on, configure.ac): Test REPLACE_GETADDRINFO. * doc/posix-functions/getaddrinfo.texi: Mention calling convention problem. * doc/posix-functions/freeaddrinfo.texi: Mention header file and calling convention problems. 2019-12-11 Paul Eggert dfa: prefer signed integers for internals Signed integers can be checked more easily for integer overflow. * lib/dfa.c (position, struct lexer_state, struct parser_state) (struct dfa, mbs_to_wchar, fetch_wc, parse_bracket_exp) (struct lexptr, lex, addtok_mb, add_utf8_anychar, atom) (nsubtoks, copytoks, closure, alloc_position_set, delete) (replace, state_index, epsclosure, charclass_context) (state_separate_contexts, merge_nfa_state, dfaoptimize) (dfaanalyze, build_state, dfaexec_main, dfa_supported) (maybe_disable_superset_dfa, dfassbuild, dfafree, enlist) (comsubs, inboth, allocmust): Prefer a signed to an unsigned integer when calculating indexes, unless the integer is part of the external API (a bigger deal, and to be done later). dfa: fix index overflow * lib/dfa.c (compare): Avoid integer overflow when analyzing very large regular expressions. dfa: update commentary for previous change * NEWS: Mention the change. * lib/dfa.c, lib/dfa.h (dfaparse, dfamust, dfacomp): Update comments. 2019-12-11 Norihiro Tanaka dfa: separate parse and compile phase ‘dfamust’ must be called after parsing and before tokens are reordered, but both are executed in the compilation phase. Token reordering was introduced in Gnulib commit 2018-10-22T15:01:08Z!noritnk@kcn.ne.jp (5c7a0371823876cca7a1347fa09ca26bbbff0c98). * lib/dfa.c (dfaparse): Change it to global function. (dfacomp): If first argument is NULL, skip parse. * lib/dfa.h: (dfaparse): Add a prototype. 2019-12-11 Bruno Haible unistd tests: Fix link error on MSVC. * modules/unistd-c++-tests (Makefile.am): Link test-unistd-c++ against $(LIB_GETLOGIN). 2019-12-11 Bruno Haible doc: Document that ISO C or POSIX substitutes are supported in C++ mode. * doc/gnulib-intro.texi (Various Kinds of Modules): Document that ISO C and POSIX substitutes are supported in C++ mode. * NEWS: Likewise. 2019-12-11 Bruno Haible stddef: Fix compilation error in C++ mode on MSVC. * lib/stddef.in.h (max_align_t): With MSVC in C++ mode, don't define it; instead, include . 2019-12-11 Bruno Haible unistd: Fix compilation error in C++ mode on MSVC. * lib/unistd.in.h: Don't do include[_next] if the platform does not have . 2019-12-11 Bruno Haible locale: Fix compilation error in C++ mode on MSVC. * m4/locale_h.m4 (gl_LOCALE_H): Don't set REPLACE_STRUCT_LCONV on MSVC. * lib/locale.in.h (int_p_cs_precedes, int_p_sign_posn, int_p_sep_by_space, int_n_cs_precedes, int_n_sign_posn, int_n_sep_by_space): Define as macros on MSVC. 2019-12-11 Bruno Haible wchar: Fix compilation error in C++ mode on MSVC. * lib/wchar.in.h (mbstate_t): Don't override on MSVC. 2019-12-11 Bruno Haible pthread-thread: Fix compilation error in C++ mode on MSVC. * lib/pthread.in.h (pthread_exit): Don't use _Noreturn in the _GL_CXXALIAS_RPL invocation. 2019-12-08 Bruno Haible Fix compilation errors in C++ mode on Haiku. * lib/stdio.in.h (vdprintf): Disable _GL_CXXALIASWARN invocation on non-glibc systems. * lib/spawn.in.h (posix_spawnattr_getschedpolicy, posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam, posix_spawnattr_setschedparam): Likewise. * lib/stdlib.in.h (random, initstate_r, setstate_r): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. * lib/unistd.in.h (usleep): Likewise. 2019-12-08 Bruno Haible Fix compilation errors in 32-bit C++ mode on HP-UX 11/ia64. * m4/largefile.m4 (gl_SET_LARGEFILE_SOURCE): New macro. * modules/fseeko (configure.ac-early): Require it instead of AC_FUNC_FSEEKO. * modules/ftello (configure.ac-early): Likewise. * modules/fflush (configure.ac-early): Likewise. 2019-12-08 Bruno Haible Fix compilation error in C++ mode on HP-UX 11. * lib/unistd.in.h (getpagesize): Declare on HP-UX. * doc/glibc-functions/getpagesize.texi: Mention the HP-UX problem. 2019-12-08 Bruno Haible Fix compilation errors on HP-UX 11/ia64. * lib/math.in.h (copysignf, fmaf, fma): Undefine before _GL_FUNCDECL_SYS. 2019-12-08 Bruno Haible Fix compilation error in C++ mode on OpenBSD. * lib/signal.in.h (signal): Declare on OpenBSD. 2019-12-08 Bruno Haible math tests: Don't fail if isfinite, isinf, isnan, signbit is a macro. * tests/test-math-c++.cc (isfinite, isinf, isnan, signbit): Use #warning instead of #error. 2019-12-08 Bruno Haible Fix compilation errors in C++ mode on FreeBSD. * lib/pthread.in.h (pthread_exit): Remove _Noreturn from prototype. * tests/test-pthread-c++.cc (GNULIB_NAMESPACE::pthread_exit): Likewise. * lib/threads.in.h (thrd_exit): Likewise. * tests/test-threads-c++.cc (GNULIB_NAMESPACE::thrd_exit): Likewise. 2019-12-08 Bruno Haible Fix compilation errors in C++ mode on macOS and FreeBSD. * lib/math.in.h (isfinite, isinf, isnan, signbit): In C++ mode on macOS or FreeBSD with clang, use the approach without C preprocessor macro. 2019-12-07 Bruno Haible Fix compilation errors in C++ mode on AIX with xlclang++. Reported by Christian Biesinger in . * lib/wchar.in.h (mbstate_t): Don't override on AIX. 2019-12-07 Bruno Haible Document compilation error in C++ mode on NetBSD 8.0. * doc/posix-headers/monetary.texi: Mention the NetBSD bug. 2019-12-07 Bruno Haible Fix compilation errors in C++ mode on Solaris 10. * m4/stdbool.m4 (AM_STDBOOL_H): Require AC_CANONICAL_HOST. Set STDBOOL_H to non-empty on Solaris with a non-GCC compiler. * doc/posix-headers/stdbool.texi: Mention the Solaris issue. 2019-12-07 Bruno Haible Reword NEWS entry. * NEWS: Reword the latest NEWS entry. 2019-12-05 Pino Toscano Move xstrtol_fatal to a new xstrtol-error module. * lib/xstrtol.h: Stop including . (xstrtol_fatal): Move ... * lib/xstrtol-error.h: ... here. New file. * lib/xstrtol-error.c: Include xstrtol-error.h instead of xstrtol.h. * tests/test-xstrtol.c: Likewise. * modules/xstrtol (Files): Remove lib/xstrtol-error.c. (Depends-on): Remove exitfail, error, getopt-gnu, and gettext-h. (Makefile.am): Remove xstrtol-error.c from lib_SOURCES. * modules/xstrtol-error: New file. * modules/xstrtol-tests (Depends-on): Add xstrtol-error. * MODULES.html.sh: Add xstrtol-error. * NEWS: Document the change. 2019-12-06 Paul Eggert nstrftime: better width support for %N, %z * lib/nstrftime.c (width_add, width_add1, width_cpy): New macros, which generalize ‘add’, ‘add1’, ‘cpy’ by adding a new WIDTH parameter. (add, add1, cpy): Use these macros. (width_add): Do not treat digits == 0 as a special case, do not pad if padding is ‘-’, and do not use a negative width. (__strftime_internal): Redo formatting of nanoseconds and numeric timezones to avoid buffer misuse in unusual cases, and so that widths make more sense. Add support for widths greater than 9 to the %N format; they are zero filled on the right. * tests/test-nstrftime.c (posixtm_test): Add a %12N test. 2019-12-05 Bruno Haible Fix compilation errors in C++ mode on Solaris 10 and Solaris 11. * m4/isfinite.m4 (gl_ISFINITE): Require AC_CANONICAL_HOST. On Solaris, set REPLACE_ISFINITE to 1. * m4/isinf.m4 (gl_ISINF): Require AC_CANONICAL_HOST. On Solaris, set REPLACE_ISINF to 1. * m4/signbit.m4 (gl_SIGNBIT): On Solaris, set REPLACE_SIGNBIT to 1. * lib/pthread.in.h (pthread_create, pthread_once, pthread_key_create): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. * lib/threads.in.h (call_once): Likewise. * lib/iconv.in.h (iconv): Likewise. 2019-12-05 Bruno Haible wchar: Add more C++ tests. Reported by Christian Biesinger in . * tests/test-wchar-c++3.cc: New file. * modules/wchar-c++-tests (Files): Add it. (Makefile.am): Compile it. 2019-12-05 Bruno Haible Add more C++ tests. assert-h: Add C++ tests. * tests/test-assert-h-c++.cc: New file. * tests/test-assert-h-c++2.cc: New file. * modules/assert-h-c++-tests: New file. * modules/assert-h-tests: New file. ctype: Add C++ tests. * tests/test-ctype-c++.cc: New file. * tests/test-ctype-c++2.cc: New file. * modules/ctype-c++-tests: New file. * modules/ctype-tests (Depends-on): Add ctype-c++-tests. errno: Add C++ tests. * tests/test-errno-c++.cc: New file. * tests/test-errno-c++2.cc: New file. * modules/errno-c++-tests: New file. * modules/errno-tests (Depends-on): Add errno-c++-tests. float: Add C++ tests. * tests/test-float-c++.cc: New file. * tests/test-float-c++2.cc: New file. * modules/float-c++-tests: New file. * modules/float-tests (Depends-on): Add float-c++-tests. inttypes: Add more C++ tests. * tests/test-inttypes-c++2.cc: New file. * modules/inttypes-c++-tests (Files): Add it. (Makefile.am): Compile it. limits-h: Add C++ tests. * tests/test-limits-h-c++.cc: New file. * tests/test-limits-h-c++2.cc: New file. * modules/limits-h-c++-tests: New file. * modules/limits-h-tests (Depends-on): Add limits-h-c++-tests. stdarg: Add C++ tests. * tests/test-stdarg-c++.cc: New file. * tests/test-stdarg-c++2.cc: New file. * modules/stdarg-c++-tests: New file. * modules/stdarg-tests: New file. stdbool: Add C++ tests. * tests/test-stdbool-c++.cc: New file. * tests/test-stdbool-c++2.cc: New file. * modules/stdbool-c++-tests: New file. * modules/stdbool-tests (Depends-on): Add stdbool-c++-tests. stddef: Add C++ tests. * tests/test-stddef-c++.cc: New file. * tests/test-stddef-c++2.cc: New file. * modules/stddef-c++-tests: New file. * modules/stddef-tests (Depends-on): Add stddef-c++-tests. stdint: Add C++ tests. * tests/test-stdint-c++.cc: New file. * tests/test-stdint-c++2.cc: New file. * modules/stdint-c++-tests: New file. * modules/stdint-tests (Depends-on): Add stdint-c++-tests. wchar: Add more C++ tests. * tests/test-wchar-c++2.cc: New file. * modules/wchar-c++-tests (Files): Add it. (Makefile.am): Compile it. wctype-h: Add more C++ tests. * tests/test-wctype-h-c++2.cc: New file. * modules/wctype-h-c++-tests (Files): Add it. (Makefile.am): Compile it. 2019-12-04 Bruno Haible Fix compilation errors in C++ mode with xlclang++ on AIX. * lib/math.in.h (expm1l, fmal, remainderl, roundl): Don't redeclare in C++ mode on AIX. (isfinite, signbit): In C++ mode on AIX with clang, use the approach without C preprocessor macro. * lib/pthread.in.h (pthread_exit): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. * lib/threads.in.h (thrd_exit): Likewise. 2019-12-04 Bruno Haible Fix compilation error in C++ mode on Solaris 11 OpenIndiana. * lib/wchar.in.h (wcsnrtombs): Force declaration in C++ mode on Solaris. * doc/posix-functions/wcsnrtombs.texi: Mention the issue. 2019-12-04 Bruno Haible Disable more _GL_CXXALIASWARN on all platforms other than glibc systems. * lib/wchar.in.h (wcsnrtombs, wcwidth, wcswidth): Disable _GL_CXXALIASWARN invocation on non-glibc systems. * lib/wctype.in.h (iswalnum, iswalpha, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit, wctype, iswctype, towlower, towupper): Likewise. 2019-12-03 Bruno Haible Avoid hassles caused by [[noreturn]] in C++. Reported by Christian Biesinger in . * m4/gnulib-common.m4 (gl_COMMON_BODY): Disable the use of [[noreturn]]. * lib/_Noreturn.h: Likewise. 2019-12-02 Bruno Haible Fix mistakes in --enable-threads=isoc fixes from 2019-12-01. * m4/pthread-mutex.m4 (gl_PTHREAD_MUTEX): Use LIBPMULTITHREAD, not LIBMULTITHREAD. * m4/pthread-rwlock.m4 (gl_PTHREAD_RWLOCK): Likewise. * m4/pthread-thread.m4 (gl_PTHREAD_THREAD): Likewise. * m4/timer_time.m4 (gl_TIMER_TIME): Likewise. Require gl_PTHREADLIB, not gl_THREADLIB. * modules/timer-time (Depends-on): Add pthread-h. Remove threadlib. 2019-12-02 Bruno Haible Fix some more link errors with --enable-threads=isoc. * modules/pthread-mutex (Depends-on): Test $gl_threads_api differently. * modules/pthread-rwlock (Depends-on): Likewise. 2019-12-02 Bruno Haible Fix link errors with --enable-threads=posix on AIX. * modules/string-c++-tests (Makefile.am): Link the test-string-c++ program with $(LIBTHREAD). * modules/wchar-c++-tests (Makefile.am): Link the test-wchar-c++ program with $(LIBTHREAD). 2019-12-02 Bruno Haible Fix link errors with --enable-threads=posix on AIX. * modules/mbrtowc (Link): New section. * modules/acl (Link): Likewise. * modules/argmatch (Link): Likewise. * modules/backup-rename (Link): Likewise. * modules/backupfile (Link): Likewise. * modules/closein (Link): Likewise. * modules/closeout (Link): Likewise. * modules/copy-file (Link): Likewise. * modules/csharpcomp (Link): Likewise. * modules/csharpexec (Link): Likewise. * modules/dfa (Link): Likewise. * modules/exclude (Link): Likewise. * modules/fnmatch (Link): Likewise. * modules/fnmatch-gnu (Link): Likewise. * modules/fnmatch-posix (Link): Likewise. * modules/glob (Link): Likewise. * modules/human (Link): Likewise. * modules/javacomp (Link): Likewise. * modules/javaexec (Link): Likewise. * modules/javaversion (Link): Likewise. * modules/mbfile (Link): Likewise. * modules/mbiter (Link): Likewise. * modules/mbmemcasecmp (Link): Likewise. * modules/mbmemcasecoll (Link): Likewise. * modules/mbrlen (Link): Likewise. * modules/mbscasecmp (Link): Likewise. * modules/mbscasestr (Link): Likewise. * modules/mbschr (Link): Likewise. * modules/mbscspn (Link): Likewise. * modules/mbsinit (Link): Likewise. * modules/mbslen (Link): Likewise. * modules/mbsncasecmp (Link): Likewise. * modules/mbsnlen (Link): Likewise. * modules/mbsnrtowcs (Link): Likewise. * modules/mbspbrk (Link): Likewise. * modules/mbspcasecmp (Link): Likewise. * modules/mbsrchr (Link): Likewise. * modules/mbsrtowcs (Link): Likewise. * modules/mbssep (Link): Likewise. * modules/mbsspn (Link): Likewise. * modules/mbsstr (Link): Likewise. * modules/mbstok_r (Link): Likewise. * modules/mbswidth (Link): Likewise. * modules/mbuiter (Link): Likewise. * modules/mkdir-p (Link): Likewise. * modules/propername (Link): Likewise. * modules/quote (Link): Likewise. * modules/quotearg (Link): Likewise. * modules/quotearg-simple (Link): Likewise. * modules/regex-quote (Link): Likewise. * modules/rpmatch (Link): Likewise. * modules/sh-quote (Link): Likewise. * modules/system-quote (Link): Likewise. * modules/trim (Link): Likewise. * modules/unistdio/ulc-asnprintf (Link): Likewise. * modules/unistdio/ulc-fprintf (Link): Likewise. * modules/unistdio/ulc-vasnprintf (Link): Likewise. * modules/unistdio/ulc-vasprintf (Link): Likewise. * modules/unistdio/ulc-vfprintf (Link): Likewise. * modules/unistdio/ulc-vsnprintf (Link): Likewise. * modules/unistdio/ulc-vsprintf (Link): Likewise. * modules/xfreopen (Link): Likewise. * modules/xmemcoll (Link): Likewise. * modules/yesno (Link): Likewise. * modules/acl-tests (Makefile.am): Link the programs with $(LIBTHREAD). * modules/argmatch-tests (Makefile.am): Likewise. * modules/closein-tests (Makefile.am): Likewise. * modules/copy-file-tests (Makefile.am): Likewise. * modules/dfa-tests (Makefile.am): Likewise. * modules/fnmatch-tests (Makefile.am): Likewise. * modules/glob-tests (Makefile.am): Likewise. * modules/mbmemcasecmp-tests (Makefile.am): Likewise. * modules/mbmemcasecoll-tests (Makefile.am): Likewise. * modules/mbrtowc-tests (Makefile.am): Likewise. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsinit-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbsnrtowcs-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsrtowcs-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/quotearg-tests (Makefile.am): Likewise. * modules/quotearg-simple-tests (Makefile.am): Likewise. * modules/readtokens-tests (Makefile.am): Likewise. * modules/regex-quote-tests (Makefile.am): Likewise. * modules/sh-quote-tests (Makefile.am): Likewise. * modules/system-quote-tests (Makefile.am): Likewise. * modules/unistdio/ulc-asnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vsnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vsprintf-tests (Makefile.am): Likewise. * modules/yesno-tests (Makefile.am): Likewise. 2019-12-02 Bruno Haible Simplify link sections. * modules/threadlib (Link): Stop mentioning LTLIBTHREAD. * modules/lock (Link): Likewise. * modules/cond (Link): Likewise. * modules/tls (Link): Likewise. * modules/yield (Link): Likewise. * modules/regex (Link): Likewise. * modules/localename (Link): Likewise. * modules/unicase/locale-language (Link): Likewise. * modules/thread (Link): Stop mentioning LTLIBMULTITHREAD. 2019-12-02 Bruno Haible thread tests: Avoid link error with --enable-threads=isoc+posix on AIX. * tests/test-thread_self.c (main): Disable test on AIX. 2019-12-01 Bruno Haible pthread-h: Fix link errors with --enable-threads=isoc on AIX. * m4/threadlib.m4 (gl_ANYTHREADLIB_EARLY): New macro, extracted from gl_THREADLIB_EARLY_BODY. (gl_THREADLIB_EARLY_BODY): Invoke it. (gl_PTHREADLIB_BODY): New macro, extracted from gl_THREADLIB_BODY. (gl_THREADLIB_BODY): Invoke it. (gl_PTHREADLIB): New macro. * m4/pthread_h.m4 (gl_PTHREAD_H): Require gl_PTHREADLIB. Require gl_THREADLIB and test $gl_threads_api only if module 'threadlib' is present. Define LIB_PTHREAD using LIBPMULTITHREAD, not LIBMULTITHREAD. * modules/pthread-h (Files): Add threadlib.m4. (Depends-on): Remove threadlib. (configure.ac-early): Invoke gl_ANYTHREADLIB_EARLY. Don't set _REENTRANT and _THREAD_SAFE here. (Link): Use LIBPTHREAD, not LIBTHREAD. * modules/pthread-thread (Link): Use LIBPMULTITHREAD, not LIBMULTITHREAD. * modules/pthread-once (Link): Likewise. * modules/pthread-mutex (Link): Likewise. * modules/pthread-rwlock (Link): Likewise. * modules/pthread-cond (Link): Likewise. * modules/pthread-tss (Link): Likewise. * modules/pthread-spin (Link): Likewise. * modules/pthread (Link): Likewise. * modules/pthread-h-c++-tests (test_pthread_c___LDADD): Likewise. * modules/pthread-thread-tests (test_pthread_thread_LDADD): Likewise. * modules/pthread-once-tests (test_pthread_once1_LDADD, test_pthread_once2_LDADD): Likewise. * modules/pthread-mutex-tests (test_pthread_mutex_LDADD): Likewise. * modules/pthread-rwlock-tests (test_pthread_rwlock_LDADD): Likewise. * modules/pthread-cond-tests (test_pthread_cond_LDADD): Likewise. * modules/pthread-tss-tests (test_pthread_tss_LDADD): Likewise. 2019-12-01 Bruno Haible cond: State linking requirements. * modules/cond (Link): New section. 2019-12-01 Bruno Haible threadlib: Remove unnecessary file (left over from 2019-07-06). * modules/threadlib (Files): Remove config.rpath. 2019-11-29 Tim Rühsen gnulib-tool.py: Fix libgnu_la_LDFLAGS section in generated Makefile.am. Reported by Dagobert Michelsen in . * pygnulib/GLModuleSystem.py (getLink): Don't join the parts. Return a list of strings instead of one string. * pygnulib/GLEmiter.py (lib_Makefile_am): Adapt accordingly. * pygnulib/GLImport.py (execute): Likewise. 2019-11-27 Bruno Haible openpty, forkpty: Fix build error on Solaris 11.4. * m4/pty_h.m4 (gl_PTY_H): Test for termios.h. Look for the declarations also in . * m4/pty.m4 (gl_FUNC_FORKPTY, gl_FUNC_OPENPTY): Look for the declaration of the function also in . * doc/glibc-functions/openpty.texi: Mention the Solaris 11.4 problems. * doc/glibc-functions/forkpty.texi: Likewise. 2019-11-27 Bruno Haible New options --enable-threads=isoc and --enable-threads=isoc+posix. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Accept the options --enable-threads=isoc and --enable-threads=isoc+posix. (gl_THREADLIB_BODY): Test whether the ISO C threads API is available. When both the ISO C and the POSIX threads API are available, choose USE_ISOC_AND_POSIX_THREADS instead of USE_POSIX_THREADS if --enable-threads=isoc+posix was specified. When only the ISO C threads API is available and --enable-threads=iso was specified, choose USE_ISOC_THREADS. * lib/glthread/lock.h: Add new code for USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS. * lib/glthread/lock.c: Likewise. * lib/glthread/cond.h: Likewise. * lib/glthread/cond.c: Likewise. * lib/glthread/tls.h: Likewise. * lib/glthread/tls.c: Likewise. * lib/glthread/yield.h: Likewise. * lib/glthread/thread.h: Add new code for USE_ISOC_THREADS. Treat USE_ISOC_AND_POSIX_THREADS like USE_POSIX_THREADS. * lib/glthread/thread.c: Likewise. * lib/glthread/threadlib.c: Likewise. * tests/test-lock.c: Save and restore the values of USE_ISOC_THREADS and USE_ISOC_AND_POSIX_THREADS. * tests/test-cond.c: Consider USE_ISOC_THREADS and USE_ISOC_AND_POSIX_THREADS. * tests/test-tls.c: Likewise. * tests/test-thread_create.c (main): Likewise. * tests/test-pthread-cond.c: Likewise. * tests/test-pthread-mutex.c: Likewise. * tests/test-pthread-once2.c: Likewise. * tests/test-pthread-rwlock.c: Likewise. * tests/test-pthread-tss.c: Likewise. * tests/test-pthread_sigmask2.c: Treat USE_ISOC_AND_POSIX_THREADS like USE_POSIX_THREADS. 2019-11-24 Bruno Haible mbrtowc: Modernize autoconf test. * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE): Require gt_LOCALE_FR_UTF8. If a traditional Japanese locale is not available, try a UTF-8 locale. * doc/posix-functions/mbrtowc.texi: Update info about AIX. 2019-11-24 Bruno Haible Fix errors in C++ mode on mingw. * lib/arpa_inet.in.h (inet_ntop, inet_pton): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. * lib/signal.in.h (pthread_sigmask): Likewise. * lib/spawn.in.h (posix_spawn_file_actions_addopen, posix_spawn_file_actions_addclose, posix_spawn_file_actions_adddup2): Likewise. * lib/wchar.in.h (btowc): Likewise. 2019-11-24 Bruno Haible sys_time: Fix errors in C++ mode on mingw. * lib/sys_time.in.h (timeval): Restore the redirection '#define timeval rpl_timeval', for when the symbol timeval is being used outside the 'gnulib' namespace. * lib/sys_select.in.h (select): In C++, write 'timeval', not 'struct timeval'. 2019-11-24 Bruno Haible iswctype: Fix errors in C++ mode on mingw. * lib/wctype.in.h (rpl_iswctype): Override if GNULIB_OVERRIDES_WINT_T is 1. * lib/iswctype.c (iswctype): Add another implementation, for the GNULIB_defined_wint_t case. * modules/iswctype (configure.ac): Compile iswctype.c also if GNULIB_OVERRIDES_WINT_T is 1. 2019-11-24 Bruno Haible windows-timedmutex: Fix errors in C++ mode on mingw. * lib/windows-timedmutex.h: Add closing brace. 2019-11-24 Bruno Haible Fix errors in C++ mode on Cygwin. * lib/sys_wait.in.h (waitpid): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. 2019-11-24 Bruno Haible time_r: Fix for mingw (regression from 2019-11-16). * m4/time_r.m4 (gl_TIME_R): Revert to using AC_CHECK_FUNCS_ONCE. Use the AC_LINK_IFELSE test only if the function does not appear to exist. 2019-11-24 Bruno Haible wcstok: Add tests. * tests/test-wcstok.c: New file. * modules/wcstok-tests: New file. 2019-11-24 Bruno Haible wcstok: Work around wrong signature on native Windows. * lib/wchar.in.h (wcstok): Override when REPLACE_WCSTOK is 1. * m4/wcstok.m4 (gl_FUNC_WCSTOK): Check for signature of wcstok. Set REPLACE_WCSTOK. * m4/wchar_h.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_WCSTOK. * modules/wchar (Makefile.am): Substitute REPLACE_WCSTOK. * modules/wcstok (Depends-on, configure.ac): Consider REPLACE_WCSTOK. * doc/posix-functions/wcstok.texi: Mention the problem. 2019-11-22 Paul Eggert intprops: INT_MULTIPLY_WRAPV speedup for GCC 8.4+ * lib/intprops.h (INT_MULTIPLY_WRAPV): If GCC 8.x where 4 <= x, remove workaround for GCC bug 91450 as the bug should be fixed there too. 2019-11-21 Bruno Haible Disable many _GL_CXXALIASWARN on all platforms other than glibc systems. Reported by Christian Biesinger in . * lib/fnmatch.in.h (fnmatch): Disable _GL_CXXALIASWARN invocation on non-glibc systems. * lib/locale.in.h (localeconv, setlocale): Likewise. * lib/math.in.h (cbrt, ceil, copysign, exp2, expm1, floor, fma, fmod, frexp, hypot, ilogb, log, log10, log1p, log2, logb, modf, remainder, rint, round, trunc): Likewise. * lib/monetary.in.h (strfmon_l): Likewise. * lib/pthread.in.h (pthread_mutexattr_getrobust, pthread_mutexattr_setrobust, pthread_mutex_lock, pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock, pthread_spin_destroy): Likewise. * lib/signal.in.h (raise, signal): Likewise. * lib/stdio.in.h (fclose, fflush, fgetc, fgets, fopen, fprintf, fputc, fputs, fread, freopen, fscanf, fseek, ftell, fwrite, getc, getchar, perror, printf, putc, putchar, puts, remove, rename, scanf, sprintf, tmpfile, vfprintf, vprintf, vsprintf): Likewise. * lib/stdlib.in.h (calloc, malloc, mbtowc, realloc, strtod, wctomb): Likewise. * lib/string.in.h (memchr, strncat, strpbrk, strstr, strerror): Likewise. * lib/time.in.h (mktime, localtime, ctime, strftime): Likewise. * lib/wchar.in.h (btowc, wctob, mbsinit, mbrtowc, mbrlen, mbsrtowcs, wcrtomb, wcsrtombs, wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset, wcslen, wcscpy, wcsncpy, wcscat, wcsncat, wcscmp, wcsncmp, wcscoll, wcsxfrm, wcschr, wcsrchr, wcscspn, wcsspn, wcspbrk, wcsstr, wcstok, wcsftime): Likewise. * lib/wctype.in.h (iswblank, wctrans, towctrans): Likewise. 2019-11-21 Bruno Haible Fix various errors in _GL_CXXALIAS_SYS invocations. * lib/locale.in.h (freelocale): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. * lib/pthread.in.h (pthread_mutexattr_gettype, pthread_mutexattr_getrobust): Likewise. * lib/stdlib.in.h (srandom, initstate, setstate): Likewise. * lib/sys_socket.in.h (recv, send): Likewise. * lib/unistd.in.h (getdtablesize): Likewise. * lib/sys_select.in.h (select): In C++, write 'timeval' instead of 'struct timeval'. 2019-11-21 Bruno Haible math tests: Update after 2019-08-28 change. * tests/test-math-c++.cc (isfinite, isinf, isnan, signbit): Expect a return type of 'bool', not 'int'. 2019-11-21 Bruno Haible pthread-spin: Fix errors in C++ mode. * m4/pthread-spin.m4 (gl_PTHREAD_SPIN): Mark the pthread_spin_* functions as nonexistent when exists but does not define the pthread_spinlock_t type. 2019-11-21 Bruno Haible pthread-mutex: Fix errors in C++ mode. * m4/pthread-mutex.m4 (gl_PTHREAD_MUTEX): Test whether pthread_mutexattr_getrobust exists. If not, define PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED. * lib/pthread-mutex.c (pthread_mutexattr_getrobust, pthread_mutexattr_setrobust): Define also if exists but PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED. * modules/pthread-mutex (configure.ac): Compile pthread-mutex.c also when exists but pthread_mutexattr_getrobust needs a gnulib definition. 2019-11-19 Bruno Haible threads-h tests: Fix typo. * tests/test-threads-c++.cc: Fix references to undefined type 'mtx'. 2019-11-19 Bruno Haible pthread-thread: Fix prototype of pthread_attr_getdetachstate. * lib/pthread.in.h (pthread_attr_getdetachstate): Change first parameter to 'const pthread_attr_t *'. * lib/pthread-thread.c (pthread_attr_getdetachstate): Likewise. * tests/test-pthread-c++.cc (pthread_attr_getdetachstate): Likewise. 2019-11-19 Paul Eggert intprops: speed up INT_MULTIPLY_WRAPV in GCC 9.3 * lib/intprops.h (INT_MULTIPLY_WRAPV): If GCC 9.3 or later, do not work around GCC bug 91450 as the bug should be fixed there. 2019-11-18 Paul Eggert glob: get closer to glibc glob.c Omit differences from glibc when the differences don’t matter. * lib/glob.c [_LIBC]: Include shlib-compat.h. (__glob) [!_LIBC]: New macro. All uses of glob changed to __glob. (glob_lstat): New function. (glob_in_dir): Use it. (GLOB_ATTRIBUTE): Define to empty if not already defined. Use changed. 2019-11-18 Bruno Haible stdint: Define [u]intptr_t correctly on 64-bit native Windows. * lib/stdint.in.h (gl_intptr_t, gl_uintptr_t, INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX): Consider _WIN64. * tests/test-stdint.c: Verify that [u]intptr_t is large enough to hold a pointer. 2019-11-18 Bruno Haible stdint: Fix value of WINT_MAX when we override wint_t. * lib/stdint.in.h (WINT_MIN, WINT_MAX): Don't override a second time when GNULIB_OVERRIDES_WINT_T is 1. 2019-11-18 Bruno Haible vcs-to-changelog: New module. * modules/vcs-to-changelog: New file. * MODULES.html.sh (func_all_modules): Add it. 2019-11-01 Siddhesh Poyarekar vcs-to-changelog: New script to generate ChangeLog-like output. Discussion: * build-aux/vcs_to_changelog.py: New file. * build-aux/vcstocl/frontend_c.py: New file. * build-aux/vcstocl/misc_util.py: New file. * build-aux/vcstocl/vcs_git.py: New file. 2019-11-18 Bruno Haible stdint: Avoid triggering a "conflicting types" error on mingw 5.22. Reported by Keith Marshall in and . * lib/stdint.in.h (intptr_t, uintptr_t): Don't define if the types have already been defined by mingw's . 2019-11-18 Bruno Haible gnulib-tool: Fix build error on macOS with --conditional-dependencies. * gnulib-tool (func_modules_add_dummy): Ignore modules that are conditionally enabled. 2019-11-18 Bruno Haible gc: Mirror libgcrypt.m4 from libgcrypt. * config/srclistvars.sh (LIBGCRYPT): New variable. * config/srclist.txt: Use it to fetch m4/libgcrypt.m4. 2019-11-17 Bruno Haible locale, localename: Improve z/OS support. Reported by Daniel Richard G. in . * m4/locale_h.m4 (gl_LOCALE_T): New macro, partially extracted from gl_LOCALE_H. (gl_LOCALE_H): Require it. * m4/localename.m4 (gl_LOCALENAME): Likewise. If locale_t is not defined, don't even check for newlocale, duplocale, freelocale. * m4/intl-thread-locale.m4 (gt_FUNC_USELOCALE): Make the test fail when locale_t is not defined. 2019-11-17 Bruno Haible havelib: Make libdirstems processing more flexible. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Set 3 libdirstem variables: Consider 'lib' always, also on Solaris. Look for lib32 in addition to lib64. Don't invoke /usr/bin/gcc (reverting the second patch from 2017-02-19). * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Consider up to 3 additional libdirs, even when the first one exists as a directory. 2019-11-17 Bruno Haible havelib: Match the bitness when searching for libraries. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Define a function acl_is_expected_elfclass. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): When testing whether a library file exists, in ELF, also test whether it has the ELF class that corresponds to the host's bitness. 2019-11-17 Bruno Haible host-cpu-c-abi: Add support for unknown CPUs. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI_32BIT): Set gl_cv_host_cpu_c_abi_32bit to 'unknown' if we don't know whether it's 32-bit or 64-bit. 2019-11-17 Bruno Haible havelib: Remove redundant code. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Remove Solaris specific test for 64-bit host. Use gl_HOST_CPU_C_ABI_32BIT result instead. 2019-11-17 Bruno Haible havelib: Fix a bug in dependency processing. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): During dependency processing of .la files, don't overwrite the value of additional_libdir for the next rounds. 2019-11-16 Bruno Haible wctype-h: When overriding wint_t, override also the related functions. Reported by Christian Biesinger in . * m4/wctype_h.m4 (gl_WCTYPE_H): When GNULIB_OVERRIDES_WINT_T is 1, set REPLACE_ISWCNTRL to 1. * lib/wctype.in.h (rpl_iswalnum, rpl_iswalpha, rpl_iswblank, rpl_iswcntrl, rpl_iswdigit, rpl_iswgraph, rpl_iswlower, rpl_iswprint, rpl_iswpunct, rpl_iswspace, rpl_iswupper, rpl_iswxdigit, rpl_towlower, rpl_towupper): New definitions when GNULIB_OVERRIDES_WINT_T is 1. * doc/posix-headers/wchar.texi: Mention that wint_t is also overridden on mingw. * doc/posix-headers/wctype.texi: Likewise. 2019-11-16 Bruno Haible time_r: Fix for mingw. Reported by Christian Biesinger in . * lib/time.in.h: On mingw, include . * m4/time_r.m4 (gl_TIME_R): On mingw, include before . Test for localtime_r in a way that works when it is defined as an inline function. 2019-11-13 Bruno Haible havelib: Revert last change. * build-aux/config.rpath: Revert last change. We can add msys2 support when it has been added to libtool.m4 upstream. 2019-11-09 Paul Eggert config: add msys support Requested by Arnold Robbins in: https://lists.gnu.org/r/bug-gnulib/2019-11/msg00008.html He also requested a change to config.guess, which I’ll forward upstream. * build-aux/ar-lib (func_file_conv): * build-aux/compile (func_file_conv): * build-aux/config.rpath (wl, with_gnu_ld) (hardcode_libdir_flag_spec, libext, shrext, library_names_spec): Treat msys like cygwin. 2019-11-06 Paul Eggert regex: now back in sync with glibc * config/srclist.txt: regcomp.c, regex_internal.c, regex_internal.h, regexec.c got merged into glibc and are now copies again. 2019-10-27 Bruno Haible host-cpu-c-abi: Recognize i386 and a couple of other CPUs as 32-bit. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Include i386 in the case statement. (gl_HOST_CPU_C_ABI_32BIT): Likewise. Also recognize a couple of other 32-bit CPUs. 2019-10-24 Paul Eggert timespec-add, timespec-sub: simplify * lib/timespec-add.c (timespec_add): * lib/timespec-sub.c (timespec_sub): Simplify, now that INT_ADD_WRAPV and INT_SUBTRACT_WRAPV work on unsigned integers. 2019-10-23 Paul Eggert nstrftime: speed up integer overflow checking * lib/nstrftime.c: Include intprops.h. (INT_STRLEN_BOUND): Remove, as we can use intprops.h’s defn. (__strftime_internal): Use INT_MULTIPLY_WRAPV and INT_ADD_WRAPV instead of doing it by hand. * modules/nstrftime (Depends-on): Add intprops. Port better to GCC under macOS Work around macOS header that has ‘#define __has_builtin(x) 0’ when compiled by GCC. Apple really, really doesn’t want you to use GCC, apparently. Rroblem reported by Akim Demaille in: https://lists.gnu.org/r/bug-bison/2019-10/msg00071.html The fix is to not trust __has_builtin when being compiled by recent-enough GCC. * lib/intprops.h (__has_builtin) (_GL_HAS___builtin_add_overflow, _GL_TEMPDEF___has_builtin): * lib/verify.h (__has_builtin, _GL_HAS___builtin_unreachable) (_GL_HAS___builtin_trap, _GL_TEMPDEF___has_builtin): Remove. All uses removed. * lib/intprops.h (_GL_HAS_BUILTIN_ADD_OVERFLOW): Use __has_builtin directly, if defined and if not newer GCC. * lib/verify.h (_GL_HAS_BUILTIN_TRAP, _GL_HAS_BUILTIN_UNREACHABLE): New macro, that use __has_builtin directly, if defined and if not newer GCC. (assume): Use them. 2019-10-22 Akim Demaille maintainer-makefile: update rule for argmatch. * top/maint.mk (sc_prohibit_argmatch_without_use): Add ARGMATCH_DEFINE_GROUP. 2019-10-21 Akim Demaille bitset: let freeing functions accept NULL. * lib/bitset.c (bitset_free, bitset_obstack_free): Do nothing if given NULL. * lib/bitset.h: Document that. * doc/bitset.texi: Fix the example, and demonstrate bitset_free. 2019-10-15 Paul Eggert inttypes: use more-robust test for int range This fixes Bison 3.4.2 when built with Oracle Solaris Studio 12.3. Problem reported by Dagobert Michelsen in: https://lists.gnu.org/r/bug-gnulib/2019-10/msg00042.html * lib/inttypes.in.h: Rely only on limits.h when checking int range. 2019-10-15 Bruno Haible libtextstyle-optional: Sync with current not-yet-released libtextstyle. * libtextstyle-optional (styled_ostream_get_hyperlink_ref, styled_ostream_get_hyperlink_id, styled_ostream_set_hyperlink, term_ostream_get_hyperlink_ref, term_ostream_get_hyperlink_id, term_ostream_set_hyperlink): New functions. (term_styled_ostream_get_hyperlink_ref, term_styled_ostream_get_hyperlink_id, term_styled_ostream_set_hyperlink): New function aliases. 2019-10-14 Paul Eggert update-copyright: use en dashes in .texi ranges * build-aux/update-copyright: Match year ranges like "1998--2019", which are used in the Autoconf manual. Also, update ranges in .tex, .texi, and .texinfo files to use en dashes instead of hyphens. 2019-10-13 Paul Eggert * config/srclist.txt: Remove posix/regex_internal.c for now. 2019-10-13 Bruno Haible git-version-gen: Allow 'snapshot' as .tarball-version contents. * build-aux/git-version-gen: Don't map non-numeric .tarball-version contents to the empty string. 2019-10-12 Bruno Haible intprops tests: Fix compilation errors on HP-UX/ia64 with cc. * tests/test-intprops.c (main): Disable two more tests when using HP-UX cc. 2019-10-11 Paul Eggert Simplify and regularize regex use of ‘assert’ Also, tell GCC about the asserts even when compiling without debugging, to give it further optimization opportunities. * lib/regex_internal.h (DEBUG_ASSERT): New macro. * lib/regcomp.c (link_nfa_nodes, calc_eclosure) (parse_expression, parse_bracket_exp): * lib/regex_internal.c (build_wcs_buffer) (build_wcs_upper_buffer, re_string_reconstruct) (re_string_context_at): * lib/regexec.c (re_search_stub, re_copy_regs) (re_search_internal, prune_impossible_nodes, check_matching) (check_halt_state_context, set_regs, sift_states_backward) (build_sifted_states, transit_state_mb, transit_state_bkref) (check_arrival_add_next_nodes, check_arrival_expand_ecl) (match_ctx_add_subtop): Use it instead of plain ‘assert’. 2019-10-09 Paul Eggert regex: omit debug assignment when not debugging * lib/regexec.c (re_search_internal) [!DEBUG]: Remove unnecessary assignment. regex: tell compiler there’s at most 256 arcs out Partly this is to help the reader (and maybe help GCC); partly this is to pacify Coverity. * lib/regex_internal.h: Include verify.h. * lib/regexec.c (group_nodes_into_DFAstates): Tell the compiler that ndests cannot exceed SBC_MAX. * modules/regex (Depends-on): Add ‘verify’. regex: simplify by assuming C99 * config/srclist.txt: Comment out regex_internal.h and regexec.c temporarily. * lib/regex_internal.h (lock_define, re_match_context_t): Simplify by assuming C99 macros and const. * lib/regexec.c (re_search_internal): Simplify by assuming C99 initializers. Remove unnecessary assignment, as mctx is now safely initialized earlier. regex: avoid copying of uninitialized storage * config/srclist.txt: Comment out regcomp.c temporarily. * lib/regcomp.c (build_charclass_op, create_tree) [! (GCC_LINT||lint)]: Initialize even when not checking for lint, as the behavior is arguably undefined otherwise and Coverity warns about it. 2019-10-06 Bruno Haible access tests: Fix test failure when run as root. * tests/test-access.c: Include root-uid.h. (geteuid): Define fallback. (main): Don't expect that writing to a read-only file would fail when running as root. Also, remove the created files at the end. * modules/access-tests (Depends-on): Add root-uid. (configure.ac): Test whether geteuid exists. 2019-10-06 Benno Schulenberg (tiny change) users.txt: add GNU nano Nano has been making use of gnulib since March 2017, version 2.8.0. 2019-10-05 Paul Eggert bootstrap: simplify debugging of wget failures Problem reported by Tim Rühsen in: https://lists.gnu.org/r/bug-gnulib/2019-10/msg00000.html * build-aux/bootstrap (po_download_command_format): Invoke wget with -nv instead of -q, to make debugging easier. 2019-09-29 Bruno Haible avltree-list: Fix compilation warning (introduced on 2014-09-16). * lib/gl_avltree_list.c (gl_avltree_list_check_invariants): Remove 'const' attribute. 2019-09-29 Bruno Haible fbufmode: Fix compilation error on glibc >= 2.28 systems. * lib/stdio-impl.h (_IO_UNBUFFERED): Define fallback on glibc >= 2.28. 2019-09-28 Bruno Haible Update comments that refer to POSIX. * lib/creat.c, lib/fopen.c, lib/open.c, lib/openat.c: Cite the relevant sentence about trailing slashes. * lib/fflush.c: Clarify the reasoning. * tests/test-fflush2.c: Cite the relevant sentence. 2019-09-28 Bruno Haible access: Document limitations on Windows. Suggested by Zaretskii . * doc/posix-functions/access.texi: Mention two limitations on Windows. 2019-09-28 Bruno Haible findprog-in: Fix comment. Reported by Eli Zaretskii . * lib/findprog.h (find_in_given_path): Extend description of EACCES condition. * lib/stat.c (rpl_stat): Fix typo in comment. * lib/utime.c (_gl_utimens_windows): Likewise. 2019-09-23 Paul Eggert Update URLs and associated text (Thanks to Bruno Haible for proofreading this patch.) Prefer https: to http: in URLs where either will do, for the usual security reasons. I also updated broken and/or moved URLs discovered during the process. In a few places I had to resort to archive.org, since I didn't find the originals elsewhere. 2019-09-15 Paul Smith Bruno Haible findprog-in: Set errno when the search fails. * lib/findprog-in.c: Include . (find_in_given_path): Set errno before returning NULL. * lib/findprog.h (find_in_given_path): Update comment accordingly. Define the term "slash". 2019-09-15 Bruno Haible findprog, findprog-lgpl, findprog-in: Fix crash on MSVC. * modules/findprog (Depends-on): Add access. * modules/findprog-lgpl (Depends-on): Likewise. * modules/findprog-in (Depends-on): Likewise. 2019-09-15 Bruno Haible access: Add tests. * tests/test-access.c: New file. * modules/access-tests: New file. access: New module. * lib/unistd.in.h (access): New declaration. * lib/access.c: New file. * m4/access.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether access is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_ACCESS, REPLACE_ACCESS. * modules/unistd (Makefile.am): Substitute GNULIB_ACCESS, REPLACE_ACCESS. * modules/access: New file. * tests/test-unistd-c++.cc (access): Check signature. * doc/posix-functions/access.texi: Mention the new module. 2019-09-15 Bruno Haible fcntl-h: Fix compilation error of creat.c on MSVC. * lib/fcntl.in.h: Include also when __need_system_fcntl_h is defined. 2019-09-15 Bruno Haible creat: Add tests. * tests/test-creat.c: New file, based on tests/test-open.h. * modules/creat-tests: New file. creat: New module. * lib/fcntl.in.h (creat): New declaration. * lib/creat.c: New file, based on lib/open.c. * m4/creat.m4: New file. * m4/open-slash.m4: New file, extracted from m4/open.m4. * m4/open.m4 (gl_FUNC_OPEN): Move trailing-slash test to open-slash.m4. Invoke gl_OPEN_TRAILING_SLASH_BUG. * modules/open (Files): Add m4/open-slash.m4. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Initialize GNULIB_CREAT, REPLACE_CREAT. * modules/fcntl-h (Makefile.am): Substitute GNULIB_CREAT, REPLACE_CREAT. * modules/creat: New file. * tests/test-fcntl-h-c++.cc (creat): Check signature. * doc/posix-functions/creat.texi: Mention the new module. 2019-09-15 Bruno Haible open tests: Enhance test. * tests/test-open.h (test_open): Test the creation of an executable regular file. Also improve initial cleanup. 2019-09-15 Bruno Haible intprops tests: Avoid build failure with HP-UX cc. * tests/test-intprops.c: Disable a check that makes HP cc choke with "error 4018: Macro param too large after substitution - use -H option.". 2019-09-14 Bruno Haible Make autoconf tests work with -Werror=implicit-function-declaration. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Include , for towupper() declaration. * m4/ptsname.m4 (gl_FUNC_PTSNAME): Include , for ptsname() declaration. 2019-09-14 Bruno Haible findprog-in: Better mimic the system on native Windows. Reported by Paul Smith . * lib/findprog-in.c (find_in_given_path): On native Windows, don't try non-empty suffixes when the file name already contains a '.'. 2019-09-10 Bruno Haible wctob: Fix autoconf test. Based on patch by Florian Weimer . * m4/wctob.m4 (gl_FUNC_WCTOB): Include before using mbtowc. 2019-09-09 Akim Demaille xhash: provide hash_xinitialize. Suggested by Egor Pugin https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html * modules/xhash, lib/xhash.c: New. * lib/hash.h (hash_xinitialize): New. 2019-09-09 Bruno Haible findprog-in: Make exec optimization optional. * lib/findprog.h: Add double-inclusion guard. Include . (find_in_given_path): Add optimize_for_exec parameter. * lib/findprog-in.c (find_in_given_path): Likewise. 2019-09-08 Bruno Haible Add option to assume the best, not the worst, when cross-compiling. Suggested by Jonas Termansen . * m4/gnulib-common.m4 (gl_COMMON_BODY): Add --enable-cross-guesses=... option. Set gl_cross_guess_normal and gl_cross_guess_inverted. * m4/argz.m4 (gl_FUNC_ARGZ): Obey --enable-cross-guesses for lt_cv_sys_argz_works. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Obey --enable-cross-guesses for ac_cv_func_calloc_0_nonnull. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Obey --enable-cross-guesses for gl_cv_func_realpath_works. * m4/cbrtl.m4 (gl_FUNC_CBRTL): Obey --enable-cross-guesses for gl_cv_func_cbrtl_ieee. * m4/ceil.m4 (gl_FUNC_CEIL): Obey --enable-cross-guesses for gl_cv_func_ceil_ieee. * m4/ceilf.m4 (gl_FUNC_CEILF): Obey --enable-cross-guesses for gl_cv_func_ceilf_ieee. * m4/ceill.m4 (gl_FUNC_CEILL): Obey --enable-cross-guesses for gl_cv_func_ceill_ieee. * m4/chown.m4 (AC_FUNC_CHOWN): Obey --enable-cross-guesses for ac_cv_func_chown_works. (gl_FUNC_CHOWN): Obey --enable-cross-guesses for gl_cv_func_chown_slash_works, gl_cv_func_chown_ctime_works. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Obey --enable-cross-guesses for gl_cv_struct_dirent_d_ino. * m4/exp2l.m4 (gl_FUNC_EXP2L): Obey --enable-cross-guesses for gl_cv_func_exp2l_works, gl_cv_func_exp2l_ieee. * m4/expl.m4 (gl_FUNC_EXPL): Obey --enable-cross-guesses for gl_cv_func_expl_works. * m4/expm1.m4 (gl_FUNC_EXPM1): Obey --enable-cross-guesses for gl_cv_func_expm1_ieee. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Obey --enable-cross-guesses for gl_cv_func_expm1l_works. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Obey --enable-cross-guesses for gl_cv_func_open_directory_works. * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Obey --enable-cross-guesses for gl_cv_func_fchownat_nofollow_works. (gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): Obey --enable-cross-guesses for gl_cv_func_fchownat_empty_filename_works. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Obey --enable-cross-guesses for gl_cv_func_fdopendir_works. * m4/floor.m4 (gl_FUNC_FLOOR): Obey --enable-cross-guesses for gl_cv_func_floor_ieee. * m4/floorf.m4 (gl_FUNC_FLOORF): Obey --enable-cross-guesses for gl_cv_func_floorf_ieee. * m4/fma.m4 (gl_FUNC_FMA_WORKS): Obey --enable-cross-guesses for gl_cv_func_fma_works. * m4/fmaf.m4 (gl_FUNC_FMAF_WORKS): Obey --enable-cross-guesses for gl_cv_func_fmaf_works. * m4/fmal.m4 (gl_FUNC_FMAL_WORKS): Obey --enable-cross-guesses for gl_cv_func_fmal_works. * m4/fmod.m4 (gl_FUNC_FMOD): Obey --enable-cross-guesses for gl_cv_func_fmod_ieee. * m4/fmodf.m4 (gl_FUNC_FMODF): Obey --enable-cross-guesses for gl_cv_func_fmodf_ieee. * m4/fmodl.m4 (gl_FUNC_FMODL): Obey --enable-cross-guesses for gl_cv_func_fmodl_ieee. * m4/fpurge.m4 (gl_FUNC_FPURGE): Obey --enable-cross-guesses for gl_cv_func_fpurge_works. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Obey --enable-cross-guesses for gl_cv_func_getcwd_path_max. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Obey --enable-cross-guesses for gl_cv_func_getcwd_null. (gl_FUNC_GETCWD): Update for getcwd-path-max.m4 change. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Obey --enable-cross-guesses for gl_cv_func_working_getdelim. * m4/getgroups.m4 (AC_FUNC_GETGROUPS): Obey --enable-cross-guesses for ac_cv_func_getgroups_works. Keep this macro also in Autoconf >= 2.70. (gl_FUNC_GETGROUPS): Obey --enable-cross-guesses for gl_cv_func_getgroups_works. * m4/getline.m4 (gl_FUNC_GETLINE): Obey --enable-cross-guesses for am_cv_func_working_getline. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Obey --enable-cross-guesses for gl_cv_func_getopt_gnu. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Obey --enable-cross-guesses for gl_cv_func_gettimeofday_clobber. * m4/hypot.m4 (gl_FUNC_HYPOT): Obey --enable-cross-guesses for gl_cv_func_hypot_ieee. * m4/hypotf.m4 (gl_FUNC_HYPOTF): Obey --enable-cross-guesses for gl_cv_func_hypotf_ieee. * m4/hypotl.m4 (gl_FUNC_HYPOTL): Obey --enable-cross-guesses for gl_cv_func_hypotl_ieee. * m4/iconv_open-utf.m4 (gl_FUNC_ICONV_OPEN_UTF_SUPPORT): Obey --enable-cross-guesses for gl_cv_func_iconv_supports_utf. * m4/link.m4 (gl_FUNC_LINK): Obey --enable-cross-guesses for gl_cv_func_link_works. * m4/linkat.m4 (gl_FUNC_LINKAT): Obey --enable-cross-guesses for gl_cv_func_linkat_slash. * m4/log.m4 (gl_FUNC_LOG): Obey --enable-cross-guesses for gl_cv_func_log_ieee. * m4/logf.m4 (gl_FUNC_LOGF): Obey --enable-cross-guesses for gl_cv_func_logf_ieee. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): Obey --enable-cross-guesses for gl_cv_func_logl_works. * m4/log10.m4 (gl_FUNC_LOG10): Obey --enable-cross-guesses for gl_cv_func_log10_ieee. * m4/log10f.m4 (gl_FUNC_LOG10F): Obey --enable-cross-guesses for gl_cv_func_log10f_ieee. * m4/log10l.m4 (gl_FUNC_LOG10L_WORKS): Obey --enable-cross-guesses for gl_cv_func_log10l_works. * m4/log1p.m4 (gl_FUNC_LOG1P): Obey --enable-cross-guesses for gl_cv_func_log1p_ieee. * m4/log1pf.m4 (gl_FUNC_LOG1PF): Obey --enable-cross-guesses for gl_cv_func_log1pf_ieee. * m4/log1pl.m4 (gl_FUNC_LOG1PL): Obey --enable-cross-guesses for gl_cv_func_log1pl_ieee. * m4/log2.m4 (gl_FUNC_LOG2): Obey --enable-cross-guesses for gl_cv_func_log2_ieee. * m4/log2f.m4 (gl_FUNC_LOG2F): Obey --enable-cross-guesses for gl_cv_func_log2f_ieee. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Obey --enable-cross-guesses for gl_cv_func_lstat_dereferences_slashed_symlink. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): Obey --enable-cross-guesses for ac_cv_func_malloc_0_nonnull. Keep this macro also in Autoconf >= 2.70. * m4/mbrtowc.m4 (gl_MBRTOWC_C_LOCALE): Obey --enable-cross-guesses for gl_cv_C_locale_sans_EILSEQ. * m4/memchr.m4 (gl_FUNC_MEMCHR): Obey --enable-cross-guesses for gl_cv_func_memchr_works. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): Obey --enable-cross-guesses for gl_cv_func_memmem_works_always. (gl_FUNC_MEMMEM): Obey --enable-cross-guesses for gl_cv_func_memmem_works_fast. * m4/mkdir.m4 (gl_FUNC_MKDIR): Obey --enable-cross-guesses for gl_cv_func_mkdir_trailing_slash_works, gl_cv_func_mkdir_trailing_dot_works. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Obey --enable-cross-guesses for gl_cv_func_mkfifo_works. * m4/mknod.m4 (gl_FUNC_MKNOD): Obey --enable-cross-guesses for gl_cv_func_mknod_works. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Obey --enable-cross-guesses for gl_cv_func_working_mkstemp. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Obey --enable-cross-guesses for gl_cv_func_working_mktime. * m4/modf.m4 (gl_FUNC_MODF): Obey --enable-cross-guesses for gl_cv_func_modf_ieee. * m4/modff.m4 (gl_FUNC_MODFF): Obey --enable-cross-guesses for gl_cv_func_modff_ieee. * m4/modfl.m4 (gl_FUNC_MODFL): Obey --enable-cross-guesses for gl_cv_func_modfl_ieee. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Obey --enable-cross-guesses for gl_cv_func_nanosleep. * m4/perror.m4 (gl_FUNC_PERROR): Obey --enable-cross-guesses for gl_cv_func_perror_works. * m4/printf.m4 (gl_PRINTF_SIZES_C99): Obey --enable-cross-guesses for gl_cv_func_printf_sizes_c99. (gl_PRINTF_INFINITE): Obey --enable-cross-guesses for gl_cv_func_printf_infinite. (gl_PRINTF_INFINITE_LONG_DOUBLE): Obey --enable-cross-guesses for gl_cv_func_printf_infinite_long_double. (gl_PRINTF_DIRECTIVE_A): Obey --enable-cross-guesses for gl_cv_func_printf_directive_a. (gl_PRINTF_DIRECTIVE_F): Obey --enable-cross-guesses for gl_cv_func_printf_directive_f. (gl_PRINTF_FLAG_ZERO): Obey --enable-cross-guesses for gl_cv_func_printf_flag_zero. (gl_PRINTF_ENOMEM): Obey --enable-cross-guesses for gl_cv_func_printf_enomem. (gl_SNPRINTF_TRUNCATION_C99): Obey --enable-cross-guesses for gl_cv_func_snprintf_truncation_c99. (gl_SNPRINTF_RETVAL_C99): Obey --enable-cross-guesses for gl_cv_func_snprintf_retval_c99. (gl_SNPRINTF_DIRECTIVE_N): Obey --enable-cross-guesses for gl_cv_func_snprintf_directive_n. (gl_VSNPRINTF_ZEROSIZE_C99): Obey --enable-cross-guesses for gl_cv_func_vsnprintf_zerosize_c99. * m4/pselect.m4 (gl_FUNC_PSELECT): Obey --enable-cross-guesses for gl_cv_func_pselect_detects_ebadf. * m4/pthread_rwlock_rdlock.m4 (gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER): Obey --enable-cross-guesses for gl_cv_pthread_rwlock_rdlock_prefer_writer. * m4/ptsname.m4 (gl_FUNC_PTSNAME): Obey --enable-cross-guesses for gl_cv_func_ptsname_sets_errno. * m4/putenv.m4 (gl_FUNC_PUTENV): Obey --enable-cross-guesses for gl_cv_func_svid_putenv. * m4/readlink.m4 (gl_FUNC_READLINK): Obey --enable-cross-guesses for gl_cv_func_readlink_works. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Obey --enable-cross-guesses for ac_cv_func_realloc_0_nonnull. Keep this macro also in Autoconf >= 2.70. * m4/regex.m4 (gl_REGEX): Obey --enable-cross-guesses for gl_cv_func_re_compile_pattern_working. * m4/remainder.m4 (gl_FUNC_REMAINDER): Obey --enable-cross-guesses for gl_cv_func_remainder_ieee. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Obey --enable-cross-guesses for gl_cv_func_remainderf_ieee. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Obey --enable-cross-guesses for gl_cv_func_remainderl_ieee. * m4/rintl.m4 (gl_FUNC_RINTL): Obey --enable-cross-guesses for gl_cv_func_rintl_works. * m4/rmdir.m4 (gl_FUNC_RMDIR): Obey --enable-cross-guesses for gl_cv_func_rmdir_works. * m4/round.m4 (gl_FUNC_ROUND): Obey --enable-cross-guesses for gl_cv_func_round_ieee. * m4/roundf.m4 (gl_FUNC_ROUNDF): Obey --enable-cross-guesses for gl_cv_func_roundf_ieee. * m4/roundl.m4 (gl_FUNC_ROUNDL): Obey --enable-cross-guesses for gl_cv_func_roundl_ieee. * m4/select.m4 (gl_FUNC_SELECT): Obey --enable-cross-guesses for gl_cv_func_select_detects_ebadf. * m4/setenv.m4 (gl_FUNC_SETENV): Obey --enable-cross-guesses for gl_cv_func_setenv_works. (gl_FUNC_UNSETENV): Obey --enable-cross-guesses for gl_cv_func_unsetenv_works. * m4/signbit.m4 (gl_SIGNBIT): Obey --enable-cross-guesses for gl_cv_func_signbit, gl_cv_func_signbit_gcc. * m4/sleep.m4 (gl_FUNC_SLEEP): Obey --enable-cross-guesses for gl_cv_func_sleep_works. * m4/stat.m4 (gl_FUNC_STAT): Obey --enable-cross-guesses for gl_cv_func_stat_file_slash. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Obey --enable-cross-guesses for gl_cv_func_stpncpy. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Obey --enable-cross-guesses for gl_cv_func_strcasestr_works_always. (gl_FUNC_STRCASESTR): Obey --enable-cross-guesses for gl_cv_func_strcasestr_linear. * m4/strerror.m4 (gl_FUNC_STRERROR): Obey --enable-cross-guesses for gl_cv_func_working_strerror. (gl_FUNC_STRERROR_0): Obey --enable-cross-guesses for gl_cv_func_strerror_0_works. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Obey --enable-cross-guesses for gl_cv_func_strerror_r_works. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Obey --enable-cross-guesses for gl_cv_func_strstr_works_always. (gl_FUNC_STRSTR): Obey --enable-cross-guesses for gl_cv_func_strstr_linear. * m4/strtod.m4 (gl_FUNC_STRTOD): Obey --enable-cross-guesses for gl_cv_func_strtod_works. * m4/strtold.m4 (gl_FUNC_STRTOLD): Obey --enable-cross-guesses for gl_cv_func_strtold_works. * m4/symlink.m4 (gl_FUNC_SYMLINK): Obey --enable-cross-guesses for gl_cv_func_symlink_works. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Obey --enable-cross-guesses for gl_cv_func_symlinkat_works. * m4/trunc.m4 (gl_FUNC_TRUNC): Obey --enable-cross-guesses for gl_cv_func_trunc_ieee. * m4/truncf.m4 (gl_FUNC_TRUNCF): Obey --enable-cross-guesses for gl_cv_func_truncf_ieee. * m4/truncl.m4 (gl_FUNC_TRUNCL): Obey --enable-cross-guesses for gl_cv_func_truncl_ieee. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Obey --enable-cross-guesses for gl_cv_func_tzset_clobber. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Obey --enable-cross-guesses for gl_cv_func_ungetc_works. * m4/unlink.m4 (gl_FUNC_UNLINK): Obey --enable-cross-guesses for gl_cv_func_unlink_honors_slashes, gl_cv_func_unlink_parent_fails. * m4/usleep.m4 (gl_FUNC_USLEEP): Obey --enable-cross-guesses for gl_cv_func_usleep_works. * m4/utimens.m4 (gl_UTIMENS): Obey --enable-cross-guesses for gl_cv_func_futimesat_works. * m4/utimes.m4 (gl_FUNC_UTIMES): Obey --enable-cross-guesses for gl_cv_func_working_utimes. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Obey --enable-cross-guesses for gl_cv_func_wcwidth_works. * m4/glob.m4 (gl_GLOB): When cross-compiling, don't create symlinks for testing. Obey --enable-cross-guesses for gl_cv_glob_lists_symlinks. * m4/rename.m4 (gl_FUNC_RENAME): When cross-compiling, don't create links for testing. Obey --enable-cross-guesses for gl_cv_func_rename_slash_dst_works, gl_cv_func_rename_slash_src_works, gl_cv_func_rename_link_works, gl_cv_func_rename_dest_works. 2019-09-08 Bruno Haible Clarify that cross-compilation guesses are guesses. * m4/threads.m4 (gl_THREADS_H): Say "guessing yes" or "guessing no" when cross-compiling. 2019-09-08 Bruno Haible chown: Fix configure output (regression from 2019-03-23). * m4/chown.m4 (gl_FUNC_CHOWN): Fix reference to gl_cv_func_chown_follows_symlink variable. 2019-09-08 Bruno Haible findprog-in: New module. Suggested by Paul Smith . * lib/findprog.h (find_in_given_path): New declaration. * lib/findprog-in.c: New file, based on lib/findprog.c. * m4/findprog-in.m4: New file, based on m4/findprog.m4. * modules/findprog-in: New file. 2019-09-08 Bruno Haible findprog: Remove unused dependency. * modules/findprog (Depends-on): Remove strdup. 2019-09-08 Bruno Haible findprog: Remove test that is obsolete since 2006-04-24. * m4/findprog.m4 (gl_FINDPROG): Don't test for unistd.h. 2019-09-06 Akim Demaille bitset: style changes * lib/bitset/vector.c (vbitset_resize): Factor computation. * lib/bitset.c, lib/bitset/stats.c, lib/bitsetv.c: Prefer xzalloc to xcalloc. Suggested by Paul Eggert. 2019-09-06 Akim Demaille bitset: check memory allocation Reported by 江 祖铭 (Zu-Ming Jiang). With help from Paul Eggert. https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00016.html * lib/bitset/table.c (tbitset_resize): When growing, use xrealloc instead of realloc. When shrinking, accept failures. * lib/bitset/vector.c (vbitset_resize): Likewise. 2019-09-07 Paul Eggert scratch_buffer: sync from glibc * config/srclist.txt: Add the scratch_buffer source code from glibc, since these should be in sync. Autoupdate. 2019-09-07 Bruno Haible doc: Update for glibc 2.30. * doc/glibc-functions/gettid.texi: New file. * doc/glibc-functions/pthread_cond_clockwait.texi: New file. * doc/glibc-functions/pthread_mutex_clocklock.texi: New file. * doc/glibc-functions/pthread_rwlock_clockrdlock.texi: New file. * doc/glibc-functions/pthread_rwlock_clockwrlock.texi: New file. * doc/glibc-functions/sem_clockwait.texi: New file. * doc/glibc-functions/tgkill.texi: New file. * doc/glibc-functions/twalk_r.texi: New file. * doc/gnulib.texi: Include them. (Glibc semaphore.h): New section. * doc/pastposix-functions/h_errno.texi: Update. * doc/posix-functions/*.texi: Likewise. 2019-09-06 Bruno Haible symlink tests: Avoid test failure on Linux with Lustre file system. Reported by Thomas C Oppe at . * tests/test-symlink.h (test_symlink): Accept errno value ENOENT. 2019-09-01 Bruno Haible gitsub.sh: Add support for shallow-cloning of subdirectories. * top/gitsub.sh (func_usage): Document allowed git options with 'git pull'. (func_pull): Accept GIT_OPTIONS argument. (pull): Parse git options before complaining about too many arguments. Pass the git options to func_pull. 2019-08-29 Bruno Haible lock: Fix cross-compilation guesses. * m4/pthread_rwlock_rdlock.m4 (gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER): Require AC_CANONICAL_HOST. When cross-compiling, guess no on most platforms. 2019-08-28 Bruno Haible isfinite, isinf, isnan, signbit: Fix error in C++ mode on mingw. Reported by Martin Storsjö in . * lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Add more arguments. (isfinite, isinf, isnan, signbit): On platforms that use C++ include files from GCC 6 or newer, use an override through '#define', because the inline definitions in the platform's cannot be overridden in another way. 2019-08-27 Paul Eggert Revert macOS INT_MULTIPLY_WRAPV patch Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-08/msg00076.html * lib/intprops.h (_GL_HAS___builtin_mul_overflow): Remove. (_GL_HAS_BUILTIN_MUL_OVERFLOW): Go back to working around the Clang bug on macOS. 2019-08-27 Bruno Haible libtool-next-version: Fix error output. * build-aux/libtool-next-version (func_fatal_error): Fix the program name. 2019-08-27 Paul Eggert Speed up INT_MULTIPLY_WRAPV on macOS Assume that __builtin_mul_overflow works OK with Clang on macOS. Mattias Engdegård says it’s safe to assume the relevant library is always available there. * lib/intprops.h (_GL_HAS___builtin_mul_overflow): New temporary internal macro. (_GL_HAS_BUILTIN_MUL_OVERFLOW): No need to work around the Clang bug on macOS. 2019-08-25 Paul Eggert intprops.h, verify.h: port better to clang Improve code generated by INT_ADD_WRAPV and INT_SUBTRACT_WRAPV with Clang. Problem reported privately by Mattias Engdegård. Also, insulate intprops.h and verify.h better against each other’s definitions of __has_builtin on non-Clang hosts. * lib/intprops.h (__has_builtin): Define a temporary substitute if __has_builtin is not already defined. (_GL_HAS___builtin_add_overflow, _GL_TEMPDEF___has_builtin): New temporary internal macros. (_GL_HAS_BUILTIN_ADD_OVERFLOW, _GL_HAS_BUILTIN_MUL_OVERFLOW): Now two separate macros, replacing the old _GL_HAS_BUILTIN_OVERFLOW, since we no longer assume that __builtin_mul_overflow is like the rest. All uses changed. (INT_ADD_WRAPV, INT_SUBTRACT_WRAPV, INT_MULTIPLY_WRAPV): Adjust to above changes. (_GL_INT_OP_WRAPV): Remove ‘builtin’ arg, since it’s no longer relevant. All uses changed. * lib/verify.h (__has_builtin): Treat like intprops.h, so that the two .h files do not collide with each other. (_GL_HAS___builtin_unreachable, _GL_HAS___builtin_trap) (_GL_TEMPDEF___has_builtin): New temporary internal macros. 2019-08-24 Paul Eggert intprops: say why not Clang __builtin_add_overflow * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW): Mention Clang in comment, responding to a query from Mattias Engdegård. 2019-08-24 Bruno Haible doc: Document most of the files outside of modules. * doc/gnulib.texi (Build Infrastructure Files, Release Management Files): New chapters. 2019-08-24 Bruno Haible bootstrap: Keep in sync with the 'gettext' module. Reported by Assaf Gordon in . * build-aux/po/Makefile.in.in: Update to gettext 0.20. * build-aux/po/remove-potcdate.sin: Likewise. 2019-08-24 Bruno Haible crypto/gc-sha512: Add tests. * tests/test-gc-sha512.c: New file, based on tests/test-gc-sha1.c. * modules/crypto/gc-sha512-tests: New file. crypto/gc-sha256: Add tests. * tests/test-gc-sha256.c: New file, based on tests/test-gc-sha1.c. * modules/crypto/gc-sha256-tests: New file. crypto/gc-sha256, crypto/gc-sha512: New modules. * lib/gc.h (gc_sha256, gc_sha512): New declarations. * lib/gc-gnulib.c: Include sha256.h, sha512.h. (MAX_DIGEST_SIZE): Set to 64. (_gc_hash_ctx, gc_hash_open, gc_hash_digest_length, gc_hash_write, gc_hash_read, gc_hash_buffer): Add support for sha256 and sha512. (gc_sha256, gc_sha512): New functions. * lib/gc-libgcrypt.c (gc_sha256, gc_sha512): New functions. * modules/crypto/gc-sha256: New file, based on modules/crypto/gc-sha1. * modules/crypto/gc-sha512: New file, based on modules/crypto/gc-sha1. 2019-08-24 Bruno Haible crypto/gc-sha1 tests: Improve output when the test fails. * tests/test-gc-sha1.c (main): In case of mismatch, print the entire output. 2019-08-24 Bruno Haible crypto/gc-sm3: Fix compilation error with --with-libgcrypt. * m4/gc-sm3.m4 (gl_GC_SM3): Test whether libgcrypt supports SM3. Define LIBGCRYPT_HAS_MD_SM3. * lib/gc-libgcrypt.c: Include sm3.h. (_gc_hash_ctx, gc_hash_open, gc_hash_hmac_setkey, gc_hash_write, gc_hash_read, gc_hash_close, gc_hash_buffer, gc_sm3): Use the gnulib implementation if libgcrypt does not support SM3. 2019-08-24 Bruno Haible crypto/gc-md2: Optimize and clarify code. * lib/gc-gnulib.c (gc_hash_open): Comment out md2_init_ctx invocation. * lib/gc-libgcrypt.c (gc_hash_open): Clarify why md2_init_ctx invocation is not needed. 2019-08-24 Bruno Haible crypto/gc-md2: Add comment. * lib/gc-libgcrypt.c: Add comment. 2019-08-24 Bruno Haible crypto/gc-{md[24],rijndael} tests: Fix link error with --with-libgcrypt. * modules/crypto/gc-md2-tests (test_gc_md2_LDADD): New variable. * modules/crypto/gc-md4-tests (test_gc_md4_LDADD): New variable. * modules/crypto/gc-rijndael-tests (test_gc_rijndael_LDADD): New variable. 2019-08-24 Bruno Haible crypto/gc: Fix link error with --with-libgcrypt. * m4/gc.m4 (gl_GC): Set LIB_CRYPTO to the value found by the AC_LIB_HAVE_LINKFLAGS invocation. 2019-08-24 Bruno Haible crypto/gc: Access the module indicators correctly. * lib/gc-gnulib.c: Use '#if GNULIB_GC_*', not '#ifdef GNULIB_GC_*'. * lib/gc-libgcrypt.c: Likewise. 2019-08-24 Bruno Haible crypto/gc: Fix configuration with --with-libgcrypt. * m4/libgcrypt.m4: New file, copied from libgcrypt/src/libgcrypt.m4. * modules/crypto/gc (Files): Add it. * m4/gc.m4 (gl_GC): Assume AM_PATH_LIBGCRYPT is defined. 2019-08-24 Bruno Haible Remove unused file. * m4/stat-macros.m4: Remove file. 2019-08-21 Paul Eggert New strip-trailing-space option for srclist-update * config/srclist-update (fixfile): Support new option. * config/srclist.txt (texinfo.tex, maintain.texi, standards.texi): Use it. 2019-08-20 Eric Blake accept4: Support SOCK_NONBLOCK, if defined * lib/accept4.c (accept4): If SOCK_NONBLOCK is defined, honor it. accept4: Fix compilation when native accept4() exists. Reported by Richard W.M. Jones in https://lists.gnu.org/archive/html/bug-gnulib/2019-08/msg00029.html * lib/accept4.c (accept4): Match witness symbol to m4 file update. 2019-08-18 Bruno Haible Defeat -flto GCC optimization in math autoconf tests. Reported by Tomasz Kłoczko at . * m4/mathfunc.m4 (gl_MATHFUNC): Mark function pointer as 'volatile'. * m4/acosl.m4 (gl_FUNC_ACOSL): Likewise. * m4/asinl.m4 (gl_FUNC_ASINL): Likewise. * m4/atanl.m4 (gl_FUNC_ATANL): Likewise. * m4/cosl.m4 (gl_FUNC_COSL): Likewise. * m4/exp2.m4 (gl_FUNC_EXP2): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/expm1.m4 (gl_FUNC_EXPM1): Likewise. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Likewise. * m4/sinl.m4 (gl_FUNC_SINL): Likewise. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Likewise. * m4/tanl.m4 (gl_FUNC_TANL): Likewise. 2019-08-17 Bruno Haible windows-spin: Implement declared functions. Reported by Gisle Vanem in . * lib/windows-spin.c (glwthread_spin_trylock): Fix typo in function name. 2019-08-17 Paul Eggert intprops: port to Oracle Developer Studio 12.6 * lib/intprops.h (_GL_INT_OP_WRAPV): Fix recently-introduced typos that were in a section not compiled by GCC. 2019-08-14 Paul Eggert intprops: support uchar, ushort _WRAPV dests * lib/intprops.h (_GL_INT_OP_WRAPV_SMALLISH): New macro, defined when __builtin_add_overflow etc. and _Generic are not used. (_GL_INT_OP_WRAPV): Use it to support destinations that are unsigned char or unsigned short, even in compilers that lack __typeof__ and are not C11-compatible. intprops: pacify picky GCC * lib/intprops.h (_GL_BUILTIN_MUL_OVERFLOW): Pacify GCC’s complaints about ignoring __builtin_mul_overflow’s possibly-incorrect result. (_GL_INT_MULTIPLY_RANGE_OVERFLOW): Pacify GCC’s complaints about (A) used as a boolean, when A is an expression like 3 * 4. intprops: support unsigned *_WRAPV results Add support for unsigned, unsigned long, and unsigned long long results to INT_ADD_WRAPV, INT_SUBTRACT_WRAPV, and INT_MULTIPLY_WRAPV. Also, work around GCC bug 91450, and fix a bug with unsigned inputs reported by Eli Zaretskii in: https://lists.gnu.org/r/bug-gnulib/2019-08/msg00012.html * config/srclist.txt: Break the glibc connection for intprops.h temporarily, while more testing is done in Gnulib-using apps. * lib/intprops.h (INT_ADD_WRAPV, INT_SUBTRACT_WRAPV) (INT_MULTIPLY_WRAPV, _GL_INT_OP_WRAPV, _GL_INT_OP_WRAPV_LONGISH): Support unsigned results no narrower than unsigned int. Report overflow correctly if some arguments are unsigned. (_GL_BUILTIN_MUL_OVERFLOW): New macro, to work around GCC bug 91450. (_GL_INT_OP_CALC): Simplify now that the OVERFLOW argument does the right thing with narrow args. (_GL_INT_OP_CALC1): Remove. All callers removed. (_GL_INT_ADD_RANGE_OVERFLOW, _GL_INT_SUBTRACT_RANGE_OVERFLOW) (_GL_INT_MULTIPLY_RANGE_OVERFLOW): New macros. * tests/test-intprops.c: Check for bugs and test new behavior. 2019-08-14 Bruno Haible get_progname_of: New module. * lib/get_progname_of.h: New file. * lib/get_progname_of.c: New file, based on lib/getprogname.c. * lib/getprogname.c (getprogname): Tweak coding style. * lib/vma-iter.c (vma_iterate_bsd): Update comment. * modules/get_progname_of: New file. 2019-08-14 Bruno Haible get_ppid_of: New module. * lib/get_ppid_of.h: New file. * lib/get_ppid_of.c: New file. * modules/get_ppid_of: New file. 2019-08-13 Bruno Haible libtextstyle-optional tests: Support the NO_COLOR environment variable. * tests/test-libtextstyle.c (main): Do not emit styling when the environment variable NO_COLOR is set. 2019-08-12 Paul Eggert verify: improve diagnostic quality in recent GCC If ‘verify’ fails in a deeply-nested macro, GCC does not output a useful line number containing the top-level caller of the macro. So, bring back the older way of issuing a diagnostic containing the top-level call’s arg, so that it is easier to diagnose ‘verify’ failures with recent GCC. * lib/verify.h (_GL_VERIFY_TRUE, _GL_VERIFY_TYPE): Bring back DIAGNOSTIC arg. All callers changed. (verify): Just use _GL_VERIFY. 2019-08-11 Bruno Haible localcharset: Add more aliases for OS/2. Based on patch by KO Myung-Hun in . * lib/localcharset.c (alias_table) [OS2]: Add more aliases. 2019-08-10 Eric Blake configmake: Update advice on usage. * modules/configmake (Include): No longer necessary to include last, since configmake.h itself worries about collision avoidance. 2019-08-10 Assaf Gordon parse-datetime: fix 'T' military timezone handling * lib/parse-datetime.y (zone): follow-up to the previous commit: the 'T' case is handled outside the conversion table (used as either military timezone UTC-7 or ISO8601 separator). Change it from "HOUR(7)" to "-HOUR(7)" to match other timezone letters. 2019-08-09 Paul Eggert parse-datetime: fix military timezone letters Problem and trivial fix reported by Neil Hoggarth in: https://lists.gnu.org/r/bug-gnulib/2019-08/msg00005.html * lib/parse-datetime.y (military_table): Do it the right way, not the RFC 822 way. 2019-08-08 Eric Blake configmake: Avoid namespace pollution issue on mingw. * modules/configmake (Makefile.am): If the project uses , include that header before defining DATADIR. 2019-07-28 Bruno Haible mbrtowc tests: Fix regression on mingw (regression from 2018-02-24). * tests/test-mbrtowc.c (main): Fix expected value of wc. 2019-07-24 Bruno Haible pthread-h: Fix definitions of types and macros on mingw. * lib/pthread.in.h (pthread_t, pthread_attr_t, PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED): Define also when module 'pthread-thread' is not in use. (pthread_once_t, PTHREAD_ONCE_INIT): Define also when module 'pthread-once' is not in use. (pthread_mutex_t, pthread_mutexattr_t, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE): Define also when module 'pthread-mutex' is not in use. (pthread_rwlock_t, pthread_rwlockattr_t, PTHREAD_RWLOCK_INITIALIZER): Define also when module 'pthread-rwlock' is not in use. (pthread_cond_t, pthread_condattr_t, PTHREAD_COND_INITIALIZER): Define also when module 'pthread-cond' is not in use. (pthread_key_t, PTHREAD_DESTRUCTOR_ITERATIONS): Define also when module 'pthread-tss' is not in use. (pthread_spinlock_t): Define also when module 'pthread-spin' is not in use. 2019-07-24 Simon Josefsson crypto/gc: Cope with libgcrypt without SM3. * lib/gc-libgcrypt.c (gc_hash_open): Guard SM3 usage. 2019-07-23 Paul Eggert backupfile: fix resource leak on memory failure Problem found by Coverity (CID 1484214). * lib/backupfile.c (backupfile_internal): Don’t leak dirp. 2019-07-22 Bruno Haible Avoid missing-declarations warning in various tests. * tests/test-argp.c (fail, test1, test2, test_file, test3, test4, test5, test6, test_optional, test7, test8, test9, test10, test11, test12, test13, test14, test15, test_fun): Declare static. * tests/test-cnd.c (test_cnd_wait): Likewise. * tests/test-cond.c (test_cond): Likewise. 2019-07-22 Bernhard Voelker pthread tests: Avoid missing-declarations warning. * tests/test-pthread-cond.c (test_pthread_cond_wait): Declare static. 2019-07-19 Bruno Haible parse-datetime: Avoid warnings from bison versions >= 3.3. Reported by Bernhard Voelker . * modules/parse-datetime (Makefile.am): Don't pass option '-y' to bison. 2019-07-19 Bruno Haible parse-datetime: Require Bison 2.4 or newer. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): Set PARSE_DATETIME_BISON. Code taken from gettext's intl.m4. * modules/parse-datetime (Makefile.am): Use PARSE_DATETIME_BISON instead of YACC. 2019-07-19 Bruno Haible areadlink-with-size, xgethostname, xgetdomainname: Fix GCC warning. * lib/areadlink-with-size.c: Include . * lib/areadlinkat-with-size.c: Likewise. * lib/xgethostname.c: Likewise. * lib/xgetdomainname.c: Likewise. 2019-07-19 Bernhard Voelker parse-datetime: avoid "%pure-parser" deprecation warning from Bison 3.4 * lib/parse-datetime.y: Use "%define api.pure" rather than obsolescent "%pure-parser". The former is available since Bison 2.3b (2008), while the latter is marked as obsolete since version 3.4 (May 2019). 2019-07-16 Bruno Haible update-copyright: Make it work again (regression from 2019-06-15). Reported by Brian C. Lane . * build-aux/update-copyright: Add back the -0777, -p, -i options. 2019-07-14 Bruno Haible doc: Update info about . * doc/posix-headers/pthread.texi: Mention the module 'pthread-h' instead of 'pthread'. 2019-07-14 Bruno Haible pthread_sigmask tests: Use new multithread modules. * tests/test-pthread_sigmask2.c: Include instead of glthread/thread.h. (main_thread, killer_thread): Change type to pthread_t. (main): Update accordingly. * modules/pthread_sigmask-tests (Depends-on): Add pthread-thread. Remove thread. 2019-07-14 Bruno Haible pthread-tss: Add tests. * tests/test-pthread-tss.c: New file, based on tests/test-tls.c and tests/test-tss.c. * modules/pthread-tss-tests: New file. 2019-07-14 Bruno Haible pthread-cond: Add tests. * tests/test-pthread-cond.c: New file, based on tests/test-cond.c and tests/test-cnd.c. * modules/pthread-cond-tests: New file. 2019-07-14 Bruno Haible pthread-rwlock: Add tests. * tests/test-pthread-rwlock.c: New file, based on tests/test-lock.c. * modules/pthread-rwlock-tests: New file. 2019-07-14 Bruno Haible pthread-mutex: Add tests. * tests/test-pthread-mutex.c: New file, based on tests/test-lock.c and tests/test-mtx.c. * modules/pthread-mutex-tests: New file. 2019-07-14 Bruno Haible pthread-once: Add tests. * tests/test-pthread-once1.c: New file, based on tests/test-once.c and tests/test-call_once.c. * tests/test-pthread-once2.c: New file, based on tests/test-lock.c and tests/test-mtx.c. * modules/pthread-once-tests: New file. 2019-07-14 Bruno Haible pthread-thread: Add tests. * tests/test-pthread-thread.c: New file, based on tests/test-thread_create.c and tests/test-thrd_create.c. * modules/pthread-thread-tests: New file. 2019-07-14 Bruno Haible pthread: Turn into a convenience module. * lib/pthread.in.h: Remove declarations for extern inline functions. * lib/pthread.c: Remove file. * modules/pthread (Files): Remove it. (Depends-on): Add pthread-thread, pthread-once, pthread-mutex, pthread-rwlock, pthread-cond, pthread-tss, pthread-spin. (configure.ac): Don't compile lib/pthread.c. Don't set GNULIB_PTHREAD. * m4/pthread_h.m4 (gl_PTHREAD_H_DEFAULTS): Don't initialize GNULIB_PTHREAD. * modules/pthread-h (Makefile.am): Don't substitute GNULIB_PTHREAD. 2019-07-14 Bruno Haible pthread-spin: New module. * lib/pthread.in.h (pthread_spin_init, pthread_spin_destroy, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Remove inline definitions. * lib/pthread-spin.c: New file. * m4/pthread-spin.m4: New file. * modules/pthread-spin: New file. * doc/posix-functions/pthread_spin_init.texi: Mention the new module. * doc/posix-functions/pthread_spin_lock.texi: Likewise. * doc/posix-functions/pthread_spin_trylock.texi: Likewise. * doc/posix-functions/pthread_spin_unlock.texi: Likewise. * doc/posix-functions/pthread_spin_destroy.texi: Likewise. 2019-07-14 Bruno Haible pthread-tss: New module. * lib/pthread-tss.c: New file. * m4/pthread-tss.m4: New file. * modules/pthread-tss: New file. * doc/posix-functions/pthread_key_create.texi: Mention the new module. * doc/posix-functions/pthread_setspecific.texi: Likewise. * doc/posix-functions/pthread_getspecific.texi: Likewise. * doc/posix-functions/pthread_key_delete.texi: Likewise. 2019-07-14 Bruno Haible pthread-cond: New module. * lib/pthread.in.h (pthread_cond_destroy, pthread_cond_init, pthread_cond_signal, pthread_cond_wait): Remove inline definitions. * lib/pthread-cond.c: New file. * m4/pthread-cond.m4: New file. * modules/pthread-cond: New file. * doc/posix-functions/pthread_cond_init.texi: Mention the new module. * doc/posix-functions/pthread_condattr_init.texi: Likewise. * doc/posix-functions/pthread_condattr_destroy.texi: Likewise. * doc/posix-functions/pthread_cond_wait.texi: Likewise. * doc/posix-functions/pthread_cond_timedwait.texi: Likewise. * doc/posix-functions/pthread_cond_signal.texi: Likewise. * doc/posix-functions/pthread_cond_broadcast.texi: Likewise. * doc/posix-functions/pthread_cond_destroy.texi: Likewise. 2019-07-14 Bruno Haible pthread-rwlock: New module. * lib/pthread-rwlock.c: New file, based on lib/glthread/lock.c. * m4/pthread-rwlock.m4: New file. * modules/pthread-rwlock: New file. * doc/posix-functions/pthread_rwlock_init.texi: Mention the new module and the Android problem. * doc/posix-functions/pthread_rwlockattr_init.texi: Likewise. * doc/posix-functions/pthread_rwlockattr_destroy.texi: Likewise. * doc/posix-functions/pthread_rwlock_rdlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_wrlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_tryrdlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_trywrlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_timedrdlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_timedwrlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_unlock.texi: Likewise. * doc/posix-functions/pthread_rwlock_destroy.texi: Likewise. 2019-07-14 Bruno Haible pthread-mutex: New module. * lib/pthread.in.h (pthread_mutexattr_destroy, pthread_mutexattr_init, pthread_mutexattr_settype, pthread_mutex_destroy, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_timedlock, pthread_mutex_unlock): Remove inline definitions. * lib/pthread-mutex.c: New file. * m4/pthread-mutex.m4: New file. * modules/pthread-mutex: New file. * doc/posix-functions/pthread_mutex_init.texi: Mention the new module. * doc/posix-functions/pthread_mutexattr_init.texi: Likewise. * doc/posix-functions/pthread_mutexattr_gettype.texi: Likewise. * doc/posix-functions/pthread_mutexattr_settype.texi: Likewise. * doc/posix-functions/pthread_mutexattr_getrobust.texi: Likewise. * doc/posix-functions/pthread_mutexattr_setrobust.texi: Likewise. * doc/posix-functions/pthread_mutexattr_destroy.texi: Likewise. * doc/posix-functions/pthread_mutex_lock.texi: Likewise. * doc/posix-functions/pthread_mutex_trylock.texi: Likewise. * doc/posix-functions/pthread_mutex_timedlock.texi: Likewise. * doc/posix-functions/pthread_mutex_unlock.texi: Likewise. * doc/posix-functions/pthread_mutex_destroy.texi: Likewise. 2019-07-14 Bruno Haible pthread-once: New module. * lib/pthread-once.c: New file. * m4/pthread-once.m4: New file. * modules/pthread-once: New file. * doc/posix-functions/pthread_once.texi: Mention the new module. 2019-07-14 Bruno Haible pthread-thread: New module. * lib/pthread.in.h (pthread_create, pthread_exit, pthread_join): Remove inline definitions. * lib/pthread-thread.c: New file. * m4/pthread-thread.m4: New file. * modules/pthread-thread: New file. * doc/posix-functions/pthread_create.texi: Mention the new module. * doc/posix-functions/pthread_attr_init.texi: Likewise. * doc/posix-functions/pthread_attr_getdetachstate.texi: Likewise. * doc/posix-functions/pthread_attr_setdetachstate.texi: Likewise. * doc/posix-functions/pthread_attr_destroy.texi: Likewise. * doc/posix-functions/pthread_self.texi: Likewise. * doc/posix-functions/pthread_equal.texi: Likewise. * doc/posix-functions/pthread_detach.texi: Likewise. * doc/posix-functions/pthread_join.texi: Likewise. * doc/posix-functions/pthread_exit.texi: Likewise. 2019-07-14 Bruno Haible pthread-h: Prepare for adding new modules. * lib/pthread.in.h: Define the types and macros for each of the facilities separately. * m4/pthread_h.m4 (gl_PTHREAD_H): Set HAVE_PTHREAD_CREATE_DETACHED, HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_MUTEX_ROBUST, HAVE_PTHREAD_PROCESS_SHARED. (gl_PTHREAD_H_DEFAULTS): Initialize HAVE_PTHREAD_CREATE_DETACHED, HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_MUTEX_ROBUST, HAVE_PTHREAD_PROCESS_SHARED. * modules/pthread-h (Makefile.am): Substitute HAVE_PTHREAD_CREATE_DETACHED, HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_MUTEX_ROBUST, HAVE_PTHREAD_PROCESS_SHARED. 2019-07-14 Bruno Haible pthread-h: Add declarations of essential pthread functions. * lib/pthread.in.h: Include snippets. (pthread_create, pthread_attr_init, pthread_attr_getdetachstate, pthread_attr_setdetachstate, pthread_attr_destroy, pthread_self, pthread_equal, pthread_detach, pthread_join, pthread_exit, pthread_once, pthread_mutex_init, pthread_mutexattr_init, pthread_mutexattr_gettype, pthread_mutexattr_settype, pthread_mutexattr_getrobust, pthread_mutexattr_setrobust, pthread_mutexattr_destroy, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_mutex_destroy, pthread_rwlock_init, pthread_rwlockattr_init, pthread_rwlockattr_destroy, pthread_rwlock_rdlock, pthread_rwlock_wrlock, pthread_rwlock_tryrdlock, pthread_rwlock_trywrlock, pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock, pthread_rwlock_unlock, pthread_rwlock_destroy, pthread_cond_init, pthread_condattr_init, pthread_condattr_destroy, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, pthread_cond_broadcast, pthread_cond_destroy, pthread_key_create, pthread_setspecific, pthread_getspecific, pthread_key_delete, pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock, pthread_spin_destroy): New declarations. (pthread_mutex_timedlock): Move declaration. * m4/pthread_h.m4 (gl_PTHREAD_H): Check whether the new functions are declared. (gl_PTHREAD_H_DEFAULTS): Initialize GNULIB_PTHREAD_THREAD, GNULIB_PTHREAD_ONCE, GNULIB_PTHREAD_MUTEX, GNULIB_PTHREAD_RWLOCK, GNULIB_PTHREAD_COND, GNULIB_PTHREAD_TSS, GNULIB_PTHREAD_SPIN and the HAVE_* and REPLACE_* variables for the new functions. * modules/pthread-h (Depends-on): Add snippet/c++defs, snippet/_Noreturn, snippet/arg-nonnull, snippet/warn-on-use. (Makefile.am): Substitute GNULIB_PTHREAD_THREAD, GNULIB_PTHREAD_ONCE, GNULIB_PTHREAD_MUTEX, GNULIB_PTHREAD_RWLOCK, GNULIB_PTHREAD_COND, GNULIB_PTHREAD_TSS, GNULIB_PTHREAD_SPIN and the HAVE_* and REPLACE_* variables for the new functions. Split the sed script, to avoid the limit of 99 commands of HP-UX sed. * tests/test-pthread-c++.cc: Check the signature of the new functions. 2019-07-14 Bruno Haible pthread-h: Respect --enable-threads={posix|windows} option on mingw. * m4/pthread_h.m4 (gl_PTHREAD_H): Require gl_THREADLIB. Set HAVE_PTHREAD_H if gl_threads_api is 'windows'. (LIB_PTHREAD): Rely on $LIBMULTITHREAD from threadlib.m4. * modules/pthread (Link): Change to $(LIBMULTITHREAD). * modules/pthread-h (Depends-on): Add threadlib. (Link): Change to $(LIBTHREAD). * modules/pthread-h-c++-tests (test_pthread_c___LDADD): Use $(LIBMULTITHREAD) instead of $(LIB_PTHREAD). 2019-07-14 Bruno Haible pthread-h: Add C++ tests. * tests/test-pthread-c++.cc: New file. * modules/pthread-h-c++-tests: New file. 2019-07-14 Bruno Haible pthread-h: Add tests. * tests/test-pthread.c: New file. * modules/pthread-h-tests: New file. 2019-07-14 Bruno Haible pthread-h: New module. * lib/pthread.in.h: Define replacement functions only if GNULIB_PTHREAD is 1. * m4/pthread_h.m4: Renamed from m4/pthread.m4. (gl_PTHREAD_H): Renamed from gl_PTHREAD_CHECK. Don't test whether pollutes the namespace; instead, prepare for generating a pthread.h always. Substitute HAVE_PTHREAD_H here. (gl_PTHREAD_H_DEFAULTS): Renamed from gl_PTHREAD_DEFAULTS. Initialize GNULIB_PTHREAD. Don't initialize HAVE_PTHREAD_H here. * modules/pthread-h: New file, based on modules/pthread. * modules/pthread: Rely on 'pthread-h'. * m4/pthread_mutex_timedlock.m4 (gl_FUNC_PTHREAD_MUTEX_TIMEDLOCK): Update. * modules/pthread_mutex_timedlock (Depends-on): Add pthread-h. Remove pthread. 2019-07-14 Bruno Haible sched_yield: New module. * lib/sched.in.h: Add _GL_FUNCDECL_RPL, _GL_WARN_ON_USE placeholders. (sched_yield): New declaration. * lib/sched_yield.c: New file. * m4/sched_yield.m4: New file. * m4/sched_h.m4 (gl_SCHED_H): Require gl_SCHED_H_DEFAULTS. Arrange to provide a replacement sched.h always. Test whether sched_yield is declared. (gl_SCHED_MODULE_INDICATOR, gl_SCHED_H_DEFAULTS): New macros. * modules/sched (Depends-on): Add snippet/c++defs, snippet/warn-on-use. (Makefile.am): Provide a replacement sched.h always. Substitute GNULIB_SCHED_YIELD, HAVE_SCHED_YIELD, REPLACE_SCHED_YIELD, _GL_FUNCDECL_RPL, _GL_WARN_ON_USE. * modules/sched_yield: New file. * doc/posix-functions/sched_yield.texi: Mention the new module. 2019-07-14 Bruno Haible windows-spin: New module. * lib/windows-spin.h: New file. * lib/windows-spin.c: New file. * modules/windows-spin: New file. 2019-07-14 Bruno Haible windows-timedrwlock: New module. * lib/windows-timedrwlock.h: New file, based on windows-rwlock.h. * lib/windows-timedrwlock.c: New file, based on windows-rwlock.c and windows-cond.c. * lib/windows-cond.h (struct glwthread_waitqueue_link): Protect against redefinition conflict with windows-timedrwlock.h. * modules/windows-timedrwlock: New file. 2019-07-14 Bruno Haible windows-rwlock: New module. * lib/windows-rwlock.h: New file, extracted from lib/glthread/lock.h. * lib/windows-rwlock.c: New file, extracted from lib/glthread/lock.c. * lib/glthread/lock.h: Include windows-rwlock.h. Don't include windows-initguard.h. (gl_rwlock_t): Define using glwthread_rwlock_t. (gl_rwlock_initializer): Define using GLWTHREAD_RWLOCK_INIT. (glthread_rwlock_init): Define using glwthread_rwlock_init. (glthread_rwlock_rdlock): Define using glwthread_rwlock_rdlock. (glthread_rwlock_wrlock): Define using glwthread_rwlock_wrlock. (glthread_rwlock_unlock): Define using glwthread_rwlock_unlock. (glthread_rwlock_destroy): Define using glwthread_rwlock_destroy. (glthread_rwlock_init_func, glthread_rwlock_rdlock_func, glthread_rwlock_wrlock_func, glthread_rwlock_unlock_func, glthread_rwlock_destroy_func): Remove declarations. * lib/glthread/lock.c (gl_waitqueue_t): Remove type. (gl_waitqueue_init, gl_waitqueue_add, gl_waitqueue_notify_first, gl_waitqueue_notify_all, glthread_rwlock_init_func, glthread_rwlock_rdlock_func, glthread_rwlock_wrlock_func, glthread_rwlock_unlock_func, glthread_rwlock_destroy_func): Remove functions. * modules/windows-rwlock: New file. * modules/lock (Depends-on): Add windows-rwlock. 2019-07-14 Bruno Haible windows-thread: Add support for creating a thread in detached state. * lib/windows-thread.h (GLWTHREAD_ATTR_DETACHED): New macro. (glwthread_thread_create): Add attr argument. * lib/windows-thread.c (glwthread_thread_create): Likewise. * lib/glthread/thread.h (glthread_create): Update. * lib/thrd.c (thrd_create): Update. 2019-07-14 Bruno Haible windows-*: Rename glwthread_spinlock_t to glwthread_initguard_t. * lib/windows-initguard.h: Renamed from lib/windows-spinlock.h. (glwthread_initguard_t): Renamed from glwthread_spinlock_t. (GLWTHREAD_INITGUARD_INIT): Renamed from GLWTHREAD_SPINLOCK_INIT. * lib/windows-mutex.h: Update. * lib/windows-recmutex.h: Likewise. * lib/windows-timedmutex.h: Likewise. * lib/windows-timedrecmutex.h: Likewise. * lib/windows-cond.h: Likewise. * lib/glthread/lock.h: Likewise. * modules/windows-mutex (Files): Add lib/windows-initguard.h. Remove lib/windows-spinlock.h. * modules/windows-recmutex (Files): Likewise. * modules/windows-timedmutex (Files): Likewise. * modules/windows-timedrecmutex (Files): Likewise. * modules/windows-cond (Files): Likewise. * modules/threads-h (Files): Likewise. 2019-07-14 Bruno Haible doc: Fix info about pthread API in HP-UX. * doc/posix-functions/pthread_*.texi: Fix info about HP-UX 11. 2019-07-14 Bruno Haible threads-h: Fix generation of threads.h. * modules/threads-h (Makefile.am): Insert the required header file snippets. 2019-07-09 Bruno Haible striconveh test: Fix a compilation failure when iconv is not available. Reported by Tom G. Christensen . * tests/test-striconveh.c (main): Move iconv_close invocations inside HAVE_ICONV. 2019-07-07 Akim Demaille argmatch: adjust columns for help2man. * lib/argmatch.h (argmatch_##Name##_doc_col): If some argument requires column 20 or more, return 20. 2019-07-06 Paul Eggert areadlink-with-size: avoid realloc when size==0 * lib/areadlink-with-size.c (areadlink_with_size): * lib/areadlinkat-with-size.c (areadlinkat_with_size): Reallocate at the end to the actual size, to avoid memory waste, as suggested by Bruno Haible. But when the guessed size is zero - useful when the size is unknown - do the initial small readlink into the stack, to avoid that realloc in the usual case. 2019-07-06 Pádraig Brady areadlink-with-size: guess a buffer size with 0 size The size is usually taken from st_size, which can be zero, resulting in inefficient operation. Instead let zero select an initial memory allocation of 128 bytes, which most symlinks fit within. * lib/areadlink-with-size.c (areadlink_with_size): Start with a 128 byte buffer, for SIZE == 0. * lib/areadlinkat-with-size.c (areadlinkat_with_size): Likewise. 2019-07-06 Konstantin Kharlamov Replace manually crafted hex regexes with [:xdigit:] * build-aux/gitlog-to-changelog (parse_amend_file) (git_dir_option): Replace various combinations of [0-9a-fA-F] with [[:xdigit:]]. This patch is backported from Emacs (Bug#36167). 2019-07-06 Bruno Haible error: Fix documentation. * doc/glibc-functions/error_at_line.texi: Document what the 'error' module provides. * doc/glibc-functions/error_message_count.texi: Likewise. * doc/glibc-functions/error_one_per_line.texi: Likewise. * doc/glibc-functions/error_print_progname.texi: Likewise. 2019-07-06 Bruno Haible doc: Remove documentation of glibc <= 2.1.x as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that glibc 2.1.x and older is unsupported. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of Linux libc5 as a supported platform. * doc/posix-functions/iswalnum.texi: Don't mention workarounds specific to Linux libc5. * doc/posix-functions/iswalpha.texi: Likewise. * doc/posix-functions/iswblank.texi: Likewise. * doc/posix-functions/iswcntrl.texi: Likewise. * doc/posix-functions/iswdigit.texi: Likewise. * doc/posix-functions/iswgraph.texi: Likewise. * doc/posix-functions/iswlower.texi: Likewise. * doc/posix-functions/iswprint.texi: Likewise. * doc/posix-functions/iswpunct.texi: Likewise. * doc/posix-functions/iswspace.texi: Likewise. * doc/posix-functions/iswupper.texi: Likewise. * doc/posix-functions/iswxdigit.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. 2019-07-06 Bruno Haible doc: Remove documentation of Tandem/NSK as a supported platform. * doc/posix-headers/stdlib.texi: Don't mention workarounds specific to Tandem/NSK. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of Mac OS X <= 10.4 as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that Mac OS X 10.4 and older is unsupported. * doc/posix-functions/acosl.texi: Don't mention workarounds specific to Mac OS X 10.4 and older. * doc/posix-functions/asinl.texi: Likewise. * doc/posix-functions/atanl.texi: Likewise. * doc/posix-functions/cosl.texi: Likewise. * doc/posix-functions/expl.texi: Likewise. * doc/posix-functions/frexpl.texi: Likewise. * doc/posix-functions/gettimeofday.texi: Likewise. * doc/posix-functions/logl.texi: Likewise. * doc/posix-functions/mkstemp.texi: Likewise. * doc/posix-functions/sinl.texi: Likewise. * doc/posix-functions/sqrtl.texi: Likewise. * doc/posix-functions/tanl.texi: Likewise. * doc/posix-functions/wcswidth.texi: Likewise. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of AIX 4 as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that AIX 4 is unsupported. * doc/posix-functions/nanosleep.texi: Don't mention AIX 4 specific workarounds. * doc/posix-functions/strnlen.texi: Likewise. * doc/posix-headers/inttypes.texi: Likewise. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of HP-UX 10 as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that HP-UX 10 is unsupported. * doc/*-functions/*printf.texi: Don't mention HP-UX 10 specific workarounds. * doc/posix-functions/gmtime_r.texi: Likewise. * doc/posix-functions/localtime_r.texi: Likewise. * doc/posix-functions/mkstemp.texi: Likewise. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of Interix 3.5 as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that Interix is unsupported. * doc/posix-functions/select.texi: Don't mention Interix specific workarounds. * doc/posix-headers/signal.texi: Likewise. * doc/**/*.texi: Update. 2019-07-06 Bruno Haible doc: Remove documentation of IRIX 6.4 and older as supported platforms. * doc/gnulib-intro.texi (Target Platforms): Mention that IRIX <= 6.4 is unsupported. * doc/pastposix-functions/usleep.texi: Don't mention IRIX specific workarounds. * doc/posix-functions/nl_langinfo.texi: Likewise. * doc/posix-functions/remainder.texi: Likewise. * doc/posix-functions/towlower.texi: Likewise. * doc/posix-functions/towupper.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/wcscat.texi: Likewise. * doc/posix-functions/wcschr.texi: Likewise. * doc/posix-functions/wcscmp.texi: Likewise. * doc/posix-functions/wcscpy.texi: Likewise. * doc/posix-functions/wcscspn.texi: Likewise. * doc/posix-functions/wcslen.texi: Likewise. * doc/posix-functions/wcsncat.texi: Likewise. * doc/posix-functions/wcsncmp.texi: Likewise. * doc/posix-functions/wcsncpy.texi: Likewise. * doc/posix-functions/wcspbrk.texi: Likewise. * doc/posix-functions/wcsrchr.texi: Likewise. * doc/posix-functions/wcsspn.texi: Likewise. * doc/posix-headers/langinfo.texi: Likewise. * doc/posix-headers/signal.texi: Likewise. * doc/posix-headers/wchar.texi: Likewise. * doc/posix-headers/wctype.texi: Likewise. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible doc: Remove documentation of OSF/1 as supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that OSF/1 is unsupported. * doc/glibc-functions/getdomainname.texi: Don't mention OSF/1 specific workarounds. * doc/glibc-functions/pthread_setname_np.texi: Likewise. * doc/glibc-functions/ptsname_r.texi: Likewise. * doc/posix-functions/ceil.texi: Likewise. * doc/posix-functions/ceilf.texi: Likewise. * doc/posix-functions/ceill.texi: Likewise. * doc/posix-functions/fchdir.texi: Likewise. * doc/posix-functions/floor.texi: Likewise. * doc/posix-functions/floorf.texi: Likewise. * doc/posix-functions/fmod.texi: Likewise. * doc/posix-functions/fmodf.texi: Likewise. * doc/posix-functions/fmodl.texi: Likewise. * doc/posix-functions/log.texi: Likewise. * doc/posix-functions/logf.texi: Likewise. * doc/posix-functions/logl.texi: Likewise. * doc/posix-functions/log10.texi: Likewise. * doc/posix-functions/log10f.texi: Likewise. * doc/posix-functions/log10l.texi: Likewise. * doc/posix-functions/log2.texi: Likewise. * doc/posix-functions/log2f.texi: Likewise. * doc/posix-functions/log2l.texi: Likewise. * doc/posix-functions/mbrtowc.texi: Likewise. * doc/posix-functions/recv.texi: Likewise. * doc/posix-functions/recvfrom.texi: Likewise. * doc/posix-functions/remainder.texi: Likewise. * doc/posix-functions/remainderf.texi: Likewise. * doc/posix-functions/remainderl.texi: Likewise. * doc/posix-functions/round.texi: Likewise. * doc/posix-functions/roundf.texi: Likewise. * doc/posix-functions/roundl.texi: Likewise. * doc/posix-functions/send.texi: Likewise. * doc/posix-functions/sendto.texi: Likewise. * doc/posix-functions/setenv.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/tcgetsid.texi: Likewise. * doc/posix-functions/trunc.texi: Likewise. * doc/posix-functions/truncf.texi: Likewise. * doc/posix-functions/truncl.texi: Likewise. * doc/posix-functions/ttyname_r.texi: Likewise. * doc/posix-functions/unsetenv.texi: Likewise. * doc/posix-functions/wcsrtombs.texi: Likewise. * doc/posix-headers/sys_select.texi: Likewise. * doc/posix-headers/wchar.texi: Likewise. * doc/posix-headers/wctype.texi: Likewise. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible doc: Remove documentation of BSDI and BSD/OS as supported platforms. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible doc: Remove documentation of Solaris 8 and older as supported platforms. * doc/gnulib-intro.texi (Target Platforms): Mention that Solaris <= 8 is unsupported. * doc/posix-functions/mbrtowc.texi: Don't mention Solaris specific workarounds. * doc/posix-functions/memcmp.texi: Likewise. * doc/posix-functions/rename.texi: Likewise. * doc/posix-functions/tzset.texi: Likewise. * doc/posix-headers/wctype.texi: Likewise. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible doc: Remove documentation of Interix 3.5 as a supported platform. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible doc: Remove documentation of BeOS as a supported platform. * doc/gnulib-intro.texi (Target Platforms): Mention that BeOS is unsupported. * doc/*-functions/*printf.texi: Don't mention BeOS specific workarounds. * doc/posix-functions/getdelim.texi: Likewise. * doc/**/*.texi: Update. 2019-07-05 Bruno Haible thread, lock, cond, tls: Remove support for Pth threads. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Don't document --enable-threads=pth any more. (gl_THREADLIB_BODY): Don't set USE_PTH_THREADS any more. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Update comment. * m4/threads.m4 (gl_THREADS_H): Remove test for conflict between Pth threads and ISO C11 threads. * lib/glthread/thread.h: Remove code for USE_PTH_THREADS. * lib/glthread/lock.h: Likewise. * lib/glthread/lock.c: Likewise. * lib/glthread/cond.h: Likewise. * lib/glthread/cond.c: Likewise. * lib/glthread/tls.h: Likewise. * lib/glthread/tls.c: Likewise. * lib/glthread/yield.h: Likewise. * lib/regex_internal.h: Likewise. * tests/test-thread_create.c: Likewise. * tests/test-lock.c: Likewise. * tests/test-cond.c: Likewise. * tests/test-tls.c: Likewise. * tests/test-rwlock1.c: Don't include glthread/yield.h. (main): Sleep without calling gl_thread_yield. 2019-07-05 Bruno Haible thread, lock, cond, tls: Remove support for old Solaris threads. Solaris >= 2.5.1 has POSIX threads. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Don't document --enable-threads=solaris any more. (gl_THREADLIB_BODY): Don't set USE_SOLARIS_THREADS any more. * lib/glthread/thread.c: Update comment. * lib/glthread/thread.h: Remove code for USE_SOLARIS_THREADS. * lib/glthread/lock.h: Likewise. * lib/glthread/lock.c: Likewise. * lib/glthread/cond.h: Likewise. * lib/glthread/cond.c: Likewise. * lib/glthread/tls.h: Likewise. * lib/glthread/tls.c: Likewise. * lib/glthread/yield.h: Likewise. * lib/regex_internal.h: Likewise. * tests/test-thread_create.c: Likewise. * tests/test-lock.c: Likewise. * tests/test-cond.c: Likewise. * tests/test-tls.c: Likewise. 2019-07-05 Bruno Haible getcwd-lgpl, getcwd: Don't call realloc when it is pointless. * lib/getcwd-lgpl.c (rpl_getcwd): Don't call realloc if the result's needed size is equal to the allocated size. * lib/getcwd.c (__getcwd): Likewise. 2019-07-05 Bruno Haible xgetdomainname: Don't return an excessive memory allocation. * lib/xgetdomainname.c (xgetdomainname): Shrink the domainname buffer before returning it. 2019-07-05 Bruno Haible xgethostname: Don't return an excessive memory allocation. * lib/xgethostname.c (xgethostname): Shrink the hostname buffer before returning it. 2019-07-05 Bruno Haible areadlinkat-with-size: Don't return an excessive memory allocation. * lib/areadlinkat-with-size.c (areadlinkat_with_size): Shrink the buffer before returning it. 2019-07-05 Bruno Haible areadlink-with-size: Don't return an excessive memory allocation. Reported by Andreas Dilger . * lib/areadlink-with-size.c (areadlink_with_size): Shrink the buffer before returning it. 2019-07-03 Bruno Haible renameatu: Fix test failure on MSVC. * lib/at-func2.c (at_func2): Fail with ENOENT if file1 or file2 is the empty string. 2019-07-03 Bruno Haible mbrtowc: Fix invalid use of mbtowc() on MSVC. * lib/mbrtowc.c: Include glthread/lock.h. (mbtowc_lock): New variable. (mbrtowc): Treat UTF-8 encoding without locking. For the other encodings, explicitly reset the internal state of mbtowc, and protect this through a lock. * modules/mbrtowc (Depends-on): Add lock. 2019-07-03 Akim Demaille argmatch: don't define _ in the header. Reported by Jim Meyering. * lib/argmatch.h (N_, _): Don't define. Use gettext instead. * lib/argmatch.h (_): Define. * tests/test-argmatch.c (N_): Define. 2019-07-02 Paul Eggert verify: document ‘assume’ better * lib/verify.h: Reword doc (Bug#36370). 2019-07-02 Bruno Haible localcharset, nl_langinfo: Fix return value for UTF-8 locales on MSVC. * lib/localcharset.c (locale_charset): Return "UTF-8" instead of "CPutf8". * lib/nl_langinfo.c (ctype_codeset): Likewise. 2019-07-02 Bruno Haible getcwd: Fix crash when invoked with size = 0 on MSVC. * lib/getcwd.c: Include msvc-inval.h. (getcwd_nothrow): New function/macro. (getcwd_system): New macro. (__getcwd): Use it instead of getcwd. * modules/getcwd (Depends-on): Add msvc-inval. * doc/posix-functions/getcwd.texi: Mention the MSVC issue. 2019-07-02 Bruno Haible nonblocking-pipe tests: Fix test failure on MSVC. * tests/test-nonblocking-pipe.h (PIPE_DATA_BLOCK_SIZE): Set to 10000 on native Windows. 2019-07-02 Bruno Haible usleep: Implement with millisecond resolution on native Windows. * lib/usleep.c (usleep): On native Windows, implement using Sleep(). * doc/pastposix-functions/usleep.texi: Update accordingly. 2019-07-02 Bruno Haible lstat tests: Fix test failure on MSVC. * tests/test-lstat.h (test_lstat_func): Don't test SAME_INODE values on native Windows, unless _GL_WINDOWS_STAT_INODES is defined. 2019-07-02 Bruno Haible stat tests: Fix test failure on MSVC. * tests/test-stat.h (test_stat_func): Don't test SAME_INODE values on native Windows, unless _GL_WINDOWS_STAT_INODES is defined. 2019-07-02 Bruno Haible getaddrinfo tests: Fix test failure on MSVC. * tests/test-getaddrinfo.c: Include sockets.h. (main): Invoke gl_sockets_startup. * modules/getaddrinfo-tests (Depends-on): Add sockets. 2019-07-01 Hannes Müller poll: Fix type of timeout pointer passed to select() on mingw x86_64. * lib/poll.c: Call Windows native select() with Windows native timeval. 2019-06-30 Bruno Haible argmatch: Fix compilation errors. * lib/argmatch.h: Include , for INT_MAX. * tests/test-argmatch.c (main): Update after last-minute function names change. 2019-06-30 Bruno Haible Include when needed. * lib/cnd.c: Include , needed for abort(). * lib/fcntl.c: Likewise. * lib/mbscasestr.c: Likewise. * lib/mbssep.c: Likewise. * lib/mbsstr.c: Likewise. * lib/openat.c: Include , needed for free(). * lib/windows-tls.c: Include , needed for malloc(), free(), abort(). 2019-06-30 Bruno Haible Include when needed. * lib/areadlinkat.c: Include , needed for free() in at-func.c. * lib/faccessat.c: Likewise. * lib/fchmodat.c: Likewise. * lib/fchownat.c: Likewise. * lib/fstatat.c: Likewise. * lib/mkfifoat.c: Likewise. * lib/mknodat.c: Likewise. * lib/readlinkat.c: Likewise. * lib/symlinkat.c: Likewise. * lib/utimensat.c: Likewise. * lib/mkdirat.c: Likewise. Include also the specification header. 2019-06-30 Bruno Haible inet_ntop, inet_pton: Avoid conflict with native Windows functions. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_WS2TCPIP): New macro, extracted from gl_PREREQ_SYS_H_SOCKET. (gl_PREREQ_SYS_H_SOCKET): Invoke it. * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Invoke gl_PREREQ_SYS_H_WS2TCPIP. * modules/arpa_inet (Files): Add m4/sys_socket_h.m4, m4/socklen.m4. (Makefile.am): Substitute HAVE_WS2TCPIP_H. * lib/arpa_inet.in.h: Include . 2019-06-30 Bruno Haible inet_ntop, inet_pton: Forward-compatibility with newer Windows versions. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): On native Windows, set REPLACE_INET_NTOP to 1 always. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): On native Windows, set REPLACE_INET_PTON to 1 always. 2019-06-30 Bruno Haible inet_pton: Fix link error on mingw with _WIN32_WINNT >= 0x0600. * modules/inet_pton (Depends-on, configure.ac): Test REPLACE_INET_PTON, not REPLACE_INET_NTOP. 2019-06-30 Bruno Haible poll: Add comment. * lib/poll.c: Add comment about WSAPoll. 2019-06-30 Bruno Haible poll-h: Fix compilation error on mingw with _WIN32_WINNT >= 0x0600. Reported by Hannes Müller . * lib/poll.in.h: Include . (POLL*, pollfd): Override on native Windows. * m4/poll_h.m4 (gl_POLL_H): Invoke gl_PREREQ_SYS_H_WINSOCK2. * modules/poll-h (Files): Add m4/sys_socket_h.m4. (Makefile.am): Substitute HAVE_WINSOCK2_H. 2019-06-28 Bruno Haible accept4: Fix compilation error on OpenIndiana. Reported by Michal Nowak via Mark H Weaver . * m4/accept.m4 (gl_FUNC_ACCEPT4): Test whether accept4 is declared, not whether it exists as a function. 2019-06-26 Paul Eggert strverscmp: sync from glibc * lib/strverscmp.c: Sync from glibc, except use UTF-8 encoding in comments, include libc-config.h, define __strverscmp to be strverscmp, and don’t assume types line uint8_t and int8_t that that C99 doesn’t guarantee. [!_LIBC]: Include libc-config.h; define __strverscmp. Include stdint.h. (__strverscmp): Assume C99. Use uint_least8_t and int_least8_t instead of unsigned char and signed char. * modules/strverscmp (Depends-on): Add libc-config, stdint. 2019-06-25 Bruno Haible tss tests: Add tests for destructors and races. * tests/test-tss.c (worker_thread): Fix typo in debug message. (test_tss_dtorcheck1, test_tss_dtorcheck2, test_tss_racecheck): New functions. (main): Invoke them. * modules/tls-tests (Depends-on): Add mtx. 2019-06-25 Bruno Haible tls tests: Add tests for destructors and races. * tests/test-tls.c: Include glthread/lock.h. (test_tls_dtorcheck1, test_tls_dtorcheck2, test_tls_racecheck): New functions. (main): Invoke them. * modules/tls-tests (Depends-on): Add lock. 2019-06-25 Bruno Haible windows-tls: Implement TLS key destructors for native Windows. * lib/windows-tls.h (glwthread_tls_process_destructors): New declaration. (GLWTHREAD_DESTRUCTOR_ITERATIONS): New macro. * lib/windows-tls.c: Include , windows-once.h. (dtor_table_init_once, dtor_table_lock: New variables. (struct dtor): New type. (dtor_table, dtors_count, dtors_used, dtors_allocated, dtor_processing_threads): New variables. (dtor_table_initialize, dtor_table_ensure_initialized, dtor_table_shrink_used, glwthread_tls_process_destructors): New functions. (glwthread_tls_key_create, glwthread_tls_key_delete): Rewritten to handle non-NULL destructors. * modules/windows-tls (Depends-on): Add windows-once. * lib/glthread/tls.h (glthread_tls_key_init, glthread_tls_key_destroy): Use the functions declared in windows-tls.h. * lib/threads.in.h (TSS_DTOR_ITERATIONS): Define using GLWTHREAD_DESTRUCTOR_ITERATIONS. * lib/windows-thread.c: Include windows-tls.h. (wrapper_func, glwthread_thread_exit): Invoke glwthread_tls_process_destructors. * modules/windows-thread (Depends-on): Add windows-tls. 2019-06-25 Bruno Haible threadlib: Avoid autoconf warning "was expanded before it was required". * modules/threadlib (configure.ac): Require gl_THREADLIB. 2019-06-25 Akim Demaille argmatch: remove duplicate const qualifier * lib/argmatch.h (ARGMATCH_DEFINE_GROUP): Here. 2019-06-24 Paul Eggert unistd: stddef.h and sys/types.h namespace cleanup * lib/unistd.in.h [__GLIBC__]: Do not include stddef.h or sys/types.h. [!__GLIBC__]: Always include sys/types.h, since unistd.h is supposed to declare off_t and ssize_t. Problem found when looking at why @GNULIB_PWRITE@ was different from the newly-added @GNULIB_COPY_FILE_RANGE@ with respect to ssize_t. 2019-06-22 Akim Demaille maintainer-makefile: restore portability to non-GNU awks Reported by Tim Rühsen. * top/maint.mk (AWK): New variable. Use it. (sc_prohibit_gnu_make_extensions): Skip if $(AWK) is not gawk. 2019-06-23 Paul Eggert Document setvbuf _IOLBF problem * doc/posix-functions/setvbuf.texi (setvbuf): Document MS-Windows portability problem with _IOLBF. Document lseek SEEK_DATA/SEEK_HOLE * doc/posix-functions/lseek.texi (lseek): Document some systems that do not support SEEK_DATA and SEEK_HOLE. 2019-06-22 Akim Demaille argmatch: put all the docs member last. Reported by Bruno Haible. * lib/argmatch.h (argmatch_##Name##_group_type): Put the args member before the docs done. * doc/argmatch.texi, tests/test-argmatch.c: Adjust. 2019-06-21 Akim Demaille argmatch: add support to generate the usage message. * lib/argmatch.c: Move some #includes and gettext support to... * lib/argmatch.h: here. (ARGMATCH_DEFINE_GROUP): New macro. * tests/test-argmatch.c (argmatch_backup_docs, argmatch_backup_args) (argmatch_backup_group): New. (CHECK): New. (main): Check argmatch_backup_value, argmatch_backup_xvalue, argmatch_backup_argument and argmatch_backup_usage. * modules/argmatch: We depend on c99. * doc/argmatch.texi (Recognizing Option Arguments): New. * doc/gnulib.texi: Use it. 2019-06-21 Bruno Haible thrd: Add comment. * lib/thrd.c (pthread_main_func): Add comment. 2019-06-21 Bruno Haible threads-h: Define 'thread_local' if and only if it actually works. * m4/threads.m4 (gl_THREAD_LOCAL_DEFINITION): New macro. (gl_THREADS_H): Define _Thread_local to __thread also for ARM C, IBM C, Oracle Solaris Studio C. Compile a simple program, to see whether _Thread_local basically works. Set HAVE_THREAD_LOCAL and LIBTHREADLOCAL. (gl_THREADS_H_DEFAULTS): Initialize HAVE_THREAD_LOCAL. * lib/threads.in.h (thread_local): Undefine if it does not work. * modules/threads-h (Makefile.am): Substitute HAVE_THREAD_LOCAL. (Link): Mention LIBTHREADLOCAL. * tests/test-threads.c: Don't check that thread_local is defined. * tests/test-thread_local.c: New file. * modules/threads-h-tests (Files): Add it and macros.h. (Depends-on): Add thrd and stdint. (configure.ac): Test whether 'alarm' is declared. (Makefile.am): Arrange to build and link test-thread_local. * doc/posix-headers/threads.texi: Mention the platforms that don't support 'thread_local'. 2019-06-20 Bruno Haible threads-h: Simplify link dependencies. * m4/threads.m4 (gl_THREADS_H): Bail out if Pth threading is requested. Don't set LTLIBSTDTHREAD. * modules/thrd (Link): Simplify accordingly. * modules/mtx (Link): Likewise. * modules/cnd (Link): Likewise. * modules/tss (Link): Likewise. * modules/threads (Link): Likewise. 2019-06-20 Bruno Haible threads-h: Fix link error on FreeBSD 11. * m4/threads.m4 (gl_THREADS_H): When linking with -lstdthreads, link also with -lpthread. 2019-06-20 Bruno Haible threadlib: Fix typo (regression from today). * m4/threadlib.m4 (gl_THREADLIB_BODY): Fix typo in comment marker. 2019-06-20 Bruno Haible windows-thread, windows-tls: Fix compilation error on 32-bit mingw. * lib/windows-thread.c: Include . * lib/windows-tls.c: Likewise. 2019-06-20 Bruno Haible tss tests: Small improvement. * tests/test-tss.c (test_tss): Pass a different id to each thread. 2019-06-20 Bruno Haible threads: New module. * modules/threads: New file. 2019-06-20 Bruno Haible tss: Add tests. * tests/test-tss.c: New file, based on tests/test-tls.c. * modules/tss-tests: New file. 2019-06-20 Bruno Haible cnd: Add tests. * tests/test-cnd.c: New file, based on tests/test-cond.c. * modules/cnd-tests: New file. 2019-06-20 Bruno Haible mtx: Add tests. * tests/test-mtx.c: New file, based on tests/test-lock.c. * tests/test-call_once.c: New file, based on tests/test-once.c. * modules/mtx-tests: New file. 2019-06-20 Bruno Haible thrd: Add tests. * tests/test-thrd_create.c: New file, based on tests/test-thread_create.c. * tests/test-thrd_current.c: New file, based on tests/test-thread_self.c. * modules/thrd-tests: New file. 2019-06-20 Bruno Haible tss: New module. * lib/tss.c: New file. * modules/tss: New file. * doc/posix-functions/tss_create.texi: Mention the new module. * doc/posix-functions/tss_set.texi: Likewise. * doc/posix-functions/tss_get.texi: Likewise. * doc/posix-functions/tss_delete.texi: Likewise. 2019-06-20 Bruno Haible cnd: New module. * lib/cnd.c: New file. * modules/cnd: New file. * doc/posix-functions/cnd_init.texi: Mention the new module. * doc/posix-functions/cnd_wait.texi: Likewise. * doc/posix-functions/cnd_timedwait.texi: Likewise. * doc/posix-functions/cnd_signal.texi: Likewise. * doc/posix-functions/cnd_broadcast.texi: Likewise. * doc/posix-functions/cnd_destroy.texi: Likewise. 2019-06-20 Bruno Haible mtx: New module. * lib/mtx.c: New file. * modules/mtx: New file. * doc/posix-functions/call_once.texi: Mention the new module. * doc/posix-functions/mtx_init.texi: Likewise. * doc/posix-functions/mtx_lock.texi: Likewise. * doc/posix-functions/mtx_trylock.texi: Likewise. * doc/posix-functions/mtx_timedlock.texi: Likewise. * doc/posix-functions/mtx_unlock.texi: Likewise. * doc/posix-functions/mtx_destroy.texi: Likewise. 2019-06-20 Bruno Haible thrd: New module. * lib/thrd.c: New file. * m4/thrd.m4: New file. * modules/thrd: New file. * doc/posix-functions/thrd_current.texi: Mention the new module. * doc/posix-functions/thrd_detach.texi: Likewise. * doc/posix-functions/thrd_equal.texi: Likewise. * doc/posix-functions/thrd_exit.texi: Likewise. * doc/posix-functions/thrd_sleep.texi: Likewise. * doc/posix-functions/thrd_yield.texi: Likewise. * doc/posix-functions/thrd_create.texi: Mention the new module and the AIX bug. * doc/posix-functions/thrd_join.texi: Mention the new module and the AIX and Solaris bugs. 2019-06-20 Bruno Haible threads-h: Add tests. * tests/test-threads.c: New file. * modules/threads-h-tests: New file. * tests/test-threads-c++.cc: New file. * modules/threads-h-c++-tests: New file. 2019-06-20 Bruno Haible threads-h: New module. * lib/threads.in.h: New file. * m4/threads.m4: New file. * m4/yield.m4 (gl_YIELD): Update comment. * modules/threads-h: New file. * modules/yields (configure.ac): Use AC_REQUIRE. * doc/posix-headers/threads.texi: Mention the new module and the AIX bugs. 2019-06-20 Bruno Haible windows-thread: New module. * lib/windows-thread.h: New file, based on lib/glthread/thread.h. * lib/windows-thread.c: New file, based on lib/glthread/thread.c. * lib/glthread/thread.h: Include windows-thread.h. (gl_thread_t): Define using glwthread_thread_t. (glthread_create): Define using glwthread_thread_create. (glthread_join): Define using glwthread_thread_join. (gl_thread_self): Define using glwthread_thread_self. (gl_thread_exit): Define using glwthread_thread_exit. (glthread_create_func, glthread_join_func, gl_thread_self_func, gl_thread_exit_func): Remove declarations. * lib/glthread/thread.c (self_key): Remove variable. (do_init_self_key, init_self_key): Remove functions. (struct gl_thread_struct): Remove type. (get_current_thread_handle, gl_thread_self_func, wrapper_func, glthread_create_func, glthread_join_func, gl_thread_exit_func): Remove functions. * modules/windows-thread: New file. * modules/thread (Depends-on): Add windows-thread. 2019-06-20 Bruno Haible windows-tls: New module. * lib/windows-tls.h: New file, based on lib/glthread/tls.h. * lib/windows-tls.c: New file, based on lib/glthread/tls.h. * lib/glthread/tls.h: Include windows-tls.h. (gl_tls_key_t): Define using glwthread_tls_key_t. * modules/windows-tls: New file. * modules/tls (Depends-on): Add windows-tls. 2019-06-20 Bruno Haible windows-cond: New module. * lib/windows-cond.h: New file, based on lib/glthread/cond.h. * lib/windows-cond.c: New file, based on lib/glthread/cond.c. * lib/glthread/cond.h: Include windows-cond.h. (struct gl_waitqueue_link, gl_linked_waitqueue_t): Remove types. (gl_cond_t): Define using glwthread_cond_t. (gl_cond_initializer): Define using GLWTHREAD_COND_INIT. (glthread_cond_init): Define using glwthread_cond_init. (glthread_cond_wait): Define using glwthread_cond_wait. (glthread_cond_timedwait): Define using glwthread_cond_timedwait. (glthread_cond_signal): Define using glwthread_cond_signal. (glthread_cond_broadcast): Define using glwthread_cond_broadcast. (glthread_cond_destroy): Define using glwthread_cond_destroy. (glthread_cond_init_func, glthread_cond_wait_func, glthread_cond_timedwait_func, glthread_cond_signal_func, glthread_cond_broadcast_func, glthread_cond_destroy_func): Remove declarations. * lib/glthread/cond.c (gl_waitqueue_t, gl_waitqueue_element): Remove types. (gl_waitqueue_init, gl_waitqueue_add, gl_waitqueue_remove, gl_waitqueue_notify_first, gl_waitqueue_notify_all, glthread_cond_init_func, glthread_cond_wait_func, glthread_cond_timedwait_func, glthread_cond_signal_func, glthread_cond_broadcast_func, glthread_cond_destroy_func): Remove functions. * modules/windows-cond: New file. * modules/cond (Depends-on): Add windows-cond. Remove gettimeofday. 2019-06-20 Bruno Haible windows-timedrecmutex: New module. * lib/windows-timedrecmutex.h: New file, based on windows-recmutex.h. * lib/windows-timedrecmutex.c: New file, based on windows-recmutex.c. * modules/windows-timedrecmutex: New file. 2019-06-20 Bruno Haible windows-timedmutex: New module. * lib/windows-timedmutex.h: New file, based on windows-mutex.h. * lib/windows-timedmutex.c: New file, based on windows-mutex.c. * modules/windows-timedmutex: New file. 2019-06-20 Bruno Haible windows-recmutex: New module. * lib/windows-recmutex.h: New file, extracted from lib/glthread/lock.h. * lib/windows-recmutex.c: New file, extracted from lib/glthread/lock.c. * lib/glthread/lock.h: Include windows-recmutex.h. (gl_recursive_lock_t): Define using glwthread_recmutex_t. (gl_recursive_lock_initializer): Define using GLWTHREAD_RECMUTEX_INIT. (glthread_recursive_lock_init): Define using glwthread_recmutex_init. (glthread_recursive_lock_lock): Define using glwthread_recmutex_lock. (glthread_recursive_lock_unlock): Define using glwthread_recmutex_unlock. (glthread_recursive_lock_destroy): Define using glwthread_recmutex_destroy. (glthread_recursive_lock_init_func, glthread_recursive_lock_lock_func, glthread_recursive_lock_unlock_func, glthread_recursive_lock_destroy_func): Remove declarations. * lib/glthread/lock.c (glthread_recursive_lock_init_func, glthread_recursive_lock_lock_func, glthread_recursive_lock_unlock_func, glthread_recursive_lock_destroy_func): Remove functions. * modules/windows-recmutex: New file. * modules/lock (Depends-on): Add windows-recmutex. 2019-06-20 Bruno Haible windows-mutex: New module. * lib/windows-mutex.h: New file, extracted from lib/glthread/lock.h. * lib/windows-mutex.c: New file, extracted from lib/glthread/lock.c. * lib/windows-spinlock.h: New file, extracted from lib/glthread/lock.h. * lib/glthread/lock.h: Include windows-spinlock.h, windows-mutex.h. (gl_spinlock_t): Remove type. (gl_lock_t): Define using glwthread_mutex_t. (gl_lock_initializer): Define using GLWTHREAD_MUTEX_INIT. (glthread_lock_init): Define using glwthread_mutex_init. (glthread_lock_lock): Define using glwthread_mutex_lock. (glthread_lock_unlock): Define using glwthread_mutex_unlock. (glthread_lock_destroy): Define using glwthread_mutex_destroy. (glthread_lock_init_func, glthread_lock_lock_func, glthread_lock_unlock_func, glthread_lock_destroy_func): Remove declarations. Use glwthread_spinlock_t instead of gl_spinlock_t. (gl_rwlock_initializer, gl_recursive_lock_initializer): Define using GLWTHREAD_SPINLOCK_INIT. * lib/glthread/lock.c (glthread_lock_init_func, glthread_lock_lock_func, glthread_lock_unlock_func, glthread_lock_destroy_func): Remove functions. * lib/glthread/cond.h: Use glwthread_spinlock_t instead of gl_spinlock_t. * modules/windows-mutex: New file. * modules/lock (Depends-on): Add windows-mutex. 2019-06-20 Bruno Haible windows-once: New module. * lib/windows-once.h: New file, extracted from lib/glthread/lock.h. * lib/windows-once.c: New file, extracted from lib/glthread/lock.c. * lib/glthread/lock.h: Include windows-once.h. (gl_once_t): Define using glwthread_once_t. (gl_once_define): Define using GLWTHREAD_ONCE_INIT. (glthread_once): Define using glwthread_once. (glthread_once_func): Remove declaration. * lib/glthread/lock.c (glthread_once_func): Remove function. * modules/windows-once: New file. * modules/lock (Depends-on): Add windows-once. 2019-06-20 Bruno Haible lock, cond: Avoid possible counter wraparound on Windows. * lib/glthread/lock.c (glthread_lock_lock_func): Leave the 'started' field of the guard unchanged if it was already positive. (glthread_rwlock_rdlock_func): Likewise. (glthread_rwlock_wrlock_func): Likewise. (glthread_recursive_lock_lock_func): Likewise. * lib/glthread/cond.c (glthread_cond_wait_func): Likewise. (glthread_cond_timedwait_func): Likewise. 2019-06-20 Bruno Haible cond: Make glthread_cond_timedwait more reliable on Windows. * lib/glthread/cond.c (glthread_cond_timedwait_func): Initialize the condition variable before looking at the current time. 2019-06-20 Bruno Haible pthread_mutex_timedlock: New module. * lib/pthread.in.h (pthread_mutex_timedlock): New dummy function and new declaration. * lib/pthread_mutex_timedlock.c: New file. * m4/pthread_mutex_timedlock.m4: New file. * m4/pthread.m4 (gl_PTHREAD_CHECK): Don't call AC_LIBOBJ here. Test whether pthread_mutex_timedlock is declared. (gl_PTHREAD_MODULE_INDICATOR): New macro. (gl_PTHREAD_DEFAULTS): Initialize GNULIB_PTHREAD_MUTEX_TIMEDLOCK, HAVE_PTHREAD_MUTEX_TIMEDLOCK. * modules/pthread (configure.ac): Call AC_LIBOBJ here. (Makefile.am): Substitute GNULIB_PTHREAD_MUTEX_TIMEDLOCK, HAVE_PTHREAD_MUTEX_TIMEDLOCK. * modules/pthread_mutex_timedlock: New file. * doc/posix-functions/pthread_mutex_timedlock.texi: Mention the new module. 2019-06-20 Bruno Haible thread, lock, cond, tls: Recognize C11 multithreaded applications. * m4/threadlib.m4 (gl_THREADLIB_BODY): Test for . * lib/glthread/thread.h (c11_threads_in_use): New macro. (pthread_in_use, pth_in_use, thread_in_use): Use it. * lib/glthread/lock.h (c11_threads_in_use): New macro. (pthread_in_use, pth_in_use, thread_in_use): Use it. * lib/glthread/cond.h (c11_threads_in_use): New macro. (pthread_in_use, pth_in_use, thread_in_use): Use it. * lib/glthread/tls.h (c11_threads_in_use): New macro. (pthread_in_use, pth_in_use, thread_in_use): Use it. 2019-06-20 Bruno Haible tls tests: Small improvements. * tests/test-tls.c: Include . (worker_thread): Avoid gcc warning on 64-bit mingw. (test_tls): Pass a different id to each thread. * modules/tls-tests (Depends-on): Add stdint. 2019-06-20 Bruno Haible cond tests: Simplify. * tests/test-cond.c (test_timedcond): Remove redundant assignment. 2019-06-20 Bruno Haible lock tests: Avoid reference to undefined variable if !ENABLE_LOCKING. * tests/test-lock.c (test_once): Don't reference fire_signal if !ENABLE_LOCKING. 2019-06-19 Bruno Haible nanosleep: Relicense under LGPLv2+. Approved by Jim Meyering, Paul Eggert, Eric Blake, Pádraig Brady. * modules/nanosleep (License): Change to LGPLv2+. 2019-06-19 Bruno Haible Reorder pieces of header in perl scripts. The desired order is - Prologue part 1 (2 lines with #!) - Program short description - Copyright and license notice - Written-by notice - Program short description (optional) - Program long description (optional) - Prologue part 2 - Time stamp - Code Reported by Paul Eggert. * build-aux/announce-gen: Reorder header. * build-aux/gitlog-to-changelog: Likewise. * build-aux/useless-if-before-free: Likewise. * build-aux/prefix-gnulib-mk: Add copyright notice and short description. * build-aux/update-copyright: Likewise. Add short description. Bump time-stamp-line-limit to 200. 2019-06-18 Paul Eggert verify-tests: work around xlc bug Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2019-06/msg00049.html * tests/test-verify.c (item): Move the arithmetic inside the verify_expr, to avoid tickling a bug in IBM AIX xlc V12.1. 2019-06-16 Bruno Haible Restore Emacs time-stamp hook applicability. Reported by Darshit Shah . * build-aux/useless-if-before-free: Bump time-stamp-line-limit to 50. * build-aux/announce-gen: Likewise. * build-aux/gitlog-to-changelog: Likewise. * build-aux/prefix-gnulib-mk: Likewise. * build-aux/update-copyright: Likewise. 2019-06-15 Bruno Haible Fix scripts to have valid executable format on Alpine Linux. Reported by Tim Rühsen . Idea by Paul Eggert. * build-aux/useless-if-before-free: Use a prologue that starts with '#!/bin/sh'. * build-aux/announce-gen: Likewise. * build-aux/gitlog-to-changelog: Likewise. * build-aux/prefix-gnulib-mk: Likewise. * build-aux/update-copyright: Likewise. * tests/test-update-copyright.sh: Update test program accordingly. 2019-06-10 Bruno Haible nproc: Ensure nproc(NPROC_ALL) ≥ nproc(NPROC_CURRENT) with glibc ≥ 2.26. Reported by Nikita Ermakov in . * lib/nproc.c (num_processors_ignoring_omp): Treat a return value of sysconf (_SC_NPROCESSORS_CONF) == 2 like a return value == 1. 2019-06-10 Bruno Haible posix_spawn_file_actions_addchdir: Fix possible use-after-free bug. * lib/spawn_int.h (struct __spawn_action): Remove 'const' from path. * lib/spawn_faction_addchdir.c (posix_spawn_file_actions_addchdir): Make a copy of the path argument. * lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy): Free it. 2019-06-10 Bruno Haible posix_spawn_file_actions_addopen: Fix possible use-after-free bug. Reported at . * lib/spawn_int.h (struct __spawn_action): Remove 'const' from path. * lib/spawn_faction_addopen.c (posix_spawn_file_actions_addopen): Make a copy of the path argument. * lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy): Free it. 2019-06-10 Bruno Haible posix_spawn_file_actions_addfchdir: Add tests. * tests/test-posix_spawn_file_actions_addfchdir.c: New file. * tests/test-posix_spawn5.c: New file. * modules/posix_spawn_file_actions_addfchdir-tests: New file. 2019-06-10 Bruno Haible posix_spawn_file_actions_addfchdir: New module. * lib/spawn.in.h (posix_spawn_file_actions_addfchdir): New declaration. * lib/spawn_int.h (struct __spawn_action): Add tag 'spawn_do_fchdir' and union member 'fchdir_action'. * lib/spawn_faction_addfchdir.c: New file. * lib/spawni.c (__spawni): Implement the spawn_do_fchdir action. * m4/posix_spawn_faction_addfchdir.m4: New file. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Test whether module 'posix_spawn_file_actions_addfchdir' is present and whether posix_spawn_file_actions_addfchdir_np exists. Set REPLACE_POSIX_SPAWN. * m4/spawn_h.m4 (gl_SPAWN_H): Test whether posix_spawn_file_actions_addfchdir is declared. (gl_SPAWN_H_DEFAULTS): Initialize GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR, HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR, REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR. * modules/spawn (Makefile.am): Substitute GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR, HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR, REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR. * modules/posix_spawn_file_actions_addfchdir: New file. * tests/test-spawn-c++.cc (posix_spawn_file_actions_addfchdir): Check signature. * doc/posix-functions/posix_spawn.texi: Mention the new module. * doc/posix-functions/posix_spawnp.texi: Likewise. * doc/glibc-functions/posix_spawn_file_actions_addfchdir_np.texi: Likewise. 2019-06-10 Bruno Haible doc: Document existence of posix_spawn_file_actions_addchdir module. * doc/glibc-functions/posix_spawn_file_actions_addchdir_np.texi: Mention the posix_spawn_file_actions_addchdir module. 2019-06-10 Bruno Haible posix_spawn-internal: Fix module description. * modules/posix_spawn (configure.ac): Move request to compile spawni.c from here... * modules/posix_spawnp (configure.ac): ... and here... * modules/posix_spawn-internal (configure.ac): ... to here. 2019-06-10 Bruno Haible doc: Update and improve documentation of glibc functions. This is a series of commits that - updates the documentation to the state of glibc 2.29, - adds references to Linux man pages and glibc documentation, - marks Linux specific functions as such. These are the commits: doc: Update after removal of crypt functions from glibc 2.28. doc: Remove mention of function vm86 (does not exist on x86_64). doc: Remove mention of functions that are gone from glibc. doc: Mention that glibc no longer provides h_errno. doc: Mention the availability of specific functions in glibc versions. doc: Mention eaccess. doc: Add references to Linux man pages. doc: Add references to glibc documentation. doc: Mention inotify_* functions. doc: Mention ppoll. doc: Mention sched_getcpu. doc: Mention sync_file_range. doc: Mention epoll_pwait. doc: Mention eventfd, eventfd_read, eventfd_write. doc: Mention signalfd. doc: Mention timerfd_create, timerfd_gettime, timerfd_settime. doc: Mention epoll_create1. doc: Mention getauxval. doc: Mention pthread_getattr_default_np, pthread_setattr_default_np. doc: Mention nextdown, nextup. doc: Mention more ISO TS 18661-1 functions. doc: Mention ISO TS 18661-1 functions. doc: Mention getrandom, getentropy. doc: Mention strfromf, strfromd, strfroml. doc: Mention preadv2, pwritev2. doc: Mention copy_file_range. doc: Mention memfd_create. doc: Mention mlock2. doc: Mention pkey_alloc, pkey_set, pkey_get, pkey_free, pkey_mprotect. doc: Mention more ISO TS 18661-1 functions. doc: Mention renameat2. doc: Mention statx. doc: Mention the ISO C11 multithreading header and functions. doc: Mention getcpu. doc: Mention posix_spawn_file_actions_add[f]chdir_np. doc: Some glibc functions also exist on IRIX 6.5 in 32-bit mode. doc: Some glibc functions also exist on FreeBSD, AIX, HP-UX, Solaris 11. doc: Some glibc functions also exist on FreeBSD, Solaris 11. doc: Some glibc functions also exist on Solaris 11. doc: Some glibc functions also exist on Solaris 11.4. doc: Some glibc functions also exist on FreeBSD. doc: Some glibc functions also exist on BeOS. doc: Some glibc functions also exist on Haiku. doc: Mark functions which exist only on Linux. doc: Mark functions which exist only on Linux and illumos. 2019-06-06 Paul Eggert copy-file: fix typo * lib/copy-file.c (qcopy_file_preserving): Remove unused label. copy-file-range: simplify into a stub Based on a comment by Florian Weimer in: https://lists.gnu.org/r/bug-gnulib/2019-06/msg00007.html It turns out that Emacs (which will use this module) won’t need an emulation and I suspect other programs won’t either, because these programs will need to fall back on read+write anyway. Perhaps I am wrong and other programs will be able to use an emulation; if so, this patch can be reverted. * lib/copy-file-range.c (COPY_FILE_RANGE): Replace with a stub. Just call it copy_file_range. * m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE): Check via AC_LINK_IFELSE. * modules/copy-file-range (Depends-on): Remove modules no longer used. 2019-06-04 Paul Eggert copy-file: prefer copy_file_range * lib/copy-file.c: Do not include xalloc.h. (qcopy_file_preserving): Allocate a buffer only if copy_file_range does not suffice. If the allocation fails don't give up; just use a small stack-based buffer. Prefer copy_file_range if it works. * modules/copy-file (Depends-on): Add copy-file-range. Remove xalloc. copy-file-range: new module * MODULES.html.sh: Add copy-file-range. * lib/copy-file-range.c, m4/copy-file-range.m4: * modules/copy-file-range: New files. * lib/unistd.in.h (copy_file_range): Declare. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set up GNULIB_COPY_FILE_RANGE and HAVE_COPY_FILE_RANGE. * modules/unistd (unistd.h): Substitute them. 2019-05-28 Bruno Haible binary-io: Attempted use of O_BINARY on consoles no longer fails. Reported by KO Myung-Hun in . * lib/binary-io.h (__gl_setmode_check): Remove function. (set_binary_mode): Declare as notinline on DJGPP and EMX. * lib/binary-io.c (__gl_setmode_check): Remove function. (set_binary_mode): Define here on DJGPP and EMX. Inline __gl_setmode_check. In case of a tty, don't return an error code. 2019-05-28 James Youngman dirent-safer: Make opendir_safer usable from C++. * lib/dirent-safer.h: use extern "C". 2019-05-28 James Youngman canonicalize: Make canonicalize_filename_mode usable from C++. * lib/canonicalize.h: use extern "C". 2019-05-26 Akim Demaille prefix-gnulib-mk: Fix CPPFLAGS migration. * build-aux/prefix-gnulib-mk (prefix_assignment): Don't forget the _a part of the library name. 2019-05-24 Paul Eggert flexmember: update comments again * lib/flexmember.h, m4/flexmember.m4: Improve comments further. flexmember: update comment * m4/flexmember.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER): Improve comment. 2019-05-20 Bruno Haible setlocale: Improve fallback on macOS. * lib/setlocale.c (search): Optimize away a redundant strcmp() invocation. (locales_with_principal_territory): New array. (langcmp, get_main_locale_with_same_language): New functions. (locales_with_principal_language): New array. (terrcmp, get_main_locale_with_same_territory): New functions. (rpl_setlocale): When setlocale_single failed, try again with a locale that is more likely to exist. Don't warn if the environment variable SETLOCALE_VERBOSE is not set. 2019-05-19 Bruno Haible localename: Fix default on macOS. * m4/intlmacosx.m4 (gt_INTL_MACOSX): Don't test for CFLocaleCopyCurrent. * lib/localename.c: Remove includes for HAVE_CFLOCALECOPYCURRENT. (gl_locale_name_environ, gl_locale_name_default): Remove code for HAVE_CFLOCALECOPYCURRENT. * lib/localename.h (gl_locale_name_default): Update. 2019-05-19 Karl Berry * config/srclistvars.sh (TEXINFOTEX): make ftp.gnu.org be the source for texinfo.tex, replacing TEXINFOSRC, per Texinfo maintainer. * config/srclist.txt (texinfo.tex): use it. (Also doc changes.) 2019-05-18 Akim Demaille maintainer-makefile: catch uses of $< in non-implicit rules * top/maint.mk (sc_prohibit_magic_number_exit): New. 2019-05-18 Bruno Haible threadlib: Provide an easy way to avoid mingw's winpthreads library. * m4/threadlib.m4 (gl_AVOID_WINPTHREAD): New macro. (gl_THREADLIB_EARLY_BODY): Recognize when it was invoked, and set gl_use_threads accordingly. 2019-05-18 Bruno Haible pthread_sigmask: Fix compilation error with --enable-threads=windows. Reported by Tim Rühsen in and Michele Locati in . * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Revert change from 2015-06-01. Test whether pthread_sigmask is a macro, regardless of $LIBMULTITHREAD. Consider it regardless whether module 'threadlib' is in use and regardless which threads API is chosen. 2019-05-14 Paul Eggert close-stream, closein, closeout: simplify I noticed this opportunity for simplification while drafting a new, related module that I haven’t had time to finish yet. * m4/close-stream.m4, m4/closein.m4, m4/closeout.m4: Remove. * modules/close-stream (Files): Remove m4/close-stream.m4. (configure.ac): Omit gl_CLOSE_STREAM. * modules/closein (Files): Remove m4/closein.m4 (configure.ac): Omit gl_CLOSEIN. * modules/closeout (Files): Remove m4/closeout.m4. (configure.ac): Omit gl_CLOSEOUT. 2019-05-12 Bruno Haible libtool-next-version: New program. * build-aux/libtool-next-version: New file. 2019-05-11 John Darrington Bruno Haible version-etc: Ease translation. * lib/version-etc.c (version_etc_arn, emit_bug_reporting_address): Move URLs and formatting newlines out of translatable string. 2019-05-11 Bruno Haible gnupload: Explain how to create symlinks. * build-aux/gnupload (usage): Add an example that creates symlinks. 2019-05-11 Paul Eggert fpucw: port to gcc -pedantic * lib/fpucw.h (GET_FPUCW, SET_FPUCW): Use __extension__ if using ({ ... }). crypto/af_alg: port to strict C compilers * lib/af_alg.c: Include af_alg.h regardless, so that the compilation unit is nonempty. 2019-05-10 Bruno Haible base64: Avoid false positive warning from Coverity. Reported by Kamil Dudka . Idea by Paul Eggert. * lib/base64.c (base64_encode_fast, base64_encode): Add a no-op '& 0x3f' to the array index expressions. This convinces Coverity that there is no out-of-bounds array reference, regardless of the input. 2019-05-09 Bruno Haible gettext: Update to gettext 0.20. * modules/gettext (Files): Remove m4/codeset.m4, m4/fcntl-o.m4, m4/glibc2.m4, m4/glibc21.m4, m4/intdiv0.m4, m4/intl.m4, m4/intldir.m4, m4/intmax.m4, m4/inttypes_h.m4, m4/inttypes-pri.m4, m4/lcmessage.m4, m4/lock.m4, m4/longlong.m4, m4/printf-posix.m4, m4/size_max.m4, m4/stdint_h.m4, m4/threadlib.m4, m4/uintmax_t.m4, m4/visibility.m4, m4/wchar_t.m4, m4/wint_t.m4, m4/xsize.m4. Add m4/host-cpu-c-abi.m4. (configure.ac): Request infrastructure compatible with gettext 0.20. * m4/glibc2.m4: Remove file. * m4/intdiv0.m4: Remove file. * m4/intl.m4: Remove file. * m4/intldir.m4: Remove file. * m4/intmax.m4: Remove file. * m4/printf-posix.m4: Remove file. * m4/uintmax_t.m4: Remove file. * m4/gettext.m4: Update from gettext 0.20. * m4/po.m4: Likewise. 2019-05-09 Paul Eggert verify: remove verify_true * NEWS: Mention this. * lib/verify.h (verify_true): Remove. * tests/test-verify.c (item): Test verify_expr, not verify_true. Support C2x and C++17 static_assert C2x and C++17 finally added support for a simple, single-argument ‘static_assert’ that implements what the Gnulib ‘verify’ macro was doing back in 2005. Implement static_assert on older platforms. The only remaining advantage of ‘verify’ is a shorter name. * doc/posix-headers/assert.texi (assert.h): * doc/verify.texi (Compile-time Assertions): Modernize for C2x and C++17. * lib/verify.h (_GL_HAVE__STATIC_ASSERT1, _GL_HAVE_STATIC_ASSERT1): New macros. (_GL_HAVE__STATIC_ASSERT): Remove. (_GL_HAVE__STATIC_ASSERT): Rely more heavily on __STDC_VERSION__. (_GL_VERIFY_TRUE, _GL_VERIFY_TYPE): Remove 2nd arg, the diagnostic string. All callers changed. (_GL_VERIFY): Require 3 or more args, of which only the first 2 are used. All callers changed. (_Static_assert): Allow either 1 or 2 args, and define if !_GL_HAVE__STATIC_ASSERT1 instead of defining if !_GL_HAVE__STATIC_ASSERT. (static_assert): Define if !_GL_HAVE_STATIC_ASSERT1 instead of defining if !_GL_HAVE_STATIC_ASSERT. (verify_expr, verify): Don’t bother trying to copy the expression into the diagnostic, since 1-argument static_assert doesn’t. (verify): Prefer 1-argument _Static_assert if it works. * m4/assert_h.m4 (gl_ASSERT_H): Check for 1-argument static_assert. 2019-05-08 Paul Eggert Fix _GL_HAVE__STATIC_ASSERT typo * lib/verify.h (_Static_assert): For the FreeBSD workaround, use _GL_HAVE__STATIC_ASSERT, not _GL_HAVE_STATIC_ASSERT. 2019-05-05 Bruno Haible wcwidth: Ensure width 1, not 2, for ambiguous characters. Reported by Kiyoshi KANAZAWA via Akim Demaille . * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Check the width of U+2202. Use an en_US.UTF-8 locale, since that is more likely to be present than an fr_FR.UTF-8 locale. * tests/test-wcwidth.c (main): Check the width of U+2202. * doc/posix-functions/wcwidth.texi: Mention the issue. 2019-05-03 Paul Eggert Port manywarnings to GCC 9 * build-aux/gcc-warning.spec: Sort. Add -Wattribute-alias, -Wc11-c2x-compat, -Wcast-result (for the D programming language), -Wclass-conversion, -Wdeprecated-copy, -Wdeprecated-copy-dtor, -Winit-list-lifetime, -Wpessimizing-move, -Wprio-ctor-dtor, -Wredundant-move. Adjust to minor wording changes in GCC 9’s --help=warnings output. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Wabsolute-value, -Waddress-of-packed-member, -Wattribute-warning, -Wcannot-profile, -Wmissing-profile. Change -Wattribute-alias to -Wattribute-alias=2. 2019-04-30 Paul Eggert Sync lib/mktime-internal.h from glibc * config/srclist.txt: Add entry for lib/mktime-internal.h. * lib/mktime-internal.h: Autoupdate. 2019-04-28 Bruno Haible tls tests: Prevent that the test takes too long. * tests/test-tls.c: Include , . (main): Let the test fail if it takes more than 10 minutes. * modules/tls-tests (configure.ac): Test whether 'alarm' is declared. 2019-04-27 Bruno Haible lock tests: Prevent that the test takes too long. * tests/test-lock.c: Include , . (main): Let the test fail if it takes more than 10 minutes. * modules/lock-tests (configure.ac): Test whether 'alarm' is declared. 2019-04-27 Bruno Haible localename: Fix crash on mingw (regression from 2018-11-23). * lib/localename.c (gl_locale_name_posix): Don't attempt to convert a locale name that is null. 2019-04-27 Bruno Haible Fix gcc warnings on 64-bit mode mingw. * lib/clean-temp.c: Include instead of defining uintptr_t. * lib/gl_array_list.c: Likewise. * lib/gl_array_map.c: Likewise. * lib/gl_array_set.c: Likewise. * lib/gl_carray_list.c: Likewise. * lib/gl_sublist.c: Likewise. * lib/gl_avltreehash_list.c (uintptr_t): Remove definition. * lib/gl_rbtreehash_list.c (uintptr_t): Likewise. * lib/gl_hash_map.c (uintptr_t): Likewise. * lib/gl_hash_set.c (uintptr_t): Likewise. * lib/gl_linkedhash_list.c (uintptr_t): Likewise. * lib/gl_linkedhash_map.c (uintptr_t): Likewise. * lib/gl_linkedhash_set.c (uintptr_t): Likewise. * lib/iconv.c (uintptr_t): Likewise. * lib/iconv_close.c (uintptr_t): Likewise. * tests/test-lock.c: Include . (once_contender_thread, test_once): Cast through 'intptr_t' instead of 'long'. * modules/clean-temp (Depends-on): Add stdint. * modules/array-list (Depends-on): Likewise. * modules/array-map (Depends-on): Likewise. * modules/array-set (Depends-on): Likewise. * modules/carray-list (Depends-on): Likewise. * modules/sublist (Depends-on): Likewise. * modules/lock-tests (Depends-on): Likewise. 2019-04-27 Bruno Haible error: Tweak indentation. * lib/error.c: Correct indentation. 2019-04-27 Bruno Haible term-style-control: Fix gcc warning on mingw. * lib/term-style-control.c (ensure_other_signal_handlers): Reduce scope of i. 2019-04-26 Bruno Haible pipe-filter-gi, pipe-filter-ii: Fix gcc warning. * lib/pipe-filter-aux.h (read): Undefine before redefinition. 2019-04-26 Bruno Haible relocatable-prog: Fix gcc warning on mingw. * lib/progreloc.c (maybe_executable): Don't define on native Windows and on EMX. 2019-04-02 Bruno Haible gitsub.sh: New file. * top/gitsub.sh: New file. 2019-04-18 Akim Demaille argmatch: use void* for raw memory pointers * lib/argmatch.h, lib/argmatch.c (argmatch, argmatch_valid) (__xargmatch_internal, argmatch_to_argument): Use void* for pointers to "values", keep char* for strings. 2019-04-21 Akim Demaille prefix-gnulib-mk: fix the support for gnulib-po * build-aux/prefix-gnulib-mk (prefix_assignment): Remove useless $res. Don't touch HAVE_* variables. Map AM_CPPFLAGS and AM_CPPFLAGS to the library's corresponding variables. 2019-04-18 Bernhard Voelker di-set: allow free with 'ino_map' being NULL. * lib/di-set.c (di_set_free): Avoid ino_map_free() when dis->ino_map is NULL. Bug introduced in commit 3703dbbe88dd. * tests/test-di-set.c: Add di_set_free() right after di_set_alloc() as a test. 2019-04-14 Paul Eggert * lib/str-two-way.h: Fix comment typo. 2019-04-13 Bruno Haible x-to-1: Restore ability to use original calling convention. * build-aux/x-to-1.in: Add comments. Accept the original form of HELP2MAN argument as well as the form expected since 2012-12-12. 2019-04-13 Bruno Haible x-to-1: Avoid failure due to missing perl modules. * build-aux/x-to-1.in: Test whether all the perl modules that help2man needs are installed. 2019-04-13 Bruno Haible openmp-init: New module. * modules/openmp-init: New file. * modules/openmp: (Files, Depends-on, configure.ac, Makefile.am): Revert the changes from 2019-04-09. 2019-04-12 Bruno Haible signbit: Fix compilation error when gnulib's math.h exists twice. * lib/math.in.h (GNULIB_defined_signbit): New macro. 2019-04-12 Bruno Haible openmp: Fix compilation error on platforms without OpenMP. * lib/omp-init.c: Include only if _OPENMP. 2019-04-09 Bernhard Voelker mountlist: make parsing /proc/self/mountinfo more robust Cater for the following issues with mountinfo parsing (the first one was reported by Zbigniew Jędrzejewski-Szmek in ). 1. The fields source, target, mntroot and fstype may contain characters like '\r'; sscanf(3) fails to read such values with the %s format specifier because it would stop at such characters. Example: "mount -t tmpfs tmpfs /foo^Mbar". The only true separator in that file is the ' ' character. 2. The source field may be an empty string, which happens e.g. with "mount -t tmpfs '' /target". 3. The fstype field may contain mangled characters as well which need unescaping. * lib/mountlist.c (terminate_at_blank): Add utility function. (read_file_system_list): In the block trying to read the mountinfo file, avoid using sscanf(3) with %s format; instead, parse the above fields separated by spaces one by one. This also handles the case when the source field is an empty string. Unescape the fstype field. 2019-04-09 Bruno Haible openmp: Add workaround for 32-bit programs on AIX. * lib/omp.in.h: New file. * lib/omp-init.c: New file, based on lib/nproc.c. * m4/omp_h.m4: New file. * modules/openmp (Files): Add them. (Depends-on): Add include_next, c-ctype, setenv. (configure.ac): Invoke gl_OMP_H. (Makefile.am): Add rules to create omp.h and compile omp-init.c. (Include): Mention . 2019-04-09 Bruno Haible nproc: Fix return value for privileged processes. * lib/nproc.c (num_processors_ignoring_omp): Test getuid(), not getpid(). 2019-04-07 Bruno Haible Add copyright notices in several files. Reported by in . * lib/_Noreturn.h: Add LGPLv2+ copyright notice. * lib/libunistring.valgrind: Likewise. * lib/iconv_open-*.gperf: Add GPLv2+ copyright notice. * lib/uniname/gen-uninames.lisp: Add GPLv3+ copyright notice. * lib/memchr.valgrind: Likewise. * lib/memchr2.valgrind: Likewise. * lib/rawmemchr.valgrind: Likewise. * lib/relocatable.valgrind: Likewise. * lib/strchrnul.valgrind: Likewise. 2019-03-25 Bruno Haible term-style-control tests: Fix link error. Reported by Tom G. Christensen in . * modules/term-style-control-tests (Makefile.am): Link test-term-style-control-hello and test-term-style-control-yes against LIBINTL. 2019-03-24 Bruno Haible term-style-control: Add tests. * tests/test-term-style-control-hello.c: New file. * tests/test-term-style-control-yes.c: New file. * modules/term-style-control-tests: New file. term-style-control: New module. * lib/term-style-control.h: New file, based on libtextstyle's term-ostream.oo.h and term-ostream.oo.c. * lib/term-style-control.c: New file, based on libtextstyle's term-ostream.oo.c. * modules/term-style-control: New file. 2019-03-22 Akim Demaille _Noreturn: beware of C's _Noreturn in C++ pre C++11. * lib/_Noreturn.h, m4/gnulib-common.m4: Using C's _Noreturn in C++98 appears to be supported by Clang, but not by GCC nor ICC. 2019-03-23 Bruno Haible Support cross-compilation to musl libc. Reported by Necktwi Ozfguah . * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Add cross-compilation guesses for musl libc. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Likewise. * m4/cbrtl.m4 (gl_FUNC_CBRTL): Likewise. * m4/ceil.m4 (gl_FUNC_CEIL): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/chown.m4 (gl_FUNC_CHOWN): Likewise. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/exp2l.m4 (gl_FUNC_EXP2L): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/expm1.m4 (gl_FUNC_EXPM1): Likewise. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Likewise. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Likewise. * m4/floor.m4 (gl_FUNC_FLOOR): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF): Likewise. * m4/fmod.m4 (gl_FUNC_FMOD): Likewise. * m4/fmodf.m4 (gl_FUNC_FMODF): Likewise. * m4/fmodl.m4 (gl_FUNC_FMODL): Likewise. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise. * m4/fpurge.m4 (gl_FUNC_FPURGE): Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. * m4/getgroups.m4 (AC_FUNC_GETGROUPS, gl_FUNC_GETGROUPS): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Likewise. * m4/hypot.m4 (gl_FUNC_HYPOT): Likewise. * m4/hypotf.m4 (gl_FUNC_HYPOTF): Likewise. * m4/hypotl.m4 (gl_FUNC_HYPOTL): Likewise. * m4/iconv_open-utf.m4 (gl_FUNC_ICONV_OPEN_UTF_SUPPORT): Likewise. * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Likewise. * m4/log.m4 (gl_FUNC_LOG): Likewise. * m4/logf.m4 (gl_FUNC_LOGF): Likewise. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): Likewise. * m4/log10.m4 (gl_FUNC_LOG10): Likewise. * m4/log10f.m4 (gl_FUNC_LOG10F): Likewise. * m4/log10l.m4 (gl_FUNC_LOG10L): Likewise. * m4/log1p.m4 (gl_FUNC_LOG1P): Likewise. * m4/log1pf.m4 (gl_FUNC_LOG1PF): Likewise. * m4/log1pl.m4 (gl_FUNC_LOG1PL): Likewise. * m4/log2.m4 (gl_FUNC_LOG2): Likewise. * m4/log2f.m4 (gl_FUNC_LOG2F): Likewise. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): Likewise. * m4/mkdir.m4 (gl_FUNC_MKDIR): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise. * m4/modf.m4 (gl_FUNC_MODF): Likewise. * m4/modff.m4 (gl_FUNC_MODFF): Likewise. * m4/modfl.m4 (gl_FUNC_MODFL): Likewise. * m4/perror.m4 (gl_FUNC_PERROR): Likewise. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_FLAG_ZERO, gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_VSNPRINTF_ZEROSIZE_C99): Likewise. * m4/ptsname.m4 (gl_FUNC_PTSNAME): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Likewise. * m4/remainder.m4 (gl_FUNC_REMAINDER): Likewise. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Likewise. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Likewise. * m4/rintl.m4 (gl_FUNC_RINTL): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise. * m4/setenv.m4 (gl_FUNC_SETENV): Likewise. * m4/signbit.m4 (gl_SIGNBIT): Likewise. * m4/sleep.m4 (gl_FUNC_SLEEP): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/strerror.m4 (gl_FUNC_STRERROR, gl_FUNC_STRERROR_0): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtold.m4 (gl_FUNC_STRTOLD): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Likewise. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Likewise. * m4/usleep.m4 (gl_FUNC_USLEEP): Likewise. * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. 2019-03-23 Bruno Haible posix_spawn_file_actions_*: Document musl libc bugs. * doc/posix-functions/posix_spawn_file_actions_addclose.texi: Mention the bug. * doc/posix-functions/posix_spawn_file_actions_adddup2.texi: Likewise. * doc/posix-functions/posix_spawn_file_actions_addopen.texi: Likewise. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE): When cross-compiling to a musl system, guess no. (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2): Likewise. (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN): Likewise. 2019-03-23 Bruno Haible futimens: Document musl libc bug. * doc/posix-functions/futimens.texi: Mention the bug. * m4/futimens.m4 (gl_FUNC_FUTIMENS): Require AC_CANONICAL_HOST. When cross-compiling, guess no on glibc and musl systems. 2019-03-23 Bruno Haible Clarify that cross-compilation guesses are guesses. * m4/chown.m4 (gl_FUNC_CHOWN_FOLLOWS_SYMLINK): When cross-compiling, add prefix 'guessing ' to gl_cv_func_chown_follows_symlink. * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): When cross-compiling, add prefix 'guessing ' to gl_cv_func_fchownat_nofollow_works. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): When cross-compiling, add prefix 'guessing ' to gl_cv_func_getcwd_abort_bug. * m4/glob.m4 (gl_GLOB): When cross-compiling, add prefix 'guessing ' to gl_cv_glob_lists_symlinks. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): When cross-compiling, add prefix 'guessing ' to ac_cv_func_malloc_0_nonnull. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): When cross-compiling, add prefix 'guessing ' to ac_cv_func_realloc_0_nonnull. * m4/poll.m4 (gl_FUNC_POLL): When cross-compiling, add prefix 'guessing ' to gl_cv_func_poll. * m4/iconv_open-utf.m4 (gl_FUNC_ICONV_OPEN_UTF_SUPPORT): When cross- compiling, add prefix 'guessing ' to gl_cv_func_iconv_supports_utf. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): Update accordingly. 2019-03-23 Bruno Haible strtold: Fix typo. * m4/strtold.m4 (gl_FUNC_STRTOLD): Fix typo in variable name. 2019-03-23 Bruno Haible noreturn: In C++ mode with clang, use _Noreturn as fallback. Reported by Akim Demaille. * lib/noreturn.h (_GL_NORETURN_FUNC): In C++ mode with clang, when [[noreturn]] would not work, use _Noreturn instead. 2019-03-22 Akim Demaille libtextstyle-optional: Fix compiler warnings. * lib/textstyle.in.h (html_styled_ostream_create): Flag arguments as unused. 2019-03-19 Akim Demaille bitset: fix memory leaks Reported by Bruno Haible. https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00027.html * lib/bitset/vector.c (vbitset_free): New. (vbitset_vtable): Use it. 2019-03-19 Akim Demaille bitset: minor changes * lib/bitset/base.h (bitset_alloc_type): Remove, unused. * lib/bitset/table.c: Formatting changes. Remove useless braces. Prefer using else in cascades of if/else-if with returns. * lib/bitset/vector.c: Reduce scopes. 2019-03-19 Akim Demaille bitset: expose bitset_resize * lib/bitset.h (bitset_resize): Bounce on the polymorphic implementation. * tests/test-bitset.c (check_attributes): Check bitset_resize. (main): Use a variable bitset as reference, since fixed does not support resize. 2019-03-19 Bruno Haible doc: Document the 'stdnoreturn' and 'noreturn' modules. Reported by Akim Demaille. * doc/noreturn.texi: New file. * doc/gnulib.texi: Include it. 2019-03-19 Bruno Haible doc: Document how to use 'static inline'. * doc/static-inline.texi: New file. * doc/gnulib.texi: Include it. 2019-03-19 Bruno Haible libtextstyle-optional: Add tests. * tests/test-libtextstyle.c: New file, based on libtextstyle's adhoc-tests/hello.c. * tests/test-libtextstyle-default.css: New file, copied from libtextstyle's adhoc-tests/hello-default.css. * modules/libtextstyle-optional-tests: New file. libtextstyle-optional: New module. * lib/textstyle.in.h: New file, based on libtextstyle's textstyle.h. * m4/libtextstyle-optional.m4: New file, based on m4/libtextstyle.m4. * modules/libtextstyle-optional: New file. 2019-03-19 Bruno Haible c-stack: Make signal handlers more reliable. * lib/c-stack.c (progname): New variable. (die): Use it. (c_stack_action): Initialize it. (segv_handler): Save and restore errno. 2019-03-19 Bruno Haible Help making signal handlers more reliable. * m4/gnulib-common.m4 (gl_COMMON_BODY): Emit definition of _GL_ASYNC_SAFE into config.h. * lib/nanosleep.c (sighandler): Mark as _GL_ASYNC_SAFE. * lib/fatal-signal.h (at_fatal_signal): Add _GL_ASYNC_SAFE marker to argument. * lib/fatal-signal.c (action_t, uninstall_handlers, fatal_signal_handler): Mark as _GL_ASYNC_SAFE. * lib/clean-temp.c (cleanup_action): Mark as _GL_ASYNC_SAFE. * lib/wait-process.c (cleanup_slaves, cleanup_slaves_action): Mark as _GL_ASYNC_SAFE. * lib/c-stack.h (c_stack_action): Add _GL_ASYNC_SAFE marker to argument. * lib/c-stack.c: Add _GL_ASYNC_SAFE markers. 2019-03-18 Bruno Haible _Noreturn: clang and MSVC do support [[noreturn]] in C++11 mode. * lib/_Noreturn.h: Use [[noreturn]] if __GNUC__ and __GNUC_MINOR__ indicate clang, or if _MSC_VER indicates MSVC++ 14.0 or newer. 2019-03-17 Akim Demaille _Noreturn: GCC 4.7 does not support [[noreturn]] in C++11 mode * lib/_Noreturn.h, m4/gnulib-common.m4: Don't use [[noreturn]] before GCC 4.8. 2019-03-17 Paul Eggert fts: minor simplification * lib/fts.c (fts_safe_changedir): Remove redundant assignment. 2019-03-17 Akim Demaille bitset, timevar: Depend on c99. Reported by Bruno Haible. * modules/bitset, modules/timevar (Depends-on): Add c99. 2019-03-16 Akim Demaille bitset: a bit (...) more tests * tests/test-bitset.c (check_attributes): Check zero and ones. 2019-03-16 Akim Demaille bitset: fix overflows. Reported by Bruno Haible. https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00017.html * lib/bitset/table.c (tbitset_test): last_bit is the position of the bit in the array of bitset_word, so be sure to take its modulo number-of-bits-in-bitset-word (i.e., EBITSET_ELT_WORDS). * lib/bitset/list.c (lbitset_unused_clear): Likewise. 2019-03-14 Akim Demaille bitset: style changes. * lib/bitset/table.c: Use NULL, not 0, for pointers. Formatting changes. (tbitset_list): Reduce scopes. 2019-03-16 Bruno Haible fatal-signal: Pass the signal number to the action. * lib/fatal-signal.h (at_fatal_signal): Change the signature. * lib/fatal-signal.c (action_t): Take the signal number as parameter. (fatal_signal_handler): Pass the signal number to the action. * lib/clean-temp.c (cleanup_action): Renamed from cleanup. Take the signal number as parameter. (create_temp_dir): Update. * lib/wait-process.c (cleanup_slaves_action): New function. (register_slave_subprocess): Update at_fatal_signal invocation. * NEWS: Mention the change. 2019-03-16 Bruno Haible fatal-signal: Add function that lists the fatal signals. * lib/fatal-signal.h (get_fatal_signals): New declaration. * lib/fatal-signal.c (get_fatal_signals): New function. 2019-03-14 Bruno Haible isatty: Make it return true in Cygwin consoles on native Windows. * lib/isatty.c: Include . (GetProcAddress): New macro. (GetNamedPipeClientProcessIdFuncType): New type. (GetNamedPipeClientProcessIdFunc): New variable. (QueryFullProcessImageNameFuncType): New type. (QueryFullProcessImageNameFunc): New variable. (initialized): New variable. (initialize): New function. (IsCygwinConsoleHandle): New function. (isatty): Invoke it. * doc/posix-functions/isatty.texi: Mention the issue. 2019-03-14 Bruno Haible all: Update URLs to msdn.microsoft.com. * lib/stat-w32.c et al.: Update URLs after most of msdn.microsoft.com was moved to docs.microsoft.com. 2019-03-13 Bruno Haible gnulib-tool: Clarify the coding style. Suggested by Pavel Raiskup . * gnulib-tool: Add comment about coding style. 2019-03-11 Paul Eggert strtod: fix clash with strtold Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817). * lib/strtod.c (compute_minus_zero, minus_zero): Simplify by remving the macro / external variable, and having just a function. User changed. This avoids the need for an external variable that might clash. 2019-03-10 Bruno Haible alloca-opt: Fix conflict mingw's new file. Reported by Eli Zaretskii . * lib/alloca.in.h: On mingw systems that have , include that. * m4/alloca.m4 (gl_FUNC_ALLOCA): Set HAVE_ALLOCA_H. * modules/alloca-opt (Makefile.am): Substitute HAVE_ALLOCA_H. 2019-03-10 Bruno Haible tests: Avoid havoc with "gcc -fcheck-pointer-bounds". * tests/test-fprintf-posix2.c: Skip the test when -fcheck-pointer-bounds is in use. * tests/test-printf-posix2.c: Likewise. 2019-03-10 Bruno Haible uninorm tests: Free allocated memory. * tests/uninorm/test-u32-normalize-big.h (struct normalization_test_file): Remove 'const' from allocated member. (free_normalization_test_file): New declaration. * tests/uninorm/test-u32-normalize-big.c (test_other): Free allocated memory. (free_normalization_test_file): New function. * tests/uninorm/test-u32-nfc-big.c (main): Free allocated 'struct normalization_test_file' contents. * tests/uninorm/test-u32-nfd-big.c (main): Likewise. * tests/uninorm/test-u32-nfkc-big.c (main): Likewise. * tests/uninorm/test-u32-nfkd-big.c (main): Likewise. 2019-03-10 Bruno Haible di-set: Fix memory leak. * lib/di-set.c (di_set_free): Free the ino_map through ino_map_free(), not free(). 2019-03-10 Bruno Haible tests: Free allocated memory. Reported by via Assaf Gordon. * tests/test-astrxfrm.c (main): Free allocated memory. * tests/test-bitset.c (compare, check_attributes): Free allocated bitsets. * tests/test-filenamecat.c (main): Free allocated memory. * tests/test-freadahead.c (main): Free allocated memory and close stdin. * tests/test-freadptr.c (main): Likewise. * tests/test-freadptr2.c (main): Free allocated memory. * tests/test-freadseek.c (main): Likewise. * tests/test-gc-arcfour.c (main): Close allocated context. * tests/test-gc-arctwo.c (main): Likewise. * tests/test-gc-des.c (main): Close all allocated contexts. * tests/test-pipe-filter-gi1.c (main): Free allocated memory. * tests/test-pipe-filter-ii1.c (main): Likewise. * tests/test-posix_spawn_file_actions_addchdir.c (main): Destroy the allocated file actions. * tests/test-posix_spawn_file_actions_addclose.c (main): Likewise. * tests/test-posix_spawn_file_actions_adddup2.c (main): Likewise. * tests/test-posix_spawn_file_actions_addopen.c (main): Likewise. * tests/test-sameacls.c (main): Free allocated memory and ACLs. * tests/test-strfmon_l.c (main): Free allocated locales. * tests/test-striconveh.c (main): Free allocated iconv_t objects. * tests/uniconv/test-u8-conv-to-enc.c (main): Free allocated memory. * tests/uniconv/test-u16-conv-to-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-to-enc.c (main): Likewise. * tests/unistr/test-chr.h (main): Free input32. * tests/unistr/test-strchr.h (test_strchr): Likewise. 2019-03-10 Bruno Haible tests: Prepare for using valgrind. * tests/*.sh: Invoke all test programs through ${CHECKER}. * tests/*/*.sh: Likewise. * tests/test-freadptr.c (main): Update accordingly. * tests/test-freadseek.c (main): Likewise. 2019-03-09 Bruno Haible get-rusage-as, pthread_sigmask tests: Fix -fsanitize=thread findings. * lib/get-rusage-as.c (get_rusage_as): When compiled by "gcc -fsanitize=thread", don't try get_rusage_as_via_setrlimit. * tests/test-pthread_sigmask2.c (main): Clean up the killer_thread before exiting. 2019-03-09 Jim Meyering test-userspec.c: don't print NULL * tests/test-userspec.c (main): A test release of gcc, 9.0.1 20190310, warned that this test would attempt to print a NULL pointer via a %s printf format. Fix that and remove the unnecessary preceding "!diag" conjunct. Also add a comment. 2019-03-03 Bruno Haible getloadavg: Write NULL for the null pointer. Reported by Michal Privoznik . * lib/getloadavg.c (getloadavg): Write NULL instead of 0. 2019-02-28 Michal Privoznik alloca, tsearch-tests: Write NULL for the null pointer. * lib/alloca.c (i00afunc): Write NULL instead of 0. * tests/test-tsearch.c (mangle_tree): Likewise. 2019-03-09 Bruno Haible strfmon_l: Fix -fsanitize=address finding. * lib/strfmon_l.c: Include , , , . (MAX_ARGS): Renamed from MAX_ARG_WORDS. (directive_t, directives_t): New types. (fmon_parse): New function. (rpl_strfmon_l): Don't call va_arg more often than needed for the format string. Consume 'long double' arguments in places where the format string indicates so. * modules/strfmon_l (Depends-on): Add 'stdbool'. 2019-03-09 Bruno Haible crypto/des: Fix undefined behaviour. * lib/des.c (READ_64BIT_DATA): Cast bytes to 'unsigned int', to avoid shift operations on 'int'. 2019-03-09 Bruno Haible Fix undefined behaviour. * lib/bitrotate.h (rotl16, rotr16, rotl8, rotr8): Cast x to 'unsigned int', to avoid shift operations on 'int'. * lib/xmemdup0.c (xmemdup0): Don't invoke memcpy with a zero size. * tests/test-count-leading-zeros.c (main): Use a random number that has as many bits as TYPE, not only 2*15 or 2*31 bits. * tests/test-count-trailing-zeros.c (main): Likewise. * tests/test-count-one-bits.c (main): Likewise. * tests/test-memmem.c: Don't include "null-ptr.h". (main): Use zerosize_ptr() instead of null_ptr(). * modules/memmem-tests (Files): Remove tests/null-ptr.h. 2019-03-08 Bruno Haible unilbrk/u*-possible-linebreaks: Fix undefined behaviour. Reported by Jeffrey Walton . * lib/unilbrk/u8-possible-linebreaks.c (u8_possible_linebreaks): Don't invoke memset with a zero size. * lib/unilbrk/u16-possible-linebreaks.c (u16_possible_linebreaks): Likewise. * lib/unilbrk/u32-possible-linebreaks.c (u32_possible_linebreaks): Adjust accordingly. 2019-03-08 Bruno Haible unistr/*, uniconv/*: Fix undefined behaviour. Reported by Jeffrey Walton . * lib/unistr/u-cpy.h (FUNC): Don't invoke memcpy with a zero size. * lib/unistr/u-cpy-alloc.h (FUNC): Likewise. * lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): Likewise. * lib/uniconv/u8-conv-to-enc.c (u8_conv_to_encoding): Likewise. 2019-03-08 Bruno Haible unistr/u8-cmp: Fix undefined behaviour. Reported by Jeffrey Walton . * lib/unistr/u8-cmp.c (u8_cmp): Don't invoke memcmp if n is zero. 2019-03-08 Bruno Haible unictype/numeric: Fix undefined behaviour. Reported by Jeffrey Walton . * lib/unictype/numeric.c (uc_numeric_value): Avoid undefined behaviour on shift overflow, caught by "gcc -fsanitize=undefined". * lib/unictype/bidi_of.c (uc_bidi_class): Add cast, for clarity. * lib/unictype/categ_of.c (lookup_withtable): Likewise. * lib/unictype/joininggroup_of.c (uc_joining_group): Likewise. 2019-03-05 Paul Eggert git-version-gen: fix --version copyright year * build-aux/git-version-gen, build-aux/move-if-change (version): --version output copyright year is now taken from script year, so that it no longer needs to be updated by hand. 2019-03-04 Bruno Haible relocatable-prog: Use wrapper-free installation on Mac OS X, take 2. This approach supports relocatable installation of shared libraries which depend on other shared libraries from the same package. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Determine use_macos_tools. If use_macos_tools is true, use reloc-ldflags and set LIBTOOL to be a wrapper around the original LIBTOOL. * build-aux/reloc-ldflags: Add support for Mac OS X, which uses the token '@loader_path' instead of '$ORIGIN'. * build-aux/libtool-reloc: New file. * modules/relocatable-prog (Files): Add it. * doc/relocatable-maint.texi (Supporting Relocation): Update to match the recent changes. Document the need to set the *_LDFLAGS of libraries. RELOCATABLE_LIBRARY_PATH and RELOCATABLE_CONFIG_H_DIR should be set in Makefile.am, not in configure.ac. 2019-03-04 Bruno Haible relocatable-prog: Revert "Use wrapper-free installation on Mac OS X." * build-aux/install-reloc: Revert change. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Likewise. 2019-02-24 Paul Eggert nstrftime: support the ‘+’ flag * lib/nstrftime.c (add, __strftime_internal): Add support for the ‘+’ flag introduced in POSIX.1-2017. (__strftime_internal): New arg ‘width’. All uses changed. (DO_YEARISH, DO_MAYBE_SIGNED_NUMBER): New macros. 2019-02-24 Bruno Haible relocatable-prog: Improve verbose output. * build-aux/install-reloc (func_verbose): Escape characters that would be interpreted by the shell. 2019-02-24 Bruno Haible stat, lstat: Fix conflict with relocatable-prog-wrapper module. * lib/stat.c: On platforms other than OSF/1, include , not "sys/stat.h". * lib/lstat.c: Likewise. * lib/fstat.c: Likewise. * lib/fstatat.c: Likewise. 2019-02-23 Bernhard Voelker long-options: add parse_gnu_standard_options_only Discussed in https://bugs.gnu.org/33468 . * lib/long-options.c (parse_long_options): Use EXIT_SUCCESS instead of 0 (parse_gnu_standard_options_only): Add function to process the GNU default options --help and --version and fail for any other unknown long or short option. See https://gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html * lib/long-options.h (parse_gnu_standard_options_only): Declare it. * modules/long-options (depends-on): Add stdbool, exitfail. * top/maint.mk (sc_prohibit_long_options_without_use): Update syntax-check rule, add new function name. 2019-02-23 Bruno Haible relocatable-prog: Update documentation. * doc/relocatable-maint.texi (Supporting Relocation): Update to match the recent changes. 2019-02-23 Paul Eggert nstrftime: tweak arg order * lib/nstrftime.c (__strftime_internal): Interchange arg order. All callers changed. Suggested by TAMUKI Shoichi in: https://lists.gnu.org/r/bug-gnulib/2019-02/msg00052.html 2019-02-23 Bruno Haible relocatable-prog: Use wrapper-free installation also on Mac OS X. Reported by Paul Smith . * build-aux/install-reloc: Accept a 'mode' argument as first argument. (func_relativize): New function, from gnulib-tool. Handle mode 'macosx' through invocations of 'otool' and 'install_name_tool'. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Determine use_macos_tools. If use_macos_tools is true, set INSTALL_PROGRAM_ENV to an 'install-reloc' invocation with mode 'macosx'. 2019-02-23 Bruno Haible relocatable-prog: Use $ORIGIN trick also on GNU/Hurd. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Use $ORIGIN trick also on Hurd with glibc >= 2.27. 2019-02-21 Paul Eggert nstrftime: merge glibc strftime changes This incorporates: 2019-02-11 Fix a few whitespace arrangement inconsistencies 2019-01-24 strftime: Pass flags from "%EY" to "%Ey" [BZ #24096] 2019-01-24 Set the default width of "%Ey" to 2 [BZ #23758] 2019-01-11 strftime: use the "L_" macro with character literals * lib/nstrftime.c (__strftime_internal): New arg yr_spec. All callers changed. Default width of %Ey is now 2. This is needed for proper handling of Japanese dates starting on 2019-05-01. 2019-02-19 Bruno Haible relocatable-prog: Use $ORIGIN trick on more platforms. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Use $ORIGIN trick also on FreeBSD >= 7.3, DragonFly >= 3.0, NetBSD >= 8.0, OpenBSD >= 5.4, Solaris >= 10, Haiku. But don't use it on Android. * build-aux/reloc-ldflags: Allow the use of the $ORIGIN trick also on Hurd, FreeBSD, DragonFly, NetBSD, OpenBSD, Solaris, Haiku. 2019-02-19 Bruno Haible progreloc: Speed up executable lookup on various platforms. * lib/progreloc.c: Include . (safe_read, full_read): New functions. (find_executable): On GNU/kFreeBSD, FreeBSD, DragonFly, NetBSD, Solaris, prefer the information from the /proc file system to a PATH search. 2019-02-19 Bruno Haible progreloc: Simplify code for Android. * lib/progreloc.c (executable_fd): Don't define on Android. (maybe_executable, find_executable): Don't use executable_fd on Android. 2019-02-15 Bruno Haible gnulib-tool: Support --import with just a few tests, not --with-tests. * gnulib-tool (func_import): New variable 'gentests'. Use it instead of 'inctests' when generating files; use 'inctests' only for computing the transitive closure. 2019-02-14 Bruno Haible gnulib-tool: Improve handling of multiple --local-dir options. * doc/gnulib.texi (Extending Gnulib): Explain how multiple --local-dir options work. * gnulib-tool (func_path_prepend): Remove function. (func_path_foreach): Make IFS handling more robust. (local_gnulib_path): Collect --local-dir values using func_path_append, not func_path_prepend. (func_determine_path_separator): Make IFS handling more robust. (func_lookup_file_cb): New function. (func_lookup_file): Rewritten to use func_lookup_file_cb instead of func_lookup_local_file. Apply the patches in the reverse order of their origin in $local_gnulib_path. (func_count_relative_local_gnulib_path): Make IFS handling more robust. * NEWS: Mention that the first --local-dir option is the one with highest priority. 2019-02-10 Bruno Haible libtextstyle: New module. * m4/libtextstyle.m4: New file. * modules/libtextstyle: New file. 2019-02-05 Bruno Haible declared.sh: Fix bug with variables of pointer type. * build-aux/declared.sh (sed_extract_extern_declared): Allow the space before the symbol to be omitted if the preceding character is a '*'. 2019-02-04 Bruno Haible Add script for running tests under valgrind. * build-aux/run-test: New file, from GNU libunistring. * doc/valgrind-tests.texi: Rewritten to mention alternative approaches as well. 2019-02-04 Bruno Haible declared.sh: Fix --version output. * build-aux/declared.sh (func_version): Update package name. 2019-02-03 Bruno Haible Add script for determining the set of symbols to export from a library. * build-aux/declared.sh: New file, from GNU libunistring. * doc/lib-symbol-visibility.texi (Exported Symbols of Shared Libraries): Mention it. 2019-02-02 Paul Eggert vla: add commentary about VLA_ELEMS * lib/vla.h (VLA_ELEMS): Add commentary, some inspired by Bruno Haible’s proposal in: https://lists.gnu.org/r/bug-gnulib/2019-01/msg00109.html dtoastr,ftoastr,ldtoastr: port to c-strtod changes Decouple these modules from c-strtod. Nowadays it’s reasonable to assume the C99 signatures for strtod and strtold. Programs that require stricter adherence to C99 should also use the strtod and strtold modules as needed, and we no longer need the HAVE_C99_STRTOLD macro. * NEWS: Mention this. * lib/ftoastr.c (STRTOF) [LENGTH == 3]: Assume strtold. * m4/c-strtod.m4 (gl_C_STRTOLD): Do not define HAVE_C99_STRTOLD. * modules/dtoastr, modules/ftoastr, modules/ldtoastr: (Files): Remove m4/c-strtod.m4. (configure.ac): Do not require gl_C99_STRTOLD, which no longer exists. 2019-02-02 Bruno Haible fma: Improve code style. * lib/fma.c: Include , for CHAR_BIT. 2019-02-02 Colin Watson *-map tests: Fix compilation error. * tests/test-array_map.c: Include , for CHAR_BIT. * tests/test-hash_map.c: Likewise. * tests/test-linkedhash_map.c: Likewise. 2019-01-31 Bruno Haible c-strtod, c-strtold: Use the bug fixes for strtod, strtold. * lib/stdlib.in.h (GNULIB_defined_strtod_function, GNULIB_defined_strtold_function): New macros. * lib/c-strtod.c (HAVE_GOOD_STRTOD_L): New macro. (STRTOD): Ignore HAVE_C99_STRTOLD. (c_locale): Don't define it on platforms where strtod_l/strtold_l is deemed buggy. But do use it on platforms where uselocale exists and is usable. (C_STRTOD): Don't use STRTOD_L on platforms where strtod_l/strtold_l is deemed buggy. On platforms where uselocale exists and is usable, use uselocale and strtod/strtold. * m4/c-strtod.m4 (gl_C99_STRTOLD): Remove macro. (gl_C_STRTOD): Require gt_FUNC_USELOCALE. (gl_C_STRTOLD): Likewise. Define HAVE_C99_STRTOLD unconditionally. * modules/c-strtod (Files): Add m4/intl-thread-locale.m4. (Depends-on): Add strtod. * modules/c-strtold (Files): Add m4/intl-thread-locale.m4. (Depends-on): Add strtold. 2019-01-31 Bruno Haible strtod, strtold: Use the locale's decimal point. * lib/strtod.c: Include , , . (decimal_point_char): New function, copied from lib/vasnprintf.c. (parse_number): Add a radixchar argument. Use it instead of '.'. (STRTOD): Invoke decimal_point_char and pass the result to parse_number. * m4/strtod.m4 (gl_PREREQ_STRTOD): Test whether nl_langinfo exists. * m4/strtold.m4 (gl_PREREQ_STRTOLD): Likewise. * tests/test-strtod1.c: New file. * tests/test-strtod1.sh: New file. * modules/strtod-tests (Files): Add test-strtod1.{sh,c}. Add locale-fr.m4 and its dependencies. (configure.ac): Invoke gt_LOCALE_FR, gt_LOCALE_FR_UTF8. (Makefile.am): Arrange to compile test-strtod1.c and run test-strtod1.sh. * tests/test-strtold1.c: New file. * tests/test-strtold1.sh: New file. * modules/strtold-tests (Files): Add test-strtold1.{sh,c}. Add locale-fr.m4 and its dependencies. (configure.ac): Invoke gt_LOCALE_FR, gt_LOCALE_FR_UTF8. (Makefile.am): Arrange to compile test-strtold1.c and run test-strtold1.sh. 2019-01-31 Bruno Haible strtod, strtold tests: Simplify tests. * tests/test-strtod.c (main): Assume no rounding errors for 0.5. * tests/test-strtold.c (main): Likewise. 2019-01-31 Bruno Haible strtod, strtold: Avoid unnecessary rounding errors. * lib/strtod.c (parse_number): Drop trailing zeroes before doing the decimal to DOUBLE conversion. 2019-01-31 Bruno Haible strtod, strtold: Work around HP-UX 11.31/ia64 bug. * lib/strtod.c (STRTOD): When there is an extra character after the exponent marker 'p', reparse the number. * doc/posix-functions/strtod.texi: Document the HP-UX 11.31 bug. * doc/posix-functions/strtold.texi: Likewise. 2019-01-29 Bruno Haible strtold: Add tests. * tests/test-strtold.c: New file, based on tests/test-strtod.c. * modules/strtold-tests: New file. 2019-01-29 Bruno Haible strtold: New module. * lib/stdlib.in.h (strtold): New declaration. * lib/strtold.c: New file. * lib/strtod.c: Consider USE_LONG_DOUBLE. (STRTOD, LDEXP, HAVE_UNDERLYING_STRTOD, DOUBLE, MIN, MAX, L_, USE_LDEXP): New macros. (LDEXP, scale_radix_exp, parse_number, STRTOD): Adapt for USE_LONG_DOUBLE. (underlying_strtod): Remove function. Replace with some macros. Re-add the code for a missing underlying function that was removed on 2013-02-19. * m4/strtold.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether strtold is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOLD, HAVE_STRTOLD, REPLACE_STRTOLD. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOLD, HAVE_STRTOLD, REPLACE_STRTOLD. * modules/strtold: New file. * doc/posix-functions/strtold.texi: Document the new module. 2019-01-29 Bruno Haible strtod: Fix compilation error on IRIX 6.5. * modules/strtod (Depends-on): Add 'math'. 2019-01-28 Bruno Haible Fix build error when building a shared libunistring on Android. * tests/uninorm/test-nfc.c (n): Don't define on Android. (main): Add 'volatile', to defeat a GCC optimization that would eliminate the reference. * tests/uninorm/test-nfd.c (n): Don't define on Android. (main): Add 'volatile', to defeat a GCC optimization that would eliminate the reference. * tests/uninorm/test-nfkc.c (n): Don't define on Android. (main): Add 'volatile', to defeat a GCC optimization that would eliminate the reference. * tests/uninorm/test-nfkd.c (n): Don't define on Android. (main): Add 'volatile', to defeat a GCC optimization that would eliminate the reference. 2019-01-27 Bruno Haible Avoid build errors due to wrong references between modules. * lib/uninorm/canonical-decomposition.c: Include "uninorm/decomposition-table.h", not "decomposition-table.h". * lib/uninorm/decomposition.c: Likewise. * lib/uninorm/u8-normalize.c: Include "uninorm/decompose-internal.h", not "decompose-internal.h". * lib/uninorm/u16-normalize.c: Likewise. * lib/uninorm/u32-normalize.c: Likewise. * lib/uninorm/uninorm-filter.c: Likewise. * lib/uninorm/nfkc.c: Likewise. * lib/uninorm/nfkd.c: Likewise. * lib/unicase/u8-casemap.c: Include "unicase/caseprop.h", not "caseprop.h". * lib/unicase/u8-ct-totitle.c: Likewise. * lib/unicase/u8-prefix-context.c: Likewise. * lib/unicase/u8-suffix-context.c: Likewise. * lib/unicase/u16-casemap.c: Likewise. * lib/unicase/u16-ct-totitle.c: Likewise. * lib/unicase/u16-prefix-context.c: Likewise. * lib/unicase/u16-suffix-context.c: Likewise. * lib/unicase/u32-casemap.c: Likewise. * lib/unicase/u32-ct-totitle.c: Likewise. * lib/unicase/u32-prefix-context.c: Likewise. * lib/unicase/u32-suffix-context.c: Likewise. * lib/unicase/u8-tolower.c: Include "unicase/unicasemap.h", not "unicasemap.h". * lib/unicase/u8-toupper.c: Likewise. * lib/unicase/u8-ct-tolower.c: Likewise. * lib/unicase/u8-ct-toupper.c: Likewise. * lib/unicase/u16-tolower.c: Likewise. * lib/unicase/u16-toupper.c: Likewise. * lib/unicase/u16-ct-tolower.c: Likewise. * lib/unicase/u16-ct-toupper.c: Likewise. * lib/unicase/u32-tolower.c: Likewise. * lib/unicase/u32-toupper.c: Likewise. * lib/unicase/u32-ct-tolower.c: Likewise. * lib/unicase/u32-ct-toupper.c: Likewise. * lib/unicase/u8-ct-casefold.c: Include "unicase/unicasemap.h", not "unicasemap.h", and "unicase/casefold.h", not "casefold.h". * lib/unicase/u16-ct-casefold.c: Likewise. * lib/unicase/u32-ct-casefold.c: Likewise. 2019-01-27 Bruno Haible gperf: Fix error when this module is required by some test module. * modules/gperf (Applicability): Set to 'all'. 2019-01-27 Bruno Haible tmpfile: Add support for Android. * m4/tmpfile.m4 (gl_FUNC_TMPFILE): Add a runtime test whether tmpfile() works. * lib/tmpfile.c (tmpfile): Add an alternative implementation for Android. * modules/tmpfile (Depends-on): Add 'stdbool'. * doc/posix-functions/tmpfile.texi: Mention the Android bug. * modules/argv-iter-tests (Depends-on): Add 'tmpfile'. 2019-01-27 Akim Demaille bitsetv: allow free on NULL. * lib/bitsetv.c (bitsetv_free): Do nothing when the bitsetv is NULL. 2019-01-27 Bruno Haible test-framework-sh: Improve maintainability. * tests/init.sh: Clarify what belongs together. Reorder definitions. 2019-01-27 Bruno Haible tests: Don't assume that /tmp exists. * tests/test-set-mode-acl-1.sh: Skip the test if /tmp does not exist. * tests/test-copy-acl-1.sh: Likewise. * tests/test-file-has-acl-1.sh: Likewise. * tests/test-copy-file-1.sh: Likewise. 2019-01-27 Bruno Haible tests: Accommodate a shell that is not in /bin/sh. * tests/init.sh (setup_): Set srcdir and builddir. (BOURNE_SHELL): New variable. * modules/acl-tests (Depends-on): Add 'test-framework-sh'. * modules/file-has-acl-tests (Depends-on): Likewise. * modules/copy-file-tests (Depends-on): Likewise. * tests/test-set-mode-acl-1.sh: Use the test framework. Invoke shell scripts through $BOURNE_SHELL. * tests/test-set-mode-acl-2.sh: Likewise. * tests/test-copy-acl-1.sh: Likewise. * tests/test-copy-acl-2.sh: Likewise. * tests/test-file-has-acl-1.sh: Likewise. * tests/test-file-has-acl-2.sh: Likewise. * tests/test-copy-file-1.sh: Likewise. * tests/test-copy-file-2.sh: Likewise. * tests/test-set-mode-acl.sh (builddir): Consider value set by the invoker. * tests/test-copy-acl.sh (builddir): Likewise. * tests/test-file-has-acl.sh (builddir): Likewise. * tests/test-copy-file.sh (builddir): Likewise. * tests/test-vc-list-files-cvs.sh: Don't create shims for executables in build-aux/. Instead, invoke shell scripts through $BOURNE_SHELL. * tests/test-vc-list-files-git.sh: Likewise. 2019-01-27 Bruno Haible tests: Fix some "unused variable" warnings. * tests/test-fts.c (fts_dealloc): Remove unused variable. * tests/unigbrk/test-uc-grapheme-breaks.c (main): Likewise. * tests/test-striconveh.c (main): Move some variable into the '#if HAVE_ICONV'. * tests/test-striconveha.c (main): Likewise. * tests/uniconv/test-u8-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-conv-to-enc.c (main): Likewise. * tests/uniconv/test-u16-conv-to-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-to-enc.c (main): Likewise. * tests/uniconv/test-u8-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-strconv-to-enc.c (main): Likewise. * tests/uniconv/test-u16-strconv-to-enc.c (main): Likewise. * tests/uniconv/test-u32-strconv-to-enc.c (main): Likewise. * tests/test-tsearch.c (main): Move some variable into the '#if HAVE_INITSTATE'. 2019-01-27 Bruno Haible unigbrk/uc-grapheme-breaks: Fix build failure. * lib/unigbrk/uc-grapheme-breaks.c: Don't include unistr.h. * modules/unigbrk/uc-grapheme-breaks (Makefile.am): Fix typo. 2019-01-27 Bruno Haible mountlist: Merge two .m4 files. * m4/mountlist.m4 (gl_MOUNTLIST): Inline gl_LIST_MOUNTED_FILE_SYSTEMS. (AC_FUNC_GETMNTENT): Move to here, from m4/ls-mntd-fs.m4. * m4/ls-mntd-fs.m4: Remove file. * modules/mountlist (Files): Remove m4/ls-mntd-fs.m4. 2019-01-27 Bruno Haible tests: Enable Linux specific tests on Android. * tests/test-flock.c (main): Treat Android like Linux. * tests/test-openat-safer.c (main): Likewise. 2019-01-27 Bruno Haible relocatable-prog: Use Linux code on Android. * lib/progreloc.c: Treat Android like Linux. 2019-01-26 Bruno Haible getloadavg: Add support for Android. * lib/getloadavg.c: Treat Android like Linux. 2019-01-26 Bruno Haible vma-iter: Add support for Android. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define on Android as well. * lib/vma-iter.c: Treat Android like Linux. * lib/get-rusage-data.c (get_rusage_data): Likewise. 2019-01-26 Bruno Haible fts: Optimize on Android. * lib/fts.c: Treat Android like Linux. 2019-01-26 Bruno Haible fts: Add support for Android. * m4/fts.m4 (gl_FUNC_FTS_CORE): Avoid conflicts between the symbols defined by this module and the ones in libc. * tests/test-fts.c (main): Treat mkdir error EMLINK like EMFILE. 2019-01-26 Bruno Haible mountlist: Use Linux code on Android. * lib/mountlist.c (setmntent, endmntent): Define fallbacks. (unescape_tab, read_file_system_list): Enable Linux code on Android as well. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Test for setmntent and endmntent. * modules/mountlist (Depends-on): Add 'getline'. 2019-01-26 Bruno Haible localename tests: Fix test failure on Android. * modules/localename-tests (Depends-on): Add 'setlocale'. 2019-01-26 Bruno Haible mountlist: Port better to Android. * lib/mountlist.c (MOUNTED): Redefine on Android. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Redefine MOUNTED on Android. 2019-01-26 Bruno Haible striconveh: Fix use of uninitialized iconv_t. Reported by Tim Rühsen in . * lib/striconveh.c (iconveh_open): Correct the iconv_close argument. 2019-01-26 Bruno Haible nonblocking-socket-tests: Fix test failure on Android 4.3. * tests/test-nonblocking-socket.h (SOCKET_HAS_LARGE_BUFFER): Define to 1 also on Android. 2019-01-26 Bruno Haible sh-filename: Add support for Android 4.3. * m4/sh-filename.m4 (gl_SH_FILENAME): Set to "sh" on Android. 2019-01-26 Bruno Haible ptsname_r: Work around bug on Android 4.3. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): Define HAVE_ESSENTIALLY_WORKING_PTSNAME_R. Test whether the return value is correct. * lib/ptsname_r.c (__ptsname_r): If HAVE_ESSENTIALLY_WORKING_PTSNAME_R is defined, just fix the return value. * doc/glibc-functions/ptsname_r.texi: Mention the Android bug. Reword: The behaviour of musl libc is nothing to be "fixed", since it is compliant with the next POSIX standard. 2019-01-26 Bruno Haible ttyname_r: Work around bug on Android 4.3. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Test whether ttyname_r is a stub. * lib/ttyname_r.c (ttyname_r): Implement for Android. * doc/posix-functions/ttyname_r.texi: Mention the Android bug. * doc/posix-functions/ttyname.texi: Likewise. 2019-01-25 Bruno Haible getprogname: Port to Android 4.3. * lib/getprogname.c (getprogname): On Android, take only the last component of __progname. 2019-01-25 Bruno Haible wcrtomb: Work around bug on Android 4.3. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Test also whether wcrtomb works in the C locale. * lib/wcrtomb.c (wcrtomb): Provide alternate implementation for Android, which does not have the 'wctomb' function. * doc/posix-functions/wcrtomb.texi: Mention the Android bug. * tests/test-wcrtomb.c (main): Accept argument '5'. * tests/test-wcrtomb.sh: Add tests in the POSIX locale. 2019-01-25 Bruno Haible setlocale: Work around bug on Android 4.3. * m4/setlocale.m4 (gl_FUNC_SETLOCALE): Test whether setlocale supports the "C" locale. * lib/setlocale.c (setlocale_unixlike): New wrapper for Android. * doc/posix-functions/setlocale.texi: Mention the Android bug. 2019-01-24 Bruno Haible memchr: Work around bug on Android <= 5.0. * m4/memchr.m4 (gl_FUNC_MEMCHR): Add test against the Android bug. * doc/posix-functions/memchr.texi: Mention the Android bug. 2019-01-24 Bruno Haible random: Fix compilation error on Android 4.3. * lib/stdlib.in.h (random, srandom): Test also REPLACE_RANDOM. (initstate): Test REPLACE_INITSTATE and HAVE_INITSTATE, not HAVE_RANDOM. (setstate): Test REPLACE_SETSTATE and HAVE_SETSTATE, not HAVE_RANDOM. * m4/random.m4 (gl_FUNC_RANDOM): Set HAVE_INITSTATE, HAVE_SETSTATE, REPLACE_RANDOM, REPLACE_INITSTATE, REPLACE_SETSTATE. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_INITSTATE, HAVE_SETSTATE, REPLACE_RANDOM, REPLACE_INITSTATE, REPLACE_SETSTATE. * modules/stdlib (Makefile.am): Substitute HAVE_INITSTATE, HAVE_SETSTATE, REPLACE_RANDOM, REPLACE_INITSTATE, REPLACE_SETSTATE. * modules/random (Depends-on, configure.ac): Test also REPLACE_RANDOM, REPLACE_INITSTATE, REPLACE_SETSTATE. * doc/posix-functions/random.texi: Correct the description of the situation on Android. * doc/posix-functions/srandom.texi: Likewise. * doc/posix-functions/rand.texi: Likewise. * doc/posix-functions/srand.texi: Likewise. 2019-01-24 Bruno Haible mbtowc: Fix compilation error on Android 4.3. * lib/stdlib.in.h (mbtowc): Test also HAVE_MBTOWC. * m4/mbtowc.m4 (gl_FUNC_MBTOWC): Test whether mbtowc exists. Set HAVE_MBTOWC. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether mbtowc is declared. (gl_STDLIB_H_DEFAULTS): Initialize HAVE_MBTOWC. * modules/stdlib (Makefile.am): Substitute HAVE_MBTOWC. * modules/mbtowc (Depends-on, configure.ac): Test also HAVE_MBTOWC. * doc/posix-functions/mbtowc.texi: Mention the change. 2019-01-24 Bruno Haible fdatasync: Fix compilation error on Android 4.3. * m4/fdatasync.m4 (gl_FUNC_FDATASYNC): On platforms other than Solaris, test whether fdatasync() exists. 2019-01-24 Bruno Haible unlinkat: Fix compilation error on Android 4.3. * lib/unistd.in.h: Include when module 'unlinkat' is in use also on Android. * doc/posix-functions/unlinkat.texi: Mention the issue. 2019-01-24 Bruno Haible renameat: Fix compilation error on Android 4.3. * lib/stdio.in.h: Include when module 'renameat' is in use. * doc/posix-functions/renameat.texi: Mention the issue. 2019-01-24 Bruno Haible fchownat: Fix compilation error on Android 4.3. * lib/unistd.in.h: Include when module 'fchownat' is in use. * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG, gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): Include also . * doc/posix-functions/fchownat.texi: Mention the issue. 2019-01-23 Bruno Haible gnulib-tool: Support running testdirs on Android. * build-aux/test-driver.diff: New file. * gnulib-tool (func_create_testdir, func_create_megatestdir): Patch build-aux/test-driver after running automake. 2019-01-23 Akim Demaille relocatable-prog: avoid warnings from Automake * modules/relocatable-prog: Don't declare PHONY dependencies in Automake conditionals. 2019-01-23 Akim Demaille array-list: Pacify warnings about unused arguments (-Wunused-parameter). * lib/gl_array_list.c (gl_array_iterator_free): "Use" the argument. 2019-01-23 Bruno Haible threadlib: Revert commit from 2018-06-25. We now have a better fix. * m4/threadlib.m4 (gl_THREADLIB_BODY): Don't attempt to defeat a preceding -Wl,--as-needed option. Don't check whether the linker supports --as-needed/--no-as-needed and --push-state/--pop-state. 2019-01-23 Bruno Haible thread: Force linking with -lpthread, even when --as-needed is in use. Reported by Richard W.M. Jones in . * lib/glthread/thread.h (pthread_create): Don't declare weak. 2019-01-23 Akim Demaille Bruno Haible relocatable: avoid compiler warnings (-Wshadow) * lib/relocatable.c (compute_curr_prefix): Rename local variables to avoid name collisions with global variables. 2019-01-22 Bruno Haible vasnprintf: Don't use %n on Android. Reported and fix suggested by Hugo Beauzée-Luyssen in . * lib/vasnprintf.c (VASNPRINTF): Don’t use %n on Android. 2019-01-22 Bruno Haible *printf: Support cross-compilation to Android. * m4/printf.m4: Add cross-compilation guesses for Android. 2019-01-21 Bruno Haible diacrit: Mark deprecated. * modules/diacrit (Status, Notice): Mark as deprecated. * NEWS: Mention it. 2019-01-20 Bruno Haible rintl: Override broken implementation on NetBSD. * lib/math.in.h (rintl): Test also REPLACE_RINTL. * m4/rintl.m4 (gl_FUNC_RINTL): Add test for negative arguments. Set REPLACE_RINTL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_RINTL. * modules/math (Makefile.in): Substitute REPLACE_RINTL. * modules/rintl (Depends-on, configure.ac): Test REPLACE_RINTL. * doc/posix-functions/rintl.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible log10l: Work around inaccurate implementation on NetBSD. * m4/log10l.m4 (gl_FUNC_LOG10L_WORKS): Add test for a certain accuracy. * lib/log10l.c: Comment out too simplistic override. * doc/posix-functions/log10l.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible logl: Work around inaccurate implementation on NetBSD. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): Add test for a certain accuracy. * lib/logl.c: Comment out unused code. * doc/posix-functions/logl.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible expm1l: Work around inaccurate implementation on NetBSD. * lib/math.in.h (expm1l): Test also REPLACE_EXPM1L. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Add test for a certain accuracy. Set REPLACE_EXPM1L. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_EXPM1L. * modules/math (Makefile.in): Substitute REPLACE_EXPM1L. * modules/expm1l (Depends-on, configure.ac): Test REPLACE_EXPM1L. * doc/posix-functions/expm1l.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible expl: Work around inaccurate implementation on NetBSD. * lib/math.in.h (expl): Test also REPLACE_EXPL. * m4/expl.m4 (gl_FUNC_EXPL): Add test for a certain accuracy. Set REPLACE_EXPL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_EXPL. * modules/math (Makefile.in): Substitute REPLACE_EXPL. * modules/expl (Depends-on, configure.ac): Test REPLACE_EXPL. * doc/posix-functions/expl.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible exp2l: Work around inaccurate implementation on NetBSD. * m4/exp2l.m4 (gl_FUNC_EXP2L): Add test for a certain accuracy. * doc/posix-functions/exp2l.texi: Mention the NetBSD bug. 2019-01-20 Bruno Haible floor, floorl: Avoid autoconf warnings. * modules/floor (configure.ac): Use AC_REQUIRE. * modules/floorl (configure.ac): Likewise. 2019-01-20 Bruno Haible Defeat current GCC optimizations in math autoconf tests. * m4/cbrtl.m4 (gl_FUNC_CBRTL): Mark function pointer as 'volatile'. * m4/ceil.m4 (gl_FUNC_CEIL): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/exp2l.m4 (gl_FUNC_EXP2L): Likewise. * m4/expm1.m4 (gl_FUNC_EXPM1): Likewise. * m4/floor.m4 (gl_FUNC_FLOOR): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF): Likewise. * m4/fmod.m4 (gl_FUNC_FMOD): Likewise. * m4/fmodf.m4 (gl_FUNC_FMODF): Likewise. * m4/fmodl.m4 (gl_FUNC_FMODL): Likewise. * m4/hypot.m4 (gl_FUNC_HYPOT): Likewise. * m4/hypotf.m4 (gl_FUNC_HYPOTF): Likewise. * m4/hypotl.m4 (gl_FUNC_HYPOTL): Likewise. * m4/ilogb.m4 (gl_FUNC_ILOGB_WORKS): Likewise. * m4/ilogbf.m4 (gl_FUNC_ILOGBF_WORKS): Likewise. * m4/ilogbl.m4 (gl_FUNC_ILOGBL_WORKS): Likewise. * m4/log.m4 (gl_FUNC_LOG): Likewise. * m4/logf.m4 (gl_FUNC_LOGF): Likewise. * m4/log10.m4 (gl_FUNC_LOG10): Likewise. * m4/log10f.m4 (gl_FUNC_LOG10F): Likewise. * m4/log1p.m4 (gl_FUNC_LOG1P): Likewise. * m4/log1pf.m4 (gl_FUNC_LOG1PF): Likewise. * m4/log1pl.m4 (gl_FUNC_LOG1PL): Likewise. * m4/log2.m4 (gl_FUNC_LOG2): Likewise. * m4/log2f.m4 (gl_FUNC_LOG2F): Likewise. * m4/modf.m4 (gl_FUNC_MODF): Likewise. * m4/modff.m4 (gl_FUNC_MODFF): Likewise. * m4/modfl.m4 (gl_FUNC_MODFL): Likewise. * m4/remainder.m4 (gl_FUNC_REMAINDER): Likewise. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Likewise. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. 2019-01-19 Pádraig Brady gettext: support disabling use of VLAs * lib/gettext.h: Disable use of VLAs if GNULIB_NO_VLA is defined 2019-01-17 KO Myung-Hun sys_stat: Fix 'implicit declaration of function' warning on OS/2 kLIBC. * lib/sys_stat.in.h [kLIBC]: Include . 2019-01-17 KO Myung-Hun fcntl: Fix syntax error (regression from 2018-10-05). * lib/fcntl.c (klibc_fcntl): Remove mis-placed ';'. 2019-01-13 Akim Demaille relocatable: improve documentation. * doc/relocatable-maint.texi (Supporting Relocation): For substitutions performed by config.status, we need more variables (for instance datarootdir defaults to '${prefix}/share' so we need prefix). 2019-01-13 Akim Demaille backup: update dependencies * modules/backup-rename (Depends-on): It now depends on opendirat instead of opendir. It also uses stdint, and xalloc-oversized. But no longer dirfd. * modules/backupfile (Depends-on): Add xalloc-oversized. 2019-01-13 Bruno Haible getcwd: Fix test failure when building on a Linux 9p file system. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): On Linux, treat error EINVAL from mkdir like ENAMETOOLONG. * tests/test-getcwd.c (test_long_name): Likewise. 2019-01-12 Tim Rühsen Fix typos found by codespell. * lib/*.[hc]: Fix typos in comments. * pygnulib/*.py: Fix typos in error messages and comments. 2019-01-12 Bruno Haible doc: Fix documentation about container data types. Reported by Werner Lemberg . * doc/containers.texi (Container data types): Fix typo. 2019-01-10 Bruno Haible verify: Enable _GL_HAVE_STATIC_ASSERT for recent G++ versions. Reported by Reuben Thomas . * lib/verify.h (_GL_HAVE_STATIC_ASSERT): Define for g++ versions >= 6. 2019-01-06 Bruno Haible maintainer-makefile: Make the configure.ac section optional. * top/maint.mk (GREP, SED): Define if not defined. 2019-01-06 Bruno Haible localename: Assume setlocale function. * lib/localename.c (gl_locale_name_posix): Assume setlocale exists. * m4/localename.m4 (gl_LOCALENAME): Don't test whether setlocale exists. 2019-01-06 Bruno Haible doc: Add documentation about container data types. * doc/containers.texi: New file. * doc/gnulib.texi (Particular Modules): Include it. 2019-01-06 Bruno Haible doc: Update documentation about 'progname' module. * doc/progname.texi: Rename from doc/error.texi. Change node name and title. Rewrite. * doc/gnulib.texi (Particular Modules): Update. 2019-01-06 Bruno Haible doc: Document the xstdopen and *-safer modules. * doc/xstdopen.texi: New file. * doc/gnulib.texi (Particular Modules): Include it. 2019-01-06 Bruno Haible xstdopen: Add tests. * tests/test-xstdopen.c: New file. * tests/test-xstdopen.sh: New file. * modules/xstdopen-tests: New file. xstdopen: New module. * lib/xstdopen.h: New file. * lib/xstdopen.c: New file. * modules/xstdopen: New file. 2019-01-06 Bruno Haible stdopen: Fix compilation error with IRIX cc. * lib/stdopen.c (stdopen): Do not use C99-style decl in loop. 2019-01-05 Paul Eggert xfreopen need not include stdio--.h * lib/xfreopen.c: Do not include stdio--.h. xfreopen need not depend on freopen-safer * modules/xfreopen (Depends-on): Depend on freopen, not freopen-safer. stdopen: modernize and simplify * lib/stdopen.c: Update copyright date Do not include sys/types.h; no longer needed these days. (stdopen): Use C99-style decl in loop. Return int errno value, rather than just a bool. Do not worry about fd mismatches, since the caller cares only if 0, 1, 2 are occupied. * lib/stdopen.h: No need to include . * m4/stdopen.m4: Remove. * modules/stdopen: New file. stdopen: copy from last use in coreutils * lib/stdopen.c, lib/stdopen.h, m4/stdopen.m4: New files, taken from their last commit in coreutils 2007-07-23T12:35:58Z!jim@meyering.net 71aa3ea88084d17bcb4fc1031ad7b66f8647115e. 2019-01-05 Bruno Haible argp: Don't pass an invalid argument to dgettext(). Reported by He X . * lib/argp-help.c (print_header, argp_doc): Don't pass a NULL doc to dgettext(). 2019-01-05 Bruno Haible argp: Don't pass an invalid argument to dgettext(). Reported by He X . * lib/argp.h (struct argp): Clarify that the args_doc field may be NULL. * lib/argp-help.c (argp_args_usage): Don't pass a NULL args_doc to dgettext(). 2018-12-22 Paul Eggert stdioext: port to newer 32-bit Android Problem reported by Tom Yan in: https://lists.gnu.org/archive/html/bug-gnulib/2018-07/msg00014.html * lib/stdio-impl.h (_gl_FILE_flags_t) [__ANDROID__]: New macro. (fp_) [__ANDROID__]: Use it. 2019-01-04 Bruno Haible lock: Fix link error with --enable-threads=pth. * lib/glthread/lock.h (pth_cond_init, pth_cond_await, pth_cond_notify): Mark as weak. 2019-01-04 Bruno Haible Fix link errors in unit tests. Reported by Tom G. Christensen . * modules/bitset-tests (Makefile.am): Link test-bitset against libintl. * modules/array-map-tests (Makefile.am): Link test-array_map against libintl. * modules/array-set-tests (Makefile.am): Link test-array_set against libintl. * modules/hash-map-tests (Makefile.am): Link test-hash_map against libintl. * modules/hash-set-tests (Makefile.am): Link test-hash_set against libintl. * modules/linkedhash-map-tests (Makefile.am): Link test-linkedhash_map against libintl. * modules/linkedhash-set-tests (Makefile.am): Link test-linkedhash_set against libintl. 2019-01-04 Bruno Haible Fix incorrect 'Link' sections. * modules/regex (Link): Mention the link requirement of module 'lock'. * modules/regex-tests (Makefile.am): Don't use LIB_PTHREAD. 2019-01-04 Bruno Haible Fix some 'Link' sections. * modules/c-stack (Link): Add link directive from the 'gettext-h' dependency. * modules/getaddrinfo (Link): Likewise. 2019-01-04 Bruno Haible Remove redundant 'Link' sections. * modules/canon-host (Link): Remove section. * modules/timevar (Link): Likewise. 2019-01-04 Bruno Haible Remove incorrect 'Link' sections. * modules/acl (Link): Remove section. Use combined 'Link' sections from the dependencies instead. * modules/crypto/md5 (Link): Likewise. * modules/crypto/sha1 (Link): Likewise. * modules/crypto/sha256 (Link): Likewise. * modules/crypto/sha512 (Link): Likewise. * modules/faccessat (Link): Likewise. * modules/fdutimensat (Link): Likewise. * modules/iconv_open-utf (Link): Likewise. * modules/propername (Link): Likewise. * modules/qacl (Link): Likewise. * modules/unicodeio (Link): Likewise. * modules/utimecmp (Link): Likewise. * modules/utimensat (Link): Likewise. * modules/xstriconv (Link): Likewise. * modules/xstriconveh (Link): Likewise. 2019-01-04 Bruno Haible gnulib-tool: New option --extract-recursive-link-directive. * gnulib-tool (func_usage): Document the new options --extract-recursive-dependencies, --extract-recursive-link-directive. (func_verify_module): Document output variables. (func_get_dependencies_recursively): New function. (func_get_link_directive_recursively): New function. Use them to implement the new options --extract-recursive-dependencies, --extract-recursive-link-directive. * doc/gnulib-tool.texi (Link-time requirements): New section. 2019-01-04 Bruno Haible Clarify meaning of 'Link' section in module description. * doc/gnulib.texi (Module description): Clarify the meaning of the 'Link' section versus the one of the dependencies. * NEWS: Mention the change. 2019-01-04 Bruno Haible pselect: Fix module description. * modules/pselect (Link): Put one link option per line. 2019-01-04 Bruno Haible cosl: Fix module description. * modules/cosl (Link): Fix typo. * modules/mathl (configure.ac): Likewise. 2019-01-04 Bruno Haible c-xvasprintf: Fix module dependencies. * modules/c-xvasprintf (Depends-on): Add 'xalloc-die'. 2019-01-04 Akim Demaille bootstrap: die when some submodules are not initialized * build-aux/bootstrap: Make sure all submodules are initialized. 2019-01-04 Bruno Haible bitsetv: Fix module dependencies. * lib/bitsetv.c: Include xalloc.h. * modules/bitsetv (Depends-on): Add 'xalloc'. 2019-01-04 Bruno Haible xmemdup0: Remove redundant code. * lib/xmemdup0.h (xalloc_die): Remove declaration. 2019-01-04 Bruno Haible backupfile: Fix module dependencies. * modules/backupfile (Depends-on): Add 'xalloc'. 2019-01-03 Paul Eggert bitset, crypto/gc: fix conflicts with Solaris 11 * lib/bitset.h (_GL_BITSET_H): Rename from _BITSET_H, to avoid clash with Solaris 11 . * lib/gc.h (_GL_GC_H): Rename from GC_H, to avoid clash with Solaris 11 . 2019-01-04 Bruno Haible safe-read, safe-write: Fix conflict with Illumos-Joyent . Reported by Andy Fiddaman . * lib/sys-limits.h: Add a '_GL' prefix to the guard symbol. 2019-01-03 Eric Blake maintainer-makefile: fix typo in previous patch * top/maint.mk (_sc_search_regexp): Fix my accidental corruption of Roman's work. 2019-01-02 Roman Bolshakov (tiny change) maintainer-makefile: prefer $(GREP) over grep * modules/maintainer-makefile (configure.ac): Ensure $(GREP) is defined. * top/maint.mk: Use it everywhere. maintainer-makefile: split long argument lines * top/maint.mk: Use xargs to split $(VC_LIST_EXCEPT) usage where it would be too long for exec limits on BSD. 2018-12-27 Paul Eggert mkfifo: bring back HAVE_MKFIFO macro * m4/mkfifo.m4 (gl_FUNC_MKFIFO): #define HAVE_MKFIFO as needed. Problem reported by Andrew Janke in: https://lists.gnu.org/r/bug-gnulib/2018-12/msg00147.html 2018-12-21 Bruno Haible Assume Autoconf >= 2.63. * modules/stdarg (configure.ac-early): Remove comment about Autoconf versions < 2.60. 2018-12-21 Bruno Haible memcmp: Mention the clang bug. * tests/test-memcmp.c: Add comment about a known test failure. * doc/posix-functions/memcmp.texi: Mention the clang bug. 2018-12-20 Jim Meyering revert v0.1-2213-gae4b73e28 and part of v0.1-2281-g95cd86dd7 v0.1-2213-gae4b73e28 caused a regression in grep-3.2 (no match): echo '123-x'|LC_ALL=C grep -E '.\bx' The goal is to revert the first, but reverting it requires to restore the function deleted in the second. I ran this to restore the deleted function: git show v0.1-2281-g95cd86dd7 lib/dfa.c \ | perl -0777 -pe 's/^@@[^\n]*dfaan.*//ms' \ | patch -R -p1 * lib/dfa.c (charclass_context): Restore deleted function. Reverting the primary commit removes this change: dfa: Simplify a building state * lib/dfa.c (build_state): Simplify a building state. 2018-12-20 Paul Eggert version-etc: allow zero authors * lib/version-etc.c (version_etc_arn): If no authors are given, omit authorship info instead of dumping core. 2018-12-19 Bruno Haible lchown tests: Be more permissive regarding errno values. Reported by Ivan Zakharyaschev . * tests/test-lchown.h (test_lchown): Recognize EOPNOTSUPP as an alternative to ENOSYS. * modules/lchown-tests (Depends-on): Add 'errno'. * modules/fchownat-tests (Depends-on): Likewise. 2018-12-18 Bruno Haible duplocale: Avoid test failure on AIX 7. * modules/duplocale-tests (Files): Add m4/intl-thread-locale.m4. (configure.ac): Invoke gt_FUNC_USELOCALE. * tests/test-duplocale.c: Test HAVE_WORKING_USELOCALE instead of HAVE_USELOCALE. Assume that nl_langinfo_l only works when uselocale works. 2018-12-18 Bruno Haible localename: Fix test failure on AIX 7. Reported by Assaf Gordon in . * m4/intl-thread-locale.m4 (gt_FUNC_USELOCALE): New macro. (gt_INTL_THREAD_LOCALE_NAME): Invoke it. Test gt_cv_func_uselocale_works instead of ac_cv_func_uselocale. * lib/localename.c: Test HAVE_WORKING_USELOCALE instead of HAVE_USELOCALE. * lib/localename-table.h: Likewise. * lib/localename-table.c: Likewise. * tests/test-localename.c: Likewise. * doc/posix-functions/uselocale.texi: Mention the AIX problem. 2018-12-18 Bruno Haible localename: Update comments regarding Cygwin. * lib/localename.c: Update comment. * doc/posix-functions/uselocale.texi: Update platforms list. * doc/posix-functions/newlocale.texi: Likewise. * doc/posix-functions/duplocale.texi: Likewise. * doc/posix-functions/freelocale.texi: Likewise. 2018-12-16 Bruno Haible c-stack: Fix for Linux/sparc. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Set ac_cv_sys_xsi_stack_overflow_heuristic to 'no' on Linux/sparc. 2018-12-16 Bruno Haible localename: Avoid test failure on some glibc systems. * tests/test-localename.c (test_locale_name, test_locale_name_posix): Unset environment variables that might disturb the first setlocale call, and verify that this setlocale call succeeds. 2018-12-16 Assaf Gordon random: Fix build error on native Windows (regression from 2018-06-21). * lib/random.c (__srandom, __initstate, __setstate, __random, __srandom_r, __initstate_r, __setstate_r, __random_r) [!_LIBC]: Redirect to the symbols without '__' prefix. 2018-12-16 Bruno Haible obstack, libc-config: Support HP-UX cc in C99 mode. * lib/obstack.h (__FLEXIBLE_ARRAY_MEMBER): Treat HP-UX cc as a pre-C99 compiler, even when in C99 mode. * lib/cdefs.h (__flexarr): Likewise. * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Update comment. 2018-12-16 Bruno Haible localename: Fix test failure on OpenBSD >= 6.2. * m4/intl-thread-locale.m4 (gt_INTL_THREAD_LOCALE_NAME): Test for fake locale system. Define HAVE_FAKE_LOCALES in this case. * lib/localename.c (HAVE_GOOD_USELOCALE): New macro. Use it instead of HAVE_USELOCALE. * tests/test-localename.c (HAVE_GOOD_USELOCALE): New macro. Use it instead of HAVE_NEWLOCALE && HAVE_USELOCALE. * doc/posix-functions/uselocale.texi: Mention OpenBSD problem. Update platforms list. * doc/posix-functions/newlocale.texi: Likewise. * doc/posix-functions/duplocale.texi: Update platforms list. * doc/posix-functions/freelocale.texi: Likewise. 2018-12-16 Bruno Haible duplocale tests: Re-enable the test on platforms without . * tests/test-duplocale.c: Use more fine-grained #ifs to re-enable most of the test, on platforms without . 2018-12-16 Bruno Haible localename: Update comments. * lib/localename.c (HAVE_USELOCALE): Update list of platforms. 2018-12-15 Jim Meyering regex: fix indentation * m4/regex.m4 (gl_REGEX): Indent with spaces, not TABs. 2018-12-15 Bruno Haible openat-safer tests: Avoid test failure on NetBSD 8. * tests/test-openat-safer.c (main): Execute a Linux specific test only on Linux. 2018-12-15 Jim Meyering regex: work around a bug in glibc-2.27 and prior * m4/regex.m4 (gl_REGEX): Reject any system regexp that gets a failed assertion for /0|()0|\1|0/. * tests/test-regex.c (main): Add the same test here. 2018-12-15 Bruno Haible localename: Fix use of uninitialized shell variable. * m4/intl-thread-locale.m4 (gt_INTL_THREAD_LOCALE_NAME): Initialize gt_cv_locale_solaris114 always before use. Remove assignment without effect. 2018-12-15 Bruno Haible dfa tests: Avoid test failure on Alpine Linux. * tests/dfa-match.sh (timeout_10): Accommodate the BusyBox 'timeout' command found on Alpine Linux. 2018-12-15 Jim Meyering dfa: avoid new warnings from gcc These would prevent building with -Werror and a Dec snapshot of gcc. * lib/dfa.c (dfaanalyze): Avoid shadowing warnings for "pos". Rename each inner instance to "p". (charclass_context): Remove unused static function. 2018-12-14 Paul Eggert mkdir-p: improve diagnostic for FUSE mounts Problem reported by Niklas Hambüchen in: https://lists.gnu.org/r/bug-gnulib/2018-12/msg00074.html * lib/mkdir-p.c (make_dir_parents): In diagnostic, prefer stat errno to mkdir errno if the stat errno is likely more interesting. 2018-12-14 Bruno Haible hash-map: Add tests. * tests/test-hash_map.c: New file. * modules/hash-map-tests: New file. linkedhash-map: Add tests. * tests/test-linkedhash_map.c: New file. * modules/linkedhash-map-tests: New file. array-map: Add tests. * tests/test-array_map.c: New file. * modules/array-map-tests: New file. xmap: New module. * lib/gl_xmap.h: New file. * lib/gl_xmap.c: New file. * modules/xmap: New file. hash-map: New module. * lib/gl_hash_map.h: New file. * lib/gl_hash_map.c: New file. * modules/hash-map: New file. linkedhash-map: New module. * lib/gl_linkedhash_map.h: New file. * lib/gl_linkedhash_map.c: New file. * lib/gl_anyhash1.h: Update comments. * lib/gl_anyhash2.h: Likewise. * modules/linkedhash-map: New file. array-map: New module. * lib/gl_array_map.h: New file. * lib/gl_array_map.c: New file. * modules/array-map: New file. map: New module. * lib/gl_map.h: New file. * lib/gl_map.c: New file. * lib/gl_omap.h (gl_mapkey_dispose_fn, gl_mapvalue_dispose_fn): Avoid conflict with gl_map.h. * modules/map: New file. 2018-12-13 Bruno Haible select tests: Avoid test failure on Cygwin. * tests/test-select.h (test_bad_fd): Use an fd < FD_SETSIZE. 2018-12-13 Bruno Haible localtime-buffer: Avoid endless recursion in localtime and gmtime. * lib/localtime-buffer.c: Undefine localtime and gmtime before use. 2018-12-13 Bruno Haible localeconv tests: Avoid test failure on Cygwin. * tests/test-localeconv.c (main): On Cygwin, skip the 'grouping' and 'mon_grouping' tests. 2018-12-11 Bruno Haible omap: Don't dispose the old value when the function returns it. * lib/gl_array_omap.c (gl_array_remove_at): Don't invoke the vdispose_fn here. * lib/gl_avltree_omap.c (NODE_PAYLOAD_DISPOSE): Likewise. * lib/gl_rbtree_omap.c (NODE_PAYLOAD_DISPOSE): Likewise. * lib/gl_omap.h (gl_omap_nx_put, gl_omap_remove): Invoke the vdispose_fn here. array-omap, avltree-omap, rbtree-omap: Tweak style. * lib/gl_anytree_omap.h (gl_tree_nx_getput): Return 1 or 0, not true or false. * lib/gl_array_omap.c (gl_array_nx_getput): Likewise. rbtree-omap: Add tests. * tests/test-rbtree_omap.c: New file. * modules/rbtree-omap-tests: New file. avltree-omap: Add tests. * tests/test-avltree_omap.c: New file. * modules/avltree-omap-tests: New file. array-omap: Add tests. * tests/test-array_omap.c: New file. * modules/array-omap-tests: New file. xomap: New module. * lib/gl_xomap.h: New file. * lib/gl_xomap.c: New file. * modules/xomap: New file. rbtree-omap: New module. * lib/gl_rbtree_omap.h: New file. * lib/gl_rbtree_omap.c: New file. * lib/gl_rbtree_ordered.h: Code moved to here from lib/gl_rbtree_oset.c. Parameterize. * lib/gl_rbtree_oset.c: Include gl_rbtree_ordered.h. * modules/rbtree-omap: New file. * modules/rbtree-oset (Files): Add lib/gl_rbtree_ordered.h. (Makefile.am): Add gl_rbtree_ordered.h to lib_SOURCES. avltree-omap: New module. * lib/gl_avltree_omap.h: New file. * lib/gl_avltree_omap.c: New file. * lib/gl_avltree_ordered.h: Code moved to here from lib/gl_avltree_oset.c. Parameterize. * lib/gl_avltree_oset.c: Include gl_avltree_ordered.h. * lib/gl_anytree_omap.h: New file. * modules/avltree-omap: New file. * modules/avltree-oset (Files): Add lib/gl_avltree_ordered.h. (Makefile.am): Add gl_avltree_ordered.h to lib_SOURCES. array-omap: New module. * lib/gl_array_omap.h: New file. * lib/gl_array_omap.c: New file. * modules/array-omap: New file. omap: New module. * lib/gl_omap.h: New file. * lib/gl_omap.c: New file. * modules/omap: New file. 2018-12-11 Bruno Haible hash-set, linkedhash-set: Reduce code duplication. * lib/gl_anyhash1.h: Rename from lib/gl_anyhash_list1.h and lib/gl_anyhash_set1.h. * lib/gl_anyhash2.h: Rename from lib/gl_anyhash_list2.h and lib/gl_anyhash_set2.h. Parameterize. (hash_resize_after_add): New function, from lib/gl_anyhash_set2.h. * lib/gl_anytreehash_list1.h (hash_resize_after_add): Remove function. * lib/gl_avltreehash_list.c: Include gl_anyhash1.h instead of gl_anyhash_list1.h. Include gl_anyhash2.h instead of gl_anyhash_list2.h. * lib/gl_rbtreehash_list.c: Likewise. * lib/gl_linkedhash_list.c: Likewise. (hash_resize_after_add): Remove function. * lib/gl_linkedhash_set.c: Include gl_anyhash1.h instead of gl_anyhash_set1.h. Include gl_anyhash2.h instead of gl_anyhash_set2.h. * gl_hash_set.c: Likewise. * modules/avltreehash-list (Files, Makefile.am): Update file list. * modules/rbtreehash-list (Files, Makefile.am): Likewise. * modules/linkedhash-list (Files, Makefile.am): Likewise. * modules/linkedhash-set (Files, Makefile.am): Likewise. * modules/hash-set (Files, Makefile.am): Likewise. 2018-12-11 Bruno Haible array-set: Optimize. * lib/gl_array_set.c (gl_array_search, gl_array_remove): Test equals_fn outside the loop, not inside the loop. 2018-12-11 Bruno Haible times: Fix tests. * tests/test-times.c (doublecmp): Implement a total order. 2018-12-11 Bruno Haible array-set, linkedhash-set, hash-set: Fix tests. * tests/test-array_set.c (cmp_objects_in_array): New function. (check_equals): Use it. * tests/test-hash_set.c: Likewise. * tests/test-linkedhash_set.c: Likewise. 2018-12-08 Bruno Haible Fix comments. * lib/gl_list.h (gl_list_free): Clarify what it does. * lib/gl_oset.h (gl_oset_free): Likewise. * lib/gl_set.h (gl_set_free): Likewise. * lib/gl_anytree_oset.h (gl_tree_search_atleast): Fix typo in comment. * lib/gl_array_oset.c (gl_array_search_atleast): Likewise. * lib/gl_anyavltree_list1.h (MAXHEIGHT): Likewise. * lib/gl_avltree_oset.c (MAXHEIGHT): Likewise. 2018-12-03 Bruno Haible hash-set: Add tests. * tests/test-hash_set.c: New file. * modules/hash-set-tests: New file. linkedhash-set: Add tests. * tests/test-linkedhash_set.c: New file. * modules/linkedhash-set-tests: New file. array-set: Add tests. * tests/test-array_set.c: New file. * modules/array-set-tests: New file. xset: New module. * lib/gl_xset.h: New file. * lib/gl_xset.c: New file. * modules/xset: New file. hash-set: New module. * lib/gl_hash_set.h: New file. * lib/gl_hash_set.c: New file. * modules/hash-set: New file. linkedhash-set: New module. * lib/gl_linkedhash_set.h: New file. * lib/gl_linkedhash_set.c: New file. * lib/gl_anyhash_set1.h: New file, based on lib/gl_anyhash_list1.h. * lib/gl_anyhash_set2.h: New file, based on lib/gl_anyhash_list2.h. * lib/gl_anyhash_primes.h: New file, extracted from lib/gl_anyhash_list2.h. * lib/gl_anyhash_list2.h: Include it. (primes, next_prime): Remove definitions. * modules/linkedhash-set: New file. * modules/avltreehash-list (Files): Add lib/gl_anyhash_primes.h. (Makefile.am): Add gl_anyhash_primes.h to lib_SOURCES. * modules/linkedhash-list (Files): Add lib/gl_anyhash_primes.h. (Makefile.am): Add gl_anyhash_primes.h to lib_SOURCES. * modules/rbtreehash-list (Files): Add lib/gl_anyhash_primes.h. (Makefile.am): Add gl_anyhash_primes.h to lib_SOURCES. array-set: New module. * lib/gl_array_set.h: New file. * lib/gl_array_set.c: New file. * modules/array-set: New file. set: New module. * lib/gl_set.h: New file. * lib/gl_set.c: New file. * lib/gl_oset.h (gl_setelement_dispose_fn): Avoid conflict with gl_set.h. * modules/set: New file. 2018-12-07 Akim Demaille bison: don't force the Yacc mode Passing -y forces Bison into POSIX YACC mode. This includes reporting errors when Bison features are used in the grammar file. Some of these features (such as %expect) were flagged non-yacc recently. Most of the time, -y is actually used to please Automake's ylwrap which expects the output to be y.tab.c. * m4/bison.m4 (gl_BISON): Use `-o y.tab.c` rather than `-y`. 2018-12-01 Bruno Haible gnupload: Document short options. * build-aux/gnupload (usage): Document the short options. 2018-11-28 Ben Elliston gnupload: Support option -h as alias of --help. * build-aux/gnupload: Support -h. 2018-11-30 Paul Eggert memrchr: port better to clang * lib/memrchr.c (__memrchr): Cast to void * instead of to longword *, to pacify clang -Wcast-align (Bug#33544). 2018-11-29 Eric Blake docs: mention printf %m considerations * doc/glibc-functions/asprintf.texi (asprintf): Document that %m is not portable, and is easy enough to work around. * doc/glibc-functions/obstack_printf.texi (obstack_printf): Likewise. * doc/glibc-functions/obstack_vprintf.texi (obstack_vprintf): Likewise. * doc/glibc-functions/vasprintf.texi (vasprintf): Likewise. * doc/posix-functions/dprintf.texi (dprintf): Likewise. * doc/posix-functions/fprintf.texi (fprintf): Likewise. * doc/posix-functions/fwprintf.texi (fwprintf): Likewise. * doc/posix-functions/printf.texi (printf): Likewise. * doc/posix-functions/snprintf.texi (snprintf): Likewise. * doc/posix-functions/sprintf.texi (sprintf): Likewise. * doc/posix-functions/swprintf.texi (swprintf): Likewise. * doc/posix-functions/vdprintf.texi (vdprintf): Likewise. * doc/posix-functions/vfprintf.texi (vfprintf): Likewise. * doc/posix-functions/vfwprintf.texi (vfwprintf): Likewise. * doc/posix-functions/vprintf.texi (vprintf): Likewise. * doc/posix-functions/vsnprintf.texi (vsnprintf): Likewise. * doc/posix-functions/vsprintf.texi (vsprintf): Likewise. * doc/posix-functions/vswprintf.texi (vswprintf): Likewise. * doc/posix-functions/vwprintf.texi (vwprintf): Likewise. * doc/posix-functions/wprintf.texi (wprintf): Likewise. 2018-11-29 Akim Demaille bitset: rename ebitset/expandable.* as tbitset/table.* See https://lists.gnu.org/archive/html/bug-gnulib/2018-11/msg00096.html. * lib/bitset/expandable.h, lib/bitset/expandable.c: Rename as... * lib/bitset/table.h, lib/bitset/table.c: these. Rename all the ebitset* symbols as tbitset*. Adjust dependencies. 2018-11-28 Akim Demaille bitset: check the operations * tests/test-bitset.c (bitset_random): New. Use it. * lib/bitset/expandable.c (ebitset_not): Fix typo. 2018-11-28 Akim Demaille bitset: properly use false/true instead of 0/1 for Booleans * lib/bitset/expandable.c, lib/bitset/vector.c: Use false/true, not 0/1, as Booleans. 2018-11-28 Akim Demaille bitset: rename BITSET_VARRAY as BITSET_VECTOR For consistency with the name of the file. * doc/bitset.texi, lib/bitset.c, lib/bitset/base.h, * lib/bitset/stats.c, lib/bitset/vector.c (BITSET_VARRAY): Rename as... (BITSET_VECTOR): this. 2018-11-28 Paul Eggert strerror_r-posix: memmove, not memcpy * lib/strerror_r.c (safe_copy): Use memmove, not memcpy, since the source and destination might overlap in the call ‘safe_copy (buf, buflen, strerror_r (errnum, buf, buflen))’. Simplify. 2018-11-25 Akim Demaille bitsetv: new module * lib/bitsetv.c, lib/bitsetv.h, modules/bitsetv: New. 2018-11-25 Akim Demaille bitset: add tests and doc First stabs at providing a documentation and test for the bitset module. * doc/bitset.texi, modules/test-bitset, tests/bitset-tests.c: New. 2018-11-25 Akim Demaille bitset: new module * lib/bitset.c, lib/bitset.h, lib/bitset/array.c, * lib/bitset/array.h, lib/bitset/base.h, lib/bitset/expandable.c, * lib/bitset/expandable.h, lib/bitset/list.c, lib/bitset/list.h, * lib/bitset/stats.c, lib/bitset/stats.h, lib/bitset/vector.c, * lib/bitset/vector.h, modules/bitset: New. 2018-11-23 Bruno Haible localename: Fix gettext test failures on mingw. * lib/localename.c (gl_locale_name_posix): Convert the result of gl_locale_name_environ to XPG syntax. 2018-11-23 Karl Berry * config/srclistvars.txt, * config/srclist.txt: remove all gettext references; the gettext maintainers will sync as needed. 2018-11-21 Paul Eggert mktime: add libc-config dependency I missed this when we synced from glibc. * modules/mktime (Depends-on): Add libc-config. 2018-11-13 Paul Eggert longlong: fix comment typo * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Fix typo. 2018-11-11 Bruno Haible havelib: Remove the need to include asm-underscore.m4. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI_32BIT): New macro. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Use it instead of gl_HOST_CPU_C_ABI. * modules/havelib (Files): Add host-cpu-c-abi.m4. (Depends-on): Remove host-cpu-c-abi. 2018-11-03 Paul Eggert parse-datetime: simplify test for mktime failure * lib/parse-datetime.y (mktime_ok): Simplify. Remove args TZ and T; no longer needed. Callers changed. posixtm: simplify test for mktime failure * lib/posixtm.c (posixtime): Simplify. nstrftime: simplify test for mktime failure * lib/nstrftime.c (__strftime_internal): Simplify. 2018-11-02 Paul Eggert gnulib-common.m4: port _Noreturn to C++ Problem reported by Akim Demaille in: https://lists.gnu.org/r/bug-bison/2018-10/msg00067.html * m4/gnulib-common.m4 (gl_COMMON_BODY): If C++, use [[noreturn]]. Merge adjustments from _Noreturn.h and from glibc into the non-C++ version. * lib/_Noreturn.h: Match gnulib-common. 2018-10-30 Bruno Haible gnu-make: Fix for NetBSD 8 'make'. Reported by Reuben Thomas in . * m4/gnu-make.m4 (gl_GNU_MAKE): Use a heuristic based on the --version output, ignoring exit codes. 2018-10-28 Bernhard Voelker maintainer-makefile: fix syntax-check rule for "same.h" * top/maint.mk (sc_prohibit_same_without_use): Adjust regex to check for 'same_nameat', too. 2018-10-25 Paul Eggert havelib: fix nested ‘configure’ chatter * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Don’t nest AC_CACHE_CHECK calls, which resulted in confusing output like “checking for the common suffixes of directories in the library search path... checking for 64-bit host... no lib,lib”. backupfile: tweak for better code * lib/backupfile.c: Sort include directives, and remove unnecessary include. (FALLTHROUGH): New macro, copied from other modules. (backupfile_internal): Use it to avoid code duplication. This lets GCC 8.2.1 generate better code by inlining the call to check_extension. 2018-10-23 Paul Eggert backupfile: new dir_fd args New module opendirat with code taken from fts. Use this module to let backupfile use a directory file descriptor. * NEWS: Document the incompatible change. * lib/backup-find.c (find_backup_file_name): * lib/backup-rename.c (backup_file_rename): New arg DIR_FD. * lib/backupfile.c: Include stdint.h, for SIZE_MAX. (SIZE_MAX): Remove. Include opendirat.h rather than dirent--.h. (check_extension): New args DIR_FD and BASE_MAX. All callers changed. (numbered_backup): New args DIR_FD and PNEW_FD. All callers changed. (backupfile_internal): New arg DIR_FD. All callers changed. * lib/fts.c: Include opendirat.h. (opendirat): Move to opendirat.c. * lib/opendirat.c, lib/opendirat.h, modules/opendirat: New files. * modules/backupfile (Depends-on): Remove dirfd, opendir. Add opendirat. * modules/fts (Depends-on): Remove fdopendir, openat-safer. Add opendirat. 2018-10-23 Bruno Haible localename: Simplify support for per-thread locales on Solaris 11.4. * m4/intl-thread-locale.m4: Renamed from m4/intlsolaris.m4. (gt_INTL_THREAD_LOCALE_NAME): Renamed from gt_INTL_SOLARIS. Define HAVE_SOLARIS114_LOCALES instead of HAVE_NAMELESS_LOCALES. * lib/localename.c: Handle HAVE_SOLARIS114_LOCALES through Solaris specific code. * lib/localename-table.h: Update comments. * lib/localename-table.c: Update comments. * m4/localename.m4 (gl_LOCALENAME): Require gt_INTL_THREAD_LOCALE_NAME. Test for 'uselocale'. Don't invoke gt_INTL_SOLARIS. * m4/intl.m4 (AM_INTL_SUBDIR): Require gt_INTL_THREAD_LOCALE_NAME. Test for 'uselocale'. Set HAVE_NAMELESS_LOCALES. (gt_INTL_SUBDIR_CORE): Don't invoke gt_INTL_SOLARIS. Don't set HAVE_NAMELESS_LOCALES here. * modules/localename (Files): Add m4/intl-thread-locale.m4. Remove m4/intlsolaris.m4. * modules/gettext (Files): Likewise. 2018-10-22 Bruno Haible std-gnu11: Support Autoconf versions < 2.64. * m4/std-gnu11.m4 (AC_PROG_CC, AC_PROG_CXX): Use _AC_DO as fallback when _AC_DO_LIMIT does not exist. 2018-10-22 Bruno Haible Assume Autoconf >= 2.63. * DEPENDENCIES: Mention the requirement. * gnulib-tool (DEFAULT_AUTOCONF_MINVERSION): Bump to 2.63. (func_get_filelist): Don't list m4/onceonly.m4 any more. * pygnulib/GLModuleSystem.py (getFiles): Likewise. * m4/onceonly.m4: Remove file. * m4/openmp.m4: Remove file. * modules/openmp (Files): Remove m4/openmp.m4. * m4/configmake.m4 (gl_CONFIGMAKE_PREP): Don't set datarootdir, docdir, htmldir, dvidir, pdfdir, psdir, localedir. * m4/po.m4 (AM_PO_SUBDIRS): Don't set localedir. * m4/gnulib-common.m4 (m4_foreach_w): Remove fallback for Autoconf < 2.60. (AC_PROG_MKDIR_P): Remove definition for Autoconf < 2.62. (AC_PROG_SED): Remove fallback for Autoconf < 2.60. * m4/errno_h.m4 (AC_COMPUTE_INT): Remove fallback for Autoconf < 2.61. * m4/size_max.m4 (AC_COMPUTE_INT): Likewise. * m4/stdint.m4 (AC_COMPUTE_INT): Likewise. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Assume AC_USE_SYSTEM_EXTENSIONS exists. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Likewise, * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Remove workaround for Autoconf < 2.61. * m4/lib-prefix.m4 (AC_LIB_ARG_WITH): Remove macro. (AC_LIB_PREFIX): Use AC_ARG_WITH, assuming semantics of Autoconf >= 2.52. * m4/longlong.m4: Require Autoconf >= 2.62. Update comments. * m4/ls-mntd-fs.m4: Require Autoconf >= 2.60. Update comments. * m4/gettext.m4 (AM_GNU_GETTEXT): Update comment. 2018-10-22 Bruno Haible Assume Automake >= 1.11. * m4/configmake.m4: Update comments. * m4/lib-link.m4 (AC_LIB_RPATH): Assume AC_REQUIRE_AUX_FILE exists. * m4/po.m4 (AM_PO_SUBDIRS, AM_POSTPROCESS_PO_MAKEFILE): Eliminate uses of 'eval'. * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am, func_create_testdir, func_create_megatestdir): Emit a Makefile.am that requires Automake >= 1.11. 2018-10-22 Bruno Haible localename: Fix typo in comment. * tests/test-locale-c++.cc (newlocale): Fix typo in comment. 2018-10-22 Bruno Haible Fix failure of 'gnulib-tool --create-testdir' with all modules. * gnulib-tool (func_create_testdir): Exclude 'timevar' module. 2018-10-21 Bruno Haible locale: Ease integration with GNU libintl. * lib/locale.in.h (GNULIB_defined_newlocale, GNULIB_defined_duplocale, GNULIB_defined_freelocale): New macros. 2018-10-21 Bruno Haible localename: Fine-tune support for per-thread locales on Solaris 11.4. * lib/localename-table.h: New file, extracted from lib/localename.c. * lib/localename-table.c: Likewise. * lib/localename.c: Include localename-table.h. (get_locale_t_name, newlocale, duplocale, freelocale): Invoke locale_hash_function instead of pointer_hash. * modules/localename (Files): Add lib/localename-table.h, lib/localename-table.c. (lib_SOURCES): Add localename-table.c. * m4/intlsolaris.m4 (gt_INTL_SOLARIS): Require AC_CANONICAL_HOST. Test for Solaris 11.4 locale system only on Solaris. Test for it independently whether getlocalename_l exists. * m4/intl.m4 (gt_INTL_SUBDIR_CORE): Don't test for 'uselocale' and 'getlocalename_l'. Instead, invoke gt_INTL_SOLARIS. Set HAVE_NAMELESS_LOCALES. * modules/gettext (Files): Add m4/intlsolaris.m4. 2018-10-21 Bruno Haible Small update from gettext. * m4/intl.m4: Update from gettext: - 2018-01-02: Fix 'ar' invocation when cross-compiling and in 64-bit mode on AIX. - 2018-01-02: Don't use -lc explicitly when linking with libtool. - 2017-05-19: (AM_INTL_SUBDIR): Require AC_C_FLEXIBLE_ARRAY_MEMBER. 2018-10-16 Bruno Haible mountlist: Remove support for Cray with UNICOS 9. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't define MOUNTED_LISTMNTENT. * lib/mountlist.c: Remove MOUNTED_LISTMNTENT case. 2018-10-16 Bruno Haible fsusage, mountlist, getloadavg, getgroups: Remove support for Ultrix. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Don't define STAT_STATFS2_FS_DATA. * lib/fsusage.c: Remove STAT_STATFS2_FS_DATA case. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't define MOUNTED_GETMNT. * lib/mountlist.c: Remove MOUNTED_GETMNT case. * lib/getloadavg.c (decstation): Remove definition and case. * m4/getgroups.m4 (AC_FUNC_GETGROUPS): Mention NeXTstep, not Ultrix. * lib/getgroups.c: Likewise. * doc/posix-functions/getgroups.texi: Likewise. * lib/time.in.h: Update comments. 2018-10-16 Bruno Haible getloadavg: Remove support for ConvexOS. * lib/getloadavg.c: Remove convex case. 2018-10-16 Bruno Haible getloadavg: Remove support for Sony NEWS. * lib/getloadavg.c: Remove sony_news case. 2018-10-16 Bruno Haible fsusage, mountlist, getloadavg: Remove support for Dynix/ptx. * lib/fsusage.c: Remove _SEQUENT_ case. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Update comments. * lib/mountlist.c: Don't test for MNTTABNAME. * m4/ls-mntd-fs.m4 (AC_FUNC_GETMNTENT): Don't test for libseq. (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't test for MNTTABNAME. * lib/getloadavg.c: Remove _SEQUENT_ and sequent cases. * lib/stat-size.h: Don't mention the Sequent bug. * doc/posix-functions/utime.texi: Don't mention the Dynix bug. 2018-10-16 Bruno Haible fsusage: Remove support for AIX 3. * lib/fsusage.c: Remove code for AIX 3. * m4/fsusage.m4 (gl_PREREQ_FSUSAGE_EXTRA): Update comments. 2018-10-16 Bruno Haible fsusage, stat-size, getloadavg: Remove support for AIX PS/2. * m4/fsusage.m4 (gl_PREREQ_FSUSAGE_EXTRA): Don't check for dustat.h. * lib/fsusage.c: Remove code for AIX PS/2. * lib/stat-size.h (ST_NBLOCKSIZE): Likewise. * lib/getloadavg.c: Likewise. 2018-10-16 Bruno Haible getloadavg: Remove support for HP-UX on m68k. * lib/getloadavg.c: Remove hp9000s300 case. 2018-10-16 Bruno Haible fsusage, mountlist: Remove support for DolphinOS (an SVR3 variant). * lib/fsusage.c: Remove DOLPHIN case. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Update comments. * lib/mountlist.c: Remove MOUNTED_GETMNTTBL case. 2018-10-16 Bruno Haible getloadavg: Remove support for Alliant FX/2800. * lib/getloadavg.c: Remove alliant case. 2018-10-16 Bruno Haible getloadavg: Remove support for tek4300. * lib/getloadavg.c: Remove tek4300 case. 2018-10-16 Bruno Haible getloadavg: Remove support for Ardent. * lib/getloadavg.c: Remove ardent case. 2018-10-16 Bruno Haible mountlist: Remove support for SVR2. Reported by Andrew Borodin in . * lib/mountlist.c: Remove MOUNTED_FREAD case. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't define MOUNTED_FREAD. 2018-10-15 Paul Eggert libc-config: merge from glibc * lib/cdefs.h (__glibc_has_attribute): New macro. regex: depend on libc-config * modules/regex (Depends-on): Add libc-config. This is needed after the recent autoupdate from glibc. 2018-10-14 Bruno Haible localename: Add support for per-thread locales on Solaris 11.4. * lib/locale.in.h (newlocale, freelocale): New declarations. (duplocale): Declare also when the 'localename' module requests it. * lib/localename.c (struniq_hash_node): Renamed from hash_node. (STRUNIQ_HASH_TABLE_SIZE): Renamed from HASH_TABLE_SIZE. (struniq): Update. (struct locale_categories_names, struct locale_hash_node): New types. (LOCALE_HASH_TABLE_SIZE): New constant. (locale_hash_table, locale_lock): New variables. (pointer_hash, get_locale_t_name): New functions. (newlocale, duplocale, freelocale): New overridden functions. (gl_locale_name_thread_unsafe): Use get_locale_t_name. * m4/intlsolaris.m4: New file. * m4/localename.m4 (gl_LOCALENAME): Require gl_LOCALE_H_DEFAULTS. Invoke gt_INTL_SOLARIS. Set HAVE_NEWLOCALE, HAVE_DUPLOCALE, HAVE_FREELOCALE, REPLACE_NEWLOCALE, REPLACE_DUPLOCALE, REPLACE_FREELOCALE. * m4/locale_h.m4 (gl_LOCALE_H): Test whether newlocale, freelocale are declared. (gl_LOCALE_H_DEFAULTS): Initialize GNULIB_LOCALENAME, HAVE_NEWLOCALE, HAVE_FREELOCALE, REPLACE_NEWLOCALE, REPLACE_FREELOCALE. * modules/locale (Makefile.am): Substitute GNULIB_LOCALENAME, HAVE_NEWLOCALE, HAVE_FREELOCALE, REPLACE_NEWLOCALE, REPLACE_FREELOCALE. * modules/localename (Files): Add intlsolaris.m4. (Depends-on): Add 'locale'. (configure.ac): Invoke gl_LOCALE_MODULE_INDICATOR. * tests/test-locale-c++.cc (newlocale, freelocale): Prepare for checking the signatures. 2018-10-14 Akim Demaille timevar: use gethrxtime to get wall clock time clock_gettime is not portable. gethrxtime takes the best available option to get the wall clock time, including clock_gettime (monotonic clock), and gettime (non monotonic). Also, using xtime_t instead of float preserves the precision. Suggested by Bruno Haible. * lib/xtime.h (xtime_make): Handle overflows of nanoseconds. * modules/timevar (Depends-on): We need gethrxtime. We no longer use times(). (Link): Update. * lib/timevar.h (timevar_time_def): Use xtime_t. * lib/timevar.c (set_to_current_time): Use gethrxtime. (timevar_print): Instead of checking whether the timings themselves are large enough for the timevar to be printed, check the percentages. 2018-10-14 Bruno Haible wcsnrtombs: Work around Solaris 11.4 bug. * m4/wcsnrtombs.m4 (gl_WCSNRTOMBS_WORKS_IN_TRADITIONAL_LOCALE): New macro. (gl_FUNC_WCSNRTOMBS): Invoke it. * doc/posix-functions/wcsnrtombs.texi: Mention the Solaris bug. 2018-10-14 Bruno Haible mbsnrtowcs: Work around Solaris 11.4 bug. * m4/mbsnrtowcs.m4 (gl_MBSNRTOWCS_WORKS_IN_TRADITIONAL_LOCALE): New macro. (gl_FUNC_MBSNRTOWCS): Invoke it. * doc/posix-functions/mbsnrtowcs.texi: Mention the Solaris bug. 2018-10-14 Bruno Haible doc: Update for Solaris 11.4. * doc/**/*.texi: For bugs that exist in both Solaris 11.3 and 11.4, mention Solaris 11.4. * m4/printf.m4: Update comments about Solaris. * m4/log.m4: Likewise. * m4/log10.m4: Likewise. * m4/logb.m4: Likewise. * m4/logbf.m4: Likewise. * m4/logbl.m4: Likewise. * m4/rename.m4: Likewise. * m4/wcrtomb.m4: Likewise. * m4/hostent.m4: Likewise. * m4/servent.m4: Likewise. 2018-10-14 Bruno Haible floor, ceil, trunc, truncf, truncl: Defeat GCC optimizations. * m4/floor.m4 (gl_FUNC_FLOOR_LIBS): Use 'floor' also through a function pointer. * m4/ceil.m4 (gl_FUNC_CEIL_LIBS): Use 'ceil' also through a function pointer. * m4/trunc.m4 (gl_FUNC_TRUNC): Use 'trunc' also through a function pointer. * m4/truncf.m4 (gl_FUNC_TRUNCF): Use 'truncf' also through a function pointer. * m4/truncl.m4 (gl_FUNC_TRUNCL): Use 'truncl' also through a function pointer. 2018-10-13 Akim Demaille bootstrap: fix wget command for po files. * build-aux/bootstrap (po_download_command_format): Fix comment, and adjust callers. 2018-10-13 Akim Demaille timevar: improve the output format Suggested by Bruno Haible. See https://lists.gnu.org/archive/html/bug-gnulib/2018-10/msg00040.html. * lib/timevar.c (timevar_print): Use %7.3f for usr/sys and %11.6f for wall, since its resolution is much higher. 2018-10-13 Akim Demaille timevar: expect that getrusage is available. Don't keep both times and getrusage as backend: both are guaranteed by gnulib, a single one suffices. Using getrusage is open to possibly tracking other types of resources in the future. * modules/timevar (Depends-on): Add getrusage. (configure.ac): Remove gl_TIMEVAR. (Files): Remove m4/timevar.m4. * m4/timevar.m4: Remove, rely on gnulib for getrusage. * lib/timevar.h (timevar_enabled): Clarify documentation. * lib/timevar.c: Remove all the code about times. Remove all the CPP guards about getrusage: expect it to be present (courtesy of gnulib). 2018-10-12 Bruno Haible mountlist: Improve support for Solaris in 64-bit mode. Reported by David Wood in . * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): On Solaris 8 or newer, define MOUNTED_GETEXTMNTENT instead of MOUNTED_GETMNTENT2. * lib/mountlist.c: Add code for MOUNTED_GETEXTMNTENT case. 2018-10-12 Bruno Haible mountlist: Add support for Minix. Reported by Assaf Gordon in . * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't use AC_CHECK_FUNCS to check for 'getmntinfo'. * lib/mountlist.c: Update comments. 2018-10-12 Bruno Haible Make better use of Autoconf. * m4/environ.m4: Use AC_CACHE_CHECK where possible. * m4/manywarnings.m4: Likewise. * m4/manywarnings-c++.m4: Likewise. * m4/socklen.m4: Likewise. * m4/sockpfaf.m4: Likewise. * m4/stdarg.m4: Likewise. * m4/visibility.m4: Likewise. * m4/fsusage.m4: Use AC_CACHE_CHECK where possible. Modernize indentation. * m4/ls-mntd-fs.m4: Likewise. 2018-10-11 Bruno Haible mountlist: Modernize platform lists. * m4/ls-mntd-fs.m4: Clarify which MOUNTED_* symbol applies to which platforms, deemphasizing the obsolete ones. * lib/mountlist.c: Likewise. 2018-10-11 Bruno Haible getprogname: Add support for 32-bit programs on HP-UX. * lib/getprogname.c (getprogname) [HP-UX]: If pstat_getproc fails, try the similar functions 32-bit programs on 64-bit HP-UX. 2018-10-11 Bruno Haible getprogname: Work around program name truncation when possible. * lib/getprogname.c (getprogname) [HP-UX]: When pst_ucomm is truncated, possibly use pst_cmd instead. 2018-10-08 Paul Eggert fts: cleanup after FTS_NOATIME removal * lib/fts_.h (FTS_VERBATIM, FTS_OPTIONMASK, FTS_NAMEONLY) (FTS_STOP): Shrink to minimal values. We don’t need to worry about binary compatibility in Gnulib, and the old way of doing things had a hole in the user options that caused FTS_OPTIONMASK to not work as desired. 2018-10-08 Bernhard Voelker fts: remove FTS_NOATIME This reverts commit da4d6974013c822af1498941e32db774b2031765. We cannot guarantee that O_NOATIME works: e.g. openat fails with EPERM if the effective user ID of the caller does not match the owner of the file and the caller is not privileged. Downstream findutils has never picked up FTS_NOATIME. Discussed at . * lib/fts_.h (FTS_NOATIME): Remove bit flag. (FTS_OPTIONMASK): Adjust. * lib/fts.c (diropen, fts_open, fts_build): Likewise. (fd_ring_check): Likewise. 2018-10-08 Bruno Haible csharpcomp*, csharpexec*: Remove support for pnet. * m4/csharpcomp.m4 (gt_CSHARPCOMP): Don't test for cscc. Don't set HAVE_CSCC. * build-aux/csharpcomp.sh.in (options_cscc): Remove variable. Don't test HAVE_CSCC. * lib/csharpcomp.c (compile_csharp_using_pnet): Remove function. (compile_csharp_class): Don't invoke it. * m4/csharpexec.m4 (gt_CSHARPEXEC): Don't test for ilrun. Don't set HAVE_ILRUN. * build-aux/csharpexec.sh.in (options_ilrun): Remove variable. Don't test HAVE_ILRUN. * lib/csharpexec.c (execute_csharp_using_pnet): Remove function. (execute_csharp_program): Don't invoke it. * m4/csharp.m4 (gt_CSHARP_CHOICE): Don't recognize --enable-csharp=pnet any more. 2018-10-07 Andreas Henriksson (tiny change) renameatu: prefer renameat2 to syscall * lib/renameatu.c (renameatu) [HAVE_RENAMEAT2]: Use renameat2 instead of syscall (Bug#32796). * m4/renameat.m4 (gl_FUNC_RENAMEAT): Check for renameat2. 2018-10-07 Benno Schulenberg bootstrap, gnulib-tool: use https instead of insecure rsync * build-aux/bootstrap (download_po_files, po_download_command_format): Don't try using rsync; always use wget over https to fetch PO files. * gnulib-tool (func_import): Likewise. * pygnulib/GLImport.py (GLImport.execute): Likewise. 2018-10-07 Benno Schulenberg bootstrap, gnulib-tool: correct the translations wget command * build-aux/bootstrap (po_download_command_format2): Restrict recursion to a single level. * gnulib-tool (func_import): Likewise. * pygnulib/GLImport.py (GLImport.execute): Likewise. 2018-10-07 Akim Demaille doc: the gnulib snapshots are not maintained * doc/gnulib-intro.texi (Steady Development): Don't mention them. 2018-10-07 Akim Demaille timevar: add to lib_SOURCES * modules/timevar (lib_SOURCES): Add timevar.c and timevar.def. 2018-10-07 Bruno Haible dirent: Update documentation. * doc/posix-headers/dirent.texi: The MSVC issue is fixed by Gnulib. 2018-10-05 Bruno Haible strpbrk: Make it possible to namespace the defined symbol. * lib/strpbrk.c (strpbrk): Don't undefine outside of glibc. 2018-10-05 Bruno Haible strcspn: Make it possible to namespace the defined symbol. * lib/strcspn.c (strcspn): Don't undefine outside of glibc. 2018-10-05 Bruno Haible raise: Make it possible to namespace the defined symbol. * lib/raise.c (raise): Undefine only after the replacement function has been defined. (raise): Renamed from rpl_raise. (raise_nothrow): Move to the end of the compilation unit. 2018-10-05 Bruno Haible memcmp: Make it possible to namespace the defined symbol. * lib/memcmp.c (memcmp): Don't undefine outside of glibc. 2018-10-05 Bruno Haible explicit_bzero: Make it possible to namespace the defined symbol. * lib/explicit_bzero.c (explicit_bzero): Don't undefine outside of glibc. 2018-10-05 Bruno Haible mkdir-p: Depend on 'mkdir'. * modules/mkdir-p (Depends-on): Add 'mkdir'. 2018-10-05 Bruno Haible tempname: Depend on 'mkdir'. Reported by Maarten Bosmans at . * modules/tempname (Depends-on): Add 'mkdir'. 2018-10-05 Akim Demaille timevar: rely on gnulib modules for time portability. * modules/timevar (Depends-on): Add sys_time, sys_times, and times. * m4/timevar.m4: Don't check for clock_t and struct tms, guaranteed by gnulib. * lib/timevar.h: Use extern "C" protection. Include for FILE. * lib/timevar.c: Include sys/time.h, sys/times.h unconditionally, they are guaranteed by gnulib. Remove uses of clock as (now useless) fallback. 2018-10-04 Bruno Haible sh-filename: New module. * m4/sh-filename.m4: New file. * modules/sh-filename: New file. * lib/spawni.c (_PATH_BSHELL): Use BOURNE_SHELL instead of hardcoding "/bin/sh". * tests/test-posix_spawn1.c (main): Likewise. * tests/test-posix_spawn2.c (main): Likewise. * lib/javacomp.c (compile_using_envjavac, is_envjavac_gcj, is_envjavac_gcj43): Likewise. * lib/javaexec.c (execute_java_class): Likewise. * modules/posix_spawn-internal (Depends-on): Add sh-filename. * modules/posix_spawnp-tests (Depends-on): Likewise. * modules/javacomp (Depends-on): Likewise. * modules/javaexec (Depends-on): Likewise. 2018-10-04 Bruno Haible spawn-pipe tests: Avoid test failure on native Windows. * tests/test-spawn-pipe-child.c (main): On native Windows, don't expect that fd 2 is closed. 2018-10-04 Bruno Haible fcntl: Make it possible to namespace the defined symbol. * lib/fcntl.c (fcntl): Undefine only after the replacement function has been defined. (fcntl): Renamed from rpl_fcntl. (rpl_fcntl_DUPFD, rpl_fcntl_DUPFD_CLOEXEC): New functions, extracted from fcntl. (klibc_fcntl): Move to the end of the compilation unit. 2018-10-02 Bruno Haible vasnprintf tests: Avoid test failure on HP-UX/hppa and IRIX. * tests/test-vasnprintf.c (test_function): Change the test added on 2018-09-23 to check only the 18 most significant digits. vasnprintf tests: Avoid test failure on Cygwin. * tests/test-vasnprintf.c (test_function): Change the test added on 2018-09-23 to check only the 42 most significant digits. 2018-10-01 Bruno Haible mkostemp, mkostemps: Update documentation. * doc/glibc-functions/mkostemp.texi: Mention the Mac OS X issue. * doc/glibc-functions/mkostemps.texi: Likewise. 2018-10-01 Tom Tromey mkostemp, mkostemps: Fix compilation error in C++ mode on Mac OS X. * lib/stdlib.in.h: Include for mkostemp and mkostemps on OS X. 2018-09-30 Pádraig Brady hmac-*: refactor to remove repetitive code * lib/hmac.c: A new parameterized single implementation. * lib/hmac-md5.c: Define parameters and include implementation. * lib/hmac-sha1.c: Likewise. * lib/hmac-sha256.c: Likewise. * lib/hmac-sha512.c: Likewise. * modules/crypto/hmac-md5: Reference the new implementation file. * modules/crypto/hmac-sha1: Likewise. * modules/crypto/hmac-sha256: Likewise. * modules/crypto/hmac-sha512: Likewise. * tests/test-hmac-md5.c: Refactor common code to a single function. * tests/test-hmac-sha1.c: Likewise. * tests/test-hmac-sha256.c: Likewise. * tests/test-hmac-sha512.c: Likewise. 2018-09-30 Zhang Qing hmac-sha512: fix hash for keys > blocksize (128 bytes) * lib/hmac-sha512.c (hmac_sha512): Set the computed/shortened key length to that output by sha512, not the blocksize. Otherwise uninitialized data from the stack is used when computing the hash. * tests/test-hmac-sha512.c: Add a shortened key test case. Reported at https://github.com/coreutils/gnulib/pull/5 2018-09-30 Bruno Haible vasnprintf: Avoid warnings from GCC's -Wsign-compare. Reported by Bjarni Ingi Gislason in . * lib/vasnprintf.c (VASNPRINTF): Cast 'count' from 'int' to 'unsigned int' before comparison with an unsigned value. 2018-09-30 Bruno Haible grantpt: Remove unnecessary dependency. * modules/grantpt (Depends-on): Remove 'builtin-expect'. 2018-09-30 Bruno Haible timevar: Small tweaks. * lib/timevar.h: Fix comments. Add parameter names to function declarations. * lib/timevar.c: Include timevar.h immediately after config.h. * lib/timevar.def: Fix comments. * modules/timevar (Maintainer): List Akim Demaille. 2018-09-30 Bruno Haible timevar: Include documentation in gnulib manual. * doc/timevar.texi: Change node and section name to 'Profiling of program phases'. In the code snippets, tweak the #includes and use GNU coding style. * doc/gnulib.texi: Include timevar.texi. 2018-09-27 Akim Demaille timevar: import from Bison. * m4/timevar.m4, modules/timevar, lib/timevar.h, lib/timevar.c: New files. * lib/timevar.def: New file. * doc/timevar.texi: New file. 2018-09-26 Bruno Haible javacomp-script, javacomp: Add preliminary support for Java 12..17. * m4/javacomp.m4 (gt_JAVACOMP): Treat Java versions 12..17 like 11. * lib/javacomp.c (default_target_version): Likewise. 2018-09-26 Bruno Haible javacomp-script, javacomp: Add support for Java 11. * m4/javacomp.m4 (gt_JAVACOMP): Accept source-version 11 and target-version 11. * lib/javaversion.h: Update comments. * lib/javacomp.c (default_target_version, SOURCE_VERSION_BOUND, source_version_index, get_goodcode_snippet, get_failcode_snippet, TARGET_VERSION_BOUND, target_version_index, corresponding_classfile_version): Accept source_version 11 and target_version 11. * lib/javacomp.h: Update comments accordingly. 2018-09-23 Bruno Haible vasnprintf: Fix heap memory overrun bug. Reported by Ben Pfaff in . * lib/vasnprintf.c (convert_to_decimal): Allocate one more byte of memory. * tests/test-vasnprintf.c (test_function): Add another test. 2018-09-19 Paul Eggert maint: mktime.c now shared with glibc * config/srclist.txt: intprops.h, timegm.c and mktime.c are now the same in Gnulib and glibc. mktime: fix _LIBC typo * lib/mktime.c (mktime): Fix typo (misspelled "_LIBC"). 2018-09-19 Norihiro Tanaka dfa: optimization for state merge * lib/dfa.c (merge2): New function. (merge_nfa_state): Use it. 2018-09-18 Jim Meyering dfa: trivial comment fix: s/is/if/ * lib/dfa.c (maybe_disable_superset_dfa): Fix comment typo. 2018-09-18 Paul Eggert dfa: use more-informative function name * lib/dfa.c (maybe_disable_superset_dfa): Rename from dfautf8noss. Use change. dfa: tweak allocation performance * lib/dfa.c (merge_nfa_state, dfaoptimize): Prefer ptrdiff_t for indexes some more. Use char for flags, as it’s wide enough. Allocate queue and flags together, with one malloc call. No need to use xnmalloc since the multiplication and addition cannot overflow (it’s already been checked by earlier allocation). Prefer memset to open-coding. dfa: prune states as we go * lib/dfa.c (prune): Remove. dfa: reorder enum for efficiency (merge_nfa_state): Prune as we go instead of at the end. Prefer ptrdiff_t for indexes, as this helps the compiler a bit. * lib/dfa.c (END): Now -1 again. Reorder other elements of the enumeration to make it easier for GCC to generate efficient code by using fewer comparisons to check for ranges of values. (atom): Take advantage of the reordering. 2018-09-18 Norihiro Tanaka dfa: optimize alternation in NFA Even when similar states exist in alternation, the DFA treats them as separate items, which may complicate the transition in NFA and cause slowdown. This change assembles the states into one. For example, ab|ac is changed into a(b|c). This change speeds-up matching for many branched patterns. For example, grep speeds up more than 30× in: seq 10000 | sed 's/$/ abcdefghijklmnopqrstuvwxyz/; s/$/./' >in time -p env LC_ALL=C grep -vf in in * lib/dfa.c (prune): New function. (merge_nfa_state): New function. It merges similar NFA states. (dfaoptimize): New function. It seeks merged and removed nodes. (dfaanalyze): Call new function. (dfautf8noss): Change name from dfaoptimize because of addition of new function. (dfacomp): Update caller. dfa: simplify initial state Simplifying the initial state enables easier optimization of the NFA. * lib/dfa.c (enum token): Add new element BEG. (prtok): Adjust due to adding element BEG. (dfaparse): Put BEG at a head of tokens. (state_index): Adjust due to adding element BEG. (dfaanalyze): Concatenate BEG to other tokens, and simplify to build initial state. (dfamust): Adjust due to adding element BEG. DFAMUST ignores it. 2018-09-18 Bruno Haible file-has-acl: Fix test failure on Cygwin 2.9. * m4/acl.m4 (gl_FUNC_ACL): Update comments regarding Cygwin. * lib/acl-internal.h: Likewise. (HAVE_ACL_EXTENDED_FILE): Undefine on Cygwin. * lib/acl-internal.c: Update comments regarding Cygwin. * lib/acl_entries.c: Likewise. * lib/file-has-acl.c: Likewise. (file_has_acl): For Cygwin, use a different way to determine whether the "default" ACL of a directory is nontrivial. * lib/get-permissions.c: Update comments regarding Cygwin. * lib/set-permissions.c: Likewise. 2018-09-18 Bruno Haible stat-time tests: Fix test failure on Cygwin. * tests/nap.h (nap_get_stat): Treat Cygwin like native Windows. 2018-09-18 Paul Eggert doc: OS X 10.11 lacked ns time functions According to , nanosecond-resolution timestamp functions were introduced in macOS 10.12, so document the last version (OS X 10.11) where they were absent. gettime: nanotime never existed Problem reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2018-09/msg00082.html * lib/gettime.c (gettime) [HAVE_NANOTIME]: Remove unused code. * m4/gettime.m4 (gl_GETTIME): Don’t check for nanotime. 2018-09-18 Bruno Haible doc: Update statement about target platforms. Reported by Simon Sobisch. * doc/gnulib-intro.texi (Target Platforms): Update. Mention restrictions on MSVC versions. 2018-09-18 Bruno Haible posix_spawn tests: Fix link error on 64-bit Cygwin. * tests/test-posix_spawn1.c (environ): Remove declaration. * tests/test-posix_spawn2.c (environ): Likewise. * tests/test-posix_spawn3.c (environ): Likewise. * tests/test-posix_spawn4.c (environ): Likewise. * modules/posix_spawn-tests (Depends-on): Add 'environ'. * modules/posix_spawnp-tests (Depends-on): Likewise. 2018-09-16 Paul Eggert timespec: new function current_timespec * lib/gettime.c (gettime): Prefer clock_gettime to nanotime, and don’t worry about it failing on a CLOCK_REALTIME arg. POSIX requires it to succeed and I don’t know of any counterexamples where the fallbacks would work. (current_timespec): New function, taken from Emacs. It is more convenient than gettime, and can help register allocation. * lib/timespec.h: Include arg-nonnull.h. (current_timespec): New declaration. (gettime, settime): Declare args to be nonnull. * modules/timespec (Depends-on): Add snippet/arg-nonnull. 2018-09-16 Bruno Haible setlocale: Improve locale handling on macOS 10.12 or newer. * lib/setlocale.c: Include header files for CoreFoundation. Declare gl_locale_name_canonicalize. (libintl_setlocale): Try harder to set a locale for categories LC_CTYPE and LC_MESSAGES. * m4/setlocale.m4 (gl_PREREQ_SETLOCALE): Add comment. 2018-09-16 Bruno Haible Update list of locale names with scripts on macOS. * lib/localename.c (gl_locale_name_canonicalize): Update tables to match Mac OS X 10.13 and recent glibc. 2018-09-16 Bruno Haible gettext: Use newer macOS APIs when possible. * m4/intlmacosx.m4 (gt_INTL_MACOSX): Check for CFLocaleCopyPreferredLanguages. 2018-09-16 Bruno Haible localename: Revisit macOS specific code. * lib/localename.c (gl_locale_name_default): Reduce code duplication. Fix comments about Mac OS X versions. 2018-09-15 Bruno Haible setlocale: Improve support for locales not supported by libc. Reported by Dapeng Gao at . * gettext-runtime/intl/setlocale.c: Include . (libintl_setlocale): Use a more error-tolerant strategy when the locale to be set is not supported by libc: Emit warnings instead of failing. 2018-09-15 Bruno Haible strstr, strcasestr: Add workaround against glibc-2.28 bug. Reported by Michael Brunnbauer via Siddhesh Poyarekar and Eric Blake. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Set gl_cv_func_strstr_works_always to 'no' on glibc 2.28. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Set gl_cv_func_strcasestr_works_always to 'no' on glibc 2.28. * doc/posix-functions/strstr.texi: Document the glibc 2.28 bug. * doc/glibc-functions/strcasestr.texi: Likewise. 2018-09-14 Bruno Haible doc: Fix bottom of top-level page. Reported by Akim Demaille in . * doc/pastposix-functions/index.texi: Rename node to '_index' in HTML mode. * doc/gnulib.texi (Legacy Function Substitutes): Update menu accordingly. 2018-09-12 Bruno Haible Add test case from a recent glibc bug. * tests/test-strstr.c (main): Add test of long needle. * tests/test-strcasestr.c (main): Likewise. * tests/test-c-strstr.c (main): Likewise. * tests/test-c-strcasestr.c (main): Likewise. * tests/test-memmem.c (main): Likewise. 2018-09-12 Bruno Haible Apply Eric Blake's improvements from 2011-02-25 to more tests. * tests/test-c-strstr.c (main): Add the same tests here as well. 2018-09-12 Bruno Haible Apply Jim Meyering's fix from 2015-01-11 to more tests. * tests/test-memmem.c (main): Free haystack. * tests/test-strcasestr.c (main): Likewise. * tests/test-c-strcasestr.c (main): Likewise. 2018-09-11 Paul Eggert xstrtol: fix missing-TYPE_SIGNED typo * lib/xstrtol.c (TYPE_SIGNED): New macro, duplicating intprops.h. 2018-09-10 Paul Eggert timespec: fix resolution confusion In normal usage, clock resolution is given in seconds, but the code was mistakenly using inverse seconds and calling it “resolution”. Fix this, partly by renaming two identifiers. The old names will be kept for a bit, to ease transition. * lib/timespec.h (TIMESPEC_HZ, LOG10_TIMESPEC_HZ): New constants, replacing TIMESPEC_RESOLUTION and LOG10_TIMESPEC_RESOLUTION, which are now obsolescent. All uses changed. 2018-09-09 Paul Eggert mktime: simplify in prep for glibc merge * lib/mktime.c, lib/timegm.c [_LIBC]: Include mktime-internal.h (a small file just for glibc) instead of using a typedef. 2018-09-07 Paul Eggert intprops: minor clarification of code * lib/intprops.h (_GL_BINARY_OP_OVERFLOW): Use _GL_INT_CONVERT rather than reinventing it. 2018-09-07 Bruno Haible Fix a comment. * tests/test-posix_spawn3.c (parent_main): Fix typo in comment. 2018-09-07 Bruno Haible posix_spawn_file_actions_addchdir: Add tests. * tests/test-posix_spawn_file_actions_addchdir.c: New file. * tests/test-posix_spawn4.c: New file. * modules/posix_spawn_file_actions_addchdir-tests: New file. 2018-09-07 Bruno Haible posix_spawn_file_actions_addchdir: New module. Suggested by Eric Blake in . * lib/spawn.in.h (posix_spawn_file_actions_addchdir): New declaration. * lib/spawn_int.h (struct __spawn_action): Add tag 'spawn_do_chdir' and union member 'chdir_action'. * lib/spawn_faction_addchdir.c: New file. * lib/spawni.c (__spawni): Implement the spawn_do_chdir action. * lib/spawn_faction_addclose.c: Test REPLACE_POSIX_SPAWN instead of HAVE_WORKING_POSIX_SPAWN. * lib/spawn_faction_adddup2.c: Likewise. * lib/spawn_faction_addopen.c: Likewise. * m4/posix_spawn_faction_addchdir.m4: New file. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Test whether module 'posix_spawn_file_actions_addchdir' is present and whether posix_spawn_file_actions_addchdir_np exists. Define REPLACE_POSIX_SPAWN instead of HAVE_WORKING_POSIX_SPAWN. * m4/spawn_h.m4 (gl_SPAWN_H): Test whether posix_spawn_file_actions_addchdir is declared. (gl_SPAWN_H_DEFAULTS): Initialize GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR, HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR, REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR. * modules/spawn (Makefile.am): Substitute GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR, HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR, REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR. * modules/posix_spawn_file_actions_addchdir: New file. * modules/posix_spawn_file_actions_addclose (Depends-on, configure.ac): Test also REPLACE_POSIX_SPAWN. * modules/posix_spawn_file_actions_adddup2 (Depends-on, configure.ac): Likewise. * modules/posix_spawn_file_actions_addopen (Depends-on, configure.ac): Likewise. * tests/test-spawn-c++.cc (posix_spawn_file_actions_addchdir): Check signature. * doc/posix-functions/posix_spawn.texi: Mention the new module. * doc/posix-functions/posix_spawnp.texi: Likewise. 2018-09-06 Bruno Haible stddef: Override max_align_t on NetBSD 8.0/x86. * m4/stddef_h.m4 (gl_STDDEF_H): When testing for max_align_t, test also the value of __alignof__ (max_align_t). * doc/posix-headers/stddef.texi: Mention the issue. 2018-09-06 Bruno Haible fcntl: Fix F_DUPFD_CLOEXEC behaviour on Haiku. * lib/fcntl.c (rpl_fcntl): For F_DUPFD_CLOEXEC, don't even try the system fcntl. * doc/posix-functions/fcntl.texi: Document the issue. 2018-09-06 Bruno Haible count-trailing-zeros tests: Rely on limits-h module. * tests/test-count-trailing-zeros.c (ULLONG_MAX): Remove fallback definition. * modules/count-trailing-zeros-tests (Depends-on): Add 'limits-h'. 2018-09-06 Bruno Haible count-leading-zeros tests: Rely on limits-h module. * tests/test-count-leading-zeros.c (ULLONG_MAX): Remove fallback definition. * modules/count-leading-zeros-tests (Depends-on): Add 'limits-h'. 2018-09-06 Bruno Haible count-one-bits tests: Rely on limits-h module. * tests/test-count-one-bits.c (ULLONG_MAX): Remove fallback definition. * modules/count-one-bits-tests (Depends-on): Add 'limits-h'. 2018-09-06 Bruno Haible xstrtoll: Rely on limits-h module. * lib/xstrtol.c: Don't include intprops.h. (ULLONG_MAX, LLONG_MAX, LLONG_MIN): Remove fallback definitions. * modules/xstrtol (Depends-on): Remove 'intprops'. * modules/xstrtoll (Depends-on): Add 'limits-h'. 2018-09-06 Bruno Haible strtoll, strtoull: Rely on limits-h module. * lib/strtol.c (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove macros. (ULLONG_MAX, LLONG_MAX, LLONG_MIN): Remove fallback definitions. * modules/strtoll (Depends-on): Add limits-h. * modules/strtoull (Depends-on): Likewise. 2018-09-06 Bruno Haible intprops tests: Fix compilation error with pre-C99 compiler. * tests/test-intprops.c (verify_stmt): New macro. (VERIFY, main): Use it. 2018-09-06 Bruno Haible limits-h: Provide numerical limits macros. * lib/limits.in.h (LLONG_MIN, LLONG_MAX, ULLONG_MAX): Define also for IRIX and for GCC. (WORD_BIT, LONG_BIT): Define. * m4/limits-h.m4 (gl_LIMITS_H): Set LIMITS_H to non-empty also when does not define LLONG_MAX or WORD_BIT. * tests/test-limits-h.c (TYPE_SIGNED, TYPE_WIDTH, TYPE_MINIMUM, TYPE_MAXIMUM): New macros, from intprops.h. Add tests for CHAR_BIT, WORD_BIT, LONG_BIT, _MIN, and _MAX. * doc/posix-headers/limits.texi: Document what the 'limits-h' module provides. 2018-09-05 Bruno Haible fcntl: Don't access nonexistent optional argument. Reported by Frank Busse in . * lib/fcntl.c (rpl_fcntl): For actions that don't take an argument, don't consume an argument. For actions that take an 'int' argument, consume an 'int' argument. 2018-09-05 Eric Blake doc: mention environ pitfall * doc/posix-functions/environ.texi (environ): Assigning NULL to environ is a glibc extension. 2018-09-03 Bruno Haible gnulib-tool: Fix build order when $testsbase is a subdir of $sourcebase. Reported by Antoine Luong in . * gnulib-tool (func_import): For the tests, set a dotfirst flag. (func_emit_lib_Makefile_am): Consider the dotfirst flag. (func_emit_tests_Makefile_am): Don't consider the dotfirst flag. 2018-09-02 Paul Eggert mktime: fix unlikely race+overflow bug Problem reported by Alexandre Oliva in: https://sourceware.org/bugzilla/show_bug.cgi?id=16346 * lib/mktime.c (__mktime_internal): Access *OFFSET only once, to avoid an unlikely race if the compiler delays a load and if this cascades into a signed integer overflow. 2018-08-31 Paul Eggert mktime, timegm: simplify glibc time64_t * lib/mktime.c, lib/timegm.c (mktime_offset_t) [_LIBC]: Now long int, not time_t, since long int is the longstanding type for this in glibc and there is no need to change it even if time_t becomes 64 bits - even int would do, though this would be a change to the glibc generated code. When this change is merged into glibc, it should simplify the time_t vs time64_t situation. mktime, timegm: simplify merge to glibc Move code around to make a merge to glibc easier to audit. This should not change behavior. * lib/mktime.c (NEED_MKTIME_INTERNAL, NEED_MKTIME_WINDOWS) (NEED_MKTIME_WORKING): Give default values to pacify -Wundef, which glibc uses. Default NEED_MKTIME_WORKING to DEBUG_MKTIME, to simplify later conditionals; default the others to zero. In uses of these conditionals, explicitly spell out how _LIBC affects things, so it’s easier to review from a glibc viewpoint. (my_tzset, __tzset) [!_LIBC]: New function and macro, to better compartmentalize tzset issues. Move system-dependent tzsettish code here from mktime. (mktime): Move tzsettish code to my_tzset, and move localtime_offset to within mktime so that it doesn’t need a separate ifdef. 2018-08-27 Paul Eggert intprops: avoid evaluation of some expressions This makes EXPR_SIGNED (e) easier to use, as it no longer evaluates the expression E. Formerly, E was required to be free of side effects. * lib/intprops.h (_GL_INT_CONVERT, _GL_INT_NEGATE_CONVERT) (EXPR_SIGNED, TYPE_WIDTH, _GL_INT_MINIMUM, _GL_INT_MAXIMUM) (_GL_SIGNED_INT_MAXIMUM): Do not evaluate the expression arg. 2018-08-23 Bruno Haible getcwd: Add cross-compilation guesses. Reported by Sergio Durigan Junior in . Based on a patch by Paul Eggert. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Add cross-compilation guesses for all GNU systems. 2018-08-19 Bruno Haible glob-h: Formalize side effects from other modules. * m4/glob_h.m4 (gl_REPLACE_GLOB_H): New macro. * m4/glob.m4 (gl_GLOB): Invoke it. fnmatch-h: Formalize side effects from other modules. * m4/fnmatch_h.m4 (gl_REPLACE_FNMATCH_H): New macro. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Invoke it. limits-h: Formalize side effects from other modules. * m4/limits-h.m4 (gl_REPLACE_LIMITS_H): New macro. * m4/stdint.m4 (gl_STDINT_H): Invoke it. 2018-08-19 Bruno Haible getpass: Move declaration to . * lib/unistd.in.h (getpass): New declaration. * lib/getpass.h: Replace with a stub that just includes . * m4/getpass.m4 (gl_FUNC_GETPASS): Declare through AC_DEFUN_ONCE. Require gl_UNISTD_H_DEFAULTS. Don't test whether getpass is declared. (gl_FUNC_GETPASS_GNU): Require gl_UNISTD_H_DEFAULTS and gl_FUNC_GETPASS. On glibc systems, don't set REPLACE_GETPASS to 1. * modules/getpass (Depends-on): Add 'unistd'. (configure.ac): Test also REPLACE_GETPASS. Define a module indicator. (Include): Specify instead of "getpass.h". * modules/getpass-gnu (Depends-on): Merely depend on 'getpass'. (configure.ac): Sync with the configure.ac section of modules/getpass. (Include): Specify instead of "getpass.h". * m4/unistd_h.m4 (gl_UNISTD_H): Test whether getpass is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETPASS, HAVE_GETPASS, REPLACE_GETPASS. * modules/unistd (Makefile.am): Substitute GNULIB_GETPASS, HAVE_GETPASS, REPLACE_GETPASS. * tests/test-unistd-c++.cc: Test also the declaration of 'getpass'. * doc/glibc-functions/getpass.texi: A length limit exists also on uClibc and musl. * NEWS: Mention the change. 2018-08-19 Bruno Haible glob: Fix over-optimization due to attribute __nonnull__. * lib/glob.c (_GL_ARG_NONNULL): Define to empty. 2018-08-19 Bruno Haible glob: Fix another compilation error when glob.h is not replaced. Reported by Reuben Thomas in . * m4/glob.m4 (gl_GLOB): Set GLOB_H to non-empty when needed. * m4/glob_h.m4 (gl_GLOB_H): Define through AC_DEFUN_ONCE. 2018-08-18 Bruno Haible fnmatch: Avoid conflicting macro definitions of 'fnmatch'. Reported by Reuben Thomas in . * m4/fnmatch.m4 (gl_PREREQ_FNMATCH): Don't define 'fnmatch' as a macro in config.h. 2018-08-18 Bruno Haible Avoid -Wcast-function-type warnings from casts after GetProcAddress. Reported by Andy Moreton in . Solution proposed by Eli Zaretskii. * lib/getaddrinfo.c (GetProcAddress): Cast result to 'void *' first. * lib/gettimeofday.c (GetProcAddress): Likewise. * lib/link.c (GetProcAddress): Likewise. * lib/physmem.c (GetProcAddress): Likewise. * lib/poll.c (GetProcAddress): Likewise. * lib/select.c (GetProcAddress): Likewise. * lib/stat-w32.c (GetProcAddress): Likewise. 2018-08-18 Bruno Haible glob: Fix another compilation error when glob.h is not replaced. Reported and fix proposed by Reuben Thomas again. * lib/globfree.c: Include . 2018-08-18 Bruno Haible glob: Fix compilation error when glob.h is not replaced. Reported and fix proposed by Reuben Thomas in . * lib/glob_pattern_p.c: Include . * modules/glob (Depends-on): Add libc-config. 2018-08-18 Bruno Haible scratch_buffer: Add tests. * tests/test-scratch-buffer.c: New file. * modules/scratch_buffer-tests: New file. 2018-08-18 Bruno Haible scratch_buffer: Fix include file. Reported by Reuben Thomas in . * lib/scratch_buffer.h: Include first. Add double-inclusion guard. 2018-08-18 Bruno Haible glob-h: Revert Paul Eggert's revert. * m4/glob_h.m4: Revert to previous state. * modules/glob-h: Likewise. 2018-08-18 Paul Eggert glob-h: always build glob.h This works around a problem reported by Reuben Thomas in: http://lists.gnu.org/r/bug-gnulib/2018-08/msg00079.html This workaround always builds glob.h, even on platforms that do not need it; perhaps this could be improved someday. * m4/glob_h.m4 (gl_GLOB_H): Do not set or use GLOB_H, since glob.h is always created now. * modules/glob-h (BUILT_SOURCES, glob.h): Always build glob.h. 2018-08-13 Bruno Haible monetary: Simplify m4 code. * m4/monetary_h.m4 (gl_MONETARY_H): Define through AC_DEFUN_ONCE. (gl_MONETARY_H_BODY): Inline into gl_MONETARY_H. Remove macro. 2018-08-13 Bruno Haible fnmatch, fnmatch-gnu: Fix compilation error on Mac OS X. Reported by Jeroen Meijer in and by Paul J. Lucas in . * m4/fnmatch_h.m4 (gl_FNMATCH_H): Define through AC_DEFUN_ONCE. 2018-08-11 Bruno Haible setlocale: Trivial simplification. * lib/setlocale.c (setlocale_unixlike): Remove redundant #if. 2018-08-11 Paul Eggert verify: port 'assume' to traditional tools * lib/verify.h (assume): Port better to Oracle Studio 12.6 and other tools that use /*NOTREACHED*/ comments. 2018-08-10 Bruno Haible fnmatch-gnu: Fix compilation error in C++ namespace mode on Mac OS X. * modules/fnmatch-gnu (configure.ac): Invoke gl_MODULE_INDICATOR. * lib/fnmatch.in.h (fnmatch): Skip _GL_CXXALIASWARN if module 'fnmatch-gnu' is in use. 2018-08-07 Bruno Haible glob-h: Add tests. * tests/test-glob-h.c: New file, partially based on tests/test-glob.c. * tests/test-glob.c: Reorder #includes. Remove tests that are moved to tests/test-glob-h.c. * modules/glob-h-tests: New file. * tests/test-glob-h-c++.cc: Renamed from tests/test-glob-c++.cc. Add conditions. * modules/glob-h-c++-tests: Renamed from modules/glob-c++-tests. * modules/glob-tests (Depends-on): Remove glob-c++-tests. 2018-08-07 Bruno Haible glob-h: New module. * lib/glob.in.h: Use nearly the usual gnulib idioms for header file replacements. * lib/glob.c: Include . * m4/glob_h.m4: New file. * m4/glob.m4 (gl_GLOB): Require gl_GLOB_H. Remove code that is moved to glob_h.m4. Set HAVE_GLOB, REPLACE_GLOB, HAVE_GLOB_PATTERN_P, REPLACE_GLOB_PATTERN_P as appropriate. (gl_PREREQ_GLOB): Don't require AC_C_RESTRICT and AC_USE_SYSTEM_EXTENSIONS, now done through module 'glob-h'. * modules/glob-h: New file. * modules/glob (Files): Remove lib/glob.in.h, lib/glob-libc.h. (Dependencies): Add glob-h. Remove extensions, snippet/*, libc-config, lstat, sys_stat. Change conditions. (configure.ac): Test HAVE_GLOB, REPLACE_GLOB, HAVE_GLOB_PATTERN_P, REPLACE_GLOB_PATTERN_P. Set module indicator. (Makefile.am): Remove code that is moved to glob-h. * doc/posix-headers/glob.texi: Mention the 'glob-h' module. * modules/posixcheck (Depends-on): Add glob-h. 2018-08-06 Bruno Haible Force generation of substitute .h file when C++ support is enabled. * m4/ansi-c++.m4 (gl_ANSI_CXX): New macro. * modules/ansi-c++-opt (configure.ac): Just require gl_ANSI_CXX. * m4/fnmatch_h.m4 (gl_FNMATCH_H): If C++ support is enabled, set FNMATCH_H to non-empty. * m4/iconv_h.m4 (gl_ICONV_H_DEFAULTS): If C++ support is enabled, set ICONV_H to non-empty. * m4/monetary_h.m4 (gl_MONETARY_H_BODY): If C++ support is enabled, set MONETARY_H to non-empty. * m4/utime_h.m4 (gl_UTIME_H): If C++ support is enabled, set UTIME_H to non-empty. 2018-08-06 Bruno Haible fnmatch-h: Fix test compilation error on mingw (regression from today). * lib/fnmatch.in.h: Fix conditions. 2018-08-06 Bruno Haible sys_resource: Relicense under LGPLv2+. John Malmberg's approval is in . * modules/sys_resource (License): Change to LGPLv2+. 2018-08-06 Bruno Haible fnmatch-h: Add tests. * tests/test-fnmatch-h.c: New file. * modules/fnmatch-h-tests: New file. * tests/test-fnmatch-h-c++.cc: New file. * modules/fnmatch-h-c++-tests: New file. 2018-08-06 Bruno Haible fnmatch-h: New module. * lib/fnmatch.in.h: Use the usual gnulib idioms for header file replacements. (FNM_*): Don't redefine if fnmatch exists and we are not overriding it. (fnmatch): Use the usual gnulib idiom for function declarations. Enable 'posixcheck' warning. * m4/fnmatch_h.m4: New file. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Require gl_FNMATCH_H. Remove code that is moved to fnmatch_h.m4. When fnmatch does not exist, don't bother testing whether it is working. Set HAVE_FNMATCH, REPLACE_FNMATCH as appropriate. * modules/fnmatch-h: New file. * modules/fnmatch (Files): Remove lib/fnmatch.in.h. (Dependencies): Add fnmatch-h. Remove extensions, snippet/*. Change conditions. (configure.ac): Test HAVE_FNMATCH and REPLACE_FNMATCH. Set module indicator. (Makefile.am): Remove code that is moved to fnmatch-h. * modules/fnmatch-gnu (configure.ac): Test HAVE_FNMATCH and REPLACE_FNMATCH. * doc/posix-headers/fnmatch.texi: Mention the 'fnmatch-h' module. * modules/posixcheck (Depends-on): Add fnmatch-h. 2018-08-06 Bruno Haible Enable more C++ tests. * modules/inttypes-tests (Depends-on): Add inttypes-c++-tests. * modules/monetary-tests (Depends-on): Add monetary-c++-tests. * modules/strings-tests (Depends-on): Add strings-c++-tests. * modules/sys_resource-tests (Depends-on): Add sys_resource-c++-tests. * modules/utime-h-tests (Depends-on): Add utime-h-c++-tests. 2018-08-06 Bruno Haible getopt-posix, utime-h: Ensure the .h file gets regenerated when needed. * modules/getopt-posix (Makefile.am): Add Makefile dependency for getopt.h. * modules/utime-h (Makefile.am): Add Makefile dependency for utime.h. 2018-08-05 Bruno Haible utime-h: Generate header file when module 'posixcheck' is in use. * m4/utime_h.m4 (gl_UTIME_H): If module 'posixcheck' is in use, set UTIME_H to non-empty. 2018-08-05 Bruno Haible monetary: Generate header file when module 'posixcheck' is in use. * m4/monetary_h.m4 (gl_MONETARY_H_BODY): If module 'posixcheck' is in use, set MONETARY_H to non-empty. 2018-08-05 Bruno Haible iconv-h: Generate header file when module 'posixcheck' is in use. * m4/iconv_h.m4 (gl_ICONV_H_DEFAULTS): If module 'posixcheck' is in use, set ICONV_H to non-empty. 2018-08-05 Bruno Haible Optimize the "checking whether ... is declared without a macro" checks. Suggested by Paul Eggert in . * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Expand to nothing if the Gnulib module 'posixcheck' is not in use. 2018-08-05 Bruno Haible iconv-h: Enable 'posixcheck' warnings. * m4/iconv_h.m4 (gl_ICONV_H): Check for declarations of iconv and iconv_open. * lib/iconv.in.h (iconv_open, iconv): Use _GL_WARN_ON_USE. 2018-08-05 Bruno Haible Fix link error regarding 'rpl_environ' (regression from 2012-11-21). * m4/extern-inline.m4: Add more comments. * lib/warn-on-use.h (_GL_WARN_ON_USE_ATTRIBUTE): New macro. * lib/unistd.in.h (rpl_environ): Use it instead of _GL_WARN_ON_USE. * lib/math.in.h (_GL_WARN_REAL_FLOATING_DECL): Likewise. 2018-08-04 Bruno Haible New module 'posixcheck'. * modules/posixcheck: New file. * m4/posixcheck.m4: New file. * doc/gnulib-tool.texi (Finding POSIX substitutes): New section. (Which modules?): Reference it. 2018-08-01 Assaf Gordon dfa: fix memory leak * lib/dfa.c (dfafree): Add missing free() on dfa->superset. 2018-08-01 Paul Eggert ieee754-h: new module It looks like Emacs can use this for some NaN processing. Emacs uses it only on double NaNs so it should be safe. * MODULES.html.sh (func_all_modules): Add ieee754-h. * config/srclist.txt: Mention ieee754.h in a comment. * doc/glibc-headers/ieee754.texi (ieee754.h): Gnulib now has a substitute that should work except for long double and for non-IEEE platforms. * lib/ieee754.in.h, m4/ieee754-h.m4, modules/ieee754-h: * modules/ieee754-h-tests, tests/test-ieee754-h.c: New files. 2018-07-27 Bruno Haible iswcntrl: Mention minor problem on macOS. * doc/posix-functions/iswcntrl.texi: Mention oddity on macOS. 2018-07-26 Colin Watson bootstrap, gnulib-tool: fix translations rsync Previously, we created files such as $pobase/Makefile.in.in and then the subsequent rsync would immediately delete them. * build-aux/bootstrap (po_download_command_format): Avoid deleting non-.po files in target directory when rsyncing translations. * gnulib-tool (func_import): Likewise. * pygnulib/GLImport.py (GLImport.execute): Likewise. 2018-07-25 Jim Meyering bootstrap: reinstate definition fo gnulib_mk. That variable is used at least by cppi. * build-aux/bootstrap (gnulib_mk): Restore definition. This reverts the deletion from v0.1-1844-gc66dba9ba. 2018-07-23 Bruno Haible doc: For module names, use texinfo markup @code{} or @samp{}. * doc/alloca.texi: Mark gnulib module names with @code. * doc/alloca-opt.texi: Likewise. * doc/quote.texi: Likewise. * doc/posix-functions/freopen.texi: Likewise. * doc/posix-functions/open.texi: Likewise. * doc/posix-functions/readlink.texi: Likewise. * doc/posix-functions/readlinkat.texi: Likewise. * doc/posix-functions/stdout.texi: Likewise. * doc/posix-functions/stderr.texi: Likewise. * doc/posix-functions/unlink.texi: Likewise. * doc/posix-functions/unlinkat.texi: Likewise. * doc/posix-functions/utime.texi: Likewise. * doc/posix-functions/utimensat.texi: Likewise. * doc/posix-functions/utimes.texi: Likewise. * doc/posix-headers/stdint.texi: Likewise. * doc/glibc-functions/futimesat.texi: Likewise. * doc/glibc-functions/lutimes.texi: Likewise. * doc/glibc-functions/memmem.texi: Likewise. 2018-07-23 Werner LEMBERG doc: Avoid some overfull lines in the TeX output. * doc/glibc-functions/futimesat.texi: Replace a long @code with a @example. * doc/pastposix-functions/pthread_attr_getstackaddr.texi: Insert a newline before the long URL. * doc/pastposix-functions/pthread_attr_setstackaddr.texi: Likewise. * doc/relocatable-maint.texi: Use @smallexample instead of @example. Add line breaks in code snippets. 2018-07-17 Paul Eggert hard-locale: simplify by removing hard-locale.m4 * m4/hard-locale.m4: Remove. * modules/hard-locale (Files): Remove m4/hard-locale.m4. (configure.ac): Do not call gl_HARD_LOCALE. gnulib-tool: limit line length for git send-email * gnulib-tool (func_import): Break actioncmd log line into multiple lines. 2018-07-16 Bruno Haible ffs: Ensure declaration on mingw. Reported by Daniel P. Berrangé in https://lists.gnu.org/archive/html/bug-gnulib/2018-07/msg00061.html. * m4/ffs.m4 (gl_FUNC_FFS): Check whether ffs() not only exists but is also declared. 2018-07-13 Paul Eggert regex-tests: add dependency * modules/regex-tests (Depends-on): Add gettext-h. This is needed given the recent changes to regex, which no longer depends on gettext-h. 2018-07-06 Paul Eggert regex: now in sync with glibc * config/srclist.txt: Gnulib and glibc regex code are synchronized again. 2018-07-05 Paul Eggert renameatu: rename from renameat2 It's looking like Glibc will add a renameat2 function that is incompatible with Gnulib renameat2; see: https://sourceware.org/ml/libc-alpha/2018-07/msg00064.html To help avoid future confusion, rename renameat2 to something else. Use the name 'renameatu', as the Gnulib function is close to the Glibc function. Perhaps someday there will also be a renameat2 Gnulib module, which mimicks the future glibc renameat2, but that can wait as nobody seems to need such a module now. * NEWS: Mention this. * lib/renameatu.c: Rename from lib/renameat2.c. * lib/renameatu.h: Rename from lib/renameat2.h. * modules/renameatu: Rename from modules/renameat2. * modules/renameatu-tests: Rename from modules/renameat2-tests. All uses of "renameat2" in identifiers or file name changed to "renameatu", except for two instances in lib/renameatu.c that deal with the Linux kernel's renameat2 syscall. 2018-07-04 Paul Eggert gnulib-tool: minor tweaks for --gnu-make * gnulib-tool: Do not allow --gnu-make in test modes, since they all require automake. (func_emit_lib_Makefile_am): Don’t emit automake comment if --gnu-make. regex: work around conditional-dependencies glitch * modules/regex (Depends-on): Add langinfo. Without this change, I had problems building an experimental version of GNU Emacs. The symptom of the bug was a message ‘./configure: line 12726: test: =: unary operator expected’. This was due to a line in gl_FUNC_NL_LANGINFO that invokes ‘test $HAVE_LANGINFO_CODESET = 1’ even though HAVE_LANGINFO_CODESET was unset. Although gl_FUNC_NL_LANGINFO has ‘AC_REQUIRE([gl_LANGINFO_H])’ and gl_LANGINFO_H always sets HAVE_LANGINFO_CODESET to 0 or 1, gnulib-tool with --conditional-dependencies sometimes arranges for the gl_FUNC_NL_LANGINFO code to be executed before the gl_LANGINFO_H code. Since the regex code includes it should be depending on the langinfo module anyway, and this happens to work around the bug, so install that as a workaround for now. To reproduce the original problem, run the following shell script on the version of Gnulib just before this patch was installed. rm -fr foo mkdir foo cat >foo/configure.ac <<'EOF' AC_INIT(GNU Emacs, 27.0.50, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/) gl_EARLY gl_INIT AC_OUTPUT EOF ./gnulib-tool --import --conditional-dependencies --gnu-make --dir foo regex ./gnulib-tool --copy build-aux/install-sh foo/install-sh ./gnulib-tool --copy build-aux/config.sub foo/config.sub ./gnulib-tool --copy build-aux/config.guess foo/config.guess cd foo aclocal -I m4 autoconf ./configure --with-included-regex 2018-07-01 Paul Eggert wchar: fix bug when checking for ‘inline’ I discovered this when looking into using the regex module with Emacs. * m4/wchar_h.m4 (gl_WCHAR_H_INLINE_OK): Fix bug introduced in 2016-08-17T23:09:38Z!skunk@iSKUNK.ORG; the code compiled conftest1.c and conftest2.c but these files were not created. As far as I can see, this check never worked and nobody reported it until now, which is a bit worrisome. 2018-06-30 Jim Meyering bootstrap: s/--option val/--option=val/ * build-aux/bootstrap (gnulib_tool_options): Change the spelling of "--option val" pairs to "--option=val", for aesthetics, and also so that this file no longer triggers a common help2man syntax-check warning when copied into projects like grep, gzip, etc. 2018-07-01 Paul Eggert manywarnings: omit -Wswitch-default This should make things more consistent, as we already ignore -Wswitch-enum. Problem reported by Reuben Thomas; see: https://lists.gnu.org/r/bug-gnulib/2018-05/msg00179.html * build-aux/g++-warning.spec, build-aux/gcc-warning.spec: Add -Wswitch-default. * m4/manywarnings-c++.m4 (gl_MANYWARN_ALL_GCC_CXX_IMPL): * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Remove -Wswitch-default. regex: revert most trimming Problems reported by Bruno Haible in: https://lists.gnu.org/r/bug-gnulib/2018-07/msg00001.html * modules/regex (Depends-on): Add lock, memcmp, memmove, and wctype back in. lock because regex users shouldn’t need to know that regex needs locking, and the rest because gnulib-tool should ordinarily ignore them anyway. 2018-06-30 Paul Eggert regex: trim module dependencies * modules/regex (Depends-on): Remove gettext-h and lock, since the regex code should work OK without these modules, and Emacs uses it that way. Also remove memcmp, memmove, and wctype, as these modules are obsolete and should not be needed any more. 2018-06-29 Paul Eggert regex: glibc does not use intprops.h Maybe we can talk glibc into using intprops.h someday, but now doesn’t seem to be a good time. * lib/regcomp.c (TYPE_SIGNED): Remove; regex_internal.h now defines. * lib/regex_internal.h [_LIBC]: Do not include intprops.h. (TYPE_SIGNED, INT_ADD_WRAPV): New macros. 2018-06-28 Paul Eggert regex: port to recently proposed glibc regex merge This patch is inspired by Adhemerval Zanella's recent proposal https://www.sourceware.org/ml/libc-alpha/2018-06/msg00905.html to merge glibc and Gnulib regex. It aims to simplify the merge on the glibc side, without keeping Gnulib portable. * lib/regex.h: Fix a problem with glibc installed-header checking, as follows: (_Restrict_): Prefer __restrict if defined or if GCC 2.95 or later. (_Restrict_arr_): Prefer __restrict_arr if defined, otherwise prefer _Restrict_ if C99 or GCC 3.1 or later (but not C++). * lib/regex_internal.c (re_string_realloc_buffers, build_wcs_buffer) (build_wcs_upper_buffer, build_upper_buffer) (re_string_translate_buffer, re_string_context_at): Move decls here from lib/regex_internal.h, for glibc internal tests. (build_wcs_upper_buffer): Use __wcrtomb, not wcrtomb, fixing glibc BZ #18496. * lib/regex_internal.h (lock_fini) [_LIBC]: Cast to 0 to pacify -Wunused-value. (bitset_set, bitset_clear, bitset_contain, bitset_empty) (bitset_set_all, bitset_copy, bitset_not, bitset_merge) (bitset_mask): Now static inline, and without any __attribute__ ((unused)) decoration, for glibc internal tests. 2018-06-25 Bruno Haible threadlib: Fix LIBMULTITHREAD on platforms where --as-needed is enabled. Reported by Erik Auerswald in . * m4/threadlib.m4 (gl_THREADLIB_BODY): Check whether the linker supports --as-needed/--no-as-needed and --push-state/--pop-state. When defining USE_POSIX_THREADS_WEAK or USE_SOLARIS_THREADS_WEAK or USE_PTH_THREADS_WEAK, define LIBMULTITHREAD in such a way that -lpthread / -lthread / -lpth does not get optimized away by a preceding --as-needed option. 2018-06-25 Bruno Haible Continue to use spaces for indentation, not tabs. * MODULES.html.sh: Untabify. * doc/regex.texi: Likewise. * lib/acl-internal.c: Likewise. * lib/dfa.c: Likewise. * lib/exclude.c: Likewise. * lib/exclude.h: Likewise. * lib/get-permissions.c: Likewise. * lib/gettimeofday.c: Likewise. * lib/parse-datetime.y: Likewise. * lib/pselect.c: Likewise. * lib/set-permissions.c: Likewise. * lib/time.in.h: Likewise. * m4/canonicalize.m4: Likewise. * m4/gc.m4: Likewise. * m4/gnulib-common.m4: Likewise. * m4/pthread_sigmask.m4: Likewise. * m4/vararrays.m4: Likewise. * tests/test-digest.h: Likewise. * tests/test-fcntl-h.c: Likewise. * tests/test-timespec.c: Likewise. * tests/uniwbrk/test-uc-wordbreaks.c: Likewise. 2018-06-25 Bruno Haible manywarnings: Don't enable -Wjump-misses-init warnings by default. * build-aux/gcc-warning.spec: Add -Wjump-misses-init. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C)): Remove -Wjump-misses-init. 2018-06-25 Jim Meyering acl-internal.h: remove _GL_ATTRIBUTE_CONST on void function * lib/acl-internal.h (free_permission_context): Remove that attribute directive. Otherwise, it would provoke this from GCC 9: lib/acl-internal.h:300:3: error: 'const' attribute on function \ returning 'void' [-Werror=attributes] 2018-06-24 Jim Meyering parse-datetime: accommodate gcc-4.8.5 Bruno Haible reported the build failure in https://lists.gnu.org/r/bug-gnulib/2018-06/msg00066.html * lib/parse-datetime.y (parse_datetime2): Remove leading "static" on declaration of new local. 2018-06-24 Bruno Haible af_alg: Fail in continuable manner on Linux/powerpc64le. Reported by Assaf Gordon in . * lib/af_alg.c (afalg_stream): On non-seekable streams, try a single- byte send() as the first round. 2018-06-24 Bruno Haible af_alg: Fix state of stream after sendfile() succeeds. * lib/af_alg.c (afalg_stream): Invoke fflush and lseek, to ensure that the stream is correctly positioned afterwards. * modules/crypto/af_alg (Depends-on): Add fflush. * tests/test-digest.h (test_digest_on_files): Verify that after the operation the stream is positioned at end of file. 2018-06-24 Jim Meyering canon-host: take GCC9's advice rather than ignoring warning Pádraig Brady suggested not to ignore this GCC9 advice. * lib/canon-host.c: Undo preceding change. * lib/canon-host.h: Instead, declare with _GL_ATTRIBUTE_MALLOC. parse-datetime.y: avoid spurious GCC 9 warning * lib/parse-datetime.y (parse_datetime2): Save RELATIVE_TIME_0 into a function local prior to the first "goto fail". The prior use would evoke this: parse-datetime.y: In function 'parse_datetime2': parse-datetime.y:1791:19: error: jump skips variable initialization \ [-Werror=jump-misses-init] parse-datetime.y:2385:2: note: label 'fail' defined here parse-datetime.y:188:43: note: '({anonymous})' declared here parse-datetime.y:1841:12: note: in expansion of macro 'RELATIVE_TIME_0' canon-host.c: avoid spurious GCC 9 warning * lib/canon-host.c: Suppress GCC9's -Wsuggest-attribute=malloc. manywarnings: accommodate GCC 9.0-pre: remove -Wchkp and -Wabi * build-aux/gcc-warning.spec: Add them here, each with an explanation. * m4/manywarnings.m4: Remove them. Otherwise, building coreutils, I would see this: cc1: error: deprecated command line option '-Wchkp' [-Werror] cc1: error: -Wabi won't warn about anything [-Werror=abi] cc1: note: -Wabi warns about differences from the most up-to-date ABI,\ which is also used by default cc1: note: use e.g. -Wabi=11 to warn about changes from GCC 7 2018-06-24 Bruno Haible af_alg tests: Add another test. * tests/test-digest.h (test_digest_on_files): Also check a large file with a skipped header. * tests/test-md5.c: Include macros.h. * tests/test-sha1.c: Likewise. * tests/test-sha256.c: Likewise. * tests/test-sha512.c: Likewise. * modules/crypto/md5-tests (Files): Add tests/macros.h. * modules/crypto/sha1-tests (Files): Likewise. * modules/crypto/sha256-tests (Files): Likewise. * modules/crypto/sha512-tests (Files): Likewise. 2018-06-24 Pádraig Brady maint: clarify comments about sticky EOF * lib/af_alg.c: Be more direct that we can't assume stickiness of EOF for portability reasons. * lib/md5.c: Clarify that this isn't just a glibc issue. * lib/sha1.c: Likewise. * lib/sha256.c: Likewise. * lib/sha512.c: Likewise. 2018-06-24 Bruno Haible af_alg: Comment and style improvements. * lib/af_alg.c (alg_socket): Use 'size_t' as index into a string. (afalg_buffer, afalg_stream): Improve comments. 2018-06-24 Pádraig Brady af_alg: disable kernel hash functions by default All the kernel routines were seen to be significantly slower with these relatively recent components on an i3-2310M system: kernel-4.10.6-200.fc25.x86_64 openssl-1.0.2m-1.fc25.x86_64 sha1 was nearly twice as slow in the kernel for example. Further considerations why this should not be the default, at: https://lists.gnu.org/r/coreutils/2018-06/msg00034.html * m4/af_alg.m4: Require --with-linux-crypto to enable. * m4/gl-openssl.m4: Tweak accordingly. 2018-06-24 Pádraig Brady af_alg: avoid hangs when reading from streams * lib/af_alg.c (afalg_stream): Don't assume EOF is sticky, and thus avoid doing a fread() when feof() is set. * lib/md5.c: Ensure feof() is called before fread(). * lib/sha1.c: Likewise. * lib/sha256.c: Likewise. * lib/sha512.c: Likewise. 2018-06-24 Pádraig Brady af_alg: fix error handling when hash not returned * lib/af_alg.c (afalg_stream): Handle the case where we've successfully written data to the kernel in the read/write loop, but the kernel doesn't respond with the hash. 2018-06-24 Paul Eggert libc-config: merge from glibc * lib/cdefs.h (__inline, __restrict): Copy from current glibc. This fixes glibc bug 17721, which Gnulib had already fixed in a different way. (__nonnull): Lessen the distance from glibc by using the glibc definition inside an ‘#ifndef __nonnull’. (__attribute_nonstring__): New macro, copied from current glibc. * lib/libc-config.h (__attribute_nonstring__): New undef. (__restrict): Remove; workaround no longer needed. Keep the __inline workaround, though, as it uses HAVE___INLINE to support more compilers than the glibc __inline can. 2018-06-24 Bruno Haible mbrtowc, wcwidth: Fix MT-safety bug (regression from 2018-06-23). * lib/mbrtowc.c (enc_t): New enum type. (locale_enc, locale_enc_cached): New functions. (mbrtowc): Eliminate static variables. Use locale_enc_cached instead. * lib/wcwidth.c (is_locale_utf8, is_locale_utf8_cached): New functions. (wcwidth): Eliminate static variables. Use is_locale_utf8_cached instead. * m4/mbrtowc.m4 (gl_PREREQ_MBRTOWC): Require AC_C_INLINE. * m4/wcwidth.m4 (gl_PREREQ_WCWIDTH): New macro. * modules/wcwidth (configure.ac): Invoke it. 2018-06-24 Bruno Haible wchar-single: Fix test failure in wcwidth tests. * tests/test-wcwidth.c (main): If the wchar-single module is present, skip the tests in the C locale. 2018-06-23 Pádraig Brady crypto: mention --without-linux-crypto in --with-openssl --help * m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Mention that linux crypto routines take precedence in --with-openssl help output. 2018-06-23 Pádraig Brady wchar-single: a new module to enable optimizations in wchar replacements * lib/mbrtowc.c (mbrtowc): Only check locale_charset() once if GNULIB_WCHAR_SINGLE is enabled. * lib/wcwidth.c (wcwidth): Likewise. 2018-06-23 Bruno Haible libc-config: Fix conflict with FreeBSD include files. * lib/cdefs.h (__nonnull): Remove definition. * lib/libc-config.h (__nonnull): Remove undefinition. 2018-06-21 Paul Eggert random_r: do not crash if state is unaligned Problem reported by Bruce Korb in: https://lists.gnu.org/r/bug-gnulib/2018-06/msg00030.html I reproduced the crash on 32-bit sparc with Oracle Studio 12.6 with 'cc -O2 -xmemalign=8s'. * lib/random_r.c: Include string.h, for memcpy. (get_int32, set_int32): New functions. (__srandom_r, __initstate_r, __setstate_r, __random_r): Use them to avoid assumption that state pointer is aligned. (__random_r): Avoid integer overflow if INT_MAX == UINT32_MAX. * tests/test-random_r.c (test_failed): New function. (main): Use it, to test for alignment bugs. random_r: omit unnecessary include * lib/random_r.c: Do not include limits.h. random, random_r: merge from glibc * lib/random.c, lib/random_r.c: Include libc-config.h if !_LIBC, not config.h unilaterally. * lib/random.c: Do not include stdint.h or time.h; not needed. Include libc-lock.h if _LIBC, and define substitute macros otherwise. (unsafe_state): Rename from generator. All uses changed. Use C99-style initializers. (__random, __srandom, __initstate, __setstate): Rename from non-underscored version, but define it to non-underscored version on Gnulib. Add a lock. * lib/random_r.c (__srandom_r, __initstate_r, __setstate_r, __random_r): Likewise. Do not include ; not needed since stdlib.h defines int32_t. (weak_alias, __set_errno) [!_LIBC]: Remove; now done by libc-config. (__srandom_r): Use int32_t instead of long int where int32_t will do. (__random_r): Use uint32 to fix glibc bug 17343. * modules/random, modules/random_r (Depends-on): Add libc-config. Depend on stdint only if $HAVE_RANDOM = 0. 2018-06-19 Jim Meyering README-release: also run any check-very-expensive tests * top/README-release: Adjust instructions so they run the check-very-expensive tests when there is such a target. 2018-06-18 Bruno Haible pthread_rwlock_rdlock: Add comments regarding glibc behaviour. * m4/pthread_rwlock_rdlock.m4: Add comment. * doc/posix-functions/pthread_rwlock_rdlock.texi: Mention that rwlocks are reader-preferring in glibc. * doc/posix-functions/pthread_rwlock_tryrdlock.texi: Likwise. * doc/posix-functions/pthread_rwlock_timedrdlock.texi: Likewise. 2018-06-17 Paul Eggert crypto: use byteswap * lib/md4.c, lib/md5.c, lib/sha1.c, lib/sha256.c, lib/sha512.c: * lib/sm3.c: Include . (SWAP): Use its macros rather than reinventing the wheel. * modules/crypto/md4, modules/crypto/md5-buffer: * modules/crypto/sha1-buffer, modules/crypto/sha256-buffer: * modules/crypto/sha512-buffer, modules/crypto/sm3: (Depends-on): Add byteswap. 2018-06-17 Pádraig Brady gendocs.sh: fix support for legacy --texi2html * build-aux/gendocs.sh: Restrict use of TOP_NODE_UP_URL to the default makeinfo invocation. Reported by Bruce Korb 2018-06-17 Bruno Haible gettext po infrastructure: Update from current gettext git. Reported by Akim Demaille . * build-aux/po/Makefile.in.in: Update from current gettext git. * build-aux/po/remove-potcdate.sin: Likewise. * config/srclist.txt: Temporarily disable sync for these files. 2018-06-17 Bruno Haible getloadavg: Return 0 on Windows without Cygwin. * lib/getloadavg.c: Don't assume that the symbol WINDOWS32 is defined. 2018-06-17 Paul Smith getloadavg: Allow building on Windows without Cygwin * lib/getloadavg.c: Reinstate ifdef for HAVE_UNISTD_H. * m4/getloadavg.m4: Check for unistd.h. 2018-06-03 Paul Eggert Port crypto/af_alg to GCC 4.8.4 Problem reported by Peter Simons in: https://lists.gnu.org/r/bug-gnulib/2018-06/msg00002.html * modules/crypto/af_alg (Depends-on): Add c99 if USE_AF_ALG. 2018-05-27 Colin Watson bootstrap: document source fetching in --help * build-aux/bootstrap (usage): Document how Gnulib sources are fetched. 2018-04-09 Colin Watson bootstrap: allow non-submodule control of gnulib * build-aux/bootstrap: Honour GNULIB_URL and GNULIB_REVISION in bootstrap.conf when fetching gnulib using "git clone" or via GNULIB_SRCDIR. 2018-05-21 Paul Eggert crypto: omit stream ops Emacs doesn’t need * lib/md5.c (md5_stream): * lib/sha1.c (sha1_stream): * lib/sha256.c (shaxxx_stream, sha256_stream, sha224_stream): * lib/sha512.c (shaxxx_stream, sha512_stream, sha384_stream): Compile stream functions only if GL_COMPILE_CRYPTO_STREAM is defined. Emacs needs this, as it does not use the stream operations and doesn’t need all the af_alg stuff we’ve recently added. Perhaps a similar change is needed to the other crypto modules, but this patch changes only those needed for Emacs. * modules/crypto/md5-buffer, modules/crypto/sha1-buffer: * modules/crypto/sha256-buffer, modules/crypto/sha512-buffer: New modules, used by Emacs. * modules/crypto/md5, modules/crypto/sha1, modules/crypto/sha256: * modules/crypto/sha512: Rewrite to depend on the new modules. 2018-05-20 Pádraig Brady fts: avoid a memory leak edge case * lib/fts.c (fts_open): Set an appropriate fts_level so that an immediate fts_close() will free the allocation. * tests/test-fts.c (fts_dealloc): Add a test case which will trigger under valgrind or address sanitizer. Fixes https://bugs.gnu.org/31439 2018-05-20 Bruno Haible wcwidth tests: Fix link error. * modules/wcwidth-tests (Makefile.am): Link test-wcwidth against $(LIBUNISTRING). 2018-05-20 Bruno Haible regex: Fix "error: possibly undefined macro: gl_GLIBC21". * modules/regex (Files): Add m4/glibc21.m4. 2018-05-20 Bruno Haible localcharset: Optimize. * lib/localcharset.c (alias_table): Comment out no-op mappings for platforms where these don't matter. This reduces the table size, which in turn reduces the lookup time. 2018-05-19 Bruno Haible localcharset: Map the locale encodings found in newer OSes. * lib/localcharset.c (alias_table): Add mapping for locale encodings found in FreeBSD 11, NetBSD 7, Solaris 10, Openindiana, HP-UX 11.31, IRIX 6.5, Minix 3.3. * lib/localcharset.h: Update comments accordingly. Also for Cygwin 2.9. 2018-05-19 Bruno Haible localcharset: Move mapping tables into the code. Use a binary search. * lib/localcharset.h: Document the GNU canonical names for character encodings here. * lib/localcharset.c: Don't include , , relocatable.h, configmake.h. (O_NOFOLLOW, ISSLASH, DIRECTORY_SEPARATOR, getc, volatile): Remove macros. (charset_aliases): Remove variable. (get_charset_aliases): Remove function. (struct table_entry): New type. (alias_table, locale_table): New constants. (locale_charset): Use the alias_table or locale_table to get the canonicalized encoding name. * lib/config.charset: Remove file. * lib/ref-add.sin: Remove file. * lib/ref-del.sin: Remove file. * m4/localcharset.m4 (gl_LOCALCHARSET): Don't require gl_FCNTL_O_FLAGS, AC_CANONICAL_HOST, gl_GLIBC21. Don't check for getc_unlocked. * modules/localcharset (Notice): Remove. (Files): Remove config.charset, ref-add.sin, ref-del.sin, fcntl-o.m4, glibc21.m4. (Depends-on): Remove configmake. (configure.ac): Define LOCALCHARSET_TESTS_ENVIRONMENT to empty. (Makefile.am): Simplify. * build-aux/prefix-gnulib-mk: Remove special code for the removed files. 2018-05-19 Bruno Haible localcharset: Add a manual test. * tests/test-localcharset.c: New file. * modules/localcharset-tests: New file. 2018-05-19 Bruno Haible localcharset: Remove support for obsolete platforms. * lib/config.charset: Remove support for Linux/libc5, glibc-2.0.x, and Mac OS X 10.2. Comment out dubious entry for Solaris. 2018-05-19 Jim Meyering gnupload: adjust comment * build-aux/gnupload: Add FIXME-2020 comment, to make it slightly more likely we'll remove the just-added code in a year or two. 2018-05-19 Bruno Haible gnupload: Fix "gpg-agent is not available in this session" error. * build-aux/gnupload (GPG): Pick the right GNUPG executable to use. 2018-05-16 Paul Eggert crypto/af_alg: fix --help * m4/af_alg.m4: Avoid spurious newline in --help output. 2018-05-13 Bruno Haible nl_langinfo: Fix compilation error on Android. * lib/nl_langinfo.c (nl_langinfo): Define values for the items GROUPING, INT_CURR_SYMBOL, etc. only if these items are defined. 2018-05-13 Bruno Haible truncate: Fix compilation error on Android. * m4/truncate.m4 (gl_FUNC_TRUNCATE): Test also whether 'truncate' is declared. Set HAVE_DECL_TRUNCATE, not HAVE_TRUNCATE. * lib/unistd.in.h (truncate): Test HAVE_DECL_TRUNCATE, not HAVE_TRUNCATE. * modules/truncate: Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_TRUNCATE, not HAVE_TRUNCATE. * modules/unistd (Makefile.am): Substitute HAVE_DECL_TRUNCATE, not HAVE_TRUNCATE. * doc/posix-functions/truncate.texi: Mention the issue. 2018-05-13 Bruno Haible pthread: Fix compilation error on Android. * lib/pthread.in.h: Use _GL_ALREADY_INCLUDING_PTHREAD_H to shortcut recursive inclusion of this file. 2018-05-13 Bruno Haible posix_spawn: Fix compilation error on Android. * lib/spawn.in.h (posix_spawnattr_t): Consider also the case HAVE_POSIX_SPAWNATTR_T = 1 && HAVE_POSIX_SPAWN = 0. (posix_spawn_file_actions_t): Consider also the case HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 && HAVE_POSIX_SPAWN = 0. 2018-05-13 Bruno Haible tsearch: Move from K&R C to ANSI C. * lib/tsearch.c (tfind): Convert definition to ANSI C. 2018-05-13 Bruno Haible tsearch: Fix compilation error on Android. * lib/search.in.h (twalk): Declare when HAVE_TWALK, not HAVE_TSEARCH, is 0. (GNULIB_defined_tsearch, GNULIB_defined_twalk): New macros. * lib/tsearch.c (tsearch, tfind, tdelete): Define only if GNULIB_defined_tsearch is true. (twalk): Define only if GNULIB_defined_twalk is true. * modules/tsearch (configure.ac): Compile tsearch.c also if HAVE_TWALK is 0. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Set HAVE_TWALK. * m4/search_h.m4 (gl_SEARCH_H_DEFAULTS): Initialize HAVE_TWALK. * modules/search (Makefile.am): Substitute HAVE_TWALK. 2018-05-13 Bruno Haible imaxdiv: Fix compilation error on Android. * m4/imaxdiv.m4 (gl_FUNC_IMAXDIV): Set HAVE_IMAXDIV_T to 0 if imaxdiv_t is not defined. * lib/inttypes.in.h (imaxdiv_t): Define if HAVE_IMAXDIV_T, not HAVE_DECL_IMAXDIV, is 0. * m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Initialize HAVE_IMAXDIV_T. * modules/inttypes-incomplete (Makefile.am): Substitute HAVE_IMAXDIV_T. 2018-05-13 Bruno Haible Support selective inclusion mechanism of recent mingw.org header files. Reported by Eli Zaretskii . * lib/sys_types.in.h: On mingw, when __need_off_t, __need___off64_t, __need_ssize_t, or __need_time_t is defined, just include the system's . * lib/locale.in.h: On mingw, when __need_locale_t is defined, just include the system's . 2018-05-13 Bruno Haible Avoid compilation error due to 'mmap' on Android. * lib/vma-iter.c (_FILE_OFFSET_BITS): Undefine on Android. * lib/get-rusage-as.c (_FILE_OFFSET_BITS): Likewise. * tests/zerosize-ptr.h (_FILE_OFFSET_BITS, __USE_FILE_OFFSET64): Undefine on Android. 2018-05-13 Bruno Haible Add cross-compilation guesses for Linux systems without glibc. * m4/chown.m4 (AC_FUNC_CHOWN): Add cross-compilation guess for Linux. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Likewise. * m4/link.m4 (gl_FUNC_LINK): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Likewise. * m4/mkdir.m4 (gl_FUNC_MKDIR): Likewise. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Likewise. * m4/mknod.m4 (gl_FUNC_MKNOD): Likewise. * m4/pselect.m4 (gl_FUNC_PSELECT): Likewise. * m4/readlink.m4 (gl_FUNC_READLINK): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/select.m4 (gl_FUNC_SELECT): Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/symlink.m4 (gl_FUNC_SYMLINK): Likewise. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/utimens.m4 (gl_UTIMENS): Likewise. 2018-05-13 Bruno Haible getpagesize: Fix compilation error on Android. * m4/getpagesize.m4 (gl_CHECK_FUNC_GETPAGESIZE): New macro. (gl_FUNC_GETPAGESIZE): Invoke it instead of AC_CHECK_FUNC. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Don't invoke AC_CHECK_FUNC. Instead, invoke gl_CHECK_FUNC_GETPAGESIZE and define HAVE_GETPAGESIZE accordingly. * modules/getcwd (Files): Add m4/getpagesize.m4. 2018-05-13 Bruno Haible tcgetsid: Fix compilation error on Android. * m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible getpass: Fix configure test for Android. * m4/getpass.m4 (gl_PREREQ_GETPASS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible ffs: Fix compilation error on Android. * m4/ffs.m4 (gl_FUNC_FFS): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible mkfifo: Fix compilation error on Android. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible c-strtod: Fix configure test for Android. * m4/c-strtod.m4 (gl_C_STRTOD): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible random: Fix compilation error on Android. * m4/random.m4 (gl_FUNC_RANDOM): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible grantpt: Fix compilation error on Android. * m4/grantpt.m4 (gl_FUNC_GRANTPT): Use AC_LINK_IFELSE instead of AC_CHECK_FUNC. 2018-05-13 Bruno Haible stdioext: Fix compilation errors with newer Android headers. * lib/stdio-impl.h (fp_, fp_ub): Define differently for Android. (__SLBF, __SNBF, __SRD, __SWR, __SRW, __SEOF, __SERR, __SOFF): Define fallbacks for Android. * lib/fpending.c: Update comments. * lib/fpurge.c: Likewise. * lib/freadable.h: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.h: Likewise. * lib/freadptr.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.h: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.h: Likewise. * lib/fwriting.c: Likewise. 2018-05-13 Bruno Haible doc: Add info about Android versions 2.0 to 8.1. * doc/**/*.texi: Add info about functions in all released versions of Bionic. 2018-05-12 Bruno Haible fseeko: On mingw, don't use the hidden function _fseeki64. Reported by Eli Zaretskii . * m4/fseeko.m4 (gl_PREREQ_FSEEKO): Test whether _fseeki64 is declared. * lib/fseeko.c (fseeko): Use _fseeki64 only if it is declared. 2018-05-12 Bruno Haible glob: Choose 'dirent_type' in a way that works better on mingw. Reported and suggested by Eli Zaretskii . * lib/glob.c (dirent_type): Define as uint_fast32_t. 2018-05-12 Bruno Haible execute, spawn-pipe: Avoid warning about redefining 'close'. Reported by Eli Zaretskii . * lib/execute.c: Undefine 'close' before redefining it. * lib/spawn-pipe.c: Likewise. 2018-05-12 Bruno Haible nanosleep: Avoid test failure on mingw when it has nanosleep. Reported by Eli Zaretskii . * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check whether alarm() exists. If it does not exist, use a simpler test program that does not call alarm(). 2018-05-10 Bruno Haible lock, cond, thread, tls: Use a different symbol as libpthread witness. Reported by Devin Hussey . Based on a patch by Paul Eggert. * lib/glthread/lock.h (pthread_in_use): Use 'pthread_mutexattr_gettype' as witness of libpthread. * lib/glthread/cond.h (pthread_in_use): Likewise. * lib/glthread/thread.h (pthread_in_use): Likewise. * lib/glthread/tls.h (pthread_in_use): Likewise. 2018-05-10 Bruno Haible cond tests: Fix compilation error on Solaris. * tests/test-cond.c: Include before defining 'yield' as a macro. 2018-05-10 Bruno Haible doc: Add partial info about Android 4.3. * doc/*-functions/*.texi: Add info about functions that were added to Bionic between Android 4.3 and Android 9.0. 2018-05-10 Bruno Haible doc: Add info about Android 9.0. * doc/**/*.texi: Add info about functions and headers in Bionic from Android 9.0. 2018-05-09 Paul Eggert af_alg: fix my typo in afalg_buffer * lib/af_alg.c (afalg_buffer): Fix typo I recently introduced. (afalg_stream): Simplify and avoid the need for a runtime test at the end. af_alg: recover better from crypto failures * lib/af_alg.c (afalg_stream): Recover from crypto failures if the input stream is seekable, by repositioning the stream back to where it was, possibly by just calling sendfile with an offset arg. This lets us return -EAFNOSUPPORT instead of -EIO in some cases, which lets our callers try again with user-mode code. * modules/crypto/af_alg (Depends-on): Depend on fseeko and ftello instead of on fflush and lseek. af_alg: distiguish I/O errors better * lib/af_alg.c (afalg_buffer, afalg_stream): Return -EAFNOSUPPORT, not -EIO, if it’s OK for the caller to try again with user-mode code. (afalg_stream) [!_WIN32 || __CYGWIN__]: Return -EIO (not possibly some other error number) if fflush fails, as the caller should not try again that case. af_alg: avoid gotos * lib/af_alg.c (afalg_buffer, afalg_stream): Rewrite to avoid gotos, as they were a source of unreliability and made the code a bit harder to follow. af_alg: don’t leak file descriptors into children * lib/af_alg.c (alg_socket): Use SOCK_CLOEXEC when creating sockets. This code should be compiled only on recent GNU/Linux platforms so we shouldn’t have to also depend on the accept4 module. af_alg: coalesce socket creation * lib/af_alg.c (alg_socket): New function. (afalg_buffer, afalg_stream): Use it. This avoids some code duplication and gotos. af_alg: fix file descriptor leak * lib/af_alg.c (afalg_stream): Close leak. af_alg: Pacify --enable-gcc-warnings on GCC 8 * lib/af_alg.c (afalg_buffer, afalg_stream): Reorder local decls and checking to pacify gcc -Wjump-misses-init on GCC 8. 2018-05-07 Paul Eggert af_alg: Pacify --enable-gcc-warnings Problem reported by Assaf Gordon in: https://lists.gnu.org/r/bug-gnulib/2018-05/msg00041.html * lib/af_alg.c (afalg_buffer): Move local decls to pacify gcc -Wjump-misses-init. * lib/sha512.c (shaxxx_stream): Now static. 2018-05-06 Bruno Haible af_alg: Add ability to use Linux kernel crypto API on data in memory. * lib/af_alg.h (afalg_buffer): New declaration. * lib/af_alg.c (afalg_buffer): New function. 2018-05-06 Bruno Haible af_alg: Avoid warnings. * lib/af_alg.h (afalg_stream): Mark fallback declaration as inline. * m4/af_alg.m4 (gl_AF_ALG): Require AC_C_INLINE. 2018-05-06 Bruno Haible crypto/{md5,sha1,sha256,sha512} tests: Add benchmarks. * tests/bench-digest.h: New file. * tests/bench-md5.c: New file. * tests/bench-sha1.c: New file. * tests/bench-sha224.c: New file. * tests/bench-sha256.c: New file. * tests/bench-sha384.c: New file. * tests/bench-sha512.c: New file. * modules/crypto/md5-tests (Files): Add tests/bench-md5.c, tests/bench-digest.h. (Depends-on): Add getrusage, gettimeofday. (Makefile.am): Add variables to build bench-md5. * modules/crypto/sha1-tests (Files): Add tests/bench-sha1.c, tests/bench-digest.h. (Depends-on): Add getrusage, gettimeofday. (Makefile.am): Add variables to build bench-sha1. * modules/crypto/sha256-tests (Files): Add tests/bench-sha224.c, tests/bench-sha256.c, tests/bench-digest.h. (Depends-on): Add getrusage, gettimeofday. (Makefile.am): Add variables to build bench-sha224, bench-sha256. * modules/crypto/sha512-tests (Files): Add tests/bench-sha384.c, tests/bench-sha512.c, tests/bench-digest.h. (Depends-on): Add getrusage, gettimeofday. (Makefile.am): Add variables to build bench-sha384, bench-sha512. 2018-05-06 Bruno Haible af_alg: Fix a resource leak. * lib/af_alg.c (afalg_stream): Close socket before returning -EINVAL. New local variable 'result'. 2018-05-06 Bruno Haible af_alg: Fix bug with streams that are not at position 0. * lib/af_alg.c (afalg_stream): Before sendfile, invoke fflush. Don't assume that the stream is positioned at position 0. * lib/af_alg.h (afalg_stream): Mention restriction regarding the state of the stream. * lib/md5.h (md5_stream): Likewise. * lib/sha1.h (sha1_stream): Likewise. * lib/sha256.h (sha256_stream, sha224_stream): Likewise. * lib/sha512.h (sha512_stream, sha384_stream): Likewise. * modules/crypto/af_alg (Depends-on): Add fflush, lseek. crypto/{md5,sha1,sha256,sha512} tests: Enhance test. * tests/test-digest.h (test_digest_on_files): Add a test with a FILE stream that is not positioned at the beginning. 2018-05-06 Bruno Haible af_alg: Add configure option to enable/disable use of Linux crypto API. Suggested by Assaf Gordon . * m4/af_alg.m4 (gl_AF_ALG): Add AC_ARG_WITH invocation. Define C macro USE_LINUX_CRYPTO_API. * lib/af_alg.h: Test USE_LINUX_CRYPTO_API, not HAVE_LINUX_IF_ALG_H. * lib/af_alg.c: Likewise. 2018-05-06 Bruno Haible Followup to 'af_alg: New module.'. * modules/crypto/md5 (Depends-on): Remove sys_socket, sys_stat. * modules/crypto/sha1 (Depends-on): Likewise. * modules/crypto/sha256 (Depends-on): Likewise. * modules/crypto/sha512 (Depends-on): Likewise. 2018-05-05 Paul Eggert crypto/{md5,sha1,sha256,sha512}: simplify * lib/md5.c (md5_stream): * lib/sha1.c (sha1_stream): * lib/sha256.c (shaxxx_stream): Simplify, partly by assuming C99. * lib/sha256.c (shaxxx_stream): New function, which implements both sha256 and sha224. Simplify, partly by assuming C99. (sha256_stream, sha224_stream): Use it to avoid code duplication, removing a FIXME. * lib/sha512.c (shaxxx_stream, sha512_stream, sha384_stream): Likewise. af_alg: Improve comments. * lib/af_alg.h: Use imperatives and tighten up wording. 2018-05-05 Bruno Haible af_alg: Improve comments. * lib/af_alg.c (afalg_stream): Improve comment about kernel bug. 2018-05-05 Bruno Haible af_alg: New module. * lib/af_alg.h: Test HAVE_* macro through '#if', not '#ifdef'. * lib/af_alg.c: Include "af_alg.h" before the other header files. * lib/md5.c: Include "af_alg.h" unconditionally. (md5_stream): Invoke afalg_stream unconditionally. * lib/sha1.c: Include "af_alg.h" unconditionally. (sha1_stream): Invoke afalg_stream unconditionally. * lib/sha256.c: Include "af_alg.h" unconditionally. (sha256_stream, sha224_stream): Invoke afalg_stream unconditionally. * lib/sha512.c: Include "af_alg.h" unconditionally. (sha512_stream, sha384_stream): Invoke afalg_stream unconditionally. * m4/af_alg.m4: Renamed from m4/linux-if-alg.m4. (gl_AF_ALG): Renamed from gl_LINUX_IF_ALG_H. * modules/crypto/af_alg: New file. * modules/crypto/md5 (Files): Remove files that are now in the 'crypto/af_alg' module. (Depends-on): Add crypto/af_alg. (configure.ac): Remove gl_LINUX_IF_ALG_H invocation. (Makefile.am): Don't mention af_alg.c here. * modules/crypto/sha1 (Files): Remove files that are now in the 'crypto/af_alg' module. (Depends-on): Add crypto/af_alg. (configure.ac): Remove gl_LINUX_IF_ALG_H invocation. (Makefile.am): Don't mention af_alg.c here. * modules/crypto/sha256 (Files): Remove files that are now in the 'crypto/af_alg' module. (Depends-on): Add crypto/af_alg. (configure.ac): Remove gl_LINUX_IF_ALG_H invocation. (Makefile.am): Don't mention af_alg.c here. * modules/crypto/sha512 (Files): Remove files that are now in the 'crypto/af_alg' module. (Depends-on): Add crypto/af_alg. (configure.ac): Remove gl_LINUX_IF_ALG_H invocation. (Makefile.am): Don't mention af_alg.c here. 2018-05-05 Paul Eggert crypto tests: pacify GCC * tests/test-digest.h (test_digest_on_files): Don’t assume digest size fits in int (!). af_alg: minor style improvements * lib/af_alg.c (afalg_stream): Prefer C99 style decl-after-statement, since we’re already assuming C99. Clarify by strengthening the bind test and omit unnecessary assignment. 2018-05-05 Bruno Haible af_alg: Fix bug on empty files. * lib/af_alg.c (afalg_stream): Ignore the kernel's result if the input stream is empty. 2018-05-05 Paul Eggert sys-limits.h: new file for crypto and safe I/O * lib/af_alg.c: Include sys-limits.h. (MAX_RW_COUNT): Remove. Use replaced by SYS_BUFSIZE_MAX. (afalg_stream): Also reject negative sizes for sendfile; they should not happen and the code is a bit cleaner and faster this way. * lib/safe-read.c: Include sys-limits.h. (BUGGY_READ_MAXIMUM): Remove. All uses replaced by SYS_BUFSIZE_MAX. * lib/sys-limits.h: New file, with values and commentary derived from the old safe-read.c and from GNU Emacs sysdep.c. * modules/crypto/md5, modules/crypto/sha1, modules/crypto/sha256: * modules/crypto/sha512, modules/safe-read, modules/safe-write: Add lib/sys-limits.h to Files section. 2018-05-05 Bruno Haible af_alg: Improve function signature. * lib/af_alg.h (afalg_stream): Swap second and third argument. * lib/af_alg.c (afalg_stream): Likewise. * lib/md5.c, lib/sha1.c, lib/sha256.c, lib/sha512.c: Callers changed. 2018-05-05 Bruno Haible crypto/{md5,sha1,sha256,sha512}: Fix compilation error (S_TYPEISTMO). * modules/crypto/md5 (Depends-on): Add 'sys_stat'. * modules/crypto/sha1 (Depends-on): Likewise. * modules/crypto/sha256 (Depends-on): Likewise. * modules/crypto/sha512 (Depends-on): Likewise. 2018-05-05 Bruno Haible crypto/{md5,sha1,sha256,sha512}: Fix module description. * modules/crypto/md5 (Depends-on): Add 'sys_socket'. * modules/crypto/sha1 (Depends-on): Likewise. * modules/crypto/sha256 (Depends-on): Likewise. * modules/crypto/sha512 (Depends-on): Likewise. 2018-05-05 Bruno Haible af_alg: Add documentation. * lib/af_alg.h: Add comments. 2018-05-05 Bruno Haible sha512: Add tests. * tests/test-sha512.c: New file. * modules/crypto/sha512-tests: New file. 2018-05-05 Bruno Haible sha256: Add tests. * tests/test-sha256.c: New file. * modules/crypto/sha256-tests: New file. 2018-05-05 Bruno Haible sha1 tests: Add test for sha1_stream. * tests/test-sha1.c: Include test-digest.h. (main): Invoke test_digest_on_files on 'sha1_stream'. * modules/crypto/sha1-tests (Files): Add tests/test-digest.h. 2018-05-05 Bruno Haible md5 tests: Add test for md5_stream. * tests/test-digest.h: New file. * tests/test-md5.c: Include test-digest.h. (main): Invoke test_digest_on_files on 'md5_stream'. * modules/crypto/md5-tests (Files): Add tests/test-digest.h. 2018-04-28 Matteo Croce md5sum: Use AF_ALG when available. * lib/md5.c: Include af_alg.h. (md5_stream): Use afalg_stream when available. * modules/crypto/md5 (Files): Add the af_alg files. (configure.ac): Invoke gl_LINUX_IF_ALG_H. (Makefile.am): Add af_alg.c. 2018-04-28 Matteo Croce sha512sum: Use AF_ALG when available. * lib/sha512.c: Include af_alg.h. (sha512_stream, sha384_stream): Use afalg_stream when available. * modules/crypto/sha512 (Files): Add the af_alg files. (configure.ac): Invoke gl_LINUX_IF_ALG_H. (Makefile.am): Add af_alg.c. 2018-04-28 Matteo Croce sha256sum: Use AF_ALG when available. * lib/sha256.c: Include af_alg.h. (sha256_stream, sha224_stream): Use afalg_stream when available. * modules/crypto/sha256 (Files): Add the af_alg files. (configure.ac): Invoke gl_LINUX_IF_ALG_H. (Makefile.am): Add af_alg.c. 2018-04-28 Matteo Croce sha1sum: Use AF_ALG when available. * lib/af_alg.h: New file. * lib/af_alg.c: New file. * lib/sha1.c: Include af_alg.h. (sha1_stream): Use afalg_stream when available. * m4/linux-if-alg.m4: New file. * modules/crypto/sha1 (Files): Add the new files. (configure.ac): Invoke gl_LINUX_IF_ALG_H. (Makefile.am): Add af_alg.c. 2018-05-05 Bruno Haible all: Replace more http URLs by https URLs. * lib/localename.c: Use https: URL. * lib/timespec.h: Likewise. 2018-05-03 Paul Eggert maint: port more modules to GCC 8 * lib/dirname.h (base_name): * lib/exclude.h (new_exclude): * lib/xstrndup.h (xstrndup): Add malloc attribute. * lib/readutmp.c: Pacify GCC 8 about safe use of strncpy. * lib/sig-handler.h (get_handler) [SA_SIGINFO]: Simplify. This pacifies GCC 8. * m4/gnulib-common.m4 (gl_COMMON_BODY): Define _GL_ATTRIBUTE_MALLOC here. All other definitions removed. 2018-05-03 Bruno Haible Simplify code. Drop support for Borland C++ on Windows. Reported by Gisle Vanem . * lib/accept4.c: Simplify 'defined _WIN32 || defined __WIN32__' to just 'defined _WIN32'. * lib/canonicalize-lgpl.c: Likewise. * lib/classpath.c: Likewise. * lib/clean-temp.c: Likewise. * lib/csharpexec.c: Likewise. * lib/ctime.c: Likewise. * lib/dosname.h: Likewise. * lib/dup2.c: Likewise. * lib/errno.in.h: Likewise. * lib/error.c: Likewise. * lib/euidaccess.c: Likewise. * lib/execute.c: Likewise. * lib/fcntl.in.h: Likewise. * lib/fcntl.c: Likewise. * lib/filename.h: Likewise. * lib/findprog.c: Likewise. * lib/flock.c: Likewise. * lib/fopen.c: Likewise. * lib/freopen.c: Likewise. * lib/fstat.c: Likewise. * lib/fsync.c: Likewise. * lib/gc-gnulib.c: Likewise. * lib/get-rusage-data.c: Likewise. * lib/getaddrinfo.c: Likewise. * lib/getdelim.c: Likewise. * lib/getdtablesize.c: Likewise. * lib/gethostname.c: Likewise. * lib/getlogin.c: Likewise. * lib/getlogin_r.c: Likewise. * lib/getopt.c: Likewise. * lib/getpagesize.c: Likewise. * lib/getpass.c: Likewise. * lib/getrusage.c: Likewise. * lib/gettimeofday.c: Likewise. * lib/glob.c: Likewise. * lib/inttypes.in.h: Likewise. * lib/isapipe.c: Likewise. * lib/javaexec.c: Likewise. * lib/link.c: Likewise. * lib/localcharset.c: Likewise. * lib/localename.h: Likewise. * lib/localename.c: Likewise. * lib/localtime.c: Likewise. * lib/lseek.c: Likewise. * lib/mbsinit.c: Likewise. * lib/mkdir.c: Likewise. * lib/msvc-nothrow.h: Likewise. * lib/nanosleep.c: Likewise. * lib/nl_langinfo.c: Likewise. * lib/nonblocking.c: Likewise. * lib/nproc.c: Likewise. * lib/open.c: Likewise. * lib/openpty.c: Likewise. * lib/pathmax.h: Likewise. * lib/pipe-filter-aux.c: Likewise. * lib/pipe-filter-gi.c: Likewise. * lib/pipe-filter-ii.c: Likewise. * lib/pipe.c: Likewise. * lib/pipe2.c: Likewise. * lib/poll.c: Likewise. * lib/popen.c: Likewise. * lib/posix_openpt.c: Likewise. * lib/printf-parse.c: Likewise. * lib/progreloc.c: Likewise. * lib/putenv.c: Likewise. * lib/read.c: Likewise. * lib/relocatable.c: Likewise. * lib/rename.c: Likewise. * lib/same-inode.h: Likewise. * lib/secure_getenv.c: Likewise. * lib/select.c: Likewise. * lib/sethostname.c: Likewise. * lib/setlocale.c: Likewise. * lib/sigaction.c: Likewise. * lib/sigprocmask.c: Likewise. * lib/sleep.c: Likewise. * lib/spawn-pipe.h: Likewise. * lib/spawn-pipe.c: Likewise. * lib/spawni.c: Likewise. * lib/stat-time.h: Likewise. * lib/stat-w32.c: Likewise. * lib/stat.c: Likewise. * lib/stdio.in.h: Likewise. * lib/stdio-impl.h: Likewise. * lib/stdio-read.c: Likewise. * lib/stdio-write.c: Likewise. * lib/stdlib.in.h: Likewise. * lib/strerror_r.c: Likewise. * lib/strftime-fixes.c: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_types.in.h: Likewise. * lib/sys_wait.in.h : Likewise. * lib/system-quote.h: Likewise. * lib/system-quote.c: Likewise. * lib/tmpdir.c: Likewise. * lib/tzset.c: Likewise. * lib/uname.c: Likewise. * lib/unistd.in.h: Likewise. * lib/utime.in.h: Likewise. * lib/utime.c: Likewise. * lib/utimecmp.c: Likewise. * lib/utimens.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/vma-iter.h: Likewise. * lib/vma-iter.c: Likewise. * lib/wait-process.c: Likewise. * lib/wcsftime.c: Likewise. * lib/wctype.in.h: Likewise. * lib/write.c: Likewise. * tests/nap.h: Likewise. * tests/test-cloexec.c: Likewise. * tests/test-dup-safer.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-dup3.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-get-rusage-data.c: Likewise. * tests/test-getaddrinfo.c: Likewise. * tests/test-getlogin.h: Likewise. * tests/test-isatty.c: Likewise. * tests/test-localename.c: Likewise. * tests/test-mbrtowc-w32.c: Likewise. * tests/test-nonblocking.c: Likewise. * tests/test-nonblocking-pipe-main.c: Likewise. * tests/test-nonblocking-socket-main.c: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-pipe.c: Likewise. * tests/test-pipe2.c: Likewise. * tests/test-poll.c: Likewise. * tests/test-pthread_sigmask1.c: Likewise. * tests/test-select.h: Likewise. * tests/test-sethostname2.c: Likewise. * tests/test-sigprocmask.c: Likewise. * tests/test-spawn-pipe-child.c: Likewise. * tests/test-stat-time.c: Likewise. * tests/test-system-quote-main.c: Likewise. * tests/test-utimens-common.h: Likewise. * tests/test-wcrtomb-w32.c: Likewise. * m4/csharpexec.m4 (gt_CSHARPEXEC): Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise. * m4/javacomp.m4 (gt_JAVACOMP): Likewise. * m4/javaexec.m4 (gt_JAVAEXEC): Likewise. * m4/locale-ar.m4 (gt_LOCALE_AR): Likewise. * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Likewise. * m4/locale-ja.m4 (gt_LOCALE_JA): Likewise. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. * m4/malloc.m4 (gl_CHECK_MALLOC_POSIX): Likewise. * m4/nocrash.m4 (GL_NOCRASH): Likewise. * m4/pathmax.m4 (gl_PATHMAX_SNIPPET): Likewise. * m4/ptsname_r.m4 (gl_PREREQ_PTSNAME_R): Likewise. * m4/stdio_h.m4 (gl_STDIO_H): Likewise. * m4/tmpfile.m4 (gl_FUNC_TMPFILE): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. 2018-05-02 Bruno Haible localename: Fix test failures on mingw. * lib/localename.c (gl_locale_name_thread): Remove code specific to native Windows. (gl_locale_name_posix): Move code specific to native Windows here. * tests/test-localename.c (test_locale_name, test_locale_name_posix): Accept result without charset suffix, as it appears on mingw. 2018-04-28 Paul Smith bootstrap: Avoid gnulib operations if not needed * build-aux/bootstrap: Remove unused variable gnulib_mk. Set $gnulib_extra_files early so it can be overridden in .conf. Remove redundant --import flag from $gnulib_tool_options. Set $use_gnulib to false if no gnulib modules or files are needed. If $use_gnulib is false, don't do anything related to gnulib. A lot of this is just whitespace (indentation) changes. 2018-04-27 Paul Eggert manywarnings: port to GCC 8.0 * build-aux/gcc-warning.spec: Add -Wcatch-value, -Wclass-memaccess, -Wdo-subscript, -Wextra-semi. Adjust to the fact that the GCC help message now mentions operands for -Warray-bounds, -Wformat, -Wformat-overflow, -Wformat-truncation, -Wimplicit-fallthrough, -Wplacement-new, -Wshift-overflow, -Wstrict-aliasing, -Wstrict-overflow, -Wstringop-overflow, and -Wunused-const-variable. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Wattribute-alias, -Wcast-align=strict, -Wcast-function-type, -Wif-not-aligned, -Wmissing-attributes, -Wmultistatement-macros, -Wpacked-not-aligned, -Wsizeof-pointer-div, -Wstringop-truncation, -Wsuggest-attribute=cold, -Wsuggest-attribute=malloc. 2018-04-24 Bruno Haible sys_socket: Make SO_REUSEPORT available across platforms. Reported by Tom G. Christensen . * lib/sys_socket.in.h (SO_REUSEPORT): New macro. * doc/posix-headers/sys_socket.texi: Mention the issue. * tests/test-poll.c (SO_REUSEPORT): Remove. * tests/test-select.h: Include . (SO_REUSEPORT): Remove. * modules/select-tests (Depends-on): Add 'sys_socket'. 2018-04-21 Benno Schulenberg (tiny change) localcharset: short-circuit the search for an alias on a Mac * lib/localcharset.c (get_charset_aliases): Add a tautological UTF-8 entry to speed up the search for this case. Most machines default to a UTF-8 locale nowadays, so begin the list of aliases with a dummy UTF-8 entry so it will be found immediately and a time-consuming search through the rest of the list is avoided. 2018-04-11 Paul Eggert fts: add comment * lib/fts.c (fts_build): Explain why ==, not >. See remark by Bernhard Voelker in: https://lists.gnu.org/r/bug-gnulib/2018-04/msg00041.html fts: fix bug in find across filesystems This fixes a bug I introduced last summer. Problem reported by Kamil Dudka in: https://lists.gnu.org/r/bug-gnulib/2018-04/msg00033.html * lib/fts.c (filesystem_type, dirent_inode_sort_may_be_useful) (leaf_optimization): New arg for file descriptor. All callers changed. (fts_build): Check for whether inodes should be sorted before closing the directory. 2018-04-07 Bruno Haible unicase/u*-context: Fix link errors with libunistring <= 0.9.9. Reported by Genki Sky . * modules/unicase/u8-prefix-context (configure.ac): Require libunistring version 0.9.10 or newer. * modules/unicase/u8-suffix-context (configure.ac): Likewise. * modules/unicase/u16-prefix-context (configure.ac): Likewise. * modules/unicase/u16-suffix-context (configure.ac): Likewise. * modules/unicase/u32-prefix-context (configure.ac): Likewise. * modules/unicase/u32-suffix-context (configure.ac): Likewise. 2018-04-07 Bruno Haible execute: Update comment. * lib/execute.h (execute): Refer to spawn-pipe.h, not pipe.h. 2018-04-05 Paul Eggert fts: treat CIFS like NFS Problem reported by Kamil Dudka in: https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html * lib/fts.c (S_MAGIC_CIFS): New macro. (dirent_inode_sort_may_be_useful, leaf_optimization): Treat CIFS like NFS. 2018-03-28 Bruno Haible c-stack: Fix possible build failure on some platforms. * lib/c-stack.c (die): Define whenever this function is referenced. 2018-03-28 Paul Eggert time_rz: fix workaround for Mac OS X 10.6 infloop Problems reported by Charles A. Roelli (Bug#27736#117). * m4/time_rz.m4 (gl_TIME_RZ): Use a slightly different timestamp. Also, discard output, which clutters the 'configure' log. 2018-03-27 Paul Eggert havelib: port to Solaris 10 /bin/sh * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Use 'test ! EXPR' instead of '! test EXPR'. 2018-03-26 Paul Eggert time_rz: work around Mac OS X 10.6 infloop * doc/posix-functions/localtime.texi: * doc/posix-functions/localtime_r.texi: Mention the bug. * lib/time_rz.c (localtime_rz): Work around the bug. It’d be better to fix localtime and localtime_r instead, but that would be more work and is not needed to fix the Emacs problem. * m4/time_rz.m4 (gl_TIME_RZ): Detect the bug. 2018-03-24 Jim Meyering test-version-etc.sh: don't use diff directly: use init.sh's compare We'd rather not sacrifice readable "diff -u" output even for "diff -c" output (not supported by busybox) or for even less readable ed-style "diff" output. So use init.sh's compare function * tests/test-version-etc.sh: Source init.sh and add "." to path. Remove "./" from invocation of test-version-etc, so we use path. And s/diff/compare/. * modules/version-etc-tests (Depends-on): Add test-framework-sh, to get init.sh. Prompted by Eric Blake's comments in https://lists.gnu.org/r/sed-devel/2018-03/msg00015.html 2018-03-24 Bruno Haible javacomp-script, javacomp: Add support for Java 10. * m4/javacomp.m4 (gt_JAVACOMP): Accept source-version 10 and target-version 10. * lib/javaversion.h: Update comments. * lib/javacomp.c (default_target_version, SOURCE_VERSION_BOUND, source_version_index, get_goodcode_snippet, get_failcode_snippet, TARGET_VERSION_BOUND, target_version_index, corresponding_classfile_version): Accept source_version 10 and target_version 10. * lib/javacomp.h: Update comments accordingly. 2018-03-24 Bruno Haible javacomp-script, javacomp: Update comments. * m4/javacomp.m4: Update comments regarding gcj. * lib/javacomp.h: Likewise. 2018-03-24 Bruno Haible javacomp-script, javacomp: Fix support for Java 7, 8, 9. * lib/javaversion.h: Update comments. * lib/javacomp.h: Likewise. * lib/javacomp.c (default_target_version, source_version_index, get_goodcode_snippet, get_failcode_snippet): Recognize "9" instead of "1.9". (TARGET_VERSION_BOUND): Bump to 9. (target_version_index, corresponding_classfile_version): Recognize "9" instead of "1.9". (get_source_version_for_javac): New function. (is_envjavac_nongcj_usable, is_javac_usable): Add source_version_for_javac argument. (compile_java_class): Determine and pass source_version_for_javac. * m4/javacomp.m4: Recognize version '9' instead of '1.9'. When invoking $JAVAC or javac, pass '-source 1.6' instead of '-source 1.5' when appropriate. 2018-03-23 Jim Meyering test-version-etc.sh: port to diff without -c * tests/test-version-etc.sh: Don't use diff's -c option. This caused spurious test failure on Alpine Linux, which uses busybox's diff. Reported by Assaf Gordon in https://lists.gnu.org/r/sed-devel/2018-03/msg00013.html 2018-03-23 Paul Eggert c-stack: port to recent GCC build Problem reported by The Fireplace (Bug#30913). * lib/c-stack.c (die): Define only if used. 2018-03-20 Bruno Haible euidaccess: Port to native Windows. * lib/euidaccess.c (euidaccess): On native Windows, just use _access(). * posix-modules (exclude_for_mingw): Remove 'euidaccess'. 2018-03-19 Bruno Haible javacomp: Add support for Java 7, 8, 9. * lib/javacomp.c (default_target_version, SOURCE_VERSION_BOUND, source_version_index, get_goodcode_snippet, get_failcode_snippet, corresponding_classfile_version): Accept source_version 1,7, 1.8, 1.9 and target_version 1,7, 1.8, 1.9. * lib/javacomp.h: Update comments accordingly. 2018-03-19 Bruno Haible javacomp-script: Add support for Java 9. * m4/javacomp.m4 (gt_JAVACOMP): Accept source-version 1.9 and target-version 1.9. 2018-03-16 Bruno Haible glob: Don't compile replacements on recent glibc systems. * lib/glob.in.h: Use the usual idiom for the double-inclusion guard. If REPLACE_GLOB is 0, include the system's and use _GL_CXXALIAS_SYS. * m4/glob.m4 (gl_GLOB): Set REPLACE_GLOB instead of GLOB_H. Accept _GNU_GLOB_INTERFACE_VERSION 2 as well. Delete the file conf$$-globtest inside the AC_RUN_IFELSE block. Remove GL_GENERATE_GLOB_H conditional. * modules/glob (Dependencies): Test REPLACE_GLOB instead of GLOB_H. Remove snippet/warn-on-use. (configure.ac): Test REPLACE_GLOB instead of GLOB_H. (Makefile.am): Create glob.h always. Update list of substitutions in glob.h. Don't depend on $(WARN_ON_USE_H). 2018-03-16 Bruno Haible glob: Fix link error on native Windows. * modules/glob (Depends-on): Add 'lstat'. 2018-03-15 Bruno Haible glob: Fix compilation error in C++ mode. * lib/glob.in.h (_Restrict_): Define, like in regex.h and spawn.in.h. 2018-03-15 Bruno Haible host-cpu-c-abi: Support for RISC-V CPU. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Recognize the various riscv32 and riscv64 ABIs. References: https://github.com/riscv/riscv-toolchain-conventions https://gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/RISC-V-Options.html https://gnu-mcu-eclipse.github.io/toolchain/riscv/ 2018-03-08 Paul Eggert fflush: be more paranoid about libio.h change Suggested by Eli Zaretskii in: https://lists.gnu.org/r/emacs-devel/2018-03/msg00270.html * lib/fbufmode.c (fbufmode): * lib/fflush.c (clear_ungetc_buffer_preserving_position) (disable_seek_optimization, rpl_fflush): * lib/fpending.c (__fpending): * lib/fpurge.c (fpurge): * lib/freadable.c (freadable): * lib/freadahead.c (freadahead): * lib/freading.c (freading): * lib/freadptr.c (freadptr): * lib/freadseek.c (freadptrinc): * lib/fseeko.c (fseeko): * lib/fseterr.c (fseterr): * lib/fwritable.c (fwritable): * lib/fwriting.c (fwriting): Look at _IO_ftrylockfile as well as at _IO_EOF_SEEN. 2018-03-07 Paul Eggert maint: write-file-hooks -> before-save-hook write-file-hooks is obsolete since Emacs 22.1 (released June 2007) and it's time to use the recommended replacement. Problem reported by Glenn Morris in: https://lists.gnu.org/r/bug-gnulib/2018-03/msg00008.html * build-aux/announce-gen, build-aux/bootstrap: * build-aux/do-release-commit-and-tag, build-aux/gendocs.sh: * build-aux/git-version-gen, build-aux/gitlog-to-changelog: * build-aux/gnu-web-doc-update, build-aux/gnupload: * build-aux/move-if-change, build-aux/prefix-gnulib-mk: * build-aux/update-copyright, build-aux/useless-if-before-free: * build-aux/vc-list-files: Update hook usage for files where Gnulib is the canonical source. 2018-03-05 Paul Eggert binary-io: pacify gcc -Wunused-parameter Problem reported by Reuben Thomas in: https://lists.gnu.org/r/bug-gnulib/2018-03/msg00005.html * lib/binary-io.h (__gl_setmode, __gl_setmode_check): Use _GL_UNUSED where appropriate. fflush: adjust to glibc 2.28 libio.h removal Problem reported by Daniel P. Berrangé in: https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html * lib/fbufmode.c (fbufmode): * lib/fflush.c (clear_ungetc_buffer_preserving_position) (disable_seek_optimization, rpl_fflush): * lib/fpending.c (__fpending): * lib/fpurge.c (fpurge): * lib/freadable.c (freadable): * lib/freadahead.c (freadahead): * lib/freading.c (freading): * lib/freadptr.c (freadptr): * lib/freadseek.c (freadptrinc): * lib/fseeko.c (fseeko): * lib/fseterr.c (fseterr): * lib/fwritable.c (fwritable): * lib/fwriting.c (fwriting): Check _IO_EOF_SEEN instead of _IO_ftrylockfile. * lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]: Define if not already defined. 2018-02-27 Paul Eggert environ: fix link error on 32-bit Cygwin Problem reported for GNU Emacs by Ken Brown in: https://lists.gnu.org/r/emacs-devel/2018-02/msg00765.html * lib/unistd.in.h (environ) [__i386__]: Do not redeclare. 2018-02-24 Bruno Haible mbrtowc tests: Fix regression on glibc. Reported by Bernhard Voelker. * tests/test-mbrtowc.c (main): Fix expected value of wc. 2018-02-24 Bruno Haible striconveha, uniconv/*: Avoid test failures on musl libc. * tests/iconvsupport.c: New file. * tests/test-striconveha.c (main): Skip autodetect_jp tests if iconv() does not support the ISO-2022-JP-2 encoding. * tests/uniconv/test-u8-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-strconv-from-enc.c (main): Likewise. * modules/striconveha-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-striconveha with iconvsupport.o. * modules/uniconv/u8-conv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u8-conv-from-enc with iconvsupport.o. * modules/uniconv/u8-strconv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u8-strconv-from-enc with iconvsupport.o. * modules/uniconv/u16-conv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u16-conv-from-enc with iconvsupport.o. * modules/uniconv/u16-strconv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u16-strconv-from-enc with iconvsupport.o. * modules/uniconv/u32-conv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u32-conv-from-enc with iconvsupport.o. * modules/uniconv/u32-strconv-from-enc-tests (Files): Add tests/iconvsupport.c. (Makefile.am): Link test-u32-strconv-from-enc with iconvsupport.o. 2018-02-24 Bruno Haible localename: Add support for musl libc. * m4/localename.m4 (gl_LOCALENAME): Check for . * lib/localename.c (gl_locale_name_thread_unsafe): Use NL_LOCALE_NAME on Linux platforms which define NL_LOCALE_NAME. 2018-02-24 Bruno Haible mbrtowc tests: Don't make assumptions about the charset the C locale. * tests/test-mbrtowc.c (main): For bytes >= 0x80, don't assume a particular mapping in the C locale. 2018-02-24 Bruno Haible ptsname_r: Don't expect that this function sets errno. * tests/test-ptsname_r.c (test_errors): Don't test errno after return from ptsname_r(). * doc/glibc-functions/ptsname_r.texi: Mention the issue. 2018-02-23 Bruno Haible xmalloca: pacify gcc -Wbad-function-cast * lib/xmalloca.h (xmalloca): Insert intermediate cast here as well. 2018-02-23 Paul Eggert nl_langinfo: pacify gcc -Wunused-function * lib/nl_langinfo.c (ctype_codeset): Do not define if REPLACE_NL_LANGINFO && !GNULIB_defined_CODESET, as it is unused in this case. Without this change, I got a diagnostic when building coreutils on Fedora 27 with gcc 7.3.1 20180130. same: pacify gcc -Wunused-variable * lib/same.c (same_nameat) [!CHECK_TRUNCATION]: Omit unused variable. malloca: pacify gcc -Wbad-function-cast * lib/malloca.h (malloca): Pacify gcc -Wbad-function-cast diagnostic that I got on Fedora 27 with gcc 7.3.1 20180130. To pacify GCC, I had to cast alloca’s result to some type other than void * before casting that to uintptr_t. 2018-02-20 Paul Eggert utimecmp: new function utimecmpat * lib/utimecmp.c: Include fcntl.h, sys/stat.h and dirname.h. Do not include utimens.h. (utimecmpat): New function, generalizing utimecmp. (utimecmp): Now a thin layer around utimecmpat. * modules/utimecmp (Depends-on): Depend on dirname-lgpl, fstatat, utimensat instead of on lstat and utimens. same: new function same_nameat * lib/same.c: Include fcntl.h. * lib/same.c (same_nameat): New function, generalizing same_name. (same_name): Now a thin layer around same_nameat. * m4/same.m4 (gl_SAME): Check for fpathconf, not pathconf. * modules/same (Depends-on): Depend on fstatat, openat. 2018-02-18 Eric Gallager (tiny change) warnings: Add support for Objective C. * m4/warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)): New macro. 2018-02-17 Bruno Haible lock: Fix test-once1 crash on FreeBSD11. * lib/glthread/lock.h: On FreeBSD, test the weak value of the symbol 'pthread_create', not 'pthread_cancel'. 2018-02-17 Bruno Haible lock: Add test of gl_once. * tests/test-once.c: New file. * modules/lock-tests (Files): Add it. (Makefile.am): Build and test programs 'test-once1' and 'test-once2'. 2018-02-17 Bruno Haible thread: Fix compilation error on IRIX. * lib/glthread/thread.h: Include . Include when needed; include it outside the C++ extern "C" {} block. * doc/posix-headers/pthread.texi: Mention the problem with pthread_atfork on IRIX. 2018-02-04 Bruno Haible nl_langinfo: Override the system's nl_langinfo() when needed. Reported by Jim Meyering. * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Set REPLACE_NL_LANGINFO=1 also when HAVE_LANGINFO_T_FMT_AMPM or HAVE_LANGINFO_ALTMON is 0. 2018-02-04 Bruno Haible signal-h, monetary, strings: Fix build failure in some cases. Reported by Tim Rühsen . * modules/signal-h (Makefile.am): In the GNULIB_* substitutions, use '/' as delimiter in sed command, not '|'. * modules/monetary (Makefile.am): Likewise. * modules/strings (Makefile.am): Likewise. 2018-02-03 Jim Meyering maint.mk: exempt "/proc/filesystems" from "file system" syntax check * top/maint.mk (sc_file_system): Don't complain about "/proc/filesystems". 2018-02-03 Bruno Haible stdlib: Fix compilation error on OpenIndiana. * lib/stdlib.in.h: Before including , include . * m4/stdlib_h.m4 (gl_STDLIB_H): Likewise. * m4/getloadavg.m4 (gl_GETLOADAVG): Likewise. 2018-02-03 Bruno Haible host-cpu-c-abi: Avoid use of 'grep -E' on OpenIndiana. * m4/asm-underscore.m4 (gl_ASM_SYMBOL_PREFIX): Require AC_PROG_EGREP, and use $EGREP instead of 'grep -E'. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Use 'grep' instead of 'grep -E'. 2018-02-02 Paul Eggert malloca: Add a compile-time verification. * lib/malloca.c (small_t): Verify that it is wide enough. * modules/malloca (Depends-on): Add verify. 2018-02-02 Bruno Haible malloca: Add an argument check. Suggested by Paul Eggert. * lib/malloca.c (freea): Check against an invalid argument. 2018-02-02 Bruno Haible localename: Add support for OpenIndiana. * lib/localename.c (gl_locale_name_thread_unsafe): Add code for Solaris 11 variants with uselocale() but without getlocalename_l(). 2018-02-02 Bruno Haible malloca, xmalloca: Make multithread-safe. Reported by Florian Weimer . Implements an idea by Ondřej Bílka . * lib/malloca.h (malloca): In the stack allocation case, return a pointer that is a multiple of 2 * sa_alignment_max. (sa_increment): Remove enum item. * lib/xmalloca.h (xmalloca): In the stack allocation case, return a pointer that is a multiple of 2 * sa_alignment_max. * lib/malloca.c (NO_SANITIZE_MEMORY): Remove macro. (MAGIC_NUMBER, MAGIC_SIZE, preliminary_header, HEADER_SIZE, header, HASH_TABLE_SIZE, mmalloca_results): Remove. (small_t): New type. (mmalloca, free): Rewritten. * lib/malloca.valgrind: Remove file. * modules/malloca (Files): Remove it. (Depends-on): Remove verify. 2018-01-31 Bruno Haible environ: Fix link error on 64-bit Cygwin. * lib/unistd.in.h (environ): On Cygwin, redeclare with the __declspec(dllimport) attribute. * doc/posix-functions/environ.texi: Mention the Cygwin problem. 2018-01-30 Bruno Haible get-rusage-data: Add support for Minix 3. * lib/get-rusage-data.c (get_rusage_data): Return 0 on Minix. 2018-01-30 Bruno Haible vma-iter: Add support for Minix 3. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define on Minix. * lib/vma-iter.c: On Minix, read /proc//map. 2018-01-27 Bruno Haible Fix malfunction of socket functions on HP-UX in 64-bit mode. * m4/socketlib.m4 (gl_SOCKETLIB): Add comment. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define _HPUX_ALT_XOPEN_SOCKET_API. * modules/accept (Depends-on): Add 'extensions'. * modules/getpeername (Depends-on): Likewise. * modules/getsockname (Depends-on): Likewise. * modules/getsockopt (Depends-on): Likewise. * modules/recvfrom (Depends-on): Likewise. * doc/posix-functions/accept.texi: Mention the HP-UX socklen_t problem. * doc/posix-functions/getpeername.texi: Likewise. * doc/posix-functions/getsockname.texi: Likewise. * doc/posix-functions/getsockopt.texi: Likewise. * doc/posix-functions/recvfrom.texi: Likewise. 2018-01-27 Bruno Haible getsockname tests: More tests. * tests/test-getsockname.c (open_server_socket): New function, mostly copied from test-poll.c. (main): Check that getsockname fills in addr. * modules/getsockname-tests (Depends-on): Add the necessary dependencies. (test_getsockname_LDADD): Link with $(INET_PTON_LIB). 2018-01-26 Paul Eggert manywarnings: fix maintainer comment * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Fix comment so that it does not mistakenly think that ‘-1)’ is an option. 2018-01-26 Bruno Haible langinfo: Fix last commit. Reported by Tim Rühsen . * modules/langinfo (Makefile.am): Substitute HAVE_LANGINFO_ALTMON. 2018-01-24 Bruno Haible langinfo, nl_langinfo: Add support for alternative month names. * m4/langinfo_h.m4 (gl_LANGINFO_H): Define HAVE_LANGINFO_ALTMON. * lib/langinfo.in.h (ALTMON_1...ALTMON_12): New macros. * lib/nl_langinfo.c (rpl_nl_langinfo): Treat ALTMON_i like MON_i. * tests/test-nl_langinfo.c (main): Test ALTMON_*. * doc/posix-headers/langinfo.texi: Document support of ALTMON_*. * doc/posix-functions/nl_langinfo.texi: Likewise. 2018-01-23 Paul Eggert Merge strftime.c changes from glibc This incorporates: 2017-11-14 [BZ #10871] Implement alternative month names 2017-11-14 [BZ #10871] Abbreviated alternative month names (%Ob) 2017-06-20 Use locale_t, not __locale_t, throughout glibc * lib/nstrftime.c (ABALTMON_1) [!COMPILE_WIDE]: New macro. (LOCALE_PARAM) [_LIBC && USE_IN_EXTENDED_LOCALE_MODEL]: Use locale_t, not __locale_t. (a_altmonth, f_altmonth, aam_len) [_NL_CURRENT]: New macros. (__strftime_internal): Add support for alternate months. 2018-01-23 Bruno Haible doc: Mention another prerequisite for using Gnulib. Reported at . * doc/gnulib-tool.texi (Initial import): Mention requirement to use AC_CONFIG_HEADERS. 2018-01-22 Mathieu Lirzin build: GuixSD doesn't have /bin/bash * Makefile (SHELL): Search 'bash' in the PATH environment variable. 2018-01-21 Bruno Haible Avoid test failures on Microsoft Windows Subsystem for Linux. * tests/test-fcntl.c (main): Allow a different errno. * tests/test-rename.h (test_rename): Likewise. * tests/test-renameat.c (main): Likewise. * tests/test-renameat2.c (main): Likewise. 2018-01-14 Paul Eggert filenamecat: make base a suffix of result * lib/filenamecat-lgpl.c (longest_relative_suffix): Remove. (mfile_name_concat): Always make BASE a suffix of the result, as cp expects this. To implement this, separate with '.' instead of '/' in some rare cases. Clarify spec to say ./BASE not BASE. * tests/test-filenamecat.c (main): Adjust tests to match current behavior. Check that BASE_IN_RESULT points to a copy of BASE and is a suffix of the resultk, and that DIR is a prefix of the result that is no longer than the prefix indicated by BASE_IN_RESULT. 2018-01-04 Mathieu Lirzin update-copyright: Handle use of © * build-aux/update-copyright ($circle_c_re): Update regex to handle use of © in headers. 2018-01-04 Tim Rühsen Fix -Wundef warning in user-included header lib/cdefs.h. * lib/cdefs.h: Check if defined before using __USE_FORTIFY_LEVEL. 2018-01-04 Bruno Haible pthread_sigmask: Avoid compilation error on mingw. Reported by Tim Rühsen . * lib/signal.in.h (pthread_sigmask): Don't declare it it's defined as a macro. 2018-01-03 Paul Eggert test-framework-sh: ‘ps -ef’, not ‘ps ef’ * tests/init.sh (rand_bytes_): Put ‘-’ before new-style ps options. Suggested by Bob Proulx (Bug#29968). * build-aux/mktempd (rand_bytes): Make it like tests/init.sh. 2018-01-02 Eric Blake stat-time: silence -Wunused-parameter regression * lib/stat-time.h (get_stat_birthtime_ns, get_stat_birthtime): Prefer attribute over cast-to-void. (stat_time_normalize): Mark st as potentially unused. 2018-01-02 Paul Eggert test-framework-sh: avoid netstat Problem reported by Kristýna Streitová (Bug#29947). * tests/init.sh (rand_bytes_): Stop using netstat, as it's deprecated on SuSE and it's not that important anyway. 2018-01-01 Jim Meyering update-copyright: add code to handle more special cases After running "make update-copyright" this year, five files required additional manual changes. Automate those adjustments for next year. * Makefile (_year_and_prev): Define. (update-copyright): Add perl commands to induce this year's post- update-copyright adjustments. 2018-01-01 Paul Eggert version-etc: new year * build-aux/gendocs.sh (version): * doc/gendocs_template: * doc/gendocs_template_min: * doc/gnulib.texi: * lib/version-etc.c (COPYRIGHT_YEAR): Update copyright dates by hand in templates and the like. maint: fix 'make update-copyright' * Makefile (update-copyright): Adjust to 2016-11-23 change to config/srclist-update, which changed the format of srclist.txt. 2017-12-30 Paul Eggert chdir-safer: remove this module * MODULES.html.sh (func_all_modules): Remove chdir-safer. * NEWS: Document removal. * lib/chdir-safer.c, lib/chdir-safer.h, m4/afs.m4, m4/chdir-safer.m4: * modules/chdir-safer: Remove these files. 2017-12-29 Samuel Thibault Add cross-compilation results for GNU/Hurd. * m4/calloc.m4: Add GNU/Hurd guess. * m4/cbrtl.m4: Likewise. * m4/ceil.m4: Likewise. * m4/ceilf.m4: Likewise. * m4/ceill.m4: Likewise. * m4/chown.m4: Likewise. * m4/duplocale.m4: Likewise. * m4/exp2l.m4: Likewise. * m4/expm1.m4: Likewise. * m4/fchdir.m4: Likewise. * m4/floor.m4: Likewise. * m4/floorf.m4: Likewise. * m4/fmod.m4: Likewise. * m4/fmodf.m4: Likewise. * m4/fmodl.m4: Likewise. * m4/getcwd.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/gettimeofday.m4: Likewise. * m4/hypot.m4: Likewise. * m4/hypotf.m4: Likewise. * m4/hypotl.m4: Likewise. * m4/link-follow.m4: Likewise. * m4/link.m4: Likewise. * m4/linkat.m4: Likewise. * m4/log.m4: Likewise. * m4/log10.m4: Likewise. * m4/log10f.m4: Likewise. * m4/log1p.m4: Likewise. * m4/log1pf.m4: Likewise. * m4/log1pl.m4: Likewise. * m4/log2.m4: Likewise. * m4/log2f.m4: Likewise. * m4/logf.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/mbrlen.m4: Likewise. * m4/mbrtowc.m4: Likewise. * m4/mkdir.m4: Likewise. * m4/mkfifo.m4: Likewise. * m4/mknod.m4: Likewise. * m4/mkstemp.m4: Likewise. * m4/modf.m4: Likewise. * m4/modff.m4: Likewise. * m4/modfl.m4: Likewise. * m4/printf.m4: Likewise. * m4/pselect.m4: Likewise. * m4/ptsname.m4: Likewise. * m4/putenv.m4: Likewise. * m4/readlink.m4: Likewise. * m4/realloc.m4: Likewise. * m4/remainder.m4: Likewise. * m4/remainderf.m4: Likewise. * m4/remainderl.m4: Likewise. * m4/rmdir.m4: Likewise. * m4/round.m4: Likewise. * m4/roundf.m4: Likewise. * m4/roundl.m4: Likewise. * m4/select.m4: Likewise. * m4/setenv.m4: Likewise. * m4/signbit.m4: Likewise. * m4/sleep.m4: Likewise. * m4/stat.m4: Likewise. * m4/strerror.m4: Likewise. * m4/strtok_r.m4: Likewise. * m4/symlink.m4: Likewise. * m4/symlinkat.m4: Likewise. * m4/trunc.m4: Likewise. * m4/truncf.m4: Likewise. * m4/truncl.m4: Likewise. * m4/tzset.m4: Likewise. * m4/ungetc.m4: Likewise. * m4/usleep.m4: Likewise. * m4/wcwidth.m4: Likewise. 2017-12-28 Bruno Haible gnulib-tool: Make --conditional-dependencies work better. Reported by Dmitry Selyutin . * gnulib-tool (Options): Don't reject the combination of --conditional-dependencies with --with-tests. (func_emit_autoconf_snippets): Add argument referenceable_modules. Don't reference $modules. (func_import, func_create_testdir): Pass it. 2017-12-19 Paul Eggert regex: use re_malloc etc. consistently Problem and original patch reported by Arnold Robbins in: https://sourceware.org/ml/libc-alpha/2017-12/msg00241.html * lib/regcomp.c (re_comp): * lib/regexec.c (push_fail_stack, build_trtable, match_ctx_clean): Use re_malloc/re_realloc/re_free instead of malloc/realloc/free. 2017-12-15 Tim Rühsen Paul Eggert glob: Silence warning about void pointer arithmetic. * lib/glob.c (glob): Use a 'char *', not a 'void *', in pointer arithmetic. 2017-12-15 Bruno Haible spawn-pipe: Silence a clang warning. Reported by Tim Rühsen . * lib/spawn-pipe.c: Disable clang -Wconditional-uninitialized warnings in this file. 2017-12-12 Paul Eggert explicit_bzero: port to macOS + Clang 9.0.0 Problem reported by Marcus Johnson (Bug#29658). * lib/explicit_bzero.c (explicit_bzero) [__clang__]: Don’t use asm. 2017-12-11 Reuben Thomas doc: Improve explanation of supporting relocatable libraries. * doc/relocatable-maint.texi (Supporting Relocation): Explain properly how to build the relocatable module for libraries. (Method and example code from Bruno Haible.) 2017-12-11 Reuben Thomas doc: Use better texinfo tags in a few cases. * doc/gnulib.texi (Extending Gnulib): Use @option or @command instead of @samp in a few places. 2017-12-11 Bruno Haible unistr/base: Update comment. * lib/unistr.in.h: Update comment about u*_mbtouc_unsafe functions. 2017-12-10 Pádraig Brady test-faccessat.c: unlink temp file to avoid subsequent test failure * tests/test-faccessat.c: Remove the file to avoid failure to open the file on subsequent runs due to being created with no permissions. 2017-12-10 Bruno Haible doc: New sect. "Modifying the build rules of a Gnulib import directory". * doc/gnulib-tool.texi (Modified build rules): New node. 2017-12-10 Bruno Haible doc: Tweak wording. * doc/gnulib-tool.texi (Multiple instances): Talk about "programs", not "binaries". 2017-12-05 Sam Steingold Bruno Haible no-c++: Avoid "egrep: repetition-operator operand invalid" error. * m4/no-c++.m4 (gt_NO_CXX): Don't use '+' characters nor spaces in the AC_EGREP_CPP pattern. 2017-12-03 Bruno Haible all: Replace more http URLs by https URLs. * lib/sm3.h, lib/sm3.c, tests/test-sm3.c: Use https: URL. * lib/unigbrk/u-grapheme-breaks.h: Likewise. * lib/unigbrk/uc-grapheme-breaks.c: Likewise. * tests/unigbrk/test-uc-grapheme-breaks.c: Likewise. 2017-11-28 Paul Eggert Port better to CentOS 5 Problems reported by Tom G. Christensen in: https://lists.gnu.org/r/bug-gnulib/2017-11/msg00053.html * doc/glibc-functions/strverscmp.texi (strverscmp): Document strverscmp bug with glibc 2.9 and earlier. * doc/posix-functions/tzset.texi (tzset): Document that TZ with angle brackets is POSIX-2001 and later. * tests/test-nstrftime.c: Include unistd.h. (TZ_ANGLE_BRACKETS_SHOULD_WORK): New macro. (TZ): Use it to skip tests with angle brackets in TZ, for older systems. stat: add missing module dependencies * modules/lstat, modules/stat, modules/utimensat (Depends-on): Add stat-time. 2017-11-28 Benno Schulenberg stat: fix compilation failure on macOS Sierra Reported by Marius Schamschula in: https://savannah.gnu.org/bugs/?52546 * lib/stat.c: Add missing include of stat-time.h. 2017-11-28 Jim Meyering test-faccessat.c: correct BASE definition to avoid parallel test failure * tests/test-faccessat.c (BASE): Define using this file's name, not that of test-lstat.c. Using the latter caused this test to fail sometimes when run concurrently with test-lstat. 2017-11-27 Daiki Ueno unicase: fix VPATH build * modules/unicase/special-casing (Makefile.am): Ensure that the base directory is created when generating unicase/special-casing.h. 2017-11-27 Daiki Ueno libunistring: update to Unicode 9.0.0 * lib/gen-uni-tables.c (fill_properties): Recognize Sentence_Terminal and Prepended_Concatenation_Mark. (is_property_default_ignorable_code_point): Exclude U+08E2. (fill_arabicshaping): Allow missing whitespace when parsing; recognize "AFRICAN FEH", "AFRICAN QAF", and "AFRICAN MOON". (output_blocks): Increase the element size of the level1 table to accommodate more blocks. (get_lbp): Recognize ZWJ, E_Base, and E_Modifier characters; Update each class according to the standard. (get_wbp): Recognize ZWJ, E_Base, E_Modifier, Glue_After_Zwj, and E_Base_GAZ characters. (output_gbp_table): Recognize ZWJ, E_Base, E_Modifier, Glue_After_Zwj, and E_Base_GAZ characters. * lib/unictype.in.h (UC_JOINING_GROUP_AFRICAN_FEH) (UC_JOINING_GROUP_AFRICAN_QAF, UC_JOINING_GROUP_AFRICAN_MOON): New enum value. * lib/unilbrk/lbrktables.h (LBP_ZWJ, LBP_EB, LBP_EM): New enum value. * lib/unilbrk/lbrktables.c (unilbrk_table): Extend the table with LBP_ZWJ, LBP_EB, and LBP_EM. * lib/uniwbrk.in.h (WBP_ZWJ, WBP_EB, WBP_EM, WBP_GAZ, WBP_EBG): New enum value. * lib/uniwbrk/u-wordbreaks.h: Implement WB3c, WB15, and WB16. * lib/uniwbrk/wbrktable.h (uniwbrk_prop_index): New variable declaration. * lib/uniwbrk/wbrktable.c (uniwbrk_prop_index): New variable. (uniwbrk_table): Implement WB14. * tests/uniwbrk/test-uc-wordbreaks.c (wordbreakproperty_to_string): Check WBP_ZWJ, WBP_EB, WBP_EM, WBP_GAZ, and WBP_EBG. * modules/unigbrk/u{32,16,8}-grapheme-breaks: No longer depend on uc-is-grapheme-break. * modules/unigbrk/uc-grapheme-breaks: New module. * modules/unigbrk/uc-grapheme-breaks-tests: New module. * lib/unigbrk.in.h (GBP_ZWJ, GBP_EB, GBP_EM, GBP_GAZ, GBP_EBG): New enum value. (uc_grapheme_breaks): New function, replacing uc_is_grapheme_break. * lib/unigbrk/u-grapheme-breaks.h: New file. * lib/unigbrk/u{32,16,8}-grapheme-breaks.c: Rewrite using u-grapheme-breaks.h instead of uc_is_grapheme_break. * lib/unigbrk/uc-grapheme-breaks.c: New file. * lib/unigbrk/uc-is-grapheme-break.c: Partially update to TR29 rev 29. * tests/unigbrk/test-uc-gbrk-prop.c (graphemebreakproperty_to_string): Check GBP_ZWJ, GBP_EB, GBP_EM, GBP_GAZ, and GBP_EBG. * tests/unigbrk/test-uc-grapheme-breaks.c: New test. * tests/unigbrk/test-uc-is-grapheme-break.c (graphemebreakproperty_to_string): Check GBP_ZWJ, GBP_EB, GBP_EM, GBP_GAZ, and GBP_EBG. (main): Skip unsupported rules involving 3 or more characters, namely GB10, GB12, and GB13. * lib/uniwidth/width.c (nonspacing_table_data): Update. * all generated files under lib/uni* and tests/uni*: Regenerate. * all the affected modules: Bump version. 2017-11-26 Bruno Haible strfmon_l: Fix compilation error with glibc 2.5. Reported by Tom G. Christensen in . * lib/monetary.in.h: Include also . 2017-11-24 Paul Eggert posixtm: remove PDS_LEADING_YEAR This changes the API slightly, in a hopefully-innocuous way. Without this change the code had undefined behavior when a caller specified neither PDS_LEADING_YEAR nor PDS_TRAILING_YEAR. Problem reported by Pádraig Brady in: https://lists.gnu.org/r/bug-gnulib/2017-11/msg00048.html * NEWS: Mention this. * lib/posixtm.c (posix_time_parse): Treat the absence of PDS_TRAILING_YEAR as if PDS_LEADING_YEAR were present. * lib/posixtm.h (PDS_LEADING_YEAR): Remove (actually, leave it present, but define it as zero, for compatibility with existing source code). All other PDS_* values moved up. * tests/test-posixtm.c (LY): New macro. (T): Use it. Do not expect a particular numeric encoding for PDS_CENTURY etc. 2017-11-23 Paul Eggert stat: work around Solaris bug with tv_nsec < 0 * doc/posix-functions/fstat.texi (fstat): * doc/posix-functions/fstatat.texi (fstatat): * doc/posix-functions/lstat.texi (lstat): * doc/posix-functions/stat.texi (stat): Mention Solaris 11 bug. * lib/fstat.c, lib/fstatat.c, lib/lstat.c: Include stat-time.h. * lib/fstat.c (rpl_fstat) [!WINDOWS_NATIVE]: * lib/lstat.c (rpl_lstat): * lib/stat.c (rpl_stat): Normalize resulting timestamps. * lib/fstatat.c (normal_fstatat): New function. (rpl_fstatat): Use it. * lib/stat-time.h: Include intprops.h, errno.h, stddef.h. (stat_time_normalize): New function. * m4/fstat.m4 (gl_FUNC_FSTAT): * m4/fstatat.m4 (gl_FUNC_FSTATAT): * m4/lstat.m4 (gl_FUNC_LSTAT): * m4/stat.m4 (gl_FUNC_STAT): Replace on Solaris. * modules/fstat (Depends-on): * modules/fstatat (Depends-on): Add stat-time. * modules/stat-time (Depends-on): Add errno, intprops. 2017-11-22 Paul Eggert regex: merge from glibc * lib/regcomp.c (init_word_char): Add comments. 2017-11-20 Paul Eggert regex: merge from glibc * lib/regcomp.c (__regcomp, __regfree) [_LIBC]: Now hidden. * lib/regex_internal.h (internal_function): Remove. All uses removed. 2017-11-20 Bruno Haible crypto/gc-sm3: Fix buffer overrun. * lib/gc-gnulib.c (MAX_DIGEST_SIZE): Bump to 32. Reported by Coverity. 2017-11-12 Jim Meyering maint: shorten https://lists.gnu.org/archive/html/... links Each /archive/html/ part can be replace with /r/. Run this to induce the change: git grep -l archive/html|xargs perl -pi -e 's,/archive/html/,/r/,g' * ChangeLog: Perform that substitution. * Makefile: Likewise. * STATUS-libposix: Likewise. * build-aux/bootstrap: Likewise. * doc/maintain.texi: Likewise. * gnulib-tool: Likewise. * lib/allocator.h: Likewise. * lib/argp-ba.c: Likewise. * lib/argp-pv.c: Likewise. * lib/canon-host.c: Likewise. * lib/canonicalize-lgpl.c: Likewise. * lib/float.in.h: Likewise. * lib/fstat.c: Likewise. * lib/getdelim.c: Likewise. * lib/getprogname.c: Likewise. * lib/glthread/thread.h: Likewise. * lib/intprops.h: Likewise. * lib/mbsrtowcs-state.c: Likewise. * lib/safe-read.c: Likewise. * lib/signal.in.h: Likewise. * lib/stat.c: Likewise. * lib/stdbool.in.h: Likewise. * lib/stdio-impl.h: Likewise. * lib/stdio.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/timespec.h: Likewise. * lib/wcsrtombs-state.c: Likewise. * m4/alloca.m4: Likewise. * m4/extern-inline.m4: Likewise. * m4/fstatat.m4: Likewise. * m4/gnulib-common.m4: Likewise. * m4/lib-ignore.m4: Likewise. * m4/printf.m4: Likewise. * m4/regex.m4: Likewise. * m4/stat-size.m4: Likewise. * m4/std-gnu11.m4: Likewise. * m4/stdbool.m4: Likewise. * m4/sys_types_h.m4: Likewise. * m4/threadlib.m4: Likewise. * m4/vararrays.m4: Likewise. * pygnulib/GLImport.py: Likewise. * tests/test-exp.h: Likewise. * tests/test-exp2.h: Likewise. * tests/test-expm1.h: Likewise. * tests/test-fflush2.c: Likewise. * tests/test-getopt_long.h: Likewise. * tests/test-intprops.c: Likewise. * tests/test-log.h: Likewise. * tests/test-log10.h: Likewise. * tests/test-log1p.h: Likewise. * tests/test-log2.h: Likewise. * tests/test-printf-posix.h: Likewise. * tests/test-regex.c: Likewise. * tests/test-snprintf-posix.h: Likewise. * tests/test-sprintf-posix.h: Likewise. * tests/test-stdalign.c: Likewise. * tests/test-stdbool.c: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * top/maint.mk: Likewise. 2017-11-12 Bruno Haible faccessat: Make the last change more robust. * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Require gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. Treat "guessing yes" like "yes". 2017-11-11 Paul Eggert faccessat: port to macOS (Bug#29231) macOS faccessat has the same bug that lstat does: if the file name ends in '/' it ignores the trailing slash. Problem reported for Emacs by Vincent Zhang. * doc/posix-functions/faccessat.texi (faccessat): Document this. * lib/faccessat.c (_GL_INCLUDING_UNISTD_H): Define and undef around the initial includes. Include errno.h, string.h, sys/stat.h. (orig_faccessat) [HAVE_FACCESSAT]: New function. Include "unistd.h" after defining it. (rpl_faccessat) [HAVE_FACCESSAT]: New implementation. * lib/unistd.in.h (faccessat) [REPLACE_FACCESSAT]: Handle in the usual way. * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Replace faccessat if lstat dereferences symlinks, since faccessat is likely to have the same problem. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Default REPLACE_ACCESSAT. * modules/faccessat (Depends-on): Add fstatat. Depend if REPLACE_FACCESSAT is 1, too. (configure.ac): Link if REPLACE_FACCESSAT is 1. * modules/faccessat-tests (Depends-on): Add symlink. * modules/unistd (unistd.h): Substitute REPLACE_FACCESSAT. * tests/test-faccessat.c (main): Test for the bug. 2017-11-11 Bruno Haible getprogname: Fix compilation error on IRIX. * lib/getprogname.c (getprogname) [__sgi]: Fix type of local variable 'namesize'. 2017-11-11 Bruno Haible year2038: Tweak last patch. * m4/year2038.m4 (gl_YEAR2038): Correct indentation. 2017-11-06 Paul Eggert year2038: be more insistent about 64-bit time_t Applications requiring access to arbitrary files should not be built with 32-bit time_t on hosts that have 64-bit timestamps, as this can lead to real trouble at runtime. * m4/year2038.m4 (gl_YEAR2038): Do not require AC_CANONICAL_HOST. Check on all systems, not just MinGW. Use a heuristic involving TIME_T_32_BIT_OK, cross_compiling, and the touch command to output a failure or just a warning, to make it more likely that builders will select 64-bit time_t. 2017-11-05 Paul Eggert havelib: fix typo in previous change * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Fix typo. Don’t use AC_EGREP_CPP if affected by CFLAGS * m4/float_h.m4 (gl_FLOAT_H): * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): * m4/lib-ld.m4 (AC_LIB_PROG_LD): * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): * m4/year2038.m4 (gl_YEAR2038): Prefer AC_COMPILE_IFELSE to AC_EGREP_CPP when testing conditions likely to be affected by the choice of CFLAGS, since CFLAGS are not used by AC_EGREP_CPP. Without this patch, ‘./configure CFLAGS="-m32"’ fails on gzip with GNU/Linux x86-64. fstatat: pacify GCC on unusual platform * lib/fstatat.c (orig_fstatat) [!HAVE_WORKING_FSTATAT_ZERO_FLAG]: Omit, as it’s unused in this case. 2017-10-29 Paul Eggert timespec: prefer ‘assume’ to ‘assure’ This avoids some runtime tests. The rest of the module makes similar assumptions and there is little point to testing here. * lib/timespec.h: Include verify.h instead of assure.h. (timespec_cmp): Use ‘assume’, not ‘assure’. Also, remove an unnecessary cast to ‘int’, as lots of other code in this module now causes -Wconversion to complain, and this is a problem with -Wconversion not with the code. * modules/timespec (Depends-on): Depend on ‘verify’, not ‘assure’. Port recent gnulib-tool change to Dash * gnulib-tool (func_create_testdir): Don't assume that the shell retokenizes after expanding "$@" inside the call to func_execute_command. Dash 0.5.8-2.1ubuntu2 does not. 2017-10-27 Jim Meyering timespec.h: use "assure" to avoid a spurious warning * lib/timespec.h: Include "assure.h" and use it to help gcc7's -Wstrict-overflow avoid a false positive warning for a use in coreutils' ls.c. Suggested by Paul Eggert in https://lists.gnu.org/r/bug-gnulib/2017-10/msg00007.html * modules/timespec (Depends-on): Add assure. 2017-10-29 Bruno Haible Avoid several test failures with traditional locales on Haiku. * m4/locale-ar.m4 (gt_LOCALE_AR): On BeOS and Haiku, set LOCALE_AR=none. * m4/locale-fr.m4 (gt_LOCALE_FR): On BeOS and Haiku, set LOCALE_FR=none. * m4/locale-ja.m4 (gt_LOCALE_JA): On BeOS and Haiku, set LOCALE_JA-none. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): On BeOS and Haiku, set LOCALE_ZH_CN=none. 2017-10-29 Bruno Haible strerror_r-posix: Fix behaviour and test failure on Haiku. * lib/strerror_r.c (strerror_r): Don't assume that valid error numbers are positive. Work around return value 0 instead of ERANGE on Haiku. For unknown error numbers, use a format string consistent with perror(). * doc/posix-functions/strerror_r.texi: Mention the Haiku problem. * tests/test-strerror_r.c (main): Don't assume that valid error numbers are positive. 2017-10-29 Bruno Haible get-rusage-data: Avoid crash on Haiku. * lib/get-rusage-data.c: Avoid the setlimit-based implementation. 2017-10-29 Bruno Haible get-rusage-as: Avoid crash on Haiku. * lib/get-rusage-as.c: Avoid the setlimit-based implementation. 2017-10-29 Bruno Haible ilogbl: Ensure replacement on Haiku. * m4/ilogbl.m4 (gl_FUNC_ILOGBL): Invoke gl_FUNC_ILOGBL_WORKS and set REPLACE_ILOGBL if ilogbl does not work. (gl_FUNC_ILOGBL_WORKS): New macro. * lib/math.in.h (ilogbl): Replace if REPLACE_ILOGBL is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_ILOGBL. * modules/math (Makefile.am): Substitute REPLACE_ILOGBL. * modules/ilogbl (Depends-on, configure.ac): Consider REPLACE_ILOGBL. * doc/posix-functions/ilogbl.texi: Mention the Haiku problem. 2017-10-29 Bruno Haible expl: Ensure replacement on Haiku. * m4/expl.m4 (gl_FUNC_EXPL): Test whether an expl() return value is zero. * doc/posix-functions/expl.texi: Mention the Haiku problem. 2017-10-29 Bruno Haible math: Fix test failure on Haiku. * lib/math.in.h (FP_ILOGB0, FP_ILOGBNAN): Override on Haiku. * m4/ilogb.m4 (gl_FUNC_ILOGB_WORKS): Update accordingly. * m4/ilogbf.m4 (gl_FUNC_ILOGBF_WORKS): Likewise. * doc/posix-headers/math.texi: Mention the Haiku problem. 2017-10-29 Bruno Haible gnulib-tool: Avoid unnecessary config.h.in remaking in testdirs. * gnulib-tool (func_create_testdir): Use workaround against 'autoheader' bug reported at . 2017-10-29 Bruno Haible crypto/*: Verify that the header file is self-contained. * tests/test-gc-*.c: Include the module's header file immediately after . * tests/test-hmac-*.c: Likewise. * tests/test-arcfour.c: Likewise. * tests/test-arctwo.c: Likewise. * tests/test-des.c: Likewise. * tests/test-md2.c: Likewise. * tests/test-md4.c: Likewise. * tests/test-md5.c: Likewise. * tests/test-rijndael.c: Likewise. * tests/test-sha1.c: Likewise. * tests/test-sm3.c: Likewise. 2017-10-29 Jia Zhang Bruno Haible crypto/gc: fix build failure with -Werror=suggest-attribute=const * lib/gc.h (gc_hash_digest_length): Mark with 'const' attribute. 2017-10-29 Jia Zhang New module: crypto/gc-sm3 * lib/gc.h: Declare SM3-related stuffs. * lib/gc-gnulib.c: Support sm3 in internal functions. * lib/gc-libgcrypt.c: Support sm3 with libgcrypt. * m4/gc-sm3.m4: m4 file for gc-sm3 module. * modules/crypto/gc-sm3: Define gc-sm3 module. * tests/test-gc-sm3.c: Implement SM3 test case with libgcrypt. * modules/crypto/gc-sm3-tests: Define gc-sm3 test module. * MODULES.html.sh: List gc-sm3 module. 2017-10-29 Bruno Haible random, random_r: Mention different prototypes on Haiku. * doc/posix-functions/random.texi: Mention different prototype on Haiku. * doc/glibc-functions/random_r.texi: Likewise. * doc/glibc-functions/initstate_r.texi: Likewise. * doc/glibc-functions/setstate_r.texi: Likewise. 2017-10-28 Bruno Haible posix_spawn: Avoid spurious message in configure output. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Discard stderr output from 'cmp' command. 2017-10-28 Bruno Haible inet_ntop, inet_pton: Determine needed library correctly on Haiku. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Search also in libnetwork. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Likewise. 2017-10-28 Bruno Haible ioctl: Override non-POSIX declaration on Haiku. * m4/ioctl.m4 (gl_FUNC_IOCTL): Include also . * lib/sys_ioctl.in.h: Add comment about Haiku. * doc/posix-functions/ioctl.texi: Mention Haiku problem. * doc/glibc-headers/sys_ioctl.texi: Likewise. 2017-10-28 Bruno Haible crypto/sm3: Add overview documentation to the .h file. * lib/sm3.h: Add comments. 2017-10-28 Jia Zhang New module: crypto/sm3 This new module can be used to compute SM3 message digest of files or memory blocks according to the specification GM/T 004-2012 Cryptographic Hash Algorithm SM3, published by State Cryptography Administration, China. The official SM3 cryptographic hash algorithm specification is available at http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml * lib/sm3.h: Declare the APIs of sm3 module. * lib/sm3.c: Implement SM3 hash algorithm. * m4/sm3.m4: m4 file for sm3 module. * modules/crypto/sm3: Define sm3 module. * tests/test-sm3.c: Implement SM3 test case. * modules/crypto/sm3-tests: Define sm3 test module. * MODULES.html.sh: List sm3 module. 2017-10-28 Jia Zhang gc-libgcrypt: fix undefined enum type in switch statement Resolve the following build failure: lib/gc-libgcrypt.c: In function 'gc_hash_open': lib/gc-libgcrypt.c:317:5: error: case value '0' not in enumerated type 'Gc_hash_mode {aka enum Gc_hash_mode}' [-Werror=switch] case 0: ^~~~ * lib/gc.h (enum Gc_hash_mode): Add value GC_NULL. * lib/gc-libgcrypt.c (gc_hash_open): Use this enum value instead of 0. 2017-10-28 Jia Zhang gc-libgcrypt: fix assignment error due to -Werror=pointer-sign Resolve the following build failure: lib/gc-libgcrypt.c: In function 'gc_hash_read': lib/gc-libgcrypt.c:460:14: error: pointer targets in assignment differ in signedness [-Werror=pointer-sign] digest = gcry_md_read (ctx->gch, 0); ^ * lib/gc-libgcrypt.c (gc_hash_read): Cast result of gcry_md_read. 2017-10-26 Bruno Haible havelib: Fix value of LD for 32-bit compilation on NetBSD/sparc64. * m4/lib-ld.m4 (AC_LIB_PROG_LD): On NetBSD/sparc64 with CC="gcc -m32", set LD to '/usr/bin/ld -m elf32_sparc', not '/usr/bin/ld'. 2017-10-21 Paul Eggert glob: fix another heap buffer overflow Problem reported by Tim Rühsen in: https://sourceware.org/bugzilla/show_bug.cgi?id=22332 * lib/glob.c (glob): Avoid buffer overrun when unescaping. 2017-10-19 Paul Eggert quotearg: pacify compiler re unsigned * lib/quotearg.c (quotearg_n_options): Rewrite to avoid diagnostic from overly-picky compiler. Problem reported by Sami Kerola in: https://lists.gnu.org/r/bug-gnulib/2017-10/msg00060.html glob: fix heap buffer overflow * lib/glob.c (glob): Fix off-by-one error introduced into glibc in commit dd7d45e838a42b0ed470c44b55901ea98d0c2bab dated 1997-10-29 20:33:40. Problem reported by Tim Rühsen in: https://sourceware.org/bugzilla/show_bug.cgi?id=22320 Fix suggested by Bruno Haible. 2017-10-18 Paul Eggert glob: pacify fuzzer for mempcpy Problem reported by Tim Rühsen in: https://lists.gnu.org/r/bug-gnulib/2017-10/msg00054.html * lib/glob.c (glob): Do not pass NULL to mempcpy. 2017-10-12 Bruno Haible doc: Fix syntax error (regression from 2017-10-03). * doc/posix-functions/strncpy.texi: Fix syntax error. 2017-10-12 Bruno Haible doc: Update for Solaris 11.3. * doc/**/*.texi: For bugs that exist in both Solaris 11.0 and 11.3, mention Solaris 11.3. * m4/log2.m4: Fix comments. * m4/log2f.m4: Likewise. * m4/printf.m4: Update comments. * m4/rename.m4: Likewise. * m4/strncat.m4: Likewise. all: Write "Solaris 11.0" instead of "Solaris 11 2011-11". 2017-10-10 Bruno Haible doc: Improve doc about ioctl. * doc/posix-functions/ioctl.texi: Fix list of platforms with non-POSIX prototype. 2017-10-09 Bruno Haible wcwidth: Don't use obsolete syntax of 'test'. Reported by Eric Blake. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Don't optimize two 'test' invocations into one, as POSIX marks '-a' and '-o' as "obsolescent". 2017-10-09 Bruno Haible getopt-posix: Fix build failure when using ac_cv_header_getopt_h=no. Reported by Christian Ehrhardt and Daniel P. Berrange . * lib/unistd.in.h (getopt): Don't attempt to avoid namespace pollution on glibc systems. The getopt-pfx-core.h file declares exactly what unistd.h needs, nothing more. 2017-10-08 Bruno Haible vma-iter: Improve support for FreeBSD. * lib/vma-iter.c (vma_iterate_proc): New function, extracted from vma_iterate. (vma_iterate): Use it. For FreeBSD, try vma_iterate_bsd first. 2017-10-08 Bruno Haible vma-iter: Fix truncated result on NetBSD (regression from 2017-10-07). * lib/vma-iter.c (MIN_LEFTOVER): Define to 1, not 0. 2017-10-07 KO Myung-Hun test-framework-sh: Fix 'invalid path dir' error. On OS/2, a path separator is ';' not ':'. And ':' is used as a separator between a drive letter and directory parts. As a result, an absolute path such as x:/path/to/dir on OS/2 is treated as an invalid path dir. * tests/init.sh (PATH_SEPARATOR): Set at startup. (path_prepend_): '?:*' is also an absolute path. Use $PATH_SEPARATOR instead of hard coded ':'. 2017-10-07 Bruno Haible vma-iter: Fix truncated result on Linux (regression from 2017-09-26). * lib/vma-iter.c (MIN_LEFTOVER): New macro. (STACK_ALLOCATED_BUFFER_SIZE): Set to a minimal value if not needed. (rof_open): On Linux, do multiple read() calls and make sure MIN_LEFTOVER bytes are left when read() returns. 2017-10-07 Bruno Haible vma-iter: Improve support for GNU/Hurd. * lib/vma-iter.c (vma_iterate): On GNU/Hurd, use the Mach vm_region() API, not the /proc file system. 2017-10-07 Bruno Haible test-framework-sh: Don't require bash on Windows and OS/2. Reported by KO Myung-Hun. * tests/test-init.sh: Use 'shopt' only when running in bash. 2017-10-06 KO Myung-Hun wcwidth: check a macro version of wcwidth () as well * lib/wchar.in.h: Revert commit from 2016-01-14. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test if wcwidth is a macro. 2017-10-06 Bruno Haible getopt-posix: Clarify copyright header. * lib/getopt.in.h: Don't state that gnulib is under LGPL. * lib/getopt-pfx-core.h: Likewise. * lib/getopt-pfx-ext.h: Likewise. * lib/getopt-cdefs.in.h: Likewise. 2017-10-03 Bruno Haible Fix warning "`gl_HOST_CPU_C_ABI' was expanded before it was required". * modules/host-cpu-c-abi (configure.ac): Require, don't invoke gl_HOST_CPU_C_ABI. 2017-10-03 Bruno Haible doc: warn about misuse of strncpy and wcsncpy. * doc/posix-functions/strcpy.texi: Describe requirements on prior memory allocation. * doc/posix-functions/wcscpy.texi: Likewise. * doc/posix-functions/strncpy.texi: Describe what this function is not useful for. * doc/posix-functions/wcsncpy.texi: Likewise. 2017-10-02 Paul Eggert fsuage: fix typo in previous change * lib/fsusage.c: Remove stray include of full-read.h. Problem reported by Sam Steingold for macOS (Bug#28669). 2017-10-01 Paul Eggert fsusage: remove SVR2 support SVR2 was obsolete by 1986 and is no longer supported by anybody, and its code was getting in the way of use of this module by Emacs, which has its own ‘read’ function anyway. * lib/fsusage.c: Do not include sys/filsys.h. (get_fs_usage): Remove SVR2-specific code. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Do not test for sys/filsys.h or set STAT_READ_FILSYS. * modules/fsusage (Depends-on): Do not depend on full-read. Simplify autoupdate of licenses * config/srclistvars.sh (GNUWWWLICENSES): Move to a more-typical place. 2017-10-01 Bruno Haible vma-iter: Add support for GNU/Hurd. * lib/vma-iter.c: Treat GNU/Hurd like Linux. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on GNU/kFreeBSD. 2017-09-30 Bruno Haible vma-iter: Make it work on 32-bit Solaris with module 'largefile'. * modules/vma-iter: Don't test for sys/procfs.h, as this test would fail when module 'largefile' is in use. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Don't test HAVE_SYS_PROCFS_H. * lib/vma-iter.c: Undefine _FILE_OFFSET_BITS early. Don't test HAVE_SYS_PROCFS_H. 2017-09-30 Bruno Haible havelib: Make it work for CC="gcc -m32" (regression from 2017-02-19). * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Require gl_HOST_CPU_C_ABI. When $CC produces 32-bit code, set acl_libdirstem to 'lib', not 'lib64'. * modules/havelib (Depends-on): Add host-cpu-c-abi. 2017-09-30 Bruno Haible uniname/uniname: Don't assume C99 compiler (regression from 2015-02-16). * lib/uniname/uniname.c (unicode_name_character): Add braces around scope of local variables. 2017-09-28 Bruno Haible string: code style * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Reorder list of substitutable variables. * modules/string (Makefile.am): Likewise. 2017-09-26 Bruno Haible uniname/uniname-tests: Tighten code. * tests/uniname/test-uninames.c (fill_names, fill_aliases): Merge two local variables into one. 2017-09-26 Bruno Haible vma-iter: Improvements for Linux and BSD platforms. - Add support for DragonFly BSD. - Make it more reliable on Linux, GNU/kFreeBSD, FreeBSD, NetBSD. * lib/vma-iter.c (struct rofile, rof_open, rof_peekchar, rof_close): Read the entire file into memory in a single system call. (vma_iterate): Update. Read from /proc on DragonFly BSD like on FreeBSD. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on DragonFly BSD. 2017-09-26 Bruno Haible vma-iter: Provide the protection flags on FreeBSD. * lib/vma-iter.c (vma_iterate) [FreeBSD]: When reading from /proc, skip three fields between the addresses and the protection flags. 2017-09-26 Paul Eggert glob: remove bogus extern decl * lib/glob.c (__glob_pattern_type): Remove now-spurious extern declaration. Problem reported by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-09/msg00972.html 2017-09-25 Paul Eggert uniname/uniname-tests: integer overflow fix * tests/uniname/test-uninames.c (fill_names, fill_aliases): Check for integer overflow. duplocale-tests: fix unlikely crash * tests/test-duplocale.c (get_locale_dependent_values): Don’t crash with absurdly long month names. maint: fix overflow checking in nap.h * modules/chown-tests: * modules/fchownat-tests, modules/fdutimensat-tests: * modules/futimens-tests, modules/lchown-tests: * modules/stat-time-tests, modules/utime-tests: * modules/utimens-tests, modules/utimensat-tests: Depend on intprops. * tests/nap.h: Include intprops.h. (diff_timespec): Handle overflow properly. sys_types: update URL * m4/sys_types_h.m4: Use https: URL. parse-datetime: fix dependency * modules/parse-datetime (Depends-on): Depend on nstrftime, not strftime. parse-datetime, posixtm: avoid uninit access * lib/parse-datetime.y (parse_datetime2): * lib/posixtm.c (posixtime): Do not access uninitialized storage, even though the resulting value is never used. 2017-09-25 Bruno Haible vma-iter: Improvements for BSD platforms. - Add support for GNU/kFreeBSD. - Make it work on FreeBSD and NetBSD even when /proc is not mounted. - Speed up on OpenBSD. * lib/vma-iter.c (struct rofile, rof*): Define also on GNU/kFreeBSD. (vma_iterate_bsd): New function. (vma_iterate): Use it as fallback on FreeBSD and NetBSD. Use it as first choice on OpenBSD. Treat GNU/kFreeBSD like Linux. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on GNU/kFreeBSD. * modules/vma-iter (configure.ac): Require AC_C_INLINE. 2017-09-23 Bruno Haible strfmon_l: New module. * modules/strfmon_l: New file. * lib/strfmon_l.c: New file. * m4/strfmon_l.m4: New file. * doc/posix-functions/strfmon_l.texi: Mention the new module. * modules/strfmon_l-tests: New file. * tests/test-strfmon_l.c: New file. monetary: New module. * modules/monetary: New file. * lib/monetary.in.h: New file. * m4/monetary_h.m4: New file. * doc/posix-headers/monetary.texi: Mention the new module. * modules/monetary-tests: New file. * tests/test-monetary.c: New file. * modules/monetary-c++-tests: New file. * tests/test-monetary-c++.cc: New file. * modules/duplocale-tests (configure.ac): Use AC_CHECK_HEADERS_ONCE. 2017-09-23 Bruno Haible duplocale tests: Fix test crash on Linux/x86. * tests/test-duplocale.c (test_with_uselocale): Disconnect the mixed2 locale from the current thread before freeing it. 2017-09-21 Paul Eggert mktime: port to OpenVMS Problem reported by John E. Malmberg in: https://lists.gnu.org/r/bug-gnulib/2017-09/msg00100.html * m4/mktime.m4 (TIME_T_IS_SIGNED): Default to 0. 2017-09-16 Paul Eggert manywarnings: port to GCC on 64-bit MS-Windows * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Work better if LONG_MAX < PTRDIFF_MAX. Problem reported by Richard Copley in: https://lists.gnu.org/r/emacs-devel/2017-09/msg00392.html 2017-09-13 Bruno Haible all: Replace many more http URLs by https URLs. Update stale URLs. * users.txt: Remove mention of 'newts'. * lib/localename.c: Update comment about LANG_SOTHO. 2017-09-13 Paul Eggert all: Replace many http URLs by https URLs. 2017-09-12 Bruno Haible doc: Prefer https URLs where possible. * doc/**/*.texi: Use https URLs instead of http URLs where possible. * doc/ld-output-def.texi: Remove unavailable URL. 2017-09-12 Paul Eggert maintainer-makefile: FTP -> HTTPS * top/maint.mk (url_dir_list, ftp-gnu): Use HTTPS protocol instead of FTP, which is planned to be decommissioned on 2017-11-01. 2017-09-12 Tim Rühsen (tiny change) libc-config: Fix __GNUC_PREREQ macro. * lib/libc-config.h (__GNUC_PREREQ): Use __GNUC_MINOR__, not __GNUC_MINOR. 2017-09-09 Bruno Haible gnulib-tool: Simplify commit from 2015-08-20. * gnulib-tool (func_add_or_update): Remove local variable is_binary_file. 2017-09-08 Bruno Haible stddef: Avoid conflict with system-defined max_align_t. The configure-determined HAVE_MAX_ALIGN_T may not always be accurate. Reported by Werner Lemberg in . * lib/stddef.in.h (rpl_max_align_t): Renamed from max_align_t. (max_align_t): Define as a macro. (GNULIB_defined_max_align_t): New macro. Guards against multiple definitions of rpl_max_align_t in different copies of gnulib-generated . 2017-09-05 Paul Eggert libc-config: port to MSVC Problems reported by Gisle Vanem in: http://lists.gnu.org/r/bug-gnulib/2017-09/msg00016.html * lib/libc-config.h (__inline): Don't define if HAVE___INLINE. (libc_hidden_proto): Stick to Standard C syntax for varargs macro. * m4/__inline.m4: New file. * modules/libc-config (Files): Add it. (Depends-on): Use it. glob: Use enum for __glob_pattern_type result From a patch proposed by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-09/msg00212.html * lib/glob_internal.h (GLOBPAT_NONE, GLOBPAT_SPECIAL) (GLOBPAT_BACKSLASH, GLOBPAT_BRACKET): New constants. * lib/glob_internal.h (__glob_pattern_type): * lib/glob.c (glob): * lib/glob_pattern_p.c (__glob_pattern_p): Use them. glob: fix for use in glibc Problem reported by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-09/msg00213.html * lib/glob.c (DT_UNKNOWN, DT_DIR, DT_LINK): Do not redefine if _LIBC. 2017-09-02 Paul Eggert glob: fix bugs with long login names Problem reported by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-08/msg00455.html * lib/glob.c (GET_LOGIN_NAME_MAX): Remove. (glob): Use the same scratch buffer for both getlogin_r and getpwnam_r. Don’t require preallocation of the login name. This simplifies storage allocation, and corrects the handling of long login names. 2017-09-02 Bruno Haible dirent: Update doc. * doc/posix-headers/dirent.texi: More concrete list of platforms. 2017-09-02 Paul Eggert glob: fix getpwnam_r errno typo * lib/glob.c (glob): Fix longstanding misuse of errno after getpwnam_r, which returns an error number rather than setting errno. glob: fix typo in recent change * lib/glob.c (glob) [!HAVE_GETPWNAM_R && !_LIBC]: Fix recently-introduced typo. 2017-09-02 Paul Eggert glob: don't save and restore errno unnecessarily * lib/glob.c (glob): Don't save and restore errno merely because we have getpwnam_r. glob: don't assume getpwnam_r * lib/glob.c (glob): Port recent patches to platforms lacking getpwnam_r. scratch_buffer: don’t use private glibc API Suggested by Florian Weimer in: http://lists.gnu.org/r/bug-gnulib/2017-09/msg00004.html * lib/scratch_buffer.h: Rename to lib/malloc/scratch_buffer.h. * lib/scratch_buffer_grow.c: Rename to lib/malloc/scratch_buffer_grow.c. * lib/scratch_buffer_grow_preserve.c: Rename to lib/malloc/scratch_buffer_grow_preserve.c. * lib/scratch_buffer_set_array_size.c: Rename to lib/malloc/scratch_buffer_set_array_size.c. * lib/scratch_buffer.h: New file. * modules/scratch_buffer (Files, Makefile.am): Adjust to source-file renaming. 2017-09-01 Paul Eggert glob: use scratch_buffer instead of extend_alloca Much of the lib/glob.c part of this patch comes from a glibc patch proposed by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-08/msg00456.html * lib/glob.c: Do not include , since , included via glob.h, does this for us now. (__set_errno): Remove, as libc-config does this for us now. Include . (GETPW_R_SIZE_MAX): Remove. (glob): Use struct scratch_buffer instead of extend_alloca. * lib/glob.in.h: Include libc-config.h rather than including conditionally. (__BEGIN_DECLS, __END_DECLS, __THROW, __THROWNL, attribute_hidden) (__glibc_unlikely, __restrict, weak_alias): Remove, as libc-config does this for us now. * m4/glob.m4 (gl_PREREQ_GLOB): Remove sys/cdefs.h tests; no longer needed. * modules/glob (Depends-on): Add libc-config, scratch_buffer. (glob.h): Do not replace HAVE_SYS_CDEFS_H. scratch_buffer: new module * lib/scratch_buffer.h, lib/scratch_buffer_grow.c: * lib/scratch_buffer_grow_preserve.c: * lib/scratch_buffer_set_array_size.c: New files, copied from glibc with very minor changes that can be copied back. * modules/scratch_buffer: New file. libc-config: new module * MODULES.html.sh: Add libc-config. * lib/cdefs.h: New file, copied from the GNU C Library with very minor changes that can be copied back. * lib/libc-config.h, modules/libc-config: New files. 2017-08-31 Paul Eggert glob: match dangling symlinks This fixes a bug I inadvertently introduced to Gnulib when I merged glibc glob back into gnulib on 2007-10-16. This fix is inspired by a patch proposed for glibc by Adhemerval Zanella in: https://sourceware.org/ml/libc-alpha/2017-08/msg00446.html * doc/posix-functions/glob.texi: Update list of affected platforms. * lib/glob.c (__lstat64): New macro. (is_dir): New function. (glob, glob_in_dir): Match symlinks even if they are dangling. (link_stat, link_exists_p): Remove. All uses removed. * lib/glob.in.h (__attribute_noinline__): Remove; no longer used. * m4/glob.m4 (gl_PREREQ_GLOB): Do not check for fstatat. * modules/glob-tests (Depends-on): Add symlink. * tests/test-glob.c: Include errno.h, unistd.h. (BASE): New macro. (main): Test dangling symlinks, if symlinks are supported. glob, backupfile: inode 0 is a valid inode number * doc/posix-functions/readdir.texi (readdir): * doc/posix-headers/dirent.texi (dirent.h): Document more readdir portability issues. * lib/backupfile.c (REAL_DIR_ENTRY): Remove. (numbered_backup): Don’t treat inode 0 any differently from other inode values. * lib/glob.c (struct readdir_result): Remove skip_entry member. (readdir_result_skip_entry, D_INO_TO_RESULT): Remove. All uses removed. * modules/glob (Depends-on): Remove d-ino. glob: simplify symlink detection * lib/glob.c (dirent_type): New type. Use uint_fast8_t not uint8_t, as C99 does not require uint8_t. (struct readdir_result): Use it. Do not define skip_entry unless it is needed; this saves a byte on platforms lacking d_ino. (readdir_result_type, readdir_result_skip_entry): New functions, replacing ... (readdir_result_might_be_symlink, readdir_result_might_be_dir): ... these functions, which were removed. This makes the callers easier to read. All callers changed. (D_INO_TO_RESULT): Now empty if there is no d_ino. 2017-08-30 Pádraig Brady fts-tests: tag as a longrunning-test so not included by default * modules/fts-tests: This test takes about 20s on current systems, and uses about 285M of space on ext4. 2017-08-30 Pádraig Brady renameat2: fix compilation on alpine linux * m4/renameat.m4: Check for presence. * lib/renameat2.h: Only include if present. Reported by Assaf Gordon on Alpine Linux. 2017-08-24 Paul Eggert glob: try to port recent changes to MS-Windows Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00170.html * lib/glob.c (__glob_pattern_p) [!_LIBC]: Move from here ... * lib/glob.in.h (__glob_pattern_p): ... to here. 2017-08-24 Eric Blake warnings: fix compilation with old autoconf * m4/warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)) (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)): Use m4_defun rather than AC_DEFUN. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C)) (gl_MANYWARN_ALL_GCC(C++)): Likewise. 2017-08-24 Bruno Haible glob: Fix compilation error on NetBSD 7.0 and OpenBSD 6.0. * modules/glob (Depends-on): Add c99. 2017-08-24 Paul Eggert glob: fix typo that broke platforms lacking d_ino This typo also hurt performance on GNU/Linux and similar hosts. * lib/glob.c (D_INO_TO_RESULT): Fix typo (reversed ifdef) in previous change. 2017-08-23 Paul Eggert glob: merge from glibc with Zanella glob changes Merge glob from glibc, with changes for glob proposed by Adhemerval Zanella in the thread starting here: https://sourceware.org/ml/libc-alpha/2017-08/msg01079.html plus some fixes for this merge. * lib/glob_internal.h, lib/glob_pattern_p.c, lib/globfree.c: New files, ported from glibc. * lib/glob-libc.h (_Restrict_): Remove. All uses replaced with __restrict. (__size_t): Remove. All uses replaced by size_t. (size_t): Define by defining __need_size_t and including . This should work even in non-glibc platforms, where any name pollution is OK. Use __USE_MISC instead of __USE_BSD || __USE_GNU. (struct stat64): Don’t worry about __GLOB_GNULIB. (glob, globfree, glob_pattern_p): Remove macros for __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB case. Remove _GL_ARG_NONNULL as GNU behavior is to accept NULL but set errno. * lib/glob.c (_GL_ARG_NONNULL) [!_LIBC]: Remove. All uses removed since the glibc behavior works on null pointers. Do not include stdio.h; old SunOS is irrelevant now. Do not worry about GLOB_ONLY_P as we now mimic glibc here. Include glob_internal.h. (D_INO_TO_RESULT): Depend on (_LIBC || D_INO_IN_DIRENT), not ((POSIX || WINDOWS32) && !__GNU_LIBRARY__). The latter probably worked only coincidentally. (attribute_hidden, __attribute_noinline__, __glibc_unlikely): Remove macros; now done in glob.in.h. (size_add_wrapv): Do not use __builtin_add_overflow if __ICC. (glob): Properly initialize glob structure with GLOB_BRACE|GLOB_DOOFFS (bug 20707). Remove old code using SHELL since Bash no longer uses this. (glob, prefix_array): Separate MS code better. (glob, glob_in_dir): Use C99 decls before statements when glibc does. (glob_in_dir): Remove old Amiga and VMS code. (globfree, __glob_pattern_type, __glob_pattern_p): Move to separate files. * lib/glob.in.h (attribute_hidden, __attribute_noinline__) (__glibc_unlikely): Move here from glob.c. (__restrict): New macro here, replacing the _Restrict_ in glob.c. (weak_alias): New macro. (__size_t): Remove. All uses replaced by size_t. * modules/d-ino (License): Now LGPLv2+, for compatibility with glob. * modules/glob (Files): Add +lib/glob_internal.h, lib/glob_pattern_p.c, lib/globfree.c. (Depends-on): Remove snippet/arg-nonnull. 2017-08-22 Paul Eggert glob: port to clang's Undefined Sanitizer Problem reported by Tim Rühsen in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00144.html * lib/glob.c (FLEXIBLE_ARRAY_MEMBER) [_LIBC]: Define to empty. (glob_in_dir): Do not rely on undefined behavior in accessing struct members beyond their bounds. Use a flexible array member instead. 2017-08-21 Paul Eggert vc-list-files: port to Solaris 10 * build-aux/vc-list-files: Don't assume test -e works. 2017-08-21 Karl Berry * doc/posix-functions/srandom.texi (srandom): typo }. 2017-08-20 Paul Eggert git-version-gen: port to Solaris 10 Problem reported by Dagobert Michelsen in: http://lists.gnu.org/r/grep-devel/2017-08/msg00002.html * build-aux/git-version-gen (v_from_git): Use expr instead of shell substitution. 2017-08-19 Bruno Haible host-cpu-c-abi: Improve detection of MIPS ABI. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): For MIPS, test the value of _MIPS_SIM. 2017-08-17 Bruno Haible hypot tests: Fix test failure on FreeBSD 11.0/x86. * tests/test-hypot.h (test_function): Declare z as 'volatile'. 2017-08-17 Bruno Haible float: Fix LDBL_MIN value on FreeBSD/x86. * lib/float.in.h (LDBL_MIN) [__FreeBSD__]: Add more precision. 2017-08-17 Bruno Haible random: Fix test compilation failure on Cygwin 1.5.25. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_INITSTATE, HAVE_DECL_SETSTATE. * m4/random.m4 (gl_FUNC_RANDOM): Test whether initstate and setstate are declared. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_INITSTATE, HAVE_DECL_SETSTATE. * lib/stdlib.in.h (initstate): Declare also if HAVE_DECL_INITSTATE is 0. (setstate): Declare also if HAVE_DECL_SETSTATE is 0. * doc/posix-functions/initstate.texi: Mention the Cygwin 1.5.x problem. * doc/posix-functions/random.texi: Likewise. * doc/posix-functions/setstate.texi: Likewise. * doc/posix-functions/srandom.texi: Likewise. 2017-08-16 Bruno Haible stdnoreturn: Fix test compilation failure on Cygwin. * m4/stdnoreturn.m4 (gl_STDNORETURN_H): On Cygwin, use gnulib's replacement. * lib/stdnoreturn.in.h (noreturn): Treat Cygwin like MSVC. * doc/posix-headers/stdnoreturn.texi: Mention the Cygwin problem. 2017-08-16 Bruno Haible thread: Fix conflict with pthread_sigmask module. * lib/glthread/thread.h (pthread_sigmask): Don't declare it weak if it's defined as a macro. * modules/thread (Depends-on): Add pthread_sigmask. 2017-08-16 Paul Eggert rename: port better to NetBSD * doc/posix-functions/rename.texi (rename): NetBSD 7 does not have the link-count bug. * m4/rename.m4 (gl_FUNC_RENAME): Don’t consider NetBSD to be broken merely because rename ("a", "b") removes "a" when the two names are hard links to the same file. 2017-08-16 Bruno Haible iconv_open, uni*: Add support for VPATH builds with OpenBSD 'make'. * modules/iconv_open (Makefile.am): In the rules that use gperf, prefix the target file names with '$(srcdir)/'. * modules/unicase/locale-language (Makefile.am): Likewise. * modules/unicase/special-casing (Makefile.am): Likewise. * modules/unictype/bidiclass-byname (Makefile.am): Likewise. * modules/unictype/category-byname (Makefile.am): Likewise. * modules/unictype/combining-class-byname (Makefile.am): Likewise. * modules/unictype/joininggroup-byname (Makefile.am): Likewise. * modules/unictype/joiningtype-byname (Makefile.am): Likewise. * modules/unictype/property-byname (Makefile.am): Likewise. * modules/unictype/scripts (Makefile.am): Likewise. * modules/uninorm/composition (Makefile.am): Likewise. 2017-08-16 Bruno Haible nonblocking-socket tests: Fix failure on OpenBSD 6.0. * tests/test-nonblocking-socket.h (SOCKET_DATA_BLOCK_SIZE): Increase value for OpenBSD. 2017-08-16 Bruno Haible rename, renameat: Update doc regarding NetBSD. * doc/posix-functions/rename.texi: Clarify that when using -D_XOPEN_SOURCE=500 on NetBSD 7.0, the hard link bug is gone. * doc/posix-functions/renameat.texi: Be more precise about NetBSD version. 2017-08-15 Paul Eggert renameat2: port better to macOS * lib/renameat2.c (renameat2): Use renameatx_np if available. futimens: don’t assume struct timespec layout * m4/futimens.m4 (gl_FUNC_FUTIMENS): * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): * tests/test-fdutimensat.c (main): * tests/test-futimens.h (test_futimens): * tests/test-lutimens.h (test_lutimens): * tests/test-utimens.h (test_utimens): * tests/test-utimensat.c (main): Don’t assume that struct timespec is a two-member structure in tv_sec, tv_nsec order. Although this is true on all platforms we know about, POSIX does not guarantee it. rename: document+test NetBSD rename Test failure reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00104.html This is an area where NetBSD is better-behaved than POSIX, so allow the NetBSD behavior in tests. * doc/posix-functions/rename.texi: * doc/posix-functions/renameat.texi: Document NetBSD behavior. * tests/test-rename.h (test_rename): Allow NetBSD behavior. 2017-08-15 Bruno Haible renameat: Ensure declaration in on NetBSD. * lib/stdio.in.h: Include also on NetBSD. * doc/posix-functions/renameat.texi: Mention this problem. 2017-08-15 Bruno Haible duplocale: Work around NetBSD 7.0 bug. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Test against the NetBSD 7.0 bug. * lib/duplocale.c: Add comment about NetBSD problem. * doc/posix-functions/duplocale.texi: Mention the NetBSD problem. 2017-08-15 Bruno Haible duplocale tests: Verify use with *_l functions. * modules/duplocale-tests (configure.ac): Test for uselocale and some *_l functions. * tests/test-duplocale.c (test_with_uselocale): New function, extracted from main. (get_locale_dependent_values_from, test_with_locale_parameter): New functions. (main): Test both test_with_uselocale and test_with_locale_parameter. 2017-08-15 Bruno Haible extensions: Enable NetBSD specific extensions. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define _NETBSD_SOURCE. 2017-08-14 Bruno Haible open, openat: Update doc about O_CLOEXEC. * doc/posix-functions/open.texi: More concrete list of platforms. * doc/posix-functions/openat.texi: Likewise. 2017-08-14 Paul Eggert open: support O_CLOEXEC * NEWS, doc/posix-functions/open.texi: * doc/posix-functions/openat.texi: Document this. * lib/fcntl.in.h (O_CLOEXEC): Default to a nonzero value. (GNULIB_defined_O_CLOEXEC): New symbol. * lib/open.c: Include cloexec.h. (open): Support O_CLOEXEC. * lib/openat.c: Include cloexec.h. (rpl_openat): Support O_CLOEXEC. * lib/popen-safer.c: Do not include cloexec.h. (open_noinherit): Remove. (popen_safer): Use O_CLOEXEC instead of set_cloexec_flag. * lib/save-cwd.c: Do not include cloexec.h. (save_cwd): Use O_CLOEXEC instead of set_cloexec_flag. * m4/open-cloexec.m4: New file. * m4/open.m4 (gl_FUNC_OPEN): Require gl_PREPROC_O_CLOEXEC. Replace 'open' if O_CLOEXEC is not present. * m4/openat.m4 (gl_FUNC_OPENAT): Require gl_PREPROC_O_CLOEXEC. Replace 'openat' if O_CLOEXEC is not present. * modules/freopen (Depends-on): Depend on 'open' if replacing freopen. * modules/open (Files): Add m4/open-cloexec.m4. (Depends-on): Depend on cloexec if replacing 'open'. * modules/openat (Files): Add m4/open-cloexec.m4. (Depends-on): Depend on cloexec if replacing openat. * modules/popen-safer (Depends-on): Remove cloexec. * modules/save-cwd (Depends-on): Remove cloexec, and add fd-safer-flag and 'open'. 2017-08-13 Paul Eggert reallocarray: minor fixes * doc/glibc-functions/reallocarray.texi: Update version numbers. * m4/reallocarray.m4 (gl_FUNC_REALLOCARRAY): Don't trust _cv_ contents. * modules/reallocarray (License): Change from GPL to LGPL. * tests/test-reallocarray.c (main): Fix ENOMEM typo. Indent properly and don't use tabs. 2017-08-13 Darshit Shah reallocarray: New module reallocarray is a new function in glibc 2.26 to safely allocate an array of memory locations with integer overflow protection. * MODULES.html.sh: Add reallocarray. * doc/glibc-functions/reallocarray.texi: Documentation for reallocarray. * lib/reallocarray.c: New file to implement module reallocarray. * lib/stdlib.in.h: Add function declarations for reallocarray. * m4/reallocarray.m4: New file. * m4/stdlib_h.m4: Declare reallocarray. * modules/reallocarray: New file. * modules/reallocarray-test: New file. * modules/stdlib: Coerce stdlib.h to export reallocarray. * tests/test-reallocarray.c: New test. 2017-08-12 Paul Eggert dirent-safer: fix cloexec race * lib/opendir-safer.c: Include fcntl.h instead of unistd-safer.h. (opendir_safer): Use F_DUPFD_CLOEXEC. * modules/dirent-safer (Depends-on): Add fcntl. Remove unistd-safer. * tests/test-dirent-safer.c: Do not include unistd-safer.h, as it is no longer a prerequisite. Use F_DUPFD_CLOEXEC instead of dup_safer. fts: fix cloexec races * lib/fts.c [!_LIBC]: Do not include dirent--.h, unistd--.h, cloexec.h. (opendirat, diropen): Use O_CLOEXEC instead of set_cloexec_flag. (fts_build): Use F_DUPD_CLOEXEC rinstad of set_cloexec_flag. (fd_ring_check): Set cloexec flag on new file descriptors. (fts_build, fd_ring_check): While we’re at it, make sure the resulting file descriptor is not 0, 1, or 2, since that is easy. 2017-08-11 Bruno Haible fts tests: Fix link error. Reported by Tom G. Christensen in https://lists.gnu.org/r/bug-gnulib/2017-08/msg00078.html * modules/fts-tests (Makefile.am): Link test-fts against LIBINTL. 2017-08-10 Paul Eggert fts: port recent changes to CentOS 6 Problem reported by Tom G. Christensen in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00064.html * lib/fts.c (fsword): New type. (struct dev_type, filesystem_type): Use it. * m4/fts.m4 (gl_FUNC_FTS_CORE): Check for __fsword_t. Also, check for f_type only if fstatfs and sys/vfs.h work. 2017-08-09 Paul Eggert tempname: do not depend on secure_getenv Excess dependency noted by Eli Zaretskii (Bug#28023#17). * lib/tempname.c (__secure_getenv) [!_LIBC]: Remove; unused. * modules/tempname (Depends-on): Remove secure_getenv. 2017-08-08 Paul Eggert extensions: add _OPENBSD_SOURCE * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define _OPENBSD_SOURCE. 2017-08-06 Reuben Thomas Bruno Haible manywarnings: Add support for C++. * build-aux/g++-warning.spec: New file. * m4/manywarnings-c++.m4: New file. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC(C++)): New macro, that redirects to manywarnings-c++.m4. * modules/manywarnings (Files): Add m4/manywarnings-c++.m4. 2017-08-06 Paul Eggert git-version-gen: another fix for tags with "-" * build-aux/git-version-gen: Improve fix for tags containing "-". Suggested by Markus Armbruster in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00034.html 2017-08-06 Bruno Haible warnings, manywarnings: Add support for multiple languages, not just C. * warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL): Renamed from gl_UNKNOWN_WARNINGS_ARE_ERRORS. (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)): New macro. (gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)): New macro. (gl_UNKNOWN_WARNINGS_ARE_ERRORS): Dispatch to gl_UNKNOWN_WARNINGS_ARE_ERRORS(_AC_LANG). (gl_WARN_ADD): Require the gl_UNKNOWN_WARNINGS_ARE_ERRORS specialization of the current language. If C++ is the current language, modify WARN_CXXFLAGS instead of WARN_CFLAGS. * manywarnings.m4 (gl_MANYWARN_ALL_GCC(C)): New macro, extracted from gl_MANYWARN_ALL_GCC. (gl_MANYWARN_ALL_GCC): Dispatch to gl_MANYWARN_ALL_GCC(_AC_LANG). 2017-08-06 Markus Armbruster git-version-gen: Fix for tags containing '-' Really old versions of git-describe (before v1.5.0, Feb 2007) don't have the number of commits in their long format output, i.e. where modern 'git describe --abbrev=4 --match="v*"' prints "v0.1-1494-g124b9", they print "v0.1-1494-g124b9". git-version-gen recognizes both patterns, and normalizes the old format to the new one. Unfortunately, this normalization code gets confused when the tag contains '-'. Reproducer: $ git-tag -m test v0.2-rc1 $ build-aux/git-version-gen .tarball-version; echo build-aux/git-version-gen: WARNING: git rev-list failed UNKNOWN We take exact tag "v0.2-rc1" for the old format, extract the presumed tag "v0.2" from it, then run "git rev-list v0.2..HEAD" to count commits since tha tag. Fails, because tag "v0.2" does not exist. * git-version-gen: We could perhaps drop support for versions from more than a decade ago. But tightening the pattern match is easy enough, so do that. Still breaks when you use version tags ending in something matching -g????, but you arguably get what you deserve then. 2017-08-05 Paul Eggert valgrind-tests: use ls, and cache * m4/valgrind-tests.m4: Test ls, not bash. Problem reported by Reuben Thomas. Also, cache the result so that it can be overridden. 2017-08-04 Paul Eggert manywarnings: port to 64-bit GCC builds of Emacs * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Compute max safe object size rather than hardwiring 2147483647. This is needed to build GNU Emacs, which has one conditional (and used only-in-theory) call to malloc with a literal greater than 2147483647. 2017-08-04 Bruno Haible Relax the license of some modules with no runtime code. * modules/std-gnu11 (License): Set to 'unlimited'. * modules/c99 (License): Likewise. Reported by Reuben Thomas . * modules/d-ino (License): Set to 'LGPL'. * modules/host-os (License): Likewise. * modules/longlong (License): Likewise. 2017-08-03 Paul Eggert renameat2: port to RHEL 7 + NFS * lib/renameat2.c (renameat2) [SYS_renameat2]: Port to RHEL 7 + NFS. Problem reported by Ted Zlatanov in: http://lists.gnu.org/r/emacs-devel/2017-08/msg00082.html 2017-08-02 Paul Eggert renameat2: port to non-renameat platforms Problem reported for MSVC-2015 by Gisle Vanem in: http://lists.gnu.org/r/bug-gnulib/2017-08/msg00001.html * lib/renameat2.c [!HAVE_RENAMEAT]: Include here too. (renameat2) [!HAVE_RENAMEAT]: Fix typo in arg passing. 2017-08-01 Paul Eggert manywarnings: port to 32-bit GCC bug Problem reported by Pino Toscano in: http://lists.gnu.org/r/bug-gnulib/2017-07/msg00150.html * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Use 2**31 - 1, not 2**63 - 1, to work around the following GCC bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81650 2017-07-30 Paul Eggert backupfile: new function to validate backup suffix * lib/backupfile.c (set_simple_backup_suffix): New function. (backupfile_internal): Use it. canonicalize: fix EOVERFLOW commentary Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-07/msg00147.html * lib/canonicalize.c (canonicalize_filename_mode): * lib/canonicalize-lgpl.c (__realpath): Fix comments. Don't interpret EOVERFLOW to mean nonexistence * lib/fts.c (fts_stat): If lstat fails, report its errno, which may be EOVERFLOW; this is likely more useful than reporting the stat errno. * lib/glob.c (link_stat): Rename from link_exists2_p and return -1/0 instead of 0/1. Caller changed. * lib/glob.c (link_exists_p): * lib/renameat2.c (rename_noreplace, renameat2): * lib/tempname.c (try_nocreate): If errno == EOVERFLOW then the directory entry exists, so do not act as if it does not exist. backup-rename: new module It is like backupfile, except it avoids some race conditions, and it does not output to stderr or exit. * MODULES.html.sh: Add backup-rename. * lib/backup-find.c, lib/backup-internal.h, lib/backup-rename.c: * modules/backup-rename: New files. * lib/backupfile.c: Turn this into an internals file, which contains code common to backupfile and backup_rename. Include backupfile-internal.h instead of backupfile.h. Do not include argmatch.h or xalloc.h: include xalloc-oversized.h. Include renameat2.h and fcntl.h. (BACKUP_NOMEM): New constant. (numbered_backup): New args BASE_OFFSET and *DIRPP. Do not exit on memory exhaustion; just return BACKUP_NOMEM. Caller changed. (backupfile_internal): Rename from find_backup_file_name. Support new arg RENAME. (backup_args, backup_types, get_version, xget_version): Move to lib/backup-find.c. * lib/backupfile.h (backup_file_rename): New decl. * modules/backupfile (Files): Add lib/backup-internal.h, lib/backup-find.c. (Depends-on): Add dirfd, fcntl, renameat2. (lib_SOURCES): Add backup-find.c. renameat2: port better to older Solaris * lib/renameat2.c (renameat2): Set ret_val properly on old Solaris. Add goto to use a label, to silence picky compilers. fts-tests: port to gcc -Wwrite-strings * tests/test-fts.c (base, base_d): New static vars. (argv, remove_tree, main): Use them. 2017-07-26 Reuben Thomas relocatable-lib{,-lgpl}: improve documentation * doc/relocatable-maint.texi: Document use of relocatable-lib{,-lgpl}. Various other updates. 2017-07-30 Reuben Thomas Bruno Haible relocatable-lib{,-lgpl}: add Valgrind suppressions * lib/relocatable.valgrind: New file. * modules/relocatable-lib (Files): Add relocatable.valgrind. * modules/relocatable-lib-lgpl: Likewise. 2017-07-26 Reuben Thomas relocatable: Make the license on the sources the GPL. * lib/relocatable.h, lib/relocatable.c: Change the copyright notice from LGPL, which was a special case so that the relocatable source files could be used without gnulib-tool, to GPL. They can still be used under the LGPL, using the --lgpl option to gnulib-tool. 2017-07-30 Bruno Haible host-cpu-c-abi: Detect ILP32 ABI on IA-64 HP-UX. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Distinguish ia64-ilp32 from ia64. For arm64, test only __aarch64__, as __ARM_64BIT_STATE and __ARM_PCS_AAPCS64 are not reliable indicators: they are not defined on Ubuntu 14.04 (gcc 4.8.4) and Debian 8 (gcc 4.9.2). 2017-07-27 Paul Eggert faccessat: document AT_SYMLINK_NOFOLLOW issue * doc/posix-functions/faccessat.texi: Modernize platform list. Document AT_SYMLINK_NOFOLLOW limitation. renameat2: port to Solaris 10 * lib/renameat2.c (rename_noreplace): Use lstat, not faccessat with AT_SYMLINK_NOFOLLOW (which is not portable). (renameat): Undef before using, to avoid endless recursion when the replacement renameat calls renameat2 which calls the replacement renameat. (renameat2): Use lstatat, not faccessat with AT_SYMLINK_NOFOLLOW. * modules/renameat2 (Depends-on): Remove faccessat. * modules/renameat-tests (test_renameat_LDADD): * modules/renameat2-tests (test_renameat2_LDADD): Remove $(LIB_EACCESS). renameat2: new module Although the Linux syscall renameat2 is not in glibc (yet?), it is useful to have access to its RENAME_NOREPLACE flag. * MODULES.html.sh (func_all_modules): Add renameat2. * lib/renameat2.c, lib/renameat2.h, modules/renameat2: * modules/renameat2-tests, tests/test-renameat2.c: New files. * lib/renameat.c (renameat): Move most of the implementation to renameat2, and just call renameat2. * modules/renameat (Files): Remove lib/at-func2.c. (Depends-on): Depend only on renameat2. (Include): Remove . * modules/renameat-tests (test_renameat_LDADD): Add $(LIB_EACCESS), since renameat (via renameat2) might use faccessat. 2017-07-27 Erik Skultety (tiny change) vc-list-files: Adjust the script to support git worktrees * build-aux/vc-list-files: Require existence, not directory. 2017-07-26 Paul Eggert doc: bring MODULES.html.sh up to date Somehow a few months ago we stopped updating MODULES.html.sh. I don’t recall explicitly deciding this, so I updated it now. Alternatively I suppose we could remove it. * MODULES.html.sh: Add builtin-expect, c99, ctime, explicit_bzero, localtime, localtime-buffer, noreturn, nstrftime, strftime-fixes, truncate, utime, utime-h, windows-stat-inodes, windows-stat-override, windows-stat-timespec, year2038. Sort. 2017-07-26 Jim Meyering fprintftime: fix build-break caused by recent renaming * lib/fprintftime.c: Include "nstrftime.c", not the now-renamed "strftime.c". * modules/fprintftime: Depend directly on nstrftime. 2017-07-26 Paul Eggert regex: work with GCC7's -Werror=implicit-fallthrough= * lib/regex_internal.h (FALLTHROUGH): New macro. * lib/regcomp.c (peek_token_bracket, parse_expression): * lib/regexec.c (check_node_accept): Use it. 2017-07-24 Paul Eggert fts: simplify fts_build * lib/fts.c (fts_build): Simplify, and be lazier about calling leaf_optimization. fts: three levels of leaf optimization * lib/fts.c (enum leaf_optimization): New type with three values. (S_MAGIC_AFS): New macro. Sort them. (leaf_optimization): Rename from leaf_optimization_applies, and return enum leaf_optimization instead of bool. All uses changed. Add cases for unknown type and for AFS. (fts_build): Don’t rely on link counts if NO_LEAF_OPTIMIZATION. fts: cache dirent_inode_sort_may_be_useful too * lib/fts.c (struct dev_type): New struct. (DEV_TYPE_HT_INITIAL_SIZE): New constant. (dev_type_hash, dev_type_compare, filesystem_type): New functions. (dirent_inode_sort_may_be_useful, leaf_optimization_applies): Now takes FTSENT const *, not int. All uses changed. Use filesystem_type to cache. (link_count_optimize_ok): Remove. Caller changed to use leaf_optimization_applies, which now uses shared cache. fts: introduce MIN_DIR_NLINK * lib/fts.c (MIN_DIR_NLINK): New constant. Use it instead of 2, whenever we are talking about link counts. fts: nlink_t signedness fixups * lib/fts.c (fts_open): Set rootparent n_dirs_remaining to -1 so that root need not be a special case later. (fts_read): Remove now-redundant test for fts_level. Do not assume that nlink_t is signed. (fts_build): Remove useless decrement of nlinks. (fts_stat): Avoid unlikely signed integer overflow later, if nlink_t is signed. fts-tests: new module * modules/fts-tests, tests/test-fts.c: New files. 2017-07-23 Bruno Haible Rename module 'strftime' to 'nstrftime'. * m4/nstrftime.m4: Renamed from m4/strftime.m4. * lib/nstrftime.c: Renamed from lib/strftime.c. * modules/nstrftime: Renamed from modules/strftime. (Files, Makefile.am): Update. * tests/test-nstrftime.c: Renamed from tests/test-strftime.c. Fix comment. * modules/nstrftime-tests: Renamed from modules/strftime-tests. (Files, Makefile.am): Update. * modules/strftime: New file, an obsolete indirection. * doc/posix-functions/strftime.texi: Update reference. * config/srclist.txt: Update info. * NEWS: Mention the change. 2017-07-21 Tim Rühsen malloca: Silence a warning from clang's memory sanitizer. * lib/malloca.c (NO_SANITIZE_MEMORY): New macro. (freea): Use it. 2017-07-18 Bruno Haible host-cpu-c-abi: Fix detection of MIPS ABI. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): For MIPS, really test the ABI, not the CPU instruction set. 2017-07-16 Paul Eggert explicit_bzero: new module The explicit_bzero function has been added to glibc. This module is intended to supports its use in GNU programs. * doc/glibc-functions/explicit_bzero.texi, lib/explicit_bzero.c: * m4/explicit_bzero.m4, modules/explicit_bzero: New files. * doc/gnulib.texi (Glibc string.h): Link to new doc. * lib/string.in.h (explicit_bzero): Declare. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Add defaults for it. * modules/string (string.h): Substitute its vars. 2017-07-16 Bruno Haible threadlib: Support static linking. * m4/threadlib.m4 (gl_THREADLIB_BODY): When static linking is in use, set gl_cv_have_weak to 'no'. 2017-07-16 Bruno Haible unicase/locale-language: Fix link dependencies. * modules/unicase/locale-language (Link): New section. * modules/unicase/locale-language-tests (Makefile.am): Link test-locale-language program with $(LIBTHREAD). 2017-07-15 John E. Malmberg sys_socket: Add support for OpenVMS. * lib/sys_socket.in.h [__VMS]: Define CMSG_SPACE, CMSG_LEN. * doc/posix-headers/sys_socket.texi: Mention OpenVMS issues. 2017-07-15 John E. Malmberg sys_resource: Add support for OpenVMS. * lib/resource.in.h [__VMS]: Define RUSAGE_SELF, RUSAGE_CHILDREN. * doc/posix-headers/sys_resource.texi: Mention OpenVMS issues. 2017-07-15 John E. Malmberg Bruno Haible math: Add support for OpenVMS. * lib/math.in.h [__VMS]: Include . * doc/posix-headers/math.texi: Mention OpenVMS issues. 2017-07-15 Bruno Haible getdtablesize: Add minimal support for OpenVMS. Reported by John E. Malmberg . * modules/getdtablesize (Description): Fix. * lib/getdtablesize.c: Fix comment. * m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Don't replace the getdtablesize() function, even though the test fails. * doc/glibc-functions/getdtablesize.texi: Reference SUSv2. Describe limitation on OpenVMS. 2017-07-13 Bruno Haible Revisit cross-compilation guesses. * m4/wctype_h.m4 (gl_WCTYPE_H): Add comment. 2017-07-13 Bruno Haible Improve cross-compilation guesses for native Windows. * m4/btowc.m4 (gl_FUNC_BTOWC): Add cross-compilation guess for native Windows. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Likewise. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Likewise. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Likewise. * m4/cbrtf.m4 (gl_FUNC_CBRTF_WORKS): Likewise. * m4/cbrtl.m4 (gl_FUNC_CBRTL, gl_FUNC_CBRTL_WORKS): Likewise. * m4/ceil.m4 (gl_FUNC_CEIL): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/dup.m4 (gl_FUNC_DUP): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/exp2.m4 (gl_FUNC_EXP2_WORKS): Likewise. * m4/exp2l.m4 (gl_FUNC_EXP2L): Likewise. * m4/expm1.m4 (gl_FUNC_EXPM1): Likewise. * m4/expm1f.m4 (gl_FUNC_EXPM1F_WORKS): Likewise. * m4/exponentl.m4 (gl_LONG_DOUBLE_EXPONENT_LOCATION): Likewise. * m4/fabsl.m4 (gl_FUNC_FABSL_WORKS): Likewise. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Likewise. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Likewise. * m4/float_h.m4 (gl_FLOAT_H): Likewise. * m4/floor.m4 (gl_FUNC_FLOOR): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF): Likewise. * m4/fma.m4 (gl_FUNC_FMA_WORKS): Likewise. * m4/fmaf.m4 (gl_FUNC_FMAF_WORKS): Likewise. * m4/fmal.m4 (gl_FUNC_FMAL_WORKS): Likewise. * m4/fmod.m4 (gl_FUNC_FMOD): Likewise. * m4/fmodf.m4 (gl_FUNC_FMODF): Likewise. * m4/fmodl.m4 (gl_FUNC_FMODL): Likewise. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Likewise. * m4/frexpf.m4 (gl_FUNC_FREXPF_WORKS): Likewise. * m4/ftello.m4 (gl_FUNC_FTELLO): Likewise. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Likewise. * m4/hypot.m4 (gl_FUNC_HYPOT): Likewise. * m4/hypotf.m4 (gl_FUNC_HYPOTF, gl_FUNC_HYPOTF_WORKS): Likewise. * m4/hypotl.m4 (gl_FUNC_HYPOTL, gl_FUNC_HYPOTL_WORKS): Likewise. * m4/ilogb.m4 (gl_FUNC_ILOGB_WORKS): Likewise. * m4/ilogbf.m4 (gl_FUNC_ILOGBF_WORKS): Likewise. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. * m4/isinf.m4 (gl_ISINFL_WORKS): Likewise. * m4/isnanf.m4 (gl_ISNANF_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): Likewise. * m4/log.m4 (gl_FUNC_LOG, gl_FUNC_LOG_WORKS): Likewise. * m4/logf.m4 (gl_FUNC_LOGF, gl_FUNC_LOGF_WORKS): Likewise. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): Likewise. * m4/log10.m4 (gl_FUNC_LOG10, gl_FUNC_LOG10_WORKS): Likewise. * m4/log10f.m4 (gl_FUNC_LOG10F, gl_FUNC_LOG10F_WORKS): Likewise. * m4/log10l.m4 (gl_FUNC_LOG10L_WORKS): Likewise. * m4/log1p.m4 (gl_FUNC_LOG1P): Likewise. * m4/log1pf.m4 (gl_FUNC_LOG1PF, gl_FUNC_LOG1PF_WORKS): Likewise. * m4/log1pl.m4 (gl_FUNC_LOG1PL): Likewise. * m4/log2.m4 (gl_FUNC_LOG2, gl_FUNC_LOG2_WORKS): Likewise. * m4/log2f.m4 (gl_FUNC_LOG2F, gl_FUNC_LOG2F_WORKS): Likewise. * m4/log2l.m4 (gl_FUNC_LOG2L_WORKS): Likewise. * m4/logb.m4 (gl_FUNC_LOGB_WORKS): Likewise. * m4/logbf.m4 (gl_FUNC_LOGBF_WORKS): Likewise. * m4/logbl.m4 (gl_FUNC_LOGBL_WORKS): Likewise. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Likewise. * m4/mbrtowc.m4 (gl_MBRTOWC_EMPTY_INPUT, gl_MBRTOWC_C_LOCALE): Likewise. * m4/mkdir.m4 (gl_FUNC_MKDIR): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): Likewise. * m4/modf.m4 (gl_FUNC_MODF): Likewise. * m4/modff.m4 (gl_FUNC_MODFF): Likewise. * m4/modfl.m4 (gl_FUNC_MODFL): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/perror.m4 (gl_FUNC_PERROR): Likewise. * m4/popen.m4 (gl_FUNC_POPEN): Likewise. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE, gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2, gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN): Likewise. * m4/ptsname_r.m4 (gl_PREREQ_PTSNAME_R): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/regex.m4 (gl_REGEX): Likewise. * m4/remainder.m4 (gl_FUNC_REMAINDER): Likewise. * m4/remainderf.m4 (gl_FUNC_REMAINDERF, gl_FUNC_REMAINDERF_WORKS): Likewise. * m4/remainderl.m4 (gl_FUNC_REMAINDERL, gl_FUNC_REMAINDERL_WORKS): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise. * m4/signbit.m4 (gl_SIGNBIT): Likewise. * m4/sleep.m4 (gl_FUNC_SLEEP): Likewise. * m4/sqrtl.m4 (gl_FUNC_SQRTL_WORKS): Likewise. * m4/stdint.m4 (gl_STDINT_H): Likewise. * m4/strerror.m4 (gl_FUNC_STRERROR_0): Likewise. * m4/strncat.m4 (gl_FUNC_STRNCAT): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Likewise. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Likewise. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Likewise. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/usleep.m4 (gl_FUNC_USLEEP): Likewise. * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcsrtombs.m4 (gl_WCSRTOMBS_TERMINATION, gl_WCSRTOMBS_NULL): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/chown.m4 (AC_FUNC_CHOWN): Add cross-compilation guess for native Windows. Enable also on Autoconf 2.70. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_LONG_DOUBLE, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_DIRECTIVE_N, gl_PRINTF_DIRECTIVE_LS, gl_PRINTF_FLAG_LEFTADJUST, gl_PRINTF_FLAG_ZERO, gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_SNPRINTF_SIZE1): Add cross-compilation guess for native Windows. (gl_PRINTF_POSITIONS, gl_PRINTF_FLAG_GROUPING, gl_VSNPRINTF_ZEROSIZE_C99): Add comment. 2017-07-13 Bruno Haible Improve cross-compilation guesses for native Windows. * m4/memchr.m4 (gl_FUNC_MEMCHR): Add cross-compilation guess for native Windows. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Don't use internals of memchr.m4. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Likewise. 2017-07-13 Bruno Haible Improve cross-compilation guesses for native Windows. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): Add cross-compilation guess for native Windows. (gl_FUNC_FFLUSH): Update accordingly. * m4/fclose.m4 (gl_FUNC_FCLOSE): Likewise. * m4/fseeko.m4 (gl_FUNC_FFLUSH_STDIN): Likewise. 2017-07-11 Bruno Haible More systematic m4 quoting and indentation. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Quote systematically. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/d-type.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE): Likewise. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/host-os.m4 (gl_HOST_OS): Likewise. * m4/jm-winsz1.m4 (gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H, gl_WINSIZE_IN_PTEM): Likewise. * m4/mbrtowc.m4 (AC_FUNC_MBRTOWC): Likewise. * m4/physmem.m4 (gl_SYS__SYSTEM_CONFIGURATION): Likewise. * m4/pselect.m4 (gl_FUNC_PSELECT): Likewise. * m4/fchownat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Quote systematically. Correct indentation. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/jm-winsz2.m4 (gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. 2017-07-10 Bruno Haible round, roundf: Avoid compiler warning in configure test. * m4/round.m4 (gl_FUNC_ROUND): Use 'return' instead of exit(). * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. 2017-07-10 Bruno Haible getlogin tests: Avoid #ifdefs when sharing code between modules. * modules/getlogin_r-tests (Files): Add tests/test-getlogin.h. * modules/getlogin-tests (Files): Likewise. Remove tests/test-getlogin_r.c. * tests/test-getlogin.h: Extracted from tests/test-getlogin_r.c. * tests/test-getlogin.c: Extracted from tests/test-getlogin_r.c. * tests/test-getlogin_r.c: Include test-getlogin.h. Omit code that tests getlogin(). 2017-07-10 Paul Eggert getlogin: don’t assume one name per uid Problem reported by Wolfgang F. Muthmann (Bug#27640). * modules/getlogin-tests (Files): Add tests/test-getlogin_r.c. (ttyname): Remove test. * modules/getlogin_r-tests (ttyname): Remove test. * tests/test-getlogin.c: Replace this near-clone of test-getlogin_r.c with ‘#define TEST_LOGIN’ followed by ‘#include "test-getlogin_r.c"’. * tests/test-getlogin_r.c: If TEST_GETLOGIN is defined, test getlogin rather than getlogin_r. This avoids code duplication. (main): Use isatty and fstat rather than ttyname and stat. Use getpwnam instead of getpwuid, to be portable to test platforms that have multiple login names for the same uid. 2017-07-10 Tim Rühsen Bruno Haible glob: Fix more memory leaks. * lib/glob.c (glob): Use 'goto out' in order to free dirname before returning. Reported by Tim Rühsen. 2017-07-10 Bruno Haible Make sure $host and $host_os are defined when used. * m4/argz.m4 (gl_FUNC_ARGZ): Require AC_CANONICAL_HOST. * m4/closedir.m4 (gl_FUNC_CLOSEDIR): Likewise. * m4/csharpexec.m4 (gt_CSHARPEXEC): Likewise. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Likewise. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Likewise. * m4/opendir.m4 (gl_FUNC_OPENDIR): Likewise. * m4/poll.m4 (gl_FUNC_POLL): Likewise. * m4/pselect.m4 (gl_FUNC_PSELECT): Likewise. * m4/ptsname.m4 (gl_FUNC_PTSNAME): Likewise. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Likewise. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Require AC_CANONICAL_HOST outside the m4_ifdef block. 2017-07-09 Bruno Haible *printf: Fix cross-compilation guess for Solaris. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_F): Fix copy-and-paste mistake from 2010-12-21. 2017-07-07 Paul Eggert Bruno Haible vasnprintf: port to macOS 10.13 Problem reported by comex in: http://lists.gnu.org/r/bug-gnulib/2017-07/msg00056.html * lib/vasnprintf.c (VASNPRINTF): Don’t use %n on macOS. 2017-07-06 Bruno Haible imaxdiv tests: Fix logic. * tests/test-imaxdiv.c (main): Use == instead of =. Reported by Coverity. 2017-07-06 Bruno Haible uninorm/filter: Fix use-after-free bug. * lib/uninorm/uninorm-filter.c (uninorm_filter_write): Maintain sortbuf == filter->sortbuf invariant. Reported by Coverity. 2017-07-06 Bruno Haible glob: Fix more memory leaks. * lib/glob.c (glob): Free dirname before returning. Reported by Coverity and Tim Rühsen. 2017-07-06 Paul Eggert parse-datetime: fix uninit var bug Reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-07/msg00038.html * lib/parse-datetime.y (parse_datetime2): Do not use uninitialized. 2017-07-05 Bruno Haible doc: Update for MSVC 14. * doc/posix-headers/*.texi: Add info about MSVC 14. * doc/posix-functions/*.texi: Likewise. * doc/pastposix-functions/*.texi: Likewise. * doc/glibc-headers/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. 2017-07-05 Bruno Haible sched: Fix build failure on native Windows (regression from 2017-06-19). * m4/sched_h.m4 (gl_SCHED_H): Set HAVE_STRUCT_SCHED_PARAM always. 2017-07-03 John E. Malmberg stdioext: Port to OpenVMS. * lib/stdio-impl.h: OpenVMS uses struct _iobuf for FILE information. * lib/fpending.c (fpending): Remove non-working VMS specific code. * lib/fbufmode.c (fbufmode): Fix _IOLBF test to use fp_ macro. * lib/fflush.c (clear_ungetc_buffer): Add OpenVMS to comments. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadseek): Likewise. * lib/fseeko.c (fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwriteable): Likewise. * lib/fwriting.c (fwriting): Likewise. 2017-07-01 Benno Schulenberg glob: Declare variables at the very start of their scope. * lib/glob.c (convert_dirent, convert_dirent64): Give each fragment its separate scope, so the functions will compile on Haiku. 2017-07-01 Bruno Haible logbl: Work around a glibc bug on PowerPC64LE. * m4/logbl.m4 (gl_FUNC_LOGBL_WORKS): Test also negative subnormal numbers. * doc/posix-functions/logbl.texi: Update. 2017-06-29 Bruno Haible stat, fstat: Compile stat-w32.c only on platforms that need it. Suggested by Paul Eggert. * modules/stat (configure.ac): Request stat-w32.o only on native Windows. * modules/fstat (configure.ac): Likewise. 2017-06-25 Bruno Haible stat: Improve last change. * lib/stat-w32.c: Revert last change. Use generic idiom instead. 2017-06-25 Paul Eggert stat: port to xlc 12.01 * lib/stat-w32.c: Always include . Otherwise, xlc 12.01 complains "Compilation unit is empty." 2017-06-24 Paul Eggert xalloc-oversized: port to icc * lib/xalloc-oversized.h (xalloc_oversized): Do not use __builtin_mul_overflow if ICC is defined, as this results in "undefined reference to `__builtin_mul_overflow'" with icc 17.0.2 20170213. 2017-06-19 Bruno Haible classpath: Avoid including config.h twice, as it produces warnings. Reported by John E. Malmberg . * lib/classpath.h: Conditionalize the include of config.h. 2017-06-19 Bruno Haible John E. Malmberg (tiny change) sched: Fix compilation failure on OpenVMS. * m4/sched_h.m4 (gl_SCHED_H): Require AC_CANONICAL_HOST. On OpenVMS, test whether exists and defines struct sched_param. * lib/sched.in.h: On OpenVMS, include . 2017-06-17 Paul Eggert diffseq: port to GCC 7 with --enable-gcc-warnings * lib/diffseq.h (diag): Use an if, not an ifdef, for most of the heuristic check. This way, GCC 7 with --enable-gcc-warnings does not complain about big_snake being defined but not used. 2017-06-15 Bruno Haible gettext-h: Update theoretical condition for use of variable size arrays. Reported by Paul Eggert. * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Extend comment to include the theoretical condition for availability of variable size arrays, if we could trust the value of __STDC_VERSION__. 2017-06-12 Bruno Haible Relicense some modules under LGPLv2+. Daiki Ueno's approval is in https://lists.gnu.org/r/bug-gnulib/2017-06/msg00058.html. * modules/uniwidth/base (License): Change to LGPLv2+. * modules/uniwidth/width (License): Likewise. 2017-06-11 Bruno Haible localename: Fix test failure on DragonFly BSD. * lib/localename.c (gl_locale_name_thread_unsafe): Treat DragonFly BSD like FreeBSD. 2017-06-11 Bruno Haible float: Fix 'float' and 'isinf' failures on DragonFly BSD. * m4/float_h.m4 (gl_FLOAT_H): Treat DragonFly BSD like FreeBSD. * lib/float.in.h: Likewise. * m4/fmal.m4, m4/frexpl.m4, m4/logbl.m4: Update accordingly. 2017-06-11 Bruno Haible gnulib-tool: Clean up after autotools. * gnulib-tool (func_create_testdir, func_create_megatestdir): Remove useless directory left over by the Autotools. 2017-06-11 Paul Eggert getopt-posix: port to glibc 2.25.90 Problem reported by Daniel P. Berrange in: http://lists.gnu.org/r/bug-gnulib/2017-06/msg00003.html * lib/getopt-pfx-core.h (_GETOPT_CORE_H): * lib/getopt-pfx-ext.h (_GETOPT_EXT_H): #undef if __GETOPT_PREFIX is defined. 2017-06-11 Bruno Haible strtod-obsolete: Fix license. * modules/strtod-obsolete (License): Change to LGPL. 2017-06-10 Jim Meyering maint: update to work with GCC7's -Werror=implicit-fallthrough= * lib/savewd.c (FALLTHROUGH): Define. (savewd_save, savewd_restore): Use this, rather than a comment, whenever one switch case falls through into the next. 2017-06-08 Bruno Haible host-cpu-c-abi: Support for aarch64 ILP32 ABI. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Recognize the aarch64 ILP32 ABI. Set HOST_CPU_C_ABI=arm64-ilp32 and define __arm64_ilp32__ in this case. 2017-06-08 Paul Eggert doc: remove robots, add prereqs * doc/build-automation.texi, doc/gnulib.texi: Mention prereqs for builds. Simon's robot site does not seem to be up, so remove mentions of it for now. 2017-06-08 Bruno Haible gnulib-tool: Fix bug in func_symlink_if_changed, from 2006-11-13. * gnulib-tool (func_symlink_target): New function, extracted from func_symlink. (func_symlink, func_symlink_if_changed): Use it. 2017-06-08 Bruno Haible gnulib-tool: Fix bug in func_ln_s, from 2016-01-15. * gnulib-tool (func_ln_s): Determine cp_src correctly. 2017-06-07 Bruno Haible canonicalize-lgpl: Avoid conflict with gnulib 'getcwd' module on VMS. Reported by John E. Malmberg in . * lib/canonicalize-lgpl.c (__getcwd): On VMS, when using gnulib's getcwd override, pass 2 arguments to getcwd, not 3. 2017-06-04 Paul Eggert same-inode: port better to VMS 8.2 and later Problem reported by John E. Malmberg in: http://lists.gnu.org/r/bug-gnulib/2017-06/msg00005.html * lib/same-inode.h (SAME_INODE) [__VMS && 80200000 <= __CRTL_VER]: Use the usual POSIX definition. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Define _USE_STD_STAT. 2017-06-01 Paul Eggert error: fix POSIX violation for va_end Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-06/msg00001.html * lib/error.c (error_tail): Do not call va_end here. (error, error_at_line): Call it here instead. 2017-05-28 Bruno Haible c-strtod: Make it usable in C++ mode. * lib/c-strtod.h: Add 'extern "C"' marker for C++. 2017-05-25 Jim Meyering quotearg: fix compilation failure due to FALLTHROUGH misuse * lib/quotearg.c (quotearg_buffer_restyled): Revert one FALLTHROUGH macro back to /* fall through */ comment. The macro can apply only to a following case statement. Reported by Assaf Gordon. 2017-05-25 Paul Eggert intprops: port to recent icc Port to icc (ICC) 17.0.4 20170411, which defines __GNUC__ to be 5 but does not support __builtin_add_overflow etc. * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW) [__ICC]: Define to 0. 2017-05-23 Karl Berry * config/srclist.txt (iconv.m4): sync broken, comment out until (hopefully) the next gettext release. 2017-05-22 Bjarni Ingi Gislason Remove repeated words in comments. 2017-05-22 Bernhard Voelker fallthrough: reinstate a FALLTHROUGH instance in quotearg quotearg.c: Reinstate this instance which is significant when the if branch is not taken. 2017-05-21 Bruno Haible gnulib-tool: Add options to create hard links. * gnulib-tool (func_usage): Document options --hardlink, --local-hardlink, --more-hardlinks. (func_symlink): Renamed from func_ln. (func_symlink_if_changed): Renamed from func_ln_if_changed. (func_hardlink): New function. (copymode, lcopymode): New variables. (symbolic, lsymbolic): Remove variables. (Options): Implement options --hardlink, --local-hardlink, --more-hardlinks. (func_should_link): Renamed from func_should_symlink. Set copyaction. (func_add_file, func_update_file): Update invocation of func_should_link. Invoke func_hardlink when appropriate. (func_import): Update comments. (func_create_testdir): Update invocation of func_should_link. Invoke func_hardlink when appropriate. Finally, invoke 'git update-index --refresh' to mitigate the effects of the hard links on git. 2017-05-20 Bruno Haible argp: Simplify bit manipulation. * lib/argp-parse.c (parser_parse_opt): Use &, |, ~ instead of shifts on a signed integer type. 2017-05-20 Bruno Haible Avoid wrong configure results with gcc -fsanitize=address. This completes the work done on 2016-02-06 on this topic. * m4/memmem.m4 (gl_FUNC_MEMMEM): Free allocated memory before returning. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/fopen.m4 (gl_FUNC_FOPEN): Close allocated FILE streams before returning. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): Likewise. * m4/fpurge.m4 (gl_FUNC_FPURGE): Likewise. * m4/ftello.m4 (gl_FUNC_FTELLO): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/signbit.m4 (gl_FLOATTYPE_SIGN_LOCATION): Likewise. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Close allocated FILE streams and free allocated memory before returning. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Close allocated DIR objects before returning. * m4/iconv.m4 (AM_ICONV_LINK): Close allocated iconv_t handles before returning. 2017-05-20 Bruno Haible gnulib-tool: Don't create hard links between gnulib and its testdirs. * gnulib-tool (func_create_testdir): Don't invoke 'ln'. 2017-05-20 Bruno Haible argp, tsearch tests: Fix file list. * modules/argp-tests (Files): Add tests/macros.h. * modules/tsearch-tests (Files): Likewise. 2017-05-20 Bruno Haible getopt-posix tests: Remove redundant include. * tests/test-getopt.h: Don't include "macros.h". It's already included by tests/test-getopt-main.h. 2017-05-19 Jim Meyering dfa: two small simplifications * lib/dfa.c (build_state): Avoid repeating longer expressions. 2017-05-18 Jim Meyering fallthrough: update for GCC 7/8 * lib/quotearg.c (FALLTHROUGH): New macro. Use it whenever one switch case falls through into the next, replacing "/* Fall through */" comments. This exposed one instance of an unwarranted "fall through" comment: unwarranted because it preceded a "goto" label not a case statement. * lib/freopen-safer.c (freopen_safer): Likewise. * lib/fts.c (leaf_optimization_applies): Likewise. * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Likewise. * tests/test-getopt_long.h (getopt_long_loop): Likewise. * tests/test-tsearch.c (mangle_tree): Likewise. Also include tests/macros.h for the definition. * tests/test-argp.c (group1_parser): Likewise. * tests/test-getopt.h (getopt_loop): Likewise. 2017-05-19 Paul Eggert argp: fix shift bug * lib/argp-parse.c (parser_parse_opt): Rework to avoid undefined behavior on shift overflow, caught by gcc -fsanitize=undefined. argp: fix pointer-subtraction bug * lib/argp-help.c (hol_append): Don’t subtract pointers to different arrays, as this can run afoul of -fcheck-pointer-bounds. See the thread containing Bruno Haible’s report in: http://lists.gnu.org/r/bug-gnulib/2017-05/msg00171.html 2017-05-19 Bruno Haible printf-posix tests: Avoid test failure with "gcc --coverage". Reported by Tim Rühsen . * tests/test-printf-posix2.c (main): Test a width of 10000000 rather than 5000000. * tests/test-fprintf-posix2.c (main): Likewise. 2017-05-19 Paul Eggert closeout: don’t close stderr when sanitizing * NEWS: Document this. * lib/closeout.c (__has_feature): New macro, if not already defined. (SANITIZE_ADDRESS): New constant. (close_stdout): Don’t close stderr if sanitizing addresses. 2017-05-19 Bruno Haible get-rusage-data tests: Avoid failure on Linux/glibc. * tests/test-get-rusage-data.c (main): Don't expect a strict increase on glibc systems. 2017-05-18 Bruno Haible localename: Include necessary header files on Cygwin. * lib/localename.c [__CYGWIN__]: Include , since this is where NL_LOCALE_NAME is defined. 2017-05-18 Bruno Haible gettext: Update macros from gettext git. * m4/intldir.m4: Require Autoconf >= 2.60. * m4/progtest.m4: Fix typos in copyright notice. 2017-05-18 Bruno Haible copy-file tests: Fix link error (regression from 2017-05-01). Reported by Tom G. Christensen . * modules/copy-file-tests (Makefile.am): Link test-copy-file with $(LIB_CLOCK_GETTIME). 2017-05-18 Bruno Haible unicase/special-casing: Fix incompatibility with gperf-3.0.4 (regression from 2017-02-13). * lib/unicase/special-casing.in.h: Renamed from lib/unicase/special-casing.h. * modules/unicase/special-casing (Files): Add lib/unicase/special-casing.in.h. Remove lib/unicase/special-casing.h. (Makefile.am): Add rule for generating unicase/special-casing.h. Update BUILT_SOURCES and MOSTLYCLEANFILES accordingly. * lib/unicase/special-casing.c: Include "unicase/special-casing.h", not "special-casing.h". * lib/unicase/u*.c: Likewise. 2017-05-17 Bruno Haible README: Don't ask people to read a TeXinfo file. Reported by Tim Rühsen . * README: Tell people how to read the HTML formatted manual. 2017-05-16 Tim Rühsen parse-datetime: Fix memleak * lib/parse-datetime.y (parse_datetime2): Cleanup on localtime_rz() failure. 2017-05-16 Bruno Haible javacomp: Fix handle leak. Found by Coverity. * lib/javacomp.c (get_classfile_version): Close fd before returning. 2017-05-16 Bruno Haible relocate: Make it easier to reclaim allocated memory. * lib/relocatable.h (relocate2): New declaration/macro. * lib/relocatable.c (relocate2): New function. * doc/relocatable-maint.texi (Supporting Relocation): Mention the relocate2 function. * lib/localcharset.c (relocate2): Define fallback. (get_charset_aliases): Invoke relocate2 instead of relocate. Free the allocated memory. * lib/javaversion.c (relocate2): Define fallback. (javaexec_version): Invoke relocate2 instead of relocate. Free the allocated memory. 2017-05-16 Bruno Haible relocate: Simplify EMX specific code. * lib/relocatable.c (relocate): Assume pathname is non-NULL. Use ISSLASH macro consistently. Avoid dangerous string concatenation idiom. 2017-05-16 Bruno Haible sigpipe tests: Fix file list. * modules/sigpipe-tests (Files): Add tests/macros.h. 2017-05-16 Paul Eggert manywarnings: update for GCC 7 * build-aux/gcc-warning.spec: * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add GCC 7 warnings, notably -Wimplicit-fallthrough=5, which requires a non-comment fallthrough attribute. This is a bit cleaner than the comment versions. * lib/strftime.c, lib/dfa.c, lib/fnmatch.c, lib/mbrtowc.c: * lib/vasnprintf.c, tests/macros.h (FALLTHROUGH): New macro. Use it whenever one switch case falls through into the next. * lib/fnmatch_loop.c, tests/test-mbrtowc.c, tests/test-sigpipe.c: Use FALLTHROUGH macro. 2017-05-15 Bruno Haible gnulib-tool: Fix generated code when libtests contains module 'alloca'. * gnulib-tool (func_emit_tests_Makefile_am): For libtests.a, use @ALLOCA@, not @LTALLOCA@. 2017-05-15 Bruno Haible sys_select: Avoid "was expanded before it was required" warning. * modules/sys_select (configure.ac): Require, not invoke, gl_HEADER_SYS_SELECT. 2017-05-14 Paul Eggert gnulib-tool: improve GNU Make debugging * gnulib-tool (func_emit_lib_Makefile_am): Omit unnecessary echo. Report autoconf diagnostics when it fails, in the output makefile. 2017-05-14 Bruno Haible stat-time tests: Improve comment. * tests/test-stat-time.c: Add hyperlink, from Paul Eggert. 2017-05-14 Bruno Haible same-inode: Adapt for windows-stat-inodes. * lib/same-inode.h: Include . (SAME_INODE) [_GL_WINDOWS_STAT_INODES]: Define specifically. * modules/same-inode (Depends-on): Add sys_types. 2017-05-14 Bruno Haible windows-stat-inodes: New module. * m4/windows-stat-inodes.m4: New file. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Set WINDOWS_STAT_INODES. * modules/sys_types (Makefile.am): Substitute WINDOWS_STAT_INODES. * lib/sys_types.in.h [WINDOWS_STAT_INODES]: Override dev_t and ino_t. (_GL_WINDOWS_STAT_INODES): New macro. * lib/stat-w32.c: Set _WIN32_WINNT. Include , verify.h. (GetFileInformationByHandleExFunc): New variable. (initialize): Initialize it. (_gl_fstat_by_handle) [_GL_WINDOWS_STAT_INODES]: Initialize st_dev and st_ino appropriately. * lib/stat.c (rpl_stat): Use the directory entry based approach only as a fallback, because it does not provide st_dev and st_ino values. * modules/fstat (Depends-on): Add 'verify'. * modules/windows-stat-inodes: New file. * doc/windows-stat-inodes.texi: New file. * doc/gnulib.texi: Include it. * doc/posix-headers/sys_stat.texi: Mention the new module. 2017-05-14 Bruno Haible stat-time tests: Workaround for native Windows. * tests/test-stat-time.c: Include , . (filename_stamp1, filename_testfile, filename_stamp2, filename_stamp3): New variables. (initialize_filenames): New function. (main): Invoke it. (cleanup, prepare_test): Update. 2017-05-14 Bruno Haible stat-time: Adapt for windows-stat-timespec. * lib/stat-time.h (get_stat_birthtime) [_GL_WINDOWS_STAT_TIMESPEC]: Use entire st_ctim field. 2017-05-13 Jim Meyering maint.mk: update regex to reflect 2013 addition of "assume" to verify.h * top/maint.mk (sc_prohibit_verify_without_use): Don't reject a source file that uses the assume macro, claiming that verify.h is unused. 2017-05-13 Bruno Haible Use symbolic values for _WIN32_WINNT. * lib/ftruncate.c (_WIN32_WINNT): Use symbolic value _WIN32_WINNT_WIN2K. * lib/sethostname.c (_WIN32_WINNT): Likewise. 2017-05-13 Bruno Haible year2038: New module. * m4/year2038.m4: New file. * modules/year2038: New file. * doc/year2038.texi: New file. * doc/gnulib.texi: Include it. 2017-05-13 Bruno Haible largefile: Simplify. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Remove unused definition of _GL_WINDOWS_64_BIT_ST_SIZE. 2017-05-13 Bruno Haible largefile: Improve and document. * m4/largefile.m4 (gl_LARGEFILE): Set WINDOWS_64_BIT_ST_SIZE to 0 if the mingw headers already define 'stat' appropriately. * modules/largefile (Description): Clarify. * doc/largefile.texi: New file. * doc/gnulib.texi: Include it. * doc/posix-headers/sys_types.texi: Update. 2017-05-13 Bruno Haible truncate: New module. * lib/unistd.in.h (truncate): New declaration. * lib/truncate.c: New file. * m4/truncate.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether 'truncate' is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_TRUNCATE, HAVE_TRUNCATE, REPLACE_TRUNCATE. * modules/unistd (Makefile.am): Substitute GNULIB_TRUNCATE, HAVE_TRUNCATE, REPLACE_TRUNCATE. * modules/truncate: New file. * tests/test-unistd-c++.cc (truncate): Test signature. * doc/posix-functions/truncate.texi: Mention the new module. * tests/test-truncate.c: New file. * modules/truncate-tests: New file. 2017-05-13 Bruno Haible windows-stat-timespec: New module. * modules/windows-stat-timespec: New file. * m4/windows-stat-timespec.m4: New file. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Set WINDOWS_STAT_TIMESPEC. * modules/sys_stat (Makefile.am): Substitute WINDOWS_STAT_TIMESPEC. * lib/sys_stat.in.h (struct stat) [WINDOWS_STAT_TIMESPEC]: Declare with fields st_atim, st_mtim, st_ctim. (st_atime, st_mtime, st_ctime): Define as macros. (_GL_WINDOWS_STAT_TIMESPEC): New macro. * lib/stat-w32.h (_gl_convert_FILETIME_to_timespec) [_GL_WINDOWS_STAT_TIMESPEC]: New declaration. * lib/stat-w32.c (_gl_convert_FILETIME_to_timespec) [_GL_WINDOWS_STAT_TIMESPEC]: New function. (_gl_convert_FILETIME_to_POSIX): Adjust coding style. (_gl_fstat_by_handle): If _GL_WINDOWS_STAT_TIMESPEC, convert the FILETIME to 'struct timespec', not 'time_t'. * lib/stat.c (rpl_stat): If _GL_WINDOWS_STAT_TIMESPEC, convert the FILETIME to 'struct timespec', not 'time_t'. * lib/stat-time.h (STAT_TIMESPEC): Define also if _GL_WINDOWS_STAT_TIMESPEC. * doc/windows-stat-timespec.texi: New file. * doc/gnulib.texi: Include it. 2017-05-13 Bruno Haible windows-stat-override: New module. * lib/sys_stat.in.h (stat) [GNULIB_OVERRIDES_STRUCT_STAT]: Provide own definition. Define GNULIB_defined_struct_stat. (fstat, fstatat, lstat, stat) [GNULIB_OVERRIDES_STRUCT_STAT]: Provoke link error if this symbol is used and the corresponding module is not in use. (_stat64, _stat32i64, _stati64, _stat32, _stat64i32): Don't redefine if GNULIB_OVERRIDES_STRUCT_STAT. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_OVERRIDES_STRUCT_STAT. * modules/sys_stat (Makefile.am): Substitute GNULIB_OVERRIDES_STRUCT_STAT. * modules/windows-stat-override: New file. 2017-05-13 Bruno Haible fstat: Fix module dependency conditions. * modules/fstat (Depends-on): Fix typo. 2017-05-13 Bruno Haible stat, fstat: Complete removal of old native Windows code. * lib/stat.c: Remove old macrology for WINDOWS_NATIVE. * lib/fstat.c: Likewise. * lib/stat-w32.c: Likewise. 2017-05-13 Bruno Haible stat: Complete removal of REPLACE_FUNC_STAT_DIR code. * lib/stat.c: Remove all REPLACE_FUNC_STAT_DIR code. 2017-05-11 Paul Eggert getopt-posix: port to mingw * lib/getopt.c (flockfile, funlockfile): Define on mingw. Problem reported by Daniel P. Berrage in: http://lists.gnu.org/r/bug-gnulib/2017-05/msg00086.html 2017-05-11 Bruno Haible gettimeofday: Increase precision on mingw. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Require AC_CANONICAL_HOST. Set REPLACE_GETTIMEOFDAY to 1 on mingw. * lib/gettimeofday.c (gettimeofday): On native Windows, use the GetSystemTimePreciseAsFileTime based implementation always. * doc/posix-functions/gettimeofday.texi: Mention precision problem on mingw. 2017-05-11 Bruno Haible poll: Fix confusion between SOCKETs and FDs on native Windows. Fix proposed by Daniel P. Berrange . * lib/poll.c [WINDOWS_NATIVE]: Undefine select. 2017-05-11 Bruno Haible doc: Clarify doc about socket functions on native Windows. This reworks doc that was added on 2008-09-29. * doc/posix-functions/select.texi: Fix copy-and-paste mistake and use clearer wording. * doc/posix-functions/accept.texi: Use clearer wording. * doc/posix-functions/bind.texi: Likewise. * doc/posix-functions/connect.texi: Likewise. * doc/posix-functions/getpeername.texi: Likewise. * doc/posix-functions/getsockname.texi: Likewise. * doc/posix-functions/getsockopt.texi: Likewise. * doc/posix-functions/ioctl.texi: Likewise. * doc/posix-functions/listen.texi: Likewise. * doc/posix-functions/recv.texi: Likewise. * doc/posix-functions/recvfrom.texi: Likewise. * doc/posix-functions/send.texi: Likewise. * doc/posix-functions/sendto.texi: Likewise. * doc/posix-functions/setsockopt.texi: Likewise. * doc/posix-functions/shutdown.texi: Likewise. * doc/posix-functions/socket.texi: Likewise. 2017-05-10 Bruno Haible poll: Fix link error on native Windows. * lib/poll.c [WINDOWS_NATIVE]: Undefine recv. 2017-05-10 Bruno Haible time: Fix missing initialization of HAVE_TIMEZONE_T. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_TIMEZONE_T here... * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_DEFAULTS): ... not here. * m4/time_rz.m4 (gl_TIME_RZ): Require gl_HEADER_TIME_H_DEFAULTS, not gl_HEADER_SYS_TIME_H_DEFAULTS. * modules/time_rz (Depends-on): Add 'time'. Remove useless quoting. (configure.ac): Remove useless quoting. 2017-05-10 Bruno Haible Implement a way to opt out from MSVC support, part 2. * modules/msvc-inval (Include): Document recommended idiom. * modules/msvc-nothrow (Include): Likewise. Implement a way to opt out from MSVC support. This is useful for Emacs. * modules/msvc-nothrow (configure.ac): Invoke gl_MODULE_INDICATOR. * lib/accept4.c: Include as an alternative to msvc-nothrow.h. * lib/error.c: Likewise. * lib/fcntl.c: Likewise. * lib/flock.c: Likewise. * lib/fstat.c: Likewise. * lib/fsync.c: Likewise. * lib/ioctl.c: Likewise. * lib/isapipe.c: Likewise. * lib/lseek.c: Likewise. * lib/nonblocking.c: Likewise. * lib/poll.c: Likewise. * lib/select.c: Likewise. * lib/sockets.h: Likewise. * lib/sockets.c: Likewise. * lib/stdio-read.c: Likewise. * lib/stdio-write.c: Likewise. * lib/utimens.c: Likewise. * lib/w32sock.h: Likewise. * lib/w32spawn.h: Likewise. * tests/test-cloexec.c: Likewise. * tests/test-dup-safer.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-dup3.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-pipe.c: Likewise. * tests/test-pipe2.c: Likewise. * lib/ftruncate.c: Likewise. (chsize_nothrow): Renamed from chsize. * lib/msvc-nothrow.c: Don't include msvc-inval.h if HAVE_MSVC_INVALID_PARAMETER_HANDLER is not defined. * lib/close.c: Likewise. * lib/dup.c: Likewise. * lib/fclose.c: Likewise. * lib/raise.c: Likewise. * tests/test-fgetc.c: Likewise. * tests/test-fputc.c: Likewise. * tests/test-fread.c: Likewise. * tests/test-fwrite.c: Likewise. * lib/getdtablesize.c: Likewise. (_setmaxstdio_nothrow): Renamed from _setmaxstdio. * lib/isatty.c: Don't include msvc-inval.h if HAVE_MSVC_INVALID_PARAMETER_HANDLER is not defined. Include as an alternative to msvc-nothrow.h. * lib/read.c: Likewise. * lib/write.c: Likewise. * lib/dup2.c: Likewise. (dup2_nothrow): New function. (ms_windows_dup2): Use it. * m4/close.m4 (gl_FUNC_CLOSE): Invoke gl_MSVC_INVAL and test HAVE_MSVC_INVALID_PARAMETER_HANDLER only if gl_MSVC_INVAL is defined. * m4/dup.m4 (gl_FUNC_DUP): Likewise. * m4/fdopen.m4 (gl_FUNC_FDOPEN): Likewise. * m4/raise.m4 (gl_FUNC_RAISE): Likewise. * m4/read.m4 (gl_FUNC_READ): Likewise. * m4/write.m4 (gl_FUNC_WRITE): Likewise. * doc/windows-without-msvc.texi: New file. * doc/gnulib.texi (Native Windows Support without MSVC Support): New section. 2017-05-10 Bruno Haible wait-process: Adjust native Windows support. * lib/wait-process.c: Use the usual condition for recognizing a native Windows platform. 2017-05-10 Bruno Haible doc: New chapter "Native Windows Support". * doc/gnulib.texi (Native Windows Support): New chapter. * doc/windows-libtool.texi: Small wording changes. * doc/windows-sockets.texi: Small wording and formatting changes. 2017-05-10 Bruno Haible doc: Move section "Library version handling". * doc/gnulib.texi: Move section "Library version handling" from chapter "Miscellaneous Notes" to chapter "Particular Modules". 2017-05-10 Bruno Haible doc: Move section "Running self-tests under valgrind". * doc/gnulib.texi: Move section "Running self-tests under valgrind" from chapter "Particular Modules" to chapter "Miscellaneous Notes". 2017-05-10 Bruno Haible doc: New chapter "Build Infrastructure Modules". * doc/gnulib.texi (Build Infrastructure Modules): New chapter. 2017-05-10 Bruno Haible Prepare for reordering sections in the manual. * doc/gnulib.texi: Move several sections to separate files. Include these files. * doc/out-of-memory.texi: New file, extracted from doc/gnulib.texi. * doc/obsolete.texi: Likewise. * doc/extra-tests.texi: Likewise. * doc/transversal.texi: Likewise. * doc/namespace.texi: Likewise. * doc/check-version.texi: Likewise. * doc/windows-sockets.texi: Likewise. * doc/windows-libtool.texi: Likewise. * doc/licenses-texi.texi: Likewise. * doc/build-automation.texi: Likewise. * doc/c-locale.texi: Likewise. 2017-05-10 Bruno Haible Fix instructions how to update manual on www.gnu.org. * doc/README: Add -I option, so that texi2dvi finds texinfo.tex. 2017-05-09 Bruno Haible tzset: Expand comment about TZ problem on native Windows. * lib/tzset.c (tzset): Elaborate comment, based on explanations by Paul Eggert. * lib/ctime.c (rpl_ctime): Likewise. * lib/localtime.c (rpl_localtime): Likewise. * lib/mktime.c (mktime): Likewise. * lib/strftime-fixes.c (rpl_strftime): Likewise. * lib/wcsftime.c (rpl_wcsftime): Likewise. 2017-05-08 Paul Eggert intprops: don’t depend on ‘verify’ Problem reported by Ævar Arnfjörð Bjarmason in: http://lists.gnu.org/r/bug-gnulib/2017-05/msg00054.html * lib/intprops.h: Do not include verify.h, and move compile-time checks from here ... * tests/test-intprops.c (main): ... to here, if they’re not here already. Check widths of other standard integer types. * modules/intprops (Depends-on): Remove ‘verify’. 2017-05-07 Bruno Haible utimens: On native Windows, support 100ns resolution also if fd < 0. * lib/utime.in.h: Include . (_gl_utimens_windows): New declaration. * lib/utime.c (_gl_utimens_windows): New function, based on utime. (utime): Invoke it. * lib/utimens.c (fdutimens): On native Windows, call _gl_utimens_windows instead of utime. * modules/utime (Depends-on): Add 'time'. 2017-05-07 Bruno Haible utimens: Improve error code on native Windows. * lib/utimens.c (fdutimens): If fd was not opened with O_RDWR, fail with error code EACCES, not EINVAL. 2017-05-07 Bruno Haible utime: Handle more Windows error codes. * lib/utime.c (utime): Handle ERROR_BAD_NETPATH. Based on explanations by Billy O'Neal. 2017-05-05 Bruno Haible crypto/rijndael: Fix "strict-aliasing rules" warnings, alignment issues. * lib/rijndael-api-fst.c (rijndaelBlockEncrypt): Declare 'block' as a union. (rijndaelPadEncrypt, rijndaelBlockDecrypt): Likewise. (rijndaelPadDecrypt): Likewise. Use local variable 'iv' to cache the value of cipher->IV. 2017-05-05 Bruno Haible wctype-h-c++-tests: Update. * tests/test-wctype-h-c++.cc: Reorder to match lib/wchar.in.h. 2017-05-05 Bruno Haible wchar-c++-tests: Update. * tests/test-wchar-c++.cc (wcsftime): Declare, missing since 2017-04-30. 2017-05-05 Bruno Haible utime-h-c++-tests: New module. * tests/test-utime-h-c++.cc: New file. (utime): Declare, missing since 2017-04-30. * modules/utime-h-c++-tests: New file. 2017-05-05 Bruno Haible unistd-c++-tests: Update. * tests/test-unistd-c++.cc (isatty): Declare, missing since 2012-01-03. (read): Declare, missing since 2011-04-15. (sethostname): Declare, missing since 2011-12-03. 2017-05-05 Bruno Haible time-c++-tests: Update. * tests/test-time-c++.cc (tzset): Declare, missing since 2017-05-01. (localtime, gmtime): Declare, missing since 2017-04-30. (ctime): Declare, missing since 2017-04-30. (strftime): Declare, missing since 2017-04-30. (tzalloc, tzfree, localtime_rz, mktime_z): Declare, missing since 2015-07-24. 2017-05-05 Bruno Haible sys_resource-c++-tests: New module. * tests/test-sys_resource-c++.cc: New file. (getrusage): Declare, missing since 2012-04-13. * modules/sys_resource-c++-tests: New file. 2017-05-05 Bruno Haible strings-c++-tests: New module. * tests/test-strings-c++.cc: New file. (ffs): Declare, missing since 2011-07-12. * modules/strings-c++-tests: New file. 2017-05-05 Bruno Haible string-c++-tests: Update. * tests/test-string-c++.cc (ffsl): Declare, missing since 2011-07-15. (ffsll): Declare, missing since 2011-07-15. 2017-05-05 Bruno Haible stdlib-c++-tests: Update. * tests/test-stdlib-c++.cc (posix_openpt): Declare, missing since 2011-10-18. (ptsname_r): Declare, missing since 2011-11-07. (qsort_r): Declare, missing since 2014-08-29. (random, srandom, initstate, setstate): Declare, missing since 2012-01-14. (secure_getenv): Declare, missing since 2013-02-05. 2017-05-05 Bruno Haible stdio-c++-tests: Update. * tests/test-stdio-c++.cc (pclose): Declare, missing since 2011-09-18. 2017-05-05 Bruno Haible signal-h-c++-tests: Update. * tests/test-signal-h-c++.cc (raise): Remove redundant declaration. 2017-05-05 Bruno Haible math-c++-tests: Update. * tests/test-math-c++.cc (fmaf): Declare, missing since 2011-10-17. (fma): Declare, missing since 2011-10-17. (fmal): Declare, missing since 2011-10-17. 2017-05-05 Bruno Haible locale-c++-tests: Update. * tests/test-locale-c++.cc (localeconv): Declare, missing since 2012-03-25. 2017-05-05 Bruno Haible inttypes-c++-tests: New module. * tests/test-inttypes-c++.cc: New file. (strtoimax): Declare, missing since 2012-01-05. (strtoumax): Declare, missing since 2012-01-05. * modules/inttypes-c++-tests: New file. 2017-05-05 Bruno Haible dirent-c++-tests: Update. * tests/test-dirent-c++.cc (readdir): Declare, missing since 2011-09-13. (rewinddir): Declare, missing since 2011-09-13. (dirfd): Declare, missing since 2010-03-08. 2017-05-04 Bruno Haible argp: Fix mistake in 2017-04-23 commit. * lib/argp-help.c (__argp_failure): If GNULIB_STRERROR_R_POSIX is set, assume that strerror_r returns 'int', not 'char *'. 2017-05-04 Reuben Thomas argp: Fix typo. * lib/argp-help.c (argp_doc): Fix spelling mistake in comment. 2017-05-02 Paul Eggert utimens: port to Emacs + MS-Windows Skip the new MS-Windows-specific code if Emacs. * lib/utimens.c [EMACS_CONFIGUATION]: Avoid new MS-Windows-specific code. (USE_SETFILETIME): New macro. (fdutimens): Use it. 2017-05-01 Paul Eggert tzset: update doc for TZ problems on MS-Windows * doc/posix-functions/ctime.texi, doc/posix-functions/daylight.texi: * doc/posix-functions/localtime.texi, doc/posix-functions/mktime.texi: * doc/posix-functions/strftime.texi, doc/posix-functions/timezone.texi: * doc/posix-functions/tzname.texi, doc/posix-functions/tzset.texi: * doc/posix-functions/wcsftime.texi: Mention some issues with TZ under MS-Windows. 2017-05-01 Bruno Haible copy-file: Fix build error on mingw. * modules/copy-file (Depends-on): Add 'close'. 2017-05-01 Bruno Haible tzset: Work around TZ problem on native Windows. * m4/tzset.m4 (gl_FUNC_TZSET): Require AC_CANONICAL_HOST. On native Windows, set REPLACE_TZSET to 1. * lib/tzset.c (tzset): On native Windows, fix TZ if necessary, and invoke '_tzset' instead of 'tzset'. * doc/posix-functions/tzset.texi: Mention the native Windows workaround. * modules/time_rz (Depends-on): Add tzset. * lib/time_rz.c (tzset): Remove fallback definition. * m4/time_rz.m4 (gl_TIME_RZ): Don't test for tzset. 2017-05-01 Bruno Haible mktime: Fix dependencies. * modules/mktime (Depends-on): Add 'time'. 2017-05-01 Bruno Haible New module 'localtime-buffer', split off from module 'gettimeofday'. * lib/localtime-buffer.h: New file. * lib/localtime-buffer.c: New file, extracted from lib/gettimeofday.c. * lib/time.in.h (tzset): New declaration. (localtime, gmtime): Don't test GNULIB_GETTIMEOFDAY. * lib/tzset.c: New file, extracted from lib/gettimeofday.c. * lib/gettimeofday.c: Include localtime-buffer.h. Remove code that was moved to lib/localtime-buffer.c or lib/tzset.c. * m4/localtime-buffer.m4: New file. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_TZSET, HAVE_TZSET, REPLACE_TZSET. * m4/tzset.m4 (gl_FUNC_TZSET): Move code from m4/gettimeofday.m4 to here, with modifications. Set HAVE_TZSET, REPLACE_TZSET. Invoke gl_LOCALTIME_BUFFER_NEEDED. (gl_FUNC_TZSET_CLOBBER): Don't require gl_HEADER_SYS_TIME_H; not needed since 2007-01-18. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Remove code that deals with tzset. (gl_FUNC_GETTIMEOFDAY_CLOBBER): Require gl_LOCALTIME_BUFFER_DEFAULTS. Invoke gl_LOCALTIME_BUFFER_NEEDED instead of gl_GETTIMEOFDAY_REPLACE_LOCALTIME. (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Remove macro. * modules/localtime-buffer: New file. * modules/time (Depends-on): Remove 'gettimeofday'. (Makefile.am): Substitute GNULIB_TZSET, HAVE_TZSET, REPLACE_TZSET. Don't substitute GNULIB_GETTIMEOFDAY. * modules/tzset (Description): Enable hyperlink to POSIX spec. (Files): Add lib/tzset.c. (Depends-on): Remove gettimeofday. Add localtime-buffer, time. (configure.ac): Arrange to conditionally compile lib/tzset.c. Invoke gl_TIME_MODULE_INDICATOR. * modules/gettimeofday (Depends-on): Add localtime-buffer. 2017-05-01 Bruno Haible copy-file: Preserve sub-second time stamps. * lib/copy-file.c: Include stat-time.h, utimens.h instead of . (qcopy_file_preserving): Use 'struct timespec' and utimens() to transport the time stamps from the original file to the destination file. * m4/copy-file.m4 (gl_COPY_FILE): Don't test for utime, utimes. * modules/copy-file (Depends-on): Add stat-time, utimns instead of utime-h. 2017-05-01 Bruno Haible wctype-t: Fix problems if gets included after . * lib/wctype.in.h: Include not only but also . Do so also on MSVC. Reported by Eli Zaretskii . 2017-05-01 Bruno Haible wchar: Fix compilation error with the original mingw.org mingw. * lib/wchar.in.h (rpl_wint_t): If does not exist, include instead. * m4/wint_t.m4 (gl_TYPE_WINT_T_PREREQ): New macro, extracted from gl_WCTYPE_H. * m4/wctype_h.m4 (gl_WCTYPE_H): Don't set HAVE_CRTDEFS_H here; require gl_TYPE_WINT_T_PREREQ instead. * m4/wchar_h.m4 (gl_WCHAR_H): Require gl_TYPE_WINT_T_PREREQ. * modules/wchar (Makefile.am): Substitute HAVE_CRTDEFS_H. Reported by Eli Zaretskii . 2017-04-30 Bruno Haible utimecmp: Add support for native Windows. * lib/utimecmp.c (SYSCALL_RESOLUTION): Set to 100 on native Windows. 2017-04-30 Bruno Haible utimens: Add support for native Windows. * lib/utimens.c: Include , msvc-nothrow.h. (fdutimens): Provide a native Windows implementation, like utime.c with added tv_nsec support. * modules/utimens (Depends-on): Add msvc-nothrow, utime. Suggested by Tim Rühsen . 2017-04-30 Bruno Haible wcsftime: New module. * lib/wchar.in.h (wcsftime): New declaration. * lib/wcsftime.c: New file. * m4/wcsftime.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test for wcsftime declaration. (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_WCSFTIME, HAVE_WCSFTIME, REPLACE_WCSFTIME. * modules/wchar (Makefile.am): Substitute GNULIB_WCSFTIME, HAVE_WCSFTIME, REPLACE_WCSFTIME. * modules/wcsftime: New file. * doc/posix-functions/wcsftime.texi: Mention the new module. 2017-04-30 Bruno Haible strftime-fixes: New module. * lib/time.in.h (strftime): New declaration. * lib/strftime-fixes.c: New file. * m4/strftime.m4 (gl_FUNC_GNU_STRFTIME): Inline gl_FUNC_STRFTIME macro. (gl_FUNC_STRFTIME): Remove macro. * m4/strftime-fixes.m4: New file. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_STRFTIME, REPLACE_STRFTIME. * modules/time (Makefile.am): Substitute GNULIB_STRFTIME, REPLACE_STRFTIME. * modules/strftime-fixes: New file. * doc/posix-functions/strftime.texi: Mention the new module. 2017-04-30 Bruno Haible mktime: Work around TZ problem on native Windows. * lib/mktime.c: Add #ifs to make the algorithmic workaround independent from the native Windows workaround. * m4/mktime.m4 (gl_FUNC_MKTIME_WORKS): New macro, extracted from gl_FUNC_MKTIME. If guessing, set gl_cv_func_working_mktime to 'guessing no'. (gl_FUNC_MKTIME): Require it. Require AC_CANONICAL_HOST. Set REPLACE_MKTIME to 1 on native Windows. Define NEED_MKTIME_WORKING, NEED_MKTIME_WINDOWS. (gl_FUNC_MKTIME_INTERNAL): Require gl_FUNC_MKTIME_WORKS, not gl_FUNC_MKTIME. Set WANT_MKTIME_INTERNAL, not REPLACE_MKTIME. Define NEED_MKTIME_INTERNAL. * m4/timegm.m4 (gl_FUNC_TIMEGM): Require gl_FUNC_MKTIME_WORKS, not gl_FUNC_MKTIME. Cope with 'guessing yes' value. * modules/mktime-internal (configure.ac): Test WANT_MKTIME_INTERNAL, not REPLACE_MKTIME. * doc/posix-functions/mktime.texi: Mention the native Windows workaround. 2017-04-30 Bruno Haible localtime: New module. * lib/time.in.h (localtime): Declare also if requested by module 'localtime'. * lib/localtime.c: New file. * m4/localtime.m4: New file. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_LOCALTIME. * modules/time (Makefile.am): Substitute GNULIB_LOCALTIME. * modules/localtime: New file. * doc/posix-functions/localtime.texi: Mention the new module. 2017-04-30 Bruno Haible ctime: New module. * lib/time.in.h (ctime): New declaration. * lib/ctime.c: New file. * m4/ctime.m4: New file. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_CTIME, REPLACE_CTIME. * modules/time (Makefile.am): Substitute GNULIB_CTIME, REPLACE_CTIME. * modules/ctime: New file. * doc/posix-functions/ctime.texi: Mention the new module. 2017-04-30 Bruno Haible gettimeofday: Provide higher resolution on native Windows. * lib/gettimeofday.c: Don't include . (GetSystemTimePreciseAsFileTimeFuncType): New variable. (initialize): Initialize it. (gettimeofday) [WINDOWS_NATIVE]: Use it, and convert from FILETIME to 'struct timeval'. Don't use _ftime(). * m4/gettimeofday.m4 (gl_PREREQ_GETTIMEOFDAY): Don't test for and _ftime. 2017-04-30 Bruno Haible Document the problem with the Cygwin environment variable TZ. * doc/posix-functions/tzset.texi: Add note about TZ. * doc/posix-functions/ctime.texi: Likewise. * doc/posix-functions/localtime.texi: Likewise. * doc/posix-functions/mktime.texi: Likewise. * doc/posix-functions/strftime.texi: Likewise. * doc/posix-functions/wcsftime.texi: Likewise. * doc/pastposix-functions/ftime.texi: Likewise. 2017-04-30 Bruno Haible utime-tests: New module. * tests/test-utime.c: New file, based on tests/test-utimens.h. * tests/test-utimens-common.h: Include . * modules/utime-tests: New file. 2017-04-29 Bruno Haible utime: New module. * lib/utime.in.h: Add comment for snippets. (utime): New declaration. * lib/utime.c: New file. * m4/utime.m4: New file. * m4/utime_h.m4 (gl_UTIME_H): Test for utime declaration. (gl_UTIME_H_DEFAULTS): Initialize GNULIB_UTIME, HAVE_UTIME, REPLACE_UTIME. * modules/utime-h (Depends-on): Add snippets. (Makefile.am): Substitute GNULIB_UTIME, HAVE_UTIME, REPLACE_UTIME. Insert snippets. * modules/utime: New file. * doc/posix-functions/utime.texi: Mention the new module. 2017-04-29 Bruno Haible utime-h: Modernize handling of 'struct utimbuf'. * lib/utime.in.h: Include next if it exists. (utimbuf): Define to _utimbuf on native Windows. * m4/utime_h.m4 (gl_UTIME_H): Check for prerequisites of include_next. Set UTIME_H on native Windows. (gl_UTIME_MODULE_INDICATOR, gl_HEADER_UTIME_H_DEFAULTS): New macros. * modules/utime-h (Depends-on): Add include_next. (Makefile.am): Substitute also HAVE_UTIME_H, INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, PRAGMA_COLUMNS, NEXT_UTIME_H. * lib/utimens.c (utimbuf): Remove fallback definition. * m4/utimens.m4 (gl_UTIMENS): Don't require gl_CHECK_TYPE_STRUCT_UTIMBUF. * m4/utimbuf.m4: Remove file. * modules/utimens (Files): Remove m4/utimbuf.m4. 2017-04-29 Bruno Haible Make use of module 'utime-h'. * modules/copy-file (Depends-on): Add utime-h. * lib/copy-file.c: Assume that exists. * m4/copy-file.m4 (gl_COPY_FILE): Don't test for . * modules/utimens (Depends-on): Add utime-h. * lib/utimens.c: Assume that exists. 2017-04-29 Bruno Haible utime-h: New module. * m4/utime_h.m4: New file. * lib/utime.in.h: New file. * modules/utime-h: New file. * doc/posix-headers/utime.texi: Mention the new module. * tests/test-utime-h.c: New file. * modules/utime-h-tests: New file. 2017-04-30 Bruno Haible Fix a few typos. * m4/fstat.m4 (gl_FUNC_FSTAT): Require AC_CANONICAL_HOST. * m4/stat.m4 (gl_FUNC_STAT): Fix comment. * doc/posix-functions/fstat.texi: Fix a plural typo. * doc/posix-functions/stat.texi: Likewise. * m4/include_next.m4: Update comments. 2017-04-29 Bruno Haible error: Fix mistake in 2017-04-23 commit. * lib/error.c (print_errno_message): If GNULIB_STRERROR_R_POSIX is set, assume that strerror_r returns 'int', not 'char *'. 2017-04-29 Bruno Haible stat: Fix time_t values and other problems on native Windows platforms. * doc/posix-functions/stat.texi: Mention the problem with the Microsoft implementations of stat(). * lib/stat.c: Include filename.h instead of dosname.h. Include malloca.h, stat-w32.h. (is_unc_root): New function. (rpl_stat): New implementation for native Windows. Remove REPLACE_FUNC_STAT_DIR code. * m4/stat.m4 (gl_FUNC_STAT): On native Windows, set REPLACE_STAT always. Don't define REPLACE_FUNC_STAT_DIR. (gl_PREREQ_STAT): Require gl_HEADER_SYS_STAT_H. * modules/stat (Files): Add lib/stat-w32.h, lib/stat-w32.c. (Depends-on): Remove dosname. Add filename, malloca. (configure.ac): Also compile lib/stat-w32.c. 2017-04-29 Bruno Haible fstat: Fix time_t values on native Windows platforms. * doc/posix-functions/fstat.texi: Mention the problem with st_*time. * lib/stat-w32.h: New file. * lib/stat-w32.c: New file. * lib/fstat.c: Don't include msvc-inval.h. Include msvc-nothrow.h, stat-w32.h instead. (fstat_nothrow): Remove function. (rpl_fstat): Implement by means of _gl_fstat_by_handle. * m4/fstat.m4 (gl_FUNC_FSTAT): On native Windows, set REPLACE_FSTAT always. (gl_PREREQ_FSTAT): Require gl_HEADER_SYS_STAT_H. * modules/fstat (Files): Add lib/stat-w32.h, lib/stat-w32.c. (Depends-on): Remove msvc-inval. Add pathmax, msvc-nothrow. (configure.ac): Also compile lib/stat-w32.c. 2017-04-29 Paul Eggert getopt: port to Solaris 10 with circa-1997 glibc getopt.h Problem reported by Assaf Gordon and Gavin Smith in: http://lists.gnu.org/r/bug-gnulib/2017-04/msg00157.html * lib/getopt-pfx-ext.h (_getopt_internal) [__GETOPT_PREFIX]: #define this, too. 2017-04-29 Bruno Haible strerror_r-posix: Fixes for MSVC 14. * lib/strerror_r.c: Include . (strerror_r): Provide error messages for errno values 100...140. * doc/posix-functions/strerror_r.texi: Mention the MSVC 14 problem. 2017-04-28 Bruno Haible noreturn: New module. * lib/noreturn.h: New file. * modules/noreturn: New file. * tests/test-noreturn.c: New file. * modules/noreturn-tests: New file. * tests/test-noreturn-c++.cc: New file. * modules/noreturn-c++-tests: New file. 2017-04-27 Bruno Haible wctype-h: Fix compilation error with the original mingw.org mingw. * m4/wctype_h.m4 (gl_WCTYPE_H): Test for . Set HAVE_CRTDEFS_H. * modules/wctype-h (Makefile.am): Substitute HAVE_CRTDEFS_H. * lib/wctype.in.h (rpl_wint_t): If does not exist, include instead. Reported and proposed by Eli Zaretskii . 2017-04-26 Pádraig Brady nap.h: Fix compilation on non windows platforms * tests/nap.h: Move misplaced endif. 2017-04-26 Pádraig Brady and Paul Eggert time_rz: fix heap buffer overflow vulnerability Reported and analyzed at https://bugzilla.redhat.com/CVE-2017-7476 * lib/time_rz.c (save_abbr): Rearrange the calculation determining whether there is enough buffer space available, thus avoiding the problematic promotion of signed to unsigned causing an invalid comparison when zone_copy is more than ABBR_SIZE_MIN bytes beyond the start of the buffer. * tests/test-parse-datetime.c (main): Add a test case written by Paul Eggert, which overwrites enough of the heap so that standard glibc will fail with "free(): invalid pointer" without the patch applied. 2017-04-26 Paul Eggert xalloc: add missing integer overflow check * lib/xalloc.h (x2nrealloc): Also check for multiplication overflow when P is null. 2017-04-25 Paul Eggert parse-datetime: make it standalone * lib/parse-datetime.y: Include , for va_start etc. (_GL_ATTRIBUTE_FORMAT): New macro. These are needed to get './gnulib-tool --test parse-datetime' to work. 2017-04-23 Bruno Haible nap.h: Port to native Windows. * tests/nap.h (nap_get_stat): Renamed from get_stat. Remove argument fd; use nap_fd instead. On native Windows, close and reopen nap_fd. (nap_works): Don't compare the ctimes, because on native Windows, these are the creation times. (nap): Update. 2017-04-23 Bruno Haible nap.h: Fix logic. * tests/nap.h (nap): Avoid signed integer overflow in loop. 2017-04-23 Bruno Haible Fix conflict between strerror_r-posix module and AC_FUNC_STRERROR_R. * modules/strerror_r-posix (configure.ac): Invoke gl_MODULE_INDICATOR. * lib/error.c: Test GNULIB_STRERROR_R_POSIX before testing HAVE_DECL_STRERROR_R, HAVE_STRERROR_R, or STRERROR_R_CHAR_P. * lib/argp-help.c (__argp_failure): Likewise. 2017-04-23 Bruno Haible strerror_r-posix: Revert commits from 2016-10-16,2016-11-04,2016-11-14. * m4/strerror_r.m4: Revert changes since 2016-10-16. * lib/strerror_r.c: Likewise. 2017-04-23 Paul Eggert Target a C99 subset, not a C89 subset For many years Gnulib has targeted C89 and has resisted using C99 features, as some Gnulib-using programs still wanted to target C89. As this no longer seems to be the case, relax the porting requirements to allow some C99 features. This is merely a change to the documentation, to give other Gnulib developers a chance to weigh in on the topic. * doc/extern-inline.texi (extern inline): * doc/gnulib-readme.texi (Portability guidelines): * doc/gnulib-tool.texi (Initial import): * doc/gnulib.texi (Header files): Modernize to talk about C99 and C11 instead of C89 and C99. * doc/gnulib-readme.texi (Portability guidelines): Now a section, not merely a subsection, so that it can be split up. Modernize a bit. (C language versions, C99 features assumed) (C99 features avoided): New sections. 2017-04-23 Bruno Haible doc: New section "Modules that modify the way other modules work". * doc/gnulib.texi (Modules that modify the way other modules work): New section. 2017-04-23 Bruno Haible stat-time: Update comments. * lib/stat-time.h: Fix reference regarding st_ctime on Windows. * tests/test-utimens-common.h: Add reference regarding st_ctime on Windows. 2017-04-01 Bruno Haible glob: Fix more memory leaks. * lib/glob.c (glob): Free allocated memory before returning. Reported by Coverity via Tim Rühsen. 2017-04-22 Paul Eggert poll: improve fast check for out-of-range NFD * lib/poll.c: Do not include intprops.h. (poll): Compare NFD to INT_MAX, not to TYPE_MAXIMUM (nfds_t) / 2. * modules/poll (Depends-on): Remove intprops. ftoastr: cite a newer paper * lib/ftoastr.c (FTOASTR): In comment, cite Andrysco et al. 2016 instead of Loitsch 2010. 2017-04-22 Bruno Haible poll: Enable argument check also in the Windows implementation. * lib/poll.c (poll) [WINDOWS_NATIVE]: Check value of nfd correctly. Reported by Paul Eggert. 2017-04-22 Bruno Haible getlogin_r: Work around bug in Mac OS X 10.12. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Test also against the Mac OS X bug. * lib/getlogin_r.c (getlogin_r): When getlogin_r returns a string of the given size minus 1, call getlogin_r a second time, on a larger buffer. * modules/getlogin_r (Depends-on): Add malloca. * doc/posix-functions/getlogin_r.texi: Mention the Mac OS X bug. 2017-04-22 Paul Eggert parse-datetime: fix %z and prefer signed int %z problem reported by Pádraig Brady in: http://lists.gnu.org/r/bug-gnulib/2017-04/msg00103.html While fixing it, I decided to prefer signed ints to size_t, as they are less error-prone (e.g., ubsan catches overflow). * lib/parse-datetime.y (textint, parser_control, lookup_word, yylex) (parse_datetime2): Prefer ptrdiff_t to size_t for sizes and object counts, since signed integers make for better debugging. (date): Don’t assume %z works in printf formats. (debug_strfdatetime, debug_strfdate, debug_strftime): Use int for sizes of buffers known to be small, e.g., because we’re using snprintf. (parse_datetime2): Simplify call to debug_mktime_not_ok. 2017-04-22 Bruno Haible *printf: Work around rounding bug on Mac OS X. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Test for Mac OS X 10.12 bug. * doc/posix-functions/*printf.texi: Mention the rounding bugs of Mac OS X and FreeBSD. * doc/glibc-functions/*printf.texi: Likewise. 2017-04-22 Bruno Haible vasnprintf tests: Avoid warnings. * tests/test-vasnprintf-posix3.c (test_function, my_asnprintf, test_vasnprintf, test_asnprintf): Don't define if there's nothing to test. 2017-04-22 Bruno Haible sys_file tests: Avoid warning. * tests/test-sys_file.c (main): Add a default clause to the switch statement. 2017-04-22 Bruno Haible sethostname: Update doc. * doc/glibc-functions/sethostname.texi: Mention differing prototype on Mac OS X. 2017-04-22 Bruno Haible quotearg tests: Avoid warnings. * tests/test-quotearg.c: Don't include test-quotearg.h if ENABLE_NLS is false. 2017-04-22 Bruno Haible poll: Enable argument check. * lib/poll.c: Include intprops.h. (poll): Check value of nfd correctly. * modules/poll (Depends-on): Add intprops. 2017-04-22 Bruno Haible get-rusage-data: Avoid warnings on Mac OS X. * lib/get-rusage-data.c: On Mac OS X, don't define get_rusage_data_via_setrlimit nor get_rusage_data_via_iterator. (get_rusage_data) [Mac OS X]: Just return 0. 2017-04-22 Bruno Haible xbinary-io: Fix build error. * modules/xbinary-io (Depends-on): Add gettext-h. * lib/xbinary-io.c: Include gettext.h and define _(). Reported by Gisle Vanem in . 2017-04-22 Paul Eggert parse-datetime: overflow and debug cleanups This long patch was triggered by this bug report from Ruediger Meier: http://lists.gnu.org/r/bug-gnulib/2017-04/msg00028.html I fixed the bug he noted, then found some others nearby, and then still others. Oh my goodness, there were a lot of bugs. I cleaned up some of the code to follow GNU standards while I was at it. * lib/parse-datetime.y (ISDIGIT): Remove; all callers changed to use c_isdigit. (EPOCH_YEAR): Remove; unused. (TM_YEAR_BASE): Now an enum rather than a macro. (HOUR, debug_strfdatetime): Multiply hour by 3600, not 60, to get time zone offset, since timezones now are in terms of seconds and not minutes. (long_time_t): Remove. All uses replaced by time_t or intmax_t as appropriate. Verify that intmax_t is wide enough. (time_overflow, time_zone_str): New functions, used to deal more reliably with overflow. (dbg_printf): Add printf attribute, to help catch integer width errors. (textint, relative_time, parser_control, time_zone_hhmm, set_hhmmss) (%union, to_hour, yylex, parse_datetime2): Use intmax_t instead of long int and/or long_time_t. All uses changed. (DBGBUFSIZE): Move earlier. (relative_time, set_hhmmss, parser_control): Just use int for nanoseconds and for time zones; that’s wide enough. (parser_control): Use bool for members like year_seen that can be booleans instead of counters. All uses changed. Remove debug_default_input_timezone; no longer needed. All uses removed. (apply_relative_time): Return a bool overflow flag. All uses changed to check for overflow. (apply_relative_time, zone, date, relunit, relunit_snumber) (signed_seconds, unsigned_seconds, yylex, parse_datetime2): Check for integer overflow portably. (str_days): Use just int for N, as it’s wide enough. Prefer 2D char arrays to arrays of char * when it looks like 2D is a win on typical platforms. Prefer snprintf to strncpy/strncat, for simplicity; all buffers are smaller than INT_MAX so this is safe. (TIME_ZONE_BUFSiZE, TM_YEAR_BUFSIZE): New constants. (debug_print_current_time): Don’t assume tv_nsec is of type long, as this is not true on x32. Output "." before any nanoseconds. (debug_print_current_time, parse_datetime2): Output local zones using a more-consistent format. (debug_print_current_time, date, parse_datetime2): (main) [TEST]: Don’t assume time_t is the same width as long. (print_rel_part): New function, replacing ... (PRINT_REL_PART): ... this macro, which was removed. All uses changed. (debug_print_relative_time): Use bool for boolean. (local_zone): dsts_seen now counts only tDST instances. (date): Fix printf of size_t to use %z. Do not assume numeric tokens have negative values merely because the context suggests a syntax with "-" separating tokens. (time_zone_hhmm): Return bool success indicator, which checks for overflow. Store result into PC->time_zone instead. All callers changed. (tm_year_str): New function. Return a bool success indicator and store the result into a buffer. All callers changed. Output the numerically correct string even if adding 1900 to the year would overflow. (to_tm_year): New function, replacing the old to_year. All callers changed. (tm_diff): Sync with glibc. (lookup_word): Use to_uchar instead of doing it by hand. (TZBUFSIZE): Now local to the only function that needs it. (debug_strfdatetime): Simplify now that time zones are int seconds. (debug_strfdate): Work even if tm_year + 1900 would overflow. (get_effective_timezone): Remove. All uses removed. (parse_datetime2): Use fprintf in pieces instead of snprintfing to a fixed-size buffer. Don’t assume that gmtime succeeds iff localtime succeeds. Use tm_gmtoff if available. Simplify how ‘goto fail;’ works in conjunction with the ‘ok’ flag. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): Don’t define TIME_T_FITS_IN_LONG_INT, as it is no longer needed. * modules/parse-datetime (Depends-on): Add inttypes. 2017-04-21 Bruno Haible gettext-h: Avoid -Wundef warning. * lib/gettext.h: Test the value of ENABLE_NLS only if it is defined. Reported by Tim Rühsen in . 2017-04-05 Tim Rühsen error: Avoid "function declaration isn't a prototype" warning. * lib/error.c (strerror_r): Turn K&R C prototype to an ANSI C prototype. 2017-04-21 Bruno Haible vasnprintf: Fix for MSVC 14. * lib/vasnprintf.c (USE_MSVC__SNPRINTF): New macro. Everywhere, use !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF instead of !HAVE_SNPRINTF_RETVAL_C99. 2017-04-21 Bruno Haible mbrtowc tests: Fix test failures on MSVC 14. * tests/test-mbrtowc-w32.c (test_one_locale): Accept MSVC's conversion behaviour for invalid input. 2017-04-21 Bruno Haible mbsinit: Fix for MSVC 14. * lib/mbsinit.c (mbsinit): If GNULIB_defined_mbstate_t, provide an implementation that is in sync with mbrtowc.c. On other platforms, use an adequate ad-hoc implementation. 2017-04-21 Bruno Haible Fix test-mbrtowc5.sh failure on native Windows. * lib/setlocale.c (setlocale_unixlike): Accept "POSIX" as an alias for "C". 2017-04-21 Bruno Haible Avoid accidental use of native Windows APIs on Cygwin. * lib/getaddrinfo.c (WINDOWS_NATIVE): Don't define on Cygwin. * lib/localcharset.c (WINDOWS_NATIVE): Likewise. * lib/localename.c (WINDOWS_NATIVE): Likewise. 2017-04-20 Bruno Haible Remove red warnings from the generated MODULES.html. * modules/fcntl (Description): Disambiguate function references. * modules/getcwd-lgpl (Description): Likewise. * modules/hostent (Description): Likewise. * modules/servent (Description): Likewise. * modules/tempname (Description): Likewise. 2017-04-20 Bruno Haible verify tests: Fix spurious failure with parallel make. * gnulib-tool (func_emit_tests_Makefile_am): Emit initialization of EXTRA_PROGRAMS. * tests/test-verify.sh: Build test-verify-try.o, not test-verify.o. * tests/test-verify-try.c: New file. * modules/verify-tests (Files): Add it. (EXTRA_PROGRAMS): Add test-verify-try. (MOSTLYCLEANFILES): Update accordingly. Reported by Adam James Stewart . 2017-04-18 Bruno Haible vma-iter: Fix compilation error on Solaris 7. * lib/vma-iter.c (vma_iterate): Treat missing MAP_ANONYMOUS on Solaris like on IRIX, OSF/1. Reported by Tom G. Christensen . 2017-04-18 Bruno Haible vma-iter: Fix conflict with module 'largefile' on 32-bit Solaris 9. * modules/vma-iter (configure.ac): Test whether can be included. * lib/vma-iter.c: On Solaris, test HAVE_SYS_PROCFS_H before including . * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Don't define on Solaris when cannot be included. Reported by Tom G. Christensen . 2017-04-18 Bruno Haible getopt-gnu: Add comments. * m4/getopt.m4 (gl_FUNC_GETOPT_GNU): Add comments. * modules/getopt-gnu (configure.ac): Likewise. 2017-04-16 Paul Eggert regex: port better to Solaris 10 Solaris 10 includes , which #defines gettext, and this causes a double #define. Problem reported by Gavin Smith in: http://lists.gnu.org/r/bug-gnulib/2017-04/msg00056.html * lib/regex_internal.h (gettext): #undef before #defining. 2017-04-15 Paul Eggert intprops: improve comments * lib/intprops.h: Improve and shorten commentary. For the record, if we ever run into a pedantic compiler that behaves differently from GCC when converting an out-of-range value to a signed integer, we can work around the problem with something like the following code, where UCT is the signed counterpart of T (UCT is sometimes narrower than UT) and all callers are changed accordingly: #if __SUNPRO_C <= 0x5120 # define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, uct, ut, t) \ ((t) ((ut) (a) op (ut) (b))) #else # define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, uct, ut, t) \ (TYPE_MINIMUM (t) <= (uct) ((ut) (a) op (ut) (b)) \ ? ((t) (uct) (((ut) (a) op (ut) (b)) - TYPE_MINIMUM (t)) \ + TYPE_MINIMUM (t)) \ : (t) (uct) ((ut) (a) op (ut) (b))) #endif 2017-04-14 Paul Eggert intprops: try to avoid tickling similar bugs * lib/intprops.h (_GL_INT_OP_CALC): Document that UT no longer needs to be the same width as T; it can be wider. Change callers so that UT is at least as wide as unsigned int, as I suspect that this is less likely to run into compiler bugs. intprops: port to Oracle Studio 12.3 x86 Problem reported by Gavin Smith in: http://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html * lib/intprops.h (_GL_INT_OP_WRAPV_VIA_UNSIGNED): Convert unsigned to signed via the usual rather than the standard way, to avoid a compiler bug in Oracle Studio 12.3 x86. 2017-04-08 Paul Eggert getopt: prefer - to _ in new file names * lib/getopt-cdefs.in.h: Rename from lib/getopt_cdefs.in.h. * lib/getopt-core.h: Rename from lib/getopt_core.h. * lib/getopt-ext.h: Rename from lib/getopt_ext.h. * lib/getopt-pfx-core.h: Rename from lib/getopt_pfx_core.h. * lib/getopt-pfx-ext.h: Rename from lib/getopt_pfx_ext.h. All uses changed. getopt: port recent getopt changes to macOS Problem reported by Harald Maier (Bug#26398). The macOS C compiler uses __nonnull for its own purposes and that clashes with glibc's __nonnull. * lib/getopt.in.h: Add comment for _GL_ARG_NONNULL snippet. * lib/getopt_cdefs.in.h (__nonnull): Remove. * lib/getopt_core.h (getopt): * lib/getopt_ext.h (getopt_long, getopt_long_only): Use _GL_ARG_NONNULL, not __nonnull. * lib/unistd.in.h: Move snippet hooks to before where the getopt .h files are included, so that _GL_ARG_NONNULL is defined in time. * modules/getopt-posix (Depends-on): Add snippet/arg-nonnull. (getopt.h): Interpolate _GL_ARG_NONNULL snippet. 2017-04-06 Paul Eggert getopt-gnu: omit some duplicate code * m4/getopt.m4 (gl_FUNC_GETOPT_GNU): Don’t require gl_FUNC_GETOPT_POSIX, as the configure.ac code generated by gnulib-tool already does this. * modules/getopt-gnu (configure.ac): Omit code duplicated from getopt-posix, which we depend on. getopt-posix: use angle-bracket include * lib/getopt1.c: Include , not "config.h". 2017-04-06 Zack Weinberg getopt: annotate files with relationship to glibc As the final act in this patchset, adjust the message at the top of each file to indicate which files are synced with glibc. (This has already been done for most of the headers.) * lib/getopt.c, lib/getopt1.c, lib/getopt_int.h: Mention in top-of-file boilerplate that these files are shared between glibc and gnulib. getopt: split up getopt.in.h and eliminate __need_getopt Over in glibc, all of the __need macros are being phased out in favor of small headers that declare only the necessary components, as this is much simpler and less prone to bugs. As getopt is shared with glibc, gnulib needs to do the same for __need_getopt. __need_getopt is misnamed; what it really means is "we want only the getopt features specified in POSIX, not the GNU extensions". glibc placed the "meat" of getopt.h into getopt_core.h and getopt_ext.h; these files can be shared verbatim with gnulib. The portability wrapper, on the other hand, they have renounced altogether; glibc's getopt.h will no longer be shared with gnulib at all. In exchange, certain glibc-specific quirks (having to do with __posix_getopt) no longer need appear in gnulib's headers at all. This patch merges getopt_core.h and getopt_ext.h from glibc, and splits up the current gnulib-side portability wrapper into three additional headers: getopt_pfx_core.h and getopt_pfx_ext.h handle __GETOPT_PREFIX for their respective headers, getopt_cdefs.in.h handles things like __BEGIN_DECLS and __THROW, and getopt.in.h and unistd.in.h just use them. All new files are clearly marked with whether they are shared with glibc. * lib/getopt.in.h: Eliminate __need_getopt. Break up into ... * lib/getopt_core.h, lib/getopt_ext.h: ... these new files shared with glibc, and ... * lib/getopt_cdefs.in.h, lib/getopt_pfx_core.h * lib/getopt_pfx_ext.h: ... these new files not shared with glibc. * lib/unistd.in.h: Include getopt_cdefs.h and getopt_pfx_core.h, instead of defining __need_getopt and including the full getopt.h. * m4/getopt.m4 (gl_GETOPT_SUBSTITUTE_HEADER): Check for sys/cdefs.h. Define substitution variables GETOPT_CDEFS_H and HAVE_SYS_CDEFS_H. * modules/getopt-posix (Files): Add new headers and sort list. (Depends-on): No longer need snippet/arg-nonnull. (Makefile.am): Generate getopt_cdefs.h. getopt: better handling of ambiguous options glibc's getopt uses alloca to construct a linked list of possibilities for an "ambiguous" long option. In gnulib, malloc should be used instead. Providing for both cases complicates things a fair bit. This patch rewrites ambiguous-option handling to use a boolean vector instead of a linked list. There is then only one allocation that might need freeing; in glibc it can honor __libc_use_alloca as usual, and in gnulib we define __libc_use_alloca to always be false, so we don't need ifdefs in the middle of the function. This should also be slightly more efficient in the normal case of long options being fully spelled out -- I think most people aren't even aware they _can_ sometimes abbreviate long options. One interesting consequence is that the list of possibilities is now printed in exactly the order they appear in the list of long options, instead of the first possibility being shuffled to the end. (The patch looks bigger than it really is because there's a fair bit of reindentation and code rearrangement.) * lib/getopt.c: When used standalone, define __libc_use_alloca as always false and alloca to abort if called. (process_long_option): Rewrite handling of ambiguous long options to use a single boolean vector, not a linked list; use __libc_use_alloca to decide whether to allocate this using alloca. getopt: refactor long-option handling There were two copies of the bulk of the code to handle long options. Now there is only one. This change temporarily removes the logic to avoid using alloca when standalone; the next patch in the series will restore it. * lib/getopt.c (process_long_option): New function split out from _getopt_internal_r. (_getopt_internal_r): Replace both copies of the long-option processing code with calls to process_long_option. getopt: tidy up _getopt_initialize a bit _getopt_data.__posixly_correct is completely redundant to _getopt_data.__ordering, and some work that logically belongs in _getopt_initialize was being done by _getopt_internal_r, making the code harder to understand. As a side effect, getenv will no longer be called if the first character of the options string is '+' or '-', which is probably a Good Thing. (Perhaps we should have a flag character that specifically asks for the permutation behavior?) * lib/getopt_int.h (_getopt_data): Remove __posixly_correct field. * lib/getopt.c (_getopt_internal_r): Move some initialization code... (_getopt_initialize): ...here. Don't set d->__posixly_correct. getopt: merge from glibc: repetition reduction The definitions of the entry point functions 'getopt' and '__posix_getopt' can be made substantially less repetitive with a helper macro. While I was merging the const-correctness changes from gnulib into glibc I noticed there are still some unnecessary casts in _getopt_internal_r. * lib/getopt.c (getopt, __posix_getopt): Eliminate repetition with a macro. Consistently cast 'argv' to 'char **' when calling _getopt_internal. (_getopt_internal_r): Remove unnecessary casts when calling exchange. getopt: clean up error reporting getopt can print a whole bunch of error messages, and when used standalone (from gnulib) it uses fprintf to do that. But fprintf is a cancellation point and getopt isn't, and also applying fprintf to a stream in wide-character mode is not allowed. So every single error reporting case has an #ifdef _LIBC block in which it calls internal libc functions instead. The counterpart patch series in glibc makes it possible to simplify all of that down to a set of #defines at the top of the file; core code is written as if it is safe to just call fprintf, flockfile, and funlockfile. (One caveat: it's *not* safe to call any *other* stdio functions.) * lib/getopt.c: When _LIBC is defined, define fprintf to __fxprintf_nocancel, flockfile to _IO_flockfile, and funlockfile to _IO_funlockfile. When neither _LIBC nor _POSIX_THREAD_SAFE_FUNCTIONS is defined, define flockfile and funlockfile as no-ops. (_getopt_internal_r): Remove all internal #ifdef _LIBC blocks; the standalone error-printing code can now be used for libc as well. Add an flockfile/funlockfile pair around one case where the error message is printed in several chunks. Don't use fputc. getopt: fix fencepost error in ambiguous-W-option handling getopt_long contains an undocumented (AFAICT) feature in which, if you put "W;" in the short-options list, then '-W foo' and '-Wfoo' are treated as equivalent to '--foo'. This is implemented with a partial second copy of the code for handling long options, and that code increments optind one too many times when recovering from an ambiguous abbreviated option, which can cause the main loop to walk past the end of argv and crash. I discovered this while writing a test case that tries to exercise all of getopt's error reporting paths; I wouldn't be surprised to learn that this feature is never used by real applications. * lib/getopt.c (_getopt_internal_r): Don't increment d->optind a second time when reporting ambiguous -W options. getopt: clean up getopt.c and getopt1.c file headers In getopt.c, there is no need to include wchar.h at all, and it is safe nowadays to assume that stdlib.h does declare getenv (several other gnulib modules make this assumption). In getopt1.c, the #ifdef _LIBC block at the top can be simplified by using "" inclusions consistently, and there is no actual need to include stdlib.h (except in the #ifdef TEST block, where it should be unconditional), nor to provide a backup definition of NULL at all. * lib/getopt1.c: Simplify #ifdeffage at top of file. Move inclusion of stdlib.h to #ifdef TEST block and make unconditional. Do not define NULL. * lib/getopt.c: Don't include wchar.h. No need to declare getenv. * m4/getopt.m4 (gl_PREREQ_GETENV): Delete. * modules/getopt-gnu, modules/getopt-posix: Don't call gl_PREREQ_GETENV. getopt: harmonize comments with glibc The comments explaining how the behavior of 'getopt' varies depending on whether it's the standalone version and whether there are special characters at the beginning of the options string were inconsistent between gnulib and glibc, and also out of sync with the code. * lib/getopt.c, lib/getopt_int.h: Harmonize comments with glibc. getopt: remove USE_NONOPTION_FLAGS getopt includes code to parse an environment variable named _XXX_GNU_nonoption_argv_flags_ (where XXX is the current process's PID in decimal); but all of it has been #ifdefed out since 2001, with no official way to turn it back on. According to commentary in glibc's config.h.in, bash version 2.0 set this environment variable to indicate argv elements that were the result of glob expansion and therefore should not be treated as options, but the feature was "disabled later" because "it caused problems". According to bash's CHANGES file, "later" was release 2.01; it gives no more detail about what the problems were. Version 2.0 of bash was released on the last day of 1996, and version 2.01 in June of 1997. Twenty years later, I think it is safe to assume that this environment variable isn't coming back. * lib/getopt_int.h: Remove all #ifdef USE_NONOPTION_FLAGS blocks. * lib/getopt.c: Likewise. Also remove SWAP_FLAGS and the __libc_argc and __libc_argv externs, which were only used by #ifdef USE_NONOPTION_FLAGS blocks. getopt: tabify, in preparation for merge with glibc glibc sticks to the GNU default of indenting with a mix of 8-column tabs and spaces; make the gnulib copy match. getopt.h is not included because it is *not* going to be merged in its present form. * getopt.c, getopt1.c, getopt_int.h: Tabify. 2017-04-02 Bruno Haible relocatable-lib-lgpl: Fix link error (regression from 2011-06-16). * modules/relocatable-lib-lgpl (configure.ac): Add AC_LIBOBJ invocation, like it was done in modules/relocatable-lib on 2011-05-21 and in modules/relocatable-prog on 2011-08-15. Reported by Reuben Thomas . 2017-03-31 Bruno Haible glob: Fix invalid free() call. * lib/glob.c (glob): Reset malloc_home_dir when assigning a pointer to static storage to home_dir. Reported by Coverity via Tim Rühsen. 2017-03-31 Bruno Haible glob: Fix memory leaks. * lib/glob.c (glob): Free allocated memory before returning. Reported by Coverity via Tim Rühsen. 2017-03-31 Bruno Haible md5, sha1, sha256, sha512: Add comments regarding correctness. * lib/md5.h (buflen): Add comments regarding range. * lib/sha1.h (buflen): Likewise. * lib/sha256.h (buflen): Likewise. * lib/sha512.h (buflen): Likewise. * lib/md5.c (md5_process_bytes): Add comment why memmove is not needed. * lib/sha1.c (sha1_process_bytes): Likewise. * lib/sha256.c (sha256_process_bytes): Likewise. * lib/sha512.c (sha512_process_bytes): Likewise. Reported by Coverity via Tim Rühsen. 2017-03-22 Paul Eggert getopt: merge from glibc This does not change anything substantial; it merely simplifies hypothetical merges back to glibc. * lib/getopt.c, lib/getopt.in.h, lib/getopt1.c, lib/getopt_int.h: Change copyright notice to match what is in glibc. * lib/getopt.c: Reorder includes to match glibc. Remove uses of USE_IN_LIBIO. Remove 'register'. In __LIBC code, use __open_memstream rather than open_memstream and __glibc_likely instead of __builtin_expect. * lib/getopt.in.h (__posix_getopt) [!__GETOPT_PREFIX]: New decl. 2017-03-21 Paul Eggert dfa: make [0-9] faster in non-C locales Problem reported by John P. Linderman (Bug#26193). * lib/dfa.c (parse_bracket_exp): Remove redundant assignment. If both ends of the range are ASCII digits, do not worry about multi-character collating sequences and the like. Be consistent about using isalpha as a precondition for setbit_case_fold_c. 2017-03-19 Bruno Haible lock: Fix compilation error with HP-UX IA64 cc. * lib/glthread/lock.h (pthread_rwlockattr_setkind_np): Don't declare weak on non-glibc platforms. 2017-03-19 Paul Eggert stdalign: tweak version# and test for HP-UX IA64 Problems reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-03/msg00078.html * lib/stdalign.in.h (_Alignas): * m4/stdalign.m4 (gl_STDALIGN_H): Use octal, not decimal, for __HP_cc version. Perhaps HP formerly used octal (as that is how they document it), but it is decimal in practice now and the ancient implementations no longer matter. * tests/test-stdalign.c (main) [__HP_cc && __ia64]: Skip test. 2017-03-19 Bruno Haible vma-iter: Add support for Solaris. * lib/vma-iter.c (vma_iterate): On Solaris, use the /proc filesystem approach. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on Solaris. * lib/get-rusage-as.c: Update comment about Solaris. * lib/get-rusage-data.c: Likewise. 2017-03-19 Bruno Haible vma-iter: Prefer HP-UX specific API on HP-UX. * lib/vma-iter.c (vma_iterate): Move HP-UX specific implementation up. * lib/vma-iter.h: Update. Just in case HP-UX ever implements mquery(). 2017-03-18 Paul Eggert stdalign: restore previous behavior for HP-UX IA64 See Bruno Haible's email in: http://lists.gnu.org/r/bug-gnulib/2017-03/msg00066.html which cites p 150 of a manual saying that 'aligned' works on Itanium. * lib/stdalign.in.h (_Alignas): Assume the '061200' applies to Itanium, not to PA-RISC. * m4/stdalign.m4 (gl_STDALIGN_H): Adjust to match stdalign.in.h. 2017-03-17 Bruno Haible stat-time, timespec: Support use of the header files in C++ mode. * lib/stat-time.h: Add "C" linkage declaration. * lib/timespec.h: Likewise. 2017-03-17 Bruno Haible stdalign: Make it work with HP-UX cc. * lib/stdalign.in.h (_Alignas): Don't define for HP-UX cc. * m4/stdalign.m4 (gl_STDALIGN_H): No need to enable the extra test for HP-UX cc. 2017-03-17 Paul Eggert flexmember: try to detect HP-UX 11.31 cc bug Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-03/msg00066.html * m4/flexmember.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER): Attempt to detect bug in HP-UX 11.31 cc. 2017-03-16 Bruno Haible stdint: Fix test compilation failure with HP-UX 11 cc. * lib/stdint.in.h (_STDINT_MIN): Remove macro. (_STDINT_UNSIGNED_MIN, _STDINT_SIGNED_MIN): New macros. (PTRDIFF_MIN, SIG_ATOMIC_MIN, WCHAR_MIN, WINT_MIN): Define using _STDINT_UNSIGNED_MIN, _STDINT_SIGNED_MIN. 2017-03-14 Bruno Haible gnulib-tool: Don't produce a tests directory with only snippet .h files. * gnulib-tool (func_modules_transitive_closure_separately): If testsrelated_modules ends up with no "real" modules, aside from modules with applicability 'all', set it to empty. 2017-03-14 Bruno Haible vma-iter: Add support for HP-UX. * modules/vma-iter (configure.ac): Check for 'pstat_getprocvm'. * lib/vma-iter.c (vma_iterate): On HP-UX, use pstat_getprocvm(). * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on HP-UX. * lib/get-rusage-as.c: Update comment about HP-UX. * lib/get-rusage-data.c: Likewise. (get_rusage_data): Use get_rusage_data_via_setrlimit. 2017-03-14 Bruno Haible limits-h: Make it work with HP-UX cc. * lib/limits.in.h (LLONG_MIN, LLONG_MAX, ULLONG_MAX): Define if not defined. 2017-03-14 Bruno Haible Fix test failures on DragonFlyBSD. * tests/test-localeconv.c (main): Treat DragonFlyBSD like FreeBSD. * tests/test-select.h (test_bad_fd): Likewise. * tests/test-get-rusage-data.c (main): Treat DragonFlyBSD like OpenBSD. 2017-03-14 Bruno Haible freadahead: Silence warning on DragonFlyBSD. * lib/freadahead.c (__sreadahead): Declare ourselves. 2017-03-14 Bruno Haible vma-iter: Add comment about AIX. * lib/vma-iter.c: Add comment about why this module is not implemented on AIX. 2017-03-14 Paul Eggert snippets: move unadjusted snippet sources to lib Problem reported by Michal Privoznik in: http://lists.gnu.org/r/bug-gnulib/2017-03/msg00039.html * lib/_Noreturn.h: Rename from build-aux/snippet/_Noreturn.h. * lib/arg-nonnull.h: Rename from build-aux/snippet/arg-nonnull.h. * lib/c++defs.h: Rename from build-aux/snippet/c++defs.h. * lib/unused-parameter.h: Rename from build-aux/snippet/unused-parameter.h. * lib/warn-on-use.h: Rename from build-aux/snippet/warn-on-use.h. * modules/snippet/_Noreturn (Files:, _NORETURN_H): * modules/snippet/arg-nonnull (Files:, ARG_NONNULL_H): * modules/snippet/c++defs (Files:, CXXDEFS_H): * modules/snippet/unused-parameter (Files:, UNUSED_PARAMETER_H): * modules/snippet/warn-on-use (Files: WARN_ON_USE_H): Adjust to file renamings. 2017-03-14 Mathieu Lirzin gnulib-tool: don't automatically distribute files from top/ * gnulib-tool (func_get_automake_snippet_unconditional): To be able to not distribute top/README-release by default, don't distribute files from top/ unconditionally. * modules/gnumakefile (Makefile.am): Distribute top/GNUmakefile. * modules/maintainer-makefile (Makefile.am): Distribute top/maint.mk. 2017-03-14 Paul Eggert gnulib-tool: fix typo in comment output * gnulib-tool (func_import): Fix typo with previous change. snippets: work around GNU Make 3.82 VPATH When using 'gnulib-tool --gnu-make' on Emacs, and building the resulting tarball on Solaris 10 which bundles GNU Make 3.82, an out-of-source (VPATH) build failed because the sans-copyright snippet file was not built before the file that used it. Presumably this is some sort of VPATH thing. Work around the problem by using the original snippet, i.e., don’t bother to remove its copyright notice. * modules/snippet/_Noreturn, modules/snippet/link-warning: Don’t assume Automake in comments. Omit long-incorrect comment. * modules/snippet/arg-nonnull (BUILT_SOURCES, arg-nonnull.h) (MOSTLYCLEANFILES): * modules/snippet/c++defs (BUILT_SOURCES, c++defs.h) (MOSTLYCLEANFILES): * modules/snippet/unused-parameter (BUILT_SOURCES, unused-parameter.h) (MOSTLYCLEANFILES): * modules/snippet/warn-on-use (BUILT_SOURCES, warn-on-use.h) (MOSTLYCLEANFILES): Remove. * modules/snippet/arg-nonnull (ARG_NONNULL_H): * modules/snippet/c++defs (CXXDEFS_H): * modules/snippet/unused-parameter (UNUSED_PARAMETER_H): * modules/snippet/warn-on-use (WARN_ON_USE_H): Don’t bother to remove the copyright notice; just use the original snippet as-is. 2017-03-13 Paul Eggert gnulib-tool: minor --gnu-make fixups * gnulib-tool (func_emit_lib_Makefile_am): Remove useless code that was a blind alley during implementation. Problem reported by Thien-Thi Nguyen in: http://lists.gnu.org/r/bug-gnulib/2017-03/msg00029.html (func_import): Note the "--gnu-make" option in the output comment. 2017-03-12 Paul Eggert gnulib-tool: new option --gnu-make This is for applications like GNU Emacs that use GNU Make features instead of Automake. * doc/gnulib-tool.texi (Initial import): Mention --gnu-make. * doc/gnulib.texi (Unit test modules, Build robot for gnulib): Do not assume Automake. * gnulib-tool (func_determine_path_separator) (func_modules_transitive_closure, func_update_file) (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am) (func_import): Add support for --gnu-make. 2017-03-11 Paul Eggert gnulib-common.m4: avoid aclocal.m4 bloat * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): Hide AM_PROG_AR from aclocal, so that aclocal does not install irrelevant macro definitions into aclocal.m4. 2017-03-10 Bruno Haible vma-iter: Let callers know about error. * lib/vma-iter.h (vma_iterate): Return 'int', not 'void'. * lib/vma-iter.c (vma_iterate): Return -1 in case of error. 2017-03-05 Bruno Haible Fix value of LD for 64-bit compilers on AIX. * m4/lib-ld.m4 (AC_LIB_PROG_LD): For 64-bit compilers on AIX ("gcc -maix64" and "xlc -q64"), add option -b64 to $LD. 2017-03-04 Paul Eggert dtotimespec: simplify * lib/dtotimespec.c (dtotimespec): Simplify. 2017-03-04 Bruno Haible test-calloc-gnu: Reenable test also for GCC 7. * tests/test-calloc-gnu.c (eight): New function. (main): Don't skip test; use eight() instead. 2017-03-04 Jim Meyering test-calloc-gnu: port to GCC7 * tests/test-calloc-gnu.c (main) [__GNUC__ >= 7]: Skip a test that attempts to calloc more than SIZE_MAX bytes, because GCC7 and newer would detect that at compilation time. 2017-03-04 Bruno Haible tests: Avoid compiler warning about uses of null_ptr. * tests/null-ptr.h: New file. * tests/test-canonicalize.c: Include null-ptr.h. (null_ptr): Remove function. * tests/test-canonicalize-lgpl.c: Likewise. * tests/test-memmem.c: Likewise. * tests/test-ptsname_r.c: Likewise. * modules/canonicalize-tests (Files): Add tests/null-ptr.h. * modules/canonicalize-lgpl-tests: Likewise. * modules/memmem-tests: Likewise. * modules/ptsname_r-tests: Likewise. Reported by Jim Meyering. 2017-03-03 Bruno Haible doc: Mention Mac OS X deficiencies regarding semaphores. * doc/posix-functions/sem_init.texi: Mention status on Mac OS X. * doc/posix-functions/sem_destroy.texi: Likewise. * doc/posix-functions/sem_getvalue.texi: Likewise. 2017-03-03 Bruno Haible lock tests: Fix test failure on Mac OS X (regression from 2017-01-05). Reported by Assaf Gordon via Pádraig Brady . * tests/test-lock.c: On Mac OS X, use named semaphores, not unnamed semaphores. (USE_NAMED_SEMAPHORE, USE_UNNAMED_SEMAPHORE): New macros. (atomic_int_semaphore): New macro. 2017-02-28 Bruno Haible perror tests: Tweak for z/OS. Reported by Daniel Richard G. . * tests/test-perror.sh: Don't fail z/OS style perror output. 2017-02-26 Bruno Haible nproc: Refactor large function. * lib/nproc.c (num_processors_ignoring_omp): New function, extracted from num_processors. (num_processors): In this function, only deal with OMP. 2017-02-26 Pádraig Brady nproc: adjust handling of OpenMP environment variables to match the return value from omp_get_num_threads(), i.e.: - honor OMP_THREAD_LIMIT without OMP_NUM_THREADS - Treat 0 as an invalid value and ignore Also remove the call to omp_get_num_threads() because it's ineffective without the omp pragmas in place. * lib/nproc.c (parse_omp_threads): Return 0 if specified, so that it can be ignored. (num_processors): Honor OMP_THREAD_LIMIT even without OMP_NUM_THREADS being set. Also fix a typo in the environment variable being checked, from the previous recent commit. 2017-02-26 Pádraig Brady nproc: support nested OMP_NUM_THREADS, and OMP_THREAD_LIMIT * lib/nproc.c (parse_omp_threads): A new function refactored from num_processors() to support parsing both of the above environment variables. (num_processors): Prefer using omp_get_num_threads() with [_OPENMP] to accurately reflect the current OpenMP nesting level. Also support the OMP_THREAD_LIMIT environment variable to limit the max value determined from OMP_NUM_THREADS. * modules/nproc: Depend on minmax header. Suggested by Oliver Heimlich. 2017-02-25 Bruno Haible maintainer-makefile: Fix AC_PROG_SED with autoconf cache. * m4/gnulib-common.m4 (AC_PROG_SED): Fix AC_CACHE_CHECK invocation. 2017-02-24 Paul Eggert ftoastr: port to -Wdouble-promotion Work around -Wdouble-promotion false alarm in recent GCCs. * lib/ftoastr.c (PROMOTED_FLOAT): New macro. (ftoastr_snprintf, FTOASTR): Use it. 2017-02-21 Bruno Haible lock tests: Fix build failure on GNU/Hurd (regression from 2017-01-05). Reported by Rene Saavedra in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25821 via Paul Eggert. * lib/glthread/lock.h: On glibc systems without PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP, use the fallback implementation of rwlocks. * lib/glthread/lock.c: Likewise. 2017-02-20 Bruno Haible lock tests: Fix build failure on z/OS. Reported by Daniel Richard G. . * modules/lock-tests (configure.ac): Test for . * tests/test-lock.c (USE_SEMAPHORE): Don't set if does not exist. 2017-02-19 Bruno Haible havelib: Prefer the search path of /usr/bin/gcc over the one of $CC. This helps when CC=clang. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Prefer the search path of /usr/bin/gcc. havelib: Support overriding the result of AC_LIB_PREPARE_MULTILIB. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Use AC_CACHE_CHECK. 2017-02-19 Bruno Haible gnulib-tool: Avoid conflict of havelib-tests with --single-configure. * gnulib_tool (func_create_testdir): Avoid havelib-tests when --with-tests --single-configure is specified. 2017-02-16 Tim Rühsen users.txt: Update links, use HTTPS where possible * users.txt: Updated to HTTPS where possible, fixed some links to new locations. 2017-02-16 Bruno Haible xbinary-io: Fix inlining. * lib/xbinary-io.c: Set XBINARY_IO_INLINE, not XSETMODE_INLINE. 2017-02-16 Paul Eggert xbinary-io: rename from xsetmode This patch is taken from suggestions by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-02/msg00060.html http://lists.gnu.org/r/bug-gnulib/2017-02/msg00061.html * lib/binary-io.c (__gl_setmode_check): Set errno to EINVAL, not ENOTTY, when it is an inappropriate device. * lib/binary-io.h (SET_BINARY): Resurrect. * lib/xbinary-io.c: Rename from lib/xsetmode.c. (xset_binary_mode_error): Rename from xsetmode_error. * lib/xbinary-io.h: Rename from lib/xsetmode.h. (xset_binary_mode): Rename from xsetmode. All uses changed. * modules/xbinary-io: Rename from modules/xsetmode. Update file names. * tests/test-binary-io.sh (tmpfiles): Remove no-longer-used file name. * NEWS: Update to match revised behavior. 2017-02-15 Paul Eggert tests: Adjust to recent SET_BINARY change * tests/test-binary-io.c (main): * tests/test-binary-io.sh: Remove test for SET_BINARY. * tests/test-closein.c, tests/test-fflush2.c, tests/test-ftell.c: * tests/test-ftello.c, tests/test-nonblocking-pipe-child.c: * tests/test-yesno.c: Use set_binary_mode, not SET_BINARY. xsetmode: new module This is to fix a problem noted by Eric Blake. Code was using xfreopen to change files to binary mode, but this fails for stdout when in append mode. Such code should use xsetmode instead. * NEWS: Document incompatible changes to binary-io module. * lib/binary-io.c (__gl_setmode_check) [__DJGPP__ || __EMX__]: New function. * lib/binary-io.h (__gl_setmode): Rename from set_binary_mode. (set_binary_mode): New function, which also checks for tty. * lib/xsetmode.c, lib/xsetmode.h, modules/xsetmode: New files. 2017-02-14 Paul Eggert headers: fix begin-end typos * lib/mbfile.h, lib/se-selinux.in.h: Fix typos by replacing _GL_INLINE_HEADER_BEGIN with _GL_INLINE_HEADER_END. selinux-h: port to PGI 16.10 * lib/se-selinux.in.h: Don't assume that include_next skips over duplicate -I DIR options. argp: port to PGI 16.10 * lib/argp-pin.c (dummy): Declare as needed to make file nonempty. 2017-02-13 Darshit Shah unicase: Update function protoype to match definition. * lib/unicase/special-casing.h (gl_unicase_special_lookup): Gperf 3.1 uses 'size_t' as the datatype for the 'len' parameter in the functions it generates. Update the prototype specified here to match the newly generated function. 2017-02-12 Bruno Haible times test: Avoid gcc warnings on Linux/x32. * tests/test-times.c (main): Really cast printf arguments from clock_t to 'long int'. 2017-02-12 Paul Eggert glob: port better to emscripten Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-02/msg00031.html * lib/glob.c (glob): Don't assume HAVE_GETPWNAM_R || _LIBC. 2017-02-11 Bruno Haible host-cpu-c-abi: Support for 64-bit AIX, 32-bit armhf on arm64, hppa64. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Define also HOST_CPU. For the x32 ABI on x86_64, set HOST_CPU_C_ABI to 'x86_64-x32' and define both __x86_64__ and __x86_64_x32__. For the ELFv2 ABI on powerpc64, define both __powerpc64__ and __powerpc64_elfv2__. Recognize 64-bit compilation on AIX. Recognize 32-bit compilation on arm64/Linux. Distinguish hppa64 from hppa. 2017-02-10 Bruno Haible search: Don't assume that tsearch() exists if 'VISIT' is defined. * m4/search_h.m4 (gl_SEARCH_H): Determine HAVE_TYPE_VISIT. * modules/search (Makefile.am): Substitute HAVE_TYPE_VISIT. * lib/search.in.h (VISIT): Define if HAVE_TYPE_VISIT is 0. 2017-02-09 Bruno Haible doc: Don't mention obsolete AC_LIBTOOL_WIN32_DLL macro. * doc/gnulib.texi (Libtool and Windows): Recommend LT_INIT([win32-dll]) instead of AC_LIBTOOL_WIN32_DLL. Reported by Reuben Thomas . 2017-02-08 Paul Eggert stddef-tests: port to SIZE_MAX <= INT_MAX * tests/test-stddef.c: Include , for INT_MAX. Do not assume that INT_MAX < SIZE_MAX. 2017-02-01 Bruno Haible lock tests: Fix link error. * modules/lock-tests (test_rwlock1_LDADD): Add @YIELD_LIB@. Reported by Tom G. Christensen . 2017-01-31 Bruno Haible lock: Fix link error (regression from 2017-01-05). * lib/glthread/lock.h [USE_POSIX_THREADS_WEAK]: Declare also pthread_rwlockattr_init, pthread_rwlockattr_setkind_np, pthread_rwlockattr_destroy weak. Reported by Tom G. Christensen . 2017-01-30 Paul Eggert Port to PGI 16.10 x86-64 This patch fixes one real bug in gl_anylinked_list2.h, along with some minor glitches that are not bugs. It does not silence PGI’s thousands of bogus warnings when compiling test-intprops.c. Fortunately, the warnings do not cause a failure. * lib/c-ctype.h (_C_CTYPE_LOWER_A_THRU_F_N, _C_CTYPE_LOWER_N): Rename parameter to avoid PGI warning about ‘#define f(n) 'n'’. My goodness, PGI goes back a long ways - this predates C89! * lib/gl_anylinked_list2.h (ASYNCSAFE): Fix bug caught by PGI. For example, ASYNCSAFE (const void *) should expand to ‘const void *volatile’, not to ‘volatile const void *’. * lib/spawn.in.h (POSIX_SPAWN_USEVFORK): Don't define if already defined. * lib/verify.h (verify) [!__GNUC__]: Use shorter albeit meaningless string to bypass silly compiler limits. * tests/infinity.h (Infinityf, Infinityd, Infinityl) [__PGI]: * tests/nan.h (NaNf, NaNd, NaNl): Use static functions to avoid misguided compiler diagnostics. Is there some reason we don’t use static functions on all platforms? 2017-01-20 Paul Eggert parse-datetime: handle timezones reentrantly This API change was prompted by a report by Pádraig Brady in: https://bug.debian.org/851934#10 To help fix the bug, make parse_datetime2 more reentrant. * NEWS: Document this incompatible change. * lib/parse-datetime.h, lib/parse-datetime.y (parse_datetime2): Add two arguments, the timezone and the timezone name. All callers changed. If TZ="..." is specified, use it for calculating defaults. * lib/parse-datetime.y: Don't include xalloc.h or use xmalloc, as this code should be usable in a library. (mktime_ok, get_effective_timezone): Accept timezone arg too. All callers changed. (get_tz): Remove. (get_effective_timezone): Check for failures. 2017-01-20 Eric Blake localename: port to cygwin 2.6 * lib/localename.c (gl_locale_name_thread_unsafe): Add clause for Cygwin. * modules/localename (Depends-on): Add extensions, since NL_LOCALE_NAME() is not visible without it. 2017-01-17 Pádraig Brady parse-datetime: fix dependence on AC_PROG_SED * modules/parse-datetime: Use `sed` directly like all other modules. Reported by J William Piggott 2017-01-16 Paul Eggert intprops: update doc URLs * doc/intprops.texi (Integer Range Overflow): Update URLs. 2017-01-16 Bruno Haible host-cpu-c-abi: Add support for armhf, arm64, x32, s390x. * m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI): Require gl_C_ASM. On x86_64 systems, distinguish x86_64 and x32. On arm systems, distinguish arm, armhf, arm64, and no longer distinguish arm and armel. On s390x systems, distinguish s390 and s390x. * modules/host-cpu-c-abi (Files): Add m4/asm-underscore.m4. * NEWS: Mention the change regarding 'armel'. 2017-01-15 Paul Eggert localeinfo: case_folded_counterparts and WEOF * NEWS: Document this. * lib/localeinfo.c (case_folded_counterparts): First arg is now wint_t, not wchar_t. This generalizes the function to also work on WEOF, where it returns 0. dfa: port to gcc -fsanitize=undefined * lib/dfa.c (copy): Don’t pass NULL with size 0 to memcpy, as this runs afoul of gcc -fsanitize=undefined. 2017-01-14 Paul Eggert strftime: %z is -00 if unknown * lib/strftime.c (DO_TZ_OFFSET): Omit arg 'negative'; it's now the caller's responsibility to set 'negative_number'. All uses changed. (__strftime_internal): Put '-' before a zero UTC offset if the time zone abbreviation starts with "-", which is the recently-introduced tzdb convention for an unknown UTC offset that is arbitrarily set to 0. * tests/test-strftime.c: Test for this. 2017-01-10 Paul Eggert dfa: port to older GCC Problem reported by Assaf Gordon in: http://lists.gnu.org/r/bug-gnulib/2017-01/msg00103.html * modules/c99: New module. This merely attempts to use the latest C version, which should be enough to solve this particular problem. The idea is to document which Gnulib modules assume C99 or later. * modules/dfa (Depends-on): Add it. 2017-01-10 Bruno Haible Update DEPENDENCIES. * DEPENDENCIES: List only https URLs. Update recommended version for autoconf, automake, gperf. 2017-01-10 Jim Meyering maint.mk: enforce spelling of "timestamp" (i.e., no space) * top/maint.mk (prohibit_undesirable_word_seq_RE_): Also disallow /\btime\s+stamps?\b/. Prefer "timestamp". 2017-01-10 Paul Eggert dfa: minor simplification with emptyset * lib/dfa.c (build_state): Simplify by using emptyset. 2017-01-09 Paul Eggert dfa: shrink constraints from 4 bits to 3 * lib/dfa.c (newline_constraint, letter_constraint) (other_constraint, prev_newline_dependent) (prev_letter_dependent, NO_CONSTRAINT, BEGLINE_CONSTRAINT) (ENDLINE_CONSTRAINT, BEGWORD_CONSTRAINT, ENDWORD_CONSTRAINT) (LIMWORD_CONSTRAINT, NOTLIMWORD_CONSTRAINT): Constraints need only 3 bits, not 4. Using smaller integers shrinks the code a bit and makes grep a tad faster on x86-64. dfa: omit unnecessary ptrdiff_t check * lib/dfa.c (alloc_position_set): Do not worry about ptrdiff_t overflow, since xnmalloc does that now. dfa: omit unnecessary allocation * lib/dfa.c (dfaanalyze): Do not allocate follow set, since an all-zero follow set works just fine. dfa: omit unused local * lib/dfa.c (build_state): Fix up recent change. maint: remove stray .texi files Although these were superseded by other files like doc/posix-functions/ctime.texi, the old files were not removed. * doc/ctime.texi, doc/inet_ntoa.texi: Remove. 2017-01-08 Paul Eggert getprogname: fix port to IRIX * lib/getprogname.c (getprogname) [__sgi]: Don't dump core if malloc returns NULL. dfa: fix reallocation bug when matching newlines Problem reported for sed by S. Gilles (Bug#25390). * lib/dfa.c (realloc_trans_if_necessary): Move earlier. (dfastate): Reallocate before moving any newline transition ... (build_state): ... instead of reallocating here, where it is too late. 2017-01-07 Tim Rühsen (tiny change) Avoid -Wundef warning about undefined WINDOWS_SOCKETS. * lib/sockets.h: Test if WINDOWS_SOCKETS is defined. 2017-01-07 Tim Rühsen (tiny change) Avoid -Wundef warning about undefined __USE_FILE_OFFSET64. * lib/glob-libc.h: Test if __USE_FILE_OFFSET64 is defined. 2017-01-07 Bruno Haible stdioext: Port to Minix 3.2 and newer. * lib/stdio-impl.h: Treat __minix like the newest NetBSD. * lib/fseeko.c (fseeko): Likewise. Reported by Nelson Beebe via Paul Eggert. 2017-01-06 Paul Eggert getprogname: port to IRIX * lib/getprogname.c (getprogname): Port to IRIX. Based on an idea by Bastien Roucariès at: http://lists.gnu.org/r/bug-gnulib/2010-12/msg00096.html via code from Bruno Haible at: https://lists.gnu.org/r/bug-gnulib/2010-12/msg00249.html localename-tests: port to NetBSD 7 Problem reported by Nelson H. F. Beebe. * tests/test-localename.c: Test newlocale and uselocale only if both exist. glob, intprops, xalloc: work around Clang bug Work around LLVM bug 16404, which is still not fixed. https://llvm.org/bugs/show_bug.cgi?id=16404 Problem reported by Nelson H. F. Beebe. * lib/glob.c, lib/intprops.h, lib/xalloc-oversized.h (__has_builtin): Remove. * lib/glob.c (size_add_wrapv): * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW, _GL_HAS_BUILTIN_OVERFLOW_P): * lib/xalloc-oversized.h (xalloc_oversized): Do not use overflow builtins if Clang. dfa: fix 'return' typo Problem reported by Nelson H. F. Beebe. * lib/dfa.c (merge): Fix typo that Sun compilers rejected. 2017-01-05 Pádraig Brady parse-datetime: fix generated paths for coverage files * modules/parse-datetime: Adjust the paths for parse-datetime.y within parse-datetime.c, so that gcc generates appropriate .gcno files, allowing lcov to proceed without error. Previously it would error trying to find "lib/lib/parse-datetime.y". 2017-01-05 Pádraig Brady maint.mk: support parallel execution of coverage * top/maint.mk (coverage): Run dependencies serially, thus supporting parallel processing of each one, particularly build-coverage, which builds and runs tests. 2017-01-05 Bruno Haible lock tests: Prefer semaphore over mutex. * tests/test-lock.c (USE_SEMAPHORE): New constant. (struct atomic_int, init_atomic_int, get_atomic_int_value, set_atomic_int_value) [USE_SEMAPHORE]: Define using a POSIX semaphore. Suggested by Torvald Riegel . 2017-01-05 Bruno Haible lock: Provide guarantee to avoid writer starvation for rwlocks. The rationale is: 1) Read-preferring read-write locks are prone to writer starvation if the number of reader threads multiplied by the percentage of time they have the lock held is too high. 2) Write- preferring read-write locks are the only reliable way to avoid this. 3) There have been reports of 'test-lock' hanging on glibc systems http://lists.gnu.org/r/bug-gnulib/2017-01/msg00009.html, and glibc indeed implements read-preferring rwlocks by default, see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html and https://sourceware.org/bugzilla/show_bug.cgi?id=13701 . * m4/pthread_rwlock_rdlock.m4: New file. * m4/lock.m4 (gl_LOCK): Invoke gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER. * lib/glthread/lock.h [USE_POSIX_THREADS]: Test HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER. Use a different implementation of rwlock initialization on glibc systems without HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER. Use a different implementation of rwlocks altogether on non-glibc systems without HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER. [USE_PTH_THREADS]: Use a different implementation of rwlocks altogether. * lib/glthread/lock.c [USE_POSIX_THREADS] (glthread_rwlock_init_for_glibc): New function. [USE_POSIX_THREADS] (glthread_rwlock_rdlock_multithreaded): Update comment. [USE_PTH_THREADS]: New implementation of rwlocks. [USE_WINDOWS_THREADS] (glthread_rwlock_rdlock_func): Prefer writers over readers. * modules/lock (Files): Add m4/pthread_rwlock_rdlock.m4. (Depends-on): Add 'extensions'. * tests/test-rwlock1.c: New file. * lock-tests (Files): Add it. (Depends-on): Add usleep. (Makefile.am): Add test-rwlock1 to the tests. 2017-01-05 Bruno Haible thread: Fix pth port. * lib/glthread/thread.h (pth_init): Declare weak. (glthread_create, glthread_sigmask, glthread_join, gl_thread_self, gl_thread_exit): Make sure Pth is initialized before invoking any Pth function. 2017-01-04 Assaf Gordon parse-datetime: fix debug message on lone year number Input dates such as date -d "Apr 11 22:59:00 2011" are parsed as date (Apr 11, with default year 2016), then time, then a number (2011). Based on the combination of previously seen tokens, 'digits_to_date_time' determines 2011 to be a year value. This fixes the debug messages to correctly show the updated year. Before: $ date --debug -d 'Apr 11 22:59:00 2011' date: parsed date part: (Y-M-D) 2016-04-11 date: parsed time part: 22:59:00 date: parsed number part: today/this/now After: $ ./src/date --debug -d 'Apr 11 22:59:00 2011' date: parsed date part: (Y-M-D) 2016-04-11 date: parsed time part: 22:59:00 date: parsed number part: year: 2011 * lib/parse-datetime.y (struct parser_control): Add 'year_seen', 'debug_year_seen' member fields. (digits_to_date_time): Update 'year_seen' as needed. (debug_print_current_time): Inform about year updates. (parse_datetime2): Initialize year_seen,debug_year_seen member fields. parse-datetime: fix local timezone debug messages "Local timezones" are strings that affect only DST relative to the default timezone. The debug messages in parse-datetime.y printed wrong information when encountering local timezones. Examples: Here EET/EEST are time zones ('zone' token, with values +02:00/+03:00): TZ=Asia/Tokyo ./src/date --debug -d '2011-12-11 EET' TZ=Asia/Tokyo ./src/date --debug -d '2011-06-11 EEST' When the default timezone relates to the zone strings, EET/EEST are parsed as local timezones (tLOCAL_ZONE), and only change the DST value (0/1, respectively): TZ=Europe/Helsinki ./src/date --debug -d '2011-12-11 EET' TZ=Europe/Helsinki ./src/date --debug -d '2011-06-11 EEST' * lib/parse-datetime.y (debug_print_current_time): If local timezone was seen, inform about DST change, don't print actual timezone. (debug_strfdatetime): If local timezone was seen, use default timezone (and adjust as needed) instead of using incorrect timezone. (parse_datetime2): Use correct time-zone source string, and adjust default timezone as needed. parse-datetime: add debug warning about DST changes Incorrect date arithmetic due to daylight saving time (DST) are a common (false) bug report in coreutils. Detect two such cases and print a warning: 1. year/month/day adjustments (performed on 'struct tm'), where 'mktime' returns a different isdst value. 2. hour/minute/seconds/ns adjustments (performed on 'time_t'), where the result of 'localtime(3)' on the value will return a different isdst value. Note: DST changes could be harmless or unnoticeable. Examples (with 'TZ=America/New_York'): Unnoticeable: result is 2016-Dec-14 $ date -d '2016-06-15 EDT + 6 months' +%b Dec Unnoticeable: result is 2016-Dec-15 11:00:00 $ date -d '2016-06-15 12:00:00 EDT + 6 months' +%F 2016-12-15 This is unexpected: $ date -d '2016-06-01 EDT + 6 months' +%F 2016-11-30 The new debug warnings will show: $ ./src/date --debug -d '2016-06-01 EDT + 6 months' +%F ... date: warning: daylight saving time changed after date adjustment ... * lib/parse-datetime.y (parse_datetime2): Detect DST changes, and print an appropriate warning message. parse-datetime: add debug warning about date arithmetic Date arithmetic are done directly on the fields of 'struct tm', which can result in invalid dates. Normalization with 'mktime(3)' will then produce a different date - which might cause unexpected results. Examples: '2016-10-31 - 1 month' => 2016-09-31 normalized to 2016-10-01. '2016-02-29 + 1 year' => 2017-02-29 normalized to 2017-03-01. Note that date normalization is not inherently wrong and not rejected, as it has legitimate uses: '2016-12-29 + 5 days' => 2016-12-34 noramlized to 2017-01-03. If the user asked to adjust months but 'mday' changed, or user asked to adjust years but 'month' changed - warn about it. $ ./src/date --debug -d '2016-10-31 - 1 month' ... date: warning: when adding relative months/years, \ it is recommended to specify the 15th of the month ... date: warning: month/year adjustment resulted in shifted dates: date: adjusted Y M D: 2016 09 31 date: normalized Y M D: 2010 10 01 ... * lib/parse-datetime.y (parse_datetime2): Detect such cases and print a warning message. Improve recommendation of when to use 15 of the month or noon for date arithmetic. parse-datetime: fix debug message of relative part after timezone Relative part (e.g '+8 days') after a timezone string was not reported (was only reported after a timezone number). Due to the parser's structure, timezone strings with numbers were handled separately. before: # Timezone number + relative part: OK $ ./src/date --debug +%F -d '2013-10-30 00:00:00 +00:00 -8 days' ... date: parsed relative part: -8 day(s) # Timezone string + relative part: missing $ ./src/date --debug +%F -d '2013-10-30 00:00:00 UTC -8 days' [ missing message ] After: messages are printed in both cases. * lib/parse-datetime.y ('zone' token): Call debug_print_relative_time. parse-datetime: fix incorrect debug message on lone number A lone number is an absolute value, not a relative time part. before: $ date --debug -d '20130101' date: parsed number part: today/this/now After: $ ./src/date --debug -d '20130101' date: parsed number part: (Y-M-D) 2013-01-01 * lib/parse-datetime.y ('item'/'number' tokens): Call 'debug_print_current_time' instead of 'debug_print_relative_time'. 2017-01-02 Paul Eggert doc: modernize for C11 etc. * doc/gnulib-readme.texi (Portability guidelines): Modernize a bit for C11, MinGW, etc. This responds to Paul Smith's question in: http://lists.gnu.org/r/bug-gnulib/2017-01/msg00014.html dfa: prefer functions to FETCH_WC macro * lib/dfa.c (FETCH_WC): Remove, replacing with ... (fetch_wc, bracket_fetch_wc): ... new functions. These store the wint_t result into DFA->lex.wctok instead of to a separate arg. All callers changed. Move more local decls closer to where they're used. dfa: narrow more local var scopes * lib/dfa.c: Move more local decls to be more local. dfa: remove duplicate assignment Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2017-01/msg00007.html * lib/dfa.c (parse_bracket_exp): Simplify. 2017-01-01 Paul Eggert dfa: simplify constraint-dependency checking * lib/dfa.c (prev_newline_constraint, prev_letter_constraint) (prev_other_constraint): Remove. (prev_newline_dependent, prev_letter_dependent): Simplify, to avoid an unnecessary bitwise AND operation. dfa: prefer functions and constants to macros * lib/dfa.c: Prefer constants to macros where either will do. (streq, isasciidigit, newline_constraint) (letter_constraint, other_constraint, succeeds_in_context) (prev_newline_constraint, prev_letter_constraint) (prev_other_constraint, prev_newline_dependent) (prev_letter_dependent, accepting, accepts_in_context): Now static functions instead of function-like macros. Use lower-case names accordingly. All uses changed. dfa: narrow more local var scopes * lib/dfa.c: Move some more local decls down to nearer where they're needed. 2016-12-31 Jim Meyering dfa: narrow the scope of many local variables * lib/dfa.c: Now that we are no longer constrained to c89, move declarations of many variables (often indices) "down" into the scope(s) where used or to the point of definition. This is a no-semantic-change diff. 2017-01-01 Paul Eggert version-etc: new year * build-aux/gendocs.sh (version): * doc/gendocs_template: * doc/gendocs_template_min: * doc/gnulib.texi: * lib/version-etc.c (COPYRIGHT_YEAR): Update copyright dates by hand in templates and the like. * all files: Run 'make update-copyright'. 2016-12-31 Eric Blake do-release-commit-and-tag: avoid shell syntax error * build-aux/do-release-commit-and-tag (curr_br): $branch can contain spaces when rebasing. maint.mk: hoist gnulib_dir definition earlier * top/maint.mk (gnulib_dir): Move near top of file. 2016-12-31 Jim Meyering maint.mk: do not always evaluate intprops-related shell * top/maint.mk (_intprops_names): Change := to just "=" to avoid using gnulib_dir undefined (gnulib_dir is defined later in the file, which will be fixed separately), and besides, there is no need to incur the cost of this shell invocation for every single use of this .mk file. Reported by Eric Blake in https://lists.gnu.org/r/bug-gnulib/2016-12/msg00137.html 2016-12-30 Jim Meyering maint.mk: improve sc_prohibit_intprops_without_use * top/maint.mk (_intprops_names): Don't hard-code the list of symbol names. Instead, derive it on the fly. 2016-12-30 Paul Eggert dfa: shorten sbit, success * lib/dfa.c (struct regex_syntax.sbit): (struct dfa.success): Use char, not int, for array elements, since they are all in the range 0..7. dfa: simplify multibyte_prop etc. This follows up on a change made when dfa.c was in grep, namely grep commit c797046c7c13c2647182b919a79a4c5b4ecf82b1 dated 2015-08-12 07:35:03 -0700, which removed unused multibyte support. That earlier simplification allows for some more simplification and trimming down here. * lib/dfa.c (struct mb_char_classes): New member nchars_alloc. (struct lexer_state): New mamber brack. (struct dfa, addtok_mb): multibyte_prop elements are now char, not int, since they must be in the range 0..3 now. Remove members mbcsets, nmbcsets, mbcsets_alloc, since the brack member now supersedes them. (parse_bracket_exp): Update dfa->lex.brack instead of dfa->mbcsets. (addtok): Use dfa->lex.brack instead of dfa->mbcsets. (dfaparse): Remove unnecessary initializations of already-0 storage. (free_mbdata): Free d->lex.brack.chars instead of d->mbcsets. (dfassbuild): No need to clear sup->mbcsets. dfa: minor performance tweak * lib/dfa.c (setbit_wc): Test < 0, not == EOF. dfa: wrap charclass inside a struct On my platform (gcc Ubuntu 5.4.0-6ubuntu1~16.04.4 x86-64, en_US.utf8 locale) this makes 'grep -Fi -f list.txt list.txt >out' about 5% faster, where list.txt is generated by 'aspell dump master | head -n 100000 >list.txt'. See Bug#22239. * lib/dfa.c (charclass): Wrap inside a struct. All uses changed. (CHARCLASS_INIT, tstbit, setbit, clrbit, zeroset, fillset, notset) (equal, emptyset, charclass_index, setbit_wc, setbit_case_fold_c): Adjust to this, e.g., by using charclass * rather than charclass. All callers changed as needed. (copyset): Remove. All uses changed to simple assignment. (parse_bracket_exp): Use zeroset instead of memset. 2016-12-30 Jim Meyering maint.mk: update list of intprops.h symbol names * top/maint.mk (_intprops_names): Regenerate the list of symbol names. This avoids a false failure of the sc_prohibit_intprops_without_use rule in grep. 2016-12-29 Eric Blake getopt: fix parallel test failure * tests/test-getopt-posix.c (TEST_GETOPT_TMP_NAME): Set name. * tests/test-getopt-gnu.c (TEST_GETOPT_TMP_NAME): Likewise. * tests/test-getopt-main.h (main): Use different file names in case test-getopt-gnu and test-getopt-posix run in parallel. 2016-12-29 Paul Eggert xalloc: x2nrealloc check for ptrdiff_t overflow * lib/xalloc.h (x2nrealloc): Check for ptrdiff_t overflow, too. * modules/xalloc, modules/xvasprintf (Depends-on): Add stdint. 2016-12-24 Bruno Haible lock test: Fix performance problem on multi-core machines. * tests/test-lock.c (USE_VOLATILE): New macro. (struct atomic_int): New type. (init_atomic_int, get_atomic_int_value, set_atomic_int_value): New functions. (lock_checker_done, rwlock_checker_done, reclock_checker_done): Define as 'struct atomic_int'. (lock_checker_thread, test_lock, rwlock_checker_thread, test_rwlock, reclock_checker_thread, test_recursive_lock): Use the new functions. Reported by Eric Blake in https://www.redhat.com/archives/libvir-list/2012-March/msg00854.html and by Pádraig Brady in http://lists.gnu.org/r/bug-gnulib/2016-12/msg00117.html. 2016-12-19 Bruno Haible vma-iter: Fix endless loop on 64-bit Windows. * lib/vma-iter.c (vma_iterate): On Windows, use 'uintptr_t' instead of 'unsigned long'. 2016-12-19 Bruno Haible stdint: Fix WINT_MAX to match the gnulib provided wint_t on minw. * m4/wint_t.m4 (gt_TYPE_WINT_T): Define GNULIB_OVERRIDES_WINT_T here. * m4/stdint.m4 (gl_STDINT_H): Don't define GNULIB_OVERRIDES_WINT_T. Invoke gt_TYPE_WINT_T instead. (gl_STDINT_TYPE_PROPERTIES): Test GNULIB_OVERRIDES_WINT_T. * modules/stdint (Files): Add m4/wint_t.m4. * modules/wchar (Makefile.am): Substitute GNULIB_OVERRIDES_WINT_T. * modules/wctype-h (Makefile.am): Likewise. * lib/wchar.in.h (wint_t): Override if GNULIB_OVERRIDES_WINT_T is set, not only on MSVC. * lib/wctype.in.h (wint_t): Likewise. 2016-12-19 Paul Eggert getopt-posix-tests: fix Makefile typo * modules/getopt-posix-tests (test_getopt_posix_LDADD): Fix typo: the last ‘_’ was missing in the name. I suspect that the typo explains this build failure: https://buildfarm.opencsw.org/buildbot/builders/ggrep-solaris10-sparc/builds/39 although I can’t reproduce the problem on Solaris 10 sparc. 2016-12-18 Paul Eggert dfa: improve worst-case 'replace' performance See my note in Bug#22357#71. * lib/dfa.c (insert, delete): Rework to avoid duplicate test. (merge_constrained): New function, which is like the old 'merge' function, except with a new argument C2. Simplify the body by avoiding the need for different sections of code depending on whether one input is exhausted. (merge): Use the new function. (delete): Return the constraint of the deleted position, not the entire position. Caller changed. (replace): Change from O(N*(N + log N)) to O(N log N) algorithm. 2016-12-18 Norihiro Tanaka dfa: performance improvement for removal of epsilon closure See Bug#22357#32. * lib/dfa.c (delete): Use binary search to find deleted index. (replace): New function. It replaces a position with the followed set. (epsclosure): Replace it with a new algorithm. Update caller. 2016-12-18 Bruno Haible Split tests for getopt-posix and getopt-gnu. * tests/test-getopt-posix.c: New file. * tests/test-getopt-gnu.c: New file, with code from test-getopt.c. * tests/test-getopt-main.h: Renamed from tests/test-getopt.c. Remove stuff moved to test-getopt-gnu.c. Test TEST_GETOPT_GNU instead of GNULIB_TEST_GETOPT_GNU. * modules/getopt-posix-tests (Files): Add test-getopt-posix.c, test-getopt-main.h. Remove test-getopt.c, test-getopt_long.h. (Makefile.am): Test test-getopt-posix instead of test-getopt. * modules/getopt-gnu-tests: New file. * modules/getopt-gnu (configure.ac): Don't define GNULIB_TEST_GETOPT_GNU. 2016-12-18 Bruno Haible posix-modules: Add options for specific platforms. * posix-modules (func_usage): Document options --for-mingw, --for-msvc. (exclude_for_mingw, exclude_for_msvc, exclude): New variables. Invoke func_tmpdir. Filter out the excludes. 2016-12-18 Bruno Haible getopt: Fix link error for users of getopt() in . * lib/getopt.in.h (getopt etc.): Do the macro definitions also when __need_getopt is defined. Undefine all macros before defining them. * modules/getopt (Include): Clarify that including is also OK. * tests/test-getopt.c: Add comment. 2016-12-17 Bruno Haible getaddrinfo tests: Avoid compilation error on MSVC. * tests/test-getaddrinfo.c: Don't check the prototypes of freeaddrinfo, getaddrinfo on native Windows. 2016-12-17 Bruno Haible getlogin, getlogin_r: Fix link errors on MSVC. * m4/getlogin.m4 (gl_LIB_GETLOGIN): New macro. * modules/getlogin (configure.ac): Require gl_LIB_GETLOGIN. (Link): New section. * modules/getlogin_r (Files): Add m4/getlogin.m4. (configure.ac): Require gl_LIB_GETLOGIN. (Link): New section. * NEWS: Mention the new link requirements. * modules/getlogin-tests (test_getlogin_LDADD): New variable. * modules/getlogin_r-tests (test_getlogin_r_LDADD): New variable. 2016-12-17 Bruno Haible Un-deprecate the 'progname' module. * NEWS: Describe the appropriate use-cases of 'progname' versus 'getprogname'. Based on discussion summary at http://lists.gnu.org/r/bug-gnulib/2016-10/msg00105.html 2016-12-17 Bruno Haible Reorganize NEWS a bit. * NEWS: Move some not so important changes away from section "Important Notes". 2016-12-17 Bruno Haible tanhf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_TANHF. * m4/tanhf.m4 (gl_FUNC_TANHF): Set REPLACE_TANHF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_TANHF. * lib/math.in.h (tanhf): Override if REPLACE_TANHF is 1. 2016-12-17 Bruno Haible tanf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_TANF. * m4/tanf.m4 (gl_FUNC_TANF): Set REPLACE_TANF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_TANF. * lib/math.in.h (tanf): Override if REPLACE_TANF is 1. 2016-12-17 Bruno Haible sqrtf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_SQRTF. * m4/sqrtf.m4 (gl_FUNC_SQRTF): Set REPLACE_SQRTF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_SQRTF. * lib/math.in.h (sqrtf): Override if REPLACE_SQRTF is 1. 2016-12-17 Bruno Haible sinhf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_SINHF. * m4/sinhf.m4 (gl_FUNC_SINHF): Set REPLACE_SINHF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_SINHF. * lib/math.in.h (sinhf): Override if REPLACE_SINHF is 1. 2016-12-17 Bruno Haible sinf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_SINF. * m4/sinf.m4 (gl_FUNC_SINF): Set REPLACE_SINF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_SINF. * lib/math.in.h (sinf): Override if REPLACE_SINF is 1. 2016-12-17 Bruno Haible logf: Avoid redefinition error on MSVC. * m4/logf.m4 (gl_FUNC_LOGF): Set REPLACE_LOGF to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible log10l: Avoid redefinition error on MSVC. * m4/log10l.m4 (gl_FUNC_LOG10L): Set REPLACE_LOG10L to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible log10f: Avoid redefinition error on MSVC. * m4/log10f.m4 (gl_FUNC_LOG10F): Set REPLACE_LOG10F to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible hypotl: Avoid redefinition error on MSVC. * m4/hypotl.m4 (gl_FUNC_HYPOTL): Set REPLACE_HYPOTL to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible hypotf: Avoid redefinition error on MSVC. * m4/hypotf.m4 (gl_FUNC_HYPOTF): Set REPLACE_HYPOTF to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible fmodl: Avoid redefinition error on MSVC. * m4/fmodl.m4 (gl_FUNC_FMODL): Set REPLACE_FMODL to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible fmodf: Avoid redefinition error on MSVC. * m4/fmodf.m4 (gl_FUNC_FMODF): Set REPLACE_FMODF to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible expf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_EXPF. * m4/expf.m4 (gl_FUNC_EXPF): Set REPLACE_EXPF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_EXPF. * lib/math.in.h (expf): Override if REPLACE_EXPF is 1. 2016-12-17 Bruno Haible coshf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_COSHF. * m4/coshf.m4 (gl_FUNC_COSHF): Set REPLACE_COSHF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_COSHF. * lib/math.in.h (coshf): Override if REPLACE_COSHF is 1. 2016-12-17 Bruno Haible cosf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_COSF. * m4/cosf.m4 (gl_FUNC_COSF): Set REPLACE_COSF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_COSF. * lib/math.in.h (cosf): Override if REPLACE_COSF is 1. 2016-12-17 Bruno Haible atan2f: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_ATAN2F. * m4/atan2f.m4 (gl_FUNC_ATAN2F): Set REPLACE_ATAN2F to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_ATAN2F. * lib/math.in.h (atan2f): Override if REPLACE_ATAN2F is 1. 2016-12-17 Bruno Haible atanf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_ATANF. * m4/atanf.m4 (gl_FUNC_ATANF): Set REPLACE_ATANF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_ATANF. * lib/math.in.h (atanf): Override if REPLACE_ATANF is 1. 2016-12-17 Bruno Haible asinf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_ASINF. * m4/asinf.m4 (gl_FUNC_ASINF): Set REPLACE_ASINF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_ASINF. * lib/math.in.h (asinf): Override if REPLACE_ASINF is 1. 2016-12-17 Bruno Haible acosf: Avoid redefinition error on MSVC. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Define REPLACE_ACOSF. * m4/acosf.m4 (gl_FUNC_ACOSF): Set REPLACE_ACOSF to 1 if the function may be defined as an inline function. * modules/math (Makefile.am): Substitute REPLACE_ACOSF. * lib/math.in.h (acosf): Override if REPLACE_ACOSF is 1. 2016-12-17 Bruno Haible Avoid redefinition errors on MSVC. * m4/snprintf.m4 (gl_REPLACE_SNPRINTF): Set REPLACE_SNPRINTF to 1 if the function may be defined as an inline function. * m4/vsnprintf.m4 (gl_REPLACE_VSNPRINTF): Set REPLACE_VSNPRINTF to 1 if the function may be defined as an inline function. 2016-12-17 Bruno Haible Avoid redefinition errors on MSVC. * lib/stdio.in.h: Include and when necessary. * lib/unistd.in.h: Include when necessary. 2016-12-17 Bruno Haible stdint: Fix WINT_MAX to match the gnulib provided wint_t on MSVC. * m4/stdint.m4 (gl_STDINT_H): Define GNULIB_OVERRIDES_WINT_T. * modules/stdint (Makefile.am): Substitute GNULIB_OVERRIDES_WINT_T. * lib/stdint.in.h [GNULIB_OVERRIDES_WINT_T]: Redefine WINT_MIN and WINT_MAX. 2016-12-17 Bruno Haible Avoid autoconf warning. * modules/frexpl (configure.ac): Require, not invoke, gl_FUNC_FREXPL. * modules/frexp (configure.ac): Require, not invoke, gl_FUNC_FREXP. 2016-12-17 Bruno Haible fpending: Revert workaround against Emacs bug. * lib/stdio-impl.h [__MINGW32__]: Revert conditional. The Emacs bug is fixed by Eli Zaretskii in http://lists.gnu.org/r/emacs-devel/2016-12/msg00715.html 2016-12-17 Bruno Haible getlogin_r tests: Port to mingw. * tests/test-getlogin_r.c: Don't include on native Windows. Fixes regression introduced on 2014-05-19. 2016-12-17 Bruno Haible getlogin: Port to newer mingw. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_GETLOGIN. * m4/getlogin.m4 (gl_FUNC_GETLOGIN): Set HAVE_DECL_GETLOGIN. * modules/unistd (Makefile.am): Substitute HAVE_DECL_GETLOGIN, not HAVE_GETLOGIN. * lib/unistd.in.h (getlogin): Test HAVE_DECL_GETLOGIN, not HAVE_GETLOGIN. * doc/posix-functions/getlogin.texi: Mention the issue. * tests/test-getlogin.c: Don't include on native Windows. Fixes regression introduced on 2014-05-14. 2016-12-16 Paul Eggert builtin-expect: improve port to IBM XL C Problem reported for z/OS by Daniel Richard G. in: http://lists.gnu.org/r/bug-gnulib/2016-12/msg00079.html * m4/builtin-expect.m4 (gl___BUILTIN_EXPECT): Test for directly. builtin-expect: port to IBM XL C Problem reported for z/OS by Daniel Richard G. in: http://lists.gnu.org/r/bug-gnulib/2016-12/msg00074.html * m4/builtin-expect.m4 (gl___BUILTIN_EXPECT): Also allow __builtin_expect defined via a standard include file. regex: fix dependency Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2016-12/msg00073.html * modules/regex: Depend on builtin-expect. builtin-expect: new module Fix fnmatch to use it. Problem reported for z/OS by Daniel Richard G. * lib/fnmatch.c (__builtin_expect): * lib/glob.c (__builtin_expect): * lib/grantpt.c (__builtin_expect) [!_LIBC]: * lib/memmem.c (__builtin_expect) [!_LIBC]: * lib/scandir.c (__builtin_expect): * lib/strstr.c (__builtin_expect) [!_LIBC]: Remove macro; config.h now does this. * lib/gl_anytreehash_list1.h (add_to_bucket): * lib/regex_internal.h (BE): Assume __builtin_expect. * m4/builtin-expect.m4, modules/builtin-expect: New files. * modules/avltreehash-list, modules/fnmatch, modules/glob: * modules/grantpt, modules/memmem-simple, modules/rbtreehash-list: * modules/scandir, modules/strstr-simple: Depend on builtin-expect. 2016-12-15 Bruno Haible init.sh: Add possibility to not delete temporary files. * tests/init.sh (remove_tmp_): If the environment variable KEEP is set to yes, don't erase the temporary directory. 2016-12-16 Paul Eggert regex: fix integer-overflow bug in never-used code Problem reported by Clément Pit–Claudel in: http://lists.gnu.org/r/emacs-devel/2016-12/msg00654.html * lib/regex_internal.h: Include intprops.h. * lib/regexec.c (re_search_2_stub): Use it to avoid undefined behavior on integer overflow. * modules/regex (Depends-on): Add intprops. fpending: fix port to MinGW on Emacs * lib/stdio-impl.h [__MINGW32__]: Do not include errno.h. Problem reported by Eli Zaretskii in: http://lists.gnu.org/r/emacs-devel/2016-12/msg00642.html Is Plan 9 still a valid porting target, anyway? 2016-12-15 Paul Eggert safe-alloc: use xalloc-oversized * lib/safe-alloc.c: Include xalloc-oversized.h. (safe_alloc_oversized): Remove. All uses changed to xalloc_oversized. * modules/safe-alloc (Depends-on): Add xalloc-oversized. xalloc: do not exceed PTRDIFF_MAX * lib/xmalloc.c (xcalloc) [HAVE_GNU_CALLOC]: Do not omit xalloc_oversized check, since objects larger than PTRDIFF_MAX bytes have pointer-subtraction problems. malloca: do not exceed PTRDIFF_MAX * lib/malloca.h: Include xalloc-oversized. (nmalloca): Use xalloc_oversized instead of rolling our own. * modules/malloca (Depends-on): * modules/relocatable-prog-wrapper (Depends-on): Add xalloc-oversized. quotearg: pacify GCC better * modules/quotearg (Depends-on): Add minmax, stdint. * lib/quotearg.c: Include minmax.h, stdint.h. (nslots): Now int, as there seems little point to going to extra work merely to support the INT_MAX slot, which nobody ever uses. (quotearg_n_options): Redo size-overflow checks to pacify GCC and to catch (mostly-theoretical) ptrdiff_t problems too. This can be done via one comparison. 2016-12-14 Paul Eggert xalloc-oversized: check for PTRDIFF_MAX too This avoids undefined behavior when subtracting pointers to objects containing more than PTRDIFF_MAX bytes. * lib/xalloc-oversized.h (__xalloc_oversized, xalloc_oversized): Also return 1 if the result would exceed PTRDIFF_MAX> * modules/xalloc-oversized (Depends-on): Add stdint. dfa: fix glitches in previous commit Sorry, I don't know how I managed to commit the wrong version. * lib/dfa.c (MIN): Move up. (xpalloc): Now static. dfa: fix some unlikely integer overflows I found these while reviewing the recent Coverity-related fix. This patch changes part of dfa.c to prefer ptrdiff_t instead of size_t for object counts. Using ptrdiff_t is the style typically used in Emacs; although it wastes a sign bit as sizes can never be negative, it makes -fsanitize=undefined more likely to catch integer overflows in index calculation, and nowadays the upside is typically more important than the downside. Although perhaps the rest of dfa.c should be changed to prefer ptrdiff_t as well (much of dfa.c already does, since it uses state_num which is signed), that is a bigger change and is not needed to fix the bugs I found. * lib/dfa.c: Include stdint.h and intprops.h. (TOKEN_MAX): New macro. (position_set, struct mb_char_classes, struct dfa, maybe_realloc) (charclass_index, parse_bracket_exp, addtok, insert, merge) (realloc_trans_if_necessary, free_mbdata): Use ptrdiff_t instead of size_t for object counts related to xpalloc. This is safe because xpalloc checks that the sizes do not exceed either SIZE_MAX or PTRDIFF_MAX. (xpalloc): New function, mostly taken from Emacs. (maybe_realloc, copy, realloc_trans_if_necessary): Use it. (maybe_realloc): Add NITEMS_MAX to signature. All callers changed. (charclass_index): Check for integer overflow in computing charclass index; it must not exceed TOKEN_MAX - CSET, as CSET is added to it later. (alloc_position_set): Check for integer overflow. On typical platforms this check has zero overhead, since the constant expression is false. (realloc_trans_if_necessary): Remove assertion, which I hope Coverity no longer needs. * modules/dfa (Depends-on): Add intprops, stdint. 2016-12-12 Jim Meyering dfa: add an assertion to avoid coverity false positive * lib/dfa.c (realloc_trans_if_necessary): Otherwise, coverity warned that "newalloc1 - 2" could overflow. 2016-12-13 Arnold D. Robbins dfa: remove DFA_CASE_FOLD flag in favor of RE_ICASE * dfa.h (DFA_CASE_FOLD): Remove. * dfa.c (dfasyntax): Set dfa->syntax.case_fold based on RE_ICASE. 2016-12-13 John W. Eaton link: fix test to declare use of rename() * m4/link.m4 (gl_FUNC_LINK): Include needed with -Werror=implicit-function-declaration 2016-12-12 Bruno Haible fpending: Port to native Windows with MSVC. * lib/fpending.c: Include stdio-impl.h. (__fpending): Include all known implementations. Err out if it's not ported. * m4/fpending.m4 (gl_PREREQ_FPENDING): Remove macro. * modules/fpending (Files): Add lib/stdio-impl.h. (configure.ac): Don't invoke gl_PREREQ_FPENDING. 2016-12-12 Bruno Haible stdioext: Port to native Windows with MSVC. * lib/stdio-impl.h (WINDOWS_OPAQUE_FILE): New macro. (struct _gl_real_FILE): New type. (fp_, _IOREAD, _IOWRT, _IORW, _IOEOF, _IOERR): New macros, for native Windows. * lib/fbufmode.c (fbufmode): Add code for native Windows. * lib/fflush.c (clear_ungetc_buffer): Treat native Windows like the other SystemV derived implementations. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. Reported by Gisle Vanem . 2016-12-11 Jim Meyering non-recursive-gnulib-prefix-hack.m4: remove leading "(" in case stmt * m4/non-recursive-gnulib-prefix-hack.m4: That leading "(" happens to work with most shells, but not with the one provided by many Solaris 10 systems, so running configure with such a /bin/sh evokes e.g., "./configure: syntax error at line 33602: `(' unexpected". Reported by Assaf Gordon in https://lists.gnu.org/r/sed-devel/2016-12/msg00002.html 2016-12-10 Bruno Haible threadlib: Optimize out runtime test on Solaris >= 10. * m4/threadlib.m4 (gl_THREADLIB_BODY): Don't set PTHREAD_IN_USE_DETECTION_HARD if configuring on Solaris 10 or newer. Reported by Peter Felecan at . 2016-12-10 Bruno Haible stdint: Update doc about Solaris 9. * doc/posix-headers/stdint.texi: Add info about Solaris 9. 2016-12-09 Bruno Haible c-ctype tests: Fix link error on Solaris 9. * modules/c-ctype-tests (Depends-on): Add 'isblank'. Reported at . 2016-12-09 Paul Eggert dfa: fix performance bug that recomputes trans * lib/dfa.c (build_state): Fix performance bug introduced in Nov 25 on-demand changes. The bug caused build_state to reset all d->trans elements to -2 even when d->trans was already non-null. Use C99 style decls after statements in this function. same-inode: port to MinGW Here st_ino is always 0, so change the definition of SAME_INODE so that 1 means the two files are the same, 0 with st_ino != 0 means they differ, and 0 with st_ino == 0 means we don’t know. Problem reported by Bruno Haible (Bug#25146). * doc/posix-headers/sys_stat.texi (sys/stat.h): Update. * lib/same-inode.h (SAME_INODE): Return 0 on MinGW. 2016-12-04 Bruno Haible javacomp-script: Support Java 7 and 8. * m4/javacomp.m4 (gt_JAVACOMP): Accept source-version 1.7, 1.8 and target-version 1.7, 1.8. 2016-12-02 Daiki Ueno * gnulib-tool (func_import): Relax the regex used for "LGPLv3+ or GPLv2" rewriting. 2016-12-02 Nikos Mavrogiannopoulos * gnulib-tool (func_import): Adhere to the license guideline when rewriting the license text to "LGPLv3+ or GPLv2": https://www.gnu.org/prep/maintain/maintain.html#Licensing-of-GNU-Packages 2016-12-02 Bruno Haible localcharset: Avoid theoretical buffer overrun. * lib/localcharset.c (locale_charset) [WINDOWS_NATIVE]: Don't use the return value from setlocale if it would lead to a buffer overrun. 2016-12-01 Bruno Haible Relicense some modules under LGPLv2+. Kevin Cernekee's approval is in http://lists.gnu.org/r/bug-gnulib/2016-11/msg00090.html. * modules/fseterr (License): Change to LGPLv2+. * modules/mbchar (License): Likewise. * modules/mbiter (License): Likewise. * modules/mbsnlen (License): Likewise. * modules/wcwidth (License): Likewise. 2016-12-01 KO Myung-Hun scandir: Fix _D_ALLOC_NAMLEN() on OS/2 kLIBC * lib/scandir.c (_D_ALLOC_NAMLEN): Consider the fields after d_name on OS/2 kLIBC. 2016-12-01 KO Myung-Hun alphasort, scandir: Port to OS/2 kLIBC * lib/alphasort.c (alphasort): Implement according to OS/2 kLIBC declaration. * lib/scandir.c (scandir): Add declaration for OS/2 kLIBC. 2016-12-01 KO Myung-Hun relocatable: Fix that /@unixroot prefix is not working on OS/2 kLIBC * lib/relocatable.c (relocate): Do not touch pathname if it is started with '/@unixroot'. 2016-12-01 KO Myung-Hun sys_socket: typedef sa_family_t correctly on OS/2 kLIBC * lib/sys_socket.in.h (sa_family_t): Typedef to unsigned char on OS/2 kLIBC unless TCPV40HDRS is defined. 2016-11-29 Jim Meyering dfa: avoid new infinite loop This would infloop: echo cx | LC_ALL=C grep -E 'c\b[x ]' * lib/dfa.c (dfastate): When constructing a new state table, we could initially declare that we had found a match, and later find that constraints eliminate that possibility, yet continue to use the now stale "matched" indicator. That would lead to an infinite loop. The solution is to update "matched" when necessary. Introduced by commit v0.1-983-g403adf1. 2016-11-27 Norihiro Tanaka dfa: avoid match middle in multibyte character * lib/dfa.c (transit_state): If fails in matching single byte characters on a state including period expression in non-UTF8 multibyte locales, skip trailing bytes. (dfa_supported): Revert previous change. 2016-11-27 Jim Meyering dfa: avoid false match in non-UTF8 multibyte locales * lib/dfa.c (dfa_supported): Treat any non-UTF8 multibyte locale as "not supported" so that callers will resort to using regex-based matcher. This will surely hurt performance, but correctness trumps performance here, and the affected locales are less and less relevant, these days. See grep's bug report https://bugs.gnu.org/24975. 2016-11-27 Mike Frysinger ptsname_r: leverage AC_HEADER_MAJOR to provide major() * lib/ptsname_r.c: Include the appropriate headers. [__sun]: Delete sys/sysmacros.h include. [_AIX || __osf__]: Likewise. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): Depend on AC_HEADER_MAJOR. 2016-11-27 Pádraig Brady md4,md5,sha*: allow _STRING_INLINE_unaligned enable unaligned operation * lib/md4.c (md4_process_bytes): The existing define is made internal in recent versions of glibc, so also use this new public define. * lib/md5.c (md5_process_bytes): Likewise. * lib/sha1.c (sha1_process_bytes): Likewise. * lib/sha256.c (sha256_process_bytes): Likewise. * lib/sha512.c (sha512_process_bytes): Likewise. 2016-11-27 Pádraig Brady maint: use a more standard return from mbrtowc test * m4/mbrtowc.m4 (gl_MBRTOWC_C_LOCALE): Don't return 1 from the test program as this often indicates an unhandled case in the test program. (gl_MBRTOWC_INCOMPLETE_STATE): Likewise. (gl_MBRTOWC_SANITYCHECK): Likewise. (gl_MBRTOWC_NULL_ARG2): Likewise. (gl_MBRTOWC_NUL_RETVAL): Likewise. 2016-11-26 Paul Eggert freopen: work around glibc bug with closed fd Work around glibc bug#15589, where freopen mishandles the case where stdin etc. are already closed. * doc/posix-functions/freopen.texi (freopen): Document the bug. * lib/freopen.c (_GL_ALREADY_INCLUDING_STDIO_H): Define this instead of __need_FILE, as the latter does not work with glibc. Include , for open flags. (rpl_freopen): Work around glibc bug. * m4/freopen.m4 (gl_FUNC_FREOPEN): Check for bug. * modules/freopen (Depends-on): Add fcntl-h. * tests/test-freopen.c (main): Test for bug. 2016-11-25 Paul Eggert fnmatch: fix typo introduced on 2016-08-17 This fixes the port to non-GCC compilers that lack __builtin_expect. * lib/fnmatch.c (__builtin_expect): Change A&&B to !A||B. dfa: simplify with new function fillset * lib/dfa.c (fillset): New function. Use it for clarity when applicable. dfa: fix glitches with on-demand states Also, adjust commentary to better match new code. Some of these glitches predate the recent change. * lib/dfa.c (dfaanalyze): Clear trcount here, so that it counts only non-initial states. (dfastate): Rename locals to better match new roles. Move them into nested scopes if this is easy. Omit unnecessary calls to zeroset. Simplify test for whether to throw in the positions of state 0. Omit C99-ism (decl after statement) since Gawk still wants C89. (build_state): Omit unnecessary test and assignment. Fix some confusion that counted transition tables inaccurately and could cause a memory leak. (dfaexec_main): Redo to make it clearer to the compiler that -1 and -2 are the only negative state numbers here. 2016-11-25 Norihiro Tanaka dfa: addition of new state on demand * src/dfa.c (dfastate): Add argument UC, the current input character. Fill only a group including the character in transition table. (realloc_trans_if_necessary): Add the dummy state which means that a transition table is assigned but the next state is not assigned. (build_state): Return the next state. All callers updated. (transit_state_singlebyte): If we get the dummy state, fill the transition table. (dfaexec_main): Handle the dummy state. (free_mbdata, dfafree): Consider the dummy state. 2016-11-24 Daiki Ueno srclist: sync with released gettext * config/srclist.txt: Set "release" option to the files under $GETTEXT. 2016-11-24 Daiki Ueno srclist: add "release" option * config/srclist.txt: Change the format so that the first column of each line points to the top-level directory of the source archive. * config/srclist-update: Accept "release" option that checks files from the most recently tagged revision in the source archive. 2016-11-21 Bruno Haible snippet/c++defs: Simplify _GL_CXXALIAS_* macros. * build-aux/snippet/c++defs.h [__cplusplus && GNULIB_NAMESPACE] (_GL_CXXALIAS_RPL_1, _GL_CXXALIAS_RPL_CAST_1, _GL_CXXALIAS_SYS, _GL_CXXALIAS_SYS_CAST, _GL_CXXALIAS_SYS_CAST2): Inline and remove member function 'rpl ()' of the wrapper struct. 2016-11-20 Paul Eggert dfa: fix logic typo Problem reported by Stephane Chazelas (Bug#24973). * lib/dfa.c (using_simple_locale): Fix typo that caused some non-simple locales like fr_FR to be treated as simple. 2016-11-20 Jim Meyering fix test driver leaks: exclude, malloc, realloc * tests/test-exclude.c (main): Fix trivial leak. * tests/test-malloc-gnu.c (main): Likewise. * tests/test-realloc-gnu.c (main): Likewise. With these changes, grep's tests are now leak free. I.e., running them with ASAN elicits no failure: make CFLAGS='-O0 -ggdb3' AM_CFLAGS=-fsanitize=address \ AM_LDFLAGS='-fsanitize=address -static-libasan' check 2016-11-11 Bruno Haible libunistring: Relicense under dual "LGPLv3+ or GPLv2" license. * modules/libunistring: (License): Change from LGPL to "LGPLv3+ or GPLv2". * modules/libunistring-optional: Likewise. * modules/unicase/*: Likewise. * modules/uniconv/*: Likewise. * modules/unictype/*: Likewise. * modules/unigbrk/*: Likewise. * modules/unilbrk/*: Likewise. * modules/uniname/*: Likewise. * modules/uninorm/*: Likewise. * modules/unistdio/*: Likewise. * modules/unistr/*: Likewise. * modules/uniwbrk/*: Likewise. * modules/uniwidth/*: Likewise. 2016-11-12 Bruno Haible Relicense some modules under LGPLv2+. Paul Eggert's approval is in http://lists.gnu.org/r/bug-gnulib/2016-11/msg00037.html. Eric Blake's approval is in http://lists.gnu.org/r/bug-gnulib/2016-11/msg00042.html. Ludovic Courtès's approval is in http://lists.gnu.org/r/bug-gnulib/2016-11/msg00038.html. * modules/isnand-nolibm (License): Change to LGPLv2+. * modules/isnanf-nolibm (License): Likewise. * modules/isnanl-nolibm (License): Likewise. 2016-11-19 Bruno Haible Relicense some modules under LGPLv2+. lib/float+.h is already under LGPLv2+ since 2007-07-13, per modules/vasnprintf. Paolo Bonzini's approval for lib/frexp.c and lib/frexpl.c is in http://lists.gnu.org/r/bug-gnulib/2016-11/msg00074.html. All other significant changes to the files in lib/ of these modules are from me. * modules/memcmp2 (License): Change to LGPLv2+. * modules/amemxfrm (License): Likewise. * modules/fpieee (License): Likewise. * modules/fpucw (License): Likewise. * modules/frexp-nolibm (License): Likewise. * modules/frexpl-nolibm (License): Likewise. * modules/printf-frexp (License): Likewise. * modules/printf-frexpl (License): Likewise. * modules/printf-safe (License): Likewise. * modules/signbit (License): Likewise. 2016-11-17 Bruno Haible Enable Unicode decoder safety unconditionally. * lib/unistr.in.h (u32_mbtouc_unsafe): Assume CONFIG_UNICODE_SAFETY. * lib/unistr/u8-mblen.c (u8_mblen): Likewise. * lib/unistr/u8-mbtouc-unsafe.c (u8_mbtouc_unsafe): Likewise. * lib/unistr/u8-mbtouc-unsafe-aux.c (u8_mbtouc_unsafe_aux): Likewise. * lib/unistr/u8-prev.c (u8_prev): Likewise. * lib/unistr/u8-strmblen.c (u8_strmblen): Likewise. * lib/unistr/u8-strmbtouc.c (u8_strmbtouc): Likewise. * lib/unistr/u16-mblen.c (u16_mblen): Likewise. * lib/unistr/u16-mbtouc-unsafe.c (u16_mbtouc_unsafe): Likewise. * lib/unistr/u16-mbtouc-unsafe-aux.c (u16_mbtouc_unsafe_aux): Likewise. * lib/unistr/u16-prev.c (u16_prev): Likewise. * lib/unistr/u16-strmblen.c (u16_strmblen): Likewise. * lib/unistr/u16-strmbtouc.c (u16_strmbtouc): Likewise. * lib/unistr/u32-mblen.c (u32_mblen): Likewise. * lib/unistr/u32-mbtouc-unsafe.c (u32_mbtouc_unsafe): Likewise. * lib/unistr/u32-prev.c (u32_prev): Likewise. * lib/unistr/u32-next.c (u32_next): Likewise. * lib/unistr/u32-strmblen.c (u32_strmblen): Likewise. * lib/unistr/u32-strmbtouc.c (u32_strmbtouc): Likewise. * lib/uniconv/u8-conv-to-enc.c (u8_conv_to_encoding): Likewise. * lib/uniconv/u8-strconv-to-enc.c (u8_strconv_to_encoding): Likewise. * tests/unistr/test-u16-prev.c (check_invalid): Enable the CONFIG_UNICODE_SAFETY tests unconditionally. * tests/unistr/test-u32-mblen.c (main): Likewise. * tests/unistr/test-u32-mbtouc.h (test_function): Likewise. * tests/unistr/test-u32-prev.c (check_invalid): Likewise. * tests/unistr/test-u32-next.c (main): Likewise. * tests/unistr/test-u32-strmblen.c (main): Likewise. * tests/unistr/test-u32-strmbtouc.c (main): Likewise. * tests/unistr/test-u32-mbtouc.c (FULL_SAFETY): Remove macro. * lib/unistr/u8-check.c (u8_check): Remove old dead code. * lib/unistr/u8-mbtouc.c (u8_mbtouc): Likewise. * lib/unistr/u8-mbtouc-aux.c (u8_mbtouc_aux): Likewise. * lib/unistr/u8-mbtoucr.c (u8_mbtoucr): Likewise. * lib/unistr/u8-uctomb.c (u8_uctomb): Likewise. * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Likewise. * lib/unistr/u16-check.c (u16_check): Update comment. * NEWS: Mention the changes that callers should be aware of. 2016-11-19 Bruno Haible relocatable-prog-wrapper: Fix breakage on Cygwin. * modules/relocatable-prog-wrapper (Files): Add lib/stat.c, lib/lstat.c. (Depends-on): Remove intprops. * lib/relocwrapper.c: Update dependency tree. (strerror): Undefine. * build-aux/install-reloc (func_create_wrapper): Do not compile strerror.c and strerror-override.c. Erase stat.o and lstat.o. 2016-11-19 Bruno Haible strerror: Make it compile in C++ mode. * lib/strerror.c (strerror): Ignore the return value of memcpy(). 2016-11-15 Pedro Alves sys_time: add gnulib::timeval for C++ * lib/sys_time.in.h [__cplusplus && defined GNULIB_NAMESPACE]: Define "timeval" in the GNULIB_NAMESPACE namespace, and #undef any timeval macro. 2016-11-14 Pedro Alves snippet/c++defs: fix real-floating arg functions in C++ mode Also, define isfinite, isinf, isnan, signbit in the gnulib namespace instead of in the global namespace. * build-aux/snippet/c++defs.h (_GL_BEGIN_NAMESPACE) (_GL_END_NAMESPACE): New. * lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Use them. (isfinite, isinf, isnan, signbit) [__cplusplus && GNULIB_NAMESPACE]: Define them in the GNULIB_NAMESPACE namespace instead of in the global namespace. * tests/test-math-c++.cc: Check that the isfinite, isinf, isnan, signbit overloads exist in the GNULIB_NAMESPACE namespace, instead of in the global namespace. 2016-11-13 Jim Meyering strftime: don't use __THROW Each use of __THROW would provoke this from gcc-7-to-be: lib/strftime.c:371:1: warning: '__leaf__' attribute has no effect \ on unit local functions [-Wattributes] static int iso_week_days (int, int) __THROW; ^~~~~~ * lib/strftime.c (__THROW): Don't define. Remove each use of __THROW. * lib/strftime.c (memcpy_lowcase, memcpy_uppcase): Remove __THROW. (tm_diff, iso_week_days, __strftime_internal): Likewise. 2016-11-14 Paul Eggert obstack: port to gcc -fcheck-pointer-bounds Problem found by 'make check' failure on bleeding-edge coreutils on an MPX-enabled CPU (Intel Core i3-7100U) running GCC (Ubuntu 6.2.0-5ubuntu12), configured via "./configure --enable-gcc-warnings CFLAGS='-mmpx -fcheck-pointer-bounds -g3 -O2' LDFLAGS='-static-libmpx -static-libmpxwrappers'". * lib/obstack.h (__FLEXIBLE_ARRAY_MEMBER): New macro, copied from fts_.h. (struct _obstack_chunk.contents): Use it. 2016-11-14 Eric Blake strerror_r-posix: Another fix, for HAVE_DECL_STRERROR_R on mingw. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R, gl_FUNC_STRERROR_R_WORKS): Avoid _ONCE variants, which may supply a conflicting AC_DEFINE(). 2016-11-14 Pádraig Brady strptime: fix compile error in recent change * lib/strptime.c (__strptime_internal): Fix ported code. 2016-11-11 Bruno Haible gnulib-tool: Support for the dual "LGPLv3+ or GPLv2" license. * gnulib-tool (--lgpl): Accept value 3orGPLv2. (func_import): Extend determination of license_incompatibilities. (func_create_testdir): Extend table of license compatibility. Handle also the licenses GPLv3+, GPL, LGPLv3+. 2016-11-12 Paul Eggert strftime: tune %q * lib/strftime.c (__strftime_internal): Assume tp->tm_mon is in range. Merge strftime.c changes from glibc This incorporates: 2007-10-16 [BZ #5184] Add tzset_called argument 2008-06-13 [BZ #6612] pass reference to tzset_called around 2009-10-30 Implement Burmese language locale for Myanmar 2010-01-09 Add support for XPG7 testing 2015-09-26 [BZ #18985] out of range data to strftime() causes a segfault 2015-10-20 Convert miscellaneous function definitions to prototype style * lib/strftime.c: Copy glibc license, since gnulib-tool rewrites it anyway and this lessens the difference between gnulib and glibc. (USE_IN_EXTENDED_LOCALE_MODEL) [_LIBC]: Define. (__THROW): Define if standard headers do not. (LOCALE_PARAM): Rename from LOCALE_PARAM_PROTO. All uses changed. (memcpy_locase, memcpy_uppcase, tm_diff, __strftime_internal): Declare with __THROW. (__strftime_internal): Rename from strftime_case_. Add arg for whether tzset is called. All uses changed. Call tzset at most once. Allow %OC, for Burmese. (a_wkday, f_wkday, a_month, f_month) [_NL_CURRENT]: Don't assume values are in range. 2016-11-12 Eric Blake strerror_r-posix: Fix override of AC_FUNC_STRERROR_R * m4/strerror_r.m4 (AC_FUNC_STRERROR_R): New override. (gl_FUNC_STRERROR_R): Don't reuse AC_DEFINE() with a potentially different value. 2006-11-12 Pedro Alves Fix gnulib C++ namespace support and std::frexp * lib/math.in.h (frexp): Use _GL_CXXALIASWARN1 instead of _GL_CXXALIASWARN. 2006-11-12 Pedro Alves GNULIB_NAMESPACE::func need not pull in rpl_func * build-aux/snippet/c++defs.h [__cplusplus && GNULIB_NAMESPACE] (_GL_CXXALIAS_RPL_1, _GL_CXXALIAS_RPL_CAST_1, _GL_CXXALIAS_SYS) (_GL_CXXALIAS_SYS_CAST, _GL_CXXALIAS_SYS_CAST2): Define a wrapper struct instead of a function pointer. 2016-11-09 Frediano Ziglio manywarnings: fix -Wno-missing-field-initializers detection * m4/manywarnings.m4: Fix -Wno-missing-field-initializers detection to be independent of -Wunused-variable. I.E. ensure the latter warning doesn't occur so that detection of the former is accurate. 2016-11-05 Pádraig Brady strftime,strptime: support %q to represent the quarter * lib/strftime.c (strftime_case_): Add %q case. * lib/strptime.c (__strptime_internal): Likewise. * tests/test-strftime.c (quarter_test): A new test case. 2016-11-03 Eric Blake bootstrap: Fix get_version() for AIX 5.3 * build-aux/bootstrap (get_version): Factor out sed script, since indented comments choke AIX 5.3 sed. Reported-by: Michael Felt 2016-11-03 Paul Eggert intprops: port to older XL C Problem reported by Alexander Samoilov in: http://lists.gnu.org/r/bug-gnulib/2016-10/msg00166.html http://savannah.nongnu.org/bugs/?49448 * lib/intprops.h (_GL_HAVE___TYPEOF__) [__IBM__TYPEOF__]: Define to 1 only for XL C 12.1 or later, since this bug occurs in XL C for AIX 6.0 but not in 12.1. 2016-11-02 Pádraig Brady backupfile: initialize default suffix within the implementation * lib/backupfile.c (find_backup_file_name): Initialize the global variable here, to simplify usage, and to only call getenv() when needed. 2016-11-01 Paul Eggert futimens: remove FIXME for old Linux kernels * m4/futimens.m4 (gl_FUNC_FUTIMENS): Belatedy do a "simplify this in 2012" FIXME, like that for utimensat. utimensat: remove FIXME for old Linux kernels * lib/utimensat.c (rpl_utimensat): Update FIXME comment. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Belatedy do a "simplify this in 2012" FIXME, by assuming the file system bug is absent unless demonstrated to be present. We no longer need to worry about Linux kernel 2.6.32 when building with newer kernels. 2016-10-16 Bruno Haible qsort_r: Fix macrology for platforms that lack the function. * m4/stdlib_h.m4 (gl_STDLIB_H): Check for qsort_r. (gl_STDLIB_H_DEFAULTS): Initialize HAVE_QSORT_R. * modules/stdlib (Makefile.am): Substitute HAVE_QSORT_R. * lib/stdlib.in.h (qsort_r): Provide declaration if the function does not exist. * m4/qsort_r.m4 (gl_FUNC_QSORT_R): Use AC_CHECK_FUNCS to test whether the function exists. * modules/qsort_r: Add comments. 2016-10-26 Paul Eggert sys_types: fix Texinfo typos * doc/glibc-functions/gnu_dev_major.texi: * doc/glibc-functions/gnu_dev_makedev.texi: * doc/glibc-functions/gnu_dev_minor.texi: Fix typos. 2016-10-26 John David Anglin getprogname: port to HP-UX See Bug#24805. * lib/getprogname.c (getprogname) [__hpux]: Port. * tests/test-getprogname.c (STREQ) [__hpux]: Special-case for HP-UX limitations on program name length. 2016-10-20 Bruno Haible Update doc about target platforms. * doc/gnulib-intro.texi (Target Platforms): Update list. 2016-10-15 Bruno Haible opendir, readdir, closedir: Relicense under LGPLv2+. * modules/opendir (License): Change to LGPLv2+. * modules/readdir (License): Likewise. * modules/closedir (License): Likewise. 2016-10-16 Bruno Haible Fix conflict between strerror_r-posix module and AC_FUNC_STRERROR_R. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Override the values set by the AC_FUNC_STRERROR_R macro. Define HAVE_DECL_STRERROR_R_ORIG. * lib/strerror_r.c: Use HAVE_DECL_STRERROR_R_ORIG instead of HAVE_DECL_STRERROR_R. 2016-10-16 Bruno Haible Make the 'argp' module work without the 'error' module. * m4/argp.m4 (gl_ARGP): Require AC_FUNC_STRERROR_R. 2016-10-25 Paul Eggert diffseq: restore TOO_EXPENSIVE heuristic * lib/diffseq.h: Problem with diffutils reported by Andreas Schwab (Bug#24715). The simplest solution is to restore the TOO_EXPENSIVE heuristic that I added to GNU diff in 1993, while using a higher threshold to avoid Bug#16848 on smaller files. * lib/diffseq.h (struct context): Restore member too_expensive. (struct partition): Restore members lo_minimal, hi_minimal. (diag, compareseq): Restore arg find_minimal. All uses changed. (diag): Restore the TOO_EXPENSIVE heuristic that I added back in 1993 to make 'diff' run faster (but not as well) on large inputs, but use a threshold of 4096 instead of the old 256. * lib/fstrcmp.c (strcmp_bounded): * lib/git-merge-changelog.c (compute_differences): Adjust to diffseq.h changes. 2016-10-22 Bruno Haible iconv: Avoid compilation error when bootstrapping GNU libiconv. * m4/iconv.m4 (AM_ICONV): When the system does not have an iconv() declaration yet, define ICONV_CONST to empty. 2016-10-15 Bruno Haible Avoid gnulib-tool warnings about the dependencies of 'parse-datetime'. * gnulib-tool (func_get_license): Special-case the 'parse-datetime' module. 2016-10-16 Bruno Haible system-quote tests: Avoid compiler warning on AIX. * tests/test-system-quote-child.c (fopen): Redefine like the system's does. 2016-10-16 Bruno Haible Fix some "gcc -Wall" warnings. * tests/test-ffsl.c (main): Use variable x, not i. * tests/test-posix_spawn3.c (parent_main): Consider the return value of freopen. * tests/test-sethostname1.c (main): Explicitly ignore the return value of sethostname. 2016-10-16 Bruno Haible gnulib-tool: Make --create-testdir on all modules work again. * gnulib-tool (func_create_testdir): Don't include the non-recursive-gnulib-prefix-hack module. 2016-10-21 Daiki Ueno libunistring: change the maintainer to 'all' * modules/gen-uni-tables, modules/libunistring: * modules/ucs4-utf16, modules/ucs4-utf8, modules/unicodeio: * modules/unitypes, modules/utf16-ucs4, modules/utf16-ucs4-unsafe: * modules/utf8-ucs4, modules/utf8-ucs4-unsafe: * modules/unicase/*, modules/uniconv/*, modules/unictype/*: * modules/unilbrk/*, modules/uniname/*, modules/uninorm/*: * modules/unistdio/*, modules/unistr/*, modules/uniwbrk/*: * modules/uniwidth/*: Change the maintainer to 'all'. 2016-10-16 Bruno Haible Simplify "configure: checking ..." messages. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Use AC_MSG_CHECKING instead of AC_MSG_NOTICE. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Likewise. 2016-10-20 Paul Eggert quotearg-tests: pacify gcc -Wall Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2016-10/msg00066.html * tests/test-quotearg-simple.c (use_quote_double_quotes): Move here ... * tests/test-quotearg.h: ... from here. 2016-10-20 Pádraig Brady canonicalize-lgpl: fix for missing SIZE_MAX on older systems * lib/canonicalize-lgpl.c [SIZE_MAX]: Define if needed. Needed on Centos <= 4. 2016-10-20 Jim Meyering printf.m4: fix a bug in detecting printf %j support * m4/printf.m4 (gl_PRINTF_SIZES_C99): Fail any system for which uintmax_t is defined in neither stdint.h nor inttypes.h. Before, this macro might have mistakenly set gl_cv_func_printf_sizes_c99=yes on such a system. Spotted by Zev Weiss. 2016-10-19 Paul Eggert sched: substitute HAVE_SYS_CDEFS_H too Problem reported by Tom G. Christensen in: http://lists.gnu.org/r/bug-gnulib/2016-10/msg00084.html * m4/sched_h.m4 (gl_SCHED_H): Set and substitute HAVE_SYS_CDEFS_H. * modules/sched (Depends-on): Substitute HAVE_SYS_CDEFS_H. 2016-10-19 Pádraig Brady quotearg: never write beyond the returned length * lib/quotearg.c (quotearg_buffer_restyled): Switch to a read-only scan of the string when we initially encounter a single quote when shell quoting, so that if we then switch to a more concise quoting method we will not have written beyond that returned length. This is significant for sh-quote, which has separate routines to determine the length and do the actual quoting. * tests/test-quotearg.h: Reinstate the buffer bounds checking now that we never write more than the returned length. 2016-10-18 Bruno Haible getprogname tests: Avoid failure in packages that use libtool. * tests/test-getprogname.c (main): Strip "lt-" prefix. Based on a patch by Jim Meyering. 2016-10-16 Bruno Haible getprogname: Fix test failure on Cygwin. Comments. * lib/getprogname.h: Add comments. * lib/getprogname.c: Add comments. Fix #elif indentation. * tests/test-getprogname.c (main): On Cygwin, expect a result without ".exe" suffix. 2016-10-16 Bruno Haible Make sure the libunistring detection rejects older versions with a known bug. * modules/unistr/u8-strtok (configure.ac): Bump required version. * modules/unistr/u16-strtok (configure.ac): Likewise. * modules/unistr/u32-strtok (configure.ac): Likewise. 2016-10-18 Bruno Haible sh-quote, system-quote: revert regression of unit test. * tests/test-sh-quote.c (check_one): Do detect buffer overruns. * tests/test-system-quote-main.c (check_one): Likewise. 2016-10-16 Pádraig Brady quotearg: fix stale tests * tests/test-quotearg.c [locale_results]: Add the missing str7 entries to the expected results. * tests/test-system-quote-main.c (check_one): Don't enforce that we don't write beyond the returned length, since that's no longer the case if we switch to a more concise quoting style. * tests/test-sh-quote.c (check_one): Likewise. (main): Adjust for the new more concise quoting style. Reported by Bruno Haible. 2016-10-16 Jim Meyering non-recursive-gnulib-prefix-hack: fix inconsequential typo * m4/non-recursive-gnulib-prefix-hack.m4: Change a hard-coded "lib" to "$1". This macro is always invoked with $1 == lib. Spotted by Bruno Haible 2016-10-16 Bruno Haible Fix a test crash. * tests/test-duplocale.c (main): Skip the test if the 'newlocale' call fails. 2016-10-16 Pádraig Brady test-limits-h: suppress -Woverlength-strings * tests/test-limits-h.c [__GNUC__]: Ignore -Woverlength-strings. 2016-10-15 Bruno Haible gettime, timespec, utimens: Relicense under LGPL. * modules/gettime (License): Change to LGPL. * modules/timespec (License): Likewise. * modules/utimens (License): Likewise. 2016-10-14 Bruno Haible Pádraig Brady canonicalize-lgpl: Support the case path_max > INT_MAX. * lib/canonicalize-lgpl.c (__realpath): Declare n as ssize_t, not int. Fix overflow check, for platforms where 'size_t' is larger than 'long'. 2016-10-13 Jim Meyering getprogname: IBM z/OS: avoid NULL-dereference * lib/getprogname.c (getprogname) [__MVS__]: Don't dereference NULL upon strdup failure. 2016-10-12 Jim Meyering test-stdint: use _GL_VERIFY rather than "verify" for some tests * tests/test-stdint.c (verify_width): Implement with _GL_VERIFY and an abbreviated diagnostic rather than verify with the full one, because the full-length strings would evoke warnings from gcc with -Woverlength-strings. 2016-10-13 Paul Eggert stdint: port SIZE_MAX to glibc s390 Problem reported by Eric Blake in: http://lists.gnu.org/r/bug-gnulib/2016-10/msg00031.html * doc/posix-headers/stdint.texi (stdint.h): Document the fix. * m4/stdint.m4 (gl_STDINT_H): Check that SIZE_MAX has the correct type, if possible. 2016-10-13 Daniel Richard G. getprogname: port to IBM z/OS * lib/getprogname.c (getprogname): Use w_getpsent() to get the name. 2016-10-11 Jim Meyering maint: remove stray space after "." in AC_DEFINE comment. * m4/st_dm_mode.m4 (AC_STRUCT_ST_DM_MODE): Remove space-after-".". * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. 2016-10-05 Jim Meyering long-options: avoid new GCC 7 warning from -Wimplicit-fallthrough * lib/long-options.c (parse_long_options): Add a break statement to avoid this new warning/failure: $ CFLAGS='-O -Werror=implicit-fallthrough' ./gnulib-tool \ --create-testdir --dir=/t/x --with-tests --test long-options ../../gllib/long-options.c: In function 'parse_long_options': ../../gllib/long-options.c:66:12: error: this statement may \ fall through [-Werror=implicit-fallthrough] (*usage_func) (EXIT_SUCCESS); ~^~~~~~~~~~~~~~~~~~~~~~~~~~~ 2016-10-05 Jim Meyering utimecmp: avoid new GCC 7 warning from -Wbool-operation Testing this module would fail when using GCC 7 like this: $ CFLAGS='-O -Werror=bool-operation' ./gnulib-tool --create-testdir \ --dir=/tmp/x --with-tests --test utimecmp ../../gllib/utimecmp.c: In function ‘utimecmp’: ../../gllib/utimecmp.c:291:36: error: ‘~’ on a boolean expression \ [-Werror=bool-operation] time_t s = src_s & ~ (res == 2 * BILLION); ^ ../../gllib/utimecmp.c:370:16: error: ‘~’ on a boolean expression \ [-Werror=bool-operation] src_s &= ~ (res == 2 * BILLION); ^ * lib/utimecmp.c (utimecmp): Do not apply "~" to a boolean. Instead, make it explicit that we intend to apply it to 0 or 1. 2016-10-10 Norihiro Tanaka dfa: save memory for states * src/dfa (dfaexec_main): Beginning of dfa execution, release caches of states if dfa has a lot of caches. 2016-10-10 Eli Zaretskii wchar, wctype-h: fix for MinGW 3.22.2 * lib/wchar.in.h [__MINGW32__]: Add one more condition for special invocation, to fix issues with MinGW 3.22.2 wchar.h when included from . * lib/wctype.in.h [__MINGW32__]: Add special invocation convention for MinGW 3.22.2, to solve issues with their wctype.h when included from . 2016-10-05 Jim Meyering long-options: avoid new GCC 7 warning from -Wimplicit-fallthrough * lib/long-options.c (parse_long_options): Add a break statement to avoid this new warning/failure: $ CFLAGS='-O -Werror=implicit-fallthrough' ./gnulib-tool \ --create-testdir --dir=/t/x --with-tests --test long-options ../../gllib/long-options.c: In function ‘parse_long_options’: ../../gllib/long-options.c:66:12: error: this statement may \ fall through [-Werror=implicit-fallthrough] (*usage_func) (EXIT_SUCCESS); ~^~~~~~~~~~~~~~~~~~~~~~~~~~~ utimecmp: avoid new GCC 7 warning from -Wbool-operation Testing this module would fail when using GCC 7 like this: $ CFLAGS='-O -Werror=bool-operation' ./gnulib-tool --create-testdir \ --dir=/tmp/x --with-tests --test utimecmp ../../gllib/utimecmp.c: In function ‘utimecmp’: ../../gllib/utimecmp.c:291:36: error: ‘~’ on a boolean expression \ [-Werror=bool-operation] time_t s = src_s & ~ (res == 2 * BILLION); ^ ../../gllib/utimecmp.c:370:16: error: ‘~’ on a boolean expression \ [-Werror=bool-operation] src_s &= ~ (res == 2 * BILLION); ^ * lib/utimecmp.c (utimecmp): Do not apply "~" to a boolean. Instead, make it explicit that we intend to apply it to 0 or 1. 2016-10-03 Pádraig Brady quotearg: minimize shell quoting using double quotes * lib/quotearg.c (quotearg_buffer_restyled): If an ASCII single quote in encountered then use double quotes (c style quoting) when possible, as it simplifies the quoting. * tests/test-quotearg-simple.c: Add test cases. * tests/test-quotearg.h (use_quotearg_buffer): Adjust to account for the fact we now may write beyond the returned length. 2016-10-02 Jim Meyering vasnprintf.c: avoid spurious warning from GCC 7 The presence of cpp directives renders this "FALLTHROUGH" comment ineffective, so does not suppress the -Wimplicit-fallthrough warning from GCC 7 built from git on 2016-10-02. * lib/vasnprintf.c (VASNPRINTF): Move comment down past two cpp directives, so that it takes effect once again. This is clearly not a proper change, and I will revert it once this bug is fixed: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77817 2016-10-01 Jim Meyering getprogname: correct the test for a __progname variable * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Use AC_CACHE_CHECK and AC_LINK_IFELSE to check for a global __progname. If found, define HAVE_VAR___PROGNAME. * lib/getprogname.c (getprogname): Reflect the new name of the feature- checked preprocessor symbol: s/HAVE_DECL___PROGNAME/HAVE_VAR___PROGNAME/ 2016-09-28 Jim Meyering u8-uctomb-aux.c: build: placate GCC 7's new -Wimplicit-fallthrough * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Mark each end of fall-through case with a /* fallthrough */ comment. dfa: build: avoid warning from GCC 7's new -Wimplicit-fallthrough * lib/dfa.c (dfassbuild): Mark the end of this case with a /* fallthrough */ comment. getprogname: avoid __progname vs program_invocation_short_name pitfall I.e., don't let the OpenBSD 5.1 fix induce failure when using newer glibc. Would have caused failure with Fedora 25's glibc-2.24-3, but not with Fedora 24's glibc-2.23.1-10. * lib/getprogname.c (__progname): Move this declaration down... (getprogname): ... into the #elif block where used, and make it explicitly "extern". getprogname: port to OpenBSD 5.1 * lib/getprogname.c (__progname) [HAVE_DECL___PROGNAME]: Declare. (getprogname) [HAVE_DECL___PROGNAME]: Return __progname or "?". * modules/getprogname (configure.ac): Move most of this code... * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): ... to this function, increment serial number, and add a test for __progname. https://bugs.gnu.org/24562 Reported by Nelson H. F. Beebe. 2016-09-24 Paul Eggert sched: port to GCC 6.2.1 on macOS Sierra Problem reported by Denis Davydov in: http://lists.gnu.org/r/bug-gnulib/2016-09/msg00056.html * lib/sched.in.h [HAVE_SYS_CDEFS_H]: Include before . * m4/nproc.m4 (gl_PREREQ_NPROC): Include errno.h before sched.h, so that we needn’t worry about the sched.h include bug here. * m4/sched_h.m4 (gl_SCHED_H): Check for sys/cdefs.h, and include it before if it exists, when checking for . tests/init.sh: port Alpine fix to AIX 7.1 * tests/init.sh (compare_): When attempting to use diff -U3, prefer diff -u to -U3 to -c to plain diff. Do not insist on diff -u not outputting a space after leading '+', as the users of 'compare' should not be that picky about its output format. In the AIX 7.1 case, return with diff exit status (or with 2 if trouble), instead of some random nonzero exit status. * tests/test-init.sh (test_compare): Remove space after leading '+', so that AIX 7.1 'diff' passes the test. 2016-09-22 Paul Eggert nl_langinfo: pacify GCC * lib/nl_langinfo.c (ctype_codeset): Remove unused local. (rpl_nl_langinfo): Cast string literals to char *, to pacify GCC. stdint: also set GL_GENERATE_LIMITS_H Problem reported by Jim Meyering in: http://lists.gnu.org/r/bug-gnulib/2016-09/msg00052.html * m4/stdint.m4 (gl_STDINT_H): Also redo the AM_CONDITIONAL. limits-h, stdint: Don't assume extensions, fix typo * m4/limits-h.m4 (gl_LIMITS_H): * m4/stdint.m4 (gl_STDINT_H): Don't assume AC_USE_SYSTEM_EXTENSIONS. * m4/stdint.m4 (gl_STDINT_H): Fix typo in setting of LIMITS_H, reported by Jim Meyering in: http://lists.gnu.org/r/bug-gnulib/2016-09/msg00050.html 2016-09-21 Jim Meyering getprogname: port to AIX * lib/getprogname.c (getprogname) [_AIX]: Use getpid, getprocs64 and strdup to obtain a short program name string. Using code from Bruno Haible and an idea from Bastien ROUCARIÈS, in https://lists.gnu.org/r/bug-gnulib/2010-12/msg00249.html Assaf Gordon reported that this new file would fail to compile on AIX-7.1 32bit. 2016-09-16 Paul Eggert extensions: fix typo in comment * m4/extensions.m4: Sync from Autoconf master. stdint: support new _WIDTH macros * doc/posix-headers/stdint.texi: Document this. * lib/stdint.in.h: Add support for INTMAX_WIDTH. etc. * m4/stdint.m4 (gl_STDINT_H): Require gl_LIMITS_H. Check for support for INTMAX_WIDTH, etc. as well as for support for just C99. * modules/stdint (Depends-on): Add limits-h. (Makefile.am): Substitute HAVE_C99_STDINT_H. * modules/stdint-tests (Depends-on): Add extensions, so that INTMAX_MAX etc. are defined. * tests/test-stdint.c: Verify the new macros. limits-h: new module This adds ISO/IEC TS 18661-1:2014 support to limits.h. * MODULES.html.sh: Add limits-h,and move size_max to stdint section. * doc/posix-headers/limits.texi: Document new module. * lib/limits.in.h, m4/limits-h.m4, modules/limits-h: * modules/limit-h-tests, tests/test-limits-h.c: New files. stdio: don't redefine __USE_MINGW_ANSI_STDIO * m4/stdio_h.m4 (gl_STDIO_H): Don't define __USE_MINGW_ANSI_STDIO if it is already defined. Apparently GNU Emacs relies on this. See: http://lists.gnu.org/r/emacs-devel/2016-09/msg00416.html 2016-09-15 Eric Blake sys_types: avoid glibc 2.25 warnings about major() * m4/sys_types_h.m4 (AC_HEADER_MAJOR): Replace broken version in older autoconf. * doc/posix-headers/sys_types.texi (sys/types.h): Document fix. * doc/glibc-functions/gnu_dev_major.texi (gnu_dev_major): Likewise. * doc/glibc-functions/gnu_dev_makedev.texi (gnu_dev_makedev): Likewise. * doc/glibc-functions/gnu_dev_minor.texi (gnu_dev_minor): Likewise. mountlist: include sysmacros.h for glibc * m4/mountlist.m4 (gl_PREREQ_MOUTLIST_EXTRA): Include AC_HEADER_MAJOR. * lib/mountlist.c (includes): Use correct headers. 2016-09-15 Paul Eggert extensions: port to more ISO C TSes * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Sync from Autoconf master, to add support for more recent ISO C TRs and TSes. 2016-09-13 Paul Eggert intprops: new macro TYPE_WIDTH * lib/intprops.h (TYPE_WIDTH): New macro. (TYPE_MAXIMUM, _GL_SIGNED_INT_MAXIMUM, INT_STRLEN_BOUND): * lib/ftoastr.h (_GL_FLOAT_DIG_BITS_BOUND): * lib/parse-datetime.y (parse_datetime2): Use it. extensions: port to recent ISO C TRs * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Sync from Autoconf master, to add support for recent ISO C TRs. * m4/stdio_h.m4 (gl_STDIO_H): Define __USE_MINGW_ANSI_STDIO here, since AC_USE_SYSTEM_EXTENSIONS no longer does that as the MinGW option is not an extension. 2016-09-11 Paul Eggert dfa: port to Solaris 9 Problems reported by Tom G. Christensen in: http://lists.gnu.org/r/bug-gnulib/2016-09/msg00031.html * modules/dfa (Depends-on): Add isblank. * modules/dfa-tests (dfa_match_aux_LDADD): Rename from test_stat_LDADD, to fix typo. * tests/dfa-match.sh: Don't require 'timeout'; use it if available. 2016-09-10 Jim Meyering strverscmp: avoid link failure on OS X * lib/strverscmp.c [!weak_alias]: Define __strverscmp to strverscmp. Reported by Assaf Gordon in https://bugs.gnu.org/24256#26 2016-08-16 Jim Meyering dfa: new module, importing grep's DFA matcher Since grep's DFA matcher is now being used by two gnulib-enabled projects, grep and sed, it makes sense to version-control its sources and unit tests in one place: here. * modules/dfa: New module. * modules/dfa-tests: New file. * lib/dfa.c: New file, from grep. * lib/dfa.h: Likewise. * lib/localeinfo.c: Likewise. * lib/localeinfo.h: Likewise. * tests/dfa-match-aux.c: Likewise. * tests/dfa-invalid-char-class.sh: Likewise. * tests/dfa-match.sh: Likewise, with minor changes. * MODULES.html.sh (Misc): Add "dfa" to this list. 2016-09-09 Jim Meyering getprogname-tests: don't depend on assert-h * modules/getprogname-tests (Depends-on): Remove assert-h. It was not needed, and in fact would cause build failure for coreutils on some systems. Reported by Assaf Gordon in https: //lists.gnu.org/r/coreutils/2016-09/msg00016.html 2016-09-07 Jim Meyering getprogname-tests: work also when EXEEXT is nonempty * modules/getprogname-tests (Makefile.am): Define EXEEXT. * tests/test-getprogname.c (main): Use it. Suggested by Gisle Vanem. 2016-09-07 Gisle Vanem getprogname: fix errors in previous change * lib/getprogname.c (getprogname) [HAVE_GETEXECNAME]: s/program_invocation_name/base/ [HAVE_DECL___ARGV]: Handle NULL __argv or __argv[0]. 2016-09-08 Pádraig Brady parse-datetime: restrict debug output to input string * lib/parse-datetime.y (parse_datetime2): If we parse all of the input but determine it's invalid, ensure we don't output the now invalid input pointer. This issue was seen with `date -d 'now +1'`. 2016-09-07 Paul Eggert flexmember: new macro FLEXALIGNOF * lib/flexmember.h: Include , for offsetof. (FLEXALIGNOF): Rename from _GL_XALLOC_ALIGNOF, as Emacs can use this macro. Update comments. 2016-09-07 Jim Meyering getprogname: port to systems with __argv (mingw, msvc) * lib/getprogname.c (getprogname): Include "dirname.h" and use last_component: more general than open coding it with hard-coded "/". * lib/getprogname.h (getprogname): Prefer "char const *" consistently. * modules/getprogname (Depends-on): Add dirname-lgpl. (configure.ac): Check for __argv in . * modules/getprogname-tests: New file. * tests/test-getprogname.c: New file. Suggested by Gisle Vanem in https://lists.gnu.org/r/bug-gnulib/2016-09/msg00014.html 2016-09-07 Paul Eggert flexmember: port better to GCC + valgrind With a char[] flexible array member in a struct with nontrivial alignment, GCC-generated code can access past the end of the array, because GCC assumes there are padding bytes to get the struct aligned. So the common idiom of malloc (offsetof (struct s, m), n) does not properly allocate an n-byte trailing member, as malloc’s argument should be the next multiple of alignof (struct s). See GCC Bug#66661: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66661 Although C11 apparently permits this GCC optimization (i.e., there was a bug in Gnulib not in GCC), possibly this is a defect in C11. See the thread containing: https://gcc.gnu.org/ml/gcc-patches/2016-09/msg00317.html * lib/flexmember.h: New file. * lib/fnmatch.c, lib/fts.c, lib/glob.c, lib/idcache.c: * lib/localename.c, lib/time_rz.c: Include flexmember.h. * lib/fnmatch_loop.c (struct patternlist): * lib/localename.c (struct hash_node): Use FLEXIBLE_ARRAY_MEMBER. * lib/fnmatch_loop.c (EXT): * lib/fts.c (fts_alloc): * lib/glob.c (glob_in_dir): * lib/idcache.c (getuser, getuidbyname, getgroup, getgidbyname): * lib/localename.c (gl_lock_define_initialized): * lib/time_rz.c (tzalloc): Use FLEXSIZEOF instead of offsetof. * m4/flexmember.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER): Check that the size of the struct can be taken. * modules/flexmember (Files): Add lib/flexmember.h. * modules/fnmatch, modules/glob, modules/localename (Depends-on): Add flexmember. 2016-09-06 Paul Eggert getprogname: port to Solaris 10 * lib/getprogname.c: Include stdlib.h, for getexecname decl. (getprogname) [HAVE_GETEXECNAME]: Use that, for Solaris 10. * m4/getprogname.m4 (gl_FUNC_GETPROGNAME): Check for getexecname. stdalign: correct mistake in alignof doc Problem reported by Joseph Myers in: https://gcc.gnu.org/ml/gcc-patches/2016-09/msg00340.html * doc/posix-headers/stdalign.texi: Do not imply that C11 prohibits alignof(S) where S is a structure containing a flexible array member. The Gnulib substitute does not support this, but C11 does. 2016-08-18 Pino Toscano main.mk: remove sc_program_name, since there is no more need to use set_program_name in tools (getprogname is enough for most of the cases). * cfg.mk (local-checks-to-skip): Remove sc_program_name. * top/maint.mk (sc_program_name): Remove. 2016-08-18 Pino Toscano Port tests away from progname, since modules that need the program name already depend on getprogname. * modules/acl-tests (Depends-on): Remove progname. * modules/argmatch (Depends-on): Likewise. * modules/argmatch-tests (Depends-on): Likewise. * modules/argp-tests (Depends-on): Likewise. * modules/argp-version-etc-tests (Depends-on): Likewise. * modules/array-list-tests (Depends-on): Likewise. * modules/array-oset-tests (Depends-on): Likewise. * modules/avltree-list-tests (Depends-on): Likewise. * modules/avltree-oset-tests (Depends-on): Likewise. * modules/avltreehash-list-tests (Depends-on): Likewise. * modules/carray-list-tests (Depends-on): Likewise. * modules/copy-file-tests (Depends-on): Likewise. * modules/exclude-tests (Depends-on): Likewise. * modules/fchownat-tests (Depends-on): Likewise. * modules/fdopendir-tests (Depends-on): Likewise. * modules/filenamecat-tests (Depends-on): Likewise. * modules/fstatat-tests (Depends-on): Likewise. * modules/fstrcmp-tests (Depends-on): Likewise. * modules/linked-list-tests (Depends-on): Likewise. * modules/linkedhash-list-tests (Depends-on): Likewise. * modules/mkdirat-tests (Depends-on): Likewise. * modules/nonblocking-pipe-tests (Depends-on): Likewise. * modules/nonblocking-socket-tests (Depends-on): Likewise. * modules/obstack-printf-tests (Depends-on): Likewise. * modules/openat-tests (Depends-on): Likewise. * modules/parse-datetime-tests (Depends-on): Likewise. * modules/pipe-filter-gi-tests (Depends-on): Likewise. * modules/pipe-filter-ii-tests (Depends-on): Likewise. * modules/quotearg-simple-tests (Depends-on): Likewise. * modules/quotearg-tests (Depends-on): Likewise. * modules/rbtree-list-tests (Depends-on): Likewise. * modules/rbtree-oset-tests (Depends-on): Likewise. * modules/rbtreehash-list-tests (Depends-on): Likewise. * modules/spawn-pipe-tests (Depends-on): Likewise. * modules/system-quote-tests (Depends-on): Likewise. * modules/uniname/uniname-tests (Depends-on): Likewise. * modules/uninorm/nfc-tests (Depends-on): Likewise. * modules/uninorm/nfd-tests (Depends-on): Likewise. * modules/uninorm/nfkc-tests (Depends-on): Likewise. * modules/uninorm/nfkd-tests (Depends-on): Likewise. * modules/unistdio/u16-vsnprintf-tests (Depends-on): Likewise. * modules/unistdio/u16-vsprintf-tests (Depends-on): Likewise. * modules/unistdio/u32-vsnprintf-tests (Depends-on): Likewise. * modules/unistdio/u32-vsprintf-tests (Depends-on): Likewise. * modules/unistdio/u8-vsnprintf-tests (Depends-on): Likewise. * modules/unistdio/u8-vsprintf-tests (Depends-on): Likewise. * modules/unistdio/ulc-vsnprintf-tests (Depends-on): Likewise. * modules/unistdio/ulc-vsprintf-tests (Depends-on): Likewise. * modules/unlinkat-tests (Depends-on): Likewise. * modules/version-etc-tests (Depends-on): Likewise. * modules/xalloc-die-tests (Depends-on): Likewise. * modules/xmemdup0-tests (Depends-on): Likewise. * modules/xprintf-posix-tests (Depends-on): Likewise. * modules/xvasprintf-tests (Depends-on): Likewise. * tests/test-argmatch.c: Do not include progname.h. (main) Stop calling set_program_name. * tests/test-argp-version-etc.c: Likewise. * tests/test-argp.c: Likewise. * tests/test-argv-iter.c: Likewise. * tests/test-array_list.c: Likewise. * tests/test-array_oset.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-avltree_oset.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-carray_list.c: Likewise. * tests/test-copy-acl.c: Likewise. * tests/test-copy-file.c: Likewise. * tests/test-exclude.c: Likewise. * tests/test-fchownat.c: Likewise. * tests/test-fdopendir.c: Likewise. * tests/test-filenamecat.c: Likewise. * tests/test-fstatat.c: Likewise. * tests/test-fstrcmp.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-mkdirat.c: Likewise. * tests/test-nonblocking-pipe-main.c: Likewise. * tests/test-nonblocking-socket-main.c: Likewise. * tests/test-obstack-printf.c: Likewise. * tests/test-openat.c: Likewise. * tests/test-parse-datetime.c: Likewise. * tests/test-pipe-filter-gi1.c: Likewise. * tests/test-pipe-filter-gi2-main.c: Likewise. * tests/test-pipe-filter-ii1.c: Likewise. * tests/test-pipe-filter-ii2-main.c: Likewise. * tests/test-quotearg-simple.c: Likewise. * tests/test-quotearg.c: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-rbtree_oset.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. * tests/test-sameacls.c: Likewise. * tests/test-set-mode-acl.c: Likewise. * tests/test-spawn-pipe-main.c: Likewise. * tests/test-system-quote-main.c: Likewise. * tests/test-unlinkat.c: Likewise. * tests/test-version-etc.c: Likewise. * tests/test-xalloc-die.c: Likewise. * tests/test-xfprintf-posix.c: Likewise. * tests/test-xmemdup0.c: Likewise. * tests/test-xprintf-posix.c: Likewise. * tests/test-xvasprintf.c: Likewise. * tests/uniname/test-uninames.c: Likewise. * tests/uninorm/test-u32-nfc-big.c: Likewise. * tests/uninorm/test-u32-nfd-big.c: Likewise. * tests/uninorm/test-u32-nfkc-big.c: Likewise. * tests/uninorm/test-u32-nfkd-big.c: Likewise. * tests/unistdio/test-u16-vsnprintf1.c: Likewise. * tests/unistdio/test-u16-vsprintf1.c: Likewise. * tests/unistdio/test-u32-vsnprintf1.c: Likewise. * tests/unistdio/test-u32-vsprintf1.c: Likewise. * tests/unistdio/test-u8-vsnprintf1.c: Likewise. * tests/unistdio/test-u8-vsprintf1.c: Likewise. * tests/unistdio/test-ulc-vsnprintf1.c: Likewise. * tests/unistdio/test-ulc-vsprintf1.c: Likewise. * tests/test-c-stack.c: (program_name): Do not define. (main): Do not set program_name. * tests/test-closein.c: Likewise. * tests/test-xstrtol.c: Likewise. * tests/test-yesno.c: Likewise. 2016-08-18 Pino Toscano Port modules to use getprogname explicitly, instead of requiring progname to be used (or program_name to be provided). * lib/argmatch.c: Do not include progname.h. [TEST] (program_name): Do not define. [TEST] (main): Call getprogname instead of using program_name. * lib/c-stack.c: Do not include progname.h. (program_name): Do not define. (die): Call getprogname instead of using program_name. * lib/chdir-long.c: Do not include progname.h. [TEST_CHDIR] (main): Do not set program_name. * lib/error.c [!_LIBC]: Include progname.h. [!_LIBC] (program_name): Define using getprogname. * lib/euidaccess.c: Do not include progname.h. [TEST] (main): Do not set program_name. * lib/git-merge-changelog.c: Include getprogname.h instead of progname.h. (usage): Call getprogname instead of using program_name. (main): Likewise. Stop calling set_program_name. * lib/group-member.c: Do not include progname.h. [TEST] (main): Do not set program_name. * modules/argmatch (Depends-on): Add getprogname. * modules/c-stack (Depends-on): Likewise. * modules/error (Depends-on): Likewise. * modules/git-merge-changelog (Depends-on): Likewise. Also remove progname. 2016-09-05 Pino Toscano * NEWS: Document the deprecation of the 'progname' module. 2016-08-18 Pino Toscano getprogname: new module This provides a LGPL module for getting the name of the current program, using the same API found on *BSD systems. * lib/getprogname.c, lib/getprogname.h, m4/getprogname.m4: * modules/getprogname: New files. * MODULES.html.sh (Misc): Add getprogname. 2016-09-02 Jim Meyering manywarnings: add -fno-common * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -fno-common to the list. Quoting the manual, "Compiling with -fno-common is useful on targets for which it provides better performance, or if you wish to verify that the program will work on other systems that always treat uninitialized variable declarations this way [putting it in the data section]." If diffutils had been using this sooner, it would have prevented this duplicate declaration issue: http://git.sv.gnu.org/cgit/diffutils.git/commit/?id=v3.4-10-gc2dc91f 2016-08-31 Simon Josefsson parse-datetime: Fix typo. * lib/parse-datetime.y (parse_datetime2): Fix typo. 2016-08-30 Paul Eggert intprops: tune INT_NEGATE_OVERFLOW for GCC 5 and 6 * lib/intprops.h (INT_NEGATE_OVERFLOW): Tune for platforms like GCC 5 and 6 that have __builtin_sub_overflow but not __builtin_sub_overflow_p. With the recent changes, these platforms are a tiny bit faster with the INT_NEGATE_RANGE_OVERFLOW implementation than with INT_SUBTRACT_OVERFLOW implementation, since the former needs just one runtime comparison whereas the latter needs two. strverscmp: sync with glibc Although this doesn't exactly synchronize with glibc byte-for-byte, it makes the code behave the same as glibc. * lib/strverscmp.c (S_I, S_F, S_Z): Now masks, not powers of 2. (ISDIGIT): Remove, as glibc is sticking with isdigit, and the difference shouldn't matter in practical use. All uses changed back to isdigit. (__strverscmp, strverscmp): Use new glibc method for weak aliases. (next_state): Now unsigned char array; redo elements. (result_type): Now signed char array; redo elements. (__strverscmp): Fix glibc bug 9913 by using new states. * tests/test-strverscmp.c (main): Test glibc bug 9913. 2016-08-29 Jim Meyering xalloc-oversized.h: port __builtin_mul_overflow change to GCC 6.2.0 * lib/xalloc-oversized.h: Port this change to GCC 6.2.0, too, similarly to how it was done to intprops.h. 2016-08-29 Paul Eggert intprops.h: port recent changes to GCC 6.2.0 * lib/intprops.h (__has_builtin): Move earlier. (_GL_HAS_BUILTIN_OVERFLOW): Rename from _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL and don't worry about whether the last argument can be null. All uses changed. (_GL_HAS_BUILTIN_OVERFLOW_P): Also test __has_builtin. (_GL_ADD_OVERFLOW, _GL_SUBTRACT_OVERFLOW, _GL_MULTIPLY_OVERFLOW): Don't try to use 3rd arg null, as this doesn't work on GCC 6.2.0 and it's not clear which GCC versions it works for. (_GL_INT_OP_WRAPV): Use _GL_HAS_BUILTIN_OVERFLOW instead of its definiens. intprops.h: use __typeof__ with GCC 7 * lib/intprops.h (_GL_ADD_OVERFLOW, _GL_SUBTRACT_OVERFLOW) (_GL_MULTIPLY_OVERFLOW): Use __typeof__ as in the GCC manual. This avoids computing the expression's value (which might overflow!). 2016-08-29 Jim Meyering intprops.h, xalloc-oversized.h: work with gcc 7 In gcc 6, __builtin_add_overflow, __builtin_sub_overflow and __builtin_mul_overflow each accept a NULL pointer as the third argument. However in gcc 7, that is no longer accepted. Instead, one must use the "_p"-suffixed names, with which, the third parameter is no longer a pointer. * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW_WITH_NULL): Correct the definition: not true for gcc 7 and subsequent. (_GL_HAS_BUILTIN_OVERFLOW_P): Define. (_GL_ADD_OVERFLOW, _GL_SUBTRACT_OVERFLOW, _GL_MULTIPLY_OVERFLOW): Provide new definitions for gcc 7 and subsequent. * lib/xalloc-oversized.h (xalloc_oversized): Provide a definition that works with gcc-7. intprops.h: fix missing-backslash problems * lib/intprops.h (_GL_ADD_OVERFLOW): Add backslash. (_GL_SUBTRACT_OVERFLOW,_GL_MULTIPLY_OVERFLOW): Likewise. 2016-08-24 Paul Eggert intprops: fix paren typo on old platforms Problem reported by John E. Malmberg in: https://bugs.gnu.org/24300#13 * lib/intprops.h (_GL_INT_OP_WRAPV_LONGISH) [__GNUC__ < 5 && !__has_builtin (__builtin_add_overflow) && (__STDC_VERSION__ < 201112 || _GL__GENERIC_BOGUS) && !defined LLONG_MAX]: Remove stray paren. intprops: port to OpenVMS Problem reported by John E. Malmberg in: https://bugs.gnu.org/24300 * doc/posix-headers/limits.texi: Document the problem. * lib/intprops.h (LLONG_MAX, LLONG_MIN) [__INT64_MAX]: Define if not already defined. 2016-08-19 Assaf Gordon parse-datetime: improve debug implementation Follow-up to commit 12ad79069 ("add optional debug printing"). Improve parse-datetime's debug implementation: remove macros, replace global debug flag variable with a function parameter, use nstrftime for formatting. See: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00021.html * lib/parse-datetime.h: (parse_datetime_debug): Remove global extern. (parse_datetime2): New function, accepts 'flags' parameter, supporting debug flag. Existing interface 'parse_datetime' left unmodified. * lib/parse-datetime.c: (parse_datetime_debug): Remove global variable. (struct parser_control): add 'parse_datetime_debug' member variable. (parse_datetime): Call new function 'parse_datetime2' without debug. (parse_datetime2): Adapted from previous 'parse_datetime', initialize pc.parse_datetime_debug variable as needed. (to_year): Accept new flags parameter, instead of using global variable. (debug_print_current_time,debug_print_relative_time,debug_mktime_not_ok): use struct 'debug' variable instead of global variable. (DEBUG,DEBUG_PRINT_CURRENT_TIME,DEBUG_PRINT_RELATIVE_TIME, DEBUG_MKTIME_NOT_OK,PROGRESS,PROGRESS0): Remove macros. Call correspnding functions directly instead of using macros. * modules/parse-datetime: Add gnulib's strftime module. 2016-08-19 Daniel Richard G. c-strcase-tests: port to EBCDIC * tests/test-c-strncasecmp.c: Allow two c_strncasecmp calls which assume ASCII encoding semantics to run only in ASCII mode, as they fail in EBCDIC. sigpipe-tests: fix typo * tests/test-sigpipe.sh: C, not B. 2016-08-18 Paul Eggert canonicalize-lgpl: fix errno after malloca fails This fixes a typo I recently introduced. Suggested by Bruno Haible in: http://lists.gnu.org/r/bug-gnulib/2016-08/msg00039.html * lib/canonicalize-lgpl.c (__realpath): Don't assume malloca sets errno on failure. 2016-08-17 Paul Eggert strtod: port errno handling to z/OS * lib/strtod.c (strtod): Save and restore errno more reliably. 2016-08-17 Daniel Richard G. strtod: port to z/OS * lib/strtod.c (strtod): Address a couple quirks in the z/OS implementation. 2016-08-17 Paul Eggert strtod: port to z/OS * lib/strtod.c (strtod): Address a couple quirks in the z/OS implementation. regex, string: rename to avoid '__string' * lib/regex.h, lib/string.in.h: Do not use the identifier '__string', as it is effectively reserved by string.h on z/OS. c-strcase-tests, wcwidth-tests: depend on c-ctype * modules/c-strcase-tests, modules/wcwidth-tests (Depends-on): Add c-ctype. 2016-08-17 Daniel Richard G. thread: port to z/OS * lib/glthread/thread.c, lib/glthread/thread.h: Rudimentary gl_thread support for z/OS. maint: port tests to z/OS errno behavior * tests/test-nonblocking-reader.h: * tests/test-nonblocking-writer.h: Accommodate z/OS errno code preferences. (I believe this should still be within spec; IBM is good at following the letter if not the spirit of such things.) maint: preprocessor changes to support z/OS * lib/alloca.in.h, lib/fnmatch.c, lib/get-rusage-as.c: * lib/glob.c, lib/math.in.h, lib/ptsname_r.c: * tests/infinity.h, tests/nan.h, tests/test-canonicalize-lgpl.c: * tests/test-nonblocking-pipe.h: fclose, strstr-simple, wchar: port to z/OS * m4/fclose.m4, m4/strstr.m4, m4/wchar_h.m4: Changes to the Autoconf M4 code to support z/OS. Note that fclose() is broken in a different way on z/OS than it is on other systems, thus the special-case in fclose.m4. iconv_open-utf-tests, iconv-tests: port to EBCDIC * tests/test-iconv-utf.c, tests/test-iconv.c: Added appropriately conditional #pragmas so that the test strings in test-iconv-utf.c are correctly interpreted in ASCII instead of EBCDIC (i.e. 'J' == 0x4A and not 0xD1). This issue could be addressed in a more portable way by simply rewriting all the ASCII literal characters as octal escapes, but then you would lose the partial readability that the strings have now. Also, iconv_open() on z/OS does not recognize "ISO-8859-1", but "ISO8859-1" works. c-strcase-tests, wcwidth-tests: port to EBCDIC * tests/test-c-strcasecmp.c: Include c-ctype.h. (main) [!C_CTYPE_ASCII]: Skip tests that assume ASCII. * tests/test-wcwidth.c: Likewise. 2016-08-17 Paul Eggert stdbool: don't require _Bool for C++ Problem reported by David Seifert in: http://lists.gnu.org/r/bug-gnulib/2016-06/msg00005.html * NEWS, doc/posix-headers/stdbool.texi (stdbool.h): Document this. * m4/stdbool.m4 (AC_CHECK_HEADER_STDBOOL): Make the check more-forgiving for C++, in that it requires only 'bool'. Be a bit stricter about checking that bool and _Bool are compatible in C. 2016-08-16 Paul Eggert getdelim: remove dependency on realloc-posix * lib/canonicalize-lgpl.c (alloc_failed) [!FUNC_REALPATH_WORKS || defined _LIBC]: New function, (__realpath) [!FUNC_REALPATH_WORKS || defined _LIBC]: Use it. Use __set_errno where needed, for consistency. * lib/getdelim.c (alloc_failed): New function. (getdelim): Use it. 2016-08-09 Assaf Gordon parse-datetime: add optional debug printing Print parsing information, warnings, and errors to stderr. * lib/parse-datetime.h (parse_datetimte_debug): New global variable. * lib/parse-datetime.y: (DEBUG_*): Macros calling debug functions if debugging is enabled. (PROGRESS*): Same as DEBUG, for progress reporting. (dbg_printf): Print message to stderr, with 'date' prefix. (struct parser_control): Add 'debug_*_seen' variables. (str_days): Converts day ordinal/number to string (e.g. 'last wed'). (debug_print_current_time, debug_print_relateive_time): Prints the current/relative date/time value of parser_control. (YACC parser syntax): Print parsed parts with DEBUG_* macros. (to_year): Warn about 2-digit year parsing. (yylex): Warn about unrecognized words. (get_effective_timezone): Returns current timezone in minutes. (debug_strf{time,date,datetime}): Convert 'struct tm' to string as clearly and unambigiously as possible. (debug_mktime_not_ok): Print detailed information about failed date/time values. (parse_datetime): Add DEBUG messages for failures, warnings. Add PROGRESS messages for status messages. * modules/parse-datetime: Add 'timegm', 'gettext-h' dependencies. 2016-08-06 Jim Meyering tests/init.sh: exclude dash with bad "local" semantics * tests/init.sh (gl_shell_test_script_): Add a function to eliminate a shell like "dash" (unlike bash, zsh) that has surprising/risky "local var='...'" semantics. Inspired by the problem and discussion in https://bugs.gnu.org/24116#11. 2016-08-02 Ján Tomko maint.mk: expand the prohibit_doubled_word regex This check has a static list of words that are checked for repetitions. Expand it before running the perl script to avoid using expensive captures. This decreases the cost for libvirt from 1.66s to 0.66s. * top/maint.mk (prohibit_doubled_word_expanded_): Define. (sc_prohibit_doubled_word): Use it. 2016-07-26 Ján Tomko useless-if-before-free: skip non-matching lines early * build-aux/useless-if-before-free: First match each line with the simple/quick /\bif\b/ and reject if there is no match. This often saves the cost of the much more involved regular expression. For libvirt, this decreases the cost from 1.44s to 1.02s. 2016-07-26 Ján Tomko maint.mk: speed up sc_po_check sc_po_check would skip files based on their names, or on the existence of files with derived names. Rewrite it to use perl instead of shell to make the check faster. * top/maint.mk (perl_translatable_files_list_): Define. (sc_po_check): Use it. 2016-07-30 Ján Tomko maint.mk: speed up require_config_h_first Instead of spawning three processes per file, rewrite the check in perl and run it once for all the files. * top/maint.mk (perl_config_h_first_): Define. (sc_require_config_h_first): Use it in place of shell code. 2016-07-26 Ján Tomko maint.mk: speed up sc_po_check sc_po_check would skip files based on their names, or on the existence of files with derived names. Rewrite it to use perl instead of shell to make the check faster. * top/maint.mk (perl_translatable_files_list_): Define. (sc_po_check): Use it. 2016-07-15 Paul Eggert obstack: pacify GCC 6 with -Wnull-dereference Problem reported by Assaf Gordon in: http://lists.gnu.org/r/bug-gnulib/2016-07/msg00028.html * lib/obstack.c, lib/obstack.h (obstack_alloc_failed_handler): Declare with __attribute_noreturn__. * lib/obstack.h (__attribute_noreturn__): New macro. 2016-07-13 Eric Blake doc: mention glibc, OS X, Cygwin [S]SIZE_MAX buglet * doc/posix-headers/stdint.texi (stdint.h): Document the bugs. * doc/posix-headers/limits.texi (limits.h): Document the bugs. 2016-07-13 Paul Eggert doc: mention glibc SSIZE_MAX buglet * doc/posix-headers/limits.texi (limits.h): Document the bug. 2016-07-04 Martin Kletzander printf-posix: Fix mingw build Commit 54615b95ff238e235e806855efc46a9abad09f2e changed the regular expression for detecting C symbol prefixes but forgot to qoute square brackets in the command line arguments for grep. That way when building with mingw the condition was false although it ought to be true instead. In particular scenarios this led to the following compile error: Cannot export rpl_printf: symbol not found Cannot export rpl_scanf: symbol not found collect2: error: ld returned 1 exit status Fix this by properly quoting square brackets. 2016-07-03 Paul Eggert mktime: call tzset as per POSIX Problem reported by Ludovic Courtès in: http://lists.gnu.org/r/bug-gnulib/2016-06/msg00068.html * lib/mktime.c (mktime) [!_LIBC && HAVE_TZSET]: Call tzset. * m4/mktime.m4 (gl_FUNC_MKTIME): Check for tzset. 2016-06-26 Pádraig Brady fts: handle readdir() errors * lib/fts.c (fts_build): readdir(3) returns NULL when finished, but also upon error when it will also set errno. Therefore flag the error case from readdir(). We treat the case where no items are read the same as if the dir can't be accessed, i.e. by setting fts_errno to FTS_DNR. 2016-06-24 Paul Eggert intprops: port better to GCC 7 GCC 7 __builtin_add_overflow supports a new usage form, where the last argument is a null pointer, and which merely returns 1 if an overflow would occur. This is a constant expression if all arguments are constants, and should generate faster code when code needs to be generated. * lib/intprops.h (_GL_HAS_BUILTIN_OVERFLOW_WITH_NULL): New macro. (_GL_ADD_OVERFLOW, _GL_SUBTRACT_OVERFLOW, _GL_MULTIPLY_OVERFLOW): Use builtin operations if available. (INT_NEGATE_OVERFLOW): Prefer INT_SUBTRACT_OVERFLOW if builtin operations are available, as it's almost surely faster. 2016-06-23 Paul Eggert intprops-test: port to GCC 6 * tests/test-intprops.c: Ignore -Woverflow if any GCC version, since the bug is not fixed in GCC 6.1. 2016-06-13 Paul Eggert xalloc-oversized: port to GCC 7; fewer warnings GCC 7 will have a better way to deal with integer overflow. Plus, fix a warnings problem reported by Tim Ruehsen in: http://lists.gnu.org/r/bug-gnulib/2016-06/msg00022.html * lib/xalloc-oversized.h (__xalloc_oversized): New macro. (xalloc_oversized): Use plain __builtin_mul_overflow if GCC 7 or later. For GCC 5, use __xalloc_oversized if both args are constants, or if pedantic. 2016-06-08 Paul Eggert regex: port to Sun C Reported by Daiki Ueno. * lib/regcomp.c (regcomp, regerror): Use _Restrict_, not __restrict, in prototype. This fixes a problem I introduced in the 2016-02-19 merge from glibc. 2016-05-31 Paul Eggert stdbool: Restore __bool_true_false_are_defined check * m4/stdbool.m4 (AC_CHECK_HEADER_STDBOOL): __bool_true_false_are_defined is still defined, even with C++11. 2016-05-31 David Seifert (tiny change) stdbool: Port AC_CHECK_HEADER_STDBOOL to C++11 * m4/stdbool.m4 (AC_CHECK_HEADER_STDBOOL): Port to C++11. 2016-05-30 Paul Eggert Use GCC_LINT, not lint FreeBSD and Cygwin #define _Noreturn to empty if 'lint' is defined. Problem reported by Ken Brown in: http://bugs.gnu.org/23640 * doc/posix-headers/stdnoreturn.texi (stdnoreturn.h): Document problem with lint and _Noreturn. * lib/diffseq.h (IF_LINT, IF_LINT2): * lib/fts.c (sccsid): * lib/getndelim2.c (IF_LINT): * lib/gl_anylinked_list2.h (gl_linked_iterator) (gl_linked_iterator_from_to): * lib/gl_anytree_list2.h (gl_tree_iterator) (gl_tree_iterator_from_to): * lib/gl_anytree_oset.h (gl_tree_iterator): * lib/gl_array_list.c (gl_array_iterator) (gl_array_iterator_from_to): * lib/gl_array_oset.c (gl_array_iterator): * lib/gl_carray_list.c (gl_carray_iterator) (gl_carray_iterator_from_to): * lib/idcache.c: * lib/inet_ntop.c (IF_LINT): * lib/regcomp.c (build_charclass_op, create_tree): * lib/regex_internal.c (re_acquire_state) (re_acquire_state_context): * lib/trigl.c (rcsid): * lib/trim.c (IF_LINT): * lib/vasnprintf.c (IF_LINT): * lib/verify.h (assume): Treat GCC_LINT like lint. 2016-05-29 Bruno Haible secure_getenv: Port to many more platforms. * m4/secure_getenv.m4 (gl_PREREQ_SECURE_GETENV): Also check for get*id functions. * lib/secure_getenv.c (secure_getenv): Add alternate implementations for non-BSD Unix platforms and for native Windows. * doc/glibc-functions/secure_getenv.texi: Remove known issue. Prompted by a request from Nikos Mavrogiannopoulos. 2016-05-27 Eric Blake canonicalize: Fix broken probe for realpath. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Fix regression in logic introduced in 54615b95. 2016-05-26 Eric Blake unsetenv: relax to LGPLv2+ * modules/unsetenv (License): Match setenv license. 2016-05-20 Ludovic Courtès gendocs.sh: Set default TOP_NODE_UP_URL in HTML output. Suggested by Gavin Smith . Reported by myglc2 in . * build-aux/gendocs.sh (MANUAL_TITLE, PACKAGE, EMAIL) (commonarg, dirargs, dirs, infoarg, generate_ascii) (generate_html, generate_info, generate_tex, outdir) (source_extra, split, srcfile, texarg): Move above 'version'. (htmlarg): Likewise, and add "-c TOP_NODE_UP_URL=/manual". 2016-05-17 Paul Eggert manywarnings: update for GCC 6.1 * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add GCC 6.1 options that apply to C. * build-aux/gcc-warning.spec: Add GCC 6.1 options that do not apply to C, are obsolescent, etc. 2016-05-12 Paul Eggert glob: size_t overflow checks * lib/glob.c (__has_builtin): New macro. (size_add_wrapv, glob_use_alloca): New static functions. (glob, glob_in_dir): Check for size_t overflow in several places, and fix some size_t checks that were not quite right. glob: don't assume INT_MAX < SIZE_MAX * lib/glob.c (glob): Prefer SIZE_MAX to ~((size_t) 0), as the latter is not portable to (probably theoretical) hosts where SIZE_MAX <= INT_MAX. 2016-05-09 Bruno Haible Fix undefined behaviour in gettext.h. * lib/gettext.h (dcpgettext_expr, dcnpgettext_expr): Avoid accessing a pointer's value after the storage it points to has been freed. Reported by Michael Pyne in https://savannah.gnu.org/bugs/?47847. Spotted by Coverity. 2016-05-08 Paul Eggert git-version-gen: avoid undefined shift Problem reported by Mosè Giordano in: http://lists.gnu.org/r/bug-gnulib/2016-05/msg00012.html * build-aux/git-version-gen: Avoid undefined behavior if invoked with --prefix or --fallback but without a later argument. While we're at it, omit unnecessary quotes. 2016-05-04 Paul Eggert glob: merge glibc changes into lib/glob.c * lib/glob.c (glob_in_dir): Sync with glibc/posix/glob.c, dated 2016-05-04 12:09:35 2016 +0200. Here are the changes: 2016-05-04 CVE-2016-1234: glob: Do not copy d_name field of struct dirent [BZ #19779] 2016-04-29 glob: Simplify the interface for the GLOB_ALTDIRFUNC callback gl_readdir 2015-10-20 Convert miscellaneous function definitions to prototype style 2015-10-20 Convert 113 more function definitions to prototype style (files with assertions) 2015-06-12 Fix getlogin_r namespace (bug 18527). 2014-02-10 Use glibc_likely instead __builtin_expect. 2013-10-20 When glob pattern contains a trailing slash match only directories. Fixes bug 10278. 2013-09-04 glob: silence -Wattribute warnings 2013-06-07 Avoid use of "register" as optimization hint. 2012-09-25 Use size_t instead of int for internal variables in glob (bug 14621) 2011-07-20 Check for overflows in expressions 2011-05-28 Remove unused variable 2011-05-22 Add a few more alloca size checks 2010-03-27 Whitespace fixes 2010-03-27 Fix one more issue with the glob patch 2010-03-24 Fix glob with empty pattern 2008-05-27 Remove useless more "if" tests before "free" * modules/glob (Depends-on): Add stdint. 2016-05-01 Paul Eggert mktime: port to stricter signed overflow checking * lib/mktime.c: Omit 'pragma GCC optimize ("wrapv")'. (long_int): Require width for INT_MAX * 3 * (seconds per year), instead of merely for INT_MAX * 2. In practice platforms that do the latter also do the former. (TIME_T_MIN, TIME_T_MAX, TIME_T_MIDPOINT, SHR): Remove. (shr): New static function, replacing SHR. All uses changed. (mktime_min, mktime_max): New constants, replacing TIME_T_MIN and TIME_T_MAX. All uses changed. (ydhms_diff, guess_time_tm, ranged_convert, __mktime_internal): Use long_int, not time_t. (long_int_avg): New static function, replacing time_t_avg. All uses changed. Round toward positive infinity, as that generates slightly better code. (time_t_add_ok, time_t_int_add_ok): Remove. All uses replaced by INT_ADD_WRAPV. (guess_time_tm): Accept time, not a pointer to it. All uses changed. (convert_time): New static function. (ranged_convert): Use it (ranged_convert): Check for *T out of [mktime_min, mktime_max] range. Use simpler test for loop exit. (__mktime_internal): Store negative of guessed offset, to simplify overflow checking. Remove no-longer-needed test for small time_t overflows. mktime: speed up DEBUG_MKTIME benchmarks Call tzset just once, at the start, rather than for every test case. This lets us measure the CPU cost of mktime as opposed to that of tzset. This is relevant when TZ is not set and glibc is being used. This speeds up tests by a factor of 40 on my Fedora 23 x86-64 platform. * lib/mktime.c (main) [DEBUG_MKTIME]: Call localtime at the start, to call tzset and as a sanity check. Later on, use localtime_r instead of localtime. mktime: resurrect DEBUG_MKTIME testing * lib/mktime.c [DEBUG_MKTIME]: Do not include . Include , for strcmp. mktime: simplify DEBUG_MKTIME * lib/mktime.c (DEBUG_MKTIME): Define to 0 if not defined. Simplify later usage accordingly. Port mktime_internal offset to unsigned time_t This avoids some assumptions about wraparound arithmetic on signed integer overflow. * lib/mktime-internal.h (mktime_offset_t): New type. (mktime_internal): Use it in decl. * lib/mktime.c, lib/timegm.c (mktime_offset_t) [_LIBC]: New type. * lib/mktime.c (__mktime_internal, localtime_offset): * lib/timegm.c (timegm): Use it. * m4/mktime.m4 (gl_TIME_T_IS_SIGNED): New macro. (gl_FUNC_MKTIME): Require it. 2016-04-27 Paul Eggert xstrtol: prohibit monstrosities like "1bB" Problem reported by Young Mo Kang in: http://bugs.gnu.org/23388 * lib/xstrtol.c (__xstrtol): Allow trailing second suffixes like "B" only if the first suffix needs a base. * tests/test-xstrtol.sh: Test this. 2016-04-21 Pádraig Brady xstrtod: reinstate setting of *result upon ERANGE * lib/xstrtod.c (XSTRTOD): The user may decide to use the returned limits upon ERANGE, so allow and document that. 2016-04-20 Tino Calancha (tiny change) xstrtod: modify *result only if no errors * lib/xstrtod.c (XSTRTOD). 2016-04-19 Paul Eggert btowc: document problems in C locale * doc/posix-functions/btowc.texi (btowc): Mention incompatibility with mbrtowc. See: http://bugs.gnu.org/23269#32 2016-04-13 Paul Eggert mktime: improve integer overflow checking * lib/mktime.c: Include stdbool.h, intprops.h, verify.h. (WRAPV): Remove; no longer needed. (verify): Remove. Replace all uses with call to verify.h 'verify'. (TYPE_IS_INTEGER, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove. Use intprops.h defns instead. (leapyear, isdst_differ, time_t_add_ok, time_t_int_ok): Use bool for Boolean, for clarity. (time_t_add_ok, time_t_int_add_ok): Use INT_ADD_WRAPV to detect integer overflow. * modules/mktime (Depends-on): Add intprops, stdbool, verify. intprops: check two's complement assumption Suggested by Eric Blake in: http://lists.gnu.org/r/bug-gnulib/2016-04/msg00016.html * lib/intprops.h: Include . Verify that signed char, short, int, long, and (if available) long long are two's complement. * modules/intprops (Depends-on): Add 'verify'. intprops, mktime, strtol: assume two's complement These macros were not portable to every conforming C11 ones' complement platform. It's not worth the hassle of porting to some platforms that use ones' complement or signed magnitude, as such platforms are almost purely theoretical nowadays and porting even to some of them makes the code harder to review for little practical benefit. Problem reported by Florian Weimer in: https://sourceware.org/ml/libc-alpha/2016-04/msg00295.html * lib/intprops.h (TYPE_TWOS_COMPLEMENT, TYPE_ONES_COMPLEMENT) (TYPE_SIGNED_MAGNITUDE, _GL_INT_TWOS_COMPLEMENT): * lib/mktime.c (TYPE_TWOS_COMPLEMENT): * lib/strtol.c (TYPE_TWOS_COMPLEMENT, TYPE_ONES_COMPLEMENT) (TYPE_SIGNED_MAGNITUDE): Remove. All uses rewritten to assume two's complement, which is all we can reasonably test nowadays anyway. * top/maint.mk (_intprops_names): Remove the removed macros. 2016-04-11 Paul Eggert stdint: port to strict C11 left shift * lib/stdint.in.h (_STDINT_MIN, _STDINT_MAX): Pacify clang -Wshift-negative-value, which should be an issue only on clang setups where stdint.h does not conform to C11 or to C++11. Problem reported by Philipp Stephani in: http://bugs.gnu.org/23261 2016-04-09 Paul Eggert mbrtowc: work around glibc bug#19932 Fix mbrtowc so that it never returns -1 in the C locale, as this conflicts with a future version of POSIX http://austingroupbugs.net/view.php?id=663#c2738 and causes problems with GNU grep: http://bugs.gnu.org/23234 See glibc bug 19932: https://sourceware.org/bugzilla/show_bug.cgi?id=19932 * doc/posix-functions/mbrlen.texi (mbrlen): * doc/posix-functions/mbrtowc.texi (mbrtowc): Document the glibc bug. * lib/mbrtowc.c [C_LOCALE_MAYBE_EILSEQ]: Include hard-locale.h, locale.h. (rpl_mbrtowc): Work around the C_LOCALE_MAYBE_EILSEQ bug, if the bug is possible. * m4/mbrtowc.m4 (gl_MBRTOWC_C_LOCALE): New macro. (gl_FUNC_MBRTOWC): Use it, and define C_LOCALE_MAYBE_EILSEQ as needed. * modules/hard-locale (License): Now LGPLv2+, for mbrtowc. * modules/mbrtowc (Depends-on): Add hard-locale. * modules/mbrtowc-tests (Files, TESTS): Add tests/test-mbrtowc5.sh. * tests/test-mbrtowc.c (main): Test for bug fix if arg is '5'. * tests/test-mbrtowc5.sh: New file. 2016-04-03 Pedro Alves stdint: detect good enough pre-C++11 stdint.h in C++ mode When gnulib is configured in C++ mode for a system with a working C99 implementation of stdint.h that predates C++11, gnulib ends up substituting stdint.h anyway. This works on most targets, but on e.g., 64-bit MinGW, it doesn't, as gnulib's substitute assumes LP64, while MinGW is LLP64. Instead of trying to detect the right types, detect good-enough-pre-C++11 stdint.h and in such case define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS in config.h. * m4/stdint.m4 (gl_STDINT_H): Always define __STDC_CONSTANT_MACROS / __STDC_LIMIT_MACROS while checking whether the system stdint.h conforms to C99. If it does, check whether it hides symbols behind the __STDC_{CONSTANT|LIMIT}_MACROS macros. Then if it does, define those macros in config.h. 2016-04-03 Paul Eggert argp: merge changes from glibc Among other things, this should fix problems found by a Coverity scan and reported by Andrei Borzenkov: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00015.html http://lists.gnu.org/r/bug-gnulib/2016-01/msg00016.html * lib/argp-ba.c, lib/argp-fmtstream.c, lib/argp-fmtstream.h: * lib/argp-fs-xinl.c, lib/argp-help.c, lib/argp-namefrob.h: * lib/argp-parse.c, lib/argp-pv.c, lib/argp-pvh.c, lib/argp-xinl.c: * lib/argp.h: Merge changes from glibc. * tests/test-argp-2.sh: Adjust to match new behavior. 2016-04-01 Paul Eggert stddef: support configuring with g++ Problem reported by Ángel González in: http://lists.gnu.org/r/bug-gnulib/2016-04/msg00003.html * lib/stddef.in.h (_GL_STDDEF_ALIGNAS, max_align_t): Do not define if _GCC_MAX_ALIGN_T is defined. 2016-03-25 Paul Eggert test-framework-sh: minor cleanups * tests/init.sh (testdir_prefix_): Output a trailing newline, since strictly speaking POSIX requires this. (setup_): Do not use the variable 'fail', as that makes the trace output harder to read ('fail' is typically used by tests to mean the test failed). Treat // portably. Check that new directory is not merely a sibling of the tmp dir. Avoid unnecessary invocation of tr. test-framework-sh: revert port to NetBSD 7.0 It was a false alarm; I misinterpreted Assaf Gordon's report. * tests/init.sh (testdir_prefix_, pfx_, template_length_): Restore. (test_dir_): Adjust to mktempd_ change. (mktempd_): Restore 2nd arg. Use -t again. (base_template_, template_, nx_): Resurrect old code. Port better to Alpine Linux Its diff implementation does not support -c, but does support -U3. Problem reported by Assaf Gordon in: http://bugs.gnu.org/23107#13 * tests/init.sh (diff_opt_): New var. (compare_): Prefer diff -U3 to diff -c to plain diff. 2016-03-24 Paul Eggert test-framework-sh: port to NetBSD 7.0 Problem reported by Assaf Gordon in: http://bugs.gnu.org/23107#13 * tests/init.sh (testdir_prefix_, pfx_, template_length_): Remove. All uses removed. (test_dir_): Adjust to mktempd_ change. (mktempd_): Omit 2nd arg. Stop using -t, as it is not portable. (base_template_, template_, nx_): Simplify by hardcoding. 2016-03-22 Paul Eggert gitlog-to-changelog: suppress ignored chatter * build-aux/gitlog-to-changelog: Do not warn about skipping an SHA if it would have been ignored anyway. 2016-03-22 Geert Janssens setlocale: add "sv" to Windows language table * lib/setlocale.c (language_table) [W32]: Add "sv". Reported in . 2016-03-21 Paul Eggert sys_select: port to new Cygwin Problem reported by Ken Brown in: https://lists.gnu.org/r/bug-gnulib/2016-03/msg00054.html * lib/sys_select.in.h [__CYGWIN__]: Avoid "unknown type name" diagnostics. 2016-03-17 Jim Meyering test-userspec.c: do not trigger gcc's new -Wmisleading-indentation * tests/test-userspec.c (main): Remove unnecessary braces and fix misleading indentation. Here is the diagnostic gcc-6.0-to-be issued: test-userspec.c:176:9: error: statement is indented as if it were \ guarded by... [-Werror=misleading-indentation] { ^ test-userspec.c:173:7: note: ...this 'if' clause, but it is not if (!diag && !T[i].result) ^~ 2016-03-15 Paul Eggert time_rz: port to clang -Wunused-const-variable * lib/time_rz.c (TZ): Remove. All uses removed. std-gnu11: improve clang support * m4/std-gnu11.m4: Sync with autoconf, incorporating: 2016-03-15 Also try clang 2016-03-15 Port C11 and C++11 testing to clang select: port more to Intel 2016.1.150 compiler Problem reported by Balázs Hajgató in: http://lists.gnu.org/r/bug-gnulib/2016-03/msg00036.html * m4/select.m4 (gl_FUNC_SELECT): Require AC_C_RESTRICT. 2016-03-14 Paul Eggert select: try to port to 2016.1.150 compiler Problem reported by Balázs Hajgató in: http://lists.gnu.org/r/bug-gnulib/2016-03/msg00026.html * lib/sys_select.in.h (select): Use 'restrict' on arguments where POSIX specifies 'restrict'. 2016-03-13 Paul Eggert localename-tests: memory allocation fixes * tests/test-localename.c (test_locale_name) (test_locale_name_thread): Don't call freelocale on a locale that was the base of a successful newlocale, as that results in a double free. Problem reported by Assaf Gordon. (test_locale_name_thread): Free saved names after use, to pacify gcc -fsanitize=address. 2016-03-08 Paul Eggert intprops: make .h file license match module * lib/intprops.h: Change the license wording to match glibc format. This is what is in modules/intprops anyway. See: https://sourceware.org/bugzilla/show_bug.cgi?id=19738#c8 2016-03-08 Eric Blake acl: fix missing return on Cygwin * lib/set-permissions.c (set_acls) [HAVE_FACL && GETACL]: Don't fall off end of function. Fixes http://bugs.gnu.org/22949 2016-03-05 Bruno Haible extern-inline: port to PGI CC * m4/extern-inline.m4 (gl_EXTERN_INLINE): For PGI CC, don't use the keyword 'inline'. Reported by Adam James Stewart in: http://lists.gnu.org/r/bug-gnulib/2016-03/msg00006.html 2016-02-20 Paul Eggert signbit: port back to pre-C++11 GCC * lib/math.in.h (signbit): Do previous change only if __cplusplus < 201103. See Jonathan Wakely in: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/UY3VX3W7XEXYTUKHG5BALU4ACUD7ZLGE/ 2016-02-19 Kamil Dudka mountlist: recognize autofs-mounted remote file systems, too Originally reported at: https://bugzilla.redhat.com/1309247 * lib/mountlist.c (ME_REMOTE): Return true if a file system is named "-hosts" because it is used by autofs to mount remote file systems. 2016-02-19 Paul Eggert signbit: port to C++ with GCC 6 * lib/math.in.h (signbit) [__cplusplus]: Do not replace with GCC builtin. Reported by Orion Poplawski in: http://lists.gnu.org/r/bug-gnulib/2016-02/msg00005.html * lib/regex_internal.h (IDX_MAX) [_REGEX_LARGE_OFFSETS]: Now SSIZE_MAX. regex: make it closer to libc Make Idx a signed type, rather than possibly unsigned. The unsignedness was not really buying us anything, since the code overflows for other reasons before getting to PTRDIFF_MAX. Making it signed allows us to use -1 and -2 with abandon, like libc does, thus lessening the number of differences between gnulib and libc. Also, it should help avoid gratuitous warnings like the one reported by Nelson H. F. Beebe in: http://bugs.gnu.org/22702 * lib/regex.h (__re_idx_t): Remove. All uses changed to regoff_t. regex: merge patches from libc 2015-10-21 Joseph Myers 2015-10-20 Joseph Myers Convert miscellaneous function definitions to prototype style. * lib/regcomp.c (re_compile_pattern, re_set_syntax) (re_compile_fastmap, regcomp, regerror, regfree, re_comp): * lib/regexec.c (regexec, re_match, re_search, re_match_2, re_search_2) (re_search_2_stub, re_search_stub, re_set_registers, re_exec) (re_search_internal): Convert to prototype-style function definition. Use internal_function for internal functions. 2016-02-10 Paul Eggert stdalign: port to older HP and IBM cc * lib/stdalign.in.h (_Alignas): Port better to older HP and IBM C compilers, by checking their version numbers. These version numbers appear in MariaDB and in Qt code that dates way back and that conditiionally uses the 'aligned' attribute. 2016-02-09 Paul Eggert stdalign: port to clang 3.7.0 Problem reported by Herbert J. Skuhra in: http://lists.gnu.org/r/emacs-devel/2016-02/msg00476.html * lib/stdalign.in.h (alignas): Fix typo that prevented 'alignas' from being defined on clang 3.7.0, which has a buggy stdalign.h. See: https://llvm.org/bugs/show_bug.cgi?id=26547 2016-02-08 Paul Eggert readdir_r: now obsolescent * doc/posix-functions/readdir_r.texi (readdir_r): Now obsolescent. * lib/mountlist.c (read_file_system_list): Add a FIXME. 2016-02-06 Paul Eggert misc: port better to gcc -fsanitize=address Without these patches, ./configure CFLAGS='-fsanitize=address' would compute incorrect values. This patch fixes some (but not all) test failures with recent glibc, with this configuration. * m4/acl.m4 (gl_ACL_GET_FILE): * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): * m4/getdelim.m4 (gl_FUNC_GETDELIM): * m4/getgroups.m4 (gl_FUNC_GETGROUPS): * m4/getline.m4 (gl_FUNC_GETLINE): * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): * m4/regex.m4 (gl_REGEX): * m4/strndup.m4 (gl_FUNC_STRNDUP): * tests/test-calloc-gnu.c (main): * tests/test-duplocale.c (main): * tests/test-getgroups.c (main): * tests/test-getline.c (main): * tests/test-inttostr.c (main): * tests/test-localename.c (test_locale_name) (test_locale_name_thread, test_locale_name_environ) (test_locale_name_default): * tests/test-regex.c (main): * tests/test-setlocale1.c (main): * tests/test-stat.h (test_stat_func): Free heap-allocated storage before exiting. * m4/asm-underscore.m4 (gl_ASM_SYMBOL_PREFIX): Don't match *_foo symbols inserted by AddressSanitizer. * tests/test-regex.c, tests/test-stat.c: Include stdlib.h, for 'free'. 2016-02-02 Jim Meyering verify-tests: also remove stray test-verify.Tpo * modules/verify-tests (Makefile.am): Arrange for "make clean" to remove the test-verify.Tpo file that is left behind by the automake-generated rule upon compilation failure. Otherwise, that .Tpo file would cause a failed "make distcheck" at least for grep. 2016-02-02 Paul Eggert std-gnu11: new module This makes it easier for applications to prefer C11 and C++11 to older variants, when compiling C and C++ code. Unlike most m4/*.m4 files, m4/std-gnu11.m4 is GPLed, as it copies a nontrivial chunk of GPLed Autoconf source code. * COPYING: Mention the m4/*.m4 copyright situation. * MODULES.html.sh (std-gnu11): New module. * m4/std-gnu11.m4, modules/std-gnu11: New files. 2016-01-25 Paul Eggert get-permissions, strftime: fix grammar in comments * lib/get-permissions.c, lib/strftime.c: Merge into the comments some grammar fixes Alan Mackenzie made to GNU Emacs. 2016-01-25 Daiki Ueno gettext: mark as obsolete Suggested by Paul Eggert in: https://lists.gnu.org/r/bug-gnulib/2016-01/msg00101.html * modules/gettext (Status): Mark as obsolete. (Notice): Suggest to use 'gettext-h' instead. * modules/gettext-h (Description): Suggest GNU gettext, instead of the 'gettext' module. 2016-01-24 Paul Eggert gnulib-tool: don't give up on ln -s so easily * gnulib-tool (func_ln_s): Don't give up on a later ln -s merely because an earlier one failed. The targets could be on different file systems. Problem reported by KO Myung-Hun in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00081.html closedir: fix OS/2-related typos Problem reported by KO Myung-Hun in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00107.html * m4/closedir.m4 (gl_FUNC_CLOSEDIR): Fix a couple of typos in the last couple of changes. 2016-01-24 KO Myung-Hun openat_proc_name: fix that last '/' is overwritten on OS/2 kLIBC * lib/openat-proc.c (openat_proc_name): Increase dirlen by 1 after copying a directory. 2016-01-24 Paul Eggert regex: treat [x] as x if x is a unibyte encoding error Problem reported by Aharon Robbins in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00091.html * lib/regcomp.c (parse_byte) [!_LIBC && RE_ENABLE_I18N]: New function. (build_range_exp) [!_LIBC && RE_ENABLE_I18N]: Use it. closedir, dirfd, opendir: port to OpenSolaris 5.10 * m4/closedir.m4 (gl_FUNC_CLOSEDIR): * m4/dirfd.m4 (gl_FUNC_DIRFD): * m4/opendir.m4 (gl_FUNC_OPENDIR): Don't use ${word##pat} substitution, as it doesn't work in OpenSolaris 5.10 /bin/sh. Problem reported by Assaf Gordon in: http://bugs.gnu.org/22443#11 2016-01-23 Paul Eggert bootstrap: use American spelling * build-aux/bootstrap: Honor American spelling. 2016-01-22 Karl Berry * doc/posix-functions/localtime.texi, * doc/posix-functions/localtime_r.texi: @item needed for @itemize text. 2016-01-21 Bruno Haible hash-pjw-bare: fix comment * lib/hash-pjw-bare.h (hash_pjw_bare): Fix comment. wcwidth: Replace also on OpenBSD 5.8 * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Check the value of wcwidth(0xFF1A). * doc/posix-functions/wcwidth.texi: Update. 2016-01-20 Pádraig Brady gnu-web-doc-update: fix addition of new files If there were already added (emnpty) dirs, then cvs aborts the add with the message: cvs [add aborted]: there is a version in <./dirname> already * build-aux/gnu-web-doc-update: Add directories separately to the addition of files, to avoid the above issue impacting the addition of files. 2016-01-19 Daiki Ueno utimens-tests: avoid pulling gettext .m4 files Although this is not the right fix to the original problem: http://lists.gnu.org/r/bug-gnulib/2013-01/msg00086.html it makes it possible again for consumer projects to use arbitrary version of gettext, through the steps described at: http://www.gnu.org/software/gnulib/manual/html_node/gettextize-and-autopoint.html See here for details: https://lists.gnu.org/r/bug-gnulib/2016-01/msg00079.html * modules/futimens-tests (Depends-on): Add 'gettext-h' in place of 'gettext'. * modules/utimens-tests (Depends-on): Add 'gettext-h' in place of 'gettext'. 2016-01-18 Paul Eggert regex: pacify static checkers Problem and draft fix reported by Aharon Robbins in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00082.html * lib/regcomp.c (build_charclass_op, create_tree) [lint]: Clear memory to pacify static checkers. regex: fix [ diagnostic Problem and fix reported by Aharon Robbins in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00082.html * lib/regcomp.c (REG_EBRACK_IDX): Fix misleading diagnostic about [. regex: fix memory leaks Problem and draft fix reported by Aharon Robbins in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00082.html * lib/regcomp.c (build_range_exp, build_charclass_op) * lib/regex_internal.c (re_dfa_add_node): Fix memory leak on failure. 2016-01-18 Pádraig Brady fts: don't unconditionally use leaf optimization for NFS NFS st_nlink are not accurate on all implementations, leading to aborts() if that assumption is made. See * lib/fts.c (leaf_optimization_applies): Remove NFS from the white list, and document the issue. 2016-01-15 Paul Eggert KO Myung-Hun gnulib-tool: don't assume ln -s works * gnulib-tool (func_ln_s): New function. (func_ln): Use it. 2016-01-15 KO Myung-Hun utimes: detect utimes() correctly on OS/2 kLIBC utimes() of OS/2 kLIBC has some limitations. 1. OS/2 itself supports a file date since 1980 year in local time. 2. OS/2 itself supports only even seconds for a file time. 3. utimes() of OS/2 kLIBC does not work on an opened file. * m4/utimes.m4: Detect utimes() correctly on OS/2 kLIBC. * doc/posix-functions/utimes.texi: Document the above limitations of utimes() on OS/2 kLIBC. 2016-01-15 Paul Eggert KO Myung-Hun openat_proc_name: port to OS/2 kLIBC OS/2 kLIBC provides a function to retrive a path from a fd. Use it instead of /proc/self/fd. * lib/openat-proc.c (openat_proc_name): Don't assume file name length is less than INT_MAX. Port to OS/2 kLIBC with __libc_Back_ioFHToPath(). 2016-01-14 KO Myung-Hun stdint: check _INTPTR_T_DECLARED for intptr_t etc. OS/2 kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. * lib/stdint.in.h (intptr_t, uintptr_t): Check _INTPTR_T_DECLARED before defining them. opendir, closedir, dirfd, fdopendir: port to OS/2 kLIBC * lib/closedir.c (closedir): Unregister fd if closedir() succeeds. * lib/dirent.in.h (_gl_register_dirp_fd, _gl_unregister_dirp_fd): Declare on kLIBC. * lib/dirfd.c (struct dirp_fd_list): New. Structures to keep track of fd associated with dirp. (_gl_register_dirp_fd): New. Register fd associated with dirp to dirp_fd_list. (_gl_unregister_dirp_fd): New. Unregister fd with closing it. (dirfd): Implemented for kLIBC. * lib/fdopendir.c (fdopendir): Implemented for kLIBC. * lib/opendir.c (opendir): New. Register fd and dirp pair if open() succeeds. * m4/closedir.m4 (gl_FUNC_CLOSEDIR): Replace if OS/2. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. (REPLACE_DIRFD): Define to 1 if replaced. * m4/opendir.m4 (gl_FUNC_OPENDIR): Likewise. * modules/closedir (Depends-on): Add dirfd. * modules/dirfd (Depends-on): Add 'test $REPLACE_DIRFD = 1' to errno condition. (configure.ac): Add dirfd to LIBOBJS if $REPLACE_DIRFD = 1 as well. * modules/opendir (Depends-on): Add dirfd. dup, dup2, fcntl: support a directory fd on OS/2 kLIBC On OS/2 kLIBC, dup(), dup2() and fcntl() do not work on a directory fd. * lib/dup.c (dup_nothrow): New. * lib/dup2.c (klibc_dup2dirfd): New. dup2() for a directory fd. (klibc_dup2): New. * lib/fcntl.c (klibc_fcntl): New. * m4/dup.m4 (gl_FUNC_DUP): Check if dup() works on a directory fd. * m4/dup2.m4 (gl_FUNC_DUP2): Check if dup2() works on a directory fd. * m4/fcntl.m4 (gl_FUNC_FCNTL): Check if F_DUPFD works on a directory fd. pipe_filter_ii_execute: port to OS/2 kLIBC Pipes on kLIBC do not support O_NONBLOCK like Win32. * lib/pipe-filter-ii.c (start_wrapper, _beginthreadex, CloseHandle, WaiForSingleObject, WaitForMultipleObjects): New on OS/2 kLIBC. Reuse Win32 code on OS/2 kLIBC. * lib/spawn-pipe.c: Reuse Win32 code on OS/2 kLIBC. * lib/w32spawn.h: Do not include windows.h on OS/2 kLIBC. wchar: fix "conflicting types" error for __wcwidth on OS/2 kLIBC On OS/2 kLIBC, wcwidth is a macro that expands to the name of a static inline function. The implementation of wcwidth in wcwidth.c causes a "conflicting types" error. * lib/wchar.in.h: Undefine wcwidth on OS/2 kLIBC. w32spawn: clear SHELL_SPECIAL_CHARS and SHELL_SPACE_CHAR on OS/2 kLIBC spawn() on OS/2 kLIBC is not silly like one on Windows * libc/w32spawn.h (SHELL_SPECIAL_CHARS, SHELL_SPACE_CHAR): Set both to empty string on OS/2 kLIBC. pipe-filter-aux: undefine HAVE_SELECT on KLIBC On OS/2 kLIBC, select() works only on sockets. * lib/pipe-filter-aux.h (HAVE_SELECT): Undefine on OS/2 kLIBC. binary-io: don't put fd in binary mode if it is a console on EMX * lib/binary-io.h (SET_BINARY): Don't put fd in binary mode if it is a console on EMX. 2016-01-15 Pádraig Brady doc: mention unfixed issues with unsupported localtime() values * doc/posix-functions/localtime.texi: Mention that FreeBSD 10 returns nonsense for localtime(2^56). * doc/posix-functions/localtime_r.texi: Likewise. 2016-01-14 Pádraig Brady doc: mention setlocale() issues on OpenBSD * doc/posix-functions/setlocale.texi: Mention setlocale(LC_ALL,"") never fails, and the need to check categories individually. 2016-01-14 Pádraig Brady sig2str: list all signals on FreeBSD >= 7 FreeBSD >= 7 is contravening POSIX by not defining NSIG to the maximal statically defined signal value. It does define _SIG_MAXSIG though, so base SIGNUM_BOUND on that. * lib/sig2str.h (SIGNUM_BOUND): Define to (_SIG_MAXSIG - 2) where available, even when NSIG is defined. 2016-01-13 Paul Eggert acl-permissions: port to USE_ACL==0 platforms I ran into this problem when building bleeding-edge GNU Emacs with gcc -fsanitize=address on Fedora 23. On this platform the ACL library does not pass the 'configure' test and Emacs then does not build due in part to what appear to be typos in the ACL part of Gnulib. * lib/acl-internal.c (free_permission_context): * lib/acl-internal.h (struct permission_context): Test whether USE_ACL is nonzero, not whether it is defined. 2016-01-12 Martin Sebor mktime: rename macro to avoid glibc clash * lib/mktime.c [DEBUG] (DEBUG): Rename to DEBUG_MKTIME. See: https://sourceware.org/ml/libc-alpha/2016-01/msg00267.html 2016-01-12 Paul Eggert Port "$@" to OpenIndiana ksh93 In http://lists.gnu.org/r/bug-autoconf/2015-12/msg00000.html Pavel Raiskup reports that ${1+"$@"} runs afoul of a bug in /bin/sh (derived from ksh 93t+ 2010-03-05). ${1+"$@"} works around an ancient bug long-dead shells, so remove the workaround. * build-aux/announce-gen, build-aux/do-release-commit-and-tag: * build-aux/gitlog-to-changelog, build-aux/gnu-web-doc-update: * build-aux/prefix-gnulib-mk, build-aux/update-copyright: * build-aux/useless-if-before-free, tests/test-update-copyright.sh: Use "$@" instead of ${1+"$@"}. Port Universal Time settings to strict POSIX * build-aux/announce-gen, build-aux/bootstrap: * build-aux/do-release-commit-and-tag, build-aux/git-version-gen: * build-aux/gitlog-to-changelog, build-aux/gnu-web-doc-update: * build-aux/gnupload, build-aux/mkinstalldirs: * build-aux/move-if-change, build-aux/prefix-gnulib-mk: * build-aux/update-copyright, build-aux/useless-if-before-free: * build-aux/vc-list-files, tests/test-strftime.c: Use TZ="UTC0", not TZ="UTC". Either works on GNU platforms, but POSIX says the behavior of TZ="UTC" is undefined. 2016-01-02 Paul Eggert msvc-inval: fix problem with unset shell var Problem reported by Karl Berry in: http://lists.gnu.org/r/bug-gnulib/2016-01/msg00004.html * modules/msvc-inval (Depends-on): AC_REQUIRE gl_MSVC_INVAL instead of merely calling it. * modules/msvc-nothrow (Depends-on): Likewise for gl_MSVC_NOTHROW. 2016-01-01 Pádraig Brady tests: for compare_(), use cmp -s where available * tests/init.sh (compare_): Only fall back to cmp without the POSIX defined -s option, where this is not available. 2016-01-01 Paul Eggert version-etc: new year * build-aux/gendocs.sh (version): * doc/gendocs_template: * doc/gendocs_template_min: * doc/gnulib.texi: * lib/version-etc.c (COPYRIGHT_YEAR): Update copyright dates by hand in templates and the like. * all files: Run 'make update-copyright'. 2015-12-31 Paul Eggert human: fix output buffer overrun by 1 * lib/human.c (human_readable): Fix off-by-one typo in buffer calculation that could lead to a one-byte buffer overrun. 2015-12-28 Daiki Ueno maint: fix operator precedence in mbrtowc test This is a fix for test breakage introduced by commit 45228d96; the equality expression must be parenthesized when negated with '!', otherwise we always get: test-mbrtowc.c:49: assertion 'ret == (size_t)(-2)' failed * m4/mbrtowc.m4 (gl_MBRTOWC_EMPTY_INPUT): Negate the entire expression. * m4/mbrlen.m4 (gl_MBRLEN_EMPTY_INPUT): Likewise. 2015-12-23 James Youngman regexprops-generic: update from regex.h * doc/regexprops-generic.texi: update by running the regexprops binary from findutils (the command line is 'regexprops "Regular Expressions" generic'). The recent (ish) change (5a5a9388) to regex.h aligning gnulib with GNU grep had made this document out-of-date. 2015-12-23 Pádraig Brady strftime-tests: avoid false failure on OS X * tests/test-strftime.c (struct localtime_rz_test): Add an ahistorical member which is used to warn rather than fail when tm_isdst isn't set for such entries. This is the case for "1970-01-01 13:00:00 +1300 (NZDT)" on Darwin 13/14 at least. 2015-12-20 Kamil Dudka fts: ensure leaf optimization is used for NFS NFS provides usable dirent.d_type but not necessarily for all entries of large directories. See * lib/fts.c (leaf_optimization_applies): Append NFS on the white list. 2015-12-20 Pádraig Brady fts: enable leaf optimization for XFS XFS provides usable dirent.d_type only for DT_DIR, but the noleaf optimization still applies. * lib/fts.c (leaf_optimization_applies): Add XFS to the white list. 2015-12-17 Paul Eggert intprops: comment fix * lib/intprops.h: Fix comment. Reported by Pádraig Brady in: http://lists.gnu.org/r/bug-gnulib/2015-12/msg00013.html intprops-test: work around GCC bug 68971 Problem reported by Pádraig Brady in: http://lists.gnu.org/r/bug-gnulib/2015-12/msg00011.html * tests/test-intprops.c: Ignore -Woverflow in GCC 6 and earlier. (main): Add a case that better tests 64-bit long in this area. 2015-12-09 Pavel Raiskup gnulib-tool: allow multiple --local-dir usage * gnulib-tool: Use --local-dir to construct compound $local_gnulib_path path instead of $local_gnulib_dir. Determine PATH_SEPARATOR early. (local_gnulib_dir): Rename into $local_gnulib_path everywhere. (func_gnulib_dir): Cut out PATH_SEPARATOR detection code into func_determine_path_separator because that needs to be detected earlier now. (func_determine_path_separator): New function. (func_path_foreach, func_path_foreach_inner): New functions. (func_path_prepend, func_path_append): Likewise. (func_lookup_local_file, func_lookup_local_file_cb): Likewise. (func_lookup_file, func_all_modules): Use new functions to work with local_gnulib_path. (func_modules_in_dir, func_exists_module): New callbacks for func_path_foreach. (func_exists_module, func_get_tests_module): Likewise. (func_is_local_file, func_should_symlink): New helper methods. (func_add_file, func_update_file): Use new func_should_symlink instead, DRY. (func_reconstruct_cached_local_gnulib_path): New helper. (func_reconstruct_cached_dir): New callback. (func_import): The cached_local_gnulib_dir renamed to cached_local_gnulib_path similarly to local_gnulib_dir. Use new func_reconstruct_cached_local_gnulib_path. (func_count_relative_local_gnulib_path): New sub-method. (func_create_testdir): Use func_should_symlink, DRY. (func_create_megatestdir): Use new functions to work with local_gnulib_path correctly. (func_append_local_dir): New helper. 2015-12-08 Pádraig Brady fix freadptr to work with ungetc on all uClibc configs Reported at https://bugs.busybox.net/show_bug.cgi?id=4099 where GNU coreutils cut(1) generates invalid output on uClibc when __UCLIBC_HAS_STDIO_GETC_MACRO__ is not defined. * lib/freadptr.c (freadptr): Return NULL if there are ungotten chars. In this case freadseek() will iterate again to process the ungotten character. 2015-11-13 Paul Eggert xalloc-oversized: improve performance with GCC 5 * lib/xalloc-oversized.h (xalloc_oversized): Improve performance with GCC 5 by using __builtin_mul_overflow. 2015-11-10 Paul Eggert intprops: new public macro EXPR_SIGNED Emacs can use this macro, so make it public. * doc/intprops.texi (Arithmetic Type Properties): Rename from 'Integer Type Determination', since some of these macros apply to non-integer types. Clarify what kinds of constant expressions these macros return. Say when the arguments can be non-integers. Mention newly published macro EXPR_SIGNED. * lib/intprops.h (EXPR_SIGNED): Rename from _GL_INT_SIGNED, to make it public. All uses changed. intprops: fix typo in clang port * lib/intprops.h (_GL_INT_OP_WRAPV): Fix misspelling of '__builtin_add_overflow' that is not caught by compiler. 2015-11-05 Paul Eggert test-timespec: fix typo in previous change * tests/test-timespec.c (main): Fix typo that reduced test quality. timespec-sub: fix overflow bug; add tests * lib/timespec-add.c (timespec_add): * lib/timespec-sub.c (timespec_sub): Work even if time_t is narrower than int (a theoretical possibility). Redo code for a bit more clarity. * lib/timespec-sub.c (timespec_sub): Fix off-by-2 bug if a.tv_sec == TYPE_MINIMUM (time_t) and 0 < b.tv_sec. * modules/timespec-tests, tests/test-timespec.c: New files. intprops-test: suppress -Woverlength-strings Problem reported by Pádraig Brady in: http://lists.gnu.org/r/bug-gnulib/2015-11/msg00008.html It is not worth the hassle to port this test to compilers that cannot handle long strings in diagnostics. * tests/test-intprops.c [__GNUC__]: Ignore -Woverlength-strings. 2015-11-03 Pádraig Brady quotearg: add quotearg_n_style_colon() This quotes with default options of the specified style, but with quoting enabled for instances of ':'. * lib/quotearg.h (quotearg_n_style_colon): Description and declaration. * lib/quotearg.c (quotearg_n_style_colon): New function implementation. 2015-11-04 Paul Eggert intprops: revise _WRAPV macros, revert _OVERFLOW The incompatible changes to the _OVERFLOW macros were too much of a hassle in practice, so revert them. Instead, change the new _WRAPV macros to make them closer in behavior to GCC 5's new builtin_add_overflow etc. functions. No other software was using these newly-added macros yet, so this should be OK. * NEWS: Revert previous change, since the incompatible change has been reverted, and nobody used the incompatible version. * doc/intprops.texi (Wraparound Arithmetic, Integer Type Overflow): Document revised behavior. (Integer Range Overflow): Adjust example to match above revisions. * lib/intprops.h (INT_ADD_OVERFLOW, INT_SUBTRACT_OVERFLOW) (INT_MULTIPLY_OVERFLOW): Revert previous change, so that these can be used in integer constant expressions again. (INT_CONST_ADD_OVERFLOW, INT_CONST_SUBTRACT_OVERFLOW) (INT_CONST_MULTIPLY_OVERFLOW): Remove, as these are no longer needed. (INT_CONST_ADD_WRAPV, INT_CONST_SUBTRACT_WRAPV) (INT_NEGATE_WRAPV, INT_CONST_MULTIPLY_WRAPV, INT_DIVIDE_WRAPV) (INT_REMAINDER_WRAPV, INT_LEFT_SHIFT_WRAPV): Remove, as they did not seem that useful. (INT_ADD_WRAPV, INT_SUBTRACT_WRAPV, INT_MULTIPLY_WRAPV) (_GL_INT_OP_WRAPV, _GL_INT_OP_WRAPV_LONGISH) (_GL_INT_OP_WRAPV_VIA_UNSIGNED): Support new semantics. (__has_builtin): New macro, if not alreay defined. (_GL__GENERIC_BOGUS, _GL_INT_OP_CALC, _GL_INT_OP_CALC1): New macros. * tests/test-intprops.c (INT_CONST_DIVIDE_OVERFLOW) (INT_CONST_REMAINDER_OVERFLOW, INT_CONST_LEFT_SHIFT_OVERFLOW) (INT_CONST_DIVIDE_WRAPV, INT_CONST_REMAINDER_WRAPV) (INT_CONST_LEFT_SHIFT_WRAPV): Remove. (CHECK_SBINOP, CHECK_SSUM, CHECK_SUM1, CHECK_SSUM1) (CHECK_SDIFFERENCE, CHECK_SPRODUCT, CHECK_PRODUCT1, CHECK_SPRODUCT1): New macros. (CHECK_BINOP, CHECK_UNOP, main, CHECK_SUM): Test new behavior. 2015-11-03 Jim Meyering intprops: add parentheses for when OP has precedence lower than "-" * lib/intprops.h (_GL_INT_OP_WRAPV_VIA_UNSIGNED): In "a OP b - c", "a OP b" must be parenthesized for when OP is like "<<", which has lower precedence than the following "-". Reported by Pádraig Brady. 2015-11-03 Pádraig Brady quotearg: constify get_quoting_style parameters * lib/quotearg.h (get_quoting_style): Mark parameter as const. * lib/quotearg.c (get_quoting_style): Likewise. 2015-11-02 Pádraig Brady quotearg: add support for $'' shell escaping * lib/quotearg.h: Add "shell-escape" and "shell-escape-always" items and descriptions. * lib/quotearg.c (quotearg_buffer_restyled): Add support for the above types by quoting like "shell", but using $'...' syntax for non printable characters, which should provide unambiguous printable output for any input. * tests/test-quotearg-simple.c: Update accordingly. 2015-11-02 Pádraig Brady maint: use a more standard return from mbrtowc test * m4/mbrtowc.m4 (gl_MBRTOWC_EMPTY_INPUT): Don't return 1 from the test program as this is non standard and often indicates an unhandled case in the test program. * m4/mbrlen.m4 (gl_MBRLEN_EMPTY_INPUT): Likewise. 2015-10-30 Paul Eggert intprops: add WRAPV and const flavors for GCC 5 If available, use GCC 5's builtin functions for efficient integer overflow checking. Also, add macros like INT_ADD_WRAPV efficently and safely compute the low-order bits of the correct answer. A downside of these efficient functions is that they cannot be used in constant expressions, so add macros like INT_CONST_ADD_OVERFLOW and INT_CONST_ADD_WRAPV that can be used even in constant expressions. * NEWS: Document the incompatible changes to INT_ADD_OVERFLOW etc. * doc/intprops.texi (Integer Properties, Integer Type Overflow): Document the changes. (Wraparound Arithmetic): New section. (Integer Range Overflow): Put this subsection last, since it's least useful. * lib/intprops.h (INT_CONST_ADD_OVERFLOW) (INT_CONST_SUBTRACT_OVERFLOW, INT_CONST_MULTIPLY_OVERFLOW): New macros, with the meaning that INT_ADD_OVERFLOW etc. used to have. (INT_CONST_ADD_WRAPV, INT_CONST_SUBTRACT_WRAPV) (INT_NEGATE_WRAPV, INT_CONST_MULTIPLY_WRAPV, INT_DIVIDE_WRAPV) (INT_REMAINDER_WRAPV, _GL_INT_OP_WRAPV, _GL_EXPR_CAST) (_GL_INT_OP_WRAPV_LONGISH, INT_ADD_WRAPV, INT_SUBTRACT_WRAPV) (INT_MULTIPLY_WRAPV, _GL_OP_OVERFLOW, _GL_OP_WRAPV, _GL_OP_WRAPV_GENSYM): New macros. (INT_ADD_OVERFLOW, INT_SUBTRACT_OVERFLOW, INT_MULTIPLY_OVERFLOW): Generate calls to GCC builtins if available, for speed. * tests/test-intprops.c (INT_CONST_DIVIDE_OVERFLOW) (INT_CONST_REMAINDER_OVERFLOW, INT_CONST_LEFT_SHIFT_OVERFLOW) (INT_CONST_DIVIDE_WRAPV, INT_CONST_REMAINDER_WRAPV) (INT_CONST_LEFT_SHIFT_WRAPV): New macros. (main, CHECK_BINOP, CHECK_UNOP, CHECK_SUM, CHECK_PRODUCT) (CHECK_QUOTIENT, CHECK_REMAINDER): Test WRAPV and CONST flavors (when available) too. 2015-10-30 Pádraig Brady doc: use extended timezone format in iso-8601 example * doc/parse-datetime.texi: The standard states that extended format is to be used consistently throughout. Note that lib/parse-datetime.y can handle either tz format. 2015-10-25 Paul Eggert stdalign: port to Sun C 5.9 * doc/posix-headers/stdalign.texi: Document this. * lib/stdalign.in.h (_Alignas): Sun C 5.9 also supports __attribute__ ((__aligned__ (...))). 2015-10-20 Paul Eggert time_rz: fix comment about tzalloc * lib/time_rz.c (tzalloc): Fix comment. 2015-10-18 Paul Eggert stdalign: work around pre-4.9 GCC x86 bug * lib/stdalign.in.h (_Alignof): Work around bug in pre-4.9 GCC on x86, when -std=gnu11 is used. Problem reported by Jim Meyering in: http://lists.gnu.org/r/bug-gnulib/2015-10/msg00038.html 2015-10-18 Pádraig Brady maint.mk: sc_tight_scope: remove extraneous expressions * top/maint.mk (tight_scope): This is not really required since commit 3ef58f46 as sed_wrap ensures we don't get an empty expression that matches all nm entries. But it does remove extraneous entries that may be confusing or cause issue in future maintenance. 2015-10-18 Paul Eggert time_rz: return NULL if localtime_r fails * lib/time_rz.c (localtime_rz): Return NULL if localtime_r fails, while still attempting to pacify bleeding-edge GCC. fts: port to C11 alignof * doc/posix-headers/stdalign.texi (stdalign.h): Document the C11 restriction. * lib/fts.c: Include stddef.h, for max_align_t. (fts_alloc): Align using max_align_t, not FTSENT. * modules/fts (Depends-on): Add stddef. 2015-10-18 Jim Meyering time_rz: avoid warning from bleeding-edge gcc's -Wnonnull Compiling with gcc version 6.0.0 20151017 (experimental) (GCC), I would see this: lib/time_rz.c: In function 'localtime_rz': lib/time_rz.c:292:15: error: nonnull argument 'tm' compared to NULL \ [-Werror=nonnull] if (tm && !save_abbr (tz, tm)) ^ That was complaining about "tm" because it is a parameter that was declared with the __nonnull__ attribute. * lib/time_rz.c (localtime_rz): Don't bother setting "tm" to the result of localtime_r. 2015-10-17 Jim Meyering maint.mk: _gl_TS_function_match: fix "extern" name extracting regexp * top/maint.mk (_gl_TS_function_match): This heuristic extern-function- name-extraction regexp mistakenly used \S+, and would mistakenly extract "*F" from "extern int *F()" rather than the desired "F". Use \w+ instead. 2015-10-17 Jim Meyering maint.mk: sc_tight_scope: factor and support OS X * top/maint.mk (_gl_tight_scope): Address three issues: - factor out four instances of code that wraps a string in "^...$" - allow nm-reported symbol names to have an optional leading "_" - add "main" to the list of ignored variable names, because on os x, "main" has nm-reported type "S" in the variable-checking section. 2015-10-16 Dmitry Smirnov safe-alloc-tests: fix typo in license header * tests/test-safe-alloc.c: Mention LGPL 2.1, not 3.1 2015-10-15 Simon Reinhardt copy-file: fix mem leak in error case * lib/copy-file.c (qcopy_file_preserving): Free the 32KiB buffer upon error opening or performing I/O to the src and dest files. 2015-10-15 Mike Frysinger localename: control langinfo.h inclusion This header is only used to work around buggy behavior in old versions of glibc, so do not include it all the time. Otherwise we get build failures on systems that do not provide langinfo.h. * lib/localename.c: Wrap langinfo.h include with same ifdefs used in the source later on. The patch was originally submitted to gettext as: https://lists.gnu.org/r/bug-gettext/2015-10/msg00011.html 2015-10-13 Paul Eggert binary-io, math, pthread, sys_socket, u64, unistd: port to strict C * lib/binary-io.c, lib/math.c, lib/pthread.c, lib/sys_socket.c: * lib/u64.c, lib/unistd.c: Append 'typedef int dummy;', to pacify compilers that are picky about empty translation units. 2015-10-12 Pino Toscano accept4-tests: fix to avoid non portable flags * tests/test-accept4.c (main): Pass only SOCK_* flags to accept4(), as they are the only documented ones, and passing others may trigger EINVAL (seen on FreeBSD 10.1-RELEASE). * doc/glibc-functions/accept4.texi: Mention that we don't provide the SOCK_CLOEXEC or SOCK_NONBLOCK defines. 2015-10-06 Pavel Raiskup gnulib-tool: fix tests of 'extensions' module This complements f8fe25fab60e3c687a124 commit. * gnulib-tool (func_emit_pre_early_macros): New function, it wraps emitting of initial gl_EARLY macros. (func_import, func_create_testdir): All dumps of gl_PROG_AR_RANLIB replaced with func_emit_pre_early_macros call. 2015-10-06 Paul Eggert unicase/locale-language: fix typo in utf-8 cookie * lib/unicase/locale-languages.gperf: Fix gperf input file format. Problem reported by Zbigniew Jędrzejewski-Szmek. 2015-10-02 Paul Eggert xalloc: do not worry about GCC 5 warning on 32 bit * lib/xalloc.h: Revert previous change. I found a better way to fix this in coreutils. 2015-10-02 Pádraig Brady xalloc: avoid GCC 5.1 warning on 32 bit * lib/xalloc.h: Disable -Wstrict-overflow for uses of xalloc_oversized(), which was seen to give this warning on GCC 5.1 on 32 bit: "assuming signed overflow does not occur when simplifying conditional". 2015-10-02 Daiki Ueno uniname/uniname-tests: avoid compiler warnings * tests/uniname/test-uninames.c (fill_names, fill_aliases): Remove unused local variables. (test_alias_lookup): Fix alias name display in failure cases. 2015-09-26 Paul Eggert c-ctype: do not worry about EBCDIC + char signed Drop support for EBCDIC with char being signed, as this breaks too many programs. Problem reported by Ben Pfaff in: http://lists.gnu.org/r/bug-gnulib/2015-09/msg00053.html * lib/c-ctype.h: Verify that we are not using EBCDIC with char being signed. (_C_CTYPE_LOWER_A_THRU_F_N): New macro. (_C_CTYPE_LOWER_N, _C_CTYPE_A_THRU_F): Use it. (_C_CTYPE_DIGIT, _C_CTYPE_LOWER, _C_CTYPE_PUNCT, _C_CTYPE_UPPER): (c_isascii, c_isgraph, c_isprint, c_ispunct, c_tolower, c_toupper): * tests/test-c-ctype.c (test_all): Simplify by assuming standard char values cannot be negative. * tests/test-c-ctype.c (NCHARS, to_char): Remove; all uses removed. 2015-09-25 Paul Eggert c-ctype: port better to z/OS EBCDIC Problems reported by Daniel Richard G. in: http://lists.gnu.org/r/bug-gnulib/2015-09/msg00050.html * lib/c-ctype.h (_C_CTYPE_CNTRL): Rewrite in terms of the C standard escapes and _C_CTYPE_OTHER_CNTRL. (_C_CTYPE_OTHER_CNTRL): New macro. * tests/test-c-ctype.c (test_all): Test from CHAR_MIN, not from SCHAR_MIN, as the functions are defined only from values promoted from char or from unsigned char, not necessarily from signed char. 2015-09-25 Pavel Raiskup gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash The gl_PROG_AR_RANLIB (it is always called by gl_EARLY) sets AR and ARFLAGS variables. Doing this unconditionally could break later Automake's AM_PROG_AR invocation (at least it's AC_CHECK_TOOLS call to detect correct 'ar' binary). Original purpose of the gl_PROG_AR_RANLIB was only to handle the Amsterdam Compiler Kit, so make the previous code to have effects only on ACK, and rather automatically call the Automake's AM_PROG_AR as soon as possible to decide other cases. References: http://lists.gnu.org/r/bug-gnulib/2015-07/msg00001.html * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): AC_BEFORE AM_PROG_AR. Set the AR/ARFLAGS to ACK defaults OR call AM_PROG_AR. If neither is possible, keep setting AR/ARFLAGS to reasonable defaults. * gnulib-tool (func_import): Put the gl_USE_SYSTEM_EXTENSIONS right before gl_PROG_AR_RANLIB into gnulib-comp.m4 (if the 'extensions' module is used. * modules/extensions (configure.ac-early): Remove as this snippet is added to gnulib-comp.m4 earlier anyway. 2015-09-25 Paul Eggert sockets: MS Windows initalization fixes Problem reported by Test User in: http://lists.gnu.org/r/help-shishi/2015-09/msg00001.html * lib/sockets.h (SOCKETS_1_0, SOCKETS_2_0, SOCKETS_2_1): Correct the endianness. * lib/sockets.c (gl_sockets_startup): Return 2 on any version number mismatch, not just on <. Cleanup before any such failure. 2015-09-25 Mats Erik Andersson gc: fix detection of installed libgcrypt version * m4/gc.m4: Use AM_PATH_LIBCRYPT to test for libcrypt versions at least as recent as 1.4.4. The previously used macro is not available now, since modules were removed in version 1.6.0. 2015-09-25 Paul Eggert c-ctype: rewrite to use inline functions This simplifies maintenance, since it makes for just one implementation of each function, letting the compiler have the fun of optimization. In practice this works well nowadays with GCC. E.g., c_isascii might need only three instructions even though the source code lists every ASCII character individually in a large switch statement. Also, fix some z/OS porting bugs reported by Daniel Richard G. in: http://lists.gnu.org/r/bug-gnulib/2015-09/msg00037.html * NEWS: Document the API change. * lib/c-ctype.c: Drastically simplify, since this now just expands inline functions. * lib/c-ctype.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (C_CTYPE_INLINE): New macro. (C_CTYPE_CONSECUTIVE_DIGITS, C_CTYPE_CONSECUTIVE_LOWERCASE) (C_CTYPE_CONSECUTIVE_UPPERCASE): Remove. Verify that either ASCII or EBCDIC is being used. (_C_CTYPE_SIGNED_EBCDIC, _C_CTYPE_CNTRL, _C_CTYPE_A_THRU_F_N) (_C_CTYPE_DIGIT_N, _C_CTYPE_LOWER_N, _C_CTYPE_UPPER_N) (_C_CTYPE_CASES, _C_CTYPE_A_THRU_F, _C_CTYPE_DIGIT, _C_CTYPE_LOWER) (_C_CTYPE_UPPER, _C_CTYPE_PUNCT_PLAIN): New private macros. (_C_CTYPE_CNTRL): In EBCDIC, '\x07' is a control, not '\xff'. (c_isalnum, c_isalpha, c_isascii, c_isblank, c_iscntrl, c_isdigit) (c_isgraph, c_islower, c_isprint, c_ispunct, c_isspace, c_isupper) (c_isxdigit, c_tolower, c_toupper): Now inline functions. (c_tolower, c_toupper): When converting, return the unsigned char, as that is what z/OS does. * lib/c-strcaseeq.h (CASEEQ): Simplify in the light of the removal of some c-ctype.h macros. * modules/c-ctype (Depends-on): Add extern-inline; remove verify. * tests/test-c-ctype.c (test_all): Fix test for c_toupper and c_tolower promotion to be compatible with z/OS. 2015-09-24 Pavel Raiskup gitlog-to-changelog: trim only trailing whitespaces This is fix for --format regression introduced by commit 2b93079a5d1baa4d; it caused that --format='%s%n%n%b%n' (see the doubled %n string) had no effect anymore. This format specification has been used e.g. by GNU paxuitils (commit edfd8bcc3). * build-aux/gitlog-to-changelog (main): Stop squashing multiple newlines in commmit messages. 2015-09-23 Paul Eggert Test that c_iscntrl agrees with iscntrl, etc. Suggested by Daniel Richard G. in: http://lists.gnu.org/r/bug-gnulib/2015-09/msg00034.html * modules/c-ctype-tests (Depends-on): Add ctype. * tests/test-c-ctype.c: Include . (NCHARS): New constant. (test_agree_with_C_locale): New function. (main): Use it. (test_all): Use named constants. c-ctype: improve c_isascii testing * tests/test-c-ctype.c (test_all): Port c_isascii test to EBCDIC. Add a test to count the number of ASCII characters. 2015-09-22 Paul Eggert savewd: remove SAVEWD_CHDIR_READABLE It was problematic in the light of file systems that ignore umask. Problem reported by Sebastian Unger in: http://bugs.gnu.org/21534 * NEWS: Document this. * lib/mkancesdirs.c (mkancesdirs): MAKE_DIR now returns 0 if successful, -1 (setting errno) on failure, rather than something more complicated than that. * lib/mkdir-p.c (make_dir_parents): Do not use SAVEWD_CHDIR_READABLE. * lib/savewd.c (savewd_chdir): Remove support for SAVEWD_CHDIR_READABLE. * lib/savewd.h (SAVEWD_CHDIR_READABLE): Remove. c-ctype: port better to EBCDIC Problems reported by Daniel Richard G. in http://lists.gnu.org/r/bug-gnulib/2015-09/msg00020.html * lib/c-ctype.c: Include , for CHAR_MIN and CHAR_MAX. Include "verify.h". (C_CTYPE_ASCII, C_CTYPE_CONSECUTIVE_DIGITS) (C_CTYPE_CONSECUTIVE_LOWERCASE, C_CTYPE_CONSECUTIVE_UPPERCASE): Define as enum constants with value false, if not defined, so that code can use 'if' instead of 'ifdef'. Using 'if' helps make the code more portable, as both branches of the 'if' are compiled on all platforms. (C_CTYPE_EBCDIC): New constant. Verify that the character set is either ASCII or EBCDIC. (to_char): New static function. (c_isascii, c_iscntrl): Assume standard control-character assignments for EBCDIC. (c_isalnum, c_isalpha, c_isdigit, c_islower, c_isgraph, c_isprint) (c_ispunct, c_isupper, c_isxdigit, c_tolower, c_toupper): Rewrite to use 'if' instead of 'ifdef'. Use to_char if non-ASCII. Prefer <= to >=. Prefer true and false to 1 and 0, for booleans. (c_iscntrl): Use 'if', not 'ifdef'. * modules/c-ctype (Depends-on): Add verify. * tests/test-c-ctype.c: Include , for CHAR_MIN (to_char): New function. (test_all): Port to EBCDIC. Add some more tests, e.g., for c_ispunct. 2015-09-21 Pádraig Brady nanosleep: fix return code for interrupted replacement * lib/nanosleep.c (nanosleep): In the replaced nanosleep, ensure that we return -1 in the case the call is interrupted by a signal, rather than the current value of 1. Diagnosed and tested by Daniel Richard G. 2015-09-19 Paul Eggert Diagnose ERE '()|\1' Problem reported by Hanno Böck in: http://bugs.gnu.org/21513 * lib/regcomp.c (parse_reg_exp): While parsing alternatives, keep track of the set of previously-completed subexpressions available before the first alternative, and restore this set just before parsing each subsequent alternative. This lets us diagnose the invalid back-reference in the ERE '()|\1'. regex: merge patches from libc 2015-09-08 Joseph Myers Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). * lib/regex_internal.h: Include instead of . 2015-06-09 Joseph Myers Fix regcomp wcscoll, wcscmp namespace (bug 18497). * lib/regcomp.c (build_range_exp): Call __wcscoll instead of wcscoll. * lib/regexec.c (check_node_accept_bytes): Likewise. 2015-06-05 Joseph Myers Fix regex wcrtomb namespace (bug 18496). * lib/regex_internal.c (build_wcs_upper_buffer): Call __wcrtomb instead of wcrtomb. 2015-06-05 Joseph Myers Fix regex wctype namespace (bug 18495). * lib/regcomp.c (re_compile_fastmap_iter): Call __towlower instead of towlower. * lib/regex_internal.c (build_wcs_upper_buffer): Call __iswlower instead of iswlower. Call __towupper instead of towupper. * lib/regex_internal.h (IS_WIDE_WORD_CHAR): Call __iswalnum instead of iswalnum. 2015-01-07 Chris Metcalf * lib/regcomp.c (parse_bracket_exp): Initialize type to COLL_SYM in a couple of places to avoid uninitialized variable wanings on tilegx gcc 4.8.2. 2014-11-24 Siddhesh Poyarekar * lib/regex_internal.h: Remove NOT_IN_libc. 2014-11-17 Andreas Schwab * lib/regex_internal.h: Don't include . 2014-09-11 Roland McGrath Move findidx nested functions to top-level. * lib/regcomp.c [_LIBC]: #include . (build_equiv_class) [_LIBC]: Don't #include it inside the function. Pass new arguments to findidx. * lib/regexec.c [RE_ENABLE_I18N] [_LIBC]: #include . [RE_ENABLE_I18N] (check_node_accept_bytes) [_LIBC]: Don't #include it inside the function. Pass new arguments to findidx. * lib/regex_internal.h: [!NOT_IN_libc] [_LIBC]: #include . (re_string_elem_size_at): Don't #include it inside the function. Pass new arguments to findidx. 2014-08-01 Siddhesh Poyarekar Check if DEBUG is defined in regex_internal.c * lib/regex_internal.c: Check if DEBUG is defined and is set. 2015-09-08 Assaf Gordon ceill: detect buggy OpenBSD implementation * m4/ceill.m4 (gl_FUNC_CEILL): Detect buggy openBSD implementation which returns zero for small values. Discussed here: http://lists.gnu.org/r/bug-gnulib/2015-08/msg00010.html 2015-09-08 Dave Chiluk mountlist: add me_mntroot field on Linux machines * lib/mountlist.c (read_file_system_list): Populate me_mntroot in mount_entry so Linux machines based on /proc/self/mountinfo can distinguish between bind mounts and original mounts. In reality bind mounts aren't treated differently than mountroot=/ mounts by the kernel, but the user often wants these bind mounts distinguished. * lib/mountlist.h (struct mount_entry): Add me_mntroot element. More details at https://pad.lv/1432871 2015-09-08 Christian Egli doc: Describe to use multiple instances of gnulib * doc/gnulib-tool.texi: Add a section to the manual outlining how two instances of gnulib with different modules can be used, for example one for a lib and another one for associated tools. 2015-09-01 Pádraig Brady base32: mark function as __attribute__ const * lib/base32.h (isbase32): Mark __attribute__ const as suggested by GCC, and consistent with the base64 module. 2015-08-20 Daiki Ueno gnulib-tool: don't transform binary files with sed * gnulib-tool (func_add_or_update): Don't apply sed_transform_* to .mo and .class files. Reported by Denis Denisov. 2015-08-10 Daiki Ueno gperf: respect silent rules * modules/gperf (Makefile.am): Define V_GPERF, V_GPERF_, and V_GPERF_0 for silent rules. * modules/iconv_open (Makefile.am): Use V_GPERF. * modules/unicase/locale-language (Makefile.am): Likewise. * modules/unicase/special-casing (Makefile.am): Likewise. * modules/unictype/category-byname (Makefile.am): Likewise. * modules/unictype/combining-class-byname (Makefile.am): Likewise. * modules/unictype/joininggroup-byname (Makefile.am): Likewise. * modules/unictype/joiningtype-byname (Makefile.am): Likewise. * modules/unictype/property-byname (Makefile.am): Likewise. * modules/unictype/scripts (Makefile.am): Likewise. * modules/uninorm/composition (Makefile.am): Likewise. 2015-08-03 Paul Eggert Improve port of stdalign to C++11 Problem reported by Sundaram in: http://lists.gnu.org/r/bug-gnulib/2015-08/msg00003.html * lib/stdalign.in.h (alignof, alignas): Don't define if C++11 or newer. (__alignas_is_defined): Define if C++11 or newer. 2015-08-01 Assaf Gordon (tiny change) pmccabe2html: fix gawk regex escaping * build-aux/pmccabe2html: Add one more backslash to properly escape the gsub replacement value. Fixes this error: gawk: ./build-aux/pmccabe2html:425: \ warning: escape sequence `\&' treated as plain `&' 2015-07-29 Paul Eggert time_rz: port to pedantic memcpy * lib/time_rz.c (tzalloc): Pacify pedantic memcpy implementations that reject memcpy (..., NULL, 0). 2015-07-27 Paul Eggert time_rz: port better to MinGW Don't change tzname, as this makes MinGW dump core (Bug#21020). Instead, store the tzname copy in the struct tm_zone object. Problem reported by Eli Zaretskii in: http://bugs.gnu.org/21020#48 * lib/strftime.c [!_LIBC]: * lib/time_rz.c: Include time-internal.h. * lib/strftime.c (strftime_case_) [!HAVE_TM_ZONE]: Infer the zone name from *TZ rather than from TZNAME, doable because *TZ now has a tzname_copy member. * lib/time-internal.h: New file, with contents taken from lib/time_rz.c. It's separate because strftime.c now accesses struct tm_zone members. (struct tm_zone) [HAVE_TZNAME && !HAVE_TM_ZONE]: New member tzname_copy. * lib/time_rz.c (struct tm_zone): Move to time-internal.h. (tzalloc) [HAVE_TZNAME && !HAVE_TM_ZONE]: Initialize tzname_copy member. (save_abbr) [HAVE_TZNAME && !HAVE_TM_ZONE]: Save abbreviation in tzname_copy member. (revert_tz) [HAVE_TZNAME]: Remove no-longer-needed tzname saving. (restore_tzname): Remove; no longer needed. All calls removed. * modules/time_rz (Files): Add lib/time-internal.h. time: port __need_time_t to MinGW * lib/time.in.h (__need_time_t): Do not treat specially on MinGW. Fix reported by Eli Zaretskii in: http://bugs.gnu.org/21020#36 2015-07-25 Paul Eggert strftime: fix newly-introduced bug on Solaris * lib/strftime.c (strftime_case_): Set the local variable 'zone' consistently at the start, rather than doing some of the setup at the start and some in the %Z format spec. This is cleaner, and works better with time_rz on platforms like Solaris where struct tm lacks a tm_zone member, as when !HAVE_TM_GMTOFF %z's calls to mktime_z and localtime_rz can mess up the tzname cache. test-strftime: test for Solaris bug * modules/strftime-tests (Depends-on): Add strerror. * tests/test-strftime.c: Include . (posixtm_test): New function, containing the old 'main'. (struct tzalloc_test, struct localtime_rz_test): New types. (TZ, LT): New static vars. (tzalloc_test): New function. (main): Rewrite in terms of posixtm_test and tzalloc_test. time_rz: port to Solaris etc. Works around a tzname problem on platforms like Solaris that have tzname but not tm_zone, by setting tzname at the appropriate time and restoring it later. * lib/time_rz.c (tzname_address, tzname_value) [HAVE_TZNAME]: New static vars. (save_abbr) [HAVE_TZNAME]: Set them. (revert_tz) [HAVE_TZNAME]: Clear or use them. (restore_tzname): New function. (localtime_rz, mktime_z): Use it. time_rz: now LGPL * modules/time_rz (License): Now LGPL, because strftime depends on it. time_rz: make a constant 'const' * lib/time_rz.c (local_tz): Now const. time_rz: fix off-by-one typo * lib/time_rz.c (extend_abbrs): Fix off-by-one typo. 2015-07-23 Paul Eggert fprintftime, strftime: use timezone_t args * NEWS: Document the change. * lib/fprintftime.h (fprintftime): * lib/strftime.c (extra_args) [my_strftime]: * lib/strftime.h (nstrftime): Time zone arg is now of type timezone_t, not int. * lib/strftime.c (mktime_z) [_LIBC]: New macro. (__gmtime_r, __localtime_r) [!HAVE_TM_GMTOFF]: Remove; no longer used. (my_strftime) [emacs && !my_strftime]: (emacs_strftimeu) [emacs && !FPRINTFTIME]: Remove; Emacs doesn't need this any more. (HAVE_TZSET) [my_strftime]: Unset, since we no longer want fprintftime and nstrftime to call tzset. (ut) [!my_strftime]: Remove, replacing with ... (tz) [!my_stftime]: ... this new macro. All uses changed. (strftime_case_): Use localtime_rz and mktime_z instead of localtime_r and mktime. * modules/fprintftime (Depends-on): Add time_rz. * modules/strftime (Depends-on): Add time_rz. Remove time_r. * tests/test-strftime.c (main): Adjust to new nstrftime API. time_rz: new module * MODULES.html.sh: Add time_rz. * lib/time_rz.c, m4/time_rz.m4, modules/time_rz: New files. * lib/time.in.h (timezone_t, tzalloc, tzfree, localtime_rz, mktime_z): New decls if _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_DEFAULTS): New var HAVE_TIMEZONE_T (default 0). * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): New var GNULIB_TIME_RZ (default 0). * modules/time (time.h): Substitute the new vars. flexmember: license is now unlimited * modules/flexmember (License): Change to unlimited, since its only source file gives an unlimited license. 2015-07-15 Eric Blake maint: update copyright paper procedures * config/srclist.txt: Drop outdated files. * doc/Copyright/conditions.txt: Update to latest. * doc/Copyright/assign.changes.manual: Delete. * doc/Copyright/assign.future.manual: Likewise. * doc/Copyright/assign.manual: Likewise. * doc/Copyright/assign.translation.manual: Likewise. * doc/Copyright/disclaim.changes.manual: Likewise. * doc/Copyright/disclaim.manual: Likewise. * doc/Copyright/disclaim.program: Likewise. 2015-07-07 Daiki Ueno localename: fix link error on Illumos Illumos defines __sun, but does not have getlocalename_l nor the equivalent. This partially reverts commit 387c214. * m4/localename.m4 (gl_LOCALENAME): Check if getlocalename_l is available, as well as uselocale. * lib/localename.c [HAVE_USELOCALE && __sun]: Don't fallback to use getlocalename_l if it is not available. 2015-07-07 Daiki Ueno unistr/uN-strtok-tests: avoid a trivial leak * tests/unistr/test-u-strtok.h (test_u_strtok): Untabify. Free input and delim after the multibyte delimiter tests. 2015-07-04 Paul Eggert file-has-acl, acl-permissions: fix HP-UX typos Problem reported by John David Anglin in: http://bugs.gnu.org/20979 * lib/file-has-acl.c (file_has_acl): * lib/set-permissions.c (context_acl_from_mode) (context_aclv_from_mode, set_acls): Fix some obvious typos when HAVE_GETCL /* HP-UX */. They were introduced by the recent ACL changes. regex: match current GNU grep behavior These symbols have not matched GNU grep behavior for quite some time. Fix prompted by Balazs Kezes bug report at: http://bugs.gnu.org/20974 * lib/regex.h (RE_SYNTAX_GREP, RE_SYNTAX_EGREP): Change to match current GNU behavior. Simplify by expressing it as differences from POSIX BREs and EREs. (RE_SYNTAX_POSIX_EGREP): No longer differs from GNU behavior. 2015-07-03 Jim Meyering set-permissions.c: adjust acl_from_mode's cpp guard * lib/set-permissions.c (acl_from_mode): Guard with #ifdef directives identical to those guarding the sole use. Otherwise, on some systems, we'd get a warning about the function being defined but not used. Also, filter through cppi to correct misleading indentation of cpp directives. 2015-07-03 Pádraig Brady tests: restrict shells to those that support 'local' The local keyword is very widely supported and used in tests in coreutils and grep at least. Therefore restrict to testing with shells that support it. This mainly excludes /bin/sh on Solaris. * tests/init.sh (gl_shell_test_script_): Add a test for 'local'. 2015-07-03 Seiya Kawashima (tiny change) and Daiki Ueno unistr/uN-strtok: handle multibyte delimiters Previously, uN_strtok moved PTR to the next unit to the token end. When DELIM contained a multibyte character, the new position could be a middle of a multibyte character. * lib/unistr/u-strtok.h (FUNC): Place PTR at the next character after the token. * lib/unistr/u8-strtok.c (U_STRMBLEN): New macro. * lib/unistr/u16-strtok.c (U_STRMBLEN): New macro. * lib/unistr/u32-strtok.c (U_STRMBLEN): New macro. * modules/unistr/u8-strtok (Depends-on): Depend on unistr/u8-strmblen. * modules/unistr/u16-strtok (Depends-on): Depend on unistr/u16-strmblen. * modules/unistr/u32-strtok (Depends-on): Depend on unistr/u32-strmblen. * tests/unistr/test-u-strtok.h: New file. * tests/unistr/test-u8-strtok.c: New file. * tests/unistr/test-u16-strtok.c: New file. * tests/unistr/test-u32-strtok.c: New file. * modules/unistr/u8-strtok-tests: New file. * modules/unistr/u32-strtok-tests: New file. * modules/unistr/u16-strtok-tests: New file. 2015-07-02 Friedrich Haubensak update-copyright: fix test failure with perl >= 5.22 (trivial) * build-aux/update-copyright: Escape a literal left curly bracket, required with perl >= 5.22 2015-07-02 Daiki Ueno u{16,32}-strstr-tests: relax timeout condition On slower platforms (e.g., Solaris 10/SPARC), u{16,32}-strstr tests can take longer than 5 seconds to complete. Reported by Dagobert Michelsen in: https://lists.gnu.org/r/bug-libunistring/2015-06/msg00006.html * tests/unistr/test-u16-strstr.c (main): Increase timeout from 5 seconds to 10 seconds. * tests/unistr/test-u32-strstr.c (main): Likewise. 2015-07-01 Pavel Raiskup gnulib-common.m4: change the ARFLAGS default to 'cr' In some GNU/Linux distributions people started to compile 'ar' binary with --enable-deterministic-archives (binutils project). That, however, in combination with previous autotools long time working default AR{_,}FLAGS=cru causes warnings on such installations: ar: `u' modifier ignored since `D' is the default (see `U') * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): Set ARFLAGS='cr' if not set already. 2015-07-01 Pavel Raiskup selinux-h: avoid double free after *getfilecon() Originally reported by Ben Shelton on bug-tar: http://lists.gnu.org/r/bug-tar/2015-04/msg00009.html * lib/getfilecon.c (map_to_failure): Set the already freed '*con' pointer to NULL. Man getfilecon(3) says that any non-NULL '*con' param should be freed by freecon(3) (regardless the return value). 2015-07-01 Pavel Fedin fix pty related tests issues on Windows (trivial) * lib/grantpt.c (grantpt): grantpt.c seems to be never used on Windows, however it's still present in tests/ subdirectory of the final project. Therefore avoid it to pass `make check`. * tests/test-openpty.c (main): Windows has no PTYs and gnulib's openpty() will just return -ENOSYS, so avoid this non applicable test allowing the build to proceed. 2015-07-01 Pádraig Brady acl: fix definition of acl_from_mode on FreeBSD This was causing basic coreutils copy operations to fail with ENOTSUP or ENOENT error messages. * lib/acl-internal.h (acl_from_mode): Only define when ! defined HAVE_ACL_FROM_TEXT. That allows the version of acl_from_mode() defined in lib/set-permissions.c to be used on FreeBSD at least. * lib/set-permissions.c: Fix up comment spelling, and a redundant variable assignment; noticed in passing. 2015-06-30 Pádraig Brady readutmp: port to FreeBSD >= 9 * lib/readutmp.h: Map utmpxname() to setutxdb(). With that coreutils who(1) and pinky(1) tests pass. 2015-06-30 Paul Eggert mgetgroups: port to strict OS X The previous fix wasn't working, so use a bigger hammer (Bug#20923). * lib/mgetgroups.c: Ignore -Wpointer-sign diagnostics. (getgrouplist_gids) [HAVE_GETGROUPLIST]: Remove. All uses removed. * m4/mgetgroups.m4 (gl_MGETGROUPS): Revert recent changes. 2015-06-29 Paul Eggert mgetgroups: port to strict OS X * doc/glibc-functions/getgrouplist.texi (getgrouplist): Document the getgrouplist problem. * lib/mgetgroups.c (getgrouplist_gids) [HAVE_GETGROUPLIST]: New macro. (mgetgroups): Use it. * m4/mgetgroups.m4 (gl_MGETGROUPS): Check for OS X signature for getgrouplist. 2015-06-29 Jim Meyering linkat: fix invalid definition of LINKAT_SYMLINK_NOTSUP on OS X It started like this when building coreutils' latest on OS X, invoking ./configure with a nonempty --cache=.cache: lib/linkat.c:46:42: error: operator '||' has no right operand lib/linkat.c: In function 'rpl_linkat': lib/linkat.c:330:27: error: #if with no expression Here's linkat.c's line 46: #if !HAVE_LINKAT || LINKAT_SYMLINK_NOTSUP Here's some context: $ grep linkat_nofoll .cache gl_cv_func_linkat_nofollow=${gl_cv_func_linkat_nofollow=no} $ grep LINKAT_SYM lib/config.h #define LINKAT_SYMLINK_NOTSUP The problem is that m4/linkat.m4's gl_FUNC_LINKAT uses AC_CACHE_CHECK to set LINKAT_SYMLINK_NOTSUP, but that violates a tenet of AC_CACHE_CHECK: it must have no side effect other than setting its cache variable. What happens is that when the cache is set, we'd skip the code in that AC_CACHE_CHECK call, and leave LINKAT_SYMLINK_NOTSUP defined to whatever value it happened to have in configure's environment. In my case, it was not defined, so this later code: AC_DEFINE_UNQUOTED([LINKAT_SYMLINK_NOTSUP], [$LINKAT_SYMLINK_NOTSUP], [Define to 1 if linkat can create hardlinks to symlinks]) would emit code with an empty RHS. * m4/linkat.m4 (gl_FUNC_LINKAT): Move the setting of $LINKAT_SYMLINK_NOTSUP out of the AC_CACHE_CHECK code block. 2015-06-28 Jim Meyering mountlist: avoid an unused-label warning on OS X * lib/mountlist.c (read_file_system_list) [MOUNTED_GETMNTINFO]: Building on OS X, I saw a warning about the "free_then_fail" label being unused. Give it the _GL_UNUSED_LABEL attribute. error.c: correct printf-style format: %d -> %u * lib/error.c (error_at_line): Correct __fxprintf format to use %u, rather than %d, to match the type of "line_number", unsigned int. 2015-06-25 Pádraig Brady fts: avoid reading beyond the heap allocation GCC 5.1.1 with -O2 and -fsanitize=address reports a read of size 4 from a heap object of size 3 is indeed invalid, though this may be due to incorrect padding assumptions by GCC, see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66661 * lib/fts.c (fts_alloc): Increase allocation to alignof(FTSENT). * modules/fts: Depend on stdalign. 2015-06-24 Pádraig Brady savedir: avoid undefined behavior in qsort call GCC 5.1.1 -fsanitize=undefined with glibc 2.21 is returning: "runtime error: null pointer passed as argument 1, which is declared to never be null" * lib/savedir.c (streamsavedir): Avoid the call with no entries. 2015-06-24 Pádraig Brady userspec: avoid undefined behavior in gettext call GCC 5.1.1 -fsanitize=undefined with glibc 2.21 is returning: "runtime error: null pointer passed as argument 2, which is declared to never be null" * lib/userspec.c (parse_with_separator): Avoid passing NULL to gettext() 2015-06-20 Glenn Morris gitlog-to-changelog: improve gitmerge.el commits Let the Emacs ChangeLog generation process exclude "skipped" messages from merge commits (Bug#20717). * build-aux/gitlog-to-changelog: Handle gitmerge.el skipped commits. 2015-06-20 Paul Eggert wchar: fix MinGW compilation warnings This lets Texinfo compile cleanly. See Eli Zaretskii in: http://lists.gnu.org/r/bug-gnulib/2015-06/msg00050.html * lib/wchar.in.h: Do not use special invocation convention on MinGW. 2015-06-20 Daiki Ueno uniname/uniname-tests: use pristine data files For copyright and maintenance reasons, use the data files from UCD without modification. * tests/uniname/test-uninames.c (FIELDLEN): Remove. (getfield): Remove. (aliases_count): New global variable. (fill_names): Skip comments and empty lines in the input. Don't use getfield. (fill_aliases): Likewise. (main): Change the expected command line arguments to: NAMES... ["--" ALIASES...]. * tests/uniname/test-uninames.sh: Adjust to the change in test-uninames.c. * tests/uniname/UnicodeDataNames.txt: Remove. * tests/uniname/UnicodeData.txt: New file, from Unicode 8.0.0. * tests/uniname/NameAliases.txt: Use the pristine copy of the data file from Unicode 8.0.0. 2015-06-19 Pádraig Brady linked-list, linkedhash-list: avoid compiler warnings * lib/gl_anytree_list2.h: Add _GL_ATTRIBUTE_PURE to avoid -Werror=suggest-attribute=pure (from GCC 5.1.1). 2015-06-19 Daiki Ueno libunistring: bump minimum version to 0.9.6 * all modules depending on updated Unicode data: Regenerate. The modules are listed by a script that does: - for each file listed by: git show --oneline --name-only 705f4efc - deduce the containing modules, based on "Files:" - deduce the modules which depend on the containing modules, based on "Depends-on:" 2015-06-18 Daiki Ueno uniname/uniname: update to Unicode 8.0.0 * lib/uniname/uninames.h: Regenerate. * tests/uniname/NameAliases.txt: Update from Unicode 8.0.0. * tests/uniname/UnicodeDataNames.txt: Update from Unicode 8.0.0. 2015-06-18 Daiki Ueno libunistring: update to Unicode 8.0.0 * lib/gen-uni-tables.c (SIZEOF): New macro. (output_numeric): Increase the maximum number of fractions from 128 to 160. Increase the level3 value width from 7 bits to 8 bits. Use SIZEOF instead of a hard-coded integer. (output_blocks): Decrease the cut-off threshold from 0x30000 to 0x28000. (fill_blocks): Increase the maximum number of blocks from 256 to 384. Use SIZEOF instead of a hard-coded integer. (get_lbp): Adjust to new characters added in Unicode 8.0.0. * lib/unictype/numeric.c (uc_numeric_value): Adjust the level3 value width. * lib/unilbrk/lbrktables.c (unilbrk_table): Implement LBP21b and a new case added to LBP22. * lib/uniwidth/width.c (nonspacing_table_data): Add U+08E3, U+A69E, U+FE2E..U+FE2F, U+111CA..U+111CC, U+11300, U+115DC..U+115DD, U+1171D..U+1171F, U+11722..U+11725, U+11727..U+1172B, U+1DA00..U+1DA36, U+1DA3B..U+1DA6C, U+1DA75, U+1DA84, U+1DA9B..U+1DA9F, and U+1DAA1..U+1DAAF. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * all generated files under lib/uni* and tests/uni*: Regenerate. 2015-06-16 Pádraig Brady gnu-web-doc-update: add --mirror to remove stale files * build-aux/gnu-web-doc-update: Add a --mirror option to remove out of date files from the CVS server. Since this is usually appropriate, a prompt is given when the option is not specified, along with the `cvs remove` command that would be run. 2015-06-06 Paul Eggert acl-permissions: pacify -Wsuggest-attribute=const Problem reported by Masanari Iida in: http://bugs.gnu.org/20753 * lib/acl-internal.h (free_permission_context): Declare with attribute const if ! (defined USE_ACL && (HAVE_ACL_GET_FILE || defined GETACL)). fsync: document AIX misbehavior * doc/posix-functions/fsync.texi (fsync): Document failure on AIX with read-only file descriptor. 2015-06-05 Jonathan Perkin (tiny change) stdio: Don't redefine gets when using C++ * lib/stdio.in.h (gets): Disable warning on C++. 2015-06-05 Paul Eggert acl-permissions: port to AIX, C89 HP-UX Problems reported by Michael Felt. * lib/file-has-acl.c (file_has_acl) [HAVE_STATACL]: * lib/get-permissions.c (get_permissions) [USE_ACL && HAVE_STATACL]: * lib/readutmp.c (read_utmp) [UTMP_NAME_FUNCTION]: * lib/set-permissions.c (set_acls) [HAVE_ACLX_GET && ACL_AIX_WIP]: Add cast for AIX, whose system calls are declared to accept char * even though the arguments are really char const *. * lib/get-permissions.c (get_permissions): If USE_ACL && HAVE_GETACL /* HP-UX */, don't assume C99. If USE_ACL && HAVE_STATACL /* older AIX */, add missing decl that broke a build. * lib/mountlist.c (read_file_system_list) [MOUNTED_VMOUNT]: Rework types to pacify xlc. 2015-06-03 Pádraig Brady vasprintf-posix: avoid compiling vasnprintf where possible * modules/vasprintf-posix: Avoid compiling the large vasnprintf module where not required. For example on a GNU/Linux system when gnulib-tool is run with the --conditional-dependencies option. 2015-06-02 Pádraig Brady file-has-acl: fix build on Mac OS X 10 This reverts commit f1b37e3a which doesn't work on Mac OS X >= 10.4 which has an incompatible 6 parameter getxattr() call. * doc/glibc-functions/getxattr.texi: Mention the divergent getxattr() call on Mac OS X >= 10.4. * doc/glibc-functions/fgetxattr.texi: Likewise. * lib/file-has-acl.c: Revert to more complete combined check. * m4/acl.m4 (gl_FILE_HAS_ACL): Likewise. Reported by Jack Howarth. 2015-06-02 Pádraig Brady prefix-gnulib-mk: remove no longer needed special case * build-aux/prefix-gnulib-mk (prefix): Since commit e3704b9c, continued lib_SOURCES lines are no longer present, so special case handling of such entries is not required. 2015-06-01 Pádraig Brady acl: don't depend on the deprecated qacl module * modules/acl (Depends-on): Use q{copy,set}-acl instead. 2015-06-01 Pádraig Brady gnulib-tool: concatenate lib_SOURCES to a single line * gnulib-tool: Refactor the line merging sed logic, and use that to output a single lib_SOURCES line for each module. gnulib using projects often postprocess this output to prepend subdir paths to each item, and having a single line simplifies this processing allowing better decoupling from the gnulib-tool output. 2015-06-01 Pavel Fedin pthread_sigmask: discount system version if a simple macro (trivial) MinGW64 has: #define pthread_sigmask(H, S1, S2) 0 * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Call the function to ensure it's available. 2015-05-31 Pádraig Brady readlinkat: avoid OS X 10.10 trailing slash bug * doc/posix-functions/readlink.texi: Mention that OS X 10.10 has this bug. * doc/posix-functions/readlinkat.texi: Likewise. Also mention that OS X 10.10 has this function. * lib/readlinkat.c (rpl_readlinkat): Handle the trailing slash bug, as done for readlink(). * m4/readlinkat.m4 (gl_FUNC_READLINKAT): Check for the readlink() trailing slash bug, and assume readlinkat() has the same issue. Also fix a typo where $gl_cv_decl_readlink_works was tested, rather than the correct $gl_cv_decl_readlinkat_works. 2015-05-29 Andreas Gruenbacher acl-permissions: Fix build on Mac OS X and older AIX (Bug#20681) * lib/set-permissions.c (set_acls): Fix more errors introduced in the acl module rewrite. acl-permissions: Fix build on Solaris and Cygwin Reported by Tom G. Christensen : * lib/set-permissions.c (set_acls): The count, entries, ace_count, and ace_entries variables have moved into struct permission_context but they were still accessed as local variables here. 2015-05-29 Pádraig Brady linkat: avoid OS X 10.10 trailing slash with symlink bug On Darwin 14.3.0 linkat(,"path1",,"dangling_symlink/",) causes the symlink to be dereferenced, and if it points to a non existent file, that file will be created as a hard link to "path1". This fixes a test failure in test-linkat.c. * m4/linkat.m4 (gl_FUNC_LINKAT): Augment the test with this case. The existing workaround in linkat.c for trailing slash issues, suffices for this case. * doc/posix-functions/linkat.texi: Add OS X 10.10 to the list of platforms with trailing slash issues. 2015-05-28 Pádraig Brady unlinkat: handle ignoring of ".." on Darwin 14 * lib/unlinkat.c: unlinkat() has the same bug as unlink() on Mac OS X 10.10, where it ignores paths with a trailing "..", so handle in the same manner. * m4/unlinkat.m4: Comment on this Darwin issue. * doc/posix-functions/unlink.texi: Update the latest version where the issue was seen. * doc/posix-functions/unlinkat.texi: Mention this issue. Fixes a test failure in test-unlinkat.c. 2015-05-27 Paul Eggert qacl: split into qcopy-acl and qset-acl Emacs needs the former, but not the latter. * modules/acl-permissions: New file, containing most of the old qacl. * modules/file-has-acl (Depends-on): Depend on acl-permissions, not qacl. * modules/qacl: Now merely depends on qcopy-acl and qset-acl. * modules/qcopy-acl, modules/qset-acl: New files. * MODULES.html.sh (File system functions): Mention the new modules, and mention qacl while we're at it. 2015-05-27 Glenn Morris gitlog-to-changelog: new option --ignore-line (This patch is imported from the GNU Emacs master.) This option ignores individual commit lines matching a pattern. * build-aux/gitlog-to-changelog: Add --ignore-line option. 2015-05-27 Andreas Gruenbacher qacl: Reimplement qset_acl and qcopy_acl (Bug#20666) Implement get_permissions and set_permissions primitives for getting all the permissions of a file, storing them, and later setting them. (In the minimal case, the permissions consist only of a file mode.) Reimplement qset_acl and qcopy_acl based on these new primitives: this avoids code duplication and makes error handling more consistent. The Solaris and Cygwin code still uses duplicate code paths for setting a file mode while making sure that no acls exist and setting an explicit acl; this is no worse than before, but could be cleaned up. The AIX code still doesn't read ACLs, it only makes sure that acls don't get in the way when setting a file mode. * lib/acl-internal.h (struct permission_context): New data structure. (get_permissions, set_permissions, free_permission_context): Declare. * lib/acl-internal.c (free_permission_context): New helper function. * lib/get-permissions.c (get_permissions): New helper function split off from qcopy_acl. * lib/set-permissions.c: (set_acls_from_mode): On Solaris, Cygwin, and AIX, set a file's permissions based only on a file mode. (acl_from_mode, context_acl_from_mode, context_aclv_from_mode): All other platforms construct a temporary acl from the file mode and set that acl in the same way as setting an acl read from the source file. This should help avoid code duplication and inconsistent / buggy behavior. (set_acls): New helper function Split off from qcopy_acl. (chmod_or_fchmod): Moved here from qset-acl.c. (set_permissions): New helper function. * lib/qcopy-acl.c (qcopy_acl): Rewrite using get_permissions and set_permissions. * lib/qset-acl.c (qset_acl): Rewrite using set_permissions. * modules/qacl: Add get-permissions.c and set-permissions.c. file-has-acl: Split feature tests again (Bug#20667) * lib/file-has-acl.c: Instead of testing for XATTR_NAME_POSIX_ACL_ACCESS and XATTR_NAME_POSIX_ACL_DEFAULT, define them when needed. * m4/acl.m4 (gl_FILE_HAS_ACL): With that, Paul's GETXATTR_WITH_POSIX_ACLS change shouldn't be needed anymore. 2015-05-27 Pádraig Brady string: fix build failure on BSD/OSX with FORTIFY_SOURCE This avoids a conflict with "FORTIFY_SOURCE" variants of the string functions when they're replaced on NetBSD-6.0.1 and Darwin-14.3.0 at least. * lib/string.in.h: Avoid including our "lib/string.h" while including the system . 2015-05-26 Eric Blake stdio: limit __gnu_printf__ witness to gcc 4.4+ * lib/error.h (_GL_ATTRIBUTE_SPEC_PRINTF): Move gcc version probe... * m4/stdio_h.m4 (gl_STDIO_H): ...here. error: use correct printf attributes on mingw * lib/stdio.in.h (_GL_ATTRIBUTE_SPEC_PRINTF): New define. inttypes: force correct mingw PRIdMAX even without * modules/inttypes (Depends-on): Require extensions, so that mingw always uses GNU style inttypes. * lib/inttypes.in.h: On mingw, include . stdio: fix probe on mingw under gcc 5.1 * m4/stdio_h.m4 (gl_STDIO_H): Change to compile test, to work around new gcc preprocessor rules. 2015-05-07 Glenn Morris gitlog-to-changelog: parse "Tiny-change" * build-aux/gitlog-to-changelog: Treat "Tiny-change" like "Copyright-paperwork-exempt". (Bug#20324) 2015-05-06 Pádraig Brady doc: document glibc posix_fallocate() issues * doc/posix-functions/posix_fallocate.texi: Mention the glibc efficiency problems and issues with NFS. 2015-05-05 Karl Berry * build-aux/gendocs.sh (usage): document new css default for HTML (--htmlarg). 2015-04-29 Paul Eggert extern-inline: no need for workaround in GCC 5.1 * doc/extern-inline.texi (extern inline): * m4/extern-inline.m4 (gl_EXTERN_INLINE): GCC bugs 54113 and 63877 are fixed in GCC 5.1, so don't work around these bugs in GCC 5.1 and later. Maybe in a decade or two we can remove these workarounds. 2015-04-28 Pádraig Brady eealloc, pagealign_alloc, xalloc: avoid clang warnings Avoid [-Wunknown-attributes] warnings like: warning: unknown attribute '__alloc_size__' ignored * lib/xalloc.h: Don't use the __alloc_size__ attribute with clang, as support has been fully removed as of clang 3.5: https://github.com/llvm-mirror/clang/commit/c047507a * lib/eealloc.h: Likewise. * lib/pagealign_alloc.h: Likewise. 2015-04-27 Paul Eggert tests: pacify GCC 5.1's stricter printf checking * tests/test-dirname.c (main): * tests/test-getaddrinfo.c (simple): * tests/test-getlogin.c (main): * tests/test-getndelim2.c (main): * tests/test-inttostr.c (CK): * tests/test-md5.c (main): * tests/test-read-file.c (main): * tests/test-sha1.c (main): Fix mismatches between printf format and value signedness. * tests/test-inttostr.c (FMT, CAST_VAL, V_min, V_max): Remove, as CAST_VAL always returned a value of type uintmax_t. fts: port to GCC 5.1 with --enable-gcc-warnings Without this fix, GCC 5.1 (correctly) warns about a subscript error on the fts_name component of FTSENT. It's actually a flexible member, so define it that way on C99 or later hosts. * lib/fts.c (fts_alloc): Use offsetof, not sizeof, for a structure that now has a flexible array member. * lib/fts_.h (__FLEXIBLE_ARRAY_MEMBER): New macro. (FTSENT): fts_name is now flexible on C99-or-later platforms. * modules/fts (Depends-on): Add flexmember. 2015-04-26 Paul Eggert file-has-acl: port to CentOS 6 Problem reported by Tom G. Christensen in: http://lists.gnu.org/r/bug-gnulib/2015-04/msg00074.html * lib/file-has-acl.c: Use GETXATTR_WITH_POSIX_ACLS instead of a combination of HAVE_SYS_XATTR_H, HAVE_LINUX_XATTR_H, and HAVE_GETXATTR. * m4/acl.m4 (gl_FILE_HAS_ACL): Test fot the entire combination of linux/xattr.h, sys/xattr.h, getxattr, XATTR_NAME_POSIX_ACL_ACCESS, and XATTR_NAME_POSIX_ACL_DEFAULT, since that's what file-has-acl.c actually needs. 2015-04-26 Pádraig Brady file-has-acl: always return false when ACLs aren't supported * lib/file-has-acl.c (file_has_acl): Consistent with other paths, change the GNU/Linux getxattr path, to transform "not supported" errors to a false return rather than an error. This is handled within file_has_acl() due to the platform specific tests to determine if ACLs are not supported. 2015-04-25 Paul Eggert gettext: propagate po/Makefile.in.in too * build-aux/po/Makefile.in.in: Copy from latest gettext. * config/srclist.txt: In build-aux/po, copy Makefile.in.in and remove-potcdate.sin from $GETTEXT. This fixes a version mismatch between Makefile.in.in and the gettext-runtime m4 files. 2015-04-24 Paul Eggert file-has-acl: new module, split from acl And add a new module file-has-acl-tests to match. I ran into a problem with the recent changes to the acl module, as they introduced a typo 'test use_xattrs = 0' into 'configure'. When using the fixed version with Emacs, I discovered that file-has-acl wasn't separated out well enough for Emacs (e.g., it had multiple libraries, but needed only one), so I fixed that too. * NEWS: Document this incompatible change. * modules/file-has-acl, modules/file-has-acl-tests: New files. * m4/acl.m4 (gl_FUNC_ACL_ARG): New macro, split from gl_FUNC_ACL. Initialize gl_need_lib_has_acl. (gl_FUNC_ACL): Require it. Simplify use of 'test'. Set LIB_HAS_ACL if gl_need_lib_has_acl. Move the file-has-acl.c-relevant stuff to ... (gl_FILE_HAS_ACL): ... this new macro. Rewrite to fix 'test use_xattrs = 0' typo, and omit some needless work. Set gl_need_lib_has_acl=1 if we'll need LIB_HAS_ACL to be set when gl_FUNC_ACL is called. * modules/acl (Files, lib_SOURCES): Remove lib/file-has-acl.c. (Link): Remove $(LIB_HAS_ACL). * modules/acl-tests (Files, Depends-on, configure.ac, TESTS) (check_PROGRAMS): Move stuff relevant to file-has-acl to modules/file-has-acl-tests. (test_file_has_acl_LDADD): Move to modules/file-has-acl-tests. manywarnings: add GCC 5.1 warnings * build-aux/gcc-warning.spec: Add -Wabi=, -Warray-bounds, -Warray-bounds=, -Wc++14-compat, -Wc90-c99-compat, -Wc99-c11-compat, -Wshadow-ivar, -Wsized-deallocation, -Wsuggest-override, -Wuse-without-only. Change -Wnormalized=... operands to match 5.1. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Wbool-compare, -Wchkp, -Wdesignated-init, -Wdiscarded-array-qualifiers, -Wdiscarded-qualifiers, -Wformat-signedness, -Wincompatible-pointer-types, -Wint-conversion, -Wlogical-not-parentheses, -Wmemset-transposed-args, -Wodr, -Wshift-count-negative, -Wshift-count-overflow, -Wsizeof-array-argument, -Wsuggest-final-methods, -Wsuggest-final-types, -Wswitch-bool. Remove -Warray-bounds, and add -Warray-bounds=2 as a special case. 2015-04-21 Simon Josefsson doc: update FDL template to match FDL examples. * doc/alloca-opt.texi: * doc/alloca.texi: * doc/c-ctype.texi: * doc/c-strcase.texi: * doc/c-strcaseeq.texi: * doc/c-strcasestr.texi: * doc/c-strstr.texi: * doc/c-strtod.texi: * doc/c-strtold.texi: * doc/ctime.texi: * doc/error.texi: * doc/gcd.texi: * doc/gnulib-tool.texi: * doc/inet_ntoa.texi: * doc/intprops.texi: * doc/lib-symbol-visibility.texi: * doc/maintain.texi: * doc/parse-datetime.texi: * doc/quote.texi: * doc/regexprops-generic.texi: * doc/standards.texi: Remove spurious 'with' in FDL license template. 2015-04-21 Paul Eggert lstat: fix cross-compilation 'ln -s' problem * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Have the test program call 'symlink' rather than a separate script run 'ln -s'; this is more likely to work in cross-compilation environments. Reported by Pavel Fedin in: http://lists.gnu.org/r/bug-gnulib/2015-04/msg00060.html 2015-04-16 Ludovic Courtès gendocs.sh: default to a common CSS style sheet for HTML output * build-aux/gendocs.sh (htmlarg): Change default value. 2015-04-15 Mats Erik Andersson gnulib-tool: output bold attribute more portably * gnulib-tool (func_show_module_list): Change hexadecimal numbers to octal in BOLD_ON and BOLD_OFF. The use of hex encoded numbers as arguments to `printf' is not portable, and is not claimed by POSIX. This is the case with FreeBSD. 2015-04-15 Andreas Gruenbacher qacl: Simplify HP-UX acl_nontrivial check * lib/acl-internal.c: Remove struct stat parameter from HP-UX's version of acl_nontrivial. Check if the acl has at most three entries instead (it must have exactly three entries according to the HP-UX documentation). Ignore uids and gids as long as an entry is either for a user (i.e., the owner), a group (i.e., the owning group), or others. * lib/acl-internal.h: Change HP-UX's acl_nontrivial prototype. * lib/qcopy-acl.c (qcopy_acl): With that, we no longer need to stat the file. 2015-04-15 Andreas Gruenbacher acl: On Linux, check for acls without libacl On Linux, use the getxattr syscall instead of the acl_extended_file libacl library function to check for the presence of acls, avoiding a library. * lib/file-has-acl.c: Include xattr headers if we have them. (file_has_acl): On Linux, use getxattr(). * m4/acl.m4 (gl_FUNC_ACL): Define LIB_HAS_ACL as the libraries to link with for file_has_acl(). Check for xattr headers and getxattr(). 2015-04-14 Ángel González tempname: avoid unused parameter warnings (trivial) * lib/tempname.c (try_dir): Tag with __GL_UNUSED. (try_nocreate): Likewise. 2015-04-14 HIRAMATSU Yoshifumi fseeko: fix build failure on NetBSD >= 6 (trivial) * lib/fseeko.c (feeko): NetBSD 6 changed the definition of _offset from 'fpos_t struct' to __off_t, which is a typedef of __int64_t. 2015-04-09 Paul Eggert gitlog-to-changelog: port to MS-Windows * build-aux/gitlog-to-changelog (git_dir_option): Use strftime with "%Y-%m-%d", not "%F", to avoid a bug in MS-Windows Perl. Reported by Eli Zaretskii in: http://lists.gnu.org/r/emacs-devel/2015-04/msg00504.html 2015-04-07 Karl Berry gendocs: new option --tex for passing args to texi2dvi. * build-aux/gendocs.sh: new option --tex, default -t @finalout. (TEXI2DVI): cut to just command name. (usage): mention new option, and update copyright. : use it. 2015-04-07 Karl Berry * config/srclistvars.sh (GETTEXT): new definition. * config/srclist.txt: use it for gettext .m4 files. Thread starting at http://lists.gnu.org/r/bug-gnulib/201 and confirmed at http://lists.gnu.org/r/bug-gnulib/2015-02/msg00146.html and continuing into April. 2015-04-07 Daiki Ueno uniname/uniname-tests: fix failure due to alias Reported by Jack Howarth in: . * tests/uniname/test-uninames.c (name_has_alias): New function. (test_inverse_lookup): Exclude character name with valid alias, from randomly generated character names. (main): Fill unicode_aliases before calling test functions. 2015-04-03 Giuseppe Scrivano hash: remove deprecated hash_insert0 function * lib/hash.h (hash_insert0): Remove deprecated function. * lib/hash.c (hash_insert0): Likewise. 2015-04-02 Pádraig Brady mountlist: remove dependency on libmount * lib/mountlist.c (read_file_system_list): Parse /proc/self/mountinfo directly, rather than depending on libmount, which has many dependencies due to its dependence on libselinux, as detailed at: http://lists.gnu.org/r/bug-gnulib/2015-01/msg00063.html Note we restrict this to __linux__ as that's probably where this interface will remain. If ever porting, it would be best to first pull the makedev() wrapper from coreutils to a gnulib module. Note also we don't add a getline dependency to the mountlist module, as all Linux versions are sufficient. 2015-04-02 Paul Eggert stddef: port to pre-C11 GCC on x86 On this platform, max_align_t should have an alignment of 8 even though the storage alignments of double, long, etc. max out at 4. Inspired by a comment of Andreas Schwab's here: https://sourceware.org/ml/libc-alpha/2015-04/msg00017.html * lib/stddef.in.h (_GL_STDDEF_ALIGNAS) [!HAVE_MAX_ALIGN_T]: New macro. (max_align_t) [!HAVE_MAX_ALIGN_T]: Use it. * tests/test-stddef.c: Test __alignof__ too, if available. 2015-03-24 Pádraig Brady quotearg-simple-tests: add missing gl_FUNC_MMAP_ANON dependency * modules/quotearg-simple-tests: Reference m4/mmap-anon.m4 2015-03-24 Tobias Stoeckmann yesno: make EOL optional in ENABLE_NLS case also (trival) * lib/yesno.c (yesno): Check for EOL before replacing. * tests/test-yesno.sh: Add a test case (test along with gettext). 2015-03-22 Paul Eggert fdopendir-tests: test it does not close its arg * tests/test-fdopendir.c (main): Test that fdopendir does not close its argument. From a suggestion by David Grayson in: http://lists.gnu.org/r/bug-gnulib/2015-03/msg00039.html 2015-03-20 Paul Eggert gitlog-to-changelog: trim trailing white space * build-aux/gitlog-to-changelog (main): Trim trailing white space from commit message lines. This is helpful for processing the GNU Emacs repository, which dates back to 1985 and contains a lot of such lines. gitlog-to-changelog: new option --ignore-matching * build-aux/gitlog-to-changelog (usage, git_dir_option, main): Support new option --ignore-matching=PAT, which ignores all commit messages whose first line matches PAT. 2015-03-19 Paul Eggert fdopendir: port better to MinGW * lib/fdopendir.c (fd_clone_opendir) [REPLACE_FCHDIR]: Use 'dup' if dirfd fails. Suggested by Eli Zaretskii in: http://lists.gnu.org/r/bug-gnulib/2015-03/msg00033.html * modules/fdopendir (Depends-on): Add dirfd. 2015-03-18 Paul Eggert fdopendir: fix typo in comment * lib/fdopendir.c (fdopendir_with_dup): REPLACE_FCHDIR was misspelled. 2015-03-09 Eric Blake error: document all entry points provided * doc/glibc-functions/error_print_progname.texi (error_print_progname): Mention the error module. * doc/glibc-functions/error_at_line.texi (error_at_line): Likewise. * doc/glibc-functions/error_message_count.texi (error_message_count): Likewise. * doc/glibc-functions/error_one_per_line.texi (error_one_per_line): Likewise. 2015-03-03 Paul Eggert vasnprintf: pacify clang 3.5.0 Problem reported by Werner Lemberg in: http://lists.gnu.org/r/bug-gnulib/2015-03/msg00000.html * lib/vasnprintf.c (VASNPRINTF): Omit casts that clang objects to. The casts aren't needed, since the characters in question are ASCII. 2015-02-24 Paul Eggert glob, etc.: port to MSVC v18 on MS-Windows 8.1 * lib/dirent--.h (GNULIB_defined_opendir): * lib/dirent.in.h (GNULIB_defined_opendir) (GNULIB_defined_closedir): * lib/getcwd.c, lib/glob.c, lib/mountlist.c (opendir, closedir): #undef only if Gnulib defined it. poll: port to MSVC v18 on MS-Windows 8.1 Problem reported by Gisle Vanem in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00139.html * lib/poll.c: Always include and . * modules/poll (Depends-on) [!HAVE_POLL || REPLACE_POLL]: Add sys_socket. 2015-02-24 Pádraig Brady tests: support stderr verification with returns_() * tests/init.sh (returns_): Disable tracing for this wrapper function, so that stderr of the wrapped command is unchanged, allowing for verification of the contents. 2015-02-24 Pavel Hrdina passfd: avoid valgrind uninitalised data warning * lib/passfd.c (sendfd): Reset the msg_controllen of msghdr, to include just the fd we've initialized, rather than including the extra space used for alignment. 2015-02-23 Paul Eggert uniwbrk/u32-wordbreaks-tests: fix copyright * tests/uniwbrk/test-uc-wordbreaks.c: Fix copyright date. dup2: doc and test for Android bug Reported by Kevin Cernekee in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00125.html * doc/posix-functions/dup2.texi (dup2): Document the bug. * m4/dup2.m4 (gl_FUNC_DUP2): Test for the bug. 2015-02-23 Kevin Cernekee Replace dup2() on Android * m4/dup2.m4 (gl_FUNC_DUP2): Android implements dup2() using dup3(). Since dup3(fd, fd) fails but dup2(fd, fd) should pass, test-dup2 fails. Using rpl_dup2() fixes this because it has an explicit test for this condition. 2015-02-22 Paul Eggert Android doesn't define RLIM_SAVED_* Portability problem reported by Kevin Cernekee in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00122.html * doc/posix-headers/sys_resource.texi (sys/resource.h): Mention the portability problem. * lib/getdtablesize.c (RLIM_SAVED_CUR, RLIM_SAVED_MAX): Define if not defined. * m4/dup2.m4 (gl_FUNC_DUP2): * m4/fcntl.m4 (gl_FUNC_FCNTL): Likewise. 2015-02-21 Paul Eggert vasnprintf-posix-tests: use consistent test * tests/test-vasnprintf-posix.c (test_function): Use "<" in assert instead of "<=", for consistency with other tests. 2015-02-20 Paul Eggert printf, isinf, etc.: noncanonical != NaN Do not require that isinf, printf, etc. treat noncanonical values as NaNs. Instead, require only that they do not crash. Problem reported by Joseph Myers in: https://sourceware.org/ml/libc-alpha/2015-02/msg00244.html * doc/posix-functions/dprintf.texi (dprintf): * doc/posix-functions/fprintf.texi (fprintf): * doc/posix-functions/isfinite.texi (isfinite): * doc/posix-functions/isinf.texi (isinf): * doc/posix-functions/isnan.texi (isnan): * doc/posix-functions/printf.texi (printf): * doc/posix-functions/snprintf.texi (snprintf): * doc/posix-functions/sprintf.texi (sprintf): * doc/posix-functions/vdprintf.texi (vdprintf): * doc/posix-functions/vfprintf.texi (vfprintf): * doc/posix-functions/vprintf.texi (vprintf): * doc/posix-functions/vsnprintf.texi (vsnprintf): * doc/posix-functions/vsprintf.texi (vsprintf): Document this. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): * m4/isinf.m4 (gl_ISINFL_WORKS): * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): * tests/test-isfinite.c (test_isfinitel): * tests/test-isinf.c (test_isinfl): * tests/test-isnan.c (test_long_double): * tests/test-isnanl.h (main): * tests/test-snprintf-posix.h (test_function): * tests/test-sprintf-posix.h (test_function): * tests/test-vasnprintf-posix.c (test_function): * tests/test-vasprintf-posix.c (test_function): Test only that noncanonical values do not cause crashes, not that they are treated as NaNs. In some cases this means a larger output buffer is needed. 2015-02-20 Jaroslav Skarvada fts: remove redundant close() (trivial) * lib/fts.c (fts_read): Remove redundant call to close(). Spotted by coverity. 2015-02-20 Paul Eggert getdtablesize: port better for Android Problem reported by Kevin Cernekee in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00112.html * doc/glibc-functions/getdtablesize.texi (getdtablesize): Mention bug. * lib/getdtablesize.c (getdtablesize): Don't fall back on _SC_OPEN_MAX. Instead, just use getrlimit, taking care to avoid Cygwin bug. poll: fixes for large fds * lib/poll.c (poll): Don't check directly for NFD too large. Don't rely on undefined behavior in FD_SET when an arg exceeds FD_SETSIZE. Always set revents afterwards, even if to zero. * tests/test-poll.c (poll1): Set revents to -1 instead of 0, as that makes the test a bit stricter. 2015-02-19 Kevin Cernekee fcntl: Fix cross compiling * m4/fcntl.m4 (gl_FUNC_FCNTL): Assign the guessed result to the correct variable name (gl_cv_func_fcntl_f_dupfd_works). 2015-02-18 Paul Eggert dup2, fcntl: cross-compile better for Android Problem reported by Kevin Cernekee in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00109.html * m4/dup2.m4 (gl_FUNC_DUP2): Don't guess no when cross-compiling for a Linux kernel. That kernel bug was fixed on 2009-05-11, and there's little need to cross-compile for older kernels nowadays. * m4/fcntl.m4 (gl_FUNC_FCNTL): When cross-compiling, guess no only for systems where the bug is known to occur (AIX, Cygwin, Haiku). 2015-02-18 Pádraig Brady getopt: don't crash on memory exhaustion * lib/getopt.c (_getopt_internal_r): Use degraded diagnostics on memory exhaustion. In the _LIBC case we use alloca() as is already done in glibc, so we don't need to consider the separate error path in that awkward case. Also fix a memory leak when ambiguous options are present. Reported by Tobias Stoeckmann 2015-02-17 Mike Miller tempname: allow compilation with C++ (trivial) * lib/tempname.h [C++]: Specify extern "C" linkage. * lib/tempname.h (try_tempname): * lib/tempname.c (__try_tempname, __gen_tempname): Rename 'try' to 'tryfunc'. 2015-02-17 Paul Eggert dup2, fcntl: port to AIX * m4/dup2.m4 (gl_FUNC_DUP2): * m4/fcntl.m4 (gl_FUNC_FCNTL): Prefer getrusage (RLIM_NOFILE ...)/rlim_cur to sysconf (_SC_OPEN_MAX). The former works on AIX 7.1 but the latter does not. Also, this may work better with Android; see: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00100.html 2015-02-16 Paul Eggert getdtablesize, dup2, fcntl: port to Android Problem reported by Kevin Cernekee in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00092.html * doc/glibc-functions/getdtablesize.texi (getdtablesize): Mention that getdtablesize doesn't work on Android. * lib/getdtablesize.c: Use getrlimit substitute only if getdtablesize is declared. This should suffice for Cygwin while not breaking Android. * m4/dup2.m4 (gl_FUNC_DUP2): * m4/fcntl.m4 (gl_FUNC_FCNTL): Prefer sysconf (_SC_OPEN_MAX) to getdtablesize, as the former is standardized but the latter is not, and sysconf works on Android. * m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Also check that getdtablesize is declared. This removes the need for a special case for Android. 2015-02-16 Kevin Cernekee localename: Implement gl_locale_name_thread_unsafe for Android * lib/localename.c: Android API level >= 21 supports two hardcoded locales: C (POSIX) and C.UTF-8. Distinguish them by checking the internal __locale_t struct. 2015-02-16 Kamil Dudka fts: avoid crash when a cycle is added while traversing This could be triggered by auto-mounting a recursive bind mount. Reported by Michael Chapman in: https://bugzilla.redhat.com/1188498 * lib/fts.c (fts_read): Avoid removing the original hash table item when leaving a directory that caused a cycle, and preserve the FTS_DC flag. 2015-02-16 Daiki Ueno uniname/uniname: support character alias * lib/uniname/gen-uninames.lisp (main): New argument ALIASFILE. Generate one-way mapping from aliases to codepoints in the generated tables. Special case variation selectors to reduce table size. * lib/uniname/uniname.c (unicode_character_name): Special case variation selectors. (unicode_name_character): Special case variation selectors and their aliases. * lib/uniname/uninames.h: Regenerate. * tests/uniname/NameAliases.txt: New file, taken from UCD 7.0.0. * modules/uniname/uniname-tests (Files): Add tests/uniname/NameAliases.txt. * tests/uniname/test-uninames.c: Mark as static. (ALIASLEN): Define. (struct unicode_alias): New struct. (unicode_aliases): New variable. (fill_aliases): New function. (test_alias_lookup): New test function. (main): Run the 'test_alias_lookup' test if the second argument is given. * tests/uniname/test-uninames.sh: Supply NameAliases.txt as the second argument. 2015-02-11 Kevin Cernekee Fix FILE struct compatibility with Android API level >= 21 * lib/stdio-impl.h: Test explicitly for __ANDROID__ instead of __sferror. Recent versions of Bionic's stdio.h no longer define __sferror. * lib/fbufmode.c: Likewise. * lib/fflush.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.c: Likewise. Assume unbroken ungetc() on Android * m4/ungetc.m4: Add Android case to host OS check. The ungetc() test case passed when running on an Android host, and the code hasn't really changed since 2009. getdtablesize: Fix Android build * m4/getdtablesize.m4: Add Android case to host OS check. Recent NDK versions have this symbol in the .so library (at least 32-bit platforms) but are missing the declaration in the header file, causing the m4 logic to guess incorrectly. localename: Fix Android build * modules/localename (Depends-on): Add langinfo. getugroups: Fix Android build * lib/getugroups.c: Don't reference unsupported {get,set,end}grent functions. euidaccess: Fix Android build * modules/euidaccess (Depends-on): Add fcntl-h to ensure that AT_EACCESS gets declared. linkat_nofollow: Add fallback case for cross compiling * m4/linkat.m4: Guess no for Darwin, yes otherwise. net_if: Handle content-free system headers * m4/net_if_h.m4: Check to make sure actually defines struct if_nameindex. If not, enable the replacement header. signal_h: Fix Android build * lib/signal.in.h: Add Android to the list of platforms that declare pthread_sigmask() in instead of . duplocale: Fix Android build of duplocale-tests * modules/duplocale-tests (Depends-on): Add langinfo, as the header is included by test-duplocale.c (but not by duplocale.c). * modules/duplocale-tests (configure.ac): Check for monetary.h. * tests/test-duplocale.c: Skip test if monetary.h is absent. * doc/posix-headers/monetary.texi: Add Android to the list of platforms missing monetary.h. 2015-02-11 Pádraig Brady tests: avoid recent -Werror=unused-variable regression in test-locale * tests/test-locale.c (main): Reference the variable to avoid the "unused variable" warning. 2015-02-11 Pádraig Brady maint: various whitespace cleanups in tempname * lib/tempname.c: Normalize spacing and line length. * lib/tempname.h: Likewise. * modules/tempname: Likewise. 2015-02-11 Pádraig Brady tests: provide returns_() to simplify exit status checking * tests/init.sh (returns_): A new function for use in tests, to allow for easier checking of return values, where you expect a command to exit with failure status. By checking for a particular exit code, you don't hide any crashes for example. 2015-02-11 Pádraig Brady mountlist: only use libmount when specified There are currently many shared libs dependencies introduced by libmount with associated runtime and virt mem overhead. Therefore don't enable by default. * m4/ls-mntd-fs.m4: Use --with-libmount to enable at build time. 2015-02-08 Daiki Ueno uniname/unimame-tests: don't link with -lunistring * modules/uniname/uniname-tests (Makefile.am): Don't link against $(LIBUNISTRING). Document the rationale why we need to conditionalize the test. 2015-02-07 Paul Eggert fstrcmp: don't assume strlen < INT_MAX * lib/fstrcmp.c: Include stddef.h and stdint.h. (uintptr_t): Remove, as we're now assuming stdint. (OFFSET, EXTRA_CONTEXT_FIELDS, fstrcmp_bounded): Prefer ptrdiff_t to int when the value could exceed INT_MAX if the input string is long. (fstrcmp_bounded): Check for size-calculation overflow. Prefer uintptr_t to size_t when the underlying value is a pointer casted to an unsigned integer. Avoid unnecessary 'buffer != NULL' test. * modules/fstrcmp (Depends-on): Add stdint. diffseq: prefer ptrdiff_t to ssize_t * lib/diffseq.h: In commentary, prefer ptrdiff_t to ssize_t. ptrdiff_t is the natural type for signed indexes. On a few older platforms, ssize_t is narrower than size_t. xalloc: fix typo that suppressed warnings * lib/xalloc.h: Add missing _GL_INLINE_HEADER_END. This typo, introduced a couple of years ago, mistakenly suppressed some -Wsuggest-attribute=const, -Wmissing-prototypes, and -Wmissing-declarations warnings. full-read: fix license notice typo * lib/full-read.h: Remove a stray line in the license notice. Reported by Sam Ellis in: http://bugs.gnu.org/19808 crypto/gc: fix a -Wswitch warning Reported by Bruce Korb in: http://lists.gnu.org/r/bug-gnulib/2015-02/msg00046.html * lib/gc-gnulib.c (gc_hash_open): Fail faster if MODE is nonzero. 2015-02-03 Pádraig Brady gnulib-tool: fix handling of patch(1) diagnostics * gnulib-tool: Send diagnostics from patch(1) to stderr, as otherwise gnulib-tool will reparse that output and attempt to lookup modules. 2015-02-03 Pádraig Brady bootstrap: exit immediately upon gnulib-tool failure * build-aux/bootstrap: Exit immediately if gnulib-tool fails. This was noticed when gnulib-tool exited early due to failure to apply a patch in coreutils at http://hydra.nixos.org/eval/1172233, but various confusing errors were then given as the build proceeded. 2015-02-02 Andreas Gruenbacher symlinkat: include all required header files * lib/symlinkat.c (HAVE_SYMLINK_AT): Add for fstatat(), and string.h for strlen(), required at least on OS X 10.10 (Yosemite). Reported at https://savannah.gnu.org/bugs/index.php?44151 and by Jack Howarth. 2015-01-29 Pádraig Brady localename: support Solaris 12 and illumos * lib/localename.c (gl_locale_name_thread_unsafe): call getlocalename_l() on newer __sun platforms. Reported by Alexander Pyhalov. Fix suggested by Rich Burridge. 2015-01-29 Alexander Pyhalov locale: fix tests on illumos (trivial) * tests/test-locale.c: LC_GLOBAL_LOCALE is a function call on illumos, so move from global scope to main(). 2015-01-24 Daiki Ueno unictype: avoid undefined left-shift behavior * lib/unictype/bidi_of.c (uc_bidi_class): Building libunistring with gcc's -fsanitize=shift and running its tests triggered: unictype/bidi_of.c:43:60: runtime error: left shift of 40167 by 16 \ places cannot be represented in type 'int' Cast LHS to 'unsigned int' after integer promotion. * lib/unictype/categ_of.c (lookup_withtable): Likewise. * lib/unictype/joininggroup_of.c (uc_joining_group): Likewise. 2015-01-20 Daiki Ueno libunistring: bump version of unitypes dependants Due to the header file search order, all the headers which depend on unitypes.h need to be generated, when the preinstalled libunistring is older. * modules/unicase/base (configure.ac): Bump minimum version to 0.9.4. * modules/uniconv/base (configure.ac): Likewise. * modules/unilbrk/base (configure.ac): Likewise. * modules/uninorm/base (configure.ac): Likewise. * modules/unistdio/base (configure.ac): Likewise. * modules/unistr/base (configure.ac): Likewise. * modules/uniwbrk/base (configure.ac): Likewise. * modules/uniwidth/base (configure.ac): Likewise. 2015-01-20 Daiki Ueno unictype/category-none: fix link with libunistring Since _UC_CATEGORY_NONE is not a public symbol, it will be prefixed with "libstring_" when compiled as part of libunistring. To avoid undefined symbol at link time, increase the minimum version when the dependant modules are updated. * modules/unictype/category-none (configure.ac): Bump minimum version to 0.9.5. 2015-01-20 Daiki Ueno unitypes: fix build with installed libunistring The minimum version has not bumped after _UC_ATTRIBUTE_CONST and _UC_ATTRIBUTE_PURE were added to unitypes.in.h. * modules/unitypes (configure.ac): Bump minimum version to 0.9.4. 2015-01-15 Paul Eggert time: port to MinGW32 3.21 Problem reported by Eli Zaretskii in: http://lists.gnu.org/r/bug-gnulib/2015-01/msg00042.html * lib/time.in.h: * m4/time_h.m4 (gl_CHECK_TYPE_STRUCT_TIMESPEC): * modules/time (Depends-on): Fall back on unistd.h if the other include files don't define struct timespec. update-copyright: apply to self * build-aux/update-copyright: Fix copyright date. How ironic! 2015-01-15 Daiki Ueno libunistring: update to Unicode 7.0.0 * lib/unictype/joininggroup_byname.gperf: Add Straight Waw and Manichaean names. * lib/unictype/joininggroup_name.h: Likewise. * lib/unictype.in.h (UC_JOINING_GROUP_STRAIGHT_WAW) (UC_JOINING_GROUP_MANICHAEAN_ALEPH): New enumeration values. * lib/gen-uni-tables.c (UC_JOINING_GROUP_STRAIGHT_WAW) (UC_JOINING_GROUP_MANICHAEAN_*): New enumeration values. (fill_arabicshaping, joining_group_as_c_identifier): Support those enum values. (is_property_alphabetic): Accept newly added characters to cuneiform numeric signs. (is_property_default_ignorable_code_point): Reject U+0605. (FIELDLEN): Increase from 120 to 160. * lib/uniwidth/width.c (nonspacing_table_data): Add U+0605, U+08FF, U+0C00, U+0C81, U+0D01, U+1AB0..U+1ABE, U+1BAC..U+1BAD, U+1CF8..U+1CF9, U+1DE7..U+1DF5, U+A9E5, U+AA7C, U+FE27..U+FE2D, U+102E0, U+10376..U+1037A, U+10AE5..U+10AE6, U+1107F, U+11173, U+1122F..U+11231, U+11234, U+11236..U+11237, U+112DF, U+112E3..U+112EA, U+11301, U+1133C, U+11340, U+11366..U+1136C, U+11370..U+11374, U+114B3..U+114B8, U+114BA, U+114BF..U+114C0, U+114C2..U+114C3, U+115B2..U+115B5, U+115BC..U+115C0, U+11633..U+1163A, U+1163D, U+1163F..U+11640, U+16AF0..U+16AF4, U+16B30..U+16B36, U+1BC9D..U+1BC9E, U+1BCA0..U+1BCA3, and U+1E8D0..U+1E8D6. (uc_width): Adjust nonspacing_table_ind boundary from 240 to 248. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * all generated files under lib/uni* and tests/uni*: Regenerate. 2015-01-14 Daiki Ueno libunistring: update to Unicode 6.3.0 * lib/uniwbrk.in.h (WBP_DQ, WBP_SQ, WBP_HL): New enumeration values. * lib/uniwbrk/u-wordbreaks.h (FUNC): Support WB7a, WB7b, and WB7c. Update WB5, WB6, WB7, WB9, WB11, WB12, WB13a, and WB13b. * lib/uniwbrk/wbrktable.h (uniwbrk_table): Adjust table size. * lib/uniwbrk/wbrktable.c (uniwbrk_table): Support rule WB7a. Update WB5, WB9, WB10, WB13a, and WB13b. * tests/uniwbrk/test-uc-wordbreaks.c (wordbreakproperty_to_string): Support WBP_DQ, WBP_SQ, and WBP_HL. * lib/gen-uni-tables.c (UC_BIDI_LRI, UC_BIDI_RLI, UC_BIDI_FSI) (UC_BIDI_PDI): New enumeration values. (bidi_category_byname): Support those enum values. (is_WBP_MIDNUMLET): Exclude 0x0027 (SINGLE QUOTE), which is now a dedicated property assigned. (is_property_case_ignorable): Check 0x0027. (WBP_DQ, WBP_SQ, WBP_HL): New enumeration values. (get_wbp, debug_output_wbp, fill_org_wbp, debug_output_org_wbp) (output_wbp): Support those enum values. * lib/unictype.in.h (UC_BIDI_LRI, UC_BIDI_RLI, UC_BIDI_FSI) (UC_BIDI_PDI): New enumeration values. * lib/unictype/bidi_byname.gperf: Add those property names. * lib/uniwidth/width.c (nonspacing_table_data): Add U+061C, U+180E, U+1A1B, and U+2066..U+2069. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * all generated files under lib/uni* and tests/uni*: Regenerate. 2015-01-14 Daiki Ueno libunistring: update to Unicode 6.2.0 * lib/unilbrk/lbrktables.h (LBP_RI): New enumeration value. (unilbrk_table): Adjust table size. * lib/unilbrk/lbrktables.c (unilbrk_table): Add a row and column for LBP_RI. * lib/uniwbrk.in.h (WBP_RI): New enumeration value. * lib/uniwbrk/u-wordbreaks.h (FUNC): Support rule WB13c. Normalize table index skipping ignored properties. * lib/uniwbrk/wbrktable.c (uniwbrk_table): Support WBP_RI. Remove WBP_EXTEND and WBP_FORMAT, which are now computed without using the table. * lib/uniwbrk/wbrktable.h: Adjust table size. * lib/unigbrk.in.h (GBP_RI): New enumeration value. * lib/unigbrk/uc-is-grapheme-break.c (UC_IS_GRAPHEME_BREAK): Support rule GB8a. (UC_GRAPHEME_BREAKS_FOR, gb_table): Support GBP_RI. * tests/unigbrk/test-uc-is-grapheme-break.c (graphemebreakproperty_to_string): Support GBP_RI. * tests/uniwbrk/test-uc-wordbreaks.c (wordbreakproperty_to_string): Support WBP_RI. * lib/gen-uni-tables.c (LBP_RI): New enumeration value. (get_lbp, debug_output_lbp, fill_org_lbp, debug_output_org_lbp) (output_lbp): Support LBP_RI. Adjust some characters changed from LBP_AL to LBP_ID. (output_lbp): Support LBP_RI. (WBP_RI): New enumeration value. (debug_output_wbp, fill_org_wbp, debug_output_org_wbp) (output_wbp): Support WBP_RI. (GBP_RI): New enumeration value. (output_gbp_test, fill_org_gbp): Support GBP_RI. * all generated files under lib/uni* and tests/uni*: Regenerate. 2015-01-14 Daiki Ueno libunistring: update to Unicode 6.1.0 * lib/gen-uni-tables.c (output_joining_group): Switch to 3-level table to accommodate joining groups defined with higher codepoint value. Since there are only 88 groups defined in Unicode 7.0.0, use 7-bit packed format for level3 entries. (get_lbp): Update for Unicode 6.1.0. * lib/unictype/joininggroup_of.c (uc_joining_group): Adjust to use 3-level table. * lib/unictype/joininggroup_byname.gperf: Add Rohingya Yeh joining group name. * lib/unictype/joininggroup_name.h: Likewise. * lib/unilbrk/lbrktables.h (LBP_HL): New enumeration value. (unilbrk_table): Adjust table size. * lib/unilbrk/lbrktables.c (unilbrk_table): Add a row and column for LBP_HL. * lib/uniwidth/width.c (nonspacing_table_data): Add U+0604, U+08E4..U+08FE, U+1BAB, U+1CF4, U+A674..U+A67B, U+A69F, U+AAEC..U+AAED, U+AAF6, U+11100..U+11102, U+11127..U+1112B, U+1112D..U+11134, U+11180..U+11181, U+111B6..U+111BE, U+116AB, U+116AD, U+116B0..U+116B5, U+116B7, U+16F8F..U+16F92. Remove U+302E..U+302F. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * all generated files under lib/uni* and tests/uni*: Regenerate. * modules/uni*/* (configure.ac): Bump minimum version to 0.9.5. 2015-01-15 Daiki Ueno uniwbrk/u32-wordbreaks-tests: add conformance test * modules/uniwbrk/u32-wordbreaks-tests (Files): Add tests/uniwbrk/test-uc-wordbreaks.c, tests/uniwbrk/test-uc-wordbreaks.sh, and tests/uniwbrk/WordBreakTest.txt. (Makefile.am): Add uniwbrk/test-uc-wordbreaks.sh to $(TESTS), add test-uc-wordbreaks to $(check_PROGRAMS), and define test_uc_wordbreaks_SOURCES and test_uc_wordbreaks_LDADD. * tests/uniwbrk/test-uc-wordbreaks.sh: New file. * tests/uniwbrk/test-uc-wordbreaks.c: New file. 2015-01-15 Daiki Ueno uniwbrk: ignore Extended/Format characters at BOL not BOS * lib/uniwbrk/u-wordbreaks.h (FUNC): Ignore Extend and Format characters if the previous character property is one of WBP_NEWLINE, WBP_CR, and WBP_LF. 2015-01-11 Jim Meyering test-strstr.c: avoid a trivial leak * tests/test-strstr.c (main): Free haystack. update-copyright: recognize groff's \(co marker * build-aux/update-copyright (circle_c_re): Also accept uses of \(co, as found in gzip.1. 2015-01-08 Pádraig Brady maint.mk: fix compatibility with OS X nm * top/maint.mk (_gl_tight_scope): Use the -g option to show exported items rather than the -e option which is ignored on all platforms except OS X where it gives an error. Reported by Assaf Gordon. 2015-01-07 KO Myung-Hun localcharset: improve charset detection on OS/2 Use system codepage when appropriate. Map OS/2 codepages to GNU canonical charset names if possible. * lib/config.charset: Don't output aliases if "$os" is os2*. * lib/localcharset.c (get_charset_aliases) [OS2]: Hardcode the result for OS/2. (locale_charset) [OS2]: Use system codepage if codeset is omitted from the locale name which is neither "C" nor "POSIX". 2015-01-06 Paul Eggert count-leading-zeros: use 64-bit intrinsics on 32-bit Windows This reverts the last patch but one, as it shouldn't be needed now that the typo is fixed. * lib/count-leading-zeros.h (count_leading_zeros_ll): * lib/count-trailing-zeros.h: * lib/count-one-bits.h: Go back to using 64-bit intrinsics. count-leading-zeros: fix pragma typos * lib/count-leading-zeros.h (_BitScanReverse, _BitScanReverse64): Fix typos in declaration of intrinsics when _MSC_VER. 2015-01-06 Pádraig Brady count-leading-zeros: avoid 64-bit intrinsics on 32-bit Windows * lib/count-leading-zeros.h (count_leading_zeros_ll): Use 32 bit intrinsics in this case. * lib/count-trailing-zeros.h: Likewise. * lib/count-one-bits.h: Likewise. 2015-01-06 Daiki Ueno uniname/uniname: update to Unicode 7.0.0 To accommodate new characters added since Unicode 5.1.0, this changes the internal representation of codepoint ranges. Previously, we grouped codepoint ranges by manually assigned 4-bit tag, which only allowed 16 groups. This removes the limitation by switching to binary search on a table. For the detail rationale and the benchmark results, see: https://lists.gnu.org/r/bug-libunistring/2014-06/msg00001.html * lib/uniname/gen-uninames.lisp (unicode-char): Rename CODE member to INDEX, as it no longer represents a codepoint. (range): New struct. (main): Switch to intervals list from a bit-pattern based classification. * lib/uniname/uninames.h: Regenerate. * tests/uniname/UnicodeDataNames.txt: Update to Unicode 7.0.0. * modules/uniname/base (configure.ac): Bump minimum version to 0.9.5. * modules/uniname/uniname (configure.ac): Bump minimum version to 0.9.5. 2015-01-05 Eric Blake doc: update INSTALL from autoconf * doc/install.texi: Resync from autoconf. * doc/INSTALL: Reflect recent autoconf update. * doc/INSTALL.ISO: Likewise. * doc/INSTALL.UTF-8: Likewise. stdio: fix use of PRIdMAX on modern mingw * m4/stdio_h.m4 (gl_STDIO_H): Probe for printf flavor via inttypes. * lib/stdio.in.h (_GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM): Use result to work with modern mingw. 2015-01-05 Daniel P. Berrange (tiny change) pthread: detect git mingw builds with only partial pollution * m4/pthread.m4 (gl_PTHREAD_CHECK): Check for additional pollution, as seen temporarily in Fedora 21. 2015-01-04 Paul Eggert lib-symbol-versions: cache script check * m4/ld-version-script.m4 (gl_LD_VERSION_SCRIPT): Cache the check for linker version scripts. From a suggestion by Christophe Curis in: http://lists.gnu.org/r/bug-gnulib/2015-01/msg00011.html 2015-01-04 Benno Schulenberg maint: fix grammar nits in propername (trivial change) * lib/propername.h: Remove a mistaken comma and a duplicate "from", and use an adequate verb and tense. 2015-01-02 Ludovic Courtès Suggested by Paul Eggert . * module/gendocs: Add 'doc/gendocs_template_min'. * build-aux/gendocs.sh: Change email addresses and upstream URLs from to Gnulib's. (scripturl, templateurl): Adjust accordingly. 2015-01-01 Paul Eggert gendocs: copyright date and version fix Reported by Karl Berry in: http://lists.gnu.org/r/bug-gnulib/2015-01/msg00002.html * build-aux/gendocs.sh, doc/gendocs_template, doc/gendocs_template_min: Fix copyright date. * build-aux/gendocs.sh (scriptversion): Update. 2015-01-01 Karl Berry * doc/install.texi, * build-aux/mdate-sh, * build-aux/depcomp, * build-aux/config.guess, * build-aux/config.sub, * build-aux/ar-lib, * build-aux/compile: revert copyright updates (some from last year) in slaved files. 2015-01-01 Paul Eggert version-etc: new year * doc/gnulib.texi: * lib/version-etc.c (COPYRIGHT_YEAR): Update copyright date. * all files: Run 'make update-copyright'. 2014-12-30 Pádraig Brady xstrtol: ensure errno is reset Since commit 3bf75404, on 26-09-1998, errno may not have been reset. Noticed with a spurious coreutils test failure on Darwin 14.0.0. * lib/xstrtol.c (__xstrtol): Always reset errno before returning. 2014-12-28 Paul Eggert utimens: fix dependency typo * modules/utimens (Depends-on): Remove 'assure'. This bug was introduced in the recent 'assure' patch. 2014-12-22 Eric Blake docs: mention why libgen.h is bad * doc/posix-headers/libgen.texi (libgen.h): Refer to dirname module. 2014-12-20 Paul Eggert assure: new module This works better than 'assert' when compiling with -DNDEBUG, as it avoids some compiler diagnostics in that case. Reported by Norihiro Tanaka in: http://lists.gnu.org/r/bug-gnulib/2014-12/msg00215.html * MODULES.html.sh (func_all_modules): Add 'assure'. * lib/assure.h, modules/assure: New files. * lib/chdir-long.c, lib/cycle-check.c, lib/fchdir.c, lib/fts.c: * lib/poll.c, lib/savewd.c, lib/xstrtol.c: Prefer 'assure' to 'assert'. * lib/utimens.c: Stop using 'assert'; it wasn't helpful. * modules/chdir-long, modules/cycle-check, modules/fchdir: * modules/poll, modules/savewd, modules/utimens, modules/xstrtol: Depend on 'assure'. 2014-12-16 Paul Eggert stdalign: port better to HP compilers * m4/stdalign.m4 (gl_STDALIGN_H): Try the test if __HP_cc or __HP_aCC are nonzero, to be consistent with the 2014-01-20 patch. stdalign: work around Apple GCC 4.0 bug Reported by David Fang in: http://lists.gnu.org/r/bug-gnulib/2014-12/msg00194.html * lib/stdalign.in.h (_Alignas): * m4/stdalign.m4 (gl_STDALIGN_H): Do not use aligned attribute with GCC 4.0 on Apple. 2014-12-16 Pádraig Brady getcwd: fix test failure on OS X 10.9 * m4/getcwd-path-max.m4: Avoid the replacement if it won't be effective due to the PATH_MAX limitation of lstat(). (gl_cv_func_getcwd_path_max): Adjust to indicate this case. * m4/getcwd.m4 (gl_FUNC_GETCWD): Define HAVE_GETCWD_SHORTER for this case for use in tests, and also exclude this case when setting REPLACE_GETCWD. * tests/test-getcwd.c (test_long_name): Restrict the tested path length so that lstat() will not be passed a path greater than PATH_MAX. Also key a test condition on HAVE_OPENAT_SUPPORT rather than AT_FDCWD, since the latter is set unconditionally since Sep 2009 in commit 52c658e9. 2014-12-14 Tim Rühsen parse-datetime: avoid a compiler warning with byacc (trivial) * lib/parse-datetime.y (yylex): Use the same prototype in the function definition as the declaration, to avoid a -Wstrict-prototypes warning seen when using byacc. 2014-12-12 Daiki Ueno unicase/locale-language-tests: fix LOCALE_FR test * tests/unicase/test-locale-language.sh: Really use $LOCALE_FR for a French locale with traditional encoding. Reported by umerqayam in: http://lists.gnu.org/r/bug-libunistring/2014-12/msg00000.html 2014-12-12 Paul Eggert stddef: support C11's max_align_t * doc/posix-headers/stddef.texi (stddef.h): Document max_align_t. * lib/stddef.in.h (_@GUARD_PREFIX@_STDDEF_H) [__need_wint_t]: Do not undef, as that might cause max_align_t to be defined twice. Instead, change use to check for _GL_STDDEF_WINT_T too. (max_align_t) [!HAVE_MAX_ALIGN_T]: New decl. * m4/stddef_h.m4 (gl_STDDEF_H, gl_STDDEF_H_DEFAULTS): Check for max_align_t. * modules/stddef (stddef.h): Substitute HAVE_MAX_ALIGN_T. * modules/stddef-tests (Depends-on): Add stdalign. * tests/test-stddef.c: Test max_align_t. 2014-12-11 Daiki Ueno unistd: fix iOS check conditional On Mac OS X 10.8, the TARGET_* macros are unconditonally defined as 0 or 1 in , and the previous check always yielded true on non-iOS environment. * lib/unistd.in.h (environ) [__APPLE__]: Check the values of TARGET_OS_IPHONE and TARGET_IPHONE_SIMULATOR, instead of whether they are defined. 2014-12-09 Paul Eggert posixtm: avoid compiler warning in a better way * lib/posixtm.c (IF_LINT): Remove. (year, posix_time_parse): Return true (not 0) if successful. All callers changed. (posix_time_parse): Simplify to pacify GCC without need for IF_LINT. 2014-12-08 KO Myung-Hun * lib/relocatable.c (relocate): Prepend $UNIXROOT to pathname if it is started with '/' on EMX. 2014-12-08 KO Myung-Hun freopen: workaround freopen() on OS/2 kLIBC * lib/freopen.c (rpl_freopen): Workaround. * m4/freopen.m4: Add os2* case. get_shared_library_fullname: port to EMX * lib/relocatable.c: Define strcmp and strncmp to stricmp and strnicmp on EMX, respectively. (_DLL_InitTerm): New on EMX. (get_shared_library_fullname): Implement on EMX. find_executable: port to EMX * lib/progreloc.c (find_executable): Implement on EMX. sched: check struct sched_param in spawn.h as well * lib/sched.in.h: Include spawn.h on kLIBC. * lib/sched_h.m4: Check struct sched_param in spawn.h as well. 2014-12-08 Martin Kletzander (tiny change) bootstrap: Allow perl modules in $buildreq * build-aux/bootstrap: Add case for perl modules. 2014-12-08 Pádraig Brady apply _GL_ATTRIBUTE_PURE to some inline functions clang 3.4.2 flagged these inline functions as pure * lib/savewd.h (savewd_errno): Set _GL_ATTRIBUTE_PURE. * lib/sig-handler.h (get_handler): Likewise. * lib/stat-time.h (get_stat_{a,c,m,birth}time{,_ns}): Likewise. * lib/timespec.h (timespec_cmp, timespec_sign): Likewise. 2014-12-06 Pádraig Brady vasnprintf: fix potential use after free * lib/vasnprintf.c (VASNPRINTF): Fix free-memory read, flagged by clang-analyzer 3.4.2. 2014-12-05 Pádraig Brady filevercmp, posixtm: avoid compiler warnings with -O3 * lib/filevercmp.h (filevercmp): Tag with _GL_ATTRIBUTE_PURE * lib/posixtm.c: (IF_LINT): Define. (posix_time_parse): Use it to void a "may be used uninitialized" warning, seen only with -O3. 2014-12-05 Bruno Haible Fix LDBL80_WORDS macro on big endian platforms. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Add missing parenthesis in LDBL80_WORDS macro. * m4/isinf.m4 (gl_ISINFL_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * tests/test-isfinite.c (test_isfinitel): Likewise. * tests/test-isinf.c (test_isinfl): Likewise. * tests/test-isnan.c (test_long_double): Likewise. * tests/test-isnanl.h (main): Likewise. * tests/test-snprintf-posix.h (LDBL80_WORDS): Add missing parenthesis. * tests/test-sprintf-posix.h (LDBL80_WORDS): Likewise. * tests/test-vasnprintf-posix.c (LDBL80_WORDS): Likewise. * tests/test-vasprintf-posix.c (LDBL80_WORDS): Likewise. Reported by Pádraig Brady. 2014-12-02 KO Myung-Hun git-version-gen: do not print new line characters * build-aux/git-version-gen: Use printf instead of echo and tr. gnulib-tool: recognize x:* as an absolute path * gnulib-tool (func_gnulib_dir): Add ?:* case. (func_relconcat): Likewise. 2014-12-02 Andrei Borzenkov argp: avoid extraneous translation and mem leak with empty pre doc * lib/argp-help.c (argp_doc): Never translate the empty string, when "\v" is the first or last character of the string, as that has a reserved meaning to return the header info from a po file. This also fixes a small memory leak in the !post case. The issue can be seen with this command for example: LC_MESSAGES=en_US grub2-mknetdir --help 2014-11-27 Daiki Ueno uniname/uniname-tests: skip if system's libunistring is used * modules/uniname/uniname-tests (Makefile.am): Skip test if uniname/uniname module is not compiled. 2014-11-27 Pádraig Brady printf: fix configure check on big endian systems * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Add missing bracket. 2014-11-22 Daiki Ueno pipe-filter-gi, pipe-filter-ii: port to AIX On AIX 7.1, 'select' is defined as static and cannot be referred to from inline function. * lib/pipe-filter-aux.h (nointr_select): Remove, manually expand the definition... * lib/pipe-filter-gi.c (filter_loop): ...here, and... * lib/pipe-filter-ii.c (pipe_filter_ii_execute): ...here. 2014-11-20 Paul Eggert gitlog-to-changelog: add --until * build-aux/gitlog-to-changelog: Support new --until option. Need described by Eli Zaretskii in: http://bugs.gnu.org/19113 2014-11-14 Paul Eggert extern-inline: update commentary about GCC bugs * m4/extern-inline.m4: Add another GCC bug number to comments. 2014-11-13 Daiki Ueno gen-uni-tables: untabify * lib/gen-uni-tables.c: Untabify. 2014-11-13 Daiki Ueno gen-uni-tables: check out-of-range values added to 3-level tables * lib/gen-uni-tables.c (output_category, output_bidi_category) (output_joining_type, output_ident_category): Check out-of-range values added to 3-level tables. 2014-11-13 Daiki Ueno gen-uni-tables: utilize 'assert' * lib/gen-uni-tables.c: Include . (output_category, output_combclass, output_decimal_digit_test) (output_decimal_digit, output_digit_test, output_digit) (output_numeric, get_mirror_value, fill_properties) (fill_property30, is_property_alphabetic) (is_property_default_ignorable_code_point) (is_property_uppercase, is_property_lowercase) (is_property_cased, is_property_case_ignorable) (is_property_changes_when_lowercased, is_property_iso_control) (is_property_math, fill_arabicshaping, output_joining_group) (fill_scripts, fill_blocks, output_lbp, fill_org_wbp) (output_wbp, fill_org_gbp, get_decomposition) (output_decomposition, fill_composition_exclusions) (debug_output_composition_tables, output_composition_tables) (redistribute_casefolding_rules, output_casing_rules): Use 'assert (EXPR);' instead of 'if (!EXPR) abort ();' for better error reporting. 2014-11-13 Daiki Ueno gen-uni-tables: cosmetic improvements * lib/gen-uni-tables.c: Escape newlines in the Emacs file local variables specification. (is_outdigit): Remove unused function. 2014-11-12 Jeroen Roovers (tiny change) fcntl-h-tests: port to PA-RISC GNU/Linux * tests/test-fcntl-h.c (main): Check O_SYNC is different from O_DSYNC. 2014-11-10 Paul Eggert fts: port to C89 Problem reported for MSVC 16 by Gisle Vanem in: http://lists.gnu.org/r/bug-gnulib/2014-11/msg00027.html * lib/fts.c (fts_build): Avoid declaration before statement. 2014-11-06 Paul Eggert unistd: port to iOS Problem reported by André Klitzing in: http://lists.gnu.org/r/bug-gnulib/2014-11/msg00013.html * lib/unistd.in.h (environ): Do not include crt_externs.h on iOS. 2014-11-05 Paul Eggert obstack: do not reject malloc-style obstack_chunkfun, obstack_freefun Problem reported by Alan Modra in: http://lists.gnu.org/r/bug-gnulib/2014-11/msg00007.html * lib/obstack.h (obstack_chunkfun, obstack_freefun): Always cast the function arg, reverting this part of the previous change. 2014-11-04 Paul Eggert obstack: avoid potentially-nonportable function casts * lib/obstack.c (CALL_CHUNKFUN, CALL_FREEFUN): Remove, replacing with ... (call_chunkfun, call_freefun): New static functions. All uses changed. Avoid potentially-nonportable casts. (chunkfun_type, freefun_type): Remove typedefs; no longer used. (_obstack_begin_worker): Omit last two args, since they rely on potentially-nonportable casts. All callers changed. * lib/obstack.h (_OBSTACK_CAST): New macro. Use it everywhere the old API used a potentially-nonportable cast. The new API doesn't cast. (struct obstack): Use unions rather than requiring potentially-nonportable casts. (obstack_chunkfun, obstack_freefun): Return void. 2014-11-03 Alan Modra obstack: fix macro return values * lib/obstack.h (obstack_next_free): Return void *. (obstack_1grow_fast, obstack_blank_fast): Return void. For __GNUC__ macros: (obstack_1grow, obstack_blank): Remove now unnecessary (void) 0. For !__GNUC__ macros: (obstack_make_room, obstack_grow, obstack_grow0) (obstack_ptr_grow_fast, obstack_int_grow_fast): Return void. 2014-11-03 Paul Eggert obstack: do not assume system-supplied obstack is size_t safe * m4/obstack.m4: New file. * modules/obstack (Files): Add it. obstack: port to platforms that #define __alignof__ * lib/obstack.c: Include if !defined __alignof__, not if !_LIBC. We don't know of any platforms that #define __alignof__, but it might be useful in tests. Conversely, glibc assumes GCC. 2014-11-03 Pádraig Brady linkat: don't unconditionally replace on GNU/Linux * m4/linkat.m4 (gl_FUNC_LINKAT): The compile check for AT_SYMLINK_FOLLOW was redundant for a few reasons. It was present to support compiling on new systems but running on the old narrow window of Linux 2.6.1[67]. It setup and cleaned up test files which weren't actually used. On non __linux__ it compile tested AT_SYMLINK_FOLLOW, but that is implicit in the following check. 2014-11-03 Pádraig Brady linkat: wrap to handle symlinks on OS X 10.10 * m4/linkat.m4 (gl_FUNC_LINKAT): linkat() is available on Yosemite but not usable because it doesn't support creating hardlinks to symlinks. Therefore add a generic test for this capability and fallback to our emulation if linkat() fails with ENOTSUP. 2014-11-02 Paul Eggert open, openat: document nonstandard FreeBSD, NetBSD O_NOFOLLOW errno * doc/posix-functions/open.texi (open): * doc/posix-functions/openat.texi (openat): Document that these functions do not set errno to ELOOP when a symlink is opened with O_NOFOLLOW. 2014-10-31 Paul Eggert obstack: add NEWS entry for recent incompatible changes * NEWS: Describe recent changes. 2014-10-30 Pádraig Brady mountlist: don't use libmount to decide on dummy/remote * lib/mountlist.c (read_file_system_list): Don't use the libmount routines to determine whether a file system is dummy or remote, as they're not currently compatible. For example the remoteness is determined on file system type (for which the list seems incomplete), rather than simply checking for a ':' in the device name. Also libmount currently determines that 'tmpfs' is a dummy file system even though it has associated storage. 2014-10-29 Paul Eggert obstack: prefer __alignof__ to alignof This is for portability to pre-4.7 GCC when compiling glibc. See Joseph S. Myers in: http://sourceware.org/ml/libc-alpha/2014-10/msg00703.html * lib/obstack.c (__alignof__) [!_LIBC && !__GNUC__]: New macro, defined by including and using . (MAX): New macro. (DEFAULT_ALIGNMENT, DEFAULT_ROUNDING): Redefine in terms of these. Do not use enums as they are not portable to some broken compilers. * modules/obstack (Depends-on): Depend on alignof, not stdalign. obstack: prefer alignof to calculating alignments by hand * lib/obstack.c: Include . (struct fooalign): Remove. (DEFAULT_ALIGNMENT): Use alignof rather than the old offsetof hack. * modules/obstack (Depends-on): Add stdalign. 2014-10-28 Paul Eggert obstack: use size_t alignments and check for overflow * lib/obstack.c, lib/obstack.h (_obstack_begin, _obstack_begin_1): * lib/obstack.c (_obstack_begin_worker, _obstack_newchunk): * lib/obstack.h (struct obstack.alignment_mask): Use _OBSTACK_SIZE_T, not int, for alignments. * lib/obstack.c (_obstack_newchunk): Fail if the size calculation overflows, e.g., when adding the alignment. 2014-10-29 Alan Modra obstack: 64-bit obstack support, part 3 This finally enables full 64-bit obstack support. The glibc shared library specific code is removed from obstack.c too, and the error handling code conditionally compiled under control of another macro, _OBSTACK_NO_ERROR_HANDLER. * lib/obstack.h: Include string.h earlier. (_OBSTACK_INTERFACE_VERSION): Define. (_OBSTACK_SIZE_T, _CHUNK_SIZE_T): Define as size_t for version 2. * lib/obstack.c: Don't include shlib-compat.h. (OBSTACK_INTERFACE_VERSION): Delete. (_OBSTACK_ELIDE_CODE): Rename from ELIDE_CODE. Define when version 1 glibc code is compatible with version 2. Don't include stdio.h for __GNU_LIBRARY. (obstack_exit_failure, print_and_abort, obstack_alloc_failed_handler): Omit when _OBSTACK_NO_ERROR_HANDLER defined. Include stdio.h here. (_obstack_compat, _obstack, _obstack_newchunk, obstack_free): Delete glibc shared library specific source. obstack: 64-bit obstack support, part 2 This gets us 4G obstack support, without changing ABI compatibility, apart from possibly introducing some signed/unsigned comparison warnings in code that uses obstack.h. a) Replace "int" size parameters, return values, and macro local vars with _OBSTACK_SIZE_T, an "unsigned int" for now. b) Make obstack.chunk_size a _CHUNK_SIZE_T, an "unsigned long" for now. c) Make all obstack macros checking available room use obstack_room. "next_free + desired > chunk_limit" may wrap the lhs for chunks allocated near the top of memory. d) Use unsigned comparisons, and macro locals to support >2G on 32-bit. * lib/obstack.h (_OBSTACK_SIZE_T): Define. Use throughout in place of "int" size parameters, return values and local vars. (_CHUNK_SIZE_T): Define. (struct obstack): Make chunk_size a _CHUNK_SIZE_T. Make temp union use an _OBSTACK_SIZE_T integer type. For __GNUC__ versions of the following macros... (obstack_room): Rename local var. (obstack_make_room): Use obstack_room. (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): Likewise. (obstack_finish): Use unsigned comparison when comparing aligned next_free against chunk_limit. (obstack_free): Cast OBJ to remove possible const qualifier. For !__GNUC__ versions of the following macros... (obstack_make_room): Use obstack_room. (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): Likewise. (obstack_finish): Use unsigned comparision when comparing aligned next_free against chunk_limit. (obstack_free): Use temp.p and same comparisons as __GNUC__ version. * lib/obstack.c (_obstack_begin_worker): Make "size" parameter _OBSTACK_SIZE_T. (_obstack_begin, _obstack_begin_1): Likewise. (_obstack_newchunk): Likewise for length parameter. Use size_t locals. (_obstack_memory_used): Return and use _OBSTACK_SIZE_T local. obstack: 64-bit obstack support, part 1 a) Correct calls to alloc function, to use a size_t arg. "long" is just wrong on targets like x86_64-mingw64 where "long" is 32 bits and "size_t" 64 bits. b) Consolidate _obstack_begin and _obstack_begin1 code. * lib/obstack.h (struct obstack ): Correct prototype to use "size_t" rather than "long". (_obstack_begin, _obstack_begin1): Likewise. (obstack_init, obstack_begin, obstack_specify_allocation_with_arg, obstack_chunkfun): Update alloc function casts. * lib/obstack.c (CALL_CHUNKFUN): Update chunkfun cast. (chunkfun_type, freefun_type): New typdefs. (_obstack_begin_worker): Split out from .. (_obstack_begin, _obstack_begin_1): ..here. obstack: tidy part 2 a) Don't be concerned about "not polluting the namespace with stddef.h symbols" in obstack.h, since gnulib string.h includes stddef.h anyway, and it seems unlikely that anyone would care. b) Don't roll our own slow memcpy in _obstack_newchunk. c) Rename obstack_free to _obstack_free. This makes the naming consistent with other obstack functions and obviates the need for __obstack_free. Ancient obstack.c defined both obstack_free and _obstack_free. We continue to do that for _LIBC via an alias. d) Miscellaneous macro fixes. The expression used to test for gcc-2.8 is clever, but nowadays gcc warns on undefined macros. You'll get an undefined macro warning if simulating an old gcc with -U__GNUC__ -U__GNUC_MINOR__ -D__GNUC__=1. * lib/obstack.h: Include stddef.h unconditionally. Formatting fixes. (PTR_INT_TYPE): Delete, replace with ptrdiff_t. (__obstack_free): Delete, update refs. (_obstack_free): Rename from obstack_free. (__extension__): Avoid undefined macro warning for __GNUC_MINOR__. (obstack_object_size, obstack_room): Parenthesise !__GNUC__ versions. * lib/obstack.c: Don't include stddef.h. (COPYING_UNIT): Delete. (_obstack_begin): Formatting fix. (_obstack_newchunk): Use memcpy to move existing object to new chunk. (_obstack_free): Rename from __obstack_free, update alias. Move undef of obstack_free to where it is needed. obstack: tidy part 1 a) Rename temp fields. temp.tempint and temp.tempptr just looks ugly to me, and result in overlong lines after later patches. b) Move error handling code, to avoid a forward declaration and to simplify later patches in this series. * lib/obstack.h (struct obstack ): Rename fields of union and update all uses. * lib/obstack.c: Include stdlib.h earlier. (obstack_exit_failure, obstack_alloc_failed_handler): Move later in file. (print_and_abort): Remove now redundant forward declaration. 2014-10-24 Paul Eggert socketlib, sockets, sys_socket: Use AC_REQUIRE to pacify autoconf. Without this change, in bleeding-edge fileutils Autoconf complains that gl_SOCKETLIB etc. are AC_REQUIREd after being invoked. * modules/socketlib (configure.ac): AC_REQUIRE gl_SOCKETLIB. * modules/sockets (configure.ac): AC_REQUIRE gl_SOCKETS. * modules/sys_socket (configure.ac): AC_REQUIRE gl_HEADER_SYS_SOCKET. 2014-10-24 Daiki Ueno iconv: avoid false detection of non-working iconv The INBUF arguments of iconv can be either 'const char **' or 'char **'. If CC is g++, the difference causes a compile error and thus leads to a false detection of non-working iconv. Reported by Eli Zaretskii and Werner LEMBERG in: . * m4/iconv.m4 (AM_ICONV_LINK): Try all possible argument types of iconv. Bump serial number. 2014-10-23 Pádraig Brady bootstrap: print more diagnostics for missing programs * build-aux/bootstrap: only suppress stderr when checking for alternative program names. This supports programs issuing non standard error messages. 2014-10-23 Pádraig Brady bootstrap: only update the gnulib submodule * build-aux/bootstrap: Restrict the "submodule update" command to the gnulib path. 2014-10-18 Paul Eggert symlinkat: port to AIX 7.1 * doc/posix-functions/symlinkat.texi (symlinkat): Mention AIX porting problem. * lib/symlinkat.c: Always include errno.h. (rpl_symlinkat) [HAVE_SYMLINKAT]: New function. * lib/unistd.in.h (symlinkat): Add replacement machinery. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Check symlinkat behavior. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add REPLACE_SYMLINKAT. * modules/symlinkat (Depends-on): Add fstatat if REPLACE_SYMLINKAT. (configure.ac): Also compile replacement if REPLACE_SYMLINKAT. * modules/unistd (unistd.h): Substitute REPLACE_SYMLINKAT. readlinkat: port to AIX 7.1 * doc/posix-functions/readlink.texi (readlink): * doc/posix-functions/readlinkat.texi (readlinkat): Mention AIX porting problem. * lib/readlinkat.c (rpl_readlinkat) [HAVE_READLINKAT]: New function. * lib/unistd.in.h (readlinkat): Add replacement machinery. * m4/readlinkat.m4 (gl_FUNC_READLINKAT): Check readlinkat signature. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add REPLACE_READLINKAT. * modules/readlinkat (configure.ac): Also compile replacement if REPLACE_READLINKAT. * modules/unistd (unistd.h): Substitute REPLACE_READLINKAT. 2014-10-12 Karl Berry * doc/posix-functions/dirname.texi: remove spurious {. 2014-09-28 Ben Pfaff basename, dirname: Improve documentation. * doc/posix-functions/basename.texi: Mention dirname module and base_name() function. * doc/posix-functions/dirname.texi: Mention dir_name() and mdir_name() functions. Suggested by Werner LEMBERG . 2014-09-24 Jim Meyering exclude: declare exclude_patopts static * lib/exclude.c (exclude_patopts): Declare static, to avoid triggering a -Wmissing-prototypes warning. The alternative (declaring it in the .h file) would require publicizing the private "struct patopts". 2014-09-21 Werner Lemberg dirname: support compilation with C++ * lib/dirname.h: Add necessary C linkage declarations. 2014-09-16 Paul Eggert qsort_r: include Problem reported by Tom G. Christensen in: http://lists.gnu.org/r/bug-gnulib/2014-09/msg00071.html * lib/qsort.c [!_LIBC]: Include first. 2014-09-16 Dylan Cali avltree-list: avoid compiler warnings (trivial) * lib/gl_anytree_list2.h: Add _GL_ATTRIBUTE_PURE to avoid -Werror=suggest-attribute=pure. * lib/gl_array_list.c: Likewise. * lib/gl_avltree_list.c (gl_avltree_list_check_invariants): Add extern declaration to avoid -Werror=missing-prototypes. This is not added to a header as only exported for tests. Add (void) to the check_invariants() call to indicate we're discarding the result in this context which avoids -Werror=unused-value. Note we don't use ignore_value here to avoid a dependency as we know we'll not be adding __attribute__((warn_unused_result)) to check_invariants(). Add _GL_ATTRIBUTE_CONST to avoid -Werror=suggest-attribute=const. 2014-09-15 Paul Eggert qsort_r: new module, for GNU-style qsort_r * m4/qsort_r.m4: New file. Forgot to add this earlier. 2014-09-15 Werner LEMBERG strerror_r-posix: support compilation with C++ * lib/strerror_r.c: Add necessary C linkage declarations. 2014-09-11 Johannes Zarl fcntl-h: fix compilation with Intel C++ compiler (trivial) * lib/fcntl.in.h: ICC has the same issue as GCC <= 4.2. 2014-09-09 Fridolin Pokorny mountlist: use /proc/self/mountinfo when available Use libmount to propagate device IDs provided by Linux in /proc/self/mountinfo. This will give more accurate output when using df in chroot'ed environments as the device IDs are not determined by stat() which may be inaccurate within the chroot. * lib/mountlist.c (read_file_system_list): Use the libmount routines from util-linux to parse "/proc/self/mountinfo" or fall back to standard getmntent() processing. * m4/ls-mntd-fs.m4: Check for libmount only when 1-argument getmntent() is used, as is the case on GNU/Linux. 2014-09-07 Eric Wong users.txt: add cmogstored cmogstored has used gnulib since the beginning in 2012 to support GNU/Linux, FreeBSD, and GNU/kFreeBSD. 2014-09-05 Mathieu Anquetin Trivial change. * gnulib-tool: Use same options as build-aux/bootstrap to download PO files. 2014-09-05 Mathieu Anquetin Trivial change. * gnulib-tool: Fallback to wget when rsync of PO files fails. 2014-09-04 Eric Blake maintainer-makefile: add syntax check for useless ';;' * top/maint.mk (sc_prohibit_double_semicolon): New rule. 2014-09-04 Paul Eggert pthread, pthread_sigmask, threadlib: port to Ubuntu 14.04 Problem reported by Assaf Gordon in: http://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html Apparently Ubuntu is doing some fancy link-time optimization that doesn't work with -lpthread but does work with -pthread. Work around the bug by preferring -pthread to -lpthread. * m4/pthread.m4 (gl_PTHREAD_CHECK): * m4/threadlib.m4 (gl_THREADLIB_BODY): Prefer -pthread to -lpthread. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Treat -pthread like -lpthread. 2014-09-04 Eric Blake error: drop spurious semicolon * lib/error.c (__error_at_line): Fix ';;'. 2014-09-02 Paul Eggert gnulib-common.m4: port to GCC 4.2.1 and Sun Studio 12 C++ * m4/gnulib-common.m4 (AC_C_RESTRICT): Override AC_C_RESTRICT unconditionally. Update from autoconf, incorporating: 2014-09-02 autoconf: port 'restrict' to GCC 4.2.1 2009-01-28 Fix AC_C_RESTRICT for Sun Studio 12 C++. 2014-09-01 Paul Eggert manywarnings: add GCC 4.9 warnings Also, make it easier to maintain this in the future. * build-aux/gcc-warning.spec: Add -Wabi-tag, -Wconditionally-supported, -Wdelete-incomplete, -Winherited-variadic-ctor, -Wvirtual-move-assign, -Wzerotrip. Remove duplicates. Use tabs uniformly, as that's what 'cut' wants. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Wdate-time, -Wopenmp-simd. Use -fdiagnostics-show-option and -funit-at-a-time only for older GCC versions that need them. Handle -Wnormalized=nfc specially, so that the 'comm' command used for maintenance doesn't get confused. 2014-08-31 Paul Eggert vasnprintf: fix bugs in width computation * lib/vasnprintf.c (VASNPRINTF): Rework previous change, which introduced a bug, to avoid the warning in a different way. Avoid undefined behavior if the width arg is less than -INT_MAX. Avoid unnecessary use of HAS_WIDTH local. 2014-08-31 Thien-Thi Nguyen (tiny change) vasnprintf: Avoid signed/unsigned comparison warning. * lib/vasnprintf.c (VASNPRINTF): To calculate padding, compare end addr of generated string w/ maximum end addr. 2013-08-30 Mats Erik Andersson (tiny change) parse-datetime: Avoid pointer difference. * lib/parse-datetime.y (yylex): Compare pointer to end of buffer, instead of calculating difference of pointers. This removes an annoying warning, devoid of any use. 2014-08-29 Paul Eggert qsort_r: new module, for GNU-style qsort_r This works even on FreeBSD, which has an incompatible qsort_r API. * MODULES.html.sh: Add it. * doc/glibc-functions/qsort_r.texi: It's now supported. * lib/qsort.c: New file, taken from glibc with minor changes inside "#ifndef _LIBC" and with an unnecessary "#include " removed. * lib/qsort_r.c: New file, compiled only on FreeBSD. * lib/stdlib.in.h (qsort_r): Declare in the usual way. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): * modules/qsort_r, modules/qsort_r-tests: New files. * modules/stdlib (Makefile): Set up its defaults. * tests/test-qsort_r.c: New file. 2014-08-08 Paul Eggert vla: new module GNU RCS can use this, mostly for documentation I expect. See: http://lists.gnu.org/r/bug-gnulib/2014-08/msg00025.html * MODULES.html.sh: Add vla. * lib/vla.h, modules/vla: New files. 2014-08-07 Daiki Ueno localename: make gl_locale_name_thread really thread-safe on Windows * lib/localename.c [WINDOWS_NATIVE && !IN_LIBINTL]: Include "glthread/lock.h". (get_lcid_lock) [WINDOWS_NATIVE]: New variable. (get_lcid) [WINDOWS_NATIVE]: Lock while looking for an LCID. 2014-08-07 Paul Eggert getpass: don't assume struct termios Problem report and trivial fix by Jonas 'Sortie' Termansen in: http://lists.gnu.org/r/bug-gnulib/2014-08/msg00015.html * lib/getpass.c (getpass): Port to systems lacking struct termios. getdtablesize: fall back on sysconf (_SC_OPEN_MAX) Problem reported by Jonas 'Sortie' Termansen in: http://lists.gnu.org/r/bug-gnulib/2014-08/msg00023.html * lib/getdtablesize.c (getdtablesize) [_SC_OPEN_MAX]: Implement via sysconf for platforms that lack getdtablesize. vararrays: modernize AC_C_VARARRAYS for C11 This backports a change I recently made to Autoconf. * m4/vararrays.m4 (AC_C_VARARRAYS): Define __STDC_NO_VLA__ if VLAs are not supported, as this is what C11 does. The old macro HAVE_C_VARARRAYS is still defined if they are supported, but is now obsolescent. Also, check for VLA bug in GCC 3.4.3. 2014-08-07 Alessandro Degano (tiny change) relocatable-prog-wrapper: port gettext to OS X 10.8 + GCC 4.8.1 * build-aux/install-reloc (func_create_wrapper): Also wrap strerror-override, stat, stat. 2014-08-05 Paul Eggert sys_select: fix FD_ZERO problem on Solaris 10 * lib/sys_select.in.h: Fix Solaris 10 bug where "#include " followed by "#include " caused FD_ZERO to expand to an expression that invoked memset without necessarily including . The problem was that the first include defined _SYS_TIME_H, causing the second include to short-circuit. Fix a similar problem with followed by . Also, fix what appears to be a cut-and-paste typo, by replacing _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H with _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H. accept: document Solaris 10 type glitch * doc/posix-functions/accept.texi (accept): Mention that Solaris 10 'accept' takes void * last arg, not socklen_t *. 2014-08-04 Paul Eggert extern-inline: port to FreeBSD, DragonFly * m4/extern-inline.m4 (gl_EXTERN_INLINE): Also assume the bug is present if either __DragonFly__ or __FreeBSD__ is defined. FreeBSD problem reported by Andrey Borzenkov in: http://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html Also, worry about __APPLE__ only if __MACH__ is also defined, as this is more consistent with the rest of gnulib. (_GL_EXTERN_INLINE_STDHEADER_BUG): Rename this internal macro from _GL_EXTERN_INLINE_APPLE_BUG, since the bug is not limited to Apple. 2014-08-01 Siddhesh Poyarekar regex: Make #if/#ifdef usage consistent for DEBUG * lib/regex_internal.c: Use "#if defined DEBUG && DEBUG" instead of the inconsistent usage of #if and #ifdef as that works with both Glibc and Gnulib's style. 2014-07-31 Eric Blake openat-die: use _Noreturn markup * modules/openat-die (Depends-on): Add snippet/_Noreturn. * lib/openat-die.c (openat_save_fail, openat_restore_fail): Mark _Noreturn. 2014-07-30 Eric Blake test-open: port to cygwin, which lacks Fortify * tests/test-open.h (ALWAYS_INLINE): New macro. (__always_inline): Don't abuse internal symbol on non-glibc. 2014-07-19 Eli Zaretskii localename: Enforce declarations before statements. * localename.c (gl_locale_name_thread): Declare 'lcid' before the first statement. 2014-07-18 Jim Meyering test-userspec: don't look up numeric user names * tests/test-userspec.c: I found a system for which getpwnam("0") returned a pointer to a non-root user's entry, and that made the test fail. (T): Prefix each numeric input with "+", to inhibit lookup. 2014-07-15 Eli Zaretskii localcharset, localename: MS-Windows support for non-default locales * lib/localcharset.c (locale_charset) [WINDOWS_NATIVE]: Before falling back on the default system codepage, try extracting the codepage from what 'setlocale' returns. This allows to take into account changes of the codeset due to non-default locale set by a previous call to 'setlocale'. * lib/localename.c (LOCALE_NAME_MAX_LENGTH) [WINDOWS_NATIVE]: Define if not already defined. (enum_locales_fn, get_lcid) [WINDOWS_NATIVE]: New functions. (gl_locale_name_thread) [WINDOWS_NATIVE]: Produce the current locale by calling 'setlocale', then converting the locale name into LCID by calling 'get_lcid'. This allows to take into account changes in the current locale from the default one, in contrast to GetThreadLocale. 2014-07-14 Daiki Ueno announce-gen: avoid failure when Digest::SHA is installed When Digest::SHA is available, Digest::SHA1 is not loaded and thus Digest::SHA1->new in print_checksums fails. * build-aux/announce-gen (digest_classes): New associative array for available message digest implementations. (print_locations): Use it. 2014-07-13 Pádraig Brady gettext: revert "update macros to version 0.19" This reverts commit 9b9370ca, as it currently requires that developers of any project that explicitly uses the gettext module or implicitly uses it through the utimens-tests or futimens-tests modules, use gettext >= 0.19. However there are some stability and availablity issues with that version at present. We can reinstate this soon, when stability is addressed and packages are more readily available. 2014-07-12 Jim Meyering regex: don't deref NULL upon heap allocation failure * lib/regcomp.c (parse_dup_op): Handle duplicate_tree failure in one more place. To trigger the segfault, configure grep -with-included-regex, build it, and run these commands: ( ulimit -v 300000; echo a|src/grep -E a+++++++++++++++++++++ ) I discovered this while replying to a private report from Jens Schleusener about excessive memory consumption by grep when using a regular expression like the one above. 2014-07-11 Paul Eggert regex: fix memory leak in compiler Fix by Andreas Schwab in: https://sourceware.org/ml/libc-alpha/2014-06/msg00503.html * lib/regcomp.c (parse_reg_exp): Deallocate partially constructed tree before returning error. 2014-07-10 Assaf Gordon announce-gen: avoid perl warnings * build-aux/announce-gen: add two minor checks to avoid "use of uninitialized value" warnings when command-line parameters are missing. 2014-07-10 Assaf Gordon localename: avoid -Wsuggest-attribute={const,pure} warnings * lib/localename.c (string_has): Tag internal function as pure. * lib/localename.h (gl_locale_name_default): Tag extern declaration as const when appropriate. 2014-07-10 Eli Zaretskii nl_langinfo: Fix last change. * lib/nl_langinfo.c (includes): Drop redundant include. 2014-07-10 Siddhesh Poyarekar error: Fix -Wundef warnings in glibc * lib/error.c [_LIBC]: Define default macros for glibc. (print_errno_message) [defined HAVE_STRERROR_R || _LIBC]: Check _LIBC before STRERROR_R_CHAR_P. error: Sync from glibc master * lib/error.c [_LIBC]: Remove INTUSE usage. (error_tail): Remove unused macro ALLOCA_LIMIT. Fix potential buffer overflow. Fix potential NULL dereference in strcmp. 2014-07-09 Pavel Hrdina (tiny change) nl_langinfo: fix build under mingw * lib/nl_langinfo.c (includes): Pick up for GetACP(). 2014-07-09 Andrew D Warshall mountlist: do not classify a bind-mounted dir entry as "dummy" * m4/ls-mntd-fs.m4: Check for hasmntopt() on platforms with 1-argument getmntent() (instead of assuming absence). 2014-07-08 Eric Blake maint.mk: less syntax-check noise when SIGPIPE is ignored * top/maint.mk (_sc_header_without_use) (sc_require_config_h_first): Parse full list. 2014-07-07 Eli Zaretskii Paul Eggert nl_langinfo: CODESET on MS-Windows and more items from localeconv * lib/langinfo.in.h (DECIMAL_POINT, THOUSANDS_SEP, GROUPING) (CURRENCY_SYMBOL, INT_CURR_SYMBOL, MON_DECIMAL_POINT) (MON_THOUSANDS_SEP, MON_GROUPING, POSITIVE_SIGN, NEGATIVE_SIGN) (FRAC_DIGITS, INT_FRAC_DIGITS, P_CS_PRECEDES, N_CS_PRECEDES) (P_SEP_BY_SPACE, N_SEP_BY_SPACE, P_SIGN_POSN, N_SIGN_POSN): Define. * lib/nl_langinfo.c: Include and early. Include if Microsoft Windows. Include if !REPLACE_NL_LANGINFO. (ctype_codeset): New function, taken from rpl_nl_langinfo, and with improvements for Microsoft Windows. (rpl_nl_langinfo): Use it. (nl_langinfo) [!REPLACE_NL_LANGINFO]: Likewise. Compute the values of RADIXCHAR, THOUSEP, GROUPING, CRNCYSTR, INT_CURR_SYMBOL, MON_DECIMAL_POINT, MON_THOUSANDS_SEP, MON_GROUPING, POSITIVE_SIGN, NEGATIVE_SIGN, FRAC_DIGITS, INT_FRAC_DIGITS, P_CS_PRECEDES, N_CS_PRECEDES, P_SEP_BY_SPACE, N_SEP_BY_SPACE, P_SIGN_POSN, and N_SIGN_POSN from the corresponding values returned by 'localeconv'. Compute the values of AM_STR, PM_STR, DAY_n, ABDAY_n, MON_n, and ABMON_n by calling 'strftime' with a suitable struct tm value. 2014-07-05 Paul Eggert Bruno Haible has stepped down as maintainer. See Karl Berry in: http://lists.gnu.org/r/bug-gnulib/2014-07/msg00004.html Daiki Ueno has volunteered to maintain libunistring; see: http://lists.gnu.org/r/bug-gnulib/2014-07/msg00005.html * modules/gen-uni-tables, modules/libunistring: * modules/libunistring-optional, modules/ucs4-utf16, modules/ucs4-utf8: * modules/unicase/base, modules/unicase/cased: * modules/unicase/empty-prefix-context: * modules/unicase/empty-suffix-context, modules/unicase/ignorable: * modules/unicase/locale-language, modules/unicase/special-casing: * modules/unicase/tocasefold, modules/unicase/tolower: * modules/unicase/totitle, modules/unicase/toupper: * modules/unicase/u16-casecmp, modules/unicase/u16-casecoll: * modules/unicase/u16-casefold, modules/unicase/u16-casemap: * modules/unicase/u16-casexfrm, modules/unicase/u16-ct-casefold: * modules/unicase/u16-ct-tolower, modules/unicase/u16-ct-totitle: * modules/unicase/u16-ct-toupper, modules/unicase/u16-is-cased: * modules/unicase/u16-is-casefolded, modules/unicase/u16-is-invariant: * modules/unicase/u16-is-lowercase, modules/unicase/u16-is-titlecase: * modules/unicase/u16-is-uppercase, modules/unicase/u16-prefix-context: * modules/unicase/u16-suffix-context, modules/unicase/u16-tolower: * modules/unicase/u16-totitle, modules/unicase/u16-toupper: * modules/unicase/u32-casecmp, modules/unicase/u32-casecoll: * modules/unicase/u32-casefold, modules/unicase/u32-casemap: * modules/unicase/u32-casexfrm, modules/unicase/u32-ct-casefold: * modules/unicase/u32-ct-tolower, modules/unicase/u32-ct-totitle: * modules/unicase/u32-ct-toupper, modules/unicase/u32-is-cased: * modules/unicase/u32-is-casefolded, modules/unicase/u32-is-invariant: * modules/unicase/u32-is-lowercase, modules/unicase/u32-is-titlecase: * modules/unicase/u32-is-uppercase, modules/unicase/u32-prefix-context: * modules/unicase/u32-suffix-context, modules/unicase/u32-tolower: * modules/unicase/u32-totitle, modules/unicase/u32-toupper: * modules/unicase/u8-casecmp, modules/unicase/u8-casecoll: * modules/unicase/u8-casefold, modules/unicase/u8-casemap: * modules/unicase/u8-casexfrm, modules/unicase/u8-ct-casefold: * modules/unicase/u8-ct-tolower, modules/unicase/u8-ct-totitle: * modules/unicase/u8-ct-toupper, modules/unicase/u8-is-cased: * modules/unicase/u8-is-casefolded, modules/unicase/u8-is-invariant: * modules/unicase/u8-is-lowercase, modules/unicase/u8-is-titlecase: * modules/unicase/u8-is-uppercase, modules/unicase/u8-prefix-context: * modules/unicase/u8-suffix-context, modules/unicase/u8-tolower: * modules/unicase/u8-totitle, modules/unicase/u8-toupper: * modules/unicase/ulc-casecmp, modules/unicase/ulc-casecoll: * modules/unicase/ulc-casexfrm, modules/unicodeio: * modules/uniconv/base, modules/uniconv/u16-conv-from-enc: * modules/uniconv/u16-conv-to-enc: * modules/uniconv/u16-strconv-from-enc: * modules/uniconv/u16-strconv-from-locale: * modules/uniconv/u16-strconv-to-enc: * modules/uniconv/u16-strconv-to-locale: * modules/uniconv/u32-conv-from-enc, modules/uniconv/u32-conv-to-enc: * modules/uniconv/u32-strconv-from-enc: * modules/uniconv/u32-strconv-from-locale: * modules/uniconv/u32-strconv-to-enc: * modules/uniconv/u32-strconv-to-locale: * modules/uniconv/u8-conv-from-enc, modules/uniconv/u8-conv-to-enc: * modules/uniconv/u8-strconv-from-enc: * modules/uniconv/u8-strconv-from-locale: * modules/uniconv/u8-strconv-to-enc: * modules/uniconv/u8-strconv-to-locale, modules/unictype/base: * modules/unictype/bidicategory-all: * modules/unictype/bidicategory-byname: * modules/unictype/bidicategory-name, modules/unictype/bidicategory-of: * modules/unictype/bidicategory-test, modules/unictype/bidiclass-all: * modules/unictype/bidiclass-byname: * modules/unictype/bidiclass-longname, modules/unictype/bidiclass-name: * modules/unictype/bidiclass-of, modules/unictype/bidiclass-test: * modules/unictype/block-all, modules/unictype/block-list: * modules/unictype/block-of, modules/unictype/block-test: * modules/unictype/category-C, modules/unictype/category-Cc: * modules/unictype/category-Cf, modules/unictype/category-Cn: * modules/unictype/category-Co, modules/unictype/category-Cs: * modules/unictype/category-L, modules/unictype/category-LC: * modules/unictype/category-Ll, modules/unictype/category-Lm: * modules/unictype/category-Lo, modules/unictype/category-Lt: * modules/unictype/category-Lu, modules/unictype/category-M: * modules/unictype/category-Mc, modules/unictype/category-Me: * modules/unictype/category-Mn, modules/unictype/category-N: * modules/unictype/category-Nd, modules/unictype/category-Nl: * modules/unictype/category-No, modules/unictype/category-P: * modules/unictype/category-Pc, modules/unictype/category-Pd: * modules/unictype/category-Pe, modules/unictype/category-Pf: * modules/unictype/category-Pi, modules/unictype/category-Po: * modules/unictype/category-Ps, modules/unictype/category-S: * modules/unictype/category-Sc, modules/unictype/category-Sk: * modules/unictype/category-Sm, modules/unictype/category-So: * modules/unictype/category-Z, modules/unictype/category-Zl: * modules/unictype/category-Zp, modules/unictype/category-Zs: * modules/unictype/category-all, modules/unictype/category-and: * modules/unictype/category-and-not, modules/unictype/category-byname: * modules/unictype/category-longname, modules/unictype/category-name: * modules/unictype/category-none, modules/unictype/category-of: * modules/unictype/category-or, modules/unictype/category-test: * modules/unictype/category-test-withtable: * modules/unictype/combining-class: * modules/unictype/combining-class-all: * modules/unictype/combining-class-byname: * modules/unictype/combining-class-longname: * modules/unictype/combining-class-name, modules/unictype/ctype-alnum: * modules/unictype/ctype-alpha, modules/unictype/ctype-blank: * modules/unictype/ctype-cntrl, modules/unictype/ctype-digit: * modules/unictype/ctype-graph, modules/unictype/ctype-lower: * modules/unictype/ctype-print, modules/unictype/ctype-punct: * modules/unictype/ctype-space, modules/unictype/ctype-upper: * modules/unictype/ctype-xdigit, modules/unictype/decimal-digit: * modules/unictype/digit, modules/unictype/joininggroup-all: * modules/unictype/joininggroup-byname: * modules/unictype/joininggroup-name, modules/unictype/joininggroup-of: * modules/unictype/joiningtype-all: * modules/unictype/joiningtype-byname: * modules/unictype/joiningtype-longname: * modules/unictype/joiningtype-name, modules/unictype/joiningtype-of: * modules/unictype/mirror, modules/unictype/numeric: * modules/unictype/property-all, modules/unictype/property-alphabetic: * modules/unictype/property-ascii-hex-digit: * modules/unictype/property-bidi-arabic-digit: * modules/unictype/property-bidi-arabic-right-to-left: * modules/unictype/property-bidi-block-separator: * modules/unictype/property-bidi-boundary-neutral: * modules/unictype/property-bidi-common-separator: * modules/unictype/property-bidi-control: * modules/unictype/property-bidi-embedding-or-override: * modules/unictype/property-bidi-eur-num-separator: * modules/unictype/property-bidi-eur-num-terminator: * modules/unictype/property-bidi-european-digit: * modules/unictype/property-bidi-hebrew-right-to-left: * modules/unictype/property-bidi-left-to-right: * modules/unictype/property-bidi-non-spacing-mark: * modules/unictype/property-bidi-other-neutral: * modules/unictype/property-bidi-pdf: * modules/unictype/property-bidi-segment-separator: * modules/unictype/property-bidi-whitespace: * modules/unictype/property-byname: * modules/unictype/property-case-ignorable: * modules/unictype/property-cased: * modules/unictype/property-changes-when-casefolded: * modules/unictype/property-changes-when-casemapped: * modules/unictype/property-changes-when-lowercased: * modules/unictype/property-changes-when-titlecased: * modules/unictype/property-changes-when-uppercased: * modules/unictype/property-combining: * modules/unictype/property-composite: * modules/unictype/property-currency-symbol: * modules/unictype/property-dash: * modules/unictype/property-decimal-digit: * modules/unictype/property-default-ignorable-code-point: * modules/unictype/property-deprecated: * modules/unictype/property-diacritic: * modules/unictype/property-extender: * modules/unictype/property-format-control: * modules/unictype/property-grapheme-base: * modules/unictype/property-grapheme-extend: * modules/unictype/property-grapheme-link: * modules/unictype/property-hex-digit: * modules/unictype/property-hyphen: * modules/unictype/property-id-continue: * modules/unictype/property-id-start: * modules/unictype/property-ideographic: * modules/unictype/property-ids-binary-operator: * modules/unictype/property-ids-trinary-operator: * modules/unictype/property-ignorable-control: * modules/unictype/property-iso-control: * modules/unictype/property-join-control: * modules/unictype/property-left-of-pair: * modules/unictype/property-line-separator: * modules/unictype/property-logical-order-exception: * modules/unictype/property-lowercase, modules/unictype/property-math: * modules/unictype/property-non-break: * modules/unictype/property-not-a-character: * modules/unictype/property-numeric: * modules/unictype/property-other-alphabetic: * modules/unictype/property-other-default-ignorable-code-point: * modules/unictype/property-other-grapheme-extend: * modules/unictype/property-other-id-continue: * modules/unictype/property-other-id-start: * modules/unictype/property-other-lowercase: * modules/unictype/property-other-math: * modules/unictype/property-other-uppercase: * modules/unictype/property-paired-punctuation: * modules/unictype/property-paragraph-separator: * modules/unictype/property-pattern-syntax: * modules/unictype/property-pattern-white-space: * modules/unictype/property-private-use: * modules/unictype/property-punctuation: * modules/unictype/property-quotation-mark: * modules/unictype/property-radical: * modules/unictype/property-sentence-terminal: * modules/unictype/property-soft-dotted: * modules/unictype/property-space: * modules/unictype/property-terminal-punctuation: * modules/unictype/property-test, modules/unictype/property-titlecase: * modules/unictype/property-unassigned-code-value: * modules/unictype/property-unified-ideograph: * modules/unictype/property-uppercase: * modules/unictype/property-variation-selector: * modules/unictype/property-white-space: * modules/unictype/property-xid-continue: * modules/unictype/property-xid-start: * modules/unictype/property-zero-width, modules/unictype/scripts: * modules/unictype/scripts-all, modules/unictype/syntax-c-ident: * modules/unictype/syntax-c-whitespace: * modules/unictype/syntax-java-ident: * modules/unictype/syntax-java-whitespace, modules/unigbrk/base: * modules/unigbrk/u16-grapheme-breaks: * modules/unigbrk/u16-grapheme-next, modules/unigbrk/u16-grapheme-prev: * modules/unigbrk/u32-grapheme-breaks: * modules/unigbrk/u32-grapheme-next, modules/unigbrk/u32-grapheme-prev: * modules/unigbrk/u8-grapheme-breaks, modules/unigbrk/u8-grapheme-next: * modules/unigbrk/u8-grapheme-prev, modules/unigbrk/uc-gbrk-prop: * modules/unigbrk/uc-is-grapheme-break: * modules/unigbrk/ulc-grapheme-breaks, modules/unilbrk/base: * modules/unilbrk/tables, modules/unilbrk/u16-possible-linebreaks: * modules/unilbrk/u16-width-linebreaks: * modules/unilbrk/u32-possible-linebreaks: * modules/unilbrk/u32-width-linebreaks: * modules/unilbrk/u8-possible-linebreaks: * modules/unilbrk/u8-width-linebreaks, modules/unilbrk/ulc-common: * modules/unilbrk/ulc-possible-linebreaks: * modules/unilbrk/ulc-width-linebreaks, modules/uniname/base: * modules/uniname/uniname, modules/uninorm/base: * modules/uninorm/canonical-decomposition: * modules/uninorm/compat-decomposition, modules/uninorm/composition: * modules/uninorm/decompose-internal, modules/uninorm/decomposing-form: * modules/uninorm/decomposition, modules/uninorm/decomposition-table: * modules/uninorm/filter, modules/uninorm/nfc, modules/uninorm/nfd: * modules/uninorm/nfkc, modules/uninorm/nfkd: * modules/uninorm/u16-normalize, modules/uninorm/u16-normcmp: * modules/uninorm/u16-normcoll, modules/uninorm/u16-normxfrm: * modules/uninorm/u32-normalize, modules/uninorm/u32-normcmp: * modules/uninorm/u32-normcoll, modules/uninorm/u32-normxfrm: * modules/uninorm/u8-normalize, modules/uninorm/u8-normcmp: * modules/uninorm/u8-normcoll, modules/uninorm/u8-normxfrm: * modules/unistdio/base, modules/unistdio/u-printf-args: * modules/unistdio/u16-asnprintf, modules/unistdio/u16-asprintf: * modules/unistdio/u16-printf-parse, modules/unistdio/u16-snprintf: * modules/unistdio/u16-sprintf, modules/unistdio/u16-u16-asnprintf: * modules/unistdio/u16-u16-asprintf, modules/unistdio/u16-u16-snprintf: * modules/unistdio/u16-u16-sprintf: * modules/unistdio/u16-u16-vasnprintf: * modules/unistdio/u16-u16-vasprintf: * modules/unistdio/u16-u16-vsnprintf: * modules/unistdio/u16-u16-vsprintf, modules/unistdio/u16-vasnprintf: * modules/unistdio/u16-vasprintf, modules/unistdio/u16-vsnprintf: * modules/unistdio/u16-vsprintf, modules/unistdio/u32-asnprintf: * modules/unistdio/u32-asprintf, modules/unistdio/u32-printf-parse: * modules/unistdio/u32-snprintf, modules/unistdio/u32-sprintf: * modules/unistdio/u32-u32-asnprintf: * modules/unistdio/u32-u32-asprintf, modules/unistdio/u32-u32-snprintf: * modules/unistdio/u32-u32-sprintf: * modules/unistdio/u32-u32-vasnprintf: * modules/unistdio/u32-u32-vasprintf: * modules/unistdio/u32-u32-vsnprintf: * modules/unistdio/u32-u32-vsprintf, modules/unistdio/u32-vasnprintf: * modules/unistdio/u32-vasprintf, modules/unistdio/u32-vsnprintf: * modules/unistdio/u32-vsprintf, modules/unistdio/u8-asnprintf: * modules/unistdio/u8-asprintf, modules/unistdio/u8-printf-parse: * modules/unistdio/u8-snprintf, modules/unistdio/u8-sprintf: * modules/unistdio/u8-u8-asnprintf, modules/unistdio/u8-u8-asprintf: * modules/unistdio/u8-u8-snprintf, modules/unistdio/u8-u8-sprintf: * modules/unistdio/u8-u8-vasnprintf, modules/unistdio/u8-u8-vasprintf: * modules/unistdio/u8-u8-vsnprintf, modules/unistdio/u8-u8-vsprintf: * modules/unistdio/u8-vasnprintf, modules/unistdio/u8-vasprintf: * modules/unistdio/u8-vsnprintf, modules/unistdio/u8-vsprintf: * modules/unistdio/ulc-asnprintf, modules/unistdio/ulc-asprintf: * modules/unistdio/ulc-fprintf, modules/unistdio/ulc-printf-parse: * modules/unistdio/ulc-snprintf, modules/unistdio/ulc-sprintf: * modules/unistdio/ulc-vasnprintf, modules/unistdio/ulc-vasprintf: * modules/unistdio/ulc-vfprintf, modules/unistdio/ulc-vsnprintf: * modules/unistdio/ulc-vsprintf, modules/unistr/base: * modules/unistr/u16-check, modules/unistr/u16-chr: * modules/unistr/u16-cmp, modules/unistr/u16-cmp2: * modules/unistr/u16-cpy, modules/unistr/u16-cpy-alloc: * modules/unistr/u16-endswith, modules/unistr/u16-mblen: * modules/unistr/u16-mbsnlen, modules/unistr/u16-mbtouc: * modules/unistr/u16-mbtouc-unsafe, modules/unistr/u16-mbtoucr: * modules/unistr/u16-move, modules/unistr/u16-next: * modules/unistr/u16-prev, modules/unistr/u16-set: * modules/unistr/u16-startswith, modules/unistr/u16-stpcpy: * modules/unistr/u16-stpncpy, modules/unistr/u16-strcat: * modules/unistr/u16-strchr, modules/unistr/u16-strcmp: * modules/unistr/u16-strcoll, modules/unistr/u16-strcpy: * modules/unistr/u16-strcspn, modules/unistr/u16-strdup: * modules/unistr/u16-strlen, modules/unistr/u16-strmblen: * modules/unistr/u16-strmbtouc, modules/unistr/u16-strncat: * modules/unistr/u16-strncmp, modules/unistr/u16-strncpy: * modules/unistr/u16-strnlen, modules/unistr/u16-strpbrk: * modules/unistr/u16-strrchr, modules/unistr/u16-strspn: * modules/unistr/u16-strstr, modules/unistr/u16-strtok: * modules/unistr/u16-to-u32, modules/unistr/u16-to-u8: * modules/unistr/u16-uctomb, modules/unistr/u32-check: * modules/unistr/u32-chr, modules/unistr/u32-cmp: * modules/unistr/u32-cmp2, modules/unistr/u32-cpy: * modules/unistr/u32-cpy-alloc, modules/unistr/u32-endswith: * modules/unistr/u32-mblen, modules/unistr/u32-mbsnlen: * modules/unistr/u32-mbtouc, modules/unistr/u32-mbtouc-unsafe: * modules/unistr/u32-mbtoucr, modules/unistr/u32-move: * modules/unistr/u32-next, modules/unistr/u32-prev: * modules/unistr/u32-set, modules/unistr/u32-startswith: * modules/unistr/u32-stpcpy, modules/unistr/u32-stpncpy: * modules/unistr/u32-strcat, modules/unistr/u32-strchr: * modules/unistr/u32-strcmp, modules/unistr/u32-strcoll: * modules/unistr/u32-strcpy, modules/unistr/u32-strcspn: * modules/unistr/u32-strdup, modules/unistr/u32-strlen: * modules/unistr/u32-strmblen, modules/unistr/u32-strmbtouc: * modules/unistr/u32-strncat, modules/unistr/u32-strncmp: * modules/unistr/u32-strncpy, modules/unistr/u32-strnlen: * modules/unistr/u32-strpbrk, modules/unistr/u32-strrchr: * modules/unistr/u32-strspn, modules/unistr/u32-strstr: * modules/unistr/u32-strtok, modules/unistr/u32-to-u16: * modules/unistr/u32-to-u8, modules/unistr/u32-uctomb: * modules/unistr/u8-check, modules/unistr/u8-chr: * modules/unistr/u8-cmp, modules/unistr/u8-cmp2, modules/unistr/u8-cpy: * modules/unistr/u8-cpy-alloc, modules/unistr/u8-endswith: * modules/unistr/u8-mblen, modules/unistr/u8-mbsnlen: * modules/unistr/u8-mbtouc, modules/unistr/u8-mbtouc-unsafe: * modules/unistr/u8-mbtoucr, modules/unistr/u8-move: * modules/unistr/u8-next, modules/unistr/u8-prev: * modules/unistr/u8-set, modules/unistr/u8-startswith: * modules/unistr/u8-stpcpy, modules/unistr/u8-stpncpy: * modules/unistr/u8-strcat, modules/unistr/u8-strchr: * modules/unistr/u8-strcmp, modules/unistr/u8-strcoll: * modules/unistr/u8-strcpy, modules/unistr/u8-strcspn: * modules/unistr/u8-strdup, modules/unistr/u8-strlen: * modules/unistr/u8-strmblen, modules/unistr/u8-strmbtouc: * modules/unistr/u8-strncat, modules/unistr/u8-strncmp: * modules/unistr/u8-strncpy, modules/unistr/u8-strnlen: * modules/unistr/u8-strpbrk, modules/unistr/u8-strrchr: * modules/unistr/u8-strspn, modules/unistr/u8-strstr: * modules/unistr/u8-strtok, modules/unistr/u8-to-u16: * modules/unistr/u8-to-u32, modules/unistr/u8-uctomb, modules/unitypes: * modules/uniwbrk/base, modules/uniwbrk/table: * modules/uniwbrk/u16-wordbreaks, modules/uniwbrk/u32-wordbreaks: * modules/uniwbrk/u8-wordbreaks, modules/uniwbrk/ulc-wordbreaks: * modules/uniwbrk/wordbreak-property, modules/uniwidth/base: * modules/uniwidth/u16-strwidth, modules/uniwidth/u16-width: * modules/uniwidth/u32-strwidth, modules/uniwidth/u32-width: * modules/uniwidth/u8-strwidth, modules/uniwidth/u8-width: * modules/uniwidth/width, modules/utf16-ucs4: * modules/utf16-ucs4-unsafe, modules/utf8-ucs4: * modules/utf8-ucs4-unsafe: Change maintainer from Bruno Haible to Daiki Ueno. This is my guess at the libunistring modules; please feel free to fix if I guessed incorrectly. * modules/accept4, modules/acl, modules/acos, modules/acosf: * modules/alignof, modules/amemxfrm, modules/ansi-c++-opt: * modules/areadlink, modules/array-list, modules/array-mergesort: * modules/array-oset, modules/asin, modules/asinf, modules/astrxfrm: * modules/atan, modules/atan2, modules/atan2f, modules/atanf: * modules/avltree-list, modules/avltree-oset, modules/avltreehash-list: * modules/binary-io, modules/bison-i18n, modules/btowc: * modules/c-ctype, modules/c-strcase, modules/c-strcaseeq: * modules/c-strcasestr, modules/c-strstr, modules/calloc-posix: * modules/canonicalize-lgpl, modules/careadlinkat, modules/carray-list: * modules/cbrt, modules/cbrt-ieee, modules/cbrtf, modules/cbrtf-ieee: * modules/cbrtl, modules/cbrtl-ieee, modules/ceil, modules/ceil-ieee: * modules/ceilf, modules/ceilf-ieee, modules/ceill, modules/ceill-ieee: * modules/chdir, modules/classpath, modules/clean-temp, modules/close: * modules/closedir, modules/concat-filename, modules/copy-file: * modules/copysign, modules/copysignf, modules/copysignl, modules/cos: * modules/cosf, modules/cosh, modules/coshf, modules/csharpcomp: * modules/csharpcomp-script, modules/csharpexec: * modules/csharpexec-script, modules/ctype, modules/diffseq: * modules/dprintf, modules/dprintf-posix, modules/dup: * modules/dup2-obsolete, modules/dup3, modules/duplocale: * modules/eealloc, modules/environ, modules/erf, modules/erfc: * modules/errno, modules/execute, modules/exp, modules/exp-ieee: * modules/exp2, modules/exp2-ieee, modules/exp2f, modules/exp2f-ieee: * modules/exp2l, modules/exp2l-ieee, modules/expf, modules/expf-ieee: * modules/expl, modules/expl-ieee, modules/expm1, modules/expm1-ieee: * modules/expm1f, modules/expm1f-ieee, modules/expm1l: * modules/expm1l-ieee, modules/fabs, modules/fabs-ieee, modules/fabsf: * modules/fabsf-ieee, modules/fabsl, modules/fabsl-ieee: * modules/fatal-signal, modules/fbufmode, modules/fchdir: * modules/fclose, modules/fd-hook, modules/fdopen, modules/filename: * modules/findprog, modules/findprog-lgpl, modules/floor: * modules/floor-ieee, modules/floorf, modules/floorf-ieee: * modules/floorl, modules/floorl-ieee, modules/fma, modules/fma-ieee: * modules/fmaf, modules/fmaf-ieee, modules/fmal, modules/fmal-ieee: * modules/fmod, modules/fmod-ieee, modules/fmodf, modules/fmodf-ieee: * modules/fmodl, modules/fmodl-ieee, modules/fopen, modules/fpieee: * modules/fprintf-posix, modules/fpucw, modules/fpurge: * modules/freadable, modules/freadahead, modules/freadptr: * modules/freadseek, modules/freopen, modules/frexp: * modules/frexp-ieee, modules/frexp-nolibm, modules/frexpf: * modules/frexpf-ieee, modules/frexpl, modules/frexpl-ieee: * modules/frexpl-nolibm, modules/fseek, modules/fseeko: * modules/fseterr, modules/fstat, modules/fstrcmp, modules/ftell: * modules/ftello, modules/full-read, modules/full-write: * modules/fwritable, modules/fwriteerror, modules/gcd: * modules/get-rusage-as, modules/get-rusage-data: * modules/getdtablesize, modules/getrusage, modules/gettext: * modules/gettext-h, modules/git-merge-changelog, modules/gperf: * modules/grantpt, modules/havelib, modules/host-cpu-c-abi: * modules/hostent, modules/hypot, modules/hypot-ieee, modules/hypotf: * modules/hypotf-ieee, modules/hypotl, modules/hypotl-ieee: * modules/iconv, modules/iconv-h, modules/iconv_open: * modules/iconv_open-utf, modules/idpriv-drop, modules/idpriv-droptemp: * modules/ilogb, modules/ilogbf, modules/ilogbl, modules/imaxabs: * modules/imaxdiv, modules/integer_length, modules/integer_length_l: * modules/integer_length_ll, modules/ioctl, modules/isatty: * modules/isblank, modules/isnand, modules/isnand-nolibm: * modules/isnanf, modules/isnanf-nolibm, modules/isnanl: * modules/isnanl-nolibm, modules/iswblank, modules/iswctype: * modules/j0, modules/j1, modules/javacomp, modules/javacomp-script: * modules/javaexec, modules/javaexec-script, modules/javaversion: * modules/jn, modules/langinfo, modules/ldd, modules/ldexp: * modules/ldexp-ieee, modules/ldexpf, modules/ldexpf-ieee: * modules/ldexpl, modules/ldexpl-ieee, modules/lgamma: * modules/lib-symbol-visibility, modules/libsigsegv: * modules/linked-list, modules/linkedhash-list, modules/list: * modules/localcharset, modules/locale, modules/localeconv: * modules/localename, modules/lock, modules/log, modules/log-ieee: * modules/log10, modules/log10-ieee, modules/log10f: * modules/log10f-ieee, modules/log10l, modules/log10l-ieee: * modules/log1p, modules/log1p-ieee, modules/log1pf: * modules/log1pf-ieee, modules/log1pl, modules/log1pl-ieee: * modules/log2, modules/log2-ieee, modules/log2f, modules/log2f-ieee: * modules/log2l, modules/log2l-ieee, modules/logb, modules/logb-ieee: * modules/logbf, modules/logbf-ieee, modules/logbl, modules/logbl-ieee: * modules/logf, modules/logf-ieee, modules/login_tty: * modules/logl-ieee, modules/malloc-posix, modules/malloca: * modules/mbchar, modules/mbfile, modules/mbiter, modules/mbmemcasecmp: * modules/mbmemcasecoll, modules/mbrlen, modules/mbrtowc: * modules/mbscasecmp, modules/mbscasestr, modules/mbschr: * modules/mbscspn, modules/mbsinit, modules/mbslen: * modules/mbsncasecmp, modules/mbsnlen, modules/mbsnrtowcs: * modules/mbspbrk, modules/mbspcasecmp, modules/mbsrchr: * modules/mbsrtowcs, modules/mbssep, modules/mbsspn, modules/mbsstr: * modules/mbstok_r, modules/mbswidth, modules/mbtowc, modules/mbuiter: * modules/memchr-obsolete, modules/memcmp2, modules/minmax: * modules/mkdtemp, modules/mkostemp, modules/mktime-internal: * modules/modf, modules/modf-ieee, modules/modff, modules/modff-ieee: * modules/modfl, modules/modfl-ieee, modules/msvc-inval: * modules/msvc-nothrow, modules/multiarch, modules/nextafter: * modules/nl_langinfo, modules/no-c++, modules/nocrash: * modules/nonblocking, modules/open, modules/opendir, modules/openmp: * modules/oset, modules/pclose, modules/pipe, modules/pipe-filter-gi: * modules/pipe-filter-ii, modules/pipe2, modules/poll-h: * modules/posix_spawn, modules/posix_spawn-internal: * modules/posix_spawn_file_actions_addclose: * modules/posix_spawn_file_actions_adddup2: * modules/posix_spawn_file_actions_addopen: * modules/posix_spawn_file_actions_destroy: * modules/posix_spawn_file_actions_init: * modules/posix_spawnattr_destroy, modules/posix_spawnattr_getflags: * modules/posix_spawnattr_getpgroup: * modules/posix_spawnattr_getschedparam: * modules/posix_spawnattr_getschedpolicy: * modules/posix_spawnattr_getsigdefault: * modules/posix_spawnattr_getsigmask, modules/posix_spawnattr_init: * modules/posix_spawnattr_setflags, modules/posix_spawnattr_setpgroup: * modules/posix_spawnattr_setschedparam: * modules/posix_spawnattr_setschedpolicy: * modules/posix_spawnattr_setsigdefault: * modules/posix_spawnattr_setsigmask, modules/posix_spawnp: * modules/pow, modules/powf, modules/printf-frexp: * modules/printf-frexpl, modules/printf-posix, modules/printf-safe: * modules/progname, modules/propername, modules/pselect: * modules/pthread_sigmask, modules/ptsname, modules/ptsname_r: * modules/qacl, modules/quotearg-simple, modules/raise, modules/random: * modules/rbtree-list, modules/rbtree-oset, modules/rbtreehash-list: * modules/read, modules/readdir, modules/readlink: * modules/realloc-posix, modules/regex-quote, modules/relocatable-lib: * modules/relocatable-lib-lgpl, modules/relocatable-perl: * modules/relocatable-prog, modules/relocatable-prog-wrapper: * modules/relocatable-script, modules/remainder: * modules/remainder-ieee, modules/remainderf, modules/remainderf-ieee: * modules/remainderl, modules/remainderl-ieee, modules/rewinddir: * modules/rint, modules/rint-ieee, modules/rintf, modules/rintf-ieee: * modules/rintl, modules/rintl-ieee, modules/round-ieee: * modules/roundf-ieee, modules/roundl-ieee, modules/safe-read: * modules/safe-write, modules/sched, modules/servent, modules/setenv: * modules/setlocale, modules/sh-quote, modules/shutdown: * modules/signal, modules/signbit, modules/sigpipe: * modules/sigpipe-die, modules/sigprocmask, modules/sin, modules/sinf: * modules/sinh, modules/sinhf, modules/size_max, modules/sleep: * modules/snippet/arg-nonnull, modules/snippet/c++defs: * modules/snippet/link-warning, modules/snippet/unused-parameter: * modules/snprintf, modules/snprintf-posix, modules/spawn: * modules/spawn-pipe, modules/sprintf-posix, modules/sqrt: * modules/sqrt-ieee, modules/sqrtf, modules/sqrtf-ieee: * modules/sqrtl-ieee, modules/stdalign, modules/stdarg: * modules/stdbool, modules/stpcpy, modules/stpncpy, modules/strcase: * modules/strcasestr, modules/strcasestr-simple, modules/strcspn: * modules/streq, modules/strerror_r-posix, modules/striconv: * modules/striconveh, modules/striconveha, modules/strncat: * modules/strnlen1, modules/strpbrk, modules/strtod-obsolete: * modules/sublist, modules/sys_resource, modules/sys_utsname: * modules/sys_wait, modules/system-posix, modules/system-quote: * modules/tan, modules/tanf, modules/tanh, modules/tanhf: * modules/tcgetsid, modules/termios, modules/threadlib, modules/tls: * modules/tmpdir, modules/towctrans, modules/trunc, modules/trunc-ieee: * modules/truncf, modules/truncf-ieee, modules/truncl: * modules/truncl-ieee, modules/ttyname_r, modules/uname: * modules/unlockpt, modules/unsetenv, modules/vasnprintf: * modules/vasnprintf-posix, modules/vasprintf, modules/vasprintf-posix: * modules/vdprintf, modules/vdprintf-posix, modules/vfprintf-posix: * modules/vfscanf, modules/vma-iter, modules/vprintf-posix: * modules/vscanf, modules/vsnprintf-posix, modules/vsprintf-posix: * modules/wait-process, modules/waitpid, modules/wcpcpy: * modules/wcpncpy, modules/wcrtomb, modules/wcscasecmp, modules/wcscat: * modules/wcschr, modules/wcscmp, modules/wcscoll, modules/wcscpy: * modules/wcscspn, modules/wcsdup, modules/wcslen, modules/wcsncasecmp: * modules/wcsncat, modules/wcsncmp, modules/wcsncpy, modules/wcsnlen: * modules/wcsnrtombs, modules/wcspbrk, modules/wcsrchr: * modules/wcsrtombs, modules/wcsspn, modules/wcsstr, modules/wcstok: * modules/wcswidth, modules/wcsxfrm, modules/wctob, modules/wctomb: * modules/wctrans, modules/wctype, modules/wcwidth, modules/wmemchr: * modules/wmemcmp, modules/wmemcpy, modules/wmemmove, modules/wmemset: * modules/write, modules/xconcat-filename, modules/xlist: * modules/xmalloca, modules/xoset, modules/xprintf-posix: * modules/xreadlink, modules/xsetenv, modules/xsize, modules/xstriconv: * modules/xstriconveh, modules/xsublist, modules/xvasprintf-posix: * modules/y0, modules/y1, modules/yn: Remove Bruno Haible as maintainer; if he's the sole maintainer, change the maintainer to 'all'. Let's hope someone volunteers. 2014-06-27 Paul Eggert mktime: merge #if/#ifdef usage from glibc * lib/mktime.c: Use "#if defined DEBUG && DEBUG", not "#if DEBUG", as that works with both Glibc's and Gnulib's style. See thread starting at Siddhesh Poyarekar's bug report at: http://lists.gnu.org/r/bug-gnulib/2014-06/msg00102.html 2014-06-20 Alfred M. Szmidt git-version-gen: improve option descriptions * build-aux/git-version-gen: Mention that --prefix and --fallback have a mandatory argument. 2014-06-19 Paul Eggert regex: fix memory leak in compiler Fix by Andreas Schwab in: https://sourceware.org/ml/libc-alpha/2014-06/msg00462.html * lib/regcomp.c (parse_expression): Deallocate partially constructed tree before returning error. regex: merge patch from libc 2014-02-12 Joseph Myers Combine __USE_BSD and __USE_SVID into __USE_MISC. * lib/regex.h [__USE_BSD]: Change condition to [__USE_MISC]. 2014-06-17 Paul Eggert acl: port to gcc -Wredundant-decls From a request by Dmitry Antipov in: http://lists.gnu.org/r/emacs-devel/2014-06/msg00263.html * lib/acl.h (_GL_ACL_H): New macro. Protect entire contents with "#ifndef _GL_ACL_H". 2014-06-11 Bruce Korb Jim Meyering parse-duration: eliminate 68-year duration limit * lib/parse-duration.c: Include "intprops.h". (TIME_MAX): Rename to MAX_DURATION and define to TYPE_MAXIMUM(time_t). * modules/parse-duration (Depends-on): Add intprops. Reported by Jonas 'Sortie' Termansen. 2014-06-14 Paul Eggert pthread: don't assume AC_CANONICAL_HOST, port better to Solaris, etc. * modules/pthread (Depends-on): Add 'extensions', as it defines _POSIX_PTHREAD_SEMANTICS, which is needed on Solaris. (configure.ac-early): New section. * m4/pthread.m4 (gl_PTHREAD_CHECK): Revert previous change, as it is no longer needed. 2014-06-14 Pádraig Brady pthread: define thread-safe macros on some platforms * m4/pthread.m4 (gl_PTHREAD_CHECK): Define macros needed for thread-safe operation on some platforms. 2014-06-13 Paul Eggert regex: don't be multithreaded if USE_UNLOCKED_IO. Problem reported by Michael Felt in: http://bugs.gnu.org/17773 * lib/regex_internal.h: Do not use multithreaded version if USE_UNLOCKED_IO is defined. This is a hack, but it works around a porting bug with coreutils 8.22 on AIX 7.1. 2014-06-11 Daiki Ueno gettext: update macros to version 0.19 * m4/intl.m4, m4/po.m4: Update from gettext-0.19. In particular, depend on gl_EXTERN_INLINE and drop support for older Bison versions. 2014-06-10 Pádraig Brady select,poll: fix console handle check on windows 8 lib/poll.c (IsConsoleHandle): Change from testing the lower 2 bits of the handle to the more expensive but accurate syscall. lib/select.c: Likewise. 2014-06-10 Eli Zaretskii select: fix waiting on anonymous pipes on MS-Windows * lib/select.c (rpl_select): Fall back to polling when select() indicates there is nothing to check, while due to the timeout not expiring, activity is indicated on one of the handles. Also clear the TIMEOUT argument if the timer does expire. 2014-06-10 Eli Zaretskii times: fix to return non constant value on MS-Windows * lib/times.c (times): Don't use the process creation time, rather clock() which on windows returns the number of clock ticks since the process started. 2014-06-09 Michael Goffioul isatty: fix to work on windows 8 * lib/isatty.c (IsConsoleHandle): Change from testing the lower 2 bits of the handle to the more expensive but accurate syscall. 2014-06-07 Paul Eggert maint: fix typo in fdl.texi * doc/fdl.texi: Fix typo (missing '@'). Somehow this was in fdl.texi but not fdl-1.3.texi. 2014-06-06 Ben Walton mountlist: avoid hasmntopt const type warning on solaris * lib/mountlist.c: Solaris defines the OPT param of hasmntopt() with char * instead of const char *. Passing the constant string "ignore" generates a compiler warning. For Solaris cast MNT_IGNORE to avoid the warning. 2014-06-04 Eric Blake maintainer-makefile: delete obsolete code * top/maint.mk (build_aux): Drop old code, as threatened. maintainer-makefile: avoid spurious error messages * top/maint.mk (syntax-check): Guard definition and use of $(shell) by whether Makefile is present. 2014-06-03 Ben Walton rename: avoid unused-but-set-variable compiler warning * lib/rename.c (rpl_rename): In the non-Win32 variant of rpl_rename, it is possible that dst_exists may be set but not used. Mark it with the unused attribute to avoid compiler warnings. 2014-06-02 Ben Walton rename: mark a label as potentially unused * lib/rename.c (rpl_rename): Avoid compiler warnings seen on Solaris, by marking the out label as potentially unused. * m4/gnulib-common.m4: Mention the need for the trailing ; for C++. 2014-06-01 Paul Eggert gnulib-common.m4: Fix typo in _GL_UNUSED_LABEL. * m4/gnulib-common.m4 (_GL_UNUSED_LABEL): Omit trailing semicolon. 2014-06-02 Ben Walton acl: apply pure attribute to two functions * lib/acl-internal.h (acl_nontrivial, acl_ace_nontrivial): Mark as "pure" as flagged by gcc 4.9 on Solaris 10. 2014-06-01 Pádraig Brady gnulib-common.m4: add _GL_UNUSED_LABEL * m4/gnulib-common.m4: Add _GL_UNUSED_LABEL which is similar to _GL_UNUSED, but handles g++ < 4.5 not supporting this syntax. 2014-05-31 Paul Eggert dup2, fcntl, fcntl-h: port to AIX 7.1 This fixes some porting problems discovered when testing the latest grep snapshot on AIX 7.1. I don't think if fixes any bugs in grep but it could be important for other applications. * doc/posix-functions/dup2.texi: * doc/posix-functions/fcntl.texi: * doc/posix-headers/fcntl.texi: Document AIX bugs. * lib/fcntl.in.h (O_CLOEXEC, O_NOFOLLOW, O_TTY_INIT) [_AIX]: Define to 0 if outside 'int' range. * m4/dup2.m4 (gl_FUNC_DUP2): * m4/fcntl.m4 (gl_FUNC_FCNTL): Check for getdtablesize. If it's available, test a value just outside its range instead of testing 1000000. When cross-compiling, guess that AIX will fail this improved test. 2014-05-30 Paul Eggert printf, config.rpath: Port to FreeBSD 10. Problem reported by Tijl Coosemans in: http://lists.gnu.org/r/bug-gnulib/2014-05/msg00078.html * build-aux/config.rpath (hardcode_libdir_flag_spec) (hardcode_direct): Simplify FreeBSD configuration. (library_names_spec): Don't mishandle FreeBSD 10+. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_LONG_DOUBLE) (gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_F) (gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99) (gl_SNPRINTF_DIRECTIVE_N, gl_VSNPRINTF_ZEROSIZE_C99): Don't mishandle FreeBSD 10+ when cross-compiling. ftoastr: work around compiler bug in IBM xlc 12.1 * lib/ftoastr.h (_GL_FLT_PREC_BOUND, _GL_DBL_PREC_BOUND) (_GL_LDBL_PREC_BOUND): Make these macros, not enums, to work around a compiler bug in IBM xlc 12.1.0.0: it complains '"ftoastr.c", line 80.37: 1506-045 (S) Undeclared identifier _GL_FLT_PREC_BOUND.' 2014-05-30 Kieran Colford valgrind-tests: fixed misleading help message * m4/valgrind-tests.m4: The help message generated by configure implied that valgrind was disabled by default, which it wasn't. Adjusted the help message using s/enable/disable/ to clarify. 2014-05-30 Ulrich Weigand isfinite, isinf, isnan tests: fix for little-endian PowerPC * tests/test-isfinite.c (test_isfinitel): Only manipulate the first double of a PowerPC "double double" pair. * tests/test-isinf.c (test_isinfl): Likewise. * tests/test-isnan.c (test_long_double): Likewise. * tests/test-isnanl.h (main): Likewise. * tests/test-signbit.c (test_signbitl): Likewise. 2014-05-29 Paul Eggert exclude-tests: port to AIX 7.1 * modules/exclude-tests (test_exclude_LDADD): Add $(LIBTHREAD). Needed on AIX 7.1 with xlc V12.1, otherwise it won't link because the regex code uses locks. 2014-05-28 Paul Eggert pthread_sigmask, timer-time: use gl_THREADLIB only if needed Without this fix, Emacs would sometimes call sigprocmask instead of pthread_sigmask, which is a no-no in multithreaded applications. Problem reported by Jorgen Schaefer in . * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Suppress check for pthread_sigmask working without -lpthread if the application always links with -lpthread. Do not link with $LIBMULTITHREAD if gl_THREADLIB is not defined. * m4/timer_time.m4 (gl_TIMER_TIME): Require gl_THREADLIB only if it is defined. Do not append $LIBMULTITHREAD to LIB_TIMER_TIME if gl_THREADLIB is not defined. 2014-05-27 Sylvain Beucler . gnulib-tool: wget translations using --no-verbose rather than --quiet This allows the user to see error messages if any (--quiet hides them) * gnulib-tool: Invoke wget with --no-verbose, rather than --quiet. 2014-05-27 Sylvain Beucler gnulib-tool: adjust translation wget to avoid a https redirection Context: http://translationproject.org/latest/gnulib redirects to https://translationproject.org/latest/gnulib/ Rationale: if the user falls back to wget, she doesn't have rsync and is probably in a minimal build environment, where packages such as 'ca-certificates' are missing as well, resulting in a failed (and difficult to detect since ignored) translation initial fetch. Consequently let's avoid https if possible, and add the missing trailing slash. This also avoids an unnecessary 302 redirection. * gnulib-tool: Add trailing slash to gnulib URL. 2014-05-22 Pádraig Brady getlogin_r-tests: check return value rather than errno * tests/test-getlogin_r.c (main): As per POSIX we should be verifying the return value from getlogin_r() rather than errno. 2014-05-22 Pádraig Brady getlogin_r-tests: fix various issues in recent change * tests/test-getlogin_r.c: Include required headers that were missed in recent commit eec20b4e. Also consistently check the errno rather than the return value from getlogin_r as POSIX only specifies that non zero is returned on error. * modules/getlogin_r-tests (configure.ac): Add the check for ttyname(). 2014-05-21 Paul Eggert fchdir: port 'open' and 'close' redefinitions to AIX 7.1 * lib/chown.c, lib/clean-temp.c, lib/copy-file.c, lib/execute.c: * lib/fsusage.c, lib/gc-gnulib.c, lib/javacomp.c, lib/mountlist.c: * lib/openat-proc.c, lib/pagealign_alloc.c, lib/progreloc.c: * lib/spawn-pipe.c: Do not #undef 'open' and 'close'. AIX 7 does '#define open open64' and then 'int open64(const char *, int, ...);', which means the declaration for 'open' gets lost if we later '#undef open'. Discovered while building grep pretest 2.18.151-1c770 on AIX 7.1, where the compilation reported the non-fatal error "In function 'openat_proc_name' ... warning: implicit declaration of function 'open'". In this case the error is relatively harmless, but in other cases it might not be so minor. 2014-05-20 Paul Eggert xalloc: don't potentially generate invalid code for xmemdup calls * lib/xalloc.h (xmemdup): Do not mark with _GL_ATTRIBUTE_ALLOC, as this function can initialize the newly-allocated storage with new pointers, which means this function is not malloc-like. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56955 2014-05-19 Pádraig Brady getlogin_r-tests: avoid false failure under sudo/ssh etc. * tests/test-getlogin_r.c (main): Sync up with test-getlogin.c changes from commit 97249cf29 to not depend on environment variables. 2014-05-18 Pádraig Brady getlogin-tests: avoid false failure under cron * tests/test-getlogin.c (main): Avoid verifying errnos from ttyname() since that's not what's under test. Centos 6 was seen to return EINVAL for ttyname() when run from cron. 2014-05-16 Jim Meyering mbrtowc.m4: fix a comment typo * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): Fix typo s/2/-2/ in emitted documentation string. 2014-05-16 Paul Eggert mbrlen, mbrtowc: fix bug with empty input * lib/mbrtowc.c (rpl_mbrtowc) [MBRTOWC_EMPTY_INPUT_BUG]: Fix the bug. * m4/mbrlen.m4 (gl_MBRLEN_EMPTY_INPUT): New macro. It's not used, so this is mainly for documentation. * m4/mbrtowc.m4 (gl_MBRTOWC_EMPTY_INPUT): New macro. (gl_FUNC_MBRTOWC): Use it. * tests/test-mbrtowc.c (main): Test for the bug. 2014-05-15 Paul Eggert doc: document mbrtowc and mbrlen problem with empty input * doc/posix-functions/mbrlen.texi (mbrlen): * doc/posix-functions/mbrtowc.texi (mbrtowc): Document portability problem when the input string is empty. See: https://sourceware.org/bugzilla/show_bug.cgi?id=16950 doc: document exec* = spawn+exit bug with non-Cygwin Windows platforms Problem reported by Eli Zaretskii in: http://lists.gnu.org/r/bug-grep/2014-05/msg00118.html * doc/posix-functions/execl.texi (execl): * doc/posix-functions/execle.texi (execle): * doc/posix-functions/execlp.texi (execlp): * doc/posix-functions/execv.texi (execv): * doc/posix-functions/execve.texi (execve): * doc/posix-functions/execvp.texi (execvp): Mention spawn+exit problem on non-Cygwin Windows platforms. 2014-05-14 Guilherme de Almeida Suckevicz getlogin-tests: avoid false failure under sudo/ssh etc. * modules/getlogin-tests (configure.ac): Check for ttyname(). * tests/test-getlogin.c (main): Don't depend on environment variables to correlate with getlogin(), since sudo and ssh etc. can tamper with the LOGNAME and USER env vars. Instead lookup the name from the uid associated with the stdin tty. 2014-05-11 Paul Eggert mbsstr, quotearg, xstrtol: pacify IRIX 6.5 cc These were found when building the latest grep snapshot on IRIX 6.5. * lib/mbsstr.c (knuth_morris_pratt_multibyte): Break "a=b=c;" into "b=c; a=b;", since IRIX 6.5 cc complains about the former if b is never used later. * lib/quotearg.c (quoting_options_from_style): * lib/xstrtol.c (__xstrtol): Use enum instead of 0, to pacify IRIX 6.5 cc. 2014-04-18 Pádraig Brady gitlog-to-changelog: revert inclusion of git-log-fix file * build-aux/git-log-fix: Delete dummy file. * modules/gitlog-to-changelog: Don't reference (overwrite) the project specific git-log-fix file. 2014-04-18 Assaf Gordon maint.mk: Relax the copyright check to cater for non FSF projects * top/maint.mk (sc_copyright_check): Relax the check for $PACKAGE.texi to not require the "Free" suffix after the copyright years. 2014-04-18 Natanael Copa physmem: use sysinfo on linux-gnu if _SC_PHYS_PAGES unavailable * lib/physmem.c (physmem_total): Some systems like musl libc don't yet support _SC_PHYS_PAGES. Use the linux syscall sysinfo as fallback if _SC_PHYS_PAGES or _SC_PAGESIZE fails. (physmem_available): Likewise for _SC_AVPHYS_PAGES. 2014-04-18 Paul Eggert exclude: port to strict C99 Strict C does not allow converting a function pointer to void * and vice versa. Pass a pointer to a function pointer instead. * lib/exclude.c (add_exclude_file): Pass the address of the function pointer. (call_addfn): And deference the address here, to match. 2014-04-17 Paul Eggert regex: do not depend on malloc-gnu * modules/regex (Depends-on): Remove malloc-gnu. It's no longer needed, because of the 2012-12-29 patch "regex: port to hosts where malloc (0) == NULL". Reported by Nathan Kennedy in: http://lists.gnu.org/r/bug-gnulib/2014-04/msg00026.html 2014-04-16 Assaf Gordon expl: avoid incorrect expl(small_value) on OpenBSD 5.4 * m4/expl.m4 (gl_FUNC_EXPL): Add a check for this condition. * doc/posix-functions/expl.texi: Mention the workaround. 2014-04-12 Paul Eggert xalloc: allow x2nrealloc (P, PN, S) where P && !*PN * lib/xalloc.h (x2nrealloc): Extend slightly, to allow the current size to be zero even when the pointer is nonnull. This accommodates the use case where P is malloc (0) and *PN is 0 on a host where malloc (0) yields nonnull. 2014-04-09 Eric Blake fts: avoid unnecessary strlen calls * lib/fts.c (_D_EXACT_NAMLEN): Restore definition when needed. 2014-04-09 Paul Eggert fts: avoid unnecessary strlen calls * lib/fts.c (fts_build): Go back to using _D_EXECT_NAMLEN when that can be faster than strlen. 2014-03-26 Bernhard Voelker fts: avoid unnecessary strlen calls * lib/fts.c (_D_EXACT_NAMLEN): Remove macro. (fts_build): Store the length of the dp->d_name entry in a local variable instead of calling strlen() several times via the above, removed macro. For 'rm -rf some-dir' with e.g. 1M directory entries, this speeds up the run by ~4%, yet this reduces the execution time by about a third if run via "ltrace -c rm -rf some-dir". 2014-03-27 Paul Eggert obstack: Remove ancient NeXTSTEP gcc support conditional This change will ease merging with glibc. The "#if ... __NEXT__" causes a warning with -Wundef which glibc now enables by default. Problem reported by Will Newton in . glibc now uses __extension__ for GCC 2.8 or later, so go with that. * lib/obstack.h (__extension__): 2014-03-27 Paul Eggert obstack: merge with glibc changes * lib/obstack.c, lib/obstack.h: Merge from glibc. This is mostly indenting and commentary changes. Instances of 'register' have been removed. 2014-03-26 Bernhard Voelker strftime: wrap macros in "do {...} while(0)" * lib/strftime.c (DO_NUMBER): Wrap multi-statement code block of this macro in "do {...} while(0)" to prevent false use as a single statement, e.g., in an un-braced "{}" else-block. (DO_SIGNED_NUMBER, DO_TZ_OFFSET, DO_NUMBER_SPACEPAD): Likewise. (strftime_case_): Remove 'else' after 'goto' - which was the only non-fatal, un-braced use of one of the above macros. Spotted by coverity (NESTING_INDENT_MISMATCH). 2014-03-26 Bernhard Voelker modechange: avoid memory leaks for invalid octal modes * lib/modechange.c (mode_compile): During the parsing of notations like +40, free the 'mc' buffer for invalid mode strings like +17777 (greater than the maximum octal mode), =18 (bad octal mode characters) or u=1 ('affected' with octal modes). Reproducer, e.g.: $ valgrind --leak-check=full chmod +17777 file Introduced via the 2012-03-09 commit, 4730c3e3, "modechange: add notations +40, 00440, etc.". Spotted by coverity (RESOURCE_LEAK). 2014-03-24 Paul Eggert gitlog-to-changelog: include a dummy git-log-fix file Problem reported by Nathan Stratton Treadway in: http://lists.gnu.org/r/bug-tar/2014-03/msg00082.html * build-aux/git-log-fix: New file. 2014-03-13 Jim Meyering gitlog-to-changelog: also include the file, git-log-fix * modules/gitlog-to-changelog (Files): Add git-log-fix. Reported by Assaf Gordon. 2014-03-06 Paul Eggert regex: port to OS X 10.8.5 en_US.UTF-8 locale This fixes a bug when ignoring case and when comparing the titlecase letter 'Lj' (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J) to the corresponding uppercase letter 'LJ' (U+01C7 LATIN CAPITAL LETTER LJ). In the OS X 10.8.5 en_US.UTF-8 locale, the titlecase letter is neither lowercase nor uppercase, but uppercasing the titlecase letter (via towupper) yields the uppercase letter, so the two letters should match when ignoring case. Problem reported by Jim Meyering in . * lib/regex_internal.c (build_wcs_upper_buffer, build_upper_buffer): Don't test whether a character is lowercase before uppercasing it. 2014-03-04 Kevin Cernekee stdint, read-file: fix missing SIZE_MAX on Android (tiny change) This is basically one of the options Bruno Haible proposed in: http://lists.gnu.org/r/bug-gnulib/2012-01/msg00282.html * lib/sys_types.in.h (_GL_INCLUDING_UNISTD_H): New macro. * lib/stdint.in.h: Use it. * modules/stdint (Depends-on): Add sys_types. 2014-02-26 Pádraig Brady parse-datetime: fix crash or infloop in TZ="" parsing * lib/parse-datetime.y (parse_datetime): Break out of the TZ="" parsing loop once the second significant " is found. Also skip over any subsequent whitespace to be consistent with the non TZ= case. * tests/test-parse-datetime.c: Add test cases for TZ="" parsing. 2014-02-26 Paul Eggert savedir: new symbol for fast-read version * lib/savedir.h (SAVEDIR_SORT_FASTREAD): New symbol, for programs like GNU cp that want to use SAVEDIR_SORT_INODE if available, SAVEDIR_SORT_NONE otherwise. Problem reported by Bernhard Voelker in: http://lists.gnu.org/r/coreutils/2014-02/msg00037.html 2014-02-25 Paul Eggert unistd: port readlink to Mac OS X 10.3.9 * lib/unistd.in.h (_GL_INCLUDING_UNISTD_H): New macro, to work around self-include problem in Mac OS X 10.3.9 when combined with readlink module. Problem reported by Klaus Zietler in . 2014-02-23 Paul Eggert diffseq: remove TOO_EXPENSIVE heuristic Problem with diffutils reported by Vincent Lefevre in . The simplest solution is to remove the TOO_EXPENSIVE heuristic that I added to GNU diff in 1993. Although appropriate for circa-1993 hardware, these days the heuristic seems to be more trouble than it's worth. * lib/diffseq.h: Modernize citations. (struct context): Remove member too_expensive. All uses changed. (struct partition): Remove members lo_minimal, hi_minimal. All uses changed. (diag, compareseq): Remove arg find_minimal. All uses changed. (diag): Remove the TOO_EXPENSIVE heuristic that I added back in 1993 to make 'diff' run faster (but not as well) on large inputs. These days, computers are fast enough that it's typically better to run slower but more accurately. * lib/fstrcmp.c: Remove duplicate comment. * lib/fstrcmp.c (strcmp_bounded): * lib/git-merge-changelog.c (compute_differences): Adjust to diffseq.h changes. * NEWS: Document the change. savedir: simplify by using stpcpy * lib/savedir.c (direntry_t): Remove size member. All uses removed. (streamsavedir): Use stpcpy instead. * modules/savedir (Depends-on): Add stpcpy. 2014-02-21 Pádraig Brady spawn: fix link error on uclibc * m4/spawn_h.m4 (gl_HAVE_POSIX_SPAWN): use AC_SEARCH_LIBS, to incorporate -lrt if needed (on uclibc for example). * modules/posix_spawn: Reference the substituted LIB. 2014-02-21 Thomas Petazzoni (tiny change) timer: fix uClibc detection of threading * m4/time_time.m4 (gl_TIMER_TIME): Detect whether threads are enabled in uClibc. 2014-02-21 Eric Blake maintainer-makefiles: provide AC_PROG_SED for older autoconf * m4/gnulib-common.m4 (AC_PROG_SED): Copy from newer autoconf. 2014-02-21 Sergey Poznyakoff exclude: add support for posix regexps This commit adds support for POSIX extended regular expressions and fixes a long-standing memory leak (pattern buffer was never freed). It also implements a new interface function to read exclude patterns from a FILE, which passes an additional parameter to its callback function, thereby allowing to preserve its state between invocations. * lib/exclude.c (struct patopts): Pack regex and pattern into union. (pattern_buffer): New struct. (exclude): New member patbuf. (exclude_add_pattern_buffer): New function. (free_exclude_segment): Free regexps. (free_exclude): Free allocated pattern buffers. (exclude_patopts): New function. (file_pattern_matches): Use exclude_patopts. (add_exclude): support regexps. (add_exclude_fp): New function. (add_exclude_file): Rewrite using add_exclude_fp. (fnmatch_pattern_has_wildcards): Support posix extended regexps. * lib/exclude.h (EXCLUDE_REGEX, EXCLUDE_ALLOC): New flags. (add_exclude_fp) (add_exclude_file): Rewrite using add_exclude_fp. (fnmatch_pattern_has_wildcards): Support posix extended regexps. * lib/exclude.h (EXCLUDE_REGEX, EXCLUDE_ALLOC): New flags. (add_exclude_fp) (exclude_add_pattern_buffer): New prototypes. * modules/exclude: Depends on regex and filename. 2014-02-20 Eric Blake maintainer-makefiles: use $(SED) for syntax check * modules/maintainer-makefile (configure.ac): Check for sane sed. * top/maint.mk: Change sed to $(SED). 2014-02-11 Sergey Poznyakoff Paul Eggert savedir: add sorting arg to savedir, streamsavedir; remove fdsavedir Patch based on an idea by Dick Streefland in . * NEWS: Document this. * lib/savedir.c (NAME_SIZE_DEFAULT): Remove. (direntry_t, comparison_function): New types. (direntry_cmp_name): New function. (direntry_cmp_inode) [D_INO_IN_DIRENT]: New function. (streamsavedir, savedir): New arg OPTION. (streamsavedir): Simplify memory allocation. (fdsavedir): Remove. * lib/savedir.h (enum savedir_option): New type. (streamsavedir, savedir): New arg OPTION. (fdsavedir): Remove. 2014-02-05 Paul Eggert file-type: add support for doors and other less-common file types Problem with S_ISDOOR reported by Rich Burridge. * lib/file-type.c (file_type): Do S_ISLNK early too. Do S_TYPEIS* macros before the rest. Add S_ISCTG, S_ISDOOR, S_ISMPB, S_ISMPC, S_ISMPX, S_ISNAM, S_ISNWK, S_ISOFD, S_ISOFL, S_ISPORT, S_ISWHT. 2014-01-23 Eric Blake pthread: work around winpthread header pollution on mingw * lib/time.in.h: Move pthread workarounds... * lib/pthread.in.h: ...here. * m4/pthread.m4 (gl_PTHREAD_CHECK): Also build pthread.h when we detect macro pollution on mingw. * doc/posix-headers/pthread.texi (pthread.h): Document the problems. 2014-01-22 Paul Eggert qacl: check for fchmod * m4/acl.m4 (gl_FUNC_ACL): Check for fchmod, since acl-internal.h and qset-acl.c both use HAVE_FCHMOD. 2014-01-20 Paul Eggert fdopen-tests: port to Tru64 * tests/test-fdopen.c (main): Don't invoke fdopen on a file descriptor that is not open, as POSIX doesn't specify the resulting behavior and the test does not work on Tru64. Problem reported by Steven M. Schweda in: http://lists.gnu.org/r/bug-gnulib/2014-01/msg00079.html stdalign: port to HP-UX compilers * lib/stdalign.in.h (_Alignas): Use __attribute__ (__aligned__ (x)) if __HP_cc or __HP_aCC are nonzero. 2014-01-16 Paul Eggert strtoimax: port to platforms lacking 'long long' VMS's pre-C99 compiler lacks 'long long', so 'configure' doesn't check whether strtoll is declared, which causes the C file to wrongly report an error. Problem reported by Steven M. Schweda in: http://lists.gnu.org/r/bug-diffutils/2014-01/msg00003.html * lib/strtoimax.c (strtoull): Declare only if HAVE_UNSIGNED_LONG_LONG_INT. (strtoll): Declare only if HAVE_LONG_LONG_INT. 2014-01-16 Daniel Albers (tiny change) relocatable-perl: fix texi syntax * doc/relocatable-maint.texi: Escape braces. 2014-01-09 Reuben Thomas relocatable-perl: like relocatable-script, but for Perl scripts * build-aux/relocatable.pl.in: Add. * doc/relocatable-maint.texi: Add documentation. * modules/relocatable-perl: Add. 2014-01-07 Paul Eggert tests: fix export bug in previous patch Problem reported by Jim Meyering. * tests/init.sh (re_shell): New var, which is exported instead of re_shell_. tests: simplify porting to Solaris 10 /bin/sh Some test cases in 'grep' need a shell that groks '$('; export re_shell_ for their benefit. Problem reported for 'grep' by Dagobert Michelsen in . * tests/init.sh (re_shell_): Export if it's used. 2014-01-06 Eric Blake md5, sha1, sha256, sha512: support older autoconf * m4/00gnulib.m4 (m4_divert_push): Wrap diversion stack for autoconf < 2.63b. include_next: port to autoconf 2.63 * m4/gnulib-common.m4 (AS_VAR_COPY): Define if missing. 2014-01-04 Jim Meyering maint: add a gnulib-local rule to keep non-ascii out of .texi files * cfg.mk (sc_keep_gnulib_texi_files_mostly_ascii): New rule, so that "make sc_maint" will ding anyone who puts non-ascii in any of gnulib's .texi files. 2014-01-03 Jim Meyering freadable, fwritable, fwriting: declare with the "pure" attribute * lib/freadable.h (freadable): Declare with the "pure" attribute. * lib/fwritable.h (fwritable): Likewise. * lib/fwriting.h (fwriting): Likewise. Suggested by Bruno Haible. maint.mk: adapt openat.h-include-without-use test * top/maint.mk (sc_prohibit_openat_without_use): Also check for FCHMODAT_INLINE, FCHOWNAT_INLINE and STATAT_INLINE, to avoid failing on gnulib's own lib/{chmod,chown,stat}at.c files. With this change, running "make sc_maint" in gnulib's top-level directory now passes for me. 2014-01-03 Paul Eggert doc: use ASCII in .texi files where UTF-8 isn't needed * doc/posix-functions/crypt.texi, doc/posix-functions/encrypt.texi: * doc/posix-functions/setkey.texi, doc/regex.texi: Use ASCII input, not UTF-8. 2014-01-02 Jim Meyering freading: declare with the "pure" attribute * lib/freading.h (freading): Declare with the "pure" attribute. manywarnings: remove -Wmudflap * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Remove -Wmudflap, since it is no longer supported in gcc-4.9-to-be. 2014-01-01 Paul Eggert relocatable-script: remove unused code Problem reported by Reuben Thomas in: http://lists.gnu.org/r/bug-gnulib/2013-12/msg00117.html * build-aux/relocatable.sh.in (func_tmpdir): Remove unused function. 2014-01-01 Jim Meyering maint: fix public-submodule-commit to work with newer git * top/maint.mk (public-submodule-commit): Remove excess quoting. We were over-quoting the test arguments, and somewhere prior to version 1.8.5.2.229, git stopped removing those excess quotes, which made the test fail, since the unexpanded strings would always differ; using GIT_TRACE=1 confirmed that the git merge-base command wasn't even being run. 2014-01-01 Paul Eggert doc: update main copyright year * doc/gnulib.texi: Update copyright date. 2014-01-01 Eric Blake version-etc: new year * lib/version-etc.c (COPYRIGHT_YEAR): Bump to 2014. * all files: run 'make update-copyright' 2013-12-24 Eric Blake passfd: give nicer error for recvfd at eof * lib/passfd.c (recvfd): Fake ENOTCONN if other end closes early. * tests/test-passfd.c (main): Enhance test to cover this. 2013-12-17 Paul Eggert gettimeofday: port recent C++ fix to Emacs Without this further patch, Emacs won't build due to the portcheck failing. Also, this simplifies the patch a bit. * lib/time.in.h (localtime, gmtime): Don't replace unless GNULIB_GETTIMEOFDAY. Treat them more like mktime. * lib/time.in.h (localtime, gmtime): * m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): * modules/time (time.h): Don't worry about the possibility of localtime and gmtime being absent; they're present in all C libraries we know about. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Don't assume sys_time is present and has been initialized. Instead, use a hack that should work even if it hasn't been. Don't use a portcheck for gmtime or localtime; this supports the hack. * modules/time (time.h): Substitute GNULIB_GETTIMEOFDAY. 2013-12-17 John W. Eaton gettimeofday: fix C++ crosscompilation Never replace gmtime and localtime by macros when compiling with C++, this prevents from being included. * m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Do not define gmtime and localtime as preprocessor macros. Instead define some HAVE_GMTIME, HAVE_LOCALTIME, REPLACE_GMTIME, and REPLACE_LOCALTIME substitutions. * lib/time.in.h: Declare gmtime and localtime when needed. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): AC_SUBST HAVE_GMTIME, HAVE_LOCALTIME, REPLACE_GMTIME, and REPLACE_LOCALTIME. * modules/time: Depend on gettimeofday, and substitute the above variables in time.h. 2013-12-17 Paul Eggert qacl: port to Windows better See Eli Zaretskii in . * lib/file-has-acl.c (acl_access_nontrivial): Return -1 and set errno if !HAVE_ACL_FIRST_ENTRY && !HAVE_ACL_TO_SHORT_TEXT && !HAVE_ACL_FREE_TEXT. 2013-12-12 Alexander V. Lukyanov md5, sha1, sha256, sha512: fix (trivial) compile error in c++ mode. * lib/gl_openssl.h: Cast void pointers to a specific type. 2013-12-07 Pádraig Brady open-tests: fix build failure with -Werror=old-style-declaration * tests/test-open.h: Reorder the inline to avoid the issue. 2013-12-07 Pádraig Brady md5, sha1, sha256, sha512: fix link error with partial libcrypto * m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Only clear LIB_CRYPTO at init time, so that if early checks find crypto routines, while the last does not, then @LIB_CRYPTO@ is replaced correctly, avoiding link failures. 2013-12-07 Paul Eggert md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT This provides a new way to specify the default for gl_CRYPTO_CHECK, one that is reflected in the --help message. Emacs uses this, as well as the old way. This attempts to implement a suggestion by Pádraig Brady in . * m4/gl-openssl.m4(gl_SET_CRYPTO_CHECK_DEFAULT): New macro. (gl_CRYPTO_CHECK): Use it. Mention the default in --help output. md5, sha1, sha256, sha512: add 'auto', and a way to specify default * m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Add support for a new option, --with-openssl=auto, which causes the library to be used if available and silently ignored if not. Add support to allow configure.ac to specify its own default, by setting with_openssl_default before invoking gl_INIT. 2013-12-05 Paul Eggert open-tests: port to glibc with _FORTIFY_SOURCE and -O1 Problem reported by Daiki Ueno in: http://lists.gnu.org/r/bug-gnulib/2013-06/msg00052.html * tests/test-open.h (__always_inline): New macro, if not already defined. (test_open): Use it. 2013-12-04 Eric Blake include_next: minimize code duplication * modules/include_next (Depends-on): Add absolute-header. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Reuse gl_ABSOLUTE_HEADER_ONE instead of open-coding it. 2013-12-04 Pádraig Brady getcwd: fix compile error in configure check * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Include errno.h 2013-12-04 Pádraig Brady regex: suppress core dumps from detection code * m4/regex.m4 (gl_REGEX): Catch the SIGABRT and convert to SIGTERM to suppress core dumps that may well occur on glibc systems. These core dumps might not be cleaned up automatically, or could trigger some system core dump handling logic. 2013-12-03 Pádraig Brady md5, sha1, sha256, sha512: support mandating use of openssl * m4/gl-openssl.m4 (gl_crypto_check): Adjust the --with-openssl description, to list the now 3 separate options. also don't mention the default=no, since this is implicit given the option is described as --with-openssl rather than --without-openssl. If projects change the default they're free to document that. with --with-openssl[=yes] we now error out when the specified hash algorithm is not available in libcrypto. 2013-12-03 Ivailo test-xvasprintf: (trivial) fix to disable some -Wformat-security diags * tests/test-xvasprintf.c: Disable -Wformat-zero-length and -Wformat-nonliteral checks, as these edge cases are part of the test. 2013-12-03 Eric Blake regex: avoid glibc deadlock during configure * m4/regex.m4 (gl_REGEX): Avoid recursive malloc deadlock when glibc bug 15078 in turn triggers bug 16159. Reported by Michal Privoznik. 2013-12-02 Pádraig Brady md5, sha1, sha256, sha512: use openssl routines if available. --with-openssl the libcrypto md5, sha1, sha224, sha256, sha384, sha256 routines will be used if available, requiring apps to link @LIB_CRYPTO@ * lib/gl_openssl.h: Provide wrappers for specified openssl hash. * m4/gl-openssl.m4 (gl_CRYPTO_CHECK): New function to lookup libcrypto in the standard system location. * m4/sha1.m4: Call gl_CRYPTO_CHECK() for SHA1. * m4/sha256.m4: Likewise with SHA256. * m4/sha512.m4: Likewise with SHA512. * m4/md5.m4: Likewise with MD5. * m4/gc.m4: Ensure @LIB_CRYPTO@ set for tests. * lib/sha1.h: Include wrappers if HAVE_OPENSSL_SHA1. * lib/sha256.h: Likewise with SHA256. * lib/sha512.h: Likewise with SHA512. * lib/md5.h: Likewise with MD5. * lib/sha1.c: Exlude functionality if HAVE_OPENSSL_SHA1. * lib/sha256.c: Likewise with SHA256. * lib/sha512.c: Likewise with SHA512. * lib/md5.c: Likewise with MD5. * modules/crypto/sha1 (Link:): Add the new optional lib. (Depends-on:): Add dependency on extern-inline. * modules/crypto/sha256: Likewise. * modules/crypto/sha512: Likewise. * modules/crypto/md5: Likewise. * modules/crypto/sha1-tests: Reference the lib here too. * modules/crypto/md5-tests: Likewise. * modules/crypto/gc-des-tests: Likewise. * modules/crypto/gc-hmac-md5-tests: Likewise. * modules/crypto/gc-hmac-sha1-tests: Likewise. * modules/crypto/gc-hmac-sha256-tests: Likewise. * modules/crypto/gc-hmac-sha512-tests: Likewise. * modules/crypto/gc-md5-tests: Likewise. * modules/crypto/gc-pbkdf2-sha1-tests: Likewise. * modules/crypto/gc-sha1-tests: Likewise. * modules/crypto/gc-tests: Likewise. * modules/crypto/hmac-md5-tests: Likewise. * modules/crypto/hmac-sha1-tests: Likewise. * modules/crypto/hmac-sha256-tests: Likewise. * modules/crypto/hmac-sha512-tests: Likewise. 2013-11-29 RV1971 base64: (trivial) fix compilation regression on some compilers * lib/base64.c: Don't return the void function, instead split to a separate return statement. 2013-11-28 Paul Eggert ignore-value: revert previous code change * lib/ignore-value.h (ignore_value): Use __extension__ and __typeof__ only for GCC 3.4 and later. Reported by Eric Blake in . Change the comment to try to explain this better. 2013-11-27 Pádraig Brady selinux-h: improve stub types and add more stub functions * lib/se-selinux.in.h: Change security_context_t to a typedef rather than a define, as it's a pointer type and so is better as a typedef to avoid issues declaring multiple variables with the comma operator. Also add stub for string_to_security_class(). * lib/se-context.in.h: Add stub functions for context_{type,range,role,user}_get(). 2013-11-27 Paul Eggert ignore-value: prefer GCC version back through 2.0 The code didn't match the comments, so I did a bit of software archaeology. GCC 2.0 seems to support __extension__ and __typeof__, so fix both code and comments to use 2.0. * lib/ignore-value.h (ignore_value): Use __extension__ and __typeof__ for GCC 2.0 through 3.3, too. 2013-11-25 Mats Erik Andersson pty: Activate the signature wrapper of forkpty. The intended preprocessor macro HAVE_FORKPTY is never defined, yet `lib/forkpty.c' depends on it. * m4/pty.m4 (gl_FUNC_FORKPTY): At completed analysis, apply AC_DEFINE_UNQUOTED to HAVE_FORKPTY with value $HAVE_FORKPTY for access to wrapper in `lib/forkpty.c'. 2013-11-18 Jim Meyering and Paul Eggert quotearg: don't attempt to store 1 << 31 into an "int" * lib/quotearg.c (quotearg_buffer_restyled): Building coreutils with gcc's new -fsanitize=undefined and running its tests triggered some new test failures due to undefined behavior, all with this diagnostic: lib/quotearg.c:629:62: runtime error: left shift of 1 by 31 places \ cannot be represented in type int Rather than shifting "1" left to form a mask, shift the bits right and simply use "1" as the mask. 2013-11-21 Paul Eggert error: depend on stdio Problem reported by Nikos Mavrogiannopoulos in * modules/error (Depends-on): Add stdio. 2013-11-18 Ben Pfaff * doc/relocatable-maint.texi (Supporting Relocation): Improve wording. Reported by Reuben Thomas . 2013-11-13 Paul Eggert * lib/getgroups.c (posix_getgroups, getgroups) [__APPLE__]: New function and macro, to work around _DARWIN_C_SOURCE problem. Reported by Jack Howarth in . 2013-11-11 Pádraig Brady base64: provide a fast path for encoding well sized buffers Avoid conditionals in the base64 encoding loop, which was seen to give 60% better throughput. * lib/base64.c (base64_encode_fast): A new function to be called when we don't want to NUL terminate, and we have enough space in the output to encode the given input. (base64_encode): Call the _fast() version when appropriate. Also remove a redundant mask with 0x3F on the first encoded byte. 2013-11-08 Paul Eggert extern-inline: port better to OS X 10.9 * m4/extern-inline.m4: Omit serial number; this file doesn't use them. (gl_EXTERN_INLINE): Do not suppress the use of extern inline on OS X 10.9, except for g++ where the bug is still present. See . 2013-11-08 Eric Blake fpending: fix regression on DragonFly BSD * m4/fpending.m4 (gl_FUNC_FPENDING): Check for declaration. * lib/fpending.h (__fpending): Don't declare twice. Reported by GW in 2013-11-05 Jim Meyering hash: relax license to LGPLv2+, for libguestfs * modules/hash (License): Change from GPL to LGPLv2+. 2013-11-03 Paul Eggert intprops: port to Oracle Studio c99 * lib/intprops.h (_GL_HAVE___TYPEOF__) [__SUNPRO_C && __STDC__]: Define to 0, to avoid diagnostics when Oracle Studio is pedantic. 2013-10-31 Paul Eggert obstack: pacify HP C * lib/obstack.h (obstack_free) [!__GNUC__]: Rewrite to avoid warning "conversion from pointer to smaller integer" from HP C-ANSI-C - cc version B9007AA/B3910B A.06.26. It's safe to assume C89 or later nowadays, so cast to void instead of int. Privately reported by H.Merijn Brand. Also, change header to match glibc's, to make checking against glibc easier. 2013-10-29 Jim Meyering maint.mk: prefer gpgv2 over gpgv * top/maint.mk (gpgv): Use gpgv2 if present, else gpgv. (gpg_key_ID): Use $(gpgv), rather than hard-coding "gpgv". Reported by Gary Vaughan. 2013-10-30 Paul Eggert isnan: port to VAX Reported by John Klos for NetBSD-5/VAX in . * lib/isnan.c (IEEE_FLOATING_POINT): New macro, stolen from Emacs. (FUNC): Use it. 2013-10-28 Jim Meyering gnulib-tool: protect against CDPATH * gnulib-tool: Many "cd" built-in functions print a directory name to stdout when CDPATH is set, e.g., $ bash -c 'CDPATH=/; cd tmp' /tmp Unset it, when possible. Prompted by a comment from Bruce Korb. maint.mk: restore functionality removed by recent change... Sunday's change, v0.0-8062-g6b24f60, may have appeared correct from the context of a shallow-cloned gnulib repository: "git describe" would fail in such a directory. However, that change made it so the reported gnulib revision no longer includes the version number or a commit count, even when run from a full clone. * top/maint.mk (gnulib-version): Use the full "git describe" output when possible, e.g., the form above, rather than the abbreviated, no-tag, no-commit-count string, and fall back to using a 10-byte hash, rather than the default minimal-length hash prefix, since while the minimal-length one may be fine today, it is likely not to be unique for very long. 2013-10-26 Jim Meyering maint.mk: fix "release" target to build _version This fixes a bug in README-release whereby following the outlined steps, one would publish a tarball whose programs would report --version output not consistent with the package version number. This bug caused grep-2.15 to produce a grep program whose --version option made it print 2.14.56-1e3d rather than 2.15. * top/maint.mk (release): Making this target build "_version" ensures that the new version number is reflected in configure. 2013-10-21 Ben Pfaff install-reloc: Support multi-binary installation. * build-aux/install-reloc: Support installing multiple programs in one invocation, as done by Automake starting with commit 4295fe33eb23f (Multi-file install for PROGRAMS.). From Bruno Haible , archived at http://lists.debian.org/debian-bsd/2012/05/msg00032.html. Reported by Sylvain . 2013-10-21 Michael Haubenwallner selinux-h: Really build without selinux when library is missing. * m4/selinux-selinux-h.m4: When the selinux library is missing, really continue without selinux, as already told in the warning message. 2013-10-21 Jim Meyering regex: also remove dependency on HAVE_WCSCOLL * lib/regex_internal.h: Remove final vestige of the wcscoll dependency. 2013-10-21 Reuben Thomas xfreopen: Fix typo. s/frepoen/freopen/ * lib/xfreopen.c: Fix description. * modules/xfreopen: Likewise. 2013-10-21 Jim Meyering regex: don't depend on wcscoll * m4/regex.m4 (gl_PREREQ_REGEX): Don't check for wcscoll. It is no longer used. 2013-10-20 Jim Meyering error: add the printf attribute to a static function * lib/error.c (error_tail): Add the printf attribute, to placate gcc's -Werror=suggest-attribute=format option. 2013-09-30 Jim Meyering fpending, obstack, strerror-override: use pure+const function attrs * lib/fpending.h (__fpending): Declare with the "pure" attribute. * lib/obstack.c (_obstack_allocated_p): Likewise. * lib/obstack.h (_obstack_memory_used): Likewise. (_obstack_memory_used): Likewise. * lib/strerror-override.h (strerror_override): Declare with the "const" attribute. 2013-10-18 Eric Blake extern-inline: make safe for -Wundef usage Reported by Vladimir 'phcoder' Serbinenko in https://lists.gnu.org/r/bug-gnulib/2013-10/msg00078.html * m4/extern-inline.m4 (gl_EXTERN_INLINE): Port to older gcc. 2013-10-16 Paul Eggert mkfifo-tests, etc.: allow HP-UX 11.11 bug Problem reported by Daniel Richard G. in . * doc/posix-functions/mkfifo.texi (mkfifo): * doc/posix-functions/mkfifoat.texi (mkfifoat): * doc/posix-functions/mknod.texi (mknod): * doc/posix-functions/mknodat.texi (mknodat): Document the HP-UX 11.11 bug. * tests/test-mkfifo.h (test_mkfifo): Allow the HP-UX 11.11 bug. 2013-10-14 Paul Eggert acl: allow cross-compilation to Gentoo Problem reported by Gabriel Marcano in . * m4/acl.m4 (gl_ACL_GET_FILE): When cross-compiling, test only whether it links. 2013-10-13 Paul Eggert mgetgroups: remove dependency on realloc-gnu The dependency violates the comment in realloc-gnu, which says that tests can't depend on realloc-gnu; some tests depend on mgetgroups, so mgetgroups can't depend on realloc-gnu. Problem reported by Daniel Richard G. in . * lib/mgetgroups.c (mgetgroups): Don't call realloc (NULL, 0). * modules/mgetgroups (Depends-on): Depend on realloc-posix, not realloc-gnu. 2013-10-12 Paul Eggert regex-tests: port to HP-UX 11.11 Problem reported by Daniel Richard G. in . * modules/regex-tests (test_regex_LDADD): Add LIBTHREAD, LIB_PTHREAD. 2013-10-10 Paul Eggert verify: document some 'assume' pitfalls * doc/verify.texi (Compile-time Assertions): Mention that 'assume (E)' can sometimes slow things down. Use CHAR_MAX + 1, not UCHAR_MAX + 1. 2013-10-10 Eric Blake strtoumax: fix typo in previous commit. * modules/strtoumax (Depends-on): Fix typo. * modules/strtoimax (Depends-on): Likewise. 2013-10-10 Paul Eggert strtoumax: port to Solaris 8 This problem was introduced in the recent HP-UX patch. Reported by Tom G. Christensen in . * modules/strtoumax (Depends-on): Test HAVE_STRTOUMAX and REPLACE_STRTOUMAX rather than ac_cv_func_strtoumax. 2013-10-09 Paul Eggert strtoimax, strtoumax: port to HP-UX 11.11 Problem reported by Daniel Richard G. in . * lib/inttypes.in.h (strtoumax): Replace strtoumax if REPLACE_STRTOUMAX, thus treating it consistently with strtoimax. * m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Add default for REPLACE_STRTOUMAX. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Replace the function if defined as a macro but not as a function. * modules/inttypes-incomplete (inttypes.h): Substitute REPLACE_STRTOUMAX. * modules/strtoumax (configure.ac): Replace strtoumax if REPLACE_STRTOUMAX. 2013-10-08 Paul Eggert strtoimax: port to HP-UX 11.11 Problem reported by Daniel Richard G. * lib/strtoimax.c (Strtoimax, Strtol, Strtoll): New macros. (strtoimax, strtol, strtoll) [UNSIGNED]: Remove, since they might clash with inttypes.h. 2013-10-06 Paul Eggert New module 'count-trailing-zeros'. * MODULES.html.sh: Mention it. * lib/count-trailing-zeros.c, lib/count-trailing-zeros.h: * m4/count-trailing-zeros.m4, modules/count-trailing-zeros: * modules/count-trailing-zeros-tests: * tests/test-count-trailing-zeros.c: New files. count-leading-zeros: port to MSC; support types wider than 64 bits The ideas behind the MSC port are stolen from Emacs. * lib/count-leading-zeros.h: Don't include verify.h: it's no longer needed, as types wider than 64 bits are now supported. (COUNT_LEADING_ZEROS): New arg MSC_BUILTIN, for better performance with MSC. All uses changed. Do not assume that TYPE has at most 64 bits. (count_leading_zeros_32): Assume 0 < X < 2**32, for speed. All uses changed. Fold the subtraction from 31 into the table. count-one-bits: port to MSC; support types wider than 64 bits The ideas behind the MSC port are stolen from Emacs. * lib/count-one-bits.c (popcount_support) [_MSC_VER]: New variable. * lib/count-one-bits.h: Include limits.h, for CHAR_BIT. Don't include verify.h: it's no longer needed, as types wider than 64 bits are now supported. (COUNT_ONE_BITS_GENERIC): New macro. (popcount_supported) [_MSC_VER]: New inline function. (COUNT_ONE_BITS): Use it. New arg MSC_BUILTIN, for better performance with MSC. All uses changed. Do not assume that TYPE has at most 64 bits. * modules/count-one-bits (Depends-on): Do not depend on 'verify'. 2013-10-06 Andrew Borodin mountlist: fix resource leak with MOUNTED_INTERIX_STATVFS * lib/mountlist.c (read_file_system_list): fix leak of directory streams in case of #ifdef MOUNTED_INTERIX_STATVFS. 2013-10-06 Paul Eggert tests: improve diagnostic when an assertion fails * tests/macros.h (ASSERT): Report the assertion that failed. 2013-10-02 Paul Eggert verify: new macro 'assume' This is taken from Emacs, and should be generally useful. * doc/verify.texi (assume): Document it. * lib/verify.h (assume): New macro. (__has_builtin): Expand to 0 if not defined. 2013-09-26 Eric Blake dup2, dup3: work around another cygwin crasher * m4/dup2.m4 (gl_FUNC_DUP2): Expose the bug. * m4/dup3.m4 (gl_FUNC_DUP3): Likewise. * tests/test-dup2.c (main): Likewise. * lib/dup2.c (rpl_dup2): Use setdtablesize to avoid it. * lib/dup3.c (dup3): Likewise. * doc/posix-functions/dup2.texi (dup2): Document it. * doc/glibc-functions/dup3.texi (dup3): Likewise. getdtablesize: work around cygwin issue * m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Detect problem. * modules/getdtablesize (configure.ac): Build replacement. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set up a witness. * modules/unistd (Makefile.am): Expose the witness. * lib/unistd.in.h (getdtablesize): Declare replacement. * lib/getdtablesize.c (rpl_getdtablesize): Work around it. * tests/test-getdtablesize.c (main): Test it. * doc/glibc-functions/getdtablesize.texi (getdtablesize): Document it. 2013-09-25 Mats Erik Andersson pmccabe2html: escaping of special characters Escape all '<', '>', and '&' in HTML output. * build-aux/pmccabe2html (html_fnc): Call gsub() instead of sub() to capture all '<', '>', and '&'. Neither of '<' and '>' is special in a regexp, so first arguments to gsub() are corrected. Also, in replacement strings, ampersand must be escaped. Finally, '&' must be handled first, then '<' and '>'. 2013-09-24 Eric Blake manywarnings: enable nicer gcc warning messages * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Older gcc requires some -f options for optimal warnings. 2013-09-21 Jim Meyering timespec: use the new TIMESPEC_RESOLUTION in a few more places * lib/timespec-add.c (timespec_add): Also replace 999999999 with TIMESPEC_RESOLUTION - 1. * lib/timespec-sub.c (timespec_sub): Likewise. 2013-09-23 Paul Eggert warnings: port --enable-gcc-warnings to Solaris Studio 12.3 Problem reported by Dagobert Michelsen via Eric Blake in . * m4/warnings.m4 (gl_COMPILER_OPTION_IF): Use AC_LINK_IFELSE, not AC_COMPILE_IFELSE. 2013-09-23 Eric Blake configmake: support new --runstatedir option * m4/configmake.m4 (gl_CONFIGMAKE_PREP): Substitute runstatedir even if autoconf was too old to provide the command line option. * modules/configmake (Makefile.am): Propagate it to .h file. 2013-09-22 Paul Eggert ctype, string: depend on extern-inline This is needed to complete the recent OS X fixes. Also, fix related documentation as suggested by Eric Blake. * doc/posix-functions/isalnum.texi, doc/posix-functions/isalpha.texi: * doc/posix-functions/isascii.texi, doc/posix-functions/iscntrl.texi: * doc/posix-functions/isdigit.texi, doc/posix-functions/isgraph.texi: * doc/posix-functions/islower.texi, doc/posix-functions/isprint.texi: * doc/posix-functions/ispunct.texi, doc/posix-functions/isspace.texi: * doc/posix-functions/isupper.texi, doc/posix-functions/isxdigit.texi: * doc/posix-functions/toascii.texi, doc/posix-functions/tolower.texi: * doc/posix-functions/toupper.texi: List the 'ctype' gnulib module. * doc/posix-functions/strcat.texi, doc/posix-functions/strcpy.texi: * doc/posix-functions/strncpy.texi: List the 'string' gnulib module. * modules/memcpy, modules/memmove, modules/memset (Depends-on): Add string. * modules/ctype, modules/string (Depends-on): Add extern-inline. 2013-09-19 Pádraig Brady userspec: support optional parameters to parse_user_spec() * lib/userspec.c (parse_user_spec): If the GID param is NULL, then avoid group processing and treat the full spec as a user. (parse_with_separator): Allow the USERNAME and GROUPNAME to be optional params (NULL), in which case they're ignored. 2013-09-19 Paul Eggert timespec: new function make_timespec, and new constants * lib/timespec.h: Incorporate recent changes on the Emacs trunk. (TIMESPEC_RESOLUTION, LOG10_TIMESPEC_RESOLUTION): New constants. (make_timespec): New function. * lib/dtotimespec.c (dtotimespec): * lib/timespec-add.c (timespec_add): * lib/timespec-sub.c (timespec_sub): * lib/utimens.c (validate_timespec): * lib/utimensat.c (rpl_utimensat): Use these new constants and functions. stdio: OS X port of putc_unlocked + extern inline * lib/stdio.in.h (putc_unlocked): #undef on problematic Apple platforms. * doc/posix-functions/putc_unlocked.texi: * doc/posix-functions/putchar_unlocked.texi: Document this portability problem. signal: OS X port of sigaddset etc. + extern inline * lib/signal.in.h (sigaddset, sigdelset, sigemptyset, sigfillset) (sigismember): #undef on problematic Apple platforms. * doc/posix-functions/sigaddset.texi: * doc/posix-functions/sigdelset.texi: * doc/posix-functions/sigemptyset.texi: * doc/posix-functions/sigfillset.texi: * doc/posix-functions/sigismember.texi: Document this portability problem. extern-inline: do not always suppress extern inline on OS X * m4/extern-inline.m4 (gl_EXTERN_INLINE): Suppress the use of extern inline on Apple only if the particular compile-time configuration is known to have the problem. (_GL_EXTERN_INLINE_APPLE_BUG): New private macro, to implement this. (_GL_EXTERN_INLINE_IN_USE): New macro, intended for use by other Gnulib modules. extern-inline: document fixes for ctype and wctype macros * doc/posix-functions/isalnum.texi, doc/posix-functions/isalpha.texi: * doc/posix-functions/isascii.texi, doc/posix-functions/isblank.texi: * doc/posix-functions/iscntrl.texi, doc/posix-functions/isdigit.texi: * doc/posix-functions/isgraph.texi, doc/posix-functions/islower.texi: * doc/posix-functions/isprint.texi, doc/posix-functions/ispunct.texi: * doc/posix-functions/isspace.texi, doc/posix-functions/isupper.texi: * doc/posix-functions/iswalnum.texi, doc/posix-functions/iswalpha.texi: * doc/posix-functions/iswcntrl.texi, doc/posix-functions/iswctype.texi: * doc/posix-functions/iswdigit.texi, doc/posix-functions/iswgraph.texi: * doc/posix-functions/iswlower.texi, doc/posix-functions/iswprint.texi: * doc/posix-functions/iswpunct.texi, doc/posix-functions/iswspace.texi: * doc/posix-functions/iswupper.texi, doc/posix-functions/iswxdigit.texi: * doc/posix-functions/isxdigit.texi, doc/posix-functions/toascii.texi: * doc/posix-functions/memcpy.texi, doc/posix-functions/memmove.texi: * doc/posix-functions/memset.texi, doc/posix-functions/stpcpy.texi: * doc/posix-functions/stpncpy.texi, doc/posix-functions/strcat.texi: * doc/posix-functions/strcpy.texi, doc/posix-functions/strncat.texi: * doc/posix-functions/strncpy.texi: * doc/posix-functions/tolower.texi, doc/posix-functions/toupper.texi: * doc/posix-functions/towlower.texi, doc/posix-functions/towupper.texi: Document that Gnulib fixes portability problems with these functions on OS X 10.8 and earlier when called from plain inline or extern inline functions. 2013-09-17 Kevin Cernekee fflush, freadahead, fseeko: Fix for Android Suggested by Bruno Haible in: * lib/stdio-impl.h: Use local __sfileext definition. 2013-09-17 Mats Erik Andersson pmccabe2html: Portability to other awk versions. The functions systime() and strftime() are available in Gawk only. Properly close two HTML-tags 'style' and 'span'. * build-aux/pmccabe2html (BEGIN): Store timing strings in EPOCH_TIME and CHRONOS_TIME. Replace systime() in HTML_COMMENT. (html_header): Correctly close tag 'style'. (END): Replace strftime() by CHRONOS_TIME. Close tag 'span' correctly, not as 'div'. 2013-09-17 Mats Erik Andersson (tiny change) getgroups: statement without effect * lib/getgroups.c (rpl_getgroups) [HAVE_GETGROUPS]: Change equality conditional to expected assignment. 2013-09-09 Eric Blake glob: fix compilation * lib/glob.in.h (__THROW): Fix missing line in previous commit. 2013-09-07 Eric Blake glob: fix build for platforms without __THROW * lib/glob.in.h (__THROW): Add definition again. 2013-09-04 Anton Ovchinnikov (tiny change) regex-quote: fix buffer access out of bounds http://lists.gnu.org/r/bug-gnulib/2013-09/msg00001.html * lib/regex-quote.c (regex_quote_spec_pcre): Fix typo that resulted in an out-of-bounds read. 2013-09-04 Eric Blake glob: avoid -Wattribute warnings on glibc * lib/glob.c (next_brace_sub, prefix_array, collated_compare): Use __THROWNL, not __THROW, on static functions. * lib/glob.in.h (__THROW): Adjust... (__THROWNL): ...accordingly. 2013-08-28 Paul Eggert headers: check that _GL_INLINE_HEADER_BEGIN is defined Suggested by Bruce Korb in: http://lists.gnu.org/r/bug-gnulib/2013-08/msg00070.html * doc/extern-inline.texi (extern inline): Suggest checking that _GL_INLINE_HEADER_BEGIN is defined. * lib/acl-internal.h, lib/argp-fmtstream.h, lib/argp.h: * lib/binary-io.h, lib/bitrotate.h, lib/count-leading-zeros.h: * lib/count-one-bits.h, lib/eealloc.h, lib/execinfo.in.h: * lib/gethrxtime.h, lib/gl_list.h, lib/gl_oset.h, lib/gl_xlist.h: * lib/gl_xoset.h, lib/gl_xsublist.h, lib/glthread/cond.h: * lib/glthread/thread.h, lib/math.in.h, lib/mbchar.h, lib/mbfile.h: * lib/mbiter.h, lib/mbuiter.h, lib/openat.h, lib/pipe-filter-aux.h: * lib/priv-set.h, lib/pthread.in.h, lib/savewd.h, lib/se-context.in.h: * lib/se-selinux.in.h, lib/sig-handler.h, lib/stat-time.h: * lib/sys_socket.in.h, lib/timespec.h, lib/u64.h, lib/unistd.in.h: * lib/utimens.h, lib/wctype.in.h, lib/xalloc.h, lib/xsize.h: * lib/xtime.h: Check that _GL_INLINE_HEADER_BEGIN is defined. 2013-08-29 Pádraig Brady bootstrap: remove the --version requirement from ancillary tools * build-aux/bootstrap (check_exists): A new refactored function to determine if a command exists. (find_tool): Use the new function which does not require the --version option to be supported. (check_versions): Use the new function. 2013-08-26 Simon Josefsson gc: support HMAC-SHA256 and HMAC-SHA512. * lib/gc.h: Add gc_hmac_sha256 and gc_hmac_sha512. * lib/gc-libgcrypt.c (gc_hmac_sha256, gc_hmac_sha512): New functions. (gc_hmac_md5): Use symbolic constant. * lib/gc-gnulib.c: Include hmac.h for HMAC-SHA256/512 too. (gc_hmac_sha256, gc_hmac_sha512): New functions. * lib/hmac.h: Add hmac_sha256 and hmac_sha512 prototypes. * m4/sha256.m4: Protect against empty expansion. * m4/sha512.m4: Likewise. * lib/hmac-sha256.c: New file. * lib/hmac-sha512.c: Likewise. * m4/gc-hmac-sha256.m4: Likewise. * m4/gc-hmac-sha512.m4: Likewise. * m4/gc-sha256.m4: Likewise. * m4/gc-sha512.m4: Likewise. * modules/crypto/gc-hmac-sha256: Likewise. * modules/crypto/gc-hmac-sha256-tests: Likewise. * modules/crypto/gc-hmac-sha512: Likewise. * modules/crypto/gc-hmac-sha512-tests: Likewise. * modules/crypto/hmac-sha256: Likewise. * modules/crypto/hmac-sha256-tests: Likewise. * modules/crypto/hmac-sha512: Likewise. * modules/crypto/hmac-sha512-tests: Likewise. * tests/test-gc-hmac-sha256.c: Likewise. * tests/test-gc-hmac-sha512.c: Likewise * tests/test-hmac-sha256.c: Likewise. * tests/test-hmac-sha512.c: Likewise 2013-08-24 Daiki Ueno * m4/intl.m4: Update from gettext-0.18.3.1, which fixes a misuse of AC_CHECK_DECLS. 2013-08-23 Paul Eggert selinux-at: omit unnecessary include * lib/selinux-at.c: Don't include dosname.h; not needed, since this source file doesn't use its macros, and subsidiary files that use the macros already include it. 2013-08-21 Eric Blake d-ino: avoid false negative on symlink * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Use lstat. Reported by Stephane Chazelas. 2013-08-12 Mike Miller (tiny change) bootstrap: port to OpenBSD sed * build-aux/bootstrap (insert_if_absent): Port to OpenBSD sed which does not interpret `-' as a file argument to mean stdin. 2013-08-15 Eric Blake warnings: minor optimization * m4/warnings.m4 (gl_COMPILER_OPTION_IF): Use fewer processes. warnings: check -Wfoo rather than -Wno-foo * m4/warnings.m4 (gl_COMPILER_OPTION_IF): If name begins with -Wno-, test if the compiler recognizes the positive form instead. 2013-08-15 Karl Berry * config/srclist-update: add option "doclicense" to placate pulling *.texi files from Emacs. Write terse usage documentation at the top. 2013-08-13 Paul Eggert xvasprintf-tests: port to GCC with hardening flags * tests/test-xvasprintf.c (test_xasprintf): Pass another arg to xasprintf, to pacify GCC. Reported by Santiago Vila in: http://lists.gnu.org/r/bug-diffutils/2013-08/msg00002.html 2013-08-11 Paul Eggert fpending: port to recent Cygwin change to stdio_ext.h Reported by LRN in . * lib/fpending.h: Don't worry about HAVE_DECL___FPENDING; just declare __fpending unless it's a macro. A duplicate decl shouldn't hurt. * m4/fpending.m4 (gl_FUNC_FPENDING): Check that an __fpending call compiles and links, instead of separately checking for decl and lib function. * modules/fpending (configure-ac): Adjust to fpending.m4's renaming of shell variable. 2013-08-10 Paul Eggert sys_time: port to OpenBSD * lib/sys_time.in.h: Simply delegate to the system's header in the BSDish cases as well. Problem reported by Mike Miller in . * tests/test-sys_select.c, tests/test-sys_time.c (verify_tv_sec_type): Allow platforms like 64-bit OpenBSD where timeval's tv_sec is wider than time_t. 2013-08-09 Pádraig Brady bootstrap: support checksum utils having -c but not --status * build-aux/bootstrap: Only look for sha1sum if updating po files. Add sha1 to the list of supported checksum utils since it's now supported through adjustments below. (update_po_files): Remove the use of --status in a way that will suppress all error messages, but since this is only used to minimize updates, it shouldn't cause an issue. Exit early if there is a problem updating the po file checksums. (find_tool): Remove the check for --version support as this is optional as per commit 86186b17. Don't even check for the presence of the command as if that is needed, it's supported through configuring prerequisites in bootstrap.conf. Prompt that when a tool isn't found, one can define an environment variable to add to the hardcoded search list. 2013-08-05 Jim Meyering regex: port to non-glibc/lock-using systems Since 29-05-2013 commit, 55ba71f4, compilation on a non-glibc system with GNULIB_LOCK would fail due to absence of the included "glthread/lock.h". This would affect any package for which the "lock" module is used only by the regex module, and not explicitly used. * m4/regex.m4 (gl_PREREQ_REGEX): Require gl_GLIBC21. * modules/regex (Depends-on) [!GLIBC && $ac_use_included_regex]: Add a dependency on the "lock" module. 2013-07-20 Daiki Ueno localecharset: make locale_charset thread-safe on Mac OS X * lib/localcharset.c (locale_charset) [DARWIN7]: Use MB_CUR_MAX_L instead of MB_CUR_MAX. 2013-07-20 Daiki Ueno gettext: update to version 0.18.3 * m4/intl.m4, m4/po.m4: Update from gettext-0.18.3. In particular, require AC_PROG_SED to allow user to specify custom sed command when generating en@quot PO file. 2013-07-18 Werner Lemberg (tiny change) bootstrap: use correct source when copying build-aux files * build-aux/bootstrap (gnulib_extra_files): This variable is relative to upstream gnulib layout, not downstream. 2013-07-17 Paul Eggert tmpdir: fix bug in VMS port * lib/tmpdir.c (path_search) [__VMS]: Never add slash. See Steven M. Schweda in . 2013-07-15 Paul Eggert tmpdir: port to VMS, to // != /, and to long dirs * lib/tmpdir.c (__libc_secure_getenv) [!_LIBC]: Rename from __secure_getenv, so that we're more like the glibc version. All uses changed. (path_search): Don't put slash after directory if __VMS. Problem reported by Steven M. Schweda in . Simplify code to add slash; no need for a loop. Do not remove trailing slash from "//". Do not assume dlen <= INT_MAX. 2013-07-09 Paul Eggert regex: port to --with-included-regex --enable-gcc-warnings non-threaded * lib/regex_internal.h (lock_fini, lock_lock): Rework to avoid gcc warnings in the non-threaded case. Reported by Charlie Brown in . accept4, dup3, pipe2: port to Cygwin Problem reported for Emacs by Ken Brown in . * lib/accept4.c (accept4) [O_BINARY]: * lib/dup3.c (dup3) [O_BINARY]: * lib/pipe2.c (pipe2) [O_BINARY]: Use set_binary_mode, not setmode. * lib/pipe2.c [!GNULIB_BINARY_IO]: Include binary-io.h. * modules/binary-io (Depends-on): Remove module indicator. These last two bits undo the previous change to pipe2 and binary-io. 2013-07-09 Pádraig Brady mountlist: add support for deallocating returned list entries * lib/mountlist.c (free_mount_entry): A new exported function to deallocate a mount list entry. (read_file_system_list): Refactor to use the new deallocation function. Suggested by Anton Ovchinnikov. 2013-07-07 Paul Eggert stdalign, verify: port to FreeBSD 9.1, to C11, and to C++11 Problem reported by Ulrich Mueller in . * lib/stdalign.in.h (_Alignas, _Alignof): Port to FreeBSD 9.1, and to C11 and C++11. (_Alignas): Also support ICC. * lib/verify.h (_Static_assert): Undef if defines it. * m4/stdalign.m4 (gl_STDALIGN_H): Port to ICC and to C++11. 2013-07-06 Paul Eggert fnmatch: don't goto over declaration * lib/fnmatch_loop.c (FCT): Hoist local up one level, to avoid undefined behavior for goto over a declaration. Problem reported by Charlie Brown in . pipe2: decouple from binary-io a bit This is for Emacs, which needs pipe2 but not binary-io. * lib/pipe2.c [!GNULIB_BINARY_IO]: Don't include binary-io.h. * modules/binary-io (Depends-on): Add module indicator. 2013-07-03 Eric Blake mgetgroups: relax license to LGPLv2+ * modules/getugroups (License): Change from GPLv3+. * modules/mgetgroups (License): Likewise. * modules/getgroups (License): Change from LGPLv3+. xalloc-oversized: relax license to LGPLv2+ * modules/xalloc-oversized (License): Change from GPLv3+. nproc: relax license to LGPLv2+ * modules/nproc (License): Change from LGPLv3+. bootstrap: honor --no-git * build-aux/bootstrap: Don't even try to use git when user is pointing to a static checkout. 2013-06-23 Paul Eggert ignore-value: port to gcc -pedantic * lib/ignore-value.h (ignore_value): Port to gcc -pedantic, by using __extension__. Reindent as per usual gnulib style nowadays. Simplify GCC version check. 2013-06-21 Paul Eggert extern-inline: port to gcc -std=c89 * m4/extern-inline.m4 (gl_EXTERN_INLINE): Do not use __gnu_inline__ if pedantic and pre-C99. 2013-06-18 Paul Eggert doc: document extern-inline * doc/extern-inline.texi: New file. * doc/gnulib.texi (alloca-opt): Include it. * m4/extern-inline.m4: Move some comments to documentation, and others closer to what they describe. doc: chatter less * doc/Makefile (NEWEST_GNULIB_TEXI_FILE): New macro. (updated-stamp): Use it. This causes 'make' to output just one file name rather than zillions. fflush, fseeko: port to musl cross-compiles * lib/fseeko.c (fseeko): Assume that fflushing stdin works if on some implementation that (1) is not known to be buggy, (2) claims conformance to POSIX.1-2008 or later, and (3) is being cross-compiled to so we can't easily check for lack of conformance. This is for cross-compiling to musl. Reported by Rich Felker in . * m4/fclose.m4 (gl_FUNC_FCLOSE): * m4/fflush.m4 (gl_FUNC_FFLUSH): * m4/fseeko.m4 (gl_FUNC_FSEEKO): Adjust to above change. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): Set gl_cv_func_fflush_stdin to 'cross', not to 'no', when cross-compiling. AC_DEFINE FUNC_FFLUSH_STDIN to 1, 0, -1 if fflushing stdin is known to work, known not to work, or unknown. 2013-06-15 Paul Eggert msvc-inval: port to mingw-w64 * lib/msvc-inval.c (gl_msvc_invalid_parameter_handler): Use __cdecl, not cdecl, for mingw-w64. Reported by LRN in . 2013-06-11 Paul Eggert getcwd-lgpl: port to Tru64 * lib/getcwd-lgpl.c: Include , for malloc etc. Problem reported by Steven M. Schweda in . tests: port large-fd POSIX spawn tests to OS X Problem reported by Daiki Ueno in . * tests/test-posix_spawn_file_actions_addclose.c: * tests/test-posix_spawn_file_actions_adddup2.c: * tests/test-posix_spawn_file_actions_addopen.c: Include , for OPEN_MAX, if available. (big_fd): New static function. (main): Use it. 2013-06-04 Bernhard Voelker tests/nap.h: use an adaptive delay to avoid ctime update issues The recent change in nap.h (5191133e) decreased the probability of lost races to about a third, however such problems could still be observed in virtual machines and openSUSE's OBS. Before, nap() detected the needed time once empirically and then used that delay (together with a small correction multiplier) in further calls. This problem has been reported and discussed several times, including guesses about possible kernel issues: https://lists.gnu.org/r/bug-gnulib/2013-04/msg00071.html http://lists.gnu.org/r/coreutils/2012-03/msg00088.html https://lists.gnu.org/r/bug-gnulib/2011-11/msg00226.html http://bugs.gnu.org/12820 https://lists.gnu.org/r/bug-gnulib/2010-11/msg00113.html https://lists.gnu.org/r/bug-gnulib/2009-11/msg00007.html Now, nap() avoids the race alltogether by verifying on a reference file whether a timestamp difference has happened. * tests/nap.h (nap_fd): Define file descriptor variable for the witness file. (nap_works): Change return value to bool. Change passing the old file's status by value instead of by reference as this function does no longer update that timestamp; rename the function argument from st to old_st. Remove the local variables cdiff and mdiff because that function now returns true/false instead of the precise delay. (guess_delay): Remove function. (clear_tmp_file): Add new function to close and unlink the witness file. (nap): Instead of re-using the delay which has been calculated during the first call, avoid the race by actually verifying that a timestamp difference can be observed on the current file system. Use an adaptive approach for the delay to minimize execution time. Assert that the maximum delay is <= ~2 seconds, more precisely sum(2^n) from 0 to 30 = 2^31 - 1 = 2.1s. Use atexit to call clear_tmp_file when the process terminates. 2013-06-02 Paul Eggert sig2str: port to C++ * lib/sig2str.h (sig2str, str2sig): Declare as extern "C". Reported by Daniel J Sebald in . 2013-05-30 Eric Blake docs: mention cygwin shortcoming in * doc/posix-headers/sys_un.texi (sys/un.h): Mention problem. vasnprintf: silence mingw compiler warning * lib/vasnprintf.c (VASNPRINTF): Avoid unused variable warning. 2013-05-29 Paul Eggert c-ctype, regex, verify: port to gcc -std=c90 -pedantic Avoid constructions that are rejected by gcc -std=c90 -pedantic. This fixes a porting bug I recently reintroduced in regex, and some other instances that I discovered while testing the fix. * lib/c-ctype.h [__STRICT_ANSI__]: Avoid ({ ... }). * lib/regcomp.c (utf8_sb_map) [__STRICT_ANSI__]: Avoid [0 ... N] = E. * lib/regex_internal.h [!_LIBC && GNULIB_LOCK]: Do not use a macro with an empty argument if this is a pedantic pre-C99 GCC. * lib/verify.h: Do not use _Static_assert if this is a pedantic pre-C11 GCC. regex: adapt to locking regime instead of depending on pthread Instead of depending on pthread, adapt to whatever thread modules are in use. Problem reported by Ludovic Courtès in and by Mats Erik Andersson in . * lib/regex_internal.h (lock_define, lock_init, lock_fini): Support either the 'lock' module, or the 'pthread' module, or no module. (lock_lock, lock_unlock): New macros. * lib/regexec.c (regexec, re_search_stub): Use the new macros. * modules/lock, modules/pthread (configure.ac): Add module indicator. * modules/regex (Depends-on): Remove pthread. 2013-05-22 Eric Blake getgroups: document portability issues * doc/glibc-functions/initgroups.texi (initgroups): Mention multithread safety. * doc/posix-functions/getpwuid.texi (getpwuid): Likewise. * doc/posix-functions/getpwuid_r.texi (getpwuid_r): Likewise. * doc/glibc-functions/getgrouplist.texi (getgrouplist): Mention getugroups. * doc/posix-functions/getgroups.texi (getgroups): Mention multithread safety and mgetgroups. 2013-05-22 Bernhard Voelker test-lchown, test-chown: also skip test if chown fails with EPERM * tests/test-lchown.h (test_lchown): Add EPERM to the condition to skip this test, to handle FAT file systems. * tests/test-chown.h (test_chown): Likewise. 2013-05-19 Paul Eggert regex: fix dfa race in multithreaded uses Problem reported by Ludovic Courtès in . * lib/regex_internal.h (lock_define, lock_init, lock_fini): New macros. All uses of __libc_lock_define, __libc_lock_init changed to use the first two of these. (__libc_lock_lock, __libc_lock_unlock): New macros, for non-glibc platforms. (struct re_dfa_t): Define the lock unconditionally. * lib/regexec.c (regexec, re_search_stub): Remove some now-incorrect '#ifdef _LIBC"s. * modules/regex (Depends-on): Add pthread, if we use the included regex. * lib/regcomp.c: Do actions that are not needed for glibc, but may be needed elsewhere. (regfree, re_compile_internal): Destroy the lock. (re_compile_internal): Check for lock-initialization failure. malloca: port to compilers that reject size-zero arrays This fixes a bug introduced in my previous patch. * lib/malloca.c (struct preliminary_header): Use an int rather than a character array of size int; that's simpler. (struct header): Remove, replacing with ... (union header): New type. This avoids the need for declaring a character array of size zero, which is not allowed on some platforms. All uses changed. 2013-05-18 Paul Eggert parse-datetime, tests: don't use "string" + int Recent versions of 'clang' complain about C source code that uses expressions of the form '"string literal" + integer', I guess on the theory that it's confusing for readers who are used to C++. On those grounds I suppose it's OK to make this minor style change. * lib/parse-datetime.y (parse_datetime): * tests/test-fchdir.c (main): * tests/test-snprintf-posix.h (test_function): * tests/test-snprintf.c (main): * tests/test-vasnprintf-posix.c (test_function): * tests/test-vasnprintf.c (test_function): * tests/test-vsnprintf.c (main): * tests/unistdio/test-ulc-asnprintf1.h (test_function): Rewrite '"str" + E' to '&"str"[E]'. 2013-05-17 Alexandre Duret-Lutz argmatch: port to C++ * lib/argmatch.h [__cplusplus]: Add extern "C". argp: typo fix * lib/argp-help.c: Typo in comment. 2013-05-15 Paul Eggert manywarnings: update for GCC 4.8.0 * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add -Waggressive-loop-optimizations, -Wreturn-local-addr, which are new to GCC 4.8. Remove -Wformat=2, -Wmissing-format-attribute, -Wmissing-noreturn, as they are duplicates of other warnings. Remove -Wunreachable-code, as it is removed in GCC 4.8 and was documented to be flaky in earlier versions of GCC. spawn-tests, sys_socket-tests, sys_wait-tests: port to clang * tests/test-spawn.c (main): * tests/test-sys_socket.c (main): * tests/test-sys_wait.c (main): Don't have a switch value that isn't covered by a case. getaddrinfo-tests: port --enable-gcc-warnings to clang * tests/test-getaddrinfo.c (simple): Avoid casts from looser to stricter-aligned pointers. thread: port --enable-gcc-warnings to clang * lib/glthread/thread.h [__clang__ && USE_POSIX_THREADS_WEAK]: Include , to pacify a warning about pthread_sigmask. stdio: use __REDIRECT for fwrite, fwrite_unlocked * lib/stdio.in.h (fwrite): When working around bug 11959, use __REDIRECT rather than '#define fwrite(...) ... fwrite (...) ...'. This is a more-targeted way to fix the -Wunused-value issue with clang, and it works with GCC too. Problem with targeting reported by Eric Blake in . (fwrite_unlocked): Treat like fwrite. I ran into this issue while debugging the fwrite issue. stdio: port --enable-gcc-warnings to clang * lib/stdio.in.h (fwrite) [__clang__]: Ignore -Wunused-value entirely, since the GCC workaround for fwrite does not pacify clang. sig2str: port --enable-gcc-warnings to clang * lib/sig2str.c (sig2str): Avoid warning about unused printf argument. obstack: port --enable-gcc-warnings to clang * lib/obstack.h (obstack_ptr_grow_fast, obstack_int_grow_fast): Avoid casts from looser to stricter-aligned pointers. memchr2: port --enable-gcc-warnings to clang * lib/memchr2.c (memchr2): Avoid casts from looser to stricter-aligned pointers. mbsstr: port --enable-gcc-warnings to clang * lib/mbsstr.c (knuth_morris_pratt_multibyte): Avoid casts from looser to stricter-aligned pointers. malloca: port --enable-gcc-warnings to clang * lib/malloca.c (struct header): New member 'magic', to avoid casts. (mmalloca): Avoid casts from looser to stricter-aligned pointers. inttostr: port --enable-gcc-warnings to clang * lib/anytostr.c [__clang__]: Ignore -Wtautological-compare. warnings: port to clang Problem reported by Daniel P. Berrange via Eric Blake in . * m4/warnings.m4 (gl_UNKNOWN_WARNINGS_ARE_ERRORS): New macro. (gl_WARN_ADD): Use it. 2013-05-11 Jim Meyering quotearg: do not read beyond end of buffer * lib/quotearg.c (quotearg_buffer_restyled): Do not read beyond the end of an ARG for which no length was specified. With an N-byte quote string, (e.g., N is 3 in the fr_FR.UTF-8 locale), this function would read N-2 bytes beyond ARG's trailing NUL. This was triggered via coreutils' misc/sort-debug-keys.sh test and detected by running the test against a binary compiled with gcc-4.8.0's -fsanitize=address. * tests/test-quotearg-simple.c (main): Add a test to trigger the bug. * modules/quotearg-simple-tests (Files): Add tests/zerosize-ptr.h. Introduced via the 2000-01-15 commit, c4b7f3f8, "Quote multibyte characters correctly." 2013-05-11 Daiki Ueno lock: work around pthread recursive mutexes bug in Mac OS X 10.6 * m4/lock.m4: Don't define HAVE_PTHREAD_MUTEX_RECURSIVE if the compilation target is Mac OS X 10.6. Problem reported by parafin and Andoni Morales in and . 2013-05-11 Paul Eggert mkdir-p: remove assumptions about umask and mode * lib/mkdir-p.c (make_dir_parents): Do not assume that the current umask is 0, or that MODE is a subset of MODE_BITS. 2013-05-10 Eric Blake maint.mk: catch more abuse of HAVE_DECL in syntax-check * top/maint.mk (sc_prohibit_defined_have_decl_tests): Relax regex. 2013-05-10 Stefano Lattarini deps: require Automake >= 1.9.6 in generated Makefile fragments That is the same minimal version required in the DEPENDENCIES file. Moreover, the old code generated a requirement of Automake >= 1.5, and that is an insanely outdated version. * gnulib-tool: Bump minimal version requirement in AUTOMAKE_OPTIONS. * tests/havelib/rpathlx/Makefile.am: Likewise. * tests/havelib/rpathly/Makefile.am: Likewise. * tests/havelib/rpathlyx/Makefile.am: Likewise. * tests/havelib/rpathlz/Makefile.am: Likewise. * tests/havelib/rpathlzyx/Makefile.am: Likewise. * tests/havelib/rpathx/Makefile.am: Likewise. * tests/havelib/rpathy/Makefile.am: Likewise. * tests/havelib/rpathz/Makefile.am: Likewise. 2013-05-08 Eric Blake bootstrap: AC_INIT may have more than four parameters * build-aux/bootstrap (extract_package_name): Correctly extract non-empty tarname field. Avoid range in regex. Based on a report by Sami Kerola . 2013-05-07 Paul Eggert qacl: port to MS-Windows port of GNU Emacs * lib/acl-errno-valid.c (acl_errno_valid) [ENOTSUP == ENOSYS]: Omit the duplicate ENOTSUP case. Needed for the MS-Windows port of GNU Emacs. Problem reported by Eli Zaretskii in . 2013-05-07 Mike Frysinger acl: include quote.h * lib/copy-acl.c: Include quote.h. * lib/set-acl.c: Likewise. 2013-05-06 Mike Frysinger fchownat, renameat, unlinkat: update statat dependencies These modules use statat and lstatat, not fstatat; so depend on the statat module, which was split out recently from fstatat. * modules/fchownat, modules/unlinkat: Change fstatat to statat. * modules/renameat: Likewise. Also delete fstat. URL: http://bugs.gentoo.org/468790 2013-05-04 Stefano Lattarini Assume gnulib is checked out from Git, not CVS In fact, access to the gnulib repository through CVS has been disabled, or more precisely, got broken and was never restored; see: Note that support for CVS is not removed completely and unthinkingly by this change: only support for CVS checkouts of gnulib itself is removed. For example, the 'bootstrap' script still cater to .cvsingore files and CVS directories, for the benefit of those poor gnulib clients still stuck with CVS. Ditto for the 'gnulib-tool' script itself. * gnulib-tool: Simplify accordingly. * posix-modules: Likewise. * MODULES.html.sh: Likewise. * doc/gnulib.texi: No longer mention the decommissioned CVS gnulib repository. * doc/gnulib-intro.texi: Likewise. * doc/gnulib-readme.texi: Likewise. * doc/gnulib-tool.texi: In the examples and explanations, refer to a sample '.gitignore' file rather than a sample '.cvsignore'. * NEWS: Update. * m4/extensions.m4: While at it, remove a comment mistakenly referring to "CVS Autoconf" rather than "git Autoconf". 2013-04-30 Paul Eggert utimensat-tests, etc.: try to fix some races Problem reported by Bernhard Voelker in . I don't know whether this patch fixes that race condition, but it fixes *some* race conditions, so it should be a win. * modules/chown-tests (Depends-on): * modules/fchownat-tests (Depends-on): * modules/fdutimensat-tests (Depends-on): * modules/futimens-tests (Depends-on): * modules/lchown-tests (Depends-on): * modules/stat-time-tests (Depends-on): * modules/utimens-tests (Depends-on): * modules/utimensat-tests (Depends-on): Depend on nanosleep, not usleep. * modules/chown-tests (test_chown_LDADD): * modules/lchown-tests (test_lchown_LDADD): * modules/stat-time-tests (test_stat_time_LDADD): New macro. * modules/fchownat-tests (test_fchownat_LDADD): * modules/fdutimensat-tests (test_fdutimensat_LDADD): * modules/futimens-tests (test_futimens_LDADD): * modules/utimens-tests (test_utimens_LDADD): * modules/utimensat-tests (test_utimensat_LDADD): Add $(LIB_NANOSLEEP). * modules/stat-time-tests (Files): Add tests/nap.h. * tests/nap.h: Include , for INT_MAX. (lt_mtime): Remove. (diff_timespec): New function. (get_stat): Rename from get_mtime. All callers changed. (nap_works): Determine the needed delay by inspecting the file system's timestamp jumps; this should be more reliable. Look at both mtime and ctime, and take the maximum of the two jumps. (nap_works, guess_delay): Return a nanosecond count, not a microsecond count. All callers changed. (nap_works, nap): Use nanosleep, not usleep. Check for nanosleep failure. (nap): Multiply the guess by 1.125, to accommodate the case where the file system's clock is a bit slower than nanosleep's clock. * tests/test-stat-time.c (BASE): New macro. Include nap.h. (nap): Remove; nap.h now defines this. This removes a duplicate implementation of 'nap'. utimens, utimensat: work around Solaris UTIME_OMIT bug Solaris 11.1 and Solaris 10 have the same UTIME_OMIT bug that Linux kernel 2.6.32 does. Work around it in the same way. * doc/posix-functions/futimens.texi (futimens): * doc/posix-functions/utimensat.texi (utimensat): Document the bug. * lib/utimens.c (fdutimens, lutimens): * lib/utimensat.c (rpl_utimensat): Work around the bug. gettext: now it's your responsibility to add -I$(top_builddir)/intl Formerly, it was your responsibility to do this for all Makefile.ams other than Gnulib's. Now it's your responsibility to do it for Gnulib's Makefile.am, too. * NEWS: Document this. * modules/gettext (AM_CPPFLAGS): Don't append -$(top_builddir)/intl. acl: include errno.h to get errno Reported by Daiki Ueno in . * lib/copy-acl.c, lib/set-acl.c: Include errno.h. 2013-04-29 Paul Eggert tests: don't assume getdtablesize () <= 10000000 * modules/cloexec-tests: * modules/dup2-tests: * modules/dup3-tests: * modules/nonblocking-tests: * modules/posix_spawn_file_actions_addclose-tests: * modules/posix_spawn_file_actions_adddup2-tests: * modules/posix_spawn_file_actions_addopen-tests: * modules/unistd-safer-tests: Depend on the getdtablesize module. * tests/test-cloexec.c: * tests/test-dup-safer.c: * tests/test-dup2.c: * tests/test-dup3.c: * tests/test-fcntl.c: * tests/test-nonblocking.c: * tests/test-posix_spawn_file_actions_addclose.c: * tests/test-posix_spawn_file_actions_adddup2.c: * tests/test-posix_spawn_file_actions_addopen.c: Don't assume getdtablesize () <= 10000000. 2013-04-28 Paul Eggert extern-inline: work around bug in Sun c99 * m4/extern-inline.m4 (_GL_INLINE, _GL_EXTERN_INLINE): Work around bug in Sun C 5.12 c99's implementation of 'inline'. 2013-04-27 Paul Eggert qacl: new module, broken out from the acl module This is for GNU Emacs, which wants the acl functions but does not want 'error' invoked when they fail. * lib/acl-internal.h: Do not include error.h, quote.h. (ENOSYS, ENOTSUP): Remove; no longer needed. (ACL_NOT_WELL_SUPPORTED): Remove; replaced by acl_errno_valid. * lib/acl.h: Include . (acl_errno_valid): New function. * lib/copy-acl.c, lib/set-acl.c: Include errno,h, not acl-internal.h. * lib/copy-acl.c (qcopy_acl): Move to lib/qcopy-acl.c. * lib/set-acl.c: Rename from lib/set-mode-acl.c. (chmod_or_fchmod, qset_acl): Move to lib/qset-acl.c. (ACL_INTERNAL_INLINE): Remove; no longer needed. * lib/file-has-acl.c (file_has_acl): * lib/qcopy-acl.c (qcopy_acl): * lib/qset-acl.c (qset_acl): Use acl_errno_valid instead of ACL_NOT_WELL_SUPPORTED. * modules/acl (Files): Move lib/acl.h, lib/acl-internal.h, lib/acl_entries.c, lib/set-mode-acl.c (renamed to lib/set-acl.c), lib/file-has-acl.c, m4/acl.m4 to qacl module. Add lib/set-acl.c. (Depends-on): Move extern-inline, fstat, sys_stat to qacl module. Add qacl. (configure.ac): Move gl_FUNC_ACL to qacl module. (lib_SOURCES): Remove file-has-acl.c (moved to qacl module). Rename set-mode-acl.c to set-acl.c. * lib/acl-errno-valid.c: New file. * lib/qcopy-acl.c: New file, moved from the old lib/copy-acl.c; the copy_acl function remains in copy-acl.c. * lib/qcopy-acl.c, lib/qset-acl.c: Do not include gettext.h. (_): Remove; not needed. * lib/qset-acl.c: New file, moved from the old lib/set-mode-acl.c; the set_acl function remains in set-acl.c (renamed from set-mode-acl.c). * modules/qacl: New file, moved from the old modules/acl. (Files, lib_SOURCES): Add acl-errno-valid.c, qcopy-acl.c, qset-acl.c. Remove set-mode-acl.c, copy-acl.c. (Depends-on): Remove error, gettext-h, quote. Add stdbool. alignof, intprops, malloca: port better to IBM's C compiler * lib/alignof.h (alignof_type) [__IBM_ALIGNOF__]: Use __alignof__. * lib/intprops.h (_GL_HAVE___TYPEOF__) [__IBM_TYPEOF__]: Now 1. * lib/malloca.h (sa_alignof): [__IBM_ALIGNOF__]: Use __alignof__. 2013-04-25 Daiki Ueno wctype-h: fix gettext link error on mingw Reported by Josue Andrade Gomes and Takayuki Tsunakawa in . * lib/wctype.in.h [__MINGW32__]: Include before defining rpl_towupper and rpl_towupper. 2013-04-11 Dmitry V. Levin regex-tests, regex: allow glibc re_search behavior * tests/test-regex.c (main): In test for glibc bug 15078, reformat re_search input data to make the multi-character collating element in it clearly visible, and treat re_search return code 0 as valid. * m4/regex.m4 (gl_REGEX): Likewise. 2013-03-30 Paul Eggert stdalign: doc fix * doc/posix-headers/stdalign.texi (stdalign.h): Gnulib doesn't support '_Alignof expr'. 2013-03-29 Paul Eggert stdalign: port to stricter ISO C11 ISO C11 says that _Alignof's operand must be a parenthesized type. Problem reported by Eli Zaretskii in . * doc/posix-headers/stdalign.texi (stdalign.h): Document this. * m4/stdalign.m4 (gl_STDALIGN_H): Don't use _Alignof (expr). 2013-03-21 Paul Eggert sys_select, sys_time: port 2013-01-30 Solaris 2.6 fix to Cygwin Problem reported by Marco Atzeri in . * lib/sys_select.in.h [HAVE_SYS_SELECT_H && _CYGWIN_SYS_TIME_H]: Simply delegate to the system in this case too. Also, pay attention to _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H only if OSF/1, since otherwise Cygwin breaks, and it doesn't seem to be needed on Solaris either. * lib/sys_time.in.h [_CYGWIN_SYS_TIME_H]: Simply delegate to the system in this case. 2013-03-19 Karl Berry * build-aux/gnupload: check for erroneous (with gnupload) use of ftp-upload.gnu.org, tweak help. 2013-03-19 Paul Eggert copy-file, rpmatch: fix problems found by cppcheck Reported by Arno Onken in . * lib/rpmatch.c (try): Fix memory leak. * lib/copy-file.c: Include "ignore-value.h". (qcopy_file_preserving): Ignore chown value. * modules/copy-file (Depends-on): Add ignore-value. 2013-01-27 Jim Meyering prefix-gnulib-mk: give better diagnostics * build-aux/prefix-gnulib-mk: Don't just "die". Give better diagnostics upon failure. 2013-03-13 Paul Eggert putenv: port to Solaris 10 * lib/putenv.c (_unsetenv, putenv): Use HAVE_DECL__PUTENV, not HAVE__PUTENV. Solaris 10 has a _putenv that's not declared and is not what is wanted here. * m4/putenv.m4 (gl_PREREQ_PUTENV): Check for _putenv's declaration, not for its existence. 2013-03-12 Paul Eggert mktime: fix configure typo * m4/mktime.m4 (gl_FUNC_MKTIME): Fix typo in previous change. 2013-03-12 Eric Blake regex-tests: skip UTF-8 test on mingw * modules/regex-tests (Depends-on): Add localcharset. * tests/test-regex.c (main): Use it to skip test on mingw. 2013-03-11 Eric Blake tests: make it easier to bypass alarm time in debugger * tests/test-file-has-acl.c (main): Allow gdb to override alarm. * tests/test-memmem.c (main): Likewise. * tests/test-passfd.c (main): Likewise. * tests/test-ptsname.c (main): Likewise. * tests/test-ptsname_r.c (main): Likewise. * tests/test-strcasestr.c (main): Likewise. * tests/test-strstr.c (main): Likewise. regex: port to mingw's recent addition of undeclared alarm * doc/posix-functions/alarm.texi (alarm): Document that alarm exists but still doesn't work in newer mingw. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Check for alarm declaration, not existence. Ensure SIGALRM is not trapped. * m4/mktime.m4 (gl_FUNC_MKTIME): Likewise. * m4/regex.m4 (gl_REGEX): Likewise. * m4/remainderf.m4 (gl_FUNC_REMAINDERF_WORKS): Likewise. * tests/test-regex.c (main): Use correct probe for alarm. putenv: avoid compilation warning on mingw * lib/putenv.c (_unsetenv): Protect variable declaration. (putenv): Fix indentation. 2013-03-11 Gary V. Vaughan unistd: don't prevent Tru64 Unix from using gnulib strtod. * lib/unistd.in.h: be careful not to include un-needed system stdlib.h from here, because that prevents gnulib stdlib.h from defining rpl_strtod correctly. 2013-03-09 Gary V. Vaughan vasprintf-posix-tests: allow rounding 1.51 to 1, per the previous changesets, but for the 'precision 0' test. * tests/test-vasprintf-posix.c (test_function): Don't insist on round-to-even, since POSIX says rounding is implementation-defined and OS X 10.8.2 rounds 1.51 to 1 here. vasprintf-posix-tests: allow rounding 1.5 to 1, per the previous changeset. * tests/test-vasprintf-posix.c (test_function): Don't insist on round-to-even, since POSIX says rounding is implementation-defined and OS X 10.8.2 rounds 1.5 to 1 here. 2013-03-08 Paul Eggert vasnprintf-posix-tests: allow rounding 1.5 to 1 * tests/test-vasnprintf-posix.c (test_function): Don't insist on round-to-even, since POSIX says rounding is implementation-defined and OS X 10.8.2 rounds 1.5 to 1 here. Reported by Gary V. Vaughan in . bootstrap: port to FreeBSD * build-aux/bootstrap (bootstrap_sync): Port sh -c usage to shells that treat '--' differently. Reported by Mats Erik Andersson in . 2013-03-08 Gary V. Vaughan regex: rename remaining __attribute calls to __attribute__. 2012-02-25 changed definition of __attribute, but left some uses unchanged, preventing compilation of regex module on most non-gcc environments. * lib/regcomp.c (re_set_fastmap, seek_collating_symbol_entry) (lookup_collation_sequence_value, build_range_exp) (build_collating_symbol): Set attributes with newly renamed __attribute__ decorator. * lib/regex_internal.c (re_string_peek_byte_case) (re_node_set_compare, re_node_set_contains): Likewise. * lib/regexec.c (acquire_init_state_context): Likewise. 2013-03-06 Bruno Haible execute: Revert last change, but use a different condition. * lib/execute.c (nonintr_close, nonintr_open): Reintroduce, but only on Windows. 2013-03-05 Eric Blake execute: drop dead code * lib/execute.c (nonintr_close, nonintr_open): Delete. 2013-03-04 Paul Eggert non-recursive-gnulib-prefix-hack: port coreutils 8.21 to HP NonStop * m4/non-recursive-gnulib-prefix-hack.m4 (gl_NON_RECURSIVE_GNULIB_PREFIX_HACK): Don't mess with ALLOCA. Problem reported for HP NonStop + coreutils 8.21 by Joachim Schmitz in . 2013-03-04 Eric Blake test-getsockopt: avoid compiler warning * tests/test-getsockopt.c (includes): Ensure close is declared. 2013-03-02 Bruno Haible sys_types: Avoid autoconf warning about gl_SYS_TYPES_H. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Define through AC_DEFUN_ONCE. 2013-03-02 Bruno Haible gettext: Update to version 0.18.2. * m4/intl.m4, m4/po.m4: Update from gettext-0.18.2. In particular: 2012-12-07 Stefano Lattarini * intl.m4, po.m4: Bump requirement in AC_PREREQ to 2.60. 2013-02-25 Paul Eggert regex: merge patches from libc 2013-02-26 Siddhesh Poyarekar * lib/regex_internal.h (__attribute__): Rename from __attribute. All uses changed. (bitset_not, bitset_merge, bitset_mask, re_string_char_size_at) (re_string_wchar_at, re_string_elem_size_at): Mark function as possibly unused. 2013-02-12 Andreas Schwab [BZ #11561] * lib/regcomp.c (parse_bracket_exp) [_LIBC]: When looking up collating elements compare against the byte sequence of it, not its name. 2013-02-21 Paul Eggert putenv: port better to native Windows * lib/putenv.c [(_WIN32 || __WIN32__) && ! __CYGWIN__]: Define WIN32_LEAN_AND_MEAN and include . (_unsetenv): Use _putenv if available. (putenv): Temporarily set NAME=' ' rather than NAME='x' as that's a bit less likely to cause damage. (putenv) [(_WIN32 || __WIN32__) && ! __CYGWIN__]: Fix the wrong value with SetEnvironmentVariable. (putenv) [!HAVE__PUTENV]: Simplify and match the HAVE__PUTENV code better. 2013-02-20 Paul Eggert regex: ignore old-style-definition warnings * lib/regex.c: Add pragma to ignore these warnings. Problem reported for GNU tar by Pavel Raiskup. 2013-02-19 Paul Eggert getcwd: support coreutils better Like strtod, getcwd incorrectly referred to HAVE_RAW_DECL_GETCWD, but this might not be correct in coreutils, which disables the raw decl checks. Problem reported by Nagendra in . * lib/getcwd.c (__getcwd): Do not depend on HAVE_RAW_DECL_GETCWD. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Test the getcwd function, not any macro, since getcwd.c wants the function. * m4/getcwd.m4 (gl_FUNC_GETCWD): Don't define HAVE_MINIMALLY_WORKING_GETCWD if the code doesn't compile, as might happen if there's a macro but no function. strtod: support coreutils better * lib/strtod.c (underlying_strtod): Just invoke the underlying strtod. HAVE_RAW_DECL_STRTOD might not be correct in coreutils, which disables the raw decl checks. This assumes there is an underlying strtod, but that's a safe assumption these days. (HAVE_RAW_DECL_STRTOD): Remove; no longer used. mountlist: port to HP NonStop Reported by Joachim Schmitz in . * lib/mountlist.c (hasmntopt) [!HAVE_HASMNTOPT]: New function. (MNT_IGNORE) [MNTOPT_IGNORE]: Use it. 2013-02-18 Paul Eggert extern-inline: avoid compilation error with HP-UX cc Reported by Richard Lloyd in . * m4/extern-inline.m4 (_GL_INLINE, _GL_EXTERN_INLINE): Suppress extern inline with HP-UX cc. This should be safe, though it may hurt performance. Perhaps someone with some HP-UX experience can come up with a higher-performance fix. 2013-02-14 Paul Eggert putenv: fix heap corruption with mixed putenv/_putenv Problem reported by Michael Goffioul in . * lib/putenv.c (putenv) [HAVE__PUTENV]: Rely on _putenv to allocate the new environment. * m4/putenv.m4 (gl_PREREQ_PUTENV): New macro. * modules/putenv (configure.ac): Use it. 2013-02-11 Paul Eggert unsetenv etc.: port to Solaris 11 + GNU Emacs * lib/canonicalize-lgpl.c, lib/getaddrinfo.c, lib/getdelim.c: * lib/glob.c, lib/random_r.c, lib/setenv.c, lib/tsearch.c: * lib/unsetenv.c (_GL_ARG_NONNULL): Define before including . GNU Emacs's includes (which is not a great idea but is too painful to fix right now), and without this gnulib change was defining _GL_ARG_NONNULL incorrectly when compiling unsetenv.c on Solaris 11. Fix the problem for unsetenv.c, and fix other similar occurrences. 2013-02-09 Paul Eggert secure_getenv: fix C++ declaration typo * lib/stdlib.in.h (secure_getenv): Fix typo with return type in _GL_CXXALIAS_SYS macro. Reported by John W. Eaton in . 2013-02-08 Paul Eggert careadlinkat: stop exporting careadlinkatcwd Only Emacs used it directly, and Emacs no longer needs it. * NEWS: Document this simplification. * lib/areadlink.c (careadlinkatcwd): Move here from careadlinkat.c, and make it static. Include , for abort, and unistd.h, for readlink. * lib/careadlinkat.c (careadlinkatcwd): Move to areadlink.c. Don't include stdlib.h; no longer needed. * lib/careadlinkat.h (careadlinkatcwd): Remove decl. * lib/relocwrapper.c: Adjust comment to match new dependencies. * modules/areadlink (Depends-on): Add readlink. (Maintainer): Add self. * modules/careadlinkat (Depends-on): Remove readlink. extensions: port better to HP-UX This is merged from git Autoconf. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): On hosts that need _XOPEN_SOURCE, define it when configuring, too, so that it's compatible with the value used when compiling. openpty: fix bug where HAVE_OPENPTY is mistakenly 1 Problem reported by Mats Erik Andersson in . * m4/pty.m4 (gl_FUNC_OPENPTY): Define HAVE_OPENPTY when the openpty function exists, not merely when we intend to replace it. This corrects the 2013-01-31 patch, which mistakenly defined HAVE_OPENPTY even on hosts that lacked it. 2013-02-07 Paul Eggert secure_getenv: fix include typo * lib/secure_getenv.c: Include config.h. Somehow I forgot! secure_getenv: port better to FreeBSD and Solaris * lib/secure_getenv.c [!HAVE___SECURE_GETENV]: Include unistd.h if HAVE_ISSETUGID, otherwise define a dummy issetugid. (secure_getenv) [!HAVE___SECURE_GETENV]: Use getenv if not issetugid. This works better on BSDish platforms. * m4/secure_getenv.m4 (gl_PREREQ_SECURE_GETENV): Test for issetugid if __secure_getenv is missing. 2013-02-06 Paul Eggert extensions: port better to MINIX 3, HP-UX, autoheader 2.62 Some of these changes are merged in from git Autoconf. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): When deciding whether to define _XOPEN_SOURCE, inspect the preprocessor macro __hpux instead of the more-heavyweight operation of requiring AC_CANONICAL_HOST. Define _NETBSD_HOST on MINIX, for MINIX 3. Use USE_SYSTEM_EXTENSIONS, not __EXTENSIONS__, as the key for __EXTENSIONS__. unistd: avoid namespace pollution on non-glibc systems * lib/unistd.in.h: #define __need_getopt before including . This avoids namespace pollution on non-glibc systems, by causing gnulib unistd.h to behave more like glibc unistd.h. I also hope that this fixes a bug on FreeBSD, reported by Mats Erik Andersson in . 2013-02-04 Paul Eggert tmpdir: use secure_getenv * lib/tmpdir.c (__secure_getenv) [!LIBC]: Define to secure_getenv, not getenv. * m4/tmpdir.m4 (gt_TMPDIR): Don't check for __secure_getenv, as that's now secure_getenv's job. * modules/tmpdir (Depends-on): Add secure_getenv. tempname: use secure_getenv * lib/tempname.c (__secure_getenv) [!_LIBC]: Define to secure_getenv, not getenv. * modules/tempname (Depends-on): Add secure_getenv. secure_getenv: new module * MODULES.html.sh (Extra functions based on ANSI C 89): Add secure_getenv. * doc/glibc-functions/secure_getenv.texi: New file. * doc/gnulib.texi: Include it. * lib/secure_getenv.c, m4/secure_getenv.m4, modules/secure_getenv: New files. * lib/stdlib.in.h (secure_getenv): New decl. * m4/stdlib_h.m4 (gl_STDLIB_H, gl_STDLIB_H_DEFAULTS): * modules/stdlib (stdlib.h): Add secure_getenv checks. 2013-02-03 Paul Eggert getcwd: break fdopendir + save_cwd recursive loop (Bug#13516) Reported for OS X 10.8.2 by Assaf Gordon in . * lib/getcwd.c (HAVE_OPENAT_SUPPORT): Do not define if !HAVE_OPENAT && !HAVE_FDOPENDIR. * m4/getcwd-abort-bug.m4: Reformat to match test-getcwd.c so that they can be kept in sync more easily. Avoid PATH_MAX test on the Hurd. Sync from test-getcwd.c for errno tests after mkdir or chdir failure. * tests/test-getcwd.c (HAVE_OPENAT_SUPPORT): New macro, from lib/getcwd.c. (test_abort_bug): Do not test for the deep directory bug unless we have openat support. Avoid PATH_MAX test on the Hurd. regex-tests, regex: fix bug: memset undeclared * tests/test-regex.c: Don't include regex.h twice. Include string.h, to declare memset. Christensen's report also mentioned this issue. * m4/regex.m4 (gl_REGEX): Keep test program more in sync with test-regex.c, to avoid future problems like this. Remove AC_INCLUDES_DEFAULT. Include . Don't include twice. regex-tests: fix link errors on older Solaris These need to link with @LIBINTL@ to get libintl_gettext. Problem reported by Tom G. Christensen in . * modules/regex-tests (test_regex_LDADD): New macro. 2013-01-31 Paul Eggert regex-tests: new module * modules/regex-tests, tests/test-regex.c: New files. regex: fix off-by-one error in configure test * m4/regex.m4 (gl_REGEX): Test should return 21, not 20. 2013-01-31 Eric Blake regex: avoid infinite configure test * m4/regex.m4 (gl_REGEX): Add an alarm escape hatch. 2013-01-31 Reuben Thomas openpty: fix bug where HAVE_OPENPTY wasn't defined See the thread starting at: http://lists.gnu.org/r/bug-gnulib/2013-01/msg00185.html * m4/pty.m4 (gl_FUNC_OPENPTY): Define HAVE_OPENPTY when the openpty function exists, not merely when we intend to replace it. 2013-01-30 Paul Eggert sys_time: port to Solaris 2.6 There is a circularity problem on Solaris 2.6, where includes for struct timespec. The include nesting is gnulib , system , gnulib , system , gnulib , system , gnulib , gnulib , system , system ; the last, innermost file needs struct timestruc_t, which is defined in , which has not been fully parsed. Problem reported by Tom G. Christensen in . * lib/sys_select.in.h: Treat Solaris 2.6's problem with and like OSF/1's similar problem. * lib/sys_time.in.h: Redo to resemble sys_select.in.h, which uses split double-inclusion guards. 2013-01-29 Paul Eggert regex: test for buffer overrun * m4/regex.m4 (gl_REGEX): Add test case, by Andreas Schwab, for the just-fixed regex bug. 2013-01-29 Andreas Schwab regex: fix buffer overrun in regexp matcher [BZ #15078] * lib/regexec.c (extend_buffers): Add parameter min_len. (check_matching): Pass minimum needed length. (clean_state_log_if_needed): Likewise. (get_subexp): Likewise. 2013-01-28 Pádraig Brady mountlist: don't consider "devtmpfs" as dummy * lib/mountlist.c (ME_DUMMY_0): Remove "devtmpfs" as there is storage associcated with it. 2013-01-27 Paul Eggert futimens-tests, utimens-tests: Depend on gettext. This works around a problem introduced in my 2013-01-12 patch, which added @LIBINTL@ to these modules. * modules/futimens-tests (Depends-on): * modules/utimens-tests (Depends-on): Add gettext. 2013-01-26 Eric Blake test-getpeername: fix typo * tests/test-getpeername.c: Fix typo introduced in fd cleanup. 2013-01-20 Bernhard Voelker bootstrap: remove the need for a sorted .gitignore file * build-aux/bootstrap (insert_sorted_if_absent): Adjust and rename to insert_if_absent(), so that we don't need or generate a sorted .gitignore file. We do require a .gitignore with no existing duplicate entries and enforce that. (sort_patterns): Remove this function as we now use the simpler technigue of inserting blacklist entries at the top of the file, assuming gnulib won't be inserting !whitelist entries. 2013-01-23 Paul Eggert readlinkat: don't depend on gl_FUNC_OPENAT * m4/readlinkat.m4 (gl_FUNC_READLINKAT): Don't require gl_FUNC_OPENAT. Perhaps a similar change needs to be made for linkat.m4, mkfifoat.m4, renameat.m4, symlinkat.m4; but one thing at a time. statat: new module, split out from fstatat GNU Emacs needs the POSIX-specified fstatat, but not the gnulib-specified statat and lstat. Split the latter two into a new module 'statat'. * lib/openat.h: Depend on GNULIB_STATAT, not GNULIB_FSTATAT. * lib/openat.h, lib/statat.c (STATAT_INLINE): Rename from FSTATAT_INLINE. All uses changed. * modules/fstatat (Files): Remove lib/statat.c. (gl_MODULE_INDICATOR([fstatat])): Remove. (lib_SOURCES): Remove. (Maintainer): Add self. * modules/statat, modules/statat-tests, tests/test-statat.c: New files. * tests/test-fstatat.c (BASE): Don't define if already defined. (do_stat, do_lstat) [!TEST_STATAT]: Test fstatat instead. 2013-01-22 Paul Eggert tests: don't assume fd 99 is closed * tests/test-accept.c, tests/test-accept4.c, tests/test-bind.c: * tests/test-close.c, tests/test-connect.c, tests/test-dprintf.c: * tests/test-dup.c, tests/test-dup2.c, tests/test-faccessat.c: * tests/test-fchdir.c, tests/test-fchmod.c, tests/test-fchmodat.c: * tests/test-fchown.c, tests/test-fchownat.c, tests/test-fclose.c: * tests/test-fdatasync.c, tests/test-fdopen.c, tests/test-fdopendir.c: * tests/test-fflush.c, tests/test-fgetc.c, tests/test-fputc.c: * tests/test-fread.c, tests/test-freopen.c, tests/test-fseeko4.c: * tests/test-fstat.c, tests/test-fstatat.c, tests/test-fsync.c: * tests/test-ftello4.c, tests/test-ftruncate.c, tests/test-futimens.h: * tests/test-fwrite.c, tests/test-getpeername.c: * tests/test-getsockname.c, tests/test-getsockopt.c: * tests/test-grantpt.c, tests/test-ioctl.c, tests/test-isatty.c: * tests/test-linkat.c, tests/test-listen.c, tests/test-lseek.c: * tests/test-mkdirat.c, tests/test-mkfifoat.c, tests/test-openat.c: * tests/test-pread.c, tests/test-pwrite.c, tests/test-read.c: * tests/test-readlinkat.c, tests/test-recv.c, tests/test-recvfrom.c: * tests/test-renameat.c, tests/test-select.h, tests/test-send.c: * tests/test-sendto.c, tests/test-setsockopt.c, tests/test-shutdown.c: * tests/test-symlinkat.c, tests/test-ttyname_r.c: * tests/test-unlinkat.c, tests/test-unlockpt.c: * tests/test-utimensat.c, tests/test-vdprintf.c, tests/test-write.c: Close file descriptor 99, instead of assuming it's already closed. 2013-01-21 Paul Eggert stpncpy: port to OS X 10.8 * lib/stpncpy.c (__stpncpy): Parenthesize name when defining function. Problem reported by Assaf Gordon in . 2013-01-16 Paul Eggert unistd: port to recent mingw * lib/unistd.in.h: Remove special invocation convention for mingw, which breaks for the latest mingw version. See John W. Eaton in . largefile: port better to Mac OS X 10.5 This patch is backported from Autoconf git. * m4/largefile.m4 (AC_SYS_LARGEFILE): Use AC_DEFINE, not AH_VERBATIM, to define _DARWIN_USE_64_BIT_INODE, to avoid problems with ino_t size being different for configuration time versus build/run time. Problem reported by PHO in . 2013-01-15 Paul Eggert doc: clarify -Werror * doc/warnings.texi (warnings): -Werror is not always a bad idea; clarify that it's intended for developers, not for ordinary builds, and mention --enable-gcc-warnings as one possible use. 2013-01-15 Andoni Morales Alastruey (tiny change) stdint: fix build with Android's Bionic fox x86 * lib/stdint.in.h: fix check to test if included-fixed/sys/types.h was already included as _SSIZE_T_DEFINED_ might also be defined in include/machine/_types.h, which is included by stdio.h 2013-01-13 Paul Eggert net_if-tests: port to Solaris 7 + GCC 3.4.6 Problem reported by Tom G. Christensen in . * tests/test-net_if.c (ni): Move to next the code that uses it, so that it's declared only if needed. 2013-01-12 Paul Eggert net_if-tests: port to older Solaris Problem reported by Tom G. Christensen in . * modules/net_if-tests (NET_IF_LIB): New substitution. (test_net_if_LDADD): New makefile macro, which uses NET_IF_LIB. (HAVE_IF_NAMEINDEX): New C macro. * tests/test-net_if.c: Bypass most of the test if !HAVE_IF_NAMEINDEX. system-quote-tests: port to older Solaris Problem reported by Tom G. Christensen in . * tests/test-system-quote-child.c (fopen, fread): Undef. c-xvasprintf etc.: fix link errors on older Solaris These need to link with @LIBINTL@ to get libintl_gettext. Problem reported by Tom G. Christensen in . * modules/c-xvasprintf-tests (test_c_xvasprintf_LDADD): * modules/readtokens-tests (test_readtokens_LDADD): New macros. * modules/futimens-tests (test_futimens_LDADD): * modules/utimens-tests (test_utimens_LDADD): Add @LIBINTL@. 2013-01-10 Paul Eggert locale: port to Solaris 2.6 and 7 + GNU gettext * lib/locale.in.h: Just include_next when being invoked recursively. This prevents problems on Solaris 2.6 and 7 when combining the localename module with GNU gettext 0.18.2. Problem reported by Tom G. Christensen in . 2013-01-09 Paul Eggert stdlib: port to Solaris 2.6 Also, the code worked on Solaris 7 through 9 only by accident. Problem reported by Tom G. Christensen in . * lib/stdlib.in.h: If __need_system_stdlib_h is defined, simply include the system stdlib.h. * lib/getopt.in.h (__need_system_stdlib_h): * lib/pthread.in.h (__need_system_stdlib_h): * lib/unistd.in.h (__need_system_stdlib_h) [!__GLIBC__]: Define when including , to avoid problems at least for the pthread case on Solaris 2.6 and 7. These .h files can get by with the system stdlib.h. 2013-01-06 Paul Eggert doc: update main copyright year * doc/gnulib.texi: Update copyright date. doc: improve ISO 8601 discussion * doc/parse-datetime.texi (Combined date and time of day items): Specify more carefully what formats are supported and what is done with excess precision. 2013-01-05 Paul Eggert doc: avoid small caps * doc/parse-datetime.texi, doc/regex.texi: Don't use small caps; they're more trouble than they're worth. Suggested by Karl Berry in . regex: conform to strict C * lib/regcomp.c (parse_bracket_exp): Add cast to conform to strict C. From Aharon Robbins. gnulib-tool: fix incompatibility with autopoint 0.18.2 * gnulib-tool: Don't indent AM_GNU_GETTEXT_VERSION line. Problem reported by Tom G. Christensen in . 2013-01-04 Paul Eggert fprintftime: bring back and reword fwrite comment * lib/strftime.c (cpy) [FPRINTFTIME]: Re-add reworded comment. stdio: remove now-unnecessary stdio.c Since stdio.in.h no longer uses inline functions, we no longer need to compile the extern versions. * lib/stdio.c: Remove. * modules/stdio (Files): Remove lib/stdio.c. (lib_SOURCES): Remove. unicodeio: depend on stdio, not ignore-value * lib/unicodeio.c: Do not include ignore-value.h. (fwrite_success_callback): Use plain fwrite, not ignore_value + fwrite. * modules/unicodeio (Depends-on): Depend on stdio, not ignore-value. fprintftime: depend on stdio, not ignore-value * lib/strftime.c [FPRINTFTIME]: Do not include ignore-value.h. (cpy) [FPRINTFTIME]: Use plain fwrite, not ignore_value of fwrite, since the stdio module arranges to silence that warning now. * modules/fprintftime (Depends-on): Depend on stdio, not ignore-value. 2012-10-04 Simon Josefsson stdint-tests: Fix expanded-before-required-warning. * modules/stdint-tests (Depends-on): Use AC_REQUIRE. 2013-01-03 Paul Eggert fwrite: silence __wur only for older glibc versions * lib/stdio.in.h (fwrite): Limit workaround to glibc 2.4 through 2.15. This will help us remove this workaround some time in the far future. 2013-01-03 Eric Blake fwrite: silence __wur without using inline * lib/stdio.in.h (fwrite): Limit warn_unused_result workaround to just gcc, and in a way that avoids inline issues. * modules/stdio (Depends-on): Drop extern-inline. 2013-01-03 Jim Meyering update-copyright: avoid copyright notice date corruption Given a sequence of copyright year numbers in which the final one was a two-digit number that happened to be a substring of a preceding four-digit year number, we would mistakenly update the substring (from two- to four-digit) rather than the two-digit number at the end, which, combined with the addition of the current 4-digit year number would yield two 5-digit year numbers, e.g., here, it would convert the first "99" to "1999, 2013" rather than the final one: 1991, 99 11999, 20131, 1999 * build-aux/update-copyright: Tighten a regexp. * tests/test-update-copyright.sh: Add a test case to trigger the bug. Reported by Joseph Myers in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/32281 2013-01-01 Paul Eggert regex: omit needless signed-pointer casts * lib/regcomp.c (build_charclass, build_charclass_op): Use char *, not unsigned char *, for class name and extra. The char values are always nonnegative so there's no need to insist on unsigned char * here, and using char * removes the need for casts. Reported by Aharon Robbins in . regex: support Gawk, which never uses alloca * lib/regex_internal.h [!_LIBC && !HAVE_ALLOCA]: Do not include in this case. Gawk doesn't supply a substitute alloca.h and doesn't need one. regex: port __libc_lock_define usage to C89 * lib/regex_internal.h (__libc_lock_define) [!_LIBC]: Remove. (struct re_dfa_t): Use #ifdef instead. '__libc_lock_define (, lock)' does not conform to C89, as it has an empty macro argument. Reported by Aharon Robbins in . 2013-01-01 Eric Blake maint: update all copyright year number ranges Run "make update-copyright". version-etc: bump copyright year reported in --version * lib/version-etc.c (COPYRIGHT_YEAR): Update to 2013. 2012-12-31 Eric Blake sigprocmask-tests: skip test if pid is unexpectedly large * tests/test-sigprocmask.c (main): Add range check. git-version-gen: avoid test -z portability glitch * build-aux/git-version-gen: Prefer portable test spelling, since git-version-gen is run on more than just developer machines. 2012-12-31 Peter Rosin (tiny change) git-version-gen: add --fallback option to use if git is not present * build-aux/git-version-gen: Add support for the new option --fallback, which comes into play when there is no $tarball_version_file and git is not working. (scriptversion): Update. maint.mk: handle missing git with more grace * top/maint.mk (no-submodule-changes, public-submodule-commit): Quietly proceed if git is not present. 2012-12-31 Eric Blake dup2: work around cygwin bug * m4/dup2.m4 (gl_FUNC_DUP2): Flush out cygwin core dump. * lib/dup2.c (rpl_dup2): Work around it. * doc/posix-functions/dup2.texi (dup2): Document it. 2012-12-30 Paul Eggert regex: remove unnecessary dependency on localcharset.h * lib/regex_internal.h [!_LIBC]: Don't include localcharset.h; hasn't been needed for years. * modules/regex (Depends-on): Remove localcharset. regex: revert single-byte change * lib/regexec.c (check_node_accept_bytes): Revert previous change to this function. This was alredy fixed in a different way, at bdb56bacd57070eced9998569ffe3f3c37ef5964 in the glibc git; see and . regex: simplify based on Gawk version * lib/regex_internal.c (re_dfa_add_node): Simplify. Reported by Aharon Robbins in . 2012-12-29 Paul Eggert regex: check that pattern char is single-byte Reported by Aharon Robbins in . * lib/regexec.c (check_node_accept_bytes): Return 0 if the pattern string has a multibyte character here. regex: implement rational ranges Reported by Aharon Robbins in . * lib/regcomp.c (build_range_exp) [!_LIBC]: * lib/regexec.c (check_node_accept_bytes) [!_LIBC]: Implement rational ranges. regex: avoid redefining __wctype Reported by Aharon Robbins in . * lib/regex_internal.h (__wctype, __iswctype) [!_LIBC]: #undef before defining. regex: port to hosts where malloc (0) == NULL Reported by Aharon Robbins in . * lib/regex_internal.c (re_node_set_alloc): Don't assume that malloc (0) yields nonnull. * lib/regex_internal.h (MALLOC_0_IS_NONNULL): New macro. * m4/regex.m4 (gl_PREREQ_REGEX): Require gl_EEMALLOC. * modules/regex (Files): Add m4/eealloc.m4. regex: port to C89 Reported by Aharon Robbins in . * lib/regcomp.c (init_word_char): Declaration before statement. regex: merge glibc changes Also, copy the license wording from glibc. This simplifies merging changes. gnulib-tool will change the wording to GPL as appropriate, when importing it to other packages. The only glibc change made since the last merge, which needs merging, is: 2012-05-24 Andreas Schwab * lib/regex_internal.h (gettext): Remove use of INTUSE. * users.txt: Add Emacs. doc: omit mention of version when not needed * doc/gnulib-intro.texi (Portability and Application Code): * doc/gnulib.texi (Brief Overview, Legacy Function Substitutes): Don't mention particular dates or versions when not necessary, so that the documentation won't go out of date so quickly. * doc/intprops.texi (Integer Properties): Fix Texinfo typo. 2012-12-28 Akim Demaille bootstrap: pass --force to autoreconf. * build-aux/bootstrap (AUTORECONFFLAGS): New. Add "--force" so that Automake's ylwrap and other such tools be updated at each bootstrap invocation. Use it. 2012-12-27 Paul Eggert argp: fix port of port new 'inline' approach to Sun C 5.12 + Solaris 10 The earlier patch forgot to update one of the #if conditions, causing a problem on Debian testing i386 reported by Mats Erik Andersson . * lib/argp-fmtstream.h (__argp_fmtstream_putc, argp_fmtstream_putc) (__argp_fmtstream_puts, argp_fmtstream_puts) (__argp_fmtstream_write, argp_fmtstream_write) [!_LIBC && !__OPTIMIZE__]: Declare as ARGP_FS_EI, not as extern. * doc/gnulib-readme.texi: Minor fixups. (Portability guidelines): Modernize URLs. Remove some repetition. (Indent with spaces not TABs): Reword to avoid too-long lines. Remove some '@ifset standalone' stuff that isn't used. * doc/gnulib-readme.texi (Portability guidelines): ctype.h, not ctime.h. Correct name of POSIX.1-2001. * doc/posix-functions/fgetc.texi (fgetc): * doc/posix-functions/fgets.texi (fgets): * doc/posix-functions/fread.texi (fread): * doc/posix-functions/fscanf.texi (fscanf): * doc/posix-functions/getc.texi (getc): * doc/posix-functions/getchar.texi (getchar): * doc/posix-functions/scanf.texi (scanf): POSIX.1-2001, not POSIX-2001. doc: move README into manual * README: Move contents to new file doc/gnulib-readme.texi. Replace with a one-line summary. * doc/gnulib.texi (Brief Overview): New section, with old intro preface. Include gnulib-readme.texi for contents. (Philosophy): Rename from "Introduction", since this section no longer introduces the rest. Write a new preface. * doc/gnulib-readme.texi: New file, with the old contents of README texinfo-ized. This way, the README info appears in the online and printed manual. 2012-12-25 Ben Pfaff c-xvasprintf: Fix "implicit declaration of function" GCC warning. * lib/c-xvasprintf.c: Add missing #include "c-vasprintf.h", for c_vasprintf() prototype. 2012-12-24 Ben Pfaff c-vasprintf: Fix "empty declaration" warning reported by GCC. * lib/c-vasprintf.h: Remove stray semicolon. 2012-12-23 Paul Eggert gettext: avoid obsolete macro AM_PROG_MKDIR_P It is obsolete and is planned to be removed from Automake 1.14; see . * build-aux/po/Makefile.in.in (install-data, install-data-yes) (installdirs-data, installdirs-data-yes): Use $(MKDIR_P), not $(mkdir_p). * m4/intl.m4 (AM_INTL_SUBDIR): * m4/po.m4 (AM_PO_SUBDIRS): Require AC_PROG_MKDIR_P, not AM_PROG_MKDIR_P. 2012-12-22 Paul Eggert argp: port new 'inline' approach to Sun C 5.12 + Solaris 10 On this platform, we are not optimizing but we are using the substitute for extern inlines, so compile as if C99-style extern inline, or a substitute, is available. * lib/argp-fmtstream.h (argp_fmtstream_set_lmargin) (__argp_fmtstream_set_lmargin, argp_fmtstream_set_rmargin) (__argp_fmtstream_set_rmargin, argp_fmtstream_set_wmargin) (__argp_fmtstream_set_wmargin, argp_fmtstream_point) (__argp_fmtstream_point) [!_LIBC && !__OPTIMIZE__]: Declare as ARGP_FS_EI, not as extern. * lib/argp.h (argp_usage, __argp_usage, _option_is_short) (__option_is_short, _option_is_end, __option_is_end) [!_LIBC && __USE_EXTERN_INLINES]: Declare as ARGP_EI, not as extern. 2012-12-21 Paul Eggert AC_PROG_MKDIR_P: port workaround to pre-2.62 Autoconf * m4/gnulib-common.m4 (AC_PROG_MKDIR_P, AC_C_RESTRICT): Use m4_ifndef([AC_AUTOCONF_VERSION], ...), not m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]),[2.62]),[-1], ...), as the latter is fatal with older Autoconfs. Problem reported and fix suggested by Eric Blake in thread starting at . 2012-12-20 Paul Eggert AC_PROG_MKDIR_P: don't workaround if not buggy * m4/gnulib-common.m4 (AC_PROG_MKDIR_P): Define only for Autoconf versions before 2.62. (AC_C_RESTRICT): Use documented AC_AUTOCONF_VERSION, not undocumented m4_PACKAGE_VERSION, for consistency with the abovementioned change to AC_PROG_MKDIR_P. This should suffice since we're checking for 2.62 or later, and AC_AUTOCONF_VERSION was introduced in 2.62. 2012-12-15 Ben Pfaff New 'c-*printf' modules for formatted output in C locale. New module 'c-vasnprintf'. * modules/c-vasnprintf: New file. * lib/c-vasnprintf.c: New file. * lib/c-vasnprintf.h: New file. New module 'c-snprintf'. * modules/c-snprintf: New file. * modules/c-snprintf-tests: New file. * lib/c-snprintf.c: New file. * lib/c-snprintf.h: New file. * tests/test-c-snprintf.c: New file. * tests/test-c-snprintf.sh: New file. New module 'c-vsnprintf'. * modules/c-vsnprintf: New file. * modules/c-vsnprintf-tests: New file. * lib/c-vsnprintf.c: New file. * lib/c-vsnprintf.h: New file. * tests/test-c-vsnprintf.c: New file. * tests/test-c-vsnprintf.sh: New file. New module 'c-vasprintf'. * modules/c-vasprintf: New file. * modules/c-vasprintf-tests: New file. * lib/c-asprintf.c: New file. * lib/c-vasprintf.c: New file. * lib/c-vasprintf.h: New file. * tests/test-c-vasprintf.c +: New file. * tests/test-c-vasprintf.sh: New file. New module 'c-xvasprintf'. * modules/c-xvasprintf: New file. * modules/c-xvasprintf-tests: New file. * lib/c-xasprintf.c: New file. * lib/c-xvasprintf.c: New file. * lib/c-xvasprintf.h: New file. * tests/test-c-xvasprintf.c: New file. * tests/test-c-xvasprintf.sh: New file. 2012-12-18 Paul Eggert argp: better 'inline' Use extern-inline module to declare extern inline functions. This avoids some bogus warning diagnostics. Problem discovered when modifying GNU tar to use the manywarnings module. * lib/argp.h, lib/argp-xinl.c (ARGP_EI) [!_LIBC]: * lib/argp-fmtstream.h, lib/argp-fs-xinl.c (ARGP_FS_EI) [!_LIBC]: Define based on extern-inline. * modules/argp (Depends-on): Add extern-inline. 2012-12-17 Paul Eggert filemode, sys_stat: Handle MPX files a la AIX. * lib/filemode.c (ftypelet): Report 'm' for MPX files. * lib/sys_stat.in.h (S_ISMPX): New macro. * tests/test-sys_stat.c: Add tests for MPX files. 2012-12-16 Alexandre Duret-Lutz x-to-1: honor $PERL * build-aux/x-to-1.in: Run $HELP2MAN via $PERL so that the user gets a chance to use his preferred version of Perl. This is typically required by Darwin users whose default /usr/bin/perl does not have all the libraries required by help2man, and who need to use their MacPorts installation of Perl instead. 2012-12-16 Akim Demaille gnu-web-doc-update: add all the new files, even in new directories See http://lists.gnu.org/r/bug-gnulib/2012-12/msg00057.html * build-aux/gnu-web-doc-update (--dry-run, $dryrun): New. Use it. (main): Don't use cvsutils to get the list of unknown files, just add all the existing files and directories. 2012-12-16 Akim Demaille gnu-web-doc-update: improve --help * build-aux/gnu-web-doc-update: Move comments into --help. 2012-12-07 Eric Wong mountlist: recognize more "dummy" file systems * lib/mountlist.c (ME_DUMMY_0): Add these dummy FS names to the list: - "debugfs" virtual filesystem for kernel debugging - "devpts" PTY slave filesystem - "devtmpfs" device filesystem on top of tmpfs/ramfs - "fusectl" control filesystem for FUSE - "mqueue" enumerates POSIX message queues - "rpc_pipefs" kernel <-> userspace bridge for NFS - "sysfs" is for exporting kernel objects - "devfs" device filesystem for Linux 2.4 and FreeBSD 2012-12-11 Paul Eggert extern-inline: avoid incompatibility with Darwin Libc * m4/extern-inline.m4 (_GL_INLINE, _GL_EXTERN_INLINE): Do not use extern inline if __APPLE__. Use _GL_UNUSED in the non-inline branch. Problem reported by Akim Demaille in . 2012-12-11 Simon Josefsson gnupload: Work with GnuPG using gpg-agent (for smartcards). * build-aux/gnupload: If GnuPG is configured to use gpg-agent, let it handle password prompting. 2012-12-10 Eli Zaretskii canonicalize, canonicalize-lgpl: Microsoft Windows prefix fixes * lib/canonicalize.c (canonicalize_filename_mode): * lib/canonicalize-lgpl.c (__realpath): Recompute prefix_len after fetching the current directory. Don't overrun the beginning of rpath if there's no slashes after the MS-Windows drive letter. 2012-12-08 Stefano Lattarini maint.mk: avoid extra forks * top/maint.mk (_cfg_mk): The GNU make manual documents that "$(wildcard FILE)" expands to empty if FILE doesn't exist. So use that instead of "$(shell test -f FILE && echo FILE)". 2012-12-07 Paul Eggert vasnprintf: fix ASCII_ONLY typo * lib/unistdio/u8-vasnprintf.c (FCHAR_T_ONLY_ASCII): * lib/unistdio/u16-vasnprintf.c (FCHAR_T_ONLY_ASCII): * lib/unistdio/u32-vasnprintf.c (FCHAR_T_ONLY_ASCII): New macro, replacing ASCII_ONLY. This fixes a typo. See thread at . 2012-12-05 Paul Eggert list, oset, xlist, xoset: fix extern inline issue with C99 This was introduced by my recent changes for 'inline'. Problem reported for gettext by Daiki Ueno in . * lib/gl_list.h (gl_list_nx_create_empty, gl_list_create) (gl_list_nx_create, gl_list_size, gl_list_node_value) (gl_list_node_set_value, gl_list_node_nx_set_value, gl_list_next_node) (gl_list_previous_node, gl_list_get_at) (gl_list_nx_set_at, gl_list_search, gl_list_search_from) (gl_list_search_from_to, gl_list_indexof, gl_list_indexof_from) (gl_list_indexof_from_to, gl_list_nx_add_first, gl_list_nx_add_last) (gl_list_nx_add_before, gl_list_nx_add_after, gl_list_nx_add_at) (gl_list_remove_node, gl_list_remove_at, gl_list_remove, gl_list_free) (gl_list_iterator, gl_list_iterator_from_to, gl_list_iterator_next) (gl_list_iterator_free, gl_sortedlist_search) (gl_sortedlist_search_from_to, gl_sortedlist_indexof) (gl_sortedlist_indexof_from_to, gl_sortedlist_add, gl_sortedlist_nx_add) (gl_sortedlist_remove): * lib/gl_oset.h (go_oset_nx_create_empty, gl_oset_size, gl_oset_search) (gl_oset_search_atleast, gl_oset_nx_add, gl_oset_remove, gl_oset_free) (gl_oset_iterator, gl_oset_iterator_next, gl_oset_iterator_free): * lib/gl_xlist.h (gl_list_create_empty, gl_list_create) (gl_list_node_set_value, gl_list_set_at, gl_list_add_first) (gl_list_add_last, gl_list_add_before, gl_list_add_after) (gl_list_add_at, gl_sortedlist_add): * lib/gl_xoset.h (gl_oset_create_empty, gl_oset_add): Wrap these extern decls inside "#if 0", because they are implemented as inline functions, and extern inline is not what's wanted here. It would simplify these .h files to remove the extern decls entirely, although a downside would be less-clear separation between specification and implementation. 2012-11-29 Paul Eggert sys_stat: no 'static inline' * lib/sys_stat.in.h (rpl_mkdir): Now static, not static inline. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Do not require AC_C_INLINE. extern-inline: no 'static inline' * m4/extern-inline.m4 (gl_EXTERN_INLINE): Do not require AC_C_INLINE. (_GL_INLINE, _GL_EXTERN_INLINE): Define as 'static', not as 'static inline', for older compilers. snippet/warn-on-use: no 'static inline' * build-aux/snippet/warn-on-use.h: Remove unnecessary 'inline' in comment. rbtree-list, rbtreehash-list: no 'static inline' * lib/gl_anyrbtree_list2.h (rotate_left, rotate_right): * lib/gl_anytree_list2.h (node_at): * lib/gl_anytreehash_list1.h (hash_resize_after_add) (gl_oset_first, add_nodes_to_buckets): Now static, not static inline. regex: no 'static inline' * lib/regex_internal.c (calc_state_hash): * lib/regex_internal.h (bitset_set, bitset_clear, bitset_contain) (bitset_empty, bitset_set_all, bitset_copy, bitset_not, bitset_merge) (bitset_mask, re_string_char_size_at, re_string_wchar_at): Now static, not static inline. (inline) [__GNUC__ < 3 && _LIBC]: Remove macro; no longer needed. xvasprintf: no 'static inline' * lib/xvasprintf.c (xstrcat): Now static, not static inline. * m4/xvasprintf.m4 (gl_XVASPRINTF): Do not require AC_C_INLINE. parse-datetime, parse-duration: no 'static inline' * lib/parse-datetime.y (to_uchar): * lib/parse-duration.c (str_const_to_ul, str_const_to_l) (scale_n_add): Now static, not static inline. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): * modules/parse-duration (configure.ac): Do not require AC_C_INLINE. getaddrinfo: no 'static inline' * lib/getaddrinfo.c (validate_family): Now static, not static inline. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Do not require AC_C_INLINE. ftruncate, fts, lstat, openat, raise: no 'static inline' * lib/ftruncate.c (chsize_nothrow): * lib/fts.c (opendirat, diropen): * lib/lstat.c (orig_lstat): * lib/openat.c (orig_openat): * lib/raise.c (raise_nothrow): Now static, not static inline. * m4/ftruncate.m4 (gl_PREREQ_FTRUNCATE): * m4/fts.m4 (gl_FUNC_FTS_CORE): * m4/lstat.m4 (gl_PREREQ_LSTAT): * m4/openat.m4 (gl_PREREQ_OPENAT): * m4/raise.m4 (gl_PREREQ_RAISE): Do not require AC_C_INLINE. fflush, stat: no 'static inline' * lib/fflush.c (clear_ungetc_buffer_preserving_position) (clear_ungetc_buffer, disable_seek_optimization) (restore_seek_optimization, update_fpos_cache): * lib/stat.c (orig_stat): Now static, not static inline. * lib/fflush.c (disable_seek_optimization, restore_seek_optimization) (update_fpos_cache): Define only if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1). * m4/fflush.m4 (gl_PREREQ_FFLUSH): * m4/stat.m4 (gl_PREREQ_STAT): Do not require AC_C_INLINE. error, filevercmp: no 'static inline' * lib/error.c (is_open, flush_stdout): * lib/filevercmp.c (order): Now static, not static inline. * m4/error.m4 (gl_PREREQ_ERROR): * modules/filevercmp (configure.ac): Do not require AC_C_INLINE. dup, execute, fatal-signal, etc.: no 'static inline' * lib/dup.c (dup_nothrow): * lib/execute.c (nonintr_close, nonintr_open): * lib/fatal-signal.c (uninstall_handlers, install_handlers): * lib/fopen.c (orig_fopen): * lib/freadseek.c (freadptrinc): * lib/freopen.c (orig_freopen): * lib/fstat.c (orig_fstat, fstat_nothrow): * lib/get-rusage-as.c (get_rusage_as_via_setrlimit) (get_rusage_as_via_iterator): * lib/get-rusage-data.c (get_rusage_data_via_setrlimit): * lib/getdtablesize.c (_setmaxstdio_nothrow): * lib/isatty.c (_isatty_nothrow): * lib/open.c (orig_open): * lib/read.c (read_nothrow): * lib/sigprocmask.c (signal_nothrow): * lib/spawn-pipe.c (nonintr_close, nonintr_open): * lib/vasnprintf.c (MAX_ROOM_NEEDED): * lib/wait-process.c (unregister_slave_subprocess): * lib/write.c (write_nothrow): Now static, not static inline. * lib/spawn-pipe.c (nonintr_open): Define only if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__. * m4/dup.m4 (gl_PREREQ_DUP): * m4/execute.m4 (gl_EXECUTE): * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): * m4/fopen.m4 (gl_PREREQ_FOPEN): * m4/freadseek.m4 (gl_FUNC_FREADSEEK): * m4/freopen.m4 (gl_PREREQ_FREOPEN): * m4/fstat.m4 (gl_PREREQ_FSTAT): * m4/getdtablesize.m4 (gl_PREREQ_GETDTABLESIZE): * m4/isatty.m4 (gl_PREREQ_ISATTY): * m4/open.m4 (gl_PREREQ_OPEN): * m4/read.m4 (gl_PREREQ_READ): * m4/signalblocking.m4 (gl_PREREQ_SIGPROCMASK): * m4/spawn-pipe.m4 (gl_SPAWN_PIPE): * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): * m4/wait-process.m4 (gl_WAIT_PROCESS): * m4/write.m4 (gl_PREREQ_WRITE): * modules/get-rusage-as, modules/get-rusage-data (configure.ac): Do not require AC_C_INLINE. c-strtod, memcoll, readutmp: no 'static inline' * lib/c-strtod.c (c_locale): * lib/memcoll.c (strcoll_loop): * lib/readutmp.c (desirable_utmp_entry): Now static, not static inline. * m4/c-strtod.m4 (gl_C_STRTOD, gl_C_STRTOLD): * m4/memcoll.m4 (gl_MEMCOLL): * m4/readutmp.m4 (gl_READUTMP): Do not require AC_C_INLINE. arctwo, md4, md5, sha1, sha256, sha512: no 'static inline' * lib/arctwo.c (to_uchar): * lib/md4.c (set_uint32): * lib/md5.c (set_uint32): * lib/sha1.c (set_uint32): * lib/sha256.c (set_uint32): * lib/sha512.c (set_uint64): Now static, not static inline. This is a bit simpler, and doesn't affect performance with GCC and default optimization. * m4/arctwo.m4 (gl_ARCTWO): * m4/md4.m4 (gl_MD4): * m4/md5.m4 (gl_MD5): * m4/sha1.m4 (gl_SHA1): * m4/sha256.m4 (gl_SHA256): * m4/sha512.m4 (gl_SHA512): Do not require AC_C_INLINE. cond, lock, thread: better 'inline' * lib/glthread/cond.c, lib/glthread/cond.h (_GLTHREAD_COND_INLINE): * lib/glthread/thread.c, lib/glthread/thread.h (_GLTHREAD_THREAD_INLINE): New macros. Use them instead of static inline, for header functions. * lib/glthread/cond.c (gl_waitqueue_init, gl_waitqueue_remove) (gl_waitqueue_notify_first, gl_waitqueue_notify_all): * lib/glthread/lock.c (gl_waitqueue_init) (gl_waitqueue_notify_first, gl_waitqueue_notify_all): * lib/glthread/thread.c (get_current_thread_handle): Change 'static inline' to 'inline'. * lib/glthread/cond.h, lib/glthread/thread.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/cond.m4 (gl_COND): * m4/lock.m4 (gl_PREREQ_LOCK): * m4/thread.m4 (gl_THREAD): Do not require AC_C_INLINE. * modules/cond, modules/thread (Depends-on): Add extern-inline. chdir-long, cycle-check, savewd: better 'inline' * lib/chdir-long.c (cdb_init, cdb_fchdir, cdb_free) (find_non_slash): * lib/cycle-check.c (is_zero_or_power_of_two): * lib/savewd.c (savewd_delegating): Change 'static inline' to 'inline'. * lib/savewd.c, lib/savewd.h (SAVEWD_INLINE): New macro. Replace all remaining uses of 'static inline' with it. * lib/savewd.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/chdir-long.m4 (gl_PREREQ_CHDIR_LONG): * m4/cycle-check.m4 (gl_CYCLE_CHECK): * m4/savewd.m4 (gl_SAVEWD): Do not require AC_C_INLINE. * modules/savewd (Depends-on): Add extern-inline. base32, base64: no need for 'inline' * lib/base32.c (to_uchar, get_8, decode_8): * lib/base64.c (to_uchar, get_4, decode_4): Change 'static inline' to 'inline'. * m4/base32.m4 (gl_PREREQ_BASE32): * m4/base64.m4 (gl_PREREQ_BASE64): Do not require AC_C_INLINE. array-oset, linkedhash-list, rbtree-oset: no need for 'inline' * lib/gl_array_oset.c (gl_array_nx_add_at): (gl_array_remove_at): * lib/gl_linkedhash_list.c (hash_resize_after_add) (add_to_bucket, remove_from_bucket): * lib/gl_rbtree_oset.c (rotate_left, rotate_right): Change 'static inline' to 'static', as it's simpler to omit 'inline' unless there's a significant performance advantage. list, oset, xlist, xoset, xsublist: simplify via extern inline * lib/gl_list.h, lib/gl_list.c (GL_LIST_INLINE): * lib/gl_oset.c, lib/gl_oset.h (GL_OSET_INLINE): * lib/gl_xlist.c, lib/gl_xlist.h (GL_XLIST_INLINE): * lib/gl_xoset.c, lib/gl_xoset.h (GL_XOSET_INLINE): * lib/gl_xsublist.c, lib/gl_xsublist.h (GL_XSUBLIST_INLINE): New macro. Replace all uses of 'static inline' with it. [HAVE_INLINE]: Implement functions as *_INLINE functions, instead of as macros FOO that are defined to static inline functions FOO_inline. * lib/gl_list.c, lib/gl_oset.c, lib/gl_xlist.c, lib/gl_xoset.c: * lib/gl_xsublist.c: Reimplement from scratch, by defining the corresponding *_INLINE macro and including the corresponding .h file. This is simpler. * modules/list, modules/oset, modules/xlist, modules/xoset: (Files): Remove m4/gl_list.m4. (configure.ac): Remove gl_LIST. * m4/gl_list.m4: Remove. * modules/list, modules/oset, modules/xlist, modules/xoset: * modules/xsublist: (Depends-on): Depend on extern-inline, not inline. xalloc: better 'inline' * lib/xmalloc.c, lib/xalloc.h (XALLOC_INLINE): New macro. Replace all uses of 'static inline' with it. (static_inline): Remove. * lib/xalloc.h (xnmalloc, xnrealloc, x2nrealloc, xcharalloc): Let 'extern inline' do the work automatically, instead of doing it by hand. * m4/xalloc.m4 (gl_PREREQ_XALLOC, gl_PREREQ_XMALLOC): Remove. All uses removed. * modules/xalloc (Depends-on): Remove 'inline'. Add 'extern-inline'. gethrxtime: better 'inline' * lib/xtime.c: New file. * lib/gethrxtime.c, lib/gethrxtime.h (GETHRXTIME_INLINE): * lib/xtime.h (XTIME_INCLUDE): New macros. Replace all uses of 'static inline' with them. * lib/gethrxtime.c (gethrxtime): Define only if ! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME), since this source file is now always compiled, because of the extern inline. * lib/gethrxtime.h, lib/xtime.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/gethrxtime.m4 (gl_GETHRXTIME): Do not check for clock macros if gethrtime works, as they're not needed in that case. (gl_XTIME): Do not require AC_C_INLINE. (gl_PREREQ_GETHRXTIME): Remove; all uses removed, as it's always compiled now. Move the check into gl_GETHRXTIME. * modules/gethrxtime (Files, lib_SOURCES): Add lib/xtime.c. (Depends-on): Add extern-inline. (configure.ac): gethrxtime is always compiled now. (lib_SOURCES): Add gethrxtime.c. wctype-h: better 'inline' * lib/wctype-h.c: New file. * lib/wctype.in.h (_GL_WCTYPE_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/wctype_h.m4 (gl_WCTYPE_H): Do not require AC_C_INLINE. * modules/wctype-h (Files, lib_SOURCES): Add lib/wctype-h.c. (Depends-on): Add extern-inline. unistd: better 'inline' * lib/unistd.c: New file. * lib/unistd.in.h (_GL_UNISTD_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/unistd_h.m4 (gl_UNISTD_H): Do not require AC_C_INLINE. * modules/unistd (Files, lib_SOURCES): Add lib/unistd.c. (Depends-on): Add extern-inline. sys_socket: better 'inline' * lib/sys_socket.c: New file. * lib/sys_socket.in.h (_GL_SYS_SOCKET_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Do not require AC_C_INLINE. * modules/sys_socket (Files, lib_SOURCES): Add lib/sys_socket.c. (Depends-on): Add extern-inline. stdio: better 'inline' * lib/stdio.c: New file. * lib/stdio.in.h (_GL_STDIO_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/stdio_h.m4 (gl_STDIO_H): Do not require AC_C_INLINE. * modules/stdio (Files, lib_SOURCES): Add lib/stdio.c. (Depends-on): Add extern-inline. sigaction: better 'inline' * lib/sig-handler.c: New file. * lib/sig-handler.h (SIG_HANDLER_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/sigaction.m4 (gl_PREREQ_SIG_HANDLER_H): Do not require AC_C_INLINE. * modules/sigaction (Files, lib_SOURCES): Add lib/sig-handler.c. (Depends-on): Add extern-inline. selinux-h: better 'inline' * lib/se-context.c, lib/se-selinux.c: New files. * lib/getfilecon.c (map_to_failure): Omit 'inline' for static function. * lib/se-context.in.h (SE_CONTEXT_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * lib/se-selinux.in.h (SE_SELINUX_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * modules/selinux-h (Files, lib_SOURCES): Add lib/se-context.c, lib/se-selinux.c. (Depends-on): Add extern-inline. (configure.ac): Do not require AC_C_INLINE. pthread: better 'inline' * lib/pthread.c: New file. * lib/pthread.in.h (_GL_PTHREAD_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/pthread.m4 (gl_PTHREAD_CHECK): Add AC_LIBOBJ([pthread]). Do not require AC_C_INLINE. * modules/pthread (Files): Add lib/pthread.c. (Depends-on): Add extern-inline. math: better 'inline' * lib/math.c: New file. * lib/math.in.h (_GL_MATH_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/math_h.m4 (gl_MATH_H): Do not require AC_C_INLINE. * modules/math (Files, lib_SOURCES): Add lib/math.c. (Depends-on): Add extern-inline. count-one-bits: better 'inline' * lib/count-one-bits.c: New file. * lib/count-one-bits.h (COUNT_ONE_BITS_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/count-one-bits.m4 (gl_COUNT_ONE_BITS): Do not require AC_C_INLINE. * modules/count-one-bits (Files, lib_SOURCES): Add lib/count-one-bits.c. (Depends-on): Add extern-inline. count-leading-zeros: better 'inline' * lib/count-leading-zeros.c: New file. * lib/count-leading-zeros.h (COUNT_LEADING_ZEROS_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/count-leading-zeros.m4 (gl_COUNT_LEADING_ZEROS): Do not require AC_C_INLINE. * modules/count-leading-zeros (Files, lib_SOURCES): Add lib/count-leading-zeros.c. (Depends-on): Add extern-inline. bitrotate: better 'inline' * lib/bitrotate.c: New file. * lib/bitrotate.h (BITROTATE_INLINE): New macros. Replace all uses of 'static inline' with them. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * modules/bitrotate (Files, lib_SOURCES): Add lib/bitrotate.c. (Depends-on): Add extern-inline. (configure.ac): Do not require AC_C_INLINE. 2012-11-20 Theophile Ranquet maint.mk: avoid gratuitous failure Reported by Stefano Lattarini in * top/maint.mk (public-submodule-commit): Quote more safely. 2012-11-20 Eli Zaretskii canonicalize, canonicalize-lgpl: support MS-Windows file names See for test cases, which it'd be nice to add at some point. * lib/canonicalize.c, lib/canonicalize-lgpl.c: Include dosname.h. * lib/canonicalize.c (canonicalize_filename_mode): * lib/canonicalize-lgpl.c (__realpath): Use FILE_SYSTEM_PREFIX_LEN instead of assuming that the first slash is at the beginning of the file name. Use ISSLASH, instead of a literal '/'. Use IS_ABSOLUTE_FILE_NAME instead of comparing the first character with '/'. Test for DOUBLE_SLASH_IS_DISTINCT_ROOT only if the file name does not begin with a drive letter. * lib/canonicalize.c (SLASHES): New macro. (canonicalize_filename_mode): Use SLASHES instead of a literal "/". 2012-11-17 Dmitry V. Levin fts: introduce FTS_VERBATIM * lib/fts_.h (FTS_VERBATIM): New bit flag. (FTS_OPTIONMASK, FTS_NAMEONLY, FTS_STOP): Adjust. * lib/fts.c (fts_open): Honor it. 2012-11-09 Pádraig Brady getlogin-tests: allow errno == ENXIO * tests/test-getlogin.c (main): Skip tests if getlogin fails with errno == ENXIO (No controlling tty). getlogin_r-tests: Likewise. Also allow errno == ENOENT * tests/test-getlogin_r.c (main): Skip tests if getlogin_r fails with errno == ENOENT. This was reported to happen in various situations on GNU/Linux. 2012-11-09 Paul Eggert getlogin-tests: allow errno == ENOENT * tests/test-getlogin.c (main): Skip tests if getlogin fails with errno == ENOENT. This happened to me on Ubuntu 12.04.1 x86, when running a test in an Emacs shell buffer. 2012-11-08 Jim Meyering tests/nap.h: avoid warning about unused variable * tests/nap.h (nap_works): Remove now-unused declaration of "result". prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition * build-aux/prefix-gnulib-mk (prefix): Tighten a regexp to require white space before each of the special-cased file names, to avoid adding "lib/" after $(libdir)/. Reported by Matias A. fonzo in http://bugs.gnu.org/12830. 2012-11-08 Paul Eggert fcntl-h: default O_SEARCH, O_EXEC back to O_RDONLY O_PATH doesn't work with Linux kernel 3.6.5, as fchmod (fd, ...) fails with errno == EBADF when fd is opened with O_PATH. Reported by Jim Meyering in . * doc/posix-headers/fcntl.texi (fcntl.h): Document this. * lib/fcntl.in.h (O_EXEC, O_SEARCH) [O_PATH]: Default back to O_RDONLY. 2012-11-07 Paul Eggert test-utimens: speed up by taking shorter naps * tests/nap.h (lt_mtime, get_mtime, nap_works, guess_delay): New functions. (nap): Use them, to do a better job of guessing the delay. On Fedora 17 with ext4 atop md atop hard disks, this made test-utimens run 10x faster, because the test napped for 1 ms at a time rather than 20 ms. Reported by Stefano Lattarini in . 2012-11-07 Jim Meyering mountlist.c: fix a compilation failure * lib/mountlist.c (read_file_system_list): Fix a compilation failure I introduced while transforming commit v0.0-7683-g613bcb6 2012-11-05 Paul Eggert errno: port to LynxOS 178 2.2.2 Problem reported by Joel Brobecker in . * doc/posix-headers/errno.texi (errno.h): Document this. * lib/errno.in.h (EILSEQ, GNULIB_defined_EILSEQ) [!EILSEQ]: New macros. * lib/strerror-override.c, lib/strerror-override.h (strerror_override): Supply a string for EILSEQ. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Check for EILSEQ. 2012-11-05 Paul Eggert fcntl-h: default O_SEARCH, O_EXEC to O_PATH if available Linux kernel 2.6.39 introduced O_PATH (see ) and this is a better fallback for O_SEARCH and O_EXEC than O_RDONLY, if O_PATH is available. * doc/posix-headers/fcntl.texi (fcntl.h): Document this. * lib/fcntl.in.h (O_EXEC, O_SEARCH) [O_PATH]: Default to O_PATH. * lib/fcntl.in.h (O_ACCMODE): * tests/test-fcntl-h.c (main): Do not reject O_ACCMODE merely because it has more than the minimal number of bits, as POSIX allows extensions here. 2012-11-04 Andrew Warshall (tiny change) mountlist: do not classify a bind-mounted dir entry as "dummy" * lib/mountlist.c (ME_DUMMY_0): Rename from ME_DUMMY, but omit the "none"-testing clause. (ME_DUMMY) [MOUNTED_GETMNTENT1]: New macro to encapsulate the exception for bind-mounted directories. 2012-11-01 Akim Demaille quote: provide a means to escape strings with nul characters * lib/quote.h, lib/quotearg.c (quote_mem, quote_n_mem): New functions. (quote, quote_n): Rename formal arguments for consistency with quotearg. 2012-10-30 Paul Eggert test-raise: don't assume 199 is an invalid signal * tests/test-raise.c (main): Don't assume 199 is not a signal number. sh-quote-tests: port to Solaris 9 * modules/sh-quote-tests (test_sh_quote_LDADD): Add @LIBINTL@. Problem reported by Dagobert Michelsen in . 2012-10-28 Jim Meyering maint.mk: rename a new configurable variable * top/maint.mk (_gl_translatable_string_re): Rename from translation-markers: _gl_ prefix to insulate from user Makefile code, and the _re suffix to inform that it's a regular expression. 2012-10-26 Eric Blake maint.mk: let packages tweak sc_po_check pattern * top/maint.mk (sc_po_check): Add translation-markers, to allow finding files with other translation markers. 2012-10-16 Paul Eggert euidaccess: speed up 'configure' on GNU hosts * m4/euidaccess.m4 (gl_FUNC_NONREENTRANT_EUIDACCESS): Check for setregid here, not in gl_PREREQ_EUIDACCESS, since it's needed only in this case. Use AC_CHECK_DECLS, not AC_CHECK_DECLS_ONCE. (gl_PREREQ_EUIDACCESS): Do not use AC_CHECK_HEADERS_ONCE libgen.h or AC_REQUIRE for AC_FUNC_GETGROUPS. * lib/regexec.c (re_search_internal): Fix grammar in comment. 2012-10-15 Paul Eggert fchmodat, fchownat, fstatat: port to non-inlining compilers Problem reported for FreeBSD 9 by Jim Meyering in . * lib/chmodat.c, lib/chownat.c, lib/statat.c: New files, which define FCHMODAT_INLINE etc. * lib/fchmodat.c (FCHMODAT_INLINE): * lib/fchownat.c (FCHOWNAT_INLINE): * lib/fstatat.c (FSTATAT_INLINE): Remove, as chmodat.c etc. now do this. * modules/fchmodat (Files): Add lib/chmodat.c. * modules/fchownat (Files): Add lib/chownat.c. * modules/fstatat (Files): Add lib/statat.c. 2012-10-15 Jim Meyering fchmodat.c, fchownat.c: compile-impeding typos * lib/fchmodat.c (FCHMODAT_INLINE): Fix typo: s/#include/#define/ * lib/fchownat.c (FCHOWNAT_INLINE): Likewise. Introduced in commit v0.0-7636-gd202279. 2012-10-15 Paul Eggert fcntl-h: support GNU flags like O_IGNORE_CTTY * doc/posix-headers/fcntl.texi (fcntl.h): Support O_IGNORE_CTTY, O_NOLINK, and O_NOTRANS. These flags are nonzero on GNU/Hurd systems. Discovered when using fcntl-h with GNU Emacs, which uses O_IGNORE_CTTY. Fix misspelling of F_SETLKW. * lib/fcntl.in.h (O_IGNORE_CTTY, O_NOLINK, O_NOTRANS): Define to 0 if not already defined. * tests/test-fcntl-h.c: Test these new flags. 2012-10-14 Paul Eggert faccessat, etc.: support AT_FDCWD-only use * lib/at-func.c: If GNULIB_SUPPORT_ONLY_AT_FDCWD, then support this function only if its first argument is AT_FDCWD. Emacs wants faccessat for AT_EACCESS but not for any first-arg values other than AT_FDCWD, so it doesn't want all the openat machinery with fchdir etc. * modules/faccessat, modules/fchmodat, modules/fchownat (Files): * modules/fstatat, modules/mkdirat, modules/openat (Files): * modules/unlinkat (Files): Remove lib/openat-priv.h, as at-internal supplies this file. Removing this file here allows us to support programs like Emacs that avoid at-internal. faccessat: speed up 'configure' on mainstream hosts * m4/faccessat.m4 (gl_PREREQ_FACCESSAT): Use AT_CHECK_FUNCS for 'access', not AC_CHECK_FUNCS_ONCE, since it's only on unusual platforms that we need to check for 'access', and it's better not to slow 'configure' down on all platforms. faccessat: port to Solaris 10 * lib/faccessat.c: Include , for AT_EACCESS. Needed on Solaris 10, which doesn't have AT_EACCESS, so we need the Gnulib fcntl.h, which defines it. 2012-10-14 Pádraig Brady canonicalize: fix C89 compilation * lib/canonicalize.c (canonicalize_filename_mode): Swap order of declarations so C89 is supported. Also remove the comment referencing memorty allocation as the suggested feature could not be implemented as suggested. Reported by Michael Goffioul. 2012-10-12 Paul Eggert group-member: omit unnecessary dependencies This is for Emacs, which has its own allocator and where we don't want to use xalloc. * lib/group-member.c: Include xalloc-oversized.h, not xalloc.h, since we no longer use xmalloc. Do not include stdbool.h, since the changes below happen to remove the only use of bool. (GROUPBUF_SIZE): New constant. (struct group_info): Remove n_groups member. Add groupbuf member. This lets us get the groups without using malloc, usually. (free_group_info, get_group_info): Adjust to this. (get_group_info): Return the number of groups found, or -1 on error. Use plain malloc not xmalloc, and treat its failure as if there are no groups, as the user already loses in case of error. (group_member): Simplify, based on changes to get_group_info. * modules/group-member (Depends-on): Remove dependencies on xalloc and stdbool. Add dependency on xalloc-oversized. 2012-10-08 Alexandre Duret-Lutz (tiny change) gethrxtime: port to C++ * lib/gethrxtime.h, lib/xtime.h [__cplusplus]: Add extern "C". 2012-10-04 Paul Eggert ptsname: fix macro-name typo * lib/stdlib.in.h (ptsname): Fix misspelling of GNULIB_NAMESPACE. 2012-10-03 Simon Josefsson inttostr: Relax license. * modules/inttostr (License): Change from LGPL to LGPLv2+. 2012-10-03 Eric Blake ptsname_r: support ptys returned by FreeBSD posix_openpt * lib/ptsname_r.c (__ptsname_r): Don't munge name if it already lives in /dev/pts/. 2012-10-02 Eric Blake pselect: reject invalid file descriptors * m4/pselect.m4 (gl_FUNC_PSELECT): Probe for FreeBSD bug. * lib/pselect.c (rpl_pselect) [!win32]: Work around it. * modules/pselect (Depends-on): Add dup2. * doc/posix-functions/pselect.texi (pselect): Document this. select: reject invalid file descriptors * m4/select.m4 (gl_FUNC_SELECT): Probe for FreeBSD bug. * lib/select.c (rpl_select) [!win32]: Work around it. * modules/select (Depends-on): Add dup2. * doc/posix-functions/select.texi (select): Document this. select: enhance test * tests/test-select.h (do_select_bad_nfd_nowait, test_bad_nfd): New functions. (test_function): Enhance test. (do_select_bad_fd): Avoid any stale errno values. ptsname: reject invalid file descriptors http://www.austingroupbugs.net/view.php?id=503 * m4/ptsname.m4 (gl_FUNC_PTSNAME): Probe for FreeBSD bug. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Add new witness. * modules/stdlib (Makefile.am): Replace witness. * lib/stdlib.in.h (ptsname): Allow for replacement. * modules/ptsname (configure.ac): Trigger replacement. * doc/posix-functions/ptsname.texi (ptsname): Document this. 2012-10-02: Nikos Mavrogiannopoulos (tiny change) hash-pjw-bare: new module * lib/hash-pjw-bare.c: New file, very much like hash-pjw.c. * lib/hash-pjw-bare.h: Likewise. * modules/hash-pjw-bare: New file. * MODULES.html.sh (Misc): Add it. 2012-10-02 Eric Blake manywarnings: cater to more gcc infelicities * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add test for -Wuninitialized without -O. 2012-10-01 Ed Maste (tiny change) select, poll tests: Make setsockopt invocation effective. * tests/test-poll.c (open_server_socket): Move setsockopt() call before the bind() call. * tests/test-select.h (open_server_socket): Likewise. 2012-09-30 Paul Eggert sockets, sys_stat: restore AC_C_INLINE This undoes the 2012-09-22 patch. * m4/sockets.m4 (gl_SOCKETS): * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Restore AC_C_INLINE, since MSVC requires __inline or _inline and does not support plain 'inline'. Reported by Bruno Haible in . 2012-09-30 Bruno Haible localeconv tests: Avoid test failure on OpenIndiana. * tests/test-localeconv.c (main): On OpenIndiana (a Solaris 11 variant) skip the 'grouping' and 'mon_grouping' tests. Reported by Jim Meyering. 2012-09-30 Bruno Haible havelib: Follow libtool developments. * m4/lib-ld.m4: Rebase on libtool.m4 from libtool-2.4. Suggested by Simon Josefsson. 2012-09-29 Jim Meyering fstatat.c: fix a compile-impeding typo * lib/fstatat.c (FSTATAT_INLINE): Fix typo: s/#include/#define/ Introduced in commit v0.0-7636-gd202279. Mats Erik Andersson reported the resulting OpenBSD compilation failure. 2012-09-28 Akim Demaille extern-inline: provide a -Wundef safe config.h * m4/extern-inline.m4 (gl_EXTERN_INLINE): Protect "#if __GNUC_STDC_INLINE__" with "defined __GNUC_STDC_INLINE__" to produce a -Wundef warning free config.h. 2012-09-26 Paul Eggert hash-pjw: relax license to LGPLv2+ * modules/hash-pjw (License): Relax, with consent of author. 2012-09-25 Akim Demaille maint.mk: fix strict vs. lazy variable issues with RELEASE * top/maint.mk (_equal): New function. (member_check): Strip the result to avoid spurious spaces. (url_dir_list): Do not use ifeq, which is strict, as it will require RELEASE_TYPE to be defined. (announcement_Cc_, announcement_mail_headers_): Likewise: instead of relying on ifeq, use $(release_type) to dispatch (lazily) onto... (announcement_Cc_alpha,announcement_mail_headers_alpha) (announcement_Cc_beta,announcement_mail_headers_beta) (announcement_Cc_stable,announcement_mail_headers_stable): these. (release): Do not depend on $(release-type), as it forces its evaluation. Bounce to it. 2012-09-25 Akim Demaille maint.mk: formatting changes * top/maint.mk: Indent bodies of if's. 2012-09-21 Akim Demaille maint.mk: factor the validation of RELEASE_TYPE With help from Jim Meyering. http://lists.gnu.org/r/bug-gnulib/2012-09/msg00132.html * top/maint.mk (_empty, _sp): Move their definition earlier. (member-check, release-type): New. Use the latter instead of $(RELEASE_TYPE). Remove now useless local checks. 2012-09-20 Akim Demaille maint.mk: provide "make upload" to ease uploading See . Do not depend simply on the current $(VERSION), as there may have been new commits since the tarball generation. Rather, rely on $(RELEASE), as "make release-commit" already does. For consistency, add "make release RELEASE='X.Y TYPE'" as an alias for "make TYPE". * top/maint.mk (upload_command, upload, release): New. (RELEASE_TYPE): If undefined, default to the second word of $(RELEASE). (VERSION): first word of $(RELEASE) is always right. (emit_upload_commands): Adjust. * top/README-release: Update. 2012-09-20 Akim Demaille maint.mk: silent rules With help from Stefano Lattarini. * top/maint.mk (writable-files): Use $(AM_V_GEN). (announcement): Use $(AM_V_at). 2012-09-24 Paul Eggert localename: port gl_locale_name_thread_unsafe to FreeBSD * lib/localename.c (gl_locale_name_thread_unsafe): Port to FreeBSD, and use the simpler FreeBSD implementation on Mac OS X as well. Original idea suggested by Ed Maste in . 2012-09-22 Paul Eggert binary-io, eealloc, mbfile, mbiter, mbutil, xsize: better 'inline' * lib/binary-io.c, lib/eealloc.c, lib/mbfile.c, lib/mbiter.c: * lib/mbuiter.c, lib/xsize.c: New files. * lib/binary-io.h (BINARY_IO_INLINE): * lib/eealloc.h (EEALLOC_INLINE): * lib/mbfile.h (MBFILE_INLINE): * lib/mbiter.h (MBITER_INLINE): * lib/mbuiter.h (MBUITER_INLINE): * lib/xsize.h (XSIZE_INLINE): New macros. Replace all uses of 'static inline' with them. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/eealloc.m4 (gl_EEALLOC): * m4/mbfile.m4 (gl_MBFILE): * m4/mbiter.m4 (gl_MBITER): * m4/xsize.m4 (gl_XSIZE): Do not require AC_C_INLINE. * modules/binary-io (Files, lib_SOURCES): Add lib/binary-io.c * modules/eealloc (Files, lib_SOURCES): Add lib/eealloc.c. * modules/mbfile (Files, lib_SOURCES): Add lib/mbfile.c. * modules/mbiter (Files, lib_SOURCES): Add lib/mbiter.c. * modules/mbuiter (Files, lib_SOURCES): Add lib/mbuiter.c. * modules/xsize (Files, lib_SOURCES): Add lib/xsize.c. * modules/binary-io, modules/eealloc, modules/mbfile: * modules/mbiter, modules/mbuiter: (Depends-on): Add extern-inline. pipe-filter-gi, pipe-filter-ii: better use of 'inline' * lib/pipe-filter-aux.c: New file. * lib/pipe-filter-aux.h (PIPE_FILTER_AUX_INLINE): New macro. Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * lib/pipe-filter-gi.c (filter_init, filter_cleanup) (filter_retcode): No real need for inline here. * modules/pipe-filter-gi, modules/pipe-filter-ii: (Files): Add lib/pipe-filter-aux.c. (Depends-on): Add extern-inline. (configure.ac): Do not require AC_C_INLINE. (lib_SOURCES): Add pipe-filter-aux.c. fdutimensat: omit unnecessary AC_C_INLINE * modules/fdutimensat (configure.ac): Remove AC_C_INLINE. fchmodat, fchownat, fstatat: use extern-inline * lib/fchmodat.c, lib/openat.h (FCHMODAT_INLINE): * lib/fchownat.c, lib/openat.h (FCHOWNAT_INLINE): * lib/fstatat.c, lib/openat.h (FSTATAT_INLINE): New macros. * lib/openat.h: Replace all uses of 'static inline' with them. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * modules/fchmodat, modules/fchownat, modules/fstatat: * modules/openat-h: (Depends-on): Add extern-inline. (configure.ac): Remove AC_C_INLINE. acl, mbchar, priv-set: use extern-inline * lib/set-mode-acl.c, lib/acl-internal.h (ACL_INTERNAL_INLINE): * lib/mbchar.c, lib/mbchar.h (MBCHAR_INLINE): * lib/priv-set.c, lib/priv-set.h (PRIV_SET_INLINE): New macros. * lib/acl-internal.h, lib/mbchar.h, lib/priv-set.h: Replace all uses of 'static inline' with it. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/acl.m4 (gl_FUNC_ACL): * m4/mbchar.m4 (gl_MBCHAR): * m4/priv-set.m4 (gl_PRIV_SET): Remove AC_C_INLINE, since 'inline' is no longer used directly. * modules/acl, modules/mbchar, modules/priv-set (Depends-on): Add extern-inline. sockets, sys_stat: remove AC_C_INLINE in MSVC-only cases * m4/sockets.m4 (gl_SOCKETS): * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Remove AC_C_INLINE. Here, 'inline' is used only in MSVC environments where it's already guaranteed to work, so we needn't check for it at 'configure'-time. tls-tests: omit unnecessary 'inline' * tests/test-tls.c (perhaps_yield): No longer inline. Simplicity and portability trump efficiency in test cases. utimens-tests: avoid unnecessary 'inline' * modules/fdutimensat-tests (configure.ac): * modules/futimens-tests (configure.ac): * modules/utimens-tests (configure.ac): * modules/utimensat-tests (configure.ac): Remove AC_C_INLINE. * tests/test-utimens-common.h (ctime_compare): No longer inline. Simplicity and portability trump efficiency here. misc: don't limit commentary to inline functions * lib/binary-io.h, lib/malloca.h, lib/safe-alloc.c: * lib/xalloc-oversized.h, lib/xsize.h: Contrast macros to functions in general, not just to inline functions, when the commentary does not apply only to inline functions. 2012-09-20 Jim Meyering non-recursive-gnulib-prefix-hack: new module * build-aux/prefix-gnulib-mk: Copied from coreutils, derived from the file that originated in Bison. * m4/non-recursive-gnulib-prefix-hack.m4: Likewise, this code is largely copied from a snippet that resided in bison's configure.ac. * modules/non-recursive-gnulib-prefix-hack: New file. * MODULES.html.sh (Support for maintaining and releasing projects): Add it. 2012-09-18 Jim Meyering maint.mk: generalize _gl_tight_scope for non-recursive make * top/maint.mk (_gl_tight_scope): Remove a hard-coded assumption that *.h would describe additional .h files in the directory specified by $(_gl_TS_dir). I.e., add this... (_gl_TS_other_headers): New variable. maint.mk: exempt trailing blanks found in "binary" files * top/maint.mk (sc_trailing_blank): Filter out any matches found in "binary" files, as reported by grep. Suggested by Richard W.M. Jones in http://thread.gmane.org/gmane.comp.emulators.guestfs/1902 2012-09-17 Jim Meyering maint.mk: sc_prohibit_path_max_allocation: don't FP for UNIX_PATH_MAX * top/maint.mk (sc_prohibit_path_max_allocation): Avoid false-positive match for symbols like UNIX_PATH_MAX. Reported by Richard W.M. Jones in http://thread.gmane.org/gmane.comp.emulators.guestfs/1902 2012-09-17 Jim Meyering maint.mk: teach sc_prohibit_magic_number_exit to accept 77 * top/maint.mk (sc_prohibit_magic_number_exit): Do not complain about uses like "exit (77)". "77" is automake's "skip this test" exit code. It is not in the same category as "exit (0)" or "exit (1)", and besides, I know of no symbolic name for that 77. Reported by Richard W.M. Jones in http://thread.gmane.org/gmane.comp.emulators.guestfs/1902 2012-09-17 Jim Meyering maint.mk: relax sc_prohibit_strcmp, to avoid a false positive * top/maint.mk (sc_prohibit_strcmp): Relax regexp, so as to match all uses of #define, not just those that start in column 1. Richard W.M. Jones reported a false positive in http://thread.gmane.org/gmane.comp.emulators.guestfs/1902 2012-09-16 Paul Eggert localcharset: work around Mac OS X bug with UTF-8 and MB_CUR_MAX * lib/localcharset.c (locale_charset) [DARWIN7]: Return "ASCII" if the system reports "UTF-8" and MB_CUR_MAX <= 1, as these two values are incompatible. Problem reported by Max Horn. For more discussion, please see . doc: document sticky-EOF issue * doc/posix-functions/fgetc.texi (fgetc): * doc/posix-functions/fgets.texi (fgets): * doc/posix-functions/fread.texi (fread): * doc/posix-functions/fscanf.texi (fscanf): * doc/posix-functions/getc.texi (getc): * doc/posix-functions/getchar.texi (getchar): * doc/posix-functions/scanf.texi (scanf): Mention that glibc and default Solaris do not conform to C99 and POSIX-2001 or later, with respect to how getchar etc. behave when feof reports nonzero. 2012-09-13 Joachim Schmitz (tiny change) poll: fix poll(0, NULL, msec) * lib/poll.c: don't exit early if NULL is the 1st arg to poll(), but nfd is 0. In that case poll should behave like select. 2012-09-13 Joachim Schmitz (tiny change) Paolo Bonzini poll: fix for systems that can't recv() on a non-socket * lib/poll.c: if recv returns ENOTSOCK, assume the descriptor is readable. In this case POLLHUP will not be supported. * doc/posix-functions/poll.texi: Document this. 2012-09-13 Paolo Bonzini poll/select: document portability problems not fixed by Gnulib. * doc/posix-functions/poll.texi: poll does not work well on pipes under Windows. It has the same limitations as select on BeOS. * doc/posix-functions/select.texi: select does not work well on pipes under Windows. 2012-09-10 Paul Eggert fcntl-h: check for AIX 7.1 bug with O_NOFOLLOW and O_CREAT * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Check for AIX 7.1 bug that caused a GNU tar test failure. Problem reported by Jez Wain; see . 2012-09-06 Eric Blake net_if: give more details about the bug being fixed * doc/posix-headers/net_if.texi: Add clarification. 2012-09-05 Eric Blake net_if: new module * modules/net_if: New module, borrowing ideas from netinet_in. * m4/net_if_h.m4: New file. * lib/net_if.in.h: Likewise. * doc/posix-headers/net_if.texi (net/if.h): Document it. * MODULES.html.sh (lacking POSIX:2008): Likewise. * tests/test-net_if.c: Make function checks conditional. Reported by Jasper Lievisse Adriaanse . 2012-09-05 Mats Erik Andersson (tiny change) readutmp: fix non-portable UT_PID use * lib/readutmp.c (desirable_utmp_entry) : Use `UT_PID (u) > 0' as absolute condition. 2012-09-04 Jim Meyering fts: reduce two or more trailing spaces to just one, usually * lib/fts.c (fts_open): Upon initialization, if a name ends in two or more slashes, trim all but the final one. But if a name consists solely of two slashes, don't modify it. If it consists solely of three or more slashes, strip all but one. This is part of the solution to a minor problem with rm: it would print a bogus ELOOP diagnostic when failing to remove the slash-decorated name of a symlink-to-directory: $ mkdir d && ln -s d s && env rm -r s/ rm: cannot remove 's': Too many levels of symbolic links With the change below and a trivial don't-trim-trailing-slashes adjustment to remove.c, it does this: $ env rm -r s/ rm: cannot remove 's/': Not a directory Improved by: Eric Blake fts: when there is no risk of overlap, use memcpy, not memmove * lib/fts.c (fts_alloc): Fix unjustified memcopy: s/memmove/memcpy/ 2012-08-29 Paul Eggert stdbool: be more compatible with mixed C/C++ compiles * lib/stdbool.in.h (_Bool, true, false) [__cplusplus]: Define to bool, true, false, respectively, as GCC's builtin stdbool.h does. Problem reported by Michael Goffioul in . 2012-08-28 Jim Meyering revert last change: it was not needed * tests/test-vc-list-files-git.sh: There's already a test for a working git, just below. 2012-08-28 Jim Meyering tests: test-vc-list-files-git.sh: skip if git is not available * tests/test-vc-list-files-git.sh: Skip this test when git is not available. 2012-08-26 Bruno Haible gnulib-tool: Remove no-op option --no-changelog. * gnulib-tool (func_usage): Don't mention --no-changelog. (do_changelog): Remove variable. Reported by Dmitriy Selyutin . 2012-08-24 Paul Eggert doc: remove fdl-1.2.texi It is no longer used or maintained, and its use of @acronym is problematic. See the thread containing . * config/srclist.txt: Remove doc/old-licenses/fdl-1.2.texi. * doc/old-licenses/fdl-1.2.texi: Remove. execinfo: port to FreeBSD * m4/execinfo.m4 (gl_EXECINFO_H): Set LIB_EXECINFO to -lexecinfo if needed, as in FreeBSD. Reported by Bastien Roucariès in . * modules/execinfo (Link): Add $(LIB_EXECINFO). 2012-08-23 Jim Meyering xstrtol.h: avoid "_Noreturn is not at beginning of declaration" warning * lib/xstrtol.h: Put "_Noreturn" before "void" in declaration, to placate gcc's -Wold-style-declaration. 2012-08-24 Paul Eggert doc: do not use @acronym * doc/inet_ntoa.texi (inet_ntoa): * doc/parse-datetime.texi (Seconds since the Epoch) (Specifying time zone rules): * doc/posix-functions/inet_ntoa.texi (inet_ntoa): Don't use @acronym. Problem reported by John Darlington in . 2012-08-23 Paul Eggert stdnoreturn: port to newer GCCs * m4/stdnoreturn.m4 (gl_STDNORETURN_H): Avoid problems with bleeding-edge GCC that complains about 'int _Noreturn foo (void);'. Problem reported by Jim Meyering in . Also, rename the 'test' function to a void a clash with the already-supplied 'main' function; this fixes a bug that incorrectly rejected GCC 4.7.1's . * doc/posix-headers/stdnoreturn.texi (stdnoreturn.h): Document GCC problem. 2012-08-22 Reuben Thomas pipe-filter: fix comment typo * lib/pipe-filter.h: Mention correct function. 2012-08-22 Paul Eggert execinfo: new module This is for Emacs. Currently, it provides a no-effect stub on all platforms where it does not already work. It already works on glibc-based systems, and on Solaris 11. * lib/execinfo.c, lib/execinfo.in.h, m4/execinfo.m4, modules/execinfo: New files. * doc/glibc-headers/execinfo.texi (execinfo.h): * MODULES.html.sh (Misc): Document it. 2012-08-20 Paul Eggert extern-inline: support old GCC 'inline' * m4/extern-inline.m4 (gl_EXTERN_INLINE): Use pre-C99 GCC 'inline' if available. This applies to GCC versions 2.7 through 4.2, or when newer GCC is using -fgnu89-inline. The goal is to address some of the performance issues mentioned by Bruno Haible in . 2012-08-20 Eric Blake maint.mk: avoid redundant file name in message * top/maint.mk (sc_prohibit_strcmp, sc_unmarked_diagnostics) (sc_prohibit_defined_have_decl_tests, sc_const_long_option) (sc_makefile_path_separator_check): Remove bogus $(ME). 2012-08-20 Mike Frysinger timer-time: fix link order when static linking on glibc * m4/timer_time.m4 (LIB_TIMER_TIME): Add -lpthread _after_ -lrt so that it's significant. 2012-08-19 Paul Eggert timespec: omit unnecessary AC_C_INLINE * m4/timespec.m4 (gl_TIMESPEC): Do not require AC_C_INLINE. stat-time: omit unnecessary AC_C_INLINE * m4/stat-time.m4 (gl_STAT_TIME, gl_STAT_BIRTHTIME): Do not require AC_C_INLINE. ignore-value: omit unnecessary AC_C_INLINE * modules/ignore-value (configure.ac): Do not require AC_C_INLINE. sys_select: avoid 'static inline' * lib/sys_select.in.h (rpl_fd_isset): Now static, not static inline. mktime: avoid 'static inline' * lib/mktime.c (leapyear, ydhms_diff): Now static, not static inline. * m4/mktime.m4 (gl_PREREQ_MKTIME): Do not require AC_C_INLINE. 2012-08-19 Bruno Haible gnulib-tool: Improve coding style. * gnulib-tool (func_emit_tests_Makefile_am): Set perhapsLT, like in func_emit_lib_Makefile_am. Reported and fix suggested by Dmitriy Selyutin . 2012-08-19 Bruno Haible gnulib-tool: Fix indentation. * gnulib-tool (func_import): Fix indentation. 2012-08-19 Bruno Haible gnulib-tool: Remove old file names from .cvsignore, .gitignore. * gnulib-tool (func_update_ignorelist): Don't use 'join -v 1' command on the list of removed files. 2012-08-17 Paul Eggert test-parse-datetime: avoid glibc leap-second glitch * tests/test-parse-datetime.c (main): Set TZ to US Eastern time with the 2012 rules. Problem reported by Bruce Dubbs in . 2012-08-14 Bruno Haible gnulib-tool: Fix indentation of generated gnulib-comp.m4 file. * gnulib-tool (func_emit_autoconf_snippet): Initialize indentation from argument. Reported and fix suggested by Dmitriy Selyutin . 2012-08-14 Eric Blake ldexp: relax license * modules/ldexp (License): Trivial relax, since the module only provides a permissively licensed m4 file. 2012-08-13 Bruno Haible gnulib-tool: Fix persistence of --witness-c-macro option. * gnulib-tool (func_import): Fix typo in emit of gl_WITNESS_C_MACRO. Reported by Dmitriy Selyutin . 2012-08-11 Eric Blake count-leading-zeros: use a lookup table on non-gcc compilers * lib/count-leading-zeros.h (count_leading_zeros_32): Use an alternate implementation, suggested by Jim Meyering. 2012-08-10 Eric Blake count-leading-zeros: new module * modules/count-leading-zeros: New module. * m4/count-leading-zeros.m4: New file. * lib/count-leading-zeros.h: Likewise. * modules/count-leading-zeros-tests: New test. * tests/test-count-leading-zeros.c: New file. * MODULES.html.sh (Integer arithmetic functions): Document it. 2012-08-07 Simon Josefsson Jim Meyering maintainer-makefile: Fix syntax error with dash. * top/maint.mk (sc_vulnerable_makefile_CVE-2009-4029): Quote arguments. (sc_vulnerable_makefile_CVE-2012-3386): Likewise. 2012-08-05 Jim Meyering extern-inline: also ignore -Wmissing-declarations * m4/extern-inline.m4: Also ignore -Wmissing-declarations, required with gcc-4.8.0-to-be. maint.mk: sc_prohibit_magic_number_exit: avoid new false positives * top/maint.mk (sc_prohibit_magic_number_exit): Also filter out matches for /error ?([^,]*)/. This avoids false-positives for strings like "Unknown error (252)", introduced via commit v0.0-7538-g92875a6. 2012-08-02 Stefano Lattarini gnumakefile: better interaction with Automake-NG * modules/gnumakefile [Makefile.am]: The makefiles generated by Automake-NG always contain a definition of VPATH, even in non-VPATH builds (its value being simply '.' in that case). So, in the 'clean-GNUmakefile' rule, to determine whether running under a VPATH setup, compare '$(srcdir)' to '.' rather than checking whether '$(VPATH)' expands to the empty string. 2012-08-02 Carlo de Falco (tiny change) base64: Use extern C scope in header file, for C++. * lib/base64.h: Add C++ namespace protection. 2012-08-02 Paul Eggert stat-time, timespec, u64: support naive out-of-dir builds * lib/stat-time.c, lib/timespec.c, lib/u64.c: Use '#include "foo.h"', not '#include ', when including one's own interface. This works better when configuring with out-of-directory builds, since packages need not add an otherwise-unnecessary -I$(topdir_src)/lib to DEFAULT_INCLUDES. 2012-08-01 Paul Eggert utimens: use extern-inline * lib/utimens.c (_GL_UTIMENS_INLINE): Define when including utimens.h. * lib/utimens.h: Add copyright notice, since this is now large enough to copyright. Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (_GL_UTIMENS_INLINE): New macro. Use it instead of 'static inline'. * modules/utimens (Depends-on): Add extern-inline. u64: use extern-inline * lib/u64.c: New file. * lib/u64.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (_GL_U64_INLINE): New macro. Use it instead of 'static inline'. * modules/u64 (Files): Add lib/u64.c. (Depends-on): Add extern-inline. (configure.ac): No need to require AC_C_INLINE, since extern-inline does that now. (lib_SOURCES): Add u64.c. timespec: use extern-inline * lib/timespec.c: New file. * lib/timespec.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (_GL_TIMESPEC_INLINE): New macro. Use it instead of 'static inline'. * modules/timespec (Files): Add lib/timespec.c. (Depends-on): Add extern-inline. (lib_SOURCES): Add timespec.c. stat-time: use extern-inline * lib/stat-time.c: New file. * lib/stat-time.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (_GL_STAT_TIME_INLINE): New macro. Use it instead of 'static inline'. * modules/stat-time (Files): Add lib/stat-time.c. (Depends-on): Add extern-inline. (lib_SOURCES): Add stat-time.c. extern-inline: new module * modules/extern-inline, m4/extern-inline.m4: New files. This is for better support of 'extern inline' a la ISO C99, with a portable alternative on compilers that do not support C99-style 'extern inline'. Using 'extern inline' shrinks the size of the Emacs executable, when compiled with debugging disabled, which is a typical way that Emacs is built while developing. 2012-08-01 Akim Demaille maint.mk: a "release-commit" wrapper to do-release-commit-and-tag * build-aux/do-release-commit-and-tag: Move variable definitions together. ($branch): Instead of defaulting to "master", default to the current branch (as gnu-web-doc-update does). (help): Display the current values of the option arguments. * top/maint.mk (release-commit): New. * top/README-release: Simplify the corresponding step. 2012-07-30 Eric Blake passfd: fix comment on recvfd * lib/passfd.c (recvfd): Fix comment. Reported by Jann Horn . 2012-07-30 Jim Meyering maint.mk: avoid a sub-shell * top/maint.mk (release-prep): Remove unneeded sub-shell. 2012-07-30 Akim Demaille maint.mk: use silent-rules support from Automake * top/maint.mk (news-check, vc-diff-check, announcement) (no-submodule-changes, alpha beta stable, release-prep) (web-manual, update-copyright): Use $(AM_V_GEN) and $(AM_V_at). 2012-07-30 Akim Demaille maint.mk: provide a web-manual-update target * top/maint.mk: here. * top/README-release: Use it to simplify the web manual update step. 2012-07-30 Akim Demaille README-release: shorten the circuit to post a news * top/README-release: Point directly to the news submission form. 2012-07-30 Akim Demaille gnu-web-doc-update: fix --help * build-aux/gnu-web-doc-update: The information "top level" was written twice. 2012-07-30 Akim Demaille maint.mk: absolute VPATH issue * top/maint.mk (release-prep): Help Git find .git/. From Jim Meyering. 2012-07-29 Akim Demaille gitlog-to-changelog: fix previous change * build-aux/gitlog-to-changelog: Fix condition. Add missing ";". 2012-07-29 Akim Demaille gitlog-to-changelog: don't expect .git to be in $srcdir Reported by Bruno Haible. * build-aux/gitlog-to-changelog (&git_dir_option): New. Use it. 2012-07-29 Akim Demaille maint.mk: absolute VPATH build fix * top/maint.mk (gpg_key_ID): Help git find .git when, for instance, $(srcdir) is not a parent of $(builddir). 2012-07-28 John Darrington clean-temp: Fix memory leak. * lib/clean-temp.c (cleanup_temp_dir): Free also the 'subdirs' and 'files' members of tmpdir. 2012-07-27 Jim Meyering maint.mk: new rule: refresh-gnulib-patches I noticed that 8 of coreutils' 9 gl/**/*.diff files were stale. Use this rule to refresh them. * top/maint.mk (refresh-gnulib-patches): New rule. 2012-07-24 Bruno Haible gnulib-tool: Fix handling of inctests variable. * gnulib-tool: Canonicalize $inctests also in 'update' mode. Reported by Nick Bowler . 2012-07-22 Bruno Haible getpass: Assume AC_CHECK_DECLS_ONCE invocation, like in getpass.m4. * lib/getpass.h: Assume HAVE_DECL_GETPASS is defined. * cfg.mk (exclude_file_name_regexp--sc_prohibit_defined_have_decl_tests): Remove exemption for getpass.h. Suggested by Eric Blake. 2012-07-20 Eric Blake verify: document conflict with -Wnested-externs * lib/verify.h: Give hint about usage when gcc warnings are enabled. maint.mk: forbid exit(-1) * top/maint.mk (sc_prohibit_magic_number_exit): Detect negatives. 2012-07-20 Paul Eggert fsusage: port back to Solaris * lib/fsusage.c (get_fs_usage): Fix busted logic causing compile-time error (fsd not declared) on Solaris 10. Reported privately by Andrew Borodin. 2012-07-19 Akim Demaille gnu-web-doc-update: fix error messages * build-aux/gnu-web-doc-update: Don't pass $ME to die. gnu-web-doc-update: check the requirements. * build-aux/gnu-web-doc-update (find_tool): Import from bootstrap. ($CVS, $CVSU, $GIT, $RSYNC, $XARGS): New. * build-aux/bootstrap (find_tool): Comment change. 2012-07-17 Akim Demaille maint.mk: minor simplication. * top/maint.mk (_sc_excl): Use $(or...) instead of $(if...) for default values. 2012-07-15 Akim Demaille gitlog-to-changelog: VPATH build issues If builddir is not a subdirectory of srcdir, running git from it will fail. * build-aux/gitlog-to-changelog (--srcdir): New option. 2012-07-15 Bruno Haible fpending: Assume AC_CHECK_DECLS_ONCE invocation, like in fpending.m4. * lib/fpending.h: Assume HAVE_DECL___FPENDING is defined. * cfg.mk (exclude_file_name_regexp--sc_prohibit_defined_have_decl_tests) Remove exemption for fpending.h. Suggested by Eric Blake. 2012-07-15 Paul Eggert pthread_sigmask: fix bug on FreeBSD 9 * lib/pthread_sigmask.c [PTHREAD_SIGMASK_INEFFECTIVE]: Include string.h. (pthread_sigmask) [PTHREAD_SIGMASK_INEFFECTIVE]: When calling pthread_sigmask (1729, NEW, OLD), specify non-null NEW; this avoids a bug on FreeBSD 9, where pthread_sigmask is effective but pthread_sigmask (1729, NULL, NULL) returns zero. See . Avoid the need to call pthread_sigmask (1729, ...) in most cases, by inspecting whether the main call changed the old mask. 2012-07-15 Reuben Thomas README-release: make it more legible * top/README-release: Improve typography slightly. 2012-07-15 Jim Meyering maint: require that each sc_... command start with "@" * Makefile (sc_prohibit_sc_omitted_at): New rule so that "make sc_maint" helps us avoid this nit. 2012-07-15 Jim Meyering maint.mk: add leading "@" to quiet new "make syntax-check" rule * top/maint.mk (sc_prohibit_defined_have_decl_tests): Add "@". 2012-07-13 Eric Blake maint.mk: new syntax check for HAVE_DECL checks * top/maint.mk (sc_prohibit_defined_have_decl_tests): New rule. * cfg.mk (exclude_file_name_regexp--sc_prohibit_defined_have_decl_tests): Exempt some false positives. Based on a report by Karel Zak. argp: make HAVE_DECL usage consistent * lib/argp-parse.c (__argp_parse): Check contents of HAVE_DECL macros, not whether they are defined. * m4/argp.m4 (gl_ARGP): Always define HAVE_DECL_* macros, per convention with other declaration checks. Reported by Karel Zak, with suggestions from Paul Eggert. stat-time: relax license to LGPLv2+ * modules/stat-time (License): Relax, with consent of all authors. strndup: fix m4 usage error * m4/strndup.m4 (gl_FUNC_STRNDUP): HAVE_DECL_STRNDUP is always defined, to either 0 or 1. Reported by Karel Zak. 2012-07-11 Jim Meyering maint: enable the sc_avoid_if_before_free syntax-check rule * cfg.mk (local-checks-to-skip): Enable sc_avoid_if_before_free. (if_before_free_offenders_): Define. (if_before_free_basename_re_): Define. Exempt current files with useless if-before-free. 2012-07-11 Paul Eggert gettext: do not assume '#define ... defined ...' behavior * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Do not use '#define FOO ... defined BAR ...', as the C standard says it's not portable to expect that this works after macro expansion. Problem reported for gzip by Steven M. Schweda in . 2012-07-10 Paul Eggert getloadavg: clean out old Emacs and Autoconf cruft See Glenn Morris in . * lib/getloadavg.c: Include , always. Include if HAVE_SYS_PARAM_H, not if unix or __unix. (LDAV_CVT): Remove no-longer-used LOAD_AVE_CVT hook. * m4/getloadavg.m4 (gl_PREREQ_GETLOADAVG): Check for . 2012-07-10 Akim Demaille bootstrap: let warn be like tests/init.sh's warn_ Reported by Jim Meyering. * build-aux/bootstrap (warn): Remove, replaced by... (warnf_, warn_): these. Adjust callers. Shorten messages that no longer fit in 80 columns. 2012-07-09 Bruno Haible getopt: Simplify after Emacs changed. * m4/getopt.m4 (gl_FUNC_GETOPT_POSIX): Inline gl_GETOPT_IFELSE. (gl_GETOPT_IFELSE): Remove macro. 2012-07-09 Jim Meyering maint.mk: add sc_vulnerable_makefile_CVE-2012-3386 * top/maint.mk (sc_vulnerable_makefile_CVE-2012-3386): New rule. maint.mk: _sc_search_regexp, sc_vulnerable_makefile_CVE-2009-4029: fix Bugs in both of those conspired to make the sc_vulnerable_makefile_CVE-2009-4029 rule 99% useless. _sc_search_regexp's handling of non-empty $in_files would filter out any offending file names. sc_vulnerable_makefile_CVE-2009-4029's choice of in_files value meant there would be no match in most projects, due to the presence of two or more Makefile.in files. * top/maint.mk (_sc_search_regexp) [in_vc_files,in_files]: Clarify. Fix a bug in how a non-empty $$in_files was processed: (sc_vulnerable_makefile_CVE-2009-4029): Fix erroneous use of in_files: in spite of the name, it's a regexp, not a list of file names. 2012-07-09 Paul Eggert getloadavg, getopt: fix commentary re configure.in Autoconf is deprecating the name 'configure.in', so change it to to the new name 'configure.ac' in a couple of places. * lib/getloadavg.c: configure.in -> configure.ac, in comment. * m4/getopt.m4 (gl_GETOPT_IFELSE, gl_GETOPT_SUBSTITUTE_HEADER) (gl_PREREQ_GETOPT): Remove obsolete commentary re Emacs configure.in. Emacs has renamed it to configure.ac, and it no longer refers to these macros anyway. timespec: mark functions with const attributes * lib/timespec.h (timespec_add, timespec_sub, dtotimespec): Mark with _GL_ATTRIBUTE_CONST. 2012-07-07 Ludovic Courtès canonicalize[-lgpl]: handle "guessing" values when cross-building * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE) (gl_CANONICALIZE_LGPL): Check whether $gl_cv_func_realpath_works matches "*yes" instead of just "yes". Regression introduced in commit e0bcf6626cde8dad4bfbdc4045c744f0cd8b9e24. 2012-07-07 Ludovic Courtès Bruno Haible canonicalize: make the right guess when cross-compiling to GNU * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Match also "gnu*" to determine whether cross-compiling to glibc systems, so as to include GNU/Hurd. 2012-07-06 Paul Eggert timespec-sub: avoid duplicate include * lib/timespec-sub.c: Do not include twice. Reported by Juanma Barranquero. 2012-07-06 Akim Demaille bootstrap: use a more consistent error reporting scheme * build-aux/bootstrap (warn, die): New. Use them. 2012-07-05 Paul Eggert sys_time: allow too-wide tv_sec * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Allow struct timeval even if tv_sec is wider than time_t. This allows OpenBSD 5.1 amd64 and fixes an Emacs porting glitch with utimens.c, as without this patch gnulib replaces struct timeval and OpenBSD futimes therefore has a type mismatch. * doc/posix-headers/sys_time.texi: Mention this. pthread: check for both pthread_create and pthread_join * m4/pthread.m4 (gl_PTHREAD_CHECK): Revert previous change, but alter the check so that it tests for both pthread_create and pthread_join. This should be more portable to hosts like OSF/1 5.1. Suggested by Bruno Haible and Richard Yao in . parse-datetime: doc tuneup * doc/parse-datetime.texi: Index "leap seconds" and fix minor spacing issues. 2012-07-05 Akim Demaille do-release-commit-and-tag: fix the previous commit * build-aux/do-release-commit-and-tag: Actually the test was right, but the comment and the error message were misleading. Fix comment, and improve error message. Perform check first, so that NEWS is not modified uselessly. do-release-commit-and-tag: fix typo * build-aux/do-release-commit-and-tag: Be sure that NEWS does _not_ start with a stub. 2012-07-04 Paul Eggert pthread: check for pthread_create, not pthread_join * m4/pthread.m4 (gl_PTHREAD_CHECK): Check for pthread_create, not pthread_join. On FreeBSD 9, pthread_create is in libpthread but pthread_join in libc. I hope this removes the need for all the OSF/1 5.1 pthread_join business. Reported by Richard Yao in . 2012-07-04 Jim Meyering parse-datetime: fix failure to diagnose invalid input date -d "$(printf '\xb0')" would print 00:00:00 with today's date rather than diagnosing the invalid input. Now it reports this: date: invalid date '\260' * lib/parse-datetime.y (to_uchar): Define. (yylex): Don't sign-extend "other" bytes. * m4/parse-datetime.m4: Require AC_C_INLINE for first use of "inline". Thanks to Bruno Haible for the patch to this file. * tests/test-parse-datetime.c (main): Add a test to trigger the bug. Peter Evans reported the bug in GNU date: http://bugs.gnu.org/11843 2012-07-03 Jim Meyering bootstrap: do not require now-removed build-aux/missing Now that build-aux/missing is, er, missing, bootstrap would silently fail. * build-aux/bootstrap (gnulib_extra_files): Remove $build_aux/missing from the list, now that (since commit v0.0-7489-gd0f486f) the file is no longer part of gnulib. Diagnose the failure. 2012-07-03 Paul Eggert alloca: add support for HP NonStop TNS/E native * lib/alloca.in.h (alloca): Support the new host. From a suggestion by Joachim Schmitz in . 2012-07-02 Pádraig Brady fsusage: remove code not needed on non GNU/Linux systems. * lib/fsusage.c [STAT_STATVFS || STAT_STATVFS64]: Don't include headers no longer needed in this case. * lib/fsusage.c [STAT_STATVFS && ! (__linux__ && (__GLIBC__||__UCLIBC__))]: Undefine STAT_STATFS2_FRSIZE to exclude code not used in this case. 2012-07-02 Paul Eggert fsusage: include files needed for glibc 2.6 fallback * lib/fsusage.c [STAT_STATVFS || STAT_STATVFS64]: Include , , as they are needed for the 2.6 < glibc/Linux < 2.6.36 fallback. Problem reported by Ludovic Courtès in . fsusage: avoid needless check on GNU/Linux * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Omit STAT_STATFS3_OSF1 check on GNU/Linux systems, since it can't possibly work. 2012-07-01 Bruno Haible log: Fix an autoconf >= 2.64 warning. * modules/log (configure.ac): Require, not invoke, gl_FUNC_LOG. Reported by Carlos O'Donell . 2012-06-28 Bruno Haible log10f: Fix possible configuration problem. * m4/log10f.m4 (gl_FUNC_LOG10F): Augment LIBS by $LOG10F_LIBM, not $LOGF_LIBM. Reported by Carlos O'Donell . 2012-06-28 Bruno Haible remove: No longer override on all platforms. Fixes bug from 2010-03-20. * m4/remove.m4 (gl_FUNC_REMOVE): Test gl_cv_func_unlink_honors_slashes, not gl_cv_func_unlink_works. Reported by Carlos O'Donell . 2012-06-27 Eric Blake config: drop scripts that automake says are not independent * config/srclist.txt: Drop elisp-comp, missing, and ylwrap. * build-aux/elisp-comp: Delete. * build-aux/missing: Likewise. * build-aux/ylwrap: Likewise. * modules/elisp-comp: Likewise. * MODULES.html.sh: Drop mention of elisp-comp. * NEWS: Mention this. 2012-06-26 Paul Eggert root-uid: new module This is for portability to Tandem's NonStop Kernel. * lib/root-uid.h, modules/root-uid: New files. * lib/euidaccess.c, lib/pt_chown.c, lib/unlinkdir.c: * lib/write-any-file.c, tests/test-sethostname2.c: Include "root-uid.h". * lib/euidaccess.c (euidaccess): * lib/pt_chown.c (main): * lib/unlinkdir.c (cannot_unlink_dir): * lib/write-any-file.c (can_write_any_file): * m4/mknod.m4 (gl_FUNC_MKNOD): * tests/test-sethostname2.c (geteuid, main): Don't assume ROOT_UID == 0. * modules/euidaccess (Depends-on): * modules/pt_chown (Depends-on): * modules/sethostname-tests (Depends-on): * modules/unlinkdir (Depends-on): * modules/write-any-file (Depends-on): Add root-uid. regex: use locale-independent comparison for codeset name See Bruno Haible's comment in . * lib/regcomp.c (init_dfa): Use just ASCII case comparison for codeset name. * lib/regex_internal.h: Do not include , since we no longer use strcasecmp. * modules/regex (Depends-on): Remove strcase. 2012-06-23 Bruno Haible getopt-posix: No longer guarantee that option processing is resettable. * doc/posix-functions/getopt.texi: Drop description of problem with internal state. Fix info about mingw and msvc9. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Don't require a resettable option processing by getopt(). Run three test programs instead of one. Simplify cross-compilation guess. * NEWS: Mention the change. Reported by Rich Felker . 2012-06-26 Bruno Haible argp, regex: Ensure strcasecmp gets declared. * lib/argp-help.c: Include . * lib/regex_internal.h: Likewise. Reported and suggested by Joachim Schmitz . 2012-06-24 Bruno Haible ptsname_r: Make it consistent with ptsname on AIX. * lib/ptsname_r.c (__ptsname_r): For AIX, use nearly the same implementation as for OSF/1. * tests/test-ptsname_r.c (main) [AIX]: Use the modern way of opening a pty master. ptsname_r: Make it consistent with ptsname on OSF/1. * lib/ptsname_r.c (__ptsname_r): Add a different implementation for OSF/1. 2012-06-24 Bruno Haible ttyname_r: Fix result on OSF/1, Solaris. * lib/ttyname_r.c (ttyname_r): Produce a NUL-terminated result. 2012-06-24 Bruno Haible ptsname_r: Add support for Solaris. * lib/ptsname_r.c (__ptsname_r): Add a different implementation for Solaris. ptsname_r: Fix test failure on native Windows. * modules/ptsname_r (Depends-on): Add isatty. ptsname_r: Fix test failures on IRIX, Solaris. * m4/ptsname_r.m4 (gl_PREREQ_PTSNAME_R): Test whether isatty sets errno when it fails. Define ISATTY_FAILS_WITHOUT_SETTING_ERRNO accordingly. * lib/ptsname_r.c: Include . (__ptsname_r): When isatty returned false, then on IRIX, Solaris set errno if fd is invalid. * tests/test-isatty.c (main): Update comments. 2012-06-24 Bruno Haible ptsname test: Extend test. * tests/test-ptsname.c: Include . (main): Test behaviour with invalid file descriptor. 2012-06-23 Paul Eggert time: fix obsolete comment * m4/time_h.m4 (gl_CHECK_TYPE_STRUCT_TIMESPEC): Remove obsolete reference to HAVE_STRUCT_TIMESPEC in comment. 2012-06-23 Bruno Haible getopt-gnu: Handle suboptimal getopt_long's abbreviation handling. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): If getopt_long exists but does not handle abbreviated long options with equivalent disambiguations, set gl_replace_getopt to yes. * doc/posix-functions/getopt.texi: Mention the OpenBSD 5.0 problem. 2012-06-22 Paul Eggert time_r: fix typo that always overrode localtime_r decl * m4/time_r.m4 (gl_TIME_R): Use AC_CHECK_DECLS, not AC_CHECK_DECLS_ONCE, since localtime_r is declared in , not in a standard include. 2012-06-22 Bruno Haible Write "Mac OS X" instead of "MacOS X". * README: Write "Mac OS X" instead of "MacOS X". * build-aux/bootstrap: Likewise. * build-aux/install-reloc: Likewise. * lib/acl-internal.h: Likewise. * lib/acl_entries.c: Likewise. * lib/argp-ba.c: Likewise. * lib/argp-pv.c: Likewise. * lib/config.charset: Likewise. * lib/copy-acl.c: Likewise. * lib/csharpexec.c: Likewise. * lib/euidaccess.c: Likewise. * lib/fbufmode.c: Likewise. * lib/fflush.c: Likewise. * lib/file-has-acl.c: Likewise. * lib/filemode.h: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fsusage.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. * lib/get-rusage-as.c: Likewise. * lib/get-rusage-data.c: Likewise. * lib/getdomainname.c: Likewise. * lib/idpriv-drop.c: Likewise. * lib/idpriv-droptemp.c: Likewise. * lib/localcharset.c: Likewise. * lib/locale.in.h: Likewise. * lib/localename.c: Likewise. * lib/mbsrtowcs-state.c: Likewise. * lib/nproc.c: Likewise. * lib/passfd.c: Likewise. * lib/posix_openpt.c: Likewise. * lib/printf-parse.c: Likewise. * lib/progreloc.c: Likewise. * lib/safe-read.h: Likewise. * lib/safe-write.h: Likewise. * lib/sched.in.h: Likewise. * lib/set-mode-acl.c: Likewise. * lib/signal.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio-impl.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/strtod.c: Likewise. * lib/sys_select.in.h: Likewise. * lib/tcgetsid.c: Likewise. * lib/unistd.in.h: Likewise. * lib/unlockpt.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/vma-iter.c: Likewise. * lib/wcsrtombs-state.c: Likewise. * m4/acl.m4: Likewise. * m4/acosl.m4: Likewise. * m4/asinl.m4: Likewise. * m4/atanl.m4: Likewise. * m4/c-stack.m4: Likewise. * m4/cosl.m4: Likewise. * m4/expl.m4: Likewise. * m4/extensions.m4: Likewise. * m4/fdatasync.m4: Likewise. * m4/fmal.m4: Likewise. * m4/frexp.m4: Likewise. * m4/frexpf.m4: Likewise. * m4/frexpl.m4: Likewise. * m4/fsusage.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/getloadavg.m4: Likewise. * m4/getopt.m4: Likewise. * m4/gettext.m4: Likewise. * m4/gnulib-common.m4: Likewise. * m4/intdiv0.m4: Likewise. * m4/intlmacosx.m4: Likewise. * m4/largefile.m4: Likewise. * m4/ldexpl.m4: Likewise. * m4/link-follow.m4: Likewise. * m4/locale-ar.m4: Likewise. * m4/locale-fr.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale-tr.m4: Likewise. * m4/locale-zh.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/lock.m4: Likewise. * m4/logl.m4: Likewise. * m4/mathfunc.m4: Likewise. * m4/minus-zero.m4: Likewise. * m4/mktime.m4: Likewise. * m4/mmap-anon.m4: Likewise. * m4/multiarch.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/nocrash.m4: Likewise. * m4/poll.m4: Likewise. * m4/printf-frexpl.m4: Likewise. * m4/printf.m4: Likewise. * m4/signbit.m4: Likewise. * m4/sinl.m4: Likewise. * m4/sqrtl.m4: Likewise. * m4/strerror_r.m4: Likewise. * m4/tanl.m4: Likewise. * m4/threadlib.m4: Likewise. * m4/ttyname_r.m4: Likewise. * m4/unlink.m4: Likewise. * m4/visibility.m4: Likewise. * m4/wcwidth.m4: Likewise. * tests/minus-zero.h: Likewise. * tests/test-alloca-opt.c: Likewise. * tests/test-copy-acl.sh: Likewise. * tests/test-copy-file.sh: Likewise. * tests/test-fdatasync.c: Likewise. * tests/test-file-has-acl.sh: Likewise. * tests/test-flock.c: Likewise. * tests/test-fsync.c: Likewise. * tests/test-localename.c: Likewise. * tests/test-malloca.c: Likewise. * tests/test-nonblocking-pipe.h: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-openpty.c: Likewise. * tests/test-posix_openpt.c: Likewise. * tests/test-ptsname.c: Likewise. * tests/test-ptsname_r.c: Likewise. * tests/test-sameacls.c: Likewise. * tests/test-select.h: Likewise. * tests/test-set-mode-acl.sh: Likewise. * tests/test-snprintf-posix.h: Likewise. * tests/test-sprintf-posix.h: Likewise. * tests/test-strtod.c: Likewise. * tests/test-time.c: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * doc/acl-resources.txt: Likewise. * doc/**/*.texi: Likewise. Reported by Max Horn . 2012-06-22 Bruno Haible grantpt: Relax requirement regarding invalid file descriptors. * lib/grantpt.c: Don't include . (grantpt): Don't verify the validity of the file descriptor. * modules/grantpt (Depends-on): Remove fcntl-h. * tests/test-grantpt.c (main): Allow grantpt to succeed for invalid file descriptors. * doc/posix-functions/grantpt.texi: Document more platforms on which grantpt succeeds for invalid file descriptors. Reported by Rich Felker . 2012-06-22 Bruno Haible fbufmode test: Don't test unportable behaviour. * tests/test-fbufmode.c (test_mode): New function, extracted from main. (main): Invoke it three times. Reported by Szabolcs Nagy and Rich Felker . 2012-06-21 Bruno Haible gnulib-tool: Refactor inctests variable. * gnulib-tool: Normalize inctests to 'true' or 'false', not ''. (func_modules_transitive_closure, func_modules_transitive_closure_separately, func_import, func_create_testdir): Update. gnulib-tool: --create-[mega]testdir, --[mega]test implies --with-tests. * gnulib-tool: Accept option --without-tests. (func_usage): Document --without-tests option. Rearrange. (inctests): Normalize according to the mode. * NEWS: Mention the change. Suggested by Simon Josefsson. 2012-06-21 Bruce Korb parse-duration test: Avoid spurious output. * tests/test-parse-duration.sh: Reindent with leading tabs. 2012-06-21 Jim Meyering maint: disable the strncpy prohibition * cfg.mk: Do not prohibit strncpy here. 2012-06-21 Bruno Haible nonblocking: Avoid compilation error on mingw64. * m4/stdio_h.m4 (gl_STDIO_H): Invoke gl_MODULE_INDICATOR for scanf, fscanf. * modules/vscanf (configure.ac): Invoke gl_MODULE_INDICATOR. * modules/vfscanf (configure.ac): Likewise. * lib/stdio-read.c (scanf, fscanf, vscanf, vfscanf): Enable function definition only if stdio.h has prepared it. Reported by Daniel P. Berrange . 2012-06-20 Bernd Jendrissek (tiny change) gnulib-tool: Use readlink if it is available. * gnulib-tool (func_readlink): Choose function more appropriately. 2012-06-21 Paul Eggert posixtm-tests: port to buggy compiler Problem reported by Simon Josefsson in . * modules/posixtm-tests (Depends-on): Add stdint. * tests/test-posixtm.c (struct posixtm_test.t_expected): Now of type int_least64_t, not int64_t, both because that's what INT64_C returns and because int_least64_t works even on 72-bit hosts. (T): Use INT64_C on constants outside the traditional int range, to work around compiler bug noted by Simon. mktime: fix integer overflow in 'configure'-time test * m4/mktime.m4 (gl_FUNC_MKTIME): Do not rely on undefined behavior after integer overflow. Problem reported by Rich Felker in . Also, don't look for further instances of a bug if we've already found one instance; this helps 'configure' run faster. 2012-06-20 John Darrington (tiny change) tmpfile, clean-temp: Fix invocation of GetVersionEx. * lib/tmpfile.c (supports_delete_on_close): Initialize parameter for GetVersionEx correctly. * lib/clean-temp.c (supports_delete_on_close): Likewise. 2012-06-20 Bruno Haible fdopen: Allow implementations that don't reject invalid fd arguments. * m4/fdopen.m4 (gl_FUNC_FDOPEN): Let the test pass if fdopen(-1,...) succeeds. Reported by Rich Felker . 2012-06-20 Simon Josefsson * modules/parse-duration-tests (test_parse_duration_LDADD): Don't bring in LIBINTL. 2012-06-20 Paul Eggert init.sh: do not rely on autoupated PWD This addresses symptoms of the problem reported by Nelson H.F. Beebe in . Although Nelson's bug was not necessarily fixed by this patch, it seems wise to make the change for safety. * tests/init.sh (path_prepend_): Do not rely on PWD updating automagically after 'cd'; this is not reliable on older shells. (setup_): Fail if we cannot cd to temporary directory. 2012-06-19 Bruno Haible stat, fstat: Avoid warnings on mingw64. * lib/stat.c (stat) [_GL_WINDOWS_64_BIT_ST_SIZE]: Undefine before redefining. * lib/fstat.c (stat, fstat) [_GL_WINDOWS_64_BIT_ST_SIZE]: Likewise. Reported by Daniel P. Berrange . 2012-06-19 Bruno Haible stdioext: Add support for musl libc. * m4/fbufmode.m4 (gl_FUNC_FBUFMODE): Test whether __fbufsize exists. * lib/fbufmode.c (fbufmode): Add conditional code for musl. * m4/fseterr.m4: New file. * lib/fseterr.h (fseterr): Define as an alias of __fseterr if that function exists. * modules/fseterr (Files): Add m4/fseterr.m4. (configure.ac): Invoke gl_FUNC_FSETERR. Compile fseterr.c if __fseterr does not exist. (Makefile.am): Remove fseterr.c from lib_SOURCES. * lib/freadable.h: Update comment. * lib/fwritable.h: Update comment. * lib/freading.h: Update comment. * lib/fwriting.h: Update comment. * m4/freadahead.m4: New file. * lib/freadahead.h (freadahead): Define as an alias of __freadahead if that function exists. * modules/freadahead (Files): Add m4/freadahead.m4. (configure.ac): Invoke gl_FUNC_FREADAHEAD. Compile freadahead.c if __freadahead does not exist. (Makefile.am): Remove freadahead.c from lib_SOURCES. * m4/freadptr.m4: New file. * lib/freadptr.h (freadptr): Define as an alias of __freadptr if that function exists. * modules/freadptr (Files): Add m4/freadptr.m4. (configure.ac): Invoke gl_FUNC_FREADPTR. Compile freadptr.c if __freadptr does not exist. (Makefile.am): Remove freadptr.c from lib_SOURCES. * m4/freadseek.m4: New file. * lib/freadseek.c (freadptrinc): Use __freadptrinc if that function exists. * modules/freadseek (Files): Add m4/freadseek.m4. (configure.ac): Invoke gl_FUNC_FREADSEEK. * lib/fpurge.c (fpurge): Update comment. Reported by and with help from Rich Felker . 2012-06-19 Bruno Haible *printf-posix: Put more info into config.log. * m4/printf.m4 (gl_PRINTF_ENOMEM): Emit conftest's error output and exit code into config.log. 2012-06-19 Bruno Haible getopt-gnu: Fix exit code overflow in autoconf test. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Squash exit code values, to keep them below < 128. 2012-06-17 Jim Meyering maint.mk: fix typo in code to derive GPG key at release time * top/maint.mk (gpg_key_ID): Fix typo: $3 -> $$3 2012-06-17 Paul Eggert regex: avoid warning when pointers are not long * lib/regcomp.c (parse_dup_op, mark_opt_subexp): Cast between void * and uintptr_t, not long, for portability to hosts where pointers and long have different sizes. Issue noted by Daniel P. Berrange in and fix suggested by Bruno Haible in . 2012-06-17 Bruno Haible dummy: Relicense into the public domain. * modules/dummy (License): Set to "public domain". Suggested by Reuben Thomas. 2012-06-12 Akim Demaille announce-gen: VPATH issues * build-aux/announce-gen (--srcdir): New option, used to trim the $srcdir part of the path from $builddir to NEWS. * top/maint.mk (announcement): Adjust. 2012-06-12 Akim Demaille gnu-web-doc-update: VPATH builds * build-aux/gnu-web-doc-update (--builddir): New option. Revamp the handling of options. Prefer $(...) to `...`. Don't pass --tmpdir=. to mktemp, it is useless given that we specify the template, and it is GNU mktemp specific. Prefer set -e to long series of &&. Restore the initial git branch, not "master". Properly initialize submodules (don't rely only on bootstrap). Do not reconfigure blindly, use config.status. * top/README-release: Update instructions for gnu-web-doc-update. 2012-06-11 Jim Meyering maint.mk: revert most of the previous change re "all these" * top/maint.mk (prohibit_undesirable_word_seq_RE_): Remove that pair. For rationale, see the discussion at http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/30912 2012-06-10 Karl Berry * build-aux/gnupload: with --dry-run, do not ask for gpg pw. * build-aux/gnupload: implement --replace, ftp-upload protocol v1.2. 2012-06-10 Bruce Korb parse-duration: Relicense under LGPLv2+. * modules/parse-duration (License): Change to LGPLv2+. 2012-06-10 Jim Meyering maint.mk: prohibit common grammar error: "all these" * top/maint.mk (prohibit_undesirable_word_seq_RE_): Add "all these" to the list of prohibited word sequences. It should be "all of these". * lib/tempname.c (__gen_tempname): Fix one of them. 2012-06-07 Akim Demaille do-release-commit-and-tag: support VPATH builds * build-aux/do-release-commit-and-tag: Prefer $(...) to `...`. (noteworthy): Defined earlier to factor its value. (noteworthy_stub): New. Use it to factor. (help_version): Split into... (help, version): these. Adjust the option processing part. Support "--option=value" in addition to "--option value". (builddir): New. (--builddir): New option. * top/README-release: Document this. Reword slightly so that the reader cannot understand that he has to do these steps before calling do-release-commit-and-tag. 2012-06-07 Akim Demaille readme-release: also require announce-gen and maintainer-makefile * modules/readme-release (Depends-on): here. * modules/announce-gen, modules/do-release-commit-and-tag, modules/gnu-web-doc-update, modules/maintainer-makefile (Description): Point to readme-release. 2012-06-07 Akim Demaille maint.mk: fix VPATH issues. * top/maint.mk (news-check): GNU Make understand $< very well. (release-prep): NEWS is in $(srcdir). 2012-06-05 Akim Demaille readme-release: require the promoted modules. * modules/readme-release (Depends-on): Add do-release-commit-and-tag, gnupload, and gnu-web-doc-update, used in this text. 2012-05-21 Paolo Bonzini Bruno Haible error, strerror-override: Support mingw64 from Fedora 17. * lib/errno.in.h (GNULIB_defined_ESTREAMS): Use a different indicator for ETXTBSY, ENODATA, ENOSR, ENOSTR, ETIME, EOTHER, compared to EINPROGRESS. * lib/strerror-override.h (strerror_override): Test it. * lib/strerror-override.c (strerror_override): Likewise. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Test also ETXTBSY. 2012-05-21 Paolo Bonzini Bruno Haible error, strerror-override: Support mingw64 from Fedora 17. * lib/errno.in.h (GNULIB_defined_ENOTRECOVERABLE): Use a different indicator for ENOTRECOVERABLE, compared to EOWNERDEAD. * lib/strerror-override.h (strerror_override): Test it. * lib/strerror-override.c (strerror_override): Likewise. 2012-06-03 Bruno Haible error, strerror-override: Support new errno values from POSIX:2008. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Test also EOWNERDEAD and ENOTRECOVERABLE. * lib/errno.in.h (EOWNERDEAD, ENOTRECOVERABLE): Define on all platforms. * lib/strerror-override.c (strerror_override): Conditionalize the EOWNERDEAD, ENOTRECOVERABLE handling on GNULIB_defined_EOWNERDEAD. * lib/strerror-override.h (strerror_override): Declare also if GNULIB_defined_EOWNERDEAD is defined. * tests/test-errno.c (e130, e131): New variables. * doc/posix-headers/errno.texi: Mention the status for EOWNERDEAD, ENOTRECOVERABLE. Reported by Paolo Bonzini. 2012-05-31 Jim Meyering savewd: add missing dependency on sys_wait module * modules/savewd (Depends-on): Add sys_wait, needed at least for MSVC. Report and suggested change by Michael Goffioul. 2012-05-29 Paul Eggert system-quote-tests: port to CentOS 5 Problem reported by Tom G. Christensen in . * tests/test-system-quote-child.c (fclose, fprintf): Undef. 2012-05-29 Jim Meyering maint: fix typos in comments and ChangeLog Culprits identified and fixed mostly automatically using these commands: git ls-files | misspellings -f - |grep -v '^ERROR:' |perl -pe \ 's/^(.*?)\[(\d+)\]: (\w+) -> "(.*?)"$/sed -i '\''${2}s!$3!$4!'\'' $1/' using http://github.com/lyda/misspell-check * ChangeLog: Fix typos. * doc/solaris-versions: Likewise. * lib/regexec.c (re_search_stub): Likewise. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Likewise. 2012-05-27 Paul Eggert manywarnings: remove duplicate -Wmultichar entry * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Remove duplicate entry for -Wmultichar. -Wno-multichar is in the GCC 4.7.0 manual, so keep the entry marked as documented. 2012-05-27 Karl Berry * config/srclist.txt (mktime.c): remove last libc sync, perhaps just temporarily. 2012-05-26 Paul Eggert regex: don't assume uint64_t or uint32_t * lib/regcomp.c (init_word_char): Don't assume that the types uint64_t and uint32_t exist. The C standard doesn't guarantee them, and on some 32-bit compilers there is no uint64_t. Problem reported by Gianluigi Tiesi in . 2012-05-25 Jim Meyering maint.mk: add strncpy-prohibiting syntax-check rule * top/maint.mk (sc_prohibit_strncpy): New rule, from coreutils. 2012-05-24 Jim Meyering maint.mk: compute $(gpg_key_ID) more portably * top/maint.mk (gpg_key_ID): Use awk in place of sed '{...;...;}'. That use of sed is not portable to some fringe systems. Reported by Paul Eggert in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/30793/focus=30802 2012-05-23 Paul Eggert mktime: sync from glibc * config/srclist.txt: Uncomment mktime.c. * lib/mktime.c: Sync from glibc master. This incorporates 3 changes. First, indent with tabs, since glibc uses tabs and doesn't want to change and we'd rather be identical to glibc. Also, two small coding changes: (isdst_differ): Use &&, not &, as && is the usual style. (__mktime_internal): Rename local var from abs_diff to approx_abs_diff for clarity. 2012-05-23 Akim Demaille announce-gen: du -h is more portable than du --human * build-aux/announce-gen (sizes): Invoke du with -h instead of --human. Accept leading white space in its output. 2012-05-23 Akim Demaille announce-gen: Improve diagnostics. * build-aux/announce-gen: When parsing command line options, prefer "announce-gen: option --release-type requires an argument" to "Option release-type requires an argument". 2012-05-23 Akim Demaille maint.mk: gpg_key_ID: use sed more portably * top/maint.mk (gpg_key_ID): End sed block with a semicolon before the closing brace. (refresh-po): Fuse two sed invocations into one. 2012-05-15 Akim Demaille gitlog-to-changelog: support the log message format used in Bison. * build-aux/gitlog-to-changelog: Support --strip-tab and --strip-cherry-picked. 2012-05-21 Paolo Bonzini poll/select: prevent busy-waiting. SwitchToThread() only gives away the rest of the current time slice to another thread in the current process. So if the thread that feeds the file decscriptor we're polling is not in the current process, we get busy-waiting. * lib/poll.c: Use SleepEx(1, TRUE) instead of SwitchToThread(). Patch from Theodore Leblond. * lib/select.c: Split polling out of the loop that sets the output fd_sets. Check for zero result and loop if the wait timeout is infinite. 2012-05-21 Simon Josefsson select: Fix build error on IRIX 6.5. * lib/select.c: Include stddef.h for NULL. 2012-05-21 Simon Josefsson gc: fix libgcrypt detection on older machines. * m4/gc.m4: Reject libgcrypt earlier than 1.4.4. Collapse copyright years because the file has been distributed every year since it was created. 2012-05-18 Paul Eggert crypto: fix bug in large buffer handling Problem reported by Serge Belyshev for glibc in and for gnulib in . * lib/md4.c (md4_process_block): * lib/md5.c (md5_process_block): * lib/sha1.c (sha1_process_block): * lib/sha256.c (sha256_process_block): Don't assume the buffer length is less than 2**32. * lib/sha512.c (sha512_process_block): Likewise. Here, the bug is present only in the rare case where the host does not support uint64_t or where size_t is wider than 64 bits. Use u64size to work around the problems. * lib/u64.h (u64size): New macro. 2012-05-15 Pádraig Brady fsusage: fix block size returned on older Linux 2.6 * lib/fsusage.c: Fall back to (struct statfs).f_frsize which is available since Linux 2.6. * m4/fsusage.m4 (STAT_STATFS2_FRSIZE): Always define when the member is available so it can be used as a fallback. * doc/posix-functions/statvfs.texi: Mention the hang issue on Linux < 2.6.36. 2012-05-14 Paul Eggert bootstrap: suppress stderr chatter * build-aux/bootstrap (insert_sorted_if_absent, main program): Omit unnecessary chatter to stderr. The main program chatter was there only inadvertantly. bootstrap: .gitignore files created by autopoint, libtool I ran into this problem when bootstrapping the latest diffutils. After './bootstrap', 'git status' reported lots of untracked files m4/codeset.m4, m4/gettext.m4, etc. These files were created by autopoint and do not need to be version-controlled. * build-aux/bootstrap: Put into .gitignore the files that autopoint and libtool create, by keeping track of files that exist after but not before these programs are run. (version_controlled_file): Move up. 2nd arg is now full file name, not base name; this is more convenient. Put CVS at the end, as it's now somewhat deprecated. 2012-05-14 Jim Meyering ignore-value.h: remove unused _GL_ATTRIBUTE_DEPRECATED definition * lib/ignore-value.h (_GL_ATTRIBUTE_DEPRECATED): Remove now-unused definition. Reported by Bruno Haible. 2012-05-13 Bruno Haible Paul Eggert binary-io: Define set_binary_mode function. * lib/binary-io.h (set_binary_mode): New function. (SET_BINARY): Define in terms of set_binary_mode. * modules/binary-io (configure.ac): Require AC_C_INLINE. * tests/test-binary-io.c (main): Accept an argument, and test either set_binary_mode or SET_BINARY depending on the argument. * tests/test-binary-io.sh: Invoke test-binary-io twice, with an argument. Clean up also t-bin-out0.tmp. 2012-05-13 Stefano Lattarini bootstrap: take advantage of POSIX shell features The 'bootstrap' script offered by Gnulib script already uses POSIX shell features (like $((...)) arithmetic expansions) that are not supported by legacy Bourne shells like Solaris 10 /bin/sh. This means that bootstrap must already be run using a proper POSIX shell, which will thus provide more features, like ${var#pattern} parameter expansion or inversion of a command exit status with '!'. We can thus use these features to improve the clarity and the performances of the bootstrap script. Suggested by Eric Blake. * build-aux/bootstrap: Prefer xpg4 parameter expansions over use of sed/expr plus command substitutions, to save some forks. While we are at it, prefer the POSIX $(...) form of command substitution, rather than the legacy form `...` (since the former is visually clearer and interacts better with quoting), and prefer the idiom: "if ! CMD; then ACTION ..." over the idiom: "if CMD; then :; else ACTION ..." which was required by legacy Bourne shells not supporting '!'. 2012-05-12 Bruno Haible system-quote: Add more comments. * lib/system-quote.h: Add more comments about wilcards and limitations. Suggested by Eli Zaretskii . sh-quote, system-quote: Add comments about wildcards. * lib/sh-quote.h: Clarify what happens with wildcard characters. * lib/system-quote.h: Likewise. Reported by Eli Zaretskii . 2012-05-11 Paul Eggert fsusage: check for GNU/Linux statvfs problem dynamically * lib/fsusage.c [STAT_STATVFS && __linux__ && (__GLIBC__||__UCLIBC__)]: Define STAT_STATFS2_BSIZE too, since in this case the code now checks dynamically whether statvfs is reliable, falling back on Linux-style statfs otherwise. (statvfs_works): New function, for dynamically testing statvfs. (get_fs_usage) [STAT_STATVFS]: Use it. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Remove static check for statvfs on GNU/Linux hosts, since it's now done dynamically. 2012-05-10 Bruno Haible system-quote, execute, spawn-pipe: Escape '?' on Windows. * lib/system-quote.c (SHELL_SPECIAL_CHARS, CMD_SPECIAL_CHARS): Add the '?' character. * lib/w32spawn.h (SHELL_SPECIAL_CHARS): Likewise. * tests/test-system-quote-main.c (check_all): Check also strings like "??????????". Reported by Eli Zaretskii . 2012-05-10 Paul Eggert _Noreturn: port config.h to gcc -Wundef * m4/gnulib-common.m4 (gl_COMMON_BODY): Check that __STDC_VERSION__ is defined before using it, for gcc -Wundef. Reported by Akim Demaille in . 2012-05-10 Bruno Haible system-quote: Refactor. * lib/system-quote.h (system_quote_copy): Fix comment. * lib/system-quote.c (windows_createprocess_quote, windows_cmd_quote): New functions, extracted from system_quote_copy. (system_quote_length, system_quote_copy): Use these functions. Reported by Paul Eggert. 2012-05-08 Bruno Haible execute, spawn-pipe: Escape '*' characters in arguments on Windows. * lib/w32spawn.h (SHELL_SPECIAL_CHARS): Add the '*' character. 2012-05-08 Bruno Haible Tests for module 'system-quote'. * modules/system-quote-tests: New file. * tests/test-system-quote.sh: New file. * tests/test-system-quote-main.c: New file. * tests/test-system-quote-child.c: New file. New module 'system-quote'. * lib/system-quote.h: New file. * lib/system-quote.c: New file. * modules/system-quote: New file. 2012-05-08 Bruno Haible sh-quote: Make C++ safe and allow multiple inclusion. * lib/sh-quote.h: Add double-inclusion guard. For C++, wrap function declarations in extern "C". 2012-05-08 Bruno Haible sh-quote tests: Make tests stricter. * tests/test-sh-quote.c (check_one): Check the return value of shell_quote_copy. (main): Check a string with a CR character. Check a string that contains UCHAR_MAX. 2012-05-08 Akim Demaille warnings.m4: provide a means to specify the program to compile. * m4/warnings.m4 (gl_COMPILER_OPTION_IF): New, extracted from... (gl_WARN_ADD): here. Use gl_AS_VAR_APPEND. Support an argument to specify the program to compile. (gl_WARN_ADD): Accept an argument to specify the program to compile. AC_SUBST the WARN_CFLAGS when they are used. * modules/warnings (configure.ac): Don't AC_SUBST WARN_CFLAGS, leave this to gl_WARN_ADD. 2012-05-08 Eric Blake doc: recommendations on gettext version * doc/gnulib-tool.texi (gettextize and autopoint): Document the choice between versions. * DEPENDENCIES (gettext): Cover both approaches. 2012-05-08 Jim Meyering init.sh: explain why EXEEXT support uses aliases rather than functions * tests/init.sh: Add a comment. init.sh: don't let bash aliases interfere with tests * tests/init.sh: Undefine any pre-defined aliases if the selected shell is bash. This avoids problems for those who alias standard commands to non-conforming uses, like those reported in http://bugs.gnu.org/11256. Suggested by Tim Mooney . 2012-05-07 Paul Eggert stdint: be more consistent with glibc, SunOS libc * lib/stdint.in.h (gl_int_fast8_t, gl_uint_fast8_t) (gl_int_fast16_t, gl_uint_fast16_t) (gl_int_fast32_t, gl_uint_fast32_t) (INT_FAST8_MIN, INT_FAST8_MAX, UINT_FAST8_MAX) (INT_FAST16_MIN, INT_FAST16_MAX, UINT_FAST16_MAX) (INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX): Be consistent with glibc by default, and with SunOS 5.10 and later if __sun is defined. This lessens the likelihood of clashes if code compiled for older hosts is combined with code compiled for newer ones. Problem reported by Niels Möller in . 2012-05-07 Eric Blake isatty: relax license to LGPLv2+ * modules/isatty (License): Relax license. 2012-05-06 Paul Eggert stat-size: comment fix * lib/stat-size.h: Remove obsolete comment about indenting. 2012-05-06 Bruno Haible Tests for module 'sh-quote'. * modules/sh-quote-tests: New file. * tests/test-sh-quote.c: New file. 2012-05-06 Bruno Haible sh-quote: Improve shell_quote_argv's signature. * lib/sh-quote.h (shell_quote_argv): Make argument array a 'const *'. * lib/sh-quote.c (shell_quote_argv): Likewise. 2012-05-06 Paul Eggert stdint: document issues with int_fast8_t etc. * doc/posix-headers/stdint.texi (stdint.h): Say that other stdint.h substitutes may define these types differently. See . 2012-05-05 Bruno Haible nanosleep: Avoid guessing wrong when cross-compiling to Linux. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require AC_CANONICAL_HOST. When cross-compiling, set gl_cv_func_nanosleep to either 'guessing no' or 'guessing no (mishandles large arguments)'. 2012-05-05 Bruno Haible link-follow: Avoid guessing wrong when cross-compiling to glibc/Linux. * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Require AC_CANONICAL_HOST. When cross-compiling to a glibc/Linux platform, set gl_cv_func_link_follows_symlink to "guessing no". 2012-05-05 Bruno Haible tzset: Avoid guessing wrong when cross-compiling to glibc systems. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Require AC_CANONICAL_HOST. When cross-compiling to a glibc platform, set gl_cv_func_tzset_clobber to "guessing no". * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Update. 2012-05-05 Bruno Haible d-ino: Avoid guessing "no" when cross-compiling to glibc/Linux systems. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Require AC_CANONICAL_HOST. When cross-compiling to a glibc/Linux platform, set gl_cv_struct_dirent_d_ino to "guessing yes". 2012-05-05 Bruno Haible fseeko-tests, ftello-tests: Avoid "guessing no" when cross-compiling. * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Require AC_CANONICAL_HOST. When cross-compiling to a glibc platform, set gl_cv_func_ungetc_works to "guessing yes". 2012-05-05 Bruno Haible signbit: Avoid "guessing no" when cross-compiling to glibc systems. * m4/signbit.m4 (gl_SIGNBIT): Require AC_CANONICAL_HOST. When cross- compiling to a glibc system, set gl_cv_func_signbit and gl_cv_func_signbit_gcc to "guessing yes". 2012-05-05 Bruno Haible strerror: Avoid "guessing no" when cross-compiling to glibc systems. * m4/strerror.m4 (gl_FUNC_STRERROR): Require AC_CANONICAL_HOST. When cross-compiling to a glibc platform, set gl_cv_func_working_strerror to "guessing yes". (gl_FUNC_STRERROR_0): Require AC_CANONICAL_HOST. When cross-compiling to a glibc platform, set gl_cv_func_strerror_0_works to "guessing yes". 2012-05-05 Bruno Haible canonicalize[-lgpl]: Avoid "guessing no" when cross-compiling to glibc. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Require AC_CANONICAL_HOST. When cross-compiling to a glibc system, set gl_cv_func_realpath_works to "guessing yes". 2012-05-05 Bruno Haible gettimeofday: Avoid bad guess when cross-compiling to glibc systems. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Require AC_CANONICAL_HOST. When cross-compiling, guess no on glibc platforms. 2012-05-04 Bruno Haible Tweak last commit. * m4/off_t.m4 (gl_TYPE_OFF_T): Tweak comments. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. 2012-05-04 Paul Eggert unistd_h: make it easier to avoid sys_types_h This is useful for Emacs, which has its own method of porting to Windows, and which therefore does not need the sys_types_h module. * m4/off_t.m4: New file, defining gl_TYPE_OFF_T, which contains code moved here from gl_SYS_TYPES_H. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Require it instead of using the code directly. * m4/unistd_h.m4 (gl_UNISTD_H): Require gl_TYPE_OFF_T, not gl_SYS_TYPES_H. * modules/sys_types (Files): * modules/unistd (Files): Add m4/off_t.m4. 2012-05-03 Bruno Haible lstat: Avoid "guessing no" when cross-compiling to glibc systems. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): When cross- compiling, set gl_cv_func_lstat_dereferences_slashed_symlink to "guessing yes" or "guessing no". (gl_FUNC_LSTAT): Update. * m4/fstatat.m4 (gl_FUNC_FSTATAT): Update. * m4/openat.m4 (gl_FUNC_OPENAT): Update. * m4/unlinkat.m4 (gl_FUNC_UNLINKAT): Update. 2012-05-03 Bruno Haible *alloc-gnu, eealloc: Avoid "guessing no" when cross-compiling to glibc. * m4/malloc.m4 (_AC_FUNC_MALLOC_IF): Override in autoconf < 2.70. * m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Override in autoconf < 2.70. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Require AC_CANONICAL_HOST. When cross-compiling, choose the first alternative on glibc systems. * modules/eealloc (Files): Add m4/malloc.m4, m4/realloc.m4. 2012-05-03 Bruno Haible getgroups: Avoid "guessing no" when cross-compiling to glibc systems. * m4/getgroups.m4 (AC_FUNC_GETGROUPS): Override in autoconf < 2.70. (gl_FUNC_GETGROUPS): Adapt to change of ac_cv_func_getgroups_works. 2012-05-03 Bruno Haible chown: Avoid "guessing no" when cross-compiling to glibc systems. * m4/chown.m4 (AC_FUNC_CHOWN): Override in autoconf < 2.70. 2012-05-03 Bruno Haible Avoid "guessing no" guesses when cross-compiling to glibc systems. * m4/cbrtl.m4 (gl_FUNC_CBRTL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_cbrtl_ieee to "guessing yes". * m4/ceil.m4 (gl_FUNC_CEIL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_ceil_ieee to "guessing yes". * m4/ceilf.m4 (gl_FUNC_CEILF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_ceilf_ieee to "guessing yes". * m4/ceill.m4 (gl_FUNC_CEILL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_ceill_ieee to "guessing yes". * m4/chown.m4 (gl_FUNC_CHOWN): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_chown_slash_works, gl_cv_func_chown_ctime_works to "guessing yes". * m4/lchown.m4 (gl_FUNC_LCHOWN): Update. * m4/exp2l.m4 (gl_FUNC_EXP2L): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_exp2l_ieee to "guessing yes". * m4/expm1.m4 (gl_FUNC_EXPM1): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_expm1_ieee to "guessing yes". * m4/fchdir.m4 (gl_FUNC_FCHDIR): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_open_directory_works to "guessing yes". * m4/fstat.m4 (gl_FUNC_FSTAT): Update. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_fdopendir_works to "guessing yes". * m4/floor.m4 (gl_FUNC_FLOOR): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_floor_ieee to "guessing yes". * m4/floorf.m4 (gl_FUNC_FLOORF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_floorf_ieee to "guessing yes". * m4/fmod.m4 (gl_FUNC_FMOD): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_fmod_ieee to "guessing yes". * m4/fmodf.m4 (gl_FUNC_FMODF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_fmodf_ieee to "guessing yes". * m4/fmodl.m4 (gl_FUNC_FMODL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_fmodl_ieee to "guessing yes". * m4/getgroups.m4 (gl_FUNC_GETGROUPS): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_getgroups_works to "guessing yes". * m4/hypot.m4 (gl_FUNC_HYPOT): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_hypot_ieee to "guessing yes". * m4/hypotf.m4 (gl_FUNC_HYPOTF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_hypotf_ieee to "guessing yes". * m4/hypotl.m4 (gl_FUNC_HYPOTL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_hypotl_ieee to "guessing yes". * m4/link.m4 (gl_FUNC_LINK): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_link_works to "guessing yes". * m4/log.m4 (gl_FUNC_LOG): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log_ieee to "guessing yes". * m4/logf.m4 (gl_FUNC_LOGF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_logf_ieee to "guessing yes". * m4/log10.m4 (gl_FUNC_LOG10): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log10_ieee to "guessing yes". * m4/log10f.m4 (gl_FUNC_LOG10F): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log10f_ieee to "guessing yes". * m4/log1p.m4 (gl_FUNC_LOG1P): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log1p_ieee to "guessing yes". * m4/log1pf.m4 (gl_FUNC_LOG1PF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log1pf_ieee to "guessing yes". * m4/log1pl.m4 (gl_FUNC_LOG1PL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log1pl_ieee to "guessing yes". * m4/log2.m4 (gl_FUNC_LOG2): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log2_ieee to "guessing yes". * m4/log2f.m4 (gl_FUNC_LOG2F): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_log2f_ieee to "guessing yes". * m4/mkdir.m4 (gl_FUNC_MKDIR): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_mkdir_trailing_slash_works, gl_cv_func_mkdir_trailing_dot_works to "guessing yes". * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_mkfifo_works to "guessing yes". * m4/mknod.m4 (gl_FUNC_MKNOD): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_mknod_works to "guessing yes". * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_working_mkstemp to "guessing yes". * m4/modf.m4 (gl_FUNC_MODF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_modf_ieee to "guessing yes". * m4/modff.m4 (gl_FUNC_MODFF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_modff_ieee to "guessing yes". * m4/modfl.m4 (gl_FUNC_MODFL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_modfl_ieee to "guessing yes". * m4/putenv.m4 (gl_FUNC_PUTENV): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_svid_putenv to "guessing yes". * m4/readlink.m4 (gl_FUNC_READLINK): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_readlink_works to "guessing yes". * m4/remainder.m4 (gl_FUNC_REMAINDER): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_remainder_ieee to "guessing yes". * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_remainderf_ieee to "guessing yes". * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_remainderl_ieee to "guessing yes". * m4/rmdir.m4 (gl_FUNC_RMDIR): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_rmdir_works to "guessing yes". * m4/unlink.m4 (gl_FUNC_UNLINK): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_unlink_honors_slashes, gl_cv_func_unlink_parent_fails to "guessing yes". * m4/remove.m4 (gl_FUNC_REMOVE): Update. * m4/rename.m4 (gl_FUNC_RENAME): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_rename_slash_dst_works, gl_cv_func_rename_slash_src_works, gl_cv_func_rename_link_works, gl_cv_func_rename_dest_works to "guessing yes". * m4/round.m4 (gl_FUNC_ROUND): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_round_ieee to "guessing yes". * m4/roundf.m4 (gl_FUNC_ROUNDF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_roundf_ieee to "guessing yes". * m4/roundl.m4 (gl_FUNC_ROUNDL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_roundl_ieee to "guessing yes". * m4/setenv.m4 (gl_FUNC_SETENV): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_setenv_works to "guessing yes". (gl_FUNC_UNSETENV): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_unsetenv_works to "guessing yes". * m4/sleep.m4 (gl_FUNC_SLEEP): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_sleep_works to "guessing yes". * m4/stat.m4 (gl_FUNC_STAT): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_stat_file_slash to "guessing yes". * m4/symlink.m4 (gl_FUNC_SYMLINK): Require AC_CANONICAL_HOST. When cross-compiling to glibc systems, set gl_cv_func_symlink_works to "guessing yes". * m4/trunc.m4 (gl_FUNC_TRUNC): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_trunc_ieee to "guessing yes". * m4/truncf.m4 (gl_FUNC_TRUNCF): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_truncf_ieee to "guessing yes". * m4/truncl.m4 (gl_FUNC_TRUNCL): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_truncl_ieee to "guessing yes". * m4/usleep.m4 (gl_FUNC_USLEEP): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_usleep_works to "guessing yes". * m4/utimens.m4 (gl_UTIMENS): Require AC_CANONICAL_HOST. When cross- compiling to glibc systems, set gl_cv_func_futimesat_works to "guessing yes". 2012-05-03 Bruno Haible Say "guessing yes" or "guessing no" when cross-compiling. * m4/dup2.m4 (gl_FUNC_DUP2): When cross-compiling, set gl_cv_func_dup2_works to "guessing yes" or "guessing no". * m4/getdelim.m4 (gl_FUNC_GETDELIM): When cross-compiling, set gl_cv_func_working_getdelim to "guessing yes" or "guessing no". * m4/getline.m4 (gl_FUNC_GETLINE): When cross-compiling, set am_cv_func_working_getline to "guessing yes" or "guessing no". * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): When cross-compiling, set gl_cv_func_memmem_works_always to "guessing yes" or "guessing no". (gl_FUNC_MEMMEM): When cross-compiling, set gl_cv_func_memmem_works_fast to "guessing yes" or "guessing no". * m4/stpncpy.m4 (gl_FUNC_STPNCPY): When cross-compiling, set gl_cv_func_stpncpy to "guessing yes" or "guessing no". * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): When cross-compiling, set gl_cv_func_strcasestr_works_always to "guessing yes" or "guessing no". (gl_FUNC_STRCASESTR): When cross-compiling, set gl_cv_func_strcasestr_linear to "guessing yes" or "guessing no". * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): When cross-compiling, set gl_cv_func_strstr_works_always to "guessing yes" or "guessing no". (gl_FUNC_STRSTR): When cross-compiling, set gl_cv_func_strstr_linear to "guessing yes" or "guessing no". * m4/strtod.m4 (gl_FUNC_STRTOD): When cross-compiling, set gl_cv_func_strtod_works to "guessing yes" or "guessing no". * m4/wctype_h.m4 (gl_WCTYPE_H): When cross-compiling, set gl_cv_func_iswcntrl_works to "guessing yes" or "guessing no". 2012-05-01 Bruno Haible relocatable-prog: Enable ELF ORIGIN trick also on GNU/kFreeBSD. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Treat kFreeBSD like Linux. * build-aux/reloc-ldflags: Likewise. Suggested by Steven Chamberlain . 2012-05-01 Bruno Haible gnulib-tool: Remove transitional code. * gnulib-tool: Don't warn about --import with 0 arguments any more. Reported by Dmitriy Selyutin . 2012-05-01 Bruno Haible getcwd: Fix misindentation. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Fix indentation. 2012-04-29 Paul Eggert exclude: process exclude and include directives in order This restores the pre-2009 behavior, and is part of a fix of a grep bug reported by Quentin Arce in . * lib/exclude.c (struct exclude): Remove 'tail' member. (new_exclude_segment): Prepend the new segment instead of appending. Return void, since that's now more convenient. (file_pattern_matches): Renamed from excluded_file_pattern_p. (file_name_matches): Renamed from excluded_file_name_p. (file_pattern_matches, file_name_matches): Return true if the pattern matches, not if it excludes. All callers changed. (excluded_file_name): Process the list in reverse order; since the list is now reversed this restores the pre-2009 behavior. (add_exclude): Adjust to new reversed-order list. Use local var rather than macro, for clarity. * tests/test-exclude7.sh: Adjust to corrected behavior. exclude: handle wildcards with FNM_NOESCAPE and with trailing \ * lib/exclude.c (unescape_pattern): Don't worry about unescaped [; it's not possible here. Handle the case of \ at end of pattern without dumping core. (add_exclude): Do not unescape the pattern if FNM_NOESCAPE is used. _Noreturn: future-proof non-GNU and non-MSVC compilers * build-aux/snippet/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY): Do not define _Noreturn if __STDC_VERSION__ indicates this is C11 or later. This is more likely to work with random future C compilers that are neither GNUish nor MSVCish. See Vincent Lefevre in . exclude: handle wildcards with FNM_EXTMATCH * lib/exclude.c (fnmatch_pattern_has_wildcards): Also treat '+(', '+@', '!(' as wildcards, if FNM_EXTMATCH. Make it clear in a comment that "has wildcards" really means "has or may have wildcards". Simplify by avoiding the need to call strcspn. 2012-04-29 Bruno Haible gnulib-tool: Fix list of authors. * gnulib-tool (func_version): Add Paul Eggert to list of authors. 2012-04-26 Stefano Lattarini bootstrap: support Automake-NG in $buildreq * bootstrap (check_versions): Handle automake and aclocal from Automake-NG specially. They can be specified as respectively the "automake-ng" and "aclocal-ng" requirements. 2012-04-25 Eric Blake bootstrap: only force latest Makefile.in.in for gettext module * build-aux/bootstrap (with_gettext): Only install latest Makefile.in.in for projects requesting bleeding edge gettext. 2012-04-22 Bruno Haible doc: Mention reason for replacement on glibc/Linux systems. * doc/posix-functions/dprintf.texi: Mention the problem with special 'long double' values. * doc/posix-functions/fprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/posix-functions/fcntl.texi: Add glibc/Linux to the list of platforms with F_DUPFD_CLOEXEC problems. * doc/posix-functions/glob.texi: Mention which platforms are affected by the problem with symbolic links. * doc/posix-functions/linkat.texi: Mention the problem with AT_SYMLINK_FOLLOW on Linux. 2012-04-22 Bruno Haible pwrite: Don't replace on all platforms. * m4/pwrite.m4 (gl_FUNC_PWRITE): Fix syntax error in test program. 2012-04-22 Bruno Haible rint* tests: Avoid gcc warnings. * tests/test-rint.c (INFINITY, NAN): Undefine before redefining. * tests/test-rintf.c (INFINITY, NAN): Likewise. * tests/test-rintl.c (INFINITY, NAN): Likewise. 2012-04-21 Bruno Haible users.txt: Update. * users.txt: Add freedink, wdiff. Update URLs for projects that have switched from CVS to git, bzr, or svn. 2012-04-21 Bruno Haible Large File Support for native Windows platforms. * m4/largefile.m4 (gl_LARGEFILE): New macro. * modules/largefile (configure.ac): Require gl_LARGEFILE. * lib/sys_types.in.h (off_t) [WINDOWS_64_BIT_OFF_T]: Define to a 64-bit type. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Set WINDOWS_64_BIT_OFF_T. * modules/sys_types (Makefile.am): Substitute WINDOWS_64_BIT_OFF_T. * doc/posix-headers/sys_types.texi: Mention the effect of the 'largefile' module. * lib/fcntl.in.h: Add comments about off_t. * modules/fcntl-h (Depends-on): Add sys_types. * lib/unistd.in.h [WINDOWS_64_BIT_OFF_T]: Include . (ftruncate): Replace it if REPLACE_FTRUNCATE is 1. * m4/unistd_h.m4 (gl_UNISTD_H): Require gl_SYS_TYPES_H. (gl_UNISTD_H_DEFAULTS): Initialize REPLACE_FTRUNCATE. * modules/unistd (Depends-on): Add sys_types. (Makefile.am): Substitute WINDOWS_64_BIT_OFF_T, REPLACE_FTRUNCATE. * lib/lseek.c (rpl_lseek) [_GL_WINDOWS_64_BIT_OFF_T]: Use _lseeki64 instead of lseek. * m4/lseek.m4 (gl_FUNC_LSEEK): Require gl_SYS_TYPES_H. Set REPLACE_LSEEK if WINDOWS_64_BIT_OFF_T is 1. * modules/lseek (Depends-on): Add sys_types. * lib/ftruncate.c: Put under GPLv3+. Include , msvc-nothrow.h. (SetFileSize): New function. (ftruncate) [_GL_WINDOWS_64_BIT_OFF_T]: New implementation. * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): Set REPLACE_FTRUNCATE on Windows if Large File Support is requested. * modules/ftruncate (configure.ac): Consider REPLACE_FTRUNCATE. (Depends-on): Add sys_types, msvc-nothrow. Update conditions. * lib/stdio.in.h: Add comments about off_t. * modules/stdio (Depends-on): Add sys_types. * lib/ftello.c [_GL_WINDOWS_64_BIT_OFF_T]: Use _ftelli64 or ftello64 instead of ftello. * m4/ftello.m4 (gl_FUNC_FTELLO): Require gl_SYS_TYPES_H. Set REPLACE_FTELLO if WINDOWS_64_BIT_OFF_T is 1. (gl_PREREQ_FTELLO): New macro. * modules/ftello (Depends-on): Add sys_types. (configure.ac): Incoke gl_PREREQ_FTELLO. * lib/fseeko.c [_GL_WINDOWS_64_BIT_OFF_T]: Use _fseeki64 or fseeko64 instead of fseeko. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Require gl_SYS_TYPES_H. Set REPLACE_FSEEKO if WINDOWS_64_BIT_OFF_T is 1. (gl_PREREQ_FSEEKO): New macro. * modules/fseeko (Depends-on): Add sys_types. (configure.ac): Invoke gl_PREREQ_FSEEKO. * lib/sys_stat.in.h: Add comments about off_t. (stat, fstat) [WINDOWS_64_BIT_ST_SIZE]: Define to variants that use a 64-bit integer for st_size in 'struct stat'. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Set WINDOWS_64_BIT_ST_SIZE. Define _GL_WINDOWS_64_BIT_ST_SIZE. * modules/sys_stat (Depends-on): Add sys_types. (Makefile.am): Substitute WINDOWS_64_BIT_ST_SIZE. * lib/stat.c (stat) [_GL_WINDOWS_64_BIT_ST_SIZE]: Define to _stati64 instead of stat or _stat. * lib/fstat.c [_GL_WINDOWS_64_BIT_ST_SIZE]: Use _fstati64 and 'struct _stati64' instead of fstat and 'struct stat'. * m4/fstat.m4 (gl_FUNC_FSTAT): Require gl_HEADER_SYS_STAT_H. Set REPLACE_FSTAT if WINDOWS_64_BIT_ST_SIZE is 1. Reported by Ray Satiro . 2012-04-19 Eric Blake bootstrap: accommodate older libtool * build-aux/bootstrap (use_libtool): Cater to libtool 1.5.22. Reported by Daniel P. Berrange. 2012-04-19 Jim Meyering announce-gen: avoid failure due to lack of Digest::SHA1 Even with the preferred Digest::SHA available, this script would fail when the backup module, Digest::SHA1, was not installed. * build-aux/announce-gen: Quote the conditional use of "use". Reported by Reuben Thomas in: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/30444 bootstrap: don't let a user's CDPATH setting affect this script When CDPATH is set, cd will sometimes generate output. When "cd" is run in a subshell whose output matters, that surprising-to-some output can cause malfunction. Unsetting CDPATH turns off this shell "feature." * build-aux/bootstrap (CDPATH): Unset. Reported by Reuben Thomas in: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/30435 and inspired by his patch here: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/30440 2012-04-16 Akim Demaille and Jim Meyering maint.mk: catch "see @xref{}" and similar * top/maint.mk (prohibit_undesirable_word_seq_RE_): Also prohibit "See also @xref{", "Also see @pxref{", and similar. 2012-04-16 Jim Meyering bootstrap: really use gnulib's po/Makefile.in.in * build-aux/bootstrap: Correct the source file name in previous change. Reported by Akim Demaille. configmake: correct minor inconsistency in Makefile rule * modules/configmake (Makefile.am): All other rules like this one run the final "mv -f ..." in the same backslash-continued command as the one that does everything else. This one put the mv -f ... command on a separate, non-backslash-continued line. Make it like the others. bootstrap: use gnulib's po/Makefile.in.in, not the one from gettext * build-aux/bootstrap: Use gnulib's po/Makefile.in.in, not the one from gettext. Reported by Akim Demaille. 2012-04-16 Joel E. Denny Fix recursion of install-* into po directories. Bison's install-pdf bug reported by Hans Aberg at . * build-aux/po/Makefile.in.in (install-dvi, install-html) (install-info, install-pdf, install-ps): New targets. 2012-04-16 Jim Meyering maint: avoid spurious "make sc_maint" failure * cfg.mk (exclude_file_name_regexp--sc_trailing_blank): Also exempt all *.class file names, for lib/javaversion.class. 2012-04-15 Bruno Haible lseek: Make configure test independent of environment. * m4/lseek.m4 (gl_FUNC_LSEEK): Require AC_CANONICAL_HOST. On native Windows, we know that lseek() on pipes is broken; skip the runtime test. 2012-04-14 Bruno Haible stat: Bypass buggy override in mingw64. * m4/stat.m4 (gl_FUNC_STAT): Update comments. * lib/stat.c (stat) [mingw64]: Define to _stat. * doc/posix-functions/stat.texi: Mention mingw64 bug. 2012-04-14 Bruno Haible pathmax: Fix compilation error on MSVC 9. * modules/pathmax (Depends-on): Add unistd. 2012-04-12 Paul Eggert README: document pointer comparison assumption * README (Portability guidelines): Document assumption about pointer comparisons, in response to a recent bug-gnulib comment by Jeffrey Kegler. 2012-04-12 Bruno Haible Tests for module 'getrusage'. * modules/getrusage-tests: New file. * tests/test-getrusage.c: New file. New module 'getrusage'. * lib/sys_resource.in.h: Include arg-nonnull.h, c++defs.h, warn-on-use.h. (getrusage): New declaration. * lib/getrusage.c: New file. * m4/getrusage.m4: New file. * m4/sys_resource_h.m4 (gl_HEADER_SYS_RESOURCE): Test whether getrusage is declared. (gl_SYS_RESOURCE_H_DEFAULTS): Initialize GNULIB_GETRUSAGE, HAVE_GETRUSAGE. * modules/sys_resource (Depends-on): Add snippet/arg-nonnull, snippet/c++defs, snippet/warn-on-use. (Makefile.am): Update generation of sys/resource.h. Substitute GNULIB_GETRUSAGE, HAVE_GETRUSAGE. * modules/getrusage: New file. * doc/posix-functions/getrusage.texi: Mention the new module. 2012-04-12 Bruno Haible Tests for module 'sys_resource'. * modules/sys_resource-tests: New file. * tests/test-sys_resource.c: New file. New module 'sys_resource'. * lib/sys_resource.in.h: New file. * m4/sys_resource_h.m4: New file. * modules/sys_resource: New file. * doc/posix-headers/sys_resource.texi: Mention the new module. 2012-04-12 LRN (tiny change) ioctl: Fix compilation error on mingw. * lib/ioctl.c: Include . Also reported by Ray Satiro . 2012-04-04 Jim Meyering regex: correct #pragma guard expression * lib/regex.c: -Wsuggest-attribute=pure was introduced in gcc-4.6, not 4.3. Correct its cpp guard expression. 2012-04-04 Paul Eggert regex: remove unnecessary type punning Problem reported by Vladimir Serbinenko in . * lib/regex.h (struct re_pattern_buffer): Change the type of __REPB_PREFIX(buffer) from unsigned char * to struct re_dfa_t *. Fix comment to match code. * lib/regcomp.c (re_compile_fastmap, re_compile_fastmap_iter, regfree) (re_compile_internal, free_workarea_compile, analyze, lower_subexp) (parse, parse_reg_exp, parse_branch, parse_expression, parse_sub_exp): * lib/regexec.c (regexec, re_search_stub, re_search_internal) (set_regs): Omit no-longer-necessary casts. 2012-04-03 Bruno Haible Tests for module 'ilogbl'. * modules/ilogbl-tests: New file. * tests/test-ilogbl.c: New file. New module 'ilogbl'. * lib/math.in.h (ilogbl): New declaration. * lib/ilogbl.c: New file. * m4/ilogbl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether ilogbl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ILOGBL, HAVE_ILOGBL. * modules/math (Makefile.am): Substitute GNULIB_ILOGBL, HAVE_ILOGBL. Split sed invocation, to avoid the limit of 100 substitutions of HP-UX 'sed'. * modules/ilogbl: New file. * tests/test-math-c++.cc: Check the declaration of ilogbl. * doc/posix-functions/ilogbl.texi: Mention the new module. 2012-04-03 Bruno Haible Tests for module 'ilogbf'. * modules/ilogbf-tests: New file. * tests/test-ilogbf.c: New file. New module 'ilogbf'. * lib/math.in.h (ilogbf): New declaration. * lib/ilogbf.c: New file. * m4/ilogbf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether ilogbf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ILOGBF, HAVE_ILOGBF, REPLACE_ILOGBF. * modules/math (Makefile.am): Substitute GNULIB_ILOGBF, HAVE_ILOGBF, REPLACE_ILOGBF. * modules/ilogbf: New file. * tests/test-math-c++.cc: Check the declaration of ilogbf. * doc/posix-functions/ilogbf.texi: Mention the new module. 2012-04-03 Bruno Haible Tests for module 'ilogb'. * modules/ilogb-tests: New file. * tests/test-ilogb.c: New file. * tests/test-ilogb.h: New file, based on tests/test-logb.h and tests/test-logb-ieee.h. New module 'ilogb'. * lib/math.in.h (ilogb): New declaration. * lib/ilogb.c: New file. * m4/ilogb.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether ilogb is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ILOGB, HAVE_ILOGB, REPLACE_ILOGB. * modules/math (Makefile.am): Substitute GNULIB_ILOGB, HAVE_ILOGB, REPLACE_ILOGB. * modules/ilogb: New file. * tests/test-math-c++.cc: Check the declaration of ilogb. * doc/posix-functions/ilogb.texi: Mention the new module. 2012-04-03 Bruno Haible math: Provide FP_ILOGB0 and FP_ILOGBNAN. * lib/math.in.h (FP_ILOGB0, FP_ILOGBNAN): Define fallback. * tests/test-math.c: Check that FP_ILOGB0, FP_ILOGBNAN are defined. (main): Check their values. * doc/posix-headers/math.texi: Mention the FP_ILOGB0, FP_ILOGBNAN problem. 2012-04-03 Bruno Haible Tests for module 'logbl-ieee'. * modules/logbl-ieee-tests: New file. * tests/test-logbl-ieee.c: New file. New module 'logbl-ieee'. * modules/logbl-ieee: New file. Tests for module 'logb-ieee'. * modules/logb-ieee-tests: New file. * tests/test-logb-ieee.c: New file. New module 'logb-ieee'. * modules/logb-ieee: New file. Tests for module 'logbf-ieee'. * modules/logbf-ieee-tests: New file. * tests/test-logbf-ieee.c: New file. * tests/test-logb-ieee.h: New file. New module 'logbf-ieee'. * modules/logbf-ieee: New file. 2012-04-03 Bruno Haible Tests for module 'logbl'. * modules/logbl-tests: New file. * tests/test-logbl.c: New file. New module 'logbl'. * lib/math.in.h (logbl): New declaration. * lib/logbl.c: New file. * m4/logbl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether logbl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOGBL, HAVE_LOGBL, REPLACE_LOGBL. * modules/math (Makefile.am): Substitute GNULIB_LOGBL, HAVE_LOGBL, REPLACE_LOGBL. * modules/logbl: New file. * tests/test-math-c++.cc: Check the declaration of logbl. * doc/posix-functions/logbl.texi: Mention the new module. 2012-04-02 Bruno Haible Tests for module 'logbf'. * modules/logbf-tests: New file. * tests/test-logbf.c: New file. New module 'logbf'. * lib/math.in.h (logbf): New declaration. * lib/logbf.c: New file. * m4/logbf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether logbf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOGBF, HAVE_LOGBF, REPLACE_LOGBF. * modules/math (Makefile.am): Substitute GNULIB_LOGBF, HAVE_LOGBF, REPLACE_LOGBF. * modules/logbf: New file. * tests/test-math-c++.cc: Check the declaration of logbf. * doc/posix-functions/logbf.texi: Mention the new module. 2012-04-02 Bruno Haible logb tests: More tests. * tests/test-logb.h: New file, based on tests/test-logb.c and tests/test-frexp.h. * tests/test-logb.c: Include minus-zero.h, test-logb.h. (main): Just invoke test_function. * modules/logb-tests (Files): Add tests/test-logb.h, tests/minus-zero.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_logb_SOURCES. logb: Provide replacement and workarounds. * lib/math.in.h (logb): Ensure declaration. Replace if REPLACE_LOGB is 1. * lib/logb.c: New file. * m4/logb.m4 (gl_FUNC_LOGB_WORKS): New macro. (gl_FUNC_LOGB): Invoke it. Set HAVE_LOGB, REPLACE_LOGB. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOGB. * modules/math (Makefile.am): Substitute REPLACE_LOGB. * modules/logb (Files): Add lib/logb.c. (Depends-on): Add isfinite, frexp, isnand. (configure.ac): Compile the replacement code logb.c if needed. * tests/test-math-c++.cc: Check the declaration of logb. * doc/posix-functions/logb.texi: Mention the replacement and the bug with subnormal numbers. 2012-04-02 Bruno Haible log10* tests: Speed up. * tests/test-log10.h (test_function): Reduce amount of random numbers to test. 2012-04-01 Bruno Haible logf-ieee: Fix test whether logf works. * m4/logf.m4 (gl_FUNC_LOGF): Fix typo in test program. 2012-04-01 Bruno Haible log10l: Work around log10l-ieee test failure on IRIX 6.5. * lib/log10l.c: Include (log10l): On IRIX, normalize the +Infinity value. * modules/log10l (Depends-on): Add 'float'. * doc/posix-functions/log10l.texi: Mention the IRIX problem with +Infinity. log10f-ieee: Work around test failure on NetBSD 5.1. * m4/log10f-ieee.m4: New file. * m4/log10f.m4 (gl_FUNC_LOG10F): If gl_FUNC_LOG10F_IEEE is present, test whether log10f works with a negative argument. Replace it if not. * lib/log10f.c (log10f): For negative arguments, return NaN. * modules/log10f-ieee (Files): Add m4/log10f-ieee.m4. (configure.ac): Invoke gl_FUNC_LOG10F_IEEE. * doc/posix-functions/log10f.texi: Mention the log10f-ieee module. log10f-ieee: Work around test failure on Solaris 9. * modules/log10f-ieee (Depends-on): Add log10-ieee. (configure.ac): Require gl_FUNC_LOG10F. log10-ieee: Work around test failure on NetBSD 5.1 and Solaris 11. * m4/log10-ieee.m4: New file. * m4/log10.m4 (gl_FUNC_LOG10): If gl_FUNC_LOG10_IEEE is present, test whether log10 works with a negative argument. Replace it if not. * lib/log10.c (log10): For negative arguments, return NaN. * modules/log10-ieee (Files): Add m4/log10-ieee.m4. (configure.ac): Invoke gl_FUNC_LOG10_IEEE. * doc/posix-functions/log10.texi: Mention the log10-ieee module. Tests for module 'log10l-ieee'. * modules/log10l-ieee-tests: New file. * tests/test-log10l-ieee.c: New file. New module 'log10l-ieee'. * modules/log10l-ieee: New file. Tests for module 'log10-ieee'. * modules/log10-ieee-tests: New file. * tests/test-log10-ieee.c: New file. New module 'log10-ieee'. * modules/log10-ieee: New file. Tests for module 'log10f-ieee'. * modules/log10f-ieee-tests: New file. * tests/test-log10f-ieee.c: New file. * tests/test-log10-ieee.h: New file. New module 'log10f-ieee'. * modules/log10f-ieee: New file. 2012-04-01 Bruno Haible log10l: Work around AIX 5.1, IRIX 6.5, OSF/1 5.1 bug. * lib/math.in.h (log10l): Override if REPLACE_LOG10L is 1. * lib/log10l.c (log10l): If log10l exists, use it and provide just the workaround. * m4/log10l.m4 (gl_FUNC_LOG10L_WORKS): New macro. (gl_FUNC_LOG10L): Invoke it. Set REPLACE_LOG10L. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOG10L. * modules/math (Makefile.am): Substitute REPLACE_LOG10L. * modules/log10l (configure.ac): Consider REPLACE_LOG10L. (Depends-on): Update conditions. * doc/posix-functions/log10l.texi: Mention the MSVC9, AIX 5.1, IRIX 6.5, OSF/1 5.1 problems. 2012-04-01 Bruno Haible log10f: Work around OSF/1 5.1 bug. * lib/math.in.h (log10f): Override if REPLACE_LOG10F is 1. * lib/log10f.c (log10f): If logf exists, use it and provide just the workaround. * m4/log10f.m4 (gl_FUNC_LOG10F_WORKS): New macro. (gl_FUNC_LOG10F): Invoke it. Set REPLACE_LOG10F. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOG10F. * modules/math (Makefile.am): Substitute REPLACE_LOG10F. * modules/log10f (configure.ac): Consider REPLACE_LOG10F. (Depends-on): Update conditions. * doc/posix-functions/log10f.texi: Mention the OSF/1 5.1 problem. 2012-04-01 Bruno Haible log10: Work around OSF/1 5.1 bug. * lib/math.in.h (log10): New declaration. * lib/log10.c: New file. * m4/log10.m4 (gl_FUNC_LOG10_WORKS): New macro. (gl_FUNC_LOG10): Invoke it. Set REPLACE_LOG10. * m4/math_h.m4 (gl_MATH_H): Test whether log10 is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG10, REPLACE_LOG10. * modules/math (Makefile.am): Substitute GNULIB_LOG10, REPLACE_LOG10. * modules/log10 (Files): Add lib/log10.c. (Depends-on): Add math. (configure.ac): If REPLACE_LOG10 is 1, compile an override. * tests/test-math-c++.cc: Check the declaration of log10. * doc/posix-functions/log10.texi: Mention the OSF/1 5.1 problem. 2012-03-31 Bruno Haible log10l tests: More tests. * modules/log10l-tests (Files): Add tests/test-log10l.h, tests/minus-zero.h, tests/randoml.c. (Makefile.am): Add randoml.c to test_log10l_SOURCES. * tests/test-log10l.c: Include , minus-zero.h, test-log10l.h. (main): Invoke test_function. log10f tests: More tests. * modules/log10f-tests (Files): Add tests/test-log10.h, tests/minus-zero.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_log10f_SOURCES. * tests/test-log10f.c: Include , minus-zero.h, test-log10.h. (main): Invoke test_function. log10 tests: More tests. * tests/test-log10.h: New file. * modules/log10-tests (Files): Add tests/test-log10.h, tests/minus-zero.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_log10_SOURCES. * tests/test-log10.c: Include , minus-zero.h, test-log10.h. (main): Invoke test_function. 2012-03-31 Simon Josefsson fflush: Fix syntax error. * lib/fflush.c: Include unused-parameter.h, needed for _GL_UNUSED_PARAMETER. * modules/fflush (Depends-on): Add snippet/unused-parameter. 2012-03-30 Paul Eggert regex: pacify GCC when compiling GRUB * lib/regcomp.c (init_dfa): Make a pointer 'const', to avoid a diagnostic. Reported by Vladimir Serbinenko in . 2012-03-29 Eric Blake stdio: don't assume gets any more * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets support. * modules/stdio (Makefile.am): Likewise. * lib/stdio-read.c (gets): Likewise. * tests/test-stdio-c++.cc: Likewise. * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment. * lib/stdio.in.h (gets): Make warning occur in more places. * doc/posix-functions/gets.texi (gets): Update documentation. Reported by Christer Solskogen. maint.mk: fix syntax checks without exclusions * top/maint.mk (_sc_search_regexp): Allow for empty variable. Reported by Daniel P. Berrange. strerror_r: avoid compiler warning * lib/strerror_r.c (strerror_r): Hoist extern declaration to top level. fflush: avoid compiler warning * lib/fflush.c (update_fpos_cache): Mark variables that are potentially unused. 2012-03-25 Bruno Haible Tests for module 'localeconv'. * modules/localeconv-tests: New file. * tests/test-localeconv.c: New file. New module 'localeconv'. * lib/locale.in.h (localeconv): New declaration. * lib/localeconv.c: New file. * m4/localeconv.m4: New file. * m4/locale_h.m4 (gl_LOCALE_H_DEFAULTS): Initialize GNULIB_LOCALECONV, REPLACE_LOCALECONV. * modules/locale (Makefile.am): Substitute GNULIB_LOCALECONV, REPLACE_LOCALECONV. * modules/localeconv: New file. * modules/nl_langinfo (Depends-on): Add localeconv. * modules/human (Depends-on): Likewise. * doc/posix-functions/localeconv.texi: Mention the new module. 2012-03-25 Bruno Haible locale: Provide a complete 'struct lconv'. * m4/locale_h.m4 (gl_LOCALE_H): Set REPLACE_STRUCT_LCONV to 1 if 'struct lconv' does not contain int_p_cs_precedes. * tests/test-locale.c (main): Check that 'struct lconv' is complete. * doc/posix-headers/locale.texi: Update. locale: Provide a complete 'struct lconv' on Solaris 10, 11. * m4/locale_h.m4 (gl_LOCALE_H): On Solaris, define _LCONV_C99. * doc/posix-headers/locale.texi: Update. locale: Provide a working 'struct lconv'. * lib/locale.in.h (lconv): Override if REPLACE_STRUCT_LCONV is 1. * m4/locale_h.m4 (gl_LOCALE_H): Set REPLACE_STRUCT_LCONV to 1 if 'struct lconv' does not even contain decimal_point. (gl_LOCALE_H_DEFAULTS): Initialize REPLACE_STRUCT_LCONV. * modules/locale (Makefile.am): Substitute REPLACE_STRUCT_LCONV. * tests/test-locale.c (main): Check that 'struct lconv' is complete. * doc/posix-headers/locale.texi: Mention the problems with 'struct lconv'. Reported by Gianluigi Tiesi . 2012-03-24 Bruno Haible Enable common subexpression optimization in GCC. * lib/unitypes.in.h (_UC_ATTRIBUTE_CONST, _UC_ATTRIBUTE_PURE): New macros. * lib/unicase.in.h (uc_toupper, uc_tolower, uc_totitle): Declare with GCC attribute 'const'. (uc_locale_language): Declare with GCC attribute 'pure'. * lib/unicase/caseprop.h (uc_is_cased, uc_is_case_ignorable): Declare with GCC attribute 'const'. * lib/unictype.in.h (uc_is_general_category_withtable, uc_combining_class, uc_combining_class_name, uc_combining_class_long_name, uc_bidi_class_name, uc_bidi_category_name, uc_bidi_class_long_name, uc_bidi_class, uc_bidi_category, uc_is_bidi_class, uc_is_bidi_category, uc_decimal_value, uc_digit_value, uc_numeric_value, uc_joining_type_name, uc_joining_type_long_name, uc_joining_type, uc_joining_group_name, uc_joining_group, uc_is_property_*, uc_script, uc_block, uc_is_c_whitespace, uc_is_java_whitespace, uc_c_ident_category, uc_java_ident_category, uc_is_alnum, uc_is_alpha, uc_is_cntrl, uc_is_digit, uc_is_graph, uc_is_lower, uc_is_print, uc_is_punct, uc_is_space, uc_is_upper, uc_is_xdigit, uc_is_blank): Declare with GCC attribute 'const'. (uc_general_category_name, uc_general_category_long_name, uc_general_category_byname, uc_general_category, uc_is_general_category, uc_combining_class_byname, uc_bidi_class_byname, uc_bidi_category_byname, uc_joining_type_byname, uc_joining_group_byname, uc_script_byname, uc_is_script, uc_is_block): Declare with GCC attribute 'pure'. * lib/unigbrk.in.h (uc_graphemeclusterbreak_property, uc_is_grapheme_break, u8_grapheme_next, u16_grapheme_next, u32_grapheme_next, u8_grapheme_prev, u16_grapheme_prev, u32_grapheme_prev, lib/uniname.in.h (unicode_name_character): Declare with GCC attribute 'pure'. * lib/uninorm.in.h (uc_composition): Declare with GCC attribute 'const'. (uninorm_decomposing_form): Declare with GCC attribute 'pure'. * lib/unistr.in.h (): Declare with GCC attribute 'const'. (u8_check, u16_check, u32_check, u8_mblen, u16_mblen, u32_mblen, u8_cmp, u16_cmp, u32_cmp, u8_cmp2, u16_cmp2, u32_cmp2, u8_chr, u16_chr, u32_chr, u8_mbsnlen, u16_mbsnlen, u32_mbsnlen, u8_strmblen, u16_strmblen, u32_strmblen, u8_strlen, u16_strlen, u32_strlen, u8_strnlen, u16_strnlen, u32_strnlen, u8_strcmp_gnu, u8_strcmp, u16_strcmp, u32_strcmp, u8_strncmp, u16_strncmp, u32_strncmp, u8_strchr, u16_strchr, u32_strchr, u8_strrchr, u16_strrchr, u32_strrchr, u8_strcspn, u16_strcspn, u32_strcspn, u8_strspn, u16_strspn, u32_strspn, u8_strpbrk, u16_strpbrk, u32_strpbrk, u8_strstr, u16_strstr, u32_strstr, u8_startswith, u16_startswith, u32_startswith, u8_endswith, u16_endswith, u32_endswith): Declare with GCC attribute 'pure'. * lib/uniwbrk.in.h (uc_wordbreak_property): Declare with GCC attribute 'const'. * lib/uniwidth.in.h (uc_width): Simplify declaration. (u8_width, u16_width, u32_width, u8_strwidth, u16_strwidth, u32_strwidth): Declare with GCC attribute 'pure'. Enable common subexpression optimization in GCC. * lib/dirent.in.h (_GL_ATTRIBUTE_PURE): Define, like in string.in.h. (alphasort): Declare with GCC attribute 'pure'. * lib/stdlib.in.h (_GL_ATTRIBUTE_PURE): Define, like in string.in.h. (atoll): Declare with GCC attribute 'pure'. * lib/string.in.h (mbslen, mbsnlen, mbschr, mbsrchr, mbsstr, mbscasecmp, mbsncasecmp, mbspcasecmp, mbscasestr, mbscspn, mbspbrk, mbsspn, strverscmp): Declare with GCC attribute 'pure'. * lib/wchar.in.h (_GL_ATTRIBUTE_PURE): Define, like in string.in.h. (btowc, wctob, wcwidth, wmemchr, wmemcmp, wcslen, wcsnlen, wcscmp, wcsncmp, wcscasecmp, wcsncasecmp, wcschr, wcsrchr, wcscspn, wcsspn, wcspbrk, wcsstr, wcswidth): Declare with GCC attribute 'pure'. 2012-03-24 Bruno Haible gnulib-tool: Avoid unintended error output from 'cmp'. * gnulib-tool (func_add_file, func_update_file, func_import): Use "cmp -s", not "cmp > /dev/null". 2012-03-23 Stefano Lattarini gnulib-tool: fix imprecise comments w.r.t. an automake bug It's not just Automake versions < 1.9b that creates an empty pkgdatadir at installation time if pkgdata_DATA is specified to empty; modern automake versions do this as well, at least until automake 1.11.4 (not yet released at the moment of writing, but soon to appear). That behaviour was generally considered a feature rather than a bug, at least until this discussion: See also automake bugs #10997 and #11030. * gnulib-tool (func_emit_lib_Makefile_am): Adjust comments. Add reference to relevant automake bug numbers. (func_emit_tests_Makefile_am): Likewise. 2012-03-20 Reuben Thomas announce-gen: use Digest::SHA when possible * build-aux/announce-gen: Use Digest::SHA when possible, falling back to Digest::SHA1 if necessary. 2012-03-20 Jim Meyering tests: avoid gcc warnings about argv vs. const initializers * tests/test-posix_spawn1.c (main): Cast to "(char *)" to avoid two warnings about discarding 'const' qualifier from pointer target type. * tests/test-posix_spawn2.c (main): Likewise. 2012-03-20 Reuben Thomas README-release: simplify slightly * top/README-release: Run "git checkout master" only once. 2012-03-15 Mark Wielaard git-merge-changelog: add specific example on how to use with hg. * lib/git-merge-changelog.c: Add example on how to use in .hgrc. 2012-03-18 Mark Wielaard lib/git-merge-changelog.c (status): Report bugs to bug-gnulib@gnu.org. 2012-03-18 Andreas Oberritter git-version-gen: don't let "prefix" envvar cause trouble * build-aux/git-version-gen (prefix): Initialize properly, so as not to use a value specified via the environment. Details here: http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10810 2012-03-16 Paul Eggert regex: diagnose too-large repeat counts in EREs Previously, the code did not diagnose the too-large repeat count in EREs like 'b{1000000000}'; instead, it silently treated the ERE as if it were 'b\{1000000000}', which is unexpected. * lib/regcomp.c (parse_dup_op): Fail with REG_ESIZE if a repeat count is too large. REG_ESIZE is used nowhere else, and the diagnostic is a reasonable one for this problem. Another option would be to create a new REG_OVERFLOW error for repeat counts that are too large. (fetch_number): Return RE_DUP_MAX + 1, not REG_ERROR, if the repeat count is too large, so that the caller can distinguish the two cases. * lib/regex.h (_REG_ESIZE): Document that this is now a generic "Too large" return code, and that repeat counts are one example of this. 2012-03-16 Paul Eggert doc: some glibc x32 integer width issues * doc/posix-headers/sys_types.texi (sys/types.h): * doc/posix-headers/time.texi (time.h): Mention that glibc x32 does not conform to POSIX in a couple of areas related to integer widths. 2012-03-15 Bruno Haible fmal: Avoid test failure on OpenBSD 5.1/SPARC64. * lib/fma.c (VOLATILE): New macro. (FUNC): Use it to work around a GCC compiler bug. 2012-03-13 Bruno Haible hypotl: Bypass broken implementation in OpenBSD 5.1/SPARC. * m4/hypotl.m4 (gl_FUNC_HYPOTL_WORKS): New macro. (gl_FUNC_HYPOTL): Invoke it. If the function does not work, set REPLACE_HYPOTL to 1. * doc/posix-functions/hypotl.texi: Mention the OpenBSD 5.1/SPARC bug. 2012-03-13 Bruno Haible remainderl: Bypass broken implementation in OpenBSD 5.1/SPARC. * m4/remainderl.m4 (gl_FUNC_REMAINDERL_WORKS): New macro. (gl_FUNC_REMAINDERL): Invoke it. If the function does not work, set REPLACE_REMAINDERL to 1. * doc/posix-functions/remainderl.texi: Mention the OpenBSD 5.1/SPARC bug. 2012-03-13 Bruno Haible sqrtl: Bypass broken implementation in OpenBSD 5.1/SPARC. * lib/math.in.h (sqrtl): Replace it if REPLACE_SQRTL is 1. * m4/sqrtl.m4 (gl_FUNC_SQRTL_WORKS): New macro. (gl_FUNC_SQRTL): Invoke it. Set REPLACE_SQRTL to 1 if sqrtl() produces too big rounding errors. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_SQRTL. * modules/math (Makefile.am): Substitute REPLACE_SQRTL. * modules/sqrtl (configure.ac): Consider REPLACE_SQRTL. (Depends-on): Update conditions. * tests/test-sqrtl.c (my_ldexpl): New function. (main): Add test of a particular value. * doc/posix-functions/sqrtl.texi: Mention the OpenBSD 5.1/SPARC bug. 2012-03-13 Pádraig Brady doc: Update timer_* platform portability notes. * doc/posix-functions/timer_create.texi: Add platforms (OpenBSD 4.9) that always return ENOSYS. * doc/posix-functions/timer_delete.texi: Likewise. * doc/posix-functions/timer_gettime.texi: Likewise. * doc/posix-functions/timer_settime.texi: Likewise. 2012-03-13 Bruno Haible cbrtl: Bypass broken implementation in OpenBSD 5.1/SPARC. * m4/cbrtl.m4 (gl_FUNC_CBRTL_WORKS): New macro. (gl_FUNC_CBRTL): Invoke it. If the function does not work, set REPLACE_CBRTL to 1. * doc/posix-functions/cbrtl.texi: Mention the OpenBSD 5.1/SPARC bug. 2012-03-13 Bruno Haible remainderl: Avoid compilation error on AIX >= 5.2. * lib/math.in.h (remainderl): Undefine macro from the system header. 2012-03-13 Bruno Haible Avoid compilation errors with MSVC option -fp:strict. * lib/cbrt.c: Use MSVC specific pragma fenv_access. * lib/cbrtf.c: Likewise. Reported by Michael Goffioul . 2012-03-12 Bruno Haible uninorm: Don't crash in out-of-memory conditions. * lib/uninorm/u-normalize-internal.h (FUNC): Handle malloc() failure gracefully. * lib/uninorm/uninorm-filter.c (uninorm_filter_write): Likewise. Based on a report and patch by Stephen Gallagher . 2012-03-13 Akim Demaille quote: fix syntax-check * top/maint.mk (sc_prohibit_quote_without_use): quote.h also exports quote_quoting_options. 2012-03-12 Simon Josefsson Collapse list of copyright years to ranges. See . * build-aux/bootstrap.conf, build-aux/csharpcomp.sh.in, build-aux/csharpexec.sh.in, build-aux/gnupload, build-aux/install-reloc, build-aux/javacomp.sh.in, build-aux/javaexec.sh.in, build-aux/ldd.sh.in, build-aux/move-if-change, build-aux/reloc-ldflags, build-aux/relocatable.sh.in, build-aux/x-to-1.in: Fix copyright. 2012-03-11 Bruno Haible log2f-ieee: Work around test failure on NetBSD 5.1 and Solaris 10. * m4/log2f-ieee.m4: New file. * m4/log2f.m4 (gl_FUNC_LOG2F): If gl_FUNC_LOG2F_IEEE is present, test whether log2f works with a minus zero argument. Replace it if not. * modules/log2f-ieee (Files): Add m4/log2f-ieee.m4. (Depends-on): Add log2-ieee. (configure.ac): Invoke gl_FUNC_LOG2F_IEEE. * doc/posix-functions/log2f.texi: Mention the log2f-ieee module. log2-ieee: Work around test failure on NetBSD 5.1 and Solaris 10. * m4/log2-ieee.m4: New file. * m4/log2.m4 (gl_FUNC_LOG2): If gl_FUNC_LOG2_IEEE is present, test whether log2 works with a minus zero argument. Replace it if not. * modules/log2-ieee (Files): Add m4/log2-ieee.m4. (configure.ac): Invoke gl_FUNC_LOG2_IEEE. * doc/posix-functions/log2.texi: Mention the log2-ieee module. Tests for module 'log2l-ieee'. * modules/log2l-ieee-tests: New file. * tests/test-log2l-ieee.c: New file. New module 'log2l-ieee'. * modules/log2l-ieee: New file. Tests for module 'log2-ieee'. * modules/log2-ieee-tests: New file. * tests/test-log2-ieee.c: New file. New module 'log2-ieee'. * modules/log2-ieee: New file. Tests for module 'log2f-ieee'. * modules/log2f-ieee-tests: New file. * tests/test-log2f-ieee.c: New file. * tests/test-log2-ieee.h: New file. New module 'log2f-ieee'. * modules/log2f-ieee: New file. 2012-03-11 Bruno Haible Tests for module 'log2l'. * modules/log2l-tests: New file. * tests/test-log2l.c: New file. New module 'log2l'. * lib/math.in.h (log2l): New declaration. * lib/log2l.c: New file. * m4/log2l.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log2l is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG2L, HAVE_DECL_LOG2L, REPLACE_LOG2L. * modules/math (Makefile.am): Substitute GNULIB_LOG2L, HAVE_DECL_LOG2L, REPLACE_LOG2L. * modules/log2l: New file. * tests/test-math-c++.cc: Check the declaration of log2l. * doc/posix-functions/log2l.texi: Mention the new module and the IRIX and OSF/1 problems. 2012-03-11 Bruno Haible Tests for module 'log2f'. * modules/log2f-tests: New file. * tests/test-log2f.c: New file. New module 'log2f'. * lib/math.in.h (log2f): New declaration. * lib/log2f.c: New file. * m4/log2f.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log2f is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG2F, HAVE_DECL_LOG2F, REPLACE_LOG2F. * modules/math (Makefile.am): Substitute GNULIB_LOG2F, HAVE_DECL_LOG2F, REPLACE_LOG2F. * modules/log2f: New file. * tests/test-math-c++.cc: Check the declaration of log2f. * doc/posix-functions/log2f.texi: Mention the new module and the IRIX and OSF/1 and Cygwin problems. 2012-03-11 Bruno Haible Tests for module 'log2'. * modules/log2-tests: New file. * tests/test-log2.c: New file. * tests/test-log2.h: New file. New module 'log2'. * lib/math.in.h (log2): New declaration. * lib/log2.c: New file. * m4/log2.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log2 is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG2, HAVE_DECL_LOG2, REPLACE_LOG2. * modules/math (Makefile.am): Substitute GNULIB_LOG2, HAVE_DECL_LOG2, REPLACE_LOG2. * modules/log2: New file. * tests/test-math-c++.cc: Check the declaration of log2. * doc/posix-functions/log2.texi: Mention the new module and the IRIX and OSF/1 and Cygwin problems. 2012-03-11 Bruno Haible exp2* tests: More tests. * tests/test-exp2.h (test_function): Test all integral arguments that don't need to overflow or denormalized numbers. * tests/test-exp2.c (MAX_EXP, MIN_EXP): New macros. * tests/test-exp2f.c (MAX_EXP, MIN_EXP): Likewise. * tests/test-exp2l.c (MAX_EXP, MIN_EXP): Likewise. 2012-03-10 Bruno Haible log1pl-ieee: Work around test failure on AIX 7.1. * modules/log1pl-ieee (Depends-on): Add log1p-ieee. log1pl-ieee: Work around test failure on IRIX 6.5. * m4/log1pl-ieee.m4: New file. * m4/log1pl.m4 (gl_FUNC_LOG1PL): If gl_FUNC_LOG1PL_IEEE is present, test whether log1pl works with a minus zero argument. Replace it if not. * lib/math.in.h (log1pl): Override if REPLACE_LOG1PL is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOG1PL. * modules/math (Makefile.am): Substitute REPLACE_LOG1PL. * modules/log1pl (configure.ac): Consider REPLACE_LOG1PL. (Depends-on): Update conditions. * modules/log1pl-ieee (Files): Add m4/log1p-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_LOG1PL_IEEE. * doc/posix-functions/log1pl.texi: Mention the log1pl-ieee module. log1pf-ieee: Work around test failure on OpenBSD 4.9 and AIX 7.1. * m4/log1pf-ieee.m4: New file. * m4/log1pf.m4 (gl_FUNC_LOG1PF): If gl_FUNC_LOG1PF_IEEE is present, test whether log1pf works with a minus zero argument. Replace it if not. * modules/log1pf-ieee (Files): Add m4/log1pf-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_LOG1PF_IEEE. * doc/posix-functions/log1pf.texi: Mention the log1pf-ieee module. log1pf-ieee: Work around test failure on AIX 5.1 and HP-UX 11. * modules/log1pf-ieee (Depends-on): Add log1p-ieee. (configure.ac): Require gl_FUNC_LOG1PF. log1p-ieee: Work around test failure on AIX 7.1 and HP-UX 11. * m4/log1p-ieee.m4: New file. * m4/log1p.m4 (gl_FUNC_LOG1P): If gl_FUNC_LOG1P_IEEE is present, test whether log1p works with a minus zero argument. Replace it if not. * lib/math.in.h (log1p): Override if REPLACE_LOG1P is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOG1P. * modules/math (Makefile.am): Substitute REPLACE_LOG1P. * modules/log1p (configure.ac): Consider REPLACE_LOG1P. (Depends-on): Update conditions. * modules/log1p-ieee (Files): Add m4/log1p-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_LOG1P_IEEE. * doc/posix-functions/log1p.texi: Mention the log1p-ieee module. Tests for module 'log1pl-ieee'. * modules/log1pl-ieee-tests: New file. * tests/test-log1pl-ieee.c: New file. New module 'log1pl-ieee'. * modules/log1pl-ieee: New file. Tests for module 'log1p-ieee'. * modules/log1p-ieee-tests: New file. * tests/test-log1p-ieee.c: New file. New module 'log1p-ieee'. * modules/log1p-ieee: New file. Tests for module 'log1pf-ieee'. * modules/log1pf-ieee-tests: New file. * tests/test-log1pf-ieee.c: New file. * tests/test-log1p-ieee.h: New file. New module 'log1pf-ieee'. * modules/log1pf-ieee: New file. 2012-03-10 Bruno Haible Tests for module 'log1pl'. * modules/log1pl-tests: New file. * tests/test-log1pl.c: New file. New module 'log1pl'. * lib/math.in.h (log1pl): New declaration. * lib/log1pl.c: New file. * m4/log1pl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log1pl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG1PL, HAVE_LOG1PL. * modules/math (Makefile.am): Substitute GNULIB_LOG1PL, HAVE_LOG1PL. * modules/log1pl: New file. * tests/test-math-c++.cc: Check the declaration of log1pl. * doc/posix-functions/log1pl.texi: Mention the new module. 2012-03-10 Bruno Haible Tests for module 'log1pf'. * modules/log1pf-tests: New file. * tests/test-log1pf.c: New file. New module 'log1pf'. * lib/math.in.h (log1pf): New declaration. * lib/log1pf.c: New file. * m4/log1pf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log1pf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG1PF, HAVE_LOG1PF, REPLACE_LOG1PF. * modules/math (Makefile.am): Substitute GNULIB_LOG1PF, HAVE_LOG1PF, REPLACE_LOG1PF. * modules/log1pf: New file. * tests/test-math-c++.cc: Check the declaration of log1pf. * doc/posix-functions/log1pf.texi: Mention the new module. 2012-03-10 Bruno Haible log1p tests: More tests. * tests/test-log1p.h: New file. * modules/log1p-tests (Files): Add tests/test-log1p.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_log1p_SOURCES. * tests/test-log1p.c: Include and test-log1p.h. (main): Invoke test_function. log1p: Provide replacement for Minix and MSVC. * lib/math.in.h (log1p): New declaration. * lib/log1p.c: New file. * m4/log1p.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log1p is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG1P, HAVE_LOG1P. * modules/math (Makefile.am): Substitute GNULIB_LOG1P, HAVE_LOG1P. * modules/log1p (Files): Add lib/log1p.c, m4/log1p.m4. (Depends-on): Add math, isnand, log, round. (configure.ac): Invoke gl_FUNC_LOG1P. Arrange to compile replacement if HAVE_LOG1P is 0. * tests/test-math-c++.cc: Check the declaration of log1p. * doc/posix-functions/log1p.texi: Mention the replacement. 2012-03-10 Bruno Haible math tests: Small simplification. * tests/test-exp.h (test_function): Use the same err_bound for 'double' on platforms with sizeof (long double) == sizeof (double) than on platforms with sizeof (long double) > sizeof (double). * tests/test-exp2.h (test_function): Likewise. * tests/test-expm1.h (test_function): Likewise. * tests/test-log.h (test_function): Likewise. 2012-03-10 Bruno Haible Fix some comments. * lib/expl.c: Fix an ambiguous comment. * lib/expm1.c: Likewise. * lib/expm1l.c: Likewise. * lib/exp2.c: Likewise. * lib/exp2l.c: Likewise. 2012-03-10 Paul Eggert regex: allow inclusion of before Without this patch, portable programs had to include before if they wanted a consistent value for RE_DUP_MAX. I ran into this problem with a test version of GNU grep on Solaris 8. * lib/regex.h: Include if _REGEX_INCLUDE_LIMITS_H. This is done conditionally so that this change can be merged back to glibc. * m4/regex.m4 (gl_REGEX): Define _REGEX_INCLUDE_LIMITS_H if using the included regex. fts: depend on fdopendir * modules/fts (Depends-on): Depend on fdopendir. This is needed on Solaris 8, at least, since it lacks fdopendir. Evidently the problem was introduced when fdopendir was split out. 2012-03-10 Bruno Haible Remove unused variables. * m4/fmodf.m4 (gl_FUNC_FMODF): Remove unused variable 'i'. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Likewise. 2012-03-10 Bruno Haible isnanf-nolibm: Fix last commit. * lib/isnanf-nolibm.h [IRIX]: Don't include . Declare isnanf. isnanf-nolibm: Make it work on IRIX 6.5 with cc. * lib/isnanf-nolibm.h [IRIX]: Include . 2012-03-10 Bruno Haible logf-ieee: Work around test failure on NetBSD 5.1. * m4/logf-ieee.m4: New file. * m4/logf.m4 (gl_FUNC_LOGF): If gl_FUNC_LOGF_IEEE is present, test whether logf works with a negative argument. Replace it if not. * lib/logf.c (logf): For negative arguments, return NaN. * modules/logf-ieee (Files): Add m4/logf-ieee.m4. (configure.ac): Invoke gl_FUNC_LOGF_IEEE. * doc/posix-functions/logf.texi: Mention the logf-ieee module. logf-ieee: Work around test failure on Solaris 9. * modules/logf-ieee (Depends-on): Add log-ieee. (configure.ac): Require gl_FUNC_LOGF. log-ieee: Work around test failure on NetBSD 5.1 and Solaris 11. * m4/log-ieee.m4: New file. * m4/log.m4 (gl_FUNC_LOG): If gl_FUNC_LOG_IEEE is present, test whether log works with a negative argument. Replace it if not. * lib/log.c (log): For negative arguments, return NaN. * modules/log-ieee (Files): Add m4/log-ieee.m4. (configure.ac): Invoke gl_FUNC_LOG_IEEE. * doc/posix-functions/log.texi: Mention the log-ieee module. Tests for module 'logl-ieee'. * modules/logl-ieee-tests: New file. * tests/test-logl-ieee.c: New file. New module 'logl-ieee'. * modules/logl-ieee: New file. Tests for module 'log-ieee'. * modules/log-ieee-tests: New file. * tests/test-log-ieee.c: New file. New module 'log-ieee'. * modules/log-ieee: New file. Tests for module 'logf-ieee'. * modules/logf-ieee-tests: New file. * tests/test-logf-ieee.c: New file. * tests/test-log-ieee.h: New file. New module 'logf-ieee'. * modules/logf-ieee: New file. 2012-03-10 Bruno Haible log: Fix bug introduced on 2012-03-09. * m4/log.m4 (gl_FUNC_LOG): Require gl_MATH_H_DEFAULTS. 2012-03-10 Pádraig Brady timer-time: link explicitly with pthreads on glibc * m4/timer_time.m4 (LIB_TIMER_TIME): Add -lpthread to support static linking, when newer glibc is detected, as that contains pthread emulation of POSIX timer functions where required. * modules/timer-time: Depend on threadlib to pull in the appropriate library to link. 2012-03-10 Bruno Haible log* tests: More tests. * tests/test-log.h: New file. * tests/test-log.c: Include , minus-zero.h, test-log.h. (main): Invoke test_function. * tests/test-logf.c: Include , minus-zero.h, test-log.h. (main): Invoke test_function. * tests/test-logl.c: Include , minus-zero.h, test-log.h. (main): Invoke test_function. * modules/log-tests (Files): Add tests/test-log.h, tests/minus-zero.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_log_SOURCES. * modules/logf-tests (Files): Add tests/test-log.h, tests/minus-zero.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_logf_SOURCES. * modules/logl-tests (Files): Add tests/test-log.h, tests/minus-zero.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_logl_SOURCES. 2012-03-09 Bruno Haible logl: Work around OSF/1 5.1 bug. * lib/math.in.h (logl): Override if REPLACE_LOGL is 1. * lib/logl.c (logl): If logl exists, use it and provide just the workaround. * m4/logl.m4 (gl_FUNC_LOGL_WORKS): New macro. (gl_FUNC_LOGL): Invoke it. Set REPLACE_LOGL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOGL. * modules/math (Makefile.am): Substitute REPLACE_LOGL. * modules/logl (configure.ac): Consider REPLACE_LOGL. (Depends-on): Update conditions. * doc/posix-functions/logl.texi: Mention the OSF/1 5.1 problem. 2012-03-09 Bruno Haible logf: Work around OSF/1 5.1 bug. * lib/math.in.h (logf): Override if REPLACE_LOGF is 1. * lib/logf.c (logf): If logf exists, use it and provide just the workaround. * m4/logf.m4 (gl_FUNC_LOGF_WORKS): New macro. (gl_FUNC_LOGF): Invoke it. Set REPLACE_LOGF. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_LOGF. * modules/math (Makefile.am): Substitute REPLACE_LOGF. * modules/logf (configure.ac): Consider REPLACE_LOGF. (Depends-on): Update conditions. * doc/posix-functions/logf.texi: Mention the OSF/1 5.1 problem. 2012-03-09 Bruno Haible log: Work around OSF/1 5.1 bug. * lib/math.in.h (log): New declaration. * lib/log.c: New file. * m4/log.m4 (gl_FUNC_LOG_WORKS): New macro. (gl_FUNC_LOG): Invoke it. Set REPLACE_LOG. * m4/math_h.m4 (gl_MATH_H): Test whether log is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG, REPLACE_LOG. * modules/math (Makefile.am): Substitute GNULIB_LOG, REPLACE_LOG. * modules/log (Files): Add lib/log.c. (Depends-on): Add math. (configure.ac): If REPLACE_LOG is 1, compile an override. * tests/test-math-c++.cc: Check the declaration of log. * doc/posix-functions/log.texi: Mention the OSF/1 5.1 problem. 2012-03-09 Jim Meyering readtokens.c: adjust wording in a comment * lib/readtokens.c: Insert omitted "that" in a comment. 2012-03-08 Paul Eggert modechange: add notations +40, 00440, etc. * lib/modechange.c (mode_compile): Support new notations +40, -40, =440, 00440. See . 2012-03-08 Bruno Haible exp2l-ieee: Work around test failure on OpenBSD 4.9 and IRIX 6.5. * m4/exp2l-ieee.m4: New file. * m4/exp2l.m4 (gl_FUNC_EXP2L): If gl_FUNC_EXP2L_IEEE is present, test whether exp2l works with a NaN argument and with a negative infinity argument. Replace it if not. * lib/math.in.h (exp2l): Override if REPLACE_EXP2L is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_EXP2L. * modules/math (Makefile.am): Substitute REPLACE_EXP2L. * modules/exp2l (configure.ac): Consider REPLACE_EXP2L. (Depends-on): Update conditions. * modules/exp2l-ieee (Files): Add m4/exp2l-ieee.m4. (configure.ac): Invoke gl_FUNC_EXP2L_IEEE. * doc/posix-functions/exp2l.texi: Mention the exp2l-ieee module. Tests for module 'exp2l-ieee'. * modules/exp2l-ieee-tests: New file. * tests/test-exp2l-ieee.c: New file. New module 'exp2l-ieee'. * modules/exp2l-ieee: New file. Tests for module 'exp2-ieee'. * modules/exp2-ieee-tests: New file. * tests/test-exp2-ieee.c: New file. New module 'exp2-ieee'. * modules/exp2-ieee: New file. Tests for module 'exp2f-ieee'. * modules/exp2f-ieee-tests: New file. * tests/test-exp2f-ieee.c: New file. * tests/test-exp2-ieee.h: New file. New module 'exp2f-ieee'. * modules/exp2f-ieee: New file. 2012-03-08 Bruno Haible Tests for module 'exp2l'. * modules/exp2l-tests: New file. * tests/test-exp2l.c: New file. New module 'exp2l'. * lib/math.in.h (exp2l): New declaration. * lib/exp2l.c: New file. * lib/expl-table.c: New file, extracted from lib/expl.c. * lib/expl.c (gl_expl_table): New declaration. (expl): Remove expl_table. Update reference. * m4/exp2l.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether exp2l is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXP2L, HAVE_DECL_EXP2L. * modules/math (Makefile.am): Substitute GNULIB_EXP2L, HAVE_DECL_EXP2L. * modules/exp2l: New file. * modules/expl (Files): Add lib/expl-table.c. (configure.ac): Compile also expl-table.c. * tests/test-math-c++.cc: Check the declaration of exp2l. * doc/posix-functions/exp2l.texi: Mention the new module and the IRIX problem. 2012-03-08 Bruno Haible Tests for module 'exp2f'. * modules/exp2f-tests: New file. * tests/test-exp2f.c: New file. New module 'exp2f'. * lib/math.in.h (exp2f): New declaration. * lib/exp2f.c: New file. * m4/exp2f.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether exp2f is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXP2F, HAVE_DECL_EXP2F. * modules/math (Makefile.am): Substitute GNULIB_EXP2F, HAVE_DECL_EXP2F. * modules/exp2f: New file. * tests/test-math-c++.cc: Check the declaration of exp2f. * doc/posix-functions/exp2f.texi: Mention the new module and the IRIX problem. 2012-03-08 Bruno Haible Tests for module 'exp2'. * modules/exp2-tests: New file. * tests/test-exp2.c: New file. * tests/test-exp2.h: New file. New module 'exp2'. * lib/math.in.h (exp2): New declaration. * lib/exp2.c: New file. * m4/exp2.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether exp2 is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXP2, HAVE_DECL_EXP2, REPLACE_EXP2. * modules/math (Makefile.am): Substitute GNULIB_EXP2, HAVE_DECL_EXP2, REPLACE_EXP2. * modules/exp2: New file. * tests/test-math-c++.cc: Check the declaration of exp2. * doc/posix-functions/exp2.texi: Mention the new module and the IRIX and OpenBSD problems. 2012-03-08 Paul Eggert savedir: fix comment typo * lib/savedir.c (savedirstream): Fix typo in comment. 2012-03-08 Bruno Haible test-readtokens.c: use const; remove unwarranted cast * tests/test-readtokens.c: Declare delim to be const, to avoid a cast. 2012-03-08 Bruno Haible fmal: Avoid compilation error on AIX. * lib/math.in.h (fmal): Undefine macro before declaration. Needed on AIX 5.2..7.1. 2012-03-08 Bruno Haible fma, fmaf, fmal: Override undeclared system functions on IRIX 6.5. * m4/fma.m4 (gl_FUNC_FMA): If fma() exists but is not declared, arrange to set REPLACE_FMA=1, not HAVE_FMA=0. * m4/fmaf.m4 (gl_FUNC_FMAF): If fmaf() exists but is not declared, arrange to set REPLACE_FMAF=1, not HAVE_FMAF=0. * m4/fmal.m4 (gl_FUNC_FMAL): If fmal() exists but is not declared, arrange to set REPLACE_FMAL=1, not HAVE_FMAL=0. 2012-03-08 Bruno Haible remainderf: Override buggy system function on IRIX 6.5. * m4/remainderf.m4 (gl_FUNC_REMAINDERF_WORKS): New macro. (gl_FUNC_REMAINDERF): Invoke it. Don't assume remainderf() is declared when it exists. * doc/posix-functions/remainderf.texi: Mention the IRIX problems. 2012-03-08 Jim Meyering test-readtokens.c: avoid const-related compilation warnings * tests/test-readtokens.c: Avoid const-related compilation warnings. 2012-03-07 Jim Meyering Bruno Haible frexp-nolibm, frexpl-nolibm tests: Fix bug introduced on 2012-03-03. * modules/frexp-nolibm-tests (Files): Add tests/test-frexp.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_frexp_nolibm_SOURCES. * modules/frexpl-nolibm-tests (Files): Add tests/test-frexp.h, tests/randoml.c. (Makefile.am): Add randoml.c to test_frexpl_nolibm_SOURCES. 2012-03-07 Bruno Haible expm1l: Avoid compilation error on AIX. * lib/math.in.h (expm1l): Undefine macro before declaration. Needed on AIX 5.2..7.1. 2012-03-07 Bruno Haible expm1l: Don't override undeclared system function on IRIX 6.5. * lib/math.in.h (expm1l): Test HAVE_DECL_EXPM1L, not HAVE_EXPM1L. * m4/expm1l.m4 (gl_FUNC_EXPM1L): Don't assume expm1l() is declared when it exists. Set HAVE_DECL_EXPM1L. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize HAVE_DECL_EXPM1L, not HAVE_EXPM1L. * modules/math (Makefile.am): Substitute HAVE_DECL_EXPM1L, not HAVE_EXPM1L. * doc/posix-functions/expm1l.texi: Mention missing declaration problem. 2012-03-07 Bruno Haible remainderl: Don't override undeclared system function on IRIX 6.5. * lib/math.in.h (remainderl): Test HAVE_DECL_REMAINDERL, not HAVE_REMAINDERL. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Don't assume remainderl() is declared when it exists. Set HAVE_DECL_REMAINDERL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize HAVE_DECL_REMAINDERL, not HAVE_REMAINDERL. * modules/math (Makefile.am): Substitute HAVE_DECL_REMAINDERL, not HAVE_REMAINDERL. * doc/posix-functions/remainderl.texi: Mention missing declaration problem. 2012-03-07 Bruno Haible rintf: Don't override undeclared system function on IRIX 6.5. * lib/math.in.h (rintf): Test HAVE_DECL_RINTF, not HAVE_RINTF. * m4/rintf.m4 (gl_FUNC_RINTF): Don't assume rintf() is declared when it exists. Set HAVE_DECL_RINTF. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize HAVE_DECL_RINTF, not HAVE_RINTF. * modules/math (Makefile.am): Substitute HAVE_DECL_RINTF, not HAVE_RINTF. * doc/posix-functions/rintf.texi: Mention missing declaration problem. 2012-03-07 Bruno Haible roundl: Avoid compilation error on AIX. * lib/math.in.h (roundl): Undefine macro before declaration. Needed on AIX 5.2..7.1. 2012-03-07 Bruno Haible roundl: Don't override undeclared system function on IRIX 6.5. * m4/roundl.m4 (gl_FUNC_ROUNDL): Search for roundl() in the libraries also when it is not declared. Set HAVE_ROUNDL. For replacement code, test HAVE_ROUNDL, not HAVE_DECL_ROUNDL. * modules/roundl (configure.ac): For replacement code, test HAVE_ROUNDL, not HAVE_DECL_ROUNDL. (Depends-on): Update conditions. * doc/posix-functions/roundl.texi: Mention the IRIX problem. 2012-03-07 Bruno Haible roundf: Don't override undeclared system function on IRIX 6.5. * m4/roundf.m4 (gl_FUNC_ROUNDF): Search for roundf() in the libraries also when it is not declared. Set HAVE_ROUNDF. For replacement code, test HAVE_ROUNDF, not HAVE_DECL_ROUNDF. * modules/roundf (configure.ac): For replacement code, test HAVE_ROUNDF, not HAVE_DECL_ROUNDF. (Depends-on): Update conditions. * modules/roundf-ieee (Depends-on): Update conditions. * doc/posix-functions/roundf.texi: Mention the IRIX problem. 2012-03-07 Bruno Haible round: Don't override undeclared system function on IRIX 6.5. * m4/check-math-lib.m4 (gl_CHECK_MATH_LIB): Accept an optional third argument. * m4/round.m4 (gl_FUNC_ROUND): Search for round() in the libraries also when it is not declared. Set HAVE_ROUND. For replacement code, test HAVE_ROUND, not HAVE_DECL_ROUND. * modules/round (configure.ac): For replacement code, test HAVE_ROUND, not HAVE_DECL_ROUND. (Depends-on): Update conditions. * modules/round-ieee (Depends-on): Update conditions. * doc/posix-functions/round.texi: Mention the IRIX problem. 2012-03-07 Bruno Haible copysignf: Don't override undeclared system function on IRIX 6.5. * lib/math.in.h (copysignf): Test HAVE_DECL_COPYSIGNF, not HAVE_COPYSIGNF. * m4/copysignf.m4 (gl_FUNC_COPYSIGNF): Don't assume copysignf() is declared when it exists. Set HAVE_DECL_COPYSIGNF. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize HAVE_DECL_COPYSIGNF, not HAVE_COPYSIGNF. * modules/math (Makefile.am): Substitute HAVE_DECL_COPYSIGNF, not HAVE_COPYSIGNF. * doc/posix-functions/copysignf.texi: Mention missing declaration problem. 2012-03-07 Jim Meyering readtokens: add tests * modules/readtokens-tests: New file. * tests/test-readtokens.c: New file. 2012-03-07 Jim Meyering quotearg: the module must now include quote.h With commit v0.0-7133-g6417476, quotearg.c includes "quote.h". So must the module. * modules/quotearg (Files): Add quote.h. 2012-03-06 Paul Eggert readtokens: avoid core dumps with unusual calling patterns Reported by Xu Zhongxing in . * lib/readtokens.c: Include limits.h. (word, bits_per_word, get_nth_bit, set_nth_bit): New. (readtoken): Don't cache the delimiters; the cache code was buggy if !delim && saved_delim, or if the new n_delim differs from the old. Also, it wasn't thread-safe. 2012-03-07 Bruno Haible quote: Adhere to common module description layout. * modules/quote (Makefile.am): Add back empty section. 2012-03-06 Akim Demaille quote: fuse into quotearg This patch is made for the benefit of Bison. quote does not leave the choice of the quoting style to the user. quoting_style provides poor customizability, yet quoting_options, which is very rich, is hidden inside quotearg.c. So in order to allow quote customization, move its implementation to quotearg.c. * lib/quote.c: Remove. * modules/quote: Adjust. * lib/quotearg.c (quoting_options_from_style): Fix a compiler warning: provide all the members of literal structs. (quote_quoting_options): New. (quote, quote_n): Import implementation from quote.c. * lib/quote.h: Import the comments from quote.c. (quote_quoting_options): New. 2012-03-06 Bruno Haible Tests for module 'expm1l-ieee'. * modules/expm1l-ieee-tests: New file. * tests/test-expm1l-ieee.c: New file. New module 'expm1l-ieee'. * modules/expm1l-ieee: New file. Tests for module 'expm1f-ieee'. * modules/expm1f-ieee-tests: New file. * tests/test-expm1f-ieee.c: New file. New module 'expm1f-ieee'. * modules/expm1f-ieee: New file. Tests for module 'expm1-ieee'. * modules/expm1-ieee-tests: New file. * tests/test-expm1-ieee.c: New file. * tests/test-expm1-ieee.h: New file. New module 'expm1-ieee'. * modules/expm1-ieee: New file. * m4/expm1-ieee.m4: New file. * m4/expm1.m4 (gl_FUNC_EXPM1): If gl_FUNC_EXPM1_IEEE is present, test whether expm1 works with a minus zero argument. Replace it if not. * lib/math.in.h (expm1): Override if REPLACE_EXPM1 is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_EXPM1. * modules/math (Makefile.am): Substitute REPLACE_EXPM1. * modules/expm1 (configure.ac): Consider REPLACE_EXPM1. (Depends-on): Update conditions. * doc/posix-functions/expm1.texi: Mention the expm1-ieee module and the AIX problem. 2012-03-06 Bruno Haible Work around expm1f bug on IRIX 6.5. * lib/math.in.h (expm1f): Override if REPLACE_EXPM1F is 1. * m4/expm1f.m4 (gl_FUNC_EXPM1F_WORKS): New macro. (gl_FUNC_EXPM1F): Invoke it. Set REPLACE_EXPM1F to 1 if expm1f() does not work. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_EXPM1F. * modules/math (Makefile.am): Substitute REPLACE_EXPM1F. * modules/expm1f (configure.ac): Consider REPLACE_EXPM1F. (Depends-on): Update conditions. * doc/posix-functions/expm1f.texi: Mention the IRIX 6.5 bug. 2012-03-06 Bruno Haible Tests for module 'expm1l'. * modules/expm1l-tests: New file. * tests/test-expm1l.c: New file. New module 'expm1l'. * lib/math.in.h (expm1l): New declaration. * lib/expm1l.c: New file. * m4/expm1l.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether expm1l is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXPM1L, HAVE_EXPM1L. * modules/math (Makefile.am): Substitute GNULIB_EXPM1L, HAVE_EXPM1L. * modules/expm1l: New file. * tests/test-math-c++.cc: Check the declaration of expm1l. * doc/posix-functions/expm1l.texi: Mention the new module. 2012-03-06 Bruno Haible Tests for module 'expm1f'. * modules/expm1f-tests: New file. * tests/test-expm1f.c: New file. New module 'expm1f'. * lib/math.in.h (expm1f): New declaration. * lib/expm1f.c: New file. * m4/expm1f.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether expm1f is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXPM1F, HAVE_EXPM1F. * modules/math (Makefile.am): Substitute GNULIB_EXPM1F, HAVE_EXPM1F. * modules/expm1f: New file. * tests/test-math-c++.cc: Check the declaration of expm1f. * doc/posix-functions/expm1f.texi: Mention the new module. 2012-03-06 Bruno Haible Tests for module 'expm1'. * modules/expm1-tests: New file. * tests/test-expm1.c: New file. * tests/test-expm1.h: New file. New module 'expm1'. * lib/math.in.h (expm1): New declaration. * lib/expm1.c: New file. * m4/expm1.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether expm1 is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXPM1, HAVE_EXPM1. * modules/math (Makefile.am): Substitute GNULIB_EXPM1, HAVE_EXPM1. * modules/expm1: New file. * tests/test-math-c++.cc: Check the declaration of expm1. * doc/posix-functions/expm1.texi: Mention the new module. 2012-03-06 Bruno Haible math: Ensure declarations of math functions. * modules/acosf (Depends-on): Add 'extensions'. * modules/asinf (Depends-on): Likewise. * modules/atan2f (Depends-on): Likewise. * modules/atanf (Depends-on): Likewise. * modules/cbrt (Depends-on): Likewise. * modules/cbrtf (Depends-on): Likewise. * modules/cbrtl (Depends-on): Likewise. * modules/copysignf (Depends-on): Likewise. * modules/copysignl (Depends-on): Likewise. * modules/cosf (Depends-on): Likewise. * modules/coshf (Depends-on): Likewise. * modules/expf (Depends-on): Likewise. * modules/fabsf (Depends-on): Likewise. * modules/fabsl (Depends-on): Likewise. * modules/fmaf (Depends-on): Likewise. * modules/fmal (Depends-on): Likewise. * modules/fmodf (Depends-on): Likewise. * modules/fmodl (Depends-on): Likewise. * modules/frexpf (Depends-on): Likewise. * modules/frexpl (Depends-on): Likewise. * modules/hypot (Depends-on): Likewise. * modules/hypotf (Depends-on): Likewise. * modules/hypotl (Depends-on): Likewise. * modules/ldexpf (Depends-on): Likewise. * modules/ldexpl (Depends-on): Likewise. * modules/log10f (Depends-on): Likewise. * modules/log10l (Depends-on): Likewise. * modules/log1p (Depends-on): Likewise. * modules/logb (Depends-on): Likewise. * modules/logf (Depends-on): Likewise. * modules/modff (Depends-on): Likewise. * modules/modfl (Depends-on): Likewise. * modules/powf (Depends-on): Likewise. * modules/remainderf (Depends-on): Likewise. * modules/remainderl (Depends-on): Likewise. * modules/rintf (Depends-on): Likewise. * modules/rintl (Depends-on): Likewise. * modules/sinf (Depends-on): Likewise. * modules/sinhf (Depends-on): Likewise. * modules/sqrtf (Depends-on): Likewise. * modules/tanf (Depends-on): Likewise. * modules/tanhf (Depends-on): Likewise. * m4/acosf.m4 (gl_FUNC_ACOSF): Require gl_USE_SYSTEM_EXTENSIONS. * m4/asinf.m4 (gl_FUNC_ASINF): Likewise. * m4/atan2f.m4 (gl_FUNC_ATAN2F): Likewise. * m4/atanf.m4 (gl_FUNC_ATANF): Likewise. * m4/cbrt.m4 (gl_FUNC_CBRT): Likewise. * m4/cbrtf.m4 (gl_FUNC_CBRTF): Likewise. * m4/cbrtl.m4 (gl_FUNC_CBRTL): Likewise. * m4/copysignf.m4 (gl_FUNC_COPYSIGNF): Likewise. * m4/copysignl.m4 (gl_FUNC_COPYSIGNL): Likewise. * m4/cosf.m4 (gl_FUNC_COSF): Likewise. * m4/coshf.m4 (gl_FUNC_COSHF): Likewise. * m4/expf.m4 (gl_FUNC_EXPF): Likewise. * m4/fabsf.m4 (gl_FUNC_FABSF): Likewise. * m4/fabsl.m4 (gl_FUNC_FABSL): Likewise. * m4/fmaf.m4 (gl_FUNC_FMAF): Likewise. * m4/fmal.m4 (gl_FUNC_FMAL): Likewise. * m4/fmodf.m4 (gl_FUNC_FMODF): Likewise. * m4/fmodl.m4 (gl_FUNC_FMODL): Likewise. * m4/frexpf.m4 (gl_FUNC_FREXPF): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL): Likewise. * m4/hypot.m4 (gl_FUNC_HYPOT): Likewise. * m4/hypotf.m4 (gl_FUNC_HYPOTF): Likewise. * m4/hypotl.m4 (gl_FUNC_HYPOTL): Likewise. * m4/ldexpf.m4 (gl_FUNC_LDEXPF): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Likewise. * m4/log10f.m4 (gl_FUNC_LOG10F): Likewise. * m4/log10l.m4 (gl_FUNC_LOF10L): Likewise. * m4/logb.m4 (gl_FUNC_LOGB): Likewise. * m4/logf.m4 (gl_FUNC_LOGF): Likewise. * m4/modff.m4 (gl_FUNC_MODFF): Likewise. * m4/modfl.m4 (gl_FUNC_MODFL): Likewise. * m4/powf.m4 (gl_FUNC_POWF): Likewise. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Likewise. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Likewise. * m4/rintf.m4 (gl_FUNC_RINTF): Likewise. * m4/rintl.m4 (gl_FUNC_RINTL): Likewise. * m4/sinf.m4 (gl_FUNC_SINF): Likewise. * m4/sinhf.m4 (gl_FUNC_SINHF): Likewise. * m4/sqrtf.m4 (gl_FUNC_SQRTF): Likewise. * m4/tanf.m4 (gl_FUNC_TANF): Likewise. * m4/tanhf.m4 (gl_FUNC_TANHF): Likewise. 2012-03-06 Bruno Haible math: Update module names in warnings. * lib/math.in.h (acosl, asinl, atanl, cosl, expl, logl, sinl, sqrtl, tanl): Use specific module name in warn-on-use warning. 2012-03-06 Bruno Haible expl: Simplify computation. * lib/expl.c (expl): Simplify computation of exp_y. Fix comment. 2012-03-05 Bruno Haible exp* tests: More tests. * tests/test-exp.h: New file. * tests/test-exp.c: Include and test-exp.h. (main): Invoke test_function. * tests/test-expf.c: Include and test-exp.h. (main): Invoke test_function. * tests/test-expl.c: Include and test-exp.h. (main): Invoke test_function. * modules/exp-tests (Files): Add tests/test-exp.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_exp_SOURCES. * modules/expf-tests (Files): Add tests/test-exp.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_expf_SOURCES. * modules/expl-tests (Files): Add tests/test-exp.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_expl_SOURCES. expl: Fix precision of computed result. * lib/expl.c: Completely rewritten. * modules/expl (Depends-on): Add isnanl, roundl, ldexpl. Remove floorl. (Maintainer): Add me. * m4/expl.m4 (gl_FUNC_EXPL): Update computation of EXPL_LIBM. 2012-03-05 Bruno Haible cbrt* tests: More tests. * tests/test-cbrt.h: New file. * tests/test-cbrt.c: Include and test-cbrt.h. (main): Invoke test_function. * tests/test-cbrtf.c: Include and test-cbrt.h. (main): Invoke test_function. * tests/test-cbrtl.c: Include and test-cbrt.h. (main): Invoke test_function. * modules/cbrt-tests (Files): Add tests/test-cbrt.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_cbrt_SOURCES. * modules/cbrtf-tests (Files): Add tests/test-cbrt.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_cbrtf_SOURCES. * modules/cbrtl-tests (Files): Add tests/test-cbrt.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_cbrtl_SOURCES. 2012-03-05 Bruno Haible hypot* tests: More tests. * tests/test-hypot.h: New file, partially extracted from tests/test-hypotl.c. * tests/test-hypot.c: Include test-hypot.h. (main): Invoke test_function. * tests/test-hypotf.c: Include test-hypot.h. (main): Invoke test_function. * tests/test-hypotl.c: Include fpucw.h and test-hypot.h. (main): Invoke BEGIN_LONG_DOUBLE_ROUNDING and test_function. * modules/hypot-tests (Files): Add tests/test-hypot.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_hypot_SOURCES. * modules/hypotf-tests (Files): Add tests/test-hypot.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_hypotf_SOURCES. * modules/hypotl-tests (Files): Add tests/test-hypot.h, tests/randoml.c. (Depends-on): Add 'fpucw', 'float'. (Makefile.am): Add randoml.c to test_hypotl_SOURCES. 2012-03-05 Bruno Haible fpucw: Doc about FreeBSD. * lib/fpucw.h: Mention FreeBSD in comments. 2012-03-04 Bruno Haible sqrt* tests: More tests. * tests/test-sqrt.h: New file. * tests/test-sqrt.c: Include and test-sqrt.h. (main): Invoke test_function. * tests/test-sqrtf.c: Include and test-sqrt.h. (main): Invoke test_function. * tests/test-sqrtl.c: Include and test-sqrt.h. (main): Invoke test_function. * modules/sqrt-tests (Files): Add tests/test-sqrt.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_sqrt_SOURCES. * modules/sqrtf-tests (Files): Add tests/test-sqrt.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_sqrtf_SOURCES. * modules/sqrtl-tests (Files): Add tests/test-sqrt.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_sqrtl_SOURCES. 2012-03-04 Bruno Haible remainder* tests: More tests. * tests/test-remainder.h: New file, based on tests/test-fmod.h. * tests/test-remainder.c: Include and test-remainder.h. (main): Invoke test_function. * tests/test-remainderf.c: Include and test-remainder.h. (main): Invoke test_function. * tests/test-remainderl.c: Include and test-remainder.h. (main): Invoke test_function. * modules/remainder-tests (Files): Add tests/test-remainder.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_remainder_SOURCES. * modules/remainderf-tests (Files): Add tests/test-remainder.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_remainderf_SOURCES. * modules/remainderl-tests (Files): Add tests/test-remainder.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_remainderl_SOURCES. 2012-03-04 Bruno Haible remainder, remainderf, remainderl: Fix computation for large quotients. * lib/remainder.c: Completely rewritten. * lib/remainderf.c (remainderf): Use implementation of remainder.c with USE_FLOAT. * lib/remainderl.c (remainderl): Use implementation of remainder.c with USE_LONG_DOUBLE. * modules/remainder (Depends-on): Add isfinite, signbit, fabs, fmod, isnand, isinf. Remove round, fma. * modules/remainderf (Files): Add lib/remainder.c. (Depends-on): Add isfinite, signbit, fabsf, fmodf, isnanf, isinf. Remove roundf, fmaf. * modules/remainderl (Files): Add lib/remainder.c. (Depends-on): Add float, isfinite, signbit, fabsl, fmodl, isnanl, isinf. Remove roundl, fmal. * m4/remainder.m4 (gl_FUNC_REMAINDER): Update computation of REMAINDER_LIBM. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): Update computation of REMAINDERF_LIBM. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Update computation of REMAINDERL_LIBM. 2012-03-04 Bruno Haible fmod* tests: More tests. * tests/test-fmod.h (my_ldexp): New function. (test_function): Reduce amount of random numbers to test. Add tests of very large quotients x / y. * tests/test-fmod.c (MAX_EXP): New macro. * tests/test-fmodf.c (MAX_EXP): Likewise. * tests/test-fmodl.c (MAX_EXP): Likewise. 2012-03-04 Bruno Haible fmod, fmodl: Fix computation for large quotients x / y. * lib/fmod.c: Completely rewritten. * lib/fmodl.c (fmodl): Use implementation of fmod.c with USE_LONG_DOUBLE. * modules/fmod (Depends-on): Add isfinite, signbit, fabs, frexp, ldexp, isnand. Remove fma. * modules/fmodl (Files): Add lib/fmod.c. (Depends-on): Add float, isfinite, signbit, fabsl, frexpl, ldexpl, isnanl. Remove fma. * m4/fmod.m4 (gl_FUNC_FMOD): Update computation of FMOD_LIBM. * m4/fmodl.m4 (gl_FUNC_FMODL): Update computation of FMODL_LIBM. 2012-03-03 Bruno Haible fmod* tests: More tests. * tests/test-fmod.h: New file. * tests/test-fmod.c: Include and test-fmod.h. (main): Invoke test_function. * tests/test-fmodf.c: Include and test-fmod.h. (main): Invoke test_function. * tests/test-fmodl.c: Include and test-fmod.h. (main): Invoke test_function. * modules/fmod-tests (Files): Add tests/test-fmod.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_fmod_SOURCES. * modules/fmodf-tests (Files): Add tests/test-fmod.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_fmodf_SOURCES. * modules/fmodl-tests (Files): Add tests/test-fmod.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_fmodl_SOURCES. 2012-03-03 Bruno Haible rint* tests: More tests. * tests/test-rint.h: New file, partially extracted from tests/test-rintl.c. * tests/test-rint.c: Include test-rint.h. (main): Invoke test_function. * tests/test-rintf.c: Include test-rint.h. (main): Invoke test_function. * tests/test-rintl.c: Include test-rint.h. (main): Invoke test_function. * modules/rint-tests (Files): Add tests/test-rint.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_rint_SOURCES. * modules/rintf-tests (Files): Add tests/test-rint.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_rintf_SOURCES. * modules/rintl-tests (Files): Add tests/test-rint.h, tests/randoml.c. (Makefile.am): Add randoml.c to test_rintl_SOURCES. 2012-03-03 Bruno Haible modf* tests: More tests. * tests/test-modf.h: New file. * tests/test-modf.c: Include and test-modf.h. (main): Invoke test_function. * tests/test-modff.c: Include and test-modf.h. (main): Invoke test_function. * tests/test-modfl.c: Include and test-modf.h. (main): Invoke test_function. * modules/modf-tests (Files): Add tests/test-modf.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_modf_SOURCES. * modules/modff-tests (Files): Add tests/test-modf.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_modff_SOURCES. * modules/modfl-tests (Files): Add tests/test-modf.h, tests/randoml.c. (Depends-on): Add 'float'. (Makefile.am): Add randoml.c to test_modfl_SOURCES. 2012-03-03 Bruno Haible fabs* tests: More tests. * tests/test-fabs.h: New file, partially extracted from tests/test-fabsl.c. * tests/test-fabs.c (RANDOM): New macro. * tests/test-fabsf.c (RANDOM): New macro. * tests/test-fabsl.c (RANDOM): New macro. * modules/fabs-tests (Files): Add tests/randomd.c. (Makefile.am): Add randomd.c to test_fabs_SOURCES. * modules/fabsf-tests (Files): Add tests/randomf.c. (Makefile.am): Add randomf.c to test_fabsf_SOURCES. * modules/fabsl-tests (Files): Add tests/randoml.c. (Makefile.am): Add randoml.c to test_fabsl_SOURCES. 2012-03-03 Bruno Haible ldexp* tests: More tests. * tests/test-ldexp.h (test_function): Add some pseudo-randomized tests. * tests/test-ldexp.c (RANDOM): New macro. * tests/test-ldexpf.c (RANDOM): New macro. * tests/test-ldexpl.c (RANDOM): New macro. * modules/ldexp-tests (Files): Add tests/randomd.c. (Makefile.am): Add randomd.c to test_ldexp_SOURCES. * modules/ldexpf-tests (Files): Add tests/randomf.c. (Makefile.am): Add randomf.c to test_ldexpf_SOURCES. * modules/ldexpl-tests (Files): Add tests/randoml.c. (Makefile.am): Add randoml.c to test_ldexpl_SOURCES. 2012-03-03 Bruno Haible frexp* tests: More tests. * tests/test-frexp.h (test_function): Add some pseudo-randomized tests. * tests/test-frexp.c (RANDOM): New macro. * tests/test-frexpf.c (RANDOM): New macro. * tests/test-frexpl.c (RANDOM): New macro. * modules/frexp-tests (Files): Add tests/randomd.c. (Makefile.am): Add randomd.c to test_frexp_SOURCES. * modules/frexpf-tests (Files): Add tests/randomf.c. (Makefile.am): Add randomf.c to test_frexpf_SOURCES. * modules/frexpl-tests (Files): Add tests/randoml.c. (Makefile.am): Add randoml.c to test_frexpl_SOURCES. 2012-03-03 Bruno Haible Support for pseudo-random numbers in tests. * tests/randomf.c: New file. * tests/randomd.c: New file. * tests/randoml.c: New file. * tests/macros.h (randomf, randomd, randoml): New declarations. 2012-03-03 Bruno Haible frexp* tests: Refactor. * tests/test-frexp.h: New file, extracted from tests/test-frexpl.c. * tests/test-frexp.c: Include and use it. * tests/test-frexpf.c: Likewise. * tests/test-frexpl.c: Likewise. * modules/frexp-tests (Files): Add tests/test-frexp.h. * modules/frexpf-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. 2012-03-02 Jim Meyering maint: don't specify XZ_OPT=-9ev in dist-related rule Using xz's -9 option is warranted only if you have a very large tarball (see xz's documentation for the sizes vs. presets), and requires 64MiB of memory at decompression time. * top/maint.mk (alpha beta stable): Don't specify XZ_OPT=-9ev. Automake's default of just "-e" is fine. Override on a per-package basis by setting XZ_OPT e.g., in cfg.mk. 2012-03-01 Eric Blake maint.mk: allow announcement for non-gnulib project * maint.mk (announcement): Skip gnulib version if not used. 2012-03-01 Jim Meyering maint.mk: avoid spurious failure of _sc_search_regexp-using tests * top/maint.mk: Initialize _sc_search_regexp parameters, so that envvar settings cannot interfere. Otherwise, setting envvars like prohibit=foo require=bar, etc. would cause spurious test failures. 2012-03-01 Eric Blake maint.mk: add per-line exclusions to prohibitions * maint.mk (_sc_search_regexp): Add $exclude parameter. (sc_prohibit_strcmp, sc_unmarked_diagnostics) (sc_const_long_option): Use it. 2012-03-01 Bruno Haible Tests for module 'expl-ieee'. * modules/expl-ieee-tests: New file. * tests/test-expl-ieee.c: New file. New module 'expl-ieee'. * modules/expl-ieee: New file. Tests for module 'exp-ieee'. * modules/exp-ieee-tests: New file. * tests/test-exp-ieee.c: New file. New module 'exp-ieee'. * modules/exp-ieee: New file. Tests for module 'expf-ieee'. * modules/expf-ieee-tests: New file. * tests/test-expf-ieee.c: New file. * tests/test-exp-ieee.h: New file. New module 'expf-ieee'. * modules/expf-ieee: New file. 2012-02-29 Bruno Haible cbrtl-ieee: Work around test failure on IRIX 6.5. * m4/cbrtl-ieee.m4: New file. * m4/cbrtl.m4 (gl_FUNC_CBRTL): If gl_FUNC_CBRTL_IEEE is present, test whether cbrtl works with a minus zero argument. Replace it if not. * lib/math.in.h (cbrtl): Override if REPLACE_CBRTL is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_CBRTL. * modules/math (Makefile.am): Substitute REPLACE_CBRTL. * modules/cbrtl (configure.ac): Consider REPLACE_CBRTL. (Depends-on): Update conditions. * modules/cbrtl-ieee (Files): Add m4/cbrtl-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_CBRTL_IEEE. * lib/cbrtl.c (cbrtl) [IRIX]: Avoid an unnecessary addition. * doc/posix-functions/cbrtl.texi: Mention the cbrtl-ieee module. Tests for module 'cbrtl-ieee'. * modules/cbrtl-ieee-tests: New file. * tests/test-cbrtl-ieee.c: New file. New module 'cbrtl-ieee'. * modules/cbrtl-ieee: New file. Tests for module 'cbrt-ieee'. * modules/cbrt-ieee-tests: New file. * tests/test-cbrt-ieee.c: New file. New module 'cbrt-ieee'. * modules/cbrt-ieee: New file. Tests for module 'cbrtf-ieee'. * modules/cbrtf-ieee-tests: New file. * tests/test-cbrtf-ieee.c: New file. * tests/test-cbrt-ieee.h: New file. New module 'cbrtf-ieee'. * modules/cbrtf-ieee: New file. 2012-02-29 Bruno Haible cbrtf: Work around bug in IRIX 6.5 system function. * lib/math.in.h (cbrtf): Override if REPLACE_CBRTF is 1. * m4/cbrtf.m4 (gl_FUNC_CBRTF_WORKS): New macro. (gl_FUNC_CBRTF): Invoke it. Set REPLACE_CBRTF to 1 if cbrtf() does not work. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_CBRTF. * modules/math (Makefile.am): Substitute REPLACE_CBRTF. * modules/cbrtf (configure.ac): Consider REPLACE_CBRTF. (Depends-on): Update conditions. * doc/posix-functions/cbrtf.texi: Mention the IRIX 6.5 problem. 2012-02-29 Bruno Haible Tests for module 'cbrtl'. * modules/cbrtl-tests: New file. * tests/test-cbrtl.c: New file. New module 'cbrtl'. * lib/math.in.h (cbrtl): New declaration. * lib/cbrtl.c: New file. * m4/cbrtl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether cbrtl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_CBRTL, HAVE_CBRTL, HAVE_DECL_CBRTL. * modules/math (Makefile.am): Substitute GNULIB_CBRTL, HAVE_CBRTL, HAVE_DECL_CBRTL. * modules/cbrtl: New file. * tests/test-math-c++.cc: Check the declaration of cbrtl. * doc/posix-functions/cbrtl.texi: Mention the new module. 2012-02-29 Bruno Haible Tests for module 'cbrtf'. * modules/cbrtf-tests: New file. * tests/test-cbrtf.c: New file. New module 'cbrtf'. * lib/math.in.h (cbrtf): New declaration. * lib/cbrtf.c: New file. * m4/cbrtf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether cbrtf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_CBRTF, HAVE_CBRTF, HAVE_DECL_CBRTF. * modules/math (Makefile.am): Substitute GNULIB_CBRTF, HAVE_CBRTF, HAVE_DECL_CBRTF. * modules/cbrtf: New file. * tests/test-math-c++.cc: Check the declaration of cbrtf. * doc/posix-functions/cbrtf.texi: Mention the new module. 2012-02-29 Bruno Haible cbrt: Provide replacement on MSVC and Minix. * lib/math.in.h (cbrt): New declaration. * lib/cbrt.c: New file. * m4/cbrt.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether cbrt is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_CBRT, HAVE_CBRT. * modules/math (Makefile.am): Substitute GNULIB_CBRT, HAVE_CBRT. * modules/cbrt (Files): Add lib/cbrt.c, m4/cbrt.m4. (Depends-on): Add dependencies. (configure.ac): Arrange to compile replacement if HAVE_CBRT is 0. * tests/test-math-c++.cc: Check the declaration of cbrt. * doc/posix-functions/cbrt.texi: Mention that the module provides a replacement. 2012-02-29 Bruno Haible hypotl-ieee: Work around test failure on OSF/1 and native Windows. * m4/hypotl-ieee.m4: New file. * m4/hypotl.m4 (gl_FUNC_HYPOTL): If gl_FUNC_HYPOTL_IEEE is present, test whether hypotl works with mixed NaN and Infinity arguments. Replace it if not. * lib/math.in.h (hypotl): Override if REPLACE_HYPOTL is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_HYPOTL. * modules/math (Makefile.am): Substitute REPLACE_HYPOTL. * modules/hypotl (configure.ac): Consider REPLACE_HYPOTL. (Depends-on): Update conditions. * modules/hypotl-ieee (Files): Add m4/hypotl-ieee.m4. (Depends-on): Add hypot-ieee. (configure.ac): Invoke gl_FUNC_HYPOTL_IEEE. * doc/posix-functions/hypotl.texi: Mention the hypotl-ieee module. hypotf-ieee: Work around test failure on OSF/1 and native Windows. * m4/hypotf-ieee.m4: New file. * m4/hypotf.m4 (gl_FUNC_HYPOTF): If gl_FUNC_HYPOTF_IEEE is present, test whether hypotf works with mixed NaN and Infinity arguments. Replace it if not. * modules/hypotf-ieee (Files): Add m4/hypotf-ieee.m4. (Depends-on): Add hypot-ieee. (configure.ac): Invoke gl_FUNC_HYPOTF_IEEE. * doc/posix-functions/hypotf.texi: Mention the hypotf-ieee module. hypot-ieee: Work around test failure on OSF/1 and native Windows. * lib/math.in.h (hypot): New declaration. * lib/hypot.c: New file. * m4/hypot-ieee.m4: New file. * m4/hypot.m4 (gl_FUNC_HYPOT): If gl_FUNC_HYPOT_IEEE is present, test whether hypot works with mixed NaN and Infinity arguments. Replace it if not. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_HYPOT, REPLACE_HYPOT. * modules/math (Makefile.am): Substitute GNULIB_HYPOT, REPLACE_HYPOT. * modules/hypot (Files): Add lib/hypot.c. (Depends-on): Add dependencies. (configure.ac): Arrange to compile replacement if REPLACE_HYPOT is 1. * modules/hypot-ieee (Files): Add m4/hypot-ieee.m4. (configure.ac): Invoke gl_FUNC_HYPOT_IEEE. * tests/test-math-c++.cc: Check the declaration of hypot. * doc/posix-functions/hypot.texi: Mention the hypot-ieee module. Tests for module 'hypotl-ieee'. * modules/hypotl-ieee-tests: New file. * tests/test-hypotl-ieee.c: New file. New module 'hypotl-ieee'. * modules/hypotl-ieee: New file. Tests for module 'hypot-ieee'. * modules/hypot-ieee-tests: New file. * tests/test-hypot-ieee.c: New file. New module 'hypot-ieee'. * modules/hypot-ieee: New file. Tests for module 'hypotf-ieee'. * modules/hypotf-ieee-tests: New file. * tests/test-hypotf-ieee.c: New file. * tests/test-hypot-ieee.h: New file. New module 'hypotf-ieee'. * modules/hypotf-ieee: New file. 2012-02-29 Bruno Haible Remove unused variables. * m4/fmod.m4 (gl_FUNC_FMOD): Remove unused variable 'i'. * m4/fmodl.m4 (gl_FUNC_FMODL): Likewise. * m4/remainder.m4 (gl_FUNC_REMAINDER): Likewise. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): Likewise. 2012-02-29 Eric Blake termios: fix pid_t always, not just for tcgetsid * doc/posix-headers/termios.texi (termios.h): Mention problem. * lib/termios.in.h (include): Ensure pid_t on all platforms, not just when building tcgetsid. 2012-02-29 Bruno Haible Tests for module 'hypotl'. * modules/hypotl-tests: New file. * tests/test-hypotl.c: New file. New module 'hypotl'. * lib/math.in.h (hypotl): New declaration. * lib/hypotl.c: New file. * m4/hypotl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether hypotf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_HYPOTL, HAVE_HYPOTL. * modules/math (Makefile.am): Substitute GNULIB_HYPOTL, HAVE_HYPOTL. * modules/hypotl: New file. * tests/test-math-c++.cc: Check the hypotl declaration. * doc/posix-functions/hypotl.texi: Mention the new module. 2012-02-29 Eric Blake tcgetsid: fix cygwin header bug * lib/termios.in.h (includes) [Cygwin]: Ensure pid_t is defined. docs: update cygwin progress * doc/posix-functions/llround.texi (llround): Added in cygwin 1.7.8. * doc/posix-functions/llroundf.texi (llroundf): Likewise. * doc/glibc-functions/program_invocation_name.texi (program_invocation_name): Likewise. * doc/glibc-functions/program_invocation_short_name.texi (program_invocation_short_name): Likewise. * doc/glibc-functions/madvise.texi (madvise): Likewise. * doc/glibc-functions/pthread_yield.texi (pthread_yield): Likewise. * doc/posix-functions/pthread_spin_destroy.texi (pthread_spin_destroy): Added in cygwin 1.7.10. * doc/posix-functions/pthread_spin_init.texi (pthread_spin_init): Likewise. * doc/posix-functions/pthread_spin_lock.texi (pthread_spin_lock): Likewise. * doc/posix-functions/pthread_spin_trylock.texi (pthread_spin_trylock): Likewise. * doc/posix-functions/pthread_spin_unlock.texi (pthread_spin_unlock): Likewise. * doc/posix-functions/pthread_setschedprio.texi (pthread_setschedprio): Likewise. * doc/posix-functions/pthread_attr_getstack.texi (pthread_attr_getstack): Likewise. * doc/pastposix-functions/pthread_attr_getstackaddr.texi (pthread_attr_getstackaddr): Likewise. * doc/glibc-functions/pthread_getattr_np.texi (pthread_getattr_np): Likewise. * doc/glibc-functions/sys_siglist.texi (sys_siglist): Likewise. * doc/glibc-functions/sysinfo.texi (sysinfo): Likewise. * doc/posix-functions/clock_settime.texi (clock_settime): Likewise. * doc/posix-functions/pthread_attr_getguardsize.texi (pthread_attr_getguardsize): Likewise. * doc/posix-functions/pthread_attr_setguardsize.texi (pthread_attr_setguardsize): Likewise. * doc/posix-functions/pthread_attr_setstack.texi (pthread_attr_setstack): Likewise. * doc/pastposix-functions/pthread_attr_setstackaddr.texi (pthread_attr_setstackaddr): Likewise. * doc/posix-functions/clock_getcpuclockid.texi (clock_getcpuclockid): Likewise. * doc/posix-functions/pthread_getcpuclockid.texi (pthread_getcpuclockid): Likewise. * doc/glibc-functions/error.texi (error): Likewise. * doc/glibc-functions/error_at_line.texi (error_at_line): Likewise. * doc/glibc-functions/error_message_count.texi (error_message_count): Likewise. * doc/glibc-functions/error_one_per_line.texi (error_one_per_line): Likewise. * doc/glibc-functions/error_print_progname.texi (error_print_progname): Likewise. * doc/posix-functions/pthread_condattr_getclock.texi (pthread_condattr_getclock): Likewise. * doc/posix-functions/pthread_condattr_setclock.texi (pthread_condattr_setclock): Likewise. * doc/posix-functions/clock_nanosleep.texi (clock_nanosleep): Likewise. * doc/glibc-functions/getgrouplist.texi (getgrouplist): Likewise. * doc/glibc-functions/getpt.texi (getpt): Likewise. * doc/glibc-functions/get_current_dir_name.texi (get_current_dir_name): Likewise. * doc/glibc-functions/pthread_sigqueue.texi (pthread_sigqueue): Likewise. * doc/posix-functions/tcgetsid.texi (tcgetsid): Likewise, but with wrong return type. * doc/glibc-functions/scandirat.texi (scandirat): Added in cygwin 1.7.11. 2012-02-29 Bruno Haible Tests for module 'hypotf'. * modules/hypotf-tests: New file. * tests/test-hypotf.c: New file. New module 'hypotf'. * lib/math.in.h (hypotf): New declaration. * lib/hypotf.c: New file. * m4/hypotf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether hypotf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_HYPOTF, HAVE_HYPOTF, REPLACE_HYPOTF. * modules/math (Makefile.am): Substitute GNULIB_HYPOTF, HAVE_HYPOTF, REPLACE_HYPOTF. * modules/hypotf: New file. * tests/test-math-c++.cc: Check the hypotf declaration. * doc/posix-functions/hypotf.texi: Mention the new module. hypot: Prepare for hypotf module. * m4/hypot.m4: New file. * modules/hypot (Files): Add m4/hypot.m4. (configure.ac): Invoke gl_FUNC_HYPOT. 2012-02-29 Bruno Haible hypot tests: More tests. * tests/test-hypot.c: Include . (main): Add tests about overflow and underflow. 2012-02-29 Bruno Haible math code: Add comments. * lib/acosl.c: Add comment about related glibc source files. * lib/asinl.c: Likewise. * lib/atanl.c: Likewise. * lib/expl.c: Likewise. * lib/logl.c: Likewise. * lib/sincosl.c: Likewise. * lib/sinl.c: Likewise. * lib/tanl.c: Likewise. * lib/trigl.c: Likewise. * lib/cosl.c: Likewise. Fix comments. 2012-02-28 Bruno Haible math: Ensure HUGE_VAL, HUGE_VALF, HUGE_VALL are defined. * lib/math.in.h (HUGE_VAL, HUGE_VALF, HUGE_VALL): Define fallbacks. * tests/test-math.c: Include macros.h. Check that HUGE_VAL, HUGE_VALF, HUGE_VALL are defined. (numeric_equald): Renamed from numeric_equal. (numeric_equalf, numeric_equall): New functions. (main): Check also HUGE_VALF, HUGE_VALL. * modules/math-tests (Files): Add tests/macros.h. * doc/posix-headers/math.texi: Document the problems with HUGE_VALF and HUGE_VALL. 2012-02-28 Bruno Haible doc: Move ISO C11 feature notes into POSIX chapters. * doc/posix-functions/aligned_alloc.texi: Renamed from doc/glibc-functions/aligned_alloc.texi. * doc/posix-functions/quick_exit.texi: Renamed from doc/glibc-functions/quick_exit.texi. * doc/posix-headers/uchar.texi: Renamed from doc/glibc-headers/uchar.texi. * doc/posix-functions/c16rtomb.texi: Renamed from doc/glibc-functions/c16rtomb.texi. * doc/posix-functions/c32rtomb.texi: Renamed from doc/glibc-functions/c32rtomb.texi. * doc/posix-functions/mbrtoc16.texi: Renamed from doc/glibc-functions/mbrtoc16.texi. * doc/posix-functions/mbrtoc32.texi: Renamed from doc/glibc-functions/mbrtoc32.texi. * doc/gnulib.texi: Update. (Glibc uchar.h): Remove section. Suggested by Eric Blake. 2012-02-29 Paul Eggert stdnoreturn: port to MSVC better MSVC standard headers use __declspec(noreturn), so #define noreturn to empty on that platform. Reported by Bruno Haible in . * lib/stdnoreturn.in.h (noreturn): Define to empty on MSVC. * doc/posix-headers/stdnoreturn.texi (stdnoreturn.h): Document this. 2012-02-28 Bruno Haible doc: Mention new glibc headers and functions. * doc/glibc-headers/uchar.texi: New file. * doc/glibc-functions/aligned_alloc.texi: New file. * doc/glibc-functions/c16rtomb.texi: New file. * doc/glibc-functions/c32rtomb.texi: New file. * doc/glibc-functions/clock_adjtime.texi: New file. * doc/glibc-functions/fanotify_init.texi: New file. * doc/glibc-functions/fanotify_mark.texi: New file. * doc/glibc-functions/inet6_opt_append.texi: New file. * doc/glibc-functions/inet6_opt_find.texi: New file. * doc/glibc-functions/inet6_opt_finish.texi: New file. * doc/glibc-functions/inet6_opt_get_val.texi: New file. * doc/glibc-functions/inet6_opt_init.texi: New file. * doc/glibc-functions/inet6_opt_next.texi: New file. * doc/glibc-functions/inet6_opt_set_val.texi: New file. * doc/glibc-functions/inet6_rth_add.texi: New file. * doc/glibc-functions/inet6_rth_getaddr.texi: New file. * doc/glibc-functions/inet6_rth_init.texi: New file. * doc/glibc-functions/inet6_rth_reverse.texi: New file. * doc/glibc-functions/inet6_rth_segments.texi: New file. * doc/glibc-functions/inet6_rth_space.texi: New file. * doc/glibc-functions/login.texi: New file. * doc/glibc-functions/mbrtoc16.texi: New file. * doc/glibc-functions/mbrtoc32.texi: New file. * doc/glibc-functions/name_to_handle_at.texi: New file. * doc/glibc-functions/ntp_gettimex.texi: New file. * doc/glibc-functions/open_by_handle_at.texi: New file. * doc/glibc-functions/prlimit.texi: New file. * doc/glibc-functions/process_vm_readv.texi: New file. * doc/glibc-functions/process_vm_writev.texi: New file. * doc/glibc-functions/recvmmsg.texi: New file. * doc/glibc-functions/scandirat.texi: New file. * doc/glibc-functions/sendmmsg.texi: New file. * doc/glibc-functions/setns.texi: New file. * doc/glibc-functions/timespec_get.texi: New file. * doc/gnulib.texi: Include them. (Glibc sys/fanotify.h, Glibc sys/resource.h, Glibc uchar.h): New sections. Reported by Eric Blake. 2012-02-28 Bruno Haible Avoid compilation errors with MSVC option -fp:strict. * lib/floor.c: Use MSVC specific pragma fenv_access. * lib/ceil.c: Likewise. * lib/trunc.c: Likewise. * lib/round.c: Likewise. * lib/rint.c: Likewise. * lib/fma.c: Likewise. * lib/integer_length.c: Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * tests/test-floor2.c: Likewise. * tests/test-floorf2.c: Likewise. * tests/test-ceil2.c: Likewise. * tests/test-ceilf2.c: Likewise. * tests/test-trunc2.c: Likewise. * tests/test-truncf2.c: Likewise. Reported by Michael Goffioul . 2012-02-27 Bruno Haible Tests for module 'sqrtl-ieee'. * modules/sqrtl-ieee-tests: New file. * tests/test-sqrtl-ieee.c: New file. New module 'sqrtl-ieee'. * modules/sqrtl-ieee: New file. Tests for module 'sqrt-ieee'. * modules/sqrt-ieee-tests: New file. * tests/test-sqrt-ieee.c: New file. New module 'sqrt-ieee'. * modules/sqrt-ieee: New file. Tests for module 'sqrtf-ieee'. * modules/sqrtf-ieee-tests: New file. * tests/test-sqrtf-ieee.c: New file. * tests/test-sqrt-ieee.h: New file. New module 'sqrtf-ieee'. * modules/sqrtf-ieee: New file. 2012-02-27 Bruno Haible remainderl-ieee: Work around test failure on OSF/1. * m4/remainderl-ieee.m4: New file. * m4/remainderl.m4 (gl_FUNC_REMAINDERL): If gl_FUNC_REMAINDERL_IEEE is present, test whether remainderl works with a zero second argument. Replace it if not. * lib/math.in.h (remainderl): Override if REPLACE_REMAINDERL is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_REMAINDERL. * modules/math (Makefile.am): Substitute REPLACE_REMAINDERL. * modules/remainderl (configure.ac): Consider REPLACE_REMAINDERL. (Depends-on): Update conditions. * modules/remainderl-ieee (Files): Add m4/remainderl-ieee.m4. (Depends-on): Add remainder-ieee. (configure.ac): Invoke gl_FUNC_REMAINDERL_IEEE. * doc/posix-functions/remainderl.texi: Mention the remainderl-ieee module. remainderf-ieee: Work around test failure on OSF/1. * m4/remainderf-ieee.m4: New file. * m4/remainderf.m4 (gl_FUNC_REMAINDERF): If gl_FUNC_REMAINDERF_IEEE is present, test whether remainderf works with a zero second argument. Replace it if not. * lib/math.in.h (remainderf): Override if REPLACE_REMAINDERF is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_REMAINDERF. * modules/math (Makefile.am): Substitute REPLACE_REMAINDERF. * modules/remainderf (configure.ac): Consider REPLACE_REMAINDERF. (Depends-on): Update conditions. * modules/remainderf-ieee (Files): Add m4/remainderf-ieee.m4. (Depends-on): Add remainder-ieee. (configure.ac): Invoke gl_FUNC_REMAINDERF_IEEE. * doc/posix-functions/remainderf.texi: Mention the remainderf-ieee module. remainder-ieee: Work around test failure on OSF/1. * m4/remainder-ieee.m4: New file. * m4/remainder.m4 (gl_FUNC_REMAINDER): If gl_FUNC_REMAINDER_IEEE is present, test whether remainder works with a zero second argument. Replace it if not. * lib/math.in.h (remainder): Override if REPLACE_REMAINDER is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_REMAINDER. * modules/math (Makefile.am): Substitute REPLACE_REMAINDER. * modules/remainder (configure.ac): Consider REPLACE_REMAINDER. (Depends-on): Update dependencies. * modules/remainder-ieee (Files): Add m4/remainder-ieee.m4. (configure.ac): Invoke gl_FUNC_REMAINDER_IEEE. * doc/posix-functions/remainder.texi: Mention the remainder-ieee module. Tests for module 'remainderl-ieee'. * modules/remainderl-ieee-tests: New file. * tests/test-remainderl-ieee.c: New file. New module 'remainderl-ieee'. * modules/remainderl-ieee: New file. Tests for module 'remainder-ieee'. * modules/remainder-ieee-tests: New file. * tests/test-remainder-ieee.c: New file. New module 'remainder-ieee'. * modules/remainder-ieee: New file. Tests for module 'remainderf-ieee'. * modules/remainderf-ieee-tests: New file. * tests/test-remainderf-ieee.c: New file. * tests/test-remainder-ieee.h: New file. New module 'remainderf-ieee'. * modules/remainderf-ieee: New file. 2012-02-27 Bruno Haible modff, modfl: Fix configure syntax error. * m4/modff.m4 (gl_FUNC_MODFF): Insert ':' command in 'if'. * m4/modfl.m4 (gl_FUNC_MODFL): Likewise. 2012-02-27 Bruno Haible fmodl-ieee: Work around test failures on OSF/1, MSVC 9. * m4/fmodl-ieee.m4: New file. * m4/fmodl.m4 (gl_FUNC_FMODL): If gl_FUNC_FMODL_IEEE is present, test whether fmodl works with zero arguments. Replace it if not. * modules/fmodl-ieee (Files): Add m4/fmodl-ieee.m4. (Depends-on): Add fmod-ieee. (configure.ac): Invoke gl_FUNC_FMODL_IEEE. * doc/posix-functions/fmodl.texi: Mention the fmodl-ieee module. fmodf-ieee: Work around test failure on OSF/1. * m4/fmodf-ieee.m4: New file. * m4/fmodf.m4 (gl_FUNC_FMODF): If gl_FUNC_FMODF_IEEE is present, test whether fmodf works with zero arguments. Replace it if not. * lib/math.in.h (fmodf): Override if REPLACE_FMODF is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_FMODF. * modules/math (Makefile.am): Substitute REPLACE_FMODF. * modules/fmodf (configure.ac): Consider REPLACE_FMODF. (Depends-on): Update dependencies. * modules/fmodf-ieee (Files): Add m4/fmodf-ieee.m4. (configure.ac): Invoke gl_FUNC_FMODF_IEEE. * doc/posix-functions/fmodf.texi: Mention the problem on OSF/1. fmodf-ieee: Work around test failure on MSVC 9. * modules/fmodf-ieee (Depends-on): Add fmod-ieee. * doc/posix-functions/fmodf.texi: Mention the fmodf-ieee module. fmod-ieee: Work around test failures on OSF/1, mingw. * m4/fmod-ieee.m4: New file. * m4/fmod.m4 (gl_FUNC_FMOD): If gl_FUNC_FMOD_IEEE is present, test whether fmod works with zero arguments. Replace it if not. * lib/math.in.h (fmod): New declaration. * lib/fmod.c: New file. * m4/math_h.m4 (gl_MATH_H): Test whether fmod is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMOD, REPLACE_FMOD. * modules/math (Makefile.am): Substitute GNULIB_FMOD, REPLACE_FMOD. * modules/fmod (Files): Add lib/fmod.c. (Depends-on): Add math, isinf, trunc, fma. (configure.ac): Arrange to compile lib/fmod.c if needed. * modules/fmod-ieee (Files): Add m4/fmod-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_FMOD_IEEE. * tests/test-math-c++.cc: Check the declaration of fmod. * doc/posix-functions/fmod.texi: Mention the fmod-ieee module. fmodl-ieee: Fix test failures. * lib/fmodl.c (fmodl): Treat Inf specially. * modules/fmodl (Depends-on): Add isinf. Tests for module 'fmodl-ieee'. * modules/fmodl-ieee-tests: New file. * tests/test-fmodl-ieee.c: New file. New module 'fmodl-ieee'. * modules/fmodl-ieee: New file. Tests for module 'fmod-ieee'. * modules/fmod-ieee-tests: New file. * tests/test-fmod-ieee.c: New file. New module 'fmod-ieee'. * modules/fmod-ieee: New file. Tests for module 'fmodf-ieee'. * modules/fmodf-ieee-tests: New file. * tests/test-fmodf-ieee.c: New file. * tests/test-fmod-ieee.h: New file. New module 'fmodf-ieee'. * modules/fmodf-ieee: New file. 2012-02-27 Bruno Haible Tests for module 'rintl-ieee'. * modules/rintl-ieee-tests: New file. * tests/test-rintl-ieee.c: New file. New module 'rintl-ieee'. * modules/rintl-ieee: New file. Tests for module 'rint-ieee'. * modules/rint-ieee-tests: New file. * tests/test-rint-ieee.c: New file. New module 'rint-ieee'. * modules/rint-ieee: New file. Tests for module 'rintf-ieee'. * modules/rintf-ieee-tests: New file. * tests/test-rintf-ieee.c: New file. * tests/test-rint-ieee.h: New file. New module 'rintf-ieee'. * modules/rintf-ieee: New file. 2012-02-26 Paul Eggert regex: re_search etc. should return -2 when memory exhausted This bug was uncovered when testing 'grep'. Without the fix, re_search and friends return -1 when memory is exhausted, but -1 means no match, and this causes grep to falsely report no-match instead of memory-exhaustion. See . * lib/regexec.c (re_search_stub): Return -2 (not -1) if there is trouble; this can occur if re_search_internal ran out of memory. 2012-02-26 Bruno Haible modfl-ieee: Work around test failures on IRIX, OSF/1, mingw. * m4/modfl-ieee.m4: New file. * m4/modfl.m4 (gl_FUNC_MODFL): If gl_FUNC_MODFL_IEEE is present, test whether modfl works with Inf. Replace it if not. * lib/math.in.h (modfl): Override if REPLACE_MODFF is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_MODFL. * modules/math (Makefile.am): Substitute REPLACE_MODFL. * modules/modfl (configure.ac): Consider REPLACE_MODFL. (Depends-on): Update dependencies. * modules/modfl-ieee (Files): Add m4/modfl-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_MODFL_IEEE. * doc/posix-functions/modfl.texi: Mention the modfl-ieee module. modfl-ieee: Fix dependencies. * modules/modfl-ieee (Depends-on): Add modf-ieee. modfl-ieee: Fix test failures. * lib/modfl.c (modfl): Treat NaN and Inf specially. * modules/modfl (Depends-on): Add isfinite, isinf. modff-ieee: Work around test failures on *BSD, IRIX, OSF/1, etc. * m4/modff-ieee.m4: New file. * m4/modff.m4 (gl_FUNC_MODFF): If gl_FUNC_MODFF_IEEE is present, test whether modff works with NaN and Inf. Replace it if not. * lib/math.in.h (modff): Override if REPLACE_MODFF is 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_MODFF. * modules/math (Makefile.am): Substitute REPLACE_MODFF. * modules/modff (configure.ac): Consider REPLACE_MODFF. (Depends-on): Update dependencies. * modules/modff-ieee (Files): Add m4/modff-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (Depends-on): Add modf-ieee. (configure.ac): Invoke gl_FUNC_MODFF_IEEE. * doc/posix-functions/modff.texi: Mention the modff-ieee module. modf-ieee: Work around test failures on *BSD, IRIX, OSF/1, Cygwin. * m4/modf-ieee.m4: New file. * m4/modf.m4 (gl_FUNC_MODF): If gl_FUNC_MODF_IEEE is present, test whether modf works with NaN and Inf. Replace it if not. * lib/math.in.h (modf): New declaration. * lib/modf.c: New file. * m4/math_h.m4 (gl_MATH_H): Test whether modf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_MODF, REPLACE_MODF. * modules/math (Makefile.am): Substitute GNULIB_MODF, REPLACE_MODF. * modules/modf (Files): Add lib/modf.c. (Depends-on): Add math, isfinite, trunc, isinf. (configure.ac): Addrange to compile lib/modf.c if needed. * modules/modf-ieee (Files): Add m4/modf-ieee.m4, m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_MODF_IEEE. * tests/test-math-c++.cc: Check the declaration of modf. * doc/posix-functions/modf.texi: Mention the modf-ieee module. Tests for module 'modfl-ieee'. * modules/modfl-ieee-tests: New file. * tests/test-modfl-ieee.c: New file. New module 'modfl-ieee'. * modules/modfl-ieee: New file. Tests for module 'modf-ieee'. * modules/modf-ieee-tests: New file. * tests/test-modf-ieee.c: New file. New module 'modf-ieee'. * modules/modf-ieee: New file. Tests for module 'modff-ieee'. * modules/modff-ieee-tests: New file. * tests/test-modff-ieee.c: New file. * tests/test-modf-ieee.h: New file. New module 'modff-ieee'. * modules/modff-ieee: New file. 2012-02-26 Bruno Haible Tests for module 'fabsl-ieee'. * modules/fabsl-ieee-tests: New file. * tests/test-fabsl-ieee.c: New file. New module 'fabsl-ieee'. * modules/fabsl-ieee: New file. Tests for module 'fabs-ieee'. * modules/fabs-ieee-tests: New file. * tests/test-fabs-ieee.c: New file. New module 'fabs-ieee'. * modules/fabs-ieee: New file. Tests for module 'fabsf-ieee'. * modules/fabsf-ieee-tests: New file. * tests/test-fabsf-ieee.c: New file. * tests/test-fabs-ieee.h: New file. New module 'fabsf-ieee'. * modules/fabsf-ieee: New file. 2012-02-26 Bruno Haible Tests for module 'fmal-ieee'. * modules/fmal-ieee-tests: New file. * tests/test-fmal-ieee.c: New file. New module 'fmal-ieee'. * modules/fmal-ieee: New file. Tests for module 'fma-ieee'. * modules/fma-ieee-tests: New file. * tests/test-fma-ieee.c: New file. New module 'fma-ieee'. * modules/fma-ieee: New file. Tests for module 'fmaf-ieee'. * modules/fmaf-ieee-tests: New file. * tests/test-fmaf-ieee.c: New file. * tests/test-fma-ieee.h: New file. New module 'fmaf-ieee'. * modules/fmaf-ieee: New file. 2012-02-26 Bruno Haible Tests for module 'ldexpl-ieee'. * modules/ldexpl-ieee-tests: New file. * tests/test-ldexpl-ieee.c: New file. New module 'ldexpl-ieee'. * modules/ldexpl-ieee: New file. Tests for module 'ldexp-ieee'. * modules/ldexp-ieee-tests: New file. * tests/test-ldexp-ieee.c: New file. New module 'ldexp-ieee'. * modules/ldexp-ieee: New file. Tests for module 'ldexpf-ieee'. * modules/ldexpf-ieee-tests: New file. * tests/test-ldexpf-ieee.c: New file. * tests/test-ldexp-ieee.h: New file. New module 'ldexpf-ieee'. * modules/ldexpf-ieee: New file. 2012-02-26 Bruno Haible Refactor frexp*-ieee tests. * tests/test-frexp-ieee.h: New file. * tests/test-frexpf-ieee.c: Include test-frexp-ieee.h. (main): Just call test_function. * tests/test-frexp-ieee.c: Include test-frexp-ieee.h. (main): Just call test_function. * tests/test-frexpl-ieee.c: Include test-frexp-ieee.h. (main): Just call test_function. * modules/frexpf-ieee-tests (Files): Add tests/test-frexp-ieee.h. * modules/frexp-ieee-tests (Files): Likewise. * modules/frexpl-ieee-tests (Files): Likewise. Tests for module 'frexpl-ieee'. * modules/frexpl-ieee-tests: New file. * tests/test-frexpl-ieee.c: New file. New module 'frexpl-ieee'. * modules/frexpl-ieee: New file. Tests for module 'frexp-ieee'. * modules/frexp-ieee-tests: New file. * tests/test-frexp-ieee.c: New file. New module 'frexp-ieee'. * modules/frexp-ieee: New file. Tests for module 'frexpf-ieee'. * modules/frexpf-ieee-tests: New file. * tests/test-frexpf-ieee.c: New file. New module 'frexpf-ieee'. * modules/frexpf-ieee: New file. 2012-02-26 Bruno Haible roundl-ieee tests: More tests. * tests/test-roundl-ieee.c: Include isnanl-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/roundl-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanl-nolibm. round-ieee tests: More tests. * tests/test-round-ieee.c: Include isnand-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/round-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. roundf-ieee tests: More tests. * tests/test-roundf-ieee.c: Include isnanf-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/roundf-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanf-nolibm. truncl-ieee tests: More tests. * tests/test-truncl-ieee.c: Include isnanl-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/truncl-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanl-nolibm. trunc-ieee tests: More tests. * tests/test-trunc-ieee.c: Include isnand-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/trunc-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. truncf-ieee tests: More tests. * tests/test-truncf-ieee.c: Include isnanf-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/truncf-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanf-nolibm. ceill-ieee tests: More tests. * tests/test-ceill-ieee.c: Include isnanl-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/ceill-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanl-nolibm. ceil-ieee tests: More tests. * tests/test-ceil-ieee.c: Include isnand-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/ceil-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. ceilf-ieee tests: More tests. * tests/test-ceilf-ieee.c: Include isnanf-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/ceilf-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanf-nolibm. floorl-ieee tests: More tests. * tests/test-floorl-ieee.c: Include isnanl-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/floorl-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanl-nolibm. floor-ieee tests: More tests. * tests/test-floor-ieee.c: Include isnand-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/floor-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. floorf-ieee tests: More tests. * tests/test-floorf-ieee.c: Include isnanf-nolibm.h, infinity.h, nan.h. (main): Add tests for [MX] shaded specification in POSIX. * modules/floorf-ieee-tests (Files): Add tests/infinity.h, tests/nan.h. (Depends-on): Add isnanf-nolibm. 2012-02-26 Bruno Haible fpieee: More comments. * m4/fpieee.m4 (gl_FP_IEEE): Add more comments. 2012-02-25 Bruno Haible Tests for module 'log10l'. * modules/log10l-tests: New file. * tests/test-log10l.c: New file. * tests/test-math-c++.cc: Check the declaration of log10l. New module 'log10l'. * lib/math.in.h (log10l): New declaration. * lib/log10l.c: New file. * m4/log10l.m4: New file. * modules/log10l: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log10l is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG10L, HAVE_LOG10L, HAVE_DECL_LOG10L. * modules/math (Makefile.am): Substitute GNULIB_LOG10L, HAVE_LOG10L, HAVE_DECL_LOG10L. * doc/posix-functions/log10l.texi: Mention the new module. 2012-02-25 Bruno Haible fmodl, remainder*: Avoid wrong results due to rounding errors. * lib/fmodl.c (fmodl): Correct the result if it is not within the expected bounds. * lib/remainderf.c (remainderf): Likewise. * lib/remainder.c (remainder): Likewise. * lib/remainderl.c (remainderl): Likewise. 2012-02-25 Bruno Haible Tests for module 'remainderl'. * modules/remainderl-tests: New file. * tests/test-remainderl.c: New file. * tests/test-math-c++.cc: Check the declaration of remainderl. New module 'remainderl'. * lib/math.in.h (remainderl): New declaration. * lib/remainderl.c: New file. * m4/remainderl.m4: New file. * modules/remainderl: New file. * m4/math_h.m4 (gl_MATH_H): Test whether remainderl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_REMAINDERL, HAVE_REMAINDERL. * modules/math (Makefile.am): Substitute GNULIB_REMAINDERL, HAVE_REMAINDERL. * doc/posix-functions/remainderl.texi: Mention the new module. 2012-02-25 Bruno Haible Tests for module 'remainderf'. * modules/remainderf-tests: New file. * tests/test-remainderf.c: New file. * tests/test-math-c++.cc: Check the declaration of remainderf. New module 'remainderf'. * lib/math.in.h (remainderf): New declaration. * lib/remainderf.c: New file. * m4/remainderf.m4: New file. * modules/remainderf: New file. * m4/math_h.m4 (gl_MATH_H): Test whether remainderf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_REMAINDERF, HAVE_REMAINDERF. * modules/math (Makefile.am): Substitute GNULIB_REMAINDERF, HAVE_REMAINDERF. * doc/posix-functions/remainderf.texi: Mention the new module. 2012-02-25 Bruno Haible remainder: Support for MSVC. * lib/math.in.h (remainder): New declaration. * lib/remainder.c: New file. * m4/remainder.m4: New file. * modules/remainder (Files): Add lib/remainder.c, m4/remainder.m4. (Depends-on): Add math, round, fma. (configure.ac): Use results of gl_FUNC_REMAINDER. * m4/math_h.m4 (gl_MATH_H): Test whether remainder is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_REMAINDER, HAVE_REMAINDER, HAVE_DECL_REMAINDER. * modules/math (Makefile.am): Substitute GNULIB_REMAINDER, HAVE_REMAINDER, HAVE_DECL_REMAINDER. * tests/test-math-c++.cc: Check the declaration of remainder. * doc/posix-functions/remainder.texi: Mention that the MSVC and IRIX 5 problems are fixed. 2012-02-25 Bruno Haible Tests for module 'fmodl'. * modules/fmodl-tests: New file. * tests/test-fmodl.c: New file. * tests/test-math-c++.cc: Check the declaration of fmodl. New module 'fmodl'. * lib/math.in.h (fmodl): New declaration. * lib/fmodl.c: New file. * m4/fmodl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether fmodl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMODL, HAVE_FMODL, REPLACE_FMODL. * modules/math (Makefile.am): Substitute GNULIB_FMODL, HAVE_FMODL, REPLACE_FMODL. * modules/fmodl: New file. * doc/posix-functions/fmodl.texi: Mention the new module. 2012-02-25 Bruno Haible Tests for module 'modfl'. * modules/modfl-tests: New file. * tests/test-modfl.c: New file. * tests/test-math-c++.cc: Check the declaration of modfl. New module 'modfl'. * lib/math.in.h (modfl): New declaration. * lib/modfl.c: New file. * m4/modfl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether modfl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_MODFL, HAVE_MODFL. * modules/math (Makefile.am): Substitute GNULIB_MODFL, HAVE_MODFL. * modules/modfl: New file. * doc/posix-functions/modfl.texi: Mention the new module. 2012-02-25 Bruno Haible Tests for module 'fabsl'. * modules/fabsl-tests: New file. * tests/test-fabsl.c: New file. * tests/test-math-c++.cc: Check the declaration of fabsl. New module 'fabsl'. * lib/math.in.h (fabsl): New declaration. * lib/fabsl.c: New file. * m4/fabsl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether fabsl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FABSL, HAVE_FABSL, REPLACE_FABSL. * modules/math (Makefile.am): Substitute GNULIB_FABSL, HAVE_FABSL, REPLACE_FABSL. * modules/fabsl: New file. * doc/posix-functions/fabsl.texi: Mention the new module. 2012-02-25 Bruno Haible fabs tests: More tests. * tests/test-fabs.c: Include , minus-zero.h. (zero): New variable. (main): Add tests for signed zero. * modules/fabs-tests (Files): Add tests/minus-zero.h. fabsf tests: More tests. * tests/test-fabsf.c: Include , minus-zero.h. (zero): New variable. (main): Add tests for signed zero. * modules/fabsf-tests (Files): Add tests/minus-zero.h. 2012-02-24 Bruno Haible atanl: Provide function definition on MSVC. * m4/atanl.m4 (gl_FUNC_ATANL): Test also whether atanl can be used as a function pointer. * lib/math.in.h (atanl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible acosl: Provide function definition on MSVC. * m4/acosl.m4 (gl_FUNC_ACOSL): Test also whether acosl can be used as a function pointer. * lib/math.in.h (acosl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible asinl: Provide function definition on MSVC. * m4/asinl.m4 (gl_FUNC_ASINL): Test also whether asinl can be used as a function pointer. * lib/math.in.h (asinl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible tanl: Provide function definition on MSVC. * m4/tanl.m4 (gl_FUNC_TANL): Test also whether tanl can be used as a function pointer. * lib/math.in.h (tanl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible cosl: Provide function definition on MSVC. * m4/cosl.m4 (gl_FUNC_COSL): Test also whether cosl can be used as a function pointer. * lib/math.in.h (cosl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible sinl: Provide function definition on MSVC. * m4/sinl.m4 (gl_FUNC_SINL): Test also whether sinl can be used as a function pointer. * lib/math.in.h (sinl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible logl: Provide function definition on MSVC. * m4/logl.m4 (gl_FUNC_LOGL): Test also whether logl can be used as a function pointer. * lib/math.in.h (logl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible expl: Provide function definition on MSVC. * m4/expl.m4 (gl_FUNC_EXPL): Test also whether expl can be used as a function pointer. * lib/math.in.h (expl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible sqrtl: Provide function definition on MSVC. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Test also whether sqrtl can be used as a function pointer. * lib/math.in.h (sqrtl): Undefine if it does not exist as a function. 2012-02-24 Bruno Haible ceill: Provide function definition on MSVC. * m4/ceill.m4 (gl_FUNC_CEILL_LIBS): Test also whether ceill can be used as a function pointer. * lib/math.in.h (ceill): Undefine if it is not declared as a function. 2012-02-24 Bruno Haible floorl: Provide function definition on MSVC. * m4/floorl.m4 (gl_FUNC_FLOORL_LIBS): Test also whether floorl can be used as a function pointer. * lib/math.in.h (floorl): Undefine if it is not declared as a function. 2012-02-24 Bruno Haible ceilf: Provide function definition on MSVC. * m4/ceilf.m4 (gl_FUNC_CEILF_LIBS): Test also whether ceilf can be used as a function pointer. * lib/math.in.h (ceilf): Undefine if it is not declared as a function. 2012-02-24 Bruno Haible floorf: Provide function definition on MSVC. * m4/floorf.m4 (gl_FUNC_FLOORF_LIBS): Test also whether floorf can be used as a function pointer. * lib/math.in.h (floorf): Undefine if it is not declared as a function. 2012-02-24 Paul Eggert stdnoreturn: new module This implements a replacement for C11's . * doc/gnulib.texi (Header File Substitutes): Add stdnoreturn. * doc/posix-headers/stdnoreturn.texi, lib/stdnoreturn.in.h: * m4/stdnoreturn.m4, modules/stdnoreturn, modules/stdnoreturn-tests: * tests/test-stdnoreturn.c: New files. 2012-02-24 Stanislav Brabec (tiny change) regex: fix false multibyte matches in some regular expressions See and . * lib/regex_internal.c (re_string_skip_chars): Fix miscomputation of remain_len that may cause incomplete multi-byte character and false match. 2012-02-24 Jim Meyering maint.mk: tell sc_prohibit_strcmp to ding "0 == strcmp (...)", too * top/maint.mk (sc_prohibit_strcmp): Also prohibit uses of strcmp uses with "==" *before* the call, e.g., 0 == strcmp (...) Remove now-unnecessary str''cmp obfuscation. Suggested by Akim Demaille. 2012-02-24 Bruno Haible streq: Rename macro. * lib/streq.h (STREQ_OPT): Renamed from STREQ. * NEWS: Mention the change. * lib/mbrtowc.c (mbrtowc): Update. * lib/uniwidth/cjk.h (is_cjk_encoding): Update. * lib/wcwidth.c (wcwidth): Update. Suggested by Akim Demaille and Jim Meyering. 2012-02-20 Paul Eggert regex: fix typo in definition of MIN * lib/regex_internal.h (MIN): Fix typo. Problem reported by Thomas Schwinge in . 2012-02-19 Paul Eggert Bruno Haible acl: Don't use ACL_CNT and similar ops, since they are unreliable. * lib/file-has-acl.c (file_has_acl) [HP-UX, NonStop Kernel]: Read the entries into a stack-allocated buffer directly. * lib/copy-acl.c (qcopy_acl) [HP-UX, NonStop Kernel]: Likewise. 2012-02-19 Paul Eggert Bruno Haible acl: Don't use GETACLCNT and similar ops, since they are unreliable. - There were several instances of this pattern: for (;;) { n = acl (f, GETACLCNT, 0, NULL); [ allocate an array A of size N ] if (acl (f, GETACL, n, a) == n) break; } This loop might never terminate if some other process is constantly manipulating the file's ACL. The loop should be rewritten to terminate. - The acl (... GETACLNT ...) call is merely an optimization; its value is merely a hint as to how big to make the array. A better optimization is to avoid the acl (... GETACLNT ...) call entirely, and just guess a reasonably-big size, growing the size and trying again if it's not large enough. This guarantees termination, and saves a system call. * lib/acl-internal.h: Include . (MIN, SIZE_MAX): New macros. * lib/file-has-acl.c (file_has_acl) [Solaris]: Read the entries into a stack-allocated buffer, and use malloc if it does not fit. Don't use GETACLCNT. * lib/set-mode-acl.c (qset_acl) [Solaris]: Likewise. 2012-02-19 Bruno Haible acl: Fix endless loop on Solaris with vxfs. * lib/file-has-acl.c (file_has_acl) [Solaris]: Treat a failing acl()/facl() call for ACE_GETACL like a failing call for ACE_GETACLCNT. * lib/set-mode-acl.c (qset_acl) [Solaris]: Likewise. * lib/copy-acl.c (qcopy_acl)[Solaris]: Likewise. * tests/test-sameacls.c (main)[Solaris]: Likewise. Reported by Bill Jones in , via Paul Eggert. 2012-02-19 Bruno Haible acl: Fix copy-acl test failure on Solaris 11.0. * lib/file-has-acl.c (NEW_ACE_WRITEA_DATA): New macro. (acl_ace_nontrivial): Relax the restrictions on access_masks[] so that this function returns 0 in some more cases. 2012-02-19 Bruno Haible acl: Update doc references. * doc/acl-resources.txt: Update links to Solaris documentation. 2012-02-19 Bruno Haible Fix test failure in many locales on Solaris 11. * tests/test-pipe-filter-gi1.c (main): Don't use range expression in 'tr' arguments. * tests/test-pipe-filter-ii1.c (main): Likewise. * build-aux/bootstrap (check_versions): Run 'tr' command with range expressions in the C locale. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise. * m4/host-os.m4 (gl_HOST_OS): Likewise. 2012-02-19 Bruno Haible gnulib-tool: Improve usage message. * gnulib-tool (func_usage): Move doc of --help and --version to the section "Operation modes". 2012-02-18 Reuben Thomas README-release: make it easier to execute commands * top/README-release: break commands out on to separate lines. 2012-02-16 Stefano Lattarini GNUmakefile: simplify detection of unconfigured trees * top/GNUmakefile: Use $(wildcard) instead of $(shell) to determine whether the tree make is being run from is already configured or not. Related simplifications. 2012-02-13 Simon Josefsson * gnulib-tool (func_usage): Document --help and --version. 2012-02-11 Jim Meyering bootstrap: don't exit 0 upon gnulib-tool failure * build-aux/bootstrap (gnulib_tool): If gnulib-tool fails, exit with its exit status, not 0. 2011-12-19 Reuben Thomas README-release: various improvements * top/README-release: Give a command to push changes for the release. Add "distcheck" to list of other pre-release checks. Fix instance of "make stable" which should be "make TYPE". 2012-02-09 Paul Eggert maint: replace FSF snail-mail addresses with URLs * config/argz.mk, lib/accept4.c, lib/alignof.h, lib/alloca.in.h: * lib/alphasort.c, lib/arcfour.c, lib/arcfour.h, lib/arctwo.c: * lib/arctwo.h, lib/argz.c, lib/arpa_inet.in.h, lib/asnprintf.c: * lib/asprintf.c, lib/assert.in.h, lib/base32.c, lib/base32.h: * lib/base64.c, lib/base64.h, lib/c-ctype.c, lib/c-ctype.h: * lib/c-strcase.h, lib/c-strcasecmp.c, lib/c-strncasecmp.c: * lib/check-version.c, lib/check-version.h, lib/config.charset: * lib/ctype.in.h, lib/des.c, lib/des.h, lib/dup3.c, lib/errno.in.h: * lib/float+.h, lib/fnmatch.c, lib/fnmatch.in.h, lib/fnmatch_loop.c: * lib/fseeko.c, lib/gai_strerror.c, lib/gc-gnulib.c: * lib/gc-libgcrypt.c, lib/gc-pbkdf2-sha1.c, lib/gc.h: * lib/getaddrinfo.c, lib/getdelim.c, lib/getfilecon.c, lib/getline.c: * lib/getlogin_r.c, lib/getpass.c, lib/getpass.h, lib/gettext.h: * lib/gettimeofday.c, lib/glob.in.h, lib/glthread/cond.c: * lib/glthread/cond.h, lib/glthread/lock.c, lib/glthread/lock.h: * lib/glthread/thread.c, lib/glthread/thread.h: * lib/glthread/threadlib.c, lib/glthread/yield.h, lib/hmac-md5.c: * lib/hmac-sha1.c, lib/hmac.h, lib/iconv.c, lib/iconv.in.h: * lib/iconv_close.c, lib/iconv_open.c, lib/inet_ntop.c, lib/isfinite.c: * lib/isinf.c, lib/iswblank.c, lib/langinfo.in.h, lib/link.c: * lib/localcharset.c, lib/localcharset.h, lib/lseek.c, lib/malloc.c: * lib/malloca.c, lib/malloca.h, lib/md2.c, lib/md2.h, lib/md4.c: * lib/md4.h, lib/md5.c, lib/md5.h, lib/memmem.c, lib/mempcpy.c: * lib/memset.c, lib/memxor.c, lib/memxor.h, lib/minmax.h, lib/mktime.c: * lib/msvc-inval.c, lib/msvc-inval.h, lib/msvc-nothrow.c: * lib/msvc-nothrow.h, lib/netdb.in.h, lib/netinet_in.in.h, lib/nproc.c: * lib/nproc.h, lib/obstack_printf.c, lib/pathmax.h, lib/pipe.c: * lib/pipe2.c, lib/poll.c, lib/poll.in.h, lib/printf-args.c: * lib/printf-args.h, lib/printf-parse.c, lib/printf-parse.h: * lib/pselect.c, lib/pthread.in.h, lib/pty-private.h, lib/pty.in.h: * lib/read-file.c, lib/read-file.h, lib/ref-add.sin, lib/ref-del.sin: * lib/regcomp.c, lib/regex.c, lib/regex.h, lib/regex_internal.c: * lib/regex_internal.h, lib/regexec.c, lib/rijndael-alg-fst.c: * lib/rijndael-alg-fst.h, lib/rijndael-api-fst.c: * lib/rijndael-api-fst.h, lib/rint.c, lib/rintf.c, lib/rintl.c: * lib/round.c, lib/roundf.c, lib/roundl.c, lib/scandir.c, lib/select.c: * lib/sha1.c, lib/sha1.h, lib/size_max.h, lib/snprintf.c: * lib/stdalign.in.h, lib/stdarg.in.h, lib/stdbool.in.h: * lib/stddef.in.h, lib/stdint.in.h, lib/stdio.in.h, lib/str-kmp.h: * lib/str-two-way.h, lib/strcasecmp.c, lib/strcasestr.c, lib/strdup.c: * lib/striconv.c, lib/striconv.h, lib/string.in.h, lib/strings.in.h: * lib/strncasecmp.c, lib/strndup.c, lib/strnlen.c, lib/strpbrk.c: * lib/strptime.c, lib/strsep.c, lib/strstr.c, lib/strverscmp.c: * lib/sys_file.in.h, lib/sys_ioctl.in.h, lib/sys_select.in.h: * lib/sys_socket.in.h, lib/sys_stat.in.h, lib/sys_time.in.h: * lib/sys_times.in.h, lib/sys_types.in.h, lib/sys_uio.in.h: * lib/sys_utsname.in.h, lib/sys_wait.in.h, lib/tcgetsid.c: * lib/termios.in.h, lib/time.in.h, lib/time_r.c, lib/timegm.c: * lib/times.c, lib/unictype/3level.h, lib/unictype/3levelbit.h: * lib/unistd.in.h, lib/vasnprintf.c, lib/vasnprintf.h, lib/vasprintf.c: * lib/vsnprintf.c, lib/waitpid.c, lib/wchar.in.h, lib/wctype.in.h: * lib/xsize.h, tests/test-closein.c, tests/test-des.c: * tests/test-fclose.c, tests/test-fgetc.c, tests/test-filevercmp.c: * tests/test-fputc.c, tests/test-fread.c, tests/test-fwrite.c: * tests/test-gc-arcfour.c, tests/test-gc-arctwo.c, tests/test-gc-des.c: * tests/test-gc-hmac-md5.c, tests/test-gc-hmac-sha1.c: * tests/test-gc-md2.c, tests/test-gc-md4.c, tests/test-gc-md5.c: * tests/test-gc-pbkdf2-sha1.c, tests/test-gc-rijndael.c: * tests/test-gc-sha1.c, tests/test-gc.c, tests/test-getdelim.c: * tests/test-getline.c, tests/test-getndelim2.c, tests/test-md2.c: * tests/test-md4.c, tests/test-parse-datetime.c, tests/test-perror.c: * tests/test-perror2.c, tests/test-pipe.c, tests/test-pipe2.c: * tests/test-poll.c, tests/test-quotearg-simple.c: * tests/test-quotearg.c, tests/test-quotearg.h: * tests/test-round-ieee.c, tests/test-round1.c: * tests/test-roundf-ieee.c, tests/test-roundf1.c: * tests/test-roundl-ieee.c, tests/test-roundl.c: * tests/test-safe-alloc.c, tests/test-sigpipe.c: * tests/test-spawn-pipe-child.c, tests/test-spawn-pipe-main.c: * tests/test-strerror.c, tests/test-strerror_r.c: * tests/test-strsignal.c, tests/test-strverscmp.c: * tests/test-xmemdup0.c: Replace FSF snail mail addresses with URLs, as per GNU coding standards. See glibc bug . 2011-12-22 Reuben Thomas README-release: capitalize a word and split a line * top/README-release: Fix punctuation and spacing. 2012-02-08 Akim Demaille fatal-signal: use C prototypes (with explicit void). * lib/fatal-signal.c (uninstall_handlers, install_handlers) (init_fatal_signal_set, block_fatal_signals): Fix signatures. 2012-02-07 Paul Eggert regex: spelling fix * lib/regexec.c: spelling fix regex: rely on stdint.h for SIZE_MAX * lib/regex_internal.h (SIZE_MAX): Remove; stdint.h supplies this now. 2012-02-07 Paul Eggert regex: merge glibc changes * lib/regcomp.c (init_dfa): Tighten overflow checks to test for IDX_MAX too, since IDX_MAX can be much less than SIZE_MAX. (init_word_char): Work even if bitset words are not exactly 32 or 64 bits wide. Don't assume there are no padding bits. * lib/regex.c [_LIBC]: Do not include . [!_LIBC]: Add pragmas to ignore -Wsuggest-attributes=pure and -Wtype-limits. * lib/regex.h (__USE_GNU): Renamed from __USE_GNU_REGEX, to avoid needless disagreement with glibc. All uses changed. Define it to 1 only if _GNU_SOURCE, to match glibc. (_REG_RM_NAME): Remove; no longer needed, since the names in question are now all protected by __USE_GNU. (_REG_RE_NAME): Remove; replaced by glibc's __REPB_PREFIX. (REG_TRANSLATE_TYPE): Remove; replaced by glibc's __RE_TRANSLATE_TYPE. * lib/regex_internal.h (MIN): New macro. 2012-01-03 Ulrich Drepper * lib/regcomp.c (init_word_char): Optimize regex a bit. 2011-12-30 Jakub Jelinek * lib/regex_internal.c (re_string_fetch_byte_case): Fix up regcomp/regexec. The problem is that parse_bracket_symbol is miscompiled, and it turns out it is because of an incorrect attribute on re_string_fetch_byte_case. Unlike re_string_peek_byte_case, this one is really not pure, it modifies memory (increments pstr->cur_idx), and with the pure attribute GCC assumed it doesn't and it cached the presumed value of regexp->cur_idx in a variable across the for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } 2011-11-29 Andreas Schwab * lib/regcomp.c (build_equiv_class): Fix access after end of search string in regex matcher. 2011-11-12 Ulrich Drepper * lib/regex_internal.c, lib/regex_internal.h: Fix warnings in regex. 2011-10-12 Ulrich Drepper * lib/regcomp.c (parse_branch): One more regex memory leak fixed. 2011-10-11 Ulrich Drepper * lib/regcomp.c (parse_branch, parse_sub_exp): More regex memory leak fixes and tests. (parse_sub_exp, parse_bracket_exp): Fix memory leak for some invalid regular expressions. 2011-05-28 Ulrich Drepper * lib/regex_internal.c, lib/regexec.c: Fix unnecessary overallocation due to incomplete character. When incomplete characters are found at the end of a string the code ran amok and allocated lots of memory. Stricter limits are now in place. 2011-05-20 Reuben Thomas * lib/regex.h: Update documentation. 2011-05-16 Aharon Robbins * lib/regex.h: Update RE_SYNTAX*_AWK constants. 2010-05-05 Andreas Schwab * lib/regexec.c (find_collation_sequence_value): Fix lookup of collation sequence value during regexp matching. 2010-01-22 Ulrich Drepper * lib/regex_internal.c (re_dfa_add_node): Extend overflow detection. 2008-01-16 Ulrich Drepper * lib/regex.h: Cleanup namespace. 2007-11-26 Ulrich Drepper * lib/regex.h (REG_ENOSYS): Define REG_ENOSYS also for __USE_XOPEN2K. 2007-08-26 Ulrich Drepper * lib/regex_internal.h: Prevent some declarations and definitions to be seen when used in tests. 2005-05-06 Ulrich Drepper * lib/regex_internal.h: Include bits/libc-lock.h or define dummy __libc_lock_* macros if not _LIBC. (struct re_dfa_t): Add lock. 2012-02-07 Eric Blake maint.mk: also prohibit lower-case @var@ * top/maint.mk (sc_makefile_at_at_check): Enhance check to cover lower case, like @top_srcdir@. 2012-02-04 Eric Blake canonicalize: avoid uninitialized memory use * lib/canonicalize-lgpl.c (__realpath): Avoid possibility of random '/' left in dest. * lib/canonicalize.c (canonicalize_filename_mode): Likewise. 2012-02-04 Bruno Haible isatty: Fix test failure of ptsname_r on native Windows. * lib/isatty.c (_isatty_nothrow): Upon exception, return 0, not -1, and don't set errno. (isatty): Test first whether fd is valid. Set errno when returning 0. 2012-02-04 Bruno Haible spawn-pipe tests: Fix a NULL program name in a diagnostic. * tests/test-spawn-pipe-main.c: Include progname.h. (main): Invoke set_program_name. * modules/spawn-pipe-tests (Depends-on): Add progname. nonblocking-socket tests: Fix a NULL program name in a diagnostic. * tests/test-nonblocking-socket-main.c: Include progname.h. (main): Invoke set_program_name. * modules/nonblocking-socket-tests (Depends-on): Add progname. nonblocking-pipe tests: Fix a NULL program name in a diagnostic. * tests/test-nonblocking-pipe-main.c: Include progname.h. (main): Invoke set_program_name. * modules/nonblocking-pipe-tests (Depends-on): Add progname. 2012-02-04 Eric Blake canonicalize-lgpl: fix // handling * lib/canonicalize-lgpl.c (__realpath): Don't convert /// to //. canonicalize: fix // handling * lib/canonicalize.c (canonicalize_filename_mode): Don't convert /// to //, since only // is special. 2012-02-04 Bruno Haible ioctl: Fix test failure on native Windows. * lib/ioctl.c: Include msvc-nothrow.h. (primary_ioctl): If fd is not a valid handle, set errno to EBADF. 2012-02-04 Bruno Haible fsync: Avoid test failure on native Windows. * lib/fsync.c (fsync) [Windows]: Don't fail if the handle is merely read-only. 2012-02-04 Bruno Haible sys_select: Avoid syntax error on OpenBSD 5.0. * lib/sys_select.in.h [OpenBSD]: When /usr/include/pthread.h is currently being included, just include the system's . 2012-02-04 Bruno Haible sys_select: Avoid syntax error on OpenBSD 5.0. * lib/sys_select.in.h: Include only after the include_next , not before. Reported by Jiri B . 2012-02-04 Bruno Haible get-rusage-as, get-rusage-data tests: Avoid test failure with gcc-4.7. * tests/test-get-rusage-as.c (main): Assign the malloc() results to global variables. * tests/test-get-rusage-data.c (main): Likewise. Reported by Jim Meyering. 2012-02-04 Bruno Haible stdioext: Fix last commit. * lib/fwritable.c [EPLAN9]: Include . 2012-02-03 Bruno Haible stdioext: Add tentative support for Plan9. * lib/stdio-impl.h: Include . * lib/fseterr.c (fseterr) [EPLAN9]: Add conditional code. * lib/freadable.c (freadable): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fbufmode.c (fbufmode): Likewise. * lib/freading.c (freading): Likewise. * lib/fwriting.c (fwriting): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/fpurge.c (fpurge): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * m4/fpending.m4 (gl_PREREQ_FPENDING): Add a variant for Plan9. Reported by Jens Staal . 2012-02-02 Jim Meyering file-has-acl: suppress a warning from gcc -Wsuggest-attribute=const * lib/file-has-acl.c (file_has_acl): This function (for some #ifdefs) would evoke a new gcc warning. Given all of the #ifdefs, it is better not even to try to add the attribute. Instead, add a pragma to suppress the suggestion/warning. 2012-01-31 Karl Berry setstate doc: typo. * doc/posix-functions/setstate.texi (setstate): { not (. 2012-01-31 Bruno Haible popen: Make more robust on Windows. * lib/popen.c: On native Windows, use the _popen based code even if HAVE_POPEN is set. * doc/posix-functions/popen.texi: Mention necessity of COMSPEC environment variable on native Windows. 2012-01-30 Bruno Haible pclose: Fix typo. * lib/stdio.in.h (pclose): Fix typo in warning message. 2012-01-30 Bruno Haible doc about getlogin_r, setstate. * doc/posix-functions/getlogin_r.texi: List the incompatible declaration problem under "not fixed by gnulib". * doc/posix-functions/setstate.texi: Mention incompatible declaration problem on Solaris 11 and other platforms. 2012-01-30 Chuanchang Jia (tiny change) Bruno Haible poll tests: Make test more robust. * tests/test-poll.c: Include macros.h. (test_accept_first, test_pair, test_socket_pair, test_pipe): Verify return value of various I/O operations. * modules/poll-tests (Files): Add tests/macros.h. 2012-01-30 Bruno Haible sys_stat: Fix support for mingw64 and MSVC. * lib/sys_stat.in.h (stat) [AIX]: Don't redefine 'stat' if the system header files already do it. (stat) [mingw, msvc]: Redefine the symbol to which stat is defined, not stat itself. Reported by Marc-André Lureau . 2012-01-30 Bruno Haible wcwidth: Work around bug in UTF-8 locale on OpenBSD 5.0. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test also wcwidth of U+05B0. * doc/posix-functions/wcwidth.texi: Mention the OpenBSD 5.0 bug. 2012-01-29 Bruno Haible quotearg: Fix test failure on MacOS X 10.5. * tests/test-quotearg-simple.c: Include localcharset.h. (main): If the locale encoding is not ASCII, bypass the tests of locale_quoting_style and clocale_quoting_style. * modules/quotearg-tests (Depends-on): Add 'localcharset'. 2012-01-29 Jim Meyering maint.mk: sc_prohibit_canonicalize_without_use: avoid false positive * top/maint.mk (sc_prohibit_canonicalize_without_use): Also detect uses of canonicalize_file_name. 2012-01-28 Bruno Haible test-framework-sh: Fix test failure with AIX 7.1 diff. * tests/init.sh (compare_): Don't use 'diff -u' if it inserts a space in column 1, like 'diff -c' does. * tests/test-init.sh (test_compare): Don't repeat the test from init.sh whether 'diff -u' is used. Instead, test whether the output contains some '@' character. 2012-01-28 Paul Eggert strtoimax: eliminate need for stdint.h, inttypes.h checks * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Don't use gl_AC_HEADER_STDINT_H or gl_AC_HEADER_INTTYPES_H. This reduces the prerequisites for a recently-introduced strtoimax test. I guess this might cause strtoimax to be replaced when not strictly necessary on older hosts, but this shouldn't introduce any bugs and it should make Emacs 'configure' faster on typical modern hosts. Problem discovered when importing the latest gnulib to an Emacs test version. * modules/strtoimax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4. 2012-01-28 Bruno Haible sys_time: Override 'struct timeval' on some native Windows platforms. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Test whether tv_sec has the right type. Set REPLACE_STRUCT_TIMEVAL if not. (gl_HEADER_SYS_TIME_H_DEFAULTS): Initialize REPLACE_STRUCT_TIMEVAL. * lib/sys_time.in.h: Include also when 'struct timeval' needs to be overridden. (timeval): Override if REPLACE_STRUCT_TIMEVAL is set. * modules/sys_time (Makefile.am): Substitute REPLACE_STRUCT_TIMEVAL. * tests/test-sys_select.c: Check that the tv_sec member has the same size as a 'time_t'. * tests/test-sys_time.c: Likewise. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): If REPLACE_STRUCT_TIMEVAL is set, set also REPLACE_GETTIMEOFDAY. * lib/gettimeofday.c (gettimeofday): If 'struct timeval' is overridden, convert the resulting 'struct timeval' before returning. * lib/select.c: Include . (select, timeval): Undefine at the right place. * modules/select (Depends-on): Add sys_time. * doc/posix-headers/sys_time.texi: Mention the problem with tv_sec on some Windows platforms. Reported by Marc-André Lureau . 2012-01-28 Marc-André Lureau (tiny change) accept4, fcntl, socket modules: Avoid warnings on x86_64 mingw64. * lib/accept4.c (accept4): Use intptr_t to convert handle pointer to an integer. * lib/fcntl.c (dupfd): Likewise. * lib/w32sock.h (SOCKET_TO_FD): Likewise. 2012-01-28 Bruno Haible fcntl: Avoid compilation error on native Windows. * modules/fcntl (Depends-on): Add 'close'. 2012-01-28 Marc-André Lureau (tiny change) select, poll, isatty: Avoid warnings on x86_64 mingw64. * lib/select.c (IsConsoleHandle): Use intptr_t to convert handle pointer to an integer. * lib/poll.c (IsConsoleHandle): Likewise. * lib/isatty.c (IsConsoleHandle): Likewise. 2012-01-28 Jim Meyering doc: clarify README-release * top/README-release: Clarify: you should make a point to have the latest stable versions of build tools in your PATH, and the reference to buildreq is solely for its list of tool names, not for its minimal-functional version numbers. Prompted by discussion with Reuben Thomas and Gary V. Vaughan. maint.mk: use more readable (yet functionally equivalent) quoting It is common to quote a single quote in a single quoted string like this: '...'\''...'. Unless you know the idiom, that looks like gibberish, so prefer to double-quote the string when possible. Then you can use a more readable, lone single quote: "...'..." * top/maint.mk (sc_cast_of_argument_to_free): Quoting like this "don't" is more readable than the equivalent 'don'\''t'. (sc_cast_of_x_alloc_return_value): Likewise. (sc_cast_of_alloca_return_value): Likewise. (sc_makefile_path_separator_check): Similar: use ":" in '...', rather than '\'':'\''. 2012-01-27 Paul Eggert stdalign: relax _Alignof and tighten _Alignas test * m4/stdalign.m4 (gl_STDALIGN_H): Relax the _Alignof test, as it was too strict: alignof must divide offsetof, but it need not equal offsetof. Inspired by Joseph S. Myers's comment . Conversely, tighten the _Alignas test a bit, as the resulting alignment must be exactly 8. 2012-01-27 Bruno Haible stdalign: Document the last change. * doc/posix-headers/stdalign.texi: Mention GCC bug 52023. 2012-01-27 Paul Eggert stdalign: check that alignof and offsetof are consistent * m4/stdalign.m4 (gl_STDALIGN_H): Check for GCC bug 52023. Problem reported for gnulib by Richard W.M. Jones in . 2012-01-27 Jim Meyering update-copyright: accept new option: UPDATE_COPYRIGHT_USE_INTERVALS=2 * build-aux/update-copyright: When UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps to the minimal containing range. For example, convert 2000, 2004-2007, 2009 to 2000-2009. * tests/test-update-copyright.sh: Test for this. The FSF confirmed it is ok to do this, assuming there is at least one significant change per year in the affected range: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29554/focus=29860 2012-01-26 Bruno Haible pipe2: refine doc about thread-safety * doc/glibc-functions/pipe2.texi: Clarify the extent of the multithread-safety problem. * doc/glibc-functions/accept4.texi: Likewise. 2012-01-26 Bruno Haible posix_spawn_file_actions_addopen: Fix 2012-01-08 commit. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN): In the test program, include , for O_RDONLY. 2012-01-26 Eric Blake pipe2: document lack of thread-safety in replacement * doc/glibc-functions/pipe2.texi (pipe2): Mention thread safety issue in replacement. * doc/glibc-functions/accept4.texi (accept4): Likewise. Based on a report by Eric Wong. 2012-01-24 Marc-André Lureau (tiny change) Bruno Haible malloca: Avoid warnings on x86_64 mingw64. * lib/malloca.c: Include . (mmalloca, freea): Use uintptr_t to convert pointers to integers. * modules/malloca (Depends-on): Add stdint. * modules/relocatable-prog-wrapper (Depends-on): Likewise. 2012-01-25 Paul Eggert obstack: remove __STDC__ conditionals * lib/obstack.h: Remove __STDC__ conditionals, as suggested by Joseph S. Myers in . This leaves lib/localcharset.c, m4/iconv.m4, and a confusing comment in m4/include_next.m4 as the only gnulib-maintained places that still refer to __STDC__. 2012-01-24 Bruno Haible havelib: Modern quoting. * build-aux/config.rpath: Quote 'like this', not `like this', as per the recent change to the GNU coding standards. 2012-01-24 Bruno Haible stdint: Improve support for Android. * lib/stdint.in.h: Test __ANDROID__, not __BIONIC__. Reported by Simon Josefsson . 2012-01-23 Paul Eggert doc: omit trailing empty lines from INSTALL etc. * doc/Makefile (INSTALL): Omit trailing empty lines. (INSTALL.ISO, INSTALL.UTF-8): Build from INSTALL, so that these also omit trailing empty lines. This simplifies the build procedure. 2012-01-23 Jim Meyering tests: avoid spurious warnings about gl_sockets_startup Fedora rawhide's gcc version 4.7.0 20120119 with -Wunused-value would warn about every use of "gl_sockets_startup (SOCKETS_1_1);" reporting a "statement with no effect". * tests/test-accept.c (main): Mark as "(void)". * tests/test-accept4.c (main): Likewise. * tests/test-bind.c (main): Likewise. * tests/test-connect.c (main): Likewise. * tests/test-getpeername.c (main): Likewise. * tests/test-getsockname.c (main): Likewise. * tests/test-getsockopt.c (main): Likewise. * tests/test-listen.c (main): Likewise. * tests/test-recv.c (main): Likewise. * tests/test-recvfrom.c (main): Likewise. * tests/test-send.c (main): Likewise. * tests/test-sendto.c (main): Likewise. * tests/test-setsockopt.c (main): Likewise. * tests/test-shutdown.c (main): Likewise. 2012-01-21 Bruno Haible locale-fr.m4: Fix for Android. * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Avoid compilation failure of the test program on Bionic libc. 2012-01-21 Jim Meyering bootstrap: fail when bootstrap_post_import_hook fails Otherwise, it's far too easy to miss diagnostics emitted between gnulib-tool's output and that of running configure. * build-aux/bootstrap: Fail when bootstrap_post_import_hook fails. 2012-01-17 Jim Meyering maint: enable sc_trailing_blank * build-aux/pmccabe.css: Remove trailing blanks. * doc/acl-cygwin.txt: Likewise. * doc/gnu-oids.texi: Likewise * cfg.mk: Enable sc_trailing_blank. Exempt build-aux/texinfo.tex and doc/Copyright/assign.future.manual. 2012-01-17 Jim Meyering maint: enable sc_prohibit_openat_without_use * cfg.mk: Enable sc_prohibit_openat_without_use. Exempt lib/selinux-at.c. 2012-01-17 Jim Meyering maint: enable sc_prohibit_cloexec_without_use * cfg.mk: Enable sc_prohibit_cloexec_without_use. * lib/dup-safer-flag.c: Don't include "cloexec.h". Not needed. 2012-01-17 Jim Meyering maint: enable sc_prohibit_intprops_without_use * cfg.mk: Enable sc_prohibit_intprops_without_use * tests/test-nanosleep.c: Don't include "intprops.h". Not needed. 2012-01-17 Jim Meyering maint: enable sc_prohibit_hash_pjw_without_use * cfg.mk: Enable sc_prohibit_hash_pjw_without_use. * top/maint.mk (sc_prohibit_hash_pjw_without_use): Adjust regexp to match any use of \, i.e., not necessarily with a following " (". 2012-01-17 Jim Meyering maint: enable double-word-prohibiting rule * cfg.mk (local-checks-to-skip): Enable sc_prohibit_doubled_word. Exempt three files. 2012-01-17 Jim Meyering maint: remove empty lines at EOF, but excluding modules/* Apply syntax rules at home as well as abroad. Most changes were induced by running this: make srcdir=. _build-aux=build-aux -f top/maint.mk \ sc_prohibit_empty_lines_at_EOF | grep -v modules/ \ | xargs perl -pi -0777 -e 's/\n\n+$/\n/' * cfg.mk (local-checks-to-skip): Enable sc_prohibit_empty_lines_at_EOF. Exempt modules/* and two binary files. Also exempt doc/INSTALL*, per request from Bruno Haible. * doc/regexprops-generic.texi: *Add* a newline at EOF. There was none. * doc/Copyright/assign.translation.manual: Remove empty lines at EOF. * doc/Copyright/request-assign.future: Likewise. * doc/Copyright/request-disclaim.changes: Likewise. * doc/INSTALL: Likewise. * doc/INSTALL.ISO: Likewise. * doc/INSTALL.UTF-8: Likewise. * doc/acl-cygwin.txt: Likewise. * doc/acl-resources.txt: Likewise. * doc/fdl-1.2.texi: Likewise. * doc/fdl-1.3.texi: Likewise. * doc/fdl.texi: Likewise. * lib/argp-pin.c: Likewise. * lib/round.c: Likewise. * lib/unicase/u16-totitle.c: Likewise. * lib/unictype/block_test.c: Likewise. * lib/uninorm/canonical-decomposition.c: Likewise. * m4/README: Likewise. * m4/relocatable-lib.m4: Likewise. * tests/test-isnand-nolibm.c: Likewise. * tests/test-isnand.c: Likewise. * tests/uninorm/NormalizationTest.txt: Likewise. 2012-01-17 Jim Meyering maint: add framework to run syntax-check rules against gnulib sources * cfg.mk: New file, to disable all currently-failing tests. We'll enable them one by one, as they are made to pass. * Makefile (sc_maint): New rule. 2012-01-21 Bruno Haible stdint: Add support for Android. * lib/stdint.in.h: When included from Bionic , just include the system's . Reported by Simon Josefsson . 2012-01-19 Jim Meyering bootstrap: add bootstrap_post_import_hook Bison does still need something like the gnulib_mk_hook whose invocation I had to remove along with slurp in commit 767ccd40. Technically, we could get along without it, but doing so would have required living with a warning and a mandatory post-bootstrap automake rerun. * build-aux/bootstrap (gnulib_mk_hook): Remove definition, too. (bootstrap_post_import_hook): New function. Invoke it after gnulib-tool --import and before autoreconf. 2012-01-18 Jim Meyering gitlog-to-changelog: don't use "no_"-prefixed variable name * build-aux/gitlog-to-changelog (main): Use getopt's "!" attribute to enable both --cluster and --no-cluster. Change variable name, s/\$no_cluster/$cluster/, and reverse usage to match. gitlog-to-changelog: use "||", not "or" in expressions * build-aux/gitlog-to-changelog (main): Use "||", not "or" in expressions. 2012-01-17 Joel E. Denny gitlog-to-changelog: new option --no-cluster * build-aux/gitlog-to-changelog: New option --no-cluster, disables clustering of adjacent commit messages. 2012-01-17 Jim Meyering maint: spell file systems with two words, not one * m4/ls-mntd-fs.m4 (MOUNTED_INTERIX_STATVFS): Spell file systems with two words, not one. 2012-01-16 Jim Meyering bootstrap: add a FIXME comment to ensure we eventually remove the hack * build-aux/bootstrap (gnulib_tool_options): Add comment. 2012-01-16 Eric Blake bootstrap: cater to autoconf 2.59 * build-aux/bootstrap (AUTORECONF): Work even when --no-recursive is not available. bootstrap: properly check for libtool * build-aux/bootstrap (libtoolize): Also run libtool when older usage is detected. 2012-01-15 Bruno Haible Improve support for MSVC 9. * lib/unistd.in.h: Include when needed to avoid redefinition clashes on MSVC. * lib/fcntl.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/sys_stat.in.h: Likewise. 2011-01-15 Stefano Lattarini gnupload: we hold the master copy of this script now For motivation and more information, see: * build-aux/gnupload: Make it clear in the heading comments that the master copy of this file is maintained by gnulib. Since we are at it, bump its copyright year and ... ($scriptversion): ... the date in its version. ($usage): Patches and bug reports should be sent to the gnulib list, not the automake one. * config/srclist.txt: Don't try to sync 'gnupload' from automake anymore. 2012-01-15 Bruno Haible Fix module 'random'. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether random, srandom, initstate, setstate are declared. 2012-01-14 Bruno Haible Tests for module 'random'. * modules/random-tests: New file. * tests/test-random.c: New file, based on tests/test-random_r.c. New module 'random'. * lib/stdlib.in.h (random, srandom, initstate, setstate): New declarations. * lib/random.c: New file, based on glibc/stdlib/random.c. * m4/random.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_RANDOM, HAVE_RANDOM. * modules/stdlib (Makefile.am): Substitute GNULIB_RANDOM, HAVE_RANDOM. * modules/random: New file. * config/srclist.txt: Add an entry for random.c. * doc/posix-functions/random.texi: Mention the 'random' module. * doc/posix-functions/initstate.texi: Likewise. * doc/posix-functions/setstate.texi: Likewise. * doc/posix-functions/srandom.texi: Likewise. 2012-01-12 Bruno Haible random_r: Use common idioms. * lib/random_r.c: Include first. random_r: Override incompatible API on AIX, OSF/1. * lib/stdlib.in.h (random_r, srandom_r, initstate_r, setstate_r): Override the system function if REPLACE_RANDOM_R is 1. * m4/random_r.m4 (gl_FUNC_RANDOM_R): Require AC_CANONICAL_HOST. On AIX and OSF/1, set REPLACE_RANDOM_R. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_RANDOM_R. * modules/stdlib (Makefile.am): Substitute REPLACE_RANDOM_R. * modules/random_r (configure.ac): Test REPLACE_RANDOM_R. * doc/glibc-functions/initstate_r.texi: Mention the AIX, OSF/1 problem. * doc/glibc-functions/random_r.texi: Likewise. * doc/glibc-functions/setstate_r.texi: Likewise. random_r: Support for MSVC 9. * lib/random_r.c: Include stdint.h, not inttypes.h. 2012-01-12 Eric Blake inet_ntop: guard extra work by IF_LINT * lib/inet_ntop.c (inet_ntop6): Mark spurious initialization, for better code generation when not checking for warnings. Suggested by Paul Eggert and Jim Meyering. strptime: fix regression on mingw * lib/strptime.c (__strptime_internal) [!_LIBC && !HAVE_TM_GMTOFF]: Fix regression. Reported by Bruno Haible. 2012-01-11 Reuben Thomas Bruno Haible copy-file: add error-code-returning variant. * lib/copy-file.h (GL_COPY_ERR_*): New enumeration items. (qcopy_file_preserving): New declaration. * lib/copy-file.c (qcopy_file_preserving): Renamed from copy_file_preserving. Change return type to 'int'. Don't emit an error message here. (copy_file_preserving): New function. * tests/test-copy-file.c: Include . (main): Test qcopy_file_preserving if the environment variable NO_STDERR_OUTPUT is set. * tests/test-copy-file-1.sh: Invoke test-copy-file.sh a second time, with NO_STDERR_OUTPUT * tests/test-copy-file-2.sh: Likewise. 2012-01-10 Bruno Haible copy-file: Use 'quote' module consistently. * lib/copy-file.c (copy_file_preserving): Use quote(). copy-file: Refactor. * lib/copy-file.c: Include quote.h. (copy_file_preserving): Call qcopy_acl instead of copy_acl. Emit error message here. * modules/copy-file (Depends-on): Add quote. acl: Export qcopy_acl. * lib/acl.h (qcopy_acl): New declaration. * lib/copy-acl.c (qcopy_acl): Make non-static. acl: Rename a local variable. * lib/set-mode-acl.c (set_acl): Use same variable name as in copy_acl. acl: Align return values of copy_acl and qcopy_acl. * lib/copy-acl.c (copy_acl): Return the same value as qcopy_acl, maybe < -1. 2012-01-11 Eric Blake strptime: silence gcc warnings * lib/strptime.c (__strptime_internal) [!_NL_CURRENT], [!_LIBC && !HAVE_TM_GMTOFF]: Avoid unused variables. Reported by Daniel P. Berrange. inet_ntop: silence gcc warning * lib/inet_ntop.c (inet_ntop6): Initialize best.base. Reported by Daniel P. Berrange. 2012-01-11 Dmitry V. Levin getloadavg test: skip the test on GNU/Linux without /proc mounted GNU libc implements getloadavg(3) on Linux by parsing /proc/loadavg file. When /proc is not mounted, it always fails with ENOENT. * tests/test-getloadavg.c (main): Treat ENOENT return code from getloadavg(3) the same way as ENOSYS and ENOTSUP. 2012-01-10 Bruno Haible regex: Avoid link error on MSVC 9. * modules/regex (Depends-on): Add wctype. 2012-01-10 Bruno Haible doc: Mention --with-tests option. * gnulib-tool (func_usage): Suggest --with-tests for --test etc. * doc/gnulib.texi (Extra tests modules): Mention the need to pass --with-tests. Reported by Reuben Thomas. 2012-01-10 Reuben Thomas users.txt: order package names lexicographically. * users.txt: Order package names lexicographically. 2012-01-10 Jim Meyering maint.mk: fix description in comment * top/maint.mk (require_exactly_one_NL_at_EOF_): Fix comment. ignore-value: remove deprecated ignore_ptr function * lib/ignore-value.h (ignore_ptr): Remove deprecated function. * NEWS: Note this. 2012-01-09 Jim Meyering test-init.sh: avoid a subshell * tests/test-init.sh: Remove protective subshell. Suggested by Bernhard Voelker. While a subshell is normally required to protect against older shells (Solaris, FreeBSD) that warn about a missing program before performing redirection, the shell-selection tests performed by init.sh probably exclude any offending shell. 2012-01-08 Bruno Haible setlocale tests: Avoid test failure on Solaris 11.0. * tests/test-setlocale2.sh: Use 'env' to set the LC_ALL environment variable. 2012-01-08 Bruno Haible posix_spawn_file_actions_addopen: Work around Solaris 11.0 bug. * m4/spawn_h.m4 (gl_SPAWN_H_DEFAULTS): Initialize REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN): New macro. * lib/spawn.in.h (posix_spawn_file_actions_addopen): Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN, not REPLACE_POSIX_SPAWN. * lib/spawn_faction_addopen.c: Add workaround implementation if HAVE_WORKING_POSIX_SPAWN. * modules/spawn (Makefile): Substitute REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN. * modules/posix_spawn_file_actions_addopen (configure.ac): Invoke gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN. Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN, not REPLACE_POSIX_SPAWN. (Depends-on): Update conditions. * doc/posix-functions/posix_spawn_file_actions_addopen.texi: Mention the Solaris 11 bug. 2012-01-08 Bruno Haible posix_spawn_file_actions_adddup2: Work around Solaris 11.0 bug. * m4/spawn_h.m4 (gl_SPAWN_H_DEFAULTS): Initialize REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2. * m4/posix_spawn.m4 (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2): New macro. * lib/spawn.in.h (posix_spawn_file_actions_adddup2): Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2, not REPLACE_POSIX_SPAWN. * lib/spawn_faction_adddup2.c: Add workaround implementation if HAVE_WORKING_POSIX_SPAWN. * modules/spawn (Makefile): Substitute REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2. * modules/posix_spawn_file_actions_adddup2 (configure.ac): Invoke gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2. Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2, not REPLACE_POSIX_SPAWN. (Depends-on): Update conditions. * doc/posix-functions/posix_spawn_file_actions_adddup2.texi: Mention the Solaris 11 bug. 2012-01-08 Bruno Haible posix_spawn_file_actions_addclose: Work around Solaris 11.0 bug. * m4/spawn_h.m4 (gl_SPAWN_H_DEFAULTS): Initialize REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Define HAVE_WORKING_POSIX_SPAWN. (gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE): New macro. * lib/spawn.in.h (posix_spawn_file_actions_addclose): Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE, not REPLACE_POSIX_SPAWN. * lib/spawn_faction_addclose.c: Add workaround implementation if HAVE_WORKING_POSIX_SPAWN. * modules/spawn (Makefile): Substitute REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE. * modules/posix_spawn_file_actions_addclose (configure.ac): Invoke gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE. Test REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE, not REPLACE_POSIX_SPAWN. (Depends-on): Update conditions. * doc/posix-functions/posix_spawn_file_actions_addclose.texi: Mention the Solaris 11 bug. 2012-01-08 Bruno Haible doc: Update for Solaris 11.0. * doc/*/*.texi: Mention Solaris 11.0 where appropriate. * m4/printf.m4: Update comments. 2012-01-08 Bruno Haible mktime: Avoid compilation error on Solaris 11. * lib/mktime.c (WRAPV): Define to 0 on all non-glibc systems. 2012-01-08 Bruno Haible doc: Small fix. * doc/posix-headers/nl_types.texi: Correct platforms list. 2012-01-08 Simon Josefsson Add lgpl-3.0 module. * MODULES.html.sh (Support for building documentation): Add lgpl-3.0. * modules/lgpl-3.0: New file. 2012-01-08 Jim Meyering select.c: indent with spaces, not TABs * lib/select.c (windows_poll_handle): Indent with spaces, not TABs. 2012-01-07 Paolo Bonzini quotearg: do not use grave accent for left quote * lib/quotearg.c (gettext_quote): Map "`" to "'" for locale_quoting_style. (quotearg_buffer_restyled): Fix example. * tests/test-quotearg-simple.c (results_g): Adjust test vectors. 2012-01-07 Paolo Bonzini quotearg: fall back to Unicode single quotes in UTF-8, GB-18030 locales Most programs do not have translation catalogs for English and much less separate catalogs for British and American English. Drop the suggestion to translators about these two, and provide it automatically for Unicode locales. Like most programs, even those using American English, we use single quotation marks. This conflicts with the American typographic convention, but works better when you cite the entire error message within double quotes. It also tries not to clash with established practice and with what non-gnulib programs will usually do. * lib/quotearg.c (gettext_quote): Hard-code U+2018 and U+2019 when using an UTF-8 or GB-18030 locale. The list of other locales with quotes was provided by Bruno Haible. (quotearg_buffer_restyled): Adjust instructions to translators. * lib/quotearg.h (locale_quoting_style): Do not put an example in the text, since this would be wrong when using Unicode. * modules/quotearg: Depend on c-strcaseeq. 2012-01-07 Paolo Bonzini quotearg: fix Wikipedia link * lib/quotearg.c (quotearg_buffer_restyled): Fix link to Wikipedia. 2012-01-07 Simon Josefsson Fix for mingw with MSVC9. * m4/ld-version-script.m4: Check that compiler rejects version scripts with syntax errors. Reported by Bruno Haible . 2012-01-06 Bruno Haible Talk about "native Windows API", not "Woe32". * lib/accept4.c: Update comments to mention native Windows. * lib/execute.c: Likewise. * lib/fatal-signal.c: Likewise. * lib/localcharset.c: Likewise. * lib/nanosleep.c: Likewise. * lib/nl_langinfo.c: Likewise. * lib/pclose.c: Likewise. * lib/pipe-filter-gi.c: Likewise. * lib/pipe-filter-ii.c: Likewise. * lib/pipe.c: Likewise. * lib/pipe2.c: Likewise. * lib/popen.c: Likewise. * lib/progreloc.c: Likewise. * lib/relocatable.c: Likewise. * lib/sigaction.c: Likewise. * lib/sigprocmask.c: Likewise. * lib/spawn-pipe.h: Likewise. * lib/spawn-pipe.c: Likewise. * lib/spawni.c: Likewise. * lib/stat-time.h: Likewise. * lib/w32spawn.h: Likewise. * tests/test-isatty.c: Likewise. * lib/config.charset: More comments. * doc/gnulib-intro.texi: Mention native Windows. * doc/posix-functions/_Exit_C99.texi: Likewise. * doc/posix-headers/fcntl.texi: Likewise. 2012-01-06 Guillem Jover (tiny change) argp: Avoid crash if translator uses % characters in a translation. * lib/argp-parse.c (argp_version_parser): Use a "%s" format string. Reported by Mats Erik Andersson . 2012-01-06 Paul Eggert doc: C11 and C++11 are now official * doc/posix-headers/assert.texi, doc/posix-headers/stdalign.texi: * doc/verify.texi, stdalign.in.h, verify.h, m4/gnulib-common.m4: * m4/stdalign.m4, modules/assert-h, modules/snippet/_Noreturn: * modules/stdalign: Replace references to draft C1X to C11, and to draft C++0X to C++11. 2012-01-06 Bruno Haible uc-is-grapheme-break tests: Tweak. * tests/unigbrk/test-uc-is-grapheme-break.c (main): Fix an error message. 2012-01-06 Bruno Haible test-init.sh: correct the test for diff -u * tests/test-init.sh: Also redirect stdout to /dev/null. 2012-01-05 Paul Eggert Use ', not `, for quoting output. * build-aux/announce-gen (usage, sizes, print_news_deltas) (print_changelog_deltas, get_tool_versions, main program): * build-aux/git-version-gen: * build-aux/gitlog-to-changelog (usage, parse_amend_file): * build-aux/move-if-change (help): * build-aux/useless-if-before-free (usage, main program): * check-module (parse_module_file, usage) (find_included_lib_files, check_module): * lib/argmatch.c (main) [TEST]: * lib/argp-help.c (_help): * lib/getopt1.c (main) [TEST]: * lib/git-merge-changelog.c (usage): * lib/xstrtol-error.c (xstrtol_error): * m4/alloca.m4 (_AC_LIBOBJ_ALLOCA): * m4/argz.m4 (gl_FUNC_ARGZ): * m4/bison.m4 (gl_BISON): * m4/calloc.m4 (gl_FUNC_CALLOC_GNU): * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): * m4/flexmember.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER): * m4/fpending.m4 (gl_PREREQ_FPENDING): * m4/gc-random.m4 (gl_GC_RANDOM): * m4/intl.m4 (gt_CHECK_DECL): * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT) (AC_TYPE_UNSIGNED_LONG_LONG_INT): * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): * m4/onceonly.m4 (AC_CHECK_FUNCS_ONCE): * m4/posixver.m4 (gl_DEFAULT_POSIX2_VERSION): * tests/test-dirname.c (main): * tests/test-getpass.c (main): * tests/test-iconvme.c (main): * tests/test-parse-datetime.c (LOG): * tests/test-xstrtoimax.sh: * tests/test-xstrtol.sh: * tests/test-xstrtoll.sh: * tests/test-xstrtoumax.sh: * tests/unigbrk/test-uc-is-grapheme-break.c (main): * top/GNUmakefile (abort-due-to-no-makefile): Quote 'like this', not `like this', as per the recent change to the GNU coding standards. 2012-01-05 Bruno Haible strtoimax: Don't force a replacement on systems where intmax_t is int. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Use a different test if 'intmax_t' is not larger than 'int'. Reported by Pádraig Brady . 2012-01-05 Bruno Haible doc: Mention NetBSD bugs. * doc/posix-functions/*printf.texi: Mention a NetBSD 5.1 bug. * doc/posix-functions/nl_langinfo.texi: Mention another NetBSD 5.1 bug. 2012-01-05 Bruno Haible strtoumax tests: Enhance tests. * tests/test-strtoumax.c (main): Add tests for large values. 2012-01-05 Bruno Haible strtoimax: Work around AIX 5.1 bug. * lib/inttypes.in.h (strtoimax): Allow overriding the system's definition. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Check against the AIX 5.1 bug. Set HAVE_STRTOIMAX. * m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Initialize REPLACE_STRTOIMAX. * modules/inttypes-incomplete (Makefile.am): Substitute REPLACE_STRTOIMAX. * modules/strtoimax (Files): Add m4/stdint_h.m4, m4/inttypes_h.m4. (configure.ac): Test HAVE_STRTOIMAX, REPLACE_STRTOIMAX. (Depends-on): Update conditions. * tests/test-strtoimax.c (main): Add tests for large values. * doc/posix-functions/strtoimax.texi: Mention the AIX 5.1 bug. 2012-01-05 Bruno Haible inttypes: Modernize. * lib/inttypes.in.h (strtoimax, strtoumax): Use the C++ safe idioms. * modules/inttypes-incomplete (Depends-on): Add snippet/c++defs. (Makefile.am): Update inttypes.h rule. 2012-01-05 Jim Meyering init.sh: don't waste a subshell just to redirect stderr * tests/init.sh: In testing for diff -u and diff -c, use a stderr-redirecting exec inside `...` rather than a subshell. test-init.sh: avoid failure on HP-UX 11.00 * tests/test-init.sh: Skip "diff -u"-comparing step when compare resolves to diff -c or cmp. Reported by Bruno Haible. 2012-01-05 Bruno Haible Tests for module 'strtoull'. * modules/strtoull-tests: New file. * tests/test-strtoull.c: New file, based on tests/test-strtoumax.c. 2012-01-05 Bruno Haible Tests for module 'strtoll'. * modules/strtoll-tests: New file. * tests/test-strtoll.c: New file, based on tests/test-strtoimax.c. 2012-01-05 Bruno Haible Tests for module 'strtoul'. * modules/strtoul-tests: New file. * tests/test-strtoul.c: New file, based on tests/test-strtoumax.c. 2012-01-05 Bruno Haible Tests for module 'strtol'. * modules/strtol-tests: New file. * tests/test-strtol.c: New file, based on tests/test-strtoimax.c. 2012-01-04 Jim Meyering test-init.sh: accommodate Solaris 5.10's different diff -u output * tests/test-init.sh: Also exempt @@ lines from the comparison of diff output, since Solaris 5.10 and GNU diff formats differ. Reported by Stefano Lattarini. 2012-01-04 Paul Eggert test-posixtm: don't assume signed integer wraparound * tests/test-posixtm.c (main): Don't assume wraparound semantics after signed integer overflow. Inspired by (though it may not fix) Bruno Haible's bug report in . Spell out "Windows 9x" and "Windows XP". * lib/poll.c, lib/select.c: In comments, replace "Win9x" with "Windows 9x" and "WinXP" with "Windows XP". 2012-01-04 Jim Meyering test-vc-list-files-cvs.sh: remove obsolete comment * tests/test-vc-list-files-cvs.sh: Remove obsolete comment about double exit. Now that's all encapsulated via skip_ and Exit. 2012-01-04 Bruno Haible Talk about "native Windows API", not "Win32". * lib/classpath.c: Update comments to mention native Windows. * lib/csharpexec.c: Likewise. * lib/dup2.c: Likewise. * lib/error.c: Likewise. * lib/fcntl.c: Likewise. * lib/filename.h: Likewise. * lib/findprog.c: Likewise. * lib/get-rusage-as.c: Likewise. * lib/get-rusage-data.c: Likewise. * lib/getpagesize.c: Likewise. * lib/javaexec.c: Likewise. * lib/msvc-inval.c: Likewise. * lib/msvc-nothrow.c: Likewise. * lib/nanosleep.c: Likewise. * lib/nonblocking.c: Likewise. * lib/printf-parse.c: Likewise. * lib/setlocale.c: Likewise. * lib/sigaction.c: Likewise. * lib/strerror_r.c: Likewise. * lib/tmpdir.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/w32spawn.h: Likewise. * lib/waitpid.c: Likewise. * lib/stdio.in.h (fdopen, fopen, freopen): Likewise. * m4/locale-ar.m4: Likewise. * m4/locale-fr.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale-tr.m4: Likewise. * m4/locale-zh.m4: Likewise. * m4/printf.m4: Likewise. * tests/test-cloexec.c: Likewise. * tests/test-copy-acl.sh: Likewise. * tests/test-copy-file.sh: Likewise. * tests/test-file-has-acl.sh: Likewise. * tests/test-set-mode-acl.sh: Likewise. * tests/test-dup-safer.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-dup3.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-nonblocking-pipe.h: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-pipe.c: Likewise. * tests/test-pipe2.c: Likewise. * tests/test-spawn-pipe-child.c: Likewise. * doc/acl-resources.txt: Likewise. * lib/getaddrinfo.c (WINDOWS_NATIVE): Renamed from WIN32_NATIVE. * tests/test-poll.c (WINDOWS_NATIVE): Likewise. * tests/test-select.h (WINDOWS_NATIVE): Likewise. * lib/localcharset.c: Update comments to mention native Windows. (WINDOWS_NATIVE): Renamed from WIN32_NATIVE. * lib/localename.c: Likewise. * lib/progreloc.c: Likewise. * lib/relocatable.c: Likewise. * lib/poll.c (WINDOWS_NATIVE): Renamed from WIN32_NATIVE. (windows_compute_revents): Renamed from win32_compute_revents. (windows_compute_revents_socket): Renamed from win32_compute_revents_socket. * lib/select.c: Update comments to mention native Windows. (windows_poll_handle): Renamed from win32_poll_handle. * m4/threadlib.m4: Update comments to mention native Windows. (gl_THREADLIB_EARLY_BODY, gl_THREADLIB_BODY): Expect --enable-threads=windows instead of --enable-threads=win32. Set USE_WINDOWS_THREADS, not USE_WIN32_THREADS. * lib/glthread/lock.h: Update comments to mention native Windows. (USE_WINDOWS_THREADS): Renamed from USE_WIN32_THREADS. * lib/glthread/lock.c (USE_WINDOWS_THREADS): Renamed from USE_WIN32_THREADS. * lib/glthread/cond.h (USE_WINDOWS_THREADS): Likewise. * lib/glthread/cond.c (USE_WINDOWS_THREADS): Likewise. * lib/glthread/thread.h (USE_WINDOWS_THREADS): Likewise. * lib/glthread/thread.c (USE_WINDOWS_THREADS): Likewise. * lib/glthread/tls.h (USE_WINDOWS_THREADS): Likewise. * lib/glthread/tls.c (USE_WINDOWS_THREADS): Likewise. * lib/glthread/yield.h (USE_WINDOWS_THREADS): Likewise. * tests/test-cond.c (USE_WINDOWS_THREADS): Likewise. * tests/test-thread_create.c (USE_WINDOWS_THREADS): Likewise. * tests/test-lock.c (USE_WINDOWS_THREADS): Likewise. (TEST_WINDOWS_THREADS): Renamed from TEST_WIN32_THREADS. * tests/test-tls.c: Likewise. Rationale: Microsoft renamed the "Win32 API" to "Windows API", as it is available on both 32-bit and 64-bit Windows systems. But in gnulib, we treat Cygwin like a Unix platform, therefore the main line of distinction is between "native Windows" on one side and Unix/ POSIX systems on the other side. More details in . Suggested by Paul Eggert. 2012-01-03 Bruno Haible isatty: Support for MSVC 9. * doc/posix-functions/isatty.texi: Mention the MSVC problem. * lib/isatty.c: Include , msvc-inval.h. (_isatty_nothrow): New function. (isatty): Use it instead of _isatty. (IsConsoleHandle): Add comment, from Paolo Bonzini. * lib/poll.c (IsConsoleHandle): Likewise. * lib/select.c (IsConsoleHandle): Likewise. * m4/isatty.m4 (gl_FUNC_ISATTY): Fix comment. Reported by Eli Zaretskii. (gl_PREREQ_ISATTY): New macro. * modules/isatty (Depends-on): Add msvc-inval. (configure.ac): Invoke gl_PREREQ_ISATTY. 2012-01-03 Jim Meyering maint.mk: remove temporary transition aid from over 1.5 years ago * top/maint.mk (_prohibit_regexp): Remove definition whose sole purpose was to aid in the transition (avoiding silent malfunction) from that old name to the new _sc_search_regexp. This shim was added by commit 219c504b. init.sh: do not try to accommodate compare arguments starting with "-" * tests/init.sh (compare_dev_null_): Do not try to accommodate compare arguments that start with "-". Besides, we do not worry about this when invoking diff or cmp; why start now with sed? Using "--" to separate options from argument would trigger sed failure in at least Solaris 7, HP-UX 11.00, IRIX 6.5, FreeBSD 6.4, OpenBSD 4.9 and NetBSD 5.1. Reported by Bruno Haible. 2012-01-02 Bruno Haible Enhance tests for module 'isatty'. * modules/isatty-tests (Depends-on): Add pipe-posix. * tests/test-isatty.c: Include . (DEV_NULL): New macro. (main): Test the resut of isatty() also on regular files, pipes, and /dev/null. New module 'isatty'. * lib/unistd.in.h (isatty): New declaration. * lib/isatty.c: New file, based on an idea of Bastien Roucariès . * m4/isatty.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether isatty is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_ISATTY, REPLACE_ISATTY. * modules/unistd (Makefile.am): Substitute GNULIB_ISATTY, REPLACE_ISATTY. * modules/isatty: New file. * doc/posix-functions/isatty.texi: Mention the new module. Suggested by Paolo Bonzini. 2012-01-02 Bruno Haible canonicalize: Tweak 2011-12-29 commit. * lib/canonicalize.c (canonicalize_filename_mode): Fix typo in comment. * lib/canonicalize.h (canonicalize_filename_mode): Update specification. 2012-01-02 Jim Meyering gitlog-to-changelog: describe input syntax in --help output * build-aux/gitlog-to-changelog (usage) [SPECIAL SYNTAX]: New section. gitlog-to-changelog: fix typo in --help: show backslash before email @ * build-aux/gitlog-to-changelog (usage): An "@" was backslash-escaped in sources, but not in actual output. 2011-12-30 Jim Meyering gitlog-to-changelog: don't malfunction when name contains %-directive * build-aux/gitlog-to-changelog (main): Don't let a %-directive in a name string cause trouble. E.g., with a user name of "%s", gitlog-to-changelog would fail with "Missing argument in sprintf at..." 2011-12-30 Gary V. Vaughan gitlog-to-changelog: Copyright-paperwork-exempt: yes == (tiny change) * build-aux/gitlog-to-changelog (main): Map the string, at beginning of line in a git commit log, "Copyright-paperwork-exempt: yes", to the " (tiny change)" notation that is appended to the standard ChangeLog "date name email" header line. 2012-01-01 Jim Meyering test-framework-sh: init.sh: fix "make dist" failure When using gnulib-tool's --with-tests option and any module that depends on test-framework-sh, "make dist" would fail due to the lack of init.sh *in lib/*. The EXTRA_DIST += init.sh is required in the gltests directory, and not in the gllib/ directory. One way to work around that is to move the EXTRA_DIST += init.sh from the primary module to the -tests one: * modules/test-framework-sh-tests (EXTRA_DIST): Add init.sh here, ... * modules/test-framework-sh (Makefile.am): ...not here. Reported by Tom G. Christensen in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29519 version-etc: update copyright year reported by --version * lib/version-etc.c (COPYRIGHT_YEAR): Update to 2012. 2011-12-31 Pádraig Brady canonicalize: only stat() if required * lib/canonicalize.c (canonicalize_filename_mode): Avoid calling l?stat() when both CAN_MISSING, and CAN_NOLINKS are set, as we neither need to resolve symlinks or test component existence. 2011-12-31 Paul Eggert doc: cover st_ino issues once; add OpenVMS etc. * doc/posix-functions/stat.texi (stat): * doc/posix-functions/lstat.texi (lstat): * doc/posix-functions/fstatat.texi (fstatat): * doc/posix-functions/fstat.texi (fstat): Move general 'struct stat' stuff to sys_stat.texi, leaving behind a pointer. * doc/posix-headers/sys_stat.texi (sys/stat.h): Merge duplicate info about 'struct stat' problems into here. Mention issues with OpenVMS, GNU/Linux NFS, NetApp, ClearCase, and suggest partial workarounds. same-inode: port to OpenVMS * lib/same-inode.h (SAME_INODE): Port to OpenVMS by checking all three st_ino values. 2011-12-30 Pádraig Brady canonicalize: fix references to stat() and lstat() * lib/canonicalize.c (canonicalize_filename_mode): Ensure references always resolve to a replacement function if required (even via a macro). 2011-12-30 Jim Meyering gitlog-to-changelog: remove a little duplication * build-aux/gitlog-to-changelog (main): Grep @lines once, rather than twice. 2011-12-29 Pádraig Brady canonicalize: add support for not resolving symlinks * lib/canonicalize.h: Add the CAN_NOLINKS flag to indicate we don't want to follow symlinks. Also provide CAN_MODE_MASK to aid setting these existing mutually exclusive values. * lib/canonicalize.c (canonicalize_filename_mode): Extract the flags from can_mode parameter, which are currently just used to select between stat() and lstat(). Also ensure that mutually exclusive values are flagged immediately as invalid. * tests/test-canonicalize.c: Verify symlinks are not followed, and that invalid flag combinations are diagnosed. 2011-12-25 Jim Meyering gitlog-to-changelog: do not clump multi-paragraph entries Identical header lines (date,name,email+coauthors) are suppressed, thus putting all entries with those same characteristics under a single header. However, when a log entry consists of two or more paragraphs, it may not be clear where it starts and ends. This change makes it so that such an entry is always separated from others by a header line, even when that header would otherwise be suppressed. * build-aux/gitlog-to-changelog: Implement the above. Inspired by a related request from Stefano Lattarini in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29456 2011-12-25 Paul Eggert announce-gen: fix `cmd' typo in diagnostic * build-aux/announce-gen (print_changelog_deltas): Fix typo in diagnostic: a missing '$' meant that the command was not output. 2011-12-23 Jim Meyering test-framework-sh: distribute init.sh * modules/test-framework-sh (EXTRA_DIST): Append init.sh. Otherwise, "make -C gnulib-tests check" (at least in grep) would fail due to the lack of init.sh. maint: remove explicit Files: tests/init.sh; depend on test-framework-sh * modules/atexit-tests: Rather than listing tests/init.sh, now that there's a module for it, simply depend on that new module. * modules/closein-tests: Likewise. * modules/exclude-tests: Likewise. * modules/getcwd-tests: Likewise. * modules/perror-tests: Likewise. * modules/pread-tests: Likewise. * modules/pwrite-tests: Likewise. * modules/vc-list-files-tests: Likewise. * modules/verify-tests: Likewise. * modules/xalloc-die-tests: Likewise. * modules/xstrtoimax-tests: Likewise. * modules/xstrtol-tests: Likewise. * modules/xstrtoll-tests: Likewise. * modules/xstrtoumax-tests: Likewise. * modules/yesno-tests: Likewise. 2011-12-22 Jim Meyering test-framework-sh: add minimal tests of init.sh's compare function * modules/test-framework-sh-tests: New file. * tests/test-init.sh: New file. test-framework-sh: new module * modules/test-framework-sh: New file. * MODULES.html.sh (Support for maintaining and releasing projects): List it. init.sh: do not emit simulated diff output to stderr * tests/init.sh (compare_dev_null_): Print to stdout, not stderr. 2011-12-22 Reuben Thomas .gitignore: ignore gnulib.dvi and regex.info * doc/.gitignore:add gnulib.dvi and regex.info 2011-12-22 Jim Meyering init.sh: correct previous change * tests/init.sh (compare): My previous change was wrong. Don't clobber "$?". Spotted by Stefano Lattarini and Pádraig Brady. init.sh: avoid unwarranted test failure when using "set -e" * tests/init.sh (compare): Ignore nonzero exit from compare_dev_null_. Otherwise, in a test script that uses "set -e" (like many in vc-dwim) a use like "compare exp out" would get evoke an unconditional failure. 2011-12-21 Alfred M. Szmidt bootstrap: fix it to honor $ACLOCAL_FLAGS once again The 2011-12-17 change, commit 767ccd40, replaced a manual invocation of aclocal that used explicit $ACLOCAL_FLAGS with an invocation of autoreconf that did not. * build-aux/bootstrap: Use $ACLOCAL_FLAGS when invoking autoreconf. Reported by Mats Erik Andersson . 2011-12-17 Jim Meyering bootstrap: remove some now-unneeded code This script arose back when gnulib-tool was young. Since then, it has seen improvements that render much of this script unnecessary. In particular, it can now make symlinks to the files it uses. Also, I no longer see as much value in marking files as read-only via comments. If you relied on the symlink-creation feature of the preceding version of this script, you can get most of that functionality by adding the --symlink option to the definition of gnulib_tool_option_extras in your bootstrap.conf file. * build-aux/bootstrap (AUTOPOINT, AUTORECONF): Factor out definitions. Run autopoint and libtoolize *before* gnulib-tool. After it, run an abbreviated autoreconf, rather than a loop around all tools. (slirp, bt_mark_as_generated): Remove functions. 2011-12-18 Paul Eggert ftoastr: fix typo * lib/ftoastr.h: Fix misspelling in comment. 2011-12-18 Reuben Thomas * top/README-release: fix punctuation. 2011-12-17 Jim Meyering bootstrap: correct the recent buildreq change The 2011-12-07 commit, 39f5f1e4, omitted some '*'s, and thus had no effect. * build-aux/bootstrap (buildreq): Bracket each search term with "*...*", so that the shell "case" statement works as intended. Add comments. 2011-12-17 Bernhard Voelker build: let bootstrap resort to wget when downloading .po files * build-aux/bootstrap (download_po_files): Fallback to wget when downloading the .po files via rsync fails. This is necessary to bootstrap from behind a strict firewall. 2011-12-15 Paul Eggert stdint: don't assume C++11 when compiling with g++ Problem reported for glibc 2.14 and g++ by Alexander V. Lukyanov in . * m4/stdint.m4 (gl_STDINT_H): Don't go to extra work to make it work also in C++ before C++11, as that improperly inhibits generating a substitute stdint.h for that case. 2011-12-15 Paul Eggert alloca: protect comment from gnulib-tool * lib/alloca.c: Change "GCC version 2" to "GCC 2" in comment, so that gnulib-tool doesn't think it's a license, and munge it to say "GCC version 3". 2011-12-15 Ludovic Courtès (tiny change) localcharset: Use an absolute path in TESTS_ENVIRONMENT. * modules/localcharset (LOCALCHARSET_TESTS_ENVIRONMENT): Use $(abs_top_builddir) instead of $(top_builddir). 2011-12-14 Alex Nelson (tiny change) strftime-tests: also test nanoseconds * tests/test-strftime.c (T): Add a test of %N. 2011-12-13 Paul Eggert inttypes, stdint: add C++11 support C++11 says there's no need to define __STDC_CONSTANT_MACROS etc. when including inttypes.h and stdint.h. Support this change to the standard. * doc/posix-headers/inttypes.texi (inttypes.h): * doc/posix-headers/stdint.texi (stdint.h): Document this. * lib/inttypes.in.h (__STDC_FORMAT_MACROS) [! __cplusplus]: Define if not defined already, for the benefit of pre-C++11 hosts. Define the standard format macros (e.g., PRId8) always. * lib/stdint.in.h (__STDC_CONSTANT_MACROS, __STDC_LIMIT_MACROS): Likewise, if __cpluspus. Define the standard constant and limit macros (e.g., INT8_C, INT8_MAX) always. * m4/inttypes.m4 (gl_INTTYPES_INCOMPLETE): Do not define GL_TRIGGER_STDC_LIMIT_MACROS or __STDC_LIMIT_MACROS; no longer needed. * m4/stdint.m4 (gl_STDINT_H): Update comments about these macros. * tests/test-inttypes.c (__STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS) (__STDC_FORMAT_MACROS): Do not define, since we assume C++11 API now. * tests/test-stdint.c (__STDC_LIMIT_MACROS, __STDC_CONSTANT_MACROS): Likewise. 2011-12-12 Paul Eggert nonblocking tests: Fix test failure on Linux/PPC. Suggested by Prerna Saxena in . * tests/test-nonblocking-pipe.h (PIPE_DATA_BLOCK_SIZE) [Linux/PPC64]: Set to 1100000. 2011-12-12 Jim Meyering argmatch: don't hard-code `' when listing valid option arguments * lib/argmatch.c (argmatch_valid): Don't hard-code `%s'. Instead, use the quote function to add quotes. Use fputs rather than fprintf for the format string with no format directive. 2011-12-07 Eric Blake bootstrap: detect tools required by gnulib-tool * build-aux/bootstrap (buildreq): Provide minimum implicit dependencies. * DEPENDENCIES: Mention patch as a prereq. 2011-12-04 Bruno Haible sethostname: Port to Windows platforms. * lib/sethostname.c: Provide an alternate implementation for Windows platforms. * tests/test-sethostname2.c (geteuid): Redefine on Cygwin. (main): Skip the test if sethostname() fails with EPERM. On Windows platforms, don't check the result of gethostname(). 2011-12-04 Bruno Haible Jim Meyering tests: Avoid spurious error message on platforms without mktemp program. * tests/init.sh (mktempd_): Run mktemp in a subcommand. 2011-12-04 Bruno Haible sethostname: Fix documentation. * doc/glibc-functions/sethostname.texi: Move the Solaris problem to the "not fixed" section. 2011-12-03 Bruno Haible gnulib-tool: Verify that the License field is present and non-empty. * gnulib-tool (func_get_license_raw): New function, extracted from func_get_license. (func_get_license): Use it. Warn if the module is not a test module and has no license. Suggested by Jim Meyering. 2011-12-03 Bruno Haible sethostname tests: Fix link error on mingw. * tests/test-sethostname1.c: New file, extracted from tests/test-sethostname.c. * tests/test-sethostname2.c: New file, extracted from tests/test-sethostname.c. * tests/test-sethostname.c: Remove file. * modules/sethostname-tests (Files): Add tests/test-sethostname1.c, tests/test-sethostname2.c. Remove tests/test-sethostname.c. (Depends-on): Add gethostname. (Makefile.am): Compile both test-sethostname1 and test-sethostname2. Link the latter with $(GETHOSTNAME_LIB). sethostname tests: Fix compilation error on mingw. * tests/test-sethostname.c: Don't include . (geteuid): Use a dummy value without uid_t. * modules/sethostname-tests (Depends-on): Remove sys_types. sethostname tests: Avoid a gcc warning. * tests/test-sethostname.c (main): Remove an unused variable. Tweak last commit. * modules/sethostname-tests (Files): Sort by decreasing importance. (configure.ac): Check for geteuid. * tests/test-sethostname.c (main): Emit error messages to stderr. Skip the test when there's nothing to test. Drop an unnecessary cast. Improve an error message. Verify that the final sethostname() call succeeds. 2011-12-01 Ben Walton Add a test suite for the sethostname module. * modules/sethostname-tests: New file. A test program for the sethostname module. * tests/test-sethostname.c: Likewise. 2011-12-03 Bruno Haible Tweak last commit. * lib/unistd.in.h (sethostname): Keep declarations in alphabetic order. Fix preprocessor directives indentation. Fix typos. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Keep alphabetic order. * modules/unistd (Makefile): Likewise. 2011-12-01 Ben Walton Integrate the sethostname module into unistd. * lib/unistd.in.h: Integrate the SETHOSTNAME preprocessor handling into the unistd.h header. * m4/unistd_h.m4: Setup the autoconf handling for the SETHOSTNAME preprocessor directives. * modules/unistd: Setup the Makefile substitutions of the SETHOSTNAME preprocessor directives. 2011-12-03 Bruno Haible Tweak last commit. * lib/sethostname.c: Don't include . (sethostname): No need to copy the argument string to the stack. Don't call clearerr. Preserve errno when fprintf failed. * m4/sethostname.m4 (gl_FUNC_SETHOSTNAME): Comment about HOST_NAME_MAX. Don't invoke AC_REPLACE_FUNCS. * modules/sethostname (Link): Remove empty section. * doc/glibc-functions/sethostname.texi: Gnulib does not fix the ENOSYS failure problem. 2011-12-01 Ben Walton New module 'sethostname'. * lib/sethostname.c (sethostname): New file. Provide sethostname for systems that lack it. * m4/sethostname.m4 (gl_FUNC_SETHOSTNAME): New file. Detection of sethostname declaration and function. * modules/sethostname: New file. Define the sethostname module. 2011-12-03 Bruno Haible Tweak last commit. * m4/gethostname.m4 (gl_PREREQ_HOST_NAME_MAX): Trim blank line. 2011-12-01 Ben Walton Split the HOST_NAME_MAX detection into a separate m4 macro. * m4/gethostname.m4 (gl_PREREQ_HOST_NAME_MAX): Make this a separate macro so it can be used by the pending sethostname module. 2011-12-03 Bruno Haible Fix module descriptions syntax. * modules/argv-iter (License): Fix syntax. * modules/di-set (License): Likewise. * modules/ino-map (License): Likewise. Reported by Stefano Lattarini . 2011-12-02 Paul Eggert stdalign: port to Clang 3.0 Problem reported by Simon Josefsson in . * doc/posix-headers/stdalign.texi (stdalign.h): Mention Clang 3.0, which has but which does not define alignof. * m4/stdalign.m4 (gl_STDALIGN_H): Check for Clang 3.0's problem. 2011-12-01 Eric Blake mktempd: silence dd usage * build-aux/mktempd (rand_bytes): Silence dd. 2011-11-30 Simon Josefsson manywarnings: Don't mention gcc version in docstring. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Doc fix. Suggested by Jim Meyering . 2011-11-30 Jim Meyering hash: mark a few floating point constants with "f" suffix * lib/hash.c (DEFAULT_GROWTH_THRESHOLD, DEFAULT_GROWTH_FACTOR) (DEFAULT_SHRINK_THRESHOLD, DEFAULT_SHRINK_FACTOR): Mark literal floating point constants with "f", since they're destined to be saved/used as "float"s. 2011-11-29 Paolo Bonzini float tests: Correct and re-enable assertion about LDBL_MIN_EXP. * tests/test-float.c (test_long_double): Correct and re-enable the assertion about LDBL_MIN_EXP that was disabled on 2011-08-31. 2011-11-29 Matthew Wala (tiny change) Avoid subtracting two pointers that don't point into the same block. * lib/argp-help.c (hol_append): Reorder pointer subtractions so that only pointers into the same memory block are subtracted. We cannot assume that sizeof (ptrdiff_t) == sizeof (void *). 2011-11-29 Eric Blake maint.mk: add syntax check for use of compare from init.sh * top/maint.mk (sc_prohibit_reversed_compare_failure): New rule, moved here from coreutils. manywarnings: drop -Wunsuffixed-float-constants * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): C99 does not allow '1.0D', which is the only way to silence this warning for 'double'. 2011-11-29 Jim Meyering hash: mark compute_bucket_size with the pure attribute * lib/hash.c (compute_bucket_size): Use _GL_ATTRIBUTE_PURE. quotearg, propername: correct pragma guard expression * lib/quotearg.c: Enable pragma for gcc-4.6 and newer, not 4.3 and newer. * lib/propername.c: Likewise. Reported by Bernhard Voelker. 2011-11-28 Jim Meyering propername: do not mark proper_name with the const attribute * lib/propername.h (proper_name): Do *not* mark as _GL_ATTRIBUTE_CONST, since it examines data pointed to by its parameter. * lib/propername.c (proper_name): Instead, add a pragma to suppress the suggestion from -Wsuggest-attribute=const. propername: mark one more function as const * lib/propername.h (proper_name): Mark as _GL_ATTRIBUTE_CONST. 2011-11-27 Jim Meyering mark functions with const and pure attributes Mark functions per suggestions from gcc-4.6 when using these options: -Wsuggest-attribute=pure -Wsuggest-attribute=const. Use gnulib's _GL_ATTRIBUTE_PURE and _GL_ATTRIBUTE_CONST macros. Follow these guidelines: when possible, apply the attribute to an extern declaration, not to its definition. Apply it to the definition only when the definition is static. * lib/argmatch.h (argmatch, argmatch_to_argument): Mark. * lib/argv-iter.h (argv_iter_n_args): Likewise. * lib/base64.h (isbase64): Likewise. * lib/basename-lgpl.c (last_component, base_len): Likewise. * lib/c-ctype.h (c_isascii, c_isalnum, c_isalpha): Likewise. (c_isblank, c_iscntrl, c_isdigit, c_islower, c_isgraph): Likewise. (c_isprint, c_ispunct, c_isspace, c_isupper, c_isxdigit): Likewise. (c_tolower, c_toupper): Likewise. * lib/c-strcase.h (c_strcasecmp, c_strncasecmp): Likewise. * lib/chdir-long.c (find_non_slash): Likewise. * lib/dirname.h (base_len, dir_len, last_component): Likewise. * lib/exclude.h (fnmatch_pattern_has_wildcards): Likewise. * lib/file-type.h (file_type): Likewise. * lib/filenamecat-lgpl.c (longest_relative_suffix): Likewise. * lib/filevercmp.c (verrevcmp): Likewise. * lib/freadahead.h (freadahead): Likewise. * lib/fts.c (fts_maxarglen): Likewise. * lib/hash-pjw.h (hash_pjw): Likewise. * lib/hash-triple.h (triple_hash_no_name, triple_compare_ino_str): * lib/hash.c (is_prime, next_prime): Likewise. * lib/hash.c (hash_get_n_buckets, hash_get_n_buckets_used): Likewise. (hash_get_n_entries, hash_get_max_bucket_length): Likewise. (hash_table_ok, hash_get_first, hash_string): Likewise. (compute_bucket_size): Likewise. * lib/i-ring.h (i_ring_empty): Likewise. * lib/isnan.c (isnanl): Likewise. * lib/math.h (isnanl, rpl_isnanl): Likewise. * lib/memcasecmp.h (memcasecmp): Likewise. * lib/memchr2.h (memchr2): Likewise. * lib/memcmp2.h (memcmp2): Likewise. * lib/parse-datetime.y (lookup_zone): Likewise. * lib/sockets.h (gl_sockets_startup, gl_sockets_cleanup) [!WINDOWS_SOCKETS]: Likewise. * lib/strnlen1.h (strnlen1): Likewise. * lib/uniwidth.in.h (uc_width): Likewise. * lib/quotearg.c: Add pragma to avoid unwarranted suggestion from gcc's -Wsuggest-attribute=pure for quoting_options_from_style. (quoting_options_from_style): Add a comment. * lib/propername.h (proper_name): Add a comment. 2011-11-27 Bruno Haible Remove unused macros from !_LIBC code in glibc-borrowed files. * lib/fnmatch.c (STRCOLL): Remove macro. * lib/fnmatch_loop.c (STRCOLL): Remove undef. * lib/glob.c (__stat, __readdir64): Remove macros. * lib/tempname.c (__open64, __xstat64): Remove macros. Suggested by Paul Eggert. 2011-11-27 Bruno Haible getcwd: Fix link error on MSVC 9. * modules/getcwd (Depends-on): Add readdir, rewinddir. 2011-11-27 Bruno Haible Don't set REPLACE_FOO to 1 if HAVE_FOO is 0. * m4/opendir.m4 (gl_FUNC_OPENDIR): Don't set REPLACE_OPENDIR to 1 if HAVE_OPENDIR is 0. * m4/closedir.m4 (gl_FUNC_CLOSEDIR): Don't set REPLACE_CLOSEDIR to 1 if HAVE_CLOSEDIR is 0. * m4/dup2.m4 (gl_FUNC_DUP2): Don't set REPLACE_DUP2 to 1 if HAVE_DUP2 is 0. * m4/dup3.m4 (gl_FUNC_DUP3): Update comments. 2011-11-27 Bruno Haible getcwd: Fix bug from 2011-08-17. * m4/getcwd.m4 (gl_FUNC_GETCWD): Set REPLACE_GETCWD to 1 only on platforms that need it. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Consider a return code of 4 to be a failure, not a success. This ensures that REPLACE_GETCWD becomes 1 on OpenBSD 4.9 and NetBSD 5.1. 2011-11-27 Bruno Haible binary-io tests: Avoid test failure on mingw when libtool is used. * tests/test-binary-io.c (main): Don't remove t-bin-out2.tmp here. Don't verify the size of t-bin-out1.tmp here. * tests/test-binary-io.sh: Verify it here. Reported by Simon Josefsson. 2011-11-26 Bruno Haible Fix conflict between two instantiations of module 'unistd'. * gnulib-tool (func_emit_autoconf_snippet): Substitute ${include_guard_prefix} also in the autoconf snippet. * m4/getopt.m4 (gl_FUNC_GETOPT_POSIX): Don't set GNULIB_UNISTD_H_GETOPT. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Don't initialize GNULIB_UNISTD_H_GETOPT. * modules/getopt-posix (configure.ac): Set the GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT variable. * modules/getopt-gnu (configure.ac): Likewise. * modules/unistd (Makefile.am): Change the substitution value of GNULIB_UNISTD_H_GETOPT to depend on the include guard prefix. Reported by Simon Josefsson. 2011-11-25 Bruno Haible pagealign_alloc: Doc and comments. * doc/posix-functions/posix_memalign.texi: Refer to the pagealign_alloc module. * lib/pagealign_alloc.c (pagealign_alloc): Add comment. 2011-11-25 Jim Meyering test-update-copyright.sh: avoid false-positive failure * tests/test-update-copyright.sh: Use $TMP.? (not $TMP.*), to work around false positive failure on Cygwin/Windows. The latter was matching erroneously-created files with names like update-copyright.test-ex.4.bak. Reported by Simon Josefsson. 2011-11-25 Simon Josefsson valgrind-tests.m4: Avoid breakage if valgrind on bash fails. * m4/valgrind-tests.m4: Check that the parameters that will be used works, not just a subset of them. Reported by Bruno Haible . 2011-11-24 Jim Meyering test-stdalign.c: comment out long double tests * tests/test-stdalign.c: Don't try to reduce alignment of long double variables. That provokes errors like this from gcc-4.7.0 20111124: error: '_Alignas' specifiers cannot reduce alignment of \ 'static_longdouble_alignas'. 2011-11-22 Jim Meyering init.sh: make "compare /dev/null FILE" output more readable * tests/init.sh (compare_): Document the preferred order of arguments. (emit_diff_u_header_): New function. (compare_dev_null_): Emit a simulated diff, rather than just the contents of the unexpected file. Suggestion from Bruno Haible. 2011-11-21 Jim Meyering Eric Blake init.sh: work around OSF/1 5.1's mishandling of /dev/null * tests/init.sh: Make our compare function slightly more portable. Reported by Bruno Haible in http://thread.gmane.org/gmane.comp.gnu.grep.bugs/4020 2011-11-21 Simon Josefsson * m4/gnulib-common.m4 (_Noreturn): Check that _MSC_VER is defined before using it, in code that ends up in config.h. 2011-11-20 Bruno Haible getcwd: Work around getcwd bug on AIX 5..7. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Require AC_CANONICAL_HOST. Assign exit code 31 to the bug seen on AIX 5.1..7.1. Use a different value for gl_cv_func_getcwd_path_max. Move the definition of HAVE_PARTLY_WORKING_GETCWD from here... * m4/getcwd.m4 (gl_FUNC_GETCWD): ... to here. Invoke gl_FUNC_GETCWD_PATH_MAX also when $gl_cv_func_getcwd_null is 'no'. Define HAVE_MINIMALLY_WORKING_GETCWD. * lib/getcwd.c (__getcwd): Don't use the system's getcwd on platforms where it is not even minimally working, that is, on AIX. * tests/test-getcwd.c (test_long_name): Distinguish the same cases as m4/getcwd-path-max.m4. (main): Update exit code computation. * doc/posix-functions/getcwd.texi: Mention list of platforms where getcwd does not handle long file names. 2011-11-20 Bruno Haible getcwd: Fix bug from 2009-09-10. * m4/getcwd.m4 (gl_FUNC_GETCWD): Treat "guessing yes" like "yes", not like "no". 2011-11-20 Simon Josefsson * m4/manywarnings.m4: Add more warnings from gcc 4.6.2. 2011-11-20 Bruno Haible fma tests: Avoid shadowing local variables. * tests/test-fma2.h (test_function): Reduce scope of x, y, z, result, expected. 2011-11-20 Bruno Haible copysignf tests: Fix. * tests/test-copysignf.c: Fix signature check. 2011-11-20 Bruno Haible fma: Remove unused code. * lib/fma.c (DECL_ROUNDING, BEGIN_ROUNDING, END_ROUNDING): Remove unused macros. 2011-11-20 Bruno Haible sethostname: Fix doc about AIX. * doc/glibc-functions/sethostname.texi: Drop mention that AIX 5.1 lacks sethostname; it has it. sethostname: Mention more portability problems. * doc/glibc-functions/sethostname.texi: Mention the missing declaration problem. Reported by Ben Walton . 2011-11-19 Bruno Haible Depend on module fcntl-h when AT_FDCWD is used. * modules/utimens (Depends-on): Add fcntl-h. * modules/areadlinkat (Depends-on): Likewise. * modules/areadlinkat-with-size (Depends-on): Likewise. * modules/faccessat (Depends-on): Likewise. * modules/fchmodat (Depends-on): Likewise. * modules/fchownat (Depends-on): Likewise. * modules/getcwd (Depends-on): Likewise. * modules/mkdirat (Depends-on): Likewise. * modules/mkfifoat (Depends-on): Likewise. * modules/readlinkat (Depends-on): Likewise. * modules/symlinkat (Depends-on): Likewise. * modules/dup2-tests (Depends-on): Likewise. * modules/fdutimensat-tests (Depends-on): Likewise. * modules/futimens-tests (Depends-on): Likewise. 2011-11-19 Bruno Haible euidaccess: Update a comment. * lib/euidaccess.c: Update comment about platforms with faccessat. 2011-11-19 Bruno Haible openat: Fix file list. * modules/openat (Files): Remove lib/at-func.c. 2011-11-19 Bruno Haible fstatat: Simplify. * lib/fstatat.c (AT_FUNC_NAME): Define as fstatat. On platforms where gnulib should define rpl_fstatat, there is a "#define fstatat rpl_fstatat" in . 2011-11-19 Bruno Haible Ensure 'inline' can be used in tests/test-utimens-common.h. * modules/fdutimensat-tests (configure.ac): Require AC_C_INLINE. * modules/futimens-tests (configure.ac): Likewise. * modules/utimens-tests (configure.ac): Likewise. * modules/utimensat-tests (configure.ac): Likewise. 2011-11-19 Simon Josefsson * lib/hash.c (hash_insert): Use hash_insert_if_absent, not hash_insert0. (hash_insert_if_absent): Doc fix. 2011-11-19 Simon Josefsson * m4/readline.m4 (gl_FUNC_READLINE): Check for readline/history.h. 2011-11-18 Paul Eggert test-getcwd: disambiguate exit status * tests/test-getcwd.c (test_long_name): Return 0..7. (main): Exit with an unambiguous exit status. The old code yielded a mysterious mixture of two failure codes. fstatat: fix configuration bug on mingw, OpenBSD 4, Solaris 8 * lib/fstatat.c (AT_FUNC_NAME): Use HAVE_FSTAT, not HAVE_WORKING_FSTATAT_ZERO_FLAG, to decide whether to define rpl_fstatat or fstatat. This should fix the other problem reported by Kai Habel in . A similar problem was reported for OpenBSD 4.6 by Mats Erik Andersson and I reproduced it on a Solaris 8 host we still have in production. 2011-11-18 Jim Meyering hash: deprecate poorly-named hash_insert0: use hash_insert_if_absent * lib/hash.c (hash_insert_if_absent): Rename from hash_insert0. Add a sentence to the comment. (hash_insert0): New function that simply calls hash_insert_if_absent. * lib/hash.h (hash_insert_if_absent): Declare it. (hash_insert0): Add deprecation attribute. (_GL_ATTRIBUTE_DEPRECATED): Define. * lib/di-set.c (di_set_insert): Use hash_insert_if_absent, not hash_insert0. * NEWS: Mention it, even though it's not really an incompatible change. 2011-11-18 Dagobert Michelsen (tiny change) openat: avoid compilation failure due to lack of inclusion * lib/openat.c: Include . 2011-11-17 Paul Eggert * modules/getcwd (Depends-on): Add fdopendir. This fixes one of the two problems reported by Kai Habel in . modules/crypto/gc-*: simplify dependencies and fix stdalign.h bug stdalign problem reported by Ian Beckwith in . * modules/crypto/gc-arcfour (Depends-on): Depend conditionally on crypto/arcfour. * modules/crypto/gc-arctwo (Depends-on): Depend conditionally on crypto/arctwo. * modules/crypto/gc-des (Depends-on): Depend conditionally on crypto/des. * modules/crypto/gc-hmac-md5 (Depends-on): Depend conditionally on crypto/hmac-md5. * modules/crypto/gc-hmac-sha1 (Depends-on): Depend conditionally on crypto/hmac-sha1. * modules/crypto/gc-md2 (Depends-on): Remove stdint, minmax. * modules/crypto/gc-md4 (Depends-on): Depend conditionally on crypto/md4. * modules/crypto/gc-md5 (Depends-on): Depend conditionally on crypto/md5. * modules/crypto/gc-rijndael (Depends-on): Depend conditionally on crypto/rijndael. * modules/crypto/gc-sha1 (Depends-on): Depend conditionally on crypto/sha1. * modules/crypto/gc-arcfour: * modules/crypto/gc-arctwo: * modules/crypto/gc-des: * modules/crypto/gc-hmac-md5: * modules/crypto/gc-hmac-sha1: * modules/crypto/gc-md2: * modules/crypto/gc-md4: * modules/crypto/gc-md5: * modules/crypto/gc-rijndael: * modules/crypto/gc-sha1: (Files, Depends-on, configure.ac): Remove now-unnecessary stuff, now that the conditional dependencies do the work for us. 2011-11-17 Jim Meyering tests: factor st_ctime-comparison out of two headers * tests/test-utimens-common.h (ctime_compare): Define. * tests/test-futimens.h (test_futimens): Replace open-coded equivalent. * tests/test-lutimens.h (test_lutimens): Likewise. * tests/test-utimens.h (test_utimens): Likewise. test-getcwd: don't leave behind a confdir3/ directory upon interrupt Invoke the test program via an init.sh-using wrapper. * tests/test-getcwd.sh: New file. * modules/getcwd-tests (Files): Add it. (Makefile.am) [TESTS]: Invoke the shell script wrapper. 2011-11-01 Gary V. Vaughan gitlog-to-changelog: support multi-author commits. The FSF cares about keeping track of all authors of patches to its projects, but Git doesn't provide obvious support for multi-author changesets. Consensus seems to be forming around the use of extra Signed-off-by inspired lines in the log message formatted as `Co-authored-by: A U Thor ' for round-tripping multi-author commits between version control systems. * gitlog-to-changelog: Extract `Co-authored-by:' lines from the git log message and output in standard ChangeLog multi-author format. Reported by Peter Rosin 2011-11-15 Ben Walton (tiny change) Bruno Haible Fix some modules' file list. * modules/fstatat (Files): Add m4/lstat.m4. * modules/openat (Files): Likewise. * modules/unlinkat (Files): Likewise. 2011-11-15 Gary V. Vaughan maint.mk: fix tight-scope.mk generation in VPATH builds. * top/maint.mk (tight-scope.mk): Make sure to prefix file reference with $(srcdir) so that the file is found correctly even when running `make syntax-check' in a VPATH build. 2011-11-13 Bruno Haible Jim Meyering Silence successful tests that use 'compare' on AIX, HP-UX, Solaris. * tests/init.sh (compare): Remove "No differences encountered" or synonymous output from the 'diff' program. 2011-11-13 Bruno Haible Makefile: Tweak indentation. * Makefile: Use tab as first character in every line that contains rule commands. 2011-11-13 Bruno Haible Syntax check for copyright statements. * check-copyright: New file. * Makefile (sc_check_copyright): New rule. 2011-11-13 Simon Josefsson * build-aux/git-version-gen: Add --prefix to configure the tag match string. 2011-11-13 Simon Josefsson * build-aux/git-version-gen: Add --help and --version. 2011-11-12 Jim Meyering revamp the other test-exclude?.sh scripts to use init.sh, too * tests/test-exclude1.sh: Use init.sh. * tests/test-exclude2.sh: Likewise. * tests/test-exclude3.sh: Likewise. * tests/test-exclude4.sh: Likewise. * tests/test-exclude5.sh: Likewise. * tests/test-exclude6.sh: Likewise. * tests/test-exclude7.sh: Likewise. * tests/test-exclude8.sh: Likewise. * modules/exclude-tests (Files): List init.sh. test-exclude2.sh, test-exclude5.sh: fail if test-exclude fails These shell scripts ignored failure of the binary test-exclude, so making the latter return 77 didn't cause them to be skipped. * tests/test-exclude5.sh: Exit with test-exclude's error status when that program fails. Revamp to use init.sh. * tests/test-exclude2.sh: Likewise. test-exclude: fix a typo * tests/test-exclude.c (main): Test for "leading_dir", not "leading-dir". 2011-11-11 Bruno Haible obstack: Fix compilation error on MSVC 9. * lib/obstack.c (print_and_abort): Declare with _Noreturn specifier. 2011-11-11 Jim Meyering test-exclude: skip tests rather than failing on deficient systems * tests/test-exclude.c (main): Skip tests that use FNM_CASEFOLD and FNM_LEADING_DIR on systems that lack the definitions. This affects at least Solaris 9. Reported and diagnosed by Dagobert Michelsen in http://thread.gmane.org/gmane.comp.gnu.grep.bugs/3947/focus=3950 2011-11-10 Bruno Haible ptsname_r test: Avoid gcc warning on glibc systems. * tests/test-ptsname_r.c (null_ptr): New function. (test_errors): Use it. 2011-11-10 Bruno Haible ptsname_r: Avoid compilation error on OSF/1 5.1. * lib/stdlib.in.h (ptsname_r): Override if REPLACE_PTSNAME_R is 1. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_PTSNAME_R. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): Set REPLACE_PTSNAME_R if the function is not declared or incompatibly declared. * modules/stdlib (Makefile.am): Substitute REPLACE_PTSNAME_R. * modules/ptsname_r (Depends-on, configure.ac): Update. * doc/glibc-functions/ptsname_r.texi: Mention the OSF/1 problems. 2011-11-10 Bruno Haible fstatat: Make cross-compilation guess succeed everywhere except on AIX. * m4/fstatat.m4 (gl_FUNC_FSTATAT): Require AC_CANONICAL_HOST. When cross-compiling, guess yes on all platforms except AIX. Reported by Ludovic Courtès . 2011-11-09 Bruno Haible ptsname_r tests: Fix bugs. * tests/test-ptsname_r.c (test_errors): Change return type to 'void'. Fix ptsname_r calls. Reduce loop rounds to a reasonable amount. 2011-11-09 Paul Eggert fstatat: work with cross-compilation Problem reported by Ludovic Courtès in . * m4/fstatat.m4 (gl_FUNC_FSTATAT): When cross-compiling, report "cross-compiling" and assume the bug is present. Replace FSTATAT_ZERO_FLAG_BROKEN with HAVE_WORKING_FSTATAT_ZERO_FLAG with an inverted sense, to be more conservative about our assumptions. * lib/fstatat.c (rpl_fstatat): Adjust to renamed macro. 2011-11-09 Bruno Haible Improve MODULES.html output. * modules/mkfifoat (Description): Use the word "function". * modules/readlinkat (Description): Likewise. * modules/symlinkat (Description): Likewise. 2011-11-09 Eric Blake ptsname_r-tests: new test module * modules/ptsname_r-tests: New module. * tests/test-ptsname_r.c: New file. ptsname_r: new module * modules/ptsname_r: New module. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): New file. * lib/ptsname.c (__ptsname_r): Split... * lib/ptsname_r.c: ...into new file. * m4/stdlib_h.m4 (gl_STDLIB_H): Check for decl. (gl_STDLIB_H_DEFAULTS): Set witness defaults. * modules/stdlib (Makefile.am): Substitute witnesses. * lib/stdlib.in.h (ptsname_r): Declare it. * doc/glibc-functions/ptsname_r.texi (ptsname_r): Document it. * MODULES.html.sh (Misc): Likewise. * modules/ptsname (Depends-on): Alter dependency. * doc/posix-functions/ptsname.texi (ptsname): Mention new module. 2011-11-09 Jim Meyering announce-gen: be more concise when there's only one URL+tarball * build-aux/announce-gen (get_tool_versions): When you distribute only one type of tarball, combine the first two "Here are..." sections and make the key-checking grammar independent of how many tarballs there are. 2011-11-09 Eric Blake openpty: provide a stub on mingw * lib/pty.in.h (includes): Provide forward declarations. * lib/openpty.c (openpty) [mingw]: Provide ENOSYS stub. raise: fix mingw handling of SIGPIPE * lib/sigprocmask.c (_gl_raise_SIGPIPE): Provide a return value. 2011-11-08 Bruno Haible More conditional dependencies. * modules/faccessat (Depends-on): Add conditions. * modules/fchmodat (Depends-on): Likewise. * modules/fchownat (Depends-on): Likewise. * modules/fstatat (Depends-on): Likewise. * modules/mkfifoat (Depends-on): Likewise. * modules/readlinkat (Depends-on): Likewise. * modules/symlinkat (Depends-on): Likewise. * modules/unlinkat (Depends-on): Likewise. * modules/utimensat (Depends-on): Likewise. * modules/mkdirat (Depends-on): Add sys_stat. Add conditions. * modules/linkat (Depends-on): Refine the conditions. * modules/renameat (Depends-on): Likewise. 2011-11-08 Bruno Haible faccessat: Move AC_LIBOBJ invocation to module description. * m4/faccessat.m4 (gl_PREREQ_FACCESSAT): New macro. (gl_FUNC_FACESSAT): Don't test for access() here. Move AC_LIBOBJ invocation from here... * modules/faccessat (configure.ac): ... to here. Invoke gl_PREREQ_FACCESSAT. 2011-11-08 Bruno Haible faccessat: Simplify autoconf macro. * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Don't require gl_FUNC_OPENAT, gl_FUNC_EUIDACCESS. 2011-11-08 Bruno Haible renameat: Fix dependencies. * modules/renameat (Depends-on): Add stdbool. 2011-11-08 Bruno Haible mkfifoat: Fix module description. * modules/mkfifoat (configure.ac): Invoke gl_SYS_STAT_MODULE_INDICATOR, not gl_UNISTD_MODULE_INDICATOR. 2011-11-08 Bruno Haible fstatat: Remove unused dependency. * modules/fstatat (Depends-on): Remove fstat. 2011-11-08 Simon Josefsson GNUmakefile: behave when Makefile is missing. * top/GNUmakefile: Always initialize _build-aux and _autoreconf. 2011-11-08 Bruno Haible openat: Conditionalize dependencies. * lib/openat.c: Reduce the scope of some #includes. * modules/openat (Depends-on): Add conditions. 2011-11-07 Jim Meyering maint.mk: extract GPG key ID without using a temporary file * top/maint.mk (gpg_key_ID): Extract GPG key ID from signed tag, but without using a temporary file. Based on a suggestion from Werner Koch in http://thread.gmane.org/gmane.comp.encryption.gpg.devel/16496 2011-11-07 Eric Blake grantpt: fix typo * lib/stdlib.in.h (grantpt): Check correct function. maint.mk: silence new syntax check * top/maint.mk (sc_prohibit_dirent_without_use): Add missing @. 2011-11-06 Bruno Haible Doc about floating-point and math API. * doc/posix-headers/float.texi: Mention problem with FLT_ROUNDS. * doc/posix-headers/math.texi: Mention problem with math_errhandling. 2011-11-06 Bruno Haible stdalign tests: Skip the test when compiled by Sun C. * tests/test-stdalign.c (main): Skip the test on Sun C. 2011-11-06 Bruno Haible ansi-c++-opt: Complete the 2011-06-05 change. * m4/ansi-c++.m4 (gl_PROG_ANSI_CXX): When a C++ compiler is found but does not support namespaces, set the variable to "no", not to ":". 2011-11-06 Paul Eggert * doc/posix-headers/stdalign.texi (stdalign.h): Mention Sun review ID. 2011-11-06 Bruno Haible copysignl: Fix result for zero argument on HP-UX 11 with HP C. * lib/copysignl.c (compute_minus_zerol) [HP-UX]: New function. (minus_zerol) [HP-UX]: New macro. (unary_minus) [HP-UX]: New function. (copysignl) [HP-UX]: Use unary_minus function. 2011-11-06 Bruno Haible ldexp, ldexpf, ldexpl: Enhance tests. * tests/test-ldexp.h: New file, combining code from tests/test-ldexp.c and tests/test-ldexpl.c. * tests/test-ldexpl.c: (DOUBLE, ISNAN, INFINITY, NAN, L_, MINUS_ZERO, LDEXP, MIN_EXP, MAX_EXP): New macros. Include test-ldexp.h. (main): Just call test_function. * tests/test-ldexp.c: Include float.h, isnand-nolibm.h, minus-zero.h, infinity.h, nan.h. (DOUBLE, ISNAN, INFINITY, NAN, L_, MINUS_ZERO, LDEXP, MIN_EXP, MAX_EXP): New macros. Include test-ldexp.h. (x, y): Remove variables. (main): Just call test_function. * tests/test-ldexpf.c: Include float.h, isnanf-nolibm.h, minus-zero.h, infinity.h, nan.h. (DOUBLE, ISNAN, INFINITY, NAN, L_, MINUS_ZERO, LDEXP, MIN_EXP, MAX_EXP): New macros. Include test-ldexp.h. (x, y): Remove variables. (main): Just call test_function. * modules/ldexpl-tests (Files): Add tests/test-ldexp.h. * modules/ldexp-tests (Files): Add tests/test-ldexp.h, tests/minus-zero.h, tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm, signbit, float. * modules/ldexpf-tests (Files): Add tests/test-ldexp.h, tests/minus-zero.h, tests/infinity.h, tests/nan.h. (Depends-on): Add isnanf-nolibm, signbit, float. 2011-11-06 Bruno Haible math tests: Cosmetics. * tests/test-math-c++.cc: Reorder declarations. 2011-11-05 Bruno Haible fma*: Simplify test. * tests/test-fma2.h (FORGIVE_GLIBC_BUG): Remove macro. (test_function): Remove all if (FORGIVE_GLIBC_BUG) statements. Tests for module 'fmal'. * modules/fmal-tests: New file. * tests/test-fmal1.c: New file. * tests/test-fmal2.c: New file. New module 'fmal'. * lib/math.in.h (fmal): New declaration. * lib/fmal.c: New file. * m4/fmal.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whethern fmal is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMAL, HAVE_FMAL, REPLACE_FMAL. * modules/math (Makefile.am): Substitute GNULIB_FMAL, HAVE_FMAL, REPLACE_FMAL. * modules/fmal: New file. * doc/posix-functions/fmal.texi: Mention the new module and the various bugs. Tests for module 'fmaf'. * modules/fmaf-tests: New file. * tests/test-fmaf1.c: New file. * tests/test-fmaf2.c: New file. New module 'fmaf'. * lib/math.in.h (fmaf): New declaration. * lib/fmaf.c: New file. * m4/fmaf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whethern fmaf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMAF, HAVE_FMAF, REPLACE_FMAF. * modules/math (Makefile.am): Substitute GNULIB_FMAF, HAVE_FMAF, REPLACE_FMAF. * modules/fmaf: New file. * doc/posix-functions/fmaf.texi: Mention the new module and the various bugs. Tests for module 'fma'. * modules/fma-tests: New file. * tests/test-fma1.c: New file. * tests/test-fma1.h: New file. * tests/test-fma2.c: New file. * tests/test-fma2.h: New file. New module 'fma'. * lib/math.in.h (fma): New declaration. * lib/fma.c: New file. * m4/fma.m4: New file. * m4/fegetround.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whethern fma is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMA, HAVE_FMA, REPLACE_FMA. * modules/math (Makefile.am): Substitute GNULIB_FMA, HAVE_FMA, REPLACE_FMA. * modules/fma: New file. * doc/posix-functions/fma.texi: Mention the new module and the various bugs. Extend gl_MATHFUNC. * m4/mathfunc.m4 (gl_MATHFUNC): Accept an 4th parameter of INCLUDES. Support 'void' as argument type. * m4/rint.m4 (gl_FUNC_RINT): Update gl_MATHFUNC invocation. 2011-11-05 Jim Meyering maint.mk: also prohibit inclusion of dirent.h without use * top/maint.mk (sc_prohibit_dirent_without_use): New rule. 2011-11-05 Bruno Haible ldexpl tests: Avoid test failure on MSVC 9. * tests/test-ldexpl.c (main): Use a temporary variable for the expected value. Needed in order to enforce the conversion from a value greater than LDBL_MAX to Infinity. 2011-11-05 Bruno Haible New modules 'at-internal', 'openat-h', split off from module 'openat'. * modules/at-internal: New file, extracted from modules/openat. * modules/openat-h: New file. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_OPENAT. Don't invoke gl_PREREQ_OPENAT and gl_MODULE_INDICATOR. * modules/openat (Description): Add reference to POSIX function. (Files): Remove lib/openat.h, lib/openat-proc.c. (Depends-on): Add at-internal, openat-h. Remove fdopendir, gettext-h, intprops, unistd. (configure.ac): Remove AC_LIBOBJ of openat-proc. Invoke gl_PREREQ_OPENAT, gl_MODULE_INDICATOR here. Invoke gl_FCNTL_MODULE_INDICATOR. (Include): Remove unistd.h, openat.h. * modules/areadlinkat (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, extensions, fchdir, openat-die, openat-h, save-cwd. * modules/areadlinkat-with-size (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, extensions, fchdir, openat-die, openat-h, save-cwd, unistd. * modules/faccessat (Files): Add lib/at-func.c, lib/openat-priv.h. (Depends-on): Add at-internal, dosname, errno, fchdir, openat-die, openat-h, save-cwd. Remove fcntl-h, openat. * modules/fchmodat (Files): Remove lib/openat.h. (Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h, openat, stdbool, unistd. * modules/fchownat (Files): Remove lib/openat.h. (Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h, openat, stdbool, sys_stat. * modules/fdopendir (Files): Remove lib/openat-priv.h, lib/openat-proc.c. (Depends-on): Add at-internal. (condigure.ac): Remove AC_LIBOBJ of openat-proc. * modules/fstatat (Files): Remove lib/openat.h. (Depends-on): Add at-internal, openat-h. Remove dirent, openat, stdbool, unistd. * modules/fts (Depends-on): Add openat-h. * modules/linkat (Depends-on): Add at-internal, openat-h. Remove openat. * modules/mkdirat (Files): Remove lib/openat.h. (Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h, openat, stdbool, sys_stat. * modules/mkfifoat (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, fchdir, openat-die, openat-h, save-cwd. Remove fcntl-h, openat. * modules/openat-die (Depends-on): Add openat-h. Remove openat. * modules/readlinkat (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, fchdir, openat-die, openat-h, save-cwd. Remove fcntl-h, openat. * modules/renameat (Depends-on): Add at-internal, openat-h. Remove openat. * modules/selinux-at (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, extensions, fchdir, fcntl-h, openat-die, openat-h, save-cwd, unistd. Remove openat. * modules/symlinkat (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, fchdir, openat-die, openat-h, save-cwd. Remove fcntl-h, openat. * modules/unlinkat (Files): Remove lib/openat.h. (Depends-on): Add at-internal, openat-h. Remove dirent, openat, stdbool. * modules/utimensat (Files): Add lib/at-func.c. (Depends-on): Add at-internal, dosname, errno, fchdir, fcntl-h, openat-die, openat-h, save-cwd. * modules/fchownat-tests (Depends-on): Add openat-h. Remove openat. * modules/fdutimensat-tests (Depends-on): Add openat. * modules/fstatat-tests (Depends-on): Add openat-h. * modules/readlinkat-tests (Depends-on): Add openat. * modules/symlinkat-tests (Depends-on): Add openat. 2011-11-05 Bruno Haible openat: Include . * lib/openat.c: Include . 2011-11-04 Bruno Haible fchownat, renameat, unlinkat: Fix dependencies. * modules/fchownat (Depends-on): Add fstatat. * modules/renameat (Depends-on): Likewise. * modules/unlinkat (Depends-on): Likewise. 2011-11-04 Paul Eggert openat: remove direct dependency on dirent * lib/openat.h: Don't include ; it's no longer needed, and hasn't been needed ever since fdopendir was split into its own module on 2009-08-31. * modules/openat (Depends-on): Remove dirent. 2011-11-04 Bruno Haible renameat: Optimize code size. * modules/renameat (configure.ac): Don't compile at-func2.c if REPLACE_RENAMEAT is 1. 2011-11-04 Bruno Haible openat tests: Fix file list. * modules/openat-tests (Files): Add tests/test-open.h. 2011-11-04 Bruno Haible openat, fchmodat, fchownat, linkat, renameat: Fix dependencies. * modules/fchmodat (Depends-on): Add openat-die. * modules/fchownat (Depends-on): Likewise. * modules/linkat (Depends-on): Likewise. * modules/renameat (Depends-on): Likewise. * modules/openat (Depends-on): Add dirent. 2011-11-04 Jim Meyering at-func*.c: fix comments * lib/at-func2.c: Correct/improve first-line comment. * lib/at-func.c: Correct grammar in first-line comment. 2011-11-04 Bruno Haible New module 'mkdirat', split off from module 'openat'. * m4/mkdirat.m4: New file. extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't require gl_SYS_STAT_H_DEFAULTS. Don't test for mkdirat. Don't set GNULIB_MKDIRAT, HAVE_MKDIRAT. * modules/mkdirat: New file, extracted from modules/openat. * modules/openat (Files): Remove lib/mkdirat.c. (Depends-on): Remove mkdir. (configure.ac): Remove AC_LIBOBJ of mkdirat. (Include): Remove . * modules/mkdirat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-mkdirat.c, tests/test-mkdir.h. (Depends-on): Remove ignore-value. (Makefile.am): Remove rules for test-mkdirat. * doc/posix-functions/mkdirat.texi: Mention module 'mkdirat' instead of module 'openat'. * NEWS: Mention the change. 2011-11-04 Bruno Haible closedir: Avoid warning on mingw. * lib/closedir.c: Include . 2011-11-04 Bruno Haible New module 'fstatat', split off from module 'openat'. * lib/openat.h (statat, lstatat): Enable only if GNULIB_FSTATAT is defined. * m4/fstatat.m4: New file. extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FSTATAT. Don't invoke gl_FUNC_FSTATAT. (gl_FUNC_FSTATAT): Moved to m4/fstatat.m4. * modules/fstatat: New file, extracted from modules/openat. * modules/openat (Files): Remove lib/fstatat.c. (Depends-on): Remove lstat. (configure.ac): Remove AC_LIBOBJ of fstatat. * modules/fstatat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-fstatat.c, tests/test-lstat.h, tests/test-stat.h. (Depends-on): Remove getcwd-lgpl. (Makefile.am): Remove rules for test-fstatat. * doc/posix-functions/fstatat.texi: Mention module 'fstatat' instead of module 'openat'. * NEWS: Mention the change. * modules/getcwd (Depends-on): Add fstatat. * modules/linkat (Depends-on): Likewise. * modules/mkfifoat-tests (Depends-on): Likewise. * modules/utimensat (Depends-on): Add fstatat. Remove openat. 2011-11-03 Bruno Haible New module 'unlinkat', split off from module 'openat'. * m4/unlinkat.m4: New file, extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_UNLINKAT, REPLACE_UNLINKAT, HAVE_UNLINKAT. Don't test for unlinkat. * modules/unlinkat: New file, extracted from modules/openat. Correct the dependency conditions. * modules/openat (Files): Remove lib/unlinkat.c. (Depends-on): Remove rmdir, unlink. (configure.ac): Remove AC_LIBOBJ of unlinkat. * modules/unlinkat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-unlinkat.c, tests/test-rmdir.h, tests/test-unlink.h. (Depends-on): Remove unlinkdir. (Makefile.am): Remove rules for test-unlinkat. * doc/posix-functions/unlinkat.texi: Mention module 'unlinkat' instead of module 'openat'. * NEWS: Mention the change. * modules/linkat-tests (Depends-on): Add unlinkat. * modules/mkfifoat-tests (Depends-on): Likewise. * modules/readlinkat-tests (Depends-on): Likewise. 2011-11-02 Bruno Haible New module 'fchmodat', split off from module 'openat'. * lib/openat.h (chmodat, lchmodat): Enable only if GNULIB_FCHMODAT is defined. * m4/fchmodat.m4: New file, extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FCHMODAT. Don't test for fchmodat, lchmod. Don't set HAVE_FCHMODAT. * modules/fchmodat: New file, extracted from modules/openat. * modules/openat (Files): Remove lib/fchmodat.c. (configure.ac): Remove AC_LIBOBJ of fchmodat. * modules/fchmodat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-fchmodat.c. (Makefile.am): Remove rules for test-fchmodat. * doc/posix-functions/fchmodat.texi: Mention module 'fchmodat' instead of module 'openat'. * NEWS: Mention the change. 2011-11-02 Jim Meyering putenv: indent #definition of "environ" to placate cppi * lib/putenv.c (environ): Make indentation reflect cpp nesting. gitlog-to-changelog: provide a ChangeLog-repair mechanism Git logs are often treated as immutable, because editing them changes the SHA1 checksums of all descendants. Thus, errors in git logs tend to stay there forever. However, when we generate a ChangeLog file -- typically for distribution -- from that git log, we can actually make corrections in the generated file. The key lies in recording in machine-readable/applicable form the desired corrections. See --help for description and an example. * build-aux/gitlog-to-changelog (parse_amend_file): New function. (usage): Describe it; alphabetize option descriptions. (main): Honor the new option, carefully. 2011-11-01 Jim Meyering gitlog-to-changelog: avoid an infloop * build-aux/gitlog-to-changelog: Don't infloop for a commit log that ends up being empty. 2011-11-01 Paul Eggert * MODULES.html.sh: Fix sed-script shell quoting and locale issues. (func_module): Replace foo=` ... sed -e COMPLICATED ... ` with bar=COMPLICATED; foo=` ... sed -e "$bar" ... ` when COMPLICATED contains (possibly-quoted) backslashes. This should avoid all-too-common shell bugs if COMPLICATED contains backslashes in the "wrong" places. Reported by David Evans in . When 'sed' uses character ranges like A-Z, invoke it in the C locale, because we want ASCII ranges. Is there some reason we don't use the C locale everywhere in this script? (func_module, top level): Avoid unwanted pathname expansion when $repo_url_prefix or $repo_url_suffix_repl contain shell metacharacters like '?' and '*'. 2011-11-01 Bruno Haible fchownat: Improve description. * modules/fchownat (Description): Add link to function. 2011-11-01 Paul Eggert * tests/test-stdalign.c (TEST_ALIGNMENT): Shrink back to 8. mingw supports alignments only up to 8 (!). Reported by Bruno Haible in . * doc/posix-headers/stdalign.texi (stdalign.h): Document this. 2011-11-01 Bruno Haible alignof: Avoid collision with stdalign module. * lib/alignof.h (alignof): Remove macro. * NEWS: Mention the change. Reported by Paul Eggert. 2011-11-01 Bruno Haible New module 'fchownat', split off from module 'openat'. * lib/openat.h (chownat, lchownat): Enable only if GNULIB_FCHOWNAT is defined. * m4/fchownat.m4: New file, extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FCHOWNAT. Don't invoke gl_FUNC_FCHOWNAT. (gl_FUNC_FCHOWNAT_DEREF_BUG, gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG, gl_FUNC_FCHOWNAT): Moved to m4/fchownat.m4. * modules/fchownat: New file, extracted from modules/openat. * modules/openat (Files): Remove lib/fchownat.c. (Depends-on): Remove lchown. (configure.ac): Remove AC_LIBOBJ of fchownat. * modules/fchownat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-fchownat.c, tests/test-chown.h, tests/test-lchown.h, tests/nap.h. (Depends-on): Remove mgetgroups, usleep, stat-time. (configure.ac): Remove test for getegid. (Makefile.am): Remove rules for test-fchownat. * doc/posix-functions/fchownat.texi: Mention module 'fchownat' instead of module 'openat'. * NEWS: Mention the change. 2011-10-31 Paul Eggert stdalign: port better to MSVC and to Sun C 5.11 This fixes some of the problems reported by Bruno Haible in . * doc/posix-headers/stdalign.texi (stdalign.h): Document more shortcomings of MSVC and of Sun C 5.11. * lib/stdalign.in.h (_Alignas): Omit bogus extra parenthesis around __declspec arg. * modules/stdalign-tests (Files): Add tests/macros.h. * tests/test-stdalign.c: Do not include ; no longer needed. Include macros.h, for ASSERT. (DECLARE_ALIGNED): Remove. (TEST_ALIGNMENT): Define to 16 if alignment is supported (more likely to catch bug), and to 1 if not (simplifies the rest of the code). (CHECK_STATIC): Always declare the alignment test vars; that's simpler. (CHECK_AUTO): Remove. (CHECK_ALIGNED): Check only the alignment of the static vars, since auto var alignment isn't supported by Sun C 5.11. (CHECK_TYPES): Remove. All uses replaced by inline code, so that ASSERT failures are easier to diagnose. 2011-10-31 Bruno Haible doc about some IRIX 5.3 problems. * doc/posix-functions/getpwnam_r.texi: Mention incompatible declaration on IRIX 5.3. * doc/posix-headers/poll.texi: Mention missing nfds_t on IRIX 5.3. * doc/posix-functions/ptsname.texi: Mention missing declaration on IRIX 5.3. * doc/posix-functions/grantpt.texi: Likewise. * doc/posix-functions/unlockpt.texi: Likewise. * doc/posix-functions/lgamma.texi: Likewise. * doc/posix-functions/nextafter.texi: Likewise. * doc/posix-functions/remainder.texi: Likewise. * doc/posix-functions/select.texi: Mention misplaced declaration on IRIX 5.3. Reported by Tom G. Christensen . 2011-10-31 Dmitry V. Levin gitlog-to-changelog: fix git-log invocation. git-log mishandles date strings before 1970-01-01 UTC, and there is no use to specify --since=1970-01-01 by default anyway. * build-aux/gitlog-to-changelog: By default, when no --since option was given, do not specify explicit --since option to git-log. 2011-10-30 Dmitry V. Levin gitlog-to-changelog: new option --append-dot. * build-aux/gitlog-to-changelog: New option --append-dot, makes the first non-blank line of each commit message terminated with a dot. 2011-10-30 Bruno Haible ffsl, ffsll: Avoid compilation error due to 'restrict'. * lib/ffsl.h: Include . Suggested by Tom G. Christensen . 2011-10-30 Jim Meyering GNUmakefile: reenable "make syntax-check" for most projects Since Friday's commit 05e2d798, "maint.mk: don't maintain a second build-aux variable", "syntax-check" would do nothing but succeed with the "No version control files detected..." diagnostic (unless you happened to override _build-aux via cfg.mk). * top/GNUmakefile (_autoreconf, _build-aux): Move default definitions to precede inclusion of maint.mk. Otherwise, these variables would be used undefined in any project that does not override the default. 2011-10-29 Dmitry V. Levin gitlog-to-changelog: treat a message with only blank lines as empty. * build-aux/gitlog-to-changelog: Move the code that removes leading and trailing blank lines before the code that issues a warning about an empty commit message. 2011-10-30 Jim Meyering test-parse-datetime.c: avoid new DST-related false positive test failure * tests/test-parse-datetime.c (gmt_offset): Determine the "gmt_offset" based on the time/date we'll convert, not the current time. Otherwise, the moment we cross a DST boundary like today's in Europe, (CEST to CET), that offset ends up being one hour off. 2011-10-27 Bruno Haible fstat: Tweak documentation. * modules/fstat (Description): More precise description. 2011-10-27 Bruno Haible Update documentation regarding 'largefile' module. * doc/posix-functions/fstat.texi: Tweak wording. * doc/posix-functions/opendir.texi: Mention that the module fixes the problems with huge directories and/or small ino_t types. * doc/posix-functions/readdir.texi: Likewise. * doc/posix-functions/rewinddir.texi: Likewise. 2011-10-28 Gary V. Vaughan maint.mk: don't maintain a second build-aux variable. * maint.mk (build_aux): Removed. The maintainer-makefile module depends on GNUmakefile, which already maintains a cfg.mk overridable $(_build-aux) for projects with a non-standard build-aux directory location, although without the $(srcdir) prefix. Use that variable consistently instead of introducing a second one. Adjust all call sites. 2011-10-27 Paul Eggert Add stdalign module and use it in other modules. This is based on a previous proposal by Bruno Haible . stdalign: new module * doc/posix-headers/stdalign.texi, lib/stdalign.in.h, m4/stdalign.m4: * modules/stdalign: New files. * MODULES.html.sh (c1x_core_properties): Add stdalign. * doc/gnulib.texi (Header File Substitutes): Add stdalign. stdalign-tests: new module * modules/stdalign-tests, tests/test-stdalign.c: New files. argp: use stdalign * lib/argp-parse.c: Include . (alignof): Remove. * modules/argp (Depends-on): Add stdalign. crypto libraries: use stdalign * lib/md4.c, lib/md5.c, lib/sha1.c, lib/sha256.c, lib/sha512.c: Include and . Do not include . Do not include twice, in md4.c. (UNALIGNED_P): Simplify by using alignof. Use uintptr_t, not size_t, because we are accessing a pointer's bit-pattern, not a size. * modules/crypto/gc-md4 (Depends-on): Add stdalign. * modules/crypto/gc-md5, modules/crypto/gc-sha1, modules/crypto/md4: * modules/crypto/md5, modules/crypto/sha1, modules/crypto/sha256: * modules/crypto/sha512: Likewise. sys_socket: use stdalign, not alignof * lib/sys_socket.in.h: Include instead of . * modules/sys_socket (Depends-on): Depend on stdalign, not alignof. 2011-10-27 Bruno Haible raise test: Avoid a test failure on Linux/MIPS. * tests/test-raise.c (main): Try raising signal 199, not 99. Needed because 99 is a valid signal on Linux/MIPS. 2011-10-27 Bruno Haible nonblocking tests: Fix test failure on Linux/MIPS. * tests/test-nonblocking-pipe.h (PIPE_DATA_BLOCK_SIZE) [Linux/MIPS]: Set to 270000. 2011-10-27 Bruno Haible utimensat: Work around problem on Linux/hppa. * lib/utimensat.c (rpl_utimensat) [Linux/hppa]: Reject invalid tv_nsec values. * doc/posix-functions/utimensat.texi: Mention the problem on Linux/hppa. 2011-10-25 Jim Meyering maint.mk: fix a bug in sc_prohibit_stddef_without_use * top/maint.mk (sc_prohibit_stddef_without_use): Don't require / *\(/ after symbols like NULL, size_t, etc. Reported by Alfred M. Szmidt. maint.mk: exempt ENODATA from a syntax-check rule * top/maint.mk (gl_extract_significant_defines_): Also exempt ENODATA from the sc_prohibit_always-defined_macros syntax-check rule. Add a comment. See this for more details: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/28739/focus=28795 2011-10-23 Jim Meyering fts: close parent dir FD before returning from post-traversal fts_read The problem: the fts-using "mkdir -p A/B; rm -rf A" would attempt to unlink A, even though an FD open on A remained. This is suboptimal (holding a file descriptor open longer than needed), but otherwise not a problem on Unix-like kernels. However, on Cygwin with certain Novell file systems, (see http://cygwin.com/ml/cygwin/2011-10/msg00365.html), that represents a real problem: it causes the removal of A to fail with e.g., "rm: cannot remove `A': Device or resource busy" fts visits each directory twice and keeps a cache (fts_fd_ring) of directory file descriptors. After completing the final, FTS_DP, visit of a directory, RESTORE_INITIAL_CWD intended to clear the FD cache, but then proceeded to add a new FD to it via the subsequent FCHDIR (which calls cwd_advance_fd and i_ring_push). Before, the final file descriptor would be closed only via fts_close's call to fd_ring_clear. Now, it is usually closed earlier, via the final FTS_DP-returning fts_read call. * lib/fts.c (restore_initial_cwd): New function, converted from the macro. Call fd_ring_clear *after* FCHDIR, not before it. Update callers. Reported by Franz Sirl via the above URL, with analysis by Eric Blake in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/28739 2011-10-23 Gary V. Vaughan Bruno Haible Jim Meyering readme-release: improve safety of release prep instructions. * README-release: Don't git pull all branches when only master is needed for the release process. Run make maintainer-clean before changing trees and merging. Don't try to run ./configure right after git pull in case files that influence the bootstrap process have changed, move the ./configure step to after running ./bootstrap. Don't bootstrap "one last time"... it's the first time! 2011-10-22 Bruno Haible errno, strerror-override: Support for MSVC 10. * lib/errno.in.h (GNULIB_defined_ETXTBSY): Remove macro. (ENOMSG, EIDRM, ENOLINK, EPROTO, EBADMSG, EOVERFLOW, ENOTSUP, ENETRESET, ECONNABORTED, ECANCELED, EINPROGRESS, EALREADY, ENOTSOCK, EDESTADDRREQ, EMSGSIZE, EPROTOTYPE, ENOPROTOOPT, EPROTONOSUPPORT, EOPNOTSUPP, EAFNOSUPPORT, EADDRINUSE, EADDRNOTAVAIL, ENETDOWN, ENETUNREACH, ECONNRESET, ENOBUFS, EISCONN, ENOTCONN, ETIMEDOUT, ECONNREFUSED, ELOOP, EHOSTUNREACH, EWOULDBLOCK, ETXTBSY) [Win32]: Assign values compatible with MSVC 10. (ENODATA, ENOSR, ENOSTR, ENOTRECOVERABLE, EOWNERDEAD, ETIME, EOTHER): New macros. (GNULIB_defined_EWINSOCK): New macro. * lib/strerror-override.c (strerror_override): Update accordingly. * lib/strerror-override.h: Likewise. * lib/w32sock.h (set_winsock_errno): Map those WSA* values that are no longer equal to the corresponding errno value. Reported by Michael Goffioul . 2011-10-22 Bruno Haible perror: Recognize when test program crashes. * m4/perror.m4 (gl_FUNC_PERROR): If the test program crashes due to strerror, set gl_cv_func_perror_works to no. Reported by Daniel Richard G. . perror: Fix indentation. * m4/perror.m4 (gl_FUNC_PERROR): Fix indentation. 2011-10-22 Bruno Haible isfinite, isinf, isnan, signbit: Don't define as a macro in C++. * lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_1, _GL_MATH_CXX_REAL_FLOATING_DECL_2): nEW MACROS. (isfinite, isinf, isnan, signbit): In C++, define as overloaded functions, not as a macro. * tests/test-math-c++.cc (REAL_FLOATING_CHECK, OVERLOADED_CHECK): New macros. (isfinite, isinf, isnan, signbit): Check overloaded functions and absence of macro. Suggested by Eric Blake. Reported by Michael Goffioul . 2011-10-21 Bruno Haible relocatable-prog-wrapper: Don't leave object files behind. * build-aux/install-reloc: Re-synchronize list of .o files to be removed with list of compilation units. 2011-10-20 Bruno Haible openpty, posix_openpt: Remove code duplication. * lib/posix_openpt.c: Add comments about platforms, from lib/openpty.c. * lib/openpty.c: Include . (openpty): Use posix_openpt on all platforms except IRIX. * modules/openpty (Depends-on): Add posix_openpt. Add conditions. 2011-10-20 Bruno Haible unlockpt: Detect invalid argument. * lib/unlockpt.c: Include . (unlockpt): Check whether fd is valid, using fcntl(). * modules/unlockpt (Depends-on): Add fcntl-h. 2011-10-20 Bruno Haible openpty: Avoid compilation error on AIX 6.1. * lib/pty.in.h [AIX]: Include , for 'struct winsize'. 2011-10-20 Bruno Haible posix_openpt: Support for OpenBSD. * lib/posix_openpt.c [OpenBSD]: Include , . (posix_openpt) [OpenBSD]: New code. * lib/grantpt.c: Include . (grantpt) [OpenBSD]: Only test whether fd is valid, nothing else. * modules/grantpt (Depends-on): Add fcntl-h. 2011-10-20 Bruno Haible posix_openpt test: Coding style. * tests/test-posix_openpt.c: Use GNU coding style. 2011-10-20 Bruno Haible grantpt: Support --avoid=pt_chown. * modules/grantpt (Files): Add lib/pty-private.h. 2011-10-20 Bruno Haible posix_openpt: Fix autoconf macro. * m4/posix_openpt.m4 (gl_FUNC_POSIX_OPENPT): Fix variable name. Remove unneeded check for _getpty. 2011-10-20 Bruno Haible openpty: Update comments. * lib/openpty.c: Add comments about Minix. 2011-10-19 Eric Blake openpty: relax license * modules/openpty (License): Change from LGPLv3+ to LGPLv2+. pt_chown: use configmake to simplify build * modules/pt_chown (Makefile.am): Drop line guaranteed by configmake. ptsname and others: relax license * modules/grantpt (License): Change from LGPLv3+ to LGPLv2+. * modules/unlockpt (License): Likewise. * modules/pt_chown (License): Likewise. * modules/ptsname (License): Likewise. * modules/ttyname_r (License): Likewise. 2011-10-19 Jim Meyering posix_openpt: remove spurious #endif * lib/posix_openpt.c (posix_openpt): Remove spurious #endif. 2011-10-19 Gary V. Vaughan maint.mk: Respect $(build_aux) in web-manual rule. * top/maint.mk (web-manual): Find gen-announce script in user's $(build_aux) directory instead of hard-coding 'build-aux'. 2011-10-19 Bruno Haible posix_openpt: Fix compilation error. * lib/posix_openpt.c (posix_openpt): Renamed from posix_openpty. * doc/posix-functions/posix_openpt.texi: Mention ENOENT error code. Mention the openpty module as an alternative. 2011-10-19 Bruno Haible Support for old NeXTstep 3.3 frexp(). * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Check for alarm. Limit the execution time of the test to 5 seconds. Reported by Daniel Richard G. . 2011-10-19 Bruno Haible Support for old NeXTstep 3.3 sed. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER_ONE): In the sed address part, use /.../, not \|...|. Escape periods in the header file name. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Likewise. Reported by Daniel Richard G. . 2011-10-18 Daniel Richard G. (tiny change) Support for old NeXTstep 3.3 gcc. * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Write 'defined __STRICT_ANSI__', not '__STRICT_ANSI__'. * lib/math.in.h (_GL_NUM_UINT_WORDS etc.): Likewise. * lib/spawn.in.h (_Restrict_arr_): Likewise. * lib/regex.h (_Restrict_arr_): Likewise. * lib/regex_internal.h (re_token_t): Likewise. * lib/regexec.c (check_node_accept_bytes): Likewise. * tests/test-printf-posix.c (func1, func2, func3, func4): Likewise. 2011-10-18 Eric Blake posix_openpt: new module * modules/posix_openpt: New module. * m4/posix_openpt.m4: New file. * lib/posix_openpt.c: Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H): Check for decl. (gl_STDLIB_H_DEFAULTS): Set defaults. * modules/stdlib (Makefile.am): Substitute macros. * lib/stdlib.in.h (posix_openpt): Declare. * MODULES.html.sh (systems lacking POSIX:2008): Document it. * doc/posix-functions/posix_openpt.texi (posix_openpt): Likewise. * modules/posix_openpt-tests: New test module. * tests/test-posix_openpt.c: New test. 2011-10-15 Bruno Haible xstrtoll: Fix compilation failure. * lib/xstrtol.c (ULLONG_MAX, LLONG_MAX, LLONG_MIN): New macros, taken from lib/strtol.c. * doc/posix-headers/limits.texi: Mention missing numerical limits on some platforms. Reported by Tom G. Christensen . 2011-10-15 Bruno Haible vasnprintf: Optimize bit search operation. * lib/vasnprintf.c (divide): Use optimizations from integer_length.c. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Require gl_DOUBLE_EXPONENT_LOCATION. * modules/vasnprintf (Files): Add m4/exponentd.m4. * modules/unistdio/u8-vasnprintf (Files): Likewise. * modules/unistdio/u8-u8-vasnprintf (Files): Likewise. * modules/unistdio/u16-vasnprintf (Files): Likewise. * modules/unistdio/u16-u16-vasnprintf (Files): Likewise. * modules/unistdio/u32-vasnprintf (Files): Likewise. * modules/unistdio/u32-u32-vasnprintf (Files): Likewise. * modules/unistdio/ulc-vasnprintf (Files): Likewise. * m4/isnand.m4 (gl_PREREQ_ISNAND): Use AC_REQUIRE. 2011-10-15 Bruno Haible vasnprintf: Fix comments. * lib/vasnprintf.c (decode_long_double, decode_double): Fix comments. 2011-10-14 Bruno Haible Tests for module 'integer_length_ll'. * modules/integer_length_ll-tests: New file. * tests/test-integer_length_ll.c: New file. New module 'integer_length_ll'. * lib/integer_length_ll.c: New file. * modules/integer_length_ll: New file. 2011-10-14 Bruno Haible Tests for module 'integer_length_l'. * modules/integer_length_l-tests: New file. * tests/test-integer_length_l.c: New file. New module 'integer_length_l'. * lib/integer_length_l.c: New file. * modules/integer_length_l: New file. 2011-10-14 Bruno Haible Tests for module 'integer_length'. * modules/integer_length-tests: New file. * tests/test-integer_length.c: New file. New module 'integer_length'. * lib/integer_length.h: New file. * lib/integer_length.c: New file. * modules/integer_length: New file. 2011-10-14 Daniel Richard G. (tiny change) popen: Fix dependency conditions. * modules/popen (Depends-on, configure.ac): Fix shell syntax error. 2011-10-14 Daniel Richard G. (tiny change) perror: Fix autoconf test. * m4/perror.m4 (gl_FUNC_PERROR): In the test program, include and . 2011-10-14 Bruno Haible ffsl: Optimize on 64-bit platforms. * lib/ffsl.h (FUNC): Omit a test from the last loop round. Do loop unrolling. 2011-10-13 Bruno Haible ffsl: Optimize on 32-bit platforms. * lib/ffsl.h (FUNC): If TYPE has the same representation as 'int', just use ffs() without a loop. ffsl, ffsll: Optimize for GCC. * lib/ffsl.h (FUNC): Use GCC_BUILTIN if defined. * lib/ffsl.c (GCC_BUILTIN): New macro. * lib/ffsll.c (GCC_BUILTIN): Likewise. 2011-10-13 Bruno Haible ffs, bcopy, memset: Support symbol renaming via config.h. * lib/ffs.c: Include . * lib/bcopy.c: Likewise. * lib/memset.c: Likewise. 2011-10-10 Bruno Haible atanl: Simplify for platforms where 'long double' == 'double'. * lib/atanl.c (atanl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/atanl.m4 (gl_FUNC_ATANL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine ATANL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/atanl (Depends-on): Add atan. Update conditions. 2011-10-10 Bruno Haible acosl: Simplify for platforms where 'long double' == 'double'. * lib/acosl.c (acosl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/acosl.m4 (gl_FUNC_ACOSL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine ACOSL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/acosl (Depends-on): Add acos. Update conditions. 2011-10-10 Bruno Haible asinl: Simplify for platforms where 'long double' == 'double'. * lib/asinl.c (asinl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/asinl.m4 (gl_FUNC_ASINL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine ASINL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/asinl (Depends-on): Add asin. Update conditions. 2011-10-10 Bruno Haible tanl: Simplify for platforms where 'long double' == 'double'. * lib/tanl.c (tanl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/tanl.m4 (gl_FUNC_TANL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine TANL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/tanl (Depends-on): Add tan. Update conditions. (configure.ac): Don't compile trigl.c if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. 2011-10-10 Bruno Haible cosl: Simplify for platforms where 'long double' == 'double'. * lib/cosl.c (cosl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/cosl.m4 (gl_FUNC_COSL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine COSL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/cosl (Depends-on): Add cos. Update conditions. (configure.ac): Don't compile sincosl.c and trigl.c if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. 2011-10-10 Bruno Haible sinl: Simplify for platforms where 'long double' == 'double'. * lib/sinl.c (sinl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/sinl.m4 (gl_FUNC_SINL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine SINL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/sinl (Depends-on): Add sin. Update conditions. (configure.ac): Don't compile sincosl.c and trigl.c if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. 2011-10-10 Bruno Haible logl: Simplify for platforms where 'long double' == 'double'. * lib/logl.c (logl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/logl.m4 (gl_FUNC_LOGL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine LOGL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/logl (Depends-on): Add log. Update conditions. 2011-10-10 Bruno Haible expl: Simplify for platforms where 'long double' == 'double'. * lib/expl.c (expl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/expl.m4 (gl_FUNC_EXPL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine EXPL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/expl (Depends-on): Add exp. Update conditions. 2011-10-10 Bruno Haible sqrtl: Simplify for platforms where 'long double' == 'double'. * lib/sqrtl.c (sqrtl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine SQRTL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/sqrtl (Depends-on): Update conditions. 2011-10-10 Bruno Haible ldexpl: Simplify for platforms where 'long double' == 'double'. * lib/ldexpl.c (ldexpl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative implementation. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine LDEXPL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/ldexpl (Depends-on): Add ldexp. Update conditions. 2011-10-10 Tom G. Christensen (tiny change) ffsll: set correct witness * modules/ffsll (configure.ac): Fix typo. 2011-10-10 Bruno Haible printf-frexpl: Simplify for platforms where 'long double' == 'double'. * lib/printf-frexpl.c: Include . (printf_frexpl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/printf-frexp.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Require gl_LONG_DOUBLE_VS_DOUBLE. * modules/printf-frexpl (Depends-on): Add printf-frexp. Update conditions. 2011-10-10 Bruno Haible frexpl: Simplify for platforms where 'long double' == 'double'. * lib/frexpl.c: Include . (frexpl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/frexp.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/frexpl.m4 (gl_FUNC_FREXPL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine FREXPL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. (gl_FUNC_FREXPL_NO_LIBM): Require gl_LONG_DOUBLE_VS_DOUBLE. * modules/frexpl (Depends-on): Add frexp. Update conditions. * modules/frexpl-nolibm (Depends-on): Add frexp-nolibm. Update conditions. 2011-10-10 Jim Meyering test-renameat: don't leave behind a temporary file * tests/test-renameat.c (main): Don't forget to remove a temporary file. ERROR: files left in build directory after distclean: ./gltests/test-renameat.too make[1]: *** [distcleancheck] Error 1 Reported by Tom G. Christensen. 2011-10-09 Bruno Haible rint: Determine RINT_LIBM correctly on AIX 7. * m4/mathfunc.m4 (gl_MATHFUNC): Try to invoke the function also directly, not only through a function pointer. Also accept an optional 4th argument with extra code. * m4/rint.m4 (gl_FUNC_RINT): Pass an extra code that gets turned into a rintf() call by gcc when optimizing. mathfunc.m4: Refactor. * m4/mathfunc.m4 (gl_MATHFUNC): Assign the argument list to a temporary m4 variable. 2011-10-09 Bruno Haible rintl: Simplify for platforms where 'long double' == 'double'. * lib/rintl.c: Include . (rintl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/rint.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/rintl.m4 (gl_FUNC_RINTL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine RINTL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/rintl (Depends-on): Add rint. Update conditions. 2011-10-09 Bruno Haible roundl: Simplify for platforms where 'long double' == 'double'. * lib/roundl.c: Include . (roundl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/round.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/roundl.m4 (gl_FUNC_ROUNDL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine ROUNDL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/roundl (Depends-on): Add round. Update conditions. 2011-10-09 Bruno Haible truncl: Simplify for platforms where 'long double' == 'double'. * lib/truncl.c: Include . (truncl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/trunc.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/truncl.m4 (gl_FUNC_TRUNCL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine TRUNCL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/truncl (Depends-on): Add trunc. Update conditions. 2011-10-09 Bruno Haible ceill: Simplify for platforms where 'long double' == 'double'. * lib/ceill.c: Include . (ceill) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/ceil.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/ceill.m4 (gl_FUNC_CEILL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine CEILL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/ceill (Depends-on): Add ceil. Update conditions. 2011-10-09 Bruno Haible floorl: Simplify for platforms where 'long double' == 'double'. * lib/floorl.c: Include . (floorl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New function. * lib/floor.c [!USE_LONG_DOUBLE]: Don't include a second time. * m4/floorl.m4 (gl_FUNC_FLOORL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine FLOORL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/floorl (Depends-on): Add floor. Update conditions. 2011-10-09 Bruno Haible rint: Fix ordering constraints. * m4/rint.m4 (gl_FUNC_RINT): Require gl_MATH_H_DEFAULTS. * m4/rintf.m4 (gl_FUNC_RINTF): Likewise. * m4/rintl.m4 (gl_FUNC_RINTL): Likewise. 2011-10-09 Bruno Haible copysignl: Simplify for platforms where 'long double' == 'double'. * lib/copysignl.c (copysignl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative. * m4/copysignl.m4 (gl_FUNC_COPYSIGNL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine COPYSIGNL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/copysignl (Depends-on): Add copysign. Update conditions. 2011-10-09 Bruno Haible Tests for module 'rintl'. * modules/rintl-tests: New file. * tests/test-rintl.c: New file. New module 'rintl'. * lib/math.in.h (rintl): New declaration. * lib/rintl.c: New file. * m4/rintl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether rintl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_RINTL, HAVE_RINTL. * modules/math (Makefile.am): Substitute GNULIB_RINTL, HAVE_RINTL. * modules/rintl: New file. * tests/test-math-c++.cc: Check the declaration of rintl. * modules/math-c++-tests (Makefile.am): Link test-math-c++ against $(RINTL_LIBM). Needed on IRIX 6.5 with cc. * doc/posix-functions/rintl.texi: Mention the new module. 2011-10-09 Bruno Haible Tests for module 'rintf'. * modules/rintf-tests: New file. * tests/test-rintf.c: New file. New module 'rintf'. * lib/math.in.h (rintf): New declaration. * lib/rintf.c: New file. * m4/rintf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether rintf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_RINTF, HAVE_RINTF. * modules/math (Makefile.am): Substitute GNULIB_RINTF, HAVE_RINTF. * modules/rintf: New file. * tests/test-math-c++.cc: Check the declaration of rintf. * doc/posix-functions/rintf.texi: Mention the new module. 2011-10-09 Bruno Haible rint: Support for MSVC. * lib/math.in.h (rint): New declaration. * lib/rint.c: New file. * m4/rint.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether rint is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_RINT, HAVE_RINT. * modules/math (Makefile.am): Substitute GNULIB_RINT, HAVE_RINT. * modules/rint (Description): Fix. (Files): Add lib/rint.c, m4/rint.m4. (Depends-on): Add math. (configure.ac): Invoke gl_FUNC_RINT, AC_LIBOBJ, gl_MATH_MODULE_INDICATOR. * tests/test-math-c++.cc: Check the declaration of rint. * modules/math-c++-tests (Makefile.am): Link test-math-c++ against $(RINT_LIBM). Needed on IRIX 6.5 with cc. * doc/posix-functions/rint.texi: Mention the replacement provided by the module. rint tests: More tests. * tests/test-rint.c: Include , , isnand-nolibm.h, minus-zero.h, infinity.h, nan.h. (main): Skip the test if the current rounding mode is not standard. Add tests for negative numbers, minus zero, infinity, NaN. * modules/rint-tests (Files): Add tests/minus-zero.h, tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. 2011-10-09 Bruno Haible Tests for module 'copysignl'. * modules/copysignl-tests: New file. * tests/test-copysignl.c: New file. New module 'copysignl'. * lib/math.in.h (copysignl): New declaration. * lib/copysignl.c: New file. * m4/copysignl.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether copysignl is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_COPYSIGNL, HAVE_COPYSIGNL. * modules/math (Makefile.am): Substitute GNULIB_COPYSIGNL, HAVE_COPYSIGNL. * modules/copysignl: New file. * tests/test-math-c++.cc: Check the declaration of copysignl. * modules/math-c++-tests (Makefile.am): Link test-math-c++ against $(COPYSIGNL_LIBM). Needed on IRIX 6.5 with cc. * doc/posix-functions/copysignl.texi: Mention the new module. 2011-10-09 Bruno Haible Tests for module 'copysignf'. * modules/copysignf-tests: New file. * tests/test-copysignf.c: New file. New module 'copysignf'. * lib/math.in.h (copysignf): New declaration. * lib/copysignf.c: New file. * m4/copysignf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether copysignf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_COPYSIGNF, HAVE_COPYSIGNF. * modules/math (Makefile.am): Substitute GNULIB_COPYSIGNF, HAVE_COPYSIGNF. * modules/copysignf: New file. * tests/test-math-c++.cc: Check the declaration of copysignf. * doc/posix-functions/copysignf.texi: Mention the new module. 2011-10-09 Bruno Haible Ensure that HAVE_* variables are set to 1 before they are set to 0. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Require gl_DIRENT_H_DEFAULTS. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Require gl_ARPA_INET_H_DEFAULTS. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Likewise. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Require gl_SIGNAL_H_DEFAULTS. 2011-10-09 Bruno Haible poll: Make macro safer. * m4/poll.m4 (gl_FUNC_POLL): Complain if, after invoking gl_POLL_H, ac_cv_header_poll_h is not set. 2011-10-09 Bruno Haible copysign: Provide replacement. * lib/math.in.h (copysign): New declaration. * lib/copysign.c: New file. * m4/copysign.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether copysign is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_COPYSIGN, HAVE_COPYSIGN. * modules/math (Makefile.am): Substitute GNULIB_COPYSIGN, HAVE_COPYSIGN. * modules/copysign (Description): Clarify. (Files): Add lib/copysign.c, m4/copysign.m4. (Depends-on): Add math, signbit. (configure.ac): Invoke gl_FUNC_COPYSIGN, AC_LIBOBJ, gl_MATH_MODULE_INDICATOR. * tests/test-math-c++.cc: Check the declaration of copysign. * doc/posix-functions/copysign.texi: Mention the effects of the module on Minix and MSVC. 2011-10-09 Bruno Haible isinf: Ensure macro on AIX 5.1. * m4/isinf.m4 (gl_ISINF): Also test whether isinf is defined as a macro. * doc/posix-functions/isinf.texi: Mention also AIX 5.1 as deficient. 2011-10-09 Bruno Haible *printf-posix tests: Fix for platforms where 'long double' == 'double'. * modules/snprintf-posix-tests (configure.ac): Require gl_LONG_DOUBLE_VS_DOUBLE. * modules/sprintf-posix-tests (configure.ac): Likewise. * modules/vasnprintf-posix-tests (configure.ac): Likewise. * modules/vasprintf-posix-tests (configure.ac): Likewise. * modules/vsnprintf-posix-tests (configure.ac): Likewise. * modules/vsprintf-posix-tests (configure.ac): Likewise. * tests/test-snprintf-posix.h (test_function): Avoid 80-bit long double tests on platforms where 'long double' is the same as 'double'. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasnprintf-posix.c (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. *printf: Fix for platforms where 'long double' == 'double'. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Require gl_LONG_DOUBLE_VS_DOUBLE. Don't blindly assume 80-bit 'long double'. * modules/dprintf-posix (Files): Add m4/math_h.m4. * modules/fprintf-posix (Files): Likewise. * modules/obstack-printf-posix (Files): Likewise. * modules/snprintf-posix (Files): Likewise. * modules/sprintf-posix (Files): Likewise. * modules/vasnprintf (Files): Likewise. * modules/vasnprintf-posix (Files): Likewise. * modules/vasprintf-posix (Files): Likewise. * modules/vdprintf-posix (Files): Likewise. * modules/vfprintf-posix (Files): Likewise. * modules/vsnprintf-posix (Files): Likewise. * modules/vsprintf-posix (Files): Likewise. * modules/unistdio/u8-vasnprintf (Files): Likewise. * modules/unistdio/u8-u8-vasnprintf (Files): Likewise. * modules/unistdio/u16-vasnprintf (Files): Likewise. * modules/unistdio/u16-u16-vasnprintf (Files): Likewise. * modules/unistdio/u32-vasnprintf (Files): Likewise. * modules/unistdio/u32-u32-vasnprintf (Files): Likewise. * modules/unistdio/ulc-vasnprintf (Files): Likewise. isnanl[-nolibm]: Fix for platforms where 'long double' == 'double'. * lib/isnan.c (rpl_isnanl): Don't blindly assume 80-bit 'long double'. * m4/isnanl.m4 (gl_PREREQ_ISNANL): Require gl_LONG_DOUBLE_VS_DOUBLE. (gl_FUNC_ISNANL_WORKS): Likewise. Don't blindly assume 80-bit 'long double'. * modules/isnanl-nolibm (Files): Add m4/math_h.m4. isinf: Fix for platforms where 'long double' == 'double'. * m4/isinf.m4 (gl_ISINFL_WORKS): Require gl_LONG_DOUBLE_VS_DOUBLE. Don't blindly assume 80-bit 'long double'. isfinite: Fix for platforms where 'long double' == 'double'. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Require gl_LONG_DOUBLE_VS_DOUBLE. Don't blindly assume 80-bit 'long double'. isfinite, isinf, isnan tests: Avoid syntax error on MSVC 9. * m4/math_h.m4 (gl_LONG_DOUBLE_VS_DOUBLE): New macro. * modules/isfinite-tests (configure.ac): Require gl_LONG_DOUBLE_VS_DOUBLE. * modules/isinf-tests (configure.ac): Likewise. * modules/isnan-tests (configure.ac): Likewise. * modules/isnanl-tests (configure.ac): Likewise. * modules/isnanl-nolibm-tests (configure.ac): Likewise. * tests/test-isfinite.c (test_isfinitel): Avoid 80-bit long double tests on platforms where 'long double' is the same as 'double'. * tests/test-isinf.c (test_isinfl): Likewise. * tests/test-isnan.c (test_long_double): Likewise. * tests/test-isnanl.h (main): Likewise. 2011-10-08 Bruno Haible Tests for module 'tanhf'. * modules/tanhf-tests: New file. * tests/test-tanhf.c: New file. New module 'tanhf'. * lib/math.in.h (tanhf): New declaration. * lib/tanhf.c: New file. * m4/tanhf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether tanhf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_TANHF, HAVE_TANHF. * modules/math (Makefile.am): Substitute GNULIB_TANHF, HAVE_TANHF. * modules/tanhf: New file. * tests/test-math-c++.cc: Check the declaration of tanhf. * doc/posix-functions/tanhf.texi: Mention the new module. tanh: Use a .m4 file. * m4/tanh.m4: New file. * modules/tanh (Files): Add it. (configure.ac): Just invoke gl_FUNC_TANH. 2011-10-08 Bruno Haible Tests for module 'coshf'. * modules/coshf-tests: New file. * tests/test-coshf.c: New file. New module 'coshf'. * lib/math.in.h (coshf): New declaration. * lib/coshf.c: New file. * m4/coshf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether coshf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_COSHF, HAVE_COSHF. * modules/math (Makefile.am): Substitute GNULIB_COSHF, HAVE_COSHF. * modules/coshf: New file. * tests/test-math-c++.cc: Check the declaration of coshf. * doc/posix-functions/coshf.texi: Mention the new module. cosh: Use a .m4 file. * m4/cosh.m4: New file. * modules/cosh (Files): Add it. (configure.ac): Just invoke gl_FUNC_COSH. 2011-10-08 Bruno Haible Tests for module 'sinhf'. * modules/sinhf-tests: New file. * tests/test-sinhf.c: New file. New module 'sinhf'. * lib/math.in.h (sinhf): New declaration. * lib/sinhf.c: New file. * m4/sinhf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether sinhf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_SINHF, HAVE_SINHF. * modules/math (Makefile.am): Substitute GNULIB_SINHF, HAVE_SINHF. * modules/sinhf: New file. * tests/test-math-c++.cc: Check the declaration of sinhf. * doc/posix-functions/sinhf.texi: Mention the new module. sinh: Use a .m4 file. * m4/sinh.m4: New file. * modules/sinh (Files): Add it. (configure.ac): Just invoke gl_FUNC_SINH. 2011-10-08 Bruno Haible Tests for module 'atan2f'. * modules/atan2f-tests: New file. * tests/test-atan2f.c: New file. New module 'atan2f'. * lib/math.in.h (atan2f): New declaration. * lib/atan2f.c: New file. * m4/atan2f.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether atan2f is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ATAN2F, HAVE_ATAN2F. * modules/math (Makefile.am): Substitute GNULIB_ATAN2F, HAVE_ATAN2F. * modules/atan2f: New file. * tests/test-math-c++.cc: Check the declaration of atan2f. * doc/posix-functions/atan2f.texi: Mention the new module. atan2: Use a .m4 file. * m4/atan2.m4: New file. * modules/atan2 (Files): Add it. (configure.ac): Just invoke gl_FUNC_ATAN2. 2011-10-08 Bruno Haible Tests for module 'atanf'. * modules/atanf-tests: New file. * tests/test-atanf.c: New file. New module 'atanf'. * lib/math.in.h (atanf): New declaration. * lib/atanf.c: New file. * m4/atanf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether atanf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ATANF, HAVE_ATANF. * modules/math (Makefile.am): Substitute GNULIB_ATANF, HAVE_ATANF. * modules/atanf: New file. * tests/test-math-c++.cc: Check the declaration of atanf. * doc/posix-functions/atanf.texi: Mention the new module. atan: Use a .m4 file. * m4/atan.m4: New file. * modules/atan (Files): Add it. (configure.ac): Just invoke gl_FUNC_ATAN. 2011-10-08 Bruno Haible Tests for module 'acosf'. * modules/acosf-tests: New file. * tests/test-acosf.c: New file. New module 'acosf'. * lib/math.in.h (acosf): New declaration. * lib/acosf.c: New file. * m4/acosf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether acosf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ACOSF, HAVE_ACOSF. * modules/math (Makefile.am): Substitute GNULIB_ACOSF, HAVE_ACOSF. * modules/acosf: New file. * tests/test-math-c++.cc: Check the declaration of acosf. * doc/posix-functions/acosf.texi: Mention the new module. acos: Use a .m4 file. * m4/acos.m4: New file. * modules/acos (Files): Add it. (configure.ac): Just invoke gl_FUNC_ACOS. 2011-10-08 Bruno Haible Tests for module 'asinf'. * modules/asinf-tests: New file. * tests/test-asinf.c: New file. New module 'asinf'. * lib/math.in.h (asinf): New declaration. * lib/asinf.c: New file. * m4/asinf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether asinf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_ASINF, HAVE_ASINF. * modules/math (Makefile.am): Substitute GNULIB_ASINF, HAVE_ASINF. * modules/asinf: New file. * tests/test-math-c++.cc: Check the declaration of asinf. * doc/posix-functions/asinf.texi: Mention the new module. asin: Use a .m4 file. * m4/asin.m4: New file. * modules/asin (Files): Add it. (configure.ac): Just invoke gl_FUNC_ASIN. 2011-10-08 Bruno Haible Tests for module 'tanf'. * modules/tanf-tests: New file. * tests/test-tanf.c: New file. New module 'tanf'. * lib/math.in.h (tanf): New declaration. * lib/tanf.c: New file. * m4/tanf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether tanf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_TANF, HAVE_TANF. * modules/math (Makefile.am): Substitute GNULIB_TANF, HAVE_TANF. * modules/tanf: New file. * tests/test-math-c++.cc: Check the declaration of tanf. * doc/posix-functions/tanf.texi: Mention the new module. tan: Use a .m4 file. * m4/tan.m4: New file. * modules/tan (Files): Add it. (configure.ac): Just invoke gl_FUNC_TAN. 2011-10-08 Bruno Haible Tests for module 'cosf'. * modules/cosf-tests: New file. * tests/test-cosf.c: New file. New module 'cosf'. * lib/math.in.h (cosf): New declaration. * lib/cosf.c: New file. * m4/cosf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether cosf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_COSF, HAVE_COSF. * modules/math (Makefile.am): Substitute GNULIB_COSF, HAVE_COSF. * modules/cosf: New file. * tests/test-math-c++.cc: Check the declaration of cosf. * doc/posix-functions/cosf.texi: Mention the new module. cos: Use a .m4 file. * m4/cos.m4: New file. * modules/cos (Files): Add it. (configure.ac): Just invoke gl_FUNC_COS. 2011-10-08 Bruno Haible Tests for module 'sinf'. * modules/sinf-tests: New file. * tests/test-sinf.c: New file. New module 'sinf'. * lib/math.in.h (sinf): New declaration. * lib/sinf.c: New file. * m4/sinf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether sinf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_SINF, HAVE_SINF. * modules/math (Makefile.am): Substitute GNULIB_SINF, HAVE_SINF. * modules/sinf: New file. * tests/test-math-c++.cc: Check the declaration of sinf. * doc/posix-functions/sinf.texi: Mention the new module. sin: Use a .m4 file. * m4/sin.m4: New file. * modules/sin (Files): Add it. (configure.ac): Just invoke gl_FUNC_SIN. 2011-10-08 Bruno Haible Tests for module 'powf'. * modules/powf-tests: New file. * tests/test-powf.c: New file. New module 'powf'. * lib/math.in.h (powf): New declaration. * lib/powf.c: New file. * m4/powf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether powf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_POWF, HAVE_POWF. * modules/math (Makefile.am): Substitute GNULIB_POWF, HAVE_POWF. * modules/powf: New file. * tests/test-math-c++.cc: Check the declaration of powf. * doc/posix-functions/powf.texi: Mention the new module. pow: Use a .m4 file. * m4/pow.m4: New file. * modules/pow (Files): Add it. (configure.ac): Just invoke gl_FUNC_POW. 2011-10-08 Bruno Haible Tests for module 'log10f'. * modules/log10f-tests: New file. * tests/test-log10f.c: New file. New module 'log10f'. * lib/math.in.h (log10f): New declaration. * lib/log10f.c: New file. * m4/log10f.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether log10f is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOG10F, HAVE_LOG10F. * modules/math (Makefile.am): Substitute GNULIB_LOG10F, HAVE_LOG10F. * modules/log10f: New file. * tests/test-math-c++.cc: Check the declaration of log10f. * doc/posix-functions/log10f.texi: Mention the new module. log10: Use a .m4 file. * m4/log10.m4: New file. * modules/log10 (Files): Add it. (configure.ac): Just invoke gl_FUNC_LOG10. 2011-10-08 Bruno Haible Tests for module 'logf'. * modules/logf-tests: New file. * tests/test-logf.c: New file. New module 'logf'. * lib/math.in.h (logf): New declaration. * lib/logf.c: New file. * m4/logf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether logf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOGF, HAVE_LOGF. * modules/math (Makefile.am): Substitute GNULIB_LOGF, HAVE_LOGF. * modules/logf: New file. * tests/test-math-c++.cc: Check the declaration of logf. * doc/posix-functions/logf.texi: Mention the new module. log: Use a .m4 file. * m4/log.m4: New file. * modules/log (Files): Add it. (configure.ac): Just invoke gl_FUNC_LOG. 2011-10-08 Bruno Haible Tests for module 'expf'. * modules/expf-tests: New file. * tests/test-expf.c: New file. New module 'expf'. * lib/math.in.h (expf): New declaration. * lib/expf.c: New file. * m4/expf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether expf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_EXPF, HAVE_EXPF. * modules/math (Makefile.am): Substitute GNULIB_EXPF, HAVE_EXPF. * modules/expf: New file. * tests/test-math-c++.cc: Check the declaration of expf. * doc/posix-functions/expf.texi: Mention the new module. exp: Use a .m4 file. * m4/exp.m4: New file. * modules/exp (Files): Add it. (configure.ac): Just invoke gl_FUNC_EXP. 2011-10-08 Bruno Haible Tests for module 'sqrtf'. * modules/sqrtf-tests: New file. * tests/test-sqrtf.c: New file. New module 'sqrtf'. * lib/math.in.h (sqrtf): New declaration. * lib/sqrtf.c: New file. * m4/sqrtf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether sqrtf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_SQRTF, HAVE_SQRTF. * modules/math (Makefile.am): Substitute GNULIB_SQRTF, HAVE_SQRTF. * modules/sqrtf: New file. * tests/test-math-c++.cc: Check the declaration of sqrtf. * doc/posix-functions/sqrtf.texi: Mention the new module. 2011-10-08 Bruno Haible Tests: Avoid link failures w.r.t. libintl. * modules/faccessat-tests (Makefile.am): Link test-faccessat against $(LIBINTL). * modules/fchdir-tests (Makefile.am): Link test-fchdir against $(LIBINTL). * modules/getcwd-lgpl-tests (Makefile.am): Link test-getcwd-lgpl against $(LIBINTL). * modules/getcwd-tests (Makefile.am): Link test-getcwd against $(LIBINTL). * modules/openat-tests (Makefile.am): Link test-fchmodat against $(LIBINTL). * modules/stat-tests (Makefile.am): Link test-stat against $(LIBINTL). 2011-10-08 Bruno Haible pow tests: Defeat compiler optimizations. * tests/test-pow.c (main): Assign arguments to x and y before use. 2011-10-08 Bruno Haible gnulib-tool: Improve last commit. * gnulib-tool (func_modules_transitive_closure): Simplify code. (func_emit_autoconf_snippets): Instead of invoking func_acceptable, ignore dependencies that are not among the modules list. 2011-10-07 Paul Eggert gnulib-tool: don't follow dependencies to avoided modules This fixes a bug that is related to the previous one. * gnulib-tool (func_modules_transitive_closure) (func_emit_autoconf_snippets): Check whether a dependency is acceptable before using it. (--extract-dependencies): Report an error if --avoid is also used, since this combination of options is not yet supported. gnulib-tool: fix typo that broke Emacs on powerpc-apple-darwin9.8.0. Problem reported by Peter Dyballa in . * gnulib-tool (func_emit_autoconf_snippets): Quote with "", not '', when echoing "$condition". 2011-10-07 Bruno Haible Fix documentation about math functions on MacOS X. * doc/posix-functions/exp2.texi: Don't say the function is missing on MacOS X 10.5. * doc/posix-functions/fdim.texi: Likewise. * doc/posix-functions/feclearexcept.texi: Likewise. * doc/posix-functions/fegetenv.texi: Likewise. * doc/posix-functions/fegetround.texi: Likewise. * doc/posix-functions/feholdexcept.texi: Likewise. * doc/posix-functions/feraiseexcept.texi: Likewise. * doc/posix-functions/fesetenv.texi: Likewise. * doc/posix-functions/fesetround.texi: Likewise. * doc/posix-functions/fetestexcept.texi: Likewise. * doc/posix-functions/feupdateenv.texi: Likewise. * doc/posix-functions/fmax.texi: Likewise. * doc/posix-functions/fmin.texi: Likewise. * doc/posix-functions/log2.texi: Likewise. * doc/posix-functions/modff.texi: Likewise. * doc/posix-functions/nan.texi: Likewise. * doc/posix-functions/nanf.texi: Likewise. * doc/posix-functions/nextafterf.texi: Likewise. * doc/posix-functions/remquo.texi: Likewise. 2011-10-07 Bruno Haible modff: Drop assumption about library that defines modff. * m4/modff.m4 (gl_FUNC_MODFF): Use gl_MATHFUNC macro instead of AC_CHECK_FUNCS. * modules/modff (Files): Add m4/mathfunc.m4. 2011-10-07 Bernhard Voelker raise tests: Avoid a GCC warning. * tests/test-raise.c (handler): Use _Noreturn. 2011-10-07 Bruno Haible Tests for module 'ldexpf'. * modules/ldexpf-tests: New file. * tests/test-ldexpf.c: New file. New module 'ldexpf'. * lib/math.in.h (ldexpf): New declaration. * lib/ldexpf.c: New file. * m4/ldexpf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether ldexpf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LDEXPF, HAVE_LDEXPF. * modules/math (Makefile.am): Substitute GNULIB_LDEXPF, HAVE_LDEXPF. * modules/ldexpf: New file. * tests/test-math-c++.cc: Check the declaration of ldexpf. * doc/posix-functions/ldexpf.texi: Mention the new module. 2011-10-06 Bruno Haible frexpf: Work around problems on IRIX and mingw. * lib/math.in.h (frexpf): Consider also REPLACE_FREXPF. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_FREXPF. * m4/frexpf.m4 (gl_FUNC_FREXPF_WORKS): New macro. (gl_FUNC_FREXPF): Invoke it. Set REPLACE_FREXPF. * modules/frexpf (Depends-on, configure.ac): Consider REPLACE_FREXPF. * modules/math (Makefile.am): Substitute REPLACE_FREXPF. * doc/posix-functions/frexpf.texi: Mention the IRIX and mingw problems. 2011-10-06 Bruno Haible fabsf: Drop assumption about library that defines fabsf. * m4/fabsf.m4 (gl_FUNC_FABSF): Use gl_MATHFUNC macro instead of AC_CHECK_FUNCS. * modules/fabsf (Files): Add m4/mathfunc.m4. 2011-10-06 Bruno Haible frexpf: Drop assumption about library that defines frexpf. * m4/mathfunc.m4 (gl_MATHFUNC): Support also the argument types 'int *', 'float *', 'long double *', 'float', 'long double'. * m4/frexpf.m4 (gl_FUNC_FREXPF): Use gl_MATHFUNC macro instead of AC_CHECK_FUNCS. * modules/frexpf (Files): Add m4/mathfunc.m4. Tests for module 'frexpf'. * modules/frexpf-tests: New file. * tests/test-frexpf.c: New file. New module 'frexpf'. * lib/math.in.h (frexpf): New declaration. * lib/frexpf.c: New file. * m4/frexpf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether frexpf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FREXPF, HAVE_FREXPF. * modules/math (Makefile.am): Substitute GNULIB_FREXPF, HAVE_FREXPF. * modules/frexpf: New file. * tests/test-math-c++.cc: Check the declaration of frexpf. * doc/posix-functions/frexpf.texi: Mention the new module. 2011-10-06 Bruno Haible math: Sort function declarations of math.in.h. * lib/math.in.h (frexp, logb): Move declarations. 2011-10-05 Bruno Haible Tests for module 'modff'. * modules/modff-tests: New file. * tests/test-modff.c: New file. New module 'modff'. * lib/math.in.h (modff): New declaration. * lib/modff.c: New file. * m4/modff.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether modff is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_MODFF, HAVE_MODFF. * modules/math (Makefile.am): Substitute GNULIB_MODFF, HAVE_MODFF. * modules/modff: New file. * tests/test-math-c++.cc: Check the declaration of modff. * doc/posix-functions/modff.texi: Mention the new module. modf tests: Make test sharper. * tests/test-modf.c (main): Strengthen upper bound. modf: Use a .m4 file. * m4/modf.m4: New file. * modules/modf (Files): Add it. (configure.ac): Just invoke gl_FUNC_MODF. 2011-10-05 Bruno Haible Tests for module 'fmodf'. * modules/fmodf-tests: New file. * tests/test-fmodf.c: New file. New module 'fmodf'. * lib/math.in.h (fmodf): New declaration. * lib/fmodf.c: New file. * m4/fmodf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether fmodf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FMODF, HAVE_FMODF. * modules/math (Makefile.am): Substitute GNULIB_FMODF, HAVE_FMODF. * modules/fmodf: New file. * tests/test-math-c++.cc: Check the declaration of fmodf. * doc/posix-functions/fmodf.texi: Mention the new module. fmod: Use a .m4 file. * m4/fmod.m4: New file. * modules/fmod (Files): Add it. (configure.ac): Just invoke gl_FUNC_FMOD. 2011-10-05 Bruno Haible Tests for module 'fabsf'. * modules/fabsf-tests: New file. * tests/test-fabsf.c: New file. New module 'fabsf'. * lib/math.in.h (fabsf): New declaration. * lib/fabsf.c: New file. * m4/fabsf.m4: New file. * m4/math_h.m4 (gl_MATH_H): Test whether fabsf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_FABSF, HAVE_FABSF. * modules/math (Makefile.am): Substitute GNULIB_FABSF, HAVE_FABSF. * modules/fabsf: New file. * tests/test-math-c++.cc: Check the declaration of fabsf. * doc/posix-functions/fabsf.texi: Mention the new module. fabs: Use a .m4 file. * m4/fabs.m4: New file. * modules/fabs (Files): Add it. (configure.ac): Just invoke gl_FUNC_FABS. 2011-10-05 Jim Meyering file-has-acl: revert both recent changes, 80af92af and 95f7c57f * lib/file-has-acl.c: While the 2011-10-03 change does fix the ls -lL regression introduced in coreutils-8.12, it does so at the cost of an additional stat call in the common case. Besides, now that the kernel change that prompted commit 95f7c57f has been reverted (see https://bugzilla.redhat.com/show_bug.cgi?id=720325#c24) we have no use for commit 95f7c57f, "file-has-acl: use acl_extended_file_nofollow if available". 2011-10-03 Kamil Dudka file-has-acl: revert unintended change in behavior of ls -L * lib/file-has-acl.c (acl_extended_file_wrap): New function, derived from... (file_has_acl): ...code here. Call it. This problem was introduced with 2011-07-22 commit 95f7c57f, "file-has-acl: use acl_extended_file_nofollow if available". See http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/28538 2011-10-03 Bruno Haible poll: Avoid link errors on MSVC. * m4/poll.m4 (gl_FUNC_POLL): Determine LIB_POLL. * modules/poll (Depends-on): Add sockets. (Link): New section. * NEWS: Mention the change. * modules/poll-tests (Makefile.am): Link test-poll against $(LIB_POLL). * modules/poll-h-c++-tests (Makefile.am): Link test-poll-h-c++ against $(LIB_POLL) instead of $(LIBSOCKET). 2011-10-03 Bruno Haible sys_select tests: Fix link error on MSVC 9. * modules/sys_select-c++-tests (Makefile.am): Link test-sys_select-c++ with $(LIB_SELECT) instead of $(LIBSOCKET). 2011-10-03 Bruno Haible sys_select: Fix compilation error on mingw. * lib/sys_select.in.h: On native Windows, include . 2011-10-03 Bruno Haible wmemset: Support for MSVC. * m4/wmemset.m4 (gl_FUNC_WMEMSET): Use a small test program to test whether wmemset() exists. 2011-10-03 Bruno Haible wmemmove: Support for MSVC. * m4/wmemmove.m4 (gl_FUNC_WMEMMOVE): Use a small test program to test whether wmemmove() exists. 2011-10-03 Bruno Haible wmemcpy: Support for MSVC. * m4/wmemcpy.m4 (gl_FUNC_WMEMCPY): Use a small test program to test whether wmemcpy() exists. 2011-10-03 Bruno Haible wmemcmp: Support for MSVC. * m4/wmemcmp.m4 (gl_FUNC_WMEMCMP): Use a small test program to test whether wmemcmp() exists. 2011-10-03 Bruno Haible wmemchr: Support for MSVC. * m4/wmemchr.m4 (gl_FUNC_WMEMCHR): Use a small test program to test whether wmemchr() exists. 2011-10-03 Bruno Haible glthread/*, strsignal: Support for MSVC. * lib/glthread/cond.h: Define WIN32_LEAN_AND_MEAN, so as to avoid including on MSVC 9. * lib/glthread/lock.h: Likewise. * lib/glthread/thread.h: Likewise. * lib/glthread/tls.h: Likewise. * lib/glthread/yield.h: Likewise. * lib/strsignal.c: Include first. Don't include if HAVE_UNISTD_H is false. * m4/strsignal.m4 (gl_PREREQ_STRSIGNAL): Test for . 2011-10-03 Bruno Haible nonblocking tests: Fix test failure on OpenBSD/SPARC64. * tests/test-nonblocking-socket.h (SOCKET_DATA_BLOCK_SIZE) [OpenBSD]: Set to 100000. 2011-10-03 Bruno Haible acl: Fix specification. * lib/file-has-acl.c (file_has_acl): Fix specification. 2011-10-03 Bruno Haible relocatable-lib[-lgpl]: Avoid expensive /proc access on Linux, Cygwin. * lib/relocatable.c (ENABLE_COSTLY_RELOCATABLE): New macro. (compute_curr_prefix, shared_library_fullname, find_shared_library_fullname, get_shared_library_fullname, relocate): Use it together with PIC && INSTALLDIR. Reported by via Charles Wilson . 2011-10-01 Jim Meyering maint.mk: adjust a release-related rule not to require use of gzip * top/maint.mk (writable-files): Don't hard-code use of .tar.gz. Instead, check each file in $(DIST_ARCHIVES). This is better for projects that build only .tar.xz files. Also fix an erroneous test. test-linkat: don't leave behind a temporary file * tests/test-linkat.c (main): Don't forget to remove a temporary file. Otherwise, coreutils' "make distcheck" would fail with this: Only in /c/cu/tests/torture/coreutils/test/\ coreutils-8.13.22-d5caf.old/gnulib-tests: test-linkat.too make[2]: *** [my-distcheck] Error 1 float, math: add omitted file * lib/itold.c: Add file, required for yesterday's float change. 2011-10-01 Bruno Haible isinf: Fix for OpenBSD/x86. * m4/isinf.m4 (gl_ISINFL_WORKS): Also test the behaviour of isinf on pseudo-NaNs, pseudo-Infinities, and other non-IEEE values. * doc/posix-functions/isinf.texi: Mention the problem on OpenBSD/x86. 2011-10-01 Bruno Haible isfinite: Fix syntax error in configure test. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Fix syntax error. isfinite: Fix typo. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): When cross-compiling, set gl_cv_func_isfinitel_works, not gl_cv_func_isnanl_works. 2011-10-01 Bruno Haible nonblocking tests: Fix test failure on Linux/IA-64. * tests/test-nonblocking-pipe.h (PIPE_DATA_BLOCK_SIZE) [Linux/IA-64]: Set to 270000. 2011-10-01 Bruno Haible mkfifoat tests: Fix a test failure on mingw. * tests/test-mkfifoat.c (main): Allow mkfifoat or test_mknodat to fail with error ENOSYS. 2011-09-30 Bruno Haible float, math: Fix 'int' to 'long double' conversion on Linux/SPARC64. * m4/float_h.m4 (gl_FLOAT_H): Test conversion from 'int' to 'long double'. Set REPLACE_ITOLD. * lib/float.in.h (_Qp_itoq, _gl_float_fix_itold): New declarations. * lib/math.in.h (_Qp_itoq, _gl_math_fix_itold): New declarations. * lib/itold.c: New file. * modules/float (Files): Add lib/itold.c. (configure.ac): When REPLACE_ITOLD is 1, arrange to compile itold.c. (Makefile.am): Substitute REPLACE_ITOLD. * modules/math (Depends-on): Add float. (Makefile.am): Substitute REPLACE_ITOLD. * doc/posix-headers/float.texi: Mention problem on Linux/SPARC64. * doc/posix-headers/math.texi: Likewise. * doc/posix-functions/logl.texi: Likewise. 2011-09-30 Bruno Haible nonblocking tests: Fix test failure on Linux/SPARC (32-bit and 64-bit). * tests/test-nonblocking-pipe.h (PIPE_DATA_BLOCK_SIZE) [Linux/SPARC]: Set to 140000. 2011-09-30 Bruno Haible gnulib-tool: Improve suggestion where to put gl_EARLY invocation. * gnulib-tool (func_import): If the configure.ac has an AC_PROG_CC_STDC invocation, say "right after AC_PROG_CC_STDC", not "right after AC_PROG_CC". Reported by Gary V. Vaughan . 2011-09-30 Bruno Haible Centralize C99 requirement. * m4/gnulib-common.m4 (gl_PROG_CC_C99): New macro. * modules/stdarg (configure.ac-early): Invoke it instead of AC_PROG_CC_STDC. Reported by Gary V. Vaughan and Paul Eggert. 2011-09-29 Bruno Haible float: Fix LDBL_MAX value on Linux/PowerPC. * m4/float_h.m4 (gl_FLOAT_H): Set FLOAT_H and REPLACE_FLOAT_LDBL also on Linux/PowerPC. * lib/float.in.h (LDBL_MAX): Redefine also on Linux/PowerPC. * lib/float.c (gl_LDBL_MAX): Also define on Linux/PowerPC. * doc/posix-headers/float.texi: Mention Linux/PowerPC as an affected platform. Reported by Andreas Metzler . 2011-09-29 Bruno Haible doc: Improve doc about gl_EARLY. * doc/gnulib-tool.texi (Initial import): Mention where to place an AC_PROG_CC_STDC invocation. Reported by Gary V. Vaughan . 2011-09-28 Bruno Haible fgetc, fputc, fread, fwrite tests: Fix link error. * tests/test-fgetc.c (main): Don't invoke gl_msvc_inval_ensure_handler on non-MSVC platforms. * tests/test-fputc.c (main): Likewise. * tests/test-fread.c (main): Likewise. * tests/test-fwrite.c (main): Likewise. Reported by Jim Meyering. 2011-09-27 Bruno Haible fputc, fwrite tests: Avoid test failure on MSVC. * tests/test-fgetc.c: Include msvc-inval.h. (main): Invoke gl_msvc_inval_ensure_handler. * tests/test-fputc.c: Include msvc-inval.h. (main): Invoke gl_msvc_inval_ensure_handler. * tests/test-fread.c: Include msvc-inval.h. (main): Invoke gl_msvc_inval_ensure_handler. * tests/test-fwrite.c: Include msvc-inval.h. (main): Invoke gl_msvc_inval_ensure_handler. * modules/fgetc-tests (Depends-on): Add msvc-inval. * modules/fputc-tests (Depends-on): Likewise. * modules/fread-tests (Depends-on): Likewise. * modules/fwrite-tests (Depends-on): Likewise. 2011-09-27 Bruno Haible raise: Fix double declaration with modules 'sigprocmask' and 'sigpipe'. * lib/signal.in.h (GNULIB_defined_signal_blocking): New macro. (raise): Remove older, duplicated declaration. (_gl_raise_SIGPIPE): New declaration. * lib/sigprocmask.c (_gl_raise_SIGPIPE): New function. (rpl_raise): Remove function. * lib/raise.c (rpl_raise, raise): Merge into a single function. Handle a gnulib-defined SIGPIPE here. * m4/raise.m4 (gl_FUNC_RAISE): Set REPLACE_RAISE also if the module 'sigprocmask' has detected missing signal-blocking and the module 'sigpipe' is enabled. Reported by Tatsuro MATSUOKA . 2011-09-26 Gijs van Tulder base64-tests: avoid memory leak * tests/test-base64.c (main): Plug memory leak. base32: new module * modules/base32: New module. * lib/base32.c: New file. * lib/base32.h: Likewise. * m4/base32.m4: Likewise. * modules/base32-tests: New test. * tests/test-base32.c: Likewise. * MODULES.html.sh (Misc): Mention it. 2011-09-26 Paul Eggert gnulib: use more-standard license notice wording * gnulib-tool (func_emit_copyright_notice): When emitting a license notice into a file, use the standard wording as suggested by the current information for GNU maintainers, except say "file" rather than "program". The new wording gives a license version number, which addresses an issue raised by Glenn Morris in . * m4/onceonly.m4: Use that same wording here, too. dup2: minor simplification * m4/dup2.m4 (gl_PREREQ_DUP2): Don't require AC_C_INLINE, as lib/dup2.c no longer uses 'inline'. 2011-09-25 Bruno Haible strings: Fix compilation error on MSVC. * lib/strings.in.h: Include for size_t. 2011-09-25 Bruno Haible fflush et al.: Document limitation on MSVC. * doc/posix-functions/fflush.texi: Document possible crash in handling mode other than DEFAULT_HANDLING. * doc/posix-functions/fgetc.texi: Likewise. * doc/posix-functions/fputc.texi: Likewise. * doc/posix-functions/fread.texi: Likewise. * doc/posix-functions/fwrite.texi: Likewise. 2011-09-25 Bruno Haible msvc-inval: Allow three invalid parameter handling modes. * lib/msvc-inval.h: Don't include here. (DEFAULT_HANDLING, HAIRY_LIBRARY_HANDLING, SANE_LIBRARY_HANDLING): New macros. (gl_msvc_inval_ensure_handler, TRY_MSVC_INVAL, CATCH_MSVC_INVAL, DONE_MSVC_INVAL): Implement DEFAULT_HANDLING. Treat SANE_LIBRARY_HANDLING as a no-op. * lib/msvc-inval.c: Treat SANE_LIBRARY_HANDLING as a no-op. Include . (gl_msvc_invalid_parameter_handler): Implement DEFAULT_HANDLING. 2011-09-25 Bruno Haible msvc-inval: Make handler multithread-safe. * lib/msvc-inval.h (struct gl_msvc_inval_per_thread): New type. (gl_msvc_inval_restart, gl_msvc_inval_restart_valid): Remove declarations. (gl_msvc_inval_current): New declaration. (TRY_MSVC_INVAL, CATCH_MSVC_INVAL, DONE_MSVC_INVAL) [!_MSC_VER]: Operate on the structure returned by gl_msvc_inval_current(). * lib/msvc-inval.c (gl_msvc_inval_restart, gl_msvc_inval_restart_valid): Remove varaiables. (tls_index, tls_initialized): New variables. (not_per_thread): New variable. (gl_msvc_inval_current): New function. (gl_msvc_invalid_parameter_handler) [!_MSC_VER]: Use the structure returned by gl_msvc_inval_current(). 2011-09-25 Bruno Haible msvc-inval: Install handler globally. * lib/msvc-inval.h (STATUS_GNULIB_INVALID_PARAMETER): Define also for !_MSC_VER. (gl_msvc_invalid_parameter_handler): Remove declaration. (gl_msvc_inval_restart_valid, gl_msvc_inval_ensure_handler): New declarations. (TRY_MSVC_INVAL, CATCH_MSVC_INVAL, DONE_MSVC_INVAL) [!_MSC_VER]: Install the handler globally, don't uninstall it. * lib/msvc-inval.c (gl_msvc_inval_restart_valid): New variable. (gl_msvc_invalid_parameter_handler): Make static. If the restart is not currently valid, call RaiseException instead. (gl_msvc_inval_initialized, gl_msvc_inval_ensure_handler): Define also for !_MSC_VER. 2011-09-25 Bruno Haible strerror_r-posix: Fix for MSVC 9. * lib/strerror_r.c (local_snprintf): New function. (snprintf): Define to local_snprintf, not to _snprintf. 2011-09-25 Bruno Haible ftruncate: Support for MSVC 9. * lib/ftruncate.c: Include errno.h, msvc-inval.h. (chsize_nothrow): New function. (chsize): Redefine as a macro. * m4/ftruncate.m4 (gl_PREREQ_FTRUNCATE): Require AC_C_INLINE. * modules/ftruncate (Depends-on): Add msvc-inval. 2011-09-25 Bruno Haible New module 'fstat'. * lib/sys_stat.in.h (fstat): Declare only if GNULIB_FSTAT is set. * lib/fstat.c: New file, based on a piece of lib/fchdir.c. * lib/fchdir.c (rpl_fstat): Remove function. * m4/fstat.m4: New file. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't set REPLACE_FSTAT. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Test whether fstat is declared. (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_FSTAT. * modules/sys_stat (Makefile.am): Substitute GNULIB_FSTAT. * modules/fstat: New file. * modules/sys_stat-tests (Depends-on): Remove fstat-tests. * tests/test-sys_stat-c++.cc (fstat): Check only if GNULIB_TEST_FSTAT is set. * doc/posix-functions/fstat.texi: Mention the new module and the problem on MSVC. * NEWS: Mention the change. * modules/acl (Depends-on): Add fstat. * modules/chdir-safer (Depends-on): Likewise. * modules/chown (Depends-on): Likewise. * modules/copy-file (Depends-on): Likewise. * modules/fchdir (Depends-on): Likewise. * modules/fdopendir (Depends-on): Likewise. * modules/fopen (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/getcwd (Depends-on): Likewise. * modules/isapipe (Depends-on): Likewise. * modules/linkat (Depends-on): Likewise. * modules/lseek (Depends-on): Likewise. * modules/mkdir-p (Depends-on): Likewise. * modules/open (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/read-file (Depends-on): Likewise. * modules/renameat (Depends-on): Likewise. * modules/utimens (Depends-on): Likewise. 2011-09-25 Bruno Haible linkat: Fix compilation on MSVC 9. * lib/linkat.c: Don't include . 2011-09-25 Bruno Haible fclose: Support for MSVC 9. * lib/fclose.c: Include msvc-inval.h. (fclose_nothrow): New function. (rpl_fclose): Use it. * modules/fclose (Depends-on): Add msvc-inval. * doc/posix-functions/fclose.texi: Mention the problem on MSVC. 2011-09-24 Paul Eggert dup2: minor simplifications * lib/dup2.c (ms_windows_dup2): Omit 'inline' as it's not clear that it's a performance win. (rpl_dup2): Change "if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)" to "ifdef F_GETFL". 2011-09-24 Jim Meyering test-futimens: avoid a warning from gcc -Wshadow * tests/test-futimens.h (test_futimens): Rename inner local, s/fd/fd0/ to avoid a shadowing warning. 2011-09-24 Bruno Haible fdopen: Support for MSVC 9. * m4/fdopen.m4 (gl_FUNC_FDOPEN): Set REPLACE_FDOPEN also if HAVE_MSVC_INVALID_PARAMETER_HANDLER is 1. * lib/fdopen.c: Include msvc-inval.h. (fdopen_nothrow): New function. (rpl_fdopen): Use it. * modules/fdopen (Depends-on): Add msvc-inval. * modules/fclose-tests (Depends-on): Add fdopen. * modules/fflush-tests (Depends-on): Likewise. * modules/fgetc-tests (Depends-on): Likewise. * modules/fputc-tests (Depends-on): Likewise. * modules/fread-tests (Depends-on): Likewise. * modules/freopen-tests (Depends-on): Likewise. * modules/fseeko-tests (Depends-on): Likewise. * modules/ftello-tests (Depends-on): Likewise. * modules/fwrite-tests (Depends-on): Likewise. * doc/posix-functions/fdopen.texi: Mention the problem on MSVC. 2011-09-24 Bruno Haible fgetc, fputc, fread, fwrite tests: Avoid compilation error on MSVC. * modules/fgetc-tests (Depends-on): Add unistd. * modules/fputc-tests (Depends-on): Likewise. * modules/fread-tests (Depends-on): Likewise. * modules/fwrite-tests (Depends-on): Likewise. 2011-09-24 Bruno Haible dup: Simplify autoconf test. * m4/dup.m4 (gl_FUNC_DUP): Don't run a test program. Instead, just rely on gl_MSVC_INVAL's result. 2011-09-24 Bruno Haible Tests for function fwrite(). * modules/fwrite-tests: New file. * tests/test-fwrite.c: New file. * modules/stdio-tests (Depends-on): Add fwrite-tests. Tests for function fread(). * modules/fread-tests: New file. * tests/test-fread.c: New file. * modules/stdio-tests (Depends-on): Add fread-tests. Activate fputc tests. * modules/stdio-tests (Depends-on): Add fputc-tests. Enhance fgetc, fputc tests. * tests/test-fgetc.c (main): Also test the stream's error indicator. * tests/test-fputc.c (main): Likewise. 2011-09-24 Bruno Haible write: Support for MSVC 9. * lib/unistd.in.h (write): Replace also when GNULIB_UNISTD_H_NONBLOCKING is not 1. * lib/write.c (write_nothrow): New function. (rpl_write): Define also when GNULIB_NONBLOCKING or GNULIB_SIGPIPE is not 1. Use write_nothrow. * m4/write.m4 (gl_FUNC_WRITE): Replace read if the platform has an invalid parameter handler. (gl_PREREQ_WRITE): New macro. * modules/write (Depends-on): Add msvc-inval. (configure.ac): Invoke gl_PREREQ_WRITE. * doc/posix-functions/write.texi: Mention the problem on MSVC. 2011-09-24 Bruno Haible read: Fix last commit. * lib/read.c (read_nothrow): Change return type to 'ssize_t'. 2011-09-24 Bruno Haible dup2: Fix last commit. * lib/dup2.c: Restore comments. Treat Cygwin like Unix. (rpl_dup2): Disable fcntl workaround on native Windows. sigprocmask: Make code safer. * lib/sigprocmask.c: Move '#include "msvc-inval.h"' before the code section that changes macro definitions for this compilation unit. 2011-09-23 Paul Eggert dup2: clarify by coalescing Windows-specific material * lib/dup2.c: Move '#include "msvc-inval.h"' and '#include "msvc-nothrow.h"' to the Windows-specific section, so that the Emacs source need not contain these include files. (ms_windows_dup2): Rename from dup2_nothrow, and move all the Windows-specific fixes into this function rather than just the nothrow fix, as this shortens and clarifies the code. Always define as a function, as that's a bit cleaner than having it be sometimes a function and sometimes a macro. (rpl_dup2): Move the Windows-specific stuff out of here and into ms_windows_dup2. Don't protect the Haiku-related fix with "#if !defined __linux__", as the same code also works around a Linux kernel bug, and it doesn't add any system calls on any platform. Add comment about FreeBSD 6.1. sigprocmask: move #include directive * lib/sigprocmask.c: Move '#include "msvc-inval.h"' to the Windows-specific section, so that the Emacs source need not contain msvc-inval.h. 2011-09-23 Bruno Haible read: Support for MSVC 9. * lib/unistd.in.h (read): Replace also when GNULIB_UNISTD_H_NONBLOCKING is not 1. * lib/read.c (read_nothrow): New function. (rpl_read): Define also when GNULIB_NONBLOCKING is not 1. Use read_nothrow. * m4/read.m4 (gl_FUNC_READ): Replace read if the platform has an invalid parameter handler. (gl_PREREQ_READ): New macro. * modules/read (Depends-on): Add msvc-inval. (configure.ac): Invoke gl_PREREQ_READ. * doc/posix-functions/read.texi: Mention the problem on MSVC. 2011-09-23 Bruno Haible close: Support for MSVC 9. * lib/close.c: Include , msvc-inval.h. (close_nothrow): New function. (rpl_close): Use it. * m4/close.m4 (gl_FUNC_CLOSE): Replace close if the platform has an invalid parameter handler. * modules/close (Depends-on): Add msvc-inval. * modules/dup2-tests (Depends-on): Add close. * modules/dup3-tests (Depends-on): Likewise. * modules/fcntl-tests (Depends-on): Likewise. * modules/spawn-pipe-tests (Depends-on): Likewise. * modules/unistd-safer-tests (Depends-on): Likewise. * doc/posix-functions/close.texi: Mention the problem on MSVC. 2011-09-23 Bruno Haible New module 'dup'. * lib/unistd.in.h (dup): Declare only if the 'dup' module is in use. Allow replacement. * lib/dup.c: New file. * lib/fchdir.c (rpl_dup): Remove function. * m4/dup.m4: New file. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't set REPLACE_DUP here. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether 'dup' is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_DUP. * modules/unistd (Makefile.am): Substitute GNULIB_DUP. * modules/dup: New file. * tests/test-unistd-c++.cc: Check the signature of 'dup' only if the 'dup' module is in use. * modules/fdopendir (Depends-on): Add dup. * modules/fdutimensat-tests (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/futimens-tests (Depends-on): Likewise. * modules/posix_spawnp-tests (Depends-on): Likewise. * modules/unistd-safer-tests (Depends-on): Likewise. * modules/utimens-tests (Depends-on): Likewise. * doc/posix-functions/dup.texi: Mention the new module and the problem on MSVC. 2011-09-23 Bruno Haible getdtablesize: Support for MSVC 9. * lib/getdtablesize.c: Include msvc-inval.h. (_setmaxstdio_nothrow): New function. (_setmaxstdio): Redefine it. * m4/getdtablesize.m4 (gl_PREREQ_GETDTABLESIZE): New macro. * modules/getdtablesize (Depends-on): Add msvc-inval. (configure.ac): Invoke gl_PREREQ_GETDTABLESIZE. 2011-09-23 Bruno Haible signal-h: Rename from signal. * modules/signal-h: Renamed from modules/signal. * modules/pthread_sigmask (Depends-on): Update. * modules/raise (Depends-on): Likewise. * modules/sigaction (Depends-on): Likewise. * modules/sigpipe (Depends-on): Likewise. * modules/sigprocmask (Depends-on): Likewise. * modules/sys_select (Depends-on): Likewise. * modules/signal-h-tests: Renamed from modules/signal-tests. (Files, Depends-on, Makefile.am): Update. * tests/test-signal-h.c: Renamed from tests/test-signal.c. * modules/signal-h-c++-tests: Renamed from modules/signal-c++-tests. (Files, Makefile.am): Update. * tests/test-signal-h-c++.cc: Renamed from tests/test-signal-c++.cc. * tests/test-signal-h-c++2.cc: Renamed from tests/test-signal-c++2.cc. * modules/signal: New placeholder file. * MODULES.html.sh (Support for systems lacking POSIX:2008): Update. * doc/posix-headers/signal.texi: Update. * NEWS: Mention the change. 2011-09-23 Bruno Haible sigprocmask: Avoid crashes through signal() on MSVC 9. * lib/sigprocmask.c: Include msvc-inval.h. (signal_nothrow): New function. (signal): Redefine it. * m4/signalblocking.m4 (gl_PREREQ_SIGPROCMASK): Require AC_C_INLINE. * modules/sigprocmask (Depends-on): Add msvc-inval. * doc/posix-functions/signal.texi: Mention the problem on MSVC. 2011-09-23 Bruno Haible Tests for module 'raise'. * modules/raise-tests: New file. * tests/test-raise.c: New file. raise: Support for MSVC. * lib/signal.in.h (raise): New declaration. * lib/raise.c (raise_nothrow, rpl_raise): New alternate implementation for native Windows platforms. * m4/raise.m4: New file. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Initialize GNULIB_RAISE, HAVE_RAISE, REPLACE_RAISE. * modules/signal (Makefile.am): Substitute GNULIB_RAISE, HAVE_RAISE, REPLACE_RAISE. * modules/raise (Status, Notice): Remove fields. (Files): Add m4/raise.m4. (Depends-on): Add signal, msvc-inval. (configure.ac): Use the common idioms. (Maintainer): Add me. * tests/test-signal-c++.cc: Check the signature of raise. * doc/posix-functions/raise.texi: Mention the problem on MSVC. 2011-09-23 Bruno Haible pipe2: Fix compilation on pre-C99 compilers. * lib/pipe2.c (pipe2): Surround verify(...) declaration with braces. 2011-09-23 Bruno Haible New module 'msvc-nothrow'. Makes _get_osfhandle safe on MSVC 9. * lib/msvc-nothrow.h: New file. * lib/msvc-nothrow.c: New file. * m4/msvc-nothrow.m4: New file. * modules/msvc-nothrow: New file. * lib/dup2.c: Include msvc-nothrow.h. (rpl_dup2): No need to protect _get_osfhandle call here. * lib/accept4.c: Include msvc-nothrow.h. * lib/error.c: Likewise. * lib/fcntl.c: Likewise. * lib/lseek.c: Likewise. * lib/nonblocking.c: Likewise. * lib/poll.c: Likewise. * lib/read.c: Likewise. * lib/select.c: Likewise. * lib/sockets.h: Likewise. * lib/sockets.c: Likewise. * lib/stdio-read.c: Likewise. * lib/stdio-write.c: Likewise. * lib/write.c: Likewise. * lib/w32sock.h: Likewise. * lib/w32spawn.h: Likewise. * lib/flock.c: Include msvc-nothrow.h instead of . * lib/fsync.c: Likewise. * lib/isapipe.c: Likewise. * modules/dup2 (Depends-on): Add msvc-nothrow. * modules/accept4 (Depends-on): Likewise. * modules/error (Depends-on): Likewise. * modules/fcntl (Depends-on): Likewise. * modules/lseek (Depends-on): Likewise. * modules/nonblocking (Depends-on): Likewise. * modules/poll (Depends-on): Likewise. * modules/read (Depends-on): Likewise. * modules/select (Depends-on): Likewise. * modules/sockets (Depends-on): Likewise. * modules/sigpipe (Depends-on): Likewise. * modules/write (Depends-on): Likewise. * modules/accept (Depends-on): Likewise. * modules/bind (Depends-on): Likewise. * modules/connect (Depends-on): Likewise. * modules/gethostname (Depends-on): Likewise. * modules/getpeername (Depends-on): Likewise. * modules/getsockname (Depends-on): Likewise. * modules/getsockopt (Depends-on): Likewise. * modules/ioctl (Depends-on): Likewise. * modules/listen (Depends-on): Likewise. * modules/recv (Depends-on): Likewise. * modules/recvfrom (Depends-on): Likewise. * modules/send (Depends-on): Likewise. * modules/sendto (Depends-on): Likewise. * modules/setsockopt (Depends-on): Likewise. * modules/shutdown (Depends-on): Likewise. * modules/socket (Depends-on): Likewise. * modules/execute (Depends-on): Likewise. * modules/spawn-pipe (Depends-on): Likewise. * modules/flock (Depends-on): Likewise. * modules/fsync (Depends-on): Likewise. * modules/isapipe (Depends-on): Likewise. * tests/test-cloexec.c: Include msvc-nothrow.h. * tests/test-dup-safer.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-dup3.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-pipe.c: Likewise. * tests/test-pipe2.c: Likewise. * modules/cloexec-tests (Depends-on): Add msvc-nothrow. * modules/unistd-safer-tests (Depends-on): Likewise. * modules/dup2-tests (Depends-on): Likewise. * modules/dup3-tests (Depends-on): Likewise. * modules/fcntl-tests (Depends-on): Likewise. * modules/pipe-posix-tests (Depends-on): Likewise. * modules/pipe2-tests (Depends-on): Likewise. 2011-09-23 Bruno Haible dup2: Make code more maintainable. * lib/dup2.c (dup2_nothrow): New function, extracted from rpl_dup2. (rpl_dup2): Use it. * m4/dup2.m4 (gl_PREREQ_DUP2): New macro. * modules/dup2 (configure.ac): Invoke it. Reported by Paul Eggert. 2011-09-23 Bruno Haible msvc-inval: Fix compilation error. * lib/msvc-inval.h: Include . 2011-09-23 Bruno Haible mkdir: Tweak for MSVC 9. * lib/sys_stat.in.h: Update comments. * doc/posix-functions/mkdir.texi: Mention problem on MSVC 9. Tests for module 'chdir'. * modules/chdir-tests: New file. * tests/test-chdir.c: New file. New module 'chdir'. * modules/chdir: New file. * lib/unistd.in.h: Include , also for chdir. (chdir): New declaration. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether chdir is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_CHDIR. * modules/unistd (Makefile.am): Substitute GNULIB_CHDIR. * tests/test-unistd-c++.cc: Check signature of chdir. * doc/posix-functions/chdir.texi: Mention problem on native Windows. * modules/chdir-long (Depends-on): Add chdir. * modules/fchdir (Depends-on): Likewise. * modules/rename (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. rmdir: Support for mingw, MSVC 9. * lib/unistd.in.h: Include and also for rmdir. * doc/posix-functions/getcwd.texi: Mention problem on native Windows. getcwd: Tweak for MSVC 9. * lib/unistd.in.h: Update comments. * doc/posix-functions/getcwd.texi: Mention problem on MSVC 9. 2011-09-22 Bruno Haible strerror_r-posix: Avoid a link error on MSVC. * m4/strerror_r.m4 (gl_PREREQ_STRERROR_R): Check for snprintf. * lib/strerror_r.c (snprintf): Define to _snprintf if it doesn't exist. 2011-09-22 Bruno Haible select: Avoid link errors on MSVC. * m4/select.m4 (gl_FUNC_SELECT): Determine LIB_SELECT. * modules/select (Link): Replace $(LIBSOCKET) with $(LIB_SELECT). * modules/pselect (Link): Likewise. * NEWS: Mention the change. * modules/select-tests (Makefile.am): Link test-select, test-select-fd, test-select-stdin against $(LIB_SELECT). * modules/pselect-tests (Makefile.am): Link test-pselect against $(LIB_SELECT). 2011-09-22 Bruno Haible select: Avoid compilation error on MSVC. * lib/select.c: Don't include . 2011-09-21 Bruno Haible Consolidate all uses of PATH_MAX in *.m4 files. * m4/pathmax.m4 (gl_PATHMAX_SNIPPET, gl_PATHMAX_SNIPPET_PREREQ): New macros. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Use gl_PATHMAX_SNIPPET_PREREQ and gl_PATHMAX_SNIPPET. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * modules/chdir-long (Files): Add m4/pathmax.m4. * modules/getcwd (Files): Likewise. 2011-09-21 Bruno Haible ftruncate: Un-deprecate, concentrate on Win32 support. * modules/ftruncate (Status, Notice): Remove sections. (Depends-on): Add largefile. * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): Drop failure message on non-mingw platforms. * lib/ftruncate.c: Remove code for the older platforms. For Win32, include . * modules/perror-tests (Depends-on): Add ftruncate. * doc/posix-functions/ftruncate.texi: Mention the MSVC problem and the 'ftruncate' module. 2011-09-21 Bruno Haible Add dependencies to new dirent related modules. * modules/opendir (Depends-on): Add closedir. * modules/getcwd (Depends-on): Add opendir, closedir. * modules/dirent-safer-tests (Depends-on): Likewise. * modules/fdopendir-tests (Depends-on): Likewise. * modules/rename-tests (Depends-on): Add opendir, readdir, closedir. * modules/renameat-tests (Depends-on): Likewise. 2011-09-21 Bruno Haible opendir: Avoid compilation error on mingw. * lib/opendir.c: Include always. Include as well. * modules/opendir (Depends-on): Add unistd. 2011-09-21 Bruno Haible ftruncate tests: Avoid a test failure on mingw. * tests/test-ftruncate.c (main): Allow a failure with EACCES. 2011-09-21 Bruno Haible select tests: Avoid test failures on OSF/1 5.1 and mingw. * tests/test-select.h (test_bad_fd): Disable all tests on OSF/1 and native Windows. 2011-09-21 Bruno Haible New module 'fdopen'. * lib/stdio.in.h (fdopen): New declaration. * lib/fdopen.c: New file. * m4/fdopen.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize GNULIB_FDOPEN, REPLACE_FDOPEN. * modules/stdio (Makefile.am): Substitute GNULIB_FDOPEN, REPLACE_FDOPEN. * modules/fdopen: New file. * modules/stdio-tests (Depends-on): Remove fdopen-tests. * tests/test-stdio-c++.cc: Check signature of fdopen. * doc/posix-functions/fdopen.texi: Mention the new module. 2011-09-21 Bruno Haible unlockpt tests: Avoid test failure on NetBSD 5.1. * tests/test-unlockpt.c (main): Skip the EBADF tests on NetBSD. * doc/posix-functions/unlockpt.texi: Mention the bug on NetBSD. 2011-09-21 Bruno Haible getlogin, getlogin_r tests: Avoid test failure on Linux/SPARC. * tests/test-getlogin.c (main): Allow a failure with EINVAL. * tests/test-getlogin_r.c (main): Likewise. 2011-09-20 Bruno Haible time tests: Don't require pid_t. * doc/posix-headers/time.texi: Revert last change. * m4/time_h.m4 (gl_HEADER_TIME_H_BODY): Revert last change. * tests/test-time.c: Comment out the check for pid_t. 2011-09-20 Bruno Haible fsync tests: Avoid a test failure on mingw. * tests/test-fsync.c (main): Allow a failure with EIO. 2011-09-20 Bruno Haible euidaccess: Update comments. * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Update comments. 2011-09-20 Bruno Haible Ensure EBADF returns for socket functions on mingw. * lib/accept.c (rpl_accept): Fail with error EBADF if the file descriptor is invalid. * lib/bind.c (rpl_bind): Likewise. * lib/connect.c (rpl_connect): Likewise. * lib/getpeername.c (rpl_getpeername): Likewise. * lib/getsockname.c (rpl_getsockname): Likewise. * lib/getsockopt.c (rpl_getsockopt): Likewise. * lib/listen.c (rpl_listen): Likewise. * lib/recv.c (rpl_recv): Likewise. * lib/recvfrom.c (rpl_recvfrom): Likewise. * lib/send.c (rpl_send): Likewise. * lib/sendto.c (rpl_sendto): Likewise. * lib/setsockopt.c (rpl_setsockopt): Likewise. * lib/shutdown.c (rpl_shutdown): Likewise. 2011-09-20 Bruno Haible select tests: EBADF tests. * tests/test-select.h (do_select_bad_fd, do_select_bad_fd_nowait, test_bad_fd): New functions. (test_function): Invoke also test_bad_fd. 2011-09-20 Bruno Haible Tests for module 'posix_spawn_file_actions_addopen. * modules/posix_spawn_file_actions_addopen-tests: New file. * tests/test-posix_spawn_file_actions_addopen.c: New file. Tests for module 'posix_spawn_file_actions_adddup2'. * modules/posix_spawn_file_actions_adddup2-tests: New file. * tests/test-posix_spawn_file_actions_adddup2.c: New file. Tests for module 'posix_spawn_file_actions_addclose'. * modules/posix_spawn_file_actions_addclose-tests: New file. * tests/test-posix_spawn_file_actions_addclose.c: New file. 2011-09-20 Bruno Haible Tests for module 'unlockpt'. * modules/unlockpt-tests: New file. * tests/test-unlockpt.c: New file. * doc/posix-functions/unlockpt.texi: Mention the Cygwin 1.7 problem. Tests for module 'grantpt'. * modules/grantpt-tests: New file. * tests/test-grantpt.c: New file. * doc/posix-functions/grantpt.texi: Mention the Cygwin 1.7 problem. 2011-09-20 Bruno Haible freopen tests: EBADF tests. * tests/test-freopen.c: Include errno.h, unistd.h. (main): Add tests for EBADF, commented out for the moment. fclose tests: EBADF tests. * tests/test-fclose.c (main): Add tests for EBADF. fflush tests: EBADF tests. * tests/test-fflush.c: Include errno.h, macros.h. (main): Add tests for EBADF. ftello tests: EBADF tests. * tests/test-ftello4.sh: New file. * tests/test-ftello4.c: New file. * modules/ftello-tests (Files): Add them. (Makefile.am): Arrange to compile test-ftello4 and run test-ftello4.sh. fseeko tests: EBADF tests. * tests/test-fseeko4.sh: New file. * tests/test-fseeko4.c: New file. * modules/fseeko-tests (Files): Add them. (Makefile.am): Arrange to compile test-fseeko4 and run test-fseeko4.sh. Tests for function fputc(). * modules/fputc-tests: New file. * tests/test-fputc.c: New file. * modules/stdio-tests (Depends-on): Add fputc-tests. Tests for function fgetc(). * modules/fgetc-tests: New file. * tests/test-fgetc.c: New file. * modules/stdio-tests (Depends-on): Add fgetc-tests. Tests for function fdopen(). * modules/fdopen-tests: New file. * tests/test-fdopen.c: New file. * modules/stdio-tests (Depends-on): Add fdopen-tests. Tests for module 'vdprintf'. * modules/vdprintf-tests: New file. * tests/test-vdprintf.c: New file. Tests for module 'dprintf'. * modules/dprintf-tests: New file. * tests/test-dprintf.c: New file. 2011-09-20 Bruno Haible Tests for module 'ioctl'. * modules/ioctl-tests: New file. * tests/test-ioctl.c: New file. 2011-09-20 Bruno Haible fcntl tests: EBADF tests. * tests/test-fcntl.c (main): Add more tests for EBADF. 2011-09-20 Bruno Haible utimensat tests: EBADF tests. * tests/test-utimensat.c (main): Add tests for EBADF. renameat tests: EBADF tests. * tests/test-renameat.c (main): Add tests for EBADF. mkfifoat tests: EBADF tests. * tests/test-mkfifoat.c (main): Add tests for EBADF. readlinkat tests: EBADF tests. * tests/test-readlinkat.c (main): Add tests for EBADF. symlinkat tests: EBADF tests. * tests/test-symlinkat.c (main): Add tests for EBADF. linkat tests: EBADF tests. * tests/test-linkat.c (main): Add tests for EBADF. Tests for module 'faccessat'. * modules/faccessat-tests: New file. * tests/test-faccessat.c: New file. fdopendir tests: EBADF tests. * tests/test-fdopendir.c (main): Add more tests for EBADF. openat tests: EBADF tests. * tests/test-fchownat.c (main): Add tests for EBADF. * tests/test-fstatat.c (main): Likewise. * tests/test-mkdirat.c (main): Likewise. * tests/test-openat.c (main): Likewise. * tests/test-unlinkat.c (main): Likewise. * tests/test-fchmodat.c: New file. * modules/openat-tests (Files): Add tests/test-fchmodat.c. (Makefile.am): Also run 'test-fchmodat'. 2011-09-20 Bruno Haible utimens, futimens, fdutimensat tests: EBADF tests. * tests/test-futimens.h (test_futimens): Add more tests for EBADF. Tests for function fstat(). * modules/fstat-tests: New file. * tests/test-fstat.c: New file. * modules/sys_stat-tests (Depends-on): Add fstat-tests. 2011-09-20 Bruno Haible test-ttyname_r tests: EBADF tests. * tests/test-ttyname_r.c (main): Add tests for EBADF. Tests for module 'isatty'. * modules/isatty-tests: New file. * tests/test-isatty.c: New file. Tests for module 'write'. * modules/write-tests: New file. * tests/test-write.c: New file. Tests for module 'read'. * modules/read-tests: New file. * tests/test-read.c: New file. pwrite tests: EBADF tests. * tests/test-pwrite.c (main): Add tests for EBADF. pread tests: EBADF tests. * tests/test-pread.c (main): Add tests for EBADF. lseek tests: EBADF tests. * tests/test-lseek.c (main): Add more tests for EBADF. Tests for module 'ftruncate'. * modules/ftruncate-tests: New file. * tests/test-ftruncate.sh: New file. * tests/test-ftruncate.c: New file. fsync tests: EBADF tests. * tests/test-fsync.c (main): Add more tests for EBADF. fdatasync tests: EBADF tests. * tests/test-fdatasync.c (main): Add more tests for EBADF. Tests for module 'fchown'. * modules/fchown-tests: New file. * tests/test-fchown.c: New file. Tests for module 'fchmod'. * modules/fchmod-tests: New file. * tests/test-fchmod.c: New file. fchdir tests: EBADF tests. * tests/test-fchdir.c (main): Add more tests for EBADF. dup2 tests: EBADF tests. * tests/test-dup2.c (main): Add more tests for EBADF. Tests for module 'dup'. * modules/dup-tests: New file. * tests/test-dup.c: New file. Tests for module 'close'. * modules/close-tests: New file. * tests/test-close.c: New file. 2011-09-20 Bruno Haible Tests for module 'shutdown'. * modules/shutdown-tests: New file. * tests/test-shutdown.c: New file. Tests for module 'setsockopt'. * modules/setsockopt-tests: New file. * tests/test-setsockopt.c: New file. Tests for module 'sendto'. * modules/sendto-tests: New file. * tests/test-sendto.c: New file. Tests for module 'send'. * modules/send-tests: New file. * tests/test-send.c: New file. Tests for module 'recvfrom'. * modules/recvfrom-tests: New file. * tests/test-recvfrom.c: New file. Tests for module 'recv'. * modules/recv-tests: New file. * tests/test-recv.c: New file. Tests for module 'listen'. * modules/listen-tests: New file. * tests/test-listen.c: New file. Tests for module 'getsockopt'. * modules/getsockopt-tests: New file. * tests/test-getsockopt.c: New file. Tests for module 'getsockname'. * modules/getsockname-tests: New file. * tests/test-getsockname.c: New file. Tests for module 'getpeername'. * modules/getpeername-tests: New file. * tests/test-getpeername.c: New file. Tests for module 'connect'. * modules/connect-tests: New file. * tests/test-connect.c: New file. Tests for module 'bind'. * modules/bind-tests: New file. * tests/test-bind.c: New file. accept4 tests: Fix for native Windows. * tests/test-accept4.c: Include sockets.h. (main): Invoke gl_sockets_startup. * modules/accept4-tests (Depends-on): Add sockets. accept tests: Fix for native Windows. * tests/test-accept.c: Include sockets.h. (main): Invoke gl_sockets_startup. * modules/accept-tests (Depends-on): Add sockets. 2011-09-19 Bruno Haible msvc-inval: Require a semicolon after DONE_MSVC_INVAL. * lib/msvc-inval.h (TRY_MSVC_INVAL, DONE_MSVC_INVAL): Wrap in a do...while(0). * lib/dup2.c (rpl_dup2): Add a semicolon after DONE_MSVC_INVAL. Suggested by Paul Eggert. 2011-09-19 Bruno Haible sched: Ensure pid_t is defined. * m4/sched_h.m4 (gl_SCHED_H): Arrange to override if it does not define pid_t. * lib/sched.in.h: Include . * doc/posix-headers/sched.texi: Mention the pid_t problem. Reported by Tom G. Christensen . 2011-09-19 Bruno Haible msvc-inval: Ensure the entire expansion is a single statement. * lib/msvc-inval.h (TRY_MSVC_INVAL, DONE_MSVC_INVAL): Add an extra pair of braces. 2011-09-19 Jim Meyering tests: use printf, not echo in init.sh's warn_ function * tests/init.sh (warn_): Use printf, not echo. The latter would misbehave when given strings containing a backslash or starting with e.g., -n. James Youngman suggested setting IFS. 2011-09-19 Eric Blake futimens: enhance test * tests/test-futimens.h (test_futimens): Also check for EBADF on closed non-negative fd. date: accept 'hence' as opposite of 'ago' * lib/parse-datetime.y (relative_time_table): Add 'hence'. * tests/test-parse-datetime.c (main): Enhance test. Suggested by Jesse Wilson. 2011-09-19 Jim Meyering getcwd: don't fail in a deep directory on a system without openat Before this change, getcwd would fail when called from a directory of depth PATH_MAX / 3 or greater. That was due to the fact that the non-openat implementation used "..", "../..", "../../..", etc. to access ancestor directories. With too many, that string would be longer than PATH_MAX. * lib/getcwd.c (HAVE_OPENAT_SUPPORT): Define also when we are using gnulib's openat replacement. * m4/openat.m4: Set GNULIB_OPENAT, so getcwd.c knows when we're using the replacement function. 2011-09-14 Martin von Gagern maint.mk: avoid warnings from perl about missing files * top/maint.mk (def_sym_regex): Ignore files listed in $(gl_other_headers_) that do not exist, say because a project does not use a corresponding module. 2011-09-18 Paul Eggert stat: use pathmax.h only if needed * lib/stat.c: Include pathmax.h only if REPLACE_FUNC_STAT_DIR. This is better for Emacs, which does not have a mingw port and therefore can avoid the pathmax module. utimens: remove dependency on dup2 * lib/utimens.c (fdutimens): Don't invoke dup2; it's not needed to work around the Linux kernel bug. * modules/utimens (Depends-on): Remove dup2. 2011-09-18 Bruno Haible inet_ntop, inet_pton: Look for it also in libresolv. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): If the function was not found in libnsl, search for it in libresolv. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Likewise. Needed on Solaris 7. 2011-09-18 Bruno Haible accept, accept4 tests: Avoid link error on Solaris. * modules/accept-tests (Makefile.am): Link test-accept against $(LIBSOCKET). * modules/accept4-tests (Makefile.am): Link test-accept4 against $(LIBSOCKET). accept4: Avoid link error on Solaris. * modules/accept4 (Link): New section. socket functions: Avoid link errors on Solaris. * modules/accept (Depends-on): Add socketlib. (Link): New section. * modules/bind (Depends-on): Add socketlib. (Link): New section. * modules/connect (Depends-on): Add socketlib. (Link): New section. * modules/getpeername (Depends-on): Add socketlib. (Link): New section. * modules/getsockname (Depends-on): Add socketlib. (Link): New section. * modules/getsockopt (Depends-on): Add socketlib. (Link): New section. * modules/listen (Depends-on): Add socketlib. (Link): New section. * modules/recv (Depends-on): Add socketlib. (Link): New section. * modules/recvfrom (Depends-on): Add socketlib. (Link): New section. * modules/send (Depends-on): Add socketlib. (Link): New section. * modules/sendto (Depends-on): Add socketlib. (Link): New section. * modules/setsockopt (Depends-on): Add socketlib. (Link): New section. * modules/shutdown (Depends-on): Add socketlib. (Link): New section. * modules/socket (Depends-on): Add socketlib. (Link): New section. 2011-09-18 Bruno Haible ptsname tests: Let the test fail rather than hang (e.g. on AIX 5.1). * tests/test-ptsname.c (main): Terminate the test if it takes longer than 5 seconds. * modules/ptsname-tests (configure.ac): Test for alarm. 2011-09-18 Bruno Haible posix_spawn_file_actions_add*: Fix module dependencies. * modules/posix_spawn_file_actions_addclose (Dependencies): Add posix_spawn_file_actions_init. * modules/posix_spawn_file_actions_adddup2 (Dependencies): Likewise. * modules/posix_spawn_file_actions_addopen (Dependencies): Likewise. 2011-09-18 Bruno Haible rename, renameat tests: Avoid test failures on FreeBSD 6.4. * tests/test-rename.h (test_rename): Allow error code EEXIST. * tests/test-renameat.c (main): Likewise. 2011-09-18 Bruno Haible Tests for module 'accept4'. * modules/accept4-tests: New file. * tests/test-accept4.c: New file. 2011-09-18 Bruno Haible Tests for module 'accept'. * modules/accept-tests: New file. * tests/test-accept.c: New file. 2011-09-18 Bruno Haible dup2: Support for MSVC. * lib/dup2.c: Include msvc-inval.h. (rpl_dup2): Handle invalid parameter notifications during dup2 and _get_osfhandle calls. * modules/dup2 (Depends-on): Add msvc-inval. * doc/posix-functions/dup2.texi: Mention problem on MSVC. New module 'msvc-inval'. * lib/msvc-inval.h: New file. * lib/msvc-inval.c: New file. * m4/msvc-inval.m4: New file. * modules/msvc-inval: New file. 2011-09-17 Bruno Haible Tests for module 'pclose'. * modules/pclose-tests: New file. New module 'pclose'. * lib/stdio.in.h (pclose): New declaration. * lib/pclose.c: New file. * m4/pclose.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H): Test whether pclose is declared. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_PCLOSE, HAVE_PCLOSE. * modules/stdio (Makefile.am): Substitute GNULIB_PCLOSE, HAVE_PCLOSE. * modules/pclose: New file. * modules/popen-tests (Depends-on): Add pclose. * modules/popen-safer-tests (Depends-on): Likewise. * doc/posix-functions/pclose.texi: Mention the new module. 2011-09-17 Bruno Haible popen: Support for MSVC. * lib/stdio.in.h (popen): Declare it if the system lacks this function. * lib/popen.c (popen): Provide alternate definition for native Windows. * m4/popen.m4 (gl_FUNC_POPEN): Test if popen exists. Set HAVE_POPEN. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_POPEN. * modules/popen (Depends-on, configure.ac): Update condition. * modules/stdio (Makefile.am): Substitute HAVE_POPEN. * doc/posix-functions/popen.texi: Mention that the MSVC problem is fixed. 2011-09-17 Bruno Haible isnanl, isnand, isnanf: Work around MSVC bug. * lib/isnan.c (FUNC): Use alternate ways of computing NaN and Infinity. 2011-09-17 Bruno Haible sys_socket tests: Fix recent mistake. * tests/test-sys_socket.c (t1): Avoid collision of identifiers. 2011-09-17 Bruno Haible putenv: Support for MSVC. * modules/putenv (Depends-on): Add environ. * lib/putenv.c (environ): Disable declaration. * lib/unistd.in.h: Update comment. 2011-09-17 Bruno Haible math: Avoid macro redefinition warnings on MSVC. * lib/math.in.h (ceilf, ceill, floorf, floorl, frexpl, ldexpl): Undefine before redefining. 2011-09-17 Bruno Haible doc: Mention functions which are declared as macros. * doc/posix-functions/*[fl].texi: Mention that some functions are defined as macros with arguments only. 2011-09-17 Bruno Haible Add dependencies to new dirent related modules. * modules/backupfile (Depends-on): Add opendir, readdir, closedir. * modules/fts (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/savedir (Depends-on): Likewise. * modules/scandir (Depends-on): Likewise. * modules/dirent-safer (Depends-on): Add opendir, closedir. * modules/fdopendir (Depends-on): Add opendir. 2011-09-17 Bruno Haible inet_pton: Support for MSVC on Windows Vista or newer. * lib/arpa_inet.in.h (inet_pton): Also consider REPLACE_INET_PTON. * lib/inet_pton.c (rpl_inet_pton): Use a simple wrapper if HAVE_DECL_INET_PTON is defined. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Invoke gl_PREREQ_SYS_H_WINSOCK2. On platforms with , test whether inet_pton is declared in . If so, arrange to replace it. * m4/arpa_inet_h.m4 (gl_ARPA_INET_H_DEFAULTS): Initialize REPLACE_INET_PTON. * modules/arpa_inet (Makefile.am): Substitute REPLACE_INET_PTON. * modules/inet_pton (Files): Add m4/sys_socket_h.m4. (Depends-on, configure.ac): Update condition. * doc/posix-functions/inet_pton.texi: Mention the MSVC problem. 2011-09-17 Bruno Haible inet_ntop: Support for MSVC on Windows Vista or newer. * lib/arpa_inet.in.h (inet_ntop): Also consider REPLACE_INET_NTOP. * lib/inet_ntop.c (rpl_inet_ntop): Use a simple wrapper if HAVE_DECL_INET_NTOP is defined. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Invoke gl_PREREQ_SYS_H_WINSOCK2. On platforms with , test whether inet_ntop is declared in . If so, arrange to replace it. * m4/arpa_inet_h.m4 (gl_ARPA_INET_H_DEFAULTS): Initialize REPLACE_INET_NTOP. * modules/arpa_inet (Makefile.am): Substitute REPLACE_INET_NTOP. * modules/inet_ntop (Files): Add m4/sys_socket_h.m4. (Depends-on, configure.ac): Update condition. * doc/posix-functions/inet_ntop.texi: Mention the MSVC problem. 2011-09-16 Eric Blake test-fsync: yet another enhancement * tests/test-fsync.c (main): Also test behavior on read-only text file. 2011-09-16 Bruno Haible Enhance fsync, fdatasync tests. * tests/test-fsync.c (main): Test both STDIN_FILENO and STDOUT_FILENO. * tests/test-fdatasync.c (main): Likewise. 2011-09-16 Bruno Haible Support for MSVC compiler: Ensure mode_t gets defined. * m4/fcntl_h.m4 (gl_FCNTL_H): Require AC_TYPE_MODE_T. * m4/spawn_h.m4 (gl_SPAWN_H): Likewise. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Likewise. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Likewise. * tests/test-fcntl-h.c: Check that mode_t is defined. * tests/test-sys_stat.c: Likewise. * tests/test-sys_types.c: Likewise. * doc/posix-headers/fcntl.texi: Mention the missing mode_t problem. * doc/posix-headers/sys_stat.texi: Likewise. * doc/posix-headers/sys_types.texi: Likewise. 2011-09-16 Bruno Haible sys_stat: Support for MSVC. * lib/sys_stat.in.h (S_IFIFO): Define to _S_IFIFO if that exists. * tests/test-sys_stat.c: Don't assume that S_IFBLK exists. * doc/posix-headers/sys_stat.texi: Mention missing S_IFIFO, S_IFBLK on MSVC. 2011-09-16 Bruno Haible Support for MSVC compiler: Ensure off_t gets defined. * lib/unistd.in.h: Include . * tests/test-fcntl-h.c: Check that off_t is defined. * tests/test-sys_stat.c: Likewise. * tests/test-sys_types.c: Likewise. 2011-09-16 Eric Blake fdatasync: port to Solaris * m4/fdatasync.m4 (gl_FUNC_FDATASYNC): Set LIB_FDATASYNC. * modules/fdatasync (Link): Document it. * modules/fdatasync-tests (test_fdatasync_LDADD): Link with it. fdatasync: port to MacOS X 10.7 * m4/fdatasync.m4 (gl_FUNC_FDATASYNC): Check for present but not declared. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Another default. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (fdatasync): Declare on MacOS. * doc/posix-functions/fdatasync.texi (fdatasync): Document it. fdatasync: minor improvements * modules/fdatasync (Depends-on): Add condition for fsync. * lib/fdatasync.c (fdatasync): Add comment. * tests/test-unistd-c++.cc: Test fdatasync. unistd: update refs to newer POSIX * lib/unistd.in.h: Prefer POSIX 2008 over 2001. Suggested by Bruno Haible. fdatasync: new module * modules/fsync (Description): Document difference to fdatasync. * modules/fdatasync: New module. * m4/fdatasync.m4 (gl_FUNC_FDATASYNC): New file. * lib/fdatasync.c (fdatasync): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H, gl_UNISTD_H_DEFAULTS): Set up defaults. * modules/unistd (Makefile.am): Set witnesses. * lib/unistd.in.h (fdatasync): Declare. * MODULES.html.sh: Document it. * doc/posix-functions/fdatasync.texi (fdatasync): Likewise. * modules/fdatasync-tests: New test. * tests/test-fdatasync.c: Likewise. 2011-09-16 Eric Blake test-fsync: enhance tests * modules/fsync-tests (Depends-on): Add errno, for mingw. * tests/test-fsync.c (main): Enhance test. 2011-09-15 Bruno Haible Support for MSVC compiler: Ensure ssize_t gets defined. * doc/posix-headers/sys_types.texi: Mention the missing ssize_t problem. * doc/posix-headers/stdio.texi: Likewise. * modules/stdio (Depends-on): Add ssize_t. * modules/sys_socket (Depends-on): Likewise. * modules/sys_types (Depends-on): Likewise. * modules/sys_uio (Depends-on): Likewise. * modules/unistd (Depends-on): Likewise. * tests/test-sys_socket.c: Check that size_t and ssize_t are defined. * tests/test-sys_types.c: Check that ssize_t is defined. 2011-09-14 Bruno Haible Avoid using #, the m4 comment starter character, near brackets. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER_ONE): Use |, not #, as delimiter character in sed expressions. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Likewise. Suggested by Eric Blake. Properly quote AC_CHECK_DECLS' 4th argument. * m4/c-stack.m4 (gl_PREREQ_C_STACK): Double-quote AC_CHECK_DECLS' 4th argument. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF): Likewise. * m4/floorl.m4 (gl_FUNC_FLOORL): Likewise. * m4/fnmatch.m4 (gl_PREREQ_FNMATCH): Likewise. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Likewise. * m4/getdomainname.m4 (gl_FUNC_GETDOMAINNAME): Likewise. * m4/gethrxtime.m4 (gl_GETHRXTIME): Likewise. * m4/getpass.m4 (gl_PREREQ_GETPASS): Likewise. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Likewise. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Likewise. * m4/isfinite.m4 (gl_ISFINITE): Likewise. * m4/isinf.m4 (gl_ISINF): Likewise. * m4/logb.m4 (gl_FUNC_LOGB): Likewise. * m4/readutmp.m4 (gl_READUTMP): Likewise. * m4/regex.m4 (gl_PREREQ_REGEX): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise. * m4/signbit.m4 (gl_SIGNBIT): Likewise. * m4/sleep.m4 (gl_FUNC_SLEEP): Likewise. * m4/strsignal.m4 (gl_PREREQ_STRSIGNAL): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. Reported by Eric Blake. Properly quote AC_CHECK_DECL's 4th argument. * m4/acosl.m4 (gl_FUNC_ACOSL): Double-quote AC_CHECK_DECL's 4th argument. * m4/argp.m4 (gl_ARGP): Likewise. * m4/asinl.m4 (gl_FUNC_ASINL): Likewise. * m4/atanl.m4 (gl_FUNC_ATANL): Likewise. * m4/cosl.m4 (gl_FUNC_COSL): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL, gl_FUNC_FREXPL_NO_LIBM): Likewise. * m4/getloadavg.m4 (gl_GETLOADAVG): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Likewise. * m4/logl.m4 (gl_FUNC_LOGL): Likewise. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Likewise. * m4/sinl.m4 (gl_FUNC_SINL): Likewise. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Likewise. * m4/tanl.m4 (gl_FUNC_TANL): Likewise. Reported by Eric Blake. 2011-09-14 Eric Blake opendir: avoid compile warning * lib/opendir.c (includes): Always include errno.h. Reported by Tatsuro MATSUOKA. 2011-09-14 Jim Meyering maint.mk: sc_tight_scope: propagate failure from sub-make * top/maint.mk (sc_tight_scope): Actually initialize and use $fail. Reported by Martin von Gagern. 2011-09-13 Bruno Haible tempname: Support for MSVC. * doc/posix-headers/fcntl.texi: Document the problem with O_ACCMODE on MSVC. * modules/tempname (Depends-on): Add fcntl-h. 2011-09-13 Bruno Haible sys_time: Support for MSVC. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Invoke gl_PREREQ_SYS_H_WINSOCK2. When testing for 'struct timeval', also include . * lib/sys_time.in.h: On MSVC, include and hide its function declarations that collide with POSIX. * modules/sys_time (Files): Add m4/sys_socket_h.m4. (Makefile.am): Substitute HAVE_WINSOCK2_H. 2011-09-13 Bruno Haible stat: Support for MSVC. * lib/stat.c: Include pathmax.h. * modules/stat (Depends-on): Add pathmax. pathmax: Support for native Windows. * lib/pathmax.h (PATH_MAX): Define to 260 on native Windows. 2011-09-12 Bruno Haible New modules 'opendir', 'readdir', 'rewinddir', 'closedir'. * lib/dirent.in.h (struct dirent): New type. (DT_UNKNOWN, DT_FIFO, DT_CHR, DT_DIR, DT_BLK, DT_REG, DT_LNK, DT_SOCK, DT_WHT): New macros. (DIR): New type. (opendir, closedir): Declare only if the module 'opendir' is enabled. (readdir, rewinddir): New declarations. * lib/dirent-private.h: New file. * lib/opendir.c: New file. * lib/readdir.c: New file. * lib/rewinddir.c: New file. * lib/closedir.c: New file. * lib/fchdir.c (rpl_closedir, rpl_opendir): Remove functions. * m4/opendir.m4: New file. * m4/readdir.m4: New file. * m4/rewinddir.m4: New file. * m4/closedir.m4: New file. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't set REPLACE_OPENDIR, REPLACE_CLOSEDIR here. * m4/dirent_h.m4 (gl_DIRENT_H): Also check whether closedir, opendir, readdir, rewinddir are declared. (gl_DIRENT_H_DEFAULTS): Initialize GNULIB_OPENDIR, GNULIB_READDIR, GNULIB_REWINDDIR, GNULIB_CLOSEDIR, HAVE_OPENDIR, HAVE_READDIR, HAVE_REWINDDIR, HAVE_CLOSEDIR. * modules/dirent (Makefile.am): Substitute GNULIB_OPENDIR, GNULIB_READDIR, GNULIB_REWINDDIR, GNULIB_CLOSEDIR, HAVE_OPENDIR, HAVE_READDIR, HAVE_REWINDDIR, HAVE_CLOSEDIR. * modules/opendir: New file. * modules/readdir: New file. * modules/rewinddir: New file. * modules/closedir: New file. * doc/posix-functions/opendir.texi: Mention the 'opendir' module. * doc/posix-functions/readdir.texi: Mention the 'readdir' module. * doc/posix-functions/rewinddir.texi: Mention the 'rewinddir' module. * doc/posix-functions/closedir.texi: Mention the 'closedir' module. * NEWS: Mention the 'fchdir' change. 2011-09-11 Bruno Haible asm-underscore.m4: Support for MSVC. * m4/asm-underscore.m4 (gl_C_ASM): New macro. (gl_ASM_SYMBOL_PREFIX): Require it. Use its results. 2011-09-11 Reuben Thomas Doc about crypt functions. * doc/posix-functions/crypt.texi: Expand range of glibc versions needing for _GNU_SOURCE to get crypt. * doc/posix-functions/encrypt.texi: Likewise. * doc/posix-functions/setkey.texi: Likewise. 2011-09-11 Bruno Haible doc: Update regarding MSVC 9. * doc/gnulib-intro.texi (Target Platforms): Classify MSVC as "rarely tested". * doc/posix-functions/*.texi: Update with info about MSVC 9. * doc/posix-headers/*.texi: Likewise. * doc/pastposix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. * doc/glibc-headers/*.texi: Likewise. 2011-09-11 Bruno Haible unistd et al.: Don't assume exists. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Don't include if it does not exist. * m4/environ.m4 (gl_ENVIRON): Don't include if it does not exist. But include . * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): If does not exist, include and instead. Don't test symbolink links if symlink() does not exist. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): If does not exist, include instead. * m4/free.m4 (gl_FUNC_FREE): Assume free(NULL) works on native Windows. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): If does not exist, include instead. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/lseek.m4 (gl_FUNC_LSEEK): If does not exist, include instead. * m4/rename.m4 (gl_FUNC_RENAME): Assume rename() manages hard links correctly if the system does not have hard links. * m4/rmdir.m4 (gl_FUNC_RMDIR): If does not exist, include instead. * m4/unistd_h.m4 (gl_UNISTD_H): If does not exist, bypass it when looking for function declarations. * m4/unlink.m4 (gl_FUNC_UNLINK): If does not exist, include and instead. * doc/posix-headers/unistd.texi: More details about MSVC problem. 2011-09-11 Bruno Haible strcase: Support for MSVC. * modules/strcase (Status, Notice): Remove obsoletion mark. * doc/posix-functions/strcasecmp.texi: Mention MSVC problem. * doc/posix-functions/strncasecmp.texi: Likewise. strings: Don't assume exists. * lib/strings.in.h: Include only if HAVE_STRINGS_H is 1. * m4/strings_h.m4 (gl_HEADER_STRINGS_H_BODY): Set HAVE_STRINGS_H. * modules/strings (Makefile.am): Substitute HAVE_STRINGS_H. * doc/posix-headers/strings.texi: Mention the MSVC problem. 2011-09-11 Bruno Haible dirent: Don't assume exists. * lib/dirent.in.h: Include only if HAVE_DIRENT_H is 1. * m4/dirent_h.m4 (gl_DIRENT_H): Set HAVE_DIRENT_H. * modules/dirent (Makefile.am): Substitute HAVE_DIRENT_H. * doc/posix-headers/dirent.texi: Mention the MSVC problem. 2011-09-11 Bruno Haible Fix wint_t on MSVC. * lib/wchar.in.h (wint_t): On MSVC, override it. * lib/wctype.in.h (wint_t): Likewise. * m4/stdint.m4 (gl_STDINT_TYPE_PROPERTIES): Override BITSIZEOF_WINT_T on MSVC. * doc/posix-headers/wchar.texi: Mention the problem with wint_t on MSVC. * doc/posix-headers/wctype.texi: Likewise. 2011-09-11 Bruno Haible sys_types: Fix typo. * lib/sys_types.in.h: Fix typo in comment. Reported by Paul Eggert. Support for MSVC compiler: Ensure size_t gets defined. * modules/strings (Depends-on): Add 'sys_types'. * modules/sys_uio (Depends-on): Likewise. * lib/sys_uio.in.h: Update comment. C++ tests for module 'sys_types'. * modules/sys_types-c++-tests: New file. * tests/test-sys_types-c++.cc: New file. Tests for module 'sys_types'. * modules/sys_types-tests: New file. * tests/test-sys_types.c: New file. New module 'sys_types'. * lib/sys_types.in.h: New file. * m4/sys_types_h.m4: New file. * modules/sys_types: New file. * doc/posix-headers/sys_types.texi: Mention the new module and the size_t problem on MSVC 9. 2011-09-11 Bruno Haible Support for MSVC compiler: Avoid division by a literal 0. * lib/math.in.h (NAN): Define through a function call also on MSVC. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Divide by 'zero' instead of 0.0. * m4/printf.m4 (gl_PRINTF_INFINITE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_FLAG_ZERO): Likewise. (gl_PRINTF_INFINITE_LONG_DOUBLE): Divide by 'zeroL' instead of 0.0L. * tests/infinity.h: New file. * tests/nan.h (NaNf, NaNd, NaNl): Define through a function call also on MSVC. * tests/test-ceilf1.c: Include infinity.h. (main): Use Infinityf. * tests/test-ceil1.c: Include infinity.h. (main): Use Infinityd. * tests/test-ceill.c: Include infinity.h. (main): Use Infinityl. * tests/test-dprintf-posix.c: Include infinity.h. (test_function): Use Infinityd. * tests/test-floorf1.c: Include infinity.h. (main): Use Infinityf. * tests/test-floor1.c: Include infinity.h. (main): Use Infinityd. * tests/test-floorl.c: Include infinity.h. (main): Use Infinityl. * tests/test-fprintf-posix.c: Include infinity.h. (test_function): Use Infinityd. * tests/test-frexp.c: Include infinity.h. (main): Use Infinityd. * tests/test-frexpl.c: Include infinity.h. (main): Use Infinityl. * tests/test-isfinite.c: Include infinity.h. (test_isfinitef): Use Infinityf. (test_isfinited): Use Infinityd. (test_isfinitel): Use Infinityl. * tests/test-isinf.c: Include infinity.h. (test_isinff): Use Infinityf. (test_isinfd): Use Infinityd. (test_isinfl): Use Infinityl. * tests/test-isnan.c: Include infinity.h. (test_float): Use Infinityf. (test_double): Use Infinityd. (test_long_double): Use Infinityl. * tests/test-isnanf.h: Include infinity.h. (main): Use Infinityf. * tests/test-isnand.h: Include infinity.h. (main): Use Infinityd. * tests/test-isnanl.h: Include infinity.h. (main): Use Infinityl. * tests/test-ldexpl.c: Include infinity.h. (main): Use Infinityl. * tests/test-printf-posix.h: Include infinity.h. (test_function): Use Infinityd. * tests/test-roundf1.c: Include infinity.h. (main): Use Infinityf. * tests/test-round1.c: Include infinity.h. (main): Use Infinityd. * tests/test-roundl.c: Include infinity.h. (main): Use Infinityl. * tests/test-signbit.c: Include infinity.h. (test_signbitf): Use Infinityf. (test_signbitd): Use Infinityd. (test_signbitl): Use Infinityl. * tests/test-snprintf-posix.h: Include infinity.h. (test_function): Use Infinityd, Infinityl. * tests/test-sprintf-posix.h: Include infinity.h. (test_function): Use Infinityd, Infinityl. * tests/test-truncf1.c: Include infinity.h. (main): Use Infinityf. * tests/test-trunc1.c: Include infinity.h. (main): Use Infinityd. * tests/test-truncl.c: Include infinity.h. (main): Use Infinityl. * tests/test-vasnprintf-posix.c: Include infinity.h. (test_function): Use Infinityd, Infinityl. * tests/test-vasprintf-posix.c: Include infinity.h. (test_function): Use Infinityd, Infinityl. * modules/ceilf-tests (Files): Add tests/infinity.h. * modules/ceil-tests (Files): Likewise. * modules/ceill-tests (Files): Likewise. * modules/dprintf-posix-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floor-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/fprintf-posix-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/isfinite-tests (Files): Likewise. * modules/isinf-tests (Files): Likewise. * modules/isnan-tests (Files): Likewise. * modules/isnanf-tests (Files): Likewise. * modules/isnanf-nolibm-tests (Files): Likewise. * modules/isnand-tests (Files): Likewise. * modules/isnand-nolibm-tests (Files): Likewise. * modules/isnanl-tests (Files): Likewise. * modules/isnanl-nolibm-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/printf-posix-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/signbit-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/vasnprintf-posix-tests (Files): Likewise. * modules/vasprintf-posix-tests (Files): Likewise. * modules/vdprintf-posix-tests (Files): Likewise. * modules/vfprintf-posix-tests (Files): Likewise. * modules/vprintf-posix-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/xprintf-posix-tests (Files): Likewise. 2011-09-11 Bruno Haible Ensure pid_t gets defined. * m4/fcntl_h.m4 (gl_FCNTL_H): Require AC_TYPE_PID_T. * m4/sched_h.m4 (gl_SCHED_H): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Likewise. * m4/spawn_h.m4 (gl_SPAWN_H): Likewise. * m4/sys_wait_h.m4 (gl_SYS_WAIT_H): Likewise. * m4/termios_h.m4 (gl_TERMIOS_H): Likewise. * m4/time_h.m4 (gl_HEADER_TIME_H_BODY): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * tests/test-fcntl-h.c: Check that pid_t is defined. * tests/test-sched.c: Likewise. * tests/test-termios.c: Likewise. * tests/test-time.c: Likewise. * doc/posix-headers/fcntl.texi: Mention lack of pid_t on MSVC platform. * doc/posix-headers/signal.texi: Likewise. * doc/posix-headers/sys_types.texi: Likewise. * doc/posix-headers/time.texi: Likewise. 2011-09-11 Bruno Haible acl: Fix compilation on Solaris 10 (older version). * lib/file-has-acl.c (acl_ace_nontrivial): Use NEW_ACE_EVERYONE instead of ACE_EVERYONE. * lib/set-mode-acl.c (qset_acl): Likewise. Reported by Christian Jullien . 2011-09-10 Bruno Haible iconv, unsetenv: Add support for MSVC compiler. * m4/iconv.m4 (AM_ICONV): Use ISO C declaration syntax on MSVC. * m4/setenv.m4 (gl_FUNC_UNSETENV): Drop support for K&R C compilers. 2011-09-10 Bruno Haible *printf: Add support for MSVC compiler. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_N): On MSVC, install a handler that handles the exception caused by the %n directive. When cross-compiling, guess no on native Windows. (gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_SNPRINTF_SIZE1): When snprintf is missing, emulate it through vsnprintf. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Update comment. * doc/posix-functions/dprintf.texi: Update documentation regarding MSVC 9. * doc/posix-functions/fprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/glibc-functions/asprintf.texi: Likewise. * doc/glibc-functions/obstack_printf.texi: Likewise. * doc/glibc-functions/obstack_vprintf.texi: Likewise. * doc/glibc-functions/vasprintf.texi: Likewise. 2011-09-10 Bruno Haible nocrash: Add support for native Windows. * m4/nocrash.m4 (GL_NOCRASH): Avoid a crash also on native Windows. 2011-09-10 Michael Goffioul (tiny change) Bruno Haible absolute-header, include-next: Add support for MSVC compiler. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER_ONE): Require AC_CANONICAL_HOST. On native Windows, recognize also backslash as directory separator in #line directives. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): On native Windows, recognize also backslash as directory separator in #line directives. 2011-09-08 Jim Meyering maint.mk: mark the post-release commit log with "maint: " prefix * top/maint.mk (emit-commit-log): Add "maint: " prefix to the one-line commit-log summary. 2011-09-08 Reuben Thomas Bruno Haible Doc about crypt functions. * doc/posix-functions/crypt.texi: Mention need for _GNU_SOURCE on glibc systems. * doc/posix-functions/encrypt.texi: Likewise. * doc/posix-functions/setkey.texi: Likewise. 2011-09-08 Simon Josefsson * lib/gc.h: Fix copyright header. 2011-09-07 Bruno Haible pthread: Determine $(LIB_PTHREAD) correctly on OSF/1 5.1. * m4/pthread.m4 (gl_PTHREAD_CHECK): Use AC_CACHE_CHECK and AC_LINK_IFELSE instead of AC_SEARCH_LIBS. 2011-09-07 Bruno Haible openat: Work around compilation error with OSF/1 5.1 DTK cc. * lib/fopen.c: Use different syntax for include of . * lib/freopen.c: Likewise. * lib/fstatat.c: Use different syntax for include of . * lib/lstat.c: Likewise. * lib/stat.c: Likewise. * lib/open.c: Use different syntax for include of . * lib/openat.c: Include fcntl.h again, explicitly. 2011-09-04 J.T. Conklin parse-datetime: document the newly accepted format * doc/parse-datetime.texi (Combined date and time of day items): New section. 2011-09-06 Bruno Haible acl: Fix a test failure on newer Solaris 10 with ZFS. * tests/test-sameacls.c (main): Interpret acl GETACLCNT failure with ENOSYS as no ACL. Reported by Jim Meyering. 2011-09-06 Bruno Haible acl: Update for AIX >= 5.3 with NFS. * lib/file-has-acl.c (file_has_acl): Interpret aclx_get failure with ENOSYS as no ACL. acl: Fix a test failure on AIX >= 5.3 with NFS. * tests/test-sameacls.c (main): Interpret aclx_get failure with ENOSYS as no ACL. 2011-09-06 Bruno Haible acl: Fix a test failure on IRIX 6.5 with NFS. * lib/acl-internal.h (MODE_INSIDE_ACL): Define to 0 on IRIX. * lib/set-mode-acl.c (qset_acl): Test !HAVE_ACL_TYPE_EXTENDED instead of MODE_INSIDE_ACL. If !MODE_INSIDE_ACL, do a chmod_or_fchmod always. * lib/copy-acl.c (qcopy_acl): Likewise. 2011-09-05 Paul Eggert openat: port to AIX 7.1 with large files AIX 7.1 does a "#define openat open64at" if large files are in use, so we can't simply #undef openat. Use the orig_openat trick (similar to orig_open in lib/open.c) to work around the problem. Problem reported by Kevin Brott for GNU tar, in the thread containing . * lib/openat.c (__need_system_fcntl_h): Define first. Include and before undefining. (orig_openat) [HAVE_OPENAT]: New inline function. (openat) [HAVE_OPENAT]: Do not undef. (rpl_openat): Use orig_openat, not openat. 2011-09-05 Joachim Schmitz (tiny change) Bruno Haible acl: Avoid errors on NonStop Kernel. * lib/file-has-acl.c (file_has_acl) [NonStop Kernel]: Ignore ENOSYS and ENOTSUP errors. 2011-09-05 Bruno Haible acl: Clean up Solaris code. * lib/acl-internal.h: Remove no-op #if. * lib/file-has-acl.c: Likewise. * lib/set-mode-acl.c (qset_acl): Remove unused Solaris code. * lib/copy-acl.c (qcopy_acl): Likewise. 2011-09-05 Bruno Haible acl: Fix a bug with NFSv4 ACLs on Solaris 10 (newer version) in binaries built on the original Solaris 10. * lib/file-has-acl.c (file_has_acl): ACLs with 4..6 ACEs can be trivial. 2011-09-05 Bruno Haible acl: Improve support of NFSv4 ACLs on Solaris 10 (newer version). * lib/acl-internal.h (acl_nontrivial): Declare also on newer Solaris 10. * lib/file-has-acl.c (acl_nontrivial): Define also on newer Solaris 10. (acl_ace_nontrivial): Likewise. Recognize the trivial ACLs with 6 ACEs. * lib/copy-acl.c (qcopy_acl): On newer Solaris 10, use acl or facl instead of acl_get, facl_get, acl_set, facl_set. 2011-09-05 Bruno Haible copy-file: Try unit tests on more file systems. * tests/test-copy-file-1.sh: New file. * tests/test-copy-file-2.sh: New file. * modules/copy-file-tests (Files): Add them. (Makefile.am): Add them to TESTS. acl: Try unit tests on more file systems. * tests/test-file-has-acl-1.sh: New file. * tests/test-file-has-acl-2.sh: New file. * tests/test-set-mode-acl-1.sh: New file. * tests/test-set-mode-acl-2.sh: New file. * tests/test-copy-acl-1.sh: New file. * tests/test-copy-acl-2.sh: New file. * modules/acl-tests (Files): Add them. (Makefile.am): Add them to TESTS. 2011-09-04 Bruno Haible acl: Improve support of NFSv4 ACLs on Solaris 10 (newer version). * lib/acl-internal.h (ACE_*, NEW_ACE_*): Define also on newer Solaris 10. (OLD_ALLOW, OLD_DENY): New macros. (NEW_ACE_ACCESS_ALLOWED_ACE_TYPE): Renamed from ACE_ACCESS_ALLOWED_ACE_TYPE. (NEW_ACE_ACCESS_DENIED_ACE_TYPE): Renamed from ACE_ACCESS_DENIED_ACE_TYPE. (OLD_ACE_OWNER, OLD_ACE_GROUP, OLD_ACE_OTHER): New macros. (NEW_ACE_EXECUTE): Fix value. (NEW_ACE_APPEND_DATA, NEW_ACE_READ_NAMED_ATTRS, NEW_ACE_WRITE_NAMED_ATTRS, NEW_ACE_DELETE_CHILD, NEW_ACE_READ_ATTRIBUTES, NEW_ACE_WRITE_ATTRIBUTES, NEW_ACE_DELETE, NEW_ACE_READ_ACL, NEW_ACE_WRITE_ACL, NEW_ACE_WRITE_OWNER, NEW_ACE_SYNCHRONIZE): New macros. * lib/set-mode-acl.c (qset_acl): On newer Solaris 10, use acl or facl instead of acl_fromtext, acl_set, facl_set. Fixes a coreutils/tests/cp/perm failure. 2011-09-03 Paul Eggert openat: test for fstatat (..., 0) bug Further testing with tar suggests that fstatat (..., 0) does not work in general, on AIX 7.1; see . So, give up entirely on AIX 7.1's fstatat, and fall back on our replacement fstatat (which is what older AIX releases were using anyway). * lib/fstatat.c (fstatat) [HAVE_FSTATAT]: Do not undef. The only use is now changed to orig_fstatat. This was probably the right thing to do anyway. (FSTATAT_AT_FDCWD_0_BROKEN): Remove; no longer used. (rpl_fstatat) [FSTATAT_ZERO_FLAG_BROKEN]: Remove. (rpl_fstatat): Simplify, assuming !FSTATAT_ZERO_FLAG_BROKEN. (AT_FUNC_NAME) [FSTATAT_ZERO_FLAG_BROKEN]: Now rpl_fstatat. * m4/openat.m4 (gl_FUNC_FSTATAT): Test for the more-general bug and define FSTATAT_ZERO_FLAG_BROKEN, not FSTATAT_AT_FDCWD_0_BROKEN, if the bug is found. openat: test for fstatat (AT_FDCWD, ..., 0) bug This tests for another fstatat bug on AIX 7.1: fstatat (AT_FDCWD, ..., 0) does not work. See . * lib/fstatat.c (FSTATAT_AT_FDCWD_0_BROKEN) (LSTAT_FOLLOWS_SLASHED_SYMLINK): Default to 0. (rpl_fstatat): Adjust so that it works around either (or both) bugs if present. * m4/openat.m4 (gl_FUNC_FSTATAT): Test for this fstatat bug. 2011-09-03 Karl Berry * doc/regex.texi (Character Class Operators): Avoid literal ":" in index entries. 2011-09-02 Bruno Haible Allow the user to override the choice of AR, ARFLAGS, RANLIB. * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): Don't override the given values of AR, ARFLAGS, RANLIB. Reported by John W. Eaton for Octave. 2011-09-02 Bruno Haible Find 'ar' program that fits with --host argument. * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): Use AC_CHECK_TOOL. 2011-09-02 Bruno Haible tests: init.sh: Support any non-GNU diff. * tests/init.sh (compare): If "diff -c" is supported but "diff -u" is not, use "diff -c". Useful on AIX 6.1, HP-UX 11.31, OSF/1 5.1, Solaris 8. 2011-09-02 Bruno Haible tests: init.sh: work also with any non-GNU diff that supports -u * tests/init.sh: Relax check for diff -u support. Rather than checking for GNU diff via --version, simply check for support for -u itself. Useful at least on OpenBSD 4.9, AIX 7.1, IRIX 6.5, and Solaris 10. 2011-09-01 Bruno Haible strtoimax, strtoumax: Document problem on HP-UX 11. * doc/posix-functions/strtoimax.texi: Mention HP-UX 11.11 problem. * doc/posix-functions/strtoumax.texi: Likewise. 2011-09-01 Bruno Haible strtoumax: Avoid link error on OSF/1 with DTK cc. * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Always test whether strtoumax is defined as a function. * modules/strtoumax (Depends-on, configure.ac): Test only whether strtoumax is defined, not whether it is declared. 2011-09-01 Bruno Haible strtoimax: Avoid link error on OSF/1 with DTK cc. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Always test whether strtoimax is defined as a function. * modules/strtoimax (Depends-on, configure.ac): Test only whether strtoimax is defined, not whether it is declared. 2011-09-01 Bruno Haible imaxdiv: Avoid link error on OSF/1 with DTK cc. * m4/imaxdiv.m4 (gl_FUNC_IMAXDIV): Also test whether imaxdiv is defined as a function. * modules/imaxdiv (configure.ac): Test whether imaxdiv is defined, not whether it is declared. 2011-09-01 Bruno Haible imaxabs: Avoid link error on OSF/1 with DTK cc. * m4/imaxabs.m4 (gl_FUNC_IMAXABS): Also test whether imaxabs is defined as a function. * modules/imaxabs (configure.ac): Test whether imaxabs is defined, not whether it is declared. 2011-09-01 Bruno Haible Tests for module 'strtoumax'. * modules/strtoumax-tests: New file. * tests/test-strtoumax.c: New file. Tests for module 'strtoimax'. * modules/strtoimax-tests: New file. * tests/test-strtoimax.c: New file. Tests for module 'imaxdiv'. * modules/imaxdiv-tests: New file. * tests/test-imaxdiv.c: New file. Tests for module 'imaxabs'. * modules/imaxabs-tests: New file. * tests/test-imaxabs.c: New file. 2011-09-01 Bruno Haible pthread: Determine $(LIB_PTHREAD) correctly on IRIX 6.5. * m4/pthread.m4 (gl_PTHREAD_CHECK): Check for pthread_join, not pthread_create. 2011-09-01 Paul Eggert openat: work around AIX 7.1 fstatat issue This should fix the problem that was not properly fixed in the previous change, dated 2011-08-30. * lib/fstatat.c: Include twice, the first with __need_system_stat_h defined. (orig_fstatat) [HAVE_FSTATAT]: New function. (rpl_fstatat): Go back to the old way of doing things, except call orig_fstatat instead of fstatat. * m4/openat.m4 (gl_FUNC_FSTATAT): Remove unnecessary check for openat. Remove unnecessary check whether fstatat fills in st_size etc. 2011-09-01 Bruno Haible sys_select: Avoid a syntax error regarding timespec_t on IRIX 6.5. * lib/sys_select.in.h [__sgi]: When included from , just include the system's header. 2011-08-31 Jim Meyering tests: avoid spurious assertion failure in test-float.c on ppc64 * tests/test-float.c (test_long_double): Comment out an assertion, LDBL_MIN_EXP <= DBL_MIN_EXP, that is failing at least on PowerPC-64 with gcc-4.4.4. maint: indent with spaces, not TABs I need to get in the habit of running gnulib's "make check". Both of these would have been caught. * m4/largefile.m4: Indent with spaces, not TABs. * lib/parse-datetime.y (iso_8601_time): Likewise. Spotted by Pádraig Brady. test-parse-datetime.c: accommodate a relatively strict gcc warning * tests/test-parse-datetime.c (gmt_offset): Declare function "static", to avoid a warning from gcc's -Werror=missing-declarations. Insert a few spaces-before-funcall-parenthesis. 2011-08-17 J.T. Conklin parse-datetime: accept ISO 8601 date and time rep with "T" separator The parser now accepts ISO 8601 date-time strings with "T" as the separator. It has long parsed dates like "2004-02-29 16:21:42" with a space between the date and time strings. Now it also parses "2004-02-29T16:21:42" and fractional-second and time-zone-annotated variants like "2004-02-29T16:21:42.333-07:00" * lib/parse-datetime.y: Parse ISO 8601 extended date and time of day representation using the 'T' separator character. * doc/parse-datetime.texi (General date syntax): replace use of deprecated --iso-8601 option with --rfc-3339 in example of date command output formats that can be parsed. * tests/test-parse-datetime.c (tm_diff): New function, taken from lib/parse-datetime.y. (gmt_offset): New function. (main): Add additional test cases to validate ISO8601 extended date and time of day parsing. 2011-08-31 Bruno Haible freopen: Documentation. * doc/posix-functions/freopen.texi: Document the bug with the NULL file name. Reported by Claudio Bley . 2011-08-31 Claudio Bley (tiny change) freopen: Don't crash if the filename argument is NULL. * lib/freopen.c (rpl_freopen): Don't compare the filename if it is NULL. 2011-08-30 Paul Eggert openat: work around AIX 7.1 fstatat bug Problem reported by Kevin Brott for GNU tar, in the thread containing . * lib/fstatat.c (rpl_fstatat): Do not invoke underlying fstatat if FSTATAT_ST_SIZE_ETC_BROKEN. (fstatat) [FSTATAT_ST_SIZE_ETC_BROKEN && HAVE_FSTATAT]: #define to rpl_fstatat. * m4/openat.m4 (gl_FUNC_FSTATAT): New macro, with the fstatat-relevant part of gl_FUNC_OPENAT. Also, check for the AIX 7.1 bug, and use AC_CHECK_FUNCS_ONCE for fstatat. (gl_FUNC_OPENAT): Use it. Use AC_CHECK_FUNCS_ONCE for fchmodat, mkdirat, openat and unlinkat. 2011-08-30 Bruno Haible Avoid endless recursions if config.h includes some header files. * lib/fopen.c (__need_FILE): Define already before including config.h. * lib/freopen.c (__need_FILE): Likewise. * lib/open.c (__need_system_fcntl_h): Likewise. * lib/stat.c (__need_system_sys_stat_h): Likewise. * lib/lstat.c (__need_system_sys_stat_h): Likewise. Reported by Michael Goffioul . 2011-08-25 Karl Berry * config/srclist.txt (ylwrap): new try. * build-aux/ylwrap: new file. 2011-08-23 Bruno Haible tmpdir: Use a good default directory on native Windows. * lib/tmpdir.c: Include , pathmax.h. (P_tmpdir): Default to _P_tmpdir on native Windows. (path_search): On native Windows, try the value returned by GetTempPath before trying P_tmpdir. * modules/tmpdir (Depends-on): Add pathmax. Suggested by John Darrington . 2011-08-20 Reuben Thomas doc: fix typo in README-release * top/README-release: Capitalize first word of a sentence. 2011-08-19 Jim Meyering fts: do not exhaust memory when processing million-entry directories Before this change, traversing (via rm -rf, find, du, etc.) an N-entry directory would require about 256*N bytes of memory. Thus, it was easy to construct a directory too large to be processed by any of those tools. With this change, fts' maximum memory utilization is now limited to around 30MB. * lib/fts.c (FTS_MAX_READDIR_ENTRIES): Define. (fts_read): When we've processed the final entry (i.e., when ->fts_link is NULL) and fts_dirp is non-NULL, call fts_build using the parent entry to read any remaining entries. Dispatch depending on what fts_build returns: - NULL+stop, aka failure: stop - NULL otherwise: move up in the dir hierarchy - non-NULL: handle this new entry (fts_build): Declare and use new local, continue_readdir. Prepare to be called from fts_read, when the entries from a partially-read directory have just been exhausted. In that case, we'll skip the opendir and instead use the parent's fts_dirp and derive dir_fd from that. Finally, in the readdir loop, if we read max_entries entries, exit the loop ensuring *not* to call closedir. This is required so that fts_dirp can be reused on a subsequent call. Prompted by Ben England's report of memory exhaustion in find and rm -rf vs. NFS: https://bugzilla.redhat.com/719749. maint: fts: move decl of `dp' down into while loop; split a long line * lib/fts.c (fts_build): No semantic change. fts: add/use new struct member, fts_dirp We are about to use this to manage any directory with too many entries to read all of them into memory at once. To do that, we'll need to save the DIR* pointer in each affected FTSENT struct. * lib/fts_.h: Include . (struct FTSENT) [fts_dirp]: New member. * lib/fts.c (closedir_and_clear): Define. Use it in place of closedir so that we are sure to clear the new fts_dirp member when done with it. (fts_alloc): Initialize the new member. (fts_lfree): Free, if needed. maint: fts: give __opendir2 a new parameter and rename * lib/fts.c (__opendir2): Give it a new parameter, Pdir_fd, rather than surreptitiously using sole caller's "dir_fd". (fts_opendir): Rename from __opendir2. maint: fts.c: remove __opendir2's now-unused parameter, oflag * lib/fts.c (__opendir2): Remove unused parameter, oflag. maint: fts.c: correct off-by-one indentation * lib/fts.c (fts_build): Correct indentation, change style of a couple of block comments, and bracing style. maint: fts.c: move __opendir2 #define "up" out of function body * lib/fts.c (__opendir2): Move "up". No semantic change. maint: fts.c: remove #if-0'd FTS_WHITEOUT code * lib/fts.c: Remove #if-0'd FTS_WHITEOUT code. It's been #if-0'd out for a long time and besides was useful only on BSD systems. 2011-08-18 Paul Eggert regex: port to Stratus OpenVOS * lib/regex_internal.h (internal_function) [!_LIBC]: Simply define to empty, rather than attempting nonportable optimizations. Problem reported by Paul Green in: http://lists.gnu.org/r/bug-diffutils/2011-08/msg00047.html and fix suggested by Eric Blake in: http://lists.gnu.org/r/bug-gnulib/2011-08/msg00143.html 2011-08-17 Eric Blake getcwd: fix test failures on mingw * lib/getcwd.c (__getcwd): Early exit for ERANGE. * tests/test-getcwd.c (test_abort_bug, test_long_name): Don't fail test if long directory cannot be created, and allow mingw errno. getcwd-lgpl: fix m4 to match relaxed test for BSD * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Relax probe. (gl_FUNC_GETCWD_SIGNATURE): New macro. (gl_FUNC_GETCWD_LGPL, gl_FUNC_GETCWD): Use it. * doc/posix-functions/getcwd.texi (getcwd): Tweak mentions of signature problem. getcwd: fix compilation on mingw64 * lib/unistd.in.h (includes) [mingw]: Include for getcwd. Reported by Marc-André Lureau. pipe2: silence compiler warning * lib/pipe2.c (pipe2): Hide label if it is not used. 2011-08-15 Ben Pfaff relocatable-prog: fix link error * modules/relocatable-prog (configure.ac) [RELOCATABLE]: Also invoke AC_LIBOBJ([relocatable]). This invocation was previously in the gl_RELOCATABLE_LIBRARY macro. That invocation was moved into modules/relocatable-lib without noticing that modules/relocatable-prog also invokes gl_RELOCATABLE_LIBRARY and also needs to build relocatable.c. 2011-08-12 Paul Eggert getaddrinfo: fix sh typo in gai_strerrorA decl checking * m4/getaddrinfo.m4 (gl_GETADDRINFO): Fix typo in the generated shell code: it contained a 'break' that was not in a loop. Apparently the macro assumed that AC_CHECK_DECLS is implemenented via a shell-language loop; this may have been true in old Autoconf versions, but it's not true in Autoconf 2.68. I found this bug when testing coreutils git on Solaris 8, whose shell complains about the syntax error. 2011-08-12 Simon Josefsson * lib/base64.c: Fix comment to reference RFC 4648. Suggested by Bruno Haible and Gijs van Tulder . 2011-08-11 Paul Eggert * build-aux/bootstrap (slurp): Remove obsolescent gettext.m4 patch. po/Makefile.in.in: fix make -q problem * build-aux/po/Makefile.in.in (check-macro-version): Remove this rule, since there's no file named 'check-macro-version' and its use as a file breaks make -q. (all): Don't depend on check-macro-version. (CHECK_MACRO_VERSION): New macro. (stamp-po): Use it. configmake: fix make -q problem * modules/configmake (configmake.h): Update configmake.h's time stamp even if the file does not change. Otherwise, 'make -q' fails. Problem reported by Simon Josefsson in . 2011-08-11 Jim Meyering git-version-gen: correct the advice in a comment * build-aux/git-version-gen: Correct comment. Don't recommend to list .tarball-version in .gitignore. 2011-08-10 Paul Eggert base64: fix off-by-one buffer size bug Problem and (trivial) fix reported by Gijs van Tulder in . * lib/base64.c (base64_decode_alloc_ctx): Allocate one more byte. * tests/test-base64.c (main): Catch the bug. 2011-08-10 Eric Blake closein: correct comments * lib/closein.c (close_stdin): Improve comments. 2011-08-09 Bruno Haible More tests for 'fseeko'. * tests/test-fseeko3.c: New file, from Eric Blake. * tests/test-fseeko3.sh: New file. * modules/fseeko-tests (Files): Add them. (TESTS): Add test-fseeko3.sh. (check_PROGRAMS): Add test-fseeko3. 2011-08-09 Eric Blake fseeko: remove unneeded hack * lib/fseeko.c (fseeko): Don't special-case SEEK_END. fseeko: fix bug on glibc * lib/fseeko.c (fseeko): Set stream offset to match fd offset. Reported by John W. Eaton. 2011-08-08 Bruno Haible unictype/base: Fix interoperability with preinstalled libunistring. * modules/unictype/base (configure.ac): Bump minimum version to 0.9.4. Reported by Simon Josefsson. 2011-08-08 Bruno Haible iswblank: Detect declaration correctly. * m4/iswblank.m4 (gl_FUNC_ISWBLANK): Use correct headers in AC_CHECK_DECLS invocation. 2011-08-08 Bruno Haible tcgetsid: Detect declaration correctly. * m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Use correct headers in AC_CHECK_DECLS invocation. Reported by Simon Josefsson. 2011-08-08 Eric Blake largefile: fix typo that regressed large file support * modules/largefile (configure.ac-early): Fix section name. 2011-08-06 Karl Berry * MODULES.html.sh (func_all_files): _Noreturn is no longer a separate module. 2011-08-05 Simon Josefsson openat: Fix warnings and commens when building unlinkat.c on Hurd. * lib/unlinkat.c: Mention Hurd in comments. Include stdlib.h to get prototype for free. 2011-08-04 Bruno Haible Tests for module 'pathmax'. * modules/pathmax-tests: New file. * tests/test-pathmax.c: New file. canonicalize-lgpl: Support larger filenames on the Hurd. * lib/canonicalize-lgpl.c (__realpath): Bump path_max fallback to 8192. Reported by Paul Eggert. pathmax: Leave PATH_MAX undefined on the Hurd, and a constant otherwise. * lib/pathmax.h (PATH_MAX): Leave it undefined on GNU/Hurd. * lib/chdir-long.h: Include pathmax.h. * lib/clean-temp.c (PATH_MAX): Remove code that is done by pathmax.h. * lib/getcwd.c: Include pathmax.h instead of . (PATH_MAX): Remove code that is done by pathmax.h. * lib/canonicalize.c (PATH_MAX): Provide a fallback value. * lib/tmpfile.c: Add a comment. * m4/pathmax.m4 (gl_PATHMAX): Don't test for pathconf. * modules/chdir-long (Depends-on): Add pathmax. * modules/getcwd (Depends-on): Add pathmax. * tests/test-getcwd.c (test_abort_bug): Avoid syntax error when PATH_MAX is not defined. * doc/posix-headers/limits.texi: Mention the pathmax module. * NEWS: Mention the change. 2011-08-02 Bruno Haible pthread_sigmask: Actually use results of gl_THREADLIB. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Test and require gl_THREADLIB, not gl_[]THREADLIB. Reported by Eric Blake. 2011-08-02 Jim Meyering maint.mk: relax the default _gl_TS_function_match regexp * top/maint.mk (_gl_TS_function_match): Don't require at least one space between function name and "(" in an "extern" declaration. That would fail to match a decl with no space there: extern void foo(); 2011-07-31 Iain Nicol git-version-gen: document that EXTRA_DIST must include .version * build-aux/git-version-gen: In the how-to-use comment, document that EXTRA_DIST must include .version. Otherwise, "make distcheck" will fail when run from an unpacked distribution tarball. 2011-08-01 Bruno Haible wctype-h: Fix last change. * m4/wctype_h.m4 (gl_WCTYPE_H): If towlower is defined, set REPLACE_TOWLOWER to 0. Reported by Sam Steingold . 2011-07-31 Bruno Haible frexpl: Update autoconf test. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Update overrides of , according to changes of 2011-06-20. 2011-07-31 Bruno Haible sys_utsname: Add support for Minix. * lib/sys_utsname.in.h [Minix]: Include before . * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H): Likewise. * doc/posix-headers/sys_utsname.texi: Document the Minix problem. 2011-07-31 Bruno Haible strings: Add support for Minix. * lib/strings.in.h [Minix]: Include before . * m4/strings_h.m4 (gl_HEADER_STRINGS_H_BODY): Likewise. * doc/posix-headers/strings.texi: Document the Minix problem. 2011-07-31 Bruno Haible wctype-h: Add support for Minix. * m4/wctype_h.m4 (gl_WCTYPE_H): Test whether towlower is declared. Set REPLACE_TOWLOWER. * modules/wctype-h (Makefile.am): Substitute REPLACE_TOWLOWER. * lib/wctype.in.h (towlower, towupper): Test REPLACE_TOWLOWER, not REPLACE_ISWCNTRL. 2011-07-31 Paul Eggert * lib/xalloc.h (DEFAULT_MXFAST): Track 64-bit glibc. This is a performance improvement for 64-bit hosts: it causes the value of DEFAULT_MXFAST to track what's in glibc on such hosts. 2011-07-31 Bruno Haible stdioext: Add support for Minix. * lib/fbufmode.c (fbufmode) [__minix]: Add conditional code. * lib/fpurge.c (fpurge): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. * lib/fflush.c (clear_ungetc_buffer): Update comment. * m4/fpending.m4 (gl_PREREQ_FPENDING): Add a variant for Minix. 2011-07-31 Bruno Haible errno: Port to Minix. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Test also whether ENETRESET and ECONNABORTED are defined. * lib/errno.in.h (ENETRESET, GNULIB_defined_ENETRESET, ECONNABORTED, GNULIB_defined_ECONNABORTED): New macros. * lib/strerror-override.h (strerror_override): Test also GNULIB_defined_ENETRESET, GNULIB_defined_ECONNABORTED. * lib/strerror-override.c (strerror_override): Handle also ENETRESET, ECONNABORTED. * doc/posix-headers/errno.texi: Mention the Minix problem. 2011-07-31 Bruno Haible Work around declaration collisions on Minix. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): If mbsinit is declared but not defined, set REPLACE_MBSINIT. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): If mbrtowc is declared but not defined, set REPLACE_MBRTOWC. * m4/mbrlen.m4 (gl_FUNC_MBRLEN): If mbrlen is declared but not defined, set REPLACE_MBRLEN. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): If mbsrtowcs is declared but not defined, set REPLACE_MBSRTOWCS. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): If wcrtomb is declared but not defined, set REPLACE_WCRTOMB. * m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS): If wcsrtombs is declared but not defined, set REPLACE_WCSRTOMBS. 2011-07-31 Bruno Haible Add support for Minix with ACK compiler. * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): New macro. * gnulib-tool (func_import, func_create_testdir): Emit invocation of gl_PROG_AR_RANLIB instead of AC_PROG_RANLIB. 2011-07-31 Bruno Haible Documentation about Minix. * doc/posix-headers/*.texi: Add info about Minix 3.1.8. * doc/glibc-headers/*.texi: Likewise. * doc/posix-functions/*.texi: Likewise. * doc/glibc-functions/*.texi: Likewise. 2011-07-31 Bruno Haible snippet/warn-on-use: Fix indentation. * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix indentation. 2011-07-25 Jim Meyering tests: test-update-copyright.sh: remove unnecessary "rm" commands * tests/test-update-copyright.sh: Remove unused rm -f $TMP.*.bak commands. 2011-07-27 Jim Meyering maint.mk: avoid sc_prohibit_always-defined_macros failure in coreutils * top/maint.mk (gl_extract_significant_defines_): Now that SA_RESETHAND and SA_RESTART are #defined (albeit conditionally) in gnulib/lib/signal.in.h, and now that we recommend to define-if-undefined those two symbols in application code, we must filter them out of the "significant" list. This avoids a "make syntax-check" failure in coreutils. 2011-07-26 Eric Blake warnings: add comments about previous patch * m4/absolute-header.m4: Document AS_VAR_PUSHDEF limitation. * m4/include_next.m4: Likewise. * m4/warn-on-use.m4: Likewise. * m4/warnings.m4: Likewise, and simplify use. Suggested by Stefano Lattarini. include-next, warnings: support older autoconf * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Use AS_VAR_PUSHDEF in a way that works with older autoconf. * m4/warnings.m4 (gl_WARN_ADD): Likewise. Reported by Daniel P. Berrange. 2011-07-25 Bruno Haible fseek, ftell: Fix doc. * doc/posix-functions/fseek.texi: Reword statement about AC_SYS_LARGEFILE. * doc/posix-functions/ftell.texi: Likewise. 2011-07-25 Paul Eggert Bruno Haible Add dependencies to the 'largefile' module. * modules/fopen (Depends-on): Add 'largefile'. * modules/freopen (Depends-on): Likewise. * modules/fseeko (Depends-on): Likewise. * modules/ftello (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/lseek (Depends-on): Likewise. * modules/lstat (Depends-on): Likewise. * modules/mkostemp (Depends-on): Likewise. * modules/mkostemps (Depends-on): Likewise. * modules/mkstemp (Depends-on): Likewise. * modules/mkstemps (Depends-on): Likewise. * modules/open (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/pread (Depends-on): Likewise. * modules/pwrite (Depends-on): Likewise. * modules/scandir (Depends-on): Likewise. * modules/stat (Depends-on): Likewise. * modules/tmpfile (Depends-on): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Do not require AC_SYS_LARGEFILE, since the containing module now depends on the largefile module. * m4/tempname.m4 (gl_FUNC_GEN_TEMPNAME): Likewise. * doc/posix-functions/fopen.texi: Mention that the problem of 32-bit off_t is fixed by gnulib. * doc/posix-functions/freopen.texi: Likewise. * doc/posix-functions/fseeko.texi: Likewise. * doc/posix-functions/fstatat.texi: Likewise. * doc/posix-functions/ftello.texi: Likewise. * doc/posix-functions/glob.texi: Likewise. * doc/posix-functions/lseek.texi: Likewise. * doc/posix-functions/lstat.texi: Likewise. * doc/posix-functions/mkstemp.texi: Likewise. * doc/posix-functions/open.texi: Likewise. * doc/posix-functions/openat.texi: Likewise. * doc/posix-functions/pread.texi: Likewise. * doc/posix-functions/pwrite.texi: Likewise. * doc/posix-functions/scandir.texi: Likewise. * doc/posix-functions/stat.texi: Likewise. * doc/posix-functions/tmpfile.texi: Likewise. * doc/glibc-functions/mkostemp.texi: Likewise. * doc/glibc-functions/mkostemps.texi: Likewise. * doc/glibc-functions/mkstemps.texi: Likewise. 2011-07-25 Bruno Haible fcntl: Move AC_LIBOBJ invocation to module description. * m4/fcntl.m4 (gl_REPLACE_FCNTL): Don't invoke AC_LIBOBJ. * modules/fcntl (configure.ac): Invoke AC_LIBOBJ. fcntl: Remove call-in from fchdir.m4. * m4/fcntl.m4 (gl_FUNC_FCNTL): Conditionally invoke gl_TEST_FCHDIR. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't invoke gl_REPLACE_FCNTL. dup3: Remove potential call-in from fchdir.m4. * m4/dup3.m4 (gl_FUNC_DUP3): Add comment about fchdir. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Remove comment about dup3. dup2: Move AC_LIBOBJ invocation to module description. * m4/dup2.m4 (gl_REPLACE_DUP2): Remove macro. (gl_FUNC_DUP2): Instead of gl_REPLACE_DUP2, just set REPLACE_DUP2 to 1. Don't invoke AC_LIBOBJ. * modules/dup2 (configure.ac): Invoke AC_LIBOBJ. dup2: Remove call-in from fchdir.m4. * m4/dup2.m4 (gl_FUNC_DUP2): Conditionally invoke gl_TEST_FCHDIR. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't invoke gl_REPLACE_DUP2. fclose: Move AC_LIBOBJ invocation to module description. * m4/fclose.m4 (gl_REPLACE_FCLOSE): Remove macro. (gl_FUNC_FCLOSE): Instead of gl_REPLACE_FCLOSE, just set REPLACE_FCLOSE to 1. * modules/fclose (configure.ac): Invoke AC_LIBOBJ. fclose: Remove call-in from close.m4. * m4/fclose.m4 (gl_FUNC_FCLOSE): Invoke gl_FUNC_CLOSE. * m4/close.m4 (gl_FUNC_CLOSE): Don't invoke gl_REPLACE_FCLOSE. close: Move AC_LIBOBJ invocation to module description. * m4/close.m4 (gl_REPLACE_CLOSE): Remove macro. (gl_FUNC_CLOSE): Instead of gl_REPLACE_CLOSE, just set REPLACE_CLOSE to 1. * modules/close (configure.ac): Invoke AC_LIBOBJ. close: Remove call-in from fchdir.m4. * m4/close.m4 (gl_FUNC_CLOSE): Conditionally invoke gl_TEST_FCHDIR. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't invoke gl_REPLACE_CLOSE. open: Move AC_LIBOBJ invocation to module description. * m4/open.m4 (gl_REPLACE_OPEN): Remove macro. (gl_FUNC_OPEN): Instead of gl_REPLACE_OPEN, just set REPLACE_OPEN to 1. * modules/open (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_OPEN. open: Remove call-in from fchdir.m4. * m4/open.m4 (gl_FUNC_OPEN): Conditionally invoke gl_TEST_FCHDIR. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Don't invoke gl_REPLACE_OPEN. fchdir: Start to remove gl_REPLACE_* idiom. * m4/fchdir.m4 (gl_TEST_FCHDIR): New macro. (gl_FUNC_FCHDIR): Invoke it. 2011-07-25 Paul Eggert * lib/ftell.c (ftell): Comment out cast. close: use gl_REPLACE_FCLOSE only if defined * m4/close.m4 (gl_REPLACE_CLOSE): Use gl_REPLACE_FCLOSE only if it is defined. The close module doesn't depend on the fclose module any more, so gl_REPLACE_CLOSE's existence cannot be assumed. See . I reproduced the problem with "./gnulib-tool --test close sys_socket". 2011-07-24 Jim Meyering test-select.h: avoid warning when using gcc's -Wmissing-declarations * tests/test-select.h (test_function): Declare as "static". 2011-07-24 Bruno Haible doc: Mention the effects of AC_SYS_LARGEFILE. * doc/posix-functions/aio_cancel.texi: Mention the effects of AC_SYS_LARGEFILE on this function. * doc/posix-functions/aio_error.texi: Likewise. * doc/posix-functions/aio_fsync.texi: Likewise. * doc/posix-functions/aio_read.texi: Likewise. * doc/posix-functions/aio_return.texi: Likewise. * doc/posix-functions/aio_suspend.texi: Likewise. * doc/posix-functions/aio_write.texi: Likewise. * doc/posix-functions/fgetpos.texi: Likewise. * doc/posix-functions/fopen.texi: Likewise. * doc/posix-functions/freopen.texi: Likewise. * doc/posix-functions/fsetpos.texi: Likewise. * doc/posix-functions/fstatvfs.texi: Likewise. * doc/posix-functions/ftruncate.texi: Likewise. * doc/posix-functions/ftw.texi: Likewise. * doc/posix-functions/getrlimit.texi: Likewise. * doc/posix-functions/glob.texi: Likewise. * doc/posix-functions/lio_listio.texi: Likewise. * doc/posix-functions/lockf.texi: Likewise. * doc/posix-functions/mkstemp.texi: Likewise. * doc/posix-functions/mmap.texi: Likewise. * doc/posix-functions/nftw.texi: Likewise. * doc/posix-functions/openat.texi: Likewise. * doc/posix-functions/opendir.texi: Likewise. * doc/posix-functions/posix_fadvise.texi: Likewise. * doc/posix-functions/posix_fallocate.texi: Likewise. * doc/posix-functions/pread.texi: Likewise. * doc/posix-functions/pwrite.texi: Likewise. * doc/posix-functions/readdir.texi: Likewise. * doc/posix-functions/readdir_r.texi: Likewise. * doc/posix-functions/rewinddir.texi: Likewise. * doc/posix-functions/scandir.texi: Likewise. * doc/posix-functions/seekdir.texi: Likewise. * doc/posix-functions/setrlimit.texi: Likewise. * doc/posix-functions/statvfs.texi: Likewise. * doc/posix-functions/telldir.texi: Likewise. * doc/posix-functions/tmpfile.texi: Likewise. * doc/posix-functions/truncate.texi: Likewise. * doc/glibc-functions/fallocate.texi: Likewise. * doc/glibc-functions/fstatfs.texi: Likewise. * doc/glibc-functions/fts_children.texi: Likewise. * doc/glibc-functions/fts_read.texi: Likewise. * doc/glibc-functions/getdirentries.texi: Likewise. * doc/glibc-functions/mkostemp.texi: Likewise. * doc/glibc-functions/mkostemps.texi: Likewise. * doc/glibc-functions/mkstemps.texi: Likewise. * doc/glibc-functions/preadv.texi: Likewise. * doc/glibc-functions/pwritev.texi: Likewise. * doc/glibc-functions/sendfile.texi: Likewise. * doc/glibc-functions/statfs.texi: Likewise. 2011-07-24 Bruno Haible doc: Fix typo. * doc/posix-functions/fstat.texi: Talk about fstat, not stat. 2011-07-24 Bruno Haible doc: Mention fsusage. * doc/posix-functions/statvfs.texi: Mention the fsusage module. 2011-07-24 Bruno Haible doc: Mention new glibc headers and functions. * doc/glibc-headers/gshadow.texi: New file. * doc/glibc-functions/endsgent.texi: New file. * doc/glibc-functions/fgetsgent.texi: New file. * doc/glibc-functions/fgetsgent_r.texi: New file. * doc/glibc-functions/getsgent.texi: New file. * doc/glibc-functions/getsgent_r.texi: New file. * doc/glibc-functions/getsgnam.texi: New file. * doc/glibc-functions/getsgnam_r.texi: New file. * doc/glibc-functions/putsgent.texi: New file. * doc/glibc-functions/setsgent.texi: New file. * doc/glibc-functions/sgetsgent.texi: New file. * doc/glibc-functions/sgetsgent_r.texi: New file. * doc/glibc-functions/malloc_info.texi: New file. * doc/glibc-functions/preadv.texi: New file. * doc/glibc-functions/pwritev.texi: New file. * doc/glibc-functions/register_printf_modifier.texi: New file. * doc/glibc-functions/register_printf_specifier.texi: New file. * doc/glibc-functions/register_printf_type.texi: New file. * doc/glibc-functions/pthread_attr_getaffinity_np.texi: New file. * doc/glibc-functions/pthread_attr_setaffinity_np.texi: New file. * doc/glibc-functions/pthread_getaffinity_np.texi: New file. * doc/glibc-functions/pthread_getname_np.texi: New file. * doc/glibc-functions/pthread_mutex_consistent_np.texi: New file. * doc/glibc-functions/pthread_mutexattr_getrobust_np.texi: New file. * doc/glibc-functions/pthread_mutexattr_setrobust_np.texi: New file. * doc/glibc-functions/pthread_setaffinity_np.texi: New file. * doc/glibc-functions/pthread_setname_np.texi: New file. * doc/glibc-functions/pthread_sigqueue.texi: New file. * doc/glibc-functions/pthread_timedjoin_np.texi: New file. * doc/glibc-functions/pthread_tryjoin_np.texi: New file. * doc/glibc-functions/qsort_r.texi: New file. * doc/glibc-functions/quick_exit.texi: New file. * doc/glibc-functions/syncfs.texi: New file. * doc/gnulib.texi: Include them. (Glibc gshadow.h, Glibc sys/uio.h): New sections. * doc/posix-functions/psiginfo.texi: Fix info about glibc version. * doc/posix-functions/pthread_mutex_consistent.texi: Likewise. * doc/posix-functions/pthread_mutexattr_getrobust.texi: Likewise. * doc/posix-functions/pthread_mutexattr_setrobust.texi: Likewise. * doc/glibc-functions/execvpe.texi: Likewise. 2011-07-24 Paul Eggert ftell: don't include * lib/ftell.c: Don't include . is now guaranteed to define off_t, and the ftell module depends on the stdio module. ftell: do not assume wraparound signed arithmetic * lib/ftell.c: Include . (ftell): Don't assume wraparound signed arithmetic. 2011-07-24 Bruno Haible close: No longer depend on module 'fclose'. * modules/close (Depends-on): Remove fclose. * NEWS: Mention the change. Suggested by Sam Steingold . 2011-07-24 Bruno Haible fsusage: Enable large volume support on AIX >= 5.2. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): If 'struct statvfs64' has a larger f_blocks field than 'struct statvfs', define STAT_STATVFS64 instead of STAT_STATVFS. * lib/fsusage.c (get_fs_usage) [STAT_STATVFS64]: Use statvfs64. fsusage: Restore previous behaviour on AIX, Cygwin, Interix. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Enforce a 64-bit struct statvfs f_blocks field only on MacOS X. fsusage: Support large volumes on glibc/Hurd, HP-UX, Solaris, MacOS X. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Require AC_SYS_LARGEFILE. * modules/fsusage (Depends-on): Add largefile. 2011-07-24 Paul Eggert * README: Modernize discussion of signed integers. Assuming overflow wraparound is no longer safe. Mention ones' complement and signed magnitude. 2011-07-22 Bruno Haible select tests, pselect tests: Refactor. * tests/test-select.h: New file, extracted from tests/test-select.c. (select_fn): New type. (test, do_select, do_select_nowait, do_select_wait, test_tty, test_connect_first, test_accept_first, test_pair, test_socket_pair, test_pipe): Add my_select argument. (test_function): Renamed from main. Add my_select argument. * tests/test-select.c: Move most code to tests/test-select.h. Include test-select.h. * modules/select-tests (Files): Add tests/test-select.h. * tests/test-pselect.c: Include test-select.h instead of test-select.c. (my_select, main): New functions. * modules/pselect-tests (Files): Add tests/test-select.h, tests/macros.h, tests/signature.h. (Depends-on): Remove select-tests. Add dependencies of test-select.h. (configure.ac): Check for . 2011-07-22 Bruno Haible sys_select tests: Check the signature of FD_*. * tests/test-select.c (FD_CLR, FD_ISSET, FD_SET, FD_ZERO): Move signature tests from here... * tests/test-sys_select.c (FD_CLR, FD_ISSET, FD_SET, FD_ZERO): ... to here. * modules/sys_select-tests (Files): Add tests/signature.h. 2011-07-22 Paul Eggert largefile: new module, replacing large-inode Pádraig Brady suggested this in . * MODULES.html.sh: Add largefile, remove large-inode. * modules/largefile, m4/largefile.m4: New files. * modules/large-inode, m4/large-inode.m4: Remove. fsusage: port to MacOS X 10.7 with 4 TiB file systems * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Reject statvfs implementations that use only 32 bits to count blocks. On typical hosts with 1024-byte blocks, this fails with file systems as small as 4 TiB. Problem reported by Herb Wartens and this should also fix a similar problem reported by Tim Spriggs . large-inode: New module * MODULES.html.sh: Add it. * modules/large-inode, m4/large-inode.m4: New files. extensions: Enable extensions on MacOS X 10.5 and later. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define _DARWIN_C_SOURCE. 2011-07-22 Kamil Dudka file-has-acl: use acl_extended_file_nofollow if available * lib/acl-internal.h (HAVE_ACL_EXTENDED_FILE): New macro. (acl_extended_file): New macro. * lib/file-has-acl.c (file_has_acl): Use acl_extended_file_nofollow. * m4/acl.m4 (gl_FUNC_ACL): Check for acl_extended_file_nofollow. 2011-07-21 Bruno Haible Declare system functions in a way that works with C++. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR) [C++]: In the test program, declare fdopendir as extern "C". * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS) [C++]: In the test program, declare frexpl as extern "C". * m4/getaddrinfo.m4 (gl_GETADDRINFO) [C++]: In the test program, declare gai_strerror as extern "C". * m4/getdomainname.m4 (gl_FUNC_GETDOMAINNAME) [C++]: In the test programs, declare gai_strerror as extern "C". * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R) [C++]: In the test program, declare getlogin_r as extern "C". * m4/ioctl.m4 (gl_FUNC_IOCTL) [C++]: In the test program, declare ioctl as extern "C". * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS) [C++]: In the test program, declare ldexpl as extern "C". * m4/logb.m4 (gl_FUNC_LOGB) [C++]: In the test programs, declare logb as extern "C". * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS) [C++]: In the test program, declare getmntinfo as extern "C". * m4/stpncpy.m4 (gl_FUNC_STPNCPY) [C++]: In the test program, declare stpncpy as extern "C". * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS) [C++]: In the test program, declare __xpg_strerror_r as extern "C". * m4/strndup.m4 (gl_FUNC_STRNDUP) [C++]: In the test program, declare strndup as extern "C". * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT) [C++]: In the test program, declare memset and bzero as extern "C". Reported by Sam Steingold . 2011-07-12 Jim Meyering maint.mk: prohibit inclusion of "verify.h" without use * top/maint.mk (sc_prohibit_verify_without_use): New rule. 2011-07-19 Pádraig Brady timer-time: A new module to check for timer_settime() * m4/timer_time.m4: Check for the posix function. * modules/timer-time: Add the new module. * MODULES.html.sh (Compat checks for POSIX:2008 functions): Mention it. 2011-07-19 Paul Eggert Bruno Haible pthread_sigmask: assume POSIX threads if --avoid=threadlib * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): If gl_THREADLIB is not defined, assume POSIX threads and look for pthread_sigmask in $LIBS, without changing $CPPFLAGS. 2011-07-19 Bruno Haible strstr: Update cross-compilation guess. * m4/strstr.m4 (gl_FUNC_STRSTR): On glibc > 2.12 with x86 or x86_64 CPUs, guess no, in view of glibc BZ #12100 . Suggested by Eric Blake. Reported by Reuben Thomas. 2011-07-19 Pádraig Brady getopt-gnu: suppress core dumps from detection code * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Use the nocrash module to suppress core dumps that may well occur on glibc systems. * modules/getopt-gnu: Depend on nocrash. 2011-07-16 Paul Eggert pthread_sigmask: ensure usleep is declared * lib/pthread_sigmask.c [PTHREAD_SIGMASK_UNBLOCK_BUG]: Include , to declare usleep. Needed on Solaris 8, 2011-07-15 Paul Eggert doc: Document NonStop portability issues. * doc/posix-functions/sigaction.texi (sigaction): * doc/posix-headers/signal.texi (signal.h): Document NonStop. See Joachim Schmitz in http://lists.gnu.org/r/bug-coreutils/2011-07/msg00062.html 2011-07-15 Bruno Haible ffsl, ffsll: Avoid unportable behaviour. * lib/ffsl.h (FUNC): Use 'unsigned int' instead of 'int'. 2011-07-15 Bruno Haible ffs: More tests. * tests/test-ffs.c (NBITS): New macro. (main): Add more tests. * tests/test-ffsl.c (NBITS): New macro. (main): Add more tests. * tests/test-ffsll.c (NBITS): New macro. (main): Add more tests. 2011-07-15 Eric Blake ffsl, ffsll: new modules * modules/ffsl: New file. * modules/ffsll: Likewise. * m4/ffsl.m4: Likewise. * m4/ffsll.m4: Likewise. * lib/ffsl.c: Likewise. * lib/ffsl.h: Likewise. * lib/ffsll.c: Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY) (gl_HEADER_STRING_H_DEFAULTS): Add defaults. * modules/string (Makefile.am): Substitute witnesses. * lib/strings.in.h (ffsl, ffsll): Declare. * modules/ffsl-tests: New test file. * modules/ffsll-tests: Likewise. * tests/test-ffsl.c: Likewise. * tests/test-ffsll.c: Likewise. * MODULES.html.sh (Integer arithmetic functions): Mention it. * doc/glibc-functions/ffsl.texi (ffsl): Likewise. * doc/glibc-functions/ffsll.texi (ffsll): Likewise. ffs: fix m4 prerequisite * m4/ffs.m4 (gl_FUNC_FFS): Require strings.h defaults. ffs: avoid undefined behavior * lib/ffs.c (ffs): Provide fallback for non-32-bit int. * tests/test-ffs.c (naive, main): Avoid signed shifts. Reported by Bruno Haible. 2011-07-12 Bruno Haible pthread_sigmask: Rely on module 'threadlib'. * modules/pthread_sigmask (Depends-on): Add threadlib. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Assume gl_THREADLIB is defined. 2011-07-12 Bruno Haible regex: Depend on module 'strcase'. * modules/regex (Depends-on): Add strcase, for strcasecmp(). 2011-07-12 Jim Meyering warn-on-use: fix typo in file name * modules/snippet/warn-on-use (Files): Correct file name: include /snippet/ component in "build-aux/snippet/warn-on-use.h". 2011-07-12 Bruno Haible strings: Document module. * doc/posix-headers/strings.texi: Mention module 'strings'. 2011-07-12 Bruno Haible Rename module '_Noreturn' to 'snippet/_Noreturn'. * modules/snippet/_Noreturn: Renamed from modules/_Noreturn. (Files, Makefile.am): Update. * build-aux/snippet/_Noreturn.h: Renamed from build-aux/_Noreturn.h. * modules/stdlib (Depends-on): Update. 2011-07-12 Bruno Haible * NEWS: Mention the changes. Rename module 'warn-on-use' to 'snippet/warn-on-use'. * modules/snippet/warn-on-use: Renamed from modules/warn-on-use. (Files, Makefile.am): Update. * build-aux/snippet/warn-on-use.h: Renamed from build-aux/warn-on-use.h. * modules/arpa_inet (Depends-on): Update. * modules/ctype (Depends-on): Update. * modules/dirent (Depends-on): Update. * modules/fcntl-h (Depends-on): Update. * modules/glob (Depends-on): Update. * modules/iconv-h (Depends-on): Update. * modules/inttypes-incomplete (Depends-on): Update. * modules/langinfo (Depends-on): Update. * modules/locale (Depends-on): Update. * modules/math (Depends-on): Update. * modules/netdb (Depends-on): Update. * modules/poll-h (Depends-on): Update. * modules/pty (Depends-on): Update. * modules/search (Depends-on): Update. * modules/signal (Depends-on): Update. * modules/spawn (Depends-on): Update. * modules/stdio (Depends-on): Update. * modules/stdlib (Depends-on): Update. * modules/string (Depends-on): Update. * modules/strings (Depends-on): Update. * modules/sys_file (Depends-on): Update. * modules/sys_ioctl (Depends-on): Update. * modules/sys_select (Depends-on): Update. * modules/sys_socket (Depends-on): Update. * modules/sys_stat (Depends-on): Update. * modules/sys_time (Depends-on): Update. * modules/sys_times (Depends-on): Update. * modules/sys_utsname (Depends-on): Update. * modules/sys_wait (Depends-on): Update. * modules/termios (Depends-on): Update. * modules/time (Depends-on): Update. * modules/unistd (Depends-on): Update. * modules/wchar (Depends-on): Update. * modules/wctype-h (Depends-on): Update. * MODULES.html.sh (Support for building libraries and executables): Update. Rename module 'unused-parameter' to 'snippet/unused-parameter'. * modules/snippet/unused-parameter: Renamed from modules/unused-parameter. (Files, Makefile.am): Update. * build-aux/snippet/unused-parameter.h: Renamed from build-aux/unused-parameter.h. * modules/selinux-h (Depends-on): Update. * modules/unistr/base (Depends-on): Update. * MODULES.html.sh (Core language properties): Update. Rename module 'link-warning' to 'snippet/link-warning'. * modules/snippet/link-warning: Renamed from modules/link-warning. (Files, Makefile.am): Update. * build-aux/snippet/link-warning.h: Renamed from build-aux/link-warning.h. * MODULES.html.sh (Support for building libraries and executables): Update. Rename module 'c++defs' to 'snippet/c++defs'. * modules/snippet/c++defs: Renamed from modules/c++defs. (Files, Makefile.am): Update. * build-aux/snippet/c++defs.h: Renamed from build-aux/c++defs.h. * modules/arpa_inet (Depends-on): Update. * modules/ctype (Depends-on): Update. * modules/dirent (Depends-on): Update. * modules/fcntl-h (Depends-on): Update. * modules/glob (Depends-on): Update. * modules/iconv-h (Depends-on): Update. * modules/langinfo (Depends-on): Update. * modules/locale (Depends-on): Update. * modules/math (Depends-on): Update. * modules/netdb (Depends-on): Update. * modules/poll-h (Depends-on): Update. * modules/pty (Depends-on): Update. * modules/search (Depends-on): Update. * modules/signal (Depends-on): Update. * modules/spawn (Depends-on): Update. * modules/stdio (Depends-on): Update. * modules/stdlib (Depends-on): Update. * modules/string (Depends-on): Update. * modules/strings (Depends-on): Update. * modules/sys_ioctl (Depends-on): Update. * modules/sys_select (Depends-on): Update. * modules/sys_socket (Depends-on): Update. * modules/sys_stat (Depends-on): Update. * modules/sys_time (Depends-on): Update. * modules/sys_wait (Depends-on): Update. * modules/termios (Depends-on): Update. * modules/time (Depends-on): Update. * modules/unistd (Depends-on): Update. * modules/wchar (Depends-on): Update. * modules/wctype-h (Depends-on): Update. Rename module 'arg-nonnull' to 'snippet/arg-nonnull'. * modules/snippet/arg-nonnull: Renamed from modules/arg-nonnull. (Files, Makefile.am): Update. * build-aux/snippet/arg-nonnull.h: Renamed from build-aux/arg-nonnull.h. * modules/argv-iter (Depends-on): Update. * modules/arpa_inet (Depends-on): Update. * modules/dirent (Depends-on): Update. * modules/fcntl-h (Depends-on): Update. * modules/fnmatch (Depends-on): Update. * modules/getopt-posix (Depends-on): Update. * modules/glob (Depends-on): Update. * modules/iconv-h (Depends-on): Update. * modules/inttypes-incomplete (Depends-on): Update. * modules/locale (Depends-on): Update. * modules/math (Depends-on): Update. * modules/netdb (Depends-on): Update. * modules/search (Depends-on): Update. * modules/signal (Depends-on): Update. * modules/spawn (Depends-on): Update. * modules/stdio (Depends-on): Update. * modules/stdlib (Depends-on): Update. * modules/string (Depends-on): Update. * modules/strings (Depends-on): Update. * modules/sys_socket (Depends-on): Update. * modules/sys_stat (Depends-on): Update. * modules/sys_time (Depends-on): Update. * modules/sys_times (Depends-on): Update. * modules/sys_utsname (Depends-on): Update. * modules/time (Depends-on): Update. * modules/unistd (Depends-on): Update. * modules/wchar (Depends-on): Update. * MODULES.html.sh (Support for building libraries and executables): Update. 2011-07-12 Paul Eggert Improvements on _Noreturn and related modules. modules/_Exit-tests: test _Noreturn too * tests/test-_Exit.c (MTA, Charlie): New functions, taken from the old tests/test-stdnoreturn.c. This tests the _Noreturn keyword a bit. (main): Use them. stdnoreturn, stdnoreturn-tests: remove modules They're not needed here and a bit premature for use elsewhere. See . * m4/stdnoreturn.m4, modules/stdnoreturn, modules/stdnoreturn-tests: * tests/test-stdnoreturn.c: Remove files. * MODULES.html.sh (_Noreturn ): Remove section. * lib/openat.h, lib/sigpipe-die.h, lib/xalloc.h, lib/xmemdup0.h: * lib/xstrtol.h: Use _Noreturn rather than including and using noreturn. * modules/openat, modules/sigpipe-die, modules/xalloc: * modules/xmemdup0, modules/xstrtol: Remove dependency on stdnoreturn. _Noreturn: Ignore __STDC_VERSION__; observe _MSC_VER. * build-aux/_Noreturn.h (_Noreturn): Ignore __STDC_VERSION__. Reparenthesize to avoid GCC warning. Support Microsoft's syntax. * m4/gnulib-common.m4 (gl_COMMON_BODY): Likewise. _Noreturn-tests: remove module * modules/_Noreturn-tests: Remove. * modules/stdnoreturn-tests (Files): Remove tests/test-_Noreturn.c. * tests/test-_Noreturn.c: Remove. * tests/test-stdnoreturn.c: Merge from the old tests/test-_Noreturn.c, testing both noreturn and _Noreturn. 2011-07-12 Paul Eggert _Noreturn, stdnoreturn, and related modules. * top/maint.mk: Adjust to new noreturn support. (gl_extract_significant_defines_): Omit pattern ATTRIBUTE_NORETURN. (def_sym_regex): Do not remove ATTRIBUTE_NORETURN. xalloc: use stdnoreturn.h * lib/xalloc.h: Include . (_GL_ATTRIBUTE_NORETURN): Remove; all uses replaced with noreturn. * modules/xalloc (Depends-on): Add stdnoreturn. xstrtol: use stdnoreturn.h * lib/xstrtol.h: Include . (_GL_ATTRIBUTE_NORETURN): Remove; all uses replaced with noreturn. * modules/xstrtol (Depends-on): Add stdnoreturn. xmemdup0: use stdnoreturn.h * lib/xmemdup0.h: Include . (_GL_ATTRIBUTE_NORETURN): Remove; all uses replaced with noreturn. * modules/xmemdup0 (Depends-on): Add stdnoreturn. sigpipe-die: use stdnoreturn.h * lib/sigpipe-die.h: Include . (_GL_ATTRIBUTE_NORETURN): Remove; all uses replaced with noreturn. * modules/sigpipe-die (Depends-on): Add stdnoreturn. openat: use stdnoreturn.h * lib/openat.h: Include . (_GL_ATTRIBUTE_NORETURN): Remove; all uses replaced with noreturn. * modules/openat (Depends-on): Add stdnoreturn. * lib/openat-die.c (openat_save_fail): Modernize comment. * lib/xalloc-die.c (xalloc_die): Modernize comment. * lib/glthread/thread.h: Modernize comment. obstack: use _Noreturn * lib/obstack.c (__attribute__): Remove macro. (print_and_abort): Use _Noreturn. c-stack: use _Noreturn * lib/c-stack.c (die, overflow_handler, segv_handler): Use _Noreturn rather than __attribute__((noreturn)). argmatch-tests, exclude_tests: use _Noreturn * tests/test-argmatch.c, tests/test-exclude.c (_GL_ATTRIBUTE_NORETURN): Remove. (ARGMATCH_DIE_DECL): Use _Noreturn instead. stdlib: use _Noreturn * lib/stdlib.in.h (_GL_ATTRIBUTE_NORETURN): Remove. (_Exit): Use _Noreturn rather than _GL_ATTRIBUTE_NORETURN. * modules/stdlib (Depends-on): Add _Noreturn. (stdlib.h): Depend on $(_NORETURN_H), and copy it in. stdnoreturn-tests: new module * modules/stdnoreturn-tests, tests/test-stdnoreturn.c: New files. stdnoreturn: new module * MODULES.html.sh (Noreturn ): New section. * m4/stdnoreturn.m4, modules/stdnoreturn: New files. _Noreturn-tests: new module * modules/_Noreturn-tests, tests/test-_Noreturn.c: New files. _Noreturn: new module * MODULES.html.sh (Support for systems lacking draft ISO C 1X): New section, mentioning it. * build-aux/_Noreturn.h, modules/_Noreturn: New files. * m4/gnulib-common.m4 (gl_COMMON_BODY): Add _Noreturn. 2011-07-11 Eric Blake ffs: new module * modules/ffs: New file. * m4/ffs.m4: Likewise. * lib/ffs.c: Likewise. * m4/strings_h.m4 (gl_HEADER_STRINGS_H_DEFAULTS): Add default. * modules/strings (Makefile.am): Substitute witness. (Depends-on): Add c++defs. * lib/strings.in.h (ffs): Declare. * modules/ffs-tests: New test file. * tests/test-ffs.c: Test new module. * MODULES.html.sh (Integer arithmetic functions): Mention it. * doc/posix-functions/ffs.texi (ffs): Likewise. regex: avoid compiler warning * lib/regex.c (includes): Include , for use of strcasecmp in regcomp.c. Reported by Joachim Schmitz. 2011-07-09 Paul Eggert stdint: respect system's intmax_t if INTMAX_MAX * lib/stdint.in.h (intmax_t, uintmax_t): If the system defines INTMAX_MAX, assume its intmax_t is OK. Similarly for and uintmax_t. This is for some Mac OS X builds, where intmax_t is long but int64_t is long long, and where we will clash with the system intmax_t if we override it. See . (INTMAX_C, UINTMAX_C): For consistency, respect the system's INTMAX_C if INTMAX_MAX and INTMAX_C are both defined, and similarly for UINTMAX_C. 2011-07-08 Bruno Haible pthread_sigmask tests: Avoid a compiler warning. * tests/test-pthread_sigmask1.c (main): Complain if system() returns non-zero. sigprocmask tests: A better way to avoid a compiler warning. * tests/test-sigprocmask.c: Don't include "ignore-value.h". (main): Complain if system() returns non-zero. * modules/sigprocmask-tests (Depends-on): Remove ignore-value. 2011-07-08 Bruno Haible pthread_sigmask: Work around IRIX bug. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Test for the IRIX bug. * lib/pthread_sigmask.c (pthread_sigmask): usleep for some time when there may be unblocked pending signals. * doc/posix-functions/pthread_sigmask.texi: Mention the IRIX bug. 2011-07-08 Bruno Haible pthread_sigmask: Work around Cygwin bug. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Test for the Cygwin bug. * lib/pthread_sigmask.c (pthread_sigmask): Fix the return value from the system's pthread_sigmask function. * doc/posix-functions/pthread_sigmask.texi: Mention the Cygwin bug. 2011-07-08 Bruno Haible pthread_sigmask: Work around bug in single-threaded implementation. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Test for the FreeBSD, HP-UX, Solaris bug. (gl_PREREQ_PTHREAD_SIGMASK): New macro. * lib/pthread_sigmask.c: Include . (pthread_sigmask): If HAVE_PTHREAD_SIGMASK, define as a wrapper around the system's pthread_sigmask function. * modules/pthread_sigmask (configure.ac): Invoke gl_PREREQ_PTHREAD_SIGMASK. * doc/posix-functions/pthread_sigmask.texi: Mention bug on FreeBSD, HP-UX, Solaris. 2011-07-08 Eric Blake test-sigprocmask: avoid compiler warning * modules/sigprocmask-tests (Depends-on): Add ignore-value. * tests/test-sigprocmask.c (main): Use it to silence warning. Reported by Jim Meyering. test-snprintf: avoid compiler warning * tests/test-snprintf.c (main): Avoid shadowed declaration. * tests/test-vsnprintf.c (main): Likewise. Reported by Jim Meyering. 2011-07-08 Bruno Haible Tests for module 'pthread_sigmask'. * modules/pthread_sigmask-tests: New file. * tests/test-pthread_sigmask1.c: New file, based on tests/test-sigprocmask.c. * tests/test-pthread_sigmask2.c: New file. 2011-07-08 Jim Meyering test-getopt.h: avoid warning about an unused variable * tests/test-getopt.h (test_getopt): Remove unused variable, "c". 2011-07-07 Jim Meyering maint: reduce list of files exempt from sc_prohibit_leading_TABs * Makefile (sc_prohibit_leading_TABs): Don't exempt m4/po.m4, now that it no longer contains leading TABs. Remove unused "url=FIXME" statement. 2011-07-08 Paul Eggert pthread_sigmask: Assume POSIX when not gl_THREADLIB. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): When gl_THREADLIB is not in use, assume that the POSIX sematics are desired. This is better for Emacs, which uses POSIX semantics on GNUish and/or POSIXish platforms, and does not use threads at all otherwise. pthread_sigmask: fix typo when testing for libraries * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): AC_LINK_IFELSE, not AC_COMPILE_IFELSE. 2011-07-08 Eric Blake fts: introduce FTS_NOATIME * lib/fts_.h (FTS_NOATIME): New bit flag. (FTS_OPTIONMASK): Adjust. * lib/fts.c (diropen, fts_open, fts_build): Honor it. (fd_ring_check): Debug code unconditionally uses O_NOATIME. 2011-07-08 Bruno Haible Tests for module 'thread'. * modules/thread-tests: New file. * tests/test-thread_self.c: New file. * tests/test-thread_create.cc: New file. 2011-07-08 Bruno Haible thread: Avoid gcc warnings when using gl_thread_self(). * lib/glthread/thread.h (gl_thread_self): Return a pthread_t, not a 'void *'. (gl_thread_self_pointer): Update. 2011-07-07 Bruno Haible signal-c++-tests: Check declaration of pthread_sigmask. * tests/test-signal-c++.cc: Check declaration of pthread_sigmask. * modules/signal-c++-tests (Makefile.am): Link test-signal-c++ against $(LIB_PTHREAD_SIGMASK). 2011-07-07 Bruno Haible pthread_sigmask: Fix link requirements on OSF/1 5.1 and with pth. * lib/signal.in.h (pthread_sigmask): Override if REPLACE_PTHREAD_SIGMASK is 1. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Initialize REPLACE_PTHREAD_SIGMASK. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Set also REPLACE_PTHREAD_SIGMASK. Set and substitute LIB_PTHREAD_SIGMASK. * modules/signal (Makefile.am): Substitute REPLACE_PTHREAD_SIGMASK. * modules/pthread_sigmask (Depends-on, configure.ac): Update condition. (Link): Set to $(LIB_PTHREAD_SIGMASK), not $(LIBMULTITHREAD). 2011-07-07 Bruno Haible pthread_sigmask: Ensure declaration in . * lib/signal.in.h: On MacOS X, FreeBSD, OpenBSD, OSF/1, Solaris 2.6, include . * doc/posix-functions/pthread_sigmask.texi: Mention the header file problem. 2011-07-07 Bruno Haible pthread_sigmask: Document the module. * doc/posix-functions/pthread_sigmask.texi: Mention the new module. 2011-07-07 Bruno Haible pthread_sigmask: Follow gnulib conventions. * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Renamed from gl_PTHREAD_SIGMASK. * modules/pthread_sigmask (configure.ac): Update. 2011-07-07 Bruno Haible pthread_sigmask: Make declaration C++ safe. * lib/signal.in.h: In two special conditions, just do an #include_next. (pthread_sigmask): Test HAVE_PTHREAD_SIGMASK, not REPLACE_PTHREAD_MASK. Invoke _GL_CXXALIAS_SYS and _GL_CXXALIASWARN. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Initialize HAVE_PTHREAD_SIGMASK, not REPLACE_PTHREAD_MASK. * m4/pthread_sigmask.m4 (gl_PTHREAD_SIGMASK): Set HAVE_PTHREAD_SIGMASK, not REPLACE_PTHREAD_MASK. * modules/signal (Makefile.am): Substitute HAVE_PTHREAD_SIGMASK, not REPLACE_PTHREAD_MASK. * modules/pthread_sigmask (Depends-on, configure.ac): Update condition. 2011-07-07 Bruno Haible pthread_sigmask: Fix return value. * lib/signal.in.h (pthread_sigmask): Declare. Don't define as a macro. * lib/pthread_sigmask.c: New file. * modules/pthread_sigmask (Files): Add it. (configure.ac): Invoke AC_LIBOBJ. 2011-07-07 Eric Blake getopt: more portable argv creation * m4/getopt.m4 (gl_GETOPT_CHECK_HEADRS): Rather than casting away const, use char arrays rather than strings. Suggested by Paul Eggert. 2011-07-07 Bruno Haible Tests for module 'sigprocmask'. * modules/sigprocmask-tests: New file. * tests/test-sigprocmask.c: New file. 2011-07-07 Bruno Haible float tests: Tweak. * tests/test-float.c (main): Tweak skip message. 2011-07-07 Eric Blake getopt: avoid compiler warning during configure * m4/getopt.m4 (gl_GETOPT_CHECK_HEADRS): Avoid problems with assigning string literals to non-const pointer. getopt-gnu: avoid crash in glibc getopt * m4/getopt.m4 (gl_GETOPT_CHECK_HEADRS): Detect the problem. * tests/test-getopt.h (test_getopt): Enhance test. * tests/test-getopt_long.h (test_getopt_long): Likewise. * doc/posix-functions/getopt.texi (getopt): Document it. * doc/glibc-functions/getopt_long.texi (getopt_long): Likewise. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. 2011-07-07 Ulrich Drepper getopt: handle W; without long options in getopt [BZ #12922] * lib/getopt.c (_getopt_internal_r): When "W;" is in short options but no long options are defined, just return 'W'. 2011-07-07 Bruno Haible Avoid literal tabs. * m4/po,m4 (AM_PO_SUBDIRS, AM_POSTPROCESS_PO_MAKEFILE): Use a shell variable containing a tab instead of a literal tab. Reported by Jim Meyering. 2011-07-07 Bruno Haible Comments. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Update comments about mingw. 2011-07-06 Bruno Haible sys_select: Fix compilation error on mingw, introduced on 2011-06-30. * lib/sys_select.in.h: Don't include . Instead, include . (rpl_fd_isset, FD_ISSET): New definitions, copied from lib/sys_socket.in.h. (close, gethostname): Hide declarations from . (socket, connect, accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt, shutdown): Likewise. * lib/sys_socket.in.h (close, gethostname): Tweak indentation. (select): Don't override if gnulib's was already included. * lib/unistd.in.h (socket, connect, accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt, shutdown, select): Tweak indentation. 2011-07-06 Paul Eggert * modules/pthread_sigmask (configure.ac): gl_SIGNAL_MODULE_INDICATOR and not gl_SYS_SELECT_MODULE_INDICATOR, fixing a typo exposed in an application that does not use the sys_select module. 2011-07-06 Erik Faye-Lund poll: do not return 0 on timeout=-1 * lib/poll.c: Loop with yield if no events occurred. 2011-07-06 Eric Blake pthread_sigmask: always replace when not using pthread * m4/pthread_sigmask.m4 (gl_PTHREAD_SIGMASK): Force sigprocmask replacement when using some threading other than pthread. Fix logic bug. 2011-07-06 Bruno Haible Comments. * m4/printf.m4: Update comments about mingw. 2011-07-06 Paul Eggert sys_select: define sigset_t more portably * lib/sys_select.in.h: Always include , since we now need sigset_t and mingw defines it there. Include before split inclusion guard, to avoid mishaps on Solaris, whose eventually includes us. * m4/signal_h.m4 (gl_SIGNAL_H): Require gl_CHECK_TYPE_SIGSET_T. (gl_CHECK_TYPE_SIGSET_T): New macro, most of the contents of which come from ... * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Require gl_CHECK_TYPE_SIGSET_T. (gl_PREREQ_SIGPROCMASK): Now a no-op, since gl_CHECK_TYPE_SIGSET_T does the real work. * modules/sys_select (Depends-on): Add 'signal'. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Poison pselect. Suggested by Bruno Haible. pselect: Use pthread_sigmask, not sigprocmask. * lib/pselect.c (pselect): Use pthread_sigmask, as it supports multithreaded apps better than sigprocmask does. * modules/pselect (Depends-on): Depend on pthread_sigmask, not sigprocmask directly. 2011-07-05 Paul Eggert * lib/pselect.c (pselect): Use plain name, without "rpl_". Don't #undef, since we don't need any underlying pselect. * modules/pselect (configure.ac): Use our pselect.o if !HAVE_PSELECT. (Depends-on): Add select. (Link): Add $(LIBSOCKET). These changes suggested by Bruno Haible. pselect: document better * MODULES.html.sh (Support for systems lacking POSIX:2008): Add it. * doc/posix-functions/pselect.texi (pselect): Document new module. pthread_sigmask: new module * MODULES.html.sh (Support for systems lacking POSIX:2008): Add it. * doc/posix-functions/pthread_sigmask.texi: Document new module. * lib/signal.in.h (pthread_sigmask): Arrange for replacement. This is done only as a macro; I don't know how well that'll work for C++. Move include before the include_next, to avoid mishap on Solaris. * m4/signal_h.m4 (gl_SIGNAL_H, gl_SIGNAL_H_DEFAULTS): Check for it. * modules/signal (Makefile.am): Substitute the check's results. * modules/pthread_sigmask, m4/pthread_sigmask.m4: New files. test-pselect: new module * modules/pselect-tests, tests/test-pselect.c: New files. * tests/test-select.c, tests/test-sys_select-c++.cc: If TEST_PSELECT is defined, test pselect instead of testing select. * tests/test-sys_select.c (sigset_t): Test for it, too. Suggested by Bruno Haible. 2011-07-05 Eric Blake snprintf: guarantee %1$d, for libintl * m4/snprintf.m4 (gl_FUNC_SNPRINTF): Require %1$d support. * m4/vsnprintf.m4 (gl_FUNC_VSNPRINTF): Likewise. * doc/posix-functions/snprintf.texi (snprintf): Update. * doc/posix-functions/vsnprintf.texi (vsnprintf): Likewise. * tests/test-snprintf.c (main): Enhance test. * tests/test-vsnprintf.c (main): Likewise. 2011-07-05 Jim Meyering maint: exempt stdio-read.c and stdio-write.c from the cppi check * Makefile (sc_cpp_indent_check): Exempt stdio-read.c and stdio-write.c per Bruno's request, to accommodate this idiom (no space after "#") even when the function is inside an #if block: char * gets (char *s) #undef gets { ... } 2011-07-04 Jim Meyering maint: indent with spaces, not TABs, and add a rule to check this * tests/test-userspec.c: Indent with spaces, not TABs. * tests/test-argp.c: Likewise. * tests/test-c-stack2.sh: Likewise. * tests/test-parse-duration.sh: Likewise * m4/strtod.m4: Likewise. * m4/alloca.m4: Likewise. * m4/pselect.m4: Likewise. * Makefile (sc_prohibit_leading_TABs): Prohibit leading TABs. 2011-07-03 Jim Meyering maint.mk: correct omissions in prohibit_argmatch_without_use check This rule would mistakenly report that argmatch.h is included without use even when both the argmatch and invalid_arg macro were used. * top/maint.mk (sc_prohibit_argmatch_without_use): Also detect uses of argmatch and invalid_arg. 2011-07-03 Bruno Haible Comments about EINTR. * lib/safe-read.h: Explain the purpose of this module. * lib/safe-write.h: Likewise. * doc/posix-functions/read.texi: Mention EINTR and the 'safe-read' module. * doc/posix-functions/write.texi: Mention EINTR and the 'safe-write' module. Reported by Ralf Wildenhues . 2011-06-30 Paul Eggert xnanosleep: Rewrite to use new dtotimespec module. It has the conversion code that used to be in xnanosleep. * lib/xnanosleep.c: Do not include limits.h, stdbool.h, stdio.h, assert.h, sys/types.h, or intprops.h. Include timespec.h instead. (TIME_T_MAX): Remove. (xnanosleep): Rewrite in terms of dtotimespec. * modules/xnanosleep (Depends-on): Add dtotimespec. Remove intprops, stdbool. timespec-add, timespec-sub: new modules * lib/timespec.h (timespec_add, timespec_sub): New decls. * lib/timespec-add.c, lib/timespec-sub.c: * modules/timespec-add, modules/timespec-sub: New files. dtotimespec: new module * lib/timespec.h (dtotimespec): New decl. * lib/dtotimespec.c, modules/dtotimespec: New files. * lib/timespec.h (timespec_sign, timespectod): New inline functions. pselect: new module * lib/sys_select.in.h: Include , for 'sigset_t'. (pselect): New decls. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Require AC_C_RESTRICT, since the standard pselect decl uses 'restrict'. (gl_SYS_SELECT_H_DEFAULTS): Add defaults for GNULIB_PSELECT, HAVE_PSELECT, REPLACE_PSELECT. * modules/sys_select (sys/select.h): Substitute GNULIB_PSELECT, HAVE_PSELECT, REPLACE_PSELECT. * lib/pselect.c, m4/pselect.m4, modules/pselect: New files. sys_select: don't depend on sys_socket This is so that Emacs doesn't have to drag in m4/sockpfaf.m4 etc; see . This fix works on GNU and GNU-like platforms, but has not been tested on native Windows. * lib/sys_select.in.h: Include only if native Windows. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Do not require gl_HEADER_SYS_SOCKET. * modules/sys_select (Files): Add m4/sys_socket_h.m4, for gl_PREREQ_SYS_H_WINSOCK2. 2011-06-29 Eric Blake pipe2: fix C89 compile problem * lib/pipe2.c (pipe2): Avoid C99 array initialization. Reported by Bruno Haible. pipe, pipe2: don't corrupt fd on error * lib/pipe.c (pipe): Leave fd unchanged on error. * lib/pipe2.c (pipe2): Likewise. * doc/posix-functions/pipe.texi (pipe): Document cygwin issue. * doc/glibc-functions/pipe2.texi (pipe2): Likewise. 2011-06-27 Paolo Bonzini mmap-anon: do not use regular expressions inadvertently * m4/mmap-anon.m4: Remove trailing period from strings sought in the output. 2011-06-25 Paul Eggert nanosleep: fix integer overflow problem * lib/nanosleep.c (my_usleep): Don't assume signed integer arithmetic wraps around on overflow. nanosleep: simplify carrying * lib/nanosleep.c (nanosleep): Use the requested tv_nsec for the first call to the underyling nanosleep, not for the last one. This doesn't fix any bugs, but it simplifies the computation of the remaining delay. Found while auditing integer overflow issues. dup2: remove test for existence of fcntl * m4/dup2.m4 (gl_FUNC_DUP2): Use "#ifdef FD_CLOEXEC", not "#if HAVE_FCNTL", in the configure-time test program. This removes the need for the AC_CHECK_FUNCS_ONCE([fcntl]), and therefore speeds up "configure" a bit. Found while adding the dup2 module to Emacs. 2011-06-24 Eric Blake maint.mk: enhance useless header checks * top/maint.mk (_sc_header_without_use): Check both include styles. (sc_prohibit_assert_without_use) (sc_prohibit_close_stream_without_use) (sc_prohibit_getopt_without_use) (sc_prohibit_quotearg_without_use) (sc_prohibit_quote_without_use) (sc_prohibit_long_options_without_use) (sc_prohibit_inttostr_without_use) (sc_prohibit_ignore_value_without_use) (sc_prohibit_error_without_use, sc_prohibit_xalloc_without_use) (sc_prohibit_hash_without_use, sc_prohibit_cloexec_without_use) (sc_prohibit_posixver_without_use, sc_prohibit_same_without_use) (sc_prohibit_hash_pjw_without_use) (sc_prohibit_safe_read_without_use) (sc_prohibit_argmatch_without_use) (sc_prohibit_canonicalize_without_use) (sc_prohibit_root_dev_ino_without_use) (sc_prohibit_openat_without_use) (sc_prohibit_c_ctype_without_use) (sc_prohibit_signal_without_use) (sc_prohibit_stdio--_without_use) (sc_prohibit_stdio-safer_without_use) (sc_prohibit_strings_without_use) (sc_prohibit_intprops_without_use) (sc_prohibit_stddef_without_use) (sc_prohibit_xfreopen_without_use): Update clients. 2011-06-24 Jim Meyering syntax-check: keep one maint.mk rule in sync with its header * Makefile (sc_check_sym_list): Add a rule to prevent a repeat of the bug Eric has just fixed, with today's commit 25e4c2ec. I prefer to avoid temporary files here, so use <(...), but that is not supported by /bin/sh, so... (SHELL): Define to /bin/bash. 2011-06-24 Eric Blake maint.mk: update sc_prohibit_intprops_without_use * top/maint.mk (_intprops_names): Match recent changes. 2011-06-24 Bruno Haible strerror-override: No-op tweak. * lib/strerror-override.h (strerror_override): Reorder conditions, for consistency with lib/strerror-override.c. 2011-06-23 Eric Blake maint.mk: test further PATH_MAX issues * top/maint.mk (sc_prohibit_path_max_array): Rename... (sc_prohibit_path_max_allocation): ...and also test alloca. Suggested by Jim Meyering. 2011-06-22 Eric Blake maint.mk: add syntax-check to avoid char[PATH_MAX] * top/maint.mk (sc_prohibit_path_max_array): New rule. stat: be robust to PATH_MAX definition * lib/stat.c (rpl_stat): Require reasonable PATH_MAX. * modules/stat (Depends-on): Add verify. link: work around IRIX bug * m4/link.m4 (gl_FUNC_LINK): Expose the bug. * lib/link.c (rpl_link): Work around it. * tests/test-link.h (test_link): Enhance test. * doc/posix-functions/link.texi (link): Document the bug. getopt: silence clang warning * lib/getopt.c (_getopt_internal_r): Avoid unlikely NULL dereference. Reported by Gustavo Martin Domato. 2011-06-22 Jim Meyering bootstrap: do not insert a blank line into each .gitignore file * build-aux/bootstrap (sort_patterns): Filter out blank lines. 2011-06-21 Eric Blake perror: test for output mismatch * m4/perror.m4 (gl_FUNC_PERROR): Add test, in order to replace perror on IRIX. strerror_r: fix OpenBSD behavior on out-of-range * lib/strerror_r.c (strerror_r): Always use maximal string. * doc/posix-functions/strerror_r.texi (strerror_r): Document it. strerror_r: fix OpenBSD behavior on 0 * lib/strerror-override.c (strerror_override): Also override 0 when needed. * lib/strerror-override.h (strerror_override): Likewise. * lib/strerror.c (strerror): Simplify, now that 0 override is done earlier. * lib/strerror_r.c (strerror_r): Likewise. * m4/strerror.m4 (gl_FUNC_STRERROR): Split detection of 0 behavior... (gl_FUNC_STRERROR_0): ...into new macro. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Replace strerror_r if 0 is overridden. (gl_FUNC_STRERROR_R_WORKS): Avoid extra tests if 0 is broken. * modules/strerror-override (Files): Add strerror.m4. (configure.ac): Also provide override for 0 when needed. * doc/posix-functions/strerror.texi (strerror): Document this. * doc/posix-functions/perror.texi (perror): Likewise. perror: adjust array size * modules/perror (Depends-on): Add strerror-override. * lib/perror.c (perror): Use it to avoid magic number. strerror-override: reduce size * lib/strerror-override.c (strerror_override): Use fewer lines. 2011-06-20 Bruno Haible pathmax: Ensure correct value for PATH_MAX on HP-UX. * lib/pathmax.h (PATH_MAX) [HP-UX]: Define to 1024. 2011-06-20 Paul Eggert alloca: port to compilers that can optimize like GCC 4.6.0 * lib/alloca.c (find_stack_direction): New signature, taken from Autoconf git. This works with GCC 4.6.0. This code should never be used with GCC 4.6.0 itself, as GCC has alloca, but it might be used with other compilers that optimize as well as GCC 4.6.0 does. (alloca): Adjust to new signature. * m4/alloca.m4 (__AC_LIBOBJ_ALLOCA) [Autoconf version < 2.69]: New macro, which patches Autoconf in a similar way. c-stack: stop worrying about stack direction * lib/c-stack.c (find_stack_direction): Remove. (segv_handler): Don't worry about stack direction growth, as it's too much of a pain to configure this correctly, given how compilers are optimizing-away our stack-growth detection code. Instead, assume that any access to just before or just after the stack is OK. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Don't require AC_FUNC_ALLOCA; no longer needed. 2011-06-20 Eric Blake test-stat: don't allocate PATH_MAX bytes * tests/test-stat.h (test_stat_func): Don't stack-allocate a PATH_MAX-sized buffer. * modules/openat-tests (Depends-on): Add getcwd-lgpl, drop pathmax. * modules/stat-tests (Depends-on): Likewise. * tests/test-fstatat.c (includes): Drop pathmax.h. * tests/test-stat.c (includes): Likewise. Reported by Bruno Haible. 2011-06-20 Bruno Haible float: Work around bugs on FreeBSD/x86, AIX with GCC, IRIX. * lib/float.in.h: Add workarounds for FreeBSD/x86, AIX with GCC, IRIX. * lib/float.c: New file. * m4/float_h.m4 (gl_FLOAT_H): Also handle FreeBSD, AIX, IRIX. Set REPLACE_FLOAT_LDBL. * modules/float (Files): Add lib/float.c. (configure.ac): Invoke AC_LIBOBJ. * doc/posix-headers/float.texi: Mention problems on FreeBSD, AIX, IRIX. 2011-06-20 Bruno Haible Tests for module 'float'. * modules/float-tests: New file. * tests/test-float.c: New file. 2011-06-19 Bruno Haible isinf: Coding style. * lib/isinf.c: Use GNU coding style. 2011-06-19 Bruno Haible linkat test: Avoid test failure on AIX 7.1. * tests/test-linkat.c (main): Allow EINVAL as alternate error value. * tests/test-link.h (test_link): Likewise. 2011-06-19 Bruno Haible pread test: Avoid test failure on OpenBSD 4.9. * tests/test-pread.c (main): Allow EFBIG instead of EINBAL. 2011-06-19 Bruno Haible sprintf-posix: Fix test failure on AIX 7.1. * m4/printf.m4 (gl_PRINTF_PRECISION): Test against AIX bug. * doc/posix-functions/dprintf.texi: Mention limited precision problem on AIX. * doc/posix-functions/fprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. 2011-06-19 Bruno Haible roundl-ieee: Fix test failure on AIX 7.1. * m4/roundl.m4 (gl_FUNC_ROUNDL): Test also the sign of roundl (-0.3L). * doc/posix-functions/roundl.texi: Mention problem with negative arguments. 2011-06-19 Bruno Haible round-ieee: Fix test failures on AIX 7.1 and OSF/1 5.1. * modules/round-ieee (Depends-on): Add floor-ieee, ceil-ieee. * doc/posix-functions/round.texi: Mention problem with negative arguments. * doc/posix-functions/ceil.texi: Mention problem on OSF/1 5.1. 2011-06-19 Bruno Haible roundf-ieee: Fix test failures on AIX 7.1 and OSF/1 5.1. * m4/roundf.m4 (gl_FUNC_ROUNDF): Test also the sign of roundf (-0.3f). * modules/roundf-ieee (Depends-on): Add floorf-ieee, ceilf-ieee. * doc/posix-functions/roundf.texi: Mention problem with negative arguments. * doc/posix-functions/ceilf.texi: Mention problem on OSF/1 5.1. 2011-06-19 Bruno Haible ceilf-ieee: Work around bug on MacOS X 10.5. * doc/posix-functions/ceilf.texi: Mention the MacOS X 10.5 problem. floor*-ieee, ceil*-ieee, trunc*-ieee, round*-ieee: More robust checks. * m4/floorf.m4 (gl_FUNC_FLOORF): In the test whether the function is IEEE compliant, avoid compiler optimizations. * m4/floor.m4 (gl_FUNC_FLOOR): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceil.m4 (gl_FUNC_CEIL): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise. 2011-06-19 Bruno Haible ceilf-ieee: Work around bug on AIX 7.1. * m4/ceilf.m4 (gl_FUNC_CEILF): Test also the sign of ceilf (-0.3f). * doc/posix-functions/ceilf.texi: Mention the AIX 7.1 problem. 2011-06-19 Bruno Haible ceil-ieee: Work around bug on AIX 7.1. * m4/ceil.m4 (gl_FUNC_CEIL): Test also the sign of ceil (-0.3). * doc/posix-functions/ceil.texi: Mention the AIX 7.1 problem. 2011-06-18 Bruno Haible fsync test: Avoid test failure on MacOS X and AIX. * tests/test-fsync.c (fsync): Allow ENOTSUP and EBADF instead of EINVAL. 2011-06-18 Bruno Haible openat, fdopendir tests: Fix link errors. * modules/openat-tests (Depends-on): Add progname. * modules/fdopendir-tests (Depends-on): Likewise. * tests/test-fchownat.c: Include progname.h. (main): Call set_program_name. * tests/test-fstatat.c: Include progname.h. (main): Call set_program_name. * tests/test-mkdirat.c: Include progname.h. (main): Call set_program_name. * tests/test-openat.c: Include progname.h. (main): Call set_program_name. * tests/test-unlinkat.c: Include progname.h. (main): Call set_program_name. * tests/test-fdopendir.c: Include progname.h. (main): Call set_program_name. 2011-06-18 Bruno Haible Doc update. * doc/posix-functions/pthread_attr_getstack.texi: Update info regarding HP-UX. * doc/posix-functions/pthread_attr_setstack.texi: Likewise. 2011-06-18 Bruno Haible getcwd tests: Avoid compilation error on HP-UX 11.31. * modules/getcwd-tests (Depends-on): Add pathmax. * tests/test-getcwd.c: Include pathmax.h. 2011-06-18 Bruno Haible isfinite, isinf: Fix link error on AIX 6 and 7. * m4/isfinite.m4 (gl_ISFINITE): When determining whether libm is needed, also test the macro with a 'float' argument. * m4/isinf.m4 (gl_ISINF): Likewise. 2011-06-18 Bruno Haible getloadavg: Don't clobber LIBS. Regression from previous commit. * m4/getloadavg.m4 (gl_PREREQ_GETLOADAVG): Move tests that use AC_CHECK_LIB from here... (gl_GETLOADAVG): ... to here, inside the experiment with LIBS. (gl_GETLOADAVG, gl_PREREQ_GETLOADAVG): Rename gl_have_func to gl_func_getloadavg_done. Reported by Tom G. Christensen . 2011-06-18 Bruno Haible clean-temp: Improve documentation. * lib/clean-temp.h: Explain better how to use this module. Reported by John Darrington . 2011-06-17 Bruno Haible pread, pwrite: Avoid cc warning on AIX. * lib/unistd.in.h (pread): Undefine before defining as a macro. (pwrite): Likewise. 2011-06-17 Bruno Haible spawn-pipe tests: Fix link error. * tests/test-spawn-pipe-child.c: Undefine fprintf. Reported by Tom G. Christensen . 2011-06-17 Bruno Haible Tests: Remove unnecessary dependency. * modules/canonicalize-tests (Depends-on): Remove progname. * modules/chown-tests (Depends-on): Likewise. * modules/dirname-tests (Depends-on): Likewise. * modules/fdopendir-tests (Depends-on): Likewise. * modules/fdutimensat-tests (Depends-on): Likewise. * modules/hash-tests (Depends-on): Likewise. * modules/lchown-tests (Depends-on): Likewise. * modules/linkat-tests (Depends-on): Likewise. * modules/renameat-tests (Depends-on): Likewise. * modules/spawn-pipe-tests (Depends-on): Likewise. * modules/utimensat-tests (Depends-on): Likewise. 2011-06-17 Bruno Haible spawn-pipe tests: Fix link error. * tests/test-spawn-pipe-child.c: Undefine fflush. 2011-06-17 Bruno Haible Fix tests link errors. * modules/ceil-ieee-tests (Makefile.am): Use CEIL_LIBM, not FLOOR_LIBM. * modules/chown-tests (Makefile.am): Don't link test-chown with LIBINTL. * modules/lchown-tests (Makefile.am): Don't link test-lchown with LIBINTL. * modules/utimens-tests (Makefile.am): Don't link test-utimens with LIBINTL. * modules/futimens-tests (Makefile.am): Don't link test-futimens with LIBINTL. 2011-06-16 Bruno Haible crypto/gc-sha1: Fix recent regression. * modules/crypto/gc-sha1 (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-sha1.m4 (gl_GC_SHA1): Don't invoke gl_SHA1. crypto/gc-md5: Fix recent regression. * modules/crypto/gc-md5 (configure.ac): Invoke AC_LIBOBJ here. crypto/gc-md4: Fix recent regression. * modules/crypto/gc-md4 (configure.ac): Invoke AC_LIBOBJ here. * m4/md4.m4 (gl_MD4): Ensure the expansion is non-empty. crypto/gc-arctwo: Fix recent regression. * modules/crypto/gc-arctwo (configure.ac): Invoke AC_LIBOBJ here. * m4/arctwo.m4 (gl_ARCTWO): Ensure the expansion is non-empty. crypto/gc-rijndael: Fix recent regression. * modules/crypto/gc-rijndael (Files): Remove m4/rijndael.m4. (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-rijndael.m4 (gl_GC_RIJNDAEL): Don't invoke gl_RIJNDAEL. Reported by Tom G. Christensen . crypto/gc-hmac-sha1: Fix recent regression. * modules/crypto/gc-hmac-sha1 (Files): Remove m4/hmac-sha1.m4. (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-hmac-sha1.m4 (gl_GC_HMAC_SHA1): Don't invoke gl_HMAC_SHA1. Reported by Tom G. Christensen . crypto/gc-hmac-md5: Fix recent regression. * modules/crypto/gc-hmac-md5 (Files): Remove m4/hmac-md5.m4. (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-hmac-md5.m4 (gl_GC_HMAC_MD5): Don't invoke gl_HMAC_MD5. Reported by Tom G. Christensen . crypto/gc-des: Fix recent regression. * modules/crypto/gc-des (Files): Remove m4/des.m4. (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-des.m4 (gl_GC_DES): Don't invoke gl_DES. Reported by Tom G. Christensen . crypto/gc-arcfour: Fix recent regression. * modules/crypto/gc-arcfour (Files): Remove m4/arcfour.m4. (configure.ac): Invoke AC_LIBOBJ here. * m4/gc-arcfour.m4 (gl_GC_ARCFOUR): Don't invoke gl_ARCFOUR. Reported by Tom G. Christensen . 2011-06-16 Paul Eggert * m4/lstat.m4 (gl_FUNC_LSTAT): Fix typo in prerequisite. After the 2011-05-21 change, this macro requires gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, not AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. 2011-06-16 Bruno Haible fprintftime: Move AC_LIBOBJ invocations to module description. * m4/fprintftime.m4: Remove file. * modules/fprintftime (Files): Remove m4/fprintftime.m4. (configure.ac): Remove gl_FPRINTFTIME call. (Makefile.am): Augment lib_SOURCES. Reported by Jim Meyering. 2011-06-16 Bruno Haible tmpfile-safer: Finish 2011-05-23 commit. * m4/stdio-safer.m4: Really remove file. Reported by Jim Meyering. 2011-06-16 Bruno Haible syntax-check: Fix typo. * Makefile (allow_AC_LIBOBJ): Mention printf-posix-rpl.m4, not printf-posix.m4. Reported by Jim Meyering. 2011-06-13 Jim Meyering syntax-check: add a rule to help enforce the no-AC_LIBOBJ-in-m4/ policy * Makefile (sc_prohibit_AC_LIBOBJ_in_m4): New rule. 2011-05-23 Bruno Haible yesno: Move AC_LIBOBJ invocations to module description. * m4/yesno.m4 (gl_YESNO): Remove AC_LIBOBJ invocation. * modules/yesno (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xstrtol: Move AC_LIBOBJ invocations to module description. * m4/xstrtol.m4 (gl_XSTRTOL): Remove AC_LIBOBJ invocations. * modules/xstrtol (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xstrtold: Move AC_LIBOBJ invocations to module description. * m4/xstrtod.m4 (gl_XSTRTOLD): Remove AC_LIBOBJ invocation. * modules/xstrtold (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xstrtod: Move AC_LIBOBJ invocations to module description. * m4/xstrtod.m4 (gl_XSTRTOD): Remove AC_LIBOBJ invocation. * modules/xstrtod (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xnanosleep: Move AC_LIBOBJ invocations to module description. * m4/xnanosleep.m4 (gl_XNANOSLEEP): Remove AC_LIBOBJ invocation. * modules/xnanosleep (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xgetcwd: Move AC_LIBOBJ invocations to module description. * m4/xgetcwd.m4 (gl_XGETCWD): Remove AC_LIBOBJ invocation. * modules/xgetcwd (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible xalloc: Move AC_LIBOBJ invocations to module description. * m4/xalloc.m4 (gl_XALLOC): Remove AC_LIBOBJ invocation. * modules/xalloc (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible write-any-file: Move AC_LIBOBJ invocations to module description. * m4/write-any-file.m4 (gl_WRITE_ANY_FILE): Remove AC_LIBOBJ invocation. * modules/write-any-file (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible utimens: Move AC_LIBOBJ invocations to module description. * m4/utimens.m4 (gl_UTIMENS): Remove AC_LIBOBJ invocation. * modules/utimens (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible utimecmp: Move AC_LIBOBJ invocations to module description. * m4/utimecmp.m4 (gl_UTIMECMP): Remove AC_LIBOBJ invocation. * modules/utimecmp (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible userspec: Move AC_LIBOBJ invocations to module description. * m4/userspec.m4 (gl_USERSPEC): Remove AC_LIBOBJ invocation. * modules/userspec (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible unlinkdir: Move AC_LIBOBJ invocations to module description. * m4/unlinkdir.m4 (gl_UNLINKDIR): Remove AC_LIBOBJ invocation. * modules/unlinkdir (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible unistd-safer: Move AC_LIBOBJ invocations to module description. * m4/unistd-safer.m4 (gl_UNISTD_SAFER): Remove AC_LIBOBJ invocations. * modules/unistd-safer (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible tempname: Move AC_LIBOBJ invocations to module description. * m4/tempname.m4 (gl_FUNC_GEN_TEMPNAME): Remove AC_LIBOBJ invocation. * modules/tempname (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible strftime: Move AC_LIBOBJ invocations to module description. * m4/strftime.m4 (gl_FUNC_STRFTIME): Remove AC_LIBOBJ invocation. * modules/strftime (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible stdlib-safer: Move AC_LIBOBJ invocations to module description. * m4/stdlib-safer.m4: Remove file. * modules/stdlib-safer (Files): Remove m4/stdlib-safer.m4. (configure.ac): Remove gl_STDLIB_SAFER call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible tmpfile-safer: Move AC_LIBOBJ invocations to module description. * m4/stdio-safer.m4: Remove file. * modules/tmpfile-safer (Files): Remove m4/stdio-safer.m4. (configure.ac): Remove gl_TMPFILE_SAFER call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible popen-safer: Move AC_LIBOBJ invocations to module description. * m4/stdio-safer.m4 (gl_POPEN_SAFER): Remove macro. * modules/popen-safer (Files): Remove m4/stdio-safer.m4. (configure.ac): Remove gl_POPEN_SAFER call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible freopen-safer: Move AC_LIBOBJ invocations to module description. * m4/stdio-safer.m4 (gl_FREOPEN_SAFER): Remove macro. * modules/freopen-safer (Files): Remove m4/stdio-safer.m4. (configure.ac): Remove gl_FREOPEN_SAFER call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible fopen-safer: Move AC_LIBOBJ invocations to module description. * m4/stdio-safer.m4 (gl_FOPEN_SAFER): Remove macro. * modules/fopen-safer (Files): Remove m4/stdio-safer.m4. (configure.ac): Remove gl_FOPEN_SAFER call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/sha512: Move AC_LIBOBJ invocations to module description. * m4/sha512.m4 (gl_SHA512): Remove AC_LIBOBJ invocation. * modules/crypto/sha512 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/sha256: Move AC_LIBOBJ invocations to module description. * m4/sha256.m4 (gl_SHA256): Remove AC_LIBOBJ invocation. * modules/crypto/sha256 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/sha1: Move AC_LIBOBJ invocations to module description. * m4/sha1.m4 (gl_SHA1): Remove AC_LIBOBJ invocation. * modules/crypto/sha1 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible settime: Move AC_LIBOBJ invocations to module description. * m4/settime.m4 (gl_SETTIME): Remove AC_LIBOBJ invocation. * modules/settime (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible savedir: Move AC_LIBOBJ invocations to module description. * m4/savedir.m4 (gl_SAVEDIR): Remove AC_LIBOBJ invocation. * modules/savedir (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible save-cwd: Move AC_LIBOBJ invocations to module description. * m4/save-cwd.m4 (gl_SAVE_CWD): Remove AC_LIBOBJ invocation. * modules/save-cwd (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible same: Move AC_LIBOBJ invocations to module description. * m4/same.m4 (gl_SAME): Remove AC_LIBOBJ invocation. * modules/same (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible safe-write: Move AC_LIBOBJ invocations to module description. * m4/safe-write.m4 (gl_SAFE_WRITE): Remove macro. * modules/safe-write (configure.ac): Invoke gl_PREREQ_SAFE_WRITE instead of gl_SAFE_WRITE. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible safe-read: Move AC_LIBOBJ invocations to module description. * m4/safe-read.m4 (gl_SAFE_READ): Remove macro. * modules/safe-read (configure.ac): Invoke gl_PREREQ_SAFE_READ instead of gl_SAFE_READ. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible safe-alloc: Move AC_LIBOBJ invocations to module description. * m4/safe-alloc.m4 (gl_SAFE_ALLOC): Remove AC_LIBOBJ invocation. * modules/safe-alloc (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/rijndael: Move AC_LIBOBJ invocations to module description. * m4/rijndael.m4: Remove file. * modules/crypto/rijndael (Files): Remove it. (configure.ac): Remove gl_RIJNDAEL call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible readtokens: Move AC_LIBOBJ invocations to module description. * m4/readtokens.m4 (gl_READTOKENS): Remove AC_LIBOBJ invocation. * modules/readtokens (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible read-file: Move AC_LIBOBJ invocations to module description. * m4/read-file.m4 (gl_FUNC_READ_FILE): Remove macro. * modules/read-file (configure.ac): Invoke gl_PREREQ_READ_FILE instead of gl_FUNC_READ_FILE. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible quotearg: Move AC_LIBOBJ invocations to module description. * m4/quotearg.m4 (gl_QUOTEARG): Remove AC_LIBOBJ invocation. * modules/quotearg (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible quote: Move AC_LIBOBJ invocations to module description. * m4/quote.m4 (gl_QUOTE): Remove AC_LIBOBJ invocation. * modules/quote (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible posixver: Move AC_LIBOBJ invocations to module description. * m4/posixver.m4 (gl_POSIXVER): Remove AC_LIBOBJ invocation. * modules/posixver (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible posixtm: Move AC_LIBOBJ invocations to module description. * m4/posixtm.m4 (gl_POSIXTM): Remove AC_LIBOBJ invocation. * modules/posixtm (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible physmem: Move AC_LIBOBJ invocations to module description. * m4/physmem.m4 (gl_PHYSMEM): Remove AC_LIBOBJ invocation. * modules/physmem (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible pagealign_alloc: Move AC_LIBOBJ invocations to module description. * m4/pagealign_alloc.m4 (gl_PAGEALIGN_ALLOC): Remove AC_LIBOBJ invocation. * modules/pagealign_alloc (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible mpsort: Move AC_LIBOBJ invocations to module description. * m4/mpsort.m4 (gl_MPSORT): Remove AC_LIBOBJ invocation. * modules/mpsort (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible modechange: Move AC_LIBOBJ invocations to module description. * m4/modechange.m4 (gl_MODECHANGE): Remove AC_LIBOBJ invocation. * modules/modechange (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible mkdir-p: Move AC_LIBOBJ invocations to module description. * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Remove AC_LIBOBJ invocations. * modules/mkdir-p (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible mkancesdirs: Move AC_LIBOBJ invocations to module description. * m4/mkancesdirs.m4 (gl_MKANCESDIRS): Remove AC_LIBOBJ invocation. * modules/mkancesdirs (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible mgetgroups: Move AC_LIBOBJ invocations to module description. * m4/mgetgroups.m4 (gl_MGETGROUPS): Remove AC_LIBOBJ invocation. * modules/mgetgroups (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible memxor: Move AC_LIBOBJ invocations to module description. * m4/memxor.m4 (gl_MEMXOR): Remove AC_LIBOBJ invocation. * modules/memxor (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible memcoll: Move AC_LIBOBJ invocations to module description. * m4/memcoll.m4 (gl_MEMCOLL): Remove AC_LIBOBJ invocation. * modules/memcoll (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible memcasecmp: Move AC_LIBOBJ invocations to module description. * m4/memcasecmp.m4 (gl_MEMCASECMP): Remove AC_LIBOBJ invocation. * modules/memcasecmp (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/md5: Move AC_LIBOBJ invocations to module description. * m4/md5.m4 (gl_MD5): Remove AC_LIBOBJ invocation. * modules/crypto/md5 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/md4: Move AC_LIBOBJ invocations to module description. * m4/md4.m4 (gl_MD4): Remove AC_LIBOBJ invocation. * modules/crypto/md4 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/md2: Move AC_LIBOBJ invocations to module description. * m4/md2.m4: Remove file. * modules/crypto/md2 (Files): Remove it. (configure.ac): Remove gl_MD2 call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible long-options: Move AC_LIBOBJ invocations to module description. * m4/long-options.m4: Remove file. * modules/long-options (Files): Remove it. (configure.ac): Remove gl_LONG_OPTIONS call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible i-ring: Move AC_LIBOBJ invocations to module description. * m4/i-ring.m4 (gl_I_RING): Remove AC_LIBOBJ invocation. * modules/i-ring (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible idcache: Move AC_LIBOBJ invocations to module description. * m4/idcache.m4 (gl_IDCACHE): Remove AC_LIBOBJ invocation. * modules/idcache (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible human: Move AC_LIBOBJ invocations to module description. * m4/human.m4 (gl_HUMAN): Remove AC_LIBOBJ invocation. * modules/human (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/hmac-sha1: Move AC_LIBOBJ invocations to module description. * m4/hmac-sha1.m4: Remove file. * modules/crypto/hmac-sha1 (Files): Remove it. (configure.ac): Remove gl_HMAC_SHA1 call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/hmac-md5: Move AC_LIBOBJ invocations to module description. * m4/hmac-md5.m4: Remove file. * modules/crypto/hmac-md5 (Files): Remove it. (configure.ac): Remove gl_HMAC_MD5 call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible hash: Move AC_LIBOBJ invocations to module description. * m4/hash.m4: Remove file. * modules/hash (Files): Remove it. (configure.ac): Remove gl_HASH call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible hard-locale: Move AC_LIBOBJ invocations to module description. * m4/hard-locale.m4 (gl_HARD_LOCALE): Remove AC_LIBOBJ invocation. * modules/hard-locale (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible getugroups: Move AC_LIBOBJ invocations to module description. * m4/getugroups.m4 (gl_GETUGROUPS): Remove AC_LIBOBJ invocation. * modules/getugroups (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible gettime: Move AC_LIBOBJ invocations to module description. * m4/gettime.m4 (gl_GETTIME): Remove AC_LIBOBJ invocation. * modules/gettime (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible getndelim2: Move AC_LIBOBJ invocations to module description. * m4/getndelim2.m4 (gl_GETNDELIM2): Remove AC_LIBOBJ invocation. * modules/getndelim2 (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/gc-pbkdf2-sha1: Move AC_LIBOBJ invocations to module description. * m4/gc-pbkdf2-sha1.m4: Remove file. * modules/crypto/gc-pbkdf2-sha1 (Files): Remove it. (configure.ac): Remove gl_GC_PBKDF2_SHA1 call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible fts: Move AC_LIBOBJ invocations to module description. * m4/fts.m4 (gl_FUNC_FTS_CORE): Move AC_LIBOBJ invocation from here... * modules/fts (configure.ac): ... to here. 2011-05-23 Bruno Haible file-type: Move AC_LIBOBJ invocations to module description. * m4/file-type.m4: Remove file. * modules/file-type (Files): Remove it. (configure.ac): Remove gl_FILE_TYPE call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible filenamecat*: Respect rules for use of AC_LIBOBJ. * m4/filenamecat.m4 (gl_FILE_NAME_CONCAT, gl_FILE_NAME_CONCAT_LGPL): Remove AC_LIBOBJ invocation. * modules/filenamecat (Makefile.am): Augment lib_SOURCES. * modules/filenamecat-lgpl (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible filemode: Move AC_LIBOBJ invocations to module description. * m4/filemode.m4 (gl_FILEMODE): Remove AC_LIBOBJ invocation. * modules/filemode (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible openat-safer: Move AC_LIBOBJ invocations to module description. * m4/fcntl-safer.m4 (gl_OPENAT_SAFER): Remove AC_LIBOBJ invocation. * modules/openat-safer (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible fcntl-safer: Move AC_LIBOBJ invocations to module description. * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): Remove AC_LIBOBJ invocations. * modules/fcntl-safer (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible exclude: Move AC_LIBOBJ invocations to module description. * m4/exclude.m4: Remove file. * modules/exclude (Files): Remove it. (configure.ac): Remove gl_EXCLUDE call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible dirname*: Respect rules for use of AC_LIBOBJ. * m4/dirname.m4 (gl_DIRNAME, gl_DIRNAME_LGPL): Remove AC_LIBOBJ invocations. * modules/dirname (Makefile.am): Augment lib_SOURCES. * modules/dirname-lgpl (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible dirent-safer: Move AC_LIBOBJ invocations to module description. * m4/dirent-safer.m4 (gl_DIRENT_SAFER): Remove AC_LIBOBJ invocation. * modules/dirent-safer (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/des: Move AC_LIBOBJ invocations to module description. * m4/des.m4: Remove file. * modules/crypto/des (Files): Remove it. (configure.ac): Remove gl_DES call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible cycle-check: Move AC_LIBOBJ invocations to module description. * m4/cycle-check.m4 (gl_CYCLE_CHECK): Remove AC_LIBOBJ invocation. * modules/cycle-check (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible c-strtold: Move AC_LIBOBJ invocations to module description. * m4/c-strtod.m4 (gl_C_STRTOLD): Remove AC_LIBOBJ invocation. * modules/c-strtold (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible c-strtod: Move AC_LIBOBJ invocations to module description. * m4/c-strtod.m4 (gl_C_STRTOD): Remove AC_LIBOBJ invocation. * modules/c-strtod (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crc: Move AC_LIBOBJ invocations to module description. * m4/crc.m4: Remove file. * modules/crc (Files): Remove it. (configure.ac): Remove gl_CRC call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible close-stream: Move AC_LIBOBJ invocations to module description. * m4/close-stream.m4 (gl_CLOSE_STREAM): Remove AC_LIBOBJ invocation. * modules/close-stream (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible closeout: Move AC_LIBOBJ invocations to module description. * m4/closeout.m4 (gl_CLOSEOUT): Remove AC_LIBOBJ invocation. * modules/closeout (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible closein: Move AC_LIBOBJ invocations to module description. * m4/closein.m4 (gl_CLOSEIN): Remove AC_LIBOBJ invocation. * modules/closein (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible cloexec: Move AC_LIBOBJ invocations to module description. * m4/cloexec.m4: Remove file. * modules/cloexec (Files): Remove it. (configure.ac): Remove gl_CLOEXEC call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible check-version: Move AC_LIBOBJ invocations to module description. * m4/check-version.m4: Remove file. * modules/check-version (Files): Remove it. (configure.ac): Remove gl_CHECK_VERSION call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible chdir-safer: Move AC_LIBOBJ invocations to module description. * m4/chdir-safer.m4 (gl_CHDIR_SAFER): Remove AC_LIBOBJ invocation. * modules/chdir-safer (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible canonicalize: Move AC_LIBOBJ invocations to module description. * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE): Remove AC_LIBOBJ invocation. * modules/canonicalize (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible canon-host: Move AC_LIBOBJ invocations to module description. * m4/canon-host.m4 (gl_CANON_HOST): Remove macro. * modules/canon-host (configure.ac): Invoke gl_PREREQ_CANON_HOST instead of gl_CANON_HOST. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible backupfile: Move AC_LIBOBJ invocations to module description. * m4/backupfile.m4 (gl_BACKUPFILE): Remove AC_LIBOBJ invocation. * modules/backupfile (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible argmatch: Move AC_LIBOBJ invocations to module description. * m4/argmatch.m4: Remove file. * modules/argmatch (Files): Remove it. (configure.ac): Remove gl_ARGMATCH call. (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/arctwo: Move AC_LIBOBJ invocations to module description. * m4/arctwo.m4 (gl_ARCTWO): Remove AC_LIBOBJ invocation. * modules/crypto/arctwo (Makefile.am): Augment lib_SOURCES. 2011-05-23 Bruno Haible crypto/arcfour: Move AC_LIBOBJ invocations to module description. * m4/arcfour.m4: Remove file. * modules/crypto/arcfour (Files): Remove it. (configure.ac): Remove gl_ARCFOUR call. (Makefile.am): Augment lib_SOURCES. 2011-05-22 Bruno Haible write: Move AC_LIBOBJ invocations to module description. * m4/write.m4 (gl_FUNC_WRITE): Move AC_LIBOBJ invocation from here... * modules/write (configure.ac): ... to here. 2011-05-22 Bruno Haible wmemset: Move AC_LIBOBJ invocations to module description. * m4/wmemset.m4 (gl_FUNC_WMEMSET): Move AC_LIBOBJ invocation from here... * modules/wmemset (configure.ac): ... to here. 2011-05-22 Bruno Haible wmemmove: Move AC_LIBOBJ invocations to module description. * m4/wmemmove.m4 (gl_FUNC_WMEMMOVE): Move AC_LIBOBJ invocation from here... * modules/wmemmove (configure.ac): ... to here. 2011-05-22 Bruno Haible wmemcpy: Move AC_LIBOBJ invocations to module description. * m4/wmemcpy.m4 (gl_FUNC_WMEMCPY): Move AC_LIBOBJ invocation from here... * modules/wmemcpy (configure.ac): ... to here. 2011-05-22 Bruno Haible wmemcmp: Move AC_LIBOBJ invocations to module description. * m4/wmemcmp.m4 (gl_FUNC_WMEMCMP): Move AC_LIBOBJ invocation from here... * modules/wmemcmp (configure.ac): ... to here. 2011-05-22 Bruno Haible wmemchr: Move AC_LIBOBJ invocations to module description. * m4/wmemchr.m4 (gl_FUNC_WMEMCHR): Move AC_LIBOBJ invocation from here... * modules/wmemchr (configure.ac): ... to here. 2011-05-22 Bruno Haible wcswidth: Move AC_LIBOBJ invocations to module description. * m4/wcswidth.m4 (gl_FUNC_WCSWIDTH): Move AC_LIBOBJ invocation from here... * modules/wcswidth (configure.ac): ... to here. 2011-05-22 Bruno Haible wcwidth: Respect rules for use of AC_LIBOBJ. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Set HAVE_WCWIDTH. Move AC_LIBOBJ invocation from here... * modules/wcwidth (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible wctype: Move AC_LIBOBJ invocations to module description. * m4/wctype.m4 (gl_FUNC_WCTYPE): Set HAVE_WCTYPE. Move AC_LIBOBJ invocation from here... * modules/wctype (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible wctrans: Move AC_LIBOBJ invocations to module description. * m4/wctrans.m4 (gl_FUNC_WCTRANS): Set HAVE_WCTRANS. Move AC_LIBOBJ invocation from here... * modules/wctrans (configure.ac): ... to here. 2011-05-22 Bruno Haible wctomb: Move AC_LIBOBJ invocations to module description. * m4/wctomb.m4 (gl_FUNC_WCTOMB): Move AC_LIBOBJ and gl_PREREQ_WCTOMB invocations from here... * modules/wctomb (configure.ac): ... to here. 2011-05-22 Bruno Haible wctob: Move AC_LIBOBJ invocations to module description. * m4/wctob.m4 (gl_FUNC_WCTOB): Set HAVE_WCTOB. Move AC_LIBOBJ and gl_PREREQ_WCTOB invocations from here... * modules/wctob (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible wcsxfrm: Move AC_LIBOBJ invocations to module description. * m4/wcsxfrm.m4 (gl_FUNC_WCSXFRM): Move AC_LIBOBJ invocation from here... * modules/wcsxfrm (configure.ac): ... to here. 2011-05-22 Bruno Haible wcstok: Move AC_LIBOBJ invocations to module description. * m4/wcstok.m4 (gl_FUNC_WCSTOK): Move AC_LIBOBJ invocation from here... * modules/wcstok (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsstr: Move AC_LIBOBJ invocations to module description. * m4/wcsstr.m4 (gl_FUNC_WCSSTR): Move AC_LIBOBJ invocation from here... * modules/wcsstr (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsspn: Move AC_LIBOBJ invocations to module description. * m4/wcsspn.m4 (gl_FUNC_WCSSPN): Move AC_LIBOBJ invocation from here... * modules/wcsspn (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsrtombs: Move AC_LIBOBJ invocations to module description. * m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS): Move AC_LIBOBJ and gl_PREREQ_WCSRTOMBS invocations from here... * modules/wcsrtombs (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsrchr: Move AC_LIBOBJ invocations to module description. * m4/wcsrchr.m4 (gl_FUNC_WCSRCHR): Move AC_LIBOBJ invocation from here... * modules/wcsrchr (configure.ac): ... to here. 2011-05-22 Bruno Haible wcspbrk: Move AC_LIBOBJ invocations to module description. * m4/wcspbrk.m4 (gl_FUNC_WCSPBRK): Move AC_LIBOBJ invocation from here... * modules/wcspbrk (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsnrtombs: Move AC_LIBOBJ invocations to module description. * m4/wcsnrtombs.m4 (gl_FUNC_WCSNRTOMBS): Move AC_LIBOBJ and gl_PREREQ_WCSNRTOMBS invocations from here... * modules/wcsnrtombs (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsnlen: Move AC_LIBOBJ invocations to module description. * m4/wcsnlen.m4 (gl_FUNC_WCSNLEN): Move AC_LIBOBJ invocation from here... * modules/wcsnlen (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsncpy: Move AC_LIBOBJ invocations to module description. * m4/wcsncpy.m4 (gl_FUNC_WCSNCPY): Move AC_LIBOBJ invocation from here... * modules/wcsncpy (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsncmp: Move AC_LIBOBJ invocations to module description. * m4/wcsncmp.m4 (gl_FUNC_WCSNCMP): Move AC_LIBOBJ invocation from here... * modules/wcsncmp (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsncat: Move AC_LIBOBJ invocations to module description. * m4/wcsncat.m4 (gl_FUNC_WCSNCAT): Move AC_LIBOBJ invocation from here... * modules/wcsncat (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsncasecmp: Move AC_LIBOBJ invocations to module description. * m4/wcsncasecmp.m4 (gl_FUNC_WCSNCASECMP): Move AC_LIBOBJ invocation from here... * modules/wcsncasecmp (configure.ac): ... to here. 2011-05-22 Bruno Haible wcslen: Move AC_LIBOBJ invocations to module description. * m4/wcslen.m4 (gl_FUNC_WCSLEN): Move AC_LIBOBJ invocation from here... * modules/wcslen (configure.ac): ... to here. 2011-05-22 Bruno Haible wcsdup: Move AC_LIBOBJ invocations to module description. * m4/wcsdup.m4 (gl_FUNC_WCSDUP): Move AC_LIBOBJ invocation from here... * modules/wcsdup (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscspn: Move AC_LIBOBJ invocations to module description. * m4/wcscspn.m4 (gl_FUNC_WCSCSPN): Move AC_LIBOBJ invocation from here... * modules/wcscspn (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscpy: Move AC_LIBOBJ invocations to module description. * m4/wcscpy.m4 (gl_FUNC_WCSCPY): Move AC_LIBOBJ invocation from here... * modules/wcscpy (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscoll: Move AC_LIBOBJ invocations to module description. * m4/wcscoll.m4 (gl_FUNC_WCSCOLL): Move AC_LIBOBJ invocation from here... * modules/wcscoll (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscmp: Move AC_LIBOBJ invocations to module description. * m4/wcscmp.m4 (gl_FUNC_WCSCMP): Move AC_LIBOBJ invocation from here... * modules/wcscmp (configure.ac): ... to here. 2011-05-22 Bruno Haible wcschr: Move AC_LIBOBJ invocations to module description. * m4/wcschr.m4 (gl_FUNC_WCSCHR): Move AC_LIBOBJ invocation from here... * modules/wcschr (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscat: Move AC_LIBOBJ invocations to module description. * m4/wcscat.m4 (gl_FUNC_WCSCAT): Move AC_LIBOBJ invocation from here... * modules/wcscat (configure.ac): ... to here. 2011-05-22 Bruno Haible wcscasecmp: Move AC_LIBOBJ invocations to module description. * m4/wcscasecmp.m4 (gl_FUNC_WCSCASECMP): Move AC_LIBOBJ invocation from here... * modules/wcscasecmp (configure.ac): ... to here. 2011-05-22 Bruno Haible wcrtomb: Move AC_LIBOBJ invocations to module description. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Move AC_LIBOBJ and gl_PREREQ_WCRTOMB invocations from here... * modules/wcrtomb (configure.ac): ... to here. 2011-05-22 Bruno Haible wcpncpy: Move AC_LIBOBJ invocations to module description. * m4/wcpncpy.m4 (gl_FUNC_WCPNCPY): Move AC_LIBOBJ invocation from here... * modules/wcpncpy (configure.ac): ... to here. 2011-05-22 Bruno Haible wcpcpy: Move AC_LIBOBJ invocations to module description. * m4/wcpcpy.m4 (gl_FUNC_WCPCPY): Move AC_LIBOBJ invocation from here... * modules/wcpcpy (configure.ac): ... to here. 2011-05-22 Bruno Haible waitpid: Move AC_LIBOBJ invocations to module description. * m4/waitpid.m4 (gl_FUNC_WAITPID): Set HAVE_WAITPID. Move AC_LIBOBJ invocation from here... * modules/waitpid (configure.ac): ... to here. 2011-05-22 Bruno Haible utimensat: Move AC_LIBOBJ invocations to module description. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Move AC_LIBOBJ invocations from here... * modules/utimensat (configure.ac): ... to here. 2011-05-22 Bruno Haible usleep: Move AC_LIBOBJ invocations to module description. * m4/usleep.m4 (gl_FUNC_USLEEP): Move AC_LIBOBJ invocations from here... * modules/usleep (configure.ac): ... to here. 2011-05-22 Bruno Haible unlockpt: Move AC_LIBOBJ invocations to module description. * m4/unlockpt.m4 (gl_FUNC_UNLOCKPT): Move AC_LIBOBJ and gl_PREREQ_UNLOCKPT invocations from here... * modules/unlockpt (configure.ac): ... to here. 2011-05-22 Bruno Haible unlink: Respect rules for use of AC_LIBOBJ. * m4/unlink.m4 (gl_FUNC_UNLINK): Move AC_LIBOBJ invocation from here... * modules/unlink (configure.ac): ... to here. 2011-05-22 Bruno Haible uname: Move AC_LIBOBJ invocations to module description. * m4/uname.m4 (gl_FUNC_UNAME): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_UNAME invocations from here... * modules/uname (configure.ac): ... to here. 2011-05-22 Bruno Haible ttyname_r: Move AC_LIBOBJ invocations to module description. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Move AC_LIBOBJ and gl_PREREQ_TTYNAME_R invocations from here... * modules/ttyname_r (configure.ac): ... to here. 2011-05-22 Bruno Haible tsearch: Move AC_LIBOBJ invocations to module description. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Move AC_LIBOBJ and gl_PREREQ_TSEARCH invocations from here... * modules/tsearch (configure.ac): ... to here. 2011-05-22 Bruno Haible towctrans: Move AC_LIBOBJ invocations to module description. * m4/towctrans.m4 (gl_FUNC_TOWCTRANS): Set HAVE_TOWCTRANS. Move AC_LIBOBJ invocation from here... * modules/towctrans (configure.ac): ... to here. 2011-05-22 Bruno Haible tmpfile: Move AC_LIBOBJ invocations to module description. * m4/tmpfile.m4 (gl_FUNC_TMPFILE): Move AC_LIBOBJ and gl_PREREQ_TMPFILE invocations from here... * modules/tmpfile (configure.ac): ... to here. 2011-05-22 Bruno Haible times: Move AC_LIBOBJ invocations to module description. * m4/times.m4 (gl_FUNC_TIMES): Move AC_LIBOBJ invocation from here... * modules/times (configure.ac): ... to here. 2011-05-22 Bruno Haible time_r: Move AC_LIBOBJ invocations to module description. * m4/time_r.m4 (gl_TIME_R): Move AC_LIBOBJ and gl_PREREQ_TIME_R invocations from here... * modules/time_r (configure.ac): ... to here. 2011-05-22 Bruno Haible timegm: Move AC_LIBOBJ invocations to module description. * m4/timegm.m4 (gl_FUNC_TIMEGM): Move AC_LIBOBJ and gl_PREREQ_TIMEGM invocations from here... * modules/timegm (configure.ac): ... to here. 2011-05-22 Bruno Haible tcgetsid: Move AC_LIBOBJ invocations to module description. * m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Set HAVE_TCGETSID. Move AC_LIBOBJ and gl_PREREQ_TCGETSID invocations from here... * modules/tcgetsid (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible symlinkat: Move AC_LIBOBJ invocations to module description. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Move AC_LIBOBJ invocation from here... * modules/symlinkat (configure.ac): ... to here. 2011-05-22 Bruno Haible symlink: Move AC_LIBOBJ invocations to module description. * m4/symlink.m4 (gl_FUNC_SYMLINK): Move AC_LIBOBJ invocations from here... * modules/symlink (configure.ac): ... to here. 2011-05-22 Bruno Haible strverscmp: Move AC_LIBOBJ invocations to module description. * m4/strverscmp.m4 (gl_FUNC_STRVERSCMP): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRVERSCMP invocations from here... * modules/strverscmp (configure.ac): ... to here. 2011-05-22 Bruno Haible strtok_r: Move AC_LIBOBJ invocations to module description. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Set HAVE_STRTOK_R. Move AC_LIBOBJ and gl_PREREQ_STRTOK_R invocations from here... * modules/strtok_r (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible strtoumax: Move AC_LIBOBJ invocations to module description. * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRTOUMAX invocations from here... * modules/strtoumax (configure.ac): ... to here. 2011-05-22 Bruno Haible strtoimax: Move AC_LIBOBJ invocations to module description. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRTOIMAX invocations from here... * modules/strtoimax (configure.ac): ... to here. 2011-05-22 Bruno Haible strtoull: Move AC_LIBOBJ invocations to module description. * m4/strtoull.m4 (gl_FUNC_STRTOULL): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRTOULL invocations from here... * modules/strtoull (configure.ac): ... to here. 2011-05-22 Bruno Haible strtoll: Move AC_LIBOBJ invocations to module description. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRTOLL invocations from here... * modules/strtoll (configure.ac): ... to here. 2011-05-22 Bruno Haible strtoul: Move AC_LIBOBJ invocations to module description. * m4/strtoul.m4 (gl_FUNC_STRTOUL): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ invocation from here... * modules/strtoul (configure.ac): ... to here. 2011-05-22 Bruno Haible strtol: Move AC_LIBOBJ invocations to module description. * m4/strtol.m4 (gl_FUNC_STRTOL): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ invocation from here... * modules/strtol (configure.ac): ... to here. 2011-05-22 Bruno Haible strtod: Move AC_LIBOBJ invocations to module description. * m4/strtod.m4 (gl_FUNC_STRTOD): Move AC_LIBOBJ and gl_PREREQ_STRTOD invocations from here... * modules/strtod (configure.ac): ... to here. 2011-05-22 Bruno Haible strstr*: Move AC_LIBOBJ invocations to module description. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE, gl_FUNC_STRSTR): Move AC_LIBOBJ invocations from here... * modules/strstr-simple (configure.ac): ... to here. * modules/strstr (configure.ac): ... and here. 2011-05-22 Bruno Haible strsignal: Move AC_LIBOBJ invocations to module description. * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Set HAVE_STRSIGNAL. Move AC_LIBOBJ and gl_PREREQ_STRSIGNAL invocations from here... * modules/strsignal (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible strsep: Move AC_LIBOBJ invocations to module description. * m4/strsep.m4 (gl_FUNC_STRSEP): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRSEP invocations from here... * modules/strsep (configure.ac): ... to here. 2011-05-22 Bruno Haible strptime: Move AC_LIBOBJ invocations to module description. * m4/strptime.m4 (gl_FUNC_STRPTIME): Move AC_LIBOBJ and gl_PREREQ_STRPTIME invocations from here... * modules/strptime (configure.ac): ... to here. 2011-05-22 Bruno Haible strpbrk: Move AC_LIBOBJ invocations to module description. * m4/strpbrk.m4 (gl_FUNC_STRPBRK): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRPBRK invocations from here... * modules/strpbrk (configure.ac): ... to here. 2011-05-22 Bruno Haible strnlen: Move AC_LIBOBJ invocations to module description. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Move AC_LIBOBJ and gl_PREREQ_STRNLEN invocations from here... * modules/strnlen (configure.ac): ... to here. 2011-05-22 Bruno Haible strndup: Move AC_LIBOBJ invocations to module description. * m4/strndup.m4 (gl_FUNC_STRNDUP): Set HAVE_STRNDUP. Move AC_LIBOBJ invocations from here... * modules/strndup (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-22 Bruno Haible strncat: Move AC_LIBOBJ invocations to module description. * m4/strncat.m4 (gl_FUNC_STRNCAT): Move AC_LIBOBJ and gl_PREREQ_STRNCAT invocations from here... * modules/strncat (configure.ac): ... to here. 2011-05-22 Bruno Haible strdup, strdup-posix: Move AC_LIBOBJ invocations to module description. * m4/strdup.m4 (gl_FUNC_STRDUP): Move AC_LIBOBJ and gl_PREREQ_STRDUP invocations from here... * modules/strdup (configure.ac): ... to here. * modules/strdup-posix (configure.ac): ... and here. 2011-05-22 Bruno Haible strcspn: Move AC_LIBOBJ invocations to module description. * m4/strcspn.m4 (gl_FUNC_STRCSPN): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STRCSPN invocations from here... * modules/strcspn (configure.ac): ... to here. 2011-05-22 Bruno Haible strchrnul: Move AC_LIBOBJ invocations to module description. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Move AC_LIBOBJ and gl_PREREQ_STRCHRNUL invocations from here... * modules/strchrnul (configure.ac): ... to here. 2011-05-22 Bruno Haible strcasestr*: Move AC_LIBOBJ invocations to module description. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE, gl_FUNC_STRCASESTR): Move AC_LIBOBJ and gl_PREREQ_STRCASESTR invocations from here... * modules/strcasestr-simple (configure.ac): ... to here. * modules/strcasestr (configure.ac): ... and here. 2011-05-22 Bruno Haible strcase: Move AC_LIBOBJ invocations to module description. * m4/strcase.m4 (gl_FUNC_STRNCASECMP): Set HAVE_STRNCASECMP. (gl_FUNC_STRCASECMP, gl_FUNC_STRNCASECMP): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ, gl_PREREQ_STRCASECMP, gl_PREREQ_STRNCASECMP invocations from here... * modules/strcase (configure.ac): ... to here. 2011-05-22 Bruno Haible stpncpy: Move AC_LIBOBJ invocations to module description. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Move AC_LIBOBJ invocations from here... * modules/stpncpy (configure.ac): ... to here. 2011-05-22 Bruno Haible stpcpy: Move AC_LIBOBJ invocations to module description. * m4/stpcpy.m4 (gl_FUNC_STPCPY): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_STPCPY invocations from here... * modules/stpcpy (configure.ac): ... to here. 2011-05-21 Bruno Haible stat: Move AC_LIBOBJ invocations to module description. * m4/stat.m4 (gl_PREREQ_STAT): New macro, extracted from gl_FUNC_STAT. (gl_FUNC_STAT): Move AC_LIBOBJ and gl_PREREQ_STAT invocations from here... * modules/stat (configure.ac): ... to here. 2011-05-21 Bruno Haible sleep: Move AC_LIBOBJ invocations to module description. * m4/sleep.m4 (gl_FUNC_SLEEP): Move AC_LIBOBJ invocations from here... * modules/sleep (configure.ac): ... to here. 2011-05-21 Bruno Haible signbit: Move AC_LIBOBJ invocations to module description. * m4/signbit.m4 (gl_SIGNBIT): Move AC_LIBOBJ invocations from here... * modules/signbit (configure.ac): ... to here. 2011-05-21 Bruno Haible sigprocmask: Move AC_LIBOBJ invocations to module description. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Move AC_LIBOBJ and gl_PREREQ_SIGPROMASK invocations from here... * modules/sigprocmask (configure.ac): ... to here. 2011-05-21 Bruno Haible sigaction: Move AC_LIBOBJ invocations to module description. * m4/sigaction.m4 (gl_SIGACTION): Move AC_LIBOBJ and gl_PREREQ_SIGACTION invocations from here... * modules/sigaction (configure.ac): ... to here. 2011-05-21 Bruno Haible sig2str: Move AC_LIBOBJ invocations to module description. * m4/sig2str.m4 (gl_FUNC_SIG2STR): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_SIG2STR invocations from here... * modules/sig2str (configure.ac): ... to here. 2011-05-21 Bruno Haible setlocale: Move AC_LIBOBJ invocations to module description. * m4/setlocale.m4 (gl_FUNC_SETLOCALE): Move AC_LIBOBJ and gl_PREREQ_SETLOCALE invocations from here... * modules/setlocale (configure.ac): ... to here. 2011-05-21 Bruno Haible unsetenv: Move AC_LIBOBJ invocations to module description. * m4/setenv.m4 (gl_FUNC_UNSETENV): Set HAVE_UNSETENV. Move AC_LIBOBJ and gl_PREREQ_UNSETENV invocations from here... * modules/unsetenv (configure.ac): ... to here. (Depends-on): Update. 2011-05-21 Bruno Haible setenv: Move AC_LIBOBJ invocations to module description. * m4/setenv.m4 (gl_FUNC_SETENV): Move AC_LIBOBJ invocations from here... * modules/setenv (configure.ac): ... to here. 2011-05-21 Bruno Haible selinux-h: Move AC_LIBOBJ invocations to module description. * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): Move AC_LIBOBJ invocation from here... * modules/selinux-h (configure.ac): ... to here. 2011-05-21 Bruno Haible select: Respect rules for use of AC_LIBOBJ. * m4/select.m4 (gl_FUNC_SELECT): Move AC_LIBOBJ invocations from here... * modules/select (configure.ac): ... to here. 2011-05-21 Bruno Haible scandir: Move AC_LIBOBJ invocations to module description. * m4/scandir.m4 (gl_FUNC_SCANDIR): Move AC_LIBOBJ and gl_PREREQ_SCANDIR invocations from here... * modules/scandir (configure.ac): ... to here. 2011-05-21 Bruno Haible rpmatch: Move AC_LIBOBJ invocations to module description. * m4/rpmatch.m4 (gl_FUNC_RPMATCH): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_RPMATCH invocations from here... * modules/rpmatch (configure.ac): ... to here. 2011-05-21 Bruno Haible rmdir: Respect rules for use of AC_LIBOBJ. * m4/rmdir.m4 (gl_FUNC_RMDIR): Move AC_LIBOBJ invocation from here... * modules/rmdir (configure.ac): ... to here. 2011-05-21 Bruno Haible renameat: Move AC_LIBOBJ invocations to module description. * m4/renameat.m4 (gl_FUNC_RENAMEAT): Move AC_LIBOBJ invocations from here... * modules/renameat (configure.ac): ... to here. 2011-05-21 Bruno Haible rename: Respect rules for use of AC_LIBOBJ. * m4/rename.m4 (gl_FUNC_RENAME): Move AC_LIBOBJ invocations from here... * modules/rename (configure.ac): ... to here. 2011-05-21 Bruno Haible remove: Move AC_LIBOBJ invocations to module description. * m4/remove.m4 (gl_FUNC_REMOVE): Move AC_LIBOBJ invocations from here... * modules/remove (configure.ac): ... to here. 2011-05-21 Bruno Haible relocatable-lib: Move AC_LIBOBJ invocations to module description. * m4/relocatable-lib.m4 (gl_RELOCATABLE_LIBRARY_SEPARATE): Remove macro. (gl_RELOCATABLE_LIBRARY): Move AC_LIBOBJ invocation from here... * modules/relocatable-lib (configure.ac): ... to here. * modules/relocatable-prog-wrapper (configure.ac): Invoke gl_RELOCATABLE_LIBRARY instead of gl_RELOCATABLE_LIBRARY_SEPARATE. 2011-05-21 Bruno Haible relocatable-prog: Move AC_LIBOBJ invocations to module description. * m4/relocatable.m4 (gl_RELOCATABLE): Move AC_LIBOBJ invocation from here... * modules/relocatable-prog (configure.ac): ... to here. 2011-05-21 Bruno Haible regex: Move AC_LIBOBJ invocations to module description. * m4/regex.m4 (gl_REGEX): Move AC_LIBOBJ and gl_PREREQ_REGEX invocations from here... * modules/regex (configure.ac): ... to here. 2011-05-21 Bruno Haible realloc-*: Move AC_LIBOBJ invocations to module description. * m4/realloc.m4 (gl_REPLACE_REALLOC): Remove macro. (gl_FUNC_REALLOC_GNU, gl_FUNC_REALLOC_POSIX): Inline it here. Move AC_LIBOBJ invocations from here... * modules/realloc-gnu (configure.ac): ... to here. * modules/realloc-posix (configure.ac): ... and here. 2011-05-21 Bruno Haible readutmp: Move AC_LIBOBJ invocations to module description. * m4/readutmp.m4 (gl_READUTMP): Move AC_LIBOBJ invocation from here... * modules/readutmp (configure.ac): ... to here. 2011-05-21 Bruno Haible readlinkat: Move AC_LIBOBJ invocations to module description. * m4/readlinkat.m4 (gl_FUNC_READLINKAT): Move AC_LIBOBJ invocation from here... * modules/readlinkat (configure.ac): ... to here. 2011-05-21 Bruno Haible readlink: Move AC_LIBOBJ invocations to module description. * m4/readlink.m4 (gl_FUNC_READLINK): Move AC_LIBOBJ and gl_PREREQ_READLINK invocations from here... * modules/readlink (configure.ac): ... to here. 2011-05-21 Bruno Haible readline: Move AC_LIBOBJ invocations to module description. * m4/readline.m4 (gl_FUNC_READLINE): Move AC_LIBOBJ and gl_PREREQ_READLINE invocations from here... * modules/readline (configure.ac): ... to here. 2011-05-21 Bruno Haible read: Move AC_LIBOBJ invocations to module description. * m4/read.m4 (gl_FUNC_READ): Move AC_LIBOBJ invocation from here... * modules/read (configure.ac): ... to here. 2011-05-21 Bruno Haible rawmemchr: Move AC_LIBOBJ invocations to module description. * m4/rawmemchr.m4 (gl_FUNC_RAWMEMCHR): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_RAWMEMCHR invocations from here... * modules/rawmemchr (configure.ac): ... to here. 2011-05-21 Bruno Haible random_r: Move AC_LIBOBJ invocations to module description. * m4/random_r.m4 (gl_FUNC_RANDOM_R): Move AC_LIBOBJ and gl_PREREQ_RANDOM_R invocations from here... * modules/random_r (configure.ac): ... to here. 2011-05-21 Bruno Haible pwrite: Move AC_LIBOBJ invocations to module description. * m4/pwrite.m4 (gl_FUNC_PWRITE): Move AC_LIBOBJ invocation from here... * modules/pwrite (configure.ac): ... to here. 2011-05-21 Bruno Haible putenv: Move AC_LIBOBJ invocations to module description. * m4/putenv.m4 (gl_FUNC_PUTENV): Move AC_LIBOBJ invocation from here... * modules/putenv (configure.ac): ... to here. 2011-05-21 Bruno Haible login_tty: Move AC_LIBOBJ invocations to module description. * m4/pty.m4 (gl_FUNC_LOGIN_TTY): Move AC_LIBOBJ invocation from here... * modules/login_tty (configure.ac): ... to here. 2011-05-21 Bruno Haible openpty: Move AC_LIBOBJ invocations to module description. * m4/pty.m4 (gl_FUNC_OPENPTY): Move AC_LIBOBJ invocations from here... * modules/openpty (configure.ac): ... to here. 2011-05-21 Bruno Haible forkpty: Move AC_LIBOBJ invocations to module description. * m4/pty.m4 (gl_FUNC_FORKPTY): Move AC_LIBOBJ invocations from here... * modules/forkpty (configure.ac): ... to here. 2011-05-21 Bruno Haible ptsname: Move AC_LIBOBJ invocations to module description. * m4/ptsname.m4 (gl_FUNC_PTSNAME): Move AC_LIBOBJ and gl_PREREQ_PTSNAME invocations from here... * modules/ptsname (configure.ac): ... to here. 2011-05-21 Bruno Haible pread: Move AC_LIBOBJ invocations to module description. * m4/pread.m4 (gl_FUNC_PREAD): Move AC_LIBOBJ invocation from here... * modules/pread (configure.ac): ... to here. 2011-05-21 Bruno Haible posix_spawn*: Move AC_LIBOBJ invocations to module description. * m4/posix_spawn.m4 (gl_PREREQ_POSIX_SPAWN_INTERNAL): Renamed from gl_POSIX_SPAWN_INTERNAL. Move AC_LIBOBJ invocation from here... * modules/posix_spawn (configure.ac): ... to here. * modules/posix_spawnp (configure.ac): ... and here. 2011-05-21 Bruno Haible popen: Move AC_LIBOBJ invocations to module description. * m4/popen.m4 (gl_FUNC_POPEN): Move AC_LIBOBJ and gl_PREREQ_POPEN invocations from here... * modules/popen (configure.ac): ... to here. 2011-05-21 Bruno Haible poll: Move AC_LIBOBJ invocations to module description. * m4/poll.m4 (gl_FUNC_POLL): Move AC_LIBOBJ and gl_PREREQ_POLL invocations from here... * modules/poll (configure.ac): ... to here. 2011-05-21 Bruno Haible pipe-posix: Move AC_LIBOBJ invocations to module description. * m4/pipe.m4 (gl_FUNC_PIPE): Move AC_LIBOBJ invocation from here... * modules/pipe-posix (configure.ac): ... to here. 2011-05-21 Bruno Haible openat: Respect rules for use of AC_LIBOBJ. * m4/openat.m4 (gl_FUNC_OPENAT): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ invocations from here... * modules/openat (configure.ac): ... to here. 2011-05-21 Bruno Haible obstack-printf*: Move AC_LIBOBJ invocations to module description. * m4/obstack-printf.m4 (gl_REPLACE_OBSTACK_PRINTF): Move AC_LIBOBJ invocation from here... * modules/obstack-printf (configure.ac): ... to here. * modules/obstack-printf-posix (configure.ac): ... and here. 2011-05-21 Bruno Haible nl_langinfo: Move AC_LIBOBJ invocations to module description. * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Move AC_LIBOBJ invocations from here... * modules/nl_langinfo (configure.ac): ... to here. 2011-05-21 Bruno Haible nanosleep: Move AC_LIBOBJ invocations to module description. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Move AC_LIBOBJ and gl_PREREQ_NANOSLEEP invocations from here... * modules/nanosleep (configure.ac): ... to here. 2011-05-21 Bruno Haible mountlist: Move AC_LIBOBJ invocations to module description. * m4/mountlist.m4 (gl_MOUNTLIST): Move AC_LIBOBJ and gl_PREREQ_MOUNTLIST_EXTRA invocations from here... * modules/mountlist (configure.ac): ... to here. 2011-05-21 Bruno Haible mktime: Respect rules for use of AC_LIBOBJ. * m4/mktime.m4 (AC_FUNC_MKTIME): Remove macro. (gl_FUNC_MKTIME): Inline it here. Set gl_cv_func_working_mktime. Move AC_LIBOBJ and gl_PREREQ_MKTIME invocations from here... (gl_FUNC_MKTIME_INTERNAL): ... and here... * modules/mktime (configure.ac): ... to here. * modules/mktime-internal (configure.ac): ... and here. * m4/timegm.m4 (gl_FUNC_TIMEGM): Update. 2011-05-21 Bruno Haible mkstemps: Move AC_LIBOBJ invocations to module description. * m4/mkstemps.m4 (gl_FUNC_MKSTEMPS): Move AC_LIBOBJ invocation from here... * modules/mkstemps (configure.ac): ... to here. 2011-05-21 Bruno Haible mkstemp: Move AC_LIBOBJ invocations to module description. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Move AC_LIBOBJ and gl_PREREQ_MKSTEMP invocations from here... * modules/mkstemp (configure.ac): ... to here. 2011-05-21 Bruno Haible mkostemps: Move AC_LIBOBJ invocations to module description. * m4/mkostemps.m4 (gl_FUNC_MKOSTEMPS): Move AC_LIBOBJ invocation from here... * modules/mkostemps (configure.ac): ... to here. 2011-05-21 Bruno Haible mkostemp: Move AC_LIBOBJ invocations to module description. * m4/mkostemp.m4 (gl_FUNC_MKOSTEMP): Move AC_LIBOBJ and gl_PREREQ_MKOSTEMP invocations from here... * modules/mkostemp (configure.ac): ... to here. 2011-05-21 Bruno Haible mknod: Move AC_LIBOBJ invocations to module description. * m4/mknod.m4 (gl_FUNC_MKNOD): Move AC_LIBOBJ invocations from here... * modules/mknod (configure.ac): ... to here. 2011-05-21 Bruno Haible mkfifoat: Move AC_LIBOBJ invocations to module description. * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Move AC_LIBOBJ invocations from here... * modules/mkfifoat (configure.ac): ... to here. 2011-05-21 Bruno Haible mkfifo: Respect rules for use of AC_LIBOBJ. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Move AC_LIBOBJ invocations from here... * modules/mkfifo (configure.ac): ... to here. 2011-05-21 Bruno Haible mkdtemp: Move AC_LIBOBJ invocations to module description. * m4/mkdtemp.m4 (gl_FUNC_MKDTEMP): Move AC_LIBOBJ and gl_PREREQ_MKDTEMP invocations from here... * modules/mkdtemp (configure.ac): ... to here. 2011-05-21 Bruno Haible mkdir: Move AC_LIBOBJ invocations to module description. * m4/mkdir.m4 (gl_FUNC_MKDIR): Move AC_LIBOBJ invocations from here... * modules/mkdir (configure.ac): ... to here. 2011-05-21 Bruno Haible memset: Move AC_LIBOBJ invocations to module description. * m4/memset.m4 (gl_FUNC_MEMSET): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_MEMSET invocations from here... * modules/memset (configure.ac): ... to here. 2011-05-21 Bruno Haible memrchr: Move AC_LIBOBJ invocations to module description. * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_MEMRCHR invocations from here... * modules/memrchr (configure.ac): ... to here. 2011-05-21 Bruno Haible mempcpy: Move AC_LIBOBJ invocations to module description. * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_MEMPCPY invocations from here... * modules/mempcpy (configure.ac): ... to here. 2011-05-21 Bruno Haible memmove: Move AC_LIBOBJ invocations to module description. * m4/memmove.m4 (gl_FUNC_MEMMOVE): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_MEMMOVE invocations from here... * modules/memmove (configure.ac): ... to here. 2011-05-21 Bruno Haible memmem*: Move AC_LIBOBJ invocations to module description. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Set HAVE_MEMMEM. Move AC_LIBOBJ invocations from here... (gl_FUNC_MEMMEM): ... and here... * modules/memmem-simple (configure.ac): ... to here. * modules/memmem (configure.ac): ... and here. 2011-05-21 Bruno Haible memcpy: Move AC_LIBOBJ invocations to module description. * m4/memcpy.m4 (gl_FUNC_MEMCPY): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_MEMCPY invocations from here... * modules/memcpy (configure.ac): ... to here. 2011-05-21 Bruno Haible memcmp: Simplify autoconf macro. * m4/memcmp.m4 (gl_FUNC_MEMCMP): Merge the cross-compilation code into the AC_RUN_IFELSE invocation. Set gl_func_memcmp. * modules/memcmp (Depends-on, configure.ac): Test gl_func_memcmp. 2011-05-21 Bruno Haible memcmp: Move AC_LIBOBJ invocations to module description. * m4/memcmp.m4 (AC_FUNC_MEMCMP): Remove macro. (gl_FUNC_MEMCMP): Inline it here. Set gl_cv_func_memcmp_working. Move AC_LIBOBJ and gl_PREREQ_MEMCMP invocations from here... * modules/memcmp (configure.ac): ... to here. (Depends-on): Update conditions. 2011-05-21 Bruno Haible memchr: Respect rules for use of AC_LIBOBJ. * m4/memchr.m4 (gl_FUNC_MEMCHR): Move AC_LIBOBJ and gl_PREREQ_MEMCHR invocations from here... * modules/memchr (configure.ac): ... to here. 2011-05-21 Bruno Haible mbtowc: Move AC_LIBOBJ invocations to module description. * m4/mbtowc.m4 (gl_FUNC_MBTOWC): Move AC_LIBOBJ and gl_PREREQ_MBTOWC invocations from here... * modules/mbtowc (configure.ac): ... to here. 2011-05-21 Bruno Haible mbsrtowcs: Move AC_LIBOBJ invocations to module description. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): Move AC_LIBOBJ and gl_PREREQ_MBSRTOWCS invocations from here... * modules/mbsrtowcs (configure.ac): ... to here. 2011-05-21 Bruno Haible mbsnrtowcs: Move AC_LIBOBJ invocations to module description. * m4/mbsnrtowcs.m4 (gl_FUNC_MBSNRTOWCS): Move AC_LIBOBJ and gl_PREREQ_MBSNRTOWCS invocations from here... * modules/mbsnrtowcs (configure.ac): ... to here. 2011-05-21 Bruno Haible mbsinit: Move AC_LIBOBJ invocations to module description. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): Move AC_LIBOBJ and gl_PREREQ_MBSINIT invocations from here... * modules/mbsinit (configure.ac): ... to here. 2011-05-21 Bruno Haible mbrlen: Move AC_LIBOBJ invocations to module description. * m4/mbrlen.m4 (gl_FUNC_MBRLEN): Move AC_LIBOBJ and gl_PREREQ_MBRLEN invocations from here... * modules/mbrlen (configure.ac): ... to here. 2011-05-21 Bruno Haible mbrtowc: Respect rules for use of AC_LIBOBJ. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): Move AC_LIBOBJ and gl_PREREQ_MBRTOWC invocations from here... * modules/mbrtowc (configure.ac): ... to here. 2011-05-21 Bruno Haible malloc-*: Move AC_LIBOBJ invocations to module description. * m4/malloc.m4 (gl_REPLACE_MALLOC): Remove macro. (gl_FUNC_MALLOC_GNU, gl_FUNC_MALLOC_POSIX): Inline it here. Move AC_LIBOBJ invocations from here... * modules/malloc-gnu (configure.ac): ... to here. * modules/malloc-posix (configure.ac): ... and here. 2011-05-21 Bruno Haible lstat, openat: Respect rules for use of AC_LIBOBJ. * m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Renamed from AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. Set variable gl_cv_func_lstat_dereferences_slashed_symlink. Don't invoke AC_LIBOBJ. (gl_PREREQ_LSTAT): New macro, extracted from gl_FUNC_LSTAT. (gl_FUNC_LSTAT): Update. Remove gl_PREREQ_LSTAT code. * modules/lstat (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_LSTAT here. * m4/openat.m4 (gl_FUNC_OPENAT): Update. 2011-05-21 Bruno Haible lseek: Move AC_LIBOBJ invocations to module description. * m4/lseek.m4 (gl_REPLACE_LSEEK): Remove macro. (gl_FUNC_LSEEK): Inline it here. Move AC_LIBOBJ invocation from here... * modules/lseek (configure.ac): ... to here. 2011-05-21 Bruno Haible linkat: Move AC_LIBOBJ invocations to module description. * m4/linkat.m4 (gl_FUNC_LINKAT): Move AC_LIBOBJ invocations from here... * modules/linkat (configure.ac): ... to here. 2011-05-21 Bruno Haible link: Respect rules for use of AC_LIBOBJ. * m4/link.m4 (gl_FUNC_LINK): Move AC_LIBOBJ invocations from here... * modules/link (configure.ac): ... to here. 2011-05-21 Bruno Haible lchown: Move AC_LIBOBJ invocations to module description. * m4/lchown.m4 (gl_FUNC_EUIDACCESS): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ invocations from here... * modules/lchown (configure.ac): ... to here. 2011-05-21 Bruno Haible iswctype: Move AC_LIBOBJ invocations to module description. * m4/iswctype.m4 (gl_FUNC_ISWCTYPE): Move AC_LIBOBJ invocation from here... * modules/iswctype (configure.ac): ... to here. 2011-05-21 Bruno Haible iswblank: Move AC_LIBOBJ invocations to module description. * m4/iswblank.m4 (gl_FUNC_ISWBLANK): Move AC_LIBOBJ invocation from here... * modules/iswblank (configure.ac): ... to here. 2011-05-21 Bruno Haible atanl: Move AC_LIBOBJ invocations to module description. * m4/atanl.m4 (gl_FUNC_ATANL): Move AC_LIBOBJ invocation from here... * modules/atanl (configure.ac): ... to here. 2011-05-21 Bruno Haible acosl: Move AC_LIBOBJ invocations to module description. * m4/acosl.m4 (gl_FUNC_ACOSL): Move AC_LIBOBJ invocation from here... * modules/acosl (configure.ac): ... to here. 2011-05-21 Bruno Haible asinl: Respect rules for use of AC_LIBOBJ. * m4/asinl.m4 (gl_FUNC_ASINL): Move AC_LIBOBJ invocation from here... * modules/asinl (configure.ac): ... to here. 2011-05-21 Bruno Haible tanl: Move AC_LIBOBJ invocations to module description. * m4/tanl.m4 (gl_FUNC_TANL): Move AC_LIBOBJ invocations from here... * modules/tanl (configure.ac): ... to here. 2011-05-21 Bruno Haible cosl: Move AC_LIBOBJ invocations to module description. * m4/cosl.m4 (gl_FUNC_COSL): Move AC_LIBOBJ invocations from here... * modules/cosl (configure.ac): ... to here. 2011-05-21 Bruno Haible sinl: Move AC_LIBOBJ invocations to module description. * m4/sinl.m4 (gl_FUNC_SINL): Move AC_LIBOBJ invocations from here... * modules/sinl (configure.ac): ... to here. 2011-05-21 Bruno Haible logl: Move AC_LIBOBJ invocations to module description. * m4/logl.m4 (gl_FUNC_LOGL): Move AC_LIBOBJ invocation from here... * modules/logl (configure.ac): ... to here. 2011-05-21 Bruno Haible expl: Move AC_LIBOBJ invocations to module description. * m4/expl.m4 (gl_FUNC_EXPL): Move AC_LIBOBJ invocation from here... * modules/expl (configure.ac): ... to here. 2011-05-21 Bruno Haible roundl: Move AC_LIBOBJ invocations to module description. * m4/roundl.m4 (gl_FUNC_ROUNDL): Move AC_LIBOBJ invocation from here... * modules/roundl (configure.ac): ... to here. 2011-05-21 Bruno Haible round: Move AC_LIBOBJ invocations to module description. * m4/round.m4 (gl_FUNC_ROUND): Move AC_LIBOBJ invocation from here... * modules/round (configure.ac): ... to here. 2011-05-21 Bruno Haible roundf: Move AC_LIBOBJ invocations to module description. * m4/roundf.m4 (gl_FUNC_ROUNDF): Move AC_LIBOBJ invocation from here... * modules/roundf (configure.ac): ... to here. 2011-05-21 Bruno Haible truncl: Move AC_LIBOBJ invocations to module description. * m4/truncl.m4 (gl_FUNC_TRUNCL): Move AC_LIBOBJ invocation from here... * modules/truncl (configure.ac): ... to here. 2011-05-21 Bruno Haible trunc: Move AC_LIBOBJ invocations to module description. * m4/trunc.m4 (gl_FUNC_TRUNC): Move AC_LIBOBJ invocation from here... * modules/trunc (configure.ac): ... to here. 2011-05-21 Bruno Haible truncf: Move AC_LIBOBJ invocations to module description. * m4/truncf.m4 (gl_FUNC_TRUNCF): Move AC_LIBOBJ invocation from here... * modules/truncf (configure.ac): ... to here. 2011-05-21 Bruno Haible ceill: Move AC_LIBOBJ invocations to module description. * m4/ceill.m4 (gl_FUNC_CEILL): Move AC_LIBOBJ invocation from here... * modules/ceill (configure.ac): ... to here. 2011-05-21 Bruno Haible ceil: Move AC_LIBOBJ invocations to module description. * m4/ceil.m4 (gl_FUNC_CEIL): Move AC_LIBOBJ invocation from here... * modules/ceil (configure.ac): ... to here. 2011-05-21 Bruno Haible ceilf: Move AC_LIBOBJ invocations to module description. * m4/ceilf.m4 (gl_FUNC_CEILF): Move AC_LIBOBJ invocation from here... * modules/ceilf (configure.ac): ... to here. 2011-05-21 Bruno Haible floorl: Respect rules for use of AC_LIBOBJ. * m4/floorl.m4 (gl_FUNC_FLOORL): Move AC_LIBOBJ invocation from here... * modules/floorl (configure.ac): ... to here. 2011-05-21 Bruno Haible floor: Respect rules for use of AC_LIBOBJ. * m4/floor.m4 (gl_FUNC_FLOOR): Move AC_LIBOBJ invocation from here... * modules/floor (configure.ac): ... to here. 2011-05-21 Bruno Haible floorf: Move AC_LIBOBJ invocations to module description. * m4/floorf.m4 (gl_FUNC_FLOORF): Move AC_LIBOBJ invocation from here... * modules/floorf (configure.ac): ... to here. 2011-05-20 Bruno Haible sqrtl: Respect rules for use of AC_LIBOBJ. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Move AC_LIBOBJ invocation from here... * modules/sqrtl (configure.ac): ... to here. 2011-05-20 Bruno Haible ldexpl: Respect rules for use of AC_LIBOBJ. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Move AC_LIBOBJ invocation from here... * modules/ldexpl (configure.ac): ... to here. 2011-05-20 Bruno Haible frexpl*: Respect rules for use of AC_LIBOBJ. * m4/frexpl.m4 (gl_FUNC_FREXPL, gl_FUNC_FREXPL_NO_LIBM): Move AC_LIBOBJ invocation from here... * modules/frexpl (configure.ac): ... to here. * modules/frexpl-nolibm (configure.ac): ... and here. 2011-05-20 Bruno Haible frexp, frexp-nolibm: Move AC_LIBOBJ invocations to module description. * m4/frexp.m4 (gl_FUNC_FREXP, gl_FUNC_FREXP_NO_LIBM): Move AC_LIBOBJ invocation from here... * modules/frexp (configure.ac): ... to here. * modules/frexp-nolibm (configure.ac): ... and here. 2011-05-20 Bruno Haible isnan: Respect rules for use of AC_LIBOBJ. * m4/isnan.m4 (gl_ISNAN): Don't do the AC_LIBOBJ and gl_PREREQ_ISNAN* invocations here. * modules/isnanf (configure.ac): Require gl_ISNAN if it exists. Test REPLACE_ISNAN. * modules/isnand (configure.ac): Likewise. * modules/isnanl (configure.ac): Likewise. 2011-05-20 Bruno Haible isnanl*: Respect rules for use of AC_LIBOBJ. * m4/isnanl.m4 (gl_FUNC_ISNANL, gl_FUNC_ISNANL_NO_LIBM): Move AC_LIBOBJ invocation from here... * modules/isnanl (configure.ac): ... to here. * modules/isnanl-nolibm (configure.ac): ... and here. 2011-05-20 Bruno Haible isnand*: Move AC_LIBOBJ invocations to module description. * m4/isnand.m4 (gl_FUNC_ISNAND, gl_FUNC_ISNAND_NO_LIBM): Move AC_LIBOBJ invocation from here... * modules/isnand (configure.ac): ... to here. * modules/isnand-nolibm (configure.ac): ... and here. 2011-05-20 Bruno Haible isnanf*: Move AC_LIBOBJ invocations to module description. * m4/isnanf.m4 (gl_FUNC_ISNANF, gl_FUNC_ISNANF_NO_LIBM): Move AC_LIBOBJ invocation from here... * modules/isnanf (configure.ac): ... to here. * modules/isnanf-nolibm (configure.ac): ... and here. 2011-05-20 Bruno Haible isnan*: Separate the AC_LIBOBJ invocations. * m4/isnanf.m4 (gl_PREREQ_ISNANF): Renamed from gl_BUILD_ISNANF. Remove AC_LIBOBJ invocation. (gl_FUNC_ISNANF, gl_FUNC_ISNANF_NO_LIBM): Update. Invoke AC_LIBOBJ here. * m4/isnand.m4 (gl_PREREQ_ISNAND): Renamed from gl_BUILD_ISNAND. Remove AC_LIBOBJ invocation. (gl_FUNC_ISNAND, gl_FUNC_ISNAND_NO_LIBM): Update. Invoke AC_LIBOBJ here. * m4/isnanl.m4 (gl_PREREQ_ISNANL): Renamed from gl_BUILD_ISNANL. Remove AC_LIBOBJ invocation. (gl_FUNC_ISNANL, gl_FUNC_ISNANL_NO_LIBM): Update. Invoke AC_LIBOBJ here. * m4/isnan.m4 (gl_ISNAN): Update. Invoke AC_LIBOBJ here. 2011-05-08 Bruno Haible isinf: Move AC_LIBOBJ invocations to module description. * m4/isinf.m4 (gl_ISINF): Move AC_LIBOBJ invocation from here... * modules/isinf (configure.ac): ... to here. 2011-05-08 Bruno Haible isfinite: Move AC_LIBOBJ invocations to module description. * m4/isfinite.m4 (gl_ISFINITE): Move AC_LIBOBJ invocation from here... * modules/isfinite (configure.ac): ... to here. 2011-05-08 Bruno Haible isblank: Move AC_LIBOBJ invocations to module description. * m4/isblank.m4 (gl_FUNC_ISBLANK): Move AC_LIBOBJ invocation from here... * modules/isblank (configure.ac): ... to here. 2011-05-08 Bruno Haible isapipe: Move AC_LIBOBJ invocations to module description. * m4/isapipe.m4 (gl_ISAPIPE): Set HAVE_ISAPIPE. Move AC_LIBOBJ and gl_PREREQ_ISAPIPE invocations from here... * modules/isapipe (configure.ac): ... to here. (Depends-on): Update condition. 2011-05-08 Bruno Haible ioctl: Move AC_LIBOBJ invocations to module description. * m4/ioctl.m4 (gl_FUNC_IOCTL): Set HAVE_IOCTL. Move AC_LIBOBJ invocations from here... * modules/ioctl (configure.ac): ... to here. (Depends-on): Update condition. 2011-05-08 Bruno Haible imaxdiv: Move AC_LIBOBJ invocations to module description. * m4/imaxdiv.m4 (gl_FUNC_IMAXDIV): Move AC_LIBOBJ and gl_PREREQ_IMAXDIV invocations from here... * modules/imaxdiv (configure.ac): ... to here. 2011-05-08 Bruno Haible imaxabs: Move AC_LIBOBJ invocations to module description. * m4/imaxabs.m4 (gl_FUNC_IMAXABS): Move AC_LIBOBJ and gl_PREREQ_IMAXABS invocations from here... * modules/imaxabs (configure.ac): ... to here. 2011-05-08 Bruno Haible getaddrinfo: Move AC_LIBOBJ invocations to module description. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Set HAVE_GETADDRINFO, Move AC_LIBOBJ invocations from here... * modules/getaddrinfo (configure.ac): ... to here. (Depends-on): Add conditions. 2011-05-08 Bruno Haible inet_pton. getaddrinfo: Respect rules for use of AC_LIBOBJ. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Set HAVE_INET_PTON. Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Don't invoke gl_PREREQ_INET_PTON. Move tests for declaration of inet_pton here... (gl_PREREQ_INET_PTON): ... from here. * modules/inet_pton (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_INET_PTON here. (Depends-on): Update condition. 2011-05-08 Bruno Haible inet_ntop. getaddrinfo: Respect rules for use of AC_LIBOBJ. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Set HAVE_INET_NTOP. Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Don't invoke gl_PREREQ_INET_NTOP. Move tests for declaration of inet_ntop here... (gl_PREREQ_INET_NTOP): ... from here. * modules/inet_ntop (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_INET_NTOP here. (Depends-on): Update condition. 2011-05-08 Bruno Haible iconv_open: Move AC_LIBOBJ invocations to module description. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN, gl_REPLACE_ICONV_OPEN): Move AC_LIBOBJ invocations from here... * modules/iconv_open (configure.ac): ... to here. 2011-05-08 Bruno Haible iconv_open, iconv_open-utf: Respect rules for use of AC_LIBOBJ. If module 'iconv_open' is among the main modules and module 'iconv_open-utf' is among the tests dependencies, then REPLACE_ICONV_UTF will be defined to 1, hence iconv_open() in lib may return the special iconv_t values. Therefore iconv() and iconv_close() must support these special iconv_t values, already in lib, not only in tests. * m4/iconv_open-utf.m4: New file, extracted from m4/iconv_open.m4. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): Invoke gl_FUNC_ICONV_OPEN_UTF_SUPPORT if present. (gl_FUNC_ICONV_OPEN_UTF): Remove macro. * modules/iconv_open (Files): Add lib/iconv.c, lib/iconv_close.c. (Depends-on): Add the dependencies of iconv_open-utf. * modules/iconv_open-utf (Files): Add m4/iconv_open-utf.m4. Remove m4/iconv_open.m4, lib/iconv.c, lib/iconv_close.c. (Depends-on): Remove modules needed by lib/iconv.c, lib/iconv_close.c. 2011-05-08 Bruno Haible group-member: Move AC_LIBOBJ invocations to module description. * m4/group-member.m4 (gl_FUNC_GROUP_MEMBER): Move AC_LIBOBJ and gl_PREREQ_GROUP_MEMBER invocations from here... * modules/group-member (configure.ac): ... to here. 2011-05-08 Bruno Haible grantpt: Move AC_LIBOBJ invocations to module description. * m4/grantpt.m4 (gl_FUNC_GRANTPT): Move AC_LIBOBJ and gl_PREREQ_GRANTPT invocations from here... * modules/grantpt (configure.ac): ... to here. 2011-05-08 Bruno Haible glob: Move AC_LIBOBJ invocations to module description. * m4/glob.m4 (gl_GLOB): Move AC_LIBOBJ and gl_PREREQ_GLOB invocations from here... * modules/glob (configure.ac): ... to here. 2011-05-08 Bruno Haible getusershell: Move AC_LIBOBJ invocations to module description. * m4/getusershell.m4 (gl_FUNC_GETUSERSHELL): Set HAVE_GETUSERSHELL. Move AC_LIBOBJ invocation from here... * modules/getusershell (configure.ac): ... to here. (Depends-on): Update condition. 2011-05-08 Bruno Haible gettimeofday: Move AC_LIBOBJ invocations to module description. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY, gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Move AC_LIBOBJ and gl_PREREQ_GETTIMEOFDAY invocations from here... * modules/gettimeofday (configure.ac): ... to here. 2011-05-08 Bruno Haible gettimeofday, tzset: Respect rules for use of AC_LIBOBJ. * modules/tzset (configure.ac): Don't invoke gl_FUNC_TZSET_CLOBBER, just gl_FUNC_TZSET. * m4/tzset.m4 (gl_FUNC_TZSET): New macro. (gl_FUNC_TZSET_CLOBBER): Remove actions. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Invoke gl_FUNC_TZSET_CLOBBER and its actions here, if present. 2011-05-08 Bruno Haible getsubopt: Move AC_LIBOBJ invocations to module description. * m4/getsubopt.m4 (gl_FUNC_GETSUBOPT): Move AC_LIBOBJ and gl_PREREQ_GETSUBOPT invocations from here... * modules/getsubopt (configure.ac): ... to here. 2011-05-08 Bruno Haible getpass-gnu: Move AC_LIBOBJ invocations to module description. * m4/getpass.m4 (gl_FUNC_GETPASS_GNU): Set REPLACE_GETPASS. Move AC_LIBOBJ and gl_PREREQ_GETPASS invocations from here... * modules/getpass-gnu (configure.ac): ... to here. 2011-05-08 Bruno Haible getpass: Move AC_LIBOBJ invocations to module description. * m4/getpass.m4 (gl_FUNC_GETPASS): Set HAVE_GETPASS. Move AC_LIBOBJ and gl_PREREQ_GETPASS invocations from here... * modules/getpass (configure.ac): ... to here. 2011-05-08 Bruno Haible getpagesize: Move AC_LIBOBJ invocations to module description. * m4/getpagesize.m4 (gl_FUNC_GETPAGESIZE): Move AC_LIBOBJ invocation from here... * modules/getpagesize (configure.ac): ... to here. 2011-05-08 Bruno Haible getopt: Move AC_LIBOBJ invocations to module description. * m4/getopt.m4 (gl_REPLACE_GETOPT): Remove macro. (gl_FUNC_GETOPT): Inline it here. Move AC_LIBOBJ and gl_PREREQ_GETOPT invocations from here... * modules/getopt-gnu (configure.ac): ... to here. * modules/getopt-posix (configure.ac): ... and here. (Depends-on): Update condition. 2011-05-08 Bruno Haible getopt, argp: Respect rules for use of AC_LIBOBJ. * m4/argp.m4 (gl_ARGP): Don't invoke gl_REPLACE_GETOPT. (gl_REPLACE_GETOPT_ALWAYS): New macro. * m4/getopt.m4 (gl_FUNC_GETOPT_POSIX): Test whether gl_REPLACE_GETOPT_ALWAYS is defined. Set REPLACE_GETOPT. 2011-05-08 Bruno Haible getlogin_r: Move AC_LIBOBJ invocations to module description. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Move AC_LIBOBJ and gl_PREREQ_GETLOGIN_R invocations from here... * modules/getlogin_r (configure.ac): ... to here. 2011-05-08 Bruno Haible getlogin: Move AC_LIBOBJ invocations to module description. * m4/getlogin.m4 (gl_FUNC_GETLOGIN): Move AC_LIBOBJ invocation from here... * modules/getlogin (configure.ac): ... to here. 2011-05-08 Bruno Haible getloadavg: Move AC_LIBOBJ invocations to module description. * m4/getloadavg.m4 (gl_FUNC_GETDELIM): Set HAVE_GETLOADAVG. Move AC_LIBOBJ and gl_PREREQ_GETLOADAVG invocations from here... * modules/getloadavg (configure.ac): ... to here. 2011-05-08 Bruno Haible gethrxtime: Move AC_LIBOBJ invocations to module description. * m4/gethrxtime.m4 (gl_PREREQ_GETHRXTIME): Move code that determines LIB_GETHRXTIME from here... (gl_GETHRXTIME): ... to here. Move AC_LIBOBJ and gl_PREREQ_GETHRXTIME invocations from here... * modules/gethrxtime (configure.ac): ... to here. 2011-05-08 Bruno Haible gethostname: Move AC_LIBOBJ invocations to module description. * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Move AC_LIBOBJ and gl_PREREQ_GETHOSTNAME invocations from here... * modules/gethostname (configure.ac): ... to here. 2011-05-08 Bruno Haible getgroups: Move AC_LIBOBJ invocations to module description. * m4/getgroups.m4 (gl_FUNC_GETGROUPS): Move AC_LIBOBJ invocations from here... * modules/getgroups (configure.ac): ... to here. 2011-05-08 Bruno Haible getdtablesize: Move AC_LIBOBJ invocations to module description. * m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Move AC_LIBOBJ invocation from here... * modules/getdtablesize (configure.ac): ... to here. 2011-05-08 Bruno Haible getdomainname: Move AC_LIBOBJ invocations to module description. * m4/getdomainname.m4 (gl_FUNC_GETDOMAINNAME): Move AC_LIBOBJ and gl_PREREQ_GETDOMAINNAME invocations from here... * modules/getdomainname (configure.ac): ... to here. 2011-05-08 Bruno Haible getline: Move AC_LIBOBJ invocations to module description. * m4/getline.m4 (gl_FUNC_GETLINE): Move AC_LIBOBJ and gl_PREREQ_GETLINE invocations from here... * modules/getline (configure.ac): ... to here. 2011-05-08 Bruno Haible getline: Simplify. * m4/getline.m4 (gl_PREREQ_GETLINE): Don't invoke gl_FUNC_GETDELIM. It's already handled through the module dependency. 2011-05-08 Bruno Haible getdelim: Move AC_LIBOBJ invocations to module description. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Set HAVE_GETDELIM. Move AC_LIBOBJ and gl_PREREQ_GETDELIM invocations from here... * modules/getdelim (configure.ac): ... to here. (Depends-on): Fix condition. 2011-05-08 Bruno Haible getcwd: Move AC_LIBOBJ invocations to module description. * m4/getcwd.m4 (gl_FUNC_GETCWD): Move AC_LIBOBJ and gl_PREREQ_GETCWD invocations from here... * modules/getcwd (configure.ac): ... to here. 2011-05-08 Bruno Haible getcwd-lgpl: Move AC_LIBOBJ invocations to module description. * m4/getcwd.m4 (gl_FUNC_GETCWD_LGPL): Move AC_LIBOBJ invocation from here... * modules/getcwd-lgpl (configure.ac): ... to here. 2011-05-07 Bruno Haible crypto/gc: Move AC_LIBOBJ invocations to module description. * m4/gc.m4 (gl_GC): Move AC_LIBOBJ invocations from here... * modules/crypto/gc (configure.ac): ... to here. 2011-05-07 Bruno Haible fwriting: Move AC_LIBOBJ invocations to module description. * m4/fwriting.m4 (gl_FUNC_FWRITINT): Move AC_LIBOBJ invocation from here... * modules/fwriting (configure.ac): ... to here. 2011-05-07 Bruno Haible fwritable: Move AC_LIBOBJ invocations to module description. * m4/fwritable.m4 (gl_FUNC_FWRITABLE): Move AC_LIBOBJ invocation from here... * modules/fwritable (configure.ac): ... to here. 2011-05-07 Bruno Haible futimens: Move AC_LIBOBJ invocations to module description. * m4/futimens.m4 (gl_FUNC_FUTIMENS): Move AC_LIBOBJ invocations from here... * modules/futimens (configure.ac): ... to here. 2011-05-07 Bruno Haible ftruncate: Move AC_LIBOBJ invocations to module description. * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): Move AC_LIBOBJ and gl_PREREQ_FTRUNCATE invocations from here... * modules/ftruncate (configure.ac): ... to here. 2011-05-07 Bruno Haible fsync: Move AC_LIBOBJ invocations to module description. * m4/fsync.m4 (gl_FUNC_FSYNC): Move AC_LIBOBJ and gl_PREREQ_FSYNC invocations from here... * modules/fsync (configure.ac): ... to here. 2011-05-07 Bruno Haible fsusage: Move AC_LIBOBJ invocations to module description. * m4/fsusage.m4 (gl_FUNC_FREOPEN): Move AC_LIBOBJ and gl_PREREQ_FSUSAGE_EXTRA invocations from here... * modules/fsusage (configure.ac): ... to here. 2011-05-07 Bruno Haible freopen: Move AC_LIBOBJ invocations to module description. * m4/freopen.m4 (gl_FUNC_FREOPEN): Move AC_LIBOBJ and gl_PREREQ_FREOPEN invocations from here... * modules/freopen (configure.ac): ... to here. 2011-05-07 Bruno Haible free: Move AC_LIBOBJ invocations to module description. * m4/free.m4 (gl_FUNC_FREE): Move AC_LIBOBJ and missing gl_PREREQ_FREE invocations from here... * modules/free (configure.ac): ... to here. 2011-05-07 Bruno Haible freadable: Move AC_LIBOBJ invocations to module description. * m4/freadable.m4 (gl_FUNC_FREADABLE): Move AC_LIBOBJ invocation from here... * modules/freadable (configure.ac): ... to here. 2011-05-07 Bruno Haible fpurge: Move AC_LIBOBJ invocations to module description. * m4/fpurge.m4 (gl_FUNC_FPURGE): Set HAVE_FPURGE. Move AC_LIBOBJ invocations from here... * modules/fpurge (configure.ac): ... to here. 2011-05-07 Bruno Haible fpending: Move AC_LIBOBJ invocations to module description. * m4/fpending.m4 (gl_PREREQ_FPENDING): New macro, extracted from gl_FUNC_FPENDING. (gl_FUNC_FPENDING): Move AC_LIBOBJ and gl_PREREQ_FPENDING invocations from here... * modules/fpending (configure.ac): ... to here. 2011-05-07 Bruno Haible fopen: Move AC_LIBOBJ invocations to module description. * m4/fopen.m4 (gl_FUNC_FOPEN): Move AC_LIBOBJ and gl_PREREQ_FOPEN invocations from here... * modules/fopen (configure.ac): ... to here. 2011-05-07 Bruno Haible fnmatch, fnmatch-gnu: Move AC_LIBOBJ invocations to module description. * m4/fnmatch.m4 (gl_PREREQ_FNMATCH): New macro, extracted from gl_FUNC_FNMATCH_POSIX. (gl_FUNC_FNMATCH_POSIX): Move AC_LIBOBJ and gl_PREREQ_FNMATCH invocations from here... * modules/fnmatch (configure.ac): ... to here. * modules/fnmatch-gnu (configure.ac): ... and here. 2011-05-07 Bruno Haible flock: Move AC_LIBOBJ invocations to module description. * m4/flock.m4 (gl_FUNC_FLOCK): Move AC_LIBOBJ and gl_PREREQ_FLOCK invocations from here... * modules/flock (configure.ac): ... to here. 2011-05-07 Bruno Haible fileblocks: Move AC_LIBOBJ invocations to module description. * m4/fileblocks.m4 (gl_FILEBLOCKS): Move AC_LIBOBJ and gl_PREREQ_FILEBLOCKS invocations from here... * modules/fileblocks (configure.ac): ... to here. 2011-05-06 Bruno Haible fflush: Move AC_LIBOBJ invocations to module description. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Remove macro. (gl_FUNC_FFLUSH): Inline it here. Move AC_LIBOBJ and gl_PREREQ_FFLUSH invocations from here... * modules/fflush (configure.ac): ... to here. 2011-05-06 Bruno Haible fdopendir: Move AC_LIBOBJ invocations to module description. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Move AC_LIBOBJ invocations from here... * modules/fdopendir (configure.ac): ... to here. (Depends-on): Improve conditions. 2011-05-06 Bruno Haible _Exit: Move AC_LIBOBJ invocations to module description. * m4/_Exit.m4 (gl_FUNC__EXIT): Move AC_LIBOBJ and gl_PREREQ__EXIT invocations from here... * modules/_Exit (configure.ac): ... to here. 2011-05-21 Bruno Haible euidaccess: Respect rules for use of AC_LIBOBJ. * m4/euidaccess.m4 (gl_FUNC_EUIDACCESS): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_EUIDACCESS invocations from here... * modules/euidaccess (configure.ac): ... to here. 2011-05-06 Bruno Haible error: Move AC_LIBOBJ invocations to module description. * m4/error.m4 (gl_ERROR): Inline AC_FUNC_ERROR_AT_LINE. Remove AC_LIBSOURCES invocation. Move AC_LIBOBJ and gl_PREREQ_ERROR invocations from here... * modules/error (configure.ac): ... to here. 2011-05-06 Bruno Haible duplocale: Move AC_LIBOBJ invocations to module description. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Move AC_LIBOBJ and gl_PREREQ_DUPLOCALE invocations from here... * modules/duplocale (configure.ac): ... to here. 2011-05-05 Bruno Haible dirfd: Move AC_LIBOBJ invocations to module description. * m4/dirfd.m4 (gl_PREREQ_DIRFD): New macro, extracted from gl_FUNC_DIRFD. (gl_FUNC_DIRFD): Move AC_LIBOBJ and gl_PREREQ_DIRFD invocations from here... * modules/dirfd (configure.ac): ... to here. (Depends-on): Fix condition. 2011-05-05 Bruno Haible chown: Respect rules for use of AC_LIBOBJ. * m4/chown.m4 (gl_FUNC_CHOWN): Move AC_LIBOBJ invocations from here... * modules/chown (configure.ac): ... to here. 2011-05-05 Bruno Haible chdir-long: Move AC_LIBOBJ invocations to module description. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Move AC_LIBOBJ and gl_PREREQ_CHDIR_LONG invocations from here... * modules/chdir-long (configure.ac): ... to here. 2011-05-05 Bruno Haible canonicalize-lgpl: Move AC_LIBOBJ invocations to module description. * m4/canonicalize.m4 (gl_CANONICALIZE_LGPL): Move AC_LIBOBJ invocation from here... * modules/canonicalize-lgpl (configure.ac): ... to here. 2011-05-05 Bruno Haible calloc-posix, calloc-gnu: Move AC_LIBOBJs to module description. * m4/calloc.m4 (gl_REPLACE_CALLOC): Remove macro. (gl_FUNC_CALLOC_GNU, gl_FUNC_CALLOC_POSIX): Instead, just set REPLACE_CALLOC. * modules/calloc-posix (configure.ac): Invoke AC_LIBOBJ here. * modules/calloc-gnu (configure.ac): Likewise. 2011-05-05 Bruno Haible btowc: Move AC_LIBOBJ invocations to module description. * m4/btowc.m4 (gl_FUNC_BTOWC): Move AC_LIBOBJ and gl_PREREQ_BTOWC invocations from here... * modules/btowc (configure.ac): ... to here. 2011-05-21 Bruno Haible atexit: Move AC_LIBOBJ invocations to module description. * m4/atexit.m4 (gl_FUNC_ATEXIT): Call AC_CHECK_FUNCS instead of AC_REPLACE_FUNCS. Move AC_LIBOBJ and gl_PREREQ_ATEXIT invocations from here... * modules/atexit (configure.ac): ... to here. 2011-05-05 Bruno Haible atoll: Move AC_LIBOBJ invocations to module description. * m4/atoll.m4 (gl_FUNC_ATOLL): Move AC_LIBOBJ and gl_PREREQ_ATOLL invocations from here... * modules/atoll (configure.ac): ... to here. 2011-05-05 Bruno Haible argz: Move AC_LIBOBJ invocations to module description. * m4/argz.m4 (gl_FUNC_ARGZ): Move AC_LIBOBJ invocation from here... * modules/argz (configure.ac): ... to here. 2011-05-05 Bruno Haible alphasort: Move AC_LIBOBJ invocations to module description. * m4/alphasort.m4 (gl_FUNC_ALPHASORT): Move AC_LIBOBJ and gl_PREREQ_ALPHASORT invocations from here... * modules/alphasort (configure.ac): ... to here. 2011-06-15 Paul Eggert verify: new macro verify_expr; verify_true deprecated * NEWS: Mention this. * doc/verify.texi (Compile-time Assertions): Document this. * lib/verify.h (verify_true): Deprecate. (verify_expr): New macro. * tests/test-verify.c (function): Test verify_expr. 2011-06-14 Jim Meyering init.sh: give more portable redirection-related advice in a comment * tests/init.sh (stderr_fileno_): Update the advice in comments. See http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22488 for lots of discussion. Stefano Lattarini suggested the solution of putting "9>&2" after the command. Reported by Bruno Haible. 2011-06-13 Bruno Haible locale-zh: Reject zh_CN.GB18030 locale on Solaris 8. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): On Solaris 8, set LOCALE_ZH_CN to 'none'. 2011-06-13 Paul Eggert ftoastr: use strtof only if HAVE_STRTOF This is needed on HP-UX 11.11 with GCC 4.2.4; see Bruno Haible's report . * lib/ftoastr.c (STRTOF) [LENGTH == 1]: Use strtof only if HAVE_STRTOF. * modules/ftoastr (configure.ac): Check for strtof. 2011-06-13 Bruno Haible gnulib-tool: Addendum to 2011-06-08 commit. * gnulib-tool (func_emit_lib_Makefile_am): If options --makefile-name and --witness-c-macro have been given, augment AM_CPPFLAGS. 2011-06-13 Bruno Haible fseeko: Provide a non-inline replacement of fseek(). * lib/stdio.in.h (fseek): Don't provide if module 'fseek' is not used. * modules/fseeko (Depends-on): Add fseek. * modules/fseek (License): Change to LGPLv2+. 2011-06-13 Bruno Haible ftello: Provide a non-inline replacement of ftell(). * lib/stdio.in.h (ftell): Don't provide if module 'ftell' is not used. * m4/ftell.m4 (gl_FUNC_FTELL): Replace ftell also if the system does not have ftello() (such as on mingw). * modules/ftello (Depends-on): Add ftell. * modules/ftell (License): Change to LGPLv2+. 2011-05-07 Bruno Haible ftell: Move AC_LIBOBJ invocations to module description. * m4/ftell.m4 (gl_FUNC_FTELL): Move AC_LIBOBJ invocation from here... * modules/ftell (configure.ac): ... to here. 2011-05-07 Bruno Haible ftello: Respect rules for use of AC_LIBOBJ. * m4/ftello.m4 (gl_REPLACE_FTELLO): Remove macro. (gl_FUNC_FTELLO): Inline it here. Move AC_LIBOBJ invocation from here... * modules/ftello (configure.ac): ... to here. 2011-05-07 Bruno Haible fseeko: Simplify. * m4/fseeko.m4 (gl_HAVE_FSEEKO): Remove macro. (gl_FUNC_FSEEKO): Inline it here. 2011-05-07 Bruno Haible fseek: Move AC_LIBOBJ invocations to module description. * m4/fseek.m4 (gl_REPLACE_FSEEK): Remove macro. (gl_FUNC_FSEEK): Inline it here. Move AC_LIBOBJ invocation from here... * modules/fseek (configure.ac): ... to here. 2011-05-07 Bruno Haible fseek: Respect rules for use of AC_LIBOBJ. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Move gl_REPLACE_FSEEK invocation from here... * m4/fseek.m4 (gl_FUNC_FSEEK): ... to here. 2011-05-07 Bruno Haible fseeko: Respect rules for use of AC_LIBOBJ. * m4/fseeko.m4 (gl_REPLACE_FSEEKO): Remove macro. (gl_FUNC_FSEEKO): Inline it here. Move AC_LIBOBJ invocation from here... * modules/fseeko (configure.ac): ... to here. 2011-06-13 Bruno Haible gnulib-tool: Allow comments in the 'Depends-on' section. * doc/gnulib.texi (Module description): Mention comment syntax in the Depends-on section. * gnulib-tool (func_get_dependencies): Filter out comment lines. 2011-06-13 Bruno Haible file-set.h: guard __attibute__ use, now that it's not always defined * lib/file-set.h (record_file): Use __attribute__ only with compiler versions that support it. This fixes a coreutils build failure with the vendor cc on HP-UX 11.31. 2011-06-12 Bruno Haible acl: Add support for HP-UX >= 11.11 JFS ACLs. * doc/acl-resources.txt: Add info about the ACL APIs on HP-UX. * m4/acl.m4 (gl_FUNC_ACL): Also test for HP-UX 11.11 API. * lib/acl-internal.h [HP-UX 11.11]: Include . (acl, aclsort): New declarations. (aclv_nontrivial): New declaration. * lib/file-has-acl.c (aclv_nontrivial) [HP-UX 11.11]: New function. (file_has_acl): Read also the second kind of HP-UX ACLs. * lib/set-mode-acl.c (qset_acl) [HP-UX 11.11]: Try to set the second kind of HP-UX ACLs if the first kind fails. * lib/copy-acl.c (qcopy_acl) [HP-UX 11.11]: Read and set also the second kind of HP-UX ACLs. * tests/test-sameacls.c [HP-UX 11.11]: Include . (main) [HP-UX 11.11]: Test also whether the second kind of HP-UX ACLs agree. * tests/test-file-has-acl.sh (acl_flavor) [HP-UX 11.11]: Set to hpuxjfs. Handle hpuxjfs. * tests/test-set-mode-acl.sh (acl_flavor) [HP-UX 11.11]: Set to hpuxjfs. Handle hpuxjfs. * tests/test-copy-acl.sh (acl_flavor) [HP-UX 11.11]: Set to hpuxjfs. (func_test_same_acls): Use both lsacl and getacl. Handle hpuxjfs. * tests/test-copy-file.sh (acl_flavor) [HP-UX 11.11]: Set to hpuxjfs. (func_test_same_acls): Use both lsacl and getacl. Handle hpuxjfs. 2011-06-12 Bruno Haible acl: Complete the 2010-08-10 fix. * lib/file-has-acl.c (file_has_acl) [HP-UX]: Also test against ENOTSUP. * lib/set-mode-acl.c (qset_acl) [HP-UX]: Likewise. * lib/copy-acl.c (qcopy_acl) [HP-UX]: Test for the errno values explicitly. * tests/test-sameacls.c (main) [HP-UX]: Also test against ENOTSUP. Reported in . 2011-06-12 Bruno Haible spawn-pipe tests: Comments. * tests/test-spawn-pipe-child.c (main): Update comment. Reported by James Youngman . 2011-06-11 James Youngman New module 'stat-size'. * modules/stat-size: New module. Provides macros for accessing file size information in instances of struct stat. Depends on the fileblocks module because it calls st_blocks. * lib/stat-size.h: New file, adapted from coreutils' system.h. * doc/gnulib.texi: Include stat-size.texi. * doc/stat-size.texi: Documentation for this module. * m4/stat-size.m4: New file; defines gl_STAT_SIZE. * m4/fileblocks.m4: Mention that stat-size depends on the call to AC_STRUCT_ST_BLOCKS. 2011-06-09 Bruno Haible thread: Support pthreads-win32. * lib/glthread/thread.h (gl_thread_self): Define differently on pthreads-win32. (gl_null_thread): New declaration. (gl_thread_self_pointer): New macro. * lib/glthread/thread.c (gl_null_thread): New constant. * tests/test-lock.c: Use gl_thread_self_pointer instead of gl_thread_self. * tests/test-tls.c: Likewise. Suggested by Paul Eggert. Reported by Eric Blake. 2011-06-09 Bruno Haible thread: Fix confusion between NULL and 0. * lib/glthread/thread.h (gl_thread_self): Use NULL and 0 appropriately. Reported by Paul Eggert. 2011-06-09 Bruno Haible spawn-pipe tests: Avoid test failure on HP-UX 11. * tests/test-spawn-pipe-child.c (main) [HP-UX]: Don't assert that fd 2 is closed. 2011-06-09 Bruno Haible acl tests: Fix compilation error on HP-UX 11. * tests/test-sameacls.c: Include also on HP-UX. 2011-06-09 Bruno Haible rmdir: Avoid test failure on HP-UX 10.20. * tests/test-rmdir.h (test_rmdir_func): Accept ENOTEMPTY error, like EEXIST. 2011-06-08 Eric Blake perror: fix test on mingw * modules/perror-tests (Depends-on): Add dup2. strerror_r-posix: fix on MacOS * m4/strerror.m4 (gl_FUNC_STRERROR): Flush out MacOS bug. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Likewise, and fix logic bug. * lib/strerror_r.c (strerror_r): Fix the bug. * lib/strerror.c (strerror): Likewise. * doc/posix-functions/strerror_r.texi (strerror_r): Document the problem. * doc/posix-functions/strerror.texi (strerror): Likewise. * doc/posix-functions/perror.texi (perror): Likewise. * tests/test-strerror.c (main): Enhance test. * tests/test-strerror_r.c (main): Likewise. 2011-06-08 Bruno Haible gnulib-tool: Better isolation between different gnulib-tool invocations. * gnulib-tool: New option --witness-c-macro. (witness_c_macro): New variable. (func_emit_lib_Makefile_am): If --witness-c-macro was specified, let AM_CPPFLAGS define it as a C macro. (func_emit_tests_Makefile_am): Likewise. (func_import): Store witness_c_macro setting in gnulib-cache.m4 and read it from there. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_CONDITION): Define through m4_define, not AC_DEFUN. (gl_MODULE_INDICATOR_SET_VARIABLE_AUX, gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR): New macros. (gl_MODULE_INDICATOR_SET_VARIABLE): Use them. * modules/arpa_inet (Makefile.am): Use sed expression s/.../.../, not s|...|...|, to substitute the values of the GNULIB_* module indicator variables. * modules/dirent (Makefile.am): Likewise. * modules/fcntl-h (Makefile.am): Likewise. * modules/iconv-h (Makefile.am): Likewise. * modules/langinfo (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/math (Makefile.am): Likewise. * modules/netdb (Makefile.am): Likewise. * modules/poll-h (Makefile.am): Likewise. * modules/pty (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/signal (Makefile.am): Likewise. * modules/spawn (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/sys_ioctl (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sys_times (Makefile.am): Likewise. * modules/sys_utsname (Makefile.am): Likewise. * modules/sys_wait (Makefile.am): Likewise. * modules/termios (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. 2011-06-08 Eric Blake strerror: simplify replacement * m4/strerror.m4 (gl_PREREQ_STRERROR): Delete. * modules/strerror (configure.ac): No prereqs needed here... * modules/strerror-override (configure.ac): ...but this needs it. (Files): Add file for needed prereq macro. 2011-06-08 Bruno Haible strerror_r-posix: Tweaks. * m4/strerror.m4 (gl_FUNC_STRERROR): Omit the code that tests gl_cv_func_strerror_r_works if gl_FUNC_STRERROR_R_WORKS is not present. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Fix AC_CACHE_CHECK message. Move gl_HEADER_STRING_H_DEFAULTS invocation from here... (gl_FUNC_STRERROR_R): ... to here. (gl_PREREQ_STRERROR_R): Test for __xpg_strerror_r. 2011-06-07 Eric Blake perror: document fixed bugs * doc/posix-functions/perror.texi (perror): Document recent patches. 2011-06-07 Paul Eggert stat-time: get_stat_birthtime failure is better-defined * lib/stat-time.h (get_stat_birthtime): If the time is not available, return a timestamp whose tv_sec and tv_nsec values are both -1. Previously, the spec said only that the tv_nsec value was negative. This upward-compatible change simplifies GNU tar a bit. 2011-06-07 Eric Blake strerror_r-posix: work around cygwin 1.7.9 * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Split... (gl_FUNC_STRERROR_R_WORKS): ...into new macro, to detect Cygwin bug without replacing strerror_r. * m4/strerror.m4 (gl_FUNC_STRERROR): Replace strerror if strerror_r is buggy, but without requiring strerror_r compilation. * doc/posix-functions/strerror_r.texi (strerror_r): Fix docs. test-perror: relax test to ignore cygwin bug * tests/test-perror2.c (main): Relax test on requiring detection of stream errors, and use unbuffered stream. * doc/posix-functions/dprintf.texi (dprintf): Document bug. * doc/posix-functions/fprintf.texi (fprintf): Likewise. * doc/posix-functions/fputc.texi (fputc): Likewise. * doc/posix-functions/fputs.texi (fputs): Likewise. * doc/posix-functions/fputws.texi (fputws): Likewise. * doc/posix-functions/fwprintf.texi (fwprintf): Likewise. * doc/posix-functions/fwrite.texi (fwrite): Likewise. * doc/posix-functions/getopt.texi (getopt): Likewise. * doc/posix-functions/perror.texi (perror): Likewise. * doc/posix-functions/printf.texi (printf): Likewise. * doc/posix-functions/psiginfo.texi (psiginfo): Likewise. * doc/posix-functions/psignal.texi (psignal): Likewise. * doc/posix-functions/putc.texi (putc): Likewise. * doc/posix-functions/putc_unlocked.texi (putc_unlocked): Likewise. * doc/posix-functions/putchar.texi (putchar): Likewise. * doc/posix-functions/putchar_unlocked.texi (putchar_unlocked): Likewise. * doc/posix-functions/puts.texi (puts): Likewise. * doc/posix-functions/putwc.texi (putwc): Likewise. * doc/posix-functions/putwchar.texi (putwchar): Likewise. * doc/posix-functions/vdprintf.texi (vdprintf): Likewise. * doc/posix-functions/vfprintf.texi (vfprintf): Likewise. * doc/posix-functions/vfwprintf.texi (vfwprintf): Likewise. * doc/posix-functions/vprintf.texi (vprintf): Likewise. * doc/posix-functions/vwprintf.texi (vwprintf): Likewise. * doc/posix-functions/wordexp.texi (wordexp): Likewise. * doc/posix-functions/wprintf.texi (wprintf): Likewise. 2011-05-22 Bruno Haible strerror: Move AC_LIBOBJ invocations to module description. * m4/strerror.m4 (gl_FUNC_STRERROR): Move AC_LIBOBJ and gl_PREREQ_STRERROR invocations from here... * modules/strerror (configure.ac): ... to here. 2011-05-21 Bruno Haible perror: Use common idiom. * modules/perror (configure.ac): Reorder statements. 2011-06-07 Stefano Lattarini tests: fix usage message in 'mktempd_' * tests/init.sh (mktempd_): In the usage message, use literal 'mktempd_', not '$ME' (which is even undefined), as the name of the subroutine. 2011-06-07 Stefano Lattarini tests init: new function 'fatal_', for hard errors Before this patch, the only way offered by tests/init.sh to properly signal a hard error was the `framework_failure_' function. But the error message issued by that function, as its name would suggest, refers to a set-up failure in the testsuite, while hard errors can obviously also be due to other reasons. The best way to fix this inconsistency is to introduce a new function with a more general error message. * tests/init.sh (fatal_): New function. 2011-06-06 Eric Blake canonicalize-lgpl: use common idiom * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Prefer older rm -rf over newer POSIX -Rf. Reported by Bruno Haible. canonicalize-lgpl: work around AIX realpath bug * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Expose AIX bug. * doc/posix-functions/realpath.texi (realpath): Document it. Reported by Bruno Haible. strerror: work around FreeBSD bug * lib/strerror.c (strerror): Special case 0. Reported by Bruno Haible. strerror-override: avoid bloating errno module * modules/errno (Files, configure.ac): Move replacement strings... * modules/strerror-override: ...to new module. * modules/strerror (Depends-on): Add strerror-override. * modules/strerror_r-posix (Depends-on): Likewise. * MODULES.html.sh: Document new module. Reported by Bruno Haible. 2011-06-06 Bruno Haible spawn-pipe tests: Rename program. * tests/test-spawn-pipe-main.c: Renamed from tests/test-spawn-pipe.c. * tests/test-spawn-pipe-child.c: Update comment. * tests/test-spawn-pipe.sh: Update. * modules/spawn-pipe-tests (Files, Makefile.am): Update. spawn-pipe tests: Link the child program only against libc. * tests/test-spawn-pipe-child.c: New file, extracted from tests/test-spawn-pipe.c. (main): Expect only one argument. (is_open): New function, copied from tests/test-pipe.c. * tests/test-spawn-pipe.c: Don't include . (child_main): Remove function. (test_pipe): Pass only one argument to the child program. (main): Remove child process code. Expect the child program's name as first argument. * tests/test-spawn-pipe.sh: Pass the child program's name as first argument. * modules/spawn-pipe-tests (Files): Add tests/test-spawn-pipe-child.c. (Makefile.am): Add test-spawn-pipe-child to check_PROGRAMS. Link test-spawn-pipe-child against no libraries. 2011-06-06 Bruno Haible careadlinkat: Avoid mismatch between ssize_t and int. * lib/careadlinkat.h (careadlinkatcwd): Declare as a function always. * lib/careadlinkat.c (careadlinkatcwd): Define always. 2011-06-06 Jim Meyering gnulib-common.m4: add _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE * m4/gnulib-common.m4 (gl_COMMON): Emit definitions of _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE. 2011-06-05 Bruno Haible ansi-c++-opt: Interoperability with libtool. * m4/ansi-c++.m4 (gl_PROG_ANSI_CXX): When a C++ compiler is not found, set the variable to "no", not to ":". * NEWS: Mention the change. 2011-06-05 Bruno Haible acl: Fix test failure on AIX 7. * tests/test-sameacls.c (main) [AIX]: Fix aclx_printStr invocation. Based on a patch by Jørn Amundsen . 2011-06-05 Bruno Haible pipe-filter-ii: Fix test failure on AIX and IRIX. * lib/pipe-filter-ii.c (pipe_filter_ii_execute): When write() fails with EAGAIN, retry with a smaller buffer size. 2011-06-05 Bruno Haible localename: Fix link dependencies. * modules/localename (Link): Mention $(LIBTHREAD) or $(LTLIBTHREAD). * modules/localename-tests (Makefile.am): Link test-localename with $(LIBTHREAD). 2011-06-05 Bruno Haible error: Avoid gcc warning. * lib/error.c (strerror_r): Declare also when its return type is 'int'. 2011-06-05 Bruno Haible unsetenv: Avoid gcc warning. * lib/unsetenv.c (unsetenv): Provide declaration if system lacks it. 2011-06-05 Bruno Haible setenv: Avoid gcc warning. * lib/setenv.c (setenv): Provide declaration if system lacks it. 2011-06-05 Bruno Haible sys_select: Ensure memset is declared also on AIX 7. * lib/sys_select.in.h: Include also on AIX. * doc/posix-headers/sys_select.texi: Mention that is not self-contained also on AIX 7.1. 2011-06-04 Jim Meyering maint.mk: sc_unmarked_diagnostics: don't hard-code "error" * top/maint.mk (sc_unmarked_diagnostics): Don't hard-code the function name, "error". (_gl_translatable_diag_func_re): New configurable variable. 2011-06-04 Bruno Haible getopt: Avoid gcc warning. * lib/getopt.c (_getopt_internal_r): Remove unused variable 'ambig'. 2011-06-04 Bruno Haible strerror_r: Fix comments. * lib/strerror_r.c (strerror_r): Update comments after 2011-06-01 commit. 2011-06-04 Bruno Haible perror: Fix compilation error. * lib/perror.c: Don't include intprops.h, verify.h, strerror-impl.h. Undefine fprintf, not sprintf. * modules/perror (Depends-on): Remove intprops, verify. 2011-06-04 Bruno Haible setlocale: Enable replacement on Cygwin 1.5. * m4/setlocale.m4 (gl_FUNC_SETLOCALE): Set REPLACE_SETLOCALE also on Cygwin 1.5.x. * doc/posix-functions/setlocale.texi: Mention that the problem with the LC_CTYPE category also exists on Cygwin 1.5.x. 2011-06-04 Bruno Haible strerror-override: Don't disable symbol renamings. * lib/strerror-override.h: Include errno.h and stddef.h, not string.h. * lib/strerror-override.c: Include config.h. (strerror_override): Don't undefine. 2011-06-03 Bruno Haible Copyright: Use LGPL 2.1 instead of LGPL 2.0. * lib/localename.h: Update copyright header. * lib/localename.c: Likewise. * lib/relocatable.h: Likewise. * lib/relocatable.c: Likewise. 2011-06-02 Bruno Haible doc: Fix a module name. * doc/posix-functions/open.texi: Fix module name 'nonblocking'. 2011-06-02 Bruno Haible pipe2: Remove dependency on 'nonblocking' module. * lib/pipe2.c: Include verify.h. Include nonblocking.h only if O_NONBLOCK is defined by gnulib. (pipe2) [WIN32]: If O_NONBLOCK is not defined by gnulib, verify that it is zero. * modules/pipe2 (Depends-on): Add verify. Remove nonblocking. * tests/test-pipe2.c: Include nonblocking.h only if O_NONBLOCK is defined by gnulib. (get_nonblocking_flag): New function. (main): Test O_NONBLOCK flag only if it is nonzero. * doc/glibc-functions/pipe2.texi: Mention the 'nonblocking' module. 2011-06-03 Jim Meyering maint: three new prohibit-header-without-use rules Prohibit use of cloexec.h, posixver.h, same.h without use. * top/maint.mk (sc_prohibit_cloexec_without_use): New rule. (sc_prohibit_posixver_without_use): Likewise. (sc_prohibit_same_without_use): Likewise. 2011-06-02 Paul Eggert allocator: 'die' routine is now given requested size * lib/allocator.h (struct allocator.die): New size arg. * lib/careadlinkat.c (careadlinkat): Pass size to 'die' function. If the actual problem is an ssize_t limitation, not a size_t or malloc failure, fail with errno==ENAMETOOLONG instead of calling 'die'. 2011-06-01 Eric Blake strerror: drop strerror_r dependency * lib/strerror_r.c (strerror_r): Move gnulib replacement strings... * lib/strerror-override.c (strerror_override): ...to new file. * lib/strerror-override.h: Add prototype. * lib/strerror-impl.h: Delete. * lib/strerror.c (strerror): New implementation. * modules/errno (Files): Add new files. (configure.ac): Compile new file as appropriate. * modules/strerror (Files): Drop unused file. (Depends-on): Drop strerror_r-posix. * MODULES.html.sh: Document strerror_r-posix. Requested by Sam Steingold. perror: call strerror_r directly * modules/perror (Files): Drop strerror-impl.h. * lib/perror.c (perror): Use our own stack buffer, rather than calling a wrapper that uses static storage. * doc/posix-functions/perror.texi (perror): Document a limitation of our replacement. strerror_r: fix includes for FreeBSD * lib/strerror_r.c (includes): Use unconditionally, since we use abort on some platforms. Reported by Matthias Bolte. 2011-05-31 Bruno Haible Fix link errors in tests: openat-die uses gettext-h. * modules/areadlinkat-tests (Makefile.am): Link test-areadlinkat against $(LIBINTL). * modules/dirent-safer-tests (Makefile.am): Link test-dirent-safer against $(LIBINTL). * modules/fdopendir-tests (Makefile.am): Link test-fdopendir against $(LIBINTL). * modules/fdutimensat-tests (Makefile.am): Link test-fdutimensat against $(LIBINTL). * modules/linkat-tests (Makefile.am): Link test-linkat against $(LIBINTL). * modules/mkfifoat-tests (Makefile.am): Link test-mkfifoat against $(LIBINTL). * modules/openat-safer-tests (Makefile.am): Link test-openat-safer against $(LIBINTL). * modules/openat-tests (Makefile.am): Link test-fchownat, test-fstatat, test-mkdirat, test-openat, test-unlinkat against $(LIBINTL). * modules/readlinkat-tests (Makefile.am): Link test-readlinkat against $(LIBINTL). * modules/symlinkat-tests (Makefile.am): Link test-symlinkat against $(LIBINTL). * modules/utimensat-tests (Makefile.am): Link test-utimensat against $(LIBINTL). Reported by Tom G. Christensen . 2011-05-31 Bruno Haible Fix link errors in tests: wait-process uses gettext-h. * modules/nonblocking-pipe-tests (Makefile.am): Set test_nonblocking_pipe_main_LDADD. * modules/nonblocking-socket-tests (Makefile.am): Link test-nonblocking-socket-main against $(LIBINTL). Reported by Tom G. Christensen . 2011-05-29 Paul Eggert assert-h: work around 'verify' incompatibility * lib/verify.h: Use @...@ directives, not ifdef. * modules/assert-h (assert.h): Implement the directives. (assert.h): Substitute the symbol-prefix more consistently. 2011-05-29 Jim Meyering trim: remove three superfluous assignments * lib/trim.c (trim2): Remove three superfluous assignments and correct brace positioning. 2011-05-29 Bruno Haible wctype-h: Avoid namespace pollution on Solaris 2.6. * lib/wctype.in.h: On Solaris, undefine 'multibyte' and a few other identifiers. * doc/posix-headers/wctype.texi: Mention the problem. Reported by Tom G. Christensen . 2011-05-28 Jim Meyering parse-datetime.y: accommodate -Wstrict-overflow * lib/parse-datetime.y (yylex): Rearrange pointer arithmetic to placate -Wstrict-overflow. trim: avoid a warning from -O2 -Wstrict-overflow * lib/trim.c (trim2): Declare local to be "unsigned int", not "int". 2011-05-29 Bruno Haible gnulib-tool: Fix bug in yesterday's commit. * gnulib-tool (func_create_testdir): Don't add gltests to $subdirs twice. 2011-05-29 Bruno Haible Allow multiple gnulib generated include files to be combined. * gnulib-tool (func_compute_include_guard_prefix): New function. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Resolve also ${gl_include_guard_prefix} references. (func_import, func_create_testdir): Invoke func_compute_include_guard_prefix. * lib/arpa_inet.in.h: Use the @GUARD_PREFIX@ placeholder. * lib/ctype.in.h: Likewise. * lib/dirent.in.h: Likewise. * lib/errno.in.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/float.in.h: Likewise. * lib/getopt.in.h: Likewise. * lib/iconv.in.h: Likewise. * lib/langinfo.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/netdb.in.h: Likewise. * lib/netinet_in.in.h: Likewise. * lib/poll.in.h: Likewise. * lib/pthread.in.h: Likewise. * lib/pty.in.h: Likewise. * lib/sched.in.h: Likewise. * lib/se-selinux.in.h: Likewise. * lib/search.in.h: Likewise. * lib/signal.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stddef.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sys_times.in.h: Likewise. * lib/sys_uio.in.h: Likewise. * lib/sys_utsname.in.h: Likewise. * lib/sys_wait.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/termios.in.h: Likewise. * lib/time.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/wchar.in.h: Likewise. * lib/wctype.in.h: Likewise. * modules/arpa_inet (Makefile.am): Substitute @GUARD_PREFIX@. * modules/ctype (Makefile.am): Likewise. * modules/dirent (Makefile.am): Likewise. * modules/errno (Makefile.am): Likewise. * modules/fcntl-h (Makefile.am): Likewise. * modules/float (Makefile.am): Likewise. * modules/getopt-posix (Makefile.am): Likewise. * modules/iconv-h (Makefile.am): Likewise. * modules/langinfo (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/math (Makefile.am): Likewise. * modules/netdb (Makefile.am): Likewise. * modules/netinet_in (Makefile.am): Likewise. * modules/poll-h (Makefile.am): Likewise. * modules/pthread (Makefile.am): Likewise. * modules/pty (Makefile.am): Likewise. * modules/sched (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/selinux-h (Makefile.am): Likewise. * modules/signal (Makefile.am): Likewise. * modules/spawn (Makefile.am): Likewise. * modules/stdarg (Makefile.am): Likewise. * modules/stddef (Makefile.am): Likewise. * modules/stdint (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/strings (Makefile.am): Likewise. * modules/sys_file (Makefile.am): Likewise. * modules/sys_ioctl (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sys_time (Makefile.am): Likewise. * modules/sys_times (Makefile.am): Likewise. * modules/sys_uio (Makefile.am): Likewise. * modules/sys_utsname (Makefile.am): Likewise. * modules/sys_wait (Makefile.am): Likewise. * modules/sysexits (Makefile.am): Likewise. * modules/termios (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. * modules/wctype-h (Makefile.am): Likewise. * modules/assert-h (Makefile.am): Replace _GL_VERIFY_H specially. 2011-05-29 Bruno Haible assert-h: Allow multiple gnulib generated replacements to coexist. * lib/verify.h (struct _gl_verify_type): Avoid identical redefinition. 2011-05-29 Bruno Haible argp: Allow coexistence with strerror_r-posix module. * lib/argp-help.c (__argp_failure): If strerror_r is defined as a macro (either to __xpg_strerror_r by glibc's or to rpl_strerror_r by gnulib's replacement), assume it has the POSIX signature, not the glibc signature. 2011-05-28 Bruno Haible gnulib-tool: Alternative structure of testdirs, similar to --import. * gnulib-tool: New option --single-configure. (func_usage): Document it. (single_configure): New variable. (func_modules_transitive_closure_separately, func_modules_transitive_closure_separately, func_determine_use_libtests, func_modules_add_dummy_separately, func_modules_to_filelist_separately): New functions, extracted from func_import. (func_emit_tests_Makefile_am): Handle $single_configure = true case. (func_import): Use the new functions. (func_create_testdir): Set final_modules. Handle $single_configure = true case. 2011-05-28 Bruno Haible getloadavg: Remove an unreliable safety check. * m4/getloadavg.m4 (gl_GETLOADAVG): Drop argument. Remove test whether getloadavg.c is in place. * modules/getloadavg (configure.ac): Drop argument of gl_GETLOADAVG. Reported by Sam Steingold . 2011-05-28 Bruno Haible doc: Cleanup yet another file produced by texinfo.tex. * doc/Makefile (mostlyclean): Remove also gnulib.cn. 2011-05-28 Bruno Haible Finish the conditional dependencies mechanism. * gnulib-tool: New option --no-conditional-dependencies. (func_usage): Document it. Don't mark --conditional-dependencies as experimental. (cond_dependencies): The possible values can now be true, false, empty. (func_modules_transitive_closure, func_emit_autoconf_snippets): Update. (func_import): Store setting in gnulib-cache.m4 and read it from there. * doc/gnulib-tool.texi (Conditional dependencies): New section. 2011-05-28 Bruno Haible doc: Use a recent texinfo.tex. * doc/Makefile (tex_opts): New variable. (%.dvi, %.pdf): Pass it to texi2dvi and texi2pdf. 2011-05-28 Jim Meyering intprops.h: adjust comment to match code change * lib/intprops.h (_GL_INT_CONVERT): Adjust comment: now that E is used only once, it *may* have side effects. Also fix an unrelated typo. (_GL_INT_SIGNED): Likewise. 2011-05-26 Simon Josefsson * lib/gen-uni-tables.c: Say "gen-uni-tables.c" consistently. 2011-05-26 Bruno Haible mbsrchr: Avoid collision with system function on Interix. * lib/string.in.h (mbsrchr): Define as rpl_mbsrchr also on Interix. Reported by Markus Duft . 2011-05-15 James Youngman getopt: for ambiguous options, enumerate the possibilities. * lib/getopt.c (_getopt_internal_r): Merge glibc change printing the ambiguous options when an ambiguous prefix is given. This was http://sourceware.org/bugzilla/show_bug.cgi?id=7101. The merged glibc change was http://sourceware.org/git/?p=glibc.git;a=commit;h=bd25564e1e98910ed69043ed6a6f884ce60e5780. 2011-05-25 Eric Blake getcwd: work around mingw bug * lib/getcwd-lgpl.c (rpl_getcwd): Guarantee correct error. * doc/posix-functions/getcwd.texi (getcwd): Document it. Reported by Matthias Bolte. 2011-05-24 Paul Eggert test-intprops: disable -Wtype-limits diagnostics * tests/test-intprops.c: Use a pragma to ignore -Wtype-limits diagnostics. Otherwise, the integer overflow macros generate many diagnostics. Reported by Jim Meyering in . intprops: shorten, to pacify gcc -Woverlength-strings * lib/intprops.h (_GL_INT_CONVERT, _GL_INT_NEGATE_CONVERT): (_GL_BINARY_OP_OVERFLOW): Say "0 * (x)" rather than "(x) - (x)", so that, for example, verify (INT_MULTIPLY_OVERFLOW (...)) is less likely to run afoul of C compiler limits for string constant lengths. See . 2011-05-24 Eric Blake docs: document recently fixed glibc printf bug * doc/posix-functions/fprintf.texi (fprintf): Document it. * doc/posix-functions/printf.texi (printf): Likewise. * doc/posix-functions/vfprintf.texi (vfprintf): Likewise. * doc/posix-functions/vprintf.texi (vprintf): Likewise. closein-tests: convert to init.sh * modules/closein-tests (Files): Add init.sh * tests/test-closein.sh Use it. yesno-tests: convert to init.sh * modules/yesno-tests (Files): Add init.sh. * tests/test-yesno.sh: Use it. atexit-tests: ensure reliable exit status * tests/test-atexit.sh: Prefer 'Exit' over 'exit'. Reported by Bruno Haible. 2011-05-24 Bruno Haible strerror_r-posix: Respect rules for use of AC_LIBOBJ. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Move AC_LIBOBJ and gl_PREREQ_STRERROR_R invocations from here... * modules/strerror_r-posix (configure.ac): ... to here. 2011-05-24 Eric Blake strerror_r: fix missing header * lib/strerror_r.c: Avoid compiler warning about snprintf. strerror_r: fix AIX test failures * lib/strerror_r.c (strerror_r): Convert silent truncation to ERANGE failure. strerror_r: fix Solaris test failures * lib/strerror_r.c (strerror_r): Partially populate buf on ERANGE failures. * doc/posix-functions/strerror_r.texi (strerror_r): Document this. strerror_r: enforce POSIX recommendations * lib/strerror_r.c (safe_copy): New helper method. (strerror_r): Guarantee a non-empty string. * tests/test-strerror_r.c (main): Enhance tests to incorporate recent POSIX rulings and to match our strerror guarantees. * doc/posix-functions/strerror_r.texi (strerror_r): Document this. 2011-05-24 Jim Meyering test-perror2.c: avoid warning about unused variable * tests/test-perror2.c (main): Remove declaration of unused "fp". 2011-05-24 Eric Blake perror: avoid spurious test failure on HP-UX * tests/test-perror.sh: Use Exit to avoid wrong exit status. tests: fix logic bug in init.sh * tests/init.sh: (gl_set_x_corrupts_stderr_): Clear for successful shell. 2011-05-24 Jim Meyering utimensat: do not reference an out-of-scope buffer Otherwise, with __linux__ defined, "times" would point to a buffer, "ts" declared in an inner scope, yet "times" would be dereferenced outside the scope in which "ts" was valid. * lib/utimensat.c (rpl_utimensat) [__linux__]: Move the declaration of ts[2] "out/up", so that the use of aliased "times" (via "times = ts;") does not end up referencing an out-of-scope "ts" opendir-safer.c: don't clobber errno; don't close negative FD * lib/opendir-safer.c (opendir_safer): [HAVE_FDOPENDIR || GNULIB_FDOPENDIR]: Don't close a negative file descriptor, and more importantly, don't clobber the offending errno value with EINVAL. Before, upon failure of dup_safer, we would pass the negative file descriptor to fdopendir, which would clobber errno. 2011-05-23 Bruno Haible idcache: Fix module description. * modules/idcache (Include): Set to "idcache.h". 2011-05-23 Paul Eggert gnulib-tool: fix portability problem with MacOS sed A sed command like "/x/{s/a/b/}" is not portable; a newline is needed before the "}". Problem reported by Leo in . * gnulib-tool (func_modules_transitive_closure): Insert newlines in sed_extract_condition1, sed_extract_condition2. 2011-05-23 Bruno Haible hash: Simplify autoconf macro. * m4/hash.m4 (gl_HASH): Don't require AM_STDBOOL_H. 2011-05-23 Bruno Haible getugroups: Fix module description. * modules/getugroups (Include): Set to "getugroups.h". 2011-05-23 Bruno Haible linkat: Simplify autoconf macro. * m4/linkat.m4 (gl_FUNC_LINKAT): Don't require gl_FUNC_LINK. 2011-05-23 Bruno Haible Eric Blake linkat, renameat: Update dependencies. * modules/renameat (Depends-on): Add dosname, save-cwd. Remove stpcpy. * modules/linkat (Depends-on): Likewise. Remove also readlink, symlinkat. 2011-05-23 Jim Meyering maint.mk: more tight_scope improvements * top/maint.mk: (_gl_TS_var_match): Use $(_gl_TS_extern) here, too. (_gl_TS_headers): Define only in if-0'd block. (_gl_TS_dir): Omit the $(srcdir)/ prefix. Sometimes we need it, sometimes we must *not* use it. Adjust uses accordingly. (sc_tight_scope): Use much simpler grep-based test to determine whether we skip this rule. maint.mk: generalize/improve the tight-scope rule * top/maint.mk: Emit a warning when the test is skipped. (_gl_TS_dir): Add $(srcdir)/ prefix. (_gl_TS_function_match): Simplify, rather than trying to enumerate common types. Otherwise, it would fail to match an "extern unsigned char const *" declaration in idutils. (_gl_TS_extern): Do not endorse use of "XTERN", but do provide a way to support use of that type of macro. (_gl_TS_var_match): Simplify regexp. (_gl_TS_obj_files): New configurable variable. (_gl_TS_headers): Likewise. 2011-05-22 Paul Eggert verify: fix bug when gnulib is also included * lib/verify.h (verify, verify_true): Define if _GL_VERIFY_H is defined, not if _GL_STATIC_ASSERT_H is not defined. Perhaps there's a better way, but this fixes the immediate problem. Problem reported by Bruno Haible in . 2011-05-22 Bruno Haible xgetcwd: Simplify autoconf macro. * m4/xgetcwd.m4 (gl_XGETCWD): Don't require gl_FUNC_GETCWD. 2011-05-22 Bruno Haible New module 'mktime-internal'. * modules/mktime-internal: New file. * m4/timegm.m4 (gl_PREREQ_TIMEGM): Move contents to ... * m4/mktime.m4 (gl_FUNC_MKTIME_INTERNAL): New macro. Define mktime_internal as a C macro if libc has __mktime_internal. * modules/timegm (Depends-on): Add mktime-internal. Remove mktime. Add conditions. * MODULES.html.sh (Date and time ): Add mktime-internal. 2011-05-22 Bruno Haible timegm: Correct mktime replacement statements. * m4/timegm.m4 (gl_PREREQ_TIMEGM): Set REPLACE_MKTIME, instead of defining mktime as a C macro. This completes a 2009-07-28 commit. 2011-05-22 Bruno Haible timegm: Simplify autoconf macro. * m4/timegm.m4 (gl_PREREQ_TIMEGM): Don't require gl_TIME_R. 2011-05-21 Paul Eggert clock-time: change to LGPLv2+. * modules/clock-time: Change from GPL to LGPLv2+. Actually, it's BSD-like but we have no mark for that; this is good enough for now. 2011-05-21 Bruno Haible strerror_r: Fix comments. * lib/strerror_r.c (strerror_r): Fix comment about Cygwin and sys_nerr. 2011-05-21 Bruno Haible relocatable-prog-wrapper: Fix possible link error. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Move determination of HAVE_SETENV and REPLACE_SETENV and AC_LIBOBJ invocation from here... (gl_FUNC_SETENV): ... to here. * m4/canonicalize.m4 (gl_CANONICALIZE_LGPL_SEPARATE): Update comment. * m4/readlink.m4 (gl_FUNC_READLINK_SEPARATE): Likewise. 2011-05-21 Bruno Haible relocatable-prog-wrapper: Assume strerror() exists. * modules/relocatable-prog-wrapper (Files): Remove lib/strerror.c, m4/strerror.m4. (configure.ac): Don't invoke gl_FUNC_STRERROR_SEPARATE. * lib/relocwrapper.c: Remove mention of strerror module. * lib/strerror.c: Assume REPLACE_STRERROR is 1. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): Remove macro. (gl_FUNC_STRERROR): Inline it here. Don't define REPLACE_STRERROR as a C macro. 2011-05-21 Bruno Haible select: Simplify replacement idiom. * m4/select.m4 (gl_FUNC_SELECT): Set REPLACE_SELECT also on native Win32 platforms. * lib/sys_select.in.h (select): Simplify accordingly. * modules/select (Depends-on): Likewise. 2011-05-21 Bruno Haible mkdir-p: Simplify autoconf macro. * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Don't require gl_FUNC_LCHMOD, gl_FUNC_LCHOWN. 2011-05-21 Eric Blake strerror_r: avoid clobbering strerror on cygwin * lib/strerror_r.c (strerror_r): Don't use cygwin's strerror_r; fall back instead to sys_errlist. * modules/strerror (configure.ac): Add witness. * tests/test-strerror_r.c (main): Enhance test. * doc/posix-functions/strerror_r.texi (strerror_r): Document it. * tests/test-perror2.c (main): Free memory before exit. 2011-05-21 Bruno Haible mkdtemp: Use gnulib naming conventions. * m4/mkdtemp.m4 (gl_FUNC_MKDTEMP): Renamed from gt_FUNC_MKDTEMP. * modules/mkdtemp (configure.ac): Update. 2011-05-20 Eric Blake strerror_r: avoid corrupting errno on Solaris * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Check for Solaris behavior. * doc/posix-functions/strerror_r.texi (strerror_r): Document it. strerror_r: avoid compiler warning * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Don't return a char*. strerror_r: simplify AIX code * lib/strerror_r.c (strerror_r): Filter out buflen of 1 up front. test-perror: avoid spurious failure on FreeBSD * modules/perror-tests (Depends-on): Add strerror, now that strerror_r no longer pulls it in. 2011-05-20 Bruno Haible strerror_r-posix: Remove unused dependencies. * modules/strerror_r-posix (Depends-on): Remove strerror. Reported by Eric Blake. 2011-05-20 Paul Eggert intprops: remove assumption about A|B representation * lib/intprops.h (_GL_BINARY_OP_OVERFLOW): Do not assume that A|B is a valid integer if both A and B are. Although this is true for all known practical hosts, the C standard doesn't guarantee it, and the code need not assume it. Also, this change may work around HP-UX 11.23 and IRIX 6.5 cc bugs reported by Bruno Haible in . 2011-05-20 Eric Blake perror: work around FreeBSD bug * m4/perror.m4 (gl_FUNC_PERROR): Also replace perror if strerror_r is broken. Move AC_LIBOBJ... * modules/perror (configure.ac): Here. * doc/posix-functions/perror.texi (perror): Document this. * tests/test-perror2.c (main): Enhance test. test-perror: check for strerror interactions * tests/macros.h (STREQ): Add macro. * modules/perror-tests (Files): Add second test. * tests/test-perror2.c (main): New file. * doc/posix-functions/perror.texi (perror): Document glibc bug. test-perror: rewrite to use init script * modules/perror-tests (Files): Add init.sh. * tests/test-perror.sh: Use temporary directory. 2011-05-20 Jim Meyering maint: replace misused "a" with "an" * doc/intprops.texi: "a integer" * doc/regex.texi: "a explanation" * lib/alignof.h: "a object" * lib/argmatch.h: "a explanation" * lib/argp-help.c: "a option" and "a OPTION_DOC" * lib/stdint.in.h: "a integer" * lib/userspec.c: "a owner" * doc/gnulib.texi: Fix "a idea", and reword. 2011-05-19 Jim Meyering maint: correct misuse of "a" and "an" * doc/regex.texi (Collating Symbol Operators): s/an close.../a close/ * lib/argp-help.c: "an docum...": s/an/a/ * lib/argp-parse.c: "An vector": s/An/A/ * lib/execute.c: "an native": s/an/a/ * lib/spawn-pipe.c: Likewise. * lib/gc.h: "an Gc_rc": s/an/a/ * lib/unigbrk.in.h: "an grapheme": s/an/a/ * lib/fts.c: "an stat.st_dev": s/an/a/ 2011-05-19 Paul Eggert intprops-tests: work around HP-UX 11.23 cc bug with constants * tests/test-intprops.c (VERIFY): New macro. (main): Use it, instead of verify, to work around the compiler bug; see . intprops: work around IRIX 6.5 cc bug with 0u - 0u + -1 See http://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html * lib/intprops.h (_GL_INT_NEGATE_CONVERT): New macro. (_GL_INT_SIGNED, _GL_INT_MAXIMUM, _GL_DIVIDE_OVERFLOW): (_GL_REMAINDER_OVERFLOW): Use it. intprops-tests: revert unsigned part of previous change * tests/test-intprops.c (UINT_MAX, ULONG_MAX, UINTMAX_MAX, U0, U1): Remove; they weren't actually needed. All uses of U0 and U1 removed, and other casts to 'unsigned int' reverted to 'u' suffixes. See . 2011-05-19 Bruno Haible strerror_r: Work around strerror_r() change in Cygwin 1.7.8. * lib/strerror_r.c (strerror_r) [CYGWIN]: Recognize when the system's strerror_r() returned without filling the buffer. Reported by Eric Blake. 2011-05-19 Eric Blake strerror_r: guarantee unchanged errno * lib/strerror_r.c (strerror_r): Guarantee unchanged errno. * lib/strerror-impl.h (strerror): Set errno to match strerror_r failure. * tests/test-strerror_r.c (main): Enhance test. 2011-05-19 Bruno Haible strerror_r: Reorder #if blocks. * lib/strerror_r.c (strerror_r): Reorder conditionals in the function for consistency with the previous commit. 2011-05-19 Bruno Haible perror: Avoid clobbering the strerror buffer when possible. * lib/strerror-impl.h: New file, extracted from lib/strerror.c. * lib/strerror.c: Include it. * modules/strerror (Files): Add lib/strerror-impl.h. * lib/perror.c: Include , intprops.h, verify.h. (my_strerror): New function, defined through lib/strerror-impl.h. (perror): Use it instead of strerror. * modules/perror (Files): Add lib/strerror-impl.h. (Depends-on): Remove strerror. Add intprops, verify, strerror_r-posix. 2011-05-19 Eric Blake strerror_r: fix on newer cygwin * lib/strerror_r.c (strerror_r): Cygwin now has __xpg_strerror_r, use it. 2011-05-19 Bruno Haible strerror_r: Avoid clobbering the strerror buffer when possible. * lib/strerror.c: Define _NETBSD_SOURCE. Include . (sys_nerr, sys_errlist): New declarations. (strerror_r): Be careful not to clobber the strerror buffer on NetBSD, HP-UX, native Win32, IRIX, and 32-bit Solaris. * m4/strerror_r.m4 (gl_PREREQ_STRERROR_R): Test whether catgets exists. 2011-05-19 Bruno Haible strerror_r: Fix test failure on mingw. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Don't define EXTEND_STRERROR_R. * lib/strerror_r.c (strerror_r): Test the various GNULIB_defined_* macros from errno.in.h instead. 2011-05-19 Eric Blake strerror: relax test for Solaris * tests/test-strerror.c (main): Permit Solaris behavior. * tests/test-strerror_r.c (main): Likewise. strerror: enforce POSIX ruling on strerror(0) * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): Expose BSD bug. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Likewise. * lib/strerror_r.c (rpl_strerror_r): Work around it. * doc/posix-functions/strerror.texi (strerror): Document it. * doc/posix-functions/strerror_r.texi (strerror_r): Likewise. * tests/test-strerror.c (main): Strengthen test. * tests/test-strerror_r.c (main): Likewise. 2011-05-19 Paul Eggert intprop-tests: port to older and more-pedantic compilers * modules/intprops-tests (Files): Add tests/macros.h. * tests/test-intprops.c: Include macros.h. (TYPE_IS_INTEGER): Use ASSERT, not verify, to test this macro, as it's no longer documented to expand to an integer constant expression. (TYPE_SIGNED): Use ASSERT, not verify, to test this macro when the argument is floating point, as it's no longer documented to expand to an integer constant expression in that case. (UINT_MAX, ULONG_MAX, UINTMAX_MAX): Redefine to work around compiler bugs reported by Bruno Haible. See . (U0, U1): New constants, to work around the same bugs. Also, in tests, use e.g., "(unsigned int) 39" rather than "39u". intprops: work around C compiler bugs * lib/intprops.h (INT_MULTIPLY_RANGE_OVERFLOW): Work around compiler bug in Sun C 5.11 2010/08/13 and other compilers; see . intprops: TYPE_IS_INTEGER, TYPE_SIGNED not integer constant exprs * doc/intprops.texi (Integer Type Determination): Fix documentation for TYPE_IS_INTEGER: it returns an constant expression, not an integer constant expression. Fix doc for TYPE_SIGNED: it returns an integer constant expression only if its argument is an integer type. (TYPE_IS_INTEGER is the same, but is hardly worth documented that way....) 2011-05-18 Bruno Haible strerror_r: Avoid clobbering the strerror buffer when possible. * lib/strerror_r.c (strerror_r): Merge the three implementations. Handle gnulib defined errno values here. When strerror() returns NULL or an empty string, return EINVAL. * lib/strerror.c (strerror): Always call strerror_r. Don't handle gnulib defined errno values here. * modules/strerror (Depends-on): Add verify, strerror_r-posix. 2011-05-18 Eric Blake fnmatch: avoid compiler warning * lib/fnmatch_loop.c (FCT): Use correct type. Reported by Matthias Bolte. 2011-05-13 Jim Meyering maint.mk: three new prohibit__without_use rules * top/maint.mk (sc_prohibit_stdio--_without_use): New rule. (sc_prohibit_stdio-safer_without_use): Likewise. (sc_prohibit_xfreopen_without_use): Likewise. 2011-05-17 Jim Meyering announce-gen: fail if the NEWS delta is empty If there's nothing noteworthy in NEWS, then either you forgot or you shouldn't be releasing. * build-aux/announce-gen: Die if the NEWS delta is effectively empty. 2011-05-17 Pádraig Brady * top/maint.mk (_gl_tight_scope:): Automatically exclude compiler reserved symbols starting with double underscore from the check. 2011-05-17 Paul Eggert intprops: add doc * doc/intprops.texi: New file, documenting intprops. * doc/gnulib.texi (Particular Modules): Include it. verify: add doc to gnulib manual and fix example * doc/gnulib.texi (Compile-time Assertions): New node, for 'verify'. * doc/verify.texi (Compile-time Assertions): Update 'assert' doc. (Compile-time Assertions): Fix example so it can't overflow. 2011-05-17 Jim Meyering warnings.m4: don't usurp save_CPPFLAGS variable name * m4/warnings.m4: Prefix local temporary variable name with gl_. doc: fix typo * doc/gnulib-intro.texi (Target Platforms): s/is/are/ 2011-05-16 Paul Eggert Bruno Haible doc: Tweak recent change. * README (Portability guidelines): Tweak new text. * doc/gnulib-intro.texi (Target Platforms): Likewise. Mention Interix 6.1. 2011-05-16 Eric Blake inttypes: avoid autoconf warning * m4/inttypes.m4 (gl_INTTYPES_INCOMPLETE): Only expand once. * m4/stdint.m4 (gl_STDINT_H): Likewise. 2011-05-16 Sam Steingold and Eric Blake vc-list-files: accept multiple directory operands * build-aux/vc-list-files: Iterate over all remaining operands. 2011-05-16 Bruno Haible Fix confusion regarding deprecated modules. * modules/calloc (Status, Notice): Mark module as deprecated, not obsolete. * modules/fnmatch-posix (Status, Notice): Likewise. * modules/getdate (Status, Notice): Likewise. * modules/getopt (Status, Notice): Likewise. * modules/malloc (Status, Notice): Likewise. * modules/pipe (Status, Notice): Likewise. * modules/realloc (Status, Notice): Likewise. * modules/rename-dest-slash (Status, Notice): Likewise. * modules/unictype/bidicategory-all (Status, Notice): Likewise. * modules/unictype/bidicategory-byname (Status, Notice): Likewise. * modules/unictype/bidicategory-name (Status, Notice): Likewise. * modules/unictype/bidicategory-of (Status, Notice): Likewise. * modules/unictype/bidicategory-test (Status, Notice): Likewise. 2011-05-16 Bruno Haible doc: List the target platforms. * doc/gnulib-intro.texi (Target Platforms): New section. * doc/gnulib.texi (Introduction): Update menu. * README (Portability guidelines): Refer to the new section. Update statement about oldest supported environment. Remove rationale why , , are assumed. Update example of an unportable C89 function. Reported by Bastien Roucariès and Charles Wilson . Feedback from Paul Eggert. 2011-05-16 Paul Eggert * build-aux/bootstrap (gnulib_tool): Handle symlink timestamps better. 2011-05-13 Paul Eggert intprops-tests: new module * modules/intprops-tests, tests/test-intprops.c: New files. intprops: add safe, portable integer overflow checking * lib/intprops.h (_GL_INT_CONVERT, _GL_INT_TWOS_COMPLEMENT): (_GL_INT_SIGNED, _GL_INT_MINIMUM, _GL_INT_MAXIMUM): (_GL_SIGNED_INT_MINIMUM, INT_ADD_RANGE_OVERFLOW): (INT__SUBTRACT__RANGE_OVERFLOW, INT_NEGATE_RANGE_OVERFLOW): (INT_MULTIPLY_RANGE_OVERFLOW, INT_REMAINDER_RANGE_OVERFLOW): (INT_LEFT_SHIFT_RANGE_OVERFLOW, _GL_ADD_OVERFLOW): (_GL__SUBTRACT__OVERFLOW, _GL_MULTIPLY_OVERFLOW, _GL_DIVIDE_OVERFLOW): (_GL_REMAINDER_OVERFLOW, _GL_UNSIGNED_NEG_MULTIPLE, INT_ADD_OVERFLOW): (INT__SUBTRACT__OVERFLOW, INT_NEGATE_OVERFLOW, INT_MULTIPLY_OVERFLOW): (INT_DIVIDE_OVERFLOW, INT_REMAINDER_OVERFLOW): (INT_LEFT_SHIFT_OVERFLOW, _GL_BINARY_OP_OVERFLOW): New macros. 2011-05-12 James Youngman Add a test for glibc's Bugzilla bug #12378. * m4/fnmatch.m4: Use gnulib's fnmatch if the system fnmatch doesn't allow the literal matching of a lone "[" (which is required by POSIX). * tests/test-fnmatch.c (main): Check that "[/b" matches itself. 2011-05-11 Ulrich Drepper Sync glibc change fixing Bugzilla bug #12378. * lib/fnmatch_loop.c (FCT): When matching '[' keep track of beginning and fall back to matching as normal character if the string ends before the matching ']' is found. This is what POSIX requires. 2011-05-13 Eric Blake getcwd-lgpl: relax test for FreeBSD * doc/posix-functions/getcwd.texi (getcwd): Document portability issue. * tests/test-getcwd-lgpl.c (main): Relax test. Reported by Matthias Bolte. 2011-05-11 Eric Blake test-fflush: silence compiler warning * tests/test-fflush.c (main): Don't fclose a NULL pointer. 2011-05-11 Bruno Haible canonicalize, canonicalize-lgpl: Avoid crash dialog on MacOS X. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Add GL_NOCRASH code. * modules/canonicalize (Depends-on): Add 'nocrash'. * modules/canonicalize-lgpl (Depends-on): Likewise. * doc/posix-functions/realpath.texi: Update platforms list. Reported by Ryan Schmidt . 2011-05-11 Bruno Haible group-member: Declare function in . * lib/unistd.in.h (group_member): New declaration. * lib/group-member.h: Remove file. * lib/group-member.c: Include instead of group-member.h. * tests/test-unistd-c++.cc: Check signature of group_member. * m4/group-member.m4 (gl_FUNC_GROUP_MEMBER): Require gl_UNISTD_H_DEFAULTS. Set HAVE_GROUP_MEMBER. * m4/unistd_h.m4 (gl_UNISTD_H): Check whether group_member is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GROUP_MEMBER, HAVE_GROUP_MEMBER. * modules/group-member (Files): Remove lib/group-member.h. (Depends-on): Add unistd. Specify conditions. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Change to . * modules/unistd (Makefile.am): Substitute GNULIB_GROUP_MEMBER, HAVE_GROUP_MEMBER. * NEWS: Mention the change. * lib/euidaccess.c: Don't include group-member.h. 2011-05-11 Bruno Haible group-member: Document module. * doc/glibc-functions/group_member.texi: Mention the 'group-member' module. 2011-05-11 Bruno Haible fclose: Fix mistake earlier today. * lib/fclose.c (rpl_fclose): Don't assume that EOF < 0. 2011-05-11 Eric Blake fclose: preserve fflush errors * lib/fclose.c (rpl_fclose): Don't lose fflush errors. Reported by Jim Meyering. bootstrap: support a prereq of 'rpcgen -' on RHEL5 * build-aux/bootstrap (check_versions): When no specific version is required, merely check that the app produces an exit status that indicates its existence. maint.mk: drop redundant check * top/maint.mk (sc_the_the): Delete; sc_prohibit_doubled_word does the same but better. 2011-05-11 Bruno Haible fclose: Fix possible link error. * lib/fclose.c (rpl_fclose): Invoke _gl_unregister_fd, not unregister_shadow_fd. Improve comments. * lib/sockets.c (close_fd_maybe_socket): Add comments. Reported by Eric Blake. 2011-05-11 Jim Meyering maint.mk: improve "can not" detection and generalize rule name * top/maint.mk (sc_prohibit_undesirable_word_seq): Renamed from sc_prohibit_can_not, since we'll probably add a few more word pairs here. Use the same technique as in sc_prohibit_doubled_word, so that we recognize "can not" also when the words are separated by a newline. Suggested by Eric Blake. (perl_filename_lineno_text_): Define. Factored out of... (prohibit_doubled_word_): ...here. Use the new definition. (prohibit_undesirable_word_seq_): New var. Use it here, too. (prohibit_undesirable_word_seq_RE_): New overridable variable. (ignore_undesirable_word_sequence_RE_): New overridable variable. 2011-05-10 Eric Blake fclose: avoid double close race when possible * lib/fclose.c (rpl_fclose): Rewrite to avoid double-close race on all but WINDOWS_SOCKETS. 2011-05-10 Bastien Roucariès openat: correct new comment * lib/openat-proc.c (openat_proc_name): Correct the comment. 2011-05-10 Jim Meyering openat: add comments * lib/openat-proc.c (openat_proc_name): Add comments, mostly from Eric Blake. 2011-05-09 Eric Blake openat: reduce syscalls in first probe of /proc * lib/openat-proc.c (openat_proc_name): Require that /proc/self/fd be a directory. Simplify the probe for .. bugs. * modules/openat (Depends-on): Drop same-inode. Reported by Bastien ROUCARIES. 2011-05-09 Jim Meyering maint.mk: change semantics/name of tight_scope variables * top/maint.mk (_gl_TS_var_match, _gl_TS_function_match): Rename variables to align with semantics that make them more useful. maint.mk: tweak new rule's name not to impinge * top/maint.mk (_gl_tight_scope): Rename from sc_tight_scope-0. (sc_tight_scope): Use new rule name rather than $@-0. maint.mk: add a syntax-check rule to ensure tightly-scoped symbols * top/maint.mk (sc_tight_scope): New rule. (sc_tight_scope-0): New rule, ifdef'd out. (_gl_TS_dir): Default. (_gl_TS_unmarked_extern_functions, _gl_TS_function_regex): Define. (_gl_TS_unmarked_extern_vars, _gl_TS_var_regex): Define. 2011-05-09 Simon Josefsson * m4/gc.m4: Remove gl_PREREQ_GC (not used). Reported by Bruno Haible . 2011-05-08 Bruno Haible Comments. * m4/isnanf.m4: Add comment. * m4/isnanl.m4: Likewise. 2011-05-08 Bruno Haible glob: Remove obsolete macro. * m4/glob.m4 (gl_GLOB_SUBSTITUTE): Remove macro. 2011-05-08 Paul Eggert intprops: Sun C 5.11 supports __typeof__ * lib/intprops.h (_GL_HAVE___TYPEOF__): New macro, which is set for either GCC 2 or later, as before, or for Sun C 5.11 or later, which is new. (_GL_SIGNED_TYPE_OR_EXPR): Use it. intprops: switch to usual gnulib indenting and naming * lib/intprops.h (_GL_INTPROPS_H): Rename from GL_INTPROPS_H. (_GL_SIGNED_TYPE_OR_EXPR): Rename from signed_type_or_expr__. * tests/test-inttostr.c (IS_TIGHT): Adjust to above renaming. 2011-05-08 Jim Meyering maint.mk: suppress "Entering/Leaving directory" diag in announcement * top/maint.mk (release-prep): Use make's --no-print-directory option when generating the announcement. This eliminates the pesky "make[2]: Entering/Leaving directory" diagnostics in the generated announcement template. 2011-05-08 Bruno Haible tzset: Fix gettimeofday wrapper on Solaris 2.6. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): When invoking gl_GETTIMEOFDAY_REPLACE_LOCALTIME, also set REPLACE_GETTIMEOFDAY. 2011-05-07 Paul Eggert ignore-value, verify: Omit include files from lib_SOURCES. * modules/ignore-value, modules/verify (Makefile.am): Don't put ignore-value.h, or verify.h, into lib_SOURCES, as that leads Automake to duplicate use of am__objects_... variables in Makefile.in. See . 2011-05-07 Bruno Haible fclose: Simplify autoconf macro. * m4/fclose.m4 (gl_FUNC_FCLOSE): Assume gl_FUNC_FFLUSH_STDIN is defined. 2011-05-07 Bruno Haible canonicalize-lgpl: Fix autoconf macro ordering bug. * m4/canonicalize.m4 (gl_CANONICALIZE_LGPL): Require gl_STDLIB_H_DEFAULTS. 2011-05-06 Eric Blake maintainer-makefile: make sc_po_check easier to tune * top/maint.mk (sc_po_check): Allow overriding which non-VC files to probe for strings, such as an alternate location for gnulib. fclose: guarantee behavior on seekable stdin * modules/fclose (Depends-on): Add fflush. * doc/posix-functions/fclose.texi (fclose): Document this. * tests/test-fclose.c (main): Make test for this unconditional. 2011-05-06 Bruno Haible fflush, fpurge: Relicense under LGPLv2+. * modules/fflush (License): Change from LGPLv3+ to LGPLv2+. * modules/fpurge (License): Likewise. With permission from Eric Blake and Jim Meyering. Suggested by Eric Blake. 2011-05-06 Karl Berry * MODULES.html.sh (func_all_modules): remove exit. 2011-05-06 Jim Meyering maint.mk: use info-gnu@ as the default only for a stable release * top/maint.mk: Don't default to info-gnu for alpha or beta releases. For those, just use $(PACKAGE_BUGREPORT), in which case we don't have to set the Mail-Followup-To header. Prompted by Reuben Thomas in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/26488 2011-05-05 Paul Eggert assert-h: new module, which supports C1X-style static_assert * lib/assert.in.h, m4/assert_h.m4, modules/assert-h: New files. * lib/verify.h: Revamp so that this can be copied into assert.h, while retaining the ability to use it standalone as before. Rename private identifiers so as not to encroach on the standard C namespace, since this is now used by assert.h. (_GL_VERIFY_TYPE): New macro, factoring out differing parts of the old verify_true. (_GL_VERIFY_TRUE): New macro, with much of the contents of the old verify_true. Use _GL_VERIFY_TYPE. (_GL_VERIFY): New macro, with much of the contents of the old verify. (static_assert): New macro, if _GL_STATIC_ASSERT_H is defined and static_assert is not; _GL_STATIC_ASSERT_H is defined when this file is copied into the replacement assert.h. (_Static_assert): New macro, if _GL_STATIC_ASSERT_H is defined and _Static_assert is not built in. (verify_true, verify): Define only if _GL_STATIC_ASSERT_H is not defined, and use the new macros mentioned above. * doc/posix-headers/assert.texi: Document this. 2011-05-05 Bruno Haible fclose, fflush: Respect rules for use of AC_LIBOBJ. * m4/fflush.m4 (gl_FUNC_FFLUSH): Don't invoke gl_REPLACE_FCLOSE. * m4/fclose.m4 (gl_FUNC_FCLOSE): Invoke gl_FUNC_FFLUSH_STDIN and gl_REPLACE_FCLOSE here. * modules/fflush (Depends-on): Remove fclose. * doc/posix-functions/fclose.texi: Mention module 'fflush' only in combination with module 'fclose'. 2011-05-05 Bruno Haible fflush, fseeko: Respect rules for use of AC_LIBOBJ. * m4/fflush.m4 (gl_FUNC_FFLUSH_STDIN): New macro, extracted from gl_FUNC_FFLUSH. (gl_FUNC_FFLUSH): Use it. (gl_REPLACE_FFLUSH): Don't invoke gl_REPLACE_FSEEKO. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Invoke gl_FUNC_FFLUSH_STDIN and gl_REPLACE_FSEEKO here. 2011-05-05 Bruno Haible tzset: Relicense under LGPL. * modules/tzset (License): Change to LGPL. No agreement needed; it's a no-op. strtoimax, strtoumax: Relicense under LGPL. * modules/strtoimax (License): Change to LGPL. * modules/strtoumax (License): Likewise. With permission from Jim Meyering, Paul Eggert: getgroups: Relicense under LGPL. * modules/getgroups (License): Change to LGPL. With permission from Jim Meyering, Paul Eggert, Eric Blake: nanosleep: Relicense under LGPL. * modules/nanosleep (License): Change to LGPL. With permission from Jim Meyering, Paul Eggert, Eric Blake, Bruno Haible: futimens: Relicense under LGPL. * modules/futimens (License): Change to LGPL. With permission from Eric Blake: fflush: Relicense under LGPL. * modules/fflush (License): Change to LGPL. With permission from Eric Blake, Bruno Haible, Jim Meyering: tmpfile: Relicense under LGPL. * modules/tmpfile (License): Change to LGPL. With permission from Ben Pfaff: isfinite: Relicense under LGPL. * modules/isfinite (License): Change to LGPL. With permission from Ben Pfaff, Bruno Haible: acosl..tanl: Relicense under LGPL. * modules/acosl (License): Change to LGPL. * modules/asinl (License): Likewise. * modules/atanl (License): Likewise. * modules/cosl (License): Likewise. * modules/expl (License): Likewise. * modules/logl (License): Likewise. * modules/sinl (License): Likewise. * modules/sqrtl (License): Likewise. * modules/tanl (License): Likewise. Source code originally from glibc and Paolo Bonzini. Agreements: 2011-05-05 Bruno Haible signal: Define sighandler_t. * lib/signal.in.h (sighandler_t): New type. * m4/signal_h.m4 (gl_SIGNAL_H): Require AC_USE_SYSTEM_EXTENSIONS. Test whether sighandler_t is defined. (gl_SIGNAL_H_DEFAULTS): Initialize HAVE_SIGHANDLER_T. * modules/signal (Depends-on): Add extensions. (Makefile.am): Substitute HAVE_SIGHANDLER_T. * doc/posix-headers/signal.texi: Mention the problem with sighandler_t. Suggested by Markus Steinborn . 2011-05-05 Eric Blake maint: remove useless REPLACE_*_H macros * m4/arpa_inet_h.m4 (gl_REPLACE_ARPA_INET_H): Delete. * m4/dirent_h.m4 (gl_REPLACE_DIRENT_H): Likewise. * m4/locale_h.m4 (gl_REPLACE_LOCALE_H): Likewise. * m4/poll_h.m4 (gl_REPLACE_POLL_H): Likewise. * m4/spawn_h.m4 (gl_REPLACE_SPAWN_H): Likewise. * m4/sys_ioctl_h.m4 (gl_REPLACE_SYS_IOCTL_H): Likewise. * m4/wchar_h.m4 (gl_REPLACE_WCHAR_H): Likewise. * m4/btowc.m4: Update callers. * m4/dirfd.m4: Likewise. * m4/duplocale.m4: Likewise. * m4/fchdir.m4: Likewise. * m4/fdopendir.m4: Likewise. * m4/inet_ntop.m4: Likewise. * m4/inet_pton.m4: Likewise. * m4/ioctl.m4: Likewise. * m4/mbrlen.m4: Likewise. * m4/mbrtowc.m4: Likewise. * m4/mbsinit.m4: Likewise. * m4/mbsnrtowcs.m4: Likewise. * m4/mbsrtowcs.m4: Likewise. * m4/poll.m4: Likewise. * m4/setlocale.m4: Likewise. * m4/wcrtomb.m4: Likewise. * m4/wcsnrtombs.m4: Likewise. * m4/wcsrtombs.m4: Likewise. * m4/wctob.m4: Likewise. * m4/wcwidth.m4: Likewise. * modules/posix_spawn: Likewise. * modules/posix_spawn_file_actions_addclose: Likewise. * modules/posix_spawn_file_actions_adddup2: Likewise. * modules/posix_spawn_file_actions_addopen: Likewise. * modules/posix_spawn_file_actions_destroy: Likewise. * modules/posix_spawn_file_actions_init: Likewise. * modules/posix_spawnattr_destroy: Likewise. * modules/posix_spawnattr_getflags: Likewise. * modules/posix_spawnattr_getpgroup: Likewise. * modules/posix_spawnattr_getschedparam: Likewise. * modules/posix_spawnattr_getschedpolicy: Likewise. * modules/posix_spawnattr_getsigdefault: Likewise. * modules/posix_spawnattr_getsigmask: Likewise. * modules/posix_spawnattr_init: Likewise. * modules/posix_spawnattr_setflags: Likewise. * modules/posix_spawnattr_setpgroup: Likewise. * modules/posix_spawnattr_setschedparam: Likewise. * modules/posix_spawnattr_setschedpolicy: Likewise. * modules/posix_spawnattr_setsigdefault: Likewise. * modules/posix_spawnattr_setsigmask: Likewise. * modules/posix_spawnp: Likewise. 2011-05-04 Reuben Thomas Add option to do-release-commit-and-tag to specify branch. * build-aux/do-release-commit-and-tag: Add --branch. 2011-05-03 Bruno Haible Avoid unnecessary compilation units, through conditional dependencies. * modules/accept (Depends-on): Add conditions to the dependencies. * modules/acosl (Depends-on): Likewise. * modules/argz (Depends-on): Likewise. * modules/asinl (Depends-on): Likewise. * modules/atanl (Depends-on): Likewise. * modules/atoll (Depends-on): Likewise. * modules/bind (Depends-on): Likewise. * modules/btowc (Depends-on): Likewise. * modules/canonicalize-lgpl (Depends-on): Likewise. * modules/ceil (Depends-on): Likewise. * modules/ceilf (Depends-on): Likewise. * modules/ceill (Depends-on): Likewise. * modules/chdir-long (Depends-on): Likewise. * modules/chown (Depends-on): Likewise. * modules/close (Depends-on): Likewise. * modules/connect (Depends-on): Likewise. * modules/cosl (Depends-on): Likewise. * modules/dirfd (Depends-on): Likewise. * modules/dprintf (Depends-on): Likewise. * modules/dprintf-posix (Depends-on): Likewise. * modules/error (Depends-on): Likewise. * modules/euidaccess (Depends-on): Likewise. * modules/expl (Depends-on): Likewise. * modules/faccessat (Depends-on): Likewise. * modules/fchdir (Depends-on): Likewise. * modules/fclose (Depends-on): Likewise. * modules/fcntl (Depends-on): Likewise. * modules/fdopendir (Depends-on): Likewise. * modules/fflush (Depends-on): Likewise. * modules/floor (Depends-on): Likewise. * modules/floorf (Depends-on): Likewise. * modules/floorl (Depends-on): Likewise. * modules/fnmatch (Depends-on): Likewise. * modules/fopen (Depends-on): Likewise. * modules/fprintf-posix (Depends-on): Likewise. * modules/frexp (Depends-on): Likewise. * modules/frexp-nolibm (Depends-on): Likewise. * modules/frexpl (Depends-on): Likewise. * modules/frexpl-nolibm (Depends-on): Likewise. * modules/fseek (Depends-on): Likewise. * modules/fsusage (Depends-on): Likewise. * modules/ftell (Depends-on): Likewise. * modules/ftello (Depends-on): Likewise. * modules/futimens (Depends-on): Likewise. * modules/getcwd (Depends-on): Likewise. * modules/getcwd-lgpl (Depends-on): Likewise. * modules/getdelim (Depends-on): Likewise. * modules/getdomainname (Depends-on): Likewise. * modules/getgroups (Depends-on): Likewise. * modules/gethostname (Depends-on): Likewise. * modules/getline (Depends-on): Likewise. * modules/getlogin_r (Depends-on): Likewise. * modules/getopt-posix (Depends-on): Likewise. * modules/getpeername (Depends-on): Likewise. * modules/getsockname (Depends-on): Likewise. * modules/getsockopt (Depends-on): Likewise. * modules/getsubopt (Depends-on): Likewise. * modules/getusershell (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/grantpt (Depends-on): Likewise. * modules/iconv_open (Depends-on): Likewise. * modules/iconv_open-utf (Depends-on): Likewise. * modules/inet_ntop (Depends-on): Likewise. * modules/inet_pton (Depends-on): Likewise. * modules/ioctl (Depends-on): Likewise. * modules/isapipe (Depends-on): Likewise. * modules/isfinite (Depends-on): Likewise. * modules/isinf (Depends-on): Likewise. * modules/lchown (Depends-on): Likewise. * modules/ldexpl (Depends-on): Likewise. * modules/link (Depends-on): Likewise. * modules/linkat (Depends-on): Likewise. * modules/listen (Depends-on): Likewise. * modules/logl (Depends-on): Likewise. * modules/lstat (Depends-on): Likewise. * modules/mbrlen (Depends-on): Likewise. * modules/mbrtowc (Depends-on): Likewise. * modules/mbsinit (Depends-on): Likewise. * modules/mbsnrtowcs (Depends-on): Likewise. * modules/mbsrtowcs (Depends-on): Likewise. * modules/mbtowc (Depends-on): Likewise. * modules/memcmp (Depends-on): Likewise. * modules/mkdir (Depends-on): Likewise. * modules/mkdtemp (Depends-on): Likewise. * modules/mkfifo (Depends-on): Likewise. * modules/mkfifoat (Depends-on): Likewise. * modules/mknod (Depends-on): Likewise. * modules/mkostemp (Depends-on): Likewise. * modules/mkostemps (Depends-on): Likewise. * modules/mkstemp (Depends-on): Likewise. * modules/mkstemps (Depends-on): Likewise. * modules/mktime (Depends-on): Likewise. * modules/nanosleep (Depends-on): Likewise. * modules/open (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/perror (Depends-on): Likewise. * modules/poll (Depends-on): Likewise. * modules/popen (Depends-on): Likewise. * modules/posix_spawn (Depends-on): Likewise. * modules/posix_spawn_file_actions_addclose (Depends-on): Likewise. * modules/posix_spawn_file_actions_adddup2 (Depends-on): Likewise. * modules/posix_spawn_file_actions_addopen (Depends-on): Likewise. * modules/posix_spawnp (Depends-on): Likewise. * modules/pread (Depends-on): Likewise. * modules/printf-posix (Depends-on): Likewise. * modules/ptsname (Depends-on): Likewise. * modules/putenv (Depends-on): Likewise. * modules/pwrite (Depends-on): Likewise. * modules/readline (Depends-on): Likewise. * modules/readlink (Depends-on): Likewise. * modules/readlinkat (Depends-on): Likewise. * modules/recv (Depends-on): Likewise. * modules/recvfrom (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. * modules/remove (Depends-on): Likewise. * modules/rename (Depends-on): Likewise. * modules/renameat (Depends-on): Likewise. * modules/rmdir (Depends-on): Likewise. * modules/round (Depends-on): Likewise. * modules/roundf (Depends-on): Likewise. * modules/roundl (Depends-on): Likewise. * modules/rpmatch (Depends-on): Likewise. * modules/select (Depends-on): Likewise. * modules/send (Depends-on): Likewise. * modules/sendto (Depends-on): Likewise. * modules/setenv (Depends-on): Likewise. * modules/setlocale (Depends-on): Likewise. * modules/setsockopt (Depends-on): Likewise. * modules/shutdown (Depends-on): Likewise. * modules/sigaction (Depends-on): Likewise. * modules/signbit (Depends-on): Likewise. * modules/sigprocmask (Depends-on): Likewise. * modules/sinl (Depends-on): Likewise. * modules/sleep (Depends-on): Likewise. * modules/snprintf (Depends-on): Likewise. * modules/snprintf-posix (Depends-on): Likewise. * modules/socket (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/sqrtl (Depends-on): Likewise. * modules/stat (Depends-on): Likewise. * modules/strchrnul (Depends-on): Likewise. * modules/strdup-posix (Depends-on): Likewise. * modules/strerror (Depends-on): Likewise. * modules/strerror_r-posix (Depends-on): Likewise. * modules/strndup (Depends-on): Likewise. * modules/strnlen (Depends-on): Likewise. * modules/strptime (Depends-on): Likewise. * modules/strsep (Depends-on): Likewise. * modules/strsignal (Depends-on): Likewise. * modules/strstr-simple (Depends-on): Likewise. * modules/strtod (Depends-on): Likewise. * modules/strtoimax (Depends-on): Likewise. * modules/strtok_r (Depends-on): Likewise. * modules/strtoumax (Depends-on): Likewise. * modules/symlink (Depends-on): Likewise. * modules/symlinkat (Depends-on): Likewise. * modules/tanl (Depends-on): Likewise. * modules/tcgetsid (Depends-on): Likewise. * modules/tmpfile (Depends-on): Likewise. * modules/trunc (Depends-on): Likewise. * modules/truncf (Depends-on): Likewise. * modules/truncl (Depends-on): Likewise. * modules/uname (Depends-on): Likewise. * modules/unlink (Depends-on): Likewise. * modules/unlockpt (Depends-on): Likewise. * modules/unsetenv (Depends-on): Likewise. * modules/usleep (Depends-on): Likewise. * modules/utimensat (Depends-on): Likewise. * modules/vasprintf (Depends-on): Likewise. * modules/vdprintf (Depends-on): Likewise. * modules/vdprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vprintf-posix (Depends-on): Likewise. * modules/vsnprintf (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/wcrtomb (Depends-on): Likewise. * modules/wcscasecmp (Depends-on): Likewise. * modules/wcscspn (Depends-on): Likewise. * modules/wcsdup (Depends-on): Likewise. * modules/wcsncasecmp (Depends-on): Likewise. * modules/wcsnrtombs (Depends-on): Likewise. * modules/wcspbrk (Depends-on): Likewise. * modules/wcsrtombs (Depends-on): Likewise. * modules/wcsspn (Depends-on): Likewise. * modules/wcsstr (Depends-on): Likewise. * modules/wcstok (Depends-on): Likewise. * modules/wcswidth (Depends-on): Likewise. * modules/wctob (Depends-on): Likewise. * modules/wctomb (Depends-on): Likewise. * modules/wctype (Depends-on): Likewise. * modules/wcwidth (Depends-on): Likewise. * modules/write (Depends-on): Likewise. 2011-05-03 Bruno Haible Support for conditional dependencies. * doc/gnulib.texi (Module description): Document the syntax of conditional dependencies. * gnulib-tool: New option --conditional-dependencies. (func_usage): Document it. (cond_dependencies): New variable. (func_get_automake_snippet_conditional, func_get_automake_snippet_unconditional): New functions, extracted from func_get_automake_snippet. (func_get_automake_snippet): Use them. (sed_first_32_chars): New variable. (func_module_shellfunc_name): New function. (func_module_shellvar_name): New function. (func_module_conditional_name): New function. (func_uncond_add_module, func_conddep_add_module, func_cond_module_p, func_cond_module_condition): New functions. (func_modules_transitive_closure): Add support for conditional dependencies. (func_emit_lib_Makefile_am): For a conditional module, enclose the conditional automake snippet in an automake conditional. (func_emit_autoconf_snippets): Emit shell functions that contain the code for conditional modules. (func_import, func_create_testdir): Update specification. 2011-05-03 Eric Blake test-getaddrinfo: report error information * tests/test-getaddrinfo.c (simple): Use err outside of dbprintf. 2011-05-03 Jim Meyering bootstrap: avoid build failure when $GZIP is set * build-aux/bootstrap (check_versions): Do not treat $GZIP as a program name. If defined at all, it is supposed to list gzip options. Reported by Alan Curry in http://debbugs.gnu.org/8609 2011-05-03 Reuben Thomas readme-release: new module with release instructions * modules/readme-release: New module. * top/README-release: New file, from coreutils, grep, diffutils. * MODULES.html.sh (Support for maintaining and releasing): Add it. 2011-05-02 Eric Blake fflush: also replace fclose when fixing fflush * modules/fflush (Depends-on): Add fclose. * m4/fflush.m4 (gl_FUNC_FFLUSH): Also replace fclose. * lib/fclose.c (rpl_fclose): Don't cause spurious failures on memstreams with no backing fd. * doc/posix-functions/fclose.texi (fclose): Document the use of fflush module to fix the bug. * tests/test-fclose.c (main): Relax test when fclose is used in isolation. fclose: add some tests * modules/fclose-tests: New test module. * tests/test-fclose.c: New file. * doc/posix-functions/fclose.texi (fclose): Document the bug. fclose: reduced dependencies * modules/fclose (Depends-on): Switch from fflush/fseeko to simpler lseek. * lib/fclose.c (rpl_fclose): Likewise. Reported by Simon Josefsson. exit: drop remaining clients * modules/argmatch (Depends-on): Replace exit with stdlib. * modules/copy-file (Depends-on): Likewise. * modules/execute (Depends-on): Likewise. * modules/exitfail (Depends-on): Likewise. * modules/obstack (Depends-on): Likewise. * modules/pagealign_alloc (Depends-on): Likewise. * modules/pipe-filter-gi (Depends-on): Likewise. * modules/pipe-filter-ii (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * modules/spawn-pipe (Depends-on): Likewise. * modules/wait-process (Depends-on): Likewise. * modules/xsetenv (Depends-on): Likewise. * modules/chdir-long (Depends-on): Add stdlib, for EXIT_FAILURE. * modules/git-merge-changelog (Depends-on): Likewise. * modules/long-options (Depends-on): Likewise. * modules/pt_chown (Depends-on): Likewise. * modules/sysexits (Depends-on): Likewise. freading: relax license from LGPLv3+ to LGPLv2+ * modules/freading (License): Relax LGPL version. 2011-05-02 Bruno Haible fchdir: Remove unused dependencies. * modules/fchdir (Depends-on): Remove include_next. 2011-05-02 Bruno Haible gnulib-tool: Refactor. * gnulib-tool (func_emit_autoconf_snippet): New function, extracted from func_emit_autoconf_snippets. (func_emit_autoconf_snippets): Use it. 2011-05-02 Simon Josefsson * NEWS: Document removal of 'exit'. * modules/exit: Remove file. 2011-05-01 Bruno Haible Update DEPENDENCIES. * DEPENDENCIES (gettext): Recommend the newest release. Reported by Simon Josefsson. 2011-05-01 Bruno Haible gnulib-tool: Reduce code duplication. * gnulib-tool (func_emit_autoconf_snippets): New function. (func_import, func_create_testdir): Use it. 2011-04-30 Eric Blake fclose: don't fail on non-seekable input stream * modules/fclose (Depends-on): Add freading, fflush, fseeko. * lib/fclose.c (rpl_fclose): Skip fflush for non-seekable input, since fflush is allowed to fail in that case. 2011-04-30 Bruno Haible dup3: cleanup * lib/dup3.c: Remove old code, leftover from 2009-12-16. 2011-04-30 Bruno Haible netdb: Make it work in C++ mode. * lib/netdb.in.h (struct addrinfo): In C++, define as a C struct. (getaddrinfo, freeaddrinfo, getnameinfo): Use macros from c++defs module. * m4/netdb_h.m4 (gl_NETDB_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR_FOR_TESTS. * modules/netdb-tests (Depends-on): Add netdb-c++-tests. * modules/netdb-c++-tests: New file. * tests/test-netdb-c++.cc: New file. 2011-04-30 Bruno Haible New modules 'vfscanf', 'vscanf'. * modules/vfscanf: New file. * modules/vscanf: New file. * m4/stdio_h.m4 (gl_STDIO_H): Don't set GNULIB_VFSCANF, GNULIB_VSCANF here. * doc/posix-functions/vfscanf.texi: Mention module 'vfscanf'. * doc/posix-functions/vscanf.texi: Mention module 'vscanf'. 2011-04-30 Bruno Haible passfd: Add comments. * lib/passfd.c: Add comments about platforms. 2011-04-30 Bruno Haible sys_uio: Make self-contained. * lib/sys_uio.in.h: Include before . * doc/posix-headers/sys_uio.texi: Mention the OpenBSD problem. 2011-04-30 Bruno Haible sys_socket: Ensure 'struct iovec' definition. * lib/sys_socket.in.h: Include also on platforms that have . * doc/posix-headers/sys_socket.texi: Mention the OpenBSD problem. 2011-04-30 Bruno Haible sys_uio: Protect definition of 'struct iovec'. * lib/sys_uio.in.h (struct iovec): Avoid redefinition. In C++, define it as a C struct. 2011-04-30 Bruno Haible manywarnings: fix indentation * m4/manywarnings.m4: Indent by 2 spaces consistently. 2011-04-30 Pádraig Brady manywarnings: add -Wno-missing-field-initializers if needed. * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add the above option if it's needed to allow initialization with { 0, } 2011-04-29 Reuben Thomas announce-gen: cosmetic improvement * build-aux/announce-gen: Strip any leading ./ from the NEWS file name. 2011-04-29 Jim Meyering vc-list-files: indent with spaces, not TABs * build-aux/vc-list-files: Convert leading TABs to spaces, to match the style of most other files in gnulib. announce-gen: indent with spaces, not TABs * build-aux/announce-gen: Convert all TABs to spaces, to match the style of most other files in gnulib. 2011-04-29 Eric Blake quotearg: avoid uninitialized variable use * lib/quotearg.c (quoting_options_from_style): Initialize remaining fields, and ensure that custom styles are only used via quoting_options rather than quoting_style. 2011-04-29 Jim Meyering maint.mk: remove unused VC-tag variable * top/maint.mk (VC-tag): Remove unused variable. 2011-04-29 Bruno Haible netdb: fix gai_strerror replacements * lib/netdb.in.h: Add _GL_FUNCDECL_RPL definitions. * modules/netdb: Substitute it. 2011-04-29 Jim Meyering test-getcwd.c: avoid new set-but-not-used warning * tests/test-getcwd.c (test_abort_bug): Exit nonzero for any problem, not just the glibc/abort one that getcwd-abort-bug.m4 detects. * m4/getcwd-abort-bug.m4: Update this now-duplicated code to match, and adjust the code that sets gl_cv_func_getcwd_abort_bug accordingly. test-hash.c: avoid a new shadowing warning * tests/test-hash.c (main): Don't shadow "dup". 2011-04-28 Eric Blake getaddrinfo: fix gai_strerror signature * m4/getaddrinfo.m4 (gl_GETADDRINFO): Detect broken signatures, and work around mingw with UNICODE defined. (gl_PREREQ_GETADDRINFO): Drop redundant decl check. * m4/netdb_h.m4 (gl_NETDB_H_DEFAULTS): Add witness. * modules/netdb (Makefile.am): Substitute it. * lib/netdb.in.h (gai_strerror): Declare replacement. * lib/gai_strerror.c (rpl_gai_strerror): Fix signature. * doc/posix-functions/gai_strerror.texi (gai_strerror): Document the fix. getsockopt: avoid compiler warning * lib/getsockopt.c (rpl_getsockopt): Add a cast for mingw. Reported by Matthias Bolte. tests: drop unused link dependency * modules/areadlinkat-tests (Makefile.am): Drop stale LDADD. * modules/dirent-safer-tests (Makefile.am): Likewise. * modules/fdopendir-tests (Makefile.am): Likewise. * modules/mkfifoat-tests (Makefile.am): Likewise. * modules/openat-safer-tests (Makefile.am): Likewise. * modules/openat-tests (Makefile.am): Likewise. * modules/readlinkat-tests (Makefile.am): Likewise. * modules/symlinkat-tests (Makefile.am): Likewise. * modules/linkat-tests (Makefile.am): Likewise. (Depends-on): Switch to filenamecat-lgpl. * modules/fdutimensat-tests (test_fdutimensat_LDADD): Drop unused LIBINTL. * modules/utimensat-tests (test_utimensat_LDADD): Likewise. * tests/test-linkat.c (main): Don't require xalloc. hash, mgetgroups: drop xalloc dependency * lib/hash.c (includes): Adjust includes. * lib/mgetgroups.c (includes): Likewise. (xgetgroups): Move... * lib/xgetgroups.c: ...to new file. * lib/mgetgroups.h (xgetgroups): Make declaration conditional. * modules/xgetgroups: New file, split from... * modules/mgetgroups: ...here. (Depends-on): Add xalloc-oversized. * modules/hash (Depends-on): Likewise. * modules/hash-tests (Depends-on): Drop xalloc. (test_hash_LDADD): Drop unused library. * tests/test-hash.c (main): Break xalloc dependency. (includes): Drop unused include. xalloc-oversized: new module * modules/xalloc-oversized: New module. * modules/xalloc (Depends-on): Add it. * lib/xalloc.h (xalloc_oversized): Move... * lib/xalloc-oversized.h: ...into new file. utimecmp: drop dependency on xmalloc * lib/utimecmp.c (utimecmp): Work even if hash table cache fails due to memory pressure. * modules/utimecmp (Depends-on): Drop xalloc. 2011-04-27 Eric Blake getcwd: fix mingw bugs * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Detect one mingw bug. * doc/posix-functions/getcwd.texi (getcwd): Document the problems. * lib/getcwd-lgpl.c (rpl_getcwd): Fix return type. 2011-04-27 Bruno Haible mkstemps: Ensure declaration on MacOS X 10.5. * lib/stdlib.in.h: Include when mkstemps is requested. * doc/glibc-functions/mkstemps.texi: Document header file problem on MacOS X. 2011-04-27 Bruno Haible mkstemp: More documentation. * doc/posix-functions/mkstemp.texi: Document header file problem on MacOS X. 2011-04-27 Bruno Haible mkstemp: Tweak configure message when cross-compiling. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): When cross-compiling, qualify the result as a guess. 2011-04-27 Bruno Haible clean-temp: Clarify what it does. * lib/clean-temp.h: Add more comments. * doc/posix-functions/mkstemp.texi: Tweak reference to 'clean-temp' module. * doc/glibc-functions/mkostemp.texi: Mention 'clean-temp' here too. * doc/glibc-functions/mkstemps.texi: Likewise. * doc/glibc-functions/mkostemps.texi: Likewise. 2011-04-27 Eric Blake fchdir: avoid extra chdir and fix test * modules/fchdir (Depends-on): Add dosname, filenamecat-lgpl, getcwd-lgpl. * lib/fchdir.c (get_name): Any absolute name will do; it does not have to be canonical. (canonicalize_file_name): Drop unused macro. * m4/dup2.m4 (gl_REPLACE_DUP2): Ensure dup2 is replaced. filenamecat-lgpl: fix licence * modules/filenamecat-lgpl (License): Mark as LGPLv2+, as intended when it was first created. linkat, renameat: add missing dependency * modules/linkat (Depends-on): Require getcwd-lgpl. * modules/renameat (Depends-on): Likewise. tests: reduce dependencies * tests/test-linkat.c (main): Use lighter-weight getcwd. * tests/test-renameat.c (main): Likewise. * modules/linkat-tests (Depends-on): Relax dependency. * modules/renameat-tests (Depends-on): Likewise. * modules/fchdir-tests (Depends-on): Likewise. Also make cloexec dependency explicit. save-cwd: reduce default dependency * modules/save-cwd (Depends-on): Use getcwd-lgpl. * lib/save-cwd.c: Update comments. * NEWS: Document the semantic change. getcwd: enhance tests * tests/test-getcwd-lgpl.c: New file, taken from... * tests/test-getcwd.c: ...old contents. Rewrite this file to repeat long path stress tests from m4 probe. * modules/getcwd-lgpl-tests: New module. * modules/getcwd-tests (Depends-on): Depend on lgpl tests. * m4/getcwd-abort-bug.m4: Update comment. * m4/getcwd-path-max.m4: Likewise. getcwd-lgpl: new module * modules/getcwd-lgpl: New module. * lib/getcwd-lgpl.c: New file. * doc/posix-functions/getcwd.texi (getcwd): Document it. * MODULES.html.sh (lacking POSIX:2008): Likewise. * modules/getcwd (configure.ac): Set C witness. * m4/getcwd.m4 (gl_FUNC_GETCWD_LGPL): New macro. getcwd: tweak comments * m4/getcwd-abort-bug.m4: Fix comments. * m4/getcwd-path-max.m4: Likewise. * m4/getcwd.m4: Likewise. 2011-04-27 Reuben Thomas and Eric Blake mkstemp: replace if system version uses wrong permissions * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Add test for non-owner read/write mode bits set in file created by mkstemp. * doc/posix-functions/mkstemp.texi (mkstemp): Document the fix. 2011-04-27 Eric Blake passfd: avoid compiler warning * lib/passfd.c (sendfd, recvfd): Avoid shadowing names. Reported by Laine Stump. 2011-04-27 J.T. Conklin (tiny change) * gnulib-tool: change "join -a 2" to "join -a2", the latter is required by the NetBSD (and perhaps other 4.4BSD derived) join. 2011-04-27 Reuben Thomas and Eric Blake mkstemp: mention clean-temp module * lib/mkstemp.c: Add comment. * doc/posix-functions/mkstemp.texi (mkstemp): Likewise. 2011-04-26 Paul Eggert inttypes: also provide default values for 32-bit tests * m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Also provide default values for INT32_MAX_LT_INTMAX_MAX and for UINT32_MAX_LT_UINTMAX_MAX. 2011-04-25 Paul Eggert strtoumax: remove dependency on strtoimax This is like the strtoull change of yesterday. * modules/strtoumax (Files): Add lib/strtoimax.c. (Depends-on): Remove strtoimax and add verify. inttypes-incomplete: new module * m4/inttypes.m4 (gl_INTTYPES_INCOMPLETE): New macro, containing all but the PRI* and SCN* parts of gl_INTTYPES_H. (gl_INTTYPES_PRI_SCN): New macro, containing the PRI* and SCN* parts of gl_INTTYPES_H. (gl_INTTYPES_H): Rewrite in terms of these new macros. (gl_INTTYPES_H_DEFAULTS): Provide defaults for the PRI* and SCN* parts, in case gl_INTTYPE_PRI_SCN is not invoked. * modules/imaxabs, modules/imaxdiv, modules/strtoimax (Depends-on): * modules/strtoumax, modules/xstrtol (Depends-on): Depend on inttypes-incomplete, not inttypes. * modules/inttypes-incomplete: New module, containing the contents of the old modules/inttypes module, except that the Files: section omits m4/inttypes-pri.m4, and the configure.ac section invokes gl_INTTYPES_INCOMPLETE rather than gl_INTTYPES_H. * modules/inttypes (Files): Remove lib/inttypes.in.h, m4/inttypes.m4. (Depends-on): Depend only on inttypes-incomplete. (Makefile.am): Remove everything; this is now in inttypes-incomplete. inttypes: omit now-redundant strtoimax and strtoumax work * m4/inttypes.m4 (gl_INTTYPES_H): Do not check for strtoimax and strtoumax decls; gl_FUNC_STRTOIMAX and gl_FUNC_STRTOUMAX now do this. strtoimax, strtoumax: simplify, port to HP-UX 11.00 64-bit This supports apps that need pointers to strtoimax and strtoumax, and ports to HP-UX 11.00 64.bit, which has macros that expand to nonexistent functions. See et seq. * lib/inttypes.in.h (strtoimax, strtoumax): #undef before declaring. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Don't check whether it's a macro. * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Likewise. 2011-04-25 Simon Josefsson * modules/gnumakefile (configure.ac): Replace TAB with SPCs. 2011-04-25 Bruno Haible strtol, strtoul: Mark modules as obsolete. * modules/strtol (Status, Notice): New sections. * modules/strtoul (Status, Notice): New sections. 2011-04-25 Bruno Haible strtod: Remove check for strtod, unless supporting old platforms. * modules/strtod-obsolete: New file. * m4/strtod-obsolete.m4: New file. * m4/strtod.m4 (gl_FUNC_STRTOD): Don't check whether strtod is declared if gl_FUNC_STRTOD_OBSOLETE is not also defined. * modules/strtod (Depends-on): Add strtod-obsolete. * doc/posix-functions/strtod.texi: Mention module strtod-obsolete. 2011-04-25 Bruno Haible strcase: Make module obsolete. * modules/strcase (Status, Notice): New sections. 2011-04-25 Bruno Haible dup2: Remove check for dup2, unless supporting old obsolete platforms. * modules/dup2-obsolete: New file. * m4/dup2-obsolete.m4: New file. * m4/dup2.m4 (gl_FUNC_DUP2): Don't check whether dup2 exists if gl_FUNC_DUP2_OBSOLETE is not also defined. * modules/dup2 (Depends-on): Add dup2-obsolete. * doc/posix-functions/dup2.texi: Mention module dup2-obsolete. 2011-04-25 Bruno Haible strnlen: Avoid memchr related link error on old obsolete platforms. * modules/memchr-obsolete: New file. * m4/memchr-obsolete.m4: New file. * m4/memchr.m4 (gl_FUNC_MEMCHR): Don't check whether memchr exists if gl_FUNC_MEMCHR_OBSOLETE is not also defined. * modules/memchr (Depends-on): Add memchr-obsolete. * modules/strnlen (Depends-on): Likewise. * doc/posix-functions/memchr.texi: Mention module memchr-obsolete. 2011-04-25 Jim Meyering maint.mk: makefile_at_at_check extend and clean up * top/maint.mk (sc_makefile_at_at_check): Check *.mk files in addition to */Makefile.am. Exempt legitimate uses of @VAR@ notation, e.g., MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ Remove obsolete coreutils-specific comment. Prompted by discussion here: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/26074 2011-04-24 Paul Eggert strtoul: remove dependency on strtol This is so that 'configure' need not check for strtol merely because the application needs strtoul. * modules/strtoul (Files): Add lib/strtol.c. (Depends-on): Remove strtol. strtoull: remove dependency on strtoul This is like the strtoll change. * modules/strtoull (Files): Add lib/strtol.c, lib/strtoul.c. (Depends-on): Remove strtoul. strtoll: remove dependency on strtol This is so that 'configure' need not check for strtol merely because the application needs strtoll. * modules/strtoll (Files): Add lib/strtol.c. (Depends-on): Remove strtol. 2011-04-22 Paul Eggert inttypes: Move some configure check to module 'imaxdiv'. * m4/imaxdiv.m4 (gl_FUNC_IMAXDIV): Require gl_INTTYPES_H_DEFAULTS instead of gl_INTTYPES_H. Check for imaxdiv decl here. * m4/inttypes.m4 (gl_INTTYPES_H): Don't check for imaxdiv decl here. 2011-04-22 Paul Eggert inttypes: Move some configure check to module 'imaxabs'. * m4/imaxabs.m4 (gl_FUNC_IMAXABS): Require gl_INTTYPES_H_DEFAULTS instead of gl_INTTYPES_H. Check for imaxabs decl here. * m4/inttypes.m4 (gl_INTTYPES_H): Don't check for imaxabs decl here. 2011-04-22 Paul Eggert inttypes: Remove configure tests that are not needed since 2009-12-31. * m4/inttypes.m4 (gl_INTTYPES_H): Remove determination of gl_cv_header_working_inttypes_h. 2011-04-22 Paul Eggert * modules/strnlen (Depends-on): Remove memchr. The strnlen implementation doesn't need the memchr module's fixes; see . strtol: remove dependency on wchar * lib/strtol.c: Include only if USE_WIDE_CHAR is defined. * modules/strtol (Depends-on): Remove wchar. 2011-04-21 Eric Blake passfd: fix test regression on Linux * modules/passfd-tests (configure.ac): Correct socketpair check. passfd: speed up configure and drop unused code * m4/afunix.m4 (gl_SOCKET_AFUNIX): Rename... * m4/passfd.m4 (gl_PASSFD): ...to something more fitting of its use. Drop test for setting unused HAVE_UNIXSOCKET_SCM_RIGHTS. Instead of probing at configure for unix_scm_rights_bsd44_way, instead probe for CMSG_FIRSTHDR at compile time. Simplify BSD 4.3 check to a struct member probe. * lib/passfd.c (includes): Nothing here requires . (sendfd, recvfd): Update preprocessor checks. * modules/passfd (Files): Reflect rename, and drop unused file. (Depends-on): Drop unused dependency. passfd: allow compilation on mingw * modules/sys_socket (Depends-on): Add sys_uio. * lib/sys_socket.in.h [!@HAVE_SYS_SOCKET_H@]: Use it for struct iovec and a minimal struct msghdr. * m4/afunix.m4 (gl_SOCKET_AFUNIX): Detect recvmsg/sendmsg. * tests/test-sys_socket.c (main): Enhance test. * lib/passfd.c (include): Drop ; is guaranteed to provide what we need. (sendmsg, recvmsg): Declare fallbacks if we lack sendmsg. * modules/passfd-tests (Depends-on): Add sys_wait. * tests/test-passfd.c (main): Skip test on mingw, for now. * doc/posix-headers/sys_socket.texi (sys/socket.h): Document the partial 'struct msghdr' implementation. sys_uio: new module * modules/sys_uio: New module. * modules/sys_uio-tests: Likewise. * lib/sys_uio.in.h: New file. * m4/sys_uio_h.m4: Likewise. * tests/test-sys_uio.c: Likewise. * doc/posix-headers/sys_uio.texi (sys/uio.h): Document it. * MODULES.html.sh (systems lacking POSIX:2008): Likewise. 2011-04-20 Jim Meyering useless-if-before-free: avoid false-positive * build-aux/useless-if-before-free: Adjust regexp for the non-brace disjunct so that it too requires a terminating ";". Without that, this script would identify as useless one statement from gcc that was not: if (aligned_ptr) free (((void **) aligned_ptr) [-1]); 2011-04-20 Giuseppe Scrivano doc: update users.txt. * users.txt: Add barcode. 2011-04-19 Bruno Haible ioctl: Remove link dependency on native Windows. * lib/fd-hook.h: Renamed from lib/close-hook.h. (gl_close_fn, gl_ioctl_fn): New types. (struct fd_hook): Renamed from struct close_hook. Change type of private_close_fn field. Add private_ioctl_fn field. (close_hook_fn): Add parameter for primary close method. (execute_close_hooks, execute_all_close_hooks): Likewise. (ioctl_hook_fn): New type. (execute_ioctl_hooks, execute_all_ioctl_hooks): New declarations. (register_fd_hook): Renamed from register_close_hook. Add ioctl_hook argument. (unregister_fd_hook): Renamed from unregister_close_hook. * lib/fd-hook.c: Renamed from lib/close-hook.c. Don't include . (close): Remove undef. (anchor): Update. (execute_close_hooks): Add argument for primary close method. (execute_all_close_hooks): Likewise. (execute_ioctl_hooks, execute_all_ioctl_hooks): New functions. (register_fd_hook): Renamed from register_close_hook. Add ioctl_hook argument. Allow each argument to be NULL. (unregister_fd_hook): Renamed from unregister_close_hook. * lib/close.c (rpl_close): Pass 'close' function pointer to execute_all_close_hooks. * lib/ioctl.c: Include , fd-hook.h. (primary_ioctl): New function. (ioctl): Don't call ioctlsocket here. Instead, call execute_all_ioctl_hooks. * lib/sockets.c (close_fd_maybe_socket): Add argument for primary close method. (ioctl_fd_maybe_socket): New function, with code from lib/ioctl.c. (fd_sockets_hook): Renamed from close_sockets_hook. (gl_sockets_startup, gl_sockets_cleanup): Update. * modules/fd-hook: Renamed from modules/close-hook. Update. * modules/close (Depends-on): Add fd-hook, remove close-hook. * modules/sockets (Depends-on): Likewise. * modules/ioctl (Depends-on): Add fd-hook. * tests/test-nonblocking.c (main): Use GNULIB_TEST_SOCKET, not GNULIB_SOCKET. 2011-04-19 Bruno Haible Move the support of O_NONBLOCK in open() to the 'open' module. * modules/nonblocking (Depends-on): Remove 'open'. * m4/nonblocking.m4 (gl_NONBLOCKING_IO_BODY): Set gl_cv_have_open_O_NONBLOCK. * m4/open.m4 (gl_FUNC_OPEN): Replace open() also when required for O_NONBLOCK support. * doc/posix-functions/open.texi: Document support for O_NONBLOCK. 2011-04-17 Bruno Haible pipe2: Simplify code. * lib/pipe2.c (pipe2): Reduce code duplication. 2011-04-17 Bruno Haible nonblocking: Add comment. * lib/fcntl.in.h (O_NONBLOCK): Add comment. 2011-04-17 Bruno Haible nonblocking: Add tests for sockets. * tests/test-nonblocking-socket.sh: New file. * tests/test-nonblocking-socket-main.c: New file. * tests/test-nonblocking-socket-child.c: New file. * tests/test-nonblocking-socket.h: New file. * tests/socket-server.h: New file. * tests/socket-client.h: New file. * modules/nonblocking-socket-tests: New file. * modules/nonblocking-tests (Depends-on): Add nonblocking-socket-tests. 2011-04-17 Bruno Haible nonblocking: Add tests for pipes. * tests/test-nonblocking-pipe.sh: New file. * tests/test-nonblocking-pipe-main.c: New file. * tests/test-nonblocking-pipe-child.c: New file. * tests/test-nonblocking-pipe.h: New file. * tests/test-nonblocking-writer.h: New file. * tests/test-nonblocking-reader.h: New file. * tests/test-nonblocking-misc.h: New file. * modules/nonblocking-pipe-tests: New file. * modules/nonblocking-tests (Depends-on): Add nonblocking-pipe-tests. 2011-04-16 Bruno Haible gettext: Clarify the needed programmer actions. * modules/gettext (Notice): New field. Suggested by Ben Pfaff . 2011-04-16 Bruno Haible strchrnul: Tweak last commit. * doc/glibc-functions/strchrnul.texi: Add more details about Cygwin bug. * lib/string.in.h (strchrnul): Use same arguments in _GL_FUNCDECL_RPL as in _GL_FUNCDECL_SYS. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Invoke gl_PREREQ_STRCHRNUL after AC_LIBOBJ. When cross-compiling, say "guessing yes" not "yes". 2011-04-15 Eric Blake strchrnul: work around cygwin bug * doc/glibc-functions/strchrnul.texi (strchrnul): Document bug. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Detect it. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): New witness. * modules/string (Makefile.am): Substitute it. * lib/string.in.h (strchrnul): Use it. 2011-04-15 Bruno Haible Don't require lib/stdio-write.c when only module 'stdio' is used. * m4/stdio_h.m4 (gl_STDIO_H): Move the AC_LIBOBJ back into the m4_ifdef invocation. Reported by Rob Vermaas . 2011-04-14 Bruno Haible Support non-blocking pipe I/O in read() on native Windows. * lib/unistd.in.h: Include also for 'read'. (read): New declaration. * lib/read.c: New file. * lib/stdio.in.h (_GL_ATTRIBUTE_FORMAT_SCANF, _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM): New macros. (fgetc, fgets, fread, fscanf, getc, getchar, gets, scanf, vfscanf, vscanf): New declarations. * lib/stdio-read.c: New file. * m4/read.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_READ, REPLACE_READ. * m4/stdio_h.m4 (gl_STDIO_H): Set GNULIB_FGETC, GNULIB_FGETS, GNULIB_FREAD, GNULIB_FSCANF, GNULIB_GETC, GNULIB_GETCHAR, GNULIB_GETS, GNULIB_SCANF, GNULIB_VFSCANF, GNULIB_VSCANF. In non-blocking I/O is desired and needs workarounds, set REPLACE_STDIO_READ_FUNCS. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_FGETC, GNULIB_FGETS, GNULIB_FREAD, GNULIB_FSCANF, GNULIB_GETC, GNULIB_GETCHAR, GNULIB_GETS, GNULIB_SCANF, GNULIB_VFSCANF, GNULIB_VSCANF, REPLACE_STDIO_READ_FUNCS. * modules/read: New file. * modules/nonblocking (Files): Add lib/stdio-read.c. * modules/unistd (Makefile.am): Substitute GNULIB_READ, REPLACE_READ. * modules/stdio (Makefile.am): Substitute GNULIB_FGETC, GNULIB_FGETS, GNULIB_FREAD, GNULIB_FSCANF, GNULIB_GETC, GNULIB_GETCHAR, GNULIB_GETS, GNULIB_SCANF, GNULIB_VFSCANF, GNULIB_VSCANF, REPLACE_STDIO_READ_FUNCS. * modules/pread (Depends-on): Add read. * modules/safe-read (Depends-on): Likewise. * tests/test-stdio-c++.cc (fgetc, fgets, fread, fscanf, getc, getchar, gets, scanf, vfscanf, vscanf): Verify signatures. * doc/posix-functions/read.texi: Mention 'nonblocking' module and problem with non-blocking pipes. * doc/posix-functions/fgetc.texi: Likewise. * doc/posix-functions/fgets.texi: Likewise. * doc/posix-functions/fread.texi: Likewise. * doc/posix-functions/fscanf.texi: Likewise. * doc/posix-functions/getc.texi: Likewise. * doc/posix-functions/getchar.texi: Likewise. * doc/posix-functions/gets.texi: Likewise. * doc/posix-functions/scanf.texi: Likewise. * doc/posix-functions/vfscanf.texi: Likewise. * doc/posix-functions/vscanf.texi: Likewise. 2011-04-14 Bruno Haible Support non-blocking pipe I/O in write() on native Windows. * lib/write.c (rpl_write): Split a write request that failed merely because the byte count was larger than the pipe buffer's size. * doc/posix-functions/write.texi: Mention the problem with large byte counts. 2011-04-14 Bruno Haible wchar: Ensure that wchar_t gets defined on uClibc. * lib/wchar.in.h: On uClibc, include . Reported by Giuseppe Scrivano . 2011-04-13 Bruno Haible safe-write, full-read: Avoid unnecessary compilation units. * modules/safe-write (Files): Add lib/safe-read.c, m4/safe-read.m4. (Depends-on): Remove safe-read. Add ssize_t. * modules/full-read (Files): Add lib/full-write.c. (Depends-on): Add full-write. 2011-04-13 Bruno Haible Support non-blocking pipe I/O and SIGPIPE in pwrite(). * modules/pwrite (Depends-on): Add 'write'. 2011-04-13 Bruno Haible Support non-blocking pipe I/O in write() on native Windows. * lib/unistd.in.h (write): Enable replacement also if GNULIB_UNISTD_H_NONBLOCKING is 1. * lib/write.c: Enable replacement also if GNULIB_NONBLOCKING. (rpl_write): When failing to write on a non-blocking pipe, change errno from ENOSPC to EAGAIN. * lib/stdio.in.h (fprintf, fputc, fputs, fwrite, printf, putc, putchar, puts, vfprintf, vprintf): Enable replacement also if GNULIB_STDIO_H_NONBLOCKING is 1. * lib/stdio-write.c: Enable replacements also if GNULIB_NONBLOCKING. (CLEAR_ERRNO, HANDLE_ENOSPC): New macros. (CLEAR_LastError, HANDLE_ERROR_NO_DATA): New macros, extracted from CALL_WITH_SIGPIPE_EMULATION. (CALL_WITH_SIGPIPE_EMULATION): Use them. * m4/nonblocking.m4: New file. * m4/write.m4 (gl_FUNC_WRITE): Enable REPLACE_WRITE also if required for non-blocking I/O support. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_UNISTD_H_NONBLOCKING. * m4/stdio_h.m4 (gl_STDIO_H): Enable REPLACE_STDIO_WRITE_FUNCS also if required for non-blocking I/O support. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_STDIO_H_NONBLOCKING. * modules/nonblocking (Files): Add m4/nonblocking.m4, lib/stdio-write.c, m4/asm-underscore.m4. (Depends-on): Add stdio, unistd. (configure.ac): Invoke gl_NONBLOCKING_IO. Define GNULIB_NONBLOCKING. Set GNULIB_STDIO_H_NONBLOCKING, GNULIB_UNISTD_H_NONBLOCKING. * modules/unistd (Makefile.am): Substitute GNULIB_UNISTD_H_NONBLOCKING. * modules/stdio (Makefile.am): Substitute GNULIB_STDIO_H_NONBLOCKING. * doc/posix-functions/fprintf.texi: Mention 'nonblocking' module and problem with non-blocking pipes. * doc/posix-functions/fputc.texi: Likewise. * doc/posix-functions/fputs.texi: Likewise. * doc/posix-functions/fwrite.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/putc.texi: Likewise. * doc/posix-functions/putchar.texi: Likewise. * doc/posix-functions/puts.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/write.texi: Likewise. 2011-04-10 Jim Meyering maint.mk: prohibit doubled words Detect them also when they're separated by a newline. There are 3 ways to customize it: - disable the test on a per file basis, as usual with rules using $(VC_LIST_EXCEPT) - replace the default doubled-word-selecting regexp (affects all files) - ignore a particular file-vs-doubled-word match I nearly used that last one to ignore the "is is" match in coreutils' NEWS file, since the text was "ls -is is ..." To do that, I would have added this line to cfg.mk: ignore_doubled_word_match_RE_ = ^NEWS:[0-9]+:is[ ]is$ but it would have ignored any "is is" match in NEWS. Low probability, but still... Instead, I changed the text, slightly: - ls -is is now consistent with ls -lis in ignoring values returned + "ls -is" is now consistent with ls -lis in ignoring values returned * top/maint.mk (prohibit_double_word_RE_): Provide default. (prohibit_doubled_word_): Define. (sc_prohibit_doubled_word): New rule. (sc_prohibit_the_the): Remove. Subsumed by the above. 2011-04-10 Jim Meyering maint: fix doubled-word typo in comment * m4/gethostname.m4: s/is is/it is/ * m4/getdomainname.m4: Likewise. 2011-04-10 Jim Meyering maint: remove doubled word: s/it it/it/ * lib/stat-time.h (get_stat_birthtime): s/it it/it/ 2011-04-10 Jim Meyering maint.mk: remove useless semicolon and backslash * top/maint.mk (sc_prohibit_empty_lines_at_EOF): Remove stray semicolon and backslash. 2011-04-10 Bruno Haible stdint test: Fix compilation failure on OSF/1 with DTK compiler. * modules/stdint-tests (Depends-on): Add wchar. 2011-04-10 Jim Meyering maint: remove doubled words in comments, e.g., s/a a/a/ * lib/strptime.c (day_of_the_week): s/the the/the/ * tests/test-chown.h (test_chown): s/a a/a/ test-chown.h: correct a cast * tests/test-chown.h (test_chown): Cast -1 to gid_t (not uid_t) when the destination is a stat.st_gid. 2011-04-09 Mats Erik Andersson (tiny change) getaddrinfo: Fix test for sa_len member. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): When testing for sa_len, include before . 2011-04-09 Paul Eggert maint: change "can not" to "cannot" * doc/posix-functions/iconv.texi (iconv): This one crossed line boundaries. 2011-04-09 Jim Meyering maint: change "a a" to "a" * tests/test-lchown.h (test_lchown): s/a a/a/ maint.mk: prohibit \ * top/maint.mk (sc_prohibit_the_the): New rule. maint: fix "the the" in comment * lib/count-one-bits.h: s/the the/the/ maint: change "can not" to "cannot" But do not change the occurrences in maintain.texi or in build-aux/po/Makefile.in.in, which I presume comes from gettext. * doc/gnulib-tool.texi: s/can not/cannot/ * doc/posix-functions/accept.texi (accept): Likewise. * doc/posix-functions/socket.texi (socket): Likewise. * lib/mbrtowc.c: Likewise. maint.mk: prohibit use of "can not" * top/maint.mk (sc_prohibit_can_not): New rule. Writing "can not" (rather than "cannot") is too common. Prohibit it. 2011-04-09 Bruno Haible careadlinkat: Guard against misuse of careadlinkatcwd. * lib/careadlinkat.c: Include . (careadlinkatcwd): Check that the fd argument is as expected. 2011-04-09 Bruno Haible careadlinkat: Use common coding style. * lib/careadlinkat.c: Move gnulib includes after system includes. 2011-04-09 Bruno Haible careadlinkat: Clarify specification. * lib/careadlinkat.h (careadlinkat): Clarify preadlinkat argument. (careadlinkatcwd): Add comment. * lib/careadlinkat.c (careadlinkat): Clarify preadlinkat argument. 2011-04-09 Bruno Haible areadlinkat: Avoid link error on many platforms. * modules/areadlinkat (Depends-on): Add areadlink. 2011-04-09 Bruno Haible allocator, careadlinkat: Fix double-inclusion guard. * lib/allocator.h: Fix double-inclusion guard. * lib/careadlinkat.h: Likewise. 2011-04-09 Bruno Haible relocatable-prog-wrapper: Update after module 'areadlink' changed. * lib/relocwrapper.c: Update dependencies hierarchy. * build-aux/install-reloc: Update list of files to be compiled. * modules/relocatable-prog-wrapper (Files): Add lib/careadlinkat.[hc], lib/allocator.[hc]. 2011-04-08 Eric Blake strftime: silence gnulib-tool warning * modules/strftime-tests (Depends-on): Drop automatic dependency. 2011-04-08 Bruno Haible verify: Fix syntax error with GCC 4.6 in C++ mode. * lib/verify.h (HAVE__STATIC_ASSERT): Don't define in C++ mode. (HAVE_STATIC_ASSERT): New macro. (verify_true, verify): Use 'static_assert' if it is supported and '_Static_assert' is not supported. 2011-04-08 Paul Eggert allocator: New module. * modules/allocator, lib/allocator.c: New files. * lib/allocator.h (stdlib_allocator): New decl. * lib/careadlinkat.c (_GL_USE_STDLIB_ALLOC, standard_allocator): Remove. Do not include . (careadlinkat): Use stdlib_allocator instead of rolling our own. * modules/careadlinkat (Files): Remove lib/allocator.h. (Depends-on): Add allocator. stdlib: let modules use system malloc, realloc * lib/stdlib.in.h (malloc, realloc): Don't #define or add warnings if !_GL_USE_STDLIB_ALLOC. (malloc, realloc): Limit this change to a smaller scope. * lib/careadlinkat.c (_GL_USE_STDLIB_ALLOC): Define. (malloc, realloc): Don't #undef; no longer needed. * lib/malloca.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/progreloc.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/setenv.c (_GL_USE_STDLIB_ALLOC, malloc, realloc): Likewise. * lib/canonicalize-lgpl.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/relocatable.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/relocwrapper.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/malloc.c (_GL_USE_STDLIB_ALLOC, malloc): Likewise. * lib/realloc.c (_GL_USE_STDLIB_ALLOC, malloc, realloc): Likewise. careadlinkat: rename members to avoid problem * lib/allocator.h (struct allocator): Rename members from malloc/realloc to allocate/reallocate, to avoid problems if malloc and realloc are #define'd. Reported by Eric Blake in . * lib/careadlinkat.c (careadlinkat): Adjust to renaming. 2011-04-08 Eric Blake nonblocking: reduce dependency * tests/test-nonblocking.c: Only test sockets when in use. * modules/nonblocking-tests (Depends-on): Drop socket. (Makefile.am): Link even if sockets are not present. * modules/pipe2-tests (Makefile.am): Likewise. * lib/ioctl.c (ioctl) [WIN32]: Fail if sockets are not also in use. pipe2: fix O_NONBLOCK support on mingw * modules/pipe2 (Depends-on): Add nonblocking. * lib/pipe2.c (pipe2) [WIN32]: Add O_NONBLOCK support. * tests/test-pipe2.c (is_nonblocking): Adjust test accordingly. * tests/test-nonblocking.c (main): Likewise. * modules/pipe2-tests (Makefile.am): Avoid link failure. fcntl-h: fix O_ACCMODE on cygwin * doc/posix-headers/fcntl.texi (fcntl.h): Document the bug. * lib/fcntl.in.h (O_ACCMODE): Fix it. pipe-filter: drop O_NONBLOCK workarounds * modules/pipe-filter-gi (Depends-on): Add fcntl-h. * modules/pipe-filter-ii (Depends-on): Likewise. * lib/pipe-filter-aux.h (O_NONBLOCK): Delete workaround. nonblocking: provide O_NONBLOCK for mingw * modules/nonblocking (Depends-on): Add open. (configure.ac): Set new witness macro. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Provide default for it. * modules/fcntl-h (Makefile.am): Substitute it. * lib/fcntl.in.h (O_NONBLOCK): Guarantee non-zero definition when nonblocking module is in use. * lib/nonblocking.c: Adjust portability test. * lib/open.c (open): Don't let native open see gnulib flag. * tests/test-fcntl-h.c (main): Enhance test. * tests/test-open.h (test_open): Likewise. * doc/posix-headers/fcntl.texi (fcntl.h): Document the replacement. careadlinkat: fix compilation error on mingw * lib/careadlinkat.c (standard_allocator): Avoid renaming fields within struct allocator. 2011-04-06 Eric Blake binary-io: relicense under LGPLv2+ * modules/binary-io (License): Relax to LGPLv2+. Requested for libvirt, and required by pipe2. 2011-04-06 Paul Eggert verify: use _Static_assert if available * lib/verify.h (HAVE__STATIC_ASSERT): New macro. (verify_true, verify): Use it if available. This generates better diagnostics with GCC 4.6.0 and later. 2011-04-05 Bruno Haible Remove leftover generated .h files after config.status changed. * m4/alloca.m4 (gl_FUNC_ALLOCA): New automake conditional GL_GENERATE_ALLOCA_H. * modules/alloca-opt (Makefile.am): Remove alloca.h if GL_GENERATE_ALLOCA_H evaluates to false. * m4/argz.m4 (gl_FUNC_ARGZ): New automake conditional GL_GENERATE_ARGZ_H. * modules/argz (Makefile.am): Remove argz.h if GL_GENERATE_ARGZ_H evaluates to false. * m4/byteswap.m4 (gl_BYTESWAP): New automake conditional GL_GENERATE_BYTESWAP_H. * modules/byteswap (Makefile.am): Remove byteswap.h if GL_GENERATE_BYTESWAP_H evaluates to false. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): New automake conditional GL_GENERATE_ERRNO_H. * modules/errno (Makefile.am): Remove errno.h if GL_GENERATE_ERRNO_H evaluates to false. * m4/float_h.m4 (gl_FLOAT_H): New automake conditional GL_GENERATE_FLOAT_H. * modules/float (Makefile.am): Remove float.h if GL_GENERATE_FLOAT_H evaluates to false. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): New automake conditional GL_GENERATE_FNMATCH_H. * modules/fnmatch (Makefile.am): Remove fnmatch.h if GL_GENERATE_FNMATCH_H evaluates to false. * m4/glob.m4 (gl_GLOB_SUBSTITUTE, gl_GLOB): New automake conditional GL_GENERATE_GLOB_H. * modules/glob (Makefile.am): Remove glob.h if GL_GENERATE_GLOB_H evaluates to false. * m4/iconv_h.m4 (gl_REPLACE_ICONV_H, gl_ICONV_H_DEFAULTS): New automake conditional GL_GENERATE_ICONV_H. * modules/iconv-h (Makefile.am): Remove iconv.h if GL_GENERATE_ICONV_H evaluates to false. * m4/netinet_in_h.m4 (gl_HEADER_NETINET_IN): New automake conditional GL_GENERATE_NETINET_IN_H. * modules/netinet_in (Makefile.am): Remove netinet/in.h if GL_GENERATE_NETINET_IN_H evaluates to false. * m4/pthread.m4 (gl_PTHREAD_CHECK): Set PTHREAD_H here. New automake conditional GL_GENERATE_PTHREAD_H. (gl_PTHREAD_DEFAULTS): Don't set PTHREAD_H here. * modules/pthread (Makefile.am): Remove pthread.h if GL_GENERATE_PTHREAD_H evaluates to false. * m4/sched_h.m4 (gl_SCHED_H): New automake conditional GL_GENERATE_SCHED_H. * modules/sched (Makefile.am): Remove sched.h if GL_GENERATE_SCHED_H evaluates to false. * m4/selinux-context-h.m4 (gl_HEADERS_SELINUX_CONTEXT_H): New automake conditional GL_GENERATE_SELINUX_CONTEXT_H. * modules/selinux-h (Makefile.am): Remove selinux/context.h if GL_GENERATE_SELINUX_CONTEXT_H evaluates to false. * m4/stdarg.m4 (gl_STDARG_H): New automake conditional GL_GENERATE_STDARG_H. * modules/stdarg (Makefile.am): Remove stdarg.h if GL_GENERATE_STDARG_H evaluates to false. * m4/stdbool.m4 (AM_STDBOOL_H): New automake conditional GL_GENERATE_STDBOOL_H. * modules/stdbool (Makefile.am): Remove stdbool.h if GL_GENERATE_STDBOOL_H evaluates to false. * m4/stddef_h.m4 (gl_STDDEF_H): Set STDDEF_H here. New automake conditional GL_GENERATE_STDDEF_H. (gl_STDDEF_H_DEFAULTS): Don't set STDDEF_H here. * modules/stddef (Makefile.am): Remove stddef.h if GL_GENERATE_STDDEF_H evaluates to false. * m4/stdint.m4 (gl_STDINT_H): New automake conditional GL_GENERATE_STDINT_H. * modules/stdint (Makefile.am): Remove stdint.h if GL_GENERATE_STDINT_H evaluates to false. * m4/sysexits.m4 (gl_SYSEXITS): New automake conditional GL_GENERATE_SYSEXITS_H. * modules/sysexits (Makefile.am): Remove sysexits.h if GL_GENERATE_SYSEXITS_H evaluates to false. Reported by Karl Berry and Ralf Wildenhues. 2011-04-05 Bruno Haible Ensure to rebuild generated .h files when config.status has changed. * modules/arpa_inet (Makefile.am): Add dependency from .h file to config.status. * modules/ctype (Makefile.am): Likewise. * modules/dirent (Makefile.am): Likewise. * modules/errno (Makefile.am): Likewise. * modules/fcntl-h (Makefile.am): Likewise. * modules/float (Makefile.am): Likewise. * modules/getopt-posix (Makefile.am): Likewise. * modules/glob (Makefile.am): Likewise. * modules/iconv-h (Makefile.am): Likewise. * modules/inttypes (Makefile.am): Likewise. * modules/langinfo (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/math (Makefile.am): Likewise. * modules/netdb (Makefile.am): Likewise. * modules/netinet_in (Makefile.am): Likewise. * modules/poll-h (Makefile.am): Likewise. * modules/pthread (Makefile.am): Likewise. * modules/pty (Makefile.am): Likewise. * modules/sched (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/selinux-h (Makefile.am): Likewise. * modules/signal (Makefile.am): Likewise. * modules/spawn (Makefile.am): Likewise. * modules/stdarg (Makefile.am): Likewise. * modules/stdbool (Makefile.am): Likewise. * modules/stddef (Makefile.am): Likewise. * modules/stdint (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/strings (Makefile.am): Likewise. * modules/sys_file (Makefile.am): Likewise. * modules/sys_ioctl (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sys_time (Makefile.am): Likewise. * modules/sys_times (Makefile.am): Likewise. * modules/sys_utsname (Makefile.am): Likewise. * modules/sys_wait (Makefile.am): Likewise. * modules/sysexits (Makefile.am): Likewise. * modules/termios (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. * modules/wctype-h (Makefile.am): Likewise. Reported by Karl Berry, Eric Blake, and Ralf Wildenhues. 2011-04-05 Bruno Haible pipe2: Relicense under LGPLv2+. * modules/pipe2 (License): Change to LGPLv2+. Requested by Eric Blake, for libvirt. 2011-04-05 Bruce Korb bootstrap: compute gnulib_extra_files after updating build_aux * build-aux/bootstrap (gnulib_extra_files): bootstrap.conf may change build_aux or also supply gnulib_extra_files. Handle correctly. 2011-04-05 Eric Blake bootstrap: preserve git whitelist item sorting * build-aux/bootstrap (sort_patterns): New function. (insert_sorted_if_absent): Use it to sink ! lines to the bottom. 2011-04-05 Simon Josefsson * top/maint.mk (sc_prohibit_empty_lines_at_EOF): Don't trigger sc_space_tab check. 2011-04-05 Paul Eggert areadlink, areadlinkat: rewrite in terms of careadlinkat * lib/areadlink.c, lib/areadlinkat.c: Include careadlinkat.h instead of errno.h, limits.h, stdint.h, stdlib.h, string.h, unistd.h. (SSIZE_MAX, INITIAL_BUF_SIZE): Remove. (malloc, realloc): Remove #undefs. (areadlink, areadlinkat): Rewrite in terms of careadlinkat. * modules/areadlink (Depends-on): Add careadlinkat. Remove readlink, ssize_t, stdint, unistd. * modules/areadlinkat (Depends-on): Add careadlinkat. Remove areadlink, stdint. careadlinkat: new module * lib/allocator.h, lib/careadlinkat.h, lib/careadlinkat.c: * modules/careadlinkat: New files, written by me with a review and feedback from Ben Pfaff in . 2011-04-01 Bruno Haible wmemchr, wcschr, wcsrchr, wcspbrk, wcsstr: Avoid errors in C++ mode. * lib/wchar.in.h (wmemchr, wcschr, wcsrchr, wcspbrk, wcsstr): Use _GL_CXXALIAS_SYS_CAST2 instead of _GL_CXXALIAS_SYS. On glibc >= 2.10 systems, use _GL_CXXALIASWARN1 instead of _GL_CXXALIASWARN. Reported by Bruce Korb . 2011-04-01 Bruno Haible wcpcpy, wcpncpy: Ensure declaration on glibc >= 2.13 systems. * m4/wcpcpy.m4 (gl_FUNC_WCPCPY): Require AC_USE_SYSTEM_EXTENSIONS. * m4/wcpncpy.m4 (gl_FUNC_WCPNCPY): Likewise. * modules/wcpcpy (Depends-on): Add extensions. * modules/wcpncpy (Depends-on): Likewise. * doc/posix-functions/wcpcpy.texi: Mention missing declaration on glibc systems. * doc/posix-functions/wcpncpy.texi: Likewise. * doc/posix-functions/wcwidth.texi: Likewise. 2011-03-31 Eric Blake nonblocking: fix mingw test failures * lib/nonblocking.c (set_nonblocking_flag): Succeed when clearing non-blocking flag on regular file. (get_nonblocking_flag): Set errno on invalid fd. * tests/test-nonblocking.c (main): Avoid test failure on directories if fchdir is not active. * modules/nonblocking-tests (Depends-on): Drop unused dependency. 2011-03-31 Bruno Haible Fix bug with gl_WARN_ON_USE_PREPARE, introduced on 2011-01-23. * m4/gnulib-common.m4 (gl_ASSERT_NO_GNULIB_POSIXCHECK): Hide the gl_WARN_ON_USE_PREPARE definition from 'aclocal'. Reported by Simon Josefsson . 2011-03-31 Bruno Haible and Eric Blake nonblocking: new module * modules/nonblocking: New module. * modules/nonblocking-tests: Likewise. * lib/nonblocking.h: New file. * lib/nonblocking.c: Likewise. * tests/test-nonblocking.c: New test. * lib/ioctl.c (ioctl) [mingw]: Update comment. 2011-03-30 Bruno Haible stdio: Avoid GCC >= 4.4 warnings when using %lld and similar on mingw. * lib/stdio.in.h (_GL_ATTRIBUTE_FORMAT_PRINTF): Use 'gnu_printf' format instead of 'printf' format for GCC >= 4.4. (_GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM): New macro. (fprintf, printf, vfprintf, vprintf): Declare with _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM when the function ends up calling the system's vfprintf() function. Reported by Daniel P. Berrange via Eric Blake. 2011-03-30 Eric Blake passfd: fix scoping bug * lib/passfd.c (sendfd, recvfd): Don't let buf go out of scope before sendmsg/recvmsg. passfd: standardize coding conventions * m4/afunix.m4 (gl_SOCKET_AFUNIX): Drop check for something that can be learned at compile time. * lib/passfd.c (MSG_CMSG_CLOEXEC): Reduce number of in-function ifdefs. (sendfd, recvfd): Follow gnulib code conventions. passfd: fix incorrect sendmsg arguments * lib/passfd.c (sendfd): Avoid uninitialized msg_flags field, and incorrect msg_controllen value. * modules/passfd-tests (Depends-on): Check for alarm. * tests/test-passfd.c (main) [HAVE_DECL_ALARM]: Avoid hanging test. Reported by Bastien ROUCARIES. 2011-03-30 Bruno Haible c-strcasestr: Relicense under LGPLv2+. * modules/c-strcasestr (License): Change to LGPLv2+. Requested by Eric Blake, for libvirt. 2011-03-30 Simon Josefsson * users.txt: Add libidn2. Fix libtasn1 link. 2011-03-30 Jim Meyering tests: readlink* ("",... fails with EINVAL on newer kernels readlink and readlinkat have typically failed with ENOENT for the invalid, empty file name, "". However, with the advent of linux-2.6.39, they fail with EINVAL. * tests/test-areadlink.h (test_areadlink): Also accept EINVAL when operating on the empty file name. * tests/test-readlink.h (test_readlink): Likewise. 2011-03-29 Bruno Haible Relicense some modules under LGPLv2+, for libidn2. * modules/array-mergesort (License): Change to LGPLv2+. * modules/c-strcaseeq (License): Likewise. * modules/striconveh (License): Likewise. * modules/striconveha (License): Likewise. * modules/uniconv/base (License): Likewise. * modules/uniconv/u8-conv-from-enc (License): Likewise. * modules/uniconv/u8-strconv-from-enc (License): Likewise. * modules/uniconv/u8-strconv-from-locale (License): Likewise. * modules/unictype/base (License): Likewise. * modules/unictype/bidiclass-of (License): Likewise. * modules/unictype/category-M (License): Likewise. * modules/unictype/category-none (License): Likewise. * modules/unictype/category-of (License): Likewise. * modules/unictype/category-test (License): Likewise. * modules/unictype/category-test-withtable (License): Likewise. * modules/unictype/combining-class (License): Likewise. * modules/unictype/joiningtype-of (License): Likewise. * modules/unictype/scripts (License): Likewise. * modules/uninorm/base (License): Likewise. * modules/uninorm/canonical-decomposition (License): Likewise. * modules/uninorm/composition (License): Likewise. * modules/uninorm/decompose-internal (License): Likewise. * modules/uninorm/decomposition-table (License): Likewise. * modules/uninorm/nfc (License): Likewise. * modules/uninorm/nfd (License): Likewise. * modules/uninorm/u32-normalize (License): Likewise. * modules/unistr/base (License): Likewise. * modules/unistr/u32-cpy (License): Likewise. * modules/unistr/u32-mbtouc-unsafe (License): Likewise. * modules/unistr/u32-to-u8 (License): Likewise. * modules/unistr/u32-uctomb (License): Likewise. * modules/unistr/u8-check (License): Likewise. * modules/unistr/u8-mblen (License): Likewise. * modules/unistr/u8-mbtouc (License): Likewise. * modules/unistr/u8-mbtouc-unsafe (License): Likewise. * modules/unistr/u8-mbtoucr (License): Likewise. * modules/unistr/u8-prev (License): Likewise. * modules/unistr/u8-strlen (License): Likewise. * modules/unistr/u8-to-u32 (License): Likewise. * modules/unistr/u8-uctomb (License): Likewise. * modules/unitypes (License): Likewise. Requested by Simon Josefsson. 2011-03-29 Simon Josefsson lib-symbol-visibility: Add a notice. * modules/lib-symbol-visibility (Notice): New field. 2011-03-29 Bruno Haible getaddrinfo: Doc fix. * doc/posix-functions/getaddrinfo.texi: Mention Windows problem in the section "fixed in Gnulib". 2011-03-28 Simon Josefsson * doc/posix-functions/getaddrinfo.texi: Drop netdb.h discussion. Reported by Bastien ROUCARIES . 2011-03-26 Bruno Haible unictype/property-byname: Reduce the number of load-time relocations. * lib/unictype/pr_byname.c: Include . (UC_PROPERTY_INDEX_*): New enumeration values. (uc_property_byname): Convert an index from the lookup table to an uc_property_t. * lib/unictype/pr_byname.gperf: Store indices instead of uc_property_t values. 2011-03-26 Bruno Haible unictype/property-byname: Allow omitted word separators and aliases. * lib/unictype/pr_byname.gperf: Add property names without word separators. Add aliases from Unicode 6.0 PropertyAliases.txt, except for 'space'. 2011-03-26 Bruno Haible unictype/joininggroup-byname: Allow hyphens, omitted word separators. * lib/unictype/joininggroup_byname.c (uc_joining_group_byname): Convert also hyphens to space. * lib/unictype/joininggroup_byname.gperf: Recognize the names also without spaces. * tests/unictype/test-joininggroup_byname.c (main): Add more tests. 2011-03-26 Bruno Haible unictype/joiningtype-byname: Recognize long names as well. * lib/unictype.in.h (uc_joiningtype_class_byname): Allow argument to be a long name. * lib/unictype/joiningtype_byname.c: Include , unictype/joiningtype_byname.h. (uc_joiningtype_class_byname): Use uc_joining_type_lookup. * lib/unictype/joiningtype_byname.gperf: New file. * modules/unictype/joiningtype-byname (Files): Add lib/unictype/joiningtype_byname.gperf. (Depends-on): Add gperf. (Makefile.am): Add rule for generating unictype/joiningtype_byname.h. * tests/unictype/test-joiningtype_byname.c (main): Test the recognition of long names. Tests for module 'unictype/joiningtype-longname'. * modules/unictype/joiningtype-longname-tests: New file. * tests/unictype/test-joiningtype_longname.c: New file. New module 'unictype/joiningtype-longname'. * lib/unictype.in.h (uc_joiningtype_class_long_name): New declaration. * lib/unictype/joiningtype_longname.c: New file. * modules/unictype/joiningtype-longname: New file. * modules/unictype/joiningtype-all (Depends-on): Add unictype/joiningtype-longname. 2011-03-26 Bruno Haible unictype/bidiclass-byname: Recognize long names as well. * lib/unictype.in.h (uc_bidi_class_byname): Allow argument to be a long name. * lib/unictype/bidi_byname.c: Include , unictype/bidi_byname.h. (uc_bidi_class_byname): Use uc_bidi_class_lookup. * lib/unictype/bidi_byname.gperf: New file. * modules/unictype/bidiclass-byname (Files): Add lib/unictype/bidi_byname.gperf. (Depends-on): Add gperf. (Makefile.am): Add rule for generating unictype/bidi_byname.h. * tests/unictype/test-bidi_byname.c (main): Test the recognition of long names. Tests for module 'unictype/bidiclass-longname'. * modules/unictype/bidiclass-longname-tests: New file. * tests/unictype/test-bidi_longname.c: New file. New module 'unictype/bidiclass-longname'. * lib/unictype.in.h (uc_bidi_class_long_name): New declaration. * lib/unictype/bidi_longname.c: New file. * modules/unictype/bidiclass-longname: New file. * modules/unictype/bidiclass-all (Depends-on): Add unictype/bidiclass-longname. 2011-03-26 Bruno Haible unictype/bidi*: Rename modules. * modules/unictype/bidiclass-all: Renamed from modules/unictype/bidicategory-all. * modules/unictype/bidiclass-name: Renamed from modules/unictype/bidiclass-name. (Description): Update. * modules/unictype/bidiclass-name-tests: Renamed from modules/unictype/bidicategory-name-tests. * modules/unictype/bidiclass-byname: Renamed from modules/unictype/bidicategory-byname. (Description): Update. * modules/unictype/bidiclass-byname-tests: Renamed from modules/unictype/bidicategory-byname-tests. * modules/unictype/bidiclass-of: Renamed from modules/unictype/bidicategory-of. (Description): Update. * modules/unictype/bidiclass-of-tests: Renamed from modules/unictype/bidicategory-of-tests. * modules/unictype/bidiclass-test: Renamed from modules/unictype/bidicategory-test. (Description): Update. * modules/unictype/bidiclass-test-tests: Renamed from modules/unictype/bidicategory-test-tests. * modules/unictype/bidicategory-all: New file, a simple redirection. * modules/unictype/bidicategory-name: Likewise. * modules/unictype/bidicategory-byname: Likewise. * modules/unictype/bidicategory-of: Likewise. * modules/unictype/bidicategory-test: Likewise. * modules/unictype/property-bidi-* (Dependencies): Update. * lib/unictype/bidi_*.c: Update comment. 2011-03-26 Bruno Haible unictype/bidi*: Rename functions, part 2. * modules/unictype/bidicategory-name (configure.ac): Update required libunistring version. * modules/unictype/bidicategory-byname (configure.ac): Likewise. 2011-03-25 Bruno Haible New module 'unictype/combining-class-all'. * modules/unictype/combining-class-all: New file. Tests for module 'unictype/combining-class-byname'. * modules/unictype/combining-class-byname-tests: New file. * tests/unictype/test-combiningclass_byname.c: New file. New module 'unictype/combining-class-byname'. * lib/unictype.in.h (uc_combining_class_byname): New declaration. * lib/unictype/combiningclass_byname.c: New file. * lib/unictype/combiningclass_byname.gperf: New file. * modules/unictype/combining-class-byname: New file. Tests for module 'unictype/combining-class-longname'. * modules/unictype/combining-class-longname-tests: New file. * tests/unictype/test-combiningclass_longname.c: New file. New module 'unictype/combining-class-longname'. * lib/unictype.in.h (uc_combining_class_long_name): New declaration. * lib/unictype/combiningclass_longname.c: New file. * modules/unictype/combining-class-longname: New file. Tests for module 'unictype/combining-class-name'. * modules/unictype/combining-class-name-tests: New file. * tests/unictype/test-combiningclass_name.c: New file. New module 'unictype/combining-class-name'. * lib/unictype.in.h (uc_combining_class_name): New declaration. * lib/unictype/combiningclass_name.c: New file. * modules/unictype/combining-class-name: New file. 2011-03-25 Bruno Haible unictype/combining-class: Rename source files. * lib/gen-uni-tables.c (main): Emit unictype/combiningclass.h instead of unictype/combining.h. * lib/unictype/combiningclass.c: Renamed from lib/unictype/combining.c. Update. * lib/unictype/combiningclass.h: Renamed from lib/unictype/combining.h. * modules/unictype/combining-class (Description): Fix. (Files, Makefile.am): Update. * tests/unictype/test-combiningclass.c: Renamed from tests/unictype/test-combining.c. * modules/unictype/combining-class-tests (Files, Makefile.am): Update. 2011-03-25 Bruno Haible unictype: Update list of canonical combining classes. * lib/unictype.in.h (UC_CCC_ATA): New enumeration value. 2011-03-25 Bruno Haible unictype/category-byname: Recognize long names as well. * lib/unictype.in.h (uc_general_category_byname): Allow argument to be a long name. * lib/unictype/categ_byname.c: Include , , unictype/categ_byname.h. (UC_CATEGORY_INDEX_*): New enumeration values. (uc_general_category_byname): Use uc_general_category_lookup and convert from index to value. * lib/unictype/categ_byname.gperf: New file. * modules/unictype/category-byname (Files): Add lib/unictype/categ_byname.gperf. (Depends-on): Add gperf. (Makefile.am): Add rule for generating unictype/categ_byname.h. * tests/unictype/test-categ_byname.c (main): Test the recognition of long names. Tests for module 'unictype/category-longname'. * modules/unictype/category-longname-tests: New file. * tests/unictype/test-categ_longname.c: New file. New module 'unictype/category-longname'. * lib/unictype.in.h (uc_general_category_long_name): New declaration. * lib/unictype/categ_longname.c: New file. * modules/unictype/category-longname: New file. * modules/unictype/category-all (Depends-on): Add it. 2011-03-25 Bruno Haible Tests for module 'unictype/category-LC'. * modules/unictype/category-LC-tests: New file. * tests/unictype/test-categ_LC.c: New file, automatically generated. New module 'unictype/category-LC'. * lib/unictype.in.h (UC_CATEGORY_MASK_LC): New enumeration value. (UC_CATEGORY_LC): New declaration. (UC_CASED_LETTER): New macro. * lib/gen-uni-tables.c (is_category_LC): New function. (output_categories): Also handle category LC. (UC_CATEGORY_MASK_LC): New enumeration value. (general_category_byname): Also handle category LC. * lib/unictype/categ_LC.c: New file. * lib/unictype/categ_LC.h: New file, automatically generated. * lib/unictype/categ_name.c (uc_general_category_name): Also handle category LC. * lib/unictype/categ_byname.c (uc_general_category_byname): Likewise. * modules/unictype/category-LC: New file. * modules/unictype/category-byname (Depends-on): Add unictype/category-LC. * modules/unictype/category-all (Depends-on): Likewise. 2011-03-25 Eric Blake xmalloc: revert yesterday's regression * lib/xmalloc.c (xrealloc): Once again forward xrealloc(NULL,0) to realloc's underlying behavior (allowing allocation of zero-size objects, especially if malloc-gnu is also in use). 2011-03-25 Reuben Thomas maint.mk: add missing version to VC-tag * top/maint.mk: git tag was missing actual tag name; add it. valgrind: do leak checking, and exit with code 1 on error (not 0) * m4/valgrind-tests.m4: Add `--error-exitcode=1 --leak-check=full' to VALGRIND. 2010-11-30 Reuben Thomas posix-modules: say what it does. * posix-modules: Add a line to the --help output saying what it does. 2011-03-24 Paul Eggert xmalloc: Do not leak if underlying realloc is C99 compatible. * lib/xmalloc.c (xrealloc): If N is zero, call 'free' directly. This avoids a leak on C99-based systems. See . 2011-03-24 Eric Blake realloc: document portability problem * doc/posix-functions/realloc.texi (realloc): Mention pitfalls of passing 0 size to realloc. 2011-03-23 Ben Walton doc: update users.txt * users.txt: Add cvsps, tmpwatch 2011-03-23 Matt Rice doc: update users.txt * users.txt: Add gdb. 2011-03-23 Jim Meyering doc: update users.txt Looking through matches up to the following URL (there are still several more pages), I found several projects that use gnulib: http://codesearch.google.com/codesearch?start=50&q=gnulib-cache\.m4 * users.txt: Add nagios plugins (nagiosplug), acct, gengetopt, gmediaserver, gtkreindeer, jugtail, libunistring, mini-httpd, reindeer. 2011-03-22 Bruno Haible unictype/bidi*: Rename functions. * lib/unictype.in.h (uc_bidi_class_name, uc_bidi_class_byname, uc_bidi_class, uc_is_bidi_class): New declarations. * lib/unictype/bidi_byname.c (uc_bidi_class_byname): Renamed from uc_bidi_category_byname. (uc_bidi_category_byname): New function. * lib/unictype/bidi_name.c (u_bidi_class_name): Renamed from u_bidi_category_name. (uc_bidi_class_name): Renamed from uc_bidi_category_name. (uc_bidi_category_name): New function. * lib/unictype/bidi_of.c (uc_bidi_class): Renamed from uc_bidi_category. (uc_bidi_category): New function. * lib/unictype/bidi_test.c (uc_is_bidi_class): Renamed from uc_is_bidi_category. Invoke uc_bidi_class. (uc_is_bidi_category): New function. * tests/unictype/test-bidi_byname.c (main): Test uc_bidi_class_byname instead of uc_bidi_category_byname. * tests/unictype/test-bidi_name.c (main): Test uc_bidi_class_name instead of uc_bidi_category_name. * tests/unictype/test-bidi_of.c (main): Test uc_bidi_class instead of uc_bidi_category. * tests/unictype/test-bidi_test.c (main): Test uc_is_bidi_class instead of uc_is_bidi_category. 2011-03-21 Bruno Haible New module 'unictype/joininggroup-all'. * modules/unictype/joininggroup-all: New file. Tests for module 'unictype/joininggroup-of'. * modules/unictype/joininggroup-of-tests: New file. * tests/unictype/test-joininggroup_of.c: New file. * tests/unictype/test-joininggroup_of.h: New file, automatically generated by gen-uni-tables. New module 'unictype/joininggroup-of'. * modules/unictype/joininggroup-of: New file. * lib/unictype/joininggroup_of.c: New file. * lib/unictype/joininggroup_of.h: New file, automatically generated by gen-uni-tables. Tests for module 'unictype/joininggroup-byname'. * modules/unictype/joininggroup-byname-tests: New file. * tests/unictype/test-joininggroup_byname.c: New file. New module 'unictype/joininggroup-byname'. * modules/unictype/joininggroup-byname: New file. * lib/unictype/joininggroup_byname.c: New file. * lib/unictype/joininggroup_byname.gperf: New file. Tests for module 'unictype/joininggroup-name'. * modules/unictype/joininggroup-name-tests: New file. * tests/unictype/test-joininggroup_name.c: New file. New module 'unictype/joininggroup-name'. * modules/unictype/joininggroup-name: New file. * lib/unictype/joininggroup_name.c: New file. * lib/unictype/joininggroup_name.h: New file. New module 'unictype/joiningtype-all'. * modules/unictype/joiningtype-all: New file. Tests for module 'unictype/joiningtype-of'. * modules/unictype/joiningtype-of-tests: New file. * tests/unictype/test-joiningtype_of.c: New file. * tests/unictype/test-joiningtype_of.h: New file, automatically generated by gen-uni-tables. New module 'unictype/joiningtype-of'. * modules/unictype/joiningtype-of: New file. * lib/unictype/joiningtype_of.c: New file. * lib/unictype/joiningtype_of.h: New file, automatically generated by gen-uni-tables. Tests for module 'unictype/joiningtype-byname'. * modules/unictype/joiningtype-byname-tests: New file. * tests/unictype/test-joiningtype_byname.c: New file. New module 'unictype/joiningtype-byname'. * modules/unictype/joiningtype-byname: New file. * lib/unictype/joiningtype_byname.c: New file. Tests for module 'unictype/joiningtype-name'. * modules/unictype/joiningtype-name-tests: New file. * tests/unictype/test-joiningtype_name.c: New file. New module 'unictype/joiningtype-name'. * modules/unictype/joiningtype-name: New file. * lib/unictype/joiningtype_name.c: New file. unictype: Add support for Arabic shaping properties. * lib/unictype.in.h (UC_JOINING_TYPE_*): New enumeration values. (uc_joining_type_name, uc_joining_type_byname, uc_joining_type): New declarations. (UC_JOINING_GROUP_*): New enumeration values. (uc_joining_group_name, uc_joining_group_byname, uc_joining_group): New declarations. * lib/gen-uni-tables.c (UC_JOINING_TYPE_*): New enumeration values. (unicode_joining_type): New variable. (UC_JOINING_GROUP_*): New enumeration values. (unicode_joining_group): New variable. (fill_arabicshaping, joining_type_as_c_identifier, output_joining_type_test, output_joining_type, joining_group_as_c_identifier, output_joining_group_test, output_joining_group): New functions. (main); Add an argument denoting the ArabicShaping.txt file. Invoke fill_arabicshaping and output_joining_type_test, output_joining_type, output_joining_group_test, output_joining_group. Reported by Simon Josefsson. 2011-03-21 Jim Meyering strftime: fix a bug in yesterday's change * lib/strftime.c (add): Accommodate width's initial value of -1. Otherwise, nstrftime would copy uninitialized data into the result buffer. 2011-03-21 Jim Meyering tests: add strftime-tests module * tests/test-strftime.c: New file. * modules/strftime-tests: New module. 2011-03-20 Paul Eggert strftime: don't assume a byte count fits in 'int' * lib/strftime.c (add): Don't assume first arg fits in 'int'. I found this problem by static analysis, using gcc -Wstrict-overflow (GCC 4.5.2, x86-64). This reported an optimization that depended on an integer overflow having undefined behavior, but it turns out that the argument is a size, which might not fit in 'int' anyway, 2011-03-20 Paul Eggert stdio: don't require ignore_value around fwrite This patch works around libc bug 11959 . Without this patch, applications must often write ignore_value (fwrite (...)) even though the ignore_value is not helpful here. It's common to write many objects, using fwrite/printf/etc., and then use ferror to detect output error. I considered making this patch optional, but decided against it, because libc is obviously being inconsistent here: there is no reason libc should insist that user code must inspect fwrite return's value without also insisting that it inspect printf's, putchar's, etc. If user code wants to have a strict style where all these functions' values are checked (so that ferror need not be checked), we could add support for that style in a new gnulib module, but in the meantime it's better to be consistent and to support common usage. * lib/stdio.in.h (rpl_fwrite): Define this wrapper around fwrite, to work around libc bug 11959, if __USE_FORTIFY_LEVEL indicates that we are compiling in checking mode, and if not C++, and if not already wrapping fwrite for some other reason. (fwrite): #define to rpl_fwrite if the latter is defined. 2011-03-20 Bruno Haible verror: Fix compilation error introduced on 2011-02-13. * lib/verror.h (verror, verror_at_line): Use _GL_ATTRIBUTE_FORMAT macro instead of __attribute__. Reported by Tom G. Christensen . 2011-03-20 Paul Eggert Bruno Haible socklen: do not depend on sys_socket While trying to modify Emacs to use gnulib's socklen module, I discovered a circular dependency: socklen depends on sys_socket and vice versa. Emacs can use socklen, but it does not need sys_socket because it has its own substitute for sys/socket.h. * m4/socklen.m4 (gl_SOCKET_HEADERS): New macro, extracted from gl_TYPE_SOCKLEN_T. (gl_CHECK_SOCKET_HEADERS): New macro, taken from parts of gl_PREREQ_SYS_H_SOCKET. (gl_TYPE_SOCKLEN_T): Require it instead of requiring gl_PREREQ_SYS_H_SOCKET. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_SOCKET): Require gl_CHECK_SOCKET_HEADERS instead of doing its work ourselves. * modules/socklen (Depends-on): Do not depend on sys_socket. (Include): Adjust to match the code used in gl_SOCKET_HEADERS. 2011-03-20 Jim Meyering maint.mk: sort file names *after* new transformation * top/maint.mk (sc_po_check): Sorting before removing the $(srcdir)/ prefix would have led to an unwarranted failure in GNU parted. Sort after that transformation. 2011-03-19 Jim Meyering maint.mk: fix po-file syntax-check rule * top/maint.mk (sc_po_check): Fix fatal typo in yesterday's change. Patch by Bruno Haible. 2011-03-19 Bruno Haible socklen: Update comment. * m4/socklen.m4: Update comment about platforms. 2011-03-19 Paul Eggert Bruno Haible inet_ntop, inet_pton: Simplify. * modules/inet_ntop (Depends-on): Remove socklen, since sys_socket is documented to provide socklen_t and we already depend on sys_socket. * modules/inet_pton (Depends-on): Likewise. * lib/arpa_inet.in.h: Adjust comment. 2011-03-19 Paul Eggert Bruno Haible netdb: Simplify. * modules/netdb (Depends-on): Remove socklen, since sys_socket is documented to provide socklen_t and we already depend on sys_socket. * lib/netdb.in.h: Adjust comment. 2011-03-19 Bruno Haible sys_socket, netdb: Document problem with socklen_t. * doc/posix-headers/sys_socket.texi: Mention lack of socklen_t on some platforms. * doc/posix-headers/netdb.texi: Likewise. 2011-03-18 Eric Blake maint.mk: let po check work in VPATH build * top/maint.mk (po_file): Allow cfg.mk override. (sc_po_check): Allow VPATH use. Reported by Jiri Denemark. 2011-03-16 Jim Meyering maint.mk: allow fine-grained syntax-check exclusion via Make variables Before, you would have had to create one .x-sc_ file per rule in order to exempt offending files. Now, you may instead use a Make variable -- usually defined in cfg.mk -- whose name identifies the affected rule. * top/maint.mk (_sc_excl): Define. (VC_LIST_EXCEPT): Use it to exclude names on a per-rule basis. (_sc_search_regexp): When not using VC_LIST_EXCEPT, exclude here, too. 2011-03-13 Bruno Haible ignore-value tests: Avoid warnings. * tests/test-ignore-value.c (_GL_ATTRIBUTE_RETURN_CHECK): Define to empty for gcc < 3.4. 2011-03-13 Bruno Haible passfd: Fix link error on Solaris. * modules/passfd (Description): Correct. (Depends-on): Add socketlib. (Link): New section. * modules/passfd-tests (Makefile.am): Link test-passfd with LIBSOCKET. 2011-03-13 Bruno Haible passfd: Fix link error on AIX 5.2. * m4/afunix.m4 (gl_SOCKET_AFUNIX): Define _LINUX_SOURCE_COMPAT. 2011-03-13 Bruno Haible passfd: Work around bug with CMSG_FIRSTHDR on FreeBSD 6.4. * lib/sys_socket.in.h: Include . * m4/afunix.m4 (gl_SOCKET_AFUNIX): Include before using CMSG_FIRSTHDR. Remove unused variable. 2011-03-13 Bruno Haible passfd: Fix compilation error on OpenBSD. * lib/passfd.c: Include . 2011-03-13 Bruno Haible passfd test: Fix warnings. * tests/test-passfd.c: Include . (main): Fix typo. 2011-03-13 Bruno Haible passfd module, part 4, tweaks. * tests/test-passfd.c: Reorder includes. (main): Fix perror and printf calls. 2011-03-07 Bastien Roucariès passfd module, part 4. * modules/passfd-tests: New file. * tests/test-passfd.c: New file. 2011-03-13 Jim Meyering Makefile: rely on GNU make; derive syntax-check rule names Rather than requiring that each sc_ rule be listed as a dependent of "check", use features of GNU make to derive the list. * Makefile (syntax-check-rules): Define. (check): Depend on the new variable, not the hard-coded list. 2011-03-13 Bastien Roucariès Bruno Haible passfd module, part 3. * lib/passfd.h (recvfd): Add a flags argument. * lib/passfd.c: Include , cloexec.h. (recvfd): Add a flags argument. * m4/afunix.m4 (gl_SOCKET_AFUNIX): Test whether MSG_CMSG_CLOEXEC exists. * modules/passfd (Depends-on): Add cloexec. Suggested by Eric Blake. 2011-03-13 Bruno Haible passfd module, part 2, tweaks. * modules/passfd (Files): Reorder. (Depends-on): Remove errno. (Include): Remove , . * lib/passfd.h: Use a GPLv3+ header. Make C++ safe. * lib/passfd.c: Untabify. Use a GPLv3+ header. Really include the specification header. Include always. Don't include . Use "#if HAVE_..." instead of "#ifdef HAVE_...". (sendfd): Clarify that it sets errno when it fails. (recvfd): Fix specification. 2011-03-07 Bastien Roucariès passfd module, part 2. * modules/passfd: New file. * lib/passfd.h: New file. * lib/passfd.c: New file. 2011-03-12 Bruno Haible wcswidth, mbswidth: Avoid integer overflow. * lib/wcswidth.c: Include . * lib/wcswidth-impl.h (wcswidth): Avoid 'int' overflow. * lib/mbswidth.c: Include . (mbsnwidth): Avoid 'int' overflow. Reported by Jim Meyering. 2011-03-12 Bruno Haible futimens, utimensat: Avoid endless recursion on Solaris 10. * lib/sys_stat.in.h (futimens, utimensat): Define with rpl_ prefix on Solaris. Reported by Ben Walton via Eric Blake in . 2011-03-11 Jim Meyering maint.mk: relax a regexp to accommodate other formatting styles * top/maint.mk (sc_unmarked_diagnostics): Allow 0 or 1 space between "ngettext" and the following "(". 2011-03-11 Pádraig Brady maint.mk: suppress a false positive warning * top/maint.mk ((sc_unmarked_diagnostics): Don't warn when diagnostics are marked with ngettext. 2011-03-10 Eric Blake wchar: add explicit dependencies, for Tru64 * modules/mbmemcasecoll (Depends-on): Add wchar. * modules/mbtowc (Depends-on): Likewise. * modules/vasnprintf (Depends-on): Likewise. * modules/unistdio/u-printf-args (Depends-on): Likewise. * modules/wctomb (Depends-on): Likewise. Reported by Peter O'Gorman. 2011-03-08 Bruno Haible passfd module, part 1, tweaks. * m4/afunix.m4 (gl_SOCKET_AFUNIX): Update AC_REQUIRE invocation. Improve indentation. Improve AC_MSG_CHECKING messages. * m4/sockpfaf.m4 (gl_SOCKET_FAMILY_UNIX): New macro, extracted from gl_SOCKET_FAMILIES. 2011-03-07 Bastien Roucariès passfd module, part 1. * m4/afunix.m4: New file. * m4/sockpfaf.m4 (gl_SOCKET_FAMILIES): Also test for UNIX domain sockets. 2011-03-08 Bruno Haible regex-quote: New API. * lib/regex-quote.h: Include . (struct regex_quote_spec): New type. (regex_quote_spec_posix, regex_quote_spec_gnu, regex_quote_spec_pcre): New declarations. (regex_quote_length, regex_quote_copy, regex_quote): Take a 'const struct regex_quote_spec *' argument. * lib/regex-quote.c (RE_*, PCRE_*): New macros. (pcre_special): New constant. (regex_quote_spec_posix, regex_quote_spec_gnu, regex_quote_spec_pcre): New functions. (regex_quote_length, regex_quote_copy, regex_quote): Take a 'const struct regex_quote_spec *' argument. * modules/regex-quote (Depends-on): Add stdbool. * tests/test-regex-quote.c (check): Update for new API. Add test for anchored results. * NEWS: Mention the API change. Reported by Reuben Thomas and Eric Blake. 2011-03-06 Bruno Haible regex-quote: Fix creation of POSIX extended regular expressions. * lib/regex-quote.c (ere_special): Add grouping and alternation operators. 2011-03-05 Bruno Haible doc: Improve doc regarding autopoint vs. gnulib. * doc/gnulib-tool.texi (gettextize and autopoint): Recommend to disable autopoint while running autoreconf. Suggested by Ralf Wildenhues. 2011-03-05 Ralf Wildenhues Update AC_OPENMP macro for Lahey compiler on GNU/Linux. * m4/openmp.m4 (AC_OPENMP): Sync from Autoconf. 2011-03-03 Bruce Korb parse-duration: remove xalloc.h dependency * lib/parse-duration.c (parse_period): handle NULL return from strdup instead of calling xstrdup(). * modules/parse-duration: remove "xalloc" dependency 2011-03-03 Matthew Booth bootstrap: honor m4_base when running aclocal * build-aux/bootstrap: Fix hard-coded use of m4 directory name. 2011-03-02 Jim Meyering getopt-gnu: relax license from LGPLv3+ to LGPLv2+ * modules/getopt-gnu (License): Relax to LGPLv2+, for augeas, on request from Matt Booth. 2011-03-01 Eric Blake test-link: work on Hurd * tests/test-link.h (test_link): Hurd rejects linking directories with EISDIR instead of the POSIX-mandated EPERM. 2011-02-28 Paul Eggert stdio: simplify by moving files to printf-posix, sigpipe * m4/stdio_h.m4 (gl_STDIO_H): Do not require gl_ASM_SYMBOL_PREFIX, since this symbol is needed only if printf is replaced. * m4/printf-posix-rpl.m4 (gl_REPLACE_PRINTF): Require gl_ASM_SYMBOL_PREFIX. * modules/printf-posix (Files): Add m4/asm-underscore.m4. * modules/sigpipe (Files): Likewise. Also, add m4/stdio-write.c. (Depends-on): Add 'raise'. (configure.ac): Require gl_ASM_SYMBOL_PREFIX. * modules/stdio (Files): Remove lib/stdio-write.c, m4/asm-underscore.m4. (Depends-on): Remove 'raise'. stdio: simplify by moving gl_STDIN_LARGE_OFFSET to fseeko, ftello * m4/fseeko.m4 (gl_STDIN_LARGE_OFFSET): Moved here, from ... * m4/stdio_h.m4 (gl_STDIN_LARGE_OFFSET): ... here, because * modules/ftello (Files): Add m4/fseeko.m4, for gl_STDIN_LARGE_OFFSET. 2011-02-28 Bruno Haible localcharset: Assume ANSI C behaviour of free(). * lib/localcharset.c (get_charset_aliases): Remove NULL test before calling free(). Suggested by Simon Josefsson . 2011-02-28 Corinna Vinschen (tiny change) Charles Wilson (tiny change) Bruno Haible (tiny change) On Cygwin, use /proc file system instead of win32 API. * lib/relocatable.c: On Cygwin, use file names from /proc, rather than Win32 file names. (DllMain): Simplify by removing Cygwin specific code. (find_shared_library_fullname): Use Linux specific implementation also for Cygwin. (get_shared_library_fullname): Update accordingly. * lib/progreloc.c: On Cygwin, use file names from /proc, rather than Win32 file names. (find_executable): On Cygwin, use /proc, like on Linux. Remove previous Cygwin specific code. 2011-02-28 Christian Rössel (tiny change) Markus Geimer (tiny change) Fix OpenMP flag detection for various Fortran compilers. * m4/openmp.m4 (_AC_LANG_OPENMP(Fortran 77)): Use '!$' OpenMP-conditional compilation construct, to force compile failure with missing OpenMP flag. (AC_OPENMP): Add flags for Cray CCE and NEC SX compilers. 2011-02-25 Eric Blake strstr: expand test coverage * tests/test-strstr.c (main): Add much shorter trigger. Fix C89 compilation. * tests/test-memmem.c (main): Duplicate tests. * tests/test-strcasestr.c (main): Likewise. * tests/test-c-strcasestr.c (main): Likewise. 2011-02-25 Jim Meyering maint.mk: detect missing-NL-at-EOF, too * top/maint.mk (sc_prohibit_empty_lines_at_EOF): Adjust so that it also detects when a file lacks a newline at EOF. (require_exactly_one_NL_at_EOF_): Renamed from detect_empty_lines_at_EOF_. I opted not to rename the rule, since people may well have .x-sc_... file names tied to the existing name. Suggested by Eric Blake. 2011-02-25 Paul Eggert dirname: move m4/dos.m4 functionality into lib/dosname.h m4/dos.m4 needs to go. It laboriously invokes the C compiler, and extracts symbols from it, puts them into config.h; but it's much easier to use the symbols directly. filename.h already does this, but it disagrees with dos.m4 in some respects. This patch introduces a different include file dosname.h that packages up dos.m4, and then later we can work on merging filename.h and dosname.h. Applications that need only the easy-to-configure symbols should consider including dosname.h rather than dirname.h. * NEWS: Mention incompatible changes. * m4/dos.m4: Remove. * lib/dosname.h, modules/dosname: New files. * lib/dirname.h (ISSLASH, FILE_SYSTEM_PREFIX_LEN): (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE): (IS_ABSOLUTE_FILE_NAME, IS_RELATIVE_FILE_NAME): Move to lib/dosname.h. * lib/at-func.c, lib/at-func2.c, lib/openat.c, lib/savewd.c: Include dosname.h, not dirname.h. * lib/rmdir.c, lib/stat.c, lib/unlink.c, lib/unlinkat.c: Include dosname.h, for definitions of symbols like ISSLASH that used to be in config.h. * m4/dirname.m4 (gl_DIRNAME_LGPL): Do not require gl_AC_DOS. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * modules/dirname-lgpl (Files): Omit m4/dos.m4. * modules/rmdir (Files): Likewise. * modules/stat (Files): Likewise. * modules/unlink (Files): Likewise. * modules/dirname-lgpl (Depends-on): Add dosname. * modules/lstat (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/rmdir (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * modules/stat (Depends-on): Likewise. * modules/unlink (Depends-on): Likewise. * modules/openat (Depends-on): Remove dirname-lgpl. * modules/savewd (Depends-on): Likewise. * tests/test-dirname.c: Do not use removed symbols like FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR. Instead, use the remaining symbols, e.g., ISSLASH ('\\'). 2011-02-25 Eric Blake strstr: revert patches that introduced bug and pessimization * lib/str-two-way.h: Add another reference. (two_way_short_needle, two_way_long_needle): Revert changes from 2011-02-24; they pessimize search speed. (critical_factorization): Partially revert changes from 2010-06-22; they violate the requirement that the left half of the needle be smaller than the period of the needle. 2011-02-24 Paul Eggert filenamecat: remove unnecessary dependency on dirname-lgpl * modules/filenamecat (Depends-on): Remove dirname-lgpl, as there is no direct dependency, just an indirect one via filenamecat-lgpl. remove: remove unnecessary use of m4/dos.m4 * m4/remove.m4 (gl_FUNC_REMOVE): Don't require gl_AC_DOS; not needed. * modules/remove (FILES): Remove m4/dos.m4. * lib/openat-proc.c: Don't include dirname.h; not needed. backupfile: remove unnecessary use of m4/dos.m4 * m4/backupfile.m4 (gl_BACKUPFILE): Don't require gl_AC_DOS; none of its symbols are used by the backupfile code. backupfile.c does use a symbol HAVE_DOS_FILE_NAMES, but that symbol is meant only for the rare case of programs that want all their backup file names to live within 8+3 limits, and dos.m4 doesn't address that. * modules/backupfile (Files): Remove m4/dos.m4. 2011-02-24 Jim Meyering strstr: fix a bug whereby strstr would mistakenly return NULL * lib/str-two-way.h (two_way_short_needle): Correct off-by-one error in period calculation. (two_way_long_needle): Likewise. The original problem was reported by Mike Stump in http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/7834 Ralf Wildenhues provided the short needle and haystack. * tests/test-strstr.c: Add Ralf's test case to trigger the bug. Add a more involved test to trigger the bug in two_way_long_needle. 2011-02-24 Stefano Lattarini (tiny change) gnulib-tool: remove use of bold display in help screen * gnulib-tool (func_usage): Do not use bold display anymore in the help screen. That was just meant to be a temporary emphasis for a backward-incompatible change. 2011-02-23 Bruno Haible Fix misindentation of preprocessor directives. * lib/argp-namefrob.h: Reindent preprocessor directives. * lib/getopt_int.h (struct _getopt_data): Likewise. * lib/progreloc.c (maybe_executable, find_executable): Likewise. * lib/vasnprintf.c (decode_long_double): Likewise. * tests/test-argmatch.c: Insert blank lines, for clarity. * tests/test-exclude.c: Likewise. 2011-02-22 Bruno Haible ioctl: Fix for MacOS X in 64-bit mode. * lib/ioctl.c (rpl_ioctl): Zero-extend, not sign-extend, the request value. Suggested by Eric Blake. Reported by Markus Gothe . 2011-02-22 Jim Meyering maint: sc_cpp_indent_check: remove the "only in lib/" restriction * Makefile (sc_cpp_indent_check): Don't limit the check to files in lib/. 2011-02-22 Eric Blake maint: avoid any CDPATH issue * Makefile (sc_cpp_indent_check): Anchor cd argument. maint: adjust cpp indentation for my modules, as well * Makefile (sc_cpp_indent_check): Add my name. * lib/fbufmode.c: Filter through cppi. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freading.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. * lib/sigaction.c: Likewise. 2011-02-22 Jim Meyering maint: adjust cpp indentation to reflect nesting depth I.e., in a block of code that begins with an unnested "#if", put one space between the "#" in column 1 and following token. For example, -#include +# include Do this only in .c files that are part of a module I maintain. * lib/linkat.c: Filter through cppi. * lib/nanosleep.c: Likewise. * lib/openat.c: Likewise. * lib/openat-die.c: Likewise. * lib/dup3.c: Likewise. * lib/fchownat.c: Likewise. * lib/flock.c: Likewise. * lib/fsync.c: Likewise. * lib/fts.c: Likewise. * lib/getpass.c: Likewise. * lib/gettimeofday.c: Likewise. * lib/userspec.c: Likewise. * Makefile (sc_cpp_indent_check): New rule, to check this. 2011-02-22 Bruno Haible New module 'wctomb'. * lib/stdlib.in.h (wctomb): New declaration. * lib/wctomb.c: New file. * lib/wctomb-impl.h: New file. * m4/wctomb.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_WCTOMB, REPLACE_WCTOMB. * modules/stdlib (Makefile.am): Substitute GNULIB_WCTOMB, REPLACE_WCTOMB. * modules/wctomb: New file. * tests/test-stdlib-c++.cc: Test signature of wctomb. * doc/posix-functions/wctomb.texi: Mention the new module. * modules/wctob (Depends-on): Add wctomb. 2011-02-22 Bruno Haible New module 'mbtowc'. * lib/stdlib.in.h (mbtowc): New declaration. * lib/mbtowc.c: New file. * lib/mbtowc-impl.h: New file, from libutf8 with modifications. * m4/mbtowc.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_MBTOWC, REPLACE_MBTOWC. * modules/stdlib (Makefile.am): Substitute GNULIB_MBTOWC, REPLACE_MBTOWC. * modules/mbtowc: New file. * tests/test-stdlib-c++.cc: Test signature of mbtowc. * doc/posix-functions/mbtowc.texi: Mention the new module. * modules/btowc (Depends-on): Add mbtowc. 2011-02-22 Bruno Haible wcrtomb: Add more tests for native Windows platforms. * tests/test-wcrtomb-w32-1.sh: New file. * tests/test-wcrtomb-w32-2.sh: New file. * tests/test-wcrtomb-w32-3.sh: New file. * tests/test-wcrtomb-w32-4.sh: New file. * tests/test-wcrtomb-w32-5.sh: New file. * tests/test-wcrtomb-w32.c: New file. * modules/wcrtomb-tests (Files): Add them. (Makefile.am): Arrange to run these tests. * tests/test-wcrtomb-w32-6.sh: New file, currently unused. * tests/test-wcrtomb-w32-7.sh: New file, currently unused. 2011-02-20 Bruno Haible wcrtomb: Enhance test. * tests/test-wcrtomb.c (main): Add test against bug with NULL argument. 2011-02-20 Bruno Haible mbrtowc: Tiny optimization. * lib/mbrtowc.c (mbrtowc): Delay pstate assignment until it is needed. 2011-02-20 Jim Meyering test-exclude.c: remove unmatched #endif * tests/test-exclude.c: Remove stray #endif, left over from the change of a week ago. 2011-02-19 Jim Meyering git-version-gen: skip "-dirty" check when appropriate * build-aux/git-version-gen: Don't run any git commands when the version string comes from .tarball-version. Prior to this, we would run git update-index --refresh even from a just-unpacked tarball directory, and that could affect a .git/ directory in a parent of the build directory. Reported by Mike Frysinger. 2011-02-19 Bruno Haible unictype/property-byname: Reduce the size of the 'data' segment. * lib/unictype/pr_byname.gperf: Add gperf option '%pic'. 2011-02-19 Bruno Haible unictype/scripts: Reduce the size of the 'data' segment. * lib/gen-uni-tables.c (output_scripts_byname): Emit gperf option '%pic'. * lib/unictype/scripts_byname.gperf: Regenerated. 2011-02-19 Bruno Haible stdint: Update documentation. * doc/posix-headers/stdint.texi: Mention WCHAR_MIN, WCHAR_MAX problem. 2011-02-18 Paul Eggert stdint: omit redundant check for wchar.h * m4/stdint.m4 (gl_STDINT_H): The earlier part of this macro now always tests whether wchar.h exists, so remove the now-redundant test. 2011-02-18 Bruno Haible stdint: Cut dependency to module 'wchar'. * lib/stdint.in.h: Include wchar.h only when HAVE_WCHAR_H is 1. Also include the necessary prerequisites. * m4/stdint.m4 (gl_STDINT_H): Test whether wchar.h exists. * modules/stdint (Depends-on): Remove wchar. (Makefile.am): Substitute HAVE_WCHAR_H. This reverts part of a 2007-01-06 commit. Reported by Paul Eggert. 2011-02-18 Eric Blake longlong: skip, rather than fail, on cross-compilation * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Avoid aborting configure when cross-compiling; regression from 2011-02-16. 2011-02-17 Paul Eggert * NEWS: Mention 2011-02-08 change to stdlib. 2011-02-17 Bruno Haible getloadavg: Add comments about platforms. * m4/getloadavg.m4: Add comment. * lib/getloadavg.c: Likewise. 2011-02-17 Bruno Haible getloadavg: Fix link error on Solaris 2.6. * modules/getloadavg (Link): New section. * modules/getloadavg-tests (Makefile.am): Use GETLOADAVG_LIBS for linking test-getloadavg. * doc/glibc-functions/getloadavg.texi: Mention that Solaris 2.6 lacks getloadavg. 2011-02-17 Paul Eggert * lib/getloadavg.c (getloadavg) [sgi]: Make ldav_off of type ptrdiff_t. It was 'int', but this doesn't match the IRIX 6.5 manual. Suggested by Bruno Haible in . 2011-02-17 Bruno Haible havelib: Fix comments. * m4/lib-link.m4 (AC_LIB_RPATH): Update comments after 2007-01-02 change. 2011-02-17 Bruno Haible havelib: Update config.rpath. * build-aux/config.rpath: Update to match libtool.m4 from libtool-2.4. 2011-02-17 Bruno Haible getloadavg test: Add some plausibility checks. * tests/test-getloadavg.c (check_avg): Print a warning when the value is improbable. 2011-02-16 Eric Blake maintainer-makefile: make syntax-check a no-op from tarballs * top/maint.mk (no-vc-detected): New rule. (local-checks-available): Use it to avoid hanging if someone tries 'make syntax-check' from a tarball. Also append to any non-syntax checks already defined in cfg.mk. 2011-02-16 Paul Eggert longlong: tune, particularly for common case of c99 * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Don't bother compiling or running anything if c99, or if unsigned long long int does not work. In either case, we know the answer without further tests. Do not compile _AC_TYPE_LONG_LONG_SNIPPET twice. Instead, compile it at most once, and use its results for both long long int and unsigned long long int. This is more likely to be efficient in the common case where the program wants to check for both long long int and unsigned long long int. (AC_TYPE_UNSIGNED_LONG_LONG_INT): Don't bother compiling if c99, since the answer is already known. 2011-02-15 Paul Eggert getloadavg: set errno * lib/getloadavg.c: Set errno when returning -1. If no other error number looks appropriate, set it to ENOSYS if the getloadavg looks like it can't possibly ever work, ENOTSUP otherwise. Suggested by Bruno Haible in . getloadavg: trim unused parts and speed up 'configure' * NEWS: Document this. * lib/getloadavg.c: Ignore HAVE_GETLOADAVG; this file is now always compiled if getloadavg is absent. Move test code to ... * tests/test-getloadavg.c: New file, containing previous contents of test from lib/getloadavg.c. It also contains suggestions by Bruno Haible in . * modules/getloadavg-tests: New file. * m4/getloadavg.m4 (gl_GETLOADAVG): Do not check for getloadavg twice. Do tests in the same order as they're needed for getloadavg.c. Omit setgid-related tests that generate symbols KMEM_GROUP, NEET_SETGID, GETLOADAVG_PRIVILEGED; nobody seems to use those any more. Do only the tests that are needed to see whether the system has getloadavg, moving the other tests into ... (gl_PREREQ_GETLOADAVG): ... here. Do not define obsolete symbol NLIST_NAME_UNION; nobody should be using it. Do not define symbols C_GETLOADAVG and HAVE_GETLOADAVG; they're no longer relevant, as the user of this module shouldn't care how getloadavg is implemented. getloadavg: omit unused var * lib/getloadavg.c (getloadavg): Omit unused local variable. 2011-02-15 Jim Meyering doc: update users.txt * users.txt: Update iwhd's URL. 2011-02-13 Bruno Haible Consistent macro naming for macros that use GCC __attribute__. * lib/di-set.h (_GL_ATTRIBUTE_NONNULL): Renamed from _ATTRIBUTE_NONNULL_. * lib/ino-map.h (_GL_ATTRIBUTE_NONNULL): Likewise. * lib/hash.h (_GL_ATTRIBUTE_WUR): Renamed from ATTRIBUTE_WUR. * lib/ignore-value.h (_GL_ATTRIBUTE_DEPRECATED): Renamed from ATTRIBUTE_DEPRECATED. * lib/openat.h (_GL_ATTRIBUTE_NORETURN): Renamed from ATTRIBUTE_NORETURN. * lib/sigpipe-die.h (_GL_ATTRIBUTE_NORETURN): Likewise. * lib/xmemdup0.h (_GL_ATTRIBUTE_NORETURN): Likewise. * lib/xstrtol.h (_GL_ATTRIBUTE_NORETURN): Likewise. * lib/xalloc.h (_GL_ATTRIBUTE_NORETURN): Likewise. (_GL_ATTRIBUTE_MALLOC): Renamed from ATTRIBUTE_MALLOC. (_GL_ATTRIBUTE_ALLOC_SIZE): Renamed from ATTRIBUTE_ALLOC_SIZE. * lib/version-etc.h (_GL_ATTRIBUTE_SENTINEL): Renamed from ATTRIBUTE_SENTINEL. * lib/safe-alloc.h (_GL_ATTRIBUTE_RETURN_CHECK): Renamed from ATTRIBUTE_RETURN_CHECK. * tests/test-ignore-value.c (_GL_ATTRIBUTE_RETURN_CHECK): Likewise. * tests/test-argmatch.c (_GL_ATTRIBUTE_NORETURN): Renamed from ATTRIBUTE_NORETURN. * tests/test-exclude.c (_GL_ATTRIBUTE_NORETURN): Likewise. Reported by Paul Eggert. 2011-02-13 Bruno Haible Don't interfere with a program's definition of __attribute__. * lib/argp.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (argp_error, __argp_error, argp_failure, __argp_failure): Use it. * lib/argp-fmtstream.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (__argp_fmtstream_printf, argp_fmtstream_printf): Use it. * lib/argp-help.c (hol_entry_long_iterate): Use __attribute__ only for GCC 3 or newer. * lib/error.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (error, error_at_line): Use it. * lib/hash.h (__attribute__): Remove definition. (ATTRIBUTE_WUR): Update definition. Define always. * lib/openat.h (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. * lib/sigpipe-die.h (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. * lib/vasnprintf.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (asnprintf, vasnprintf): Use it. * lib/xalloc.h (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. (ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE): Define always. * lib/xmemdup0.h (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. * lib/xprintf.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (xprintf, xvprintf, xfprintf, xvfprintf): Use it. * lib/xstrtol.h (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. * lib/xvasprintf.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT): New macro. (xasprintf, xvasprintf): Use it. * tests/test-argmatch.c (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. * tests/test-exclude.c (__attribute__): Remove definition. (ATTRIBUTE_NORETURN): Update definition. Define always. Reported by Paul Eggert. 2011-02-13 Bruno Haible mbrtowc: Add more tests for native Windows platforms. * tests/test-mbrtowc-w32-1.sh: New file. * tests/test-mbrtowc-w32-2.sh: New file. * tests/test-mbrtowc-w32-3.sh: New file. * tests/test-mbrtowc-w32-4.sh: New file. * tests/test-mbrtowc-w32-5.sh: New file. * tests/test-mbrtowc-w32.c: New file. * modules/mbrtowc-tests (Files): Add them. (Makefile.am): Arrange to run these tests. * tests/test-mbrtowc-w32-6.sh: New file, currently unused. * tests/test-mbrtowc-w32-7.sh: New file, currently unused. 2011-02-13 Bruno Haible mbrtowc: Work around native Windows bug. * m4/mbrtowc.m4 (gl_MBRTOWC_RETVAL): Detect native Windows bug. Use the guess when no suitable locale for testing was found. * doc/posix-functions/mbrtowc.texi: Mention the native Windows bug. 2011-02-13 Bruno Haible mbsinit: Work around mingw bug. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): Replace mbsinit also on mingw. * lib/mbsinit.c (mbsinit): Provide an alternate definition for native Windows. * doc/posix-functions/mbsinit.texi: Mention the mingw bug. 2011-02-13 Bruno Haible mbsinit: Don't crash for a NULL argument. * lib/mbsinit.c (mbsinit): When the argument is NULL, return 1. * tests/test-mbsinit.c (mbsinit): Check this behaviour. 2011-02-13 Bruno Haible Don't interfere with a program's definition of __attribute__. * lib/stdio.in.h (__attribute__): Remove definition. (_GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_FORMAT_PRINTF): New macros. (dprintf, fprintf, obstack_printf, obstack_printf, obstack_vprintf, printf, snprintf, sprintf, asprintf, vasprintf, vdprintf, vfprintf, vsnprintf, vsprintf): Use _GL_ATTRIBUTE_FORMAT_PRINTF. * lib/string.in.h (__attribute__): Remove definition. Reported by Paul Eggert. 2011-02-12 Paul Eggert stdlib: don't get in the way of non-GCC __attribute__ See thread starting at . Revert previous stdlib change, installing the following instead: * lib/stdlib.in.h (__attribute__): Remove. We do not want to get in the way of a non-GCC compiler that supports __attribute__. (_GL_ATTRIBUTE_RETURN): New macro. (_Exit): Use it instead of __attribute__. 2011-02-12 Bruno Haible quotearg test: Avoid test failure on mingw. * tests/test-quotearg.sh: Convert the locale identifier from native Windows syntax to Unix syntax. 2011-02-12 Bruno Haible setlocale: Prefer gnulib's override over libintl's override. * lib/locale.in.h (GNULIB_defined_setlocale): New macro. * lib/gettext.h (setlocale): Redefine to rpl_setlocale if GNULIB_defined_setlocale is set. 2011-02-12 Paul Eggert stdlib: support non-GCC __attribute__ Fix a serious and tricky problem encountered when attempting to add the getloadavg module to Emacs. Emacs worked fine on RHEL 5.5, but it crashed due to memory corruption on Solaris 10 with Sun C 5.11. Emacs normally ORs 3-bit tags into their low-order bits that are otherwise zero. This tagging is optional inside Emacs but is preferred and is used when __attribute__ ((__aligned (8))) works, as it does with both recent-enough GCC and with Sun C 5.11. However, Sun C 5.11 is not GCC and does not #define __GNUC__ and __GNUC_MINOR__. When I added the getloadavg module to Emacs, it brought in stdlib.in.h, which contained this fragment: #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) # define __attribute__(Spec) /* empty */ # endif #endif When files that include were compiled with Sun C 5.11, the above code disabled __attribute__ ((__aligned (8))), which caused variables to not be properly aligned, which eventually led to the pointer corruption mentioned above. (This was a bit hard to diagnose, unfortunately.) Several "#define __attribute__(X) /* empty */" code snippets need to be eradicated from Gnulib to work with non-GCC compilers that support __attribute__. The Autoconf way to do this is to test for each kind of attribute that we want support for, and selectively enable that in source code. Fix this problem just for stdlib.h, by adding a test for the __noreturn__ attribute, and change stdlib.in.h to use that test when needed. This technique can be easily generalized to the other *.in.h files and attributes, and a similar technique can be used for *.h and *.c files. This patch is enough to solve the problem for Emacs + getloadavg, and I thought I'd publish it for feedback before undertaking further, similar fixes in other modules. This patch does not arrange to #define HAVE_ATTRIBUTE_NORETURN because it's not needed for stdlib.h. It merely substitutes the value directly into stdlib.h. We may well need to #define it, or similar symbols, for other modules, but it's nice to also have an option to not #define it for applications like Emacs that do not need it. * lib/stdlib.in.h (__attribute__): Do not #define. (_GL_ATTRIBUTE_NORETURN): New macro, which in stdlib.h needs to be defined only if the _Exit module is also used. * m4/_Exit.m4 (gl_FUNC__EXIT): Require gl_ATTRIBUTE_NORETURN. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Subst HAVE_ATTRIBUTE_NORETURN and default it to 1, its value on GNU platforms. * modules/_Exit (Files): Add m4/attribute.m4. * modules/stdlib (Makefile.am): Substitute HAVE_ATTRIBUTE_NORETURN. * m4/attribute.m4: New file. 2011-02-12 Bruno Haible wcsrtombs: Work around bug on native Windows. * m4/wcsrtombs.m4 (gl_WCSRTOMBS_NULL): Test against mingw bug. * lib/wcsrtombs.c (rpl_wcsrtombs): When dest is NULL, pass SIZE_MAX instead of len. * doc/posix-functions/wcsrtombs.texi: Document mingw bug. 2011-02-12 Bruno Haible mbsrtowcs: Work around bug on native Windows. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Require gt_LOCALE_FR. Test against mingw bug. * doc/posix-functions/mbsrtowcs.texi: Document mingw bug. 2011-02-12 Bruno Haible Avoid setlocale bugs in tests. * modules/btowc (Dependencies): Add setlocale. * modules/c-strcase (Dependencies): Likewise. * modules/mbmemcasecmp (Dependencies): Likewise. * modules/mbmemcasecoll (Dependencies): Likewise. * modules/mbrtowc (Dependencies): Likewise. * modules/mbscasecmp (Dependencies): Likewise. * modules/mbscasestr (Dependencies): Likewise. * modules/mbschr (Dependencies): Likewise. * modules/mbscspn (Dependencies): Likewise. * modules/mbsinit (Dependencies): Likewise. * modules/mbsncasecmp (Dependencies): Likewise. * modules/mbsnrtowcs (Dependencies): Likewise. * modules/mbspbrk (Dependencies): Likewise. * modules/mbspcasecmp (Dependencies): Likewise. * modules/mbsrchr (Dependencies): Likewise. * modules/mbsrtowcs (Dependencies): Likewise. * modules/mbsspn (Dependencies): Likewise. * modules/mbsstr (Dependencies): Likewise. * modules/nl_langinfo (Dependencies): Likewise. * modules/quotearg (Dependencies): Likewise. * modules/unicase/locale-language (Dependencies): Likewise. * modules/unicase/ulc-casecmp (Dependencies): Likewise. * modules/unicase/ulc-casecoll (Dependencies): Likewise. * modules/unigbrk/ulc-grapheme-breaks (Dependencies): Likewise. * modules/unistdio/u8-vasnprintf (Dependencies): Likewise. * modules/unistdio/u16-vasnprintf (Dependencies): Likewise. * modules/unistdio/u32-vasnprintf (Dependencies): Likewise. * modules/unistdio/ulc-vasnprintf (Dependencies): Likewise. * modules/uniwbrk/ulc-wordbreaks (Dependencies): Likewise. * modules/vasnprintf-posix (Dependencies): Likewise. * modules/wcrtomb (Dependencies): Likewise. * modules/wcsnrtombs (Dependencies): Likewise. * modules/wcsrtombs (Dependencies): Likewise. 2011-02-12 Bruno Haible setlocale: Workaround native Windows bug. * lib/setlocale.c (rpl_setlocale): On native Windows, when setlocale succeeds but sets LC_CTYPE to "C", report a failure. * tests/test-setlocale2.sh: New file. * tests/test-setlocale2.c: New file. * modules/setlocale-tests (Files): Add the new files. (Makefile.am): Enable test-setlocale2.sh test. * doc/posix-functions/setlocale.texi: Mention workaround. 2011-02-11 Bruno Haible Tests for module 'setlocale'. * modules/setlocale-tests: New file. * tests/test-setlocale1.sh: New file. * tests/test-setlocale1.c: New file. New module 'setlocale'. * lib/locale.in.h (setlocale): New declaration. * lib/setlocale.c: New file, based on gettext/gettext-runtime/intl/setlocale.c. * m4/setlocale.m4: New file. * m4/locale_h.m4 (gl_LOCALE_H): Test whether setlocale is declared. (gl_LOCALE_H_DEFAULTS): Initialize GNULIB_SETLOCALE, REPLACE_SETLOCALE. * modules/locale (Makefile.am): Substitute GNULIB_SETLOCALE, REPLACE_SETLOCALE. * modules/setlocale: New file. * tests/test-locale-c++.cc: Test the declaration of setlocale. * doc/posix-functions/setlocale.texi: Mention the new module. 2011-02-11 Bruno Haible Prepare for locale dependent tests on mingw. * m4/locale-ar.m4 (gt_LOCALE_AR): On native Windows, don't try "ar" because it has the wrong locale encoding. * m4/locale-fr.m4 (gt_LOCALE_FR): On native Windows, try French_France.1252 instead of "fr". (gt_LOCALE_FR_UTF8): On native Windows, try French_France.65001. * m4/locale-ja.m4 (gt_LOCALE_JA): On native Windows, don't try "ja" because it has the wrong locale encoding. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Require AC_CANONICAL_HOST. On native Windows, try Turkish_Turkey.65001. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): On native Windows, try Chinese_China.54936. Prepare for locale dependent tests on mingw. * m4/locale-ar.m4 (gt_LOCALE_AR): On native Windows, call setlocale differently. * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Likewise. * m4/locale-ja.m4 (gt_LOCALE_JA): Likewise. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. 2011-02-11 Eric Blake strptime: avoid compiler warnings * lib/strptime.c (__strptime_internal) [!_NL_CURRENT]: Avoid compiler warnings about dead code. Reported by Daniel P. Berrange. 2011-02-11 Thien-Thi Nguyen doc: update users.txt * users.txt: Add rcs. 2011-02-10 John W. Eaton doc: update users.txt * users.txt: Add octave. 2011-02-10 Jim Meyering doc: update users.txt * users.txt: Add iwhd. 2011-02-09 Bruno Haible gnulib-tool: Make copyright notice adjustment more robust. * gnulib-tool (func_import): In sed_transform_main_lib_file, sed_transform_build_aux_file, sed_transform_testsrelated_lib_file, allow a line break to occur after "GNU" in "GNU [Lesser] General Public License". Reported by Glenn Morris via Paul Eggert. 2011-02-06 Bruno Haible New module 'towctrans'. * modules/towctrans: New file. * lib/wctype.in.h (towctrans): New declaration. * lib/towctrans.c: New file. * lib/towctrans-impl.h: New file. * m4/towctrans.m4: New file. * m4/wctype_h.m4 (gl_WCTYPE_H): Test whether towctrans is declared. (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_TOWCTRANS. * modules/wctype-h (Makefile.am): Substitute GNULIB_TOWCTRANS. * tests/test-wctype-h-c++.cc: Test the declaration of towctrans. * doc/posix-functions/towctrans.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wctrans'. * modules/wctrans: New file. * lib/wctype.in.h (wctrans): New declaration. * lib/wctrans.c: New file. * lib/wctrans-impl.h: New file. * m4/wctrans.m4: New file. * m4/wctype_h.m4 (gl_WCTYPE_H): Test whether wctrans is declared. (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_WCTRANS. * modules/wctype-h (Makefile.am): Substitute GNULIB_WCTRANS. * tests/test-wctype-h-c++.cc: Test the declaration of wctrans. * doc/posix-functions/wctrans.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'iswctype'. * modules/iswctype: New file. * lib/wctype.in.h (iswctype): New declaration. * lib/iswctype.c: New file. * lib/iswctype-impl.h: New file. * m4/iswctype.m4: New file. * m4/wctype_h.m4 (gl_WCTYPE_H): Test whether iswctype is declared. (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_ISWCTYPE. * modules/wctype-h (Makefile.am): Substitute GNULIB_ISWCTYPE. * tests/test-wctype-h-c++.cc: Test the declaration of iswctype. * doc/posix-functions/iswctype.texi: Mention the new module and the HP-UX 11.00 problem. 2011-02-06 Bruno Haible New module 'wctype'. * modules/wctype: Change to represent the wctype() substitute. * lib/wctype.in.h (wctype): New declaration. * lib/wctype.c: New file. * lib/wctype-impl.h: New file. * m4/wctype.m4: New file. * m4/wctype_h.m4 (gl_WCTYPE_H): Test whether wctype is declared. (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_WCTYPE. * modules/wctype-h (Makefile.am): Substitute GNULIB_WCTYPE. * tests/test-wctype-h-c++.cc: Test the declaration of wctype. * doc/posix-functions/wctype.texi: Mention the new module and the HP-UX 11.00 problem. 2011-02-06 Bruno Haible wctype-h: Ensure wctype_t and wctrans_t are defined. * lib/wctype.in.h (wctype_t, wctrans_t): New type declarations. * m4/wctype_h.m4 (gl_WCTYPE_H): Determine HAVE_WCTYPE_T, HAVE_WCTRANS_T. (gl_WCTYPE_H_DEFAULTS): Initialize HAVE_WCTYPE_T, HAVE_WCTRANS_T. * modules/wctype-h (Makefile.am): Substitute HAVE_WCTYPE_T, HAVE_WCTRANS_T. * tests/test-wctype-h.c: Check that wctype_t and wctrans_t are defined. 2011-02-09 Paul Eggert flock: fix license typo * lib/flock.c: Fix typo in license. One of the "Lesser"s was omitted. 2011-02-08 Bruno Haible Split large sed scripts, for HP-UX sed. * modules/math (Makefile.am): Split sed scripts around 50 sed commands, to avoid HP-UX limit of 99 commands, in the near future. * modules/stdlib (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. Reported by Albert Chin . Suggestion by Ralf Wildenhues in . 2011-02-08 Paul Eggert Bruno Haible stdlib: improve random_r modularization * lib/stdlib.in.h: Encapsulate all the stuff having to do with random_r inside "#if @GNULIB_RANDOM_R@", so that it's clearer that you also need the random_r module to get this material right. * m4/random_r.m4 (gl_FUNC_RANDOM_R): Move check for random.h here ... * m4/stdlib_h.m4 (gl_STDLIB_H): ... from here. (gl_STDLIB_H_DEFAULTS): Default HAVE_RANDOM_H to 1, and AC_SUBST it. 2011-02-08 Paul Eggert stdlib: don't depend on stdint * lib/stdlib.in.h: Don't include merely because GNULIB_POSIXCHECK is defined. GNULIB_POSIXCHECK seems to be independent of whether stdint.h is needed. * m4/random_r.m4 (gl_FUNC_RANDOM_R): Check for struct random_data here, instead of ... * m4/stdlib_h.m4 (gl_STDLIB_H): ... here. Applications that need struct random_data should be using the random_r module, not just the stdlib module (which wouldn't make sense: what package needs just struct random_data without also needing random_r?). * modules/stdlib (Depends-on): Remove stdint. getloadavg: don't depend on c-strtod, cloexec, fcntl-safer See the thread rooted at . * lib/getloadavg.c: Do not include c-strtod.h, cloexec.h, or fcntl--.h. Include only if (defined __linux__ || defined __CYGWIN__ || defined SUNOS_5 || (defined LOAD_AVE_TYPE && ! defined __VMS)); previously it was always included (via fcntl--.h). (getloadavg): Do not use c_strtod. Instead, approximate it by hand; this is good enough for load averages. Also, do not use set_cloexec_flag; instead, use the O_CLOEXEC and F_DUPFD_CLOEXEC flags directly if available and don't bother otherwise. (Packages that need the extra reliability should use the modules that define these flags on older platforms that lack them.) * modules/getloadavg (Depends-on): Remove c-strtod, cloexec, fcntl-safer. 2011-02-08 Jim Meyering di-set.h, ino-map.h: add multiple-inclusion guard Technically, the guard is required only for ino-map.h, due to its INO_MAP_INSERT_FAILURE definition, but do both for consistency. * lib/di-set.h: Add file-spanning #ifndef _GL_DI_SET_H. * lib/ino-map.h: Likewise. 2011-02-06 Bruno Haible iswblank: Ensure declaration on glibc systems. * m4/iswblank.m4 (gl_FUNC_ISWBLANK): Require gl_USE_SYSTEM_EXTENSIONS. * modules/iswblank (Dependencies): Add 'extensions'. * doc/posix-functions/iswblank.texi: Document the glibc problem. 2011-02-06 Bruno Haible New module 'iswblank'. * lib/wctype.in.h (iswblank): Don't declare if GNULIB_ISWBLANK is 0. * modules/iswblank: New file. * modules/wctype-h (Files): Remove lib/iswblank.c. (Makefile.am): Substitute GNULIB_ISWBLANK. * m4/iswblank.m4: New file, partially extracted from m4/wctype_h.m4. * m4/wctype_h.m4 (gl_WCTYPE_MODULE_INDICATOR): New macro. (gl_WCTYPE_H_DEFAULTS): New macro. (gl_WCTYPE_H): Require it. Remove iswblank related code. * modules/iswblank-tests: New file. * tests/test-iswblank.c: New file, extraced from tests/test-wctype-h.c. * tests/test-wctype-h.c (main): Remove iswblank tests. * tests/test-wctype-h-c++.cc: Guard the signature test of iswblank. * doc/posix-functions/iswblank.texi: Mention module 'iswblank' instead of 'wctype-h'. * NEWS: Mention the change. * modules/mbchar (Depends-on): Add iswblank. 2011-02-08 Bruno Haible di-set tests: Refactor. * tests/test-di-set.c: Include di-set.h early. Include macros.h. Drop unnecessary includes. (ASSERT): Remove macro. (main): Make C90 compliant by avoiding variable declaration after statement. * modules/di-set-tests (Files): Add tests/macros.h. 2011-02-08 Bruno Haible ino-map tests: Refactor. * tests/test-ino-map.c: Include ino-map.h early. Include macros.h. Drop unnecessary includes. (ASSERT): Remove macro. (main): Make C90 compliant by avoiding variable declaration after statement. * modules/ino-map-tests (Files): Add tests/macros.h. 2011-02-08 Jim Meyering di-set: add "const" to a cast * lib/di-set.c (di_set_insert): Cast hash_insert0 argument to "(void const *)", not "(void *)". Spotted by Bruno Haible. 2011-02-06 Bruno Haible Rename module 'wctype' to 'wctype-h'. * modules/wctype-h: Renamed from modules/wctype. * modules/wctype: Simplyfy to a redirection to 'wctype-h'. * modules/wctype-h-tests: Renamed from modules/wctype-tests. (Files, Depends-on, Makefile.am): Update. * modules/wctype-h-c++-tests: Renamed from modules/wctype-c++-tests. (Files, Makefile.am): Update. * tests/test-wctype-h.c: Renamed from tests/test-wctype.c. * tests/test-wctype-h-c++.cc: Renamed from tests/test-wctype-c++.cc. * doc/posix-headers/wctype.texi: Update. * doc/posix-functions/iswalnum.texi: Update. * doc/posix-functions/iswalpha.texi: Update. * doc/posix-functions/iswblank.texi: Update. * doc/posix-functions/iswcntrl.texi: Update. * doc/posix-functions/iswdigit.texi: Update. * doc/posix-functions/iswgraph.texi: Update. * doc/posix-functions/iswlower.texi: Update. * doc/posix-functions/iswprint.texi: Update. * doc/posix-functions/iswpunct.texi: Update. * doc/posix-functions/iswspace.texi: Update. * doc/posix-functions/iswupper.texi: Update. * doc/posix-functions/iswxdigit.texi: Update. * doc/posix-functions/towlower.texi: Update. * doc/posix-functions/towupper.texi: Update. * NEWS: Mention the change. * modules/fnmatch (Dependencies): Add wctype-h, remove wctype. * modules/mbchar (Dependencies): Likewise. * modules/mbswidth (Dependencies): Likewise. * modules/quotearg (Dependencies): Likewise. * modules/regex (Dependencies): Likewise. * modules/wcscasecmp (Dependencies): Likewise. * modules/wcsncasecmp (Dependencies): Likewise. * modules/wcwidth (Dependencies): Likewise. 2011-02-06 Bruno Haible New module 'wcswidth'. * modules/wcswidth: New file. * lib/wchar.in.h (wcswidth): New declaration. * lib/wcswidth.c: New file. * lib/wcswidth-impl.h: New file, from libutf8 with modifications. * m4/wcswidth.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcswidth is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSWIDTH, HAVE_WCSWIDTH, REPLACE_WCSWIDTH. * modules/wchar (Makefile.am): Substitute GNULIB_WCSWIDTH, HAVE_WCSWIDTH, REPLACE_WCSWIDTH. * tests/test-wchar-c++.cc: Test the declaration of wcswidth. * doc/posix-functions/wcswidth.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcstok'. * modules/wcstok: New file. * lib/wchar.in.h (wcstok): New declaration. * lib/wcstok.c: New file. * lib/wcstok-impl.h: New file, from libutf8 with modifications. * m4/wcstok.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcstok is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSTOK, HAVE_WCSTOK. * modules/wchar (Makefile.am): Substitute GNULIB_WCSTOK, HAVE_WCSTOK. * tests/test-wchar-c++.cc: Test the declaration of wcstok. * doc/posix-functions/wcstok.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsstr'. * modules/wcsstr: New file. * lib/wchar.in.h (wcsstr): New declaration. * lib/wcsstr.c: New file. * lib/wcsstr-impl.h: New file, from libutf8 with modifications. * m4/wcsstr.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsstr is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSSTR, HAVE_WCSSTR. * modules/wchar (Makefile.am): Substitute GNULIB_WCSSTR, HAVE_WCSSTR. * tests/test-wchar-c++.cc: Test the declaration of wcsstr. * doc/posix-functions/wcsstr.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcspbrk'. * modules/wcspbrk: New file. * lib/wchar.in.h (wcspbrk): New declaration. * lib/wcspbrk.c: New file. * lib/wcspbrk-impl.h: New file, from libutf8 with modifications. * m4/wcspbrk.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcspbrk is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSPBRK, HAVE_WCSPBRK. * modules/wchar (Makefile.am): Substitute GNULIB_WCSPBRK, HAVE_WCSPBRK. * tests/test-wchar-c++.cc: Test the declaration of wcspbrk. * doc/posix-functions/wcspbrk.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsspn'. * modules/wcsspn: New file. * lib/wchar.in.h (wcsspn): New declaration. * lib/wcsspn.c: New file. * lib/wcsspn-impl.h: New file, from libutf8 with modifications. * m4/wcsspn.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsspn is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSSPN, HAVE_WCSSPN. * modules/wchar (Makefile.am): Substitute GNULIB_WCSSPN, HAVE_WCSSPN. * tests/test-wchar-c++.cc: Test the declaration of wcsspn. * doc/posix-functions/wcsspn.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcscspn'. * modules/wcscspn: New file. * lib/wchar.in.h (wcscspn): New declaration. * lib/wcscspn.c: New file. * lib/wcscspn-impl.h: New file, from libutf8 with modifications. * m4/wcscspn.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscspn is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCSPN, HAVE_WCSCSPN. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCSPN, HAVE_WCSCSPN. * tests/test-wchar-c++.cc: Test the declaration of wcscspn. * doc/posix-functions/wcscspn.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsrchr'. * modules/wcsrchr: New file. * lib/wchar.in.h (wcsrchr): New declaration. * lib/wcsrchr.c: New file. * lib/wcsrchr-impl.h: New file, from libutf8 with modifications. * m4/wcsrchr.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsrchr is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSRCHR, HAVE_WCSRCHR. * modules/wchar (Makefile.am): Substitute GNULIB_WCSRCHR, HAVE_WCSRCHR. * tests/test-wchar-c++.cc: Test the declaration of wcsrchr. * doc/posix-functions/wcsrchr.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcschr'. * modules/wcschr: New file. * lib/wchar.in.h (wcschr): New declaration. * lib/wcschr.c: New file. * lib/wcschr-impl.h: New file, from libutf8 with modifications. * m4/wcschr.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcschr is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCHR, HAVE_WCSCHR. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCHR, HAVE_WCSCHR. * tests/test-wchar-c++.cc: Test the declaration of wcschr. * doc/posix-functions/wcschr.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsdup'. * modules/wcsdup: New file. * lib/wchar.in.h (wcsdup): New declaration. * lib/wcsdup.c: New file. * lib/wcsdup-impl.h: New file, from libutf8 with modifications. * m4/wcsdup.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsdup is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSDUP, HAVE_WCSDUP. * modules/wchar (Makefile.am): Substitute GNULIB_WCSDUP, HAVE_WCSDUP. * tests/test-wchar-c++.cc: Test the declaration of wcsdup. * doc/posix-functions/wcsdup.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsxfrm'. * modules/wcsxfrm: New file. * lib/wchar.in.h (wcsxfrm): New declaration. * lib/wcsxfrm.c: New file. * lib/wcsxfrm-impl.h: New file. * m4/wcsxfrm.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsxfrm is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSXFRM, HAVE_WCSXFRM. * modules/wchar (Makefile.am): Substitute GNULIB_WCSXFRM, HAVE_WCSXFRM. * tests/test-wchar-c++.cc: Test the declaration of wcsxfrm. * doc/posix-functions/wcsxfrm.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcscoll'. * modules/wcscoll: New file. * lib/wchar.in.h (wcscoll): New declaration. * lib/wcscoll.c: New file. * lib/wcscoll-impl.h: New file. * m4/wcscoll.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscoll is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCOLL, HAVE_WCSCOLL. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCOLL, HAVE_WCSCOLL. * tests/test-wchar-c++.cc: Test the declaration of wcscoll. * doc/posix-functions/wcscoll.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcsncasecmp'. * modules/wcsncasecmp: New file. * lib/wchar.in.h (wcsncasecmp): New declaration. * lib/wcsncasecmp.c: New file. * lib/wcsncasecmp-impl.h: New file, from libutf8 with modifications. * m4/wcsncasecmp.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncasecmp is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCASECMP, HAVE_WCSNCASECMP. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNCASECMP, HAVE_WCSNCASECMP. * tests/test-wchar-c++.cc: Test the declaration of wcsncasecmp. * doc/posix-functions/wcsncasecmp.texi: Mention the new module. 2011-02-06 Bruno Haible New module 'wcscasecmp'. * modules/wcscasecmp: New file. * lib/wchar.in.h (wcscasecmp): New declaration. * lib/wcscasecmp.c: New file. * lib/wcscasecmp-impl.h: New file, from libutf8 with modifications. * m4/wcscasecmp.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscasecmp is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCASECMP, HAVE_WCSCASECMP. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCASECMP, HAVE_WCSCASECMP. * tests/test-wchar-c++.cc: Test the declaration of wcscasecmp. * doc/posix-functions/wcscasecmp.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcsncmp'. * modules/wcsncmp: New file. * lib/wchar.in.h (wcsncmp): New declaration. * lib/wcsncmp.c: New file. * lib/wcsncmp-impl.h: New file, from libutf8 with modifications. * m4/wcsncmp.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncmp is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCMP, HAVE_WCSNCMP. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNCMP, HAVE_WCSNCMP. * tests/test-wchar-c++.cc: Test the declaration of wcsncmp. * doc/posix-functions/wcsncmp.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcscmp'. * modules/wcscmp: New file. * lib/wchar.in.h (wcscmp): New declaration. * lib/wcscmp.c: New file. * lib/wcscmp-impl.h: New file, from libutf8 with modifications. * m4/wcscmp.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscmp is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCMP, HAVE_WCSCMP. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCMP, HAVE_WCSCMP. * tests/test-wchar-c++.cc: Test the declaration of wcscmp. * doc/posix-functions/wcscmp.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcsncat'. * modules/wcsncat: New file. * lib/wchar.in.h (wcsncat): New declaration. * lib/wcsncat.c: New file. * lib/wcsncat-impl.h: New file, from libutf8 with modifications. * m4/wcsncat.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncat is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCAT, HAVE_WCSNCAT. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNCAT, HAVE_WCSNCAT. * tests/test-wchar-c++.cc: Test the declaration of wcsncat. * doc/posix-functions/wcsncat.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcscat'. * modules/wcscat: New file. * lib/wchar.in.h (wcscat): New declaration. * lib/wcscat.c: New file. * lib/wcscat-impl.h: New file, from libutf8 with modifications. * m4/wcscat.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscat is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCAT, HAVE_WCSCAT. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCAT, HAVE_WCSCAT. * tests/test-wchar-c++.cc: Test the declaration of wcscat. * doc/posix-functions/wcscat.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcpncpy'. * modules/wcpncpy: New file. * lib/wchar.in.h (wcpncpy): New declaration. * lib/wcpncpy.c: New file. * lib/wcpncpy-impl.h: New file, from libutf8 with modifications. * m4/wcpncpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcpncpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCPNCPY, HAVE_WCPNCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WCPNCPY, HAVE_WCPNCPY. * tests/test-wchar-c++.cc: Test the declaration of wcpncpy. * doc/posix-functions/wcpncpy.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcsncpy'. * modules/wcsncpy: New file. * lib/wchar.in.h (wcsncpy): New declaration. * lib/wcsncpy.c: New file. * lib/wcsncpy-impl.h: New file, from libutf8 with modifications. * m4/wcsncpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCPY, HAVE_WCSNCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNCPY, HAVE_WCSNCPY. * tests/test-wchar-c++.cc: Test the declaration of wcsncpy. * doc/posix-functions/wcsncpy.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcpcpy'. * modules/wcpcpy: New file. * lib/wchar.in.h (wcpcpy): New declaration. * lib/wcpcpy.c: New file. * lib/wcpcpy-impl.h: New file, from libutf8 with modifications. * m4/wcpcpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcpcpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCPCPY, HAVE_WCPCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WCPCPY, HAVE_WCPCPY. * tests/test-wchar-c++.cc: Test the declaration of wcpcpy. * doc/posix-functions/wcpcpy.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcscpy'. * modules/wcscpy: New file. * lib/wchar.in.h (wcscpy): New declaration. * lib/wcscpy.c: New file. * lib/wcscpy-impl.h: New file, from libutf8 with modifications. * m4/wcscpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCPY, HAVE_WCSCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WCSCPY, HAVE_WCSCPY. * tests/test-wchar-c++.cc: Test the declaration of wcscpy. * doc/posix-functions/wcscpy.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcsnlen'. * modules/wcsnlen: New file. * lib/wchar.in.h (wcsnlen): New declaration. * lib/wcsnlen.c: New file. * lib/wcsnlen-impl.h: New file, from libutf8 with modifications. * m4/wcsnlen.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsnlen is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNLEN, HAVE_WCSNLEN. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNLEN, HAVE_WCSNLEN. * tests/test-wchar-c++.cc: Test the declaration of wcsnlen. * doc/posix-functions/wcsnlen.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wcslen'. * modules/wcslen: New file. * lib/wchar.in.h (wcslen): New declaration. * lib/wcslen.c: New file. * lib/wcslen-impl.h: New file, from libutf8 with modifications. * m4/wcslen.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcslen is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSLEN, HAVE_WCSLEN. * modules/wchar (Makefile.am): Substitute GNULIB_WCSLEN, HAVE_WCSLEN. * tests/test-wchar-c++.cc: Test the declaration of wcslen. * doc/posix-functions/wcslen.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wmemset'. * modules/wmemset: New file. * lib/wchar.in.h (wmemset): New declaration. * lib/wmemset.c: New file. * lib/wmemset-impl.h: New file, from libutf8 with modifications. * m4/wmemset.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmemset is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMSET, HAVE_WMEMSET. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMSET, HAVE_WMEMSET. * tests/test-wchar-c++.cc: Test the declaration of wmemset. * doc/posix-functions/wmemset.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wmemmove'. * modules/wmemmove: New file. * lib/wchar.in.h (wmemmove): New declaration. * lib/wmemmove.c: New file. * lib/wmemmove-impl.h: New file, from libutf8 with modifications. * m4/wmemmove.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmemmove is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMMOVE, HAVE_WMEMMOVE. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMMOVE, HAVE_WMEMMOVE. * tests/test-wchar-c++.cc: Test the declaration of wmemmove. * doc/posix-functions/wmemmove.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wmemcpy'. * modules/wmemcpy: New file. * lib/wchar.in.h (wmemcpy): New declaration. * lib/wmemcpy.c: New file. * lib/wmemcpy-impl.h: New file, from libutf8 with modifications. * m4/wmemcpy.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmemcpy is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMCPY, HAVE_WMEMCPY. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMCPY, HAVE_WMEMCPY. * tests/test-wchar-c++.cc: Test the declaration of wmemcpy. * doc/posix-functions/wmemcpy.texi: Mention the new module. 2011-02-05 Bruno Haible New module 'wmemcmp'. * modules/wmemcmp: New file. * lib/wchar.in.h (wmemcmp): New declaration. * lib/wmemcmp.c: New file. * lib/wmemcmp-impl.h: New file, from libutf8 with modifications. * m4/wmemcmp.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmemcmp is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMCMP, HAVE_WMEMCMP. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMCMP, HAVE_WMEMCMP. * tests/test-wchar-c++.cc: Test the declaration of wmemcmp. * doc/posix-functions/wmemcmp.texi: Mention the new module. 2011-02-07 Jim Meyering di-set, ino-map: new modules, from coreutils * lib/di-set.c: New file. * lib/di-set.h: Likewise. * lib/ino-map.c: Likewise. * lib/ino-map.h: Likewise. * modules/di-set: Likewise. * modules/di-set-tests: Likewise. * modules/ino-map: Likewise. * modules/ino-map-tests: Likewise. * tests/test-di-set.c: Likewise. * tests/test-ino-map.c: Likewise. 2011-02-06 Paul Eggert getloadavg: merge minor changes from Emacs * lib/getloadavg.c (getloadavg_initialized): More-accurate comment. (getloadavg): Use memset, not bzero. 2008-07-25 Chong Yidong * lib/getloadavg.c (nl): Rename to name_list to avoid ncurses.h clash (bug#86). 2010-11-14 Bruno Haible Allow multiple gnulib generated replacements to coexist. * lib/getopt.in.h (struct option): Avoid identical redefinition. * lib/inttypes.in.h (imaxdiv_t): Likewise. * lib/langinfo.in.h (nl_item): Likewise. * lib/math.in.h (_NaN, NAN): Likewise. * lib/netdb.in.h (struct addrinfo): Likewise. * lib/poll.in.h (struct pollfd, nfds_t): Likewise. * lib/pthread.in.h (pthread_t, pthread_attr_t, pthread_barrier_t, pthread_barrierattr_t, pthread_cond_t, pthread_condattr_t, pthread_key_t, pthread_mutex_t, pthread_mutexattr_t, pthread_once_t, pthread_rwlock_t, pthread_rwlockattr_t, pthread_cond_destroy, pthread_cond_init, pthread_cond_signal, pthread_cond_wait, pthread_create, pthread_exit, pthread_join, pthread_mutexattr_destroy, pthread_mutexattr_init, pthread_mutexattr_settype, pthread_mutex_destroy, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_spinlock_t, pthread_spin_init, pthread_spin_destroy, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Likewise. * lib/sched.in.h (struct sched_param): Likewise. * lib/se-selinux.in.h (security_class_t, security_context_t, is_selinux_enabled, getcon, freecon, getfscreatecon, setfscreatecon, matchpathcon, getfilecon, lgetfilecon, fgetfilecon, setfilecon, lsetfilecon, fsetfilecon, security_check_context, security_check_context_raw, setexeccon, matchpathcon_init_prefix): Likewise. * lib/search.in.h (VISIT, _gl_search_compar_fn, _gl_search_action_fn): Likewise. * lib/signal.in.h (sig_atomic_t, sigset_t, verify_NSIG_constraint, _gl_function_taking_int_returning_void_t, union sigval, struct siginfo_t, siginfo_t, struct sigaction): Likewise. * lib/spawn.in.h (posix_spawnattr_t, posix_spawn_file_actions_t, verify_POSIX_SPAWN_USEVFORK_no_overlap): Likewise. * lib/stdint.in.h (gl_int8_t, gl_uint8_t, gl_int16_t, gl_uint16_t, gl_int32_t, gl_uint32_t, gl_int64_t, gl_uint64_t, int_least8_t, uint_least8_t, int_least16_t, uint_least16_t, int_least32_t, uint_least32_t, int_least64_t, uint_least64_t, gl_int_fast8_t, gl_uint_fast8_t, gl_int_fast16_t, gl_uint_fast16_t, gl_int_fast32_t, gl_uint_fast32_t, int_fast64_t, uint_fast64_t, gl_intptr_t, gl_uintptr_t, intmax_t, uintmax_t, _verify_intmax_size): Likewise. * lib/stdio.in.h (rpl_fseek, rpl_ftell): Likewise. * lib/sys_socket.in.h (sa_family_t, struct sockaddr_storage, socklen_t, rpl_fd_isset): Likewise. * lib/sys_stat.in.h (rpl_mkdir): Likewise. * lib/sys_time.in.h (struct timeval): Likewise. * lib/sys_times.in.h (struct tms): Likewise. * lib/sys_utsname.in.h (struct utsname): * lib/time.in.h (struct timespec, __time_t_must_be_integral): Likewise. * lib/unistd.in.h (getpagesize): Likewise. * lib/wchar.in.h (mbstate_t): Likewise. * lib/wctype.in.h (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit, towlower, towupper): Likewise. Reported by Sam Steingold . 2011-02-05 Eric Blake unsetenv: work around Haiku issues * m4/setenv.m4 (gl_FUNC_UNSETENV): Also detect Haiku issue. * doc/posix-functions/unsetenv.texi (unsetenv): Document it. 2010-12-30 Bruce Korb libposix: avoid calling error() within libposix * lib/openat-die.c: remove error module stuff when GNULIB_LIBPOSIX is defined. 2011-02-05 Eric Blake strerror_r-posix: port to cygwin * lib/strerror_r.c (strerror_r) [__CYGWIN__]: Add cygwin implementation. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Adjust comment. * tests/test-strerror_r.c (main): Fix test. * doc/posix-functions/strerror_r.texi (strerror_r): Document the issue. 2011-02-05 Bruno Haible New module 'wmemchr'. * modules/wmemchr: New file. * lib/wchar.in.h (wmemchr): New declaration. * lib/wmemchr.c: New file. * lib/wmemchr-impl.h: New file, from libutf8 with modifications. * m4/wmemchr.m4: New file. * m4/wchar_h.m4 (gl_WCHAR_H): Test whether wmemchr is declared. (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WMEMCHR, HAVE_WMEMCHR. * modules/wchar (Makefile.am): Substitute GNULIB_WMEMCHR, HAVE_WMEMCHR. * tests/test-wchar-c++.cc: Test the declaration of wmemchr. * doc/posix-functions/wmemchr.texi: Mention the new module. 2011-02-04 Eric Blake fdopendir: detect FreeBSD bug * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Detect bug. * doc/posix-functions/fdopendir.texi (fdopendir): Document it. 2011-02-04 Paul Eggert stdbool: do not define HAVE_STDBOOL_H * m4/stdbool.m4 (AC_CHECK_HEADER_STDBOOL): Renamed from AC_HEADER_STDBOOL. All uses changed. Do not define HAVE_STDBOOL_H, as gnulib does not need this. This change is imported from the latest Autoconf git. It was motivated by Emacs, which uses gnulib but does not need HAVE_STDBOOL_H. 2011-02-04 Bruno Haible wcsnrtombs: Prepare for new module wwcsnrtombs. * lib/wcsnrtombs-impl.h: New file, extracted from lib/wcsnrtombs.c. * lib/wcsnrtombs.c: Include it. * modules/wcsnrtombs (Files): Add lib/wcsnrtombs-impl.h. wcsrtombs: Prepare for new module wwcsrtombs. * lib/wcsrtombs-impl.h: New file, extracted from lib/wcsrtombs.c. * lib/wcsrtombs.c: Include it. * modules/wcsrtombs (Files): Add lib/wcsrtombs-impl.h. mbsnrtowcs: Prepare for new module mbsnrtowwcs. * lib/mbsnrtowcs-impl.h: New file, extracted from lib/mbsnrtowcs.c. * lib/mbsnrtowcs.c: Include it. * modules/mbsnrtowcs (Files): Add lib/mbsnrtowcs-impl.h. mbsrtowcs: Prepare for new module mbsrtowwcs. * lib/mbsrtowcs-impl.h: New file, extracted from lib/mbsrtowcs.c. * lib/mbsrtowcs.c: Include it. * modules/mbsrtowcs (Files): Add lib/mbsrtowcs-impl.h. 2011-02-04 Bruno Haible vasnprintf: Reduce use of malloc for small format strings. * lib/printf-args.h (N_DIRECT_ALLOC_ARGUMENTS): New macro. (arguments): Add room for the first 7 arguments. * lib/printf-parse.h (N_DIRECT_ALLOC_DIRECTIVES): New macro. (char_directives, u8_directives, u16_directives, u32_directives): Add room for the first 7 directives. * lib/printf-parse.c: Include . (PRINTF_PARSE): Change memory handling code so that it uses the first 7 preallocated elements in an 'arguments' or 'DIRECTIVES' struct. * lib/vasnprintf.c (VASNPRINTF): Update memory handling code. Reported by Pádraig Brady . 2011-01-31 Eric Blake dup2: work around Haiku bug * m4/dup2.m4 (gl_FUNC_DUP2): Test for bug. * lib/dup2.c (rpl_dup2) [!WIN32]: Add workaround. * doc/posix-functions/dup2.texi (dup2): Document the bug. * tests/test-dup2.c (main): Enhance test. 2011-01-31 Simon Josefsson doc: off_t is not available in eglibc 2.11.2 stdio.h. * doc/posix-headers/stdio.texi (stdio.h): Mention that off_t isn't declared by eglibc 2.11.2. * lib/stdio.in.h: Likewise. 2011-01-31 Eric Blake ignore-value: add missing test dependency * tests/test-ignore-value.c: Revert previous change; stdio.h provides off_t. * modules/ignore-value-tests (Depends-on): Add missing dependency. 2011-01-30 Paul Eggert mktime: clarify long_int width checking * lib/mktime.c (long_int_is_wide_enough): Move this assertion to the top level, to make it clearer that the assumption about long_int width is being checked. See . 2011-01-30 Simon Josefsson ignore-value: Fix self-test. * tests/test-ignore-value.c: Include sys/types.h for off_t. 2011-01-29 Paul Eggert TYPE_MAXIMUM: avoid theoretically undefined behavior * lib/intprops.h (TYPE_MINIMUM, TYPE_MAXIMUM): Do not shift a negative number, which the C Standard says has undefined behavior. In practice this is not a problem, but might as well do it by the book. Reported by Rich Felker and Eric Blake; see . * lib/strtol.c (TYPE_MINIMUM, TYPE_MAXIMUM): Likewise. * m4/mktime.m4 (AC_FUNC_MKTIME): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/parse-datetime.m4 (gl_PARSE_DATETIME): Likewise. * m4/stdint.m4 (gl_STDINT_H): Likewise. * lib/mktime.c (TYPE_MAXIMUM): Redo slightly to match the others. mktime: #undef mktime before #defining it * lib/mktime.c (mktime) [DEBUG]: #undef mktime before #defining it. mktime: systematically normalize tm_isdst comparisons * lib/mktime.c (isdst_differ): New function. (__mktime_internal): Use it systematically for all isdst comparisons. This completes the fix for libc BZ #6723, and removes the need for normalizing tm_isdst. See (not_equal_tm) [DEBUG]: Use isdst_differ here, too. mktime: fix some integer overflow issues and sidestep the rest This was prompted by a bug report by Benjamin Lindner for MinGW . His bug is due to signed integer overflow (0 - INT_MIN), and I I scanned through mktime.c looking for other integer overflow problems, fixing all the bugs I found. Although the C Standard says the resulting code is still not safe in the presence of integer overflow, in practice it should be good enough for all real-world two's-complement implementations, except for debugging environments that deliberately trap on integer overflow (e.g., gcc -ftrapv). * lib/mktime.c (WRAPV): New macro. (SHR): Also check that long_int and time_t shift right in the usual way, before using the fast-but-unportable method. (TYPE_ONES_COMPLEMENT, TYPE_SIGNED_MAGNITUDE): Remove, no longer used. The code already assumed two's complement, so there's no need to test for alternatives. All uses removed. (TYPE_MAXIMUM): Don't rely here on overflow behavior not defined by the C standard. Problem reported by Rich Felker in . (twos_complement_arithmetic): Also check long_int and time_t. (time_t_avg, time_t_add_ok, time_t_int_add_ok): New functions. (guess_time_tm, ranged_convert, __mktime_internal): Use them. (__mktime_internal): Avoid integer overflow with unary subtraction in two instances where -1 - X is an adequate replacement for -X, since the calculations are approximate. 2011-01-29 Eric Blake mktime: avoid infinite loop * m4/mktime.m4 (AC_FUNC_MKTIME): Avoid overflow on possibly-signed type; behavior is still undefined but portable to all known targets. Reported by Rich Felker. 2011-01-29 Simon Josefsson rename, unlink, same-inode: Relicense. * modules/rename (License): Relax from LGPLv3+ to LGPLv2+. * modules/unlink (License): Likewise. * modules/same-inode (License): Likewise. 2011-01-28 Paul Eggert mktime: avoid problems on NetBSD 5 / i386 * lib/mktime.c (long_int): New type. This works around a problem on NetBSD 5 / i386, where 'long int' and 'int' are both 32 bits but time_t is 64 bits, and where I expect the existing code is wrong in some cases. (leapyear, ydhms_diff, guess_time_tm, __mktime_internal): Use it. (ydhms_diff): Bring back the compile-time check for wide-enough year and yday. mktime: fix misspelling in comment * lib/mktime.c (__mktime_internal): Fix misspelling in comment. This merges all recent glibc changes of importance. 2011-01-28 Ralf Wildenhues move-if-change: cope with concurrent mv of identical file. * build-aux/move-if-change (CMPPROG): Accept environment variable as an override for `cmp'. (usage): Document CMPPROG. Adjust comparison to drop stdout. Cope with failure of mv if the target file exists and is identical to the source, for parallel builds. Report from H.J. Lu against binutils in PR binutils/12283. 2011-01-28 Bruce Korb * users.txt: Mention sharutils. 2011-01-28 Simon Josefsson * users.txt: Mention OATH Toolkit. 2011-01-27 Bruno Haible Prepare for supporting FreeBSD 10. * build-aux/config.libpath: Remove handling of freebsd1*. 2011-01-27 Gerald Pfeifer (tiny change) Prepare for supporting FreeBSD 10. * build-aux/config.rpath: Remove handling of freebsd1* which soon would match FreeBSD 10.0. 2011-01-27 Bruno Haible vma-iter, get-rusage-as: Add OpenBSD support. * modules/vma-iter (configure.ac): Test for mquery. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on OpenBSD. * lib/vma-iter.c: Include . (vma_iterate): Add an implementation based on mquery(). * lib/resource-ext.h (get_rusage_as): Update comments. * lib/get-rusage-as.c: Likewise. * lib/get-rusage-data.c: Likewise. 2011-01-26 Karl Berry * doc/Makefile (lang_env, makeinfo_prog, manual_opts): new variables to make it easier to override the makeinfo program used. 2011-01-26 Eric Blake fcntl: work around Haiku F_DUPFD bugs * m4/fcntl.m4 (gl_FUNC_FCNTL): Also catch Haiku errno bug. * lib/fcntl.c (rpl_fcntl) [F_DUPFD]: Work around Haiku losing cloexec bit on duplication. * doc/posix-functions/fcntl.texi (fcntl): Document the bug. 2011-01-26 Bruno Haible Enable memory leak tests on AIX. * tests/test-dprintf-posix2.c (main): Don't skip the test on AIX. * tests/test-fprintf-posix3.c (main): Likewise. 2011-01-26 Bruno Haible Tests for module 'get-rusage-data'. * modules/get-rusage-data-tests: New file. * tests/test-get-rusage-data.c: New file. New module 'get-rusage-data'. * lib/resource-ext.h (get_rusage_data): New declaration. * lib/get-rusage-data.c: New file. * modules/get-rusage-data: New file. 2011-01-25 Bruno Haible get-rusage-as: Allow for easier testing. * lib/resource-ext.h (get_rusage_as): Add comment. * lib/get-rusage-as.c (get_rusage_as_via_setrlimit): Define always. (main): New function for interactive testing. 2011-01-25 Bruno Haible vma-iter: Treat Haiku like BeOS. * lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define on Haiku as well. * lib/vma-iter.c (vma_iterate) [Haiku]: Use the BeOS API. 2011-01-25 Eric Blake c-stack: fix regression on cygwin when libsigsegv is present * lib/c-stack.c (die): Don't flatten error if sigsegv is present. 2011-01-24 Bruno Haible vma-iter: Avoid empty intervals. * lib/vma-iter.c (vma_iterate) [IRIX, OSF/1]: Don't call the callback on an empty interval. 2011-01-24 Jim Meyering u64: remove unnecessary #include * lib/u64.h: Don't include . It was not used. 2011-01-23 Paul Eggert Allow the user to avoid the HAVE_RAW_DECL_* macros. * m4/gnulib-common.m4 (gl_ASSERT_NO_GNULIB_POSIXCHECK): New macro. 2011-01-23 Bruno Haible New module 'vma-iter'. * lib/vma-iter.h: New file. * lib/vma-iter.c: New file, based on lib/get-rusage-as.c. * modules/vma-iter: New file. * lib/get-rusage-as.c: Include vma-iter.h. Don't include system headers for get_rusage_as_via_iterator. (vma_iterate_callback): New function. (get_rusage_as_via_iterator): Rewritten to use vma_iterate. * modules/get-rusage-as (Depends-on): Add vma-iter. 2011-01-23 Bruno Haible uninorm: Tweak includes. * lib/uninorm/normalize-internal.h: Don't include . Reported by Jim Meyering. 2011-01-23 Bruno Haible get-rusage-as: Improve on NetBSD. * lib/get-rusage-as.c (get_rusage_as_via_iterator): On NetBSD, use /proc, like on FreeBSD. 2011-01-23 Jim Meyering xreadlink.h: remove unnecessary #include * lib/xreadlink.h: Don't include . It was not used. maint.mk: add syntax-check rule: detect unnecessary #include * top/maint.mk (sc_prohibit_stddef_without_use): New rule. 2011-01-23 Bruno Haible get-rusage-as: Fix bug. * lib/get-rusage-as.c (get_rusage_as_via_setrlimit): Restore the original limit when aborting the first loop. 2011-01-23 Bruno Haible wctype: Ensure valid C syntax. * m4/wctype_h.m4 (gl_WCTYPE_H): Invoke gl_CHECK_NEXT_HEADERS unconditionally, instead of gl_NEXT_HEADERS conditionally. 2011-01-21 Paul Eggert getopt: omit HAVE_OPTRESET, HAVE_GETOPT_CLIP from config.h * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Do not put the symbols HAVE_OPTRESET and HAVE_GETOPT_CLIP into config.h, as they are needed only for configure's test case. This removes two unnecessary symbols from config.h. gl_CHECK_NEXT_HEADERS implies AC_CHECK_HEADERS_ONCE * m4/include_next.m4 (gl_CHECK_HEXT_HEADERS): Document this. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Don't bother to invoke AC_CHECK_HEADERS_ONCE on a header that we also invoke gl_CHECK_NEXT_HEADERS on, since the latter invokes the former. * m4/netdb_h.m4 (gl_HEADER_NETDB): Likewise. * m4/pthread.m4 (gl_PTHREAD_CHECK): Likewise. * m4/sched_h.m4 (gl_SCHED_H): Likewise. * m4/search_h.m4 (gl_SEARCH_H): Likewise. * m4/spawn_h.m4 (gl_SPAWN_H): Likewise. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_H): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H): Likewise. * m4/termios_h.m4 (gl_TERMIOS_H): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H): Likewise. * m4/wctype_h.m4 (gl_WCTYPE_H): Likewise. 2011-01-21 Eric Blake maintainer-makefile: work with older git for submodule check * top/maint.mk (public-submodule-commit): Rewrite to avoid merge-base --independent, which Ubuntu 10.04 git 1.7.0.4 lacks. Reported by Matthias Bolte. bootstrap: minor portability fixes * build-aux/bootstrap (me): Use $me instead of $0 in functions. (usage): Omit leading capital and trailing . on help phrases, per GNU Coding Standards. (check_versions, top level): Prefix messages with script name. 2011-01-21 Benjamin Lindner (tiny change) bootstrap: support --no-git option * build-aux/bootstrap: Add --no-git option, to be used when --gnulib-srcdir points to the exact desired checkout. 2011-01-21 Eric Blake strerror_r-posix: work with glibc 2.13 * lib/strerror_r.c (strerror_r): Fix return type. 2011-01-21 Pádraig Brady Bruno Haible uN_strstr: New unit tests. * modules/unistr/u8-strstr-tests: New file. * modules/unistr/u16-strstr-tests: New file. * modules/unistr/u32-strstr-tests: New file. * tests/unistr/test-u-strstr.h: New file, based on tests/test-strstr.c. * tests/unistr/test-u8-strstr.c: New file. * tests/unistr/test-u16-strstr.c: New file. * tests/unistr/test-u32-strstr.c: New file. 2011-01-21 Pádraig Brady Bruno Haible Make uN_strstr functions O(n) worst-case. * lib/unistr/u-strstr.h (FUNC): In the 8-bit case, use strstr. In the 16-bit and 32-bit unit cases, use the unibyte algorithm from lib/mbsstr.c. * lib/unistr/u8-strstr.c: Include . (UNIT_IS_UINT8_T): New macro. * lib/unistr/u16-strstr.c: Include malloca.h and str-kmp.h. (U_STRLEN, U_STRNLEN): New macros. * lib/unistr/u32-strstr.c: Include malloca.h and str-kmp.h. (U_STRLEN, U_STRNLEN): New macros. * modules/unistr/u8-strstr (Depends-on): Add strstr. (configure.ac): Update required libunistring version. * modules/unistr/u16-strstr (Files): Add lib/str-kmp.h. (Depends-on): Add unistr/u16-strlen, unistr/u16-strnlen, stdbool, malloca. (configure.ac): Update required libunistring version. * modules/unistr/u32-strstr (Files): Add lib/str-kmp.h. (Depends-on): Add unistr/u32-strlen, unistr/u32-strnlen, stdbool, malloca. (configure.ac): Update required libunistring version. 2011-01-21 Pádraig Brady Bruno Haible Prepare for faster uN_strstr functions. * lib/str-kmp.h: Support definable UNITs. (knuth_morris_pratt): Renamed from knuth_morris_pratt_unibyte. Add needle_len argument. * lib/mbsstr.c (mbsstr): Adjust for the changed str-kmp.h. * lib/mbscasestr.c (mbscasestr): Likewise. 2011-01-21 Pádraig Brady malloca-tests: make faster by unsetting MALLOC_PERTURB_ * tests/test-malloca.c (main): Unset the environment variable to greatly speed up the test. * tests/init.sh: Don't say that MALLOC_PERTURB_ is cheap. * modules/malloca-tests: Depend on unsetenv. 2011-01-21 Pádraig Brady ignore-value: remove stdint dependency * lib/ignore-value.h: Remove * modules/ignore-value: Remove stdint dependency. 2011-01-21 Jim Meyering maint.mk: adjust variable name to be consistent with other gl_ vars * top/maint.mk (gl_public_submodule_commit): Rename the variable to be lower case. 2011-01-20 Jim Meyering maint.mk: make "check" depend on public-submodule-commit by default * top/maint.mk (GL_PUBLIC_SUBMODULE_COMMIT): New overridable variable. 2011-01-20 Bruno Haible mbfile, mbiter: Complete change from 2008-12-21. * m4/mbfile.m4 (gl_MBFILE): Don't require AC_FUNC_MBRTOWC. * m4/mbiter.m4 (gl_MBITER): Likewise. 2011-01-20 Jim Meyering init.sh: insert space between each function name and "()" * tests/init.sh: Make it a little easier to see that a function's name is "warn_", and not "warn" when looking at the first part of its definition: "warn_ ()". Suggested by Ralf Wildenhues. 2011-01-20 Jim Meyering mountlist: clean up code formatting * lib/mountlist.c (read_file_system_list): Split a long line, correct bracing style, use NULL in place of "(struct statfs *)0", don't parenthesize return value, add spaces around "=" and after ";-in-for-stmt". 2011-01-14 Markus Duft mountlist: add support for Interix * lib/mountlist.c (read_file_system_list) [MOUNTED_INTERIX_STATVFS]: Apply statvfs to all entries of /dev/fs. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Check for statvfs, and if found, AC_DEFINE MOUNTED_INTERIX_STATVFS. 2011-01-20 Jim Meyering maint.mk: improve the public-submodule-commit rule * top/maint.mk (public-submodule-commit): Prefix with $(AM_V_GEN), to suppress printing of its commands... unless V=1. Add git submodule's --quiet option to suppress printing of e.g., "Entering gnulib" output. "cd" into $(srcdir) before running git submodule. 2011-01-20 Bruno Haible include_next: Fix bug introduced on 2011-01-18. * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): New macro, extracted from gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. Omit test of ac_cv_header_... variable if the second argument is not 'check'. (gl_CHECK_NEXT_HEADERS, gl_NEXT_HEADERS): Invoke gl_NEXT_HEADERS_INTERNAL. 2011-01-20 Bruno Haible Allow the user to avoid the GNULIB_TEST_* macros. * m4/gnulib-common.m4 (gl_ASSERT_NO_GNULIB_TESTS): New macro. Suggested by Paul Eggert. 2011-01-14 Jim Meyering bootstrap: avoid failure when there is no .gitmodules file ": ${gnulib_path=gnulib}" fails to set $gnulib_path when that variable has been assigned to, even when its value is the empty string. * build-aux/bootstrap (gnulib_path): Test explicitly for an empty "$gnulib_path", rather than using ${gnulib_path=gnulib}. Reported by John W. Eaton . 2011-01-19 Paul Eggert assume , ..., exist For years gnulib has been assuming the existence of the headers , , , , , , , , and . Omit checks for them, since they don't appear to be needed. * README (Portability guidelines): Document this. * lib/flock.c: Assume exists. * lib/regex_internal.h: Assume exists. * m4/ctype.m4 (gl_CTYPE_H): Assume exists. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Assume exists. * m4/fcntl_h.m4 (gl_FCNTL_H): Assume exists. * m4/flock.m4 (gl_PREREQ_FLOCK): Likewise. * m4/locale_h.m4 (gl_LOCALE_H): Assume exists. * m4/regex.m4 (gl_REGEX): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Assume exists. * m4/stdio_h.m4 (gl_STDIO_H): Assume exists. * m4/stdlib_h.m4 (gl_STDLIB_H): Assume exists. * m4/string_h.m4 (gl_STRING_H): Assume exists. * tests/test-argp.c: Likewise. * m4/time_h.m4 (gl_HEADER_TIME_H_BODY): Assume exists. multiarch: remove AA_APPLE_UNIVERSAL_BUILD * m4/multiarch.m4 (gl_MULTIARCH): Don't AC_DEFINE AA_APPLE_UNIVERSAL_BUILD. See . * NEWS: Document this. 2011-01-19 Eric Blake c-stack: assume stack overflow if SA_SIGINFO unsupported * lib/c-stack.c (SIGACTION_WORKS): Rename... (SIGINFO_WORKS): ...since gnulib module guarantees that (most) of sigaction will work. (die): Assume stack overflow if siginfo doesn't work, to let Haiku behavior match Linux. * tests/test-c-stack.c (main): Prefer NULL for pointers. stdbool-tests: accommodate Haiku * tests/test-stdbool.c: Haiku's gcc 2.95 lacks native _Bool. binary-io: fix O_TEXT on Haiku * modules/binary-io (Depends-on): Add fcntl-h. * lib/binary-io.h (O_TEXT): Rely on replacement rather than blindly undefining O_TEXT. Reported by Scott McCreary. 2011-01-18 Paul Eggert include_next: do not check for standard headers like stddef.h I found this problem when modifying Emacs to use gnulib. I noticed that it added HAVE_STDDEF_H to config.h, even though gnulib always assumes exists as per README and this symbol is unnecessary. * m4/include_next.m4 (gl_NEXT_HEADERS): New macro, which does not use AC_CHECK_HEADERS_ONCE, but which otherwise contains what gl_CHECK_NEXT_HEADERS used to contain. This makes 'configure' run faster for headers like stddef.h that are known to exist. (gl_CHECK_NEXT_HEADERS): Use it. * m4/float_h.m4 (gl_FLOAT_H): For float.h, use gl_NEXT_HEADERS rather than gl_CHECK_NEXT_HEADERS. * m4/stdarg.m4 (gl_STDARG_H): Likewise, for stdarg.h. * m4/stddef_h.m4 (gl_STDDEF_H): Likewise, for stddef.h. 2011-01-18 Eric Blake ansi-c++-opt: skip C++ dependency style if C++ is unused * m4/ansi-c++.m4 (gl_PROG_ANSI_CXX): Avoid full-blown dependency tests when we know C++ compilation is not desired. Reported by Scott McCreary. 2011-01-18 Bruno Haible *printf-posix: Avoid test failures. Make tests work on MacOS X, Cygwin. * tests/test-fprintf-posix3.c: Include "resource-ext.h". (main): Perform test also when getrlimit and setrlimit don't exist or when setrlimit of RLIMIT_DATA fails (like on Cygwin). Instead of limiting the address space size using setrlimit, compare the address space size before and after the test. * tests/test-dprintf-posix2.c: Likewise. * tests/test-fprintf-posix3.sh: Update skip messages. * tests/test-dprintf-posix2.sh: Likewise. * modules/fprintf-posix-tests (Depends-on): Add get-rusage-as. * modules/dprintf-posix-tests (Depends-on): Likewise. Reported by Bruce Korb and Gary V. Vaughan . 2011-01-18 Bruno Haible get-rusage-as: Improvement for Cygwin. * lib/get-rusage-as.c (get_rusage_as_via_iterator): On Windows, ignore areas that are merely reserved. 2011-01-18 Paul Eggert strftime: remove dependencies on multibyte modules strftime depended on mbrlen, mbsinit, and wchar, but these modules are needed only if ! MULTIBYTE_IS_FORMAT_SAFE, and that is true only if __osf__ is defined, and I suspect OSF doesn't need these other modules. If my guess is wrong, we'll need to come up with a variant of strftime that doesn't need the multibyte modules. I discovered this problem when attempting modify Emacs to use the strftime module. With the previous gnulib, this caused Emacs to need 31 new files, ranging from lib/config.charset to m4/wint_t.m4. This was overkill and I expect would be offputting to the Emacs maintainers. After this change, only 6 new files are needed, namely strftime.[ch], srtftime.m4, stdbool.in.h, stdbool.m4, and tm_gmtoff.m4. * lib/strftime.c (MULTIBYTE_IS_FORMAT_SAFE): Define to 1 always. Suggested by Bruno Haible in . * m4/strftime.m4 (gl_FUNC_STRFTIME): Do not require AC_TYPE_MBSTATE_T, and do not check for wchar.h. * modules/strftime (Files): Remove m4/mbstate_t.m4. (Depends-on): Remove mbrlen, mbsinit, wchar. 2011-01-18 Bruno Haible Tests for module 'get-rusage-as'. * modules/get-rusage-as-tests: New file. * tests/test-get-rusage-as.c: New file. New module 'get-rusage-as'. * modules/get-rusage-as: New file. * lib/resource-ext.h: New file. * lib/get-rusage-as.c: New file. 2011-01-17 Eric Blake sigaction: relax license from LGPLv3+ to LGPLv2+ * modules/sigaction (License): Relax to LGPLv2+. 2011-01-14 Bruno Haible filemode: Make function declarations usable in C++ mode. * lib/filemode.h: Enclose function declarations in extern "C" block. Reported by John W. Eaton . 2011-01-12 Rob Vermaas save-cwd: no longer include "xgetcwd.h" * lib/save-cwd.c: Don't include "xgetcwd.h"; it's no longer used. This avoids a compilation failure in projects that use save-cwd without also using the xgetcwd module. 2011-01-11 Paul Eggert ftoastr: split into 3 modules ftoastr, dtoastr, ldtoastr This is so that a program like Emacs, which needs only dtoastr, does not have to bother with distributing and compiling ftoastr and ldtoastr. * MODULES.html.sh: Document these modules (ftoastr wasn't documented). * modules/dtoastr, modules/ldtoastr: New files. * modules/ftoastr: Now works just for 'float'. (Files): Remove lib/dtoastr.c, lib/ldtoastr.c. (Makefile.am): Remove ftoastr.h (not needed and no effect), dtoastr.c, ldtoastr.c. 2011-01-11 Jim Meyering save-cwd: remove #if-!HAVE_FCHDIR'd code; use the fchdir module There is no need to work around the lack of the fchdir function, since gnulib can now provide a replacement when required. * lib/save-cwd.c: Remove #if !HAVE_FCHDIR...#endif code. * modules/save-cwd (Depends-on): Add fchdir. 2011-01-11 Paul Eggert openat, save-cwd: avoid xmalloc This removes a direct (but undocumented) dependency of openat on xalloc, along with an indirect dependency via save-cwd. It also removes a dependency of save-cwd on xgetcwd, and thereby indirectly on xalloc. This change causes the openat substitute to fall back on save_cwd when memory is tight, and for save_cwd to fail instead of dying when memory is tight, but that's good enough. Problem and initial idea for fix reported by Bastien Roucaries in . * lib/openat-proc.c: Include stdlib.h (for malloc), not xalloc.h (for xmalloc). (openat_proc_name): Use malloc, not xmalloc. * lib/save-cwd.c (save_cwd): Use getcwd, not xgetcwd. * modules/save-cwd (Files): Depend on getcwd, not xgetcwd. openat: Increase OPENAT_BUFFER_SIZE from 512 to at least 1024 This avoids heap allocation for file names whose lengths are in the range 512..1023, with the upper bound increasing to at most 4031 depending on the platform's PATH_MAX. (We do not want pathmax.h here as it might supply a non-constant PATH_MAX.) * lib/openat-priv.h (SAFER_ALLOCA_MAX, SAFER_ALLOCA): New macros. Perhaps they should be moved to malloca.h? (OPENAT_BUFFER_SIZE): Use them. 2011-01-10 Bruno Haible doc: Update users.txt. * users.txt: Add recutils. 2011-01-09 Karl Berry * doc/posix-functions/gai_strerror.texi: Insert missing @item. * doc/configmake.texi: New file. * doc/gnulib.texi: Include it. * modules/configmake: Move documentation from here. 2011-01-09 Bruno Haible Update to Unicode 6.0.0. * lib/gen-uni-tables.c (symbolic_width): Fix bounds of planes. (get_lbp): Update for Unicode 6.0.0. * lib/uniwidth/width.c (nonspacing_table_data): Add U+065F, U+0859..U+085B, U+093A, U+0956..U+0957, U+0F8D..U+0F8F, U+135D..U+135E, U+1BE6, U+1BE8..U+1BE9, U+1BED, U+1BEF..U+1BF1, U+1DFC, U+2D7F, U+11001, U+11038..U+11046. Remove U+06DE. (uc_width): Fix bounds of planes. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * tests/unigbrk/GraphemeBreakTest.txt: Copied from Unicode 6.0.0, with trailing whitespace removed. * tests/uninorm/NormalizationTest.txt: Update from Unicode 6.0.0, without comments, but with the original copyright notice. * lib/unicase/cased.h: Regenerated for Unicode 6.0.0. * lib/unicase/ignorable.h: Likewise. * lib/unicase/tocasefold.h: Likewise. * lib/unicase/tolower.h: Likewise. * lib/unicase/totitle.h: Likewise. * lib/unicase/toupper.h: Likewise. * lib/unictype/bidi_of.h: Likewise. * lib/unictype/blocks.h: Likewise. * lib/unictype/categ_C.h: Likewise. * lib/unictype/categ_Cn.h: Likewise. * lib/unictype/categ_L.h: Likewise. * lib/unictype/categ_Ll.h: Likewise. * lib/unictype/categ_Lm.h: Likewise. * lib/unictype/categ_Lo.h: Likewise. * lib/unictype/categ_Lu.h: Likewise. * lib/unictype/categ_M.h: Likewise. * lib/unictype/categ_Mc.h: Likewise. * lib/unictype/categ_Me.h: Likewise. * lib/unictype/categ_Mn.h: Likewise. * lib/unictype/categ_N.h: Likewise. * lib/unictype/categ_Nd.h: Likewise. * lib/unictype/categ_No.h: Likewise. * lib/unictype/categ_P.h: Likewise. * lib/unictype/categ_Po.h: Likewise. * lib/unictype/categ_S.h: Likewise. * lib/unictype/categ_Sc.h: Likewise. * lib/unictype/categ_Sk.h: Likewise. * lib/unictype/categ_Sm.h: Likewise. * lib/unictype/categ_So.h: Likewise. * lib/unictype/categ_of.h: Likewise. * lib/unictype/combining.h: Likewise. * lib/unictype/ctype_alnum.h: Likewise. * lib/unictype/ctype_alpha.h: Likewise. * lib/unictype/ctype_graph.h: Likewise. * lib/unictype/ctype_lower.h: Likewise. * lib/unictype/ctype_print.h: Likewise. * lib/unictype/ctype_punct.h: Likewise. * lib/unictype/ctype_upper.h: Likewise. * lib/unictype/decdigit.h: Likewise. * lib/unictype/digit.h: Likewise. * lib/unictype/numeric.h: Likewise. * lib/unictype/pr_alphabetic.h: Likewise. * lib/unictype/pr_bidi_arabic_digit.h: Likewise. * lib/unictype/pr_bidi_arabic_right_to_left.h: Likewise. * lib/unictype/pr_bidi_boundary_neutral.h: Likewise. * lib/unictype/pr_bidi_eur_num_terminator.h: Likewise. * lib/unictype/pr_bidi_hebrew_right_to_left.h: Likewise. * lib/unictype/pr_bidi_left_to_right.h: Likewise. * lib/unictype/pr_bidi_non_spacing_mark.h: Likewise. * lib/unictype/pr_bidi_other_neutral.h: Likewise. * lib/unictype/pr_case_ignorable.h: Likewise. * lib/unictype/pr_cased.h: Likewise. * lib/unictype/pr_changes_when_casefolded.h: Likewise. * lib/unictype/pr_changes_when_casemapped.h: Likewise. * lib/unictype/pr_changes_when_lowercased.h: Likewise. * lib/unictype/pr_changes_when_titlecased.h: Likewise. * lib/unictype/pr_changes_when_uppercased.h: Likewise. * lib/unictype/pr_combining.h: Likewise. * lib/unictype/pr_composite.h: Likewise. * lib/unictype/pr_currency_symbol.h: Likewise. * lib/unictype/pr_decimal_digit.h: Likewise. * lib/unictype/pr_deprecated.h: Likewise. * lib/unictype/pr_format_control.h: Likewise. * lib/unictype/pr_grapheme_base.h: Likewise. * lib/unictype/pr_grapheme_extend.h: Likewise. * lib/unictype/pr_grapheme_link.h: Likewise. * lib/unictype/pr_id_continue.h: Likewise. * lib/unictype/pr_id_start.h: Likewise. * lib/unictype/pr_ideographic.h: Likewise. * lib/unictype/pr_lowercase.h: Likewise. * lib/unictype/pr_math.h: Likewise. * lib/unictype/pr_numeric.h: Likewise. * lib/unictype/pr_other_alphabetic.h: Likewise. * lib/unictype/pr_other_id_continue.h: Likewise. * lib/unictype/pr_other_math.h: Likewise. * lib/unictype/pr_punctuation.h: Likewise. * lib/unictype/pr_sentence_terminal.h: Likewise. * lib/unictype/pr_terminal_punctuation.h: Likewise. * lib/unictype/pr_unassigned_code_value.h: Likewise. * lib/unictype/pr_unified_ideograph.h: Likewise. * lib/unictype/pr_uppercase.h: Likewise. * lib/unictype/pr_xid_continue.h: Likewise. * lib/unictype/pr_xid_start.h: Likewise. * lib/unictype/scripts.h: Likewise. * lib/unictype/scripts_byname.gperf: Likewise. * lib/unictype/sy_java_ident.h: Likewise. * lib/unigbrk/gbrkprop.h: Likewise. * lib/unilbrk/lbrkprop1.h: Likewise. * lib/unilbrk/lbrkprop2.h: Likewise. * lib/uninorm/decomposition-table2.h: Likewise. * lib/uniwbrk/wbrkprop.h: Likewise. * tests/unicase/test-cased.c: Likewise. * tests/unicase/test-ignorable.c: Likewise. * tests/unicase/test-uc_tolower.c: Likewise. * tests/unicase/test-uc_totitle.c: Likewise. * tests/unicase/test-uc_toupper.c: Likewise. * tests/unictype/test-categ_C.c: Likewise. * tests/unictype/test-categ_Cn.c: Likewise. * tests/unictype/test-categ_L.c: Likewise. * tests/unictype/test-categ_Ll.c: Likewise. * tests/unictype/test-categ_Lm.c: Likewise. * tests/unictype/test-categ_Lo.c: Likewise. * tests/unictype/test-categ_Lu.c: Likewise. * tests/unictype/test-categ_M.c: Likewise. * tests/unictype/test-categ_Mc.c: Likewise. * tests/unictype/test-categ_Me.c: Likewise. * tests/unictype/test-categ_Mn.c: Likewise. * tests/unictype/test-categ_N.c: Likewise. * tests/unictype/test-categ_Nd.c: Likewise. * tests/unictype/test-categ_No.c: Likewise. * tests/unictype/test-categ_P.c: Likewise. * tests/unictype/test-categ_Po.c: Likewise. * tests/unictype/test-categ_S.c: Likewise. * tests/unictype/test-categ_Sc.c: Likewise. * tests/unictype/test-categ_Sk.c: Likewise. * tests/unictype/test-categ_Sm.c: Likewise. * tests/unictype/test-categ_So.c: Likewise. * tests/unictype/test-ctype_alnum.c: Likewise. * tests/unictype/test-ctype_alpha.c: Likewise. * tests/unictype/test-ctype_graph.c: Likewise. * tests/unictype/test-ctype_lower.c: Likewise. * tests/unictype/test-ctype_print.c: Likewise. * tests/unictype/test-ctype_punct.c: Likewise. * tests/unictype/test-ctype_upper.c: Likewise. * tests/unictype/test-decdigit.h: Likewise. * tests/unictype/test-digit.h: Likewise. * tests/unictype/test-numeric.h: Likewise. * tests/unictype/test-pr_alphabetic.c: Likewise. * tests/unictype/test-pr_bidi_arabic_digit.c: Likewise. * tests/unictype/test-pr_bidi_arabic_right_to_left.c: Likewise. * tests/unictype/test-pr_bidi_boundary_neutral.c: Likewise. * tests/unictype/test-pr_bidi_eur_num_terminator.c: Likewise. * tests/unictype/test-pr_bidi_hebrew_right_to_left.c: Likewise. * tests/unictype/test-pr_bidi_left_to_right.c: Likewise. * tests/unictype/test-pr_bidi_non_spacing_mark.c: Likewise. * tests/unictype/test-pr_bidi_other_neutral.c: Likewise. * tests/unictype/test-pr_case_ignorable.c: Likewise. * tests/unictype/test-pr_cased.c: Likewise. * tests/unictype/test-pr_changes_when_casefolded.c: Likewise. * tests/unictype/test-pr_changes_when_casemapped.c: Likewise. * tests/unictype/test-pr_changes_when_lowercased.c: Likewise. * tests/unictype/test-pr_changes_when_titlecased.c: Likewise. * tests/unictype/test-pr_changes_when_uppercased.c: Likewise. * tests/unictype/test-pr_combining.c: Likewise. * tests/unictype/test-pr_composite.c: Likewise. * tests/unictype/test-pr_currency_symbol.c: Likewise. * tests/unictype/test-pr_decimal_digit.c: Likewise. * tests/unictype/test-pr_deprecated.c: Likewise. * tests/unictype/test-pr_format_control.c: Likewise. * tests/unictype/test-pr_grapheme_base.c: Likewise. * tests/unictype/test-pr_grapheme_extend.c: Likewise. * tests/unictype/test-pr_grapheme_link.c: Likewise. * tests/unictype/test-pr_id_continue.c: Likewise. * tests/unictype/test-pr_id_start.c: Likewise. * tests/unictype/test-pr_ideographic.c: Likewise. * tests/unictype/test-pr_lowercase.c: Likewise. * tests/unictype/test-pr_math.c: Likewise. * tests/unictype/test-pr_numeric.c: Likewise. * tests/unictype/test-pr_other_alphabetic.c: Likewise. * tests/unictype/test-pr_other_id_continue.c: Likewise. * tests/unictype/test-pr_other_math.c: Likewise. * tests/unictype/test-pr_punctuation.c: Likewise. * tests/unictype/test-pr_sentence_terminal.c: Likewise. * tests/unictype/test-pr_terminal_punctuation.c: Likewise. * tests/unictype/test-pr_unassigned_code_value.c: Likewise. * tests/unictype/test-pr_unified_ideograph.c: Likewise. * tests/unictype/test-pr_uppercase.c: Likewise. * tests/unictype/test-pr_xid_continue.c: Likewise. * tests/unictype/test-pr_xid_start.c: Likewise. * tests/unigbrk/test-uc-gbrk-prop.h: Likewise. * lib/unicase/special-casing-table.gperf: Regenerated; only comment changes. * lib/unictype/categ_Cc.h: Likewise. * lib/unictype/categ_Cf.h: Likewise. * lib/unictype/categ_Co.h: Likewise. * lib/unictype/categ_Cs.h: Likewise. * lib/unictype/categ_Lt.h: Likewise. * lib/unictype/categ_Nl.h: Likewise. * lib/unictype/categ_Pc.h: Likewise. * lib/unictype/categ_Pd.h: Likewise. * lib/unictype/categ_Pe.h: Likewise. * lib/unictype/categ_Pf.h: Likewise. * lib/unictype/categ_Pi.h: Likewise. * lib/unictype/categ_Ps.h: Likewise. * lib/unictype/categ_Z.h: Likewise. * lib/unictype/categ_Zl.h: Likewise. * lib/unictype/categ_Zp.h: Likewise. * lib/unictype/categ_Zs.h: Likewise. * lib/unictype/ctype_blank.h: Likewise. * lib/unictype/ctype_cntrl.h: Likewise. * lib/unictype/ctype_digit.h: Likewise. * lib/unictype/ctype_space.h: Likewise. * lib/unictype/ctype_xdigit.h: Likewise. * lib/unictype/mirror.h: Likewise. * lib/unictype/pr_ascii_hex_digit.h: Likewise. * lib/unictype/pr_bidi_block_separator.h: Likewise. * lib/unictype/pr_bidi_common_separator.h: Likewise. * lib/unictype/pr_bidi_control.h: Likewise. * lib/unictype/pr_bidi_embedding_or_override.h: Likewise. * lib/unictype/pr_bidi_eur_num_separator.h: Likewise. * lib/unictype/pr_bidi_european_digit.h: Likewise. * lib/unictype/pr_bidi_pdf.h: Likewise. * lib/unictype/pr_bidi_segment_separator.h: Likewise. * lib/unictype/pr_bidi_whitespace.h: Likewise. * lib/unictype/pr_dash.h: Likewise. * lib/unictype/pr_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_diacritic.h: Likewise. * lib/unictype/pr_extender.h: Likewise. * lib/unictype/pr_hex_digit.h: Likewise. * lib/unictype/pr_hyphen.h: Likewise. * lib/unictype/pr_ids_binary_operator.h: Likewise. * lib/unictype/pr_ids_trinary_operator.h: Likewise. * lib/unictype/pr_ignorable_control.h: Likewise. * lib/unictype/pr_iso_control.h: Likewise. * lib/unictype/pr_join_control.h: Likewise. * lib/unictype/pr_left_of_pair.h: Likewise. * lib/unictype/pr_line_separator.h: Likewise. * lib/unictype/pr_logical_order_exception.h: Likewise. * lib/unictype/pr_non_break.h: Likewise. * lib/unictype/pr_not_a_character.h: Likewise. * lib/unictype/pr_other_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_other_grapheme_extend.h: Likewise. * lib/unictype/pr_other_id_start.h: Likewise. * lib/unictype/pr_other_lowercase.h: Likewise. * lib/unictype/pr_other_uppercase.h: Likewise. * lib/unictype/pr_paired_punctuation.h: Likewise. * lib/unictype/pr_paragraph_separator.h: Likewise. * lib/unictype/pr_pattern_syntax.h: Likewise. * lib/unictype/pr_pattern_white_space.h: Likewise. * lib/unictype/pr_private_use.h: Likewise. * lib/unictype/pr_quotation_mark.h: Likewise. * lib/unictype/pr_radical.h: Likewise. * lib/unictype/pr_soft_dotted.h: Likewise. * lib/unictype/pr_space.h: Likewise. * lib/unictype/pr_titlecase.h: Likewise. * lib/unictype/pr_variation_selector.h: Likewise. * lib/unictype/pr_white_space.h: Likewise. * lib/unictype/pr_zero_width.h: Likewise. * lib/unictype/sy_c_ident.h: Likewise. * lib/unictype/sy_c_whitespace.h: Likewise. * lib/unictype/sy_java_whitespace.h: Likewise. * lib/uninorm/composition-table.gperf: Likewise. * lib/uninorm/decomposition-table1.h: Likewise. * tests/unilbrk/test-u8-possible-linebreaks.c (main): Add test for rule LB8. * tests/unilbrk/test-u16-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-u32-possible-linebreaks.c (main): Likewise. * modules/unictype/*: Bump version number of expected libunistring version. 2011-01-09 Bruno Haible Update to Unicode 5.2.0. * tests/unigbrk/GraphemeBreakTest.txt: Copied from Unicode 5.2.0, with trailing whitespace removed. 2011-01-09 Bruno Haible New Unicode character properties, from Unicode 5.2.0. * lib/unictype.in.h (UC_PROPERTY_CASED, UC_PROPERTY_CASE_IGNORABLE, UC_PROPERTY_CHANGES_WHEN_LOWERCASED, UC_PROPERTY_CHANGES_WHEN_UPPERCASED, UC_PROPERTY_CHANGES_WHEN_TITLECASED, UC_PROPERTY_CHANGES_WHEN_CASEFOLDED, UC_PROPERTY_CHANGES_WHEN_CASEMAPPED, uc_is_property_cased, uc_is_property_case_ignorable, uc_is_property_changes_when_lowercased, uc_is_property_changes_when_uppercased, uc_is_property_changes_when_titlecased, uc_is_property_changes_when_casefolded, uc_is_property_changes_when_casemapped): New declarations. * lib/unictype/pr_byname.gperf: Add the new properties. * modules/unictype/property-byname (Depends-on): Depend on the new properties modules. * modules/unictype/property-all (Depends-on): Likewise. * MODULES.html.sh (Unicode string functions): Add unictype/property-case-ignorable, unictype/property-cased, unictype/property-changes-when-casefolded, unictype/property-changes-when-casemapped, unictype/property-changes-when-lowercased, unictype/property-changes-when-titlecased, unictype/property-changes-when-uppercased. New module 'unictype/property-changes-when-casemapped'. * modules/unictype/property-changes-when-casemapped: New file. * lib/unictype/pr_changes_when_casemapped.c: New file. * lib/unictype/pr_changes_when_casemapped.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-changes-when-casemapped-tests: New file. * tests/unictype/test-pr_changes_when_casemapped.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-changes-when-casefolded'. * modules/unictype/property-changes-when-casefolded: New file. * lib/unictype/pr_changes_when_casefolded.c: New file. * lib/unictype/pr_changes_when_casefolded.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-changes-when-casefolded-tests: New file. * tests/unictype/test-pr_changes_when_casefolded.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-changes-when-titlecased'. * modules/unictype/property-changes-when-titlecased: New file. * lib/unictype/pr_changes_when_titlecased.c: New file. * lib/unictype/pr_changes_when_titlecased.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-changes-when-titlecased-tests: New file. * tests/unictype/test-pr_changes_when_titlecased.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-changes-when-uppercased'. * modules/unictype/property-changes-when-uppercased: New file. * lib/unictype/pr_changes_when_uppercased.c: New file. * lib/unictype/pr_changes_when_uppercased.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-changes-when-uppercased-tests: New file. * tests/unictype/test-pr_changes_when_uppercased.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-changes-when-lowercased'. * modules/unictype/property-changes-when-lowercased: New file. * lib/unictype/pr_changes_when_lowercased.c: New file. * lib/unictype/pr_changes_when_lowercased.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-changes-when-lowercased-tests: New file. * tests/unictype/test-pr_changes_when_lowercased.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-case-ignorable'. * modules/unictype/property-case-ignorable: New file. * lib/unictype/pr_case_ignorable.c: New file. * lib/unictype/pr_case_ignorable.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-case-ignorable-tests: New file. * tests/unictype/test-pr_case_ignorable.c: New file, automatically generated by gen-uni-tables. New module 'unictype/property-cased'. * modules/unictype/property-cased: New file. * lib/unictype/pr_cased.c: New file. * lib/unictype/pr_cased.h: New file, automatically generated by gen-uni-tables. * modules/unictype/property-cased-tests: New file. * tests/unictype/test-pr_cased.c: New file, automatically generated by gen-uni-tables. 2011-01-09 Bruno Haible Update to Unicode 5.2.0. * lib/gen-uni-tables.c (output_predicate, output_category, output_combclass, output_bidi_category, output_decimal_digit_test, output_decimal_digit, output_digit_test, output_digit, output_numeric_test, output_numeric, output_mirror, output_scripts, output_scripts_byname, output_blocks, output_ident_category): Fix comment header. (is_WBP_MIDNUMLET, is_WBP_MIDLETTER): New functions, extracted from get_wbp. (PROP_CASED, PROP_CASE_IGNORABLE, PROP_CHANGES_WHEN_*): New enumeration items. (fill_properties): Also fill the peoperties Cased, Case_Ignorable, Changes_When_Lowercased, Changes_When_Uppercased, Changes_When_Titlecased, Changes_When_Casefolded, Changes_When_Casemapped. (is_property_alphabetic, is_property_default_ignorable_code_point): Update for Unicode 5.2.0. (is_property_cased, is_property_case_ignorable, is_property_changes_when_lowercased, is_property_changes_when_uppercased, is_property_changes_when_titlecased, is_property_changes_when_casefolded, is_property_changes_when_casemapped): New functions. (output_properties): Output also the properties cased, case_ignorable, changes_when_lowercased, changes_when_uppercased, changes_when_titlecased, changes_when_casefolded, changes_when_casemapped. (symbolic_width): Update for Unicode 5.2.0, incorporating changes from Unicode TR#11 revision 17 -> 19. (LBP_CP): New enumeration value. (LBP_*): Adjust values accordingly. (get_lbp): Update for Unicode 5.2.0, incorporating changes from Unicode TR#14 revision 22 -> 24. (debug_output_lbp): Allow for LBP_* bits >= 32. Support LBP_CP. (fill_org_lbp, debug_output_org_lbp, output_lbp): Support LBP_CP. (get_wbp): Update for Unicode 5.2.0, incorporating changes from Unicode TR#29 revision 13 -> 15. Use functions is_WBP_MIDNUMLET, is_WBP_MIDLETTER. (output_composition_tables): Allow for 24 bits instead of 16 bits in the code1 and code2 of each composition rule. * lib/unicase/cased.h: Regenerated for Unicode 5.2.0. * lib/unicase/ignorable.h: Likewise. * lib/unicase/tocasefold.h: Likewise. * lib/unicase/tolower.h: Likewise. * lib/unicase/totitle.h: Likewise. * lib/unicase/toupper.h: Likewise. * lib/unictype/bidi_of.h: Likewise. * lib/unictype/blocks.h: Likewise. * lib/unictype/categ_C.h: Likewise. * lib/unictype/categ_Cf.h: Likewise. * lib/unictype/categ_Cn.h: Likewise. * lib/unictype/categ_L.h: Likewise. * lib/unictype/categ_Ll.h: Likewise. * lib/unictype/categ_Lm.h: Likewise. * lib/unictype/categ_Lo.h: Likewise. * lib/unictype/categ_Lu.h: Likewise. * lib/unictype/categ_M.h: Likewise. * lib/unictype/categ_Mc.h: Likewise. * lib/unictype/categ_Mn.h: Likewise. * lib/unictype/categ_N.h: Likewise. * lib/unictype/categ_Nd.h: Likewise. * lib/unictype/categ_Nl.h: Likewise. * lib/unictype/categ_No.h: Likewise. * lib/unictype/categ_P.h: Likewise. * lib/unictype/categ_Pd.h: Likewise. * lib/unictype/categ_Po.h: Likewise. * lib/unictype/categ_S.h: Likewise. * lib/unictype/categ_Sc.h: Likewise. * lib/unictype/categ_So.h: Likewise. * lib/unictype/categ_of.h: Likewise. * lib/unictype/combining.h: Likewise. * lib/unictype/ctype_alnum.h: Likewise. * lib/unictype/ctype_alpha.h: Likewise. * lib/unictype/ctype_graph.h: Likewise. * lib/unictype/ctype_lower.h: Likewise. * lib/unictype/ctype_print.h: Likewise. * lib/unictype/ctype_punct.h: Likewise. * lib/unictype/ctype_upper.h: Likewise. * lib/unictype/decdigit.h: Likewise. * lib/unictype/digit.h: Likewise. * lib/unictype/numeric.h: Likewise. * lib/unictype/pr_alphabetic.h: Likewise. * lib/unictype/pr_bidi_arabic_digit.h: Likewise. * lib/unictype/pr_bidi_eur_num_terminator.h: Likewise. * lib/unictype/pr_bidi_european_digit.h: Likewise. * lib/unictype/pr_bidi_hebrew_right_to_left.h: Likewise. * lib/unictype/pr_bidi_left_to_right.h: Likewise. * lib/unictype/pr_bidi_non_spacing_mark.h: Likewise. * lib/unictype/pr_bidi_other_neutral.h: Likewise. * lib/unictype/pr_combining.h: Likewise. * lib/unictype/pr_composite.h: Likewise. * lib/unictype/pr_currency_symbol.h: Likewise. * lib/unictype/pr_dash.h: Likewise. * lib/unictype/pr_decimal_digit.h: Likewise. * lib/unictype/pr_deprecated.h: Likewise. * lib/unictype/pr_diacritic.h: Likewise. * lib/unictype/pr_extender.h: Likewise. * lib/unictype/pr_grapheme_base.h: Likewise. * lib/unictype/pr_grapheme_extend.h: Likewise. * lib/unictype/pr_grapheme_link.h: Likewise. * lib/unictype/pr_id_continue.h: Likewise. * lib/unictype/pr_id_start.h: Likewise. * lib/unictype/pr_ideographic.h: Likewise. * lib/unictype/pr_ignorable_control.h: Likewise. * lib/unictype/pr_logical_order_exception.h: Likewise. * lib/unictype/pr_lowercase.h: Likewise. * lib/unictype/pr_numeric.h: Likewise. * lib/unictype/pr_other_alphabetic.h: Likewise. * lib/unictype/pr_punctuation.h: Likewise. * lib/unictype/pr_sentence_terminal.h: Likewise. * lib/unictype/pr_terminal_punctuation.h: Likewise. * lib/unictype/pr_unassigned_code_value.h: Likewise. * lib/unictype/pr_unified_ideograph.h: Likewise. * lib/unictype/pr_uppercase.h: Likewise. * lib/unictype/pr_xid_continue.h: Likewise. * lib/unictype/pr_xid_start.h: Likewise. * lib/unictype/pr_zero_width.h: Likewise. * lib/unictype/scripts.h: Likewise. * lib/unictype/scripts_byname.gperf: Likewise. * lib/unictype/sy_java_ident.h: Likewise. * lib/unigbrk/gbrkprop.h: Likewise. * lib/unilbrk/lbrkprop1.h: Likewise. * lib/unilbrk/lbrkprop2.h: Likewise. * lib/unilbrk/lbrktables.h: Likewise. * lib/unilbrk/lbrktables.c (unilbrk_table): Add a row and column for LBP_CP. Implement rule LB30. * lib/uniwidth/width.c (nonspacing_table_data): Add U+0816..U+0819, U+081B..U+0823, U+0825..U+0827, U+0829..U+082D, U+0900, U+0955, U+109D, U+1A56, U+1A58..U+1A5E, U+1A60, U+1A62, U+1A65..U+1A6C, U+1A73..U+1A7C, U+1A7F, U+1CD0..U+1CD2, U+1CD4..U+1CE0, U+1CE2..U+1CE8, U+1CED, U+1DFD, U+2CEF..U+2CF1, U+A6F0..U+A6F1, U+A8E0..U+A8F1, U+A980..U+A982, U+A9B3, U+A9B6..U+A9B9, U+A9BC, U+AAB0, U+AAB2..U+AAB4, U+AAB7..U+AAB8, U+AABE..U+AABF, U+AAC1, U+ABE5, U+ABE8, U+ABED, U+11080..U+11081, U+110B3..U+110B6, U+110B9..U+110BA, U+110BD. (uc_width): Return 2 also for unassigned code points of planes 2 and 3. * lib/uninorm/composition-table.gperf: Regenerated for Unicode 5.2.0. * lib/uninorm/composition.c (struct composition_rule): Allow for 24 bits instead of 16 bits in the code1 and code2 of each composition rule. (uc_composition): Update for Unicode 5.2.0. * lib/uninorm/decomposition-table1.h: Regenerated for Unicode 5.2.0. * lib/uninorm/decomposition-table2.h: Likewise. * lib/uniwbrk/wbrkprop.h: Likewise. * tests/unicase/test-cased.c: Likewise. * tests/unicase/test-ignorable.c: Likewise. * tests/unicase/test-uc_tolower.c: Likewise. * tests/unicase/test-uc_totitle.c: Likewise. * tests/unicase/test-uc_toupper.c: Likewise. * tests/unictype/test-categ_C.c: Likewise. * tests/unictype/test-categ_Cf.c: Likewise. * tests/unictype/test-categ_Cn.c: Likewise. * tests/unictype/test-categ_L.c: Likewise. * tests/unictype/test-categ_Ll.c: Likewise. * tests/unictype/test-categ_Lm.c: Likewise. * tests/unictype/test-categ_Lo.c: Likewise. * tests/unictype/test-categ_Lu.c: Likewise. * tests/unictype/test-categ_M.c: Likewise. * tests/unictype/test-categ_Mc.c: Likewise. * tests/unictype/test-categ_Mn.c: Likewise. * tests/unictype/test-categ_N.c: Likewise. * tests/unictype/test-categ_Nd.c: Likewise. * tests/unictype/test-categ_Nl.c: Likewise. * tests/unictype/test-categ_No.c: Likewise. * tests/unictype/test-categ_P.c: Likewise. * tests/unictype/test-categ_Pd.c: Likewise. * tests/unictype/test-categ_Po.c: Likewise. * tests/unictype/test-categ_S.c: Likewise. * tests/unictype/test-categ_Sc.c: Likewise. * tests/unictype/test-categ_So.c: Likewise. * tests/unictype/test-ctype_alnum.c: Likewise. * tests/unictype/test-ctype_alpha.c: Likewise. * tests/unictype/test-ctype_graph.c: Likewise. * tests/unictype/test-ctype_lower.c: Likewise. * tests/unictype/test-ctype_print.c: Likewise. * tests/unictype/test-ctype_punct.c: Likewise. * tests/unictype/test-ctype_upper.c: Likewise. * tests/unictype/test-decdigit.h: Likewise. * tests/unictype/test-digit.h: Likewise. * tests/unictype/test-numeric.h: Likewise. * tests/unictype/test-pr_alphabetic.c: Likewise. * tests/unictype/test-pr_bidi_arabic_digit.c: Likewise. * tests/unictype/test-pr_bidi_eur_num_terminator.c: Likewise. * tests/unictype/test-pr_bidi_european_digit.c: Likewise. * tests/unictype/test-pr_bidi_hebrew_right_to_left.c: Likewise. * tests/unictype/test-pr_bidi_left_to_right.c: Likewise. * tests/unictype/test-pr_bidi_non_spacing_mark.c: Likewise. * tests/unictype/test-pr_bidi_other_neutral.c: Likewise. * tests/unictype/test-pr_combining.c: Likewise. * tests/unictype/test-pr_composite.c: Likewise. * tests/unictype/test-pr_currency_symbol.c: Likewise. * tests/unictype/test-pr_dash.c: Likewise. * tests/unictype/test-pr_decimal_digit.c: Likewise. * tests/unictype/test-pr_deprecated.c: Likewise. * tests/unictype/test-pr_diacritic.c: Likewise. * tests/unictype/test-pr_extender.c: Likewise. * tests/unictype/test-pr_grapheme_base.c: Likewise. * tests/unictype/test-pr_grapheme_extend.c: Likewise. * tests/unictype/test-pr_grapheme_link.c: Likewise. * tests/unictype/test-pr_id_continue.c: Likewise. * tests/unictype/test-pr_id_start.c: Likewise. * tests/unictype/test-pr_ideographic.c: Likewise. * tests/unictype/test-pr_ignorable_control.c: Likewise. * tests/unictype/test-pr_logical_order_exception.c: Likewise. * tests/unictype/test-pr_lowercase.c: Likewise. * tests/unictype/test-pr_numeric.c: Likewise. * tests/unictype/test-pr_other_alphabetic.c: Likewise. * tests/unictype/test-pr_punctuation.c: Likewise. * tests/unictype/test-pr_sentence_terminal.c: Likewise. * tests/unictype/test-pr_terminal_punctuation.c: Likewise. * tests/unictype/test-pr_unassigned_code_value.c: Likewise. * tests/unictype/test-pr_unified_ideograph.c: Likewise. * tests/unictype/test-pr_uppercase.c: Likewise. * tests/unictype/test-pr_xid_continue.c: Likewise. * tests/unictype/test-pr_xid_start.c: Likewise. * tests/unictype/test-pr_zero_width.c: Likewise. * tests/unigbrk/test-uc-gbrk-prop.h: Likewise. * tests/unilbrk/test-u8-possible-linebreaks.c (main): Update for changed behaviour: line breaking is now disallowed between a letter or '=' and '('. * tests/unilbrk/test-u16-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-u32-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-ulc-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-ulc-width-linebreaks.c (main): Likewise. * tests/uniwidth/test-uc_width2.sh: Same updates as in lib/uniwidth/width.c. * tests/uninorm/NormalizationTest.txt: Update from Unicode 5.2.0, without comments, but with the original copyright notice. * lib/unicase/special-casing-table.gperf: Regenerated; only comment changes. * lib/unictype/categ_Cc.h: Likewise. * lib/unictype/categ_Co.h: Likewise. * lib/unictype/categ_Cs.h: Likewise. * lib/unictype/categ_Lt.h: Likewise. * lib/unictype/categ_Me.h: Likewise. * lib/unictype/categ_Pc.h: Likewise. * lib/unictype/categ_Pe.h: Likewise. * lib/unictype/categ_Pf.h: Likewise. * lib/unictype/categ_Pi.h: Likewise. * lib/unictype/categ_Ps.h: Likewise. * lib/unictype/categ_Sk.h: Likewise. * lib/unictype/categ_Sm.h: Likewise. * lib/unictype/categ_Z.h: Likewise. * lib/unictype/categ_Zl.h: Likewise. * lib/unictype/categ_Zp.h: Likewise. * lib/unictype/categ_Zs.h: Likewise. * lib/unictype/ctype_blank.h: Likewise. * lib/unictype/ctype_cntrl.h: Likewise. * lib/unictype/ctype_digit.h: Likewise. * lib/unictype/ctype_space.h: Likewise. * lib/unictype/ctype_xdigit.h: Likewise. * lib/unictype/mirror.h: Likewise. * lib/unictype/pr_ascii_hex_digit.h: Likewise. * lib/unictype/pr_bidi_arabic_right_to_left.h: Likewise. * lib/unictype/pr_bidi_block_separator.h: Likewise. * lib/unictype/pr_bidi_boundary_neutral.h: Likewise. * lib/unictype/pr_bidi_common_separator.h: Likewise. * lib/unictype/pr_bidi_control.h: Likewise. * lib/unictype/pr_bidi_embedding_or_override.h: Likewise. * lib/unictype/pr_bidi_eur_num_separator.h: Likewise. * lib/unictype/pr_bidi_pdf.h: Likewise. * lib/unictype/pr_bidi_segment_separator.h: Likewise. * lib/unictype/pr_bidi_whitespace.h: Likewise. * lib/unictype/pr_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_format_control.h: Likewise. * lib/unictype/pr_hex_digit.h: Likewise. * lib/unictype/pr_hyphen.h: Likewise. * lib/unictype/pr_ids_binary_operator.h: Likewise. * lib/unictype/pr_ids_trinary_operator.h: Likewise. * lib/unictype/pr_iso_control.h: Likewise. * lib/unictype/pr_join_control.h: Likewise. * lib/unictype/pr_left_of_pair.h: Likewise. * lib/unictype/pr_line_separator.h: Likewise. * lib/unictype/pr_math.h: Likewise. * lib/unictype/pr_non_break.h: Likewise. * lib/unictype/pr_not_a_character.h: Likewise. * lib/unictype/pr_other_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_other_grapheme_extend.h: Likewise. * lib/unictype/pr_other_id_continue.h: Likewise. * lib/unictype/pr_other_id_start.h: Likewise. * lib/unictype/pr_other_lowercase.h: Likewise. * lib/unictype/pr_other_math.h: Likewise. * lib/unictype/pr_other_uppercase.h: Likewise. * lib/unictype/pr_paired_punctuation.h: Likewise. * lib/unictype/pr_paragraph_separator.h: Likewise. * lib/unictype/pr_pattern_syntax.h: Likewise. * lib/unictype/pr_pattern_white_space.h: Likewise. * lib/unictype/pr_private_use.h: Likewise. * lib/unictype/pr_quotation_mark.h: Likewise. * lib/unictype/pr_radical.h: Likewise. * lib/unictype/pr_soft_dotted.h: Likewise. * lib/unictype/pr_space.h: Likewise. * lib/unictype/pr_titlecase.h: Likewise. * lib/unictype/pr_variation_selector.h: Likewise. * lib/unictype/pr_white_space.h: Likewise. * lib/unictype/sy_c_ident.h: Likewise. * lib/unictype/sy_c_whitespace.h: Likewise. * lib/unictype/sy_java_whitespace.h: Likewise. * modules/uni*/*: Bump version number of expected libunistring version. Reported by Simon Josefsson. 2011-01-09 Karl Heuer useless-if-before-free: fix typo in --help and make the internal, automatic version date update process work once again. --help output contained a NUL character instead of the backslash-zero that was intended. Also, the "must lie within the first 8 lines" line is on line 9, and hence not getting automatically updated. * build-aux/useless-if-before-free: Fix the former by adding a backslash, and the latter by condensing the three lines of what-it-does to a single line, leaving one line of slack for the future. 2011-01-09 Bruno Haible uniwidth/width: Fix width of U+1D173..U+1D17A. * lib/gen-uni-tables.c (is_nonspacing, output_nonspacing_property, symbolic_width, output_width_property_test): New functions. (main): Invoke output_nonspacing_property, output_width_property_test. * lib/uniwidth/width.c (nonspacing_table_data): Set bits for U+1D173..U+1D17A. * tests/uniwidth/test-uc_width2.sh: For U+1D173..U+1D17A, expect 0, not 1. * modules/uniwidth/*: Bump version number of expected libunistring version. * modules/unilbrk/*: Likewise. 2011-01-08 Bruno Haible uninorm tests: Preserve copyright of Unicode data file. * tests/uninorm/NormalizationTest.txt: Re-add original copyright. Mention modifications. 2011-01-08 Bruno Haible gen-uni-tables: Prepare for Unicode 5.2.0. * lib/gen-uni-tables.c (get_lbp): Allow for more than 32 LBP_* values. (debug_output_lbp, output_lbp): Update. 2011-01-08 Bruno Haible unilbrk: Clarify gen-uni-tables.c code. * lib/gen-uni-tables.c (get_lbp): Assume REVISION_22 to be false. These were mistakes in UAX #14 revision 22 that are corrected in revision 24. Clarify what to do with unilbrk/lbrkprop.txt and uniwbrk/wbrkprop.txt. 2011-01-07 Bruno Haible strtod: Restore errno when successfully parsing Infinity or NaN. * lib/strtod.c (strtod): After successfully parsing an Infinity or NaN, restore the original errno. 2011-01-07 Bruno Haible remove test: Avoid failure on HP-UX 11. * tests/test-remove.c (main): Allow EEXIST as alternative error code. 2011-01-07 Bruno Haible mkdir, mkdirat tests: Avoid failure on HP-UX 11.11. * tests/test-mkdir.h (test_mkdir): Allow EOPNOTSUPP as alternative error code. 2011-01-07 Pádraig Brady ignore-value: fixup comments, and add Eric Blake as an author since he rewrote the macros. * lib/ignore-value.h (ignore_value): State that we now support aggregates. Also specify exactly when the GCC warn_unused_result feature was added. 2011-01-06 Eric Blake ignore-value: support aggregate types * lib/ignore-value.h (ignore_value): Provide separate gcc definition. * modules/ignore-value-tests: New test module. * tests/test-ignore-value.c: New test. maint.mk: improve sc_prohibit_strcmp regex * top/maint.mk (sc_prohibit_strcmp): Detect strcmp()!=0, as documented. Also, detect strcmp((expr),expr) == 0. Exempt the definition of STRNEQ. signal: work around Haiku issue with SIGBUS * lib/siglist.h: Add comment. * lib/sig2str.c (numname_table): Swap SIGBUS order, to match strsignal's favoring of SIGSEGV. * tests/test-signal.c (main): Avoid test failure. * doc/posix-headers/signal.texi (signal.h): Document the issue. Reported by Scott McCreary. maint.mk: add pre-release check to ensure submodule commits are public * top/maint.mk (public-submodule-commit): New rule. (submodule-checks): New variable. (alpha beta stable): Depend on the variable. 2011-01-05 Pádraig Brady and Jim Meyering ignore-value: make ignore_value more generic; deprecate ignore_ptr * lib/ignore-value.h: Include , for decl of intptr_t. (ATTRIBUTE_DEPRECATED): Define. (_ignore_case): New function. (ignore_value): New macro, to replace the old function. (ignore_ptr): Arrange for any use to evoke a deprecation warning. * modules/ignore-value (Depends-on): Add stdint. 2011-01-04 Eric Blake doc: regenerate INSTALL * doc/Makefile (INSTALL, INSTALL.ISO, INSTALL.UTF-8): Re-add @firstparagraphindent support, now that autoconf dropped it. (INSTALL_PRELUDE): Reinstate old macro. * doc/install.texi: Resync from autoconf. * doc/INSTALL: Reflect recent autoconf update. * doc/INSTALL.ISO: Likewise. * doc/INSTALL.UTF-8: Likewise. Reported by Karl Berry. 2011-01-04 Bruce Korb git-version-gen: avoid a sub-shell * build-aux/git-version-gen: Redirect stderr in `...` via "exec 2>...", rather than via an added sub-shell. 2011-01-03 Ben Pfaff git-version-gen: use (...) rather than sh -c '...' * build-aux/git-version-gen: Rather than hard-coding a shell's name with "sh -c '...'", just use "(...)". Less syntax is better, too. 2011-01-03 Jim Meyering git-version-gen: convert leading TABs to spaces * build-aux/git-version-gen: Expand leading TABs. git-version-gen: handle failed "git rev-list" * build-aux/git-version-gen: Rather than leaking a "fatal" error from git and proceeding as if it had succeeded but printed no SHA1 checksums, suppress the diagnostic and handle the failure. Reported by Bruce Korb in http://marc.info/?l=git&m=129399145930450&w=2 git-version-gen: include command name in one more diagnostic * build-aux/git-version-gen: When the required .tarball-version file was missing or unreadable, you might see the diagnostic from "cat", but no trace of the name of the invoking script. Now, you still see the diagnostic from cat, but also get one from "git-version-gen: ". Inspired by a patch from Bruce Korb. update-copyright: adjust test to match changed code * tests/test-update-copyright.sh: Change test's expected output to match new actual output. 2011-01-02 Bruno Haible getlogin_r: Avoid test failure on HP-UX 11. * tests/test-getlogin_r.c (main): Allow an error code EINVAL instead of ERANGE when the second argument is zero. * doc/posix-functions/getlogin_r.texi: Document the HP-UX 11 portability problem. 2011-01-02 Bruce Korb * build-aux/update-copyright: doc Simon's changes 2011-01-02 Simon Josefsson * build-aux/update-copyright: Support UPDATE_COPYRIGHT_HOLDER environment variable. 2011-01-02 Bruno Haible unigbrk: Avoid gcc warnings. * lib/unigbrk/u16-grapheme-breaks.c (u16_grapheme_breaks): Remove unused variable. * lib/unigbrk/u16-grapheme-prev.c (u16_grapheme_prev): Likewise. * lib/unigbrk/u8-grapheme-prev.c (u8_grapheme_prev): Likewise. * tests/unigbrk/test-u16-grapheme-breaks.c (main): Likewise. * tests/unigbrk/test-u32-grapheme-breaks.c (main): Likewise. * tests/unigbrk/test-u8-grapheme-breaks.c (test_u8_grapheme_breaks): Change type of first argument to 'const char *'. (main): Remove unused variable. * tests/unigbrk/test-u8-grapheme-next.c (test_u8_grapheme_next): Change type of first argument to 'const char *'. * tests/unigbrk/test-u8-grapheme-prev.c (test_u8_grapheme_prev): Likewise. (main): Change type of variable 's'. * tests/unigbrk/test-uc-is-grapheme-break.c (main): Cast column number to 'int'. 2011-01-02 Bruno Haible pwrite: Fix test whether it works and make it work on HP-UX 11.11. * m4/pwrite.m4 (gl_FUNC_PWRITE): Use AC_LANG_PROGRAM, not AC_LANG_SOURCE. Extend the test program to catch another HP-UX 11.11 bug. * lib/pwrite.c: Undo 2010-12-31 patch. * doc/posix-functions/pwrite.texi: Document another HP-UX 11.11 bug. 2011-01-02 Bruno Haible pread: Fix test whether it works. * m4/pread.m4 (gl_FUNC_PREAD): Use AC_LANG_PROGRAM, not AC_LANG_SOURCE. 2011-01-02 Bruno Haible Fix detection of traditional Arabic locale on HP-UX, Solaris, Cygwin. * m4/locale-ar.m4 (gt_LOCALE_AR): Require that the locale encoding name ends in "6". Don't require a specific month name. Try also the locale names found on HP-UX 11 and Solaris 7. 2011-01-02 Bruno Haible tcgetsid: Correct linkage in C++ mode on HP-UX 11.00. * lib/termios.in.h: In C++ mode, on HP-UX, include with C linkage. * doc/posix-functions/tcgetsid.texi: Mention the HP-UX 11.00 bug. 2011-01-01 Ben Pfaff Rename uc_is_grapheme_cluster_break() to uc_is_grapheme_break() for consistency, since the "cluster" term is not used elsewhere. * lib/unigbrk.in.h: Update name. * lib/unigbrk/u16-grapheme-breaks.c: Update name. * lib/unigbrk/u16-grapheme-next.c: Update name. * lib/unigbrk/u16-grapheme-prev.c: Update name. * lib/unigbrk/u32-grapheme-breaks.c: Update name. * lib/unigbrk/u32-grapheme-next.c: Update name. * lib/unigbrk/u32-grapheme-prev.c: Update name. * lib/unigbrk/u8-grapheme-breaks.c: Update name. * lib/unigbrk/u8-grapheme-next.c: Update name. * lib/unigbrk/u8-grapheme-prev.c: Update name. * lib/unigbrk/uc-is-grapheme-break.c: Update name. * tests/unigbrk/test-uc-is-grapheme-break.c: Update name. Suggested by Bruno Haible. 2011-01-01 Ben Pfaff Remove module 'u8-grapheme-len' as too redundant with 'u8-grapheme-next'. * modules/unigbrk/u8-grapheme-len: Delete file. * modules/unigbrk/u8-grapheme-len-tests: Delete file. * lib/unigbrk.in.h: Remove prototype for deleted function. * lib/unigbrk/u8-grapheme-len.c: Delete file. * tests/unigbrk/test-u8-grapheme-len.c: Delete file. Remove module 'u16-grapheme-len' as too redundant with 'u16-grapheme-next'. * modules/unigbrk/u16-grapheme-len: Delete file. * modules/unigbrk/u16-grapheme-len-tests: Delete file. * lib/unigbrk.in.h: Remove prototype for deleted function. * lib/unigbrk/u16-grapheme-len.c: Delete file. * tests/unigbrk/test-u16-grapheme-len.c: Delete file. Remove module 'u32-grapheme-len' as too redundant with 'u32-grapheme-next'. * modules/unigbrk/u32-grapheme-len: Delete file. * modules/unigbrk/u32-grapheme-len-tests: Delete file. * lib/unigbrk.in.h: Remove prototype for deleted function. * lib/unigbrk/u32-grapheme-len.c: Delete file. * tests/unigbrk/test-u32-grapheme-len.c: Delete file. Suggested by Bruno Haible. 2011-01-01 Ben Pfaff * unigbrk.in.h: Fix typo: "ben" => "been". Reported by Bruno Haible. 2011-01-01 Jim Meyering maint: update almost all copyright ranges to include 2011 Run the new "make update-copyright" rule. 2011-01-01 Jim Meyering maint: update-copyright: exempt doc/INSTALL* * Makefile (update-copyright): Also exclude doc/INSTALL*, since they are generated. Suggested by Bruno Haible. 2011-01-01 Jim Meyering maint: refine the update-copyright rule * Makefile (update-copyright): Also exclude any file that includes the "GENERATED AUTOMATICALLY" comment, being careful not to exclude code that merely generates the comment. 2010-12-31 Ben Pfaff New module 'u8-grapheme-len'. * modules/unigbrk/u8-grapheme-len: New file. * modules/unigbrk/u8-grapheme-len-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u8-grapheme-len.c: New file. * tests/unigbrk/test-u8-grapheme-len.c: New file. New module 'u16-grapheme-len'. * modules/unigbrk/u16-grapheme-len: New file. * modules/unigbrk/u16-grapheme-len-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u16-grapheme-len.c: New file. * tests/unigbrk/test-u16-grapheme-len.c: New file. New module 'u32-grapheme-len'. * modules/unigbrk/u32-grapheme-len: New file. * modules/unigbrk/u32-grapheme-len-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u32-grapheme-len.c: New file. * tests/unigbrk/test-u32-grapheme-len.c: New file. New module 'u8-grapheme-next'. * modules/unigbrk/u8-grapheme-next: New file. * modules/unigbrk/u8-grapheme-next-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u8-grapheme-next.c: New file. * tests/unigbrk/test-u8-grapheme-next.c: New file. New module 'u16-grapheme-next'. * modules/unigbrk/u16-grapheme-next: New file. * modules/unigbrk/u16-grapheme-next-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u16-grapheme-next.c: New file. * tests/unigbrk/test-u16-grapheme-next.c: New file. New module 'u32-grapheme-next'. * modules/unigbrk/u32-grapheme-next: New file. * modules/unigbrk/u32-grapheme-next-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u32-grapheme-next.c: New file. * tests/unigbrk/test-u32-grapheme-next.c: New file. New module 'u8-grapheme-prev'. * modules/unigbrk/u8-grapheme-prev: New file. * modules/unigbrk/u8-grapheme-prev-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u8-grapheme-prev.c: New file. * tests/unigbrk/test-u8-grapheme-prev.c: New file. New module 'u16-grapheme-prev'. * modules/unigbrk/u16-grapheme-prev: New file. * modules/unigbrk/u16-grapheme-prev-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u16-grapheme-prev.c: New file. * tests/unigbrk/test-u16-grapheme-prev.c: New file. New module 'u32-grapheme-prev'. * modules/unigbrk/u32-grapheme-prev: New file. * modules/unigbrk/u32-grapheme-prev-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u32-grapheme-prev.c: New file. * tests/unigbrk/test-u32-grapheme-prev.c: New file. New module 'u8-grapheme-breaks'. * modules/unigbrk/u8-grapheme-breaks: New file. * modules/unigbrk/u8-grapheme-breaks-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u8-grapheme-breaks.c: New file. * tests/unigbrk/test-u8-grapheme-breaks.c: New file. New module 'u16-grapheme-breaks'. * modules/unigbrk/u16-grapheme-breaks: New file. * modules/unigbrk/u16-grapheme-breaks-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u16-grapheme-breaks.c: New file. * tests/unigbrk/test-u16-grapheme-breaks.c: New file. New module 'u32-grapheme-breaks'. * modules/unigbrk/u32-grapheme-breaks: New file. * modules/unigbrk/u32-grapheme-breaks-tests: New file. * lib/unigbrk.in.h: Add prototype for new function. * lib/unigbrk/u32-grapheme-breaks.c: New file. * tests/unigbrk/test-u32-grapheme-breaks.c: New file. New module 'ulc-grapheme-breaks'. * modules/unigbrk/ulc-grapheme-breaks: New file. * modules/unigbrk/ulc-grapheme-breaks-tests: New file. * m4/locale-ar.m4: New file. * lib/unigbrk/ulc-grapheme-breaks.c: New file. * tests/unigbrk/test-ulc-grapheme-breaks.c: New file. * tests/unigbrk/test-ulc-grapheme-breaks.sh: New file. 2010-12-31 Ben Pfaff gbrkprop: Fix implementation of uc_graphemeclusterbreak_property. * lib/unigbrk/gbrkprop.h: Regenerate with gen-uni-tables.c. I had modified how this file was generated before I initially submitted the module, but failed to regenerate it. This meant that several of the level2 entries were wrong. * lib/unigbrk/uc-gbrk-prop.h (uc_graphemeclusterbreak_property): Remove the division-by-2 that is folded into the table now that gbrkprop.h has been regenerated properly. Now -1 entries are handled correctly. New module 'unigbrk/uc-gbrk-prop-tests'. * modules/unigbrk/uc-gbrk-prop-tests: New file. * lib/gen-uni-tables.c: Generate tests/test-uc-gbrk-prop.h. * tests/unigbrk/test-uc-gbrk-prop.c: New file. * tests/unigbrk/test-uc-gbrk-prop.h: New file. 2011-01-01 Bruno Haible Avoid use of hexadecimal escapes. * tests/unigbrk/test-uc-is-grapheme-break.c (main): Use octal escapes instead of hexadecimal escapes. 2011-01-01 Jim Meyering maint: new rule to update copyright year ranges * Makefile (update-copyright): New rule. maint: indent with TABs in Makefile * Makefile: Expand leading sequences of spaces to TABs version-etc: update the copyright year it reports * lib/version-etc.c (COPYRIGHT_YEAR): Update to 2011. 2010-12-31 Bruno Haible isfinite: Avoid compiler bug of "cc -O" on HP-UX 11.11. * lib/isfinite.c (zerof, zerod, zerol): New variables. (gl_isfinitef, gl_isfinited, gl_isfinitel): Use them instead of literal zero. 2010-12-31 Bruno Haible pwrite: Work around HP-UX 11.11 bug. * m4/pwrite.m4 (gl_FUNC_PWRITE): When pwrite exists, test whether it works and set REPLACE_PWRITE if not. * lib/pwrite.c (pwrite): Add an implementation that uses the system function. * doc/posix-functions/pwrite.texi: Document the HP-UX 11 bug. 2010-12-31 Bruno Haible pread: Work around HP-UX 11 bugs. * m4/pread.m4 (gl_FUNC_PREAD): When pread exists, test whether it works and set REPLACE_PREAD if not. * doc/posix-functions/pread.texi: Document the HP-UX 11 bugs. 2010-12-31 Eric Blake nl_langinfo: fix YESEXPR on Irix 6.5 * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Test for Irix bug. * lib/nl_langinfo.c (rpl_nl_langinfo): Work around it. * doc/posix-functions/nl_langinfo.texi (nl_langinfo): Document it. 2010-12-31 Bruno Haible iconv: Document HP-UX 11 bug. * doc/posix-functions/iconv.texi: Document HP-UX 11 return value bug. 2010-12-31 Bruno Haible ldexpl: Fix link error on HP-UX 11. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): When replacing ldexpl, set LDEXPL_LIBM, using $ISNANL_LIBM. 2010-12-31 Eric Blake ftello: avoid compilation failure with SunStudio c89 * lib/ftello.c (ftello): Use lseek, not llseek. tests: avoid failing coreutils tests on cygwin * tests/init.sh (find_exe_basenames_): Exempt [.exe. (create_exe_shims_): Return 0 when skipping. 2010-12-31 Bruno Haible sys_select: Avoid warning about missing memset declaration on HP-UX 11. * lib/sys_select.in.h: On HP-UX, include also . 2010-12-31 Bruno Haible waitpid: Fix link error in C++ mode. * lib/sys_wait.in.h: Remove extern "C" { ... } group. 2010-12-31 Bruno Haible isnan: Use GCC built-ins when possible. * lib/math.in.h (gl_isnan_f): Use __builtin_isnanf instead of __builtin_isnan. (gl_isnan_l): Use __builtin_isnanl instead of __builtin_isnan. (isnan): Define using GCC built-ins for GCC >= 4.0. 2010-12-31 Bruno Haible isnand: Fix mistake. * m4/isnand.m4 (gl_HAVE_ISNAND_IN_LIBM): Use __builtin_isnan, not __builtin_isnand. 2010-12-31 Bruno Haible open: Avoid C++ error on HP-UX 11. * lib/fcntl.in.h (open): Disable _GL_CXXALIASWARN invocation on HP-UX. 2010-12-31 Bruno Haible time_r: Add missing declarations on HP-UX 11. * lib/time.in.h (localtime_r, gmtime_r): Test HAVE_DECL_LOCALTIME_R instead of HAVE_LOCALTIME_R. * m4/time_r.m4 (gl_TIME_R): Test whether localtime_r is declared. Set HAVE_LOCALTIME_R always. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_DECL_LOCALTIME_R, not HAVE_LOCALTIME_R. * modules/time (Makefile.am): Substitute HAVE_DECL_LOCALTIME_R, not HAVE_LOCALTIME_R. * doc/posix-functions/gmtime_r.texi: Document the HP-UX 11 problem. * doc/posix-functions/localtime_r.texi: Likewise. 2010-12-29 Eric Blake mountlist: tweak previous commit * lib/mountlist.c (me_remote): Guarantee trailing backslash. Reported by Paul Eggert. mountlist: fix local drive detection on cygwin * lib/mountlist.c (ME_REMOTE) [__CYGWIN__]: Provide implementation that works for cygwin. 2010-12-29 Paul Eggert ftoastr, snprintf: ftoastr + snprintf module * lib/ftoastr.c: Use GNULIB_SNPRINTF, not GNULIB_SNPRINTF_POSIX, since the snprintf module now should be good enough here. * modules/snprintf (configure.ac): Add gl_MODULE_INDICATOR([snprintf]). It seems odd to have both gl_STDIO_MODULE_INDICATOR([snprintf]) and gl_MODULE_INDICATOR([snprintf]), but the former enables GNULIB_SNPRINTF only for the test directory, and the latter doesn't arrange for gl_STDIO_H_DEFAULTS to be called, so neither seems to suffice by itself. 2010-12-28 Paul Eggert alloca: one step towards thread-safety * lib/alloca.c (find_stack_direction): New arg PTR, to avoid the need for a static variable. All callers changed. This does not make the alloca replacement thread-safe, but it's one step. tests: minor indenting change * tests/init.sh: Sync from coreutils housekeeping patch to keep lines within 80 columns. 2010-12-28 Jim Meyering regex: don't infloop on persistent failing calloc * lib/regexec.c (build_trtable): Return failure indication upon calloc failure. Otherwise, re_search_internal could infloop on OOM. In glibc, this was fixed for version 2.13: http://sourceware.org/bugzilla/show_bug.cgi?id=12348 2010-12-28 Bruno Haible Paul Eggert linkat: Make implementation robust against system behaviour variations. * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Define LINK_FOLLOWS_SYMLINKS to -1 if it needs a runtime test in the Solaris way, and to -2 if it needs a generic runtime test. * lib/linkat.c (solaris_optimized_link_immediate, solaris_optimized_link_follow): New functions. * tests/test-linkat.c (EXPECT_LINK_HARDLINKS_SYMLINKS): New macro. (check_same_link): Use it. 2010-12-26 Ben Pfaff New module 'unigbrk/base'. * modules/unigbrk/base: New file. * lib/unigbrk.in.h: New file. New module 'unigbrk/uc-gbrk-prop'. * lib/gen-uni-tables.c: Generate lib/unigbrk/gbrkprop.h. * modules/unigbrk/uc-gbrk-prop: New file. * lib/unigbrk/gbrkprop.h: New file. * lib/unigbrk/uc-gbrk-prop.c: New file. New module 'unigbrk/uc-is-grapheme-break'. * modules/unigbrk/uc-is-grapheme-break: New file. * modules/unigbrk/uc-is-grapheme-break-tests: New file. * lib/unigbrk/uc-is-grapheme-break.c: New file. * tests/unigbrk/test-uc-is-grapheme-break.c: New file. * tests/unigbrk/test-uc-is-grapheme-break.sh: New file. * tests/unigbrk/GraphemeBreakTest.txt: New file. With corrections and tweaks by Bruno Haible . 2010-12-27 Bruno Haible linkat test: Avoid failure on Solaris 11 2010-11. * tests/test-linkat.c (main): Allow ENOTDIR as alternative error code. 2010-12-27 Paul Eggert utimens: work around glibc rounding bug on more platforms * lib/utimens.c (fdutimens): Work around rounding bug even if HAVE_WORKING_UTIMES. Reported for Linux 2.4.21 by Bruno Haible in . 2010-12-27 Bruno Haible select tests: Improve comments. * tests/test-select.c (do_select): Add comments. 2010-12-27 Bruno Haible select tests: Safer way of handling timeout. * tests/test-select.c (do_select_nowait): Zero-initialize the timeout at every invocation. 2010-12-27 Bruno Haible select tests: Use 'bool' where appropriate. * tests/test-select.c (connect_to_socket): Change argument type to 'bool'. 2010-12-27 Bruno Haible select tests: Use existing modules. * modules/select-tests (Depends-on): Add pipe-posix, unistd. (configure.ac): Don't test for unistd.h. * tests/test-select.c: Include always. Use pipe() as declared in . 2010-12-27 Bruno Haible mbrtowc: Work around a Solaris 7 bug. * m4/mbrtowc.m4 (gl_MBRTOWC_NULL_ARG1): New macro. (gl_MBRTOWC_NULL_ARG2): Renamed from gl_MBRTOWC_NULL_ARG. (gl_FUNC_MBRTOWC): Update. Define MBRTOWC_NULL_ARG2_BUG instead of MBRTOWC_NULL_ARG_BUG. Invoke gl_MBRTOWC_NULL_ARG1 and define MBRTOWC_NULL_ARG1_BUG. * lib/mbrtowc.c (rpl_mbrtowc): Use MBRTOWC_NULL_ARG2_BUG instead of MBRTOWC_NULL_ARG_BUG. Handle MBRTOWC_NULL_ARG1_BUG. * tests/test-mbrtowc.c (main): Test support of a NULL first argument. * doc/posix-functions/mbrtowc.texi: Mention the Solaris 7 bug. 2010-12-27 Jim Meyering read-file.c: tweak syntax * lib/read-file.c (fread_file): Remove space after "*" in function definitions. 2010-12-27 Bruno Haible times test: Avoid gcc warnings on OSF/1. * tests/test-times.c (main): Cast printf arguments from clock_t to 'long int'. 2010-12-27 Paul Eggert utimens: work around glibc rounding bug on older Linux kernels * lib/utimens.c (fdutimens): If invoking futimesat or futimes on Linux with a glibc whose utimes might not work, then work around a longstanding glibc bug involving rounding rather than truncated time stamps. Reported for Linux 2.4.21 by Bruno Haible in . 2010-12-26 Bruno Haible inet_ntop: Hide mismatch of declaration on NonStop Kernel. * lib/arpa_inet.in.h (inet_ntop): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. Reported by Joachim Schmitz . 2010-12-26 Bruno Haible inet_ntop, inet_pton: Ensure declaration on NonStop Kernel. * lib/arpa_inet.in.h: On NonStop Kernel, include also . * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Likewise. * m4/inet_ntop.m4 (gl_PREREQ_INET_NTOP): Include also when looking for the declaration. * m4/inet_pton.m4 (gl_PREREQ_INET_PTON): Likewise. * doc/posix-functions/inet_ntop.texi: Document the NonStop Kernel problem. * doc/posix-functions/inet_pton.texi: Likewise. 2010-12-26 Bruno Haible arpa_inet: Use the common idioms with C++ support. * lib/arpa_inet.in.h: Include c++defs.h. (inet_ntop, inet_pton): Declare using the macros with C++ namespace support. * modules/arpa_inet (Depends-on): Add c++defs. (Makefile.am): Substitute the contents of c++defs.h. * modules/arpa_inet-tests (Depends-on): Add arpa_inet-c++-tests. * modules/arpa_inet-c++-tests: New file. * tests/test-arpa_inet-c++.cc: New file. 2010-12-25 Bruno Haible Fix more C++ link errors on Solaris 8. * modules/fcntl-h-c++-tests (test_fcntl_h_c___LDADD): Add $(LIB_EACCESS). * modules/stdio-c++-tests (test_stdio_c___LDADD): Likewise. * modules/stdlib-c++-tests (test_stdlib_c___LDADD): Likewise. * modules/sys_ioctl-c++-tests (test_sys_ioctl_c___LDADD): Likewise. * modules/wchar-c++-tests (test_wchar_c___LDADD): Likewise. * modules/wctype-c++-tests (test_wctype_c___LDADD): Likewise. 2010-12-25 Bruno Haible printf-posix: Fix link error when a non-GCC compiler is used. * lib/stdio.in.h (printf): When not using GCC, override printf correctly. Reported by Joachim Schmitz . 2010-12-25 Bruno Haible strerror_r-posix: Update doc. * doc/posix-functions/strerror_r.texi: Update doc about the return value. See . 2010-12-25 Paul Eggert utimens: simplify the logic of the previous change * m4/utimes.m4 (gl_FUNC_UTIMES): Simplify the logic a bit. This should not affect whether the test succeeds or fails. utimens: configure better on hosts with NFS clock skew * m4/utimes.m4 (gl_FUNC_UTIMES): Don't assume that utimes (f, NULL) uses the clock of the local host. It might use the clock of the NFS server. Reported for Linux 2.4.21 client by Bruno Haible in . 2010-12-25 Bruno Haible ptsname test: Avoid failure on Solaris. * tests/test-ptsname.c (main): For Solaris, use the recommended way to open a pseudo-terminal; don't use BSD-style ptys. * doc/posix-functions/ptsname.texi: Document the limitation on Solaris. 2010-12-25 Bruno Haible ptsname: Avoid ERANGE failure on some systems. * lib/ptsname.c (buffer): Increase size. 2010-12-25 Bruno Haible rename, renameat: Avoid test failures at NFS mounted locations. * tests/test-rename.h (assert_nonexistent): Remove the old directory, so that subsequent mkdir calls succeed. 2010-12-25 Bruno Haible iswblank: Fix C++ link error on Solaris 8. * lib/wctype.in.h (iswblank): Declare using _GL_FUNCDECL_RPL or _GL_FUNCDECL_SYS. 2010-12-25 Bruno Haible unistd: Fix C++ link error on Solaris 8. * modules/unistd-c++-tests (test_unistd_c___LDADD): Add $(LIB_EACCESS). 2010-12-25 Bruno Haible readlink doc: Mention an old glibc bug. * doc/posix-functions/readlink.texi: Mention glibc 2.4 bug (BZ #2450). 2010-12-25 Bruno Haible fcntl-h: Fix for use of C++ on glibc systems. * lib/fcntl.in.h: Include before include_next also on glibc systems in C++ mode. Reported by Gary V. Vaughan . 2010-12-25 Bruno Haible roundl-ieee: Make it work on OSF/1 5.1 with cc. * modules/roundl-ieee (Depends-on): Add floorl-ieee, ceill-ieee. 2010-12-25 Bruno Haible truncl-ieee: Make it work on OSF/1 5.1 with cc. * doc/posix-functions/truncl.texi: Mention the OSF/1 5.1 bug. * m4/truncl.m4 (gl_FUNC_TRUNCL): If gl_FUNC_TRUNCL_IEEE is also used, test whether truncl works according to ISO C 99 with IEC 60559. * m4/truncl-ieee.m4: New file. * modules/truncl-ieee (Files): Add it and m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_TRUNCL_IEEE. 2010-12-25 Bruno Haible ceill-ieee: Make it work on OSF/1 5.1 with cc. * doc/posix-functions/ceill.texi: Mention the OSF/1 5.1 bug. * m4/ceill.m4 (gl_FUNC_CEILL): If gl_FUNC_CEILL_IEEE is also used, test whether ceill works according to ISO C 99 with IEC 60559. * m4/ceill-ieee.m4: New file. * modules/ceill-ieee (Files): Add it and m4/minus-zero.m4, m4/signbit.m4. (configure.ac): Invoke gl_FUNC_CEILL_IEEE. 2010-12-25 Bruno Haible Ensure all prerequisites of are included. * m4/btowc.m4 (gl_FUNC_BTOWC): Include , , before . * m4/mbrlen.m4 (gl_MBRLEN_INCOMPLETE_STATE, gl_MBRLEN_RETVAL, gl_MBRLEN_NUL_RETVAL): Likewise. * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE, gl_MBRTOWC_SANITYCHECK, gl_MBRTOWC_NULL_ARG, gl_MBRTOWC_RETVAL, gl_MBRTOWC_NUL_RETVAL, AC_FUNC_MBRTOWC): Likewise. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Likewise. * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcsrtombs.m4 (gl_WCSRTOMBS_TERMINATION, gl_WCSRTOMBS_NULL): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H_INLINE_OK): Likewise. (gl_WCHAR_H): Improve comments. * m4/wctype_h.m4 (gl_WCTYPE_H): Likewise. 2010-12-25 Bruno Haible strtok_r: Fix C syntax error in autoconf macro. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Don't use UTF-8 encoded U+00A0 characters in test program. 2010-12-24 Bruno Haible ceil, trunc, round: Fix gcc warnings. * lib/ceil.c (MIN): Undefine before redefining. * lib/trunc.c (MIN): Likewise. * lib/round.c (MIN): Likewise. Include first. 2010-12-24 Bruno Haible select tests: Avoid failures on OSF/1 5.1. * tests/test-select.c (test_accept_first, test_socket_pair): Ignore failure of closing the last socket; it may fail with ECONNRESET. 2010-12-24 Eric Blake stdint: avoid HP-UX 10.20 preprocessor bug * lib/stdint.in.h (INT64_MAX, UINT64_MAX): Check via #ifdef rather than #if. * tests/test-floor2.c (main): Likewise. Reported by Peter O'Gorman. pipe: make obsoletion transition easier * lib/pipe.h: Restore file as thin shim around "spawn-pipe.h". * modules/pipe (Files): Include revived file. (Include): Drop reference, to mirror getdate's behavior. 2010-12-24 Bruno Haible sys_socket: Hide mismatch of declarations on NonStop Kernel. * lib/sys_socket.in.h (connect, bind, sendto, setsockopt): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible gethostname: Ensure declaration on NonStop Kernel. * lib/unistd.in.h: Include also on NonStop Kernel systems. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible sys_select: Ensure all necessary types on NonStop Kernel. * lib/sys_select.in.h: If the system does not have , include . * doc/posix-headers/sys_select.texi: Mention that it's missing on NonStop Kernel. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible sys_select: Remove unneeded include. * lib/sys_select.in.h: Don't include on platforms that have . 2010-12-24 Bruno Haible gethostname: Provide a fallback for HOST_NAME_MAX. * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): When neither HOST_NAME_MAX nor MAXHOSTNAMELEN is found in the usual system headers, use 256 instead. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible sigaction tests: Allow missing SA_RESETHAND and SA_RESTART. * tests/test-sigaction.c (SA_RESETHAND): Fall back to 0. (SA_RESTART): Likewise. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible signal: Define NSIG. * lib/signal.in.h (NSIG): Define to 32 on NonStop Kernel. * tests/test-signal.c (nsig): New variable. Reported by Joachim Schmitz . 2010-12-24 Bruno Haible rename, renameat: Avoid test failures on OSF/1 5.1. * tests/test-rename.h (test_rename): Allow EEXIST and ENOTDIR as alternative error codes. * tests/test-renameat.c (main): Likewise. 2010-12-24 Bruno Haible *printf: Detect large precisions bug on Solaris 10/SPARC. * m4/printf.m4 (gl_PRINTF_PRECISION): Add one more test code, provided by Paul Eggert. * tests/test-snprintf-posix.h (test_function): Add this test code here too. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasnprintf-posix.c (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * doc/posix-functions/fprintf.texi: Mention Solaris 10 bug as worked around by gnulib. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/posix-functions/dprintf.texi: Undo last commit. * doc/posix-functions/vdprintf.texi: Likewise. 2010-12-23 Paul Eggert tests: port test-fdutimensat.c to Solaris 8 * tests/test-fdutimensat.c (do_fdutimens): Don't assume fdutimensat works with a nonnegative fd and AT_SYMLINK_NOFOLLOW. On Solaris 8, it fails with errno == ENOSYS, because there is no futimens (so it can't use the fd), and there is no lutimens (so it can't implement AT_SYMLINK_NOFOLLOW on symlinks). vsnprintf: make more consistent with snprintf; doc fixes * doc/posix-functions/snprintf.texi (snprintf): The workaround for the byte count return problem was promoted from the snprintf-posix to the snprintf module. * doc/posix-functions/vsnprintf.texi (vsnprintf): Likewise. * m4/vsnprintf.m4 (gl_FUNC_VSNPRINTF): Also check gl_SNPRINTF_RETVAL_C99, for consistency with gl_FUNC_SNPRINTF. * tests/test-snprintf.c (main): Check the byte count returned. * tests/test-vsnprintf.c (main): Likewise. 2010-12-23 Eric Blake sigpipe: relax to LGPLv2+, since it did not have any LGPLv3+ parts * modules/sigpipe (License): Relax license. 2010-12-22 Paul Eggert doc: document Solaris printf bug with large float precisions * doc/posix-functions/dprintf.texi (dprintf): * doc/posix-functions/fprintf.texi (fprintf): * doc/posix-functions/printf.texi (printf): * doc/posix-functions/snprintf.texi (snprintf): * doc/posix-functions/sprintf.texi (sprintf): * doc/posix-functions/vdprintf.texi (vdprintf): * doc/posix-functions/vfprintf.texi (vfprintf): * doc/posix-functions/vprintf.texi (vprintf): * doc/posix-functions/vsnprintf.texi (vsnprintf): * doc/posix-functions/vsprintf.texi (vsprintf): Mention that these functions mishandle large floating point precisions on Solaris 10. The same bug is also present in Solaris 8, and I assume earlier. This causes "cd gnulib-tests; make check" to fail on Solaris 8 (and I assume, later) when building the latest coreutils, in test-vasprintf-posix's call to my_asprintf (&result, "%.4000f %d", 1.0, 99). I have not checked the wide flavors (e.g., wprintf) so this patch just updates the documentation for the narrow ones. test-posixtm.c: add two tests * tests/test-posixtm.c: Add two tests, to highlight the bug in Solaris 10 (and earlier) localtime. Gnulib doesn't work around this bug; this is merely to document it. 2010-12-22 Bruno Haible getlogin_r: Work around portability problem on OSF/1. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Detect the OSF/1 problem. * lib/unistd.in.h (getlogin_r): Replace if REPLACE_GETLOGIN_R is set. * lib/getlogin_r.c (getlogin_r): When getlogin_r exists, invoke it and test for a truncated result. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize REPLACE_GETLOGIN_R. * modules/unistd (Makefile.am): Substitute REPLACE_GETLOGIN_R. * modules/getlogin_r (Depends-on): Add memchr. * doc/posix-functions/getlogin_r.texi: Mention the OSF/1 problem. 2010-12-22 Bruno Haible ptsname: Avoid test failure on OSF/1 5.1. * modules/ptsname-tests (Depends-on): Add 'same-inode'. * tests/test-ptsname.c: Include , same-inode.h. (same_slave): New function. (main): Use it to compare ptsname's result with the expected file name. 2010-12-22 Bruno Haible Port extended stdio modules to HP NonStop Kernel. * lib/stdio-impl.h (_IOERR, _IOREAD, _IOWRT, _IORW) [__TANDEM]: New macros. * lib/fbufmode.c: Update comments. * lib/fflush.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. Reported by Joachim Schmitz . 2010-12-22 Bruno Haible ttyname_r: Work around bug on OSF/1 5.1. * doc/posix-functions/ttyname_r.texi: Mention the OSF/1 bug. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Detect the OSF/1 bug. Say "no" instead of "guessing no" when the OSF/1 bug or the Solaris bug is present. * lib/ttyname_r.c (ttyname_r): Update comments. 2010-12-22 Bruno Haible round: Implement result sign according to IEEE 754. * lib/round.c (MIN, MINUS_ZERO): New macros. (FLOOR_FREE_ROUND): Return -0.0 for -0.5 < x < 0. * tests/test-roundf-ieee.c (main): Test also values between -1 and 1. * tests/test-round-ieee.c (main): Likewise. * tests/test-roundl-ieee.c (main): Likewise. trunc: Implement result sign according to IEEE 754. * lib/trunc.c (MIN, MINUS_ZERO): New macros. (FUNC): Return +0.0 for 0 < x < 1 and -0.0 for -1 < x < 0. * tests/test-trunc2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (trunc_reference): Keep in sync with lib/trunc.c. * tests/test-truncf2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (truncf_reference): Keep in sync with lib/trunc.c. * tests/test-truncf-ieee.c (main): Test also values between -1 and 1. * tests/test-trunc-ieee.c (main): Likewise. * tests/test-truncl-ieee.c (main): Likewise. ceil: Implement result sign according to IEEE 754. * lib/ceil.c (MIN, MINUS_ZERO): New macros. (FUNC): Return -0.0 for -1 < x < 0. * tests/test-ceil2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (ceil_reference): Keep in sync with lib/ceil.c. * tests/test-ceilf2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (ceilf_reference): Keep in sync with lib/ceil.c. * tests/test-ceilf-ieee.c (main): Test also values between -1 and 1. * tests/test-ceil-ieee.c (main): Likewise. * tests/test-ceill-ieee.c (main): Likewise. floor: Implement result sign according to IEEE 754. * lib/floor.c (FUNC): Return +0.0 for 0 < x < 1. * tests/test-floor2.c (floor_reference): Keep in sync with lib/floor.c. * tests/test-floorf2.c (floorf_reference): Likewise. * tests/test-floorf-ieee.c (main): Test also values between -1 and 1. * tests/test-floor-ieee.c (main): Likewise. * tests/test-floorl-ieee.c (main): Likewise. 2010-12-22 Bruno Haible getaddrinfo: Update doc. * doc/posix-functions/gai_strerror.texi: Return type is also different on AIX and HP-UX. 2010-12-22 Paul Eggert getaddrinfo, inet_ntop: Update doc for Solaris. * doc/posix-functions/gai_strerror.texi: Return type is also an issue on Solaris 9 and earlier. * doc/posix-functions/inet_ntop.texi: 4th arg type is also an issue on Solaris 10 and earlier. 2010-12-21 Bruno Haible New module 'roundl-ieee'. * modules/roundl-ieee: New file. * m4/roundl.m4 (gl_FUNC_ROUNDL): If gl_FUNC_ROUNDL_IEEE is also used, test whether roundl works according to ISO C 99 with IEC 60559. * m4/roundl-ieee.m4: New file. * modules/roundl-ieee-tests: New file. * tests/test-roundl-ieee.c: New file, based on tests/test-roundl.c. * tests/test-roundl.c (main): Remove signbit tests. * modules/roundl-tests (Depends-on): Remove signbit. * doc/posix-functions/roundl.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'truncl-ieee'. * modules/truncl-ieee: New file. * modules/truncl-ieee-tests: New file. * tests/test-truncl-ieee.c: New file, based on tests/test-truncl.c. * tests/test-truncl.c (main): Remove signbit tests. * modules/truncl-tests (Depends-on): Remove signbit. * doc/posix-functions/truncl.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'ceill-ieee'. * modules/ceill-ieee: New file. * modules/ceill-ieee-tests: New file. * tests/test-ceill-ieee.c: New file, based on tests/test-ceill.c. * tests/test-ceill.c (main): Remove signbit tests. * modules/ceill-tests (Depends-on): Remove signbit. * doc/posix-functions/ceill.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'floorl-ieee'. * modules/floorl-ieee: New file. * modules/floorl-ieee-tests: New file. * tests/test-floorl-ieee.c: New file, based on tests/test-floorl.c. * tests/test-floorl.c (main): Remove signbit tests. * modules/floorl-tests (Depends-on): Remove signbit. * doc/posix-functions/floorl.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'round-ieee'. * modules/round-ieee: New file. * m4/round.m4 (gl_FUNC_ROUND): If gl_FUNC_ROUND_IEEE is also used, test whether round works according to ISO C 99 with IEC 60559. * m4/round-ieee.m4: New file. * modules/round-ieee-tests: New file. * tests/test-round-ieee.c: New file, based on tests/test-roundf-ieee.c. * tests/test-round1.c (main): Remove signbit tests. * modules/round-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/round.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'trunc-ieee'. * modules/trunc-ieee: New file. * m4/trunc.m4 (gl_FUNC_TRUNC): If gl_FUNC_TRUNC_IEEE is also used, test whether trunc works according to ISO C 99 with IEC 60559. * m4/trunc-ieee.m4: New file. * lib/math.in.h (trunc): Replace if REPLACE_TRUNC is set. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_TRUNC. * modules/math (Makefile.am): Substitute REPLACE_TRUNC. * modules/trunc-ieee-tests: New file. * tests/test-trunc-ieee.c: New file, based on tests/test-truncf-ieee.c. * tests/test-trunc1.c (main): Remove signbit tests. * modules/trunc-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/trunc.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'ceil-ieee'. * modules/ceil-ieee: New file. * m4/ceil.m4 (gl_FUNC_CEIL): Require gl_MATH_H_DEFAULTS. If gl_FUNC_CEIL_IEEE is also used, test whether ceil works according to ISO C 99 with IEC 60559. * m4/ceil-ieee.m4: New file. * modules/ceil (Files): Add lib/ceil.c. (Depends-on): Add 'float'. (configure.ac): Invoke gl_MATH_MODULE_INDICATOR. * lib/math.in.h (ceil): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_CEIL, REPLACE_CEIL. * modules/math (Makefile.am): Substitute GNULIB_CEIL, REPLACE_CEIL. * modules/ceil-ieee-tests: New file. * tests/test-ceil-ieee.c: New file, based on tests/test-ceilf-ieee.c. * tests/test-math-c++.cc: Check the signature of 'ceil'. * doc/posix-functions/ceil.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'floor-ieee'. * modules/floor-ieee: New file. * m4/floor.m4 (gl_FUNC_FLOOR): Require gl_MATH_H_DEFAULTS. If gl_FUNC_FLOOR_IEEE is also used, test whether floor works according to ISO C 99 with IEC 60559. * m4/floor-ieee.m4: New file. * modules/floor (Files): Add lib/floor.c. (Depends-on): Add 'float'. (configure.ac): Invoke gl_MATH_MODULE_INDICATOR. * lib/math.in.h (floor): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_FLOOR, REPLACE_FLOOR. * modules/math (Makefile.am): Substitute GNULIB_FLOOR, REPLACE_FLOOR. * modules/floor-ieee-tests: New file. * tests/test-floor-ieee.c: New file, based on tests/test-floorf-ieee.c. * tests/test-math-c++.cc: Check the signature of 'floor'. * doc/posix-functions/floor.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'roundf-ieee'. * modules/roundf-ieee: New file. * m4/roundf.m4 (gl_FUNC_ROUNDF): If gl_FUNC_ROUNDF_IEEE is also used, test whether roundf works according to ISO C 99 with IEC 60559. * m4/roundf-ieee.m4: New file. * modules/roundf-ieee-tests: New file. * tests/test-roundf-ieee.c: New file, based on tests/test-roundf1.c. * tests/test-roundf1.c (main): Remove signbit tests. * modules/roundf-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/roundf.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'truncf-ieee'. * modules/truncf-ieee: New file. * m4/truncf.m4 (gl_FUNC_TRUNCF): If gl_FUNC_TRUNCF_IEEE is also used, test whether truncf works according to ISO C 99 with IEC 60559. * m4/truncf-ieee.m4: New file. * lib/math.in.h (truncf): Replace if REPLACE_TRUNCF is set. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_TRUNCF. * modules/math (Makefile.am): Substitute REPLACE_TRUNCF. * modules/truncf-ieee-tests: New file. * tests/test-truncf-ieee.c: New file, based on tests/test-truncf1.c. * tests/test-truncf1.c (main): Remove signbit tests. * modules/truncf-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/truncf.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'ceilf-ieee'. * modules/ceilf-ieee: New file. * m4/ceilf.m4 (gl_FUNC_FLOORF): If gl_FUNC_CEILF_IEEE is also used, test whether ceilf works according to ISO C 99 with IEC 60559. * m4/ceilf-ieee.m4: New file. * modules/ceilf-ieee-tests: New file. * tests/test-ceilf-ieee.c: New file, based on tests/test-ceilf1.c. * tests/test-ceilf1.c (main): Remove signbit tests. * modules/ceilf-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/ceilf.texi: Mention the new module. 2010-12-21 Bruno Haible New module 'floorf-ieee'. * modules/floorf-ieee: New file. * m4/floorf.m4 (gl_FUNC_FLOORF): If gl_FUNC_FLOORF_IEEE is also used, test whether floorf works according to ISO C 99 with IEC 60559. * m4/floorf-ieee.m4: New file. * modules/floorf-ieee-tests: New file. * tests/test-floorf-ieee.c: New file, based on tests/test-floorf1.c. * tests/test-floorf1.c (main): Remove signbit tests. * modules/floorf-tests (Depends-on): Remove 'signbit'. * doc/posix-functions/floorf.texi: Mention the new module. 2010-12-21 Bruno Haible Support for minus zero in autoconf macros. * m4/minus-zero.m4: New file, based on tests/minus-zero.h. * m4/signbit.m4 (gl_FLOAT_SIGNBIT_CODE, gl_DOUBLE_SIGNBIT_CODE, gl_LONG_DOUBLE_SIGNBIT_CODE, gl_FLOATTYPE_SIGNBIT_CODE): New macros. * tests/minus-zero.h: Update comments. 2010-12-21 Bruno Haible Tests for module 'ceil'. * modules/ceil-tests: New file. * tests/test-ceil1.c: New file, based on tests/test-ceill.c. * tests/test-ceil2.c: New file, based on tests/test-ceilf2.c. 2010-12-21 Bruno Haible Tests for module 'floor'. * modules/floor-tests: New file. * tests/test-floor1.c: New file, based on tests/test-floorl.c. * tests/test-floor2.c: New file, based on tests/test-floorf2.c. 2010-12-21 Bruno Haible math: Fix indentation. * lib/math.in.h (floorf): Fix indentation. 2010-12-21 Bruno Haible Fix cross-compilation guesses on Solaris. * m4/fopen.m4 (gl_FUNC_FOPEN): Correct shell pattern so that it does not match "solaris2.10". * m4/open.m4 (gl_FUNC_OPEN): Likewise. * m4/printf.m4 (gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_DIRECTIVE_N, gl_VSNPRINTF_ZEROSIZE_C99): Likewise. 2010-12-21 Paul Eggert snprintf: port snprintf (NULL, 0, ...) to Solaris 8 and 9 This fixes a problem observed with the latest coreutils snapshot that caused a test to fail on Solaris 8. src/csplit.c's call snprintf (NULL, 0, format, UINT_MAX) returns -1 on Solaris 9 and earlier, instead of returning the number of bytes that would have been generated; this causes csplit to incorrectly report memory exhaustion. * m4/printf.m4 (gl_SNPRINTF_RETVAL_C99): Also check for snprintf (NULL, 0, ...) and (for good measure) snprintf (buf, 0, ...). Guess that it doesn't work on Solaris 2.6 through 9. Adjust comments to match. (gl_PRINTF_SIZES_C99, gl_PRINTF_DIRECTIVE_F, gl_SNPRINTF_RETVAL_C99): Fix typo in matching older versions of Solaris: "solaris2.10" is matched by the shell pattern "solaris2.[0-9]*". This matters only for guessing while cross-compiling. * m4/snprintf.m4 (gl_FUNC_SNPRINTF): Also check gl_SNPRINTF_RETVAL_C99. 2010-12-20 Paul Eggert ftoastr: fix comment again * lib/ftoastr.h: Fix typo in comment. Noted by Ben Pfaff in . Also, simplify example a bit by using flags = 0. 2010-12-20 Bruno Haible round*, trunc*: Update documentation regarding glibc. * doc/posix-functions/roundf.texi: Mention missing declaration problem. * doc/posix-functions/round.texi: Likewise. * doc/posix-functions/roundl.texi: Likewise. * doc/posix-functions/truncf.texi: Likewise. * doc/posix-functions/trunc.texi: Likewise. * doc/posix-functions/truncl.texi: Likewise. 2010-12-20 Bruno Haible roundf, round, roundl: Update documentation regarding OSF/1 5.1. * doc/posix-functions/roundf.texi: Mention OSF/1 5.1 problem. * doc/posix-functions/round.texi: Likewise. * doc/posix-functions/roundl.texi: Likewise. 2010-12-20 Bruno Haible ttyname_r: Add missing declaration on HP-UX 11. * lib/unistd.in.h (ttyname_r): Test HAVE_DECL_TTYNAME_R instead of HAVE_TTYNAME_R. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Test whether ttyname_r is declared. Set HAVE_TTYNAME_R always. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_TTYNAME_R, not HAVE_TTYNAME_R. * modules/unistd (Makefile.am): Substitute HAVE_DECL_TTYNAME_R, not HAVE_TTYNAME_R. * doc/posix-functions/ttyname_r.texi: Document the HP-UX 11 problem. 2010-12-20 Bruno Haible getlogin, getlogin_r: Document HP-UX 11.11 bugs. * doc/posix-functions/getlogin.texi: Document HP-UX 11.11 bug. * doc/posix-functions/getlogin_r.texi: Likewise. * tests/test-getlogin.c: Include . (main): Avoid test failure on HP-UX 11.11. * tests/test-getlogin_r.c (main): Likewise. 2010-12-20 Bruno Haible getlogin_r: Add missing declaration on HP-UX 11. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Test whether getlogin_r is declared also when it exists as a function. * doc/posix-functions/getlogin_r.texi: Document this workaround. 2010-12-20 Bruno Haible wcsrtombs: Don't confuse mbstate_t with rpl_mbstate_t. * lib/wcsrtombs.c: If gnulib overrides mbstate_t, define wcsrtombs through wcrtomb. 2010-12-19 Paul Eggert ftoastr: fix comment * lib/ftoastr.h: Fix typo in comment. Noted by Ben Pfaff in . 2010-12-19 Bruno Haible isnan: Ensure it is a macro. * lib/math.in.h (isnan): Define as a macro if not already a macro. * doc/posix-functions/isnan.texi: Mention problem on IRIX, OSF/1, Solaris. 2010-12-19 Bruno Haible ldexpl test: Fix link error on OSF/1 5.1. * modules/ldexpl-tests (Makefile.am): Define test_ldexpl_LDADD. 2010-12-19 Bruno Haible wctype: Make it work in C++ mode on OSF/1 5.1. * lib/wctype.in.h (iswblank): Declare but not define here. * lib/iswblank.c: New file, extracted from lib/wctype.in.h. * m4/wctype_h.m4 (gl_WCTYPE_H): Arrange to compile it if needed. * modules/wctype (Files): Add lib/iswblank.c. 2010-12-19 Bruno Haible signal: Document problem with type of SIGRTMIN, SIGRTMAX on OSF/1 5.1. * doc/posix-headers/signal.texi: Document OSF/1 5.1 problem. * lib/strsignal.c (strsignal): Cast SIGRTMIN to 'int'. 2010-12-19 Bruno Haible sys_socket: Use POSIX compatible declarations on OSF/1 5.1. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): On OSF/1, define _POSIX_PII_SOCKET. * doc/posix-functions/recv.texi: Document the OSF/1 problem. * doc/posix-functions/recvfrom.texi: Likewise. * doc/posix-functions/send.texi: Likewise. * doc/posix-functions/sendto.texi: Likewise. 2010-12-19 Bruno Haible tcgetsid: Add missing declaration on OSF/1 5.1. * lib/termios.in.h (tcgetsid): Test HAVE_DECL_TCGETSID instead of HAVE_TCGETSID. * m4/tcgetsid.m4 (gl_FUNC_TCGETSID): Test whether tcgetsid is declared. Don't set HAVE_TCGETSID. * m4/termios_h.m4 (gl_TERMIOS_H_DEFAULTS): Initialize HAVE_DECL_TCGETSID, not HAVE_TCGETSID. * modules/termios (Makefile.am): Substitute HAVE_DECL_TCGETSID, not HAVE_TCGETSID. * doc/posix-functions/tcgetsid.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible stdio: Fix problem with popen() declaration on OSF/1 5.1. * lib/stdio.in.h: During the include_next statement, let recursive includes of this file include only the system header file. 2010-12-19 Bruno Haible iconv_open: Fix regression from 2010-12-04. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN_UTF): Fix typo. Reported by Noah Lavine . 2010-12-19 Bruno Haible stdbool test: Avoid a gcc warning. * tests/test-stdbool.c (main): Fail if e1 is false. Reported by Jim Meyering. 2010-12-19 Jim Meyering setenv: restore to working order $HAVE_SETENV is used in gl_FUNC_SETENV, yet its definitions were mistakenly removed. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Restore code to set HAVE_SETENV. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Restore code to initialize HAVE_SETENV. 2010-12-19 Bruno Haible Document some different function declarations on OSF/1 5.1. * doc/posix-functions/gai_strerror.texi: Mention different declaration. * doc/posix-functions/inet_ntop.texi: Likewise. * doc/posix-functions/gethostname.texi: Likewise. * lib/unistd.in.h (gethostname): Update comment. 2010-12-19 Bruno Haible doc: Mention vasprintf-posix module. * doc/glibc-functions/asprintf.texi: Mention the workarounds present in the 'vasprintf-posix' module. * doc/glibc-functions/vasprintf.texi: Likewise. 2010-12-19 Bruno Haible unsetenv: Add missing declaration on OSF/1 5.1. * lib/stdlib.in.h (setenv): Test HAVE_DECL_UNSETENV, not HAVE_UNSETENV. * m4/setenv.m4 (gl_FUNC_UNSETENV): Test whether unsetenv is declared. Don't set HAVE_UNSETENV. In the test program, set _BSD. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_UNSETENV, not HAVE_UNSETENV. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_UNSETENV, not HAVE_UNSETENV. * doc/posix-functions/unsetenv.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible setenv: Add missing declaration on OSF/1 5.1. * lib/stdlib.in.h (setenv): Test HAVE_DECL_SETENV, not HAVE_SETENV. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Test whether setenv is declared. Don't set HAVE_SETENV. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_DECL_SETENV, not HAVE_SETENV. * modules/stdlib (Makefile.am): Substitute HAVE_DECL_SETENV, not HAVE_SETENV. * doc/posix-functions/setenv.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible nl_langinfo tests: Avoid gcc warning. * tests/test-nl_langinfo.c: Don't enable the GCC pragma for GCC 4.2. 2010-12-19 Bruno Haible mknod: Avoid error in C++ mode on OSF/1 with GCC. * lib/sys_stat.in.h (mknod): Use _GL_CXXALIAS_SYS_CAST instead of _GL_CXXALIAS_SYS. 2010-12-19 Bruno Haible stdbool: Relax test. * tests/test-stdbool.c (e): Don't require that casts from a variable's address to 'bool' work in static initializer, for compilers other than GCC. 2010-12-19 Bruno Haible ftello: Add missing declaration on OSF/1 5.1. * lib/stdio.in.h (ftello): Test HAVE_DECL_FTELLO, not HAVE_FTELLO. * m4/ftello.m4 (gl_FUNC_FTELLO): Test whether ftello is declared. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_DECL_FTELLO. * modules/stdio (Makefile.am): Substitute HAVE_DECL_FTELLO. * doc/posix-functions/ftello.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible fseeko: Add missing declaration on OSF/1 5.1. * lib/stdio.in.h (fseeko): Test HAVE_DECL_FSEEKO, not HAVE_FSEEKO. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Test whether fseeko is declared. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_DECL_FSEEKO. * modules/stdio (Makefile.am): Substitute HAVE_DECL_FSEEKO. * doc/posix-functions/fseeko.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible fchdir: Add missing declaration on OSF/1 5.1. * lib/unistd.in.h (fchdir): Provide declaration if systems lacks it. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Check whether fchdir is declared. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_FCHDIR. * modules/unistd (Makefile.am): Substitute HAVE_DECL_FCHDIR. * doc/posix-functions/fchdir.texi: Mention the OSF/1 5.1 problem. 2010-12-19 Bruno Haible relocatable-prog-wrapper: Separate from relocatable-prog. * modules/relocatable-prog (Makefile.am): Define uninstall-hook and uninstall-relocwrapper rule here. * modules/relocatable-prog-wrapper (Makefile.am): ... not here. Reported by Ian Beckwith . 2010-12-19 Bruno Haible unistr/u8-mbsnlen: Add missing dependency. * modules/unistr/u8-mbsnlen (Depends-on): Add unistr/u8-mbtouc. Reported by Ian Beckwith . 2010-12-19 Bruno Haible iconv: Make it possible again to use this module without 'iconv-h'. * modules/iconv (configure.ac): Don't invoke gl_ICONV_MODULE_INDICATOR if it is not defined. Reported by Ian Beckwith . 2010-12-18 Paul Eggert acl: port to Solaris 8 when copying from tmpfs to ufs * lib/copy-acl.c (qcopy_acl): Also allow EINVAL as an ignorable error number. Problem observed on Solaris 8 with latest coreutils, with "mv A B", where A is on a tmpfs file system and B is on a ufs file system. This caused coreutils' mv/part-symlink test to fail. tests: set fail=0 at start * tests/init.sh (setup_): Move fail=0 initialization here ... (mktempd_): ... from here, so that tests can rely on fail being set to 0 initially. This fixes a problem in coreutils; see: http://lists.gnu.org/r/coreutils/2010-12/msg00083.html 2010-12-18 Bruno Haible memmem-simple: Stylistic changes. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): Avoid possible gcc warning. Fix preprocessor directive indentation. 2010-12-15 Pádraig Brady memmem, memmem-simple: reorganize and expand empty needle check * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE, gl_FUNC_MEMMEM): Move all functional checks to memmem-simple so that one has a fully functional memmem by using just this module. Restrict the performance only check to the memmem module. Also expand the empty needle check to ensure the correct pointer is returned, not just a non NULL pointer. * doc/glibc-functions/memmem.texi: Rearrange the portability documentation to correlate with the rearranged checks. Clarify exactly how the memmem and memmem-simple modules relate to each other. 2010-12-15 Pádraig Brady Bruno Haible Improve cross-compilation guesses for uClibc. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): When cross-compiling, assume that uClibc does not have the glibc bug. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE): Likewise. 2010-12-14 Eric Blake configmake: provide fallbacks for oldest supported autotools * m4/configmake.m4: New file. * modules/configmake (Files): Ship it. (configure.ac): Use it to guarantee fallbacks. 2010-12-13 Pádraig Brady read-file: Improve handling of large files * lib/read-file.c (fread_file): Minimize realloc()s for regular files, and better manage sizes around SIZE_MAX. 2010-12-13 Eric Blake cloexec, fcntl: relax license * modules/cloexec (License): Change from LGPLv3+ to LGPLv2+, with consent from all contributors. * modules/fcntl (License): Likewise. 2010-12-10 Bruno Haible Tests for module 'pipe-posix'. * modules/pipe-posix-tests: New file. * tests/test-pipe.c: New file, based on tests/test-pipe2.c. 2010-12-10 Bruno Haible pipe-posix: Make it work in C++ mode. * lib/unistd.in.h: Don't include , for pipe. (pipe): Use common idiom, not a macro definition. * lib/pipe.c: New file. * m4/pipe.m4: New file. * modules/pipe-posix (Description): Enhance. (Files): Add lib/pipe.c, m4/pipe.m4. (configure.ac): Invoke gl_FUNC_PIPE. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_PIPE. * modules/unistd (Makefile.am): Substitute HAVE_PIPE. * tests/test-unistd-c++.cc: Check the signature of pipe. 2010-12-10 Bruno Haible Rename module 'pipe' to 'spawn-pipe'. * modules/spawn-pipe: New file, renamed from modules/pipe. (Files, configure.ac, Makefile.am): Update. (Include): Mention "spawn-pipe.h" instead of "pipe.h". * modules/pipe: Reduce to an obsolete indirection to 'spawn-pipe'. * lib/spawn-pipe.h: New file, renamed from lib/pipe.h. * lib/spawn-pipe.c: New file, renamed from lib/pipe.c. Include "spawn-pipe.h" instead of "pipe.h". * m4/spawn-pipe.m4: New file, renamed from m4/pipe.m4. Rename gl_PIPE to gl_SPAWN_PIPE. * modules/spawn-pipe-tests: New file, renamed from modules/pipe-tests. (Files, Makefile.am): Update. * tests/test-spawn-pipe.sh: New file, renamed from tests/test-pipe.sh. Update. * tests/test-spawn-pipe.c: New file, renamed from tests/test-pipe.c. Include "spawn-pipe.h" instead of "pipe.h". * lib/csharpcomp.c: Include "spawn-pipe.h" instead of "pipe.h". * lib/javacomp.c: Likewise. * lib/javaversion.c: Likewise. * lib/pipe-filter-gi.c: Likewise. * lib/pipe-filter-ii.c: Likewise. * modules/csharpcomp (Depends-on): Add 'spawn-pipe', remove 'pipe'. * modules/javacomp (Depends-on): Likewise. * modules/javaversion (Depends-on): Likewise. * modules/pipe-filter-gi (Depends-on): Likewise. * modules/pipe-filter-ii (Depends-on): Likewise. * MODULES.html.sh (Executing programs): Update. * NEWS: Mention the change. 2010-12-10 Eric Blake pipe-posix: new module * modules/pipe-posix: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set default. (gl_UNISTD_H): Check for declaration. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (pipe): Provide it for mingw. * doc/posix-functions/pipe.texi (pipe): Update documentation. * MODULES.html.sh (File descriptor based Input/Output): Likewise. 2010-12-07 Bruno Haible unistr/u8-strcmp: Avoid collision with libc function on Solaris 11. * lib/unistr.in.h (u8_strcmp) [__sun]: Declare with real name u8_strcmp_gnu. * modules/unistr/u8-strcmp (configure.ac): Bump version number. 2010-12-06 Bruno Haible Update internal documentation. * m4/README: Document new idioms for AC_RUN_IFELSE invocations. 2010-12-04 Bruno Haible Put more information about failed tests into the test return codes. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Change test program so that it returns an enumerated value (0, 1, 2, 3, 4, ...). * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/intdiv0.m4 (gt_INTDIV0): Likewise. * m4/isapipe.m4 (gl_PREREQ_ISAPIPE): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/sleep.m4 (gl_FUNC_SLEEP): Likewise. * m4/stdint.m4 (gl_STDINT_H): Likewise. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Change test program so that it returns a bit mask. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Likewise. * m4/chown.m4 (gl_FUNC_CHOWN_FOLLOWS_SYMLINK): Likewise. * m4/dup2.m4 (gl_FUNC_DUP2): Likewise. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Likewise. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Likewise. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Likewise. * m4/iconv.m4 (AM_ICONV_LINK): Likewise. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN_UTF): Likewise. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. * m4/isnanf.m4 (gl_ISNANF_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): Likewise. * m4/link.m4 (gl_FUNC_LINK): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * m4/mbrlen.m4 (gl_MBRLEN_RETVAL): Likewise. * m4/mbrtowc.m4 (gl_MBRTOWC_RETVAL): Likewise. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Likewise. * m4/memchr.m4 (gl_FUNC_MEMCHR): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Likewise. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise. * m4/mktime.m4 (AC_FUNC_MKTIME): Likewise. * m4/open.m4 (gl_FUNC_OPEN): Likewise. * m4/poll.m4 (gl_FUNC_POLL): Likewise. * m4/popen.m4 (gl_FUNC_POPEN): Likewise. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_LONG_DOUBLE, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_DIRECTIVE_LS, gl_PRINTF_PRECISION): Likewise. * m4/regex.m4 (gl_REGEX): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir.m4 (gl_FUNC_RMDIR): Likewise. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Likewise. * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/symlink.m4 (gl_FUNC_SYMLINK): Likewise. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Likewise. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. * m4/utimes.m4 (gl_FUNC_UTIMES): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Likewise. (gl_FLOATTYPE_SIGN_LOCATION): Change test program so that it returns an enumerated value. * m4/acl.m4 (gl_ACL_GET_FILE): Use "if ... return 1; return 0;" style. 2010-12-04 Bruno Haible Update for Solaris 11 2010-11. * doc/{glibc,posix}-{functions,headers}: Add info about Solaris 11 Express, released in November 2010. 2010-12-04 Bruno Haible nproc: Relax license. * modules/nproc (License): Change to LGPL, with consent by Glen Lenker and Paul Eggert. Requested by Ludovic Courtès . 2010-12-01 Paul Eggert utimecmp: fine-grained src to nearby coarse-grained dest * lib/utimecmp.c (utimecmp): When UTIMECMP_TRUNCATE_SOURCE is set, and the source is on a file system with higher-resolution time stamps, than the destination, and _PC_TIMESTAMP_RESOLUTION does not work, and the time stamps are close together, the algorithm to determine the exact resolution from the read-back mtime was buggy: it had a "!=" where it should have had an "==". This bug has been in the code ever since it was introduced to gnulib. Problem reported by Dan Jacobson in . 2010-11-30 Bruno Haible strerror_r-posix: Fix autoconf test. * m4/strerror_r.m4 (gl_FUNC_STRERROR_R): Fix typo. 2010-11-28 Bruno Haible Paul Eggert Tests for module 'getdomainname'. * modules/getdomainname-tests: New file. * tests/test-getdomainname.c: New file, based on tests/test-gethostname.c. 2010-11-28 Bruno Haible Paul Eggert getdomainname: Use the system function when possible. * lib/unistd.in.h: Include , for getdomainname's declaration. (getdomainname): Replace if needed. Provide the declaration if it is missing. Don't use _GL_CXXALIAS_SYS_CAST. * lib/getdomainname.c: Include and . (getdomainname): When the system has getdomainname, call the system function. When sysinfo (SI_SRPC_DOMAIN, ...) is possible, use that. * m4/getdomainname.m4 (gl_FUNC_GETDOMAINNAME): Require gl_HEADER_SYS_SOCKET and gl_HEADER_NETDB. Test whether the function is found in libnsl. Look for the declaration also in . Replace the function if its second argument is of type 'int' or if it is found in libnsl. (gl_PREREQ_GETDOMAINNAME): Define HAVE_GETDOMAINNAME. Check for and sysinfo(). * modules/getdomainname (Depends-on): Add netdb, sys_socket. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_GETDOMAINNAME and REPLACE_GETDOMAINNAME instead of HAVE_GETDOMAINNAME. * modules/unistd (Makefile.am): Substitute HAVE_DECL_GETDOMAINNAME and REPLACE_GETDOMAINNAME instead of HAVE_GETDOMAINNAME. * doc/glibc-functions/getdomainname.texi: Document the problems with the getdomainname declaration. 2010-11-28 Bruno Haible sys_socket: Ensure ss_family field on AIX. * lib/sys_socket.in.h (ss_family): New macro definition. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Set HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY. Set SYS_SOCKET_H if necessary. (gl_SYS_SOCKET_H_DEFAULTS): Initialize HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY. * modules/sys_socket (Makefile.am): Substitute HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY. * doc/posix-headers/sys_socket.texi: Mention the AIX bug. 2010-11-27 Bruno Haible readline: Improve configure output. * m4/readline.m4 (gl_FUNC_READLINE): Make the "checking for readline..." result understandable. 2010-11-27 Bruno Haible *printf-posix: Detect a bug on Solaris 10/x86. * m4/printf.m4 (gl_PRINTF_PRECISION): Detect crash with large precision for floating-point output. * tests/test-vasnprintf-posix.c (test_function): Test precision with %f directive. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * doc/posix-functions/fprintf.texi: Mention Solaris/x86 bug. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/glibc-functions/obstack_printf.texi: Likewise. * doc/glibc-functions/obstack_vprintf.texi: Likewise. 2010-11-27 Bruno Haible Fix link error when module libunistring-optional is in use. * modules/striconveh-tests (Makefile.am): Link with $(LIBUNISTRING). * modules/striconveha-tests (Makefile.am): Likewise. 2010-11-27 Bruno Haible regex: Mention link dependencies. * modules/regex (Link): New section. * modules/rpmatch (Link): Likewise. * modules/regex-quote-tests (Makefile.am): Link with $(LIBINTL). 2010-11-27 Bruno Haible ftoastr: Fix compilation error on Solaris. * lib/ftoastr.c: Include . 2010-11-27 Bruno Haible getloadavg: Update documentation. * doc/glibc-functions/getloadavg.texi: Mention the Solaris problem. 2010-11-27 Bruno Haible sys_socket: Fix test whether the functions are declared. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Include , not . 2010-11-27 Bruno Haible getpass: Make sure to get system declaration on some platforms. * m4/getpass.m4 (gl_FUNC_GETPASS, gl_FUNC_GETPASS_GNU): Require gl_USE_SYSTEM_EXTENSIONS. * modules/getpass (Depends-on): Add extensions. 2010-11-26 Bruno Haible iconv-h: Fix test-iconv-h-c++ failure on Solaris 11 2010-11. * lib/iconv.in.h (iconv_open, iconv, iconv_close): Define only if the 'iconv' module is present. (ICONV_CONST): New macro. * m4/iconv_h.m4 (gl_ICONV_H_DEFAULTS): Initialize GNULIB_ICONV and ICONV_CONST. * m4/iconv.m4 (AM_ICONV): If the gnulib module 'iconv-h' is present, set ICONV_CONST. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN_UTF): Don't set ICONV_CONST here. * modules/iconv (configure.ac): Invoke gl_ICONV_MODULE_INDICATOR. * modules/iconv-h (Makefile.am): Substitute GNULIB_ICONV. * tests/test-iconv-h.c (ICONV_CONST): Don't define here. * tests/test-iconv-h-c++.cc (ICONV_CONST): Don't define here. (iconv_open, iconv, iconv_close): Test only if the 'iconv' module is present. 2010-11-25 Paul Eggert ftoastr: comment fix * lib/ftoastr.c: "little" -> "little or no" in comment 2010-11-24 Paul Eggert stdint: port to GCC 4.3 + OSX + Octave On this platform, stdint.h is buggy and defines int64_t to long long int. The replacement defined it to long int, causing problems with C++ style name mangling. Instead, trust the system definition if INT64_MAX is defined, and likewise for the unsigned variant. Problem reported by Jarno Rajahalme in . * lib/stdint.in.h (GL_INT64_T): Define if INT64_MAX is defined, and don't mess with int64_t and INT64_MAX in this case. (GL_UINT64_T): Likewise for UINT64_MAX and uint64_t. 2010-11-24 Bruno Haible doc: Corrections regarding MacOS X 10.4 and 10.5. * doc/{glibc,posix,pastposix}-functions/*.texi: Update info about MacOS X. Reported by Simon Josefsson. 2010-11-22 Ben Pfaff Uninstall ".bin" files installed by relocwrapper. * modules/relocatable-prog-wrapper (uninstall-relocwrapper): Recursively run "make uninstall" with ".bin" prefixed to EXEEXT, unless it is already there. 2010-11-21 Bruno Haible Update for NetBSD 5.0. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Don't guess yes on NetBSD; the test fails on NetBSD 5.0. * doc/{glibc,posix,pastposix}-{headers,functions}/*.texi: Update info about NetBSD. 2010-11-21 Bruno Haible Update for HP-UX 11.23 and HP-UX 11.31. * doc/{glibc,posix}-{headers,functions}/*.texi: Update info about HP-UX. 2010-11-21 Bruno Haible Update for MacOS X 10.5. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Don't guess yes on MacOS X; the test fails on MacOS X 10.5.8. * doc/{glibc,posix,pastposix}-{headers,functions}/*.texi: Update info about MacOS X. 2010-11-20 Joel E. Denny bootstrap: add bootstrap_sync option. See discussion at , . * build-aux/bootstrap: Accept --bootstrap-sync to update bootstrap if it is not identical to the local gnulib's bootstrap. Accept bootstrap_sync=true in bootstrap.conf to enable this by default. Accept --no-bootstrap-sync to disable it. 2010-11-20 Bruno Haible Ensure that is included before __GLIBC__ is tested. * lib/printf-parse.h: Include . * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Require gl_FEATURES_H. Reported by Mike Frysinger . Ensure that is included before __GLIBC__ is tested. * lib/wchar.in.h: Include . * m4/wchar_h.m4 (gl_WCHAR_H): Require gl_FEATURES_H. * modules/wchar (Makefile.am): Substitute HAVE_FEATURES_H. Reported by Mike Frysinger . Ensure that is included before __GLIBC__ is tested. * lib/arpa_inet.in.h: Include . * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Require gl_FEATURES_H. * modules/arpa_inet (Makefile.am): Substitute HAVE_FEATURES_H. Reported by Mike Frysinger . Ensure that is included before __GLIBC__ is tested. * build-aux/link-warning.h: Include . * modules/link-warning (configure.ac): Require gl_FEATURES_H. (Makefile.am): Substitute HAVE_FEATURES_H into link-warning.h. Reported by Mike Frysinger . Ensure that is included before __GLIBC__ is tested. * m4/gnulib-common.m4 (gl_FEATURES_H): New macro. Reported by Mike Frysinger . 2010-11-20 Bruno Haible memmem: Fix autoconf test. * m4/memmem.m4 (gl_FUNC_MEMMEM): Test HAVE_DECL_MEMMEM, not HAVE_MEMMEM. 2010-11-20 Bruno Haible Port to uClibc. * build-aux/link-warning.h (GL_LINK_WARNING): Treat uClibc like glibc. * lib/fcntl.in.h: Likewise. * lib/hard-locale.c (GLIBC_VERSION): Likewise. * lib/mbrtowc.c (mbrtowc): Likewise. * lib/relocatable.c (find_shared_library_fullname): Likewise. * lib/strerror_r.c: Likewise. * lib/unistr/u8-strnlen.c: Likewise. * lib/vasnprintf.c (decimal_point_char): Likewise. * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Likewise. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Likewise. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Likewise. * m4/glibc21.m4 (gl_GLIBC21): Likewise. * tests/test-sigaction.c (handler, main): Likewise. * lib/freading.h: Treat uClibc like a non-glibc platform. * lib/freading.c: Likewise. * lib/gettext.h: Likewise. * lib/localename.c (gl_locale_name_thread_unsafe, HAVE_LOCALE_NULL): Likewise. * lib/printf-parse.h (FLAG_LOCALIZED): Likewise. * lib/printf-parse.c (PRINTF_PARSE): Likewise. * lib/propername.c (proper_name_utf8): Likewise. * lib/spawn.in.h: Likewise. * lib/striconv.c (mem_cd_iconv, str_cd_iconv, str_iconv): Likewise. * lib/striconveh.c (iconveh_open, iconv_carefully, iconv_carefully_1, mem_cd_iconveh_internal): Likewise. * lib/striconveha.c (mem_iconveha, str_iconveha): Likewise. * lib/string.in.h (memchr, memrchr, rawmemchr, strchrnul, strpbrk, strstr, strcasestr): Likewise. * lib/unicodeio.c (unicode_to_mb): Likewise. * lib/uniconv/u16-conv-from-enc.c (UTF16_NAME): Likewise. * lib/uniconv/u16-conv-to-enc.c (UTF16_NAME): Likewise. * lib/uniconv/u16-strconv-to-enc.c (UTF16_NAME): Likewise. * lib/uniconv/u32-conv-from-enc.c (UTF32_NAME): Likewise. * lib/uniconv/u32-conv-to-enc.c (UTF32_NAME): Likewise. * lib/uniconv/u32-strconv-to-enc.c (UTF32_NAME): Likewise. * lib/unistr/u8-stpncpy.c: Likewise. * lib/vasnprintf.c (VASNPRINTF): Likewise. * lib/xmalloc.c (HAVE_GNU_CALLOC): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/glibc2.m4 (gt_GLIBC2): Likewise. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE, gl_FUNC_MEMMEM): Likewise. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE, gl_FUNC_STRCASESTR): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE, gl_FUNC_STRSTR): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * m4/wchar_h.m4 (gl_WCHAR_H): Likewise. * tests/test-getopt.h (OPTIND_MIN): Likewise. * tests/test-striconveha.c (main): Likewise. * tests/test-vasnprintf-posix.c (test_function): Likewise. * tests/test-vasnprintf-posix3.c (test_function, main): Likewise. * doc/posix-functions/getdelim.texi: Mention an uClibc bug. * doc/posix-functions/getline.texi: Likewise. Reported by Mike Frysinger . 2010-11-20 Bruno Haible nproc: Fix condition. * lib/nproc.c: Test HAVE_PTHREAD_GETAFFINITY_NP, not HAVE_PTHREAD_AFFINITY_NP. 2010-11-20 Bruno Haible Fix a comment. * lib/vasnprintf.c (VASNPRINTF): Fix comment. 2010-11-19 Paul Eggert ftoastr: don't assume snprintf * lib/ftoastr.c (snprintf) [! GNULIB_SNPRINTF_POSIX]: Implement a subset of snprintf here, by using sprintf safely. * modules/ftoastr (Depends-on): Remove snprintf. 2010-11-19 Jim Meyering test-rename.h: fix compilation failure * tests/test-rename.h (test_rename): Add omitted "}". 2010-11-17 Jim Meyering maint.mk: add a URL discussing the no-@acronym policy * top/maint.mk (sc_texinfo_acronym): Add a URL in a comment. 2010-11-18 Paul Eggert ftoastr: depend on snprintf, improve comments * lib/ftoastr.c: Also mention Loitsch's draft. * lib/ftoastr.h: Require WIDTH to be nonnegative. This isn't needed in the current implementation, but it might simplify speeding up the code later. * modules/ftoastr: Depend on snprintf; this improves portability. Suggested by Bruno Haible in the same email. ftoastr: port to hosts lacking strtof and strtold Problem reported by Bruno Haible in . * lib/ftoastr.c (STRTOF): Define to strtod if in a pre-C99 environment and strtold (and presumably strtof) are not available. * modules/ftoastr (Files): Add m4/c-strtod.m4. (configure.ac): Require gl_C99_STRTOLD. 2010-11-18 Bruno Haible c-strtold: Avoid link error on AIX 7. * lib/c-strtod.c: Test also HAVE_STRTOD_L or HAVE_STRTOLD_L. * m4/c-strtod.m4 (gl_C_STRTOD): Test whether strtod_l exists. (gl_C_STRTOLD): Test whether strtold_l exists. Reported by Albert Chin . 2010-11-17 Paul Eggert intprops: new macro INT_BITS_STRLEN_BOUND * lib/intprops.h (INT_BITS_STRLEN_BOUND): New macro, needed by ftoastr.h. This exposes an internal of intprops.h that was formerly not exposed. Also, it uses a slightly tighter bound than before; though this makes no practical difference, we might as well be as tight as we easily can. ftoastr: new module, for lossless conversion of floats to short strings * lib/ftoastr.h, lib/ftoastr.c, lib/dtoastr.c, lib/ldtoastr.c: * modules/ftoastr: New files. 2010-11-15 Paul Eggert bootstrap: port to Solaris sed * build-aux/bootstrap (get_version): Port to Solaris sed. See Ralf Wildenhues's note in . 2010-11-14 Jim Meyering maint.mk: rename variable: s/noteworthy/gl_noteworthy_news_/ * top/maint.mk (gl_noteworthy_news_): Rename from "noteworthy" and move definition closer to sole use. 2010-11-13 Jim Meyering remove autoconf-2.57 work-around requiring AC_PROG_EGREP and AC_PROG_CPP Now we require at least autoconf-2.59, which means the work-around is no longer needed. * m4/alloca.m4 (gl_FUNC_ALLOCA): Remove work-around. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Likewise. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Likewise. * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Likewise. 2010-11-13 Bruno Haible rename, renameat: Avoid test failures at NFS mounted locations. * tests/test-rename.h (dentry_exists, assert_nonexistent): New functions. (test_rename): Use assert_nonexistent. * tests/test-rename.c: Include . * tests/test-renameat.c: Likewise. Reported by Gary V. Vaughan . rename, renameat: Document Linux bug with NFS . * doc/posix-functions/rename.texi: Mention the NFS bug on Linux. * doc/posix-functions/renameat.texi: Likewise. Suggested by Eric Blake. 2010-11-13 Bruno Haible rename test: Add comments. * tests/test-rename.h (test_rename): Add structure and comments. 2010-11-13 Eric Blake maintainer-makefile: cover a few more files * top/maint.mk (sc_prohibit_test_double_equal): Also cover shell scripts generated within C files, for libvirt. 2010-11-13 Bruno Haible unistr/u8-mbtouc: Improve handling of ill-formed UTF-8 input. * lib/unistr/u8-mbtouc.c (u8_mbtouc): For an invalid multibyte character, return the number of bytes that belong together, not always 1. * lib/unistr/u8-mbtouc-unsafe.c (u8_mbtouc_unsafe): Likewise. * lib/unistr/u8-mbtouc-aux.c (u8_mbtouc_aux): Likewise. * lib/unistr/u8-mbtouc-unsafe-aux.c (u8_mbtouc_unsafe_aux): Likewise. * lib/unistr/u8-mbsnlen.c (u8_mbsnlen): Use u8_mbtouc to determine the number of bytes of an invalid character. * tests/unistr/test-u8-mbtouc.c (test_safe_function): New function. (main): Invoke it. * tests/unistr/test-u8-mbtouc.h (test_function): Update two test results. * tests/unistr/test-u8-mbsnlen.c (main): Test various kinds of malformed byte sequences. * modules/unistr/u8-mbtouc (configure.ac): Bump version number. * modules/unistr/u8-mbtouc-unsafe (configure.ac): Likewise. * modules/unistr/u8-mbsnlen (configure.ac): Likewise. Reported by Ben Pfaff and Paolo Bonzini. 2010-11-13 Bruno Haible openat: Work around glibc bug with fchownat() and empty file names. * m4/openat.m4 (gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): New macro. (gl_FUNC_FCHOWNAT): Invoke it. * lib/fchownat.c (rpl_fchownat): Handle the empty file name specially. * doc/posix-functions/fchownat.texi: Document the glibc bug. Reported by Gary V. Vaughan . 2010-11-13 Bruno Haible openat: Ensure autoconf macro ordering. * m4/openat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Require gl_USE_SYSTEM_EXTENSIONS. (gl_FUNC_FCHOWNAT): Require gl_UNISTD_H_DEFAULTS. 2010-11-13 Bruno Haible Update comments. * lib/unistr/u8-check.c: Update file name in comments. * lib/unistr/u8-mblen.c: Likewise. * lib/unistr/u8-prev.c: Likewise. * lib/unistr/u8-strmblen.c: Likewise. * lib/unistr/u8-strmbtouc.c: Likewise. 2010-11-13 Jim Meyering tests: avoid test failure on Solaris 10 due to lack of PATH export * tests/test-update-copyright.sh: Don't forget to export PATH. init.sh: ensure that IFS is defined, just in case... * tests/init.sh (setup_): Ensure that IFS is defined, so that saving and restoring it works as expected. This appears to be useful at least for an old version of dash from a long time ago (RH 6). See here for details: http://thread.gmane.org/gmane.comp.gnu.coreutils.general/436/focus=455 maint.mk: tighten "test a == b" check * top/maint.mk (sc_prohibit_test_double_equal): Restrict this test to files that contain something like #!/bin/sh. Without this, coreutils would get two false positives in the comments of C source files. 2010-11-12 Eric Blake bootstrap: fix typo in previous attempt * build-aux/bootstrap (buildreq): Correct the grouping. Reported by Paul Eggert. maintainer-makefile: prohibit test x == x * top/maint.mk (sc_prohibit_test_double_equal): New rule. Based on a report by Matthias Bolte. bootstrap: allow FreeBSD gzip * build-aux/bootstrap (get_version): Parse FreeBSD gzip version, which has no '.' and goes to stderr. * build-aux/bootstrap.conf (buildreq): Improve the sample file. Reported by Matthias Bolte. maintainer-makefile: check for i18n setup * top/maint.mk (sc_bindtextdomain): Check for evidence that _() will likely work. 2010-11-12 Bruno Haible sleep, nanosleep: Work around Linux 2.6.9 nanosleep bug. * lib/sleep.c (rpl_sleep): Split in chunks no larger than 24 days. * lib/nanosleep.c (nanosleep): Likewise. 2010-11-11 Bruno Haible fcntl-h: Fix for use of C++ on glibc systems. * lib/fcntl.in.h: Include before include_next also on glibc systems in C++ mode. Reported by Gary V. Vaughan . 2010-11-11 Christian Weisgerber (tiny change) mknod: avoid false failure with dash * m4/mknod.m4 (gl_FUNC_MKNOD): Use portable shell syntax. 2010-11-11 Paul Eggert unlink: Fix "is it should" typo in diagnostic. * m4/unlink.m4 (gl_FUNC_UNLINK): Fix typo, as per Reuben Thomas in . 2010-11-11 Bruno Haible Tests for module 'strerror_r-posix'. * modules/strerror_r-posix-tests: New file. * tests/test-strerror_r.c: New file. * tests/test-string-c++.cc: Check the signature of strerror_r. New module 'strerror_r-posix'. * lib/string.in.h (strerror_r): New declaration. * lib/strerror_r.c: New file. * m4/strerror_r.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Check for the declaration of strerror_r. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRERROR_R, HAVE_DECL_STRERROR_R, REPLACE_STRERROR_R. * modules/strerror_r-posix: New file. * modules/string (Makefile.am): Substitute GNULIB_STRERROR_R, HAVE_DECL_STRERROR_R, REPLACE_STRERROR_R. * doc/posix-functions/strerror_r.texi: Mention the new module and the portability problems. 2010-11-11 Torsten Scheck (tiny change) * build-aux/pmccabe2html: Fixed a off-by-one error, so last input line is also considered for output. Quoted function name in shell command, so temporary files for functions like MyClass::operator() are removed correctly without errors. 2010-11-09 Bruno Haible * doc/posix-functions/strerror.texi: List more failing platforms. * doc/posix-functions/strerror.texi: Add a comment. 2010-11-07 Paul Eggert fdopendir: fix bug on MacOS X when low on file descriptors * lib/fdopendir.c (REPLACE_FCHDIR): #define to 0 if not defined. (fdopendir_with_dup, fd_clone_opendir): Now have extra CWD arg. All callers changed. (fdopendir): Invoke save_cwd at the top level, not after using multiple dup() calls to use up file descriptors. Then retry fdopendir_with_dup. This avoids failure with EMFILE if FD is 1 less than the maximum number of open file descriptors, because save_cwd fails with errno == EMFILE. Problem reported by tsteven4 on Mac OS X 10.6.4 for tar 1.24 and for tar 1.25 . 2010-11-07 Bruno Haible vasnprintf: Support I flag on glibc systems. * lib/printf-parse.h (FLAG_LOCALIZED): New macro. * lib/printf-parse.c (PRINTF_PARSE): Handle the 'I' flag. * lib/vasnprintf.c (VASNPRINTF): Pass the 'I' flag on to the system's snprintf function. * tests/test-vasnprintf-posix.c (test_function): Test the 'I' flag on glibc systems. * tests/test-vasnprintf-posix3.c: New file. * modules/vasnprintf-posix-tests (Files): Add it. (TESTS, check_PROGRAMS): Add test-vasnprintf-posix3. 2010-11-05 Thien-Thi Nguyen (tiny change) [html] Fix copy/paste bug: Use unique name for compiler warnings. * MODULES.html.sh: For compiler warnings, use name `ansic_ext_compwarn' since `ansic_ext_misc' is already taken. 2010-11-05 Eric Blake ceil, floor: avoid spurious failure with icc * tests/test-ceilf2.c (ceilf_reference): Avoid icc's use of DAZ [denormals-as-zero] when optimizing without -mieee-fp option. * tests/test-floorf2.c (floorf_reference): Likewise. * tests/test-ceilf1.c (dummy): New function. (main): Use it to outsmart icc's optimization. * tests/test-floorf1.c (dummy, main): Likewise. tests: require working signbit * modules/ceilf-tests (Depends-on): Add signbit. * modules/ceill-tests (Depends-on): Likewise. * modules/floorf-tests (Depends-on): Likewise. * modules/floorl-tests (Depends-on): Likewise. * modules/round-tests (Depends-on): Likewise. * modules/roundf-tests (Depends-on): Likewise. * modules/roundl-tests (Depends-on): Likewise. * modules/trunc-tests (Depends-on): Likewise. * modules/truncf-tests (Depends-on): Likewise. * modules/truncl-tests (Depends-on): Likewise. strtod: work around icc bug * lib/strtod.c (minus_zero): Define to working value. (strtod): Use it to avoid icc bug. copysign: enhance tests * modules/copysign-tests (Files): Add minus-zero.h. * tests/test-copysign.c (main): Also test zeros. 2010-11-04 Eric Blake ceil, floor, round, trunc: enhance tests of -0 * tests/test-ceilf1.c (main): Ensure correct sign of result. * tests/test-ceill.c (main): Likewise. * tests/test-floorf1.c (main): Likewise. * tests/test-floorl.c (main): Likewise. * tests/test-round1.c (main): Likewise. * tests/test-roundf1.c (main): Likewise. * tests/test-roundl.c (main): Likewise. * tests/test-trunc1.c (main): Likewise. * tests/test-truncf1.c (main): Likewise. * tests/test-truncl.c (main): Likewise. 2010-11-04 Eric Blake frexp, tests: work around ICC bug with -zero * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Compute -0.0 in a way that works with more compilers. * tests/minus-zero.h: New file. * modules/ceilf-tests (Files): Include it. * modules/ceill-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/isnan-tests (Files): Likewise. * modules/isnand-nolibm-tests (Files): Likewise. * modules/isnand-tests (Files): Likewise. * modules/isnanf-nolibm-tests (Files): Likewise. * modules/isnanf-tests (Files): Likewise. * modules/isnanl-nolibm-tests (Files): Likewise. * modules/isnanl-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/signbit-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/strtod-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/vasnprintf-posix-tests (Files): Likewise. * modules/vasprintf-posix-tests (Files): Likewise. * tests/test-ceilf1.c (main): Use it. * tests/test-ceill.c (main): Likewise. * tests/test-floorf1.c (main): Likewise. * tests/test-floorl.c (main): Likewise. * tests/test-frexp.c (main): Likewise. * tests/test-frexpl.c (main): Likewise. * tests/test-isnan.c (main): Likewise. * tests/test-isnand.h (main): Likewise. * tests/test-isnanf.h (main): Likewise. * tests/test-isnanl.h (main): Likewise. * tests/test-ldexpl.c (main): Likewise. * tests/test-round.c (main): Likewise. * tests/test-roundf.c (main): Likewise. * tests/test-roundl.c (main): Likewise. * tests/test-signbit.c (test_signbitf, test_signbitd) (test_signbitl): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-strtod.c (main): Likewise. * tests/test-trunc1.c (main): Likewise. * tests/test-truncf1.c (main): Likewise. * tests/test-truncl.c (main): Likewise. isnanl: work around icc bug * lib/isnan.c (FUNC): Compute run-time NaN under ICC as well. 2010-11-03 Eric Blake tests: fix compiler warnings * tests/test-getopt.h (test_getopt): Fix condition. * tests/test-getopt_long.h (test_getopt_long): Likewise. * tests/test-pipe2.c (main): Likewise. * tests/test-quotearg-simple.c (main): Avoid icc warning. utimens: fix broken m4 test * m4/utimens.m4 (gl_UTIMENS): Include correct headers. 2010-10-28 Bruno Haible posix_spawn*, getdtablesize: Relax license. * modules/posix_spawn (License): Change to LGPLv2+. * modules/posix_spawnp (License): Likewise. * modules/posix_spawn-internal (License): Likewise. * modules/posix_spawnattr_init (License): Likewise. * modules/posix_spawnattr_getflags (License): Likewise. * modules/posix_spawnattr_setflags (License): Likewise. * modules/posix_spawnattr_getpgroup (License): Likewise. * modules/posix_spawnattr_setpgroup (License): Likewise. * modules/posix_spawnattr_getschedparam (License): Likewise. * modules/posix_spawnattr_setschedparam (License): Likewise. * modules/posix_spawnattr_getschedpolicy (License): Likewise. * modules/posix_spawnattr_setschedpolicy (License): Likewise. * modules/posix_spawnattr_getsigdefault (License): Likewise. * modules/posix_spawnattr_setsigdefault (License): Likewise. * modules/posix_spawnattr_getsigmask (License): Likewise. * modules/posix_spawnattr_setsigmask (License): Likewise. * modules/posix_spawnattr_destroy (License): Likewise. * modules/posix_spawn_file_actions_init (License): Likewise. * modules/posix_spawn_file_actions_addclose (License): Likewise. * modules/posix_spawn_file_actions_adddup2 (License): Likewise. * modules/posix_spawn_file_actions_addopen (License): Likewise. * modules/posix_spawn_file_actions_destroy (License): Likewise. * modules/getdtablesize (License): Likewise. Requested by Adam Stokes for use in netcf. 2010-10-26 Bruno Haible unistd: Refine workaround from 2009-12-23 against Cygwin bug. * lib/unistd.in.h: Don't include and , except on Cygwin and mingw. Suggested by Eric Blake. 2010-10-26 Bruno Haible stdio: Work around compilation error due to renameat() on Solaris 10. * lib/stdio.in.h: Include on Solaris. * lib/renameat.c: Don't include here. * doc/posix-functions/renameat.texi: Mention the Solaris problem. Reported by Paul Eggert and Eric Blake. 2010-10-26 Paul Eggert renameat: port to Solaris 10, which declares renameat in unistd.h * lib/renameat.c: Include unistd.h before stdio.h, because Solaris 10 declares renameat in unistd.h. Problem encountered when building GNU tar 1.24 on Solaris 10. 2010-10-26 Christian Weisgerber (tiny change) fdopendir: fix C89 compilation * lib/fdopendir.c (fd_clone_opendir): Move declaration for older compilers. 2010-10-23 Paul Eggert inttostr: simplify by removing unnecessary redundancy * lib/anytostr.c: Don't include verify.h. (anytostr): Don't verify that TYPE_SIGNED (inttype) equals inttype_is_signed. Instead, disable the bogus GCC warnings, so that there's no need for inttype_is_signed and for calling TYPE_SIGNED. * lib/imaxtostr.c (inttype_is_signed): Remove; no longer needed. * lib/inttostr.c, lib/offtostr.c, lib/uinttostr.c, lib/umaxtostr.c: Likewise. * modules/inttostr (Depends-on): Remove 'verify'. 2010-10-23 Bruno Haible nl_langinfo: Mention problem with CRNCYSTR on NetBSD 5.0. * doc/posix-functions/nl_langinfo.texi: Mention problem with CRNCYSTR. Reported by Eric Blake. 2010-10-23 Bruno Haible Tests: Fix LOCALE_JA on MirBSD 10. * m4/locale-ja.m4 (gt_LOCALE_JA): Reject a locale identifier that leads to an UTF-8 locale. * m4/locale-fr.m4 (gt_LOCALE_FR): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. Reported by Eric Blake. 2010-10-21 Bruno Haible nl_langinfo test: Avoid test failure on NetBSD 5. * tests/test-nl_langinfo.c (main): Relax test of nl_langinfo(CRNCYSTR). Reported by Eric Blake. 2010-10-21 Eric Blake c-stack: work around libsigsegv 2.8 bug * lib/c-stack.c (SIGSTKSZ): Increase size to avoid alternate stack overflow on at least PowerPC64. 2010-10-17 Bruno Haible userspec: Drop redundant file. * modules/userspec (Files): Remove lib/inttostr.h. 2010-10-17 Bruno Haible nl_langinfo tests: Silence some warnings. * tests/test-nl_langinfo.c: Silence -Wtype-limits warnings. Reported by Jim Meyering. 2010-10-17 Bruno Haible Make use of GCC's attribute __alloc_size__. * lib/xalloc.h (ATTRIBUTE_ALLOC_SIZE): New macro. (xmalloc, xzalloc, xcalloc, xrealloc, xmemdup, xnmalloc, xnrealloc, xcharalloc): Declare with ATTRIBUTE_ALLOC_SIZE. * lib/eealloc.h (eemalloc, eerealloc): Declare with attribute __alloc_size__. * lib/pagealign_alloc.h (pagealign_alloc, pagealign_xalloc): Likewise. Suggested by Jim Meyering. 2010-10-16 Joel E. Denny bootstrap: anchor .gitignore entries. * build-aux/bootstrap (insert_sorted_if_absent): Replace all uses with... (insert_vc_ignore): ... this new function, which prepends `/' to all .gitignore entries before passing them to insert_sorted_if_absent. 2010-10-16 Bruno Haible nextafter: Fix configure check. * modules/nextafter (configure.ac): Correct expected prototype. 2010-10-16 Bruno Haible termios: Update documentation. * doc/posix-headers/termios.texi: Mention remaining mingw problems. 2010-10-16 Bruno Haible tests: Make them compile with TinyCC. * tests/test-strstr.c (main): Remove parentheses around array initializer. 2010-10-15 Eric Blake ignore-value: make header idempotent * lib/ignore-value.h: Add double-inclusion guards. Reported by Stefan Berger. 2010-10-15 Jim Meyering GNUmakefile: handle "stable" target, not "major" * top/GNUmakefile (_is-dist-target): s/major/stable/ to match the lists in maint.mk and announce-gen. Without this, "make stable" would fail to ensure that $(VERSION) is up to date. 2010-10-15 Ludovic Courtès * lib/isnan.c (FUNC): Treat TinyCC (`__TINYC__') like `__SUNPRO_C' & co. 2010-10-14 Bruno Haible vasnprintf: Don't set errno to 0. * lib/vasnprintf.c (VASNPRINTF): Save and restore errno around the block that sets it to 0. Reported by Gianluigi Tiesi . 2010-10-14 Bruno Haible socketlib: Fix. * modules/socketlib (Files): Add m4/sys_socket_h.m4. Needed for gl_PREREQ_SYS_H_WINSOCK2. Reported by Ian Beckwith . 2010-10-13 Jim Meyering test-select-stdin.c: avoid warn_unused_result warnings * tests/test-select-stdin.c: Include "macros.h". ASSERT that read and fflush succeed. 2010-10-13 Jim Meyering git-version-gen: do require git-VC'd files in cwd * build-aux/git-version-gen: Reject a git version string if there are no commits associated with the current directory. This avoids an unlikely false-positive (unrelated dir whose parent repository also contains a tag matching v*), as pointed out by Giuseppe Scrivano in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/21843/focus=23664 2010-10-13 Paul Eggert argv-iter: omit nonconforming declaration * lib/argv-iter.h (enum argv_iter_err): Omit the useless enum arg_iter_err declaration, which doesn't conform to C99. Solaris 10 cc warns about this. 2010-10-13 Eric Blake termios: fix compilation on mingw * m4/termios_h.m4 (gl_TERMIOS_H_DEFAULTS): Set default. (gl_TERMIOS_H): Adjust it on mingw. * modules/termios (Makefile.am): Substitute new key. * lib/termios.in.h (includes): Make include_next conditional. * doc/posix-headers/termios.texi (termios.h): Update documentation. Reported by Daniel P. Berrange. 2010-10-13 Jim Meyering git-version-gen: don't require that .git/ be in the current dir * build-aux/git-version-gen: Adjust this script so that it works when run from any working directory beneath the top-level .git/- containing directory. Inspired by a patch from Giuseppe Scrivano, http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/21843/focus=21847 test-select: avoid warn_unused_result warnings * tests/test-select.c: Include "macros.h". ASSERT that each call to read, write, and pipe succeeds. While not technically required, also check each "close". * modules/select-tests (Files): Add tests/macros.h. test-symlinkat: remove declaration of unused local * tests/test-symlinkat.c (main): Remove unused local, "buf". test-inttostr: avoid shadowing warnings * tests/test-inttostr.c (main): Rename local, "buf" to "b", and use malloc rather than the stack for the same reason as mentioned in the comment justifying the other allocation. 2010-10-11 Bruno Haible stdlib: Allow multiple gnulib generated replacements to coexist. * lib/stdlib.in.h (struct random_data): Avoid identical redefinition. Reported by Sam Steingold . 2010-10-11 Jim Meyering fix a documentation typo * doc/posix-functions/futimens.texi (futimens): Fix typo: s/itme/item/ 2010-10-11 Eric Blake futimens: work around Solaris 11 bug * m4/futimens.m4 (gl_FUNC_FUTIMENS): Detect the bug. * tests/test-futimens.h (test_futimens): Enhance, rather than weaken test. * doc/posix-functions/futimens.texi (futimens): Document the bug. 2010-10-11 Paul Eggert Indentation. * lib/spawn.in.h (verify_POSIX_SPAWN_USEVFORK_no_overlap): Indent higher-level operators more to the left. 2010-10-11 Jim Meyering test-futimens: avoid unwarranted test failure on Solaris 5.11 * tests/test-futimens.h (test_futimens): When provoking EBADF, use an invalid file descriptor, so we don't provoke EFAULT from Solaris 5.11, because it tries to dereference the NULL name argument. 2010-10-11 Bruno Haible Indentation. * lib/spawn.in.h (verify_POSIX_SPAWN_USEVFORK_no_overlap): Improve indentation. 2010-10-11 Jim Meyering spawn.in.h: make indentation consistent with parentheses * lib/spawn.in.h (verify_POSIX_SPAWN_USEVFORK_no_overlap): Make indentation consistent with parentheses. 2010-10-11 Gary V. Vaughan Fix mismatched parens in previous commit * lib/spawn.in.h (verify_POSIX_SPAWN_USEVFORK_no_overlap): Fix mismatched parens. 2010-10-10 Paul Eggert rewrite int foo[2*X-1] to verify(X) or to int foo[X?1:-1] * lib/float+.h (verify_sizeof_flt, verify_sizeof_dbl): (verify_sizeof_ldbl): Rewrite 2*X-1 to X?1:-1. * lib/malloca.c: Include "verify.h". (verify1): Remove, replacing with a verify call. * lib/relocwrapper.c (verify1): Likewise. * lib/vasnprintf.c (mp_limb_verify, mp_twolimb_verify, TCHAR_T_verify): Likewise. * modules/malloca (Depends-on): Add 'verify'. * modules/relocatable-prog-wrapper (Depends-on): Add 'verify'. * modules/vasnprintf (Depends-on): Add 'verify'. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. prefer (X ? 1 : -1) when converting from boolean (1,0) to int (1,-1) Formerly the style was sometimes 2*X - 1, because the C standard was wrongly thought to disallow ?: in integral constant expressions. * lib/inet_ntop.c (verify_int_size): Rewrite 2*X-7 (!) to 4<=X?1:-1. * lib/signal.in.h (verify_NSIG_constraint): Rewrite 2*X-1 to X?1:-1. * lib/spawn.in.h (verify_POSIX_SPAWN_USEVFORK_no_overlap): Likewise. * lib/stdint.in.h (_verify_intmax_size): Likewise. * lib/time.in.h (struct __time_t_must_be_integral): Rewrite 2 * ((time_t) 1 / 2 == 0) - 1 to (time_t) 1; this suffices to verify that time_t cannot be floating. 2010-10-08 Eric Blake time: enforce recent POSIX ruling that time_t is integral * lib/time.in.h (__time_t_must_be_integral): Detect any problematic systems, allowing the rest of gnulib to assume POSIX. 2010-10-08 Jim Meyering fdopendir: fix a bug on systems lacking openat and /proc support OpenBSD 4.7 is one such system. The most noticeable effect was failure of any application making nontrivial use of fts: rm, du, chown, chmod etc. E.g., "mkdir -p a/b; ./rm -rf a" would fail with ./rm: traversal failed: `a': Bad file descriptor Debugging that, you see that even though FD 6 was closed just prior to the opendir call in fd_clone_opendir, its resulting dir->dd_fd was 8, rather than the expected value of 6: Breakpoint 3, fdopendir_with_dup (fd=6, older_dupfd=-1) at fdopendir.c:93 93 close (fd); (gdb) n 94 dir = fd_clone_opendir (dupfd); (gdb) n 95 saved_errno = errno; (gdb) p dir->dd_fd $11 = 8 Notice how it closes FD 6, then gets a DIR* pointer using FD 8. The problem is that on OpenBSD, fd_clone_opendir has to resort to using the old-style save/restore CWD mechanism, due to its lack of openat/proc support, and *that* would steal the FD (6) that opendir was supposed to use. The fix is to squirrel away the desired FD so that save_cwd uses a different one, and then free the dest FD right before calling opendir. That guarantees opendir will use the required file descriptor. * lib/fdopendir.c (fd_clone_opendir): Handle the above. 2010-10-08 Bruno Haible sys_select: Avoid warning due to undeclared memset() on OpenBSD 4.5. * lib/sys_select.in.h: Include also on OpenBSD. 2010-10-08 Bruno Haible nanosleep: Make replacement POSIX compliant. * lib/nanosleep.c (nanosleep): Return -1/EINVAL if the delay's tv_nsec is out of range. Reported by Jim Meyering. 2010-10-08 Paul Eggert bootstrap: add hook for altering gnulib.mk, for Bison * build-aux/bootstrap (gnulib_mk_hook): New function, so that the Bison bootstrapping process can rewrite file names and variables in this file before later parts of 'bootstrap' use the file. Bison wants to include lib/gnulib.mk from the top-level makefile, so it needs the file names in this file to be relative to the top level, not relative to lib; plus it needs variable names to be rewritten. (slurp): Use the new function. bootstrap: reformat for readability * build-aux/bootstrap: Rewrite to avoid lines longer than 80 columns. 2010-10-08 Eric Blake docs: update cygwin progress * doc/posix-functions/cacos.texi (cacos): Added after cygwin 1.7.7. * doc/posix-functions/cacosf.texi (cacosf): Likewise. * doc/posix-functions/cacosh.texi (cacosh): Likewise. * doc/posix-functions/cacoshf.texi (cacoshf): Likewise. * doc/posix-functions/carg.texi (carg): Likewise. * doc/posix-functions/cargf.texi (cargf): Likewise. * doc/posix-functions/casin.texi (casin): Likewise. * doc/posix-functions/casinf.texi (casinf): Likewise. * doc/posix-functions/casinh.texi (casinh): Likewise. * doc/posix-functions/casinhf.texi (casinhf): Likewise. * doc/posix-functions/catan.texi (catan): Likewise. * doc/posix-functions/catanf.texi (catanf): Likewise. * doc/posix-functions/catanh.texi (catanh): Likewise. * doc/posix-functions/catanhf.texi (catanhf): Likewise. * doc/posix-functions/ccos.texi (ccos): Likewise. * doc/posix-functions/ccosf.texi (ccosf): Likewise. * doc/posix-functions/ccosh.texi (ccosh): Likewise. * doc/posix-functions/ccoshf.texi (ccoshf): Likewise. * doc/posix-functions/cexp.texi (cexp): Likewise. * doc/posix-functions/cexpf.texi (cexpf): Likewise. * doc/posix-functions/cimag.texi (cimag): Likewise. * doc/posix-functions/cimagf.texi (cimagf): Likewise. * doc/posix-functions/clog.texi (clog): Likewise. * doc/posix-functions/clogf.texi (clogf): Likewise. * doc/posix-functions/conj.texi (conj): Likewise. * doc/posix-functions/conjf.texi (conjf): Likewise. * doc/posix-functions/cpow.texi (cpow): Likewise. * doc/posix-functions/cpowf.texi (cpowf): Likewise. * doc/posix-functions/cproj.texi (cproj): Likewise. * doc/posix-functions/cprojf.texi (cprojf): Likewise. * doc/posix-functions/creal.texi (creal): Likewise. * doc/posix-functions/crealf.texi (crealf): Likewise. * doc/posix-functions/csin.texi (csin): Likewise. * doc/posix-functions/csinf.texi (csinf): Likewise. * doc/posix-functions/csinh.texi (csinh): Likewise. * doc/posix-functions/csinhf.texi (csinhf): Likewise. * doc/posix-functions/csqrt.texi (csqrt): Likewise. * doc/posix-functions/csqrtf.texi (csqrtf): Likewise. * doc/posix-functions/ctan.texi (ctan): Likewise. * doc/posix-functions/ctanf.texi (ctanf): Likewise. * doc/posix-functions/ctanh.texi (ctanh): Likewise. * doc/posix-functions/ctanhf.texi (ctanhf): Likewise. * doc/posix-headers/complex.texi (complex.h): Likewise. 2010-10-07 Jim Meyering parse-datetime: avoid compilation failure on OpenBSD 4.7 * lib/parse-datetime.y (_STDLIB_H) [_STDLIB_H_]: Define. This works around a compilation failure on OpenBSD 4.7: http://thread.gmane.org/gmane.comp.parsers.bison.bugs/3418 2010-10-07 Eric Blake docs: update cygwin progress * doc/glibc-functions/mkostemp.texi (mkostemp): Added in cygwin 1.7.6. * doc/glibc-functions/mkostemps.texi (mkostemps): Likewise. * doc/posix-headers/fenv.texi (fenv.h): Added after cygwin 1.7.7. * doc/posix-functions/feclearexcept.texi (feclearexcept): Likewise. * doc/posix-functions/fegetenv.texi (fegetenv): Likewise. * doc/posix-functions/fegetexceptflag.texi (fegetexceptflag): Likewise. * doc/posix-functions/fegetround.texi (fegetround): Likewise. * doc/posix-functions/feholdexcept.texi (feholdexcept): Likewise. * doc/posix-functions/feraiseexcept.texi (feraiseexcept): Likewise. * doc/posix-functions/fesetenv.texi (fesetenv): Likewise. * doc/posix-functions/fesetexceptflag.texi (fesetexceptflag): Likewise. * doc/posix-functions/fesetround.texi (fesetround): Likewise. * doc/posix-functions/fetestexcept.texi (fetestexcept): Likewise. * doc/posix-functions/feupdateenv.texi (feupdateenv): Likewise. * doc/glibc-functions/feenableexcept.texi (feenableexcept): Likewise. * doc/glibc-functions/fedisableexcept.texi (fedisableexcept): Likewise. * doc/glibc-functions/fegetexcept.texi (fegetexcept): Likewise. docs: update parse-datetime history * doc/parse-datetime.texi (Authors of parse_datetime): Better documentation of this function's history and alternatives. cygwin: use more robust version check * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE, gl_FUNC_MEMMEM): Don't exclude an eventual cygwin 1.9.1. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE, gl_FUNC_STRSTR): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE) (gl_FUNC_STRCASESTR): Likewise. Reported by Bruno Haible. 2010-10-06 Bruno Haible string, sys_select: Avoid #including large headers unless necessary. * lib/string.in.h: Don't include except on NetBSD. * lib/sys_select.in.h: Don't include except on Solaris, OSF/1, BeOS, Haiku. Reported by Jim Meyering. 2010-10-05 Eric Blake memmem, strstr, strcasestr: fix bug with long periodic needle * lib/str-two-way.h (two_way_long_needle): Avoid bug with long periodic needle having false positive. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): Detect bug in glibc 2.12 and cygwin 1.7.7. (gl_FUNC_MEMMEM): Be more pessimistic when cross-compiling. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE) (gl_FUNC_STRCASESTR): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR_SIMPLE, gl_FUNC_STRSTR): Likewise. * tests/test-memmem.c (main): Expose the bug. * tests/test-strcasestr.c (main): Likewise. * tests/test-strstr.c (main): Likewise. * tests/test-c-strcasestr.c (main): Likewise. * doc/glibc-functions/memmem.texi (memmem): Document the bug. * doc/posix-functions/strstr.texi (strstr): Likewise. * doc/glibc-functions/strcasestr.texi (strcasestr): Likewise. Reported via http://sourceware.org/bugzilla/show_bug.cgi?id=12092 2010-10-05 Paul Eggert parse-datetime: do some more renaming * doc/parse-datetime.texi (Authors of parse_datetime): Call it parse_datetime, not get_date. Mention the renaming. * lib/parse-datetime.y: Call it parse_datetime, not getdate, in comments. * m4/bison.m4: Likewise. 2010-10-05 Eric Blake parse-datetime: better name than get_date * NEWS: Reword the deprecation notice. * modules/get_date: Rename to modules/parse-datetime. * modules/get_date-tests: Rename to modules/parse-datetime-tests. * m4/get_date.m4: Rename to m4/parse-datetime.m4. * lib/get_date.y: Rename to lib/parse-datetime.y. * tests/test-get_date.c: Rename to tests/test-parse-datetime.c. * doc/get_date.texi: Rename to doc/parse-datetime.texi. * doc/getdate.texi: Provide fallback wrapper. * lib/getdate.h: Move guts, and wrap... * lib/parse-datetime.h: ...new file. * lib/parse-datetime.y (get_date): Rename... (parse_datetime): ...to this. * m4/parse-datetime.m4 (gl_GET_DATE): Rename... (gl_PARSE_DATETIME): ...to this. * doc/posix-functions/getdate.texi (get_date): Provide fallback documentation. * modules/getdate (Files): Provide fallback docs and header. (Notice, Depends-on): Update references. * tests/test-parse-datetime.c: Likewise. * DEPENDENCIES: Likewise. * MODULES.html.sh (Date and time ): Likewise. * doc/parse-datetime.texi (Date input formats) (Authors of parse_datetime): Likewise. * modules/parse-datetime (Files, configure.ac, Makefile.am) (Include): Likewise. * modules/parse-datetime-tests (Files, Makefile.am): Likewise. * gnulib-tool: Likewise. * m4/bison.m4 (gl_BISON): Likewise. Suggested by Bruno Haible. 2010-10-05 Paul Eggert more ports to Solaris tr, which needs [] around ranges * gnulib-tool: Solaris tr needs [] around ranges. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise. * tests/test-pipe-filter-gi1.c (main): Likewise. * tests/test-pipe-filter-ii1.c (main): Likewise. 2010-10-05 Eric Blake bootstrap: fix Solaris regression * build-aux/bootstrap (check_versions): Solaris tr still needs [] around ranges. Reported by Pádraig Brady. bootstrap: work with pkg-config * build-aux/bootstrap (check_versions): Also transliterate - in prerequisite name. (print_versions): Be robust to any \ in $buildreq. Avoid listing prerequisites that were already found, to avoid confusion. Reported by Justin Clift. faccessat: remove unused wrappers * lib/openat.h (accessat, euidaccesat): Delete, since the mere presence of these wrappers dragged in -lgen on Solaris. Reported by Clemens Brogi; fix suggested by Paul Eggert. 2010-10-05 Jim Meyering tests: require @PRAGMA_COLUMNS@ with each @PRAGMA_SYSTEM_HEADER@ * Makefile (sc_pragma_columns): New syntax-check rule. 2010-10-04 Bruno Haible gnulib-tool: Synthesize appropriate _LDFLAGS for a libtool library. * gnulib-tool (func_emit_lib_Makefile_am): When preparing for a libtool library, put '-no-undefined' and the link dependencies into _LDFLAGS. Reported by Bruce Korb and Eric Blake. 2010-10-04 Bruno Haible threadlib: Make option --with-libpth-prefix work. * m4/threadlib.m4 (gl_THREADLIB_BODY): When testing whether pth works, use $LIBPTH, not just -lpth. 2010-10-04 Bruno Haible Avoid line length limitation from HP NonStop system header files. * m4/include_next.m4 (gl_INCLUDE_NEXT): Define also PRAGMA_COLUMNS. * lib/arpa_inet.in.h: Use PRAGMA_COLUMNS. * lib/ctype.in.h: Likewise. * lib/dirent.in.h: Likewise. * lib/errno.in.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/float.in.h: Likewise. * lib/getopt.in.h: Likewise. * lib/iconv.in.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/langinfo.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/netdb.in.h: Likewise. * lib/netinet_in.in.h: Likewise. * lib/poll.in.h: Likewise. * lib/pthread.in.h: Likewise. * lib/pty.in.h: Likewise. * lib/sched.in.h: Likewise. * lib/se-selinux.in.h: Likewise. * lib/search.in.h: Likewise. * lib/signal.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stddef.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sys_times.in.h: Likewise. * lib/sys_utsname.in.h: Likewise. * lib/sys_wait.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/termios.in.h: Likewise. * lib/time.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/wchar.in.h: Likewise. * lib/wctype.in.h: Likewise. * modules/arpa_inet (Makefile.am): Substitute PRAGMA_COLUMNS. * modules/ctype (Makefile.am): Likewise. * modules/dirent (Makefile.am): Likewise. * modules/errno (Makefile.am): Likewise. * modules/fcntl-h (Makefile.am): Likewise. * modules/float (Makefile.am): Likewise. * modules/getopt-posix (Makefile.am): Likewise. * modules/iconv-h (Makefile.am): Likewise. * modules/inttypes (Makefile.am): Likewise. * modules/langinfo (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/math (Makefile.am): Likewise. * modules/netdb (Makefile.am): Likewise. * modules/netinet_in (Makefile.am): Likewise. * modules/poll-h (Makefile.am): Likewise. * modules/pthread (Makefile.am): Likewise. * modules/pty (Makefile.am): Likewise. * modules/sched (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/selinux-h (Makefile.am): Likewise. * modules/signal (Makefile.am): Likewise. * modules/spawn (Makefile.am): Likewise. * modules/stdarg (Makefile.am): Likewise. * modules/stddef (Makefile.am): Likewise. * modules/stdint (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/strings (Makefile.am): Likewise. * modules/sys_file (Makefile.am): Likewise. * modules/sys_ioctl (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sys_time (Makefile.am): Likewise. * modules/sys_times (Makefile.am): Likewise. * modules/sys_utsname (Makefile.am): Likewise. * modules/sys_wait (Makefile.am): Likewise. * modules/sysexits (Makefile.am): Likewise. * modules/termios (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. * modules/wctype (Makefile.am): Likewise. 2010-10-04 Bruno Haible read-file tests: Avoid a test failure on NonStop Kernel. * tests/test-read-file.c (main): Don't assume that /etc/resolv.conf is a regular file. Reported by Joachim Schmitz . 2010-10-03 Bruno Haible gnulib-tool: Fixes for --create-testdir with --libtool. * gnulib-tool (func_get_automake_snippet): Don't augment EXTRA_lib_SOURCES for the pt_chown module, since pt_chown.o goes into an executable. (func_create_testdir): Handle module 'alloca' like func_import. Reported by Bruce Korb . 2010-10-03 Paul Eggert Avoid some lines longer than 80 characters. * lib/stdint.in.h: Break long comment lines. * lib/math.in.h: Likewise. (_GL_NUM_UINT_WORDS): New macro, for readability. (gl_signbitf, gl_signbitd, gl_signbitl): Use it. * lib/stdio.in.h: Break lines in _GL_WARN_ON_USE calls. * lib/stdlib.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/sys_socket.in.h: Update an URL. * lib/sys_stat.in.h: Break long line. 2010-10-03 Reuben Thomas Improve pmccabe2html. * build-aux/pmccabe2html: Add CYCLO_SRCS variable, and make cyclo-$(PACKAGE).html depend on it, so the HTML file is remade when the sources change. Remove the line in the HTML about "Used ranges" (which implied that there might be other unused ranges), rename "Resume" to "Summary" (easier to understand for more users). * build-aux/pmccabe.css: Removing the dashed dividers, some unused styles, and some unnecessary blank lines. 2010-10-03 Bruno Haible Joachim Schmitz (tiny change) acl: Add support for ACLs on NonStop Kernel. * m4/acl.m4 (gl_FUNC_ACL): For Solaris, test for facl(), not for acl(). Check whether the function aclsort() exists. * lib/acl-internal.h: For Solaris, test HAVE_FACL, not HAVE_ACL. (acl_nontrivial) [HAVE_ACLSORT]: New declaration. * lib/file-has-acl.c: For Solaris, test HAVE_FACL, not HAVE_ACL. (acl_nontrivial [HAVE_ACLSORT]: New function. (file_has_acl): Implement for NonStop Kernel. * lib/set-mode-acl.c: For Solaris, test HAVE_FACL, not HAVE_ACL. (qset_acl): Implement for NonStop Kernel. * lib/copy-acl.c (qcopy_acl): Implement for NonStop Kernel. * tests/test-sameacls.c: For Solaris, test HAVE_FACL, not HAVE_ACL. (main): Implement for NonStop Kernel. * tests/test-file-has-acl.sh (acl_flavor): Set to 'nsk' on NonStop Kernel. Handle this flavor. * tests/test-set-mode-acl.sh: Likewise. * tests/test-copy-acl.sh: Likewise. * tests/test-copy-file.sh: Likewise. 2010-10-03 Bruno Haible Info about ACLs on NonStop Kernel. * doc/acl-resources.txt: Add info about NonStop Kernel. References by Joachim Schmitz . 2010-10-02 Bruno Haible Define missing EDQUOT on NonStop Kernel. * lib/errno.in.h (EDQUOT): Assign a value if missing. * lib/strerror.c (rpl_strerror): Handle missing EDQUOT. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Also test whether EDQUOT is missing. * doc/posix-headers/errno.texi: Mention the NSK bug. * doc/posix-functions/strerror.texi: Mention the workaround on NSK. Reported by Joachim Schmitz . 2010-10-02 Bruno Haible Update doc for POSIX:2008. * doc/posix-headers/*.texi [except ucontext.texi, sys_timeb.texi]: Update URL of POSIX specification. 2010-10-02 Bruno Haible gnulib-tool: In testdirs, use the newest available config.{guess.sub}. * gnulib-tool (func_create_testdir): Use config.guess and config.sub from gnulib, not from Automake. 2010-10-02 Bruno Haible New module 'system-posix'. * modules/system-posix: New file. * lib/stdlib.in.h: Include only when the 'system-posix' module is present. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_SYSTEM_POSIX. * modules/stdlib (Depends-on): Remove sys_wait. (Makefile.am): Substitute GNULIB_SYSTEM_POSIX. * doc/posix-functions/system.texi: Mention the new module. * doc/posix-headers/stdlib.texi: Likewise. * tests/test-stdlib.c: If GNULIB_TEST_SYSTEM_POSIX is not defined, define test_sys_wait_macros to a no-op. Reported by Sam Steingold . 2010-09-30 Bruno Haible More renaming from 'getdate' to 'get_date'. * doc/get_date.texi: Renamed from doc/getdate.texi. * modules/get_date (Files): Update. * MODULES.html.sh (Date and time ): Update. * DEPENDENCIES: Update. * gnulib-tool: Update comment. * m4/bison.m4 (gl_BISON): Likewise. * m4/get_date.m4 (gl_GET_DATE): Likewise. 2010-09-30 Justin Clift (tiny change) bootstrap: support ACLOCAL_FLAGS during aclocal * build-aux/bootstrap (aclocal): Honor ACLOCAL_FLAGS, so the user can add additional -I dir for third-party .m4 files. 2010-09-30 Eric Blake bootstrap: use glibtoolize on MacOS * build-aux/bootstrap (check_versions): Convert libtool into libtoolize. (tool search): Move libtool check earlier, and look for glibtoolize for MacOS. (gnulib_tool_options): Auto-add --libtool when appropriate. Reported by Justin Clift. poll: fix typo that broke test on MacOS * m4/poll.m4 (gl_FUNC_POLL): Add missing test. Reported by Justin Clift. getdate: rename to get_date Note: getdate.h is not renamed, to minimize client impact. * modules/getdate: Mark obsolete. Move old contents... * modules/get_date: ...to new module name. * modules/getdate-tests: Move... * modules/get_date-tests: ...here. * m4/getdate.m4: Move... * m4/get_date.m4: ...here, and rename gl_GETDATE to gl_GET_DATE. * lib/getdate.y: Move... * lib/get_date.y: ...here. * tests/test-getdate.c: Move... * tests/test-get_date.c: ...here. * doc/posix-functions/getdate.texi (getdate): Update name. * NEWS: Mention the change. 2010-09-29 Bruno Haible Separate the module 'waitpid' from the module 'sys_wait'. * lib/sys_wait.in.h (waitpid): Declare only if the 'waitpid' module is present. * m4/sys_wait_h.m4 (gl_SYS_WAIT_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR_FOR_TESTS. (gl_SYS_WAIT_H_DEFAULTS): Initialize GNULIB_WAITPID. * modules/sys_wait (Depends-on): Remove waitpid. (Makefile.am): Substitute GNULIB_WAITPID. * modules/waitpid (configure.ac): Invoke gl_SYS_WAIT_MODULE_INDICATOR. * tests/test-sys_wait-c++.cc (GNULIB_NAMESPACE::waitpid): Check the signature only if the 'waitpid' module is present. * doc/posix-functions/waitpid.texi: Mention the 'waitpid' module. * NEWS: Mention the change. * modules/grantpt (Depends-on): Add waitpid. * modules/wait-process (Depends-on): Likewise. 2010-09-29 Bruno Haible More tests for module 'sys_wait'. * modules/sys_wait-c++-tests: New file. * tests/test-sys_wait-c++.cc: New file. * modules/sys_wait-tests (Depends-on): Add sys_wait-c++-tests. Reported by Tatsuro MATSUOKA . 2010-09-29 Bruno Haible New module 'waitpid'. * lib/waitpid.c: New file, extracted from lib/sys_wait.in.h. * lib/sys_wait.in.h: Include , c++defs.h, warn-on-use.h. Don't include . (waitpid): Declare only, using modern idiom. * m4/waitpid.m4: New file. * m4/sys_wait_h.m4 (gl_SYS_WAIT_H): Check whether waitpid is declared. * modules/waitpid: New file. * modules/sys_wait (Depends-on): Add c++defs, warn-on-use, waitpid. (Makefile.am): Update. Reported by Tatsuro MATSUOKA . 2010-09-28 Bruno Haible poll: Assume ANSI C. * lib/poll.c (poll): Use an ANSI C declaration. 2010-09-28 Bruno Haible poll-h: Create poll.h on all platforms. * lib/poll.in.h: Use double-inclusion guard. Don't define POLL*, struct pollfd, nfds_t, INFTIM when the system has . * m4/poll_h.m4 (gl_POLL_H): Set HAVE_POLL_H. Invoke gl_CHECK_NEXT_HEADERS. Don't set POLL_H. (gl_REPLACE_POLL_H): Don't set POLL_H. (gl_POLL_H_DEFAULTS): Don't initialize POLL_H. * modules/poll-h (Depends-on): Add include_next. (Makefile.am): Create poll.h unconditionally. Substitute also HAVE_POLL_H, INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, NEXT_POLL_H. 2010-09-28 Bruno Haible Tests for module 'poll-h'. * modules/poll-h-c++-tests: New file. * tests/test-poll-h-c++.cc: New file. Tests for module 'poll-h'. * modules/poll-h-tests: New file. * tests/test-poll-h.c: New file. 2010-09-28 Bruno Haible poll-h: Ensure POLL{RD,WR}{NORM,BAND} are defined on glibc platforms. * modules/poll-h (Depends-on): Add 'extensions'. 2010-09-28 Bruno Haible New module 'poll-h'. * lib/poll.in.h: Include c++defs.h and warn-on-use.h. (poll): Use modern idiom. * modules/poll-h: New file. * modules/poll (Files): Remove lib/poll.in.h. (Depends-on): Add poll-h. (configure.ac): Invoke gl_POLL_MODULE_INDICATOR. (Makefile.am): Move code for generation of poll.h to modules/poll-h. * m4/poll_h.m4: New file. * m4/poll.m4 (gl_FUNC_POLL): Require gl_POLL_H. Don't check for poll.h here. Don't set POLL_H here. Instead, set HAVE_POLL and REPLACE_POLL and invoke gl_REPLACE_POLL_H. * lib/poll.c: Use common idiom. * tests/test-poll.c: Likewise. * doc/posix-headers/poll.texi: Mention the poll-h module. Suggested by Eric Blake. 2010-09-26 Bruno Haible sys_wait: Implement WSTOPSIG. * lib/sys_wait.in.h (WSTOPSIG): New macro. Reported by Simon Josefsson. 2010-09-26 Simon Josefsson stdlib, sys_wait: Avoid compilation error on mingw. * lib/sys_wait.in.h: Include , for SIGTERM. 2010-09-26 Bruno Haible stdlib tests: Avoid code duplication. * modules/stdlib-tests (Files): Add tests/test-sys_wait.h. * modules/sys_wait-tests (Files): Likewise. * tests/test-sys_wait.h: New file, extracted from tests/test-stdlib.c. * tests/test-stdlib.c: Include test-sys_wait.h. (main): Invoke test_sys_wait_macros. * tests/test-sys_wait.c: Include test-sys_wait.h. (main): Invoke test_sys_wait_macros. 2010-09-25 Simon Josefsson * modules/getaddrinfo (Depends-on): Depend on the sockets module. * lib/getaddrinfo.c (use_win32_p): Call gl_sockets_startup to make sure Windows sockets are working before calling getaddrinfo. * tests/test-getaddrinfo.c (main): Don't call WSAStartup here. * doc/gnulib.texi (Windows sockets): Fix typo. 2010-09-25 Bruno Haible Tests for module 'regex-quote'. * modules/regex-quote-tests: New file. * tests/test-regex-quote.c: New file. New module 'regex-quote'. * lib/regex-quote.h: New file. * lib/regex-quote.c: New file. * modules/regex-quote: New file. Suggested by Reuben Thomas . 2010-09-24 Bruno Haible unistr/u8-strchr: Fix a test failure on i586 glibc systems. * tests/unistr/test-strchr.h (test_strchr): Disable an invalid check. 2010-09-23 Bruno Haible setenv: Relax license. * modules/setenv (License): Change to LGPLv2+, with consent by Eric Blake. Requested by Eric Blake. 2010-09-22 Bruno Haible termios: Relax license. * modules/termios (License): Change to LGPLv2+. Requested by Eric Blake. 2010-09-22 Bruno Haible threadlib: Allow the package to change the default to 'no'. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): When gl_THREADLIB_DEFAULT_NO is defined, change the default to 'no'. Reported by Paul Eggert. 2010-09-22 Pádraig Brady Bruno Haible Fix endless loop in mbmemcasecoll. * lib/mbmemcasecoll.c (apply_towlower): When mbrtowc returns 0, copy 1 byte. * tests/test-mbmemcasecmp.h (test_ascii): Test embedded NULs. 2010-09-22 Bruno Haible Tests for module 'memcoll'. * modules/memcoll-tests: New file. * tests/test-memcoll.c: New file, based on tests/test-memcmp.c. memcoll, xmemcoll: Clarify size vs. length. * modules/memcoll.c (memcoll0): Clarify specification. * modules/xmemcoll.c (xmemcoll0): Likewise. Reduce by 1 the lengths passed to collate_error. 2010-09-22 Bruno Haible Tests for module 'memcasecmp'. * modules/memcasecmp-tests: New file. * tests/test-memcasecmp.c: New file, based on tests/test-memcmp.c. 2010-09-22 Paul Eggert * lib/pthread.in.h: Add split double-inclusion guard, and include system if there is one. Use @@-style as in other .in.h files. Define PTHREAD_COND_INITIALIZER etc. only if system pthread.h doesn't. (pthread_mutexattr_destroy, pthread_mutexattr_init): (pthread_mutexattr_settype, pthread_mutex_trylock): New static inline functions, if there's no system . (pthread_spinlock_t, pthread_spin_init, pthread_spin_destroy): (pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Approximate with mutexes if the system lacks spinlocks, as in MacOS. * m4/pthread.m4 (gl_PTHREAD_CHECK): Require gl_PTHREAD_DEFAULTS. Add gl_CHECK_NEXT_HEADERS for pthread.h, and support the usual @@-style. Check for spinlocks separately. (gl_PTHREAD_DEFAULTS): New macro. * modules/pthread: Redo to use a more typical style for in.h files. 2010-09-21 Eric Blake net_if: enhance tests * tests/test-net_if.c (main): Move signature checks earlier. Print failures to stderr. * doc/posix-functions/if_freenameindex.texi (if_freenameindex): Document the bug that we do not yet fix. 2010-09-21 Reuben Thomas * doc/gnulib.texi (Out of memory handling): Rewrite section to be about gnulib, not GSS. 2010-09-21 Reuben Thomas * build-aux/pmccabe2html: Look for sources in src/ instead of lib/. * build-aux/pmccabe2html: Set cut_dir properly, and add mode line for Emacs. * build-aux/pmccabe2html: Make Makefile.am example code more cut-and-paste friendly. 2010-09-21 Simon Josefsson * tests/test-net_if.c: New file. * modules/net_if-tests: New file. 2010-09-20 Paul Eggert pthread: add pthread_spin_destroy * lib/pthread.in.h (pthread_spin_destroy): New function. 2010-09-19 Bruno Haible gnulib-tool: Fix --help output. * gnulib-tool (func_usage): Fix help message. Reported by Reuben Thomas . 2010-09-18 Jim Meyering maint.mk: avoid unexpanded \n in two diagnostics * top/maint.mk (sc_prohibit_always_true_header_tests): Don't use a literal \n in a halt=... assignment. It would not be expanded, and the two \n bytes would appear in the diagnostic output rather than the desired newline. Use halt=$$(printf ... instead. (sc_vulnerable_makefile_CVE-2009-4029): Likewise. 2010-09-18 Bruno Haible netinet_in: Doc tweak. * doc/posix-headers/netinet_in.texi: Mention an affected platform. Reported by Mats Erik Andersson . 2010-09-18 Jim Meyering init.sh: correct an outdated comment * tests/init.sh (create_exe_shims_): s/function/alias/ init.sh: don't let an ephemeral "*.exe" make us skip all dir entries * tests/init.sh (find_exe_basenames_): Don't give up on a directory if a file named "*.exe" is removed between the glob expansion and the processing of that oddly named file. 2010-09-17 Eric Blake mirbsd: add some more support * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): MirBSD is in BSD family. * m4/gc-random.m4 (gl_GC_RANDOM): MirBSD supports same random devices as OpenBSD. * m4/host-os.m4 (mirbsd): Add MirBSD. tests: fix unportable assumption on sys/wait.h * tests/test-sys_wait.c (main): Relax test. * tests/test-stdlib.c (main): Likewise. init.sh: accommodate directory with no .exes * tests/init.sh: Accomodate directory containing only scripts. tests: avoid compiler warning * tests/test-stdlib.c (main): Use the variable. fdutimens, fdutimensat: update signature, again * lib/utimens.h (gl_futimens): Delete, and move signature... (fdutimens): ...here. (fdutimensat): Rearrange signature. (lutimensat): Rename variable for clarity. * lib/fdutimensat.c (fdutimensat): Update signature. * lib/utimens.c (fdutimens): Likewise. (gl_futimens): Delete. (utimens, lutimens): Update callers. * lib/futimens.c (futimens): Likewise. * tests/test-fdutimensat.c: Likewise. * tests/test-utimens.c: Likewise. * tests/test-futimens.h: Update comment. * NEWS: Mention this. Suggested by Paul Eggert. 2010-09-17 Bruno Haible Take over the maintenance of some older macros from Autoconf. * m4/error.m4 (AC_FUNC_ERROR_AT_LINE): New macro, from GNU Autoconf. * m4/lstat.m4 (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): New macro, from GNU Autoconf. * m4/memcmp.m4 (AC_FUNC_MEMCMP): New macro, from GNU Autoconf. * m4/mktime.m4 (AC_FUNC_MKTIME): Change comment. 2010-09-17 Eric Blake fdutimensat: drop atflag validation * lib/fdutimensat.c (fdutimensat): Allow AT_SYMLINK_NOFOLLOW even with valid fd, to close a race scenario where futimens is unsupported and FILE was replaced by a symlink. * tests/test-fdutimensat.c (do_fdutimens, main): Adjust test accordingly. Suggested by Paul Eggert. 2010-09-16 Bruno Haible unlockpt: Fix declaration within GNULIB_POSIXCHECK. * lib/stdlib.in.h (unlockpt): Fix warning declaration. 2010-09-16 Bruno Haible login_tty: Fix detection of function on FreeBSD, OpenBSD, NetBSD. * m4/pty.m4 (gl_FUNC_LOGIN_TTY): Augment LIBS while checking whether login_tty exists. Reported by Mats Erik Andersson . 2010-09-16 Bruno Haible login_tty: Make the replacement code work on BSD systems. * lib/login_tty.c: Include . (login_tty): Use ioctl TIOCSCTTY when available. * modules/login_tty (Depends-on): Add sys_ioctl. Reported by Mats Erik Andersson . 2010-09-16 Bruno Haible login_tty: Stricter unit test. * modules/login_tty-tests (Depends-on): Add tcgetsid. * tests/test-login_tty.c (main): Also check the results of tcgetpgrp() and tcgetsid() after login_tty. Reported by Mats Erik Andersson . 2010-09-16 Bruno Haible New module 'tcgetsid'. * lib/tcgetsid.c: New file. * m4/tcgetsid.m4: New file. * modules/tcgetsid: New file. * modules/termios (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Ensure c++defs.h, warn-on-use.h get included. Substitute GNULIB_TCGETSID, HAVE_TCGETSID. * lib/termios.in.h: Include . (tcgetsid): New declaration. * m4/termios_h.m4 (gl_TERMIOS_H): Check whether tcgetsid is declared. (gl_TERMIOS_H_DEFAULTS): Initialize GNULIB_TCGETSID, HAVE_TCGETSID. * doc/posix-functions/tcgetsid.texi: Mention the new module. * tests/test-termios-c++.cc: Check GNULIB_NAMESPACE::tcgetsid. 2010-09-16 Bruno Haible Tests for module 'termios'. * modules/termios-c++-tests: New file. * modules/termios-tests: New file. * tests/test-termios-c++.cc: New file. * tests/test-termios.c: New file. New module 'termios'. * modules/termios: New file. * lib/termios.in.h: New file. * m4/termios_h.m4: New file. * doc/posix-headers/termios.texi: Mention the new module. 2010-09-16 Eric Blake fdutimensat: add an atflag parameter * lib/fdutimensat.c (fdutimensat): Add new parameter. * lib/utimens.h (fdutimensat): Update prototype. * tests/test-fdutimensat.c: Adjust test to match. * NEWS: Document the change. Suggested by Paul Eggert. 2010-09-16 Bruno Haible Fix typos in comments. * lib/striconveh.h: Fix typo in comment. * lib/login_tty.c (login_tty): Likewise. 2010-09-15 Bruno Haible stdlib: clarify MirBSD WEXITSTATUS bug * lib/stdlib.in.h: Clarify the MirBSD bug regarding WEXITSTATUS. * doc/posix-headers/stdlib.texi (stdlib.h): Likewise. 2010-09-15 Eric Blake stdlib: work around MirBSD WEXITSTATUS bug * lib/stdlib.in.h (includes): Guarantee WEXITSTATUS. * modules/stdlib (Depends-on): Add sys_wait. * tests/test-sys_wait.c (main): Enhance test. * tests/test-stdlib.c (main): Likewise. * doc/posix-headers/stdlib.texi (stdlib.h): Document the bug. docs: mention MacOS issue with WEXITSTATUS(constant) * doc/posix-headers/sys_wait.texi (sys/wait.h): Document the issue. * doc/posix-headers/stdlib.texi (stdlib.h): Likewise. strnlen: add tests * modules/strnlen-tests: New file. * tests/test-strnlen.c: Likewise. 2010-09-14 Bruno Haible unistr/base: Avoid link errors when module 'libunistring' is also used. * lib/unistr.in.h (u8_mbtouc_unsafe, u16_mbtouc_unsafe, u32_mbtouc_unsafe, u8_mbtouc, u16_mbtouc, u32_mbtouc, u8_mbtoucr, u16_mbtoucr, u32_mbtoucr, u8_uctomb_aux, u16_uctomb_aux, u32_uctomb): Declare also when HAVE_LIBUNISTRING is set. Reported by Pádraig Brady . 2010-09-14 Eric Blake test-rawmemchr: make more robust * modules/rawmemchr-tests (Files): Add zerosize-ptr.h, mmap-anon.m4. (Depends-on, configure.ac): Add needed prerequisites to use it. * modules/memchr-tests (Files, Depends-on, configure.ac): Likewise, to avoid implicit reliance on memchr module prereqs. * tests/test-memchr.c (main): Ensure proper masking. * tests/test-rawmemchr.c (main): Likewise. Detect oversized reads. memchr: detect glibc Alpha bug Avoids http://sourceware.org/bugzilla/show_bug.cgi?id=12019. * m4/memchr.m4 (gl_FUNC_MEMCHR): Detect glibc 2.11.2 failure on Alpha. * doc/posix-functions/memchr.texi (memchr): Tweak wording. * tests/test-memchr.c (main): Enhance test. Reported by Nelson H. F. Beebe. 2010-09-13 Paul Eggert fts, getcwd, glob: audit for dirfd returning -1 * lib/fts.c (opendir): Remove #define; no longer used. (opendirat): New arg PDIR_FD. All callers changed. (fts_build, _opendir2): Use new opendirat to avoid the need for dirfd, or for checking whether dirfd returns a negative value. Don't use opendir; always use openat followed by fdopendir. * lib/getcwd.c (__getcwd): Don't reset fd; fdopendir no longer clobbers it. * lib/glob.c (link_exists_p): Add comment explaining why dirfd never returns -1 here. * modules/fts (Depends-on): Remove dirfd. * modules/getcwd (Depends-on): Likewise. 2010-09-13 Eric Blake float: fix broken MirBSD header * m4/float_h.m4 (gl_FLOAT_H): MirBSD copied OpenBSD's bug. * doc/posix-headers/float.texi (float.h): Document it. 2010-09-13 Paul Eggert fts: use O_NOFOLLOW to avoid race condition when opening a directory * lib/fts.c (opendirat): New arg extra_flags. (__opendir2): Use it to avoid following symlinks when opening a directory, if symlinks are not supposed to be followed. See . fdopendir: preserve argument fd before returning * lib/fdopendir.c: Adjust comments to say POSIX, not Solaris. (fdopendir_with_dup, fd_clone_opendir): New static functions. (fdopendir): Use them, arranging for FD to be open to the same directory that it was when it started. (It might be temporarily closed while fdopendir is running, so this not thread- or signal-safe.) Be careful to do the right thing even when file descriptors are scarce and dup fails with errno == EMFILE. See . 2010-09-10 Paolo Bonzini regex: Pass the system regex if its only problem is 32-bit regoff_t. * NEWS: Document change. * m4/regex.m4: Disable test for regoff_t size. 2010-09-13 Jim Meyering fts: don't operate on an invalid file descriptor after failed dup * lib/fts.c (fts_build): Don't call set_cloexec_flag on a negative file descriptor. 2010-09-12 Paul Eggert savedir: add streamsavedir, deprecate fdsavedir * NEWS: Mention deprecation of fdsavedir. * lib/savedir.c (streamsavedir): New extern function, whose name ends in "savedir" to be consistent with the others. This differs from savedirstream in that it doesn't close its argument. The next version of GNU tar will use this instead of fdsavedir, to avoid some race conditions and conserve file descriptors. (savedirstream): Reimplement as a wrapper around streamsavedir. (fdsavedir): Add a comment deprecating this function. As far as I know, only GNU tar used it, and GNU tar doesn't need it any more. * lib/savedir.h (streamsavedir): New decl. (fdsavedir): Add a comment deprecating this. 2010-09-10 Bruno Haible langinfo: Fix last commit. * m4/langinfo_h.m4 (gl_LANGINFO_H): Initialize HAVE_LANGINFO_T_FMT_AMPM, HAVE_LANGINFO_YESEXPR. Reported by Tom G. Christensen . 2010-09-10 Bruno Haible relocatable-prog-wrapper: Fix compilation failure due to O_EXEC. * lib/progreloc.c (O_EXEC): Define fallback. 2010-09-10 Paul Eggert fcntl-h: define O_CLOEXEC and O_EXEC if not defined; use new defines * NEWS: Document recent changes to fcntl-h. * doc/posix-headers/fcntl.texi (fcntl.h): Document that O_CLOEXEC is now defined to 0 if it is not defined, like other flags. Also, O_EXEC is now defined to be O_RDONLY if O_EXEC is not defined. Similarly for O_SEARCH; this last was already true, but not documented. * lib/fcntl.in.h (O_CLOEXEC): Define to 0 if not defined. * lib/dup-safer-flag.c (O_CLOEXEC): Remove now-useless #define. * lib/dup3.c, lib/pipe2.c, tests/test-dup-safer.c, tests/test-fcntl.c: Likewise. * lib/popen-safer.c (open_noinherit): Check whether O_CLOEXEC is zero, not whether it is defined. * tests/test-dup3.c, tests/test-pipe2.c (main): Likewise. * lib/progreloc.c (find_executable): Use O_EXEC rather than O_RDONLY. * lib/open.c (open): Check for O_SEARCH as well as for O_RDONLY. 2010-09-10 Bruno Haible langinfo, nl_langinfo: Fix for IRIX 5.3. * m4/langinfo_h.m4 (gl_LANGINFO_H): Test whether langinfo.h defines T_FMT_AMPM, YESEXPR. Set HAVE_LANGINFO_T_FMT_AMPM, HAVE_LANGINFO_YESEXPR. * modules/langinfo (Makefile.am): Substitute HAVE_LANGINFO_T_FMT_AMPM, HAVE_LANGINFO_YESEXPR. * lib/langinfo.in.h (T_FMT_AMPM, GNULIB_defined_T_FMT_AMPM): Define if HAVE_LANGINFO_T_FMT_AMPM is 0. (YESEXPR, NOEXPR, GNULIB_defined_YESEXPR): Define if HAVE_LANGINFO_YESEXPR is 0. * lib/nl_langinfo.c (rpl_nl_langinfo): Handle also T_FMT_AMPM, YESEXPR, NOEXPR. * doc/posix-headers/langinfo.texi: Mention the IRIX 5.3 problem. * doc/posix-functions/nl_langinfo.texi: Likewise. Reported by Eric Blake. 2010-09-10 Bruno Haible pty, readutmp: Fix for FreeBSD 8.0 and OpenBSD 4.6. * doc/glibc-functions/login_tty.texi: Mention the include file problem on FreeBSD 8.0 and OpenBSD 4.6. * lib/pty.in.h: Include before . * m4/pty_h.m4 (gl_PTY_H): Likewise. * m4/pty.m4 (gl_FUNC_FORKPTY, gl_FUNC_OPENPTY): Likewise. * m4/readutmp.m4 (gl_READUTMP): Include before . Invoke AC_INCLUDES_DEFAULT instead of using the undocumented variable ac_includes_default. Reported by Mats Erik Andersson . 2010-09-09 Eric Blake strsignal: work around NetBSD bug * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Also check in . * lib/string.in.h (includes): Likewise. * doc/posix-functions/strsignal.texi (strsignal): Document the bug. Reported by Nelson H. F. Beebe. gnulib-tool: work with NetBSD /bin/sh * gnulib-tool (func_cache_var, func_cache_lookup_module) (func_get_description, func_get_comment, func_get_status) (func_get_notice, func_get_applicability, func_get_filelist) (func_get_dependencies, func_get_autoconf_early_snippet) (func_get_autoconf_snippet, func_get_automake_snippet) (func_get_include_directive, func_get_link_directive) (func_get_license, func_get_maintainer, func_import): Avoid shell syntax errors from parsing syntax extensions. 2010-09-09 Bruno Haible gnulib-tool: Avoid stderr output on IRIX related to 'alias', 'unalias'. * gnulib-tool: Don't fiddle with file descriptors 0, 1, 2. Instead, use a reliable way to determine whether the 'alias' command works. 2010-09-08 Jim Meyering init.sh: penalize a set-x-impaired shell; don't disqualify it * tests/init.sh: Too many shells corrupt application stderr when you set -x, so we can't afford to disqualify them, since at least on Irix-6.5, that would disqualify all bourne shells. Instead, use a two-pass approach. On the first pass, try to find a shell that meets the stricter condition that set -x does not corrupt stderr. If no shell meets the stricter condition, retest each candidate shell, but without that extra condition. Finally, when VERBOSE=yes is requested and set -x might cause trouble, simply issue a warning and refrain from enabling debug output. 2010-09-08 Eric Blake unsetenv: fix OpenBSD bug * m4/setenv.m4 (gl_FUNC_UNSETENV): Check for OpenBSD bug. * doc/posix-functions/unsetenv.texi (unsetenv): Update documentation. Reported by Jim Meyering. strtod: work around IRIX 6.5 bug * lib/strtod.c (strtod): Reparse number on shorter string if exponent parse was invalid. * tests/test-strtod.c (main): Add check for "0x1p 2". Reported by Tom G. Christensen. getopt: optimize previous patch * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Correctly check for empty variable. Speed up awk script. Reported by Paolo Bonzini. 2010-09-08 Jim Meyering test.sh: disqualify shells for which set -x corrupts stderr * tests/init.sh: Add a test to disqualify /bin/sh from SunOS 5.11 and OpenBSD 4.7. They make it so with "set -x", environment settings appear in stderr output. For example, this command: /bin/sh -c 'set -x; P=1 true 2> err' 2>/dev/null; cat err prints "P=1" on those two systems: 2010-09-08 Bruno Haible gnulib-tool: Avoid stderr output on IRIX related to 'alias', 'unalias'. * gnulib-tool: Use stderr redirection around the 'alias' and 'unalias' commands, because some shells ignore redirections when there is an error in the command lookup. Reported by Eric Blake. 2010-09-07 Reuben Thomas * lib/regex.h: Fix a mention of `regex_compile' (should be `re_compile_pattern'). Correct and clarify documentation for RE_CONTEXT_INVALID_DUP. (re_set_registers): Correct name of parameter in comment. * doc/regex.texi: Add documentation for missing syntax flags. Remove commented-out documentation of defunct syntax option RE_NO_EMPTY_ALTS. Correct name of RE_CHAR_CLASSES in one incorrect occurrence. Add documentation of re_set_registers. Document trick to re-use a pattern buffer by setting fastmap manually. Update documentation of struct re_pattern_buffer per public members. Uncomment documentation of equivalence class operators and collating symbol operators, since they are now implemented, Explain leftmost-longest matching in relation to alternatives. Tidy documentation of substring matching. Remove POSIX documentation, which is done better in glibc, and refer the reader there. Keep BSD API documentation, as that is not readily available elsewhere. 2010-09-07 Eric Blake getopt: handle POSIXLY_CORRECT set but not exported * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Restore pre-existing export state of POSIXLY_CORRECT, due to bash set -o posix. Reported by Dustin J. Mitchell. 2010-09-05 Bruno Haible gnulib-tool: Highlight the changed options. * gnulib-tool (func_usage): Display the --import, --add-import, --remove-import explanations in bold font. 2010-09-06 Karl Berry * doc/gnulib-tool.texi (Modified imports): doc tweaks. 2010-09-05 Bruno Haible uniwidth/width: Update comment. * lib/uniwidth/width.c (uc_width): Update comment for Unicode >= 3.1. Reported by Emanuele Giaquinta . 2010-09-05 Bruno Haible isinf, isnan: Relax license. * modules/isinf (License): Change from GPL to LGPL, with consent from Ben Pfaff. * modules/isnan (License): Likewise. Requested by Ludovic Courtès. 2010-09-04 Bruno Haible gnulib-tool: Help migration from --import to --add-import or --update. * gnulib-tool: Emit a verbose error message when --import is used without any module name. 2010-09-04 Bruno Haible Update doc about gnulib-tool. * doc/gnulib-tool.texi (VCS Issues): Explain 'gnulib-tool --import' vs. 'gnulib-tool --update' in more detail. Reported by Eric Blake. 2010-09-04 Bruno Haible gnulib-tool: Change --import. New options --add/remove-import. * gnulib-tool: New options --add-import, --remove-import. (func_usage): Document them. (have_associative): Define always. (func_import): In import mode, don't merge the specified settings with the cached settings. Implement remove-import mode. * doc/gnulib-tool.texi (Modified imports): Mention the new options. Explain when to use them versus --import. (Simple update): Use --add-import instead of --import. * NEWS: Mention the change. 2010-09-04 Bruno Haible * doc/gnulib-tool.texi (Initial import): Update paragraph about separate gnulib.mk. 2010-09-04 Bruno Haible gnulib-tool: Don't talk about CVS any more. * gnulib-tool (func_usage, func_import): Write "version control" instead of CVS. 2010-09-04 Jim Meyering maint.mk: avoid obscure sc_copyright_check failure in coreutils * top/maint.mk (v_etc_file): Prepend $(gnulib_dir)/, to avoid false positives (whose names may be ill-chosen) when searching non-VC'd files. Otherwise, a file named "a b/lib/version-etc.c" would cause a false-positive. avoid coreutils "make distcheck" failure Coreutils tests with an absolute build directory name that contains a space. Not quoting this directory name caused a failure. * tests/test-vc-list-files-git.sh: Quote PATH dir name. * tests/test-vc-list-files-cvs.sh: Likewise. 2010-09-04 Bruno Haible gnulib-tool: Avoid error when run in a package without Makefile.am. * gnulib-tool: When collecting the m4dirs in a package that does not have a Makefile.am, eliminate those directories that contain no gnulib-cache.m4. Fix expression that counts these directories. 2010-09-04 Bruno Haible update-copyright test: Improve output when perl is missing or too old. * tests/test-update-copyright.sh: Move test of Perl version down after the test whether Perl exists. Provide an explanation relating Perl's error message to Automake's SKIP: message. 2010-09-04 Bruno Haible Don't augment PATH in TESTS_ENVIRONMENT. * modules/update-copyright-tests (Makefile.am): In TESTS_ENVIRONMENT, set abs_aux_dir instead of augmenting PATH. * modules/vc-list-files-tests (Makefile.am): Likewise. * tests/test-update-copyright.sh: Augment PATH here. * tests/test-vc-list-files-cvs.sh: Augment PATH here, through path_prepend_. * tests/test-vc-list-files-git.sh: Likewise. 2010-09-04 Jim Meyering tests: prohibit augmenting PATH via TESTS_ENVIRONMENT * Makefile (sc_prohibit_augmenting_PATH_via_TESTS_ENVIRONMENT): New rule. 2010-09-04 Bruno Haible strdup: Fix compilation error in C++ mode. * lib/string.in.h (strdup): In C++ mode with GNULIB_NAMESPACE, undefine the macro. 2010-09-04 Bruno Haible dirfd: Fix compilation error in C++ mode on MacOS X, *BSD, IRIX. * lib/dirent.in.h (dirfd): In C++ mode with GNULIB_NAMESPACE, turn the macro into a function. Reported by Jarno Rajahalme . 2010-09-04 Bruno Haible Set PATH_SEPARATOR the same way autoconf does. * build-aux/relocatable.sh.in (func_find_curr_installdir): Determine the value of PATH_SEPARATOR the same way autoconf-generated configure scripts do. * m4/lib-ld.m4 (AC_LIB_PROG_LD): Likewise. * m4/progtest.m4 (AM_PATH_PROG_WITH_TEST): Likewise. 2010-09-04 Stefano Lattarini (tiny change) Set PATH_SEPARATOR the same way autoconf does. * gnulib-tool (func_gnulib_dir): Determine the value of PATH_SEPARATOR the same way autoconf-generated configure scripts do. * posix-modules: Likewise. 2010-09-02 Paul Eggert hash: fix safe_hasher const typo * lib/hash.c (safe_hasher): Result is pointer, not pointer to const; otherwise, there is a type error later. 2010-09-02 Jim Meyering test-update-copyright.sh: require perl 5.8.0 * tests/test-update-copyright.sh: Require 5.8.0, which Tom G. Christensen has confirmed is adequate, while 5.6.1 is not. 2010-09-02 Eric Blake tests: init.sh improvements for re-exec'ing with zsh * tests/init.sh: Borrow autoconf POSIX-mode sanitization. Pass -vx through shell re-exec. Reported by Tom G. Christensen. wctype: fix typo in previous commit * m4/wctype_h.m4 (gl_WCTYPE_H): Fix spelling. Reported by Ludovic Courtès. 2010-09-02 Jim Meyering test-update-copyright.sh: skip test if Perl is too old * tests/test-update-copyright.sh: Exit 77 if Perl is too old. Reported by Tom G. Christensen. 2010-09-02 Bruno Haible wctype: Avoid compilation error on IRIX 6.5.30. * lib/wctype.in.h (iswblank): Declare with a replacement if REPLACE_ISWBLANK is set. * m4/wctype_h.m4 (gl_WCTYPE_H): Check also whether iswblank is declared. Set REPLACE_ISWBLANK. * modules/wctype (Makefile.am): Substitute REPLACE_ISWBLANK. * doc/posix-functions/iswblank.texi: Mention the IRIX 6.5.30 problem. * doc/posix-headers/wctype.texi: Likewise. Reported by Tom G. Christensen . 2010-09-01 Bruno Haible New module 'socketlib'. * modules/socketlib: New file. * m4/socketlib.m4: New file, extracted from m4/sockets.m4. * m4/sockets.m4 (gl_SOCKETS): Require gl_SOCKETLIB. * modules/sockets (Depends-on): Add socketlib. Suggested by Sam Steingold . 2010-09-01 Paul Eggert fcntl-h, etc.: prefer O_SEARCH to O_RDONLY when applicable POSIX 2008 specifies a new 'open' flag O_SEARCH, which can be used when one needs search access to a directory but not read access. On systems where it is available, it works in some cases where O_RDONLY does not, namely on directories that are searchable but not readable, and which need only to be searchable. If O_SEARCH is not available, fall back to the traditional method of using O_RDONLY. * lib/fcntl.in.h (O_SEARCH): #define to O_RDONLY if not defined. * lib/chdir-long.c (cdb_advance_fd): Use O_SEARCH, not O_RDONLY, when opening a directory that needs only to be searchable. * lib/chdir-safer.c (chdir_no_follow): Likewise. * lib/fts.c (diropen, fts_open, fd_ring_check): Likewise. * lib/openat-proc.c (openat_proc_name): Likewise. * lib/openat.c (openat_needs_fchdir): Likewise. * lib/save-cwd.c (save_cwd): Likewise. * lib/savewd.c (savewd_save, savewd_chdir): Likewise. 2010-08-28 Bruno Haible New module 'host-cpu-c-abi'. * modules/host-cpu-c-abi: New file. * m4/host-cpu-c-abi.m4: New file, based on part of clisp/src/m4/general.m4. Requested by Sam Steingold . 2010-08-31 Eric Blake and Jim Meyering hash: factor, and guard against misbehaving hasher function * lib/hash.c (safe_hasher): New function, to encapsulate the checking of table->hasher's return value. Also protect against a hash value so large that adding it to table->bucket results in a NULL pointer. (hash_lookup, hash_get_next, hash_find_entry, transfer_entries): Use it in place of open-coded check-and-abort. 2010-08-30 Bruno Haible hash: silence spurious clang warning * lib/hash.c (hash_get_next): Remove unnecessary test against NULL. Reported by Eric Blake. 2010-08-30 Eric Blake strstr, memmem, strcasestr: avoid leaked shell message * m4/strstr.m4 (gl_FUNC_STRSTR): Avoid "Alarm clock" message from FreeBSD. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. tests: silence clang warning * tests/test-malloca.c (do_allocation): Avoid dead store. 2010-08-29 Bruno Haible gettext: Fix recent mistake. * m4/intl.m4 (gt_CHECK_DECL): Fix typo introduced on 2010-08-26. 2010-08-29 Bruno Haible selinux-h: Offer a --without-selinux option. * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): If --without-selinux was specified, skip all tests and define HAVE_SELINUX_SELINUX_H to 0. (gl_LIBSELINUX): Offer --without-selinux option. If it is specified, set LIB_SELINUX to empty. * m4/selinux-context-h.m4 (gl_HEADERS_SELINUX_CONTEXT_H): Require gl_LIBSELINUX. If --without-selinux was specified, replace selinux/context.h. Reported by Johan Hattne . 2010-08-29 Ralf Wildenhues Bruno Haible Make the module 'realloc-gnu' work again on AIX and OSF/1. * m4/realloc.m4 (gl_FUNC_REALLOC_GNU): Define HAVE_REALLOC_GNU instead of HAVE_REALLOC. * lib/realloc.c (NEED_REALLOC_GNU): Enable behaviour also when GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU. (SYSTEM_MALLOC_GLIBC_COMPATIBLE): Adjust definition. * modules/realloc-gnu (configure.ac): Use gl_MODULE_INDICATOR. 2010-08-29 Ralf Wildenhues Bruno Haible Make the module 'calloc-gnu' work again on AIX and OSF/1. * m4/calloc.m4 (gl_FUNC_CALLOC_GNU): Define HAVE_CALLOC_GNU instead of HAVE_CALLOC. * lib/xmalloc.c: Update accordingly. * lib/calloc.c (NEED_CALLOC_GNU): Enable also when GNULIB_CALLOC_GNU && !HAVE_CALLOC_GNU. * modules/calloc-gnu (configure.ac): Invoke gl_MODULE_INDICATOR. 2010-08-29 Ralf Wildenhues Bruno Haible Make the module 'malloc-gnu' work again on AIX and OSF/1. * m4/malloc.m4 (gl_FUNC_MALLOC_GNU): Define HAVE_MALLOC_GNU instead of HAVE_MALLOC. * lib/malloc.c (NEED_MALLOC_GNU): Enable behaviour also when GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU. * modules/malloc-gnu (configure.ac): Use gl_MODULE_INDICATOR. 2010-08-29 Bruno Haible Update modules list. * MODULES.html.sh (Memory management functions ): Add malloc-gnu, calloc-gnu, realloc-gnu. Remove malloc, calloc, realloc. (String handling ): Add astrxfrm. (File system functions): Add readlinkat. 2010-08-28 Ralf Wildenhues Tests for module 'realloc-gnu'. * modules/realloc-gnu-tests: New file. * tests/test-realloc-gnu.c: New file. Tests for module 'calloc-gnu'. * modules/calloc-gnu-tests: New file. * tests/test-calloc-gnu.c: New file. Tests for module 'malloc-gnu'. * modules/malloc-gnu-tests: New file. * tests/test-malloc-gnu.c: New file. 2010-08-28 Bruno Haible Rename module 'realloc' -> 'realloc-gnu'. * modules/realloc-gnu: New file, copied from modules/realloc. * modules/realloc: Convert to a redirection to 'realloc-gnu'. Mark as obsolete. * modules/mgetgroups (Depends-on): Update. * doc/posix-functions/realloc.texi: Update. * NEWS: Mention the change. Rename module 'calloc' -> 'calloc-gnu'. * modules/calloc-gnu: New file, copied from modules/calloc. * modules/calloc: Convert to a redirection to 'calloc-gnu'. Mark as obsolete. * doc/posix-functions/calloc.texi: Update. * NEWS: Mention the change. Rename module 'malloc' -> 'malloc-gnu'. * modules/malloc-gnu: New file, copied from modules/malloc. * modules/malloc: Convert to a redirection to 'malloc-gnu'. Mark as obsolete. * modules/argp (Depends-on): Update. * modules/regex (Depends-on): Update. * doc/posix-functions/malloc.texi: Update. * NEWS: Mention the change. 2010-08-28 Eric Blake pread, pwrite: add missing dependency * modules/pread (Depends-on): Add extensions. * modules/pwrite (Depends-on): Likewise. 2010-08-28 Bruno Haible unistr/u*-strchr: Fix tests dependencies. * modules/unistr/u8-strchr-tests (Depends-on): Add unistr/u32-to-u8. * modules/unistr/u16-strchr-tests (Depends-on): Add unistr/u32-to-u16. Reported by Ian Beckwith . 2010-08-28 Bruno Haible read-file: Don't occupy too much unused memory. * lib/read-file.c (fread_file): Shrink the buffer at the end. 2010-08-28 Giuseppe Scrivano Eric Blake Bruno Haible read-file: Avoid memory reallocations with regular files. * lib/read-file.c: Include , , . (fread_file): With regular files, use the remaining length as the initial buffer size. Check against overflow. * modules/read-file (Depends-on): Add ftello, malloc-posix, stdint, sys_stat. 2010-08-28 Bruno Haible ftello: Relax license. * modules/ftello (License): Relax to LGPLv2+. Reported by Eric Blake. 2010-08-28 Bruno Haible Avoid relocwrapper link errors due to gnulib replacement functions. * lib/canonicalize-lgpl.c [IN_RELOCWRAPPER]: Use the system's getcwd function. Reported by Ben Pfaff . 2010-08-28 Bruno Haible Prefer using AC_DEFUN_ONCE over AC_DEFUN in projects with gnulib. * m4/iconv.m4 (gl_iconv_AC_DEFUN): Use AC_DEFUN_ONCE if gl_00GNULIB is defined. * m4/libunistring.m4 (gl_libunistring_AC_DEFUN): Likewise. Suggested by Eric Blake. 2010-08-28 Bruno Haible sys_socket, netdb: Ensure socklen_t gets defined. * modules/sys_socket (Depends-on): Add socklen. * modules/netdb (Depends-on): Likewise. * modules/getaddrinfo (Depends-on): Remove socklen. * modules/getsockopt (Depends-on): Likewise. * modules/setsockopt (Depends-on): Likewise. * tests/test-sys_socket.c: Check that socklen_t is defined. * tests/test-netdb.c: Likewise. * m4/socklen.m4: Update comments. Reported by Ralf Wildenhues . 2010-08-27 Eric Blake login_tty: add missing dependency * modules/login_tty (Depends-on): Add pty. 2010-08-26 Eric Blake lib-symbol-versions: fix m4 quoting * m4/ld-version-script.m4 (gl_LD_VERSION_SCRIPT): Use correct format for AC_LINK_IFELSE. glob: fix compile test * m4/glob.m4 (gl_GLOB): Use correct format for AC_COMPILE_IFELSE. btowc: fix missing file * modules/btowc (Files): Also ship locale-fr.m4. lseek: fix link test * m4/lseek.m4 (gl_FUNC_LSEEK): Use correct format for AC_LINK_IFELSE. include_next: silence autoconf 2.68 warning * m4/include_next.m4 (gl_INCLUDE_NEXT): Mark this use of AC_COMPILE_IFELSE as special. (AC_LANG_DEFINES_PROVIDED): Provide dummy implementation for autoconf < 2.68. acl: fix compilation test * m4/acl.m4 (gl_FUNC_ALL): Use correct format for AC_COMPILE_IFELSE. 2010-08-26 Bruno Haible Modernize AC_TRY_RUN invocations. * m4/btowc.m4 (gl_FUNC_BTOWC): Use AC_RUN_IFELSE instead of AC_TRY_RUN. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Likewise. * m4/exponentd.m4 (gl_DOUBLE_EXPONENT_LOCATION): Likewise. * m4/exponentf.m4 (gl_FLOAT_EXPONENT_LOCATION): Likewise. * m4/exponentl.m4 (gl_LONG_DOUBLE_EXPONENT_LOCATION): Likewise. * m4/fopen.m4 (gl_FUNC_FOPEN): Likewise. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Likewise. * m4/ftello.m4 (gl_FUNC_FTELLO): Likewise. * m4/iconv.m4 (AM_ICONV_LINK): Likewise. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN_UTF): Likewise. * m4/intdiv0.m4 (gt_INTDIV0): Likewise. * m4/isnanf.m4 (gl_ISNANF_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): Likewise. * m4/mbrlen.m4 (gl_MBRLEN_INCOMPLETE_STATE, gl_MBRLEN_RETVAL, gl_MBRLEN_NUL_RETVAL): Likewise. * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE, gl_MBRTOWC_SANITYCHECK, gl_MBRTOWC_NULL_ARG, gl_MBRTOWC_RETVAL, gl_MBRTOWC_NUL_RETVAL): Likewise. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Likewise. * m4/open.m4 (gl_FUNC_OPEN): Likewise. * m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_LONG_DOUBLE, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A, gl_PRINTF_DIRECTIVE_F, gl_PRINTF_DIRECTIVE_N, gl_PRINTF_DIRECTIVE_LS, gl_PRINTF_POSITIONS, gl_PRINTF_FLAG_GROUPING, gl_PRINTF_FLAG_LEFTADJUST, gl_PRINTF_FLAG_ZERO, gl_PRINTF_PRECISION, gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_SNPRINTF_SIZE1, gl_VSNPRINTF_ZEROSIZE_C99): Likewise. * m4/printf-posix.m4 (gt_PRINTF_POSIX): Likewise. * m4/signbit.m4 (gl_SIGNBIT, gl_FLOATTYPE_SIGN_LOCATION): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/threadlib.m4 (gl_THREADLIB_BODY): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. * m4/wcsrtombs.m4 (gl_WCSRTOMBS_TERMINATION): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. 2010-08-26 Bruno Haible Modernize AC_TRY_LINK invocations. * m4/acosl.m4 (gl_FUNC_ACOSL): Use AC_LINK_IFELSE instead of AC_TRY_LINK. * m4/argp.m4 (gl_ARGP): Likewise. * m4/asinl.m4 (gl_FUNC_ASINL): Likewise. * m4/atanl.m4 (gl_FUNC_ATANL): Likewise. * m4/ceil.m4 (gl_FUNC_CEIL_LIBS): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF_LIBS): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL_LIBS): Likewise. * m4/codeset.m4 (AM_LANGINFO_CODESET): Likewise. * m4/cosl.m4 (gl_FUNC_COSL): Likewise. * m4/expl.m4 (gl_FUNC_EXPL): Likewise. * m4/floor.m4 (gl_FUNC_FLOOR_LIBS): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF_LIBS): Likewise. * m4/floorl.m4 (gl_FUNC_FLOORL_LIBS): Likewise. * m4/frexp.m4 (gl_FUNC_FREXP, gl_CHECK_FREXP_NO_LIBM): Likewise. * m4/frexpl.m4 (gl_FUNC_FREXPL, gl_CHECK_FREXPL_NO_LIBM): Likewise. * m4/ftello.m4 (gl_FUNC_FTELLO): Likewise. * m4/gettext.m4 (AM_GNU_GETTEXT): Likewise. * m4/hostent.m4 (gl_HOSTENT): Likewise. * m4/iconv.m4 (AM_ICONV_LINK): Likewise. * m4/intl.m4 (gt_INTL_SUBDIR_CORE): Likewise. * m4/intlmacosx.m4 (gt_INTL_MACOSX): Likewise. * m4/isnand.m4 (gl_HAVE_ISNAND_IN_LIBM, gl_HAVE_ISNAND_NO_LIBM): Likewise. * m4/isnanf.m4 (gl_HAVE_ISNANF_NO_LIBM, gl_HAVE_ISNANF_IN_LIBM): Likewise. * m4/isnanl.m4 (gl_HAVE_ISNANL_NO_LIBM, gl_HAVE_ISNANL_IN_LIBM): Likewise. * m4/lcmessage.m4 (gt_LC_MESSAGES): Likewise. * m4/ldexpl.m4 (gl_FUNC_LDEXPL, gl_CHECK_LDEXPL_NO_LIBM): Likewise. * m4/lib-link.m4 (AC_LIB_HAVE_LINKFLAGS): Likewise. * m4/logb.m4 (gl_FUNC_LOGB): Likewise. * m4/logl.m4 (gl_FUNC_LOGL): Likewise. * m4/printf-frexp.m4 (gl_FUNC_PRINTF_FREXP): Likewise. * m4/servent.m4 (gl_SERVENT): Likewise. * m4/signbit.m4 (gl_SIGNBIT): Likewise. * m4/sinl.m4 (gl_FUNC_SINL): Likewise. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Likewise. * m4/tanl.m4 (gl_FUNC_TANL): Likewise. * m4/threadlib.m4 (gl_THREADLIB_BODY): Likewise. * m4/trunc.m4 (gl_FUNC_TRUNC): Likewise. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. * modules/tsearch-tests (configure.ac): Likewise. 2010-08-26 Bruno Haible Modernize AC_TRY_COMPILE invocations. * m4/environ.m4 (gt_CHECK_VAR_DECL): Use AC_COMPILE_IFELSE instead of AC_TRY_COMPILE. * m4/iconv.m4 (gl_iconv_AC_DEFUN): Likewise. * m4/intl.m4 (gt_CHECK_DECL): Likewise. * m4/intmax.m4 (gt_TYPE_INTMAX_T): Likewise. * m4/intmax_t.m4 (gt_AC_TYPE_INTMAX_T): Likewise. * m4/inttypes-pri.m4 (gt_INTTYPES_PRI): Likewise. * m4/inttypes_h.m4 (gl_AC_HEADER_INTTYPES_H): Likewise. * m4/locale_h.m4 (gl_LOCALE_H): Likewise. * m4/lock.m4 (gl_LOCK): Likewise. * m4/malloc.m4 (gl_CHECK_MALLOC_POSIX): Likewise. * m4/mbswidth.m4 (gl_MBSWIDTH): Likewise. * m4/minmax.m4 (gl_MINMAX_IN_HEADER): Likewise. * m4/setenv.m4 (gl_FUNC_UNSETENV): Likewise. * m4/size_max.m4 (gl_SIZE_MAX): Likewise. * m4/ssize_t.m4 (gt_TYPE_SSIZE_T): Likewise. * m4/stdarg.m4 (gl_STDARG_H): Likewise. * m4/stdbool.m4 (AC_HEADER_STDBOOL): Likewise. * m4/stdint_h.m4 (gl_AC_HEADER_STDINT_H): Likewise. * m4/visibility.m4 (gl_VISIBILITY): Likewise. * m4/wchar_t.m4 (gt_TYPE_WCHAR_T): Likewise. * m4/wint_t.m4 (gt_TYPE_WINT_T): Likewise. * m4/libunistring.m4 (gl_LIBUNISTRING_CORE): Likewise. Remove extraneous semicolon. 2010-08-26 Jim Meyering stat-time: relax license LGPL * modules/stat-time (License): Change from GPL to LGPL, with consent from all contributors, for use in libguile. Requested by Ludovic Courtès. 2010-08-26 Erik Faye-Lund poll: return immediately on POLLHUP. * lib/poll.c (poll): Always set timeout before wait_timeout is computed. 2010-08-25 Ralf Wildenhues Fix test-unlinkat, test-rmdir failure on AIX 5.3. * tests/test-rmdir.h (test_rmdir_func): Also accept EEXIST for rmdir ("dir/.//"), unlinkat. 2010-08-24 Paul Eggert stdbool: avoid spurious failure with modern xlc * m4/stdbool.m4 (AC_HEADER_STDBOOL): Resync with autoconf. 2010-08-24 Bruno Haible getloadavg: simplify code * m4/getloadavg.m4 (gl_GETLOADAVG): Remove useless test of gl_have_func. Update comments. 2010-08-24 Eric Blake getloadavg: don't define SVR4 on cygwin * m4/getloadavg.m4 (gl_GETLOADAVG): Sync with autoconf fix, to only define SVR4 when -lkvm is required. Reported by Yaakov Selkowitz. 2010-08-24 Bruno Haible priv-set: fix comment * lib/priv-set.c (priv_set_restore): Fix typo in comment. 2010-08-23 Paul Eggert priv-set: fix comments * lib/priv-set.c (priv_set_remove, priv_set_restore): Fix comments to match code, as suggested by David Bartley in: http://lists.gnu.org/r/bug-tar/2010-08/msg00018.html 2010-08-23 Eric Blake stdbool: avoid rejecting clang * m4/stdbool.m4 (AC_HEADER_STDBOOL): Resync with autoconf. * tests/test-stdbool.c: Enable more tests if using the system instead of the gnulib replacement. (main): Move xlc bug test to a runtime test for all compilers. Reported by Anders Kaseorg. argz: fix shell quoting issue * m4/argz.m4 (gl_FUNC_ARGZ): Allow for spaces in argument. Reported by Charles Wilson. 2010-08-22 Paolo Bonzini Erik Faye-Lund poll, select: handle ERROR_BROKEN_PIPE. * lib/poll.c (win32_compute_revents): Return POLLHUP when PeekNamedPipe fails with ERROR_BROKEN_PIPE. * lib/select.c (win32_compute_revents): Do not mark a pipe as writeable if PeekNamedPipe fails with ERROR_BROKEN_PIPE. 2010-08-22 Giuseppe Scrivano fts: allow compilation with C++ * lib/fts_.h: Specify extern "C" linkage with C++. 2010-08-22 Ralf Wildenhues Fix gnulib-tool sed script de-commentation for AIX sed. * gnulib-tool (sed_comments): Try indented comments, for AIX 5.3 sed. 2010-08-17 Eric Blake test-stddef: test for (some) offsetof bugs * tests/test-stddef.c: Enhance test to ensure correct type of offsetof. * doc/posix-headers/stddef.texi (stddef.h): Document a Solaris bug that we are not fixing at this time. 2010-08-15 Bruno Haible stpncpy: Allow stpncpy to be defined as a macro. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Don't attempt to redeclare stpncpy if it's already correctly declared. * lib/string.in.h (stpncpy): Undefine before redefining. Reported by Jeremy Huddleston . 2010-08-14 Bruno Haible Rename module 'memxfrm' to 'amemxfrm'. * lib/amemxfrm.h: Renamed from lib/memxfrm.h. (amemxfrm): Renamed from memxfrm. * lib/amemxfrm.c: Renamed from lib/memxfrm.h. Include amemxfrm.h. (amemxfrm): Renamed from memxfrm. * modules/amemxfrm: Renamed from modules/memxfrm. Update. * NEWS: Mention the change. * MODULES.html.sh (String handling ): Update. * lib/unicase/u-casexfrm.h: Invoke amemxfrm instead of memxfrm. * lib/unicase/u8-casexfrm.c: Include amemxfrm.h instead of memxfrm.h. * lib/unicase/u16-casexfrm.c: Likewise. * lib/unicase/u32-casexfrm.c: Likewise. * lib/uninorm/u-normxfrm.h: Invoke amemxfrm instead of memxfrm. * lib/uninorm/u8-normxfrm.c: Include amemxfrm.h instead of memxfrm.h. * lib/uninorm/u16-normxfrm.c: Likewise. * lib/uninorm/u32-normxfrm.c: Likewise. * modules/unicase/u8-casexfrm (Depends-on): Add amemxfrm, remove memxfrm. * modules/unicase/u16-casexfrm (Depends-on): Likewise. * modules/unicase/u32-casexfrm (Depends-on): Likewise. * modules/uninorm/u8-normxfrm (Depends-on): Likewise. * modules/uninorm/u16-normxfrm (Depends-on): Likewise. * modules/uninorm/u32-normxfrm (Depends-on): Likewise. Suggested by Paul Eggert. 2010-08-14 Bruno Haible Tests for module 'astrxfrm'. * modules/astrxfrm-tests: New file. * tests/test-astrxfrm.c: New file. New module 'astrxfrm'. * lib/astrxfrm.h: New file. * lib/astrxfrm.c: New file, based on lib/memxfrm.c. * modules/astrxfrm: New file. 2010-08-14 Reuben Thomas regex: Tweak doc. * doc/regex.texi (Overview): Don't mention regex.c. (GNU Regular Expression Compiling): Likewise. (Match-end-of-line Operator): Mention 'not_eol'. 2010-08-14 Brian Gough Bruno Haible git-merge-changelog: add doc relating to use with bzr and hg. * lib/git-merge-changelog.c: Add comments regarding bzr, hg, diff3. 2010-08-14 Matthias Bolte pthread: fix pthread.h creation for srcdir != builddir * modules/pthread (Makefile.am): Fix the rule to work also in a non-srcdir build. 2010-08-13 Karl Berry * doc/regex.texi (Predefined Syntaxes): @smallexample. * doc/posix-*/*: force line break before @url of POSIX specifications. Suggested by Werner Lemberg. 2010-08-10 Paul Eggert strtod: fix const diagnostic * lib/strtod.c (strtod): Don't assign const char * to char *, as this elicits a warning from GCC when warnings are enabled. 2010-08-10 Pádraig Brady and Eric Blake copy-acl: ignore ENOTSUP on HP-UX * lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Move definition up, so that it is available for HP-UX. * lib/copy-acl.c (qcopy_acl): Use it. Reported by Patrick M. Callahan. 2010-08-10 Eric Blake open, chown: relax license * modules/open (License): Change to LGPLv2+, with consent by all authors, for use in augeas. * modules/chown (License): Likewise. * modules/lchown (Likewise): Likewise. Requested by Adam Stokes. 2010-08-09 Karl Berry * build-aux/ar-lib: new file, import from Automake. * config/srclist.txt: autocheck for updates. 2010-08-09 Eric Blake readlinkat: adjust client modules * modules/areadlinkat (Depends-on): Use readlinkat, not symlinkat. * modules/areadlinkat-with-size (Depends-on): Likewise. mknod: be more vocal about danger of running tests as root * m4/mknod.m4 (gl_FUNC_MKNOD): Make it harder to run configure as root, since that is just asking for problems. Suggested by Bruno Haible, based on a report by Rainer Tammer. readlinkat: split into its own module * modules/symlinkat: Split readlinkat... * modules/readlinkat: ...into separate module. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Move readlinkat check... * m4/readlinkat.m4 (gl_FUNC_READLINAT): ...to new file. * lib/symlinkat.c (readlinkat): Move... * lib/readlinkat.c: ...into new file. * modules/symlinkat-tests: Split readlinkat test... * modules/readlinkat-tests: ...into separate module. * tests/test-symlinkat.c: Split... * tests/test-readlinkat.c: ...into new file. * NEWS: Document the split. * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. * lib/unistd.in.h (readlinkat): Likewise. Suggested by Bruno Haible. 2010-08-08 Bruno Haible memxfrm: Speed up. * lib/memxfrm.c (memxfrm): Allocate enough memory ahead of time, so that usually only one call to strxfrm is necessary for each string part. Reported by Paul Eggert . 2010-08-07 Karl Berry * doc/posix-headers/limits.texi, * doc/posix-functions/malloc.texi, * doc/posix-functions/strsignal.texi: missing @item. * doc/ld-version-script.texi: spurious leading i. * doc/regex.texi (Interval Operators): no commas inside @var. 2010-08-01 Bruno Haible Integrate the regex documentation. * doc/gnulib.texi: Define 'cn' index. (Regular expressions): New a chapter that includes regex.texi and regexprops-generic.texi. * doc/regex.texi: Remove boilerplate stuff. Use simplified @node syntax. Whitespace cleanup. * doc/regex.texi: Remove trailing spaces. Add regex documentation. * doc/regex.texi: New file. Taken from regex-0.12/doc/regex.texi in http://ftp.gnu.org/old-gnu/regex/regex-0.12.tar.gz. Written by Kathy A. Hargreaves and Karl Berry. 2010-08-01 Bruno Haible link: Update documentation. * doc/posix-functions/link.texi: Update regarding Solaris. 2010-07-31 Bruno Haible Update modules list. * MODULES.html.sh (Sorting functions ): Add array-mergesort. (String handling ): Add memcmp2, memxfrm. (Container data structures): Add xlist, xsublist, xoset. (Core language properties): Add alignof, unused-parameter. (Process control, Numeric conversion functions ): Renamed from Numeric conversion functions . Add _Exit, atoll. (Unibyte characters ): New section. (String handling ): New section. (Mathematics ): Add acos, acosl, asin, asinl, atan, atan2, atanl, cbrt, copysign, cos, cosh, cosl, erf, erfc, exp, expl, fabs, fmod, hypot, j0, j1, jn, ldexp, lgamma, log, log10, log1p, logb, logl, modf, nextafter, pow, remainder, rint, sin, sinh, sinl, sqrt, sqrtl, tan, tanh, tanl, y0, y1, yn. (Support for systems lacking POSIX:2008): Add alphasort, dirent, dprintf, dprintf-posix, duplocale, fcntl, getlogin, getopt-posix, grantpt, iconv-h, ioctl, isblank, langinfo, nl_langinfo, pread, ptsname, pwrite, scandir, servent, sys_utsname, ttyname_r, uname, unlockpt, vdprintf, vdprintf-posix. (Enhancements for POSIX:2008 functions): Add getopt-gnu. Remove getopt. (File system functions): Add concat-filename, sys_file, sys_ioctl, xconcat-filename. (File descriptor based Input/Output): Add dup3, fd-safer-flag, getdtablesize, pipe2, pipe2-safer. (Security): New section. (Networking functions): Add accept4. (Signal handling): Add sigpipe. (Internationalization functions): Add xstriconveh, mbmemcasecmp, mbmemcasecoll. (Unicode string functions): Add libunistring-optional, unistr/u*-cmp2, unistr/u*-strcoll, uniwbrk/*, uninorm/*, unicase/*. (Executing programs): Add findprog-lgpl, pipe-filter-gi, pipe-filter-ii. (Misc): Add argp-version-etc, login_tty, parse-duration. 2010-07-31 Bruno Haible Improve doc in MODULES.html. * modules/linkat (Description): Add the word "function". * modules/mkfifo (Description): Likewise. * modules/mknod (Description): Likewise. * modules/remove (Description): Likewise. * modules/renameat (Description): Likewise. * modules/stat (Description): Likewise. * modules/symlink (Description): Likewise. * modules/unlink (Description): Likewise. 2010-07-31 Bruno Haible ansi-c++-opt: Provide option --enable-c++/--disable-c++ when possible. * m4/ansi-c++.m4 (gl_CXX_CHOICE): In Autoconf 2.66 or newer, provide option --enable/disable-c++ instead of --enable/disable-cxx. * NEWS: Mention the change. 2010-07-31 Bruno Haible readlink, areadlink: Relax test a bit. * tests/test-readlink.h (test_readlink): Accept EINVAL as an alternative to ENOTDIR. * tests/test-areadlink.h (test_areadlink): Likewise. Reported by Rainer Tammer. 2010-07-31 Bruno Haible unistr/u8-strstr, unistr/u16-strstr: Optimize the one-character case. * lib/unistr/u-strstr.h (FUNC): When the needle contains only one character, perform the search using U_STRCHR. * lib/unistr/u8-strstr.c (U_STRMBTOUC): New macro. * lib/unistr/u16-strstr.c (U_STRMBTOUC): Likewise. * modules/unistr/u8-strstr (Depends-on): Add unistr/u8-strmbtouc. * modules/unistr/u16-strstr (Depends-on): Add unistr/u16-strmbtouc. Suggested by Paolo Bonzini. 2010-07-31 Bruno Haible unistr/u*-strstr: Fix dependencies. * modules/unistr/u8-strstr (Depends-on): Add unistr/u8-strchr. * modules/unistr/u16-strstr (Depends-on): Add unistr/u16-strchr. * modules/unistr/u32-strstr (Depends-on): Add unistr/u32-strchr. 2010-07-31 Bruno Haible unistr/u8-chr, unistr/u8-strchr: Optimize and add comments. * lib/unistr/u8-chr.c (u8_chr): Add comments. Remove a useless test at the beginning of the loop. * lib/unistr/u8-strchr.c (u8_strchr): Add comments. Don't fall through cases in 'switch' statement. unistr/u8-strchr: Fix several bugs. * lib/unistr/u8-strchr.c (u8_strchr): Don't search beyond the end of the string. When not found, return NULL, not a pointer near the end. More tests for unistr/u8-strchr. * tests/unistr/test-strchr.h (test_strchr): Renamed from main. Check that the function does not read past the first occurrence of the byte being searched. * tests/unistr/test-u8-strchr.c (main): New function, with more tests. * tests/unistr/test-u16-strchr.c (main): New function. * tests/unistr/test-u32-strchr.c (main): New function. 2010-07-31 Bruno Haible posix-modules: Ignore backup files of documentation files. * posix-modules: grep only through files named *.texi. 2010-07-31 Bruno Haible symlinkat: Fix documentation. * doc/posix-functions/readlinkat.texi: Fix module name. 2010-07-31 Bruno Haible fchownat: Replace also when chown has the trailing slash bug. * m4/openat.m4 (gl_FUNC_FCHOWNAT): Move the test of REPLACE_CHOWN outside the gl_FUNC_FCHOWNAT_DEREF_BUG invocation. Fixes regression introduced on 2010-04-10. Reported by Rainer Tammer. 2010-07-31 Bruno Haible linkat: Work around AIX 7.1 bug. * m4/linkat.m4 (gl_FUNC_LINKAT): Require AC_CANONICAL_HOST. Test whether linkat handles trailing slash correctly. If not, replace linkat and define LINKAT_TRAILING_SLASH_BUG. * lib/linkat.c (rpl_linkat): If LINKAT_TRAILING_SLASH_BUG is defined, check whether (fd1,file1) points to a directory if file1 or file2 ends in a slash. Code taken from lib/link.c. * doc/posix-functions/linkat.texi: Mention trailing slash bug. Reported by Rainer Tammer. 2010-07-31 Bruno Haible Correctly determine whether pow is available in libc on AIX 7 with xlc. * m4/mathfunc.m4 (gl_MATHFUNC): Actually use the 'funcptr' variable. This disables an xlc optimization that was causing wrong test results. Reported by Rainer Tammer. 2010-07-31 Bruno Haible iconv: Work around AIX 6.1..7.1 bug. * doc/posix-functions/iconv.texi: Mention AIX 6.1, 7.1 bug. * m4/iconv.m4 (AM_ICONV_LINK): Test against AIX 6.1, 7.1 bug. When cross-compiling, guess no on all versions of AIX. Reported by Rainer Tammer. 2010-07-31 Bruno Haible readlink: Relax test a bit. * tests/test-readlink.h (test_readlink): Allow different errno value when readlink is called with a file name that ends in / and refers to a file. Suggested by Eric Blake. Reported by Rainer Tammer. 2010-07-31 Bruno Haible copysign: Does not require -lm on glibc systems. * modules/copysign (configure.ac): Use gl_MATHFUNC, not gl_COMMON_DOUBLE_MATHFUNC. * m4/mathfunc.m4 (gl_COMMON_DOUBLE_MATHFUNC): Update comments. 2010-07-31 Bruno Haible duplocale: Work around AIX 7.1 bug. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Let the test fail also when duplocale(LC_GLOBAL_LOCALE) returns (locale_t)0. * lib/duplocale.c (rpl_duplocale): Update comment. * doc/posix-functions/duplocale.texi: Mention the AIX 7.1 bug. Reported by Rainer Tammer. 2010-07-30 Bruno Haible dirfd: Avoid link error on AIX 7.1. * lib/dirent.in.h (dirfd): Use modern idiom with REPLACE_DIRFD. * m4/dirfd.m4 (gl_FUNC_DIRFD): If the function is declared but does not exist, set REPLACE_DIRFD. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize REPLACE_DIRFD. * modules/dirent (Makefile.am): Substitute REPLACE_DIRFD. * doc/posix-functions/dirfd.texi: Update. Reported by Rainer Tammer. 2010-07-30 Eric Blake strtod: next round of AIX fixes * lib/strtod.c (strtod): Work around AIX bug of parsing p with no exponent. * tests/test-strtod.c (main): Enhance tests. * doc/posix-functions/strtod.texi (strtod): Document next bug. Reported by Rainer Tammer. futimens: fix configure check * m4/futimens.m4 (gl_FUNC_FUTIMENS): Use correct logic. Reported by Bruno Haible. 2010-07-30 Bruno Haible getline: Update regarding AIX. * doc/posix-functions/getline.texi: Mention bug on AIX 7.1. Reported by Rainer Tammer. 2010-07-30 Bruno Haible wcwidth: Drop replacement on AIX 7. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): When cross-compiling, guess yes on AIX 7. Reported by Rainer Tammer. 2010-07-30 Bruno Haible strtok_r: Avoid triggering bug in AIX 7.1 xlc compiler. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Don't cast an invalid address to a 'char *'. Reported by Rainer Tammer. 2010-07-30 Bruno Haible unlink: Update regarding AIX. * doc/posix-functions/unlink.texi: Mention bug on AIX 7.1. * m4/unlink.m4 (gl_FUNC_UNLINK): Update comment. Reported by Rainer Tammer. 2010-07-30 Bruno Haible symlink: Update regarding AIX. * doc/posix-functions/symlink.texi: Mention bug on AIX 7.1. * m4/symlink.m4 (gl_FUNC_SYMLINK): Update comment. Reported by Rainer Tammer. 2010-07-30 Bruno Haible strndup: Update regarding AIX. * m4/strndup.m4 (gl_FUNC_STRNDUP): When cross-compiling, guess yes on AIX 7. Reported by Rainer Tammer. 2010-07-30 Bruno Haible stat: Update regarding AIX. * doc/posix-functions/stat.texi: Mention bug on AIX 7.1. * m4/stat.m4 (gl_FUNC_STAT): Update comment. Reported by Rainer Tammer. 2010-07-30 Bruno Haible truncl: Fix autoconf test. * m4/truncl.m4 (gl_FUNC_TRUNCL): Add TRUNCL_LIBM to LIBS while testing whether truncl works. Reported by Rainer Tammer. 2010-07-30 Bruno Haible round: Update regarding AIX. * m4/round.m4 (gl_FUNC_ROUND): When cross-compiling, guess no on AIX 7. * doc/posix-functions/round.texi: Mention bug on AIX 7.1. Reported by Rainer Tammer. 2010-07-30 Bruno Haible rename: Update regarding AIX. * doc/posix-functions/rename.texi: Mention bug on AIX 7.1. * m4/rename.m4 (gl_FUNC_RENAME): Update comment. Reported by Rainer Tammer. 2010-07-30 Bruno Haible printf.m4: Update regarding AIX. * m4/printf.m4: Update comments regarding AIX. Reported by Rainer Tammer. 2010-07-30 Bruno Haible iconv: Update regarding AIX. * m4/iconv.m4 (AM_ICONV_LINK): When cross-compiling, guess yes on AIX 7. Reported by Rainer Tammer. 2010-07-30 Bruno Haible getopt: Update regarding AIX. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): When cross-compiling, guess no on AIX. * doc/posix-functions/getopt.texi: Mention that AIX has the optind bug. Reported by Rainer Tammer. 2010-07-30 Bruno Haible ldexpl; Update regarding AIX. * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): When cross-compiling, guess yes on AIX 7. Reported by Rainer Tammer. 2010-07-30 Bruno Haible frexpl: Update regarding AIX. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): When cross-compiling, guess yes on AIX 7. Reported by Rainer Tammer. 2010-07-30 Bruno Haible open, fopen: Update regarding AIX. * m4/open.m4 (gl_FUNC_OPEN): Adjust cross-compiling guess for AIX. * m4/fopen.m4 (gl_FUNC_FOPEN): Likewise. * doc/posix-functions/open.texi: Mention the trailing-slash bug on AIX. * doc/posix-functions/fopen.texi: Likewise. Reported by Rainer Tammer. 2010-07-30 Bruno Haible chown: Update doc regarding AIX. * doc/posix-functions/chown.texi: Mention bug on AIX 7.1. * m4/chown.m4 (gl_FUNC_CHOWN): Update comment. Reported by Rainer Tammer. 2010-07-30 Eric Blake strtod: fix bug in replacement function on AIX * lib/strtod.c (strtod): Special case broken "0x" parse in underlying strtod. * tests/test-strtod.c (main): Document AIX 7.1 bugs. * doc/posix-functions/strtod.texi (strtod): Likewise. Reported by Rainer Tammer. 2010-07-30 Bruno Haible mbrlen: Fix cross-compilation guess for AIX. * m4/mbrlen.m4 (gl_MBRLEN_INCOMPLETE_STATE): Fix cross-compilation guess. Leftover from 2008-12-22. 2010-07-30 Bruno Haible mbrtowc: Fix cross-compilation guess for AIX. * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE): Fix cross-compilation guess. Leftover from 2008-12-21. 2010-07-29 Peter O'Gorman (tiny change) init.sh: work around trap limitation of some shells * tests/init.sh (setup_): Move exit trap outside of shell function. 2010-07-29 Eric Blake strtod: aid debugging * m4/strtod.m4(gl_FUNC_STRTOD): Use distinct exit status to aid understanding why strtod is rejected. 2010-07-28 Bruno Haible unistr/u*-chr, unistr/u*-strchr: Fix link errors and warnings. * lib/unistr/u8-chr.c: Include . * tests/unistr/test-u8-chr.c: Likewise. * tests/unistr/test-u16-chr.c: Likewise. * tests/unistr/test-u32-chr.c: Likewise. * tests/unistr/test-u8-strchr.c: Likewise. * tests/unistr/test-u16-strchr.c: Likewise. * tests/unistr/test-u32-strchr.c: Likewise. * modules/unistr/u8-chr-tests (Depends-on): Add unistr/u32-set. * modules/unistr/u16-chr-tests (Depends-on): Likewise. * modules/unistr/u8-strchr-tests (Depends-on): Likewise. * modules/unistr/u16-strchr-tests (Depends-on): Likewise. 2010-07-28 Bruno Haible Use spaces for indentation, not tabs. * lib/**/*.[hcy] except lib/reg*.[hc]: Untabify. 2010-07-27 Bruno Haible mbspcasecmp: Fix function specification. * lib/string.in.h (mbspcasecmp): Fix specification comment. * lib/mbspcasecmp.c (mbspcasecmp): Likewise. Reported by Eric Blake . 2010-07-26 Paul R. Eggert timespec: use cast and not conditional, as truncation isn't possible * lib/timespec.h (timespec_cmp): Use cast to pacify gcc -Wconversion instead of a conditional. Comment about the situation in more detail. This undoes most of the 2009-10-29 patch. 2010-07-23 Paolo Bonzini unistr/u8-chr, unistr/u8-strchr: use Boyer-Moore like algorithm. * lib/unistr/u8-chr.c: Add Boyer-Moore like operation. * lib/unistr/u8-strchr.c: Likewise. * modules/unistr/u8-chr: Depend on memchr. unistr/u*-strchr: add tests * modules/unistr/u8-strchr-tests: New file. * modules/unistr/u16-strchr-tests: New file. * modules/unistr/u32-strchr-tests: New file. * tests/unistr/test-strchr.h: New file. * tests/unistr/test-u8-strchr.c: New file. * tests/unistr/test-u16-strchr.c: New file. * tests/unistr/test-u32-strchr.c: New file. unistr/u*-chr: test multibyte sequences more * tests/unistr/test-chr.h: Do complete testing of the characters in the test vector. * tests/unistr/test-u8-chr.c (U_UCTOMB): Define. * tests/unistr/test-u16-chr.c (U_UCTOMB): Likewise. * tests/unistr/test-u32-chr.c (U_UCTOMB): Likewise. unistr/u*-chr: test multibyte sequences * tests/unistr/test-chr.h: Put characters above 0-127 in the test input. unistr/u*-chr: prepare for multibyte tests * modules/unistr/u8-chr-tests: Depend on u32-to-u8. * modules/unistr/u16-chr-tests: Depend on u32-to-u16. * tests/unistr/test-chr.h: Build initial version as UCS-4 then convert. * tests/unistr/test-u8-chr.c (U32_TO_U): Define. * tests/unistr/test-u16-chr.c (U32_TO_U): Likewise. * tests/unistr/test-u32-chr.c (U32_TO_U): Likewise. 2010-07-18 Bruno Haible unistr/u8-strchr: Optimize non-ASCII argument case. * lib/unistr/u8-strchr.c (u8_strchr): Compare the last byte first, because the first byte often matches anyway. Reported by Pádraig Brady . 2010-07-15 Karl Berry * config/srclist.txt (fdl.texi): only one copy, from gnustandards. 2010-07-14 Paul R. Eggert getcwd: on Solaris, work better if ancestors are inaccessible * lib/getcwd.c (__getcwd): If getcwd returns EINVAL for zero buffer and size, try again with a large buffer. This works better on Solaris, since its getcwd succeeds even if the path to the root is inaccessible, and this is helpful in common cases such as .zfs hidden directories. Problem reported by J Chapman Flack in http://lists.gnu.org/r/bug-tar/2010-06/msg00000.html Use system getcwd if it's declared, not merely if it's partly working; use the partly-working test only to avoid needless effort if the system getcwd fails. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Omit comment that was already obsolete and is now even more obsolete. * modules/getcwd (Depends-on): Depend on strdup, since __getcwd now might call strdup. 2010-07-13 Paul R. Eggert pthread: Add enough so that coreutils/src/sort.c compiles. * lib/pthread.in.h: Add self to author comment. Conditionalize on _GL_PTHREAD_H, not PTHREAD_H_, for consistency with the rest of gnulib. Include and , as per POSIX. Include , in case it defines pthread_t. (pthread_t, pthread_attr_t, pthread_barrier_t, pthread_barrierattr_t): (pthread_cond_t, pthread_condattr_t, pthread_key_t, pthread_mutex_t): (pthread_mutexattr_t, pthread_once_t, pthread_rwlock_t): (pthread_rwlockattr_t, pthread_spinlock_t): New typedefs, if HAVE_PTHREAD_T is not defined. (PTHREAD_COND_INITIALIZER, PTHREAD_MUTEX_INITIALIZER): (PTHREAD_ONCE_INIT, PTHREAD_RWLOCK_INITIALIZER): (PTHREAD_BARRIER_SERIAL_THREAD, PTHREAD_CANCEL_DEFERRED): (PTHREAD_CANCEL_ASYNCHRONOUS, PTHREAD_CANCEL_ENABLE): (PTHREAD_CANCEL_DISABLE, PTHREAD_CANCELED, PTHREAD_CREATE_JOINABLE): (PTHREAD_CREATE_DETACHED, PTHREAD_INHERIT_SCHED): (PTHREAD_EXPLICIT_SCHED, PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL): (PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE): (PTHREAD_MUTEX_STALLED, PTHREAD_MUTEX_ROBUST, PTHREAD_PRIO_NONE): (PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_PROTECT, PTHREAD_PROCESS_PRIVATE): (PTHREAD_PROCESS_SHARED, PTHREAD_SCOPE_SYSTEM, PTHREAD_SCOPE_PROCESS): New macros. (pthread_cond_destroy, pthread_cond_init, pthread_cond_signal): (pthread_cond_wait, pthread_exit, pthread_mutex_destroy): (pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock): (pthread_spin_init, pthread_spin_lock, pthread_spin_trylock); (pthread_spin_unlock): New dummy functions. (pthread_create): Return EAGAIN; don't set errno. * m4/pthread.m4 (gl_PTHREAD_CHECK): Check for pthread_t, and require AC_C_INLINE. * modules/pthread (Depends-on): Add sched, time. (pthread.h): Use AM_V_GEN. 2010-07-13 Bruno Haible striconveh: Don't malloc memory if the result buffer is sufficient. * lib/striconveh.c (mem_cd_iconveh_internal): Use the provided result buffer if its size is sufficient. Reported by Ludovic Courtès . 2010-07-13 Bruno Haible strtod: Add safety check. * lib/strtod.c (ldexp): Abort if this dummy replacement gets called. 2010-07-12 Bruno Haible Unify tests that set gl_cv_func_ldexpl_no_libm. * m4/ldexpl.m4 (gl_CHECK_LDEXPL_NO_LIBM): New macro, extracted from gl_FUNC_LDEXPL. (gl_FUNC_LDEXPL): Invoke it. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Likewise. 2010-07-12 Bruno Haible Unify tests that set gl_cv_func_ldexp_no_libm. * m4/ldexp.m4: New file, based on m4/mathfunc.m4. * m4/strtod.m4 (gl_PREREQ_STRTOD): Require gl_CHECK_LDEXP_NO_LIBM. * modules/ldexp (Files): Remove m4/mathfunc.m4. Add m4/ldexp.m4. (configure.ac): Simply invoke gl_FUNC_LDEXP. * modules/strtod (Files): Add m4/ldexp.m4. 2010-07-12 Bruno Haible Unify tests that set gl_cv_func_frexpl_no_libm. * m4/frexpl.m4 (gl_CHECK_FREXPL_NO_LIBM): New macro, extracted from gl_FUNC_FREXPL_NO_LIBM. (gl_FUNC_FREXPL, gl_FUNC_FREXPL_NO_LIBM): Invoke it. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Likewise. 2010-07-12 Bruno Haible Unify tests that set gl_cv_func_frexp_no_libm. * m4/frexp.m4 (gl_CHECK_FREXP_NO_LIBM): New macro, extracted from gl_FUNC_FREXP_NO_LIBM. (gl_FUNC_FREXP, gl_FUNC_FREXP_NO_LIBM): Require it. * m4/printf-frexp.m4 (gl_FUNC_PRINTF_FREXP): Likewise. 2010-07-12 Paul R. Eggert memcoll: clarify sizes versus lengths, document better, and tweak perf * lib/memcoll.c (strcoll_loop, memcoll0): Improve quality of descriptive comments. Name variables consistently as to whether they are lengths (which do not include terminating null) versus sizes (which do). * lib/xmemcoll.c (xmemcoll0): Likewise. * lib/memcoll.c (strcoll_loop): Tweak the way that the diff is returned when s1size == 0; this is easier to compile and saves about 17% of memcoll's code space on x86-64 with GCC 4.1.2. 2010-07-12 Bruno Haible Tests for module '_Exit'. * modules/_Exit-tests: New file. * tests/test-_Exit.sh: New file. * tests/test-_Exit.c: New file. New module '_Exit'. * lib/stdlib.in.h (__attribute__): New macro. (_Exit): New declaration. * lib/_Exit.c: New file. * m4/_Exit.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H): Check whether _Exit is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB__EXIT and HAVE__EXIT. * modules/stdlib (Makefile.am): Substitute GNULIB__EXIT and HAVE__EXIT. * modules/_Exit: New file. * tests/test-stdlib-c++.cc (_Exit): Check signature. * doc/posix-functions/_Exit_C99.texi: Mention the new module. 2010-07-12 Paul R. Eggert strtod: make it more-accurate typically, and don't require libm * lib/strtod.c (_GL_ARG_NONNULL): Remove; no longer needed. Include limits.h. Don't include string.h. (HAVE_LDEXP_IN_LIBC, HAVE_RAW_DECL_STRTOD): Define to 0 if not defined. (locale_isspace): New function, so that no casts are needed to check whether *s is a space. (ldexp): Provide an unused dummy if not available. (scale_radix_exp, parse_number, underlying_strtod): New functions. (strtod): Use them. This implementation prefers to use the underlying strtod if available, falling back on our own code only to fix known bugs. This is more likely to produce an accurate result. Also, it avoids the use of libm functions. * m4/strtod.m4 (gl_FUNC_STRTOD): Don't invoke _AC_LIBOBJ_STRTOD; no longer needed. Invoke AC_LIBOBJ([strtod]); don't know why this was absent, but it caused a test failure with coreutils. (gl_PREREQ_STRTOD): Check wither ldexp can be used without linking with libm. * modules/strtod (Makefile.am, Link): libm is no longer needed. * modules/strtod-tests (Makefile.am): Likewise. 2010-07-11 Pádraig Brady Bruno Haible unistr/u8-strchr: Optimize ASCII argument case. * lib/unistr/u8-strchr.c (u8_strchr): For ASCII arguments, use strchr. 2010-07-08 Paul Eggert (x)memcoll: minor tweaks * lib/memcoll.c (strcoll_loop): Prefer the style where 'const' is after the type that it qualifies. (memcoll0): Likewise. * lib/memcoll.h (memcoll0): Likewise. * lib/xmemcoll.c (collate_error, xmemcoll0): Likewise. * lib/xmemcoll.h (xmemcoll0): Likewise. * lib/memcoll.c (memcoll0): Correct the comment. This function differs from memcoll in that the NUL byte is part of the argument. Omit the abort-checks, as performance is a real issue here. Plus, the checks were wrong anyway (an off-by-one error). Omit local variable 'diff', as it's a bit clearer that way. * m4/memcoll.m4 (gl_MEMCOLL): Omit AC_FUNC_STRCOLL, as it's no longer needed. 2010-07-08 Chen Guo (x)memcoll: speedup when input is known to be NUL delimited * lib/memcoll.c: Include stdlib. (memcoll0): New function. (strcoll_loop): New function, refactored for use in both memcoll and memcoll0. * lib/memcoll.h (memcoll0): Add prototype. * lib/xmemcoll.c (xmemcoll0): New function. (collate_error): New function, refactored for use in both xmemcoll and xmemcoll0. * lib/xmemcoll.h (xmemcoll0): Add prototype. * m4/memcoll.m4: add inline invocation. 2010-07-06 Pádraig Brady * build-aux/bootstrap: Remove any local translations from the translation project synchronization directory, so that local only translations are not distributed. 2010-07-04 Bruno Haible fsusage: Clarify which code applies to which platforms. * m4/fsusage.m4 (gl_FSUSAGE): Clarify which test succeeds on which platform. * lib/fsusage.c (get_fs_usage): Likewise. 2010-07-04 Bruno Haible havelib: Fix bug when AC_LIB_FROMPACKAGE is used more than twice. * m4/lib-link.m4 (AC_LIB_FROMPACKAGE): Use m4_defn. Reported by Martin Lambers . 2010-07-04 Jim Meyering hash: once again explicitly disallow insertion of NULL * lib/hash.c (hash_insert0): Reinstate just-removed test: inserting a NULL pointer cannot work with these functions. Add a comment with details. This reverts part of the 2010-07-01 commit, 5bef1a35 "hash: extend module to deal with non-pointer keys". 2010-07-01 Bruno Haible stdbool: Update doc. * doc/posix-headers/stdbool.texi: Mention OpenBSD bug. Info from Christian Weisgerber . 2010-07-01 Jim Meyering hash: extend module to deal with non-pointer keys * lib/hash.c (hash_insert0): New interface, much like hash_insert but that allows insertion of non-pointer entries. Do not disallow an ENTRY value of NULL. (hash_insert): This is now just a thin wrapper. Call hash_insert0. * lib/hash.h (hash_insert0): Declare. 2010-07-01 Christian Weisgerber (tiny change) gettext: Use AC_GNU_SOURCE as a fallback for AC_USE_SYSTEM_EXTENSIONS. * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): When AC_USE_SYSTEM_EXTENSIONS is not present (i.e. with autoconf 2.59 and when using gettextize, not gnulib), require AC_GNU_SOURCE instead. 2010-07-01 Ian Beckwith idpriv-drop: Fix tests. * tests/test-idpriv-drop.su.sh: Refer to the test-idpriv-drop program, not to the test-idpriv-droptemp program. 2010-06-29 Bruno Haible string: Fix syntax error with g++ 2.96. * lib/string.in.h (__pure__): Remove definition. (_GL_ATTRIBUTE_PURE): New macro. (memchr, memmem, memrchr, rawmemchr, strchrnul, strnlen, strpbrk, strstr, strcasestr): Use it instead of __attribute__ ((__pure__)). Reported by Christian Weisgerber . 2010-06-28 Ian Beckwith unitypes: Fix bug introduced on 2010-05-18. * modules/unitypes (Files): Really add m4/libunistring-base.m4. 2010-06-22 Eric Blake memmem: slight optimization * lib/str-two-way.h (critical_factorization): Update comments. Reduce work during factorization phase. Reported by Carlos Bueno . 2010-06-21 Bruno Haible Fix HAVE_CALLOC_POSIX misnomer. * lib/stdlib.in.h (calloc): Use REPLACE_CALLOC instead of !HAVE_CALLOC_POSIX. * m4/calloc.m4 (gl_REPLACE_CALLOC): Set REPLACE_CALLOC instead of HAVE_CALLOC_POSIX. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_CALLOC instead of HAVE_CALLOC_POSIX. * modules/stdlib (Makefile.am): Substitute REPLACE_CALLOC instead of HAVE_CALLOC_POSIX. Use modern idiom for calloc() replacement. * modules/calloc (configure.ac): Invoke gl_FUNC_CALLOC_GNU instead of AC_FUNC_CALLOC. * m4/calloc.m4 (gl_FUNC_CALLOC_GNU): Renamed from AC_FUNC_CALLOC. Require gl_STDLIB_H_DEFAULTS. Invoke gl_REPLACE_CALLOC. (gl_FUNC_CALLOC_POSIX): Rely on gl_STDLIB_H_DEFAULTS to initialize HAVE_CALLOC_POSIX. Invoke gl_REPLACE_CALLOC. (gl_REPLACE_CALLOC): New macro. 2010-06-21 Bruno Haible Fix HAVE_REALLOC_POSIX misnomer. * lib/stdlib.in.h (realloc): Use REPLACE_REALLOC instead of !HAVE_REALLOC_POSIX. * m4/realloc.m4 (gl_REPLACE_REALLOC): Set REPLACE_REALLOC instead of HAVE_REALLOC_POSIX. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_REALLOC instead of HAVE_REALLOC_POSIX. * modules/stdlib (Makefile.am): Substitute REPLACE_REALLOC instead of HAVE_REALLOC_POSIX. Use modern idiom for realloc() replacement. * modules/realloc (configure.ac): Invoke gl_FUNC_REALLOC_GNU instead of AC_FUNC_REALLOC. * m4/realloc.m4 (gl_FUNC_REALLOC_GNU): New macro, mostly copied from Autoconf's AC_FUNC_REALLOC. (gl_FUNC_REALLOC_POSIX): Rely on gl_STDLIB_H_DEFAULTS to initialize HAVE_REALLOC_POSIX. Invoke gl_REPLACE_REALLOC. (gl_REPLACE_REALLOC): New macro. Reported by Richard Lloyd . 2010-06-21 Bruno Haible Fix HAVE_MALLOC_POSIX misnomer. * lib/stdlib.in.h (malloc): Use REPLACE_MALLOC instead of !HAVE_MALLOC_POSIX. * m4/malloc.m4 (gl_REPLACE_MALLOC): Set REPLACE_MALLOC instead of HAVE_MALLOC_POSIX. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize REPLACE_MALLOC instead of HAVE_MALLOC_POSIX. * modules/stdlib (Makefile.am): Substitute REPLACE_MALLOC instead of HAVE_MALLOC_POSIX. Use modern idiom for malloc() replacement. * modules/malloc (configure.ac): Invoke gl_FUNC_MALLOC_GNU instead of AC_FUNC_MALLOC. * m4/malloc.m4 (gl_FUNC_MALLOC_GNU): New macro, mostly copied from Autoconf's AC_FUNC_MALLOC. (gl_FUNC_MALLOC_POSIX): Rely on gl_STDLIB_H_DEFAULTS to initialize HAVE_MALLOC_POSIX. Invoke gl_REPLACE_MALLOC. (gl_REPLACE_MALLOC): New macro. Reported by Richard Lloyd . 2010-06-20 Richard Lloyd stdio.in.h: fix compilation failure when using HP-UX 11's C compiler * lib/stdio.in.h: Remove excess _GL_CXXALIAS_RPL macro argument. This macro takes 3 arguments, not 4. 2010-06-15 Giuseppe Scrivano ipv6: fix detection under mingw * m4/sockpfaf.m4 (gl_SOCKET_FAMILIES): Include for struct in6_addr. 2010-06-14 Ben Pfaff * m4/strtod.m4 (gl_FUNC_STRTOD): Factor out common code. Assume that strtod() works when cross-compiling to a glibc version known to work. 2010-06-15 Bruno Haible * m4/strtod.m4 (gl_FUNC_STRTOD): Stop using AC_FUNC_STRTOD. 2010-06-15 René Berber (tiny change) select: Correct timeout. * lib/select.c (rpl_select): Compute wait_timeout correctly. 2010-06-14 Thien-Thi Nguyen (tiny change) git-version-gen: init shell var to avoid env var influence * build-aux/git-version-gen (v): Init shell var to empty. 2010-06-14 Paul Eggert priv-set: Don't assume that priv.h exists merely because getppriv does. See Jan Andersen's bug report about AIX 5L in http://lists.gnu.org/r/bug-tar/2010-06/msg00019.html * m4/priv-set.m4 (gl_PRIV_SET): Check for priv.h. * lib/priv-set.c: Do nothing unless HAVE_PRIV_H. * lib/priv-set.h: Likewise. * tests/test-priv-set.c: Likewise. 2010-06-13 Bruno Haible relocatable: Make it easier to test whether to install wrappers. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): New automake conditional RELOCATABLE_VIA_WRAPPER. 2010-06-13 Bruno Haible gnulib-tool: Display specified modules and dependencies differently. * gnulib-tool (func_show_module_list): New function. (func_import, func_create_testdir): Invoke it. Reported by Thien-Thi Nguyen . 2010-06-13 Bruno Haible gnulib-tool: Align code of func_import and func_create_testdir. * gnulib-tool (func_create_testdir): Rename variable saved_modules to specified_modules. 2010-06-12 Jim Meyering test-inttostr: avoid spurious failure on Solaris 9 * tests/test-inttostr.c (main): Skip the test when snprintf fails to accept "%ju". Reported by Bruno Haible. 2010-06-11 Jim Meyering test-sys_socket: mark variables as used more readably * tests/test-sys_socket.c (main): Mark otherwise unused variables as "used" explicitly via (void) statement casts. This is more readable than using them in an artificial return expression. Suggestion from Bruno Haible. 2010-06-11 Bruno Haible Avoid some more warnings from "gcc -Wwrite-strings". * tests/test-argp.c (test_optional): Change 5th and 6th argument type to 'const char *'. * tests/test-c-strstr.c (main): Add 'const' to variable declaration. * tests/test-c-strcasestr.c (main): Likewise. * tests/test-mbscasestr1.c (main): Likewise. * tests/test-mbscasestr2.c (main): Likewise. * tests/test-memmem.c (main): Likewise. * tests/test-strstr.c (main): Likewise. * tests/test-strcasestr.c (main): Likewise. 2010-06-11 Ralf Wildenhues init.sh: change framework_failure_ to fail with status 99, not 1 * tests/init.sh (framework_failure_): Exit 99, not 1. This informs automake's parallel-tests rule that this is an unexpected failure, even if the test is listed in XFAIL_TESTS. 2010-06-11 Jim Meyering test-inttostr: avoid warnings about 4-6KB literal strings * tests/test-inttostr.c: Don't use . Instead, ... Include "macros.h", for its definition of ASSERT. (CK): s/assert/ASSERT/ * modules/inttostr-tests (Files): Add macros.h. init.sh: don't use $ME_ or skip_ before they are defined * tests/init.sh: Hoist definitions of $ME_ and skip_ to precede their first uses. Also hoist their companions: warn_, fail_, framework_failure_, $stderr_fileno. Prompted by a patch from Stefano Lattarini. test-sys_socket: avoid set-but-not-used warnings from gcc * tests/test-sys_socket.c (main): Use "i" and "x", in order to avoid warning about set-but-not-used variables. test-xvasprintf: avoid 'const' discard warnings * tests/test-xvasprintf.c (test_xvasprintf, test_xasprintf): Use "const" when assigning from literal strings. (test_xasprintf): Add "void" in function argument list to placate -Wstrict-prototypes and to be consistent with test_xvasprintf above. tests: avoid compilation warnings in argmatch and exclude tests... in packages that define ARGMATCH_DIE_DECL, like coreutils. * tests/test-exclude.c [ARGMATCH_DIE_DECL]: Also declare the function. Since it always exits, declare with the "noreturn" attribute. * tests/test-argmatch.c: Likewise. tests: avoid 'const' discard warnings in mbsstr tests * tests/test-mbsstr1.c (main): Add "const" to avoid trivial warning. * tests/test-mbsstr2.c (main): Likewise. test-verify: avoid warning from gcc's -Wmissing-declarations * tests/test-verify.c (function): Declare to be static. test-inttostr.c: include for use of strcmp * tests/test-inttostr.c: Include for strcmp declaration. test-linkat: avoid failed assertion on "other" architectures * tests/test-linkat.c: Include , for declarations of stat, lstat, mkdir. Patch by John Rigby, to fix FTBFS on armel, powerpc, sparc: https://bugs.launchpad.net/bugs/591968 2010-06-11 Jim Meyering printf.m4: avoid autoconf's "Expanded Before Required" warning * m4/printf.m4 (gl_SNPRINTF_RETVAL_C99): Define using AC_DEFUN_ONCE, rather than AC_DEFUN, to avoid the classic "Expanded Before Required" autoconf warning. 2010-06-10 Ben Pfaff Replacement header templates are now named with ".in", not "_". * doc/gnulib-intro.texi: Correct. 2010-06-10 Jim Meyering inttostr-tests: depend on snprintf, not snprintf-posix * modules/inttostr-tests (Depends-on): Depend on snprintf, not snprintf-posix, to avoid this aclocal failure: missing file gnulib-tests/vasnprintf.c configure.ac:45: error: expected source file, required through \ AC_LIBSOURCES, not found 2010-06-10 Jim Meyering inttostr: add a new function, inttostr, and tests The namesake function was not available. The existence of the template file, inttostr.c makes its addition nontrivial. * lib/anytostr.c: Rename from inttostr.c. (anytostr): Rename from inttostr. * lib/inttostr.c: New file. * modules/inttostr (Files): Add anytostr.c. (Makefile.am): Set lib_SOURCES instead of ... * m4/inttostr.m4: Remove uses of AC_LIBOBJ. * lib/imaxtostr.c: Update use. s/inttostr/anytostr/ * lib/offtostr.c: Likewise. * lib/uinttostr.c: Likewise. * lib/umaxtostr.c: Likewise. * modules/inttostr-tests: New file. * tests/test-inttostr.c: New file. Test these functions. 2010-06-09 Ben Pfaff Bruno Haible Add "Extending Gnulib" chapter to manual. * doc/gnulib.texi (Writing Modules): Add cross-reference to new chapter. (Extending Gnulib): New chapter. * doc/gnulib-intro.texi (Openness): Add cross-reference to new chapter. 2010-06-09 Bruno Haible Avoid relocwrapper link errors due to gnulib replacement functions. * lib/areadlink.c: Use the system's malloc, realloc functions. (areadlink): Set errno to ENOMEM explicitly. * modules/areadlink (Depends-on): Remove malloc-posix. Reported by Ben Pfaff . 2010-06-09 Bruno Haible Avoid relocwrapper link errors due to gnulib replacement functions. * lib/canonicalize-lgpl.c: Use the system's malloc function. * lib/malloca.c: Likewise. * lib/relocatable.c: Likewise. * lib/progreloc.c: Use the system's malloc, sprintf functions. * lib/relocwrapper.c: Use the system's fprintf, malloc functions. * lib/setenv.c: Use the system's malloc, realloc functions. * lib/strerror.c: Use the system's sprintf function. Reported by Ben Pfaff . 2010-06-04 Bruno Haible Prefer documented low-level autoconf macro names. * m4/lib-link.m4: Use m4_translit instead of translit. * m4/environ.m4: Likewise. * m4/mathfunc.m4: Likewise. * m4/onceonly.m4: Likewise. * m4/stdint.m4: Likewise. Suggested by Eric Blake. 2010-06-04 Martin Lambers Bruno Haible havelib: Allow library names with '+' characters. * m4/lib-link.m4 (AC_LIB_LINKFLAGS, AC_LIB_HAVE_LINKFLAGS, AC_LIB_FROMPACKAGE, AC_LIB_LINKFLAGS_BODY): Convert '+' in name to '_'. 2010-06-09 Bruno Haible Module setenv does not depend on 'malloc-posix', 'realloc-posix'. * lib/setenv.c (__add_to_environ): Set errno to ENOMEM when malloc or realloc failed. 2010-06-08 Peter Simons maint.mk: make the news-check rule more configurable * top/maint.mk (news-check-lines-spec): New variable. (news-check): Use "sed -n 1,10p" in place of "head". 2010-06-07 Jim Meyering do-release-commit-and-tag: fix typo in --help * build-aux/do-release-commit-and-tag (Usage): Fix typo in --help. regex: avoid new dead-code warning with gcc-4.6.0 * lib/regex_internal.c (re_string_reconstruct): #if-0-out a dead if-block containing a while-loop. It's been unused for at least 5 years. 2010-06-05 Bruno Haible * doc/posix-functions/strcoll.texi: Mention Solaris limitation. Reported by River Tarnell via Eric Blake. 2010-06-04 Bruno Haible Update to GNU gettext 0.18.1. * modules/gettext (configure.ac): Require gettext infrastructure from version 0.18.1. 2010-06-03 Bruno Haible Don't use AC_LIBOBJ with file names in subdirectories. * m4/libunistring-base.m4 (gl_LIBUNISTRING_MODULE): Renamed from gl_LIBUNISTRING_LIBSOURCE. Take a module name as argument, not a file name. Define an automake conditional. Don't invoke AC_LIBOBJ. * m4/libunistring.m4 (gl_LIBUNISTRING): Update AC_BEFORE invocation. * modules/uni*/* (configure.ac): Use gl_LIBUNISTRING_MODULE instead of gl_LIBUNISTRING_LIBSOURCE. (Makefile.am): Augment lib_SOURCES here, conditionally. * NEWS: Drop requirement for Automake option 'subdir-objects'. 2010-06-03 Bruno Haible Simplify gl_LIBUNISTRING_VERSION_CMP expansion. * m4/libunistring-base.m4 (gl_LIBUNISTRING_VERSION_CMP): Ensure expansion does not end with a newline. (gl_LIBUNISTRING_LIBSOURCE, gl_LIBUNISTRING_LIBHEADER): Avoid unnecessary newline. 2010-06-03 Bruno Haible Reduce dependencies. * tests/test-quotearg.h: New file, extracted from tests/test-quotearg.c. * tests/test-quotearg-simple.c: New file, extracted from tests/test-quotearg.c. * tests/test-quotearg.c: Don't include . (struct result_strings, struct result_groups, LQ, RQ, LQ_ENC, RQ_ENC, RQ_ESC, inputs, compare, use_quotearg_buffer, use_quotearg, use_quote_double_quotes, use_quotearg_colon): Moved to tests/test-quotearg.h. (results_g, flag_results, custom_quotes, custom_results): Moved to tests/test-quotearg-simple.c. (main): Moved the part that does not depend on gettext to tests/test-quotearg-simple.c. Return 77 if the test cannot be performed. * modules/quotearg-simple: New file. * modules/quotearg-simple-tests: New file. * modules/quotearg (Depends-on): Add quotearg-simple. * modules/quotearg-tests (Status): Mark as gettext-dependent-test. (Files): Add tests/test-quotearg.h. Reported by Paolo Bonzini. 2010-06-03 Bruno Haible Reduce dependencies. * modules/acl (Depends-on): Add gettext-h. Remove gettext. 2010-06-03 Bruno Haible time: Undefine more broken macros. * lib/time.in.h: Undefine broken localtime_r and gmtime_r macros only for pthread-win32. Undefine also asctime_r, ctime_r, rand_r, strtok_r. Reported by Eric Blake. 2010-06-03 Bruno Haible Choose among AC_DEFUN_ONCE, AC_DEFUN in a way that aclocal understands. * m4/iconv.m4 (gl_iconv_AC_DEFUN): New macro. (AM_ICONV): Define it through gl_iconv_AC_DEFUN. * m4/libunistring.m4 (gl_libunistring_AC_DEFUN): New macro. (gl_LIBUNISTRING): Define it through gl_libunistring_AC_DEFUN. Reported by Ludovic Courtès . 2010-06-02 Eric Blake time: work with mingw + pthreads-win32 library * m4/time_h.m4 (gl_CHECK_TYPE_STRUCT_TIMESPEC): Set new variable if timespec is defined only in pthread.h. * modules/time (Makefile.am): Substitute it. * lib/time.in.h (!TIME_H_DEFINES_STRUCT_TIMESPEC): Include , when needed. (GNULIB_TIME_R): Undefine broken localtime_r and gmtime_r macros from the library. 2010-05-31 Bruno Haible Avoid expanding two macros in the wrong order. * m4/libunistring-base.m4 (gl_LIBUNISTRING_LIB_PREPARE): Require gl_LIBUNISTRING if it is defined. * m4/libunistring.m4 (gl_LIBUNISTRING): Define using AC_DEFUN_ONCE for autoconf >= 2.64. Reported by Ludovic Courtès . 2010-05-27 Jim Meyering maint.mk: also prohibit "#undef" of always-defined symbols * top/maint.mk (def_sym_regex): Handle #undef as well as #define. Allow more than one space before the symbol name. (sc_prohibit_always-defined_macros): Use grep's -E, now that the regexp uses alternation. 2010-05-26 Eric Blake maint.mk: avoid echo -e * top/maint.mk (gzip_rsyncable, _ignore_case, _sc_say_and_exit): Convert all uses of echo -* to printf. Reported by Matthias Bolte. 2010-05-25 Bruno Haible Update to GNU gettext 0.18, part 2. * build-aux/po/Makefile.in.in: Update to GNU gettext 0.18. Reported by Martin von Gagern . 2010-05-25 Ralf Wildenhues Add missing include in test-pwrite.c. * tests/test-pwrite.c: Include string.h, for strcmp. 2010-05-24 Bruno Haible * NEWS: Mention requirement for Automake option 'subdir-objects'. 2010-05-24 Bruno Haible Don't use conversion with transliteration in u{8,16,32}_strcoll. * lib/unistr/u-strcoll.h (FUNC): Use U_STRCONV_TO_ENCODING with iconveh_error argument. * lib/unistr/u8-strcoll.c: Define U_STRCONV_TO_ENCODING instead of U_STRCONV_TO_LOCALE. * lib/unistr/u16-strcoll.c: Likewise. * lib/unistr/u32-strcoll.c: Likewise. * modules/unistr/u8-strcoll (Depends-on): Add uniconv/u8-strconv-to-enc, localcharset. Remove uniconv/u8-strconv-to-locale. (configure.ac): Bump version number. * modules/unistr/u16-strcoll (Depends-on): Add uniconv/u16-strconv-to-enc, localcharset. Remove uniconv/u16-strconv-to-locale. (configure.ac): Bump version number. * modules/unistr/u32-strcoll (Depends-on): Add uniconv/u32-strconv-to-enc, localcharset. Remove uniconv/u32-strconv-to-locale. (configure.ac): Bump version number. 2010-05-24 Bruno Haible Avoid a test failure on NetBSD 5.0. * tests/test-striconveh.c (main): On NetBSD, skip a test that triggers an iconv() bug. 2010-05-24 Bruno Haible Adjust #include directive style. * modules/regex (Includes): Recommend to write . 2010-05-24 Bruno Haible regex: Don't require alloca. * modules/regex (Depends-on): Remove alloca. Add alloca-opt. * lib/regex_internal.h (alloca): Ensure it's defined even if we call it only inside if (0). 2010-05-23 Jim Meyering test-renameat.c: include * tests/test-renameat.c: Include ; required for definition of S_IS* macros. 2010-05-23 Ben Pfaff Update maintainer documentation for 'relocatable-prog' module. * doc/relocatable-maint.texi: Update. Comments by Bruno Haible. 2010-05-23 Bruno Haible git-merge-changelog: Enable --split-merged-entry by default. * lib/git-merge-changelog.c (main): Set split_merged_entry to true. (usage): Don't mention this option any more. Reported by Ralf Wildenhues. 2010-05-23 Jim Meyering test-pwrite: do not leave behind a test file named "out" Revert commit d8fa18472a54c1cb2674c296b3d82443f234d5f7. The trivial-looking use of init.sh is really necessary. It ensures that the temporary file, "out", is created in a temporary directory, and removed upon termination. * tests/test-pwrite.sh: Re-add file. * modules/pwrite-tests: Reference it. 2010-05-23 Ralf Wildenhues Fix output redirection buglet in init.sh. * tests/init.sh: Fix redirection of stderr. 2010-05-20 Simon Josefsson * modules/valgrind-tests (configure.ac): Invoke gl_VALGRIND_TESTS. 2010-05-17 Simon Josefsson * modules/valgrind-tests: New file. * m4/valgrind-tests.m4: New file. * doc/valgrind-tests.texi: New file. * doc/gnulib.texi (Running self-tests under valgrind): New section. 2010-05-19 Bruno Haible Clean up dead code in recent commit. * m4/libunistring-base.m4 (gl_LIBUNISTRING_VERSION_CMP): Include the body of gl_LIBUNISTRING_VERSION_CMP_ORIG as fallback. (gl_LIBUNISTRING_VERSION_CMP_ORIG): Remove macro. Suggested by Paolo Bonzini. 2010-05-19 Bruno Haible Avoid valgrind error reports from libunistring. * lib/libunistring.valgrind: New file, based on lib/malloca.valgrind. * modules/libunistring (Files): Add it. * modules/libunistring-optional (Files): Likewise. 2010-05-18 Paolo Bonzini Bruno Haible New module 'libunistring-optional'. * modules/libunistring-optional: New file. * m4/libunistring-base.m4: New file. * m4/libunistring-optional.m4: New file. * lib/unicase.in.h: Renamed from lib/unicase.h. * lib/uniconv.in.h: Renamed from lib/uniconv.h. * lib/unictype.in.h: Renamed from lib/unictype.h. * lib/unilbrk.in.h: Renamed from lib/unilbrk.h. * lib/uniname.in.h: Renamed from lib/uniname.h. * lib/uninorm.in.h: Renamed from lib/uninorm.h. * lib/unistdio.in.h: Renamed from lib/unistdio.h. * lib/unistr.in.h: Renamed from lib/unistr.h. * lib/unitypes.in.h: Renamed from lib/unitypes.h. * lib/uniwbrk.in.h: Renamed from lib/uniwbrk.h. * lib/uniwidth.in.h: Renamed from lib/uniwidth.h. * m4/libunistring.m4 (gl_LIBUNISTRING_CORE): Renamed from gl_LIBUNISTRING. If the library was found, determine the installed version and set LIBUNISTRING_VERSION. (gl_LIBUNISTRING): New macro, as a wrapper arount it. Document that it sets LIBUNISTRING_VERSION. If the module libunistring-optional is used, handle a configuration option --with-included-libunistring. * modules/libunistring (Files): Add m4/absolute-header.m4. * modules/unicase/base (Files): Use unicase.in.h instead of unicase.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unicase.h from unicase.in.h. * modules/uniconv/base (Files): Use uniconv.in.h instead of uniconv.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build uniconv.h from uniconv.in.h. * modules/unictype/base (Files): Use unictype.in.h instead of unictype.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unictype.h from unictype.in.h. * modules/unilbrk/base (Files): Use unilbrk.in.h instead of unilbrk.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unilbrk.h from unilbrk.in.h. * modules/uniname/base (Files): Use uniname.in.h instead of uniname.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build uniname.h from uniname.in.h. * modules/uninorm/base (Files): Use uninorm.in.h instead of uninorm.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build uninorm.h from uninorm.in.h. * modules/unistdio/base (Files): Use unistdio.in.h instead of unistdio.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unistdio.h from unistdio.in.h. * modules/unistr/base (Files): Use unistr.in.h instead of unistr.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unistr.h from unistr.in.h. * modules/unitypes (Files): Use unitypes.in.h instead of unitypes.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build unitypes.h from unitypes.in.h. * modules/uniwbrk/base (Files): Use uniwbrk.in.h instead of uniwbrk.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build uniwbrk.h from uniwbrk.in.h. * modules/uniwidth/base (Files): Use uniwidth.in.h instead of uniwidth.h. Add m4/libunistring-base.m4. (configure.ac): Invoke gl_LIBUNISTRING_LIBHEADER. (Makefile.am): Build uniwidth.h from uniwidth.in.h. * modules/unicase/empty-prefix-context: Use gl_LIBUNISTRING_LIBSOURCE instead of augmenting lib_SOURCES. * modules/unicase/empty-suffix-context: Likewise. * modules/unicase/locale-language: Likewise. * modules/unicase/tolower: Likewise. * modules/unicase/totitle: Likewise. * modules/unicase/toupper: Likewise. * modules/unicase/u8-casecmp: Likewise. * modules/unicase/u8-casecoll: Likewise. * modules/unicase/u8-casefold: Likewise. * modules/unicase/u8-casexfrm: Likewise. * modules/unicase/u8-ct-casefold: Likewise. * modules/unicase/u8-ct-tolower: Likewise. * modules/unicase/u8-ct-totitle: Likewise. * modules/unicase/u8-ct-toupper: Likewise. * modules/unicase/u8-is-cased: Likewise. * modules/unicase/u8-is-casefolded: Likewise. * modules/unicase/u8-is-lowercase: Likewise. * modules/unicase/u8-is-titlecase: Likewise. * modules/unicase/u8-is-uppercase: Likewise. * modules/unicase/u8-prefix-context: Likewise. * modules/unicase/u8-suffix-context: Likewise. * modules/unicase/u8-tolower: Likewise. * modules/unicase/u8-totitle: Likewise. * modules/unicase/u8-toupper: Likewise. * modules/unicase/u16-casecmp: Likewise. * modules/unicase/u16-casecoll: Likewise. * modules/unicase/u16-casefold: Likewise. * modules/unicase/u16-casexfrm: Likewise. * modules/unicase/u16-ct-casefold: Likewise. * modules/unicase/u16-ct-tolower: Likewise. * modules/unicase/u16-ct-totitle: Likewise. * modules/unicase/u16-ct-toupper: Likewise. * modules/unicase/u16-is-cased: Likewise. * modules/unicase/u16-is-casefolded: Likewise. * modules/unicase/u16-is-lowercase: Likewise. * modules/unicase/u16-is-titlecase: Likewise. * modules/unicase/u16-is-uppercase: Likewise. * modules/unicase/u16-prefix-context: Likewise. * modules/unicase/u16-suffix-context: Likewise. * modules/unicase/u16-tolower: Likewise. * modules/unicase/u16-totitle: Likewise. * modules/unicase/u16-toupper: Likewise. * modules/unicase/u32-casecmp: Likewise. * modules/unicase/u32-casecoll: Likewise. * modules/unicase/u32-casefold: Likewise. * modules/unicase/u32-casexfrm: Likewise. * modules/unicase/u32-ct-casefold: Likewise. * modules/unicase/u32-ct-tolower: Likewise. * modules/unicase/u32-ct-totitle: Likewise. * modules/unicase/u32-ct-toupper: Likewise. * modules/unicase/u32-is-cased: Likewise. * modules/unicase/u32-is-casefolded: Likewise. * modules/unicase/u32-is-lowercase: Likewise. * modules/unicase/u32-is-titlecase: Likewise. * modules/unicase/u32-is-uppercase: Likewise. * modules/unicase/u32-prefix-context: Likewise. * modules/unicase/u32-suffix-context: Likewise. * modules/unicase/u32-tolower: Likewise. * modules/unicase/u32-totitle: Likewise. * modules/unicase/u32-toupper: Likewise. * modules/unicase/ulc-casecmp: Likewise. * modules/unicase/ulc-casecoll: Likewise. * modules/unicase/ulc-casexfrm: Likewise. * modules/uniconv/u8-conv-from-enc: Likewise. * modules/uniconv/u8-conv-to-enc: Likewise. * modules/uniconv/u8-strconv-from-enc: Likewise. * modules/uniconv/u8-strconv-from-locale: Likewise. * modules/uniconv/u8-strconv-to-enc: Likewise. * modules/uniconv/u8-strconv-to-locale: Likewise. * modules/uniconv/u16-conv-from-enc: Likewise. * modules/uniconv/u16-conv-to-enc: Likewise. * modules/uniconv/u16-strconv-from-enc: Likewise. * modules/uniconv/u16-strconv-from-locale: Likewise. * modules/uniconv/u16-strconv-to-enc: Likewise. * modules/uniconv/u16-strconv-to-locale: Likewise. * modules/uniconv/u32-conv-from-enc: Likewise. * modules/uniconv/u32-conv-to-enc: Likewise. * modules/uniconv/u32-strconv-from-enc: Likewise. * modules/uniconv/u32-strconv-from-locale: Likewise. * modules/uniconv/u32-strconv-to-enc: Likewise. * modules/uniconv/u32-strconv-to-locale: Likewise. * modules/unictype/bidicategory-byname: Likewise. * modules/unictype/bidicategory-name: Likewise. * modules/unictype/bidicategory-of: Likewise. * modules/unictype/bidicategory-test: Likewise. * modules/unictype/block-list: Likewise. * modules/unictype/block-test: Likewise. * modules/unictype/category-C: Likewise. * modules/unictype/category-Cc: Likewise. * modules/unictype/category-Cf: Likewise. * modules/unictype/category-Cn: Likewise. * modules/unictype/category-Co: Likewise. * modules/unictype/category-Cs: Likewise. * modules/unictype/category-L: Likewise. * modules/unictype/category-Ll: Likewise. * modules/unictype/category-Lm: Likewise. * modules/unictype/category-Lo: Likewise. * modules/unictype/category-Lt: Likewise. * modules/unictype/category-Lu: Likewise. * modules/unictype/category-M: Likewise. * modules/unictype/category-Mc: Likewise. * modules/unictype/category-Me: Likewise. * modules/unictype/category-Mn: Likewise. * modules/unictype/category-N: Likewise. * modules/unictype/category-Nd: Likewise. * modules/unictype/category-Nl: Likewise. * modules/unictype/category-No: Likewise. * modules/unictype/category-P: Likewise. * modules/unictype/category-Pc: Likewise. * modules/unictype/category-Pd: Likewise. * modules/unictype/category-Pe: Likewise. * modules/unictype/category-Pf: Likewise. * modules/unictype/category-Pi: Likewise. * modules/unictype/category-Po: Likewise. * modules/unictype/category-Ps: Likewise. * modules/unictype/category-S: Likewise. * modules/unictype/category-Sc: Likewise. * modules/unictype/category-Sk: Likewise. * modules/unictype/category-Sm: Likewise. * modules/unictype/category-So: Likewise. * modules/unictype/category-Z: Likewise. * modules/unictype/category-Zl: Likewise. * modules/unictype/category-Zp: Likewise. * modules/unictype/category-Zs: Likewise. * modules/unictype/category-and: Likewise. * modules/unictype/category-and-not: Likewise. * modules/unictype/category-byname: Likewise. * modules/unictype/category-name: Likewise. * modules/unictype/category-none: Likewise. * modules/unictype/category-of: Likewise. * modules/unictype/category-or: Likewise. * modules/unictype/category-test: Likewise. * modules/unictype/combining-class: Likewise. * modules/unictype/ctype-alnum: Likewise. * modules/unictype/ctype-alpha: Likewise. * modules/unictype/ctype-blank: Likewise. * modules/unictype/ctype-cntrl: Likewise. * modules/unictype/ctype-digit: Likewise. * modules/unictype/ctype-graph: Likewise. * modules/unictype/ctype-lower: Likewise. * modules/unictype/ctype-print: Likewise. * modules/unictype/ctype-punct: Likewise. * modules/unictype/ctype-space: Likewise. * modules/unictype/ctype-upper: Likewise. * modules/unictype/ctype-xdigit: Likewise. * modules/unictype/decimal-digit: Likewise. * modules/unictype/digit: Likewise. * modules/unictype/mirror: Likewise. * modules/unictype/numeric: Likewise. * modules/unictype/property-alphabetic: Likewise. * modules/unictype/property-ascii-hex-digit: Likewise. * modules/unictype/property-bidi-arabic-digit: Likewise. * modules/unictype/property-bidi-arabic-right-to-left: Likewise. * modules/unictype/property-bidi-block-separator: Likewise. * modules/unictype/property-bidi-boundary-neutral: Likewise. * modules/unictype/property-bidi-common-separator: Likewise. * modules/unictype/property-bidi-control: Likewise. * modules/unictype/property-bidi-embedding-or-override: Likewise. * modules/unictype/property-bidi-eur-num-separator: Likewise. * modules/unictype/property-bidi-eur-num-terminator: Likewise. * modules/unictype/property-bidi-european-digit: Likewise. * modules/unictype/property-bidi-hebrew-right-to-left: Likewise. * modules/unictype/property-bidi-left-to-right: Likewise. * modules/unictype/property-bidi-non-spacing-mark: Likewise. * modules/unictype/property-bidi-other-neutral: Likewise. * modules/unictype/property-bidi-pdf: Likewise. * modules/unictype/property-bidi-segment-separator: Likewise. * modules/unictype/property-bidi-whitespace: Likewise. * modules/unictype/property-byname: Likewise. * modules/unictype/property-combining: Likewise. * modules/unictype/property-composite: Likewise. * modules/unictype/property-currency-symbol: Likewise. * modules/unictype/property-dash: Likewise. * modules/unictype/property-decimal-digit: Likewise. * modules/unictype/property-default-ignorable-code-point: Likewise. * modules/unictype/property-deprecated: Likewise. * modules/unictype/property-diacritic: Likewise. * modules/unictype/property-extender: Likewise. * modules/unictype/property-format-control: Likewise. * modules/unictype/property-grapheme-base: Likewise. * modules/unictype/property-grapheme-extend: Likewise. * modules/unictype/property-grapheme-link: Likewise. * modules/unictype/property-hex-digit: Likewise. * modules/unictype/property-hyphen: Likewise. * modules/unictype/property-id-continue: Likewise. * modules/unictype/property-id-start: Likewise. * modules/unictype/property-ideographic: Likewise. * modules/unictype/property-ids-binary-operator: Likewise. * modules/unictype/property-ids-trinary-operator: Likewise. * modules/unictype/property-ignorable-control: Likewise. * modules/unictype/property-iso-control: Likewise. * modules/unictype/property-join-control: Likewise. * modules/unictype/property-left-of-pair: Likewise. * modules/unictype/property-line-separator: Likewise. * modules/unictype/property-logical-order-exception: Likewise. * modules/unictype/property-lowercase: Likewise. * modules/unictype/property-math: Likewise. * modules/unictype/property-non-break: Likewise. * modules/unictype/property-not-a-character: Likewise. * modules/unictype/property-numeric: Likewise. * modules/unictype/property-other-alphabetic: Likewise. * modules/unictype/property-other-default-ignorable-code-point: Likewise. * modules/unictype/property-other-grapheme-extend: Likewise. * modules/unictype/property-other-id-continue: Likewise. * modules/unictype/property-other-id-start: Likewise. * modules/unictype/property-other-lowercase: Likewise. * modules/unictype/property-other-math: Likewise. * modules/unictype/property-other-uppercase: Likewise. * modules/unictype/property-paired-punctuation: Likewise. * modules/unictype/property-paragraph-separator: Likewise. * modules/unictype/property-pattern-syntax: Likewise. * modules/unictype/property-pattern-white-space: Likewise. * modules/unictype/property-private-use: Likewise. * modules/unictype/property-punctuation: Likewise. * modules/unictype/property-quotation-mark: Likewise. * modules/unictype/property-radical: Likewise. * modules/unictype/property-sentence-terminal: Likewise. * modules/unictype/property-soft-dotted: Likewise. * modules/unictype/property-space: Likewise. * modules/unictype/property-terminal-punctuation: Likewise. * modules/unictype/property-test: Likewise. * modules/unictype/property-titlecase: Likewise. * modules/unictype/property-unassigned-code-value: Likewise. * modules/unictype/property-unified-ideograph: Likewise. * modules/unictype/property-uppercase: Likewise. * modules/unictype/property-variation-selector: Likewise. * modules/unictype/property-white-space: Likewise. * modules/unictype/property-xid-continue: Likewise. * modules/unictype/property-xid-start: Likewise. * modules/unictype/property-zero-width: Likewise. * modules/unictype/scripts: Likewise. * modules/unictype/syntax-c-ident: Likewise. * modules/unictype/syntax-c-whitespace: Likewise. * modules/unictype/syntax-java-ident: Likewise. * modules/unictype/syntax-java-whitespace: Likewise. * modules/unilbrk/u8-possible-linebreaks: Likewise. * modules/unilbrk/u8-width-linebreaks: Likewise. * modules/unilbrk/u16-possible-linebreaks: Likewise. * modules/unilbrk/u16-width-linebreaks: Likewise. * modules/unilbrk/u32-possible-linebreaks: Likewise. * modules/unilbrk/u32-width-linebreaks: Likewise. * modules/unilbrk/ulc-possible-linebreaks: Likewise. * modules/unilbrk/ulc-width-linebreaks: Likewise. * modules/uniname/uniname: Likewise. * modules/uninorm/canonical-decomposition: Likewise. * modules/uninorm/composition: Likewise. * modules/uninorm/decomposing-form: Likewise. * modules/uninorm/decomposition: Likewise. * modules/uninorm/filter: Likewise. * modules/uninorm/nfc: Likewise. * modules/uninorm/nfd: Likewise. * modules/uninorm/nfkc: Likewise. * modules/uninorm/nfkd: Likewise. * modules/uninorm/u8-normalize: Likewise. * modules/uninorm/u8-normcmp: Likewise. * modules/uninorm/u8-normcoll: Likewise. * modules/uninorm/u8-normxfrm: Likewise. * modules/uninorm/u16-normalize: Likewise. * modules/uninorm/u16-normcmp: Likewise. * modules/uninorm/u16-normcoll: Likewise. * modules/uninorm/u16-normxfrm: Likewise. * modules/uninorm/u32-normalize: Likewise. * modules/uninorm/u32-normcmp: Likewise. * modules/uninorm/u32-normcoll: Likewise. * modules/uninorm/u32-normxfrm: Likewise. * modules/unistdio/u8-asnprintf: Likewise. * modules/unistdio/u8-asprintf: Likewise. * modules/unistdio/u8-snprintf: Likewise. * modules/unistdio/u8-sprintf: Likewise. * modules/unistdio/u8-u8-asnprintf: Likewise. * modules/unistdio/u8-u8-asprintf: Likewise. * modules/unistdio/u8-u8-snprintf: Likewise. * modules/unistdio/u8-u8-sprintf: Likewise. * modules/unistdio/u8-u8-vasnprintf: Likewise. * modules/unistdio/u8-u8-vasprintf: Likewise. * modules/unistdio/u8-u8-vsnprintf: Likewise. * modules/unistdio/u8-u8-vsprintf: Likewise. * modules/unistdio/u8-vasnprintf: Likewise. * modules/unistdio/u8-vasprintf: Likewise. * modules/unistdio/u8-vsnprintf: Likewise. * modules/unistdio/u8-vsprintf: Likewise. * modules/unistdio/u16-asnprintf: Likewise. * modules/unistdio/u16-asprintf: Likewise. * modules/unistdio/u16-snprintf: Likewise. * modules/unistdio/u16-sprintf: Likewise. * modules/unistdio/u16-u16-asnprintf: Likewise. * modules/unistdio/u16-u16-asprintf: Likewise. * modules/unistdio/u16-u16-snprintf: Likewise. * modules/unistdio/u16-u16-sprintf: Likewise. * modules/unistdio/u16-u16-vasnprintf: Likewise. * modules/unistdio/u16-u16-vasprintf: Likewise. * modules/unistdio/u16-u16-vsnprintf: Likewise. * modules/unistdio/u16-u16-vsprintf: Likewise. * modules/unistdio/u16-vasnprintf: Likewise. * modules/unistdio/u16-vasprintf: Likewise. * modules/unistdio/u16-vsnprintf: Likewise. * modules/unistdio/u16-vsprintf: Likewise. * modules/unistdio/u32-asnprintf: Likewise. * modules/unistdio/u32-asprintf: Likewise. * modules/unistdio/u32-snprintf: Likewise. * modules/unistdio/u32-sprintf: Likewise. * modules/unistdio/u32-u32-asnprintf: Likewise. * modules/unistdio/u32-u32-asprintf: Likewise. * modules/unistdio/u32-u32-snprintf: Likewise. * modules/unistdio/u32-u32-sprintf: Likewise. * modules/unistdio/u32-u32-vasnprintf: Likewise. * modules/unistdio/u32-u32-vasprintf: Likewise. * modules/unistdio/u32-u32-vsnprintf: Likewise. * modules/unistdio/u32-u32-vsprintf: Likewise. * modules/unistdio/u32-vasnprintf: Likewise. * modules/unistdio/u32-vasprintf: Likewise. * modules/unistdio/u32-vsnprintf: Likewise. * modules/unistdio/u32-vsprintf: Likewise. * modules/unistdio/ulc-asnprintf: Likewise. * modules/unistdio/ulc-asprintf: Likewise. * modules/unistdio/ulc-fprintf: Likewise. * modules/unistdio/ulc-snprintf: Likewise. * modules/unistdio/ulc-sprintf: Likewise. * modules/unistdio/ulc-vasnprintf: Likewise. * modules/unistdio/ulc-vasprintf: Likewise. * modules/unistdio/ulc-vfprintf: Likewise. * modules/unistdio/ulc-vsnprintf: Likewise. * modules/unistdio/ulc-vsprintf: Likewise. * modules/unistr/u8-check: Likewise. * modules/unistr/u8-chr: Likewise. * modules/unistr/u8-cmp: Likewise. * modules/unistr/u8-cmp2: Likewise. * modules/unistr/u8-cpy: Likewise. * modules/unistr/u8-cpy-alloc: Likewise. * modules/unistr/u8-endswith: Likewise. * modules/unistr/u8-mblen: Likewise. * modules/unistr/u8-mbsnlen: Likewise. * modules/unistr/u8-mbtouc: Likewise. * modules/unistr/u8-mbtouc-unsafe: Likewise. * modules/unistr/u8-mbtoucr: Likewise. * modules/unistr/u8-move: Likewise. * modules/unistr/u8-next: Likewise. * modules/unistr/u8-prev: Likewise. * modules/unistr/u8-set: Likewise. * modules/unistr/u8-startswith: Likewise. * modules/unistr/u8-stpcpy: Likewise. * modules/unistr/u8-stpncpy: Likewise. * modules/unistr/u8-strcat: Likewise. * modules/unistr/u8-strchr: Likewise. * modules/unistr/u8-strcmp: Likewise. * modules/unistr/u8-strcoll: Likewise. * modules/unistr/u8-strcpy: Likewise. * modules/unistr/u8-strcspn: Likewise. * modules/unistr/u8-strdup: Likewise. * modules/unistr/u8-strlen: Likewise. * modules/unistr/u8-strmblen: Likewise. * modules/unistr/u8-strmbtouc: Likewise. * modules/unistr/u8-strncat: Likewise. * modules/unistr/u8-strncmp: Likewise. * modules/unistr/u8-strncpy: Likewise. * modules/unistr/u8-strnlen: Likewise. * modules/unistr/u8-strpbrk: Likewise. * modules/unistr/u8-strrchr: Likewise. * modules/unistr/u8-strspn: Likewise. * modules/unistr/u8-strstr: Likewise. * modules/unistr/u8-strtok: Likewise. * modules/unistr/u8-to-u16: Likewise. * modules/unistr/u8-to-u32: Likewise. * modules/unistr/u8-uctomb: Likewise. * modules/unistr/u16-check: Likewise. * modules/unistr/u16-chr: Likewise. * modules/unistr/u16-cmp: Likewise. * modules/unistr/u16-cmp2: Likewise. * modules/unistr/u16-cpy: Likewise. * modules/unistr/u16-cpy-alloc: Likewise. * modules/unistr/u16-endswith: Likewise. * modules/unistr/u16-mblen: Likewise. * modules/unistr/u16-mbsnlen: Likewise. * modules/unistr/u16-mbtouc: Likewise. * modules/unistr/u16-mbtouc-unsafe: Likewise. * modules/unistr/u16-mbtoucr: Likewise. * modules/unistr/u16-move: Likewise. * modules/unistr/u16-next: Likewise. * modules/unistr/u16-prev: Likewise. * modules/unistr/u16-set: Likewise. * modules/unistr/u16-startswith: Likewise. * modules/unistr/u16-stpcpy: Likewise. * modules/unistr/u16-stpncpy: Likewise. * modules/unistr/u16-strcat: Likewise. * modules/unistr/u16-strchr: Likewise. * modules/unistr/u16-strcmp: Likewise. * modules/unistr/u16-strcoll: Likewise. * modules/unistr/u16-strcpy: Likewise. * modules/unistr/u16-strcspn: Likewise. * modules/unistr/u16-strdup: Likewise. * modules/unistr/u16-strlen: Likewise. * modules/unistr/u16-strmblen: Likewise. * modules/unistr/u16-strmbtouc: Likewise. * modules/unistr/u16-strncat: Likewise. * modules/unistr/u16-strncmp: Likewise. * modules/unistr/u16-strncpy: Likewise. * modules/unistr/u16-strnlen: Likewise. * modules/unistr/u16-strpbrk: Likewise. * modules/unistr/u16-strrchr: Likewise. * modules/unistr/u16-strspn: Likewise. * modules/unistr/u16-strstr: Likewise. * modules/unistr/u16-strtok: Likewise. * modules/unistr/u16-to-u32: Likewise. * modules/unistr/u16-to-u8: Likewise. * modules/unistr/u16-uctomb: Likewise. * modules/unistr/u32-check: Likewise. * modules/unistr/u32-chr: Likewise. * modules/unistr/u32-cmp: Likewise. * modules/unistr/u32-cmp2: Likewise. * modules/unistr/u32-cpy: Likewise. * modules/unistr/u32-cpy-alloc: Likewise. * modules/unistr/u32-endswith: Likewise. * modules/unistr/u32-mblen: Likewise. * modules/unistr/u32-mbsnlen: Likewise. * modules/unistr/u32-mbtouc: Likewise. * modules/unistr/u32-mbtouc-unsafe: Likewise. * modules/unistr/u32-mbtoucr: Likewise. * modules/unistr/u32-move: Likewise. * modules/unistr/u32-next: Likewise. * modules/unistr/u32-prev: Likewise. * modules/unistr/u32-set: Likewise. * modules/unistr/u32-startswith: Likewise. * modules/unistr/u32-stpcpy: Likewise. * modules/unistr/u32-stpncpy: Likewise. * modules/unistr/u32-strcat: Likewise. * modules/unistr/u32-strchr: Likewise. * modules/unistr/u32-strcmp: Likewise. * modules/unistr/u32-strcoll: Likewise. * modules/unistr/u32-strcpy: Likewise. * modules/unistr/u32-strcspn: Likewise. * modules/unistr/u32-strdup: Likewise. * modules/unistr/u32-strlen: Likewise. * modules/unistr/u32-strmblen: Likewise. * modules/unistr/u32-strmbtouc: Likewise. * modules/unistr/u32-strncat: Likewise. * modules/unistr/u32-strncmp: Likewise. * modules/unistr/u32-strncpy: Likewise. * modules/unistr/u32-strnlen: Likewise. * modules/unistr/u32-strpbrk: Likewise. * modules/unistr/u32-strrchr: Likewise. * modules/unistr/u32-strspn: Likewise. * modules/unistr/u32-strstr: Likewise. * modules/unistr/u32-strtok: Likewise. * modules/unistr/u32-to-u16: Likewise. * modules/unistr/u32-to-u8: Likewise. * modules/unistr/u32-uctomb: Likewise. * modules/uniwbrk/u8-wordbreaks: Likewise. * modules/uniwbrk/u16-wordbreaks: Likewise. * modules/uniwbrk/u32-wordbreaks: Likewise. * modules/uniwbrk/ulc-wordbreaks: Likewise. * modules/uniwbrk/wordbreak-property: Likewise. * modules/uniwidth/u8-strwidth: Likewise. * modules/uniwidth/u8-width: Likewise. * modules/uniwidth/u16-strwidth: Likewise. * modules/uniwidth/u16-width: Likewise. * modules/uniwidth/u32-strwidth: Likewise. * modules/uniwidth/u32-width: Likewise. * modules/uniwidth/width: Likewise. * modules/unicase/cased-tests (Makefile.am): Link all test programs with $(LIBUNISTRING). * modules/unicase/ignorable-tests: Likewise. * modules/unicase/locale-language-tests: Likewise. * modules/unicase/tolower-tests: Likewise. * modules/unicase/totitle-tests: Likewise. * modules/unicase/toupper-tests: Likewise. * modules/unicase/u8-casecmp-tests: Likewise. * modules/unicase/u8-casecoll-tests: Likewise. * modules/unicase/u8-casefold-tests: Likewise. * modules/unicase/u8-is-cased-tests: Likewise. * modules/unicase/u8-is-casefolded-tests: Likewise. * modules/unicase/u8-is-lowercase-tests: Likewise. * modules/unicase/u8-is-titlecase-tests: Likewise. * modules/unicase/u8-is-uppercase-tests: Likewise. * modules/unicase/u8-tolower-tests: Likewise. * modules/unicase/u8-totitle-tests: Likewise. * modules/unicase/u8-toupper-tests: Likewise. * modules/unicase/u16-casecmp-tests: Likewise. * modules/unicase/u16-casecoll-tests: Likewise. * modules/unicase/u16-casefold-tests: Likewise. * modules/unicase/u16-is-cased-tests: Likewise. * modules/unicase/u16-is-casefolded-tests: Likewise. * modules/unicase/u16-is-lowercase-tests: Likewise. * modules/unicase/u16-is-titlecase-tests: Likewise. * modules/unicase/u16-is-uppercase-tests: Likewise. * modules/unicase/u16-tolower-tests: Likewise. * modules/unicase/u16-totitle-tests: Likewise. * modules/unicase/u16-toupper-tests: Likewise. * modules/unicase/u32-casecmp-tests: Likewise. * modules/unicase/u32-casecoll-tests: Likewise. * modules/unicase/u32-casefold-tests: Likewise. * modules/unicase/u32-is-cased-tests: Likewise. * modules/unicase/u32-is-casefolded-tests: Likewise. * modules/unicase/u32-is-lowercase-tests: Likewise. * modules/unicase/u32-is-titlecase-tests: Likewise. * modules/unicase/u32-is-uppercase-tests: Likewise. * modules/unicase/u32-tolower-tests: Likewise. * modules/unicase/u32-totitle-tests: Likewise. * modules/unicase/u32-toupper-tests: Likewise. * modules/unicase/ulc-casecmp-tests: Likewise. * modules/unicase/ulc-casecoll-tests: Likewise. * modules/uniconv/u8-conv-from-enc-tests: Likewise. * modules/uniconv/u8-conv-to-enc-tests: Likewise. * modules/uniconv/u8-strconv-from-enc-tests: Likewise. * modules/uniconv/u8-strconv-to-enc-tests: Likewise. * modules/uniconv/u16-conv-from-enc-tests: Likewise. * modules/uniconv/u16-conv-to-enc-tests: Likewise. * modules/uniconv/u16-strconv-from-enc-tests: Likewise. * modules/uniconv/u16-strconv-to-enc-tests: Likewise. * modules/uniconv/u32-conv-from-enc-tests: Likewise. * modules/uniconv/u32-conv-to-enc-tests: Likewise. * modules/uniconv/u32-strconv-from-enc-tests: Likewise. * modules/uniconv/u32-strconv-to-enc-tests: Likewise. * modules/unictype/bidicategory-byname-tests: Likewise. * modules/unictype/bidicategory-name-tests: Likewise. * modules/unictype/bidicategory-of-tests: Likewise. * modules/unictype/bidicategory-test-tests: Likewise. * modules/unictype/block-list-tests: Likewise. * modules/unictype/block-of-tests: Likewise. * modules/unictype/block-test-tests: Likewise. * modules/unictype/category-C-tests: Likewise. * modules/unictype/category-Cc-tests: Likewise. * modules/unictype/category-Cf-tests: Likewise. * modules/unictype/category-Cn-tests: Likewise. * modules/unictype/category-Co-tests: Likewise. * modules/unictype/category-Cs-tests: Likewise. * modules/unictype/category-L-tests: Likewise. * modules/unictype/category-Ll-tests: Likewise. * modules/unictype/category-Lm-tests: Likewise. * modules/unictype/category-Lo-tests: Likewise. * modules/unictype/category-Lt-tests: Likewise. * modules/unictype/category-Lu-tests: Likewise. * modules/unictype/category-M-tests: Likewise. * modules/unictype/category-Mc-tests: Likewise. * modules/unictype/category-Me-tests: Likewise. * modules/unictype/category-Mn-tests: Likewise. * modules/unictype/category-N-tests: Likewise. * modules/unictype/category-Nd-tests: Likewise. * modules/unictype/category-Nl-tests: Likewise. * modules/unictype/category-No-tests: Likewise. * modules/unictype/category-P-tests: Likewise. * modules/unictype/category-Pc-tests: Likewise. * modules/unictype/category-Pd-tests: Likewise. * modules/unictype/category-Pe-tests: Likewise. * modules/unictype/category-Pf-tests: Likewise. * modules/unictype/category-Pi-tests: Likewise. * modules/unictype/category-Po-tests: Likewise. * modules/unictype/category-Ps-tests: Likewise. * modules/unictype/category-S-tests: Likewise. * modules/unictype/category-Sc-tests: Likewise. * modules/unictype/category-Sk-tests: Likewise. * modules/unictype/category-Sm-tests: Likewise. * modules/unictype/category-So-tests: Likewise. * modules/unictype/category-Z-tests: Likewise. * modules/unictype/category-Zl-tests: Likewise. * modules/unictype/category-Zp-tests: Likewise. * modules/unictype/category-Zs-tests: Likewise. * modules/unictype/category-and-not-tests: Likewise. * modules/unictype/category-and-tests: Likewise. * modules/unictype/category-byname-tests: Likewise. * modules/unictype/category-name-tests: Likewise. * modules/unictype/category-none-tests: Likewise. * modules/unictype/category-of-tests: Likewise. * modules/unictype/category-or-tests: Likewise. * modules/unictype/category-test-withtable-tests: Likewise. * modules/unictype/combining-class-tests: Likewise. * modules/unictype/ctype-alnum-tests: Likewise. * modules/unictype/ctype-alpha-tests: Likewise. * modules/unictype/ctype-blank-tests: Likewise. * modules/unictype/ctype-cntrl-tests: Likewise. * modules/unictype/ctype-digit-tests: Likewise. * modules/unictype/ctype-graph-tests: Likewise. * modules/unictype/ctype-lower-tests: Likewise. * modules/unictype/ctype-print-tests: Likewise. * modules/unictype/ctype-punct-tests: Likewise. * modules/unictype/ctype-space-tests: Likewise. * modules/unictype/ctype-upper-tests: Likewise. * modules/unictype/ctype-xdigit-tests: Likewise. * modules/unictype/decimal-digit-tests: Likewise. * modules/unictype/digit-tests: Likewise. * modules/unictype/mirror-tests: Likewise. * modules/unictype/numeric-tests: Likewise. * modules/unictype/property-alphabetic-tests: Likewise. * modules/unictype/property-ascii-hex-digit-tests: Likewise. * modules/unictype/property-bidi-arabic-digit-tests: Likewise. * modules/unictype/property-bidi-arabic-right-to-left-tests: Likewise. * modules/unictype/property-bidi-block-separator-tests: Likewise. * modules/unictype/property-bidi-boundary-neutral-tests: Likewise. * modules/unictype/property-bidi-common-separator-tests: Likewise. * modules/unictype/property-bidi-control-tests: Likewise. * modules/unictype/property-bidi-embedding-or-override-tests: Likewise. * modules/unictype/property-bidi-eur-num-separator-tests: Likewise. * modules/unictype/property-bidi-eur-num-terminator-tests: Likewise. * modules/unictype/property-bidi-european-digit-tests: Likewise. * modules/unictype/property-bidi-hebrew-right-to-left-tests: Likewise. * modules/unictype/property-bidi-left-to-right-tests: Likewise. * modules/unictype/property-bidi-non-spacing-mark-tests: Likewise. * modules/unictype/property-bidi-other-neutral-tests: Likewise. * modules/unictype/property-bidi-pdf-tests: Likewise. * modules/unictype/property-bidi-segment-separator-tests: Likewise. * modules/unictype/property-bidi-whitespace-tests: Likewise. * modules/unictype/property-byname-tests: Likewise. * modules/unictype/property-combining-tests: Likewise. * modules/unictype/property-composite-tests: Likewise. * modules/unictype/property-currency-symbol-tests: Likewise. * modules/unictype/property-dash-tests: Likewise. * modules/unictype/property-decimal-digit-tests: Likewise. * modules/unictype/property-default-ignorable-code-point-tests: Likewise. * modules/unictype/property-deprecated-tests: Likewise. * modules/unictype/property-diacritic-tests: Likewise. * modules/unictype/property-extender-tests: Likewise. * modules/unictype/property-format-control-tests: Likewise. * modules/unictype/property-grapheme-base-tests: Likewise. * modules/unictype/property-grapheme-extend-tests: Likewise. * modules/unictype/property-grapheme-link-tests: Likewise. * modules/unictype/property-hex-digit-tests: Likewise. * modules/unictype/property-hyphen-tests: Likewise. * modules/unictype/property-id-continue-tests: Likewise. * modules/unictype/property-id-start-tests: Likewise. * modules/unictype/property-ideographic-tests: Likewise. * modules/unictype/property-ids-binary-operator-tests: Likewise. * modules/unictype/property-ids-trinary-operator-tests: Likewise. * modules/unictype/property-ignorable-control-tests: Likewise. * modules/unictype/property-iso-control-tests: Likewise. * modules/unictype/property-join-control-tests: Likewise. * modules/unictype/property-left-of-pair-tests: Likewise. * modules/unictype/property-line-separator-tests: Likewise. * modules/unictype/property-logical-order-exception-tests: Likewise. * modules/unictype/property-lowercase-tests: Likewise. * modules/unictype/property-math-tests: Likewise. * modules/unictype/property-non-break-tests: Likewise. * modules/unictype/property-not-a-character-tests: Likewise. * modules/unictype/property-numeric-tests: Likewise. * modules/unictype/property-other-alphabetic-tests: Likewise. * modules/unictype/property-other-default-ignorable-code-point-tests: Likewise. * modules/unictype/property-other-grapheme-extend-tests: Likewise. * modules/unictype/property-other-id-continue-tests: Likewise. * modules/unictype/property-other-id-start-tests: Likewise. * modules/unictype/property-other-lowercase-tests: Likewise. * modules/unictype/property-other-math-tests: Likewise. * modules/unictype/property-other-uppercase-tests: Likewise. * modules/unictype/property-paired-punctuation-tests: Likewise. * modules/unictype/property-paragraph-separator-tests: Likewise. * modules/unictype/property-pattern-syntax-tests: Likewise. * modules/unictype/property-pattern-white-space-tests: Likewise. * modules/unictype/property-private-use-tests: Likewise. * modules/unictype/property-punctuation-tests: Likewise. * modules/unictype/property-quotation-mark-tests: Likewise. * modules/unictype/property-radical-tests: Likewise. * modules/unictype/property-sentence-terminal-tests: Likewise. * modules/unictype/property-soft-dotted-tests: Likewise. * modules/unictype/property-space-tests: Likewise. * modules/unictype/property-terminal-punctuation-tests: Likewise. * modules/unictype/property-test-tests: Likewise. * modules/unictype/property-titlecase-tests: Likewise. * modules/unictype/property-unassigned-code-value-tests: Likewise. * modules/unictype/property-unified-ideograph-tests: Likewise. * modules/unictype/property-uppercase-tests: Likewise. * modules/unictype/property-variation-selector-tests: Likewise. * modules/unictype/property-white-space-tests: Likewise. * modules/unictype/property-xid-continue-tests: Likewise. * modules/unictype/property-xid-start-tests: Likewise. * modules/unictype/property-zero-width-tests: Likewise. * modules/unictype/scripts-tests: Likewise. * modules/unictype/syntax-c-ident-tests: Likewise. * modules/unictype/syntax-c-whitespace-tests: Likewise. * modules/unictype/syntax-java-ident-tests: Likewise. * modules/unictype/syntax-java-whitespace-tests: Likewise. * modules/unilbrk/u8-possible-linebreaks-tests: Likewise. * modules/unilbrk/u8-width-linebreaks-tests: Likewise. * modules/unilbrk/u16-possible-linebreaks-tests: Likewise. * modules/unilbrk/u16-width-linebreaks-tests: Likewise. * modules/unilbrk/u32-possible-linebreaks-tests: Likewise. * modules/unilbrk/u32-width-linebreaks-tests: Likewise. * modules/unilbrk/ulc-possible-linebreaks-tests: Likewise. * modules/unilbrk/ulc-width-linebreaks-tests: Likewise. * modules/uniname/uniname-tests: Likewise. * modules/uninorm/canonical-decomposition-tests: Likewise. * modules/uninorm/compat-decomposition-tests: Likewise. * modules/uninorm/composition-tests: Likewise. * modules/uninorm/decomposing-form-tests: Likewise. * modules/uninorm/decomposition-tests: Likewise. * modules/uninorm/filter-tests: Likewise. * modules/uninorm/nfc-tests: Likewise. * modules/uninorm/nfd-tests: Likewise. * modules/uninorm/nfkc-tests: Likewise. * modules/uninorm/nfkd-tests: Likewise. * modules/uninorm/u8-normcmp-tests: Likewise. * modules/uninorm/u8-normcoll-tests: Likewise. * modules/uninorm/u16-normcmp-tests: Likewise. * modules/uninorm/u16-normcoll-tests: Likewise. * modules/uninorm/u32-normcmp-tests: Likewise. * modules/uninorm/u32-normcoll-tests: Likewise. * modules/unistdio/u8-asnprintf-tests: Likewise. * modules/unistdio/u8-vasnprintf-tests: Likewise. * modules/unistdio/u8-vasprintf-tests: Likewise. * modules/unistdio/u8-vsnprintf-tests: Likewise. * modules/unistdio/u8-vsprintf-tests: Likewise. * modules/unistdio/u16-asnprintf-tests: Likewise. * modules/unistdio/u16-vasnprintf-tests: Likewise. * modules/unistdio/u16-vasprintf-tests: Likewise. * modules/unistdio/u16-vsnprintf-tests: Likewise. * modules/unistdio/u16-vsprintf-tests: Likewise. * modules/unistdio/u32-asnprintf-tests: Likewise. * modules/unistdio/u32-vasnprintf-tests: Likewise. * modules/unistdio/u32-vasprintf-tests: Likewise. * modules/unistdio/u32-vsnprintf-tests: Likewise. * modules/unistdio/u32-vsprintf-tests: Likewise. * modules/unistdio/ulc-asnprintf-tests: Likewise. * modules/unistdio/ulc-vasnprintf-tests: Likewise. * modules/unistdio/ulc-vasprintf-tests: Likewise. * modules/unistdio/ulc-vsnprintf-tests: Likewise. * modules/unistdio/ulc-vsprintf-tests: Likewise. * modules/unistr/u8-check-tests: Likewise. * modules/unistr/u8-chr-tests: Likewise. * modules/unistr/u8-cmp-tests: Likewise. * modules/unistr/u8-cmp2-tests: Likewise. * modules/unistr/u8-cpy-alloc-tests: Likewise. * modules/unistr/u8-cpy-tests: Likewise. * modules/unistr/u8-mblen-tests: Likewise. * modules/unistr/u8-mbsnlen-tests: Likewise. * modules/unistr/u8-mbtouc-tests: Likewise. * modules/unistr/u8-mbtouc-unsafe-tests: Likewise. * modules/unistr/u8-mbtoucr-tests: Likewise. * modules/unistr/u8-move-tests: Likewise. * modules/unistr/u8-next-tests: Likewise. * modules/unistr/u8-prev-tests: Likewise. * modules/unistr/u8-set-tests: Likewise. * modules/unistr/u8-stpcpy-tests: Likewise. * modules/unistr/u8-stpncpy-tests: Likewise. * modules/unistr/u8-strcat-tests: Likewise. * modules/unistr/u8-strcmp-tests: Likewise. * modules/unistr/u8-strcoll-tests: Likewise. * modules/unistr/u8-strcpy-tests: Likewise. * modules/unistr/u8-strdup-tests: Likewise. * modules/unistr/u8-strlen-tests: Likewise. * modules/unistr/u8-strmblen-tests: Likewise. * modules/unistr/u8-strmbtouc-tests: Likewise. * modules/unistr/u8-strncat-tests: Likewise. * modules/unistr/u8-strncmp-tests: Likewise. * modules/unistr/u8-strncpy-tests: Likewise. * modules/unistr/u8-strnlen-tests: Likewise. * modules/unistr/u8-to-u16-tests: Likewise. * modules/unistr/u8-to-u32-tests: Likewise. * modules/unistr/u8-uctomb-tests: Likewise. * modules/unistr/u16-check-tests: Likewise. * modules/unistr/u16-chr-tests: Likewise. * modules/unistr/u16-cmp-tests: Likewise. * modules/unistr/u16-cmp2-tests: Likewise. * modules/unistr/u16-cpy-alloc-tests: Likewise. * modules/unistr/u16-cpy-tests: Likewise. * modules/unistr/u16-mblen-tests: Likewise. * modules/unistr/u16-mbsnlen-tests: Likewise. * modules/unistr/u16-mbtouc-tests: Likewise. * modules/unistr/u16-mbtouc-unsafe-tests: Likewise. * modules/unistr/u16-mbtoucr-tests: Likewise. * modules/unistr/u16-move-tests: Likewise. * modules/unistr/u16-next-tests: Likewise. * modules/unistr/u16-prev-tests: Likewise. * modules/unistr/u16-set-tests: Likewise. * modules/unistr/u16-stpcpy-tests: Likewise. * modules/unistr/u16-stpncpy-tests: Likewise. * modules/unistr/u16-strcat-tests: Likewise. * modules/unistr/u16-strcmp-tests: Likewise. * modules/unistr/u16-strcoll-tests: Likewise. * modules/unistr/u16-strcpy-tests: Likewise. * modules/unistr/u16-strdup-tests: Likewise. * modules/unistr/u16-strlen-tests: Likewise. * modules/unistr/u16-strmblen-tests: Likewise. * modules/unistr/u16-strmbtouc-tests: Likewise. * modules/unistr/u16-strncat-tests: Likewise. * modules/unistr/u16-strncmp-tests: Likewise. * modules/unistr/u16-strncpy-tests: Likewise. * modules/unistr/u16-strnlen-tests: Likewise. * modules/unistr/u16-to-u32-tests: Likewise. * modules/unistr/u16-to-u8-tests: Likewise. * modules/unistr/u16-uctomb-tests: Likewise. * modules/unistr/u32-check-tests: Likewise. * modules/unistr/u32-chr-tests: Likewise. * modules/unistr/u32-cmp-tests: Likewise. * modules/unistr/u32-cmp2-tests: Likewise. * modules/unistr/u32-cpy-alloc-tests: Likewise. * modules/unistr/u32-cpy-tests: Likewise. * modules/unistr/u32-mblen-tests: Likewise. * modules/unistr/u32-mbsnlen-tests: Likewise. * modules/unistr/u32-mbtouc-tests: Likewise. * modules/unistr/u32-mbtouc-unsafe-tests: Likewise. * modules/unistr/u32-mbtoucr-tests: Likewise. * modules/unistr/u32-move-tests: Likewise. * modules/unistr/u32-next-tests: Likewise. * modules/unistr/u32-prev-tests: Likewise. * modules/unistr/u32-set-tests: Likewise. * modules/unistr/u32-stpcpy-tests: Likewise. * modules/unistr/u32-stpncpy-tests: Likewise. * modules/unistr/u32-strcat-tests: Likewise. * modules/unistr/u32-strcmp-tests: Likewise. * modules/unistr/u32-strcoll-tests: Likewise. * modules/unistr/u32-strcpy-tests: Likewise. * modules/unistr/u32-strdup-tests: Likewise. * modules/unistr/u32-strlen-tests: Likewise. * modules/unistr/u32-strmblen-tests: Likewise. * modules/unistr/u32-strmbtouc-tests: Likewise. * modules/unistr/u32-strncat-tests: Likewise. * modules/unistr/u32-strncmp-tests: Likewise. * modules/unistr/u32-strncpy-tests: Likewise. * modules/unistr/u32-strnlen-tests: Likewise. * modules/unistr/u32-to-u16-tests: Likewise. * modules/unistr/u32-to-u8-tests: Likewise. * modules/unistr/u32-uctomb-tests: Likewise. * modules/uniwbrk/u8-wordbreaks-tests: Likewise. * modules/uniwbrk/u16-wordbreaks-tests: Likewise. * modules/uniwbrk/u32-wordbreaks-tests: Likewise. * modules/uniwbrk/ulc-wordbreaks-tests: Likewise. * modules/uniwidth/u8-strwidth-tests: Likewise. * modules/uniwidth/u8-width-tests: Likewise. * modules/uniwidth/u16-strwidth-tests: Likewise. * modules/uniwidth/u16-width-tests: Likewise. * modules/uniwidth/u32-strwidth-tests: Likewise. * modules/uniwidth/u32-width-tests: Likewise. * modules/uniwidth/width-tests: Likewise. 2010-05-18 Richard Jones doc: users.txt: list hivex * users.txt: Add hivex. 2010-05-18 Richard Jones doc: users.txt: list febootstrap * users.txt: Add febootstrap. 2010-05-17 Giuseppe Scrivano bootstrap: fix an error when gnulib is not used as a git submodule * build-aux/bootstrap (gnulib_path): If its length is zero then assign "gnulib" to it. * build-aux/bootstrap: Redirect "git clone -h" stderr to stdout. 2010-05-16 Bruno Haible Avoid autoconf warnings about AM_ICONV. * m4/iconv.m4 (AM_ICONV): Define using AC_DEFUN_ONCE for autoconf >= 2.64. 2010-05-16 Bruno Haible absolute-header: Make the macro usable in more situations. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER_ONE): New macro, extracted from gl_ABSOLUTE_HEADER. (gl_ABSOLUTE_HEADER): Use it. Fix comment. 2010-05-16 James Youngman doc: update users.txt * users.txt: Add CSSC. 2010-05-16 Jim Meyering init.sh: fix an error in the previous change; add more comments * tests/init.sh: Compare exit code in loop against 9, not 2. Patch by Bruno Haible. Make the two tests more similar by adding an empty "then" clause. Add comments. init.sh: avoid unnecessary shell re-exec * tests/init.sh: Improve the re-exec-required check to first test the current shell. If it passes the test, do not search for a shell that does pass, and do not re-exec. This test is particularly contorted to avoid triggering misbehavior in Solaris 10's /bin/sh whereby any use of $(...) evokes a syntax error and causes immediate shell exit with status 2. Bruno Haible reported that the re-exec made it impossible to single-step through any init.sh-using script. 2010-05-16 Bruno Haible Fix collision between gnulib's and libintl's printf replacements. * lib/stdio.in.h (_GL_STDIO_STRINGIZE, _GL_STDIO_MACROEXPAND_AND_STRINGIZE): New macros. (printf): When using GNU C, map the __printf__ function to rpl_printf via __asm__. When not using GNU C, define rpl_printf instead of __printf__. * lib/printf.c: Ignore DEPENDS_ON_LIBINTL. Undoes the 2010-03-25 commit. * lib/stdio-write.c: Ignore DEPENDS_ON_LIBINTL. Undoes the 2009-08-10 commit. * m4/asm-underscore.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H): Require gl_ASM_SYMBOL_PREFIX. * modules/stdio (Files): Add m4/asm-underscore.m4. (Makefile.am): Substitute ASM_SYMBOL_PREFIX. Reported by Ben Pfaff. 2010-05-16 Bruno Haible verify: Avoid skipping the test on openSUSE 11.0. * tests/test-verify.sh: Unset MALLOC_PERTURB_. 2010-05-13 Bruno Haible Avoid useless warnings from G++. * build-aux/c++defs.h (_GL_CXXALIASWARN_2, _GL_CXXALIASWARN1_2): Don't use _GL_WARN_ON_USE or _GL_WARN_ON_USE_CXX when optimizing. Reported by Jarno Rajahalme . 2010-05-11 Jim Meyering maint.mk: tweak preceding change * top/maint.mk (gl_extract_significant_defines_): Make exclusion regexps tighter by anchoring at EOL, and make the new group "shy" for slightly decreased overhead. 2010-05-11 Eric Blake maint.mk: gnulib doesn't guarantee NSIG * top/maint.mk (gl_extract_significant_defines_): Exclude NSIG. 2010-05-10 Peter O'Gorman test-pwrite.c: Remove unused variable declaration. * tests/test-pwrite.c (main): Remove read_buf declaration. Remove useless test-pwrite.sh file. * tests/test-pwrite.sh: Delete file. * modules/pwrite-tests: Remove references. Reported by Bruno Haible. 2010-05-10 Peter O'Gorman init.sh: fix a typo * tests/init.sh: Correct typo in MALLOC_PERTURB_ initialization. 2010-05-10 Jim Meyering maint.mk: avoid using a temporary file in the always-defined-macros check * top/maint.mk (.re-defmac): Remove rule. (gl_trap_): Remove definition. (sc_prohibit_always-defined_macros): Rewrite not to create and depend on a temporary file. Instead, depend on GNU grep's ability to read a list of regular expressions from stdin when given "-f -". 2010-05-09 Bruno Haible Update to GNU gettext 0.18, part 1. * m4/gettext.m4: Update to GNU gettext 0.18. * m4/intl.m4: Likewise. * m4/po.m4: Likewise. * modules/gettext (Files): Add m4/fcntl-o.m4. (configure.ac): Require gettext infrastructure from version 0.18. 2010-05-09 Jim Meyering init.sh: enable MALLOC_PERTURB_ * tests/init.sh: Enable glibc's malloc-perturbing option. maint.mk: improve sc_cross_check_PATH_usage_in_tests With my recent change in init.sh from the two-line form: -# : ${srcdir=.} -# . "$srcdir/init.sh"; path_prepend_ . +# . "${srcdir=.}/init.sh"; path_prepend_ . I noticed that using the one-line form would cause this test to fail with a false-positive, or to stop working altogether, depending on whether help-version changed or all the tests did. * top/maint.mk (_hv_regex): Remove this definition. (_hv_regex_weak): Use a weak regex to select all init.sh-sourcing files. (_hv_regex_strong): Use a stronger regex to check for conformance. (sc_cross_check_PATH_usage_in_tests): Rewrite to use the above. Give a separate diagnostic for lack of conforming use. maint.mk: prohibit definition of symbols defined by gnulib * top/maint.mk (sc_prohibit_always-defined_macros): Reject the definition of symbols defined by gnulib. 2010-05-09 Bruno Haible acl: Avoid test failure on Cygwin-hosted mingw. * tests/test-set-mode-acl.sh: Skip test if USE_ACL is 0. 2010-05-09 Bruno Haible error: Use system's fcntl function. * lib/error.c (fcntl): Undefine. 2010-05-09 Jim Meyering verify: adjust formatting to be more consistent * lib/verify.h (_GL_GENSYM): Add a space before each of a few argument-list '('s, and after one comma. 2010-05-09 Bruno Haible error: More reliable output on mingw. * lib/error.c: Include . (is_open): New function. (flush_stdout): Call it instead of fcntl, also if F_GETFL is not defined. 2010-05-09 Bruno Haible vasnprintf: Fix syntax errors in libintl build on mingw. * lib/vasnprintf.c (VASNPRINTF): Move a closing brace. Undefine pad_ourselves and prec_ourselves after use. 2010-05-08 Bruno Haible * lib/config.charset: Update comments for Cygwin 1.7. * lib/localcharset.c: Likewise. 2010-05-07 Jim Meyering init.sh: improve comments * tests/init.sh: Recommend the one-line init.sh-sourcing idiom: . "${srcdir=.}/init.sh"; path_prepend_ . Add a note about path_prepend_ and the alternative of using TESTS_ENVIRONMENT. 2010-05-06 Sergey Poznyakoff exclude: Unescape hashed patterns in wildcard mode. * lib/exclude.c (add_exclude): Unescape the pattern before adding it to the hash list. * tests/test-exclude8.sh: New test case. * modules/exclude-tests: Add new test. 2010-05-05 Eric Blake verify: automate tests * modules/verify-tests: New module. * tests/test-verify.sh: New file. * tests/test-verify.c: Guard each negative test with a unique id. Also avoid warning about unused left hand of comma expressions. 2010-05-05 Paul Eggert Further improvements to verify.h, suggested by Eric Blake. * lib/verify.h (_GL_CONCAT, _GL_CONCAT0, _GL_GENSYM): Renamed from the GL_* versions, to avoid collision with OpenGL. (_GL_COUNTER): New macro, so that we can fall back on __LINE__ if __COUNTER__ doesn't work. Test that __COUNTER__ increments rather than testing merely whether it's defined. Modify verify.h to pacify gcc -Wredundant_decls. * lib/verify.h (GL_CONCAT, GL_CONCAT0, GL_GENSYM): New macros. These use the prefix "GL_" since they're likely to be useful elsewhere. We may need to break them out into a different .h file. (__COUNTER__): Define to 0 if the compiler doesn't support it. (verify) [!defined __cplusplus]: Use them to avoid duplicate decls of verify_function__. 2010-05-05 Peter O'Gorman Tests for module pwrite. * modules/pwrite-tests: New file. * tests/test-pwrite.sh: New file. * tests/test-pwrite.c: New file. New module pwrite. * lib/unistd.in.h (pwrite): New declaration. * lib/pwrite.c: New file, from glibc with modifications. * m4/pwrite.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H): Test whether pwrite is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_PWRITE, HAVE_PWRITE, REPLACE_PWRITE. * modules/pwrite: New file. * modules/unistd (Makefile.am): Substitute GNULIB_PWRITE, HAVE_PWRITE, REPLACE_PWRITE. * tests/test-unistd-c++.cc: Check GNULIB_NAMESPACE::pwrite. * doc/posix-functions/pwrite.texi: Mention the new module. 2010-05-05 Peter O'Gorman pread: Update documentation. * doc/posix-functions/pread.texi: Mention the 'pread' module. 2010-05-04 Eric Blake docs: update cygwin progress * doc/posix-functions/wctob.texi (wctob): Cygwin 1.7.6 will fix this bug. * doc/glibc-functions/get_nprocs_conf.texi (get_nprocs_conf): Added in cygwin 1.7.2. * doc/glibc-functions/get_phys_pages.texi (get_phys_pages): Likewise. * doc/glibc-functions/get_avphys_pages.texi (get_avphys_pages): Likewise. * doc/glibc-functions/dup3.texi (dup3): Likewise. * doc/glibc-functions/pipe2.texi (pipe2): Likewise. * doc/glibc-functions/accept4.texi (accept4): Likewise. * doc/posix-functions/strfmon.texi (strfmon): Likewise. * doc/glibc-functions/get_nprocs.texi (get_nprocs): Likewise. Mention nproc module. * doc/glibc-functions/xdr_uint16_t.texi (xdr_uint16_t): Mention bug in cygwin 1.7.5 addition. * doc/glibc-functions/xdr_uint32_t.texi (xdr_uint32_t): Likewise. * doc/glibc-functions/xdr_uint64_t.texi (xdr_uint64_t): Likewise. * doc/glibc-functions/xdr_uint8_t.texi (xdr_uint8_t): Likewise. * doc/glibc-functions/xdr_array.texi (xdr_array): Added in cygwin 1.7.5. * doc/glibc-functions/xdr_bool.texi (xdr_bool): Likewise. * doc/glibc-functions/xdr_bytes.texi (xdr_bytes): Likewise. * doc/glibc-functions/xdr_char.texi (xdr_char): Likewise. * doc/glibc-functions/xdr_double.texi (xdr_double): Likewise. * doc/glibc-functions/xdr_enum.texi (xdr_enum): Likewise. * doc/glibc-functions/xdr_float.texi (xdr_float): Likewise. * doc/glibc-functions/xdr_free.texi (xdr_free): Likewise. * doc/glibc-functions/xdr_hyper.texi (xdr_hyper): Likewise. * doc/glibc-functions/xdr_int.texi (xdr_int): Likewise. * doc/glibc-functions/xdr_int16_t.texi (xdr_int16_t): Likewise. * doc/glibc-functions/xdr_int32_t.texi (xdr_int32_t): Likewise. * doc/glibc-functions/xdr_int64_t.texi (xdr_int64_t): Likewise. * doc/glibc-functions/xdr_int8_t.texi (xdr_int8_t): Likewise. * doc/glibc-functions/xdr_long.texi (xdr_long): Likewise. * doc/glibc-functions/xdr_longlong_t.texi (xdr_longlong_t): Likewise. * doc/glibc-functions/xdr_netobj.texi (xdr_netobj): Likewise. * doc/glibc-functions/xdr_opaque.texi (xdr_opaque): Likewise. * doc/glibc-functions/xdr_pointer.texi (xdr_pointer): Likewise. * doc/glibc-functions/xdr_reference.texi (xdr_reference): Likewise. * doc/glibc-functions/xdr_short.texi (xdr_short): Likewise. * doc/glibc-functions/xdr_sizeof.texi (xdr_sizeof): Likewise. * doc/glibc-functions/xdr_string.texi (xdr_string): Likewise. * doc/glibc-functions/xdr_u_char.texi (xdr_u_char): Likewise. * doc/glibc-functions/xdr_u_hyper.texi (xdr_u_hyper): Likewise. * doc/glibc-functions/xdr_u_int.texi (xdr_u_int): Likewise. * doc/glibc-functions/xdr_u_long.texi (xdr_u_long): Likewise. * doc/glibc-functions/xdr_u_longlong_t.texi (xdr_u_longlong_t): Likewise. * doc/glibc-functions/xdr_u_short.texi (xdr_u_short): Likewise. * doc/glibc-functions/xdr_union.texi (xdr_union): Likewise. * doc/glibc-functions/xdr_vector.texi (xdr_vector): Likewise. * doc/glibc-functions/xdr_void.texi (xdr_void): Likewise. * doc/glibc-functions/xdr_wrapstring.texi (xdr_wrapstring): Likewise. * doc/glibc-functions/xdrmem_create.texi (xdrmem_create): Likewise. * doc/glibc-functions/xdrrec_create.texi (xdrrec_create): Likewise. * doc/glibc-functions/xdrrec_endofrecord.texi (xdrrec_endofrecord): Likewise. * doc/glibc-functions/xdrrec_eof.texi (xdrrec_eof): Likewise. * doc/glibc-functions/xdrrec_skiprecord.texi (xdrrec_skiprecord): Likewise. * doc/glibc-functions/xdrstdio_create.texi (xdrstdio_create): Likewise. 2010-05-04 Jim Meyering gendocs.sh: make its "-s FILE" option more useful * build-aux/gendocs.sh: When honoring the -s FILE option, update $PACKAGE to reflect the probably-different basename of "FILE". 2010-05-03 Giuseppe Scrivano bootstrap: don't ignore download_po_files failure * build-aux/bootstrap (update_po_files): Don't ignore download_po_files failure. 2010-05-03 Jim Meyering maint.mk: allow to pass options to gendocs.sh * top/maint.mk (web-manual): Pass gendocs_options_ to gendocs.sh. (gendocs_options_): New overridable variable. gnu-web-doc-update: don't ignore configure or build failure * build-aux/gnu-web-doc-update: Exit nonzero upon internal failure. announce-gen: backslash-escape '@'s in --help output * build-aux/announce-gen: Fix syntax errors. maint.mk, announce-gen: allow project-specific announcement mail headers * top/maint.mk (translation_project_): Define default. (announcement_Cc_, announcement_mail_headers_): Likewise. (announcement): Invoke announce-gen with new --mail-headers option. * build-aux/announce-gen: New option: --mail-headers=HEADERS. test-xalloc-die: avoid unwarranted test failure on OpenSolaris 5.11 * tests/test-xalloc-die.sh: Redirect stdout before stderr, (i.e., "> out 2> err", rather than "2> err > out"). Otherwise, with /bin/sh on OpenSolaris 5.11 snv_134, we would end up with a stray "1> out" line in the "err2" output file when running "make check" in verbose mode (i.e., with set -x enabled). 2010-05-03 Bruno Haible wctob: Fix for weird platforms. * lib/wctob.c (wctob): When wint_t is larger than wchar_t, check the argument value. 2010-05-03 Jim Meyering maint.mk: prohibit unwarranted use of * top/maint.mk (sc_prohibit_strings_without_use): Reject inclusion of strings.h in a file that does not also use strcasecmp, strncasecmp, ffs or ffsll. maint.mk: remove obsolete comments * top/maint.mk: Remove stale, commented-out rules. 2010-05-02 Bruno Haible wcwidth: Declare also when it's aliased. * lib/wchar.in.h (wcwidth): Don't test whether wcwidth is defined as a macro. 2010-05-02 Bruno Haible Fix regression from 2010-04-25. * gnulib-tool (func_modules_transitive_closure): Check the status of all modules, not only of the tests that are of the form foo-tests where foo is a module. 2010-05-02 Bruno Haible wctob: Work around nasty Cygwin 1.7.2 bug. * m4/wctob.m4 (gl_FUNC_WCTOB): Detect the Cygwin bug. * doc/posix-functions/wctob.texi: Mention the Cygwin bug. 2010-05-01 Bruno Haible fpurge: Sharper test. * tests/test-fpurge.c (main): Add one more ftell check. * modules/fpurge-tests (Depends-on): Add ftell. Suggested by Eric Blake. 2010-05-01 Bruno Haible ftello: Another test. * tests/test-ftello3.c: New file. * modules/ftello-tests (Files): Add it. (Makefile.am): Add it to TESTS and check_PROGRAMS. Augment MOSTLYCLEANFILES. ftell: Another test. * tests/test-ftell3.c: New file. * modules/ftell-tests (Files): Add it. (Makefile.am): Add it to TESTS and check_PROGRAMS. Augment MOSTLYCLEANFILES. 2010-05-01 Bruno Haible ftell, ftello: Work around Solaris bug. * m4/ftello.m4 (gl_FUNC_FTELLO): Detect Solaris bug. * lib/ftello.c: Include stdio-impl.h. (ftello): On Solaris, when _IOWRT is set, compute the result without looking at _IOREAD. * modules/ftello (Files): Add lib/stdio-impl.h. * doc/posix-functions/ftell.texi: Mention Solaris bug. * doc/posix-functions/ftello.texi: Likewise. Reported by Eric Blake. 2010-05-01 Bruno Haible freading: Adapt to special meaning of _IOREAD flag on Solaris. * lib/freading.c (freading): On Solaris, ignore the _IOREAD flag if the _IOWRT flag is also set. 2010-05-01 Bruno Haible Fix doc about a HP-UX stdio bug. * doc/posix-functions/ftell.texi: Mark HP-UX bug as unfixed. * doc/posix-functions/ftello.texi: Likewise. 2010-05-01 Bruno Haible lseek test: Fix failure on Solaris. * tests/test-lseek.sh: Partially revert 2010-04-20 commit. Consume all output. 2010-04-30 Jim Meyering bootstrap: don't ignore failure to generate po*/Makevars * build-aux/bootstrap (with_gettext): Don't ignore failure to create po/Makevars or runtime-po/Makevars. 2010-04-29 Eric Blake headers: relax license to LGPLv2+ * modules/fcntl-h (License): Relax license. * modules/getopt-posix (License): Likewise. * modules/locale (License): Likewise. * modules/math (License): Likewise. * modules/pty (License): Likewise. * modules/sched (License): Likewise. * modules/search (License): Likewise. * modules/spawn (License): Likewise. * modules/stdarg (License): Likewise. * modules/sysexits (License): Likewise. 2010-04-29 Jim Meyering inttypes: relax license to LGPLv2+ * modules/inttypes (License): Relax license. 2010-04-29 Simon Josefsson * top/maint.mk (indent): Run twice to produce idempotent results. 2010-04-28 Bruno Haible getdate: Generate getdate.c in the source directory. * modules/getdate (Makefile.am): Add rule for getdate.c. Augment MOSTLYCLEANFILES. Suggested by Daniel Richard G. and Ralf Wildenhues. 2010-04-27 Andreas Gruenbacher (tiny change) * lib/utimens.c: On Tru64, the timestamp parameter of utimens(2) is not declared as a const *; avoid warnings in that case. 2010-04-28 Eric Blake canonicalize-lgpl: avoid compiler warning * lib/canonicalize-lgpl.c (versioned_symbol): Avoid an 'empty declaration' / 'extraneous semicolon' warning with some compilers. Reported by Andreas Gruenbacher. 2010-04-28 Jim Meyering init.sh: ensure a more reliable exit status when exiting via trap * tests/init.sh (setup_): Don't rely on $? in signal handler. Inspired by patches from Dmitry V. Levin. Also trap on signal 3 (SIGQUIT). 2010-04-27 Bruno Haible Update doc about utimes(). * doc/posix-functions/utimes.texi: Mention the OSF/1 problem and the 'utimens' module. Reported by Andreas Gruenbacher . 2010-04-27 Eric Blake full-read, full-write: relax license * modules/full-read (License): Drop to LGPLv2+. * modules/full-write (License): Likewise. * modules/safe-read (License): Likewise. * modules/safe-write (License): Likewise. pthread: mention library for linking * modules/pthread (Link): Mention $(LIB_PTHREAD). 2010-04-27 Jim Meyering maint.mk: fix a bug introduced in last change * top/maint.mk (gl_assured_headers_): Now that all names are on one line, use sed's "g" modifier. Note that while the \.in\.h LHS is not anchored to end of word, it should be adequate. maint.mk: avoid side-effect in latest syntax-check * top/maint.mk (sc_prohibit_always_true_header_tests): Rework not to run commands via $(shell...), and hence to incur cost only when the new rule is actually run. maint.mk: syntax-check: prohibit HAVE_
_H that are always true Derive the list of guaranteed header names from gnulib/lib/*.in.h, and use that to create a regexp used to detect all #if HAVE_..._H uses. * top/maint.mk (sc_prohibit_always_true_header_tests): New rule. (gl_assured_headers_, az_, AZ_): Define. (gl_header_upper_case_or_, gl_have_header_regex_): Define. 2010-04-26 Jim Meyering Bruno Haible gnulib-common.m4: make glibc write diagnostics to stderr, not /dev/tty * m4/gnulib-common.m4 (gl_COMMON_BODY): Set LIBC_FATAL_STDERR_. Prompted by an exchange with Gilles Espinasse. 2010-04-26 Jim Meyering git-version-gen: aesthetic tweak * build-aux/git-version-gen: Use "$nl" rather than a literal, so that the command remains on a single line. 2010-04-26 Eric Blake git-version-gen: allow use on EBCDIC hosts * build-aux/git-version-gen (dirty): Use literal rather than tying ourselves to ascii. Reported by Steve Goetze. 2010-04-25 Bruno Haible netdb: Add support for GNULIB_POSIXCHECK. * lib/netdb.in.h: Include warn-on-use.h. (getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo): Warn if these functions are used when GNULIB_POSIXCHECK is defined and the getaddrinfo module is not in use. * m4/netdb_h.m4 (gl_HEADER_NETDB): Test whether getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo are declared. * modules/netdb (Depends-on): Add warn-on-use. (Makefile.am): Include warn-on-use.h in netdb.h. 2010-04-24 Ian Beckwith build: avoid "make check" failure without .git/ directory * Makefile (sc_prefer_ac_check_funcs_once): Skip this test when there is no .git/ directory. 2010-04-25 Bruno Haible ptsname: Fix misuse of ttyname_r. * lib/ptsname.c (__ptsname_r): Use __ttyname_r's return value instead of errno. 2010-04-25 Bruno Haible ttyname_r: Make it work on Solaris 10. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Define HAVE_POSIXDECL_TTYNAME_R if the system function has the POSIX declaration. Test whether the function fails if the buffer is less than 128 bytes large. * lib/ttyname_r.c (ttyname_r): Handle both possible declarations of the system's ttyname_r function. Provide a reasonably large buffer. * modules/ttyname_r (Depends-on): Add extensions. * doc/posix-functions/ttyname_r.texi: Mention the Solaris problem. 2010-04-25 Bruno Haible Use the 'extensions' module for some more functions on Solaris. * doc/posix-functions/asctime_r.texi: Recommend to use the 'extensions' module. * doc/posix-functions/ctime_r.texi: Likewise. * doc/posix-functions/getgrgid_r.texi: Likewise. * doc/posix-functions/getgrnam_r.texi: Likewise. * doc/posix-functions/getpwnam_r.texi: Likewise. * doc/posix-functions/getpwuid_r.texi: Likewise. * doc/posix-functions/readdir_r.texi: Likewise. * doc/posix-functions/sigwait.texi: Likewise. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Add comment. * doc/posix-functions/getlogin_r.texi: Mark Solaris problem as fixed. 2010-04-25 Bruno Haible ttyname_r: Make it work on MacOS X 10.4 and Solaris 10. * m4/ttyname_r.m4 (gl_FUNC_TTYNAME_R): Test whether the system function has the POSIX declaration. Set REPLACE_TTYNAME_R if not. * lib/ttyname_r.c: Include . (ttyname_r): Define using the system's ttyname_r function, if it exists and not on Solaris. * lib/unistd.in.h (ttyname_r): Replace function if REPLACE_TTYNAME_R is set. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize REPLACE_TTYNAME_R. * modules/unistd (Makefile.am): Substitute REPLACE_TTYNAME_R. * doc/posix-functions/ttyname_r.texi: Mark the problem as fixed. Reported by Simon Josefsson. 2010-04-25 Bruno Haible Mention effects of _POSIX_PTHREAD_SEMANTICS on Solaris. * doc/posix-functions/asctime_r.texi: Mention the Solaris problem. * doc/posix-functions/ctime_r.texi: Likewise. * doc/posix-functions/getgrgid_r.texi: Likewise. * doc/posix-functions/getgrnam_r.texi: Likewise. * doc/posix-functions/getlogin_r.texi: Likewise. * doc/posix-functions/getpwnam_r.texi: Likewise. * doc/posix-functions/getpwuid_r.texi: Likewise. * doc/posix-functions/readdir_r.texi: Likewise. * doc/posix-functions/sigwait.texi: Likewise. * doc/posix-functions/ttyname_r.texi: Likewise. Reported by Simon Josefsson. 2010-04-25 Bruno Haible gnulib-tool: Don't include hairy tests of dependencies in testdirs. * gnulib-tool (func_usage): Document that --with-*-tests options apply also to --create-testdir. (func_acceptable): Don't consider the status of *-tests modules here. (func_modules_transitive_closure): Consider it here, before including a test module. (func_import, func_create_testdir): Set inc_all_direct_tests, inc_all_indirect_tests. * doc/gnulib.texi (Extra tests modules): Document new behaviour of --create-testdir and --create-megatestdir. 2010-04-25 Bruno Haible gnulib-tool: Add --without-*-tests options. * gnulib-tool (func_usage): Document the --without-*-tests options. (excl_cxx_tests, excl_longrunning_tests, excl_privileged_tests, excl_unportable_tests): New variables. Fail if they are specified with --import or --update. (func_acceptable): Respect the excl_*_tests variables. (func_import): Set the excl_*_tests variables to empty. 2010-04-25 Simon Josefsson Bruno Haible Work around a MacOS X 10.4 bug with openpty. * doc/glibc-functions/openpty.texi: Mention the MacOS X 10.4 bug. * tests/test-openpty.c (main): Close the master side explicitly. 2010-04-25 Bruno Haible strnlen: Fix a C++ test error on MacOS X and Solaris. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Don't set REPLACE_STRNLEN to 1 if the function is not declared. Reported by Jarno Rajahalme and Simon Josefsson. 2010-04-24 Bruno Haible Avoid a gcc warning. * tests/test-vasprintf.c (test_vasprintf, test_asprintf): Pass argument of correct type for %08lx directive. Reported by Eric Blake. 2010-04-24 Bruno Haible vasnprintf: Correct errno value in case of out-of-memory. * lib/vasnprintf.c (VASNPRINTF): Set errno to 0 before calling SNPRINTF or sprintf. Use the errno value from SNPRINTF or sprintf. Reported by Ian Beckwith . 2010-04-24 Bruno Haible ansi-c++-opt: Find correct compiler when cross-compiling. * m4/ansi-c++.m4 (gl_PROG_ANSI_CXX): Use AC_CHECK_TOOLS instead of AC_CHECK_PROGS. Reported by Simon Josefsson. 2010-04-24 Giuseppe Scrivano vc-list-files: Add support for subversion * build-aux/vc-list-files: Use "svn list" to generate the list of files controlled by subversion. 2010-04-23 Jim Meyering vc-list-files tests: convert to use init.sh * tests/test-vc-list-files-cvs.sh: Invoke "$srcdir/init.sh" and path_prepend_. Use Exit, not exit. Use skip_ rather than open coding it. Remove trap set-up and compare definitions. * tests/test-vc-list-files-git.sh: Likewise. * modules/vc-list-files-tests (Files): Add tests/init.sh. 2010-04-22 Simon Josefsson * top/maint.mk (sc_prohibit_backup_files): Prohibit checked in backup files. 2010-04-21 Simon Josefsson * tests/test-vasprintf.c (test_vasprintf, test_asprintf): Test %08lx. 2010-04-20 Eric Blake tests: be robust to ignored SIGPIPE * tests/test-select-in.sh: Consume all output. * tests/test-lseek.sh: Check correct exit status, while avoiding EPIPE. 2010-04-20 Simon Josefsson Bruno Haible visibility: Don't use -fvisibility if it leads to a warning. * m4/visibility.m4 (gl_VISIBILITY): Check whether -Werror is usable. If yes, don't pretend that visibility works if it leads to a warning. Reported by Mike Gran . 2010-04-20 Andreas Gruenbacher * build-aux/bootstrap: Use "git -h" for testing for supported options instead of "git --help". The short-form option only shows a summary, and doesn't layout the full man page. Grep for the full option name in the summary, too. 2010-04-19 Bruno Haible relocatable: Drop the need to define RELOCATABLE_STRIP in Makefile.am. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Set RELOCATABLE_STRIP. * doc/relocatable-maint.texi (Supporting Relocation): Remove the mention of RELOCATABLE_STRIP. Reported by Sylvain Beucler . 2010-04-19 Bruno Haible * lib/diffseq.h: Fix typo in comment. Reported by Eric Blake. 2010-04-19 Bruno Haible ioctl: Move autoconf macro to a .m4 file. * m4/ioctl.m4: New file, extracted from modules/ioctl. * modules/ioctl (Files): Add it. (configure.ac): Simply invoke gl_FUNC_IOCTL. Reported by Ian Beckwith . 2010-04-18 Andreas Gruenbacher Bruno Haible diffseq: Accommodate use-case with abstract arrays. * lib/diffseq.h (struct context): Remove xvec, yvec fields if ELEMENT is not defined. (diag, compareseq): Remove local variables xv, yv if ELEMENT is not defined. Use local macro XREF_YREF_EQUAL instead of EQUAL. 2010-04-18 Bruno Haible * doc/posix-headers/stdbool.texi: More precise wording. 2010-04-17 Jim Meyering maint.mk: use gnu-style indentation in an embedded perl script * top/maint.mk (detect_empty_lines_at_EOF_): Clean up formatting. Rename variable: s/two/last_two_bytes/ 2010-04-16 Eric Blake test-stdbool: skip test that fails with Solaris CC * tests/test-stdbool.c (f): Skip test that causes compilation error under buggy C++ compiler. * lib/stdbool.in.h: Document the limitation. * doc/posix-headers/stdbool.texi (stdbool.h): Likewise. setenv: allow compilation with C++ * lib/setenv.c (__add_to_environ): Add a cast. Also, drop use of register keyword. stdint: allow test to pass with C++ * tests/test-stdint.c: Define __STDC_CONSTANT_MACROS, for glibc. getopt: allow compilation with C++ * lib/getopt_int.h (__ordering): Hoist enum declaration outside struct. * lib/getopt.c (_getopt_internal_r): Use correct type. Reported by Dagobert Michelson, via Joel E. Denny. 2010-04-16 Bruno Haible Override netdb.h always. * modules/netdb (Makefile.am): Augment BUILT_SOURCES always. * m4/netdb_h.m4 (gl_HEADER_NETDB): Don't set NETDB_H. Reported by Ludovic Courtès . 2010-04-15 Bruno Haible openpty: Fix mistake from 2010-03-21. * m4/pty.m4 (gl_FUNC_OPENPTY): Define HAVE_OPENPTY when openpty exists. Reported by Simon Josefsson. 2010-04-15 Eric Blake test-forkpty: fix expected signature * tests/test-forkpty.c (SIGNATURE_CHECK): Add appropriate const. Reported by Simon Josefsson. 2010-04-15 Jim Meyering maint.mk: texinfo_suffix_re_: correct the default regexp * top/maint.mk (texinfo_suffix_re_): Fix default regexp. * top/maint.mk (sc_texinfo_acronym): Improve filename regexp, and make it configurable via texinfo_suffix_re_. 2010-04-14 Eric Blake strtok_r: relax license to LGPLv2+ * modules/strtok_r (License): Relax license. Reported by Matthias Bolte. 2010-04-14 Simon Josefsson * lib/gc-libgcrypt.c (gc_init): Use MIN_GCRYPT_VERSION set to version 1.4.4 by default instead of requiring the libgcrypt version used during build. This makes it possible to use the application with older but still binary compatible libgcrypt versions. 2010-04-13 Eric Blake getopt-gnu: match recent glibc fixes and posix ruling * tests/test-getopt.h (test_getopt): Strengthen tests of leading '+' handling, when requesting extensions. * tests/test-getopt_long.h (test_getopt_long): Strengthen test of 'W;' handling. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Detect glibc 2.11 bug. * doc/posix-functions/getopt.texi (getopt): Document this. * doc/glibc-functions/getopt_long.texi (getopt_long): Likewise. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. getopt: merge bug fixes from glibc * lib/getopt.c (_getopt_internal_r): Use correct message for 'W;' diagnostics. Honor '+:' correctly. Reject ';'. getopt-posix: detect MacOS bug * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Reject MacOS botch of optind when missing a required argument. * doc/posix-functions/getopt.texi (getopt): Document the bug. * doc/glibc-functions/getopt_long.texi (getopt_long): Likewise. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. getopt-posix: avoid spurious failure on Solaris * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Check for getopt_clip as an indicator that setting optind=1 is sufficient for reset. getopt-posix: avoid spurious failure on FreeBSD * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Check for optreset even in POSIX mode, since the m4 test uses it. gnulib-tool: silence warning on BSD sh * gnulib-tool: Avoid leaking warning about unknown 'declare'. 2010-04-13 Jim Meyering doc: users.txt: GNU patch now uses gnulib * users.txt: Add patch. 2010-04-12 Jim Meyering maint.mk: generate more concise timing data for syntax-check rules * top/maint.mk ($(sc_z_rules_)): Remove the ":", "sc_" prefix and " done" from each line that reports a syntax-check test duration. 2010-04-12 Andreas Gruenbacher git-version-gen: use "git update-index..." rather than "git status" * build-aux/git-version-gen: Use git update-index --refresh, not "git status". With some versions of git, "git status" would fail to update the index and result in an unwarranted "-dirty" suffix. 2010-04-11 Jim Meyering openat: correct formatting (no semantic change) * m4/openat.m4 (gl_FUNC_FCHOWNAT): Correct formatting in AC_DEFINE. Suggested by Bruno Haible. 2010-04-11 Bruno Haible Stricter declaration checking in testdirs. * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): If for_tests is true, augment AM_CPPFLAGS to define GNULIB_STRICT_CHECKING. * build-aux/warn-on-use.h (_GL_WARN_ON_USE, _GL_WARN_ON_USE_CXX): When GNULIB_STRICT_CHECKING is defined, verify that the function is declared. 2010-04-11 Paolo Bonzini Bruno Haible libunistring: Improve configure output. * m4/libunistring.m4 (gl_LIBUNISTRING): Check for libiconv first. Don't say "consider installing GNU libunistring" when checking again with libiconv. 2010-04-11 Bruno Haible libunistring: Correct value of $LTLIBUNISTRING. * m4/libunistring.m4 (gl_LIBUNISTRING): When it depends on libiconv, correct the value of $LTLIBUNISTRING. 2010-04-11 Bruno Haible havelib: Add static libraries to LIBS in the right order. * m4/lib-link.m4 (AC_LIB_HAVE_LINKFLAGS): When $LIB[]NAME contains no -l options, prepend it to $LIBS, instead of appending it to $LIBS. 2010-04-11 Bruno Haible libunistring: Detect libunistring also when it depends on libiconv. * m4/libunistring.m4 (gl_LIBUNISTRING): Unset the cached result before the second AC_LIB_HAVE_LINKFLAGS invocation. 2010-04-11 James Youngman close-stream: declare local scalars to be "const" * lib/close-stream.c (close_stream): Make boolean variables const to document the fact that we set but do not change them. 2010-04-11 Bruno Haible * m4/libunistring.m4 (gl_LIBUNISTRING): Fix typo in comment. 2010-04-11 Jim Meyering maint.mk: don't include dist-check.mk * top/maint.mk: Remove bogus include directive. maint.mk: improve empty-line-at-EOF check * top/maint.mk (sc_prohibit_empty_lines_at_EOF): Use Perl-based solution, rather than tail+Perl-based one. The latter would read a few kilobytes from the end of each file, and did not handle empty files properly. maint.mk: print the elapsed time for each syntax-check rule * top/maint.mk (sc_m_rules_): Save start time in a file. (sc_z_rules_): New rules: remove temp file and print elapsed time. (local-check): Interpose the .z rules 2010-04-11 Jim Meyering maint.mk: detect_empty_lines_at_EOF_: avoid FP for an empty file * top/maint.mk (detect_empty_lines_at_EOF_): Don't confuse an empty file with one that ends in an empty line. 2010-04-10 Bruno Haible mkdir: Make it work on mingw64. * lib/sys_stat.in.h: Include together with . * lib/mkdir.c: Update comment. Reported by Roman Donchenko (Роман Донченко) . 2010-04-10 Bruno Haible Don't override improved macro from newer autoconf. * m4/gnulib-common.m4 (AC_C_RESTRICT): Don't define for autoconf >= 2.62. Reported by Joel E. Denny . 2010-04-10 Jim Meyering maint.mk: new syntax-check rule: prohibit empty lines at end of file * top/maint.mk (sc_prohibit_empty_lines_at_EOF): New rule. maint.mk: correct a diagnostic * top/maint.mk (sc_prohibit_HAVE_MBRTOWC): Fix obsolete use of $re in diagnostic; now use $prohibit. 2010-04-10 Bruno Haible fchownat: Fix a C++ test error on Solaris 8. * m4/openat.m4 (gl_FUNC_FCHOWNAT): Don't set REPLACE_FCHOWNAT to 1 if the function does not exist. 2010-04-10 Bruno Haible vasnprintf: Add more tests. * tests/test-vasnprintf-posix.c: Include . (test_function): Test converting an invalid wide string. vasnprintf: Correct handling of unconvertible wide string arguments. * lib/vasnprintf.c (MAX_ROOM_NEEDED): New function, extracted from VASNPRINTF. (VASNPRINTF): Use it. After snprintf failed, allocate more memory only if HAVE_SNPRINTF_RETVAL_C99 is false and the allocated memory is smaller than the expected maximum need for the directive. Set errno to EILSEQ, not EINVAL, when the directive is 'c' or 's'. (local_strnlen, local_wcslen, local_wcsnlen): Update conditions. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Require AC_C_INLINE and gl_SNPRINTF_RETVAL_C99. Define HAVE_SNPRINTF_RETVAL_C99. * modules/vasnprintf (Files): Add m4/printf.m4. Reported by Jarno Rajahalme . 2010-04-10 Bruno Haible vasnprintf: Fix crash in %ls directive. * lib/vasnprintf.c (VASNPRINTF): Don't abort when a unconvertible wide string is passed as argument to %ls, with no precision and no width. Reported by Jarno Rajahalme . 2010-04-10 Bruno Haible vasnprintf: Fix multiple test failures on mingw. * lib/vasnprintf.c (SNPRINTF) [mingw]: Define to snprintf, not _snprintf, or snwprintf, not _snwprintf. 2010-04-10 Bruno Haible write: Fix a C++ test error on mingw. * lib/unistd.in.h (write): Use _GL_CXXALIAS_SYS_CAST. 2010-04-10 Bruno Haible vasnprintf test: Reduce code duplication. * tests/test-vasnprintf.c (test_function): New function, extracted from test_vasnprintf. (test_vasnprintf, test_asnprintf): Invoke it. 2010-04-10 Bruno Haible strnlen: Fix warning in C++ mode on MacOS X. * lib/string.in.h (strnlen): Use the modern idiom. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Set REPLACE_STRNLEN to 1, instead of defining strnlen as a macro already in . * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_STRNLEN. * modules/string (Makefile.am): Substitute REPLACE_STRNLEN. Reported by Jarno Rajahalme . 2010-04-08 James Youngman * doc/manywarnings.texi (manywarnings): Add missing parenthesis in the example. 2010-04-09 Jim Meyering maint.mk: print better diagnostic when there is no $(_hv_file) * top/maint.mk (sc_cross_check_PATH_usage_in_tests): Skip test and announce that when $(_hv_file) (aka help-version) does not exist. init.sh: run tr in the "C" locale to avoid multibyte interpretation * tests/init.sh (rand_bytes_): Run tr in the "C" locale so it does not try to interpret its random input bytes. Jarno Rajahalme reported that ./test-xalloc-die.sh would fail with "tr: Illegal byte sequence". on Darwin 10.3.0 with LC_CTYPE=UTF-8. (mktempd_): Likewise, just in case. ftruncate: add two years to projected module removal date: 2012 * m4/ftruncate.m4: Adjust comments. ftruncate: mark module as obsolete; even MinGW provides it, now * modules/ftruncate (Status): Obsolete. (Notice): Say that. * doc/posix-functions/ftruncate.texi: Don't say MinGW lacks it. http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/9203 2010-04-08 Bruno Haible Fix side effects from tests-related modules. * modules/dprintf-posix (Comment): New section. * modules/fprintf-posix (Comment): Likewise. * modules/obstack-printf-posix (Comment): Likewise. * modules/printf-posix (Comment): Likewise. * modules/snprintf-posix (Comment): Likewise. * modules/sprintf-posix (Comment): Likewise. * modules/vasnprintf-posix (Comment): Likewise. * modules/vasprintf-posix (Comment): Likewise. * modules/vdprintf-posix (Comment): Likewise. * modules/vfprintf-posix (Comment): Likewise. * modules/vprintf-posix (Comment): Likewise. * modules/vsnprintf-posix (Comment): Likewise. * modules/vsprintf-posix (Comment): Likewise. * modules/xprintf-posix (Comment): Likewise. * modules/xvasprintf-posix (Comment): Likewise. * modules/ceilf-tests (Depends-on): Remove fprintf-posix. * modules/floorf-tests (Depends-on): Likewise. * modules/round-tests (Depends-on): Likewise. * modules/roundf-tests (Depends-on): Likewise. * modules/trunc-tests (Depends-on): Likewise. * modules/truncf-tests (Depends-on): Likewise. * tests/test-ceilf2.c (check): Don't invoke fprintf if the 'fprintf-posix' module is not present. * tests/test-floorf2.c (check): Likewise. * tests/test-trunc2.c (check): Likewise. * tests/test-truncf2.c (check): Likewise. * tests/test-round2.c (equal): Likewise. Reported by Jarno Rajahalme . 2010-04-07 Karl Berry * config/srclist.txt, * config/srclistvars.sh, * config/srclist-update: doc fixes. 2010-04-07 Jim Meyering maint.mk: add a PATH crosschecking syntax-check rule * top/maint.mk (sc_cross_check_PATH_usage_in_tests): New rule. Useful if you use a test like the one in help-version (coreutils, diffutils, grep, gzip) that ensures $(VERSION) matches what is printed by prog --version. 2010-04-06 Bruno Haible Fix link error on mingw. * modules/unistd-c++-tests (test_unistd_c___LDADD): Add LIBSOCKET. * modules/fcntl-h-c++-tests (test_fcntl_h_c___LDADD): Likewise. 2010-04-06 Bruno Haible Assume rmdir exists. * lib/rmdir.c (rpl_rmdir): Remove code that invokes the rmdir program. 2010-04-06 Giuseppe Scrivano doc: update users.txt * users.txt: Add gcal. 2010-04-06 Jim Meyering init.sh: simply unset TMPDIR rather than risking env -i * tests/init.sh (mktempd_): Using env -i is rather harsh, and although it probably works fine on all Unix-based systems, some systems (Cygwin?) cannot tolerate a totally cleared environment. Suggestion from Eric Blake. 2010-04-06 Jim Meyering init.sh: portability fix: use env's POSIX-specified -i option not -u * tests/init.sh (mktempd_): Use env -i and set PATH explicitly rather than unportable env -u. Solaris 5.11's env lacks support for -u. 2010-04-05 Bruno Haible btowc: Work around Cygwin 1.7.2 bug. * m4/btowc.m4 (gl_FUNC_BTOWC): Set REPLACE_BTOWC to 1 if the function does not map NUL to 0. * doc/posix-functions/btowc.texi: Mention the Cygwin bug. 2010-04-05 Bruno Haible Make the multithread modules work on Cygwin 1.7.2. * m4/threadlib.m4 (gl_THREADLIB_BODY): Improve the test whether imported symbols can be declared weak, so that it returns "no" on Cygwin 1.7.2. 2010-04-05 Bruno Haible Use the module 'strncat'. * modules/unistr/u8-strncat (Depends-on): Add strncat. Tests for module 'strncat'. * modules/strncat-tests: New file. * tests/test-strncat.c: New file. New module 'strncat'. * lib/string.in.h (strncat): New declaration. * lib/strncat.c: New file, based on lib/unistr/u-strncat.h. * m4/strncat.m4: New file, based on m4/memchr.m4. * modules/strncat: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Also check whether strncat is declared. (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRNCAT, REPLACE_STRNCAT. * modules/string (Makefile.am): Substitute GNULIB_STRNCAT, REPLACE_STRNCAT. * doc/posix-functions/strncat.texi: Mention the Solaris bug and the new module. * tests/test-string-c++.cc: Check signature of strncat. 2010-04-05 Jim Meyering xstrtoumax-tests: convert to use init.sh * modules/xstrtoumax-tests (Files): Add tests/init.sh. * tests/test-xstrtoumax.sh: Invoke "$srcdir/init.sh" and path_prepend_. Use Exit, not exit. Remove uses of $EXEEXT and "./" to run a program in the current dir. xstrtoimax-tests: convert to use init.sh * modules/xstrtoimax-tests (Files): Add tests/init.sh. * tests/test-xstrtoimax.sh: Invoke "$srcdir/init.sh" and path_prepend_. Use Exit, not exit. Remove uses of $EXEEXT and "./" to run a program in the current dir. 2010-04-05 Bruno Haible sys_socket: Avoid #define replacements in C++ mode. * lib/sys_socket.in.h (close, gethostname, select): In C++, attach a warning to the function if possible, rather than #defining the symbol to a dysfunctional alias. 2010-04-05 Bruno Haible fseeko: Fix C++ test error on mingw. * m4/fseeko.m4 (gl_HAVE_FSEEKO): New macro, extracted from gl_FUNC_FSEEKO. (gl_REPLACE_FSEEKO): Also set REPLACE_FSEEKO if appropriate. (gl_FUNC_FSEEKO): Require gl_HAVE_FSEEKO. Update. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Don't fiddle with internals of the fseeko module. Instead, invoke gl_REPLACE_FSEEKO. 2010-04-05 Bruno Haible duplocale: Improve test output. * tests/test-duplocale.c (main): Print reason for skipped test. 2010-04-05 Bruno Haible Assume rmdir exists. * m4/rmdir.m4 (gl_FUNC_RMDIR): Remove test whether rmdir exists. * doc/posix-functions/rmdir.texi: Remove mention of "old platforms". 2010-04-05 Bruno Haible Fix link error on Solaris 8 with cc. * modules/pty-c++-tests (test_pty_c___LDADD): Add LIBINTL. 2010-04-05 Bruno Haible frexpl: Fix a C++ test error on Solaris 8 and Cygwin. * lib/math.in.h (frexpl): Fix condition on _GL_CXXALIASWARN invocation. 2010-04-05 Bruno Haible vasprintf: Update documentation. * doc/glibc-functions/asprintf.texi: Mention the 'vasprintf' module. 2010-04-05 Bruno Haible ptsname: Improve test. * tests/test-ptsname.c (main): Also try the various master names of BSD systems. 2010-04-05 Bruno Haible memchr: Avoid a possible C++ test error. * lib/string.in.h (memchr): Provide declaration if function is missing. * m4/memchr.m4 (gl_FUNC_MEMCHR): If the function is missing, set HAVE_MEMCHR to 0, not REPLACE_MEMCHR to 1. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize HAVE_MEMCHR. * modules/string (Makefile.am): Substitute HAVE_MEMCHR. 2010-04-05 Bruno Haible strtok_r: Improve idiom. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Invoke gl_PREREQ_STRDUP only when AC_LIBOBJ is used. 2010-04-05 Bruno Haible strdup: Improve idiom. * m4/strdup.m4 (gl_FUNC_STRDUP): Invoke gl_PREREQ_STRDUP only when AC_LIBOBJ is used. (gl_FUNC_STRDUP_POSIX): When strdup is missing and malloc is not POSIX compliant, don't set REPLACE_STRDUP to 1. Invoke gl_PREREQ_STRDUP only when AC_LIBOBJ is used. 2010-04-05 Bruno Haible mbsinit, mbrtowc, wcrtomb: Improve idioms. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): When the function does not exist, don't set REPLACE_MBSINIT to 1. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): When the function does not exist, don't set REPLACE_MBRTOWC to 1. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): When the function does not exist, don't set REPLACE_MBSRTOWCS to 1. * m4/mbsnrtowcs.m4 (gl_FUNC_MBSNRTOWCS): When the function does not exist, don't set REPLACE_MBSNRTOWCS to 1. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): When the function does not exist, don't set REPLACE_WCRTOMB to 1. * m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS): When the function does not exist, don't set REPLACE_WCSRTOMBS to 1. * m4/wcsnrtombs.m4 (gl_FUNC_WCSNRTOMBS): When the function does not exist, don't set REPLACE_WCSNRTOMBS to 1. 2010-04-05 Bruno Haible ldexpl: Improve idiom. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): When the function is not declared, make sure to set HAVE_DECL_LDEXPL to 0. 2010-04-05 Jim Meyering xstrtol-tests: convert to use init.sh * modules/xstrtol-tests (Files): Add tests/init.sh. * tests/test-xstrtol.sh: Invoke "$srcdir/init.sh" and path_prepend_. Use Exit, not exit. Remove uses of $EXEEXT and "./" to run a program in the current dir. atexit-tests: convert to use init.sh * modules/atexit-tests (Files): Add tests/init.sh. * tests/test-atexit.sh: Invoke "$srcdir/init.sh" and path_prepend_. Use Exit, not exit. Remove uses of $EXEEXT and "./" to run a program in the current dir. init.sh: fix typo * tests/init.sh: Restore omitted ":" before stderr_fileno_ initialization. init.sh: make it easier for a test script to write to the tty, ... when using automake's parallel-tests mode. * tests/init.sh (stderr_fileno_): Define overridable variable. (warn_): New function, to use it. (fail_, skip_, framework_failure_): Use warn_. 2010-04-04 Bruno Haible btowc: Avoid warning. * lib/btowc.c: Include . Reported by Hauke Fath . 2010-04-04 Hauke Fath (tiny change) Bruno Haible wchar: Port to NetBSD 1.5. * lib/wchar.in.h (WEOF): Provide fallback also when wint_t exists. * lib/wctype.in.h (WEOF): Likewise. 2010-04-04 Hauke Fath (tiny change) Bruno Haible Port extended stdio to NetBSD 1.5. * lib/stdio-impl.h [NetBSD]: Include . (struct __sfileext, fp_ub): Define the "old way" for NetBSD 1.5Z and older. 2010-04-04 Bruno Haible string: Remove unused substitution. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Don't initialize HAVE_DECL_STRERROR. * modules/string (Makefile.am): Don't substitute HAVE_DECL_STRERROR. 2010-04-04 Bruno Haible strtod: Avoid a possible C++ test error. * m4/strtod.m4 (gl_FUNC_STRTOD): When setting HAVE_STRTOD to 0, don't set REPLACE_STRTOD. 2010-04-04 Bruno Haible strerror: Update documentation. * doc/posix-functions/strerror.texi: Remove mention of old platforms. 2010-04-04 Bruno Haible stdio: Fix some C++ test errors on Solaris 8 with GCC. * lib/stdio.in.h (vdprintf, vfprintf, vprintf, vsprintf): Use _GL_CXXALIAS_SYS_CAST. 2010-04-04 Bruno Haible frexpl: Fix a C++ test error on Solaris 8 and Cygwin. * m4/frexpl.m4 (gl_FUNC_FREXPL, gl_FUNC_FREXPL_NO_LIBM): When the function is not declared, set HAVE_DECL_FREXPL to 0, instead of setting REPLACE_FREXPL to 1. * doc/posix-functions/frexpl.texi: Update documentation. 2010-04-04 Bruno Haible math: Fix some C++ test errors on Solaris 8 and Cygwin. * lib/math.in.h (cosl, logl, sinl): Use simpler idiom. 2010-04-04 Bruno Haible Implement nanosleep for native Windows. * lib/nanosleep.c (nanosleep): New implementation for native Windows. 2010-04-04 Bruno Haible math: Fix some C++ test errors on Solaris 8. * lib/math.in.h (truncf, trunc): Use simpler idiom. 2010-04-04 Bruno Haible math: Fix some C++ test errors on Cygwin. * lib/math.in.h (ceilf, ceill, floorf, floorl, roundf, round, roundl, truncl): Provide declaration if the system does not have it. * m4/ceilf.m4 (gl_FUNC_CEILF): If the function is not declared, set HAVE_DECL_CEILF to 0, not REPLACE_CEILF to 1. * m4/ceill.m4 (gl_FUNC_CEILL): If the function is not declared, set HAVE_DECL_CEILL to 0, not REPLACE_CEILL to 1. * m4/floorf.m4 (gl_FUNC_FLOORF): If the function is not declared, set HAVE_DECL_FLOORF to 0, not REPLACE_FLOORF to 1. * m4/floorl.m4 (gl_FUNC_FLOORL): If the function is not declared, set HAVE_DECL_FLOORL to 0, not REPLACE_FLOORL to 1. * m4/round.m4 (gl_FUNC_ROUND): If the function is not declared, set HAVE_DECL_ROUND to 0, not REPLACE_ROUND to 1. * m4/roundf.m4 (gl_FUNC_ROUNDF): If the function is not declared, set HAVE_DECL_ROUNDF to 0, not REPLACE_ROUNDF to 1. * m4/roundl.m4 (gl_FUNC_ROUNDL): If the function is not declared, set HAVE_DECL_ROUNDL to 0, not REPLACE_ROUNDL to 1. * m4/truncl.m4 (gl_FUNC_TRUNCL): If the function is not declared, set HAVE_DECL_TRUNCL to 0, not REPLACE_TRUNCL to 1. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize HAVE_DECL_CEILF, HAVE_DECL_CEILL, HAVE_DECL_FLOORF, HAVE_DECL_FLOORL, HAVE_DECL_ROUND, HAVE_DECL_ROUNDF, HAVE_DECL_ROUNDL, HAVE_DECL_TRUNCL. * modules/math (Makefile.am): Substitute HAVE_DECL_CEILF, HAVE_DECL_CEILL, HAVE_DECL_FLOORF, HAVE_DECL_FLOORL, HAVE_DECL_ROUND, HAVE_DECL_ROUNDF, HAVE_DECL_ROUNDL, HAVE_DECL_TRUNCL. 2010-04-04 Bruno Haible * m4/ceilf.m4 (gl_FUNC_CEILF): Remove redundant AC_SUBST invocation. * m4/ceill.m4 (gl_FUNC_CEILL): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF): Likewise. * m4/floorl.m4 (gl_FUNC_FLOORL): Likewise. * m4/isfinite.m4 (gl_ISFINITE): Likewise. * m4/isinf.m4 (gl_ISINF): Likewise. * m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise. 2010-04-04 Bruno Haible * m4/trunc.m4 (gl_FUNC_TRUNC): Remove redundant AC_SUBST invocation. * m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise. 2010-04-04 Bruno Haible * m4/tmpfile.m4 (gl_FUNC_TMPFILE): Renamed from gl_TMPFILE. * modules/tmpfile (configure.ac): Update. tmpfile: Fix C++ test error on mingw. * lib/stdio.in.h (tmpfile): New declaration. * m4/tmpfile.m4 (gl_TMPFILE): Require gl_STDIO_H_DEFAULTS. Set REPLACE_TMPFILE instead of defining tmpfile as a macro in config.h. * modules/tmpfile (Depends-on): Add stdio. (configure.ac): Invoke gl_STDIO_MODULE_INDICATOR. * m4/stdio_h.m4 (gl_STDIO_H): Also check whether tmpfile is declared. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_TMPFILE and REPLACE_TMPFILE. * modules/stdio (Makefile.am): Substitute GNULIB_TMPFILE and REPLACE_TMPFILE. * tests/test-stdio-c++.cc (tmpfile): Verify signature. 2010-04-04 Bruno Haible ioctl: Fix C++ test error on mingw. * lib/ioctl.c (ioctl): Renamed from rpl_ioctl. * lib/sys_ioctl.in.h (ioctl): When SYS_IOCTL_H_HAVE_WINSOCK2_H is 1, use _GL_FUNCDECL_SYS, not _GL_FUNCDECL_RPL. 2010-04-03 Bruno Haible wcwidth: Fix C++ test error on mingw. * lib/wcwidth.c (wcwidth): Renamed from rpl_wcwidth. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): If the wcwidth function does not exist, don't set REPLACE_WCWIDTH. Instead, rely on HAVE_DECL_WCWIDTH. 2010-04-03 Bruno Haible nanosleep: Fix C++ test error on mingw. * lib/nanosleep.c (nanosleep): Renamed from rpl_nanosleep. * lib/time.in.h (nanosleep): Use modern idiom. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): When the system does not have a nanosleep function, set HAVE_NANOSLEEP to 0, instead of setting REPLACE_NANOSLEEP to 1. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_NANOSLEEP. * modules/time (Makefile.am): Substitute HAVE_NANOSLEEP. 2010-04-03 Bruno Haible strptime: Fix C++ test error on mingw. * lib/time.in.h (strptime): Use HAVE_STRPTIME, not REPLACE_STRPTIME. * m4/strptime.m4 (gl_FUNC_STRPTIME): Set HAVE_STRPTIME, not REPLACE_STRPTIME. Invoke gl_PREREQ_STRPTIME. (gl_PREREQ_STRPTIME): New macro, extracted from gl_FUNC_STRPTIME. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_STRPTIME, not REPLACE_STRPTIME. * modules/time (Makefile.am): Substitute HAVE_STRPTIME, not REPLACE_STRPTIME. 2010-04-03 Bruno Haible timegm: Fix C++ test error on mingw. * lib/time.in.h (timegm): Use modern idiom. * m4/timegm.m4 (gl_FUNC_TIMEGM): When timegm does not exist, set HAVE_TIMEGM to 0, not REPLACE_TIMEGM to 1. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_TIMEGM. * modules/time (Makefile.am): Substitute HAVE_TIMEGM. 2010-04-03 Bruno Haible timegm: Assume declaration if function exists. * m4/timegm.m4 (gl_FUNC_TIMEGM): Assume timegm is declared if and only if it exists. Don't clobber ac_cv_func_timegm. 2010-04-03 Bruno Haible time_r: Fix C++ test error on mingw. * lib/time.in.h (localtime_r, gmtime_r): Use modern idiom. * m4/time_r.m4 (gl_TIME_R): When localtime_r does not exist, set HAVE_LOCALTIME_R to 0, not REPLACE_LOCALTIME_R to 1. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize HAVE_LOCALTIME_R. * modules/time (Makefile.am): Substitute HAVE_LOCALTIME_R. 2010-04-03 Bruno Haible time_r: Minor updates. * modules/time_r (Description): Mention the provided functions. * lib/time_r.c: Don't include . * doc/posix-functions/gmtime_r.texi: Mention the 'time_r' module. * doc/posix-functions/localtime_r.texi: Likewise. 2010-04-03 Bruno Haible time: Fix regression introduced on 2010-03-08. * m4/time_h.m4 (gl_TIME_MODULE_INDICATOR): Require gl_HEADER_TIME_H_DEFAULTS, not gl_HEADER_STRING_H_DEFAULTS. 2010-04-03 Jim Meyering maint.mk: don't silently disable project-specific syntax-check rules * top/maint.mk (_prohibit_regexp): Define, to help people realize that they need to convert their project-specific syntax-check rules to use the new _sc_search_regexp. 2010-04-03 Bruno Haible fchdir: Fix regression introduced on 2010-03-08. * lib/unistd.in.h (fchdir): Fix declaration. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Set HAVE_FCHDIR, not REPLACE_FCHDIR. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_FCHDIR, not REPLACE_FCHDIR. * modules/unistd (Makefile.am): Substitute HAVE_FCHDIR, not REPLACE_FCHDIR. 2010-04-03 Bruno Haible getpagesize: Fix C++ test error on mingw. * lib/unistd.in.h (getpagesize): Don't use _GL_CXXALIASWARN if the system does not declare the function. * m4/getpagesize.m4 (gl_FUNC_GETPAGESIZE): Also check whether it's declared. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_GETPAGESIZE. * modules/unistd (Makefile.am): Substitute HAVE_DECL_GETPAGESIZE. 2010-04-03 Bruno Haible stdio: Make C++ tests work on mingw. * lib/stdio.in.h (getline): Don't use _GL_CXXALIASWARN if the system does not declare the function. 2010-04-03 Bruno Haible ftello: Fix C++ test error on mingw. * lib/stdio.in.h (ftello): Use modern idiom. * lib/ftello.c (ftello): Renamed from rpl_ftello. * m4/ftello.m4 (gl_FUNC_FTELLO): Distinguish the case that the function is missing and that it needs to be replaced. (gl_REPLACE_FTELLO): Don't set REPLACE_FTELLO here. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_FTELLO. * modules/stdio (Makefile.am): Substitute HAVE_FTELLO. 2010-04-03 Bruno Haible fseeko: Fix C++ test error on mingw. * lib/stdio.in.h (fseeko): Use modern idiom. * lib/fseeko.c (fseeko): Renamed from rpl_fseeko. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Distinguish the case that the function is missing and that it needs to be replaced. (gl_REPLACE_FSEEKO): Don't set REPLACE_FSEEKO here. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize HAVE_FSEEKO. * modules/stdio (Makefile.am): Substitute HAVE_FSEEKO. 2010-04-03 Bruno Haible mkstemp: Fix C++ test error on mingw. * lib/stdlib.in.h (mkstemp): Use modern idiom. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Distinguish the case that the function is missing and that it needs to be replaced. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize HAVE_MKSTEMP. * modules/stdlib (Makefile.am): Substitute HAVE_MKSTEMP. 2010-04-03 Bruno Haible stpncpy: Fix C++ test error on mingw. * lib/string.in.h (stpncpy): Use modern idiom. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Distinguish the case that the function is missing and that it needs to be replaced. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_STPNCPY. * modules/string (Makefile.am): Substitute REPLACE_STPNCPY. 2010-04-03 Bruno Haible sys_stat: Fix C++ test error on mingw. * build-aux/c++defs.h (_GL_CXXALIAS_RPL_CAST_1): New macro. * lib/sys_stat.in.h (lchmod): Use it instead of _GL_CXXALIAS_RPL_1. 2010-04-03 Bruno Haible pty: Update doc. * doc/glibc-headers/pty.texi: Mention changes done since 2010-03-18. 2010-04-03 Bruno Haible unistd: Fix C++ test error on mingw. * lib/unistd.in.h (getcwd): Use _GL_CXXALIAS_SYS_CAST. 2010-04-03 Bruno Haible Update doc regarding mingw. * doc/glibc-functions/openpty.texi: Update regarding mingw. * doc/glibc-functions/login_tty.texi: Likewise. * doc/glibc-functions/forkpty.texi: Likewise. 2010-04-03 Bruno Haible stdlib: Avoid compilation failure of c-strtold on mingw. * lib/stdlib.in.h: Don't include on native Windows systems. 2010-04-03 Bruno Haible locale: Make C++ tests work on Cygwin and mingw. * lib/locale.in.h (duplocale): Don't use _GL_CXXALIASWARN if gnulib cannot provide the function. Reported by Simon Josefsson. 2010-04-03 Bruno Haible localename: Port to MacOS X 10.6. * lib/localename.c (gl_locale_name_thread_unsafe): On MacOS X, try the memory layout of the locales in MacOS X 10.6 as well. Reported by Panu Kekäläinen . 2010-04-02 Bruno Haible gnulib-tool: Ensure that long-running tests are executed last. * gnulib-tool (func_emit_tests_Makefile_am): Emit the code for long- running tests after the one for the other tests. 2010-04-02 Bruno Haible gnulib-tool: Ensure the tests in the main directory are executed first. * gnulib-tool (func_emit_tests_Makefile_am): Initialize SUBDIRS to start with the current directory. 2010-04-02 Bruno Haible Tests for module 'havelib', moved here from GNU gettext. * modules/havelib-tests: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/README: New file, from gettext/autoconf-lib-link. * tests/havelib/Makefile.am: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-1: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-1a: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-1b: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2_a: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-2_b: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-2aaa: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2aab: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2aac: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2aad: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2aba: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2abb: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2abc: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2abd: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2baa: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bab: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bac: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bad: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bba: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bbb: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bbc: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-2bbd: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3_a: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-3_b: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpath-3aaa: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aab: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aac: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aad: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aae: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aaf: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aag: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aah: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3aba: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abb: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abc: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abd: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abe: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abf: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abg: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3abh: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3baa: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bab: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bac: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bad: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bae: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3baf: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bag: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bah: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bba: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbb: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbc: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbd: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbe: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbf: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbg: New file, from gettext/autoconf-lib-link. * tests/havelib/rpath-3bbh: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathx/rpathx.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathx/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathx/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathy/rpathy.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathy/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathy/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathz/rpathz.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathz/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathz/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathlx/usex.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlx/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlx/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathly/usey.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathly/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathly/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathlz/usez.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlz/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlz/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathlyx/usey.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlyx/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlyx/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathlzyx/usez.c: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlzyx/Makefile.am: New file, from gettext/autoconf-lib-link. * tests/havelib/rpathlzyx/configure.ac: New file, from gettext/autoconf-lib-link with modifications. * tests/havelib/rpathcfg.sh: New file, from gettext/autoconf-lib-link with modifications. 2010-04-02 Bruno Haible gnulib-tool: Create distributed built sources also for the tests. * gnulib-tool (func_create_testdir): Also generate distributed built sources in the tests directory. 2010-04-02 Bruno Haible gnulib-tool: Obey user's environment variables. * gnulib-tool (func_create_testdir): When creating built sources, respect the environment variables for autoconf, automake, etc. given by the user. 2010-04-02 Bruno Haible gnulib-tool: Provide the value of --m4-base to modules. * gnulib-tool (func_import, func_create_testdir): Emit a definition of gl_m4_base. 2010-04-02 Eric Blake maint.mk: fix some fallout * NEWS: Document the incompatible change, and its effect on cfg.mk. * top/maint.mk (sc_prohibit_test_minus_ao): Update. 2010-03-28 Jose E. Marchesi maint.mk: _sc_search_regexp: generalize and rename from _prohibit_regexp * top/maint.mk (_sc_search_regexp): Rename from _prohibit_regexp. (sc_cast_of_argument_to_free): Adapt to use _sc_search_regexp. (sc_cast_of_x_alloc_return_value): Likewise. (sc_cast_of_alloca_return_value): Likewise. (sc_space_tab): Likewise. (sc_prohibit_atoi_atof): Likewise. (sc_prohibit_magic_number_exit): Likewise. (sc_error_exit_success): Likewise. (sc_file_system): Likewise. (sc_prohibit_have_config_h): Likewise. (sc_require_config_h): Likewise. (sc_prohibit_HAVE_MBRTOWC): Likewise. (sc_obsolete_symbols): Likewise. (sc_changelog): Likewise. (sc_program_name): Likewise. (sc_the_the): Likewise. (sc_trailing_blank): Likewise. (sc_two_space_separator_in_usage): Likewise. (sc_useless_cpp_parens): Likewise. (sc_GPL_version): Likewise. (sc_GFDL_version): Likewise. (sc_texinfo_acronym): Likewise. (sc_prohibit_cvs_keyword): Likewise. (sc_prohibit_stat_st_blocks): Likewise. (sc_prohibit_S_IS_definition): Likewise. (sc_redundant_const): Likewise. (sc_makefile_TAB_only_indentation): Likewise. (sc_m4_quote_check): Likewise. (sc_makefile_path_separator_check): Likewise. (sc_copyright_check): Likewise. (sc_Wundef_boolean): Likewise. (sc_vulnerable_makefile_CVE-2009-4029): Likewise. maint.mk: match 0 or more whitespace-before-function-call '(' * top/maint.mk (sc_error_exit_success): Relax regexp to match uses that have zero or two-and-more spaces between the function name and the open parenthesis. (sc_error_message_warn_fatal): Likewise. (sc_error_message_uppercase): Likewise. (sc_error_message_period): Likewise. 2010-03-31 Eric Blake maint.mk: check for [ as well as test * top/maint.mk (sc_prohibit_test_minus_ao): Extend test. Based on a libvirt report by Matthias Bolte. gnumakefile: don't squelch _version output * top/GNUmakefile (_version): Create one-shot dependency rather than using $(shell) when version must be regenerated. (_autoreconf): Run verbosely, by default. sys_time: avoid compiler warnings * lib/sys_time.in.h (includes): Ensure gcc pragma is unconditional, fixing regression from 2010-03-29. Reported by Simon Josefsson. 2010-03-28 Jose E. Marchesi maint.mk: s/_header_without_use/_sc_header_without_use/ * top/maint.mk (_sc_header_without_use): Rename from _header_without_use. (sc_prohibit_assert_without_use): Use the new name. (sc_prohibit_close_stream_without_use): Likewise. (sc_prohibit_getopt_without_use): Likewise. (sc_prohibit_quotearg_without_use): Likewise. (sc_prohibit_quote_without_use): Likewise. (sc_prohibit_long_options_without_use): Likewise. (sc_prohibit_inttostr_without_use): Likewise. (sc_prohibit_ignore_value_without_use): Likewise. (sc_prohibit_error_without_use): Likewise. (sc_prohibit_xalloc_without_use): Likewise. (sc_prohibit_hash_without_use): Likewise. (sc_prohibit_hash_pjw_without_use): Likewise. (sc_prohibit_safe_read_without_use): Likewise. (sc_prohibit_argmatch_without_use): Likewise. (sc_prohibit_canonicalize_without_use): Likewise. (sc_prohibit_root_dev_ino_without_use): Likewise. (sc_prohibit_openat_without_use): Likewise. (sc_prohibit_c_ctype_without_use): Likewise. (sc_prohibit_signal_without_use): Likewise. (sc_prohibit_intprops_without_use): Likewise. 2010-03-30 Eric Blake maint: improve module indicators * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_SET_VARIABLE) (gl_MODULE_INDICATOR, gl_MODULE_INDICATOR_FOR_TESTS): Fit in 80 columns, and avoid extra macro expansion. fdopendir: work around FreeBSD bug * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): New witness. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Set it. * modules/dirent (Makefile.am): Substitute it. * lib/dirent.in.h (fdopendir): Supply missing FreeBSD declaration. * doc/posix-functions/fdopendir.texi (fdopendir): Document the fix. Reported by Christian Weisgerber . 2010-03-29 Bruno Haible Emit #pragma system_header after the inclusion guard, not before. * lib/arpa_inet.in.h: Emit #pragma system_header after the inclusion guard that spans the entire file, not before. This enables an optimization in GCC's preprocessor. * lib/ctype.in.h: Likewise. * lib/dirent.in.h: Likewise. * lib/errno.in.h: Likewise. * lib/float.in.h: Likewise. * lib/getopt.in.h: Likewise. * lib/iconv.in.h: Likewise. * lib/langinfo.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/netdb.in.h: Likewise. * lib/netinet_in.in.h: Likewise. * lib/pty.in.h: Likewise. * lib/sched.in.h: Likewise. * lib/se-selinux.in.h: Likewise. * lib/search.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sys_times.in.h: Likewise. * lib/sys_utsname.in.h: Likewise. * lib/sys_wait.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/wctype.in.h: Likewise. 2010-03-28 James Youngman save-cwd: don't leak a file descriptor when the caller execs. * lib/save-cwd.c (save_cwd): set the close-on-exec flag for the saved file descriptor. * modules/save-cwd (Depends-on): Depend on cloexec. 2010-03-29 Bruno Haible Remove vestiges of fts-lgpl module. * lib/fts_.h: Assume GNULIB_FTS is 1. * lib/fts.c: Likewise. * modules/fts (configure.ac): Remove gl_MODULE_INDICATOR invocation. 2010-03-28 Bruno Haible Fix definition of tests witness macro. * gnulib-tool (func_import): Fix definition of witness macro. 2010-03-28 Bruno Haible Fix ioctl's protoype on glibc systems. * lib/sys_ioctl.in.h (ioctl): If REPLACE_IOCTL is 1, use a wrapper. Use _GL_CXXALIAS_SYS, not _GL_CXXALIAS_SYS_CAST. * lib/ioctl.c (rpl_ioctl) [HAVE_IOCTL]: New wrapper. * modules/ioctl (configure.ac): Test whether ioctl has the POSIX signature. If not, arrange to replace the ioctl function. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H_DEFAULTS): Initialize REPLACE_IOCTL. * modules/sys_ioctl (Makefile.am): Substitute REPLACE_IOCTL. * doc/posix-functions/ioctl.texi: Mention the glibc problem. Reported by Ludovic Courtès . 2010-03-28 Javier Villavicencio exclude: fix the case of globs vs. EXCLUDE_INCLUDE * lib/exclude.c (excluded_file_pattern_p): Fix logic error that made it so grep -r --include=GLOB* ... did not work. 2010-03-26 Jim Meyering Eric Blake maint.mk: prohibit use of test's -o and -a operators * top/maint.mk (sc_prohibit_test_minus_ao): New rule. 2010-03-28 Bruno Haible Remove unused GNULIB_XYZ macro definitions. * modules/crypto/gc-camellia (configure.ac): Remove gl_MODULE_INDICATOR invocation. 2010-03-28 Bruno Haible Mark privileged tests modules. * modules/idpriv-drop-tests (Status): New section. * modules/idpriv-droptemp-tests (Status): New section. 2010-03-28 Bruno Haible Split C++ tests into separate tests modules. * modules/dirent-c++-tests: New file, extracted from modules/dirent-tests. * modules/dirent-tests: Depend on it. * modules/fcntl-h-c++-tests: New file, extracted from modules/fcntl-h-tests. * modules/fcntl-h-tests: Depend on it. * modules/glob-c++-tests: New file, extracted from modules/glob-tests. * modules/glob-tests: Depend on it. * modules/iconv-h-c++-tests: New file, extracted from modules/iconv-h-tests. * modules/iconv-h-tests: Depend on it. * modules/langinfo-c++-tests: New file, extracted from modules/langinfo-tests. * modules/langinfo-tests: Depend on it. * modules/locale-c++-tests: New file, extracted from modules/locale-tests. * modules/locale-tests: Depend on it. * modules/math-c++-tests: New file, extracted from modules/math-tests. * modules/math-tests: Depend on it. * modules/pty-c++-tests: New file, extracted from modules/pty-tests. * modules/pty-tests: Depend on it. * modules/search-c++-tests: New file, extracted from modules/search-tests. * modules/search-tests: Depend on it. * modules/signal-c++-tests: New file, extracted from modules/signal-tests. * modules/signal-tests: Depend on it. * modules/spawn-c++-tests: New file, extracted from modules/spawn-tests. * modules/spawn-tests: Depend on it. * modules/stdio-c++-tests: New file, extracted from modules/stdio-tests. * modules/stdio-tests: Depend on it. * modules/stdlib-c++-tests: New file, extracted from modules/stdlib-tests. * modules/stdlib-tests: Depend on it. * modules/string-c++-tests: New file, extracted from modules/string-tests. * modules/string-tests: Depend on it. * modules/sys_ioctl-c++-tests: New file, extracted from modules/sys_ioctl-tests. * modules/sys_ioctl-tests: Depend on it. * modules/sys_select-c++-tests: New file, extracted from modules/sys_select-tests. * modules/sys_select-tests: Depend on it. * modules/sys_socket-c++-tests: New file, extracted from modules/sys_socket-tests. * modules/sys_socket-tests: Depend on it. * modules/sys_stat-c++-tests: New file, extracted from modules/sys_stat-tests. * modules/sys_stat-tests: Depend on it. * modules/sys_time-c++-tests: New file, extracted from modules/sys_time-tests. * modules/sys_time-tests: Depend on it. * modules/time-c++-tests: New file, extracted from modules/time-tests. * modules/time-tests: Depend on it. * modules/unistd-c++-tests: New file, extracted from modules/unistd-tests. * modules/unistd-tests: Depend on it. * modules/wchar-c++-tests: New file, extracted from modules/wchar-tests. * modules/wchar-tests: Depend on it. * modules/wctype-c++-tests: New file, extracted from modules/wctype-tests. * modules/wctype-tests: Depend on it. Reported by Simon Josefsson. 2010-03-28 Bruno Haible gnulib-tool: Allow 'foo-tests' module even if there is no module 'foo'. * gnulib-tool (func_exists_module): New function, extracted from func_verify_module. (func_verify_module): Use it. (func_get_dependencies): Synthetize a dependency from 'foo-tests' to 'foo' only if 'foo' exists. * doc/gnulib.texi (Extra tests modules): Explain how to split a tests module. 2010-03-28 Bruno Haible gnulib-tool: Add support for special categories of tests. * gnulib-tool: New options --with-c++-tests, --with-longrunning-tests, --with-privileged-tests, --with-unportable-tests, --with-all-tests. (func_usage): Document them. (inc_cxx_tests, inc_longrunning_tests, inc_privileged_tests, inc_unportable_tests, inc_all_tests): New variables. (func_acceptable): Consider these variables. (func_modules_transitive_closure): Make it work when the 'Status' field consists of multiple words. (func_import): Store and restore the values of inc_cxx_tests, inc_longrunning_tests, inc_privileged_tests, inc_unportable_tests, inc_all_tests in gnulib-comp.m4. (func_create_testdir): Set inc_all_tests to true. * doc/gnulib.texi (Extra tests modules): New section. Suggested by Jim Meyering. 2010-03-28 Bruno Haible ansi-c++-opt: Allow turning off the C++ build by default. * m4/ansi-c++.m4 (gl_CXX_CHOICE): Let CXX_CHOICE default to 'no' if gl_CXX_CHOICE_DEFAULT_NO is defined. Requested by Eric Blake. 2010-03-28 Bruno Haible unistd: Avoid #define replacements in C++ mode. * lib/unistd.in.h (socket, connect, accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt, shutdown, select): In C++, attach a warning to the function if possible, rather than #defining the symbol to a dysfunctional alias. Reported by John W. Eaton . 2010-03-28 Bruno Haible Fix link errors on mingw. * lib/sys_ioctl.in.h (ioctl): Fix declaration idiom. * modules/sys_ioctl-tests (Makefile.am): Link test-sys_ioctl-c++ with $(LIBSOCKET). * modules/sys_select-tests (Makefile.am): Link test-sys_select-c++ with $(LIBSOCKET). 2010-03-28 Bruno Haible Ralf Wildenhues lib-ignore: Determine different options for different compilers. * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Set a variable which depends on the current language (C/C++/Fortran). Don't set LDFLAGS. Add comments. (_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS): New macro. * NEWS: Mention the change. 2010-03-27 Bruno Haible Remove unused GNULIB_XYZ macro definitions. * modules/dup3 (configure.ac): Remove gl_MODULE_INDICATOR invocation. * modules/fseek (configure.ac): Likewise. * modules/ioctl (configure.ac): Likewise. * modules/open (configure.ac): Likewise. * modules/stdlib-safer (configure.ac): Likewise. 2010-03-27 Bruno Haible Add a remark about certain modules. * modules/malloc (Comment): New section. * modules/realloc (Comment): Likewise. * modules/sigpipe (Comment): Likewise. 2010-03-27 Bruno Haible Resolve conflict between the two kinds of module indicators. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_FOR_TESTS): Define GNULIB_TEST_XYZ instead of GNULIB_XYZ. * modules/canonicalize (configure.ac): Invoke gl_MODULE_INDICATOR_FOR_TESTS. * tests/test-canonicalize-lgpl.c: Test GNULIB_TEST_XYZ instead of GNULIB_XYZ. * tests/test-dirent-c++.cc: Likewise. * tests/test-dirent-safer.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-fchdir.c: Likewise. * tests/test-fcntl-h-c++.cc: Likewise. * tests/test-getopt.c: Likewise. * tests/test-getopt.h: Likewise. * tests/test-langinfo-c++.cc: Likewise. * tests/test-locale-c++.cc: Likewise. * tests/test-math-c++.cc: Likewise. * tests/test-pty-c++.cc: Likewise. * tests/test-search-c++.cc: Likewise. * tests/test-signal-c++.cc: Likewise. * tests/test-spawn-c++.cc: Likewise. * tests/test-stdio-c++.cc: Likewise. * tests/test-stdlib-c++.cc: Likewise. * tests/test-string-c++.cc: Likewise. * tests/test-sys_ioctl-c++.cc: Likewise. * tests/test-sys_select-c++.cc: Likewise. * tests/test-sys_socket-c++.cc: Likewise. * tests/test-sys_stat-c++.cc: Likewise. * tests/test-sys_time-c++.cc: Likewise. * tests/test-time-c++.cc: Likewise. * tests/test-unistd-c++.cc: Likewise. * tests/test-wchar-c++.cc: Likewise. * tests/uninorm/test-u8-nfc.c: Likewise. * tests/uninorm/test-u8-nfd.c: Likewise. * tests/uninorm/test-u8-nfkc.c: Likewise. * tests/uninorm/test-u8-nfkd.c: Likewise. * tests/uninorm/test-u16-nfc.c: Likewise. * tests/uninorm/test-u16-nfd.c: Likewise. * tests/uninorm/test-u16-nfkc.c: Likewise. * tests/uninorm/test-u16-nfkd.c: Likewise. * tests/uninorm/test-u32-nfc.c: Likewise. * tests/uninorm/test-u32-nfc-big.c: Likewise. * tests/uninorm/test-u32-nfd.c: Likewise. * tests/uninorm/test-u32-nfd-big.c: Likewise. * tests/uninorm/test-u32-nfkc.c: Likewise. * tests/uninorm/test-u32-nfkc-big.c: Likewise. * tests/uninorm/test-u32-nfkd.c: Likewise. * tests/uninorm/test-u32-nfkd-big.c: Likewise. * tests/uninorm/test-u32-normalize-big.c: Likewise. 2010-03-27 Bruno Haible Distinguish two kinds of module indicators. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_FOR_TESTS): Renamed from gl_MODULE_INDICATOR. (gl_MODULE_INDICATOR): New macro. * m4/dirent_h.m4 (gl_DIRENT_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR_FOR_TESTS instead of gl_MODULE_INDICATOR. * m4/fcntl_h.m4 (gl_FCNTL_MODULE_INDICATOR): Likewise. * m4/langinfo_h.m4 (gl_LANGINFO_MODULE_INDICATOR): Likewise. * m4/locale_h.m4 (gl_LOCALE_MODULE_INDICATOR): Likewise. * m4/math_h.m4 (gl_MATH_MODULE_INDICATOR): Likewise. * m4/pty_h.m4 (gl_PTY_MODULE_INDICATOR): Likewise. * m4/search_h.m4 (gl_SEARCH_MODULE_INDICATOR): Likewise. * m4/signal_h.m4 (gl_SIGNAL_MODULE_INDICATOR): Likewise. * m4/spawn_h.m4 (gl_SPAWN_MODULE_INDICATOR): Likewise. * m4/stdio_h.m4 (gl_STDIO_MODULE_INDICATOR): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_MODULE_INDICATOR): Likewise. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_MODULE_INDICATOR): Likewise. * m4/sys_select_h.m4 (gl_SYS_SELECT_MODULE_INDICATOR): Likewise. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_MODULE_INDICATOR): Likewise. * m4/sys_time_h.m4 (gl_SYS_TIME_MODULE_INDICATOR): Likewise. * m4/time_h.m4 (gl_TIME_MODULE_INDICATOR): Likewise. * m4/unistd_h.m4 (gl_UNISTD_MODULE_INDICATOR): Likewise. * m4/wchar_h.m4 (gl_WCHAR_MODULE_INDICATOR): Likewise. * modules/cloexec (configure.ac): Likewise. * modules/getopt-gnu (configure.ac): Likewise. * modules/uninorm/u8-normalize (configure.ac): Likewise. * modules/uninorm/u16-normalize (configure.ac): Likewise. * modules/uninorm/u32-normalize (configure.ac): Likewise. * modules/fdopendir (configure.ac): Invoke gl_MODULE_INDICATOR. 2010-03-27 Bruno Haible New module description field 'Comment'. * gnulib-tool: New option --extract-comment. (func_usage): Document it. (sed_extract_prog, sed_extract_field_header): Support 'Comment' field. (func_get_comment): New function. * modules/TEMPLATE-EXTENDED: Add a blank Comment field. 2010-03-27 Bruno Haible Addendum to 2010-02-07 commit. * gnulib-tool (func_usage): Document --extract-applicability option. 2010-03-27 Bruno Haible Use GNULIB_POSIXCHECK instead of GNULIB_PORTCHECK. * lib/time.in.h (asctime, asctime_r, ctime, ctime_r): Test GNULIB_POSIXCHECK, not GNULIB_PORTCHECK. Provide compile-time warnings rather than link errors. 2010-03-27 Bruno Haible Avoid side effects from tests-related modules on the compilation of lib. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_CONDITION): New macro. (gl_MODULE_INDICATOR_SET_VARIABLE): Use its expansion as a value. * gnulib-tool (func_emit_tests_Makefile_am): Accept a witness_macro parameter. Emit into AM_CPPFLAGS a definition of the designated C macro. (func_import): Define a witness macro. Assign it a value that depends on the current package. Override gl_MODULE_INDICATOR_CONDITION for the tests-related modules. (func_create_testdir): Update func_emit_tests_Makefile_am invocation. Reported by Jim Meyering. 2010-03-27 Bruno Haible Factorize common .m4 code. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_SET_VARIABLE): New macro. * m4/arpa_inet_h.m4 (gl_ARPA_INET_MODULE_INDICATOR): Use it. * m4/ctype.m4 (gl_CTYPE_MODULE_INDICATOR): Likewise. * m4/dirent_h.m4 (gl_DIRENT_MODULE_INDICATOR): Likewise. * m4/fcntl_h.m4 (gl_FCNTL_MODULE_INDICATOR): Likewise. * m4/iconv_h.m4 (gl_ICONV_MODULE_INDICATOR): Likewise. * m4/inttypes.m4 (gl_INTTYPES_MODULE_INDICATOR): Likewise. * m4/langinfo_h.m4 (gl_LANGINFO_MODULE_INDICATOR): Likewise. * m4/locale_h.m4 (gl_LOCALE_MODULE_INDICATOR): Likewise. * m4/math_h.m4 (gl_MATH_MODULE_INDICATOR): Likewise. * m4/netdb_h.m4 (gl_NETDB_MODULE_INDICATOR): Likewise. * m4/pty_h.m4 (gl_PTY_MODULE_INDICATOR): Likewise. * m4/search_h.m4 (gl_SEARCH_MODULE_INDICATOR): Likewise. * m4/signal_h.m4 (gl_SIGNAL_MODULE_INDICATOR): Likewise. * m4/spawn_h.m4 (gl_SPAWN_MODULE_INDICATOR): Likewise. * m4/stddef_h.m4 (gl_STDDEF_MODULE_INDICATOR): Likewise. * m4/stdio_h.m4 (gl_STDIO_MODULE_INDICATOR): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_MODULE_INDICATOR): Likewise. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR): Likewise. * m4/strings_h.m4 (gl_STRINGS_MODULE_INDICATOR): Likewise. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_MODULE_INDICATOR): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_MODULE_INDICATOR): Likewise. * m4/sys_select_h.m4 (gl_SYS_SELECT_MODULE_INDICATOR): Likewise. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_MODULE_INDICATOR): Likewise. * m4/sys_time_h.m4 (gl_SYS_TIME_MODULE_INDICATOR): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_MODULE_INDICATOR): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_MODULE_INDICATOR): Likewise. * m4/sys_wait_h.m4 (gl_SYS_WAIT_MODULE_INDICATOR): Likewise. * m4/time_h.m4 (gl_TIME_MODULE_INDICATOR): Likewise. * m4/unistd_h.m4 (gl_UNISTD_MODULE_INDICATOR): Likewise. * m4/wchar_h.m4 (gl_WCHAR_MODULE_INDICATOR): Likewise. 2010-03-27 Bruno Haible Fix a compilation error on Cygwin with g++ >= 4.3. * lib/sys_stat.in.h (lchmod): Don't warn about the use of this function if it is undefined or if we alias it to chmod. (lstat): Don't warn about the use of this function if it is undefined or if we alias it to stat. Reported by Simon Josefsson. 2010-03-27 Bruno Haible * m4/getlogin.m4 (gl_FUNC_GETLOGIN): Renamed from gl_GETLOGIN. * modules/getlogin (configure.ac): Update. * m4/getlogin_r.m4 (gl_FUNC_GETLOGIN_R): Renamed from gl_GETLOGIN_R. * modules/getlogin_r (configure.ac): Update. * m4/inet_ntop.m4 (gl_FUNC_INET_NTOP): Renamed from gl_INET_NTOP. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Update. * modules/inet_ntop (configure.ac): Update. * m4/inet_pton.m4 (gl_FUNC_INET_PTON): Renamed from gl_INET_PTON. * modules/inet_pton (configure.ac): Update. * m4/mbslen.m4 (gl_FUNC_MBSLEN): Renamed from gl_MBSLEN. * modules/mbslen (configure.ac): Update. * m4/pty.m4 (gl_FUNC_FORKPTY): Renamed from gl_FORKPTY. (gl_FUNC_OPENPTY): Renamed from gl_OPENPTY. * modules/forkpty (configure.ac): Update. * modules/openpty (configure.ac): Update. 2010-03-26 Simon Josefsson * top/maint.mk (sc_texinfo_acronym): Don't infloop if there is no *.texi files. Reported by Eric Blake . 2010-03-25 Eric Blake maint: use pragma consistently across replacement headers * lib/ctype.in.h (system_header): Hoist for consistent placement. * lib/dirent.in.h (system_header): Likewise. * lib/errno.in.h (system_header): Likewise. * lib/float.in.h (system_header): Likewise. * lib/getopt.in.h (system_header): Likewise. * lib/iconv.in.h (system_header): Likewise. * lib/inttypes.in.h (system_header): Likewise. * lib/langinfo.in.h (system_header): Likewise. * lib/locale.in.h (system_header): Likewise. * lib/math.in.h (system_header): Likewise. * lib/netdb.in.h (system_header): Likewise. * lib/netinet_in.in.h (system_header): Likewise. * lib/pty.in.h (system_header): Likewise. * lib/sched.in.h (system_header): Likewise. * lib/se-selinux.in.h (system_header): Likewise. * lib/search.in.h (system_header): Likewise. * lib/spawn.in.h (system_header): Likewise. * lib/stdarg.in.h (system_header): Likewise. * lib/stdint.in.h (system_header): Likewise. * lib/string.in.h (system_header): Likewise. * lib/strings.in.h (system_header): Likewise. * lib/sys_file.in.h (system_header): Likewise. * lib/sys_ioctl.in.h (system_header): Likewise. * lib/sys_socket.in.h (system_header): Likewise. * lib/sys_times.in.h (system_header): Likewise. * lib/sys_utsname.in.h (system_header): Likewise. * lib/sys_wait.in.h (system_header): Likewise. * lib/sysexits.in.h (system_header): Likewise. * lib/unistd.in.h (system_header): Likewise. * lib/wctype.in.h (system_header): Likewise. arpa/inet: fix mingw compilation warning * lib/arpa_inet.in.h (system_header): Hoist to be unconditional. Reported by Matthew Bolte. 2010-03-25 Bruno Haible Avoid collision between gnulib wrapper and libintl wrapper. * lib/printf.c (printf): Don't define if a printf wrapper is already defined in intl/printf.c. Reported by Michel Boaventura . 2010-03-25 Bruno Haible Use ANSI C. * lib/readutmp.h (getutent): Provide ANSI C prototype. 2010-03-25 Bruno Haible Minor formatting changes. * lib/acosl.c: Insert space before function argument list. * lib/argz.c: Likewise. * lib/asinl.c: Likewise. * lib/expl.c: Likewise. * lib/gen-uni-tables.c: Likewise. * lib/gettext.h: Likewise. * lib/glthread/lock.h: Likewise. * lib/tanl.c: Likewise. * lib/uniname/uniname.c: Likewise. * tests/test-idpriv-drop.c: Likewise. * tests/test-idpriv-droptemp.c: Likewise. * tests/test-lock.c: Likewise. * tests/test-tls.c: Likewise. * lib/argp-help.c: Insert space before function-like macro argument list. * lib/memcmp.c: Likewise. * tests/test-base64.c: Likewise. * lib/localename.c: Insert space before sizeof's argument list. * lib/safe-alloc.h: Likewise. * lib/file-set.h: Insert space before macro argument list. * tests/test-argp.c: Likewise. * lib/argp-namefrob.h: Insert space before function parameter list. * lib/getaddrinfo.c: Likewise. * lib/netdb.in.h: Likewise. * lib/parse-duration.h: Likewise. * lib/parse-duration.c: Likewise. * lib/poll.c: Likewise. * lib/select.c: Likewise. * lib/trim.h: Likewise. * tests/test-usleep.c: Likewise. * lib/ldexpl.c: Insert space before function parameter list and before function argument list. * lib/logl.c: Likewise. * lib/sqrtl.c: Likewise. * lib/trim.c: Likewise. * lib/cosl.c: Use GNU style indentation. Insert space before function argument list. * lib/sinl.c: Likewise. * lib/tsearch.c: Insert space after 'for'. Reported by Jim Meyering. 2010-03-23 Pádraig Brady (tiny change) * maint.mk (sc_Wundef_boolean): Check for the presence of the config header before grepping, as it's not present before autoreconf/configure are run. Reported by Simon Josefsson. 2010-03-23 Bruno Haible pt_chown: Make it work with automake < 1.11. * modules/pt_chown (Makefile.am): Define pkglibexecdir. Reported by Simon Josefsson. 2010-03-23 Bruno Haible pt_chown: Don't depend on GPLed modules. * lib/pt_chown.c: Don't include idpriv.h. (main): Don't drop privileges. * modules/pt_chown (Depends-on): Remove idpriv-drop. Reported by Simon Josefsson. 2010-03-24 Simon Josefsson * top/maint.mk (sc_texinfo_acronym): Add rule, based on suggestions from karl@freefriends.org (Karl Berry). 2010-03-22 Eric Blake gethostname: further tweaks * lib/unistd.in.h (includes): Only worry about if we are overriding gethostname. Suggested by Bruno Haible. 2010-03-21 Bruno Haible Fix comments. * lib/forkpty.c (rpl_forkpty): Fix comment. * lib/openpty.c (rpl_openpty): Likewise. Reported by Eric Blake. 2010-03-22 Eric Blake gethostname: fix build on mingw * lib/unistd.in.h (includes): Work around fact that mingw re-includes , by avoiding any redeclarations if we are being included by . Reported by Matthias Bolte. 2010-03-21 Bruno Haible forkpty: Provide replacement on AIX, HP-UX, IRIX, Solaris. * lib/forkpty.c (forkpty): New replacement function, from glibc with modifications. * lib/pty.in.h (forkpty): Update declaration. Add comments. * m4/pty.m4 (gl_FORKPTY): If forkpty is not declared, arrange to provide the replacement. * modules/forkpty (Depends-on): Add openpty, login_tty. * m4/pty_h.m4 (gl_PTY_H_DEFAULTS): Initialize HAVE_FORKPTY. * modules/pty (Makefile.am): Substitute HAVE_FORKPTY. * doc/glibc-functions/forkpty.texi: More supported platforms. * config/srclist.txt: Add forkpty.c (commented). 2010-03-21 Bruno Haible * modules/forkpty-tests: Use the common TEMPLATE-TESTS. (Makefile.am): Verify that PTY_LIB is defined. * modules/openpty-tests: Use the common TEMPLATE-TESTS. 2010-03-21 Bruno Haible Tests for module 'login_tty'. * modules/login_tty-tests: New file. * tests/test-login_tty.c: New file. New module 'login_tty'. * lib/login_tty.c: New file. * m4/pty.m4 (gl_FUNC_LOGIN_TTY): New macro. * modules/login_tty: New file. * doc/glibc-functions/login_tty.texi: Mention the new module. 2010-03-21 Bruno Haible login_tty: Documentation. * doc/glibc-functions/login_tty.texi: New file. * doc/gnulib.texi (Glibc ): Include it. 2010-03-21 Bruno Haible pty: Consistent macro naming. * m4/pty_h.m4 (gl_PTY_H): Renamed from gl_PTY. * m4/pty.m4 (gl_FORKPTY, gl_OPENPTY): Update. * modules/pty (configure.ac): Update. 2010-03-21 Bruno Haible Tests for openpty: Make stricter. * tests/test-openpty.c (main): Add test of canonical processing and erase. * modules/openpty-tests (Makefile.am): Verify that PTY_LIB is defined. openpty: Provide replacement on AIX, HP-UX, IRIX, Solaris. * lib/openpty.c (openpty): New replacement function. * lib/pty.in.h: Include . (openpty): Update declaration. Add comments. * m4/pty.m4 (gl_OPENPTY): Require AC_USE_SYSTEM_EXTENSIONS. If openpty is not declared, arrange to provide the replacement. Check for _getpty and posix_openpt. * modules/openpty (Depends-on): Add extensions, fcntl-h, ioctl. * m4/pty_h.m4 (gl_PTY_H_DEFAULTS): Initialize HAVE_OPENPTY. * modules/pty (Makefile.am): Substitute HAVE_OPENPTY. * modules/pty-tests (test_pty_c___LDADD): New variable. * doc/glibc-functions/openpty.texi: More supported platforms. 2010-03-21 Bruno Haible setenv: Tweaks. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Include necessary headers in the test program. * doc/posix-functions/setenv.texi: Update platforms list. 2010-03-21 Bruno Haible New module 'unlockpt'. * lib/unlockpt.c: New file, from glibc with modifications. * m4/unlockpt.m4: New file. * modules/unlockpt: New file. * lib/stdlib.in.h (unlockpt): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Check whether unlockpt is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_UNLOCKPT, HAVE_UNLOCKPT. * modules/stdlib (Makefile.am): Substitute GNULIB_UNLOCKPT, HAVE_UNLOCKPT. * doc/posix-functions/unlockpt.texi: Mention the new module. * tests/test-stdlib-c++.cc: Check GNULIB_NAMESPACE::unlockpt. * config/srclist.txt: Add unlockpt.c (commented). 2010-03-21 Jim Meyering maint.mk: prohibit inclusion of "intprops.h" without use * top/maint.mk (sc_prohibit_intprops_without_use): New rule. 2010-03-21 Bruno Haible New module 'grantpt'. * lib/grantpt.c: New file, from glibc with modifications. * m4/grantpt.m4: New file. * modules/grantpt: New file. * lib/stdlib.in.h (grantpt): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Check whether grantpt is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_GRANTPT, HAVE_GRANTPT. * modules/stdlib (Makefile.am): Substitute GNULIB_GRANTPT, HAVE_GRANTPT. * doc/posix-functions/grantpt.texi: Mention the new module. * tests/test-stdlib-c++.cc: Check GNULIB_NAMESPACE::grantpt. * config/srclist.txt: Add grantpt.c (commented). 2010-03-21 Bruno Haible New module 'pt_chown'. * lib/pt_chown.c: New file, from glibc with modifications. * lib/pty-private.h: New file, from glibc with modifications. * modules/pt_chown: New file. * config/srclist.txt: Add pt_chown.c, pty-private.h (commented). 2010-03-21 Bruno Haible Tests for module 'ptsname'. * modules/ptsname-tests: New file. * tests/test-ptsname.c: New file. New module 'ptsname'. * lib/ptsname.c: New file, from glibc with modifications. * m4/ptsname.m4: New file. * modules/ptsname: New file. * lib/stdlib.in.h (ptsname): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H): Check whether ptsname is declared. (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_PTSNAME, HAVE_PTSNAME. * modules/stdlib (Makefile.am): Substitute GNULIB_PTSNAME, HAVE_PTSNAME. * doc/posix-functions/ptsname.texi: Mention the new module. * tests/test-stdlib-c++.cc: Check GNULIB_NAMESPACE::ptsname. * config/srclist.txt: Add ptsname.c (commented). 2010-03-21 Bruno Haible Tests for module 'ttyname_r'. * modules/ttyname_r-tests: New file. * tests/test-ttyname_r.c: New file. New module 'ttyname_r'. * lib/ttyname_r.c: New file. * m4/ttyname_r.m4: New file. * modules/ttyname_r: New file. * lib/unistd.in.h (ttyname_r): New declaration. * m4/unistd_h.m4 (gl_UNISTD_H): Check whether ttyname_r is declared. (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_TTYNAME_R, HAVE_TTYNAME_R. * modules/unistd (Makefile.am): Substitute GNULIB_TTYNAME_R, HAVE_TTYNAME_R. * tests/test-unistd-c++.cc: Check GNULIB_NAMESPACE::ttyname_r. * doc/posix-functions/ttyname_r.texi: Mention the new module. 2010-03-20 Bruno Haible signal: Undefine macro definitions in C++ mode. * lib/signal.in.h (sigismember, sigemptyset, sigaddset, sigdelset, sigfillset): Undefine macro definitions from the system header in C++ mode. Reported by John W. Eaton . 2010-03-20 Bruno Haible Ensure no #include statements inside extern "C" { ... }. * lib/obstack.h: Shrink extern "C" { ... } region so that it does not contain #include statements. * lib/time.in.h: Likewise. 2010-03-20 Bruno Haible Make _GL_WARN_ON_USE usable in C++ and C mode in the same compilation. * build-aux/warn-on-use.h (_GL_WARN_EXTERN_C): New macro. (_GL_WARN_ON_USE, _GL_WARN_ON_USE_CXX): Likewise. Reported by John W. Eaton . 2010-03-20 Bruno Haible * m4/unlink.m4 (gl_FUNC_UNLINK): Fix last commit. Reported by Jim Meyering. 2010-03-20 Bruno Haible pipe: Set errno upon failure. * lib/pipe.h: Specify that when -1 is returned, errno is set. * lib/pipe.c (create_pipe): Set errno when returning -1. Use the right errno value in error message. 2010-03-20 Bruno Haible Jim Meyering lchown: Avoid "unused variable" warning. * lib/lchown.c (rpl_lchown): Move variable 'st' into #if block. 2010-03-20 Bruno Haible Work around unlink() bug on MacOS X 10.5.6. * lib/unlink.c (rpl_unlink): If UNLINK_PARENT_BUG is defined, fail when attempting to unlink a parent directory. * m4/unlink.m4 (gl_FUNC_UNLINK): Require AC_CANONICAL_HOST. Test for MacOS X 10.5 bug. If the bug is present, define UNLINK_PARENT_BUG and activate for the replacement function. * doc/posix-functions/unlink.texi: Mention the MacOS X 10.5 bug. 2010-03-20 Bruno Haible Fix link errors on Solaris 8. * modules/dirent-tests (test_dirent_c___LDADD): Add LIB_NANOSLEEP. * modules/wctype-tests (test_wctype_c___LDADD): Likewise. 2010-03-19 Jim Meyering regcomp.c: make non-_LIBC implementation of build_range_exp consistent The _LIBC implementation of build_range_exp correctly honors the RE_NO_EMPTY_RANGES flag when checking for reversed range endpoints. However, the non-_LIBC implementation would ignore that syntax-bit flag and return REG_ERANGE unconditionally. This change makes it honor that flag. * lib/regcomp.c (build_range_exp) [!_LIBC]: Add a parameter: "syntax". Make two pointer parameters "const". Use "syntax" bits in order to honor RE_NO_EMPTY_RANGES. (parse_bracket_exp): Update caller. regex.m4: correct the reversed range endpoint ([b-a]) test * m4/regex.m4: When requiring that [b-a] evoke failure, use RE_NO_EMPTY_RANGES. This makes this entire configure-time test pass once again for x86-based systems. 2010-03-19 Bruno Haible scandir: Fix link error on Solaris 8. * lib/scandir.c (_D_EXACT_NAMLEN, _D_ALLOC_NAMLEN): New fallback macros. 2010-03-19 Bruno Haible getusershell: Fix documentation. * doc/glibc-functions/endusershell.texi: Refer to the getusershell module. * doc/glibc-functions/setusershell.texi: Likewise. getusershell: Provide declaration, missing on Solaris 9. * lib/unistd.in.h (getusershell, setusershell, endusershell): Declare also if HAVE_GETUSERSHELL && !HAVE_DECL_GETUSERSHELL. * m4/getusershell.m4 (gl_FUNC_GETUSERSHELL): When the function exists, check whether it is declared. Set HAVE_DECL_GETUSERSHELL. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize HAVE_DECL_GETUSERSHELL, not HAVE_GETUSERSHELL. * modules/unistd (Makefile.am): Substitute HAVE_DECL_GETUSERSHELL, not HAVE_GETUSERSHELL. * doc/glibc-functions/getusershell.texi: Mention the Solaris problem. 2010-03-19 Bruno Haible wctype: Provide iswblank function. * lib/wctype.in.h (iswblank): Provide a replacement also when iswcntrl exists and is fine. * m4/wctype_h.m4 (gl_WCTYPE_H): Also check whether iswcntrl exists. * modules/wctype (Makefile.am): Substitute HAVE_ISWBLANK. * tests/test-wctype.c (main): Re-enable the iswblank tests. * doc/posix-functions/iswblank.texi: Update. 2010-03-19 Bruno Haible Tests of module 'pty' in C++ mode. * modules/pty-tests: New file. * tests/test-pty-c++.cc: New file. * m4/pty_h.m4 (gl_PTY_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. 2010-03-19 Eric Blake logb: fix documentation * doc/posix-functions/logb.texi (logb): Gnulib fixes the cygwin 1.5 declaration bug. forkpty, openpty: prefer glibc's const-safe prototype * lib/forkpty.c (rpl_forkpty): New file. * lib/openpty.c (rpl_openpty): Likewise. * modules/forkpty (Files): Distribute it. * modules/openpty (Files): Likewise. * m4/pty_h.m4 (gl_PTY_H_DEFAULTS): Add new witnesses. Move decl check... * m4/pty.m4 (gl_FORKPTY, gl_OPENPTY): ...here. Request replacement for non-const BSD signature. * modules/pty (Makefile.am): Substitute witnesses. * lib/pty.in.h (forkpty, openpty): Declare replacements. * tests/test-forkpty.c: Update signature check. * tests/test-openpty.c: Likewise. * doc/glibc-functions/forkpty.texi (forkpty): Document the fix. * doc/glibc-functions/openpty.texi (openpty): Likewise. forkpty, openpty: split functions into new modules * modules/pty (Makefile.am): Substitute new witnesses. (Libraries): Move library detection... * modules/forkpty: ...into new module. * modules/openpty: Another new module. * modules/pty-tests: Rename and split... * modules/forkpty-tests: ...to this... * modules/openpty-tests: ...and this. * tests/test-pty.c: Rename and split... * tests/test-forkpty.c: ...to this... * tests/test-openpty.c: ...and this. * m4/pty_h.m4 (gl_PTY_H_DEFAULTS): Add new witnesses. (gl_PTY): Split library searching... * m4/pty.m4 (gl_PTY_LIB): ...into new file. (gl_FORKPTY, gl_OPENPTY): New macros. * lib/pty.in.h (forkpty, openpty): Honor new witnesses. * NEWS: Mention the split. * MODULES.html.sh (Misc): Document the modules. * doc/glibc-functions/forkpty.texi (forkpty): Likewise. * doc/glibc-functions/openpty.texi (openpty): Likewise. pty: improve replacement header * lib/pty.in.h: New file. * modules/pty (Files): Ship it. (Makefile.am): Always build replacement. * m4/pty.m4: Rename... * m4/pty_h.m4: ...to this. (gl_PTY): Modernize setting of witness macros; update check of forkpty to take proper advantage of cache. (gl_PTY_MODULE_INDICATOR, gl_PTY_H_DEFAULTS): New macros. getopt: avoid compiler warning * lib/getopt.c (attribute_hidden): Remove unused macro. 2010-03-18 Bruno Haible Fix link errors on Solaris 8. * modules/iconv-h-tests (test_iconv_h_c___LDADD): Add LIB_NANOSLEEP. * modules/search-tests (test_search_c___LDADD): Likewise. * modules/signal-tests (test_signal_c___LDADD): Likewise. * modules/spawn-tests (test_spawn_c___LDADD): Likewise. * modules/stdio-tests (test_stdio_c___LDADD): Likewise. * modules/sys_select-tests (test_sys_select_c___LDADD): Likewise. * modules/sys_socket-tests (test_sys_socket_c___LDADD): Likewise. * modules/sys_time-tests (test_sys_time_c___LDADD): Likewise. * modules/wchar-tests (test_wchar_c___LDADD): Likewise. 2010-03-18 Bruno Haible Fix bug introduced on 2010-03-14. * m4/spawn_h.m4 (gl_HAVE_POSIX_SPAWN): New macro. (gl_SPAWN_H): Require it. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Likewise. Reported by Simon Josefsson. 2010-03-18 Bruno Haible Fix typo introduced on 2009-12-31. * m4/spawn_h.m4 (gl_SPAWN_H): Check for the declaration of posix_spawn_file_actions_adddup2. 2010-03-17 Bert Wesarg (tiny change) and Eric Blake test-vc-list-files-git: make more robust * tests/test-vc-list-files-git.sh: Unset problematic environment variables. Chain commands together. 2010-03-17 Ludovic Courtès (tiny change) * m4/pty.m4: Unset $ac_cv_have_decl_forkpty before the second `AC_CHECK_DECL' invocation. 2010-03-15 Sergey Poznyakoff * lib/inttostr.c (inttostr): Make sure the invocation of verify appears before executable statements. Suggested by Petr Sumbera . 2010-03-14 Bruno Haible * tests/test-flock.c (test_exclusive): Comment out a test that causes portability problems. Instead use a simpler test. (main): Check that invalid arguments are rejected only on Linux. 2010-03-14 Bruno Haible Fix bug introduced on 2009-12-31. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Invoke gl_PREREQ_SYS_H_WINSOCK2 always. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. Remove SYS_SOCKET_H variable. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_H): Remove test for flock. Update comments. * m4/ctype.m4 (gl_CTYPE_H): Update comments. * m4/langinfo_h.m4 (gl_LANGINFO_H): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H): Likewise. * m4/sys_wait_h.m4 (gl_SYS_WAIT_H): Likewise. 2010-03-14 Bruno Haible Fix values returned by sinl, cosl. * lib/trigl.h: Add specification comments. * lib/sincosl.c (kernel_sinl, kernel_cosl): Fix comments and formula that combines the values from the precomputed table with the values of the Chebyshev polynomials. 2010-03-14 Bruno Haible Fix compilation error when modules 'posix_spawn[p]' are not used. * m4/spawn_h.m4 (gl_SPAWN_H): Set HAVE_POSIX_SPAWN here. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): ... not here. 2010-03-14 Bruno Haible Fix compilation error on mingw when module 'time_r' is not used. * lib/time.in.h (localtime_r, gmtime_r): Declare only if GNULIB_TIME_R is 1. * tests/test-time-c++.cc (localtime_r, gmtime_r): Likewise. * modules/time_r (configure.ac): Invoke gl_TIME_MODULE_INDICATOR. * modules/time (Makefile.am): Substitute GNULIB_TIME_R. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize GNULIB_TIME_R. 2010-03-14 Bruno Haible Fix compilation error with Sun C. * lib/strtol.c: Use LLONG_MIN instead of GCC specific LONG_LONG_MIN. Use LLONG_MAX instead of GCC specific LONG_LONG_MAX. Use ULLONG_MAX instead of GCC specific ULONG_LONG_MAX. * lib/xstrtoll.c: Likewise. * lib/xstrtoull.c: Likewise. 2010-03-13 Bruno Haible Allow the user to disable C++ code and tests. * m4/ansi-c++.m4 (gl_CXX_CHOICE): New macro. (gl_PROG_ANSI_CXX): Require it. 2010-03-13 Bruno Haible * DEPENDENCIES (libtool): Mention libtool 2.2.x requirement in special cases. 2010-03-13 Bruno Haible Test that gnulib does not break the standard C++ headers. * tests/test-locale-c++2.cc: New file. * modules/locale-tests (Files): Add it. (Makefile.am): Compile it for test-locale-c++. * tests/test-math-c++2.cc: New file. * modules/math-tests (Files): Add it. (Makefile.am): Compile it for test-math-c++. * tests/test-signal-c++2.cc: New file. * modules/signal-tests (Files): Add it. (Makefile.am): Compile it for test-signal-c++. * tests/test-stdio-c++2.cc: New file. * modules/stdio-tests (Files): Add it. (Makefile.am): Compile it for test-stdio-c++. * tests/test-stdlib-c++2.cc: New file. * modules/stdlib-tests (Files): Add it. (Makefile.am): Compile it for test-stdlib-c++. * tests/test-string-c++2.cc: New file. * modules/string-tests (Files): Add it. (Makefile.am): Compile it for test-string-c++. * tests/test-time-c++2.cc: New file. * modules/time-tests (Files): Add it. (Makefile.am): Compile it for test-time-c++. Reported by John W. Eaton . 2010-03-13 Bruno Haible * gnulib-tool (func_usage): Clarify which options are available for --create-testdir and --create-megatestdir. 2010-03-13 Bruno Haible Fix compilation error with glibc >= 2.10 and g++ >= 4.4. * build-aux/warn-on-use.h (_GL_WARN_ON_USE_CXX): New macro. * build-aux/c++defs.h (_GL_CXXALIASWARN1): New macro. * lib/string.in.h (memchr, memrchr, rawmemchr, strchrnul, strpbrk, strstr, strcasestr): Use _GL_CXXALIASWARN1 instead of _GL_CXXALIASWARN when appropriate. Reported by Jim Meyering. 2010-03-12 Simon Josefsson * gnulib-tool (func_import): Explain origin of code. 2010-03-12 Bruno Haible Fix problem with automake's definition of CXXLINK. * gnulib-tool (func_create_testdir): After LT_INIT, also use LT_LANG. Reported by Simon Josefsson and Ludovic Courtès. 2010-03-12 Bruno Haible * doc/gnulib-intro.texi (Steady Development): Mention Ian Beckwith's stable releases. 2010-03-11 Bruno Haible Fix problems with overloaded C++ definitions of memchr, strpbrk, etc. * build-aux/c++defs.h (_GL_CXXALIAS_SYS_CAST2): Make it work regardless whether the system provides one variant or multiple variants of the function. * lib/string.in.h (memchr, strpbrk): Use _GL_CXXALIAS_SYS_CAST2 for all C++ compilers. (memrchr, rawmemchr, strchrnul, strstr, strcasestr): Use _GL_CXXALIAS_SYS_CAST2 instead of _GL_CXXALIAS_SYS. Reported by Jim Meyering. 2010-03-09 Simon Josefsson * gnulib-tool (LIBTOOLPATH): Fix cut'n'paste bug. 2010-03-08 Bruno Haible gnulib-tool: Add support for --libtool in --create-testdir. * gnulib-tool (LIBTOOLPATH, LIBTOOLIZE): New variables. (func_create_testdir): Emit LT_INIT invocations. Invoke LIBTOOLIZE. 2010-03-08 Eric Blake gnulib-tool.texi: mention possibility of git submodule * doc/gnulib-tool.texi (VCS Issues): Add details about using git submodules. * doc/.gitignore: Ignore another generated file. 2010-03-08 Karl Berry * doc/gnulib-tool.texi (VCS Issues): Mention third option of committing gnulib files while skipping others. 2010-03-07 Bruno Haible Tests of module 'wctype' in C++ mode. * tests/test-wctype-c++.cc: New file. * modules/wctype-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-wctype-c++. Tests of module 'wchar' in C++ mode. * tests/test-wchar-c++.cc: New file. * modules/wchar-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-wchar-c++. * m4/wchar_h.m4 (gl_WCHAR_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'unistd' in C++ mode. * tests/test-unistd-c++.cc: New file. * modules/unistd-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-unistd-c++. * m4/unistd_h.m4 (gl_UNISTD_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'time' in C++ mode. * tests/test-time-c++.cc: New file. * modules/time-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-time-c++. * m4/time_h.m4 (gl_TIME_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'sys_time' in C++ mode. * tests/test-sys_time-c++.cc: New file. * modules/sys_time-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-sys_time-c++. * m4/sys_time_h.m4 (gl_SYS_TIME_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'sys_stat' in C++ mode. * tests/test-sys_stat-c++.cc: New file. * modules/sys_stat-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-sys_stat-c++. * m4/sys_stat_h.m4 (gl_SYS_STAT_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'sys_socket' in C++ mode. * tests/test-sys_socket-c++.cc: New file. * modules/sys_socket-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-sys_socket-c++. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'sys_select' in C++ mode. * tests/test-sys_select-c++.cc: New file. * modules/sys_select-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-sys_select-c++. * m4/sys_select_h.m4 (gl_SYS_SELECT_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'sys_ioctl' in C++ mode. * tests/test-sys_ioctl-c++.cc: New file. * modules/sys_ioctl-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-sys_ioctl-c++. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'string' in C++ mode. * tests/test-string-c++.cc: New file. * modules/string-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-string-c++. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'stdlib' in C++ mode. * tests/test-stdlib-c++.cc: New file. * modules/stdlib-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-stdlib-c++. * m4/stdlib_h.m4 (gl_STDLIB_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'stdio' in C++ mode. * tests/test-stdio-c++.cc: New file. * modules/stdio-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-stdio-c++. * m4/stdio_h.m4 (gl_STDIO_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'spawn' in C++ mode. * tests/test-spawn-c++.cc: New file. * modules/spawn-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-spawn-c++. * m4/spawn_h.m4 (gl_SPAWN_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'signal' in C++ mode. * tests/test-signal-c++.cc: New file. * modules/signal-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-signal-c++. * m4/signal_h.m4 (gl_SIGNAL_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'search' in C++ mode. * tests/test-search-c++.cc: New file. * modules/search-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-search-c++. * m4/search_h.m4 (gl_SEARCH_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'math' in C++ mode. * tests/test-math-c++.cc: New file. * modules/math-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-math-c++. * m4/math_h.m4 (gl_MATH_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'locale' in C++ mode. * tests/test-locale-c++.cc: New file. * modules/locale-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-locale-c++. * m4/locale_h.m4 (gl_LOCALE_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'langinfo' in C++ mode. * tests/test-langinfo-c++.cc: New file. * modules/langinfo-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-langinfo-c++. * m4/langinfo_h.m4 (gl_LANGINFO_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'iconv-h' in C++ mode. * tests/test-iconv-h-c++.cc: New file. * modules/iconv-h-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-iconv-h-c++. Tests of module 'glob' in C++ mode. * tests/test-glob-c++.cc: New file. * modules/glob-tests (Files): Add it. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-glob-c++. Tests of module 'fcntl-h' in C++ mode. * tests/test-fcntl-h-c++.cc: New file. * modules/fcntl-h-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-fcntl-h-c++. * m4/fcntl_h.m4 (gl_FCNTL_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. Tests of module 'dirent' in C++ mode. * tests/test-dirent-c++.cc: New file. * modules/dirent-tests (Files): Add it and tests/signature.h. (Depends-on): Add ansi-c++-opt. (Makefile.am): Arrange to compile and run test-dirent-c++. * m4/dirent_h.m4 (gl_DIRENT_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR. New module 'ansi-c++-opt'. * modules/ansi-c++-opt: New file. * m4/ansi-c++.m4: New file, from GNU gettext with modifications. Document C++ namespace mode. * doc/gnulib.texi (A C++ namespace for gnulib): New section. wctype: Avoid #define replacements in C++ mode. * lib/wctype.in.h: Include c++defs.h, warn-on-use.h. (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit, towlower, towupper): In C++, define a namespaced alias symbol. * m4/wctype_h.m4 (gl_WCTYPE_H): Don't set WCTYPE_H. * modules/wctype (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Provide a wctype.h replacement always. Update wctype.h rule. wchar: Avoid #define replacements in C++ mode. * lib/wchar.in.h: Include c++defs.h. (btowc, wctob, mbsinit, mbrtowc, mbrlen, mbsrtowcs, mbsnrtowcs, wcrtomb, wcsrtombs, wcsnrtombs): In C++, define a namespaced alias symbol. (wcwidth): Likewise. Fix prototype to be POSIX compliant. * modules/wchar (Depends-on): Add c++defs. (Makefile.am): Update wchar.h rule. unistd: Avoid #define replacements in C++ mode. * lib/unistd.in.h: Include c++defs.h. (chown, close, dup, dup2, dup3, euidaccess, faccessat, fchdir, fchownat, fsync, ftruncate, getcwd, getdomainname, getdtablesize, getgroups, gethostname, getlogin, getlogin_r, getpagesize, getusershell, setusershell, endusershell, lchown, link, linkat, lseek, pipe2, pread, readlink, readlinkat, rmdir, sleep, symlink, symlinkat, unlink, unlinkat, usleep, write): In C++, define a namespaced alias symbol. (environ): Update. * modules/unistd (Depends-on): Add c++defs. (Makefile.am): Update unistd.h rule. time: Avoid #define replacements in C++ mode. * lib/time.in.h: Include c++defs.h, warn-on-use.h. (nanosleep, mktime, localtime_r, gmtime_r, strptime, timegm): In C++, define a namespaced alias symbol. * m4/time_h.m4 (gl_TIME_MODULE_INDICATOR): New macro. (gl_HEADER_TIME_H_DEFAULTS): Initialize also GNULIB_MKTIME, GNULIB_NANOSLEEP, GNULIB_STRPTIME, GNULIB_TIMEGM. * modules/time (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Update time.h rule. * modules/mktime (configure.ac): Invoke gl_TIME_MODULE_INDICATOR. * modules/nanosleep (configure.ac): Likewise. * modules/strptime (configure.ac): Likewise. * modules/timegm (configure.ac): Likewise. sys_time: Avoid #define replacements in C++ mode. * lib/sys_time.in.h: Include c++defs.h. (gettimeofday): In C++, define a namespaced alias symbol. * modules/sys_time (Depends-on): Add c++defs. (Makefile.am): Update sys/time.h rule. sys_stat: Avoid #define replacements in C++ mode. * lib/sys_stat.in.h: Include c++defs.h. (fchmodat, fstat, fstatat, futimens, lchmod, lstat, mkdir, mkdirat, mkfifo, mkfifoat, mknod, mknodat, utimensat): In C++, define a namespaced alias symbol. In C++, define a namespaced alias symbol. * modules/sys_stat (Depends-on): Add c++defs. (Makefile.am): Update sys/stat.h rule. sys_socket: Avoid #define replacements in C++ mode. * lib/sys_socket.in.h: Handle the case of recursive include on Cygwin. Include c++defs.h. Include warn-on-use.h earlier. Enable the function definitions also when the system has a . (socket, connect, accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt, shutdown, accept4): In C++, define a namespaced alias symbol. * modules/sys_socket (Depends-on): Add c++defs. (Makefile.am): Update sys/socket.h rule. sys_select: Avoid #define replacements in C++ mode. * lib/sys_select.in.h: Include c++defs.h. Enable the function definitions also when the system has a . (select): In C++, define a namespaced alias symbol. * modules/sys_select (Depends-on): Add c++defs. (Makefile.am): Update sys/select.h rule. sys_ioctl: Avoid #define replacements in C++ mode. * lib/sys_ioctl.in.h: Include c++defs.h. (ioctl): In C++, define a namespaced alias symbol. * modules/sys_ioctl (Depends-on): Add c++defs. (Makefile.am): Update sys/ioctl.h rule. string: Avoid #define replacements in C++ mode. * lib/string.in.h: Include c++defs.h. (stpncpy): Define to rpl_stpncpy, not gnu_stpncpy. (memchr, memmem, mempcpy, memrchr, rawmemchr, stpcpy, stpncpy, strchrnul, strdup, strndup, strnlen, strpbrk, strsep, strstr, strcasestr, strtok_r, mbslen, mbschr, mbsrchr, mbspbrk, strerror, strsignal, strverscmp): In C++, define a namespaced alias symbol. * modules/string (Depends-on): Add c++defs. (Makefile.am): Update string.h rule. stdlib: Avoid #define replacements in C++ mode. * lib/stdlib.in.h: Include c++defs.h. (atoll, calloc, canonicalize_file_name, getloadavg, getsubopt, malloc, mkdtemp, mkostemp, mkostemps, mkstemp, mkstemps, putenv, random_r, srandom_r, initstate_r, setstate_r, realloc, realpath, rpmatch, setenv, strtod, strtoll, strtoull, unsetenv): In C++, define a namespaced alias symbol. * modules/stdlib (Depends-on): Add c++defs. (Makefile.am): Update stdlib.h rule. stdio: Avoid #define replacements in C++ mode. * lib/stdio.in.h: Include c++defs.h. (dprintf, fclose, fflush, fopen, fprintf, fpurge, fputc, fputs, freopen, fseek, fseeko, ftell, ftello, fwrite, getdelim, getline, obstack_printf, obstack_vprintf, perror, popen, printf, fputc, putchar, puts, remove, rename, renameat, snprintf, sprintf, asprintf, vasprintf, vdprintf, vfprintf, vprintf, vsnprintf, vsprintf): In C++, define a namespaced alias symbol. * modules/stdio (Depends-on): Add c++defs. (Makefile.am): Update stdio.h rule. spawn: Avoid #define replacements in C++ mode. * lib/spawn.in.h: Include c++defs.h. (posix_spawn, posix_spawnp, posix_spawnattr_init, posix_spawnattr_destroy, posix_spawnattr_getsigdefault, posix_spawnattr_setsigdefault, posix_spawnattr_getsigmask, posix_spawnattr_setsigmask, posix_spawnattr_getflags, posix_spawnattr_setflags, posix_spawnattr_getpgroup, posix_spawnattr_setpgroup, posix_spawnattr_getschedpolicy, posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam, posix_spawnattr_setschedparam, posix_spawn_file_actions_init, posix_spawn_file_actions_destroy, posix_spawn_file_actions_addopen, posix_spawn_file_actions_addclose, posix_spawn_file_actions_adddup2): In C++, define a namespaced alias symbol. * modules/spawn (Depends-on): Add c++defs. (Makefile.am): Update spawn.h rule. signal: Avoid #define replacements in C++ mode. * lib/signal.in.h: Include c++defs.h. (sigismember, sigemptyset, sigaddset, sigdelset, sigfillset, sigpending, sigprocmask, signal, raise, sigaction): In C++, define a namespaced alias symbol. * modules/signal (Depends-on): Add c++defs. (Makefile.am): Update signal.h rule. search: Avoid #define replacements in C++ mode. * lib/search.in.h: Include c++defs.h. (_gl_search_compar_fn, _gl_search_action_fn): New types. (tsearch, tfind, tdelete, twalk): In C++, define a namespaced alias symbol. * modules/search (Depends-on): Add c++defs. (Makefile.am): Update search.h rule. math: Avoid #define replacements in C++ mode. * lib/math.in.h: Include c++defs.h. (frexp, acosl, asinl, atanl, ceilf, ceill, cosl, expl, floorf, floorl, frexpl, ldexpl, logl, roundf, round, roundl, sinl, sqrtl, tanl, truncf, trunc, truncl): In C++, define a namespaced alias symbol. * modules/math (Depends-on): Add c++defs. (Makefile.am): Update math.h rule. locale: Avoid #define replacements in C++ mode. * lib/locale.in.h: Include c++defs.h. (duplocale): In C++, define a namespaced alias symbol. * m4/locale_h.m4 (gl_LOCALE_H_DEFAULTS): Initialize HAVE_DUPLOCALE. * m4/duplocale.m4 (gl_FUNC_DUPLOCALE): Set HAVE_DUPLOCALE. * modules/locale (Depends-on): Add c++defs. (Makefile.am): Update locale.h rule. Substitute HAVE_DUPLOCALE. langinfo: Avoid #define replacements in C++ mode. * lib/langinfo.in.h: Include c++defs.h. (nl_langinfo): In C++, define a namespaced alias symbol. * modules/langinfo (Depends-on): Add c++defs. (Makefile.am): Update langinfo.h rule. iconv-h: Avoid #define replacements in C++ mode. * lib/iconv.in.h: Include c++defs.h, warn-on-use.h. (iconv_open, iconv, iconv_close): In C++, define a namespaced alias symbol. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): Invoke gl_REPLACE_ICONV_H whenever iconv is present. * modules/iconv-h (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Update iconv.h rule. glob: Avoid #define replacements in C++ mode. * lib/glob.in.h: Include c++defs.h, warn-on-use.h. (_gl_glob_errfunc_fn): New type. (glob, globfree, glob_pattern_p): In C++, define a namespaced alias symbol. * modules/glob (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Update glob.h rule. fcntl-h: Avoid #define replacements in C++ mode. * lib/fcntl.in.h: Include c++defs.h. (fcntl, open, openat): In C++, define a namespaced alias symbol. * modules/fcntl-h (Depends-on): Add c++defs. (Makefile.am): Update fcntl.h rule. dirent: Avoid #define replacements in C++ mode. * lib/dirent.in.h: Include c++defs.h. (closedir, fdopendir, opendir, scandir, alphasort): In C++, define a namespaced alias symbol. (dirfd): Update declaration. * modules/dirent (Depends-on): Add c++defs. (Makefile.am): Update dirent.h rule. ctype: Make it usable in C++ code. * lib/ctype.in.h: Include c++defs.h. (isblank): Declare as extern "C". * modules/ctype (Depends-on): Add c++defs. (Makefile.am): Update ctype.h rule. New module 'c++defs'. * modules/c++defs: New file. * build-aux/c++defs.h: New file. Reported by John W. Eaton . 2010-03-07 Bruno Haible logb: Provide missing declaration for Cygwin. * lib/math.in.h (logb): New declaration. * m4/logb.m4: New file. * modules/logb (Files): Add m4/logb.m4. (Depends-on): Add math. (configure.ac): Invoke gl_FUNC_LOGB, gl_MATH_MODULE_INDICATOR. * m4/math_h.m4 (gl_MATH_H): Check also for logb declaration. (gl_MATH_H_DEFAULTS): Initialize GNULIB_LOGB, HAVE_DECL_LOGB. * modules/math (Makefile.am): Substitute GNULIB_LOGB, HAVE_DECL_LOGB. * doc/posix-functions/logb.texi: Mention the Cygwin bug. 2010-03-07 Bruno Haible Fix test-cond link error. * tests/test-cond.c: Include . 2010-03-07 Bruno Haible Fix test-dirent-safer link error. * modules/dirent-safer-tests (Makefile.am): Define test_dirent_safer_LDADD. 2010-03-07 Bruno Haible * gnulib-tool (func_create_testdir): Don't use 'lib-ignore' module among default module list. 2010-03-07 Bruno Haible Fix link error on platforms with GNU libiconv. * modules/unistr/u8-strcoll-tests (Makefile): Define test_u8_strcoll_LDADD. * modules/unistr/u16-strcoll-tests (Makefile): Define test_u16_strcoll_LDADD. * modules/unistr/u32-strcoll-tests (Makefile): Define test_u32_strcoll_LDADD. 2010-03-07 Bruno Haible Use POSIX declarations for socket functions. * lib/sys_socket.in.h (rpl_connect, rpl_accept, rpl_bind, rpl_getpeername, rpl_getsockname, rpl_recv, rpl_send, rpl_recvfrom, rpl_sendto): Change declaration to match POSIX. * lib/connect.c (rpl_connect): Likewise. * lib/accept.c (rpl_accept): Likewise. * lib/bind.c (rpl_bind): Likewise. * lib/getpeername.c (rpl_getpeername): Likewise. * lib/getsockname.c (rpl_getsockname): Likewise. * lib/recv.c (rpl_recv): Likewise. * lib/send.c (rpl_send): Likewise. * lib/recvfrom.c (rpl_recvfrom): Likewise. * lib/sendto.c (rpl_sendto): Likewise. 2010-03-06 Bruno Haible Clarify access, euidaccess, faccessat. * doc/posix-functions/faccessat.texi: Mention security problem under "Other problems", not "Portability problems". * doc/posix-functions/access.texi: Likewise. Mention a related security problem. * doc/glibc-functions/euidaccess.texi: Mention security problems. * lib/euidaccess.c: Add comments about platforms. * lib/unistd.in.h (access, euidaccess): Add warnings. 2010-03-07 Bruno Haible Ensure posix_spawnattr_{get,set}sched{policy,param} are defined. * lib/spawn.in.h (POSIX_SPAWN_SETSCHEDPARAM): Define fallback. (POSIX_SPAWN_SETSCHEDULER): Likewise. (POSIX_SPAWN_USEVFORK): Define in a way that works when POSIX_SPAWN_SETSCHEDPARAM and POSIX_SPAWN_SETSCHEDULER are zero. (posix_spawnattr_getschedpolicy, posix_spawnattr_setschedpolicy): Also declare when POSIX_SPAWN_SETSCHEDULER is zero. (posix_spawnattr_getschedparam, posix_spawnattr_setschedparam): Also declare when POSIX_SPAWN_SETSCHEDPARAM is zero. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Test whether POSIX_SPAWN_SETSCHEDULER or POSIX_SPAWN_SETSCHEDPARAM are zero. * modules/posix_spawnattr_getschedparam (configure.ac): Enable the replacement also when POSIX_SPAWN_SETSCHEDPARAM is zero. * modules/posix_spawnattr_setschedparam (configure.ac): Likewise. * modules/posix_spawnattr_getschedpolicy (configure.ac): Enable the replacement also when POSIX_SPAWN_SETSCHEDULER is zero. * modules/posix_spawnattr_setschedpolicy (configure.ac): Likewise. * lib/spawnattr_getschedparam.c (posix_spawnattr_getschedparam): Do nothing if POSIX_SPAWN_SETSCHEDPARAM is zero. * lib/spawnattr_setschedparam.c (posix_spawnattr_setschedparam): Likewise. * lib/spawnattr_getschedpolicy.c (posix_spawnattr_getschedpolicy): Do nothing if POSIX_SPAWN_SETSCHEDULER is zero. * lib/spawnattr_setschedpolicy.c (posix_spawnattr_setschedpolicy): Likewise. * tests/test-spawn.c (main): Make it work when POSIX_SPAWN_SETSCHEDPARAM and POSIX_SPAWN_SETSCHEDULER are zero. 2010-03-07 Bruno Haible Fix incorrect Makefile.am generation in German locale. * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Execute sed command with character range in C locale. 2010-03-06 Bruno Haible Tests for module 'iconv-h'. * modules/iconv-h-tests: New file. * tests/test-iconv-h.c: New file. New module 'iconv-h'. * modules/iconv-h: New file. * modules/iconv_open (Files): Remove lib/iconv.in.h, m4/iconv_h.m4. (Depends-on): Add iconv-h. Remove include_next, arg-nonnull. (configure.ac): Remove gl_ICONV_H. (Makefile.am): Remove rule for iconv.h. 2010-03-06 Bruno Haible More consistent naming of *.m4 files. * m4/wctype_h.m4: Renamed from m4/wctype.m4. * modules/wctype (Files): Update. More consistent naming of *.m4 files. * m4/wchar_h.m4: Renamed from m4/wchar.m4. * modules/wchar (Files): Update. 2010-03-06 Jim Meyering euidaccess: relax license to LGPLv2+ * modules/euidaccess (License): Relax to LGPLv2+. 2010-03-06 Bruno Haible Prefer lib_SOURCES over unconditional AC_LIBOBJ. * modules/exitfail (configure.ac): Remove AC_LIBOBJ invocation. (Makefile.am): Augment lib_SOURCES instead. 2010-03-04 Jim Meyering utime: remove obsolete module This module, like autoconf's AC_FUNC_UTIME_NULL macro, has been unnecessary for years, and has been marked as obsolete for 10 months. * modules/utime: Remove file. * lib/utime.c: Remove file. * m4/utime.m4: Remove file. * m4/utimes-null.m4: Remove file. * doc/posix-functions/utime.texi (utime): Remove reference to the module. Move the sole "fixed by gnulib" item into the "problems not fixed by Gnulib" list. * MODULES.html.sh (func_all_modules): Remove reference to "utime". 2010-03-05 Simon Josefsson * modules/exit (License): Relax license to LGPLv2+. (Status): Mark as obsolete. * NEWS: Mention deprecated 'exit' module. * doc/posix-functions/exit.texi: Recommend 'stdlib' module instead of now obsolete 'exit'. 2010-03-02 Ralf Wildenhues fts-lgpl: remove unused module * modules/fts-lgpl: Remove. * MODULES.html.sh (func_all_modules): Adjust. * check-module (find_included_lib_files): Adjust. * m4/fts.m4 (gl_FUNC_FTS_LGPL): Remove. 2010-03-02 Ben Walton (tiny change) copy-acl: enhance Solaris ACL error handling * lib/copy-acl.c (qcopy_acl): Also ignore EOPNOTSUPP. * lib/set-mode-acl.c (qset_acl): Likewise. 2010-03-02 Bruno Haible spawn: Don't override the system defined values on FreeBSD 8. * lib/spawn.in.h (POSIX_SPAWN_RESETIDS, POSIX_SPAWN_SETPGROUP, POSIX_SPAWN_SETSIGDEF, POSIX_SPAWN_SETSIGMASK, POSIX_SPAWN_SETSCHEDPARAM, POSIX_SPAWN_SETSCHEDULER): Don't redefine if HAVE_POSIX_SPAWN is 1. Reported by Johan van Selst via Eric Blake. 2010-03-01 Bruno Haible * doc/gnulib-tool.texi (Initial import): Clarify the requirements regarding Automake. 2010-02-25 Bruno Haible Fix breakage of gnulib-tool with ksh, introduced on 2010-02-21. * gnulib-tool: Define 'echo' as a function only before the ksh alias setting, not afterwards. Reported by Ben Walton . 2010-02-24 Eric Blake bootstrap, git-version-gen: use timestamp * build-aux/git-version-gen (scriptversion): Force UTC. * build-aux/bootstrap (scriptversion): New variable. bootstrap: allow older git * build-aux/bootstrap (GNULIB_SRCDIR): Add fallback if git is older than 1.6.4. Requested by the libvirt project. 2010-02-23 Eric Blake warn-on-use: work with old autoconf * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Accomodate older AS_VAR semantics of autoconf 2.60. Reported by Bruno Haible. bootstrap: improve some comments * build-aux/bootstrap: Drop unneeded emacs hint. Add some clarification comments. gettimeofday: provide correct function * lib/gettimeofday.c (gettimeofday): Provide rpl_gettimeofday only when replacement is declared, otherwise provide gettimeofday. Reported by Michael Goffioul. 2010-02-23 Jim Meyering lib-ignore: relax license to "unlimited", not LGPLv2+ * modules/lib-ignore (License): Relax to "unlimited". 2010-02-23 Jim Meyering lib-ignore: relax license to LGPLv2+ * modules/lib-ignore (License): Relax to LGPLv2+. 2010-02-22 Eric Blake lseek: avoid bash 3.2 broken pipe bug * m4/lseek.m4 (gl_FUNC_LSEEK): Drain pipe, to avoid spurious warning from bash 3.2. Reported by Ben Pfaff, with analysis from Bruno Haible. bootstrap: support non-FSF copyright holder * build-aux/bootstrap (COPYRIGHT_HOLDER, with_gettext): Allow bootstrap.conf override of COPYRIGHT_HOLDER. (MSGID_BUGS_ADDRESS): Allow URL rather than email. bootstrap: interoperate with gettext 0.14.1 * build-aux/bootstrap (slurp): Fix typo when using older gettext. bootstrap: allow for alternate submodule location * build-aux/bootstrap (gnulib_path): New variable; use instead of hardcoding submodule location. (gnulib_mk): Allow direct use of Makefile.am. bootstrap: use GNULIB_SRCDIR to reduce disk usage * build-aux/bootstrap (GNULIB_SRCDIR): If set, use as a reference, rather than reconfiguring where the submodule points. gettimeofday: restore support for platforms that lack function * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Also compile replacement if function is missing. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_DEFAULTS): New witness. * modules/sys_time (Makefile.am): Substitute it. * lib/sys_time.in.h (gettimeofday): Check it. Reported by Michael Goffioul. 2010-02-21 Bruno Haible * lib/stdio.in.h (obstack_printf): Fix typo. 2010-02-21 Jose E. Marchesi vc-list-files: use bzr ls's -R option * build-aux/vc-list-files: Invoke bazaar to generate a recursive list of versioned files based on 'dir' (usage of -R in 'bzr ls'). 2010-02-21 Jim Meyering init.sh: fix EXEEXT shims to work also for names like test-prog * tests/init.sh: Re-exec a better shell, when needed. If the current shell lacks support for posix $(...), an init.sh-using test will now try to find a shell that supports that. If EXEEXT is nonempty, we also require support for hyphen-in-alias-name and shell substitutions like ${var#glob}. Failure to find such a shell results in a skipped test. 2010-02-21 Bruno Haible Really work around "broken pipe" error message from bash 3.2. * gnulib-tool (func_reset_sigpipe): Remove function. (echo): In bash 3.2, define to a function that uses printf. Analyzed by Ralf Wildenhues, Chet Ramey, Ben Pfaff. 2010-02-20 Bruno Haible Restore support for automake 1.9.6 with autoconf 2.61. * m4/gnulib-common.m4 (AC_PROG_MKDIR_P): Ensure MKDIR_P is AC_SUBSTed. Reported by James Youngman . 2010-02-20 Bruno Haible Improve *printf warning condition. * lib/stdio.in.h (fprintf, printf, vfprintf, vprintf): Emit warning also if GNULIB_POSIXCHECK is defined, the *-posix module is not used, and the function is overridden due to SIGPIPE emulation. 2010-02-20 Bruno Haible * lib/stdio.in.h: Tweak comments. 2010-02-19 Bruno Haible Make it easier to find modules. New gnulib-tool option '--find'. * gnulib-tool: New option --find. (func_usage): Document it. (func_sanitize_modulelist): New function, extracted from func_all_modules. (func_all_modules): Invoke it. * doc/gnulib-tool.texi (Which modules?): New node. 2010-02-18 Markus Duft (tiny change) * lib/sys_select.in.h: Provide select replacement even if sys/select.h exists on a system, for Interix. 2010-02-18 Jim Meyering init.sh: don't use $(...) just yet * tests/init.sh (create_exe_shim_functions_): Use `...`, not $(...), to accommodate e.g., Solaris' /bin/sh. 2010-02-17 Bruno Haible * doc/posix-headers/netdb.texi: Mention NetBSD 5.0 problem. Reported by Ludovic Courtès . 2010-02-16 Simon Josefsson * modules/userspec-tests (test_userspec_LDADD): Add variable, for linking with -lintl. 2010-02-17 Simon Josefsson * lib/netdb.in.h (AI_V4MAPPED, AI_ALL, AI_ADDRCONFIG): Define to 0 if not provided by the system's netdb.h. Reported by ludo@gnu.org (Ludovic Courtès). 2010-02-15 Jim Meyering init.sh: improve portability and efficiency * tests/init.sh (find_exe_basenames_): Remove unnecessary use of "dummy" in a for loop. Use '!', not '^' to select the complement of a character set used in a "case" statement. Use shell variable manipulation, a la ${...%.exe}, rather than sed. Suggestions from Eric Blake. init.sh: automatically accommodate programs with the .exe suffix Automatically arrange for an invocation of "prog" to execute the program named "prog$EXEEXT" (usually prog.exe). Thus, all invocations may use the simpler "prog", yet still work when built on a system that requires specifying the added suffix. Do this by constructing a function named "prog" that invokes "prog.exe" for each .exe file in selected directories. * tests/init.sh (find_exe_basenames_): New function. (create_exe_shim_functions_): New function. (path_prepend_): Use it. maint.mk: mark syntax-check sc_*.m rules as .PHONY * top/maint.mk ($(syntax-check-rules)): Add .PHONY, so that "make -t syntax-check" doesn't create a ton of sc_*.m files. 2010-02-14 Jim Meyering maint.mk: prohibit inclusion of "hash-pjw.h" without_use * top/maint.mk (sc_prohibit_hash_without_use): Re-add "@". (sc_prohibit_hash_pjw_without_use): New rule. maint.mk: allow the default upload destination dir to be overridden * top/maint.mk (upload_dest_dir_): Define with a default that preserves the status quo. (emit_upload_commands): Use it, rather than hard-coding $(PACKAGE). Reported by Peter Simons. maint.mk: prohibit inclusion of "hash.h" without_use * top/maint.mk (sc_prohibit_hash_without_use): New rule. 2010-02-10 Jim Meyering maint.mk: prohibit inclusion of "ignore-value.h" without_use * top/maint.mk (sc_prohibit_ignore_value_without_use): New rule. 2010-02-09 Eric Blake and Bruno Haible obstack-printf-posix: ensure declaration * m4/obstack-printf.m4 (gl_DECL_OBSTACK_PRINTF): New macro, extracted from gl_FUNC_OBSTACK_PRINTF. (gl_FUNC_OBSTACK_PRINTF): Invoke it. * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_POSIX): Likewise. * lib/stdio.in.h (obstack_printf, obstack_vprintf): Declare also if GNULIB_OBSTACK_PRINTF_POSIX is 1 and GNULIB_OBSTACK_PRINTF is 0. 2010-02-08 Bruno Haible gnulib-tool: Fix typo in 2010-02-07 commit. * gnulib-tool (func_get_dependencies): Fix typo in last commit. Reported by Eric Blake. 2010-02-07 Bruno Haible gnulib-tool: Fix up caching patches. * gnulib-tool: New options --cache-modules, --no-cache-modules. Remove option --no-cache. Use associative arrays when supported by the shell. (sed_comments): New variable. (modcache): Renamed from do_cache. (sed_extract_field_header): Renamed from sed_extract_cache_prog. Don't abbreviate unnecessarily. (have_associative): New variable. (func_cache_var): Define correctly for bash 1.x. Define in an optimized way also for ksh and zsh. (func_init_sed_convert_to_cache_statements): New function, extracted from func_cache_lookup_module. Add support for associative arrays. Don't set the c_MODULE_cached variable here. Ignore all lines before the first field header. Remove only the final newline, not all trailing newlines. Support empty fields correctly. Limit the use of 'eval' to assignments. (func_get_description, func_get_status, func_get_notice, func_get_applicability, func_get_filelist, func_get_dependencies, func_get_autoconf_early_snippet, func_get_autoconf_snippet, func_get_automake_snippet, func_get_include_directive, func_get_link_directive, func_get_license, func_get_maintainer): Update documentation. List the unoptimized code first. Add support for associative arrays. Limit the use of 'eval' to assignments. (func_get_applicability): Undo stylistic pessimisations. (func_get_automake_snippet, func_get_include_directive): Reduce code duplication. (func_modules_transitive_closure, func_modules_add_dummy, func_modules_notice, func_modules_to_filelist, func_add_file, func_update_file, func_emit_lib_Makefile_am, func_emit_po_Makevars, func_emit_po_POTFILES_in, func_emit_tests_Makefile_am, func_import, func_create_testdir, func_create_megatestdir): Update documentation. 2010-01-18 Ralf Wildenhues * gnulib-tool (func_cache_lookup_module): Store the module name belonging to the cache variable; error out if two different module names map to the same cache variable name. 2010-01-18 Ralf Wildenhues gnulib-tool: Make caching optional. * gnulib-tool: Accept option --no-cache, turning off $do_cache. Update matching short versions of --no-changelog. (func_usage): Update. (sed_extract_cache_prog): Renamed from ... (sed_extract_prog): ... this; revert to old extraction script. (func_get_description, func_get_status) (func_get_notice, func_get_applicability, func_get_filelist) (func_get_dependencies, func_get_autoconf_early_snippet) (func_get_autoconf_snippet, func_get_automake_snippet) (func_get_include_directive, func_get_link_directive) (func_get_license, func_get_maintainer): If $do_cache is false, use old, non-caching extraction scripts. Suggestion by Bruno Haible. 2010-01-17 Ralf Wildenhues gnulib-tool: cache module metainformation. * gnulib-tool (sed_extract_prog): Match newline before each header, and rewrite header to a shell variable suffix. (func_cache_var, func_cache_lookup_module): New functions, to turn a module name into a cache variable prefix, and to look up and cache module metainformation. (func_get_description, func_get_status) (func_get_notice, func_get_applicability, func_get_filelist) (func_get_dependencies, func_get_autoconf_early_snippet) (func_get_autoconf_snippet, func_get_automake_snippet) (func_get_include_directive, func_get_link_directive) (func_get_license, func_get_maintainer): Use func_cache_lookup_module. 2010-02-07 Bruno Haible fnctl: Fix missing dependency. * modules/fcntl (Depends-on): Add getdtablesize. Reported by John W. Eaton . 2010-02-05 Sergey Poznyakoff Argp: fix recognition of short alias options. * lib/argp-parse.c (convert_options): Fix improper use of `|' between character values. * tests/test-argp.c (group1_option): New alias option --read (-r). (group1_parser): Special handling for 'r'. (test15): New test case. (test_fun): Add test15. * tests/test-argp-2.sh: Update expected --help and --usage outputs. 2010-02-05 Sergey Poznyakoff * tests/test-argp.c: Fix indentation. 2010-02-04 Eric Blake gettimeofday: expose type of second argument * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Do better detection of glibc extension signature, and define GETTIMEOFDAY_TIMEZONE. * tests/test-gettimeofday.c: Use it to silence warning. * doc/posix-functions/gettimeofday.texi (gettimeofday): Document the issue. 2010-02-03 Jim Meyering regcomp.c: avoid the sole warning from gcc's -Wtype-limits * lib/regcomp.c (TYPE_SIGNED): Define. (parse_dup_op): Use it to avoid the sole warning from -Wtype-limits. regcomp.c: avoid a new -Wshadow warning * lib/regcomp.c (create_initial_state): Do not shadow local "err". 2010-02-01 Jim Meyering removing useless parentheses in cpp #define directives For motivation, see commit c0221df4, "define STREQ(a,b) consistently, removing useless parentheses" * lib/memcmp.c (CMP_LT_OR_GT): Remove useless parentheses. * lib/mountlist.c (MNT_IGNORE): Likewise. * lib/trim.h (trim, trim_trailing, trim_leading): Likewise. 2010-02-01 Eric Blake sys_time: use link-warning * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Split defaults... (gl_HEADER_SYS_TIME_H_DEFAULTS): ...into new macro. (gl_SYS_TIME_MODULE_INDICATOR): New macro. * modules/sys_time (Depends-on): Add warn-on-use. (Makefile.am): Always build replacement. (configure.ac): Update substitutions. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY) (gl_FUNC_GETTIMEOFDAY_CLOBBER): Include defaults, and no longer bother with SYS_TIME_H. * modules/gettimeofday (configure.ac): Declare indicator. * lib/sys_time.in.h (gettimeofday): Warn if gnulib module is not in use. closein-tests: silence compiler warning * tests/test-closein.c (main): Ignore fread result. * modules/closein-tests (Depends-on): Add ignore-value. tests: silence warning about system return * tests/test-areadlink-with-size.c (main): Ignore system result. * tests/test-areadlink.c (main): Likewise. * tests/test-areadlinkat-with-size.c (main): Likewise. * tests/test-areadlinkat.c (main): Likewise. * tests/test-canonicalize-lgpl.c (main): Likewise. * tests/test-canonicalize.c (main): Likewise. * tests/test-chown.c (main): Likewise. * tests/test-fchownat.c (main): Likewise. * tests/test-fdutimensat.c (main): Likewise. * tests/test-fstatat.c (main): Likewise. * tests/test-futimens.c (main): Likewise. * tests/test-lchown.c (main): Likewise. * tests/test-link.c (main): Likewise. * tests/test-linkat.c (main): Likewise. * tests/test-lstat.c (main): Likewise. * tests/test-mkdir.c (main): Likewise. * tests/test-mkdirat.c (main): Likewise. * tests/test-mkfifo.c (main): Likewise. * tests/test-mkfifoat.c (main): Likewise. * tests/test-mknod.c (main): Likewise. * tests/test-readlink.c (main): Likewise. * tests/test-remove.c (main): Likewise. * tests/test-rename.c (main): Likewise. * tests/test-renameat.c (main): Likewise. * tests/test-rmdir.c (main): Likewise. * tests/test-symlink.c (main): Likewise. * tests/test-symlinkat.c (main): Likewise. * tests/test-unlink.c (main): Likewise. * tests/test-unlinkat.c (main): Likewise. * tests/test-utimens.c (main): Likewise. * tests/test-utimensat.c (main): Likewise. * modules/areadlink-tests (Depends-on): Add ignore-value. * modules/areadlink-with-size-tests (Depends-on): Likewise. * modules/areadlinkat-tests (Depends-on): Likewise. * modules/areadlinkat-with-size-tests (Depends-on): Likewise. * modules/canonicalize-lgpl-tests (Depends-on): Likewise. * modules/canonicalize-tests (Depends-on): Likewise. * modules/chown-tests (Depends-on): Likewise. * modules/fdutimensat-tests (Depends-on): Likewise. * modules/futimens-tests (Depends-on): Likewise. * modules/lchown-tests (Depends-on): Likewise. * modules/link-tests (Depends-on): Likewise. * modules/linkat-tests (Depends-on): Likewise. * modules/lstat-tests (Depends-on): Likewise. * modules/mkdir-tests (Depends-on): Likewise. * modules/mkfifo-tests (Depends-on): Likewise. * modules/mkfifoat-tests (Depends-on): Likewise. * modules/mknod-tests (Depends-on): Likewise. * modules/openat-tests (Depends-on): Likewise. * modules/readlink-tests (Depends-on): Likewise. * modules/remove-tests (Depends-on): Likewise. * modules/rename-tests (Depends-on): Likewise. * modules/renameat-tests (Depends-on): Likewise. * modules/rmdir-tests (Depends-on): Likewise. * modules/symlink-tests (Depends-on): Likewise. * modules/symlinkat-tests (Depends-on): Likewise. * modules/unlink-tests (Depends-on): Likewise. * modules/utimens-tests (Depends-on): Likewise. * modules/utimensat-tests (Depends-on): Likewise. 2010-01-31 Bruno Haible Perform the same test for many functions. * m4/mathfunc.m4 (gl_COMMON_DOUBLE_MATHFUNC, gl_COMMON_DOUBLE_MATHFUNC_TEST): New macros. * m4/sqrt.m4 (gl_FUNC_SQRT): Invoke gl_COMMON_DOUBLE_MATHFUNC instead of gl_MATHFUNC. * modules/acos (configure.ac): Likewise. * modules/asin (configure.ac): Likewise. * modules/atan (configure.ac): Likewise. * modules/atan2 (configure.ac): Likewise. * modules/cbrt (configure.ac): Likewise. * modules/copysign (configure.ac): Likewise. * modules/cos (configure.ac): Likewise. * modules/cosh (configure.ac): Likewise. * modules/erf (configure.ac): Likewise. * modules/erfc (configure.ac): Likewise. * modules/exp (configure.ac): Likewise. * modules/fmod (configure.ac): Likewise. * modules/hypot (configure.ac): Likewise. * modules/j0 (configure.ac): Likewise. * modules/j1 (configure.ac): Likewise. * modules/jn (configure.ac): Likewise. * modules/lgamma (configure.ac): Likewise. * modules/log (configure.ac): Likewise. * modules/log10 (configure.ac): Likewise. * modules/log1p (configure.ac): Likewise. * modules/pow (configure.ac): Likewise. * modules/remainder (configure.ac): Likewise. * modules/sin (configure.ac): Likewise. * modules/sinh (configure.ac): Likewise. * modules/tan (configure.ac): Likewise. * modules/tanh (configure.ac): Likewise. * modules/y0 (configure.ac): Likewise. * modules/y1 (configure.ac): Likewise. * modules/yn (configure.ac): Likewise. Suggested by Paolo Bonzini. 2010-01-31 Bruno Haible * m4/getline.m4 (gl_FUNC_GETLINE): Add comment about REPLACE_GETLINE. 2010-01-31 Bruno Haible Work around getdelim() bug on FreeBSD 8.0. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Test whether getdelim supports an initially NULL line. Set REPLACE_GETDELIM if getdelim exists but does not work. * lib/stdio.in.h (getdelim): Define as an alias if REPLACE_GETDELIM is 1. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize REPLACE_GETDELIM. * modules/stdio (Makefile.am): Also substitute REPLACE_GETDELIM. * tests/test-getdelim.c (main): Also test result for a NULL buffer and a non-zero size. * doc/posix-functions/getdelim.texi: Mention the FreeBSD bug. 2010-01-31 Bruno Haible Work around getline() bug on FreeBSD 8.0. * m4/getline.m4 (gl_FUNC_GETLINE): Also test result for a NULL buffer and a non-zero size. * tests/test-getline.c (main): Likewise. * doc/posix-functions/getline.texi: Mention the FreeBSD bug. Reported by Dennis via Eric Blake. 2010-01-28 Eric Blake regex: fix build failure * lib/regex_internal.h (__GNUC_PREREQ): Define for non-glibc platforms. 2010-01-28 Jim Meyering regex: do not ignore memory allocation failure * lib/regex_internal.c (create_cd_newstate): Detect re_node_set_init_copy failure. Extracted from glibc commit 2da42bc06566bc89785e580fa1ac89b4c9f2a63c. regex: sync more white-space changes from libc * lib/regex_internal.c: White-space only changes. * lib/regexec.c: Likewise. regex: add many uses of __attribute_warn_unused_result__ * lib/regex_internal.c: Use __attribute_warn_unused_result__. * lib/regexec.c: Likewise. Extracted from a messy glibc commit. regcomp.c: spelling and merge-artifact from glibc * lib/regcomp.c: Merge remainder of glibc's 2da42bc06566bc89785e580fa1ac89b4c9f2a63c. regcomp.c: sync white-space changes from glibc * lib/regcomp.c: Merge to accommodate white space changes from glibc's 2da42bc06566bc89785e580fa1ac89b4c9f2a63c. regcomp.c: do not ignore internal return values * lib/regcomp.c: Do not ignore internal return values. This is from glibc's 2da42bc06566bc89785e580fa1ac89b4c9f2a63c, but without its white-space changes and spelling fixes. regex_internal.h: define __attribute_warn_unused_result__ * lib/regex_internal.h (__attribute_warn_unused_result__): Define. maint: add a syntax-check rule to check for vulnerable Makefile.in * top/maint.mk (sc_vulnerable_makefile_CVE-2009-4029): New rule. 2010-01-27 Jim Meyering ncftpput-ftp: clean up spaces * build-aux/ncftpput-ftp: Make Copyright line consistent. Remove trailing blanks. 2010-01-27 Simon Josefsson * build-aux/git-version-gen: Fix copyright statement. * build-aux/gnupload: Likewise. * tests/test-arcfour.c: Likewise. * tests/test-arctwo.c: Likewise. * tests/test-count-one-bits.c: Likewise. * tests/test-crc.c: Likewise. * tests/test-des.c: Likewise. * tests/test-gc-arcfour.c: Likewise. * tests/test-gc-arctwo.c: Likewise. * tests/test-gc-des.c: Likewise. * tests/test-gc-hmac-md5.c: Likewise. * tests/test-gc-hmac-sha1.c: Likewise. * tests/test-gc-md2.c: Likewise. * tests/test-gc-md4.c: Likewise. * tests/test-gc-md5.c: Likewise. * tests/test-gc-pbkdf2-sha1.c: Likewise. * tests/test-gc-rijndael.c: Likewise. * tests/test-gc-sha1.c: Likewise. * tests/test-gc.c: Likewise. * tests/test-gethostname.c: Likewise. * tests/test-gettimeofday.c: Likewise. * tests/test-hash.c: Likewise. * tests/test-hmac-md5.c: Likewise. * tests/test-hmac-sha1.c: Likewise. * tests/test-md2.c: Likewise. * tests/test-md4.c: Likewise. * tests/test-md5.c: Likewise. * tests/test-memchr.c: Likewise. * tests/test-memchr2.c: Likewise. * tests/test-memcmp.c: Likewise. * tests/test-memmem.c: Likewise. * tests/test-memrchr.c: Likewise. * tests/test-rawmemchr.c: Likewise. * tests/test-read-file.c: Likewise. * tests/test-rijndael.c: Likewise. * tests/test-sockets.c: Likewise. * tests/test-strchrnul.c: Likewise. * tests/test-strstr.c: Likewise. * tests/test-strtod.c: Likewise. * build-aux/ncftpput-ftp: Likewise. 2010-01-26 Eric Blake ignore-value: update recommended header name * modules/ignore-value (Include): Only use <> for headers that exist in glibc. 2010-01-26 Jim Meyering test-userspec.c: avoid compiler warnings * tests/test-userspec.c (main): Avoid shadowing ("uid"), and "initialization discards qualifiers..." warnings. Put the first "uid" in its own scope, and make char* members "const". 2010-01-25 Bruno Haible gnulib-tool: Make warning diagnostics consistent. * gnulib-tool (func_warning): New function. Use it everywhere where gnulib-tool produces output to stderr and it is not a fatal error. 2010-01-25 Bruno Haible Fix test dependencies. * modules/xstrtol-tests (Depends-on): Add inttypes. * modules/xstrtoll-tests (Depends-on): Likewise. Remove xstrtoll. 2010-01-25 Pádraig Brady syntax-check: detect incorrect boolean macro values in config.h * modules/maintainer-makefile (configure.ac): Parameterize the location of config.h which will be available to makefiles as $(CONFIG_INCLUDE). The logic is from Eric Blake and the location indicated by Jim Meyering. Note the more natural CONFIG_HEADER name is prohibited by automake for backwards compatibility reasons. * top/maint.mk (sc_Wundef_boolean): New rule. 2010-01-25 Jim Meyering bootstrap: detect MacOS 10.6's shasum, too * build-aux/bootstrap: Also recognize MacOS 10.6's shasum. Suggested by Thomas Treichl . 2010-01-23 Jim Meyering xstrtoll: new module * modules/xstrtoll: New file. * MODULES.html.sh (Numeric conversion functions): Add xstrtoll. * lib/xstrtol.h [HAVE_LONG_LONG_INT]: Declare xstrtoll and xstrtoull. * lib/xstrtoll.c, lib/xstrtoull.c: New files. ./configure fails if you use this module and lack "long long". * modules/xstrtoll-tests: New module. * tests/test-xstrtoll.c, tests/test-xstrtoull.c: New files. * tests/test-xstrtoll.sh: Like test-xstrtol.c, but use the new init.sh-based test framework. 2010-01-24 Bruno Haible Tests for module 'yn'. * modules/yn-tests: New file. * tests/test-yn.c: New file. Tests for module 'y1'. * modules/y1-tests: New file. * tests/test-y1.c: New file. Tests for module 'y0'. * modules/y0-tests: New file. * tests/test-y0.c: New file. Tests for module 'tanh'. * modules/tanh-tests: New file. * tests/test-tanh.c: New file. Tests for module 'tan'. * modules/tan-tests: New file. * tests/test-tan.c: New file. Tests for module 'sqrt'. * modules/sqrt-tests: New file. * tests/test-sqrt.c: New file. Tests for module 'sinh'. * modules/sinh-tests: New file. * tests/test-sinh.c: New file. Tests for module 'sin'. * modules/sin-tests: New file. * tests/test-sin.c: New file. Tests for module 'rint'. * modules/rint-tests: New file. * tests/test-rint.c: New file. Tests for module 'remainder'. * modules/remainder-tests: New file. * tests/test-remainder.c: New file. Tests for module 'pow'. * modules/pow-tests: New file. * tests/test-pow.c: New file. Tests for module 'nextafter'. * modules/nextafter-tests: New file. * tests/test-nextafter.c: New file. Tests for module 'modf'. * modules/modf-tests: New file. * tests/test-modf.c: New file. Tests for module 'logb'. * modules/logb-tests: New file. * tests/test-logb.c: New file. Tests for module 'log1p'. * modules/log1p-tests: New file. * tests/test-log1p.c: New file. Tests for module 'log10'. * modules/log10-tests: New file. * tests/test-log10.c: New file. Tests for module 'log'. * modules/log-tests: New file. * tests/test-log.c: New file. Tests for module 'lgamma'. * modules/lgamma-tests: New file. * tests/test-lgamma.c: New file. Tests for module 'ldexp'. * modules/ldexp-tests: New file. * tests/test-ldexp.c: New file. Tests for module 'jn'. * modules/jn-tests: New file. * tests/test-jn.c: New file. Tests for module 'j1'. * modules/j1-tests: New file. * tests/test-j1.c: New file. Tests for module 'j0'. * modules/j0-tests: New file. * tests/test-j0.c: New file. Tests for module 'hypot'. * modules/hypot-tests: New file. * tests/test-hypot.c: New file. Tests for module 'fmod'. * modules/fmod-tests: New file. * tests/test-fmod.c: New file. Tests for module 'fabs'. * modules/fabs-tests: New file. * tests/test-fabs.c: New file. Tests for module 'exp'. * modules/exp-tests: New file. * tests/test-exp.c: New file. Tests for module 'erfc'. * modules/erfc-tests: New file. * tests/test-erfc.c: New file. Tests for module 'erf'. * modules/erf-tests: New file. * tests/test-erf.c: New file. Tests for module 'cosh'. * modules/cosh-tests: New file. * tests/test-cosh.c: New file. Tests for module 'cos'. * modules/cos-tests: New file. * tests/test-cos.c: New file. Tests for module 'copysign'. * modules/copysign-tests: New file. * tests/test-copysign.c: New file. Tests for module 'cbrt'. * modules/cbrt-tests: New file. * tests/test-cbrt.c: New file. Tests for module 'atan2'. * modules/atan2-tests: New file. * tests/test-atan2.c: New file. Tests for module 'atan'. * modules/atan-tests: New file. * tests/test-atan.c: New file. Tests for module 'asin'. * modules/asin-tests: New file. * tests/test-asin.c: New file. Tests for module 'acos'. * modules/acos-tests: New file. * tests/test-acos.c: New file. 2010-01-24 Bruno Haible Fix tests for common functions. * m4/mathfunc.m4 (gl_MATHFUNC): Take two additional parameters. Use a code snippet that references the function pointer, rather than merely calling the function. Substitute the FUNC_LIBM variable. * m4/sqrt.m4 (gl_FUNC_SQRT): Update gl_MATHFUNC invocation. * modules/acos (configure.ac): Likewise. * modules/asin (configure.ac): Likewise. * modules/atan (configure.ac): Likewise. * modules/atan2 (configure.ac): Likewise. * modules/cbrt (configure.ac): Likewise. * modules/copysign (configure.ac): Likewise. * modules/cos (configure.ac): Likewise. * modules/cosh (configure.ac): Likewise. * modules/erf (configure.ac): Likewise. * modules/erfc (configure.ac): Likewise. * modules/exp (configure.ac): Likewise. * modules/fabs (configure.ac): Likewise. * modules/fmod (configure.ac): Likewise. * modules/hypot (configure.ac): Likewise. * modules/j0 (configure.ac): Likewise. * modules/j1 (configure.ac): Likewise. * modules/jn (configure.ac): Likewise. * modules/ldexp (configure.ac): Likewise. * modules/lgamma (configure.ac): Likewise. * modules/log (configure.ac): Likewise. * modules/log10 (configure.ac): Likewise. * modules/log1p (configure.ac): Likewise. * modules/logb (configure.ac): Likewise. * modules/modf (configure.ac): Likewise. * modules/nextafter (configure.ac): Likewise. * modules/pow (configure.ac): Likewise. * modules/remainder (configure.ac): Likewise. * modules/rint (configure.ac): Likewise. * modules/sin (configure.ac): Likewise. * modules/sinh (configure.ac): Likewise. * modules/tan (configure.ac): Likewise. * modules/tanh (configure.ac): Likewise. * modules/y0 (configure.ac): Likewise. * modules/y1 (configure.ac): Likewise. * modules/yn (configure.ac): Likewise. 2010-01-24 Bruno Haible Tests: Defeat inlining of math functions by GCC >= 4.3.0. * tests/test-acosl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-asinl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-atanl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-cosl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-expl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-logl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-sinl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-sqrtl.c (x): New variable. (main): Store argument in x and fetch it from x. * tests/test-tanl.c (x): New variable. (main): Store argument in x and fetch it from x. 2010-01-24 Bruno Haible Provide EXEEXT and srcdir in TESTS_ENVIRONMENT by default. * gnulib-tool (func_emit_tests_Makefile_am): Add EXEEXT and srcdir assignments to the initial TESTS_ENVIRONMENT. * doc/gnulib.texi (Unit test modules): Document it. * modules/acl-tests (Makefile.am): Drop EXEEXT assignment from TESTS_ENVIRONMENT. * modules/btowc-tests (Makefile.am): Likewise. * modules/c-stack-tests (Makefile.am): Likewise. * modules/c-strcase-tests (Makefile.am): Likewise. * modules/copy-file-tests (Makefile.am): Likewise. * modules/mbmemcasecmp-tests (Makefile.am): Likewise. * modules/mbmemcasecoll-tests (Makefile.am): Likewise. * modules/mbrtowc-tests (Makefile.am): Likewise. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsinit-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbsnrtowcs-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsrtowcs-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/nl_langinfo-tests (Makefile.am): Likewise. * modules/unicase/locale-language-tests (Makefile.am): Likewise. * modules/unistdio/u16-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u32-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u8-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Makefile.am): Likewise. * modules/uniwbrk/ulc-wordbreaks-tests (Makefile.am): Likewise. * modules/vasnprintf-posix-tests (Makefile.am): Likewise. * modules/wcrtomb-tests (Makefile.am): Likewise. * modules/wcsnrtombs-tests (Makefile.am): Likewise. * modules/wcsrtombs-tests (Makefile.am): Likewise. * modules/quotearg-tests (Makefile.am): Drop EXEEXT and srcdir assignments from TESTS_ENVIRONMENT. * modules/argp-tests (Makefile.am): Drop TESTS_ENVIRONMENT augmentation. * modules/argp-version-etc-tests (Makefile.am): Likewise. * modules/atexit-tests (Makefile.am): Likewise. * modules/binary-io-tests (Makefile.am): Likewise. * modules/closein-tests (Makefile.am): Likewise. * modules/dprintf-posix-tests (Makefile.am): Likewise. * modules/exclude-tests (Makefile.am): Likewise. * modules/fflush-tests (Makefile.am): Likewise. * modules/fpending-tests (Makefile.am): Likewise. * modules/fprintf-posix-tests (Makefile.am): Likewise. * modules/freadahead-tests (Makefile.am): Likewise. * modules/freadptr-tests (Makefile.am): Likewise. * modules/freadseek-tests (Makefile.am): Likewise. * modules/fseek-tests (Makefile.am): Likewise. * modules/fseeko-tests (Makefile.am): Likewise. * modules/ftell-tests (Makefile.am): Likewise. * modules/ftello-tests (Makefile.am): Likewise. * modules/idpriv-drop-tests (Makefile.am): Likewise. * modules/idpriv-droptemp-tests (Makefile.am): Likewise. * modules/lseek-tests (Makefile.am): Likewise. * modules/parse-duration-tests (Makefile.am): Likewise. * modules/perror-tests (Makefile.am): Likewise. * modules/pipe-filter-gi-tests (Makefile.am): Likewise. * modules/pipe-filter-ii-tests (Makefile.am): Likewise. * modules/pipe-tests (Makefile.am): Likewise. * modules/pread-tests (Makefile.am): Likewise. * modules/printf-posix-tests (Makefile.am): Likewise. * modules/select-tests (Makefile.am): Likewise. * modules/sigpipe-tests (Makefile.am): Likewise. * modules/tsearch-tests (Makefile.am): Likewise. * modules/unicase/ulc-casecmp-tests (Makefile.am): Likewise. * modules/unicase/ulc-casecoll-tests (Makefile.am): Likewise. * modules/uniname/uniname-tests (Makefile.am): Likewise. * modules/uniwidth/width-tests (Makefile.am): Likewise. * modules/vdprintf-posix-tests (Makefile.am): Likewise. * modules/version-etc-tests (Makefile.am): Likewise. * modules/vfprintf-posix-tests (Makefile.am): Likewise. * modules/vprintf-posix-tests (Makefile.am): Likewise. * modules/xalloc-die-tests (Makefile.am): Likewise. * modules/xprintf-posix-tests (Makefile.am): Likewise. * modules/xstrtoimax-tests (Makefile.am): Likewise. * modules/xstrtol-tests (Makefile.am): Likewise. * modules/xstrtoumax-tests (Makefile.am): Likewise. * modules/yesno-tests (Makefile.am): Likewise. Suggested by Jim Meyering. 2010-01-24 Bruno Haible More documentation. * doc/gnulib.texi (Writing modules): New chapter. (Miscellaneous Notes): Move sections "Comments" and "Header files" to the new chapter. 2010-01-24 Jim Meyering maint.mk: do not prepend "./" after filtering * top/maint.mk (_prepend_srcdir_prefix): New variable (VC_LIST_EXCEPT): Use it to avoid prepending (post-filter) "./" when $(srcdir) is ".". define STREQ(a,b) consistently, removing useless parentheses #define STREQ(a, b) (strcmp ((a), (b)) == 0) is over-parenthesized, since the only risk is that "a" or "b" contains an unparenthesized comma, but if either did that, STREQ would have 3 or more arguments. Hence, #define STREQ(a, b) (strcmp (a, b) == 0) is better. * lib/fts.c (STREQ): Remove unnecessary parentheses. * lib/hash-triple.c (STREQ): Likewise. * tests/test-argv-iter.c (STREQ): Use a and b, not s1 and s2. * lib/getugroups.c (STREQ): Likewise. 2010-01-23 Jim Meyering maint.mk: fix syntax-check in a non-srcdir build directory * top/maint.mk (_dot_escaped_srcdir): Remove erroneous backslash, introduced in my 2010-01-21 commit, a6da6c45. Reported by Eric Blake. 2010-01-22 Jim Meyering userspec: add unit tests * tests/test-userspec.c: New file. * modules/userspec-tests: Likewise. 2010-01-21 Jim Meyering maint.mk: handle source file names containing "." robustly * top/maint.mk (_dot_escaped_srcdir): Define. (VC_LIST): Use it in LHS of sed substitution. 2010-01-21 Jiri Denemark maint.mk: fix VC_LIST_EXCEPT for srcdir != builddir * top/maint.mk (VC_LIST_EXCEPT): Preprocess the output of $(VC_LIST) to remove a prefix of '$(srcdir)/', so that it works from a non-srcdir build. 2010-01-20 Eric Blake warn-on-use: use instead of link-warning * modules/stdio (Depends-on, Makefile.am): Drop link-warning. * modules/unistd (Depends-on, Makefile.am): Likewise. * modules/arpa_inet (Depends-on): Replace link-warning with warn-on-use. (Makefile.am): Update rules accordingly. * modules/ctype (Depends-on, Makefile.am): Likewise. * modules/dirent (Depends-on, Makefile.am): Likewise. * modules/fcntl-h (Depends-on, Makefile.am): Likewise. * modules/inttypes (Depends-on, Makefile.am): Likewise. * modules/langinfo (Depends-on, Makefile.am): Likewise. * modules/locale (Depends-on, Makefile.am): Likewise. * modules/math (Depends-on, Makefile.am): Likewise. * modules/search (Depends-on, Makefile.am): Likewise. * modules/signal (Depends-on, Makefile.am): Likewise. * modules/spawn (Depends-on, Makefile.am): Likewise. * modules/stdlib (Depends-on, Makefile.am): Likewise. * modules/string (Depends-on, Makefile.am): Likewise. * modules/strings (Depends-on, Makefile.am): Likewise. * modules/sys_file (Depends-on, Makefile.am): Likewise. * modules/sys_ioctl (Depends-on, Makefile.am): Likewise. * modules/sys_select (Depends-on, Makefile.am): Likewise. * modules/sys_socket (Depends-on, Makefile.am): Likewise. * modules/sys_stat (Depends-on, Makefile.am): Likewise. * modules/sys_times (Depends-on, Makefile.am): Likewise. * modules/sys_utsname (Depends-on, Makefile.am): Likewise. * modules/wchar (Depends-on, Makefile.am): Likewise. * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Check which functions should be poisoned. * m4/ctype.m4 (gl_CTYPE_H): Likewise. * m4/dirent_h.m4 (gl_DIRENT_H): Likewise. * m4/fcntl_h.m4 (gl_FCNTL_H): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Likewise. * m4/langinfo_h.m4 (gl_LANGINFO_H): Likewise. * m4/locale_h.m4 (gl_LOCALE_H): Likewise. * m4/math_h.m4 (gl_MATH_H): Likewise. * m4/search_h.m4 (gl_SEARCH_H): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Likewise. * m4/spawn_h.m4 (gl_SPAWN_H): Likewise. * m4/stdio_h.m4 (gl_STDIO_H): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H): Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Likewise. * m4/strings_h.m4 (gl_HEADER_STRINGS_H_BODY): Likewise. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_H_DEFAULTS): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * m4/wchar.m4 (gl_WCHAR_H): Likewise. * lib/arpa_inet.in.h: Use _GL_WARN_ON_USE instead of GL_LINK_WARNING. * lib/ctype.in.h: Likewise. * lib/dirent.in.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/langinfo.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/search.in.h: Likewise. * lib/signal.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_times.in.h: Likewise. * lib/sys_utsname.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/wchar.in.h: Likewise. 2010-01-20 Bruno Haible Avoid duplicate -lm. * m4/isnan.m4 (gl_ISNAN): Avoid duplicate -lm in $ISNAN_LIBM. * m4/round.m4 (gl_FUNC_ROUND): Avoid duplicate -lm in $ROUND_LIBM. * m4/roundf.m4 (gl_FUNC_ROUNDF): Avoid duplicate -lm in $ROUNDF_LIBM. * m4/roundl.m4 (gl_FUNC_ROUNDL): Avoid duplicate -lm in $ROUNDL_LIBM. * m4/acosl.m4 (gl_FUNC_ACOSL): Avoid duplicate -lm in $ACOSL_LIBM. * m4/cosl.m4 (gl_FUNC_COSL): Avoid duplicate -lm in $COSL_LIBM. * m4/logl.m4 (gl_FUNC_LOGL): Avoid duplicate -lm in $LOGL_LIBM. * m4/sinl.m4 (gl_FUNC_SINL): Avoid duplicate -lm in $SINL_LIBM. * m4/sqrtl.m4 (gl_FUNC_SQRTL): Avoid duplicate -lm in $SQRTL_LIBM. * m4/tanl.m4 (gl_FUNC_TANL): Avoid duplicate -lm in $TANL_LIBM. * m4/asinl.m4 (gl_FUNC_ASINL): Same change, for consistency. * m4/atanl.m4 (gl_FUNC_ATANL): Likewise. Reported by Paolo Bonzini. 2010-01-19 Bruno Haible langinfo, nl_langinfo: Relicense under LGPLv2+. * modules/langinfo (License): Change to LGPLv2+. * modules/nl_langinfo (License): Likewise. Patch by David Lutterkort . 2010-01-19 Bruno Haible Avoid compilation error with cc on OSF/1 5.1. * lib/fcntl.in.h: Include after the #include_next statement, not before. Reported by Ralf Wildenhues . 2010-01-18 Bruno Haible Avoid a link error due to the __printf__ symbol. * lib/stdio.in.h (__attribute__): Define to empty also for gcc 2.5.x and 2.6.x. (__format__, __printf__): Remove definitions. * lib/argp-fmtstream.h: Likewise. * lib/argp.h: Likewise. * lib/error.h: Likewise. * lib/vasnprintf.h: Likewise. * lib/xprintf.h: Likewise. * lib/xvasprintf.h: Likewise. Reported by Ralf Wildenhues . 2010-01-18 Bruno Haible Tests for module 'tanl'. * modules/tanl-tests: New file. * tests/test-tanl.c: New file. Tests for module 'sqrtl'. * modules/sqrtl-tests: New file. * tests/test-sqrtl.c: New file. Tests for module 'sinl'. * modules/sinl-tests: New file. * tests/test-sinl.c: New file. Tests for module 'logl'. * modules/logl-tests: New file. * tests/test-logl.c: New file. Tests for module 'expl'. * modules/expl-tests: New file. * tests/test-expl.c: New file. Tests for module 'cosl'. * modules/cosl-tests: New file. * tests/test-cosl.c: New file. Tests for module 'atanl'. * modules/atanl-tests: New file. * tests/test-atanl.c: New file. Tests for module 'asinl'. * modules/asinl-tests: New file. * tests/test-asinl.c: New file. Tests for module 'acosl'. * modules/acosl-tests: New file. * tests/test-acosl.c: New file. New modules acosl, asinl, atanl, cosl, expl, logl, sinl, sqrtl, tanl. * lib/math.in.h (acosl, asinl, atanl, cosl, expl, logl, sinl, sqrtl, tanl): Use the standard gnulib idiom. * lib/cosl.c: Don't include trigl.c and sincosl.c. * lib/sinl.c: Likewise. * lib/tanl.c: Don't include trigl.c. (kernel_tanl): Make static. * lib/sincosl.c: Include trigl.h first. * lib/trigl.c: Likewise. * m4/acosl.m4: New file. * m4/asinl.m4: New file. * m4/atanl.m4: New file. * m4/cosl.m4: New file. * m4/expl.m4: New file. * m4/logl.m4: New file. * m4/sinl.m4: New file. * m4/sqrtl.m4: New file. * m4/tanl.m4: New file. * m4/mathl.m4: Remove file. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_* and HAVE_* variables for acosl, asinl, atanl, cosl, expl, logl, sinl, sqrtl, tanl. Don't initialize GNULIB_MATHL. * modules/acosl: New file. * modules/asinl: New file. * modules/atanl: New file. * modules/cosl: New file. * modules/expl: New file. * modules/logl: New file. * modules/sinl: New file. * modules/sqrtl: New file. * modules/tanl: New file. * modules/math (Makefile.am): Substitute GNULIB_* and HAVE_* variables for acosl, asinl, atanl, cosl, expl, logl, sinl, sqrtl, tanl. Don't substitute GNULIB_MATHL. * modules/mathl: Rewritten. * doc/posix-functions/acosl.texi: Mention the 'acosl' module. * doc/posix-functions/asinl.texi: Mention the 'asinl' module. * doc/posix-functions/atanl.texi: Mention the 'atanl' module. * doc/posix-functions/cosl.texi: Mention the 'cosl' module. * doc/posix-functions/expl.texi: Mention the 'expl' module. * doc/posix-functions/logl.texi: Mention the 'logl' module. * doc/posix-functions/sinl.texi: Mention the 'sinl' module. * doc/posix-functions/sqrtl.texi: Mention the 'sqrtl' module. * doc/posix-functions/tanl.texi: Mention the 'tanl' module. 2010-01-18 Bruno Haible sqrt: Make gl_FUNC_SQRT requirable. * m4/sqrt.m4: New file. * modules/sqrt (Files): Add it. (configure.ac): Invoke gl_FUNC_SQRT. 2010-01-18 Bruno Haible New modules for common functions. * m4/mathfunc.m4: New file. * modules/acos: New file. * modules/asin: New file. * modules/atan: New file. * modules/atan2: New file. * modules/cbrt: New file. * modules/copysign: New file. * modules/cos: New file. * modules/cosh: New file. * modules/erf: New file. * modules/erfc: New file. * modules/exp: New file. * modules/fabs: New file. * modules/fmod: New file. * modules/hypot: New file. * modules/j0: New file. * modules/j1: New file. * modules/jn: New file. * modules/ldexp: New file. * modules/lgamma: New file. * modules/log: New file. * modules/log10: New file. * modules/log1p: New file. * modules/logb: New file. * modules/modf: New file. * modules/nextafter: New file. * modules/pow: New file. * modules/remainder: New file. * modules/rint: New file. * modules/sin: New file. * modules/sinh: New file. * modules/sqrt: New file. * modules/tan: New file. * modules/tanh: New file. * modules/y0: New file. * modules/y1: New file. * modules/yn: New file. * doc/posix-functions/acos.texi: Mention the 'acos' module. * doc/posix-functions/asin.texi: Mention the 'asin' module. * doc/posix-functions/atan.texi: Mention the 'atan' module. * doc/posix-functions/atan2.texi: Mention the 'atan2' module. * doc/posix-functions/cbrt.texi: Mention the 'cbrt' module. * doc/posix-functions/copysign.texi: Mention the 'copysign' module. * doc/posix-functions/cos.texi: Mention the 'cos' module. * doc/posix-functions/cosh.texi: Mention the 'cosh' module. * doc/posix-functions/erf.texi: Mention the 'erf' module. * doc/posix-functions/erfc.texi: Mention the 'erfc' module. * doc/posix-functions/exp.texi: Mention the 'exp' module. * doc/posix-functions/fabs.texi: Mention the 'fabs' module. * doc/posix-functions/fmod.texi: Mention the 'fmod' module. * doc/posix-functions/hypot.texi: Mention the 'hypot' module. * doc/posix-functions/j0.texi: Mention the 'j0' module. * doc/posix-functions/j1.texi: Mention the 'j1' module. * doc/posix-functions/jn.texi: Mention the 'jn' module. * doc/posix-functions/ldexp.texi: Mention the 'ldexp' module. * doc/posix-functions/lgamma.texi: Mention the 'lgamma' module. * doc/posix-functions/log.texi: Mention the 'log' module. * doc/posix-functions/log10.texi: Mention the 'log10' module. * doc/posix-functions/log1p.texi: Mention the 'log1p' module. * doc/posix-functions/logb.texi: Mention the 'logb' module. * doc/posix-functions/modf.texi: Mention the 'modf' module. * doc/posix-functions/nextafter.texi: Mention the 'nextafter' module. * doc/posix-functions/pow.texi: Mention the 'pow' module. * doc/posix-functions/remainder.texi: Mention the 'remainder' module. * doc/posix-functions/rint.texi: Mention the 'rint' module. * doc/posix-functions/sin.texi: Mention the 'sin' module. * doc/posix-functions/sinh.texi: Mention the 'sinh' module. * doc/posix-functions/sqrt.texi: Mention the 'sqrt' module. * doc/posix-functions/tan.texi: Mention the 'tan' module. * doc/posix-functions/tanh.texi: Mention the 'tanh' module. * doc/posix-functions/y0.texi: Mention the 'y0' module. * doc/posix-functions/y1.texi: Mention the 'y1' module. * doc/posix-functions/yn.texi: Mention the 'yn' module. 2010-01-18 Jim Meyering ignore-value: relax license to LGPLv2+ * modules/ignore-value (License): Relax to LGPLv2+. getdate: don't leak when TZ contains two or more '"'s * lib/getdate.y (get_date): Don't leak a copy of TZ for each double quote in TZ after the first one. readtokens: do not leak internal token_lengths buffer * lib/readtokens.c (readtokens): Free the local, lengths, when the supplied "token_lengths" parameter is NULL. 2010-01-17 Ralf Wildenhues Fix a couple of missing LIBTHREAD link failures on AIX. * modules/git-merge-changelog (git_merge_changelog_LDADD): Add $(LIBTHREAD). * modules/strsignal-tests (test_strsignal_LDADD): Likewise. Link test-poll against INET_PTON_LIB. * modules/poll-tests (test_poll_LDADD): Add $(INET_PTON_LIB), for inet_pton on Solaris 10. 2010-01-17 Bruno Haible unistdio/*-sprintf: Fix typo in module description. * modules/unistdio/u8-sprintf (Depends-on): Fix typo. * modules/unistdio/u8-u8-sprintf (Depends-on): Likewise. * modules/unistdio/u16-sprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-sprintf (Depends-on): Likewise. * modules/unistdio/u32-sprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-sprintf (Depends-on): Likewise. * modules/unistdio/ulc-sprintf (Depends-on): Likewise. Reported by Ralf Wildenhues . 2010-01-17 Ralf Wildenhues gnulib-tool: fix filelist for AIX, HP-UX ksh. * gnulib-tool (func_filter_filelist): Do not quote possibly-empty variables in shell case patterns, for AIX and HP-UX ksh. Split large sed scripts, for HP-UX sed. * modules/stdio: Split sed scripts around 50 sed commands, to avoid HP-UX limit of 99 commands, in the near future. * modules/string: Likewise. * modules/unistd: Likewise. gnulib-tool: avoid writing in the current directory. * gnulib-tool (func_emit_lib_Makefile_am) (func_emit_tests_Makefile_am): Put temporary files in $tmp, not in the current directory, so concurrent gnulib-tool instances do not interfere. 2010-01-16 Jim Meyering doc: update users.txt * users.txt: Add grep. (diffutils, gzip): Update URLs. 2010-01-12 Bruno Haible posix_spawn: Avoid test failure on Cygwin. * tests/test-posix_spawn3.c (DATA_FILENAME) [CYGWIN]: Use less risky characters. Reported by Simon Josefsson. 2010-01-12 Bruno Haible * tests/test-cond.c (main): When skipping the test, show the reason. 2010-01-12 Simon Josefsson * lib/striconv.c (str_cd_iconv): Avoid if before free. 2010-01-12 Simon Josefsson * top/maint.mk (VC_LIST_EXCEPT): Filter list through VC_LIST_ALWAYS_EXCLUDE_REGEX. 2010-01-12 Eric Blake build: guarantee AS_VAR_IF * m4/warnings.m4 (gl_WARN_ADD): Use autoconf name. (gl_AS_VAR_IF): Move... * m4/gnulib-common.m4 (AS_VAR_IF): ...here. Reported by Simon Josefsson. 2010-01-12 Simon Josefsson * lib/stdio.in.h: Fix typo. 2010-01-12 Simon Josefsson * m4/gc.m4: Check if linking to libgcrypt also needs linking to libgpg-error. 2010-01-12 Simon Josefsson * tests/test-xalloc-die.sh: Use $EXEEXT. 2010-01-12 Simon Josefsson Bruno Haible getlogin, getlogin_r: Avoid test failure. * tests/test-getlogin.c: Include . (main): Skip the test when the function fails because stdin is not a tty. * tests/test-getlogin_r.c: Include . (main): Skip the test when the function fails because stdin is not a tty. 2010-01-11 Eric Blake tests: avoid more large file warnings * tests/test-fflush.c: Avoid warning about ftell use. * tests/test-fseek.c: Avoid warning about fseek use. 2010-01-10 Bruno Haible nproc: Work better on Linux when /proc and /sys are not mounted. * lib/nproc.c (num_processors): Use num_processors_via_affinity_mask () as lower bound when, on glibc/Linux systems, sysconf (_SC_NPROCESSORS_CONF) returns 1. Suggested by Pádraig Brady . Reported by Dmitry V. Levin . nproc: Refactor. * lib/nproc.c (num_processors_via_affinity_mask): New function, extracted from num_processors. (num_processors): Call it. 2010-01-11 Jim Meyering utimecmp: avoid new warning from upcoming gcc-4.5.0 * lib/utimecmp.c (BILLION): Define using #define rather than an anonymous enum, to placate upcoming gcc-4.5.0's -Wenum-compare. 2010-01-11 Eric Blake math: add portability warnings for classification macros * modules/math (Depends-on): Add warn-on-use. (Makefile.am): Provide new substitutions. * m4/math_h.m4 (gl_MATH_H): Require inline. * lib/math.in.h (_GL_WARN_REAL_FLOATING_DECL) (_GL_WARN_REAL_FLOATING_IMPL): New helper macros. (isfinite, isinf, isnan, signbit) [GNULIB_POSIXCHECK]: Use them to implement warnings. unistd: warn on use of environ without module * modules/unistd (Depends-on): Add warn-on-use. (Makefile.am): Provide new substitutions. * m4/unistd_h.m4 (gl_UNISTD_H): Check for inline and environ. * lib/unistd.in.h (environ): Wrap with a warning helper function. stdio: warn on suspicious uses * modules/stdio (Depends-on): Add warn-on-use. (Makefile.am): Provide new substitutions. * m4/stdio_h.m4 (gl_STDIO_H): Check for inline, ftello, and fseeko. * lib/stdio.in.h (gets): Always warn on use. (fseek, ftell): Adjust when warnings are issued, and honor _GL_NO_LARGE_FILES as a way to silence the warning. * tests/test-fpurge.c [!GNULIB_FSEEK]: Use new means to squelch any warning about large file offsets. * tests/test-freadable.c [!GNULIB_FSEEK]: Likewise. * tests/test-freading.c [!GNULIB_FSEEK]: Likewise. * tests/test-fseeko.c [!GNULIB_FSEEK]: Likewise. * tests/test-ftell.c [!GNULIB_FSEEK]: Likewise. * tests/test-ftello.c [!GNULIB_FSEEK]: Likewise. * tests/test-fwritable.c [!GNULIB_FSEEK]: Likewise. * tests/test-fwriting.c [!GNULIB_FSEEK]: Likewise. * tests/test-getopt.c [!GNULIB_FTELL]: Likewise. warn-on-use: new module * modules/warn-on-use: New file. * build-aux/warn-on-use.h: Likewise. * m4/warn-on-use.m4: Likewise. * MODULES.html.sh (Support for building): Mention it. 2010-01-10 Bruno Haible Tests for module 'unistr/u32-strdup'. * modules/unistr/u32-strdup-tests: New file. * tests/unistr/test-u32-strdup.c: New file. Tests for module 'unistr/u16-strdup'. * modules/unistr/u16-strdup-tests: New file. * tests/unistr/test-u16-strdup.c: New file. Tests for module 'unistr/u8-strdup'. * modules/unistr/u8-strdup-tests: New file. * tests/unistr/test-u8-strdup.c: New file. * tests/unistr/test-strdup.h: New file. Tests for module 'unistr/u32-strncmp'. * modules/unistr/u32-strncmp-tests: New file. * tests/unistr/test-u32-strncmp.c: New file. Tests for module 'unistr/u16-strncmp'. * modules/unistr/u16-strncmp-tests: New file. * tests/unistr/test-u16-strncmp.c: New file. Tests for module 'unistr/u8-strncmp'. * modules/unistr/u8-strncmp-tests: New file. * tests/unistr/test-u8-strncmp.c: New file. * tests/unistr/test-strncmp.h: New file. Tests for module 'unistr/u32-strcoll'. * modules/unistr/u32-strcoll-tests: New file. * tests/unistr/test-u32-strcoll.c: New file. Tests for module 'unistr/u16-strcoll'. * modules/unistr/u16-strcoll-tests: New file. * tests/unistr/test-u16-strcoll.c: New file. Tests for module 'unistr/u8-strcoll'. * modules/unistr/u8-strcoll-tests: New file. * tests/unistr/test-u8-strcoll.c: New file. Tests for module 'unistr/u32-strcmp'. * modules/unistr/u32-strcmp-tests: New file. * tests/unistr/test-u32-strcmp.c: New file. * tests/unistr/test-u32-strcmp.h: New file. Tests for module 'unistr/u16-strcmp'. * modules/unistr/u16-strcmp-tests: New file. * tests/unistr/test-u16-strcmp.c: New file. * tests/unistr/test-u16-strcmp.h: New file. Tests for module 'unistr/u8-strcmp'. * modules/unistr/u8-strcmp-tests: New file. * tests/unistr/test-u8-strcmp.c: New file. * tests/unistr/test-u8-strcmp.h: New file. * tests/unistr/test-strcmp.h: New file. Tests for module 'unistr/u32-strncat'. * modules/unistr/u32-strncat-tests: New file. * tests/unistr/test-u32-strncat.c: New file. Tests for module 'unistr/u16-strncat'. * modules/unistr/u16-strncat-tests: New file. * tests/unistr/test-u16-strncat.c: New file. Tests for module 'unistr/u8-strncat'. * modules/unistr/u8-strncat-tests: New file. * tests/unistr/test-u8-strncat.c: New file. * tests/unistr/test-strncat.h: New file. Tests for module 'unistr/u32-strcat'. * modules/unistr/u32-strcat-tests: New file. * tests/unistr/test-u32-strcat.c: New file. Tests for module 'unistr/u16-strcat'. * modules/unistr/u16-strcat-tests: New file. * tests/unistr/test-u16-strcat.c: New file. Tests for module 'unistr/u8-strcat'. * modules/unistr/u8-strcat-tests: New file. * tests/unistr/test-u8-strcat.c: New file. * tests/unistr/test-strcat.h: New file. Tests for module 'unistr/u32-stpncpy'. * modules/unistr/u32-stpncpy-tests: New file. * tests/unistr/test-u32-stpncpy.c: New file. Tests for module 'unistr/u16-stpncpy'. * modules/unistr/u16-stpncpy-tests: New file. * tests/unistr/test-u16-stpncpy.c: New file. Tests for module 'unistr/u8-stpncpy'. * modules/unistr/u8-stpncpy-tests: New file. * tests/unistr/test-u8-stpncpy.c: New file. * tests/unistr/test-stpncpy.h: New file. Tests for module 'unistr/u32-strncpy'. * modules/unistr/u32-strncpy-tests: New file. * tests/unistr/test-u32-strncpy.c: New file. Tests for module 'unistr/u16-strncpy'. * modules/unistr/u16-strncpy-tests: New file. * tests/unistr/test-u16-strncpy.c: New file. Tests for module 'unistr/u8-strncpy'. * modules/unistr/u8-strncpy-tests: New file. * tests/unistr/test-u8-strncpy.c: New file. * tests/unistr/test-strncpy.h: New file. Tests for module 'unistr/u32-stpcpy'. * modules/unistr/u32-stpcpy-tests: New file. * tests/unistr/test-u32-stpcpy.c: New file. Tests for module 'unistr/u16-stpcpy'. * modules/unistr/u16-stpcpy-tests: New file. * tests/unistr/test-u16-stpcpy.c: New file. Tests for module 'unistr/u8-stpcpy'. * modules/unistr/u8-stpcpy-tests: New file. * tests/unistr/test-u8-stpcpy.c: New file. * tests/unistr/test-stpcpy.h: New file. Tests for module 'unistr/u32-strcpy'. * modules/unistr/u32-strcpy-tests: New file. * tests/unistr/test-u32-strcpy.c: New file. Tests for module 'unistr/u16-strcpy'. * modules/unistr/u16-strcpy-tests: New file. * tests/unistr/test-u16-strcpy.c: New file. Tests for module 'unistr/u8-strcpy'. * modules/unistr/u8-strcpy-tests: New file. * tests/unistr/test-u8-strcpy.c: New file. * tests/unistr/test-strcpy.h: New file. Tests for module 'unistr/u32-strnlen'. * modules/unistr/u32-strnlen-tests: New file. * tests/unistr/test-u32-strnlen.c: New file. Tests for module 'unistr/u16-strnlen'. * modules/unistr/u16-strnlen-tests: New file. * tests/unistr/test-u16-strnlen.c: New file. Tests for module 'unistr/u8-strnlen'. * modules/unistr/u8-strnlen-tests: New file. * tests/unistr/test-u8-strnlen.c: New file. * tests/unistr/test-strnlen.h: New file. Tests for module 'unistr/u32-strlen'. * modules/unistr/u32-strlen-tests: New file. * tests/unistr/test-u32-strlen.c: New file. Tests for module 'unistr/u16-strlen'. * modules/unistr/u16-strlen-tests: New file. * tests/unistr/test-u16-strlen.c: New file. Tests for module 'unistr/u8-strlen'. * modules/unistr/u8-strlen-tests: New file. * tests/unistr/test-u8-strlen.c: New file. Tests for module 'unistr/u32-prev'. * modules/unistr/u32-prev-tests: New file. * tests/unistr/test-u32-prev.c: New file. Tests for module 'unistr/u16-prev'. * modules/unistr/u16-prev-tests: New file. * tests/unistr/test-u16-prev.c: New file. Tests for module 'unistr/u8-prev'. * modules/unistr/u8-prev-tests: New file. * tests/unistr/test-u8-prev.c: New file. Tests for module 'unistr/u32-next'. * modules/unistr/u32-next-tests: New file. * tests/unistr/test-u32-next.c: New file. Tests for module 'unistr/u16-next'. * modules/unistr/u16-next-tests: New file. * tests/unistr/test-u16-next.c: New file. Tests for module 'unistr/u8-next'. * modules/unistr/u8-next-tests: New file. * tests/unistr/test-u8-next.c: New file. Tests for module 'unistr/u32-strmbtouc'. * modules/unistr/u32-strmbtouc-tests: New file. * tests/unistr/test-u32-strmbtouc.c: New file. Tests for module 'unistr/u16-strmbtouc'. * modules/unistr/u16-strmbtouc-tests: New file. * tests/unistr/test-u16-strmbtouc.c: New file. Tests for module 'unistr/u8-strmbtouc'. * modules/unistr/u8-strmbtouc-tests: New file. * tests/unistr/test-u8-strmbtouc.c: New file. Tests for module 'unistr/u32-strmblen'. * modules/unistr/u32-strmblen-tests: New file. * tests/unistr/test-u32-strmblen.c: New file. Tests for module 'unistr/u16-strmblen'. * modules/unistr/u16-strmblen-tests: New file. * tests/unistr/test-u16-strmblen.c: New file. Tests for module 'unistr/u8-strmblen'. * modules/unistr/u8-strmblen-tests: New file. * tests/unistr/test-u8-strmblen.c: New file. Tests for module 'unistr/u32-cpy-alloc'. * modules/unistr/u32-cpy-alloc-tests: New file. * tests/unistr/test-u32-cpy-alloc.c: New file. Tests for module 'unistr/u16-cpy-alloc'. * modules/unistr/u16-cpy-alloc-tests: New file. * tests/unistr/test-u16-cpy-alloc.c: New file. Tests for module 'unistr/u8-cpy-alloc'. * modules/unistr/u8-cpy-alloc-tests: New file. * tests/unistr/test-u8-cpy-alloc.c: New file. * tests/unistr/test-cpy-alloc.h: New file. Tests for module 'unistr/u32-mbsnlen'. * modules/unistr/u32-mbsnlen-tests: New file. * tests/unistr/test-u32-mbsnlen.c: New file. Tests for module 'unistr/u16-mbsnlen'. * modules/unistr/u16-mbsnlen-tests: New file. * tests/unistr/test-u16-mbsnlen.c: New file. Tests for module 'unistr/u8-mbsnlen'. * modules/unistr/u8-mbsnlen-tests: New file. * tests/unistr/test-u8-mbsnlen.c: New file. Tests for module 'unistr/u32-chr'. * modules/unistr/u32-chr-tests: New file. * tests/unistr/test-u32-chr.c: New file. Tests for module 'unistr/u16-chr'. * modules/unistr/u16-chr-tests: New file. * tests/unistr/test-u16-chr.c: New file. Tests for module 'unistr/u8-chr'. * modules/unistr/u8-chr-tests: New file. * tests/unistr/test-u8-chr.c: New file. * tests/unistr/test-chr.h: New file, based on tests/test-memchr.c. Tests for module 'unistr/u32-cmp2'. * modules/unistr/u32-cmp2-tests: New file. * tests/unistr/test-u32-cmp2.c: New file. Tests for module 'unistr/u16-cmp2'. * modules/unistr/u16-cmp2-tests: New file. * tests/unistr/test-u16-cmp2.c: New file. Tests for module 'unistr/u8-cmp2'. * modules/unistr/u8-cmp2-tests: New file. * tests/unistr/test-u8-cmp2.c: New file. * tests/unistr/test-cmp2.h: New file, based on tests/unistr/test-cmp.h. Tests for module 'unistr/u32-cmp'. * modules/unistr/u32-cmp-tests: New file. * tests/unistr/test-u32-cmp.c: New file. Tests for module 'unistr/u16-cmp'. * modules/unistr/u16-cmp-tests: New file. * tests/unistr/test-u16-cmp.c: New file. Tests for module 'unistr/u8-cmp'. * modules/unistr/u8-cmp-tests: New file. * tests/unistr/test-u8-cmp.c: New file. * tests/unistr/test-cmp.h: New file, based on tests/test-memcmp.c. Tests for module 'unistr/u32-set'. * modules/unistr/u32-set-tests: New file. * tests/unistr/test-u32-set.c: New file. Tests for module 'unistr/u16-set'. * modules/unistr/u16-set-tests: New file. * tests/unistr/test-u16-set.c: New file. Tests for module 'unistr/u8-set'. * modules/unistr/u8-set-tests: New file. * tests/unistr/test-u8-set.c: New file. * tests/unistr/test-set.h: New file. Tests for module 'unistr/u32-move'. * modules/unistr/u32-move-tests: New file. * tests/unistr/test-u32-move.c: New file. Tests for module 'unistr/u16-move'. * modules/unistr/u16-move-tests: New file. * tests/unistr/test-u16-move.c: New file. Tests for module 'unistr/u8-move'. * modules/unistr/u8-move-tests: New file. * tests/unistr/test-u8-move.c: New file. * tests/unistr/test-move.h: New file. Tests for module 'unistr/u32-cpy'. * modules/unistr/u32-cpy-tests: New file. * tests/unistr/test-u32-cpy.c: New file. Tests for module 'unistr/u16-cpy'. * modules/unistr/u16-cpy-tests: New file. * tests/unistr/test-u16-cpy.c: New file. Tests for module 'unistr/u8-cpy'. * modules/unistr/u8-cpy-tests: New file. * tests/unistr/test-u8-cpy.c: New file. * tests/unistr/test-cpy.h: New file. 2010-01-09 Bruno Haible Tests for module 'unistr/u32-uctomb'. * modules/unistr/u32-uctomb-tests: New file. * tests/unistr/test-u32-uctomb.c: New file. Tests for module 'unistr/u16-uctomb'. * modules/unistr/u16-uctomb-tests: New file. * tests/unistr/test-u16-uctomb.c: New file. Tests for module 'unistr/u8-uctomb'. * modules/unistr/u8-uctomb-tests: New file. * tests/unistr/test-u8-uctomb.c: New file. Tests for module 'unistr/u32-mbtoucr'. * modules/unistr/u32-mbtoucr-tests: New file. * tests/unistr/test-u32-mbtoucr.c: New file. Tests for module 'unistr/u16-mbtoucr'. * modules/unistr/u16-mbtoucr-tests: New file. * tests/unistr/test-u16-mbtoucr.c: New file. Tests for module 'unistr/u8-mbtoucr'. * modules/unistr/u8-mbtoucr-tests: New file. * tests/unistr/test-u8-mbtoucr.c: New file. Tests for module 'unistr/u32-mbtouc'. * modules/unistr/u32-mbtouc-tests: New file. * tests/unistr/test-u32-mbtouc.c: New file. Tests for module 'unistr/u16-mbtouc'. * modules/unistr/u16-mbtouc-tests: New file. * tests/unistr/test-u16-mbtouc.c: New file. Tests for module 'unistr/u8-mbtouc'. * modules/unistr/u8-mbtouc-tests: New file. * tests/unistr/test-u8-mbtouc.c: New file. Tests for module 'unistr/u32-mbtouc-unsafe'. * modules/unistr/u32-mbtouc-unsafe-tests: New file. * tests/unistr/test-u32-mbtouc-unsafe.c: New file. * tests/unistr/test-u32-mbtouc.h: New file. Tests for module 'unistr/u16-mbtouc-unsafe'. * modules/unistr/u16-mbtouc-unsafe-tests: New file. * tests/unistr/test-u16-mbtouc-unsafe.c: New file. * tests/unistr/test-u16-mbtouc.h: New file. Tests for module 'unistr/u8-mbtouc-unsafe'. * modules/unistr/u8-mbtouc-unsafe-tests: New file. * tests/unistr/test-u8-mbtouc-unsafe.c: New file. * tests/unistr/test-u8-mbtouc.h: New file. Tests for module 'unistr/u32-mblen'. * modules/unistr/u32-mblen-tests: New file. * tests/unistr/test-u32-mblen.c: New file. Tests for module 'unistr/u16-mblen'. * modules/unistr/u16-mblen-tests: New file. * tests/unistr/test-u16-mblen.c: New file. Tests for module 'unistr/u8-mblen'. * modules/unistr/u8-mblen-tests: New file. * tests/unistr/test-u8-mblen.c: New file. Tests for module 'unistr/u32-to-u16'. * modules/unistr/u32-to-u16-tests: New file. * tests/unistr/test-u32-to-u16.c: New file. Tests for module 'unistr/u32-to-u8'. * modules/unistr/u32-to-u8-tests: New file. * tests/unistr/test-u32-to-u8.c: New file. Tests for module 'unistr/u16-to-u32'. * modules/unistr/u16-to-u32-tests: New file. * tests/unistr/test-u16-to-u32.c: New file. Tests for module 'unistr/u16-to-u8'. * modules/unistr/u16-to-u8-tests: New file. * tests/unistr/test-u16-to-u8.c: New file. Tests for module 'unistr/u8-to-u32'. * modules/unistr/u8-to-u32-tests: New file. * tests/unistr/test-u8-to-u32.c: New file. Tests for module 'unistr/u8-to-u16'. * modules/unistr/u8-to-u16-tests: New file. * tests/unistr/test-u8-to-u16.c: New file. Tests for module 'unistr/u32-check'. * modules/unistr/u32-check-tests: New file. * tests/unistr/test-u32-check.c: New file. Tests for module 'unistr/u16-check'. * modules/unistr/u16-check-tests: New file. * tests/unistr/test-u16-check.c: New file. Tests for module 'unistr/u8-check'. * modules/unistr/u8-check-tests: New file. * tests/unistr/test-u8-check.c: New file. * tests/unictype/test-categ_byname.c: Include . (category_equals): New function. (main): Add more tests. * modules/unictype/category-byname-tests (Depends-on): Add stdbool. * tests/unictype/test-bidi_byname.c (main): Add more tests. 2010-01-10 Bruno Haible unistr/u*-strcoll: Try harder to distinguish different strings. * lib/unistr/u-strcoll.h (FUNC): When sl1 and sl2 are the same, compare s1 and s2 to see if they are different. 2010-01-10 Bruno Haible unistr/u*-stpncpy: Fix the return value. * lib/unistr.h (u8_stpncpy, u16_stpncpy, u32_stpncpy): Make the description of the return value consistent with stpncpy in glibc. * lib/unistr/u-stpncpy.h (FUNC): Return the pointer past the last written non-NUL unit. 2010-01-10 Bruno Haible unistr/u*-next: Add missing dependencies. * modules/unistr/u8-next (Depends-on): Add unistr/u8-strmbtouc. * modules/unistr/u16-next (Depends-on): Add unistr/u16-strmbtouc. * modules/unistr/u32-next (Depends-on): Add unistr/u32-strmbtouc. 2010-01-10 Bruno Haible unistr/u8-mbsnlen: Fix return value for incomplete character. * lib/unistr/u8-mbsnlen.c (u8_mbsnlen): Use u8_mbtoucr instead of u8_mblen. * modules/unistr/u8-mbsnlen (Depends-on): Add unistr/u8-mbtoucr. Remove unistr/u8-mblen. * lib/unistr/u16-mbsnlen.c (u16_mbsnlen): Use u16_mbtoucr instead of u16_mblen. * modules/unistr/u16-mbsnlen (Depends-on): Add unistr/u16-mbtoucr. Remove unistr/u16-mblen. 2010-01-10 Bruno Haible wchar: Fix compilation error when is used from coreutils. * lib/wchar.in.h: Treat __need_wint_t like __need_mbstate_t. Reported by Brian Gough and Chris Clayton via Mike Frysinger and Jim Meyering . 2010-01-09 Bruno Haible unistr/u16-to-u32: Reject invalid input. * lib/unistr/u16-to-u32.c (u16_to_u32): Call u16_mbtoucr instead of u16_mbtouc. * modules/unistr/u16-to-u32 (Depends-on): Add unistr/u16-mbtoucr. Remove unistr/u16-mbtouc. unistr/u16-to-u8: Reject invalid input. * lib/unistr/u16-to-u8.c (u16_to_u8): Call u16_mbtoucr instead of u16_mbtouc. * modules/unistr/u16-to-u8 (Depends-on): Add unistr/u16-mbtoucr. Remove unistr/u16-mbtouc. unistr/u8-to-u32: Reject invalid input. * lib/unistr/u8-to-u32.c (u8_to_u32): Call u8_mbtoucr instead of u8_mbtouc. * modules/unistr/u8-to-u32 (Depends-on): Add unistr/u8-mbtoucr. Remove unistr/u8-mbtouc. unistr/u8-to-u16: Reject invalid input. * lib/unistr/u8-to-u16.c (u8_to_u16): Call u8_mbtoucr instead of u8_mbtouc. * modules/unistr/u8-to-u16 (Depends-on): Add unistr/u8-mbtoucr. Remove unistr/u8-mbtouc. 2010-01-09 Bruno Haible Tests for module 'getlogin'. * modules/getlogin-tests: New file. * tests/test-getlogin.c: New file. New module 'getlogin'. * lib/unistd.in.h (getlogin): New declaration. * lib/getlogin.c: New file. * m4/getlogin.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETLOGIN, HAVE_GETLOGIN. * modules/unistd (Makefile.am): Substitute GNULIB_GETLOGIN, HAVE_GETLOGIN. * modules/getlogin: New file. * doc/posix-functions/getlogin.texi: Mention the new module. Reported by John W. Eaton . 2010-01-09 Bruno Haible getlogin_r: Support for native Windows. * lib/getlogin_r.c: Include (getlogin_r): Implement for native Windows. * tests/test-getlogin_r.c (main): Also test with a huge buffer. Reported by Tatsuro MATSUOKA via John W. Eaton . 2010-01-09 Bruno Haible getlogin_r: Small fixes. * lib/getlogin_r.c (getlogin_r): Don't set errno if the function succeeds. * m4/getlogin_r.m4 (gl_GETLOGIN_R): Require gl_USE_SYSTEM_EXTENSIONS before testing whether getlogin_r is declared. No need to set HAVE_DECL_GETLOGIN_R to 1. (gl_PREREQ_GETLOGIN_R): Don't check for the getlogin_r declaration. 2010-01-09 Bruno Haible * lib/unistd.in.h (getlogin_r): Add comment. 2010-01-09 Bruno Haible Tests for module 'getlogin_r'. * modules/getlogin_r-tests: New file. * tests/test-getlogin_r.c: New file. 2010-01-09 Jim Meyering maint.mk: extend proper_name_utf8-vs-LIBICONV-checking rule * top/maint.mk (sc_proper_name_utf8_requires_ICONV): Adapt to work also when $(LIBICONV) is part of LDADD, rather than ${prog}_LDADD. 2010-01-08 Simon Josefsson * lib/dup2.c (rpl_dup2): Improve comment. 2010-01-08 Eric Blake maint.mk: allow packages to add makefile @@ exceptions * top/maint.mk (_makefile_at_at_check_exceptions): New hook. (sc_makefile_check): Rename... (sc_makefile_at_at_check): ...to this, and use hook. dup2: work around mingw bug * lib/dup2.c (rpl_dup2): Sanitize return value on mingw. Reported by Simon Josefsson. 2010-01-07 John W. Eaton (tiny change) glob: Fix C++ compilation. * lib/glob.in.h [__cplusplus]: Define __BEGIN_DECLS and __END_DECLS for C++. 2010-01-07 Bruno Haible Fix indentation of wctype.in.h, broken since 2007-01-06. * lib/wctype.in.h: Fix indentation of preprocessor directives. 2010-01-07 Bruno Haible mbslen: Avoid collision with system function. * lib/string.in.h [MirBSD]: Include . (mbslen): Undefine first. Alias mbslen to rpl_mbslen. * m4/mbslen.m4: New file. * modules/mbslen (Files): Add it. (configure.ac): Invoke gl_MBSLEN. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize HAVE_MBSLEN. * modules/string (Makefile.am): Substitute HAVE_MBSLEN. Reported by Nelson H. F. Beebe via Ian Beckwith . 2010-01-07 Bruno Haible dirent: Document the last fix. * doc/posix-headers/dirent.texi: Document the bug of missing 'ino_t'. 2010-01-07 Bruno Haible stdio: Ensure defines off_t, ssize_t, va_list. * lib/stdio.in.h: Include unconditionally. * tests/test-stdio.c: Verify that fpos_t, off_t, size_t, ssize_t, va_list are defined. * doc/posix-headers/stdio.texi: Document the bug of missing types. Reported by Eric Blake. 2010-01-07 Bruno Haible xlist, xoset: Fix missing dependency bug, introduced on 2009-12-13. * modules/xlist (Depends-on): Add 'list', * modules/xoset (Depends-on): Add 'oset'. Reported by Ralf Wildenhues . 2010-01-07 Bruno Haible * doc/posix-functions/strcasecmp.texi: Clarify the platforms. * doc/posix-functions/strncasecmp.texi: Likewise. 2010-01-07 Bruno Haible * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Simplify logic. 2010-01-07 John W. Eaton wctype: allow C++ use * lib/wctype.in.h: Add extern "C" block for C++. 2010-01-06 Eric Blake maint.mk: detect incorrect GFDL usage * top/maint.mk (_GFDL_regexp, sc_GFDL_version): New rule. 2010-01-06 Jim Meyering and Eric Blake maint.mk: ignore multi-line copyright in NEWS * top/maint.mk (NEWS_hash): Add immunity to multi-line copyright. 2010-01-06 Eric Blake select: add missing dependency * modules/select-tests (Depends-on): Move sockets dependency... * modules/select (Depends-on): ...here. Reported by Ian Beckwith. doc: regenerate INSTALL * doc/INSTALL: Reflect recent autoconf update. * doc/INSTALL.ISO: Likewise. * doc/INSTALL.UTF-8: Likewise. pread: fix compilation on glibc * m4/pread.m4 (gl_FUNC_PREAD): Request all interfaces. Reported by Ralf Wildenhues. dirent: fix test failure * lib/dirent.in.h (includes): Guarantee ino_t. Reported by Ralf Wildenhues. 2010-01-06 Petr Salinger (tiny change) linkat, renameat: avoid bad free * lib/at-func2.c (at_func2): Fix typo. Reported via Ian Beckwith, from http://bugs.debian.org/561117. 2010-01-06 Ralf Wildenhues cleanup after gl_FUNC_READLINK, for gl_FUNC_SYMLINK test * m4/readlink.m4 (gl_FUNC_READLINK): Remove conftest.lnk2, to avoid failure of symlink test later. 2010-01-06 Eric Blake stdio, unistd: guarantee ssize_t * lib/unistd.in.h (includes): Ensure that types required by POSIX 2008 are exposed when needed. * lib/stdio.in.h (includes): Likewise. Reported by Ralf Wildenhues. 2010-01-06 Paolo Bonzini nl_langinfo: do not call AC_CHECK_FUNC_ONCE inside if. * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): Do not call AC_CHECK_FUNC_ONCE inside if, do not adjust ac_cv_func_nl_langinfo. 2010-01-06 Jim Meyering readtokens: this module *does* require xalloc.h It uses only functions that were omitted by the old syntax-check rule. * lib/readtokens.c: Include "xalloc.h" once again. * modules/readtokens (Depends-on): Add xalloc. This reverts part of 0e0f8f12ec241c0f1c1f21f960bb5cf908a0fa3c. 2010-01-05 Eric Blake maint: support 'make announcement' from a VPATH build * top/maint.mk (announcement): Look for correct NEWS file. 2010-01-05 Aurelien Jarno (tiny change) utimens (fdutimens): ignore a negative FD, per contract * lib/utimens.c (fdutimens) [HAVE_FUTIMENS]: Call futimens only when we have a valid file descriptor. Otherwise, using a brand new glibc (with just-patched futimens that now fails with EBADF) would cause this function to fail with ENOSYS. Reported by Guillaume Ayoub in http://bugs.debian.org/563726. See also http://bugzilla.redhat.com/552320. 2010-01-05 Eric Blake strcase: document what it provides * doc/posix-functions/strcasecmp.texi (strcasecmp): Mention the gnulib module. * doc/posix-functions/strncasecmp.texi (strncasecmp): Likewise. Reported by Dilyan Palauzov . 2010-01-05 Jim Meyering maint: remove useless inclusions of "xalloc.h" * lib/getloadavg.c: Remove useless inclusion of "xalloc.h". * lib/readtokens.c: Likewise. * lib/same.c: Likewise. * modules/getloadavg (Depends-on): Remove xalloc. * modules/readtokens: Likewise. * modules/same: Likewise. maint.mk: include 4 more function names in alloca.h-checking regexp * top/maint.mk (sc_prohibit_xalloc_without_use): Use more complete regexp. Before, we would give a false-positive (saying alloca.h is included unnecessarily) when the only uses involved omitted symbols. xalloc.h: use consistent formatting * lib/xalloc.h: Move declarations to start in the first column. 2010-01-05 Eric Blake mkdir: avoid xalloc * lib/mkdir.c (includes): Drop unused header. Reported by John W. Eaton. 2010-01-04 Jim Meyering nl_langinfo: avoid configure-time syntax error * m4/nl_langinfo.m4 (gl_FUNC_NL_LANGINFO): When we've already tested for nl_langinfo.h, AC_CHECK_FUNCS_ONCE([nl_langinfo]) expands to the empty string. Don't let that provoke a shell syntax error. regcomp, regexec, fnmatch: avoid array bounds read error * lib/regcomp.c (build_equiv_class): From glibc: Use only the low 24 bits of a findidx return value as an index into the weights array. Patch by Ulrich Drepper: http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commit;h=b7d1c5fa30 * lib/regexec.c (check_node_accept_bytes): Likewise. * lib/fnmatch_loop.c (FCT): Likewise. regcomp: skip collseq lookup when there are no rules * lib/regcomp.c (lookup_collation_sequence_value): From glibc: http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a532a41df58 regcomp: recognize ill-formed { } expressions * lib/regcomp.c (parse_dup_op): From glibc: http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a87cd2894cb regcomp: fix typo in comment * lib/regcomp.c (duplicate_node_closure): Sync from glibc. s/satisfy/satisfies/. regcomp: sync from glibc: remove dead store * lib/regcomp.c (duplicate_node_closure): Remove useless search_duplicated_node call and dead store. regcomp: sync from glibc; always use nl_langinfo * lib/regcomp.c (init_dfa) [!LIBC]: Always use nl_langinfo (CODESET), now that gnulib provides it. Recognize UTF8 as well as UTF-8. * modules/regex (Depends-on): Add nl_langinfo. 2010-01-04 Eric Blake fdopendir: fix configure test * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for existing file. 2010-01-01 Bruno Haible wchar: Remove unused configure check. * m4/wchar.m4 (gl_WCHAR_H): Don't test whether is standalone. 2010-01-01 Eric Blake headers: make check of system header explicit * m4/netdb_h.m4 (gl_HEADER_NETDB): Don't exploit knowledge of gl_CHECK_NEXT_HEADER internals, but call AC_CHECK_HEADERS_ONCE ourselves. * m4/search_h.m4 (gl_SEARCH_H): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Likewise, for gt_INTTYPES_PRI internals. * m4/wchar.m4 (gl_WCHAR_H): Skip followup test if header is missing. Suggested by Bruno Haible. 2010-01-01 Jim Meyering ChangeLog: tweak to eliminate unnecessary copyright line * ChangeLog: Remove a copyright line that was mistakenly updated by today's update-copyright run. Reported by Eric Blake. test-update-copyright: don't let envvar setting cause test failure * tests/test-update-copyright.sh: Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH. 2010-01-01 Bruno Haible localename: Avoid gcc warning. * lib/localename.c (gl_locale_name_thread_unsafe): Don't define this function if it is not used. 2010-01-01 Jim Meyering update nearly all FSF copyright year lists to include 2010 Use the same procedure as for 2009, outlined in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/20081 version-etc: set COPYRIGHT_YEAR to 2010 * lib/version-etc.c (COPYRIGHT_YEAR): Manually update the enum. 2009-12-31 Eric Blake doc: correct availability of cygwin 1.5.x getopt * doc/posix-functions/optarg.texi (optarg): Cygwin supplies getopt variables. * doc/posix-functions/opterr.texi (opterr): Likewise. * doc/posix-functions/optind.texi (optind): Likewise. * doc/posix-functions/optopt.texi (optopt): Likewise. * doc/posix-functions/tzname.texi (tzname): Likewise. openat: update maintainer * modules/openat (Maintainer): Add myself. utimens: avoid shadowing warning * lib/utimens.c (fdutimens, lutimens): Consolidate separate stat buffers into one, to avoid shadowing, as well as avoiding a redundant stat. Reported by Jim Meyering. test-dup2: avoid compiler warning * tests/test-dup2.c (is_inheritable): Only define if used. 2010-01-01 Bruno Haible vasnprintf: Avoid passing an 'rpl_mbstate_t *' to the system's wcrtomb. * lib/vasnprintf.c (VASNPRINTF): If GNULIB_defined_mbstate_t is defined, use wctomb instead of wcrtomb. 2010-01-01 Bruno Haible iconv: Reject native Solaris iconv. * m4/iconv.m4 (AM_ICONV_LINK): Recognize native Solaris iconv() bug. * doc/posix-functions/iconv.texi: Document native Solaris iconv() bug. 2009-12-31 Bruno Haible * tests/test-signal.c (main): Remove test of 'SIG'. 2009-12-31 Bruno Haible spawn: Fix incomplete fix. * lib/spawn.in.h (posix_spawnattr_getflags, posix_spawnattr_setflags, posix_spawnattr_getpgroup, posix_spawnattr_setpgroup): Correct the link warnings for GNULIB_POSIXCHECK again. Reported by Eric Blake. 2009-12-31 Bruno Haible Avoid namespace pollution on glibc systems. * lib/spawn.in.h: Don't include , on glibc systems. * lib/sys_times.in.h: Don't include on glibc systems. * lib/wchar.in.h: Don't include , , on glibc systems. 2009-12-31 Bruno Haible * m4/wchar.m4 (gl_WCHAR_H): Remove gl_STDDEF_H invocation. (gl_REPLACE_WCHAR_H): Turn into a no-op. * m4/arpa_inet_h.m4 (gl_REPLACE_ARPA_INET_H): Likewise. * m4/dirent_h.m4 (gl_REPLACE_DIRENT_H): Likewise. * m4/locale_h.m4 (gl_REPLACE_LOCALE_H): Likewise. * m4/spawn_h.m4 (gl_REPLACE_SPAWN_H): Likewise. * m4/sys_ioctl_h.m4 (gl_REPLACE_SYS_IOCTL_H): Likewise. 2009-12-31 Bruno Haible * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Invoke gl_CHECK_NEXT_HEADERS before testing ac_cv_header_sys_select_h, not afterwards. 2009-12-31 Bruno Haible * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H_DEFAULTS): Don't set SYS_UTSNAME_H. 2009-12-31 Bruno Haible spawn: Fix misapplied patch. * lib/spawn.in.h (posix_spawnattr_getflags, posix_spawnattr_setflags, posix_spawnattr_getpgroup, posix_spawnattr_setpgroup): Correct the link warnings for GNULIB_POSIXCHECK. 2009-12-31 Bruno Haible times: Update after sys_times changed. * m4/times.m4: New file, extracted from modules/times. Set HAVE_TIMES. * modules/times (Files): Add it. (configure.ac): Invoke gl_FUNC_TIMES. 2009-12-31 Bruno Haible Use AC_C_INLINE where necessary. * m4/chdir-long.m4 (gl_PREREQ_CHDIR_LONG): Require AC_C_INLINE. * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Likewise. * m4/fts.m4 (gl_FUNC_FTS_CORE): Likewise. * m4/mbchar.m4 (gl_MBCHAR): Likewise. * m4/mbfile.m4 (gl_MBFILE): Likewise. * m4/mbiter.m4 (gl_MBITER): Likewise. * m4/regex.m4 (gl_PREREQ_REGEX): Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/wait-process.m4 (gl_WAIT_PROCESS): Likewise. * modules/u64 (configure.ac): Likewise. 2009-12-31 Bruno Haible Use AC_C_INLINE instead of module 'inline' where possible. * modules/inline (Description): Clarify purpose. * m4/count-one-bits.m4 (gl_COUNT_ONE_BITS): Require AC_C_INLINE. * modules/count-one-bits (Depends-on): Remove inline. * m4/openat.m4 (gl_PREREQ_OPENAT): Require AC_C_INLINE. * modules/openat (Depends-on): Remove inline. * modules/fdutimensat (Depends-on, configure.ac): Require AC_C_INLINE instead of depending on module 'inline'. * modules/filevercmp (Depends-on, configure.ac): Likewise. * modules/unicase/cased (Depends-on, configure.ac): Likewise. * modules/unicase/ignorable (Depends-on, configure.ac): Likewise. * modules/unictype/category-of (Depends-on, configure.ac): Likewise. * modules/unictype/category-test (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-alnum (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-alpha (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-blank (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-cntrl (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-digit (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-graph (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-lower (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-print (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-punct (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-space (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-upper (Depends-on, configure.ac): Likewise. * modules/unictype/ctype-xdigit (Depends-on, configure.ac): Likewise. * modules/unictype/property-alphabetic (Depends-on, configure.ac): Likewise. * modules/unictype/property-ascii-hex-digit (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-arabic-digit (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-arabic-right-to-left (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-block-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-boundary-neutral (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-common-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-control (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-embedding-or-override (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-eur-num-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-eur-num-terminator (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-european-digit (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-hebrew-right-to-left (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-left-to-right (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-non-spacing-mark (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-other-neutral (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-pdf (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-segment-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-bidi-whitespace (Depends-on, configure.ac): Likewise. * modules/unictype/property-combining (Depends-on, configure.ac): Likewise. * modules/unictype/property-composite (Depends-on, configure.ac): Likewise. * modules/unictype/property-currency-symbol (Depends-on, configure.ac): Likewise. * modules/unictype/property-dash (Depends-on, configure.ac): Likewise. * modules/unictype/property-decimal-digit (Depends-on, configure.ac): Likewise. * modules/unictype/property-default-ignorable-code-point (Depends-on, configure.ac): Likewise. * modules/unictype/property-deprecated (Depends-on, configure.ac): Likewise. * modules/unictype/property-diacritic (Depends-on, configure.ac): Likewise. * modules/unictype/property-extender (Depends-on, configure.ac): Likewise. * modules/unictype/property-format-control (Depends-on, configure.ac): Likewise. * modules/unictype/property-grapheme-base (Depends-on, configure.ac): Likewise. * modules/unictype/property-grapheme-extend (Depends-on, configure.ac): Likewise. * modules/unictype/property-grapheme-link (Depends-on, configure.ac): Likewise. * modules/unictype/property-hex-digit (Depends-on, configure.ac): Likewise. * modules/unictype/property-hyphen (Depends-on, configure.ac): Likewise. * modules/unictype/property-id-continue (Depends-on, configure.ac): Likewise. * modules/unictype/property-id-start (Depends-on, configure.ac): Likewise. * modules/unictype/property-ideographic (Depends-on, configure.ac): Likewise. * modules/unictype/property-ids-binary-operator (Depends-on, configure.ac): Likewise. * modules/unictype/property-ids-trinary-operator (Depends-on, configure.ac): Likewise. * modules/unictype/property-ignorable-control (Depends-on, configure.ac): Likewise. * modules/unictype/property-iso-control (Depends-on, configure.ac): Likewise. * modules/unictype/property-join-control (Depends-on, configure.ac): Likewise. * modules/unictype/property-left-of-pair (Depends-on, configure.ac): Likewise. * modules/unictype/property-line-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-logical-order-exception (Depends-on, configure.ac): Likewise. * modules/unictype/property-lowercase (Depends-on, configure.ac): Likewise. * modules/unictype/property-math (Depends-on, configure.ac): Likewise. * modules/unictype/property-non-break (Depends-on, configure.ac): Likewise. * modules/unictype/property-not-a-character (Depends-on, configure.ac): Likewise. * modules/unictype/property-numeric (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-alphabetic (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-default-ignorable-code-point (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-grapheme-extend (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-id-continue (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-id-start (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-lowercase (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-math (Depends-on, configure.ac): Likewise. * modules/unictype/property-other-uppercase (Depends-on, configure.ac): Likewise. * modules/unictype/property-paired-punctuation (Depends-on, configure.ac): Likewise. * modules/unictype/property-paragraph-separator (Depends-on, configure.ac): Likewise. * modules/unictype/property-pattern-syntax (Depends-on, configure.ac): Likewise. * modules/unictype/property-pattern-white-space (Depends-on, configure.ac): Likewise. * modules/unictype/property-private-use (Depends-on, configure.ac): Likewise. * modules/unictype/property-punctuation (Depends-on, configure.ac): Likewise. * modules/unictype/property-quotation-mark (Depends-on, configure.ac): Likewise. * modules/unictype/property-radical (Depends-on, configure.ac): Likewise. * modules/unictype/property-sentence-terminal (Depends-on, configure.ac): Likewise. * modules/unictype/property-soft-dotted (Depends-on, configure.ac): Likewise. * modules/unictype/property-space (Depends-on, configure.ac): Likewise. * modules/unictype/property-terminal-punctuation (Depends-on, configure.ac): Likewise. * modules/unictype/property-titlecase (Depends-on, configure.ac): Likewise. * modules/unictype/property-unassigned-code-value (Depends-on, configure.ac): Likewise. * modules/unictype/property-unified-ideograph (Depends-on, configure.ac): Likewise. * modules/unictype/property-uppercase (Depends-on, configure.ac): Likewise. * modules/unictype/property-variation-selector (Depends-on, configure.ac): Likewise. * modules/unictype/property-white-space (Depends-on, configure.ac): Likewise. * modules/unictype/property-xid-continue (Depends-on, configure.ac): Likewise. * modules/unictype/property-xid-start (Depends-on, configure.ac): Likewise. * modules/unictype/property-zero-width (Depends-on, configure.ac): Likewise. * modules/unictype/syntax-c-ident (Depends-on, configure.ac): Likewise. * modules/unictype/syntax-java-ident (Depends-on, configure.ac): Likewise. 2009-12-31 Bruno Haible Remove unnecessary AC_C_INLINE invocation. * m4/popen.m4 (gl_PREREQ_POPEN): Don't invoke AC_C_INLINE. Not needed since 2009-08-21. 2009-12-31 Jim Meyering maint.mk: don't require explicit gpg_key_ID in cfg.mk * top/maint.mk (gpg_key_ID): Derive key ID from signed release tag. With this change, we can all remove the gpg_key_ID = ... definition from our respective cfg.mk files. maint.mk: create announcement template in ~/, not in /tmp * top/maint.mk (emit_upload_commands): Adjust. (release-prep): Emit into ~/announce-..., not /tmp/announce-... Remove temporary file, .ci-msg. 2009-12-31 Eric Blake link-warning: always build headers with link warnings * modules/arpa_inet (Makefile.am): Always build replacement header. * modules/ctype (Makefile.am): Likewise. * modules/dirent (Makefile.am): Likewise. * modules/inttypes (Makefile.am): Likewise. * modules/langinfo (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/spawn (Makefile.am): Likewise. * modules/sys_file (Makefile.am): Likewise. * modules/sys_ioctl (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_times (Makefile.am): Likewise. * modules/sys_utsname (Makefile.am): Likewise. * modules/sys_wait (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET) (gl_ARPA_INET_H_DEFAULTS): Drop unneeded variable. * m4/ctype.m4 (gl_CTYPE_H_DEFAULTS): Likewise. * m4/isblank.m4 (gl_FUNC_ISBLANK): Likewise. * m4/dirent_h.m4 (gl_REPLACE_DIRENT_H, gl_DIRENT_H_DEFAULTS): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Likewise. * m4/langinfo_h.m4 (gl_LANGINFO_H): Likewise. * m4/locale_h.m4 (gl_REPLACE_LOCALE_H, gl_LOCALE_H_DEFAULTS): Likewise. * m4/spawn_h.m4 (gl_REPLACE_SPAWN_H, gl_SPAWN_H_DEFAULTS): Likewise. * m4/sys_file_h.m4 (gl_HEADER_SYS_FILE_H): Likewise. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H, gl_REPLACE_SYS_IOCTL_H) (gl_SYS_IOCTL_H_DEFAULTS): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Likewise. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H) (gl_SYS_UTSNAME_H_DEFAULTS): Likewise. * m4/wchar.m4 (gl_WCHAR_H, gl_REPLACE_WCHAR_H) (gl_WCHAR_H_DEFAULTS): Likewise. 2009-12-31 Eric Blake signal, spawn: use link warnings * lib/signal.in.h (sigset_t): Make unconditional. (sigismember, sigemptyset, sigaddset, sigdelset, sigfillset) (sigpending, sigprocmask, sigaction): Add link warnings. * lib/spawn.in.h (posix_spawn, posix_spawnp, posix_spawnattr_init) (posix_spawnattr_destroy, posix_spawnattr_getsigdefault) (posix_spawnattr_setsigdefault, posix_spawnattr_getsigmask) (posix_spawnattr_setsigmask, posix_spawnattr_getflags) (posix_spawnattr_setflags, posix_spawnattr_getpgroup) (posix_spawnattr_setpgroup, posix_spawnattr_getschedpolicy) (posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam) (posix_spawnattr_setschedparam, posix_spawn_file_actions_init) (posix_spawn_file_actions_destroy) (posix_spawn_file_actions_addopen) (posix_spawn_file_actions_addclose) (posix_spawn_file_actions_adddup2): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Guarantee uid_t. * tests/test-signal.c (main): Enhance test. spawn: improve wrapper support * m4/spawn_h.m4 (gl_SPAWN_H): Check for type existence. (gl_SPAWN_H_DEFAULTS): New defaults. * modules/spawn (Makefile.am): Substitute them. * lib/spawn.in.h: (posix_spawnattr_t, posix_spawn_file_actions_t): Only declare if missing or broken. sys_times, sys_utsname: use include_next * m4/sys_times_h.m4 (gl_SYS_TIMES_H): Support wrapping an existing header. (gl_SYS_TIMES_H_DEFAULTS): Add another variable. * m4/sys_utsname_h.m4 (gl_SYS_UTSNAME_H) (gl_SYS_UTSNAME_H_DEFAULTS): Likewise. * modules/sys_times (Depends-on): Add include_next. (Makefile.am): Substitute additional values. * modules/sys_utsname (Depends-on, Makefile.am): Likewise. * lib/sys_times.in.h (includes): Include native header, if available. * lib/sys_utsname.in.h (includes): Likewise. * tests/test-sys_times.c (main): Enhance test. fdutimensat: revert prior patch * modules/fdutimensat (Depends-on): Re-add inline; it is needed by utimens.h. Reported by Bruno Haible. 2009-12-30 Eric Blake sys_wait: drop link-warning dependency * modules/sys_wait (Depends-on, Makefile.am): Drop unneeded link-warning efforts. * lib/sys_wait.in.h: Likewise. fdutimensat: remove bogus dependency * modules/fdutimensat (Depends-on): Drop inline. unistd: fix typo * lib/unistd.in.h (linkat) [GNULIB_POSIXCHECK]: Fix typo. 2009-12-30 Bruno Haible Fix compilation error with Solaris cc. * lib/unicase/u8-is-invariant.c: Include . * lib/unicase/u16-is-invariant.c: Likewise. * lib/unicase/u32-is-invariant.c: Likewise. Reported by Nelson H. F. Beebe . 2009-12-30 Bruno Haible Fix test crash. * tests/test-localename.c (test_locale_name_thread): Skip unavailable locales. Reported by Simon Josefsson . 2009-12-30 Bruno Haible Fix compilation error on most platforms. * tests/test-localename.c (categories): Define only if HAVE_NEWLOCALE. Reported by Simon Josefsson and Nelson H. F. Beebe . 2009-12-30 Eric Blake futimens, utimensat: work around ntfs-3g bug * lib/utimensat.c (rpl_utimensat): Drop attempts to cache whether a ctime bug is present, and expand workaround to cover ntfs-3g. * lib/utimens.c (fdutimens, lutimens): Likewise. (utimensat_ctime_really, detect_ctime_bug): Drop cache mechanism. (validate_timespec): Adjust return value. * m4/futimens.m4 (gl_FUNC_FUTIMENS): Update comment. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. Reported by ctrn3e8 . 2009-12-29 Eric Blake link-warning: make usage consistent * modules/ctype (Depends-on): Add link-warning. (Makefile.am): Update rules accordingly. * modules/langinfo (Depends-on, Makefile.am): Likewise. * modules/locale (Depends-on, Makefile.am): Likewise. * modules/sys_file (Makefile.am): Likewise. * modules/getopt-posix (Makefile.am): Delete unused link warning efforts. * lib/ctype.in.h (GL_LINK_WARNING): Ensure definition before use. * lib/langinfo.in.h (GL_LINK_WARNING): Likewise. * lib/locale.in.h (GL_LINK_WARNING): Likewise. * lib/sys_file.in.h (GL_LINK_WARNING): Likewise. stdio: remove unused variables * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Remove unused variables. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Likewise. * m4/ftello.m4 (gl_FUNC_FTELLO): Likewise. tests: test more substitute headers * modules/ctype-tests: New file. * modules/dirent-tests: Likewise. * modules/spawn-tests: Likewise. * modules/sys_file-tests: Likewise. * modules/sys_ioctl-tests: Likewise. * modules/sys_wait-tests: Likewise. * tests/test-ctype.c: Likewise. * tests/test-dirent.c: Likewise. * tests/test-spawn.c: Likewise. * tests/test-sys_file.c: Likewise. * tests/test-sys_ioctl.c: Likewise. * tests/test-sys_wait.c: Likewise. * m4/spawn_h.m4 (gl_SPAWN_H): Replace header if it is missing. * lib/sys_file.in.h (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB): Provide whether or not flock is in use. tests: remove License section from module * modules/arpa_inet-tests: Remove unneeded section. * modules/byteswap-tests: Likewise. * modules/ceilf-tests: Likewise. * modules/ceill-tests: Likewise. * modules/crypto/des-tests: Likewise. * modules/crypto/gc-arcfour-tests: Likewise. * modules/crypto/gc-arctwo-tests: Likewise. * modules/crypto/gc-des-tests: Likewise. * modules/crypto/gc-hmac-md5-tests: Likewise. * modules/crypto/gc-hmac-sha1-tests: Likewise. * modules/crypto/gc-md2-tests: Likewise. * modules/crypto/gc-md4-tests: Likewise. * modules/crypto/gc-md5-tests: Likewise. * modules/crypto/gc-pbkdf2-sha1-tests: Likewise. * modules/crypto/gc-rijndael-tests: Likewise. * modules/crypto/gc-sha1-tests: Likewise. * modules/crypto/gc-tests: Likewise. * modules/crypto/md2-tests: Likewise. * modules/crypto/md4-tests: Likewise. * modules/fcntl-h-tests: Likewise. * modules/floorf-tests: Likewise. * modules/floorl-tests: Likewise. * modules/frexp-nolibm-tests: Likewise. * modules/frexp-tests: Likewise. * modules/frexpl-nolibm-tests: Likewise. * modules/frexpl-tests: Likewise. * modules/getaddrinfo-tests: Likewise. * modules/inttypes-tests: Likewise. * modules/isfinite-tests: Likewise. * modules/isinf-tests: Likewise. * modules/ldexpl-tests: Likewise. * modules/locale-tests: Likewise. * modules/math-tests: Likewise. * modules/netdb-tests: Likewise. * modules/netinet_in-tests: Likewise. * modules/printf-frexp-tests: Likewise. * modules/printf-frexpl-tests: Likewise. * modules/priv-set-tests: Likewise. * modules/random_r-tests: Likewise. * modules/round-tests: Likewise. * modules/roundf-tests: Likewise. * modules/roundl-tests: Likewise. * modules/search-tests: Likewise. * modules/select-tests: Likewise. * modules/signal-tests: Likewise. * modules/stdbool-tests: Likewise. * modules/stddef-tests: Likewise. * modules/stdint-tests: Likewise. * modules/stdio-tests: Likewise. * modules/stdlib-tests: Likewise. * modules/string-tests: Likewise. * modules/strings-tests: Likewise. * modules/sys_select-tests: Likewise. * modules/sys_socket-tests: Likewise. * modules/sys_stat-tests: Likewise. * modules/sys_time-tests: Likewise. * modules/sys_utsname-tests: Likewise. * modules/sysexits-tests: Likewise. * modules/time-tests: Likewise. * modules/trunc-tests: Likewise. * modules/truncf-tests: Likewise. * modules/truncl-tests: Likewise. * modules/tsearch-tests: Likewise. * modules/unistd-tests: Likewise. * modules/wchar-tests: Likewise. * modules/wctype-tests: Likewise. tests: fix license on several tests * tests/test-des.c: Update to GPLv3+. * tests/test-flock.c: Likewise. * tests/test-fsync.c: Likewise. * tests/test-futimens.h: Likewise. * tests/test-gc-arcfour.c: Likewise. * tests/test-gc-arctwo.c: Likewise. * tests/test-gc-des.c: Likewise. * tests/test-gc-hmac-md5.c: Likewise. * tests/test-gc-hmac-sha1.c: Likewise. * tests/test-gc-md2.c: Likewise. * tests/test-gc-md4.c: Likewise. * tests/test-gc-md5.c: Likewise. * tests/test-gc-pbkdf2-sha1.c: Likewise. * tests/test-gc-rijndael.c: Likewise. * tests/test-gc-sha1.c: Likewise. * tests/test-gc.c: Likewise. * tests/test-getcwd.c: Likewise. * tests/test-link.c: Likewise. * tests/test-link.h: Likewise. * tests/test-lutimens.h: Likewise. * tests/test-md2.c: Likewise. * tests/test-md4.c: Likewise. * tests/test-mkdir.h: Likewise. * tests/test-rename.c: Likewise. * tests/test-rename.h: Likewise. * tests/test-safe-alloc.c: Likewise. * tests/test-utimens-common.h: Likewise. * tests/test-utimens.h: Likewise. maint: sync license texts * config/srclist.txt: Add gpl-1.3.texi, lgpl-1.3.texi. * doc/gpl-3.0.texi: Revert copyright year update. * doc/lgpl-3.0.texi: Likewise. 2009-12-29 Jim Meyering update nearly all FSF copyright year lists to include 2009 The files named by the following are exempted: grep -v '^#' config/srclist.txt|grep -v '^$' | while read src dst; do test -f "$dst" && { echo "$dst"; continue; } test -d "$dst" || continue echo "$dst"/$(basename "$src") done > exempt git ls-files tests/unictype >> exempt In the remaining files, convert to all-interval notation if - there is already at least one year interval like 2000-2003 - the file is maintained by me - the file is in lib/uni*/, where that style already prevails Otherwise, use update-copyright's default. 2009-12-29 Simon Josefsson and Eric Blake tests: don't require debug system() to pass * tests/test-lstat.h (test_lstat_func): Move debug cleanup... * tests/test-rmdir.h (test_rmdir_func): Likewise. * tests/test-unlink.h (test_unlink_func): Likewise. * tests/test-fstatat.c (main): ...into callers. * tests/test-lstat.c (main): Likewise. * tests/test-rmdir.c (main): Likewise. * tests/test-unlink.c (main): Likewise. * tests/test-unlinkat.c (main): Likewise. * tests/test-areadlink-with-size.c (main): Don't require a debug-only system call to pass, aiding cross-testing to mingw. * tests/test-areadlink.c (main): Likewise. * tests/test-areadlinkat-with-size.c (main): Likewise. * tests/test-areadlinkat.c (main): Likewise. * tests/test-canonicalize-lgpl.c (main): Likewise. * tests/test-canonicalize.c (main): Likewise. * tests/test-chown.c (main): Likewise. * tests/test-fchownat.c (main): Likewise. * tests/test-lchown.c (main): Likewise. * tests/test-fdutimensat.c (main): Likewise. * tests/test-futimens.c (main): Likewise. * tests/test-link.c (main): Likewise. * tests/test-linkat.c (main): Likewise. * tests/test-mkdir.c (main): Likewise. * tests/test-mkdirat.c (main): Likewise. * tests/test-mkfifo.c (main): Likewise. * tests/test-mkfifoat.c (main): Likewise. * tests/test-mknod.c (main): Likewise. * tests/test-readlink.c (main): Likewise. * tests/test-remove.c (main): Likewise. * tests/test-rename.c (main): Likewise. * tests/test-renameat.c (main): Likewise. * tests/test-symlink.c (main): Likewise. * tests/test-symlinkat.c (main): Likewise. * tests/test-utimens.c (main): Likewise. * tests/test-utimensat.c (main): Likewise. 2009-12-29 Simon Josefsson * modules/selinux-h (selinux/selinux.h, selinux/context.h): Depend on $(UNUSED_PARAMETER_H) to avoid build failure. 2009-12-28 Jim Meyering update-copyright: you may specify a max. line length other than 72 * build-aux/update-copyright: Honor $UPDATE_COPYRIGHT_MAX_LINE_LENGTH. maint: use consistent FSF copyright line syntax * lib/posixtm.c: Add missing comma in FSF copyright line. * lib/posixtm.h: Likewise. * lib/getugroups.c: Add missing ", Inc.". pmccabe2html: emit consistent FSF copyright; remove trailing blanks * build-aux/pmccabe2html: Insert comma before "Inc." in emitted FSF copyright line. Remove trailing blanks. 2009-12-28 Eric Blake test-dup2: reduce dependencies * modules/cloexec (Configure.ac): Set witness. * modules/dup2-tests (Depends-on): Drop cloexec. * tests/test-dup2.c (main): Skip portion of test if cloexec module not present. Suggested by Bruno Haible. 2009-12-26 Bruno Haible Remove an unneeded dependency. * modules/fseterr (Depends-on): Remove dup2. 2009-12-26 Eric Blake tests: use macros.h in more places * tests/macros.h (ASSERT): Depend on ASSERT_STREAM. (ASSERT_STREAM): Provide default of stderr. * tests/test-dirent-safer.c: Include macros.h, using alternate stream for assertions. * tests/test-dup-safer.c: Likewise. * tests/test-freopen-safer.c: Likewise. * tests/test-getopt.c: Likewise. * tests/test-openat-safer.c: Likewise. * tests/test-pipe.c: Likewise. * tests/test-popen-safer.c: Likewise. * modules/dirent-safer-tests (Files): Include macros.h. * modules/unistd-safer-tests (Files): Likewise. * modules/freopen-safer-tests (Files): Likewise. * modules/getopt-posix-tests (Files): Likewise. * modules/openat-safer-tests (Files): Likewise. * modules/pipe-tests (Files): Likewise. 2009-12-26 Bruno Haible javacomp-script: Portability fix. * m4/javacomp.m4 (gt_JAVACOMP): Fix creation of conftestver.class so that it also works on Solaris. 2009-12-26 Bruno Haible localename: Fix storage allocation of gl_locale_name_thread's result. * lib/localename.c (SIZE_BITS, string_hash, struct hash_node, HASH_TABLE_SIZE, struniq_hash_table, struniq_lock, struniq): Define on all platforms that have 'uselocale'. (gl_locale_name_thread_unsafe): New function, extracted from gl_locale_name_thread. (gl_locale_name_thread): Call struniq on all platforms that have 'uselocale'. * tests/test-localename.c (test_locale_name_thread): Check that the resulting strings are permanently allocated. * modules/localename-tests (Depends-on): Add strdup. 2009-12-26 Bruno Haible * tests/test-localename.c (categories): Fill in the strings. 2009-12-26 Jim Meyering isdir: complete the removal of m4/isdir.m4 * modules/isdir (configure.ac): Remove reference to gl_ISDIR. isdir: clean up, since at least grep still uses it * lib/isdir.c: Include "isdir.h". (S_ISDIR): Remove now-unneeded definition. * modules/isdir (Files): Add lib/isdir.h. * lib/isdir.h: New file, with declaration. * m4/isdir.m4: Remove file -- unneeded. 2009-12-25 Bruno Haible selinux-h: Make generated .h files standalone. * lib/se-context.in.h: Arrange to include _GL_UNUSED_PARAMETER definition. Use _GL_UNUSED_PARAMETER instead of _GL_UNUSED. * lib/se-selinux.in.h: Likewise. * modules/selinux-h (Depends-on): Add unused-parameter. (Makefile.am): Insert definition of _GL_UNUSED_PARAMETER into selinux/selinux.h and selinux/context.h. Suggested by Eric Blake. 2009-12-25 Bruno Haible Move gl_FCNTL_O_FLAGS to a separate .m4 file. * m4/fcntl-o.m4: New file, extracted from m4/fcntl_h.m4. * m4/fcntl_h.m4 (gl_FCNTL_O_FLAGS): Remove macro. * modules/fcntl-h (Files): Add m4/fcntl-o.m4. * modules/localcharset (Files): Likewise. Remove m4/fcntl_h.m4. 2009-12-24 Bruno Haible openat: Fix warning. * lib/openat-proc.c: Include . 2009-12-24 Bruno Haible New module 'unused-parameter'. * build-aux/unused-parameter.h: New file, extracted from earlier gnulib-common.m4. * modules/unused-parameter: New file. * lib/unistr.h: Include unused-parameter.h. (u32_mbtouc_unsafe, u32_mbtouc): Use _GL_UNUSED_PARAMETER instead of _GL_UNUSED. * modules/unistr/base (Depends-on): Add unused-parameter. 2009-12-24 Bruno Haible Add missing dependencies to 'extensions' module. * m4/extensions.m4: Add comment. * modules/accept4 (Depends-on): Add extensions. * modules/dup3 (Depends-on): Likewise. * modules/fcntl (Depends-on): Likewise. * modules/futimens (Depends-on): Likewise. * modules/mknod (Depends-on): Likewise. * modules/pipe2 (Depends-on): Likewise. * modules/stat-time (Depends-on): Likewise. * modules/strcasestr-simple (Depends-on): Likewise. * modules/strsignal (Depends-on): Likewise. * modules/utimensat (Depends-on): Likewise. * modules/localcharset (Depends-on): Likewise. Needed because of gl_FCNTL_O_FLAGS. * modules/wcrtomb (Depends-on): Likewise. Needed because of AC_TYPE_MBSTATE_T. * modules/wcsnrtombs (Depends-on): Likewise. * modules/wcsrtombs (Depends-on): Likewise. 2009-12-24 Bruno Haible binary-io: Avoid gcc warning due to SET_BINARY. * lib/binary-io.h (SET_BINARY): Cast the result to void. Reported by Jim Meyering . Suggestion by Eric Blake. 2009-12-24 Bruno Haible Avoid future namespace pollution on glibc systems. * lib/arpa_inet.in.h: Don't include on glibc systems. * lib/sys_ioctl.in.h: Don't include on glibc systems. * lib/sys_select.in.h: Don't include and on glibc systems. 2009-12-24 Bruno Haible Refactor common macros used in tests. * tests/macros.h: New file. * tests/test-areadlink.c: Include macros.h. Don't include and/or , if appropriate. (ASSERT, SIZEOF): Remove macros. * tests/test-areadlink-with-size.c: Likewise. * tests/test-areadlinkat.c: Likewise. * tests/test-areadlinkat-with-size.c: Likewise. * tests/test-argmatch.c: Likewise. * tests/test-argv-iter.c: Likewise. * tests/test-array-mergesort.c: Likewise. * tests/test-array_list.c: Likewise. * tests/test-array_oset.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-avltree_oset.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-base64.c: Likewise. * tests/test-binary-io.c: Likewise. * tests/test-bitrotate.c: Likewise. * tests/test-btowc.c: Likewise. * tests/test-byteswap.c: Likewise. * tests/test-c-ctype.c: Likewise. * tests/test-c-stack.c: Likewise. * tests/test-c-strcasecmp.c: Likewise. * tests/test-c-strcasestr.c: Likewise. * tests/test-c-strncasecmp.c: Likewise. * tests/test-c-strstr.c: Likewise. * tests/test-canonicalize-lgpl.c: Likewise. * tests/test-canonicalize.c: Likewise. * tests/test-carray_list.c: Likewise. * tests/test-ceilf1.c: Likewise. * tests/test-ceilf2.c: Likewise. * tests/test-ceill.c: Likewise. * tests/test-chown.c: Likewise. * tests/test-cloexec.c: Likewise. * tests/test-copy-acl.c: Likewise. * tests/test-copy-file.c: Likewise. * tests/test-count-one-bits.c: Likewise. * tests/test-dprintf-posix.c: Likewise. * tests/test-dup2.c: Likewise. * tests/test-dup3.c: Likewise. * tests/test-duplocale.c: Likewise. * tests/test-fbufmode.c: Likewise. * tests/test-fchdir.c: Likewise. * tests/test-fchownat.c: Likewise. * tests/test-fcntl-safer.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-fdopendir.c: Likewise. * tests/test-fdutimensat.c: Likewise. * tests/test-fflush2.c: Likewise. * tests/test-file-has-acl.c: Likewise. * tests/test-filevercmp.c: Likewise. * tests/test-flock.c: Likewise. * tests/test-floorf1.c: Likewise. * tests/test-floorf2.c: Likewise. * tests/test-floorl.c: Likewise. * tests/test-fnmatch.c: Likewise. * tests/test-fopen.h: Likewise. * tests/test-fpending.c: Likewise. * tests/test-fprintf-posix.c: Likewise. * tests/test-fpurge.c: Likewise. * tests/test-freadable.c: Likewise. * tests/test-freadahead.c: Likewise. * tests/test-freading.c: Likewise. * tests/test-freadptr.c: Likewise. * tests/test-freadptr2.c: Likewise. * tests/test-freadseek.c: Likewise. * tests/test-freopen.c: Likewise. * tests/test-frexp.c: Likewise. * tests/test-frexpl.c: Likewise. * tests/test-fseek.c: Likewise. * tests/test-fseeko.c: Likewise. * tests/test-fstatat.c: Likewise. * tests/test-fstrcmp.c: Likewise. * tests/test-fsync.c: Likewise. * tests/test-ftell.c: Likewise. * tests/test-ftello.c: Likewise. * tests/test-func.c: Likewise. * tests/test-futimens.c: Likewise. * tests/test-fwritable.c: Likewise. * tests/test-fwriting.c: Likewise. * tests/test-getcwd.c: Likewise. * tests/test-getdate.c: Likewise. * tests/test-getdelim.c: Likewise. * tests/test-getdtablesize.c: Likewise. * tests/test-getgroups.c: Likewise. * tests/test-getline.c: Likewise. * tests/test-getndelim2.c: Likewise. * tests/test-glob.c: Likewise. * tests/test-hash.c: Likewise. * tests/test-i-ring.c: Likewise. * tests/test-iconv-utf.c: Likewise. * tests/test-iconv.c: Likewise. * tests/test-idpriv-drop.c: Likewise. * tests/test-idpriv-droptemp.c: Likewise. * tests/test-inet_ntop.c: Likewise. * tests/test-inet_pton.c: Likewise. * tests/test-isblank.c: Likewise. * tests/test-isfinite.c: Likewise. * tests/test-isinf.c: Likewise. * tests/test-isnan.c: Likewise. * tests/test-isnand.h: Likewise. * tests/test-isnanf.h: Likewise. * tests/test-isnanl.h: Likewise. * tests/test-lchown.c: Likewise. * tests/test-ldexpl.c: Likewise. * tests/test-link.c: Likewise. * tests/test-linkat.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-localename.c: Likewise. * tests/test-lseek.c: Likewise. * tests/test-lstat.c: Likewise. * tests/test-mbmemcasecmp.c: Likewise. * tests/test-mbmemcasecoll.c: Likewise. * tests/test-mbrtowc.c: Likewise. * tests/test-mbscasecmp.c: Likewise. * tests/test-mbscasestr1.c: Likewise. * tests/test-mbscasestr2.c: Likewise. * tests/test-mbscasestr3.c: Likewise. * tests/test-mbscasestr4.c: Likewise. * tests/test-mbschr.c: Likewise. * tests/test-mbscspn.c: Likewise. * tests/test-mbsinit.c: Likewise. * tests/test-mbsncasecmp.c: Likewise. * tests/test-mbsnrtowcs.c: Likewise. * tests/test-mbspbrk.c: Likewise. * tests/test-mbspcasecmp.c: Likewise. * tests/test-mbsrchr.c: Likewise. * tests/test-mbsrtowcs.c: Likewise. * tests/test-mbsspn.c: Likewise. * tests/test-mbsstr1.c: Likewise. * tests/test-mbsstr2.c: Likewise. * tests/test-mbsstr3.c: Likewise. * tests/test-memchr.c: Likewise. * tests/test-memchr2.c: Likewise. * tests/test-memcmp.c: Likewise. * tests/test-memmem.c: Likewise. * tests/test-memrchr.c: Likewise. * tests/test-mkdir.c: Likewise. * tests/test-mkdirat.c: Likewise. * tests/test-mkfifo.c: Likewise. * tests/test-mkfifoat.c: Likewise. * tests/test-mknod.c: Likewise. * tests/test-nanosleep.c: Likewise. * tests/test-nl_langinfo.c: Likewise. * tests/test-obstack-printf.c: Likewise. * tests/test-open.c: Likewise. * tests/test-openat.c: Likewise. * tests/test-pipe-filter-gi1.c: Likewise. * tests/test-pipe-filter-gi2-main.c: Likewise. * tests/test-pipe-filter-ii1.c: Likewise. * tests/test-pipe-filter-ii2-main.c: Likewise. * tests/test-pipe2.c: Likewise. * tests/test-popen.h: Likewise. * tests/test-posixtm.c: Likewise. * tests/test-pread.c: Likewise. * tests/test-printf-frexp.c: Likewise. * tests/test-printf-frexpl.c: Likewise. * tests/test-printf-posix.c: Likewise. * tests/test-priv-set.c: Likewise. * tests/test-quotearg.c: Likewise. * tests/test-random_r.c: Likewise. * tests/test-rawmemchr.c: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-rbtree_oset.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. * tests/test-readlink.c: Likewise. * tests/test-remove.c: Likewise. * tests/test-rename.c: Likewise. * tests/test-renameat.c: Likewise. * tests/test-rmdir.c: Likewise. * tests/test-round1.c: Likewise. * tests/test-roundf1.c: Likewise. * tests/test-roundl.c: Likewise. * tests/test-safe-alloc.c: Likewise. * tests/test-sameacls.c: Likewise. * tests/test-set-mode-acl.c: Likewise. * tests/test-setenv.c: Likewise. * tests/test-sigaction.c: Likewise. * tests/test-signbit.c: Likewise. * tests/test-sleep.c: Likewise. * tests/test-snprintf-posix.c: Likewise. * tests/test-snprintf.c: Likewise. * tests/test-sprintf-posix.c: Likewise. * tests/test-stat-time.c: Likewise. * tests/test-stat.c: Likewise. * tests/test-strcasestr.c: Likewise. * tests/test-strchrnul.c: Likewise. * tests/test-strerror.c: Likewise. * tests/test-striconv.c: Likewise. * tests/test-striconveh.c: Likewise. * tests/test-striconveha.c: Likewise. * tests/test-strsignal.c: Likewise. * tests/test-strstr.c: Likewise. * tests/test-strtod.c: Likewise. * tests/test-strverscmp.c: Likewise. * tests/test-symlink.c: Likewise. * tests/test-symlinkat.c: Likewise. * tests/test-trunc1.c: Likewise. * tests/test-trunc2.c: Likewise. * tests/test-truncf1.c: Likewise. * tests/test-truncf2.c: Likewise. * tests/test-truncl.c: Likewise. * tests/test-uname.c: Likewise. * tests/test-unlink.c: Likewise. * tests/test-unlinkat.c: Likewise. * tests/test-unsetenv.c: Likewise. * tests/test-usleep.c: Likewise. * tests/test-utimens.c: Likewise. * tests/test-utimensat.c: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasnprintf-posix2.c: Likewise. * tests/test-vasnprintf.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * tests/test-vasprintf.c: Likewise. * tests/test-vdprintf-posix.c: Likewise. * tests/test-vfprintf-posix.c: Likewise. * tests/test-vprintf-posix.c: Likewise. * tests/test-vsnprintf-posix.c: Likewise. * tests/test-vsnprintf.c: Likewise. * tests/test-vsprintf-posix.c: Likewise. * tests/test-wcrtomb.c: Likewise. * tests/test-wcsnrtombs.c: Likewise. * tests/test-wcsrtombs.c: Likewise. * tests/test-wctype.c: Likewise. * tests/test-wcwidth.c: Likewise. * tests/test-xfprintf-posix.c: Likewise. * tests/test-xmemdup0.c: Likewise. * tests/test-xprintf-posix.c: Likewise. * tests/test-xvasprintf.c: Likewise. * tests/unicase/test-locale-language.c: Likewise. * tests/unicase/test-mapping-part1.h: Likewise. * tests/unicase/test-predicate-part1.h: Likewise. * tests/unicase/test-u8-casecmp.c: Likewise. * tests/unicase/test-u8-casecoll.c: Likewise. * tests/unicase/test-u8-casefold.c: Likewise. * tests/unicase/test-u8-is-cased.c: Likewise. * tests/unicase/test-u8-is-casefolded.c: Likewise. * tests/unicase/test-u8-is-lowercase.c: Likewise. * tests/unicase/test-u8-is-titlecase.c: Likewise. * tests/unicase/test-u8-is-uppercase.c: Likewise. * tests/unicase/test-u8-tolower.c: Likewise. * tests/unicase/test-u8-totitle.c: Likewise. * tests/unicase/test-u8-toupper.c: Likewise. * tests/unicase/test-u16-casecmp.c: Likewise. * tests/unicase/test-u16-casecoll.c: Likewise. * tests/unicase/test-u16-casefold.c: Likewise. * tests/unicase/test-u16-is-cased.c: Likewise. * tests/unicase/test-u16-is-casefolded.c: Likewise. * tests/unicase/test-u16-is-lowercase.c: Likewise. * tests/unicase/test-u16-is-titlecase.c: Likewise. * tests/unicase/test-u16-is-uppercase.c: Likewise. * tests/unicase/test-u16-tolower.c: Likewise. * tests/unicase/test-u16-totitle.c: Likewise. * tests/unicase/test-u16-toupper.c: Likewise. * tests/unicase/test-u32-casecmp.c: Likewise. * tests/unicase/test-u32-casecoll.c: Likewise. * tests/unicase/test-u32-casefold.c: Likewise. * tests/unicase/test-u32-is-cased.c: Likewise. * tests/unicase/test-u32-is-casefolded.c: Likewise. * tests/unicase/test-u32-is-lowercase.c: Likewise. * tests/unicase/test-u32-is-titlecase.c: Likewise. * tests/unicase/test-u32-is-uppercase.c: Likewise. * tests/unicase/test-u32-tolower.c: Likewise. * tests/unicase/test-u32-totitle.c: Likewise. * tests/unicase/test-u32-toupper.c: Likewise. * tests/unicase/test-ulc-casecmp.c: Likewise. * tests/unicase/test-ulc-casecoll.c: Likewise. * tests/uniconv/test-u8-conv-from-enc.c: Likewise. * tests/uniconv/test-u8-conv-to-enc.c: Likewise. * tests/uniconv/test-u8-strconv-from-enc.c: Likewise. * tests/uniconv/test-u8-strconv-to-enc.c: Likewise. * tests/uniconv/test-u16-conv-from-enc.c: Likewise. * tests/uniconv/test-u16-conv-to-enc.c: Likewise. * tests/uniconv/test-u16-strconv-from-enc.c: Likewise. * tests/uniconv/test-u16-strconv-to-enc.c: Likewise. * tests/uniconv/test-u32-conv-from-enc.c: Likewise. * tests/uniconv/test-u32-conv-to-enc.c: Likewise. * tests/uniconv/test-u32-strconv-from-enc.c: Likewise. * tests/uniconv/test-u32-strconv-to-enc.c: Likewise. * tests/unictype/test-bidi_byname.c: Likewise. * tests/unictype/test-bidi_name.c: Likewise. * tests/unictype/test-bidi_of.c: Likewise. * tests/unictype/test-bidi_test.c: Likewise. * tests/unictype/test-block_list.c: Likewise. * tests/unictype/test-block_of.c: Likewise. * tests/unictype/test-block_test.c: Likewise. * tests/unictype/test-categ_and.c: Likewise. * tests/unictype/test-categ_and_not.c: Likewise. * tests/unictype/test-categ_byname.c: Likewise. * tests/unictype/test-categ_name.c: Likewise. * tests/unictype/test-categ_none.c: Likewise. * tests/unictype/test-categ_of.c: Likewise. * tests/unictype/test-categ_or.c: Likewise. * tests/unictype/test-categ_test_withtable.c: Likewise. * tests/unictype/test-combining.c: Likewise. * tests/unictype/test-decdigit.c: Likewise. * tests/unictype/test-digit.c: Likewise. * tests/unictype/test-mirror.c: Likewise. * tests/unictype/test-numeric.c: Likewise. * tests/unictype/test-pr_byname.c: Likewise. * tests/unictype/test-pr_test.c: Likewise. * tests/unictype/test-predicate-part1.h: Likewise. * tests/unictype/test-scripts.c: Likewise. * tests/unictype/test-sy_c_ident.c: Likewise. * tests/unictype/test-sy_java_ident.c: Likewise. * tests/unilbrk/test-u8-possible-linebreaks.c: Likewise. * tests/unilbrk/test-u8-width-linebreaks.c: Likewise. * tests/unilbrk/test-u16-possible-linebreaks.c: Likewise. * tests/unilbrk/test-u16-width-linebreaks.c: Likewise. * tests/unilbrk/test-u32-possible-linebreaks.c: Likewise. * tests/unilbrk/test-u32-width-linebreaks.c: Likewise. * tests/unilbrk/test-ulc-possible-linebreaks.c: Likewise. * tests/unilbrk/test-ulc-width-linebreaks.c: Likewise. * tests/uninorm/test-canonical-decomposition.c: Likewise. * tests/uninorm/test-compat-decomposition.c: Likewise. * tests/uninorm/test-composition.c: Likewise. * tests/uninorm/test-decomposing-form.c: Likewise. * tests/uninorm/test-decomposition.c: Likewise. * tests/uninorm/test-u8-nfc.c: Likewise. * tests/uninorm/test-u8-nfd.c: Likewise. * tests/uninorm/test-u8-nfkc.c: Likewise. * tests/uninorm/test-u8-nfkd.c: Likewise. * tests/uninorm/test-u8-normcmp.c: Likewise. * tests/uninorm/test-u8-normcoll.c: Likewise. * tests/uninorm/test-u16-nfc.c: Likewise. * tests/uninorm/test-u16-nfd.c: Likewise. * tests/uninorm/test-u16-nfkc.c: Likewise. * tests/uninorm/test-u16-nfkd.c: Likewise. * tests/uninorm/test-u16-normcmp.c: Likewise. * tests/uninorm/test-u16-normcoll.c: Likewise. * tests/uninorm/test-u32-nfc.c: Likewise. * tests/uninorm/test-u32-nfd.c: Likewise. * tests/uninorm/test-u32-nfkc.c: Likewise. * tests/uninorm/test-u32-nfkd.c: Likewise. * tests/uninorm/test-u32-normalize-big.c: Likewise. * tests/uninorm/test-u32-normcmp.c: Likewise. * tests/uninorm/test-u32-normcoll.c: Likewise. * tests/uninorm/test-uninorm-filter-nfc.c: Likewise. * tests/unistdio/test-u8-asnprintf1.c: Likewise. * tests/unistdio/test-u8-vasnprintf1.c: Likewise. * tests/unistdio/test-u8-vasnprintf2.c: Likewise. * tests/unistdio/test-u8-vasnprintf3.c: Likewise. * tests/unistdio/test-u8-vasprintf1.c: Likewise. * tests/unistdio/test-u8-vsnprintf1.c: Likewise. * tests/unistdio/test-u8-vsprintf1.c: Likewise. * tests/unistdio/test-u16-asnprintf1.c: Likewise. * tests/unistdio/test-u16-vasnprintf1.c: Likewise. * tests/unistdio/test-u16-vasnprintf2.c: Likewise. * tests/unistdio/test-u16-vasnprintf3.c: Likewise. * tests/unistdio/test-u16-vasprintf1.c: Likewise. * tests/unistdio/test-u16-vsnprintf1.c: Likewise. * tests/unistdio/test-u16-vsprintf1.c: Likewise. * tests/unistdio/test-u32-asnprintf1.c: Likewise. * tests/unistdio/test-u32-vasnprintf1.c: Likewise. * tests/unistdio/test-u32-vasnprintf2.c: Likewise. * tests/unistdio/test-u32-vasnprintf3.c: Likewise. * tests/unistdio/test-u32-vasprintf1.c: Likewise. * tests/unistdio/test-u32-vsnprintf1.c: Likewise. * tests/unistdio/test-u32-vsprintf1.c: Likewise. * tests/unistdio/test-ulc-asnprintf1.c: Likewise. * tests/unistdio/test-ulc-vasnprintf1.c: Likewise. * tests/unistdio/test-ulc-vasnprintf2.c: Likewise. * tests/unistdio/test-ulc-vasnprintf3.c: Likewise. * tests/unistdio/test-ulc-vasprintf1.c: Likewise. * tests/unistdio/test-ulc-vsnprintf1.c: Likewise. * tests/unistdio/test-ulc-vsprintf1.c: Likewise. * tests/uniwbrk/test-u8-wordbreaks.c: Likewise. * tests/uniwbrk/test-u16-wordbreaks.c: Likewise. * tests/uniwbrk/test-u32-wordbreaks.c: Likewise. * tests/uniwbrk/test-ulc-wordbreaks.c: Likewise. * tests/uniwidth/test-u8-strwidth.c: Likewise. * tests/uniwidth/test-u8-width.c: Likewise. * tests/uniwidth/test-u16-strwidth.c: Likewise. * tests/uniwidth/test-u16-width.c: Likewise. * tests/uniwidth/test-u32-strwidth.c: Likewise. * tests/uniwidth/test-u32-width.c: Likewise. * tests/uniwidth/test-uc_width.c: Likewise. * tests/uniwidth/test-uc_width2.c: Likewise. * modules/acl-tests (Files): Add tests/macros.h. * modules/areadlink-tests (Files): Likewise. * modules/areadlink-with-size-tests (Files): Likewise. * modules/areadlinkat-tests (Files): Likewise. * modules/areadlinkat-with-size-tests (Files): Likewise. * modules/argmatch-tests (Files): Likewise. * modules/argv-iter-tests (Files): Likewise. * modules/array-list-tests (Files): Likewise. * modules/array-mergesort-tests (Files): Likewise. * modules/array-oset-tests (Files): Likewise. * modules/avltree-list-tests (Files): Likewise. * modules/avltree-oset-tests (Files): Likewise. * modules/avltreehash-list-tests (Files): Likewise. * modules/base64-tests (Files): Likewise. * modules/binary-io-tests (Files): Likewise. * modules/bitrotate-tests (Files): Likewise. * modules/btowc-tests (Files): Likewise. * modules/byteswap-tests (Files): Likewise. * modules/c-ctype-tests (Files): Likewise. * modules/c-stack-tests (Files): Likewise. * modules/c-strcase-tests (Files): Likewise. * modules/c-strcasestr-tests (Files): Likewise. * modules/c-strstr-tests (Files): Likewise. * modules/canonicalize-lgpl-tests (Files): Likewise. * modules/canonicalize-tests (Files): Likewise. * modules/carray-list-tests (Files): Likewise. * modules/ceilf-tests (Files): Likewise. * modules/ceill-tests (Files): Likewise. * modules/chown-tests (Files): Likewise. * modules/cloexec-tests (Files): Likewise. * modules/copy-file-tests (Files): Likewise. * modules/count-one-bits-tests (Files): Likewise. * modules/dprintf-posix-tests (Files): Likewise. * modules/dup2-tests (Files): Likewise. * modules/dup3-tests (Files): Likewise. * modules/duplocale-tests (Files): Likewise. * modules/fbufmode-tests (Files): Likewise. * modules/fchdir-tests (Files): Likewise. * modules/fcntl-safer-tests (Files): Likewise. * modules/fcntl-tests (Files): Likewise. * modules/fdopendir-tests (Files): Likewise. * modules/fdutimensat-tests (Files): Likewise. * modules/fflush-tests (Files): Likewise. * modules/filevercmp-tests (Files): Likewise. * modules/flock-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/fnmatch-tests (Files): Likewise. * modules/fopen-safer-tests (Files): Likewise. * modules/fopen-tests (Files): Likewise. * modules/fpending-tests (Files): Likewise. * modules/fprintf-posix-tests (Files): Likewise. * modules/fpurge-tests (Files): Likewise. * modules/freadable-tests (Files): Likewise. * modules/freadahead-tests (Files): Likewise. * modules/freading-tests (Files): Likewise. * modules/freadptr-tests (Files): Likewise. * modules/freadseek-tests (Files): Likewise. * modules/freopen-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/fseek-tests (Files): Likewise. * modules/fseeko-tests (Files): Likewise. * modules/fstrcmp-tests (Files): Likewise. * modules/fsync-tests (Files): Likewise. * modules/ftell-tests (Files): Likewise. * modules/ftello-tests (Files): Likewise. * modules/func-tests (Files): Likewise. * modules/futimens-tests (Files): Likewise. * modules/fwritable-tests (Files): Likewise. * modules/fwriting-tests (Files): Likewise. * modules/getcwd-tests (Files): Likewise. * modules/getdate-tests (Files): Likewise. * modules/getdelim-tests (Files): Likewise. * modules/getdtablesize-tests (Files): Likewise. * modules/getgroups-tests (Files): Likewise. * modules/getline-tests (Files): Likewise. * modules/getndelim2-tests (Files): Likewise. * modules/glob-tests (Files): Likewise. * modules/hash-tests (Files): Likewise. * modules/i-ring-tests (Files): Likewise. * modules/iconv-tests (Files): Likewise. * modules/iconv_open-utf-tests (Files): Likewise. * modules/idpriv-drop-tests (Files): Likewise. * modules/idpriv-droptemp-tests (Files): Likewise. * modules/inet_ntop-tests (Files): Likewise. * modules/inet_pton-tests (Files): Likewise. * modules/isblank-tests (Files): Likewise. * modules/isfinite-tests (Files): Likewise. * modules/isinf-tests (Files): Likewise. * modules/isnan-tests (Files): Likewise. * modules/isnand-nolibm-tests (Files): Likewise. * modules/isnand-tests (Files): Likewise. * modules/isnanf-nolibm-tests (Files): Likewise. * modules/isnanf-tests (Files): Likewise. * modules/isnanl-nolibm-tests (Files): Likewise. * modules/isnanl-tests (Files): Likewise. * modules/lchown-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/link-tests (Files): Likewise. * modules/linkat-tests (Files): Likewise. * modules/linked-list-tests (Files): Likewise. * modules/linkedhash-list-tests (Files): Likewise. * modules/localename-tests (Files): Likewise. * modules/lseek-tests (Files): Likewise. * modules/lstat-tests (Files): Likewise. * modules/mbmemcasecmp-tests (Files): Likewise. * modules/mbmemcasecoll-tests (Files): Likewise. * modules/mbrtowc-tests (Files): Likewise. * modules/mbscasecmp-tests (Files): Likewise. * modules/mbscasestr-tests (Files): Likewise. * modules/mbschr-tests (Files): Likewise. * modules/mbscspn-tests (Files): Likewise. * modules/mbsinit-tests (Files): Likewise. * modules/mbsncasecmp-tests (Files): Likewise. * modules/mbsnrtowcs-tests (Files): Likewise. * modules/mbspbrk-tests (Files): Likewise. * modules/mbspcasecmp-tests (Files): Likewise. * modules/mbsrchr-tests (Files): Likewise. * modules/mbsrtowcs-tests (Files): Likewise. * modules/mbsspn-tests (Files): Likewise. * modules/mbsstr-tests (Files): Likewise. * modules/memchr-tests (Files): Likewise. * modules/memchr2-tests (Files): Likewise. * modules/memcmp-tests (Files): Likewise. * modules/memmem-tests (Files): Likewise. * modules/memrchr-tests (Files): Likewise. * modules/mkdir-tests (Files): Likewise. * modules/mkfifo-tests (Files): Likewise. * modules/mkfifoat-tests (Files): Likewise. * modules/mknod-tests (Files): Likewise. * modules/nanosleep-tests (Files): Likewise. * modules/nl_langinfo-tests (Files): Likewise. * modules/obstack-printf-tests (Files): Likewise. * modules/open-tests (Files): Likewise. * modules/openat-tests (Files): Likewise. * modules/pipe-filter-gi-tests (Files): Likewise. * modules/pipe-filter-ii-tests (Files): Likewise. * modules/pipe2-tests (Files): Likewise. * modules/popen-safer-tests (Files): Likewise. * modules/popen-tests (Files): Likewise. * modules/posixtm-tests (Files): Likewise. * modules/pread-tests (Files): Likewise. * modules/printf-frexp-tests (Files): Likewise. * modules/printf-frexpl-tests (Files): Likewise. * modules/printf-posix-tests (Files): Likewise. * modules/priv-set-tests (Files): Likewise. * modules/quotearg-tests (Files): Likewise. * modules/random_r-tests (Files): Likewise. * modules/rawmemchr-tests (Files): Likewise. * modules/rbtree-list-tests (Files): Likewise. * modules/rbtree-oset-tests (Files): Likewise. * modules/rbtreehash-list-tests (Files): Likewise. * modules/readlink-tests (Files): Likewise. * modules/remove-tests (Files): Likewise. * modules/rename-tests (Files): Likewise. * modules/renameat-tests (Files): Likewise. * modules/rmdir-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/safe-alloc-tests (Files): Likewise. * modules/setenv-tests (Files): Likewise. * modules/sigaction-tests (Files): Likewise. * modules/signbit-tests (Files): Likewise. * modules/sleep-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/snprintf-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/stat-tests (Files): Likewise. * modules/stat-time-tests (Files): Likewise. * modules/strcasestr-tests (Files): Likewise. * modules/strchrnul-tests (Files): Likewise. * modules/strerror-tests (Files): Likewise. * modules/striconv-tests (Files): Likewise. * modules/striconveh-tests (Files): Likewise. * modules/striconveha-tests (Files): Likewise. * modules/strsignal-tests (Files): Likewise. * modules/strstr-tests (Files): Likewise. * modules/strtod-tests (Files): Likewise. * modules/strverscmp-tests (Files): Likewise. * modules/symlink-tests (Files): Likewise. * modules/symlinkat-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/uname-tests (Files): Likewise. * modules/unicase/cased-tests (Files): Likewise. * modules/unicase/ignorable-tests (Files): Likewise. * modules/unicase/locale-language-tests (Files): Likewise. * modules/unicase/tolower-tests (Files): Likewise. * modules/unicase/totitle-tests (Files): Likewise. * modules/unicase/toupper-tests (Files): Likewise. * modules/unicase/u8-casecmp-tests (Files): Likewise. * modules/unicase/u8-casecoll-tests (Files): Likewise. * modules/unicase/u8-casefold-tests (Files): Likewise. * modules/unicase/u8-is-cased-tests (Files): Likewise. * modules/unicase/u8-is-casefolded-tests (Files): Likewise. * modules/unicase/u8-is-lowercase-tests (Files): Likewise. * modules/unicase/u8-is-titlecase-tests (Files): Likewise. * modules/unicase/u8-is-uppercase-tests (Files): Likewise. * modules/unicase/u8-tolower-tests (Files): Likewise. * modules/unicase/u8-totitle-tests (Files): Likewise. * modules/unicase/u8-toupper-tests (Files): Likewise. * modules/unicase/u16-casecmp-tests (Files): Likewise. * modules/unicase/u16-casecoll-tests (Files): Likewise. * modules/unicase/u16-casefold-tests (Files): Likewise. * modules/unicase/u16-is-cased-tests (Files): Likewise. * modules/unicase/u16-is-casefolded-tests (Files): Likewise. * modules/unicase/u16-is-lowercase-tests (Files): Likewise. * modules/unicase/u16-is-titlecase-tests (Files): Likewise. * modules/unicase/u16-is-uppercase-tests (Files): Likewise. * modules/unicase/u16-tolower-tests (Files): Likewise. * modules/unicase/u16-totitle-tests (Files): Likewise. * modules/unicase/u16-toupper-tests (Files): Likewise. * modules/unicase/u32-casecmp-tests (Files): Likewise. * modules/unicase/u32-casecoll-tests (Files): Likewise. * modules/unicase/u32-casefold-tests (Files): Likewise. * modules/unicase/u32-is-cased-tests (Files): Likewise. * modules/unicase/u32-is-casefolded-tests (Files): Likewise. * modules/unicase/u32-is-lowercase-tests (Files): Likewise. * modules/unicase/u32-is-titlecase-tests (Files): Likewise. * modules/unicase/u32-is-uppercase-tests (Files): Likewise. * modules/unicase/u32-tolower-tests (Files): Likewise. * modules/unicase/u32-totitle-tests (Files): Likewise. * modules/unicase/u32-toupper-tests (Files): Likewise. * modules/unicase/ulc-casecmp-tests (Files): Likewise. * modules/unicase/ulc-casecoll-tests (Files): Likewise. * modules/uniconv/u8-conv-from-enc-tests (Files): Likewise. * modules/uniconv/u8-conv-to-enc-tests (Files): Likewise. * modules/uniconv/u8-strconv-from-enc-tests (Files): Likewise. * modules/uniconv/u8-strconv-to-enc-tests (Files): Likewise. * modules/uniconv/u16-conv-from-enc-tests (Files): Likewise. * modules/uniconv/u16-conv-to-enc-tests (Files): Likewise. * modules/uniconv/u16-strconv-from-enc-tests (Files): Likewise. * modules/uniconv/u16-strconv-to-enc-tests (Files): Likewise. * modules/uniconv/u32-conv-from-enc-tests (Files): Likewise. * modules/uniconv/u32-conv-to-enc-tests (Files): Likewise. * modules/uniconv/u32-strconv-from-enc-tests (Files): Likewise. * modules/uniconv/u32-strconv-to-enc-tests (Files): Likewise. * modules/unictype/bidicategory-byname-tests (Files): Likewise. * modules/unictype/bidicategory-name-tests (Files): Likewise. * modules/unictype/bidicategory-of-tests (Files): Likewise. * modules/unictype/bidicategory-test-tests (Files): Likewise. * modules/unictype/block-list-tests (Files): Likewise. * modules/unictype/block-of-tests (Files): Likewise. * modules/unictype/block-test-tests (Files): Likewise. * modules/unictype/category-C-tests (Files): Likewise. * modules/unictype/category-Cc-tests (Files): Likewise. * modules/unictype/category-Cf-tests (Files): Likewise. * modules/unictype/category-Cn-tests (Files): Likewise. * modules/unictype/category-Co-tests (Files): Likewise. * modules/unictype/category-Cs-tests (Files): Likewise. * modules/unictype/category-L-tests (Files): Likewise. * modules/unictype/category-Ll-tests (Files): Likewise. * modules/unictype/category-Lm-tests (Files): Likewise. * modules/unictype/category-Lo-tests (Files): Likewise. * modules/unictype/category-Lt-tests (Files): Likewise. * modules/unictype/category-Lu-tests (Files): Likewise. * modules/unictype/category-M-tests (Files): Likewise. * modules/unictype/category-Mc-tests (Files): Likewise. * modules/unictype/category-Me-tests (Files): Likewise. * modules/unictype/category-Mn-tests (Files): Likewise. * modules/unictype/category-N-tests (Files): Likewise. * modules/unictype/category-Nd-tests (Files): Likewise. * modules/unictype/category-Nl-tests (Files): Likewise. * modules/unictype/category-No-tests (Files): Likewise. * modules/unictype/category-P-tests (Files): Likewise. * modules/unictype/category-Pc-tests (Files): Likewise. * modules/unictype/category-Pd-tests (Files): Likewise. * modules/unictype/category-Pe-tests (Files): Likewise. * modules/unictype/category-Pf-tests (Files): Likewise. * modules/unictype/category-Pi-tests (Files): Likewise. * modules/unictype/category-Po-tests (Files): Likewise. * modules/unictype/category-Ps-tests (Files): Likewise. * modules/unictype/category-S-tests (Files): Likewise. * modules/unictype/category-Sc-tests (Files): Likewise. * modules/unictype/category-Sk-tests (Files): Likewise. * modules/unictype/category-Sm-tests (Files): Likewise. * modules/unictype/category-So-tests (Files): Likewise. * modules/unictype/category-Z-tests (Files): Likewise. * modules/unictype/category-Zl-tests (Files): Likewise. * modules/unictype/category-Zp-tests (Files): Likewise. * modules/unictype/category-Zs-tests (Files): Likewise. * modules/unictype/category-and-not-tests (Files): Likewise. * modules/unictype/category-and-tests (Files): Likewise. * modules/unictype/category-byname-tests (Files): Likewise. * modules/unictype/category-name-tests (Files): Likewise. * modules/unictype/category-none-tests (Files): Likewise. * modules/unictype/category-of-tests (Files): Likewise. * modules/unictype/category-or-tests (Files): Likewise. * modules/unictype/category-test-withtable-tests (Files): Likewise. * modules/unictype/combining-class-tests (Files): Likewise. * modules/unictype/ctype-alnum-tests (Files): Likewise. * modules/unictype/ctype-alpha-tests (Files): Likewise. * modules/unictype/ctype-blank-tests (Files): Likewise. * modules/unictype/ctype-cntrl-tests (Files): Likewise. * modules/unictype/ctype-digit-tests (Files): Likewise. * modules/unictype/ctype-graph-tests (Files): Likewise. * modules/unictype/ctype-lower-tests (Files): Likewise. * modules/unictype/ctype-print-tests (Files): Likewise. * modules/unictype/ctype-punct-tests (Files): Likewise. * modules/unictype/ctype-space-tests (Files): Likewise. * modules/unictype/ctype-upper-tests (Files): Likewise. * modules/unictype/ctype-xdigit-tests (Files): Likewise. * modules/unictype/decimal-digit-tests (Files): Likewise. * modules/unictype/digit-tests (Files): Likewise. * modules/unictype/mirror-tests (Files): Likewise. * modules/unictype/numeric-tests (Files): Likewise. * modules/unictype/property-alphabetic-tests (Files): Likewise. * modules/unictype/property-ascii-hex-digit-tests (Files): Likewise. * modules/unictype/property-bidi-arabic-digit-tests (Files): Likewise. * modules/unictype/property-bidi-arabic-right-to-left-tests (Files): Likewise. * modules/unictype/property-bidi-block-separator-tests (Files): Likewise. * modules/unictype/property-bidi-boundary-neutral-tests (Files): Likewise. * modules/unictype/property-bidi-common-separator-tests (Files): Likewise. * modules/unictype/property-bidi-control-tests (Files): Likewise. * modules/unictype/property-bidi-embedding-or-override-tests (Files): Likewise. * modules/unictype/property-bidi-eur-num-separator-tests (Files): Likewise. * modules/unictype/property-bidi-eur-num-terminator-tests (Files): Likewise. * modules/unictype/property-bidi-european-digit-tests (Files): Likewise. * modules/unictype/property-bidi-hebrew-right-to-left-tests (Files): Likewise. * modules/unictype/property-bidi-left-to-right-tests (Files): Likewise. * modules/unictype/property-bidi-non-spacing-mark-tests (Files): Likewise. * modules/unictype/property-bidi-other-neutral-tests (Files): Likewise. * modules/unictype/property-bidi-pdf-tests (Files): Likewise. * modules/unictype/property-bidi-segment-separator-tests (Files): Likewise. * modules/unictype/property-bidi-whitespace-tests (Files): Likewise. * modules/unictype/property-byname-tests (Files): Likewise. * modules/unictype/property-combining-tests (Files): Likewise. * modules/unictype/property-composite-tests (Files): Likewise. * modules/unictype/property-currency-symbol-tests (Files): Likewise. * modules/unictype/property-dash-tests (Files): Likewise. * modules/unictype/property-decimal-digit-tests (Files): Likewise. * modules/unictype/property-default-ignorable-code-point-tests (Files): Likewise. * modules/unictype/property-deprecated-tests (Files): Likewise. * modules/unictype/property-diacritic-tests (Files): Likewise. * modules/unictype/property-extender-tests (Files): Likewise. * modules/unictype/property-format-control-tests (Files): Likewise. * modules/unictype/property-grapheme-base-tests (Files): Likewise. * modules/unictype/property-grapheme-extend-tests (Files): Likewise. * modules/unictype/property-grapheme-link-tests (Files): Likewise. * modules/unictype/property-hex-digit-tests (Files): Likewise. * modules/unictype/property-hyphen-tests (Files): Likewise. * modules/unictype/property-id-continue-tests (Files): Likewise. * modules/unictype/property-id-start-tests (Files): Likewise. * modules/unictype/property-ideographic-tests (Files): Likewise. * modules/unictype/property-ids-binary-operator-tests (Files): Likewise. * modules/unictype/property-ids-trinary-operator-tests (Files): Likewise. * modules/unictype/property-ignorable-control-tests (Files): Likewise. * modules/unictype/property-iso-control-tests (Files): Likewise. * modules/unictype/property-join-control-tests (Files): Likewise. * modules/unictype/property-left-of-pair-tests (Files): Likewise. * modules/unictype/property-line-separator-tests (Files): Likewise. * modules/unictype/property-logical-order-exception-tests (Files): Likewise. * modules/unictype/property-lowercase-tests (Files): Likewise. * modules/unictype/property-math-tests (Files): Likewise. * modules/unictype/property-non-break-tests (Files): Likewise. * modules/unictype/property-not-a-character-tests (Files): Likewise. * modules/unictype/property-numeric-tests (Files): Likewise. * modules/unictype/property-other-alphabetic-tests (Files): Likewise. * modules/unictype/property-other-default-ignorable-code-point-tests (Files): Likewise. * modules/unictype/property-other-grapheme-extend-tests (Files): Likewise. * modules/unictype/property-other-id-continue-tests (Files): Likewise. * modules/unictype/property-other-id-start-tests (Files): Likewise. * modules/unictype/property-other-lowercase-tests (Files): Likewise. * modules/unictype/property-other-math-tests (Files): Likewise. * modules/unictype/property-other-uppercase-tests (Files): Likewise. * modules/unictype/property-paired-punctuation-tests (Files): Likewise. * modules/unictype/property-paragraph-separator-tests (Files): Likewise. * modules/unictype/property-pattern-syntax-tests (Files): Likewise. * modules/unictype/property-pattern-white-space-tests (Files): Likewise. * modules/unictype/property-private-use-tests (Files): Likewise. * modules/unictype/property-punctuation-tests (Files): Likewise. * modules/unictype/property-quotation-mark-tests (Files): Likewise. * modules/unictype/property-radical-tests (Files): Likewise. * modules/unictype/property-sentence-terminal-tests (Files): Likewise. * modules/unictype/property-soft-dotted-tests (Files): Likewise. * modules/unictype/property-space-tests (Files): Likewise. * modules/unictype/property-terminal-punctuation-tests (Files): Likewise. * modules/unictype/property-test-tests (Files): Likewise. * modules/unictype/property-titlecase-tests (Files): Likewise. * modules/unictype/property-unassigned-code-value-tests (Files): Likewise. * modules/unictype/property-unified-ideograph-tests (Files): Likewise. * modules/unictype/property-uppercase-tests (Files): Likewise. * modules/unictype/property-variation-selector-tests (Files): Likewise. * modules/unictype/property-white-space-tests (Files): Likewise. * modules/unictype/property-xid-continue-tests (Files): Likewise. * modules/unictype/property-xid-start-tests (Files): Likewise. * modules/unictype/property-zero-width-tests (Files): Likewise. * modules/unictype/scripts-tests (Files): Likewise. * modules/unictype/syntax-c-ident-tests (Files): Likewise. * modules/unictype/syntax-c-whitespace-tests (Files): Likewise. * modules/unictype/syntax-java-ident-tests (Files): Likewise. * modules/unictype/syntax-java-whitespace-tests (Files): Likewise. * modules/unilbrk/u8-possible-linebreaks-tests (Files): Likewise. * modules/unilbrk/u8-width-linebreaks-tests (Files): Likewise. * modules/unilbrk/u16-possible-linebreaks-tests (Files): Likewise. * modules/unilbrk/u16-width-linebreaks-tests (Files): Likewise. * modules/unilbrk/u32-possible-linebreaks-tests (Files): Likewise. * modules/unilbrk/u32-width-linebreaks-tests (Files): Likewise. * modules/unilbrk/ulc-possible-linebreaks-tests (Files): Likewise. * modules/unilbrk/ulc-width-linebreaks-tests (Files): Likewise. * modules/uninorm/canonical-decomposition-tests (Files): Likewise. * modules/uninorm/compat-decomposition-tests (Files): Likewise. * modules/uninorm/composition-tests (Files): Likewise. * modules/uninorm/decomposing-form-tests (Files): Likewise. * modules/uninorm/decomposition-tests (Files): Likewise. * modules/uninorm/filter-tests (Files): Likewise. * modules/uninorm/nfc-tests (Files): Likewise. * modules/uninorm/nfd-tests (Files): Likewise. * modules/uninorm/nfkc-tests (Files): Likewise. * modules/uninorm/nfkd-tests (Files): Likewise. * modules/uninorm/u8-normcmp-tests (Files): Likewise. * modules/uninorm/u8-normcoll-tests (Files): Likewise. * modules/uninorm/u16-normcmp-tests (Files): Likewise. * modules/uninorm/u16-normcoll-tests (Files): Likewise. * modules/uninorm/u32-normcmp-tests (Files): Likewise. * modules/uninorm/u32-normcoll-tests (Files): Likewise. * modules/unistdio/u8-asnprintf-tests (Files): Likewise. * modules/unistdio/u8-vasnprintf-tests (Files): Likewise. * modules/unistdio/u8-vasprintf-tests (Files): Likewise. * modules/unistdio/u8-vsnprintf-tests (Files): Likewise. * modules/unistdio/u8-vsprintf-tests (Files): Likewise. * modules/unistdio/u16-asnprintf-tests (Files): Likewise. * modules/unistdio/u16-vasnprintf-tests (Files): Likewise. * modules/unistdio/u16-vasprintf-tests (Files): Likewise. * modules/unistdio/u16-vsnprintf-tests (Files): Likewise. * modules/unistdio/u16-vsprintf-tests (Files): Likewise. * modules/unistdio/u32-asnprintf-tests (Files): Likewise. * modules/unistdio/u32-vasnprintf-tests (Files): Likewise. * modules/unistdio/u32-vasprintf-tests (Files): Likewise. * modules/unistdio/u32-vsnprintf-tests (Files): Likewise. * modules/unistdio/u32-vsprintf-tests (Files): Likewise. * modules/unistdio/ulc-asnprintf-tests (Files): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Files): Likewise. * modules/unistdio/ulc-vasprintf-tests (Files): Likewise. * modules/unistdio/ulc-vsnprintf-tests (Files): Likewise. * modules/unistdio/ulc-vsprintf-tests (Files): Likewise. * modules/uniwbrk/u8-wordbreaks-tests (Files): Likewise. * modules/uniwbrk/u16-wordbreaks-tests (Files): Likewise. * modules/uniwbrk/u32-wordbreaks-tests (Files): Likewise. * modules/uniwbrk/ulc-wordbreaks-tests (Files): Likewise. * modules/uniwidth/u8-strwidth-tests (Files): Likewise. * modules/uniwidth/u8-width-tests (Files): Likewise. * modules/uniwidth/u16-strwidth-tests (Files): Likewise. * modules/uniwidth/u16-width-tests (Files): Likewise. * modules/uniwidth/u32-strwidth-tests (Files): Likewise. * modules/uniwidth/u32-width-tests (Files): Likewise. * modules/uniwidth/width-tests (Files): Likewise. * modules/unlink-tests (Files): Likewise. * modules/unsetenv-tests (Files): Likewise. * modules/usleep-tests (Files): Likewise. * modules/utimens-tests (Files): Likewise. * modules/utimensat-tests (Files): Likewise. * modules/vasnprintf-posix-tests (Files): Likewise. * modules/vasnprintf-tests (Files): Likewise. * modules/vasprintf-posix-tests (Files): Likewise. * modules/vasprintf-tests (Files): Likewise. * modules/vdprintf-posix-tests (Files): Likewise. * modules/vfprintf-posix-tests (Files): Likewise. * modules/vprintf-posix-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsnprintf-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/wcrtomb-tests (Files): Likewise. * modules/wcsnrtombs-tests (Files): Likewise. * modules/wcsrtombs-tests (Files): Likewise. * modules/wctype-tests (Files): Likewise. * modules/wcwidth-tests (Files): Likewise. * modules/xmemdup0-tests (Files): Likewise. * modules/xprintf-posix-tests (Files): Likewise. * modules/xvasprintf-tests (Files): Likewise. 2009-12-24 Eric Blake test-nanosleep: fix typo * tests/test-nanosleep.c (SIGNATURE_CHECK): Fix typo in previous patch. Reported by Bruno Haible. 2009-12-24 Bruno Haible Reduce namespace pollution on glibc systems. * lib/inttypes.in.h: Don't include on glibc systems. * lib/stdlib.in.h: Don't include , on glibc systems. * lib/unistd.in.h: Don't include , , , on glibc systems. * lib/fcntl.in.h: Don't include , on glibc systems. * lib/fcntl.c: Include here instead. 2009-12-24 Bruno Haible * lib/stdlib.in.h (includes): Fix typo in today's commit. 2009-12-24 Eric Blake tests: add signature checks * tests/signature.h (SIGNATURE_CHECK): New file. * modules/atexit-tests (Files): Use it. * modules/btowc-tests (Files): Likewise. * modules/canonicalize-lgpl-tests (Files): Likewise. * modules/ceilf-tests (Files): Likewise. * modules/ceill-tests (Files): Likewise. * modules/chown-tests (Files): Likewise. * modules/dprintf-posix-tests (Files): Likewise. * modules/dup2-tests (Files): Likewise. * modules/dup3-tests (Files): Likewise. * modules/duplocale-tests (Files): Likewise. * modules/fchdir-tests (Files): Likewise. * modules/fcntl-tests (Files): Likewise. * modules/fdopendir-tests (Files): Likewise. * modules/fflush-tests (Files): Likewise. * modules/flock-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/fnmatch-tests (Files): Likewise. * modules/fopen-tests (Files): Likewise. * modules/fprintf-posix-tests (Files): Likewise. * modules/freopen-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/fseek-tests (Files): Likewise. * modules/fseeko-tests (Files): Likewise. * modules/fsync-tests (Files): Likewise. * modules/ftell-tests (Files): Likewise. * modules/ftello-tests (Files): Likewise. * modules/futimens-tests (Files): Likewise. * modules/getaddrinfo-tests (Files): Likewise. * modules/getcwd-tests (Files): Likewise. * modules/getdelim-tests (Files): Likewise. * modules/getdtablesize-tests (Files): Likewise. * modules/getgroups-tests (Files): Likewise. * modules/gethostname-tests (Files): Likewise. * modules/getline-tests (Files): Likewise. * modules/getopt-posix-tests (Files): Likewise. * modules/gettimeofday-tests (Files): Likewise. * modules/glob-tests (Files): Likewise. * modules/iconv-tests (Files): Likewise. * modules/inet_ntop-tests (Files): Likewise. * modules/inet_pton-tests (Files): Likewise. * modules/isblank-tests (Files): Likewise. * modules/lchown-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/link-tests (Files): Likewise. * modules/linkat-tests (Files): Likewise. * modules/lseek-tests (Files): Likewise. * modules/lstat-tests (Files): Likewise. * modules/mbrtowc-tests (Files): Likewise. * modules/mbsinit-tests (Files): Likewise. * modules/mbsnrtowcs-tests (Files): Likewise. * modules/mbsrtowcs-tests (Files): Likewise. * modules/memchr-tests (Files): Likewise. * modules/memcmp-tests (Files): Likewise. * modules/memmem-tests (Files): Likewise. * modules/memrchr-tests (Files): Likewise. * modules/mkdir-tests (Files): Likewise. * modules/mkfifo-tests (Files): Likewise. * modules/mkfifoat-tests (Files): Likewise. * modules/mknod-tests (Files): Likewise. * modules/nanosleep-tests (Files): Likewise. * modules/nl_langinfo-tests (Files): Likewise. * modules/obstack-printf-tests (Files): Likewise. * modules/open-tests (Files): Likewise. * modules/openat-tests (Files): Likewise. * modules/perror-tests (Files): Likewise. * modules/pipe2-tests (Files): Likewise. * modules/poll-tests (Files): Likewise. * modules/popen-tests (Files): Likewise. * modules/posix_spawn-tests (Files): Likewise. * modules/posix_spawnp-tests (Files): Likewise. * modules/pread-tests (Files): Likewise. * modules/printf-posix-tests (Files): Likewise. * modules/pty-tests (Files): Likewise. * modules/random_r-tests (Files): Likewise. * modules/rawmemchr-tests (Files): Likewise. * modules/readlink-tests (Files): Likewise. * modules/remove-tests (Files): Likewise. * modules/rename-tests (Files): Likewise. * modules/renameat-tests (Files): Likewise. * modules/rmdir-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/select-tests (Files): Likewise. * modules/setenv-tests (Files): Likewise. * modules/sigaction-tests (Files): Likewise. * modules/sleep-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/snprintf-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/stat-tests (Files): Likewise. * modules/strcasestr-tests (Files): Likewise. * modules/strchrnul-tests (Files): Likewise. * modules/strerror-tests (Files): Likewise. * modules/strsignal-tests (Files): Likewise. * modules/strstr-tests (Files): Likewise. * modules/strtod-tests (Files): Likewise. * modules/strverscmp-tests (Files): Likewise. * modules/symlink-tests (Files): Likewise. * modules/symlinkat-tests (Files): Likewise. * modules/times-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/tsearch-tests (Files): Likewise. * modules/uname-tests (Files): Likewise. * modules/unlink-tests (Files): Likewise. * modules/unsetenv-tests (Files): Likewise. * modules/usleep-tests (Files): Likewise. * modules/utimensat-tests (Files): Likewise. * modules/vasprintf-tests (Files): Likewise. * modules/vdprintf-posix-tests (Files): Likewise. * modules/vfprintf-posix-tests (Files): Likewise. * modules/vprintf-posix-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsnprintf-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/wcrtomb-tests (Files): Likewise. * modules/wcsnrtombs-tests (Files): Likewise. * modules/wcsrtombs-tests (Files): Likewise. * modules/wcwidth-tests (Files): Likewise. * tests/test-isfinite.c (isfinite): Ensure macro declaration. * tests/test-isinf.c (isinf): Likewise. * tests/test-isnan.c (isnan): Likewise. * tests/test-signbit.c (signbit): Likewise. * tests/test-select.c (FD_CLR, FD_ISSET, FD_SET, FD_ZERO): Ensure declaration, either as macro or with correct signature. (select): Ensure function under test is declared with correct signature in correct header. * tests/test-atexit.c (atexit): Likewise. * tests/test-btowc.c (btowc): Likewise. * tests/test-canonicalize-lgpl.c (realpath) (canonicalize_file_name): Likewise. * tests/test-ceilf1.c (ceilf): Likewise. * tests/test-ceill.c (ceill): Likewise. * tests/test-chown.c (chown): Likewise. * tests/test-dprintf-posix.c (dprintf): Likewise. * tests/test-dup2.c (dup2): Likewise. * tests/test-dup3.c (dup3): Likewise. * tests/test-duplocale.c (duplocale): Likewise. * tests/test-fchdir.c (fchdir): Likewise. * tests/test-fchownat.c (fchownat): Likewise. * tests/test-fcntl.c (fcntl): Likewise. * tests/test-fdopendir.c (fdopendir): Likewise. * tests/test-fflush.c (fflush): Likewise. * tests/test-flock.c (flock): Likewise. * tests/test-floorf1.c (floorf): Likewise. * tests/test-floorl.c (floorl): Likewise. * tests/test-fnmatch.c (fnmatch): Likewise. * tests/test-fopen.c (fopen): Likewise. * tests/test-fprintf-posix.c (fprintf): Likewise. * tests/test-freopen.c (freopen): Likewise. * tests/test-frexp.c (frexp): Likewise. * tests/test-frexpl.c (frexpl): Likewise. * tests/test-fseek.c (fseek): Likewise. * tests/test-fseeko.c (fseeko): Likewise. * tests/test-fstatat.c (fstatat): Likewise. * tests/test-fsync.c (fsync): Likewise. * tests/test-ftell.c (ftell): Likewise. * tests/test-ftello.c (ftello): Likewise. * tests/test-futimens.c (futimens): Likewise. * tests/test-getaddrinfo.c (getaddrinfo, freeaddrinfo) (gai_strerror): Likewise. * tests/test-getcwd.c (getcwd): Likewise. * tests/test-getdelim.c (getdelim): Likewise. * tests/test-getdtablesize.c (getdtablesize): Likewise. * tests/test-getgroups.c (getgroups): Likewise. * tests/test-gethostname.c (gethostname): Likewise. * tests/test-getline.c (getline): Likewise. * tests/test-getopt.c (getopt, getopt_long, getopt_long_only): Likewise. * tests/test-gettimeofday.c (gettimeofday): Likewise. * tests/test-glob.c (glob, globfree): Likewise. * tests/test-iconv.c (iconv, iconv_open, iconv_close): Likewise. * tests/test-inet_ntop.c (inet_ntop): Likewise. * tests/test-inet_pton.c (inet_pton): Likewise. * tests/test-isblank.c (isblank): Likewise. * tests/test-lchown.c (lchown): Likewise. * tests/test-ldexpl.c (ldexpl): Likewise. * tests/test-link.c (link): Likewise. * tests/test-linkat.c (linkat): Likewise. * tests/test-lseek.c (lseek): Likewise. * tests/test-lstat.c (lstat): Likewise. * tests/test-mbrtowc.c (mbrtowc): Likewise. * tests/test-mbsinit.c (mbsinit): Likewise. * tests/test-mbsnrtowcs.c (mbsnrtowcs): Likewise. * tests/test-mbsrtowcs.c (mbsrtowcs): Likewise. * tests/test-memchr.c (memchr): Likewise. * tests/test-memcmp.c (memcmp): Likewise. * tests/test-memmem.c (memmem): Likewise. * tests/test-memrchr.c (memrchr): Likewise. * tests/test-mkdir.c (mkdir): Likewise. * tests/test-mkdirat.c (mkdirat): Likewise. * tests/test-mkfifo.c (mkfifo): Likewise. * tests/test-mkfifoat.c (mkfifoat, mknodat): Likewise. * tests/test-mknod.c (mknod): Likewise. * tests/test-nanosleep.c (nanosleep): Likewise. * tests/test-nl_langinfo.c (nl_langinfo): Likewise. * tests/test-obstack-printf.c (obstack_printf, obstack_vprintf): Likewise. * tests/test-open.c (open): Likewise. * tests/test-openat.c (openat): Likewise. * tests/test-perror.c (perror): Likewise. * tests/test-pipe2.c (pipe2): Likewise. * tests/test-poll.c (poll): Likewise. * tests/test-popen.c (popen, pclose): Likewise. * tests/test-posix_spawn1.c (posix_spawnp, posix_spawnattr_init) (posix_spawnattr_destroy, posix_spawnattr_setsigmask) (posix_spawnattr_setflags, posix_spawn_file_actions_init) (posix_spawn_file_actions_destroy) (posix_spawn_file_actions_addclose) (posix_spawn_file_actions_addopen) (posix_spawn_file_actions_adddup2): Likewise. * tests/test-posix_spawn3.c (posix_spawn): Likewise. * tests/test-pread.c (pread): Likewise. * tests/test-printf-posix.c (printf): Likewise. * tests/test-pty.c (openpty, forkpty): Likewise. * tests/test-random_r.c (srandom_r, initstate_r, setstate_r) (random_r): Likewise. * tests/test-rawmemchr.c (rawmemchr): Likewise. * tests/test-readlink.c (readlink): Likewise. * tests/test-remove.c (remove): Likewise. * tests/test-rename.c (rename): Likewise. * tests/test-renameat.c (renameat): Likewise. * tests/test-rmdir.c (rmdir): Likewise. * tests/test-round1.c (round): Likewise. * tests/test-roundf1.c (roundf): Likewise. * tests/test-roundl.c (roundl): Likewise. * tests/test-setenv.c (setenv): Likewise. * tests/test-sigaction.c (sigaction): Likewise. * tests/test-sleep.c (sleep): Likewise. * tests/test-snprintf.c (snprintf): Likewise. * tests/test-sprintf-posix.c (sprintf): Likewise. * tests/test-stat.c (stat): Likewise. * tests/test-stpncpy.c (stpncpy): Likewise. * tests/test-strcasestr.c (strcasestr): Likewise. * tests/test-strchrnul.c (strchrnul): Likewise. * tests/test-strerror.c (strerror): Likewise. * tests/test-strsignal.c (strsignal): Likewise. * tests/test-strstr.c (strstr): Likewise. * tests/test-strtod.c (strtod): Likewise. * tests/test-strverscmp.c (strverscmp): Likewise. * tests/test-symlink.c (symlink): Likewise. * tests/test-symlinkat.c (symlinkat, readlinkat): Likewise. * tests/test-times.c (times): Likewise. * tests/test-trunc1.c (trunc): Likewise. * tests/test-truncf1.c (truncf): Likewise. * tests/test-truncl.c (truncl): Likewise. * tests/test-tsearch.c (tdelete, tfind, tsearch, twalk): Likewise. * tests/test-uname.c (uname): Likewise. * tests/test-unlink.c (unlink): Likewise. * tests/test-unlinkat.c (unlinkat): Likewise. * tests/test-unsetenv.c (unsetenv): Likewise. * tests/test-usleep.c (usleep): Likewise. * tests/test-utimensat.c (utimensat): Likewise. * tests/test-vasprintf.c (asprintf, vasprintf): Likewise. * tests/test-vdprintf-posix.c (vdprintf): Likewise. * tests/test-vfprintf-posix.c (vfprintf): Likewise. * tests/test-vprintf-posix.c (vprintf): Likewise. * tests/test-vsnprintf.c (vsnprintf): Likewise. * tests/test-vsprintf-posix.c (vsprintf): Likewise. * tests/test-wcrtomb.c (wcrtomb): Likewise. * tests/test-wcsnrtombs.c (wcsnrtombs): Likewise. * tests/test-wcsrtombs.c (wcsrtombs): Likewise. * tests/test-wcwidth.c (wcwidth): Likewise. build: pull in conditional headers during GNULIB_POSIXCHECK * lib/stdio.in.h (includes): Using GNULIB_POSIXCHECK also requires definitions from any conditionally-included headers. * lib/stdlib.in.h (includes): Likewise. * lib/unistd.in.h (includes): Likewise. 2009-12-24 Bruno Haible * tests/test-argv-iter.c: Include header file being tested immediately after config.h. * tests/test-base64.c: Likewise. * tests/test-flock.c: Likewise. * tests/test-fsync.c: Likewise. * tests/test-getdate.c: Likewise. * tests/test-getndelim2.c: Likewise. * tests/test-isfinite.c: Likewise. * tests/test-isinf.c: Likewise. * tests/test-strerror.c: Likewise. * tests/test-strsignal.c: Likewise. 2009-12-23 Eric Blake unistd: work around cygwin bug * lib/unistd.in.h (includes): Pick up headers needed for cygwin. * doc/posix-functions/unlinkat.texi (unlinkat): Document the bug. * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. 2009-12-23 Bruno Haible localename: More tests. * tests/test-localename.c (SIZEOF): New macro. (categories): New variable. (test_locale_name, test_locale_name_posix, test_locale_name_environ, test_locale_name_default): Add test w.r.t. thread locale. (test_locale_name_thread): New function. (main): Invoke it. localename: Make aware of thread locale. * lib/localename.h (gl_locale_name_thread): New declaration. (gl_locale_name, gl_locale_name_posix, gl_locale_name_default): Clarify behaviour with respect to thread locale. * lib/localename.c: Include , , , , glthread/lock.h. (SIZE_BITS): New macro. (string_hash): New function. (struct hash_node): New type. (HASH_TABLE_SIZE): New macro. (struniq_hash_table, struniq_lock): New variables. (struniq): New function. (gl_locale_name_thread): New function. (gl_locale_name): Invoke it. * m4/localename.m4 (gl_LOCALENAME): Test for uselocale function. * modules/localename (Depends-on): Add lock. Reported by Mike Gran . 2009-12-23 Eric Blake va-args: new module * modules/va-args: New file. * m4/va-args.m4 (gl_VA_ARGS): Likewise. * MODULES.html.sh (Core language properties): Mention it. gnulib-common: prefer _GL_UNUSED over _UNUSED_PARAMETER_ * m4/gnulib-common.m4 (gl_COMMON): Create a more-appropriately named alias for __attribute__((__unused__)). * lib/chown.c: Update client. * lib/fchmodat.c: Likewise. * lib/fts.c: Likewise. * lib/getdate.y: Likewise. * lib/getgroups.c: Likewise. * lib/getopt.c: Likewise. * lib/getugroups.c: Likewise. * lib/mkdir.c: Likewise. * lib/mkfifo.c: Likewise. * lib/mkfifoat.c: Likewise. * lib/mknod.c: Likewise. * lib/mknodat.c: Likewise. * lib/readlink.c: Likewise. * lib/se-context.in.h: Likewise. * lib/se-selinux.in.h: Likewise. * lib/sockets.c: Likewise. * lib/symlink.c: Likewise. * lib/symlinkat.c: Likewise. * lib/unicodeio.c: Likewise. * lib/unistr.h: Likewise. * tests/test-areadlink.c: Likewise. * tests/test-areadlinkat.c: Likewise. * tests/test-filenamecat.c: Likewise. * tests/test-fseeko.c: Likewise. * tests/test-ftello.c: Likewise. * tests/test-getdate.c: Likewise. * tests/test-getgroups.c: Likewise. * tests/test-gethostname.c: Likewise. * tests/test-quotearg.c: Likewise. * tests/test-version-etc.c: Likewise. * tests/test-xalloc-die.c: Likewise. * tests/test-xfprintf-posix.c: Likewise. * tests/test-xprintf-posix.c: Likewise. * tests/test-xvasprintf.c: Likewise. tests: avoid compiler warnings * tests/test-fcntl.c (main): Delete unused parameters. * tests/test-freopen-safer.c (main): Likewise. * tests/test-xalloc-die.c (main): Mark unused parameters. * tests/test-fseeko.c (main): Likewise. * tests/test-ftello.c (main): Likewise. * tests/test-nanosleep.c (main): Avoid declaration warning. * tests/test-sleep.c (main): Likewise. * tests/test-unsetenv.c (main): Silence warning about string literal. * m4/setenv.m4 (gl_FUNC_UNSETENV): Likewise. 2009-12-23 Bruno Haible * tests/test-localename.c (test_locale_name): New function, extracted from main. Also test mixed situations. (test_locale_name_posix, test_locale_name_environ, test_locale_name_default): New functions. (main): Invoke them all. * modules/localename-tests (configure.ac): Test for newlocale. 2009-12-23 Bruno Haible unistd: Ensure getcwd gets declared before being overridden. * lib/unistd.in.h: Conditionally include . 2009-12-22 Bruno Haible wchar: Diagnose broken combination of glibc and gcc versions and flags. * m4/wchar.m4 (gl_WCHAR_H_INLINE_OK): New macro. (gl_WCHAR_H): Invoke it. * m4/btowc.m4 (gl_FUNC_BTOWC): Require it. * doc/posix-headers/wchar.texi: Mention the interoperability problem. Reported by Karl Berry . 2009-12-22 Eric Blake math, unistd: avoid redundant includes * lib/math.in.h (isnan): No need to re-include . * lib/unistd.in.h (getcwd): Likewise, for . getsubopt: work around cygwin bug * lib/stdlib.in.h (includes): Move unistd inclusion sooner, to avoid conflicting with system getsubopt. * doc/posix-functions/getsubopt.texi (getsubopt): Document the bug. getopt: synchronize from glibc * lib/getopt.c (_getopt_initialize, _getopt_internal_r): Swap parameter order. Adjust all callers. (_getopt_internal_r, main): Adjust quoting in error messages. Drop considerations for outdated POSIX 1003.2 error message. * lib/getopt1.c (_getopt_long_r, _getopt_long_only_r): Adjust callers. * lib/getopt_int.h (_getopt_internal_r): Adjust prototype. test-getopt: test stderr behavior * modules/getopt-posix-tests (Depends-on): Add dup2. * tests/test-getopt.c (ASSERT): Avoid stderr. (main): Move stderr to a temporary file. * tests/test-getopt.h (getopt_loop): No longer manipulate opterr. Instead, add parameter to inform caller if output occurred. (test_getopt): Adjust all existing tests to expect silence, and add new tests of leading ":". * doc/glibc-functions/getopt_long.texi (getopt_long): Document glibc shortcomings with leading "-:" or "+:" in optstring. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. * doc/posix-functions/getopt.texi (getopt): Likewise. test-getopt: enhance test * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Require that getopt_long supports optind=0. * tests/test-getopt.c (OPTIND_MIN): Move... * tests/test-getopt.h (OPTIND_MIN): ...here. * tests/test-getopt_long.h (test_getopt_long): Add more coverage. Require that optind=0 works, since modern BSD supports it in addition to optreset, and since coreutils expects it. (test_getopt_long_only): New test. * doc/glibc-functions/getopt_long.texi (getopt_long): Document glibc shortcomings with 'W;', and enforcement of optind=0. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. 2009-12-21 Bruno Haible localename: Improvements for MacOS X and Cygwin. * lib/localename.h (gl_locale_name_environ): New declaration. * lib/localename.c (gl_locale_name_environ): New function, extracted from gl_locale_name_posix. Ignore dummy LANG values on MacOS X and Cygwin. (gl_locale_name_posix): Invoke it. (gl_locale_name_default): Add comments. Use Windows native API also on Cygwin. 2009-12-21 Bruno Haible Update list of Win32 locale ids. * lib/localename.c (LANG_ROMANSH): Renamed from LANG_RHAETO_ROMANCE. (LANG_SAMI): Renamed from LANG_SAAMI. (LANG_BASHKIR, LANG_LUXEMBOURGISH, LANG_GREENLANDIC, LANG_MAPUDUNGUN, LANG_MOHAWK, LANG_BRETON, LANG_OCCITAN, LANG_CORSICAN, LANG_ALSATIAN, LANG_YAKUT, LANG_KICHE, LANG_KINYARWANDA, LANG_WOLOF, LANG_DARI, LANG_SCOTTISH_GAELIC): New macros. (SUBLANG_AFRIKAANS_SOUTH_AFRICA, SUBLANG_ALBANIAN_ALBANIA, SUBLANG_ALSATIAN_FRANCE, SUBLANG_AMHARIC_ETHIOPIA, SUBLANG_ARMENIAN_ARMENIA, SUBLANG_ASSAMESE_INDIA, SUBLANG_BASHKIR_RUSSIA, SUBLANG_BASQUE_BASQUE, SUBLANG_BELARUSIAN_BELARUS, SUBLANG_BRETON_FRANCE, SUBLANG_BULGARIAN_BULGARIA, SUBLANG_CAMBODIAN_CAMBODIA, SUBLANG_CATALAN_SPAIN, SUBLANG_CORSICAN_FRANCE, SUBLANG_CZECH_CZECH_REPUBLIC, SUBLANG_DANISH_DENMARK, SUBLANG_DARI_AFGHANISTAN, SUBLANG_DIVEHI_MALDIVES, SUBLANG_DUTCH_SURINAM, SUBLANG_ESTONIAN_ESTONIA, SUBLANG_FAEROESE_FAROE_ISLANDS, SUBLANG_FARSI_IRAN, SUBLANG_FINNISH_FINLAND, SUBLANG_FRISIAN_NETHERLANDS, SUBLANG_GALICIAN_SPAIN, SUBLANG_GEORGIAN_GEORGIA, SUBLANG_GREEK_GREECE, SUBLANG_GREENLANDIC_GREENLAND, SUBLANG_GUJARATI_INDIA, SUBLANG_HAUSA_NIGERIA_LATIN, SUBLANG_HEBREW_ISRAEL, SUBLANG_HINDI_INDIA, SUBLANG_HUNGARIAN_HUNGARY, SUBLANG_ICELANDIC_ICELAND, SUBLANG_IGBO_NIGERIA, SUBLANG_INDONESIAN_INDONESIA, SUBLANG_INUKTITUT_CANADA, SUBLANG_INUKTITUT_CANADA_LATIN, SUBLANG_IRISH_IRELAND, SUBLANG_JAPANESE_JAPAN, SUBLANG_KANNADA_INDIA, SUBLANG_KAZAK_KAZAKHSTAN, SUBLANG_KICHE_GUATEMALA, SUBLANG_KINYARWANDA_RWANDA, SUBLANG_KONKANI_INDIA, SUBLANG_KYRGYZ_KYRGYZSTAN, SUBLANG_LAO_LAOS, SUBLANG_LATVIAN_LATVIA, SUBLANG_LITHUANIAN_LITHUANIA, SUBLANG_LOWER_SORBIAN_GERMANY, SUBLANG_LUXEMBOURGISH_LUXEMBOURG, SUBLANG_MACEDONIAN_MACEDONIA, SUBLANG_MALAYALAM_INDIA, SUBLANG_MALTESE_MALTA, SUBLANG_MAORI_NEW_ZEALAND, SUBLANG_MAPUDUNGUN_CHILE, SUBLANG_MARATHI_INDIA, SUBLANG_MOHAWK_CANADA, SUBLANG_NEPALI_NEPAL, SUBLANG_OCCITAN_FRANCE, SUBLANG_ORIYA_INDIA, SUBLANG_PASHTO_AFGHANISTAN, SUBLANG_POLISH_POLAND, SUBLANG_ROMANSH_SWITZERLAND, SUBLANG_SAMI_NORTHERN_NORWAY, SUBLANG_SAMI_NORTHERN_SWEDEN, SUBLANG_SAMI_NORTHERN_FINLAND, SUBLANG_SAMI_LULE_NORWAY, SUBLANG_SAMI_LULE_SWEDEN, SUBLANG_SAMI_SOUTHERN_NORWAY, SUBLANG_SAMI_SOUTHERN_SWEDEN, SUBLANG_SAMI_SKOLT_FINLAND, SUBLANG_SAMI_INARI_FINLAND, SUBLANG_SANSKRIT_INDIA, SUBLANG_SINHALESE_SRI_LANKA, SUBLANG_SLOVAK_SLOVAKIA, SUBLANG_SLOVENIAN_SLOVENIA, SUBLANG_SOTHO_SOUTH_AFRICA, SUBLANG_SWAHILI_KENYA, SUBLANG_SWEDISH_SWEDEN, SUBLANG_SYRIAC_SYRIA, SUBLANG_TAGALOG_PHILIPPINES, SUBLANG_TAJIK_TAJIKISTAN, SUBLANG_TAMIL_INDIA, SUBLANG_TATAR_RUSSIA, SUBLANG_TELUGU_INDIA, SUBLANG_THAI_THAILAND, SUBLANG_TSWANA_SOUTH_AFRICA, SUBLANG_TURKISH_TURKEY, SUBLANG_TURKMEN_TURKMENISTAN, SUBLANG_UKRAINIAN_UKRAINE, SUBLANG_UPPER_SORBIAN_GERMANY, SUBLANG_VIETNAMESE_VIETNAM, SUBLANG_WELSH_UNITED_KINGDOM, SUBLANG_WOLOF_SENEGAL, SUBLANG_XHOSA_SOUTH_AFRICA, SUBLANG_YAKUT_RUSSIA, SUBLANG_YI_PRC, SUBLANG_YORUBA_NIGERIA, SUBLANG_ZULU_SOUTH_AFRICA): New macros. (gl_locale_name_from_win32_LANGID): Handle also the territory neutral locale ids. Add support for Alsatian, Bashkir, Breton, Corsican, Dari, Greenlandic, K'iche', Kinyarwanda, Luxembourgish, Mapudungun, Mohawk, Occitan, Scottish Gaelic, Wolof, Yakut. Change language code for Yi. Add more languages and countries for Sami, Sorbian. Add more countries for Serbian, Dutch. Add more scripts for Inuktitut. Be more precise for Pashto. Change country for Syriac, Tswana. 2009-12-21 Eric Blake test-utimens: avoid spurious failure * tests/test-chown.h (nap): Factor... * tests/nap.h: ...into new file. * tests/test-lchown.h (nap): Avoid duplication. * tests/test-utimens-common.h (nap): Use shared implementation, necessary on file systems with 1-second resolution. * modules/chown-tests (Files): Include new file. * modules/fdutimensat-tests (Files): Likewise. * modules/futimens-tests (Files): Likewise. * modules/lchown-tests (Files): Likewise. * modules/openat-tests (Files): Likewise. * modules/utimens-tests (Files): Likewise. * modules/utimensat-tests (Files): Likewise. 2009-12-19 Eric Blake futimens, utimensat: work around Linux bug * m4/futimens.m4 (gl_FUNC_FUTIMENS): Detect ctime bug. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. * lib/utimensat.c (rpl_utimensat): Work around it. * lib/futimens.c (rpl_futimens): Adjust comment. utimens: work around Linux ctime bug * lib/utimens.c (detect_ctime_bug): New helper function. (update_timespec): Differentiate between workaround needed for this bug vs. what is needed for systems that lack utimensat. (fdutimens, lutimens): Work around bug. utimens: check for ctime update * tests/test-utimens-common.h (check_ctime): Define. * tests/test-utimens.h (test_utimens): Expose the Linux bug. * tests/test-futimens.h (test_futimens): Likewise. * tests/test-lutimens.h (test_lutimens): Likewise. * doc/posix-functions/futimens.texi (futimens): Document the bug. * doc/posix-functions/utimensat.texi (utimensat): Likewise. 2009-12-19 Bruno Haible dprintf-posix: Check against memory leak fixed on 2009-12-15. * tests/test-dprintf-posix2.sh: New file. * tests/test-dprintf-posix2.c: New file. * modules/dprintf-posix-tests (Files): Add them. (configure.ac): Check for getrlimit and setrlimit. (Makefile.am): Augment TESTS and CHECK_PROGRAMS. 2009-12-19 Bruno Haible fprintf-posix: Check against memory leak fixed on 2009-12-15. * tests/test-fprintf-posix3.sh: New file. * tests/test-fprintf-posix3.c: New file. * modules/fprintf-posix-tests (Files): Add them. (Makefile.am): Augment TESTS and CHECK_PROGRAMS. 2009-12-19 Eric Blake dirfd: fix prototype * lib/dirent.in.h (dirfd): Argument is not const, per POSIX. * lib/dirfd.c (dirfd): Likewise. canonicalize: reduce memory usage * lib/canonicalize.c (canonicalize_filename_mode): Trim the allocation to size. Reported by Solar Designer . 2009-12-19 Bruno Haible New module attribute 'Applicability'. * modules/TEMPLATE-EXTENDED: New field 'Applicability'. * gnulib-tool: New option --extract-applicability. (func_usage): Document it. (sed_extract_prog): Recognize it. (func_get_applicability): New function. (func_import): Generalize handling of 'link-warning' module. * modules/link-warning (Applicability): New section. * modules/arg-nonnull (Applicability): New section. Repoted by Simon Josefsson . 2009-12-19 Bruno Haible fflush: tweak * lib/fflush.c (update_fpos_cache): Don't use fpos_t on Cygwin. * lib/fseeko.c (rpl_fseeko): Likewise. 2009-12-16 José E. Marchesi (tiny change) * lib/gl_list.h: Fix typo in comment. 2009-12-16 Eric Blake fcntl: use to simplify other modules * modules/cloexec (Depends-on): Add fcntl. * modules/fchdir (Depends-on): Likewise. * modules/fd-safer-flag (Depends-on): Likewise. * modules/unistd-safer (Depends-on): Likewise. * modules/dup3 (configure.ac): Set module indicator. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Replace fcntl if fchdir is missing. * lib/fchdir.c (_gl_register_dup): Fix comment. * lib/cloexec.c (dup_cloexec): Simplify, by relying on fcntl. * lib/dup-safer.c (dup_safer): Likewise. * lib/dup-safer-flag.c (dup_safer_flag): Likewise. * lib/dup3.c (dup3): Likewise. * tests/test-fchdir.c (main): Enhance test. Fixes a dup_cloexec bug reported by Ondřej Vašík. fcntl: port portions of fcntl to mingw * m4/fcntl.m4 (gl_FUNC_FCNTL): Also build fcntl.c on mingw. * lib/fcntl.c (fcntl) : Provide replacement for mingw. * modules/fcntl (Description): Update. (Depends-on): Add dup2. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Add witness. * modules/fcntl-h (Makefile.am): Substitute it. * lib/fcntl.in.h (fcntl): Update declaration. (F_DUPFD, F_GETFD): New macros, when needed. * doc/posix-headers/fcntl.texi (fcntl.h): Update documentation. * doc/posix-functions/fcntl.texi (fcntl): Likewise. * tests/test-fcntl.c (check_flags, main): Enhance test for items we now guarantee. fcntl: work around cygwin bug in F_DUPFD * m4/fcntl.m4 (gl_REPLACE_FCNTL): New macro. (gl_FUNC_FCNTL): Use it. Test for F_DUPFD bug. * lib/fcntl.c (rpl_fcntl) : Work around it. : Reduce calls to _gl_register_dup. * doc/posix-functions/fcntl.texi (fcntl): Document it. fcntl: support F_DUPFD_CLOEXEC on systems with fcntl * modules/fcntl (Files): List new files. (configure.ac): Run a test. * m4/fcntl.m4 (gl_FUNC_FCNTL): New file. * lib/fcntl.c (rpl_fcntl): Likewise. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Add witness defaults. (gl_FCNTL_H): Always replace fcntl.h. * modules/fcntl-h (Makefile.am): Substitute witnesses. * lib/fcntl.in.h (fcntl): Declare replacement. (F_DUPFD_CLOEXEC, GNULIB_defined_F_DUPFD_CLOEXEC): New macro when needed, plus a witness. * doc/posix-functions/fcntl.texi (fcntl): Document this. * doc/posix-headers/fcntl.texi (fcntl.h): Likewise. * tests/test-fcntl.c: New file. * modules/fcntl-tests: Likewise. binary-io: avoid potential compilation warning * lib/binary-io.h [__DJGPP__]: Avoid null preprocessor directives. fflush: avoid compilation error on NetBSD * lib/fflush.c (update_fpos_cache): Use a union to safely convert between off_t and fpos_t, since the latter is sometimes a struct. * lib/fseeko.c (rpl_fseeko): Likewise. Reported by Alexander Nasonov . 2009-12-15 Eric Blake fcntl-h, stdio, sys_ioctl: fix declarations * lib/stdio.in.h (dprintf): Use of link warning on a variadic function must not take arguments. * lib/sys_ioctl.in.h (ioctl): Likewise. * lib/fcntl.in.h (openat): Likewise. Declare extern. (open): Add a link warning. 2009-12-15 Jim Meyering areadlink, areadlink-with-size: relax license to LGPLv2+ * modules/areadlink (License): Relax to LGPLv2+. * modules/areadlink-with-size (License): Likewise. 2009-12-15 Joel E. Denny Bruno Haible *printf: Fix memory leak. * lib/fprintf.c (fprintf): Free memory allocated by vasnprintf. * lib/vfprintf.c (vfprintf): Likewise. * lib/dprintf.c (dprintf): Likewise. * lib/vdprintf.c (vdprintf): Likewise. 2009-12-14 Eric Blake accept4: adjust module dependencies * modules/accept4 (Depends-on): Use fcntl-h, not fcntl. utimens: one more try at avoiding compiler warning * lib/utimens.c (lutimens): Lower scope of result. 2009-12-13 Bruno Haible Move the malloc checking from module 'list' to new module 'xlist'. * modules/xlist: New file. * lib/gl_xlist.h: New file. * lib/gl_xlist.c: New file. * lib/gl_list.h (gl_list_create_empty, gl_list_create, gl_list_node_set_value, gl_list_set_at, gl_list_add_first, gl_list_add_last, gl_list_add_before, gl_list_add_after, gl_list_nx_add_at, gl_sortedlist_add): Disable declarations. (gl_list_nx_create_empty, gl_list_nx_create, gl_list_node_nx_set_value, gl_list_nx_set_at, gl_list_nx_add_first, gl_list_nx_add_last, gl_list_nx_add_before, gl_list_nx_add_after, gl_list_nx_add_at, gl_sortedlist_nx_add): New declarations. (struct gl_list_implementation): Rename and change methods accordingly. (gl_list_nx_create_empty): Renamed from gl_list_create_empty. (gl_list_nx_create): Renamed from gl_list_create. (gl_list_node_nx_set_value): Renamed from gl_list_node_set_value. (gl_list_nx_set_at): Renamed from gl_list_set_at. (gl_list_nx_add_first): Renamed from gl_list_add_first. (gl_list_nx_add_last): Renamed from gl_list_add_last. (gl_list_nx_add_before): Renamed from gl_list_add_before. (gl_list_nx_add_after): Renamed from gl_list_add_after. (gl_list_nx_add_at): Renamed from gl_list_add_at. (gl_sortedlist_nx_add): Renamed from gl_sortedlist_add. * lib/gl_list.c (gl_list_nx_create_empty): Renamed from gl_list_create_empty. (gl_list_nx_create): Renamed from gl_list_create. (gl_list_node_nx_set_value): Renamed from gl_list_node_set_value. (gl_list_nx_set_at): Renamed from gl_list_set_at. (gl_list_nx_add_first): Renamed from gl_list_add_first. (gl_list_nx_add_last): Renamed from gl_list_add_last. (gl_list_nx_add_before): Renamed from gl_list_add_before. (gl_list_nx_add_after): Renamed from gl_list_add_after. (gl_list_nx_add_at): Renamed from gl_list_add_at. (gl_sortedlist_nx_add): Renamed from gl_sortedlist_add. * lib/gl_array_list.c: Don't include xalloc.h. (gl_array_nx_create_empty): Renamed from gl_array_create_empty. Return NULL upon out-of-memory. (gl_array_nx_create): Renamed from gl_array_create. Return NULL upon out-of-memory. (gl_array_node_nx_set_value): Renamed from gl_array_node_set_value. Change return type to 'int'. (gl_array_nx_set_at): Renamed from gl_array_set_at. (grow): Change return type to 'int'. Return -1 upon out-of-memory. (gl_array_nx_add_first): Renamed from gl_array_add_first. Return NULL upon out-of-memory. (gl_array_nx_add_last): Renamed from gl_array_add_last. Return NULL upon out-of-memory. (gl_array_nx_add_before): Renamed from gl_array_add_before. Return NULL upon out-of-memory. (gl_array_nx_add_after): Renamed from gl_array_add_after. Return NULL upon out-of-memory. (gl_array_nx_add_at): Renamed from gl_array_add_at. Return NULL upon out-of-memory. (gl_array_sortedlist_nx_add): Renamed from gl_array_sortedlist_add. Update. (gl_array_list_implementation): Update. * lib/gl_carray_list.c: Don't include xalloc.h. (gl_carray_nx_create_empty): Renamed from gl_carray_create_empty. Return NULL upon out-of-memory. (gl_carray_nx_create): Renamed from gl_carray_create. Return NULL upon out-of-memory. (gl_carray_node_nx_set_value): Renamed from gl_carray_node_set_value. Change return type to 'int'. (gl_carray_nx_set_at): Renamed from gl_carray_set_at. (grow): Change return type to 'int'. Return -1 upon out-of-memory. (gl_carray_nx_add_first): Renamed from gl_carray_add_first. Return NULL upon out-of-memory. (gl_carray_nx_add_last): Renamed from gl_carray_add_last. Return NULL upon out-of-memory. (gl_carray_nx_add_at): Renamed from gl_carray_add_at. Return NULL upon out-of-memory. (gl_carray_nx_add_before): Renamed from gl_carray_add_before. Update. (gl_carray_nx_add_after): Renamed from gl_carray_add_after. Update. (gl_carray_sortedlist_nx_add): Renamed from gl_carray_sortedlist_add. Update. (gl_carray_list_implementation): Update. * lib/gl_anyhash_list2.h (hash_resize): Do nothing upon out-of-memory. * lib/gl_anylinked_list2.h (gl_linked_nx_create_empty): Renamed from gl_linked_create_empty. Return NULL upon out-of-memory. (gl_linked_nx_create): Renamed from gl_linked_create. Return NULL upon out-of-memory. (gl_linked_node_nx_set_value): Renamed from gl_linked_node_set_value. Change return type to 'int'. Return -1 upon out-of-memory. (gl_linked_nx_set_at): Renamed from gl_linked_set_at. Return NULL upon out-of-memory. (gl_linked_nx_add_first): Renamed from gl_linked_add_first. Return NULL upon out-of-memory. (gl_linked_nx_add_last): Renamed from gl_linked_add_last. Return NULL upon out-of-memory. (gl_linked_nx_add_before): Renamed from gl_linked_add_before. Return NULL upon out-of-memory. (gl_linked_nx_add_after): Renamed from gl_linked_add_after. Return NULL upon out-of-memory. (gl_linked_nx_add_at): Renamed from gl_linked_add_at. Return NULL upon out-of-memory. (gl_linked_sortedlist_nx_add): Renamed from gl_linked_sortedlist_add. Update. * lib/gl_linked_list.c: Don't include xalloc.h. (gl_linked_list_implementation): Update. * lib/gl_linkedhash_list.c: Don't include xalloc.h. (add_to_bucket): Change return type to 'int'. (gl_linkedhash_list_implementation): Update. * lib/gl_anytree_list1.h (free_subtree): New function. * lib/gl_anytree_list2.h (gl_tree_nx_create_empty): Renamed from gl_tree_create_empty. Return NULL upon out-of-memory. (gl_tree_node_nx_set_value): Renamed from gl_tree_node_set_value. Change return type to 'int'. Return -1 upon out-of-memory. (gl_tree_nx_set_at): Renamed from gl_tree_set_at. Return NULL upon out-of-memory. (gl_tree_nx_add_at): Renamed from gl_tree_add_at. Update. (gl_tree_remove_node): New function, moved here from lib/gl_anyavltree_list2.h and lib/gl_anyrbtree_list2.h. (gl_tree_sortedlist_nx_add): Renamed from gl_tree_sortedlist_add. Update. * lib/gl_anyavltree_list2.h (create_subtree_with_contents): Use malloc, not xmalloc. Return NULL upon out-of-memory. (gl_tree_nx_create): Renamed from gl_tree_create. Return NULL upon out-of-memory. (gl_tree_remove_node_from_tree): New function, extracted from gl_tree_remove_node. (gl_tree_nx_add_first): Renamed from gl_tree_add_first. Return NULL upon out-of-memory. (gl_tree_nx_add_last): Renamed from gl_tree_add_last. Return NULL upon out-of-memory. (gl_tree_nx_add_before): Renamed from gl_tree_add_before. Return NULL upon out-of-memory. (gl_tree_nx_add_after): Renamed from gl_tree_add_after. Return NULL upon out-of-memory. (gl_tree_remove_node): Remove function. Moved to gl_anytree_list2.h. * lib/gl_anyrbtree_list2.h (create_subtree_with_contents): Use malloc, not xmalloc. Return NULL upon out-of-memory. (gl_tree_nx_create): Renamed from gl_tree_create. Return NULL upon out-of-memory. (gl_tree_remove_node_from_tree): New function, extracted from gl_tree_remove_node. (gl_tree_nx_add_first): Renamed from gl_tree_add_first. Return NULL upon out-of-memory. (gl_tree_nx_add_last): Renamed from gl_tree_add_last. Return NULL upon out-of-memory. (gl_tree_nx_add_before): Renamed from gl_tree_add_before. Return NULL upon out-of-memory. (gl_tree_nx_add_after): Renamed from gl_tree_add_after. Return NULL upon out-of-memory. (gl_tree_remove_node): Remove function. Moved to gl_anytree_list2.h. * lib/gl_avltree_list.c: Don't include xalloc.h. Include gl_anytree_list1.h before gl_anyavltree_list2.h. (gl_avltree_list_implementation): Update. * lib/gl_rbtree_list.c: Don't include xalloc.h. Include gl_anytree_list1.h before gl_anyavltree_list2.h. (gl_rbtree_list_implementation): Update. * lib/gl_anytreehash_list1.h (add_to_bucket, add_nodes_to_buckets): Change return type to 'int'. Return -1 upon out-of-memory. Use __builtin_expect. * lib/gl_avltreehash_list.c: Don't include xalloc.h. (gl_avltreehash_list_implementation): Update. * lib/gl_rbtreehash_list.c: Don't include xalloc.h. (gl_rbtreehash_list_implementation): Update. * modules/array-list (Depends-on): Remove xalloc. * modules/carray-list (Depends-on): Likewise. * modules/linked-list (Depends-on): Likewise. * modules/linkedhash-list (Depends-on): Likewise. * modules/avltree-list (Depends-on): Likewise. * modules/rbtree-list (Depends-on): Likewise. * modules/avltreehash-list (Depends-on): Likewise. * modules/rbtreehash-list (Depends-on): Likewise. * modules/xsublist: New file. * lib/gl_xsublist.h: New file. * lib/gl_xsublist.c: New file. * lib/gl_sublist.h (gl_sublist_create): Disable declaration. (gl_sublist_nx_create): New declaration. * lib/gl_sublist.c: Don't include xalloc.h. (gl_sublist_nx_create_empty): Renamed from gl_sublist_create_empty. (gl_sublist_nx_create_fill): Renamed from gl_sublist_create_fill. (gl_sublist_node_nx_set_value): Renamed from gl_sublist_node_set_value. Change return type to 'int'. Return -1 upon out-of-memory. (gl_sublist_nx_set_at): Renamed from gl_sublist_set_at. Return NULL upon out-of-memory. (gl_sublist_nx_add_first): Renamed from gl_sublist_add_first. Return NULL upon out-of-memory. (gl_sublist_nx_add_last): Renamed from gl_sublist_add_last. Return NULL upon out-of-memory. (gl_sublist_nx_add_before): Renamed from gl_sublist_add_before. Return NULL upon out-of-memory. (gl_sublist_nx_add_after): Renamed from gl_sublist_add_after. Return NULL upon out-of-memory. (gl_sublist_nx_add_at): Renamed from gl_sublist_add_at. Return NULL upon out-of-memory. (gl_sublist_sortedlist_nx_add): Renamed from gl_sublist_sortedlist_add. (gl_sublist_list_implementation): Update. (gl_sublist_nx_create): Renamed from gl_sublist_create. Return NULL upon out-of-memory. * modules/sublist (Depends-on): Remove xalloc. * tests/test-array_list.c: Use gl_list_nx_* functions where possible. * tests/test-carray_list.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. * modules/array-list-tests (Makefile.am): Don't link with @LIBINTL@. * modules/carray-list-tests (Makefile.am): Likewise. * modules/linked-list-tests (Makefile.am): Likewise. * modules/linkedhash-list-tests (Makefile.am): Likewise. * modules/avltree-list-tests (Makefile.am): Likewise. * modules/rbtree-list-tests (Makefile.am): Likewise. * modules/avltreehash-list-tests (Makefile.am): Likewise. * modules/rbtreehash-list-tests (Makefile.am): Likewise. * NEWS: Mention the changes. * lib/clean-temp.c: Include gl_xlist.h. * modules/clean-temp (Depends-on): Add xlist. * lib/git-merge-changelog.c: Include gl_xlist.h instead of gl_list.h. * modules/git-merge-changelog (Depends-on): Add xlist. Remove list. * tests/test-array_oset.c: Include gl_xlist.h. * modules/array-oset-tests (Depends-on): Add xlist. Reported by José E. Marchesi . 2009-12-13 Bruno Haible Move the malloc checking from module 'oset' to new module 'xoset'. * modules/xoset: New file. * lib/gl_xoset.h: New file. * lib/gl_xoset.c: New file. * lib/gl_oset.h (gl_oset_create_empty, gl_oset_add): Disable declarations. (gl_oset_nx_create_empty, gl_oset_nx_add): New declarations. (struct gl_oset_implementation): Rename and change methods accordingly. (gl_oset_nx_create_empty): Renamed from gl_oset_create_empty. (gl_oset_nx_add): Renamed from gl_oset_add. Change return type to 'int'. Mark as __warn_unused_result__. * lib/gl_oset.c (gl_oset_nx_create_empty): Renamed from gl_oset_create_empty. (gl_oset_nx_add): Renamed from gl_oset_add. Change return type to 'int'. * lib/gl_array_oset.c: Don't include xalloc.h. (gl_array_nx_create_empty): Renamed from gl_array_create_empty. Use malloc, not xmalloc. (grow): Change return type to 'int'. Don't call xalloc_die. (gl_array_nx_add_at): Renamed from gl_array_add_at. Change return type to 'int'. (gl_array_nx_add): Renamed from gl_array_add. Change return type to 'int'. (gl_array_oset_implementation): Update. * lib/gl_anytree_oset.h (gl_tree_nx_create_empty): Renamed from gl_tree_create_empty. (gl_tree_nx_add): Renamed from gl_tree_add. Change return type to 'int'. * lib/gl_avltree_oset.c: Don't include xalloc.h. (gl_tree_nx_add_first): Renamed from gl_tree_add_first. Use malloc, not xmalloc. (gl_tree_nx_add_before): Renamed from gl_tree_add_before. Use malloc, not xmalloc. (gl_tree_nx_add_after): Renamed from gl_tree_add_after. Use malloc, not xmalloc. (gl_avltree_oset_implementation): Update. * lib/gl_rbtree_oset.c: Don't include xalloc.h. (gl_tree_nx_add_first): Renamed from gl_tree_add_first. Use malloc, not xmalloc. (gl_tree_nx_add_before): Renamed from gl_tree_add_before. Use malloc, not xmalloc. (gl_tree_nx_add_after): Renamed from gl_tree_add_after. Use malloc, not xmalloc. (gl_rbtree_oset_implementation): Update. * modules/array-oset (Depends-on): Remove xalloc. * modules/avltree-oset (Depends-on): Likewise. * modules/rbtree-oset (Depends-on): Likewise. * tests/test-array_oset.c: Use gl_oset_nx_* functions where possible. * tests/test-avltree_oset.c: Likewise. * tests/test-rbtree_oset.c: Likewise. * lib/gl_anytreehash_list1.h (add_to_bucket): Likewise. * modules/avltree-oset-tests (Makefile.am): Don't link with @LIBINTL@. * modules/rbtree-oset-tests (Makefile.am): Likewise. * NEWS: Mention the change. 2009-12-05 Alfred M. Szmidt maint.mk: allow a project to override release-prep commands * top/maint.mk (alpha, beta, stable): Move release-preparatory commands into a new rule. (release-prep): New rule. (release-prep-hook): New overridable variable. 2009-12-13 Bruno Haible * lib/localcharset.c (locale_charset): Fix comment about use of GetACP. 2009-12-13 Jim Meyering maint.mk (null_AM_MAKEFLAGS, built_programs): remove unused definitions * top/maint.mk (null_AM_MAKEFLAGS, built_programs): Remove definitions. 2009-12-12 Bruno Haible duplocale: Tweak. * lib/duplocale.c (rpl_duplocale): Mark categories array as 'const'. 2009-12-12 Karl Berry * config/srclist.txt (strtoll.c): tab changes, no more sync. 2009-12-12 Bruno Haible * m4/po.m4: Undo incorrect untabification. 2009-12-12 Bruno Haible c-strtod, c-strtold: Use multithread-safe implementation on MacOS X. * modules/c-strtod (Depends-on): Add locale. * modules/c-strtold (Depends-on): Likewise. 2009-12-12 Bruno Haible * lib/localcharset.c (locale_charset): Add comment about use of GetACP. 2009-12-11 Eric Blake setenv: relax requirement in light of POSIX ruling * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Test handling of "" but not NULL. * tests/test-setenv.c (main): Relax test. * tests/test-unsetenv.c (main): Likewise. * doc/posix-functions/setenv.texi (setenv): Document this. * doc/posix-functions/unsetenv.texi (unsetenv): Likewise. 2009-12-11 Bruno Haible New module 'fd-safer-flag'. * lib/dup-safer-flag.c: New file, extracted from lib/dup-safer.c. * lib/dup-safer.c (dup_safer_flag): Remove function. * lib/fd-safer-flag.c: New file, extracted from lib/fd-safer.c. * lib/fd-safer.c (fd_safer_flag): Remove function. * lib/unistd-safer.h (dup_safer_flag, fd_safer_flag): Update condition. * modules/cloexec (configure.ac): Drop indicator macro. * modules/fd-safer-flag: New file. * modules/pipe2-safer (Depends-on): Add fd-safer-flag. Remove cloexec. * modules/stdlib-safer (Depends-on): Add fd-safer-flag. * modules/unistd-safer-tests (Depends-on): Add fd-safer-flag. 2009-12-11 Bruno Haible Tests for module 'nl_langinfo'. * modules/nl_langinfo-tests: New file. * tests/test-nl_langinfo.sh: New file. * tests/test-nl_langinfo.c: New file. New module 'nl_langinfo'. * lib/nl_langinfo.c: New file. * m4/nl_langinfo.m4: New file. * modules/nl_langinfo: New file. * doc/posix-functions/nl_langinfo.texi: Mention the new module. 2009-12-11 Bruno Haible Tests for module 'langinfo'. * modules/langinfo-tests: New file. * tests/test-langinfo.c: New file. New module 'langinfo'. * lib/langinfo.in.h: New file. * m4/langinfo_h.m4: New file. * modules/langinfo: New file. * doc/posix-headers/langinfo.texi: Mention the new module. 2009-12-11 Bruno Haible * lib/config.charset: Untabify. 2009-12-11 Bruno Haible * modules/unistd-safer (configure.ac): Drop indicator macro. 2009-12-11 Bruno Haible Move pipe2-safer code to its own file. * lib/pipe2-safer.c: New file, extracted from lib/pipe-safer.c. * lib/pipe-safer.c (pipe2_safer): Remove function. * modules/pipe2-safer (Files): Add lib/pipe2-safer.c. (Makefile.am): Add it to lib_SOURCES. 2009-12-10 Bruno Haible * lib/recvfrom.c (rpl_recvfrom): Allow the from argument to be NULL. 2009-12-10 Bruno Haible Declare which arguments expect non-NULL values, for GCC and clang. * build-aux/arg-nonnull.h: New file. * modules/arg-nonnull: New file. * lib/arpa_inet.in.h (_GL_ARG_NONNULL): New placeholder. (inet_ntop, inet_pton): Use it. * lib/dirent.in.h (_GL_ARG_NONNULL): New placeholder. (closedir, dirfd, opendir, scandir, alphasort): Use it. * lib/fcntl.in.h (_GL_ARG_NONNULL): New placeholder. (open, openat): Use it. * lib/fnmatch.in.h (_GL_ARG_NONNULL): New placeholder. (fnmatch): Use it. * lib/getopt.in.h (_GL_ARG_NONNULL): New placeholder. (getopt, getopt_long, getopt_long_only): Use it. * lib/glob.in.h (_GL_ARG_NONNULL): New placeholder. * lib/glob-libc.h (glob, globfree, glob64, globfree64, glob_pattern_p): Use it. * lib/iconv.in.h (_GL_ARG_NONNULL): New placeholder. (iconv_open): Use it. * lib/inttypes.in.h (_GL_ARG_NONNULL): New placeholder. (strtoimax, strtoumax): Use it. * lib/locale.in.h (_GL_ARG_NONNULL): New placeholder. (duplocale): Use it. * lib/math.in.h (_GL_ARG_NONNULL): New placeholder. (frexp, frexpl): Use it. * lib/netdb.in.h (_GL_ARG_NONNULL): New placeholder. (getaddrinfo, freeaddrinfo, getnameinfo): Use it. * lib/search.in.h (_GL_ARG_NONNULL): New placeholder. (tsearch, tfind, tdelete, twalk): Use it. * lib/signal.in.h (_GL_ARG_NONNULL): New placeholder. (sigismember, sigemptyset, sigaddset, sigdelset, sigfillset, sigpending): Use it. * lib/spawn.in.h (_GL_ARG_NONNULL): New placeholder. (posix_spawn, posix_spawnp, posix_spawnattr_init, posix_spawnattr_destroy, posix_spawnattr_getsigdefault, posix_spawnattr_setsigdefault, posix_spawnattr_getsigmask, posix_spawnattr_setsigmask, posix_spawnattr_getflags, posix_spawnattr_setflags, posix_spawnattr_getpgroup, posix_spawnattr_setpgroup, posix_spawnattr_getschedpolicy, posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam, posix_spawnattr_setschedparam, posix_spawn_file_actions_init, posix_spawn_file_actions_destroy, posix_spawn_file_actions_addopen, posix_spawn_file_actions_addclose, posix_spawn_file_actions_adddup2): Use it. * lib/stdio.in.h (_GL_ARG_NONNULL): New placeholder. (dprintf, fclose, fopen, fprintf, fpurge, fputc, fputs, freopen, rpl_fseek, fseeko, rpl_ftell, ftello, fwrite, getdelim, getline, obstack_printf, obstack_vprintf, popen, printf, putc, puts, remove, rename, renameat, snprintf, sprintf, asprintf, vasprintf, vdprintf, vfprintf, vprintf, vsnprintf, vsprintf): Use it. * lib/stdlib.in.h (_GL_ARG_NONNULL): New placeholder. (atoll, canonicalize_file_name, getloadavg, getsubopt, mkdtemp, mkostemp, mkostemps, mkstemp, mkstemps, putenv, srandom_r, initstate_r, setstate_r, random_r, realpath, rpmatch, setenv, strtod, strtoll, strtoull, unsetenv): Use it. * lib/string.in.h (_GL_ARG_NONNULL): New placeholder. (memchr, memmem, mempcpy, memrchr, rawmemchr, stpcpy, stpncpy, strchrnul, strdup, strndup, strnlen, strpbrk, strsep, strstr, strcasestr, strtok_r, mbslen, mbsnlen, mbschr, mbsrchr, mbsstr, mbscasecmp, mbsncasecmp, mbspcasecmp, mbscasestr, mbscspn, mbspbrk, mbsspn, mbssep, mbstok_r, strverscmp): Use it. * lib/strings.in.h (_GL_ARG_NONNULL): New placeholder. (strcasecmp, strncasecmp): Use it. * lib/sys_socket.in.h (_GL_ARG_NONNULL): New placeholder. (rpl_connect, rpl_bind, rpl_getpeername, rpl_getsockname, rpl_getsockopt, rpl_recv, rpl_send, rpl_recvfrom, rpl_sendto, rpl_setsockopt): Use it. * lib/sys_stat.in.h (_GL_ARG_NONNULL): New placeholder. (fchmodat, fstat, fstatat, lchmod, rpl_lstat, mkdir, mkdirat, mkfifo, mkfifoat, mknod, mknodat, stat, utimensat): Use it. * lib/sys_time.in.h (_GL_ARG_NONNULL): New placeholder. (gettimeofday): Use it. * lib/sys_times.in.h (_GL_ARG_NONNULL): New placeholder. (times): Use it. * lib/sys_utsname.in.h (_GL_ARG_NONNULL): New placeholder. (uname): Use it. * lib/time.in.h (_GL_ARG_NONNULL): New placeholder. (nanosleep, mktime, localtime_r, gmtime_r, strptime, timegm): Use it. * lib/unistd.in.h (_GL_ARG_NONNULL): New placeholder. (chown, euidaccess, faccessat, _gl_register_fd, fchownat, getdomainname, gethostname, getlogin_r, lchown, link, linkat, pipe2, pread, readlink, readlinkat, rmdir, symlink, symlinkat, unlink, unlinkat, write): Use it. * lib/wchar.in.h (_GL_ARG_NONNULL): New placeholder. (mbsrtowcs, mbsnrtowcs, wcsrtombs, wcsnrtombs): Use it. * lib/argv-iter.h: Include arg-nonnull.h. (_ATTRIBUTE_NONNULL_): Remove macro. (argv_iter_init_argv, argv_iter_init_stream, argv_iter, argv_iter_n_args, argv_iter_free): Use _GL_ARG_NONNULL. * lib/canonicalize-lgpl.c (_GL_ARG_NONNULL): Define, to defeat gcc optimization. * lib/getaddrinfo.c (_GL_ARG_NONNULL): Likewise. * lib/getdelim.c (_GL_ARG_NONNULL): Likewise. * lib/glob.c (_GL_ARG_NONNULL): Likewise. * lib/random_r.c (_GL_ARG_NONNULL): Likewise. * lib/setenv.c (_GL_ARG_NONNULL): Likewise. * lib/strtod.c (_GL_ARG_NONNULL): Likewise. * lib/tsearch.c (_GL_ARG_NONNULL): Likewise. * lib/unsetenv.c (_GL_ARG_NONNULL): Likewise. * modules/arpa_inet (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into arpa/inet.h. * modules/dirent (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into dirent.h. * modules/fcntl-h (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into fcntl.h. * modules/fnmatch (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into fnmatch.h. * modules/getopt-posix (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into getopt.h. * modules/glob (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into glob.h. * modules/iconv_open (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into iconv.h. * modules/inttypes (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into inttypes.h. * modules/locale (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into locale.h. * modules/math (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into math.h. * modules/netdb (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into netdb.h. * modules/search (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into search.h. * modules/signal (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into signal.h. * modules/spawn (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into spawn.h. * modules/stdio (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into stdio.h. * modules/stdlib (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into stdlib.h. * modules/string (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into string.h. * modules/strings (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into strings.h. * modules/sys_socket (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into sys/socket.h. * modules/sys_stat (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into sys/stat.h. * modules/sys_time (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into sys/time.h. * modules/sys_times (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into sys/times.h. * modules/sys_utsname (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into sys/utsname.h. * modules/time (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into time.h. * modules/unistd (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into unistd.h. * modules/wchar (Depends-on): Add arg-nonnull. (Makefile.am): Insert arg-nonnull.h into wchar.h. * modules/argv-iter (Depends-on): Add arg-nonnull. * tests/test-canonicalize.c (null_ptr): New function. (main): Use it. * tests/test-canonicalize-lgpl.c (null_ptr): New function. (main): Use it. * tests/test-memmem.c (null_ptr): New function. (main): Use it. Reported by Jim Meyering. 2009-12-10 Bruno Haible Use spaces for indentation, not tabs. * lib/**/*.[hcy] except lib/reg*.[hc]: Untabify. * m4/*.m4: Untabify. * build-aux/*.h: Untabify. * tests/**/*.[hc]: Untabify. * README: New section "Indent with spaces, not TABs", based on coreutils/HACKING and comments by Pádraig Brady and Paolo Bonzini. * NEWS: Mention the change. 2009-12-10 Bruno Haible pty test: Fix link error. * modules/pty-tests (Makefile.am): Add the default LDADD value to test_pty_LDADD. 2009-12-07 Simon Josefsson * modules/pty: New file. * modules/pty-tests: New file. * m4/pty.m4: New file. * tests/test-pty.c: New file. * doc/glibc-headers/pty.texi: Modified. * doc/glibc-functions/forkpty.texi: Modified. * doc/glibc-functions/openpty.texi: Modified. 2009-12-10 Bruno Haible Avoid syntax error in C++ mode. * lib/stdio.in.h (rename): Don't use parameter name 'new'. 2009-12-10 Bruno Haible Use sed with option -e. * gnulib-tool (func_version, func_emit_copyright_notice, func_emit_initmacro_end, func_import, func_create_testdir): Pass option -e to sed. * modules/link-warning (Makefile.am): Likewise. 2009-12-10 Jim Meyering mgetgroups: do not write bytes beyond end of malloc'd buffer * lib/mgetgroups.c: Fix an off-by-one error. When we have no username, we call getgroups with a one-element-shorter buffer, but still told it the length was original, max_n_groups. 2009-12-09 Eric Blake cloexec: relax license * modules/cloexec (Maintainer): Add myself. (License): Use LGPL, not GPL. link-warning: optimize generation * modules/link-warning (Makefile.am): Reduce process usage. 2009-12-09 Bruno Haible * doc/posix-functions/unsetenv.texi: Mention Solaris 10 bug for which a workaround was added on 2009-11-17. 2009-12-09 Jim Meyering Bruno Haible link-warning: Allow extra lines at the top of build-aux/link-warning.h. * modules/link-warning (Makefile.am): Make the comment-removing sed command more robust in the face of bootstrap-prepended comment lines. 2009-12-09 Bruno Haible * lib/mgetgroups.c (mgetgroups): Don't remove duplicates if there is at most one group. 2009-12-09 Simon Josefsson Bruno Haible * build-aux/link-warning.h: Add copyright notice. * modules/link-warning (Makefile.am): Generate link-warning.h from build-aux/link-warning.h. Update LINK_WARNING_H accordingly. * NEWS: Mention change in link-warning module. * modules/arpa_inet (Makefile.am): Add dependency to arpa/inet.h. * modules/dirent (Makefile.am): Add dependency to dirent.h. * modules/fcntl-h (Makefile.am): Add dependency to fcntl.h. * modules/getopt-posix (Makefile.am): Add dependency to getopt.h. * modules/inttypes (Makefile.am): Add dependency to inttypes.h. * modules/math (Makefile.am): Add dependency to math.h. * modules/search (Makefile.am): Add dependency to search.h. * modules/signal (Makefile.am): Add dependency to signal.h. * modules/spawn (Makefile.am): Add dependency to spawn.h. * modules/stdio (Makefile.am): Add dependency to stdio.h. * modules/stdlib (Makefile.am): Add dependency to stdlib.h. * modules/string (Makefile.am): Add dependency to string.h. * modules/strings (Makefile.am): Add dependency to strings.h. * modules/sys_ioctl (Makefile.am): Add dependency to sys/ioctl.h. * modules/sys_select (Makefile.am): Add dependency to sys/select.h. * modules/sys_socket (Makefile.am): Add dependency to sys/socket.h. * modules/sys_stat (Makefile.am): Add dependency to sys/stat.h. * modules/sys_times (Makefile.am): Add dependency to sys/times.h. * modules/sys_utsname (Makefile.am): Add dependency to sys/utsname.h. * modules/sys_wait (Makefile.am): Add dependency to sys/wait.h. * modules/unistd (Makefile.am): Add dependency to unistd.h. * modules/wchar (Makefile.am): Add dependency to wchar.h. 2009-12-09 Bruno Haible fchdir: Optimize away rpl_fstat when possible. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Set REPLACE_FSTAT only together with REPLACE_OPEN_DIRECTORY. * lib/fchdir.c (rpl_fstat): Define only when REPLACE_OPEN_DIRECTORY. 2009-12-09 Bruno Haible * lib/fchdir.c: Update comment. 2009-12-09 Bruno Haible * lib/cloexec.c (set_cloexec_flag): Clarify intent of dup2 call. 2009-12-08 Eric Blake fchdir: avoid memory leak on re-registration. * lib/fchdir.c (ensure_dirs_slot): Avoid memory leak. 2009-12-08 Jim Meyering init.sh: avoid Solaris 10 /bin/sh portability problem Solaris 10's /bin/sh does not pass '.' arguments 2.. to the sourced script: $ printf 'echo "$@"\n' > f; /bin/sh -c '. ./f bar' $ printf 'echo "$@"\n' > f; /bin/bash -c '. ./f bar' bar tests/init.sh relied on that, accepting a --set-path=DIR argument, and two tests used that idiom. * tests/init.sh: Update suggested usage comments. (path_prepend_): New function, to be used in place of the --src-path=DIR option. (setup_): Move PATH-prepending code into path_prepend_. * tests/test-pread.sh: Adapt to new usage. * tests/test-xalloc-die.sh: Likewise. 2009-12-08 Simon Josefsson * doc/gnulib.texi (Glibc pty.h): Add. * doc/glibc-functions/forkpty.texi: Add. * doc/glibc-functions/openpty.texi: Add. Suggested by Bruno Haible. 2009-12-08 Eric Blake fchdir: fix logic bugs * m4/fchdir.m4 (gl_FUNC_FCHDIR): Fix logic bug. * tests/test-fchdir.c (main): Enhance test. * lib/fchdir.c (rpl_fstat): Always provide if fchdir replacement is in use. dup2: fix logic bugs * lib/dup2.c (dup2): Fix logic bugs. Use HAVE_DUP2 rather than REPLACE_DUP2 to decide when rpl_dup2 is needed. * m4/dup2.m4 (gl_REPLACE_DUP2): Only define REPLACE_DUP2 when dup2 exists. (gl_FUNC_DUP2): Drop unneeded AC_DEFINE. 2009-12-07 Eric Blake unlink: fix m4 detection * m4/unlink.m4 (gl_FUNC_UNLINK): Include correct header. unistd-safer: add unit test * modules/unistd-safer-tests: New file. * tests/test-dup-safer.c: Likewise. * tests/test-cloexec.c (setmode): Avoid compiler warning. * tests/test-dup2.c (setmode): Likewise. * lib/cloexec.c (dup_cloexec): Fix mingw compile error. cloexec: preserve text vs. binary across dup_cloexec * lib/cloexec.c (dup_cloexec) [W32]: Query and use translation mode. * modules/dup2-tests (Depends-on): Add binary-io. * modules/cloexec-tests (Depends-on): Likewise. * tests/test-dup2.c (setmode, is_mode): New helpers. (main): Add tests that translation mode is preserved. * tests/test-cloexec.c (setmode, is_mode, main): Likewise. Reported by Bruno Haible. mgetgroups: reduce duplicate listings * lib/mgetgroups.c (mgetgroups): Reduce duplicates from the resulting array. * tests/test-chown.h (test_chown): Simplify client. * tests/test-lchown.h (test_lchown): Likewise. 2009-12-06 Bruno Haible * lib/cloexec.c (dup_cloexec): Fix handling of _gl_register_dup return value. 2009-12-06 Bruno Haible * lib/progname.c: Include stdio.h, stdlib.h. (set_program_name): Reject a NULL argument. 2009-12-05 Eric Blake pipe2-safer: new module * modules/pipe2-safer: New file. * lib/unistd-safer.h (pipe2_safer): New prototype. * lib/unistd--.h (pipe2): New wrapper. * lib/pipe-safer.c (pipe2_safer): New function. * modules/pipe (Depends-on): Add pipe2-safer. * lib/pipe.c (create_pipe) [WIN32]: Let pipe2_safer do the work. stdlib-safer: preserve cloexec flag for mkostemp[s] * lib/mkstemp-safer.c (mkostemp_safer, mkostemps_safer): Use new fd_safer_flag. unistd-safer: allow preservation of cloexec status via flag * lib/unistd-safer.h (dup_safer_flag, fd_safer_flag): New prototypes. * lib/dup-safer.c (dup_safer_flag): New function. * lib/fd-safer.c (fd_safer_flag): Likewise. * modules/cloexec (configure.ac): Set witness. test-dup2: enhance test * modules/dup2-tests (Depends-on): Add cloexec. * tests/test-dup2.c (main): Enhance test. cloexec: add dup_cloexec * lib/cloexec.h (dup_cloexec): New prototype. Add copyright header and comments. * lib/cloexec.c (set_cloexec_flag): Add comments. (dup_cloexec): New function, with mingw implementation borrowed from... * lib/w32spawn.h (dup_noinherit): ...here. * modules/execute (Depends-on): Add cloexec. * modules/pipe (Depends-on): Likewise. * modules/cloexec (Depends-on): Add dup2. * modules/cloexec-tests (Files): New file. * tests/test-cloexec.c: Likewise. test-xalloc-die: fix test for mingw * modules/xalloc-die-tests (Files): Add tests/init.sh. * tests/test-xalloc-die.sh: Rewrite to use init.sh. Strip directory and .exe suffix off argv[0] output. test-fseeko: fix test for mingw * tests/test-fseeko.c (fseek): Redefine GL_LINK_WARNING, rather than undefining fseek, so test will pass on mingw. 2009-12-05 Bruno Haible * lib/progname.h (set_program_name): Clarify specification. * lib/progname.c (set_program_name): Likewise. Reported by Jim Meyering. 2009-12-05 Jim Meyering maint.mk: backslash-escape parens in default regexp * top/maint.mk (news-check-regexp): Now that we're using grep -E, backslash-escape the literal parentheses. maint.mk: news-date-check: use grep -E * top/maint.mk (today): Define a Make variable, not a... (news-date-check): ...shell variable. (news-date-regexp): Use the Make variable. Use grep's -E option. Change the failing diagnostic to mention the variable, $(news-date-regexp). 2009-12-04 Alfred M. Szmidt maintainer-makefile: allow customization of NEWS entry format * top/maint.mk (news-date-regexp): New overridable variable. (news-date-check): Use it. 2009-12-04 Eric Blake mgetgroups: add xgetgroups, and avoid ENOSYS failures * lib/mgetgroups.h (xgetgroups): New prototype. * lib/mgetgroups.c (xgetgroups): New wrapper. (mgetgroups): Handle ENOSYS. * modules/mgetgroups (Depends-on): Add realloc. Reported by Scott Harrison . mgetgroups: avoid argument promotion issues with -1 * lib/mgetgroups.c (mgetgroups): A cast is required when checking for invalid gid_t. * tests/test-chown.h (getegid, test_chown): Likewise. * tests/test-lchown.h (getegid, test_lchown): Likewise. 2009-12-03 Paolo Bonzini exclude: Fix header file problems. * lib/exclude.h: Add multiple inclusion guards and include stdbool.h. 2009-12-01 Jim Meyering fts: fts_open: do not let an empty string cause immediate failure This is required in support of GNU rm, for which the command "rm A '' B" must process and remove both A and B, in spite of the empty string argument. * lib/fts.c (fts_open): Do not let the presence of an empty string cause fts_open to fail immediately. Most fts-using tools must be able to process all arguments, in order, and can be expected to diagnose such arguments themselves. 2009-11-30 Eric Blake utimens: fix compilation error * lib/utimens.c (lutimens) [!HAVE_UTIMENSAT && HAVE_LUTIMES]: Declare variable at right scope. 2009-11-29 Jim Meyering bootstrap: handle perl-5.11's changed --version output * build-aux/bootstrap (get_version): Handle perl separately, since perl-5.11's --version output is different. 2009-11-28 Jim Meyering userspec: depend on the inttostr module, too * modules/userspec (Depends-on): Add inttostr. userspec: disallow an ID that maps to (uid_t)-1 or (gid_t)-1 * lib/userspec.c (parse_with_separator): Do not accept a user ID number of MAXUID when it evaluates to (uid_t) -1. Likewise for group ID. Reported by Matt McCutchen in userspec: reformat to use spaces, not TABs * lib/userspec.c: Expand TABs to spaces. Add Emacs' "indent-tabs-mode: nil" hint. 2009-11-27 Eric Blake getopt-gnu: flush out another BSD bug * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Test for the bug. * tests/test-getopt.c (main): Check POSIXLY_CORRECT first, to flush out BSD bug. * tests/test-getopt.h (test_getopt): End lists with NULL. * tests/test-getopt_long.h (test_getopt_long): Likewise. (test_getopt_long_posix): Enhance test. * modules/getopt-posix-tests (Depends-on): Add stdbool. * doc/glibc-functions/getopt_long.texi (getopt_long): Mention getopt-gnu. * doc/glibc-functions/getopt_long_only.texi (getopt_long_only): Likewise. 2009-11-27 Simon Josefsson * modules/idpriv-droptemp-tests (Notice): Fix text. 2009-11-27 Jim Meyering test-xalloc-die: avoid spurious failure due to libtool argv difference In a libtool-enabled project, this test would fail due to a difference in the emitted program name, e.g., -test-xalloc-die: memory exhausted +/tmp/.../tests/.libs/lt-test-xalloc-die: memory exhausted Use program to avoid that. * modules/xalloc-die-tests (Depends-on): Add progname. * tests/test-xalloc-die.c: Include progname.h". (program_name): Remove decl. (main): Call set_program_name. * tests/test-xalloc-die.sh (compare): Remove unnecessary ${EXE}. 2009-11-26 Richard Jones w32sock: leave win32 error in place. * lib/w32sock.h (set_winsock_errno): Do not call WSASetLastError. 2009-11-26 Eric Blake init.sh: suggest to use skip_ and fail_ functions in comments * tests/init.sh: Add a sentence. 2009-11-25 Bruno Haible init.sh: add documentation in comments * tests/init.sh: Add some developer and user documentation. 2009-11-26 Jim Meyering init.sh: accommodate even those who specify bogus srcdir manually * tests/init.sh: Normally, srcdir is guaranteed by automake and configure-time tests to be sanitized, so that there is no need to use "$srcdir" in Makefile rules and shell scripts. Using $srcdir (with no double quotes) suffices. However, since tests may be invoked manually, and since you may explicitly set srcdir to the name of a directory containing spaces, do quote its uses here. * tests/test-pread.sh: Likewise. Suggested by Bruno Haible. test-pread.sh: avoid diagnostics for those who ignore SIGPIPE * tests/test-pread.sh: Write no data into the pipe, because test-pread actually reads none. This avoids a diagnostic, "bash: echo: write error: Broken pipe", that arises in the unusual event something is ignoring SIGPIPE, and might be interpreted as some sort of failure. Reported by Bruno Haible. 2009-11-25 Jim Meyering test-pread: cover failure with ESPIPE and EINVAL * tests/test-pread.c (main): Test for failure, too. * tests/test-pread.sh: Invoke with stdin on a pipe. Suggested by Eric Blake. pread: improvement and fix * modules/pread (Depends-on): Depend on lseek, for portability to e.g., mingw. Suggested by Eric Blake. * lib/pread.c (__libc_read): Define. Reported by Richard W.M. Jones. unistd.in.h: correct declaration of pread * lib/unistd.in.h: Correct type of "buf" parameter: void*, not char* Reported by Richard W.M. Jones. test-pread.sh: distribute the test script * modules/pread-tests (Files): Include test-pread.sh. test-pread.sh: clean up * tests/test-pread.sh: Don't refer to $builddir. Just use equivalent ".". * modules/pread-tests (TESTS_ENVIRONMENT): Don't export builddir. That is unnecessary, since it's always ".". Suggestion from Eric Blake. test-pread.sh: make executable * tests/test-pread.sh: Set executable bit. Reported by Eric Blake. correct typo in test-pread.sh * tests/test-pread.sh: Add #! line. test pread * tests/test-pread.c: New file. * tests/test-pread.sh: Likewise. * modules/pread-tests: Likewise. pread: new module * modules/pread: New file. * lib/unistd.in.h (pread): Define/declare. * lib/pread.c (pread): New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Define defaults. * modules/unistd (Makefile.am): Substitute witnesses. * doc/posix-functions/pread.texi (pread): Update. * MODULES.html.sh: Add pread. 2009-11-25 Jim Meyering tests/init.sh: new file to be used via most *.sh tests * tests/init.sh: New file. 2009-11-25 Eric Blake utimens: work around older Linux failure with symlinks * lib/utimens.c (lutimensat_works_really): New variable. (fdutimens, lutimens): Use it to manage kernels that support nanosecond times on files, but not on symlinks. Reported by Ondřej Vašík. utimes: fix configure grammar * m4/utimes.m4 (gl_FUNC_UTIMES): Delete spurious word. 2009-11-25 Paolo Bonzini regex: Fix fastmap for multibyte character ranges. * lib/regcomp.c (re_compute_fastmap_iter): Add all multibyte lead characters when a multibyte character range is included. 2009-11-22 Andy Wingo version-etc: work also with AM_INIT_AUTOMAKE's no-define option * lib/version-etc.c [!defined PACKAGE]: Define to PACKAGE_TARNAME. 2009-11-24 Bruno Haible doc: Most *_l functions exist in MacOS X 10.5. * doc/posix-functions/duplocale.texi: Update platforms list. * doc/posix-functions/freelocale.texi: Likewise. * doc/posix-functions/newlocale.texi: Likewise. * doc/posix-functions/uselocale.texi: Likewise. * doc/posix-functions/isalnum_l.texi: Likewise. * doc/posix-functions/isalpha_l.texi: Likewise. * doc/posix-functions/isblank_l.texi: Likewise. * doc/posix-functions/iscntrl_l.texi: Likewise. * doc/posix-functions/isdigit_l.texi: Likewise. * doc/posix-functions/isgraph_l.texi: Likewise. * doc/posix-functions/islower_l.texi: Likewise. * doc/posix-functions/isprint_l.texi: Likewise. * doc/posix-functions/ispunct_l.texi: Likewise. * doc/posix-functions/isspace_l.texi: Likewise. * doc/posix-functions/isupper_l.texi: Likewise. * doc/posix-functions/iswalnum_l.texi: Likewise. * doc/posix-functions/iswalpha_l.texi: Likewise. * doc/posix-functions/iswblank_l.texi: Likewise. * doc/posix-functions/iswcntrl_l.texi: Likewise. * doc/posix-functions/iswctype_l.texi: Likewise. * doc/posix-functions/iswdigit_l.texi: Likewise. * doc/posix-functions/iswgraph_l.texi: Likewise. * doc/posix-functions/iswlower_l.texi: Likewise. * doc/posix-functions/iswprint_l.texi: Likewise. * doc/posix-functions/iswpunct_l.texi: Likewise. * doc/posix-functions/iswspace_l.texi: Likewise. * doc/posix-functions/iswupper_l.texi: Likewise. * doc/posix-functions/iswxdigit_l.texi: Likewise. * doc/posix-functions/isxdigit_l.texi: Likewise. * doc/posix-functions/nl_langinfo_l.texi: Likewise. * doc/posix-functions/strcasecmp_l.texi: Likewise. * doc/posix-functions/strcoll_l.texi: Likewise. * doc/posix-functions/strfmon_l.texi: Likewise. * doc/posix-functions/strftime_l.texi: Likewise. * doc/posix-functions/strncasecmp_l.texi: Likewise. * doc/posix-functions/strxfrm_l.texi: Likewise. * doc/posix-functions/tolower_l.texi: Likewise. * doc/posix-functions/toupper_l.texi: Likewise. * doc/posix-functions/towctrans_l.texi: Likewise. * doc/posix-functions/towlower_l.texi: Likewise. * doc/posix-functions/towupper_l.texi: Likewise. * doc/posix-functions/wcscoll_l.texi: Likewise. * doc/posix-functions/wcsxfrm_l.texi: Likewise. * doc/posix-functions/wctrans_l.texi: Likewise. * doc/posix-functions/wctype_l.texi: Likewise. * doc/glibc-functions/strptime_l.texi: Likewise. * doc/glibc-functions/strtod_l.texi: Likewise. * doc/glibc-functions/strtof_l.texi: Likewise. * doc/glibc-functions/strtol_l.texi: Likewise. * doc/glibc-functions/strtold_l.texi: Likewise. * doc/glibc-functions/strtoll_l.texi: Likewise. * doc/glibc-functions/strtoul_l.texi: Likewise. * doc/glibc-functions/strtoull_l.texi: Likewise. * doc/glibc-functions/wcsftime_l.texi: Likewise. * doc/glibc-functions/wcstod_l.texi: Likewise. * doc/glibc-functions/wcstof_l.texi: Likewise. * doc/glibc-functions/wcstol_l.texi: Likewise. * doc/glibc-functions/wcstold_l.texi: Likewise. * doc/glibc-functions/wcstoll_l.texi: Likewise. * doc/glibc-functions/wcstoul_l.texi: Likewise. * doc/glibc-functions/wcstoull_l.texi: Likewise. 2009-11-24 Bruno Haible duplocale: Fix logic bug. * lib/duplocale.c: Don't include . (_NL_LOCALE_NAME): Remove macro. (rpl_duplocale): Use setlocale instead of nl_langinfo. * tests/test-duplocale.c (main): Also test duplocale after uselocale. 2009-11-23 Jim Meyering test-update-copyright: don't hard-code /usr/bin/perl * tests/test-update-copyright.sh (YEAR): Use date +%Y, rather than perl to print the current year. Gilles Espinasse reported that the replaced use of perl was hard-coded as /usr/bin/perl. 2009-11-23 Bruno Haible duplocale: Add support for glibc 2.3.x. * lib/duplocale.c (rpl_duplocale): Add fallback code for glibc 2.3.x. 2009-11-22 Bruno Haible vasnprintf: Tiny optimization. * lib/vasnprintf.c (decimal_point_char): Choose the fast path also on MacOS X. 2009-11-22 Bruno Haible Tests for module 'duplocale'. * modules/duplocale-tests: New file. * tests/test-duplocale.c: New file. New module 'duplocale'. * m4/duplocale.m4: New file. * lib/locale.in.h (duplocale): New declaration. * lib/duplocale.c: New file. * m4/locale_h.m4 (gl_REPLACE_LOCALE_H, gl_LOCALE_MODULE_INDICATOR, gl_LOCALE_H_DEFAULTS): New macros. (gl_LOCALE_H): Require gl_LOCALE_H_DEFAULTS. Invoke gl_CHECK_NEXT_HEADERS unconditionally. Invoke gl_REPLACE_LOCALE_H. * modules/locale (Makefile.am): Substitute also GNULIB_DUPLOCALE, REPLACE_DUPLOCALE. * modules/duplocale: New file. * doc/posix-functions/duplocale.texi: Mention the glibc bug. 2009-11-22 Bruno Haible * modules/locale-tests (configure.ac): Test for newlocale function. * tests/test-locale.c: When the system has extended locale functions, verify that defines locale_t and LC_GLOBAL_LOCALE. locale: Make locale_t available when possible. * lib/locale.in.h: Include when it exists. * m4/locale_h.m4 (gl_LOCALE_H): Check for and arrange to replace if it does not define locale_t but does. * modules/locale (Depends-on): Add extensions. (Makefile.am): Also substitute HAVE_XLOCALE_H. * doc/posix-headers/locale.texi: Document the problem with locale_t. 2009-11-22 Bruno Haible Add comments. * m4/dirent_h.m4 (gl_DIRENT_H): Add comment about gl_CHECK_NEXT_HEADERS invocation. * m4/iconv_h.m4 (gl_ICONV_H): Likewise. * m4/spawn_h.m4 (gl_SPAWN_H): Likewise. * m4/wchar.m4 (gl_WCHAR_H): Likewise. 2009-11-22 Bruno Haible error: account for the possibility of freopen (stdout). * lib/error.c: Include . (flush_stdout): New function, extracted from error and error_at_line. Determine stdout's fd dynamically. (error, error_at_line): Invoke flush_stdout. * m4/error.m4 (gl_PREREQ_ERROR): Require AC_C_INLINE. * modules/error (Depends-on): Add unistd. 2009-11-22 Bruno Haible diffseq: Add comment. * lib/diffseq.h (IF_LINT): Add comment about pitfall. 2009-11-22 Jim Meyering c-stack: avoid defining an unused static function * lib/c-stack.c (find_stack_direction): Do not define this function when it will not be used. diffseq: avoid spurious gcc warnings * lib/diffseq.h (IF_LINT2): Define. (compareseq): Use it to initialize two members of "part". This avoids two used-uninitialized warnings. 2009-11-21 Jim Meyering c-stack: avoid "ignoring return value of `write'" warning * lib/c-stack.c: Include "ignore-value.h". (die): Explicitly ignore each write return value. * modules/c-stack (Depends-on): Add ignore-value. 2009-11-21 Bruno Haible diffseq: reduce scope of variable 'best'. * lib/diffseq.h (diag) [USE_HEURISTIC]: Reduce scope of 'best' variable, earlier used for two different purposes. 2009-11-21 Jim Meyering diffseq: remove useless assignment to "best" * lib/diffseq.h (diag) [USE_HEURISTIC]: Remove useless "best = 0" assignment. At that point "best" is already guaranteed to be zero. 2009-11-20 Eric Blake build: mention ftp redirector in release announcements * top/maint.mk (gnu_rel_host, url_dir_list): Provide defaults for values that used to come from cfg.mk; mention FTP redirect URL. * build-aux/announce-gen: Mention the mirror list. Suggested by Karl Berry. nanosleep: improve port to mingw * lib/nanosleep.c (rpl_nanosleep): Reject invalid arguments. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Incorporate LIBSOCKET into LIB_NANOSLEEP, but only when needed. * modules/select (Link): Document LIBSOCKET. * m4/select.m4 (gl_FUNC_SELECT): Ensure LIBSOCKET is defined early enough. nanosleep: work around cygwin bug * lib/nanosleep.c (rpl_nanosleep) [HAVE_BUG_BIG_NANOSLEEP]: Fix logic bug when nanosleep fails. Work around cygwin 1.5.x bug. (getnow): Delete, not needed. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): No longer require LIB_CLOCK_GETTIME. * modules/nanosleep (Depends-on): Add intprops and verify. Drop clock-time, gettime. * doc/posix-functions/nanosleep.texi (nanosleep): Document the bug. * modules/nanosleep-tests: New test. * tests/test-nanosleep.c: New file. sleep: work around cygwin bug * lib/sleep.c (rpl_sleep): Work around the bug. * m4/sleep.m4 (gl_FUNC_SLEEP): Detect the bug. (gl_PREREQ_SLEEP): Delete unused macro. * modules/sleep (Depends-on): Add verify. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add default. * modules/unistd (Makefile.am): Substitute witness. * lib/unistd.in.h (sleep): Update prototype. * doc/posix-functions/sleep.texi (sleep): Document the bug. * tests/test-sleep.c (main) [HAVE_DECL_ALARM]: Test it. * modules/sleep-tests (Depends-on): Check for alarm. 2009-11-20 Jim Meyering maint.mk: improve sc_prohibit_magic_number_exit * top/maint.mk (sc_prohibit_magic_number_exit): Tighten regexp so it does not match uses like System.exit(1). Add comments showing how to correct all offenders. 2009-11-19 Eric Blake xalloc-die-tests: add missing library * modules/xalloc-die-tests (Makefile.am): Add LDADD line. test-xvasprintf: silence compiler warnings * tests/test-xvasprintf.c (test_xvasprintf, test_xasprintf): Mask empty string from gcc. 2009-11-19 Jim Meyering xfreopen: new module, from coreutils * modules/xfreopen: New module. * lib/xfreopen.c: New file. * lib/xfreopen.h: New file. * MODULES.html.sh (File stream based Input/Output"): Add it. 2009-11-19 Eric Blake manywarnings: depend on warnings * modules/manywarnings (Depends-on): Add warnings. build: avoid compiler warnings * lib/select.c (rpl_select): Delete unused variable. * lib/setsockopt.c (rpl_setsockopt): Avoid incompatible pointer. 2009-11-18 Eric Blake tests: avoid false negative with --with-packager * tests/test-version-etc.sh: Discard packager information. * tests/test-argp-version-etc-1.sh: Likewise. Reported by Mike Frysinger. utimens: fix regression on Solaris * m4/utimens.m4 (gl_UTIMENS): Check for BSD bug. * lib/utimens.c (fdutimens): Revert 2009-11-08 change; Solaris 10 can only change fd timestamps via futimesat. Instead, use an additional witness macro to avoid BSD bug. Reported by Jim Meyering. 2009-11-17 Eric Blake usleep: use it to simplify tests * modules/stat-time-tests (Depends-on): Add usleep. (configure.ac): Drop usleep check. * modules/chown-tests (Depends-on, configure.ac): Likewise. * modules/lchown-tests (Depends-on, configure.ac): Likewise. * modules/fdutimensat-tests (Depends-on, configure.ac): Likewise. * modules/futimens-tests (Depends-on, configure.ac): Likewise. * modules/openat-tests (Depends-on, configure.ac): Likewise. * modules/utimens-tests (Depends-on, configure.ac): Likewise. * modules/utimensat-tests (Depends-on, configure.ac): Likewise. * modules/pipe-filter-gi-tests (Depends-on, configure.ac): Likewise. * tests/test-chown.h (nap): Rely on nicer usleep semantics. * tests/test-lchown.h (nap): Likewise. * tests/test-pipe-filter-gi2-main.c (small_nap): Likewise. * tests/test-stat-time.c (nap): Likewise. * tests/test-utimens-common.h (nap): Update comments. usleep: new module * modules/usleep: New file. * m4/usleep.m4 (gl_FUNC_USLEEP): Likewise. * lib/usleep.c (usleep): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add defaults. * modules/unistd (Makefile.am): Substitute witnesses. * lib/unistd.in.h (usleep): Add declaration. * doc/pastposix-functions/usleep.texi (usleep): Document this. * MODULES.html.sh (Date and time): Likewise. * modules/usleep-tests (Depends-on): New test. * tests/test-usleep.c: New file. chown: work around OpenBSD bug * lib/chown.c (rpl_chown): Work around the bug. * lib/lchown.c (rpl_lchown): Attempt to do likewise. * m4/chown.m4 (gl_FUNC_CHOWN): Test for ctime bug. * m4/lchown.m4 (gl_FUNC_LCHOWN): Check for lchmod. * modules/chown (Depends-on): Add stdbool. * modules/lchown (Depends-on): Likewise. * doc/posix-functions/chown.texi (chown): Document the bug. * doc/posix-functions/lchown.texi (lchown): Likewise. * tests/test-lchown.h (test_chown): Relax test. mkstemp: avoid conflict with C++ keyword template * lib/mkdtemp.c (mkdtemp): Change spelling of template. * lib/mkostemp.c (mkostemp): Likewise. * lib/mkostemps.c (mkostemps): Likewise. * lib/mkstemp.c (mkstemp): Likewise. * lib/mkstemps.c (mkstemps): Likewise. xalloc-die-tests: optimize * tests/test-xalloc-die.sh: Reduce number of processes. 2009-11-17 Simon Josefsson * gnulib-tool: Support LGPLv3+ licenses in module files. Tiny patch from ludo@gnu.org (Ludovic Courtès). 2009-11-17 Jim Meyering version-etc: use proper license string * modules/version-etc (License): Use LGPL, not LGPLv3+. * modules/version-etc-fsf: Likewise. 2009-11-17 Simon Josefsson * tests/test-xalloc-die.sh: Add license. Check that nothing is printed to stdout. Deal with EOL differences. 2009-11-17 Eric Blake unsetenv: work around Solaris bug * m4/setenv.m4 (gl_FUNC_UNSETENV): Check for bug. * lib/unsetenv.c (rpl_unsetenv): Work around it. Reported by Jim Meyering. vasnprintf: avoid compiler warnings * lib/vasnprintf.c (VASNPRINTF): Avoid shadowing our own local variables. * lib/printf-args.c (PRINTF_FETCHARGS): Avoid type mismatch. 2009-11-17 Simon Josefsson * modules/xalloc-die-tests (Makefile.am): Drop XFAIL_TESTS settings since xalloc-die is no longer the self test, xalloc-die.sh is. 2009-11-17 Jim Meyering test-xalloc-die.sh: make the code agree with the commit log * tests/test-xalloc-die.sh: Put "." at the front of $PATH, not at the end, just in case you happen to have a test-xalloc-die program in some other PATH directory. test-xalloc-die.sh: fix a portability bug * tests/test-xalloc-die.sh: Do not invoke via ./test-xalloc-die. Instead, set PATH to start with "." and invoke via "test-xalloc-die". Otherwise, argv[0] (as often seen in diagnostics) would be too system-dependent, sometimes with, and sometimes without the leading "./". version-etc-fsf: relax license to LGPLv3+ * modules/version-etc-fsf (License): Relax license. 2009-11-16 Eric Blake xalloc-die-tests: avoid printing null pointer * modules/xalloc-die-tests (Files, Makefile.am): Wrap execution in shell script. * tests/test-xalloc-die.c (program_name): Declare. * tests/test-xalloc-die.sh (tmpfiles): New file. setenv, unsetenv: work around various bugs * lib/setenv.c (setenv) [!HAVE_SETENV]: Resync from glibc. (setenv) [HAVE_SETENV]: Work around bugs. * lib/unsetenv.c (unsetenv) [HAVE_UNSETENV]: Work around bugs. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE, gl_FUNC_UNSETENV): Check for bugs. (gl_FUNC_SETENV): Write in terms of gl_FUNC_SETENV_SEPARATE. * m4/environ.m4 (gl_ENVIRON): Avoid expand-before-require. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Update defaults. * modules/stdlib (Makefile.am): Update substitutions. * lib/stdlib.in.h (setenv, unsetenv): Update prototypes. * doc/posix-functions/setenv.texi (setenv): Document the bugs. * doc/posix-functions/unsetenv.texi (unsetenv): Likewise. * modules/setenv-tests: New test. * modules/unsetenv-tests: Likewise. * tests/test-setenv.c: New file. * tests/test-unsetenv.c: Likewise. 2009-11-16 Jim Meyering version-etc: relax license to LGPLv3+ * modules/version-etc (License): Relax license. better AC_REQUIRE expanded-before-required-warning avoidance * m4/chown.m4 (gl_FUNC_CHOWN, gl_FUNC_CHOWN_FOLLOWS_SYMLINK): Define with AC_DEFUN_ONCE, rather than AC_DEFUN, to avoid AC_REQUIRE warnings. Suggested by Eric Blake. This change also reverts commit 1b712ba8, which is no longer needed. 2009-11-16 Eric Blake test-freading: clean up temporary file * tests/test-freading.c (main): Remove file on success, and use ASSERT more liberally. Reported by Jim Meyering. 2009-11-16 Jim Meyering avoid new AC_REQUIRE expanded-before-required warnings * modules/chown (configure.ac): Require gl_FUNC_CHOWN, rather than merely using it. * modules/euidaccess (configure.ac): Likewise for gl_FUNC_EUIDACCESS. * modules/faccessat (configure.ac): Likewise for gl_FUNC_FACCESSAT. 2009-11-15 Simon Josefsson * tests/test-xalloc-die.c: New file. * modules/xalloc-die-tests: New file. * gnulib-tool (func_emit_tests_Makefile_am): Also initialize XFAIL_TESTS so it can be appended by modules. 2009-11-15 Simon Josefsson * lib/gc-pbkdf2-sha1.c: Remove comments from RFC 2898. Reported by Vladimir 'phcoder' Serbinenko . 2009-11-14 Eric Blake fnmatch: avoid compiler warning * lib/fnmatch_loop.c (NEW_PATTERN): Coerce addition to unsigned, to silence compiler warning about mismatch signedness in ?:. Reported by Robert Millan. intprops: add double-inclusion guard * lib/intprops.h: Allow idempotent includes. Suggested by Bruce Korb. openat: detect Solaris fchownat bug * lib/fchownat.c (rpl_fchownat): Work around Solaris bug. Avoid penalizing glibc chownat when only lchownat is broken. * m4/openat.m4 (gl_FUNC_FCHOWNAT): Replace fchownat if there are trailing slash bugs. * doc/posix-functions/fchownat.texi (fchownat): Document the bug. * modules/openat-tests (Files): Include more files. (Depends-on): Add mgetgroups, sleep, stat-time. (configure.ac): Add additional checks. (Makefile.am): Build new test. * tests/test-fchownat.c: New file. lchown: detect Solaris and FreeBSD bug * lib/lchown.c (rpl_lchown): Work around bug. * m4/lchown.m4 (gl_FUNC_LCHOWN): Check for trailing slash bugs. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Populate it. * lib/unistd.in.h (lchown): Update declaration. * doc/posix-functions/lchown.texi (lchown): Document the bug. * modules/lchown-tests: New file. * tests/test-lchown.h (test_lchown): Likewise. * tests/test-lchown.c (main): Likewise. chown: detect Solaris and FreeBSD bug * lib/chown.c (rpl_chown): Work around bug. * m4/chown.m4 (gl_FUNC_CHOWN): Check for trailing slash bugs. (gl_PREREQ_CHOWN): Delete. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Populate it. * lib/unistd.in.h (chown): Update declaration. * lib/lchown.c (chown): Update client. * modules/lchown (Depends-on): Add lstat. * doc/posix-functions/chown.texi (chown): Document the bug. * doc/posix-functions/getgroups.texi (getgroups): Document getgroups pitfall. * modules/chown-tests: New file. * tests/test-chown.h (test_chown): Likewise. * tests/test-chown.c (main): Likewise. 2009-11-14 Robert Millan (tiny change) gnulib-tool: correctly detect absence of m4 directories * gnulib-tool: Avoid extra newline on data passed to wc -l. 2009-11-14 Jim Meyering maint.mk: Prohibit inclusion of "xalloc.h" without use. * top/maint.mk (sc_prohibit_close_stream_without_use): New rule. 2009-11-14 John W. Eaton strftime.h: wrap function declaration in extern "C" block * lib/strftime.h (nstrftime) [__cplusplus]: Wrap declaration. 2009-11-13 Eric Blake getgroups: avoid compiler warning * lib/getgroups.c (rpl_getgroups): Delete shadowed variable. getgroups: work around FreeBSD bug * lib/getgroups.c (rpl_getgroups): Work around the bug. * m4/getgroups.m4 (gl_FUNC_GETGROUPS): Detect the bug. * doc/posix-functions/getgroups.texi (getgroups): Document it. * tests/test-getgroups.c (main): Fix buffer overrun. getgroups: avoid compilation failure * lib/getgroups.c (includes): Include for SIZE_MAX. * modules/getgroups (Depends-on): Add stdint. 2009-11-13 Jim Meyering test-getgroups: avoid compilation failure * tests/test-getgroups.c: Include for use of SIZE_MAX. 2009-11-13 Eric Blake mgetgroups: new module, taken from coreutils * modules/mgetgroups: New file. * lib/mgetgroups.h: Likewise. * lib/mgetgroups.c (mgetgroups): Likewise. * m4/mgetgroups.m4 (gl_MGETGROUPS): Likewise. * MODULES.html.sh (Users and groups): Mention it. getgroups: don't expose GETGROUPS_T to user * lib/getgroups.c (rpl_getgroups): Change signature. Copy array an element at a time if GETGROUPS_T is wrong size. * lib/getugroups.h (getugroups): Change signature. * lib/unistd.in.h (getgroups): Likewise. * m4/getgroups.m4 (gl_FUNC_GETGROUPS): Use replacement if signature needs fixing. * m4/getugroups.m4 (gl_GETUGROUPS): No longer need AC_TYPE_GETGROUPS. * modules/group-member (Depends-on): Add getgroups. * lib/group-member.c (group_info, get_group_info): Use gid_t. (group_member): Rely on getgroups replacement. * lib/getugroups.c (getugroups): Use gid_t. * tests/test-getgroups.c (main): Likewise. * NEWS: Mention the signature change. * doc/posix-functions/getgroups.texi (getgroups): Mention the problem with signature. * doc/glibc-functions/setgroups.texi (setgroups): Mention that GETGROUPS_T is still useful for setgroups. getgroups, getugroups: provide stubs for mingw * lib/getgroups.c (getgroups): Provide ENOSYS stub for mingw. * lib/getugroups.c (getugroups): Likewise. * m4/getgroups.m4 (gl_FUNC_GETGROUPS): Check for missing function. Modernize replacement scheme. (gl_PREREQ_GETGROUPS): Delete. * m4/getugroups.m4 (gl_GETUGROUPS): Check for . * modules/getgroups (configure.ac): Declare witness. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add default. * modules/unistd (Depends-on): Substitute witness. * lib/unistd.in.h (getgroups): Declare replacement. getgroups: avoid calling exit * modules/getgroups (Depends-on): Add malloc-posix and unistd, drop xalloc. * modules/getgroups-tests (Depends-on, Makefile.am): Drop unneeded dependencies. * lib/getgroups.c (rpl_getgroups): Fail with ENOMEM rather than exiting, in the rare case of malloc failure. getgroups: fix logic error * lib/getgroups.c (rpl_getgroups): Don't fail if current process has more than 20 groups. * modules/getgroups-tests: New test. * tests/test-getgroups.c: New file. 2009-11-13 Simon Josefsson * tests/test-base64.c: Improve. 2009-11-13 Simon Josefsson * tests/test-xvasprintf.c: Fix memory leak, suggested by Eric Blake . 2009-11-13 Simon Josefsson * tests/test-xvasprintf.c: Add %s%s related checks. 2009-11-12 Eric Blake version-etc: match standards.texi style * lib/version-etc.c (emit_bug_reporting_address): Drop periods, and use <> only for URLs. 2009-11-10 Kamil Dudka fts: do not fail on a submount during traversal * lib/fts.c (fts_build): Read the stat info again after opening a directory if the FTS_TIGHT_CYCLE_CHECK flag is set. Original report at http://bugzilla.redhat.com/501848. 2009-11-12 Jim Meyering bootstrap: sync from coreutils * build-aux/bootstrap (bootstrap_epilogue): New function. Use git_modules_config in one more place. This make bootstrap's --gnulib-srcdir option more useful for testing. bootstrap: generalize autoheader check * build-aux/bootstrap: Look for AC_CONFIG_HEADER as well as AC_CONFIG_HEADERS. 2009-11-11 Eric Blake mkfifoat: use new modules for Solaris and BSD bugs * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Simplify. * lib/mkfifoat.c (mknodat): Split... * lib/mknodat.c (mknodat): ...into new file. * modules/mkfifoat (Files): Ship new file. (Depends-on): Add mkfifo, mknod. * modules/mkfifoat-tests (Files): Reuse mkfifo tests. (Depends-on): Add symlink. * tests/test-mkfifoat.c (main): Enhance test. Drop portions now redundant with test_mkfifo.h. (do_mkfifoat, do_mknodat): New helpers. mknod: new module * modules/mknod: New file. * m4/mknod.m4 (gl_FUNC_MKNOD): Likewise. * lib/mknod.c (mknod): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Set witness defaults. * modules/sys_stat (Makefile.am): Substitute them. * lib/sys_stat.in.h (mknod): Declare replacement. * MODULES.html.sh (Support for systems lacking POSIX:2008): Document it. * doc/posix-functions/mknod.texi (mknod): Likewise. * modules/mknod-tests: New test. * tests/test-mknod.c: Likewise. mkfifo: new module * modules/mkfifo: New file. * m4/mkfifo.m4 (gl_FUNC_MKFIFO): Likewise. * lib/mkfifo.c (mkfifo): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Set witness defaults. * modules/sys_stat (Makefile.am): Substitute them. * lib/sys_stat.in.h (mkfifo): Declare replacement. * MODULES.html.sh (Support for systems lacking POSIX:2008): Document it. * doc/posix-functions/mkfifo.texi (mkfifo): Likewise. * modules/mkfifo-tests: New test. * tests/test-mkfifo.h (test_mkfifo): New file, borrowed in part from test-mkfifoat.c. * tests/test-mkfifo.c: New file. readlink: detect FreeBSD bug * m4/readlink.m4 (gl_FUNC_READLINK): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/readlink.texi (readlink): Document the bug. * tests/test-readlink.h (test_readlink): Enhance test. symlink: detect FreeBSD bug * m4/symlink.m4 (gl_FUNC_SYMLINK): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/symlink.texi (symlink): Document the bug. * tests/test-symlink.h (test_symlink): Enhance test. 2009-11-10 Eric Blake link: detect FreeBSD bug * m4/link.m4 (gl_FUNC_LINK): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/link.texi (link): Document the bug. * tests/test-link.h (test_link): Enhance test. * tests/test-linkat.c (main): Update caller. unlink, remove: detect FreeBSD bug * m4/unlink.m4 (gl_FUNC_UNLINK): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/unlink.texi (unlink): Document the bug. * doc/posix-functions/remove.texi (remove): Likewise. * tests/test-unlink.h (test_unlink): Enhance test. * tests/test-remove.c (main): Likewise. 2009-11-09 Eric Blake rename: detect FreeBSD bug * m4/rename.m4 (gl_FUNC_RENAME): Also detect FreeBSD bug with slash on symlink. * modules/renameat-tests (Depends-on): Add filenamecat. * tests/test-rename.h (test_rename): Allow one more errno. * tests/test-renameat.c (main): Likewise. * doc/posix-functions/rename.texi (rename): Document the bug. open: detect FreeBSD bug * m4/open.m4 (gl_FUNC_OPEN): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/open.texi (open): Document the bug. * doc/posix-functions/utimes.texi (utimes): Likewise. * tests/test-open.h (test_open): Add parameters, and test symlink handling. * tests/test-open.c (main): Adjust caller. * tests/test-fcntl-safer.c (main): Likewise. * modules/open-tests (Depends-on): Add stdbool, symlink. * modules/fcntl-safer-tests (Depends-on): Likewise. * tests/test-openat.c (main): Add test-open tests. stat: detect FreeBSD bug * m4/stat.m4 (gl_FUNC_STAT): Also detect FreeBSD bug with slash on symlink. * doc/posix-functions/stat.texi (stat): Document the bug. * tests/test-stat.h (test_stat_func): Add argument. * tests/test-stat.c (main): Adjust caller. * tests/test-fstatat.c (main): Likewise. * modules/stat-tests (Depends-on): Add stdbool, symlink. Reported by Jim Meyering. 2009-11-09 James Youngman strftime.c: include ignore-value.h only when FPRINTFTIME is defined * lib/strftime.c: Correct placement of #include "ignore-value.h". 2009-11-08 Jim Meyering utimens: remove invalid futimesat call * lib/utimens.c (fdutimens): Remove invalid futimesat call. It used the file descriptor of the target file as the DIR_FD parameter and NULL as the file name. That caused failure with errno == EFAULT on FreeBSD-8.0-rc2 2009-11-07 Eric Blake fflush, freadseek: use fseeko, not fseek * lib/fflush.c (clear_ungetc_buffer_preserving_position) (clear_ungetc_buffer): Avoid potential problems on large files. * lib/freadseek.c (freadseek): Likewise. * modules/freadseek (Depends-on): Add fseeko. * modules/fseek (configure.ac): Set a witness. * tests/test-fflush.c (main): Use fseeko. * tests/test-fpurge.c (fseek): Disable link warning. * tests/test-freadable.c (fseek): Likewise. * tests/test-freading.c (fseek): Likewise. * tests/test-fseeko.c (fseek): Likewise. * tests/test-ftell.c (fseek): Likewise. * tests/test-ftello.c (fseek): Likewise. * tests/test-fwritable.c (fseek): Likewise. * tests/test-fwriting.c (fseek): Likewise. 2009-11-06 Simon Josefsson * modules/memchr (Depends-on): Drop getpagesize dependency. 2009-11-06 Simon Josefsson * build-aux/pmccabe2html: Disable execute bit. Suggested by Reported by Ludovic Courtès. * build-aux/pmccabe2html: Improve example usage. * build-aux/pmccabe2html: Drop #! header. Doc fix. 2009-11-06 Jim Meyering do-release-commit-and-tag: New module. Automate the release-commit and tag process. * build-aux/do-release-commit-and-tag: New script, from coreutils. * modules/do-release-commit-and-tag: New file. * MODULES.html.sh (Support for maintaining and releasing): Add it. 2009-11-06 Simon Josefsson * modules/select-tests (test_select_LDADD): Add $(INET_PTON_LIB) because test-select.c uses inet_pton. 2009-11-06 Simon Josefsson * m4/getaddrinfo.m4: Add content of INET_NTOP_LIB to GETADDRINFO_LIB. Bump serial number. * modules/getaddrinfo (Link): Only mention GETADDRINFO_LIB again. Suggested by Eric Blake . 2009-11-05 Eric Blake strtod: detect darwin bug * m4/strtod.m4 (gl_FUNC_STRTOD): Filter out darwin bug on "nan(". Reported by Leo Davis. freopen-safer: new module * modules/freopen-safer: New module. * m4/stdio-safer.m4 (gl_FREOPEN_SAFER): New macro. * lib/freopen-safer.c (freopen_safer): New file. * lib/stdio-safer.h (freopen_safer): New declaration. * lib/stdio--.h (freopen): New override. * MODULES.html.sh (File stream based Input/Output): Mention it. * doc/posix-functions/freopen.texi (freopen): Mention pitfalls and freopen-safer module. * doc/posix-functions/stderr.texi (stderr): Likewise. * doc/posix-functions/stdin.texi (stdin): Likewise. * doc/posix-functions/stdout.texi (stdout): Likewise. * modules/freopen-safer-tests: New test. * tests/test-reopen-safer.c: New file. 2009-11-05 Jim Meyering maint.mk: Prohibit inclusion of "close-stream.h" without use. * top/maint.mk (sc_prohibit_close_stream_without_use): New rule. 2009-11-05 Simon Josefsson * modules/pmccabe2html (configure.ac): Check for pmccabe tool. 2009-11-05 Simon Josefsson * modules/getaddrinfo (Link): Add $(INET_NTOP_LIB). 2009-11-05 Simon Josefsson Fix link error. * m4/inet_ntop.m4 (gl_INET_NTOP): Fix test of AC_SEARCH_LIBS result. * m4/inet_pton.m4 (gl_INET_PTON): Likewise. 2009-11-05 Simon Josefsson * tests/test-func.c: Also test value of __func__. 2009-11-05 Simon Josefsson * tests/test-sys_socket.c: Use smaller constant value, sa_family_t may be an 8-bit type. Reported by Bruno Haible . 2009-11-05 Bruno Haible Fix link error. * m4/inet_ntop.m4 (gl_INET_NTOP): Fix test of AC_SEARCH_LIBS result. * m4/inet_pton.m4 (gl_INET_PTON): Likewise. Reported by Brad Hards via Simon Josefsson. 2009-11-05 Bruno Haible Tests for module 'inet_pton'. * modules/inet_pton-tests: New file. * tests/test-inet_pton.c: New file. 2009-11-05 Bruno Haible Tests for module 'inet_ntop'. * modules/inet_ntop-tests: New file. * tests/test-inet_ntop.c: New file. 2009-11-04 Eric Blake stdlib-safer: wrap all mkstemp variants * modules/mkostemp (configure.ac): Set witness. * modules/mkostemps (configure.ac): Likewise. * modules/mkstemps (configure.ac): Likewise. * lib/stdlib-safer.h (mkostemp_safer, mkostemps_safer) (mkstemps_safer): Wrap more functions. * lib/stdlib--.h (mkostemp, mkostemps, mkstemps): Default the wrapping. * lib/mkstemp-safer.c (mkostemp_safer, mkostemps_safer) (mkstemps_safer): Implement the wrappers. mkstemps, mkostemps: new modules * modules/mkostemps: New module. * modules/mkstemps: Likewise. * lib/mkostemps.c (mkostemps): New file. * lib/mkstemps.c (mkstemps): Likewise. * m4/mkostemps.m4 (gl_FUNC_MKOSTEMPS): Likewise. * m4/mkstemps.m4 (gl_FUNC_MKSTEMPS): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Add witnesses. * modules/stdlib (Makefile.am): Substitute them. * lib/stdlib.in.h (mkostemps, mkstemps): Declare them. * doc/glibc-functions/mkstemps.texi (mkstemps): New file. * doc/glibc-functions/mkostemps.texi (mkostemps): Likewise. * doc/gnulib.texi (Glibc stdlib.h): Include them. * MODULES.html.sh (File system functions): Mention them. tempname: resync from glibc * lib/tempname.c (__gen_tempname): Add suffixlen argument. Use same values for __GT_FILE as glibc. Abort even when assertions are disabled. * lib/tempname.h (GT_FILE): Use glibc __GT_FILE, if available, and match its value otherwise. Allow idempotent inclusion. * lib/mkdtemp.c (mkdtemp): Adjust caller. * lib/mkostemp.c (mkostemp): Likewise. * lib/mkstemp.c (mkstemp): Likewise. * lib/tmpfile.c (tmpfile): Likewise. * NEWS: Document this. utimens: fix use of futimens on older Linux * lib/utimens.c (fdutimens): Use updated, rather than original, timespec to avoid bug in older Linux kernel. Reported by Simon Josefsson. 2009-11-04 Bruno Haible Make num_processors more flexible and consistent. * lib/nproc.h (enum nproc_query): New type. (num_processors): Add a 'query' argument. * lib/nproc.c: Include , , c-ctype.h. (num_processors): Add a 'query' argument. Test the value of the OMP_NUM_THREADS environment variable if requested. On Linux, NetBSD, mingw, count the number of CPUs available for the current process. * m4/nproc.m4 (gl_PREREQ_NPROC): Require AC_USE_SYSTEM_EXTENSIONS. Check for sched_getaffinity and sched_getaffinity_np. * modules/nproc (Depends-on): Add c-ctype, extensions. * NEWS: Mention the change. 2009-11-03 Bruno Haible * NEWS: Document the new library dependencies of inet_ntop, inet_pton. 2009-11-03 Jim Meyering test-getaddrinfo: avoid compilation failure on FreeBSD 7.2 * tests/test-getaddrinfo.c (simple): Test for EAI_NODATA only if it is defined. 2009-11-02 Eric Blake mktime, timegm: share common declaration * lib/mktime-internal.h: New file. * lib/mktime.c: Use it rather than open-coding a declaration. * lib/timegm.c: Likewise. * modules/mktime (Files): Ship it. * modules/timegm (Files): Likewise. Suggested by Bruno Haible. test-update-copyright: update test to match script changes * tests/test-update-copyright.sh: Avoid hard-coding perl location. Don't update *.bak created by earlier runs. 2009-11-02 Paul Eggert Simon Josefsson Bruno Haible Fix link error on Solaris 8. * m4/inet_pton.m4 (gl_INET_PTON): Search for the function inet_pton also in libnsl. Define also INET_PTON_LIB. * modules/inet_pton (Link): New section. 2009-11-02 Simon Josefsson Bruno Haible * m4/inet_ntop.m4 (gl_INET_NTOP): Define also INET_NTOP_LIB. * modules/inet_ntop (Link): New section. Reported by Boyan Kasarov . 2009-11-02 Eric Blake maint: avoid compiler warnings in m4 macros * m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Avoid unused variable. * m4/rmdir.m4 (gl_FUNC_RMDIR): Include correct header. 2009-11-02 Simon Josefsson * m4/pmccabe2html.m4: Remove file. * modules/pmccabe2html: Drop pmccabe2html.m4. Don't call m4 function. Change maintainer. * build-aux/pmccabe2html: Use /bin/sh with magic instead of hard-coding path to awk. Tiny patch from ludo@gnu.org (Ludovic Courtès). 2009-10-31 Eric Blake fseeko: fix m4 regression * m4/fseeko.m4 (gl_FUNC_FSEEKO): Use modern macro. Fixes regression from 2009-10-27. Reported by Ralf Wildenhues. 2009-10-31 Jim Meyering inttostr: aesthetics and improved (compile-time) safety Define inttype_is_signed rather than inttype_is_unsigned, since the sole use is via "#if inttype_is_signed". * lib/imaxtostr.c (inttype_is_signed): Define this, rather than inttype_is_unsigned. * lib/offtostr.c (inttype_is_signed): Likewise. * lib/uinttostr.c (inttype_is_signed): Likewise. * lib/umaxtostr.c (inttype_is_signed): Likewise. * lib/inttostr.c (inttostr): Use verify to cross-check the inttype_is_signed value and the signedness of the actual type. * modules/inttostr (Depends-on): Add verify. 2009-10-30 Eric Blake build: avoid compiler warnings * lib/fchmodat.c (lchmod): Mark unused variables. * lib/getopt.c (_getopt_initialize): Likewise. * lib/mktime.c (__mktime_internal): Provide prototype. * lib/inttostr.c (inttostr): Avoid compiler warning even with older gcc that do not understand #pragma GCC diagnostic. * lib/uinttostr.c (inttype_is_unsigned): Define. * lib/umaxtostr.c (inttype_is_unsigned): Likewise. 2009-10-30 Michael Haubenwallner stat: fix compilation on AIX * lib/sys_stat.in.h (stat): Work with fact that large files on AIX only see struct stat64. 2009-10-30 Eric Blake exclude: make more robust * lib/exclude.c (excluded_file_name): Abort on unexpected value, rather than masking a coding bug. Suggested by Bruno Haible. 2009-10-30 Jim Meyering perl scripts: remove #!/usr/bin/perl in favor of more portable... Rather than putting #!/usr/bin/perl on the first line, start with a variant of what's recommended by "man perlrun" that invokes the first "perl" program from your shell's search path. * build-aux/gitlog-to-changelog: Replace #!... as above. Add a "Local Variables" perl mode setting. Prompted by a patch from Ludovic Courtès. Improved by Eric Blake. * build-aux/useless-if-before-free: Likewise. * build-aux/announce-gen: Likewise. * build-aux/update-copyright: Likewise. 2009-10-29 Eric Blake filenamecat-lgpl: adjust clients * modules/linkat (Depends-on): Use filenamecat-lgpl, not filenamecat. * modules/renameat (Depends-on): Likewise. filenamecat: split into filenamecat-lgpl * modules/filenamecat-lgpl: New module. * modules/filenamecat (Files): Move library-safe files into filenamecat-lgpl. (Depends-on): Add filenamecat-lgpl. (configure.ac): Declare witness. * lib/filenamecat.h (file_name_concat): Only declare when using GPL module. * lib/filenamecat.c (longest_relative_suffix, mfile_name_concat): Move... * lib/filenamecat-lgpl.c: ...into new file. * m4/filenamecat.m4 (gl_FILE_NAME_CONCAT_LGPL): New macro. (gl_FILE_NAME_CONCAT): Use it. * MODULES.html.sh (File system functions): Mention new module. argp: avoid memory leak * modules/argp (Depends-on): Use dirname-lgpl, not dirname. * lib/argp-namefrob.h (__argp_base_name): Use last_component, not base_name, since the latter malloc()s and can call exit(). Leak introduced 2006-07-03. dirname-lgpl: adjust clients that don't need full dirname * modules/backupfile (Depends-on): Use dirname-lgpl, not dirname. * modules/filenamecat (Depends-on): Likewise. * modules/linkat (Depends-on): Likewise. * modules/mkancesdirs (Depends-on): Likewise. * modules/mkdir (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * modules/rename (Depends-on): Likewise. (License): Relax license. * modules/mkdir-tests (Depends-on): Drop progname. (Makefile.am): Delete unneeded LDADD. * modules/rename-tests (Depends-on, Makefile.am): Likewise. dirname: split into dirname-lgpl * modules/dirname-lgpl: New module. * modules/dirname (Files): Move library-safe files into dirname-lgpl. (Depends-on): Add dirname-lgpl. (configure.ac): Declare witness. * modules/double-slash-root (License): Relax license. * lib/dirname.h (base_name, dir_name): Only declare when using GPL module. * lib/dirname.c (dir_len, mdir_name): Move... * lib/dirname-lgpl.c: ...into new file. * lib/basename.c (last_component, base_len): Move... * lib/basename-lgpl.c: ...into new file. * m4/dirname.m4 (gl_DIRNAME_LGPL): New macro. (gl_DIRNAME): Use it. * MODULES.html.sh (Enhancements for POSIX:2008 functions): Mention new module. * modules/dirname-tests (Depends-on): Add progname. * tests/test-dirname.c (program_name): Delete. mkdir: make safe for libraries * modules/mkdir (Depends-on): Drop xalloc. * lib/mkdir.c (rpl_mkdir): Fail with ENOMEM rather than calling exit. tests: avoid some compiler warnings * tests/test-getaddrinfo.c (simple): Mark static, and allow string literals. * tests/test-memchr.c (main): Avoid type mismatch. * tests/test-arpa_inet.c (main): Avoid unused parameters. * tests/test-base64.c (main): Likewise. * tests/test-getdelim.c (main): Likewise. * tests/test-gethostname.c (main): Likewise. * tests/test-getline.c (main): Likewise. * tests/test-netinet_in.c (main): Likewise. * tests/test-select.c (open_server_socket, main): Likewise. * tests/test-select-stdin.c (main): Likewise. * tests/test-sockets.c (main): Likewise. * tests/test-strsignal.c (main): Likewise. * tests/test-sys_select.c (main): Likewise. * tests/test-sys_socket.c (main): Likewise. * tests/test-u64.c (main): Likewise. * tests/test-xfprintf-posix.c (main): Likewise. * tests/test-xvasprintf.c (test_xvasprintf, main): Likewise. sockets: avoid compiler warning * lib/sockets.c (gl_sockets_startup): Mark unused parameter. maint: detect usage(1) and other suspicious exits * top/maint.mk (sc_prohibit_magic_number_exit): New rule. 2009-10-29 Jim Meyering timespec: long-to-int truncation could make timespec_cmp malfunction * lib/timespec.h (timespec_cmp): Do not interpret a difference of a multiple of 2^32 nanoseconds as no difference. 2009-10-28 Jim Meyering fprintftime: wrap macro code argument in "do {...} while(0)" * lib/strftime.c (cpy) [FPRINTFTIME]: The second argument to the cpy macro must be a statement that can be followed by a semicolon. Now that the else clause contains a comment and is hence longer than one line, I require curly braces. That in turn requires that we wrap this code block in the standard do...while(0). fprintftime: remove stray semicolon from previous change * lib/strftime.c (cpy) [FPRINTFTIME]: Remove trailing semicolon. fprintftime: avoid a warning about ignored fwrite return value * lib/strftime.c [FPRINTFTIME]: Include "ignore-value.h". (cpy) [FPRINTFTIME]: Ignore fwrite failure, even though technically, that is unsafe. * modules/fprintftime (Depends-on): Add ignore-value. exclude: avoid an unwarranted warning * lib/exclude.c (excluded_file_name): Initialize "rc" before switch. 2009-10-27 Eric Blake fseek: avoid compilation failure when fflush is replaced * m4/fseek.m4 (gl_REPLACE_FSEEK): New macro. * m4/fseeko.m4 (gl_REPLACE_FSEEKO): Also replace fseek, if fseek module is in use. * lib/stdio.in.h (GNULIB_FSEEKO): Only poison fseek if fseek module is not in use; since REPLACE_FSEEK worked otherwise. (GNULIB_FTELLO): Likewise for ftell. Reported by Ian Beckwith and others. 2009-10-27 Bruno Haible * lib/isnan.c (rpl_isnan[fdl]): Repeat the specification declaration. Reported by Jim Meyering. 2009-10-27 Jim Meyering Bruno Haible Avoid warning despite dropping the return value of fwrite. * lib/unicodeio.c: Include ignore-value.h. (fwrite_success_callback): Explicitly ignore fwrite's return value. * modules/unicodeio (Depends-on): Add ignore-value. 2009-10-26 Eric Blake areadlinkat: fix fallback path * lib/at-func.c (AT_FUNC_NAME): Avoid signed comparison between pointer and zero. 2009-10-22 Pádraig Brady Use a better IO block size for modern systems * lib/copy-file.c (copy_file_preserving): Used a 32KiB malloced buffer. * lib/md2.c: Likewise. * lib/md4.c: Likewise. * lib/md5.c: Likewise. * lib/sha1.c: Likewise. * lib/sha256.c: Likewise. * lib/sha512.c: Likewise. 2009-10-22 Eric Blake tests: avoid several compiler warnings * tests/test-getcwd.c (main): Avoid buffer underflow. * tests/test-getdate.c (main): String literals are not safe with putenv, so use setenv. Declare unused argument. * modules/getdate-tests (Depends-on): Add setenv. * tests/test-argv-iter.c (main): Declare unused argument. Avoid problems with string literals in char *. * tests/test-hash.c (main): Avoid shadowing declaration. (insert_new): Treat string literals as char const *. * tests/test-getopt.h (test_getopt): Likewise. (getopt_loop): Alter types to minimize casting elsewhere. * tests/test-getopt_long.h (test_getopt_long, getopt_long_loop) (test_getopt_long_posix): Likewise. (do_getopt_long): Add wrapper to minimize casting. * tests/test-atexit.c (clear_temp_file): Use void. * tests/test-areadlink-with-size.c (main): Declare unused arguments. * tests/test-areadlink.c (main): Likewise. * tests/test-areadlinkat-with-size.c (main): Likewise. * tests/test-areadlinkat.c (main): Likewise. * tests/test-canonicalize-lgpl.c (main): Likewise. * tests/test-canonicalize.c (main): Likewise. * tests/test-dirent-safer.c (main): Likewise. * tests/test-dirname.c (main): Likewise. * tests/test-dup2.c (main): Likewise. * tests/test-fchdir.c (main): Likewise. * tests/test-fcntl-h.c (main): Likewise. * tests/test-fcntl-safer.c (main): Likewise. * tests/test-fdopendir.c (main): Likewise. * tests/test-fdutimensat.c (main): Likewise. * tests/test-fflush.c (main): Likewise. * tests/test-filenamecat.c (main): Likewise. * tests/test-filevercmp.c (main): Likewise. * tests/test-fopen-safer.c (main): Likewise. * tests/test-fopen.c (main): Likewise. * tests/test-fpending.c (main): Likewise. * tests/test-fpurge.c (main): Likewise. * tests/test-freading.c (main): Likewise. * tests/test-fstatat.c (main): Likewise. * tests/test-fsync.c (main): Likewise. * tests/test-futimens.c (main): Likewise. * tests/test-getndelim2.c (main): Likewise. * tests/test-gettimeofday.c (main): Likewise. * tests/test-getopt.c (main): Likewise. * tests/test-i-ring.c (main): Likewise. * tests/test-inttypes.c (main): Likewise. * tests/test-link.c (main): Likewise. * tests/test-lstat.c (main): Likewise. * tests/test-math.c (main): Likewise. * tests/test-md5.c (main): Likewise. * tests/test-memchr2.c (main): Likewise. * tests/test-memrchr.c (main): Likewise. * tests/test-mkdir.c (main): Likewise. * tests/test-mkdirat.c (main): Likewise. * tests/test-mkfifoat.c (main): Likewise. * tests/test-open.c (main): Likewise. * tests/test-openat-safer.c (main): Likewise. * tests/test-openat.c (main): Likewise. * tests/test-quotearg.c (main): Likewise. * tests/test-rawmemchr.c (main): Likewise. * tests/test-readlink.c (main): Likewise. * tests/test-remove.c (main): Likewise. * tests/test-rename.c (main): Likewise. * tests/test-renameat.c (main): Likewise. * tests/test-rmdir.c (main): Likewise. * tests/test-sha1.c (main): Likewise. * tests/test-signal.c (main): Likewise. * tests/test-sigaction.c (main): Likewise. * tests/test-stat.c (main): Likewise. * tests/test-stat-time.c (main): Likewise. * tests/test-stddef.c (main): Likewise. * tests/test-stdint.c (main): Likewise. * tests/test-stdio.c (main): Likewise. * tests/test-stdlib.c (main): Likewise. * tests/test-strchrnul.c (main): Likewise. * tests/test-strerror.c (main): Likewise. * tests/test-string.c (main): Likewise. * tests/test-strtod.c (main): Likewise. * tests/test-strverscmp.c (main): Likewise. * tests/test-symlink.c (main): Likewise. * tests/test-symlinkat.c (main): Likewise. * tests/test-sys_stat.c (main): Likewise. * tests/test-sys_time.c (main): Likewise. * tests/test-time.c (main): Likewise. * tests/test-unistd.c (main): Likewise. * tests/test-unlink.c (main): Likewise. * tests/test-unlinkat.c (main): Likewise. * tests/test-utimens.c (main): Likewise. * tests/test-utimensat.c (main): Likewise. * tests/test-version-etc.c (main): Likewise. * tests/test-wchar.c (main): Likewise. * tests/test-wctype.c (main): Likewise. * tests/test-xprintf-posix.c (main): Likewise. * tests/test-posixtm.c (main): Likewise. (STREQ): Delete unused macro. * tests/test-linkat.c (main): Declare unused arguments. Avoid shadowed variables. * tests/test-memchr.c (main): Likewise. 2009-10-21 Eric Blake areadlinkat: avoid failure on older glibc * lib/at-func.c (AT_FUNC_NAME): Check for explicit FUNC_FAIL, rather than mis-comparing 0 against FUNC_RESULT of char*. 2009-10-21 Bruno Haible * modules/stpncpy (License): Relicense under LGPLv2+. Reported by David Lutterkort . 2009-10-20 Eric Blake utimensat: work around Solaris 9 bug * lib/utimens.c (fdutimens, lutimens): Force a stat if platform has trailing slash bugs. * tests/test-lutimens.h (test_lutimens): Enhance test. * tests/test-utimens.h (test_utimens): Likewise. * doc/posix-functions/utime.texi (utime): Enhance documentation. * doc/posix-functions/utimes.texi (utimes): Likewise. * doc/posix-functions/utimensat.texi (utimensat): Likewise. * doc/glibc-functions/futimesat.texi (futimesat): Likewise. * doc/glibc-functions/lutimes.texi (lutimes): Likewise. * doc/posix-functions/futimens.texi (futimens): Likewise. fdutimensat: new module * modules/fdutimensat: New file. * lib/fdutimensat.c (fdutimensat): Likewise. * lib/utimens.h (fdutimensat, lutimensat): Declare new functions. * MODULES.html.sh (File system functions): Mention module. * modules/fdutimensat-tests: New test. * tests/test-fdutimensat.c: Likewise. doc: regenerate INSTALL * doc/INSTALL: Reflect recent autoconf update. * doc/INSTALL.ISO: Likewise. * doc/INSTALL.UTF-8: Likewise. 2009-10-20 Pádraig Brady acl: warn if ACL support is not detected * m4/acl.m4 (gl_FUNC_ACL): Output a warning if ACL support is not found. 2009-10-19 Giuseppe Scrivano * lib/nproc.h: Add extern "C" block for C++. 2009-10-18 Reuben Thomas Bruno Haible * doc/posix-functions/isascii.texi: Document the 2 alternative APIs. * doc/posix-functions/isalnum.texi: Document the 4 alternative APIs. * doc/posix-functions/isalpha.texi: Likewise. * doc/posix-functions/isblank.texi: Likewise. * doc/posix-functions/iscntrl.texi: Likewise. * doc/posix-functions/isdigit.texi: Likewise. * doc/posix-functions/isgraph.texi: Likewise. * doc/posix-functions/islower.texi: Likewise. * doc/posix-functions/isprint.texi: Likewise. * doc/posix-functions/ispunct.texi: Likewise. * doc/posix-functions/isspace.texi: Likewise. * doc/posix-functions/isupper.texi: Likewise. * doc/posix-functions/isxdigit.texi: Likewise. 2009-10-18 Bruno Haible Tests for module 'isblank'. * modules/isblank-tests: New file. * tests/test-isblank.c: New file. New module 'isblank'. * lib/isblank.c: New file. * m4/isblank.m4: New file. * modules/isblank: New file. * doc/posix-functions/isblank.texi: Mention the new module. 2009-10-18 Bruno Haible New module 'ctype'. * lib/ctype.in.h: New file. * m4/ctype.m4: New file. * modules/ctype: New file. * doc/posix-headers/ctype.texi: Mention the new module. 2009-10-18 Jim Meyering m4: stylistic-only: hoist AC_SUBST to be adjacent to initialization Declare a variable like LIB_CLOCK_GETTIME to be AC_SUBSTituted right after its initialization, rather than farther down. Keeping these in close proximity makes it easier to ensure that each such variable is initialized. E.g., LIB_CLOCK_GETTIME= AC_SUBST([LIB_CLOCK_GETTIME]) This change also increments these serial numbers. * m4/clock_time.m4 (gl_CLOCK_TIME): Hoist AC_SUBST use. * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. 2009-10-18 Bruno Haible Don't let environment variables perturb build. * m4/gethrxtime.m4 (gl_GETHRXTIME): Initialize LIB_GETHRXTIME here... (gl_PREREQ_GETHRXTIME): ... not here. 2009-10-18 Bruno Haible Avoid symlink attack in localcharset module. * lib/localcharset.c: Include , . (O_NOFOLLOW): Define fallback. (get_charset_aliases): Don't open the file if it is a symbolic link. * m4/fcntl_h.m4 (gl_FCNTL_O_FLAGS): New macro, extracted from gl_FCNTL_H. (gl_FCNTL_H): Require it. * m4/localcharset.m4 (gl_LOCALCHARSET): Likewise. * modules/localcharset (Files): Add m4/fcntl_h.m4. Reported by Fergal Glynn . 2009-10-18 Bruno Haible Implement nproc for mingw. * lib/nproc.c: Include (num_processors): On native Windows platforms, try GetSystemInfo. 2009-10-18 Bruno Haible Implement nproc for IRIX. * lib/nproc.c: Include . (num_processors): On IRIX systems, try sysmp. * m4/nproc.m4 (gl_PREREQ_NPROC): Check for sys/sysmp.h and sysmp. 2009-10-18 Bruno Haible Implement nproc for HP-UX. * lib/nproc.c: Include (num_processors): On HP-UX systems, try pstat_getdynamic. * m4/nproc.m4 (gl_PREREQ_NPROC): Check for sys/pstat.h and pstat_getdynamic. 2009-10-18 Giuseppe Scrivano Bruno Haible Implement nproc for NetBSD, OpenBSD. * lib/nproc.c: Include , , . (ARRAY_SIZE): New macro. (num_processors): On BSD systems, try sysctl of HW_NCPU. * m4/nproc.m4: New file. * modules/nproc (Files): Add m4/nproc.m4. (configure.ac): Invoke gl_NPROC. Remove AC_LIBOBJ invocation. (Makefile.am): Instead, augment lib_SOURCES. 2009-10-18 Bruno Haible Fix recognition of sys/sysctl.h on OpenBSD 4.0. * m4/physmem.m4 (gl_PHYSMEM): Before including sys/sysctl.h, include sys/param.h. 2009-10-16 Eric Blake utimensat: new module * modules/utimensat: New file. * lib/utimensat.c (utimensat): Likewise. * m4/utimensat.m4 (gl_FUNC_UTIMENSAT): Likewise. * lib/utimens.c (utimensat): Avoid recursion into rpl_utimensat, so we can work around Linux bugs. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add witnesses. * modules/sys_stat (Makefile.am): Substitute them. * lib/sys_stat.in.h (utimensat): Declare it. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/utimensat.texi (utimensat): Likewise. * modules/utimensat-tests: New test. * tests/test-utimensat.c: Likewise. utimens: let lutimens work on non-symlinks * lib/utimens.c (lutimens): Fall back to utimens rather than failing with ENOSYS, when file is not a symlink. (utimens): Reduce redirection. * tests/test-lutimens.h (test_lutimens): Update test to cover non-symlinks. * tests/test-utimens.h (test_utimens): Update test to cover symlinks. * tests/test-utimens.c (main): Update caller. utimens: cache whether utimensat syscall works * lib/utimens.c (utimensat_works_really): New cache variable. (fdutimens, lutimens): Use it to avoid failing syscall. test-stat-time, test-utimens: improve portability * tests/test-stat-time.c (nap): Lengthen delay to 20ms, for ext4 on alpha, and for cygwin. * tests/test-utimens-common.h: New file. (nap): Factor delays into single function. * tests/test-lutimens.h (test_lutimens): Use new header. * tests/test-futimens.h (test_futimens): Likewise. * tests/test-utimens.h (test_utimens): Likewise. Also, force NFS timestamps to occur from same machine, as was done previously for test_utimens. * modules/utimens-tests (Files): Ship new file. * modules/futimens-tests (Files): Likewise. Reported in part by Jim Meyering. sys_stat: sort replacement declarations * lib/sys_stat.in.h: Sort declarations. * lib/futimens.c (futimens): Fix typo. 2009-10-15 Jim Meyering don't let environment settings perturb build Setting the envvars, LIB_CLOCK_GETTIME, LIB_EACCESS or LIB_NANOSLEEP could cause a configure-time and/or build-time malfunction. Typically, a configure-time function-in-library test is performed via code like this: LIB_VAR= AC_SUBST([LIB_VAR]) prefix_saved_LIBS=$LIBS AC_SEARCH_LIBS([FUNC], [LIB_NAME], [test "$ac_cv_search_FUNC" = "none required" || LIB_VAR=$ac_cv_search_FUNC]) LIBS=$prefix_saved_LIBS However, in each of the files affected by this change, the LIB_VAR= initialization was omitted. Thus, when set in the environment, its value would propagate into generated Makefiles when FUNC is not found in LIB_NAME. * m4/clock_time.m4 (gl_CLOCK_TIME): Initialize AC_SUBST'd var. * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. 2009-10-14 Eric Blake fchdir: avoid infinite recursion in mingw * lib/fchdir.c (rpl_fstat): Call system fstat, rather than recursing. test-stat-time: port to mingw * tests/test-stat-time.c (force_unlink): Return a value. (test_ctime) [W32]: Fix compilation error. (nap): Don't call usleep with too large an argument. Use force_unlink. * doc/pastposix-functions/usleep.texi (usleep): Document the portability issue. 2009-10-13 Jim Meyering use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS in modules/* * modules/pipe-filter-gi: Use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS. * modules/pipe-filter-ii: Likewise. * modules/sys_socket-tests: Likewise. * modules/tsearch-tests: Likewise. * Makefile (sc_prefer_ac_check_funcs_once): New rule. (check): Depend on it. 2009-10-12 Eric Blake utimens-tests: port to NFS file systems * tests/test-utimens.h (test_utimens): Refactor utimecmp comparisons to avoid spurious failures from timestamp drift between NFS machines. 2009-10-12 Eric Blake stat-time-tests: minor cleanups * modules/stat-time-tests (configure.ac): Use AC_CHECK_FUNCS_ONCE. * tests/test-stat-time.c (nap): Separate assignment from call. Suggested by Paolo Bonzini and Bruno Haible. sys_stat: guarantee struct timespec * lib/sys_stat.in.h (includes): Always include * modules/sys_stat (Depends-on): Add time. * tests/test-sys_stat.c: Guarantee struct timespec, as well as mode_t permission values. * doc/posix-headers/sys_stat.texi (sys/stat.h): Document how to get at subsecond timestamps. 2009-10-10 Eric Blake futimens: new module * modules/futimens: New file. * lib/futimens.c (futimens): Likewise. * m4/futimens.m4 (gl_FUNC_FUTIMENS): Likewise. * lib/utimens.c (futimens): Avoid recursion into rpl_futimens, so we can work around Linux bugs. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add witnesses. * modules/sys_stat (Makefile.am): Substitute them. * lib/sys_stat.in.h (futimens): Declare it. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/futimens.texi (futimens): Likewise. * modules/futimens-tests: New test. * tests/test-futimens.c: Likewise. utimens: introduce fdutimens * lib/utimens.h (fdutimens): New prototype. * lib/utimens.c (gl_futimens): Move guts... (fdutimens): ...to new interface. * tests/test-utimens.c (do_fdutimens): Use it. utimens: add UTIME_NOW and UTIME_OMIT support * lib/utimens.c (validate_timespec, update_timespec): New helper functions. (gl_futimens, lutimens): Use them. * modules/utimens (Depends-on): Add gettime, lstat, stat-time, stdbool, sys_stat. (Link): Mention resulting library dependency. * modules/utimecmp (Link): Likewise. * modules/utimens-tests (Depends-on): Drop stat-time, stdbool. (Makefile.am): Pick up library dependency. * lib/sys_stat.in.h (UTIME_NOW, UTIME_OMIT): Guarantee a definition. * tests/test-sys_stat.c: Test the definitions. * doc/posix-headers/sys_stat.texi (sys/stat.h): Document this. * NEWS: Document library dependency. utimecmp: support symlink timestamps * lib/utimecmp.c (utimecmp): Use new interface. Skip effort of hashing when possible. Use pathconf when available. (SYSCALL_RESOLUTION): Recognize tighter resolution. * modules/utimecmp (Depends-on): Add lstat. utimens: add lutimens interface * lib/utimens.c (lutimens): New function. * m4/utimens.m4 (gl_UTIMENS): Check for lutimes. * lib/utimens.h (lutimens): Declare new interface. * tests/test-utimens.c (main): Enhance test. * tests/test-lutimens.h (test_lutimens): New file. * modules/utimens-tests (Files): Distribute it. (Depends-on): Add symlink. (configure.ac): Check for usleep. utimens: validate futimens usage * lib/utimens.c (gl_futimens): Require valid fd up front, using fewer syscalls on failure later on. Avoid compiler warning on mingw. * modules/utimens (Depends-on): Add dup2. utimens: add test * modules/utimens-tests: New test. * tests/test-utimens.h: New file. * tests/test-futimens.h: Likewise. * tests/test-utimens.c: Likewise. doc: mention timestamp portability issues * doc/glibc-functions/lutimes.texi (lutimes): Refer to utimensat instead. * doc/posix-functions/utime.texi (utime): Likewise. * doc/posix-functions/utimes.texi (utimes): Likewise. * doc/glibc-functions/futimes.texi (futimes): Refer to futimens instead. * doc/posix-functions/futimens.texi (futimens): Mention utimens module. * doc/posix-functions/utimensat.texi (utimensat): Likewise. Mention weakness with symlink timestamps. * doc/glibc-functions/futimesat.texi (futimesat): New file; refer to utimensat/futimens instead. * doc/gnulib.texi (Glibc sys/time.h): Include new file. test-dup2: enhance test * tests/test-dup2.c (main): Also check AT_FDCWD. test-stat-time: avoid more spurious failures * tests/test-stat-time.c (nap): Wait for 15ms rather than 2ms, for xfs; and avoid race if the two timestamps cross quantization edge. relocatable: prefer 'file system' over 'filesystem' * m4/relocatable-lib.m4 (gl_RELOCATABLE_NOP): Use AS_HELP_STRING. (gl_RELOCATABLE_LIBRARY_BODY): Fix spelling. * doc/relocatable-maint.texi (Supporting Relocation): Likewise. * doc/relocatable.texi (Enabling Relocatability): Likewise. * lib/relocatable.c (compute_curr_prefix): Likewise. 2009-10-10 Jim Meyering stat-time-tests: check for the usleep function * modules/stat-time-tests (configure.ac): Now that we test HAVE_USLEEP. 2009-10-10 Bruno Haible * modules/xnanosleep: Put the Link section after the Include section. 2009-10-09 Eric Blake dup2: work around FreeBSD 6.1 bug * m4/dup2.m4 (gl_FUNC_DUP2): Detect bug. * doc/posix-functions/dup2.texi (dup2): Document it. Reported by Nelson H. F. Beebe and Jim Meyering. test-stat-time: port to buggy NFS clients * tests/test-stat-time.c (main) [W32]: Reduce ifdefs. (test_ctime): Also skip test if mtime and ctime are skewed. maint: prefer 'file system' over 'filesystem' * doc/posix-functions/fstatat.texi (fstatat): Likewise. * doc/posix-functions/lstat.texi (lstat): Likewise. * lib/file-has-acl.c (file_has_acl): Likewise. * lib/fwriteerror.c [TEST]: Likewise. * tests/test-areadlink.h (test_areadlink): Likewise. * tests/test-areadlinkat-with-size.c (main): Likewise. * tests/test-areadlinkat.c (main): Likewise. * tests/test-canonicalize-lgpl.c (main): Likewise. * tests/test-canonicalize.c (main): Likewise. * tests/test-fstatat.c (main): Likewise. * tests/test-linkat.c (main): Likewise. * tests/test-lstat.h (test_lstat_func): Likewise. * tests/test-mkdir.h (test_mkdir): Likewise. * tests/test-readlink.h (test_readlink): Likewise. * tests/test-remove.c (main): Likewise. * tests/test-rename.h (test_rename): Likewise. * tests/test-renameat.c (main): Likewise. * tests/test-rmdir.h (test_rmdir_func): Likewise. * tests/test-symlink.h (test_symlink): Likewise. * tests/test-symlinkat.c (main): Likewise. * tests/test-unlink.h (test_unlink_func): Likewise. * tests/test-unlinkat.c (main): Likewise. maint: make realtime library usage explicit * modules/gethrxtime (Link): Mention LIB_GETHRXTIME. * modules/gettime (Link): Mention LIB_CLOCK_GETTIME. * modules/settime (Link): Likewise. * modules/xnanosleep (Link): Mention LIB_NANOSLEEP. test-stat-time: speed up execution * tests/test-stat-time.c (test_ctime) [!W32]: Avoid compiler warning on mingw. (nap): New helper function. (prepare_test): Use it to reduce sleep time. (test_mtime, test_ctime, test_birthtime): Allow for subsecond execution. * modules/stat-time-tests (configure.ac): Check for usleep. 2009-10-09 Jim Meyering selinux-h: always use getfilecon wrappers * lib/getfilecon.c: New file. * lib/se-selinux.in.h: Use a better inclusion guard symbol name. [HAVE_SELINUX_SELINUX_H]: Include-next . [!HAVE_SELINUX_SELINUX_H]: Use better parameter names. (fgetfilecon): Provide a stub. * m4/selinux-selinux-h.m4 (gl_HEADERS_SELINUX_SELINUX_H): Don't AC_SUBST SELINUX_SELINUX_H, since now we're generating that file unconditionally. When is found, arrange to use wrappers. * modules/selinux-h (Files): Add getfilecon.c. (Makefile.am): Substitute include-next-related bits into the now-always-generated selinux/selinux.h file. * doc/glibc-functions/lgetfilecon.texi: New file. * doc/glibc-functions/fgetfilecon.texi: New file. * doc/glibc-functions/getfilecon.texi: New file. * doc/glibc-functions/getfilecon-desc.texi: New file. * doc/gnulib.texi (Glibc selinux/selinux.h): New section, by which to pull in the new files. * MODULES.html.sh (Misc): Add selinux-h. 2009-10-08 Jim Meyering unistd: fix comment typo * lib/unistd.in.h (euidaccess): Fix a comment typo. 2009-10-08 Eric Blake areadlink: use SIZE_MAX consistently * modules/areadlink (Depends-on): Add stdint. * modules/areadlink-with-size (Depends-on): Likewise. * lib/areadlink-with-size.c (includes): Drop stdio, since stdlib gives NULL; drop sys/types, since unistd gives size_t; and add stdint for SIZE_MAX. (SIZE_MAX): Rely on headers. * lib/areadlinkat-with-size.c (includes): Drop stdio, sys/types, and add stdint. * lib/areadlink.c (includes): Drop sys/types, and add stdint. (SIZE_MAX): Likewise. (INITIAL_BUF_SIZE): Turn into enum. * lib/areadlinkat.c (INITIAL_BUF_SIZE): Likewise. 2009-10-08 Jim Meyering areadlinkat: avoid compilation failure * lib/areadlinkat.c: Include for use of SIZE_MAX. Fix typo in comment. 2009-10-07 Eric Blake areadlinkat-with-size: new module * modules/areadlinkat-with-size: New module. * lib/areadlinkat-with-size.c (areadlinkat_with_size): New file. * lib/areadlink.h (areadlinkat): Declare it. * MODULES.html.sh (File system functions): Mention it. * modules/areadlinkat-with-size-tests: New test. * tests/test-areadlinkat-with-size.c: New file. xreadlinkat: new module * modules/xreadlinkat: New module. * lib/xreadlinkat.c (xreadlinkat): New file. * lib/xreadlink.h (xreadlinkat): Declare it. * MODULES.html.sh (File system functions): Mention it. areadlinkat: new module * lib/at-func.c (FUNC_FAIL): New define. (AT_FUNC_NAME, VALIDATE_FLAG): Use it rather than raw -1. * modules/areadlinkat: New module. * lib/linkat.c (areadlinkat): Move... * lib/areadlinkat.c (areadlinkat): ...to new file. * lib/areadlink.h (areadlinkat): Declare it. * modules/linkat (Depends-on): Add areadlinkat. * MODULES.html.sh (File system functions): Mention it. * modules/areadlinkat-tests: New test. * tests/test-areadlinkat.c: New file. areadlink, areadlink-with-size: add tests * modules/areadlink-tests: New test. * modules/areadlink-with-size-tests: Likewise. * tests/test-areadlink.h: New file. * tests/test-areadlink.c: Likewise. * tests/test-areadlink-with-size.c: Likewise. maint: minor cleanups * lib/fts.c (ATTRIBUTE_UNUSED): Delete; use gnulib-guaranteed _UNUSED_PARAMETER_ instead. * lib/getdate.y (ATTRIBUTE_UNUSED): Likewise. * lib/utimens.c (ATTRIBUTE_UNUSED): Likewise. * modules/linkat-tests (Files): Distribute test-link.h. openat, utimens: whitespace cleanup * lib/openat.c: Prefer space throughout, rather than mix of 8 spaces vs. tabs. * lib/at-func.c: Likewise. * lib/utimens.c: Likewise. openat: avoid using wrong fd * lib/openat.c (openat_permissive): Reject user's fd if saving the working directory chooses same fd. * lib/at-func.c (AT_FUNC_NAME): Likewise. mkdir, mkdirat: fix cygwin 1.5.x bug * lib/mkdir.c (rpl_mkdir) [FUNC_MKDIR_DOT_BUG]: Work around bug. * m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Move... * m4/mkdir.m4 (gl_FUNC_MKDIR): ...here, and add check for cygwin bug. (gl_PREREQ_MKDIR): Delete unused macro. * modules/mkdir (Files): Track file rename. (configure.ac): Update macro name. * modules/openat (Depends-on): Add mkdir. * doc/posix-functions/mkdir.texi (mkdir): Document the bug. mkdir, mkdirat: add tests * modules/mkdir-tests: New test. * tests/test-mkdir.h: New file. * tests/test-mkdir.c: Likewise. * tests/test-mkdirat.c: Likewise. * modules/openat-tests (Files): Add new files. (Makefile.am): Run new test. 2009-10-06 Eric Blake doc: tweak *at function documentation * doc/posix-functions/faccessat.texi (faccessat): Mention known issue with replacement. * doc/posix-functions/fchdir.texi (fchdir): Likewise. * doc/posix-functions/linkat.texi (linkat): Likewise. * doc/posix-functions/mkfifoat.texi (mkfifoat): Likewise. * doc/posix-functions/mknodat.texi (mknodat): Likewise. * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. * doc/posix-functions/renameat.texi (renameat): Likewise. * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. openat: fix GNU/Hurd bug in unlinkat * m4/openat.m4 (gl_FUNC_OPENAT): Replace unlinkat if unlink is broken. * doc/posix-functions/unlink.texi (unlink): Document this. * doc/posix-functions/unlinkat.texi (unlinkat): Likewise. fdopendir: fix GNU/Hurd bug * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for Hurd bug in allowing non-directory fds. * lib/fdopendir.c (rpl_fdopendir): Work around it. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): New witness. * modules/dirent (Makefile.am): Substitute it. * lib/dirent.in.h (fdopendir): Declare replacement. * doc/posix-functions/fdopendir.texi (fdopendir): Document this. * tests/test-fdopendir.c (main): Test something other than /dev/null, since on Hurd that behaves like a directory. test-symlink: port to GNU/Hurd * tests/test-symlink.h (test_symlink): Relax expected errno. doc: tweak more cygwin information * doc/glibc-headers/getopt.texi (getopt.h): Cygwin 1.7 getopt is now compatible with glibc. * doc/posix-functions/getopt.texi (getopt): Likewise. getopt-gnu: add another test * tests/test-getopt_long.h (test_getopt_long_posix): New test, to guarantee behavior relied on by m4. * tests/test-getopt.c (main): Use it. * modules/getopt-posix-tests (Depends-on): Add setenv. See http://lists.gnu.org/r/bug-m4/2006-09/msg00028.html. getopt: fix compilation on darwin * lib/getopt.in.h (includes): Leave breadcrumbs during system include. * lib/unistd.in.h (getopt): Use them to avoid recursive include. Reported by Ludovic Courtès. 2009-10-06 Bruno Haible * modules/size_max (Description): Discourage its use. Reported by Simon Josefsson. 2009-10-06 Jim Meyering linkat: avoid compilation failure * lib/linkat.c: Include for use of SIZE_MAX. 2009-10-05 Eric Blake linkat: support Linux 2.6.17 * m4/linkat.m4 (gl_FUNC_LINKAT): Default to always replacing linkat on Linux, but allow cache variable override. * lib/linkat.c (rpl_linkat): Define override. * modules/linkat (Depends-on): Add symlinkat. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add new default. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (linkat): Declare replacement. Reported by Pádraig Brady. quotearg: port test to systems with C.UTF-8 locale * tests/test-quotearg.c (struct result_strings): Add another member, differentiating between C.ASCII and C.UTF-8 handling. (compare_strings): Add parameter. (main): Adjust all callers. getopt: avoid clash with FreeBSD _getopt_internal * lib/getopt.in.h (_getopt_internal): Override the name. * lib/getopt_int.h (includes): Pick up any overrides. Reported by Reuben Thomas. hash: allow C89 compilation * lib/hash.c (check_tuning): Move declaration before statement. Reported by Reuben Thomas. 2009-10-05 Karl Berry * doc/gnulib.texi: @include execvpe.texi, missing for several days. 2009-10-04 Paolo Bonzini Bruno Haible * lib/uname.c (uname): Use a table-driven algorithm to compute Windows NT versions. 2009-10-04 Bruno Haible * lib/progname.c (set_program_name): Also remove the "lt-" prefix from program_invocation_short_name. * modules/progname (configure.ac): Test for presence of program_invocation_short_name. Reported by Sergey Poznyakoff . 2009-10-04 Bruno Haible * lib/progname.c (set_program_name): Fix comment. Reported by Jim Meyering. 2009-10-03 Paolo Bonzini Bruno Haible * lib/uname.c: Include . (uname): Do only one call to GetVersionEx in the common case. 2009-10-03 Paolo Bonzini Bruno Haible * lib/uname.c (VER_PLATFORM_WIN32_CE, PROCESSOR_ARCHITECTURE_AMD64, PROCESSOR_ARCHITECTURE_IA32_ON_WIN64): Define fallbacks. (uname): Add support for Windows CE and various non-x86 CPU types. 2009-10-03 Bruno Haible * gnulib-tool (func_create_testdir): Conditionally emit AM_PROG_CC_C_O invocation to tests/configure.ac. Reported by Ian Beckwith . 2009-10-02 Eric Blake fchdir: avoid compiler warning * lib/fchdir.c (canonicalize_file_name) [!HAVE_CANONICALIZE_FILE_NAME]: Avoid compiler warning on mingw. test-open: support mingw errno values * tests/test-open.h (test_open): Relax test. * tests/test-fopen.h (test_fopen): Likewise. * tests/test-openat-safer.c (main): Likewise. open: fix opening directory on mingw * lib/open.c (open) [REPLACE_OPEN_DIRECTORY]: Correct typo. test-open: on GNU/Hurd, /dev/null is a directory * tests/test-fopen.h (main): Rename... (test_fopen): ...to this. Use a guaranteed non-directory when confirming open behavior on trailing slash. * tests/test-openat-safer.c (main): Likewise. * tests/test-open.h (main): Likewise.... (test_open): ...to this. * tests/test-fopen.c (main): Adjust caller. * tests/test-fopen-safer.c (main): Likewise. * tests/test-open.c (main): Likewise. * tests/test-fcntl-safer.c (main): Likewise. Reported by Samuel Thibault. rename, fchdir: don't ignore chdir failure * lib/fchdir.c (get_name): Abort on unexpected chdir failure. * lib/rename.c (rpl_rename) [W32]: Likewise. (rpl_rename) [RENAME_DEST_EXISTS_BUG]: Avoid one case of losing an empty destination directory if source cannot be renamed, although there is still possibility for failure. * doc/posix-functions/rename.texi (rename): Document the race. Reported by Jim Meyering. maint: cleanup whitespace in recent commits * lib/rename.c (rpl_rename): Remove tabs. * tests/test-link.h (test_link): Likewise. * lib/fchdir.c (get_name): Likewise. Reported by Jim Meyering. 2009-10-02 Ben Pfaff relocatable-prog-wrapper: Add missing dependency on double-slash-root. * modules/relocatable-prog-wrapper: Add dependency. Reported by Ian Beckwith . 2009-10-02 Eric Blake renameat: fix Solaris bugs * m4/renameat.m4 (gl_FUNC_RENAMEAT): Replace renameat if rename needed fixing. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): New witness. * modules/stdio (Makefile.am): Substitute it. * lib/stdio.in.h (renameat): Declare replacement. * lib/renameat.c (rpl_renameat): Implement fix. renameat: new module * modules/renameat: New file. * lib/renameat.c (renameat): Likewise. * m4/renameat.m4 (gl_FUNC_RENAMEAT): Likewise. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add witnesses. * modules/stdio (Makefile.am): Substitute them. * lib/stdio.in.h (renameat): Declare it. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/renameat.texi (renameat): Likewise. * modules/renameat-tests: New test. * tests/test-renameat.c: Likewise. rename: fix mingw bugs * lib/rename.c (rpl_rename) [W32]: Fix trailing slash and directory overwrite bugs. rename: fix another cygwin 1.5 bug * m4/rename.m4 (gl_FUNC_RENAME): Split cygwin bugs into two checks. * lib/rename.c (rpl_rename): Don't penalize NetBSD with unnecessary cygwin workarounds. Also work around bug with moving full directory onto an empty one. * modules/rename (Depends-on): Add canonicalize-lgpl, rmdir. rename-dest-slash: merge into rename module * modules/rename-dest-slash (Status): Mark obsolete. (Depends-on): Add rename. (Files): Let rename do it all. * m4/rename.m4 (gl_FUNC_RENAME): Also test for NetBSD bugs, subsuming the test from gl_FUNC_RENAME_TRAILING_DEST_SLASH... * m4/rename-dest-slash.m4: ...so this file can be deleted. * lib/rename-dest-slash.c (rpl_rename_dest_slash): Delete. * lib/rename.c (rpl_rename): Update comments. rename: fix cygwin 1.5.x bugs * m4/rename.m4 (gl_FUNC_RENAME): Detect cygwin bugs. * lib/rename.c (rpl_rename): Work around them. * modules/rename (Depends-on): Add same-inode. rename: fix Solaris 10 bug * m4/rename.m4 (gl_FUNC_RENAME): Detect Solaris bug. * lib/rename.c (rpl_rename): Don't cripple POSIX behavior if this was the only bug. rename: fix Solaris 9 bug * lib/rename.c (rpl_rename): Rewrite to recognize trailing slash on non-directory. Avoid calling exit. * modules/rename (Depends-on): Drop xalloc; add lstat, stdbool, strdup. * modules/rename-tests (Depends-on): Drop lstat. * m4/rename.m4 (gl_FUNC_RENAME): Detect Solaris bug. (gl_PREREQ_RENAME): Delete unused macro. rename-dest-slash: fix NetBSD bug * lib/rename-dest-slash.c (rpl_rename_dest_slash): Detect hard links. * modules/rename-dest-slash (Depends-on): Add same-inode. rename-tests: new test, exposes several platform bugs * modules/rename-tests: New file. * tests/test-rename.h: Likewise. * tests/test-rename.c: Likewise. * doc/posix-functions/rename.texi (rename): Improve documentation, including bugs that will eventually be fixed in gnulib. 2009-10-02 Paolo Bonzini * lib/uname.c: Include (uname): Assume version info is available. 2009-10-02 Jim Meyering gnu-web-doc-update: correct --help output * build-aux/gnu-web-doc-update: Make --help output relevant. gnu-web-doc-update: add standard options * build-aux/gnu-web-doc-update: Add --help, --version, etc. gnu-web-doc-update: New module. Use this script to automatically update the on-line web documentation for your GNU project at http://www.gnu.org/software/$pkg/manual/ * modules/gnu-web-doc-update: New file, from coreutils. * build-aux/gnu-web-doc-update: New script. 2009-10-01 Paolo Bonzini link: LoadLibrary is not needed. * lib/link.c: Use GetModuleHandle. 2009-10-01 Eric Blake getopt: bump serial number * m4/getopt.m4: Increment serial number, to account for 2009-09-24 change. tests: tighten link, rmdir, and remove tests * tests/test-link.h (includes): No need to use here. Clean up if directory hard link was created, otherwise test for trailing '.'. * tests/test-linkat.c (main): Simplify. * tests/test-remove.c (main): Enhance test for trailing '.'. * tests/test-rmdir.h (test_rmdir_func): Likewise. 2009-10-01 Jim Meyering maint.mk: requiring "make major" was annoying, for a "minor" release. What is intended is "stable", to contrast with alpha and beta, so require "make stable", not "make major". * build-aux/announce-gen (%valid_release_types): s/major/stable/. (get_tool_versions): Likewise. * top/maint.mk (ALL_RECURSIVE_TARGETS): s/major/stable/ 2009-09-30 Ben Pfaff Fix broken build of replacement for Windows tmpfile(). * lib/tmpfile.c (tmpfile): Fix call to gen_tempname() to provide flags argument added along with the 'mkostemp' module. 2009-09-28 Bruno Haible Avoid identifier clash with POSIX function 'remove' defined as a macro. * lib/gl_list.h (struct gl_list_implementation): Rename field 'remove' to 'remove_elt'. (gl_list_remove): Update. * lib/gl_list.c (gl_list_remove): Update. * lib/gl_oset.h (struct gl_oset_implementation): Rename field 'remove' to 'remove_elt'. (gl_oset_remove): Update. * lib/gl_list.c (gl_oset_remove): Update. Reported by Eric Blake. 2009-09-28 Eric Blake doc: mention yet more cygwin 1.7 status * doc/posix-functions/fexecve.texi (fexecve): Now implemented in cygwin. * doc/glibc-functions/execvpe.texi (execvpe): New file. * doc/gnulib.texi (Glibc unistd.h): Mention it. argp: fix test failure * lib/argp-help.c (hol_entry_cmp): Don't use _tolower on values that are not upper-case. Pass correct range to tolower. 2009-09-27 Jim Meyering test-yesno: work around sparc-dash here-document infelicity Without this change, the literal \177 byte in a here document would make dash 0.5.5.1-3 access uninitialized memory. * tests/test-yesno.sh: Don't put the \177 byte in the here document. Instead, use a marker, "@", and filter through tr to create the desired contents. Reported as by Kurt Roeckx. 2009-09-27 Bruno Haible Disable untested support for new flavours of ACLs on AIX. * lib/file-has-acl.c (file_has_acl): Mark newer AIX code as work in progress. * lib/set-mode-acl.c (qset_acl): Likewise. 2008-12-07 Bruno Haible Add support for new flavours of ACLs on AIX. (Untested.) * lib/file-has-acl.c [AIX] (acl_nfs4_nontrivial): New function. (file_has_acl): Add support for newer AIX. * lib/set-mode-acl.c (qset_acl): Likewise. * tests/test-sameacls.c (main): Fix use of aclx_get function. Hint by Rainer Tammer . 2009-09-26 Eric Blake argp: fix compilation of getopt * lib/getopt.in.h (includes): Use different guard than glibc. Reported by Sergey Poznyakoff. doc: mention more cygwin 1.7 status * doc/posix-functions/access.texi (access): Mention cygwin 1.5 bug. * doc/posix-functions/execl.texi (execl): Likewise. * doc/posix-functions/execle.texi (execle): Likewise. * doc/posix-functions/execlp.texi (execlp): Likewise. * doc/posix-functions/execv.texi (execv): Likewise. * doc/posix-functions/execve.texi (execve): Likewise. * doc/posix-functions/execvp.texi (execvp): Likewise. * doc/glibc-functions/canonicalize_file_name.texi (canonicalize_file_name): Cygwin 1.7 now provides this. * doc/glibc-functions/euidaccess.texi (euidaccess): Likewise. * doc/posix-functions/fchmodat.texi (fchmodat): Mention limitation on AT_SYMLINK_NOFOLLOW. 2009-09-24 Eric Blake test-linkat: make test more robust * tests/test-linkat.c (main): Avoid collision with EEXIST. getopt: fix inclusion guards for cygwin * modules/getopt-posix (Depends-on): Add include-next. (Makefile.am): Substitute more items in replacement header. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Also check for native . * lib/getopt.in.h (includes): Use split inclusion guard, and prefer over include when one is present. (option): Also override name of 'struct option'. same-inode: revert prior change; it is not yet ready * NEWS: Undo mention of this change. * lib/same-inode.h (same-inode.h): Undo tri-state change. * lib/cycle-check.h (CYCLE_CHECK_REFLECT_CHDIR_UP): Update caller. * lib/cycle-check.c (cycle_check): Likewise. * lib/same.c (same_name): Likewise. * lib/at-func2.c (at_func2): Likewise. 2009-09-23 Eric Blake linkat: new module * modules/linkat: New file. * lib/at-func2.c (at_func2): Likewise. * lib/linkat.c (linkat): Likewise. * m4/linkat.m4 (gl_FUNC_LINKAT): Likewise. * lib/openat-priv.h (at_func2): Add declaration. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witnesses. * modules/unistd (Makefile.am): Substitute them. * lib/unistd.in.h (linkat): Declare it. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/linkat.texi (linkat): Likewise. * doc/posix-functions/link.texi (link): Tweak wording. * tests/test-link.c (main): Move guts... * tests/test-link.h (test_link): ...into new file. * modules/linkat-tests: New test. * tests/test-linkat.c: Likewise. * modules/link-tests (Files): Ship new file. (Depends-on): Add stdbool. dirname: add library-safe mdir_name * lib/dirname.h (mdir_name): New prototype. * lib/dirname.c (dir_name): Move guts... (mdir_name): ...to new function that avoids xalloc_die. fchdir: another mingw fix * modules/fchdir (Depends-on): Drop canonicalize-lgpl. * lib/fchdir.c (get_name): New helper method; skips canonicalize on mingw (where it has not yet been ported), and make it optional elsewhere. (_gl_register_fd): Use it. same-inode: make SAME_INODE tri-state, to port to mingw * NEWS: Mention this change. * lib/same-inode.h (same-inode.h): Recognize mingw limitation of st_ino always being 0. * lib/cycle-check.h (CYCLE_CHECK_REFLECT_CHDIR_UP): Update caller. * lib/cycle-check.c (cycle_check): Likewise. * lib/same.c (same_name): Likewise. lstat: avoid mingw compilation error * m4/lstat.m4 (gl_FUNC_LSTAT): Avoid duplicate calls to AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, and deal with missing lstat ourselves. * lib/lstat.c [!HAVE_LSTAT]: Do nothing if override was adequate. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Let lstat module handle the checks for lstat. (gl_SYS_STAT_H_DEFAULTS): Set default for HAVE_LSTAT. link: fix test failure on Solaris 9 * lib/link.c (rpl_link): Don't assume link will catch bogus trailing slash on source. test-symlinkat: enhance test * tests/test-readlink.c (main): Move guts... * tests/test-readlink.h (test_readlink): ...into new file. * tests/test-symlink.c (main): Move guts... * tests/test-symlink.h (test_symlink): ...into new file. * tests/test-symlinkat.c (main): Use new files for further coverage. (do_symlink, do_readlink): New helper functions. * modules/symlink-tests (Files): Ship new file. (Depends-on): Add stdbool. * modules/readlink-tests (Files): Ship new file. (Depends-on): Add stdbool. * modules/symlinkat-tests (Files): Use new files. 2009-09-23 Eric Blake readlink: document portability issue with symlink length * doc/posix-functions/lstat.texi (lstat): Mention that some file systems have bogus st_size on symlinks, and mention the areadlink-with-size module. * doc/posix-functions/fstatat.texi (fstatat): Likewise. * doc/posix-functions/readlink.texi (readlink): Mention the areadlink module, and ERANGE failure. * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. * tests/test-readlink.c (main): Relax test for AIX, HP-UX. readlink: fix Solaris 9 bug with trailing slash * lib/readlink.c (rpl_readlink): Work around trailing slash bug. * m4/readlink.m4 (gl_FUNC_READLINK): Detect the bug. * doc/posix-functions/readlink.texi (readlink): Document this. * modules/readlink-tests: New test. * tests/test-readlink.c: Likewise. readlink: fix cygwin 1.5.x bug with return type * m4/readlink.m4 (gl_FUNC_READLINK): Require correct signature. * lib/unistd.in.h (readlink): Use ssize_t. * lib/readlink.c (readlink): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (readlink): Declare replacement. * doc/posix-functions/readlink.texi (readlink): Document this. symlink: use throughout gnulib * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Omit symlink check. * lib/symlinkat.c (symlinkat) [!HAVE_SYMLINK]: Document why symlink is not used. * modules/symlinkat (Depends-on): Add symlink. * modules/canonicalize-lgpl-tests (Depends-on): Likewise. * modules/canonicalize-tests (Depends-on): Likewise. * modules/lstat-tests (Depends-on): Likewise. * modules/openat-tests (Depends-on): Likewise. * modules/remove-tests (Depends-on): Likewise. * modules/rmdir-tests (Depends-on): Likewise. * modules/unlink-tests (Depends-on): Likewise. * tests/test-canonicalize-lgpl.c (symlink): Delete stub. * tests/test-canonicalize.c (symlink): Likewise. * tests/test-fstatat.c (symlink): Likewise. * tests/test-lstat.c (symlink): Likewise. * tests/test-remove.c (symlink): Likewise. * tests/test-rmdir.c (symlink): Likewise. * tests/test-unlink.c (symlink): Likewise. * tests/test-unlinkat.c (symlink): Likewise. symlink: new module, for Solaris 9 bug * modules/symlink: New file. * m4/symlink.m4 (gl_FUNC_SYMLINK): Likewise. * lib/symlink.c: Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add defaults. * modules/unistd (Makefile.am): Substitute them. * lib/unistd.in.h (symlink): Declare replacement. * MODULES.html.sh (File system functions): Mention it. * doc/posix-functions/symlink.texi (symlink): Likewise. * modules/symlink-tests: New test. * tests/test-symlink.c: Likewise. 2009-09-23 Bruno Haible * gnulib-tool (func_import): Add 'link-warning' to testsrelated_modules when needed. Test case: gnulib-tool --import --with-tests atexit inttypes. Reported by Pauli Miettinen . 2009-09-23 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Set uses_subdirs in a subcommand, not in a subshell. 2009-09-22 Eric Blake unistd: sort replacement declarations * lib/unistd.in.h: Sort declarations. open, openat: minor optimization * lib/open.c (open): If open succeeded, len is non-zero. * lib/openat.c (rpl_openat): Likewise. link-follow: ensure correct result * m4/fcntl_h.m4 (gl_FCNTL_H): Clean up temporary file. * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Likewise, and distinguish between possible failures. 2009-09-21 Eric Blake fts: avoid compiler warning * lib/fts.c (dirent_inode_sort_may_be_useful) (leaf_optimization_applies) [!__linux__]: Mark unused parameters. 2009-09-19 Bruno Haible * lib/progreloc.c (canonicalize_file_name): New declaration. 2009-09-19 Eric Blake link: fix quoting * m4/link.m4 (gl_FUNC_LINK): Fix shell quoting. openat: fix openat bugs on Solaris 9 * lib/openat.c (rpl_openat): Work around Solaris 9 bug. * m4/openat.m4 (gl_FUNC_OPENAT): Also replace openat on Solaris. * modules/openat (Depends-on): Add open. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Provide new default. * modules/fcntl-h (Makefile.am): Substitute it. * lib/fcntl.in.h (openat): Declare replacement. * doc/posix-functions/openat.texi (openat): Document this. openat: move fstatat and unlinkat into correct files * m4/openat.m4 (gl_FUNC_OPENAT): Adjust which files will be compiled. * lib/openat.c (fstatat, unlinkat): Move... * lib/fstatat.c (fstatat): ...into correct files. * lib/unlinkat.c (unlinkat): Likewise. openat: fix unlinkat bugs on Solaris 9 * lib/unlinkat.c (unlinkat): New file. * modules/openat (Depends-on): Add unlink. (Files): Distribute it. * m4/openat.m4 (gl_FUNC_OPENAT): Mark unlinkat for replacement if trailing slash behavior is broken. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (unlinkat): Declare replacement. * doc/posix-functions/unlinkat.texi (unlinkat): Document this. openat: fix fstatat bugs on Solaris 9 * lib/fstatat.c (rpl_fstatat): Copy recent fixes from lstat and stat. * doc/posix-functions/fstatat.texi (fstatat): Document this. test-unlinkat: enhance test, to expose Solaris 9 bug * tests/test-unlink.c (main): Factor guts... * tests/test-unlink.h (test_rmdir_func): ...into new file. * tests/test-rmdir.h (test_rmdir_func): Add parameter. * tests/test-rmdir.c (main): Adjust caller. * tests/test-unlinkat.c (main): Likewise. Add unlink tests. (unlinker): New helper function. (rmdirat): Enhance check. * modules/rmdir-tests (Depends-on): Add stdbool. * modules/unlink-tests (Depends-on): Likewise. (Files): Add test-unlink.h. * modules/openat-tests (Files): Likewise. (Depends-on): Add unlinkdir. test-fstatat: new test, to expose Solaris 9 bugs * tests/test-stat.c (main): Factor guts... * tests/test-stat.h (test_stat_func): ...into new file. * tests/test-lstat.c (main): Factor guts... * tests/test-lstat.h (test_lstat_func): ...into new file. * tests/test-fstatat.c: New file. * modules/stat-tests (Files): Add test-stat.h. * modules/lstat-tests (Files): Add test-lstat.h. (Depends-on): Add stdbool. * modules/openat-tests (Depends-on): Add pathmax. (Files): Add test-lstat.h, test-stat.h, test-fstatat.c. (Makefile.am): Run new test. remove: new module, for mingw and Solaris 9 bugs * modules/remove: New file. * lib/remove.c: Likewise. * m4/remove.m4 (gl_FUNC_REMOVE): Likewise. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add witnesses. * modules/stdio (Makefile.am): Use them. * lib/stdio.in.h (remove): Declare replacement. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/remove.texi (remove): Likewise. * modules/remove-tests: New test. * tests/test-remove.c: Likewise. unlink: new module, for Solaris 9 bug * modules/unlink: New file. * lib/unlink.c: Likewise. * m4/unlink.m4 (gl_FUNC_UNLINK): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witnesses. * modules/unistd (Makefile.am): Use them. * lib/unistd.in.h (stat): Declare replacement. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/unlink.texi (unlink): Likewise. * modules/unlink-tests: New test. * tests/test-unlink.c: Likewise. lstat: fix Solaris 9 bug * lib/lstat.c (lstat): Also check for trailing slash on non-symlink, non-directories. Use stat module to simplify logic. * doc/posix-functions/lstat.texi (lstat): Document it. * modules/lstat-tests (Depends-on): Add errno, same-inode. (configure.ac): Check for symlink. * tests/test-lstat.c (main): Add more tests. stat: add as dependency to other modules * modules/chown (Depends-on): Add stat. * modules/euidaccess (Depends-on): Likewise. * modules/fchdir (Depends-on): Likewise. * modules/isdir (Depends-on): Likewise. * modules/link (Depends-on): Likewise. * modules/lstat (Depends-on): Likewise. * modules/mkdir-p (Depends-on): Likewise. * modules/modechange (Depends-on): Likewise. * modules/open (Depends-on): Likewise. * modules/readlink (Depends-on): Likewise. * modules/same (Depends-on): Likewise. stat: fix Solaris 9 bug * m4/stat.m4 (gl_FUNC_STAT): Detect Solaris 9 bug with trailing slash. * lib/stat.c (rpl_stat): Work around it. * doc/posix-functions/stat.texi (stat): Update documentation. stat: new module, for mingw bug * modules/stat: New file. * lib/stat.c: Likewise. * m4/stat.m4 (gl_FUNC_STAT): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add witnesses. * modules/sys_stat (Makefile.am): Use them. * lib/sys_stat.in.h (stat): Declare replacement. * lib/openat.c (fstatat): Deal with lstat and stat being function macros. * modules/openat (Depends-on): Add inline. * MODULES.html.sh (systems lacking POSIX:2008): Mention module. * doc/posix-functions/stat.texi (stat): Likewise. * modules/stat-tests: New test. * tests/test-stat.c: Likewise. 2009-09-19 Jim Meyering syntax-check: detect unnecessary inclusion of canonicalize.h * top/maint.mk (sc_prohibit_canonicalize_without_use): New rule. 2009-09-19 Eric Blake canonicalize-lgpl: adjust clients to use correct header * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE) (gl_CANONICALIZE_LGPL): Use correct shell quoting. * modules/relocatable-prog-wrapper (Files): Drop canonicalize.h. * lib/fchdir.c (includes): Use , not "canonicalize.h". * lib/progreloc.c (includes): Likewise. 2009-09-19 Jim Meyering test-posixtm.c: correct a comment * tests/test-posixtm.c: Correct first-line comment. Spotted by Eric Blake. 2009-09-16 Jim Meyering posixtm-tests: make T const-correct; add a test case * tests/test-posixtm.c (T): Declare const. Add a test for -(2^31+1). Remove useless can-succeed-only-in-2002 test. posixtm-tests: adjust the sole failing test * tests/test-posixtm.c: Correct 0000-01-01 00:00:00 test so that expected output matches what mktime now produces. Cross-checked via erlang's calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}}) posixtm: move #ifdef'd tests into a new module * lib/posixtm.c (posixtime): Remove #ifdef'd tests. Move to... * tests/test-posixtm.c: ... this new file. * modules/posixtm-tests: New module. 2009-09-19 Eric Blake openat: simplify use of at-func.c * lib/at-func.c (includes): Include prerequisites here, to simplify requirements on client files. * lib/openat-priv.h: Add double-inclusion guard. * lib/faccessat.c (includes): Simplify. * lib/fchmodat.c (includes): Likewise. * lib/fchownat.c (includes): Likewise. * lib/mkdirat.c (includes): Likewise. * lib/mkfifoat.c (includes): Likewise. * lib/symlinkat.c (includes): Likewise. openat: allow return of fd 0 * modules/chdir-long (Depends-on): Relax openat-safer to openat. * modules/save-cwd (Depends-on): Replace fcntl-safer with unistd-safer. * lib/chdir-long.c (includes): Replace "fcntl--.h" with ; this module does not leak fds. * lib/openat.c (includes): Do not use "fcntl_safer"; plain openat must be allowed to return 0, leaving openat_safer to add the safety. (openat_permissive): Avoid writing to just-opened fd 2 if restoring the current directory fails. * lib/openat-die.c (openat_restore_fail): Add comment. * lib/save-cwd.c (includes): Make "fcntl--.h" conditional. (save_cwd): Guarantee safe fd, but without use of open_safer. * tests/test-openat.c: New test. * modules/openat-tests (Files, Makefile.am): Distribute and build new file. relocatable-prog-wrapper: fix build * modules/relocatable-prog-wrapper (Files): Update name of canonicalize m4 file, broken on 2009-09-17. Reported by emad hajjar . 2009-09-19 Bruno Haible * lib/safe-alloc.h: Use the standard header with GPL copyright. * lib/safe-alloc.c: Likewise. Reported by Ian Beckwith . 2009-09-18 Bruno Haible * gnulib-tool: Add advice to "cannot find configure.ac" error message. Reported by . 2009-09-17 Eric Blake canonicalize: in CAN_ALL_BUT_LAST, allow trailing slash * lib/canonicalize.c (canonicalize_filename_mode): Skip trailing slashes when checking if last component is missing. * tests/test-canonicalize.c (main): Test this. canonicalize, canonicalize-lgpl: honor // if distinct from / * modules/canonicalize (Files): Add double-slash-root.m4. * modules/canonicalize-lgpl (Files): Likewise. * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE) (gl_CANONICALIZE_LGPL_SEPARATE): Add dependency. * lib/canonicalize.c (DOUBLE_SLASH_IS_DISTINCT_ROOT): Provide fallback definition. (canonicalize_filename_mode): Use it to protect //. * lib/canonicalize-lgpl.c (DOUBLE_SLASH_IS_DISTINCT_ROOT) (__realpath): Likewise. * tests/test-canonicalize.c (main): Test this. * tests/test-canonicalize-lgpl.c (main): Likewise. * modules/canonicalize-tests (Depends-on): Add same-inode. * modules/canonicalize-lgpl-tests (Depends-on): Likewise. canonicalize-lgpl: fix glibc bug with trailing slash * m4/canonicalize-lgpl.m4: Move contents... * m4/canonicalize.m4: ...here. (gl_CANONICALIZE_LGPL): Factor realpath check... (gl_FUNC_REALPATH_WORKS): ...into new macro. Enhance to catch glibc 2.3.5 bug, fixed 2005-04-27. (gl_FUNC_CANONICALIZE_FILENAME_MODE): Use it. (gl_PREREQ_CANONICALIZE_LGPL): Inline... (gl_CANONICALIZE_LGPL_SEPARATE): ...into this macro. * modules/canonicalize-lgpl (Files): Manage file rename. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Provide default. * modules/stdlib (Makefile.am): Substitute witness. * lib/stdlib.in.h (canonicalize_file_name): Declare if replacement is needed. * lib/canonicalize-lgpl.c: Also compile if canonicalize_file_name replacement is required. * lib/canonicalize.c (canonicalize_file_name): Likewise. * doc/glibc-functions/canonicalize_file_name.texi (canonicalize_file_name): Document this. * doc/posix-functions/realpath.texi (realpath): Likewise. canonicalize-lgpl: reject non-directory with trailing slash * lib/canonicalize-lgpl.c (__realpath): Synchronize with glibc. * tests/test-canonicalize-lgpl.c (main): Enhance test. This catches failures in glibc 2.3.5. * tests/test-canonicalize.c (main): Likewise. canonicalize-lgpl: use native realpath if it works * lib/canonicalize-lgpl.c (realpath): Guard with FUNC_REALPATH_WORKS. * lib/stdlib.in.h (realpath): Make declaration optional based on HAVE_REALPATH. * m4/canonicalize-lgpl.m4 (gl_CANONICALIZE_LGPL): Check whether native realpath works. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Provide default. * modules/stdlib (Makefile.am): Substitute witness. canonicalize, canonicalize-lgpl: use * modules/canonicalize-lgpl (Files): Drop canonicalize.h. (Include): Mention . (configure.ac): Mention functions we provide. * modules/canonicalize (configure.ac): Likewise. * m4/canonicalize-lgpl.m4 (gl_CANONICALIZE_LGPL): Always replace realpath if canonicalize_file_name is missing. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Provide defaults. * modules/stdlib (Makefile.am): Substitute witnesses. * lib/stdlib.in.h (canonicalize_file_name, realpath): Declare. * lib/canonicalize-lgpl.c (includes): Adjust accordingly. * lib/canonicalize.h (canonicalize_file_name): Drop declaration. * NEWS: Document this. * doc/glibc-functions/canonicalize_file_name.texi (canonicalize_file_name): Likewise. * doc/posix-functions/realpath.texi (realpath): Likewise. * tests/test-canonicalize-lgpl.c (includes): Use . test-canonicalize: consolidate into single C program * tests/test-canonicalize.sh: Delete; move setup into... * tests/test-canonicalize.c (main): ...the program, making it easier to run in debugger. Add some tests. * modules/canonicalize-tests (Files): Remove unused file. (Depends-on): Add progname. (configure.ac, Makefile.am): Simplify. test-canonicalize-lgpl: consolidate into single C program * tests/test-canonicalize-lgpl.sh: Delete; move setup into... * tests/test-canonicalize-lgpl.c (main): ...the program, making it easier to run in debugger. Add some tests. * modules/canonicalize-lgpl-tests (Files): Remove unused file. (configure.ac, Makefile.am): Simplify. canonicalize: avoid resolvepath * m4/canonicalize.m4 (gl_FUNC_CANONICALIZE_FILENAME_MODE): Delete unnecessary checks. * lib/canonicalize.c (includes): Simplify. (canonicalize_file_name): Drop resolvepath implementation. * modules/canonicalize (Depends-on): Drop filenamecat. canonicalize: don't lose errno * lib/canonicalize.c (canonicalize_filename_mode): Protect errno over calls to free. canonicalize: simplify errno handling * lib/canonicalize.c (__set_errno): Delete macro, and use direct assignment. canonicalize, canonicalize-lgpl: update module dependencies * modules/canonicalize (Depends-on): Add extensions, lstat, pathmax, stdlib. (Files): Drop pathmax.h. (configure.ac): Adjust macro name. * modules/canonicalize-lgpl (Depends-on): Add errno, extensions, lstat, stdlib, sys_stat. * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME): Rename... (gl_FUNC_CANONICALIZE_FILENAME_MODE): ...to this, and require extensions. * m4/canonicalize-lgpl.m4 (gl_CANONICALIZE_LGPL) (gl_CANONICALIZE_LGPL_SEPARATE): Require extensions. (gl_PREREQ_CANONICALIZE_LGPL): Assume unistd.h. * lib/canonicalize.h (canonicalize_file_name): Use declaration, if available. * lib/canonicalize-lgpl.c [HAVE_READLINK]: Delete this condition; we can rely on the readlink module. (MAXSYMLINKS): Also consult SYMLOOP_MAX. (includes): Use unconditionally. 2009-09-17 Eric Blake maint: make Include sections of modules consistent * modules/alloca: Use only header name; no need to list #include. * modules/alloca-opt: Likewise. * modules/arpa_inet: Likewise. * modules/canon-host: Likewise. * modules/configmake: Likewise. * modules/dirent: Likewise. * modules/eealloc: Likewise. * modules/environ: Likewise. * modules/fchdir: Likewise. * modules/fcntl: Likewise. * modules/fcntl-h: Likewise. * modules/gethrxtime: Likewise. * modules/gettime: Likewise. * modules/ignore-value: Likewise. * modules/inet_ntop: Likewise. * modules/inet_pton: Likewise. * modules/inttypes: Likewise. * modules/isnand-nolibm: Likewise. * modules/isnanf-nolibm: Likewise. * modules/mbchar: Likewise. * modules/mbfile: Likewise. * modules/mbiter: Likewise. * modules/mbuiter: Likewise. * modules/netdb: Likewise. * modules/netinet_in: Likewise. * modules/nproc: Likewise. * modules/pagealign_alloc: Likewise. * modules/poll: Likewise. * modules/printf-frexp: Likewise. * modules/pthread: Likewise. * modules/putenv: Likewise. * modules/random_r: Likewise. * modules/relocatable-prog: Likewise. * modules/search: Likewise. * modules/select: Likewise. * modules/selinux-h: Likewise. * modules/settime: Likewise. * modules/signal: Likewise. * modules/size_max: Likewise. * modules/socklen: Likewise. * modules/ssize_t: Likewise. * modules/stdarg: Likewise. * modules/stdbool: Likewise. * modules/stddef: Likewise. * modules/stdint: Likewise. * modules/stdio: Likewise. * modules/stdlib: Likewise. * modules/string: Likewise. * modules/strings: Likewise. * modules/sys_file: Likewise. * modules/sys_ioctl: Likewise. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_stat: Likewise. * modules/sys_time: Likewise. * modules/sys_times: Likewise. * modules/sys_utsname: Likewise. * modules/sys_wait: Likewise. * modules/sysexits: Likewise. * modules/time: Likewise. * modules/times: Likewise. * modules/tmpfile: Likewise. * modules/trim: Likewise. * modules/unistd: Likewise. * modules/wchar: Likewise. * modules/wctype: Likewise. 2009-09-17 Bruno Haible Make getdate.y compile on QNX and NetBSD 5 / i386. * m4/getdate.m4 (gl_GETDATE): Conditionally define TIME_T_FITS_IN_LONG_INT. * lib/getdate.y (long_time_t): New type. (relative_time): Change type of 'seconds' field to long_time_t. (get_date): Update types of local variables. Check against overflow during conversion from long_time_t to time_t. Reported by Matt Kraai and Hasso Tepper . 2009-09-17 Bruno Haible * modules/COPYING: Update copyright years. * modules/README: Likeiwse. * doc/gnulib-intro.texi (Copyright): Use a wildcard year. Reported by Ian Beckwith . 2009-09-17 Ian Beckwith (tiny change) * users.txt: Update references for gnuit package. 2009-09-17 Ian Beckwith (tiny change) * m4/getdelim.m4: Fix typo in copyright line. 2009-09-17 Bruno Haible * lib/atoll.c: Use the standard header with GPL copyright. * lib/argz.in.h: Likewise. * lib/glob.c: Likewise. * lib/glob-libc.h: Likewise. * lib/random_r.c: Likewise. * lib/siglist.h: Likewise. * lib/strsignal.c: Likewise. Reported by Ian Beckwith . 2009-09-17 Eric Blake rmdir: ensure correct dependency order * m4/rmdir.m4 (gl_FUNC_RMDIR): Require unistd defaults. 2009-09-17 Bruno Haible Disable assertion that fails on NetBSD 5 / i386. * lib/mktime.c (ydhms_diff): Disable assertion about time_t size. Reported by Sam Steingold and Hasso Tepper . 2009-09-16 Eric Blake unlinkdir: port to mingw * m4/unlinkdir.m4 (gl_UNLINKDIR): Add mingw to list of platforms on which no one can unlink a directory. stdlib: sort witness names * modules/stdlib (Makefile.am): Sort replacements. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Likewise. * lib/stdlib.in.h: Likewise. parse-duration-tests: avoid link failure * modules/parse-duration-tests (test_parse_duration_LDADD): Add LIBINTL. Reported by Tom G. Christensen. openat-tests: ensure unlinkat behaves like rmdir * tests/test-rmdir.c (main): Factor guts... * tests/test-rmdir.h (test_rmdir_func): ...into new file. * modules/rmdir-tests (Files): Ship new file. * modules/openat-tests: New test. * tests/test-unlinkat.c: Likewise. rmdir-errno: mark obsolete, it is unsafe for cross-compilation * modules/rmdir-errno (Status, Notice): Now obsolete. rmdir: work around cygwin 1.5.x and mingw bugs * m4/rmdir.m4 (gl_FUNC_RMDIR): Detect the bugs. * lib/rmdir.c (rmdir): Work around it. * modules/rmdir (Status, Notice): No longer obsolete. (Files): Add dos.m4. (Depends-on): Add unistd. (configure.ac): Set witnesses. (License): Relax to LGPLv2+. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set defaults. * modules/unistd (Makefile.am): Substitute witnesses. * lib/unistd.in.h (rmdir): Declare replacement. * doc/posix-functions/rmdir.texi (rmdir): Document this. * modules/rmdir-tests: New tests. * tests/test-rmdir.c: Likewise. 2009-09-15 Eric Blake fchdir: improve use of replacement functions * m4/fchdir.m4 (gl_FUNC_FCHDIR): Set appropriate witnesses. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add REPLACE_FSTAT. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Add REPLACE_OPENDIR, REPLACE_CLOSEDIR. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add REPLACE_DUP. * modules/sys_stat (Makefile.am): Substitute correct witness. * modules/dirent (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * lib/dirent.in.h (opendir, closedir): Use better witnesses. * lib/unistd.in.h (dup): Likewise. * lib/sys_stat.in.h (fstat): Likewise. maint: ignore gnulib-tool temp files * .gitignore: Ignore files created during gnulib-tool --test. 2009-09-13 Jim Meyering posixtm: don't reject a time that specify "60" as the number of seconds * lib/posixtm.c (posixtime): The code to reject invalid dates would also reject a time specified with the .60 suffix. But POSIX allows that, in order to accommodate leap seconds. So don't reject it. (main): Adjust tests accordingly. * modules/posixtm (Depends-on): Add stpcpy. 2009-09-11 Jim Meyering announce-gen: include [$release_type] in emitted Subject: * build-aux/announce-gen (get_tool_versions): Include [$release_type], e.g., [stable] in the emitted Subject: line. 2009-09-10 Ralf Wildenhues Remove obsolete macros from several modules. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Replace obsolete Autoconf macros with their modern counterparts. * m4/check-math-lib.m4 (gl_CHECK_MATH_LIB): Likewise. * m4/gc-camellia.m4 (gl_GC_CAMELLIA): Likewise. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Likewise. * m4/getdate.m4 (gl_C_COMPOUND_LITERALS): Likewise. * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Likewise. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. * m4/poll.m4 (gl_FUNC_POLL): Likewise. * m4/readline.m4 (gl_FUNC_READLINE): Likewise. * m4/round.m4 (gl_FUNC_ROUND): Likewise. * m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise. * m4/select.m4 (gl_FUNC_SELECT): Likewise. * m4/sockets.m4 (gl_SOCKETS): Likewise. * m4/socklen.m4 (gl_TYPE_SOCKLEN_T): Likewise. * m4/sockpfaf.m4 (gl_SOCKET_FAMILIES): Likewise. * m4/sysexits.m4 (gl_SYSEXITS): Likewise. * m4/time_r.m4 (gl_TIME_R): Likewise. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Likewise. * m4/vararrays.m4 (AC_C_VARARRAYS): Likewise. * m4/wctype.m4 (gl_WCTYPE_H): Likewise. Fix copyright header in build-aux scripts. * build-aux/git-version-gen: Fix copyright header to match GPLv3 recommendation. * build-aux/ncftpput-ftp: Likewise. * build-aux/update-copyright: Likewise. 2009-09-09 Eric Blake test-link: allow Linux choice of errno * tests/test-link.c (main): Relax test for alternate error. strndup: fix improper m4 caching * m4/strndup.m4 (gl_FUNC_STRNDUP): Rework to avoid side effects inside AC_CACHE_CHECK. Use REPLACE_STRNDUP, not HAVE_STRNDUP. (gl_PREREQ_STRNDUP): Delete. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Update default. * modules/string (Makefile.am): Substitute it. * lib/string.in.h (strndup): Modernize prototype. getcwd: port to mingw * m4/getcwd.m4 (gl_FUNC_GETCWD): Mingw directories are very different from the POSIX assumptions made throughout the getcwd module; fortunately, the mingw getcwd does not need replacement. (gl_FUNC_GETCWD_NULL): Skip test on mingw. * modules/getcwd-tests: New test. * tests/test-getcwd.c: Likewise. link: fix platform bugs * m4/link.m4 (gl_FUNC_LINK): Detect Solaris and Cygwin bugs. * lib/link.c (link): Work around them. Fix related mingw bug. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add REPLACE_LINK. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (link): Declare replacement. * doc/posix-functions/link.texi (link): Document this. * modules/link (Depends-on): Add strdup-posix, sys_stat. test-link: consolidate into single C program, test more cases * tests/test-link.sh: Delete. * tests/test-link.c: Test more error conditions. Exposes bugs on at least Cygwin and Solaris. * modules/link-tests (Files): Remove unused file. (Depends-on): Add errno, sys_stat. (Makefile.am): Simplify. 2009-09-08 Bruno Haible Work around towlower, towupper bug on mingw. * lib/wctype.in.h (towlower, towupper) [__MINGW32__]: New replacements. * m4/wctype.m4 (gl_WCTYPE_H): Replace also on mingw. * doc/posix-functions/towlower.texi: Mention the mingw bug. * doc/posix-functions/towupper.texi: Likewise. Reported by Eric Blake. 2009-09-08 Jim Meyering build: don't try to run autoheader if we don't use it * build-aux/bootstrap: Define AUTOHEADER=true when AC_CONFIG_HEADERS is not used in configure.ac. 2009-09-08 Eric Blake euidaccess: fix compilation error * lib/euidaccess.c (includes): Add , for AT_EACCESS. rawmemchr: relax license * modules/rawmemchr (License): Derived from glibc, so LGPLv2+ is okay. Reported by Jim Meyering. mkfifoat: new module * modules/mkfifoat: New file. * lib/mkfifoat.c: Likewise. * m4/mkfifoat.m4 (gl_FUNC_MKFIFOAT): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add witnesses. * modules/sys_stat (Makefile.am): Use them. * lib/sys_stat.in.h (mkfifoat, mknodat): Declare them. * MODULES.html.sh (File system functions): Mention module. * doc/posix-functions/mkfifoat.texi (mkfifoat): Likewise. * doc/posix-functions/mknodat.texi (mknodat): Likewise. * modules/mkfifoat-tests: New test. * tests/test-mkfifoat.c: Likewise. strchrnul: relax license * modules/strchrnul (License): Derived from glibc, so LGPLv2+ is okay. Reported by Jim Meyering. 2009-09-08 Eric Blake fstatat: fix compilation on Solaris * lib/fstatat.c (includes): Add fcntl.h. Reported by Pádraig Brady. 2009-09-07 Eric Blake rename: modernize replacement * modules/rename (Depends-on): Add stdio. (configure.ac): Declare witness. * m4/rename.m4 (gl_FUNC_RENAME): Ensure dependency order, and let stdio take care of replacement. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add new defaults. * modules/stdio (Makefile.am): Substitute them. * lib/stdio.in.h (rename): Declare replacement. * lib/rename.c (includes): Allow cross-compilation to non-windows machines. * doc/posix-functions/rename.texi (rename): Improve documentation. stdio: sort witness names * modules/stdio (Makefile.am): Sort replacements. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * lib/stdio.in.h: Likewise. getcwd: minor cleanups * lib/getcwd.c (AT_FDCWD): Delete; rely on instead. (is_ENAMETOOLONG): Delete; ENAMETOOLONG is portable. openat: provide more convenience names * modules/faccessat (configure.ac): Add C witness. * lib/unistd.in.h (readlinkat): Fix typo. * lib/openat.h (statat, lstatat, accessat, euidaccessat): New convenience wrappers. * top/maint.mk (sc_prohibit_openat_without_use): Allow these wrappers in syntax checks. 2009-09-06 Eric Blake doc: fix comments in recent patches * lib/faccessat.c: Mention correct function. * lib/fchmodat.c: Likewise. * lib/fchownat.c: Likewise. * lib/symlinkat.c: Likewise. * doc/posix-headers/fcntl.texi (fcntl.h): Cygwin 1.7 has AT_* constants. faccessat, symlinkat: continue cleanup of previous patch * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Ensure dependency order. * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Likewise. * modules/unistd (Makefile.am): Substitute GNULIB_READLINKAT. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Offer GNULIB_READLINKAT. * modules/symlinkat (configure.ac): Set GNULIB_READLINKAT. * lib/unistd.in.h (readlinkat): Declare if GNULIB_READLINKAT is set. 2009-09-06 Bruno Haible * lib/sys_stat.in.h (fchmodat): Declare if GNULIB_FCHMODAT is set. (fstatat): Declare if GNULIB_FSTATAT is set. (mkdirat): Declare if GNULIB_MKDIRAT is set. * lib/unistd.in.h (fchownat): Declare if GNULIB_FCHOWNAT is set. (unlinkat): Declare if GNULIB_UNLINKAT is set. * modules/fcntl-h (Files): Remove m4/openat.m4. * modules/sys_stat (Files): Remove m4/openat.m4. (Makefile.am): Substitute GNULIB_FCHMODAT, GNULIB_FSTATAT, GNULIB_MKDIRAT instead of GNULIB_OPENAT. * modules/unistd (Files): Remove m4/openat.m4. (Makefile.am): Substitute GNULIB_FCHOWNAT, GNULIB_UNLINKAT instead of GNULIB_OPENAT. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Initialize GNULIB_OPENAT, HAVE_OPENAT here. Don't require gl_OPENAT_DEFAULTS. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_FCHMODAT, GNULIB_FSTATAT, GNULIB_MKDIRAT, HAVE_FCHMODAT, HAVE_FSTATAT, HAVE_MKDIRAT, REPLACE_FSTATAT here. Don't require gl_OPENAT_DEFAULTS. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_FCHOWNAT, GNULIB_UNLINKAT, HAVE_FCHOWNAT, HAVE_UNLINKAT, REPLACE_FCHOWNAT here. Don't require gl_OPENAT_DEFAULTS. * m4/openat.m4 (gl_FUNC_OPENAT): Require gl_FCNTL_H_DEFAULTS, gl_SYS_STAT_H_DEFAULTS, gl_UNISTD_H_DEFAULTS. Set GNULIB_FCHMODAT, GNULIB_FSTATAT, GNULIB_MKDIRAT, GNULIB_FCHOWNAT, GNULIB_UNLINKAT. (gl_OPENAT_DEFAULTS): Remove macro. 2009-09-06 Bruno Haible * modules/openat (configure.ac): Remove unneeded witness. 2009-09-06 Bruno Haible Set errno to ENOSYS when a function is entirely unsupported. * lib/chown.c (rpl_chown) [!HAVE_CHOWN]: Set errno to ENOSYS instead of EOPNOTSUPP. * lib/lchown.c (lchown) [!HAVE_CHOWN]: Likewise. * modules/chown (Depends-on): Remove errno. 2009-09-06 Bruno Haible * doc/posix-headers/fcntl.texi (AT_*): Mention affected platforms. 2009-09-06 Bruno Haible * lib/sys_stat.in.h: Fix preprocessor command indentation. 2009-09-06 Ben Pfaff Bruno Haible Work around a glibc bug in strtok_r. * lib/string.in.h (strtok_r): Replace if REPLACE_STRTOK_R is set. Undefine if UNDEFINE_STRTOK_R is set. * lib/strtok_r.c (strtok_r, __strtok_r) [!_LIBC]: Don't undefine. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_STRTOK_R and UNDEFINE_STRTOK_R. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Check against the glibc bug. * modules/string (Makefile.am): Substitute REPLACE_STRTOK_R, UNDEFINE_STRTOK_R. * doc/posix-functions/strtok_r.texi: Mention the glibc 2.7 bug. 2009-09-06 Sergey Poznyakoff exclude: minor fix * lib/exclude.c: Include wctype.h 2009-09-06 Akim Demaille bootstrap: improve error message * build-aux/bootstrap (find_tool): Upon failure, report the list of candidates. Honor the initial value of the envvar. 2009-09-05 Eric Blake symlinkat: new module * modules/symlinkat: New file. * lib/symlinkat.c: Likewise. * m4/symlinkat.m4 (gl_FUNC_SYMLINKAT): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witnesses. * modules/unistd (Makefile.am): Use them. * lib/unistd.in.h (symlinkat, readlinkat): Declare them. (faccessat) [GNULIB_POSIXCHECK]: Fix typo. * lib/at-func.c (FUNC_RESULT): New macro, defaulting to int. * MODULES.html.sh (File system functions): Mention module. * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. * modules/symlinkat-tests: New test. * tests/test-symlinkat.c: Likewise. test-openat-safer: add more checks * tests/test-openat-safer.c (main): Check more code paths. 2009-09-05 Jim Meyering syntax-check: detect unnecessary inclusion of openat.h * top/maint.mk (sc_prohibit_openat_without_use): New rule. 2009-09-05 Bruno Haible Support towlower, towupper. * doc/posix-functions/towlower.texi: Mention module wctype. * doc/posix-functions/towupper.texi: Likewise. * lib/wctype.in.h (towlower, towupper): New functions. * tests/test-wctype.c: Include stdio.h, stdlib.h. (ASSERT): New macro. (e): New variable. (main): Test also towlower, towupper. Test WEOF argument. Reported by Alan Hourihane . 2009-09-05 Bruno Haible Fix conversion behaviour when the input is invalid. * lib/striconveh.c (mem_cd_iconveh_internal): Fix storing of question mark occurring in first pass of indirect conversion. * tests/test-striconveh.c (main): Test conversion of invalid ASCII input. Found by clang's static analyzer. 2009-09-05 Bruno Haible * tests/test-striconveh.c (main): Test indirect conversion on platforms where direct conversion is possible. 2009-09-04 Eric Blake openat: fail with ENOENT on empty name * lib/openat-proc.c (openat_proc_name): Special-case the empty buffer. link-follow: fix logic bug in prior patch * m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Fix bug that reversed sense of yes and no in prior patch. Avoid confusing compilation failure with desired semantics. link-follow: accommodate mingw and cross-compilation * m4/link-follow.m4 (gl_AC_FUNC_LINK_FOLLOWS_SYMLINK): Rename... (gl_FUNC_LINK_FOLLOWS_SYMLINK): ...to this. Change cross-compilation results to -1, to make linkat easier to implement when cross-compiling. Trivially support mingw. * modules/link-follow (configure.ac): Call new name. * NEWS: Mention this. 2009-09-03 Eric Blake faccessat: compile replacement * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Build replacement when needed. fts: fix compilation error * lib/fts.c (includes): Re-add "openat.h", for openat_needs_fchdir. faccessat: new module * modules/faccessat: New file. * lib/faccessat.c: Likewise. * m4/faccessat.m4 (gl_FUNC_FACCESSAT): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Use it. * lib/unistd.in.h (faccessat): Declare it. (F_OK, X_OK, W_OK, R_OK): Provide definitions. * lib/fcntl.in.h (AT_SYMLINK_FOLLOW, AT_EACCESS): Likewise. * MODULES.html.sh (File system functions): Mention it. * doc/posix-functions/faccessat.texi (faccessat): Likewise. * doc/posix-headers/fcntl.texi (fcntl.h): Likewise. euidaccess: prefer POSIX over non-standard implementation * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Check for faccessat. * lib/euidaccess.c (euidaccess): Use it if available. openat: make template easier to use * lib/at-func.c (CALL_FUNC): Allow AT_FUNC_USE_F1_COND and AT_FUNC_F2 to be undefined. (VALIDATE_FLAG): New macro; use it to reject bad flags. (AT_FUNC_USE_F1_COND): Change sense to just flag bit. * lib/fchmodat.c (AT_FUNC_USE_F1_COND): Adjust. * lib/fchownat.c (AT_FUNC_USE_F1_COND): Likewise. * lib/openat.c (AT_FUNC_USE_F1_COND) [fstatat, unlinkat]: Likewise. * lib/mkdirat.c (AT_FUNC_F2, AT_FUNC_USE_F1_COND): Delete. * lib/selinux-at.c (AT_FUNC_F2, AT_FUNC_USE_F1_COND) [getfileconat, lgetfileconat, setfileconat, lsetfileconat]: Likewise. openat: declare in POSIX headers * NEWS: Mention this. * modules/openat (configure.ac): Declare witnesses. (Depends-on): Add fcntl-h, sys_stat, unistd. (Include): Mention correct headers. * modules/fcntl-h (Depends-on): Add link-warning. (Files): Add openat.m4. (Makefile.am): Substitute witnesses. * modules/sys_stat (Files, Makefile.am): Likewise. * modules/unistd (Files, Makefile.am): Likewise. * m4/openat.m4 (gl_FUNC_OPENAT, gl_FUNC_FCHOWNAT): Set witnesses. (gl_OPENAT_DEFAULTS): New macro. * m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Use it. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Likewise. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Likewise. (SYS_STAT_H): Remove unused variable. * doc/posix-headers/fcntl.texi (fcntl.h): Update content. * lib/fcntl--.h (includes): Remove unneeded header. * lib/openat-safer.c (includes): Likewise. * lib/openat.h (AT_FDCWD, AT_SYMLINK_NOFOLLOW, AT_REMOVEDIR) (openat, fstatat, unlinkat, mkdirat, fchmodat, fchownat): Move to appropriate headers. (__OPENAT_PREFIX): Delete. * lib/fcntl.in.h (openat): Provide declaration. (AT_FDCWD): Fix Solaris bug. (AT_SYMLINK_NOFOLLOW, AT_REMOVEDIR): Provide macros. * lib/sys_stat.in.h (fstatat, mkdirat): Provide declaration. * lib/fchmodat.c (includes): Adjust to find declaration. * lib/fchownat.c (includes): Likewise. * lib/mkdirat.c (includes): Likewise. * lib/fstatat.c (includes): Likewise. Ensure original fstatat is still visible. 2009-09-02 Eric Blake errno: use consistently * lib/c-stack.c (ENOTSUP): guarantees a definition. * lib/canonicalize-lgpl.c (ENAMETOOLONG): Likewise. * lib/canonicalize.c (ELOOP): Likewise. * lib/inet_ntop.c (EAFNOSUPPORT): Likewise. * lib/inet_pton.c (EAFNOSUPPORT): Likewise. * lib/lchown.c (EOPNOTSUPP): Likewise. * lib/openat-priv.h (ENOSYS, EOPNOTSUPP): Likewise. * lib/savewd.c (ESTALE): Likewise. * lib/settime.c (ENOSYS): Likewise. * lib/utimens.c (ENOSYS): Likewise. * lib/xgethostname.c (ENAMETOOLONG): Likewise. * lib/chdir-safer.c (ELOOP): Likewise. (chdir_no_follow): Use HAVE_READLINK, not ELOOP, as witness. * modules/c-stack (Depends-on): Add errno. * modules/canonicalize (Depends-on): Likewise. * modules/chdir-safer (Depends-on): Likewise. * modules/fdopendir (Depends-on): Likewise. * modules/inet_ntop (Depends-on): Likewise. * modules/inet_pton (Depends-on): Likewise. * modules/lchown (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * modules/settime (Depends-on): Likewise. * m4/chdir-safer.m4 (gl_CHDIR_SAFER): Check for readlink. fts: avoid leaking fds * modules/fts (Depends-on): Add cloexec. * lib/fts.c (opendirat, diropen, fts_build): Set close-on-exec flag. fts: make directory fds more robust * lib/fts.c (O_DIRECTORY): Let take care of this. (opendirat): Specify O_DIRECTORY, and add fallbacks for safety. backupfile, chdir-long, fts, savedir: make safer * lib/backupfile.c (includes): Use "dirent--.h", since numbered_backup can write to stderr during readdir. * lib/savedir.c (includes): Likewise. * lib/chdir-long.c (includes): Use "fcntl--.h", since openat emulation can write to stderr on failure. * lib/fts.c (includes) [!_LIBC]: Likewise for opendir and openat. * lib/getcwd.c: Document why opendir_safer is unused. * lib/glob.c: Likewise. * lib/scandir.c: Likewise. * lib/openat-proc.c: Likewise, for open_safer. * modules/backupfile (Depends-on): Add dirent-safer. * modules/savedir (Depends-on): Likewise. * modules/fts (Depends-on): Add dirent-safer and openat-safer. * modules/chdir-long (Depends-on): Add openat-safer. openat-safer: new module * modules/openat-safer: New file. * lib/openat-safer.c: Likewise. * m4/fcntl-safer.m4 (gl_OPENAT_SAFER): New macro. * lib/fcntl-safer.h (openat_safer): Declare. * lib/fcntl--.h (openat): Override. * MODULES.html.sh (File descriptor based I/O): Mention it. * lib/openat.h: Add double-inclusion guards. * lib/openat.c (includes): Only include "fcntl-safer.h", not "fcntl--.h", so we can implement openat. * modules/openat-safer-tests: New test. * tests/test-openat-safer.c: New file. dirent-safer: new module * modules/dirent-safer: New file. * lib/dirent--.h: Likewise. * lib/dirent-safer.h: Likewise. * lib/opendir-safer.c: Likewise. * m4/dirent-safer.m4: Likewise. * MODULES.html.sh (Enhancements for POSIX:2008): Mention it. * modules/dirent-safer-tests: New test. * tests/test-dirent-safer.c: New file. * lib/fdopendir.c (includes): Ensure fdopendir is also safe. fdopendir: optimize on mingw * lib/unistd.in.h (_gl_directory_name): New prototype. * lib/fchdir.c (_gl_directory_name): Implement it. (fchdir): Use it to simplify implementation. * lib/fdopendir.c (fdopendir) [REPLACE_FCHDIR]: Use metadata from fchdir, when available, to avoid calling [f]chdir(). fdopendir: split into its own module * lib/openat.c (fdopendir): Move... * lib/fdopendir.c: ...into new file. * modules/fdopendir: New module. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): New file. * modules/openat (Depends-on): Add fdopendir. * m4/openat.m4 (gl_FUNC_OPENAT): No longer need to check for fdopendir here. * modules/savedir (Depends-on): Only need fdopendir, not full openat. * lib/savedir.c (include): Use , not "openat.h". * lib/openat.h (fdopendir): Drop prototype. * lib/dirent.in.h (fdopendir): Provide prototype. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Add replacements. * modules/dirent (Makefile.am): Substitute them. * MODULES.html.sh (File system functions): Mention it. * doc/posix-functions/fdopendir.texi (fdopendir): Likewise. * modules/fdopendir-tests: New file. * tests/test-fdopendir.c: Likewise. fchdir: use more consistent macro convention * lib/fcntl.in.h (_gl_register_fd): Move declaration to unistd. * lib/sys_stat.in.h (rpl_fstat): Declare via make-time REPLACE_FCHDIR, rather than relying on config.h macros. * lib/unistd.in.h (fchdir): Move all fchdir internal declarations inside a single make-time REPLACE_FCHDIR block, rather than using the config.h FCHDIR_REPLACEMENT. * m4/fchdir.m4 (gl_FUNC_FCHDIR): REPLACE_FCHDIR was already AC_SUBST'd, also AC_DEFINE it. Don't define FCHDIR_REPLACEMENT. Manage fstat replacement. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Pick up REPLACE_FCHDIR. * modules/sys_stat (Files): Add m4/unistd_h.m4. (Makefile.am): Substitute REPLACE_FCHDIR. * lib/close.c (rpl_close): Use REPLACE_FCHDIR, not FCHDIR_REPLACEMENT. * lib/dup-safer.c (dup_safer): Likewise. * lib/dup2.c (rpl_dup2): Likewise. * lib/dup3.c (rpl_dup3): Likewise. * lib/open.c (rpl_open): Likewise. fchdir: simplify error handling, and support dup3 * modules/fchdir (Depends-on): Use strdup-posix, not strdup. Add stdbool, malloc-posix, realloc-posix. * lib/fchdir.c (struct dir_info_t): Delete saved_errno. (ensure_dirs_slot): Return false on allocation failure. (rpl_dup2): Delete. (_gl_register_dup): New function. (_gl_unregister_fd, rpl_opendir, rpl_dup): Update callers. (_gl_register_fd): Close fd on allocation failure. * lib/fcntl.in.h (_gl_register_fd): Update signature. * lib/unistd.in.h (_gl_register_dup) [FCHDIR_REPLACEMENT]: New prototype. (rpl_dup2_fchdir): Delete prototype. * lib/open.c (open): Update caller. * lib/dup2.c (dup2): Track fchdir metadata. * lib/dup3.c (dup3): Likewise. * m4/dup2.m4 (gl_REPLACE_DUP2): New macro. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Use it. 2009-09-02 Ralf Wildenhues * gnulib-tool (func_create_testdir, func_create_megatestdir): Use AC_CONFIG_HEADERS instead of AM_CONFIG_HEADER. Use AC_CONFIG_FILES and don't pass arguments to AC_OUTPUT. 2009-09-02 Bruno Haible * modules/mkdtemp (License): Relicense under LGPLv2+. Reported by Paolo Bonzini. 2009-09-02 Ralf Wildenhues Replace uses of obsolete autoconf macros in Jim's modules. The Autoconf macros AC_TRY_CPP, AC_TRY_COMPILE, AC_TRY_LINK and AC_TRY_RUN have been obsolete since Autoconf 2.55, and each use can evoke a warning from autoconf when run with -Wobsolete enabled. They were declared obsolete for good reasons (see the `AC_FOO_IFELSE vs AC_TRY_FOO' node in the Autoconf manual, recently renamed to `AC_ACT_IFELSE vs AC_TRY_ACT'), and we should not continue using the deprecated macros. * m4/d-type.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE): Replace obsolete Autoconf macros with modern counterparts. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/dos.m4 (gl_AC_DOS): Likewise. * m4/fpending.m4 (gl_FUNC_FPENDING): Likewise. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Likewise. * m4/getloadavg.m4 (gl_PREREQ_GETLOADAVG): Likewise. * m4/jm-winsz1.m4 (gl_WINSIZE_IN_PTEM): Likewise. * m4/link-follow.m4 (gl_AC_FUNC_LINK_FOLLOWS_SYMLINK): Likewise. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Likewise. * m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Likewise. * m4/mode_t.m4 (gl_PROMOTED_TYPE_MODE_T): Likewise. * m4/rename-dest-slash.m4 (gl_FUNC_RENAME_TRAILING_DEST_SLASH): Likewise. * m4/rename.m4 (gl_FUNC_RENAME): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/rpmatch.m4 (gl_PREREQ_RPMATCH): Likewise. * m4/st_dm_mode.m4 (AC_STRUCT_ST_DM_MODE): Likewise. * m4/stat-time.m4 (gl_STAT_TIME): Likewise. * m4/utimes-null.m4 (gl_FUNC_UTIMES_NULL): Likewise. 2009-09-01 Eric Blake fchdir: fix off-by-one bug in previous patch * lib/fchdir.c (rpl_fstat): Use correct bounds. (_gl_unregister_fd): Delete useless if. 2009-09-01 Daniel P. Berrange maint.mk: sort the list of syntax-check rules * top/maint.mk (syntax-check-rules): Sort syntax-check rules, so it's easier to get a sense of progress when the rules are run sequentially and take a long time. 2009-09-01 Simon Josefsson * modules/arpa_inet: Use $(MKDIR_P) instead of @MKDIR_P@. * modules/netinet_in: Likewise. * modules/sys_file: Likewise. * modules/sys_ioctl: Likewise. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_stat: Likewise. * modules/sys_time: Likewise. * modules/sys_times: Likewise. * modules/sys_utsname: Likewise. * modules/sys_wait: Likewise. 2009-09-01 Jim Meyering fts: help ensure that return values are not ignored * lib/fts_.h (__GNUC_PREREQ): Define. (__attribute_warn_unused_result__): Define. (fts_children, fts_close, fts_open, fts_read): Declare with __attribute_warn_unused_result__. fts: fts_close now fails also when closing a dir file descriptor fails * lib/fts.c (fts_close): Detect close failure, not just fchdir failure, and propagate to caller, along with errno. announce-gen: correct formatting in --help output * build-aux/announce-gen (usage): Move the one-line description in --help output "up", to where it belongs, just after Usage:. 2009-08-31 Eric Blake fchdir: port to mingw * m4/fchdir.m4 (gl_FUNC_FCHDIR): Check for mingw bug. * lib/open.c (open) [FCHDIR_REPLACEMENT]: If directories can't be opened, then use a substitute. * lib/sys_stat.in.h (fstat) [REPLACE_OPEN_DIRECTORY]: Declare replacement. * lib/fchdir.c (fstat) [REPLACE_OPEN_DIRECTORY]: Implement it. (_gl_register_fd): No need to check stat if open already filters all directories. (fchdir): Fix error condition to match POSIX. * modules/fchdir (Depends-on): Add sys_stat. * doc/posix-functions/open.texi (open): Document the limitation. * modules/fchdir-tests: New file. * tests/test-fchdir.c: Likewise. canonicalize: allow cross-testing from cygwin to mingw * modules/canonicalize-tests (configure.ac): Define HAVE_SYMLINK. (Makefile.am): Pass it through TESTS_ENVIRONMENT. * modules/canonicalize-lgpl-tests (configure.ac, Makefile.am): Likewise. * tests/test-canonicalize.sh: Also skip test if 'ln -s' works, but target does not support symlinks. * tests/test-canonicalize-lgpl.sh: Likewise. chown: avoid compilation warning on mingw * m4/chown.m4 (gl_FUNC_CHOWN): Recognize missing chown. * lib/chown.c (rpl_chown) [!HAVE_CHOWN]: Always return failure on mingw. * lib/lchown.c (lchown) [!HAVE_CHOWN]: Likewise. * modules/chown (Depends-on): Add errno. 2009-08-31 Stefano Lattarini (tiny change) * gnulib-tool: Fix test whether $CONFIG_SHELL has a working 'echo' command. 2009-08-31 Jim Meyering canonicalize: remove useless initialization * lib/canonicalize.c (canonicalize_filename_mode): Remove useless initialization of local, "end". 2009-08-30 Bruno Haible Fix an unnecessary error on Solaris 10 on NFSv3 file systems. * lib/set-mode-acl.c (qset_acl) [Solaris 10 new]: Treat EOPNOTSUPP like ENOSYS. 2009-08-30 Bruno Haible * tests/test-pipe-filter-ii1.sh: Prefer /usr/xpg6/bin/tr over /usr/xpg4/bin/tr when it exists. * tests/test-pipe-filter-gi1.sh: Likewise. 2009-08-30 Bruno Haible Work around deficient /usr/bin/id program on Solaris. * tests/test-file-has-acl.sh (ID): New variable. * tests/test-set-mode-acl.sh (ID): Likewise. * tests/test-copy-acl.sh (ID): Likewise. * tests/test-copy-file.sh (ID): Likewise. 2009-08-30 Bruno Haible New module 'xstriconveh'. * lib/xstriconveh.h: New file. * lib/xstriconveh.c: New file. * modules/xstriconveh: New file. 2009-08-30 Bruno Haible Make it easier to use mem_cd_iconveh. * lib/striconveh.h (iconveh_t): New type. (iconveh_open, iconveh_close): New declarations. (mem_cd_iconveh, str_cd_iconveh): Replace the three iconv_t arguments with a single 'const iconveh_t *' argument. * lib/striconveh.c (iconveh_open, iconveh_close): New functions. (mem_cd_iconveh, str_cd_iconveh): Replace the three iconv_t arguments with a single 'const iconveh_t *' argument. (mem_iconveh, str_iconveh): Use iconveh_open, iconveh_close. * tests/test-striconveh.c (main): Update. * NEWS: Mention the change. 2009-08-30 Bruno Haible * doc/posix-functions/iconv_open.texi: Mention indirect conversion problem. 2009-08-30 Bruno Haible Work around iconv_open problem on Solaris. * lib/iconv_open-solaris.gperf: New file. * lib/iconv_open.c (ICONV_FLAVOR_SOLARIS): New macro. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): Also handle Solaris. * modules/iconv_open (Files): Add lib/iconv_open-solaris.gperf. (Makefile.am): Add rule for iconv_open-solaris.h. Augment BUILT_SOURCES, MOSTLYCLEANFILES, MAINTAINERCLEANFILES, EXTRA_DIST. * doc/posix-functions/iconv_open.texi: Mention the Solaris problem. 2009-08-29 Jim Meyering maint.mk: remove more coreutils-specific targets; XZ_OPT=-9ev * top/maint.mk (cvs-check): Remove target; it was just an alias to the better-named vc-diff-check. (maintainer-distcheck): Remove rule. It was used only from the (alpha/beta/major) target, and all of its commands but one were coreutils-specific. (vc-dist): Remove rule. (alpha beta major): Run "$(MAKE) distcheck" explicitly. Run vc-diff-check, not vc-dist. Run $(MAKE) dist with XZ_OPT=-9ev. Note spelling, with "-". 2009-08-27 Bruno Haible * tests/test-bitrotate.c (main): Remove test that uses a shift count of 0. 2009-08-27 Bruno Haible * tests/test-func.c (main): Don't verify sizeof __func__ on SunPRO C compilers. * doc/func.texi: Document the SunPRO C bug. 2009-08-27 Bruno Haible Fix link error on Solaris. * tests/test-parse-duration.c (xstrdup): Remove function. 2009-08-26 Pádraig Brady ignore-value: handle pointer types, too * lib/ignore-value.h (__attribute__): Remove definition. (ignore_value): Remove use of "__attribute__ ((unused))" in favor of a more concise and more-often effective "(void) i" statement. (ignore_ptr): New function to suppress warnings from functions that return pointers, and to make it explicit that one function doesn't handle all cases. 2009-08-25 Bruno Haible dup2: work around a Linux bug. * m4/dup2.m4 (gl_FUNC_DUP2): Test for the Linux bug. * lib/dup2.c (rpl_dup2): Correct the return value if it is -EBADF. * doc/posix-functions/dup2.texi: Mention the Linux bug. Reported by Simon Josefsson. 2009-08-25 Jim Meyering libguestfs uses gnulib * users.txt: Add libguestfs. 2009-08-24 Eric Blake dup2, pipe2: fix some recent test failures on cygwin 1.5.x * lib/pipe2.c (includes): Add binary-io.h. * lib/dup2.c (rpl_dup2): Correct buggy errno value. 2009-08-24 Bruno Haible Tolerate declared but missing accept4 syscall. * lib/accept4.c (accept4): Invoke original accept4 function first, if available. * lib/sys_socket.in.h (accept4): If the function is already present, override it. * m4/accept4.m4 (gl_FUNC_ACCEPT4): Remove AC_LIBOBJ invocation. * modules/accept4 (Makefile.am): Compile accept4.c always. Reported by Paolo Bonzini and Eric Blake. 2009-08-23 Bruno Haible New module 'accept4'. * lib/sys_socket.in.h (accept4): New declaration. * lib/accept4.c: New file. * m4/accept4.m4: New file. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_H_DEFAULTS): Initialize GNULIB_ACCEPT4, HAVE_ACCEPT4. * modules/sys_socket (Makefile.am): Substitute GNULIB_ACCEPT4, HAVE_ACCEPT4. * modules/accept4: New file. * doc/glibc-functions/accept4.texi: Mention the new module. 2009-08-24 Jim Meyering progname: also set global program_invocation_name, when possible Before this change, a libtool-enabled program that calls glibc's error function would report the program name as "/abs/dir/.libs/lt-program_name" rather than the desired program_name. * modules/progname (configure.ac): Check for a declaration of program_invocation_name. * lib/progname.c: Include . (set_program_name) [HAVE_DECL_PROGRAM_INVOCATION_NAME]: Set program_invocation_name. 2009-08-23 Bruno Haible * lib/dup3.c: Include . 2009-08-23 Bruno Haible * lib/dup3.c (dup3): Test only once whether the system actually exists. * lib/pipe2.c (pipe2): Likewise. Suggested by Eric Blake. 2009-08-23 Bruno Haible Tolerate declared but missing dup3 syscall. * lib/dup3.c (dup3): Invoke original dup3 function first, if available. * lib/unistd.in.h (dup3): If the function is already present, override it. * m4/dup3.m4 (gl_FUNC_DUP3): Remove AC_LIBOBJ invocation. * modules/dup3 (Makefile.am): Compile dup3.c always. Reported by Paolo Bonzini. 2009-08-23 Bruno Haible Tolerate declared but missing pipe2 syscall. * lib/pipe2.c (pipe2): Invoke original pipe2 function first, if available. * lib/unistd.in.h (pipe2): If the function is already present, override it. * m4/pipe2.m4 (gl_FUNC_PIPE2): Remove AC_LIBOBJ invocation. * modules/pipe2 (Makefile.am): Compile pipe2.c always. Reported by Paolo Bonzini. 2009-08-23 Bruno Haible * lib/pipe2.c (pipe2): Move #ifs inside function. 2009-08-22 Joel E. Denny quotearg: document limitations of quote_these_too * lib/quotearg.c (quotearg_buffer_restyled): Add comments where those limitations are created. * lib/quotearg.h (set_char_quoting): Document that digits and letters that are special after backslash are not permitted. (quotearg_char): Cross-reference set_char_quoting documentation. 2009-08-23 Joel E. Denny quotearg: implement custom_quoting_style * lib/quotearg.c: (struct quoting_options): Add left_quote and right_quote fields. (set_custom_quoting): New public function. (quotearg_buffer_restyled): Add left_quote and right_quote arguments, handle them very much like locale quoting, and update all uses. (quotearg_n_custom): New public function. (quotearg_n_custom_mem): New public function. (quotearg_custom): New public function. (quotearg_custom_mem): New public function. * lib/quotearg.h: Prototype and document new public functions. (enum quoting_style): For escape_quoting_style and clocale_quoting_style, comment that QA_SPLIT_TRIGRAPHS is ignored even though they're otherwise like c_quoting_style. Add custom_quoting_style member and document with comparison to clocale_quoting_style. * tests/test-quotearg.c (custom_quotes): New array. (custom_results): New array. (main): Extend to test custom quoting. 2009-08-22 Joel E. Denny quotearg: fix right quote escaping when it's in quote_these_too * lib/quotearg.c (quotearg_buffer_restyled): Upon seeing a right quote, be sure to prepend only one backslash. * tests/test-quotearg.c (use_quote_double_quotes): New function. (main): Test it. 2009-08-22 Joel E. Denny quotearg-tests: test escaping of embedded locale quotes * tests/test-quotearg.c (struct result_strings): Add member for new input. (LQ_ENC, RQ_ENC, RQ_ESC): New macros. (inputs): Add new input. (results_g): Add expected results. (flag_results): Likewise. (locale_results): Likewise. (compare_strings): Check those. 2009-08-23 Bruno Haible Tests for module 'dup3'. * modules/dup3-tests: New file. * tests/test-dup3.c: New file. New module 'dup3'. * lib/unistd.in.h (dup3): New declaration. * lib/dup3.c: New file. * m4/dup3.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_DUP3 and HAVE_DUP3. * modules/unistd (Makefile.am): Substitute GNULIB_DUP3 and HAVE_DUP3. * modules/dup3: New file. * doc/glibc-functions/dup3.texi: Mention the new module. 2009-08-23 Bruno Haible Tweak the dup2 test. * tests/test-dup2.c (main): Create the test file empty. Verify that an out-of-range fd yields EBADF. Verify that after writing to /dev/null, the test file is still empty. Fix argument order of lseek. 2009-08-23 Bruno Haible Avoid test link errors when the modules getopt-gnu, gettext are used. * modules/getopt-posix-tests (Makefile.am): Define test_getopt_LDADD. Reported by Tom G. Christensen . 2009-08-23 Bruno Haible Fix getdtablesize() on mingw. * lib/getdtablesize.c (getdtablesize): Implement differently. * lib/unistd.in.h (getdtablesize): Improve comment. 2009-08-23 Bruno Haible New module 'mkostemp'. Based on Ulrich Drepper's 2007-08-10 change in glibc. * lib/stdlib.in.h (mksotemp): New declaration. * lib/mkostemp.c: New file, from glibc with modifications. * lib/tempname.h (GT_FILE): Remove outdated comment. (gen_tempname): Add flags argument. * lib/tempname.c (__GT_BIGFILE): Remove macro. (__GT_FILE): Map to 1. (small_open, large_open): Remove macros. (__gen_tempname): Add flags argument. Remove code for __GT_BIGFILE. * lib/mkstemp.c (mkstemp): Update. * lib/mkdtemp.c (mkdtemp): Likewise. * m4/mkostemp.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_MKOSTEMP, HAVE_MKOSTEMP. * modules/stdlib (Makefile.am): Substitute GNULIB_MKOSTEMP, HAVE_MKOSTEMP. * modules/mkostemp: New file, based on modules/mkstemp. * doc/glibc-functions/mkostemp.texi: Mention the new module. * NEWS: Mention the change. 2009-08-23 Bruno Haible * lib/pipe2.c (pipe2): Support O_TEXT, O_BINARY on all platforms. Reported by Eric Blake. 2009-08-23 Bruno Haible * lib/pipe2.c (pipe2): Fix test of fcntl's return value. Reported by Eric Blake. 2009-08-23 Bruno Haible * modules/fchdir (Depends-on): Use fcntl-h instead of fcntl. * modules/pipe2 (Depends-on): Likewise. 2009-08-23 Eric Blake fcntl-h: add O_TTY_INIT support * lib/fcntl.in.h (O_TTY_INIT): Support another POSIX macro. * tests/test-fcntl-h.c (o): Test it. * doc/posix-headers/fcntl.texi (fcntl.h): Update documentation. fcntl-h: rename from fcntl, in preparation for fcntl(2) * modules/fcntl: Move header replacement... * modules/fcntl-h: ...to new name, so as not to collide with like-named function. * tests/test-fcntl.c: Rename... * tests/test-fcntl-h.c: ...to this. Test FD_CLOEXEC. * modules/fcntl-tests: Rename... * modules/fcntl-h-tests: ...to this. Update test file name. * modules/chdir-long (Depends-on): Update clients. * modules/chdir-safer (Depends-on): Likewise. * modules/fcntl-safer (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/mkancesdirs (Depends-on): Likewise. * modules/mkdir-p (Depends-on): Likewise. * modules/open (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. * MODULES.html.sh (systems lacking POSIX:2008): Update name. * doc/posix-headers/fcntl.texi (fcntl.h): Update documentation. 2009-08-22 Bruno Haible * modules/binary-io (License): Relicense under LGPL. * modules/pipe2 (License): Likewise. 2009-08-22 Bruno Haible * lib/pipe-filter-ii.c (pipe_filter_ii_execute): Fix test of fcntl's return value. * lib/pipe-filter-gi.c (filter_init): Likewise. Reported by Eric Blake. 2009-08-22 Bruno Haible * lib/pipe.c (create_pipe): Use pipe2 instead of _pipe. * modules/pipe (Depends-on): Add pipe2. 2009-08-22 Bruno Haible Tests for module 'pipe2'. * modules/pipe2-tests: New file. * tests/test-pipe2.c: New file. New module 'pipe2'. * lib/unistd.in.h (pipe2): New declaration. * lib/pipe2.c: New file. * m4/pipe2.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_PIPE2 and HAVE_PIPE2. * modules/unistd (Makefile.am): Substitute GNULIB_PIPE2 and HAVE_PIPE2. * modules/pipe2: New file. * doc/glibc-functions/pipe2.texi: Mention the new module. 2009-08-22 Bruno Haible Reference some new glibc functions. * doc/glibc-functions/accept4.texi: New file. * doc/glibc-functions/dup3.texi: New file. * doc/glibc-functions/mkostemp.texi: New file. * doc/glibc-functions/pipe2.texi: New file. * doc/gnulib.texi (Glibc stdlib.h): Refer to mkostemp. (Glibc sys/socket.h): Refer to accept4. (Glibc unistd.h): Refer to dup3, pipe2. Reported by Eric Blake. 2009-08-22 Jim Meyering Bruno Haible annotate automake snippets with $(AM_V_GEN) and $(AM_V_at) This makes it so packages using automake-1.11's silent-rules option can print e.g., a single "GEN configmake.h" line, rather than the 30+ statements that perform the job. If you want to see the actual commands, you can still run "make V=1". * modules/alloca-opt: Add $(AM_V_GEN) and $(AM_V_at) prefixes so that make output is abbreviated when those variables are defined appropriately. * modules/argz: Likewise. * modules/arpa_inet: Likewise. * modules/byteswap: Likewise. * modules/configmake: Likewise. * modules/dirent: Likewise. * modules/errno: Likewise. * modules/fcntl: Likewise. * modules/float: Likewise. * modules/fnmatch: Likewise. * modules/getopt-posix: Likewise. * modules/glob: Likewise. * modules/iconv_open: Likewise. * modules/inttypes: Likewise. * modules/localcharset: Likewise. * modules/locale: Likewise. * modules/math: Likewise. * modules/netdb: Likewise. * modules/netinet_in: Likewise. * modules/poll: Likewise. * modules/posix_spawnp-tests: Likewise. * modules/sched: Likewise. * modules/search: Likewise. * modules/selinux-h: Likewise. * modules/signal: Likewise. * modules/spawn: Likewise. * modules/stdarg: Likewise. * modules/stdbool: Likewise. * modules/stddef: Likewise. * modules/stdint: Likewise. * modules/stdio: Likewise. * modules/stdlib: Likewise. * modules/string: Likewise. * modules/strings: Likewise. * modules/sys_file: Likewise. * modules/sys_ioctl: Likewise. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_stat: Likewise. * modules/sys_time: Likewise. * modules/sys_times: Likewise. * modules/sys_utsname: Likewise. * modules/sys_wait: Likewise. * modules/sysexits: Likewise. * modules/time: Likewise. * modules/unistd: Likewise. * modules/wchar: Likewise. * modules/wctype: Likewise. 2009-08-22 Jim Meyering announce-gen: detect write failure * build-aux/announce-gen: Add Coda at end. Remove equivalent-but-more-verbose block at top. 2009-08-19 Akim Demaille bootstrap: --help to stdout. * bootstrap (usage): Don't send --help to stderr. Use a here doc instead of a long string. 2009-08-21 Eric Blake test-popen-safer: split from test-popen * tests/test-popen.c (main): Move... * tests/test-popen.h: ...into new file. * tests/test-popen-safer2.c: New file. * modules/popen-tests (Files): Add test-popen.h. * modules/popen-safer-tests (Files): Add test-popen-safer2.c. Suggested by Bruno Haible. test-fcntl-safer: split from test-open * tests/test-open.c (main): Move... * tests/test-open.h: ...into new file. * tests/test-fcntl-safer.c: New file. * modules/open-tests (Files): Add test-open.h. * modules/fcntl-safer-tests: New file. Suggested by Bruno Haible. test-fopen-safer: split from test-fopen * tests/test-fopen.c (main): Move... * tests/test-fopen.h: ...into new file. * tests/test-fopen-safer.c: New file. * modules/fopen-tests (Files): Add test-fopen.h. * modules/fopen-safer-tests: New file. Suggested by Bruno Haible. 2009-08-21 Paolo Bonzini popen-safer: test O_CLOEXEC at run-time. * lib/popen-safer.c: Test O_CLOEXEC at run-time. 2009-08-21 Paolo Bonzini fcntl: move more flags to the header * lib/cloexec.c: Do not define FD_CLOEXEC here. * lib/popen-safer.c: Do not alias O_NOINHERIT to O_CLOEXEC here. * lib/fcntl.in.h: Do both things here. 2009-08-21 Jim Meyering consistently remove $@-t before redirecting to it * modules/argz: Remove $@-t and $@ before redirecting to the former. * modules/alloca-opt: Likewise. * modules/byteswap: Likewise. * modules/fnmatch: Likewise. * modules/getopt-posix: Likewise. * modules/glob: Likewise. * modules/poll: Likewise. * modules/posix_spawnp-tests: Likewise. * modules/sys_socket: Likewise. * modules/sysexits: Likewise. 2009-08-21 Eric Blake popen: simplify access to original popen * lib/popen.c (rpl_popen): No need to worry about popen being a macro. Reported by Bruno Haible. 2009-08-20 Eric Blake build: avoid some compiler warnings * lib/selinux-at.h: Use dir_fd, not dirfd, to avoid shadowing. * lib/exclude.c (fnmatch_pattern_has_wildcards): Use correct type. (new_exclude_segment, excluded_file_pattern_p) (excluded_file_name_p): Reduce scope. * lib/vasnprintf.c (decimal_point_char): Avoid warning on old-style declaration. 2009-08-20 Simon Josefsson * tests/test-exclude1.sh: Handle Windows EOL. * tests/test-exclude2.sh: Likewise. * tests/test-exclude3.sh: Likewise. * tests/test-exclude4.sh: Likewise. * tests/test-exclude5.sh: Likewise. * tests/test-exclude6.sh: Likewise. * tests/test-exclude7.sh: Likewise. 2009-08-19 Akim Demaille bootstrap: find sha1sum when named gsha1sum. * bootstrap (find_tool): New. ($SHA1SUM): New. Use it. 2009-08-20 Jim Meyering maint.mk: _header_without_use: fix a quoting bug and remove a bash'ism * top/maint.mk (_header_without_use): Use "\\\\", not "\\" in the sed expression that converts "." in a file name to "\." in the resulting regexp. Start with a dummy statement, so that prior shell variable definitions are expanded portably. Reported by Simon Josefsson. 2009-08-20 Paolo Bonzini Fix polling for writeability of a screen buffer. * lib/poll.c: Distinguish input and screen buffers for the Win32 implementation. * lib/select.c: Likewise. 2009-08-19 Eric Blake popen-safer: prevent popen from clobbering std descriptors * modules/popen-safer: New file. * lib/popen-safer.c: Likewise. * m4/stdio-safer.m4 (gl_POPEN_SAFER): New macro. * lib/stdio--.h (popen): Provide override. * lib/stdio-safer.h (popen_safer): Provide declaration. * tests/test-popen.c (includes): Partially test this. * modules/popen-safer-tests: New file, for more tests. * tests/test-popen-safer.c: Likewise. * MODULES.html.sh (file stream based Input/Output): Mention it. tests: test some of the *-safer modules * modules/fopen-safer (Depends-on): Add fopen. * modules/fcntl-safer (Depends-on): Add fcntl. * modules/stdlib-safer (Depends-on): Add stdlib. (configure.ac): Set indicator. * modules/unistd-safer (configure.ac): Likewise. * modules/tmpfile-safer (configure.ac): Likewise. (Depends-on): Add tmpfile. * lib/stdio--.h (fopen, tmpfile): Don't override unless module is active. * tests/test-fopen.c (includes): Test safer versions when they are in use. * tests/test-open.c (includes): Likewise. popen: fix cygwin 1.5 bug when stdin closed * doc/posix-functions/popen.texi (popen): Document cygwin bugs. * modules/popen: New file. * modules/popen-tests: Likewise. * tests/test-popen.c: Likewise. * m4/popen.m4: Likewise. * lib/popen.c: Likewise. * lib/stdio.in.h (popen): New declaration. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add popen. * modules/stdio (Makefile.am): Likewise. * MODULES.html.sh (systems lacking POSIX:2008): Mention it. 2009-08-17 Joel E. Denny maint.mk: give full control over update-copyright exclusions * top/maint.mk (VC_LIST_EXCEPT): Instead of ChangeLog, use ${VC_LIST_EXCEPT_DEFAULT-ChangeLog} as the default exclusion. (update-copyright): Don't force inclusion of top-level ChangeLog. Don't force exclusion of all COPYING files, but make them the default exclusion instead. 2009-08-16 Bruno Haible Fix test failures on Solaris 10. * tests/uniconv/test-u8-conv-from-enc.c (main): Disable autodetect_jp tests when Solaris iconv() is used. * tests/uniconv/test-u16-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-strconv-from-enc.c (main): Likewise. 2009-08-16 Bruno Haible Fix test failures on Solaris 10. * tests/test-pipe-filter-ii1.sh: Determine the filename of a working 'tr' program and pass it as first argument. * tests/test-pipe-filter-gi1.sh: Likewise. * tests/test-pipe-filter-ii1.c (main): Except the filename of a 'tr' program as first argument. * tests/test-pipe-filter-gi1.c (main): Likewise. 2009-08-16 Eric Blake fpurge: fix previous commits * modules/fpurge (Makefile.am): Make replacement conditional, partially reverting 2007-04-29 change; missed in previous attempt. * m4/fpurge.m4 (gl_FUNC_FPURGE): Also compile fpurge.c when fpurge is missing. 2009-08-16 Bruno Haible Clarify fpurge's effect on the file position. * lib/stdio.in.h (fpurge): Specify the file position after fpurge. * tests/test-fpurge.c (main): Make a second pass for checking the file position. 2009-08-16 Bruno Haible * m4/fpurge.m4 (gl_FUNC_FPURGE): Don't compile fpurge.c if only the declaration of fpurge is missing. * tests/test-fpurge.c (main): Check that the file has not more contents than expected. Close the file before removing it. 2009-08-15 Eric Blake fpurge: don't wrap working cygwin implementation * lib/fpurge.c (fpurge): Fix comment typo. * m4/fpurge.m4 (gl_FUNC_FPURGE): Detect BSD bug, allowing cygwin 1.7 to avoid replacement. * tests/test-fpurge.c (main): Enhance test. 2009-08-15 Eric Blake and Jim Meyering test-update-copyright: skip if perl is insufficient * tests/test-update-copyright.sh: Failure to run maintainer tool should not cause testsuite failure on cygwin 1.5. 2009-08-14 Eric Blake doc: mention more functions added in cygwin 1.7.0 * doc/posix-headers/limits.texi (limits.h): Update for recent cygwin additions. * doc/posix-headers/wordexp.texi (wordexp.h): Likewise. * doc/posix-functions/wordexp.texi (wordexp): Likewise. * doc/posix-functions/wordfree.texi (wordfree): Likewise. * doc/posix-functions/setlocale.texi (setlocale): Likewise. * doc/posix-functions/nl_langinfo.texi (nl_langinfo): Likewise. 2009-08-14 Eric Blake maint.mk: simplify update-copyright rule * top/maint.mk (update-copyright-local): Delete, and document how to do it in cfg.mk instead. (update-copyright-exclude-regexp): Delete, and document how to do it in .x-update-copyright instead. (update-copyright): Simplify, thanks to VC_LIST_EXCEPT. Don't exclude ChangeLog. 2009-08-14 Bruno Haible * m4/wchar.m4 (gl_WCHAR_H): Undo invalid optimization in last commit. 2009-08-14 Joel E. Denny maint.mk: support update-copyright-env * top/maint.mk (update-copyright-env): Define place-holder. (update-copyright): Expand $(update-copyright-env) before invoking update-copyright. 2009-08-14 Joel E. Denny update-copyright: implement forced reformatting * build-aux/update-copyright: Implement and document UPDATE_COPYRIGHT_FORCE. * tests/test-update-copyright.sh: Test it. 2009-08-14 Eric Blake and Bruno Haible stddef: fix NetBSD 5.0 NULL bug, rather than working around it * tests/test-locale.c: Revert previous patch related to NULL. * tests/test-stdio.c: Likewise. * tests/test-stdlib.c: Likewise. * tests/test-string.c: Likewise. * tests/test-unistd.c: Likewise. * modules/time-tests (Depends-on): Add verify. * modules/wchar-tests (Depends-on): Likewise. * tests/test-time.c: Test for NULL compliance. * tests/test-wchar.c: Likewise. * modules/locale (Depends-on): Add stddef. * modules/stdio (Depends-on): Likewise. * modules/stdlib (Depends-on): Likewise. * modules/string (Depends-on): Likewise. * modules/time (Depends-on): Likewise. * modules/unistd (Depends-on): Likewise. * modules/wchar (Depends-on): Likewise. * lib/locale.in.h (includes): Use to fix NULL. * lib/stdlib.in.h (includes): Likewise. * lib/string.in.h (includes): Likewise. * lib/time.in.h (includes): Likewise. * lib/unistd.in.h (includes): Likewise. * m4/locale_h.m4 (gl_LOCALE_H): Replace locale.h if stddef.h was replaced. * m4/wchar.m4 (gl_WCHAR_H): Likewise. * m4/stddef_h.m4: New file. * modules/stddef: Likewise. * lib/stddef.in.h: Likewise. * modules/stddef-tests: Likewise. * tests/test-stddef.c: Likewise. * MODULES.html.sh (Basic types ): Mention new module. * doc/posix-headers/stddef.texi (stddef.h): Document the bug. * doc/posix-headers/locale.texi (locale.h): Likewise. * doc/posix-headers/stdio.texi (stdio.h): Likewise. * doc/posix-headers/stdlib.texi (stdlib.h): Likewise. * doc/posix-headers/string.texi (string.h): Likewise. * doc/posix-headers/time.texi (time.h): Likewise. * doc/posix-headers/unistd.texi (unistd.h): Likewise. * doc/posix-headers/wchar.texi (wchar.h): Likewise. 2009-08-14 Eric Blake doc: improve git diff of texinfo files * .gitattributes: Add rule for *.texi files, with hint on how to use it. Copied from m4, and based on a report by Bruno Haible. 2009-08-14 Bruno Haible Disable multithread support by default on Cygwin 1.5.x for real. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): Fix last commit. 2009-08-14 Joel E. Denny update-copyright: much ado about intervals * build-aux/update-copyright: Implement and document UPDATE_COPYRIGHT_USE_INTERVALS to control expansion and collapse of copyright year intervals. Also, document UPDATE_COPYRIGHT_YEAR. * tests/test-update-copyright.sh: Test it. update-copyright: convert 2-digit to 4-digit years * build-aux/update-copyright: Implement and document. * tests/test-update-copyright.sh: Update. 2009-08-14 Jim Meyering test-exclude: avoid coreutils "make check" failure * tests/test-exclude.c (ARGMATCH_DIE_DECL) [ARGMATCH_DIE_DECL]: Define, just as in test-argmatch.c. 2009-08-13 Eric Blake test-dup2: fix bad assumption * tests/test-dup2.c (main): Tolerate leaked fds from environment. Reported by Peter Breitenlohner . test-version-etc: fix CRLF portability issue * tests/test-version-etc.sh: Use tr, not sed, as not all sed recognize \r. * tests/test-argp-version-etc-1.sh: Likewise. getopt: update client modules * modules/argp (Depends-on): Use getopt-gnu. * modules/git-merge-changelog (Depends-on): Likewise. * modules/long-options (Depends-on): Likewise. * modules/xstrtol (Depends-on): Likewise. 2009-08-13 Simon Josefsson * tests/test-version-etc.sh: Don't fail on different project/version. Don't fail on CRLF differences. Rewrite to use multiple -e instead of multiple sed forks, suggested by Eric Blake . * tests/test-argp-version-etc-1.sh: Likewise. 2009-08-13 Simon Josefsson * tests/test-version-etc.sh: Don't fail on different project/version. 2009-08-12 Bruno Haible Tests for modules 'getopt-posix', 'getopt-gnu'. * modules/getopt-posix-tests: New file. * tests/test-getopt.c: New file. * tests/test-getopt.h: New file. * tests/test-getopt_long.h: New file. New modules 'getopt-posix', 'getopt-gnu'. * modules/getopt-gnu: New file, renamed from modules/getopt. * modules/getopt-posix: New file. * modules/getopt: Turn into an obsolete alias for getopt-gnu. * m4/getopt.m4 (gl_FUNC_GETOPT_POSIX, gl_FUNC_GETOPT_GNU): New macros. (gl_GETOPT): Remove macro. (gl_GETOPT_CHECK_HEADERS): Do some checks only for gl_FUNC_GETOPT_GNU. Disable the test against BSD systems that declare optreset. Test against mingw bug. Test against lack of support of optional arguments on many platforms. * doc/glibc-headers/getopt.texi: Update module name and list of relevant platforms. * doc/posix-functions/getopt.texi: Mention modules 'getopt-posix' and 'getopt-gnu' and more portability problems. * NEWS: Mention the changes. 2009-08-12 Bruno Haible Ensure that optarg etc. get declared by . * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Require AC_USE_SYSTEM_EXTENSIONS. * modules/getopt (Depends-on): Add 'extensions'. 2009-08-12 Bruno Haible Avoid test link errors. * modules/pipe-filter-ii-tests (Makefile.am): Define test_pipe_filter_ii1_LDADD and test_pipe_filter_ii2_main_LDADD. * modules/pipe-filter-gi-tests (Makefile.am): Define test_pipe_filter_gi1_LDADD and test_pipe_filter_gi2_main_LDADD. Reported by Tom G. Christensen . 2009-08-12 Bruno Haible * m4/getopt.m4 (gl_REPLACE_GETOPT): New macro, was called gl_GETOPT_SUBSTITUTE before. (gl_GETOPT): Use it. * m4/argp.m4 (gl_ARGP): Update. Reported by Sergey Poznyakoff. * m4/getopt.m4: Reorder macros. (gl_GETOPT): Inline gl_GETOPT_SUBSTITUTE. (gl_GETOPT_SUBSTITUTE): Remove macro. 2009-08-12 Sergey Poznyakoff Minor improvement in gitlog-to-changelog * build-aux/gitlog-to-changelog: New option `--format' makes output format string configurable. 2009-08-12 Sergey Poznyakoff Optimize exclude: use hash tables for non-wildcard patterns. * lib/exclude.c: Include hash.h and mbuiter.h (struct exclude_pattern, exclude_segment): New data types. (struct exclude): Rewrite. (fnmatch_pattern_has_wildcards): New function. (new_exclude_segment, free_exclude_segment): New functions. (excluded_file_pattern_p, excluded_file_name_p): New functions. (excluded_file_name, add_exclude): Rewrite using new struct exclude. * lib/exclude.h (is_fnmatch_pattern): New prototype. * modules/exclude: Depend on hash and mbuiter. * modules/exclude-tests: New file. * tests/test-exclude.c: New file. * tests/test-exclude1.sh: New file. * tests/test-exclude2.sh: New file. * tests/test-exclude3.sh: New file. * tests/test-exclude4.sh: New file. * tests/test-exclude5.sh: New file. * tests/test-exclude6.sh: New file. * tests/test-exclude7.sh: New file. 2009-08-12 Bruno Haible Ensure that getopt() gets declared by . * lib/unistd.in.h: Conditionally include getopt.h. * m4/getopt.m4 (gl_GETOPT_SUBSTITUTE): Require gl_UNISTD_H_DEFAULTS. Set GNULIB_UNISTD_H_GETOPT. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_UNISTD_H_GETOPT. * modules/unistd (Makefile.am): Substitute GNULIB_UNISTD_H_GETOPT. 2009-08-12 Bruno Haible Clarify logic. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS, gl_GETOPT_IFELSE): Use gl_replace_getopt instead of GETOPT_H. 2009-08-12 Bruno Haible * m4/getopt.m4: Add comments. 2009-08-12 Bruno Haible Disable multithread support by default on Cygwin 1.5.x. * m4/threadlib.m4 (gl_THREADLIB_EARLY_BODY): On Cygwin 1.5.x and older, set gl_use_threads=no if not specified otherwise. 2009-08-11 Bruno Haible Avoid compilation error on NetBSD 5.0. * tests/test-locale.c: Write sizeof (NULL) instead of sizeof NULL. * tests/test-stdio.c: Likewise. * tests/test-stdlib.c: Likewise. * tests/test-string.c: Likewise. * tests/test-unistd.c: Likewise. Reported by Greg Troxel at . 2009-08-11 Bruno Haible * modules/dup2-tests (Depends-on): Remove close. Undo 2009-07-19 commit. * modules/acl-tests (Depends-on): Remove close. * modules/binary-io-tests (Depends-on): Likewise. * modules/closein-tests (Depends-on): Likewise. * modules/flock-tests (Depends-on): Likewise. * modules/fsync-tests (Depends-on): Likewise. * modules/lseek-tests (Depends-on): Likewise. * modules/pipe-tests (Depends-on): Likewise. * modules/posix_spawn-tests (Depends-on): Likewise. * modules/posix_spawnp-tests (Depends-on): Likewise. * modules/stat-time-tests (Depends-on): Likewise. * modules/yesno-tests (Depends-on): Likewise. 2009-08-10 Bruno Haible * lib/vasnprintf.c (DCHAR_SET): Undefine at the end. 2009-08-10 Bruno Haible Fix a gcc warning. * lib/write.c (rpl_write): Cast result of _get_osfhandle. 2009-08-10 Bruno Haible Don't optimize AC_LIBOBJs, as they may appear in different contexts. * m4/close.m4 (gl_REPLACE_CLOSE): Execute AC_LIBOBJ unconditionally, not only the first time. * m4/fclose.m4 (gl_REPLACE_FCLOSE): Likewise. * m4/open.m4 (gl_REPLACE_OPEN): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Execute AC_LIBOBJ when REPLACE_STRSTR is 1, not only the first time. 2009-08-10 Bruno Haible Make it possible to use module 'gethostname' without module 'close'. * lib/unistd.in.h (close): Evoke a link error only if UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS is set. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS. * modules/unistd (Makefile.am): Substitute UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS. * lib/sys_ioctl.in.h (ioctl): Evoke a link error only if SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS is set. * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H_DEFAULTS): Initialize SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS. * modules/sys_ioctl (Makefile.am): Substitute SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS. * modules/socket (configure.ac): On native Windows, set UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS and SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS. Reported by Sam Steingold . 2009-08-10 Bruno Haible * m4/close.m4 (gl_FUNC_CLOSE): Add comment. * modules/ioctl (configure.ac): Likewise. 2009-08-10 Bruno Haible Avoid collision between gnulib wrapper and libintl wrapper. * lib/stdio-write.c (printf): Don't define if a printf wrapper is already defined in intl/printf.c. (vprintf): Test REPLACE_VPRINTF_POSIX, not REPLACE_VFPRINTF_POSIX. (vfprintf): Test REPLACE_VFPRINTF_POSIX, not REPLACE_VPRINTF_POSIX. 2009-08-09 Bruno Haible Make really self-contained, also on Solaris 10. * lib/sys_select.in.h: Include . * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Test also against Solaris 10 problem. * tests/test-sys_select.c (main): Add check that FD_ZERO can be used. * doc/posix-headers/sys_select.texi: Mention the Solaris 10 problem. Reported by Jim Meyering. 2009-08-09 Bruno Haible Avoid warnings from 'aclocal' that are due to a use of macro name AM_XGETTEXT_OPTION that is not defined in automake. * modules/argp (configure.ac): Hide use of AM_XGETTEXT_OPTION from automake. * modules/error (configure.ac): Likewise. * modules/propername (configure.ac): Likewise. * modules/vasprintf (configure.ac): Likewise. * modules/verror (configure.ac): Likewise. * modules/xprintf (configure.ac): Likewise. * modules/xvasprintf (configure.ac): Likewise. 2009-08-08 Bruno Haible Avoid compilation error in C++ mode. * lib/gettimeofday.c (rpl_gettimeofday): Cast timezone argument. Reported by Sam Steingold . 2009-08-08 Bruno Haible * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Define HOST_NAME_MAX also for the various Unix platforms. * doc/posix-headers/limits.texi: Update platforms list regarding HOST_NAME_MAX. Reported by Tom G. Christensen . 2009-08-07 Jim Meyering selinux-at: fix typo in a comment * lib/selinux-at.h: s/getfileconat/getfilecon/ in a comment. Spotted by Paolo Bonzini. selinux-at: remove redundant m4 code, add documentation * modules/selinux-at (configure.ac): Remove redundant code. LIB_SELINUX is already set via the dependent module, selinux-h. (Include): Add quotes around selinux-at.h. * lib/selinux-at.h: Add documentation. Reported by Bruno Haible in http://marc.info/?l=gnulib-bug&m=124958988300749 2009-08-07 Bruno Haible Avoid link error on MacOS X 10.3 and 10.4. * lib/argp-ba.c (argp_program_bug_address): Explicitly zero-initialize on non-ELF systems. * lib/argp-pv.c (argp_program_version): Likewise. Reported by Simon Josefsson. 2009-08-07 Simon Josefsson * tests/test-version-etc.sh: Use $EXEEXT. 2009-08-06 Joel E. Denny update-copyright: update documentation to point to maint.mk * build-aux/update-copyright: Here. 2009-08-06 Jim Meyering maint.mk: support update-copyright-local * top/maint.mk (update-copyright-local): Define place-holder. (update-copyright): Depend on $(update-copyright-local). 2009-08-06 Jim Meyering selinux-at: new module Initially written for coreutils, this module will soon be used by findutils, too. * MODULES.html.sh [Misc]: Add selinux-at. * lib/selinux-at.h: New file, from coreutils. * lib/selinux-at.c: Likewise. * modules/selinux-at: Likewise. (License): Change from LGPL to GPL, since it depends on the GPL'd openat module. doc: update README * README: Remove references to cogito. Remove cvs-repo-updating instructions from 2007. Don't imply that CVS is better if you have limited disk space. 2009-08-05 Joel E. Denny update-copyright: support C-style comments * build-aux/update-copyright: Implement and document. * tests/test-update-copyright.sh: Test. 2009-08-05 Joel E. Denny update-copyright: support omitted "(C)" * build-aux/update-copyright: Implement and document. Also, allow variable whitespace before "(C)". * tests/test-update-copyright.sh: Test. 2009-08-05 Joel E. Denny update-copyright: don't trip on non-FSF copyright statements * build-aux/update-copyright: Fix so that the first correctly formatted FSF copyright statement is recognized no matter what appears before it. Update documentation. * tests/test-update-copyright.sh: Test that. 2009-08-05 Joel E. Denny update-copyright: clean up code a little * build-aux/update-copyright: Append "_re" to the name of any variable holding a regular expression. Replace "old" and "new" with "stmt" in variable names. Do not accept 2-digit UPDATE_COPYRIGHT_YEAR, which was not handled correctly. Format code more consistently. 2009-08-05 Joel E. Denny update-copyright-tests: improve portability * tests/test-update-copyright.sh: Use cmp if diff cannot handle -u or /dev/null. Suggested by Jim Meyering and Eric Blake. 2009-08-03 Joel E. Denny update-copyright: support @copyright{} and © * build-aux/update-copyright: Implement and document. * tests/test-update-copyright.sh: Test. 2009-08-04 Jim Meyering update-copyright-tests: correctly test EOL=\r\n handling * tests/test-update-copyright.sh: Put \r at the end of some lines for the dos-eol tests. Based on a patch by Joel E. Denny. maint.mk: make update-copyright exclusion list more configurable * top/maint.mk (update-copyright): Default to excluding COPYING, but allow an override, in case someone does want to update that file. maint.mk: don't update copyright date in COPYING * top/maint.mk (update-copyright): Exclude COPYING. maint.mk: add a copyright-updating rule * top/maint.mk (update-copyright): New rule. Derived from coreutils/Makefile.am. update-copyright: rename some variables * build-aux/update-copyright: Rename a few variables for clarity. Tweak syntax. List Joel E. Denny as coauthor. 2009-08-03 Joel E. Denny update-copyright: fix bug for 2-digit last year and add tests * build-aux/update-copyright: Fix bug. Use UPDATE_COPYRIGHT_YEAR from environment as current year if specified. * modules/update-copyright-tests: New * tests/test-update-copyright.sh: New. 2009-07-31 Joel E. Denny update-copyright: handle leading tabs in line prefix * build-aux/update-copyright: Count leading tabs as 8 spaces when computing margin. This helps with the formatting of ChangeLogs, for example. Fix documentation a little. 2009-07-31 Joel E. Denny update-copyright: support EOL=\r\n * build-aux/update-copyright: Implement that. 2009-07-31 Joel E. Denny update-copyright: automatically format copyright statements * build-aux/update-copyright: Implement that. Also, be a little more predictable and safer by always failing when the full copyright format is not perfectly recognized as an unbroken whole. Discussed at . Rewrite documentation. 2009-08-03 Bruno Haible * m4/iconv.m4 (AM_ICONV): Fix displayed message with autoconf-2.64. 2009-08-02 Bruno Haible Tests for module 'uname'. * modules/uname-tests: New file. * tests/test-uname.c: New file. New module 'uname'. * lib/uname.c: New file. * m4/uname.m4: New file. * modules/uname: New file. * doc/posix-functions/uname.texi: Mention the new module. 2009-08-02 Bruno Haible Tests for module 'sys_utsname'. * modules/sys_utsname-tests: New file. * tests/test-sys_utsname.c: New file. New module 'sys_utsname'. * lib/sys_utsname.in.h: New file, based on glibc's . * m4/sys_utsname_h.m4: New file. * modules/sys_utsname: New file. * doc/posix-headers/sys_utsname.texi: Mention the new module. 2009-08-02 Bruno Haible Implicitly initialize the sockets library. * lib/gethostname.c: Include sockets.h. (rpl_gethostname): Invoke gl_sockets_startup. * lib/socket.c: Include sockets.h. (rpl_socket): Invoke gl_sockets_startup. * modules/gethostname (Depends-on): Add sockets. * modules/socket (Depends-on): Likewise. * tests/test-poll.c: Don't include sockets.h. (main): Don't invoke gl_sockets_startup. * tests/test-select.c: Don't include sockets.h. (main): Don't invoke gl_sockets_startup. 2009-08-02 Bruno Haible Allow multiple calls to gl_sockets_startup. * lib/sockets.c (initialized_sockets_version): New variable. (gl_sockets_startup): Do nothing if already called for this or a higher version. (gl_sockets_cleanup): Reset initialized_sockets_version. 2009-08-03 Simon Josefsson * tests/test-argp-version-etc-1.sh: Use EXEEXT. Don't fail on different project/version. 2009-08-02 Paolo Bonzini Bruno Haible Tests for module 'pipe-filter-gi'. * modules/pipe-filter-gi-tests: New file. * tests/test-pipe-filter-gi1.sh: New file. * tests/test-pipe-filter-gi1.c: New file. * tests/test-pipe-filter-gi2.sh: New file. * tests/test-pipe-filter-gi2-main.c: New file. * tests/test-pipe-filter-gi2-child.c: New file. New module 'pipe-filter-gi'. * lib/pipe-filter-gi.c: New file. * modules/pipe-filter-gi: New file. 2009-08-02 Bruno Haible Paolo Bonzini Tests for module 'pipe-filter-ii'. * modules/pipe-filter-ii-tests: New file. * tests/test-pipe-filter-ii1.sh: New file. * tests/test-pipe-filter-ii1.c: New file. * tests/test-pipe-filter-ii2.sh: New file. * tests/test-pipe-filter-ii2-main.c: New file. * tests/test-pipe-filter-ii2-child.c: New file. New module 'pipe-filter-ii'. * lib/pipe-filter.h: New file. * lib/pipe-filter-ii.c: New file. * lib/pipe-filter-aux.h: New file. * modules/pipe-filter-ii: New file. 2009-08-02 Simon Josefsson * lib/gc-libgcrypt.c: Change copyright to FSF. * lib/gc-gnulib.c: Likewise. 2009-08-02 Martin Lambers (tiny change) * lib/gethostname.c: Include limits.h. 2009-08-02 Simon Josefsson Bruno Haible Ensure HOST_NAME_MAX as part of the gethostname module. * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): On native Windows platforms, define also HOST_NAME_MAX. * tests/test-gethostname.c: Include . (main): Check also HOST_NAME_MAX. * doc/posix-headers/limits.texi: Document the mingw problem. 2009-08-02 Bruno Haible * lib/gethostname.c (gethostname): Fix handling of large len argument. Add comments. 2009-03-31 Simon Josefsson * lib/gethostname.c: Add Windows wrapper. * m4/gethostname.m4: Look for gethostname in -lws2_32. * modules/gethostname: Depend on sys_socket & errno, for also added lib/w32sock.h. Add GETHOSTNAME_LIB link directive. * modules/gethostname-tests: Link to @GETHOSTNAME_LIB@. 2009-07-31 Jim Meyering getloadavg: fix symbol name in comment * lib/getloadavg.c: Correct a typo I introduced when adding comments to Matt's change: s/NLIST_POINTER/N_NAME_POINTER/. Matt Kraai spotted the problem. 2009-07-29 Matt Kraai getloadavg: check whether n_name is a pointer, for QNX 6.4.1 * lib/getloadavg.c (getloadavg): Use the strcpy-into-nlist.n_name code also if ! defined N_NAME_POINTER. * m4/getloadavg.m4 (gl_GETLOADAVG): Add a link-test for N_NAME_POINTER. This is required on QNX 6.4.1, where /usr/include/nlist.h exists, but the n_name member is a 12-byte array. 2009-07-29 Joel E. Denny update-copyright: generalize comment handling * build-aux/update-copyright: Handle copyright statements within more comment styles. Document usage. Report any file with an external copyright holder or parse failure. 2009-07-29 Jim Meyering mktime: correct setting of REPLACE_MKTIME * m4/mktime.m4 (gl_FUNC_MKTIME): Set REPLACE_MKTIME=0, when required. update-copyright: new module * modules/update-copyright: New file. * build-aux/update-copyright: New file. * MODULES.html.sh (maint+release support): Add update-copyright. 2009-07-27 Bruno Haible Fix compilation error when is used and mktime is replaced. * lib/time.in.h (mktime): New declaration. * m4/mktime.m4 (gl_FUNC_MKTIME): Require gl_HEADER_TIME_H_DEFAULTS. Set REPLACE_MKTIME instead of defining mktime in config.h. * m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): Initialize REPLACE_MKTIME. * modules/time (Makefile.am): Substitute REPLACE_MKTIME. Reported by Ross McFarland . 2009-07-27 Bruno Haible * lib/math.in.h (cosl, logl, sinl): Undefine before declaring it. Reported by Matt Kraai . 2009-07-25 Jim Meyering maint.mk: avoid warnings about missing files * top/maint.mk (PREV_VERSION): Suppress stderr, to hide a diagnostic when .prev-version does not exist. (_cfg_mk): Define, so it can be empty when cfg.mk does not exist. (syntax-check-rules): Use $(_cfg_mk) to avoid a diagnostic about nonexistent cfg.mk. Suggestions from Simon Josefsson. 2009-07-25 Bruno Haible * lib/math.in.h (cosl, logl, sinl): Don't declare if they are already defined as macros. Needed on QNX 6.4.1. Reported by Matt Kraai . 2009-07-23 Jim Meyering maint.mk: invoke "make dist" with a working value of XZ_OPT * top/maint.mk (vc-dist): Use no "-" in the value of XZ_OPT. 2009-07-22 Matt Kraai (tiny change) Make fseeko.c compile on QNX. * lib/fseeko.c (rpl_fseeko): Use the numerical value of _MWRITE. 2009-07-22 Peter Simons C++: wrap md2,md5,sha1,etc. function declarations in extern "C" scope * lib/md2.h [__cplusplus]: Wrap declarations in extern "C" scope. * lib/md4.h: Likewise. * lib/md5.h: Likewise. * lib/sha1.h: Likewise. * lib/sha256.h: Likewise. * lib/sha512.h: Likewise. tests-sha1: don't assign literal string to 'char *' variable * tests/test-sha1.c (main): Declare locals with "const" to match attributes of the right hand side. 2009-07-21 Eric Blake dup2: fix more mingw problems * lib/dup2.c (rpl_dup2) [_WIN32]: Avoid hanging when duplicating fd to itself. * doc/posix-functions/dup2.texi (dup2): Document the bug. * lib/unistd.in.h (dup2) [REPLACE_FCHDIR]: Avoid name collision. * lib/fchdir.c (dup2): Manage preprocessor macros correctly. (rpl_dup2_fchdir): Rename from rpl_dup2, and let dup2 module take care of mingw bugs. 2009-07-21 Jim Meyering vc-list-files: avoid failure when /bin/sh is dash * build-aux/vc-list-files: Avoid a shell portability problem with dash. On some Debian based systems, /bin/sh is a symlink to dash, and running this command would omit the "/" following each 'tests' prefix: dash -x build-aux/vc-list-files -C . tests That is because bash and dash work differently: $ for i in bash dash; do $i -c 'a=odd; a=ok b=$a; echo '$i' $b'; done bash ok dash odd 2009-07-21 Eric Blake dup2-tests: test previous patch * modules/dup2-tests: New file. * tests/test-dup2.c: Likewise. * tests/test-open.c (main): Avoid unspecified behavior. * tests/test-pipe.c (child_main): Use dup2 semantics to simplify test. dup2: work around mingw and cygwin 1.5 bug * m4/dup2.m4 (gl_FUNC_DUP2): Detect mingw bug. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness. * modules/unistd (Makefile.am): Substitute it. * lib/unistd.in.h (dup2): Declare the replacement. * lib/dup2.c (dup2) [REPLACE_DUP2]: Implement it. * doc/posix-functions/dup2.texi (dup2): Document the bugs. * lib/fchdir.c (rpl_dup2): Don't collide with mingw replacement. * modules/execute (Depends-on): Add dup2. * modules/fseterr (Depends-on): Likewise. * modules/pipe (Depends-on): Likewise. * modules/posix_spawn-internal (Depends-on): Likewise. 2009-07-21 Bruno Haible * modules/.gitattributes: New file. 2009-07-20 Bruno Haible * tests/test-pipe.c (BACKUP_STDERR_FILENO): New macro. (main): Use it. 2009-07-20 Eric Blake test-pipe: make a bit more robust. * tests/test-pipe.c (myerr): Allow error messages regardless of what we do to stderr. (test_pipe): Rearrange to avoid deadlock. (child_main): Try a larger read, to ensure we avoided deadlock. * lib/pipe.c (create_pipe) [_WIN32]: Fix comment. * lib/pipe.h (create_pipe_bidi): Document potential for deadlock if misused. 2009-07-19 Jim Meyering fts: avoid false-positive cycle-detection * lib/fts.c (fts_read): Reinitialize cycle-detection data structures for each new command line argument. 2009-07-19 Bruno Haible Fix build error on mingw with the modules sys_select and unistd. * modules/acl-tests (Depends-on): Add close. * modules/binary-io-tests (Depends-on): Likewise. * modules/closein-tests (Depends-on): Likewise. * modules/flock-tests (Depends-on): Likewise. * modules/fsync-tests (Depends-on): Likewise. * modules/lseek-tests (Depends-on): Likewise. * modules/pipe-tests (Depends-on): Likewise. * modules/posix_spawn-tests (Depends-on): Likewise. * modules/posix_spawnp-tests (Depends-on): Likewise. * modules/stat-time-tests (Depends-on): Likewise. * modules/yesno-tests (Depends-on): Likewise. 2009-07-19 Bruno Haible Unify conditionals. * lib/pipe.h: Detect native Win32 by looking at _WIN32 and __WIN32__ macros, not at the compiler macros. * lib/pipe.c: Likewise. * lib/execute.c: Likewise. * lib/spawni.c: Likewise. 2009-07-19 Bruno Haible Fix handling of closed stdin/stdout/stderr on mingw. * lib/w32spawn.h: Include unistd.h. (dup_noinherit): Return -1 if the old handle is invalid. Allocate new file descriptor with O_NOINHERIT flag. (fd_safer_noinherit): New function, based on fd-safer.c. (dup_safer_noinherit): New function, based on dup-safer.c. (undup_safer_noinherit): New function. * lib/execute.c (execute) [WIN32]: Use dup_safer_noinherit instead of dup_noinherit. Use undup_safer_noinherit instead of dup2 and close. * lib/pipe.c (create_pipe) [WIN32]: Likewise. Use fd_safer_noinherit instead of fd_safer. * tests/test-pipe.c: Include . (child_main) [WIN32]: Test the handle of STDERR_FILENO, not its close() result. * tests/test-pipe.c (child_main, parent_main): New functions, extracted from main. (test_pipe): Pass an extra argument for disambiguation. (main): Invoke parent_main or child_main. * tests/test-pipe.c (test_pipe): Pass slave_process = true argument consistently. 2009-07-18 Eric Blake test-pipe: fix mingw build * tests/test-pipe.c (main): Avoid fcntl on mingw. 2009-07-18 Bruno Haible * modules/pipe-tests (Makefile.am): Fix typo. 2009-07-18 Eric Blake error: fix mingw build * lib/error.c (error, error_at_line): Avoid fcntl on mingw. Reported by Bruno Haible. error: avoid undefined use of stdout * lib/error.c (error, error_at_line): Check that fd 1 is open before flushing stdout. Avoids a crash on cygwin when libsigsegv is handling faults and the close_stdout module wants to report the detection of closed stdout as an error. 2009-07-17 Eric Blake pipe: be robust in face of closed fds * lib/pipe.c (create_pipe): Closed standard descriptors in parent should cause child to misbehave. * modules/pipe-tests: New module. * tests/test-pipe.c: New file. * tests/test-pipe.sh: New file. Reported by Akim Demaille. 2009-07-14 Bruno Haible * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Guess it works on glibc systems. Reported by anonymous kc. 2009-07-07 Jim Meyering maint.mk: don't look for translatable strings in *.m4 or *.mk * top/maint.mk (sc_po_check): Skip *.m4 and *.mk files, when searching for translatable strings. 2009-07-05 Jim Meyering remove superfluous parentheses in STREQ definition * tests/test-argv-iter.c (STREQ): Remove redundant parentheses. * lib/getugroups.c (STREQ): Likewise. * lib/fnmatch.c (STREQ): Likewise. Spotted by Bruno Haible. 2009-07-04 Jim Meyering argv-iter: new module * MODULES.html.sh: Add argv-iter. * lib/argv-iter.c, lib/argv-iter.h: New files. * modules/argv-iter: New file. * modules/argv-iter-tests: New file. * tests/test-argv-iter.c: Test it. 2009-07-04 Bruno Haible Fix assertion. * lib/git-merge-changelog.c (compute_mapping): In the case where file1 contains more exact copies of a given entry than file2, leave the extra copies unpaired rather than aborting. Reported by Eric Blake. 2009-07-02 Bruno Haible Speedup git-merge-changelog for git cherry-pick. * lib/git-merge-changelog.c (struct entries_mapping): New type. (entries_mapping_get): New function, extracted from compute_mapping. (entries_mapping_reverse_get): New function. (compute_mapping): Add a 'full' argument. Return the result in a 'struct entries_mapping'. (main): Update. Access the mappings through entries_mapping_get. Reported by Eric Blake. 2009-07-02 Bruno Haible * lib/git-merge-changelog.c (compute_mapping): Fix determination of best_i. 2009-07-02 Bruno Haible Speed up approximate search for matching ChangeLog entries. * lib/git-merge-changelog.c (entry_fstrcmp): Add a lower_bound argument. Call fstrcmp_bounded instead of fstrcmp. (compute_mapping, try_split_merged_entry, main): Update callers. 2009-07-02 Bruno Haible * lib/git-merge-changelog.c (main): Add comment about git cherry-pick. 2009-06-30 Bruno Haible Reduce the number of uc_is_cased calls. * lib/unicase.h (casing_suffix_context_t): Add 'first_char_except_ignorable' field. * lib/unicase/context.h (SCC_FINAL_SIGMA_MASK): Remove macro. (SCC_MORE_ABOVE_MASK, SCC_BEFORE_DOT_MASK): Update. * lib/unicase/empty-suffix-context.c (unicase_empty_suffix_context): Update initializer. * lib/unicase/u-casemap.h (FUNC): Don't invoke uc_is_cased on case-ignorable characters. * lib/unicase/u-ct-totitle.h (FUNC): Likewise. * lib/unicase/u-suffix-context.h (FUNC2): Don't call uc_is_cased here. * modules/unicase/u8-suffix-context (Depends-on): Remove unicase/cased. * modules/unicase/u16-suffix-context (Depends-on): Likewise. * modules/unicase/u32-suffix-context (Depends-on): Likewise. 2009-06-30 Bruno Haible Tests for module 'unicase/ignorable'. * modules/unicase/ignorable-tests: New file. * tests/unicase/test-ignorable.c: New file, generated by gen-uni-tables. Tests for module 'unicase/cased'. * modules/unicase/cased-tests: New file. * tests/unicase/test-cased.c: New file, generated by gen-uni-tables. * tests/unicase/test-predicate-part1.h: New file, derived from tests/unictype/test-predicate-part1.h. * tests/unicase/test-predicate-part2.h: New file, same as tests/unictype/test-predicate-part2.h. Fix evaluation of "Before C" condition of FINAL_SIGMA. * lib/gen-uni-tables.c (is_cased, is_case_ignorable): New functions. (output_casing_properties): New function. (main): Call it. * lib/unicase/cased.h: New file, generated by gen-uni-tables. * lib/unicase/cased.c: Include unictype/bitmap.h. (uc_is_cased): Define through a bitmap lookup. * lib/unicase/ignorable.h: New file, generated by gen-uni-tables. * lib/unicase/ignorable.c: Include unictype/bitmap.h. (uc_is_case_ignorable): Define through a bitmap lookup. * modules/unicase/cased (Files): Add lib/unicase/cased.h, lib/unictype/bitmap.h. (Depends-on): Add inline. Clean up. * modules/unicase/ignorable (Files): Add lib/unicase/ignorable.h, lib/unictype/bitmap.h. (Depends-on): Add inline. Clean up. * tests/unicase/test-u8-tolower.c (main): Add more tests of FINAL_SIGMA recognition. * tests/unicase/test-u16-tolower.c (main): Likewise. * tests/unicase/test-u32-tolower.c (main): Likewise. 2009-06-30 Bruno Haible * lib/unicase/u8-casemap.c: Don't include uniwbrk.h. * lib/unicase/u16-casemap.c: Likewise. * lib/unicase/u32-casemap.c: Likewise. 2009-06-29 Bruno Haible Define u32_casefold as a wrapper around u32_ct_casefold. * lib/unicase/u32-casefold.c: Update. * modules/unicase/u32-casefold (Depends-on): Add unicase/u32-ct-casefold, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. Define u16_casefold as a wrapper around u16_ct_casefold. * lib/unicase/u16-casefold.c: Update. * modules/unicase/u16-casefold (Depends-on): Add unicase/u16-ct-casefold, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. Define u8_casefold as a wrapper around u8_ct_casefold. * lib/unicase/u-casefold.h (FUNC): Delegate to U_CT_CASEFOLD. * lib/unicase/u8-casefold.c: Update. * modules/unicase/u8-casefold (Depends-on): Add unicase/u8-ct-casefold, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. Define u32_totitle as a wrapper around u32_ct_totitle. * lib/unicase/u32-totitle.c: Update. * modules/unicase/u32-totitle (Depends-on): Add unicase/u32-ct-totitle, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. Define u16_totitle as a wrapper around u16_ct_totitle. * lib/unicase/u16-totitle.c: Update. * modules/unicase/u16-totitle (Depends-on): Add unicase/u16-ct-totitle, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. Define u8_totitle as a wrapper around u8_ct_totitle. * lib/unicase/u-totitle.h (is_cased, is_case_ignorable): Remove functions. (FUNC): Delegate to U_CT_TOTITLE. * lib/unicase/u8-totitle.c: Update. * modules/unicase/u8-totitle (Depends-on): Add unicase/u8-ct-totitle, unicase/empty-prefix-context, unicase/empty-suffix-context. Clean up. * lib/unicase/u32-tolower.c (u32_tolower): Update u32_casemap invocation. * modules/unicase/u32-tolower (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. * lib/unicase/u16-tolower.c (u16_tolower): Update u16_casemap invocation. * modules/unicase/u16-tolower (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. * lib/unicase/u8-tolower.c (u8_tolower): Update u8_casemap invocation. * modules/unicase/u8-tolower (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. * lib/unicase/u32-toupper.c (u32_toupper): Update u32_casemap invocation. * modules/unicase/u32-toupper (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. * lib/unicase/u16-toupper.c (u16_toupper): Update u16_casemap invocation. * modules/unicase/u16-toupper (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. * lib/unicase/u8-toupper.c (u8_toupper): Update u8_casemap invocation. * modules/unicase/u8-toupper (Depends-on): Add unicase/empty-prefix-context, unicase/empty-suffix-context. New module 'unicase/u32-ct-casefold'. * lib/unicase/u32-ct-casefold.c: New file. * modules/unicase/u32-ct-casefold: New file. New module 'unicase/u16-ct-casefold'. * lib/unicase/u16-ct-casefold.c: New file. * modules/unicase/u16-ct-casefold: New file. New module 'unicase/u8-ct-casefold'. * lib/unicase/u8-ct-casefold.c: New file. * lib/unicase/u-ct-casefold.h: New file, derived from lib/unicase/u-casefold.h. * modules/unicase/u8-ct-casefold: New file. New module 'unicase/u32-ct-totitle'. * lib/unicase/u32-ct-totitle.c: New file. * modules/unicase/u32-ct-totitle: New file. New module 'unicase/u16-ct-totitle'. * lib/unicase/u16-ct-totitle.c: New file. * modules/unicase/u16-ct-totitle: New file. New module 'unicase/u8-ct-totitle'. * lib/unicase/u8-ct-totitle.c: New file. * lib/unicase/u-ct-totitle.h: New file, derived from lib/unicase/u-totitle.h. * modules/unicase/u8-ct-totitle: New file. New module 'unicase/u32-ct-tolower'. * lib/unicase/u32-ct-tolower.c: New file. * modules/unicase/u32-ct-tolower: New file. New module 'unicase/u16-ct-tolower'. * lib/unicase/u16-ct-tolower.c: New file. * modules/unicase/u16-ct-tolower: New file. New module 'unicase/u8-ct-tolower'. * lib/unicase/u8-ct-tolower.c: New file. * modules/unicase/u8-ct-tolower: New file. New module 'unicase/u32-ct-toupper'. * lib/unicase/u32-ct-toupper.c: New file. * modules/unicase/u32-ct-toupper: New file. New module 'unicase/u16-ct-toupper'. * lib/unicase/u16-ct-toupper.c: New file. * modules/unicase/u16-ct-toupper: New file. New module 'unicase/u8-ct-toupper'. * lib/unicase/u8-ct-toupper.c: New file. * modules/unicase/u8-ct-toupper: New file. Add context arguments to u*_casemap functions. * lib/unicase/unicasemap.h: Include unicase.h. (u8_casemap, u16_casemap, u32_casemap): Add prefix_context and suffix_context arguments. * lib/unicase/u-casemap.h (is_cased, is_case_ignorable): Remove functions. (FUNC): Add prefix_context and suffix_context arguments. Use uc_is_cased and uc_is_case_ignorable. * lib/unicase/u8-casemap.c: Include caseprop.h and context.h. * lib/unicase/u16-casemap.c: Likewise. * lib/unicase/u32-casemap.c: Likewise. * modules/unicase/u8-casemap (Files): Add lib/unicase/context.h. (Depends-on): Add unicase/cased, unicase/ignorable. Clean up. * modules/unicase/u16-casemap (Files): Add lib/unicase/context.h. (Depends-on): Add unicase/cased, unicase/ignorable. Clean up. * modules/unicase/u32-casemap (Files): Add lib/unicase/context.h. (Depends-on): Add unicase/cased, unicase/ignorable. Clean up. New module 'unicase/u32-suffix-context'. * lib/unicase/u32-suffix-context.c: New file. * modules/unicase/u32-suffix-context: New file. New module 'unicase/u16-suffix-context'. * lib/unicase/u16-suffix-context.c: New file. * modules/unicase/u16-suffix-context: New file. New module 'unicase/u8-suffix-context'. * lib/unicase/u8-suffix-context.c: New file. * lib/unicase/u-suffix-context.h: New file. * modules/unicase/u8-suffix-context: New file. New module 'unicase/empty-suffix-context'. * lib/unicase/empty-suffix-context.c: New file. * modules/unicase/empty-suffix-context: New file. New module 'unicase/u32-prefix-context'. * lib/unicase/u32-prefix-context.c: New file. * modules/unicase/u32-prefix-context: New file. New module 'unicase/u16-prefix-context'. * lib/unicase/u16-prefix-context.c: New file. * modules/unicase/u16-prefix-context: New file. New module 'unicase/u8-prefix-context'. * lib/unicase/u8-prefix-context.c: New file. * lib/unicase/u-prefix-context.h: New file. * lib/unicase/context.h: New file. * modules/unicase/u8-prefix-context: New file. New module 'unicase/empty-prefix-context'. * lib/unicase/empty-prefix-context.c: New file. * modules/unicase/empty-prefix-context: New file. New module 'unicase/ignorable'. * lib/unicase/ignorable.c: New file. * modules/unicase/ignorable: New file. New module 'unicase/cased'. * lib/unicase/caseprop.h: New file. * lib/unicase/cased.c: New file. * modules/unicase/cased: New file. New functions for case mapping of substrings. * lib/unicase.h (casing_prefix_context_t): New type. (unicase_empty_prefix_context): New variable. (u8_casing_prefix_context, u16_casing_prefix_context, u32_casing_prefix_context, u8_casing_prefixes_context, u16_casing_prefixes_context, u32_casing_prefixes_context): New declarations. (casing_suffix_context_t): New type. (unicase_empty_suffix_context): New variable. (u8_casing_suffix_context, u16_casing_suffix_context, u32_casing_suffix_context, u8_casing_suffixes_context, u16_casing_suffixes_context, u32_casing_suffixes_context, u8_ct_toupper, u16_ct_toupper, u32_ct_toupper, u8_ct_tolower, u16_ct_tolower, u32_ct_tolower, u8_ct_totitle, u16_ct_totitle, u32_ct_totitle, u8_ct_casefold, u16_ct_casefold, u32_ct_casefold): New declarations. 2009-06-28 Jim Meyering boostrap: indent only with spaces * build-aux/bootstrap: Indent only with spaces, never TABs. bootstrap: split long lines * build-aux/bootstrap: Keep line length < 80. bootstrap: sync from coreutils * build-aux/bootstrap: Honor variables like $ACLOCAL, etc., just as autoreconf does. Verify a list of prerequisite package-name,version-number pairs if defined in bootstrap.conf. Refer to README-prereq, if prerequisites are not satisfied. 2009-06-27 Eric Blake tests: add test for bogus NULL definition * tests/test-stdio.c: Ensure POSIX 2008 requirement on NULL. * tests/test-stdlib.c: Likewise. * tests/test-string.c: Likewise. * tests/test-locale.c: Likewise. * tests/test-unistd.c: Likewise. * modules/stdio-tests (Depends-on): Add verify. * modules/stdlib-tests (Depends-on): Likewise. * modules/string-tests (Depends-on): Likewise. * modules/locale-tests (Depends-on): Likewise. * modules/unistd-tests (Depends-on): Likewise. 2009-06-27 Paolo Bonzini * m4/selinux-context-h (gl_HEADERS_SELINUX_CONTEXT_H): Remove self-explaining comment. * m4/selinux-selinux-h: Update serial. (gl_LIBSELINUX): New macro, adding a warning for missing development packages to code extracted from... (gl_HEADERS_SELINUX_SELINUX_H): ... this one. Require gl_LIBSELINUX. Add warning for missing development packages here, too. 2009-06-26 Paolo Bonzini * build-aux/bootstrap: Do not use GIT_CONFIG_LOCAL. 2009-06-25 Eric Blake version-etc: fix regression * lib/version-etc.h (ATTRIBUTE_SENTINEL): Define for new enough gcc. (version_etc): Use it, to catch bugs with trailing NULL. * lib/version-etc.c (version_etc_arn): Delete unused argument. (version_etc_va): Fix logic bug. * modules/version-etc-tests: Add test. * tests/test-version-etc.c: New file. * tests/test-version-etc.sh: Likewise. 2009-06-25 Sam Steingold * mbrtowc.m4 (gl_MBRTOWC_SANITYCHECK): Include , for the mbtowc declaration. 2009-06-25 Eric Blake fpurge: migrate into * lib/fpurge.h: Delete... * lib/stdio.in.h (fpurge): ...and declare here, instead. * lib/fpurge.c (fpurge): Change declaring header. * modules/fpurge (Files): Drop deleted file. (Depends-on): Add stdio. (configure.ac): Set witness. * modules/stdio (Makefile.am): Support fpurge macros. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * m4/fpurge.m4 (gl_FUNC_FPURGE): Set appropriate variables. * lib/fflush.c: Update client. * tests/test-fpurge.c: Likewise. * NEWS: Mention the change. 2009-06-25 Sergey Poznyakoff * lib/argp-version-etc.c (program_authors): Add const qualifier. * lib/version-etc.c: Fix typos in the comments. * modules/argp-version-etc: Depends on version-etc. 2009-06-25 Sergey Poznyakoff argp-version-etc: new module. * lib/argp-version-etc.c: New file. * lib/argp-version-etc.h: New file. * modules/argp-version-etc: New file. * modules/argp-version-etc-tests: New file. * tests/test-argp-version-etc.c: New test. * tests/test-argp-version-etc-1.sh: New test. 2009-06-25 Sergey Poznyakoff Provide additional interfaces and documentation for version-etc module. * lib/version-etc.c (version_etc_arn, version_etc_ar): New interfaces. * lib/version-etc.h (version_etc_arn, version_etc_ar): New prototypes. 2009-06-24 Bruno Haible * m4/lib-link.m4 (AC_LIB_HAVE_LINKFLAGS): Fix description of HAVE_LIB${NAME} macro. Reported by Sam Steingold . 2009-06-23 Simon Josefsson * modules/hash-tests (test_hash_LDADD): Link to libintl when needed. 2009-06-21 Bruno Haible Make two consecutive identical invocations of AC_LIB_HAVE_LINKFLAGS work. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Reset HAVE_LIB${NAME} together with LIB${NAME}, LTLIB${NAME}. Reported by Sam Steingold . 2009-06-20 Jim Meyering tests: make sc_require_test_exit_idiom more generic * top/maint.mk (Exit_witness_file): New overridable variable. (sc_require_test_exit_idiom): Don't hard-code tests/test-lib.sh. Relax test for /^Exit \$fail$$/ to just /^Exit ./. 2009-06-19 Jim Meyering hash: reverse order of src/dst parameters in an internal interface * lib/hash.c (transfer_entries): Reverse order of parameters to put DST before SRC. Adjust callers. tests: test-hash: avoid wholesale duplication * tests/test-hash.c (main): Don't copy/paste a 60-line loop. Instead, use a loop and add a single conditional. tests: test-hash: allow seed selection via a command line argument * tests/test-hash.c (get_seed): New function. (main): Use it. 2009-06-19 Eric Blake hash: avoid memory leak on allocation failure * lib/hash.c: (hash_rehash): Avoid memory leak on allocation failure. Factor repeated algorithm... (transfer_entries): ...into new helper routine. (hash_delete): React to hash_rehash return value. hash: reduce memory pressure in hash_rehash no-op case * lib/hash.c (next_prime): Avoid overflow. (hash_initialize): Factor bucket size computation... (compute_bucket_size): ...into new helper function. (hash_rehash): Use new function and open coding to reduce memory pressure, and avoid a memory leak in USE_OBSTACK code. Reported by Jim Meyering. 2009-06-18 Eric Blake hash: make rotation more obvious * modules/hash (Depends-on): Add bitrotate and stdint. * lib/bitrotate.h (rotl_sz, rotr_sz): New functions. * lib/hash.c (headers): Drop limits.h. Add stdint.h. (SIZE_MAX): Rely on headers for definition. (hash_string) [USE_DIFF_HASH]: Use rotl_sz. (raw_hasher): Use rotr_sz. Suggested by Jim Meyering. hash: fix memory leak in last patch * lib/hash.c (hash_rehash): Avoid memory leak. hash: avoid no-op rehashing * lib/hash.c (hash_rehash): Recognize useless rehash attempts. hash: provide default callback functions * lib/hash.c (raw_hasher, raw_comparator): New functions. (hash_initialize): Use them as defaults. * tests/test-hash.c (main): Test this. hash: minor optimization * lib/hash.c (hash_lookup, hash_find_entry): Avoid function call when possible. (hash_initialize): Document this promise. (hash_do_for_each, hash_clear, hash_free): Use C89 syntax. * tests/test-hash.c (hash_compare_strings): Test this. 2009-06-18 Bruno Haible * m4/strstr.m4 (gl_FUNC_STRSTR): Skip linear time test if strstr is going to be replaced anyway. 2009-06-18 Bruno Haible * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Invoke AC_LIBOBJ only in one place. (gl_FUNC_STRCASESTR): Skip linear time test if strcasestr is going to be replaced anyway. 2009-06-18 Eric Blake hash: check for resize before insertion * lib/hash.c (hash_insert): Check whether bucket usage exceeds threshold before insertion, so that a pathological hash_rehash that fills every bucket can still trigger another rehash. 2009-06-18 Jim Meyering hash-tests: add a loop around the small tests * tests/test-hash.c (main): Repeat small tests with selected small initial table sizes. 2009-06-17 Eric Blake hash: minor cleanups * lib/hash.h (hash_entry): Make opaque, by moving... * lib/hash.c (hash_entry): ...here. (hash_insert): Clarify restrictions on what can be inserted. (hash_get_next): Clarify when it is safe to remove an element during traversal. (check_tuning): Skip verification when tuning is known safe. (hash_initialize): Clarify restrictions on tuning. 2009-06-17 Jim Meyering and Eric Blake hash-tests: new module * modules/hash-tests: New file. * tests/test-hash.c: New file. 2009-06-17 Eric Blake strstr-simple: document new module * MODULES.html.sh: Document new module. strstr, strcasestr: replace on platforms with broken memchr * modules/strstr: Split into... * modules/strstr-simple: ...new module that does not care about performance, but does care about glibc bug. * m4/strstr.m4 (gl_FUNC_STRSTR): Split... (gl_FUNC_STRSTR_SIMPLE): ...into new macro, which replaces strstr if platform memchr is broken, per Debian bug 521737. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): React to broken memchr. * m4/memchr.m4 (gl_FUNC_MEMCHR): Only expand once. * doc/posix-functions/strstr.texi (strstr): Document the fix. * doc/glibc-functions/strcasestr.texi (strcasestr): Likewise. * modules/mountlist (Depends-on): Add strstr-simple. * modules/gen-uni-tables (Depends-on): Likewise. * modules/argz (Depends-on): Add strstr. 2009-06-17 Bruno Haible * modules/posix_spawn-internal (Depends-on): Add errno. 2009-06-17 Bruno Haible Define missing ESTALE on Interix 3.5. * lib/errno.in.h (ESTALE): Assign a value if missing. * lib/strerror.c (rpl_strerror): Handle missing ESTALE and ECANCELED. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Also test whether ESTALE is missing. * doc/posix-headers/errno.texi: Mention the Interix bug. Reported by Jay Krell via Eric Blake. 2009-06-15 Eric Blake memchr, memchr2: add valgrind exception * lib/memchr.valgrind: New file. * lib/memchr2.valgrind: New file. * modules/memchr (Files): Distribute valgrind file. * modules/memchr2 (Files): Likewise. docs: memchr is no longer obsolete * MODULES.html.sh: Move memchr from obsolete to string.h section. * lib/string.in.h (memchr): Simplify logic. 2009-06-14 Jim Meyering link-follow: fix the "checking..." message to not mention trailing slash * m4/link-follow.m4 (gl_AC_FUNC_LINK_FOLLOWS_SYMLINK): This test has never considered trailing slashes. 2009-06-14 Bruno Haible * m4/memchr.m4: Mention also the bug on IA-64. * doc/posix-functions/memchr.texi: Likewise. 2009-06-12 Eric Blake memchr: detect broken x86_64 and alpha implementations * modules/memchr-tests (Depends-on): Move mmap detection... * modules/memchr (Depends-on): ...here. (configure.ac): Set indicator. * lib/string.in.h (memchr): Declare replacement. * modules/string (Makefile.am): Trigger replacement. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Likewise. * m4/memchr.m4 (gl_FUNC_MEMCHR): Use mmap to detect platform bugs. * doc/posix-functions/memchr.texi (memchr): Document the bug. * modules/getpagesize (License): Relax license. 2009-06-11 Bruno Haible * lib/idpriv.h: Add more references. 2009-06-08 Bruno Haible Tests for module 'idpriv-droptemp'. * modules/idpriv-droptemp-tests: New file. * tests/test-idpriv-droptemp.sh: New file. * tests/test-idpriv-droptemp.su.sh: New file. * tests/test-idpriv-droptemp.c: New file. New module 'idpriv-droptemp'. * lib/idpriv-droptemp.c: New file. * modules/idpriv-droptemp: New file. 2009-06-08 Bruno Haible Tests for module 'idpriv-drop'. * modules/idpriv-drop-tests: New file. * tests/test-idpriv-drop.sh: New file. * tests/test-idpriv-drop.su.sh: New file. * tests/test-idpriv-drop.c: New file. New module 'idpriv-drop'. * lib/idpriv.h: New file. * lib-idpriv-drop.c: New file. * m4/idpriv.m4: New file. * modules/idpriv-drop: New file. 2009-06-08 Bruno Haible * modules/unistdio/u8-vasnprintf (Depends-on): Add memchr. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. 2009-06-08 Eric Blake test-strstr: use memory fence, when possible * tests/test-strstr.c (main): Use memory fence, in order to be more likely to trigger Debian bug 521737. * modules/strstr-tests (Files): Pull in additional files. memchr: no longer obsolete, for wider field testing * modules/memchr (Status, Notice): Delete, this module is no longer obsolete. * modules/vasnprintf (Depends-on): Add memchr. 2009-06-07 Jim Meyering hash: declare some functions with the warn_unused_result attribute * lib/hash.h (__attribute__, ATTRIBUTE_WUR): Define. 2009-06-07 Bruno Haible * tests/test-alignof.c: Don't test int64_t if it does not exist. Reported by Eric Blake. 2009-06-06 Eric Blake test-alignof: fix typo with long double * tests/test-alignof.c (CHECK): Use longdouble typedef to avoid compiler error. 2009-06-06 Neil Jerram (tiny change) Escape non-texinfo { and }s. * doc/ld-output-def.texi (Visual Studio Compatibility): Fix markup error. 2009-06-04 Jim Meyering gitlog-to-changelog: don't infloop on an empty commit log * build-aux/gitlog-to-changelog: Warn about an empty log message. Reported by Boris Petersen . 2009-06-03 Mike Frysinger version-etc: extend for packagers Add three new configure options, intended for packagers: --with-packager="packager name" --with-packager-version="packager-specific version" --with-packager-bug-reports="packager bug reporting" An example with coreutils: $ ./configure \ --with-packager=Gentoo \ --with-packager-bug-report=http://bugs.gentoo.org/ \ --with-packager-version="patchset 1.6" $ ./src/ls --version | head -n2 ls (GNU coreutils) 7.1-dirty Packaged by Gentoo (patchset 1.6) Note that the bug reporting info via --help doesn't show up because coreutils uses its own custom emit_bug_reporting_address() implementation in src/system.h. If it didn't, it'd look like: $ ./src/ls --help | tail -n4 Report bugs to . Report Gentoo bugs to . GNU coreutils home page: . General help using GNU software: . * lib/version-etc.c: Print new information, if provided. * m4/version-etc.m4: New file. * modules/version-etc (Files): Add m4/version-etc.m4. (configure.ac): Add gl_VERSION_ETC. 2009-05-31 Bruno Haible * tests/test-alignof.c: Include . Check also 'long double' and 'int64_t'. * modules/alignof-tests (Dependencies): Add stdint. Reported by Eric Blake. 2009-05-31 Bruno Haible * lib/alignof.h (alignof_slot, alignof_type, alignof): Document restriction due to compiler bugs. Reported by Eric Blake. 2009-05-31 Simon Josefsson Bruno Haible Fix test-alignof failure. * lib/alignof.h (alignof_slot): New macro. (alignof_type): New macro, with the same semantics as the previous 'alignof'. (alignof): Alias to alignof_slot. * tests/test-alignof.c (CHECK): Check alignof_slot, not alignof. Also check that the results are usable as constant expressions. 2009-05-31 Bruno Haible * tests/zerosize-ptr.h (zerosize_ptr): Specify more details. * tests/test-memchr.c (main): Check that memchr does not read past the first occurrence of the byte. * tests/test-strstr.c (main): Update comment. Suggested by Eric Blake. 2009-05-30 Bruno Haible * doc/ld-output-def.texi (Visual Studio Compatibility): Explain in more detail how to use dumpbin. Reported by David Byron . 2009-06-02 Simon Josefsson * tests/test-parse-duration.sh: Don't use non-portable 'read -u3'. 2009-06-02 Simon Josefsson * m4/manywarnings.m4: Add GCC 4.4 warnings. 2009-05-28 Bruno Haible * gnulib-tool (func_import): Don't do HAVE_CONFIG_H replacements on build-aux/ files. 2009-05-28 Simon Josefsson * gnulib-tool (func_import): Transform license on build-aux/ files too. 2009-05-27 Simon Josefsson * gnulib-tool (sed_transform_main_lib_file) (sed_transform_testsrelated_lib_file): : Don't use non-POSIX regexps. 2009-05-26 Simon Josefsson * tests/test-strstr.c: Add another self-test. * tests/test-strstr.c: Rewrite to use malloc/strcpy instead of strdup. Suggested by Eric Blake . 2009-05-23 Bruno Haible * doc/havelib.texi (AC_LIB_HAVE_LINKFLAGS): Update for 2009-04-26 change. 2009-05-21 Bruno Haible Simplify use of mode_t varargs. * lib/open.c (open): Use PROMOTED_MODE_T instead of a conditional that uses 'mode_t' or 'int'. * lib/openat.c (openat): Likewise. * lib/open-safer.c (open_safer): Likewise. * m4/mode_t.m4: New file. * m4/open.m4 (gl_PREREQ_OPEN): Require gl_PROMOTED_TYPE_MODE_T. * m4/openat.m4 (gl_PREREQ_OPENAT): Likewise. * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): Likewise. * modules/open (Files): Add m4/mode_t.m4. * modules/openat (Files): Likewise. * modules/fcntl-safer (Files): Likewise. Suggested by Eric Blake. 2009-05-21 Pádraig Brady * doc/glibc-functions/fallocate.texi: New file. * doc/gnulib.texi: Include it. 2009-05-21 Eric Blake Bruno Haible * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Remove redundant m4_quote invocations. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Likewise. 2009-05-21 Eric Blake Bruno Haible Second attempt to work around an AIX 5.3, 6.1 compiler bug with include_next. Fix of 2008-11-20 commit. * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Also set NEXT_AS_FIRST_DIRECTIVE_FOO_H. * lib/math.in.h: Use NEXT_AS_FIRST_DIRECTIVE_MATH_H instead of NEXT_MATH_H. * modules/math (Makefile.am): Substitute NEXT_AS_FIRST_DIRECTIVE_MATH_H instead of NEXT_MATH_H. 2009-05-21 Bruno Haible Avoid redefinition warnings for SIZE_MAX. * m4/size_max.m4 (gl_SIZE_MAX): Avoid redefining SIZE_MAX in config.h. Reported by Simon Josefsson. 2009-05-21 Bruno Haible * m4/size_max.m4 (gl_SIZE_MAX): Use AC_CACHE_CHECK instead of AC_CACHE_VAL. 2009-05-20 Bruno Haible Make zeroptr.h work on mingw. * tests/zerosize-ptr.h: Test for the presence of and mprotect. * modules/memchr-tests (configure.ac): Also test for sys/mman.h. * modules/memchr2-tests (configure.ac): Likewise. * modules/memcmp-tests (configure.ac): Likewise. * modules/memmem-tests (configure.ac): Likewise. * modules/memrchr-tests (configure.ac): Likewise. Reported by Simon Josefsson. 2009-05-20 Simon Josefsson * tests/test-glob.c: Include string.h for strcmp prototype. 2009-05-20 Simon Josefsson * modules/getdelim (Depends-on): Add explicit stdint, although it was implicitly already pulled in via realloc-posix. * lib/getdelim.c: Get SIZE_MAX from stdint.h. 2009-05-20 Simon Josefsson MinGW and IRIX does not have sa_family_t type. Reported by "Tom G. Christensen" . * m4/sys_socket_h.m4: Check for sa_family_t. * lib/sys_socket.in.h: Typedef sa_family_t when needed. * modules/sys_socket: Substitute HAVE_SA_FAMILY_T. * tests/test-sys_socket.c: Check that sa_family_t works. 2009-05-18 Eric Blake maint.mk: allow gnulib_dir in VPATH build * top/maint.mk (gnulib_dir): Make relative to $(srcdir). 2009-05-15 Jim Meyering maint.mk: Give gnulib_dir a default definition. * top/maint.mk (gnulib_dir): Define to 'gnulib', by default. Thus, most packages no longer need to specify this variable in cfg.mk 2009-05-14 Tom Prince (tiny change) rename.m4: fix typos that would make non-mingw cross-configure fail * m4/rename.m4 (gl_FUNC_RENAME): Fix typos. 2009-05-13 Eric Blake mmap-anon: avoid out-of-order autoconf expansion * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Use correct SYSTEM_EXTENSIONS macro to silence warnings from autoconf 2.63b. * modules/memchr-tests (Depends-on): Add extensions. * modules/memchr2-tests (Depends-on): Add extensions. * modules/memcmp-tests (Depends-on): Add extensions. * modules/memmem-tests (Depends-on): Add extensions. * modules/memrchr-tests (Depends-on): Add extensions. 2009-05-13 Bruno Haible Make some tests ISO C 99 compliant. * tests/zerosize-ptr.h: New file. * tests/test-memchr.c: Include zerosize-ptr.h. (main): Use a zero-size object pointer instead of NULL. * tests/test-memchr2.c: Include zerosize-ptr.h. (main): Use a zero-size object pointer instead of NULL. * tests/test-memcmp.c: Include zerosize-ptr.h. (main): Use a zero-size object pointer instead of NULL. * tests/test-memmem.c: Include zerosize-ptr.h. (main): Use a zero-size object pointer instead of NULL. * tests/test-memrchr.c: Include zerosize-ptr.h. (main): Use a zero-size object pointer instead of NULL. * modules/memchr-tests (Files): Add tests/zerosize-ptr.h, m4/mmap-anon.m4. (Depends-on): Add getpagesize. (configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for mprotect. * modules/memchr2-tests (Files): Add tests/zerosize-ptr.h, m4/mmap-anon.m4. (Depends-on): Add getpagesize. (configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for mprotect. * modules/memcmp-tests (Files): Add tests/zerosize-ptr.h, m4/mmap-anon.m4. (Depends-on): Add getpagesize. (configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for mprotect. * modules/memmem-tests (Files): Add tests/zerosize-ptr.h, m4/mmap-anon.m4. (Depends-on): Add getpagesize. (configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for mprotect. * modules/memrchr-tests (Files): Add tests/zerosize-ptr.h, m4/mmap-anon.m4. (Depends-on): Add getpagesize. (configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for mprotect. 2009-05-12 Bruno Haible Tests for module 'alignof'. * modules/alignof-tests: New file. * tests/test-alignof.c: New file. 2009-05-12 Bruno Haible Fix alignof macro. * lib/alignof.h (alignof): Remove special cases for AIX and HP-UX vendor compilers that are always correct. 2009-05-12 Bruno Haible Make the MAP_ANONYMOUS detection work on HP-UX 11. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Check whether mmap exists, but not whether its fully works. 2009-05-12 Bruno Haible * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Add comments. 2009-05-12 Jim Meyering * top/maint.mk: Adjust backslash alignment. 2009-05-11 Simon Josefsson * top/maint.mk: Make $(srcdir)/build-aux configurable. 2009-05-11 Eric Blake argp: avoid undefined behavior * lib/argp-fmtstream.c (weak_alias): Pass correct types to ctype macros. 2009-05-08 Simon Josefsson * tests/test-vc-list-files-git.sh: Do git config of user.email and user.name to prevent git commit from complaining. 2009-05-10 Bruno Haible * gnulib-tool (func_import, func_create_testdir, copy-file): Change sed_rewrite_old_files, sed_rewrite_new_files, sed_rewrite_files so that it rewrites every file name only once. Reported by Simon Josefsson. Helped by Ralf Wildenhues. 2009-05-08 Bruno Haible * lib/sys_socket.in.h (_SS_PADSIZE): Use a conditional expression instead of 'max'. 2009-05-08 Simon Josefsson * m4/sys_socket_h.m4: Test for ws2tcpip.h earlier, needed for sockaddr_storage test. 2009-05-07 Simon Josefsson * modules/sys_socket (Makefile.am): Substitute HAVE_STRUCT_SOCKADDR_STORAGE. Depend on alignof. * m4/sys_socket_h.m4: Check for sockaddr_storage. * lib/sys_socket.in.h (sockaddr_storage): Define when needed. * tests/test-sys_socket.c: Check sockaddr_storage. 2009-05-08 Bruno Haible New module 'alignof'. * lib/alignof.h: New file. * modules/alignof: New file. 2009-05-04 David Bartley Bruno Haible Fix test-file-has-acl on FreeBSD. * tests/test-file-has-acl.sh: Also test a directory. On FreeBSD, the mask is implicitly added. * tests/test-file-has-acl.c: Include . (main): Terminate the test after 5 seconds. * modules/acl-tests (configure.ac): Check for alarm function. 2009-05-04 Bruno Haible Exploit new semantics of AC_DEFUN_ONCE available since 2009-01-26. * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Remove outdated comment. * modules/errno (configure.ac): Drop AC_REQUIRE. * m4/multiarch.m4 (gl_MULTIARCH): Remove outdated comment. * modules/multiarch (configure.ac): Drop AC_REQUIRE. 2009-05-04 Simon Josefsson * modules/glob-tests: New module. * tests/test-glob.c: Add. 2009-05-04 Simon Josefsson * modules/fnmatch-tests: New module. * tests/test-fnmatch.c: Add. 2009-05-04 Eric Blake maint: make the new no-submodule-changes rule VPATH-safe * top/maint.mk (no-submodule-changes): Don't assume a srcdir build. 2009-05-04 David Bartley Bruno Haible acl: Fix infinite loop on FreeBSD. * lib/acl_entries.c (acl_entries) [Linux, FreeBSD]: Fix interpretation of return value from acl_get_entry. * lib/file-has-acl.c (acl_access_nontrivial) [Linux, FreeBSD]: Likewise. 2009-05-03 Bruno Haible * lib/acl-internal.h (acl_entries): Clarify return value. * lib/acl_entries.c (acl_entries): Likewise. 2009-05-04 David Bartley Bug fix in acl module. * lib/set-mode-acl.c: Use correct struct with ACL_SETACL. 2009-05-03 Bruno Haible Create gperf-generated file in the source dir, not in the build dir. * modules/iconv_open (iconv_open-aix.h, iconv_open-hpux.h, iconv_open-irix.h, iconv_open-osf.h): Create file in the source tree. * modules/unicase/locale-language (unicase/locale-languages.h): Likewise. * modules/unicase/special-casing (unicase/special-casing-table.h): Likewise. * modules/unictype/property-byname (unictype/pr_byname.h): Likewise. * modules/unictype/scripts (unictype/scripts_byname.h): Likewise. * modules/uninorm/composition (uninorm/composition-table.h): Likewise. Reported by Ralf Wildenhues. 2009-05-03 Bruno Haible * modules/fnmatch (Description, configure.ac): Taken from fnmatch-posix. * modules/fnmatch-posix: Turn into a symbolic reference to the 'fnmatch' module, and deprecate. * doc/posix-functions/fnmatch.texi: Mention the fnmatch module. 2009-05-03 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF, gl_PREREQ_VASNPRINTF_LONG_DOUBLE): Define through AC_DEFUN_ONCE. Reported by Ralf Wildenhues. 2009-05-04 Simon Josefsson * m4/fnmatch.m4: Fix fnmatch re-define. 2009-04-27 David Bartley priv-set: new module and tests; adapt write-any-file * lib/priv-set.c: New file. * lib/priv-set.h: New file. * lib/unlinkdir.c: Make cannot_unlink_dir thread-safe. * lib/write-any-file.c: Simplify by using priv-set module. * m4/priv-set.m4: New file. * modules/priv-set: New file. * modules/unlinkdir: Add dependency on priv-set module. * modules/write-any-file: Likewise. Tests for module 'priv-set'. * modules/priv-set-tests: New file. * tests/test-priv-set.c: New file. 2009-05-03 Jim Meyering Bruno Haible * lib/propername.c (proper_name_utf8): Ignore no-op translations; use the converted UTF-8 variant of the name instead. 2009-05-03 Jim Meyering tests: tighten some getdate tests * tests/test-getdate.c (main): Tighten tests: require equality, not just greater than. Set TZ envvar to UTC0. 2009-05-03 Giuseppe Scrivano getdate: correctly interpret "next monday" when run on a Monday * lib/getdate.y (get_date): Correct the calculation of tm_mday so that e.g., "next tues" (when run on a tuesday) results in a date that is one week in the future, and not today's date. I.e., add a week when the wday is the same as the current one. Reported by Tom Broadhurst in http://savannah.gnu.org/bugs/?25406, and earlier by Martin Bernreuther and Jan Minář. * tests/test-getdate.c (main): Check that "next DAY" is always in the future and that "last DAY" is always in the past. 2009-05-02 Jim Meyering build: ensure that a release build fails when a submodule is unclean * top/maint.mk (no-submodule-changes): New rule. (alpha beta major): Depend on it. 2009-05-02 Bruno Haible Remove incompatibility between modules fnmatch-posix and fnmatch-gnu. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX, gl_FUNC_FNMATCH_GNU): Use a shell variable gl_fnmatch_required to detect which variant is requested. (_AC_FUNC_FNMATCH_IF, _AC_LIBOBJ_FNMATCH): Remove macros. Inlined into gl_FUNC_FNMATCH_POSIX. * gnulib-tool (func_create_testdir, func_create_megatestdir): Don't exclude fnmatch-posix. 2009-05-02 Bruno Haible Relicense mbsrtowcs and strnlen1 under LGPLv2+. * modules/mbsrtowcs (License): Change to LGPLv2+. * modules/strnlen1 (License): Likewise. Reported by Simon Josefsson. 2009-05-02 Bruno Haible * m4/fnmatch.m4 (_AC_FUNC_FNMATCH_IF): Say "guessing no" instead of "cross". (gl_FUNC_FNMATCH_POSIX, gl_FUNC_FNMATCH_GNU): Update. Don't assume that gnulib-tool was called with option --source-base=lib. 2009-05-02 Ralf Wildenhues Use automake *-local hooks without commands, for extensibility. * modules/localcharset (Makefile.am): Rename install-exec-local rule to install-exec-localcharset, and make it a prerequisite of install-exec-local. Likewise, rename the uninstall-local rule to uninstall-localcharset, and make it a prerequisite of the former. 2009-05-01 Bruno Haible * lib/wchar.in.h (wcsnrtombs): Define if REPLACE_WCSNRTOMBS is 1. * m4/wcsnrtombs.m4 (gl_FUNC_WCSRTOMBS): Invoke gl_MBSTATE_T_BROKEN, and set REPLACE_WCSNRTOMBS if mbstate_t must be replaced. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_WCSNRTOMBS. * modules/wchar (Makefile.am): Substitute REPLACE_WCSNRTOMBS. * modules/wcsnrtombs (Files): Add m4/mbrtowc.m4, m4/locale-ja.m4, m4/locale-zh.m4, m4/codeset.m4. * m4/wcsrtombs.m4 (gl_FUNC_WCSNRTOMBS): Invoke gl_MBSTATE_T_BROKEN, and set REPLACE_WCSRTOMBS if mbstate_t must be replaced. * modules/wcsrtombs (Files): Add m4/mbrtowc.m4, m4/locale-ja.m4, m4/locale-zh.m4. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Invoke gl_MBSTATE_T_BROKEN, and set REPLACE_WCRTOMB if mbstate_t must be replaced. * modules/wcrtomb (Files): Add m4/mbrtowc.m4. Reported by Jens Rehsack via Eric Blake. 2009-05-01 Bruno Haible Avoid compiler warnings when redefining macros defined by . * lib/gettext.h [!ENABLE_NLS] (gettext, dgettext, dcgettext, ngettext, dngettext, dcngettext, textdomain, bindtextdomain, bind_textdomain_codeset): Undefine before redefining. 2009-04-30 Bruno Haible Fix bug introduced on 2009-04-25. * lib/math.in.h (gl_signbitf_OPTIMIZED_MACRO, gl_signbitd_OPTIMIZED_MACRO, gl_signbitl_OPTIMIZED_MACRO): New macros. * lib/signbitf.c (gl_signbitd): Undefine if gl_signbitf_OPTIMIZED_MACRO is defined. * lib/signbitd.c (gl_signbitd): Undefine if gl_signbitd_OPTIMIZED_MACRO is defined. * lib/signbitl.c (gl_signbitd): Undefine if gl_signbitl_OPTIMIZED_MACRO is defined. Reported by Elbert_Pol . 2009-04-28 Bruno Haible Comment tweaks. * lib/unistr.h (u*_cmp2): Clarify what memcmp2 is. * lib/uninorm.h (u*_normxfrm): Fix description of return value. * lib/unicase.h (u*_casexfrm): Likewise. Reported by Paolo Bonzini. 2009-04-28 Bruno Haible Fix a compilation error. * lib/mbsrtowcs-state.c (_gl_mbsrtowcs_state): Fix initializer. * lib/wcsrtombs-state.c (_gl_wcsrtombs_state): Likewise. Reported by Jim Meyering. 2009-04-27 Bruno Haible New module 'libunistring'. * modules/libunistring: New file. * m4/libunistring.m4: New file. * MODULES.html.sh (Unicode string functions): Add it. 2009-04-27 Eric Blake maint.mk: allow package-specific header to provide * top/maint.mk (sc_require_config_h): New variable. (sc_require_config_h, sc_require_config_h_first): Use it. 2009-04-27 Simon Josefsson * top/maint.mk (sc_avoid_if_before_free): Except useless-if-before-free script. 2009-04-27 Eric Blake maintainer-makefile: depend on all required helper scripts * modules/maintainer-makefile (Depends-on): Add vc-list-files and useless-if-before-free. * top/maint.mk (VC_LIST, sc_avoid_if_before_free): Use local version, rather than assuming gnulib checkout is available. Reported by Simen Josefsson. 2009-04-26 Bruno Haible Make the lib vs. lib64 recognition work on openSUSE 11 with "gcc -m32". * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): Ignore paths that end in "../" or "..". 2009-04-26 Bruno Haible * m4/lib-link.m4 (AC_LIB_HAVE_LINKFLAGS): Accept a fifth argument. * m4/libsigsegv.m4 (gl_LIBSIGSEGV): Simplify by using AC_LIB_HAVE_LINKFLAGS. 2009-04-26 Bruno Haible Simplify calling convention of u*_conv_from_encoding. * lib/uniconv.h (u8_conv_from_encoding, u16_conv_from_encoding, u32_conv_from_encoding): Expect a resultbuf argument and return the result directly as a pointer. * lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): Likewise. * lib/uniconv/u-conv-from-enc.h (FUNC): Likewise. * lib/uniconv/u-strconv-from-enc.h (FUNC): Update. * lib/unicase/ulc-casecmp.c (ulc_u8_casefold): Update. * lib/unicase/ulc-casexfrm.c (ulc_casexfrm): Update. * lib/unilbrk/ulc-possible-linebreaks.c (ulc_possible_linebreaks): Update. * lib/unilbrk/ulc-width-linebreaks.c (ulc_width_linebreaks): Update. * lib/uniwbrk/ulc-wordbreaks.c (ulc_wordbreaks): Update. * lib/vasnprintf.c (VASNPRINTF): Update. * tests/uniconv/test-u8-conv-from-enc.c (main): Update. * tests/uniconv/test-u16-conv-from-enc.c (main): Update. * tests/uniconv/test-u32-conv-from-enc.c (main): Update. * NEWS: Mention the change. 2009-04-26 Bruno Haible Simplify calling convention of u*_conv_to_encoding. * lib/uniconv.h (u8_conv_to_encoding, u16_conv_to_encoding, u32_conv_to_encoding): Expect a resultbuf argument and return the result directly as a pointer. * lib/uniconv/u8-conv-to-enc.c (u8_conv_to_encoding): Likewise. * lib/uniconv/u-conv-to-enc.h (FUNC): Likewise. Preserve errno while freeing scaled_offsets if mem_iconveha failed. * lib/unicase/u-casexfrm.h (FUNC): Update. * lib/uninorm/u-normxfrm.h (FUNC): Update. * lib/vasnprintf.c (VASNPRINTF): Update. * tests/uniconv/test-u8-conv-to-enc.c (main): Update. * tests/uniconv/test-u16-conv-to-enc.c (main): Update. * tests/uniconv/test-u32-conv-to-enc.c (main): Update. * NEWS: Mention the change. 2009-04-26 Bruno Haible Avoid test failures on AIX and OSF/1. * lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): Avoid calling malloc(0). * lib/uniconv/u8-conv-to-enc.c (u8_conv_to_encoding): Likewise. * lib/unilbrk/ulc-possible-linebreaks.c (ulc_possible_linebreaks): Likewise. * lib/unilbrk/ulc-width-linebreaks.c (ulc_width_linebreaks): Likewise. * lib/uniwbrk/ulc-wordbreaks.c (ulc_wordbreaks): Likewise. * lib/uniconv/u-conv-to-enc.h (FUNC): Likewise. Fix memory leak. * lib/unistr/u-cpy-alloc.h (FUNC): Call malloc(1) instead of malloc(0). * doc/posix-functions/malloc.texi: Document the portability problem related to malloc(0). 2009-04-26 Bruno Haible * modules/unistr/u8-cpy-alloc (Depends-on): Add malloc-posix. * modules/unistr/u16-cpy-alloc (Depends-on): Likewise. * modules/unistr/u32-cpy-alloc (Depends-on): Likewise. 2009-04-25 Bruno Haible Avoid link error when creating a namespace clean library. * lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Don't define as macro with arguments if already defined as an alias. * lib/signbitf.c (gl_signbitf): Don't undefine. * lib/signbitd.c (gl_signbitd): Don't undefine. * lib/signbitl.c (gl_signbitl): Don't undefine. 2009-04-25 Jim Meyering vc-list-files: fix another quoting bug * build-aux/vc-list-files: Avoid sed backslash expansion of pathological directory names. 2009-04-25 Eric Blake vc-list-files: fix shell quoting error * build-aux/vc-list-files: Protect against $ in $dir. Normalize timestamp. 2009-04-25 Jim Meyering vc-list-files: restore lost functionality with subdir argument * build-aux/vc-list-files: When given a non-"." sub-directory argument, substitute the $dir/ prefix back onto each resulting name. Otherwise, coreutils' root_tests check would fail. 2009-04-24 Eric Blake vc-list-files: ignore git symlinks * build-aux/vc-list-files (.git): Use ls-tree and a filter, rather than ls-files, to ignore git symlinks. maint.mk: import improvements from m4 * top/maint.mk (VC-tag): Use signing key from cfg.mk. (move_if_change): Delete unused macro. (news-date-check, vc-diff-check): Support VPATH builds. (announcement): Likewise. Split --bootstrap-tools list... (boostrap-tools): ...into separate list, which can be overridden in cfg.mk. (sc_avoid_if_before_free): Point to $(gnulib_dir), rather than requiring dependency on useless-if-before-free module. (VC_LIST, VC_LIST_EXCEPT): Likewise for vc-list-files module. Support VPATH builds. 2009-04-24 Jim Meyering maint.mk: remove coreutils-specific rules and variables * top/maint.mk (bin, taint-distcheck, coreutils-path-check, t): Remove. (fake_home, install-transform-check, my-instcheck, pfx, TMPDIR): Remove. (t_prefix, t_taint, tp, warn_cflags, write_loser, my-distcheck): Remove. maint.mk: remove obsolete rule * top/maint.mk (rel-check): Remove rule. (WGET, WGETFLAGS): Remove now-unused variables. 2009-04-24 Simon Josefsson * top/maint.mk (makefile-check): Renamed to sc_makefile_check for consistency. * modules/vc-list-files-tests (TESTS_ENVIRONMENT): Use '$(PATH_SEPARATOR)' instead of ':'. 2009-04-24 Simon Josefsson * lib/getopt1.c (main): Use 'const' for static array. 2009-04-24 Simon Josefsson * top/maint.mk: Sync with coreutils. * NEWS: Explain incompatibilities. 2009-04-22 Yoann Vandoorselaere Bruno Haible Fix cross-compilation results. * m4/btowc.m4 (gl_FUNC_BTOWC): Use no-op statement, rather than empty statement, as third argument of AC_TRY_RUN. * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE, gl_MBRTOWC_SANITYCHECK, gl_MBRTOWC_NULL_ARG, gl_MBRTOWC_RETVAL, gl_MBRTOWC_NUL_RETVAL): Likewise. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Likewise. * m4/wcsrtombs.m4 (gl_WCSRTOMBS_TERMINATION, gl_WCSRTOMBS_NULL): Likewise. * m4/wctob.m4 (gl_FUNC_WCTOB): Likewise. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Likewise. Update for AIX 4.3. * doc/posix-functions/wcrtomb.texi: Mention the bug on AIX 4.3. 2009-04-20 Bruno Haible Avoid test failure on mingw. * tests/uniwidth/test-uc_width2.sh: Convert newlines in output. 2009-04-20 Bruno Haible Avoid compilation error on mingw. * modules/localename-tests (Depends-on): Add locale. 2009-04-19 Bruno Haible Support for building a shared library on Windows platforms. * tests/uninorm/test-nfc.c (n): Don't define if WOE32DLL. (main): Test the presence of UNINORM_NFC here. * tests/uninorm/test-nfd.c (n): Don't define if WOE32DLL. (main): Test the presence of UNINORM_NFD here. * tests/uninorm/test-nfkc.c (n): Don't define if WOE32DLL. (main): Test the presence of UNINORM_NFKC here. * tests/uninorm/test-nfkd.c (n): Don't define if WOE32DLL. (main): Test the presence of UNINORM_NFKD here. 2009-04-19 Bruno Haible Avoid a compiler warning. * tests/uninorm/test-u32-normalize-big.c (read_normalization_test_file): Change type of variable 'sequence'. 2009-04-19 Bruno Haible * modules/configmake (Makefile.am): When the contents of configmake.h does not change, arrange to preserve its modification time. 2009-04-17 Simon Josefsson * top/maint.mk (PO_DOMAIN): New variable, allows overriding of gettext domain. 2009-04-16 Jim Meyering useless-if-before-free: improve conversion code * build-aux/useless-if-before-free: Adjust code-in-comment to match "...!= 0" as well as "...!= NULL". emacs has one of the former. 2009-04-14 Bruno Haible * modules/fcntl (Depends-on): Add extensions. * m4/fcntl_h.m4 (gl_FCNTL_H): Add a comment. 2009-04-12 Ben Pfaff Make fcntl module detect O_NOATIME, O_NOFOLLOW on GNU/Linux. * m4/fcntl_h.m4 (gl_FCNTL_H): Require AC_USE_SYSTEM_EXTENSIONS. 2009-03-20 Ben Pfaff Make rename replace existing destinations on Windows. * m4/rename.m4: Add test for Mingw. * lib/rename.c: Add rename replacement that uses MoveFileEx with MOVEFILE_REPLACE_EXISTING to replace existing destination files. * doc/posix-functions/rename.texi: Document. 2009-04-10 Bruno Haible New include file "iconveh.h". * lib/iconveh.h: New file, extracted from lib/striconveh.h. * lib/striconveh.h: Include it. (enum iconv_ilseq_handler): Remove definition. * lib/striconveha.h: Include and iconveh.h instead of striconveh.h. * lib/striconveha.c: Include striconveh.h. * lib/uniconv.h: Include iconveh.h instead of striconveh.h. * modules/striconveh (Files): Add lib/iconveh.h. * modules/uniconv/base (Files): Add lib/iconveh.h. Remove lib/striconveh.h. 2009-04-10 Bruno Haible * lib/uniconv.h: Update comment. 2009-04-10 Bruno Haible * lib/unistr/u8-mbtouc-aux.c: Inside libunistring, define the function always. * lib/unistr/u8-mbtouc-unsafe-aux.c: Likewise. * lib/unistr/u16-mbtouc-aux.c: Likewise. * lib/unistr/u16-mbtouc-unsafe-aux.c: Likewise. * lib/unistr/u8-mbtouc.c: Inside libunistring, include "unistring-notinline.h", so that the function gets defined always. * lib/unistr/u8-mbtouc-unsafe.c: Likewise. * lib/unistr/u8-uctomb.c: Likewise. * lib/unistr/u16-mbtouc.c: Likewise. * lib/unistr/u16-mbtouc-unsafe.c: Likewise. * lib/unistr/u16-uctomb.c: Likewise. * lib/unistr/u32-mbtouc.c: Likewise. * lib/unistr/u32-mbtouc-unsafe.c: Likewise. * lib/unistr/u32-uctomb.c: Likewise. 2009-04-10 Bruno Haible Mark 'utime' obsolete. * modules/utime (Status, Notice): New sections. Suggested by Jim Meyering. Fix cross-compile guess for utime test. * m4/utime.m4 (AC_FUNC_UTIME_NULL): Add definition from newest unstable autoconf. * doc/posix-functions/utime.texi: Give more precisions. Reported by Jan . 2009-04-09 Kamil Dudka filevercmp: correct today's change * lib/filevercmp.c: Also handle coreutils' test inputs. * tests/test-filevercmp.c: Add inputs from one of coreutils' test scripts. Fix regression in 'filevercmp' module. Thanks Sven Joachim for reporting it. * lib/filevercmp.c: Special handle for "", "." and "..". * tests/test-filevercmp.c: Enlarge the set suite. 2009-04-07 Jim Meyering useless-if-before-free: show how to remove braced useless free, too * build-aux/useless-if-before-free: still only in a comment, though. 2009-04-07 Reuben Thomas maint.mk: import changes to syntax-check macros from coreutils * top/maint.mk (_prohibit_regexp, _header_without_use): Define. Use them in the relevant macros. 2009-04-06 Bruno Haible Fix unportable use of bit-fields. * lib/unicase/special-casing.h (struct special_casing_rule): Change the bit-field type from 'int' to 'signed int'. Otherwise Solaris cc, AIX xlc, and OSF/1 cc interpret it as 'unsigned int'. 2009-04-06 Bruno Haible Avoid test failures on AIX and OSF/1. * tests/unicase/test-u8-casefold.c (check): Account for the possibility that malloc(0) = NULL. * tests/unicase/test-u8-tolower.c (check): Likewise. * tests/unicase/test-u8-totitle.c (check): Likewise. * tests/unicase/test-u8-toupper.c (check): Likewise. * tests/unicase/test-u16-casefold.c (check): Likewise. * tests/unicase/test-u16-tolower.c (check): Likewise. * tests/unicase/test-u16-totitle.c (check): Likewise. * tests/unicase/test-u16-toupper.c (check): Likewise. * tests/unicase/test-u32-casefold.c (check): Likewise. * tests/unicase/test-u32-tolower.c (check): Likewise. * tests/unicase/test-u32-totitle.c (check): Likewise. * tests/unicase/test-u32-toupper.c (check): Likewise. * tests/uninorm/test-u8-nfc.c (check): Likewise. * tests/uninorm/test-u8-nfd.c (check): Likewise. * tests/uninorm/test-u8-nfkc.c (check): Likewise. * tests/uninorm/test-u8-nfkd.c (check): Likewise. * tests/uninorm/test-u16-nfc.c (check): Likewise. * tests/uninorm/test-u16-nfd.c (check): Likewise. * tests/uninorm/test-u16-nfkc.c (check): Likewise. * tests/uninorm/test-u16-nfkd.c (check): Likewise. * tests/uninorm/test-u32-nfc.c (check): Likewise. * tests/uninorm/test-u32-nfd.c (check): Likewise. * tests/uninorm/test-u32-nfkc.c (check): Likewise. * tests/uninorm/test-u32-nfkd.c (check): Likewise. 2009-04-05 Bruno Haible Work around an autoconf limitation. * gnulib-tool (func_emit_lib_Makefile_am): Omit the "Reproduce by" comment line if it would be longer than 3 KB. 2009-04-05 Bruno Haible Avoid test failure with libiconv-1.13. * tests/test-striconveh.c (main): Allow result of libiconv 1.13 as one of the expected test results. 2009-04-05 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Don't add the library to noinst_LTLIBRARIES if the Makefile.am in the same directory specifies that it should be installed. 2009-04-05 Bruno Haible * gnulib-tool: New option --copy-file. (func_usage): Document it. (func_dest_tmpfilename): Moved out of func_import. (func_add_file, func_update_file): New functions, extracted from func_import. (func_import): Update. 2009-04-05 Karl Berry * README: prominently mention gnulib-tool. Rearrange sections so getting the code is near the top. 2009-04-05 Bruno Haible * lib/unicase.h: Mention u*_cmp2. * lib/unicase/u-casecmp.h (FUNC): Invoke U_CMP2 instead of U_CMP. * lib/unicase/u8-casecmp.c: Use u8_cmp2 instead of u8_cmp. * lib/unicase/ulc-casecmp.c: Likewise. * lib/unicase/u16-casecmp.c: Use u16_cmp2 instead of u16_cmp. * lib/unicase/u32-casecmp.c: Use u32_cmp2 instead of u32_cmp. * modules/unicase/u8-casecmp (Depends-on): Add unistr/u8-cmp2, remove unistr/u8-cmp. * modules/unicase/ulc-casecmp (Depends-on): Likewise. * modules/unicase/u16-casecmp (Depends-on): Add unistr/u16-cmp2, remove unistr/u16-cmp. * modules/unicase/u32-casecmp (Depends-on): Add unistr/u32-cmp2, remove unistr/u32-cmp. * lib/uninorm.h: Mention u*_cmp2. * lib/uninorm/u-normcmp.h (FUNC): Invoke U_CMP2 instead of U_CMP. * lib/uninorm/u8-normcmp.c: Use u8_cmp2 instead of u8_cmp. * lib/uninorm/u16-normcmp.c: Use u16_cmp2 instead of u16_cmp. * lib/uninorm/u32-normcmp.c: Use u32_cmp2 instead of u32_cmp. * modules/uninorm/u8-normcmp (Depends-on): Add unistr/u8-cmp2, remove unistr/u8-cmp. * modules/uninorm/u16-normcmp (Depends-on): Add unistr/u16-cmp2, remove unistr/u16-cmp. * modules/uninorm/u32-normcmp (Depends-on): Add unistr/u32-cmp2, remove unistr/u32-cmp. New module 'unistr/u32-cmp2'. * lib/unistr/u32-cmp2.c: New file. * modules/unistr/u32-cmp2: New file. New module 'unistr/u16-cmp2'. * lib/unistr/u16-cmp2.c: New file. * modules/unistr/u16-cmp2: New file. New module 'unistr/u8-cmp2'. * lib/unistr.h (u8_cmp2, u16_cmp2, u32_cmp2): New declarations. * lib/unistr/u8-cmp2.c: New file. * lib/unistr/u-cmp2.h: New file. * modules/unistr/u8-cmp2: New file. 2009-04-05 Bruno Haible * lib/unictype.h (uc_property_is_valid): New macro. * tests/unictype/test-pr_byname.c (main): Use it. * lib/unistr.h: Doc fixes. * lib/uniconv.h: Doc fixes. * lib/unictype.h: Doc fixes. 2009-04-03 Paul Eggert Port coreutils 7.2 to Solaris 8. * modules/arpa_inet (arpa/inet.h): Depend on arpa_inet.in.h. * m4/inet_ntop.m4 (gl_INET_NTOP): Search for inet_ntop in -lnsl, for Solaris 8. This is a bit of a hack, as it means it's the caller's responsibility to add -lnsl if needed, but most likely it won't be needed since only getaddrinfo uses this and getaddrinfo isn't needed on Solaris 8. * modules/fnmatch (Depends-on): Add mbsrtowcs, to fix a porting problem to Solaris 8 encountered with coreutils 7.2, which resulted in a message "fnmatch.c:292: warning: passing argument 4 of 'mbsrtowcs' from incompatible pointer type". Also, add mbsinit at the suggestion of Bruno Haible, since fnmatch uses mbsinit. 2009-04-03 Simon Josefsson * m4/ld-version-script.m4: Add FIXME comment. 2009-04-02 Simon Josefsson * doc/ld-output-def.texi: Use DLL_VERSION instead of confusing SOVERSION variable. 2009-04-02 Bruno Haible * Makefile (info, html, dvi, pdf): Combine the rules. Suggested by Jim Meyering. 2009-04-01 Bruno Haible * Makefile (info, html, dvi, pdf): New targets. Reported by Reuben Thomas . 2009-04-01 Bruno Haible * doc/gnulib-tool.texi (Invoking gnulib-tool): Document how gnulib-tool can be put into PATH. Reported by Reuben Thomas . Suggested by Karl Berry. 2009-04-01 Bruno Haible * doc/lib-symbol-visibility.texi: Follow texinfo style conventions. 2009-04-01 Bruno Haible Rename module 'visibility'. * modules/lib-symbol-visibility: Renamed from modules/visibility. * doc/lib-symbol-visibility.texi: Renamed from visibility.texi. * doc/gnulib.texi: Update. * MODULES.html.sh (Misc): Update. * NEWS: Mention the change. 2009-04-01 Simon Josefsson * modules/lib-msvc-compat: New module. Thanks to Bruno Haible , Ralf Wildenhues , and Eric Blake for review. * MODULES.html.sh: Add lib-msvc-compat. * doc/gnulib.texi: Link to new section. * m4/ld-output-def.m4: New file. * doc/ld-output-def.texi: New file. 2009-04-01 Simon Josefsson Rename ld-version-script to lib-symbol-versions. Suggested by Bruno Haible . * modules/ld-version-script: Renamed to lib-symbol-versions. * doc/ld-version-script.texi: Fix module name. * MODULES.html.sh: Add lib-symbol-versions. 2009-03-31 Simon Josefsson * modules/u64-tests: New file. * tests/test-u64.c: New file. 2009-03-04 Simon Josefsson * MODULES.html.sh: Mention u64. * modules/u64: New module. * modules/crypto/sha512: Depend on u64 module instead of providing u64.h. 2009-03-27 Eric Blake test-strerror: make debugging EAI_SYSTEM easier * modules/getaddrinfo-tests (Depends-on): Add strerror. * test-getaddrinfo.c (simple) [ENABLE_DEBUGGING]: Report errno if failure was EAI_SYSTEM. 2009-03-25 Bruno Haible Fix a problem with --enable-relocatable on Solaris 7. * modules/relocatable-prog-wrapper (Depends-on): Add environ. Needed since 2008-02-24. 2009-03-25 Eric Blake test-sockets: avoid gcc warning * tests/test-sockets.c (main): Silence compiler warning. 2009-03-25 Paul Eggert New modules nproc, pthread, contributed by Glen Lenker. * MODULES.html.sh: Add pthread, nproc. * lib/nproc.c: New file. * lib/nproc.h: New file. * lib/pthread.in.h: New file. * m4/pthread.m4: New file. * modules/nproc: New file. * modules/pthread: New file. 2009-03-24 Simon Josefsson * modules/unicase/locale-language-tests (test_locale_language_LDADD): New variable. 2009-03-24 Kamil Dudka filevercmp: handle simple~ and numbered.~3~ backup suffixes * lib/filevercmp.c: Handle simple~ and numbered.~3~ backup suffixes. * tests/test-filevercmp.c: Add tests for backup suffixes. 2009-03-24 Simon Josefsson * modules/stdlib (Depends-on): Add stdint, needed when defining struct random_data on, for example, HP-UX 10.20. Reported by Albert Chin . 2009-03-24 Simon Josefsson * lib/readline.c (readline): Call fflush on stdout after printing prompt. 2009-03-20 Bruno Haible Remove dependency from 'close' module to -lws2_32 on native Windows. * lib/close-hook.h: New file. * lib/close-hook.c: New file. * lib/close.c: Include close-hook.h. Don't include , w32sock.h. (_gl_close_fd_maybe_socket): Remove function. (rpl_close): Invoke execute_all_close_hooks instead of _gl_close_fd_maybe_socket. * lib/sockets.c: Include close-hook.h, w32sock.h. (close_fd_maybe_socket): New function, essentially from lib/close.c. (close_sockets_hook): New variable. (gl_sockets_startup): Register close_fd_maybe_socket as a hook. (gl_sockets_cleanup): Unregister it. * lib/unistd.in.h (HAVE__GL_CLOSE_FD_MAYBE_SOCKET): Remove macro. * m4/close.m4 (gl_REPLACE_CLOSE): Undo 2009-02-05 change. * modules/close-hook: New file. * modules/close (Files): Remove lib/w32sock.h. (Depends-on): Add close-hook. (Link): Remove section. * modules/sockets (Files): Add lib/w32sock.h. (Depends-on): Add close-hook. * modules/sys_socket (configure.ac): Remove gl_MODULE_INDICATOR invocation. * NEWS: Mention that LIB_CLOSE is gone. 2009-03-23 Eric Blake signal-tests: test previous patch * tests/test-signal.c: New file. * modules/signal-tests: Likewise. signal.h: always support 'volatile sig_atomic_t' * m4/signal_h.m4 (gl_SIGNAL_H): Check for AIX limitation. (gl_SIGNAL_H_DEFAULTS): Add a default. * modules/signal (Makefile.am): Substitute if needed. * lib/signal.in.h (sig_atomic_t): Redefine if needed, so that users can blindly add volatile. * doc/posix-headers/signal.texi (signal.h): Document it. Reported by Matthew Woehlke. 2009-03-23 Jim Meyering pathmax: PATH_MAX: use pathconf only when available * lib/pathmax.h (PATH_MAX): Select the pathconf-using definition only if HAVE_PATHCONF is defined. Patch by Sylvain Beucler. * m4/pathmax.m4 (gl_PATHMAX): Check for pathconf. This avoids a link failure in a PSP cross-compilation environment described in http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/17048 * lib/vasnprintf.c (divide): Fix typo in comment. 2009-03-23 Ralf Wildenhues * gnulib-tool (func_filter_filelist): Fix comment. 2009-03-20 Bruno Haible Make sockets.h self-contained. * lib/sockets.c: Include sockets.h first. * lib/sockets.h: Include before using the SOCKET type. 2009-03-19 Eric Blake doc: mention more functions added in cygwin 1.7.0 * doc/posix-functions/log2.texi: Mention recent cygwin 1.7.0 addition. * doc/posix-functions/log2f.texi: Likewise. 2009-03-19 Jim Meyering fsusage: avoid syntax error due to statement-before-declaration * lib/fsusage.c (get_fs_usage): Put warning-avoidance statement after all declarations. Reported by Matthew Woehlke in http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/16231 2009-03-18 Eric Blake build-aux/compile: sync from automake * build-aux/compile: New file, from automake. * config/srclist.txt: Mention build-aux/compile. 2009-03-17 Bruno Haible * lib/git-merge-changelog.c: Fix typo in comment. Reported by Reuben Thomas . 2009-03-17 Reuben Thomas * m4/regex.m4: update and improve help for --without-included-regex. 2009-03-17 Simon Josefsson * modules/isnanl-nolibm-tests (Files): Add tests/nan.h to avoid failure on missing include files. 2009-03-17 Eric Blake doc: mention more functions added in cygwin 1.7.0 * doc/posix-functions/fwprintf.texi: Mention recent cygwin 1.7.0 addition. * doc/posix-functions/fwscanf.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/swscanf.texi: Likewise. * doc/posix-functions/vfwprintf.texi: Likewise. * doc/posix-functions/vfwscanf.texi: Likewise. * doc/posix-functions/vswprintf.texi: Likewise. * doc/posix-functions/vswscanf.texi: Likewise. * doc/posix-functions/vwprintf.texi: Likewise. * doc/posix-functions/vwscanf.texi: Likewise. * doc/posix-functions/wcscasecmp.texi: Likewise. * doc/posix-functions/wcsdup.texi: Likewise. * doc/posix-functions/wcsftime.texi: Likewise. * doc/posix-functions/wcsncasecmp.texi: Likewise. * doc/posix-functions/wprintf.texi: Likewise. * doc/posix-functions/wscanf.texi: Likewise. * doc/glibc-functions/gethostbyname2.texi: Likewise. 2009-03-14 Ralf Wildenhues maint.mk: really add $(AM_MAKEFLAGS) * top/maint.mk (init-coverage, build-coverage): `$(AM_MAKEFLAGS)' was inadvertently omitted in the last commit. Spotted by Bruno Haible. maint.mk: use $(MAKE) $(AM_MAKEFLAGS) not make * top/maint.mk (init-coverage, build-coverage): Use `$(MAKE) $(AM_MAKEFLAGS)' rather than plain `make'. gnulib-tool: execute $MAKE not make * gnulib-tool: Default $MAKE to 'make'. (func_create_testdir, func_create_megatestdir): Use $MAKE rather than make. Initialize $MAKE in the do-autobuild script. gnulib-tool: use $MAKE not make in generated files * gnulib-tool (func_create_megatestdir): Use $MAKE rather than make, in generated files. Initialize $MAKE in the do-autobuild script. * top/GNUmakefile (_have-git-version-gen): Fix typo. GNUmakefile: disable parallelism only for multiple, recursive targets * top/GNUmakefile (ALL_RECURSIVE_TARGETS): New macro; allow user additions in the Makefile. (AM_RECURSIVE_TARGETS): New macro, override only if not provided by Automake. (.NOTPARALLEL): Only disable parallel builds if multiple targets are listed on the command line and at least one of them is listed in $(ALL_RECURSIVE_TARGETS). 2009-03-14 Bruno Haible * modules/unilbrk/u8-possible-linebreaks (Depends-on): Replace utf8-ucs4-unsafe with unistr/u8-mbtouc-unsafe. * modules/unilbrk/u8-width-linebreaks (Depends-on): Likewise. * modules/unilbrk/u16-possible-linebreaks (Depends-on): Replace utf16-ucs4-unsafe with unistr/u16-mbtouc-unsafe. * modules/unilbrk/u16-width-linebreaks (Depends-on): Likewise. * modules/unistr/u8-chr (Depends-on): Replace ucs4-utf8 with unistr/u8-uctomb. * modules/unistr/u8-strchr (Depends-on): Likewise. * modules/unistr/u8-strrchr (Depends-on): Likewise. * modules/unistr/u16-chr (Depends-on): Replace ucs4-utf16 with unistr/u16-uctomb. * modules/unistr/u16-strchr (Depends-on): Likewise. * modules/unistr/u16-strrchr (Depends-on): Likewise. 2009-03-12 Bruno Haible Work around select() bug on Interix 3.5. * lib/sys_select.in.h (select): Also replace if REPLACE_SELECT is 1. * lib/select.c (rpl_select): Add an implementation for Unix platforms. * m4/select.m4: New file. * m4/sys_select_h.m4 (gl_SYS_SELECT_H_DEFAULTS): Initialize REPLACE_SELECT. * modules/sys_select (Makefile.am): Substitute REPLACE_SELECT. * modules/select (Files): Add m4/select.m4. (configure.ac): Move conditional to m4/select.m4. Invoke gl_FUNC_SELECT. * modules/nanosleep (Depends-on): Add select. * modules/poll (Depends-on): Likewise. * doc/posix-functions/select.texi: Mention the Interix bug. Reported by Markus Duft . * lib/select.c: Renamed from lib/winsock-select.c. * modules/select (Files): Add lib/select.c, remove lib/winsock-select.c. (configure.ac): Update. 2009-03-12 Jim Meyering avoid gcc warnings about unused macro definitions * lib/readtokens.c (STREQ): Remove unused definition. * lib/xmalloc.c (SIZE_MAX): Likewise. * lib/openat-die.c (N_): Likewise. * lib/mountlist.c (SIZE_MAX): Remove definition. Instead, include . * lib/readutmp.c: Likewise. * modules/readutmp (Depends-on): Add stdint. * modules/mountlist (Depends-on): Add stdint. * lib/userspec.c (ISDIGIT): Move definition into #if block where used. 2009-03-10 Bruno Haible Tests for module 'mbmemcasecoll'. * modules/mbmemcasecoll-tests: New file. * tests/test-mbmemcasecoll1.sh: New file. * tests/test-mbmemcasecoll2.sh: New file. * tests/test-mbmemcasecoll3.sh: New file. * tests/test-mbmemcasecoll.c: New file. New module 'mbmemcasecoll'. * lib/mbmemcasecoll.h: New file. * lib/mbmemcasecoll.c: New file. * modules/mbmemcasecoll: New file. * tests/test-mbmemcasecmp.h: New file, extracted from tests/test-mbmemcasecmp.c. * tests/test-mbmemcasecmp.c: Include test-mbmemcasecmp.h. (test_ascii, test_iso_8859_1, test_utf_8): Remove functions. (main): Update. * modules/mbmemcasecmp-tests (Files): Add tests/test-mbmemcasecmp.h. 2009-03-09 Bruno Haible Tests for module 'mbmemcasecmp'. * modules/mbmemcasecmp-tests: New file. * tests/test-mbmemcasecmp1.sh: New file. * tests/test-mbmemcasecmp2.sh: New file. * tests/test-mbmemcasecmp3.sh: New file. * tests/test-mbmemcasecmp.c: New file. New module 'mbmemcasecmp'. * lib/mbmemcasecmp.h: New file. * lib/mbmemcasecmp.c: New file. * modules/mbmemcasecmp: New file. 2009-03-09 Bruno Haible Tests for module 'unicase/ulc-casecoll'. * modules/unicase/ulc-casecoll-tests: New file. * tests/unicase/test-ulc-casecoll1.sh: New file. * tests/unicase/test-ulc-casecoll2.sh: New file. * tests/unicase/test-ulc-casecoll.c: New file. New module 'unicase/ulc-casecoll'. * lib/unicase.h (ulc_casecoll): New declaration. * lib/unicase/ulc-casecoll.c: New file. * modules/unicase/ulc-casecoll: New file. New module 'unicase/ulc-casexfrm'. * lib/unicase.h (ulc_casexfrm): New declaration. * lib/unicase/ulc-casexfrm.c: New file. * modules/unicase/ulc-casexfrm: New file. 2009-03-09 Bruno Haible Followup to 2008-12-22 commit: Remove unnecessary AC_FUNC_MBRTOWC invocations. * m4/mbscasecmp.m4: Remove file. * modules/mbscasecmp (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSCASECMP invocation. * m4/mbscasestr.m4: Remove file. * modules/mbscasestr (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSCASESTR invocation. * m4/mbschr.m4: Remove file. * modules/mbschr (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSCHR invocation. * m4/mbscspn.m4: Remove file. * modules/mbscspn (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSCSPN invocation. * m4/mbslen.m4: Remove file. * modules/mbslen (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSLEN invocation. * m4/mbsncasecmp.m4: Remove file. * modules/mbsncasecmp (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSNCASECMP invocation. * m4/mbsnlen.m4: Remove file. * modules/mbsnlen (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSNLEN invocation. * m4/mbspbrk.m4: Remove file. * modules/mbspbrk (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSPBRK invocation. * m4/mbspcasecmp.m4: Remove file. * modules/mbspcasecmp (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSPCASECMP invocation. * m4/mbsrchr.m4: Remove file. * modules/mbsrchr (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSRCHR invocation. * m4/mbssep.m4: Remove file. * modules/mbssep (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSSEP invocation. * m4/mbsspn.m4: Remove file. * modules/mbsspn (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSSPN invocation. * m4/mbsstr.m4: Remove file. * modules/mbsstr (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSSTR invocation. * m4/mbstok_r.m4: Remove file. * modules/mbstok_r (Files): Remove it and m4/mbrtowc.m4 (configure.ac): Remove gl_FUNC_MBSTOK_R invocation. * m4/mbswidth.m4 (gl_MBSWIDTH): Remove AC_FUNC_MBRTOWC invocation. * m4/quotearg.m4 (gl_QUOTEARG): Remove mbsinit test and AC_TYPE_MBSTATE_T, AC_FUNC_MBRTOWC invocations. * modules/trim (configure.ac): Remove AC_FUNC_MBRTOWC invocation. 2009-03-08 Bruno Haible Tests for module 'unicase/ulc-casecmp'. * modules/unicase/ulc-casecmp-tests: New file. * tests/unicase/test-ulc-casecmp1.sh: New file. * tests/unicase/test-ulc-casecmp2.sh: New file. * tests/unicase/test-ulc-casecmp.c: New file. New module 'unicase/ulc-casecmp'. * lib/unicase.h (ulc_casecmp): New declaration. * lib/unicase/ulc-casecmp.c: New file. * lib/unicase/u-casecmp.h (FUNC): Change argument types to 'const SRC_UNIT *'. * lib/unicase/u8-casecmp.c (SRC_UNIT): Define like UNIT. * lib/unicase/u16-casecmp.c (SRC_UNIT): Likewise. * lib/unicase/u32-casecmp.c (SRC_UNIT): Likewise. * modules/unicase/ulc-casecmp: New file. Tests for module 'unicase/u32-is-cased'. * modules/unicase/u32-is-cased-tests: New file. * tests/unicase/test-u32-is-cased.c: New file. Tests for module 'unicase/u16-is-cased'. * modules/unicase/u16-is-cased-tests: New file. * tests/unicase/test-u16-is-cased.c: New file. Tests for module 'unicase/u8-is-cased'. * modules/unicase/u8-is-cased-tests: New file. * tests/unicase/test-u8-is-cased.c: New file. * tests/unicase/test-is-cased.h: New file. New module 'unicase/u32-is-cased'. * lib/unicase/u32-is-cased.c: New file. * modules/unicase/u32-is-cased: New file. New module 'unicase/u16-is-cased'. * lib/unicase/u16-is-cased.c: New file. * modules/unicase/u16-is-cased: New file. New module 'unicase/u8-is-cased'. * lib/unicase/u8-is-cased.c: New file. * lib/unicase/u-is-cased.h: New file. * modules/unicase/u8-is-cased: New file. Tests for module 'unicase/u32-is-casefolded'. * modules/unicase/u32-is-casefolded-tests: New file. * tests/unicase/test-u32-is-casefolded.c: New file. Tests for module 'unicase/u16-is-casefolded'. * modules/unicase/u16-is-casefolded-tests: New file. * tests/unicase/test-u16-is-casefolded.c: New file. Tests for module 'unicase/u8-is-casefolded'. * modules/unicase/u8-is-casefolded-tests: New file. * tests/unicase/test-u8-is-casefolded.c: New file. * tests/unicase/test-is-casefolded.h: New file. New module 'unicase/u32-is-casefolded'. * lib/unicase/u32-is-casefolded.c: New file. * modules/unicase/u32-is-casefolded: New file. New module 'unicase/u16-is-casefolded'. * lib/unicase/u16-is-casefolded.c: New file. * modules/unicase/u16-is-casefolded: New file. New module 'unicase/u8-is-casefolded'. * lib/unicase/u8-is-casefolded.c: New file. * modules/unicase/u8-is-casefolded: New file. Tests for module 'unicase/u32-is-titlecase'. * modules/unicase/u32-is-titlecase-tests: New file. * tests/unicase/test-u32-is-titlecase.c: New file. Tests for module 'unicase/u16-is-titlecase'. * modules/unicase/u16-is-titlecase-tests: New file. * tests/unicase/test-u16-is-titlecase.c: New file. Tests for module 'unicase/u8-is-titlecase'. * modules/unicase/u8-is-titlecase-tests: New file. * tests/unicase/test-u8-is-titlecase.c: New file. * tests/unicase/test-is-titlecase.h: New file. New module 'unicase/u32-is-titlecase'. * lib/unicase/u32-is-titlecase.c: New file. * modules/unicase/u32-is-titlecase: New file. New module 'unicase/u16-is-titlecase'. * lib/unicase/u16-is-titlecase.c: New file. * modules/unicase/u16-is-titlecase: New file. New module 'unicase/u8-is-titlecase'. * lib/unicase/u8-is-titlecase.c: New file. * modules/unicase/u8-is-titlecase: New file. Tests for module 'unicase/u32-is-lowercase'. * modules/unicase/u32-is-lowercase-tests: New file. * tests/unicase/test-u32-is-lowercase.c: New file. Tests for module 'unicase/u16-is-lowercase'. * modules/unicase/u16-is-lowercase-tests: New file. * tests/unicase/test-u16-is-lowercase.c: New file. Tests for module 'unicase/u8-is-lowercase'. * modules/unicase/u8-is-lowercase-tests: New file. * tests/unicase/test-u8-is-lowercase.c: New file. * tests/unicase/test-is-lowercase.h: New file. New module 'unicase/u32-is-lowercase'. * lib/unicase/u32-is-lowercase.c: New file. * modules/unicase/u32-is-lowercase: New file. New module 'unicase/u16-is-lowercase'. * lib/unicase/u16-is-lowercase.c: New file. * modules/unicase/u16-is-lowercase: New file. New module 'unicase/u8-is-lowercase'. * lib/unicase/u8-is-lowercase.c: New file. * modules/unicase/u8-is-lowercase: New file. Tests for module 'unicase/u32-is-uppercase'. * modules/unicase/u32-is-uppercase-tests: New file. * tests/unicase/test-u32-is-uppercase.c: New file. Tests for module 'unicase/u16-is-uppercase'. * modules/unicase/u16-is-uppercase-tests: New file. * tests/unicase/test-u16-is-uppercase.c: New file. Tests for module 'unicase/u8-is-uppercase'. * modules/unicase/u8-is-uppercase-tests: New file. * tests/unicase/test-u8-is-uppercase.c: New file. * tests/unicase/test-is-uppercase.h: New file. New module 'unicase/u32-is-uppercase'. * lib/unicase/u32-is-uppercase.c: New file. * modules/unicase/u32-is-uppercase: New file. New module 'unicase/u16-is-uppercase'. * lib/unicase/u16-is-uppercase.c: New file. * modules/unicase/u16-is-uppercase: New file. New module 'unicase/u8-is-uppercase'. * lib/unicase/u8-is-uppercase.c: New file. * modules/unicase/u8-is-uppercase: New file. New module 'unicase/u32-is-invariant'. * lib/unicase/u32-is-invariant.c: New file. * modules/unicase/u32-is-invariant: New file. New module 'unicase/u16-is-invariant'. * lib/unicase/u16-is-invariant.c: New file. * modules/unicase/u16-is-invariant: New file. New module 'unicase/u8-is-invariant'. * lib/unicase/u8-is-invariant.c: New file. * lib/unicase/invariant.h: New file. * lib/unicase/u-is-invariant.h: New file. * modules/unicase/u8-is-invariant: New file. Tests for module 'unicase/u32-casecoll'. * modules/unicase/u32-casecoll-tests: New file. * tests/unicase/test-u32-casecoll.c: New file. Tests for module 'unicase/u16-casecoll'. * modules/unicase/u16-casecoll-tests: New file. * tests/unicase/test-u16-casecoll.c: New file. Tests for module 'unicase/u8-casecoll'. * modules/unicase/u8-casecoll-tests: New file. * tests/unicase/test-u8-casecoll.c: New file. New module 'unicase/u32-casecoll'. * lib/unicase/u32-casecoll.c: New file. * modules/unicase/u32-casecoll: New file. New module 'unicase/u16-casecoll'. * lib/unicase/u16-casecoll.c: New file. * modules/unicase/u16-casecoll: New file. New module 'unicase/u8-casecoll'. * lib/unicase/u8-casecoll.c: New file. * lib/unicase/u-casecoll.h: New file. * modules/unicase/u8-casecoll: New file. New module 'unicase/u32-casexfrm'. * lib/unicase/u32-casexfrm.c: New file. * modules/unicase/u32-casexfrm: New file. New module 'unicase/u16-casexfrm'. * lib/unicase/u16-casexfrm.c: New file. * modules/unicase/u16-casexfrm: New file. New module 'unicase/u8-casexfrm'. * lib/unicase/u8-casexfrm.c: New file. * lib/unicase/u-casexfrm.h: New file. * modules/unicase/u8-casexfrm: New file. Tests for module 'unicase/u32-casecmp'. * modules/unicase/u32-casecmp-tests: New file. * tests/unicase/test-u32-casecmp.c: New file. Tests for module 'unicase/u16-casecmp'. * modules/unicase/u16-casecmp-tests: New file. * tests/unicase/test-u16-casecmp.c: New file. Tests for module 'unicase/u8-casecmp'. * modules/unicase/u8-casecmp-tests: New file. * tests/unicase/test-u8-casecmp.c: New file. * tests/unicase/test-casecmp.h: New file. New module 'unicase/u32-casecmp'. * lib/unicase/u32-casecmp.c: New file. * modules/unicase/u32-casecmp: New file. New module 'unicase/u16-casecmp'. * lib/unicase/u16-casecmp.c: New file. * modules/unicase/u16-casecmp: New file. New module 'unicase/u8-casecmp'. * lib/unicase/u8-casecmp.c: New file. * lib/unicase/u-casecmp.h: New file. * modules/unicase/u8-casecmp: New file. Tests for module 'unicase/u32-casefold'. * modules/unicase/u32-casefold-tests: New file. * tests/unicase/test-u32-casefold.c: New file. Tests for module 'unicase/u16-casefold'. * modules/unicase/u16-casefold-tests: New file. * tests/unicase/test-u16-casefold.c: New file. Tests for module 'unicase/u8-casefold'. * modules/unicase/u8-casefold-tests: New file. * tests/unicase/test-u8-casefold.c: New file. New module 'unicase/u32-casefold'. * lib/unicase/u32-casefold.c: New file. * modules/unicase/u32-casefold: New file. New module 'unicase/u16-casefold'. * lib/unicase/u16-casefold.c: New file. * modules/unicase/u16-casefold: New file. New module 'unicase/u8-casefold'. * lib/unicase/u8-casefold.c: New file. * lib/unicase/u-casefold.h: New file. * modules/unicase/u8-casefold: New file. New module 'unicase/tocasefold'. * lib/unicase/casefold.h: New file. * lib/unicase/tocasefold.c: New file. * lib/unicase/tocasefold.h: New file, generated by gen-uni-tables.c. * modules/unicase/tocasefold: New file. Tests for module 'unicase/u32-totitle'. * modules/unicase/u32-totitle-tests: New file. * tests/unicase/test-u32-totitle.c: New file. Tests for module 'unicase/u16-totitle'. * modules/unicase/u16-totitle-tests: New file. * tests/unicase/test-u16-totitle.c: New file. Tests for module 'unicase/u8-totitle'. * modules/unicase/u8-totitle-tests: New file. * tests/unicase/test-u8-totitle.c: New file. New module 'unicase/u32-totitle'. * lib/unicase/u32-totitle.c: New file. * modules/unicase/u32-totitle: New file. New module 'unicase/u16-totitle'. * lib/unicase/u16-totitle.c: New file. * modules/unicase/u16-totitle: New file. New module 'unicase/u8-totitle'. * lib/unicase/u8-totitle.c: New file. * lib/unicase/u-totitle.h: New file. * modules/unicase/u8-totitle: New file. Tests for module 'unicase/u32-tolower'. * modules/unicase/u32-tolower-tests: New file. * tests/unicase/test-u32-tolower.c: New file. Tests for module 'unicase/u16-tolower'. * modules/unicase/u16-tolower-tests: New file. * tests/unicase/test-u16-tolower.c: New file. Tests for module 'unicase/u8-tolower'. * modules/unicase/u8-tolower-tests: New file. * tests/unicase/test-u8-tolower.c: New file. New module 'unicase/u32-tolower'. * lib/unicase/u32-tolower.c: New file. * modules/unicase/u32-tolower: New file. New module 'unicase/u16-tolower'. * lib/unicase/u16-tolower.c: New file. * modules/unicase/u16-tolower: New file. New module 'unicase/u8-tolower'. * lib/unicase/u8-tolower.c: New file. * modules/unicase/u8-tolower: New file. Tests for module 'unicase/u32-toupper'. * modules/unicase/u32-toupper-tests: New file. * tests/unicase/test-u32-toupper.c: New file. Tests for module 'unicase/u16-toupper'. * modules/unicase/u16-toupper-tests: New file. * tests/unicase/test-u16-toupper.c: New file. Tests for module 'unicase/u8-toupper'. * modules/unicase/u8-toupper-tests: New file. * tests/unicase/test-u8-toupper.c: New file. New module 'unicase/u32-toupper'. * lib/unicase/u32-toupper.c: New file. * modules/unicase/u32-toupper: New file. New module 'unicase/u16-toupper'. * lib/unicase/u16-toupper.c: New file. * modules/unicase/u16-toupper: New file. New module 'unicase/u8-toupper'. * lib/unicase/u8-toupper.c: New file. * modules/unicase/u8-toupper: New file. New module 'unicase/u32-casemap'. * lib/unicase/u32-casemap.c: New file. * modules/unicase/u32-casemap: New file. New module 'unicase/u16-casemap'. * lib/unicase/u16-casemap.c: New file. * modules/unicase/u16-casemap: New file. New module 'unicase/u8-casemap'. * lib/unicase/unicasemap.h: New file. * lib/unicase/u8-casemap.c: New file. * lib/unicase/u-casemap.h: New file. * modules/unicase/u8-casemap: New file. New module 'unicase/special-casing'. * lib/unicase/special-casing.h: New file. * lib/unicase/special-casing.c: New file. * lib/unicase/special-casing-table.gperf: New file, generated by gen-uni-tables.c. * modules/unicase/special-casing: New file. Tests for module 'unicase/locale-language'. * modules/unicase/locale-language-tests: New file. * tests/unicase/test-locale-language.sh: New file. * tests/unicase/test-locale-language.c: New file. New module 'unicase/locale-language'. * lib/unicase/locale-language.c: New file. * lib/unicase/locale-languages.gperf: New file. * modules/unicase/locale-language: New file. Generate more tables for case conversion and case folding. * lib/gen-uni-tables.c (SCC_*): New enum items. (struct special_casing_rule): New type. (casing_rules, num_casing_rules, allocated_casing_rules): New variables. (add_casing_rule, fill_casing_rules): New functions. (struct casefold_rule): New type. (casefolding_rules, num_casefolding_rules, allocated_casefolding_rules): New variables. (fill_casefolding_rules): New function. (unicode_casefold): New variable. (to_casefold, redistribute_casefolding_rules, compare_casing_rules, sort_casing_rules, output_casing_rules): New functions. (main): Accept to more arguments: SpecialCasing.txt and CaseFolding.txt. Invoke fill_casing_rules, fill_casefolding_rules, redistribute_casefolding_rules, sort_casing_rules, output_casing_rules. Output mapping for casefolding. * lib/unicase.h: Include stdbool.h, uninorm.h. (u8_toupper, u16_toupper, u32_toupper, u8_tolower, u16_tolower, u32_tolower, u8_totitle, u16_totitle, u32_totitle): Add nf argument. (u8_casefold, u16_casefold, u32_casefold): Add iso639_language and nf arguments. (u8_casecmp, u16_casecmp, u32_casecmp): Add iso639_language, nf, resultp arguments. (u8_casexfrm, u16_casexfrm, u32_casexfrm): New declarations. (u8_casecoll, u16_casecoll, u32_casecoll): Add iso639_language, nf, resultp arguments. (u8_is_uppercase, u16_is_uppercase, u32_is_uppercase, u8_is_lowercase, u16_is_lowercase, u32_is_lowercase, u8_is_titlecase, u16_is_titlecase, u32_is_titlecase, u8_is_casefolded, u16_is_casefolded, u32_is_casefolded, u8_is_cased, u16_is_cased, u32_is_cased): New declarations. * modules/unicase/base (Depends-on): Add uninorm/base, stdbool. 2009-03-08 Bruno Haible * lib/uninorm.h (u8_normcmp, u16_normcmp, u32_normcmp, u8_normcoll, u16_normcoll, u32_normcoll): Rename argument 'result' to 'resultp'. * lib/uninorm/u-normcmp.h (FUNC): Likewise. * lib/uninorm/u-normcoll.h (FUNC): Likewise. 2009-03-07 Bruno Haible Adjust u*_normcmp, u*_normcoll API. * lib/uninorm.h (u8_normcmp, u16_normcmp, u32_normcmp, u8_normcoll, u16_normcoll, u32_normcoll): Change failure conventions. * lib/uninorm/u-normcmp.h (FUNC): Upon failure, store the error code in errno and return -1. * lib/uninorm/u-normcoll.h (FUNC): Likewise. 2009-03-07 Bruno Haible Tests for module 'uninorm/u32-normcoll'. * modules/uninorm/u32-normcoll-tests: New file. * tests/uninorm/test-u32-normcoll.c: New file. Tests for module 'uninorm/u16-normcoll'. * modules/uninorm/u16-normcoll-tests: New file. * tests/uninorm/test-u16-normcoll.c: New file. Tests for module 'uninorm/u8-normcoll'. * modules/uninorm/u8-normcoll-tests: New file. * tests/uninorm/test-u8-normcoll.c: New file. 2009-03-07 Bruno Haible * tests/uninorm/test-u32-normcmp.h: New file, extracted from tests/uninorm/test-u32-normcmp.c. * tests/uninorm/test-u32-normcmp.c: Include it. (test_nonascii): New function, extracted from main. Add some more tests. (main): Invoke test_ascii and test_nonascii. * modules/uninorm/u32-normcmp-tests (Files): Add tests/uninorm/test-u32-normcmp.h. (Depends-on): Remove uninorm/u32-normcmp. * tests/uninorm/test-u16-normcmp.h: New file, extracted from tests/uninorm/test-u16-normcmp.c. * tests/uninorm/test-u16-normcmp.c: Include it. (test_nonascii): New function, extracted from main. Add some more tests. (main): Invoke test_ascii and test_nonascii. * modules/uninorm/u16-normcmp-tests (Files): Add tests/uninorm/test-u16-normcmp.h. (Depends-on): Remove uninorm/u16-normcmp. * tests/uninorm/test-u8-normcmp.h: New file, extracted from tests/uninorm/test-u8-normcmp.c. * tests/uninorm/test-u8-normcmp.c: Include it. (test_nonascii): New function, extracted from main. Add some more tests. (main): Invoke test_ascii and test_nonascii. * modules/uninorm/u8-normcmp-tests (Files): Add tests/uninorm/test-u8-normcmp.h. (Depends-on): Remove uninorm/u8-normcmp. 2009-03-07 Bruno Haible New module 'uninorm/u32-normcoll'. * lib/uninorm/u32-normcoll.c: New file. * modules/uninorm/u32-normcoll: New file. New module 'uninorm/u16-normcoll'. * lib/uninorm/u16-normcoll.c: New file. * modules/uninorm/u16-normcoll: New file. New module 'uninorm/u8-normcoll'. * lib/uninorm.h (u8_normcoll, u16_normcoll, u32_normcoll): New declarations. * lib/uninorm/u8-normcoll.c: New file. * lib/uninorm/u-normcoll.h: New file. * modules/uninorm/u8-normcoll: New file. New module 'uninorm/u32-normxfrm'. * lib/uninorm/u32-normxfrm.c: New file. * modules/uninorm/u32-normxfrm: New file. New module 'uninorm/u16-normxfrm'. * lib/uninorm/u16-normxfrm.c: New file. * modules/uninorm/u16-normxfrm: New file. New module 'uninorm/u8-normxfrm'. * lib/uninorm.h (u8_normxfrm, u16_normxfrm, u32_normxfrm): New declarations. * lib/uninorm/u8-normxfrm.c: New file. * lib/uninorm/u-normxfrm.h: New file. * modules/uninorm/u8-normxfrm: New file. 2009-03-07 Bruno Haible * modules/uninorm/u8-normcmp (Depends-on): Add uninorm/base. * modules/uninorm/u16-normcmp (Depends-on): Likewise. * modules/uninorm/u32-normcmp (Depends-on): Likewise. 2009-03-07 Bruno Haible New module 'memxfrm'. * lib/memxfrm.h: New file. * lib/memxfrm.c: New file. * modules/memxfrm: New file. 2009-03-07 Bruno Haible New module 'memcmp2'. * lib/memcmp2.h: New file. * lib/memcmp2.c: New file. * modules/memcmp2: New file. 2009-03-07 Bruno Haible Tests for module 'uninorm/decomposing-form'. * modules/uninorm/decomposing-form-tests: New file. * tests/uninorm/test-decomposing-form.c: New file. New module 'uninorm/decomposing-form'. * lib/uninorm.h (uninorm_decomposing_form): New declaration. * lib/uninorm/normalize-internal.h (struct unicode_normalization_form): Add 'decomposing_variant' field. * lib/uninorm/decomposing-form.c: New file. * lib/uninorm/nfc.c (uninorm_nfc): Update. * lib/uninorm/nfd.c (uninorm_nfd): Update. * lib/uninorm/nfkc.c (uninorm_nfkc): Update. * lib/uninorm/nfkd.c (uninorm_nfkd): Update. * modules/uninorm/decomposing-form: New file. * modules/uninorm/nfc (Depends-on): Add uninorm/nfd. * modules/uninorm/nfkc (Depends-on): Add uninorm/nfkd. 2009-03-07 Bruno Haible * lib/uninorm/u-normcmp.h (FUNC): Use stack=allocated buffers for small strings. 2009-03-06 Bruno Haible Tests for module 'uninorm/u32-normcmp'. * tests/uninorm/test-u32-normcmp.c: New file. * modules/uninorm/u32-normcmp-tests: New file. Tests for module 'uninorm/u16-normcmp'. * tests/uninorm/test-u16-normcmp.c: New file. * modules/uninorm/u16-normcmp-tests: New file. Tests for module 'uninorm/u8-normcmp'. * tests/uninorm/test-u8-normcmp.c: New file. * modules/uninorm/u8-normcmp-tests: New file. New module 'uninorm/u32-normcmp'. * lib/uninorm/u32-normcmp.c: New file. * modules/uninorm/u32-normcmp: New file. New module 'uninorm/u16-normcmp'. * lib/uninorm/u16-normcmp.c: New file. * modules/uninorm/u16-normcmp: New file. New module 'uninorm/u8-normcmp'. * lib/uninorm.h (u8_normcmp, u16_normcmp, u32_normcmp): New declarations. * lib/uninorm/u8-normcmp.c: New file. * lib/uninorm/u-normcmp.h: New file. * modules/uninorm/u8-normcmp: New file. 2009-03-06 Bruno Haible * lib/w32spawn.h (dup_noinherit): Add cast, to avoid gcc warning. Reported by Eric Blake. 2009-03-06 Eric Blake Bruno Haible * lib/spawni.c (__spawni) [WIN32_NATIVE]: Define as a stub. * modules/posix_spawn-tests (configure.ac): Define POSIX_SPAWN_PORTED condition. (Makefile.am): Do nothing if POSIX_SPAWN_PORTED is false. * modules/posix_spawnp-tests (configure.ac): Define POSIX_SPAWN_PORTED condition. (Makefile.am): Do nothing if POSIX_SPAWN_PORTED is false. 2009-03-06 Eric Blake * lib/execute.c (execute) [WIN32_NATIVE]: Cast arguments of spawnvpe, to avoid compiler warnings. * lib/pipe.c (create_pipe) [WIN32_NATIVE]: Likewise. 2009-03-05 Bruno Haible * tests/test-ftell.c (main): Disable test beyond end of file on FreeMiNT. Patch by Alan Hourihane . 2009-03-05 Kamil Dudka * lib/filevercmp.c: Move hidden files up in ordering. * tests/test-filevercmp.c: Add tests for hidden files. 2009-03-04 Bruno Haible * modules/visibility (Makefile.am): Augment AM_CFLAGS. * gnulib-tool (func_emit_lib_Makefile_am): Emit initialization of AM_CFLAGS. Reported by Simon Josefsson. 2009-03-03 Bruno Haible * doc/visibility.texi: Recommend to use HAVE_VISIBILITY as a C macro. Reported by Simon Josefsson. * doc/ld-version-script.texi: Update node reference. 2009-03-03 Bruno Haible * modules/visibility (License): Change to 'unlimited'. Suggested by Simon Josefsson. 2009-03-03 Jim Meyering unlinkdir: cannot_unlink_dir may modify process state * lib/unlinkdir.c (cannot_unlink_dir): Add a comment warning that it's neither thread-safe nor appropriate for use in a library. 2009-03-03 Eric Blake test-closein: silence test under Darwin * tests/test-closein.sh: Ignore stderr from cat, since we don't care if it dies from EPIPE or EBADF. 2009-03-03 Bruno Haible * doc/gnulib.texi: Include visibility.texi and ld-version-script.texi earlier. * doc/visibility.texi: Fix @node and @section. 2009-03-03 Simon Josefsson * doc/gnulib.texi: Link to sections for ld version script and visibility. * doc/visibility.texi: Add @node and @section. * modules/ld-version-script: New module. * m4/ld-version-script.m4: New file. * doc/ld-version-script.texi: New file. 2009-03-02 David Lutterkort * lib/safe-alloc.h (__GNUC_PREREQ): New macro. Reported by Tom G. Christensen . 2009-03-02 Bruno Haible * doc/visibility.texi: Mention libtool's -export-symbols option. 2009-03-02 Jim Meyering announce-gen: new option: --no-print-checksums * build-aux/announce-gen (usage): Describe it. (print_checksums): Print a newline here, not in the [*] footnote. (main): Honor it. 2009-03-01 Bruno Haible Use socklen_t in the native Windows replacements prototypes. * lib/sys_socket.in.h (rpl_getsockopt, rpl_setsockopt): Use socklen_t instead of 'int'. * lib/getsockopt.c (rpl_getsockopt): Likewise. * lib/setsockopt.c (rpl_setsockopt): Likewise. * modules/getsockopt (Depends-on): Add socklen. * modules/setsockopt (Depends-on): Add socklen. 2009-03-01 Bruno Haible * gnulib-tool (sed): Do alias as "sed --posix" if sed's version is at least 4.2. 2009-03-01 Eric Blake Bruno Haible * lib/wait-process.h (wait_subprocess): Describe effect of termsigp on error messages. * lib/wait-process.c (wait_subprocess): Omit error message about deadly signal sent to the child of termsigp != NULL. 2009-03-01 Eric Blake * lib/wait-process.c (wait_subprocess): Remove unnecessary cast. 2009-03-01 Bruno Haible Avoid a gcc warning. * tests/test-sched.c (b): Make global. Reported by Eric Blake. 2009-01-19 Martin Lambers Provide POSIX semantics for socket timeout options on W32. * lib/setsockopt.c: Convert struct timeval to milliseconds on W32. * lib/getsockopt.c: Convert milliseconds to struct timeval on W32. * modules/setsockopt: Depend on sys_time module for struct timeval. * modules/getsockopt: Depend on sys_time module for struct timeval. 2009-03-01 Simon Josefsson * lib/gai_strerror.c (values): Use EAI_INPROGRESS instead of __USE_GNU, for consistency with netdb.in.h. Reported by Alan Hourihane . 2009-03-01 Bruno Haible More support for FreeMiNT. * lib/fseeko.c (rpl_fseeko): Complete last commit. Reported by Alan Hourihane . 2009-03-01 Bruno Haible More support for FreeMiNT. * lib/fpurge.c (fpurge): Correct last commit. Reported by Alan Hourihane . 2009-03-01 Ralf Wildenhues Fix unportable awk script in vc-list-files. * build-aux/vc-list-files: In the replacement awk script, use substr with a second argument of 1, not zero. Report by Simon Josefsson. 2009-02-28 Bruno Haible More support for FreeMiNT. * lib/freading.c (freading) [__MINT__]: Use new macros that were added to FreeMiNT today. * lib/fwriting.c (fwriting): Likewise. Based on patch by Alan Hourihane . 2009-02-28 Bruno Haible * tests/test-freadseek.c (main): Disable test beyond end of file on FreeMiNT. * tests/test-ftello.c (main): Likewise. Patch by Alan Hourihane . 2009-02-28 Bruno Haible Add tentative support for FreeMiNT. * lib/fbufmode.c (fbufmode) [__MINT__]: Add conditional code. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. * lib/freadahead.c (freadahead): Likewise, based on code by Alan Hourihane. Reported by Alan Hourihane . 2009-02-28 Bruno Haible * lib/wait-process.h (wait_subprocess): Clarify restriction regarding SIGCHLD. Reported by Jim Meyering. 2009-02-28 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Separate the two first tests. Mention the results of these tests on various platforms. * doc/posix-functions/fprintf.texi: Mention platforms in canonical order. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/glibc-functions/obstack_printf.texi: Likewise. * doc/glibc-functions/obstack_vprintf.texi: Likewise. 2009-02-28 Bruno Haible * build-aux/po/Makefile.in.in: Update from GNU gettext 0.17. Reported by Loïc Minier . 2009-02-27 Bruno Haible * gnulib-tool (func_import): Make the sed expression used to create the sed script for updating the .gitignore file POSIX compliant. Reported by Eric Blake. 2009-02-27 Bruno Haible * gnulib-tool (sed): Don't alias as "sed --posix". Reported by Eric Blake. 2009-02-27 Bruno Haible Avoid test link errors. * modules/uninorm/nfc-tests (test_u32_nfc_big_LDADD): New variable. * modules/uninorm/nfd-tests (test_u32_nfd_big_LDADD): New variable. * modules/uninorm/nfkc-tests (test_u32_nfkc_big_LDADD): New variable. * modules/uninorm/nfkd-tests (test_u32_nfkd_big_LDADD): New variable. Reported by Tom G. Christensen . 2009-02-27 Bruno Haible Avoid spurious "(cached)" in configure output. * m4/gnulib-common.m4 (gl_CACHE_VAL_SILENT): New macro. * m4/ceil.m4 (gl_FUNC_CEIL_LIBS): Use it instead of AC_CACHE_VAL. * m4/ceilf.m4 (gl_FUNC_CEILF_LIBS): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL_LIBS): Likewise. * m4/floor.m4 (gl_FUNC_FLOOR_LIBS): Likewise. * m4/floorf.m4 (gl_FUNC_FLOORF_LIBS): Likewise. * m4/floorl.m4 (gl_FUNC_FLOORL_LIBS): Likewise. * m4/stdarg.m4 (gl_STDARG_H): Likewise. Reported by Eric Blake. 2009-02-27 Eric Blake printf: fix regression in previous patch * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Fix compilation error. 2009-02-27 Bruno Haible * lib/inttypes.in.h: Test merely whether _LP64 is defined, not its value. * lib/stdint.in.h: Likewise. Suggested by Eric Blake. Reported by Peter Bray . 2009-02-27 Eric Blake doc: mention more functions added in cygwin 1.7.0 * doc/posix-functions/mbsnrtowcs.texi: Mention recent cygwin 1.7.0 addition. * doc/posix-functions/open_wmemstream.texi: Likewise. * doc/posix-functions/wcsnlen.texi: Likewise. * doc/posix-functions/wcsnrtombs.texi: Likewise. * doc/posix-functions/wcstod.texi: Likewise. * doc/posix-functions/wcstof.texi: Likewise. * doc/posix-functions/wcstoimax.texi: Likewise. * doc/posix-functions/wcstok.texi: Likewise. * doc/posix-functions/wcstoumax.texi: Likewise. Detect bug in cygwin 1.5.x *printf on 1-character %ls. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Enhance filter. * doc/posix-functions/fprintf.texi: Update. * doc/posix-functions/printf.texi: Update. * doc/posix-functions/snprintf.texi: Update. * doc/posix-functions/sprintf.texi: Update. * doc/posix-functions/vfprintf.texi: Update. * doc/posix-functions/vprintf.texi: Update. * doc/posix-functions/vsnprintf.texi: Update. * doc/posix-functions/vsprintf.texi: Update. * doc/glibc-functions/obstack_printf.texi: Update. * doc/glibc-functions/obstack_vprintf.texi: Update. 2009-02-26 Eric Blake avoid gcc 3.4.3 bug on long double NaN on Irix 6.5 * tests/nan.h (NaNl): Rewrite as function on Irix, to avoid compilation bug by using runtime conversion. * m4/isfinite.m4 (gl_ISFINITE): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL): Likewise. * modules/ceill-tests (Files): Use nan.h. * modules/floorl-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/isnanl-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * tests/test-ceill.c (main): Use a working NaN. * tests/test-floorl.c (main): Likewise. * tests/test-frexpl.c (main): Likewise. * tests/test-isnan.c (test_long_double): Likewise. * tests/test-isnanl.h (main): Likewise. * tests/test-ldexpl.h (main): Likewise. * tests/test-roundl.h (main): Likewise. * tests/test-truncl.h (main): Likewise. See http://lists.gnu.org/r/bug-gnulib/2009-02/msg00190.html. 2009-02-26 Eric Blake Bruno Haible Work around a *printf bug with %ls on Solaris. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Also test whether, when a precision is specified, sprintf stops converting the wide string argument when the number of bytes that have been produced by this conversion equals or exceeds the precision. * doc/posix-functions/fprintf.texi: Update. * doc/posix-functions/printf.texi: Update. * doc/posix-functions/snprintf.texi: Update. * doc/posix-functions/sprintf.texi: Update. * doc/posix-functions/vfprintf.texi: Update. * doc/posix-functions/vprintf.texi: Update. * doc/posix-functions/vsnprintf.texi: Update. * doc/posix-functions/vsprintf.texi: Update. * doc/glibc-functions/obstack_printf.texi: Update. * doc/glibc-functions/obstack_vprintf.texi: Update. 2009-02-26 Eric Blake stdlib: favor compiler check of random.h * m4/stdlib_h.m4 (gl_STDLIB_H): Skip preprocessor check. Needed to avoid an ObjC random.h installed by Swarm. 2009-02-26 Bruno Haible Work around *printf bug with %g directive and 0.0 on HP-UX 10.20. * m4/printf.m4 (gl_PRINTF_INFINITE): Also test for %g output of -0.0. Reported by Gary V. Vaughan . 2009-02-26 Bruno Haible Fix *printf behaviour regarding the %ls directive. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): New macro. * lib/vasnprintf.c (local_wcslen, VASNPRINTF): Handle NEED_PRINTF_DIRECTIVE_LS. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_LS): New macro. (gl_PREREQ_VASNPRINTF_WITH_EXTRAS): Invoke it. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_LS and test its result. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_LS. * m4/dprintf-posix.m4 (gl_FUNC_DPRINTF_POSIX): Likewise. * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_POSIX): Likewise. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vdprintf-posix.m4 (gl_FUNC_VDPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * doc/posix-functions/fprintf.texi: Update. * doc/posix-functions/printf.texi: Update. * doc/posix-functions/snprintf.texi: Update. * doc/posix-functions/sprintf.texi: Update. * doc/posix-functions/vfprintf.texi: Update. * doc/posix-functions/vprintf.texi: Update. * doc/posix-functions/vsnprintf.texi: Update. * doc/posix-functions/vsprintf.texi: Update. * doc/glibc-functions/obstack_printf.texi: Update. * doc/glibc-functions/obstack_vprintf.texi: Update. Reported by Eric Blake. 2009-02-25 Bruno Haible * m4/mbrtowc.m4 (gl_MBRTOWC_NUL_RETVAL): Update guess for Solaris 8 with known value. Reported by Gary V. Vaughan . 2009-02-25 Bruno Haible Work around mbrtowc bug in zh_CN.GB18030 locale on Solaris 8. * m4/mbrtowc.m4 (gl_MBRTOWC_SANITYCHECK): New macro. (gl_MBSTATE_T_BROKEN): Invoke it. Replace mbstate_t when it says "no". * doc/posix-functions/mbrtowc.texi: Document the Solaris 8 bug. Reported by Gary V. Vaughan . 2009-02-25 Bruno Haible Work around broken INT8_MAX, UINT8_MAX etc. values on HP-UX 11.23. * m4/stdint.m4 (gl_STDINT_H): Also check whether the expansions of INT8_MAX, UINT8_MAX etc. contain casts to elementary types. * doc/posix-headers/stdint.texi: Mention the HP-UX bug. Reported by Gary V. Vaughan . 2009-02-25 Eric Blake tests: skip fseek/ftell tests if ungetc is broken * m4/ungetc.m4: New file. * modules/fseek-tests: Split test, so ungetc dependency is separate from rest of test. * modules/fseeko-tests: Likewise. * modules/ftell-tests: Likewise. * modules/ftello-tests: Likewise. * tests/test-fseek.c (main): Isolate ungetc dependency. * tests/test-fseeko.c (main): Likewise. * tests/test-ftell.c (main): Likewise. * tests/test-ftello.c (main): Likewise. * tests/test-fseek2.sh: New file. * tests/test-fseeko2.sh: Likewise. * tests/test-ftell2.sh: Likewise. * tests/test-ftello2.sh: Likewise. 2009-02-25 Ondřej Vašík test-getaddrinfo: fix usage of skip return code 77 * tests/test-gettaddrinfo.c: Return skip code 77 only for first occurrence of skip (4x77 is not 77) 2009-02-25 Gary V. Vaughan strtod: avoid C99 decl-after-statement * m4/strtod.m4 (gl_FUNC_STRTOD): Rearrange declaration. 2009-02-24 Eric Blake strtod: detect HP-UX 11.31 bug * m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug. Reported by Gary V. Vaughan. 2009-02-23 Bruno Haible Fix invalid read past end of memory block. * lib/vasnprintf.c (DCHAR_SET): Define. (local_wcslen): Define only when needed. (local_strnlen, local_wcsnlen): New functions. (VASNPRINTF) [!USE_SNPRINTF && HAVE_WCHAR_T]: Implement the %s and %ls directives that involve a conversion ourselves. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Also check for strnlen, wcsnlen, mbrtowc, wcrtomb. * tests/test-vasnprintf-posix.c (test_function): Add tests for %.*s. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. Reported by Ben Pfaff . 2009-02-22 Bruno Haible Implement new clarified decomposition of Hangul syllables. * lib/uninorm/decomposition.c (uc_decomposition): For Hangul syllables of type LTV, return only a pairwise decomposition. * lib/uninorm/canonical-decomposition.c (uc_canonical_decomposition): Likewise. * tests/uninorm/test-decomposition.c (main): Updated expected result. * tests/uninorm/test-canonical-decomposition.c (main): Likewise. * tests/uninorm/test-compat-decomposition.c (main): Likewise. 2009-02-22 Bruno Haible * lib/uninorm/u-normalize-internal.h (FUNC): At the end, handle zero-length results and shrink excess allocated memory. * tests/uninorm/test-u8-nfc.c (test_u8_nfc): Check empty string result. * tests/uninorm/test-u8-nfd.c (test_u8_nfd): Likewise. * tests/uninorm/test-u8-nfkc.c (test_u8_nfkc): Likewise. * tests/uninorm/test-u8-nfkd.c (test_u8_nfkd): Likewise. * tests/uninorm/test-u16-nfc.c (test_u16_nfc): Likewise. * tests/uninorm/test-u16-nfd.c (test_u16_nfd): Likewise. * tests/uninorm/test-u16-nfkc.c (test_u16_nfkc): Likewise. * tests/uninorm/test-u16-nfkd.c (test_u16_nfkd): Likewise. * tests/uninorm/test-u32-nfc.c (test_u32_nfc): Likewise. * tests/uninorm/test-u32-nfd.c (test_u32_nfd): Likewise. * tests/uninorm/test-u32-nfkc.c (test_u32_nfkc): Likewise. * tests/uninorm/test-u32-nfkd.c (test_u32_nfkd): Likewise. 2009-02-21 Bruno Haible * doc/gnulib.texi: Include safe-alloc.texi earlier. * doc/safe-alloc.texi: Terminate sentences with a period. Use two spaces after a period. Put a space between a macro name and its argument list. Trivial rewordings. * lib/safe-alloc.c: Include safe-alloc.h right after config.h. * tests/test-safe-alloc.c: Likewise. Include stdlib.h. (main): Return 0 explicitly. 2009-02-21 Bruno Haible Tests for module 'uninorm/filter'. * tests/uninorm/test-uninorm-filter-nfc.c: New file. * modules/uninorm/filter-tests: New file. New module 'uninorm/filter'. * lib/uninorm.h (uninorm_filter_create, uninorm_filter_write, uninorm_filter_flush, uninorm_filter_free): New declarations. * lib/uninorm/uninorm-filter.c: New file. * modules/uninorm/filter: New file. 2009-02-21 Bruno Haible Tests for module 'uninorm/nfkc'. * tests/uninorm/test-nfkc.c: New file. * tests/uninorm/test-u8-nfkc.c: New file. * tests/uninorm/test-u16-nfkc.c: New file. * tests/uninorm/test-u32-nfkc.c: New file. * tests/uninorm/test-u32-nfkc-big.sh: New file. * tests/uninorm/test-u32-nfkc-big.c: New file. * modules/uninorm/nfkc-tests: New file. New module 'uninorm/nfkc'. * lib/uninorm/nfkc.c: New file. * modules/uninorm/nfkc: New file. Tests for module 'uninorm/nfkd'. * tests/uninorm/test-nfkd.c: New file. * tests/uninorm/test-u8-nfkd.c: New file. * tests/uninorm/test-u16-nfkd.c: New file. * tests/uninorm/test-u32-nfkd.c: New file. * tests/uninorm/test-u32-nfkd-big.sh: New file. * tests/uninorm/test-u32-nfkd-big.c: New file. * modules/uninorm/nfkd-tests: New file. New module 'uninorm/nfkd'. * lib/uninorm/nfkd.c: New file. * modules/uninorm/nfkd: New file. Tests for module 'uninorm/nfc'. * tests/uninorm/test-nfc.c: New file. * tests/uninorm/test-u8-nfc.c: New file. * tests/uninorm/test-u16-nfc.c: New file. * tests/uninorm/test-u32-nfc.c: New file. * tests/uninorm/test-u32-nfc-big.sh: New file. * tests/uninorm/test-u32-nfc-big.c: New file. * modules/uninorm/nfc-tests: New file. New module 'uninorm/nfc'. * lib/uninorm/nfc.c: New file. * modules/uninorm/nfc: New file. Tests for module 'uninorm/nfd'. * tests/uninorm/test-nfd.c: New file. * tests/uninorm/test-u8-nfd.c: New file. * tests/uninorm/test-u16-nfd.c: New file. * tests/uninorm/test-u32-nfd.c: New file. * tests/uninorm/test-u32-nfd-big.sh: New file. * tests/uninorm/test-u32-nfd-big.c: New file. * tests/uninorm/test-u32-normalize-big.h: New file. * tests/uninorm/test-u32-normalize-big.c: New file. * tests/uninorm/NormalizationTest.txt: New file, created from Unicode 5.1.0 NormalizationTest.txt. * modules/uninorm/nfd-tests: New file. New module 'uninorm/nfd'. * lib/uninorm/nfd.c: New file. * modules/uninorm/nfd: New file. New module 'uninorm/u32-normalize'. * lib/uninorm/u32-normalize.c: New file. * modules/uninorm/u32-normalize: New file. New module 'uninorm/u16-normalize'. * lib/uninorm/u16-normalize.c: New file. * modules/uninorm/u16-normalize: New file. New module 'uninorm/u8-normalize'. * lib/uninorm/u8-normalize.c: New file. * lib/uninorm/normalize-internal.h: New file. * lib/uninorm/u-normalize-internal.h: New file. * modules/uninorm/u8-normalize: New file. New module 'uninorm/decompose-internal'. * lib/uninorm/decompose-internal.c: New file. * modules/uninorm/decompose-internal: New file. Tests for module 'uninorm/composition'. * tests/uninorm/test-composition.c: New file. * modules/uninorm/composition-tests: New file. New module 'uninorm/composition'. * lib/uninorm/composition.c: New file. * lib/uninorm/composition-table.gperf: New file, generated by gen-uni-tables. * modules/uninorm/composition: New file. Tests for module 'uninorm/compat-decomposition'. * tests/uninorm/test-compat-decomposition.c: New file. * modules/uninorm/compat-decomposition-tests: New file. New module 'uninorm/compat-decomposition'. * lib/uninorm/decompose-internal.h: New file. * lib/uninorm/compat-decomposition.c: New file. * modules/uninorm/compat-decomposition: New file. Tests for module 'uninorm/canonical-decomposition'. * tests/uninorm/test-canonical-decomposition.c: New file. * modules/uninorm/canonical-decomposition-tests: New file. New module 'uninorm/canonical-decomposition'. * lib/uninorm/canonical-decomposition.c: New file. * modules/uninorm/canonical-decomposition: New file. Tests for module 'uninorm/decomposition'. * tests/uninorm/test-decomposition.c: New file. * modules/uninorm/decomposition-tests: New file. New module 'uninorm/decomposition'. * lib/uninorm/decomposition.c: New file. * modules/uninorm/decomposition: New file. New module 'uninorm/decomposition-table'. * lib/uninorm/decomposition-table.h: New file. * lib/uninorm/decomposition-table.c: New file. * lib/uninorm/decomposition-table1.h: New file, generated by gen-uni-tables. * lib/uninorm/decomposition-table2.h: New file, generated by gen-uni-tables. * modules/uninorm/decomposition-table: New file. * lib/gen-uni-tables.c (MAX_DECOMP_LENGTH): New macro. (UC_DECOMP_*): New enumeration items. (get_decomposition): New function. (struct decomp_table): New type. (output_decomposition, output_decomposition_tables): New functions. (unicode_composition_exclusions): New variable. (fill_composition_exclusions, debug_output_composition_tables): New functions. (main): Accept one more argument. Invoke fill_composition_exclusions. Output decomposition and composition tables. New module 'uninorm/base'. * lib/uninorm.h: New file. * lib/unictype.h: Update comment. * modules/uninorm/base: New file. 2009-02-21 David Lutterkort Tests for module 'safe-alloc'. * tests/test-safe-alloc.c: New file. * modules/safe-alloc-tests: New file. New module 'safe-alloc'. * lib/safe-alloc.h: New file. * lib/safe-alloc.c: New file. * m4/safe-alloc.m4: New file. * modules/safe-alloc: New file. * doc/safe-alloc.texi: New file. * doc/gnulib.texi: Include it. * MODULES.html.sh (Memory management functions ): Add safe-alloc. 2009-02-18 Bruno Haible Fix link error on non-glibc systems. * modules/uniwbrk/ulc-wordbreaks-tests (test_ulc_wordbreaks_LDADD): New variable. Reported by Tom G. Christensen . 2009-02-18 Jim Meyering fts: avoid used-uninitialized error due to recent change * lib/fts.c (fts_read): Guard uses of the new member, parent->fts_n_dirs_remaining, since it's not relevant for the parent of a directory specified on the command-line. 2009-02-17 James Youngman Bruno Haible * m4/include_next.m4: Reformulate comment. 2009-02-16 Jim Meyering fts: add #if guards so that the fts_lgpl module still builds * lib/fts.c: Guard just-added hash-table-using parts with #if GNULIB_FTS, so as not to break builds of the fts_lgpl module. Reported by Simon Josefsson. 2009-02-15 Bruno Haible * modules/array-mergesort-tests: New file. * tests/test-array-mergesort.c: New file. New module 'array-mergesort'. * modules/array-mergesort: New file. * lib/array-mergesort.h: New file. 2009-02-15 Bruno Haible Fix 2009-02-07 commit. * lib/gen-uni-tables.c (output_predicate, output_category, output_combclass, output_bidi_category, output_decimal_digit, output_digit, output_numeric, output_mirror, output_scripts, output_ident_category, output_simple_mapping): Fix format directives. (output_lbp, output_wbp): Don't convert -1 to a size_t implicitly. 2009-02-15 Albert Chin-A-Young * m4/include_next.m4: Update comment about IBM C 9.0/10.1 bug, now that fixes are available from IBM. 2009-02-13 Jim Meyering fts: arrange not to stat non-directories in more cases This makes GNU find (when it doesn't need to stat each file) *much* more efficient at traversing reiserfs file systems. * lib/fts_.h (struct ftsent) [fts_n_dirs_remaining]: New member. (struct FTS) [fts_leaf_optimization_works_ht]: Add member. * lib/fts.c (fts_close): Free ->fts_leaf_optimization_works_ht. (S_MAGIC_REISERFS, S_MAGIC_PROC): Define. (leaf_optimization_applies): New function. (LCO_hash, LCO_compare): New helper functions. (link_count_optimize_ok): New function. (fts_stat): Initialize new member (if dir). (fts_read): Decrement parent's fts_n_dirs_remaining count if we've just stat'ed a directory. Skip the stat call when possible. --- Note this AFS-related exchange: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=143111 and note find's pioctl call in find/fstype.c. But that is necessary only if you want to enable the optimization for AFS, and for now, I don't. fts: move a function definition "up" (no semantic change) * lib/fts.c (dirent_inode_sort_may_be_useful): Move definition "up" to precede upcoming use of a related function. 2009-02-11 Jim Meyering fts: correct internal computation of nlinks (optimization-related) * lib/fts.c (fts_build): ISSET(FTS_NOSTAT) has no bearing on whether the current entry is a directory, so don't test it. 2009-02-10 Bruno Haible Tests for module 'uniwbrk/ulc-wordbreaks'. * modules/uniwbrk/ulc-wordbreaks-tests: New file. * tests/uniwbrk/test-ulc-wordbreaks.sh: New file. * tests/uniwbrk/test-ulc-wordbreaks.c: New file. Tests for module 'uniwbrk/u32-wordbreaks'. * modules/uniwbrk/u32-wordbreaks-tests: New file. * tests/uniwbrk/test-u32-wordbreaks.c: New file. Tests for module 'uniwbrk/u16-wordbreaks'. * modules/uniwbrk/u16-wordbreaks-tests: New file. * tests/uniwbrk/test-u16-wordbreaks.c: New file. Tests for module 'uniwbrk/u8-wordbreaks'. * modules/uniwbrk/u8-wordbreaks-tests: New file. * tests/uniwbrk/test-u8-wordbreaks.c: New file. 2009-02-10 Bruno Haible * modules/uniwbrk/u8-wordbreaks (Depends-on): Add uniwbrk/wordbreak property. * modules/uniwbrk/u16-wordbreaks (Depends-on): Likewise. * modules/uniwbrk/u32-wordbreaks (Depends-on): Likewise. * modules/uniwbrk/ulc-wordbreaks (Depends-on): Add localcharset. 2009-02-10 Simon Josefsson * m4/sockets.m4: Call AC_C_INLINE since sockets.h now can use inline keywords. Reported by Bruno Haible . 2009-02-10 Bruno Haible * lib/unilbrk/lbrktables.h: Renamed from lib/unilbrk/tables.h. * lib/unilbrk/lbrktables.c: Renamed from lib/unilbrk/tables.c. * modules/unilbrk/tables (Files, Makefile.am, Include): Update. * lib/unilbrk/u8-possible-linebreaks.c: Update. * lib/unilbrk/u16-possible-linebreaks.c: Likewise. * lib/unilbrk/u32-possible-linebreaks.c: Likewise. 2009-02-09 Simon Josefsson * lib/sockets.h (gl_fd_to_handle): New function. * tests/test-sockets.c: Call gl_fd_to_handle. 2009-02-09 Bruno Haible * doc/havelib.texi: Document the conventions on bi-arch systems. 2009-02-08 Bruno Haible Document the AC_LIB_LINKFLAGS macro. * doc/havelib.texi: New file, mostly written on 2005-05-24. * doc/gnulib.texi: Include it. 2009-02-08 Bruno Haible Fix wrong order of sections, compared to TOC. * doc/gnulib.texi: Include relocatable-maint.texi after the "Regular expressions" node, not before. 2009-02-08 Bruno Haible Tests for module 'unicase/totitle'. * modules/unicase/totitle-tests: New file. Tests for module 'unicase/tolower'. * modules/unicase/tolower-tests: New file. Tests for module 'unicase/toupper'. * modules/unicase/toupper-tests: New file. * tests/unicase/test-mapping-part1.h: New file. * tests/unicase/test-mapping-part2.h: New file. New module 'unicase/totitle'. * modules/unicase/totitle: New file. * lib/unicase/totitle.c: New file. New module 'unicase/tolower'. * modules/unicase/tolower: New file. * lib/unicase/tolower.c: New file. New module 'unicase/toupper'. * modules/unicase/toupper: New file. * lib/unicase/toupper.c: New file. * lib/unicase/simple-mapping.h: New file. * lib/gen-uni-tables.c (output_simple_mapping_test): New function. (mapping_table): New structure. (output_simple_mapping): New function. (main): Invoke output_simple_mapping_test and output_simple_mapping. * modules/gen-uni-tables (Description): Update. * lib/unicase/toupper.h: New file, automatically generated by gen-uni-tables. * lib/unicase/tolower.h: New file, automatically generated by gen-uni-tables. * lib/unicase/totitle.h: New file, automatically generated by gen-uni-tables. * tests/unicase/test-uc_toupper.c: New file, automatically generated by gen-uni-tables. * tests/unicase/test-uc_tolower.c: New file, automatically generated by gen-uni-tables. * tests/unicase/test-uc_totitle.c: New file, automatically generated by gen-uni-tables. New module 'unicase/base'. * modules/unicase/base: New file. * lib/unicase.h: New file. 2009-02-08 Bruno Haible New module 'uniwbrk/ulc-wordbreaks'. * modules/uniwbrk/ulc-wordbreaks: New file. * lib/uniwbrk/ulc-wordbreaks.c: New file. New module 'uniwbrk/u32-wordbreaks'. * modules/uniwbrk/u32-wordbreaks: New file. * lib/uniwbrk/u32-wordbreaks.c: New file. New module 'uniwbrk/u16-wordbreaks'. * modules/uniwbrk/u16-wordbreaks: New file. * lib/uniwbrk/u16-wordbreaks.c: New file. New module 'uniwbrk/u8-wordbreaks'. * modules/uniwbrk/u8-wordbreaks: New file. * lib/uniwbrk/u8-wordbreaks.c: New file. * lib/uniwbrk/u-wordbreaks.h: New file. New module 'uniwbrk/table'. * modules/uniwbrk/table: New file. * lib/uniwbrk/wbrktable.h: New file. * lib/uniwbrk/wbrktable.c: New file. New module 'uniwbrk/wordbreak-property'. * modules/uniwbrk/wordbreak-property: New file. * lib/uniwbrk/wordbreak-property.c: New file. * lib/gen-uni-tables.c (WBP_*): New enum items. (get_wbp, debug_output_wbp, debug_output_wbrk_tables): New functions. (unicode_org_wbp): New variable. (fill_org_wbp, debug_output_org_wbp, debug_output_org_wbrk_tables): New functions. (wbp_table): New structure. (output_wbp, output_wbrk_tables): New functions. (main): Accept additional argument. Invoke fill_org_wbp, debug_output_wbrk_tables, debug_output_org_wbrk_tables, output_wbrk_tables. * modules/gen-uni-tables (Description): Update. * lib/uniwbrk/wbrkprop.h: New file, automatically generated by gen-uni-tables. New module 'uniwbrk/base'. * modules/uniwbrk/base: New file. * lib/uniwbrk.h: New file. 2009-02-08 Bruno Haible Update to Unicode 5.1.0. * lib/gen-uni-tables.c (is_property_alphabetic): Include U+2185..U+2188. (is_property_default_ignorable_code_point): Don't include characters of category Cc or Cs and not-a-characters. (get_lbp): Assume REVISION_22. Special handling of U+0609, U+060A, U+0D79, U+109E, U+109F, U+A60C. * lib/unictype/bidi_of.h: Regenerated. * lib/unictype/blocks.h: Regenerated. * lib/unictype/categ_C.h: Regenerated. * lib/unictype/categ_Cf.h: Regenerated. * lib/unictype/categ_Cn.h: Regenerated. * lib/unictype/categ_L.h: Regenerated. * lib/unictype/categ_Ll.h: Regenerated. * lib/unictype/categ_Lm.h: Regenerated. * lib/unictype/categ_Lo.h: Regenerated. * lib/unictype/categ_Lu.h: Regenerated. * lib/unictype/categ_M.h: Regenerated. * lib/unictype/categ_Mc.h: Regenerated. * lib/unictype/categ_Me.h: Regenerated. * lib/unictype/categ_Mn.h: Regenerated. * lib/unictype/categ_N.h: Regenerated. * lib/unictype/categ_Nd.h: Regenerated. * lib/unictype/categ_Nl.h: Regenerated. * lib/unictype/categ_No.h: Regenerated. * lib/unictype/categ_P.h: Regenerated. * lib/unictype/categ_Pd.h: Regenerated. * lib/unictype/categ_Pe.h: Regenerated. * lib/unictype/categ_Pf.h: Regenerated. * lib/unictype/categ_Pi.h: Regenerated. * lib/unictype/categ_Po.h: Regenerated. * lib/unictype/categ_Ps.h: Regenerated. * lib/unictype/categ_S.h: Regenerated. * lib/unictype/categ_Sk.h: Regenerated. * lib/unictype/categ_Sm.h: Regenerated. * lib/unictype/categ_So.h: Regenerated. * lib/unictype/categ_of.h: Regenerated. * lib/unictype/combining.h: Regenerated. * lib/unictype/ctype_alnum.h: Regenerated. * lib/unictype/ctype_alpha.h: Regenerated. * lib/unictype/ctype_graph.h: Regenerated. * lib/unictype/ctype_lower.h: Regenerated. * lib/unictype/ctype_print.h: Regenerated. * lib/unictype/ctype_punct.h: Regenerated. * lib/unictype/ctype_upper.h: Regenerated. * lib/unictype/decdigit.h: Regenerated. * lib/unictype/digit.h: Regenerated. * lib/unictype/mirror.h: Regenerated. * lib/unictype/numeric.h: Regenerated. * lib/unictype/pr_alphabetic.h: Regenerated. * lib/unictype/pr_bidi_arabic_digit.h: Regenerated. * lib/unictype/pr_bidi_arabic_right_to_left.h: Regenerated. * lib/unictype/pr_bidi_boundary_neutral.h: Regenerated. * lib/unictype/pr_bidi_eur_num_terminator.h: Regenerated. * lib/unictype/pr_bidi_left_to_right.h: Regenerated. * lib/unictype/pr_bidi_non_spacing_mark.h: Regenerated. * lib/unictype/pr_bidi_other_neutral.h: Regenerated. * lib/unictype/pr_combining.h: Regenerated. * lib/unictype/pr_dash.h: Regenerated. * lib/unictype/pr_decimal_digit.h: Regenerated. * lib/unictype/pr_default_ignorable_code_point.h: Regenerated. * lib/unictype/pr_deprecated.h: Regenerated. * lib/unictype/pr_diacritic.h: Regenerated. * lib/unictype/pr_extender.h: Regenerated. * lib/unictype/pr_format_control.h: Regenerated. * lib/unictype/pr_grapheme_base.h: Regenerated. * lib/unictype/pr_grapheme_extend.h: Regenerated. * lib/unictype/pr_grapheme_link.h: Regenerated. * lib/unictype/pr_id_continue.h: Regenerated. * lib/unictype/pr_id_start.h: Regenerated. * lib/unictype/pr_ideographic.h: Regenerated. * lib/unictype/pr_ignorable_control.h: Regenerated. * lib/unictype/pr_lowercase.h: Regenerated. * lib/unictype/pr_math.h: Regenerated. * lib/unictype/pr_numeric.h: Regenerated. * lib/unictype/pr_other_alphabetic.h: Regenerated. * lib/unictype/pr_other_default_ignorable_code_point.h: Regenerated. * lib/unictype/pr_other_grapheme_extend.h: Regenerated. * lib/unictype/pr_other_id_continue.h: Regenerated. * lib/unictype/pr_other_lowercase.h: Regenerated. * lib/unictype/pr_other_math.h: Regenerated. * lib/unictype/pr_punctuation.h: Regenerated. * lib/unictype/pr_sentence_terminal.h: Regenerated. * lib/unictype/pr_soft_dotted.h: Regenerated. * lib/unictype/pr_terminal_punctuation.h: Regenerated. * lib/unictype/pr_unassigned_code_value.h: Regenerated. * lib/unictype/pr_unified_ideograph.h: Regenerated. * lib/unictype/pr_uppercase.h: Regenerated. * lib/unictype/pr_xid_continue.h: Regenerated. * lib/unictype/pr_xid_start.h: Regenerated. * lib/unictype/pr_zero_width.h: Regenerated. * lib/unictype/scripts.h: Regenerated. * lib/unictype/scripts_byname.gperf: Regenerated. * lib/unictype/sy_java_ident.h: Regenerated. * lib/unilbrk/lbrkprop1.h: Regenerated. * lib/unilbrk/lbrkprop2.h: Regenerated. * tests/unictype/test-categ_C.c: Regenerated. * tests/unictype/test-categ_Cf.c: Regenerated. * tests/unictype/test-categ_Cn.c: Regenerated. * tests/unictype/test-categ_L.c: Regenerated. * tests/unictype/test-categ_Ll.c: Regenerated. * tests/unictype/test-categ_Lm.c: Regenerated. * tests/unictype/test-categ_Lo.c: Regenerated. * tests/unictype/test-categ_Lu.c: Regenerated. * tests/unictype/test-categ_M.c: Regenerated. * tests/unictype/test-categ_Mc.c: Regenerated. * tests/unictype/test-categ_Me.c: Regenerated. * tests/unictype/test-categ_Mn.c: Regenerated. * tests/unictype/test-categ_N.c: Regenerated. * tests/unictype/test-categ_Nd.c: Regenerated. * tests/unictype/test-categ_Nl.c: Regenerated. * tests/unictype/test-categ_No.c: Regenerated. * tests/unictype/test-categ_P.c: Regenerated. * tests/unictype/test-categ_Pd.c: Regenerated. * tests/unictype/test-categ_Pe.c: Regenerated. * tests/unictype/test-categ_Pf.c: Regenerated. * tests/unictype/test-categ_Pi.c: Regenerated. * tests/unictype/test-categ_Po.c: Regenerated. * tests/unictype/test-categ_Ps.c: Regenerated. * tests/unictype/test-categ_S.c: Regenerated. * tests/unictype/test-categ_Sk.c: Regenerated. * tests/unictype/test-categ_Sm.c: Regenerated. * tests/unictype/test-categ_So.c: Regenerated. * tests/unictype/test-ctype_alnum.c: Regenerated. * tests/unictype/test-ctype_alpha.c: Regenerated. * tests/unictype/test-ctype_graph.c: Regenerated. * tests/unictype/test-ctype_lower.c: Regenerated. * tests/unictype/test-ctype_print.c: Regenerated. * tests/unictype/test-ctype_punct.c: Regenerated. * tests/unictype/test-ctype_upper.c: Regenerated. * tests/unictype/test-decdigit.h: Regenerated. * tests/unictype/test-digit.h: Regenerated. * tests/unictype/test-numeric.h: Regenerated. * tests/unictype/test-pr_alphabetic.c: Regenerated. * tests/unictype/test-pr_bidi_arabic_digit.c: Regenerated. * tests/unictype/test-pr_bidi_arabic_right_to_left.c: Regenerated. * tests/unictype/test-pr_bidi_boundary_neutral.c: Regenerated. * tests/unictype/test-pr_bidi_eur_num_terminator.c: Regenerated. * tests/unictype/test-pr_bidi_left_to_right.c: Regenerated. * tests/unictype/test-pr_bidi_non_spacing_mark.c: Regenerated. * tests/unictype/test-pr_bidi_other_neutral.c: Regenerated. * tests/unictype/test-pr_combining.c: Regenerated. * tests/unictype/test-pr_dash.c: Regenerated. * tests/unictype/test-pr_decimal_digit.c: Regenerated. * tests/unictype/test-pr_default_ignorable_code_point.c: Regenerated. * tests/unictype/test-pr_deprecated.c: Regenerated. * tests/unictype/test-pr_diacritic.c: Regenerated. * tests/unictype/test-pr_extender.c: Regenerated. * tests/unictype/test-pr_format_control.c: Regenerated. * tests/unictype/test-pr_grapheme_base.c: Regenerated. * tests/unictype/test-pr_grapheme_extend.c: Regenerated. * tests/unictype/test-pr_grapheme_link.c: Regenerated. * tests/unictype/test-pr_id_continue.c: Regenerated. * tests/unictype/test-pr_id_start.c: Regenerated. * tests/unictype/test-pr_ideographic.c: Regenerated. * tests/unictype/test-pr_ignorable_control.c: Regenerated. * tests/unictype/test-pr_lowercase.c: Regenerated. * tests/unictype/test-pr_math.c: Regenerated. * tests/unictype/test-pr_numeric.c: Regenerated. * tests/unictype/test-pr_other_alphabetic.c: Regenerated. * tests/unictype/test-pr_other_default_ignorable_code_point.c: Regenerated. * tests/unictype/test-pr_other_grapheme_extend.c: Regenerated. * tests/unictype/test-pr_other_id_continue.c: Regenerated. * tests/unictype/test-pr_other_lowercase.c: Regenerated. * tests/unictype/test-pr_other_math.c: Regenerated. * tests/unictype/test-pr_punctuation.c: Regenerated. * tests/unictype/test-pr_sentence_terminal.c: Regenerated. * tests/unictype/test-pr_soft_dotted.c: Regenerated. * tests/unictype/test-pr_terminal_punctuation.c: Regenerated. * tests/unictype/test-pr_unassigned_code_value.c: Regenerated. * tests/unictype/test-pr_unified_ideograph.c: Regenerated. * tests/unictype/test-pr_uppercase.c: Regenerated. * tests/unictype/test-pr_xid_continue.c: Regenerated. * tests/unictype/test-pr_xid_start.c: Regenerated. * tests/unictype/test-pr_zero_width.c: Regenerated. Update to Unicode 5.1.0. * lib/uniwidth/width.c (nonspacing_table_data): Add U+0487, U+0616..U+061A, U+0A51, U+0A75, U+0B44, U+0B62..U+0B63, U+0C62..U+0C63, U+0D44, U+0D62..U+0D63, U+1033..U+1035, U+103A, U+103D..U+103E, U+105E..U+1060, U+1071..U+1074, U+1082, U+1085..U+1086, U+108D, U+1B80..U+1B81, U+1BA2..U+1BA5, U+1BA8..U+1BA9, U+1C2C..U+1C33, U+1C36..U+1C37, U+1DCB..U+1DE6, U+2064, U+20F0, U+2DE0..U+2DFF, U+A66F..U+A672, U+A67C..U+A67D, U+A8C4, U+A926..U+A92D, U+A947..U+A951, U+AA29..U+AA2E, U+AA31..U+AA32, U+AA35..U+AA36, U+AA43, U+AA4C, U+FE24..U+FE26, U+101FD. Remove U+1929..U+192B. (nonspacing_table_ind): Update. * tests/uniwidth/test-uc_width2.sh: Update expected result. Update to Unicode 5.1.0. * lib/uniname/gen-uninames.lisp (main): Add the range 0x1Fxxx to the code transform. * lib/uniname/uniname.c (unicode_character_name, unicode_name_character): Add the range 0x1Fxxx to the code transform. * lib/uniname/uninames.h: Regenerated. * tests/uniname/UnicodeDataNames.txt: Update to Unicode 5.1.0. 2009-02-07 Bruno Haible Merge gen-ctype and gen-lbrk into a single program. * lib/gen-uni-tables.c: New file, incorporating lib/unictype/gen-ctype.c and lib/unilbrk/gen-lbrk.c. Add directory prefixes to the names of the generated files. * lib/unictype/gen-ctype.c: Remove file. * lib/unilbrk/gen-lbrk.c: Remove file. * modules/gen-uni-tables: New file. * modules/unictype/gen-ctype: Remove file. * modules/unilbrk/gen-lbrk: Remove file. 2009-02-07 Bruno Haible * lib/unistr.h (u8_strcoll, u16_strcoll, u32_strcoll): New declations. New module 'unistr/u32-strcoll'. * modules/unistr/u32-strcoll: New file. * lib/unistr/u32-strcoll.c: New file. New module 'unistr/u16-strcoll'. * modules/unistr/u16-strcoll: New file. * lib/unistr/u16-strcoll.c: New file. New module 'unistr/u8-strcoll'. * modules/unistr/u8-strcoll: New file. * lib/unistr/u8-strcoll.c: New file. * lib/unistr/u-strcoll.h: New file. 2009-02-07 Bruno Haible * test-mbrtowc4.sh (LOCALE_ZH_CN): Fix default value. * test-mbsnrtowcs4.sh (LOCALE_ZH_CN): Likewise. * test-mbsrtowcs4.sh (LOCALE_ZH_CN): Likewise. * test-wcrtomb.sh (LOCALE_ZH_CN): Likewise. * test-wcsnrtombs4.sh (LOCALE_ZH_CN): Likewise. * test-wcsrtombs4.sh (LOCALE_ZH_CN): Likewise. 2009-02-07 Bruno Haible Make 64-bit clean. * lib/unictype/gen-ctype.c (output_predicate, output_category, output_combclass, output_bidi_category, output_decimal_digit, output_digit, output_numeric, output_mirror, output_scripts, output_ident_category): Use proper width specifier in format strings. 2009-02-07 Bruno Haible * doc/posix-functions/dirfd.texi: Clarify situation on mingw. Document failure behaviour. 2009-02-07 Jim Meyering regex: avoid compilation failure with upcoming gcc-4.4 * lib/regex_internal.h: Revert e48d8b47fb3eee81d341b71c3e006efe9e3433a7 [workaround for PGC prior to 6.1-2]. Otherwise, we'd get this: "... error: integer overflow in preprocessor expression". 2009-02-05 Ben Pfaff Fix link errors on Windows when close module is used. * modules/close: Add $(LIB_CLOSE) to Link section. * m4/close.m4 (gl_REPLACE_CLOSE): Substitute -lws2_32 into $(LIB_CLOSE) on Windows. 2009-02-05 Jim Meyering still avoid unused-parameter warnings, but do it cleanly * lib/fsusage.c (UNUSED_PARAM): Remove definition. (get_fs_usage): Cast to void instead. * lib/mountlist.c (UNUSED_PARAM): Remove definition. (dev_from_mount_options, read_file_system_list): Cast to void. Prompted by Bruno Haible. 2009-02-04 Jim Meyering fsusage.c: correct copyright year * lib/fsusage.c: Reflect year in which the change is pushed into avoid misc. warnings * lib/fsusage.c (UNUSED_PARAM): Define. (get_fs_usage): Mark parameter "disk" as unused. * lib/getugroups.c (getgrent): Use "void" in prototype. * lib/mountlist.c: Mark unused parameters. (read_file_system_list): Declare a local with "const". * lib/nanosleep.c (getnow): Declare static. * lib/strftime.c: Include strftime.h, for declaration of nstrftime. dirfd: set errno upon failure * lib/dirfd.c: Include . Set errno to ENOTSUP when returning -1. * modules/dirfd (Depends-on): Add errno. Suggested by John Kodis . 2009-02-01 Bruno Haible Don't assume sizeof (long) >= sizeof (void *). * lib/memcmp.c: Include stdint.h. (memcmp_bytes): Change argument types to op_t. Change type of srcp1, srcp2 to 'const byte *'. (memcmp_common_alignment, memcmp_not_common_alignment): Change argument types to uintptr_t. (rpl_memcmp): Change type of srcp1, srcp2 to 'uintptr_t'. * modules/memcmp (Depends-on): Add stdint. Reported by Ozkan Sezer . 2009-01-30 Eric Blake fix more require-before-expand issues * m4/pmccabe2html.m4 (gl_PMCCABE2HTML): Require, rather than expand, AC_PROG_AWK. * m4/gnulib-common.m4 (AC_PROG_MKDIR_P): Use AC_DEFUN_ONCE. 2009-01-28 Eric Blake version-etc: use consistent URL formatting * lib/version-etc.c (emit_bug_reporting_address, version_etc_va): Improve formatting. Use fputs for string without %. 2009-01-28 Jim Meyering 00gnulib.m4: add m4 quotes in shell comment to avoid autoconf warning * m4/00gnulib.m4 (AC_DEFUN_ONCE): Add quotes to avoid an "underquoted definition of NAME" from autoconf-2.59. 2009-01-28 Bruno Haible * doc/gnulib.texi: Add "Obsolete modules" to index. 2009-01-28 Jim Meyering useless-if-before-free: recognize more variants * build-aux/useless-if-before-free: Also recognize e.g., if (NULL != p) free (p); 2009-01-27 Mark McLoughlin test-getaddrinfo: skip (don't fail) this test when there's no network * tests/test-getaddrinfo.c: Skip test upon failure with EAI_AGAIN, on the presumption that it means you lack network access. 2009-01-26 Jim Meyering fflush: avoid warnings on modern systems * lib/fflush.c (rpl_fflush): Move declarations of locals, pos and result, into scopes where they're used. 2009-01-26 Eric Blake Silence warning reintroduced by recent extensions patch. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS) (gl_USE_SYSTEM_EXTENSIONS): Use AC_DEFUN_ONCE to silence newer autoconf. Backport improved autoconf semantics of AC_DEFUN_ONCE. * m4/00gnulib.m4: New file. * gnulib-tool (func_get_filelist): Always use it. * m4/gnulib-common.m4 (gl_COMMON): Force the file to be used. Reported by Bruno Haible, with suggestions from Paolo Bonzini. 2009-01-25 Bruno Haible Make test-quotearg work on MacOS X and AIX. * tests/test-quotearg.sh: New file. * tests/locale/fr/LC_MESSAGES/test-quotearg.po: New file. * tests/locale/fr/LC_MESSAGES/test-quotearg.mo: New file. * tests/test-quotearg.c: Include and gettext.h. Don't include . (fake_locale): Remove variable. (gettext, dgettext, dcgettext): Remove functions. (main): Instead of setting a fake locale, set a real locale. Call textdomain and bindtextdomain. * modules/quotearg-tests (Files): Add the new files. (Depends-on): Add gettext, setenv, unsetenv. (configure.ac): Invoke gt_LOCALE_FR and gt_LOCALE_FR_UTF8. (Makefile.am): Add test-quotearg.sh to TESTS, remove test-quotearg. Augment TESTS_ENVIRONMENT. 2009-01-25 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR): Remove special code that hid the fr_FR.ISO8859-1 locale on MacOS X. * m4/locale-ja.m4 (gt_LOCALE_JA): Remove special code that hid the ja_JP.eucJP locale on MacOS X. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Remove special code that hid the zh_CN.GB18030 locale on MacOS X. 2009-01-25 Bruno Haible Avoid link errors on MacOS X 10.3. * lib/mbsrtowcs-state.c (_gl_mbsrtowcs_state): Add initializer. * lib/wcsrtombs-state.c (_gl_wcsrtombs_state): Likewise. 2009-01-25 Bruno Haible * lib/pipe.c: On Unix, assume HAVE_POSIX_SPAWN and use posix_spawnp. * m4/pipe.m4 (gl_PIPE): Remove tests for vfork() based code. * modules/pipe (Files): Remove m4/posix_spawn.m4. (Depends-on): Add spawn, posix_spawnp, posix_spawn_file_actions_init, posix_spawn_file_actions_addclose, posix_spawn_file_actions_adddup2, posix_spawn_file_actions_addopen, posix_spawn_file_actions_destroy, posix_spawnattr_init, posix_spawnattr_setsigmask, posix_spawnattr_setflags, posix_spawnattr_destroy. * lib/execute.c: On Unix, assume HAVE_POSIX_SPAWN and use posix_spawnp. * m4/execute.m4 (gl_EXECUTE): Remove tests for vfork() based code. * modules/execute (Files): Remove m4/posix_spawn.m4. (Depends-on): Add spawn, posix_spawnp, posix_spawn_file_actions_init, posix_spawn_file_actions_addopen, posix_spawn_file_actions_destroy, posix_spawnattr_init, posix_spawnattr_setsigmask, posix_spawnattr_setflags, posix_spawnattr_destroy. 2009-01-25 Bruno Haible * lib/glthread/threadlib.c: Include . 2009-01-25 Bruno Haible * lib/glthread/threadlib.c (dummy): New declaration. 2009-01-25 Bruno Haible * lib/mbrtowc.c (mbrtowc): Distinguish invalid and incomplete multibyte characters also for the GB18030 encoding. Don't crash when the encoding is unknown and nstate = 0. Needed on OSF/1 5.1. 2009-01-25 Bruno Haible Avoid redefining 'struct random_data' on OSF/1 5.1. * lib/stdlib.in.h: Include if it exists. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether exists. Set HAVE_RANDOM_H. Include when testing whether 'struct random_data' exists. * modules/stdlib (Makefile.am): Substitute HAVE_RANDOM_H. 2009-01-25 Bruno Haible Don't install charset.alias on MacOS X >= 10.3. * lib/localcharset.c (DARWIN7): New macro. (get_charset_aliases): Hardcode the result for Darwin7. * modules/localcharset (install-exec-local): Don't install charset.alias on MacOS X >= 10.3, if the file does not yet exist. 2009-01-25 Bruno Haible Don't install charset.alias on mingw and Cygwin. * modules/localcharset (install-exec-local): Don't install charset.alias on mingw and Cygwin, if the file does not yet exist. The result for these platforms is hardcoded in localcharset.c. 2009-01-25 Bruno Haible Make it possible again to use AC_GNU_SOURCE together with gnulib. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Require AC_GNU_SOURCE before requiring AC_USE_SYSTEM_EXTENSIONS. 2009-01-25 Jim Meyering c-strtod: avoid warnings * lib/c-strtod.c (C_STRTOD): Cast nptr to (char *) to avoid "assignment discards qualifiers from pointer target type" warnings. 2009-01-24 Bruno Haible Add support for non-UTF-8 locales on MacOS X. * lib/config.charset: Add CP1131, ARMSCII-8, PT154 to the list of canonical encodings. For Darwin 7 and newer, don't map traditional encodings to UTF-8. Reported by Vincent Lefevre at . 2009-01-24 Bruno Haible * doc/gnulib.texi (Obsolete modules): New section. Reported by Mike Frysinger . 2009-01-24 Bruno Haible * doc/Makefile (%.pdf): Clarify where to find texmf.cnf. (%.dvi): New rule. 2009-01-24 Bruno Haible * lib/c-strtod.h (c_strtod, c_strtold): Adjust specification. Reported by Eric Blake. 2009-01-24 Bruno Haible * lib/c-stack.c (segv_handler): If !HAVE_XSI_STACK_OVERFLOW_HEURISTIC, set signo = 0 also if info->si_code <= 0. Needed on HP-UX 11.11. Reported by Gary V. Vaughan . 2009-01-24 Bruno Haible * lib/c-strtod.h (c_strtod, c_strtold): Add specification. 2009-01-23 Bruno Haible Make c-strtod, c-strtold usable in libraries. * lib/c-strtod.c: Include string.h instead of xalloc.h. (C_STRTOD): Call strdup instead of xstrdup. * modules/c-strtod (Depends-on): Add strdup-posix, remove xalloc. * modules/c-strtold (Depends-on): Likewise. * doc/c-strtod.texi: Remove the sentence mentioning xalloc_die. * NEWS: Mention the change. Reported by Michael Gold . 2009-01-23 Jim Meyering c-strtod: when ENDPTR is non-NULL, set *ENDPTR in new failure path * lib/c-strtod.c (C_STRTOD) [LC_ALL_MASKC]: Ensure that when ENDPTR is non-NULL, *ENDPTR is set to NPTR upon failure. 2009-01-23 Simon Josefsson * lib/version-etc.c: Add emit_bug_reporting_address, inspired by GNU CoreUtils. * lib/version-etc.h: Add prototype for emit_bug_reporting_address. * modules/version-etc (Description): Update. 2009-01-22 Bruno Haible Cache the C locale object. * lib/c-strtod.c (c_locale_cache): New variable. (c_locale): New function. (C_STRTOD): Use it, and don't call freelocale. * m4/c-strtod.m4 (gl_C_STRTOD, gl_C_STRTOLD): Require AC_C_INLINE. Suggested by Paolo Bonzini. 2009-01-21 Bruno Haible * lib/getloadavg.c (getloadavg): Check c_strtod result against error conditions other than overflow. 2009-01-21 Bruno Haible * lib/c-strtod.c: Include errno.h. (C_STRTOD): Check against NULL return from newlocale. Preserve errno value from STRTOD_L and STRTOD. 2009-01-21 Bruno Haible and Jim Meyering nanosleep: skip configure test (fail it) for apple universal builds * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require gl_MULTIARCH. In Apple universal builds, assume that nanosleep does not work. * modules/nanosleep (Depends-on): Add multiarch. mktime: skip configure test (fail it) for apple universal builds * m4/mktime.m4 (AC_FUNC_MKTIME): Require gl_MULTIARCH. In Apple universal builds, assume that mktime does not work. * modules/mktime (Depends-on): Add multiarch. 2009-01-21 Eric Blake multiarch: avoid expand-before-require warning * modules/multiarch (configure.ac): Require, rather than expand, gl_MULTIARCH. * m4/multiarch.m4 (gl_MULTIARCH_BODY): Merge... (gl_MULTIARCH): ...into this macro, and use AC_DEFUN_ONCE to enforce that all clients require it. Partial reversion of 2008-12-29 patch. error: avoid expand-before-require warning * modules/errno (configure.ac): Require, rather than expand, gl_HEADER_ERRNO_H. * m4/errno_h.m4 (gl_HEADER_ERRNO_H_BODY): Merge... (gl_HEADER_ERRNO_H): ...into this macro, and use AC_DEFUN_ONCE to enforce that all clients require it. gnulib-tool: avoid warnings from using obsolete AC_GNU_SOURCE * gnulib-tool (func_dest_tmpfilename, func_create_testdir): Using obsolete AC_GNU_SOURCE causes out-of-order expansion; avoid it, and rely solely on gl_USE_SYSTEM_EXTENSIONS. 2009-01-21 Paolo Bonzini Revert: 2009-01-20 Paolo Bonzini regex: do not depend on obsolete modules. * modules/regex: Remove memcmp and memmove. 2009-01-20 Bruno Haible Make the 'link' module link on Windows NT 4. * lib/link.c (_WIN32_WINNT): Don't define. (CreateHardLinkFuncType): New type. (CreateHardLinkFunc, initialized): New variables. (initialize): New function. (link): Invoke CreateHardLink indirectly through the function pointer. 2009-01-20 Bruno Haible Fix compilation failure on mingw. * tests/test-link.c (main): Don't assume that EOPNOTSUPP exists. 2009-01-20 Michael Gold (tiny change) * doc/c-strtod.texi: Mention a couple of restrictions. 2009-01-20 Jim Meyering gettimeofday: move more declarations out of functions * lib/gettimeofday.c: Move extern declarations of tzset and gmtime out of containing functions. Prompted by Bruno Haible. 2009-01-20 Paolo Bonzini regex: do not depend on obsolete modules. * modules/regex: Remove memcmp and memmove. 2009-01-19 Bruno Haible Don't use AC_REQUIRE([AC_C_BIGENDIAN]). * modules/uniconv/u16-conv-from-enc (configure.ac): Require gl_BIGENDIAN, not AC_C_BIGENDIAN. * modules/uniconv/u16-conv-to-enc (configure.ac): Likewise. * modules/uniconv/u16-strconv-to-enc (configure.ac): Likewise. 2009-01-19 Bruno Haible * tests/test-link.c: Include . (main): Exit with code 77 when a hard link cannot be created due to the file system. * tests/test-link.sh: Skip test when a hard link cannot be created due to the file system. Suggested by Eric Blake. 2009-01-19 Martin Lambers * modules/link-tests: New file. * tests/test-link.sh: New file. * tests/test-link.c: New file. 2009-01-19 Eric Blake doc: mention another function added in cygwin 1.7.0 * doc/glibc-functions/glob_pattern_p.texi (glob_pattern_p): Another new function in cygwin 1.7. 2009-01-19 Bruno Haible Don't use AC_REQUIRE([AC_C_BIGENDIAN]). * m4/gnulib-common.m4 (gl_BIGENDIAN): New macro. * m4/exponentl.m4 (gl_LONG_DOUBLE_EXPONENT_LOCATION): Require gl_BIGENDIAN, not AC_C_BIGENDIAN. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): Likewise. * m4/isinf.m4 (gl_ISINFL_WORKS): Likewise. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Likewise. * m4/md4.m4 (gl_MD4): Likewise. * m4/md5.m4 (gl_MD5): Likewise. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Likewise. * m4/sha1.m4 (gl_SHA1): Likewise. * m4/sha256.m4 (gl_SHA256): Likewise. * m4/sha512.m4 (gl_SHA512): Likewise. 2009-01-19 Bruno Haible * modules/uniname/uniname-tests (Depends-on): Add progname. * tests/uniname/test-uninames.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u8-vsprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u8-vsprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u8-vsnprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u8-vsnprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u16-vsprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u16-vsprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u16-vsnprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u16-vsnprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u32-vsprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u32-vsprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/u32-vsnprintf-tests (Depends-on): Add progname. * tests/unistdio/test-u32-vsnprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/ulc-vsprintf-tests (Depends-on): Add progname. * tests/unistdio/test-ulc-vsprintf1.c: Include progname.h. (main): Call set_program_name. * modules/unistdio/ulc-vsnprintf-tests (Depends-on): Add progname. * tests/unistdio/test-ulc-vsnprintf1.c: Include progname.h. (main): Call set_program_name. 2009-01-19 Eric Blake test-unistd: test previous patch * tests/test-unistd.c: Test *_FILENO macros. unistd: guarantee STDIN_FILENO here, for OS/2 EMX * lib/unistd.in.h (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Guarantee a definition. * doc/posix-headers/unistd.texi (unistd.h): Document the bug. * modules/unistd-safer (Depends-on): Add dependency on unistd. * lib/c-stack.c (STDERR_FILENO): Rely on . * lib/dup-safer.c (STDERR_FILENO): Likewise. * lib/execute.c (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Likewise. * lib/fd-safer.c (STDIN_FILENO, STDERR_FILENO): Likewise. * lib/fopen-safer.c (STDERR_FILENO): Likewise. * lib/pipe.c (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Likewise. * lib/tmpfile-safer.c (STDERR_FILENO): Likewise. * tests/test-posix_spawn1.c (STDIN_FILENO, STDOUT_FILENO) (STDERR_FILENO): Likewise. * tests/test-posix_spawn2.c (STDIN_FILENO, STDOUT_FILENO) (STDERR_FILENO): Likewise. * tests/test-posix_spawn3.c (STDIN_FILENO, STDOUT_FILENO) (STDERR_FILENO): Likewise. Reported by Elbert Pol. 2009-01-19 Eric Blake doc: mention more functions added in cygwin 1.7.0 * doc/posix-functions/abort.texi (abort): Update wording related to cygwin. * doc/posix-functions/daylight.texi (daylight): Likewise. * doc/posix-functions/optarg.texi (optarg): Likewise. * doc/posix-functions/optarg.texi (opterr): Likewise. * doc/posix-functions/optarg.texi (optind): Likewise. * doc/posix-functions/optarg.texi (optopt): Likewise. * doc/posix-functions/wprintf.texi (wprintf): Cygwin wprintf never worked in 1.5.x, and was withdrawn in 1.7. * doc/posix-functions/vwprintf.texi (vwprintf): Likewise. * doc/posix-functions/fprintf.texi (fprintf): Tighten mention of cygwin versions. * doc/posix-functions/perror.texi (perror): Likewise. * doc/posix-functions/printf.texi (printf): Likewise. * doc/posix-functions/snprintf.texi (snprintf): Likewise. * doc/posix-functions/sprintf.texi (sprintf): Likewise. * doc/posix-functions/vfprintf.texi (vfprintf): Likewise. * doc/posix-functions/vprintf.texi (vprintf): Likewise. * doc/posix-functions/vsnprintf.texi (vsnprintf): Likewise. * doc/posix-functions/vsprintf.texi (vsprintf): Likewise. * doc/glibc-functions/obstack_printf.texi (obstack_printf): Likewise. * doc/glibc-functions/obstack_vprintf.texi (obstack_vprintf): Likewise. * doc/glibc-functions/cfmakeraw.texi (cfmakeraw): Cygwin 1.7 adds this function. * doc/glibc-functions/in6addr_any.texi (in6addr_any): Likewise. * doc/glibc-functions/in6addr_loopback.texi (in6addr_loopback): Likewise. * doc/glibc-functions/updwtmpx.texi (updwtmpx): Likewise. * doc/posix-functions/_Exit_C99.texi (_Exit): Likewise. * doc/posix-functions/confstr.texi (confstr): Likewise. * doc/posix-functions/dprintf.texi (dprintf): Likewise. * doc/posix-functions/fgetwc.texi (fgetwc): Likewise. * doc/posix-functions/fgetws.texi (fgetws): Likewise. * doc/posix-functions/fputwc.texi (fputwc): Likewise. * doc/posix-functions/fputws.texi (fputws): Likewise. * doc/posix-functions/fwide.texi (fwide): Likewise. * doc/posix-functions/getwc.texi (getwc): Likewise. * doc/posix-functions/getwchar.texi (getwchar): Likewise. * doc/posix-functions/putwc.texi (putwc): Likewise. * doc/posix-functions/putwchar.texi (putwchar): Likewise. * doc/posix-functions/sigignore.texi (sigignore): Likewise. * doc/posix-functions/ungetwc.texi (ungetwc): Likewise. * doc/posix-functions/vdprintf.texi (vdprintf): Likewise. * doc/posix-functions/wcpcpy.texi (wcpcpy): Likewise. * doc/posix-functions/wcpncpy.texi (wcpncpy): Likewise. * doc/posix-functions/wcstol.texi (wcstol): Likewise. * doc/posix-functions/wcstoll.texi (wcstoll): Likewise. * doc/posix-functions/wcstoul.texi (wcstoul): Likewise. * doc/posix-functions/wcstoull.texi (wcstoull): Likewise. * doc/posix-functions/wcsxfrm.texi (wcsxfrm): Likewise. 2009-01-19 Daniel P. Berrange ioctl: avoid warning: no previous prototype for 'rpl_ioctl' * lib/ioctl.c: Include . 2009-01-19 Simon Josefsson * modules/getdate-tests (Depends-on): Add progname. * tests/test-getdate.c: Use progname module, to avoid link errors on non-glibc systems. 2009-01-18 Simon Josefsson * modules/filenamecat-tests (Depends-on): Add progname. * modules/fstrcmp-tests (Depends-on): Likewise. * tests/test-filenamecat.c: Use progname module, to avoid link errors on non-glibc systems. * tests/test-fstrcmp.c: Likewise. 2009-01-19 Daniel P. Berrange gettimeofday: avoid warning: nested extern declaration of 'localtime' * lib/gettimeofday.c: Move extern declaration out of function. 2009-01-18 Bruno Haible * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't test for mblen and mbrlen. * lib/strftime.c (HAVE_MBLEN, HAVE_MBRLEN): Remove macros. (MULTIBYTE_IS_FORMAT_SAFE): Define to 1 on all platforms except OSF/1. 2009-01-18 Bruno Haible * lib/strftime.c (MEMPCPY): Remove unused macro. * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't test for mempcpy. 2009-01-18 Martin Lambers New module 'link'. * lib/unistd.in.h (link): New declaration. * lib/link.c: New file. * m4/link.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_LINK, HAVE_LINK. * modules/unistd (Makefile.am): Substitute GNULIB_LINK, HAVE_LINK. * modules/link: New file. * doc/posix-functions/link.texi: Mention the new module. 2009-01-18 Bruno Haible * tests/test-avltree_list.c (main): Call set_program_name. * tests/test-avltree_oset.c (main): Likewise. * tests/test-obstack-printf.c: Include progname.h. (main): Call set_program_name. * tests/test-quotearg.c: Include progname.h. (main): Call set_program_name. * tests/test-xmemdup0.c: Include progname.h. (main): Call set_program_name. 2009-01-18 Bruno Haible New module 'alphasort'. * lib/dirent.in.h (alphasort): New declaration. * lib/alphasort.c: New file, from glibc with modifications. * m4/alphasort.m4: New file. * modules/alphasort: New file. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize GNULIB_ALPHASORT, HAVE_ALPHASORT. * modules/dirent (Makefile.am): Substitute GNULIB_ALPHASORT, HAVE_ALPHASORT. * doc/posix-functions/alphasort.texi: Mention the new module and the portability problems. 2009-01-18 Bruno Haible New module 'scandir'. * lib/dirent.in.h (scandir): New declaration. * lib/scandir.c: New file, from glibc with modifications. * m4/scandir.m4: New file. * modules/scandir: New file. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize GNULIB_SCANDIR, HAVE_SCANDIR. * modules/dirent (Makefile.am): Substitute GNULIB_SCANDIR, HAVE_SCANDIR. * doc/posix-functions/scandir.texi: Mention the new module and the portability problems. 2009-01-17 Bruno Haible * gnulib-tool (func_remove_prefix): Escape all dots in the prefix. Update documentation. (func_remove_suffix): Escape all dots in the suffix. Update documentation. (func_filter_filelist): Update documentation. Reported by Ralf Wildenhues. 2009-01-17 Bruno Haible * modules/dprintf-posix-tests: New file. * tests/test-dprintf-posix.sh: New file. * tests/test-dprintf-posix.c: New file. New modules 'dprintf', 'dprintf-posix'. * lib/stdio.in.h (dprintf): New declaration. * lib/dprintf.c: New file. * m4/dprintf.m4: New file. * m4/dprintf-posix.m4: New file. * modules/dprintf: New file. * modules/dprintf-posix: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize GNULIB_DPRINTF, HAVE_DPRINTF, REPLACE_DPRINTF. * modules/stdio (Makefile.am): Substitute also GNULIB_DPRINTF, HAVE_DPRINTF, REPLACE_DPRINTF. * doc/posix-functions/dprintf.texi: Mention the new modules. 2009-01-17 Bruno Haible * modules/vdprintf-posix-tests: New file. * tests/test-vdprintf-posix.sh: New file. * tests/test-vdprintf-posix.c: New file. New modules 'vdprintf', 'vdprintf-posix'. * lib/stdio.in.h (vdprintf): New declaration. * lib/vdprintf.c: New file. * m4/vdprintf.m4: New file. * m4/vdprintf-posix.m4: New file. * modules/vdprintf: New file. * modules/vdprintf-posix: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize GNULIB_VDPRINTF, HAVE_VDPRINTF, REPLACE_VDPRINTF. * modules/stdio (Makefile.am): Substitute also GNULIB_VDPRINTF, HAVE_VDPRINTF, REPLACE_VDPRINTF. * doc/posix-functions/vdprintf.texi: Mention the new modules. 2009-01-17 Bruno Haible Fix replacement of fopen on mingw. * m4/fopen.m4 (gl_FUNC_FOPEN): Define FOPEN_TRAILING_SLASH_BUG also on mingw. 2009-01-17 Bruno Haible Fix compilation error on HP-UX 11.00, present since 2008-09-24. * lib/fopen.c: Include and . 2009-01-17 Bruno Haible Avoid test-fflush2.sh failure on mingw. * tests/test-fflush2.c: Include binary-io.h. (main): Put standard input into binary mode. * modules/fflush-tests (Depends-on): Add binary-io. 2009-01-17 Bruno Haible * lib/wchar.in.h: In another particular situation, include only the system's file. (_GL_ALREADY_INCLUDING_WCHAR_H): New macro. Reported by Albert Chin-A-Young and Thomas Guyot-Sionnest . 2009-01-17 Bruno Haible Support for stripping executables in --enable-relocatable. * build-aux/install-reloc: Expect one more argument, or an environment variable RELOC_STRIP_PROG. If set, strip the destination program and its wrapper. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): In INSTALL_PROGRAM_ENV, set RELOC_STRIP_PROG. * doc/relocatable-maint.texi (Supporting Relocation): Mention the need to set RELOCATABLE_STRIP. * NEWS: Mention the new Makefile requirement. 2009-01-17 Bruno Haible * build-aux/install-reloc: Remove debugging information left over by C compiler on MacOS X. 2009-01-17 Bruno Haible Update use of _NSGetExecutablePath after API change in MacOS X 10.4. * lib/progreloc.c (find_executable): Fix type of pointer passed to _NSGetExecutablePath. 2009-01-16 Jim Meyering strerror: avoid warnings about discarding "const" * lib/strerror.c (rpl_strerror): Instead of returning a const string from each and every "case", use a variable, and add a single cast after the switch. 2009-01-16 Albert Chin-A-Young * lib/arpa_inet.in.h: Add extern "C" block for C++. 2009-01-16 Bruno Haible * m4/printf.m4 (gl_SNPRINTF_SIZE1, gl_VSNPRINTF_ZEROSIZE_C99): Use an array initializer syntax that also works in C++ mode. Reported by Albert Chin . 2009-01-16 Jim Meyering poll: suppress a warning * lib/poll.c: Use #pragma GCC diagnostic ignored "-Wtype-limits" to ignore "...unsigned expression < 0 is always false" warnings. 2009-01-16 Daniel P. Berrange poll: remove declarations of unused variables * lib/poll.c (poll) [WIN32_NATIVE]: Remove declarations of unused sockbuf and optlen. 2009-01-15 Bruno Haible Make fflush-after-ungetc POSIX compliant on BSD systems. * lib/fflush.c (clear_ungetc_buffer_preserving_position): New function. (clear_ungetc_buffer): Implement also for other systems. (rpl_fflush): On glibc systems, invoke clear_ungetc_buffer_preserving_position. Otherwise, invoke clear_ungetc_buffer after fetching the stream's position, not before. 2009-01-15 Bruno Haible Make fflush-after-ungetc POSIX compliant on glibc systems. * m4/fflush.m4 (gl_FUNC_FFLUSH): Test also the behaviour of fflush after ungetc. * lib/fflush.c (clear_ungetc_buffer): Implement for glibc systems. (rpl_fflush): On glibc systems, simply call the system's fflush function after clearing the ungetc buffer. * lib/fseeko.c (rpl_fseeko): Don't try to lseek past the end of file. Instead, lseek only to the end of file, then use the system's fseeko for the rest. On glibc systems, reset the EOF indicator bit. 2009-01-15 Jim Meyering openmp.m4: revert quote-adding change, for portability to older autoconf * m4/openmp.m4: Remove the quotes added on 2009-01-14. This reverts part of 42d1eda5dcce2d68deab7a642e7f29bcd7144a0d. Simon Josefsson noticed the problem when using autoconf-2.61. 2009-01-15 Bruno Haible * tests/test-fflush2.sh: Invoke test-fflush2 twice. * tests/test-fflush2.c (ASSERT): Always fail. (main): Add two tests for fflush() after ungetc(), taking into account the Austin Group's clarification. Suggested by Eric Blake. 2009-01-15 Albert Chin-A-Young mktime.m4: remove K&R-style function prototypes * m4/mktime.m4 (AC_FUNC_MKTIME): Remove K&R-style function prototypes for the Sun C++ compiler. 2009-01-14 Bruno Haible * lib/stdint.in.h (_GL_JUST_INCLUDE_SYSTEM_WCHAR_H): New macro, defined while including . * lib/wchar.in.h: In two particular situations on HP-UX, include only the system's file. Reported by Albert Chin . 2009-01-14 Bruno Haible * m4/csharp.m4: Don't mention gettext on the serial number line. * m4/csharpexec.m4: Likewise. * m4/eaccess.m4: Likewise. * m4/javaexec.m4: Likewise. * m4/sig_atomic_t.m4: Likewise. * m4/tmpdir.m4: Likewise. * m4/intldir.m4: Bump gettext version. * m4/lib-ld.m4: Likewise. 2009-01-14 Bruno Haible * lib/progname.c (set_program_name): Add more comments. Reported by Sergey Poznyakoff . 2009-01-14 Simon Josefsson * lib/sys_stat.in.h: Include sys/types.h for nlink_t on systems were sys/stat.h does not define it. 2009-01-14 Jim Meyering many *.m4 files: improve m4 quoting 99% of this change was performed by running the following commands: git ls-files | grep '\.m4$' | xargs perl -pi \ -e 's/(AC_\w+\()([^[()]+?)([,)])/$1\[$2]$3/g;' \ -e 's/(AC_\w+\((?:\[[^,]+?\], ){1})([^,[()]+?)([,)])/$1\[$2]$3/g;' \ -e 's/(AC_\w+\((?:\[[^,]+?\], ){2})([^,[()]+?)([,)])/$1\[$2]$3/g;' \ -e 's/(AC_\w+\((?:\[[^,]+?\], ){3})([^,[()]+?)([,)])/$1\[$2]$3/g' perl -pi -e 's/\[\.\.\.\]/.../' m4/onceonly.m4 The remainder were to add Copyright dates, increment serial numbers, undo some changes in comments, exclude m4/intl.m4, and add quotes around the "1" in ",1" where the unusual spacing prohibited the above regexps from doing the job. For more details, see . * m4/acl.m4: Modified. * m4/afs.m4: Likewise. * m4/alloca.m4: Likewise. * m4/argp.m4: Likewise. * m4/argz.m4: Likewise. * m4/atexit.m4: Likewise. * m4/bison-i18n.m4: Likewise. * m4/bison.m4: Likewise. * m4/byteswap.m4: Likewise. * m4/c-stack.m4: Likewise. * m4/c-strtod.m4: Likewise. * m4/calloc.m4: Likewise. * m4/canonicalize-lgpl.m4: Likewise. * m4/chown.m4: Likewise. * m4/clock_time.m4: Likewise. * m4/codeset.m4: Likewise. * m4/copy-file.m4: Likewise. * m4/csharp.m4: Likewise. * m4/csharpcomp.m4: Likewise. * m4/csharpexec.m4: Likewise. * m4/d-ino.m4: Likewise. * m4/d-type.m4: Likewise. * m4/dirfd.m4: Likewise. * m4/double-slash-root.m4: Likewise. * m4/eaccess.m4: Likewise. * m4/eealloc.m4: Likewise. * m4/environ.m4: Likewise. * m4/errno_h.m4: Likewise. * m4/euidaccess.m4: Likewise. * m4/execute.m4: Likewise. * m4/fatal-signal.m4: Likewise. * m4/fchdir.m4: Likewise. * m4/fcntl_h.m4: Likewise. * m4/fileblocks.m4: Likewise. * m4/filenamecat.m4: Likewise. * m4/findprog.m4: Likewise. * m4/flexmember.m4: Likewise. * m4/fnmatch.m4: Likewise. * m4/fopen.m4: Likewise. * m4/fpending.m4: Likewise. * m4/fprintf-posix.m4: Likewise. * m4/free.m4: Likewise. * m4/frexp.m4: Likewise. * m4/frexpl.m4: Likewise. * m4/fsusage.m4: Likewise. * m4/ftruncate.m4: Likewise. * m4/gc-camellia.m4: Likewise. * m4/gc-random.m4: Likewise. * m4/gc.m4: Likewise. * m4/getaddrinfo.m4: Likewise. * m4/getcwd-abort-bug.m4: Likewise. * m4/getcwd-path-max.m4: Likewise. * m4/getdate.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/gethostname.m4: Likewise. * m4/gethrxtime.m4: Likewise. * m4/getline.m4: Likewise. * m4/getloadavg.m4: Likewise. * m4/getndelim2.m4: Likewise. * m4/getpass.m4: Likewise. * m4/gettext.m4: Likewise. * m4/gettime.m4: Likewise. * m4/gettimeofday.m4: Likewise. * m4/gnulib-common.m4: Likewise. * m4/group-member.m4: Likewise. * m4/host-os.m4: Likewise. * m4/iconv.m4: Likewise. * m4/iconv_open.m4: Likewise. * m4/inet_ntop.m4: Likewise. * m4/inet_pton.m4: Likewise. * m4/inline.m4: Likewise. * m4/intldir.m4: Likewise. * m4/intlmacosx.m4: Likewise. * m4/intmax.m4: Likewise. * m4/intmax_t.m4: Likewise. * m4/inttypes.m4: Likewise. * m4/inttypes_h.m4: Likewise. * m4/inttypes-pri.m4: Likewise. * m4/isapipe.m4: Likewise. * m4/isnand.m4: Likewise. * m4/isnanf.m4: Likewise. * m4/isnanl.m4: Likewise. * m4/javacomp.m4: Likewise. * m4/javaexec.m4: Likewise. * m4/jm-winsz1.m4: Likewise. * m4/jm-winsz2.m4: Likewise. * m4/lchown.m4: Likewise. * m4/lcmessage.m4: Likewise. * m4/ldexpl.m4: Likewise. * m4/lib-ld.m4: Likewise. * m4/lib-link.m4: Likewise. * m4/libsigsegv.m4: Likewise. * m4/link-follow.m4: Likewise. * m4/localcharset.m4: Likewise. * m4/locale-fr.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale-tr.m4: Likewise. * m4/locale-zh.m4: Likewise. * m4/lock.m4: Likewise. * m4/longlong.m4: Likewise. * m4/ls-mntd-fs.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/mathl.m4: Likewise. * m4/mbrtowc.m4: Likewise. * m4/mbstate_t.m4: Likewise. * m4/mbswidth.m4: Likewise. * m4/memchr.m4: Likewise. * m4/memcmp.m4: Likewise. * m4/memcpy.m4: Likewise. * m4/memmem.m4: Likewise. * m4/memmove.m4: Likewise. * m4/mempcpy.m4: Likewise. * m4/memrchr.m4: Likewise. * m4/memset.m4: Likewise. * m4/minmax.m4: Likewise. * m4/mkdir-slash.m4: Likewise. * m4/mkdtemp.m4: Likewise. * m4/mktime.m4: Likewise. * m4/mmap-anon.m4: Likewise. * m4/mountlist.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/nls.m4: Likewise. * m4/nocrash.m4: Likewise. * m4/open.m4: Likewise. * m4/openat.m4: Likewise. * m4/openmp.m4: Likewise. * m4/pathmax.m4: Likewise. * m4/perl.m4: Likewise. * m4/physmem.m4: Likewise. * m4/pipe.m4: Likewise. * m4/po.m4: Likewise. * m4/poll.m4: Likewise. * m4/posixtm.m4: Likewise. * m4/posixver.m4: Likewise. * m4/printf-frexp.m4: Likewise. * m4/printf-frexpl.m4: Likewise. * m4/printf-posix.m4: Likewise. * m4/printf-posix-rpl.m4: Likewise. * m4/printf.m4: Likewise. * m4/progtest.m4: Likewise. * m4/putenv.m4: Likewise. * m4/readline.m4: Likewise. * m4/readlink.m4: Likewise. * m4/readutmp.m4: Likewise. * m4/realloc.m4: Likewise. * m4/regex.m4: Likewise. * m4/relocatable.m4: Likewise. * m4/relocatable-lib.m4: Likewise. * m4/rename-dest-slash.m4: Likewise. * m4/rename.m4: Likewise. * m4/rmdir-errno.m4: Likewise. * m4/rmdir.m4: Likewise. * m4/roundf.m4: Likewise. * m4/roundl.m4: Likewise. * m4/rpmatch.m4: Likewise. * m4/save-cwd.m4: Likewise. * m4/selinux-selinux-h.m4: Likewise. * m4/setenv.m4: Likewise. * m4/settime.m4: Likewise. * m4/sig2str.m4: Likewise. * m4/sig_atomic_t.m4: Likewise. * m4/signalblocking.m4: Likewise. * m4/signbit.m4: Likewise. * m4/sigpipe.m4: Likewise. * m4/sockets.m4: Likewise. * m4/sockpfaf.m4: Likewise. * m4/st_dm_mode.m4: Likewise. * m4/stat-time.m4: Likewise. * m4/stdbool.m4: Likewise. * m4/stdint.m4: Likewise. * m4/stdint_h.m4: Likewise. * m4/stpcpy.m4: Likewise. * m4/stpncpy.m4: Likewise. * m4/strcase.m4: Likewise. * m4/strchrnul.m4: Likewise. * m4/strcspn.m4: Likewise. * m4/strdup.m4: Likewise. * m4/strftime.m4: Likewise. * m4/strndup.m4: Likewise. * m4/strnlen.m4: Likewise. * m4/strpbrk.m4: Likewise. * m4/strptime.m4: Likewise. * m4/strsep.m4: Likewise. * m4/strtod.m4: Likewise. * m4/strtoimax.m4: Likewise. * m4/strtok_r.m4: Likewise. * m4/strtol.m4: Likewise. * m4/strtoll.m4: Likewise. * m4/strtoul.m4: Likewise. * m4/strtoull.m4: Likewise. * m4/strtoumax.m4: Likewise. * m4/strverscmp.m4: Likewise. * m4/threadlib.m4: Likewise. * m4/timegm.m4: Likewise. * m4/tm_gmtoff.m4: Likewise. * m4/tmpdir.m4: Likewise. * m4/tmpfile.m4: Likewise. * m4/tzset.m4: Likewise. * m4/uintmax_t.m4: Likewise. * m4/unlinkdir.m4: Likewise. * m4/unlocked-io.m4: Likewise. * m4/uptime.m4: Likewise. * m4/userspec.m4: Likewise. * m4/utimbuf.m4: Likewise. * m4/utime.m4: Likewise. * m4/utimes-null.m4: Likewise. * m4/utimes.m4: Likewise. * m4/vararrays.m4: Likewise. * m4/vasnprintf.m4: Likewise. * m4/vfprintf-posix.m4: Likewise. * m4/vprintf-posix.m4: Likewise. * m4/wait-process.m4: Likewise. * m4/wchar_t.m4: Likewise. * m4/wint_t.m4: Likewise. * m4/write-any-file.m4: Likewise. * m4/yield.m4: Likewise. 2009-01-13 Bruno Haible Avoid test-copy-file.sh failures when ACL support insufficient. * modules/copy-file-tests (Makefile.am): Pass USE_ACL in TESTS_ENVIRONMENT. * tests/test-copy-file.sh: Skip the ACL comparisons if USE_ACL is 0. Reported by Jim Meyering. 2009-01-13 Bruno Haible * modules/unistdio/u-printf-args (Files): Add m4/stdint_h.m4 and m4/inttypes_h.m4, needed by m4/intmax_t.m4. * modules/unistdio/u8-printf-parse (Files): Likewise. * modules/unistdio/u32-printf-parse (Files): Likewise. * modules/unistdio/ulc-printf-parse (Files): Likewise. 2009-01-13 Simon Josefsson * modules/unistdio/u16-printf-parse (Files): Add m4/stdint_h.m4 and m4/inttypes_h.m4 too. 2009-01-12 Eric Blake tests: IRIX 6.2 cc can't compile -0.0 into .data * tests/test-ceill.c (minus_zero): Compute -0.0L at runtime, rather than at compile-time. * tests/test-floorl.c (minus_zero): Likewise. * tests/test-frexpl.c (minus_zero): Likewise. * tests/test-isnan.c (minus_zerol): Likewise. * tests/test-isnanl.h (minus_zero): Likewise. * tests/test-ldexpl.c (minus_zero): Likewise. * tests/test-roundl.c (minus_zero): Likewise. * tests/test-signbit.c (minus_zerol): Likewise. * tests/test-snprintf-posix.h (minus_zerol): Likewise. * tests/test-sprintf-posix.h (minus_zerol): Likewise. * tests/test-truncl.c (minus_zero): Likewise. * tests/test-vasnprintf-posix.c (minus_zerol): Likewise. * tests/test-vasprintf-posix.c (minus_zerol): Likewise. Reported by Tom G. Christensen and Nelson H. F. Beebe. 2009-01-09 Paolo Bonzini regex: fix glibc bug 9697 * lib/regcomp.c (re_compile_fastmap_iter): Rewrite COMPLEX_BRACKET handling. 2009-01-09 Paolo Bonzini regex: fix glibc bug 697 * lib/regexec.c (prune_impossible_nodes): Handle sifted_states[0] being NULL also if there are no backreferences. 2009-01-09 Paolo Bonzini regex: merge glibc changes * lib/regcomp.c (re_compile_fastmap_iter): Use __mbrtowc. * lib/regex_internal.c (build_wcs_buffer, build_wcs_upper_buffer, re_string_skip_chars, re_string_reconstruct): Likewise. * lib/regex_internal.h [!_LIBC] (__mbrtowc): New #define. 2009-01-07 Jim Meyering poll: filter through cppi * lib/poll.c: Indent cpp directives to reflect nesting. 2009-01-07 Daniel P. Berrange poll: don't return uninitialized * lib/poll.c (poll) [WIN32_NATIVE]: Initialize "rc". 2009-01-06 Jeremy Olexa (tiny change) avoid compile failure on AIX 6.1 * lib/getloadavg.c [HAVE_LIBPERFSTAT]: Include . Details in http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/15465 2009-01-04 Jim Meyering remove duplicate inclusion of * tests/test-fprintf-posix.c: Likewise. * tests/test-printf-posix.c: Likewise. * tests/test-snprintf-posix.c: Likewise. * tests/test-sprintf-posix.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * tests/test-vfprintf-posix.c: Likewise. * tests/test-vprintf-posix.c: Likewise. * tests/test-vsnprintf-posix.c: Likewise. * tests/test-vsprintf-posix.c: Likewise. 2009-01-03 Jim Meyering gnulib-tool: fix sed-based filtering * gnulib-tool (func_filter_filelist): Remove extra backslash in sed_fff_filter definition. 2009-01-02 Jim Meyering strftime: avoid compilation failure on Solaris 2.6 * modules/strftime (Depends-on): Add mbrlen and mbsinit. * lib/strftime.c [DO_MULTIBYTE]: Include unconditionally. Don't #define mbrlen or mbsinit, since now they're guaranteed to be available. Reported by Tom G. Christensen. Details in . 2009-01-01 Ralf Wildenhues Bruno Haible Speed up gnulib-tool by doing more string processing through shell built-ins. * gnulib-tool (fast_func_append): New variable. (func_remove_prefix, func_remove_suffix): New functions. (fast_func_remove_prefix, fast_func_remove_suffix): New variables. (func_filter_filelist): New function. (func_get_dependencies): Use func_remove_suffix instead of sed. (func_get_automake_snippet): Use func_filter_filelist instead of a subshell and sed invocation. 2009-01-01 Bruno Haible Fix a security bug. * gnulib-tool (func_import, import, update): Don't allow the characters '"', '$', '`', '\' in macro arguments that become part of commands that are evaluated. 2009-01-01 Bruno Haible * gnulib-tool (func_reset_sigpipe): Add more comments. 2009-01-01 Ralf Wildenhues * gnulib-tool (func_modules_add_dummy, func_emit_lib_Makefile_am, func_emit_tests_Makefile_am, func_import): Abort loops early if we already know the answer. 2009-01-01 Jim Meyering * lib/version-etc.c (version_etc_va): Update copyright year. 2008-12-30 Bruno Haible * m4/lib-prefix.m4 (AC_LIB_LINKFLAGS_BODY): Don't overwrite LIB${NAME}_PREFIX when considering the dependencies of lib${name}. Reported by Charles Wilson . 2008-12-29 Eric Blake multiarch: avoid autoconf AC_REQUIRE bug * m4/multiarch.m4 (gl_MULTIARCH): Split body... (gl_MULTIARCH_BODY): ...into new macro, to work around bug in Autoconf 2.63 and older. Reported by Bruno Haible, and analyzed in http://lists.gnu.org/r/bug-autoconf/2008-12/msg00039.html 2008-12-29 Bruno Haible * gnulib-tool (func_import): When generating sed-ignore-removed, handle files in subdirectories correctly. Reported by Ralf Wildenhues. 2008-12-29 Ralf Wildenhues * gnulib-tool (func_update_ignorelist): Use 'join - FILE' rather than 'join FILE -', for Solaris join. 2008-12-29 Bruno Haible * m4/codeset.m4 (AM_LANGINFO_CODESET): More systematic m4 argument quoting. * m4/gettext.m4 (AM_GNU_GETTEXT): Likewise. * m4/glibc2.m4 (gt_GLIBC2): Likewise. * m4/glibc21.m4 (gl_GLIBC21): Likewise. * m4/iconv.m4 (AM_ICONV_LINK, AM_ICONV): Likewise. * m4/intdiv0.m4 (gt_INTDIV0): Likewise. * m4/intlmacosx.m4 (gt_INTL_MACOSX): Likewise. * m4/intmax.m4 (gt_TYPE_INTMAX_T): Likewise. * m4/inttypes-pri.m4 (gt_INTTYPES_PRI): Likewise. * m4/inttypes_h.m4 (gl_AC_HEADER_INTTYPES_H): Likewise. * m4/lcmessage.m4 (gt_LC_MESSAGES): Likewise. * m4/nls.m4 (AM_NLS): Likewise. * m4/po.m4 (AM_PO_SUBDIRS): Likewise. * m4/printf-posix.m4 (gt_PRINTF_POSIX): Likewise. * m4/progtest.m4 (AM_PATH_PROG_WITH_TEST): Likewise. * m4/size_max.m4 (gl_SIZE_MAX): Likewise. * m4/stdint_h.m4 (gl_AC_HEADER_STDINT_H): Likewise. * m4/threadlib.m4 (gl_THREADLIB_BODY): Likewise. * m4/uintmax_t.m4 (gl_AC_TYPE_UINTMAX_T): Likewise. * m4/visibility.m4 (gl_VISIBILITY): Likewise. * m4/wchar_t.m4 (gt_TYPE_WCHAR_T): Likewise. * m4/wint_t.m4 (gt_TYPE_WINT_T): Likewise. * m4/xsize.m4 (gl_XSIZE): Likewise. Suggested by Jim Meyering. 2008-11-17 Bruce Korb * lib/parse-duration.h: non-iso form accepts years, months weeks, too * lib/parse-duration.c: use a switch instead of cascading if's. 2008-12-29 Eric Blake wchar.h: supply WEOF on Irix 5.3 * lib/wchar.in.h (wint_t): Also supply WEOF. * lib/wctype.in.h (wint_t): Likewise. * doc/posix-headers/wchar.texi (wchar.h): Document the bug. * doc/posix-headers/wctype.texi (wctype.h): Likewise. Reported by Tom G. Christensen. 2008-12-26 Bruno Haible * m4/multiarch.m4 (gl_MULTIARCH): Recognize also the architecture names i486, i586, i686. 2008-12-26 Bruno Haible * lib/stdlib.in.h (struct random_data): Fix indentation of comments. 2008-12-26 Bruno Haible * lib/stdint.in.h: Move the include of down until after all the types are defined. Also conditionalize it on __STDC_LIMIT_MACROS, not __STDC_CONSTANT_MACROS. Reported by Nelson H. F. Beebe via Eric Blake. 2008-12-25 Bruno Haible Add support for universal builds to vasnprintf. * m4/printf.m4 (gl_PRINTF_ENOMEM): Require gl_MULTIARCH. In Apple universal builds, guess no. * modules/vasnprintf-posix (Depends-on): Add multiarch. * modules/vasprintf-posix (Depends-on): Likewise. * modules/fprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/snprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. Add support for universal builds to . * lib/inttypes.in.h (_PRI64_PREFIX, _PRIu64_PREFIX, _SCN64_PREFIX, _SCNu64_PREFIX): In Apple universal builds, define directly, using _LP64. * m4/inttypes.m4 (gl_INTTYPES_H): In Apple universal builds, set INT64_MAX_EQ_LONG_MAX and UINT64_MAX_EQ_ULONG_MAX to -1. * modules/inttypes (Depends-on): Add multiarch. (Makefile.am): Substitute APPLE_UNIVERSAL_BUILD. Add support for universal builds to . * lib/stdint.in.h (PDFDIFF_MIN, PTRDIFF_MAX, SIZE_MAX): In Apple universal builds, define directly, using _LP64. * m4/stdint.m4 (gl_STDINT_TYPE_PROPERTIES): Require gl_MULTIARCH. In Apple universal builds, don't test for the size and suffix of ptrdiff_t and size_t. * modules/stdint (Depends-on): Add multiarch. (Makefile.am): Substitute APPLE_UNIVERSAL_BUILD. New module 'multiarch'. * modules/multiarch: New file. * m4/multiarch.m4: New file. 2008-12-25 Bruno Haible * gnulib-tool (func_create_testdir): Avoid failure of mv command. 2008-12-25 Bruno Haible * modules/btowc (License): Relicense under LGPLv2+. * modules/mbsinit (License): Likewise. * modules/mbrtowc (License): Likewise. * modules/wcrtomb (License): Likewise. * modules/streq (License): Likewise. Reported by David Lutterkort . 2008-12-23 Bruno Haible * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Fix conditional and comment. 2008-12-23 Bruno Haible Module getaddrinfo requires linking with $(GETADDRINFO_LIB). * m4/getaddrinfo.m4 (gl_GETADDRINFO): Put link options into GETADDRINFO_LIB, not in LIBS. * modules/getaddrinfo (Link): Set to $(GETADDRINFO_LIB). * modules/canon-host (Link): Likewise. * NEWS: Mention the change. * modules/getaddrinfo-tests (test_getaddrinfo_LDADD): Add the GETADDRINFO_LIB. 2008-12-22 Bruno Haible * doc/posix-functions/iswalnum_l.texi: Mention limitation of wchar_t. * doc/posix-functions/iswalpha_l.texi: Likewise. * doc/posix-functions/iswblank_l.texi: Likewise. * doc/posix-functions/iswcntrl_l.texi: Likewise. * doc/posix-functions/iswctype_l.texi: Likewise. * doc/posix-functions/iswdigit_l.texi: Likewise. * doc/posix-functions/iswgraph_l.texi: Likewise. * doc/posix-functions/iswlower_l.texi: Likewise. * doc/posix-functions/iswprint_l.texi: Likewise. * doc/posix-functions/iswpunct_l.texi: Likewise. * doc/posix-functions/iswspace_l.texi: Likewise. * doc/posix-functions/iswupper_l.texi: Likewise. * doc/posix-functions/iswxdigit_l.texi: Likewise. * doc/posix-functions/mbsnrtowcs.texi: Likewise. * doc/posix-functions/open_wmemstream.texi: Likewise. * doc/posix-functions/swscanf.texi: Likewise. * doc/posix-functions/towctrans_l.texi: Likewise. * doc/posix-functions/towlower.texi: Likewise. * doc/posix-functions/towlower_l.texi: Likewise. * doc/posix-functions/towupper.texi: Likewise. * doc/posix-functions/towupper_l.texi: Likewise. * doc/posix-functions/vfwprintf.texi: Likewise. * doc/posix-functions/vfwscanf.texi: Likewise. * doc/posix-functions/vswscanf.texi: Likewise. * doc/posix-functions/vwprintf.texi: Likewise. * doc/posix-functions/vwscanf.texi: Likewise. * doc/posix-functions/wcpcpy.texi: Likewise. * doc/posix-functions/wcpncpy.texi: Likewise. * doc/posix-functions/wcscasecmp.texi: Likewise. * doc/posix-functions/wcscasecmp_l.texi: Likewise. * doc/posix-functions/wcscoll_l.texi: Likewise. * doc/posix-functions/wcsdup.texi: Likewise. * doc/posix-functions/wcsncasecmp.texi: Likewise. * doc/posix-functions/wcsncasecmp_l.texi: Likewise. * doc/posix-functions/wcsnlen.texi: Likewise. * doc/posix-functions/wcsnrtombs.texi: Likewise. * doc/posix-functions/wcsxfrm_l.texi: Likewise. * doc/posix-functions/wctrans_l.texi: Likewise. * doc/posix-functions/wctype_l.texi: Likewise. * doc/glibc-functions/fgetwc_unlocked.texi: Likewise. * doc/glibc-functions/fgetws_unlocked.texi: Likewise. * doc/glibc-functions/fputwc_unlocked.texi: Likewise. * doc/glibc-functions/fputws_unlocked.texi: Likewise. * doc/glibc-functions/getwc_unlocked.texi: Likewise. * doc/glibc-functions/getwchar_unlocked.texi: Likewise. * doc/glibc-functions/putwc_unlocked.texi: Likewise. * doc/glibc-functions/putwchar_unlocked.texi: Likewise. * doc/glibc-functions/wcschrnul.texi: Likewise. * doc/glibc-functions/wcsftime_l.texi: Likewise. * doc/glibc-functions/wcstod_l.texi: Likewise. * doc/glibc-functions/wcstof_l.texi: Likewise. * doc/glibc-functions/wcstol_l.texi: Likewise. * doc/glibc-functions/wcstold_l.texi: Likewise. * doc/glibc-functions/wcstoll_l.texi: Likewise. * doc/glibc-functions/wcstoq.texi: Likewise. * doc/glibc-functions/wcstoul_l.texi: Likewise. * doc/glibc-functions/wcstoull_l.texi: Likewise. * doc/glibc-functions/wcstouq.texi: Likewise. * doc/glibc-functions/wmempcpy.texi: Likewise. 2008-12-22 Ingo Weinhold (tiny change) Eric Blake Paolo Bonzini Bruno Haible Make c-stack work on Haiku. * lib/c-stack.c (SA_ONSTACK): Define fallback. (c_stack_action): Use SA_ONSTACK flag. 2008-12-22 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR_UTF8): Treat Haiku like BeOS. 2008-12-22 Bruno Haible Work around mbrlen() bugs on AIX, HP-UX, OSF/1, Solaris. * m4/mbrlen.m4 (gl_FUNC_MBRLEN): Set REPLACE_MBRLEN if mbrtowc is being overridden. (gl_MBRLEN_INCOMPLETE_STATE, gl_MBRLEN_RETVAL, gl_MBRLEN_NUL_RETVAL): New macros. * lib/wchar.in.h (mbrlen): Override if REPLACE_MBRLEN is set. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_MBRLEN. * modules/wchar (Makefile.am): Substitute REPLACE_MBRLEN. * doc/posix-functions/mbrlen.texi: Mention the various platform bugs. 2008-12-22 Bruno Haible * m4/mbrtowc.m4 (gl_MBRTOWC_INCOMPLETE_STATE): Remove unused variable from test code. 2008-12-22 Eric Blake Avoid gcc warnings on cygwin. * lib/regex_internal.c (re_string_reconstruct) [!RE_ENABLE_I18N]: Avoid unused variable. * lib/regexec.c (check_arrival_add_next_nodes) [!RE_ENABLE_I18N]: Likewise. 2008-12-22 Bruno Haible Remove HAVE_MBRTOWC conditionals. * lib/mbscasecmp.c: Include mbuiter.h unconditionally. (mbscasecmp): Assume mbrtowc function. * lib/mbscasestr.c: Include mbuiter.h unconditionally. (knuth_morris_pratt_multibyte, mbscasestr): Assume mbrtowc function. * lib/mbschr.c: Include mbuiter.h unconditionally. (mbschr): Assume mbrtowc function. * lib/mbscspn.c: Include mbuiter.h unconditionally. (mbscspn): Assume mbrtowc function. * lib/mbslen.c: Include mbuiter.h unconditionally. (mbslen): Assume mbrtowc function. * lib/mbsncasecmp.c: Include mbuiter.h unconditionally. (mbsncasecmp): Assume mbrtowc function. * lib/mbsnlen.c: Include mbiter.h unconditionally. (mbsnlen): Assume mbrtowc function. * lib/mbspbrk.c: Include mbuiter.h unconditionally. (mbspbrk): Assume mbrtowc function. * lib/mbspcasecmp.c: Include mbuiter.h unconditionally. (mbspcasecmp): Assume mbrtowc function. * lib/mbsrchr.c: Include mbuiter.h unconditionally. (mbsrchr): Assume mbrtowc function. * lib/mbssep.c: Include mbuiter.h unconditionally. (mbssep): Assume mbrtowc function. * lib/mbsspn.c: Include mbuiter.h unconditionally. (mbsspn): Assume mbrtowc function. * lib/mbsstr.c: Include mbuiter.h unconditionally. (knuth_morris_pratt_multibyte, mbsstr): Assume mbrtowc function. * lib/mbstok_r.c: Include mbuiter.h unconditionally. (mbstok_r): Assume mbrtowc function. * lib/propername.c: Include mbuiter.h unconditionally. (mbsstr_trimmed_wordbounded): Assume mbrtowc function. * lib/trim.c: Include mbchar.h, mbiter.h uncondtionally. (trim2): Assume mbrtowc function. * lib/mbswidth.c (mbsinit): Remove fallback definition. (mbsnwidth): Assume mbrtowc function. * modules/mbswidth (Depends-on): Add mbrtowc, mbsinit. * lib/quotearg.c (MB_CUR_MAX, mbstate_t, mbrtowc, iswprint): Remove fallback definitions. * modules/quotearg (Depends-on): Add mbrtowc, mbsinit. 2008-12-22 Bruno Haible * doc/posix-functions/mbtowc.texi: Mention a glibc bug. 2008-12-22 Paolo Bonzini * modules/regex: Request emulations for the mb*/wc* functions we need. * m4/regex.m4: Don't look for those functions here. * lib/regex_internal.h: Do not check HAVE_WCRTOMB and HAVE_MBRTOWC. 2008-12-22 Bruno Haible * modules/fnmatch (Depends-on): Remove duplicated dependency. 2008-12-21 Bruno Haible Make mbiter.h, mbuiter.h, mbfile.h usable unconditionally. * modules/mbiter (Depends-on): Add mbrtowc, mbsinit. (Include): Remove conditionalization. * modules/mbuiter (Depends-on): Add mbrtowc, mbsinit. (Include): Remove conditionalization. * modules/mbfile (Depends-on): Add mbrtowc, mbsinit. (Include): Remove conditionalization. * m4/mbiter.m4 (gl_MBITER): Deprecate the use of AC_FUNC_MBRTOWC. * m4/mbfile.m4 (gl_MBFILE): Likewise. * NEWS: Mention the change. Reported by Alan Hourihane via Sergey Poznyakoff . 2008-12-21 Bruno Haible * MODULES.html.sh (Extended multibyte and wide character utilities ): Add btowc, wctob, mbsinit, mbrlen, mbrtowc, mbsrtowcs, wcrtomb, wcsrtombs. (Support for systems lacking POSIX:2008): Add accept, bind, close, connect, fclose, getpeername, getsockname, getsockopt, hostent, listen, mbsnrtowcs, posix_spawn*, recv, recvfrom, sched, select, send, sendto, setsockopt, shutdown, socket, spawn, sys_wait, wcsnrtombs, write. 2008-12-21 Bruno Haible * MODULES.html.sh: Change section titles to refer to POSIX:2008. 2008-12-21 Bruno Haible * modules/wcsnrtombs-tests: New file. * tests/test-wcsnrtombs1.sh: New file. * tests/test-wcsnrtombs2.sh: New file. * tests/test-wcsnrtombs3.sh: New file. * tests/test-wcsnrtombs4.sh: New file. * tests/test-wcsnrtombs.c: New file. New module 'wcsnrtombs'. * lib/wchar.in.h (wcsnrtombs): New declaration. * lib/wcsnrtombs.c: New file. * lib/wcsrtombs-state.c: New file. * lib/wcsrtombs.c: Refer to _gl_wcsrtombs_state. (internal_state): Remove variable. * m4/wcsnrtombs.m4: New file. * m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS): Add wcsrtombs-state.c to the compilation units. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNRTOMBS, HAVE_WCSNRTOMBS. * modules/wchar (Makefile.am): Substitute GNULIB_WCSNRTOMBS, HAVE_WCSNRTOMBS. * modules/wcsnrtombs: New file. * modules/wcsrtombs (Files): Add lib/wcsrtombs-state.c. * doc/posix-functions/wcsnrtombs.texi: Mention the new module. 2008-12-21 Bruno Haible * modules/wcsrtombs-tests: New file. * tests/test-wcsrtombs1.sh: New file. * tests/test-wcsrtombs2.sh: New file. * tests/test-wcsrtombs3.sh: New file. * tests/test-wcsrtombs4.sh: New file. * tests/test-wcsrtombs.c: New file. New module 'wcsrtombs'. * lib/wchar.in.h (wcsrtombs): New declaration. * lib/wcsrtombs.c: New file. * m4/wcsrtombs.m4: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSRTOMBS, HAVE_WCSRTOMBS, REPLACE_WCSRTOMBS. * modules/wchar (Makefile.am): Substitute GNULIB_WCSRTOMBS, HAVE_WCSRTOMBS, REPLACE_WCSRTOMBS. * modules/wcsrtombs: New file. * doc/posix-functions/wcsrtombs.texi: Mention the new module and the bugs. 2008-12-21 Bruno Haible Work around a wcrtomb() bug on Solaris 10 and OSF/1 5.1. * lib/wchar.in.h (wcrtomb): Override if REPLACE_WCRTOMB is set. * m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): Test the return value of wcrtomb with NULL destination argument in various locales. Set REPLACE_WCRTOMB if not correct. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_WCRTOMB. * modules/wchar (Makefile.am): Substitute REPLACE_WCRTOMB. * modules/wcrtomb (Files): Add m4/locale-fr.m4, m4/locale-ja.m4, m4/locale-zh.m4, m4/codeset.m4. * doc/posix-functions/wcrtomb.texi: Document the bug. 2008-12-21 Bruno Haible Work around a btowc() bug on IRIX 6.5. * lib/wchar.in.h (btowc): Override if REPLACE_BTOWC is set. * m4/btowc.m4 (gl_FUNC_BTOWC): Test whether btowc(EOF) is correct. Set REPLACE_WTOBC if not. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_BTOWC. * modules/wchar (Makefile.am): Substitute REPLACE_BTOWC. * doc/posix-functions/btowc.texi: Mention the IRIX bug. 2008-12-21 Bruno Haible * modules/wcrtomb-tests: New file. * tests/test-wcrtomb.sh: New file. * tests/test-wcrtomb.c: New file. New module 'wcrtomb'. * lib/wchar.in.h (wcrtomb): New declaration. * lib/wcrtomb.c: New file. * m4/wcrtomb.m4: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCRTOMB, HAVE_WCRTOMB. * modules/wchar (Makefile.am): Substitute GNULIB_WCRTOMB, HAVE_WCRTOMB. * modules/wcrtomb: New file. * doc/posix-functions/wcrtomb.texi: Mention the new module. 2008-12-21 Bruno Haible * modules/mbrtowc (Files): Add m4/codeset.m4, needed by m4/locale-fr.m4. * modules/mbsrtowcs (Files): Likewise. * modules/wctob (Files): Likewise. * modules/c-strcase-tests (Files): Likewise. * modules/unistdio/u8-vasnprintf-tests (Files): Likewise. * modules/unistdio/u16-vasnprintf-tests (Files): Likewise. * modules/unistdio/u32-vasnprintf-tests (Files): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Files): Likewise. * modules/vasnprintf-posix-tests (Files): Likewise. 2008-12-21 William Pursell gitlog-to-changelog: pass all command-line arguments to git-log * build-aux/gitlog-to-changelog: When producing a ChangeLog, it is sometimes convenient to filter the commits in various ways. gitlog-to-changelog only allows --since to specify a start date, but git-log itself supports many other filtering mechanisms. At the moment, I want to filter by branch name. Rather than adding a --branch option to gitlog-to-changelog, it seems more flexible to simply pass all options directly to git-log and let git do the work. Notice that this effectively makes --since a redundant option for gitlog-to-changelog, but removing it would require current usage to change since calls would then require an additional '--'. 2008-12-21 Bruno Haible * modules/mbsnrtowcs-tests: New file. * tests/test-mbsnrtowcs1.sh: New file. * tests/test-mbsnrtowcs2.sh: New file. * tests/test-mbsnrtowcs3.sh: New file. * tests/test-mbsnrtowcs4.sh: New file. * tests/test-mbsnrtowcs.c: New file. New module 'mbsnrtowcs'. * lib/wchar.in.h (mbsnrtowcs): New declaration. * lib/mbsnrtowcs.c: New file. * lib/mbsrtowcs-state.c: New file. * lib/mbsrtowcs.c: Refer to _gl_mbsrtowcs_state. (internal_state): Remove variable. * m4/mbsnrtowcs.m4: New file. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): Add mbsrtowcs-state.c to the compilation units. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_MBSNRTOWCS, HAVE_MBSNRTOWCS, REPLACE_MBSNRTOWCS. * modules/wchar (Makefile.am): Substitute GNULIB_MBSNRTOWCS, HAVE_MBSNRTOWCS, REPLACE_MBSNRTOWCS. * modules/mbsnrtowcs: New file. * modules/mbsrtowcs (Files): Add lib/mbsrtowcs-state.c. * doc/posix-functions/mbsnrtowcs.texi: Mention the new module and a portability problem. 2008-12-21 Bruno Haible Work around mbsrtowcs bug. * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): New macro. (gl_FUNC_MBSRTOWCS): Invoke it. * modules/mbsrtowcs (Files): Add m4/locale-fr.m4, m4/locale-ja.m4, m4/locale-zh.m4. * doc/posix-functions/mbsrtowcs.texi: Document the bug. 2008-12-21 Bruno Haible * tests/test-mbsrtowcs.c (main): Execute the loop also for unlimited=1. 2008-12-21 Bruno Haible Update doc for AIX. * doc/pastposix-functions/wcswcs.texi: Mention that AIX has only a 16-bit wchar_t type. * doc/posix-functions/btowc.texi: Likewise. * doc/posix-functions/fgetwc.texi: Likewise. * doc/posix-functions/fgetws.texi: Likewise. * doc/posix-functions/fputwc.texi: Likewise. * doc/posix-functions/fputws.texi: Likewise. * doc/posix-functions/fwide.texi: Likewise. * doc/posix-functions/fwprintf.texi: Likewise. * doc/posix-functions/fwscanf.texi: Likewise. * doc/posix-functions/getwchar.texi: Likewise. * doc/posix-functions/getwc.texi: Likewise. * doc/posix-functions/iswalnum.texi: Likewise. * doc/posix-functions/iswalpha.texi: Likewise. * doc/posix-functions/iswblank.texi: Likewise. * doc/posix-functions/iswcntrl.texi: Likewise. * doc/posix-functions/iswctype.texi: Likewise. * doc/posix-functions/iswdigit.texi: Likewise. * doc/posix-functions/iswgraph.texi: Likewise. * doc/posix-functions/iswlower.texi: Likewise. * doc/posix-functions/iswprint.texi: Likewise. * doc/posix-functions/iswpunct.texi: Likewise. * doc/posix-functions/iswspace.texi: Likewise. * doc/posix-functions/iswupper.texi: Likewise. * doc/posix-functions/iswxdigit.texi: Likewise. * doc/posix-functions/mbrtowc.texi: Likewise. * doc/posix-functions/mbsrtowcs.texi: Likewise. * doc/posix-functions/mbstowcs.texi: Likewise. * doc/posix-functions/mbtowc.texi: Likewise. * doc/posix-functions/putwchar.texi: Likewise. * doc/posix-functions/putwc.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/tolower.texi: Likewise. * doc/posix-functions/toupper.texi: Likewise. * doc/posix-functions/towctrans.texi: Likewise. * doc/posix-functions/ungetwc.texi: Likewise. * doc/posix-functions/vswprintf.texi: Likewise. * doc/posix-functions/wcrtomb.texi: Likewise. * doc/posix-functions/wcscat.texi: Likewise. * doc/posix-functions/wcschr.texi: Likewise. * doc/posix-functions/wcscmp.texi: Likewise. * doc/posix-functions/wcscoll.texi: Likewise. * doc/posix-functions/wcscpy.texi: Likewise. * doc/posix-functions/wcscspn.texi: Likewise. * doc/posix-functions/wcsftime.texi: Likewise. * doc/posix-functions/wcslen.texi: Likewise. * doc/posix-functions/wcsncat.texi: Likewise. * doc/posix-functions/wcsncmp.texi: Likewise. * doc/posix-functions/wcsncpy.texi: Likewise. * doc/posix-functions/wcspbrk.texi: Likewise. * doc/posix-functions/wcsrchr.texi: Likewise. * doc/posix-functions/wcsrtombs.texi: Likewise. * doc/posix-functions/wcsspn.texi: Likewise. * doc/posix-functions/wcsstr.texi: Likewise. * doc/posix-functions/wcstod.texi: Likewise. * doc/posix-functions/wcstof.texi: Likewise. * doc/posix-functions/wcstoimax.texi: Likewise. * doc/posix-functions/wcstok.texi: Likewise. * doc/posix-functions/wcstold.texi: Likewise. * doc/posix-functions/wcstoll.texi: Likewise. * doc/posix-functions/wcstol.texi: Likewise. * doc/posix-functions/wcstombs.texi: Likewise. * doc/posix-functions/wcstoull.texi: Likewise. * doc/posix-functions/wcstoul.texi: Likewise. * doc/posix-functions/wcstoumax.texi: Likewise. * doc/posix-functions/wcswidth.texi: Likewise. * doc/posix-functions/wcsxfrm.texi: Likewise. * doc/posix-functions/wctob.texi: Likewise. * doc/posix-functions/wctomb.texi: Likewise. * doc/posix-functions/wctrans.texi: Likewise. * doc/posix-functions/wctype.texi: Likewise. * doc/posix-functions/wcwidth.texi: Likewise. * doc/posix-functions/wmemchr.texi: Likewise. * doc/posix-functions/wmemcmp.texi: Likewise. * doc/posix-functions/wmemcpy.texi: Likewise. * doc/posix-functions/wmemmove.texi: Likewise. * doc/posix-functions/wmemset.texi: Likewise. * doc/posix-functions/wprintf.texi: Likewise. * doc/posix-functions/wscanf.texi: Likewise. 2008-12-21 Bruno Haible Update doc for HP-UX 11.11. * doc/posix-functions/btowc.texi: Clarify that the function is missing in HP-UX version 11.00, not in all versions of HP-UX 11. * doc/posix-functions/fwide.texi: Likewise. * doc/posix-functions/fwprintf.texi: Likewise. * doc/posix-functions/fwscanf.texi: Likewise. * doc/posix-functions/inet_ntop.texi: Likewise. * doc/posix-functions/inet_pton.texi: Likewise. * doc/posix-functions/mbrlen.texi: Likewise. * doc/posix-functions/mbrtowc.texi: Likewise. * doc/posix-functions/mbsinit.texi: Likewise. * doc/posix-functions/mbsrtowcs.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/swscanf.texi: Likewise. * doc/posix-functions/towctrans.texi: Likewise. * doc/posix-functions/vfwprintf.texi: Likewise. * doc/posix-functions/vswprintf.texi: Likewise. * doc/posix-functions/vwprintf.texi: Likewise. * doc/posix-functions/wcrtomb.texi: Likewise. * doc/posix-functions/wcsrtombs.texi: Likewise. * doc/posix-functions/wcsstr.texi: Likewise. * doc/posix-functions/wctob.texi: Likewise. * doc/posix-functions/wctrans.texi: Likewise. * doc/posix-functions/wmemchr.texi: Likewise. * doc/posix-functions/wmemcmp.texi: Likewise. * doc/posix-functions/wmemcpy.texi: Likewise. * doc/posix-functions/wmemmove.texi: Likewise. * doc/posix-functions/wmemset.texi: Likewise. * doc/posix-functions/wprintf.texi: Likewise. * doc/posix-functions/wscanf.texi: Likewise. 2008-12-21 Bruno Haible Work around a portability problem. * tests/test-mbsrtowcs.c (main): Use a temporary conversion state. * doc/posix-functions/mbsrtowcs.texi: Document the portability problem. 2008-12-20 Bruno Haible * lib/wchar.in.h (mbsrtowcs): Redefine if REPLACE_MBSRTOWCS is set. * m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): Invoke gl_MBSTATE_T_BROKEN. Set REPLACE_MBSRTOWCS if mbsrtowcs needs to be overridden. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_MBSRTOWCS. * modules/wchar (Makefile.am): Substitute REPLACE_MBSRTOWCS. Work around mbrtowc bugs on AIX, HP-UX, OSF/1, Solaris. * lib/wchar.in.h (mbstate_t): Redefine also if REPLACE_MBSTATE_T is set. (GNULIB_defined_mbstate_t): New macro. (mbsinit): Redefine if REPLACE_MBSINIT is set. (mbrtowc): Redefine if REPLACE_MBRTOWC is set. * lib/mbrtowc.c (rpl_mbrtowc): Add an alternative implementation that reuses the system's mbrtowc function but works around the bugs. * m4/mbrtowc.m4 (gl_MBSTATE_T_BROKEN, gl_MBRTOWC_INCOMPLETE_STATE, gl_MBRTOWC_NULL_ARG, gl_MBRTOWC_RETVAL, gl_MBRTOWC_NUL_RETVAL): New macros. (gl_FUNC_MBRTOWC): Invoke them. Set REPLACE_MBRTOWC if mbrtowc needs to be overridden. Optionally define MBRTOWC_NULL_ARG_BUG, MBRTOWC_RETVAL_BUG, MBRTOWC_NUL_RETVAL_BUG. * m4/mbsinit.m4 (gl_FUNC_MBSINIT): Invoke gl_MBSTATE_T_BROKEN. Set REPLACE_MBSINIT if mbsinit needs to be overridden. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_MBSTATE_T, REPLACE_MBSINIT, REPLACE_MBRTOWC. * modules/wchar (Makefile.am): Substitute REPLACE_MBSTATE_T, REPLACE_MBSINIT, REPLACE_MBRTOWC. * modules/mbrtowc (Files): Add m4/locale-fr.m4, m4/locale-ja.m4, m4/locale-zh.m4. (Depends): Add mbsinit. * modules/mbsinit (Depends): Add mbrtowc. * doc/posix-functions/mbrtowc.texi: Mention the various bugs. 2008-12-20 Bruno Haible * tests/test-mbrtowc.c (main): Change sample string in EUC-JP encoding so that there are no conversion errors on AIX. * tests/test-mbsrtowcs.c (main): LIkewise. 2008-12-20 Bruno Haible Work around wctob bug on Solaris <= 9. * lib/wchar.in.h (wctob): Redefine if REPLACE_WCTOB is set. * m4/wctob.m4 (gl_FUNC_WCTOB): Test whether wctob works. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize REPLACE_WCTOB. * modules/wchar (Makefile.am): Substitute REPLACE_WCTOB. * modules/wctob (Files): Add m4/locale-fr.m4. * doc/posix-functions/wctob.texi: Mention the Solaris bug. 2008-12-20 Bruno Haible * doc/posix-functions/select.texi: Mention Solaris 2.6 bug with /dev/null. * tests/test-select-in.sh: Likewise. Reported by Tom G. Christensen . 2008-12-20 Bruno Haible Don't pretend that Cygwin has a ja_JP.EUC-JP locale. * m4/locale-ja.m4 (gt_LOCALE_JA): Add test for MB_CUR_MAX. Needed on Cygwin 1.5.x. 2008-12-20 Bruno Haible Ensure mbstate_t is defined on HP-UX 11.11. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Require AC_CANONICAL_HOST. On HP-UX, define _XOPEN_SOURCE to 500. * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Require AC_USE_SYSTEM_EXTENSIONS. * modules/fnmatch (Depends-on): Add extensions. * modules/mbrlen (Depends-on): Likewise. * modules/mbrtowc (Depends-on): Likewise. * modules/mbsinit (Depends-on): Likewise. * modules/mbsrtowcs (Depends-on): Likewise. * modules/mbswidth (Depends-on): Likewise. * modules/quotearg (Depends-on): Likewise. * modules/strftime (Depends-on): Likewise. 2008-12-20 Bruno Haible Ensure wctob is declared on IRIX 6.5. * lib/wchar.in.h (wctob): Declare also when HAVE_DECL_WCTOB is 0. * m4/wctob.m4 (gl_FUNC_WCTOB): Set HAVE_DECL_WCTOB instead of HAVE_WCTOB. Also test whether declares wctob. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize HAVE_DECL_WCTOB instead of HAVE_WCTOB. * modules/wchar (Makefile.am): Substitute HAVE_DECL_WCTOB instead of HAVE_WCTOB. * doc/posix-functions/wctob.texi: Mention missing declaration on IRIX. 2008-12-19 Bruno Haible * modules/mbsrtowcs-tests: New file. * tests/test-mbsrtowcs1.sh: New file. * tests/test-mbsrtowcs2.sh: New file. * tests/test-mbsrtowcs3.sh: New file. * tests/test-mbsrtowcs4.sh: New file. * tests/test-mbsrtowcs.c: New file. New module 'mbsrtowcs'. * lib/wchar.in.h (mbsrtowcs): New declaration. * lib/mbsrtowcs.c: New file. * m4/mbsrtowcs.m4: New file. * modules/mbsrtowcs: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_MBSRTOWCS and HAVE_MBSRTOWCS. * modules/wchar (Makefile.am): Substitute GNULIB_MBSRTOWCS and HAVE_MBSRTOWCS. * doc/posix-functions/mbsrtowcs.texi: Document the new module. 2008-12-19 Bruno Haible New module 'mbrlen'. * lib/wchar.in.h (mbrlen): New declaration. * lib/mbrlen.c: New file. * m4/mbrlen.m4: New file. * modules/mbrlen: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_MBRLEN and HAVE_MBRLEN. * modules/wchar (Makefile.am): Substitute GNULIB_MBRLEN and HAVE_MBRLEN. * doc/posix-functions/mbrlen.texi: Document the new module. 2008-12-19 Bruno Haible * lib/mbrtowc.c: Include verify.h. Verify an assumption. * modules/mbrtowc (Depends-on): Add verify. Suggested by Paul Eggert. 2008-12-18 Bruno Haible * modules/mbsinit-tests: New file. * tests/test-mbsinit.sh: New file. * tests/test-mbsinit.c: New file. 2008-12-18 Bruno Haible * modules/mbrtowc-tests: New file. * tests/test-mbrtowc1.sh: New file. * tests/test-mbrtowc2.sh: New file. * tests/test-mbrtowc3.sh: New file. * tests/test-mbrtowc4.sh: New file. * tests/test-mbrtowc.c: New file. New module 'mbrtowc'. * lib/wchar.in.h (mbstate_t): Override when the system does not have mbsinit and mbrtowc. (mbrtowc): New declaration. * lib/mbrtowc.c: New file. * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC, gl_PREREQ_MBRTOWC): New macros. * modules/mbrtowc: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_MBRTOWC and HAVE_MBRTOWC. * modules/wchar (Makefile.am): Substitute GNULIB_MBRTOWC and HAVE_MBRTOWC. * doc/posix-functions/mbrtowc.texi: Document the new module. 2008-12-18 Bruno Haible New module 'wctob'. * lib/wchar.in.h (wctob): New declaration. * lib/wctob.c: New file. * m4/wctob.m4: New file. * modules/wctob: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCTOB and HAVE_WCTOB. * modules/wchar (Makefile.am): Substitute GNULIB_WCTOB and HAVE_WCTOB. * doc/posix-functions/wctob.texi: Document the new module. 2008-12-18 Bruno Haible * m4/mbsinit.m4 (gl_FUNC_MBSINIT): Invoke gl_REPLACE_WCHAR_H. * m4/btowc.m4 (gl_FUNC_BTOWC): Likewise. 2008-12-18 Simon Josefsson * lib/flock.c: Use proper #if symbol in check. Reported by "Tom G. Christensen" . * lib/flock.c: Need to include errno.h. Reported by "Tom G. Christensen" . * lib/flock.c: Need to include string.h. Reported by "Tom G. Christensen" and Eric Blake . 2008-12-18 Bruno Haible * m4/locale-ja.m4: New file, from GNU gettext. 2008-12-17 Bruno Haible * m4/mbrtowc.m4 (AC_FUNC_MBRTOWC): Don't override in autoconf >= 2.60. Suggested by Eric Blake. 2008-12-17 Bruno Haible * m4/errno_h.m4 (AC_COMPUTE_INT): Provide fallback definition. 2008-12-17 Bruno Haible * lib/mbsinit.c: Include verify.h. Verify an assumption. * modules/mbsinit (Depends-on): Add verify. Suggested by Paul Eggert. 2008-12-17 Bruno Haible * m4/mbrtowc.m4 (AC_FUNC_MBRTOWC): Renamed from gl_FUNC_MBRTOWC. * m4/mbfile.m4 (gl_MBFILE): Use AC_FUNC_MBRTOWC instead of gl_FUNC_MBRTOWC. * m4/mbiter.m4 (gl_MBITER): LIkewise. * m4/mbscasecmp.m4 (gl_PREREQ_MBSCASECMP): Likewise. * m4/mbscasestr.m4 (gl_PREREQ_MBSCASESTR): Likewise. * m4/mbschr.m4 (gl_PREREQ_MBSCHR): Likewise. * m4/mbscspn.m4 (gl_PREREQ_MBSCSPN): Likewise. * m4/mbslen.m4 (gl_PREREQ_MBSLEN): Likewise. * m4/mbsncasecmp.m4 (gl_PREREQ_MBSNCASECMP): Likewise. * m4/mbsnlen.m4 (gl_PREREQ_MBSNLEN): Likewise. * m4/mbspbrk.m4 (gl_PREREQ_MBSPBRK): Likewise. * m4/mbspcasecmp.m4 (gl_PREREQ_MBSPCASECMP): Likewise. * m4/mbsrchr.m4 (gl_PREREQ_MBSRCHR): Likewise. * m4/mbssep.m4 (gl_PREREQ_MBSSEP): Likewise. * m4/mbsspn.m4 (gl_PREREQ_MBSSPN): Likewise. * m4/mbsstr.m4 (gl_PREREQ_MBSSTR): Likewise. * m4/mbstok_r.m4 (gl_PREREQ_MBSTOK_R): Likewise. * m4/mbswidth.m4 (gl_MBSWIDTH): Likewise. * m4/quotearg.m4 (gl_QUOTEARG): Likewise. * modules/trim (configure.ac): Likewise. 2008-12-17 Bruno Haible * modules/btowc-tests: New file. * tests/test-btowc1.sh: New file. * tests/test-btowc2.sh: New file. * tests/test-btowc.c: New file. New module 'btowc'. * lib/wchar.in.h (btowc): New declaration. * lib/btowc.c: New file. * m4/btowc.m4: New file. * modules/btowc: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_BTOWC and HAVE_BTOWC. * modules/wchar (Makefile.am): Substitute GNULIB_BTOWC and HAVE_BTOWC. * doc/posix-functions/btowc.texi: Document the new module. 2008-12-17 Bruno Haible New module 'mbsinit'. * lib/wchar.in.h (mbsinit): New declaration. * lib/mbsinit.c: New file. * m4/mbsinit.m4: New file. * modules/mbsinit: New file. * m4/wchar.m4 (gl_WCHAR_H_DEFAULTS): Initialize GNULIB_MBSINIT and HAVE_MBSINIT. * modules/wchar (Makefile.am): Substitute GNULIB_MBSINIT and HAVE_MBSINIT. * doc/posix-functions/mbsinit.texi: Document the new module. 2008-12-16 Bruno Haible * lib/unistd.in.h: Add comment. * tests/test-environ.c: Don't include . 2008-12-16 Bruno Haible * lib/parse-duration.h (parse_duration): Document return value convention. * lib/parse-duration.c: Include specification header first. Add comments. (_): Remove macro. (parse_year_month_day, parse_hour_minute_second): Move side effects outside of strchr call. (parse_non_iso8601): Move side effects outside of isspace call. (parse_duration): Don't test errno is res != BAD_TIME. Remove fprintf call. 2008-12-16 Bruno Haible * tests/test-parse-duration.sh: Produce no output when the test succeeds. 2008-12-16 Bruno Haible * tests/test-parse-duration.sh: Fix quoting of $tmp and $tmpf expressions. 2008-12-15 Bruno Haible * doc/glibc-functions/fgetxattr.texi: Tweak wording. * doc/glibc-functions/flistxattr.texi: Likewise. * doc/glibc-functions/fopencookie.texi: Likewise. * doc/glibc-functions/fremovexattr.texi: Likewise. * doc/glibc-functions/fsetxattr.texi: Likewise. * doc/glibc-functions/getxattr.texi: Likewise. * doc/glibc-functions/lgetxattr.texi: Likewise. * doc/glibc-functions/listxattr.texi: Likewise. * doc/glibc-functions/llistxattr.texi: Likewise. * doc/glibc-functions/lremovexattr.texi: Likewise. * doc/glibc-functions/lsetxattr.texi: Likewise. * doc/glibc-functions/removexattr.texi: Likewise. * doc/glibc-functions/setxattr.texi: Likewise. * doc/posix-functions/open_memstream.texi: Likewise. 2008-12-15 Eric Blake Update doc for cygwin 1.7. * doc/posix-functions/faccessat.texi: Cygwin 1.7 added several new functions. * doc/posix-functions/fchmodat.texi: Likewise. * doc/posix-functions/fchownat.texi: Likewise. * doc/posix-functions/fdopendir.texi: Likewise. * doc/posix-functions/fmemopen.texi: Likewise. * doc/posix-functions/freeaddrinfo.texi: Likewise. * doc/posix-functions/fstatat.texi: Likewise. * doc/posix-functions/futimens.texi: Likewise. * doc/posix-functions/gai_strerror.texi: Likewise. * doc/posix-functions/getaddrinfo.texi: Likewise. * doc/posix-functions/getnameinfo.texi: Likewise. * doc/posix-functions/if_freenameindex.texi: Likewise. * doc/posix-functions/if_indextoname.texi: Likewise. * doc/posix-functions/if_nameindex.texi: Likewise. * doc/posix-functions/if_nametoindex.texi: Likewise. * doc/posix-functions/insque.texi: Likewise. * doc/posix-functions/linkat.texi: Likewise. * doc/posix-functions/llrint.texi: Likewise. * doc/posix-functions/llrintf.texi: Likewise. * doc/posix-functions/llrintl.texi: Likewise. * doc/posix-functions/lockf.texi: Likewise. * doc/posix-functions/lrintl.texi: Likewise. * doc/posix-functions/mkdirat.texi: Likewise. * doc/posix-functions/mkfifoat.texi: Likewise. * doc/posix-functions/mknodat.texi: Likewise. * doc/posix-functions/mq_close.texi: Likewise. * doc/posix-functions/mq_getattr.texi: Likewise. * doc/posix-functions/mq_notify.texi: Likewise. * doc/posix-functions/mq_open.texi: Likewise. * doc/posix-functions/mq_receive.texi: Likewise. * doc/posix-functions/mq_send.texi: Likewise. * doc/posix-functions/mq_setattr.texi: Likewise. * doc/posix-functions/mq_timedreceive.texi: Likewise. * doc/posix-functions/mq_timedsend.texi: Likewise. * doc/posix-functions/mq_unlink.texi: Likewise. * doc/posix-functions/open_memstream.texi: Likewise. * doc/posix-functions/openat.texi: Likewise. * doc/posix-functions/posix_fadvise.texi: Likewise. * doc/posix-functions/posix_fallocate.texi: Likewise. * doc/posix-functions/posix_madvise.texi: Likewise. * doc/posix-functions/posix_memalign.texi: Likewise. * doc/posix-functions/posix_openpt.texi: Likewise. * doc/posix-functions/readlinkat.texi: Likewise. * doc/posix-functions/remque.texi: Likewise. * doc/posix-functions/renameat.texi: Likewise. * doc/posix-functions/rintl.texi: Likewise. * doc/posix-functions/sem_unlink.texi: Likewise. * doc/posix-functions/shm_open.texi: Likewise. * doc/posix-functions/shm_unlink.texi: Likewise. * doc/posix-functions/signgam.texi: Likewise. * doc/posix-functions/sigset.texi: Likewise. * doc/posix-functions/stpcpy.texi: Likewise. * doc/posix-functions/stpncpy.texi: Likewise. * doc/posix-functions/strerror.texi: Likewise. * doc/posix-functions/strtod.texi: Likewise. * doc/posix-functions/symlinkat.texi: Likewise. * doc/posix-functions/unlinkat.texi: Likewise. * doc/posix-functions/utimensat.texi: Likewise. * doc/glibc-functions/bindresvport.texi: Likewise. * doc/glibc-functions/dn_expand.texi: Likewise. * doc/glibc-functions/exp10.texi: Likewise. * doc/glibc-functions/exp10f.texi: Likewise. * doc/glibc-functions/fgetxattr.texi: Likewise. * doc/glibc-functions/flistxattr.texi: Likewise. * doc/glibc-functions/fopencookie.texi: Likewise. * doc/glibc-functions/freeifaddrs.texi: Likewise. * doc/glibc-functions/fremovexattr.texi: Likewise. * doc/glibc-functions/fsetxattr.texi: Likewise. * doc/glibc-functions/getifaddrs.texi: Likewise. * doc/glibc-functions/getxattr.texi: Likewise. * doc/glibc-functions/lgetxattr.texi: Likewise. * doc/glibc-functions/listxattr.texi: Likewise. * doc/glibc-functions/llistxattr.texi: Likewise. * doc/glibc-functions/lremovexattr.texi: Likewise. * doc/glibc-functions/lsetxattr.texi: Likewise. * doc/glibc-functions/pow10.texi: Likewise. * doc/glibc-functions/pow10f.texi: Likewise. * doc/glibc-functions/rcmd_af.texi: Likewise. * doc/glibc-functions/removexattr.texi: Likewise. * doc/glibc-functions/res_init.texi: Likewise. * doc/glibc-functions/res_mkquery.texi: Likewise. * doc/glibc-functions/res_query.texi: Likewise. * doc/glibc-functions/res_querydomain.texi: Likewise. * doc/glibc-functions/res_send.texi: Likewise. * doc/glibc-functions/rresvport_af.texi: Likewise. * doc/glibc-functions/setxattr.texi: Likewise. * doc/glibc-functions/strcasestr.texi: Likewise. 2008-12-15 Bruno Haible Fix compilation error on OSF/1 4.0. * lib/sys_select.in.h: When invoked from OSF/1 or , simply delegate to the system header. Reported by Daniel Richard G. . 2008-12-15 Bruno Haible * doc/posix-functions/openat.texi: Mention the 'openat' module. * doc/posix-functions/fchmodat.texi: Likewise. * doc/posix-functions/fchownat.texi: Likewise. * doc/posix-functions/fdopendir.texi: Likewise. * doc/posix-functions/fstatat.texi: Likewise. * doc/posix-functions/mkdirat.texi: Likewise. * doc/posix-functions/unlinkat.texi: Likewise. 2008-12-14 Bruno Haible Update doc for POSIX:2008. * doc/posix-functions/faccessat.texi: New file. * doc/posix-functions/fchmodat.texi: New file. * doc/posix-functions/fchownat.texi: New file. * doc/posix-functions/fdopendir.texi: New file. * doc/posix-functions/fstatat.texi: New file. * doc/posix-functions/futimens.texi: New file. * doc/posix-functions/linkat.texi: New file. * doc/posix-functions/mkdirat.texi: New file. * doc/posix-functions/mkfifoat.texi: New file. * doc/posix-functions/mknodat.texi: New file. * doc/posix-functions/open_wmemstream.texi: New file. * doc/posix-functions/openat.texi: New file. * doc/posix-functions/psiginfo.texi: New file. * doc/posix-functions/pthread_mutex_consistent.texi: New file. * doc/posix-functions/pthread_mutexattr_getrobust.texi: New file. * doc/posix-functions/pthread_mutexattr_setrobust.texi: New file. * doc/posix-functions/readlinkat.texi: New file. * doc/posix-functions/renameat.texi: New file. * doc/posix-functions/strerror_l.texi: New file. * doc/posix-functions/symlinkat.texi: New file. * doc/posix-functions/unlinkat.texi: New file. * doc/posix-functions/utimensat.texi: New file. * doc/gnulib.texi (Function Substitutes): Add these subsections. 2008-12-14 Bruno Haible Update doc for POSIX:2008. * doc/posix-functions/alphasort.texi: Renamed from doc/glibc-functions/alphasort.texi. * doc/posix-functions/dirfd.texi: Renamed from doc/glibc-functions/dirfd.texi. * doc/posix-functions/dprintf.texi: Renamed from doc/glibc-functions/dprintf.texi. * doc/posix-functions/duplocale.texi: Renamed from doc/glibc-functions/duplocale.texi. * doc/posix-functions/fexecve.texi: Renamed from doc/glibc-functions/fexecve.texi. * doc/posix-functions/fmemopen.texi: Renamed from doc/glibc-functions/fmemopen.texi. * doc/posix-functions/freelocale.texi: Renamed from doc/glibc-functions/freelocale.texi. * doc/posix-functions/getdate_err.texi: Renamed from doc/glibc-functions/getdate_err.texi. * doc/posix-functions/isalnum_l.texi: Renamed from doc/glibc-functions/isalnum_l.texi. * doc/posix-functions/isalpha_l.texi: Renamed from doc/glibc-functions/isalpha_l.texi. * doc/posix-functions/isblank_l.texi: Renamed from doc/glibc-functions/isblank_l.texi. * doc/posix-functions/iscntrl_l.texi: Renamed from doc/glibc-functions/iscntrl_l.texi. * doc/posix-functions/isdigit_l.texi: Renamed from doc/glibc-functions/isdigit_l.texi. * doc/posix-functions/isgraph_l.texi: Renamed from doc/glibc-functions/isgraph_l.texi. * doc/posix-functions/islower_l.texi: Renamed from doc/glibc-functions/islower_l.texi. * doc/posix-functions/isprint_l.texi: Renamed from doc/glibc-functions/isprint_l.texi. * doc/posix-functions/ispunct_l.texi: Renamed from doc/glibc-functions/ispunct_l.texi. * doc/posix-functions/isspace_l.texi: Renamed from doc/glibc-functions/isspace_l.texi. * doc/posix-functions/isupper_l.texi: Renamed from doc/glibc-functions/isupper_l.texi. * doc/posix-functions/iswalnum_l.texi: Renamed from doc/glibc-functions/iswalnum_l.texi. * doc/posix-functions/iswalpha_l.texi: Renamed from doc/glibc-functions/iswalpha_l.texi. * doc/posix-functions/iswblank_l.texi: Renamed from doc/glibc-functions/iswblank_l.texi. * doc/posix-functions/iswcntrl_l.texi: Renamed from doc/glibc-functions/iswcntrl_l.texi. * doc/posix-functions/iswctype_l.texi: Renamed from doc/glibc-functions/iswctype_l.texi. * doc/posix-functions/iswdigit_l.texi: Renamed from doc/glibc-functions/iswdigit_l.texi. * doc/posix-functions/iswgraph_l.texi: Renamed from doc/glibc-functions/iswgraph_l.texi. * doc/posix-functions/iswlower_l.texi: Renamed from doc/glibc-functions/iswlower_l.texi. * doc/posix-functions/iswprint_l.texi: Renamed from doc/glibc-functions/iswprint_l.texi. * doc/posix-functions/iswpunct_l.texi: Renamed from doc/glibc-functions/iswpunct_l.texi. * doc/posix-functions/iswspace_l.texi: Renamed from doc/glibc-functions/iswspace_l.texi. * doc/posix-functions/iswupper_l.texi: Renamed from doc/glibc-functions/iswupper_l.texi. * doc/posix-functions/iswxdigit_l.texi: Renamed from doc/glibc-functions/iswxdigit_l.texi. * doc/posix-functions/isxdigit_l.texi: Renamed from doc/glibc-functions/isxdigit_l.texi. * doc/posix-functions/mbsnrtowcs.texi: Renamed from doc/glibc-functions/mbsnrtowcs.texi. * doc/posix-functions/mkdtemp.texi: Renamed from doc/glibc-functions/mkdtemp.texi. * doc/posix-functions/newlocale.texi: Renamed from doc/glibc-functions/newlocale.texi. * doc/posix-functions/nl_langinfo_l.texi: Renamed from doc/glibc-functions/nl_langinfo_l.texi. * doc/posix-functions/open_memstream.texi: Renamed from doc/glibc-functions/open_memstream.texi. * doc/posix-functions/opterr.texi: Renamed from doc/glibc-functions/opterr.texi. * doc/posix-functions/optind.texi: Renamed from doc/glibc-functions/optind.texi. * doc/posix-functions/optopt.texi: Renamed from doc/glibc-functions/optopt.texi. * doc/posix-functions/psignal.texi: Renamed from doc/glibc-functions/psignal.texi. * doc/posix-functions/scandir.texi: Renamed from doc/glibc-functions/scandir.texi. * doc/posix-functions/sched_get_priority_min.texi: Renamed from doc/glibc-functions/sched_get_priority_min.texi. * doc/posix-functions/signgam.texi: Renamed from doc/glibc-functions/signgam.texi. * doc/posix-functions/stpcpy.texi: Renamed from doc/glibc-functions/stpcpy.texi. * doc/posix-functions/stpncpy.texi: Renamed from doc/glibc-functions/stpncpy.texi. * doc/posix-functions/strcasecmp_l.texi: Renamed from doc/glibc-functions/strcasecmp_l.texi. * doc/posix-functions/strcoll_l.texi: Renamed from doc/glibc-functions/strcoll_l.texi. * doc/posix-functions/strfmon_l.texi: Renamed from doc/glibc-functions/strfmon_l.texi. * doc/posix-functions/strftime_l.texi: Renamed from doc/glibc-functions/strftime_l.texi. * doc/posix-functions/strncasecmp_l.texi: Renamed from doc/glibc-functions/strncasecmp_l.texi. * doc/posix-functions/strndup.texi: Renamed from doc/glibc-functions/strndup.texi. * doc/posix-functions/strnlen.texi: Renamed from doc/glibc-functions/strnlen.texi. * doc/posix-functions/strsignal.texi: Renamed from doc/glibc-functions/strsignal.texi. * doc/posix-functions/strxfrm_l.texi: Renamed from doc/glibc-functions/strxfrm_l.texi. * doc/posix-functions/timer_gettime.texi: Renamed from doc/glibc-functions/timer_gettime.texi. * doc/posix-functions/tolower_l.texi: Renamed from doc/glibc-functions/tolower_l.texi. * doc/posix-functions/toupper_l.texi: Renamed from doc/glibc-functions/toupper_l.texi. * doc/posix-functions/towctrans_l.texi: Renamed from doc/glibc-functions/towctrans_l.texi. * doc/posix-functions/towlower_l.texi: Renamed from doc/glibc-functions/towlower_l.texi. * doc/posix-functions/towupper_l.texi: Renamed from doc/glibc-functions/towupper_l.texi. * doc/posix-functions/uselocale.texi: Renamed from doc/glibc-functions/uselocale.texi. * doc/posix-functions/vdprintf.texi: Renamed from doc/glibc-functions/vdprintf.texi. * doc/posix-functions/wcpcpy.texi: Renamed from doc/glibc-functions/wcpcpy.texi. * doc/posix-functions/wcpncpy.texi: Renamed from doc/glibc-functions/wcpncpy.texi. * doc/posix-functions/wcscasecmp.texi: Renamed from doc/glibc-functions/wcscasecmp.texi. * doc/posix-functions/wcscasecmp_l.texi: Renamed from doc/glibc-functions/wcscasecmp_l.texi. * doc/posix-functions/wcscoll_l.texi: Renamed from doc/glibc-functions/wcscoll_l.texi. * doc/posix-functions/wcsdup.texi: Renamed from doc/glibc-functions/wcsdup.texi. * doc/posix-functions/wcsncasecmp.texi: Renamed from doc/glibc-functions/wcsncasecmp.texi. * doc/posix-functions/wcsncasecmp_l.texi: Renamed from doc/glibc-functions/wcsncasecmp_l.texi. * doc/posix-functions/wcsnlen.texi: Renamed from doc/glibc-functions/wcsnlen.texi. * doc/posix-functions/wcsnrtombs.texi: Renamed from doc/glibc-functions/wcsnrtombs.texi. * doc/posix-functions/wcsxfrm_l.texi: Renamed from doc/glibc-functions/wcsxfrm_l.texi. * doc/posix-functions/wctrans_l.texi: Renamed from doc/glibc-functions/wctrans_l.texi. * doc/posix-functions/wctype_l.texi: Renamed from doc/glibc-functions/wctype_l.texi. * doc/gnulib.texi (Function Substitutes): Add these subsections. (Glibc ctype.h, Glibc dirent.h, Glibc getopt.h, Glibc math.h, Glibc sched.h, Glibc signal.h, Glibc stdio.h, Glibc stdlib.h, Glibc string.h, Glibc time.h, Glibc unistd.h, Glibc wchar.h): Remove these subsections. (Glibc langinfo.h, Glibc locale.h, Glibc monetary.h, Glibc wctype.h): Remove sections. 2008-12-14 Bruno Haible Update doc for POSIX:2008. * doc/posix-functions/*.texi: Update URL of POSIX specification. 2008-12-14 Bruno Haible Update doc for POSIX:2008. * doc/pastposix-functions/bcmp.texi: Renamed from doc/posix-functions/bcmp.texi. * doc/pastposix-functions/bcopy.texi: Renamed from doc/posix-functions/bcopy.texi. * doc/pastposix-functions/bsd_signal.texi: Renamed from doc/posix-functions/bsd_signal.texi. * doc/pastposix-functions/bzero.texi: Renamed from doc/posix-functions/bzero.texi. * doc/pastposix-functions/ecvt.texi: Renamed from doc/posix-functions/ecvt.texi. * doc/pastposix-functions/fcvt.texi: Renamed from doc/posix-functions/fcvt.texi. * doc/pastposix-functions/ftime.texi: Renamed from doc/posix-functions/ftime.texi. * doc/pastposix-functions/gcvt.texi: Renamed from doc/posix-functions/gcvt.texi. * doc/pastposix-functions/getcontext.texi: Renamed from doc/posix-functions/getcontext.texi. * doc/pastposix-functions/gethostbyaddr.texi: Renamed from doc/posix-functions/gethostbyaddr.texi. * doc/pastposix-functions/gethostbyname.texi: Renamed from doc/posix-functions/gethostbyname.texi. * doc/pastposix-functions/getwd.texi: Renamed from doc/posix-functions/getwd.texi. * doc/pastposix-functions/h_errno.texi: Renamed from doc/posix-functions/h_errno.texi. * doc/pastposix-functions/index.texi: Renamed from doc/posix-functions/index.texi. * doc/pastposix-functions/makecontext.texi: Renamed from doc/posix-functions/makecontext.texi. * doc/pastposix-functions/mktemp.texi: Renamed from doc/posix-functions/mktemp.texi. * doc/pastposix-functions/pthread_attr_getstackaddr.texi: Renamed from doc/posix-functions/pthread_attr_getstackaddr.texi. * doc/pastposix-functions/pthread_attr_setstackaddr.texi: Renamed from doc/posix-functions/pthread_attr_setstackaddr.texi. * doc/pastposix-functions/rindex.texi: Renamed from doc/posix-functions/rindex.texi. * doc/pastposix-functions/scalb.texi: Renamed from doc/posix-functions/scalb.texi. * doc/pastposix-functions/setcontext.texi: Renamed from doc/posix-functions/setcontext.texi. * doc/pastposix-functions/swapcontext.texi: Renamed from doc/posix-functions/swapcontext.texi. * doc/pastposix-functions/ualarm.texi: Renamed from doc/posix-functions/ualarm.texi. * doc/pastposix-functions/usleep.texi: Renamed from doc/posix-functions/usleep.texi. * doc/pastposix-functions/vfork.texi: Renamed from doc/posix-functions/vfork.texi. * doc/pastposix-functions/wcswcs.texi: Renamed from doc/posix-functions/wcswcs.texi. * doc/gnulib.texi (Legacy Function Substitutes): New chapter. (Function Substitutes): Update. 2008-12-14 Ralf Wildenhues * modules/relocatable-prog-wrapper (Depends-on): Add errno, needed by m4/strerror.m4. 2008-12-14 Ralf Wildenhues Bruno Haible * modules/unilbrk/tables (Depends-on): Add unilbrk/base. 2008-12-13 Bruno Haible * modules/strtoull (Depends-on): Remove unistd. 2008-12-11 Ralf Wildenhues * modules/strtoull (Depends-on): Add stdlib. 2008-12-11 Simon Josefsson * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add more warnings. 2008-12-10 Jim Meyering gl_ASSERT: don't say assertions are disabled when they're not * m4/assert.m4 (gl_ASSERT): Do not make configure report "checking whether to enable assertions... no", when they are in fact enabled. This is solely a bug in the output of configure. In spite of saying "no", NDEBUG was not defined in that case. Also, as noted by Eric Blake, leave assertions enabled upon --enable-assert=INVALID. 2008-12-10 Bruno Haible Change MODULES.html to refer to POSIX:2008 where possible. * MODULES.html.sh (POSIX2008_URL): New variable. (posix_headers): Remove sys/timeb, ucontext. (posix2001_headers): New variable. (posix_functions): Remove bcmp, bcopy, bsd_signal, bzero, ecvt, fcvt, ftime, gcvt, getcontext, gethostbyaddr, gethostbyname, getwd, h_errno, index, makecontext, mktemp, pthread_attr_getstackaddr, pthread_attr_setstackaddr, rindex, scalb, setcontext, swapcontext, ualarm, usleep, vfork, wcswcs. Add the new POSIX:2008 functions. (posix2001_functions): New variable. (func_module): Use URLs to POSIX:2008 where possible and to POSIX:2001 otherwise. 2008-12-09 Ralf Wildenhues add missing include to parse-duration.c * lib/parse-duration.c: #include "xalloc.h", for xstrdup. * modules/parse-duration (Depends-on): Add xalloc. fix sed script reading maint.mk * top/maint.mk (MYSELF): New macro, define as $(srcdir)/$(ME). (syntax-check-rules): Use it. 2008-12-09 Bruno Haible * m4/ldexpl.m4 (gl_FUNC_LDEXPL_WORKS): Add another check, that fails on MacOS X 10.4/PowerPC. Reported by Simon Josefsson. 2008-12-08 Jim Meyering work around mingw's lack of some S_IF definitions * lib/fts.c (S_IFLNK, S_IFSOCK): Define if not already defined. Reported by Simon Josefsson. 2008-12-08 Bruno Haible * m4/signbitl.m4 (gl_SIGNBIT_TEST_PROGRAM): Add a link check of signbit applied to variables. Needed on MacOS X 10.4/PowerPC. Reported by Simon Josefsson. 2008-12-08 William Pursell (tiny change) and Eric Blake assert: honor --enable-assert * m4/assert.m4 (gl_ASSERT): Synchronize with autoconf 2.64, in order to honor --enable-assert, rather than treating it as a synonym for --disable-assert. 2008-12-08 Jim Meyering * lib/posixtm.c: Remove now-useless declaration of mktime. * build-aux/announce-gen (get_tool_versions): Accept .xz tarballs. 2008-12-07 Bruno Haible * tests/test-lock.c (test_lock, test_rwlock, test_recursive_lock, test_once): Mark functions as static. * tests/test-tls.c (test_tls): Likewise. 2008-12-07 Bruno Haible * lib/striconveha.h (uniconv_register_autodetect): Renamed from iconv_register_autodetect. 2008-12-07 Jim Meyering posixtm.c: avoid a warning * lib/posixtm.c (posixtime): Don't initialize tm0. It's no longer needed to placate gcc4's -Wuninitialized, and the attempt to placate would elicit a new warning. unicodeio.c: mark unused parameters * lib/unicodeio.c (exit_failure_callback): Mark unused parameter. (fallback_failure_callback): Likewise. 2008-12-07 Bruno Haible * gnulib-tool (func_create_testdir): When building the tests subdirectory, ignore the modules gnumakefile and maintainer-makefile. Reported by Simon Josefsson. 2008-12-07 Ralf Wildenhues * doc/manywarnings.texi, doc/gnulib-intro.texi: Fix typos. 2008-12-06 Bruno Haible * lib/c-stack.h (c_stack_action): Clarify possible side effects. Suggested by Eric Blake. 2008-12-06 Bruno Haible Fix a c-stack test failure on MacOS X. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Require AC_CANONICAL_HOST. Define FAULT_YIELDS_SIGBUS. If set, install a signal handler for SIGBUS as well. * lib/c-stack.c (c_stack_action): If FAULT_YIELDS_SIGBUS is set, install a signal handler for SIGBUS as well. Reported by Bruce Dugan via Eric Blake. 2008-12-06 Bruno Haible Advocacy documentation. * doc/gnulib-intro.texi (Benefits): New section. * doc/gnulib.texi: Update. 2008-12-06 Bruno Haible Document the 'manywarnings' module. * doc/manywarnings.texi: New file. * doc/gnulib.texi: Include it. 2008-12-05 Eric Blake tests: silence some gcc warnings * tests/test-getdate.c (LOG) [!DEBUG]: Mark no-op void. * tests/uniwidth/test-uc_width2.c (finish_interval): Avoid printf type mismatches. 2008-12-03 Ralf Wildenhues Bruno Haible * m4/openmp.m4 (AC_OPENMP): Do not define with Autoconf 2.62 or newer. 2008-11-29 Jim Meyering unicodeio.c: mark unused parameters * lib/unicodeio.c (exit_failure_callback): Mark unused parameter. (fallback_failure_callback): Likewise. fts: fix a thinko * lib/fts.c (s_ifmt_shift_bits): Remove function. Not needed after all. (set_stat_type): Return S_IF*-valued "type" directly. Prompted by James Youngman's spotting a related bug. Confirmed by further testing through find. fts: provide dirent.d_type via FTSENT.fts_statp, when possible * lib/fts.c (D_TYPE): Define. (DT_UNKNOWN, DT_BLK, DT_CHR) [HAVE_STRUCT_DIRENT_D_TYPE]: Define. (DT_DIR, DT_FIFO, DT_LNK, DT_REG, DT_SOCK): Likewise. (s_ifmt_shift_bits): New function. (set_stat_type): New function. (fts_build): When not calling fts_stat, call set_stat_type to propagate dirent.d_type info to fts_read caller. * lib/fts_.h (FTSENT) [FTS_DEFER_STAT]: Mention that fts_statp->st_mode type information may be valid. 2008-11-28 Simon Josefsson * lib/sys_time.in.h: Add extern "C" block for C++. Suggested by Brian Dessent . Reported by Sam Steingold . 2008-11-20 Bruno Haible Attempt to work around an AIX 5.3, 6.1 compiler bug with include_next. * lib/math.in.h: Use INCLUDE_NEXT_AS_FIRST_DIRECTIVE instead of INCLUDE_NEXT. * m4/include_next.m4 (gl_INCLUDE_NEXT): Set also INCLUDE_NEXT_AS_FIRST_DIRECTIVE. * modules/math (Makefile.am): Substitute INCLUDE_NEXT_AS_FIRST_DIRECTIVE instead of INCLUDE_NEXT. Reported by Albert Chin . 2008-11-18 Alexandre Duret-Lutz Bruno Haible * lib/stdint.in.h: Define all type macros so that their expansion is a single typedef'ed token. Fixes a compilation failure in Boost which does "using ::int8_t;". 2008-11-18 Simon Josefsson * m4/manywarnings.m4: New file with gl_MANYWARN_COMPLEMENT and gl_MANYWARN_ALL_GCC. * m4/warnings.m4: Removed gl_WARN_SUPPORTED and gl_WARN_COMPLEMENT. Suggested by Bruno Haible . * modules/manywarnings: New file. * MODULES.html.sh: Mention manywarnings module. 2008-11-18 Bruno Haible * doc/gnulib-tool.texi (Unit tests): New section. 2008-11-18 Simon Josefsson * top/maint.mk (refresh-po): Fix sed regexp to avoid problems with paths like 'lib/po/foo.po'. 2008-11-17 Simon Josefsson * m4/warnings.m4: Improve code. Reported by Ralf Wildenhues and Paolo Bonzini . 2008-11-17 Simon Josefsson * m4/warnings.m4: Use CPPFLAGS to really check whether the parameter works. 2008-11-17 Simon Josefsson * m4/warnings.m4: Add gl_WARN_COMPLEMENT and gl_WARN_SUPPORTED. 2008-11-17 Bruce Korb * modules/parse-duration-tests: New file. * tests/test-parse-duration.sh: New file. * tests/test-parse-duration.c: New file. New module 'parse-duration'. * lib/parse-duration.h: New file. * lib/parse-duration.c: New file. * modules/parse-duration: New file. 2008-11-17 Bruno Haible * tests/test-select-out.sh: Comment out the first pipe test. Reported by Simon Josefsson. 2008-11-17 Bruno Haible * modules/getaddrinfo (Depends-on): Add servent, hostent. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Use gl_SERVENT and gl_HOSTENT. 2008-11-17 Bruno Haible * m4/sockets.m4 (gl_SOCKETS): After trying -lsocket, try also -lnetwork and -lnet. Needed for Haiku and BeOS. 2008-11-16 Bruno Haible * m4/getaddrinfo.m4 (gl_GETADDRINFO): Fix indentation. 2008-11-16 Bruno Haible Avoid test failure on Haiku. * tests/test-fsync.c: Include . (main): Don't require that fsync (0) fails. 2008-11-15 Bruno Haible New module 'hostent'. * modules/hostent: New file. * m4/hostent.m4: New file, based on code in m4/getaddrinfo.m4. 2008-11-15 Bruno Haible New module 'servent'. * modules/servent: New file. * m4/servent.m4: New file, based on code in m4/getaddrinfo.m4. 2008-11-15 Bruno Haible Avoid generating same test program with two different rules. * modules/frexp-nolibm-tests (Makefile.am): Rename test program from test-frexp to test-frexp-nolibm. * modules/frexpl-nolibm-tests (Makefile.am): Rename test program from test-frexpl to test-frexpl-nolibm. 2008-11-15 Bruno Haible * modules/frexpl-tests (Makefile.am): Link test-frexpl with $(FREXPL_LIBM). 2008-11-15 Bruno Haible * lib/netdb.in.h: Activate the definitions also when the system's has 'struct addrinfo'. * m4/netdb_h.m4 (gl_HEADER_NETDB): Replace netdb.h also when it lacks EAI_OVERFLOW or AI_NUMERICSERV. * doc/posix-headers/netdb.texi: Document the problem. 2008-11-15 Bruno Haible * tests/test-sched.c: Test also the existence of the SCHED_* macros. Make the 'sched' module work on platforms where exists but is incomplete (such as Haiku). * lib/sched.in.h; Include the system's if it exists. (SCHED_FIFO, SCHED_RR, SCHED_OTHER): New macros. * m4/sched_h.m4 (gl_SCHED_H): Test whether exists and also defines SCHED_FIFO, SCHED_RR, SCHED_OTHER. Set HAVE_SCHED_H, HAVE_STRUCT_SCHED_PARAM. * modules/sched (Depends-on): Add include_next. (Makefile.am): Substitute HAVE_SCHED_H, INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, NEXT_SCHED_H, HAVE_STRUCT_SCHED_PARAM. * doc/posix-headers/sched.texi: Document the issue. 2008-11-13 Jim Meyering test-argp-2: avoid test failure when PACKAGE_BUGREPORT is defined * tests/test-argp-2.sh: When PACKAGE_BUGREPORT was defined, this test would fail due to the difference in the Report bugs to ... line. The expected address is empty, "<>", while the actual would contain e.g., "". Filter out any address. 2008-11-12 Bruno Haible lstat: don't compile lstat.c on systems lacking lstat * m4/lstat.m4 (gl_FUNC_LSTAT): Don't compile lstat.c on systems which don't have lstat; this is handled by lib/sys_stat.in.h already. Reported by Daniel P. Berrange via Jim Meyering. 2008-11-12 Jim Meyering * lib/unicodeio.c (unicode_to_mb): Correct spelling of u8_uctomb. 2008-11-12 Simon Josefsson * modules/warnings (configure.ac): Do AC_SUBST([WARN_CFLAGS]) here instead. 2008-11-12 Bruno Haible * lib/unicodeio.c: Include unistr.h. (utf8_wctomb): Remove function. (unicode_to_mb): Use utf8_uctomb instead of utf8_wctomb. 2008-11-12 Simon Josefsson * m4/warnings.m4 (gl_WARN_INIT): Remove, suggested by Ralf Wildenhues and Bruno Haible . * modules/warnings (configure.ac): Don't call gl_WARN_INIT. 2008-11-12 Simon Josefsson * doc/warnings.texi: New file, from Bruno Haible . * doc/gnulib.texi: Add section for warnings. 2008-11-11 Bruno Haible * lib/sockets.h: Add a comment. 2008-11-11 Karl Berry * config/srclist.txt (fdl.texi): add, syncing from gnustandards. 2008-11-11 Eric Blake fdl.texi: avoid git symlinks * doc/fdl.texi: Copy, rather than link, fdl-1.3.texi. 2008-11-11 Paolo Bonzini * m4/warnings.m4 (gl_WARN_ADD): Don't AC_SUBST the empty string. 2008-11-11 Paolo Bonzini * m4/warnings.m4 (gl_WARN_INIT): Substitute WARN_CFLAGS. (gl_WARN_ADD): Substitute $2 if literal. 2008-11-11 Paolo Bonzini * m4/warning.m4: Remove. 2008-11-11 Paolo Bonzini * m4/warnings.m4: Almost complete rewrite. :-) 2008-11-10 Simon Josefsson * modules/warnings: New module. * m4/warnings.m4: New file. * MODULES.html.sh: Mention warnings module. With review improvements from Paolo Bonzini and Ralf Wildenhues . 2008-11-10 Eric Blake fdl.texi: make a symlink to the latest version * doc/standards.texi: Revert today's earlier change. * doc/fdl-1.2.texi: Rename from old fdl.texi... * doc/fdl.texi: ...and replace this with a symlink to the newer fdl-1.3.texi. 2008-11-10 Bruno Haible * tests/test-select-fd.c (main): Accept the result file name as fourth argument. * tests/test-select-in.sh: Pass t-select-in.tmp as fourth argument. * tests/test-select-out.sh: Pass t-select-out.tmp as fourth argument. 2008-11-10 Bruno Haible * lib/netdb.in.h: Use HAVE_STRUCT_ADDRINFO, HAVE_DECL_GETADDRINFO, HAVE_DECL_FREEADDRINFO, HAVE_DECL_GAI_STRERROR, HAVE_DECL_GETNAMEINFO as autoconf-substituted macros. * m4/netdb_h.m4 (gl_NETDB_H_DEFAULTS): Initialize these variables to 1. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Require gl_NETDB_H_DEFAULTS. Set these variables. * modules/netdb (Makefile.am): Substitute these variables. 2008-11-10 Eric Blake standards.texi: include correct file for FDL 1.3 * doc/standards.texi (GNU Free Documentation License): Change include file to pull in FDL 1.3, not 1.2. fdl.texi: revert accidental change to license * doc/fdl.texi: This is FDL 1.2, not 1.3. 2008-11-10 Bruno Haible * m4/printf.m4 (gl_PRINTF_ENOMEM): Guess yes on Haiku. Use the cross-compiling guesses also when the native compile gives no result. 2008-11-10 Bruno Haible * lib/spawni.c (__spawni): Force variable into the stack. 2008-11-10 Bruno Haible Add support for Haiku. * lib/fbufmode.c (fbufmode): Test a symbol that is not only defined on glibc and BeOS, but also on Haiku. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. Reported by Ingo Weinhold . 2008-11-10 Ingo Weinhold * lib/config.charset: Treat Haiku like BeOS. 2008-11-10 Ingo Weinhold * lib/binary-io.h (O_BINARY, O_TEXT): Treat Haiku like BeOS. * lib/fcntl.in.h (O_BINARY, O_TEXT): Likewise. 2008-11-08 Bruno Haible * m4/sys_ioctl_h.m4 (gl_SYS_IOCTL_H): Avoid using AC_CHECK_DECL inside AC_CACHE_CHECK. 2008-11-08 Bruno Haible * modules/select-tests (configure.ac): Check for unistd.h, sys/wait.h. 2008-11-08 Bruno Haible * tests/test-select-fd.c: New file. * tests/test-select-in.sh: New file. * tests/test-select-out.sh: New file. * tests/test-select-stdin.c: New file. * modules/select-tests (Files): Add the new files. (Depends-on): Add gettimeofday. (Makefile.am): Add test-select-in.sh, test-select-out.sh to TESTS. Set TESTS_ENVIRONMENT. Add test-select-fd, test-select-stdin to check_PROGRAMS. Define test_select_fd_LDADD, test_select_stdin_LDADD. 2008-11-06 Alexander V. Lukyanov Bruno Haible * lib/sys_stat.in.h: Enclose function definitions in extern "C". 2008-10-12 Giuseppe Scrivano * build-aux/pmccabe2html: Added support for C++ source files. 2008-11-05 Ben Pfaff Fix lib/close.c build on Windows. * modules/close (Files): Add lib/w32sock.h. 2008-11-05 Joel E. Denny Accept Bison's NEWS format. * build-aux/announce-gen (print_news_deltas): Tweak $re_prefix. 2008-11-04 Bruno Haible * modules/random_r (Maintainer): Add glibc. 2008-11-04 Simon Josefsson * doc/alloca-opt.texi: Change license to GFDLv1.3+, as suggested by karl@freefriends.org (Karl Berry). * doc/alloca.texi: Likewise. * doc/c-ctype.texi: Likewise. * doc/c-strcase.texi: Likewise. * doc/c-strcaseeq.texi: Likewise. * doc/c-strcasestr.texi: Likewise. * doc/c-strstr.texi: Likewise. * doc/c-strtod.texi: Likewise. * doc/c-strtold.texi: Likewise. * doc/ctime.texi: Likewise. * doc/error.texi: Likewise. * doc/fdl.texi: Likewise. * doc/gcd.texi: Likewise. * doc/getdate.texi: Likewise. * doc/gnulib-intro.texi: Likewise. * doc/gnulib-tool.texi: Likewise. * doc/gnulib.texi: Likewise. * doc/inet_ntoa.texi: Likewise. * doc/maintain.texi: Likewise. * doc/make-stds.texi: Likewise. * doc/quote.texi: Likewise. * doc/regexprops-generic.texi: Likewise. * doc/standards.texi: Likewise. * doc/verify.texi: Likewise. * doc/visibility.texi: Likewise. * doc/gnulib.texi (GNU Free Documentation License): Include fdl-1.3.texi instead of fdl.texi. 2008-11-04 Simon Josefsson * doc/fdl-1.3.texi: New file, from . * modules/fdl-1.3: Add. * MODULES.html.sh: Add fdl-1.3. 2008-11-03 Bruno Haible Make determination of absolute name of header file work with AIX xlc. * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Require AC_CANONICAL_HOST. On AIX, use "$CPP -C" rather than "$CPP" for preprocessing. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Likewise. Reported by Gary V. Vaughan . 2008-11-03 Simon Josefsson * top/maint.mk (COVERAGE_CCOPTS): Use --coverage instead of -fprofile-arcs -ftest-coverage. Suggested by Ludovic Courtès . 2008-11-02 Bruno Haible Mark 'strpbrk' obsolete. * modules/strpbrk (Status, Notice): New sections. * modules/strtok_r (Depends-on): Add strpbrk. 2008-11-02 Bruno Haible Mark 'strdup' obsolete. * modules/strdup (Status, Notice): New sections. * modules/findprog (Depends-on): Add strdup. * modules/getaddrinfo (Depends-on): Likewise. * modules/localename (Depends-on): Likewise. * modules/relocatable-lib (Depends-on): Likewise. * modules/relocatable-lib-lgpl (Depends-on): Likewise. * modules/relocatable-prog (Depends-on): Likewise. * modules/trim (Depends-on): Likewise. * modules/unictype/gen-ctype (Depends-on): Likewise. * modules/unilbrk/gen-lbrk (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'strcspn' obsolete. * modules/strcspn (Status, Notice): New sections. 2008-11-02 Bruno Haible Mark 'rmdir' obsolete. * modules/rmdir (Status, Notice): New sections. * modules/clean-temp (Depends-on): Add rmdir. * modules/openat (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'raise' obsolete. * modules/raise (Status, Notice): New sections. (Include): Specify . * modules/stdio (Depends-on): Add raise. * modules/write (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'memset' obsolete. * modules/memset (Status, Notice): New sections. 2008-11-02 Bruno Haible Mark 'memmove' obsolete. * modules/memmove (Status, Notice): New sections. * modules/argp (Depends-on): Add memmove. * modules/argz (Depends-on): Likewise. * modules/canonicalize (Depends-on): Likewise. * modules/canonicalize-lgpl (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/getcwd (Depends-on): Likewise. * modules/human (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. * modules/striconveh (Depends-on): Likewise. * modules/trim (Depends-on): Likewise. * modules/unistr/u8-move (Depends-on): Likewise. * modules/unistr/u16-move (Depends-on): Likewise. * modules/unistr/u32-move (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'memcpy' obsolete. * modules/memcpy (Status, Notice): New sections. 2008-11-02 Bruno Haible Mark 'memcmp' obsolete. * modules/memcmp (Status, Notice): New sections. * modules/argmatch (Depends-on): Add memchr. * modules/backupfile (Depends-on): Likewise. * modules/c-strcasestr (Depends-on): Likewise. * modules/crypto/des (Depends-on): Likewise. * modules/csharpcomp (Depends-on): Likewise. * modules/fnmatch (Depends-on): Likewise. * modules/git-merge-changelog (Depends-on): Likewise. * modules/isnand (Depends-on): Likewise. * modules/isnand-nolibm (Depends-on): Likewise. * modules/isnanf (Depends-on): Likewise. * modules/isnanf-nolibm (Depends-on): Likewise. * modules/isnanl (Depends-on): Likewise. * modules/isnanl-nolibm (Depends-on): Likewise. * modules/mbchar (Depends-on): Likewise. * modules/memcoll (Depends-on): Likewise. * modules/quotearg (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. * modules/relocatable-prog (Depends-on): Likewise. * modules/same (Depends-on): Likewise. * modules/signbit (Depends-on): Likewise. * modules/strcasestr-simple (Depends-on): Likewise. * modules/unictype/gen-ctype (Depends-on): Likewise. * modules/unilbrk/gen-lbrk (Depends-on): Likewise. * modules/uniname/uniname (Depends-on): Likewise. * modules/unistr/u8-cmp (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'memchr' obsolete. * modules/memchr (Status, Notice): New sections. * modules/argp (Depends-on): Add memchr. * modules/base64 (Depends-on): Likewise. * modules/c-strcasestr (Depends-on): Likewise. * modules/chdir-long (Depends-on): Likewise. * modules/fnmatch (Depends-on): Likewise. * modules/getsubopt (Depends-on): Likewise. * modules/git-merge-changelog (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/strcasestr-simple (Depends-on): Likewise. * modules/strnlen (Depends-on): Likewise. 2008-11-02 Bruno Haible Mark 'atexit' obsolete. * modules/atexit (Status, Notice): New sections. * modules/chdir-long (Depends-on): Add atexit. * modules/wait-process (Depends-on): Likewise. 2008-11-02 Bruno Haible * gnulib-tool: New option --with-obsolete. (func_usage): Document it. (func_modules_transitive_closure): Drop obsolete dependencies if incobsolete is not true. (func_import): Read and save the incobsolete variable to the cache. 2008-11-02 Bruno Haible * modules/TEMPLATE-EXTENDED: New field 'Status'. * gnulib-tool: New option --extract-status. (func_usage): Document it. (sed_extract_prog): Recognize it. (func_get_status): New function. 2008-10-30 Simon Josefsson * modules/sockets (License): Change from LGPL to LGPLv2+. 2008-10-28 Simon Josefsson * top/maint.mk: Add coverage rules, inspired by scripts in gnupdf. 2008-10-28 Simon Josefsson * MODULES.html.sh (Support for systems lacking POSIX:2001): Mention times and sys_times. * modules/sys_times, modules/sys_times-tests: New modules. * modules/times, modules/times-tests: Likewise * m4/sys_times_h.m4: New file. * lib/sys_times.in.h: Likewise * lib/times.c: Likewise. * tests/test-sys_times.c: Likewise. * tests/test-times.c: Likewise. * doc/posix-headers/sys_times.texi: Update. * doc/posix-functions/times.texi: Update. 2008-10-28 Jim Meyering * modules/tempname (Depends-on): Add lstat. * modules/lstat (License): Relicense: LGPL -> LGPLv2+. 2008-10-28 Simon Josefsson * gnulib-tool (func_emit_tests_Makefile_am): Revert last commit. * modules/argp-tests (test_argp_LDADD): Set EXEEXT here instead, using idiom used elsewhere in gnulib. 2008-10-27 Jim Meyering * modules/gethostname (License): Relicense: LGPL -> LGPLv2+. 2008-10-27 Simon Josefsson * gnulib-tool (func_emit_tests_Makefile_am): Set EXEEXT in TESTS_ENVIRONMENT, for shell scripts that needs to call built programs. * tests/test-argp-2.sh: Use $EXEEXT when needed. 2008-10-27 Simon Josefsson * lib/sys_stat.in.h (lstat): Fix declaration for mingw. 2008-10-27 Bruno Haible * tests/test-lstat.c: Include . 2008-10-27 Simon Josefsson * modules/lstat-tests: New module. * tests/test-lstat.c: New file. 2008-10-26 Jim Meyering * lib/mkdir.c (rpl_mkdir) [_WIN32...]: Mark mode as an unused parameter. 2008-10-26 Simon Josefsson Bruno Haible Fix a clash between the type DATADIR on Windows and the macro DATADIR. * modules/configmake (Include): Add a note that the include must come after all system headers. * lib/javaversion.c: Include configmake.h after all other includes. 2008-10-26 Bruno Haible * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Set default of HAVE_STRUCT_RANDOM_DATA to 1. (gl_STDLIB_H): Simplify. 2008-10-26 Simon Josefsson * m4/stdlib_h.m4: Check for struct random_data. Initialize and substitute HAVE_STRUCT_RANDOM_DATA. * lib/stdlib.in.h [!HAVE_STRUCT_RANDOM_DATA]: Provide struct random_data. * modules/stdlib (Makefile.am): Substitute HAVE_STRUCT_RANDOM_DATA. 2008-10-26 Simon Josefsson * doc/gnulib.texi (@copying): Use GFDLv1.2+. * doc/gnulib-intro.texi (Copyright): Likewise. 2008-10-26 Simon Josefsson * doc/gnulib.texi (Header files): C++ fixes, based on Bruno's findings. 2008-10-25 Ben Pfaff Bruno Haible * lib/unistd.in.h: Include . (socket, connect,accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt, shutdown, select): Provide dummy declarations. (gethostname): Override. * lib/sys_socket.in.h (gethostname): Provide dummy declaration. * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Invoke gl_PREREQ_SYS_H_WINSOCK2. * modules/gethostname (Files): Add m4/sys_socket_h.m4. * doc/posix-functions/gethostname.texi: More details. 2008-10-25 Bruno Haible * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_WINSOCK2): Require gl_UNISTD_H_DEFAULTS, gl_SYS_IOCTL_H_DEFAULTS only if they exist. * modules/sys_socket (Files): Remove m4/unistd_h.m4, m4/sys_ioctl_h.m4. * lib/sys_socket.in.h (HAVE__GL_CLOSE_FD_MAYBE_SOCKET); Move macro from here ... * lib/unistd.in.h (HAVE__GL_CLOSE_FD_MAYBE_SOCKET); ... to here. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_H_DEFAULTS): Remove invocation of gl_UNISTD_H_DEFAULTS. 2008-10-25 Eric Blake signbit: avoid spurious compiler failure * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Move non-constant declarations inside function. 2008-10-24 Simon Josefsson Bruno Haible * lib/stdlib.in.h (@GNULIB_RANDOM_R@): Include stdint.h. * modules/random_r (Depends-on): Add stdint. 2008-10-24 Bruno Haible * modules/intprops (License): Change to LGPLv2+, with approval by Paul Eggert. * modules/strerror (License): Likewise. 2008-10-24 Jim Meyering sys_socket: fix typo that inhibited expansion of @GNULIB_SEND@ * modules/sys_socket (Depends-on) [Depends-on]: Fix typo. 2008-10-24 Eric Blake getgroups: fix compilation when getgroups is available * lib/getgroups.c (includes): Include for getgroups, but with override of getgroups disabled. 2008-10-24 Simon Josefsson * doc/gnulib.texi (Header files): Add note about C++ problems. Explained by Bruno Haible . 2008-10-23 Bruno Haible Define a dummy SA_NODEFER macro on Interix. * lib/signal.in.h (SA_NODEFER): Define fallback. Reported by Aleksey Cheusov via Thomas Klausner and Eric Blake. 2008-10-23 Bruno Haible * modules/freadahead (License): Change to LGPLv2+. Suggested by Simon Josefsson. 2008-10-23 Jim Meyering random_r: new module * modules/random_r: New file. * m4/random_r.m4: New file. * lib/random_r.c: New file, from glibc. * modules/random_r-tests: New file. * tests/test-random_r.c: New file. * lib/stdlib.in.h (srandom_r, initstate_r, setstate_r, random_r): Declare. (RAND_MAX): Define. * m4/stdlib_h.m4: Define and AC_SUBST GNULIB_RANDOM_R and HAVE_RANDOM_R. * modules/stdlib: Substitute them, too. * MODULES.html.sh (Extra functions based on POSIX:2001) [Misc]: Add it. * doc/glibc-functions/initstate_r.texi: Mention the new module. * doc/glibc-functions/random_r.texi: Likewise. * doc/glibc-functions/setstate_r.texi: Likewise. * doc/glibc-functions/srandom_r.texi: Likewise. * config/srclist.txt: Mention it. 2008-10-23 David Lutterkort * modules/selinux-h: Search for LIB_SELINUX and mark it as a link requirement 2008-10-23 Jim Meyering selinux-h: mark parameters of stub functions as intentionally unused * lib/se-selinux.in.h: Mark parameters as _UNUSED_PARAMETER_. * lib/se-context.in.h: Likewise. 2008-10-22 Simon Josefsson * lib/sys_socket.in.h (FD_ISSET): Fix warnings under mingw. 2008-10-22 Simon Josefsson * m4/getgroups.m4: Avoid invoking test with wrong parameters. 2008-10-22 Eric Blake glthread/thread: avoid compiler warning * lib/glthread/thread.c (gl_thread_exit_func) [USE_WIN32_THREADS]: Add unreachable abort to silence compiler. 2008-10-22 Eric Blake netdb: also supply struct addrinfo for cygwin 1.5.x * m4/netdb_h.m4 (gl_HEADER_NETDB): Check for incomplete header on older cygwin. * lib/netdb.in.h [!HAVE_STRUCT_ADDRINFO]: Also supply contents for cygwin. * doc/posix-headers/netdb.texi (netdb.h): Document this. 2008-10-22 Bruno Haible * users.txt: Update entry about pspp. 2008-10-21 Bruno Haible Simplification. * lib/sys_socket.in.h (_gl_close_fd_maybe_socket): Remove declaration. * lib/close.c (_gl_close_fd_maybe_socket): Make static. Simplification. * lib/ioctl.c (ioctl): Don't undefine. * lib/socket.c (socket): Don't undefine. Remove unused module indicator macros. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR): Don't define GNULIB_$1 as a C macro. * doc/posix-functions/close.texi: Undo last change. * doc/posix-functions/ioctl.texi: Merge the two paragraphs about Windows platforms. 2008-10-21 Bruno Haible Add gethostname() declaration to . * lib/unistd.in.h (gethostname): New declaration. * lib/gethostname.c: Include . * m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Require gl_UNISTD_H_DEFAULTS. Set HAVE_GETHOSTNAME. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETHOSTNAME and HAVE_GETHOSTNAME. * modules/gethostname (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Specify . * modules/unistd (Makefile.am): Substitute GNULIB_GETHOSTNAME and HAVE_GETHOSTNAME. * tests/test-gethostname.c: Include first. 2008-10-21 Bruno Haible * modules/poll-tests (Depends-on): Add sys_ioctl, ioctl. * modules/select-tests (Depends-on): Likewise. Reported by Simon Josefsson. 2008-10-21 Simon Josefsson * lib/close.c: Add _gl_close_fd_maybe_socket from winsock.c. * lib/accept.c: New file, based on winsock.c. * lib/bind.c: New file, based on winsock.c. * lib/connect.c: New file, based on winsock.c. * lib/getpeername.c: New file, based on winsock.c. * lib/getsockname.c: New file, based on winsock.c. * lib/getsockopt.c: New file, based on winsock.c. * lib/ioctl.c: New file, based on winsock.c. * lib/listen.c: New file, based on winsock.c. * lib/recv.c: New file, based on winsock.c. * lib/recvfrom.c: New file, based on winsock.c. * lib/send.c: New file, based on winsock.c. * lib/sendto.c: New file, based on winsock.c. * lib/setsockopt.c: New file, based on winsock.c. * lib/shutdown.c: New file, based on winsock.c. * lib/socket.c: New file, based on winsock.c. * lib/w32sock.h: New file, based on winsock.c. * lib/winsock.c: Remove file. * modules/accept: Likewise. * modules/bind: Likewise. * modules/connect: Likewise. * modules/getpeername: Likewise. * modules/getsockname: Likewise. * modules/getsockopt: Likewise. * modules/ioctl: Likewise. * modules/listen: Likewise. * modules/recv: Likewise. * modules/recvfrom: Likewise. * modules/send: Likewise. * modules/sendto: Likewise. * modules/setsockopt: Likewise. * modules/shutdown: Likewise. * modules/socket: Use socket.c instead of winsock.c. * modules/sys_socket: Remove (unneeded?) dependency on winsock.c. * doc/posix-functions/accept.texi: Doc fix. * doc/posix-functions/bind.texi: Doc fix. * doc/posix-functions/close.texi: Doc fix. * doc/posix-functions/connect.texi: Doc fix. * doc/posix-functions/getpeername.texi: Doc fix. * doc/posix-functions/getsockname.texi: Doc fix. * doc/posix-functions/getsockopt.texi: Doc fix. * doc/posix-functions/ioctl.texi: Doc fix. * doc/posix-functions/listen.texi: Doc fix. * doc/posix-functions/recv.texi: Doc fix. * doc/posix-functions/recvfrom.texi: Doc fix. * doc/posix-functions/send.texi: Doc fix. * doc/posix-functions/sendto.texi: Doc fix. * doc/posix-functions/setsockopt.texi: Doc fix. * doc/posix-functions/shutdown.texi: Doc fix. * doc/posix-functions/socket.texi: Doc fix. 2008-10-20 Bruno Haible Take into account the role of SIGABRT_COMPAT on Windows 2008. * lib/sigprocmask.c (SIGABRT_COMPAT, SIGABRT_COMPAT_MASK): New macros. (sigismember, sigaddset, sigdelset, sigfillset, rpl_signal): Handle it as an alias for SIGABRT. * lib/sigaction.c (SIGABRT_COMPAT): New macro. (sigaction): Map it to SIGABRT. Reported by Ramiro Polla via Eric Blake. 2008-10-20 Bruno Haible * lib/fts.c: Don't include lstat.h. * lib/openat.c: Include instead of lstat.h. Move the lstat() declaration to . * lib/lstat.h: Remove file. * lib/sys_stat.in.h: Add special invocation convention. (lstat): New declaration. * lib/lstat.c (orig_lstat): New function. (rpl_lstat): Use orig_lstat instead of lstat. * m4/lstat.m4 (gl_FUNC_LSTAT): Require gl_SYS_STAT_H_DEFAULTS and AC_C_INLINE. Set REPLACE_LSTAT. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_LSTAT and REPLACE_LSTAT. * modules/lstat (Files): Remove lib/lstat.h. (configure.ac): Invoke gl_SYS_STAT_MODULE_INDICATOR. (Include): Specify instead of lstat.h. * modules/sys_stat (Makefile.am): Substitute GNULIB_LSTAT and REPLACE_LSTAT. * NEWS: Mention the change. 2008-10-20 Bruno Haible * modules/posix_spawn-tests: New file. * tests/test-posix_spawn3.c: New file. 2008-10-20 Bruno Haible * modules/posix_spawnp-tests (Depends-on): Add sys_wait. * tests/test-posix_spawn1.c (WTERMSIG, WCOREDUMP, WEXITSTATUS, WIFSIGNALED, WIFEXITED, WIFSTOPPED): Remove fallback definitions. * tests/test-posix_spawn2.c (WTERMSIG, WCOREDUMP, WEXITSTATUS, WIFSIGNALED, WIFEXITED, WIFSTOPPED): Likewise. 2008-10-20 Bruno Haible * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Test against another bug of posix_spawn on AIX 5.3. 2008-10-20 Bruno Haible * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Make the check on MacOS X. 2008-10-20 Bruno Haible * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Use AC_LANG_SOURCE instead of AC_LANG_PROGRAM. 2008-10-20 Simon Josefsson * lib/netdb.in.h: Don't define GNU specific constants until they are supported or needed. Reported by Bruno Haible . 2008-10-20 Simon Josefsson * lib/canon-host.c: Include netdb.h instead of getaddrinfo.h. 2008-10-20 Simon Josefsson * lib/getaddrinfo.h: Remove file. * modules/getaddrinfo: Reflect move from getaddrinfo.h to netdb.h. * m4/getaddrinfo.m4: Call gl_HEADER_NETDB. Don't check for netdb.h. * lib/netdb.in.h: Add declarations from getaddrinfo.h. * m4/netdb_h.m4: Initialize GNULIB_GETADDRINFO to 0. * modules/netdb: Substitute GNULIB_GETADDRINFO. * lib/getaddrinfo.c: Include netdb.h instead of getaddrinfo.h. * tests/test-getaddrinfo.c: Likewise. * lib/gai_strerror.c: Likewise. Also drop HAVE_NETDB_H check. * NEWS: Mention change. 2008-10-19 Bruno Haible * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): Remove unneeded code. 2008-10-19 Bruno Haible * lib/wait-process.c: Include simply . (waitpid, WTERMSIG, WCOREDUMP, WEXITSTATUS, WIFSIGNALED, WIFEXITED, WIFSTOPPED): Remove fallback definitions. * modules/wait-process (Depends-on): Add sys_wait. New module 'sys_wait'. * modules/sys_wait: New file. * lib/sys_wait.in.h: New file, partially copied from lib/wait-process.c. * m4/sys_wait_h.m4: New file. * doc/posix-headers/sys_wait.texi: Mention the new module. 2008-10-19 Bruno Haible * m4/wait-process.m4 (gl_WAIT_PROCESS): Remove test for unistd.h. 2008-10-19 Bruno Haible Assume that waitpid() fills an 'int' status, not a 'union wait'. * lib/wait-process.c (WAIT_T): Remove type. (WTERMSIG, WCOREDUMP, WEXITSTATUS): Define fallbacks using bit masks. (wait_subprocess): Update. 2008-10-19 Bruno Haible New module 'atoll'. * modules/atoll: New file. * lib/stdlib.in.h (atoll): New declaration. * lib/atoll.c: New file, from glibc with modifications. * m4/atoll.m4: New file. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_ATOLL, HAVE_ATOLL. * modules/stdlib (Makefile.am): Substitute GNULIB_ATOLL, HAVE_ATOLL. * doc/posix-functions/atoll.texi: Mention the new module. 2008-10-19 Bruno Haible Add strtoull() declaration to . * lib/stdlib.in.h (strtoull): New declaration. * m4/strtoull.m4 (gl_FUNC_STRTOLL): Require gl_STDLIB_H_DEFAULTS. Set HAVE_STRTOULL. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOULL, HAVE_STRTOULL. * modules/strtoull (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOULL, HAVE_STRTOULL. 2008-10-19 Bruno Haible Add strtoll() declaration to . * lib/stdlib.in.h (strtoll): New declaration. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Require gl_STDLIB_H_DEFAULTS. Set HAVE_STRTOLL. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_STRTOLL, HAVE_STRTOLL. * modules/strtoll (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. * modules/stdlib (Makefile.am): Substitute GNULIB_STRTOLL, HAVE_STRTOLL. 2008-10-19 Bruno Haible * modules/bcopy (Depends-on): Add strings. (Include): Specify . 2008-10-19 Bruno Haible * doc/posix-functions/atexit.texi: Update doc regarding mingw. 2008-10-19 Bruno Haible * lib/openat-die.c (openat_save_fail, openat_restore_fail): Rename the parameter from 'errno' to 'errnum'. Fixes a compilation error on mingw. 2008-10-19 Bruno Haible * lib/atanl.c: Don't include isnanl.h. * lib/cosl.c: Likewise. * lib/ldexpl.c: Likewise. * lib/logl.c: Likewise. * lib/sinl.c: Likewise. * lib/sqrtl.c: Likewise. * lib/tanl.c: Likewise. Move the isnanf(), isnand(), isnanl() declarations to . * lib/isnanf.h: Remove file. * lib/isnand.h: Remove file. * lib/isnanl.h: Remove file. * lib/math.in.h: Include the contents of lib/isnanf.h, lib/isnand.h, lib/isnanl.h. Use HAVE_ISNANF, HAVE_ISNAND, HAVE_ISNANL as substituted macros. * m4/isnanf.m4 (gl_FUNC_ISNANF): Require gl_MATH_H_DEFAULTS. Set HAVE_ISNANF, don't define it as a C macro. * m4/isnand.m4 (gl_FUNC_ISNAND): Require gl_MATH_H_DEFAULTS. Set HAVE_ISNAND, don't define it as a C macro. * m4/isnanl.m4 (gl_FUNC_ISNANL): Require gl_MATH_H_DEFAULTS. Set HAVE_ISNANL, don't define it as a C macro. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_ISNAN[FDL] and HAVE_ISNAN[FDL]. * modules/isnanf (Files): Remove lib/isnanf.h. (Depends-on): Add math. (configure.ac): Invoke gl_MATH_MODULE_INDICATOR. (Include): Specify instead of isnanf.h. * modules/isnand (Files): Remove lib/isnand.h. (Depends-on): Add math. (configure.ac): Invoke gl_MATH_MODULE_INDICATOR. (Include): Specify instead of isnand.h. * modules/isnanl (Files): Remove lib/isnanl.h. (Depends-on): Add math. (configure.ac): Invoke gl_MATH_MODULE_INDICATOR. (Include): Specify instead of isnanl.h. * modules/math (Makefile.am): Substitute GNULIB_ISNAN[FDL] and HAVE_ISNAN[FDL]. * tests/test-isnanf.c: Include instead of isnanf.h. * tests/test-isnand.c: Include instead of isnand.h. * tests/test-isnanl.c: Include instead of isnanl.h. * NEWS: Mention the change. 2008-10-18 Bruno Haible Add getusershell(), setusershell(), endusershell() declarations to . * lib/unistd.in.h (getusershell, setusershell, endusershell): New declarations. * lib/getusershell.c: Include unistd.h. * m4/getusershell.m4 (gl_FUNC_GETUSERSHELL): Require gl_UNISTD_H_DEFAULTS and AC_USE_SYSTEM_EXTENSIONS. Set HAVE_GETUSERSHELL. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETUSERSHELL and HAVE_GETUSERSHELL. * modules/getusershell (Depends-on): Add unistd, extensions. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Specify . * modules/unistd (Makefile.am): Substitute GNULIB_GETUSERSHELL and HAVE_GETUSERSHELL. 2008-10-18 Bruno Haible Add a getloadavg() declaration to . * lib/stdlib.in.h; Include when needed for the getloadavg declaration. (getloadavg): New declaration. * lib/getloadavg.c: Include first. * m4/getloadavg.m4 (gl_GETLOADAVG): Require gl_STDLIB_H_DEFAULTS and AC_USE_SYSTEM_EXTENSIONS. Test whether sys/loadavg.h exists. Set HAVE_SYS_LOADAVG_H and HAVE_DECL_GETLOADAVG. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_GETLOADAVG, HAVE_SYS_LOADAVG_H, HAVE_DECL_GETLOADAVG. * modules/getloadavg (Depends-on): Add stdlib, extensions. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Include): Specify . * modules/stdlib (Makefile.am): Substitute GNULIB_GETLOADAVG, HAVE_SYS_LOADAVG_H, HAVE_DECL_GETLOADAVG. 2008-10-18 Bruno Haible * lib/dirchownmod.c: Don't include lchmod.h. Move the lchmod() declaration to . * lib/lchmod.h: Remove file. * lib/sys_stat.in.h: Add placeholder for GL_LINK_WARNING. (lchmod): New declaration, moved here from lib/lchown.h. * m4/lchmod.m4 (gl_FUNC_LCHMOD): Require gl_SYS_STAT_H_DEFAULTS and AC_USE_SYSTEM_EXTENSIONS. Set HAVE_LCHMOD. * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Initialize GNULIB_LCHMOD and HAVE_LCHMOD. * modules/lchmod (Files): Remove lib/lchmod.h. (Depends-on): Add sys_stat, extensions. (configure.ac): Invoke gl_SYS_STAT_MODULE_INDICATOR. (Include): Specify instead of lchmod.h. * modules/sys_stat (Depends-on): Add link-warning. (Makefile.am): Substitute GNULIB_LCHMOD, HAVE_LCHMOD, and the definition of GL_LINK_WARNING. * NEWS: Mention the change. 2008-10-18 Bruno Haible * lib/fchdir.c: Don't include dirfd.h. * lib/fts.c: Likewise. * lib/getcwd.c: Likewise. * lib/glob.c: Likewise. Move the dirfd() declaration to . * lib/dirfd.h: Remove file. * lib/dirent.in.h: Add placeholder for GL_LINK_WARNING. (dirfd): New declaration. * lib/dirfd.c: Include instead of dirfd.h. * m4/dirfd.m4 (gl_FUNC_DIRFD): Require gl_DIRENT_H_DEFAULTS and AC_USE_SYSTEM_EXTENSIONS. Invoke gl_REPLACE_DIRENT_H. Set HAVE_DECL_DIRFD. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize GNULIB_DIRFD and HAVE_DECL_DIRFD. * modules/dirfd (Files): Remove lib/dirfd.h. (Depends-on): Add dirent, extensions. (configure.ac): Invoke gl_DIRENT_MODULE_INDICATOR. (Include): Specify instead of dirfd.h. * modules/dirent (Depends-on): Add link-warning. (Makefile.am): Substitute GNULIB_DIRFD, HAVE_DECL_DIRFD, and definition of GL_LINK_WARNING. * NEWS: Mention the change. 2008-10-18 Bruno Haible Move the euidaccess() declaration to . * lib/euidaccess.h: Remove file. * lib/unistd.in.h (euidaccess): New declaration. * lib/euidaccess.c: Don't include euidaccess.h. * m4/euidaccess.m4 (gl_FUNC_EUIDACCESS): Require gl_UNISTD_H_DEFAULTS. Don't check whether euidaccess is declared. Set HAVE_EUIDACCESS. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_EUIDACCESS and HAVE_EUIDACCESS. * modules/euidaccess (Files): Remove lib/euidaccess.h. (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Specify instead of euidaccess.h. * modules/unistd (Makefile.am): Substitute GNULIB_EUIDACCESS and HAVE_EUIDACCESS. * NEWS: Mention the change. 2008-10-18 Bruno Haible * lib/xgetdomainname.c: Include instead of getdomainname.h. Move the getdomainname() declaration to . * lib/getdomainname.h: Remove file. * lib/unistd.in.h (getdomainname): New declaration. * lib/getdomainname.c: Include instead of getdomainname.h. * m4/getdomainname.m4 (gl_FUNC_GETDOMAINNAME): Require gl_UNISTD_H_DEFAULTS and AC_USE_SYSTEM_EXTENSIONS. Set HAVE_GETDOMAINNAME. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETDOMAINNAME and HAVE_GETDOMAINNAME. * modules/getdomainname (Files): Remove lib/getdomainname.h. (Depends-on): Add unistd, extensions. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Includes): Specify instead of getdomainname.h. * modules/unistd (Makefile.am): Substitute GNULIB_GETDOMAINNAME and HAVE_GETDOMAINNAME. * NEWS: Mention the change. 2008-10-18 Bruno Haible * modules/dirent: New file. * m4/dirent_h.m4: New file. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Require gl_DIRENT_H_DEFAULTS. Invoke gl_REPLACE_DIRENT_H. Don't assign DIRENT_H directly. * modules/fchdir (Files): Remove lib/dirent.in.h. (Depends-on): Add dirent. (Makefile.am): Move rules to modules/dirent. * doc/posix-headers/dirent.texi: Mention the new module. 2008-10-18 Bruno Haible Avoid -Wunused-parameter warnings in public gnulib header files. * m4/gnulib-common.m4 (gl_COMMON_BODY): Define _UNUSED_PARAMETER_ as a macro. * lib/unistr.h (u32_mbtouc_unsafe, u32_mbtouc): Use it. 2008-10-18 Bruno Haible * doc/glibc-functions/dirfd.texi: Mention the module 'dirfd'. * doc/glibc-functions/error.texi: Mention the module 'error'. * doc/glibc-functions/euidaccess.texi: Mention the module 'euidaccess'. * doc/glibc-functions/getdomainname.texi: Mention the module 'getdomainname'. * doc/glibc-functions/getloadavg.texi: Mention the module 'getloadavg'. * doc/glibc-functions/getpagesize.texi: Mention the module 'getpagesize'. * doc/glibc-functions/getusershell.texi: Mention the module 'getusershell'. * doc/glibc-functions/isnanl.texi: Mention the module 'isnanl'. * doc/glibc-functions/lchmod.texi: Mention the module 'lchmod'. * doc/glibc-functions/mempcpy.texi: Mention the module 'mempcpy'. * doc/glibc-functions/memrchr.texi: Mention the module 'memrchr'. * doc/glibc-functions/mkdtemp.texi: Mention the module 'mkdtemp'. * doc/glibc-functions/rpmatch.texi: Mention the module 'rpmatch'. * doc/glibc-functions/stpcpy.texi: Mention the module 'stpcpy'. * doc/glibc-functions/stpncpy.texi: Mention the module 'stpncpy'. * doc/glibc-functions/strchrnul.texi: Mention the module 'strchrnul'. * doc/glibc-functions/strndup.texi: Mention the module 'strndup'. * doc/glibc-functions/strnlen.texi: Mention the module 'strnlen'. * doc/glibc-functions/strsep.texi: Mention the module 'strsep'. * doc/glibc-functions/timegm.texi: Mention the module 'timegm'. * doc/glibc-functions/vasprintf.texi: Mention the module 'vasprintf'. 2008-10-17 Bruno Haible * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): On platforms other than HP-UX and IRIX, use -0.0L. * tests/test-ceill.c (minus_zero): Likewise. * tests/test-floorl.c (minus_zero): Likewise. * tests/test-frexpl.c (minus_zero): Likewise. * tests/test-isnan.c (minus_zerol): Likewise. * tests/test-isnanl.h (minus_zero): Likewise. * tests/test-ldexpl.c (minus_zero): Likewise. * tests/test-roundl.c (minus_zero): Likewise. * tests/test-signbit.c (minus_zerol): Likewise. * tests/test-snprintf-posix.h (minus_zerol): Likewise. * tests/test-sprintf-posix.h (minus_zerol): Likewise. * tests/test-truncl.c (minus_zero): Likewise. * tests/test-vasnprintf-posix.c (minus_zerol): Likewise. * tests/test-vasprintf-posix.c (minus_zerol): Likewise. Reported by Markus Armbruster via Jim Meyering and by Nelson H. F. Beebe via Eric Blake. 2008-10-17 Bruno Haible Avoid gcc warnings because of #pragma GCC system_header on older gcc. * lib/arpa_inet.in.h: Encloses reference to PRAGMA_SYSTEM_HEADER so that it gets activated only for gcc >= 3.0. * lib/dirent.in.h: Likewise. * lib/errno.in.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/float.in.h: Likewise. * lib/iconv.in.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/netdb.in.h: Likewise. * lib/netinet_in.in.h: Likewise. * lib/search.in.h: Likewise. * lib/signal.in.h: Likewise. * lib/spawn.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_file.in.h: Likewise. * lib/sys_ioctl.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/time.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/wchar.in.h: Likewise. * lib/wctype.in.h: Likewise. Reported by Yoann Vandoorselaere . 2008-10-17 Jim Meyering ignore-value: don't depend on inline module * modules/ignore-value (Depends-on): Remove 'inline'. (configure.ac): Instead, add AC_REQUIRE([AC_C_INLINE]) here. Suggestion from Bruno Haible. 2008-10-17 Bruno Haible New implementation of condition variables for Win32. * lib/glthread/cond.h (struct gl_waitqueue_link): New type. (gl_linked_waitqueue_t): New type. (gl_cond_t): Use it. * lib/glthread/cond.c (struct gl_waitqueue_element): New type. (gl_waitqueue_init, gl_waitqueue_add, gl_waitqueue_remove, gl_waitqueue_notify_first, gl_waitqueue_notify_all): New functions. (glthread_cond_init_func, glthread_cond_wait_func, glthread_cond_timedwait_func, glthread_cond_signal_func, glthread_cond_broadcast_func, glthread_cond_destroy_func): Reimplemented on the basis of gl_linked_waitqueue_t. * lib/glthread/lock.h (gl_carray_waitqueue_t): Renamed from gl_waitqueue_t. (gl_rwlock_t): Update. * lib/glthread/lock.c (gl_waitqueue_t): Alias to gl_carray_waitqueue_t. 2008-10-17 Simon Josefsson * modules/recvfrom (Depends-on): Add dependency on getpeername. Reported by Yoann Vandoorselaere . 2008-10-17 Jim Meyering ignore-value: new module * modules/ignore-value: New file. * lib/ignore-value.h: New file. * MODULES.html.sh (Compiler warning management): New section, just for this module. More to come. 2008-10-16 Paul Eggert open-safer.c: avoid 'signed and unsigned in conditional...' warning * lib/open-safer.c (open_safer): Use an "if/else" statement in place of the ternary operator. Reported by Reuben Thomas . 2008-10-16 Jim Meyering openat-die.c: avoid 'no previous prototype' warning * lib/openat-die.c: Include "openat.h". Reported by Reuben Thomas . 2008-10-16 Simon Josefsson * m4/netdb_h.m4: Assume that if netdb.h exists, it works. * lib/netdb.in.h: Fix typo. Reported by Bruno Haible * lib/netdb.in.h: Include sys/socket.h for platforms without netdb.h, to get structures like hostent on MinGW. * modules/netdb (Depends-on): Add sys_socket. 2008-10-15 Simon Josefsson * modules/netdb, modules/netdb-tests: New file. * m4/netdb_h.m4: New file. * lib/netdb.in.h: Add, currently just an empty file pending definitions. * tests/test-netdb.c: New file. * doc/posix-headers/netdb.texi: Mention that we replace it if needed. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add netdb. 2008-10-15 Simon Josefsson * doc/gnulib.texi (Getaddrinfo and WINVER): Sync documentation with code. 2008-10-13 Bruno Haible * lib/glthread/cond.c (glthread_cond_wait_func, glthread_cond_timedwait_func): Add a comment. 2008-10-13 Yoann Vandoorselaere * tests/test-poll.c: Include , for ioctl(). * tests/test-select.c: Likewise, 2008-10-13 Bruno Haible * lib/glthread/cond.c (glthread_cond_wait_func, glthread_cond_timedwait_func): Fix variable name. Reported by Yoann Vandoorselaere . 2008-10-13 Paolo Bonzini fix getaddrinfo emulation for systems with struct sockaddr.sa_len * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Detect struct sockaddr.sa_len. * lib/getaddrinfo.c (getaddrinfo): Set it if appropriate. 2008-10-13 Simon Josefsson * build-aux/pmccabe2html: Add css and css_url parameters. 2008-10-12 Bruno Haible * tests/test-sameacls.c (main) [AIX]: Clear type argument before calling aclx_get. Reported by Rainer Tammer . 2008-10-12 Bruno Haible Use msvcrt aware primitives for creation/termination of Win32 threads. * lib/glthread/thread.c: Include . (glthread_create_func): Use _beginthreadex instead of CreateThread. (wrapper_func): Update signature. (gl_thread_exit_func): Use _endthreadex instead of EndThread. 2008-10-11 Yoann Vandoorselaere Bruno Haible Provide a Win32 implementation of the 'cond' module. * lib/glthread/cond.h [USE_WIN32]: New implementation. * lib/glthread/cond.c (glthread_cond_init_func, glthread_cond_wait_func, glthread_cond_timedwait_func, glthread_cond_signal_func, glthread_cond_broadcast_func, glthread_cond_destroy_func) [USE_WIN32]: New functions. * modules/cond (Dependencies): Add gettimeofday. 2008-10-11 Bruno Haible Make sleep work on older versions of mingw. * m4/sleep.m4 (gl_FUNC_SLEEP): Test whether 'sleep' is declared, not only whether it exists. * doc/posix-functions/sleep.texi: Mention the problem with older versions of mingw. 2008-10-11 Bruno Haible New module 'shutdown'. * modules/shutdown: New file. * lib/sys_socket.in.h (shutdown): New declaration. * lib/winsock.c (shutdown): New function. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_H_DEFAULTS): Initialize GNULIB_SHUTDOWN. * modules/sys_socket (Makefile.am): Substitute GNULIB_SHUTDOWN. * doc/posix-functions/shutdown.texi: Document the new module. 2008-10-11 Jim Meyering * lib/fclose.c: Fix typo in comment: s/close/fclose/. 2008-10-11 Bruno Haible New module 'fclose'. * modules/fclose: New file. * lib/stdio.in.h (fclose): New declaration. * lib/fclose.c: New file. * m4/fclose.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize GNULIB_FCLOSE, REPLACE_FCLOSE. * m4/close.m4 (gl_REPLACE_CLOSE): Invoke gl_REPLACE_FCLOSE. * modules/stdio (Makefile.am): Substitute GNULIB_FCLOSE, REPLACE_FCLOSE. * modules/close (Depends-on): fclose. * doc/posix-functions/fclose.texi: Mention the problem on Windows. 2008-10-11 Bruno Haible * lib/winsock.c (_gl_close_fd_maybe_socket): If closesocket fails, set errno and don't call _close. 2008-10-10 Bruno Haible * lib/copy-acl.c (qcopy_acl) [CYGWIN]: Call chmod before setting the ACL, not afterwards. Fixes test failure on Cygwin. 2008-10-09 Ben Pfaff * build-aux/announce-gen: Fix gnulib version related part of usage message. Die with a useful error message if no tarballs are found. 2008-10-10 Jim Meyering bootstrap: use git's --depth=N option only if it's supported * build-aux/bootstrap: Work with git-1.4.4.4, which does not recognize the --depth option. Reported by Pádraig Brady. 2008-10-09 Bruno Haible New module 'ioctl'. * modules/ioctl: New file. * lib/sys_socket.in.h (ioctl): Remove declaration. * lib/winsock.c: Include . (rpl_ioctl): Define only of the gnulib module 'ioctl' is present. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_WINSOCK2): Require gl_SYS_IOCTL_H_DEFAULTS. Set also SYS_IOCTL_H_HAVE_WINSOCK2_H. * modules/sys_socket (Files): Add m4/sys_ioctl_h.m4. * doc/posix-functions/ioctl.texi: Mention the new module. 2008-10-09 Bruno Haible New module 'sys_ioctl'. * lib/sys_ioctl.in.h: New file. * m4/sys_ioctl_h.m4: New file. * modules/sys_ioctl: New file. * doc/glibc-headers/sys_ioctl.texi: Mention the new module. 2008-10-09 Bruno Haible * lib/sys_socket.in.h (ioctl): Make signature POSIX compliant. * lib/winsock.c: Include . (rpl_ioctl): Change to second argument 'int' and then varargs. 2008-10-09 Bruno Haible * m4/close.m4 (gl_FUNC_CLOSE): Arrange to replace the close() function when the sys_socket module is present and the system has . 2008-10-09 Bruno Haible * doc/posix-functions/close.texi: Mention module 'close' instead of module 'sys_socket'. 2008-10-09 Bruno Haible * doc/glibc-headers/sys_ioctl.texi: New file. * doc/gnulib.texi: Include it. 2008-10-09 Paolo Bonzini Bruno Haible Combine the two replacements of 'close'. * lib/sys_socket.in.h (close): Define to a reminder to include . (_gl_close_fd_maybe_socket): New declaration. (HAVE__GL_CLOSE_FD_MAYBE_SOCKET): New macro. * lib/winsock.c (close): Remove undefinition. (_gl_close_fd_maybe_socket): Renamed from rpl_close. Define only when needed for the gnulib module 'close'. * lib/unistd.in.h (close): If the gnulib module 'close' is not used, define to an error symbol or to a warning, if suitable. * lib/close.c: Include . (rpl_close): Invoke _gl_close_fd_maybe_socket when gnulib defines it. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_WINSOCK2): Set also UNISTD_H_HAVE_WINSOCK2_H. (gl_SYS_SOCKET_H_DEFAULTS): Require gl_UNISTD_H_DEFAULTS. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize UNISTD_H_HAVE_WINSOCK2_H. * modules/sys_socket (Files): Add m4/unistd_h.m4. (configure.ac): Set a module indicator. (Makefile.am): Substitute GNULIB_CLOSE. * modules/unistd (Makefile.am): Substitute UNISTD_H_HAVE_WINSOCK2_H. * modules/poll-tests (Depends-on): Add close. * modules/select-tests (Depends-on): Likewise. 2008-10-09 Paolo Bonzini Bruno Haible New module 'close'. * modules/close: New file. * lib/unistd.in.h (close): Move declaration out of the FCHDIR_REPLACEMENT scope. (_gl_unregister_fd): New declaration. * lib/close.c: New file. * lib/fchdir.c (rpl_close): Remove function. * m4/close.m4: New file. * m4/fchdir.m4 (gl_FUNC_FCHDIR): When replacing fchdir, also replace close. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_CLOSE and REPLACE_CLOSE. * modules/unistd (Makefile.am): Substitute GNULIB_CLOSE and REPLACE_CLOSE. * modules/fchdir (Depends-on): Add close. 2008-10-09 Paolo Bonzini Bruno Haible * lib/fcntl.in.h (open): Simplify conditionals. (_gl_register_fd): New declaration. * lib/fchdir.c (rpl_open): Remove function. * lib/open.c: When FCHDIR_REPLACEMENT is defined, compile the file also. (open): When FCHDIR_REPLACEMENT is defined, invoke _gl_register_fd. * m4/fchdir.m4 (gl_FUNC_FCHDIR): When replacing fchdir, also replace open. 2008-10-09 Jim Meyering GNUmakefile: use the more name-space-friendly "_version" * top/GNUmakefile (_dummy): Update. (_version): Rename from "version". 2008-10-09 Paolo Bonzini Bruno Haible * lib/fchdir.c (_gl_unregister_fd): New functions, extracted from rpl_close. (_gl_register_fd): New function, extracted from rpl_open. (rpl_close, rpl_closedir): Use _gl_unregister_fd. (rpl_open, rpl_opendir): Use _gl_register_fd. 2008-10-09 Paolo Bonzini Fix organization of 'open' replacement. * m4/open.m4 (gl_REPLACE_OPEN): New macro. (gl_FUNC_OPEN): Use it. (gl_PREREQ_OPEN): Add a : to make the body non-empty. 2008-10-08 Bruno Haible * modules/getdate-tests (test_getdata_LDADD): Add LIBINTL. 2008-10-08 Simon Josefsson * m4/sys_socket_h.m4: Don't AC_LIBOBJ(winsock). The file is AC_LIBOBJ'ed by each gnulib module that needs it (e.g., socket, listen). 2008-10-08 Eric Blake GNUmakefile: add 'make version' target * top/GNUmakefile (_curr-ver): Split version update rules... (version): ...into a target. 2008-10-07 Bruno Haible Use a more portable replacement expression for -0.0L. * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Use -LDBL_MIN * LDBL_MIN instead of -0.0L. Fix m4 quotation. * tests/test-signbit.c: Include . (minus_zero): New variable. (test_signbitl): Use minus_zero instead of -zero. * modules/signbit-tests (Depends-on): Add float. * tests/test-ceill.c: Include . (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/ceill-tests (Depends-on): Add float. * tests/test-floorl.c: Include . (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/floorl-tests (Depends-on): Add float. * tests/test-roundl.c: Include . (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/roundl-tests (Depends-on): Add float. * tests/test-truncl.c: Include . (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/truncl-tests (Depends-on): Add float. * tests/test-frexpl.c (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/frexpl-tests (Depends-on): Add float. * tests/test-isnan.c (zerol): Remove variable. (minus_zerol): New variable. (test_long_double): Use minus_zerol instead of -zerol. * modules/isnan-tests (Depends-on): Add float. * tests/test-isnanl.h (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/isnanl-nolibm-tests (Depends-on): Add float. * modules/isnanl-tests (Depends-on): Add float. * tests/test-ldexpl.c (zero): Remove variable. (minus_zero): New variable. (main): Use minus_zero instead of -zero. * modules/ldexpl-tests (Depends-on): Add float. * tests/test-snprintf-posix.h (zerol): Remove variable. (minus_zerol): New variable. (test_function): Use minus_zerol instead of -zerol. * modules/snprintf-posix-tests (Depends-on): Add float. * modules/vsnprintf-posix-tests (Depends-on): Add float. * tests/test-sprintf-posix.h (zerol): Remove variable. (minus_zerol): New variable. (test_function): Use minus_zerol instead of -zerol. * modules/sprintf-posix-tests (Depends-on): Add float. * modules/vsprintf-posix-tests (Depends-on): Add float. * tests/test-vasnprintf-posix.c (zerol): Remove variable. (minus_zerol): New variable. (test_function): Use minus_zerol instead of -zerol. * modules/vasnprintf-posix-tests (Depends-on): Add float. * tests/test-vasprintf-posix.c (zerol): Remove variable. (minus_zerol): New variable. (test_function): Use minus_zerol instead of -zerol. * modules/vasprintf-posix-tests (Depends-on): Add float. 2008-10-07 Simon Josefsson * MODULES.html.sh (Support for building documentation): Mention pmccabe2html. Sort entries. Add pmccabe2html module, from gnupdf. * build-aux/pmccabe.css: New file. * build-aux/pmccabe2html: New file. * m4/pmccabe2html.m4: New file. * modules/pmccabe2html: New file. 2008-10-07 Richard W.M. Jones flock: new module * MODULES.html.sh: Add to list of modules. * lib/flock.c: flock implementation for Windows and Unix systems which have fcntl. * doc/glibc-functions/flock.texi: Update documentation. * lib/sys_file.in.h: header file. * m4/flock.m4: M4 macros. * m4/sys_file_h.m4: M4 macros for replacement sys/file.h. * modules/flock: flock module. * modules/flock-tests: flock tests module. * modules/sys_file: sys/file.h module. * tests/test-flock.c: test suite for flock. 2008-10-06 Jim Meyering bootstrap: check for LT_INIT more portably still ;-) * build-aux/bootstrap: Don't rely on \>, since it's not portable. Spotted by Bruno Haible. 2008-10-06 Eric Blake test-signbit: avoid tripping Irix cc bug on -0.0L * tests/test-signbit.c (minus_zerol): Delete, and replace with '-zerol'. This may break on HP-UX/hppa, but at least makes the entire testsuite consistent and avoids an Irix 6.2 bug. 2008-10-05 Bruno Haible Jim Meyering Add an option for ignoring EPIPE during close_stdout. * lib/closeout.h: Include . (close_stdout_set_ignore_EPIPE): New declaration. * lib/closeout.c: Include . (ignore_EPIPE): New variable. (close_stdout_set_ignore_EPIPE): New function. (close_stdout): Ignore EPIPE error if ignore_EPIPE is set. * lib/close-stream.c (close_stream): Mention the possible EPIPE failure. * modules/closeout (Depends-on): Add stdbool. 2008-10-05 Bruno Haible * modules/accept: New file. * modules/bind: New file. * modules/connect: New file. * modules/getpeername: New file. * modules/getsockname: New file. * modules/getsockopt: New file. * modules/listen: New file. * modules/recv: New file. * modules/recvfrom: New file. * modules/send: New file. * modules/sendto: New file. * modules/setsockopt: New file. * modules/socket: New file. * lib/sys_socket.in.h: Include the GL_LINK_WARNING definition. (socket, connect, accept, bind, getpeername, getsockname, getsockopt, listen, recv, send, recvfrom, sendto, setsockopt): Declare only when the particular module is requested. Add a link warning when the particular module is not requested. * lib/winsock.c (rpl_socket, rpl_connect, rpl_accept, rpl_bind, rpl_getpeername, rpl_getsockname, rpl_getsockopt, rpl_listen, rpl_recv, rpl_send, rpl_recvfrom, rpl_sendto, rpl_setsockopt): Define only when the particular module is requested. * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR, gl_SYS_SOCKET_H_DEFAULTS): New macros. (gl_HEADER_SYS_SOCKET): Require gl_SYS_SOCKET_H_DEFAULTS. * modules/sys_socket (Depends-on): Add link-warning. (Makeifle.am): Substitute GNULIB_SOCKET, GNULIB_CONNECT, GNULIB_ACCEPT, GNULIB_BIND, GNULIB_GETPEERNAME, GNULIB_GETSOCKNAME, GNULIB_GETSOCKOPT, GNULIB_LISTEN, GNULIB_RECV, GNULIB_SEND, GNULIB_RECVFROM, GNULIB_SENDTO, GNULIB_SETSOCKOPT, and the definition of GL_LINK_WARNING. * doc/posix-functions/accept.texi: Mention the new module 'accept'. * doc/posix-functions/bind.texi: Mention the new module 'bind'. * doc/posix-functions/connect.texi: Mention the new module 'connect'. * doc/posix-functions/getpeername.texi: Mention the new module 'getpeername'. * doc/posix-functions/getsockname.texi: Mention the new module 'getsockname'. * doc/posix-functions/getsockopt.texi: Mention the new module 'getsockopt'. * doc/posix-functions/listen.texi: Mention the new module 'listen'. * doc/posix-functions/recv.texi: Mention the new module 'recv'. * doc/posix-functions/recvfrom.texi: Mention the new module 'recvfrom'. * doc/posix-functions/send.texi: Mention the new module 'send'. * doc/posix-functions/sendto.texi: Mention the new module 'sendto'. * doc/posix-functions/setsockopt.texi: Mention the new module 'setsockopt'. * doc/posix-functions/socket.texi: Mention the new module 'socket'. * modules/poll-tests (Depends-on): Add socket, bind, getsockopt, listen, connect, accept. * modules/select-tests (Depends-on): Likewise. 2008-10-05 Bruno Haible * lib/winsock.c (strerror): Remove unused #undef. (rpl_close): Remove unused local variable. * modules/sys_socket (Depends-on); Add errno. 2008-10-05 Bruno Haible * lib/sys_select.in.h: Include the GL_LINK_WARNING definition. (select): Add a link warning when the 'select' module is not used. * modules/sys_select (Depends-on): Add link-warning. (Makefile.am): Substitute the definition of GL_LINK_WARNING. Suggested by Paolo Bonzini. 2008-10-05 Jim Meyering bootstrap: check for LT_INIT more portably * build-aux/bootstrap: Avoid using grep -E, since it's not portable enough. Suggestion from Bruno Haible. 2008-10-05 Bruno Haible * doc/posix-headers/sys_select.texi: Mention 'struct timeval' problem as being fixed by gnulib. 2008-10-05 Bruno Haible * modules/select-tests: New file, mostly copied from modules/sys_select-tests. * tests/test-select.c: New file, mostly copied from tests/test-sys_select.c. * tests/test-sys_select.c: Move most of the code to tests/test-select.c. * modules/sys_select-tests (Depends-on): Remove all dependencies. (Makefile.am): Remove test_sys_select_LDADD. * lib/sys_select.in.h (select): If GNULIB_SELECT is not set, define it to an undefined symbol, for an error message. * m4/sys_select_h.m4 (gl_SYS_SELECT_MODULE_INDICATOR): New macro. (gl_SYS_SELECT_H_DEFAULTS): New macro. (gl_HEADER_SYS_SELECT): Require it. Don't require compilation of winsock-select.c here. * modules/sys_select (Files): Remove lib/winsock-select.c. (Depends-on): Remove alloca. (Makefile.am): Substitute GNULIB_SELECT. * modules/select: New file. * doc/posix-functions/select.texi: Update. 2008-10-05 Bruno Haible * lib/spawn_faction_addclose.c (__sysconf): Use getdtablesize always. * lib/spawn_faction_adddup2.c (__sysconf): Likewise. * lib/spawn_faction_addopen.c (__sysconf): Likewise. * modules/posix_spawn_file_actions_addclose (Depends-on): Add getdtablesize. * modules/posix_spawn_file_actions_adddup2 (Depends-on): Likewise. * modules/posix_spawn_file_actions_addopen (Depends-on): Likewise. 2008-10-05 Bruno Haible * modules/getdtablesize-tests: New file. * tests/test-getdtablesize.c: New file. New module 'getdtablesize'. * lib/unistd.in.h (getdtablesize): New declaration. * lib/getdtablesize.c: New file. * m4/getdtablesize.m4: New file. * modules/getdtablesize: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETDTABLESIZE, HAVE_GETDTABLESIZE. * modules/unistd (Makefile.am): Substitute GNULIB_GETDTABLESIZE, HAVE_GETDTABLESIZE. * doc/glibc-functions/getdtablesize.texi: Mention the new module. 2008-10-05 Bruno Haible * modules/sched (Makefile.am): Fix typo. Reported by Simon Josefsson. 2008-10-05 Jim Meyering bootstrap: check for LT_INIT, too * build-aux/bootstrap: Both AC_PROG_LIBTOOL and AM_PROG_LIBTOOL are deprecated. Suggestion from Ralf Wildenhues. 2008-10-05 Bruno Haible * lib/spawn.in.h (POSIX_SPAWN_*): Use the system's values, rather than overriding them by ours. (POSIX_SPAWN_USEVFORK): Use the next free bit position. 2008-10-05 Jim Meyering bootstrap: check for AC_PROG_LIBTOOL as well as AM_PROG_LIBTOOL * build-aux/bootstrap: Check for AC_PROG_LIBTOOL, as well as the obsolete AM_PROG_LIBTOOL. Spotted by Debarshi Ray . 2008-10-04 Bruno Haible * modules/dup2 (License): Change to LGPLv2+. * modules/sleep (License): Likewise. * modules/perror (License): Likewise. * modules/fopen (License): Change to LGPLv2+, with approval by Eric Blake. * modules/signal (License): Likewise. * modules/sigprocmask (License): Likewise. * modules/raise (License): Change to LGPLv2+, with approval by Jim Meyering. 2008-10-04 Bruno Haible * lib/spawn.in.h (POSIX_SPAWN_*): Undefine before redefining. Reported by Rainer Tammer . 2008-10-03 Paolo Bonzini Bruno Haible * lib/errno.in.h (EWOULDBLOCK) [win32]: Define to EAGAIN. * lib/winsock.c (set_winsock_errno): Map WSAEWOULDBLOCK to EWOULDBLOCK. * lib/strerror.c (rpl_strerror): Remove error string for EWOULDBLOCK. 2008-10-03 Kamil Dudka filevercmp: new module * lib/filevercmp.h: New function filevercmp comparing version strings. * lib/filevercmp.c: Implementation of filevercmp function. * modules/filevercmp: Module metadata. * tests/test-filevercmp.c: Unit test for new module. * modules/filevercmp-tests: Unit test metadata. * MODULES.html.sh: Add filevercmp module. 2008-10-03 Bruno Haible * lib/c-ctype.h: Add comment. Reported by Jim Meyering. 2008-10-02 Bruno Haible * modules/posix_spawn-internal (Depends-on): Add 'open'. 2008-10-02 Paolo Bonzini * build-aux/bootstrap: Allow renaming bootstrap, and change the name of bootstrap.conf accordingly. 2008-10-02 Paolo Bonzini * build-aux/bootstrap: Install git-merge-changelog configuration items into .gitconfig if needed. 2008-10-02 Paolo Bonzini * build-aux/bootstrap: Recognize `gnulib' being a submodule in a git repository, and initialize/update it accordingly. 2008-10-02 Richard W.M. Jones * modules/fsync-tests: New file. * tests/test-fsync.c: New file. New module 'fsync'. * lib/fsync.c: New file. * m4/fsync.m4: New file. * modules/fsync: New file. * lib/unistd.in.h (fsync): New declaration. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Define and AC_SUBST both GNULIB_FSYNC and HAVE_FSYNC. * modules/unistd: Substitute GNULIB_FSYNC and HAVE_FSYNC. * MODULES.html.sh (posix_functions): Add fsync. * doc/posix-functions/fsync.texi: Mention the new module. 2008-10-02 Jim Meyering fts.c: sync with similar code from coreutils' remove.c * lib/fts.c (dirent_inode_sort_may_be_useful): Merge from coreutils. Guard also with "#if defined __linux__", since for now at least, this code is Linux-kernel-specific. 2008-10-02 Jim Meyering fts: bug fixes * lib/fts.c: Remove unnecessary "defined" in cpp directive. Include , not . * m4/fts.m4 (gl_FUNC_FTS_CORE): Fix typo s/vfs/vfs.h/. Include , not . 2008-10-01 Bruno Haible Avoid the broken posix_spawn function on AIX 5.3 and 6.1. * m4/posix_spawn.m4 (gl_POSIX_SPAWN_WORKS): New macro. (gl_POSIX_SPAWN_BODY): Invoke it. Set REPLACE_POSIX_SPAWN if needed. * doc/posix-functions/posix_spawn.texi: Mention the AIX bugs. * doc/posix-functions/posix_spawnp.texi: Likewise. * m4/execute.m4 (gl_EXECUTE): Invoke gl_POSIX_SPAWN_WORKS, to check whether posix_spawn actually works. * m4/pipe.m4 (gl_PIPE): Likewise. * modules/execute (Files): Add m4/posix_spawn.m4. * modules/pipe (Files): Add m4/posix_spawn.m4. Reported and analyzed by Rainer Tammer . 2008-10-01 Jim Meyering remove trailing spaces * NEWS: Likewise. * lib/poll.c (poll): Likewise. * lib/sys_socket.in.h (SHUT_RDWR): Likewise. * lib/winsock.c (rpl_close): Likewise. * m4/memcmp.m4 (gl_FUNC_MEMCMP): Likewise. * modules/yield: Likewise. * tests/test-poll.c (connect_to_socket, poll1): Likewise. * tests/test-sys_select.c (connect_to_socket): Likewise. fts.c: adjust a new interface to be more generally useful * lib/fts.c (dirent_inode_sort_may_be_useful): Take an FD parameter. (fts_build): Adjust caller. 2008-09-30 Yoann Vandoorselaere * modules/cond-tests: New file. * tests/test-cond.c: New file. 2008-09-30 Yoann Vandoorselaere Bruno Haible * modules/cond (Dependencies): Add errno, time. * lib/glthread/cond.h: Include . (gl_cond_define, gl_cond_define_initialized): Use the same definition across platforms. 2008-09-30 Yoann Vandoorselaere Bruno Haible * m4/thread.m4 (gl_THREAD): Fix detection of pthread_atfork function. 2008-09-30 Yoann Vandoorselaere Bruno Haible * modules/tls-tests (Depends-on): Add thread, yield. (configure.ac): Remove all checks. (test_tls_LDADD): Use YIELD_LIB instead of LIBSCHED. * tests/test-tls.c (gl_thread_t, gl_thread_join, gl_thread_yield, gl_thread_self): Remove definitions. Include glthread/thread.h and glthread/yield.h instead. (test_tls): Pass an additional NULL argument to gl_thread_join. 2008-09-30 Yoann Vandoorselaere Bruno Haible * modules/lock-tests (Depends-on): Add thread, yield. (configure.ac): Remove all checks. (test_lock_LDADD): Use YIELD_LIB instead of LIBSCHED. * tests/test-lock.c (gl_thread_t, gl_thread_join, gl_thread_yield, gl_thread_self): Remove definitions. Include glthread/thread.h and glthread/yield.h instead. (test_lock, test_rwlock, test_recursive_lock, test_once): Pass an additional NULL argument to gl_thread_join. 2008-09-30 Bruno Haible Fix the Win32 implementation of the 'thread' module. * lib/glthread/thread.h [USE_WIN32_THREADS] (gl_thread_t): Change to a pointer type. (gl_thread_self): Invoke gl_thread_self_func. (gl_thread_self_func): New declaration. * lib/glthread/thread.c [USE_WIN32_THREADS] (self_key): New variable. (do_init_self_key, init_self_key): New functions. (struct gl_thread_struct): Renamed from 'struct thread_extra'. Remove some fields. (running_threads, running_lock): Remove variables. (get_current_thread_handle): New function. (gl_thread_self_func, wrapper_func, glthread_create_func, glthread_join_func, gl_thread_exit_func): Largely rewritten and simplified. 2008-09-30 Bruno Haible * lib/winsock-select.c (win32_poll_handle): Add shortcut for regular files. 2008-09-30 Jim Meyering fts.m4: correct the test for statfs.f_type * m4/fts.m4 (gl_FUNC_FTS_CORE): Include when checking for statfs.f_type. 2008-09-15 Simon Josefsson tests: avoid some compiler warnings * tests/test-memchr.c (main): Pass NULL indirectly. * tests/test-getdate.c (main): Remove unused variable 'ret'. 2008-09-29 Ondřej Vašík getdate.y: disallow countable dayshifts like "4 yesterday ago" * lib/getdate.y (relative_time_table) [tDAY_SHIFT]: New type for exactly specified dayshifts. (dayshift): New rule. (rel): Add dayshift. (relative_time_table) [tomorrow, yesterday, today, now]: Use tDAY_SHIFT in place of tDAY_UNIT. * tests/test-getdate.c: Add tests for now-disallowed countable dayshifts, e.g., "4 yesterday ago". 2008-09-29 Bruno Haible * tests/test-posix_spawn1.c: Renamed from tests/test-posix_spawn.c. * tests/test-posix_spawn1.in.sh: Renamed from tests/test-posix_spawn.in.sh. * tests/test-posix_spawn2.c: New file. * tests/test-posix_spawn2.in.sh: New file. * modules/posix_spawnp-tests (Files): Update. (Makefile.am): Update. Add test-posix_spawn2 to the tests. 2008-09-29 Bruno Haible Propagate effects of putenv/setenv/unsetenv to child processes. * lib/execute.c (execute): Use spawnvpe instead of spawnvp. * lib/pipe.c (create_pipe): Likewise. 2008-09-29 Bruno Haible Enable use of shell scripts as executables in mingw. * lib/execute.c (execute): When spawnv fails with error ENOEXEC, run the program as a shell script. * lib/pipe.c (create_pipe): Likewise. * lib/w32spawn.h (prepare_spawn): Add a hidden element in front of the resulting array. 2008-09-29 Eric Blake * m4/arpa_inet_h.m4 (gl_REPLACE_ARPA_INET_H): Fix typo. 2008-08-24 Paolo Bonzini * doc/posix-functions/accept.texi: Update mingw problems. * doc/posix-functions/bind.texi: Update mingw problems. * doc/posix-functions/close.texi: Update mingw problems. * doc/posix-functions/connect.texi: Update mingw problems. * doc/posix-functions/getpeername.texi: Update mingw problems. * doc/posix-functions/getsockname.texi: Update mingw problems. * doc/posix-functions/getsockopt.texi: Update mingw problems. * doc/posix-functions/ioctl.texi: Update mingw problems. * doc/posix-functions/listen.texi: Update mingw problems. * doc/posix-functions/recv.texi: Update mingw problems. * doc/posix-functions/recvfrom.texi: Update mingw problems. * doc/posix-functions/select.texi: Update mingw problems. * doc/posix-functions/send.texi: Update mingw problems. * doc/posix-functions/sendto.texi: Update mingw problems. * doc/posix-functions/setsockopt.texi: Update mingw problems. * doc/posix-functions/socket.texi: Update mingw problems. 2008-09-29 Paolo Bonzini Bruno Haible * lib/sys_select.in.h: Include sys/time.h. * m4/sys_select.h.m4: Test that struct timeval is fully defined. * modules/sys_select: Depend on sys_time. * tests/test-sys_select.c: Test that sys/select.h defines struct timeval fully. 2008-09-29 Bruno Haible * lib/sys_socket.in.h: Wrap the definitions in 'extern "C"'. * lib/sys_select.in.h: Likewise. 2008-09-29 Bruno Haible * lib/winsock.c (rpl_close, rpl_socket): Remove unused variables. 2008-09-29 Bruno Haible * m4/sockets.m4 (gl_SOCKETS): Check also for the need to use -lsocket. Set LIBSOCKET instead of augmenting LIBS. * modules/sockets (Link): New section. * modules/sockets-tests (test_sockets_LDADD): New variable. * modules/sys_select-tests (test_sys_select_LDADD): New variable. * modules/poll-tests (test_poll_LDADD): New variable. * NEWS: Document the change. 2008-09-29 Bruno Haible * m4/arpa_inet_h.m4 (gl_REPLACE_ARPA_INET_H): New macro. * m4/inet_ntop.m4 (gl_INET_NTOP): Invoke it instead of assigning ARPA_INET_H directly. * m4/inet_pton.m4 (gl_INET_PTON): Likewise. 2008-09-28 Bruno Haible * m4/sys_socket_h.m4 (gl_PREREQ_SYS_H_WINSOCK2): New macro, extracted from gl_HEADER_SYS_SOCKET. (gl_HEADER_SYS_SOCKET): Invoke it. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. 2008-09-28 Bruno Haible * doc/posix-headers/sys_select.texi: Mention 'struct timeval' problem. * tests/test-sys_select.c: Include , for struct timeval. Needed on OSF/1 4.0. 2008-09-28 Bruno Haible Override open more carefully. * lib/open.c (orig_open): New function. (rpl_open): Use orig_open instead of open. * lib/fcntl.in.h: Add special invocation convention. * m4/open.m4 (gl_PREREQ_OPEN): New macro. (gl_FUNC_OPEN): Invoke it. Override freopen more carefully. * lib/freopen.c (orig_freopen): New function. (rpl_freopen): Use orig_freopen instead of freopen. * m4/freopen.m4 (gl_PREREQ_FREOPEN): New macro. (gl_FUNC_FREOPEN): Invoke it. Override fopen more carefully. * lib/fopen.c (orig_fopen): New function. (rpl_fopen): Use orig_fopen instead of fopen. * m4/fopen.m4 (gl_PREREQ_FOPEN): New macro. (gl_FUNC_FOPEN): Invoke it. Needed on AIX. Reported by Rainer Tammer . 2008-09-28 Bruno Haible * lib/pipe.h (create_pipe_out, create_pipe_bidi): Add comment about SIGPIPE. 2008-09-28 Bruno Haible * tests/test-sigaction.c (handler, main): Disable the check whether SA_RESETHAND has reverted the installed handler to SIG_DFL. Needed on glibc systems with LinuxThreads. 2008-09-28 Bruno Haible * doc/posix-functions/freopen.texi: Mention the trailing slash problem. * lib/stdio.in.h (fopen, freopen): Undefine before redefining. Needed with AIX xlc. * lib/fcntl.in.h (open): Likewise. Reported by Rainer Tammer . 2008-09-28 Bruno Haible * modules/posix_spawnp-tests: New file. * tests/test-posix_spawn.c: New file. * tests/test-posix_spawn.in.sh: New file. New module 'posix_spawnp'. * modules/posix_spawnp: New file. * lib/spawnp.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnp.texi: Mention the new module. New module 'posix_spawn'. * modules/posix_spawn: New file. * lib/spawn.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn.texi: Mention the new module. New module 'posix_spawnattr_destroy'. * modules/posix_spawnattr_destroy: New file. * lib/spawnattr_destroy.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_destroy.texi: Mention the new module. New module 'posix_spawnattr_setsigmask'. * modules/posix_spawnattr_setsigmask: New file. * lib/spawnattr_setsigmask.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setsigmask.texi: Mention the new module. New module 'posix_spawnattr_getsigmask'. * modules/posix_spawnattr_getsigmask: New file. * lib/spawnattr_getsigmask.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getsigmask.texi: Mention the new module. New module 'posix_spawnattr_setsigdefault'. * modules/posix_spawnattr_setsigdefault: New file. * lib/spawnattr_setdefault.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setsigdefault.texi: Mention the new module. New module 'posix_spawnattr_getsigdefault'. * modules/posix_spawnattr_getsigdefault: New file. * lib/spawnattr_getdefault.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getsigdefault.texi: Mention the new module. New module 'posix_spawnattr_setschedpolicy'. * modules/posix_spawnattr_setschedpolicy: New file. * lib/spawnattr_setschedpolicy.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setschedpolicy.texi: Mention the new module. New module 'posix_spawnattr_getschedpolicy'. * modules/posix_spawnattr_getschedpolicy: New file. * lib/spawnattr_getschedpolicy.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getschedpolicy.texi: Mention the new module. New module 'posix_spawnattr_setschedparam'. * modules/posix_spawnattr_setschedparam: New file. * lib/spawnattr_setschedparam.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setschedparam.texi: Mention the new module. New module 'posix_spawnattr_getschedparam'. * modules/posix_spawnattr_getschedparam: New file. * lib/spawnattr_getschedparam.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getschedparam.texi: Mention the new module. New module 'posix_spawnattr_setpgroup'. * modules/posix_spawnattr_setpgroup: New file. * lib/spawnattr_setpgroup.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setpgroup.texi: Mention the new module. New module 'posix_spawnattr_getpgroup'. * modules/posix_spawnattr_getpgroup: New file. * lib/spawnattr_getpgroup.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getpgroup.texi: Mention the new module. New module 'posix_spawnattr_setflags'. * modules/posix_spawnattr_setflags: New file. * lib/spawnattr_setflags.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_setflags.texi: Mention the new module. New module 'posix_spawnattr_getflags'. * modules/posix_spawnattr_getflags: New file. * lib/spawnattr_getflags.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_getflags.texi: Mention the new module. New module 'posix_spawnattr_init'. * modules/posix_spawnattr_init: New file. * lib/spawnattr_init.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawnattr_init.texi: Mention the new module. New module 'posix_spawn_file_actions_destroy'. * modules/posix_spawn_file_actions_destroy: New file. * lib/spawn_faction_destroy.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn_file_actions_destroy.texi: Mention the new module. New module 'posix_spawn_file_actions_addopen'. * modules/posix_spawn_file_actions_addopen: New file. * lib/spawn_faction_addopen.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn_file_actions_addopen.texi: Mention the new module. New module 'posix_spawn_file_actions_adddup2'. * modules/posix_spawn_file_actions_adddup2: New file. * lib/spawn_faction_adddup2.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn_file_actions_adddup2.texi: Mention the new module. New module 'posix_spawn_file_actions_addclose'. * modules/posix_spawn_file_actions_addclose: New file. * lib/spawn_faction_addclose.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn_file_actions_addclose.texi: Mention the new module. New module 'posix_spawn_file_actions_init'. * modules/posix_spawn_file_actions_init: New file. * lib/spawn_faction_init.c: New file, from GNU libc with modifications. * doc/posix-functions/posix_spawn_file_actions_init.texi: Mention the new module. New module 'posix_spawn-internal'. * modules/posix_spawn-internal: New file. * lib/spawn_int.h: New file, from GNU libc with modifications. * lib/spawni.c: New file, from GNU libc with modifications. * m4/posix_spawn.m4: New file. New module 'spawn'. * modules/spawn: New file. * lib/spawn.in.h: New file, from GNU libc with modifications. * m4/spawn_h.m4: New file. * doc/posix-headers/spawn.texi: Mention the new module. 2008-09-28 Bruno Haible * modules/sched-tests: New file. * tests/test-sched.c: New file. New module 'sched'. * modules/sched: New file. * lib/sched.in.h: New file. * m4/sched_h.m4: New file. * doc/posix-headers/sched.texi: Mention the new module. 2008-09-27 Eric Blake Fix previous patch, and tweak references to $0. * posix-modules: Call func_gnulib_dir before using $gnulib_dir. (func_version, func_gnulib_dir): Don't call this program gnulib-tool. (func_gnulib_dir, func_tmpdir, func_fatal_error): Avoid shell bugs with using $0 in function. * gnulib-tool (func_gnulib_dir, func_tmpdir): Likewise. (func_fatal_error): Reuse the name the user invoked us with. 2008-09-27 Bruno Haible * m4/iconv_h.m4 (gl_REPLACE_ICONV_H): New macro. (gl_ICONV_H_DEFAULTS): Initialize ICONV_H here... (gl_ICONV_H): Not here. * m4/iconv_open.m4 (gl_REPLACE_ICONV_OPEN): Invoke gl_REPLACE_ICONV_H instead of assigning ICONV_H directly. * m4/wchar.m4 (gl_REPLACE_WCHAR_H): New macro. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Invoke it instead of assigning WCHAR_H directly. 2008-09-27 Bruno Haible * lib/arpa_inet.in.h: Include the GL_LINK_WARNING anchor. * modules/arpa_inet (Depends-on): Add link-warning. (Makefile.am): Insert the definition of GL_LINK-WARNING. * modules/unistd (Makefile.am): Likewise. 2008-09-26 Bruno Haible * posix-modules (cvsdatestamp, last_checkin_date, version): Remove variables. (func_version): Essentially copied from gnulib-tool. (func_exit, func_gnulib_dir, func_tmpdir, func_fatal_error, func_readlink): Copied from gnulib-tool. 2008-09-26 Bruno Haible * gnulib-tool (func_version): Change directory to $gnulib_dir before invoking git-version-gen. 2008-09-26 Bruno Haible * posix-modules: Update to directory names changed on 2008-01-19. Remove commas in output before splitting into words. No more need to avoid 'ftruncate' since 2007-02-19. 2008-09-26 Bruno Haible * doc/posix-headers/errno.texi: Remove mention of module 'EOVERFLOW'. 2008-09-26 Bruno Haible * lib/fwriteerror.c (do_fwriteerror): Ignore error EPIPE. * modules/fwriteerror (Depends-on): Add errno. 2008-09-26 Bruno Haible * tests/test-vc-list-files-git.sh: Explain reason for skipping test. * tests/test-vc-list-files-cvs.sh: Likewise. 2008-09-26 Bruno Haible * doc/posix-headers/sys_resource.texi: Reorder items. 2008-09-26 Jim Meyering fts: tweak inode comparison function * lib/fts.c (fts_compare_ino): Sort on increasing, not decreasing inode numbers, as documented. fts: sort dirent entries on inode number before traversing This avoids a quadratic, seek-related performance penalty when operating on a directory containing many entries (measurable at 10k; 3.5 hours at 2 million entries with a cold cache) on certain types of file systems, including ext3 and ext4, but not tmpfs. * lib/fts.c (DT_MUST_BE, NOT_AN_INODE_NUMBER, D_INO): Define. (FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD): Define if not defined. (S_MAGIC_TMPFS, S_MAGIC_NFS): Define. (fs_handles_readdir_ordered_dirents_efficiently): New function. (dirent_inode_sort_may_be_useful, fts_compare_ino): Likewise. (fts_build): Set the stat.st_ino member from D_INO. If it is likely to be useful, sort dirent entries on inode number. * m4/fts.m4 (gl_FUNC_FTS_CORE): Check for fstatfs, sys/vfs.h, and the struct statfs.f_type member. * modules/fts (Depends-on): Add d-ino. 2008-09-26 Bruno Haible * modules/sigpipe-die (Depends-on): Add sigpipe. * lib/stdio.in.h (fprintf, vfprintf, printf, vprintf, fputc, putc, putchar, fputs, puts, fwrite): Replace when REPLACE_STDIO_WRITE_FUNCS and GNULIB_STDIO_H_SIGPIPE are set. * lib/stdio-write.c: New file. * m4/stdio_h.m4 (gl_STDIO_H): Set GNULIB_FPRINTF, GNULIB_PRINTF, GNULIB_VFPRINTF, GNULIB_VPRINTF, GNULIB_FPUTC, GNULIB_PUTC, GNULIB_PUTCHAR, GNULIB_FPUTS, GNULIB_PUTS, GNULIB_FWRITE, REPLACE_STDIO_WRITE_FUNCS. (gl_STDIO_H_DEFAULTS): Initialize GNULIB_FPRINTF, GNULIB_PRINTF, GNULIB_VFPRINTF, GNULIB_VPRINTF, GNULIB_FPUTC, GNULIB_PUTC, GNULIB_PUTCHAR, GNULIB_FPUTS, GNULIB_PUTS, GNULIB_FWRITE, GNULIB_STDIO_H_SIGPIPE, REPLACE_STDIO_WRITE_FUNCS. * modules/stdio (Files): Add lib/stdio-write.c. (Makefile.am): Substitute GNULIB_FPRINTF, GNULIB_PRINTF, GNULIB_VFPRINTF, GNULIB_VPRINTF, GNULIB_FPUTC, GNULIB_PUTC, GNULIB_PUTCHAR, GNULIB_FPUTS, GNULIB_PUTS, GNULIB_FWRITE, GNULIB_STDIO_H_SIGPIPE, REPLACE_STDIO_WRITE_FUNCS. * m4/fprintf-posix.m4 (gl_REPLACE_FPRINTF): Define REPLACE_FPRINTF_POSIX. * m4/printf-posix-rpl.m4 (gl_REPLACE_PRINTF): Define REPLACE_PRINTF_POSIX. * m4/vfprintf-posix.m4 (gl_REPLACE_VFPRINTF): Define REPLACE_VFPRINTF_POSIX. * m4/vprintf-posix.m4 (gl_REPLACE_VPRINTF): Define REPLACE_VPRINTF_POSIX. * doc/posix-functions/fprintf.texi: Mention the sigpipe module and the SIGPIPE issue. * doc/posix-functions/fputc.texi: Likewise. * doc/posix-functions/fputs.texi: Likewise. * doc/posix-functions/fwrite.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/putc.texi: Likewise. * doc/posix-functions/putchar.texi: Likewise. * doc/posix-functions/puts.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * modules/safe-write (Depends-on): Add write. * modules/sigpipe-tests: New file. * tests/test-sigpipe.c: New file. * tests/test-sigpipe.sh: New file. * modules/write: New file. * lib/unistd.in.h: Include . (write): New declaration. * lib/write.c: New file. * m4/write.m4: New file. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_UNISTD_H_SIGPIPE, GNULIB_WRITE, REPLACE_WRITE. * modules/unistd (Makefile.am): Substitute GNULIB_UNISTD_H_SIGPIPE, GNULIB_WRITE, REPLACE_WRITE. * doc/posix-functions/write.texi: Mention the write, sigpipe modules and the SIGPIPE issue. * lib/signal.in.h (SIGPIPE): Define to a replacement value. (raise): New declaration. * lib/sigprocmask.c (SIGPIPE_handler): New variable. (ext_signal): New function. (rpl_raise): New function. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Initialize GNULIB_SIGNAL_H_SIGPIPE. * modules/signal (Makefile.am): Substitute GNULIB_SIGNAL_H_SIGPIPE. * doc/posix-headers/signal.texi: Mention the SIGPIPE issue. * modules/sigpipe: New file. * m4/sigpipe.m4: New file. 2008-09-25 Derek Price Bruno Haible * gnulib-tool (func_import): Report all license incompatibilities, not just the first one. 2008-09-25 Bruno Haible * gnulib-tool (func_import): When computing the edits, consider not only the Makefile.ams that exist but also those that will be generated. 2008-09-25 Simon Josefsson * modules/sys_select-tests (Depends-on): Remove sys_select itself, fixes gnulib-tool --test warning about duplicate dependency. 2008-09-25 Bruno Haible * gnulib-tool: Don't ask the user to perform edits in the generated Makefile.ams. (func_emit_lib_Makefile_am): Emit empty SUBDIRS. Execute edits that apply to the Makefile.am being generated. (func_emit_tests_Makefile_am): Execute edits that apply to the Makefile.am being generated. (func_import): Setup list of Makefile.am edits before emitting the Makefile.ams, not at the end. (func_create_testdir): Update. Reported by Yoann Vandoorselaere . 2008-09-25 Yoann Vandoorselaere * gnulib-tool (func_import): Store the --tests-base option in the comment in gnulib-cache.m4. 2008-09-24 Paolo Bonzini * NEWS: Document increased portability that sys_select now provides. * lib/sys_select.in.h: Install select wrapper. * lib/sys_socket.in.h: Use more descriptive name when there is no select wrapper. * lib/winsock-select.c: New. * m4/sys_select_h.m4: Compile lib/winsock-select.c if WinSock is used. Require gl_HEADER_SYS_SOCKET. * modules/sys_select: Depend on alloca, add lib/winsock-select.c. * modules/sys_select-tests: Copy dependencies from modules/poll-tests. * tests/test-sys_select.c: Add functional tests. 2008-09-24 Eric Blake open, fopen: close fd leak in last patch * lib/open.c (rpl_open): Close fd before returning error. * lib/fopen.c (rpl_fopen): Close fd before returning error. * doc/posix-functions/open.texi (open): Document that Irix also has the bug. * doc/posix-functions/fopen.texi (fopen): Likewise. Reported by Paolo Bonzini. 2008-09-24 Bruno Haible Ensure that a filename ending in a slash cannot be used to access a non-directory. * lib/open.c (rpl_open): When the filename ends in a slash, use fstat() to check whether it's really a directory. * lib/fopen.c: Include fcntl.h, unistd.h. (rpl_fopen): When the filename ends in a slash, use open(), fstat(), and fdopen(). * modules/fopen (Depends-on): Add unistd. * tests/test-open.c (main): Try to open "/dev/null/" as a directory. * tests/test-fopen.c (main): Likewise. * doc/posix-functions/open.texi: Mention the HP-UX, Solaris bug. * doc/posix-functions/fopen.texi: Likewise. Reported by Eric Blake. 2008-09-23 Eric Blake c-stack: avoid compiler optimizations when provoking overflow * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Make recursion harder to optimize, to ensure a stack overflow occurs. * tests/test-c-stack.c (recurse): Likewise. Borrowed from libsigsegv. c-stack: work around Irix sigaltstack bug * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Check whether sigaltstack uses wrong end of stack_t (copied in part from libsigsegv). * lib/c-stack.c (c_stack_action) [!HAVE_LIBSIGSEGV]: Work around Irix bug, without requiring an over-allocation. * doc/posix-functions/sigaltstack.texi (sigaltstack): Document the bug. fopen: document mingw bug on directories * doc/posix-functions/fopen.texi (fopen): Mention mingw bug for not allowing a stream visiting a directory, even though reading from such a stream is not portable. 2008-09-23 Paolo Bonzini * lib/poll.c: Rewrite. * modules/poll: Depend on alloca. 2008-09-23 Paolo Bonzini * lib/sys_socket.in.h: Do not implement rpl_setsockopt here, instead define prototypes for a full set of wrappers. Ensure that Cygwin does not use the compatibility code, which is only for MinGW. * lib/winsock.c: New. * m4/sys_socket_h.m4: Compile lib/winsock.c if WinSock is being used. * modules/sys_socket: Add lib/winsock.c. * modules/poll-tests: Add errno and perror. * tests/test-poll.c: Use ioctl, not ioctlsocket. 2008-09-23 Paolo Bonzini * tests/test-poll.c: Downgrade minimum needed Winsock version. 2008-09-23 Bruno Haible * doc/posix-functions/*: Add info about functions missing on IRIX 5.3. * doc/glibc-functions/*: Likewise. 2008-09-23 Simon Josefsson * tests/test-perror.sh (tmpfiles): Cleanup temporary files on success. 2008-09-22 Eric Blake Bruno Haible vasnprintf: fix x86/glibc regression on printf("%La", 0.0L) * lib/vasnprintf.c (VASNPRINTF): Support 0.0 on platforms that supply %A but mishandle pseudo-NaN. Reported by Simon Josefsson. 2008-09-21 Bruno Haible * tests/test-lock.c (main): Tweak skip message. * tests/test-tls.c (main): Likewise. 2008-09-21 Bruno Haible * m4/sigaction.m4 (gl_SIGACTION): Remove unnecessary AC_SUBST. Check whether 'struct sigaction' has sa_sigaction here... (gl_PREREQ_SIG_HANDLER_H): ... not here. (gl_PREREQ_SIGACTION): Remove unnecessary AC_SUBST. 2008-09-21 Bruno Haible * MODULES.html.sh (Support for obsolete systems lacking ANSI C 89): New section. (Support for systems lacking ANSI C 89): Move stdlib, exit, strtol, strtoul, memchr, memcmp, memcpy, memmove, memset, strcspn, strpbrk to the new section. (Support for obsolete systems lacking POSIX:2001): New section. (String handling ): Move strdup to the new section. Suggested by Simon Josefsson and Paolo Bonzini. 2008-09-21 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Allow 3-digit exponents in %e and %g results on 'long double'. Needed for mingw's improved *printf functions. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. Reported by Eric Blake. 2008-09-21 Bruno Haible * tests/test-snprintf-posix.h (test_function): Remove useless ASSERTs. * tests/test-sprintf-posix.h (test_function): Likewise. 2008-09-21 Bruno Haible * modules/getpass (Depends-on): Add strdup-posix. New module 'strdup-posix'. * modules/strdup-posix: New file. * m4/strdup.m4 (gl_FUNC_STRDUP_POSIX): New macro. * lib/string.in.h (strdup): Replace if REPLACE_STRDUP is 1. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_STRDUP. * modules/string (Makefile.am): Substitute REPLACE_STRDUP. * doc/posix-functions/strdup.texi: Mention module strdup-posix. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add strdup-posix. * modules/strdup (Depends-on): Remove malloc-posix. 2008-09-20 Bruno Haible * lib/fstrcmp.c: Add data about branch probabilities, from Ralf Wildenhues. 2008-09-20 Bruno Haible Ensure that wint_t gets defined on IRIX 5.3. * lib/wchar.in.h (wint_t): Define if not defined by the system. * lib/wctype.in.h (wint_t): Likewise. (__wctype_wint_t): Remove type. (isw*): Use wint_t instead of __wctype_wint_t. * m4/wchar.m4 (gl_WCHAR_H): Invoke gt_TYPE_WINT_T and set HAVE_WINT_T. * modules/wchar (Files): Add m4/wint_t.m4. (Makefile.am): Substitute HAVE_WINT_T. * tests/test-wchar.c: Check that wchar_t and wint_t are defined. * tests/test-wctype.c: Check that wint_t is defined. * doc/posix-headers/wchar.texi: Mention the IRIX 5 problem. * doc/posix-headers/wctype.texi: Likewise. Reported by Tom G. Christensen . 2008-09-18 Bruno Haible * gnulib-tool (func_exit): Update comment. 2008-09-18 Simon Josefsson * modules/getaddrinfo (Depends-on): Remove strdup, this module assumes strdup exists and does not depend on strdup to return ENOMEM on out of memory conditions. 2008-09-18 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): When printing ±0.0L in NEED_PRINTF_INFINITE_LONG_DOUBLE case with 'e' format, always use two digits for the exponent. 2008-09-18 Jim Meyering Bruno Haible * lib/vasnprintf.c (decimal_point_char): Define also if NEED_PRINTF_INFINITE_LONG_DOUBLE. 2008-09-16 Bruno Haible and Eric Blake vasnprintf: support Irix 5.3 * lib/vasnprintf.c (VASNPRINTF): Also handle -0.0L on platforms that mishandle long double infinity. Reported by Tom G. Christensen. 2008-09-16 Bruno Haible * doc/glibc-functions/scandir.texi: Mention the function is missing on Solaris 9. * doc/glibc-functions/alphasort.texi: Likewise. Reported by Michael Haubenwallner . 2008-09-16 Jim Meyering posix-shell.m4: reject opensolaris's "sh (AT&T Research) 1993-12-28 s+" * m4/posix-shell.m4 (gl_POSIX_SHELL): Reject a shell that lets a umask modification leak out of a subshell. Otherwise, the opensolaris /bin/sh would be accepted and thus cause unwarranted failures in the coreutils test suite. 2008-09-16 Paolo Bonzini * tests/test-poll.c (connect_to_socket): Allow non-blocking connect to succeed. 2008-09-16 Jim Meyering avoid spurious test failure when library is built without ACL support * m4/acl.m4 (USE_ACL): Define as a shell variable, too, for... * modules/acl-tests (Makefile.am) [TESTS_ENVIRONMENT]: Add USE_ACL. * tests/test-file-has-acl.sh: Skip if USE_ACL == 0. * tests/test-copy-acl.sh: Likewise. 2008-09-15 Ralf Wildenhues * lib/fstrcmp.c (fstrcmp_bounded): Use a second, less quick upper bound based on character occurrence counts. 2008-09-15 Eric Blake tests: avoid some compiler warnings * tests/test-memchr.c (main): Pass NULL indirectly. * tests/test-closein.c (main): Avoid unused variable. 2008-09-15 Bruno Haible * m4/errno_h.m4 (gl_HEADER_ERRNO_H_BODY): Test for all the macros that are missing on OpenBSD 4.0 individually. Reported by Yoann Vandoorselaere . 2008-09-15 Bruno Haible * doc/posix-headers/errno.texi: Mention the Cygwin problem. * doc/posix-functions/strerror.texi: Mention also Cygwin. * doc/posix-functions/perror.texi: Likewise. * m4/errno_h.m4 (gl_HEADER_ERRNO_H_BODY): Test also whether ECANCELED is missing. Reported by Eric Blake. * lib/errno.in.h: Use replacement values >= 2000. Reported by Eric Blake. 2008-09-14 Ralf Wildenhues * lib/fstrcmp.c (EXTRA_CONTEXT_FIELDS): Add field 'edit_count_limit'. (EARLY_ABORT): Return true when the edit_count has grown too beyond the limit. (fstrcmp_bounded): Initialize the edit_count_limit. Return 0 when compareseq was aborted. 2008-09-14 Bruno Haible * lib/fstrcmp.c (EXTRA_CONTEXT_FIELDS): Combine xvec_edit_count and yvec_edit_count. (NOTE_DELETE, NOTE_INSERT): Increment the combined edit count. (fstrcmp_bounded): Simplify result computation accordingly. 2008-09-14 Ralf Wildenhues * lib/fstrcmp.h (fstrcmp_bounded): New declaration. (fstrcmp): Define in terms of fstrcmp_bounded. * lib/fstrcmp.c (fstrcmp_bounded): Renamed from fstrcmp. Add lower_bound argument. Return quickly if the result is certainly < lower_bound. * tests/test-fstrcmp.c (check_fstrcmp): Test also fstrcmp_bounded. 2008-09-14 Ralf Wildenhues * lib/diffseq.h (EARLY_ABORT): New macro. (compareseq): Change return type to bool. Return true when EARLY_ABORT evaluates to true. 2008-09-14 Bruno Haible * modules/perror-tests: New file. * tests/test-perror.sh: New file. * tests/test-perror.c: New file. New module 'perror'. * lib/stdio.in.h (perror): New declaration. * lib/perror.c: New file. * m4/perror.m4: New file. * modules/perror: New file. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add perror. * doc/posix-functions/perror.texi: Mention the perror module. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize GNULIB_PERROR, REPLACE_PERROR. * modules/stdio (Makefile.am): Substitute GNULIB_PERROR, REPLACE_PERROR. 2008-09-14 Bruno Haible * modules/stdio (Makefile.am): Reorder to match the order in lib/stdio.in.h. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. 2008-09-13 Bruno Haible * lib/sys_socket.in.h (EINPROGRESS, ...): Remove definitions. 2008-09-13 Bruno Haible Extend strerror to cover the added errno values. * lib/strerror.c: Include errno.h and winsock2.h if it exists. (rpl_strerror): Provide error messages for the added errno values and for the WSA* values. * m4/strerror.m4 (gl_FUNC_STRERROR): Test REPLACE_STRERROR. (gl_FUNC_STRERROR_SEPARATE): If errno.h is replaced, always replace strerror. (gl_PREREQ_STRERROR): Test whether winsock2.h exists. * modules/strerror (Depends-on): Add errno. * doc/posix-functions/strerror.texi: Document the change. * tests/test-strerror.c (main): Check also the string for ETIMEDOUT and EOVERFLOW. 2008-09-13 Bruno Haible * modules/EOVERFLOW: Remove file. * m4/eoverflow.m4: Remove file. * modules/EOVERFLOW-tests: Remove file. * tests/test-EOVERFLOW.c: Remove file. * modules/fprintf-posix (Depends-on): Replace EOVERFLOW with errno. * modules/ftell (Depends-on): Likewise. * modules/getdelim (Depends-on): Likewise. * modules/getugroups (Depends-on): Likewise. * modules/poll (Depends-on): Likewise. * modules/snprintf (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf (Depends-on): Likewise. * modules/vasprintf (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/xvasprintf (Depends-on): Likewise. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-vasprintf (Depends-on): Likewise. * modules/unistdio/u8-vsnprintf (Depends-on): Likewise. * modules/unistdio/u8-vsprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vsnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vsprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vsnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vsprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasprintf (Depends-on): Likewise. * modules/unistdio/u16-vsnprintf (Depends-on): Likewise. * modules/unistdio/u16-vsprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasprintf (Depends-on): Likewise. * modules/unistdio/u32-vsnprintf (Depends-on): Likewise. * modules/unistdio/u32-vsprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vsnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vsprintf (Depends-on): Likewise. * modules/unistdio/ulc-fprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasprintf (Depends-on): Likewise. * modules/unistdio/ulc-vfprintf (Depends-on): Likewise. * modules/unistdio/ulc-vsnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vsprintf (Depends-on): Likewise. * MODULES.html.sh: Remove EOVERFLOW. * NEWS: Mention the change. 2008-09-13 Bruno Haible * modules/errno-tests: New file. * tests/test-errno.c: New file, incorporating tests/test-EOVERFLOW.c. * lib/errno.in.h: New file. * m4/errno_h.m4: New file, borrowing from m4/eoverflow.m4. * modules/errno: New file. * doc/posix-headers/errno.texi: Update documentation. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add errno. 2008-09-13 Bruno Haible * tests/test-poll.c: Use #if for native Windows, rather than testing __MSVCRT__. 2008-09-13 Yoann Vandoorselaere Bruno Haible * lib/glob.c: Don't include on native Windows. (WINDOWS32): New macro. (glob) [WINDOW32]: Provide a reasonable replacement for getenv("HOME"). 2008-09-13 Bruno Haible * lib/glthread/cond.h [USE_SOLARIS_THREADS] (ETIMEDOUT): Remove macro. (glthread_cond_timedwait_multithreaded): New declaration. (glthread_cond_timedwait): Use it. * lib/glthread/cond.c [USE_SOLARIS_THREADS] (glthread_cond_timedwait_multithreaded): New function. 2008-09-12 Paolo Bonzini * modules/poll-tests: Do not check for io.h. * tests/test-poll.c: Check for __MSVCRT__ instead. 2008-09-12 Paolo Bonzini * lib/sys_socket.in.h (EINPROGRESS): Define for Winsock case. * modules/poll-tests: Add inet_pton, stdbool, sockets. * tests/test-poll.c: Use them. Use _pipe on Windows. 2008-09-12 Paolo Bonzini * modules/poll-tests: New. * tests/test-poll.c: New. 2008-09-12 Eric Blake frexp: test for NetBSD failure on -0.0 * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Enhance test, since some, but not all, bugs from NetBSD 3.0 have been fixed. * doc/posix-functions/frexp.texi (frexp): Document bug. Reported by Thomas Klausner. signbit: work around bug of HP-UX 10.20 cc with -0.0 literal * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Rewrite test to avoid literal -0.0. Reported by Jonathan C. Patschke . 2008-09-11 Yoann Vandoorselaere * lib/glthread/cond.h: Use dummy implementation also if USE_WIN32_THREADS. 2008-09-11 Yoann Vandoorselaere * modules/fnmatch-posix (License): Change to LGPLv2+. * modules/fnmatch-gnu (License): Likewise. 2008-09-11 Yoann Vandoorselaere * lib/poll.c (poll): Fix polling unconnected server sockets on WIN32. 2008-09-11 Jim Meyering * users.txt: Add gtk-vnc. 2008-09-08 Simon Josefsson * tests/test-bitrotate.c: Test 8/16-bit rotates with 0 and maximum rotate amounts. * lib/bitrotate.h: Doc fix, mention that N can be wider than minimally required for 16-bit and 8-bit rotates. * lib/bitrotate.h (rotl64, rotr64, rotl32, rotl32, rotl16, rotr16, rotl8, rotr8): Use UINT64_MAX, UINT32_MAX, UINT16_MAX, and UINT8_MAX instead of hard-coded constants. Suggested by Paul Eggert. 2008-09-07 Bruno Haible * tests/test-striconveh.c (main): Check behaviour when converting from UTF-7. Make striconveh work better with stateful encodings. * lib/striconveh.c (iconv_carefully, iconv_carefully_1): Don't assume that iconv does not increment the inptr when returning -1/EINVAL. 2008-09-07 Bruno Haible * build-aux/config.rpath: Update according to libtool-2.2.6. * build-aux/config.libpath: Likewise. 2008-09-06 Bruno Haible * lib/freadahead.c (freadahead): Add conditional for SLOW_BUT_NO_HACKS. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. Reported by Simon Josefsson. 2008-09-06 Bruno Haible * modules/freadptr (License): Change to LGPLv2+. * modules/freadseek (License): Likewise. Suggested by Eric Blake. * modules/memchr2 (License): Change to LGPLv2+. Approved by Eric Blake. 2008-09-04 Ralf Wildenhues Bruno Haible Make gnulib-tool work with native 'sed' on AIX. * gnulib-tool (sed_noop): New variable. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am, func_import, func_add_or_update, func_create_testdir): Use it to initialize sed script variables. Reported by Albert Chin . 2008-09-04 Albert Chin Bruno Haible * m4/include_next.m4 (gl_INCLUDE_NEXT): Add check whether #include_next also works after #include directives. 2008-09-04 Ondřej Vašík getdate.y: reject an out-of-range timezone value * lib/getdate.y (time_zone_hhmm): Reject any TZ offset that is outside the range [-24...+24]. When specified with only one or two digits, * tests/test-getdate.c: Tests for the fix. * doc/getdate.texi: Document this change. 2008-09-03 Bruno Haible * doc/glibc-functions/strverscmp.texi: Mention the strverscmp module. 2008-09-02 Simon Josefsson * lib/bitrotate.h (rotl64, rotr64): Add. Suggested by Bruce Korb with ideas from Ben Pfaff , Bruno Haible and Eric Blake . * tests/test-bitrotate.c: Add more test vectors. 2008-09-02 Eric Blake vasnprintf-posix: handle large precision via %.*d * lib/vasnprintf.c (VASNPRINTF): Don't pass precision to snprintf when handling it ourselves. * tests/test-vasnprintf-posix.c (test_function): Add test. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. Reported by Alain Guibert. 2008-09-01 Eric Blake c-stack: make configure-time check more robust * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Check for successful sigaction call. Reported by Tom G. Christensen. 2008-09-01 Bruno Haible New module 'findprog-lgpl'. * modules/findprog-lgpl: New file. * lib/findprog-lgpl.c: New file. * lib/findprog.c: Compile nothing in findprog.c if findprog-lgpl.c is also compiled. Consider the possibly defined symbol IN_FINDPROG_LGPL to decide whether to use strdup or xstrdup, concatenated_filename or xconcatenated_filename. 2008-09-01 Bruno Haible Split module 'concat-filename' into 'concat-filename' (LGPL) and 'xconcat-filename' (GPL). * modules/concat-filename (Depends-on): Add malloc-posix, remove xalloc. (License): Change to LGPLv2+. * modules/xconcat-filename: New file. * lib/concat-filename.h (concatenated_filename): Change specification. (xconcatenated_filename): New declaration. * lib/concat-filename.c: Include errno.h, stdlib.h, not xalloc.h. (concatenated_filename): Use malloc instead of xalloc. Handle out-of- memory situations. * lib/xconcat-filename.c: New file. * NEWS: Mention the change. * lib/findprog.c: Include concat-filename.h, not filename.h. (find_in_path): Use xconcatenated_filename instead of concatenated_filename. * lib/javacomp.c: Include concat-filename.h, not filename.h. (is_envjavac_gcj43_usable, is_envjavac_oldgcj_14_14_usable, is_envjavac_oldgcj_14_13_usable, is_envjavac_nongcj_usable, is_gcj_present, is_gcj43_usable, is_oldgcj_14_14_usable, is_oldgcj_14_13_usable, is_javac_usable): Use xconcatenated_filename instead of concatenated_filename. * lib/javaexec.c: Include concat-filename.h, not filename.h. (execute_java_class): Use xconcatenated_filename instead of concatenated_filename. * modules/findprog (Depends-on): Add xconcat-filename, remove filename. * modules/javacomp (Depends-on): Likewise. * modules/javaexec (Depends-on): Likewise. 2008-09-01 Bruno Haible Split module 'filename' into 'filename' and 'concat-filename'. * modules/filename: Keep only lib/filename.h. (License): Change to LGPLv2+. * modules/concat-filename: New file, extracted from modules/filename. * lib/filename.h (concatenated_filename): Remove declaration. * lib/concat-filename.h: New file, extracted from lib/filename.h. * lib/concat-filename.c: Include concat-filename.h. * NEWS: Mention the change. 2008-09-01 Simon Josefsson * lib/bitrotate.h (rotl8, rotr8): Add. * modules/bitrotate (configure.ac): Need AC_REQUIRE([AC_C_INLINE]). (Description): Mention stdint.h. Reported by Bruno Haible . * lib/bitrotate.h (rotr16, rotl16): Fix mask value. Reported by Paolo Bonzini . 2008-08-31 Bruno Haible Assume Solaris specific bi-arch conventions on Solaris systems. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): On Solaris in 64-bit mode, set acl_libdirstem to lib/64. Also set acl_libdirstem2. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): If acl_libdirstem does not work, try acl_libdirstem2 as fallback. Otherwise treat acl_libdirstem2 like acl_libdirstem. (AC_LIB_LINKFLAGS_FROM_LIBS): Treat acl_libdirstem2 like acl_libdirstem. * NEWS: Mention the change. Reported by Ben Taylor . 2008-08-31 Jim Meyering * lib/strftime.h: Add comments describing the two added arguments. remove duplicate #include directives * lib/chdir-long.c [TEST_CHDIR]: Remove duplicate #include . * lib/putenv.c: Remove duplicate #include . 2008-08-31 Bruno Haible New module 'sigpipe-die'. * modules/sigpipe-die: New file. * lib/sigpipe-die.h: New file. * lib/sigpipe-die.c: New file. * MODULES.html.sh (Signal handling): Add sigpipe-die. 2008-08-31 Bruno Haible Don't override previously installed signal handlers. * lib/fatal-signal.c (saved_sigactions): New variable. (uninstall_handlers): Reset the signal to the saved handler, not to SIG_DFL (except when ignored). (install_handlers): Save the previous handlers. 2008-08-30 Bruno Haible * gnulib-tool (func_reset_sigpipe): New function. (func_get_automake_snippet, func_modules_transitive_closure, func_import): Invoke it before a join command that reads from stdin, to avoid "echo: write error: Broken pipe" error messages on stderr. Reported by Sam Steingold . 2008-08-30 Bruno Haible * m4/fopen.m4 (gl_FUNC_FOPEN): Test against bug with trailing slash. Code copied from m4/open.m4. * lib/fopen.c (rpl_fopen): Return NULL if the mode specifies write access and the filename ends in a slash. Code copied from lib/open.c. * doc/posix-functions/fopen.texi: Document bug with trailing slash. * tests/test-fopen.c (main): Check against bug with trailing slash. 2008-08-29 Bruno Haible Avoid some "gcc -pedantic" warnings. * m4/include_next.m4 (gl_INCLUDE_NEXT): Set also PRAGMA_SYSTEM_HEADER. * lib/arpa_inet.in.h: Use PRAGMA_SYSTEM_HEADER. * lib/dirent.in.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/float.in.h: Likewise. * lib/iconv.in.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/locale.in.h: Likewise. * lib/math.in.h: Likewise. * lib/netinet_in.in.h: Likewise. * lib/search.in.h: Likewise. * lib/signal.in.h: Likewise. * lib/stdarg.in.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/string.in.h: Likewise. * lib/strings.in.h: Likewise. * lib/sys_select.in.h: Likewise. * lib/sys_socket.in.h: Likewise. * lib/sys_stat.in.h: Likewise. * lib/sys_time.in.h: Likewise. * lib/sysexits.in.h: Likewise. * lib/time.in.h: Likewise. * lib/unistd.in.h: Likewise. * lib/wchar.in.h: Likewise. * lib/wctype.in.h: Likewise. * modules/arpa_inet (Makefile.am): Also substitute PRAGMA_SYSTEM_HEADER. * modules/fchdir (Makefile.am): Likewise. * modules/fcntl (Makefile.am): Likewise. * modules/float (Makefile.am): Likewise. * modules/iconv_open (Makefile.am): Likewise. * modules/inttypes (Makefile.am): Likewise. * modules/locale (Makefile.am): Likewise. * modules/math (Makefile.am): Likewise. * modules/netinet_in (Makefile.am): Likewise. * modules/search (Makefile.am): Likewise. * modules/signal (Makefile.am): Likewise. * modules/stdarg (Makefile.am): Likewise. * modules/stdint (Makefile.am): Likewise. * modules/stdio (Makefile.am): Likewise. * modules/stdlib (Makefile.am): Likewise. * modules/string (Makefile.am): Likewise. * modules/strings (Makefile.am): Likewise. * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sys_time (Makefile.am): Likewise. * modules/sysexits (Makefile.am): Likewise. * modules/time (Makefile.am): Likewise. * modules/unistd (Makefile.am): Likewise. * modules/wchar (Makefile.am): Likewise. * modules/wctype (Makefile.am): Likewise. Reported by Reuben Thomas . 2008-08-29 Bruno Haible * m4/include_next.m4 (gl_INCLUDE_NEXT): Don't define HAVE_INCLUDE_NEXT any more. 2008-08-29 Simon Josefsson * MODULES.html.sh (Misc): Add bitrotate. * modules/bitrotate: New file. * lib/bitrotate.h: New file. * modules/bitrotate-tests: New file. * tests/test-bitrotate.c: New file. * modules/crypto/gc-arctwo, modules/crypto/arctwo: Add dependency on the bitrotate module. * lib/arctwo.c: Use new bitrotate module. 2008-08-29 Jim Meyering bootstrap: merge changes from coreutils * build-aux/bootstrap (cp_mark_as_generated): Preserve perms of copied files. Remove a kludge, now that this is fixed. * build-aux/bootstrap: Fix unportable expr usage. (by Ralf Wildenhues) * build-aux/bootstrap: Remove $bt and $bt2 also when not using gettext. * build-aux/bootstrap: Remove coreutils-specific SUBDIRS-related code. 2008-08-29 Bruno Haible * MODULES.html.sh: Remove --cvs-urls option. 2008-08-28 Jose E. Marchesi (tiny change) maint.mk: adjust to file name change * top/maint.mk: s/Makefile.cfg/cfg.mk/. 2008-08-28 Jim Meyering * modules/getndelim2 (License): Relicense to LGPLv2+. Approved by Richard Stallman for the version of 1995, and by Paul Eggert, Bruno Haible, Eric Blake for their contributions. 2008-08-27 Paolo Bonzini * lib/getdelim.c (flockfile, funlockfile): Make all of them dummy if one is not available. Do not touch them if USE_UNLOCKED_IO, instead letting unlocked-io.h do that. (getc_maybe_unlocked): New. * m4/getdelim.m4 (gl_PREREQ_GETDELIM): Check for getc_unlocked. 2008-08-26 Eric Blake doc/INSTALL: resync from autoconf * doc/Makefile (INSTALL, INSTALL.ISO, INSTALL.UTF-8): Simplify. (INSTALL_PRELUDE): Delete; this is done more efficiently by moving... * install.texi [!autoconf]: ...here. Resync from autoconf. * INSTALL: Regenerate. * INSTALL.ISO: New file. * INSTALL.UTF-8: Likewise. 2008-08-26 Jim Meyering GNUmakefile: cfg.mk definitions override default autoreconf-rerun policy * top/GNUmakefile (_is-dist-target, _is-install-target): Make these definitions conditional, so that they may be overridden, too. 2008-08-26 Bruno Haible Generate INSTALL file variants with prettier quotes. * doc/Makefile (INSTALL_PRELUDE): New macro. (INSTALL): Use it. (INSTALL.ISO, INSTALL.UTF-8): New rules. 2008-08-26 Bruno Haible Run makeinfo in an English locale. * doc/Makefile (MAKEINFO): New variable. 2008-08-26 Bruno Haible * doc/Makefile (INSTALL): Use --no-validate instead of --no-warn. Suggested by Eric Blake. 2008-08-25 Bruno Haible * doc/Makefile (INSTALL): Generate with @firstparagraphindent set. 2008-08-25 Eric Blake c-stack: test that stack overflow can be caught * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Also check that platform allows handling stack overflow; at least OS/2 EMX has sigaltstack, but crashes before transferring control to handler on stack overflow. * lib/c-stack.c [HAVE_SIGALTSTACK]: Adjust conditions to also check for HAVE_STACK_OVERFLOW_HANDLING. Reported by Elbert Pol. 2008-08-25 Bruno Haible * doc/posix-functions/strftime.texi: Fix description of strftime module. 2008-08-24 Bruno Haible * tests/uniwidth/test-uc_width2.c: New file. * tests/uniwidth/test-uc_width2.sh: New file. * modules/uniwidth/width-tests (Files): Add the new files. (TESTS): Add uniwidth/test-uc_width2.sh. (TESTS_ENVIRONMENT): New variable. (check_PROGRAMS): Add test-uc_width2. (test_uc_width2_SOURCES): New variable. Fix uc_width(0x00AB) bug, introduced on 2007-07-08. * lib/uniwidth/width.c (nonspacing_table_data): Set bit for 0x00AD, not 0x00AB. Reported by Alexander V. Lukyanov . 2008-08-22 Eric Blake test-lock, test-tls: mention why a test is skipped * tests/test-lock.c (main) [!USE_*_THREADS]: Print why test is skipped. * tests/test-tls.c (main) [!USE_*_THREADS]: Likewise. count-one-bits: relax license * modules/count-one-bits (License): Relicense to LGPLv2+. Suggested by Ludovic Courtès, approved by Ben Pfaff. 2008-08-22 Andreas Schwab * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_POSIX): Remove spurious space in assignment. 2008-08-21 Simon Josefsson * m4/autobuild.m4: Use TZ=UTC0 instead of TZ=UTC. Reported by Paul Eggert . 2008-08-20 Paolo Bonzini * modules/gettext: Add m4/threadlib.m4. 2008-08-19 Eric Blake test-c-stack: fix compilation failure on FreeBSD 5.0 * tests/test-c-stack.c [HAVE_SETRLIMIT]: Include prerequisite headers before . * doc/posix-headers/sys_resource.texi (sys/resource.h): Document the bug. Reported by Nelson H. F. Beebe. strverscmp: migrate from "strverscmp.h" to * modules/string (Makefile.am): Add new hooks. * modules/strverscmp (Files): Remove strverscmp.h. (Depends-on): Add string. (configure.ac): Add indicator. (Include): Mention new header. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Provide new defaults. * m4/strverscmp.m4 (gl_FUNC_STRVERSCMP): Inform string module of results. * lib/strverscmp.h: Delete. * lib/string.in.h (strverscmp): Provide declaration, when needed. * tests/test-strverscmp.c (includes): Adjust client. * lib/check-version.c (includes): Likewise. * NEWS: Document the change. strverscmp: add unit test * modules/strverscmp-tests: New file. * tests/test-strverscmp.c: Likewise. 2008-08-19 Simon Josefsson * lib/gc-gnulib.c: Indentation cleanup. Add some comments regarding Windows crypto stuff, from Mono. 2008-08-19 Adam Strzelecki (tiny change) * lib/gc-gnulib.c: Use CRYPT_VERIFY_CONTEXT. Try to use Intel CSP if present, for intel RND. Return error on failures. 2008-08-18 Ben Pfaff gitlog-to-changelog: give better diagnostic for failed pipe-open * build-aux/gitlog-to-changelog: Improve error message: suggest that the version of Git may be too old. 2008-08-18 Simon Josefsson * m4/autobuild.m4: Use TZ=UTC to avoid time zone complexity. Use ISO 8601 format. Suggested by Greg Troxel . 2008-08-18 Bruno Haible * lib/glthread/thread.h [USE_SOLARIS_THREADS]: Use thread_in_use(), not pthread_in_use(). 2008-08-18 Bruno Haible * lib/glthread/threadlib.c: Include . 2008-08-18 Bruno Haible * lib/glthread/lock.h [USE_SOLARIS_THREADS]: Fix glthread_recursive_lock_* macros. * lib/glthread/lock.c (glthread_recursive_lock_destroy_multithreaded): Fix syntax error. 2008-08-18 Bruno Haible * lib/glthread/thread.c: Avoid forcing a context switch right after thread creation. 2008-08-17 Bruno Haible * lib/glthread/thread.c: New file, based on code from tests/test-lock.c. * lib/glthread/thread.h: Provide Win32 specific implementation. * modules/thread (Files): Add lib/glthread/thread.c. (Depends-on): Add lock. (Makefile.am): Add glthread/thread.c to lib_SOURCES. 2008-08-17 Yoann Vandoorselaere New module 'yield'. * modules/yield: New file. * lib/glthread/yield.h: New file. * m4/yield.m4: New file. * MODULES.html.sh (Multithreading): Add yield. 2008-08-17 Yoann Vandoorselaere New module 'thread'. * modules/thread: New file. * lib/glthread/thread.h: New file. * m4/thread.m4: New file. * MODULES.html.sh (Multithreading): Add thread. 2008-08-17 Bruno Haible * lib/glthread/lock.h: Include always. * lib/glthread/tls.h: Likewise. * lib/glthread/cond.h: Likewise. 2008-08-17 Yoann Vandoorselaere New module 'cond'. * modules/cond: New file. * lib/glthread/cond.h: New file. * lib/glthread/cond.c: New file. * m4/cond.m4: New file. * MODULES.html.sh (Multithreading): Add cond. 2008-08-16 Eric Blake c-stack: fix regression on Irix 5.3 from 2008-06-21 * m4/c-stack.m4 (gl_PREREQ_C_STACK): Move check for sa_sigaction... * m4/sigaction.m4 (gl_PREREQ_SIG_HANDLER_H): ...here. (gl_PREREQ_SIGACTION): Depend on sig-handler.h prereq's. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Set the default. * modules/signal (Makefile.am): Use the value. * lib/signal.in.h (sa_sigaction) [HAVE_SIGACTION && !HAVE_STRUCT_SIGACTION_SA_SIGACTION]: Define. * doc/posix-headers/signal.texi (signal.h): Document this portability issue. * doc/posix-functions/sigaction.texi (sigaction): Likewise. Reported by Tom G. Christensen. 2008-08-17 Bruno Haible New module 'threadlib'. * modules/threadlib: New file. * lib/glthread/threadlib.c: New file, extracted from lib/glthread/lock.c. * lib/glthread/lock.c (dummy_thread_func, glthread_in_use): Remove functions. * m4/threadlib.m4: New file, from m4/lock.m4, renaming gl_LOCK to gl_THREADLIB and gl_LOCK_EARLY to gl_THREADLIB_EARLY. * m4/lock.m4 (gl_LOCK_EARLY, gl_LOCK_EARLY_BODY, gl_LOCK_BODY): Remove macros. (gl_LOCK): Just require gl_THREADLIB and perform checks for lock.h. (gl_DISABLE_THREADS): Remove macro. * modules/lock (Files): Remove build-aux/config.rpath. (Depends-on): Remove havelib. Add threadlib. (configure.ac-early): Remove section. * m4/tls.m4 (gl_TLS): Require gl_THREADLIB instead of gl_LOCK. * modules/tls (Depends-on): Remove lock. Add threadlib. (Link): New section, copied from threadlib. * MODULES.html.sh (Multithreading): Add threadlib. 2008-08-14 Bruno Haible * lib/glthread/lock.h (glthread_lock_lock, glthread_lock_unlock, glthread_lock_destroy, glthread_rwlock_rdlock, glthread_rwlock_wrlock, glthread_rwlock_unlock, glthread_rwlock_destroy, glthread_recursive_lock_lock, glthread_recursive_lock_unlock, glthread_recursive_lock_destroy): Define as macros always. * lib/glthread/lock.c (glthread_lock_lock_func): Renamed from glthread_lock_lock. (glthread_lock_unlock_func): Renamed from glthread_lock_unlock. (glthread_lock_destroy_func): Renamed from glthread_lock_destroy. (glthread_rwlock_rdlock_func): Renamed from glthread_rwlock_rdlock. (glthread_rwlock_wrlock_func): Renamed from glthread_rwlock_wrlock. (glthread_rwlock_unlock_func): Renamed from glthread_rwlock_unlock. (glthread_rwlock_destroy_func): Renamed from glthread_rwlock_destroy. (glthread_recursive_lock_lock_func): Renamed from glthread_recursive_lock_lock. (glthread_recursive_lock_unlock_func): Renamed from glthread_recursive_lock_unlock. (glthread_recursive_lock_destroy_func): Renamed from glthread_recursive_lock_destroy. 2008-08-14 Bruno Haible * lib/glthread/lock.h: Renamed from lib/lock.h. * lib/glthread/lock.c: Renamed from lib/lock.c. Update includes. * lib/glthread/tls.h: Renamed from lib/tls.h. * lib/glthread/tls.c: Renamed from lib/tls.c. Update includes. * lib/fstrcmp.c: Update includes. * lib/strsignal.c: Update includes. * modules/lock (Files, Makefile.am): Update. (Include): Change to "glthread/lock.h". * modules/tls (Files, Makefile.am): Update. (Include): Change to "glthread/tls.h". * tests/test-lock.c: Update includes. * tests/test-tls.c: Update includes. * NEWS: Mention the renamed header files. 2008-08-11 Jim Meyering * lib/fts_.h: Fix grammar (insert a missing "is") in a comment. 2008-08-11 Eric Blake test-c-stack: avoid C99-ism * tests/test-c-stack.c (main): Fix whitespace, move declaration before statement. Reported by Alain Guibert. 2008-08-10 Jim Meyering ensure that return value of uinttostr et al are not ignored * lib/inttostr.h (__GNUC_PREREQ): Define. (__attribute_warn_unused_result__): Define. (offtostr, imaxtostr, umaxtostr, uinttostr): Apply the attribute. 2008-08-07 Paolo Bonzini * lib/lock.c (glthread_recursive_lock_init_multithreaded) [!PTHREAD_RECURSIVE_MUTEX_INITIALIZER]: Fix typo. 2008-08-07 Jim Meyering * m4/inet_pton.m4: Fix typo in comment: s/inet_ntop/inet_pton/. * modules/mkstemp (License): Relicense under LGPLv2+. * modules/tempname (License): Likewise. 2008-08-06 Bruno Haible * lib/poll.c (poll): Further micro-optimization. 2008-08-06 Jim Meyering inet_pton.c: use locale-independent tolower * lib/inet_pton.c: Include rather than . (inet_pton6): Use c_tolower rather than tolower. * modules/inet_pton (Depends-on): Add c-ctype. 2008-08-06 Paolo Bonzini * lib/poll.c (poll): Avoid division when timeout is 0, cache _SC_OPEN_MAX, avoid repeated access to errno. Check for nfd < 0. 2008-08-06 Jim Meyering * modules/inet_pton (License): Relicense under LGPLv2+. 2008-08-03 Bruno Haible Additional non-aborting API for lock and tls. * lib/lock.h: Include . (glthread_lock_init): New macro/function. (gl_lock_init): Define as wrapper around glthread_lock_init. (glthread_lock_lock): New macro/function. (gl_lock_lock): Define as wrapper around glthread_lock_lock. (glthread_lock_unlock): New macro/function. (gl_lock_unlock): Define as wrapper around glthread_lock_unlock. (glthread_lock_destroy): New macro/function. (gl_lock_destroy): Define as wrapper around glthread_lock_destroy. (glthread_rwlock_init): New macro/function. (gl_rwlock_init): Define as wrapper around glthread_rwlock_init. (glthread_rwlock_rdlock): New macro/function. (gl_rwlock_rdlock): Define as wrapper around glthread_rwlock_rdlock. (glthread_rwlock_wrlock): New macro/function. (gl_rwlock_wrlock): Define as wrapper around glthread_rwlock_wrlock. (glthread_rwlock_unlock): New macro/function. (gl_rwlock_unlock): Define as wrapper around glthread_rwlock_unlock. (glthread_rwlock_destroy): New macro/function. (gl_rwlock_destroy): Define as wrapper around glthread_rwlock_destroy. (glthread_recursive_lock_init): New macro/function. (gl_recursive_lock_init): Define as wrapper around glthread_recursive_lock_init. (glthread_recursive_lock_lock): New macro/function. (gl_recursive_lock_lock): Define as wrapper around glthread_recursive_lock_lock. (glthread_recursive_lock_unlock): New macro/function. (gl_recursive_lock_unlock): Define as wrapper around glthread_recursive_lock_unlock. (glthread_recursive_lock_destroy): New macro/function. (gl_recursive_lock_destroy): Define as wrapper around glthread_recursive_lock_destroy. (glthread_once): New macro/function. (gl_once): Define as wrapper around glthread_once. Update function declarations. * lib/lock.c (glthread_rwlock_init_multithreaded): Renamed from glthread_rwlock_init. Return error code. (glthread_rwlock_rdlock_multithreaded): Renamed from glthread_rwlock_rdlock. Return error code. (glthread_rwlock_wrlock_multithreaded): Renamed from glthread_rwlock_wrlock. Return error code. (glthread_rwlock_unlock_multithreaded): Renamed from glthread_rwlock_unlock. Return error code. (glthread_rwlock_destroy_multithreaded): Renamed from glthread_rwlock_destroy. Return error code. (glthread_recursive_lock_init_multithreaded): Renamed from glthread_recursive_lock_init. Return error code. (glthread_recursive_lock_lock_multithreaded): Renamed from glthread_recursive_lock_lock. Return error code. (glthread_recursive_lock_unlock_multithreaded): Renamed from glthread_recursive_lock_unlock. Return error code. (glthread_recursive_lock_destroy_multithreaded): Renamed from glthread_recursive_lock_destroy. Return error code. (glthread_once_call): Make static. (glthread_once_multithreaded): Renamed from glthread_once. * lib/tls.h: Include . (glthread_tls_key_init): New macro/function. (gl_tls_key_init): Define as wrapper around glthread_tls_key_init. (glthread_tls_set): New macro/function. (gl_tls_set): Define as wrapper around glthread_tls_set. (glthread_tls_key_destroy): New macro/function. (gl_tls_key_destroy): Define as wrapper around glthread_tls_key_destroy. Update function declarations. * lib/tls.c (glthread_tls_get_multithreaded): Renamed from glthread_tls_get. Suggested by Yoann Vandoorselaere . 2008-08-04 Eric Blake gnumakefile: use space, not TAB, outside of targets * top/GNUmakefile (_dummy): Fix whitespace error in prior edit. 2008-08-02 Jim Meyering getdate.y: avoid locale-dependent date parsing failure In Turkish locales, getdate would fail to recognize keywords containing a lowercase "i". The solution is not to rely on locale-sensitive case-conversion. * lib/getdate.y: Include rather than . (lookup_word): Use c_toupper in place of toupper. (yylex, get_date): Use c_ prefixed variants of isspace and isalpha, too. Reported by Vefa Bicakci in . * modules/getdate (Depends-on): Add c-ctype. 2008-08-02 Bruno Haible * gnulib-tool (func_import): When updating or creating a .gitignore file, prepend each added line with a slash, and ignore leading slashes from the existing lines. Reported by Joel E. Denny . 2008-08-02 Ralf Wildenhues Portability fix for GNU make 3.79.1. * top/GNUmakefile: Avoid 'else COND', which older GNU make versions do not understand. 2008-08-01 Bruno Haible Work around bug of HP-UX 10.20 cc with -0.0 literal. * tests/test-isnanf.h (zero): New variable. (main): Avoid literal -0.0f. * tests/test-isnand.h (zero): New variable. (main): Avoid literal -0.0. * tests/test-isnanl.h (zero): New variable. (main): Avoid literal -0.0L. * tests/test-isnan.c (zerof, zerod, zerol): New variables. (test_float, test_double, test_long_double): Avoid literals -0.0f, -0.0, -0.0L. * tests/test-signbit.c (test_signbitf): Avoid literal -0.0f. (test_signbitd): Avoid literal -0.0. (test_signbitl): Avoid literal -0.0L. * tests/test-ceilf1.c (zero): New variable. (main): Avoid literal -0.0f. * tests/test-ceill.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-floorf1.c (zero): New variable. (main): Avoid literal -0.0f. * tests/test-floorl.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-roundf1.c (zero): New variable. (main): Avoid literal -0.0f. * tests/test-round1.c (zero): New variable. (main): Avoid literal -0.0. * tests/test-roundl.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-truncf1.c (zero): New variable. (main): Avoid literal -0.0f. * tests/test-trunc1.c (zero): New variable. (main): Avoid literal -0.0. * tests/test-truncl.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-frexp.c (zero): New variable. (main): Avoid literal -0.0. * tests/test-frexpl.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-ldexpl.c (zero): New variable. (main): Avoid literal -0.0L. * tests/test-snprintf-posix.h (have_minus_zero): Avoid literal -0.0. (zerod, zerol): New variables. (test_function): Avoid literals -0.0, -0.0L. * tests/test-sprintf-posix.h (have_minus_zero): Avoid literal -0.0. (zerod, zerol): New variables. (test_function): Avoid literals -0.0, -0.0L. * tests/test-vasnprintf-posix.c (have_minus_zero): Avoid literal -0.0. (zerod, zerol): New variables. (test_function): Avoid literals -0.0, -0.0L. * tests/test-vasprintf-posix.c (have_minus_zero): Avoid literal -0.0. (zerod, zerol): New variables. (test_function): Avoid literals -0.0, -0.0L. * tests/test-strtod.c (zero): New variable. (main): Avoid literal -0.0. Reported by Jonathan C. Patschke . 2008-07-31 Jim Meyering sha256.h: correct definition of SHA224_DIGEST_SIZE * lib/sha256.h (SHA224_DIGEST_SIZE): Define to 28, not 24. Reported by Paulie Pena IV . Define as 224 / 8, rather than as a literal. (SHA256_DIGEST_SIZE): Define as 256/8 rather than equivalent literal. * lib/sha512.h (SHA384_DIGEST_SIZE): Likewise, define as equiv: 384/8. (SHA512_DIGEST_SIZE): Likewise, define as equivalent quotient: 512/8. 2008-07-31 Bruno Haible * lib/regex_internal.h (BITSET_WORD_BITS): Make first conditional work on HP-UX 10.20 with "cc -Ae". Fix second conditional. Reported by Jonathan Patschke . 2008-07-31 Bruno Haible * gnulib-tool (func_import): Make change from 2008-06-23 more robust. Reported by Paolo Bonzini . 2008-07-30 Eric Blake test-strtod: allow compilation without -lm * tests/test-strtod.c (main): Avoid link dependence on fabs. Reported by Dennis Clarke . 2008-07-28 Jim Meyering bootstrap: work also when there are no .po files in po/ * build-aux/bootstrap (update_po_files): Complete the change that I began in bc960df8c789c878f1c1c54a28a3c2648dead8d9. 2008-07-27 Jim Meyering * users.txt: Add zile. 2008-07-26 Ben Pfaff Add missing dependencies on new m4/exponent[fdl].m4 files. * modules/isnanf-nolibm: Add m4/exponentf.m4. * modules/isnand-nolibm: Add m4/exponentd.m4. * modules/isnanl-nolibm: Add m4/exponentl.m4. * modules/signbit-tests: Use m4/exponent[fdl].m4 instead of m4/isnan[fdl].m4, because the macros actually used moved. Reported by Jim Meyering. 2008-07-14 Ben Pfaff Add isinf module. * lib/isinf.c: New file. * lib/math.in.h: Define isinf macro if we have decided to replace it. * m4/isinf.m4: New file. * m4/math_h.m4: Initialize and substitute variables for isinf module. * modules/isinf: New file. * modules/isinf-tests: New file. * modules/math: Add substitutions for new module. * tests/test-isinf.c: New file. * doc/posix-functions/isinf.texi: Mention new module. * MODULES.html.sh: Mention new module. 2008-07-14 Ben Pfaff Factor out some macros for use by additional modules. * m4/isnanf.m4 (gl_FLOAT_EXPONENT_LOCATION): Move into new file exponentf.m4. * m4/isnand.m4 (gl_DOUBLE_EXPONENT_LOCATION): Move into new file exponentd.m4. * m4/isnanl.m4 (gl_LONG_DOUBLE_EXPONENT_LOCATION): Move into new file exponentl.m4. * m4/exponentf.m4: New file. * m4/exponentd.m4: New file. * m4/exponentl.m4: New file. * modules/isnanf: Use new file m4/exponentf.m4. * modules/isnand: Use new file m4/exponentd.m4. * modules/isnanl: Use new file m4/exponentl.m4. 2008-07-23 Ulrich Drepper mktime.c: normalize tp->tm_isdst value to -1/0/1. * lib/mktime.c (__mktime_internal): Normalize tp->tm_isdst value. Reported by Michael Ringe in . * lib/canonicalize-lgpl.c (__realpath): Avoid buffer overflow after readlink on platforms without PATH_MAX. 2008-07-21 Eric Blake Warn, not fail, on stale version. * top/GNUmakefile (_curr-ver): Tone down previous patch. Don't allow installation with stale devel version number. * top/GNUmakefile (_is-install-target): New macro. (_curr-ver): Forbid installation with stale version number. 2008-07-20 Bruno Haible * modules/c-stack-tests (Makefile.am): Add LIBSIGSEGV to TESTS_ENVIRONMENT. * tests/test-c-stack2.sh: React differently if LIBSIGSEGV is in use. 2008-07-20 Bruno Haible * lib/c-stack.h (c_stack_action): Add documentation. * lib/c-stack.c (c_stack_action): Remove incomplete documentation. 2008-07-20 Bruno Haible * modules/canonicalize-lgpl (License): Relicense under LGPLv2+. * modules/readlink (License): Likewise. 2008-07-17 Eric Blake * modules/c-stack (Link): Fix typo. Make c-stack use libsigsegv, when available. * modules/c-stack (Depends-on): Add libsigsegv. * modules/c-stack-tests (Makefile.am): Link with libsigsegv, if needed. * lib/c-stack.c (SIGSTKSZ): Define fallback. (segv_handler, overflow_handler, c_stack_action) [HAVE_LIBSIGSEGV && !HAVE_XSI_STACK_OVERFLOW_HEURISTIC]: Add new implementation when libsigsegv is available, but only when using the library is necessary. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Add comment, explaining why XSI check fails on Linux. (gl_PREREQ_C_STACK): Supply LIBCSTACK, LTLIBCSTACK. * tests/test-c-stack2.sh: Tweak skip message. * NEWS: Document new link-time requirements. 2008-07-16 Eric Blake c-stack: Expose false positives when not using libsigsegv. * modules/c-stack-tests (Files): Expand test. * tests/test-c-stack.c (main): Add means to conditionally trigger non-overflow SIGSEGV. * tests/test-c-stack2.sh: New file. 2008-07-14 Bruno Haible * m4/libsigsegv.m4: Remove unneeded AC_PREREQ. Reported by Eric Blake. 2008-07-14 Sam Steingold Bruno Haible New module libsigsegv. * modules/libsigsegv: New file. * m4/libsigsegv.m4: New file, from GNU clisp sigsegv.m4 with modifications. * MODULES.html.sh (Signal handling): New section. 2008-07-14 Bruno Haible * modules/unictype/ctype-* (Description): Add the word "function". Improves the resulting doc in MODULES.html. 2008-07-12 Ben Pfaff Add longlong module. * modules/longlong: New file. 2008-07-12 Bruno Haible * m4/isnan.m4 (gl_ISNAN): When the replacement is used, set ISNAN_LIBM to empty. 2008-07-10 Ben Pfaff Add isnan module. * doc/posix-functions/isnan.texi: Mention new module. * lib/math.in.h: Define isnan macro if we have decided to replace it. * m4/isnan.m4: New file. * m4/isnanl.m4 (gl_FUNC_ISNANL): Factor out some code into new macro gl_BUILD_ISNANL so that isnan.m4 can use that functionality also. (gl_FUNC_ISNANL_NO_LIBM): Factor out same code, to reduce redundancy. * m4/math_h.m4: Initialize and substitute variables for isnan module. * modules/isnan: New file. * modules/isnan-tests: New file. * modules/math: Add substitutions for new module. * tests/test-isnan.c: New file. * MODULES.html.sh: Mention new module. 2008-07-10 Ben Pfaff Add isnanf module. * lib/isnanf.m4: New file. * m4/isnanf.m4 (gl_FUNC_ISNANF): New macro. (gl_HAVE_ISNANF_IN_LIBM): New macro. (gl_BUILD_ISNANF): New macro used by gl_FUNC_ISNANF, gl_FUNC_ISNANF_NO_LIBM, and gl_FUNC_ISNAN. * modules/isnanf: New file. * modules/isnanf-tests: New file. * modules/isnanf-nolibm-tests: Add tests/test-isnanf.h to list of files. * tests/test-isnanf-nolibm.c: factored most of its contents into new file tests/test-isnanf.h. * tests/test-isnanf.h: New file. * tests/test-isnanf.c: New file. * MODULES.html.sh: Mention new module. * doc/glibc-functions/isnanf.texi: Mention new module. 2008-07-10 Ben Pfaff Add isnand module. * lib/isnand.h: New file. * m4/isnand.m4 (gl_FUNC_ISNAND): New macro. (gl_FUNC_ISNAND_NO_LIBM): Split partially into new macro gl_HAVE_ISNAND_NO_LIBM so that gl_FUNC_ISNAND can use that functionality also. (gl_BUILD_ISNAND): New macro used by gl_FUNC_ISNAND, gl_FUNC_ISNAND_NO_LIBM, and gl_FUNC_ISNAN. (gl_HAVE_ISNAND_IN_LIBM): New macro. * modules/isnand: New file. * modules/isnand-tests: New file. * modules/isnand-nolibm-tests: Add tests/test-isnand.h to list of files. * tests/test-isnand-nolibm.c: factored most of its contents into new file tests/test-isnand.h. * tests/test-isnand.h: New file. * tests/test-isnand.c: New file. * MODULES.html.sh: Mention new module. 2008-07-10 Ben Pfaff * lib/isnanf.h: Rename lib/isnanf-nolibm.h. * lib/isnand.h: Rename lib/isnand-nolibm.h. * tests/test-isnanf.c: Rename tests/test-isnanf-nolibm.c. * tests/test-isnand.c: Rename tests/test-isnand-nolibm.c. * modules/isnanf-nolibm: Update references to renamed files. * modules/isnand-nolibm: Likewise. * modules/isnanf-nolibm-tests: Likewise. * modules/isnand-nolibm-tests: Likewise. * lib/frexp.c: Likewise. * lib/isfinite.c: Likewise. * lib/signbitd.c: Likewise. * lib/signbitf.c: Likewise. * lib/vasnprintf.c: Likewise. * tests/test-ceilf1.c: Likewise. * tests/test-ceilf2.c: Likewise. * tests/test-floorf1.c: Likewise. * tests/test-floorf2.c: Likewise. * tests/test-frexp.c: Likewise. * tests/test-round1.c: Likewise. * tests/test-round2.c: Likewise. * tests/test-roundf1.c: Likewise. * tests/test-strtod.c: Likewise. * tests/test-trunc1.c: Likewise. * tests/test-trunc2.c: Likewise. * tests/test-truncf1.c: Likewise. * tests/test-truncf2.c: Likewise. * NEWS: Mention the renamed header files. 2008-07-11 Jim Meyering vc-list-files: make the last-resort awk code more portable * build-aux/vc-list-files: Don't rely on awk's "sub" command. /bin/awk from OpenSolaris 11's SUNWesu version 2008.03.22.10.56 does not support it. 2008-07-10 Eric Blake Work with tar's bootstrap. * gnulib-tool (func_emit_initmacro_end): Use m4_defn in the case where LIBSOURCES_DIR contains .#bootmp but must not be treated as an m4 comment. 2008-07-09 Jim Meyering posix-shell.m4: fix typo that made this test malfunction * m4/posix-shell.m4: Remove capitalization in variable name. 2008-07-08 Bruno Haible * m4/onceonly.m4: Update comments. Reported by Ben Pfaff . 2008-07-04 Jim Meyering * users.txt: Add vc-dwim. (bison, coreutils): Use the gitweb URL. 2008-07-03 Jim Meyering * users.txt: Add libffcall. From Sam Steingold. 2008-07-03 Ondřej Vašík getdate.y: do not ignore TZ with relative day, month or year offset * lib/getdate.y (get_date): Move the tz-handling block to follow the relative-date-handling, since otherwise, the latter would clobber the sole output (an updated Start value) of the tz-handling block. * tests/test-getdate.c: Tests for the fix 2008-07-03 Ralf Wildenhues Recognize 'foo_LIBRARIES += libgnu.a'. * gnulib-tool (func_emit_lib_Makefile_am): Recognize if a makefile snippet has already specified an installation location, also using '+='. 2008-07-02 Ondřej Vašík getdate.y: factor out common actions * lib/getdate.y (apply_relative_time, set_hhmmss): New functions. Use them in place of open-coded actions. 2008-07-01 Simon Josefsson Add self-test for getdate module. * modules/getdate-tests: New file. * tests/test-getdate.c: New file. 2008-06-29 Bruno Haible * gnulib-tool (func_import): Put gnulib-comp.m4 into .cvsignore or .gitignore. Reported by Sylvain Beucler . 2008-06-29 Bruno Haible * doc/gnulib-tool.texi (VCS Issues): Mention --no-vc-files option. * m4/gnulib-tool.m4: Update to match current gnulib-tool. 2008-06-29 Bruno Haible * gnulib-tool (func_import): Recommend to put gnulib-cache.m4 into EXTRA_DIST. Reported by Sylvain Beucler . 2008-06-26 Jim Meyering make several modules depend on the "open" module This provides slightly increased consistency when opening-for-write the name of a non-directory spelled with a trailing slash. * modules/chdir-safer: Likewise. * modules/chown: Likewise. * modules/clean-temp: Likewise. * modules/copy-file: Likewise. * modules/fchdir: Likewise. * modules/fcntl-safer: Likewise. * modules/pipe: Likewise. * modules/utime: Likewise. Prompted by Eric Blake and Bruno Haible. 2008-06-24 Andreas Schwab * m4/getdate.m4 (gl_C_COMPOUND_LITERALS): Don't test whether compound literals can be used as initializers for global variables. 2008-06-23 Eric Blake Make gnulib-cache.m4 easier to diff. * gnulib-tool (func_import): Allow newlines when reading cached gl_MODULES, and generate newlines when creating gnulib-cache.m4. 2008-06-23 Bruno Haible * m4/signalblocking.m4 (gl_PREREQ_SIG_HANDLER_H): Remove macro. (gl_PREREQ_SIGPROCMASK): Don't invoke it. * m4/sigaction.m4 (gl_PREREQ_SIG_HANDLER_H): New macro, moved here from m4/signalblocking.m4. (gl_PREREQ_SIGACTION): Don't invoke it. * m4/nanosleep.m4 (gl_PREREQ_NANOSLEEP): Invoke gl_PREREQ_SIG_HANDLER_H. * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Likewise. Don't check for sigaction here. 2008-06-23 Bruno Haible * lib/fatal-signal.c (fatal_signal_handler): Update comment. (install_handlers): Don't set the SA_RESETHAND flag. 2008-06-23 Bruno Haible * m4/sigaction.m4: Comment fixes. * lib/signal.in.h: Likewise. 2008-06-23 Eric Blake Fix typo. * tests/test-sigaction.c (MASK_SA_FLAGS): Add missing operator. Avoid SA_ namespace. * tests/test-sigaction.c (MASK_SA_FLAGS): Rename from SA_MASK. Reported by Ralf Wildenhues. Avoid test failure due to SA_RESTORER. * tests/test-sigaction.c (SA_MASK): New macro. (main): Avoid failing due to extension flags being set. Reported by Jim Meyering. Revert use of sig-handler.h in sigprocmask.c. * modules/sigprocmask (Files): Don't rely on sig-handler.h, since it requires the existence of struct sigaction. * lib/sigprocmask.c (handler_t): Restore typedef. (rpl_signal, old_handlers): Use local type. 2008-06-22 Bruno Haible * tests/test-stdint.c: Disable the INTMAX_MAX preprocessor test conditionally. Reported by Albert Chin . 2008-06-22 Bruno Haible * doc/posix-functions/siginterrupt.texi: Move note. * lib/signal.in.h (SA_RESTART): New macro. * lib/sigaction.c: Update comment. * m4/sigaction.m4 (gl_SIGACTION): Require gl_SIGNAL_H_DEFAULTS. * m4/signalblocking.m4 (gl_PREREQ_SIG_HANDLER_H): New macro. (gl_PREREQ_SIGPROCMASK): Invoke it. * m4/sigaction.m4 (gl_PREREQ_SIGACTION): Likewise. * lib/nanosleep.c (rpl_nanosleep): Setup newact only when it is needed. * lib/sigprocmask.c: Update a comment. 2008-06-21 Eric Blake Use sigaction module rather than signal(). * modules/c-stack (Depends-on): Add sigaction. * modules/fatal-signal (Depends-on): Likewise. * modules/nanosleep (Depends-on): Likewise. * modules/sigprocmask (Files): Add sig-handler.h. * modules/sigaction (Files): Likewise. * lib/sig-handler.h (get_handler): New file, suggested by Paul Eggert. * lib/c-stack.c (SIGACTION_WORKS): Simplify conditions. (c_stack_action) [!SIGACTION_WORKS]: Use sigaction, not signal. * lib/fatal-signal.c (uninstall_handlers, install_handlers) (init_fatal_signals): Likewise. * lib/nanosleep.c (rpl_nanosleep): Likewise. (siginterrupt): Delete fallback. * lib/sigprocmask.c (handler_t, old_handlers): Use sa_handler_t instead. * m4/nanosleep.m4 (gl_PREREQ_NANOSLEEP): Drop check for siginterrupt. New module sigaction, for mingw. * modules/sigaction: New module... * modules/sigaction-tests: ...and its test. * m4/sigaction.m4: New file. * lib/sigaction.c: Likewise. * tests/test-sigaction.c: Likewise. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Add sigaction variables. * modules/signal (Makefile.am): Likewise. * lib/signal.in.h (!@HAVE_SIGACTION@): Define replacements when needed. * doc/posix-headers/signal.texi (signal.h): Mention provided types. * doc/posix-functions/siginterrupt.texi (siginterrupt): Mention that sigaction is preferable. * doc/posix-functions/sigaction.texi (sigaction): Mention new module. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add sigaction. Improve robustness of sigprocmask by overriding signal. * lib/signal.in.h (rpl_signal): Override signal when sigprocmask is in use. * lib/sigprocmask.c (blocked_handler): Reinstall block handler. (SIGKILL, SIGSTOP): Provide fallbacks. (rpl_signal): Implement. (old_handlers, blocked_set): Mark volatile, since sigprocmask and signal can be called inside handlers. Fix nanosleep module on mingw. * modules/nanosleep (Depends-on): Add sys_select. * lib/nanosleep.c (HAVE_SYS_SELECT_H): Rely on gnulib module. Fix licensing of sigprocmask. * modules/raise (License): Relicense as LGPL. 2008-06-21 Bruno Haible * lib/propername.c (proper_name_utf8): Don't use the transliterated result if it contains question marks. Reported by Michael Geng . 2008-06-19 Bruno Haible Fix CVS-ism. * doc/gnulib.texi: Include updated-stamp.texi. * doc/Makefile (GNULIB_TEXI_FILES): New variable. (updated-stamp.texi): New rule. (gnulib.info): Depend on it. * doc/.gitignore: Add updated-stamp.texi. Based on a patch by Thien-Thi Nguyen . 2008-06-19 Bruno Haible * doc/Makefile (gnulib.info): Update and simplify dependencies. Reported by Thien-Thi Nguyen . 2008-06-19 Eric Blake Fix VPATH 'make dist' with GNU make and non-VCS tarball. * top/GNUmakefile (_curr-ver): Don't use $(srcdir) unnecessarily. Reported by Stepan Kasal. 2008-06-18 Bruno Haible * lib/fatal-signal.c (init_fatal_signals): Add comment. Reported by Eric Blake. 2008-06-18 Eric Blake Work around cygwin 1.5.25 strsignal bug. * tests/test-strsignal.c: Allow for const char *. * doc/glibc-functions/strsignal.texi (strsignal): Document the bug. 2008-06-18 Simon Josefsson * users.txt: Update URL to article and add author/date information. 2008-06-17 Bruno Haible New macro gl_DISABLE_THREADS. * m4/lock.m4 (gl_LOCK_EARLY_BODY): Use value gl_use_threads_default if the user did not pass --enable-threads or --disable-threads option. (gl_DISABLE_THREADS): New macro. Reported by Eric Blake . 2008-06-17 Bruno Haible * lib/tls.h (gl_tls_key_init): Evaluate the destructor argument also when the macro ignores it. Based on a patch by Eric Blake . 2008-06-17 Bruno Haible * modules/tls (License): Change to LGPLv2+. Reported by Eric Blake. 2008-06-17 Eric Blake Simplify c-stack prerequisites. * lib/c-stack.c (includes): Remove unused . * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Posix 200x no longer requires to exist. Optimize setrlimit check. (gl_PREREQ_C_STACK): Remove check for unused getcontext and . Move c-stack test into testsuite. * modules/c-stack-tests: New file. * lib/c-stack.c [DEBUG]: Move test program... * tests/test-c-stack.c: ...into this new file. Skip rather than fail test if sigaltstack is lacking. * tests/test-c-stack.sh: New driver file. 2008-06-16 Eric Blake Use raise module consistently. * modules/fatal-signal (Depends-on): Add raise. * modules/sigprocmask (Depends-on): Likewise. * lib/fatal-signal.c (fatal_signal_handler): Rely on raise. * lib/sigprocmask.c (sigprocmask): Likewise. * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Likewise. * m4/signalblocking.m4 (gl_PREREQ_SIGPROCMASK): Likewise. Fix compliance bug in sigpending. * lib/sigprocmask.c (sigpending): Return pending array via parameter, not return value. 2008-06-14 Eric Blake Improve obstack-printf test code. * tests/test-obstack-printf.c (test_function): Fix comment, and simplify usage of obstack_* in macros. Add a test for coverage. Reported by Bruno Haible. 2008-06-14 Bruno Haible * lib/obstack_printf.c (obstack_vprintf): Define the stack-allocated array size as a constant, not as a const variable. * m4/obstack-printf.m4 (gl_FUNC_OBSTACK_PRINTF): Require AC_USE_SYSTEM_EXTENSIONS. * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_POSIX): Likewise. Test whether the obstack_printf function actually exists. * modules/obstack-printf (Depends-on): Add extensions. (Include): Remove obstack.h. * modules/obstack-printf-posix (Depends-on): Add extensions. (Include): Remove obstack.h. 2008-06-13 Eric Blake Add obstack-printf and obstack-printf-posix modules. * modules/obstack-printf: New file. * modules/obstack-printf-posix: Likewise. * MODULES.html.sh (Misc): Mention them. * doc/glibc-functions/obstack_printf.texi (obstack_printf): Likewise. * doc/glibc-functions/obstack_vprintf.texi (obstack_vprintf): Likewise. * modules/stdio (Makefile.am): Accomodate new modules. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * lib/stdio.in.h (rpl_obstack_printf, rpl_obstack_vprintf): Declare. * lib/obstack_printf.c (obstack_printf, obstack_vprintf): New functions. * m4/obstack-printf.m4 (gl_OBSTACK_PRINTF) (gl_REPLACE_OBSTACK_PRINTF): New macros * m4/obstack-printf-posix.m4 (gl_OBSTACK_PRINTF_POSIX): Likewise. * tests/test-obstack-printf.c: New file. * modules/obstack-printf-tests: Likewise. * modules/obstack-printf-posix-tests: Likewise. 2008-06-11 Bruno Haible * m4/open.m4 (gl_FUNC_OPEN): Add test against trailing slash bug. * lib/open.c: Include errno.h. (open): Fail when attempting to write to a file that has a trailing slash. * tests/test-open.c (main): Test against trailing slash bug. * doc/posix-functions/open.texi: Mention the trailing slash bug. 2008-06-10 Bruno Haible * tests/test-vc-list-files-git.sh: Make double use of 'exit'. Needed for $? to work inside the trap command, with various /bin/sh-s. * tests/test-vc-list-files-cvs.sh: Likewise. 2008-06-10 Bruno Haible * lib/acl-internal.h: Don't include gettext.h here. * lib/set-mode-acl.c: Include gettext.h here. * lib/copy-acl.c: Likewise. 2008-06-10 Bruno Haible * lib/wait-process.h (wait_subprocess): Add termsigp argument. * lib/wait-process.c (wait_subprocess): Likewise. * lib/execute.h (execute): Add termsigp argument. * lib/execute.c (execute): Likewise. * lib/csharpcomp.c (compile_csharp_using_pnet, compile_csharp_using_mono, compile_csharp_using_sscli): Update. * lib/csharpexec.c (execute_csharp_using_pnet, execute_csharp_using_mono, execute_csharp_using_sscli): Update. * lib/javacomp.c (compile_using_envjavac, compile_using_gcj, compile_using_javac, compile_using_jikes, is_envjavac_gcj, is_envjavac_gcj43, is_gcj_present, is_gcj_43, is_javac_present, is_jikes_present): Update. * lib/javaexec.c (execute_java_class): Update. * lib/javaversion.c (execute_and_read_line): Update. * NEWS: Document the changes. Reported by Eric Blake. 2008-06-10 Eric Blake Add missing include. * tests/test-strstr.c (includes): Add . * tests/test-strcasestr.c (includes): Likewise. * tests/test-memmem.c (includes): Likewise. 2008-06-10 Bruno Haible * lib/wait-process.c (wait_subprocess): Add an assertion. 2008-06-10 Bruno Haible * lib/wait-process.c (wait_subprocess): Try to fix waitid() based code. 2008-06-10 Bruno Haible * tests/test-memmem.c (main): Reset SIGALRM to default handling before using alarm(). * tests/test-strcasestr.c (main): Likewise. * tests/test-strstr.c (main): Likewise. 2008-06-09 Bruno Haible Work around the Solaris 10 ACE ACLs ABI change. * lib/acl-internal.h (acl_nontrivial, acl_ace_nontrivial): Don't declare if ACL_NO_TRIVIAL is present. (ACE_ACCESS_ALLOWED_ACE_TYPE, ACE_ACCESS_DENIED_ACE_TYPE, NEW_ACE_OWNER, NEW_ACE_GROUP, NEW_ACE_IDENTIFIER_GROUP, ACE_EVERYONE, NEW_ACE_READ_DATA, NEW_ACE_WRITE_DATA, NEW_ACE_EXECUTE): New macros. * lib/file-has-acl.c (acl_nontrivial, acl_ace_nontrivial): Don't define if ACL_NO_TRIVIAL is present. (acl_ace_nontrivial): Detect whether the old or new ABI is in use, and use the current ABI. (file_has_acl): Use same #if condition as elsewhere. * lib/set-mode-acl.c (qset_acl): Detect whether the old or new ABI is in use, and use the current ABI. * doc/acl-resources.txt: More doc about newer Solaris 10 versions. Reported by Jim Meyering. 2008-06-09 Eric Blake Work around environments that (stupidly) ignore SIGALRM. * m4/strstr.m4 (gl_FUNC_STRSTR): Reset SIGALRM to default handling before using alarm(). * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. Reported by Ian Beckwith . Produce autobuild blurb earlier in log. * modules/autobuild (configure.ac-early): Move AB_INIT here. 2008-06-09 Jim Meyering and Ondřej Vašík utimens.c: correct kernel bug work-around Ondřej Vašík found that the invalid return value of 280 indicates failure, not success, and the kernel bug we're trying to work around affects not just the utimensat call, but also the fallback futimens call. * lib/utimens.c (gl_futimens) [HAVE_UTIMENSAT]: Simulate failure, not success. [HAVE_FUTIMENS]: Use the same work-around, here. 2008-06-09 Jim Meyering add more guards around definition of ACE_-related code * lib/file-has-acl.c (acl_ace_nontrivial): Define only if ALLOW and ACE_OWNER are also defined. 2008-06-08 Bruno Haible * lib/acl-internal.h: Add me as co-author. * lib/file-has-acl.c: Likewise. * lib/set-mode-acl.c: Likewise. * lib/copy-acl.c: Likewise. 2008-06-08 Bruno Haible Add support for AIX ACLs. * lib/acl-internal.h (acl_nontrivial): New declaration. * lib/file-has-acl.c (acl_nontrivial): New function. (file_has_acl): Add implementation using AIX 4 ACL API. * lib/set-mode-acl.c (qset_acl): Likewise. * lib/copy-acl.c (qcopy_acl): Likewise. 2008-06-08 Bruno Haible Add support for HP-UX ACLs. * lib/acl-internal.h (acl_nontrivial): New declaration. * lib/file-has-acl.c (acl_nontrivial): New function. (file_has_acl): Add implementation using HP-UX 11 ACL API. * lib/set-mode-acl.c (qset_acl): Likewise. * lib/copy-acl.c (qcopy_acl): Likewise. 2008-06-08 Bruno Haible Add support for Cygwin ACLs. * lib/acl-internal.h (MODE_INSIDE_ACL): New macro for Solaris-like API. * lib/set-mode-acl.c (qset_acl) [!MODE_INSIDE_ACL]: Don't optimize away the chmod_or_fchmod call. * lib/copy-acl.c (qcopy_acl) [!MODE_INSIDE_ACL]: Likewise. 2008-06-08 Bruno Haible Fix bug with setuid modes in Solaris 10+ code. * lib/set-mode-acl.c (qset_acl): Call chmod_or_fchmod when acl_set succeeded, when the mode contains some special bits. 2008-06-08 Bruno Haible Add support for Solaris 7..10 ACLs. * lib/acl-internal.h (acl_nontrivial, acl_ace_nontrivial): New declarations. * lib/file-has-acl.c (acl_nontrivial, acl_ace_nontrivial): New functions. (file_has_acl): Add implementation using Solaris 7..10 ACL API. * lib/set-mode-acl.c (qset_acl): Likewise. * lib/copy-acl.c (qcopy_acl): Likewise. 2008-06-08 Bruno Haible * lib/acl-internal.h (acl_extended_nontrivial) [MacOS X]: New declaration. * lib/file-has-acl.c (acl_extended_nontrivial) [MacOS X]: New function. (acl_access_nontrivial): Remove MacOS X case. (file_has_acl): Use acl_extended_nontrivial. * lib/copy-acl.c (qcopy_acl): Likewise. 2008-06-08 Bruno Haible * lib/set-mode-acl.c (qset_acl): Trivial code simplifications. 2008-06-08 Jim Meyering * modules/acl (Maintainer): Add Bruno Haible. 2008-06-07 Bruno Haible Improve support for Tru64 ACLs. * lib/file-has-acl.c (file_has_acl): Don't test the ACL_TYPE_DEFAULT ACL on OSF/1. 2008-06-07 Bruno Haible Add support for MacOS X ACLs. * lib/file-has-acl.c (file_has_acl): Use ACL_TYPE_EXTENDED instead of ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT. * lib/set-mode-acl.c (qset_acl): Likewise. * lib/copy-acl.c (qcopy_acl): Likewise. 2008-06-07 Bruno Haible Fix memory leak introduced on 2008-05-22. * lib/set-mode-acl.c (qset_acl) [!MODE_INSIDE_ACL]: Free ACLs after use. 2008-06-07 Bruno Haible * lib/set-mode-acl.c (qset_acl): Use acl_init(), not acl_from_text(), to construct an empty ACL. 2008-06-07 Bruno Haible * lib/set-mode-acl.c (chmod_or_fchmod): Document return value precisely. * lib/copy-acl.c (qcopy_acl): Trivial code simplifications. 2008-06-07 Bruno Haible * lib/copy-acl.c (qcopy_acl): Make the #if branches independent. * lib/set-mode-acl.c (qset_acl): Choose better local variable names. 2008-06-07 Bruno Haible * doc/posix-functions/_setjmp.texi: Explain the use of this function regardless of POSIX. * doc/posix-functions/_longjmp.texi: Likewise. * doc/posix-functions/setjmp.texi: Mention HP-UX as not counting as a SystemV platform in this case. 2008-06-06 Eric Blake Document abort() bugs. * doc/posix-functions/abort.texi (abort): Mention anomalies. * doc/posix-functions/setjmp.texi (setjmp): Mingw has setjmp. * doc/posix-functions/sigsetjmp.texi (sigsetjmp): Cygwin has sigsetjmp. * doc/posix-functions/siglongjmp.texi (siglongjmp): Cygwin has siglongjmp, but only as a macro. * doc/posix-functions/_longjmp.texi (_longjmp): Mention that this is obsolete. * doc/posix-functions/_setjmp.texi (_setjmp): Likewise. Tweak documentation to cover cygwin argz bugs. * m4/argz.m4 (gl_FUNC_ARGZ): Mention date of last known cygwin argz bug fix; no code change needed since no cygwin releases occurred between the last fix and the bug being tested. * doc/glibc-functions/argz_add.texi (argz_add): Document the argz module and recently fixed cygwin bugs. * doc/glibc-functions/argz_add_sep.texi (argz_add_sep): Likewise. * doc/glibc-functions/argz_append.texi (argz_append): Likewise. * doc/glibc-functions/argz_count.texi (argz_count): Likewise. * doc/glibc-functions/argz_create.texi (argz_create): Likewise. * doc/glibc-functions/argz_create_sep.texi (argz_create_sep): Likewise. * doc/glibc-functions/argz_delete.texi (argz_delete): Likewise. * doc/glibc-functions/argz_extract.texi (argz_extract): Likewise. * doc/glibc-functions/argz_insert.texi (argz_insert): Likewise. * doc/glibc-functions/argz_next.texi (argz_next): Likewise. * doc/glibc-functions/argz_replace.texi (argz_replace): Likewise. * doc/glibc-functions/argz_stringify.texi (argz_stringify): Likewise. Avoid gcc warning on cygwin. * lib/copy-acl.c (qcopy_acl) [!HAVE_ACL_GET_FILE && !ACL_NO_TRIVIAL]: Avoid unused variable. 2008-06-05 Eric Blake Be tolerant of UNKNOWN version in gnulib-tool test dir. * top/GNUmakefile (_dummy): Warn rather than reconfigure if git-version-gen fails to come up with a version. Reported by Simon Josefsson. 2008-06-05 Jim Meyering Paul Eggert utimens.c: work around a probable Linux kernel bug * lib/utimens.c (gl_futimens) [HAVE_UTIMENSAT]: Work around what appears to be a kernel bug that causes utimensat to return 280 instead of 0, indicating success. 2008-06-04 Bruno Haible * lib/copy-acl.c (qcopy_acl): Call qset_acl, not set_acl. Fixes 2008-06-01 commit. 2008-06-04 Bruno Haible * lib/acl-internal.h (acl_access_nontrivial): New declaration. * lib/file-has-acl.c (acl_access_nontrivial): New function. (file_has_acl): Use it. Save errno afterwards. * lib/copy-acl.c (qcopy_acl): Use acl_access_nontrivial. 2008-06-03 Bruno Haible * lib/file-has-acl.c (file_has_acl): Put Solaris 10 code after POSIX- draft code. Simplify #ifs. * lib/set-mode-acl.c (qset_acl): Don't test for symlink if !USE_ACL. Put Solaris code after POSIX-draft code. Fix comments regarding Solaris 10, HP-UX. Mention Cygwin. * lib/copy-acl.c (qcopy_acl): Simplify #ifs. 2008-06-03 Eric Blake Provide fallback for older kernels. * lib/utimens.c (gl_futimens) [HAVE_UTIMENSAT, HAVE_FUTIMENS]: Provide runtime fallback if kernel lacks support. Reported by Mike Frysinger. 2008-06-02 Bruno Haible * lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Include EOPNOTSUPP if it exists. 2008-06-02 Bruno Haible * lib/acl_entries.c (acl_entries): Rewrite to use acl_get_entry. * lib/copy-acl.c (qcopy_acl): Update comment. 2008-06-02 Bruno Haible * lib/acl-entries.h: Enclose most definitions in #ifs for POSIX-draft like ACL APIs. 2008-06-02 Bruno Haible * tests/test-file-has-acl.sh: Use different code for Cygwin. * tests/test-set-mode-acl.sh: Likewise. * tests/test-copy-acl.sh: Likewise. * tests/test-copy-file.sh: Likewise. 2008-06-02 Bruno Haible * tests/test-file-has-acl.sh: Remove unused code. 2008-06-01 Bruno Haible * lib/copy-acl.c (qcopy_acl): New function, extracted from copy_acl. (copy_acl): Just a wrapper around qcopy_acl that emits the error messages. * lib/set-mode-acl.c (qset_acl): Document return value precisely. 2008-06-01 Bruno Haible * m4/acl.m4 (gl_FUNC_ACL): Separate the POSIX-like and the Solaris tests. Test for libpacl, needed for OSF/1. Test for extended ACLs, needed for MacOS X. Test for HP-UX API. Test for newer and older AIX APIs. * modules/acl-tests (configure.ac): Remove tests now contained in m4/acl.m4. 2008-06-02 Jim Meyering announce-gen: use a better key-server host name * build-aux/announce-gen (main): Recommend keys.gnupg.net, since it may be more consistently reliable. Suggested by Werner Koch in . 2008-06-01 Bruno Haible * lib/stdio-impl.h (fp_ub): Use fp_. Needed for DragonFly BSD. Reported by Voroskoi Andras . 2008-06-01 Voroskoi Andras (tiny change) * lib/stdio-impl.h [__DragonFly__]: Fix typo. 2008-06-01 Bruno Haible New ACL tests. * tests/test-file-has-acl.sh: New file. * tests/test-file-has-acl.c: New file. * tests/test-set-mode-acl.sh: New file. * tests/test-set-mode-acl.c: New file. * tests/test-copy-acl.sh: New file, based on tests/test-copy-file.sh. * tests/test-copy-acl.c: New file. * modules/acl-tests: New file, based on modules/copy-file-tests. * modules/copy-file-tests (Files): Remove tests/test-sameacls.c. (Depends-on): Add acl-tests. (configure.ac): Remove checks. (Makefile.am): Don't create test-sameacls program here any more. 2008-06-01 Bruno Haible * tests/test-copy-file.sh: Portability fixes for Solaris, HP-UX, IRIX. * tests/test-sameacls.c: Include progname.h. (main): Invoke set_program_name. Portability fixes for MacOS X, Solaris, HP-UX. 2008-06-01 Bruno Haible * lib/freadahead.c (freadahead) [__DragonFly__]: Use the __sreadahead function. Reported by VOROSKOI Andras . 2008-06-01 Bruno Haible * modules/rpmatch (Depends-on): Add strdup. 2008-06-01 Bruno Haible * lib/pipe.c: Include unistd-safer.h. (create_pipe): Ensure the returned file descriptors are not in {0,1,2}. * modules/pipe (Depends-on): Add unistd-safer. 2008-05-30 Simon Josefsson * modules/autobuild (configure.ac): Call AB_INIT. 2008-05-30 Simon Josefsson * tests/test-getaddrinfo.c: Don't print debug messages by default. Suggested by Bruno Haible . 2008-05-30 Simon Josefsson * tests/test-base64.c: Cast size_t to unsigned long when invoking printf. Use %lu instead of %d. Reported by Bruno Haible . 2008-05-29 Eric Blake Prefer new POSIX 200x interfaces over futimesat. * m4/utimens.m4 (gl_UTIMENS): Check for futimens, utimensat. * lib/utimens.c (gl_futimens): Use them for nanosecond resolution when available. [HAVE_BUGGY_NFS_TIME_STAMPS]: Allow C89 compilation. 2008-05-28 Bruno Haible * modules/stpcpy (License): Change to LGPLv2+. Requested by David Lutterkort . 2008-05-27 Bruno Haible * lib/localename.c (SUBLANG_TIBETAN_BHUTAN): Force value 2. Needed for current mingw. Reported by Jose E. Marchesi . 2008-05-27 Bruno Haible * modules/iconv_open (Link): New section, from module 'iconv'. * modules/striconv (Link): Likewise. * modules/striconveh (Link): Likewise. * modules/xstriconv (Link): Likewise. * modules/unicodeio (Link): Likewise. * modules/propername (Link): Likewise. Reported by Jim Meyering. 2008-05-26 Jim Meyering sha256: do not artificially restrict buffer length to be < 2^32 * lib/sha256.h (struct sha256_ctx) [buflen]: Change type from uint32_t to size_t. * lib/sha256.c (sha256_conclude_ctx): Change type of a local to match. avoid unaligned access errors, e.g., on sparc * lib/sha512.c (sha512_conclude_ctx): Use set_uint64 rather than direct access through a possibly-unaligned uint64* pointer. * lib/sha256.c (sha256_conclude_ctx): Use set_uint32 rather than direct access through a possibly-unaligned uint32* pointer. Prompted by this patch from Tom "spot" Callaway: http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/13638 sha512.c: fix typo in comment * lib/sha512.c (sha512_conclude_ctx): Length is 128-bit, not 64-bit. 2008-05-25 Bruno Haible * lib/set-mode-acl.c: Renamed from lib/acl.c. * modules/acl (Files): Add lib/set-mode-acl.c, remove lib/acl.c. (Makefile.am): Update lib_SOURCES. 2008-05-25 Bruno Haible * m4/acl.m4 (gl_FUNC_ACL): Don't set LIB_ACL_TRIVIAL. 2008-05-25 Jim Meyering useless-if-before-free: freed expr may have white-space differences * build-aux/useless-if-before-free: Recognize cases in which the freed expression differs from the tested one in embedded white space, e.g., if (p[i + 1]) free(p[i+1]). Correct thinko in prev: $1 was used, so we can't make any regexp shy. Improved tests now detect this. useless-if-before-free: accept white space in the expression. * build-aux/useless-if-before-free: For now, any white space in the expression must be identical in the free argument. useless-if-before-free: efficiency tweak * build-aux/useless-if-before-free: Make the expression-matching regexp "shy". Make the *outer* regexp shy, not the expr-matching one. update code-in-comment to accept cast of free arg * build-aux/useless-if-before-free: Update regexp. 2008-05-25 Bruno Haible * tests/test-sameacls.c: Renamed from tests/test-copy-file-sameacls.c. * modules/copy-file-tests (Files, Makefile.am): Update. * tests/test-copy-file.c (func_test_copy): Update. 2008-05-24 Andreas Färber (tiny change) * lib/stdbool.in.h [__HAIKU__]: Disable __BEOS__ workarounds. 2008-05-23 Bruno Haible Improve support for ACLs on OSF/1. * lib/acl.c (qset_acl): For OSF/1, use a string that ends in a comma. Remove fallback for unknown flavors of ACLs. 2008-05-22 Bruno Haible Add support for ACLs on OSF/1. * lib/acl-internal.h (acl_get_fd, acl_set_fd): New inline function replacements. (acl_free_text): New macro fallback. * lib/acl_entries.c (acl_entries): Use acl_free_text instead of acl_free. * m4/acl.m4 (gl_FUNC_ACL): Look also in libpacl library. Test for acl_free_text function. Require AC_C_INLINE. 2008-05-22 Bruno Haible Make copy_acl work on MacOS X 10.5. * lib/acl-internal.h (MODE_INSIDE_ACL): New macro. (ACL_NOT_WELL_SUPPORTED): On MacOS X, also handle ENOENT. * lib/acl.c (qset_acl): Add different code branch for !MODE_INSIDE_ACL. If MODE_INSIDE_ACL, don't assume that every system has the same text representation for ACLs as FreeBSD. * lib/copy-acl.c (copy_acl): Add support for platforms with !MODE_INSIDE_ACL. * lib/file-has-acl.c (file_has_acl): Likewise. * m4/acl.m4 (gl_FUNC_ACL): Test for some functions that are witness of FreeBSD, MacOS X, or IRIX, respectively. 2008-05-22 Bruno Haible * lib/acl.h: Don't include . (GETACLCNT): Move fallback to lib/acl-internal.h. * lib/acl-internal.h: Include here. (GETACLCNT): New macro fallback, moved here from lib/acl.h. 2008-05-22 Bruno Haible Split off copy_acl function to separate file. * lib/copy-acl.c: New file, extracted from lib/acl.c. * lib/acl.c (copy_acl): Moved function to separate file. * m4/acl.m4 (gl_FUNC_ACL): Remove unconditional AC_LIBOBJs. * modules/acl (Files): Add lib/copy-acl.c. (Makefiles.am): Augment lib_SOURCES. 2008-05-22 Bruno Haible * modules/copy-file-tests: New file. * tests/test-copy-file.sh: New file. * tests/test-copy-file.c: New file. * tests/test-copy-file-sameacls.c: New file. 2008-05-22 Eric Blake Avoid gcc warning. * tests/test-memcmp.c (main): Pass NULL indirectly. 2008-05-21 Bruno Haible Add reference doc about ACLs. * doc/acl-resources.txt: New file. * doc/acl-cygwin.txt: New file. 2008-05-21 Bruno Haible Avoid one more warning from gcc. * lib/vasnprintf.c (IF_LINT): Update comments. (VASNPRINTF): Use it also for the 'prefix' array initializer. 2008-05-21 Jim Meyering avoid a warning from gcc * lib/vasnprintf.c (IF_LINT): Define. (scale10_round_decimal_long_double): Use it to avoid a "may be used uninitialized" warning. (scale10_round_decimal_double): Likewise. 2008-05-21 Simon Josefsson * m4/memcmp.m4: When cross-compiling, assume memcmp works if it is declared. 2008-05-20 Bruno Haible * tests/test-memcmp.c (main): Test also the sign of the result. Test against two known bugs; code taken from autoconf's AC_FUNC_MEMCMP. 2008-05-20 Simon Josefsson * modules/memcmp-tests: New file. * tests/test-memcmp.c: New file. 2008-05-19 Bruno Haible * modules/propername (Notice, configure.ac): Put quoted "..." into --keyword option. * lib/propername.h: Update comments accordingly. Reported by Eric Blake. 2008-05-19 Martin Lambers (tiny change) * modules/getpass-gnu (Depends-on): Add fseeko. 2008-05-19 Simon Josefsson * modules/base64-tests: New file. 2008-05-19 Bo Borgerson * lib/base64.c (base64_decode_ctx): If a decode context structure was passed in use it to ignore newlines. If a context structure was _not_ passed in, continue to treat newlines as garbage (this is the historical behavior). Formerly base64_decode. (base64_decode_alloc_ctx): Formerly base64_decode_alloc. Now takes a decode context structure. * lib/base64.h (base64_decode): Macro for four-argument calls. (base64_decode_alloc): Likewise. * lib/base64.c (base64_decode_ctx): If a decode context structure was passed in use it to ignore newlines. If a context structure was _not_ passed in, continue to treat newlines as garbage (this is the historical behavior). Formerly base64_decode. (base64_decode_alloc_ctx): Formerly base64_decode_alloc. Now takes a decode context structure. * lib/base64.h (base64_decode): Macro for four-argument calls. (base64_decode_alloc): Likewise. 2008-05-19 Jim Meyering avoid a warning from gcc * lib/trim.c (IF_LINT): Define. (trim2): Use it to avoid a "may be used uninitialized" warning. Fix doc typo. * doc/glibc-functions/getpass.texi (getpass): s/PATH_MAX/PASS_MAX/. 2008-05-19 Bruno Haible * doc/glibc-functions/getpass.texi: Document limits of other implementations. 2008-05-19 Simon Josefsson Bruno Haible * doc/glibc-functions/getpass.texi: Document gnulib implementation. 2008-05-18 Bruno Haible * modules/propername: New file, from GNU gettext. * lib/propername.h: New file, from GNU gettext. * lib/propername.c: New file, from GNU gettext. * MODULES.html.sh (Internationalization functions): Add propername. 2008-05-16 Jim Meyering Bruno Haible Avoid some warnings from "gcc -Wshadow". * lib/vasnprintf.c (exp, remainder): Define to different identifiers. 2008-05-15 Eric Blake Extend previous patch to cygwin 1.7.0. * m4/memmem.m4 (gl_FUNC_MEMMEM): When cross-compiling, assume a fast implementation in cygwin >= 1.7.0. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. 2008-05-15 Bruno Haible * m4/memmem.m4 (gl_FUNC_MEMMEM): When cross-compiling, assume a fast implementation in glibc >= 2.9. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. 2008-05-15 Bruno Haible * MODULES.html.sh (Internationalization functions): Remove linebreak. (Unicode string functions): Add unilbrk/*. Reported by Karl Berry. 2008-05-15 Eric Blake Fix violation of replacement in regex. * lib/regcomp.c (re_compile_internal): Avoid implicit cast to bool. * lib/regexec.c (re_search_internal): Likewise. Reported by Heinrich Mislik . 2008-05-15 Jim Meyering avoid distracting test output when git or cvs is not found * tests/test-vc-list-files-cvs.sh: Suppress 'init' error output. * tests/test-vc-list-files-git.sh: Likewise. 2008-05-15 Eric Blake Glibc finally accepted the memmem speedup code, bugzilla #5514. * doc/glibc-functions/memmem.texi (memmem): Mention last broken glibc version. * doc/glibc-functions/strcasestr.texi (strcasestr): Likewise. * doc/posix-functions/strstr.texi (strstr): Likewise. * lib/str-two-way.h (MAX): Sychronize with glibc. 2008-05-15 Paolo Bonzini * lib/regcomp.c (optimize_utf8): Add a note on why we test opr.ctx_type. (calc_first): Initialize constraint field. (duplicate_node_closure): Use it instead of special casing ANCHORS. Fix grammar. (duplicate_node): Merge constraint field for all node types. (calc_eclosure_iter): Look at constraint field for all node types. * lib/regex_internal.c (create_cd_newstate): Don't look at opr.ctx_type. 2008-05-14 Bruno Haible Help GCC to do better code generation. * lib/eealloc.h (eemalloc) [GCC >= 3]: Declare with attribute 'malloc'. * lib/pagealign_alloc.h (pagealign_alloc, pagealign_xalloc): Likewise. * lib/xalloc.h (ATTRIBUTE_MALLOC): New macro. (xmalloc, xzalloc, xcalloc, xmemdup, xstrdup, xnmalloc, xcharalloc): Declare with attribute 'malloc' if supported. 2008-05-14 Lasse Collin use "echo STR|wc -c" rather than unportable "expr length STR" * build-aux/mktempd (mktempd): Vendor-supplied expr from at least OpenBSD 4.3 and Solaris 10 do not honor expr's "length" function. 2008-05-14 Jim Meyering use dd ibs=$n count=1 ... rather than less-portable head -c$n * build-aux/mktempd (rand_bytes): head's -cN option is not accepted by Solaris 10's /bin/head or by the one from HP-UX 11.x. Reported in http://sourceforge.net/forum/message.php?msg_id=4960334 via Collin Lasse. 2008-05-14 Eric Blake Avoid quadratic growth in gl_LIBSOURCES. * gnulib-tool (func_emit_initmacro_done): s/\(m4_append\)_uniq/\1/. Suggested by Bruno Haible. Test xmemdup0. * modules/xmemdup0-tests: New file. * tests/test-xmemdup0.c: Likewise. 2008-05-13 Eric Blake Split xmemdup0 into its own module. * modules/xmemdup0: New file. * lib/xmemdup0.h: Likewise. * lib/xmemdup0.c: Likewise. * MODULES.html.sh (Memory management functions): Add xmemdup0. * lib/xalloc.h (xmemdup0): Remove. * lib/xmalloc.c (xmemdup0): Likewise. 2008-05-13 Eric Blake Bruno Haible Reduce number of forks required during autoconf. * gnulib-tool (func_emit_initmacro_start): Prepare gl_LIBSOURCES_LIST and gl_LIBSOURCES_DIR. (func_emit_initmacro_end): Use them here in a single m4_syscmd... (func_emit_initmacro_done) : ...rather than in one m4_syscmd per file. : Move... * m4/gnulib-common.m4 (m4_foreach_w): ...here. 2008-05-13 Eric Blake * gnulib-tool: Fix various comment typos. 2008-05-12 Bruno Haible Tailor the linebreaking algorithm. * lib/unilbrk/tables.c (unilbrk_table): Change (IS,AL) entry. 2008-05-12 Bruno Haible Update to Unicode 5.0.0. * lib/unilbrk/tables.h (LBP_*): Add LBP_WJ, LBP_H2, LBP_H3, LBP_JL, LBP_JV, LBP_JT. Redistribute values. (unilbrk_table): Change size. * lib/unilbrk/tables.c (unilbrk_table): Change size. Update to match Unicode TR#14 rev. 22. * lib/unilbrk/gen-lbrk.c (LBP_*): Add LBP_WJ, LBP_H2, LBP_H3, LBP_JL, LBP_JV, LBP_JT. Redistribute values. (get_lbp): Update to match Unicode TR#14 rev. 21/22 and Unicode 5.0.0. (debug_output_lbp, fill_org_lbp, debug_output_org_lbp, output_lbp): Update. * lib/unilbrk/lbrkprop1.h: Regenerated. * lib/unilbrk/lbrkprop2.h: Regenerated. * lib/unilbrk/u8-possible-linebreaks.c (u8_possible_linebreaks): Change handling of LBP_CM after LBP_ZW. Update for new value of LBP_BK. * lib/unilbrk/u16-possible-linebreaks.c (u16_possible_linebreaks): Likewise. * lib/unilbrk/u32-possible-linebreaks.c (u32_possible_linebreaks): Likewise. * tests/unilbrk/test-u8-possible-linebreaks.c (main): Update expected result. * tests/unilbrk/test-u16-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-u32-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-ulc-possible-linebreaks.c (main): Likewise. * tests/unilbrk/test-u8-width-linebreaks.c (main): Likewise. * tests/unilbrk/test-u16-width-linebreaks.c (main): Likewise. * tests/unilbrk/test-u32-width-linebreaks.c (main): Likewise. 2008-05-11 Bruno Haible * lib/unilbrk/gen-lbrk.c (output_lbp): Fix whitespace. 2008-05-11 Bruno Haible * lib/unilbrk/gen-lbrk.c: New file, from GNU gettext (gen-lbrkprop.c). * modules/unilbrk/gen-lbrk: New file. 2008-05-11 Bruno Haible * m4/sha256.m4 (gl_SHA256): Require AC_C_INLINE. * m4/sha512.m4 (gl_SHA512): Likewise. 2008-05-11 Jim Meyering New modules: crypto/sha256, crypto/sha512 (from coreutils) * modules/crypto/sha256: New file. * modules/crypto/sha512: Likewise. * lib/sha256.c: Likewise. * lib/sha256.h: Likewise. * lib/sha512.c: Likewise. * lib/sha512.h: Likewise. * lib/u64.h: Likewise. * m4/sha256.m4: Likewise. * m4/sha512.m4: Likewise. * MODULES.html.sh (Cryptographic computations (low-level)): List them. 2008-05-10 Bruno Haible * MODULES.html.sh (Environment variables ): Add unsetenv. (Input/Output ): Add xprintf. (Signal handling ): Add strsignal. (Cryptographic computations (high-level)): Add crypto/gc-camellia. (Core language properties): Add func. (Mathematics ): Add ceil, floor, frexp-nolibm. (Support for systems lacking POSIX:2001): Add environ, EOVERFLOW, strings. (Enhancements for POSIX:2001 functions): Add iconv_open-utf. (Input/output): New section. (File system functions): Add openat-die, stat-macros. (Networking functions): Add sockets. (Unicode string functions): Add unictype/*. (Support for building libraries and executables): Add gperf. (Support for building documentation): Add agpl-3.0. (Misc): Add nocrash. 2008-05-10 Bruno Haible * modules/unictype/gen-ctype: New file. 2008-05-10 Jim Meyering Make chdir-safer.c more efficient on a system with no symlinks. * lib/chdir-safer.c (chdir_no_follow): Skip lstat and fstat calls also if ELOOP is zero. Suggested by Bruno Haible. Make chdir-safer.c slightly safer. * lib/chdir-safer.c (chdir_no_follow): Test HAVE_WORKING_O_NOFOLLOW, not O_NOFOLLOW, in case the latter is nonzero and open ignores it. Avoid compile failure on systems without ELOOP (like mingw). * lib/chdir-safer.c (ELOOP): Define if not already defined. Reported by Bruno Haible. 2008-05-10 Bruno Haible * lib/unilbrk/ulc-common.c: Include c-strcaseeq.h instead of streq.h. (is_utf8_encoding): Use a case-insensitive comparison. * modules/unilbrk/ulc-common (Depends-on): Add c-strcaseeq. Remove streq. 2008-05-10 Bruno Haible * lib/unilbrk/ulc-common.c: Don't include . (iconv_string_length, iconv_string_keeping_offsets): Remove functions. * lib/unilbrk/ulc-common.h (iconv_string_length, iconv_string_keeping_offsets): Remove declarations. * lib/unilbrk/ulc-possible-linebreaks.c: Include , uniconv.h. Don't include , streq.h, xsize.h. (ulc_possible_linebreaks): Use u8_conv_from_encoding for doing the conversion. * lib/unilbrk/ulc-width-linebreaks.c: Include uniconv.h. Don't include , streq.h, xsize.h. (ulc_width_linebreaks): Use u8_conv_from_encoding for doing the conversion. * modules/unilbrk/ulc-common (Depends-on): Remove iconv. * modules/unilbrk/ulc-possible-linebreaks (Depends-on): Add uniconv/u8-conv-from-enc. Remove iconv_open, streq, xsize. * modules/unilbrk/ulc-width-linebreaks (Depends-on): Likewise. 2008-05-10 Bruno Haible * modules/unilbrk/ulc-width-linebreaks-tests: New file. * tests/unilbrk/test-ulc-width-linebreaks.c: New file. * modules/unilbrk/u32-width-linebreaks-tests: New file. * tests/unilbrk/test-u32-width-linebreaks.c: New file. * modules/unilbrk/u16-width-linebreaks-tests: New file. * tests/unilbrk/test-u16-width-linebreaks.c: New file. * modules/unilbrk/u8-width-linebreaks-tests: New file. * tests/unilbrk/test-u8-width-linebreaks.c: New file. * modules/unilbrk/ulc-possible-linebreaks-tests: New file. * tests/unilbrk/test-ulc-possible-linebreaks.c: New file. * modules/unilbrk/u32-possible-linebreaks-tests: New file. * tests/unilbrk/test-u32-possible-linebreaks.c: New file. * modules/unilbrk/u16-possible-linebreaks-tests: New file. * tests/unilbrk/test-u16-possible-linebreaks.c: New file. * modules/unilbrk/u8-possible-linebreaks-tests: New file. * tests/unilbrk/test-u8-possible-linebreaks.c: New file. 2008-05-10 Bruno Haible Split up 'linebreak' module. * lib/unilbrk.h: New file, based on lib/linebreak.h. * lib/unilbrk/lbrkprop1.h: New file, extracted from lib/lbrkprop.h. * lib/unilbrk/lbrkprop2.h: New file, renamed from lib/lbrkprop.h with modifications. * lib/unilbrk/tables.h: New file, extracted from lib/linebreak.c. * lib/unilbrk/tables.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u8-possible-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u16-possible-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u32-possible-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/ulc-common.h: New file, extracted from lib/linebreak.c. * lib/unilbrk/ulc-common.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/ulc-possible-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u8-width-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u16-width-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/u32-width-linebreaks.c: New file, extracted from lib/linebreak.c. * lib/unilbrk/ulc-width-linebreaks.c: New file, extracted from lib/linebreak.c. * modules/unilbrk/base: New file. * modules/unilbrk/tables: New file. * modules/unilbrk/u8-possible-linebreaks: New file. * modules/unilbrk/u16-possible-linebreaks: New file. * modules/unilbrk/u32-possible-linebreaks: New file. * modules/unilbrk/ulc-common: New file. * modules/unilbrk/ulc-possible-linebreaks: New file. * modules/unilbrk/u8-width-linebreaks: New file. * modules/unilbrk/u16-width-linebreaks: New file. * modules/unilbrk/u32-width-linebreaks: New file. * modules/unilbrk/ulc-width-linebreaks: New file. * lib/linebreak.h: Remove file. * lib/linebreak.c: Remove file. * m4/linebreak.m4: Remove file. * modules/linebreak: Remove file. * NEWS: Mention the changes. 2008-05-09 Eric Blake Add xmemdup0. * lib/xalloc.h (xmemdup0): New prototype and C++ typesafe implementation. * lib/xmalloc.c (xmemdup0): New C implementation. 2008-05-08 Bruno Haible * m4/wctype.m4 (gl_WCTYPE_H): Correct indentation. 2008-05-07 Eric Blake Support cross-compilation of . * m4/wctype.m4 (gl_WCTYPE_H): Fix improper nesting in AC_CACHE_CHECK. 2008-05-06 Soren Hansen (tiny change) * build-aux/vc-list-files: Add support for bzr. 2008-05-03 Jim Meyering avoid failed assertion with tight malloc * tests/test-getndelim2.c: Correct an off-by-one assertion. 2008-05-03 Simon Josefsson * m4/inet_pton.m4: Set HAVE_DECL_INET_PTON to 0 when declarations are needed from arpa/inet.h. * m4/inet_ntop.m4: Likewise, for HAVE_DECL_INET_NTOP. Reported by Bruno Haible. 2008-05-02 Jim Meyering avoid compilation error on FreeBSD 6 * tests/test-getaddrinfo.c [!defined EAI_NODATA] (EAI_NODATA): Define. 2008-05-01 Jim Meyering useless-if-before-free: correct --help's exit status description * build-aux/useless-if-before-free (usage): Like grep, exit 0 for one or more matches, etc. Reported by Bruno Haible. vc-list-files: make the stand-alone gnulib test work * modules/vc-list-files-tests (configure.ac): Define and AC_SUBST abs_aux_dir. (Makefile.am) [TESTS_ENVIRONMENT]: Rather than passing $(abs_top_srcdir) to each script and having each of them duplicate the work of setting PATH, set PATH here, using the new variable, abs_aux_dir instead. * tests/test-vc-list-files-cvs.sh: Don't set PATH here. * tests/test-vc-list-files-git.sh: Likewise. Reported by Bruno Haible. 2008-05-01 Bruno Haible * lib/getndelim2.c (getndelim2): Fix newsize computation during reallocation. Rename 'done' to 'found_delimiter'. 2008-05-01 Jim Meyering vc-list-files: accommodate /bin/sh like the one from Solaris 10 * build-aux/vc-list-files: Use `...`, not $(...). 2008-04-30 Jim Meyering add tests for vc-list-files * modules/vc-list-files-tests: New module. * tests/test-vc-list-files-cvs.sh: New file. * tests/test-vc-list-files-git.sh: New file. avoid a warning from gcc * lib/getndelim2.c (IF_LINT): Define. (getndelim2): Use it to avoid a "may be used uninitialized" warning. vc-list-files: work properly with build-aux/cvsu, too * build-aux/vc-list-files: Hoist the "./"-removing code to apply to all cvs-based clauses. vc-list-files: work properly in the CVS+awk case, too * build-aux/vc-list-files: In the CVS+awk case, remove "./" prefix. vc-list-files: avoid use of ${*-*} that fails when /bin/sh is dash * build-aux/vc-list-files: Simplify ${*-*} to $dir, since we no longer take more than one file argument, so . Add quotes, just in case $dir ever contains a shell meta-character. Prompted by Soren Hansen in . 2008-04-29 Eric Blake Optimize getndelim2 to use block operations when possible. * modules/getndelim2 (Depends-on): Add stdbool, freadptr, freadseek, and memchr2. * lib/getndelim2.c (getndelim2): Use them for block reads. 2008-04-29 Bruno Haible * m4/inet_ntop.m4 (gl_INET_NTOP): Require gl_USE_SYSTEM_EXTENSIONS. * m4/inet_pton.m4 (gl_INET_PTON): Likewise. * modules/inet_ntop (Depends-on): Add extensions. * modules/inet_pton (Depends-on): Likewise. Reported by Simon Josefsson. 2008-04-29 Jim Meyering When the is more than one match in a block, match all of them. * build-aux/useless-if-before-free: Iterate through each block until there are no more matches. Fix broken useless-if-before-free script. * build-aux/useless-if-before-free: Fix typo: missing "?" after the expression to match cast of argument to free-like function. 2008-04-29 Eric Blake Use new header. * lib/getaddrinfo.c (includes): s/"inet_ntop.h"//. 2008-04-29 Jim Meyering Avoid test segfault on x86_64 due to lack of inet_ntop declaration. * tests/test-getaddrinfo.c: Include , now guaranteed by gnulib to exist and to declare e.g., inet_ntop. Don't include "inet_ntop.h", now removed. * m4/arpa_inet_h.m4: Remove trailing blanks. 2008-04-29 Eric Blake Silence valgrind on safe reads beyond potential array bounds. * lib/rawmemchr.valgrind: New file. * lib/strchrnul.valgrind: Likewise. * modules/rawmemchr (Files): Distribute new file. * modules/strchrnul (Files): Likewise. Suggested by Bruno Haible. 2008-04-29 Bruno Haible * lib/arpa_inet.in.h: Include system's if it exists. (inet_ntop, inet_pton): Change portability warning's wording. * m4/arpa_inet_h.m4 (gl_HEADER_ARPA_INET): Set HAVE_ARPA_INET_H. Invoke gl_CHECK_NEXT_HEADERS. (gl_ARPA_INET_H_DEFAULTS): Initialize ARPA_INET_H. * m4/inet_ntop.m4 (gl_INET_NTOP): Require gl_ARPA_INET_H_DEFAULTS and set ARPA_INET_H. * m4/inet_pton.m4 (gl_INET_PTON): Likewise. * modules/arpa_inet (Description): No longer only for systems that lack it. (Depends-on): Add include_next. (Makeile.am): Substitute INCLUDE_NEXT, NEXT_ARPA_INET_H, HAVE_ARPA_INET_H. 2008-04-29 Jim Meyering * modules/mkdir (License): Re-license as LGPLv2+. 2008-04-29 Bruno Haible * modules/rawmemchr (Maintainer): Set to Eric. * modules/strchrnul (Maintainer): Likewise. 2008-04-29 Simon Josefsson * m4/arpa_inet_h.m4 (gl_ARPA_INET_H_DEFAULTS): Set HAVE_DECL_INET_NTOP and HAVE_DECL_INET_PTON. * modules/arpa_inet (arpa/inet.h): Use them. 2008-04-28 Eric Blake Test getndelim2. * modules/getndelim2-tests: New file. * tests/test-getndelim2.c: Likewise. * lib/getndelim2.c (getndelim2): Never return 0. Lock the stream. * m4/getndelim2.m4 (gl_GETNDELIM2): Check for lock functions. * MODULES.html.sh: Document new module. 2008-04-20 Bruno Haible * lib/c-stack.c (die): Use raise. * modules/c-stack (Depends-on): Add raise. 2008-04-28 Bruno Haible Expect rpmatch to be declared. * lib/yesno.c (rpmatch): Remove declaration. Declare rpmatch. * lib/stdlib.in.h (rpmatch): New declaration. * lib/rpmatch.c: Include first. * m4/rpmatch.m4 (gl_FUNC_RPMATCH): Require AC_USE_SYSTEM_EXTENSIONS and gl_STDLIB_H_DEFAULTS. Set HAVE_RPMATCH. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_RPMATCH, HAVE_RPMATCH. * modules/rpmatch (Depends-on): Add stdlib, extensions. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Include): Set to . * modules/stdlib (Makefile.am): Substitute GNULIB_RPMATCH and HAVE_RPMATCH. * NEWS: Document the change. 2008-04-28 Bruno Haible Change rpmatch to use nl_langinfo when appropriate. * lib/rpmatch.c: Include stdbool.h, string.h, langinfo.h. (N_): New macro. (localized_pattern): New function/macro. (try): Remove match, nomatch arguments. Copy the pattern into safe memory before caching it. (rpmatch): Use localized_pattern. Add translator comments. * m4/rpmatch.m4 (gl_PREREQ_RPMATCH): Test for nl_langinfo and YESEXPR. Suggested by Eric Blake. * modules/rpmatch (Depends-on): Add stdbool. 2008-04-28 Eric Blake Add rawmemchr module, matching glibc. * modules/string (Makefile.am): New indicator. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Set it. * lib/string.in.h (rawmemchr): Declare when appropriate. * modules/rawmemchr: New file. * m4/rawmemchr.m4: Likewise. * lib/rawmemchr.c: Likewise. * modules/rawmemchr-tests: Likewise. * tests/test-rawmemchr.c: Likewise. * doc/glibc-functions/rawmemchr.texi (rawmemchr): Document module. * modules/strchrnul (Depends-on): Add rawmemchr. * lib/strchrnul.c (strchrnul): Optimize a corner case. Whitespace cleanup. * tests/test-strchrnul.c: Reindent. * lib/strchrnul.c: Likewise. Optimize and test strchrnul. * lib/strchrnul.c (strchrnul): Rewrite to do parallel search. * modules/strchrnul-tests: New file. * tests/test-strchrnul.c: Likewise. Remove intprops dependency. * modules/memchr (Depends-on): Remove intprops. * modules/memrchr (Depends-on): Likewise. * modules/memchr2 (Depends-on): Likewise. * lib/memchr.c (__memchr): Hand-inline the TYPE_MAXIMUM check. * lib/memrchr.c (__memrchr): Likewise. * lib/memrchr2.c (memchr2): Likewise. Reported by Simon Josefsson. 2008-04-28 Simon Josefsson * m4/sys_socket_h.m4: Move AC_REQUIRE([AC_C_INLINE]) to top. Suggested by Ralf Wildenhues . 2008-04-28 Simon Josefsson * lib/inet_ntop.h, lib/inet_pton.h: Remove files. * lib/inet_ntop.c: Include arpa/inet.h instead of inet_ntop.h. * lib/inet_pton.c: Include arpa/inet.h instead of inet_pton.h. * lib/arpa_inet.in.h [@GNULIB_INET_NTOP@]: Inline inet_ntop.h declarations. [@GNULIB_INET_PTON@]: Inline inet_pton.h declarations. * m4/inet_pton.m4: Don't check for header files. * m4/inet_ntop.m4: Don't check for header files. 2008-04-28 Simon Josefsson * m4/sys_socket_h.m4: Require AC_C_INLINE when necessary. * lib/sys_socket.in.h (setsockopt): Use proper win32 tests (don't trigger for cygwin). Reported by Bruno Haible . 2008-04-28 Bruno Haible * doc/posix-functions/strdup.texi: Mention mingw problem. 2008-04-27 Bruno Haible * modules/stat-time-tests (Depends-on): Add sleep. * tests/test-stat-time.c (force_unlink): New function. (cleanup): Use it. (test_mtime): Remove the ctime related tests. (test_ctime): New function, containing the ctime related tests. (main): Call test_ctime, except on native Windows platforms. 2008-04-27 Bruno Haible * lib/rpmatch.c (rpmatch): Add some comments. Reported by James Youngman . 2008-04-27 Bruno Haible * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Also test the behaviour on quiet NaNs. 2008-04-27 Bruno Haible Make test-yesno.sh work on mingw. * tests/test-yesno.sh: Postprocess the output to convert CR/LF to LF. * tests/test-yesno.c: Include yesno.h first. Include binary-io.h. (main): Set stdin to binary mode. * modules/yesno-tests (Depends-on): Add binary-io. 2008-04-27 Bruno Haible Fix 'isfinite' on x86, x86_64, ia64 platforms. * tests/test-isfinite.c (test_isfinitel): Also test the behavior on argument that lie outside the IEEE 854 domain. * m4/isfinite.m4 (gl_ISFINITEL_WORKS): New macro. (gl_ISFINITE): Use it. * doc/posix-functions/isfinite.texi: Document the fixed bugs. 2008-04-27 Bruno Haible Allow local renaming in config.h. * lib/memrchr.c (memrchr): Don't undefine outside libc. 2008-04-27 Bruno Haible * lib/memchr.c (__memchr): Change type of 'i'. * lib/memchr2.c (memchr2): Likewise. 2008-04-26 Eric Blake and Bruno Haible Optimize and test memrchr. * modules/memrchr (Depends-on): Add intprops. * lib/memrchr.c (__memrchr): Avoid false positives in loop. * modules/memrchr-tests: New file. * tests/test-memrchr.c: New file. 2008-04-26 Bruno Haible Add tentative support for DragonFly BSD. * lib/stdio-impl.h: Add macros for DragonFly BSD. * lib/fbufmode.c (fbufmode): Update conditionals. Use fp_ instead of fp. * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, restore_seek_optimization, update_fpos_cache, rpl_fflush: Likewise. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freaadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. 2008-04-26 Bruno Haible * lib/stdio-impl.h: New file. * lib/fbufmode.c: Include stdio-impl.h. (fbufmode): Use fp_, remove redundant #defines. * lib/fflush.c: Include stdio-impl.h. (clear_ungetc_buffer): Remove redundant #defines. * lib/fpurge.c: Include stdio-impl.h. (fpurge): Remove redundant #defines. * lib/freadable.c: Include stdio-impl.h. (freadable): Remove redundant #defines. * lib/freadahead.c: Include stdio-impl.h. (freadahead): Remove redundant #defines. * lib/freading.c: Include stdio-impl.h. (freading): Remove redundant #defines. * lib/freadptr.c: Include stdio-impl.h. (freadptr): Remove redundant #defines. * lib/freadseek.c: Include stdio-impl.h. (freadptrinc): Remove redundant #defines. * lib/fseeko.c: Include stdio-impl.h. (rpl_fseeko): Remove redundant #defines. * lib/fseterr.c: Include stdio-impl.h. (fseterr): Remove redundant #defines. * lib/fwritable.c: Include stdio-impl.h. (fwritable: Remove redundant #defines. * lib/fwriting.c: Include stdio-impl.h. (fwriting): Remove redundant #defines. * modules/fbufmode (Files): Add lib/stdio-impl.h. * modules/fflush (Files): Likewise. * modules/fpurge (Files): Likewise. * modules/freadable (Files): Likewise. * modules/freadahead (Files): Likewise. * modules/freading (Files): Likewise. * modules/freadptr (Files): Likewise. * modules/freadseek (Files): Likewise. * modules/fseeko (Files): Likewise. * modules/fseterr (Files): Likewise. * modules/fwritable (Files): Likewise. * modules/fwriting (Files): Likewise. 2008-04-26 Bruno Haible * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, restore_seek_optimization, update_fpos_cache): New functions, extracted from rpl_fflush. (rpl_fflush): Use them. * m4/fflush.m4 (gl_PREREQ_FFLUSH): New macro. (gl_REPLACE_FFLUSH): Use it. 2008-04-26 Bruno Haible * tests/test-xstrtol.sh: Work around limitation of an old 'tr' program on Solaris. * tests/test-xstrtoimax.sh: Likewise. * tests/test-xstrtoumax.sh: Likewise. Reported by Ralf Wildenhues . 2008-04-26 Bruno Haible * modules/memchr-tests: New file. * tests/test-memchr.c; New file, based on tests/test-memchr2.c. 2008-04-26 Eric Blake Bruno Haible * lib/memchr.c: Include intprops.h. (__memchr): Optimize parallel detection of matching bytes. Rename local variables. Add explanatory comments. 2008-04-26 Bruno Haible Fix module 'memchr', broken since 2000-10-28. * lib/memchr.c: Outside glibc, define memchr, not __memchr. 2008-04-26 Bruno Haible * lib/memchr2.c (memchr2): Rename local variables. Add explanatory comments. 2008-04-25 Eric Blake Use native fstatat on cygwin 1.7.0. * m4/openat.m4 (gl_FUNC_OPENAT): Make sure lstat check is made first. 2008-04-23 Eric Blake Improve memchr2 performance. * lib/memchr2.c (memchr2): Further optimize parallel detection of NUL bytes. * modules/memchr2 (Depends-on): Use intprops.h. 2008-04-23 Simon Josefsson * lib/sys_socket.in.h (setsockopt): Be more type safe by declaring an inline function instead of a CPP macro. Patch by Ben Pfaff . 2008-04-23 Simon Josefsson * lib/arpa_inet.in.h: New file. * modules/arpa_inet (Files): Add lib/arpa_inet.in.h. (Makefile.am): Sed in substitute header file. * m4/arpa_inet_h.m4: Add gl_ARPA_INET_H_DEFAULTS and gl_ARPA_INET_MODULE_INDICATOR. Use them. * modules/inet_ntop (configure.ac): Use gl_ARPA_INET_MODULE_INDICATOR. * modules/inet_pton (configure.ac): Use gl_ARPA_INET_MODULE_INDICATOR. 2008-04-22 Jim Meyering * modules/verify (License): Re-license as LGPLv2+. 2008-04-22 Simon Josefsson * lib/sys_socket.in.h: Define setsockopt macro to cast fourth parameter to void* as per POSIX standard (MinGW uses char*). 2008-04-21 Bruno Haible * lib/wctype.in.h (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit): Define to replacements if REPLACE_ISWCNTRL is 1. * m4/wctype.m4 (gl_WCTYPE_H): Test whether the isw* functions work. If not, set WCTYPE_H to nonempty and REPLACE_ISWCNTRL to 1. * modules/wctype (Makefile.am): Substitute REPLACE_ISWCNTRL. * doc/posix-functions/iswalnum.texi: Mention the 'wctype' module and what it fixes. * doc/posix-functions/iswalpha.texi: Likewise. * doc/posix-functions/iswblank.texi: Likewise. * doc/posix-functions/iswcntrl.texi: Likewise. * doc/posix-functions/iswdigit.texi: Likewise. * doc/posix-functions/iswgraph.texi: Likewise. * doc/posix-functions/iswlower.texi: Likewise. * doc/posix-functions/iswprint.texi: Likewise. * doc/posix-functions/iswpunct.texi: Likewise. * doc/posix-functions/iswspace.texi: Likewise. * doc/posix-functions/iswupper.texi: Likewise. * doc/posix-functions/iswxdigit.texi: Likewise. Reported by Alain Guibert. 2008-04-21 Bruno Haible * m4/vsnprintf.m4 (gl_FUNC_VSNPRINTF): Fix typo in last commit. Patch by Alain Guibert. 2008-04-21 Bruno Haible Fix test failures on mingw. * tests/test-xstrtol.c (print_no_progname): New function. (main): Install it in error_print_progname hook. * tests/test-xstrtol.sh: Convert CR/LF to NL in output. * tests/test-xstrtoimax.sh: Likewise. * tests/test-xstrtoumax.sh: Likewise. 2008-04-21 Bruno Haible Fix test failure on mingw. * tests/test-argp-2.sh (func_compare): Remove CRs from sed's output. 2008-04-21 Bruno Haible * lib/localename.c (SUBLANG_TIBETAN_PRC, SUBLANG_TIBETAN_BHUTAN): Actually assign a value. 2008-04-20 Bruno Haible Fix conflict between modules 'canonicalize' and 'canonicalize-lgpl', take 2. * lib/canonicalize.c (canonicalize_file_name): Elide if the 'canonicalize-lgpl' module is also used. * lib/canonicalize-lgpl.c: Undo last change. * modules/canonicalize-lgpl (configure.ac): Invoke gl_MODULE_INDICATOR. 2008-04-20 Bruno Haible * lib/mkdir.c (mkdir): Undefine after the includes, not right after config.h. Provide _mkdir based fallback for mingw. * lib/sys_stat.in.h (mkdir): Define through an 'extern' declaration if REPLACE_MKDIR is 1. Otherwise, test for mingw directly. * m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Require gl_SYS_STAT_H_DEFAULTS. When doing the replacement, set REPLACE_MKDIR rather than defining mkdir in config.h. * m4/sys_stat_h.m4 (gl_SYS_STAT_MODULE_INDICATOR): New macro. (gl_SYS_STAT_H_DEFAULTS): New macro. (gl_HEADER_SYS_STAT_H): Require it. Don't set HAVE_DECL_MKDIR and HAVE_IO_H any more. * modules/sys_stat (Makefile.am): Substitute REPLACE_MKDIR instead of HAVE_DECL_MKDIR and HAVE_IO_H. 2008-04-20 Bruno Haible * lib/isapipe.c: Port to native Windows platforms. 2008-04-20 Bruno Haible * lib/gc-gnulib.c: Include before . 2008-04-21 Eric Blake Work around preprocessors that don't handle UINTMAX_MAX. * lib/memchr2.c (memchr2): Avoid embedded #if. Reported by Alain Guibert, fix suggested by Bruno Haible. 2008-04-21 Simon Josefsson * doc/posix-functions/strftime.texi (strftime): Explain better Windows incompatibility. Suggested by Micah Cowan . 2008-04-20 Bruno Haible * modules/uniconv/u32-conv-to-enc (Depends-on): Add unistr/u32-mblen, unistr/u8-mblen. 2008-04-20 Bruno Haible Fix test failure on platforms with non-GNU iconv. * lib/uniconv/u16-conv-to-enc.c (u16_to_u8_lenient): New function. (U_TO_U8): Use it, rather than u16_to_u8. * lib/uniconv/u-conv-to-enc.h (FUNC): Allow an incomplete sequence of units at the end of the input string. * modules/uniconv/u16-conv-to-enc (Depends-on): Update. 2008-04-20 Bruno Haible * tests/uniconv/test-u8-conv-to-enc.c (main): Accept result == NULL when the resulting length is 0. * tests/uniconv/test-u16-conv-to-enc.c (main): Likewise. 2008-04-20 Bruno Haible * m4/roundf.m4 (gl_FUNC_ROUNDF): Add test whether roundf actually works. * doc/posix-functions/roundf.texi: Mention roundf bug on mingw. 2008-04-20 Bruno Haible * tests/test-tsearch.c (main): Don't use initstate if it is missing. * modules/tsearch-tests (configure.ac): Test for initstate function. 2008-04-20 Bruno Haible * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Also provided a substitute for nlink_t if missing. * tests/test-sys_stat.c: Check the existence of the nlink_t type. 2008-04-19 Bruno Haible Work around snprintf bug on Linux libc5. * m4/printf.m4 (gl_SNPRINTF_SIZE1): New macro. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Invoke gl_SNPRINTF_SIZE1. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/snprintf.m4 (gl_FUNC_SNPRINTF): Likewise. Replace snprintf if that test failed. * m4/vsnprintf.m4 (gl_FUNC_VSNPRINTF): Likewise. * lib/vasnprintf.c (USE_SNPRINTF): Set to 0 on Linux libc5 systems. * modules/snprintf (Files): Add m4/printf.m4. * modules/vsnprintf (Files): Likewise. * doc/posix-functions/snprintf.texi: Document Linux libc5 problem. * doc/posix-functions/vsnprintf.texi: Likewise. 2008-04-19 Bruno Haible * lib/vasnprintf.c (floorlog10l, floorlog10): Reduce maximum error from 0.0058 to less than 10^-7. 2008-04-19 Bruno Haible Fix rounding when a precision is given. * lib/vasnprintf.c (is_borderline): New function. (VASNPRINTF): For %e and %g, consider replacing the digits 10....0 with 9...9x. * tests/test-vasnprintf-posix.c (test_function): Test rounding with %f, %e, %g. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.h (test_function): Test rounding with %f. * tests/test-printf-posix.h (test_function): Likewise. * tests/test-printf-posix.output: Update. Reported by John Darrington via Ben Pfaff . 2008-04-18 Simon Josefsson * doc/posix-functions/strftime.texi (strftime): Clarify platform. Suggested by Bruno Haible . 2008-04-17 Bruno Haible * lib/lock.h (gl_lock_destroy, gl_rwlock_destroy, gl_recursive_lock_destroy): Provide no-op definitions for the dummy implementation. Patch by Bruce Merry . 2008-04-17 Simon Josefsson * doc/posix-functions/strftime.texi (strftime): Mention that %e doesn't work under Windows. 2008-04-16 Bruno Haible * lib/localename.c (LANG_MAORI, LANG_QUECHUA, LANG_SOTHO, LANG_UIGHUR): New macros. (SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC, SUBLANG_CROATIAN_CROATIA, SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN, SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA, SUBLANG_MONGOLIAN_PRC, SUBLANG_QUECHUA_BOLIVIA, SUBLANG_QUECHUA_ECUADOR, SUBLANG_QUECHUA_PERU, SUBLANG_RUSSIAN_RUSSIA, SUBLANG_RUSSIAN_MOLDAVIA, SUBLANG_SPANISH_US, SUBLANG_TIBETAN_PRC, SUBLANG_TIBETAN_BHUTAN, SUBLANG_UIGHUR_PRC): New macros. (gl_locale_name_from_win32_LANGID): Refine code for Croatian/Bosnian, Mongolian, Russian, Spanish, Tibetan. Add code for Maori, Quechua, Northern Sotho, Uighur. 2008-04-16 Bruno Haible * lib/localename.c (SUBLANG_SINDHI_INDIA): New macro. (SUBLANG_SINDHI_PAKISTAN): Change value from 1 to 2. (gl_locale_name_from_win32_LANGID): Fix code for Sindhi. Reported by Daniel Bergström . 2007-12-25 KJK::Hyperion Bruno Haible * lib/localename.c (gl_locale_name_canonicalize) [WIN32_NATIVE]: New function. (gl_locale_name_from_win32_LANGID, gl_locale_name_from_win32_LCID): New functions, mostly extracted from gl_locale_name_default. (gl_locale_name_default): Use gl_locale_name_from_win32_LCID. 2008-04-16 Eric Blake Adjust strtod detection to catch glibc 2.7 bug. * m4/strtod.m4 (gl_FUNC_STRTOD): Test "nan()" behavior. Reported by John Gatewood Ham. 2008-04-16 Bruno Haible Add tentative support for Linux libc5. * lib/fbufmode.c (fbufmode) [__GNU_LIBRARY__==1]: Reuse glibc2 code. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. Reported by Alain Guibert . 2008-04-15 Bruno Haible * modules/mathl (configure.ac): Define module indicator. 2008-04-15 Bruno Haible * lib/logl.c (logl): Remove unused variables. 2008-04-15 Bruno Haible * lib/uniconv/u-conv-to-enc.h (FUNC): Fix return value when U_TO_U8 fails. 2008-04-15 Bruno Haible * lib/trim.c (trim2): Fix argument of isspace() macro. 2008-04-15 Paolo Bonzini * lib/tanl.c (kernel_tanl): Rename flag to invert, initialize it to 0. * lib/trigl.c (ieee754_rem_pio2l): Fix range checks. 2008-04-14 Bruno Haible * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Fix underquoting of AC_LANG_PROGRAM argument. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Likewise. * m4/gethrxtime.m4 (gl_ARITHMETIC_HRTIME_T): Likewise. * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Likewise. * m4/math_h.m4 (gl_MATH_H): Likewise. * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. * m4/netinet_in_h.m4 (gl_HEADER_NETINET_IN): Likewise. * m4/physmem.m4 (gl_SYS__SYSTEM_CONFIGURATION): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/regex.m4 (gl_REGEX): Likewise. * m4/stdint.m4 (gl_INTEGER_TYPE_SUFFIX): Likewise. * m4/stdio_h.m4 (gl_STDIN_LARGE_OFFSET): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): Likewise. * m4/strndup.m4 (gl_FUNC_STRNDUP): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. 2008-04-14 Jim Meyering test-strtod: fix typos: s/abs/fabs/ * tests/test-strtod.c (main): Use fabs, not narrowing-to-int "abs". 2008-04-13 Bruno Haible Fix conflict between modules 'canonicalize' and 'canonicalize-lgpl'. * lib/canonicalize-lgpl.c: Elide the contents if the 'canonicalize' module is also used and while not building the reloc-wrapper. 2008-04-13 Bruno Haible * tests/test-getaddrinfo.c (simple): Ignore EAI_NODATA error. 2008-04-13 Bruno Haible Fix AIX compilation failure introduced on 2008-04-02. * tests/test-frexp.c (exp): Undefine before redefining. * tests/test-frexpl.c (exp): Likewise. 2008-04-13 Bruno Haible Work around a HP-UX stdio bug. * tests/test-ftell.c (main): Disable the fseek/ftell test on HP-UX. * tests/test-ftello.c (main): Likewise. * doc/posix-functions/ftell.texi: Mention HP-UX bug. * doc/posix-functions/ftello.texi: Likewise. 2008-04-13 Bruno Haible Make test-signbit pass on HP-UX/hppa. * tests/test-signbit.c (minus_zerol): New variable. (test_signbitl): Use it. 2008-04-13 Bruno Haible Make truncl work on OSF/1 4.0. * m4/truncl.m4 (gl_FUNC_TRUNCL): Test whether truncl actually works. Set REPLACE_TRUNCL, not HAVE_DECL_TRUNCL. * lib/math.in.h (truncl): Test REPLACE_TRUNCL, not HAVE_DECL_TRUNCL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_TRUNCL, not HAVE_DECL_TRUNCL. * modules/math (Makefile.am): Substitute REPLACE_TRUNCL, not HAVE_DECL_TRUNCL. * doc/posix-functions/truncl.texi: Document the OSF/1 4.0 problem. 2008-04-13 Bruno Haible * lib/unictype.h: Remove trailing comma from enumeration definitions. 2008-04-13 Bruno Haible * lib/count-one-bits.h (COUNT_ONE_BITS): Rewrite verification expression, so as to avoid HP-UX 11 cc compiler bug. 2008-04-13 Bruno Haible * m4/regex.m4 (gl_PREREQ_REGEX): Also check for . 2008-04-13 Bruno Haible * lib/git-merge-changelog.c: Remove empty declaration outside of functions. 2008-04-13 Bruno Haible * modules/quotearg-tests (Makefile.am): Define test_quotearg_LDADD. 2008-04-13 Bruno Haible * doc/posix-headers/sys_socket.texi: Document the problem on EMX. * lib/sys_socket.in.h (SHUT_RD, SHUT_WR, SHUT_RDWR): Define if missing. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Replace also if it exists but lacks definitions of the SHUT_* macros. * modules/sys_socket (Description): Update. Reported by Elbert Pol . 2008-04-13 Bruno Haible * lib/localcharset.c (OS2): Don't redefine if already defined. Reported by Elbert Pol . 2008-04-13 Bruno Haible * lib/binary-io.h [__EMX__]: Include . Reported by Elbert Pol . 2008-04-12 Bruno Haible * lib/fpucw.h: Enable the definitions also for x86_64. Needed for NetBSD/x86_64. Reported by Thomas Klausner . 2008-04-12 Bruno Haible * tests/test-strtod.c: Include isnand.h. (main): Use isnand instead of isnan. Reported by Jim Meyering. 2008-04-12 Bruno Haible * m4/isnanf.m4 (gl_ISNANF_WORKS): Add a test for a special NaN. Reported by Nelson H. F. Beebe . 2008-04-12 Jim Meyering * m4/math_h.m4 (gl_MATH_H): Fix typos. 2008-04-12 Bruno Haible * lib/freadptr.c (freadptr) [__EMX__]: Fix wrong assertion. Reported by Elbert Pol . 2008-04-12 Eric Blake Work around Solaris 10 math.h bug. * m4/math_h.m4 (gl_MATH_H): Check for bug. (gl_MATH_H_DEFAULTS): Set up default. * modules/math (Makefile.am): Replace new indicators. * lib/math.in.h (NAN, HUGE_VAL): Provide replacements. * tests/test-math.c (main): Test this. * m4/strtod.m4 (gl_FUNC_STRTOD): Don't rely on HUGE_VAL. * doc/posix-headers/math.texi (math.h): Mention bug. Reported by Nelson H. F. Beebe and Jim Meyering. 2008-04-11 Bruno Haible Adapt to future versions of Apple GCC. * lib/argp-fmtstream.h (ARGP_FS_EI): Don't test __GNUC_GNU_INLINE__. Reported by Peter O'Gorman . 2008-04-11 Bruno Haible * tests/test-getaddrinfo.c (simple): Ignore EAI_NONAME error. 2008-04-11 Bruno Haible * modules/strsignal-tests (Makefile.am): Define test_strsignal_LDADD. * modules/getaddrinfo-tests (Makefile.am): Define test_getaddrinfo_LDADD. 2008-04-11 Bruno Haible * lib/strsignal.c (_sys_siglist): Don't declare if already declared. (init): Fix syntax error. * m4/strsignal.m4 (gl_PREREQ_STRSIGNAL): Check whether _sys_siglist is declared. 2008-04-11 Bruno Haible * lib/glob.c: Include . Needed at least with IRIX cc. * modules/glob (Depends-on): Add stdbool. 2008-04-11 Bruno Haible * lib/trim.c: Include . 2008-04-11 Eric Blake Avoid compile failure on OS/2. * lib/regex_internal.h (internal_function): Disable optimization on OS/2 (__EMX__), where it caused compiler error. Reported by Elbert Pol. 2008-04-11 Bruno Haible Flush the standard error stream before aborting. Needed on mingw. * tests/test-argmatch.c (ASSERT): Call fflush(stderr) before abort(). * tests/test-array_list.c (ASSERT): Likewise. * tests/test-array_oset.c (ASSERT): Likewise. * tests/test-avltree_list.c (ASSERT): Likewise. * tests/test-avltree_oset.c (ASSERT): Likewise. * tests/test-avltreehash_list.c (ASSERT): Likewise. * tests/test-binary-io.c (ASSERT): Likewise. * tests/test-byteswap.c (ASSERT): Likewise. * tests/test-c-ctype.c (ASSERT): Likewise. * tests/test-c-strcasecmp.c (ASSERT): Likewise. * tests/test-c-strcasestr.c (ASSERT): Likewise. * tests/test-c-strncasecmp.c (ASSERT): Likewise. * tests/test-c-strstr.c (ASSERT): Likewise. * tests/test-canonicalize-lgpl.c (ASSERT): Likewise. * tests/test-canonicalize.c (ASSERT): Likewise. * tests/test-carray_list.c (ASSERT): Likewise. * tests/test-ceilf1.c (ASSERT): Likewise. * tests/test-ceilf2.c (ASSERT): Likewise. * tests/test-ceill.c (ASSERT): Likewise. * tests/test-count-one-bits.c (ASSERT): Likewise. * tests/test-fbufmode.c (ASSERT): Likewise. * tests/test-fflush2.c (ASSERT): Likewise. * tests/test-floorf1.c (ASSERT): Likewise. * tests/test-floorf2.c (ASSERT): Likewise. * tests/test-floorl.c (ASSERT): Likewise. * tests/test-fopen.c (ASSERT): Likewise. * tests/test-fpending.c (ASSERT): Likewise. * tests/test-fprintf-posix.c (ASSERT): Likewise. * tests/test-fpurge.c (ASSERT): Likewise. * tests/test-freadable.c (ASSERT): Likewise. * tests/test-freadahead.c (ASSERT): Likewise. * tests/test-freading.c (ASSERT): Likewise. * tests/test-freadptr.c (ASSERT): Likewise. * tests/test-freadptr2.c (ASSERT): Likewise. * tests/test-freadseek.c (ASSERT): Likewise. * tests/test-freopen.c (ASSERT): Likewise. * tests/test-frexp.c (ASSERT): Likewise. * tests/test-frexpl.c (ASSERT): Likewise. * tests/test-fseek.c (ASSERT): Likewise. * tests/test-fseeko.c (ASSERT): Likewise. * tests/test-fstrcmp.c (ASSERT): Likewise. * tests/test-ftell.c (ASSERT): Likewise. * tests/test-ftello.c (ASSERT): Likewise. * tests/test-func.c (ASSERT): Likewise. * tests/test-fwritable.c (ASSERT): Likewise. * tests/test-fwriting.c (ASSERT): Likewise. * tests/test-getdelim.c (ASSERT): Likewise. * tests/test-getline.c (ASSERT): Likewise. * tests/test-i-ring.c (ASSERT): Likewise. * tests/test-iconv-utf.c (ASSERT): Likewise. * tests/test-iconv.c (ASSERT): Likewise. * tests/test-isfinite.c (ASSERT): Likewise. * tests/test-isnand.c (ASSERT): Likewise. * tests/test-isnanf.c (ASSERT): Likewise. * tests/test-isnanl.h (ASSERT): Likewise. * tests/test-ldexpl.c (ASSERT): Likewise. * tests/test-linked_list.c (ASSERT): Likewise. * tests/test-linkedhash_list.c (ASSERT): Likewise. * tests/test-localename.c (ASSERT): Likewise. * tests/test-lseek.c (ASSERT): Likewise. * tests/test-mbscasecmp.c (ASSERT): Likewise. * tests/test-mbscasestr1.c (ASSERT): Likewise. * tests/test-mbscasestr2.c (ASSERT): Likewise. * tests/test-mbscasestr3.c (ASSERT): Likewise. * tests/test-mbscasestr4.c (ASSERT): Likewise. * tests/test-mbschr.c (ASSERT): Likewise. * tests/test-mbscspn.c (ASSERT): Likewise. * tests/test-mbsncasecmp.c (ASSERT): Likewise. * tests/test-mbspbrk.c (ASSERT): Likewise. * tests/test-mbspcasecmp.c (ASSERT): Likewise. * tests/test-mbsrchr.c (ASSERT): Likewise. * tests/test-mbsspn.c (ASSERT): Likewise. * tests/test-mbsstr1.c (ASSERT): Likewise. * tests/test-mbsstr2.c (ASSERT): Likewise. * tests/test-mbsstr3.c (ASSERT): Likewise. * tests/test-memchr2.c (ASSERT): Likewise. * tests/test-memmem.c (ASSERT): Likewise. * tests/test-open.c (ASSERT): Likewise. * tests/test-printf-frexp.c (ASSERT): Likewise. * tests/test-printf-frexpl.c (ASSERT): Likewise. * tests/test-printf-posix.c (ASSERT): Likewise. * tests/test-quotearg.c (ASSERT): Likewise. * tests/test-rbtree_list.c (ASSERT): Likewise. * tests/test-rbtree_oset.c (ASSERT): Likewise. * tests/test-rbtreehash_list.c (ASSERT): Likewise. * tests/test-round1.c (ASSERT): Likewise. * tests/test-roundf1.c (ASSERT): Likewise. * tests/test-roundl.c (ASSERT): Likewise. * tests/test-signbit.c (ASSERT): Likewise. * tests/test-sleep.c (ASSERT): Likewise. * tests/test-snprintf-posix.c (ASSERT): Likewise. * tests/test-snprintf.c (ASSERT): Likewise. * tests/test-sprintf-posix.c (ASSERT): Likewise. * tests/test-stat-time.c (ASSERT): Likewise. * tests/test-strcasestr.c (ASSERT): Likewise. * tests/test-strerror.c (ASSERT): Likewise. * tests/test-striconv.c (ASSERT): Likewise. * tests/test-striconveh.c (ASSERT): Likewise. * tests/test-striconveha.c (ASSERT): Likewise. * tests/test-strsignal.c (ASSERT): Likewise. * tests/test-strstr.c (ASSERT): Likewise. * tests/test-strtod.c (ASSERT): Likewise. * tests/test-trunc1.c (ASSERT): Likewise. * tests/test-trunc2.c (ASSERT): Likewise. * tests/test-truncf1.c (ASSERT): Likewise. * tests/test-truncf2.c (ASSERT): Likewise. * tests/test-truncl.c (ASSERT): Likewise. * tests/test-vasnprintf-posix.c (ASSERT): Likewise. * tests/test-vasnprintf-posix2.c (ASSERT): Likewise. * tests/test-vasnprintf.c (ASSERT): Likewise. * tests/test-vasprintf-posix.c (ASSERT): Likewise. * tests/test-vasprintf.c (ASSERT): Likewise. * tests/test-vfprintf-posix.c (ASSERT): Likewise. * tests/test-vprintf-posix.c (ASSERT): Likewise. * tests/test-vsnprintf-posix.c (ASSERT): Likewise. * tests/test-vsnprintf.c (ASSERT): Likewise. * tests/test-vsprintf-posix.c (ASSERT): Likewise. * tests/test-wcwidth.c (ASSERT): Likewise. * tests/test-xfprintf-posix.c (ASSERT): Likewise. * tests/test-xprintf-posix.c (ASSERT): Likewise. * tests/test-xvasprintf.c (ASSERT): Likewise. * tests/uniconv/test-u16-conv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u16-conv-to-enc.c (ASSERT): Likewise. * tests/uniconv/test-u16-strconv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u16-strconv-to-enc.c (ASSERT): Likewise. * tests/uniconv/test-u32-conv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u32-conv-to-enc.c (ASSERT): Likewise. * tests/uniconv/test-u32-strconv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u32-strconv-to-enc.c (ASSERT): Likewise. * tests/uniconv/test-u8-conv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u8-conv-to-enc.c (ASSERT): Likewise. * tests/uniconv/test-u8-strconv-from-enc.c (ASSERT): Likewise. * tests/uniconv/test-u8-strconv-to-enc.c (ASSERT): Likewise. * tests/unictype/test-bidi_byname.c (ASSERT): Likewise. * tests/unictype/test-bidi_name.c (ASSERT): Likewise. * tests/unictype/test-bidi_of.c (ASSERT): Likewise. * tests/unictype/test-bidi_test.c (ASSERT): Likewise. * tests/unictype/test-block_list.c (ASSERT): Likewise. * tests/unictype/test-block_of.c (ASSERT): Likewise. * tests/unictype/test-block_test.c (ASSERT): Likewise. * tests/unictype/test-categ_and.c (ASSERT): Likewise. * tests/unictype/test-categ_and_not.c (ASSERT): Likewise. * tests/unictype/test-categ_byname.c (ASSERT): Likewise. * tests/unictype/test-categ_name.c (ASSERT): Likewise. * tests/unictype/test-categ_none.c (ASSERT): Likewise. * tests/unictype/test-categ_of.c (ASSERT): Likewise. * tests/unictype/test-categ_or.c (ASSERT): Likewise. * tests/unictype/test-categ_test_withtable.c (ASSERT): Likewise. * tests/unictype/test-combining.c (ASSERT): Likewise. * tests/unictype/test-decdigit.c (ASSERT): Likewise. * tests/unictype/test-digit.c (ASSERT): Likewise. * tests/unictype/test-mirror.c (ASSERT): Likewise. * tests/unictype/test-numeric.c (ASSERT): Likewise. * tests/unictype/test-pr_byname.c (ASSERT): Likewise. * tests/unictype/test-pr_test.c (ASSERT): Likewise. * tests/unictype/test-predicate-part1.h (ASSERT): Likewise. * tests/unictype/test-scripts.c (ASSERT): Likewise. * tests/unictype/test-sy_c_ident.c (ASSERT): Likewise. * tests/unictype/test-sy_java_ident.c (ASSERT): Likewise. * tests/unistdio/test-u16-asnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u16-vasnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u16-vasnprintf2.c (ASSERT): Likewise. * tests/unistdio/test-u16-vasnprintf3.c (ASSERT): Likewise. * tests/unistdio/test-u16-vasprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u16-vsnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u16-vsprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u32-asnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u32-vasnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u32-vasnprintf2.c (ASSERT): Likewise. * tests/unistdio/test-u32-vasnprintf3.c (ASSERT): Likewise. * tests/unistdio/test-u32-vasprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u32-vsnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u32-vsprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u8-asnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u8-vasnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u8-vasnprintf2.c (ASSERT): Likewise. * tests/unistdio/test-u8-vasnprintf3.c (ASSERT): Likewise. * tests/unistdio/test-u8-vasprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u8-vsnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-u8-vsprintf1.c (ASSERT): Likewise. * tests/unistdio/test-ulc-asnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vasnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vasnprintf2.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vasnprintf3.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vasprintf1.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vsnprintf1.c (ASSERT): Likewise. * tests/unistdio/test-ulc-vsprintf1.c (ASSERT): Likewise. * tests/uniwidth/test-u16-strwidth.c (ASSERT): Likewise. * tests/uniwidth/test-u16-width.c (ASSERT): Likewise. * tests/uniwidth/test-u32-strwidth.c (ASSERT): Likewise. * tests/uniwidth/test-u32-width.c (ASSERT): Likewise. * tests/uniwidth/test-u8-strwidth.c (ASSERT): Likewise. * tests/uniwidth/test-u8-width.c (ASSERT): Likewise. * tests/uniwidth/test-uc_width.c (ASSERT): Likewise. Reported by Eric Blake. 2008-04-11 Bruno Haible * lib/wchar.in.h: Tweak comment. 2008-04-11 Bruno Haible Fix __GNUC_STDC_INLINE__ predefine with Apple GCC on MacOS X 10.5. * gnulib-tool (func_emit_initmacro_start): Emit an invocation of gl_COMMON. * m4/gnulib-common.m4 (gl_COMMON, gl_COMMON_BODY): New macros. 2008-04-11 Bruno Haible * modules/git-merge-changelog (git_merge_changelog_LDADD): Add LIBINTL. 2008-04-11 Simon Josefsson * lib/gc-gnulib.c: On Windows, use CryptGenRandom from CSP instead of attempting to use non-existing /dev/*random. Based on patch from Adam Strzelecki in . 2008-04-08 Bruno Haible Add tentative support for emx+gcc. * lib/fbufmode.c (fbufmode) [__EMX__]: Add conditional code. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. * m4/fpending.m4 (gl_FUNC_FPENDING): Add a variant for emx+gcc. 2008-04-09 Eric Blake Avoid some autoconf warnings. * m4/regex.m4 (gl_REGEX): s/AC_HELP_STRING/AS_HELP_STRING/. * m4/acl.m4 (gl_FUNC_ACL): Likewise. * m4/afs.m4 (gl_AFS): Likewise. * m4/gc-random.m4 (gl_GC_RANDOM): Likewise. * m4/include_next.m4 (gl_INCLUDE_NEXT): s/AC_FOREACH/m4_foreach_w/. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Likewise. * m4/stdint.m4 (gl_STDINT_BITSIZEOF, gl_CHECK_TYPES_SIGNED) (gl_INTEGER_TYPE_SUFFIX): Likewise. * m4/onceonly_2_57.m4 (AC_CHECK_HEADERS_ONCE, AC_CHECK_FUNCS_ONCE) (AC_CHECK_DECLS_ONCE): Likewise. Rename file... * m4/onceonly.m4: ...to this, and delete 2.54 variant, now that gnulib-tool requires autoconf 2.59 or better. * gnulib-tool (func_get_filelist): s/\(onceonly\)_2_57.m4/\1.m4/. 2008-04-08 Eric Blake Use 'git describe --match' if present (added in git 1.5.5). * build-aux/git-version-gen: Limit result to tags that match 'v*' if possible. 2008-04-08 Bruno Haible Add tentative support for OpenServer. * lib/fbufmode.c (fbufmode): Add conditional define for _flag, _base, _ptr, _cnt. * lib/fpurge.c (fpurge): Likewise. * lib/freadable.c (freadable): Likewise. * lib/freadahead.c (freadahead): Likewise. * lib/freading.c (freading): Likewise. * lib/freadptr.c (freadptr): Likewise. * lib/freadseek.c (freadptrinc): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/fwriting.c (fwriting): Likewise. Reported by Roger Cornelius and Brian K. White . 2008-04-06 Jim Meyering * gnulib-tool (func_add_or_update): s/backuped/backed up/ in diagnostic 2008-04-06 Bruno Haible Avoid possible error with non-ASCII bytes in UTF-8 locales. * tests/test-fprintf-posix.sh: Use "LC_ALL=C tr" instead of "tr". * tests/test-printf-posix.sh: Likewise. * tests/test-vfprintf-posix.sh: Likewise. * tests/test-vprintf-posix.sh: Likewise. * tests/test-xprintf-posix.sh: Likewise. 2008-04-06 Ralf Wildenhues * m4/double-slash-root.m4 (gl_DOUBLE_SLASH_ROOT): Fix quoting, hide error from 'ls', needed on OS/2. Report by Elbert Pol . 2008-04-04 Eric Blake Make test-fseeko.c failures meaningful. * tests/test-fseeko.c: Print line number on failure. * tests/test-fseek.c: Likewise. Reported by Nelson H. F. Beebe. Improve strtod bug detection check. * m4/strtod.m4 (gl_FUNC_STRTOD): Also check for hex-float parsing, required for Solaris 10. Reported by Bob Friesenhahn and Nelson H. F. Beebe. 2008-04-04 Bruno Haible * modules/relocatable-prog-wrapper (Files): Add m4/environ.m4. Needed by m4/setenv.m4. 2008-04-03 Eric Blake Ensure sane .version contents. * top/GNUmakefile (_dummy): Also delete .version when rebuilding version string. * build-aux/git-version-gen: Improve documentation. Make GNU make output nicer. * top/GNUmakefile [!_have-Makefile]: Add dependency on MAKECMDGOALS to enforce message for all command line targets. Set srcdir for use in maint.mk. Another maintainer tweak. * top/GNUmakefile (_is-dist-target): Allow maintainer-distcheck as a target that regenerates version. 2008-04-03 Jim Meyering vc-list-files: don't cause coreutils "make po-check" failure * build-aux/vc-list-files: Skip postprocessing when $2 is '.' 2008-04-03 Eric Blake Allow VPATH usage of vc-list-files. * build-aux/vc-list-files (scriptversion): Add timestamp. (options): Add --help, --version, -C. (CVS): Support installed cvsu. 2008-04-02 Bruno Haible Avoid some "statement with no effect" warnings from gcc. * tests/test-wctype.c (main): Explicitly ignore unused values. Reported by Jim Meyering. 2008-04-02 Jim Meyering Avoid some warnings from "gcc -Wshadow". * tests/test-frexp.c (exp): Define to a different identifier. * tests/test-frexpl.c (exp): Likewise. 2008-04-03 Jim Meyering bootstrap: remove dangling *.[ch] symlinks from lib * build-aux/bootstrap [dangling symlink removal]: Move find's -depth option to precede all others, to avoid a warning. Remove *.[ch] files too, and from "$source_base" (usually lib/). 2008-04-02 Bruno Haible Avoid some warnings from "gcc -Wshadow". * tests/tests-vfprintf-posix.c (my_fprintf): Move after test_function. * tests/tests-vprintf-posix.c (my_printf): Move after test_function. * tests/tests-vsnprintf-posix.c (my_snprintf): Move after test_function. * tests/tests-vsprintf-posix.c (my_sprintf): Move after test_function. Reported by Jim Meyering. 2008-04-01 Bruno Haible Fix test to work on IRIX 6.5 with cc. * tests/test-math.c (numeric_equal): New function. (main): Use it. 2008-04-01 Bruno Haible * doc/posix-headers/math.texi: Refine documentation of NAN problem. 2008-04-01 Bruno Haible * tests/test-vasnprintf-posix.c: Include nan.h instead of . (test_function): Use NaNd, NaNl instead of NAN or 0.0L/0.0L. * modules/vasnprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * tests/test-vasprintf-posix.c: Include nan.h instead of . (test_function): Use NaNd, NaNl instead of NAN or 0.0L/0.0L. * modules/vasprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * tests/test-snprintf-posix.h: Include nan.h instead of . (test_function): Use NaNd, NaNl instead of NAN or 0.0L/0.0L. * modules/snprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * modules/vsnprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * tests/test-sprintf-posix.h: Include nan.h instead of . (test_function): Use NaNd, NaNl instead of NAN or 0.0L/0.0L. * modules/sprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * modules/vsprintf-posix-tests (Files): Add tests/nan.h. (Depends-on): Remove math. * tests/test-round1.c: Include nan.h. (main): Use NaNd instead of NAN. * modules/round-tests (Files): Add tests/nan.h. * tests/test-trunc1.c: Include nan.h. (main): Use NaNd instead of NAN. * modules/trunc-tests (Files): Add tests/nan.h. * tests/test-roundf1.c: Include nan.h. (main): Use NaNf instead of NAN. * modules/roundf-tests (Files): Add tests/nan.h. * tests/test-truncf1.c: Include nan.h. (main): Use NaNf instead of NAN. * modules/truncf-tests (Files): Add tests/nan.h. * tests/test-ceilf1.c: Include nan.h. (main): Use NaNf instead of NAN. * modules/ceilf-tests (Files): Add tests/nan.h. * tests/test-floorf1.c: Include nan.h. (main): Use NaNf instead of NAN. * modules/floorf-tests (Files): Add tests/nan.h. * tests/test-isnanf.c: Include nan.h instead of . (main): Use NaNf instead of NAN. * modules/isnanf-nolibm-tests (Files): Add tests/nan.h. * tests/test-isnand.c: Include nan.h instead of . (main): Use NaNd instead of NAN. * modules/isnand-nolibm-tests (Files): Add tests/nan.h. * tests/test-frexp.c: Include nan.h. (main): Use NaNd instead of NAN. * modules/frexp-tests (Files): Add tests/nan.h. * lib/isnan.c: Don't include . (FUNC): Don't use NAN macro. * modules/isnand-nolibm (Depends-on): Remove math. * modules/isnanf-nolibm (Depends-on): Remove math. * modules/isnanl (Depends-on): Remove math. * modules/isnanl-nolibm (Depends-on): Remove math. * tests/nan.h: New file. 2008-04-01 Eric Blake Fix typos. * tests/test-strtod.c (main): s/FLT_/DBL_/ for minimum and epsilon values to be the right type. For now, cater to gnulib strtod inaccuracies. * tests/test-strtod.c (main): Allow 1-ulp error on expected fractional results. While not as nice from a QoI perspective, it is a quicker patch than correctly implementing decimal to binary rounding. 2008-03-31 Eric Blake Guarantee a definition of NAN. * lib/math.in.h (NAN): Define if missing. * tests/test-math.c (main): Test it. * doc/posix-headers/math.texi (math.h): Document this. * lib/isnan.c (rpl_isnand): Use it. * tests/test-ceilf1.c (NaN): Delete, and use NAN instead. * tests/test-floorf1.c (NaN): Likewise. * tests/test-frexp.c (NaN): Likewise. * tests/test-isnand.c (NaN): Likewise. * tests/test-isnanf.c (NaN): Likewise. * tests/test-round1.c (NaN): Likewise. * tests/test-roundf1.c (NaN): Likewise. * tests/test-snprintf-posix.h (NaN): Likewise. * tests/test-sprintf-posix.h (NaN): Likewise. * tests/test-trunc1.c (NaN): Likewise. * tests/test-truncf1.c (NaN): Likewise. * tests/test-vasnprintf-posix.c (NaN): Likewise. * tests/test-vasprintf-posix.c (NaN): Likewise. * modules/isnand-nolibm (Depends-on): Add math. * modules/isnanf-nolibm (Depends-on): Likewise. * modules/isnanl (Depends-on): Likewise. * modules/isnanl-nolibm (Depends-on): Likewise. * modules/snprintf-posix-tests (Depends-on): Likewise. * modules/sprintf-posix-tests (Depends-on): Likewise. * modules/vsnprintf-posix-tests (Depends-on): Likewise. * modules/vsprintf-posix-tests (Depends-on): Likewise. * modules/vasnprintf-posix-tests (Depends-on): Likewise. * modules/vasprintf-posix-tests (Depends-on): Likewise. 2008-03-31 Bruno Haible * tests/test-strtod.c (main): Update results for OSF/1 platforms. * doc/posix-functions/strtod.texi: Likewise. 2008-03-31 Bruno Haible * tests/test-strtod.c (main): Don't use C99 syntax. 2008-03-31 Bruno Haible * tests/test-strtod.c (main): Don't test NAN macro. Needed for Solaris. Reported by Eric Blake. 2008-03-31 Jim Meyering Don't compare actual signbit return values. * tests/test-strtod.c (main): Rather, compare only their zero/non-zero nature. 2008-03-31 Eric Blake More strtod documentation. * doc/posix-functions/strtod.texi (strtod): Interpret more test failures as distinct bugs. 2008-03-30 Paul Eggert * lib/wchar.in.h [defined __need_mbstate_t]: Just include . Problem reported by Erik Benada in . 2008-03-30 Bruno Haible * tests/test-strtod.c: Add comments about which assertion fails on which platform. * doc/posix-functions/strtod.texi: Add info about many more platforms. 2008-03-30 Eric Blake Test signbit behavior on zeros. * tests/test-signbit.c (test_signbitf): Add tests for zero. (test_signbitd, test_signbitl): Likewise. More strtod touchups. * tests/test-strtod.c (main): Ignore tests for signbit on NaN, and sign of negative underflow, for now. Use .5, not .1. * doc/posix-functions/strtod.texi (strtod): Mention these limitations. Reported by Jim Meyering. 2008-03-30 Bruno Haible * lib/striconveh.h (mem_iconveh, str_iconveh): Optimize the conversion from UTF-8 to UTF-8//TRANSLIT in the same way as from UTF-8 to UTF-8. 2008-03-30 Bruno Haible Avoid failure when attempting to return empty iconv results on some platforms. * lib/striconveh.c (mem_cd_iconveh_internal): In the final memory allocation, don't report ENOMEM when the resulting string is empty. 2008-03-30 Bruno Haible Fix buffer overrun. * lib/vasnprintf.c (VASNPRINTF): If !USE_SNPRINTF && pad_ourselves: Don't consider the width for tmp_length. Check count against tmp_length before doing the padding. Ensure enough allocation during padding. 2008-03-30 Eric Blake strtod touchups. * lib/strtod.c (strtod): Avoid compiler warnings. Reported by Jim Meyering. 2008-03-30 Bruno Haible * lib/unistdio/u-vsprintf.h (EOVERFLOW): Remove fallback. * modules/unistdio/ulc-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-u8-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-u16-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-vsprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-u32-vsprintf (Depends-on): Add EOVERFLOW. * lib/unistdio/u-vsnprintf.h (EOVERFLOW): Remove fallback. * modules/unistdio/ulc-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-u8-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-u16-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-vsnprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-u32-vsnprintf (Depends-on): Add EOVERFLOW. * lib/unistdio/u-vasprintf.h (EOVERFLOW): Remove fallback. * modules/unistdio/ulc-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-u8-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-u16-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-vasprintf (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-u32-vasprintf (Depends-on): Add EOVERFLOW. * lib/unistdio/ulc-vfprintf.c (EOVERFLOW): Remove fallback. * modules/unistdio/ulc-vfprintf (Depends-on): Add EOVERFLOW. * lib/unistdio/ulc-fprintf.c (EOVERFLOW): Remove fallback. * modules/unistdio/ulc-fprintf (Depends-on): Add EOVERFLOW. * lib/xvasprintf.c (EOVERFLOW): Remove fallback. * modules/xvasprintf (Depends-on): Add EOVERFLOW. * lib/vsprintf.c (EOVERFLOW): Remove fallback. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/vsprintf-posix (Depends-on): Add EOVERFLOW. * lib/vsnprintf.c (EOVERFLOW): Remove fallback. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/vsnprintf (Depends-on): Add EOVERFLOW. * lib/vfprintf.c (EOVERFLOW): Remove fallback. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/vfprintf-posix (Depends-on): Add EOVERFLOW. * lib/vasprintf.c (EOVERFLOW): Remove fallback. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/vasprintf (Depends-on): Add EOVERFLOW. * lib/vasnprintf.c (EOVERFLOW): Remove fallback. * m4/vasnprintf.m4 (gl_FUNC_VASNPRINTF): Drop gl_EOVERFLOW. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/ulc-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u8-u8-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u16-u16-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * modules/unistdio/u32-u32-vasnprintf (Files): Remove m4/eoverflow.m4. (Depends-on): Add EOVERFLOW. * lib/sprintf.c (EOVERFLOW): Remove fallback. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/sprintf-posix (Depends-on): Add EOVERFLOW. * lib/snprintf.c (EOVERFLOW): Remove fallback. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/snprintf (Depends-on): Add EOVERFLOW. * lib/poll.c (EOVERFLOW): Remove fallback. * modules/poll (Depends-on): Add EOVERFLOW. * lib/getugroups.c (EOVERFLOW): Remove fallback. * modules/getugroups (Depends-on): Add EOVERFLOW. * lib/getdelim.c (EOVERFLOW): Remove fallback. * modules/getdelim (Depends-on): Add EOVERFLOW. * lib/ftell.c (EOVERFLOW): Remove fallback. * modules/ftell (Depends-on): Add EOVERFLOW. * lib/fprintf.c (EOVERFLOW): Remove fallback. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Drop gl_EOVERFLOW. * modules/fprintf-posix (Depends-on): Add EOVERFLOW. * lib/c-stack.c (EOVERFLOW): Remove unused fallback. * modules/EOVERFLOW-tests: New file. * tests/test-EOVERFLOW.c: New file. * modules/EOVERFLOW: New file. * doc/posix-headers/errno.texi: Mention EOVERFLOW portability problem. 2008-03-30 Bruno Haible Fix bug introduced on 2007-06-10. * lib/vasnprintf.c (VASNPRINTF): When performing zero-padding, use spaces instead of 0 digits for 's' also when ENABLE_UNISTDIO. 2008-03-30 Bruno Haible Improve freadseek's efficiency after ungetc. * lib/freadseek.c: Include freadahead.h. (freadptrinc): New function, extracted from freadseek. (freadseek): Use it in a loop. Use freadahead to determine the number of loop iterations. * modules/freadseek (Depends-on): Add freadahead. (configure.ac): Require AC_C_INLINE. 2008-03-30 Bruno Haible * lib/freadseek.c (freadseek): Don't ignore the return value of freadptr. 2008-03-29 Eric Blake Add hex float support. * modules/strtod (Depends-on): Add c-ctype. (Link): Mention POW_LIB. * lib/strtod.c (strtod): Recognize hex floats. Don't allow whitespace between 'e' and exponent. * tests/test-strtod.c (main): Enable hex float tests. * doc/posix-functions/strtod.texi (strtod): Document what gnulib now provides. Document various strtod bugs, with some fixes. * doc/posix-functions/strtod.texi (strtod): Document bugs with "-0x", "inf", "nan", and hex constants. * doc/posix-functions/atof.texi (atof): Likewise. * modules/stdlib (Makefile.am): Support strtod. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Fit in stdlib framework, and detect additional strtod bugs. * lib/stdlib.in.h (rpl_strtod): Add declarations. * lib/strtod.c (strtod): Return -0.0 on negative underflow. Use bool where appropriate. Parse 'inf' and 'nan'. * tests/test-strtod.c: New file. * modules/strtod (Depends-on): Add stdbool, stdlib. (configure.ac): Turn on module indicator. * modules/strtod-tests: New module. 2008-03-29 Eric Blake Fix ftell on mingw. * lib/ftell.c (EOVERFLOW): Define if the system lacks it. * modules/ftell-tests (Depends-on): Add binary-io. * modules/ftello-tests (Depends-on): Likewise. * tests/test-ftell.c (main): Enhance test to cover behavior after ungetc. Enforce binary mode. * tests/test-ftello.c (main): Likewise. Pass test-freadseek on cygwin. * modules/freadseek (Depends-on): Use freadptr, not freadahead. * lib/freadseek.c (freadseek): Don't increment beyond bounds of ungetc buffer. * tests/test-fflush2.c (main): Fix typo. 2008-03-29 Bruno Haible * tests/test-fflush2.c (main): Temporarily disable the contents of this test. * m4/fflush.m4 (gl_FUNC_FFLUSH): Add a TODO. Reported by Eric Blake. 2008-03-28 Simon Josefsson * lib/gc.h (enum Gc_hash): Add GC_SHA224. (GC_SHA224_DIGEST_SIZE): Add. * lib/gc-libgcrypt.c (gc_hash_open): Handle SHA-224. (gc_hash_digest_length): Likewise. (gc_hash_buffer): Likewise. 2008-03-25 Bruno Haible * doc/gnulib-tool.texi (gettextize and autopoint): Explain in more detail which gettext release to use. Reported by Simon Josefsson. 2008-03-26 Jim Meyering gnumakefile: remove file from $(top_builddir), not from $(top_srcdir) * modules/gnumakefile (clean-GNUmakefile): Also, use test ... && ... || : syntax rather than if-then ... fi. gnumakefile: Don't double-quote-expand $(VPATH) value. * modules/gnumakefile (clean-GNUmakefile): Use single quotes. 2008-03-24 Eric Blake Alter GNUmakefile to install into top directory. * modules/maintainer-makefile: Split, and add dependency... * modules/gnumakefile: to this new module. * build-aux/GNUmakefile: Move... * top/GNUmakefile: ...here. * build-aux/maint.mk: Move... * top/maint.mk: ...here. * MODULES.html.sh (Support for maintaining...): Document new module. 2008-03-23 Bruno Haible * gnulib-tool: New options --vc-files, --no-vc-files. (func_usage): Document them. (vc_files): New variable. (func_import): Consider vc_files. (func_create_testdir): Set vc_files to empty. Suggested by Jim Meyering and Karl Berry. 2008-03-23 Bruno Haible Fix regex compilation error on HP-UX 11. * m4/regex.m4 (gl_PREREQ_REGEX): Require AC_TYPE_MBSTATE_T. * modules/regex (Files): Add m4/mbstate_t.m4. Reported by Ton Voon . 2008-03-23 Bruno Haible * doc/gnulib-tool.texi (gettextize and autopoint): New section. 2008-03-23 Eric Blake Bruno Haible Install files from top/ in the destination directory. * gnulib-tool (func_get_automake_snippet): Synthesize an EXTRA_DIST augmentation also for the files from top/. (func_import, func_create_testdir): Rewrite file names: top/filename -> filename. 2008-03-23 Bruno Haible Tweak "gnulib --version" output. * gnulib-tool (func_version): Replace "-dirty" suffix with "-modified". 2008-03-23 Bruno Haible Tweak "gnulib --version" output. * gnulib-tool (func_version): Use date of last commit to ChangeLog, rather than contents of ChangeLog, when possible. 2008-03-21 Eric Blake More --version tweaks. * gnulib-tool (func_version): Obey GNU Coding Standards. Output date of last ChangeLog entry. 2008-03-21 Jim Meyering * build-aux/GNUmakefile (_have-git-version-gen): Split long line. 2008-03-20 Eric Blake VPATH fix. * build-aux/GNUmakefile (_have_git-version-gen): Look in correct dir. 2008-03-20 Simon Josefsson * build-aux/GNUmakefile: Make git-version-gen optional. Add _build-aux variable. Suggested by Eric Blake . 2008-03-20 Eric Blake Sync GNUmakefile with coreutils. * build-aux/GNUmakefile (have-Makefile): Rename... (_have-Makefile): ...to this, for namespace consideration. (GNUmakefile.cfg): Include, if present. (_autoreconf): Define a default. (_is-dist-target): New rule for rebuilds to pick up intra-release version. (maint-cfg.mk): Rename... (cfg.mk): ...to this. 2008-03-18 Jim Meyering New script and module: mktempd * MODULES.html.sh (maint+release support): Add mktempd. * build-aux/mktempd: New file. * modules/mktempd: New file. 2008-03-15 Jim Meyering Undo last change. * lib/sha1.c, lib/md5.c: 63 != ~63. Reported by Andreas Schwab. sha1.c, md5.c: Hoist a redundant expression. * lib/sha1.c (sha1_process_bytes): AND-off the low bits in "ctx->buflen" only once, before calling *_process_block. * lib/md5.c (md5_process_bytes): Likewise. 2008-03-14 Eric Blake Bump copyright year in files generated by gnulib-tool. * gnulib-tool (func_emit_copyright_notice): Extract copyright from gnulib-tool, rather than hard-coding it. Fix 'gnulib-tool --version' output to work with git. * gnulib-tool (func_gnulib_dir): New function, extracted from... (startup): ...here. (func_version): Use it to invoke git-version-gen, rather than relying on CVS keyword expansion. Modernize wording. (cvsdatestamp, last_checkin_date, version): Kill unused variables. 2008-03-12 Jim Meyering Recognize optional cast of the argument to free. * build-aux/useless-if-before-free: Update regexps. * build-aux/bootstrap (gnulib_tool): Remove trailing blanks. 2008-03-11 Bruno Haible Extend AC_LIB_LINKFLAGS to the situation of several libraries provided by a single package. * m4/lib-link.m4 (AC_LIB_FROMPACKAGE): New macro. (AC_LIB_LINKFLAGS_BODY): Use the information stored by AC_LIB_FROMPACKAGE. Use AC_ARG_WITH instead of AC_LIB_ARG_WITH. Reported by Sam Steingold . 2008-03-12 Sergey Poznyakoff * build-aux/bootstrap (version_controlled_file): Adapt for SVN repositories. 2008-03-11 Bruno Haible Avoid conflicts between local macro definitions. * m4/lib-link.m4 (AC_LIB_LINKFLAGS, AC_LIB_HAVE_LINKFLAGS, AC_LIB_LINKFLAGS_BODY): Use pushdef/popdef instead of define/undefine. 2008-03-10 Peter O'Gorman Bruno Haible Make va_copy work with some version of xlc on AIX 5.1. * lib/stdarg.in.h: New file. * m4/stdarg.m4 (gl_STDARG_H): Initialize STDARG_H and NEXT_STDARG_H. On AIX, use a file substitute. * modules/stdarg (Files): Add lib/stdarg.in.h. (Depends-on): Add include_next. (Makefile.am): Build a stdarg.h substitute if requested. * doc/posix-functions/va_copy.texi: Document the platforms lacking it. 2008-03-10 Bruno Haible * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Document a restriction. * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Likewise. Reported by Peter O'Gorman . 2008-03-10 Bruno Haible * modules/stdlib (Depends-on): Add include_next, remove absolute-header. 2008-03-09 Bruno Haible * lib/freadahead.h (freadahead): Document more precisely. * lib/freadahead.c (freadahead): When an ungetc is in effect, return the sum of both buffer sizes. * tests/test-freadahead.c (main): Also test behaviour after ungetc. * NEWS: Document the change. 2008-03-09 Bruno Haible Extend freadptr to return also the buffer size. * lib/freadptr.h (freadptr): Add sizep argument. * lib/freadptr.c: Include freadptr.h, not freadahead.h. (freadptr): Add sizep argument. Determine buffer size like freadahead does. * tests/test-freadptr.c: Don't include freadahead.h. (main): Adapt for new calling convention of freadptr. * tests/test-freadptr2.c: New file, based on tests/test-freadahead.c. * tests/test-freadptr2.sh: New file, based on tests/test-freadahead.sh. * modules/freadptr-tests (Files): Add tests/test-freadptr2.c, tests/test-freadptr2.sh. (Depends): Remove freadahead. (TESTS): Add test-freadptr2.sh. (check_PROGRAMS): Add test-freadptr2. 2008-03-09 Bruno Haible * doc/Makefile (%.pdf): Explain how to remedy the save_size error. Report and solution by Simon Josefsson. 2008-03-06 Bruno Haible Make fflush after ungetc work on BSD platforms. * lib/fflush.c (rpl_fflush): Discard ungetc buffer if possible. * tests/test-fflush2.c: New file. * tests/test-fflush2.sh: New file. * modules/fflush-tests (Files): Add tests/test-fflush2.sh, tests/test-fflush2.c. (Makefile.am): Build test-fflush2 and run test-fflush2.sh. * doc/posix-functions/fflush.texi: Document fflush after ungetc bug. 2008-03-06 Eric Blake Likewise for ftello. * modules/ftello (Dependencies): Add extensions. * m4/ftello.m4 (gl_FUNC_FTELLO): Require AC_USE_SYSTEM_EXTENSIONS. 2008-03-06 Bruno Haible * modules/fseeko (Dependencies): Add extensions. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Require AC_USE_SYSTEM_EXTENSIONS. Needed on glibc systems. 2008-03-06 Bruno Haible * doc/gnulib-tool.texi (@nosuchmodulenote): Avoid line break inside email address. Reported by Thien-Thi Nguyen . 2008-03-06 Bruno Haible * users.txt: Add libgnupdf. 2008-03-06 Thien-Thi Nguyen (tiny change) * doc/gnulib-tool.texi (@nosuchmodulenote): New macro. (Header File Substitutes, Function Substitutes, Glibc Header File Substitutes, Glibc Function Substitutes): Use it. (Build robot for gnulib): Fix typo. 2008-03-06 Bruno Haible * doc/gnulib-tool.texi (VCS Issues): Small updates. Reported by Thien-Thi Nguyen . 2008-03-06 Bruno Haible * doc/func.texi: New file, extracted from doc/gnulib.texi. * doc/gnulib.texi: Include it. 2008-03-06 Simon Josefsson * modules/func (License): Change license to unlimited; there was no LGPL parts in the module anyway. 2008-03-06 Simon Josefsson * modules/__func__: Renamed to modules/func. * modules/__func__-tests: Renamed to modules/func-tests. * tests/test-__func__.c: Renamed to tests/test-func.c. * m4/__func__.m4: Renamed to m4/func.m4. * doc/gnulib.texi (__func__): Section renamed to func. Suggested by Eric Blake . 2008-03-06 Simon Josefsson * doc/gnulib.texi (__func__): Use C99 terminology when talking about __func__. Make example self-contained. Suggested by Eric Blake . * tests/test-__func__.c (main): Avoid extraneous () around __func. Suggested by Eric Blake . 2008-03-06 Simon Josefsson * modules/__func__: New file. * modules/__func__-tests: New file. * tests/test-__func__.c: New file. * m4/__func__.m4: New file. * doc/gnulib.texi (__func__): Document __func__ module. 2008-03-05 Simon Josefsson * modules/byteswap (License): Re-license as LGPLv2+. 2008-03-05 Simon Josefsson * doc/Makefile: Add pdf target. 2008-03-05 Simon Josefsson * modules/inline (License): Use 'unlimited', since there are only *.m4 files in this module. 2008-03-03 John E. Malmberg (tiny change) Bruno Haible Add support for HP C 7.1 on OpenVMS 8.3. * lib/alloca.in.h (alloca): Define as alias for DEC C on VMS. 2008-03-03 John E. Malmberg (tiny change) Update VMS specifics. * lib/getopt.c [VMS]: Remove include of unixlib.h. 2008-03-02 Jim Meyering Remove the last dependency on the "free" module. * m4/readutmp.m4 (gl_READUTMP): Don't require gl_FUNC_FREE. Reported by Bob Proulx. * lib/getdelim.c (getdelim): Don't leak memory upon failed realloc. Remove useless "if" tests before free. Deprecate "free" module. * doc/posix-functions/free.texi: Mention that this module is no longer useful. * modules/free (Notice): Say this module is obsolete. * modules/readutmp (Depends-on): Remove free. * lib/save-cwd.c (free_cwd): Remove useless "if" before free. * lib/putenv.c (putenv): Likewise. * lib/gc-gnulib.c (gc_cipher_close): Likewise. * lib/getaddrinfo.c (freeaddrinfo): Likewise. * tests/test-c-strcasestr.c (main): Likewise. * tests/test-c-strstr.c (main): Likewise. * tests/test-mbscasestr1.c (main): Likewise. * tests/test-mbscasestr2.c (main): Likewise. * tests/test-mbsstr1.c (main): Likewise. * tests/test-mbsstr2.c (main): Likewise. * tests/test-memmem.c (main): Likewise. * tests/test-strcasestr.c (main): Likewise. * tests/test-striconv.c (main): Likewise. * tests/test-striconveh.c (main): Likewise. * tests/test-striconveha.c (main): Likewise. * tests/test-strstr.c (main): Likewise. * build-aux/git-version-gen: Adjust a comment and the Usage string. bootstrap: sync from coreutils again * build-aux/bootstrap: Remove dangling m4/*.m4 symlinks. 2008-03-01 Jim Meyering bootstrap: sync from coreutils * build-aux/bootstrap (update_po_files): Copy a .po file into place also when the target doesn't exist. 2008-03-01 Eric Blake Fix bugs in last patch. * lib/memchr2.c (memchr2): Fix typo. * tests/test-memchr2.c: Test previous bug, and don't use GNU extension. Reported by Bruce Korb. New module 'memchr2'. * modules/memchr2: New file. * modules/memchr2-tests: Likewise. * lib/memchr2.h: Likewise. * lib/memchr2.c: Likewise, based on memchr.c. * tests/test-memchr2.c: New test. * MODULES.html.sh (String handling): Add memchr2. 2008-02-29 Bruno Haible * modules/freadseek-tests: New file. * tests/test-freadseek.sh: New file. * tests/test-freadseek.c: New file. New module 'freadseek'. * modules/freadseek: New file. * lib/freadseek.h: New file. * lib/freadseek.c: New file. * MODULES.html.sh (File stream based Input/Output): Add freadseek. 2008-02-29 Sergey Poznyakoff * users.txt: Add anubis, cpio, mailfromd, mailutils, radius, wydawca. * m4/argp.m4 (gl_ARGP): Use AC_TRY_LINK to test if program_invocation_name and program_invocation_short_name are present. 2008-02-28 Bruno Haible * tests/test-freadptr.c: Add a test for behaviour after ungetc. * tests/test-freadptr.sh: Also test non-seekable stdin. 2008-02-28 Sergey Poznyakoff * build-aux/bootstrap (source_base, m4_base) (doc_base, tests_base): New variables. (gnulib_tool_options): Do not hardcode base directories, use the above variables instead. 2008-02-28 Atsushi SAKAI * lib/xsize.h: Fix typo in comment: s/tupe/type/. 2008-02-28 Bruno Haible * modules/freadptr-tests: New file. * tests/test-freadptr.sh: New file. * tests/test-freadptr.c: New file. New module 'freadptr'. * modules/freadptr: New file. * lib/freadptr.h: New file. * lib/freadptr.c: New file. * MODULES.html.sh (File stream based Input/Output): Add freadptr. 2008-02-26 Karl Berry Sync from Libtool: * libltdl/argz.c (argz_add, argz_count): New functions. * libltdl/argz.in.h: Declare them. Report by Juan Manuel Guerrero . 2008-02-22 Bruno Haible * m4/time_r.m4 (gl_TIME_R): Also check that localtime_r's return type is a pointer type. Needed for HP-UX 10. * doc/posix-functions/localtime_r.texi: Mention HP-UX 10. * doc/posix-functions/gmtime_r.texi: Likewise. Reported by Peter O'Gorman . 2008-02-24 Bruno Haible * modules/environ-tests: New file. * tests/test-environ.c: New file. New module 'environ'. * modules/environ: New file. * lib/unistd.in.h (environ): New declaration. * m4/environ.m4: New file. (gt_CHECK_VAR_DECL): Moved here from m4/setenv.m4. Undefine gt_cv_var after use. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_ENVIRON and HAVE_DECL_ENVIRON. * modules/unistd (Makefile.am): Substitute also GNULIB_ENVIRON and HAVE_DECL_ENVIRON. * doc/posix-functions/environ.texi: Mention module 'environ'. Remove wrong claim that 'environ' is missing on some systems. * modules/execute (Depends-on): Add environ. * lib/execute.c (environ): Remove fallback declaration. * modules/pipe (Depends-on): Add environ. * lib/pipe.c (environ): Remove fallback declaration. * modules/setenv (Depends-on): Add environ. * lib/setenv.c (environ): Remove fallback declaration. * modules/unsetenv (Depends-on): Add environ. * lib/unsetenv.c (environ): Remove fallback declaration. * m4/setenv.m4 (gt_CHECK_VAR_DECL): Remove macro. Moved to m4/environ.m4. (gl_PREREQ_SETENV): Require gl_ENVIRON instead of testing for environ. (gl_PREREQ_UNSETENV): Likewise. 2008-02-24 Bruno Haible * doc/posix-functions/environ.texi: Document the MacOS X problem. 2008-02-20 Bob Proulx Enable use of older two part flavor 'git describe'. * build-aux/git-version-gen: If using the older two part flavor of git version then recreate the third part now present in the newer three part flavor of git describe. 2008-02-20 Martin Buchholz (tiny change) * lib/fts.c (fts_build): Typo correction to comment. 2008-02-17 Bruno Haible * lib/git-merge-changelog.c (main) [split_merged_entry]: Avoid generating no-op conflicts. 2008-02-17 Bruno Haible Speed up by 10%. * lib/git-merge-changelog.c (main): Use the iterator to iterate through result_entries, rather than an index-based loop. 2008-02-17 Bruno Haible Speed up by 25%. * lib/git-merge-changelog.c (struct entry): New fields 'hashcode', 'hashcode_cached'. (entry_create): New function. (entry_hashcode): Use the cached hashcode if possible. (read_changelog_file, try_split_merged_entry): Use entry_create. 2008-02-17 Bruno Haible Speed up from O(n^2) to O(n) for long ChangeLog files. * lib/git-merge-changelog.c: Include gl_rbtreehash_list.h. (read_changelog_file): Change implementation of entries_reversed list to rbtreehash. * modules/git-merge-changelog (Depends-on): Add rbtreehash-list. 2008-02-17 Bruno Haible New option --split-merged-entry. * lib/git-merge-changelog.c (FSTRCMP_STRICTER_THRESHOLD): New macro. (find_paragraph_end, try_split_merged_entry): New functions. (long_options): Add option --split-merged-entry. (usage): Document option --split-merged-entry. (main): Implement option --split-merged-entry. Reported by Eric Blake. 2008-02-17 Bruno Haible * lib/git-merge-changelog.c: Include c-strstr.h. (main): Support the "git pull --rebase" situation. * modules/git-merge-changelog (Depends-on): Add c-strstr. Reported by Eric Blake. 2008-02-16 Eric Blake Avoid doubling \ in common case of "c-maybe" quoting style. * lib/quotearg.c (quotearg_buffer_restyled): Don't escape \ when eliding outer quotes. * lib/quotearg.h: Document this. * tests/test-quotearg.c (result_strings, inputs, results_g) (flag_results, locale_results): Test it by adding a new string to each test group. (compare_strings): Test new string. 2008-02-13 Eric Blake Avoid trigraph quoting in default output. * lib/quotearg.h (enum quoting_flags): Add QA_SPLIT_TRIGRAPHS. * lib/quotearg.c (quotearg_buffer_restyled): Don't quote trigraphs unless explicitly requested. * tests/test-quotearg.c (flag_results, main): Add additional tests. 2008-02-13 Lasse Collin Don't rely on signed integer overflowing to negative value. * lib/getugroups.c (getugroups): Include . Instead, compare against INT_MAX, and increment only if the test passes. 2008-02-13 Jim Meyering and Eric Blake Avoid shadowing warning and compile errors on Linux. * tests/test-quotearg.c [ENABLE_NLS]: Disable forwarding macros on Linux. (dcgettext): Define a stub, for Linux. (results_g, main): Avoid warnings. 2008-02-12 Eric Blake Silence warning in last patch. * lib/quotearg.c (quotearg_buffer_restyled): Add missing const. Quotearg part 4: add tests, fix c-maybe colon quoting. * lib/quotearg.h: Improve documentation. * lib/quotearg.c (quotearg_buffer_restyled): Don't add extra escapes when adding outer quotes. When quoting trigraphs, use valid C notation. When quoting NUL, omit extra characters if next character is not digit. Alter prototype. (quotearg_buffer, quotearg_alloc_mem, quotearg_n_options): Adjust callers. * modules/quotearg-tests: New module. * tests/test-quotearg.c: New test. 2008-02-07 Eric Blake Quotearg part 3: add flag to control outer quote elision. * lib/quotearg.h (c_maybe_quoting_style): New style. (enum quoting_flags): Better documentation of flags. * lib/quotearg.c (quoting_style_args, quoting_style_vals): Add c-maybe style. (quotearg_buffer_restyled): Handle new flag to elide outer quotes. Quotearg part 2: add flag that can control NUL elision. * lib/quotearg.h (set_quoting_flags): New prototype. * lib/quotearg.c (struct quoting_options): Add flag field. (set_quoting_flags): New function. (quotearg_buffer_restyled): Add flags parameter. (quotearg_alloc_mem): Set the flag if length cannot be returned. (quotearg_n_options): Set the flag, since length cannot be returned. (quoting_options_from_style): Default flags correctly. Quotearg part 1: more wrappers, restore quotearg_char state. * lib/quotearg.h (quotearg_alloc_mem, quotearg_n_mem) (quotearg_mem, quotearg_style_mem, quotearg_char_mem) (quotearg_colon_mem): New wrappers. * lib/quotearg.c (quotearg_alloc, quotearg_char): Rewrite... (quotearg_alloc_mem, quotearg_char_mem): ...in terms of these new functions. (quotearg_n_mem, quotearg_mem, quotearg_style_mem) (quotearg_colon_mem): New functions. 2008-02-11 Bruno Haible * modules/git-merge-changelog (Makefile.am): Don't use -L and -l for a library in the current directory: it does not work with parallel make. Reported by Ralf Wildenhues . 2008-02-11 Bruno Haible * .gitattributes: New file. 2008-02-11 Jim Meyering useless-if-before-free: Fix reversed exit values. * build-aux/useless-if-before-free: Use correct values for EXIT_MATCH and EXIT_NO_MATCH. * build-aux/useless-if-before-free: Close stdout carefully. 2008-02-10 Bruno Haible New module 'git-merge-changelog'. * modules/git-merge-changelog: New file. * lib/git-merge-changelog.c: New file. 2008-02-10 Jim Meyering useless-if-before-free: New option: --list (-l). useless-if-before-free: Don't exit immediately upon open failure. * build-aux/useless-if-before-free: Exit 2 for errors. Upon failure to open a file, don't exit immediately. Rather, just warn and continue with any remaining files. 2008-02-10 Bruno Haible New abstract list operation 'node_set_value'. * lib/gl_list.h (gl_list_node_set_value): New function. (struct gl_list_implementation): New field node_set_value. * lib/gl_list.c (gl_list_node_set_value): New function. * lib/gl_array_list.c (gl_array_node_set_value): New function. (gl_array_list_implementation): Update. * lib/gl_carray_list.c (gl_carray_node_set_value): New function. (gl_carray_list_implementation): Update. * lib/gl_anylinked_list2.h (gl_linked_node_set_value): New function. * lib/gl_linked_list.c (gl_linked_list_implementation): Update. * lib/gl_linkedhash_list.c (gl_linkedhash_list_implementation): Update. * lib/gl_anytree_list2.h (gl_tree_node_set_value): New function. * lib/gl_avltree_list.c (gl_avltree_list_implementation): Update. * lib/gl_rbtree_list.c (gl_rbtree_list_implementation): Update. * lib/gl_avltreehash_list.c (gl_avltreehash_list_implementation): Update. * lib/gl_rbtreehash_list.c (gl_rbtreehash_list_implementation): Update. * lib/gl_sublist.c (gl_sublist_node_set_value): New function. (gl_sublist_list_implementation): Update. 2008-02-10 Bruno Haible * lib/diffseq.h: Write "ELEMENT const" instead of "const ELEMENT". Needed when ELEMENT is #defined to 'some_type *'. 2008-02-10 Jim Meyering New script and module: useless-if-before-free * MODULES.html.sh (maint+release support): Add useless-if-before-free. * build-aux/useless-if-before-free: New file. * modules/useless-if-before-free: New file. * build-aux/gitlog-to-changelog: Use committer date, not author date. xstrtol_error: Fix typo. * lib/xstrtol-error.c (xstrtol_error): The parameter was unused: s/exit_failure/exit_status/. 2008-02-09 Jim Meyering New script and module: gitlog-to-changelog * MODULES.html.sh (maint+release support): Add gitlog-to-changelog. * modules/gitlog-to-changelog: New file. * build-aux/gitlog-to-changelog: New file. 2008-02-08 Jim Meyering Avoid two "parameter unused" warnings. * lib/stat-time.h (get_stat_birthtime_ns, get_stat_birthtime): Mark "st" as used. Use "git COMMAND", not "git-COMMAND". * build-aux/bootstrap (version_controlled_file): s/git-rm/git-rm/. * build-aux/announce-gen (get_tool_versions): Correct a diagnostic. * build-aux/git-version-gen: Use "git status", not "git-status". 2008-02-07 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Don't use %n on native Woe32 systems. Avoids a crash on Windows Vista. Reported by Adam Strzelecki via Simon Josefsson . 2008-02-06 Bruno Haible Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20. * m4/printf.m4 (gl_PRINTF_FLAG_LEFTADJUST): New macro. * lib/vasnprintf.c (VASNPRINTF): Handle NEED_PRINTF_FLAG_LEFTADJUST. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST): New macro. (gl_PREREQ_VASNPRINTF_WITH_EXTRAS): Invoke it. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_FLAG_LEFTADJUST and test its result. Invoke gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * tests/test-vasnprintf-posix.c (test_function): Add testcases for the left-adjust flag. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * doc/posix-functions/fprintf.texi: Update. * doc/posix-functions/printf.texi: Update. * doc/posix-functions/snprintf.texi: Update. * doc/posix-functions/sprintf.texi: Update. * doc/posix-functions/vfprintf.texi: Update. * doc/posix-functions/vprintf.texi: Update. * doc/posix-functions/vsnprintf.texi: Update. * doc/posix-functions/vsprintf.texi: Update. Reported by Peter Fales . 2008-02-06 Bruno Haible Fix bug introduced on 2008-01-26. * lib/isnan.c (FUNC): Set to rpl_isnand, not rpl_isnan. 2008-02-06 Bruno Haible Fix bug introduced on 2007-06-10. * lib/vasnprintf.c (VASNPRINTF): Perform zero-padding also if !NEED_PRINTF_FLAG_ZERO. 2008-02-05 Peter O'Gorman getloadavg: use libperfstat on AIX5 * lib/getloadavg.c, m4/getloadavg.m4 [aix]: Use libperfstat 2008-02-03 Bruno Haible * lib/diffseq.h: Add comments about required #includes. Reported by Michael Biggs . 2008-02-01 Bruno Haible * users.txt: Add gnuit. 2008-01-31 Bruno Haible * lib/md4.c (set_uint32): Mark as inline. * lib/md5.c (set_uint32): Likewise. * lib/sha1.c (set_uint32): Likewise. * m4/md4.m4 (gl_MD4): Require AC_C_INLINE. * m4/md5.m4 (gl_MD5): Likewise. * m4/sha1.m4 (gl_SHA1): Likewise. 2008-01-31 Jim Meyering Use "sizeof VAR", rather than a literal "4". * lib/md5.c (md5_read_ctx): Use sizeof ctx->A, not 4. * lib/md4.c (md4_read_ctx): Likewise. * lib/sha1.c (sha1_read_ctx): Likewise. 2008-01-31 Simon Josefsson * tests/test-sha1.c: New file, based on test-md5.c. * modules/crypto/sha1-tests: New file. 2008-01-31 Simon Josefsson * lib/sha1.h (SHA1_DIGEST_SIZE): Define. 2008-01-31 Jim Meyering Prefer "sizeof v" over the equivalent "4". * lib/md4.c (set_uint32): Use "sizeof v" as memcpy length, not 4. * lib/md5.c (set_uint32): Likewise. * lib/sha1.c (set_uint32): Likewise. 2008-01-31 Simon Josefsson * lib/sha1.c (set_uint32): Mark function as static. 2008-01-31 Simon Josefsson md2: clarify comments to say that alignment is not required. * lib/md2.h: Remove warning about alignment in comment. * lib/md2.c (md2_read_ctx, md2_finish_ctx): Doc fix, alignment has never been required. 2008-01-31 Simon Josefsson md4: adapt alignment constraint fix from sha1. * lib/md4.c (set_uint32): New function, from sha1.c (md4_read_ctx): Use it. (md4_finish_ctx): Doc fix. * lib/md4.h: Doc fix. 2008-01-31 Simon Josefsson md5: adapt alignment constraint fix from sha1. * lib/md5.c (set_uint32): New function, from sha1.c (md5_read_ctx): Use it. (md5_finish_ctx): Doc fix. * lib/md5.h: Doc fix. 2008-01-30 Peter Palfrader sha1: remove the result buffer alignment constraint * lib/sha1.c (set_uint32): New function. (sha1_read_ctx): Rewrite to remove the result buffer alignment constraint. (sha1_finish_ctx): Remove comment warning about alignment constraint. * lib/sha1.h: Likewise. 2008-01-30 Andreas Schwab Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Include and ensure a correct definition of LDBL_MIN_EXP. 2008-01-30 Karl Berry * config/srclist-update: try to preserve x bit on updates. * config/srclistvars.sh: update for karl. 2008-01-29 Jim Meyering vasnprintf.c: Avoid warning about unused label * lib/vasnprintf.c (VASNPRINTF) [!USE_SNPRINTF]: Guard the "overflow" label definition and associated code with the same cpp condition that guards the sole use of that label. 2008-01-26 Bruno Haible * m4/isnanl.m4 (gl_HAVE_ISNANL_NO_LIBM, gl_HAVE_ISNANL_IN_LIBM, gl_FUNC_ISNANL_WORKS): Test the GCC >= 4.0 built-in. * lib/isnanl.h (isnanl): Use the GCC >= 4.0 built-in. * lib/isnanl-nolibm.h (isnanl): Likewise. Reported by Paul Eggert . 2008-01-26 Bruno Haible * m4/isnand.m4 (gl_FUNC_ISNAND_NO_LIBM): Test the GCC >= 4.0 built-in. * lib/isnand.h (isnand): Use the GCC >= 4.0 built-in. 2008-01-26 Bruno Haible * m4/isnanf.m4 (gl_HAVE_ISNANF_NO_LIBM, gl_ISNANF_WORKS): Test the GCC >= 4.0 built-in. * lib/isnanf.h (isnanf): Use the GCC >= 4.0 built-in. 2008-01-26 Bruno Haible Rename isnan, applicable to 'double' only, to isnand. * modules/isnand-nolibm: Renamed from modules/isnan-nolibm. (Files): Add lib/isnand.h, lib/isnand.c. Remove lib/isnan.h. (configure.ac): Update. (Include): Replace "isnan.h" with "isnand.h". * m4/isnand.m4: Renamed from m4/isnan.m4. (gl_FUNC_ISNAND_NO_LIBM): Renamed from gl_FUNC_ISNAN_NO_LIBM. Set HAVE_ISNAND_IN_LIBC instead of HAVE_ISNAN_IN_LIBC. Build isnand.c instead of isnan.c. * lib/isnand.h: Renamed from lib/isnan.h. Test HAVE_ISNAND_IN_LIBC instead of HAVE_ISNAN_IN_LIBC. (isnand): Renamed from isnan. * lib/isnand.c: New file. * modules/isnand-nolibm-tests: Renamed from modules/isnan-nolibm-tests. (Files): Add tests/test-isnand.c. Remove tests/test-isnan.c. (Makefile.am): Update. * tests/test-isnand.c: Renamed from tests/test-isnan.c. Include isnand.h instead of isnan.h. (main): Test isnand instead of isnan. * modules/fprintf-posix (Depends-on): Add isnand-nolibm, remove isnan-nolibm. * modules/frexp (Depends-on): Likewise. * modules/frexp-tests (Depends-on): Likewise. * modules/frexp-nolibm (Depends-on): Likewise. * modules/frexp-nolibm-tests (Depends-on): Likewise. * modules/isfinite (Depends-on): Likewise. * modules/round-tests (Depends-on): Likewise. * modules/signbit (Depends-on): Likewise. * modules/signbit-tests (Depends-on): Likewise. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/trunc-tests (Depends-on): Likewise. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * lib/frexp.c: Include isnand.h instead of isnan.h. (ISNAN): Set to isnand instead of isnan. * lib/isfinite.c: Include isnand.h instead of isnan.h. (gl_isfinited): Use isnand instead of isnan. * lib/signbitd.c: Include isnand.h instead of isnan.h. (gl_signbitd): Use isnand instead of isnan. * lib/vasnprintf.c: Include isnand.h instead of isnan.h. (is_infinite_or_zero, VASNPRINTF): Use isnand instead of isnan. * tests/test-frexp.c: Include isnand.h instead of isnan.h. (main): Use isnand instead of isnan. * tests/test-round1.c: Include isnand.h. (main): Use isnand instead of isnan. * tests/test-round2.c: Include isnand.h instead of isnan.h. (ISNAN): Set to isnand instead of isnan. * tests/test-trunc1.c: Include isnand.h. (main): Use isnand instead of isnan. * tests/test-trunc2.c: Include isnand.h instead of isnan.h. (equal): Use isnand instead of isnan. * MODULES.html.sh (Mathematics ): Replace isnan-nolibm with isnand-nolibm. * NEWS: Mention the change. 2008-01-25 Paul Eggert Bruno Haible * m4/signbit.m4 (gl_SIGNBIT): Require a macro definition. Test whether the GCC builtins for signbits are present and set REPLACE_SIGNBIT_USING_GCC if so. * lib/math.in.h (signbit): Define using GCC builtins if REPLACE_SIGNBIT_USING_GCC is set. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_SIGNBIT_USING_GCC. * modules/math (Makefile.am): Substitute REPLACE_SIGNBIT_USING_GCC. 2008-01-25 Jim Meyering Prefer over "config.h". See autoconf doc for explanation. * lib/poll.c: Include , not "config.h". * tests/test-getaddrinfo.c: Likewise. 2008-01-25 Simon Josefsson * modules/sockets-tests: New file. 2008-01-24 Simon Josefsson * modules/sockets: New module, can be used to call WSA_Startup and WSA_Cleanup when needed. * lib/sockets.h, lib/sockets.c: New files. * m4/sockets.m4: New file. * tests/test-sockets.c: New file. 2008-01-19 Bruno Haible * doc/posix-headers: Renamed from doc/headers. * doc/posix-functions: Renamed from doc/functions. * doc/gnulib.texi: Update. 2008-01-19 Bruno Haible * doc/glibc-functions/strcasestr.texi: Include contents of doc/functions/strcasestr.texi, fixing the list of platforms. * doc/functions/strcasestr.texi: Remove file. 2008-01-19 Bruno Haible * doc/glibc-functions/memmem.texi: Include contents of doc/functions/memmem.texi. * doc/functions/memmem.texi: Remove file. 2008-01-18 Bruno Haible * doc/glibc-functions/*.texi: New files. * doc/gnulib.texi (Glibc Function Substitutes): Completely rewritten to use the new files. 2008-01-17 Bruno Haible * tests/test-gethostname.c (main): Fix printf statement. 2008-01-17 Simon Josefsson * modules/gethostname-tests: New file. * tests/test-gethostname.c: New file. 2008-01-17 Simon Josefsson * lib/gethostname.c: Include string.h unconditionally, strncpy is used by the UNAME case. Reported by Bruno Haible . 2008-01-17 Eric Blake Convert c-strcasestr to be more efficient. * modules/c-strcasestr (Files): Use Two-Way, not KMP. (Depends-on): Add c-strcase, remove malloca, strnlen. * tests/test-c-strcasestr.c (main): Enhance test. * lib/c-strcasestr.c (c_strcasestr): Rewrite to new algorithm. 2007-01-16 Paolo Bonzini * build-aux/bootstrap (MSGID_BUGS_ADDRESS): New overridable variable. Use it in creating po/Makevars. 2008-01-15 Simon Josefsson * lib/gc-libgcrypt.c (gc_init): Disable secure memory by default. Applications that requires it should initialize libgcrypt manually. 2008-01-16 Simon Josefsson * lib/gethostname.c [!HAVE_UNAME]: Need string.h for strcpy. 2008-01-15 Paul Eggert Fix problem with getdate on mingw32 reported by Simon Josefsson in . * lib/getdate.y (get_date): Check "HAVE_DECL_TZNAME", not "defined tzname", when deciding whether to declare tzname. * lib/strftime.c (tzname): Likewise. 2008-01-15 Bruno Haible Work around a MacOS X 10.5 bug in frexpl(). * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Also check denormalized numbers. * doc/functions/frexpl.texi: Document the bug. Reported by Elias Pipping . 2008-01-14 Eric Blake Touch up previous patch. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): Fix typo. * doc/functions/strcasestr.texi (strcasestr): Document OpenBSD bug. Convert strcasestr module to use Two-Way algorithm. * modules/strcasestr-simple: New module, based on the old strcasestr, but with Two-Way rather than KMP. * modules/strcasestr (Depends-on): Change to strcasestr-simple. * lib/string.in.h (rpl_strcasestr): Declare. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Check for linear performance. * lib/strcasestr.c (strcasestr): Simplify, and avoid malloc. * modules/string (Makefile.am): Support strcasestr. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Likewise. * modules/strcasestr-tests (Depends-on): Check for alarm. * tests/test-strcasestr.c: Augment test. * lib/str-two-way.h: Clean up stray macro. * NEWS: Document new module. * MODULES.html.sh (string handling): Likewise. * doc/functions/strcasestr.texi: New file. * doc/gnulib.texi (Function Substitutes): New node. Move memmem here, since it is not a POSIX function. 2008-01-14 Colin Watson Bruno Haible * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Also check whether strsignal works fine; if not, set REPLACE_STRSIGNAL. (gl_PREREQ_STRSIGNAL): Require AC_DECL_SYS_SIGLIST. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize REPLACE_STRSIGNAL. * lib/string.in.h (strsignal): Consider REPLACE_STRSIGNAL. * modules/string (Makefile.am): Substitute REPLACE_STRSIGNAL. * tests/test-strsignal.c (main): Check out-of-range signal numbers. 2008-01-14 Bruno Haible * modules/strsignal (Include): Change to . 2008-01-14 Colin Watson * modules/argp (Notice): Add a notice recommending to change XGETTEXT_OPTIONS. (configure.ac): Invoke AM_XGETTEXT_OPTION if it exists. 2008-01-13 Colin Watson * modules/strsignal-tests: New file. * tests/test-strsignal.c: New file. * lib/strsignal.c: New file, from glibc with modifications. * lib/siglist.h: New file, from glibc with modifications. * lib/string.in.h (strsignal): New declaration. * m4/strsignal.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize GNULIB_STRSIGNAL and HAVE_DECL_STRSIGNAL. * modules/strsignal: New file. * modules/string (Makefile.am): Substitute GNULIB_STRSIGNAL and HAVE_DECL_STRSIGNAL. 2008-01-13 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Check that the locale encoding is not ASCII. Needed for OpenBSD 4.0. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. 2008-01-13 Bruno Haible * lib/argp-fmtstream.h (__attribute__): Don't redefine if __STRICT_ANSI__ is set: it's not needed by any version of gcc. * lib/argp.h (__attribute__): Likewise. * lib/c-stack.c (__attribute__): Likewise. * lib/error.h (__attribute__): Likewise. * lib/fts.c (__attribute__): Likewise. * lib/openat.h (__attribute__): Likewise. * lib/stdio.in.h (__attribute__): Likewise. * lib/string.in.h (__attribute__): Likewise. * lib/utimens.c (__attribute__): Likewise. * lib/vasnprintf.h (__attribute__): Likewise. * lib/xalloc.h (__attribute__): Likewise. * lib/xprintf.h (__attribute__): Likewise. * lib/xstrtol.h (__attribute__): Likewise. * lib/xvasprintf.h (__attribute__): Likewise. 2008-01-12 Bruno Haible * doc/gnulib.texi (Glibc Header File Substitutes): New chapter. * doc/glibc-headers/a.out.texi: New file. * doc/glibc-headers/aliases.texi: New file. * doc/glibc-headers/alloca.texi: New file. * doc/glibc-headers/ar.texi: New file. * doc/glibc-headers/argp.texi: New file. * doc/glibc-headers/argz.texi: New file. * doc/glibc-headers/byteswap.texi: New file. * doc/glibc-headers/crypt.texi: New file. * doc/glibc-headers/endian.texi: New file. * doc/glibc-headers/envz.texi: New file. * doc/glibc-headers/err.texi: New file. * doc/glibc-headers/error.texi: New file. * doc/glibc-headers/execinfo.texi: New file. * doc/glibc-headers/fpu_control.texi: New file. * doc/glibc-headers/fstab.texi: New file. * doc/glibc-headers/fts.texi: New file. * doc/glibc-headers/getopt.texi: New file. * doc/glibc-headers/ieee754.texi: New file. * doc/glibc-headers/ifaddrs.texi: New file. * doc/glibc-headers/libintl.texi: New file. * doc/glibc-headers/mcheck.texi: New file. * doc/glibc-headers/mntent.texi: New file. * doc/glibc-headers/obstack.texi: New file. * doc/glibc-headers/paths.texi: New file. * doc/glibc-headers/printf.texi: New file. * doc/glibc-headers/pty.texi: New file. * doc/glibc-headers/resolv.texi: New file. * doc/glibc-headers/shadow.texi: New file. * doc/glibc-headers/sysexits.texi: New file. * doc/glibc-headers/ttyent.texi: New file. 2008-01-12 Jim Meyering announce-gen: emit Gnulib's git-based version string. * build-aux/announce-gen: Remove option: --gnulib-snapshot-time-stamp=S. New option --gnulib-version=V, where V is expected to be the output of running git describe in the gnulib directory. (get_tool_versions): Request feedback on xdelta. I suspect it's not useful, and plan to stop publishing an xdelta file with each coreutils release. * build-aux/announce-gen: Also check for lzma-compressed files. 2008-01-11 Bruno Haible * tests/test-memmem.c (main): Increase maximum allowed time. * tests/test-strstr.c (main): Likewise. 2008-01-11 Bruno Haible * doc/functions/memmem.texi: Add more precisions about platforms. * doc/functions/strstr.texi: Likewise. 2008-01-10 Eric Blake * m4/strstr.m4: Delete cruft from copy-n-paste. Reported by Bruno Haible. 2008-01-10 Bruno Haible Make c-strstr rely on strstr. * lib/c-strstr.c: Don't include str-kmp.h. (c_strstr): Define in terms of strstr. * modules/c-strstr (Files): Remove lib/str-kmp.h. (Depends-on): Remove stdbool, malloca, strnlen. Add strstr. 2008-01-10 Bruno Haible * doc/gnulib.texi (String Functions in C Locale): New section. * doc/c-ctype.texi: New file. * doc/c-strcase.texi: New file. * doc/c-strcaseeq.texi: New file. * doc/c-strcasestr.texi: New file. * doc/c-strstr.texi: New file. * doc/c-strtod.texi: New file. * doc/c-strtold.texi: New file. 2008-01-10 Eric Blake * lib/relocatable.h: Fix a comment. 2008-01-10 Eric Blake Share two-way algorithm. * lib/str-two-way.h: New file, merged from... * lib/memmem.c: ...here... * lib/strstr.c: ...and here. * modules/memmem (Files): Use it. * modules/strstr (Files): Likewise. Avoid quadratic strstr implementations. * lib/strstr.c: New file. * m4/strstr.m4: Likewise. * modules/strstr: Likewise. * modules/strstr-tests: Likewise. * tests/test-strstr.c: Likewise. * lib/string.in.h (rpl_strstr): Declare. (memmem) [GNULIB_POSIXCHECK]: Document speed issue. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Support strstr. * modules/string (Makefile.am): Likewise. * MODULES.html.sh (string handling): Mention new module. * doc/functions/strstr.texi (strstr): Document the bug. 2008-01-10 Bruno Haible * lib/relocatable.h (relocate): State whether result is freshly allocated or not. * lib/relocatable.c (relocate): Return a freshly allocated string instead of a pointer to a privately held string. Reported by Sylvain Beucler . 2008-01-10 Colin Watson * lib/canonicalize-lgpl.c [!_LIBC]: Fix typo in #if directive: s/S_ISNLK/S_ISLNK/. 2008-01-09 Bruno Haible * doc/functions/memmem.texi: Use the same structure as snprintf.texi and other files. * m4/memmem.m4 (gl_FUNC_MEMMEM): Say "guessing no" instead of "no" if it's only a guess. * modules/memmem: Simplify by depending on memmem-simple. 2008-01-09 Bruno Haible Work around OpenBSD 4.0 tdelete() bug. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Also check tdelete's return value. * lib/search.in.h: If REPLACE_TSEARCH is 1, define tsearch etc. as macros and don't redefine the enum values. * m4/search_h.m4 (gl_SEARCH_H_DEFAULTS): Initialize REPLACE_TSEARCH. * modules/search (Makefile.am): Also substitute REPLACE_TSEARCH. * doc/functions/tdelete.texi: Document the OpenBSD 4.0 bug. 2008-01-09 Bruno Haible * tests/test-wcwidth.c: Include and localcharset.h. (main): Don't perform the tests if setlocale did not install a UTF-8 locale. Needed on OpenBSD 4.0. * modules/wcwidth-tests (Depends-on): Add localcharset. 2008-01-09 Paul Eggert gl_FUNC_ALLOCA no longer defines HAVE_ALLOCA_H unconditionally. See . * NEWS: announce this. * m4/alloca.m4 (gl_FUNC_ALLOCA): Don't define HAVE_ALLOCA_H. 2008-01-09 Simon Josefsson and Eric Blake Add memmem-simple module. * m4/memmem.m4 (gl_FUNC_MEMMEM_SIMPLE): New macro. (gl_FUNC_MEMMEM): Separate performance from presence checks. * modules/memmem-simple: New file. * modules/memmem (Description): Tweak. * MODULES.html.sh (string handling): Mention new module. * doc/functions/memmem.texi (memmem): Distinguish which flaws are addressed by memmem-simple. * NEWS: Document the difference. 2008-01-09 Eric Blake Give gcc some memmem optimization hints. * lib/string.in.h (memmem, memrchr, strchrnul, strnlen, strpbrk) (strcasestr): Declare as pure. * modules/memmem (Maintainer): Claim my implementation. 2008-01-09 Ralf Wildenhues Support AIX 6.1 and higher. * build-aux/config.libpath: Likewise. * build-aux/config.rpath: Likewise. 2008-01-08 Jim Meyering Bruno Haible * lib/printf-parse.c (PRINTF_PARSE): Handle a size specifier "q" on MacOS X and a size specifier "I64" on mingw. Needed for PRIdMAX. Reported by Peter Fales in . 2008-01-08 Bruno Haible * modules/unictype/category-of (Depends-on): Add unictype/category-none. * modules/unictype/category-and-tests (Depends-on): Add unictype/category-{L,N,Lu,Nd}. * modules/unictype/category-and-not-tests (Depends-on): Likewise. * modules/unictype/category-or-tests (Depends-on): Add unictype/category-{L,N}. * modules/unictype/category-name-tests (Depends-on): Add unictype/category-{Z,Nl}. Reported by Simon Josefsson. 2008-01-08 Bruno Haible * lib/str-kmp.h (knuth_morris_pratt_unibyte): Document the calling convention better. * lib/mbsstr.c (knuth_morris_pratt_multibyte): Likewise. * lib/mbscasestr.c (knuth_morris_pratt_multibyte): Likewise. Reported by Peter Miller . 2008-01-08 Eric Blake Rewrite memmem to guarantee linear complexity without malloc. * lib/memmem.c (memmem): Use Two-Way rather than Knuth-Morris-Pratt, to allow O(1) space usage. (critical_factorization, two_way_short_needle) (two_way_long_needle): New functions. (knuth_morris_pratt): Delete. * modules/memmem (Depends-on): No longer need malloca or stdbool. Add stdint. * tests/test-memmem.c (main): Add tests for periodic needle and sublinear performance. * doc/functions/memmem.texi (memmem): Document other deficiencies in cygwin and older glibc. 2008-01-08 Bruno Haible * modules/memmem-tests (Makefile.am): Remove TESTS_ENVIRONMENT augmentation. 2008-01-08 Mike Frysinger Add a configure time option: --disable-acl. * m4/acl.m4 (gl_FUNC_ACL): Wrap all ACL logic in a call to AC_ARG_ENABLE(acl). 2008-01-06 Simon Josefsson * tests/test-localename.c: Don't include obsolete "setenv.h". * modules/localename-tests (Depends-on): Need unsetenv. 2008-01-08 Ralf Wildenhues * DEPENDENCIES: Require Texinfo version 4.6 or newer. 2008-01-06 Colin Watson * users.txt: Add man-db. 2008-01-07 Bruno Haible * doc/gnulib-intro.texi (Library vs Reusable Code): Restore the previous section name. 2008-01-07 Bruno Haible * lib/progname.c (set_program_name): Don't strip off a leading "lt-" prefix outside a .libs directory. Suggested by Paul Eggert. 2008-01-01 Sylvain Beucler Bruno Haible Improve memory cleanup in 'relocatable' module. * lib/relocatable.h (compute_curr_prefix): Change return type to 'char *'. * lib/relocatable.c (compute_curr_prefix): Change return type to 'char *'. Free curr_installdir after use. (relocate): Free curr_prefix_better after use. * lib/progreloc.c (prepare_relocate): Free curr_prefix after use. 2008-01-01 Bruno Haible * tests/test-wcwidth.c (main): Relax test of U+2060. Avoids a test failure on older glibc systems. Reported by Peter Fales . 2008-01-05 Eric Blake Avoid quadratic system memmem. * m4/memmem.m4 (gl_FUNC_MEMMEM): Check for quadratic memmem. Reported by Ralf Wildenhues. Fix memmem test for mingw. * modules/memmem-tests (configure.ac): Check for alarm. * tests/test-memmem.c (main): Avoid alarm on platforms that lack it. * doc/functions/memmem.texi: New file. * doc/gnulib.texi (Function Substitutes): Add memmem. Reported by Bruno Haible. 2008-01-04 Bruno Haible * m4/strcase.m4 (gl_FUNC_STRCASECMP, gl_FUNC_STRNCASECMP): Require gl_HEADER_STRINGS_H_DEFAULTS, not gl_HEADER_STRING_H_DEFAULTS. 2008-01-04 Eric Blake Shorten duration of memmem test. * tests/test-memmem.c (main): Use alarm to declare failure if test is taking too long. Reported by Ralf Wildenhues. 2007-12-21 Simon Josefsson * modules/relocatable-prog-wrapper (Depends-on): Add intprops and string, needed by strerror. 2008-01-03 Colin Watson Bruno Haible * doc/gnulib-tool.texi (Localization): New section. 2008-01-02 Bruno Haible * lib/memmem.c (knuth_morris_pratt, memmem): Change all 'char *' variables to 'unsigned char *' type. Reported by Paul Eggert. 2008-01-02 Jim Meyering * lib/version-etc.c (COPYRIGHT_YEAR): Increase for new year. 2007-12-31 Jim Meyering Avoid use of private FTS type name. * lib/fts.c (fts_sort): Use FTSENT rather than "struct _ftsent". 2007-12-30 Karl Berry * doc/gnulib.texi (Library vs. Reusable Code): remove period, to work around defect in Texinfo and/or the standalone Info browser. 2007-12-30 Bruno Haible Unify 5 copies of the KMP code. * lib/str-kmp.h: New file. * lib/c-strcasestr.c: Include str-kmp.h. (knuth_morris_pratt): Remove function. (c_strcasestr): Update. * lib/c-strstr.c: Include str-kmp.h. (knuth_morris_pratt): Remove function. (c_strcasestr): Update. * lib/mbscasestr.c: Include str-kmp.h. (knuth_morris_pratt_unibyte): Remove function. * lib/mbsstr.c: Include str-kmp.h. (knuth_morris_pratt_unibyte): Remove function. * lib/strcasestr.c: Include str-kmp.h. (knuth_morris_pratt): Remove function. (strcasestr): Update. * modules/c-strcasestr (Files): Add lib/str-kmp.h. * modules/c-strstr (Files): Likewise. * modules/mbscasestr (Files): Likewise. * modules/mbsstr (Files): Likewise. * modules/strcasestr (Files): Likewise. Suggested by Paul Eggert. 2007-12-30 Bruno Haible * lib/xmalloca.c (xmmalloca): Don't define if HAVE_ALLOCA is not defined. 2007-12-30 Bruno Haible * lib/xmalloca.h: Include xalloc.h. (xnmalloca): New macro. 2007-12-30 Bruno Haible * lib/malloca.h (nmalloca): New macro. * lib/c-strcasestr.c (knuth_morris_pratt): Use it. * lib/c-strstr.c (knuth_morris_pratt): Likewise. * lib/mbscasestr.c (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): Likewise. * lib/mbsstr.c (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): Likewise. * lib/memmem.c (knuth_morris_pratt): Likewise. * lib/strcasestr.c (knuth_morris_pratt): Likewise. 2007-12-25 Bruno Haible Fixup after 2007-10-17 commit. Ensure that 'glob' stays under LGPLv2+. * lib/glob.c: Don't include openat.h. (link_exists2_p): Add back the code that deals with the !GLOB_ALTDIRFUNC case. (link_exists_p) [!_LIBC && !HAVE_FSTATAT]: Just call link_exists2_p and let it do the filename concatenation. * m4/glob.m4 (gl_PREREQ_GLOB): Add check for fstatat. * modules/glob (Depends-on): Remove openat. 2007-12-31 Bruno Haible * modules/dirfd (License): Change to LGPLv2+. Approved by Jim Meyering. 2007-12-29 Paul Eggert * lib/memmem.c (knuth_morris_pratt): Check for size_t overflow when multiplying M by sizeof (size_t). 2007-12-10 Martin Lambers Override getpagesize on mingw. * lib/getpagesize.c: New file. * m4/getpagesize.m4 (gl_FUNC_GETPAGESIZE): Enable replacement on mingw. * modules/getpagesize (Files): Add lib/getpagesize.c. * lib/unistd.in.h (getpagesize): Declare if we are using a replacement. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize REPLACE_GETPAGESIZE. * modules/unistd (Makefile.am): Substitute REPLACE_GETPAGESIZE. 2007-12-25 Bruno Haible * modules/localcharset (Notice): New field. (configure.ac): Define LOCALCHARSET_TESTS_ENVIRONMENT. Suggested by Ben Pfaff . 2007-12-25 Paul Eggert Bruno Haible Avoid using the syntax symbol() in formatted documentation. * MODULES.html.sh (func_module): When replacing symbol() with a hyperlink, remove the parentheses. Show an error if some remain. Recognize and render the '...' syntax. * doc/alloca-opt.texi: Remove parentheses from symbol reference. Rework. Add paragraph about GCC's inlining. * doc/alloca.texi: Likewise. * doc/error.texi: Remove parentheses from symbol reference. * doc/gnulib-intro.texi: Likewise. * doc/gnulib.texi (alloca, alloca-opt): New nodes. * modules/fnmatch (Description): Reword to say "the ... function". * modules/full-read (Description): Likewise. * modules/full-write (Description): Likewise. * modules/safe-read (Description): Likewise. * modules/safe-write (Description): Likewise. * modules/strchrnul (Description): Likewise. * modules/trim (Description): Likewise. * modules/error (Description): Remove parentheses from symbol references. * modules/verror (Description): Likewise. Reported by Karl Berry. 2007-12-25 Bruno Haible Fixup after 2007-10-16 commit. * lib/glob.c (glob_in_dir): Don't use ISO C99 syntax. 2007-12-24 Bruno Haible Make --enable-relocatable work with DESTDIR. * build-aux/install-reloc: Accept another argument 'destdir'. Use it to compute installdir from destprog. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): In INSTALL_PROGRAM_ENV, also set the RELOC_DESTDIR variable. Reported by Левашев Иван . 2007-12-24 Bruno Haible Fix link error due to xalloc_die(). * lib/progreloc.c: When NO_XMALLOC is defined, use areadlink instead of xreadlink. * lib/relocwrapper.c: Update comments. * build-aux/install-reloc: Remove xreadlink.c from file list. * modules/relocatable-prog-wrapper (Files): Remove xreadlink.h and xreadlink.c. Reported by Левашев Иван . 2007-12-24 Bruno Haible Split setenv module into setenv and unsetenv. Get rid of setenv.h. * lib/setenv.h: Remove file. * lib/stdlib.in.h (setenv, unsetenv): New declarations, moved here from lib/setenv.h. * modules/setenv (Files): Remove lib/setenv.h, lib/unsetenv.c. (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. Don't invoke gl_FUNC_UNSETENV. (Include): Replace setenv.h with . * modules/unsetenv: New file. * lib/setenv.c: Include first, after alloca.h. * lib/unsetenv.c: Include first. * m4/setenv.m4 (gl_FUNC_SETENV, gl_FUNC_SETENV_SEPARATE): Require gl_STDLIB_H_DEFAULTS. Conditionally set HAVE_SETENV to 0. (gl_FUNC_UNSETENV): Require gl_STDLIB_H_DEFAULTS. Conditionally set HAVE_UNSETENV to 0. Set VOID_UNSETENV as an AC_SUBSTed variable. * modules/stdlib (Makefile.am): Substitute also GNULIB_SETENV, HAVE_SETENV, GNULIB_UNSETENV, HAVE_UNSETENV, VOID_UNSETENV. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_SETENV, HAVE_SETENV, GNULIB_UNSETENV, HAVE_UNSETENV, VOID_UNSETENV. * doc/functions/unsetenv.texi: Update. * modules/xsetenv (Depends-on): Add unsetenv. * modules/getdate (Depends-on): Likewise. * lib/xsetenv.h: Include instead of setenv.h. * lib/xsetenv.c: Don't include setenv.h. * lib/getdate.y: Likewise. * lib/relocwrapper.c: Likewise. * modules/relocatable-prog-wrapper (Files): Remove lib/setenv.h. (Depends-on): Add stdlib. * NEWS: Mention the changes. Reported by Левашев Иван . 2007-12-23 Bruno Haible * lib/memmem.c (memmem): Use lowercase variable names. Tab indentation. 2007-12-23 Bruno Haible * lib/c-strcasestr.c: Add more comments. * lib/c-strstr.c: Likewise. * lib/mbscasestr.c: Likewise. * lib/mbsstr.c: Likewise. * lib/strcasestr.c: Likewise. * lib/memmem.c: Likewise. 2007-12-23 Bruno Haible * tests/test-memmem.c: Include first. 2007-12-22 Bruno Haible * gnulib-tool (func_create_testdir): Change $auxdir while generating the contents of $testsbase. Reported by Ralf Wildenhues. 2007-12-22 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Replace local_ldadd with two variables local_ldadd_before, local_ldadd_last. 2007-12-20 Eric Blake Work around circular library issue when cross-compiling. * lib/progname.c (set_program_name): Use strncmp, not memcmp, so that progname.o does not need to pull in rpl_memcmp. 2007-12-19 Eric Blake Fix memmem to avoid O(n^2) worst-case complexity. * lib/memmem.c (knuth_morris_pratt): New function. (memmem): Use it if first few naive iterations fail. * m4/memmem.m4 (gl_FUNC_MEMMEM): Detect cygwin bug. * modules/memcmp (License): Set to LGPLv2+, not LGPL. * modules/memchr (License): Likewise. * modules/memmem (Depends-on): Add memcmp, memchr, stdbool, and malloca. * tests/test-memmem.c: Rewrite, borrowing ideas from test-mbsstr1.c; the old version wouldn't even compile! * modules/memmem-tests: New file. * lib/string.in.h (rpl_memmem): Add declaration. * modules/string (Makefile.am): Substitute REPLACE_MEMMEM. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Default for REPLACE_MEMMEM. 2007-12-18 Paul Eggert Fix problem with _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H on VMS. * lib/stdint.in.h (_GL_JUST_INCLUDE_SYSTEM_INTTYPES_H): Define before any system include files, and undef after them all. This should fix a problem on VMS reported by John E. Malmberg in . 2007-12-17 Eric Blake Revert addition of verify, for BSD/OS. * lib/fseeko.c [!HAVE_FSEEKO]: Allow off_t > long, even though it can't handle large files, for the sake of obsolete platforms. * modules/fseeko (Depends-on): Remove verify. * doc/functions/fseeko.texi (fseeko): Document BSD/OS limitation. * doc/functions/ftello.texi (ftello): Likewise. * doc/functions/fgetpos.texi (fgetpos): Likewise. Reported by Larry Jones. 2007-12-17 Petr Salinger getcwd.c: Use a more readable witness: HAVE_OPENAT_SUPPORT * lib/getcwd.c: Define and use HAVE_OPENAT_SUPPORT, in place of AT_FDCWD. 2007-12-17 Jim Meyering Port to GNU/kFreeBSD - FreeBSD kernel + GNU libc, which has no openat syscall, yet does define AT_FDCWD. * lib/getcwd.c: Undef AT_FDCWD if there is no openat function. * modules/getcwd (Depends-on): Add openat. Reported by Petr Salinger. 2007-12-17 Bruno Haible * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Use GL_NOCRASH to avoid a segmentation fault of the configure test on x86_64 systems. 2007-12-15 Jim Meyering * build-aux/gnupload (GPG): Don't hard-code absolute name of gpg binary. 2007-12-13 Eric Blake Another fseek test. * tests/test-fseek.c (main): Also test ungetc handling. * tests/test-fseeko.c (main): Likewise. * modules/fseeko (Depends-on): Add verify. * lib/fseeko.c [!HAVE_FSEEKO]: Verify that off_t is not too large. Reported by Larry Jones. Fix fseeko on mingw. * lib/fseeko.c (rpl_fseeko) [_IOERR]: Reset EOF flag on successful seek. Beef up fseek tests. * tests/test-fseek.c (main): Also test eof handling. * tests/test-fseeko.c (main): Likewise. Reported by Larry Jones. 2007-12-13 Larry Jones (tiny change) Fix fseeko on BSD-based platforms. * lib/fseeko.c (rpl_fseeko) [__sferror]: Reset EOF flag on successful seek. 2007-12-12 Eric Blake Allow circular dependency of separate libtests.a * gnulib-tool (func_emit_tests_Makefile_am): Add AM_LIBTOOLFLAGS when use_libtests. 2007-12-11 Eric Blake Fix bug with -0.0L in previous patch. * lib/isnan.c (rpl_isnanl): Make robust to -0.0L and pad bits. * tests/test-isnan.c (main): Also test on zeroes. * tests/test-isnanf.c (main): Likewise. * tests/test-isnanl.h (main): Likewise. Detect pseudo-denormals on x86 even when cross-compiling. * lib/isnan.c (rpl_isnanl) [!KNOWN_EXPBIT0_LOCATION && USE_LONG_DOUBLE && x86]: Add one more check to filter out invalid bit patterns that happen to satisfy ==. Avoid link failures with separate libtests.a. * gnulib-tool (func_emit_tests_Makefile_am): Also list local_ldadd last, to satisfy circular dependencies. 2007-12-11 Eric Blake and Bruno Haible Fix OpenBSD 4.0 handling of long double. * m4/float_h.m4 (gl_FLOAT_H): Also claim OpenBSD is broken. * lib/float.in.h [__OpenBSD__]: Add fixes for OpenBSD. * doc/headers/float.texi (float.h): Document OpenBSD bug. 2007-12-11 Jim Meyering * users.txt: Add libvirt. Support versions of autoconf prior to 2.59c. * gnulib-tool (func_emit_initmacro_done): Define m4_foreach_w if it is not already defined. 2007-12-09 Bruno Haible Let 'gnulib-tool --import' collect sources needed for the tests in tests/ rather than in lib/. * gnulib-tool (func_emit_tests_Makefile_am): Accept use_libtests argument. If true, add rules to generate libtests.a, and put libtests.a into $(LDADD). Consider source files in subdirectories and set uses_subdirs. (func_emit_initmacro_start, func_emit_initmacro_end, func_emit_initmacro_done): Pass all arguments explicitly. (func_import): Determine two module lists main_modules, testsrelated_modules. Determine use_libtests. Determine two variables sed_transform_main_lib_file, sed_transform_testsrelated_lib_file instead of just sed_transform_lib_file. Determine two variables main_files and testsrelated_files. Compute 'files' as the union of both. Adjust sed_rewrite_old_files, sed_rewrite_new_files, func_add_or_update. In the generated gnulib-comp.m4, collect the object files for tests/ in different variables than those for lib/. Substitute LIBTESTS_LIBDEPS. (func_create_testdir): Combine the uses_subdirs results from func_emit_lib_Makefile_am and from func_emit_tests_Makefile_am. 2007-12-09 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Expand references to the build-aux directory. 2007-12-09 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Remove redundant code introduced on 2006-09-09. 2007-12-07 Jim Meyering Let these macros work also with autoconf-2.59. * m4/getline.m4 (gl_FUNC_GETLINE): Require only autoconf-2.59. 2.60 is not needed, since gnulib now permits use of AC_CHECK_DECLS_ONCE. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. 2007-12-06 Jim Meyering Avoid a configure-time syntax error in gl_FUNC_ACL. * m4/acl.m4 (gl_FUNC_ACL): Be careful to check for the acl_trivial function in each branch, before testing the cache variable. 2007-12-04 Eric Blake Make scripts executable. * build-aux/config.guess: Add execute permissions. * build-aux/config.sub: Likewise. * build-aux/gendocs.sh: Likewise. Fix frexp on mingw. * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Detect mingw bug when cross-compiling. * doc/functions/frexp.texi (frexp): Document the bug. Make cygwin fseeko check more reliable. * m4/stdio_h.m4 (gl_STDIN_LARGE_OFFSET) [__CYGWIN__]: Use cygwin version numbers, rather than unrelated feature check. * doc/functions/fseeko.texi (fseeko): Tweak failure report. * doc/functions/ftello.texi (ftello): Likewise. Reported by Bruno Haible. * m4/strerror.m4: Bump version number. 2007-12-03 Bruno Haible * doc/functions/mprotect.texi: Mention the mingw problem. 2007-12-03 Eric Blake * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): Ensure REPLACE_STRERROR is initialized before this macro. 2007-12-03 Paul Eggert Add support for Solaris 10 ACLs. Also, ACLs are Gnulib, not Autoconf. * modules/acl (configure.ac): Rename AC_FUNC_ACL to gl_FUNC_ACL. * m4/acl.m4 (gl_FUNC_ACL): Renamed from AC_FUNC_ACL. On Solaris, put -lsec in even for programs other than 'ls'. This fixes a problem for gettext reported by Bruno Haible in . * lib/acl.c (copy_acl, qset_acl) [USE_ACL && defined ACL_NO_TRIVIAL]: Add support for Solaris 10. This isn't efficient, but should get the job done for now. 2007-12-03 James Youngman * doc/regexprops-generic.texi: change "an close-group" to "a close-group" and "illegal" to "not allowed". 2007-11-23 Ralf Wildenhues * lib/unictype/pr_byname.c: Include unictype/pr_byname.h instead of pr_byname.h. Needed for the rare case when the maintainer has done "make maintainer-clean" in the source directory and then attempts a build outside the source directory. * lib/unictype/scripts.c: Include unictype/scripts_byname.h instead of scripts_byname.h. 2007-12-02 Martin Lambers Bruno Haible * lib/getpagesize.h: Remove file. * lib/unistd.in.h: Include declaration of getpagesize here. * m4/getpagesize.m4 (gl_FUNC_GETPAGESIZE): Renamed from gl_GETPAGESIZE. Invoke gl_UNISTD_H_DEFAULTS. Set HAVE_GETPAGESIZE, HAVE_OS_H, HAVE_SYS_PARAM_H. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_GETPAGESIZE, HAVE_GETPAGESIZE, HAVE_OS_H, HAVE_SYS_PARAM_H. * modules/getpagesize (Files): Remove lib/getpagesize.h. (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Use instead of getpagesize.h. * modules/unistd (Makefile.am): Substitute also GNULIB_GETPAGESIZE, HAVE_GETPAGESIZE, HAVE_OS_H, HAVE_SYS_PARAM_H. * m4/pagealign_alloc.m4 (gl_PREREQ_PAGEALIGN_ALLOC): Remove gl_GETPAGESIZE invocation, already handled by module dependency. * lib/pagealign_alloc.c: Don't include getpagesize.h. 2007-12-02 Bruno Haible * modules/strings-tests: New file. * tests/test-strings.c: New file. Move declarations of str{,n}casecmp from to . * lib/strings.in.h: New file. * lib/string.in.h (strcasecmp, strncasecmp): Remove declarations. * m4/strings_h.m4: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Remove initialization of HAVE_STRCASECMP, HAVE_DECL_STRNCASECMP. * modules/strings: New file. * modules/string (Makefile.am): Update. * modules/strcase (Include): Mention , not . Reported by Karl Berry. 2007-12-01 Eric Blake * m4/stdio_h.m4 (gl_STDIN_LARGE_OFFSET) [__CYGWIN__]: Rewrite to accommodate fix in cygwin 1.5.25. 2007-12-01 Jim Meyering Fix a bug that inhibited much of the utf8-optimization in regcomp.c. * lib/regcomp.c (optimize_utf8): Fix a typo, s/idx/ctx_type/, that would inhibit utf8-optimization of a regexp containing line- or buffer-anchors, e.g., `^', `$'. 2007-11-30 Bruno Haible * lib/lock.h (gl_recursive_lock_init) [PTHREAD && PTHREAD_RECURSIVE_MUTEX_INITIALIZER]: Call glthread_recursive_lock_init. * lib/lock.c (glthread_recursive_lock_init) [PTHREAD_RECURSIVE_MUTEX_INITIALIZER]: New function. Reported by Yoann Vandoorselaere . 2007-11-28 Paul Eggert New function qset_acl, like set_acl but with syscall semantics. * lib/acl.h (qset_acl): New decl. * lib/acl.c (qset_acl): New function. (set_acl): Use new function. Use more-consistent diagnostics. 2007-11-28 Jim Meyering * modules/physmem (License): Change from GPL to LGPLv2+. 2007-11-26 Bruno Haible * lib/vasnprintf.c (decode_long_double): Don't abort if the 'long double' type has excess precision. Reported by Jim Meyering in . 2007-11-25 Ralf Wildenhues * doc/fdl.texi, doc/gpl-3.0.texi, doc/lgpl-3.0.texi: Sync from . * modules/agpl-3.0, doc/agpl-3.0.texi: New module, with license text from same location. * doc/maintain.texi, doc/standards.texi: Sync from . 2007-11-22 Ondřej Vašík and Jim Meyering Adjust getdate' grammar to accept a slightly more regular language. E.g., accept "YYYYMMDD +N days" as well as "YYYYMMDD N days". Before, the former was rejected. * lib/getdate.y (digits_to_date_time): New function, factored out of ... (number): ...here. Just call digits_to_date_time. (hybrid): New non-terminal to handle an sequence consistently. 2007-11-18 Jim Meyering Pull my changes from coreutils: bootstrap: fix typo to enable use of $gnulib_tool_option_extras. * build-aux/bootstrap (gnulib_tool_options): Add a space before the use of $gnulib_tool_option_extras, so that it's separated from the preceding argument. Fix bootstrap failure to handle files like lib/uniwidth/cjk.h. * build-aux/bootstrap (cp_mark_as_generated): Create any required parent destination directories before copying a file into place. 2007-11-18 Sergey Poznyakoff bootstrap: work also with 4-argument variant of AC_INIT * build-aux/bootstrap (gnulib_extra_files): Adjust sed command. 2007-11-16 Paul Eggert Port test-getaddrinfo to Solaris. Problem reported by Bruno Haible in . * tests/test-getaddrinfo.c (simple): Add a comment asking for an explanation of setting 'hints'. Don't reject an implementation merely because it returns EAI_SERVICE. (EAI_SERVICE): Define to 0 if not defined. 2007-11-15 Paul Eggert The license of gnu-make and posix-shell is now "GPLed build tool". * modules/gnu-make (License): Likewise. * modules/posix-shell (License): Likewise. New module posix-shell, for determining a POSIX shell or perhaps something that is close enough to a POSIX shell. * m4/posix-shell.m4: New file. * modules/posix-shell: New file. * MODULES.html.sh: Mention new module. New module gnu-make, for determining whether we're using GNU Make. * m4/gnu-make.m4: New file. * modules/gnu-make: New file. * MODULES.html.sh: Mention new module. 2007-11-14 Jim Meyering Define a sometimes-link-required function using ARGMATCH_DIE_DECL. * tests/test-argmatch.c (ARGMATCH_DIE_DECL): When defined, use this macro to create a function _definition_. Remove useless "#undef ARGMATCH_DIE". 2007-11-14 Bruno Haible * lib/config.charset: Update for OpenBSD 4.1. Reported and helped by Ben Pfaff . 2007-11-12 Paul Eggert Document 64-bit #if problems in stdint.texi. * doc/headers/stdint.texi (stdint.h): Mention problems with 64-bit-#if, and how to work around them. Don't insist on 'long long int' support in the preprocessor. It breaks too many things. For example, PRIdMAX still uses a 'long long int' format with the latest Sun compiler, even though HAVE_LONG_LONG_INT isn't defined due to that compiler's preprocessor problem. This causes the latest coreutils to dump core on Solaris 10 sparc with the Sun C compiler. Instead, fix the 2007-10-16 problem in a different way, by evaluating the troublesome expressions at configure-time, not at #if-time. * m4/longlong.m4 (_AC_TYPE_LONG_LONG_SNIPPET): Don't test the preprocessor. * m4/inttypes.m4 (gl_INTTYPES_H): Move the #if checks into compile-time C checks, done at 'configure'-time. (gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION): New macro. * modules/inttypes (Makefile): Substitute the new symbols that gl_INTTYPES_H now generates. * lib/inttypes.in.h: Don't use constants wider than 'long' in #if. 2007-11-12 Bruno Haible Tests for Unicode character classification functions. * modules/unictype/bidicategory-byname-tests: New file. * modules/unictype/bidicategory-name-tests: New file. * modules/unictype/bidicategory-of-tests: New file. * modules/unictype/bidicategory-test-tests: New file. * modules/unictype/block-list-tests: New file. * modules/unictype/block-of-tests: New file. * modules/unictype/block-test-tests: New file. * modules/unictype/category-C-tests: New file. * modules/unictype/category-Cc-tests: New file. * modules/unictype/category-Cf-tests: New file. * modules/unictype/category-Cn-tests: New file. * modules/unictype/category-Co-tests: New file. * modules/unictype/category-Cs-tests: New file. * modules/unictype/category-L-tests: New file. * modules/unictype/category-Ll-tests: New file. * modules/unictype/category-Lm-tests: New file. * modules/unictype/category-Lo-tests: New file. * modules/unictype/category-Lt-tests: New file. * modules/unictype/category-Lu-tests: New file. * modules/unictype/category-M-tests: New file. * modules/unictype/category-Mc-tests: New file. * modules/unictype/category-Me-tests: New file. * modules/unictype/category-Mn-tests: New file. * modules/unictype/category-N-tests: New file. * modules/unictype/category-Nd-tests: New file. * modules/unictype/category-Nl-tests: New file. * modules/unictype/category-No-tests: New file. * modules/unictype/category-P-tests: New file. * modules/unictype/category-Pc-tests: New file. * modules/unictype/category-Pd-tests: New file. * modules/unictype/category-Pe-tests: New file. * modules/unictype/category-Pf-tests: New file. * modules/unictype/category-Pi-tests: New file. * modules/unictype/category-Po-tests: New file. * modules/unictype/category-Ps-tests: New file. * modules/unictype/category-S-tests: New file. * modules/unictype/category-Sc-tests: New file. * modules/unictype/category-Sk-tests: New file. * modules/unictype/category-Sm-tests: New file. * modules/unictype/category-So-tests: New file. * modules/unictype/category-Z-tests: New file. * modules/unictype/category-Zl-tests: New file. * modules/unictype/category-Zp-tests: New file. * modules/unictype/category-Zs-tests: New file. * modules/unictype/category-and-not-tests: New file. * modules/unictype/category-and-tests: New file. * modules/unictype/category-byname-tests: New file. * modules/unictype/category-name-tests: New file. * modules/unictype/category-none-tests: New file. * modules/unictype/category-of-tests: New file. * modules/unictype/category-or-tests: New file. * modules/unictype/category-test-withtable-tests: New file. * modules/unictype/combining-class-tests: New file. * modules/unictype/ctype-alnum-tests: New file. * modules/unictype/ctype-alpha-tests: New file. * modules/unictype/ctype-blank-tests: New file. * modules/unictype/ctype-cntrl-tests: New file. * modules/unictype/ctype-digit-tests: New file. * modules/unictype/ctype-graph-tests: New file. * modules/unictype/ctype-lower-tests: New file. * modules/unictype/ctype-print-tests: New file. * modules/unictype/ctype-punct-tests: New file. * modules/unictype/ctype-space-tests: New file. * modules/unictype/ctype-upper-tests: New file. * modules/unictype/ctype-xdigit-tests: New file. * modules/unictype/decimal-digit-tests: New file. * modules/unictype/digit-tests: New file. * modules/unictype/mirror-tests: New file. * modules/unictype/numeric-tests: New file. * modules/unictype/property-alphabetic-tests: New file. * modules/unictype/property-ascii-hex-digit-tests: New file. * modules/unictype/property-bidi-arabic-digit-tests: New file. * modules/unictype/property-bidi-arabic-right-to-left-tests: New file. * modules/unictype/property-bidi-block-separator-tests: New file. * modules/unictype/property-bidi-boundary-neutral-tests: New file. * modules/unictype/property-bidi-common-separator-tests: New file. * modules/unictype/property-bidi-control-tests: New file. * modules/unictype/property-bidi-embedding-or-override-tests: New file. * modules/unictype/property-bidi-eur-num-separator-tests: New file. * modules/unictype/property-bidi-eur-num-terminator-tests: New file. * modules/unictype/property-bidi-european-digit-tests: New file. * modules/unictype/property-bidi-hebrew-right-to-left-tests: New file. * modules/unictype/property-bidi-left-to-right-tests: New file. * modules/unictype/property-bidi-non-spacing-mark-tests: New file. * modules/unictype/property-bidi-other-neutral-tests: New file. * modules/unictype/property-bidi-pdf-tests: New file. * modules/unictype/property-bidi-segment-separator-tests: New file. * modules/unictype/property-bidi-whitespace-tests: New file. * modules/unictype/property-byname-tests: New file. * modules/unictype/property-combining-tests: New file. * modules/unictype/property-composite-tests: New file. * modules/unictype/property-currency-symbol-tests: New file. * modules/unictype/property-dash-tests: New file. * modules/unictype/property-decimal-digit-tests: New file. * modules/unictype/property-default-ignorable-code-point-tests: New file. * modules/unictype/property-deprecated-tests: New file. * modules/unictype/property-diacritic-tests: New file. * modules/unictype/property-extender-tests: New file. * modules/unictype/property-format-control-tests: New file. * modules/unictype/property-grapheme-base-tests: New file. * modules/unictype/property-grapheme-extend-tests: New file. * modules/unictype/property-grapheme-link-tests: New file. * modules/unictype/property-hex-digit-tests: New file. * modules/unictype/property-hyphen-tests: New file. * modules/unictype/property-id-continue-tests: New file. * modules/unictype/property-id-start-tests: New file. * modules/unictype/property-ideographic-tests: New file. * modules/unictype/property-ids-binary-operator-tests: New file. * modules/unictype/property-ids-trinary-operator-tests: New file. * modules/unictype/property-ignorable-control-tests: New file. * modules/unictype/property-iso-control-tests: New file. * modules/unictype/property-join-control-tests: New file. * modules/unictype/property-left-of-pair-tests: New file. * modules/unictype/property-line-separator-tests: New file. * modules/unictype/property-logical-order-exception-tests: New file. * modules/unictype/property-lowercase-tests: New file. * modules/unictype/property-math-tests: New file. * modules/unictype/property-non-break-tests: New file. * modules/unictype/property-not-a-character-tests: New file. * modules/unictype/property-numeric-tests: New file. * modules/unictype/property-other-alphabetic-tests: New file. * modules/unictype/property-other-default-ignorable-code-point-tests: New file. * modules/unictype/property-other-grapheme-extend-tests: New file. * modules/unictype/property-other-id-continue-tests: New file. * modules/unictype/property-other-id-start-tests: New file. * modules/unictype/property-other-lowercase-tests: New file. * modules/unictype/property-other-math-tests: New file. * modules/unictype/property-other-uppercase-tests: New file. * modules/unictype/property-paired-punctuation-tests: New file. * modules/unictype/property-paragraph-separator-tests: New file. * modules/unictype/property-pattern-syntax-tests: New file. * modules/unictype/property-pattern-white-space-tests: New file. * modules/unictype/property-private-use-tests: New file. * modules/unictype/property-punctuation-tests: New file. * modules/unictype/property-quotation-mark-tests: New file. * modules/unictype/property-radical-tests: New file. * modules/unictype/property-sentence-terminal-tests: New file. * modules/unictype/property-soft-dotted-tests: New file. * modules/unictype/property-space-tests: New file. * modules/unictype/property-terminal-punctuation-tests: New file. * modules/unictype/property-test-tests: New file. * modules/unictype/property-titlecase-tests: New file. * modules/unictype/property-unassigned-code-value-tests: New file. * modules/unictype/property-unified-ideograph-tests: New file. * modules/unictype/property-uppercase-tests: New file. * modules/unictype/property-variation-selector-tests: New file. * modules/unictype/property-white-space-tests: New file. * modules/unictype/property-xid-continue-tests: New file. * modules/unictype/property-xid-start-tests: New file. * modules/unictype/property-zero-width-tests: New file. * modules/unictype/scripts-tests: New file. * modules/unictype/syntax-c-ident-tests: New file. * modules/unictype/syntax-c-whitespace-tests: New file. * modules/unictype/syntax-java-ident-tests: New file. * modules/unictype/syntax-java-whitespace-tests: New file. * tests/unictype/test-bidi_byname.c: New file. * tests/unictype/test-bidi_name.c: New file. * tests/unictype/test-bidi_of.c: New file. * tests/unictype/test-bidi_test.c: New file. * tests/unictype/test-block_list.c: New file. * tests/unictype/test-block_of.c: New file. * tests/unictype/test-block_test.c: New file. * tests/unictype/test-categ_and.c: New file. * tests/unictype/test-categ_and_not.c: New file. * tests/unictype/test-categ_byname.c: New file. * tests/unictype/test-categ_name.c: New file. * tests/unictype/test-categ_none.c: New file. * tests/unictype/test-categ_of.c: New file. * tests/unictype/test-categ_or.c: New file. * tests/unictype/test-categ_test_withtable.c: New file. * tests/unictype/test-combining.c: New file. * tests/unictype/test-decdigit.c: New file. * tests/unictype/test-digit.c: New file. * tests/unictype/test-mirror.c: New file. * tests/unictype/test-numeric.c: New file. * tests/unictype/test-pr_byname.c: New file. * tests/unictype/test-pr_test.c: New file. * tests/unictype/test-predicate-part1.h: New file. * tests/unictype/test-predicate-part2.h: New file. * tests/unictype/test-scripts.c: New file. * tests/unictype/test-sy_c_ident.c: New file. * tests/unictype/test-sy_java_ident.c: New file. * tests/unictype/test-categ_C.c: New file, generated by gen-ctype.c for Unicode 5.0.0. * tests/unictype/test-categ_Cc.c: Likewise. * tests/unictype/test-categ_Cf.c: Likewise. * tests/unictype/test-categ_Cn.c: Likewise. * tests/unictype/test-categ_Co.c: Likewise. * tests/unictype/test-categ_Cs.c: Likewise. * tests/unictype/test-categ_L.c: Likewise. * tests/unictype/test-categ_Ll.c: Likewise. * tests/unictype/test-categ_Lm.c: Likewise. * tests/unictype/test-categ_Lo.c: Likewise. * tests/unictype/test-categ_Lt.c: Likewise. * tests/unictype/test-categ_Lu.c: Likewise. * tests/unictype/test-categ_M.c: Likewise. * tests/unictype/test-categ_Mc.c: Likewise. * tests/unictype/test-categ_Me.c: Likewise. * tests/unictype/test-categ_Mn.c: Likewise. * tests/unictype/test-categ_N.c: Likewise. * tests/unictype/test-categ_Nd.c: Likewise. * tests/unictype/test-categ_Nl.c: Likewise. * tests/unictype/test-categ_No.c: Likewise. * tests/unictype/test-categ_P.c: Likewise. * tests/unictype/test-categ_Pc.c: Likewise. * tests/unictype/test-categ_Pd.c: Likewise. * tests/unictype/test-categ_Pe.c: Likewise. * tests/unictype/test-categ_Pf.c: Likewise. * tests/unictype/test-categ_Pi.c: Likewise. * tests/unictype/test-categ_Po.c: Likewise. * tests/unictype/test-categ_Ps.c: Likewise. * tests/unictype/test-categ_S.c: Likewise. * tests/unictype/test-categ_Sc.c: Likewise. * tests/unictype/test-categ_Sk.c: Likewise. * tests/unictype/test-categ_Sm.c: Likewise. * tests/unictype/test-categ_So.c: Likewise. * tests/unictype/test-categ_Z.c: Likewise. * tests/unictype/test-categ_Zl.c: Likewise. * tests/unictype/test-categ_Zp.c: Likewise. * tests/unictype/test-categ_Zs.c: Likewise. * tests/unictype/test-ctype_alnum.c: Likewise. * tests/unictype/test-ctype_alpha.c: Likewise. * tests/unictype/test-ctype_blank.c: Likewise. * tests/unictype/test-ctype_cntrl.c: Likewise. * tests/unictype/test-ctype_digit.c: Likewise. * tests/unictype/test-ctype_graph.c: Likewise. * tests/unictype/test-ctype_lower.c: Likewise. * tests/unictype/test-ctype_print.c: Likewise. * tests/unictype/test-ctype_punct.c: Likewise. * tests/unictype/test-ctype_space.c: Likewise. * tests/unictype/test-ctype_upper.c: Likewise. * tests/unictype/test-ctype_xdigit.c: Likewise. * tests/unictype/test-decdigit.h: Likewise. * tests/unictype/test-digit.h: Likewise. * tests/unictype/test-numeric.h: Likewise. * tests/unictype/test-pr_alphabetic.c: Likewise. * tests/unictype/test-pr_ascii_hex_digit.c: Likewise. * tests/unictype/test-pr_bidi_arabic_digit.c: Likewise. * tests/unictype/test-pr_bidi_arabic_right_to_left.c: Likewise. * tests/unictype/test-pr_bidi_block_separator.c: Likewise. * tests/unictype/test-pr_bidi_boundary_neutral.c: Likewise. * tests/unictype/test-pr_bidi_common_separator.c: Likewise. * tests/unictype/test-pr_bidi_control.c: Likewise. * tests/unictype/test-pr_bidi_embedding_or_override.c: Likewise. * tests/unictype/test-pr_bidi_eur_num_separator.c: Likewise. * tests/unictype/test-pr_bidi_eur_num_terminator.c: Likewise. * tests/unictype/test-pr_bidi_european_digit.c: Likewise. * tests/unictype/test-pr_bidi_hebrew_right_to_left.c: Likewise. * tests/unictype/test-pr_bidi_left_to_right.c: Likewise. * tests/unictype/test-pr_bidi_non_spacing_mark.c: Likewise. * tests/unictype/test-pr_bidi_other_neutral.c: Likewise. * tests/unictype/test-pr_bidi_pdf.c: Likewise. * tests/unictype/test-pr_bidi_segment_separator.c: Likewise. * tests/unictype/test-pr_bidi_whitespace.c: Likewise. * tests/unictype/test-pr_combining.c: Likewise. * tests/unictype/test-pr_composite.c: Likewise. * tests/unictype/test-pr_currency_symbol.c: Likewise. * tests/unictype/test-pr_dash.c: Likewise. * tests/unictype/test-pr_decimal_digit.c: Likewise. * tests/unictype/test-pr_default_ignorable_code_point.c: Likewise. * tests/unictype/test-pr_deprecated.c: Likewise. * tests/unictype/test-pr_diacritic.c: Likewise. * tests/unictype/test-pr_extender.c: Likewise. * tests/unictype/test-pr_format_control.c: Likewise. * tests/unictype/test-pr_grapheme_base.c: Likewise. * tests/unictype/test-pr_grapheme_extend.c: Likewise. * tests/unictype/test-pr_grapheme_link.c: Likewise. * tests/unictype/test-pr_hex_digit.c: Likewise. * tests/unictype/test-pr_hyphen.c: Likewise. * tests/unictype/test-pr_id_continue.c: Likewise. * tests/unictype/test-pr_id_start.c: Likewise. * tests/unictype/test-pr_ideographic.c: Likewise. * tests/unictype/test-pr_ids_binary_operator.c: Likewise. * tests/unictype/test-pr_ids_trinary_operator.c: Likewise. * tests/unictype/test-pr_ignorable_control.c: Likewise. * tests/unictype/test-pr_iso_control.c: Likewise. * tests/unictype/test-pr_join_control.c: Likewise. * tests/unictype/test-pr_left_of_pair.c: Likewise. * tests/unictype/test-pr_line_separator.c: Likewise. * tests/unictype/test-pr_logical_order_exception.c: Likewise. * tests/unictype/test-pr_lowercase.c: Likewise. * tests/unictype/test-pr_math.c: Likewise. * tests/unictype/test-pr_non_break.c: Likewise. * tests/unictype/test-pr_not_a_character.c: Likewise. * tests/unictype/test-pr_numeric.c: Likewise. * tests/unictype/test-pr_other_alphabetic.c: Likewise. * tests/unictype/test-pr_other_default_ignorable_code_point.c: Likewise. * tests/unictype/test-pr_other_grapheme_extend.c: Likewise. * tests/unictype/test-pr_other_id_continue.c: Likewise. * tests/unictype/test-pr_other_id_start.c: Likewise. * tests/unictype/test-pr_other_lowercase.c: Likewise. * tests/unictype/test-pr_other_math.c: Likewise. * tests/unictype/test-pr_other_uppercase.c: Likewise. * tests/unictype/test-pr_paired_punctuation.c: Likewise. * tests/unictype/test-pr_paragraph_separator.c: Likewise. * tests/unictype/test-pr_pattern_syntax.c: Likewise. * tests/unictype/test-pr_pattern_white_space.c: Likewise. * tests/unictype/test-pr_private_use.c: Likewise. * tests/unictype/test-pr_punctuation.c: Likewise. * tests/unictype/test-pr_quotation_mark.c: Likewise. * tests/unictype/test-pr_radical.c: Likewise. * tests/unictype/test-pr_sentence_terminal.c: Likewise. * tests/unictype/test-pr_soft_dotted.c: Likewise. * tests/unictype/test-pr_space.c: Likewise. * tests/unictype/test-pr_terminal_punctuation.c: Likewise. * tests/unictype/test-pr_titlecase.c: Likewise. * tests/unictype/test-pr_unassigned_code_value.c: Likewise. * tests/unictype/test-pr_unified_ideograph.c: Likewise. * tests/unictype/test-pr_uppercase.c: Likewise. * tests/unictype/test-pr_variation_selector.c: Likewise. * tests/unictype/test-pr_white_space.c: Likewise. * tests/unictype/test-pr_xid_continue.c: Likewise. * tests/unictype/test-pr_xid_start.c: Likewise. * tests/unictype/test-pr_zero_width.c: Likewise. * tests/unictype/test-sy_c_whitespace.c: Likewise. * tests/unictype/test-sy_java_whitespace.c: Likewise. 2007-11-12 Bruno Haible Unicode character classification functions. * lib/unictype.h: New file. * modules/unictype/base: New file. * modules/unictype/category-L: New file. * modules/unictype/category-Lu: New file. * modules/unictype/category-Ll: New file. * modules/unictype/category-Lt: New file. * modules/unictype/category-Lm: New file. * modules/unictype/category-Lo: New file. * modules/unictype/category-M: New file. * modules/unictype/category-Mn: New file. * modules/unictype/category-Mc: New file. * modules/unictype/category-Me: New file. * modules/unictype/category-N: New file. * modules/unictype/category-Nd: New file. * modules/unictype/category-Nl: New file. * modules/unictype/category-No: New file. * modules/unictype/category-P: New file. * modules/unictype/category-Pc: New file. * modules/unictype/category-Pd: New file. * modules/unictype/category-Ps: New file. * modules/unictype/category-Pe: New file. * modules/unictype/category-Pi: New file. * modules/unictype/category-Pf: New file. * modules/unictype/category-Po: New file. * modules/unictype/category-S: New file. * modules/unictype/category-Sm: New file. * modules/unictype/category-Sc: New file. * modules/unictype/category-Sk: New file. * modules/unictype/category-So: New file. * modules/unictype/category-Z: New file. * modules/unictype/category-Zs: New file. * modules/unictype/category-Zl: New file. * modules/unictype/category-Zp: New file. * modules/unictype/category-C: New file. * modules/unictype/category-Cc: New file. * modules/unictype/category-Cf: New file. * modules/unictype/category-Cs: New file. * modules/unictype/category-Co: New file. * modules/unictype/category-Cn: New file. * modules/unictype/category-or: New file. * modules/unictype/category-of: New file. * modules/unictype/category-test: New file. * modules/unictype/category-test-withtable: New file. * modules/unictype/category-byname: New file. * modules/unictype/category-none: New file. * modules/unictype/category-and: New file. * modules/unictype/category-and-not: New file. * modules/unictype/category-name: New file. * modules/unictype/combining-class: New file. * modules/unictype/category-all: New file. * modules/unictype/bidicategory-all: New file. * modules/unictype/bidicategory-byname: New file. * modules/unictype/bidicategory-name: New file. * modules/unictype/bidicategory-of: New file. * modules/unictype/bidicategory-test: New file. * modules/unictype/decimal-digit: New file. * modules/unictype/digit: New file. * modules/unictype/numeric: New file. * modules/unictype/mirror: New file. * modules/unictype/property-white-space: New file. * modules/unictype/property-alphabetic: New file. * modules/unictype/property-other-alphabetic: New file. * modules/unictype/property-not-a-character: New file. * modules/unictype/property-default-ignorable-code-point: New file. * modules/unictype/property-other-default-ignorable-code-point: New file. * modules/unictype/property-deprecated: New file. * modules/unictype/property-logical-order-exception: New file. * modules/unictype/property-variation-selector: New file. * modules/unictype/property-private-use: New file. * modules/unictype/property-unassigned-code-value: New file. * modules/unictype/property-uppercase: New file. * modules/unictype/property-other-uppercase: New file. * modules/unictype/property-lowercase: New file. * modules/unictype/property-other-lowercase: New file. * modules/unictype/property-titlecase: New file. * modules/unictype/property-soft-dotted: New file. * modules/unictype/property-id-start: New file. * modules/unictype/property-other-id-start: New file. * modules/unictype/property-id-continue: New file. * modules/unictype/property-other-id-continue: New file. * modules/unictype/property-xid-start: New file. * modules/unictype/property-xid-continue: New file. * modules/unictype/property-pattern-white-space: New file. * modules/unictype/property-pattern-syntax: New file. * modules/unictype/property-join-control: New file. * modules/unictype/property-grapheme-base: New file. * modules/unictype/property-grapheme-extend: New file. * modules/unictype/property-other-grapheme-extend: New file. * modules/unictype/property-grapheme-link: New file. * modules/unictype/property-bidi-control: New file. * modules/unictype/property-bidi-left-to-right: New file. * modules/unictype/property-bidi-hebrew-right-to-left: New file. * modules/unictype/property-bidi-arabic-right-to-left: New file. * modules/unictype/property-bidi-european-digit: New file. * modules/unictype/property-bidi-eur-num-separator: New file. * modules/unictype/property-bidi-eur-num-terminator: New file. * modules/unictype/property-bidi-arabic-digit: New file. * modules/unictype/property-bidi-common-separator: New file. * modules/unictype/property-bidi-block-separator: New file. * modules/unictype/property-bidi-segment-separator: New file. * modules/unictype/property-bidi-whitespace: New file. * modules/unictype/property-bidi-non-spacing-mark: New file. * modules/unictype/property-bidi-boundary-neutral: New file. * modules/unictype/property-bidi-pdf: New file. * modules/unictype/property-bidi-embedding-or-override: New file. * modules/unictype/property-bidi-other-neutral: New file. * modules/unictype/property-hex-digit: New file. * modules/unictype/property-ascii-hex-digit: New file. * modules/unictype/property-ideographic: New file. * modules/unictype/property-unified-ideograph: New file. * modules/unictype/property-radical: New file. * modules/unictype/property-ids-binary-operator: New file. * modules/unictype/property-ids-trinary-operator: New file. * modules/unictype/property-zero-width: New file. * modules/unictype/property-space: New file. * modules/unictype/property-non-break: New file. * modules/unictype/property-iso-control: New file. * modules/unictype/property-format-control: New file. * modules/unictype/property-dash: New file. * modules/unictype/property-hyphen: New file. * modules/unictype/property-punctuation: New file. * modules/unictype/property-line-separator: New file. * modules/unictype/property-paragraph-separator: New file. * modules/unictype/property-quotation-mark: New file. * modules/unictype/property-sentence-terminal: New file. * modules/unictype/property-terminal-punctuation: New file. * modules/unictype/property-currency-symbol: New file. * modules/unictype/property-math: New file. * modules/unictype/property-other-math: New file. * modules/unictype/property-paired-punctuation: New file. * modules/unictype/property-left-of-pair: New file. * modules/unictype/property-combining: New file. * modules/unictype/property-composite: New file. * modules/unictype/property-decimal-digit: New file. * modules/unictype/property-numeric: New file. * modules/unictype/property-diacritic: New file. * modules/unictype/property-extender: New file. * modules/unictype/property-ignorable-control: New file. * modules/unictype/property-test: New file. * modules/unictype/property-byname: New file. * modules/unictype/property-all: New file. * modules/unictype/scripts: New file. * modules/unictype/scripts-all: New file. * modules/unictype/block-of: New file. * modules/unictype/block-test: New file. * modules/unictype/block-list: New file. * modules/unictype/block-all: New file. * modules/unictype/syntax-c-whitespace: New file. * modules/unictype/syntax-java-whitespace: New file. * modules/unictype/syntax-c-ident: New file. * modules/unictype/syntax-java-ident: New file. * modules/unictype/ctype-alnum: New file. * modules/unictype/ctype-alpha: New file. * modules/unictype/ctype-cntrl: New file. * modules/unictype/ctype-digit: New file. * modules/unictype/ctype-graph: New file. * modules/unictype/ctype-lower: New file. * modules/unictype/ctype-print: New file. * modules/unictype/ctype-punct: New file. * modules/unictype/ctype-space: New file. * modules/unictype/ctype-upper: New file. * modules/unictype/ctype-xdigit: New file. * modules/unictype/ctype-blank: New file. * lib/unictype/bidi_byname.c: New file. * lib/unictype/bidi_name.c: New file. * lib/unictype/bidi_of.c: New file. * lib/unictype/bidi_test.c: New file. * lib/unictype/bitmap.h: New file. * lib/unictype/block_test.c: New file. * lib/unictype/blocks.c: New file. * lib/unictype/categ_C.c: New file. * lib/unictype/categ_Cc.c: New file. * lib/unictype/categ_Cf.c: New file. * lib/unictype/categ_Cn.c: New file. * lib/unictype/categ_Co.c: New file. * lib/unictype/categ_Cs.c: New file. * lib/unictype/categ_L.c: New file. * lib/unictype/categ_Ll.c: New file. * lib/unictype/categ_Lm.c: New file. * lib/unictype/categ_Lo.c: New file. * lib/unictype/categ_Lt.c: New file. * lib/unictype/categ_Lu.c: New file. * lib/unictype/categ_M.c: New file. * lib/unictype/categ_Mc.c: New file. * lib/unictype/categ_Me.c: New file. * lib/unictype/categ_Mn.c: New file. * lib/unictype/categ_N.c: New file. * lib/unictype/categ_Nd.c: New file. * lib/unictype/categ_Nl.c: New file. * lib/unictype/categ_No.c: New file. * lib/unictype/categ_P.c: New file. * lib/unictype/categ_Pc.c: New file. * lib/unictype/categ_Pd.c: New file. * lib/unictype/categ_Pe.c: New file. * lib/unictype/categ_Pf.c: New file. * lib/unictype/categ_Pi.c: New file. * lib/unictype/categ_Po.c: New file. * lib/unictype/categ_Ps.c: New file. * lib/unictype/categ_S.c: New file. * lib/unictype/categ_Sc.c: New file. * lib/unictype/categ_Sk.c: New file. * lib/unictype/categ_Sm.c: New file. * lib/unictype/categ_So.c: New file. * lib/unictype/categ_Z.c: New file. * lib/unictype/categ_Zl.c: New file. * lib/unictype/categ_Zp.c: New file. * lib/unictype/categ_Zs.c: New file. * lib/unictype/categ_and.c: New file. * lib/unictype/categ_and_not.c: New file. * lib/unictype/categ_byname.c: New file. * lib/unictype/categ_name.c: New file. * lib/unictype/categ_none.c: New file. * lib/unictype/categ_of.c: New file. * lib/unictype/categ_or.c: New file. * lib/unictype/categ_test.c: New file. * lib/unictype/combining.c: New file. * lib/unictype/ctype_alnum.c: New file. * lib/unictype/ctype_alpha.c: New file. * lib/unictype/ctype_blank.c: New file. * lib/unictype/ctype_cntrl.c: New file. * lib/unictype/ctype_digit.c: New file. * lib/unictype/ctype_graph.c: New file. * lib/unictype/ctype_lower.c: New file. * lib/unictype/ctype_print.c: New file. * lib/unictype/ctype_punct.c: New file. * lib/unictype/ctype_space.c: New file. * lib/unictype/ctype_upper.c: New file. * lib/unictype/ctype_xdigit.c: New file. * lib/unictype/decdigit.c: New file. * lib/unictype/digit.c: New file. * lib/unictype/identsyntaxmap.h: New file. * lib/unictype/mirror.c: New file. * lib/unictype/numeric.c: New file. * lib/unictype/pr_alphabetic.c: New file. * lib/unictype/pr_ascii_hex_digit.c: New file. * lib/unictype/pr_bidi_arabic_digit.c: New file. * lib/unictype/pr_bidi_arabic_right_to_left.c: New file. * lib/unictype/pr_bidi_block_separator.c: New file. * lib/unictype/pr_bidi_boundary_neutral.c: New file. * lib/unictype/pr_bidi_common_separator.c: New file. * lib/unictype/pr_bidi_control.c: New file. * lib/unictype/pr_bidi_embedding_or_override.c: New file. * lib/unictype/pr_bidi_eur_num_separator.c: New file. * lib/unictype/pr_bidi_eur_num_terminator.c: New file. * lib/unictype/pr_bidi_european_digit.c: New file. * lib/unictype/pr_bidi_hebrew_right_to_left.c: New file. * lib/unictype/pr_bidi_left_to_right.c: New file. * lib/unictype/pr_bidi_non_spacing_mark.c: New file. * lib/unictype/pr_bidi_other_neutral.c: New file. * lib/unictype/pr_bidi_pdf.c: New file. * lib/unictype/pr_bidi_segment_separator.c: New file. * lib/unictype/pr_bidi_whitespace.c: New file. * lib/unictype/pr_byname.c: New file. * lib/unictype/pr_byname.gperf: New file. * lib/unictype/pr_combining.c: New file. * lib/unictype/pr_composite.c: New file. * lib/unictype/pr_currency_symbol.c: New file. * lib/unictype/pr_dash.c: New file. * lib/unictype/pr_decimal_digit.c: New file. * lib/unictype/pr_default_ignorable_code_point.c: New file. * lib/unictype/pr_deprecated.c: New file. * lib/unictype/pr_diacritic.c: New file. * lib/unictype/pr_extender.c: New file. * lib/unictype/pr_format_control.c: New file. * lib/unictype/pr_grapheme_base.c: New file. * lib/unictype/pr_grapheme_extend.c: New file. * lib/unictype/pr_grapheme_link.c: New file. * lib/unictype/pr_hex_digit.c: New file. * lib/unictype/pr_hyphen.c: New file. * lib/unictype/pr_id_continue.c: New file. * lib/unictype/pr_id_start.c: New file. * lib/unictype/pr_ideographic.c: New file. * lib/unictype/pr_ids_binary_operator.c: New file. * lib/unictype/pr_ids_trinary_operator.c: New file. * lib/unictype/pr_ignorable_control.c: New file. * lib/unictype/pr_iso_control.c: New file. * lib/unictype/pr_join_control.c: New file. * lib/unictype/pr_left_of_pair.c: New file. * lib/unictype/pr_line_separator.c: New file. * lib/unictype/pr_logical_order_exception.c: New file. * lib/unictype/pr_lowercase.c: New file. * lib/unictype/pr_math.c: New file. * lib/unictype/pr_non_break.c: New file. * lib/unictype/pr_not_a_character.c: New file. * lib/unictype/pr_numeric.c: New file. * lib/unictype/pr_other_alphabetic.c: New file. * lib/unictype/pr_other_default_ignorable_code_point.c: New file. * lib/unictype/pr_other_grapheme_extend.c: New file. * lib/unictype/pr_other_id_continue.c: New file. * lib/unictype/pr_other_id_start.c: New file. * lib/unictype/pr_other_lowercase.c: New file. * lib/unictype/pr_other_math.c: New file. * lib/unictype/pr_other_uppercase.c: New file. * lib/unictype/pr_paired_punctuation.c: New file. * lib/unictype/pr_paragraph_separator.c: New file. * lib/unictype/pr_pattern_syntax.c: New file. * lib/unictype/pr_pattern_white_space.c: New file. * lib/unictype/pr_private_use.c: New file. * lib/unictype/pr_punctuation.c: New file. * lib/unictype/pr_quotation_mark.c: New file. * lib/unictype/pr_radical.c: New file. * lib/unictype/pr_sentence_terminal.c: New file. * lib/unictype/pr_soft_dotted.c: New file. * lib/unictype/pr_space.c: New file. * lib/unictype/pr_terminal_punctuation.c: New file. * lib/unictype/pr_test.c: New file. * lib/unictype/pr_titlecase.c: New file. * lib/unictype/pr_unassigned_code_value.c: New file. * lib/unictype/pr_unified_ideograph.c: New file. * lib/unictype/pr_uppercase.c: New file. * lib/unictype/pr_variation_selector.c: New file. * lib/unictype/pr_white_space.c: New file. * lib/unictype/pr_xid_continue.c: New file. * lib/unictype/pr_xid_start.c: New file. * lib/unictype/pr_zero_width.c: New file. * lib/unictype/scripts.c: New file. * lib/unictype/sy_c_ident.c: New file. * lib/unictype/sy_c_whitespace.c: New file. * lib/unictype/sy_java_ident.c: New file. * lib/unictype/sy_java_whitespace.c: New file. * lib/unictype/bidi_of.h: New file, generated by gen-ctype.c for Unicode 5.0.0. * lib/unictype/blocks.h: Likewise. * lib/unictype/categ_C.h: Likewise. * lib/unictype/categ_Cc.h: Likewise. * lib/unictype/categ_Cf.h: Likewise. * lib/unictype/categ_Cn.h: Likewise. * lib/unictype/categ_Co.h: Likewise. * lib/unictype/categ_Cs.h: Likewise. * lib/unictype/categ_L.h: Likewise. * lib/unictype/categ_Ll.h: Likewise. * lib/unictype/categ_Lm.h: Likewise. * lib/unictype/categ_Lo.h: Likewise. * lib/unictype/categ_Lt.h: Likewise. * lib/unictype/categ_Lu.h: Likewise. * lib/unictype/categ_M.h: Likewise. * lib/unictype/categ_Mc.h: Likewise. * lib/unictype/categ_Me.h: Likewise. * lib/unictype/categ_Mn.h: Likewise. * lib/unictype/categ_N.h: Likewise. * lib/unictype/categ_Nd.h: Likewise. * lib/unictype/categ_Nl.h: Likewise. * lib/unictype/categ_No.h: Likewise. * lib/unictype/categ_P.h: Likewise. * lib/unictype/categ_Pc.h: Likewise. * lib/unictype/categ_Pd.h: Likewise. * lib/unictype/categ_Pe.h: Likewise. * lib/unictype/categ_Pf.h: Likewise. * lib/unictype/categ_Pi.h: Likewise. * lib/unictype/categ_Po.h: Likewise. * lib/unictype/categ_Ps.h: Likewise. * lib/unictype/categ_S.h: Likewise. * lib/unictype/categ_Sc.h: Likewise. * lib/unictype/categ_Sk.h: Likewise. * lib/unictype/categ_Sm.h: Likewise. * lib/unictype/categ_So.h: Likewise. * lib/unictype/categ_Z.h: Likewise. * lib/unictype/categ_Zl.h: Likewise. * lib/unictype/categ_Zp.h: Likewise. * lib/unictype/categ_Zs.h: Likewise. * lib/unictype/categ_of.h: Likewise. * lib/unictype/combining.h: Likewise. * lib/unictype/ctype_alnum.h: Likewise. * lib/unictype/ctype_alpha.h: Likewise. * lib/unictype/ctype_blank.h: Likewise. * lib/unictype/ctype_cntrl.h: Likewise. * lib/unictype/ctype_digit.h: Likewise. * lib/unictype/ctype_graph.h: Likewise. * lib/unictype/ctype_lower.h: Likewise. * lib/unictype/ctype_print.h: Likewise. * lib/unictype/ctype_punct.h: Likewise. * lib/unictype/ctype_space.h: Likewise. * lib/unictype/ctype_upper.h: Likewise. * lib/unictype/ctype_xdigit.h: Likewise. * lib/unictype/decdigit.h: Likewise. * lib/unictype/digit.h: Likewise. * lib/unictype/mirror.h: Likewise. * lib/unictype/numeric.h: Likewise. * lib/unictype/pr_alphabetic.h: Likewise. * lib/unictype/pr_ascii_hex_digit.h: Likewise. * lib/unictype/pr_bidi_arabic_digit.h: Likewise. * lib/unictype/pr_bidi_arabic_right_to_left.h: Likewise. * lib/unictype/pr_bidi_block_separator.h: Likewise. * lib/unictype/pr_bidi_boundary_neutral.h: Likewise. * lib/unictype/pr_bidi_common_separator.h: Likewise. * lib/unictype/pr_bidi_control.h: Likewise. * lib/unictype/pr_bidi_embedding_or_override.h: Likewise. * lib/unictype/pr_bidi_eur_num_separator.h: Likewise. * lib/unictype/pr_bidi_eur_num_terminator.h: Likewise. * lib/unictype/pr_bidi_european_digit.h: Likewise. * lib/unictype/pr_bidi_hebrew_right_to_left.h: Likewise. * lib/unictype/pr_bidi_left_to_right.h: Likewise. * lib/unictype/pr_bidi_non_spacing_mark.h: Likewise. * lib/unictype/pr_bidi_other_neutral.h: Likewise. * lib/unictype/pr_bidi_pdf.h: Likewise. * lib/unictype/pr_bidi_segment_separator.h: Likewise. * lib/unictype/pr_bidi_whitespace.h: Likewise. * lib/unictype/pr_combining.h: Likewise. * lib/unictype/pr_composite.h: Likewise. * lib/unictype/pr_currency_symbol.h: Likewise. * lib/unictype/pr_dash.h: Likewise. * lib/unictype/pr_decimal_digit.h: Likewise. * lib/unictype/pr_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_deprecated.h: Likewise. * lib/unictype/pr_diacritic.h: Likewise. * lib/unictype/pr_extender.h: Likewise. * lib/unictype/pr_format_control.h: Likewise. * lib/unictype/pr_grapheme_base.h: Likewise. * lib/unictype/pr_grapheme_extend.h: Likewise. * lib/unictype/pr_grapheme_link.h: Likewise. * lib/unictype/pr_hex_digit.h: Likewise. * lib/unictype/pr_hyphen.h: Likewise. * lib/unictype/pr_id_continue.h: Likewise. * lib/unictype/pr_id_start.h: Likewise. * lib/unictype/pr_ideographic.h: Likewise. * lib/unictype/pr_ids_binary_operator.h: Likewise. * lib/unictype/pr_ids_trinary_operator.h: Likewise. * lib/unictype/pr_ignorable_control.h: Likewise. * lib/unictype/pr_iso_control.h: Likewise. * lib/unictype/pr_join_control.h: Likewise. * lib/unictype/pr_left_of_pair.h: Likewise. * lib/unictype/pr_line_separator.h: Likewise. * lib/unictype/pr_logical_order_exception.h: Likewise. * lib/unictype/pr_lowercase.h: Likewise. * lib/unictype/pr_math.h: Likewise. * lib/unictype/pr_non_break.h: Likewise. * lib/unictype/pr_not_a_character.h: Likewise. * lib/unictype/pr_numeric.h: Likewise. * lib/unictype/pr_other_alphabetic.h: Likewise. * lib/unictype/pr_other_default_ignorable_code_point.h: Likewise. * lib/unictype/pr_other_grapheme_extend.h: Likewise. * lib/unictype/pr_other_id_continue.h: Likewise. * lib/unictype/pr_other_id_start.h: Likewise. * lib/unictype/pr_other_lowercase.h: Likewise. * lib/unictype/pr_other_math.h: Likewise. * lib/unictype/pr_other_uppercase.h: Likewise. * lib/unictype/pr_paired_punctuation.h: Likewise. * lib/unictype/pr_paragraph_separator.h: Likewise. * lib/unictype/pr_pattern_syntax.h: Likewise. * lib/unictype/pr_pattern_white_space.h: Likewise. * lib/unictype/pr_private_use.h: Likewise. * lib/unictype/pr_punctuation.h: Likewise. * lib/unictype/pr_quotation_mark.h: Likewise. * lib/unictype/pr_radical.h: Likewise. * lib/unictype/pr_sentence_terminal.h: Likewise. * lib/unictype/pr_soft_dotted.h: Likewise. * lib/unictype/pr_space.h: Likewise. * lib/unictype/pr_terminal_punctuation.h: Likewise. * lib/unictype/pr_titlecase.h: Likewise. * lib/unictype/pr_unassigned_code_value.h: Likewise. * lib/unictype/pr_unified_ideograph.h: Likewise. * lib/unictype/pr_uppercase.h: Likewise. * lib/unictype/pr_variation_selector.h: Likewise. * lib/unictype/pr_white_space.h: Likewise. * lib/unictype/pr_xid_continue.h: Likewise. * lib/unictype/pr_xid_start.h: Likewise. * lib/unictype/pr_zero_width.h: Likewise. * lib/unictype/scripts.h: Likewise. * lib/unictype/scripts_byname.gperf: Likewise. * lib/unictype/sy_c_ident.h: Likewise. * lib/unictype/sy_c_whitespace.h: Likewise. * lib/unictype/sy_java_ident.h: Likewise. * lib/unictype/sy_java_whitespace.h: Likewise. * lib/unictype/Makefile: New file. * lib/unictype/gen-ctype.c: New file, based on gen-unicode-ctype.c in glibc. * lib/unictype/3level.h: New file, copied from glibc. * lib/unictype/3levelbit.h: New file. 2007-11-11 Bruno Haible * modules/gperf: New file. * modules/iconv_open (Depends-on): Add it. (Makefile.am): Remove the GPERF definition. 2007-11-11 Bruno Haible * m4/round.m4 (gl_FUNC_ROUND): Test against NetBSD 3.0 bug. * doc/functions/round.texi: Mention the NetBSD 3.0 bug. 2007-11-11 Bruno Haible * tests/test-argmatch.c (ARGMATCH_DIE): Undefine. (usage): Remove function. 2007-11-11 Bruno Haible * m4/roundf.m4 (gl_FUNC_ROUNDF): Use gl_FUNC_FLOORF_LIBS and gl_FUNC_CEILF_LIBS. * m4/round.m4 (gl_FUNC_ROUND): Use gl_FUNC_FLOOR_LIBS and gl_FUNC_CEIL_LIBS. * m4/roundl.m4 (gl_FUNC_ROUNDL): Use gl_FUNC_FLOORL_LIBS and gl_FUNC_CEILL_LIBS. * modules/roundf (Files): Add m4/floorf.m4, m4/ceilf.m4. * modules/round (Files): Add m4/floor.m4, m4/ceil.m4. * modules/roundl (Files): Add m4/floorl.m4, m4/ceill.m4. 2007-11-11 Bruno Haible * m4/roundf.m4 (gl_FUNC_ROUNDF): Handle the case that floorf and roundf were declared but do not exist on functions. * m4/roundl.m4 (gl_FUNC_ROUNDL): Handle the case that floorl and roundl were declared but do not exist on functions. * lib/round.c (HAVE_FLOOR_AND_CEIL): Use HAVE_FLOORF_AND_CEILF and HAVE_FLOORL_AND_CEILL, respectively. Needed for Sun C on Solaris 10. 2007-11-11 Bruno Haible * m4/roundf.m4 (gl_FUNC_ROUNDF): Set REPLACE_ROUNDF instead of HAVE_DECL_ROUNDF. Remove redundant AC_SUBST. * m4/round.m4 (gl_FUNC_ROUND): Set REPLACE_ROUND instead of HAVE_DECL_ROUND. Remove redundant AC_SUBST. * m4/roundl.m4 (gl_FUNC_ROUNDL): Set REPLACE_ROUNDL instead of HAVE_DECL_ROUNDL. Remove redundant AC_SUBST. * lib/math.in.h (roundf): Use REPLACE_ROUNDF instead of HAVE_DECL_ROUNDF. (round): Use REPLACE_ROUND instead of HAVE_DECL_ROUND. (roundl): Use REPLACE_ROUNDL instead of HAVE_DECL_ROUNDL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_ROUND* instead of HAVE_DECL_ROUND*. * modules/math (Makefile.am): Update. 2007-11-10 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Use same check for ptrdiff_t as m4/intl.m4. 2007-11-10 Jim Meyering Avoid link failure for the argmatch test. * tests/test-argmatch.c (usage): Define function to avoid a link failure: argmatch_die requires a usage function. 2007-11-09 Bruno Haible * doc/functions/snprintf.texi: Mention BeOS deficiency. * doc/functions/vsnprintf.texi: Likewise. * lib/vasnprintf.c (VASNPRINTF): Ensure that we never call snprintf with a size argument < 2. 2007-11-09 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Increase reallocation of snprintf buffer. Fixes an inefficiency introduced on 2007-11-03. 2007-11-09 Bruno Haible * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8) [BeOS]: Make this test return none instead of tr_TR. Fixes a failure of test-c-strcasecmp.c. 2007-11-08 Jim Meyering Change cache variable name prefix "jm_" to "gl_" everywhere. * m4/d-type.m4, m4/jm-winsz1.m4, m4/jm-winsz2.m4, m4/link-follow.m4: * m4/putenv.m4, m4/strtoimax.m4, m4/strtoumax.m4, m4/unlink-busy.m4: * m4/uptime.m4: s/gl_/jm_/ 2007-11-07 Bruno Haible Update to GNU gettext 0.17. * m4/intl.m4: Update to GNU gettext 0.17. * m4/po.m4: Likewise. * modules/gettext (Files): Remove m4/ulonglong.m4. (configure.ac): Require gettext infrastructure from version 0.17. 2007-11-06 Bruno Haible * lib/fbufmode.c (fbufmode) [QNX]: Use numerical values for flags; the symbolic values are not defined in a public header. * lib/freadable.c (freadable) [QNX]: Likewise. * lib/freadahead.c (freadahead) [QNX]: Likewise. * lib/freading.c (freading) [QNX]: Likewise. * lib/fseterr.c (fseterr) [QNX]: Likewise. * lib/fwritable.c (fwritable) [QNX]: Likewise. * lib/fwriting.c (fwriting) [QNX]: Likewise. * lib/fpurge.c (fpurge) [QNX]: Likewise. Add a return statement. Reported by Alain Magloire. * m4/fpending.m4 (gl_FUNC_FPENDING): Add a variant for QNX. 2007-11-05 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Expand the NEED_PRINTF_DIRECTIVE_A code when NEED_PRINTF_LONG_DOUBLE or NEED_PRINTF_DOUBLE is set. Needed on Cygwin, where !NEED_PRINTF_DIRECTIVE_A && NEED_PRINTF_DOUBLE. Reported by Eric Blake. 2007-10-27 Ralf Wildenhues Bruno Haible * modules/malloc (configure.ac): Define GNULIB_MALLOC_GNU always. * modules/realloc (configure.ac): Define GNULIB_REALLOC_GNU always. * lib/realloc.c (SYSTEM_MALLOC_GLIBC_COMPATIBLE): New macro. (malloc): Undefine also before including . (rpl_realloc): Turn malloc(0) into malloc(1) if necessary. Needed on OSF/1 4.0. 2007-11-05 Jim Meyering git-version-gen: sync from coreutils. * build-aux/git-version-gen: Add comments. Change the first '-' to '.' in the snapshot version string, e.g., 6.9-377-08144 -> 6.9.377-08144 Remove first parameter. Don't declare a version "-dirty" merely because a time stamp has changed. 2007-11-04 Bruno Haible * lib/lock.h: Protect all macro definitions containing an 'if' statement through a "do { ... } while (0)". * lib/tls.h: Likewise. 2007-11-04 Bruno Haible * lib/vasnprintf.c (DCHAR_IS_TCHAR, DCHAR_CPY): Undefine at the end. 2007-11-04 Bruno Haible * m4/printf.m4 (gl_PRINTF_ENOMEM): Use GL_NOCRASH. * modules/fprintf-posix (Depends-on): Add nocrash. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/unistdio/u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u8-u8-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u16-u16-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/u32-u32-vasnprintf (Depends-on): Likewise. * modules/unistdio/ulc-vasnprintf (Depends-on): Likewise. 2007-11-04 Bruno Haible * modules/nocrash: New file. * m4/nocrash.m4: New file, taken from GNU clisp. Code taken from GNU libsigsegv, with permission of GNU libsigsegv's copyright holders. 2007-11-04 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Add some tests of precision handling. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. Fix *printf behaviour for large precisions on mingw and BeOS. * m4/printf.m4 (gl_PRINTF_PRECISION): New macro. * lib/vasnprintf.c (VASNPRINTF): Handle NEED_PRINTF_UNBOUNDED_PRECISION. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_PRECISION): New macro. (gl_PREREQ_VASNPRINTF_WITH_EXTRAS): Invoke it. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_PRECISION and test its result. Invoke gl_PREREQ_VASNPRINTF_PRECISION. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-11-04 Bruno Haible * lib/vasnprintf.c (scale10_round_decimal_decoded): Fix shift loop. 2007-11-04 Bruno Haible * modules/relocatable-prog (Files): Add m4/lib-ld.m4. Reported by Sylvain Beucler . 2007-11-03 Bruno Haible * tests/test-fprintf-posix2.sh: New file. * tests/test-fprintf-posix2.c: New file. * modules/fprintf-posix-tests (Files): Add them. (TESTS): Add test-fprintf-posix2.sh. (configure.ac): Check for getrlimit and setrlimit. (check_PROGRAMS): Add test-fprintf-posix2. * tests/test-printf-posix2.sh: New file. * tests/test-printf-posix2.c: New file. * modules/printf-posix-tests (Files): Add them. (TESTS): Add test-printf-posix2.sh. (configure.ac): Check for getrlimit and setrlimit. (check_PROGRAMS): Add test-printf-posix2. Fix *printf behaviour in out-of-memory situations on MacOS X and *BSD. * m4/printf.m4 (gl_PRINTF_ENOMEM): New macro. * lib/vasnprintf.c: Implement NEED_PRINTF_DOUBLE. (decode_double): New function, copied from decode_long_double. (scale10_round_decimal_decoded): New function, extracted from scale10_round_decimal_long_double. (scale10_round_decimal_long_double): Use it. (scale10_round_decimal_double): New function. (floorlog10): New function. (VASNPRINTF): Handle NEED_PRINTF_DOUBLE case. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_ENOMEM): New macro. (gl_PREREQ_VASNPRINTF_WITH_EXTRAS): Invoke it. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_ENOMEM and test its result. Invoke gl_PREREQ_VASNPRINTF_ENOMEM. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * modules/fprintf-posix (Depends-on): Add frexp-nolibm. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-11-03 Bruno Haible * modules/frexp-nolibm-tests: New file. * modules/frexp-nolibm: New file. * m4/frexp.m4 (gl_FUNC_FREXP_NO_LIBM): New macro. 2007-11-03 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Don't assume that snprintf's return value is C99 compliant. Needed for OSF/1 5.1. 2007-11-03 Bruno Haible Fix out-of-memory handling of vasnprintf. * lib/printf-parse.c: Include . (PRINTF_PARSE): When failing, set errno to EINVAL or ENOMEM. * lib/vasnprintf.c (VASNPRINTF): When PRINTF_PARSE fails, assume errno is already set. 2007-11-02 Eric Blake Fix tests on cygwin. * modules/xprintf-posix-tests (Makefile.am): Link against -lintl. 2007-11-01 Bruno Haible * lib/stdlib.in.h (putenv): Remove the "not POSIX compliant everywhere" warning. * doc/functions/putenv.texi: Clarify that the 'putenv' module is not needed for POSIX compatibility. 2007-11-01 Paul Eggert * m4/putenv.m4 (gl_FUNC_PUTENV): Also mention that we're checking for compatibility with GNU. 2007-11-01 Bruno Haible * lib/putenv.c: Include . Remove rpl_putenv declaration. (putenv): Renamed from rpl_putenv. Change argument type from 'const char *' to 'char *'. * m4/putenv.m4 (gl_FUNC_PUTENV): Require gl_STDLIB_H_DEFAULTS. Instead of defining putenv in config.h, just set REPLACE_PUTENV. * modules/putenv (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Include): Use . * lib/stdlib.in.h (putenv): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_PUTENV and REPLACE_PUTENV. * modules/stdlib (Makefile.am): Substitute GNULIB_PUTENV and REPLACE_PUTENV. Needed for MacOS X 10.5.0. Reported by Peter O'Gorman . 2007-11-01 Jim Meyering Treat an empty date string exactly like "0". * lib/getdate.y (get_date): Once any isspace or TZ= prefix is consumed, if the remaining date string (to be parsed) is empty, use "0". Reported by Mischa Molhoek and discussed in this thread: . 2007-10-31 Bruno Haible * m4/intmax_t.m4 (gl_AC_TYPE_INTMAX_T, gt_AC_TYPE_INTMAX_T): Use AC_TYPE_LONG_LONG_INT instead of gl_AC_TYPE_LONG_LONG. * m4/uintmax_t.m4 (gl_AC_TYPE_UINTMAX_T): Use AC_TYPE_UNSIGNED_LONG_LONG_INT instead of gl_AC_TYPE_UNSIGNED_LONG_LONG. * m4/longlong.m4 (gl_AC_TYPE_LONG_LONG): Remove macro. * m4/ulonglong.m4 (gl_AC_TYPE_UNSIGNED_LONG_LONG): Remove macro. 2007-10-31 Bruno Haible * m4/longlong.m4 (_AC_TYPE_LONG_LONG_SNIPPET): New macro, extracted from AC_TYPE_LONG_LONG_INT and AC_TYPE_UNSIGNED_LONG_LONG_INT. (AC_TYPE_LONG_LONG_INT): Use it. (AC_TYPE_UNSIGNED_LONG_LONG_INT): Moved here from m4/ulonglong.m4. Use it as well. * m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Remove macro; moved to m4/longlong.m4. * modules/stdint (Files): Remove m4/ulonglong.m4. * modules/strtoull (Files): Use m4/longlong.m4 instead of m4/ulonglong.m4. * modules/strtoumax (Files): Likewise. 2007-10-30 Bruno Haible * modules/xvasprintf-posix: New file. Suggested by Eric Blake. 2007-10-30 Bruno Haible * modules/xprintf-posix-tests: New file. * tests/test-xprintf-posix.sh: New file. * tests/test-xprintf-posix.c: New file. * tests/test-xfprintf-posix.c: New file. * modules/xprintf-posix: New file. 2007-10-30 Ralf Wildenhues * modules/fbufmode-tests (MOSTLYCLEANFILES): Remove temp files. * modules/freadable-tests (MOSTLYCLEANFILES): Likewise. * modules/fwritable-tests (MOSTLYCLEANFILES): Likewise. 2007-10-29 Bruno Haible * m4/floorf.m4 (gl_FUNC_FLOORF_LIBS): Rename the cache variable to contain the special marker '_cv_'. * m4/floor.m4 (gl_FUNC_FLOOR_LIBS): Likewise. * m4/floorl.m4 (gl_FUNC_FLOORL_LIBS): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF_LIBS): Likewise. * m4/ceil.m4 (gl_FUNC_CEIL_LIBS): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL_LIBS): Likewise. Reported by Ralf Wildenhues. 2007-10-29 Bruno Haible * gnulib-tool (func_import): When --lgpl is not specified, set sed_transform_lib_file to convert LGPL and GPLv2+ copyright headers to GPLv3. Reported by Simon Josefsson. 2007-10-28 Bruno Haible * lib/math.in.h: Test REPLACE_ISFINITE instead of HAVE_DECL_ISFINITE. * m4/isfinite.m4 (gl_ISFINITE): Initialize REPLACE_ISFINITE instead of HAVE_DECL_ISFINITE. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Update. * modules/math (Makefile.am): Substitute REPLACE_ISFINITE instead of HAVE_DECL_ISFINITE. 2007-10-28 Bruno Haible * lib/stdint.in.h (_STDINT_MAX): Subtract 1 from an unused signed integer shift in the signed case. Fixes warnings with OSF/1 5.1 cc. 2007-10-28 Bruno Haible Fix link errors with Sun C 5.0 on Solaris 10. * m4/floorf.m4 (gl_FUNC_FLOORF): Consider also the case that the function is declared but not present in the compiler's libm. * m4/floorl.m4 (gl_FUNC_FLOORL): Likewise. * m4/ceilf.m4 (gl_FUNC_CEILF): Likewise. * m4/ceill.m4 (gl_FUNC_CEILL: Likewise. * lib/math.in.h: Test REPLACE_CEILF instead of HAVE_DECL_CEILF. Test REPLACE_CEILL instead of HAVE_DECL_CEILL. Test REPLACE_FLOORF instead of HAVE_DECL_FLOORF. Test REPLACE_FLOORL instead of HAVE_DECL_FLOORL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Update. * modules/math (Makefile.am): Substitute REPLACE_CEILF instead of HAVE_DECL_CEILF, REPLACE_CEILL instead of HAVE_DECL_CEILL, REPLACE_FLOORF instead of HAVE_DECL_FLOORF, REPLACE_FLOORL instead of HAVE_DECL_FLOORL. 2007-10-28 Bruno Haible * m4/floorl.m4 (gl_FUNC_FLOORL_LIBS): New macro, extracted from gl_FUNC_FLOORL. Cache the result. (gl_FUNC_FLOORL): Use it. * m4/ceill.m4 (gl_FUNC_CEILL_LIBS): New macro, extracted from gl_FUNC_CEILL. Cache the result. (gl_FUNC_CEILL): Use it. * m4/floor.m4 (gl_FUNC_FLOOR_LIBS): New macro, extracted from gl_FUNC_FLOOR. Cache the result. (gl_FUNC_FLOOR): Use it. * m4/ceil.m4 (gl_FUNC_CEIL_LIBS): New macro, extracted from gl_FUNC_CEIL. Cache the result. (gl_FUNC_CEIL): Use it. * m4/floorf.m4 (gl_FUNC_FLOORF_LIBS): New macro, extracted from gl_FUNC_FLOORF. Cache the result. (gl_FUNC_FLOORF): Use it. * m4/ceilf.m4 (gl_FUNC_CEILF_LIBS): New macro, extracted from gl_FUNC_CEILF. Cache the result. (gl_FUNC_CEILF): Use it. 2007-10-28 Bruno Haible * gnulib-tool: Allow specifying the LGPL version number through --lgpl=2 or --lgpl=3. (func_usage): Document --lgpl with argument. Handle --lgpl=... arguments. (func_import): Recognize also gl_LGPL calls with an argument. When --lgpl=2 is used and the module's license is just LGPL, report an error. Set sed_transform_lib_file according to the lgpl variable. In the generated files, use --lgpl or gl_LGPL invocations with argument, if necessary. * doc/gnulib-intro.texi (Copyright): Explain how to get modules under an LGPv2+ license. * doc/gnulib-tool.texi (Modified imports): Update explanation of gl_LGPL macro. 2007-10-28 Ralf Wildenhues Bruno Haible * lib/unistr.h (u8_uctomb_aux): Declare also if !HAVE_INLINE. (u16_uctomb_aux): Likewise. * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Define also if !HAVE_INLINE. * lib/unistr/u16-uctomb-aux.c (u16_uctomb_aux): Likewise 2007-10-28 Bruno Haible * modules/error: Add a notice recommending to change XGETTEXT_OPTIONS. Invoke AM_GETTEXT_OPTION if it exists. * modules/vasprintf: Likewise. * modules/verror: Likewise. * modules/xprintf: Likewise. * modules/xvasprintf: Likewise. 2007-10-27 Ben Pfaff * lib/math.in.h: Define isfinite macro and prototypes for gl_isfinitef, gl_isfinited, gl_isfinitel if we are providing implementations. * m4/math_h.m4: New substitutions for isfinite module. * lib/isfinite.c: New file. * m4/isfinite.m4: New file. * modules/math: Replace isfinite-related @VARS@ in math.in.h. * modules/isfinite: New file. * modules/isfinite-tests: New file. * tests/tests-isfinite.c: New file. * doc/functions/isfinite.texi: Mention isfinite module. * MODULES.html.sh: Mention new module. 2007-10-27 Ben Pfaff Ralf Wildenhues reported that Tru64 4.0D declares the round functions but does not have definitions. * m4/check-math-lib.m4 (gl_CHECK_MATH_LIB): If the target function cannot be found in any library, set the output variable to "missing" instead of "". * m4/round.m4: Also use our substitute if we cannot find round in any library, even if it is declared. * m4/roundf.m4: Likewise for roundf. * m4/roundl.m4: Likewise for roundl. * lib/math.in.h: Undefine roundf, round, roundl before defining their replacements, to allow for hypothetical systems where these may be defined as macros but not available in libraries. 2007-10-27 Bruno Haible * doc/gnulib.texi: Invoke @firstparagraphindent. * doc/gnulib-tool.texi (Simple update): Mention possible incompatible changes in gnulib. (Source changes): New section. 2007-10-26 Bruno Haible * m4/gnulib-common.m4 (AC_C_RESTRICT): New overriding definition, borrowed from autoconf. 2007-10-26 Bruno Haible * lib/strerror.c (rpl_strerror): Return "Unknown error ..." also if strerror returned the empty string. Needed on HP-UX 11.00. 2007-10-24 Micah Cowan Remove vestiges of cvs-gnulib-checkout process. Now we use git. * build-aux/bootstrap: Remove support for now-unnecessary option, --cvs-user, and envvars CVS_USER, CVS_RSH. 2007-10-24 Jim Meyering Avoid diagnostics from sha1sum when there is no cached checksum. * build-aux/bootstrap (update_po_files): Skip the sha1sum check if the po.s1 file hasn't been created yet. * build-aux/bootstrap: Sync from coreutils: 2007-10-24 Jim Meyering Get gnulib from the git repository, not from an obsolete cvs one. * build-aux/bootstrap: Suggestion from Micah Cowan. 2007-10-04 Jim Meyering * build-aux/bootstrap (slurp): Adapt to _.h -> .in.h name change. (update_po_files): Work also when there are no .po files in po/. 2007-10-24 Paul Eggert * README: Append ".git" to git and cg examples. Problem reported by Benoit Sigoure. 2007-10-23 Micah Cowan * users.txt: Add wget. 2007-10-23 Ralf Wildenhues Fix linking of some unistdio tests on FreeBSD. * modules/unistdio/u16-vsnprintf-tests (test_u16_vsprintf1_LDADD): Add @LIBINTL@. * modules/unistdio/u16-vsprintf-tests (test_u16_vsnprintf1_LDADD): Likewise. * modules/unistdio/u32-vsnprintf-tests (test_u32_vsnprintf1_LDADD): Likewise. * modules/unistdio/u32-vsprintf-tests (test_u32_vsprintf1_LDADD): Likewise. * modules/unistdio/u8-vsnprintf-tests (test_u8_vsnprintf1_LDADD): Likewise. * modules/unistdio/u8-vsprintf-tests (test_u8_vsprintf1_LDADD): Likewise. * modules/unistdio/ulc-vsnprintf-tests (test_ulc_vsnprintf1_LDADD): Likewise. * modules/unistdio/ulc-vsprintf-tests (test_ulc_vsprintf1_LDADD): Likewise. Fix linking of some uniconv tests on FreeBSD. * modules/uniconv/u16-conv-from-enc-tests (test_u16_conv_from_enc_LDADD): Link $(LDADD) before @LIBICONV@. * modules/uniconv/u16-conv-to-enc-tests (test_u16_conv_to_enc_LDADD): Likewise. * modules/uniconv/u16-strconv-from-enc-tests (test_u16_strconv_from_enc_LDADD): Likewise. * modules/uniconv/u16-strconv-to-enc-tests (test_u16_strconv_to_enc_LDADD): Likewise. * modules/uniconv/u32-conv-from-enc-tests (test_u32_conv_from_enc_LDADD): Likewise. * modules/uniconv/u32-conv-to-enc-tests (test_u32_conv_to_enc_LDADD): Likewise. * modules/uniconv/u32-strconv-from-enc-tests (test_u32_strconv_from_enc_LDADD): Likewise. * modules/uniconv/u32-strconv-to-enc-tests (test_u32_strconv_to_enc_LDADD): Likewise. * modules/uniconv/u8-conv-from-enc-tests (test_u8_conv_from_enc_LDADD): Likewise. * modules/uniconv/u8-conv-to-enc-tests (test_u8_conv_to_enc_LDADD): Likewise. * modules/uniconv/u8-strconv-from-enc-tests (test_u8_strconv_from_enc_LDADD): Likewise. * modules/uniconv/u8-strconv-to-enc-tests (test_u8_strconv_to_enc_LDADD): Likewise. 2007-10-22 Bruno Haible * lib/stdint.in.h: Add check that intmax_t and uintmax_t have the same size. 2007-10-22 Eric Blake Tweak x*printf documentation. * lib/xprintf.c (xprintf, xvprintf, xfprintf, xvfprintf): Adjust variable name and comments. Suggested by Bruno Haible. 2007-10-22 Bruno Haible * lib/acl.c (copy_acl): Fix file name in comment. 2007-10-22 Paul Eggert Fix Tru64 problem with stdbool.h. * lib/stdbool.in.h (false, true): [! (defined __cplusplus || defined __BEOS__) && !defined __GNUC__]: Don't declare as an enum in this situation; it runs afoul of Tru64. Problem reported by Steven M. Schweda in . 2007-10-22 Eric Blake Also wrap vf?printf. * lib/xprintf.h (xvprintf, xvfprintf): New declarations. * lib/xprintf.c (xprintf, xfprintf): Work for C89. (xvprintf, xvfprintf): New functions. 2007-10-22 Ralf Wildenhues * modules/fstrcmp-tests (test_fstrcmp_LDADD): New, add @LIBINTL@ for FreeBSD 6.2, $(LIBTHREAD) for AIX 4.3.3. * lib/uniconv/u16-conv-to-enc.c (U_MBLEN): Define. * lib/uniconv/u32-conv-to-enc.c (U_MBLEN): Likewise. 2007-10-22 Paul Eggert * lib/acl.c (copy_acl): Adjust to IRIX 6.5. Problem reported by Bruno Haible. 2007-10-22 Ralf Wildenhues * lib/getloadavg.c [defined (__osf__) && (defined (__alpha) || defined (__alpha__)]: Undef `sys' after including sys/table.h, for Tru64 4.0D. * tests/test-i-ring.c: Work for C89. 2007-10-22 Bruno Haible * m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Use -1ull, not -1u, in preprocessor expression, so that we don't test for the bug in HP-UX 11.00 cpp. Testing for this bug caused problems; see . 2007-10-22 Eric Blake * tests/test-yesno.sh: Silence stderr during test. 2007-10-22 Simon Josefsson * modules/crypto/gc-camellia: New file. * m4/gc-camellia.m4: New file. * lib/gc-libgcrypt.c (gc_cipher_open): Support Camellia. * lib/gc.h (enum Gc_cipher): Add GC_CAMELLIA128, GC_CAMELLIA256. 2007-10-22 Simon Josefsson * build-aux/maint.mk (gzip_rsyncable): Don't fail if gzip sends --help to stdout. Reported by sms@antinode.org (Steven M. Schweda). 2007-10-22 Simon Josefsson * users.txt: Fix link to libksba. 2007-10-21 Ben Pfaff * modules/roundf-tests: Add dependency on floorf, ceilf to allow round.c roundf implementation that depends on floorf and ceilf to be tested unconditionally. 2007-10-21 Ben Pfaff * m4/check-libm-func.m4: Removed. * m4/check-math-lib.m4: New file. * m4/round.m4: Rewrite to use gl_CHECK_MATH_LIB. * m4/roundf.m4: Ditto, and fix lack of HAVE_DECL_ROUNDF definition and lack of AC_LIBOBJ([roundf]). * m4/roundl.m4: Ditto, and similarly for roundl. * modules/round: Reference new m4 file. * modules/roundf: Ditto. * modules/roundl: Ditto. * tests/test-round2.c (main): Use ROUND instead of round. Bug report from Bruno Haible. 2007-10-21 Bruno Haible * lib/printf-parse.c: Don't assume exists in IN_LIBASPRINTF context. 2007-10-21 Bruno Haible * tests/test-wcwidth.c (main): Allow negative result for some control characters. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Check also the width of U+200B. Needed on OSF/1 5.1. 2007-10-21 Bruno Haible * tests/test-floorf1.c: Include isnanf.h. (main): Use isnanf() instead of isnan(). * tests/test-ceilf1.c: Include isnanf.h. (main): Use isnanf() instead of isnan(). * tests/test-truncf1.c: Include isnanf.h. (main): Use isnanf() instead of isnan(). * tests/test-roundf1.c: Include isnanf.h. (main): Use isnanf() instead of isnan(). 2007-10-21 Eric Blake * users.txt: Update URL for m4. 2007-10-21 Bruno Haible * users.txt: Add clisp. Update URLs to Simon Josefsson's projects. 2007-10-21 Bruno Haible * gnulib-tool (func_create_megatestdir): Determine the cvsdate from Git's management files if the CVS files are not present. 2007-10-20 Bruno Haible * lib/count-one-bits.h (COUNT_ONE_BITS): Use the builtin also for gcc-3.4.x. 2007-10-20 Ben Pfaff * lib/math.in.h: Declare round, roundf, roundl if we are providing implementations. * m4/math_h.m4: New substitutions for round, roundf, roundl modules. * lib/round.c: New file. * lib/roundf.c: New file. * lib/roundl.c: New file. * m4/round.m4: New file. * m4/roundf.m4: New file. * m4/roundl.m4: New file. * m4/check-libm-func-m4: New file. * modules/math: Replace round, roundf, roundl related @VARS@ in math.in.h. * modules/round: New file. * modules/round-tests: New file. * modules/roundf: New file. * modules/roundf-tests: New file. * modules/roundl: New file. * modules/roundl-tests: New file. * tests/test-round1.c: New file. * tests/test-round2.c: New file. * tests/test-roundf1.c: New file. * tests/test-roundf2.c: New file. * tests/test-roundl.c: New file. * doc/functions/round.texi: Mention round module. * doc/functions/roundf.texi: Mention roundf module. * doc/functions/roundl.texi: Mention roundl module. * MODULES.html.sh: Mention new modules. Thanks to Bruno Haible for suggestions. 2007-10-20 Jim Meyering * lib/xprintf.c: Include unconditionally. Change xprintf's license to GPL. * modules/xprintf (License): s/LGPL/GPL/, since this module depends on modules (exit and exitfail) which are GPL. Suggestion from Bruno Haible. xprintf fixes. * lib/xprintf.c (xprintf, xfprintf): Use va_end. Use a clearer diagnostic. Patch from Bruno Haible. 2007-10-20 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Don't report overflow if the available length is INT_MAX and sizeof (DCHAR_T) > sizeof (TCHAR_T). Reported by Ralf Wildenhues . 2007-10-20 Bruno Haible * tests/test-floorf2.c (correct_result_p): Don't rely on excess precision in the comparison result > x - 1 or similar. * tests/test-ceilf2.c (correct_result_p): Likewise. * tests/test-truncf2.c (correct_result_p): Likewise. * tests/test-trunc2.c (correct_result_p): Likewise. Reported by Ralf Wildenhues . 2007-10-20 Bruno Haible * modules/ceil: New file. * m4/ceil.m4: New file. * doc/functions/ceil.texi: Mention the 'ceil' module. 2007-10-20 Bruno Haible * modules/floor: New file. * m4/floor.m4: New file. * doc/functions/floor.texi: Mention the 'floor' module. 2007-10-20 Bruno Haible * modules/ceilf-tests (Depends-on): Add fprintf-posix. Needed for use of %a. * modules/floorf-tests (Depends-on): Likewise. * modules/truncf-tests (Depends-on): Likewise. * modules/trunc-tests (Depends-on): Likewise. Reported by Ben Pfaff. 2007-10-19 Jim Meyering * lib/xprintf.c (xprintf, xfprintf): Test err < 0, not just "err". Don't bother testing specific errno values. Just test ferror. New module: xprintf * modules/xprintf, lib/xprintf.c, lib/xprintf.h: New files. 2007-10-19 Bruno Haible * modules/csharpexec (Makefile.am): Use @FOO@ syntax instead of $(FOO) syntax. * modules/javaexec (Makefile.am): Likewise. * modules/relocatable-prog (Makefile.am): Likewise. Suggested by Jim Meyering. 2007-10-18 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Don't use %n on glibc >= 2.3 systems. Reported by Jim Meyering. 2007-10-18 Eric Blake * modules/filenamecat-tests (Makefile.am): Link against -lintl. 2007-10-18 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N): Put the format string into writable memory. Needed in Fortify conditions. 2007-10-18 Colin Watson (tiny change) Bruno Haible * lib/trim.c: Include config.h unconditionally. Include trim.h always. Include ctype.h always. Include stdlib.h, not mbuiter.h, for MB_CUR_MAX. * modules/trim (Depends-on): Add mbchar. (configure.ac): Add gl_FUNC_MBRTOWC. (Makefile.am): Augment lib_SOURCES. 2007-10-17 Paul Eggert Modify glob.c to use fstatat and dirfd, to simplify it. Suggested by Eric Blake. * lib/glob.c (__fxstatat64) [!_LIBC]: New macro. Don't include ; not used. (link_exists2_p, glob_in_dir) [!_LIBC]: No longer a special case. (link_exists_p): Simplify implementation, since we can now assume dirfd and fstatat. * modules/glob (Depends-on): Add dirfd, openat. Remove stdbool. 2007-10-17 Ralf Wildenhues * gnulib-tool (func_get_dependencies): Fix sed script to match only tests. 2007-10-17 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): On Cygwin, don't allow locale names without encoding suffix. * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): Likewise. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. 2007-10-16 Bruno Haible * lib/getcwd.c (__getcwd): Define with explicit rpl_ prefix. * lib/getgroups.c (getgroups): Likewise. * lib/gettimeofday.c (localtime, gmtime, tzset): Likewise. 2007-10-16 Bruno Haible * modules/absolute-header (License): Change from LGPL to LGPLv2+. * modules/malloc-posix (License): Likewise. * modules/realloc-posix (License): Likewise. * modules/calloc-posix (License): Likewise. * modules/intprops (License): Change from GPL to LGPL, with Paul Eggert's approval. 2007-10-16 Paul Eggert Merge glibc changes into lib/glob.c. * lib/glob.c (glob_in_dir): Sync with glibc/posix/glob.c, dated 2007-10-15 04:59:03 UTC. Here are the changes: 2007-10-14 Ulrich Drepper * lib/glob.c: Reimplement link_exists_p to use fstatat64. * lib/glob.c: Add some branch prediction throughout. 2007-10-07 Ulrich Drepper [BZ #5103] * lib/glob.c (glob): Recognize patterns starting \/. 2007-02-14 Jakub Jelinek [BZ #3996] * lib/glob.c (attribute_hidden): Define if not defined. (glob): Unescape dirname, filename or username when needed and not GLOB_NOESCAPE. Handle \/ correctly. Handle GLOB_MARK if filename is NULL. Handle unescaped [ in pattern without closing ]. Don't pass GLOB_CHECK down to recursive glob for directories. (__glob_pattern_type): New function. (__glob_pattern_p): Implement using __glob_pattern_type. (glob_in_dir): Handle GLOB_NOCHECK patterns containing no meta characters and backslashes if not GLOB_NOESCAPE or unterminated [. Remove unreachable code. 2006-09-30 Ulrich Drepper * lib/glob.c (glob_in_dir): Add some comments and asserts to explain why there are no leaks. 2006-09-25 Jakub Jelinek [BZ #3253] * lib/glob.c (glob_in_dir): Don't alloca one struct globlink at a time, rather allocate increasingly bigger arrays of pointers, if possible with alloca, if too large with malloc. 2007-10-16 Paul Eggert Check for 64-bit int errors in HP-UX 10.20 preprocessor. Problem reported by H.Merijn Brand in . * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Check preprocessor too. * m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Likewise. 2007-10-15 Bruno Haible * lib/fchdir.c (close, open, closedir, opendir, dup, dup2): Define with explicit rpl_ prefix. * lib/fopen.c (fopen): Likewise. * lib/freopen.c (freopen): Likewise. * lib/iconv.c (iconv): Likewise. * lib/iconv_close.c (iconv_close): Likewise. 2007-10-15 Ralf Wildenhues * m4/iconv_open (gl_FUNC_ICONV_OPEN_UTF): Fix cache variable name. 2007-10-15 Bruno Haible * m4/getaddrinfo.m4 (gl_GETADDRINFO, gl_PREREQ_GETADDRINFO): Use instead of since we only need NULL. Reported by Ben Pfaff . 2007-10-15 Bruno Haible * doc/gnulib-tool.texi (Initial import): Swap order of -I directives. Replace paragraph talking about LIBOBJS. Reported by Colin Watson . 2007-10-15 Bruno Haible * m4/getaddrinfo.m4 (gl_GETADDRINFO, gl_PREREQ_GETADDRINFO): Include before using NULL. 2007-10-15 Simon Josefsson * m4/getaddrinfo.m4: Use NULL rather than 0 for pointers. Reported by Albert Chin . 2007-10-14 Bruno Haible * modules/iconv_open-utf-tests: New file. * tests/test-iconv-utf.c: New file. Enhance iconv_open to support UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE. * modules/iconv_open-utf: New file. * lib/iconv.in.h (_ICONV_UTF8_UTF*, _ICONV_UTF*_UTF8): New macros. (iconv, iconv_close): New declarations. * lib/iconv_open.c: Include c-strcase.h. Don't require ICONV_FLAVOR to be defined. (iconv_open): Add special handling of conversion between UTF-8 and UTF-{16,32}{BE,LE}. * lib/iconv.c: New file, incorporating code from GNU libiconv 1.11. * lib/iconv_close.c: New file. * m4/iconv_open.m4 (gl_REPLACE_ICONV_OPEN): New macro, extracted from gl_FUNC_ICONV_OPEN. (gl_FUNC_ICONV_OPEN): Use it. (gl_FUNC_ICONV_OPEN_UTF): New macro. * m4/iconv_h.m4 (gl_ICONV_H_DEFAULTS): Initialize also REPLACE_ICONV and REPLACE_ICONV_UTF. * modules/iconv_open (Depends-on): Add c-strcase. (Makefile.am): Substitute also REPLACE_ICONV, REPLACE_ICONV_UTF, ICONV_CONST. * doc/functions/iconv_open.texi: Mention the iconv_open-utf module. 2007-10-13 Albert Chin Bruno Haible * m4/getaddrinfo.m4 (gl_GETADDRINFO): Perform the test for getaddrinfo through a link check that includes . Needed for OSF/1 5.1. 2007-10-13 Bruno Haible * lib/argp-fmtstream.h (ARGP_FS_EI): If __GNUC_STDC_INLINE__ is defined, use the ISO C99 inline semantics. * lib/argp.h (ARGP_EI): Likewise. 2007-10-13 Bruno Haible Handle 'inline' change in gcc 4.3.0. * lib/argp-fmtstream.h (argp_fmtstream_putc, argp_fmtstream_puts, argp_fmtstream_write, argp_fmtstream_set_lmargin, argp_fmtstream_set_rmargin, argp_fmtstream_set_wmargin, argp_fmtstream_point): Disable 'extern' declaration if the function definition is going to be provided inline. (ARGP_FS_EI): If __GNUC_STDC_INLINE__ is defined, use the GNU C inline semantics, not the ISO C99 inline semantics. * lib/argp.h (argp_usage, _option_is_short, _option_is_end): Disable 'extern' declaration if the function definition is going to be provided inline. (ARGP_EI): Don't assume GNU C. If __GNUC_STDC_INLINE__ is defined, use the GNU C inline semantics, not the ISO C99 inline semantics. With GCC 4.2, avoid a warning. 2007-10-13 Bruno Haible * lib/freading.h (freading): Enable the use of __freading for glibc >= 2.7. * lib/freading.c (freading): Likewise. 2007-10-12 Paul Eggert * lib/argp-fmtstream.h (ARGP_FS_EI): Work around GCC 4.2.1 diagnostic "warning: C99 inline functions are not supported; using GNU89". 2007-10-12 Bruno Haible * lib/ceil.c (FUNC): Avoid rounding errors for values near a power of 2. * tests/test-ceilf2.c: New file. * modules/ceilf-tests: (Files, Depends-on, Makefile.am): Add new test. * tests/test-ceilf1.c: Renamed from tests/test-ceilf.c. * modules/ceilf-tests: Update. 2007-10-12 Bruno Haible * lib/floor.c (FUNC): Avoid rounding errors for values near a power of 2. * tests/test-floorf2.c: New file. * modules/floorf-tests: (Files, Depends-on, Makefile.am): Add new test. * tests/test-floorf1.c: Renamed from tests/test-floorf.c. * modules/floorf-tests: Update. 2007-10-12 Bruno Haible * tests/test-trunc2.c: New file. * modules/trunc-tests: (Files, Depends-on, Makefile.am): Add new test. * tests/test-trunc1.c: Renamed from tests/test-trunc.c. * modules/trunc-tests: Update. 2007-10-12 Bruno Haible * lib/trunc.c (FUNC): Avoid rounding errors for values near a power of 2. * tests/test-truncf2.c: New file. * modules/truncf-tests: (Files, Depends-on, Makefile.am): Add new test. * tests/test-truncf1.c: Renamed from tests/test-truncf.c. * modules/truncf-tests: Update. 2007-10-11 Eric Blake Don't claim strerror is broken on Interix. * doc/functions/strerror.texi (strerror): Known broken systems are now Solaris 8, and not Interix. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): No longer filter out Interix on cross-compile. Reported by Martin Koeppe in http://lists.gnu.org/r/bug-gnulib/2007-10/msg00005.html. 2007-10-11 Bruno Haible * modules/i-ring-tests: New file. * tests/test-i-ring.c: Renamed from lib/i-ring-test.c. Use ASSERT instead of assert. 2007-10-11 Bruno Haible * modules/filenamecat-tests: New file. * tests/test-filenamecat.c: New file, extracted from lib/filenamecat.c. * lib/filenamecat.c: Remove test code. 2007-10-11 Paul Eggert Simplify and modernize strerror substitute, partly to fix Solaris 8 bug. * lib/strerror.c: Include always, to test interface, and to remove the need for the dummy. Include intprops.h to compute width instead of doing it ourselves and missing a CHAR_BIT declaration, which broke tar 1.19 on Solaris 8. (strerror): Define it to return NULL if there's no system strerror. (rpl_strerror): Use INT_STRLEN_BOUND to compute bound. Omit !HAVE_STRERROR code. We don't need to worry about supporting ancient pre-strerror Unix systems well any more. Saying "unknown system error" is enough. * lib/string.in.h (strerror): Simplify the ifdef to reflect the simpler strerror.c implementation. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE, gl_PREREQ_STDERROR): Simplify the tests to reflect the simpler strerror implementation. * modules/strerror (Depends-on): Add intprops. 2007-10-09 Eric Blake Silence test-fpending. * modules/fpending-tests (Files): Add wrapper script. * tests/test-fpending.sh: New file. 2007-10-09 Bruno Haible * MODULES.html.sh (func_module): Don't create a hyperlink for function names like 'printf_frexp'. (Misc): Add crc, memxor. (Characteristics of floating types): New section. (Mathematics): Add ceilf, ceill, floorf, floorl, frexpl-nolibm, isnanf-nolibm, signbit, trunc, truncf, truncl. (Enhancements for ISO C 99 functions): New subsection Input/output. (Support for systems lacking POSIX:2001): Add arpa_inet, calloc-posix, fcntl, fopen, freopen, fseek, fseeko, ftell, ftello, iconv_open, locale, malloc-posix, netinet_in, open, realloc-posix, signal, sleep. (Compatibility checks for POSIX:2001 functions): Add clock-time. (Enhancements for POSIX:2001 functions): Add chdir-long. (File system functions): Add areadlink, chdir-safer, read-file. Remove cycle-check. (File system as inode set): New section. (Date and time): Add gethrxtime. (Multithreading): Add openmp. (Internationalization functions): Add localename. (Unicode string functions): Add unistr/u*-mbsnlen. (Support for maintaining and releasing projects): Add git-version-gen. (Lone files): Remove directories. 2007-10-08 Ben Pfaff * lib/xmalloca.h: Fix typo in comment. 2007-10-08 Paul Eggert * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior when avoiding problems with integer overflow. Use a portable test instead. 2007-10-08 Simon Josefsson * modules/dummy (License): Change to LGPLv2+. * modules/float (License): Likewise * modules/realloc (License): Likewise * modules/stdlib (License): Likewise 2007-10-07 Bruno Haible * trunc.c (TWO_MANT_DIG): Change type to DOUBLE. * floor.c (TWO_MANT_DIG): Likewise. * ceil.c (TWO_MANT_DIG): Likewise. Reported by Ben Pfaff. 2007-10-07 Bruno Haible Avoid gcc warnings "declaration of 'exp' shadows a global declaration". * lib/math.in.h (frexp, frexpl): Change parameter name to 'expptr'. * lib/frexp.c (FUNC): Likewise. * lib/printf-frexp.h (printf_frexp): Likewise. * lib/printf-frexpl.h (printf_frexpl): Likewise. * lib/printf-frexp.c (FUNC): Likewise. Suggested by Jim Meyering. 2007-10-07 Jim Meyering Make xnanosleep's integer overflow test more robust. * lib/xnanosleep.c (xnanosleep): Declare a temporary to be "volatile", so that gcc-4.3.0 doesn't optimize away this test for overflow. 2007-10-07 Bruno Haible * NEWS: Mention the license change. * doc/gnulib-intro.texi (Copyright): Update the meaning of the license abbreviations in the modules files. Change copyright notice from GPLv2+ to GPLv3+. * README: Change copyright notice. * MODULES.html.sh: Likewise. * build-aux/bootstrap.conf: Likewise. * build-aux/config.libpath: Likewise. * build-aux/csharpcomp.sh.in: Likewise. * build-aux/csharpexec.sh.in: Likewise. * build-aux/install-reloc: Likewise. * build-aux/javacomp.sh.in: Likewise. * build-aux/javaexec.sh.in: Likewise. * build-aux/ldd.sh.in: Likewise. * build-aux/reloc-ldflags: Likewise. * build-aux/relocatable.sh.in: Likewise. * build-aux/x-to-1.in: Likewise. * check-module: Likewise. * config/srclistvars.sh: Likewise. * gnulib-tool: Likewise. * lib/acl-internal.h: Likewise. * lib/acl.c: Likewise. * lib/acl.h: Likewise. * lib/acl_entries.c: Likewise. * lib/areadlink-with-size.c: Likewise. * lib/areadlink.c: Likewise. * lib/areadlink.h: Likewise. * lib/argmatch.c: Likewise. * lib/argmatch.h: Likewise. * lib/argp-ba.c: Likewise. * lib/argp-eexst.c: Likewise. * lib/argp-fmtstream.c: Likewise. * lib/argp-fmtstream.h: Likewise. * lib/argp-fs-xinl.c: Likewise. * lib/argp-help.c: Likewise. * lib/argp-namefrob.h: Likewise. * lib/argp-parse.c: Likewise. * lib/argp-pin.c: Likewise. * lib/argp-pv.c: Likewise. * lib/argp-pvh.c: Likewise. * lib/argp-xinl.c: Likewise. * lib/argp.h: Likewise. * lib/at-func.c: Likewise. * lib/atanl.c: Likewise. * lib/backupfile.c: Likewise. * lib/backupfile.h: Likewise. * lib/basename.c: Likewise. * lib/binary-io.h: Likewise. * lib/byteswap.in.h: Likewise. * lib/c-stack.c: Likewise. * lib/c-stack.h: Likewise. * lib/c-strcasestr.c: Likewise. * lib/c-strcasestr.h: Likewise. * lib/c-strstr.c: Likewise. * lib/c-strstr.h: Likewise. * lib/c-strtod.c: Likewise. * lib/calloc.c: Likewise. * lib/canon-host.c: Likewise. * lib/canon-host.h: Likewise. * lib/canonicalize-lgpl.c: Likewise. * lib/canonicalize.c: Likewise. * lib/canonicalize.h: Likewise. * lib/ceil.c: Likewise. * lib/ceilf.c: Likewise. * lib/ceill.c: Likewise. * lib/chdir-long.c: Likewise. * lib/chdir-long.h: Likewise. * lib/chdir-safer.c: Likewise. * lib/chdir-safer.h: Likewise. * lib/chown.c: Likewise. * lib/classpath.c: Likewise. * lib/classpath.h: Likewise. * lib/clean-temp.c: Likewise. * lib/clean-temp.h: Likewise. * lib/cloexec.c: Likewise. * lib/close-stream.c: Likewise. * lib/closein.c: Likewise. * lib/closein.h: Likewise. * lib/closeout.c: Likewise. * lib/closeout.h: Likewise. * lib/concat-filename.c: Likewise. * lib/copy-file.c: Likewise. * lib/copy-file.h: Likewise. * lib/count-one-bits.h: Likewise. * lib/crc.c: Likewise. * lib/crc.h: Likewise. * lib/creat-safer.c: Likewise. * lib/csharpcomp.c: Likewise. * lib/csharpcomp.h: Likewise. * lib/csharpexec.c: Likewise. * lib/csharpexec.h: Likewise. * lib/cycle-check.c: Likewise. * lib/cycle-check.h: Likewise. * lib/diacrit.c: Likewise. * lib/diacrit.h: Likewise. * lib/diffseq.h: Likewise. * lib/dirchownmod.c: Likewise. * lib/dirent.in.h: Likewise. * lib/dirfd.c: Likewise. * lib/dirfd.h: Likewise. * lib/dirname.c: Likewise. * lib/dirname.h: Likewise. * lib/dummy.c: Likewise. * lib/dup-safer.c: Likewise. * lib/dup2.c: Likewise. * lib/eealloc.h: Likewise. * lib/error.c: Likewise. * lib/error.h: Likewise. * lib/euidaccess.c: Likewise. * lib/exclude.c: Likewise. * lib/exclude.h: Likewise. * lib/execute.c: Likewise. * lib/execute.h: Likewise. * lib/exitfail.c: Likewise. * lib/exitfail.h: Likewise. * lib/expl.c: Likewise. * lib/fatal-signal.c: Likewise. * lib/fatal-signal.h: Likewise. * lib/fbufmode.c: Likewise. * lib/fbufmode.h: Likewise. * lib/fchdir.c: Likewise. * lib/fchmodat.c: Likewise. * lib/fchownat.c: Likewise. * lib/fcntl--.h: Likewise. * lib/fcntl-safer.h: Likewise. * lib/fcntl.in.h: Likewise. * lib/fd-safer.c: Likewise. * lib/fflush.c: Likewise. * lib/file-has-acl.c: Likewise. * lib/file-set.c: Likewise. * lib/file-type.c: Likewise. * lib/file-type.h: Likewise. * lib/fileblocks.c: Likewise. * lib/filemode.c: Likewise. * lib/filemode.h: Likewise. * lib/filename.h: Likewise. * lib/filenamecat.c: Likewise. * lib/filenamecat.h: Likewise. * lib/findprog.c: Likewise. * lib/findprog.h: Likewise. * lib/float.in.h: Likewise. * lib/floor.c: Likewise. * lib/floorf.c: Likewise. * lib/floorl.c: Likewise. * lib/fopen-safer.c: Likewise. * lib/fopen.c: Likewise. * lib/fpending.c: Likewise. * lib/fpending.h: Likewise. * lib/fprintf.c: Likewise. * lib/fprintftime.h: Likewise. * lib/fpucw.h: Likewise. * lib/fpurge.c: Likewise. * lib/fpurge.h: Likewise. * lib/freadable.c: Likewise. * lib/freadable.h: Likewise. * lib/freadahead.c: Likewise. * lib/freadahead.h: Likewise. * lib/freading.c: Likewise. * lib/freading.h: Likewise. * lib/free.c: Likewise. * lib/freopen.c: Likewise. * lib/frexp.c: Likewise. * lib/frexpl.c: Likewise. * lib/fseek.c: Likewise. * lib/fseterr.c: Likewise. * lib/fseterr.h: Likewise. * lib/fstatat.c: Likewise. * lib/fstrcmp.c: Likewise. * lib/fstrcmp.h: Likewise. * lib/fsusage.c: Likewise. * lib/fsusage.h: Likewise. * lib/ftell.c: Likewise. * lib/ftello.c: Likewise. * lib/fts-cycle.c: Likewise. * lib/fts.c: Likewise. * lib/fts_.h: Likewise. * lib/full-read.c: Likewise. * lib/full-read.h: Likewise. * lib/full-write.c: Likewise. * lib/full-write.h: Likewise. * lib/fwritable.c: Likewise. * lib/fwritable.h: Likewise. * lib/fwriteerror.c: Likewise. * lib/fwriteerror.h: Likewise. * lib/fwriting.c: Likewise. * lib/fwriting.h: Likewise. * lib/gcd.c: Likewise. * lib/gcd.h: Likewise. * lib/getcwd.c: Likewise. * lib/getdate.h: Likewise. * lib/getdate.y: Likewise. * lib/getdomainname.c: Likewise. * lib/getdomainname.h: Likewise. * lib/getgroups.c: Likewise. * lib/gethostname.c: Likewise. * lib/gethrxtime.c: Likewise. * lib/gethrxtime.h: Likewise. * lib/getloadavg.c: Likewise. * lib/getndelim2.c: Likewise. * lib/getndelim2.h: Likewise. * lib/getnline.c: Likewise. * lib/getnline.h: Likewise. * lib/getopt.c: Likewise. * lib/getopt.in.h: Likewise. * lib/getopt1.c: Likewise. * lib/getopt_int.h: Likewise. * lib/getpagesize.h: Likewise. * lib/getsubopt.c: Likewise. * lib/gettime.c: Likewise. * lib/getugroups.c: Likewise. * lib/getugroups.h: Likewise. * lib/getusershell.c: Likewise. * lib/gl_anyavltree_list1.h: Likewise. * lib/gl_anyavltree_list2.h: Likewise. * lib/gl_anyhash_list1.h: Likewise. * lib/gl_anyhash_list2.h: Likewise. * lib/gl_anylinked_list1.h: Likewise. * lib/gl_anylinked_list2.h: Likewise. * lib/gl_anyrbtree_list1.h: Likewise. * lib/gl_anyrbtree_list2.h: Likewise. * lib/gl_anytree_list1.h: Likewise. * lib/gl_anytree_list2.h: Likewise. * lib/gl_anytree_oset.h: Likewise. * lib/gl_anytreehash_list1.h: Likewise. * lib/gl_anytreehash_list2.h: Likewise. * lib/gl_array_list.c: Likewise. * lib/gl_array_list.h: Likewise. * lib/gl_array_oset.c: Likewise. * lib/gl_array_oset.h: Likewise. * lib/gl_avltree_list.c: Likewise. * lib/gl_avltree_list.h: Likewise. * lib/gl_avltree_oset.c: Likewise. * lib/gl_avltree_oset.h: Likewise. * lib/gl_avltreehash_list.c: Likewise. * lib/gl_avltreehash_list.h: Likewise. * lib/gl_carray_list.c: Likewise. * lib/gl_carray_list.h: Likewise. * lib/gl_linked_list.c: Likewise. * lib/gl_linked_list.h: Likewise. * lib/gl_linkedhash_list.c: Likewise. * lib/gl_linkedhash_list.h: Likewise. * lib/gl_list.c: Likewise. * lib/gl_list.h: Likewise. * lib/gl_oset.c: Likewise. * lib/gl_oset.h: Likewise. * lib/gl_rbtree_list.c: Likewise. * lib/gl_rbtree_list.h: Likewise. * lib/gl_rbtree_oset.c: Likewise. * lib/gl_rbtree_oset.h: Likewise. * lib/gl_rbtreehash_list.c: Likewise. * lib/gl_rbtreehash_list.h: Likewise. * lib/gl_sublist.c: Likewise. * lib/gl_sublist.h: Likewise. * lib/group-member.c: Likewise. * lib/group-member.h: Likewise. * lib/hard-locale.c: Likewise. * lib/hard-locale.h: Likewise. * lib/hash-pjw.c: Likewise. * lib/hash-pjw.h: Likewise. * lib/hash-triple.c: Likewise. * lib/hash.c: Likewise. * lib/hash.h: Likewise. * lib/human.c: Likewise. * lib/human.h: Likewise. * lib/i-ring.c: Likewise. * lib/i-ring.h: Likewise. * lib/idcache.c: Likewise. * lib/imaxabs.c: Likewise. * lib/imaxdiv.c: Likewise. * lib/inet_pton.c: Likewise. * lib/inet_pton.h: Likewise. * lib/intprops.h: Likewise. * lib/inttostr.c: Likewise. * lib/inttostr.h: Likewise. * lib/inttypes.in.h: Likewise. * lib/isapipe.c: Likewise. * lib/isdir.c: Likewise. * lib/isnan.c: Likewise. * lib/isnan.h: Likewise. * lib/isnanf.c: Likewise. * lib/isnanf.h: Likewise. * lib/isnanl-nolibm.h: Likewise. * lib/isnanl.c: Likewise. * lib/isnanl.h: Likewise. * lib/javacomp.c: Likewise. * lib/javacomp.h: Likewise. * lib/javaexec.c: Likewise. * lib/javaexec.h: Likewise. * lib/javaversion.c: Likewise. * lib/javaversion.h: Likewise. * lib/javaversion.java: Likewise. * lib/lbrkprop.h: Likewise. * lib/lchmod.h: Likewise. * lib/lchown.c: Likewise. * lib/ldexpl.c: Likewise. * lib/linebreak.c: Likewise. * lib/linebreak.h: Likewise. * lib/linebuffer.c: Likewise. * lib/linebuffer.h: Likewise. * lib/locale.in.h: Likewise. * lib/logl.c: Likewise. * lib/long-options.c: Likewise. * lib/long-options.h: Likewise. * lib/lstat.c: Likewise. * lib/lstat.h: Likewise. * lib/math.in.h: Likewise. * lib/mbchar.c: Likewise. * lib/mbchar.h: Likewise. * lib/mbfile.h: Likewise. * lib/mbiter.h: Likewise. * lib/mbscasecmp.c: Likewise. * lib/mbscasestr.c: Likewise. * lib/mbschr.c: Likewise. * lib/mbscspn.c: Likewise. * lib/mbslen.c: Likewise. * lib/mbsncasecmp.c: Likewise. * lib/mbsnlen.c: Likewise. * lib/mbspbrk.c: Likewise. * lib/mbspcasecmp.c: Likewise. * lib/mbsrchr.c: Likewise. * lib/mbssep.c: Likewise. * lib/mbsspn.c: Likewise. * lib/mbsstr.c: Likewise. * lib/mbstok_r.c: Likewise. * lib/mbswidth.c: Likewise. * lib/mbswidth.h: Likewise. * lib/mbuiter.h: Likewise. * lib/memcasecmp.c: Likewise. * lib/memcasecmp.h: Likewise. * lib/memchr.c: Likewise. * lib/memcmp.c: Likewise. * lib/memcoll.c: Likewise. * lib/memcoll.h: Likewise. * lib/memcpy.c: Likewise. * lib/memrchr.c: Likewise. * lib/mkancesdirs.c: Likewise. * lib/mkdir-p.c: Likewise. * lib/mkdir-p.h: Likewise. * lib/mkdir.c: Likewise. * lib/mkdirat.c: Likewise. * lib/mkdtemp.c: Likewise. * lib/mkstemp-safer.c: Likewise. * lib/mkstemp.c: Likewise. * lib/modechange.c: Likewise. * lib/modechange.h: Likewise. * lib/mountlist.c: Likewise. * lib/mountlist.h: Likewise. * lib/mpsort.c: Likewise. * lib/nanosleep.c: Likewise. * lib/obstack.c: Likewise. * lib/obstack.h: Likewise. * lib/open-safer.c: Likewise. * lib/open.c: Likewise. * lib/openat-die.c: Likewise. * lib/openat-priv.h: Likewise. * lib/openat-proc.c: Likewise. * lib/openat.c: Likewise. * lib/openat.h: Likewise. * lib/pagealign_alloc.c: Likewise. * lib/pagealign_alloc.h: Likewise. * lib/physmem.c: Likewise. * lib/physmem.h: Likewise. * lib/pipe-safer.c: Likewise. * lib/pipe.c: Likewise. * lib/pipe.h: Likewise. * lib/posixtm.c: Likewise. * lib/posixtm.h: Likewise. * lib/posixver.c: Likewise. * lib/printf-frexp.c: Likewise. * lib/printf-frexp.h: Likewise. * lib/printf-frexpl.c: Likewise. * lib/printf-frexpl.h: Likewise. * lib/printf.c: Likewise. * lib/progname.c: Likewise. * lib/progname.h: Likewise. * lib/progreloc.c: Likewise. * lib/putenv.c: Likewise. * lib/quote.c: Likewise. * lib/quote.h: Likewise. * lib/quotearg.c: Likewise. * lib/quotearg.h: Likewise. * lib/raise.c: Likewise. * lib/readline.c: Likewise. * lib/readline.h: Likewise. * lib/readlink.c: Likewise. * lib/readtokens.c: Likewise. * lib/readtokens.h: Likewise. * lib/readtokens0.c: Likewise. * lib/readtokens0.h: Likewise. * lib/readutmp.c: Likewise. * lib/readutmp.h: Likewise. * lib/realloc.c: Likewise. * lib/relocwrapper.c: Likewise. * lib/rename-dest-slash.c: Likewise. * lib/rename.c: Likewise. * lib/rmdir.c: Likewise. * lib/rpmatch.c: Likewise. * lib/safe-read.c: Likewise. * lib/safe-read.h: Likewise. * lib/safe-write.c: Likewise. * lib/safe-write.h: Likewise. * lib/same-inode.h: Likewise. * lib/same.c: Likewise. * lib/same.h: Likewise. * lib/save-cwd.c: Likewise. * lib/save-cwd.h: Likewise. * lib/savedir.c: Likewise. * lib/savedir.h: Likewise. * lib/savewd.c: Likewise. * lib/savewd.h: Likewise. * lib/search.in.h: Likewise. * lib/setenv.c: Likewise. * lib/setenv.h: Likewise. * lib/settime.c: Likewise. * lib/sh-quote.c: Likewise. * lib/sh-quote.h: Likewise. * lib/sig2str.c: Likewise. * lib/sig2str.h: Likewise. * lib/signal.in.h: Likewise. * lib/signbitd.c: Likewise. * lib/signbitf.c: Likewise. * lib/signbitl.c: Likewise. * lib/sigprocmask.c: Likewise. * lib/sincosl.c: Likewise. * lib/sleep.c: Likewise. * lib/sprintf.c: Likewise. * lib/sqrtl.c: Likewise. * lib/stat-time.h: Likewise. * lib/stdio--.h: Likewise. * lib/stdio-safer.h: Likewise. * lib/stdlib--.h: Likewise. * lib/stdlib-safer.h: Likewise. * lib/stdlib.in.h: Likewise. * lib/stpcpy.c: Likewise. * lib/stpncpy.c: Likewise. * lib/strchrnul.c: Likewise. * lib/strcspn.c: Likewise. * lib/strerror.c: Likewise. * lib/strftime.c: Likewise. * lib/strftime.h: Likewise. * lib/striconveh.c: Likewise. * lib/striconveh.h: Likewise. * lib/striconveha.c: Likewise. * lib/striconveha.h: Likewise. * lib/stripslash.c: Likewise. * lib/strnlen1.c: Likewise. * lib/strnlen1.h: Likewise. * lib/strtod.c: Likewise. * lib/strtoimax.c: Likewise. * lib/strtok_r.c: Likewise. * lib/strtol.c: Likewise. * lib/strtoll.c: Likewise. * lib/strtoul.c: Likewise. * lib/strtoull.c: Likewise. * lib/sysexits.in.h: Likewise. * lib/tempname.c: Likewise. * lib/tempname.h: Likewise. * lib/timespec.h: Likewise. * lib/tls.c: Likewise. * lib/tls.h: Likewise. * lib/tmpdir.c: Likewise. * lib/tmpdir.h: Likewise. * lib/tmpfile-safer.c: Likewise. * lib/tmpfile.c: Likewise. * lib/trigl.c: Likewise. * lib/trigl.h: Likewise. * lib/trim.c: Likewise. * lib/trim.h: Likewise. * lib/trunc.c: Likewise. * lib/truncf.c: Likewise. * lib/truncl.c: Likewise. * lib/tsearch.c: Likewise. * lib/unicodeio.c: Likewise. * lib/unicodeio.h: Likewise. * lib/unistd--.h: Likewise. * lib/unistd-safer.h: Likewise. * lib/unistdio/ulc-fprintf.c: Likewise. * lib/unistdio/ulc-vfprintf.c: Likewise. * lib/unlinkdir.c: Likewise. * lib/unlinkdir.h: Likewise. * lib/unlocked-io.h: Likewise. * lib/unsetenv.c: Likewise. * lib/userspec.c: Likewise. * lib/utime.c: Likewise. * lib/utimecmp.c: Likewise. * lib/utimecmp.h: Likewise. * lib/utimens.c: Likewise. * lib/verify.h: Likewise. * lib/verror.c: Likewise. * lib/verror.h: Likewise. * lib/version-etc-fsf.c: Likewise. * lib/version-etc.c: Likewise. * lib/version-etc.h: Likewise. * lib/vfprintf.c: Likewise. * lib/vprintf.c: Likewise. * lib/vsprintf.c: Likewise. * lib/w32spawn.h: Likewise. * lib/wait-process.c: Likewise. * lib/wait-process.h: Likewise. * lib/wcwidth.c: Likewise. * lib/write-any-file.c: Likewise. * lib/xalloc-die.c: Likewise. * lib/xalloc.h: Likewise. * lib/xasprintf.c: Likewise. * lib/xgetcwd.c: Likewise. * lib/xgetcwd.h: Likewise. * lib/xgetdomainname.c: Likewise. * lib/xgetdomainname.h: Likewise. * lib/xgethostname.c: Likewise. * lib/xmalloc.c: Likewise. * lib/xmalloca.c: Likewise. * lib/xmalloca.h: Likewise. * lib/xmemcoll.c: Likewise. * lib/xnanosleep.c: Likewise. * lib/xreadlink.c: Likewise. * lib/xreadlink.h: Likewise. * lib/xsetenv.c: Likewise. * lib/xsetenv.h: Likewise. * lib/xstriconv.c: Likewise. * lib/xstriconv.h: Likewise. * lib/xstrndup.c: Likewise. * lib/xstrndup.h: Likewise. * lib/xstrtod.c: Likewise. * lib/xstrtod.h: Likewise. * lib/xstrtol-error.c: Likewise. * lib/xstrtol.c: Likewise. * lib/xstrtol.h: Likewise. * lib/xtime.h: Likewise. * lib/xvasprintf.c: Likewise. * lib/xvasprintf.h: Likewise. * lib/yesno.c: Likewise. * lib/yesno.h: Likewise. * posix-modules: Likewise. * tests/test-alloca-opt.c: Likewise. * tests/test-arcfour.c: Likewise. * tests/test-arctwo.c: Likewise. * tests/test-argmatch.c: Likewise. * tests/test-argp-2.sh: Likewise. * tests/test-argp.c: Likewise. * tests/test-arpa_inet.c: Likewise. * tests/test-array_list.c: Likewise. * tests/test-array_oset.c: Likewise. * tests/test-atexit.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-avltree_oset.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-base64.c: Likewise. * tests/test-binary-io.c: Likewise. * tests/test-byteswap.c: Likewise. * tests/test-c-ctype.c: Likewise. * tests/test-c-strcasecmp.c: Likewise. * tests/test-c-strcasestr.c: Likewise. * tests/test-c-strncasecmp.c: Likewise. * tests/test-c-strstr.c: Likewise. * tests/test-canonicalize-lgpl.c: Likewise. * tests/test-canonicalize.c: Likewise. * tests/test-carray_list.c: Likewise. * tests/test-ceilf.c: Likewise. * tests/test-ceill.c: Likewise. * tests/test-count-one-bits.c: Likewise. * tests/test-crc.c: Likewise. * tests/test-dirname.c: Likewise. * tests/test-fbufmode.c: Likewise. * tests/test-fcntl.c: Likewise. * tests/test-fflush.c: Likewise. * tests/test-floorf.c: Likewise. * tests/test-floorl.c: Likewise. * tests/test-fopen.c: Likewise. * tests/test-fprintf-posix.c: Likewise. * tests/test-fprintf-posix.h: Likewise. * tests/test-fpurge.c: Likewise. * tests/test-freadable.c: Likewise. * tests/test-freadahead.c: Likewise. * tests/test-freading.c: Likewise. * tests/test-freopen.c: Likewise. * tests/test-frexp.c: Likewise. * tests/test-frexpl.c: Likewise. * tests/test-fseek.c: Likewise. * tests/test-fseeko.c: Likewise. * tests/test-fseterr.c: Likewise. * tests/test-fstrcmp.c: Likewise. * tests/test-ftell.c: Likewise. * tests/test-ftello.c: Likewise. * tests/test-fwritable.c: Likewise. * tests/test-fwriting.c: Likewise. * tests/test-getaddrinfo.c: Likewise. * tests/test-getpass.c: Likewise. * tests/test-gettimeofday.c: Likewise. * tests/test-hmac-md5.c: Likewise. * tests/test-hmac-sha1.c: Likewise. * tests/test-iconv.c: Likewise. * tests/test-iconvme.c: Likewise. * tests/test-inttypes.c: Likewise. * tests/test-isnan.c: Likewise. * tests/test-isnanf.c: Likewise. * tests/test-isnanl-nolibm.c: Likewise. * tests/test-isnanl.c: Likewise. * tests/test-isnanl.h: Likewise. * tests/test-ldexpl.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-locale.c: Likewise. * tests/test-localename.c: Likewise. * tests/test-lock.c: Likewise. * tests/test-lseek.c: Likewise. * tests/test-malloca.c: Likewise. * tests/test-math.c: Likewise. * tests/test-mbscasecmp.c: Likewise. * tests/test-mbscasestr1.c: Likewise. * tests/test-mbscasestr2.c: Likewise. * tests/test-mbscasestr3.c: Likewise. * tests/test-mbscasestr4.c: Likewise. * tests/test-mbschr.c: Likewise. * tests/test-mbscspn.c: Likewise. * tests/test-mbsncasecmp.c: Likewise. * tests/test-mbspbrk.c: Likewise. * tests/test-mbspcasecmp.c: Likewise. * tests/test-mbsrchr.c: Likewise. * tests/test-mbsspn.c: Likewise. * tests/test-mbsstr1.c: Likewise. * tests/test-mbsstr2.c: Likewise. * tests/test-mbsstr3.c: Likewise. * tests/test-md5.c: Likewise. * tests/test-memmem.c: Likewise. * tests/test-netinet_in.c: Likewise. * tests/test-open.c: Likewise. * tests/test-printf-frexp.c: Likewise. * tests/test-printf-frexpl.c: Likewise. * tests/test-printf-posix.c: Likewise. * tests/test-printf-posix.h: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-rbtree_oset.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. * tests/test-read-file.c: Likewise. * tests/test-rijndael.c: Likewise. * tests/test-search.c: Likewise. * tests/test-signbit.c: Likewise. * tests/test-sleep.c: Likewise. * tests/test-snprintf-posix.c: Likewise. * tests/test-snprintf-posix.h: Likewise. * tests/test-snprintf.c: Likewise. * tests/test-sprintf-posix.c: Likewise. * tests/test-sprintf-posix.h: Likewise. * tests/test-stat-time.c: Likewise. * tests/test-stdbool.c: Likewise. * tests/test-stdint.c: Likewise. * tests/test-stdio.c: Likewise. * tests/test-stdlib.c: Likewise. * tests/test-stpncpy.c: Likewise. * tests/test-strcasestr.c: Likewise. * tests/test-striconv.c: Likewise. * tests/test-striconveh.c: Likewise. * tests/test-striconveha.c: Likewise. * tests/test-string.c: Likewise. * tests/test-sys_select.c: Likewise. * tests/test-sys_socket.c: Likewise. * tests/test-sys_stat.c: Likewise. * tests/test-sys_time.c: Likewise. * tests/test-sysexits.c: Likewise. * tests/test-time.c: Likewise. * tests/test-tls.c: Likewise. * tests/test-trunc.c: Likewise. * tests/test-truncf.c: Likewise. * tests/test-truncl.c: Likewise. * tests/test-unistd.c: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasnprintf-posix2.c: Likewise. * tests/test-vasnprintf.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. * tests/test-vasprintf.c: Likewise. * tests/test-verify.c: Likewise. * tests/test-vfprintf-posix.c: Likewise. * tests/test-vprintf-posix.c: Likewise. * tests/test-vsnprintf-posix.c: Likewise. * tests/test-vsnprintf.c: Likewise. * tests/test-vsprintf-posix.c: Likewise. * tests/test-wchar.c: Likewise. * tests/test-wctype.c: Likewise. * tests/test-wcwidth.c: Likewise. * tests/test-xstrtol.c: Likewise. * tests/test-xvasprintf.c: Likewise. * tests/uniconv/test-u16-conv-from-enc.c: Likewise. * tests/uniconv/test-u16-conv-to-enc.c: Likewise. * tests/uniconv/test-u16-strconv-from-enc.c: Likewise. * tests/uniconv/test-u16-strconv-to-enc.c: Likewise. * tests/uniconv/test-u32-conv-from-enc.c: Likewise. * tests/uniconv/test-u32-conv-to-enc.c: Likewise. * tests/uniconv/test-u32-strconv-from-enc.c: Likewise. * tests/uniconv/test-u32-strconv-to-enc.c: Likewise. * tests/uniconv/test-u8-conv-from-enc.c: Likewise. * tests/uniconv/test-u8-conv-to-enc.c: Likewise. * tests/uniconv/test-u8-strconv-from-enc.c: Likewise. * tests/uniconv/test-u8-strconv-to-enc.c: Likewise. * tests/uniname/test-uninames.c: Likewise. * tests/unistdio/test-u16-asnprintf1.c: Likewise. * tests/unistdio/test-u16-asnprintf1.h: Likewise. * tests/unistdio/test-u16-printf1.h: Likewise. * tests/unistdio/test-u16-vasnprintf1.c: Likewise. * tests/unistdio/test-u16-vasnprintf2.c: Likewise. * tests/unistdio/test-u16-vasnprintf3.c: Likewise. * tests/unistdio/test-u16-vasprintf1.c: Likewise. * tests/unistdio/test-u16-vsnprintf1.c: Likewise. * tests/unistdio/test-u16-vsprintf1.c: Likewise. * tests/unistdio/test-u32-asnprintf1.c: Likewise. * tests/unistdio/test-u32-asnprintf1.h: Likewise. * tests/unistdio/test-u32-printf1.h: Likewise. * tests/unistdio/test-u32-vasnprintf1.c: Likewise. * tests/unistdio/test-u32-vasnprintf2.c: Likewise. * tests/unistdio/test-u32-vasnprintf3.c: Likewise. * tests/unistdio/test-u32-vasprintf1.c: Likewise. * tests/unistdio/test-u32-vsnprintf1.c: Likewise. * tests/unistdio/test-u32-vsprintf1.c: Likewise. * tests/unistdio/test-u8-asnprintf1.c: Likewise. * tests/unistdio/test-u8-asnprintf1.h: Likewise. * tests/unistdio/test-u8-printf1.h: Likewise. * tests/unistdio/test-u8-vasnprintf1.c: Likewise. * tests/unistdio/test-u8-vasnprintf2.c: Likewise. * tests/unistdio/test-u8-vasnprintf3.c: Likewise. * tests/unistdio/test-u8-vasprintf1.c: Likewise. * tests/unistdio/test-u8-vsnprintf1.c: Likewise. * tests/unistdio/test-u8-vsprintf1.c: Likewise. * tests/unistdio/test-ulc-asnprintf1.c: Likewise. * tests/unistdio/test-ulc-asnprintf1.h: Likewise. * tests/unistdio/test-ulc-printf1.h: Likewise. * tests/unistdio/test-ulc-vasnprintf1.c: Likewise. * tests/unistdio/test-ulc-vasnprintf2.c: Likewise. * tests/unistdio/test-ulc-vasnprintf3.c: Likewise. * tests/unistdio/test-ulc-vasprintf1.c: Likewise. * tests/unistdio/test-ulc-vsnprintf1.c: Likewise. * tests/unistdio/test-ulc-vsprintf1.c: Likewise. * tests/uniwidth/test-u16-strwidth.c: Likewise. * tests/uniwidth/test-u16-width.c: Likewise. * tests/uniwidth/test-u32-strwidth.c: Likewise. * tests/uniwidth/test-u32-width.c: Likewise. * tests/uniwidth/test-u8-strwidth.c: Likewise. * tests/uniwidth/test-u8-width.c: Likewise. * tests/uniwidth/test-uc_width.c: Likewise. * config/srclist-update: Likewise. (fixlicense): Update to GPLv3+. Change copyright notice from LGPLv2.1+ to LGPLv3+. * tests/test-tsearch.c: Change copyright notice. Change copyright notice from LGPLv2.0+ to LGPLv3+. * lib/c-strcaseeq.h: Change copyright notice. * lib/streq.h: Likewise. * lib/uniconv.h: Likewise. * lib/uniconv/u-conv-from-enc.h: Likewise. * lib/uniconv/u-conv-to-enc.h: Likewise. * lib/uniconv/u-strconv-from-enc.h: Likewise. * lib/uniconv/u-strconv-to-enc.h: Likewise. * lib/uniconv/u16-conv-from-enc.c: Likewise. * lib/uniconv/u16-conv-to-enc.c: Likewise. * lib/uniconv/u16-strconv-from-enc.c: Likewise. * lib/uniconv/u16-strconv-from-locale.c: Likewise. * lib/uniconv/u16-strconv-to-enc.c: Likewise. * lib/uniconv/u16-strconv-to-locale.c: Likewise. * lib/uniconv/u32-conv-from-enc.c: Likewise. * lib/uniconv/u32-conv-to-enc.c: Likewise. * lib/uniconv/u32-strconv-from-enc.c: Likewise. * lib/uniconv/u32-strconv-from-locale.c: Likewise. * lib/uniconv/u32-strconv-to-enc.c: Likewise. * lib/uniconv/u32-strconv-to-locale.c: Likewise. * lib/uniconv/u8-conv-from-enc.c: Likewise. * lib/uniconv/u8-conv-to-enc.c: Likewise. * lib/uniconv/u8-strconv-from-enc.c: Likewise. * lib/uniconv/u8-strconv-from-locale.c: Likewise. * lib/uniconv/u8-strconv-to-enc.c: Likewise. * lib/uniconv/u8-strconv-to-locale.c: Likewise. * lib/uniname.h: Likewise. * lib/uniname/uniname.c: Likewise. * lib/unistdio.h: Likewise. * lib/unistdio/u-asnprintf.h: Likewise. * lib/unistdio/u-asprintf.h: Likewise. * lib/unistdio/u-printf-args.c: Likewise. * lib/unistdio/u-printf-args.h: Likewise. * lib/unistdio/u-printf-parse.h: Likewise. * lib/unistdio/u-snprintf.h: Likewise. * lib/unistdio/u-sprintf.h: Likewise. * lib/unistdio/u-vasprintf.h: Likewise. * lib/unistdio/u-vsnprintf.h: Likewise. * lib/unistdio/u-vsprintf.h: Likewise. * lib/unistdio/u16-asnprintf.c: Likewise. * lib/unistdio/u16-asprintf.c: Likewise. * lib/unistdio/u16-printf-parse.c: Likewise. * lib/unistdio/u16-snprintf.c: Likewise. * lib/unistdio/u16-sprintf.c: Likewise. * lib/unistdio/u16-u16-asnprintf.c: Likewise. * lib/unistdio/u16-u16-asprintf.c: Likewise. * lib/unistdio/u16-u16-snprintf.c: Likewise. * lib/unistdio/u16-u16-sprintf.c: Likewise. * lib/unistdio/u16-u16-vasnprintf.c: Likewise. * lib/unistdio/u16-u16-vasprintf.c: Likewise. * lib/unistdio/u16-u16-vsnprintf.c: Likewise. * lib/unistdio/u16-u16-vsprintf.c: Likewise. * lib/unistdio/u16-vasnprintf.c: Likewise. * lib/unistdio/u16-vasprintf.c: Likewise. * lib/unistdio/u16-vsnprintf.c: Likewise. * lib/unistdio/u16-vsprintf.c: Likewise. * lib/unistdio/u32-asnprintf.c: Likewise. * lib/unistdio/u32-asprintf.c: Likewise. * lib/unistdio/u32-printf-parse.c: Likewise. * lib/unistdio/u32-snprintf.c: Likewise. * lib/unistdio/u32-sprintf.c: Likewise. * lib/unistdio/u32-u32-asnprintf.c: Likewise. * lib/unistdio/u32-u32-asprintf.c: Likewise. * lib/unistdio/u32-u32-snprintf.c: Likewise. * lib/unistdio/u32-u32-sprintf.c: Likewise. * lib/unistdio/u32-u32-vasnprintf.c: Likewise. * lib/unistdio/u32-u32-vasprintf.c: Likewise. * lib/unistdio/u32-u32-vsnprintf.c: Likewise. * lib/unistdio/u32-u32-vsprintf.c: Likewise. * lib/unistdio/u32-vasnprintf.c: Likewise. * lib/unistdio/u32-vasprintf.c: Likewise. * lib/unistdio/u32-vsnprintf.c: Likewise. * lib/unistdio/u32-vsprintf.c: Likewise. * lib/unistdio/u8-asnprintf.c: Likewise. * lib/unistdio/u8-asprintf.c: Likewise. * lib/unistdio/u8-printf-parse.c: Likewise. * lib/unistdio/u8-snprintf.c: Likewise. * lib/unistdio/u8-sprintf.c: Likewise. * lib/unistdio/u8-u8-asnprintf.c: Likewise. * lib/unistdio/u8-u8-asprintf.c: Likewise. * lib/unistdio/u8-u8-snprintf.c: Likewise. * lib/unistdio/u8-u8-sprintf.c: Likewise. * lib/unistdio/u8-u8-vasnprintf.c: Likewise. * lib/unistdio/u8-u8-vasprintf.c: Likewise. * lib/unistdio/u8-u8-vsnprintf.c: Likewise. * lib/unistdio/u8-u8-vsprintf.c: Likewise. * lib/unistdio/u8-vasnprintf.c: Likewise. * lib/unistdio/u8-vasprintf.c: Likewise. * lib/unistdio/u8-vsnprintf.c: Likewise. * lib/unistdio/u8-vsprintf.c: Likewise. * lib/unistdio/ulc-asnprintf.c: Likewise. * lib/unistdio/ulc-asprintf.c: Likewise. * lib/unistdio/ulc-printf-parse.c: Likewise. * lib/unistdio/ulc-snprintf.c: Likewise. * lib/unistdio/ulc-sprintf.c: Likewise. * lib/unistdio/ulc-vasnprintf.c: Likewise. * lib/unistdio/ulc-vasprintf.c: Likewise. * lib/unistdio/ulc-vsnprintf.c: Likewise. * lib/unistdio/ulc-vsprintf.c: Likewise. * lib/unistr.h: Likewise. * lib/unistr/u-cpy-alloc.h: Likewise. * lib/unistr/u-cpy.h: Likewise. * lib/unistr/u-endswith.h: Likewise. * lib/unistr/u-move.h: Likewise. * lib/unistr/u-set.h: Likewise. * lib/unistr/u-startswith.h: Likewise. * lib/unistr/u-stpcpy.h: Likewise. * lib/unistr/u-stpncpy.h: Likewise. * lib/unistr/u-strcat.h: Likewise. * lib/unistr/u-strcpy.h: Likewise. * lib/unistr/u-strcspn.h: Likewise. * lib/unistr/u-strdup.h: Likewise. * lib/unistr/u-strlen.h: Likewise. * lib/unistr/u-strncat.h: Likewise. * lib/unistr/u-strncpy.h: Likewise. * lib/unistr/u-strnlen.h: Likewise. * lib/unistr/u-strpbrk.h: Likewise. * lib/unistr/u-strspn.h: Likewise. * lib/unistr/u-strstr.h: Likewise. * lib/unistr/u-strtok.h: Likewise. * lib/unistr/u16-check.c: Likewise. * lib/unistr/u16-chr.c: Likewise. * lib/unistr/u16-cmp.c: Likewise. * lib/unistr/u16-cpy-alloc.c: Likewise. * lib/unistr/u16-cpy.c: Likewise. * lib/unistr/u16-endswith.c: Likewise. * lib/unistr/u16-mblen.c: Likewise. * lib/unistr/u16-mbsnlen.c: Likewise. * lib/unistr/u16-mbtouc-aux.c: Likewise. * lib/unistr/u16-mbtouc-unsafe-aux.c: Likewise. * lib/unistr/u16-mbtouc-unsafe.c: Likewise. * lib/unistr/u16-mbtouc.c: Likewise. * lib/unistr/u16-mbtoucr.c: Likewise. * lib/unistr/u16-move.c: Likewise. * lib/unistr/u16-next.c: Likewise. * lib/unistr/u16-prev.c: Likewise. * lib/unistr/u16-set.c: Likewise. * lib/unistr/u16-startswith.c: Likewise. * lib/unistr/u16-stpcpy.c: Likewise. * lib/unistr/u16-stpncpy.c: Likewise. * lib/unistr/u16-strcat.c: Likewise. * lib/unistr/u16-strchr.c: Likewise. * lib/unistr/u16-strcmp.c: Likewise. * lib/unistr/u16-strcpy.c: Likewise. * lib/unistr/u16-strcspn.c: Likewise. * lib/unistr/u16-strdup.c: Likewise. * lib/unistr/u16-strlen.c: Likewise. * lib/unistr/u16-strmblen.c: Likewise. * lib/unistr/u16-strmbtouc.c: Likewise. * lib/unistr/u16-strncat.c: Likewise. * lib/unistr/u16-strncmp.c: Likewise. * lib/unistr/u16-strncpy.c: Likewise. * lib/unistr/u16-strnlen.c: Likewise. * lib/unistr/u16-strpbrk.c: Likewise. * lib/unistr/u16-strrchr.c: Likewise. * lib/unistr/u16-strspn.c: Likewise. * lib/unistr/u16-strstr.c: Likewise. * lib/unistr/u16-strtok.c: Likewise. * lib/unistr/u16-to-u32.c: Likewise. * lib/unistr/u16-to-u8.c: Likewise. * lib/unistr/u16-uctomb-aux.c: Likewise. * lib/unistr/u16-uctomb.c: Likewise. * lib/unistr/u32-check.c: Likewise. * lib/unistr/u32-chr.c: Likewise. * lib/unistr/u32-cmp.c: Likewise. * lib/unistr/u32-cpy-alloc.c: Likewise. * lib/unistr/u32-cpy.c: Likewise. * lib/unistr/u32-endswith.c: Likewise. * lib/unistr/u32-mblen.c: Likewise. * lib/unistr/u32-mbsnlen.c: Likewise. * lib/unistr/u32-mbtouc-unsafe.c: Likewise. * lib/unistr/u32-mbtouc.c: Likewise. * lib/unistr/u32-mbtoucr.c: Likewise. * lib/unistr/u32-move.c: Likewise. * lib/unistr/u32-next.c: Likewise. * lib/unistr/u32-prev.c: Likewise. * lib/unistr/u32-set.c: Likewise. * lib/unistr/u32-startswith.c: Likewise. * lib/unistr/u32-stpcpy.c: Likewise. * lib/unistr/u32-stpncpy.c: Likewise. * lib/unistr/u32-strcat.c: Likewise. * lib/unistr/u32-strchr.c: Likewise. * lib/unistr/u32-strcmp.c: Likewise. * lib/unistr/u32-strcpy.c: Likewise. * lib/unistr/u32-strcspn.c: Likewise. * lib/unistr/u32-strdup.c: Likewise. * lib/unistr/u32-strlen.c: Likewise. * lib/unistr/u32-strmblen.c: Likewise. * lib/unistr/u32-strmbtouc.c: Likewise. * lib/unistr/u32-strncat.c: Likewise. * lib/unistr/u32-strncmp.c: Likewise. * lib/unistr/u32-strncpy.c: Likewise. * lib/unistr/u32-strnlen.c: Likewise. * lib/unistr/u32-strpbrk.c: Likewise. * lib/unistr/u32-strrchr.c: Likewise. * lib/unistr/u32-strspn.c: Likewise. * lib/unistr/u32-strstr.c: Likewise. * lib/unistr/u32-strtok.c: Likewise. * lib/unistr/u32-to-u16.c: Likewise. * lib/unistr/u32-to-u8.c: Likewise. * lib/unistr/u32-uctomb.c: Likewise. * lib/unistr/u8-check.c: Likewise. * lib/unistr/u8-chr.c: Likewise. * lib/unistr/u8-cmp.c: Likewise. * lib/unistr/u8-cpy-alloc.c: Likewise. * lib/unistr/u8-cpy.c: Likewise. * lib/unistr/u8-endswith.c: Likewise. * lib/unistr/u8-mblen.c: Likewise. * lib/unistr/u8-mbsnlen.c: Likewise. * lib/unistr/u8-mbtouc-aux.c: Likewise. * lib/unistr/u8-mbtouc-unsafe-aux.c: Likewise. * lib/unistr/u8-mbtouc-unsafe.c: Likewise. * lib/unistr/u8-mbtouc.c: Likewise. * lib/unistr/u8-mbtoucr.c: Likewise. * lib/unistr/u8-move.c: Likewise. * lib/unistr/u8-next.c: Likewise. * lib/unistr/u8-prev.c: Likewise. * lib/unistr/u8-set.c: Likewise. * lib/unistr/u8-startswith.c: Likewise. * lib/unistr/u8-stpcpy.c: Likewise. * lib/unistr/u8-stpncpy.c: Likewise. * lib/unistr/u8-strcat.c: Likewise. * lib/unistr/u8-strchr.c: Likewise. * lib/unistr/u8-strcmp.c: Likewise. * lib/unistr/u8-strcpy.c: Likewise. * lib/unistr/u8-strcspn.c: Likewise. * lib/unistr/u8-strdup.c: Likewise. * lib/unistr/u8-strlen.c: Likewise. * lib/unistr/u8-strmblen.c: Likewise. * lib/unistr/u8-strmbtouc.c: Likewise. * lib/unistr/u8-strncat.c: Likewise. * lib/unistr/u8-strncmp.c: Likewise. * lib/unistr/u8-strncpy.c: Likewise. * lib/unistr/u8-strnlen.c: Likewise. * lib/unistr/u8-strpbrk.c: Likewise. * lib/unistr/u8-strrchr.c: Likewise. * lib/unistr/u8-strspn.c: Likewise. * lib/unistr/u8-strstr.c: Likewise. * lib/unistr/u8-strtok.c: Likewise. * lib/unistr/u8-to-u16.c: Likewise. * lib/unistr/u8-to-u32.c: Likewise. * lib/unistr/u8-uctomb-aux.c: Likewise. * lib/unistr/u8-uctomb.c: Likewise. * lib/unitypes.h: Likewise. * lib/uniwidth.h: Likewise. * lib/uniwidth/cjk.h: Likewise. * lib/uniwidth/u16-strwidth.c: Likewise. * lib/uniwidth/u16-width.c: Likewise. * lib/uniwidth/u32-strwidth.c: Likewise. * lib/uniwidth/u32-width.c: Likewise. * lib/uniwidth/u8-strwidth.c: Likewise. * lib/uniwidth/u8-width.c: Likewise. * lib/uniwidth/width.c: Likewise. 2007-10-07 Bruno Haible * lib/inttypes.in.h: Change copyright notice from LGPL to GPL. The file is still under LGPL (see modules/inttypes). 2007-10-06 Bruno Haible * modules/trunc (Dependencies): Add 'extensions'. * m4/trunc.m4 (gl_FUNC_TRUNC): Require gl_USE_SYSTEM_EXTENSIONS. Reported by Ben Pfaff . 2007-10-06 Bruno Haible * modules/freopen-tests: New file. * tests/test-freopen.c: New file. * modules/fopen-tests: New file. * tests/test-fopen.c: New file. * modules/fopen: New file. * lib/fopen.c: New file. * m4/fopen.m4: New file. * modules/freopen: New file. * lib/freopen.c: New file. * m4/freopen.m4: New file. * lib/stdio.in.h (fopen, freopen): New declarations. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Initialize also GNULIB_FOPEN, GNULIB_FREOPEN, REPLACE_FOPEN, REPLACE_FREOPEN. * modules/stdio (Makefile.am): Substitute also GNULIB_FOPEN, GNULIB_FREOPEN, REPLACE_FOPEN, REPLACE_FREOPEN. * doc/functions/fopen.texi: Mention the 'fopen' module. * doc/functions/freopen.texi: Mention the 'freopen' module. 2007-10-06 Bruno Haible * modules/open-tests: New file. * tests/test-open.c: New file. * modules/open: New file. * lib/open.c: New file. * m4/open.m4: New file. * lib/fchdir.c (open): If the gnulib module 'open' is used, do what lib/open.c does. * lib/fcntl.in.h (open): Declare also if replaced by the 'open' module. * m4/fcntl_h.m4 (gl_FCNTL_MODULE_INDICATOR, gl_FCNTL_H_DEFAULTS): New macros. (gl_FCNTL_H): Require gl_FCNTL_H_DEFAULTS. * modules/fcntl (Makefile.am): Also substitute GNULIB_OPEN and REPLACE_OPEN. * doc/functions/open.texi: Mention the 'open' module. 2007-10-04 Bruno Haible * modules/ceill-tests: New file. * tests/test-ceill.c: New file. * modules/ceill: New file. * lib/ceill.c: Replace entire file. * m4/ceill.m4: New file. * lib/math.in.h (ceill): Replace declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_CEILL. * modules/math (Makefile.am): Substitute also GNULIB_CEILL. * doc/functions/ceill.texi: Mention the 'ceill' module. * modules/mathl (Files): Remove lib/ceill.c. (Depends-on): Add ceill. 2007-10-04 Bruno Haible * modules/ceilf-tests: New file. * tests/test-ceilf.c: New file. * modules/ceilf: New file. * lib/ceil.c: New file. * lib/ceilf.c: New file. * m4/ceilf.m4: New file. * lib/math.in.h (ceilf): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_CEILF and HAVE_DECL_CEILF. * modules/math (Makefile.am): Substitute also GNULIB_CEILF and HAVE_DECL_CEILF. * doc/functions/ceilf.texi: Mention the 'ceilf' module. 2007-10-04 Bruno Haible * modules/floorl-tests: New file. * tests/test-floorl.c: New file. * modules/floorl: New file. * lib/floorl.c: Replace entire file. * m4/floorl.m4: New file. * lib/math.in.h (floorl): Replace declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_FLOORL. * modules/math (Makefile.am): Substitute also GNULIB_FLOORL. * doc/functions/floorl.texi: Mention the 'floorl' module. * modules/mathl (Files): Remove lib/floorl.c. (Depends-on): Add floorl. 2007-10-04 Bruno Haible * modules/floorf-tests: New file. * tests/test-floorf.c: New file. * modules/floorf: New file. * lib/floor.c: New file. * lib/floorf.c: New file. * m4/floorf.m4: New file. * lib/math.in.h (floorf): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_FLOORF and HAVE_DECL_FLOORF. * modules/math (Makefile.am): Substitute also GNULIB_FLOORF and HAVE_DECL_FLOORF. * doc/functions/floorf.texi: Mention the 'floorf' module. 2007-10-04 Benoit Sigoure Bruno Haible Advertise for the Git server instead of the CVS server. * doc/gnulib-intro.texi (Steady Development): Mention the Git repository instead of the CVS one. * doc/gnulib-tool.texi (VCS Issues): Renamed from "CVS Issues". Talk about all VCS systems generically. * doc/gnulib.texi (Introduction): Capitalize `Git'. 2007-10-04 Bruno Haible * doc/gnulib.texi (Function Substitutes): Explain what an absent module means. Reported by Benoît Sigoure . 2007-10-04 Bruno Haible * modules/truncl-tests: New file. * tests/test-truncl.c: New file. * modules/truncl: New file. * lib/truncl.c: New file. * m4/truncl.m4: New file. * lib/math.in.h (truncl): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_TRUNCL and HAVE_DECL_TRUNCL. * modules/math (Makefile.am): Substitute also GNULIB_TRUNCL and HAVE_DECL_TRUNCL. * doc/functions/truncl.texi: Mention the 'truncl' module. 2007-10-04 Bruno Haible * modules/truncf-tests: New file. * tests/test-truncf.c: New file. * modules/truncf: New file. * lib/trunc.c: Make paramerizable through USE_* macros. * lib/truncf.c: New file. * m4/truncf.m4: New file. * lib/math.in.h (truncf): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_TRUNCF and HAVE_DECL_TRUNCF. * modules/math (Makefile.am): Substitute also GNULIB_TRUNCF and HAVE_DECL_TRUNCF. * doc/functions/truncf.texi: Mention the 'truncf' module. 2007-10-03 Bruno Haible * gnulib-tool (func_get_automake_snippet): Synthesize an EXTRA_DIST augmentation also for tests modules. * modules/argp-tests (Makefile.am): Remove EXTRA_DIST augmentation. * modules/atexit-tests (Makefile.am): Likewise. * modules/binary-io-tests (Makefile.am): Likewise. * modules/c-strcase-tests (Makefile.am): Likewise. * modules/canonicalize-lgpl-tests (Makefile.am): Likewise. * modules/canonicalize-tests (Makefile.am): Likewise. * modules/closein-tests (Makefile.am): Likewise. * modules/fprintf-posix-tests (Makefile.am): Likewise. * modules/freadahead-tests (Makefile.am): Likewise. * modules/fseek-tests (Makefile.am): Likewise. * modules/fseeko-tests (Makefile.am): Likewise. * modules/ftell-tests (Makefile.am): Likewise. * modules/ftello-tests (Makefile.am): Likewise. * modules/isnanl-nolibm-tests (Makefile.am): Likewise. * modules/isnanl-tests (Makefile.am): Likewise. * modules/lseek-tests (Makefile.am): Likewise. * modules/mbscasecmp-tests (Makefile.am): Likewise. * modules/mbscasestr-tests (Makefile.am): Likewise. * modules/mbschr-tests (Makefile.am): Likewise. * modules/mbscspn-tests (Makefile.am): Likewise. * modules/mbsncasecmp-tests (Makefile.am): Likewise. * modules/mbspbrk-tests (Makefile.am): Likewise. * modules/mbspcasecmp-tests (Makefile.am): Likewise. * modules/mbsrchr-tests (Makefile.am): Likewise. * modules/mbsspn-tests (Makefile.am): Likewise. * modules/mbsstr-tests (Makefile.am): Likewise. * modules/printf-posix-tests (Makefile.am): Likewise. * modules/snprintf-posix-tests (Makefile.am): Likewise. * modules/sprintf-posix-tests (Makefile.am): Likewise. * modules/tsearch-tests (Makefile.am): Likewise. * modules/uniname/uniname-tests (Makefile.am): Likewise. * modules/unistdio/u16-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u32-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/u8-vasnprintf-tests (Makefile.am): Likewise. * modules/unistdio/ulc-vasnprintf-tests (Makefile.am): Likewise. * modules/vasnprintf-posix-tests (Makefile.am): Likewise. * modules/vfprintf-posix-tests (Makefile.am): Likewise. * modules/vprintf-posix-tests (Makefile.am): Likewise. * modules/vsnprintf-posix-tests (Makefile.am): Likewise. * modules/vsprintf-posix-tests (Makefile.am): Likewise. * modules/xstrtoimax-tests (Makefile.am): Likewise. * modules/xstrtol-tests (Makefile.am): Likewise. * modules/xstrtoumax-tests (Makefile.am): Likewise. * modules/yesno-tests (Makefile.am): Likewise. 2007-10-03 Bruno Haible * modules/trunc-tests: New file. * tests/test-trunc.c: New file. * modules/trunc: New file. * lib/trunc.c: New file. * m4/trunc.m4: New file. * lib/math.in.h (trunc): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_TRUNC and HAVE_DECL_TRUNC. * modules/math (Makefile.am): Substitute also GNULIB_TRUNC and HAVE_DECL_TRUNC. * doc/functions/trunc.texi: Mention the 'trunc' module. 2007-10-03 Bruno Haible * tests/test-fpending.c: New file, mostly copied from coreutils/lib/t-fpending.c. * modules/fpending-tests: New file. 2007-10-03 Bruno Haible Port the stdio extensions to QNX (untested). * lib/fseterr.c (fseterr): Add support for QNX. * lib/fbufmode.c (fbufmode): Likewise. * lib/freadable.c (freadable): Likewise. * lib/fwritable.c (fwritable): Likewise. * lib/freading.c (freading): Likewise. * lib/fwriting.c (fwriting): Likewise. * lib/freadahead.c (freadahed): Likewise. * lib/fpurge.c (fpurge): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. 2007-10-03 Bruno Haible Jim Meyering Eric Blake * doc/relocatable.texi: Use @command instead of @program. 2007-10-02 Jim Meyering Perform one more "_.h" -> ".in.h" substitution. * modules/unistd (Makefile.am) [unistd.h]: Use unistd.h.in instead of unistd_.h here, too. 2007-10-01 Bruno Haible * gnulib-tool (func_emit_initmacro_done): Special case for alloca.c. Needed for the alloca-opt module. 2007-09-30 Bruno Haible * lib/alloca.in.h: Renamed from lib/alloca_.h. * modules/alloca-opt (Files, Makefile.am): Use alloca.in.h instead of alloca_.h. * lib/argz.in.h: Renamed from lib/argz_.h. * modules/argz (Files, Makefile.am): Use argz.in.h instead of argz_.h. * lib/byteswap.in.h: Renamed from lib/byteswap_.h. * modules/byteswap (Files, Makefile.am): Use byteswap.in.h instead of byteswap_.h. * lib/dirent.in.h: Renamed from lib/dirent_.h. * modules/fchdir (Files, Makefile.am): Use dirent.in.h instead of dirent_.h. * lib/fcntl.in.h: Renamed from lib/fcntl_.h. * modules/fcntl (Files, Makefile.am): Use fcntl.in.h instead of fcntl_.h. * lib/float.in.h: Renamed from lib/float_.h. * modules/float (Files, Makefile.am): Use float.in.h instead of float_.h. * lib/fnmatch.in.h: Renamed from lib/fnmatch_.h. * modules/fnmatch (Files, Makefile.am): Use fnmatch.in.h instead of fnmatch_.h. * lib/getopt.in.h: Renamed from lib/getopt_.h. * modules/getopt (Files, Makefile.am): Use getopt.in.h instead of getopt_.h. * lib/glob.in.h: Renamed from lib/glob_.h. * modules/glob (Files, Makefile.am): Use glob.in.h instead of glob_.h. * lib/iconv.in.h: Renamed from lib/iconv_.h. * modules/iconv_open (Files, Makefile.am): Use iconv.in.h instead of iconv_.h. * lib/inttypes.in.h: Renamed from lib/inttypes_.h. * modules/inttypes (Files, Makefile.am): Use inttypes.in.h instead of inttypes_.h. * lib/locale.in.h: Renamed from lib/locale_.h. * modules/locale (Files, Makefile.am): Use locale.in.h instead of locale_.h. * lib/math.in.h: Renamed from lib/math_.h. * modules/math (Files, Makefile.am): Use math.in.h instead of math_.h. * lib/netinet_in.in.h: Renamed from lib/netinet_in_.h. * modules/netinet_in (Files, Makefile.am): Use netinet_in.in.h instead of netinet_in_.h. Add dependency. * lib/poll.in.h: Renamed from lib/poll_.h. * modules/poll (Files, Makefile.am): Use poll.in.h instead of poll_.h. * lib/search.in.h: Renamed from lib/search_.h. * modules/search (Files, Makefile.am): Use search.in.h instead of search_.h. * lib/signal.in.h: Renamed from lib/signal_.h. * modules/signal (Files, Makefile.am): Use signal.in.h instead of _signal.h. * lib/stdbool.in.h: Renamed from lib/stdbool_.h. * modules/stdbool (Files, Makefile.am): Use stdbool.in.h instead of stdbool_.h. * lib/stdint.in.h: Renamed from lib/stdint_.h. * modules/stdint (Files, Makefile.am): Use stdint.in.h instead of stdint_.h. * lib/stdio.in.h: Renamed from lib/stdio_.h. * modules/stdio (Files, Makefile.am): Use stdio.in.h instead of stdio_.h. * lib/stdlib.in.h: Renamed from lib/stdlib_.h. * modules/stdlib (Files, Makefile.am): Use stdlib.in.h instead of stdlib_.h. * lib/string.in.h: Renamed from lib/string_.h. * modules/string (Files, Makefile.am): Use string.in.h instead of string_.h. * doc/gnulib-tool.texi (Initial import): Update. * lib/sys_select.in.h: Renamed from lib/sys_select_.h. * modules/sys_select (Files, Makefile.am): Use sys_select.in.h instead of sys_select_.h. Add dependency. * lib/sys_socket.in.h: Renamed from lib/sys_socket_.h. * modules/sys_socket (Files, Makefile.am): Use sys_socket.in.h instead of sys_socket_.h. * lib/sys_stat.in.h: Renamed from lib/sys_stat_.h. * modules/sys_stat (Files, Makefile.am): Use sys_stat.in.h instead of sys_stat_.h. * lib/sys_time.in.h: Renamed from lib/sys_time_.h. * modules/sys_time (Files, Makefile.am): Use sys_time.in.h instead of sys_time_.h. * lib/sysexits.in.h: Renamed from lib/sysexits_.h. * modules/sysexits (Files, Makefile.am): Use sysexits.in.h instead of sysexits_.h. * lib/time.in.h: Renamed from lib/time_.h. * modules/time (Files, Makefile.am): Use time.in.h instead of time_.h. * lib/unistd.in.h: Renamed from lib/unistd_.h. * modules/unistd (Files, Makefile.am): Use unistd.in.h instead of unistd_.h. * lib/wchar.in.h: Renamed from lib/wchar_.h. * modules/wchar (Files, Makefile.am): Use wchar.in.h instead of wchar_.h. * lib/wctype.in.h: Renamed from lib/wctype_.h. * modules/wctype (Files, Makefile.am): Use wctype.in.h instead of wctype_.h. * build-aux/bootstrap (slurp): Update. * lib/.cppi-disable: Update. 2007-09-30 Bruno Haible * tests/test-getaddrinfo.c (AF_UNSPEC): Provide a fallback definition. Needed on BeOS. 2007-09-30 Bruno Haible * modules/dirname-tests (check_PROGRAMS): Renamed from noinst_PROGRAMS. 2007-09-29 Bruno Haible * lib/stdio_.h (getdelim, getline): Add identifiers. Doc tweak. 2007-09-29 Bruno Haible * lib/xreadlink.c (xreadlink): Simplify to a wrapper around areadlink. * modules/xreadlink (Depends-on): Add areadlink, remove readlink etc. * build-aux/install-reloc: Compile also areadlink.c. * modules/relocatable-prog-wrapper (Files): Add lib/areadlink.[hc]. 2007-09-29 Bruno Haible * gnulib-tool (func_emit_initmacro_done): Indentation. 2007-09-29 Bruno Haible * README: Add CVS checkout update instructions. Info from Bob Proulx . 2007-09-28 Eric Blake Provide move-if-change. * build-aux/move-if-change: New file, based on best practice rather than any canonical upstream location. 2007-09-28 Jim Meyering Fix canonicalize loop-detection corner case. Do not attempt to stat the symlink values stored via seen_triple. Without this, coreutils' tests/misc/readlink-fp-loop test would fail on linux-2.6.18, (but not 2.6.22). * lib/canonicalize.c (seen_triple): Use triple_compare_ino_str, not triple_compare. The former compares dev,ino,filename, while the latter would actually stat dirname(filename) when dev and ino were equal. * lib/hash-triple.c: Install . (STREQ): Define. (triple_compare_ino_str): New function. * lib/hash-triple.h (triple_compare_ino_str): Declare it. 2007-09-28 Eric Blake Enforce that AC_REPLACE_FUNCS files exist. * gnulib-tool (func_emit_initmacro_done): Make AC_LIBSOURCES override check for typos. Fix test-closein on Solaris 10. * tests/test-closein.c (main): Don't assume stdin can be inherited closed on all systems. * tests/test-closein.sh: Likewise. Reported by Piotr Tarnowski. 2007-09-28 Jim Meyering * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Fix typo in comment. 2007-09-27 Jim Meyering canonicalize: Avoid a false-positive cycle failure. * modules/canonicalize (Depends-on): Add file-set and hash-triple. Sort. Remove cycle-check. * lib/canonicalize.c: Include file-set.h and hash-triple.h, not cycle-check.h. (seen_triple): New function. (canonicalize_filename_mode): Use it instead of cycle-check. * tests/test-canonicalize.c: Add a test for this bug. * tests/test-canonicalize.sh: Set up and run the test. New module, file-set, from coreutils. * modules/file-set: Define it. * lib/file-set.c, lib/file-set.h: Implement. New module, hash-triple, from coreutils. * modules/hash-triple: Define it. * lib/hash-triple.c, lib/hash-triple.h: Implement. 2007-09-25 Eric Blake Fix strerror on Interix. * lib/string_.h (strerror): Declare replacement. * doc/functions/strerror.texi (strerror): Document the Interix shortcoming. * modules/string (Makefile.am): Support new hooks. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Add new hooks. * m4/strerror.m4 (gl_FUNC_STRERROR): Defer to gl_FUNC_STRERROR_SEPARATE. (gl_FUNC_STRERROR_SEPARATE): Check for Interix bug. * lib/strerror.c (rpl_strerror): Provide replacement. * modules/strerror (Depends-on): Add string. (configure.ac): Detect use of module. * tests/test-strerror.c: New file. * modules/strerror-tests: New test module. * modules/argp (Depends-on): Add strerror. * modules/error (Depends-on): Likewise. Reported by Martin Koeppe. 2007-09-24 Bruno Haible * README: Update git instructions. 2007-09-24 Eric Blake Revert fpending breakage from 2007-09-08. * m4/fpending.m4 (gl_FUNC_FPENDING): Don't require existence of __fpending.c. 2007-09-24 Jim Meyering filenamecat.c: Add a test. * lib/filenamecat.c (main) [TEST_FILE_NAME_CONCAT]: Add a test showing how the function works when DIR is the empty string. 2007-09-21 Simon Josefsson * tests/test-canonicalize.sh: Turn on executable bit. 2007-09-19 Eric Blake * README: Update CVS instructions. 2007-09-18 Bruno Haible * modules/areadlink: New file. * lib/areadlink.h (areadlink): New declaration. * lib/areadlink.c: New file, based on lib/xreadlink.c. 2007-09-17 Jim Meyering * lib/savewd.c (ESTALE) [!defined]: Define. Reported to be required on Interix by Martin Koeppe. 2007-09-17 Bruno Haible * gnulib-tool (func_version): Use $version. 2007-09-16 Bruno Haible * m4/printf.m4 (gl_PRINTF_LONG_DOUBLE, gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE): Increase buf's size from 100 to 10000. Needed on glibc-2.6.1 with -fstack-protector -D_FORTIFY_SOURCE=2. Reported by Greg Schafer . 2007-09-15 Bruno Haible * gnulib-tool (sed): Try a little harder to make bash understand the alias. Reported by Bruce Korb . 2007-09-13 Eric Blake * ChangeLog: Remove conflict markers. 2007-09-13 Simon Josefsson * lib/gc-gnulib.c (gc_hash_open): Catch NULL calloc return value. Reported by Bruno Haible . 2007-09-12 Bruno Haible * m4/lock.m4: Don't provide an AC_USE_SYSTEM_EXTENSIONS definition. (gl_LOCK_EARLY_BODY): Use AC_GNU_SOURCE when AC_USE_SYSTEM_EXTENSIONS is not defined. 2007-09-12 Eric Blake Track CVS Autoconf on AC_USE_SYSTEM_EXTENSIONS. * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Update to CVS Autoconf definition. * modules/euidaccess (Depends-on): Add extensions, for AC_USE_SYSTEM_EXTENSIONS with autoconf <= 2.59. * modules/fnmatch (Depends-on): Likewise. * modules/getaddrinfo (Depends-on): Likewise. * modules/getdelim (Depends-on): Likewise. * modules/getline (Depends-on): Likewise. * modules/getsubopt (Depends-on): Likewise. * modules/gettext (Depends-on): Likewise. * modules/group-member (Depends-on): Likewise. * modules/mbchar (Depends-on): Likewise. * modules/memmem (Depends-on): Likewise. * modules/mempcpy (Depends-on): Likewise. * modules/memrchr (Depends-on): Likewise. * modules/pagealign_alloc (Depends-on): Likewise. * modules/readutmp (Depends-on): Likewise. * modules/stpcpy (Depends-on): Likewise. * modules/stpncpy (Depends-on): Likewise. * modules/strchrnul (Depends-on): Likewise. * modules/strndup (Depends-on): Likewise. * modules/strsep (Depends-on): Likewise. * modules/strverscmp (Depends-on): Likewise. * modules/vasprintf (Depends-on): Likewise. * modules/wcwidth (Depends-on): Likewise. * m4/euidaccess.m4 (gl_FUNC_EUIDACCESS): AC_GNU_SOURCE will be obsolete in Autoconf 2.62; use AC_USE_SYSTEM_EXTENSIONS instead. * m4/fnmatch.m4 (gl_FUNC_FNMATCH_GNU): Likewise. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDR_INFO): Likewise. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * m4/getsubopt.m4 (gl_FUNC_GETSUBOPT): Likewise. * m4/glob.m4 (gl_PREREQ_GLOB): Likewise. * m4/group-member.m4 (gl_FUNC_GROUP_MEMBER): Likewise. * m4/mbchar.m4 (gl_MBCHAR): Likewise. * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise. * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): Likewise. * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Likewise. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Likewise. * m4/pagealign_alloc.m4 (gl_PAGEALIGN_ALLOC): Likewise. * m4/readutmp.m4 (gl_READUTMP): Likewise. * m4/regex.m4 (gl_PREREQ_REGEX): Likewise. * m4/stpcpy.m4 (gl_FUNC_STPCPY): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Likewise. * m4/strndup.m4 (gl_FUNC_STRNDUP): Likewise. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Likewise. * m4/strsep.m4 (gl_FUNC_STRSEP): Likewise. * m4/strverscmp.m4 (gl_FUNC_STRVERSCMP): Likewise. * m4/vasprintf.m4 (gl_PREREQ_VASPRINTF_H): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * m4/lock.m4 (gl_LOCK_EARLY_BODY): Likewise, but provide fallback, so that lock.m4 can be used in gettext without extensions module. 2007-09-11 Bruno Haible * m4/isc-posix.m4: Remove file. Suggested by Eric Blake. 2007-09-11 Eric Blake * ChangeLog: Restore lines accidentally truncated 2007-04-06. 2007-09-10 Bruno Haible * posix-modules: Fix typo in error message. Reported by Matt . 2007-09-09 Bruno Haible * doc/functions/getdelim.texi: Update list of platforms lacking the function. * doc/functions/getline.texi: Likewise. 2007-09-09 Jim Meyering * lib/hash.c (hash_initialize): Detect calloc failure. Reported by Bruno Haible. 2007-09-09 Bruno Haible * lib/canonicalize-lgpl.c (__realpath): Set errno to ENOMEM when malloc or realloc fails. 2007-09-09 Bruno Haible * modules/getcwd (Depends-on): Add malloc-posix. * modules/glob (Depends-on): Likewise. * modules/putenv (Depends-on): Likewise. * modules/strdup (Depends-on): Likewise. * modules/getdelim (Depends-on): Add realloc-posix. * modules/read-file (Depends-on): Likewise. 2007-09-09 Bruno Haible * m4/malloc.m4 (gl_CHECK_MALLOC_POSIX): New macro. (gl_FUNC_MALLOC_POSIX): Require it. * m4/realloc.m4 (gl_FUNC_REALLOC_POSIX): Likewise. * m4/calloc.m4 (gl_FUNC_CALLOC_POSIX): Likewise. * modules/realloc (Files): Add m4/malloc.m4. * modules/calloc (Files): Likewise. 2007-09-09 Bruno Haible * modules/malloc-posix: New file. * modules/malloc (Depends-on): Add malloc-posix. * lib/malloc.c: Include errno.h. (rpl_malloc): Merge the requirements of a glibc-compatible malloc and a POSIX-compatible malloc into a single function. Set ENOMEM when returning NULL. * m4/malloc.m4: New file. * doc/functions/malloc.texi: Mention the malloc-posix module. * lib/stdlib_.h (malloc): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_MALLOC_POSIX and HAVE_MALLOC_POSIX. * modules/stdlib (stdlib.h): Substitute also GNULIB_MALLOC_POSIX and HAVE_MALLOC_POSIX. 2007-09-09 Bruno Haible * modules/realloc-posix: New file. * modules/realloc (Depends-on): Add realloc-posix. * lib/realloc.c: Include errno.h. (rpl_realloc): Merge the requirements of a glibc-compatible realloc and a POSIX-compatible realloc into a single function. Set ENOMEM when returning NULL. * m4/realloc.m4: New file. * doc/functions/realloc.texi: Mention the realloc-posix module. * lib/stdlib_.h (realloc): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_REALLOC_POSIX and HAVE_REALLOC_POSIX. * modules/stdlib (stdlib.h): Substitute also GNULIB_REALLOC_POSIX and HAVE_REALLOC_POSIX. 2007-09-09 Bruno Haible * modules/calloc-posix: New file. * modules/calloc (Depends-on): Add calloc-posix. * lib/calloc.c: Include errno.h. (rpl_calloc): Merge the requirements of a glibc-compatible calloc and a POSIX-compatible calloc into a single function. Set ENOMEM when returning NULL. * m4/calloc.m4 (gl_FUNC_CALLOC_POSIX): New macro. * doc/functions/calloc.texi: Mention the calloc-posix module. * lib/stdlib_.h (calloc): New declaration. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_CALLOC_POSIX and HAVE_CALLOC_POSIX. * modules/stdlib (stdlib.h): Substitute also GNULIB_CALLOC_POSIX and HAVE_CALLOC_POSIX. 2007-09-09 Bruno Haible Allow for modules to show an arbitrary notice. * modules/TEMPLATE-EXTENDED: Add 'Notice' field. * gnulib-tool: New option --extract-notice. (func_usage): Document it. (sed_extract_prog): Update. (func_get_notice): New function. (func_modules_notice): New function. (func_import, func_create_testdir): Invoke it. Suggested by Jim Meyering. 2007-09-09 Bruno Haible * gnulib-tool: New options --verbose, --quiet. (func_usage): Document them. (verbose): New variable. (func_execute_command): New function. (func_import): Don't show the module list and the file list if $verbose < 0. (func_create_testdir): Likewise. Use func_execute_command. (func_create_megatestdir): Use func_execute_command. 2007-09-08 Bruno Haible * gnulib-tool (func_import): Prefer rsync over wget when available, for fetching the PO files. 2007-09-08 Bruno Haible * posix-modules: New file. Portions copied from gnulib-tool. * doc/gnulib.texi (POSIX Substitutes Library): New chapter. 2007-09-08 Jim Meyering Rename __fpending.c -> fpending.c and __fpending.h -> fpending.h * lib/fpending.h: Rename from __fpending.h. * lib/fpending.c: Rename from __fpending.c. Include "fpending.h", not "__fpending.h". * lib/__fpending.h, lib/__fpending.c: Remove files. * modules/fpending (Files): Reflect new file names. * lib/close-stream.c: Include "fpending.h", not "__fpending.h". 2007-09-08 Bruno Haible * m4/inttypes-h.m4: Remove stub file. 2007-09-07 Simon Josefsson * doc/headers/stdint.texi: Discuss #include_next issue. 2007-09-06 Paul Eggert * build-aux/bootstrap: Remove obsolete comment about wget --help. 2007-09-06 Yoann Vandoorselaere * m4/time_h.m4 (gl_CHECK_TYPE_STRUCT_TIMESPEC): Fix misspelling in variable name. 2007-09-03 Jim Meyering New module: git-version-gen. * modules/git-version-gen: New file. Import changes from coreutils for bootstrap script. * build-aux/bootstrap (WGET_COMMAND): Remove code to set this variable. bootstrap: uses rsync to download the .po files * build-aux/bootstrap (po_download_command_format): New global. (download_po_files): Use rsync. (update_po_files): Don't remove .po files after download, so future rsync runs can take advantage of the copies. * build-aux/bootstrap (gnulib_tool): Make sha1sum check quietly. Solve the unnecessary-.po-file-regeneration problem once and for all. * build-aux/bootstrap (download_po_files): New function, renamed from get_translations. Now, downloads, but doesn't update LINGUAS. (update_po_files): New function. bootstrap: Ignore more. * build-aux/bootstrap (symlink_to_dir): Add a directory name like uniwidth to e.g., lib/.gitignore. (slurp): Handle the sys_stat_.h -> sys mapping, too. * build-aux/bootstrap: New setting: vc_ignore. (insert_sorted_if_absent): Create $file if absent. Adapt to new, possibly empty, list: $vc_ignore. bootstrap: generate more ignorable names * build-aux/bootstrap (slurp): When generating ignorable names, also map .sin to .sed, .gperf to .c, and .y to .c. 2007-09-03 Jim Meyering * build-aux/git-version-gen: New file, from coreutils. For details, see http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=bfe49f506 2007-09-02 Bruno Haible Fix mis-recognition of 'mcs' on QNX 6. * m4/csharpcomp.m4 (gt_CSHARPCOMP): Test whether the "mcs --version" output contains the string "Mono". * lib/csharpcomp.c (compile_csharp_using_mono): Likewise. Reported by at . 2007-09-01 Bruno Haible Fix collision between uniwidth/* and linebreak modules. * lib/linebreak.h (locale_charset, uc_width, u8_width, u16_width, u32_width): Remove declarations. * lib/linebreak.c: Include uniwidth.h, uniwidth/cjk.h, streq.h. (u32_mbtouc_unsafe, streq9, streq8, streq7, streq6, streq5, streq4, streq3, streq2, streq1, streq0): Remove functions. (STREQ): Remove macro. (is_cjk_encoding): Remove function. (nonspacing_table_data, nonspacing_table_ind): Remove constants. (uc_width, u8_width, u16_width, u32_width): Remove functions. * modules/linebreak (Depends-on): Add streq, uniwidth/width. * NEWS: Document the change. 2007-09-01 Bruno Haible * lib/streq.h: Add double-inclusion guard. 2007-09-01 Karl Berry * MODULES.html.sh: Rename mreadlink_with_size to areadlink_with_size. 2007-08-28 Jim Meyering Rename mreadlink_with_size to areadlink_with_size. * NEWS: Document the change. * lib/mreadlink-with-size.c (mreadlink_with_size): Rename this to... * lib/areadlink-with-size.c (areadlink_with_size): ...this. * lib/mreadlink.h: Rename this to... * lib/areadlink.h: ...this. * modules/mreadlink-with-size: Rename this to... * modules/areadlink-with-size: ...this. * lib/canonicalize.c: Reflect the renaming. * modules/canonicalize: Likewise. 2007-08-26 Bruno Haible * gnulib-tool (func_import): When deciding which files to remove, consider also dangling symbolic links. Reported by Eric Blake. 2007-08-26 Bruno Haible * gnulib-tool (func_ln_if_changed): Use "test -h", not "test -L". 2007-08-23 Simon Josefsson * lib/readline.c: Don't include getline.h, the prototype is now found in stdio.h. 2007-08-23 Jim Meyering Getdelim touchup. * lib/getdelim.c (getdelim): Don't bother to save/restore errno around the funlockfile call, since funlockfile never sets errno. Don't set errno upon failed realloc. 2007-08-22 Eric Blake Getline touchups. * lib/getdelim.c (getdelim): Revert regression that required *n to be 0 when *lineptr is NULL. Preserve errno across funlockfile. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Check for declaration of getdelim, rather than whether implementation is missing. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise for getline. * lib/stdio_.h (getline): Also declare if replacement is required. * doc/functions/getdelim.texi: New file. * doc/functions/getline.texi: Likewise. * doc/gnulib.texi (Function Substitutes): Add new files. Reported by Bruno Haible. 2007-08-22 Ludovic Courtès * users.txt: Add Guile. 2007-08-22 Eric Blake * tests/test-getdelim.c (main): Use remove, not unlink. * tests/test-getline.c (main): Likewise. Move getline and getdelim into stdio.h, per POSIX 200x. * modules/getline (Files): Remove getline.h. (Depends-on): Add stdio. (configure.ac): Add module indicator. * modules/getdelim (Files): Remove getdelim.h. (Depends-on): Add stdio. (configure.ac): Add module indicator. * modules/stdio (Makefile.am): Work with new indicators. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add new defaults. * m4/getdelim.m4 (gl_FUNC_GETDELIM): Work with stdio needs. * m4/getline.m4 (gl_FUNC_GETLINE): Likewise. * lib/getdelim.h: Delete. * lib/getline.h: Delete. * lib/stdio_.h (getdelim, getline): Declare. * modules/getdelim-tests: New module. * modules/getline-tests: Likewise. * tests/test-getdelim.c: New file. * tests/test-getline.c: Likewise. * NEWS: Document the change. * lib/getline.c: Update choice of header. * lib/csharpcomp.c: Likewise. * lib/getpass.c: Likewise. * lib/javacomp.c: Likewise. * lib/javaversion.c: Likewise. * lib/yesno.c: Likewise. * lib/getdelim.c: Likewise. (getdelim): Set errno on failure, and avoid memory leak. 2007-08-19 Bruno Haible * modules/closein (Depends-on): Add freadahead. * lib/closein.c: Include freadahead.h. (close_stdin): Skip the fseeko and fflush calls if freadahead(stdin) is zero. 2007-08-19 Bruno Haible * modules/freadahead-tests: New file. * tests/test-freadahead.sh: New file. * tests/test-freadahead.c: New file. * modules/freadahead: New file. * lib/freadahead.h: New file. * lib/freadahead.c: New file. * MODULES.html.sh (File stream based Input/Output): Add freadahead, fbufmode, fpurge, freadable, fwritable. 2007-08-19 Eric Blake Test yesno in combination with closein. * lib/yesno.c (yesno): Document use of stdin. * modules/yesno-tests (Files): New module. * tests/test-yesno.c (main): New file. * tests/test-yesno.sh: Likewise. 2007-08-19 Bruno Haible * lib/fbufmode.c (fbufmode): Add tentative support for Solaris/AMD64. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. 2007-08-19 Bruno Haible * tests/test-lseek.c (main): Disable a test for BeOS. * doc/functions/lseek.texi: Document the BeOS bug. 2007-08-19 Bruno Haible Eric Blake * lib/lseek.c: Include . (rpl_lseek): Add workaround code also for Unix platforms. Needed for BeOS. * m4/lseek.m4 (gl_FUNC_LSEEK): When cross-compiling, fail on BeOS. * doc/functions/lseek.texi: Document BeOS definiency. 2007-08-18 Bruno Haible * modules/fstrcmp-tests: New file. * tests/test-fstrcmp.c: New file. 2007-08-18 Bruno Haible * modules/fstrcmp: New file, from GNU gettext with modifications. * lib/fstrcmp.h: New file, from GNU gettext. * lib/fstrcmp.c: New file, from GNU gettext. * MODULES.html.sh (String handling): Add fstrcmp. 2007-08-18 Bruno Haible * lib/diffseq.h (struct context): Change type of 'heuristic' field to 'bool'. (diag, compareseq): Remove const from the ctxt argument. (USE_HEURISTIC): Undefine at the end. 2007-08-18 Jim Meyering New file: lib/idcache.h * NEWS: Mention the addition. * modules/idcache (Files): Add lib/idcache.h * lib/idcache.c: Include "idcache.h". Don't include . Add a FIXME comment. Move file-scoped "static" declarations to the top. * lib/idcache.h: New file. Include here, instead. 2007-08-17 Bruno Haible and Paul Eggert * MODULES.html.sh: Add diffseq. * modules/diffseq: New file. * lib/diffseq.h: New file, from GNU gettext with a few minor changes, extracted from GNU gettext's fstrcmp.c and GNU diff's analyze.c. 2007-08-15 Paul Eggert Import changes from coreutils for bootstrap script. 2007-07-21 Paul Eggert * build-aux/bootstrap (slurp): Work even in environments where "ls" defaults to "ls -A". Put in a FIXME, though, since the current code does not slurp files whose names start with ".", and this looks like it might be a troublesome area. 2007-07-11 Jim Meyering If there's a GPL vN copyright comment, require that N == 3. 2007-07-08 Jim Meyering Run the coreutils-specific code only if tests/Makefile.am.in exists. * build-aux/bootstrap (mam_template): Move definition out of loop. Create symlinks for gl/{lib,m4}/*, just as for gnulib/{lib,m4}/*. * build-aux/bootstrap (symlink_to_dir): Rename function from symlink_to_gnulib. Add a directory parameter. Update all callers. (cp_mark_as_generated): Also check for -- and link to -- files in gl/. 2007-07-08 Jim Meyering Adapt to deeper hierarchy in gnulib. * build-aux/bootstrap (symlink_to_dir): If the destination directory doesn't exist, create it. This is required at least for "lib/uniwidth/cjk.h". 2007-05-15 Jim Meyering * build-aux/bootstrap: Now that generated Makefile.am files are no longer under version control, they must be created at bootstrap time. 2007-08-14 Ben Pfaff * lib/count-one-bits.h: Add comments. From Bruno Haible. 2007-08-14 Paul Eggert * lib/count-one-bits.h: Don't include ; no longer needed given the changes below. (COUNT_ONE_BITS): Use 'verify' rather than 'verify_true'. Work even on hosts that have padding bits beyond the supported 64. 2007-08-10 Paul Eggert * NEWS: In xstrtol, remove STRTOL_FATAL_ERROR and add xstrtol_fatal. * lib/xstrtol.h: Don't include exitfail.h; that's now internal to xstrtol.c. Include getopt.h, since xstrtol_fatal's signature depends on it. (xstrtol_error): Remove. (xstrtol_fatal): New decl, replacing the functionality of xstrtol_error but with a different signature. (ATTRIBUTE_NORETURN, __attribute__): New macros. * lib/xstrtol-error.c: Include exitfail.h. (xstrtol_fatal): New function, with a different signature from the old xstrtol_error, so that the caller need not worry about passing in an exit status, or about storage management of the option argument. (xstrtol_error): Now a static function. Redo signature to implement xstrtol_fatal. Output the correct number of hyphens in front of the option so that the caller need not worry about storage management. (N_): New macro. (_): Remove; not used now. * modules/xstrtol: Depend on getopt. * tests/test-xstrtol.c (main): Use new xstrtol_error function instead of old STRTOL_FATAL_ERROR macro. * tests/test-xstrtol.sh (t-xstrtol.xo): Adjust to match new behavior of test program. * tests/test-xstrtoimax.sh (t-xstrtoimax.xo): Likewise. * tests/test-xstrtoumax.sh (t-xstrtoumax.xo): Likewise. 2007-08-08 Eric Blake * lib/xstrtol-error.c: Add missing include. Move xstrtol messages into gnulib domain, when --pobase is used. * lib/xstrtol.h (_STRTOL_ERROR): Move messages out of macro... * lib/xstrtol-error.c (xstrtol_error): ...into new file. * modules/xstrtol (Files): Distribute new file. * m4/xstrtol.m4 (gl_XSTRTOL): Build new file. * lib/xstrtol.c (TESTING_XSTRTO): Move tests... * tests/test-xstrtol.c: ...into new file. * tests/test-xstrtoul.c: Also test xstrtoul. * tests/test-xstrtoimax.c: Also test xstrtoimax. * tests/test-xstrtoumax.c: Also test xstrtoumax. * tests/test-xstrtol.sh: Drive the tests. * tests/test-xstrtoimax.sh: Likewise. * tests/test-xstrtoumax.sh: Likewise. * modules/xstrtol-tests: New module. * modules/xstrtoimax-tests: Likewise. * modules/xstrtoumax-tests: Likewise. 2007-08-08 Jim Meyering New function: mfile_name_concat. * lib/filenamecat.c (mfile_name_concat): New function, just like file_name_concat, but return NULL upon failure rather than exiting with a diagnostic. * lib/filenamecat.h: Declare it. 2007-08-07 Bruno Haible * m4/inttypes.m4 (gl_INTTYPES_H): Use GL_TRIGGER_STDC_LIMIT_MACROS instead of __STDC_LIMIT_MACROS_TRIGGER. This avoids a redefinition warning from gcc. Reported by Eric Blake. 2007-08-07 Simon Josefsson * modules/crypto/arctwo (License): Use the synonymous term "LGPLv2+". * modules/crypto/arcfour (License): Likewise. * modules/crypto/des-tests (License): Likewise. * modules/crypto/gc-arctwo-tests (License): Likewise. * modules/crypto/gc-des-tests (License): Likewise. * modules/crypto/gc-hmac-md5-tests (License): Likewise. * modules/crypto/gc-hmac-sha1-tests (License): Likewise. * modules/crypto/gc-md2-tests (License): Likewise. * modules/crypto/gc-md4-tests (License): Likewise. * modules/crypto/gc-md5-tests (License): Likewise. * modules/crypto/gc-pbkdf2-sha1-tests (License): Likewise. * modules/crypto/gc-rijndael-tests (License): Likewise. * modules/crypto/gc-sha1-tests (License): Likewise. * modules/crypto/gc-tests (License): Likewise. * modules/crypto/hmac-md5 (License): Likewise. * modules/crypto/hmac-sha1 (License): Likewise. * modules/crypto/md2-tests (License): Likewise. * modules/crypto/md4-tests (License): Likewise. * modules/crypto/md5 (License): Likewise. * modules/crypto/rijndael (License): Likewise. * modules/crypto/sha1 (License): Likewise. * modules/memxor (License): Likewise. 2007-08-06 Paul Eggert and Bruno Haible * NEWS: Describe interface changes to human, xstrtol. * lib/human.h: Include . (human_options): Return enum strtol_error, not int. Remove bool arg; take int * instead. * lib/human.c: Don't include "gettext.h". (_): Remove; no longer used. Don't include , since human.h does it. (human_options): Adjust to abovementioned interface changes. Do not report error to stderr; that's now the caller's responsibility. * lib/xstrtol.c (main) [defined TESTING_XSTRTO]: Adjust to interface change. * lib/xstrtol.h (_STRTOL_ERROR): Take Option, Arg rather than Str, Argument_type_string. All uses changed. Put " argument" in diagnostics to make them clearer. Change wording of suffix message for clarity. (STRTOL_FATAL_ERROR): Take Option, Arg rather than Str, Argument_type_string. (STRTOL_FATAL_WARN): Remove; no longer used. * modules/human (Depends-on): Remove gettext-h. 2007-08-06 Simon Josefsson * build-aux/maint.mk, build-aux/GNUmakefile: Relicense to GPLv3+. 2007-07-31 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Test whether WCHAR_MIN and WCHAR_MAX are defined by (as opposed to , as on Dragonfly). Reported by Joerg Sonnenberger . 2007-07-31 Bruno Haible * lib/fflush.c (rpl_fflush): On BSD systems, use the __SNPT flag. Suggested by Joerg Sonnenberger . 2007-07-30 Bruno Haible * modules/base64 (License): Use the synonymous term "LGPLv2+". * modules/c-ctype (License): Likewise. * modules/c-strcase (License): Likewise. * modules/check-version (License): Likewise. * modules/iconv (License): Likewise. * modules/iconv_open (License): Likewise. * modules/read-file (License): Likewise. * modules/striconv (License): Likewise. * modules/strverscmp (License): Likewise. * modules/vasprintf (License): Likewise. * modules/crypto/des (License): Likewise. * modules/crypto/gc (License): Likewise. * modules/crypto/gc-arcfour (License): Likewise. * modules/crypto/gc-arctwo (License): Likewise. * modules/crypto/gc-des (License): Likewise. * modules/crypto/gc-hmac-md5 (License): Likewise. * modules/crypto/gc-hmac-sha1 (License): Likewise. * modules/crypto/gc-md2 (License): Likewise. * modules/crypto/gc-md4 (License): Likewise. * modules/crypto/gc-md5 (License): Likewise. * modules/crypto/gc-pbkdf2-sha1 (License): Likewise. * modules/crypto/gc-random (License): Likewise. * modules/crypto/gc-rijndael (License): Likewise. * modules/crypto/gc-sha1 (License): Likewise. * modules/crypto/md2 (License): Likewise. * modules/crypto/md4 (License): Likewise. 2007-07-30 Jim Meyering * lib/fts.c (fts_read): Upon failure to chdir into a subdirectory, set fts_info to FTS_DNR, not to FTS_ERR, so that the caller knows it has valid stat data. This bug would cause du not to count the sizes of inaccessible directories. Patch by Bryan Mason , via Jose Maria Plans in . 2007-07-25 Peter O'Gorman Bruno Haible * m4/include_next.m4 (gl_INCLUDE_NEXT): Test whether #include_next really works. Needed because AIX 4.3 "xlc -E" doesn't understand #include_next, gives a diagnostic about it, but reports no error in the exit code. Reported by Gary V. Vaughan . 2007-07-24 Ben Pfaff Improve name: "count-one-bits" is better than "popcount". * MODULES.html.sh: Update name. * lib/popcount.h: Renamed lib/count-one-bits.h. (popcount): Renamed count_one_bits. (popcountl): Renamed count_one_bits_l. (popcountll): Renamed count_one_bits_ll. * m4/popcount.m4: Renamed m4/count-one-bits.m4. * modules/popcount: Renamed module/count-one-bits. * modules/popcount-tests: Renamed module/count-one-bits-tests. * tests/test-popcount.c: Renamed tests/test-count-one-bits.c. 2007-07-23 Ben Pfaff * lib/popcount.h (popcount32): Reduce size of constants, to allow better code generation, and add U to large constants to avoid warnings, in non-GCC case. Suggested by Bruno Haible. 2007-07-23 Ben Pfaff * lib/popcount.h: Use verify_true instead of if...abort. * modules/popcount: Depend on verify module. Suggested by Jim Meyering. 2007-07-23 Bruno Haible * gnulib-tool (func_import): Create a .cvsignore file also when the directory is not yet in CVS but the toplevel directory is. When creating a .cvsignore file, add ".deps" and ".dirstamp" to it. Reported by Karl Berry. 2007-07-22 Ben Pfaff * lib/popcount.h: Use faster, branchless algorithm for non-GCC case. Suggested by Eric Blake. 2007-07-22 Ben Pfaff New module: popcount. * MODULES.html.sh: Add popcount. * modules/popcount: New file. * modules/popcount-tests: New file. * tests/test-popcount.c: New file. * lib/popcount.h: New file. * m4/popcount.m4: New file. 2007-07-22 Paul Eggert * build-aux/announce-gen: Update to GPLv3. * build-aux/config.guess: Update from config. 2007-07-21 Bruno Haible * lib/error.c (_) [ENABLE_NLS]: Define to gettext. * lib/verror.c (_) [ENABLE_NLS]: Likewise. 2007-07-20 Jim Meyering * check-module: Diagnose a self-dependency. 2007-07-19 Bruno Haible * gnulib-tool (func_import): Don't abort if pobase or po_domain is empty. Reported by Eric Blake. 2007-07-18 Bruno Haible * gnulib-tool: New options --po-base, --po-domain. (func_usage): Document them. (pobase, po_domain): New variables. (func_emit_lib_Makefile_am): Augment AM_CPPFLAGS, defining DEFAULT_TEXT_DOMAIN. (func_emit_po_Makevars, func_emit_po_POTFILES_in): New functions. (func_import): Consider pobase and po_domain. Create a po/ directory. (func_create_testdir): Set pobase and po_domain to empty. * build-aux/po/Makefile.in.in: New file, from GNU gettext 0.16.1. * build-aux/po/remove-potcdate.sin: New file, from GNU gettext 0.16.1. 2007-07-18 Bruno Haible * gnulib-tool (func_get_automake_snippet): Synthesize also an EXTRA_DIST augmentation for files in build-aux/. 2007-07-16 Bruno Haible * modules/lseek (License): Use the synonymous term "LGPLv2+". * modules/getdelim (License): Likewise. 2007-07-16 Yoann Vandoorselaere * modules/arpa_inet (License): Use the synonymous term LGPLv2+. * modules/d-type (License): Likewise. * modules/extensions (License): Likewise. * modules/fnmatch (License): Likewise. * modules/fseeko (License): Likewise. * modules/getaddrinfo (License): Likewise. * modules/getline (License): Likewise. * modules/getlogin_r (License): Likewise. * modules/getpass (License): Likewise. * modules/gettimeofday (License): Likewise. * modules/glob (License): Likewise. * modules/inet_ntop (License): Likewise. * modules/malloc (License): Likewise. * modules/malloca (License): Likewise. * modules/memmem (License): Likewise. * modules/mempcpy (License): Likewise. * modules/memset (License): Likewise. * modules/minmax (License): Likewise. * modules/mktime (License): Likewise. * modules/netinet_in (License): Likewise. * modules/pathmax (License): Likewise. * modules/poll (License): Likewise. * modules/regex (License): Likewise. * modules/snprintf (License): Likewise. * modules/stdbool (License): Likewise. * modules/stdint (License): Likewise. * modules/stdio (License): Likewise. * modules/strcase (License): Likewise. * modules/strcasestr (License): Likewise. * modules/strdup (License): Likewise. * modules/string (License): Likewise. * modules/strndup (License): Likewise. * modules/strnlen (License): Likewise. * modules/strpbrk (License): Likewise. * modules/strptime (License): Likewise. * modules/strsep (License): Likewise. * modules/sys_select (License): Likewise. * modules/sys_socket (License): Likewise. * modules/sys_stat (License): Likewise. * modules/sys_time (License): Likewise. * modules/time (License): Likewise. * modules/time_r (License): Likewise. * modules/timegm (License): Likewise. * modules/unistd (License): Likewise. * modules/vsnprintf (License): Likewise. * modules/wctype (License): Likewise. 2007-07-16 Ralf Wildenhues * modules/argz (License): LGPLv2+. 2007-07-15 Karl Berry * doc/gnulib.texi: revise node structure per new fdl.texi. 2007-07-14 Bruno Haible * lib/uniname/gen-uninames.lisp (main): Emit a "do not edit" line to the output file. * lib/uniname/uninames.h: Regenerated. 2007-07-14 Karl Berry * doc/*gpl*.texi, doc/fdl.texi: new versions, consistently omitting sectioning and index commands. 2007-07-13 Bruno Haible New gnulib-tool option --more-symlinks. * gnulib-tool (func_usage): Document --more-symlinks. (do_copyrights): New variable. Recognize option --more-symlinks. (func_import): Don't add a copyright notice transform to sed_transform_lib_file if do_copyrights is empty. 2007-07-13 Bruno Haible * lib/vasnprintf.c (decimal_point_char): Define also if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !NEED_PRINTF_DIRECTIVE_A. Reported by Clemens Koller via Gary V. Vaughan . 2007-07-13 Paul Eggert * lib/inttypes_.h: Undo previous change, since it was fixed in a different way in the 2007-07-02 fix to m4/inttypes.m4. 2007-07-13 Bruno Haible * lib/stdint_.h: Fix typo: _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H was misspelled as _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H. 2007-07-13 Jim Meyering df: Don't fail for Tru64's "file-on-file mount". * m4/fsusage.m4 (gl_FSUSAGE): Reject Tru64's buggy statvfs, so we fall through and use statfs instead. Details here: Reported by Albert Chin. 2007-07-13 Bruno Haible * modules/alloca-opt (License): Use the synonymous term "LGPLv2+". * modules/configmake (License): Likewise. * modules/gettext (License): Likewise. * modules/gettext-h (License): Likewise. * modules/include_next (License): Likewise. * modules/link-warning (License): Likewise. * modules/localcharset (License): Likewise. * modules/localename (License): Likewise. * modules/lock (License): Likewise. * modules/relocatable-lib-lgpl (License): Likewise. * modules/size_max (License): Likewise. * modules/vasnprintf (License): Likewise. * modules/wchar (License): Likewise. * modules/xsize (License): Likewise. 2007-07-13 Bruno Haible * gnulib-tool (func_import): Treat LGPLv2 as synonymous to LGPL. (func_create_testdir): Handle copying terms "GPLv2+" and "LGPLv2+". 2007-07-12 Bruno Haible * doc/gnulib-intro.texi (Copyright): Clarify the license abbreviations in the modules files. 2007-07-11 Karl Berry * MODULES.html.sh (func_module): use sed -e '\|^'"${includefile}"'$|d' instead of /.../d, to avoid errors on $includefile's containing /. 2007-07-10 Sergey Poznyakoff * gnulib-tool (func_import): Avoid duplication of --avoid statements (func_dest_tmpfilename,func_create_testdir): Translate `-' in file names to `_' in variable names. 2007-07-10 Eric Blake * lib/version-etc.c (version_etc_va): Default to GPLv3+. * NEWS: Document this change. 2007-07-08 Bruno Haible Update to Unicode 5.0. * lib/uniwidth/width.c (nonspacing_table_data): Add U+00AD, U+0350..U+035F, U+05A2, U+05BA, U+05C5, U+05C7, U+0600..U+0603, U+0610..U+0615, U+0656..U+065E, U+07EB..U+07F3, U+0A01, U+0AE2..U+0AE3, U+0CBC. Remove U+0CBF, U+0CC6. Add U+0CE2..U+0CE3, U+135F, U+17B4..U+17B5, U+17DD. Remove U+180E. Add U+1920..U+1922, U+1927..U+192B, U+1932, U+1939..U+193B, U+1A17..U+1A18, U+1B00..U+1B03, U+1B34, U+1B36..U+1B3A, U+1B3C, U+1B42, U+1B6B..U+1B73, U+1DC0..U+1DCA, U+1DFE..U+1DFF, U+20EB..U+20EF, U+A802, U+A806, U+A80B, U+A825..U+A826, U+10A01..U+10A03, U+10A05..U+10A06, U+10A0C..U+10A0F, U+10A38..U+10A3A, U+10A3F, U+1D242..U+1D244. (nonspacing_table_ind): Update. (uc_width): Assign width 0 to U+E0100..U+E01EF. Assign width 1 to U+4DC0..U+4DFF. Assign width 2 to U+2329..U+232A, U+FE10..U+FE1F. 2007-07-08 Bruno Haible Update to Unicode 5.0. * lib/uniname/gen-uninames.lisp (main): Add the range 0x12xxx to the code transform. Extend the name index field of unicode_name_to_code and unicode_code_to_name from 16 to 24 bits. * lib/uniname/uniname.c (unicode_character_name, unicode_name_character): Add the range 0x12xxx to the code transform. * lib/uniname/uninames.h: Regenerated. * tests/uniname/UnicodeDataNames.txt: Update to Unicode 5.0. 2007-07-07 Bruno Haible * modules/wcwidth-tests: New file. * tests/test-wcwidth.c: New file. Work around MacOS X wcwidth() bug. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test against MacOS X 10.3 bug. * lib/wcwidth.c: Include localcharset.h, streq.h, uniwidth.h. (rpl_wcwidth): Special-case the UTF-8 locales. Fall back to the original wcwidth in non-UTF-8 locales. * modules/wcwidth (Depends-on): Add localcharset, streq, uniwidth/width. * doc/functions/wcwidth.texi: Update. 2007-07-07 Bruno Haible * lib/wchar_.h: Include the GL_LINK_WARNING macro. (wcwidth): New declaration. * m4/wchar.m4 (gl_WCHAR_MODULE_INDICATOR, gl_WCHAR_H_DEFAULTS): New macros. (gl_WCHAR_H): Require gl_WCHAR_H_DEFAULTS. Don't set WCHAR_H to empty here. Prepare for creating unconditionally. * modules/wchar (Depends-on): Add link-warning. (Makefile.am): Substitute also GNULIB_WCWIDTH, HAVE_DECL_WCWIDTH, REPLACE_WCWIDTH, and GL_LINK_WARNING. * lib/wcwidth.h: Remove file. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Require gl_WCHAR_H_DEFAULTS. Set HAVE_DECL_WCWIDTH, REPLACE_WCWIDTH, WCHAR_H. * modules/wcwidth (Files): Remove lib/wcwidth.h. (configure.ac): Invoke gl_WCHAR_MODULE_INDICATOR. (Include): Replace wcwidth.h with . * lib/wcwidth.c: Include instead of wcwidth.h. * lib/mbchar.h: Don't include wcwidth.h. * lib/mbswidth.c: Likewise. * NEWS: Mention the change. 2007-07-07 Bruno Haible * lib/wcwidth.c: New file, extracted from lib/wcwidth.h. * lib/wcwidth.h: Don't include wctype.h. Replace inline function definition with an external declaration. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Use wcwidth.c when wcwidth is not defined as a function. Remove AC_C_INLINE requirement. * modules/wcwidth (Files): Add lib/wcwidth.c. (Makefile.am): Remove redundant statement. 2007-07-07 Bruno Haible * MODULES.html.sh (Unicode string functions): Add the new modules. * tests/uniwidth/test-u32-strwidth.c: New file. * modules/uniwidth/u32-strwidth-tests: New file. * lib/uniwidth/u32-strwidth.c: New file. * modules/uniwidth/u32-strwidth: New file. * tests/uniwidth/test-u16-strwidth.c: New file. * modules/uniwidth/u16-strwidth-tests: New file. * lib/uniwidth/u16-strwidth.c: New file. * modules/uniwidth/u16-strwidth: New file. * tests/uniwidth/test-u8-strwidth.c: New file. * modules/uniwidth/u8-strwidth-tests: New file. * lib/uniwidth/u8-strwidth.c: New file. * modules/uniwidth/u8-strwidth: New file. * tests/uniwidth/test-u32-width.c: New file. * modules/uniwidth/u32-width-tests: New file. * lib/uniwidth/u32-width.c: New file. * modules/uniwidth/u32-width: New file. * tests/uniwidth/test-u16-width.c: New file. * modules/uniwidth/u16-width-tests: New file. * lib/uniwidth/u16-width.c: New file. * modules/uniwidth/u16-width: New file. * tests/uniwidth/test-u8-width.c: New file. * modules/uniwidth/u8-width-tests: New file. * lib/uniwidth/u8-width.c: New file. * modules/uniwidth/u8-width: New file. * tests/uniwidth/test-uc_width.c: New file. * modules/uniwidth/width-tests: New file. * lib/uniwidth/width.c: New file, from GNU libiconv. * lib/uniwidth/cjk.h: New file, from GNU libiconv. * modules/uniwidth/width: New file. * lib/uniwidth.h: New file, from GNU libiconv. * modules/uniwidth/base: New file. 2007-07-07 Bruno Haible * lib/uniname.h: New file, from GNU gettext. * lib/uniname/gen-uninames.lisp: New file, from GNU gettext. * lib/uniname/uninames.h: New file, from GNU gettext. * lib/uniname/uniname.c: New file, from GNU gettext. * tests/uniname/test-uninames.sh: New file. * tests/uniname/test-uninames.c: New file, from GNU gettext. * tests/uniname/UnicodeDataNames.txt: New file, from GNU gettext. * modules/uniname/base: New file. * modules/uniname/uniname: New file. * modules/uniname/uniname-tests: New file. * MODULES.html.sh (Unicode string functions): Add the new modules. 2007-07-06 Bruno Haible * doc/Makefile (TEXI2HTML): Specify a --reference-limit. 2007-07-06 Bruno Haible * lib/sys_time_.h: Use a recursion-safe inclusion guard rather than a split double-inclusion guard. Needed for cygwin, where includes which includes which include . Reported by Eric Blake. 2007-07-06 Eric Blake Fix testing canonicalize on cygwin. * modules/canonicalize-lgpl-tests (test_canonicalize_lgpl_LDADD): Revert patch from 2007-06-19. * tests/test-canonicalize-lgpl.c (main): Instead, skip test when canonicalize module is also in use. * tests/test-canonicalize.c: New file. * tests/test-canonicalize.sh: Likewise. * modules/canonicalize-tests: Likewise. 2007-07-06 Jim Meyering * lib/getugroups.c (getugroups): Detect getgrent failure. Adjust comment to reflect reality: this function may return -1. 2007-07-05 Sergey Poznyakoff * build-aux/bootstrap (TP_URL,get_translations): Update to use the new TP address. (usage): Fix typo (gnulib_mk): New variable. 2007-07-05 Jim Meyering Don't let endgrent clobber errno, no matter how improbable. * lib/getugroups.c (getugroups): Save and restore errno around endgrent call. Close the group DB even when failing with 2^31 or more members. * lib/getugroups.c (getugroups): Don't return without calling endgrent. 2007-07-04 Jim Meyering * lib/getugroups.h: New file. * lib/getugroups.c: Include "getugroups.h". Remove uses of "register" keyword. Move local variable, "cp", down into scope where used. Give "username" parameter the "const" attribute. * modules/getugroups (Files): Add lib/getugroups.h 2007-07-04 Karl Berry * MODULES.html.sh (func_all_modules): Complete rename of gpl/lgpl to gpl-2.0 and lgpl-2.1, and add gpl-3.0. 2007-07-02 Bruno Haible * m4/inttypes.m4 (gl_INTTYPES_H): Define __STDC_LIMIT_MACROS in C++ mode, when inttypes.h comes from gnulib. Reported by Joel E. Denny . 2007-07-02 Simon Josefsson * NEWS: Mention lgpl module name change. * modules/lgpl-2.1: Renamed from lgpl. * NEWS: Mention gpl module name change. * modules/gpl-3.0: New file, based on gpl-2.0. * modules/gpl-2.0: Renamed from gpl. * modules/gpl: Fix filename, doc/gpl.texi is now found at doc/gpl-2.0.texi. 2007-07-02 Paul Eggert * lib/inttypes_.h [defined __cplusplus&&!defined __STDC_LIMIT_MACROS]: #define __STDC_LIMIT_MACROS temporarily while including , so that __STDC_LIMIT_MACROS is defined. Problem reported by Joel E. Denny in . 2007-07-01 Bruno Haible * lib/unistdio.h: New file. * lib/unistdio/u-asnprintf.h: New file. * lib/unistdio/u-asprintf.h: New file. * lib/unistdio/u-printf-args.c: New file. * lib/unistdio/u-printf-args.h: New file. * lib/unistdio/u-printf-parse.h: New file. * lib/unistdio/u-snprintf.h: New file. * lib/unistdio/u-sprintf.h: New file. * lib/unistdio/u-vasprintf.h: New file. * lib/unistdio/u-vsnprintf.h: New file. * lib/unistdio/u-vsprintf.h: New file. * lib/unistdio/ulc-asnprintf.c: New file. * lib/unistdio/ulc-asprintf.c: New file. * lib/unistdio/ulc-fprintf.c: New file, based on lib/fprintf.c. * lib/unistdio/ulc-printf-parse.c: New file. * lib/unistdio/ulc-snprintf.c: New file. * lib/unistdio/ulc-sprintf.c: New file. * lib/unistdio/ulc-vasnprintf.c: New file. * lib/unistdio/ulc-vasprintf.c: New file. * lib/unistdio/ulc-vfprintf.c: New file, based on lib/vfprintf.c. * lib/unistdio/ulc-vsnprintf.c: New file. * lib/unistdio/ulc-vsprintf.c: New file. * lib/unistdio/u8-asnprintf.c: New file. * lib/unistdio/u8-asprintf.c: New file. * lib/unistdio/u8-printf-parse.c: New file. * lib/unistdio/u8-snprintf.c: New file. * lib/unistdio/u8-sprintf.c: New file. * lib/unistdio/u8-vasnprintf.c: New file. * lib/unistdio/u8-vasprintf.c: New file. * lib/unistdio/u8-vsnprintf.c: New file. * lib/unistdio/u8-vsprintf.c: New file. * lib/unistdio/u8-u8-asnprintf.c: New file. * lib/unistdio/u8-u8-asprintf.c: New file. * lib/unistdio/u8-u8-snprintf.c: New file. * lib/unistdio/u8-u8-sprintf.c: New file. * lib/unistdio/u8-u8-vasnprintf.c: New file. * lib/unistdio/u8-u8-vasprintf.c: New file. * lib/unistdio/u8-u8-vsnprintf.c: New file. * lib/unistdio/u8-u8-vsprintf.c: New file. * lib/unistdio/u16-asnprintf.c: New file. * lib/unistdio/u16-asprintf.c: New file. * lib/unistdio/u16-printf-parse.c: New file. * lib/unistdio/u16-snprintf.c: New file. * lib/unistdio/u16-sprintf.c: New file. * lib/unistdio/u16-vasnprintf.c: New file. * lib/unistdio/u16-vasprintf.c: New file. * lib/unistdio/u16-vsnprintf.c: New file. * lib/unistdio/u16-vsprintf.c: New file. * lib/unistdio/u16-u16-asnprintf.c: New file. * lib/unistdio/u16-u16-asprintf.c: New file. * lib/unistdio/u16-u16-snprintf.c: New file. * lib/unistdio/u16-u16-sprintf.c: New file. * lib/unistdio/u16-u16-vasnprintf.c: New file. * lib/unistdio/u16-u16-vasprintf.c: New file. * lib/unistdio/u16-u16-vsnprintf.c: New file. * lib/unistdio/u16-u16-vsprintf.c: New file. * lib/unistdio/u32-asnprintf.c: New file. * lib/unistdio/u32-asprintf.c: New file. * lib/unistdio/u32-printf-parse.c: New file. * lib/unistdio/u32-snprintf.c: New file. * lib/unistdio/u32-sprintf.c: New file. * lib/unistdio/u32-vasnprintf.c: New file. * lib/unistdio/u32-vasprintf.c: New file. * lib/unistdio/u32-vsnprintf.c: New file. * lib/unistdio/u32-vsprintf.c: New file. * lib/unistdio/u32-u32-asnprintf.c: New file. * lib/unistdio/u32-u32-asprintf.c: New file. * lib/unistdio/u32-u32-snprintf.c: New file. * lib/unistdio/u32-u32-sprintf.c: New file. * lib/unistdio/u32-u32-vasnprintf.c: New file. * lib/unistdio/u32-u32-vasprintf.c: New file. * lib/unistdio/u32-u32-vsnprintf.c: New file. * lib/unistdio/u32-u32-vsprintf.c: New file. * tests/unistdio/test-ulc-asnprintf1.c: New file. * tests/unistdio/test-ulc-asnprintf1.h: New file. * tests/unistdio/test-ulc-printf1.h: New file. * tests/unistdio/test-ulc-vasnprintf1.c: New file. * tests/unistdio/test-ulc-vasnprintf2.c: New file. * tests/unistdio/test-ulc-vasnprintf2.sh: New file. * tests/unistdio/test-ulc-vasnprintf3.c: New file. * tests/unistdio/test-ulc-vasnprintf3.sh: New file. * tests/unistdio/test-ulc-vasprintf1.c: New file. * tests/unistdio/test-ulc-vsnprintf1.c: New file. * tests/unistdio/test-ulc-vsprintf1.c: New file. * tests/unistdio/test-u8-asnprintf1.c: New file. * tests/unistdio/test-u8-asnprintf1.h: New file. * tests/unistdio/test-u8-printf1.h: New file. * tests/unistdio/test-u8-vasnprintf1.c: New file. * tests/unistdio/test-u8-vasnprintf2.c: New file. * tests/unistdio/test-u8-vasnprintf2.sh: New file. * tests/unistdio/test-u8-vasnprintf3.c: New file. * tests/unistdio/test-u8-vasnprintf3.sh: New file. * tests/unistdio/test-u8-vasprintf1.c: New file. * tests/unistdio/test-u8-vsnprintf1.c: New file. * tests/unistdio/test-u8-vsprintf1.c: New file. * tests/unistdio/test-u16-asnprintf1.c: New file. * tests/unistdio/test-u16-asnprintf1.h: New file. * tests/unistdio/test-u16-printf1.h: New file. * tests/unistdio/test-u16-vasnprintf1.c: New file. * tests/unistdio/test-u16-vasnprintf2.c: New file. * tests/unistdio/test-u16-vasnprintf2.sh: New file. * tests/unistdio/test-u16-vasnprintf3.c: New file. * tests/unistdio/test-u16-vasnprintf3.sh: New file. * tests/unistdio/test-u16-vasprintf1.c: New file. * tests/unistdio/test-u16-vsnprintf1.c: New file. * tests/unistdio/test-u16-vsprintf1.c: New file. * tests/unistdio/test-u32-asnprintf1.c: New file. * tests/unistdio/test-u32-asnprintf1.h: New file. * tests/unistdio/test-u32-printf1.h: New file. * tests/unistdio/test-u32-vasnprintf1.c: New file. * tests/unistdio/test-u32-vasnprintf2.c: New file. * tests/unistdio/test-u32-vasnprintf2.sh: New file. * tests/unistdio/test-u32-vasnprintf3.c: New file. * tests/unistdio/test-u32-vasnprintf3.sh: New file. * tests/unistdio/test-u32-vasprintf1.c: New file. * tests/unistdio/test-u32-vsnprintf1.c: New file. * tests/unistdio/test-u32-vsprintf1.c: New file. * modules/unistdio/base: New file. * modules/unistdio/u-printf-args: New file. * modules/unistdio/ulc-asnprintf: New file. * modules/unistdio/ulc-asprintf: New file. * modules/unistdio/ulc-fprintf: New file. * modules/unistdio/ulc-printf-parse: New file. * modules/unistdio/ulc-snprintf: New file. * modules/unistdio/ulc-sprintf: New file. * modules/unistdio/ulc-vasnprintf: New file. * modules/unistdio/ulc-vasprintf: New file. * modules/unistdio/ulc-vfprintf: New file. * modules/unistdio/ulc-vsnprintf: New file. * modules/unistdio/ulc-vsprintf: New file. * modules/unistdio/u8-asnprintf: New file. * modules/unistdio/u8-asprintf: New file. * modules/unistdio/u8-printf-parse: New file. * modules/unistdio/u8-snprintf: New file. * modules/unistdio/u8-sprintf: New file. * modules/unistdio/u8-vasnprintf: New file. * modules/unistdio/u8-vasprintf: New file. * modules/unistdio/u8-vsnprintf: New file. * modules/unistdio/u8-vsprintf: New file. * modules/unistdio/u8-u8-asnprintf: New file. * modules/unistdio/u8-u8-asprintf: New file. * modules/unistdio/u8-u8-snprintf: New file. * modules/unistdio/u8-u8-sprintf: New file. * modules/unistdio/u8-u8-vasnprintf: New file. * modules/unistdio/u8-u8-vasprintf: New file. * modules/unistdio/u8-u8-vsnprintf: New file. * modules/unistdio/u8-u8-vsprintf: New file. * modules/unistdio/u16-asnprintf: New file. * modules/unistdio/u16-asprintf: New file. * modules/unistdio/u16-printf-parse: New file. * modules/unistdio/u16-snprintf: New file. * modules/unistdio/u16-sprintf: New file. * modules/unistdio/u16-vasnprintf: New file. * modules/unistdio/u16-vasprintf: New file. * modules/unistdio/u16-vsnprintf: New file. * modules/unistdio/u16-vsprintf: New file. * modules/unistdio/u16-u16-asnprintf: New file. * modules/unistdio/u16-u16-asprintf: New file. * modules/unistdio/u16-u16-snprintf: New file. * modules/unistdio/u16-u16-sprintf: New file. * modules/unistdio/u16-u16-vasnprintf: New file. * modules/unistdio/u16-u16-vasprintf: New file. * modules/unistdio/u16-u16-vsnprintf: New file. * modules/unistdio/u16-u16-vsprintf: New file. * modules/unistdio/u32-asnprintf: New file. * modules/unistdio/u32-asprintf: New file. * modules/unistdio/u32-printf-parse: New file. * modules/unistdio/u32-snprintf: New file. * modules/unistdio/u32-sprintf: New file. * modules/unistdio/u32-vasnprintf: New file. * modules/unistdio/u32-vasprintf: New file. * modules/unistdio/u32-vsnprintf: New file. * modules/unistdio/u32-vsprintf: New file. * modules/unistdio/u32-u32-asnprintf: New file. * modules/unistdio/u32-u32-asprintf: New file. * modules/unistdio/u32-u32-snprintf: New file. * modules/unistdio/u32-u32-sprintf: New file. * modules/unistdio/u32-u32-vasnprintf: New file. * modules/unistdio/u32-u32-vasprintf: New file. * modules/unistdio/u32-u32-vsnprintf: New file. * modules/unistdio/u32-u32-vsprintf: New file. * modules/unistdio/ulc-asnprintf-tests: New file. * modules/unistdio/ulc-vasnprintf-tests: New file. * modules/unistdio/ulc-vasprintf-tests: New file. * modules/unistdio/ulc-vsnprintf-tests: New file. * modules/unistdio/ulc-vsprintf-tests: New file. * modules/unistdio/u8-asnprintf-tests: New file. * modules/unistdio/u8-vasnprintf-tests: New file. * modules/unistdio/u8-vasprintf-tests: New file. * modules/unistdio/u8-vsnprintf-tests: New file. * modules/unistdio/u8-vsprintf-tests: New file. * modules/unistdio/u16-asnprintf-tests: New file. * modules/unistdio/u16-vasnprintf-tests: New file. * modules/unistdio/u16-vasprintf-tests: New file. * modules/unistdio/u16-vsnprintf-tests: New file. * modules/unistdio/u16-vsprintf-tests: New file. * modules/unistdio/u32-asnprintf-tests: New file. * modules/unistdio/u32-vasnprintf-tests: New file. * modules/unistdio/u32-vasprintf-tests: New file. * modules/unistdio/u32-vsnprintf-tests: New file. * modules/unistdio/u32-vsprintf-tests: New file. * MODULES.html.sh (Unicode string functions): Add the new modules. 2007-07-01 Bruno Haible * lib/sprintf.c (sprintf): Limit the available length estimation, to avoid address wraparound. * lib/vsprintf.c (vsprintf): Likewise. * modules/sprintf-posix (Dependencies): Add stdint. * modules/vsprintf-posix (Dependencies): Likewise. 2007-07-01 Bruno Haible * gnulib-tool (self_abspathname): Determine PATH_SEPARATOR and handle Windows PATH as well. Conservative double-quoting. Comments. 2007-07-01 Bruno Haible Eric Blake Ralf Wildenhues * gnulib-tool (self_abspathname): Fix algorithm to cope with empty components in $PATH, denoting '.'. 2007-07-01 Ralf Wildenhues * gnulib-tool: Fix indentation. (func_create_megatestdir): Likewise. Report by Bruno Haible. 2007-06-30 Ralf Wildenhues Sync from Automake. * build-aux/gnupload: Fix shell portability issues with for loops. Report by Karl Berry. 2007-06-29 Simon Josefsson * build-aux/maint.mk (POURL): Use translationproject.org. 2007-06-27 Simon Josefsson Bruno Haible * m4/getaddrinfo.m4 (gl_GETADDRINFO): Require gl_HEADER_SYS_SOCKET before using HAVE_WS2TCPIP_H. Check for gai_strerror through an explicit link test, rather than AC_REPLACE_FUNCS - for mingw. (gl_PREREQ_GETADDRINFO): Require gl_HEADER_SYS_SOCKET before using HAVE_SYS_SOCKET_H and HAVE_WS2TCPIP_H. 2007-06-27 Bruno Haible * build-aux/config.rpath: Upgrade to libtool-1.5.24. * build-aux/config.libpath: Upgrade to libtool-1.5.24. 2007-06-26 Karl Berry * MODULES.html.sh: remove xreadlink-with-size. 2007-06-23 Paul Eggert * lib/time_.h: Port to Solaris 8 with Sun Studio 11, using a method that I hope also handles the double-include problem noted by Bruno Haible in . 2007-06-23 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Don't let the 'mostlyclean' target fail if the last subdirectory could not be removed. Reported by Karl Berry. 2007-06-23 Bruno Haible * gnulib-tool (echo): Add a speedier workaround for ksh. * tests/test-echo.sh: Likewise. 2007-06-23 Bruno Haible * gnulib-tool (echo): Add workarounds also for bash versions < 2.04. * tests/test-echo.sh: Likewise. 2007-06-23 Ralf Wildenhues * gnulib-tool (IFS): Initialize early, so we don't set it to empty later. (self_abspathname): Rewrite algorithm to set it, reindent. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am) (func_create_megatestdir): Merge some sed scripts. 2007-06-23 Paul Eggert * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Check some typos exposed by Sun Studio 11 cc on Solaris 8. 2007-06-22 Bruno Haible * gnulib-tool (echo): Ensure the echo primitive does not interpret backslashes. * tests/test-echo.sh: New file. 2007-06-22 Ralf Wildenhues * gnulib-tool (func_add_or_update, func_create_testdir): Do not simplify `sed_replace_build_aux' scripts, they are portable but echoing them with `echo' is not. Report and analysis by Fernando Ferreira . 2007-06-21 Karl Berry * config/srclist.txt: guess we can't handle the licenses via srclist at the moment. 2007-06-21 Paul Eggert * MODULES.html.sh: Add include_next. * modules/include_next: New file. 2007-06-20 Paul Eggert * m4/include_next.m4 (gl_INCLUDE_NEXT): Define and AC_SUBST INCLUDE_NEXT. (gl_CHECK_NEXT_HEADERS): New macro. * m4/fcntl_h.m4 (gl_FCNTL_H): use gl_CHECK_NEXT_HEADERS instead of the obsolescent gl_ABSOLUTE_HEADER. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Likewise. * m4/float_h.m4 (gl_FLOAT_H): Likewise. * m4/iconv_h.m4 (gl_ICONV_H): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Likewise. * m4/locale_h.m4 (gl_LOCALE_H): Likewise. * m4/math_h.m4 (gl_MATH_H): Likewise. * m4/netinet_in_h.m4 (gl_HEADER_NETINET_IN): Likewise. * m4/search_h.m4 (gl_SEARCH_H): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Likewise. * m4/stdint.m4 (gl_STDINT_H): Likewise. * m4/stdio_h.m4 (gl_STDIO_H): Likewise. * m4/stdlib_h.m4 (gl_STDLIB_H): Likewise. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Likewise. * m4/sys_select_h.m4 (gl_HEADER_SYS_SELECT): Likewise. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Likewise. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Likewise. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Likewise. * m4/sysexits.m4 (gl_SYSEXITS): Likewise. * m4/time_h.m4 (gl_HEADER_TIME_H_BODY): Likewise. * m4/unistd_h.m4 (gl_UNISTD_H): Likewise. * m4/wchar.m4 (gl_WCHAR_H): Likewise. * m4/wctype.m4 (gl_WCTYPE_H): Likewise. * m4/inttypes.m4 (gl_INTTYPES_H): Define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H to avoid the problem of unclean builds, since ABSOLUTE_INTTYPES_H is no longer being defined. * m4/stdint.m4 (gl_STDINT_H): Likewise, for _GL_JUST_INCLUDE_SYSTEM_STDINT_H. * lib/fcntl_.h: Use @INCLUDE_NEXT@ @NEXT_foo_H@ rather than @HAVE_INCLUDE_NEXT@ and @ABSOLUTE_foo_H@. * lib/float_.h: Likewise. * lib/inttypes_.h: Likewise. * lib/math_.h: Likewise. * lib/search_.h: Likewise. * lib/signal_.h: Likewise. * lib/stdint_.h: Likewise. * lib/stdio_.h: Likewise. * lib/stdlib_.h: Likewise. * lib/string_.h: Likewise. * lib/sys_stat_.h: Likewise. * lib/sys_time_.h: Likewise. * lib/time_.h: Likewise. * lib/unistd_.h: Likewise. * lib/wchar_.h: Likewise. * lib/wctype_.h: Likewise. * lib/dirent_.h: Likewise. * lib/iconv_.h: Likewise. * lib/locale_.h: Likewise. * lib/netinet_in_.h: Likewise. * lib/sys_select_.h: Likewise. * lib/sys_socket_.h: Likewise. * lib/sysexits_.h: Likewise. * modules/fcntl (Depends-on): Depend on include_next, not absolute_header. (Makefile): Substitute INCLUDE_NEXT and NEXT_foo_H, not HAVE_INCLUDE_NEXT and ABSOLUTE_foo_H. * modules/fchdir: Likewise. * modules/float: Likewise. * modules/iconv_open: Likewise. * modules/inttypes: Likewise. * modules/locale: Likewise. * modules/math: Likewise. * modules/netinet_in: Likewise. * modules/search: Likewise. * modules/signal: Likewise. * modules/stdint: Likewise. * modules/stdio: Likewise. * modules/stdlib: Likewise. * modules/string: Likewise. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_stat: Likewise. * modules/sys_time: Likewise. * modules/sysexits: Likewise. * modules/time: Likewise. * modules/unistd: Likewise. * modules/wchar: Likewise. * modules/wctype: Likewise. * modules/sys_stat: Change maintainer to "all". * modules/unistd: Likewise. 2007-06-20 Karl Berry * config/srclist.txt: track www changes in license files. 2007-06-20 Sergey Poznyakoff * build-aux/bootstrap: Remove stray dot. Make sure build_aux settings are honored when linking gnulib_extra_files. 2007-06-19 Eric Blake * modules/canonicalize-lgpl-tests (test_canonicalize_lgpl_LDADD): Allow compilation on cygwin. 2007-06-19 Jim Meyering xreadlink-with-size: Remove module. No longer used. Ex-callers now use xreadlink or mreadlink-with-size. * modules/xreadlink-with-size: Remove module. * lib/xreadlink-with-size.c: Remove file. * lib/xreadlink.h (xreadlink_with_size): Remove prototype. (xreadlink): Remove inaccurate comment. The one in xreadlink.c, just before the function definition *is* accurate. Eliminate one way canonicalize_filename_mode could exit. * lib/canonicalize.c (canonicalize_filename_mode): Use mreadlink_with_size, not xreadlink_with_size. 2007-06-18 Paul Eggert Detect porting problems to FreeBSD/arm, which has time_t wider than long int. Original problem reported for GNU diff by Xin Li in . * modules/getdate (Depends-on): Add intprops, verify. * lib/getdate.y: Include intprops.h, verify.h. Verify that time_t is an integer type no wider than long int. 2007-06-18 Jim Meyering New module: mreadlink-with-size. * MODULES.html.sh: Add mreadlink-with-size. * modules/mreadlink-with-size: New module * modules/canonicalize (Depends-on): Depend on mreadlink-with-size, not xreadlink-with-size. * lib/mreadlink-with-size.c, lib/mreadlink.h: New files. 2007-06-16 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Catch the MacOS X 10.4 bug. * doc/functions/frexpl.texi: Document the MacOS X 10.4 bug. Reported by Gary V. Vaughan . 2007-06-15 Paul Eggert Revamp lchown so that it lives in unistd.h where it belongs. * lib/lchown.h: Remove. * lib/dirchownmod.c: Don't include lib/lchown.h. * lib/fchownat.c: Likewise. * lib/openat.c: Likewise. * lib/lchown.c (REPLACE_CHOWN): Define to 0 if the system chown does not follow symlinks. (EOPNOTSUPP): Define if not defined. * lib/unistd_.h (chown): Do not replace if REPLADE_CHOWN is defined to 0. (lchown): New decl. * m4/lchown.m4 (gl_FUNC_LCHOWN): Require gl_UNISTD_H_DEFAULTS. Do not check for lchown decl. Set REPLACE_LCHOWN. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set GNULIB_LCHOWN, REPLACE_LCHOWN. * modules/chown: Make it clear it follows symlinks. * modules/lchown: Make it clear it doesn't follow symlinks. (Files): Remove lib/lchown.h (Depends-on): Add unistd. (configure.ac): Add gl_UNISTD_MODULE_INDICATOR([lchown]). (Include): Include , not "lchown.h". * modules/unistd (unistd.h): Substitude GNULIB_LCHOWN and REPLACE_LCHOWN. 2007-06-15 Jim Meyering Change license (GPL to LGPL) of fsusage and dependents. * modules/fsusage (License): Change to LGPL. * modules/full-read (License): Likewise. * modules/full-write (License): Likewise. * modules/safe-read (License): Likewise. * modules/safe-write (License): Likewise. 2007-06-14 Ben Pfaff Missing part of allocsa -> malloca transition. * modules/relocatable-prog-wrapper: gl_ALLOCSA should be gl_MALLOCA. 2007-06-12 Bruno Haible * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Guess no when cross-compiling to ia64, x86_64, i386. Reported by Eric Blake. 2007-06-12 Bruno Haible * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Guess no also when cross-compiling to x86_64. 2007-06-12 Paul Eggert * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Fix POSIX sed portability glitch reported by Ralf Wildenhues in . * m4/regex.m4 (gl_REGEX): Catch a bug with [[:alnum:]_-] reported by Vin Shelton. 2007-06-11 Bruno Haible * lib/printf-args.c (PRINTF_FETCHARGS) [ENABLE_UNISTDIO]: Fix NULL replacement string. Reported by Eric Blake. 2007-06-10 Bruno Haible Prepare vasnprintf code for use with Unicode strings. * lib/printf-args.h (PRINTF_FETCHARGS): New macro. (arg_type) [ENABLE_UNISTDIO]: Define TYPE_U8_STRING, TYPE_U16_STRING, TYPE_U32_STRING. (argument) [ENABLE_UNISTDIO]: Add a_u8_string, a_u16_string, a_u32_string variants. (PRINTF_FETCHARGS): Renamed from printf_fetchargs. * lib/printf-args.c: Don't include config.h and the specification header if PRINTF_FETCHARGS is already defined. (PRINTF_FETCHARGS): Renamed from printf_fetchargs. (PRINTF_FETCHARGS) [ENABLE_UNISTDIO]: Add code for TYPE_U8_STRING, TYPE_U16_STRING, TYPE_U32_STRING. * lib/printf-parse.h [ENABLE_UNISTDIO] (u8_directive, u8_directives, u16_directive, u16_directives, u32_directive, u32_directives): New types. (ulc_printf_parse, u8_printf_parse, u16_printf_parse, u32_printf_parse): New declarations. * lib/printf-parse.c: Don't include config.h and the specification header if PRINTF_PARSE is already defined. Eliminate the set of parameters for WIDE_CHAR_VERSION; the user of this file must provide them now. Include c-ctype.h. (PRINTF_PARSE) [ENABLE_UNISTDIO]: Add code implementing the 'U' directive and CHAR_T_ONLY_ASCII. * lib/vasnprintf.c: Don't include config.h and the specification header if VASNPRINTF is already defined. (DCHAR_IS_TCHAR, DCHAR_CPY): New macros. (VASNPRINTF): Use PRINTF_FETCHARGS instead of printf_fetchargs. Use DCHAR_CPY. Handle the case that DCHAR_T and FCHAR_T are not the same type. Handle the case that TCHAR_T and FCHAR_T are not of the same size. Handle the case that DCHAR_T and TCHAR_T are not the same type, add a conversion from TCHAR_T[] to DCHAR_T[], and rework the padding code accordingly. (VASNPRINTF) [ENABLE_UNISTDIO]: Implement the 'U' directive. Enable pad_ourselves also in this case, with the 'c' and 's' directives, and with a different notion of "width". * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_WITH_EXTRAS): New macros. 2007-06-10 Bruno Haible * modules/unistr/u32-mbsnlen: New file. * lib/unistr/u32-mbsnlen.c: New file. * modules/unistr/u16-mbsnlen: New file. * lib/unistr/u16-mbsnlen.c: New file. * modules/unistr/u8-mbsnlen: New file. * lib/unistr/u8-mbsnlen.c: New file. * lib/unistr.h (u8_mbsnlen, u16_mbsnlen, u32_mbsnlen): New declarations. 2007-06-10 Bruno Haible * lib/string_.h (mbsnlen): New declaration. * lib/mbsnlen.c: New file. * m4/mbsnlen.m4: New file. * modules/mbsnlen: New file. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Set GNULIB_MBSNLEN. * modules/string (string.h): Substitute GNULIB_MBSNLEN. * MODULES.html.sh (Internationalization functions): Add mbsnlen. 2007-06-10 Bruno Haible * lib/mbslen.c: Include , needed for MB_CUR_MAX. 2007-06-10 Bruno Haible * lib/mbiter.h: Include , needed for ptrdiff_t. * lib/mbuiter.h: Likewise. 2007-06-10 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Check for _snprintf declaration. 2007-06-10 Karl Berry * config/srclist.txt: remove gettext entries, Bruno prefers to update individually. 2007-06-10 Bruno Haible * lib/vasnprintf.c (VASNPRINTF) [!USE_SNPRINTF]: Remove variable 'maxlen'. Ensure only length + width bytes are allocated, not length + 1 + width. 2007-06-09 Bruno Haible * lib/vasnprintf.c (FCHAR_T, DCHAR_T, TCHAR_T): New macros. (CHAR_T): Remove macro. (VASNPRINTF): Update. 2007-06-09 Bruno Haible * MODULES.html.sh (Unicode string functions): Add the new modules. * modules/uniconv/u32-conv-to-enc: New file. * lib/uniconv/u32-conv-to-enc.c: New file. * modules/uniconv/u32-conv-to-enc-tests: New file. * tests/uniconv/test-u32-conv-to-enc.c: New file. * modules/uniconv/u16-conv-to-enc: New file. * lib/uniconv/u16-conv-to-enc.c: New file. * lib/uniconv/u-conv-to-enc.h: New file. * modules/uniconv/u16-conv-to-enc-tests: New file. * tests/uniconv/test-u16-conv-to-enc.c: New file. * modules/uniconv/u8-conv-to-enc: New file. * lib/uniconv/u8-conv-to-enc.c: New file. * modules/uniconv/u8-conv-to-enc-tests: New file. * tests/uniconv/test-u8-conv-to-enc.c: New file. * lib/uniconv.h (u8_conv_to_encoding, u16_conv_to_encoding, u32_conv_to_encoding): New declarations. 2007-06-09 Bruno Haible * tests/uniconv/test-u32-strconv-to-enc.c (main): Remove unused code. 2007-06-09 Bruno Haible Rename 'allocsa' -> 'malloca', 'freesa' -> 'freea'. * modules/malloca: Renamed from modules/allocsa, updated. * lib/malloca.h: Renamed from lib/allocsa.h, updated. * lib/malloca.c: Renamed from lib/allocsa.c, updated. * lib/malloca.valgrind: Renamed from lib/allocsa.valgrind, updated. * m4/malloca.m4: Renamed from m4/allocsa.m4, updated. * modules/malloca-tests: Renamed from modules/allocsa-tests, updated. * tests/test-malloca.c: Renamed from tests/test-allocsa.c, updated. * modules/xmalloca: Renamed from modules/xallocsa, updated. * lib/xmalloca.h: Renamed from lib/xallocsa.h, updated. * lib/xmalloca.c: Renamed from lib/xallocsa.c, updated. * modules/c-strcasestr (Depends-on): Update. * lib/c-strcasestr.c: Update. * modules/c-strstr (Depends-on): Update. * lib/c-strstr.c: Update. * modules/canonicalize-lgpl (Depends-on): Update. * lib/canonicalize-lgpl.c: Update. * modules/clean-temp (Depends-on): Update. * lib/clean-temp.c: Update. * modules/csharpcomp (Depends-on): Update. * lib/csharpcomp.c: Update. * modules/csharpexec (Depends-on): Update. * lib/csharpexec.c: Update. * modules/javacomp (Depends-on): Update. * lib/javacomp.c: Update. * modules/javaexec (Depends-on): Update. * lib/javaexec.c: Update. * modules/mbscasestr (Depends-on): Update. * lib/mbscasestr.c: Update. * modules/mbsstr (Depends-on): Update. * lib/mbsstr.c: Update. * modules/setenv (Depends-on): Update. * lib/setenv.c: Update. * modules/strcasestr (Depends-on): Update. * lib/strcasestr.c: Update. * modules/striconveha (Depends-on): Update. * lib/striconveha.c: Update. * modules/relocatable-prog-wrapper (Files): Update. * lib/relocwrapper.c: Update. * build-aux/install-reloc: Update. * MODULES.html.sh (Memory management functions ): Update. 2007-06-08 Bruno Haible Port to uClibc. * lib/fbufmode.c (fbufmode): Add special code for uClibc. * lib/fpurge.c (fpurge): Likewise. * lib/freading.c (freading): Likewise. * lib/fseeko.c (rpl_fseeko): Likewise. * lib/fseterr.c (fseterr): Likewise. * lib/fwriting.c (fwriting): Likewise. * tests/test-fflush.c (main): Avoid a failure on uClibc. 2007-06-08 Bruno Haible * m4/intlmacosx.m4: New file, extracted from gettext.m4. * m4/gettext.m4 (gt_INTL_MACOSX): Remove macro, moved to intlmacosx.m4. * modules/gettext (Files): Add m4/intlmacosx.m4. 2007-06-07 Bruno Haible * modules/localename-tests: New file. * tests/test-localename.c: New file. New module 'localename'. * lib/localename.h: New file. * lib/localename.c: New file, from GNU gettext. * m4/localename.m4: New file. * modules/localename: New file. 2007-06-07 Bruno Haible Work around the lack of on some builds of uClibc. * doc/headers/wchar.texi: Update. * lib/wchar_.h: Include only if it exists. * m4/wchar.m4 (gl_WCHAR_H): Check for . Set HAVE_WCHAR_H. * m4/stdint.m4 (gl_STDINT_H): Check for . (gl_STDINT_TYPE_PROPERTIES): Don't try to include if it doesn't exist. * modules/wchar (wchar.h): Substitute HAVE_WCHAR_H. * modules/mbfile (Depends-on): Add wchar. * modules/mbiter (Depends-on): Likewise. * modules/mbuiter (Depends-on): Likewise. Reported by Simon Josefsson. 2007-06-06 Paul Eggert Work around problem reported by Steven M. Schweda in : Tru64 5.1B with the Compaq compiler environment installed declares an 'isblank' function but does not define it in the C library. * lib/fnmatch.c (isblank): Check for HAVE_ISBLANK, too. * lib/regex_internal.h (isblank): Likewise. * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for isblank existence. * m4/regex.m4 (gl_PREREQ_REGEX): Likewise. 2007-06-05 Bruno Haible Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64. * modules/printf-safe: New file. * modules/fprintf-posix (Depends-on): Add printf-safe. * modules/printf-posix (Depends-on): Likewise. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * m4/printf.m4 (gl_PRINTF_INFINITE_LONG_DOUBLE): Require AC_C_BIGENDIAN. Define CHECK_PRINTF_SAFE if printf-safe is used. Test non-IEEE numbers on i386, x86_64, ia64. When cross-compiling, guess "no" on i386, x86_64, ia64. * tests/test-snprintf-posix.h (LDBL80_WORDS): New macro. (test_function): Check result of %La, %Lf, %Le, %Lg on non-IEEE numbers on i386, x86_64, ia64. * tests/test-sprintf-posix.h (LDBL80_WORDS): New macro. (test_function): Check result of %La, %Lf, %Le, %Lg on non-IEEE numbers on i386, x86_64, ia64. * tests/test-vasnprintf-posix.c: Include float.h. (LDBL80_WORDS): New macro. (test_function): Check result of %La, %Lf, %Le, %Lg on non-IEEE numbers on i386, x86_64, ia64. * tests/test-vasprintf-posix.c: Include float.h. (LDBL80_WORDS): New macro. (test_function): Check result of %La, %Lf, %Le, %Lg on non-IEEE numbers on i386, x86_64, ia64. * tests/test-snprintf-posix.c: Include float.h. * tests/test-sprintf-posix.c: Likewise. * tests/test-vsnprintf-posix.c: Likewise. * tests/test-vsprintf-posix.c: Likewise. 2007-06-05 Bruno Haible Fix isnanl so that it recognizes non-IEEE numbers on i386, x86_64, ia64. * m4/isnanl.m4 (gl_FUNC_ISNANL_WORKS): Require AC_C_BIGENDIAN. Test non-IEEE numbers on i386, x86_64, ia64. (gl_LONG_DOUBLE_EXPONENT_LOCATION): Require AC_C_BIGENDIAN. * lib/isnan.c (FUNC): Add special code for i386, x86_64, ia64. * tests/test-isnanl.h: Include float.h. (main): Check also non-IEEE numbers on i386, x86_64, ia64. 2007-06-05 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Do the extra handling of NaN and Inf also the %a / %A. Handle the %a / %A code before this extra handling. 2007-06-05 Bruno Haible * lib/vasnprintf.c [NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE]: Include fpucw.h. 2007-06-05 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE): Fix typo in variable name. 2007-06-05 Eric Blake * m4/lseek.m4 (gl_FUNC_LSEEK): Work when cross-compiling. Reported by Simon Josefsson. 2007-06-04 Bruno Haible Avoid test failures on some PowerPC platforms. * tests/test-printf-frexpl.c (MIN_NORMAL_EXP, MIN_SUBNORMAL_EXP): Define differently for PowerPC. * tests/test-frexpl.c (MIN_NORMAL_EXP): Likewise. Reported by Gary V. Vaughan . 2007-06-02 Bruno Haible Fix test-stdint failure on FreeBSD/ia64. * m4/stdint.m4 (gl_STDINT_H): Check the values of PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX entirely, not only for plausibility. * doc/headers/stdint.texi: Update. 2007-06-01 Bruno Haible * tests/test-binary-io.c (main): Pass a third argument to open(). Reported by Gary V. Vaughan . 2007-06-01 Bruno Haible * doc/functions/frexpl.texi: Update for mingw. 2007-06-01 Bruno Haible * tests/test-lseek.c (main): Disable test of errno for invalid third argument. * doc/functions/lseek.texi: Update. Reported by Gary V. Vaughan . 2007-05-28 Bruno Haible * m4/intl.m4 (AM_INTL_SUBDIR): Substitute variables WOE32, WINDRES. 2007-05-31 Eric Blake * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Guess no on mingw when cross compiling. 2007-05-30 Eric Blake and Bruno Haible Work around mingw test failures exposed by m4-1.4.9b. * m4/stdint.m4 (gl_STDINT_H): Detect mingw bug. * tests/test-unistd.c: Disable uid_t and git_t tests for the moment. 2007-05-30 Bruno Haible * tests/test-lseek.c: Explicitly close file descriptors 0 and 1 before assuming that they are closed. Needed on HP-UX 11. 2007-05-29 Bruno Haible Fix a problem with #include_next. * lib/dirent_.h: Split the double-inclusion guard. * lib/fcntl_.h: Likewise. * lib/float_.h: Likewise. * lib/iconv_.h: Likewise. * lib/inttypes_.h: Likewise. * lib/locale_.h: Likewise. * lib/math_.h: Likewise. * lib/netinet_in_.h: Likewise. * lib/search_.h: Likewise. * lib/signal_.h: Likewise. * lib/stdint_.h: Likewise. * lib/stdio_.h: Likewise. * lib/stdlib_.h: Likewise. * lib/string_.h: Likewise. * lib/sys_select_.h: Likewise. * lib/sys_socket_.h: Likewise. * lib/sys_stat_.h: Likewise. * lib/sys_time_.h: Likewise. * lib/sysexits_.h: Likewise. * lib/time_.h: Likewise. * lib/unistd_.h: Likewise. * lib/wchar_.h: Likewise. * lib/wctype_.h: Likewise. 2007-05-29 Bruno Haible * tests/test-unistd.c: Disable the tests for useconds_t and intptr_t for the moment. 2007-05-29 Bruno Haible * m4/isnan.m4 (gl_DOUBLE_EXPONENT_LOCATION): Silence the AC_C_BIGENDIAN invocation. Reported by Eric Blake. 2007-05-29 Bruno Haible * m4/isnanf.m4 (gl_FLOAT_EXPONENT_LOCATION): Fix typo in cross- compiling case. 2007-05-29 Eric Blake Bruno Haible * m4/isnanf.m4 (gl_FUNC_ISNANF_NO_LIBM): Avoid syntax error on cross compiles. 2007-05-28 Eric Blake * modules/closein-tests (test_closein_LDADD): Support test on cygwin with libtool. 2007-05-28 Bruno Haible * tests/uniconv/test-u16-conv-from-enc.c: Remove #ifdef HAVE_CONFIG_H. * tests/uniconv/test-u16-strconv-from-enc.c: Likewise. * tests/uniconv/test-u16-strconv-to-enc.c: Likewise. * tests/uniconv/test-u32-conv-from-enc.c: Likewise. * tests/uniconv/test-u32-strconv-from-enc.c: Likewise. * tests/uniconv/test-u32-strconv-to-enc.c: Likewise. * tests/uniconv/test-u8-conv-from-enc.c: Likewise. * tests/uniconv/test-u8-strconv-from-enc.c: Likewise. * tests/uniconv/test-u8-strconv-to-enc.c: Likewise. 2007-05-28 Eric Blake Unconditionally include in unit tests. * tests/test-alloca-opt.c: Remove #ifdef HAVE_CONFIG_H. * tests/test-allocsa.c, tests/test-arcfour.c, tests/test-arctwo.c, tests/test-argmatch.c, tests/test-argp.c, tests/test-array_list.c, tests/test-array_oset.c, tests/test-atexit.c, test-avltree_list.c, test-avltree_oset.c, test-avltreehash_list.c, test-base64.c, test-binary-io.c, test-c-ctype.c, test-c-strcasecmp.c, test-c-strcasestr.c, test-c-strncasecmp.c, test-c-strstr.c, test-canonicalize-lgpl.c, test-carray_list.c, test-crc.c, test-des.c, test-dirname.c, test-fflush.c, test-fprintf-posix.c, test-gc-arcfour.c, test-gc-arctwo.c, test-gc-des.c, test-gc-hmac-md5.c, test-gc-hmac-sha1.c, test-gc-md2.c, test-gc-md4.c, test-gc-md5.c, test-gc-pbkdf2-sha1.c, test-gc-rijndael.c, test-gc-sha1.c, test-gc.c, test-getpass.c, test-hmac-md5.c, test-hmac-sha1.c, test-iconv.c, test-linked_list.c, test-linkedhash_list.c, test-lock.c, test-mbscasecmp.c, test-mbscasestr1.c, test-mbscasestr2.c, test-mbscasestr3.c, test-mbscasestr4.c, test-mbschr.c, test-mbscspn.c, test-mbsncasecmp.c, test-mbspbrk.c, test-mbspcasecmp.c, test-mbsrchr.c, test-mbsspn.c, test-mbsstr1.c, test-mbsstr2.c, test-mbsstr3.c, test-md2.c, test-md4.c, test-md5.c, test-memmem.c, test-printf-posix.c, test-rbtree_list.c, test-rbtree_oset.c, test-rbtreehash_list.c, test-read-file.c, test-rijndael.c, test-snprintf-posix.c, test-snprintf.c, test-sprintf-posix.c, test-stdint.c, test-strcasestr.c, test-striconv.c, test-striconveh.c, test-striconveha.c, test-tls.c, test-vasnprintf-posix.c, test-vasnprintf-posix2.c, test-vasnprintf.c, test-vasprintf-posix.c, test-vasprintf.c, test-verify.c, test-vfprintf-posix.c, test-vprintf-posix.c, test-vsnprintf-posix.c, test-vsnprintf.c, test-vsprintf-posix.c, test-xvasprintf.c: Likewise. 2007-05-28 Bruno Haible * gnulib-tool (func_import): Remember the --with-tests command-line option through the macro gl_WITH_TESTS in the gnulib-cache.m4. Reported by Eric Blake. 2007-05-28 Bruno Haible * modules/ftell-tests: New file. * tests/test-ftell.c: New file, based on tests/test-ftello.c. * tests/test-ftell.sh: New file, based on tests/test-ftello.sh. * lib/ftell.c: New file. * modules/ftell: New file. * m4/ftell.m4: New file. * doc/functions/ftell.texi: Update. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_FTELL, REPLACE_FTELL. * lib/stdio_.h (rpl_ftell): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_FTELL, REPLACE_FTELL. 2007-05-28 Eric Blake * lib/allocsa.h (safe_alloca): Avoid compiler warning. 2007-05-28 Bruno Haible * modules/fseek-tests: New file. * tests/test-fseek.c: New file, based on tests/test-fseeko.c. * tests/test-fseek.sh: New file, based on tests/test-fseeko.sh. * lib/fseek.c: New file. * modules/fseek: New file. * m4/fseek.m4: New file. * doc/functions/fseek.texi: Update. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_FSEEK, REPLACE_FSEEK. * lib/stdio_.h (rpl_fseek): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_FSEEK, REPLACE_FSEEK. 2007-05-28 Bruno Haible * lib/stdio_.h (fflush): More comments. 2007-05-28 Bruno Haible * m4/lseek.m4 (gl_FUNC_LSEEK): When not cross-compiling, perform a real runtime test. 2007-05-28 Eric Blake Improve lseek module. * lib/lseek.c (rpl_lseek): Detect EBADF on mingw. * lib/unistd_.h (lseek): Scale back link warning message. * tests/test-lseek.c: Beef up test. * tests/test-lseek.sh: Exercise more facets of lseek. Reported by Bruno Haible. 2007-05-28 Bruno Haible * tests/test-unistd.c: Test all the types that is expected to define. 2007-05-27 Bruno Haible * m4/iconv.m4 (AM_ICONV_LINK): Fix 2007-03-31 patch. 2007-05-27 Bruno Haible * modules/openmp: New file. * m4/openmp.m4: New file, taken from autoconf's CVS with changes by Noah Misch. 2007-05-26 Bruno Haible * modules/chdir-long (Depends-on): Add fchdir. * modules/chdir-safer (Depends-on): Likewise. * modules/fts (Depends-on): Likewise. * modules/fts-lgpl (Depends-on): Likewise. * modules/openat (Depends-on): Likewise. * modules/savewd (Depends-on): Likewise. 2007-05-24 Eric Blake Fix lseek on mingw. * modules/lseek: New module. * m4/lseek.m4: New file. * lib/lseek.c: New file. * modules/lseek-tests: New file. * tests/test-lseek.c: New file. * tests/test-lseek.sh: New file. * MODULES.html.sh: Document lseek module. * modules/fflush (Depends-on): Add lseek, fseeko. * modules/fseeko (Depends-on): Likewise. * modules/ftello (Depends-on): Likewise. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Replace fseek[o] if lseek is broken. * m4/ftello.m4 (gl_FUNC_FTELLO): Replace ftell[o] if lseek is broken. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Trigger fseeko module. * lib/fseeko.c (rpl_fseeko): Quit early on non-seekable files. * lib/ftello.c (rpl_ftello): Likewise. * tests/test-fseeko.c (main): Test this. * tests/test-fseeko.sh: Likewise. * tests/test-ftello.c (main): Likewise. * tests/test-ftello.sh: Likewise. * lib/stdio_.h (fseek, ftell): Simplify, since missing fseeko now implies replacing fseek. * modules/stdio (Makefile.am): No longer need HAVE_FSEEKO, HAVE_FTELLO. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add lseek info. * modules/unistd (Makefile.am): Likewise. * lib/unistd_.h (lseek): Declare a replacement. * doc/functions/lseek.texi (lseek): Document this fix. * doc/functions/fseek.texi (fseek): Likewise. * doc/functions/ftell.texi (ftell): Likewise. 2007-05-24 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Allow up to 50 bytes in the printed representation of a NaN. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. Reported by Eric Blake. 2007-05-23 Eric Blake Fix fseeko/ftello on cygwin 1.5.24. * doc/functions/fseeko.texi (fseeko): Document the fix. * doc/functions/ftello.texi (ftello): Document the fix. * doc/functions/stdin.texi (stdin): Document the cygwin bug. * doc/functions/stdout.text (stdout): New file. * doc/functions/stderr.text (stderr): New file. * doc/gnulib.texi (Function Substitutes): Use new files. * tests/test-fseeko.c (main): Check for broken fseeko on cygwin prior to 1.7.0. * tests/test-ftello.c (main): Likewise for ftello. * tests/test-fseeko.sh: New file. * tests/test-ftello.sh: New file. * modules/fseeko-tests (Makefile.am): Ensure test-fseeko is run with seekable stdin. * modules/ftello-tests (Makefile.am): Likewise for test-ftello. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Detect the cygwin bug. (gl_REPLACE_FSEEKO): New macro. * m4/ftello.m4 (gl_FUNC_FTELLO, gl_REPLACE_FTELLO): Likewise. * modules/fseeko (Files): Distribute fseeko.c. * modules/ftello (Files): Distribute ftello.c. * lib/fseeko.c (rpl_fseeko) [__CYGWIN__]: Convert stdin to 64-bit mode. * lib/ftello.c (rpl_ftello): New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Allow replacement of fseeko, ftello. (gl_STDIN_LARGE_OFFSET): New macro. * modules/stdio (Makefile.am): Perform the replacement. * lib/stdio_.h (rpl_fseeko, rpl_ftello): Define when needed. 2007-05-23 Bruno Haible * lib/stdio_.h (fseeko, ftello): Provide a link warning only if GNULIB_POSIXCHECK is defined. 2007-05-21 Bruno Haible * m4/printf.m4 (gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE): Check also the output for NaN arguments. When cross-compiling, guess no on IRIX. * lib/vasnprintf.c: Update comments. * tests/test-vasnprintf-posix.c (strisnan): New function. (test_function): Use it. * tests/test-vasprintf-posix.c (strisnan): New function. (test_function): Use it. * tests/test-snprintf-posix.h (strisnan): New function. (test_function): Use it. * tests/test-sprintf-posix.h (strisnan): New function. (test_function): Use it. Reported by Eric Blake. 2007-05-20 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Add test for large finite numbers that fails on BeOS. * doc/functions/frexpl.texi: Update. 2007-05-20 Jim Meyering * NEWS: Mention the incompatible change (s/futimens/gl_futimens/) forced upon us by glibc-2.6. 2007-05-20 Bruno Haible Fix *printf result for NaN, Inf on AIX, Solaris, OSF/1. * m4/printf.m4 (gl_PRINTF_INFINITE): Update cross-compiling guesses. (gl_PRINTF_INFINITE_LONG_DOUBLE): New macro. * lib/vasnprintf.c: Use NEED_PRINTF_INFINITE_DOUBLE instead of NEED_PRINTF_INFINITE. (is_infinitel): New function. (VASNPRINTF): Handle NEED_PRINTF_INFINITE_LONG_DOUBLE case. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE): Renamed from gl_PREREQ_VASNPRINTF_INFINITE. (gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE): New macro. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_INFINITE_LONG_DOUBLE and test its result. Invoke gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE and gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE instead of gl_PREREQ_VASNPRINTF_INFINITE. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-05-20 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_NO_LIBM): Set REPLACE_FREXPL if frexpl was not found in libc. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Likewise. 2007-05-20 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Allow NaN to be printed as "-nan" instead of "nan". * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. Needed for HP-UX 11. 2007-05-20 Jim Meyering Fix buggy test for the fchownat-deref bug. * m4/openat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Create the dangling symlink required for the run-test. Without it, this test would always declare that fchownat doesn't work, and client code would unnecessarily use the replacement function with fixed libc. (gl_FUNC_FCHOWNAT): Eliminate a variable that wasn't initialized. Reported by Greg Schafer. 2007-05-19 Bruno Haible * m4/isnanf.m4 (gl_ISNANF_WORKS): New macro. (gl_FUNC_ISNANF_NO_LIBM): Invoke it. * lib/isnan.c (FUNC): Use run-time expressions for SGI compiler. Needed for IRIX 6.5 and Solaris 2.5.1. 2007-05-19 Bruno Haible * tests/test-vasnprintf-posix.c (have_minus_zero): New function. (test_function): Skip tests involving -0.0 on platforms where -0.0 = 0.0. * tests/test-vasprintf-posix.c (have_minus_zero): New function. (test_function): Skip tests involving -0.0 on platforms where -0.0 = 0.0. * tests/test-snprintf-posix.h (have_minus_zero): New function. (test_function): Skip tests involving -0.0 on platforms where -0.0 = 0.0. * tests/test-sprintf-posix.h (have_minus_zero): New function. (test_function): Skip tests involving -0.0 on platforms where -0.0 = 0.0. * tests/test-fprintf-posix.h (test_function): Remove all -0.0 related tests. * tests/test-printf-posix.h (test_function): Likewise. * tests/test-printf-posix.output: Remove all -0.0 related results. Needed for IRIX 6.5. 2007-05-19 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Allow NaN to be printed as "nan0x7fffffff" instead of "nan". * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.h (NaN): Remove macro. (test_function): Remove all NaN related tests. * tests/test-printf-posix.h (NaN): Remove macro. (test_function): Remove all NaN related tests. * tests/test-printf-posix.output: Remove all NaN related results. Needed for IRIX 6.5. 2007-05-19 Bruno Haible * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Fix C89 syntax error in test code. * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Likewise. 2007-05-19 Bruno Haible * lib/float_.h: New file. * m4/float_h.m4: New file. * modules/float: New file. * modules/isnanl (Dependencies): Add float. * modules/isnanl-nolibm (Dependencies): Likewise. * modules/mathl (Dependencies): Likewise. * modules/printf-frexpl (Dependencies): Likewise. * modules/signbit (Dependencies): Likewise. * modules/vasnprintf (Dependencies): Likewise. * doc/headers/float.texi: Update. 2007-05-19 Jim Meyering * lib/utimens.c (gl_futimens): Rename from futimens, now that glibc-2.6 declares futimens. * lib/utimens.h: Likewise. 2007-05-19 Bruno Haible Avoid test failures on mingw. * tests/test-fprintf-posix.sh: Convert CR/LF to LF in output. * tests/test-printf-posix.sh: Likewise. * tests/test-vfprintf-posix.sh: Likewise. * tests/test-vprintf-posix.sh: Likewise. 2007-05-19 Bruno Haible Fix *printf result for NaN, Inf, -0.0 on mingw. * m4/printf.m4 (gl_PRINTF_INFINITE): New macro. * lib/vasnprintf.c: Include math.h and isnan.h. (is_infinite_or_zero): New function. (VASNPRINTF): Fix also the handling of infinite or zero 'double' values in the %f, %F, %e, %E, %g, %G directives. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_INFINITE): New macro. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_INFINITE and test its result. Invoke gl_PREREQ_VASNPRINTF_INFINITE. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-05-19 Bruno Haible * lib/vasnprintf.c (convert_to_decimal): Add an extra_zeroes argument. (scale10_round_decimal_long_double): Inline scale10_round_long_double. Instead of multiplying with 10^k, set extra_zeroes to k. (scale10_round_long_double): Remove function. 2007-05-18 Bruno Haible * lib/vasnprintf.c (VASNPRINTF) [NEED_PRINTF_FLAG_ZERO]: Fix logic bug introduced on 2007-05-06. 2007-05-18 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Also test the %e and %g directives. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. 2007-05-18 Bruno Haible * tests/test-vasnprintf-posix.c (SIZEOF): New macro. (strmatch): New function. (test_function): Test the %f directive on numbers of various exponents. * tests/test-vasprintf-posix.c (SIZEOF): New macro. (strmatch): New function. (test_function): Test the %f directive on numbers of various exponents. * tests/test-snprintf-posix.h (strmatch): New function. (test_function): Test the %f directive on numbers of various exponents. * tests/test-sprintf-posix.h (strmatch): New function. (test_function): Test the %f directive on numbers of various exponents. * tests/test-snprintf-posix.c (SIZEOF): New macro. * tests/test-sprintf-posix.c (SIZEOF): New macro. * tests/test-vsnprintf-posix.c (SIZEOF): New macro. * tests/test-vsprintf-posix.c (SIZEOF): New macro. 2007-05-18 Bruno Haible Add support for 'long double' number output. * m4/printf.m4 (gl_PRINTF_LONG_DOUBLE): New macro. * lib/vasnprintf.c: Include math.h and float+.h. (mp_limb_t): New type. (GMP_LIMB_BITS): New macro. (mp_twolimb_t): New type. (GMP_TWOLIMB_BITS): New macro. (mpn_t): New type. (multiply, divide, convert_to_decimal, decode_long_double, scale10_round_long_double, scale10_round_decimal_long_double, floorlog10l): New functions. (VASNPRINTF) [NEED_PRINTF_LONG_DOUBLE]: Implement 'long double' support for the %f, %F, %e, %E, %g, %G directives. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_LONG_DOUBLE): New macro. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_LONG_DOUBLE and test its result. Invoke gl_PREREQ_VASNPRINTF_LONG_DOUBLE. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * modules/fprintf-posix (Depends-on): Add frexpl-nolibm. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/vasnprintf (Files): Add lib/float+.h. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-05-18 Bruno Haible * lib/vasnprintf.c (USE_SNPRINTF): Define to 0 on BeOS. 2007-05-18 Bruno Haible * lib/vasnprintf.c (VASNPRINTF) [WIN32]: Use %I64d instead of %lld for printing 64-bit integers. Needed for mingw. 2007-05-18 Bruno Haible * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Invoke gl_FUNC_FREXPL_WORKS. * modules/printf-frexpl (Files): Add m4/frexpl.m4. 2007-05-18 Bruno Haible * modules/frexpl-nolibm-tests: New file. * modules/frexpl-nolibm: New file. * m4/frexpl.m4 (gl_FUNC_FREXPL_NO_LIBM): New macro. 2007-05-17 Paul Eggert * lib/dirent_.h: Prefer #include_next to #include @ABSOLUTE_FOO_H@ if @HAVE_INCLUDE_NEXT@. This works better with GCC 4.2, which otherwise issues a lot of warnings. * lib/iconv_.h, lib/locale_.h, lib/netinet_in_.h, lib/sys_select_.h: * lib/sys_socket_.h, lib/sys_stat_.h, lib/sysexits_.h, lib/unistd_.h: Likewise. * modules/fchdir (dirent.h): Substitute @HAVE_INCLUDE_NEXT@. * modules/iconv_open (iconv.h): Likewise. * modules/locale (locale.h): Likewise. * modules/netinet_in (netinet/in.h): Likewise. * modules/sys_select (sys_select.h): Likewise. * modules/sys_socket (sys/socket.h): Likewise. * modules/sys_stat (sys/stat.h): Likewise. * modules/sysexits (sysexits.h): Likewise. * modules/unistd (unistd.h): Likewise. 2007-05-17 Ralf Wildenhues * modules/closein-tests (Makefile.am): Distribute `test-closein.sh'. 2007-05-17 Bruno Haible * tests/test-printf-posix.output: Renamed from tests/test-fprintf-posix.out. * modules/fprintf-posix-tests: Update. * modules/printf-posix-tests: Update. * modules/vfprintf-posix-tests: Update. * modules/vprintf-posix-tests: Update. * tests/test-fprintf-posix.sh: Update. * tests/test-printf-posix.sh: Update. * tests/test-vfprintf-posix.sh: Update. * tests/test-vprintf-posix.sh: Update. Reported by Ralf Wildenhues. 2007-05-16 Paul Eggert * lib/fcntl_.h: Prefer #include_next to #include @ABSOLUTE_FOO_H@ if @HAVE_INCLUDE_NEXT@. This works better with GCC 4.2, which otherwise issues a lot of warnings. * lib/inttypes_.h, lib/math_.h, lib/search_.h, lib/signal_.h: * lib/stdint_.h, lib/stdio_.h, lib/stdlib_.h, lib/string_.h: * lib/sys_time_.h, lib/time_.h, lib/wchar_.h, lib/wctype_.h: Likewise. * lib/stdlib_.h: Don't bother with #pragma GCC system_header, as it should no longer be needed. * lib/string_.h: Likewise. * modules/absolute-header (HAVE_INCLUDE_NEXT): New 'make' define. * modules/fcntl (fcntl.h): Substitute @HAVE_INCLUDE_NEXT@. * modules/inttypes (inttypes.h): Likewise. * modules/math (math.h): Likewise. * modules/search (search.h): Likewise. * modules/signal (signal.h): Likewise. * modules/stdint (stdint.h): Likewise. * modules/stdio (stdio.h): Likewise. * modules/stdlib (stdlib.h): Likewise. * modules/string (string.h): Likewise. * modules/sys_time (sys/time.h): Likewise. * modules/time (time.h): Likewise. * modules/wchar (wchar.h): Likewise. * modules/wctype (wtype.h): Likewise. 2007-05-16 Thien-Thi Nguyen (tiny change) * doc/gnulib-tool.texi (CVS Issues): Fix typo. 2007-05-13 Bruno Haible * stpcpy.m4 (gl_FUNC_STPCPY): Require AC_C_RESTRICT. * stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * strsep.m4 (gl_FUNC_STRSEP): Likewise. * strtok_r.m4 (gl_FUNC_STRTOK_R): Likewise. (gl_PREREQ_STRTOK_R): Don't require it here. 2007-05-13 Bruno Haible * lib/stdlib_.h (mkdtemp, mkstemp): Comment out argument name. Needed when used in C++ mode. 2007-05-12 Bruno Haible * lib/linebuffer.h: Tweak doc. * lib/linebuffer.c: Likewise. 2007-05-12 James Youngman * lib/linebuffer.c (readlinebuffer_delim): New function, like readlinebuffer, but use a caller-specified delimiter. (readlinebuffer): Just call readlinebuffer_delim with '\n' as the delimiter. * lib/linebuffer.h (readlinebuffer_delim): Declare it. 2007-05-12 Sergey Poznyakoff * m4/openat.m4 (gl_FUNC_OPENAT): Do not require openat-die. * modules/openat (Files): Remove openat-die.c. (Depends-on): Add openat-die. * modules/openat-die: New module. 2007-05-06 Bruno Haible * m4/printf.m4 (gl_PRINTF_FLAG_GROUPING, gl_VSNPRINTF_ZEROSIZE_C99): Update with info about Cygwin. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. Reported by Eric Blake. 2007-05-06 Bruno Haible * lib/vasnprintf.c (VASNPRINTF) [NEED_PRINTF_FLAG_ZERO]: Perform the padding ourselves for the floating-point directives. * m4/printf.m4 (gl_PRINTF_FLAG_ZERO): New macro. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_FLAG_ZERO): New macro. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Invoke gl_PRINTF_FLAG_ZERO and test its result. Invoke gl_PREREQ_VASNPRINTF_FLAG_ZERO. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * tests/test-snprintf-posix.h (test_function): Also check the width and some flags in the %f directive. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasnprintf-posix.c (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-05-06 Bruno Haible * lib/vasnprintf.c (VASNPRINTF) [NEED_PRINTF_FLAG_GROUPING]: Don't pass the ' flag character to sprintf or snprintf. * m4/printf.m4 (gl_PRINTF_FLAG_GROUPING): New macro. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_FLAG_GROUPING): New macro. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Invoke gl_PRINTF_FLAG_GROUPING and test its result. Invoke gl_PREREQ_VASNPRINTF_FLAG_GROUPING. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. * tests/test-snprintf-posix.h (test_function): Also check the grouping flag. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-vasnprintf-posix.c (test_function): Likewise. * tests/test-vasprintf-posix.c (test_function): Likewise. * doc/functions/fprintf.texi: Update. * doc/functions/printf.texi: Update. * doc/functions/snprintf.texi: Update. * doc/functions/sprintf.texi: Update. * doc/functions/vfprintf.texi: Update. * doc/functions/vprintf.texi: Update. * doc/functions/vsnprintf.texi: Update. * doc/functions/vsprintf.texi: Update. 2007-05-01 Bruno Haible * tests/test-argp-2.sh (func_compare): Drop .exe suffix. 2007-05-03 Paul Eggert * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Use better comment for D_INO_IN_DIRENT. Problem reported by James Youngman. 2007-05-02 Paul Eggert * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Test whether readdir returns garbage in d_ino. Problem reported by Kaz Sasayama in . 2007-05-02 Sergey Poznyakoff * lib/argp-help.c (struct hol_entry): New member `ord'. (HOL_ENTRY_PTRCMP): Use ord for comparison (hol_sort): Initialize ord. 2007-05-01 Bruno Haible * doc/functions/_Exit_C99.texi: Renamed from doc/functions/_Exit.texi. Reported by Eric Blake. * doc/gnulib.texi (Function Substitutes): Update. 2007-05-01 Bruno Haible * doc/functions.texi: Remove file, now redundant through doc/functions/*.texi. 2007-05-01 Bruno Haible * modules/argp (Depends-on): Add sleep. 2007-05-01 Bruno Haible * modules/sleep-tests: New file. * tests/test-sleep.c: New file. * modules/sleep: New file. * lib/sleep.c: New file. * m4/sleep.m4: New file. * lib/unistd_.h (sleep): New declaration. * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_SLEEP, HAVE_SLEEP. * modules/unistd (Makefile.am): Substitute GNULIB_SLEEP, HAVE_SLEEP. * doc/functions/sleep.texi: Document the sleep module. 2007-05-01 Bruno Haible * lib/sigprocmask.h: Remove file. * lib/signal_.h: Incorporate the previous contents of sigprocmask.h. * lib/sigprocmask.c: Include instead of sigprocmask.h. * m4/signal_h.m4 (gl_SIGNAL_H_DEFAULTS): Substitute GNULIB_SIGPROCMASK, HAVE_POSIX_SIGNALBLOCKING, HAVE_SIGSET_T. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Require gl_SIGNAL_H_DEFAULTS. Set HAVE_POSIX_SIGNALBLOCKING as a shell variable. (gl_PREREQ_SIGPROCMASK): Require gl_SIGNAL_H_DEFAULTS. Set HAVE_SIGSET_T as a shell variable. * modules/signal (Makefile.am): Substitute GNULIB_SIGPROCMASK, HAVE_POSIX_SIGNALBLOCKING, HAVE_SIGSET_T into signal.h. * modules/sigprocmask (Files): Remove lib/sigprocmask.h. (Depends-on): Add signal. Remove verify. (configure.ac): Invoke gl_SIGNAL_MODULE_INDICATOR. (Include): Mention instead of sigprocmask.h. * NEWS: Mention the change. * lib/fatal-signal.c: Don't include sigprocmask.h. 2007-05-01 Bruno Haible * modules/signal: New file. * lib/signal_.h: New file. * m4/signal_h.m4: New file. 2007-05-01 Bruno Haible * lib/wctype_.h: Test HAVE_ISWCNTRL at configure time. * m4/wctype.m4 (gl_WCTYPE_H): Substitute HAVE_ISWCNTRL. * modules/wctype (Makefile.am): Substitute HAVE_ISWCNTRL instead of HAVE_WCTYPE_CTMP_BUG into wctype.h. 2007-05-01 Bruno Haible * lib/sys_stat_.h: Test HAVE_LSTAT, HAVE_DECL_MKDIR, HAVE_IO_H at configure time. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Substitute HAVE_LSTAT, HAVE_DECL_MKDIR, HAVE_IO_H via AC_SUBST. * modules/sys_stat (Makefile.am): Substitute their values into sys/stat.h. 2007-05-01 Bruno Haible * lib/glob_.h: Test HAVE_SYS_CDEFS_H at configure time. * m4/glob.m4 (gl_PREREQ_GLOB): Substitute HAVE_SYS_CDEFS_H via AC_SUBST. * modules/glob (Makefile.am): Put HAVE_SYS_CDEFS_H value into glob.h. 2007-05-01 Bruno Haible * doc/header/assert.texi: Undo last change: don't mention the gnulib 'assert' module here. 2007-05-01 Bruno Haible * doc/functions/*.texi: New files. * doc/functions/google-ranking.txt: New file. * doc/gnulib.texi (Function Substitutes): New chapter. (ctime, inet_ntoa): Remove sections. * doc/ctime.texi: Remove file. * doc/inet_ntoa.texi: Remove file. * doc/Makefile (gnulib.info, gnulib.html, gnulib.dvi): Update dependencies. (%.info): New rule, specifying a --reference-limit. 2007-05-01 Bruno Haible * MODULES.html.sh (posix_functions): Remove 'exec', 'toc'. 2007-05-01 Bruno Haible * modules/mkdir (Depends-on): Add sys_stat, because sys_stat provides the portability of 'mkdir' to mingw systems. 2007-05-01 Bruno Haible * doc/headers/google-ranking.txt: New file. 2007-04-30 Eric Blake Prefer fseeko to fseek. * modules/getpass (Depends-on): Add fseeko. * lib/getpass.c (getpass): Use fseeko, not fseek. 2007-04-30 Sergey Poznyakoff * lib/argp-help.c (hol_entry_cmp): Option sorting algorithm assumes the sorting is stable, while most qsort implementations are not. Use argument addresses to ensure they never compare as equal. * tests/test-argp-2.sh (usage-indent test): Fix output (func_compare): Restore diff options * tests/test-argp.c: Restore #include "progname.h" 2007-04-29 Bruno Haible * m4/printf.m4 (gl_VSNPRINTF_ZEROSIZE_C99): New macro. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Invoke gl_VSNPRINTF_ZEROSIZE_C99. Test gl_cv_func_vsnprintf_zerosize_c99. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * modules/snprintf-posix-tests (Files): Add tests/test-snprintf.c. (configure.ac): Define CHECK_SNPRINTF_POSIX. (TESTS, check_PROGRAMS): Add test-snprintf. * modules/vsnprintf-posix-tests (Files): Add tests/test-vsnprintf.c. (configure.ac): Define CHECK_VSNPRINTF_POSIX. (TESTS, check_PROGRAMS): Add test-vsnprintf. * tests/test-snprintf.c (main) [!CHECK_SNPRINTF_POSIX]: Disable assertions that fail on HP-UX, OSF/1, or IRIX. * tests/test-vsnprintf.c (main) [!CHECK_VSNPRINTF_POSIX]: Likewise. 2007-04-29 Bruno Haible * MODULES.html.sh (posix_functions): Remove 'contents'. 2007-04-29 Karl Berry * config/srclist.txt (gendocs_template_min): new entry. 2007-04-29 Bruno Haible Work around fpurge bug on BSD systems. * modules/fpurge (Makefile.am): Compile fpurge.c unconditionally. * m4/fpurge.m4 (gl_FUNC_FPURGE): Don't invoke AC_LIBOBJ. * lib/fpurge.h (fpurge): Don't handle __fpurge wrapper here. Define fpurge to rpl_fpurge if the system already has this function. * lib/fpurge.c (fpurge): Handle also the __fpurge wrapper case and the case where the system already has this function. Correct invariants on BSD systems. * lib/fseeko.c (rpl_fseeko): Update recognition of preceding fflush on BSD systems. 2007-04-29 Sergey Poznyakoff * lib/argp-help.c (hol_cluster_cmp): Reverse comparison. Change proposed by Sven Verdoolaege. * tests/test-argp.c: Fix option ordering. Test deeply clustered options. * tests/test-argp-2.sh (func_compare): Use diff instead of cmp. (usage and help tests): Update 2007-04-29 Bruno Haible * tests/test-fflush.c (main): Use a file of size 17, not 10. Print more information in case of failure. Disable a test on BeOS. 2007-04-29 Bruno Haible * tests/**/test-*.[hc] (ASSERT): Use fprintf to show the line number. This helps debugging on systems on which no gdb is available. 2007-04-29 Bruno Haible * lib/freading.h: Improve comments. * lib/fwriting.h: Likewise. * tests/test-freading.c (main): Don't check freading immediately after repositioning. Needed for glibc. 2007-04-29 Bruno Haible * lib/freading.c (freading): Trivial simplification. 2007-04-28 Bruno Haible * tests/test-fwriting.c (main): Also test the interaction between fflush and fwriting. * modules/fwriting-tests (Depends-on): Add fflush. * tests/test-freading.c (main): Also test the interaction between fflush and freading. * modules/freading-tests (Depends-on): Add fflush. 2007-04-28 Bruno Haible * lib/stdio_.h (fseek, ftell): Provide link warnings suggesting to use fseeko and ftello. Suggested by Eric Blake. 2007-04-28 Jim Meyering Avoid false-negative in gl_STDINT_H's C99 conformance test. * m4/stdint.m4 (gl_STDINT_H): When checking whether stdint.h conforms to C99, include all of gl_STDINT_INCLUDES, not just . 2007-04-27 Eric Blake * doc/headers/assert.texi (assert.h): Document assert module use. 2007-04-27 Bruno Haible * doc/headers/*.texi: New files. * doc/gnulib.texi (Header File Substitutes): New chapter. * doc/Makefile (gnulib.info, gnulib.html, gnulib.dvi): Specify dependencies. (standards.info ,standards.html, standards.dvi): Update dependencies. (mostlyclean, clean): New targets. 2007-04-27 Bruno Haible * lib/sysexits_.h: Renamed from lib/sysexit_.h. * modules/sysexits (Files, Makefile.am): Update. * lib/sys_socket_.h: Renamed from lib/socket_.h. * modules/sys_socket (Files, Makefile.am): Update. * lib/sys_stat_.h: Renamed from lib/stat_.h. * modules/sys_stat (Files, Makefile.am): Update. 2007-04-27 Eric Blake * lib/freading.h: Improve comments. * lib/fwriting.h: Likewise. * lib/fflush.c: Likewise. Fix closein for mingw. * modules/closein-tests: Add tests for closein. * tests/test-closein.c: New file. * tests/test-closein.sh: Likewise. * lib/unistd_.h [!SEEK_CUR]: Mingw also needs stdlib.h for _exit. * lib/closein.c (close_stdin): Don't fflush non-seekable streams. 2007-04-27 Bruno Haible * lib/inttypes_.h [_DECC]: Don't use #include_next if the compiler version is < 6. * lib/math_.h [__DECC]: Likewise. * lib/stdio_.h [__DECC]: Likewise. * lib/stdlib_.h [__DECC]: Likewise. * lib/string_.h [__DECC]: Likewise. * lib/time_.h [__DECC]: Likewise. * lib/wchar_.h [__DECC]: Likewise. * lib/wctype_.h [__DECC]: Likewise. 2007-04-27 Bruno Haible * tests/test-fbufmode.c (main): Relax test, to avoid failure on mingw. 2007-04-27 Bruno Haible * lib/fflush.c: Add comments. * modules/fpurge-tests (Depends-on): Add fflush. * modules/freadable-tests (Depends-on): Likewise. * modules/fwritable-tests (Depends-on): Likewise. 2007-04-27 Charles Wilson * m4/argz.m4 (gl_FUNC_ARGZ): Use !HAVE_WORKING_ARGZ instead of SYSTEM_ARGZ_IS_BROKEN. Also, minor stylistic improvements. Report by Bruno Haible . 2007-04-26 Eric Blake Fix fflush on mingw. * modules/fflush (Depends-on): Add freading. * lib/fflush.c (rpl_fflush): Use freading to avoid losing buffered but unread data. 2007-04-26 Eric Blake and Bruno Haible Implement freading and fwriting. * lib/freading.c: New file. * lib/freading.h: Likewise. * m4/freading.m4: Likewise. * modules/freading: Likewise. * modules/freading-tests: Likewise. * tests/test-freading.c: Likewise. * lib/fwriting.c: New file. * lib/fwriting.h: Likewise. * m4/fwriting.m4: Likewise. * modules/fwriting: Likewise. * modules/fwriting-tests: Likewise. * tests/test-fwriting.c: Likewise. * MODULES.html.sh (File stream based Input/Output): Mention them. 2007-04-26 Bruno Haible * lib/stdio_.h (fseeko, ftello): Check that off_t has the same size as 'long' when we assume it. Suggested by Eric Blake. 2007-04-26 Bruno Haible Ensure fseeko, ftello are declared on glibc systems. * modules/fflush (configure.ac-early): Require AC_FUNC_FSEEKO. * modules/fseeko (configure.ac-early): Likewise. * modules/ftello (configure.ac-early): Likewise. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Don't define HAVE_FSEEKO, rely on AC_FUNC_FSEEKO for this. * m4/fseeko.m4 (gl_FUNC_FSEEKO): Inline gl_CHECK_FSEEKO. (gl_CHECK_FSEEKO): Remove macro. 2007-04-26 Bruno Haible * tests/test-fflush.c (main): Also check the ftell result after fflush and fseek/fseeko. * lib/fflush.c (rpl_fflush): For BSD implementations, update the file descriptor position cache in the stream. * lib/fseeko.c (rpl_fseeko): Likewise. 2007-04-26 Bruno Haible * modules/fflush-tests (Depends-on): Add fseeko. 2007-04-25 Charles Wilson Ralf Wildenhues * lib/argz_.h: ensure error_t definition is obtained in same mechanism system argz.h would have. * m4/argz.m4 (gl_FUNC_ARGZ): add new test to check if $host's argz facilities are known bad. Err on the side of caution if cross-compiling. 2007-04-25 Eric Blake * lib/fpurge.c (includes): Use stdlib.h for free. * tests/test-fflush.c (main): Also test fflush-fseeko. 2007-04-25 Bruno Haible Make fflush+fseek POSIX-compliant on FreeBSD and MacOS X. * lib/fseeko.c: New file. * lib/stdio_.h: Include when off_t is needed. (fseeko, fseek): Define to replacements if REPLACE_FFLUSH. * m4/fseeko.m4 (gl_CHECK_FSEEKO): New macro, extracted from gl_FUNC_FSEEKO. (gl_FUNC_FSEEKO): Invoke it. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Arrange to compile fseeko.c. Invoke gl_CHECK_FSEEKO. Define HAVE_FSEEKO. * modules/fflush (Files): Add lib/fseeko.c, m4/fseeko.m4. 2007-04-25 Bruno Haible * modules/fflush (Depends-on): Add ftello. 2007-04-25 Bruno Haible * modules/ftello-tests: New file. * tests/test-ftello.c: New file. * modules/ftello: New file. * m4/ftello.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_FTELLO, HAVE_FTELLO. * lib/stdio_.h (ftello): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_FTELLO, HAVE_FTELLO. 2007-04-25 Bruno Haible * modules/fseeko-tests: New file. * tests/test-fseeko.c: New file. * modules/fseeko: New file. * m4/fseeko.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_FSEEKO, HAVE_FSEEKO. * lib/stdio_.h (fseeko): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_FSEEKO, HAVE_FSEEKO. 2007-04-25 Bruno Haible * lib/stdio_.h (fflush): Add support for GNULIB_POSIXCHECK. 2007-04-25 Bruno Haible * lib/unistd_.h: Include if needed to get the SEEK_* macros. * tests/test-stdio.c: Check that the various SEEK_* macros are defined. * tests/test-unistd.c: Likewise. * tests/test-fcntl.c: Likewise. 2007-04-23 Eric Blake * lib/fflush.c: Fix missing include. Reported by Bruno Haible. 2007-04-23 Bruno Haible * lib/fpurge.c (fpurge) [glibc, BSD]: Free a malloc()ed ungetc buffer. Reported by Eric Blake. 2007-04-23 Bruno Haible * lib/fbufmode.c (fbufmode): Port to Solaris/SPARC64. 2007-04-23 Bruno Haible * lib/fseterr.c (fseterr): Don't hardcode the value of _IOERR. 2007-04-23 Bruno Haible * tests/test-fbufmode.c (main): Be prepared to a failure of setvbuf. Needed on HP-UX 11. 2007-04-16 Eric Blake Make fflush rely on fpurge. * lib/fflush.c (rpl_fflush): Rely on fpurge module, rather than open coding all variants. * modules/fflush (Depends-on): Add fpurge and unistd. * modules/fflush-tests (Depends-on): Unistd is no longer extra. * m4/fflush.m4 (gl_REPLACE_FFLUSH): Simplify. Fix --with-tests compilation on cygwin. * modules/argmatch-tests (Makefile.am): List gnulib library first in LDADD. * modules/argp-tests (Makefile.am): Likewise. * modules/array-list-tests (Makefile.am): Likewise. * modules/array-oset-tests (Makefile.am): Likewise. * modules/avltree-list-tests (Makefile.am): Likewise. * modules/avltree-oset-tests (Makefile.am): Likewise. * modules/avltreehash-list-tests (Makefile.am): Likewise. * modules/carray-list-tests (Makefile.am): Likewise. * modules/dirname-tests (Makefile.am): Likewise. * modules/frexp-tests (Makefile.am): Likewise. * modules/isnanl-tests (Makefile.am): Likewise. * modules/linked-list-tests (Makefile.am): Likewise. * modules/linkedhash-list-tests (Makefile.am): Likewise. * modules/lock-tests (Makefile.am): Likewise. * modules/rbtree-list-tests (Makefile.am): Likewise. * modules/rbtree-oset-tests (Makefile.am): Likewise. * modules/rbtreehash-list-tests (Makefile.am): Likewise. * modules/tls-tests (Makefile.am): Likewise. * modules/tsearch-tests (Makefile.am): Likewise. * modules/xvasprintf-tests (Makefile.am): Likewise. Fix fpurge for cygwin. * lib/fpurge.c (fpurge): Fix order of operation flub, and return a value. * modules/fpurge-tests (Depends-on): Clean up trash. 2007-04-16 Simon Josefsson * lib/gc-libgcrypt.c (gc_hash_open): Shut up compiler warnings. * m4/autobuild.m4: Re-indent. 2007-04-13 Bruno Haible * modules/fpurge-tests: New file. * tests/test-fpurge.c: New file. * modules/fpurge: New file. * lib/fpurge.h: New file. * lib/fpurge.c: New file. * m4/fpurge.m4: New file. 2007-04-13 Bruno Haible * modules/fbufmode-tests: New file. * tests/test-fbufmode.c: New file. * modules/fbufmode: New file. * lib/fbufmode.h: New file. * lib/fbufmode.c: New file. * m4/fbufmode.m4: New file. 2007-04-13 Bruno Haible * modules/fwritable-tests: New file. * tests/test-fwritable.c: New file. * modules/fwritable: New file. * lib/fwritable.h: New file. * lib/fwritable.c: New file. * m4/fwritable.m4: New file. 2007-04-13 Bruno Haible * modules/freadable-tests: New file. * tests/test-freadable.c: New file. * modules/freadable: New file. * lib/freadable.h: New file. * lib/freadable.c: New file. * m4/freadable.m4: New file. 2007-04-13 Bruno Haible * modules/fflush-tests (Makefile.am): Remove EXTRA_DIST. Augment MOSTLYCLEANFILES. 2007-04-13 Paul Eggert * build-aux/bootstrap (gnulib_tool_option_extras): New var, used by gzip bootstrap.conf to avoid dragging in i18n machinery. (gnulib_tool_option): Use it. 2007-04-13 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Add tests for %f and %F directives. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.h (test_function): Likewise. * tests/test-printf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.out: Likewise. 2007-04-13 Bruno Haible * modules/lock-tests (configure.ac): For LIBSCHED, try also -lposix4. * modules/tls-tests (configure.ac): Likewise. Reported by Arto C. Nirkko . 2007-04-13 Bruno Haible * lib/tls.c (glthread_tls_get): Fix return type. Patch by Arto C. Nirkko . 2007-04-12 Eric Blake * modules/gettime (Depends-on): Remove gettime. Reported by Dmitry V. Levin. 2007-04-12 Bruno Haible * modules/fflush (Include): Mention . * modules/strtoimax (Include): Mention . * modules/strtoumax (Include): Likewise. 2007-04-12 Eric Blake * .cvsignore: New file. * .gitignore: Likewise. 2007-04-12 Bruno Haible * modules/iconv-tests (test_iconv_LDADD): Mention -liconv after LDADD, not before, since $(LDADD) often contains libgnu.a. * modules/striconv-tests (test_striconv_LDADD): Likewise. * modules/striconveh-tests (test_striconveh_LDADD): Likewise. * modules/striconveha-tests (test_striconveha_LDADD): Likewise. Needed on Cygwin. 2007-04-12 Eric Blake Work around glibc's failure to flush stdin on fclose. * lib/closein.c (close_stdin): Flush stdin before closing. Work around glibc's failure to reset seekable stdin on exit. * modules/closein: New module. * lib/closein.c: New file. * lib/closein.h: Likewise. * m4/closein.m4: Likewise. * MODULES.html.sh (File stream based Input/Output): Document it. 2007-04-12 Simon Josefsson * gnulib-tool: Rename generated 'autobuild' script to 'do-autobuild' in --create-megatestdir output. * doc/gnulib.texi (Build robot for gnulib): Fix. 2007-04-12 Simon Josefsson * modules/sysexits (Depends-on): Add absolute-header. 2007-04-12 Eric Blake No need to preserve errno on success. * lib/fflush.c (rpl_fflush): Simplify errno tracking. Reported by Bruno Haible. 2007-04-12 Simon Josefsson * MODULES.html.sh (Support for maintaining and releasing projects): Add autobuild. Suggested by Eric Blake . 2007-04-12 Simon Josefsson * gnulib-tool (func_modules_add_dummy): Respect --avoid=dummy. 2007-04-12 Simon Josefsson * modules/autobuild: New module. * m4/autobuild.m4: New file. 2007-04-11 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Implement the %F directive using the %f directive, if NEED_PRINTF_DIRECTIVE_F is defined. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_F): New macro. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_F): New macro. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Invoke gl_PRINTF_DIRECTIVE_F. Test gl_cv_func_printf_directive_f. Invoke gl_PREREQ_VASNPRINTF_DIRECTIVE_F for the replacement. Reported by Eric Blake. 2007-04-11 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Fix test. It always failed. 2007-04-10 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Add a test for correct result for NaN and Infinity. Needed on FreeBSD 6.1. * tests/test-vasnprintf-posix.c (test_function): Undo last change regarding results for "%010a" of Infinity and NaN. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.h (test_function): Likewise. * tests/test-printf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.out: Likewise. 2007-04-10 Bruno Haible * modules/locale-tests: New file. * tests/test-locale.c: New file. * modules/locale: New file. * lib/locale_.h: New file. * m4/locale_h.m4: New file. 2007-04-10 Paul Eggert Bruno Haible * m4/signbit.m4 (gl_SIGNBIT): When the sign bit position could not be determined, test for availability of the copysignf, copysign, copysignl functions. * lib/signbitf.c (gl_signbitf): Use copysignf if available in libc. * lib/signbitd.c (gl_signbitd): Use copysign if available in libc. * lib/signbitl.c (gl_signbitl): Use copysignl if available in libc. 2007-04-09 Eric Blake * lib/stdio_.h [REPLACE_FFLUSH]: Declare rpl_fflush. * modules/stdio (Makefile.am): Support fflush. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Likewise. * modules/fflush: New file. * lib/fflush.c: Likewise. * m4/fflush.m4: Likewise. * modules/fflush-tests: New test. * tests/test-fflush.c: Likewise. * MODULES.html.sh (Input/output ): Document new module. 2007-04-06 Bruno Haible * lib/vasnprintf.c: Include . Don't include float+.h. (VASNPRINTF): Use signbit for faster determination whether to print a minus sign. * modules/vasnprintf (Files): Remove lib/float+.h. * modules/fprintf-posix (Depends-on): Add signbit. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. 2007-04-06 Bruno Haible * tests/test-frexp.c (main): Test also the sign bit of zero results. * tests/test-frexpl.c (main): Likewise. * tests/test-ldexpl.c (main): Likewise. * modules/frexp-tests (Depends-on): Add signbit. * modules/frexpl-tests (Depdends-on): Likewise. * modules/ldexpl-tests (Depdends-on): Likewise. 2007-04-06 Bruno Haible * modules/signbit-tests: New file. * tests/test-signbit.c: New file. * modules/signbit: New file. * lib/signbitf.c: New file. * lib/signbitd.c: New file. * lib/signbitl.c: New file. * m4/signbit.m4: New file. * lib/math_.h (gl_signbitf, gl_signbitd, gl_signbitl): New declarations. (signbit): New macro. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_SIGNBIT and REPLACE_SIGNBIT. * modules/math (Makefile.am): Substitute also GNULIB_SIGNBIT and REPLACE_FREXPL into math.h. 2007-04-06 Bruno Haible * modules/isnanf-nolibm-tests: New file. * tests/test-isnanf.c: New file. * modules/isnanf-nolibm: New file. * lib/isnanf.h: New file. * lib/isnanf.c: New file. * lib/isnan.c: Consider the USE_FLOAT macro. * m4/isnanf.m4: New file. 2007-04-06 Bruno Haible * modules/gettext-h (configure.ac): AC_SUBST LIBINTL and LTLIBINTL. (Link): New section. * modules/canonicalize-lgpl-tests (Makefile.am): Undo last change. 2007-04-06 Bruno Haible Assume the 'long double' type. * m4/longdouble.m4: Remove file. * config/srclist.txt: Don't mention longdouble.m4. * lib/allocsa.h: Assume HAVE_LONG_DOUBLE to be true. * lib/float+.h: Likewise. * lib/frexp.c: Likewise. * lib/printf-args.h: Likewise. * lib/printf-args.c: Likewise. * lib/printf-frexp.c: Likewise. * lib/printf-parse.c: Likewise. * lib/vasnprintf.c: Likewise. * m4/allocsa.m4: Remove gt_TYPE_LONGDOUBLE invocation. * m4/intl.m4: Likewise. * m4/isnanl.m4: Likewise. * m4/printf.m4: Likewise. * m4/printf-frexpl.m4: Likewise. * m4/vasnprintf.m4: Likewise. * modules/allocsa (Files): Remove m4/longdouble.m4. * modules/gettext (Files): Likewise. * modules/relocatable-prog-wrapper (Files): Likewise. * modules/vasnprintf (Files): Likewise. * modules/isnanl (Files): Likewise. (Include): Simplify. * modules/isnanl-nolibm (Files): Remove m4/longdouble.m4. (Include): Simplify. * modules/printf-frexpl (Files): Remove m4/longdouble.m4. (Include): Simplify. * modules/snprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * modules/sprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * modules/vasnprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * modules/vasprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * modules/vsnprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * modules/vsprintf-posix-tests (Files): Remove m4/longdouble.m4. (configure.ac): Remove gt_TYPE_LONGDOUBLE invocation. * tests/test-isnanl-nolibm.c: Assume HAVE_LONG_DOUBLE to be true. * tests/test-isnanl.c: Likewise. * tests/test-snprintf-posix.h: Likewise. * tests/test-sprintf-posix.h: Likewise. * tests/test-vasnprintf-posix.c: Likewise. * tests/test-vasnprintf-posix2.c: Likewise. * tests/test-vasprintf-posix.c: Likewise. 2007-04-06 Bruno Haible Fix problem with Compaq (ex-DEC) Desktop C compiler on Tru64. * lib/math_.h [__DECC]: Include the overridden include file through #include_next, outside the double-inclusion guard. * lib/stdio_.h [__DECC]: Likewise. * lib/stdlib_.h [__DECC]: Likewise. * lib/string_.h [__DECC]: Likewise. * lib/time_.h [__DECC]: Likewise. * lib/wchar_.h [__DECC]: Likewise. * lib/wctype_.h [__DECC]: Likewise. * lib/inttypes_.h [__DECC]: Likewise. Reported by Albert Chin in . 2007-04-04 Eric Blake * m4/stdint.m4 (gl_STDINT_H): Detect WINT_MAX bug in cygwin 1.5.x. 2007-04-04 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Add a test for correct rounding. Don't assume that FreeBSD 6 and NetBSD 4 pass this test. 2007-04-04 Bruno Haible * tests/test-vasnprintf-posix.c (test_function): Allow two possible results for "%010a" of Infinity and NaN. * tests/test-vasprintf-posix.c (test_function): Likewise. * tests/test-snprintf-posix.h (test_function): Likewise. * tests/test-sprintf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.h (test_function): Remove these tests. * tests/test-printf-posix.h (test_function): Likewise. * tests/test-fprintf-posix.out: Update. Needed for FreeBSD 6.1. 2007-04-04 Bruno Haible * DEPENDENCIES: Remove mentions of tar and gzip, since they are not directly used by the gnulib modules nor by gnulib-tool. 2007-04-04 Paul Eggert * DEPENDENCIES: Give overall description of version dependency desirability. Use more-typical names for apps. Add shell, coreutils, diffutils, grep, tar, gzip. 2007-04-04 Simon Josefsson * MODULES.html.sh: Rename crypto modules. Remove iconvme. 2007-04-04 Karl Berry * MODULES.html.sh (func_module): missing '. 2007-04-03 Bruno Haible * modules/argmatch-tests (Makefile.am): New variable test_argmatch_LDADD. * modules/argp-tests (Makefile.am): New variable test_argp_LDADD. * modules/array-list-tests (Makefile.am): New variable test_array_list_LDADD. * modules/array-oset-tests (Makefile.am): New variable test_array_oset_LDADD. * modules/avltree-list-tests (Makefile.am): New variable test_avltree_list_LDADD. * modules/avltree-oset-tests (Makefile.am): New variable test_avltree_oset_LDADD. * modules/avltreehash-list-tests (Makefile.am): New variable test_avltreehash_list_LDADD. * modules/canonicalize-lgpl-tests (Makefile.am): New variable test_canonicalize_lgpl_LDADD. * modules/carray-list-tests (Makefile.am): New variable test_carray_list_LDADD. * modules/dirname-tests (Makefile.am): New variable test_dirname_LDADD. * modules/linked-list-tests (Makefile.am): New variable test_linked_list_LDADD. * modules/linkedhash-list-tests (Makefile.am): New variable test_linkedhash_list_LDADD. * modules/rbtree-list-tests (Makefile.am): New variable test_rbtree_list_LDADD. * modules/rbtree-oset-tests (Makefile.am): New variable test_rbtree_oset_LDADD. * modules/rbtreehash-list-tests (Makefile.am): New variable test_rbtreehash_list_LDADD. * modules/xvasprintf-tests (Makefile.am): New variable test_xvasprintf_LDADD. Reported by Eric Blake. 2007-04-03 Eric Blake * DEPENDENCIES: Weaken m4 requirements. 2007-04-03 Bruno Haible * modules/frexp-tests (configure.ac): Remove AC_SUBST. * modules/isnanl-tests (configure.ac): Likewise. 2007-04-03 Ben Pfaff * modules/iconv_open: Add $(srcdir)/ to source directory references in Makefile fragments that call gperf, to fix VPATH builds. 2007-04-03 Bruno Haible * modules/ldexpl (Depends-on): Add isnanl, remove isnanl-nolibm. * lib/ldexpl.c: Undo last change. 2007-04-03 Bruno Haible * modules/printf-frexpl (Depends-on): Undo last change. (Files): Add m4/ldexpl.m4. 2007-04-03 Bruno Haible * m4/isnanl.m4 (gl_FUNC_ISNANL): Substitute ISNANL_LIBM. * modules/isnanl (Link): New section. * m4/frexp.m4 (gl_FUNC_FREXP): Substitute FREXP_LIBM. * modules/frexp (Link): New section. * m4/frexpl.m4 (gl_FUNC_FREXPL): Substitute FREXPL_LIBM. * modules/frexpl (Link): New section. * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Substitute LDEXPL_LIBM. * modules/ldexpl (Link): New section. 2007-04-03 Bruno Haible * modules/TEMPLATE-EXTENDED: New file. * gnulib-tool (func_all_modules, func_verify_module): Exclude it. 2007-04-03 Bruno Haible * DEPENDENCIES: New file. Suggested by Simon Josefsson. 2007-04-03 Bruno Haible * doc/gnulib.texi: Escape @. 2007-04-03 James Youngman and Paul Eggert * lib/stat-time.h (get_stat_birthtime): Check for zero-valued birthtime on all systems that have birthtime, not just those which use st_birthtimensec rather than st_birthtim. Putting zero in st_birthtim.tv_sec is how (for example) FreeBSD/x86 6.1 indicates that the birth time is not available for files on an NFS mount. 2007-04-03 Simon Josefsson * modules/memxor: Move back from crypto/, suggested by Bruno. * modules/crypto/hmac-sha1: Fix memxor dependency. * modules/crypto/gc: Moved from ../. 2007-04-02 Eric Blake * lib/ldexpl.c (includes): Avoid libm. * modules/printf-frexpl (Depends-on): Depend on ldexpl. 2007-04-02 Bruno Haible * lib/sysexit_.h (EX_OK): Disable the EX_OK definition from on IRIX. 2007-04-02 Bruno Haible * m4/intdiv0.m4 (gt_INTDIV0): Avoid performing the test for real on x86 or x86_64 platforms running MacOS X. Reported by Ryan Schmidt <@ryandesign.com>. 2007-04-02 Bruno Haible * m4/intdiv0.m4 (gt_INTDIV0): When cross-compiling, treat x86_64 like i386. 2007-04-01 Simon Josefsson * modules/crypto/arcfour: Moved from ../. * modules/crypto/arcfour-tests: Moved from ../. * modules/crypto/arctwo: Moved from ../. * modules/crypto/arctwo-tests: Moved from ../. * modules/crypto/des: Moved from ../. * modules/crypto/des-tests: Moved from ../. * modules/crypto/gc-arcfour: Moved from ../. * modules/crypto/gc-arcfour-tests: Moved from ../. * modules/crypto/gc-arctwo: Moved from ../. * modules/crypto/gc-arctwo-tests: Moved from ../. * modules/crypto/gc-des: Moved from ../. * modules/crypto/gc-des-tests: Moved from ../. * modules/crypto/gc-hmac-md5: Moved from ../. * modules/crypto/gc-hmac-md5-tests: Moved from ../. * modules/crypto/gc-hmac-sha1: Moved from ../. * modules/crypto/gc-hmac-sha1-tests: Moved from ../. * modules/crypto/gc-md2: Moved from ../. * modules/crypto/gc-md2-tests: Moved from ../. * modules/crypto/gc-md4: Moved from ../. * modules/crypto/gc-md4-tests: Moved from ../. * modules/crypto/gc-md5: Moved from ../. * modules/crypto/gc-md5-tests: Moved from ../. * modules/crypto/gc-pbkdf2-sha1: Moved from ../. * modules/crypto/gc-pbkdf2-sha1-tests: Moved from ../. * modules/crypto/gc-random: Moved from ../. * modules/crypto/gc-rijndael: Moved from ../. * modules/crypto/gc-rijndael-tests: Moved from ../. * modules/crypto/gc-sha1: Moved from ../. * modules/crypto/gc-sha1-tests: Moved from ../. * modules/crypto/gc-tests: Moved from ../. * modules/crypto/hmac-md5: Moved from ../. * modules/crypto/hmac-md5-tests: Moved from ../. * modules/crypto/hmac-sha1: Moved from ../. * modules/crypto/hmac-sha1-tests: Moved from ../. * modules/crypto/md2: Moved from ../. * modules/crypto/md2-tests: Moved from ../. * modules/crypto/md4: Moved from ../. * modules/crypto/md4-tests: Moved from ../. * modules/crypto/md5: Moved from ../. * modules/crypto/md5-tests: Moved from ../. * modules/crypto/memxor: Moved from ../. * modules/crypto/rijndael: Moved from ../. * modules/crypto/rijndael-tests: Moved from ../. * modules/crypto/sha1: Moved from ../. 2007-03-30 James Youngman * tests/test-stat-time.c (prepare_test): use chmod() rather than rename() to change the ctime of a file (because ctime is unaffected by rename on jfs2 on AIX 5.1). (main): Start by doing cleanup, in case a previous run failed leaving test files behind. 2007-03-31 Bruno Haible Support old proprietary implementations of iconv. * modules/iconv_open: New file. * lib/iconv_.h: New file. * m4/iconv_h.m4: New file. * lib/iconv_open.c: New file. * lib/iconv_open-aix.gperf: New file. * lib/iconv_open-hpux.gperf: New file. * lib/iconv_open-irix.gperf: New file. * lib/iconv_open-osf.gperf: New file. * m4/iconv_open.m4: New file. * modules/linebreak (Depends-on): Add iconv_open. * modules/striconv (Depends-on): Likewise. * modules/striconveh (Depends-on): Likewise. * modules/unicodeio (Depends-on): Likewise. * lib/striconveh.h (mem_cd_iconveh, str_cd_iconveh): Allow cd to be (iconv_t)(-1). * lib/striconveh.c (mem_cd_iconveh_internal): Use an indirect conversion if cd is (iconv_t)(-1). (mem_iconveh, str_iconveh): Don't fail just because a direct conversion is not possible. 2007-03-31 Bruno Haible * tests/test-striconveha.c (main): Don't expect "autodetect_jp" to work on Solaris either. Protect also second use of "autodetect_jp". 2007-03-31 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL): Set HAVE_DECL_FREXPL to 0 when the function is not present. 2007-03-31 Bruno Haible * m4/ldexpl.m4 (gl_FUNC_LDEXPL): Set HAVE_DECL_LDEXPL to 0 when the function is not present. 2007-03-31 Bruno Haible * m4/iconv.m4 (AM_ICONV_LINK): Fix 2007-03-29 patch. Test also against a bug in HP-UX iconv_open(). 2007-03-31 Bruno Haible * MODULES.html.sh (func_module): Don't show gnulib-common.m4. (Mathematics ): New section, add fpieee. (Input/output ): Add fseterr. (Mathematics ): New section, add printf-frexp. (Container data structures): Add sublist. (Core language properties): Add fpucw, inline. (Functions for greatest-width integer types ): Add imaxabs, imaxdiv, inttypes. (Mathematics ): Add frexp, frexpl, isnan-nolibm, isnanl, isnanl-nolibm, ldexp. (Mathematics ): New section, add printf-frexpl. (Support for systems lacking POSIX:2001): Add fprintf-posix, printf-posix, snprintf-posix, sprintf-posix, string, search, socklen, sys_select, sys_socket, vasnprintf-posix, vasprintf-posix, vfprintf-posix, vprintf-posix, vsnprintf-posix, vsprintf-posix. (Unicode string functions): Add unistr/u*-mbtoucr. (Java): Add javacomp-script, javaexec-script. (C#): Add csharpcomp-script, csharpexec-script. (Support for building libraries and executables): Add havelib, relocatable-*. (Support for maintaining and releasing projects): Renamed from 'Support for maintaining and release projects'. Add announce-gen. 2007-03-31 Bruno Haible * README: Talk primarily about git. (git and CVS): Renamed from CVS. * doc/gnulib.texi (Introduction, Build robot for gnulib): Mention that gnulib is available through git. * doc/gnulib-tool.texi (CVS Issues): Mention git and svn as well. 2007-03-30 Bruno Haible * lib/alloca_.h: Change prefix of double-inclusion guard macro to _GL_. * lib/poll_.h: Likewise. * lib/stat_.h: Likewise. * lib/sys_time_.h: Likewise. * lib/sysexit_.h: Likewise. * lib/glob_.h: Prefix double-inclusion guard macro with _GL_. * lib/stdbool_.h: Likewise. * lib/byteswap_.h: Add double-inclusion guard. 2007-03-30 Sergey Poznyakoff * lib/sysexit_.h: Prefix double-inclusion guard macro with _GNULIB. 2007-03-30 Karl Berry * config/srclist-update: double space after USA in the license substitution, since that's how it's usually (?) written. 2007-03-30 Paul Eggert * lib/write-any-file.c (can_write_any_file): Fix else-else bug reported by Bruno Haible. 2007-03-29 Bruno Haible * m4/iconv.m4 (AM_ICONV_LINK): Require AC_CANONICAL_HOST. Test against a bug in AIX iconv(). 2007-03-29 Bruno Haible * modules/ldexpl-tests: New file. * tests/test-ldexpl.c: New file. 2007-03-29 Bruno Haible * lib/ldexpl.c: Include fpucw.h. (ldexpl): Use BEGIN/END_LONG_DOUBLE_ROUNDING. Skip the last unneeded multiplication. * modules/ldexpl (Depends-on): Add fpucw. 2007-03-29 Bruno Haible * modules/ldexpl: New file. * m4/ldexpl.m4: New file. * lib/math_.h (ldexpl): Define to a replacement if REPLACE_LDEXPL is set. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize also GNULIB_LDEXPL, REPLACE_LDEXPL. * modules/math (Makefile.am): Substitute also GNULIB_LDEXPL, REPLACE_LDEXPL. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Invoke gl_FUNC_LDEXPL_WORKS. * m4/mathl.m4 (gl_FUNC_LONG_DOUBLE_MATH): Remove test for ldexpl. * modules/mathl (Files): Remove lib/ldexpl.c. (Depends-on): Add ldexpl. 2007-03-29 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Declare frexpl. 2007-03-29 Bruno Haible * tests/test-striconveh.c (main): Don't assume that a direct conversion between ISO-8859-1 and ISO-8859-2 is possible. Needed for OSF/1, IRIX and possibly also HP-UX. * tests/test-striconveha.c (main): Don't expect "autodetect_jp" to work on AIX, IRIX, HP-UX, OSF/1. * tests/uniconv/test-u16-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u16-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u32-strconv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-conv-from-enc.c (main): Likewise. * tests/uniconv/test-u8-strconv-from-enc.c (main): Likewise. 2007-03-29 Bruno Haible * tests/test-stat-time.c: Include , not . 2007-03-29 Paul Eggert * lib/acl-internal.h (acl_get_fd, acl_set_fd): undef before defining, to work around a problem on OSF/1 5.1 reported by Bruno Haible. 2007-03-29 Eric Blake * lib/acl-internal.h: Remove redundant include. (ACL_NOT_WELL_SUPPORTED): Also filter on EBUSY, returned by Cygwin when a file is locked. 2007-03-29 Bruno Haible * lib/vasprintf.c [IN_LIBASPRINTF]: Include different specification file. * lib/asprintf.c [IN_LIBASPRINTF]: Likewise. 2007-03-29 Paul Eggert * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Don't bother to try to remove a parent directory if the child couldn't be removed (except for the first rmdir, which could fail because the child doesn't exist). Problem reported by Jeff Blaine in . 2007-03-28 Bruno Haible * lib/striconveh.c (utf8conv_carefully): New function. (mem_cd_iconveh_internal): Invoke it. 2007-03-28 Bruno Haible * lib/striconveh.c (mem_cd_iconveh_internal): Use u8_mbtoucr instead of u8_mbtouc in order to distinguish invalid and incomplete UTF-8 input. * modules/striconveh (Depends-on): Add unistr/u8-mbtoucr. Replace utf8-ucs4 with unistr/u8-mbtouc. Replace ucs4-utf8 with unistr/u8-uctomb. 2007-03-28 Bruno Haible * modules/unistr/u8-mbtoucr: New file. * lib/unistr/u8-mbtoucr.c: New file. * modules/unistr/u16-mbtoucr: New file. * lib/unistr/u16-mbtoucr.c: New file. * modules/unistr/u16-mbtoucr: New file. * lib/unistr/u16-mbtoucr.c: New file. * lib/unistr.h (u8_mbtoucr, u16_mbtoucr, u32_mbtoucr): New declarations. 2007-03-27 Simon Josefsson Bruno Haible * m4/vasprintf.m4: Convert AC_SUBST into shell variable for REPLACE_VASPRINTF. Set HAVE_VASPRINTF. Add AC_REQUIRE([gl_STDIO_H_DEFAULTS]). * m4/stdio_h.m4: Add stubs for vasprintf too. * modules/stdio: Support vasprintf in sed command. * modules/vasprintf: Depend on stdio for prototypes. Remove vasprintf.h. Add stdio module indicator. * lib/stdio_.h: Declare asprintf and vasprintf, based on vasprintf.h. * lib/vasprintf.h: File removed. * lib/asprintf.c: Use stdio.h instead of vasprintf.h. * lib/vasprintf.c: Ditto. * lib/xvasprintf.c: Ditto. * tests/test-vasprintf-posix.c: Ditto. * tests/test-vasprintf.c: Ditto. 2007-03-27 Bruno Haible Make vasnprintf multithread-safe. * lib/vasnprintf.c (decimal_point_char): New function. (VASNPRINTF): Use it. Suggested by Simon Josefsson. 2007-03-27 Eric Blake Support sub-second birthtime on cygwin. * m4/stat-time.m4 (gl_STAT_BIRTHTIME): Also check for st_birthtim. * lib/stat-time.h (STAT_TIMESPEC): Adjust comments. (get_stat_birthtime): Also work with st_birthtim. 2007-03-27 Paul Eggert * lib/stat-time.h (USE_BIRTHTIME): Remove. (get_stat_atime_ns, get_stat_ctime_ns, get_stat_mtime_ns): (get_stat_birthtime_ns): Do not try to use "spare" fields. (get_stat_birthtime_ns): Simplify compile-time tests. (get_stat_birthtime): Change the API to look like get_stat_mtime etc., except return a negative tv_nsec on error. * m4/stat-time.m4 (gl_STAT_TIME, gl_STAT_BIRTHTIME): Don't check for "spare" fields. (gl_STAT_BIRTHTIME): Don't check for struct stat.st_birthtimespec.tv_sec or for struct stat.st_birthtime, as these tests aren't used. * tests/test-stat-time.c (test_birthtime): Adjust to new API. 2007-03-27 Bruno Haible * lib/stat-time.h: Include . 2007-03-27 James Youngman * lib/stat-time.h (get_stat_birthtime): New function for retrieving st_birthtime as provided by UFS2 (hence *BSD). * m4/stat-time.m4 (gl_STAT_BIRTHTIME): Probe for st_birthtime and its variants. * modules/stat-time (configure.ac): call gl_STAT_BIRTHTIME. * modules/stat-time-test: New file. * tests/test-stat-time.c: New test, devised by Bruno Haible. 2007-03-26 Bruno Haible Better support of signalling NaNs. * lib/atanl.c: Include isnanl.h. (atanl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/cosl.c: Include isnanl.h. (cosl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/ldexpl.c: Include isnanl.h. (ldexpl): Perform test for NaN through a call to isnanl. * lib/logl.c: Include isnanl.h. (logl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/sinl.c: Include isnanl.h. (sinl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/sqrtl.c: Include isnanl.h. (sqrtl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/tanl.c: Include isnanl.h. (tanl): Perform test for NaN at the beginning of the function and through a call to isnanl. * lib/trigl.c (ieee754_rem_pio2l): Remove test for NaN. * modules/mathl (Depends-on): Add isnanl. 2007-03-26 Eric Blake * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_A): Fix regression in logic sense of previous patch. 2007-03-26 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_A): Don't use unportable shell command "if ! ...". Reported by Ralf Wildenhues. 2007-03-25 Bruno Haible * lib/sysexit_,h: If HAVE_SYSEXITS_H is defined, include the original file, and only add EX_CONFIG. * m4/sysexits.m4 (gl_SYSEXITS): If exists, check its absolute file name and whether it is sufficient. Substitute also HAVE_SYSEXITS_H and ABSOLUTE_SYSEXITS_H. * modules/sysexits (Makefile.am): Substitute HAVE_SYSEXITS_H and ABSOLUTE_SYSEXITS_H into sysexits.h. 2007-03-25 Bruno Haible * lib/getaddrinfo.c (getaddrinfo): Don't access hints->ai_flags when hints is NULL. 2007-03-25 Bruno Haible * lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): Add a cast. * lib/uniconv/u8-strconv-to-enc.c (u8_strconv_to_encoding): Likewise. 2007-03-25 Bruno Haible * lib/vasnprintf.c: Include langinfo.h. (VASNPRINTF): Prefer nl_langinfo over localeconv, since it's more multithread-safe. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_DIRECTIVE_A): New macro. * m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke it. * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX: Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. Reported by Simon Josefsson. 2007-03-25 Bruno Haible * lib/printf-parse.c [!IN_LIBINTL]: Include , for intmax_t. (PRINTF_PARSE): Make the support for size specifier 'j' unconditional. * modules/vasnprintf (Depends-on): Add stdint. 2007-03-25 Bruno Haible * modules/fpieee: New file. * m4/fpieee.m4: New file. * modules/isnan-nolibm (Depends-on): Add fpieee. * modules/isnanl-nolibm (Depends-on): Add fpieee. * modules/isnanl (Depends-on): Add fpieee. 2007-03-25 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): Test also finite numbers. 2007-03-25 Bruno Haible Avoid test failures on IRIX 6.5. * tests/test-frexpl.c (MIN_NORMAL_EXP): New macro. (main): Use it. * tests/test-printf-frexpl.c (MIN_NORMAL_EXP, MIN_SUBNORMAL_EXP): New macros. (main): Use them. 2007-03-25 Bruno Haible * m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): New macro. (gl_FUNC_FREXPL): Invoke it. Set REPLACE_FREXPL to 1 if it frexpl exists but doesn't work. * lib/math_.h (frexpl): Define as a replacement macro if REPLACE_FREXPL is set. Don't provide a prototype if REPLACE_FREXPL is not set. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_FREXPL. * modules/math (Makefile.am): Substitute also REPLACE_FREXPL into math.h. 2007-03-25 Bruno Haible * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Add check whether frexp(inf) returns inf. Needed on IRIX 6.5. 2007-03-25 Bruno Haible * tests/test-frexpl.c: Include isnanl-nolibm.h. (main): Use isnanl instead of x != x idiom. * modules/frexpl-tests (Depends-on): Add isnanl-nolibm. * tests/test-frexp.c: Include isnan.h. (main): Use isnan instead of x != x idiom. * modules/frexp-tests (Depends-on): Add isnan-nolibm. 2007-03-25 Bruno Haible * tests/test-frexp.c (NaN): New function/macro. (main): Use it instead of 0.0 / 0.0. * tests/test-isnan.c (NaN): New function/macro. (main): Use it instead of 0.0 / 0.0. * tests/test-vasnprintf-posix.c (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * tests/test-vasprintf-posix.c (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * tests/test-snprintf-posix.h (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * tests/test-sprintf-posix.h (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * tests/test-fprintf-posix.h (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * tests/test-printf-posix.h (NaN): New function/macro. (test_function): Use it instead of 0.0 / 0.0. * lib/isnan.c (FUNC): Work around a DEC C compiler bug. 2007-03-25 Bruno Haible * lib/glob_.h: Include . Avoids warnings on AIX 5.1. 2007-03-25 Bruno Haible * lib/regexec.c (merge_state_with_log): Make static. 2007-03-25 Bruno Haible * lib/trigl.c (kernel_rem_pio2): Make static. 2007-03-25 Bruno Haible * lib/sincosl.c (sincosl_table): Make static. 2007-03-25 Bruno Haible * lib/argp.h (__restrict): Define to empty, rather than to 'restrict', if the compiler does not support C99. 2007-03-25 Bruno Haible * modules/time (Makefile.am): Ensure all rule action lines start with a tab. 2007-03-24 Bruno Haible * modules/tsearch-tests: New file. * tests/test-tsearch.sh: New file. * tests/test-tsearch.c: New file, mostly copied from glibc. * modules/search-tests: New file. * tests/test-search.c: New file. * modules/search: New file. * lib/search_.h: New file, incorporating lib/tsearch.h. * m4/search_h.m4: New file. * lib/tsearch.h: Remove file. * lib/tsearch.c: Include search.h instead of tsearch.h. * m4/tsearch.m4 (gl_FUNC_TSEARCH): Require gl_SEARCH_H_DEFAULTS. Set HAVE_TSEARCH. * modules/tsearch (Files): Remove lib/tsearch.h. (Depends-on): Add search. (configure.ac): Invoke gl_SEARCH_MODULE_INDICATOR. (Include): Change tsearch.h into search.h. 2007-03-24 Bruno Haible * modules/fpucw: New file. * lib/fpucw.h: New file. * lib/frexp.c: Include fpucw.h. (DECL_ROUNDING, BEGIN_ROUNDING, END_ROUNDING): New macros. (FUNC): Use them. * lib/printf-frexp.c: Include fpucw.h. (DECL_ROUNDING, BEGIN_ROUNDING, END_ROUNDING): New macros. (FUNC): Use them. * lib/vasnprintf.c: Include fpucw.h. (VASNPRINTF): Invoke BEGIN/END_LONG_DOUBLE_ROUNDING around the 'long double' calculations. * tests/test-frexpl.c: Include fpucw.h. (main): Invoke BEGIN_LONG_DOUBLE_ROUNDING. * tests/test-printf-frexpl.c: Include fpucw.h. (main): Invoke BEGIN_LONG_DOUBLE_ROUNDING. * modules/frexpl (Depends-on): Add fpucw. * modules/printf-frexpl (Depends-on): Likewise. * modules/fprintf-posix (Depends-on): Likewise. * modules/snprintf-posix (Depends-on): Likewise. * modules/sprintf-posix (Depends-on): Likewise. * modules/vasnprintf-posix (Depends-on): Likewise. * modules/vasprintf-posix (Depends-on): Likewise. * modules/vfprintf-posix (Depends-on): Likewise. * modules/vsnprintf-posix (Depends-on): Likewise. * modules/vsprintf-posix (Depends-on): Likewise. * modules/frexpl-tests (Depends-on): Likewise. * modules/printf-frexpl-tests (Depends-on): Likewise. 2007-03-24 Bruno Haible * lib/float+.h: New file. * lib/isnan.c: Include float+.h. (SIZE): New macro. (FUNC): Compare only SIZE bytes of the value. * lib/vasnprintf.c: Include float+.h. (VASNPRINTF): When comparing against +0.0L or +0.0, compare only SIZEOF_LDBL or SIZEOF_DBL bytes. * modules/isnan-nolibm (Files): Add lib/float+.h. * modules/isnanl-nolibm (Files): Add lib/float+.h. * modules/isnanl (Files): Add lib/float+.h. * modules/vasnprintf (Files): Add lib/float+.h. 2007-03-24 Bruno Haible * lib/vasnprintf.c [!HAVE_LONG_DOUBLE]: Include printf-frexp.h. Don't include isnanl-nolibm.h. 2007-03-24 Bruno Haible * tests/test-read-file.c (main): Don't produce spurious output for expected situations. Make the test fail if it encountered unexpected results. 2007-03-24 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR): Remove the special-casing of NetBSD, since its fr_FR.ISO8859-1 locale wouldn't pass the tests. 2007-03-24 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Fix last change. 2007-03-24 Bruno Haible * modules/unistr/base (Depends-on): Remove utf8-ucs4-unsafe, utf16-ucs4-unsafe, utf8-ucs4, utf16-ucs4, ucs4-utf8, ucs4-utf16. * modules/unistr/u8-mbtouc: Add source files from module utf8-ucs4. * modules/utf8-ucs4: Turn into a symbolic link to module unistr/u8-mbtouc. * modules/unistr/u8-mbtouc-unsafe: Add source files from module utf8-ucs4-unsafe. * modules/utf8-ucs4-unsafe: Turn into a symbolic link to module unistr/u8-mbtouc-unsafe. * modules/unistr/u16-mbtouc: Add source files from module utf16-ucs4. * modules/utf16-ucs4: Turn into a symbolic link to module unistr/u16-mbtouc. * modules/unistr/u16-mbtouc-unsafe: Add source files from module utf16-ucs4-unsafe. * modules/utf16-ucs4-unsafe: Turn into a symbolic link to module unistr/u16-mbtouc-unsafe. * modules/unistr/u8-uctomb: Add source files from module utf4-utf8. * modules/ucs4-utf8: Turn into a symbolic link to module unistr/u8-ubtomb. * modules/unistr/u16-uctomb: Add source files from module utf4-utf16. * modules/ucs4-utf16: Turn into a symbolic link to module unistr/u16-ubtomb. 2007-03-24 Bruno Haible * lib/unistr/u8-mbtouc-aux.c: Renamed from lib/unistr/utf8-ucs4.c. Enable the function only if HAVE_INLINE. * lib/unistr/u8-mbtouc-unsafe-aux.c: Renamed from lib/unistr/utf8-ucs4-unsafe.c. Enable the function only if HAVE_INLINE. * lib/unistr/u16-mbtouc-aux.c: Renamed from lib/unistr/utf16-ucs4.c. Enable the function only if HAVE_INLINE. * lib/unistr/u16-mbtouc-unsafe-aux.c: Renamed from lib/unistr/utf16-ucs4-unsafe.c. Enable the function only if HAVE_INLINE. * lib/unistr/u8-uctomb-aux.c: Renamed from lib/unistr/ucs4-utf8.c. Enable the function only if HAVE_INLINE. * lib/unistr/u16-uctomb-aux.c: Renamed from lib/unistr/ucs4-utf16.c. Enable the function only if HAVE_INLINE. * modules/utf8-ucs4: Update. * modules/utf8-ucs4-unsafe: Update. * modules/utf16-ucs4: Update. * modules/utf16-ucs4-unsafe: Update. * modules/ucs4-utf8: Update. * modules/ucs4-utf16: Update. 2007-03-24 Bruno Haible * lib/utf8-ucs4.h: Remove file. * lib/utf8-ucs4-unsafe.h: Remove file. * lib/utf16-ucs4.h: Remove file. * lib/utf16-ucs4-unsafe.h: Remove file. * lib/ucs4-utf8.h: Remove file. * lib/ucs4-utf16.h: Remove file. * lib/unistr.h: Include their previous contents. * m4/utf-ucs4.m4: Remove file. * m4/ucs4-utf.m4: Remove file. * modules/utf8-ucs4 (Files): Remove lib/utf8-ucs4.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UTF_UCS4. (Makefile.am): Update. (Include): Change to unistr.h. * modules/utf8-ucs4-unsafe (Files): Remove lib/utf8-ucs4-unsafe.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UTF_UCS4. (Makefile.am): Update. (Include): Change to unistr.h. * modules/utf16-ucs4 (Files): Remove lib/utf16-ucs4.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UTF_UCS4. (Makefile.am): Update. (Include): Change to unistr.h. * modules/utf16-ucs4-unsafe (Files): Remove lib/utf16-ucs4-unsafe.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UTF_UCS4. (Makefile.am): Update. (Include): Change to unistr.h. * modules/ucs4-utf8 (Files): Remove lib/ucs4-utf8.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UCS4_UTF. (Makefile.am): Update. (Include): Change to unistr.h. * modules/ucs4-utf16 (Files): Remove lib/ucs4-utf16.h. (Depends-on): Add unistr/base. (configure.ac): Remove gl_UCS4_UTF. (Makefile.am): Update. (Include): Change to unistr.h. * lib/unistr/utf8-ucs4.c: Include unistr.h instead of utf8-ucs4.h. * lib/unistr/utf8-ucs4-unsafe.c: Include unistr.h instead of utf8-ucs4-unsafe.h. * lib/unistr/utf16-ucs4.c: Include unistr.h instead of utf16-ucs4.h. * lib/unistr/utf16-ucs4-unsafe.c: Include unistr.h instead of utf16-ucs4-unsafe.h. * lib/unistr/ucs4-utf8.c: Include unistr.h instead of ucs4-utf8.h. * lib/unistr/ucs4-utf16.c: Include unistr.h instead of ucs4-utf16.h. * lib/unistr/u8-chr.c: Don't include ucs4-utf8.h. * lib/unistr/u8-strchr.c: Likewise. * lib/unistr/u8-strrchr.c: Likewise. * lib/unistr/u16-chr.c: Don't include ucs4-utf16.h. * lib/unistr/u16-strchr.c: Likewise. * lib/unistr/u16-strrchr.c: Likewise. * lib/striconveh.c: Update. * lib/linebreak.c: Update. 2007-03-24 Bruno Haible * lib/argp-help.c (fill_in_uparams, canon_doc_option): Cast the arguments of isspace, isalpha, isalnum, isdigit to 'unsigned char'. 2007-03-22 Bruno Haible * lib/strptime.c (__strptime_internal): Use ANSI C syntax. 2007-03-23 Paul Eggert * MODULES.html.sh (File system functions): New module write-any-file. * modules/write-any-file, lib/write-any-file.c, lib/write-any-file.h: * m4/write-any-file.m4: New files. 2007-03-23 Eric Blake * gnulib-tool: Rearrange space-tab sequences, since some editors like to eat them. 2007-03-23 Eric Blake * lib/version-etc.c (version_etc_va): Update license wording to be more concise. Recommended by Richard Stallman. 2007-03-22 Bruno Haible * lib/poll.c (MSG_PEEK): New fallback definition. 2007-03-22 Bruno Haible * modules/sys_socket-tests (configure.ac): Check for shutdown function. * tests/test-sys_socket.c (a): Test only if shutdown() exists. (main): Update. Fixes a compilation error on BeOS. 2007-03-22 Bruno Haible * modules/frexpl-tests: New file. * tests/test-frexpl.c: New file. * modules/frexpl: New file. * m4/frexpl.m4: New file. * modules/math (Makefile.am): Also substitute GNULIB_FREXPL into math.h. * lib/math_.h (frexpl): Test GNULIB_FREXPL instead of GNULIB_MATHL. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize GNULIB_FREXPL. * modules/mathl (Files): Remove lib/frexpl.c, lib/frexp.c. (Depends-on): Add frexpl. Remove isnanl-nolibm. * m4/mathl.m4 (gl_FUNC_LONG_DOUBLE_MATH): Don't test for frexpl. 2007-03-22 Bruno Haible * lib/frexpl.c: Share code with lib/frexp.c. * modules/mathl (Files): Add lib/frexp.c. (Depends-on): Add isnanl-nolibm. 2007-03-22 Bruno Haible * modules/printf-frexp (Files): Add m4/frexp.m4. * m4/printf-frexp.m4 (gl_FUNC_PRINTF_FREXP): Define HAVE_FREXP_IN_LIBC only if the found frexp function actually works. 2007-03-22 Bruno Haible * lib/frexp.c: Remove older implementation that uses divisions. 2007-03-21 Bruno Haible * modules/frexp-tests: New file. * tests/test-frexp.c: New file. * modules/frexp: New file. * lib/frexp.c: New file. * m4/frexp.m4: New file. * lib/math_.h (frexp): New declaration. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Also initialize GNULIB_FREXP and REPLACE_FREXP. * modules/math (math.h): Also substitute GNULIB_FREXP, REPLACE_FREXP. 2007-03-21 Bruno Haible * modules/isnanl-tests: New file. * tests/test-isnanl.c: New file. * modules/isnanl: New file. * lib/isnanl.h: New file. * m4/isnanl.m4 (gl_FUNC_ISNANL): New macro. (gl_FUNC_ISNANL_NO_LIBM): Invoke gl_HAVE_ISNANL_NO_LIBM, gl_FUNC_ISNANL_WORKS. (gl_HAVE_ISNANL_NO_LIBM, gl_HAVE_ISNANL_IN_LIBM, gl_FUNC_ISNANL_WORKS): New macros. 2007-03-21 Bruno Haible * modules/isnanl-nolibm (Files): Add lib/isnanl-nolibm.h, remove lib/isnanl.h. (Include): Update. * lib/isnanl-nolibm.h: Renamed from lib/isnanl.h. * lib/vasnprintf.c: Update. * modules/isnanl-nolibm-tests (Files): Add tests/test-isnanl-nolibm.c, tests/test-isnanl.h, remove tests/test-isnanl.c. (Makefile.am): Update. * tests/test-isnanl-nolibm.c: New file. * tests/test-isnanl.h: New file. * tests/test-isnanl.c: Remove file. 2007-03-21 Jim Meyering When trying to open ".", treat ESTALE like EACCES. * lib/savewd.c (savewd_save): Resort to forking not just upon failure with EACCES, but also when errno is ESTALE. 2007-03-20 Bruno Haible * lib/string_.h (strndup): Enable declaration also if HAVE_STRNDUP. Needed on AIX 5.1. Reported by Matthew Woehlke. 2007-03-19 Paul Eggert Suggestions by Bruno Haible: * lib/acl-internal.h: Include "gettext.h" rather than rolling our own. (ACL_NOT_WELL_SUPPORTED): Parenthesize arg when used. * modules/acl (Depends-on): Add gettext. 2007-03-19 Bruno Haible * modules/iconvme: Remove file. * lib/iconvme.h: Remove file. * lib/iconvme.c: Remove file. * m4/iconvme.m4: Remove file. 2007-03-19 Bruno Haible * doc/relocatable-maint.texi: Break long shell script line. Suggested by Thien-Thi Nguyen . 2007-03-19 Paul Eggert Add limited support for Solaris 10 ZFS-style ACLs: just enough to handle file_has_acl. * lib/acl-internal.h, lib/acl_entries.c, lib/file-has-acl.c: New files. * lib/acl.c: Move header inclusions and related macro defns into lib/acl-internal.h. (S_ISLNK): Remove defn, since that's now done for us. (file_has_acl): Move to lib/file-has-acl.c. Call acl_trivial if available. This is the crucial part of the fix. (acl_entries): Move to lib/acl_entries.c. Now extern, since it's shared within the library. Rewrite a bit, partly to make it compatible with the GNU coding style. * m4/acl.m4 (AC_FUNC_ACL): Add AC_LIBOBJ([file-has-acl]). Remove unnecessary double-quotes. Don't test for acl_to_text; the build will catch that. Replace acl_entries if it doesn't exist and it is needed. Check for -lsec and acl_trivial (as used on Solaris 10). * modules/acl (Files): Add lib/acl-internal.h, lib/acl_entries.c, lib/file-has-acl.c. (Depends-on): Add sys_stat, for S_ISLNK. 2007-03-19 Ben Pfaff * doc/gnulib.texi: Fix typos. Suggested by Thien-Thi Nguyen . 2007-03-19 Paul Eggert * lib/getcwd.c (__getcwd): Remove redundant comparison of buf to NULL. If size is zero here, buf must be zero. 2007-03-19 Simon Josefsson * des.c: Remove weak_keys_chksum. Reported by Bruno Haible . 2007-03-18 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Undo first part of last patch. Suggested by Eric Blake. 2007-03-18 Ben Pfaff * doc/relocatable.texi: Recommend using as prefix a directory that does not exist and will never be created. Based on discussion with Bruno Haible, Ralf Wildenhues, Matthew Woehlke, and others. 2007-03-17 Bruno Haible * lib/fchownat.c: Include lchown.h. 2007-03-17 Bruno Haible Fix endless loop when the given allocated size was > INT_MAX. * lib/vasnprintf.c (EOVERFLOW): New fallback definition. (VASNPRINTF): Fail with EOVERFLOW when the given allocated size is larger than INT_MAX, or when it grow to a value larger than INT_MAX. * lib/vsprintf.c (vsprintf): Don't pass a size > INT_MAX to vasnprintf. * lib/sprintf.c (sprintf): Likewise. 2007-03-17 Bruno Haible * tests/test-argp-2.sh (func_compare): Output a context diff. 2007-03-17 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR, gt_LOCALE_FR_UTF8): Check also the locale's decimal-point character. 2007-03-17 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Clear out the memory used for arg_mem before comparing it. Needed because on some platforms (e.g. x86) a 'long double' occupies less bytes than sizeof (long double). 2007-03-17 Bruno Haible * tests/test-crc.c (main): Make printf statements 64-bit clean. * tests/test-gc-pbkdf2-sha1.c (main): Likewise. * tests/test-getaddrinfo.c (simple): Likewise. * tests/test-read-file.c (main): Likewise. 2007-03-17 Bruno Haible * tests/test-dirname.c (main): Make printf statements 64-bit clean. 2007-03-17 Bruno Haible * tests/test-xvasprintf.c (test_xvasprintf, test_xasprintf): Remove unused variable. 2007-03-17 Bruno Haible * tests/test-c-strcasecmp.c: Include c-strcase.h. * tests/test-c-strncasecmp.c: Likewise. 2007-03-17 Bruno Haible * modules/stdlib (Depends-on): Add unistd. * lib/stdlib_.h: Include if mkstemp is desired. Needed for MacOS X 10.3. 2007-03-17 Bruno Haible * lib/unistr/u-strdup.h: Include . 2007-03-17 Bruno Haible * lib/unistr/u-cpy-alloc.h: Include . 2007-03-17 Bruno Haible * gnulib-tool (func_import): Update .cvsignore and .gitignore files to reflect files copied from gnulib (with or without modifications). Suggested by Jim Meyering. 2007-03-17 Eric Blake * NEWS: Document stdlib change from 2007-02-18. 2007-03-17 Jim Meyering Detect use of AC_CONFIG_AUX_DIR also when its argument is quoted. * build-aux/bootstrap: Put ""s around use of $build_aux, in case someone uses a name containing shell meta-characters. Reported by Alfred M. Szmidt. * build-aux/bootstrap: Don't use \> in grep regexp. For HP-UX. 2007-03-16 Alfred M. Szmidt * build-aux/bootstrap (with_gettext): New variable. Run autopoint and copy gettext configuration files only if configure.ac contains a use of AM_GNU_GETTEXT_VERSION. 2007-03-16 Alfred M. Szmidt * build-aux/bootstrap (gnulib_name): New variable. (gnulib_tool_options): Use it. 2007-03-13 Simon Josefsson * tests/test-des.c: Use new namespace. 2007-03-15 Bruno Haible * lib/dummy.c (gl_dummy_symbol): Renamed from 'dummy'. Reported by James Youngman . 2007-03-15 Bruno Haible * lib/glob.c (glob): Add 'restrict' so that prototype matches the declared prototype. Needed with cc on OSF/1 5.1. 2007-03-15 Bruno Haible * lib/gl_list.h (gl_listelement_dispose_fn): New type. (gl_list_create_empty, gl_list_create): Add dispose_fn argument. (struct gl_list_implementation): Add dispose_fn argument to the 'create_empty', 'create' methods. (struct gl_list_impl_base): Add field 'dispose_fn'. * lib/gl_list.c (gl_list_create_empty, gl_list_create): Add dispose_fn argument. * lib/gl_array_list.c (gl_array_create_empty, gl_array_create): Add dispose_fn argument. (gl_array_remove_node, gl_array_remove_at, gl_array_list_free): Call dispose_fn on the dropped values. * lib/gl_carray_list.c (gl_carray_create_empty, gl_carray_create): Add dispose_fn argument. (gl_carray_remove_at, gl_carray_list_free): Call dispose_fn on the dropped values. * lib/gl_anyavltree_list2.h (gl_tree_create): Add dispose_fn argument. (gl_tree_remove_node): Call dispose_fn on the dropped value. * lib/gl_anyrbtree_list2.h (gl_tree_create): Add dispose_fn argument. (gl_tree_remove_node): Call dispose_fn on the dropped value. * lib/gl_anytree_list2.h (gl_tree_create_empty): Add dispose_fn argument. (gl_tree_list_free): Call dispose_fn on the dropped values. * lib/gl_anytreehash_list2.h (gl_tree_list_free): Call dispose_fn on the dropped values. * lib/gl_anylinked_list2.h (gl_linked_create_empty, gl_linked_create): Add dispose_fn argument. (gl_linked_remove_node, gl_linked_remove_at, gl_linked_list_free): Call dispose_fn on the dropped values. * lib/gl_sublist.c (gl_sublist_create_empty, gl_sublist_create_fill): Add dispose_fn argument. (gl_sublist_create): Initialize the 'dispose_fn' field. * lib/clean-temp.c (create_temp_dir, register_fd): Update. * tests/test-array_list.c (main): Update. * tests/test-carray_list.c (main): Update. * tests/test-avltree_list.c (main): Update. * tests/test-rbtree_list.c (main): Update. * tests/test-avltreehash_list.c (main): Update. * tests/test-rbtreehash_list.c (main): Update. * tests/test-linked_list.c (main): Update. * tests/test-linkedhash_list.c (main): Update. * tests/test-array_oset.c (main): Update. 2007-03-15 Bruno Haible * lib/gl_oset.h (gl_setelement_dispose_fn): New type. (gl_oset_create_empty): Add dispose_fn argument. (struct gl_oset_implementation): Add dispose_fn argument to 'create_empty' method. (struct gl_oset_impl_base): Add dispose_fn field. * lib/gl_oset.c (gl_oset_create_empty): Add dispose_fn argument. * lib/gl_array_oset.c (gl_array_create_empty): Add dispose_fn argument. (gl_array_remove_at, gl_array_free): Call dispose_fn on the dropped values. * lib/gl_anytree_oset.h (gl_tree_create_empty): Add dispose_fn argument. (gl_tree_oset_free): Call dispose_fn on the dropped values. * lib/gl_avltree_oset.c (gl_tree_remove_node): Call dispose_fn on the dropped value. * lib/gl_rbtree_oset.c (gl_tree_remove_node): Call dispose_fn on the dropped value. * tests/test-array_oset.c (main): Update. * tests/test-avltree_oset.c (main): Update. * tests/test-rbtree_oset.c (main): Update. * lib/gl_anytreehash_list1.h (add_to_bucket): Update. 2007-03-13 Bruno Haible * tests/test-stdbool.c (i): Update after last patch. 2007-03-12 Bruno Haible * lib/quotearg.c: Include early, before the definition of the iswprint macro. Needed on Solaris 2.5.1. 2007-03-12 Bruno Haible * tests/test-printf-frexp.c (main): Declare x as volatile. 2007-03-12 Simon Josefsson * doc/gnulib.texi (Build robot for gnulib): New section. 2007-03-12 Jim Meyering * build-aux/bootstrap: New file. * build-aux/bootstrap.conf: New file, from coreutils. 2007-03-11 Bruno Haible * m4/cycle-check.m4 (gl_CYCLE_CHECK): Require AC_C_INLINE. 2007-03-12 Simon Josefsson * lib/des.h, lib/des.c, lib/gc-gnulib.c: Use gl_ namespace, to avoid collisions with 'des_setkey'. Reported by Bruno Haible . Also change 'tripledes_' to '3des_'. 2007-03-11 Bruno Haible * m4/locale-tr.m4 (gt_LOCALE_TR_UTF8): If the test program fails to compile, set LOCALE_TR_UTF8 to 'none' instead of empty. 2007-03-11 Bruno Haible * lib/stdint_.h (INT64_MIN, INTMAX_MIN): Avoid using the ~INT..._MAX formula. Needed for SunPRO C 5.0. 2007-03-11 Bruno Haible * modules/long-options (Depends-on): Add getopt. 2007-03-11 Bruno Haible * modules/modechange (Depends-on): Add stdbool. 2007-03-11 Bruno Haible * modules/i-ring (Depends-on): Add stdbool. 2007-03-11 Bruno Haible * modules/gc-des (Depends-on): Add stdbool. 2007-03-11 Bruno Haible * m4/mktime.m4 (gl_PREREQ_MKTIME): Require AC_C_INLINE. 2007-03-11 Bruno Haible * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): Require AC_C_RESTRICT. 2007-03-11 Bruno Haible * lib/unistr/u32-mbtouc-unsafe.c (u32_mbtouc_unsafe): Fix syntax error. 2007-03-11 Bruno Haible * lib/vasnprintf.c (sprintf): Undefine. 2007-03-11 Bruno Haible * lib/isnan.c (rpl_isnan, rpl_isnanl): Work around bug regarding initializers in SunPRO C and Compaq C compilers. 2007-03-11 Bruno Haible * lib/gl_array_oset.c (gl_array_iterator_next): Make pointer decrementing code ANSI C compliant. 2007-03-11 Bruno Haible * lib/dummy.c [__sun]: Define a dummy variable, not just a typedef. Needed for Solaris 2.5.1 ranlib and SunPRO C 5.0. 2007-03-11 Bruno Haible * tests/test-stdbool.c (s, d, e, xlcbug): Disable checks that gnulib's substitute doesn't pass. 2007-03-11 Bruno Haible * lib/vasnprintf.c (snprintf): Undefine. Avoids an endless recursion. 2007-03-11 Bruno Haible * gnulib-tool (func_create_megatestdir): Create also an autobuild script, for submission to autobuild.josefsson.org. 2007-03-10 Bruno Haible * modules/canonicalize-lgpl-tests: New file. * tests/test-canonicalize-lgpl.sh: New file. * tests/test-canonicalize-lgpl.c: New file. * modules/c-strcase-tests: New file. * tests/test-c-strcase.sh: New file. * tests/test-c-strcasecmp.c: New file. * tests/test-c-strncasecmp.c: New file. * modules/atexit-tests: New file. * tests/test-atexit.sh: New file. * tests/test-atexit.c: New file. 2007-03-10 Bruno Haible * tests/test-binary-io.sh: Use temporary filenames that are not so likely to clash with those of other tests (in a parallel make). * tests/test-binary-io.c: Likewise. 2007-03-10 Bruno Haible * lib/fseterr.c (fseterr): Port to Solaris/SPARC64. Deactivate the fallback; use #error instead. Suggested by Simon Josefsson. 2007-03-10 Bruno Haible * gnulib-tool (func_create_testdir): Treat MOSTLYCLEANFILES like CLEANFILES. Put spaces in each line of $cleaned_files, not only the first and the last. 2007-03-10 Bruno Haible * lib/stdint_.h (uint_least64_t): Fix typo in last patch. 2007-03-10 Bruno Haible * modules/snprintf-posix-tests (EXTRA_DIST): New variable. Needed for "make distcheck". * modules/sprintf-posix-tests (EXTRA_DIST): Likewise. * modules/vsnprintf-posix-tests (EXTRA_DIST): Likewise. * modules/vsprintf-posix-tests (EXTRA_DIST): Likewise. 2007-03-10 Bruno Haible * modules/allocsa-tests (test_allocsa_SOURCES): Remove redundant variable. * modules/dirname-tests (test_dirname_SOURCES): Remove redundant variable. 2007-03-09 Eric Blake and Matthew Woehlke (tiny change) * lib/stdint_.h (int64_t, uint64_t): Don't undefine if 64-bit types are not being provided by gnulib. (GL_INT64_T, GL_UINT64_T): New witnesses of whether gnulib 64-bit types are supported. 2007-03-10 Bruno Haible * lib/stdio_.h (__attribute__): New macro. (fprintf, vfprintf, printf, vprintf, snprintf, vsnprintf, sprintf, vsprintf): Specify __attribute__ __format__ for GCC. Suggested by Eric Blake. 2007-03-09 Bruno Haible * modules/printf-posix-tests: New file. * tests/test-printf-posix.sh: New file. * tests/test-printf-posix.c: New file. * modules/printf-posix: New file. * lib/printf.c: New file. * m4/printf-posix-rpl.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_PRINTF_POSIX, REPLACE_PRINTF. * lib/stdio_.h (printf): New declaration. (format, __format__, ____printf____, ____scanf____, ____strftime____, ____strfmon____): New macros. * modules/stdio (Makefile.am): Substitute also GNULIB_PRINTF_POSIX, REPLACE_PRINTF. 2007-03-09 Bruno Haible * tests/test-vasnprintf-posix2.sh: New file. * tests/test-vasnprintf-posix2.c: New file. * modules/vasnprintf-posix-tests (Files): Add them and m4/locale-fr.m4. (configure.ac): Invoke gt_LOCALE_FR and gt_LOCALE_FR_UTF8. (Makefile.am): Activate test-vasnprintf-posix2.sh. * lib/vasnprintf.c (VASNPRINTF): For the 'a' and 'A' directives, use a locale dependent decimal point, rather than always '.'. 2007-03-09 Eric Blake * lib/stdlib_.h (EXIT_FAILURE): GNU code expects this to be 1, in spite of platforms like Tandem/NSK that define it to -1. 2007-03-08 Bruno Haible * modules/vprintf-posix-tests: New file. * tests/test-vprintf-posix.sh: New file. * tests/test-vprintf-posix.c: New file. * tests/test-printf-posix.h: New file. * modules/vprintf-posix: New file. * lib/vprintf.c: New file. * m4/vprintf-posix.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_VPRINTF_POSIX, REPLACE_VPRINTF. * lib/stdio_.h (vprintf): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_VPRINTF_POSIX, REPLACE_VPRINTF. 2007-03-08 Bruno Haible * modules/fprintf-posix-tests: New file. * tests/test-fprintf-posix.sh: New file. * tests/test-fprintf-posix.c: New file. * modules/fprintf-posix: New file. * lib/fprintf.c: New file. * m4/fprintf-posix.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_FPRINTF_POSIX, REPLACE_FPRINTF. * lib/stdio_.h (fprintf): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_FPRINTF_POSIX, REPLACE_FPRINTF. 2007-03-08 Bruno Haible * modules/vfprintf-posix-tests: New file. * tests/test-vfprintf-posix.sh: New file. * tests/test-vfprintf-posix.c: New file. * tests/test-fprintf-posix.h: New file. * tests/test-fprintf-posix.out: New file. * modules/vfprintf-posix: New file. * lib/vfprintf.c: New file. * m4/vfprintf-posix.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_VFPRINTF_POSIX, REPLACE_VFPRINTF. * lib/stdio_.h (vfprintf): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_VFPRINTF_POSIX, REPLACE_VFPRINTF. 2007-03-08 Bruno Haible * lib/stdio_.h: Treat __need___FILE like __need_FILE. 2007-03-08 Bruno Haible * m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Use 'case' statements instead of 'expr' invocations. * m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise. * m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise. Suggested by Paul Eggert. 2007-03-08 Bruno Haible * modules/fseterr-tests: New file. * tests/test-fseterr.c: New file. * modules/fseterr: New file. * lib/fseterr.h: New file. * lib/fseterr.c: New file. 2007-03-08 Bruno Haible * lib/fnmatch_.h: Convert tabs in the middle of lines to spaces. * lib/getopt_.h: Likewise. * lib/mbswidth.h: Likewise. * lib/setenv.h: Likewise. * lib/vasnprintf.h: Likewise. * lib/vasprintf.h: Likewise. * lib/verror.h: Likewise. * lib/xsetenv.h: Likewise. * lib/xvasprintf.h: Likewise. 2007-03-08 Jim Meyering * users.txt: Add parted. * ChangeLog: Restore 1500 lines mistakenly removed from the end. 2007-03-07 Bruno Haible * m4/printf.m4: Make the shell script snippets copy&pastable. 2007-03-02 Bruno Haible * lib/netinet_in_.h: New file. * m4/netinet_in_h.m4 (gl_HEADER_NETINET_IN): Test whether netinet/in.h is self-contained. Set ABSOLUTE_NETINET_IN_H, HAVE_NETINET_IN_H. * modules/netinet_in (Files): Add lib/netinet_in_.h. (Depends-on): Add absolute-header. (Makefile.am): Substitute ABSOLUTE_NETINET_IN_H, HAVE_NETINET_IN_H into netinet/in.h. 2007-03-03 Bruno Haible * lib/sys_select_.h: New file. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SELECT): Test whether sys/select.h is self-contained. Set ABSOLUTE_SYS_SELECT_H, HAVE_SYS_SELECT_H. * modules/sys_select (Files): Add lib/sys_select_.h. (Depends-on): Add absolute-header. (Makefile.am): Substitute ABSOLUTE_SYS_SELECT_H, HAVE_SYS_SELECT_H into sys/select.h. 2007-03-02 Bruno Haible * lib/socket_.h: If sys/socket.h exists, include that and before it. Turn HAVE_WINSOCK2_H and HAVE_WS2TCPIP_H into configute-time values. * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Test also whether is self-contained. Set ABSOLUTE_SYS_SOCKET_H, HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H, HAVE_WS2TCPIP_H. * modules/sys_socket (Depends-on): Add absolute-header. (Makefile.am): Substitute ABSOLUTE_SYS_SOCKET_H, HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H, HAVE_WS2TCPIP_H into sys/socket.h. (Include): Remove requirement of inclusion of . 2007-03-02 Bruno Haible * lib/byteswap_.h (bswap_32): Fix formula. 2007-03-06 Bruno Haible * modules/sprintf-posix-tests: New file. * tests/test-sprintf-posix.c: New file. * modules/sprintf-posix: New file. * lib/sprintf.c: New file. * m4/sprintf-posix.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_SPRINTF_POSIX, REPLACE_SPRINTF. * lib/stdio_.h (sprintf): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_SPRINTF_POSIX, REPLACE_SPRINTF. 2007-03-06 Bruno Haible * modules/vsprintf-posix-tests: New file. * tests/test-vsprintf-posix.c: New file. * tests/test-sprintf-posix.h: New file. * modules/vsprintf-posix: New file. * lib/vsprintf.c: New file. * m4/vsprintf-posix.m4: New file. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also GNULIB_VSPRINTF_POSIX, REPLACE_VSPRINTF. * lib/stdio_.h (vsprintf): New declaration. * modules/stdio (Makefile.am): Substitute also GNULIB_VSPRINTF_POSIX, REPLACE_VSPRINTF. 2007-03-06 Bruno Haible * modules/vsnprintf (Depend-on): Remove minmax. 2007-03-06 Bruno Haible * modules/snprintf-posix-tests: New file. * tests/test-snprintf-posix.c: New file. * modules/snprintf-posix: New file. * m4/snprintf-posix.m4: New file. * m4/snprintf.m4 (gl_REPLACE_SNPRINTF): New macro, extracted from gl_FUNC_SNPRINTF. (gl_FUNC_SNPRINTF): Invoke it. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also REPLACE_SNPRINTF. * lib/stdio_.h (snprintf): Define as a replacement if REPLACE_SNPRINTF is set. * modules/stdio (Makefile.am): Substitute also REPLACE_SNPRINTF. 2007-03-06 Bruno Haible * modules/vsnprintf-posix-tests: New file. * tests/test-vsnprintf-posix.c: New file. * tests/test-snprintf-posix.h: New file. * modules/vsnprintf-posix: New file. * m4/vsnprintf-posix.m4: New file. * m4/vsnprintf.m4 (gl_REPLACE_VSNPRINTF): New macro, extracted from gl_FUNC_VSNPRINTF. (gl_FUNC_VSNPRINTF): Invoke it. * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also REPLACE_VSNPRINTF. * lib/stdio_.h (vsnprintf): Define as a replacement if REPLACE_VSNPRINTF is set. * modules/stdio (Makefile.am): Substitute also REPLACE_VSNPRINTF. 2007-03-06 Bruno Haible * m4/vasnprintf.m4 (gl_REPLACE_VASNPRINTF): Test for vasnprintf here. * m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): ... not here. 2007-03-06 Bruno Haible * lib/math_.h (acosl): Declare also if HAVE_DECL_ACOSL is set. (asinl): Declare also if HAVE_DECL_ASINL is set. (atanl): Declare also if HAVE_DECL_ATANL is set. (ceill): Declare also if HAVE_DECL_CEILL is set. (cosl): Declare also if HAVE_DECL_COSL is set. (expl): Declare also if HAVE_DECL_EXPL is set. (floorl): Declare also if HAVE_DECL_FLOORL is set. (frexpl): Declare also if HAVE_DECL_FREXPL is set. (ldexpl): Declare also if HAVE_DECL_LDEXPL is set. (logl): Declare also if HAVE_DECL_LOGL is set. (sinl): Declare also if HAVE_DECL_SINL is set. (sqrtl): Declare also if HAVE_DECL_SQRTL is set. (tanl): Declare also if HAVE_DECL_TANL is set. * modules/math (Makefile.am): Substitute the values of HAVE_DECL_*. * m4/math_h.m4 (gl_MATH_H_DEFAULTS): Set HAVE_DECL_* to 1. * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Fix tests for the declaration of frexpl, ldexpl. * modules/printf-frexpl (Depends-on): Add math. * lib/printf-frexp.c (frexpl, ldexpl): Undo last change. 2007-03-05 Bruno Haible * m4/printf-frexpl.m4 (gl_FUNC_PRINTF_FREXPL): Also test whether frexpl and ldexpl are declared. * lib/printf-frexp.c (frexpl, ldexpl): Provide fallback declarations. 2007-03-05 Bruno Haible * gnulib-tool (func_get_automake_snippet): Don't synthesize an EXTRA_lib_SOURCES augmentation for the relocatable-prog-wrapper module. 2007-03-05 Bruno Haible * lib/stdio_.h: Include . 2007-03-05 Bruno Haible * m4/printf.m4 (gl_SNPRINTF_DIRECTIVE_N): New macro. 2007-03-05 Bruno Haible * m4/printf.m4: Update with info about OpenBSD 3.9, HP-UX 10.20, NetBSD 4, from Ralf Wildenhues. 2007-03-04 Bruno Haible * lib/vasprintf.h: Update #if logic for the case when the functions exist but are overridden. 2007-03-04 Bruno Haible * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Exclude two buggy implementations: glibc-2.4 and MacOS X 10.3. * tests/test-vasnprintf-posix.c (test_function): Test also the case that exhibits the bugs in glibc-2.4 and MacOS X 10.3. * tests/test-vasprintf-posix.c (test_function): Likewise. 2007-03-04 Bruno Haible * modules/vasprintf-posix-tests: New file. * tests/test-vasprintf-posix.c: New file. * modules/vasprintf-posix: New file. * lib/vasprintf.h (asprintf, vasprintf): Rename if REPLACE_VASPRINTF is defined. * m4/vasprintf-posix.m4: New file. * m4/vasprintf.m4 (gl_REPLACE_VASPRINTF): New macro, extracted from gl_FUNC_VASPRINTF. (gl_FUNC_VASPRINTF): Invoke it. * m4/vasnprintf.m4 (gl_REPLACE_VASNPRINTF): Define REPLACE_VASNPRINTF here. * m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Not here. 2007-03-04 Bruno Haible * lib/sys_time_.h: Rename GETTIMEOFDAY_REPLACEMENT to REPLACE_GETTIMEOFDAY. * modules/sys_time (Makefile.am): Likewise. * m4/sys_time_h.m4: Likewise. * m4/gettimeofday.m4: Likewise. 2007-03-04 Bruno Haible * modules/vasnprintf-posix-tests: New file. * tests/test-vasnprintf-posix.c: New file. * modules/vasnprintf-posix: New file. * lib/vasnprintf.c: Include isnan.h, isnanl.h, printf-frexp.h, printf-frexpl.h. (VASNPRINTF): Handle the 'a' and 'A' directives here, if needed. * lib/vasnprintf.h (asnprintf, vasnprintf): Rename if REPLACE_VASNPRINTF is defined. * m4/vasnprintf.m4 (gl_REPLACE_VASNPRINTF): New macro, extracted from gl_FUNC_VASNPRINTF. (gl_FUNC_VASNPRINTF): Invoke it. * m4/vasnprintf-posix.m4: New file. * m4/printf.m4: New file. 2007-03-04 Bruno Haible Compile progreloc.c only if --enable-relocatable is specified. * m4/relocatable.m4 (gl_RELOCATABLE): Arrange to compile progreloc.c if --enable-relocatable was specified. * modules/relocatable-prog (Makefile.am): Remove progreloc.c from lib_SOURCES. 2007-03-04 Jim Meyering * lib/acl.c (ACL_NOT_WELL_SUPPORTED): New macro. Use it consistently, rather than enumerating errno constants. 2007-03-04 Bruno Haible * modules/xvasprintf-tests: New file. * tests/test-xvasprintf.c: New file. * modules/vasprintf-tests: New file. * tests/test-vasprintf.c: New file. * modules/vasnprintf-tests: New file. * tests/test-vasnprintf.c: New file. * modules/vsnprintf-tests: New file. * tests/test-vsnprintf.c: New file. * modules/snprintf-tests: New file. * tests/test-snprintf.c: New file. 2007-03-04 Bruno Haible Compile relocatable.c only if --enable-relocatable is specified. * m4/relocatable-lib.m4 (gl_RELOCATABLE_LIBRARY_BODY): Renamed from gl_RELOCATABLE_LIBRARY. (gl_RELOCATABLE_LIBRARY, gl_RELOCATABLE_LIBRARY_SEPARATE): New macros. * m4/relocatable.m4 (gl_RELOCATABLE): Invoke gl_RELOCATABLE_LIBRARY. (gl_RELOCATABLE_BODY): Require gl_RELOCATABLE_LIBRARY_BODY instead of gl_RELOCATABLE_LIBRARY. * modules/relocatable-lib (configure.ac): Invoke gl_RELOCATABLE_LIBRARY. (Makefile.am): Remove lib_SOURCES. * modules/relocatable-lib-lgpl (configure.ac): Invoke gl_RELOCATABLE_LIBRARY. (Makefile.am): Remove lib_SOURCES. * modules/relocatable-prog (Makefile.am): Don't compile relocatable.c always. * modules/relocatable-prog-wrapper (configure.ac): Invoke gl_RELOCATABLE_LIBRARY_SEPARATE instead of gl_RELOCATABLE_LIBRARY. 2007-03-04 Bruno Haible * modules/argmatch-tests: New file. * tests/test-argmatch.c: New file. * tests/test-allocsa.c (main): Halve the number of loop runs. * modules/alloca-opt-tests: New file. * tests/test-alloca-opt.c: New file. 2007-03-04 Jim Meyering Work around difference between Linux ACLs and Solaris 10 ZFS. * lib/acl.c (set_acl): Revert to using chmod_or_fchmod also for EINVAL. 2007-03-03 Bruno Haible * modules/relocatable-prog (Depends-on): Add back progreloc's dependencies: canonicalize-lgpl, xalloc, xreadlink, stdbool, unistd. 2007-03-03 Bruno Haible * modules/relocatable-lib-lgpl: Renamed from modules/relocatable-lib. * modules/relocatable-lib: New file. 2007-03-03 Bruno Haible * modules/relocatable-prog: Renamed from modules/relocatable. * doc/relocatable-maint.texi: Talk about module 'relocatable-prog'. 2007-03-03 Bruno Haible * modules/relocatable-script (Files): Add doc/relocatable.texi, m4/relocatable-lib.m4. (Depends-on): Remove 'relocatable'. (configure.ac): Add gl_RELOCATABLE_NOP. 2007-03-03 Bruno Haible * modules/relocatable-prog-wrapper: New file. * modules/relocatable (Depends-on): Add it. Remove all other dependencies except progname. (Files): Remove build-aux/install-reloc, lib/relocwrapper.c. * m4/strerror.m4 (gl_FUNC_STRERROR_SEPARATE): New macro. (gl_FUNC_STRERROR): Nop. * lib/strerror.c: Compile the file only if !HAVE_STRERROR. * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): New macro. * lib/setenv.c: Compile the file only if _LIBC || !HAVE_SETENV. * m4/readlink.m4 (gl_FUNC_READLINK_SEPARATE): New macro. (gl_FUNC_READLINK): Update. * m4/canonicalize-lgpl.m4 (gl_CANONICALIZE_LGPL_SEPARATE): New macro. 2007-03-03 Bruno Haible * lib/xreadlink.c: Include unconditionally. * modules/xreadlink (Depends-on): Add unistd. * modules/xreadlink-with-size (Depends-on): Likewise. 2007-03-03 Bruno Haible * m4/setenv.m4 (gl_FUNC_SETENV, gl_FUNC_UNSETENV): New macros, extracted from gt_FUNC_SETENV. (gt_FUNC_SETENV): Remove macro. * modules/setenv (configure.ac): Add gl_FUNC_SETENV, gl_FUNC_UNSETENV, remove gt_FUNC_SETENV. 2007-03-03 Bruno Haible * m4/relocatable-lib.m4 (gl_RELOCATABLE_LIBRARY): Define ENABLE_RELOCATABLE here. * m4/relocatable.m4 (gl_RELOCATABLE_BODY): Don't define it here. 2007-03-03 Bruno Haible * modules/rbtreehash-list-tests (Depends-on): Add progname. * tests/test-rbtreehash_list.c: Include progname.h. (main): Call set_program_name. * modules/rbtree-oset-tests (Depends-on): Add progname. * tests/test-rbtree_oset.c: Include progname.h. (main): Call set_program_name. * modules/rbtree-list-tests (Depends-on): Add progname. * tests/test-rbtree_list.c: Include progname.h. (main): Call set_program_name. * modules/linked-list-tests (Depends-on): Add progname. * tests/test-linked_list.c: Include progname.h. (main): Call set_program_name. 2007-03-03 Bruno Haible * lib/glob-libc.h (_Restrict_): New macro, copied from lib/regex.h. All uses of __restrict changed to _Restrict_. * lib/glob_.h (__restrict): Remove macro. 2007-03-02 Bruno Haible * modules/gettext (configure.ac): Require gettext infrastructure from version 0.16.1. 2007-03-02 Bruno Haible * modules/linkedhash-list-tests (Depends-on): Add progname. * tests/test-linkedhash_list.c: Include progname.h. (main): Call set_program_name. * modules/carray-list-tests (Depends-on): Add progname. * tests/test-carray_list.c: Include progname.h. (main): Call set_program_name. * modules/avltreehash-list-tests (Depends-on): Add progname. * tests/test-avltreehash_list.c: Include progname.h. (main): Call set_program_name. * modules/avltree-oset-tests (Depends-on): Add progname. * tests/test-avltree_oset.c: Include progname.h. (main): Call set_program_name. * modules/avltree-list-tests (Depends-on): Add progname. * tests/test-avltree_list.c: Include progname.h. (main): Call set_program_name. * modules/array-oset-tests (Depends-on): Add progname. * tests/test-array_oset.c: Include progname.h. (main): Call set_program_name. * modules/array-list-tests (Depends-on): Add progname. * tests/test-array_list.c: Include progname.h. (main): Call set_program_name. * modules/argp-tests (Depends-on): Add progname. * tests/test-argp.c: Include argp.h first. Include progname.h. (main): Call set_program_name. 2007-03-02 Paul Eggert * doc/gnulib-tool.texi (Initial import): Reword description of _FILE_OFFSET_BITS and _GNU_SOURCE, since they sometimes have a limited effect even if defined after the first system include. 2007-03-01 Bruno Haible * build-aux/config.libpath: Update to libtool-1.5.22. Reported by Albert Chin . 2007-03-01 Bruno Haible * doc/relocatable-maint.texi: Recommend to set foo_CPPFLAGS, not foo_CFLAGS. Reported by Ralf Wildenhues. 2007-03-01 Bruno Haible * build-aux/install-reloc: Remove object files left over by some compilers. Reported by Ralf Wildenhues. 2007-03-01 Bruno Haible * build-aux/install-reloc: Break long lines. 2007-03-01 Bruno Haible * doc/relocatable.texi: Document that it may not work on OpenBSD. Reported by Ralf Wildenhues. 2007-03-01 Bruno Haible * doc/gnulib-tool.texi (Initial import): Remove paragraph about include ordering constraints. 2007-03-01 Paul Eggert Followup to the 2007-02-12 patch, using suggestions from Bruno Haible in . * doc/gnulib-tool.texi (Initial import): Mention _FILE_OFFSET_BITS as another example. * lib/time_.h: Fix misspelling. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require gl_HEADER_TIME_H_DEFAULTS. * m4/strptime.m4 (gl_FUNC_STRPTIME): Likewise. * m4/time_r.m4 (gl_TIME_R): Likewise. * m4/timegm.m4 (gl_FUNC_TIMEGM): Likewise. 2007-03-01 Bruno Haible * m4/utimecmp.m4 (gl_UTIMECMP): Don't require gl_TIMESPEC. * m4/utimens.m4 (gl_UTIMENS): Likewise. 2007-03-01 Jim Meyering * modules/xreadlink (Maintainer): Add my name. * modules/xreadlink-with-size (Depends-on): Alphabetize. 2007-02-26 Ben Pfaff Bruno Haible * build-aux/install-reloc: Compile also c-ctype.c. * build-aux/relocatable.sh.in: New file. * doc/relocatable.texi: New file. * doc/relocatable-maint.texi: New file. * doc/gnulib.texi: Include relocatable-maint.texi. * lib/progreloc.c: Include unistd.h unconditionally. * lib/relocwrapper.c: Include unistd.h unconditionally. Include c-ctype.h. (add_dotbin): Use c_tolower. * m4/relocatable-lib.m4: New file, extracted from m4/relocatable.m4. (gl_RELOCATABLE_LIBRARY): Renamed from AC_RELOCATABLE_LIBRARY. (gl_RELOCATABLE_NOP): Renamed from AC_RELOCATABLE_NOP. * m4/relocatable.m4 (AC_RELOCATABLE_LIBRARY, AC_RELOCATABLE_NOP): Move to m4/relocatable-lib.m4. (gl_RELOCATABLE): Renamed from AC_RELOCATABLE. Set also RELOCATABLE_CONFIG_H_DIR, RELOCATABLE_SRC_DIR, RELOCATABLE_BUILD_DIR. (gl_RELOCATABLE_BODY): Renamed from AC_RELOCATABLE_BODY. Don't require obsolete macro AC_EXEEXT. Don't check for unistd.h. Don't set SET_RELOCATABLE. Instead set RELOCATABLE_LDFLAGS, INSTALL_PROGRAM_ENV. * modules/relocatable: New file. * modules/relocatable-lib: New file. * modules/relocatable-script: New file. 2007-02-28 Bruno Haible Import --enable-relocatable infrastructure. * build-aux/config.libpath: New file, from GNU gettext. * build-aux/install-reloc: New file, from GNU gettext. * build-aux/reloc-ldflags: New file, from GNU gettext. * lib/relocatable.h: New file, from GNU gettext. * lib/relocatable.c: New file, from GNU gettext. * lib/relocwrapper.c: New file, from GNU gettext. * m4/relocatable.m4: New file, from GNU gettext. 2007-02-28 Bruno Haible * MODULES.html.sh (File system functions): Add xreadlink-with-size. * modules/xreadlink: New file, from GNU gettext with modifications. * lib/xreadlink.c: New file, from GNU gettext. * lib/xreadlink.h: Add comments. (xreadlink): New declaration. * modules/xreadlink-with-size: Renamed from modules/xreadlink. (Files): Remove m4/xreadlink.m4. Replace lib/xreadlink.c with lib/xreadlink-with-size.c. (configure.ac): Remove gl_XREADLINK invocation. (Makefile.am): Augment lib_SOURCES. * m4/xreadlink.m4: Remove file. * lib/xreadlink-with-size.c: Renamed from lib/xreadlink.c. (xreadlink_with_size): Renamed from xreadink. * lib/xreadlink.h (xreadlink_with_size): Renamed from xreadink. * modules/canonicalize (Depends-on): Replace xreadlink with xreadlink-with-size. * lib/canonicalize.c (canonicalize_filename_mode): Update. 2007-02-25 Jim Meyering * build-aux/announce-gen: When complaining about excess arguments, list them. 2007-02-25 Paul Eggert * README: Document signed integer overflow situation more accurately. 2007-02-25 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Fix estimate of size needed for a 'a' or 'A' conversion. 2007-02-25 Bruno Haible * modules/filename: Renamed from modules/pathname. (Files): Replace lib/pathname.h with lib/filename.h. Replace lib/concatpath.c with lib/concat-filename.c. (Makefile.am): Update. (Include): Replace pathname.h with filename.h. * lib/filename.h: Renamed from lib/pathname.h. (concatenated_filename): Renamed from concatenated_pathname. * lib/concat-filename.c: Renamed from lib/concatpath.c. (concatenated_filename): Renamed from concatenated_pathname. * lib/findprog.c: Include filename.h instead of pathname.h. (find_in_path): Update. * lib/javacomp.c: Include filename.h instead of pathname.h. (is_envjavac_gcj43_usable, is_envjavac_oldgcj_14_14_usable, is_envjavac_oldgcj_14_13_usable, is_envjavac_nongcj_usable, is_gcj_present, is_gcj43_usable, is_oldgcj_14_14_usable, is_oldgcj_14_13_usable, is_javac_usable): Update. * lib/javaexec.c: Include filename.h instead of pathname.h. (execute_java_class): Update. * modules/findprog: Update. * modules/javacomp: Update. * modules/javaexec: Update. * MODULES.html.sh (File system functions): Add 'filename', remove 'pathname'. 2007-02-25 Bruno Haible * modules/printf-frexpl-tests: New file. * tests/test-printf-frexpl.c: New file. * modules/printf-frexpl: New file. * lib/printf-frexpl.h: New file. * lib/printf-frexpl.c: New file. * m4/printf-frexpl.m4: New file. 2007-02-25 Bruno Haible * modules/printf-frexp-tests: New file. * tests/test-printf-frexp.c: New file. * modules/printf-frexp: New file. * lib/printf-frexp.h: New file. * lib/printf-frexp.c: New file. * m4/printf-frexp.m4: New file. 2007-02-25 Bruno Haible Assume automake >= 1.10 for the tests. * modules/arcfour-tests (TESTS): Remove $(EXEEXT) suffix. * modules/arctwo-tests: Likewise. * modules/argp-tests: Likewise. * modules/avltree-list-tests: Likewise. * modules/avltree-oset-tests: Likewise. * modules/avltreehash-list-tests: Likewise. * modules/carray-list-tests: Likewise. * modules/crc-tests: Likewise. * modules/des-tests: Likewise. * modules/gc-arcfour-tests: Likewise. * modules/gc-arctwo-tests: Likewise. * modules/gc-des-tests: Likewise. * modules/gc-hmac-md5-tests: Likewise. * modules/gc-hmac-sha1-tests: Likewise. * modules/gc-md2-tests: Likewise. * modules/gc-md4-tests: Likewise. * modules/gc-md5-tests: Likewise. * modules/gc-pbkdf2-sha1-tests: Likewise. * modules/gc-rijndael-tests: Likewise. * modules/gc-sha1-tests: Likewise. * modules/gc-tests: Likewise. * modules/getaddrinfo-tests: Likewise. * modules/hmac-md5-tests: Likewise. * modules/hmac-sha1-tests: Likewise. * modules/linked-list-tests: Likewise. * modules/linkedhash-list-tests: Likewise. * modules/lock-tests: Likewise. * modules/md2-tests: Likewise. * modules/md4-tests: Likewise. * modules/md5-tests: Likewise. * modules/rbtree-list-tests: Likewise. * modules/rbtree-oset-tests: Likewise. * modules/rbtreehash-list-tests: Likewise. * modules/read-file-tests: Likewise. * modules/rijndael-tests: Likewise. * modules/stdint-tests: Likewise. * modules/tls-tests: Likewise. 2007-02-24 Bruno Haible * lib/isnanl.h (isnanl): Define through isnan if isnan is a macro. * m4/isnan.m4 (gl_FUNC_ISNAN_NO_LIBM): Don't check for isnan as a function; instead check whether isnan with a double argument links. * m4/isnanl.m4 (gl_FUNC_ISNANL_NO_LIBM): Don't check for isnanl as a function; instead check whether isnan with a 'long double' argument links. Reported by Eric Blake . 2007-02-24 Bruno Haible * lib/isnan.c: Support the 'long double' case if USE_LONG_DOUBLE is defined. * lib/isnanl.c: Remove all code. Just include isnan.c. * modules/isnanl-nolibm (Files): Add lib/isnan.c. 2007-02-25 Jim Meyering Avoid conflicting types for 'unsetenv' on FreeBSD. * lib/putenv.c (_unsetenv): Rename from "unsetenv", to avoid conflicting with FreeBSD's (5.0 and 6.1) function declaration in stdlib.h. 2007-02-24 Bruno Haible * modules/isnanl-nolibm-tests: New file. * tests/test-isnanl.c: New file. * modules/isnanl-nolibm: New file. * lib/isnanl.h: New file. * lib/isnanl.c: New file. * m4/isnanl.m4: New file. 2007-02-24 Bruno Haible * modules/isnan-nolibm-tests: New file. * tests/test-isnan.c: New file. * modules/isnan-nolibm: New file. * lib/isnan.h: New file. * lib/isnan.c: New file. * m4/isnan.m4: New file. 2007-02-24 Bruno Haible * lib/frexpl.c (frexpl): Correct return values for x = 1.0L. Don't assume that an exponent fits in 20 bits. 2007-02-24 Jim Meyering * m4/regex.m4: Update the description of the configure-time option, --without-included-regex, to state accurately what the defaults are, and perhaps to give people an idea why using this option is risky. 2007-02-24 Paul Eggert * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check for a nanosleep that loops on small arguments. This attempts to avoid the problem Bruno Haible reported for AIX 4.3.2 in . 2007-02-23 Bruno Haible * m4/perl.m4 (gl_PERL): Require version 5.005, not 5.003. Needed for help2man. 2007-02-23 Karl Berry * doc/gnulib-tool.texi (CVS Issues): mention that when foo_.h exists, foo.h should be cvs-ignored, not committed. 2007-02-23 Eric Blake * lib/getdate.h (includes): Include , not "timespec.h". * lib/stat-time.h (includes): Likewise. * lib/utimecmp.c (includes): Likewise. * lib/utimens.h (includes): Likewise. * lib/getdate.y (includes): Also include "timespec.h" for use internal to the module. * modules/utimens (Depends-on): Revert yesterday's patch. * modules/nanosleep (Depends-on): Add missing dependency. 2007-02-22 Bruno Haible * lib/glob.c: Don't include getlogin_r.h. 2007-02-22 Jim Meyering * modules/utimens (Depends-on): Add timespec, required for utimens.h's inclusion of timespec.h. 2007-02-21 Paul Eggert * lib/getcwd.c (__getcwd): Undo previous change; it mishandled long unreadable paths in GNU/Linux. Problem reported by Andreas Schwab in . I'll try to think of a better way to fix the Solaris problem. * lib/getcwd.c (__getcwd): Don't assume getcwd (NULL, 0) works like glibc; on Solaris 10, it fails with errno == EINVAL. POSIX says the behavior is unspecified if the first argument is NULL, so play it safe and never pass NULL to the system getcwd. 2007-02-21 Jim Meyering * lib/gettimeofday.c (rpl_gettimeofday): Remove declaration of gettimeofday. It would conflict with the one now always provided via sys_time_.h. Reported by Matthew Woehlke, as an IRIX 6.5 build failure. 2007-02-20 Paul Eggert Minor fixups to port to Solaris 10 with Sun C 5.8. * lib/getcwd.c [!_LIBC]: Include dirfd.h, since we use dirfd. * modules/getcwd (Depends-on): Add dirfd. * lib/putenv.c (putenv): #undef it. (rpl_putenv): New decl. (malloc, free): Include rather than prototyping separately. 2007-02-20 Bruno Haible * modules/stdio-tests: New file. * tests/test-stdio.c: New file. * modules/vsnprintf (Files): Remove lib/vsnprintf.h. (Depends-on): Add stdio. (configure.ac): Invoke gl_STDIO_MODULE_INDICATOR. (Include): Use instead of vsnprintf.h. * m4/vsnprintf.m4 (gl_FUNC_VSNPRINTF): Require gl_STDIO_H_DEFAULTS. Set HAVE_DECL_VSNPRINTF. * lib/vsnprintf.c: Include instead of vsnprintf.h. * modules/snprintf (Files): Remove lib/snprintf.h. (Depends-on): Add stdio. (configure.ac): Invoke gl_STDIO_MODULE_INDICATOR. (Include): Use instead of snprintf.h. * m4/snprintf.m4 (gl_FUNC_SNPRINTF): Require gl_STDIO_H_DEFAULTS. Set HAVE_DECL_SNPRINTF. * lib/snprintf.c: Include instead of snprintf.h. * lib/getaddrinfo.c: Likewise. * modules/stdio: New file. * lib/stdio_.h: New file, incorporating snprintf.h and vsnprintf.h. * lib/snprintf.h: Remove file. * lib/vsnprintf.h: Remove file. * lib/.cppi-disable: Remove snprintf.h. * m4/stdio_h.m4: New file. * MODULES.html.sh (Support for systems lacking ISO C 99): Add stdio. 2007-02-20 Jim Meyering * lib/ftruncate.c [HAVE_CHSIZE]: Document that this code is used by e.g., mingw. From Bruno Haible. 2007-02-19 Bruno Haible * lib/string_.h: Use "#pragma GCC system_header" to suppress some gcc warnings. Reported by Ben Pfaff . 2007-02-19 Bruno Haible * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): Don't request a complaint mail from mingw users. 2007-02-19 Bruno Haible * lib/stdlib_.h: Use "#pragma GCC system_header" to suppress some gcc warnings. Reported by Joel E. Denny via Paul Eggert. 2007-02-19 Jim Meyering Don't use FD after a successful "fdopendir (fd)". * lib/getcwd.c (__getcwd) [AT_FDCWD]: fdopendir (fd) usually closes fd. Reset it by calling dirfd on the just-obtained DIR*. * m4/ftruncate.m4: Adjust comment to give this module a 3-year reprieve. Prompted by a report from Bruno Haible that mingw lacks ftruncate. 2007-02-18 Bruno Haible * lib/readlink.c: Include . * m4/readlink.m4 (gl_FUNC_READLINK): Require gl_UNISTD_H_DEFAULTS. Set HAVE_READLINK. * modules/readlink (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Add . * lib/getlogin_r.h: Remove file. * lib/getlogin_r.c: Include instead of getlogin_r.h. * m4/getlogin_r.m4 (gl_GETLOGIN_R_SUBSTITUTE): Remove macro. (gl_GETLOGIN_R): Inline it here. Require gl_UNISTD_H_DEFAULTS. Set HAVE_DECL_GETLOGIN_R. * modules/getlogin_r (Files): Remove lib/getlogin_r.h. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Use instead of getlogin_r.h. * lib/getcwd.h: Remove file. * lib/getcwd.c: Include instead of getcwd.h. * lib/xgetcwd.c: Likewise. * m4/getcwd.m4 (gl_FUNC_GETCWD): Require gl_UNISTD_H_DEFAULTS. Set REPLACE_GETCWD. Don't define __GETCWD_PREFIX. * modules/getcwd (Files): Remove lib/getcwd.h. (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Include): Use instad of getcwd.h. * lib/ftruncate.c: Include first. * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): Require gl_UNISTD_H_DEFAULTS. Set HAVE_FTRUNCATE. * modules/ftruncate (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. * lib/fchdir.c: Include first. * lib/dirent_.h: Test REPLACE_FCHDIR, not FCHDIR_REPLACEMENT. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Require gl_UNISTD_H_DEFAULTS instead of gl_HEADER_UNISTD_DEFAULTS. Set REPLACE_FCHDIR. Don't set UNISTD_H. * modules/fchdir (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. (Makefile.am): Substitute also REPLACE_FCHDIR into dirent.h. * lib/dup2.c: Include first. * m4/dup2.m4 (gl_FUNC_DUP2): Require gl_UNISTD_H_DEFAULTS. Set HAVE_DUP2. * modules/dup2 (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. * lib/chown.c: Include first. Undefine chown later. * m4/chown.m4 (gl_FUNC_CHOWN): Require gl_UNISTD_H_DEFAULTS. Set REPLACE_CHOWN. Don't define chown as a macro here. * modules/chown (Depends-on): Add unistd. (configure.ac): Invoke gl_UNISTD_MODULE_INDICATOR. * lib/unistd_.h: Test HAVE_UNISTD_H determined at configure time. Add definition for GL_LINK_WARNING. (chown, dup2): New declarations. (fchdir): Test REPLACE_FCHDIR, not FCHDIR_REPLACEMENT. Provide optional link warning. (ftruncate): New declaration. (getcwd): New declaration, taken from old getcwd.h. (getlogin_r): New declaration, taken from old getlogin_r.h. (readlink): New declaration. * m4/unistd_h.m4 (gl_UNISTD_H): Renamed from gl_HEADER_UNISTD. Don't set UNISTD_H. Inline gl_PREREQ_UNISTD. Set HAVE_UNISTD_H. (gl_PREREQ_UNISTD): Remove macro. (gl_UNISTD_MODULE_INDICATOR): New macro. (gl_UNISTD_H_DEFAULTS): Renamed from gl_HEADER_UNISTD_DEFAULTS. Set many new variables. Don't set UNISTD_H. * modules/unistd (Description): Change. (Depends-on): Add link-warning. (configure.ac): Update. (Makefile.am): Create unistd.h always. Substitute many new variables into it. 2007-02-18 Bruno Haible * lib/stdlib_.h (getsubopt): New declaration, copied from getsubopt.h. * modules/stdlib (stdlib.h): Also substitute GNULIB_GETSUBOPT and HAVE_GETSUBOPT. * m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Also initialize GNULIB_GETSUBOPT and HAVE_GETSUBOPT. * lib/getsubopt.h: Remove file. * modules/getsubopt (Files): Remove lib/getsubopt.h. (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Includes): Use instead of getsubopt.h. * m4/getsubopt.m4 (gl_FUNC_GETSUBOPT): Require gl_STDLIB_H_DEFAULTS. Set HAVE_GETSUBOPT. * lib/getsubopt.c: Don't include getsubopt.h. 2007-02-18 Bruno Haible * modules/fchdir (Depends-on): Add dup2. 2007-02-18 Bruno Haible * lib/stdlib_.h: Handle glibc's special invocation convention specially. 2007-02-18 Bruno Haible * modules/stdlib-tests: New file. * tests/test-stdlib.c: New file. * modules/mkstemp (Files): Remove lib/mkstemp.h. (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Includes): Use instead of mkstemp.h. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Require gl_STDLIB_H_DEFAULTS. Set REPLACE_MKSTEMP. Remove definition of __MKSTEMP_PREFIX. * lib/mkstemp.c: Don't include mkstemp.h. * lib/mkstemp-safer.c: Include instead of mkstemp.h. * lib/stdlib--.h: Don't include mkstemp.h. * modules/mkdtemp (Files): Remove lib/mkdtemp.h. (Depends-on): Add stdlib. (configure.ac): Invoke gl_STDLIB_MODULE_INDICATOR. (Includes): Use instead of mkdtemp.h. * m4/mkdtemp.m4 (gt_FUNC_MKDTEMP): Require gl_STDLIB_H_DEFAULTS. Set HAVE_MKDTEMP. * lib/mkdtemp.c: Don't include mkdtemp.h. * lib/clean-temp.c: Don't include mkdtemp.h. * modules/exit (Files): Remove lib/exit.h. (Depends-on): Add stdlib. (Makefile.am): Remove lib_SOURCES. (Include): Use instead of exit.h. * lib/argmatch.c: Don't include exit.h. * lib/execute.c: Likewise. * lib/pagealign_alloc.c: Likewise. * lib/pipe.c: Likewise. * lib/wait-process.c: Likewise. * lib/copy-file.c: Include instead of exit.h. * lib/exitfail.c: Likewise. * lib/savewd.c: Likewise. * lib/xsetenv.c: Likewise. * modules/stdlib: New file. * lib/stdlib_.h: New file, incorporating exit.h, mkdtemp.h, mkstemp.h and extra comments about mkstemp(). * lib/exit.h: Remove file. * lib/mkdtemp.h: Remove file. * lib/mkstemp.h: Remove file. * m4/stdlib_h.m4: New file. * MODULES.html.sh (Support for systems lacking ANSI C 89): Add stdlib. 2007-02-18 Bruno Haible * modules/math-tests: New file. * tests/test-math.c: New file. * modules/math: New file. * modules/mathl (Files): Remove lib/mathl.h. (Depends-on): Add math. (Makefile.am): Don't mention mathl.h. (Include): Use instead of mathl.h. * lib/math_.h: New file. * lib/mathl.h: Remove file. * lib/acosl.c: Include and first. Don't include mathl.h. * lib/asinl.c: Likewise. * lib/atanl.c: Likewise. * lib/ceill.c: Likewise. * lib/cosl.c: Likewise. * lib/expl.c: Likewise. * lib/floorl.c: Likewise. * lib/frexpl.c: Likewise. * lib/ldexpl.c: Likewise. * lib/logl.c: Likewise. * lib/sincosl.c: Likewise. * lib/sinl.c: Likewise. * lib/sqrtl.c: Likewise. * lib/tanl.c: Likewise. * lib/trigl.c: Likewise. * m4/math_h.m4: New file. * MODULES.html.sh (Mathematics): Add math. 2007-02-17 Bruno Haible * modules/wctype-tests: New file. * tests/test-wctype.c: New file. * modules/wchar-tests: New file. * tests/test-wchar.c: New file. * modules/unistd-tests: New file. * tests/test-unistd.c: New file. * modules/time-tests: New file. * tests/test-time.c: New file. * modules/sysexits-tests: New file. * tests/test-sysexits.c: New file. * modules/sys_time-tests: New file. * tests/test-sys_time.c: New file. * modules/sys_stat-tests: New file. * tests/test-sys_stat.c: New file. * modules/sys_socket-tests: New file. * tests/test-sys_socket.c: New file. * modules/sys_select-tests: New file. * tests/test-sys_select.c: New file. * modules/string-tests: New file. * tests/test-string.c: New file. * modules/stdbool-tests: New file. * tests/test-stdbool.c: New file. * modules/netinet_in-tests: New file. * tests/test-netinet_in.c: New file. * modules/inttypes-tests: New file. * tests/test-inttypes.c: New file. * modules/fcntl-tests: New file. * tests/test-fcntl.c: New file. * modules/byteswap-tests: New file. * tests/test-byteswap.c: New file. * modules/arpa_inet-tests: New file. * tests/test-arpa_inet.c: New file. 2007-02-17 Bruno Haible * lib/inttypes_.h: Add definition for GL_LINK_WARNING. (imaxabs, imaxdiv, strtoimax, strtoumax): Don't declare the function if the corresponding module is not enabled. Emit link warnings if the function is used nevertheless. * m4/inttypes.m4 (gl_INTTYPES_H): Never use the existing . Don't AC_SUBST HAVE_DECL_IMAXABS, HAVE_DECL_IMAXDIV, HAVE_DECL_STRTOIMAX, HAVE_DECL_STRTOUMAX. (gl_INTTYPES_MODULE_INDICATOR, gl_INTTYPES_H_DEFAULTS): New macros. * modules/inttypes (Depends-on): Add link-warning. (Makefile.am): Copy the contents of build-aux/link-warning.h into inttypes.h. Substitute also GNULIB_IMAXABS, GNULIB_IMAXDIV, GNULIB_STRTOIMAX, GNULIB_STRTOUMAX. * modules/imaxabs (configure.ac): Invoke gl_INTTYPES_MODULE_INDICATOR. * modules/imaxdiv (configure.ac): Likewise. * modules/strtoimax (configure.ac): Likewise. * modules/strtoumax (configure.ac): Likewise. 2007-02-17 Bruno Haible * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Include the contents of gl_STRING_MODULE_INDICATOR_DEFAULTS. (gl_STRING_MODULE_INDICATOR_DEFAULTS): Remove macro. (gl_HEADER_STRING_H_BODY, gl_STRING_MODULE_INDICATOR): Update. 2007-02-17 Bruno Haible * modules/link-warning: New file. * build-aux/link-warning.h: New file, extracted from lib/string_.h. * lib/string_.h (GL_LINK_WARNING): Remove definition. * modules/string (Depends-on): Add link-warning. (Makefile.am): Copy the contents of build-aux/link-warning.h into string.h. * MODULES.html.sh (Support for building libraries and executables): Add link-warning. 2007-02-17 Bruno Haible * lib/string_.h (memmem, mempcpy, memrchr, stpcpy, stpncpy, strcasecmp, strncasecmp, strchr, strchrnul, strdup, strndup, strnlen, strcspn, strpbrk, strspn, strrchr, strsep, strstr, strcasestr, strtok_r): Break long lines. 2007-02-17 Ben Pfaff Bruno Haible * modules/tmpfile: New file. * lib/tmpfile.c: New file. * m4/tmpfile.m4: New file. * MODULES.html.sh (func_all_modules): New section "Input/output". 2007-02-15 Bruno Haible * lib/clean-temp.c [WIN32 && !CYGWIN]: Include . (supports_delete_on_close): New function. (open_temp, fopen_temp): Use _O_TEMPORARY when supported. 2007-02-14 Bruno Haible * modules/mbspcasecmp-tests: New file. * tests/test-mbspcasecmp.sh: New file. * tests/test-mbspcasecmp.c: New file. New module mbspcasecmp. * modules/mbspcasecmp: New file. * lib/mbspcasecmp.c: New file. * lib/string_.h (strncasecmp): Change warning message. (mbspcasecmp): New declaration. * m4/mbspcasecmp.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSPCASECMP. * modules/string (string.h): Also substitute GNULIB_MBSPCASECMP. * MODULES.html.sh (Internationalization functions): Add mbspcasecmp. 2007-02-14 Bruno Haible * modules/mbsncasecmp-tests: New file. * tests/test-mbsncasecmp.sh: New file. * tests/test-mbsncasecmp.c: New file. New module mbsncasecmp. * modules/mbsncasecmp: New file. * lib/mbsncasecmp.c: New file. * lib/string_.h (mbsncasecmp): New declaration. * m4/mbsncasecmp.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSNCASECMP. * modules/string (string.h): Also substitute GNULIB_MBSNCASECMP. * MODULES.html.sh (Internationalization functions): Add mbsncasecmp. 2007-02-14 Paul Eggert * lib/exclude.c (FNM_EXTMATCH): Define if system does not. Verify that it doesn't overlap with our flags. (fnmatch_no_wildcards): Don't use strcasecmp or strncasecmp, which do not have the desired effect in multibyte locales; instead, use mbscasecmp. * modules/exclude (Depends-on): Depend on mbscasecmp, not strcase. Add dependency on xalloc. Depend on fnmatch, not fnmatch-gnu, since we don't require GNU fnmatch ourselves (if our users require it, they should do so explicitly). Fix regex code so it doesn't rely on strcasecmp. * lib/regex_internal.h: Include only if _LIBC is defined. Otherwise, include gnulib's langinfo.h. * lib/regcomp.c (init_dfa): Don't use strcasecmp, as it can have undesirable behavior in non-C locales. Instead, rely on localecharset. * m4/regex.m4 (gl_PREREQ_REGEX): Don't require AM_LANGINFO_CODESET. * modules/regex (FILES): Remove m4/codeset.m4. (Depends-on): Add localcharset. Remove strcase. 2007-02-13 Ralf Wildenhues * m4/unlinkdir.m4 (gl_UNLINKDIR): Fix m4 quoting bug. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Likewise. 2007-02-13 Bruno Haible * m4/intdiv0.m4 (gt_INTDIV0): Assume ANSI C. Fix underquoting bug. Reported by Ralf Wildenhues . 2007-02-12 Bruno Haible * lib/string_.h (memmem, mempcpy, memrchr, stpcpy, stpncpy, strchrnul, strdup, strndup, strnlen, strpbrk, strsep, strtok_r): If GNULIB_POSIXCHECK and the gnulib module not enabled, provoke a link- time warning rather than a link error. 2007-02-12 Bruno Haible * m4/locale-fr.m4 (gt_LOCALE_FR): Fix m4 quoting bug. * m4/locale-zh.m4 (gt_LOCALE_ZH_CN): Likewise. Reported by Ralf Wildenhues . 2007-02-12 Paul Eggert * lib/string_.h (strncasecmp): Fix typo: this macro takes 3 args, not 2. 2007-02-12 Paul Eggert New module 'time', so that apps can include as per POSIX and GNU instead of separate include files like time_r.h and timegm.h. This implementation tries out a simpler approach for replacing decls in standard include files (as compared to the string module), somewhat as an experiment. * config/srclist.txt: Comment out mktime.c for now. * doc/gnulib-tool.texi (Initial import): Don't use time_r as an example since it doesn't apply any more. Use generic wording instead. * MODULES.html.sh (Support for systems lacking POSIX:2001): New module 'time'. * lib/time_.h, m4/time_h.m4, modules/time: New files. * lib/strptime.h, lib/time_r.h, lib/timegm.h: Remove. * lib/mktime.c: Include config.h depending on _LIBC, not HAVE_CONFIG_H. Don't include ; no longer needed since we assume C89. * lib/mktime.c: Don't include "time_r.h"; no longer needed. * lib/strftime.c: Likewise. * lib/time_r.c: Likewise. * lib/nanosleep.c (nanosleep): #undef after include files, not before. * lib/nanosleep.c: Include first, to check interface. * lib/strptime.c: Likewise. * lib/time_r.c: Likewise. * lib/timegm.c: Likewise. * lib/strptime.c: Don't include strptime.h or time_r.h; no longer needed. * lib/timegm.c: Don't include timegm.h; no longer needed. * lib/timespec.h: Don't include before ; time.h now handles any problems in that area. (struct timespec, nanosleep): Remove; time.h now arranges for these. * lib/xnanosleep.c: Don't include timespec.h; no longer needed now that time.h defines struct timespec. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check that nanosleep is declared. Set REPLACE_NANOSLEEP. Don't AC_DEFINE nanosleep; the time module now handles that. * m4/strptime.m4 (gl_FUNC_STPRTIME): Set REPLACE_STRPTIME. * m4/time_r.m4 (gl_TIME_R): Don't define HAVE_TIME_R_POSIX; no longer needed. Set REPLACE_LOCALTIME. * m4/timegm.m4 (gl_FUNC_TIMEGM): Set REPLACE_TIMEGM. * m4/timespec.m4 (gl_CHECK_TYPE_STRUCT_TIMESPEC): Move to time_h.m4. (gl_TIMESPEC): Don't check for sys/time.h or struct timespec or nanosleep; time_h.m4 now does that. Don't require gl_USE_SYSTEM_EXTENSIONS; no longer needed directly, and the time module handles this now. * modules/getdate (Depends-on): Remove timespec. Add time. * modules/nanosleep (Depends-on): Likewise. * modules/stat-time (Depends-on): Likewise. * modules/nanosleep (Include): Include time.h, not timespec.h. * modules/strptime (Files): Remove lib/strptime.h. (Depends-on): Add extensions, time. (Include): Include time.h, not strptime.h. * modules/time_r (Files): Remove lib/time_r.h. (Depends-on): Add time. (Include): Include time.h, not time_r.h. * modules/timegm: Likewise. * modules/timespec (Description): Now does timespec-related decls of our own, instead of struct timespec itself. (Depends-on): Add time; remove extensions. (Maintainer): Add self. * modules/utimecmp (Depends-on): Add time; remove timespec. * modules/utimens (Depends-on): Likewise. * modules/xnanosleep (Depends-on): Likewise. 2007-02-11 Bruno Haible * lib/c-strstr.c: Include allocsa.h. (knuth_morris_pratt): Use allocsa/freesa instead of malloc/free. * lib/c-strcasestr.c: Include allocsa.h. (knuth_morris_pratt): Use allocsa/freesa instead of malloc/free. * lib/strcasestr.c: Include allocsa.h. (knuth_morris_pratt): Use allocsa/freesa instead of malloc/free. * lib/mbsstr.c: Include allocsa.h. (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): Use allocsa/freesa instead of malloc/free. * lib/mbscasestr.c: Include allocsa.h. (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): Use allocsa/freesa instead of malloc/free. * modules/c-strstr (Depends-on): Add allocsa. * modules/c-strcasestr (Depends-on): Likewise. * modules/strcasestr (Depends-on): Likewise. * modules/mbsstr (Depends-on): Likewise. * modules/mbscasestr (Depends-on): Likewise. 2007-02-11 Bruno Haible * lib/mbsspn.c (mbsspn): Fix bug. Remove unnecessary strlen call. * modules/mbsspn-tests: New file. * tests/test-mbsspn.sh: New file. * tests/test-mbsspn.c: New file. 2007-02-11 Bruno Haible * lib/mbspbrk.c (mbspbrk): Remove unneeded cast. * modules/mbspbrk-tests: New file. * tests/test-mbspbrk.sh: New file. * tests/test-mbspbrk.c: New file. 2007-02-11 Bruno Haible * lib/mbscspn.c (mbscspn): Remove unnecessary strlen call and unneeded cast. * modules/mbscspn-tests: New file. * tests/test-mbscspn.sh: New file. * tests/test-mbscspn.c: New file. 2007-02-11 Bruno Haible * modules/mbscasecmp-tests: New file. * tests/test-mbscasecmp.sh: New file. * tests/test-mbscasecmp.c: New file. 2007-02-11 Bruno Haible Ensure O(n) worst-case complexity of mbscasestr. * lib/mbscasestr.c: Include stdbool.h. (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): New functions. (mbscasestr): Add some bookkeeping. Invoke knuth_morris_pratt_* when the bookkeeping indicates that it's worth it. * modules/mbscasestr (Depends-on): Add stdbool, mbslen, strnlen. * modules/mbscasestr-tests: New file. * tests/test-mbscasestr1.c: New file. * tests/test-mbscasestr2.sh: New file. * tests/test-mbscasestr2.c: New file. * tests/test-mbscasestr3.sh: New file. * tests/test-mbscasestr3.c: New file. * tests/test-mbscasestr4.sh: New file. * tests/test-mbscasestr4.c: New file. * m4/locale-tr.m4: New file. 2007-02-11 Bruno Haible Ensure O(n) worst-case complexity of mbsstr. * lib/mbsstr.c: Include stdbool.h. (knuth_morris_pratt_unibyte, knuth_morris_pratt_multibyte): New functions. (mbsstr): Add some bookkeeping. Invoke knuth_morris_pratt_* when the bookkeeping indicates that it's worth it. * modules/mbsstr (Depends-on): Add stdbool, mbslen, strnlen. * modules/mbsstr-tests: New file. * tests/test-mbsstr1.c: New file. * tests/test-mbsstr2.sh: New file. * tests/test-mbsstr2.c: New file. * tests/test-mbsstr3.sh: New file. * tests/test-mbsstr3.c: New file. * m4/locale-fr.m4: New file. 2007-02-11 Bruno Haible * lib/mbsrchr.c (mbsrchr): Fix bug. * modules/mbsrchr-tests: New file. * tests/test-mbsrchr.sh: New file. * tests/test-mbsrchr.c: New file. 2007-02-11 Bruno Haible * lib/mbschr.c (mbschr): Fix bug. * modules/mbschr-tests: New file. * tests/test-mbschr.sh: New file. * tests/test-mbschr.c: New file. * m4/locale-zh.m4: New file. 2007-02-11 Bruno Haible Support for copying multibyte string iterators. * lib/mbiter.h: Include . (mbiter_multi_copy): New function. (mbi_copy): New macro. * lib/mbuiter.h: Include . (mbuiter_multi_copy): New function. (mbui_copy): New macro. 2007-02-11 Bruno Haible New module mbslen. * modules/mbslen: New file. * lib/mbslen.c: New file. * lib/string_.h (mbslen): New declaration. * m4/mbslen.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSLEN. * modules/string (string.h): Also substitute GNULIB_MBSLEN. * MODULES.html.sh (Internationalization functions): Add mbslen. 2007-02-11 Bruno Haible Ensure O(n) worst-case complexity of strcasestr substitute. * lib/strcasestr.c: Include stdbool.h. (knuth_morris_pratt): New function. (strcasestr): Add some bookkeeping. Invoke knuth_morris_pratt when the bookkeeping indicates that it's worth it. * modules/strcasestr (Depends-on): Add stdbool, strnlen. * modules/strcasestr-tests: New file. * tests/test-strcasestr.c: New file. 2007-02-11 Bruno Haible Ensure O(n) worst-case complexity of c_strcasestr. * lib/c-strcasestr.c: Include stdbool.h, string.h. (knuth_morris_pratt): New function. (c_strcasestr): Add some bookkeeping. Invoke knuth_morris_pratt when the bookkeeping indicates that it's worth it. * modules/c-strcasestr (Depends-on): Add stdbool, strnlen. * modules/c-strcasestr-tests: New file. * tests/test-c-strcasestr.c: New file. 2007-02-11 Bruno Haible Ensure O(n) worst-case complexity of c_strstr. * lib/c-strstr.c: Include stdbool.h, string.h. (knuth_morris_pratt): New function. (c_strstr): Add some bookkeeping. Invoke knuth_morris_pratt when the bookkeeping indicates that it's worth it. * modules/c-strstr (Depends-on): Add stdbool, strnlen. * lib/c-strstr.c: Complete rewrite for maintainability. * modules/c-strstr-tests: New file. * tests/test-c-strstr.c: New file. 2007-02-11 Bruno Haible * m4/javacomp.m4 (gt_JAVACOMP): Work around a 'tr' bug in coreutils 5.2.1 and earlier, whereby \055 was treated just like the range delimiter '-'. Reported by Joel E. Denny . 2007-02-08 Bruno Haible * modules/regex (Depends-on): Add stdbool. Reported by Dalibor Topic . 2007-02-05 Paul Eggert * m4/regex.m4 (gl_REGEX): Check for glibc bug #3957. Prefer returning from main to exiting from it. Remove unnecessary parens after sizeof. 2007-02-05 Bruno Haible New module mbssep. * modules/mbssep: New file. * lib/mbssep.c: New file. * lib/string_.h (strsep): Add a conditional link warning. (mbssep): New declaration. * m4/mbssep.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSSEP. * modules/string (string.h): Also substitute GNULIB_MBSSEP. * MODULES.html.sh (Internationalization functions): Add mbssep. 2007-02-05 Bruno Haible * lib/strsep.c (strsep): Fix actions in case of no delimiters. Optimize search in case of 1 delimiter. 2007-02-05 Paolo Bonzini * lib/acl.h: Include sys/types.h before sys/acl.h. 2007-02-05 Paolo Bonzini Merge upstream fix for glibc bugzilla #3957: 2007-02-05 Jakub Jelinek * lib/regcomp.c (parse_bracket_exp): Set '\n' bit rather than '\0' bit for RE_HAT_LISTS_NOT_NEWLINE. (build_charclass_op): Remove bogus comment. 2007-02-05 Simon Josefsson * lib/gc.h, lib/gc-libgcrypt.c: Support SHA-256/384/512. 2007-02-04 Paul Eggert * lib/getsubopt.c [!_LIBC]: Include config.h and getsubopt.h. * lib/memmem.c [!defined _LIBC]: Include config.h. 2007-02-04 Bruno Haible * lib/string_.h (GL_LINK_WARNING2): Put the word "warning:" into the warning message. 2007-02-04 Bruno Haible New module mbstok_r. * modules/mbstok_r: New file. * lib/mbstok_r.c: New file. * lib/string_.h (strtok_r): Change argument names to match the comments. Add a conditional link warning. (mbstok_r): New declaration. * m4/mbstok_r.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSTOK_R. * modules/string (string.h): Also substitute GNULIB_MBSTOK_R. * MODULES.html.sh (Internationalization functions): Add mbstok_r. 2007-02-04 Bruno Haible New module mbsspn. * modules/mbsspn: New file. * lib/mbsspn.c: New file. * lib/string_.h (strspn): Add a conditional link warning. (mbsspn): New declaration. * m4/mbsspn.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSSPN. * modules/string (string.h): Also substitute GNULIB_MBSSPN. * MODULES.html.sh (Internationalization functions): Add mbsspn. 2007-02-04 Bruno Haible New module mbspbrk. * modules/mbspbrk: New file. * lib/mbspbrk.c: New file. * lib/string_.h (strpbrk): Add a conditional link warning. (mbspbrk): New declaration. * m4/mbspbrk.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSPBRK. * modules/string (string.h): Also substitute GNULIB_MBSPBRK. * MODULES.html.sh (Internationalization functions): Add mbspbrk. 2007-02-04 Bruno Haible New module mbscspn. * modules/mbscspn: New file. * lib/mbscspn.c: New file. * lib/string_.h (strcspn): Add a conditional link warning. (mbscspn): New declaration. * m4/mbscspn.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSCSPN. * modules/string (string.h): Also substitute GNULIB_MBSCSPN. * MODULES.html.sh (Internationalization functions): Add mbscspn. 2007-02-04 Bruno Haible New module mbscasestr, reduced goal of strcasestr. * modules/mbscasestr: New file. * lib/mbscasestr.c: New file, copied from lib/strcasestr.c. (mbscasestr): Renamed from strcasestr. * lib/strcasestr.c: Don't include mbuiter.h. (strcasestr): Remove support for multibyte locales. * lib/string_.h (strcasestr): Don`t rename. Declare only if missing. Change the conditional link warning. (mbscasestr): New declaration. * m4/mbscasestr.m4: New file. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Enable the replacement only if the system does not have strcasestr. Set HAVE_STRCASESTR instead of REPLACE_STRCASESTR. (gl_PREREQ_STRCASESTR): Don't require gl_FUNC_MBRTOWC. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize HAVE_STRCASESTR instead of REPLACE_STRCASESTR. (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSCASESTR. * modules/string (string.h): Also substitute GNULIB_MBSCASESTR. Substitute HAVE_STRCASESTR instead of REPLACE_STRCASESTR. * modules/strcasestr (Files): Remove m4/mbrtowc.m4. (Depends-on): Remove mbuiter. * MODULES.html.sh (Internationalization functions): Add mbscasestr. 2007-02-04 Bruno Haible Simplify handling of strncasecmp. * lib/string_.h (strncasecmp): Remove test for GNULIB_STRCASE. Change the conditional link warning. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize HAVE_STRCASECMP, not REPLACE_STRCASECMP. (gl_STRING_MODULE_INDICATOR_DEFAULTS): Don't initialize GNULIB_STRCASE. * modules/strcase (configure.ac): Don't invoke gl_STRING_MODULE_INDICATOR. * modules/string (string.h): Don't substitute GNULIB_STRCASE. 2007-02-04 Bruno Haible New module mbscasecmp, reduced goal of strcasecmp. * modules/mbscasecmp: New file. * lib/mbscasecmp.c: New file, copied from lib/strcasecmp.c. (mbscasecmp): Renamed from strcasecmp. * lib/strcasecmp.c: Don't include mbuiter.h. (strcasecmp): Remove support for multibyte locales. * lib/string_.h (strcasecmp): Don`t rename. Declare only if missing. Change the conditional link warning. (mbscasecmp): New declaration. * m4/mbscasecmp.m4: New file. * m4/strcase.m4 (gl_FUNC_STRCASECMP): Enable the replacement only if the system lacks strcasecmp. Set HAVE_STRCASECMP instead of REPLACE_STRCASECMP. (gl_PREREQ_STRCASECMP): Don't require gl_FUNC_MBRTOWC. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSCASECMP. * modules/string (string.h): Also substitute GNULIB_MBSCASECMP. Substitute HAVE_STRCASECMP instead of REPLACE_STRCASECMP. * modules/strcase (Files): Remove m4/mbrtowc.m4. (Depends-on): Remove mbuiter. * MODULES.html.sh (Internationalization functions): Add mbscasecmp. 2007-02-04 Bruno Haible New module mbsstr. Remove module strstr. * modules/mbsstr: New file. * modules/strstr: Remove file. * lib/mbsstr.c: Renamed from lib/strstr.c. (mbsstr): Renamed from strstr. * lib/string_.h (strstr): Remove declaration. Change the conditional link warning. (mbsstr): New declaration. * m4/mbsstr.m4: New file. * m4/strstr.m4: Remove file. * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Don't initialize REPLACE_STRSTR. (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSSTR. Don't initialize GNULIB_STRSTR. * modules/string (string.h): Also substitute GNULIB_MBSSTR. Don't substitute GNULIB_STRSTR and REPLACE_STRSTR. * MODULES.html.sh (Internationalization functions): Add mbsstr. (Support for systems lacking ANSI C 89): Remove strstr. 2007-02-04 Bruno Haible New module mbsrchr. * modules/mbsrchr: New file. * lib/mbsrchr.c: New file. * lib/string_.h (strrchr): Add a conditional link warning. (mbsrchr): New declaration. * m4/mbsrchr.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSRCHR. * modules/string (string.h): Also substitute GNULIB_MBSRCHR. * MODULES.html.sh (Internationalization functions): Add mbsrchr. 2007-02-04 Bruno Haible New module mbschr. * modules/mbschr: New file. * lib/mbschr.c: New file. * lib/string_.h (strchr): Add a conditional link warning. (mbschr): New declaration. * m4/mbschr.m4: New file. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR_DEFAULTS): Initialize GNULIB_MBSCHR. * modules/string (string.h): Also substitute GNULIB_MBSCHR. * MODULES.html.sh (Internationalization functions): Add mbschr. 2007-02-04 Paul Eggert * lib/stdbool_.h: Mention that bool bit-fields aren't supported. * modules/stdarg (configure.ac-early): Require AC_PROG_CC_STDC. 2007-02-04 Bruno Haible New module description section 'configure.ac-early'. * gnulib-tool (sed_extract_prog): Recognize configure.ac-early. (func_get_autoconf_early_snippet): New function. (func_import, func_create_testdir): Use it. Remove special cases for modules 'extensions' and 'lock'. * modules/extensions (configure.ac-early): Require gl_USE_SYSTEM_EXTENSIONS. * modules/lock (configure.ac-early): Require gl_LOCK_EARLY. 2007-02-04 Bruno Haible Make use of gcj-4.3's -fsource and -ftarget option. * m4/javacomp.m4 (gt_JAVACOMP): Test whether gcj is in version >= 4.3, and if so try the options -fsource and -ftarget. * lib/javacomp.c (compile_using_gcj): Add fsource_option, source_version, ftarget_option, target_version arguments. (is_envjavac_gcj43, is_envjavac_gcj43_usable): New functions. (is_envjavac_oldgcj_14_14_usable): Renamed from is_envjavac_gcj_14_14_usable. (is_envjavac_oldgcj_14_13_usable): Renamed from is_envjavac_gcj_14_13_usable. (is_gcj_present): Update. (is_gcj_43, is_gcj43_usable): New functions. (is_oldgcj_14_14_usable): Renamed from is_gcj_14_14_usable. Update. (is_oldgcj_14_13_usable): Renamed from is_gcj_14_13_usable. Update. (compile_java_class): Test whether gcj is in version >= 4.3, and if so try the options -fsource and -ftarget. 2007-02-03 Paul Eggert * lib/xalloc.h (x2nrealloc): Fix an unlikely bug in the overflow checking code. Set N = ceil (1.5 * N) rather than to a slightly larger value. 2007-02-03 Jim Meyering Give tools a better chance to allocate space for very large buffers. * lib/xalloc.h (x2nrealloc): Use 3/2, not 2, as buffer size factor. Make pwd and readlink work also when run with an unreadable parent dir on systems with openat support. * lib/getcwd.c (__getcwd) [HAVE_PARTLY_WORKING_GETCWD]: Use the system provided getcwd function, even when we have openat support. Reported by Dmitry V. Levin in . 2007-02-02 Bruno Haible * lib/string_.h (memmem, mempcpy, memrchr, stpcpy, stpncpy, strchrnul, strdup, strndup, strnlen, strpbrk, strsep, strtok_r): Provoke a link error only if GNULIB_POSIXCHECK is defined. Needed to avoid artificial portability problems if one of these functions is only used on specific platforms. Reported by Paul Eggert. 2007-02-02 Paul Eggert Avoid mempcpy in the regex code, as the string.h mempcpy stuff is causing more trouble than it's curing. * lib/regex_internal.h (__mempcpy): Remove. * lib/regcomp.c (regerror): Rewrite to avoid the need for mempcpy (and make the code a tad smaller to boot). * m4/regex.m4 (gl_PREREQ_REGEX): Don't check for mempcpy. 2007-02-02 Jim Meyering * modules/arpa_inet: Put AC_PROG_MKDIR_P in the configure.ac: section, not in the Makefile.am: one. 2007-02-02 Eric Blake * lib/strchrnul.c: Always include config.h first. * modules/mountlist (Depends-on): Revert 2007-01-31 change, gnulib strstr is not necessary here. 2007-02-02 Simon Josefsson * m4/socklen.m4: Fix typo. 2007-02-02 Eric Blake * modules/arpa_inet (Makefile.am): Use MKDIR_P to avoid races. * modules/netinet_in (Makefile.am): Likewise. 2007-02-01 Bruno Haible * lib/string_.h (GL_LINK_WARNING): New macro. (strcasecmp, strstr, strcasestr): If provided by the system, conditionally define as a macro that leads to a warning instead of to an error. (strncasecmp): Conditionally define as a macro that leads to a warning. 2007-02-01 Karl Berry * config/srclist.txt (strtok_r.c): lose sync, no more strtok_r.h. 2007-02-01 Bruno Haible * MODULES.html.sh (Unicode string functions): Update after 2007-01-27 renamings. 2007-02-01 Eric Blake * modules/regex (Depends-on): Revert dependence on mempcpy. * lib/regex_internal.h [! _LIBC && !__mempcpy]: Undo string module's definition of mempcpy. Reported by Paul Eggert. 2007-02-01 Paul Eggert * lib/string_.h: If the gnulib module XYZ is not present, undefine the symbol XYZ before redefining it. This fixes a problem with programs that don't use XYZ, when compiled on systems that define XYZ to something else. 2007-01-31 Paul Eggert * lib/mkdir-p.c (make_dir_parents): Close a race condition that occurs when "mkdir -m foo" creates a setgid directory that is (1) writeable to group or other and (2) is intended to have a special mode bit that is set or cleared. In such a case, the directory should be neither group- nor other-writeable until the special mode bits are right. 2007-01-31 Eric Blake * modules/mountlist (Depends-on): Add strstr. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR): Correct m4 usage bug. * modules/string (Makefile.am): Remove redundant replacement. * modules/regex (Depends-on): Add mempcpy. 2007-01-31 Bruno Haible New module description field 'Link'. * gnulib-tool (func_usage): Document --extract-link-directive. (sed_extract_prog): Recognize 'Link' directive. (func_get_link_directive): New function. (func_import): Show summary of link directives. Handle --extract-link-directive option. * modules/acl (Link): New section. * modules/clock-time (Link): New section. * modules/euidaccess (Link): New section. * modules/gettext (Link): New section. * modules/iconv (Link): New section. * modules/lock (Link): New section. * modules/nanosleep (Link): New section. * modules/readline (Link): New section. 2007-01-27 Bruno Haible Enforce the use of gnulib modules for unportable functions. * m4/string_h.m4 (gl_STRING_MODULE_INDICATOR): New macro. (gl_STRING_MODULE_INDICATOR_DEFAULTS): New macro. (gl_HEADER_STRING_H_BODY): Require it. * lib/string_.h: If the gnulib module XYZ is not present, redefine the symbol XYZ to one that gives a link error. * modules/string (Makefile.am): Also substitute the GNULIB_* variables. * modules/memmem (configure.ac): Invoke gl_STRING_MODULE_INDICATOR. * modules/mempcpy (configure.ac): Likewise. * modules/memrchr (configure.ac): Likewise. * modules/stpcpy (configure.ac): Likewise. * modules/stpncpy (configure.ac): Likewise. * modules/strcase (configure.ac): Likewise. * modules/strcasestr (configure.ac): Likewise. * modules/strchrnul (configure.ac): Likewise. * modules/strdup (configure.ac): Likewise. * modules/strndup (configure.ac): Likewise. * modules/strnlen (configure.ac): Likewise. * modules/strpbrk (configure.ac): Likewise. * modules/strsep (configure.ac): Likewise. * modules/strstr (configure.ac): Likewise. * modules/strtok_r (configure.ac): Likewise. 2007-01-31 Jean-Louis Martineau (tiny change) * lib/gai_strerror.c (values): Add EAI_OVERFLOW. 2007-01-30 Jim Meyering * lib/mpsort.c (mpsort): Remove spurious "return" in void function. 2007-01-29 Bruno Haible * lib/allocsa.h: Use '#if HAVE_*' instead of '#ifdef HAVE_*'. * lib/execute.c: Likewise. * lib/pipe.c: Likewise. * lib/printf-args.h: Likewise. * lib/printf-args.c: Likewise. * lib/printf-parse.c: Likewise. * lib/vasnprintf.c: Likewise. 2007-01-29 Eric Blake * lib/memrchr.c: Assume unconditionally, to pull in declaration. 2007-01-29 Paul Eggert * lib/strptime.h (strptime): Use 'restrict' for args where POSIX requires this. * lib/strptime.c (strptime): Likewise. Change license notice from LGPL to GPL, since gnulib-tool will change this as needed. Include if _LIBC is not defined, not if HAVE_CONFIG_H is defined. Include "strptime.h" first, to check interface. Do not #undef _LIBC and _NL_CURRENT. Do not include ; no longer needed. Include "time_r.h" and declare ptime_locale_status only if _LIBC is not defined. (__P): Remove unused macro. (match_string): Bring back glibc version, but use it only if _LIBC is defined. (__strptime_internal): Compile tm_gmtoff code if _LIBC is defined, too. Remove unnecessary assertion and abort() call. Use #ifdef _NL_CURRENT rather than #if 0, for benefit of glibc. * m4/strptime.m4: Fix serial number comment. (gl_FUNC_STRPTIME): Require AC_C_RESTRICT, gl_TM_GMTOFF. * modules/strptime (Files): Add m4/tm_gmtoff.m4. (Depends-on): Add time_r. 2007-01-29 Bruno Haible * MODULES.html.sh (Support for systems lacking POSIX:2001): Add strptime. * modules/strptime (Depends-on): Add stdbool. * lib/strptime.h: Include always. Add comments. 2007-01-29 Yoann Vandoorselaere * modules/strptime: New file. * lib/strptime.h: New file. * lib/strptime.c: New file. * m4/strptime.m4: New file. 2007-01-28 Paul Eggert * MODULES.html.sh: New module mpsort. * lib/mpsort.c, lib/mpsort.h, m4/mpsort.m4, modules/mpsort: New files. * lib/regex.h (_Restrict_): Renamed from __restrict, to avoid a circularity problem with HP-UX ia64 reported by Bob Proulx in . All uses changed. (_Restrict_arr_): Renamed from __restrict_arr, for similar reasons. All uses changed. * lib/regcomp.c, lib/regexec.c: Change all uses from __restrict to _Restrict_. * lib/regexec.c (regexec): Declare pmatch with _Restrict_arr_, so that the parameter matches the prototype. 2007-01-28 Jim Meyering * modules/sys_time (Makefile.am) [MOSTLYCLEANFILES]: Do use sys/time.h here, reverting that part of the previous patch: . 2007-01-28 Bruno Haible * modules/sys_time (Makefile.am): Build sys/time.h only when it's the value of $(SYS_TIME_H). [MOSTLYCLEANFILES]: Now that sys/time.h is created only when needed, remove it conditionally, too. [added by Jim Meyering] * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Set SYS_TIME_H. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): (gl_FUNC_GETTIMEOFDAY_CLOBBER): Set SYS_TIME_H when setting GETTIMEOFDAY_REPLACEMENT to 1. 2007-01-28 Bruno Haible * m4/unistd_h.m4 (gl_HEADER_UNISTD_DEFAULTS): New macro. (gl_HEADER_UNISTD): Require it. Don't set UNISTD_H to empty here. * m4/fchdir.m4 (gl_FUNC_FCHDIR): Require gl_HEADER_UNISTD_DEFAULTS. Set UNISTD_H instead of UNISTD_H2. * modules/fchdir (BUILT_SOURCES): Drop $(UNISTD_H2). 2007-01-28 Bruno Haible * modules/mbchar (Makefile.am): Add mbchar.c to lib_SOURCES. * m4/mbchar.m4 (gl_MBCHAR): Remove AC_LIBOBJ invocation. 2007-01-28 Ralf Wildenhues * gnulib-tool (func_emit_lib_Makefile_am, func_add_or_update) (func_create_testdir): Ensure C locale for `grep' and `tr' character ranges. (func_create_megatestdir): Avoid one `grep'. Fix bug in ACLOCAL_AMFLAGS parsing state machine. 2007-01-27 Bruno Haible * modules/unistr/base: Update. 2007-01-27 Bruno Haible Rename u32-mbtouc -> u32-mbtouc-unsafe, u32-mbtouc-safe -> u32-mbtouc, u32_mbtouc -> u32_mbtouc_unsafe, u32_mbtouc_safe -> u32_mbtouc. * modules/unistr/u32-mbtouc-unsafe: Renamed from modules/unistr/u32-mbtouc. * lib/unistr/u32-mbtouc-unsafe.c: Renamed from lib/unistr/u32-mbtouc.c. * lib/unistr.h: Update. * lib/linebreak.c: Update. * modules/unistr/u32-mbtouc: Renamed from modules/unistr/u32-mbtouc-safe. * lib/unistr/u32-mbtouc.c: Renamed from lib/unistr/u32-mbtouc-safe.c. * lib/unistr.h: Update. * lib/unistr/u32-to-u8.c: Update. * lib/unistr/u32-to-u16.c: Update. 2007-01-27 Bruno Haible Rename utf16-ucs4 -> utf16-ucs4-unsafe, utf16-ucs4-safe -> utf16-ucs4, u16_mbtouc -> u16_mbtouc_unsafe, u16_mbtouc_safe -> u16_mbtouc. * modules/utf16-ucs4-unsafe: Renamed from modules/utf16-ucs4. * lib/utf16-ucs4-unsafe.h: Renamed from lib/utf16-ucs4.h. * lib/unistr/utf16-ucs4-unsafe.c: Renamed from lib/unistr/utf16-ucs4.c. * modules/unistr/u16-mbtouc-unsafe: Renamed from modules/unistr/u16-mbtouc. * lib/unistr/u16-mbtouc-unsafe.c: Renamed from lib/unistr/u16-mbtouc.c. * lib/unistr.h: Update. * lib/linebreak.c: Update. * modules/linebreak: Update. * modules/utf16-ucs4: Renamed from modules/utf16-ucs4-safe. * lib/utf16-ucs4.h: Renamed from lib/utf16-ucs4-safe.h. * lib/unistr/utf16-ucs4.c: Renamed from lib/unistr/utf16-ucs4-safe.c. * modules/unistr/u16-mbtouc: Renamed from modules/unistr/u16-mbtouc-safe. * lib/unistr/u16-mbtouc.c: Renamed from lib/unistr/u16-mbtouc-safe.c. * lib/unistr.h: Update. * lib/unistr/u16-to-u8.c: Update. * modules/unistr/u16-to-u8: Update. * lib/unistr/u16-to-u32.c: Update. * modules/unistr/u16-to-u32: Update. 2007-01-27 Bruno Haible Rename utf8-ucs4 -> utf8-ucs4-unsafe, utf8-ucs4-safe -> utf8-ucs4, u8_mbtouc -> u8_mbtouc_unsafe, u8_mbtouc_safe -> u8_mbtouc. * modules/utf8-ucs4-unsafe: Renamed from modules/utf8-ucs4. * lib/utf8-ucs4-unsafe.h: Renamed from lib/utf8-ucs4.h. * lib/unistr/utf8-ucs4-unsafe.c: Renamed from lib/unistr/utf8-ucs4.c. * modules/unistr/u8-mbtouc-unsafe: Renamed from modules/unistr/u8-mbtouc. * lib/unistr/u8-mbtouc-unsafe.c: Renamed from lib/unistr/u8-mbtouc.c. * lib/unistr.h: Update. * lib/striconveh.c: Update. * modules/striconveh: Update. * lib/linebreak.c: Update. * modules/linebreak: Update. * modules/utf8-ucs4: Renamed from modules/utf8-ucs4-safe. * lib/utf8-ucs4.h: Renamed from lib/utf8-ucs4-safe.h. * lib/unistr/utf8-ucs4.c: Renamed from lib/unistr/utf8-ucs4-safe.c. * modules/unistr/u8-mbtouc: Renamed from modules/unistr/u8-mbtouc-safe. * lib/unistr/u8-mbtouc.c: Renamed from lib/unistr/u8-mbtouc-safe.c. * lib/unistr.h: Update. * lib/striconveh.c: Update. * modules/striconveh: Update. * lib/unistr/u8-to-u16.c: Update. * modules/unistr/u8-to-u16: Update. * lib/unistr/u8-to-u32.c: Update. * modules/unistr/u8-to-u32: Update. 2007-01-27 Ralf Wildenhues Sync from Libtool. * lib/argz.c: Do not include strings.h nor memory.h, include string.h unconditionally. Patch by Simon Josefsson. 2007-01-27 Bruno Haible * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): New macro, extracted from gl_HEADER_STRING_H_BODY. (gl_HEADER_STRING_H_BODY): Require it. * m4/memmem.m4 (gl_FUNC_MEMMEM): Require gl_HEADER_STRING_H_DEFAULTS. * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): Likewise. * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Likewise. * m4/stpcpy.m4 (gl_FUNC_STPCPY): Likewise. * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise. * m4/strcase.m4 (gl_FUNC_STRCASECMP, gl_FUNC_STRNCASECMP): Likewise. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Likewise. * m4/strdup.m4 (gl_FUNC_STRDUP): Likewise. * m4/strndup.m4 (gl_FUNC_STRNDUP): Likewise. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Likewise. * m4/strpbrk.m4 (gl_FUNC_STRPBRK): Likewise. * m4/strsep.m4 (gl_FUNC_STRSEP): Likewise. * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Likewise. 2007-01-27 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): If $for_test is true, turn check_PROGRAMS into noinst_PROGRAMS. (func_emit_tests_Makefile_am): Likewise. Also don't initialize check_PROGRAMS in this case. (func_import): Set for_test to false. (func_create_testdir): Set for_test to true. 2007-01-27 Yoann Vandoorselaere Bruno Haible * modules/strcasestr (Files): Remove lib/strcasestr.h. (Depends-on): Add string. (Includes): Use instead of strcasestr.h. * modules/string (Makefile.am): Also substitute the value of REPLACE_STRCASESTR. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Don't define strcasestr here; assume strcasestr is declared in not . Also set REPLACE_STRCASESTR. * m4/string_h.m4 (gl_HEADER_STRING_H_BODY): Provide a default value for REPLACE_STRCASESTR. * lib/strcasestr.h: Remove file. * lib/strcasestr.c: Include instead of strcasestr.h. * lib/string_.h (strcasestr): New declaration. 2007-01-27 Bruno Haible * lib/string_.h: Use 'extern'. 2007-01-27 Jim Meyering * lib/regex_internal.c (re_string_reconstruct): Remove declaration of set-but-not-used local, "q". * lib/mempcpy.c: Include before . This fixes a compilation error on HP-UX, due to the system's "restrict"-using mempcpy prototype. 2007-01-26 Bruno Haible Small optimization. * lib/javacomp.c: Include c-strstr.h. (is_envjavac_gcj): Use c_strstr instead of strstr. * modules/javacomp (Depends-on): Add c-strstr, remove strstr. 2007-01-26 Bruno Haible * MODULES.html.sh (Unicode string functions): Add the new modules. * modules/uniconv/u32-strconv-to-locale: New file. * lib/uniconv/u32-strconv-to-locale.c: New file. * modules/uniconv/u16-strconv-to-locale: New file. * lib/uniconv/u16-strconv-to-locale.c: New file. * modules/uniconv/u8-strconv-to-locale: New file. * lib/uniconv/u8-strconv-to-locale.c: New file. * modules/uniconv/u32-strconv-from-locale: New file. * lib/uniconv/u32-strconv-from-locale.c: New file. * modules/uniconv/u16-strconv-from-locale: New file. * lib/uniconv/u16-strconv-from-locale.c: New file. * modules/uniconv/u8-strconv-from-locale: New file. * lib/uniconv/u8-strconv-from-locale.c: New file. * modules/uniconv/u32-strconv-to-enc: New file. * lib/uniconv/u32-strconv-to-enc.c: New file. * modules/uniconv/u32-strconv-to-enc-tests: New file. * tests/uniconv/test-u32-strconv-to-enc.c: New file. * modules/uniconv/u16-strconv-to-enc: New file. * lib/uniconv/u16-strconv-to-enc.c: New file. * lib/uniconv/u-strconv-to-enc.h: New file. * modules/uniconv/u16-strconv-to-enc-tests: New file. * tests/uniconv/test-u16-strconv-to-enc.c: New file. * modules/uniconv/u8-strconv-to-enc: New file. * lib/uniconv/u8-strconv-to-enc.c: New file. * modules/uniconv/u8-strconv-to-enc-tests: New file. * tests/uniconv/test-u8-strconv-to-enc.c: New file. * modules/uniconv/u32-strconv-from-enc: New file. * lib/uniconv/u32-strconv-from-enc.c: New file. * modules/uniconv/u32-strconv-from-enc-tests: New file. * tests/uniconv/test-u32-strconv-from-enc.c: New file. * modules/uniconv/u16-strconv-from-enc: New file. * lib/uniconv/u16-strconv-from-enc.c: New file. * modules/uniconv/u16-strconv-from-enc-tests: New file. * tests/uniconv/test-u16-strconv-from-enc.c: New file. * modules/uniconv/u8-strconv-from-enc: New file. * lib/uniconv/u8-strconv-from-enc.c: New file. * lib/uniconv/u-strconv-from-enc.h: New file. * modules/uniconv/u8-strconv-from-enc-tests: New file. * tests/uniconv/test-u8-strconv-from-enc.c: New file. * modules/uniconv/u32-conv-from-enc: New file. * lib/uniconv/u32-conv-from-enc.c: New file. * modules/uniconv/u32-conv-from-enc-tests: New file. * tests/uniconv/test-u32-conv-from-enc.c: New file. * modules/uniconv/u16-conv-from-enc: New file. * lib/uniconv/u16-conv-from-enc.c: New file. * lib/uniconv/u-conv-from-enc.h: New file. * modules/uniconv/u16-conv-from-enc-tests: New file. * tests/uniconv/test-u16-conv-from-enc.c: New file. * modules/uniconv/u8-conv-from-enc: New file. * lib/uniconv/u8-conv-from-enc.c: New file. * modules/uniconv/u8-conv-from-enc-tests: New file. * tests/uniconv/test-u8-conv-from-enc.c: New file. * modules/uniconv/base: New file. * lib/uniconv.h: New file. 2007-01-26 Paul Eggert * doc/gnulib-tool.texi (Initial import): Update to match current behavior with strdup module. * lib/.cppi-disable: Remove strcase.h, strdup.h, strndup.h, strnlen.h. * lib/memmem.h: Remove; all uses removed. This is now done by . * lib/mempcpy.h: Likewise. * lib/memrchr.h: Likewise. * lib/stpcpy.h: Likewise. * lib/stpncpy.h: Likewise. * lib/strcase.h: Likewise. * lib/strchrnul.h: Likewise. * lib/strdup.h: Likewise. * lib/strndup.h: Likewise. * lib/strnlen.h: Likewise. * lib/strpbrk.h: Likewise. * lib/strsep.h: Likewise. * lib/strstr.h: Likewise. * lib/strtok_r.h: Likewise. * lib/string_.h: New file. * lib/argp-namefrob.h: Don't include no-longer-existent include files. Rely on instead. * lib/canon-host.c: Likewise. * lib/chdir-long.c: Likewise. * lib/concatpath.c: Likewise. * lib/exclude.c: Likewise. * lib/fchdir.c: Likewise. * lib/getaddrinfo.c: Likewise. * lib/getcwd.c: Likewise. * lib/getsubopt.c: Likewise. * lib/glob.c: Likewise. * lib/hard-locale.c: Likewise. * lib/iconvme.c: Likewise. * lib/javacomp.c: Likewise. * lib/mempcpy.c: Likewise. * lib/memrchr.c: Likewise. * lib/regex_internal.h: Likewise. * lib/stpncpy.c: Likewise. * lib/strcasecmp.c: Likewise. * lib/strchrnul.c: Likewise. * lib/strdup.c: Likewise. * lib/striconv.c: Likewise. * lib/striconveh.c: Likewise. * lib/striconveha.c: Likewise. * lib/strncasecmp.c: Likewise. * lib/strndup.c: Likewise. * lib/strnlen.c: Likewise. * lib/strsep.c: Likewise. * lib/strstr.c: Likewise. * lib/strtok_r.c: Likewise. * lib/userspec.c: Likewise. * lib/w32spawn.h: Likewise. * lib/xstrndup.c: Likewise. * lib/mountlist.c (strstr): Remove decl. * m4/string_h.m4: New file. * m4/memmem.m4 (gl_FUNC_MEMMEM): Set HAVE_DECL_MEMMEM if necessary. * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): Set HAVE_MEMPCPY if necessary. * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Set HAVE_MEMRCHR * m4/stpcpy.m4 (gl_FUNC_STPCPY): Set HAVE_STPCPY if necessary. * m4/stpncpy.m4 (gl_PREREQ_STPNCPY): Set HAVE_STPNCPY if necessary. * m4/strcase.m4 (gl_FUNC_STRCASECMP): Set REPLACE_STRCASECMP if necessary. (gl_FUNC_STRNCASECMP): Set HAVE_DECL_STRNCASECMP if necessary. * m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Set HAVE_STRCHRNUL if necessary. * m4/strdup.m4 (gl_FUNC_STRDUP): Set HAVE_DECL_STRDUP if necessary. * m4/strndup.m4 (gl_FUNC_STRNDUP): Set HAVE_DECL_STRNLEN and HAVE_DECL_STRDUP if necessary. (gl_PREREQ_STRNLEN): Don't bother to check for strnlen decl, since gl_FUNC_STRNDUP does that now. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Set HAVE_DECL_STRNLEN if necessary. Check for decl here... (gl_PREREQ_STRNLEN): ... not here. * m4/strpbrk.m4 (gl_FUNC_STRPBRK): Set HAVE_STRPBRK if necessary. * m4/strsep.m4 (gl_FUNC_STRSEP): Set HAVE_STRSEP if necessary. * m4/strstr.m4 (gl_FUNC_STRSTR): Set REPLACE_STRSTR if necessary. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Set HAVE_DECL_STRTOK_R if necessary. * modules/string: New file. * modules/memmem (Files): Remove special-purpose include file. (Depends-on): Add string. (Include): Include , not the removed file. * modules/mempcpy: Likewise. * modules/memrchr: Likewise. * modules/stpcpy: Likewise. * modules/stpncpy: Likewise. * modules/strcase: Likewise. * modules/strchrnul: Likewise. * modules/strdup: Likewise. * modules/strndup: Likewise. * modules/strnlen: Likewise. * modules/strpbrk: Likewise. * modules/strsep: Likewise. * modules/strstr: Likewise. * modules/strtok_r: Likewise. * tests/test-dirname.c: Don't include "strdup.h", since now suffices. * tests/test-memmem.c: Don't include "memmem.h", since now suffices. 2007-01-25 Bruno Haible * lib/striconveh.c (mem_cd_iconveh_internal): Ignore *lengthp if *resultp is 0. * lib/unistr/u16-to-u8.c (u16_to_u8): Fix u8_uctomb invocation. * lib/unistr/u32-to-u8.c (u32_to_u8): Likewise. * lib/unistr/u8-to-u16.c (u8_to_u16): Fix u16_uctomb invocation. * lib/unistr/u32-to-u16.c (u32_to_u16): Likewise. * modules/unistr/u8-to-u16 (Depends-on): Add missing modules. * modules/unistr/u8-to-u32 (Depends-on): Add missing modules. * modules/unistr/u16-to-u8 (Depends-on): Add missing modules. * modules/unistr/u16-to-u32 (Depends-on): Add missing modules. * modules/unistr/u32-to-u8 (Depends-on): Add missing modules. * modules/unistr/u32-to-u16 (Depends-on): Add missing modules. 2007-01-24 Bruno Haible Don't AC_REQUIRE autoconf macros that invoke AC_LIBOBJ. See . * m4/argp.m4 (gl_ARGP): Invoke, don't require, gl_GETOPT_SUBSTITUTE. * m4/fts.m4 (gl_FUNC_FTS, gl_FUNC_FTS_LGPL): Invoke, don't require, gl_FUNC_FTS_CORE. (gl_FUNC_FTS_CORE): Invoke, don't require, gl_FUNC_OPENAT. * m4/lstat.m4 (gl_FUNC_LSTAT): Invoke, don't require, AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. * m4/memcmp.m4 (gl_FUNC_MEMCMP): Invoke, don't require, AC_FUNC_MEMCMP. * m4/mktime.m4 (gl_FUNC_MKTIME): Invoke, don't require, AC_FUNC_MKTIME. * m4/openat.m4 (gl_FUNC_OPENAT): Invoke, don't require, gl_FUNC_FCHOWNAT. * m4/strftime.m4 (gl_FUNC_GNU_STRFTIME): Invoke, don't require, gl_FUNC_STRFTIME. * m4/strtod.m4 (gl_FUNC_STRTOD): Invoke, don't require, AC_FUNC_STRTOD. Reported by Ralf Wildenhues. 2007-01-24 Bruno Haible Drop AC_REQUIRE calls that are redundant with the module dependencies. * m4/canon-host.m4 (gl_PREREQ_CANON_HOST): Don't require gl_GETADDRINFO. * m4/chdir-long.m4 (gl_PREREQ_CHDIR_LONG): Don't require AM_STDBOOL_H, gl_FUNC_MEMPCPY, gl_FUNC_OPENAT, gl_FUNC_MEMRCHR. * m4/openat.m4 (gl_PREREQ_OPENAT): Don't require gl_SAVE_CWD. 2007-01-24 Paul Eggert * m4/fnmatch.m4 (_AC_FUNC_FNMATCH_IF): Add test for glibc bug 361. Don't use 'exit'; just return from 'main'. (_AC_LIBOBJ_FNMATCH): Check for headers and functions just once. * lib/fnmatch_.h: Readjust white space and comments to match glibc, to avoid spurious diffs. 2007-01-23 Paul Eggert * lib/fnmatch_loop.c (internal_fnmatch) [!_LIBC]: #if-out the 2004-12-01 change by Jakub Jelinek, since this code won't compile if !LIBC. Problem reported by Bob Proulx. 2007-01-23 Bruno Haible * lib/striconveh.c: Include c-strcaseeq.h. (mem_iconveh, str_iconveh): Use STRCASEEQ instead of c_strcasecmp. * modules/striconveh (Depends-on): Add c-strcaseeq. 2007-01-23 Bruno Haible * MODULES.html.sh (String handling): Add streq, c-strcaseeq. * modules/c-strcaseeq: New file. * lib/c-strcaseeq.h: New file. * modules/streq: New file. * lib/streq.h: New file. 2007-01-23 Bruno Haible * modules/striconveha-tests: New file. * tests/test-striconveha.c: New file. * lib/striconveha.h: Include . (mem_iconveha, str_iconveha): Add 'transliterate' argument. * lib/striconveha.c: Include allocsa.h, strdup.h, c-strcase.h. (mem_iconveha_notranslit): Renamed from mem_iconveha. (mem_iconveha): New function. (str_iconveha_notranslit): Renamed from str_iconveha. (str_iconveha): New function. * modules/striconveha (Depends-on): Add stdbool, allocsa, strdup, c-strcase. 2007-01-23 Bruno Haible * lib/striconveha.c (mem_iconveha): Fix endless recursion. Try all encodings without forgiving before trying any encoding with handler. (str_iconveha): Try all encodings without forgiving before trying any encoding with handler. 2007-01-23 Paul Eggert Import the following changes from libc. 2005-10-14 Ulrich Drepper * lib/fnmatch_loop.c: Adjust for changed secondary hash function. 2004-12-01 Jakub Jelinek * lib/fnmatch_loop.c (internal_fnmatch): Clear is_seqval after normal_bracket label. 2004-09-01 Jakub Jelinek [BZ #361] * lib/fnmatch_loop.c (FCT): For backslash between brackets, branch to normal_bracket after fetching the next character. 2007-01-22 Bruno Haible * lib/striconveh.h (mem_cd_iconveh, mem_iconveh): Add 'offsets' argument. * lib/striconveh.c (iconv_carefully_1): New function. (mem_cd_iconveh_internal, mem_cd_iconveh, mem_iconveh): Add 'offsets' argument. (str_cd_iconveh): Update. * lib/striconveha.h (mem_iconveha): Add 'offsets' argument. * lib/striconveha.c (mem_iconveha): Add 'offsets' argument. * tests/test-striconveh.c (MAGIC): New macro. (new_offsets): New function. (main): Test call with and without offsets. 2007-01-22 Bruno Haible * modules/sys_stat (Makefile.am): Use @MKDIR_P@ instead of $(MKDIR_P). * modules/sys_select (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_time (Makefile.am): Likewise. 2007-01-22 Paul Eggert * modules/gettimeofday (License): Change from GPL to LGPL, since gettimeofday is a library function. 2007-01-22 Yoann Vandoorselaere * lib/poll.c (rpl_poll): Don't check against FD_SETSIZE under Win32. 2007-01-21 Bruno Haible * m4/gnulib-common.m4 (AC_PROG_MKDIR_P): New macro. 2007-01-21 Bruno Haible * modules/striconveha: New file. * lib/striconveha.h: New file. * lib/striconveha.c: New file. * MODULES.html.sh (Internationalization functions): Add striconveha. * lib/striconv.c (str_iconv): Optimize the case of an empty input string. * lib/striconveh.c (mem_iconveh, str_iconveh): Likewise. 2007-01-21 Bruno Haible * lib/striconv.c (str_iconv): Guarantee errno is set when strdup fails. * lib/striconveh.c (str_iconveh): Likewise. 2007-01-21 Bruno Haible * lib/striconveh.h (mem_iconveh): New declaration. * lib/striconveh.c (mem_iconveh): New function. * tests/test-striconveh.c (main): Add tests for mem_iconveh. 2007-01-21 Bruno Haible * lib/xstriconv.h (xmem_cd_iconv): Change specification. * lib/striconveh.h (mem_cd_iconveh): Change specification. * lib/striconveh.c (mem_cd_iconveh): Don't free the user-supplied original result buffer. (str_cd_iconveh): Update. * tests/test-striconveh.c (main): Update. * lib/striconv.h (mem_cd_iconv): Change specification. * lib/striconv.c (mem_cd_iconv): Don't free the user-supplied original result buffer. (str_cd_iconv): Update. * tests/test-striconv.c (main): Update. 2007-01-21 Bruno Haible * gnulib-tool: Fix test whether sed is GNU sed supporting --posix. 2007-01-20 Jim Meyering * lib/userspec.c (parse_with_separator): If a user or group string starts with "+", skip the corresponding name-to-ID look-up, since such a look-up must fail: user and group names may not include "+". 2007-01-19 Paul Eggert * lib/poll.c: Include sys/time.h and time.h unconditionally, since we now assume the sys_time module. * m4/poll.m4 (gl_PREREQ_POLL): Don't require AC_HEADER_TIME or check for sys/time.h; no longer needed. * modules/poll (Depends-on): Depend on sys_time. 2007-01-18 Bruno Haible * m4/mktime.m4 (AC_FUNC_MKTIME): Remove test for . * m4/strftime.m4 (gl_FUNC_STRFTIME): Likewise. * m4/tempname.m4 (gl_PREREQ_TEMPNAME): Remove tests for sys/time.h and gettimeofday. * tests/test-gettimeofday.c: Include . (dummy): Remove variable. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Renamed from gl_HEADER_SYS_TIME_H. (gl_HEADER_SYS_TIME_H): New macro. * lib/sys_time_.h: Test GETTIMEOFDAY_REPLACEMENT instead of HAVE_GETTIMEOFDAY_POSIX_SIGNATURE and GETTIMEOFDAY_CLOBBERS_LOCALTIME. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY, gl_FUNC_GETTIMEOFDAY_CLOBBER): Set GETTIMEOFDAY_REPLACEMENT instead of HAVE_GETTIMEOFDAY_POSIX_SIGNATURE and GETTIMEOFDAY_CLOBBERS_LOCALTIME. * m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H): Initialize GETTIMEOFDAY_REPLACEMENT instead of HAVE_GETTIMEOFDAY_POSIX_SIGNATURE and GETTIMEOFDAY_CLOBBERS_LOCALTIME. * modules/sys_time (sys/time.h): Substitute GETTIMEOFDAY_REPLACEMENT instead of HAVE_GETTIMEOFDAY_POSIX_SIGNATURE and GETTIMEOFDAY_CLOBBERS_LOCALTIME. * m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Undo the last change; it caused a compilation error when cross-compiling to Cygwin. 2007-01-18 Jim Meyering Use "$(MKDIR_P) sys", not race-prone "test -d sys || mkdir sys". * modules/sys_stat (Makefile.am): Use "$(MKDIR_P) sys", rather than the race-prone "test -d sys || mkdir sys". (configure.ac): Use AC_PROG_MKDIR_P. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_time: Likewise. 2007-01-18 Eric Blake * m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Also replace gettimeofday. * lib/gettimeofday.c (rpl_gettimeofday): Declare with replacement name, to avoid infinite recursion. 2007-01-17 Paul Eggert * MODULES.html.sh (Support for systems lacking POSIX:2001): New module sys_time. * lib/gethrxtime.c: Include , since we can no longer assume timespec.h defines struct timeval. * lib/settime.c: Likewise. * lib/utimens.c: Likewise. * lib/gettime.c (gettime): Remove test against HAVE_GETTIMEOFDAY, since we now assume the gettimeofday module. * lib/tempname.c (__gen_tempname): Likewise. * lib/gettimeofday.h: Remove. * lib/gettimeofday.c: Include instead of "gettimeofday.h". Don't include and ; shouldn't be needed. Include , for 'time()'. (localtime_buffer_addr): Also use this workaround if TZSET_CLOBBERS_LOCALTIME. Set to a dummy static variable by default, to simplify the uses. All uses changed. (localtime, gmtime, tzset, gettimeofday): Reformat slightly so that #undef is inside {}, and 'const' follows type name consistently. (tzset): Define replacement only if TZSET_CLOBBERS_LOCALTIME. (gettimeofday): Do not use the maximum possible value for tv->tv_usec, since that might break usages other than ls.c. Instead, we'll leave ls.c alone. This undoes today's patch by Bruno. Add a compile-time warning for 1s-clock resolution; we've never observed the problem but might as well keep the canary. * lib/nanosleep.c: Include timespec.h first, for interface check. * lib/nanosleep.c: Include unconditionally, since we now assume the sys_time module. * lib/tempname.c: Likewise. * lib/timespec.h: Likewise. * lib/nanosleep.c: Don't worry about TIME_WITH_SYS_TIME; no longer needed. * lib/strftime.c: Likewise. * lib/timespec.h: Likewise. * lib/posixtm.c: Include posixtm.h first, for interface check. Don't worry about TM_IN_SYS_TIME; that's wayyy obsolete. * lib/posixtm.h: Include stdbool.h and time.h, for proper interface. * lib/strftime.c: Don't include ; shouldn't be needed. * lib/sys_time_.h: New file. * lib/timespec.h (struct timespec): Use long int, not long. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): (gl_FUNC_GETTIMEOFDAY_CLOBBER, gl_PREREQ_GETTIMEOFDAY): Remove obsolescent call to AC_HEADER_TIME. * m4/mktime.m4 (AC_FUNC_MKTIME): Likewise. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/strftime.m4 (gl_FUNC_STRFTIME): Likewise. * m4/timespec.m4 (gl_TIMESPEC, gl_CHECK_TYPE_STRUCT_TIMESPEC): Likewise. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Likewise. * m4/utimbuf.m4 (gl_CHECK_TYPE_STRUCT_UTIMBUF): Likewise. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): Move sys/time.h tests into the sys_time module. Check for gettimeofday just once. Prefix our variables with gl_, not with ac_ or jm_. Tighten test for gettimeofday signature to just check the signature. Merely compile it, since linking doesn't test signature. Improve test for whether gettimeofday.o is actually needed. (gl_FUNC_GETTIMEOFDAY_CLOBBER): Renamed from AC_FUNC_GETTIMEOFDAY_CLOBBER. All uses changed. Use AC_RUN_IFELSE rather than AC_TRY_RUN. If clobbering, set and define GETTIMEOFDAY_CLOBBERS_LOCALTIME. (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Don't define GETTIMEOFDAY_CLOBBERS_LOCALTIME; that's gl_FUNC_GETTIMEOFDAY_CLOBBER's job. Don't define tzset; that's gl_FUNC_TZSET_CLOBBER's job. * m4/mktime.m4 (AC_FUNC_MKTIME): Just include rather than worrying about sys/time.h. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Don't bother worrying about TIME_WITH_SYS_TIME. * m4/stat-time.m4 (gl_STAT_TIME): Likewise. * m4/posixtm.m4 (gl_POSIXTM): Remove obsolescent call to AC_STRUCT_TM. * m4/sys_time_h.m4: New file. * m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Require gl_HEADER_SYS_TIME_H. Don't include sys/time.h. Return from main rather than exiting. Define TZSET_CLOBBERS_LOCALTIME, for consistency with other names; all uses changed. * modules/gethrxtime (Depends-on): Add sys_time. * modules/gettime (Depends-on): Likewise. * modules/gettimeofday (Depends-on): Likewise. * modules/nanosleep (Depends-on): Likewise. * modules/settime (Depends-on): Likewise. * modules/tempname (Depends-on): Likewise. * modules/utimens (Depends-on): Likewise. * modules/gettimeofday (Files): Remove lib/gettimeofday.h. (Include): Change back to . (Maintainer): Add self. * modules/sys_time: New file. * modules/tempname (Depends-on): Add gettimeofday. * tests/test-gettimeofday.c: Include rather than gettimeofday.h. 2007-01-17 Bruno Haible * gnulib-tool (func_get_license): Revert last patch. Instead, let the license default to GPL. (func_create_testdir): Don't complain if a module is LGPL and its tests module depends on GPLed modules. 2007-01-17 Bruno Haible * lib/gettimeofday.c (gettimeofday): Add code for the case HAVE_GETTIMEOFDAY && !GETTIMEOFDAY_CLOBBERS_LOCALTIME. Use the maximum possible value for tv->tv_usec, rather than the minimum one. 2005-10-08 Martin Lambers 2005-10-08 Paul Eggert 2007-01-16 Bruno Haible * modules/gettimeofday (Files): Add lib/gettimeofday.h. (configure.ac): Remove AC_FUNC_GETTIMEOFDAY_CLOBBER. Add gl_FUNC_GETTIMEOFDAY. (Include): Add gettimeofday.h. * m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): New macro. (AC_FUNC_GETTIMEOFDAY_CLOBBER): Don't invoke gl_PREREQ_GETTIMEOFDAY. (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Define GETTIMEOFDAY_CLOBBERS_LOCALTIME. Invoke gl_PREREQ_GETTIMEOFDAY here. (gl_PREREQ_GETTIMEOFDAY): Check for and _ftime. * lib/gettimeofday.h: New file. * lib/gettimeofday.c: Include . (localtime_buffer_addr, rpl_localtime, rpl_gmtime, rpl_tzset): Define only if GETTIMEOFDAY_CLOBBERS_LOCALTIME. (rpl_gettimeofday) [!HAVE_GETTIMEOFDAY]: Use _ftime() when available; fall back on time(). * tests/test-gettimeofday.c: New file. * modules/gettimeofday-tests: New file. 2007-01-16 Eric Blake * modules/fnmatch (Depends-on): Depend on wchar. * lib/fnmatch.c (WIDE_CHAR_SUPPORT): Assume . * m4/fnmatch.m4: Likewise. * modules/mbchar (Makefile.am): Assume . * m4/mbchar.m4: Likewise. * modules/mbswidth (Depends-on): Depend on wchar. * lib/mbswidth.c: Assume . * m4/mbswidth.m4: Likewise. * modules/quotearg (Depends-on): Depend on wchar. * lib/quotearg.c: Assume . * m4/quotearg.m4: Likewise. * modules/regex (Depends-on): Depend on wchar. * lib/regex_internal.h: Assume . * m4/regex.m4: Likewise. * modules/stdint (Depends-on): Depend on wchar. * lib/stdint_.h [!defined WCHAR_MIN]: Assume . * m4/stdint.m4: Likewise. * tests/test-stdint.c [HAVE_WINT_T]: Likewise. * modules/strftime (Depends-on): Depend on wchar. * lib/strftime.c (DO_MULTIBYTE): Assume . * modules/strtol (Depends-on): Depend on wchar. * lib/strtol.c: Assume . * modules/wcwidth (Depends-on): Depend on wchar. * lib/wcwidth.h: Assume . * m4/wcwidth.m4: Likewise. 2007-01-16 Bruno Haible * modules/csharpexec-script: New, created from... * modules/csharpexec: ... this. 2007-01-16 Paolo Bonzini * modules/javaexec-script: New, created from... * modules/javaexec: ... this. 2007-01-16 Yoann Vandoorselaere * modules/poll (Dependencies): Add sys_select. 2007-01-15 Jim Meyering * m4/readutmp.m4 (gl_READUTMP): Work around AIX 4.3 struct- redefinition bug when using both and headers. * lib/readutmp.h: Likewise. Reported by Daniel Richard G. in . 2007-01-15 Bruno Haible * modules/striconveh: New file. * lib/striconveh.h: New file. * lib/striconveh.c: New file. * MODULES.html.sh (Internationalization functions): Add striconveh. * modules/striconveh-tests: New file. * tests/test-striconveh.c: New file. 2007-01-15 Bruno Haible * lib/striconv.c (str_cd_iconv): Use the first algorithm if iconv is not from GNU libiconv or GNU libc. 2007-01-15 Bruno Haible * doc/gnulib-intro.texi (Copyright): Explain the different license terms for module descriptions, autoconf macros, tests, documentation. 2007-01-14 Bruno Haible * modules/striconv-tests: New file. * tests/test-striconv.c: New file. 2007-01-14 Bruno Haible * modules/iconv-tests: New file. * tests/test-iconv.c: New file. 2007-01-14 Bruno Haible * gnulib-tool (func_get_license): For test modules, use the license of the main module. 2007-01-14 Bruno Haible * modules/iconv (Include): Clarify that can only be included if iconv is found to exist. 2007-01-14 Bruno Haible * modules/c-ctype-tests: New file. * tests/test-c-ctype.c: New file. 2007-01-14 Bruno Haible * modules/binary-io-tests: New file. * tests/test-binary-io.sh: New file. * tests/test-binary-io.c: New file. 2007-01-14 Bruno Haible * modules/array-oset-tests: New file. * tests/test-array_oset.c: New file. 2007-01-14 Bruno Haible * modules/array-list-tests: New file. * tests/test-array_list.c: New file. 2007-01-14 Bruno Haible * gnulib-tool (func_create_testdir): Don't unnecessarily run configure and make. Reported by Simon Josefsson in 2007-01-14 Bruno Haible * modules/allocsa-tests: New file. * tests/test-allocsa.c: New file. 2007-01-14 Bruno Haible * modules/fchdir (Depends-on): Add absolute-header. * modules/unistd (Depends-on): Likewise. 2006-12-30 Bruno Haible * modules/fchdir: New file. * modules/unistd (Files): Add lib/unistd_.h. (Makefile.am): Generate unistd.h from unistd_.h. * lib/fchdir.c: New file. * lib/dirent_.h: New file. * lib/unistd_.h: New file. * lib/fcntl_.h (open) [FCHDIR_REPLACEMENT]: New replacement. * m4/fchdir.m4: New file. * m4/unistd_h.m4 (gl_PREREQ_UNISTD): New macro. (gl_HEADER_UNISTD): Invoke it. * lib/dup-safer.c (dup_safer) [FCHDIR_REPLACEMENT]: Use the dup function. * lib/backupfile.c (opendir, closedir): Undefine. * lib/chown.c (open, close): Undefine. * lib/clean-temp.c (open, close): Undefine. * lib/copy-file.c (open, close): Undefine. * lib/execute.c (open, close): Undefine. * lib/fsusage.c (open, close): Undefine. * lib/gc-gnulib.c (open, close): Undefine. * lib/getcwd.c (opendir, closedir): Undefine. * lib/glob.c (opendir, closedir): Undefine. * lib/javacomp.c (open, close): Undefine. * lib/mountlist.c (open, close, opendir, closedir): Undefine. * lib/openat-proc.c (open, close): Undefine. * lib/pagealign_alloc.c (open, close): Undefine. * lib/pipe.c (open, close): Undefine. * lib/progreloc.c (open, close): Undefine. * lib/savedir.c (opendir, closedir): Undefine. * lib/utime.c (open, close): Undefine. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add fchdir. 2007-01-10 Bruno Haible * lib/striconv.c (mem_cd_iconv): Align the temporary buffer. 2007-01-12 Eric Blake Provide a robust . Further simplifications are now possible in other modules, but not included here. * modules/wchar: New module. * m4/wchar.m4: New file. * lib/wchar_.h: Likewise. * modules/mbchar (Depends-on): Depend on wchar, as the first use of the new module. * MODULES.html.sh (Extended multibyte and wide character utilities): New section. 2007-01-12 Paul Eggert * lib/xreadlink.c (SYMLINK_MAX) [!defined SYMLINK_MAX]: Define to a reasonable default for memory allocation. (xreadlink): Don't allocate a huge buffer, to work around a buggy file system that reports garbage st_size values for symlinks. Problem reported by Liyang Hu. 2007-01-11 Simon Josefsson * gnulib-tool (func_all_modules): Exclude all .* files (e.g., Emacs .#* auto-save files). 2007-01-11 Bruno Haible * gnulib-tool (func_all_modules): Exclude all files inside the CVS directory. 2007-01-10 Paul Eggert Use @...@ consistently in lib/wctype_.h. * lib/wctype_.h [HAVE_WINT_T]: Go back to using @...@, but rely on it being set to 1 or 0. * m4/wctype.m4 (gl_WCTYPE_H): Set HAVE_WINT_T to 1 or 0, and go back to AC_SUBSTing it. * modules/wctype (Makefile.am): Undo previous change. 2007-01-10 Eric Blake * lib/wctype_.h [HAVE_WINT_T]: Rely on AC_DEFINE. * m4/wctype.m4 (gl_WCTYPE_H): No need to AC_SUBST(HAVE_WINT_T). * modules/wctype (Makefile.am): Likewise. Reported by Chris McGuire. 2007-01-10 Jim Meyering fts.c: a small readability/maintainability improvement * lib/fts.c (fts_read): Make this code slightly more readable and maintainable by hoisting the "sp->fts_cur = p" assignments to immediately follow the statements that set P. Derived from the patch by Miloslav Trmac in http://bugzilla.redhat.com/222089. 2007-01-10 Eric Blake * lib/wctype_.h [HAVE_WINT_T]: Include before , to work around BSDI bug in BSD/OS 4.0.1. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * m4/wint_t.m4 (gt_TYPE_WINT_T): Likewise. Reported by Chris McGuire. 2007-01-09 Ralf Wildenhues * gnulib-tool (func_all_modules): Use POSIX conforming escaping in sed script. 2007-01-09 Bruno Haible * MODULES.html.sh: Accept options --cvs-urls, --git-urls. (repo_url_prefix, repo_url_suffix, repo_url_suffix_repl): New variables. (func_module): Use them. 2007-01-09 Bruno Haible * modules/unistr/base: New file. * lib/unistr.h: New file. * modules/unistr/u8-to-u16: New file. * lib/unistr/u8-to-u16.c: New file. * modules/unistr/u8-to-u32: New file. * lib/unistr/u8-to-u32.c: New file. * modules/unistr/u16-to-u8: New file. * lib/unistr/u16-to-u8.c: New file. * modules/unistr/u16-to-u32: New file. * lib/unistr/u16-to-u32.c: New file. * modules/unistr/u32-to-u8: New file. * lib/unistr/u32-to-u8.c: New file. * modules/unistr/u32-to-u16: New file. * lib/unistr/u32-to-u16.c: New file. * modules/unistr/u8-check: New file. * modules/unistr/u16-check: New file. * modules/unistr/u32-check: New file. * lib/unistr/u8-check.c: New file. * lib/unistr/u16-check.c: New file. * lib/unistr/u32-check.c: New file. * modules/unistr/u8-chr: New file. * modules/unistr/u16-chr: New file. * modules/unistr/u32-chr: New file. * lib/unistr/u8-chr.c: New file. * lib/unistr/u16-chr.c: New file. * lib/unistr/u32-chr.c: New file. * modules/unistr/u8-cmp: New file. * modules/unistr/u16-cmp: New file. * modules/unistr/u32-cmp: New file. * lib/unistr/u8-cmp.c: New file. * lib/unistr/u16-cmp.c: New file. * lib/unistr/u32-cmp.c: New file. * modules/unistr/u8-cpy: New file. * modules/unistr/u16-cpy: New file. * modules/unistr/u32-cpy: New file. * lib/unistr/u8-cpy.c: New file. * lib/unistr/u16-cpy.c: New file. * lib/unistr/u32-cpy.c: New file. * lib/unistr/u-cpy.h: New file. * modules/unistr/u8-cpy-alloc: New file. * modules/unistr/u16-cpy-alloc: New file. * modules/unistr/u32-cpy-alloc: New file. * lib/unistr/u8-cpy-alloc.c: New file. * lib/unistr/u16-cpy-alloc.c: New file. * lib/unistr/u32-cpy-alloc.c: New file. * lib/unistr/u-cpy-alloc.h: New file. * modules/unistr/u8-endswith: New file. * modules/unistr/u16-endswith: New file. * modules/unistr/u32-endswith: New file. * lib/unistr/u8-endswith.c: New file. * lib/unistr/u16-endswith.c: New file. * lib/unistr/u32-endswith.c: New file. * lib/unistr/u-endswith.h: New file. * modules/unistr/u8-mblen: New file. * modules/unistr/u16-mblen: New file. * modules/unistr/u32-mblen: New file. * lib/unistr/u8-mblen.c: New file. * lib/unistr/u16-mblen.c: New file. * lib/unistr/u32-mblen.c: New file. * modules/unistr/u8-mbtouc: New file. * modules/unistr/u16-mbtouc: New file. * modules/unistr/u32-mbtouc: New file. * lib/unistr/u8-mbtouc.c: New file. * lib/unistr/u16-mbtouc.c: New file. * lib/unistr/u32-mbtouc.c: New file. * modules/unistr/u8-mbtouc-safe: New file. * modules/unistr/u16-mbtouc-safe: New file. * modules/unistr/u32-mbtouc-safe: New file. * lib/unistr/u8-mbtouc-safe.c: New file. * lib/unistr/u16-mbtouc-safe.c: New file. * lib/unistr/u32-mbtouc-safe.c: New file. * modules/unistr/u8-move: New file. * modules/unistr/u16-move: New file. * modules/unistr/u32-move: New file. * lib/unistr/u8-move.c: New file. * lib/unistr/u16-move.c: New file. * lib/unistr/u32-move.c: New file. * lib/unistr/u-move.h: New file. * modules/unistr/u8-next: New file. * modules/unistr/u16-next: New file. * modules/unistr/u32-next: New file. * lib/unistr/u8-next.c: New file. * lib/unistr/u16-next.c: New file. * lib/unistr/u32-next.c: New file. * modules/unistr/u8-prev: New file. * modules/unistr/u16-prev: New file. * modules/unistr/u32-prev: New file. * lib/unistr/u8-prev.c: New file. * lib/unistr/u16-prev.c: New file. * lib/unistr/u32-prev.c: New file. * modules/unistr/u8-set: New file. * modules/unistr/u16-set: New file. * modules/unistr/u32-set: New file. * lib/unistr/u8-set.c: New file. * lib/unistr/u16-set.c: New file. * lib/unistr/u32-set.c: New file. * lib/unistr/u-set.h: New file. * modules/unistr/u8-startswith: New file. * modules/unistr/u16-startswith: New file. * modules/unistr/u32-startswith: New file. * lib/unistr/u8-startswith.c: New file. * lib/unistr/u16-startswith.c: New file. * lib/unistr/u32-startswith.c: New file. * lib/unistr/u-startswith.h: New file. * modules/unistr/u8-stpcpy: New file. * modules/unistr/u16-stpcpy: New file. * modules/unistr/u32-stpcpy: New file. * lib/unistr/u8-stpcpy.c: New file. * lib/unistr/u16-stpcpy.c: New file. * lib/unistr/u32-stpcpy.c: New file. * lib/unistr/u-stpcpy.h: New file. * modules/unistr/u8-stpncpy: New file. * modules/unistr/u16-stpncpy: New file. * modules/unistr/u32-stpncpy: New file. * lib/unistr/u8-stpncpy.c: New file. * lib/unistr/u16-stpncpy.c: New file. * lib/unistr/u32-stpncpy.c: New file. * lib/unistr/u-stpncpy.h: New file. * modules/unistr/u8-strcat: New file. * modules/unistr/u16-strcat: New file. * modules/unistr/u32-strcat: New file. * lib/unistr/u8-strcat.c: New file. * lib/unistr/u16-strcat.c: New file. * lib/unistr/u32-strcat.c: New file. * lib/unistr/u-strcat.h: New file. * modules/unistr/u8-strchr: New file. * modules/unistr/u16-strchr: New file. * modules/unistr/u32-strchr: New file. * lib/unistr/u8-strchr.c: New file. * lib/unistr/u16-strchr.c: New file. * lib/unistr/u32-strchr.c: New file. * modules/unistr/u8-strcmp: New file. * modules/unistr/u16-strcmp: New file. * modules/unistr/u32-strcmp: New file. * lib/unistr/u8-strcmp.c: New file. * lib/unistr/u16-strcmp.c: New file. * lib/unistr/u32-strcmp.c: New file. * modules/unistr/u8-strcpy: New file. * modules/unistr/u16-strcpy: New file. * modules/unistr/u32-strcpy: New file. * lib/unistr/u8-strcpy.c: New file. * lib/unistr/u16-strcpy.c: New file. * lib/unistr/u32-strcpy.c: New file. * lib/unistr/u-strcpy.h: New file. * modules/unistr/u8-strcspn: New file. * modules/unistr/u16-strcspn: New file. * modules/unistr/u32-strcspn: New file. * lib/unistr/u8-strcspn.c: New file. * lib/unistr/u16-strcspn.c: New file. * lib/unistr/u32-strcspn.c: New file. * lib/unistr/u-strcspn.h: New file. * modules/unistr/u8-strdup: New file. * modules/unistr/u16-strdup: New file. * modules/unistr/u32-strdup: New file. * lib/unistr/u8-strdup.c: New file. * lib/unistr/u16-strdup.c: New file. * lib/unistr/u32-strdup.c: New file. * lib/unistr/u-strdup.h: New file. * modules/unistr/u8-strlen: New file. * modules/unistr/u16-strlen: New file. * modules/unistr/u32-strlen: New file. * lib/unistr/u8-strlen.c: New file. * lib/unistr/u16-strlen.c: New file. * lib/unistr/u32-strlen.c: New file. * lib/unistr/u-strlen.h: New file. * modules/unistr/u8-strmblen: New file. * modules/unistr/u16-strmblen: New file. * modules/unistr/u32-strmblen: New file. * lib/unistr/u8-strmblen.c: New file. * lib/unistr/u16-strmblen.c: New file. * lib/unistr/u32-strmblen.c: New file. * modules/unistr/u8-strmbtouc: New file. * modules/unistr/u16-strmbtouc: New file. * modules/unistr/u32-strmbtouc: New file. * lib/unistr/u8-strmbtouc.c: New file. * lib/unistr/u16-strmbtouc.c: New file. * lib/unistr/u32-strmbtouc.c: New file. * modules/unistr/u8-strncat: New file. * modules/unistr/u16-strncat: New file. * modules/unistr/u32-strncat: New file. * lib/unistr/u8-strncat.c: New file. * lib/unistr/u16-strncat.c: New file. * lib/unistr/u32-strncat.c: New file. * lib/unistr/u-strncat.h: New file. * modules/unistr/u8-strncmp: New file. * modules/unistr/u16-strncmp: New file. * modules/unistr/u32-strncmp: New file. * lib/unistr/u8-strncmp.c: New file. * lib/unistr/u16-strncmp.c: New file. * lib/unistr/u32-strncmp.c: New file. * modules/unistr/u8-strncpy: New file. * modules/unistr/u16-strncpy: New file. * modules/unistr/u32-strncpy: New file. * lib/unistr/u8-strncpy.c: New file. * lib/unistr/u16-strncpy.c: New file. * lib/unistr/u32-strncpy.c: New file. * lib/unistr/u-strncpy.h: New file. * modules/unistr/u8-strnlen: New file. * modules/unistr/u16-strnlen: New file. * modules/unistr/u32-strnlen: New file. * lib/unistr/u8-strnlen.c: New file. * lib/unistr/u16-strnlen.c: New file. * lib/unistr/u32-strnlen.c: New file. * lib/unistr/u-strnlen.h: New file. * modules/unistr/u8-strpbrk: New file. * modules/unistr/u16-strpbrk: New file. * modules/unistr/u32-strpbrk: New file. * lib/unistr/u8-strpbrk.c: New file. * lib/unistr/u16-strpbrk.c: New file. * lib/unistr/u32-strpbrk.c: New file. * lib/unistr/u-strpbrk.h: New file. * modules/unistr/u8-strrchr: New file. * modules/unistr/u16-strrchr: New file. * modules/unistr/u32-strrchr: New file. * lib/unistr/u8-strrchr.c: New file. * lib/unistr/u16-strrchr.c: New file. * lib/unistr/u32-strrchr.c: New file. * modules/unistr/u8-strspn: New file. * modules/unistr/u16-strspn: New file. * modules/unistr/u32-strspn: New file. * lib/unistr/u8-strspn.c: New file. * lib/unistr/u16-strspn.c: New file. * lib/unistr/u32-strspn.c: New file. * lib/unistr/u-strspn.h: New file. * modules/unistr/u8-strstr: New file. * modules/unistr/u16-strstr: New file. * modules/unistr/u32-strstr: New file. * lib/unistr/u8-strstr.c: New file. * lib/unistr/u16-strstr.c: New file. * lib/unistr/u32-strstr.c: New file. * lib/unistr/u-strstr.h: New file. * modules/unistr/u8-strtok: New file. * modules/unistr/u16-strtok: New file. * modules/unistr/u32-strtok: New file. * lib/unistr/u8-strtok.c: New file. * lib/unistr/u16-strtok.c: New file. * lib/unistr/u32-strtok.c: New file. * lib/unistr/u-strtok.h: New file. * modules/unistr/u8-uctomb: New file. * modules/unistr/u16-uctomb: New file. * modules/unistr/u32-uctomb: New file. * lib/unistr/u8-uctomb.c: New file. * lib/unistr/u16-uctomb.c: New file. * lib/unistr/u32-uctomb.c: New file. * MODULES.html.sh (Unicode string functions): Add the new modules. 2007-01-08 Bruno Haible * gnulib-tool (func_all_modules): Use find, not ls, to traverse the modules directory. Filter out CVS, ChangeLog, COPYING, README also from subdirectories. 2007-01-08 Karl Berry * doc/error.texi: mention that main() fns must set program_name when progname is used. 2007-01-08 Paul Eggert * m4/wctype.m4 (gl_WCTYPE_H): Compute ABSOLUTE_WCTYPE_H even if WCTYPE_H is empty, for the benefit of builds from non-distclean directories. Problem reported by Eric Blake in . 2007-01-08 Bruno Haible * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME): Remove PROVIDE_CANONICALIZE_FILENAME_MODE macro definition. * lib/canonicalize.h: Test GNULIB_CANONICALIZE instead of PROVIDE_CANONICALIZE_FILENAME_MODE. * modules/canonicalize (configure.ac): Use gl_MODULE_INDICATOR. 2007-01-08 Bruno Haible * m4/fts.m4 (gl_FUNC_FTS_LGPL): Remove _LGPL_PACKAGE macro definition. * lib/fts_.h (_LGPL_PACKAGE): Remove macro. Use !GNULIB_FTS instead of _LGPL_PACKAGE. * lib/fts.c: Likewise. * modules/fts (configure.ac): Use gl_MODULE_INDICATOR. 2006-12-25 Bruno Haible * modules/utf8-ucs4-safe: New file. * lib/utf8-ucs4-safe.h: New file. * lib/unistr/utf8-ucs4-safe.c: New file. * modules/utf16-ucs4-safe: New file. * lib/utf16-ucs4-safe.h: New file. * lib/unistr/utf16-ucs4-safe.c: New file. * MODULES.html.sh (Unicode string functions): Add the new modules. 2007-01-08 Bruno Haible * modules/utf8-ucs4 (Files, lib_SOURCES): Add unistr/utf8-ucs4.c. (Depends-on): Add unitypes. * lib/utf8-ucs4.h: Add double-inclusion guard. Include unitypes.h. (u8_mbtouc_aux): Move out to separate file. (u8_mbtouc): Use ucs4_t, uint8_t types. * lib/unistr/utf8-ucs4.c: New file. * modules/utf16-ucs4 (Files, lib_SOURCES): Add unistr/utf16-ucs4.c. (Depends-on): Add unitypes. * lib/utf16-ucs4.h: Add double-inclusion guard. Include unitypes.h. (u16_mbtouc_aux): Move out to separate file. (u16_mbtouc): Use ucs4_t, uint16_t types. * lib/unistr/utf16-ucs4.c: New file. * modules/ucs4-utf8 (Files, lib_SOURCES): Add unistr/ucs4-utf8.c. (Depends-on): Add unitypes. * lib/ucs4-utf8.h: Add double-inclusion guard. Include unitypes.h. (u8_uctomb_aux): Move out to separate file. (u8_uctomb): Use ucs4_t, uint8_t types. * lib/unistr/ucs4-utf8.c: New file. * modules/ucs4-utf16 (Files, lib_SOURCES): Add unistr/ucs4-utf16.c. (Depends-on): Add unitypes. * lib/ucs4-utf16.h: Add double-inclusion guard. Include unitypes.h. (u16_uctomb_aux): Move out to separate file. (u16_uctomb): Use ucs4_t, uint16_t types. * lib/unistr/ucs4-utf16.c: New file. 2006-12-25 Bruno Haible * modules/unitypes: New file. * lib/unitypes.h: New file. * MODULES.html.sh (func_all_modules): New section "Unicode string functions". Move ucs4-utf8, ucs4-utf16, utf8-ucs4, utf16-ucs4 to this section. Add unitypes. 2007-01-08 Bruno Haible Avoid variable names that conflict with those from libtool. * m4/lib-link.m4 (AC_LIB_RPATH, AC_LIB_LINKFLAGS_BODY, AC_LIB_LINKFLAGS_FROM_LIBS): Rename libext to acl_libext, shlibext to acl_shlibext, libname_spec to acl_libname_spec, library_names_spec to acl_library_names_spec, hardcode_* to acl_hardcode_*. Reported by Ralf Wildenhues. 2007-01-08 Bruno Haible * m4/gc-arcfour.m4 (gl_GC_ARCFOUR): Remove GC_USE_ARCFOUR macro definition. * m4/gc-arctwo.m4 (gl_GC_ARCTWO): Remove GC_USE_ARCTWO macro definition. * m4/gc-des.m4 (gl_GC_DES): Remove GC_USE_DES macro definition. * m4/gc-hmac-md5.m4 (gl_GC_HMAC_MD5): Remove GC_USE_HMAC_MD5 macro definition. * m4/gc-hmac-sha1.m4 (gl_GC_HMAC_SHA1): Remove GC_USE_HMAC_SHA1 macro definition. * m4/gc-md2.m4 (gl_GC_MD2): Remove GC_USE_MD2 macro definition. * m4/gc-md4.m4 (gl_GC_MD4): Remove GC_USE_MD4 macro definition. * m4/gc-md5.m4 (gl_GC_MD5): Remove GC_USE_MD5 macro definition. * m4/gc-random.m4 (gl_GC_RANDOM): Remove GC_USE_RANDOM macro definition. * m4/gc-rijndael.m4 (gl_GC_RIJNDAEL): Remove GC_USE_RIJNDAEL macro definition. * m4/gc-sha1.m4 (gl_GC_SHA1): Remove GC_USE_SHA1 macro definition. * lib/gc-gnulib.c: Use GNULIB_GC_ instead of GC_USE_. * lib/gc-libgcrypt.c: Likewise. * modules/gc-arcfour (configure.ac): Use gl_MODULE_INDICATOR. * modules/gc-arctwo (configure.ac): Likewise. * modules/gc-des (configure.ac): Likewise. * modules/gc-hmac-md5 (configure.ac): Likewise. * modules/gc-hmac-sha1 (configure.ac): Likewise. * modules/gc-md2 (configure.ac): Likewise. * modules/gc-md4 (configure.ac): Likewise. * modules/gc-md5 (configure.ac): Likewise. * modules/gc-random (configure.ac): Likewise. * modules/gc-rijndael (configure.ac): Likewise. * modules/gc-sha1 (configure.ac): Likewise. 2007-01-08 Bruno Haible * m4/close-stream.m4 (gl_CLOSE_STREAM): Remove GNULIB_CLOSE_STREAM macro definition. * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): Remove GNULIB_FCNTL_SAFER macro definition. * m4/stdio-safer.m4 (gl_FOPEN_SAFER): Remove GNULIB_FOPEN_SAFER macro definition. * modules/close-stream (configure.ac): Invoke gl_MODULE_INDICATOR. * modules/fcntl-safer (configure.ac): Likewise. * modules/fopen-safer (configure.ac): Likewise. * modules/fwriteerror (configure.ac): Likewise. Remove explicit GNULIB_FWRITEERROR macro definition. 2007-01-08 Bruno Haible * m4/gnulib-common.m4: New file. * gnulib-tool (func_get_autoconf_snippet): Undo last change. (func_get_filelist): Add m4/gnulib-common.m4. 2007-01-08 Bruno Haible * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Simplify the sorting command. 2007-01-08 Jim Meyering Use a more robust test for a "can't happen" condition. * lib/fts.c (fts_read): Revert the change of 2006-11-22, since it narrowed the st_size value. Presuming the "can't happen" condition is true, that narrowing could conceivably convert an invalid st_size value into a valid one. Instead, use a change based on Matthew Woehlke's original patch. Slight readability improvement: use an assert-like macro in place of literal "abort ()" uses. * lib/fts.c (fts_assert): Define. (fts_set_stat_required, cwd_advance_fd, fts_read, fd_ring_check): Use this macro instead of a bare 'abort'. 2007-01-05 Paul Eggert Don't worry about using IRIX 5.3's wctype.h broken definitions; simply work around them. * lib/wctype_.h: Remove test for HAVE_WCTYPE_CTMP_BUG. (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower): (iswprint, iswpunct, iswspace, iswupper, iswxdigit): Undef before declaring. Don't bother to define as macros, since the standard doesn't require it. * m4/wctype.m4 (WCTYPE_H, ABSOLUTE_WCTYPE_H): Simplify, since we no longer worry about IRIX 5.3. (HAVE_WCTYPE_CTMP_BUG): Remove. 2007-01-04 Paul Eggert * lib/wctype_.h (_ctmp_) [HAVE_WCTYPE_CTMP_BUG]: Now of type wchar_t, not wint_t. Also, include , to fix another IRIX bug. * m4/wctype.m4 (gl_WCTYPE_H): Likewise. Problems reported by Georg Schwarz for IRIX 5.3. * gnulib-tool (autoconf_minversion): Take the maximum version number found, not the minimum. Problem reported by James Youngman. 2007-01-03 Karl Berry * doc/error.texi: new file, explaining interaction with progname. * doc/gnulib.texi: include it. Update copyright. 2007-01-03 Simon Josefsson * gnulib-tool (func_create_testdir): Run AC_CANONICAL_BUILD and AC_CANONICAL_HOST, to improve autobuild outputs. 2007-01-03 Paolo Bonzini Yoann Vandoorselaere * lib/poll.c (poll): Use recv on Mac OS X to distinguish connected sockets, server sockets, and other file descriptors. Count errors to compute the return value. Reorder the code a bit to be easier to follow. Don't set event bits that were not requested (except POLLERR and POLLHUP). 2007-01-01 Bruno Haible * modules/lchmod (Include): Require lchmod.h, not lchown.h. 2007-01-03 Jim Meyering * modules/fts-lgpl (Depends-on): Add i-ring. Reported by Bruno Haible. 2007-01-02 Bruno Haible * modules/settime (Include): Require timespec.h. * modules/nanosleep (Include): Likewise. 2007-01-01 Bruno Haible * gnulib-tool (func_emit_copyright_notice): Bump year. (func_get_autoconf_snippet): Emit a GNULIB_ macro. 2007-01-01 Bruno Haible Improve support for OpenBSD. * build-aux/config.rpath (libname_spec): Export. (library_names_spec): New variable. Export. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Extract libname_spec and library_names_spec from the config.rpath output. Locate shared library through the name pattern in library_names_spec. 2007-01-01 Eric Blake * lib/version-etc.c (COPYRIGHT_YEAR): Bump for new year. 2006-12-30 Paul Eggert * gnulib-tool (SORT): Remove, since we no longer assume GNU sort. Rewrite so as not to assume GNU sort or "tail -1". Also, don't assume the C locale, and avoid an "eval" that could cause trouble. Problem with SORT reported by Bob Proulx. * lib/getpagesize.h (getpagesize) [defined __amigaos4__]: Define. Trivial patch from Henning Nielsen Lund, originally sent to bug-grep@gnu.org today. 2006-12-29 Paul Eggert * lib/acl.h: Include sys/types.h and sys/stat.h, for mode_t and struct stat. Problem reported by Henning Nielsen Lund. * lib/acl.c: Include acl.h first, to check interface. Don't bother to include sys/types.h and sys/stat.h again. 2006-12-28 Paul Eggert Import the following change from libc; problem reported by Sven Verdoolaege. 2005-10-13 Ulrich Drepper [BZ #1373] * lib/argp.h: Remove __NTH for __argp_usage inline function. 2006-12-28 Jim Meyering * build-aux/announce-gen: Do not assume that the package builds any of tar.gz, tar.bz2, and .xdelta files. Suggestion from Simon Josefsson. 2006-12-28 Simon Josefsson * modules/announce-gen: New file. 2006-12-27 Paul Eggert * lib/mbchar.h: Just include ; the wctype module handles its gotchas now. * lib/mbswidth.c: Likewise. * lib/wcwidth.h: Likewise. * m4/mbchar.m4 (gl_MBCHAR): Don't bother checking for wctype.h and iswcntrl; the wctype module does this stuff now. * m4/mbswidth.m4 (gl_MBSWIDTH): Likewise. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise. * modules/mbchar (Depends-on): Add wctype. * modules/mbswidth (Depends-on): Likewise. * modules/wcwidth (Depends-on): Likewise. 2006-12-27 Eric Blake * lib/fnmatch.c: Reinstate inclusion of , since this module uses more than what is required to provide. 2006-12-26 Eric Blake * gnulib-tool (sed_extract_prog): Avoid space-tab. 2006-12-26 Eric Blake * modules/absolute-header: New module. * modules/fcntl (Depends-on): Depend on it. * modules/inttypes (Depends-on): Likewise. * modules/stdint (Depends-on): Likewise. * modules/sys_stat (Depends-on): Likewise. * modules/wctype (Depends-on): Likewise. * MODULES.html.sh (Support for building libraries and executables): Document it. 2006-12-25 Paul Eggert * gnulib-tool (SED): Remove, undoing previous change. The problem was that it broke coreutils on Solaris, because "sed --posix" leaked into a makefile. (sed): New alias, if 'alias' and GNU sed. 2006-12-24 Jim Meyering Work around an fchownat bug in glibc-2.4: http://lists.ubuntu.com/archives/ubuntu-users/2006-September/093218.html This bug would cause "chown -RP ... DIR" to follow symlinks in DIR, in spite of the -P option. * m4/openat.m4 (gl_FUNC_FCHOWNAT, gl_FUNC_FCHOWNAT_DEREF_BUG): New macros. (gl_PREREQ_OPENAT): Require gl_FUNC_FCHOWNAT. * modules/openat (Files): Add lib/fchownat.c. * lib/openat.c (fchownat): Don't define here. Move to... * lib/fchownat.c: ...this new file. 2006-12-23 Paul Eggert Fix bug reported by Bruno Haible in where quotearg.c didn't compile on Mac OS X 10.2 because it lacks and wint_t. * lib/wctype_.h (__wctype_wint_t): New type. Include , , only if HAVE_WINT_T. (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph): (iswlower, iswprint, iswpunct, iswspace, iswupper, ixwxdigit): Arg is now of type __wctype_wint_t, not wint_t. * m4/wctype.m4 (gl_WCTYPE_H): Require gt_TYPE_WINT_T, and substitute HAVE_WINT_T. * modules/wctype (Files): Add m4/wint_t.m4. (wctype.h): Substitute HAVE_WINT_T. 2006-12-23 Bruno Haible * lib/safe-read.h [C++]: Wrap declarations in extern "C". 2006-12-23 Bruno Haible * lib/canonicalize-lgpl.c (__realpath): Test HAVE_READLINK instead of S_ISLNK. Needed because gnulib's sys/stat.h replacement defines S_ISLNK on mingw. 2006-12-22 Bruno Haible * lib/copy-file.c: Include acl.h. (copy_file_preserving) [USE_ACL]: Use copy_acl instead of chmod. Close the file descriptors only after being done with copy_acl. * modules/copy-file (Depends-on): Add acl. 2006-12-22 Bruno Haible * gnulib-tool (SED): New variable. Use $SED instead of sed everywhere. 2006-12-22 Bruno Haible * modules/no-c++: New file. * m4/no-c++.m4: New file. * MODULES.html.sh (Support for building libraries and executables): Add no-c++. 2006-12-22 Paul Eggert * m4/mktime.m4 (AC_FUNC_MKTIME): Sync from Autoconf. Include , and use its INT_MAX to rewrite the j loop so that it does not overflow 'int'. Problem reported by Ralf Wildenhues in . Play it safe by shifting left by 1 rather than multiplying by 2, as GCC is less likely to optimize this away when the value is signed (when it assumes overflow leads to undefined behavior). Also, don't assume time_t uses two's complement. 2006-12-21 Paul Eggert * MODULES.html.sh: New module wctype. * lib/wctype_.h, m4/wctype.m4, modules/wctype: New files. * lib/fnmatch.c: Don't bother to include before , since the new wctype module should fix this. * lib/quotearg.c: Include unconditionally, since the wctype module should arrange for it. * lib/regex_internal.h: Likewise. * m4/quotearg.m4 (gl_QUOTEARG): Don't check for wctype.h or iswprint, since the wctype module should handle this now. * m4/regex.m4 (gl_PREREQ_REGEX): Don't check for wctype.h. * modules/fnmatch (Depends-on): Add wctype. * modules/quotearg (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. 2006-12-19 Bruno Haible * lib/strdup.h [C++]: Wrap definitions in extern "C". Suggested by Lorenzo Bettini . 2006-12-19 Ralf Wildenhues * modules/savewd (Depends-on): Fix dependency on fcntl. 2006-12-18 Paul Eggert * m4/stdint.m4 (gl_STDINT_H): Set STDINT_H to empty if stdint.h conforms to C99, rather than relying on the user's environment setting of STDINT_H. 2006-12-18 Paul Eggert and Eric Blake * lib/dirname.h (DOUBLE_SLASH_IS_DISTINCT_ROOT): Default to 0, not 1. This is more consistent with the other defines here. * m4/double-slash-root.m4 (gl_DOUBLE_SLASH_ROOT): Port to z/OS. Problem reported by Paul Gilmartin. Change local vars to use gl_ prefix rather than ac_. Don't define DOUBLE_SLASH_IS_DISTINCT_ROOT to 0, for consistency with other defines. * modules/double-slash-root: New module. * modules/dirname (Files): Remove m4/double-slash-root.m4. (Depends-on): Add double-slash-root. * MODULES.html.sh (File system functions): Mention new module. 2006-12-14 Paul Eggert * lib/yesno.c [!ENABLE_NLS]: Don't include getline.h. (yesno) [!ENABLE_NLS]: Don't invoke getline or rpmatch. This is for the benefit of gzip, which doesn't do i18n. 2006-12-12 Jim Meyering * m4/acl.m4 (gl_ACL_GET_FILE): Fix logic error. Reported by Andreas Schwab . 2006-12-12 Bruno Haible Merge these changes. 2006-09-05 Bruno Haible * lib/iconvme.c (iconv_string): No need to save and restore errno when iconv_alloc succeeded. (iconv_alloc): Don't assume that malloc() or realloc(), when failing, sets errno to ENOMEM. (malloc on GNU/kFreeBSD doesn't.) No need to test for " && dest " at the end - dest is always != NULL there. Call iconv with 4xNULL arguments initially, to reset the state. Call iconv with 2xNULL arguments, also to flush the state storage. Handle the IRIX iconv behaviour. Realloc the final result, to throw away unused memory. 2006-12-11 Paul Eggert * m4/openat.m4 (gl_FUNC_OPENAT): Don't compile mkdirat and fchmodat unconditionally, since glibc 2.4 has them. Problem reported by Arkadiusz Miskiewicz. 2006-12-10 Bruno Haible * gnulib-tool (func_import): Show the include files only for those modules that are copied and specified. Reported by Karl Berry. 2006-12-08 Jim Meyering * build-aux/announce-gen ($VERSION): Don't use of $Revision...$. Instead, use Emacs' time-stamp write hook. Note that the time is UTC. * build-aux/announce-gen: Add two new options, both optional: --bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g., autoconf,automake,bison,gnulib --gnulib-snapshot-date=DATE if gnulib is in the bootstrap tool list, then report this as the snapshot date. If not specified, use the current date/time. If you specify a date here, be sure it's UTC. 2006-12-05 Ralf Wildenhues * tests/test-argp-2.sh: Fix test to match actual output. (func_compare): Fix sed script to be portable. 2006-12-05 Paul Eggert * lib/utimens.c (futimens) [HAVE_BUGGY_NFS_TIME_STAMPS]: Add a workaround for this case. It is not autoconfigured now; offhand it's hard to see how to autoconfigure it. 2006-12-03 Paul Eggert * lib/mkdir-p.c (make_dir_parents): Fix race condition when making a directory that is about to be chowned. Such a directory's initial file permissions should permit the owner only and this should not be changed until after the chown, since the group and other bits would be incorrect if they granted permission before the chown. Fix porting problem for iswctype reported by Georg Schwarz in: http://lists.gnu.org/r/bug-coreutils/2006-12/msg00017.html * lib/fnmatch.c (WIDE_CHAR_SUPPORT): Require HAVE_ISWCTYPE, too. * lib/regex_internal.h (RE_ENABLE_I18N): Likewise. * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for iswctype, too. * m4/regex.m4 (gl_PREREQ_REGEX): Likewise. 2006-12-03 Jim Meyering * lib/fts.c (fts_load): Don't set sp->fts_dev here, since p->fts_statp may not yet be defined. (fts_read): Instead, set it in the caller, once p->fts_statp is sure to be defined, and corresponds to a top-level directory. This bug made du -x fail. Here's the coreutils test case: http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commit;h=ba45154d8e9f Reported by Mike Frysinger. 2006-12-01 Jim Meyering * modules/savewd (Depends-on): Add fcntl_h to avoid self-test build failure due to missing definition of HAVE_WORKING_O_NOFOLLOW. Reported by Simon Josefsson. 2006-11-30 Jim Meyering * m4/warning.m4: Use the all-permissive copyright notice recommended by RMS (rather than LGPL). * m4/vararrays.m4: Likewise. * m4/flexmember.m4: Likewise. 2006-11-29 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Initialize also noinst_LIBRARIES. Augment noinst_LIBRARIES and noinst_LTLIBRARIES using +=. Reported by Simon Josefsson . 2006-11-28 James Youngman * README: Advise users that they might find the bug-gnulib@gnu.org and autotools-announce@gnu.org mailing lists useful. 2006-11-28 Bruno Haible * m4/ptrdiff_max.m4: Remove file. 2006-11-21 Bruno Haible * m4/eoverflow.m4 (gl_EOVERFLOW): Use AC_COMPUTE_INT instead of _AC_COMPUTE_INT. (AC_COMPUTE_INT): Add fallback definition for autoconf < 2.61. * m4/ptrdiff_max.m4 (gl_PTRDIFF_MAX): Use AC_COMPUTE_INT instead of _AC_COMPUTE_INT. (AC_COMPUTE_INT): Add fallback definition for autoconf < 2.61. * m4/size_max.m4 (gl_SIZE_MAX): Use AC_COMPUTE_INT instead of _AC_COMPUTE_INT. (AC_COMPUTE_INT): Add fallback definition for autoconf < 2.61. 2006-11-28 Jim Meyering * lib/regcomp.c (parse_branch): Rename local, exp->expr, to avoid warning from "gcc -Wshadow" about shadowing the builtin. 2006-11-27 Bruno Haible * m4/stdint.m4 (gl_STDINT_BITSIZEOF): Use AC_COMPUTE_INT instead of _AC_COMPUTE_INT. (AC_COMPUTE_INT): Add fallback definition for autoconf < 2.61. 2006-11-27 Bruno Haible Paul Eggert * lib/regex.h (__restrict_arr): Redo logic of #if, for clarity. 2006-11-26 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Initialize also noinst_LTLIBRARIES. 2006-11-27 Paul Eggert Bruno Haible * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Define to 0 if compiling with "gcc -ansi". 2006-11-26 Paul Eggert Fix some incompatibilities with gcc -ansi -pedantic. * lib/regex.h (__restrict_arr): Don't use the [restrict] syntax if compiling pedantically with GCC, unless it's C99 or later. Don't trust sys/cdefs.h's definition of __restrict_arr, either, as it mishandles gcc -ansi -pedantic as well. * lib/regex_internal.h (re_token_t): Don't use enum bitfields if gcc -pedantic. * lib/regexec.c (check_node_accept_bytes): Don't use auto initializers for struct if -pedantic, unless it's C99 or later. 2006-11-25 Nix (tiny change) * m4/fcntl_h.m4 (gl_FCNTL_H): Test the atime, not the mtime. Don't close an fd more than once. Identical atimes indicate success, not failure. 2006-11-22 Robinson Mittmann (tiny change) * lib/sincosl.c (kernel_sinl): Fix typo in threshold. 2006-11-23 Jim Meyering * build-aux/announce-gen: New file. From coreutils. 2006-11-22 Jim Meyering Work around a compile-time error from the HP-UX 11.00 /bin/cc. * lib/fts.c (enum Fts_stat): Give this previously-anon enum a name. (fts_read): Use a temporary to narrow the overused st_size member before using it in a switch statement. Reported by Matthew Woehlke. * m4/clock_time.m4 (gl_CLOCK_TIME): Quote AC_SUBST argument. * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Likewise. 2006-11-20 Bruno Haible * gettext.m4 (AM_GNU_GETTEXT): Revert 2005-07-28 patch: Use changequote instead of pairs of brackets. Reported by Andreas Schwab . 2006-11-21 Jim Meyering * lib/fts.c (fts_safe_changedir): Move a declaration "up", so as to remain compatible with older compilers. Patch from Michael Deutschmann. 2006-11-20 Paul Eggert * MODULES.html.sh (File system functions): Add openat. * lib/openat.h (rpl_fstatat): New macro, if [HAVE_OPENAT && ! LSTAT_FOLLOWS_SLASHED_SYMLINK. (fstatat): Define to rpl_fstatat under the same conditions, unless COMPILING_FSTATAT. * m4/openat.m4 (gl_FUNC_OPENAT): Compile fstatat.c too, if fstatat seems to have the bug. * lib/fstatat.c: New file. * modules/openat (Files): Add it. 2006-11-20 Bruno Haible * Makefile: New file. 2006-11-20 Jim Meyering The beginnings of syntax-related checks for gnulib. * lib/Makefile: New file. * lib/t-idcache: New script. Ensure that the two halves of idcache.c stay in sync. * lib/idcache.c: Adjust comments in user- and group- portions to be more accurate, and to be consistent with one another. 2006-11-20 Jim Meyering * lib/idcache.c: Restore most of the 2006-11-06 patch, so as to continue using the flexible array member (thus, this module performs half as many malloc calls), with the addition that... (getgroup, getuser): Consistently record a non-match via an empty "name" string, and map an empty string match to a NULL return value. * modules/idcache (Depends-on): Re-add flexmember. * lib/idcache.c (getuser): Remove all uses of the register keyword. (getuidbyname, getgroup, getgidbyname): Likewise. Use cleaner syntax: NULL rather than 0. * lib/idcache.c (getuidbyname, getgidbyname): Return NULL, not 0. 2006-11-20 Paul Eggert * lib/idcache.c: Undo most recent patch, dated 2006-11-06. It mishandled the case where the group was missing. Problem reported by Greg Schafer. * modules/idcache: Likewise. 2006-11-18 Jim Meyering * check-module (%exempt_header): Add exception for some conditionally-included headers. * modules/i-ring (Depends-on): Add verify. (License): Change to LGPL. 2006-11-16 Paul Eggert * modules/getaddrinfo (Depends-on): Remove inttostr; add snprintf. * lib/getaddrinfo.c: Include snprintf.h rather than intprops.h and inttostr.h. Use snprintf rather than uinttostr, so that LGPLed code doesn't depend on GPLed. 2006-11-17 Paul Eggert * modules/inline (License): Change from GPL to LGPL. 2006-11-17 Jim Meyering * modules/d-type (License): Switch to LGPL. 2006-11-15 Bruno Haible * m4/alloca.m4 (gl_FUNC_ALLOCA): Fix the AC_CACHE_CHECK message. 2006-11-15 Eric Blake * m4/allocsa.m4 (gl_ALLOCSA): Don't invoke macro already picked up by the module dependency. 2006-11-15 Yoann Vandoorselaere Bruno Haible * gnulib-tool (func_create_testdir): Add license consistency check. 2006-11-15 Eric Blake * m4/alloca.m4 (gl_FUNC_ALLOCA): Use AC_CACHE_CHECK to avoid a random "(cached)" in configure output. 2006-11-14 Ralf Wildenhues * m4/inttypes.m4 (gl_INTTYPES_H): Use AC_CACHE_CHECK so that the test for conforming inttypes.h is both announced and cached. * MODULES.html.sh (seen_modules, seen_files): New variables. (func_module): Rewrite to use a few less gnulib-tool and sed invocations. Avoid a couple of quadratic algorithms for ... (missed_modules, missed_files): ... these, with ... (func_append, func_tmpdir): ... these new functions, from gnulib-tool. Analogously, install traps for cleanup. * tests/test-gc.c (main): Remove unused variables. * tests/test-read-file.c: Include stdlib.h, for 'free'. 2006-11-14 Paul Eggert * modules/inttostr (License): Change to LGPL. 2006-11-14 Eric Blake * modules/tempname (License): Change to LGPL. 2006-11-14 Eric Blake * doc/functions.texi (Function Portability): *printf functions on Cygwin now understand all POSIX size specifiers. 2006-11-14 Bruno Haible * modules/c-ctype (License): Change to LGPL. 2006-11-12 Bruno Haible * m4/lib-link.m4 (AC_LIB_LINKFLAGS, AC_LIB_HAVE_LINKFLAGS, AC_LIB_LINKFLAGS_BODY): Also set a LIB${NAME}_PREFIX variable. Needed for GNOME libraries, for which the include files are installed in subdirectories of $prefix/include. 2006-11-12 Bruno Haible * m4/lib-link.m4: Require at least autoconf-2.54. (AC_LIB_LINKFLAGS_BODY) [autoconf < 2.61]: Turn dots into the library name to underscores for the --with option. 2006-11-13 Bruno Haible * gnulib-tool (func_create_testdir): Set gl_source_base correctly in the tests directory. Reported by Ralf Wildenhues. 2006-11-13 Bruno Haible * gnulib-tool (func_emit_initmacro_start): Also override AC_LIBSOURCES. (func_emit_initmacro_end): Undo the override here. (func_emit_initmacro_done): Emit a definition for gl_LIBSOURCES. Works around the famous automake error in coreutils. 2006-11-13 Eric Blake * lib/gl_anytree_oset.h (gl_tree_search_atleast): Return the element, not its node. 2006-11-12 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Replace occurrences of '$(top_srcdir)/build-aux/', taking into account the real auxdir. 2006-11-12 Bruno Haible * gnulib-tool: New option --local-symlink. (func_usage): Document it. (lsymbolic): New variable. (func_import, func_create_testdir): If --symlink was not specified, test whether --local-symlink was specified and the file comes from the local_gnulib_dir. 2006-11-12 Bruno Haible * gnulib-tool (func_ln): New function. (func_ln_if_changed, func_create_testdir): Use it instead of "ln -s". 2006-11-12 Bruno Haible Finish support for source files in subdirectories. * gnulib-tool (func_emit_lib_Makefile_am): If some of the source files are in subdirectories, set uses_subdirs and add 'subdir-objects' to AUTOMAKE_OPTIONS. (func_import, func_create_testdir): Invoke AM_PROG_CC_C_O in this case. 2006-11-12 Bruno Haible * gnulib-tool (func_get_automake_snippet): Synthesize also an EXTRA_lib_SOURCES augmentation. (func_emit_lib_Makefile_am): Initialize EXTRA_lib..._SOURCES to empty. 2006-11-12 Jim Meyering Make fts (in FTS_CWDFD mode) more efficient by caching a few open file descriptors. This also averts a failure on systems with native openat support when a traversed directory lacks "x" access. * lib/fts_.h: Include "i-ring.h" (struct FTS) [fts_fd_ring]: New member. * lib/fts.c (RESTORE_INITIAL_CWD): Also call fd_ring_clear. (FCHDIR): Add parentheses. (fd_ring_check, fd_ring_print) [!FTS_DEBUG]: Define away. (cwd_advance_fd): Add a 3rd parameter. Adjust all callers. When descending, rather than simply closing the previous fts_cwd_fd value, push that file descriptor onto the ring. (same_fd, fd_ring_print, fd_ring_check) [FTS_DEBUG]: New functions. (fts_open): Initialize the new fd_ring member. (fts_close): Clear the ring. (fts_safe_changedir): When possible, use our new fd_ring to skip the diropen and fstat and dev/ino comparison that would normally accompany a virtual `chdir ("..")'. * modules/fts (Depends-on): Add i-ring. * modules/i-ring: New module. * lib/i-ring.c, lib/i-ring.h, lib/i-ring-test.c: New files. * m4/i-ring.m4: New file. 2006-11-12 Ralf Wildenhues * gnulib-tool (func_create_testdir): Fix replacement of `build-aux' in configure.ac. Run autotools in gltests subdirectory. (func_create_testdir, func_create_megatestdir, test): There is no need for '--force' in most autotool invocations in a new tree. Actually fail the whole test if any of the tools, or the configure or make stages fail. Sync from Automake. * build-aux/gnupload: Revert last change. Add pointer to upload instructions of the GNU Maintenance Instructions. Suggestion by Karl Berry. 2006-11-10 Jim Meyering * lib/fts.c [FTS_DEBUG]: Don't try to print a pointer via %s. 2006-11-09 Paul Eggert * lib/gettext.h (dgettext, dcgettext, ngettext) [! ENABLE_NLS]: (dngettext, dcngettext, bindtextdomain) [! ENABLE_NLS]: (bind_textdomain_codeset) [! ENABLE_NLS]: Evaluate all the arguments. That way, callers get compatible behavior if the arguments have side effects. Also, it avoids some GCC diagnostics in some cases; Joel E. Denny reported problems when Bison was configured with --enable-gcc-warnigs. 2006-11-10 Jim Meyering * m4/inline.m4 (gl_INLINE): Check with the compiler, not cpp, so that relevant options in CFLAGS (like -O, -fno-inline) are taken into account. 2006-11-10 Jim Meyering * modules/inline: New file/module. * modules/xalloc (Files): Remove m4/inline.m4. (Depends-on): Add inline, instead. * modules/oset: Likewise. * modules/list: Likewise. 2006-11-09 Paul Eggert * lib/stdint_.h (uintmax_t): Fix typo: int64_t -> uint64_t. Problem reported by Matthew Woehlke. 2006-11-09 Bruno Haible * lib/tempname.c (gen_tempname): Remove variant that invokes __gen_tempname. * m4/tempname.m4 (gl_FUNC_GEN_TEMPNAME): Don't test for __gen_tempname. 2006-11-08 Bruno Haible * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Set ac_cv_type_long_long_int to 'yes' instead of 'cross-compiling'. 2006-11-08 Paul Eggert * lib/quotearg.h (quotearg_free): New decl. * lib/quotearg.c (quotearg_free): New function. (slot0, nslots, slotvec0, slotvec): Now file-scope so that quotearg_free can get at them. 2006-11-08 Ralf Wildenhues Sync from Automake. * build-aux/gnupload: Add missing 'gnu' to example URL. Report by Karl Berry. 2006-11-08 Bruno Haible * m4/inline.m4 (gl_INLINE): Also test __NO_INLINE__. Suggested by Paul Eggert. 2006-11-08 Jim Meyering * lib/fts.c [!_LGPL_PACKAGE]: Don't include fcntl--.h twice. It's already included if !_LIBC. (fts_safe_changedir): Add a comment. 2006-11-07 Paul Eggert * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Detect bug in Tandem NonStop Kernel (OSS) cc -O circa 2004, reported by Matthew Woehlke. * lib/xalloc.h (XMALLOC, XNMALLOC, XZALLOC, XCALLOC): Move definitions up, to avoid colliding with change below. (static_inline) [HAVE_INLINE]: New macro. (xnmalloc, xnrealloc, x2nrealloc, xcharalloc): Provide extern decls when !HAVE_INLINE. Do not define unless static_inline is defined, either by us or by xmalloc.c. Use static_inline rather than static inline. (XCALLOC): Optimize sizeof(T) = 1 case. * lib/xmalloc.c (static_inline) [!HAVE_INLINE]: New macro. 2006-11-07 Bruno Haible * lib/xalloc.h (XNMALLOC): Restore optimization of sizeof(T) = 1 case. * m4/xalloc.m4 (gl_PREREQ_XALLOC): Require gl_INLINE instead of AC_C_INLINE. * modules/xalloc (Files): Add m4/inline.m4. 2006-11-07 Ralf Wildenhues * README: Fix typo. * doc/gnulib.texi (Miscellaneous Notes): Likewise, rename... (Miscellanous Notes): ...from this. 2006-11-07 Paul Eggert * m4/flexmember.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER): Mention that offsetof should be used instead of sizeof. From Bruno Haible. 2006-11-07 Bruno Haible * lib/w32spawn.h (prepare_spawn): Use XNMALLOC instead of xmalloc. 2006-11-06 Paul Eggert Simplify xmalloc expressions. Add overflow check in xmalloc arguments. * lib/gl_anyavltree_list2.h (create_subtree_with_contents): (gl_tree_create, gl_tree_add_first, gl_tree_add_last): (gl_tree_add_before, gl_tree_add_after): Use XMALLOC instead of xmalloc, and XCALLOC instead of xzalloc. * lib/gl_anyhash_list2.h (hash_resize): Likewise. * lib/gl_anylinked_list2.h (gl_linked_create_empty, gl_linked_create): (gl_linked_add_first, gl_linked_add_last, gl_linked_add_before): (gl_linked_add_after, gl_linked_add_at): Likewise. * lib/gl_anyrbtree_list2.h (create_subtree_with_contents): (gl_tree_create, gl_tree_add_first, gl_tree_add_last): (gl_tree_add_before, gl_tree_add_after): Likewise. * lib/gl_anytree_list2.h (gl_tree_create_empty): Likewise. * lib/gl_anytree_oset.h (gl_tree_create_empty): Likewise. * lib/gl_anytreehash_list1.h (add_to_bucket): Likewise. 2006-11-06 Ralf Wildenhues * lib/gl_oset.h: Use C comment style, not C++ comment style. 2006-11-06 Bruno Haible * m4/inline.m4: New file. * m4/gl_list.m4 (gl_LIST): Require gl_INLINE. * modules/list (Files): Add m4/inline.m4. * modules/oset (Files): Likewise. 2006-11-06 Paul Eggert * lib/idcache.c: Include , for offsetof. (struct userid.name): Change from char * to a flexible array member. All uses changed. * modules/idcache (Depends-on): Add flexmember. * MODULES.html.sh (Core language properties): New module flexmember. * modules/flexmember, m4/flexmember.m4: New files. * lib/xalloc.h (xnmalloc, xnrealloc, x2nrealloc): Now static inline functions that are identical with the old xnmalloc_inline, xnrealloc_inline, x2nrealloc_inline of lib/xmalloc.c. This is so that we can avoid some unnecessary integer multiplications and divisions in the common case where the element size is known at compile time. (XNMALLOC) [HAVE_INLINE]: Remove special case, which is no longer needed. (xnboundedmalloc): Remove. (XMALLOC, XNMALLOC, XZALLOC, XCALLOC): Use lower-case letters for arguments, for consistency with rest of this header. (xcharalloc): Rewrite using XNMALLOC. * lib/xmalloc.c (xnmalloc_inline, xnmalloc, xnrealloc_inline): (xnrealloc, x2nrealloc_inline, x2nrealloc): Remove. The *_inline versions have been moved to lib/xalloc.h and renamed to be the non-*_inline versions. (xmalloc, xrealloc): Implement without reference to the xnmalloc and xnrealloc functions, since those functions are now inline and now call us. (x2realloc): Invoke x2realloc, not x2realloc_inline, to accommodate renaming described above. * m4/xalloc.m4 (gl_PREREQ_XMALLOC): Remove AC_C_INLINE since xmalloc.c no longer uses inline directly. gl_PREREQ_XALLOC now captures the dependency in AC_C_INLINE. New module canonicalize-lgpl, proposed by Charles Wilson in with a few small changes afterwards. * MODULES.html.sh (File system functions): New module canonicalize-lgpl. * lib/canonicalize.h: Add comments for canonicalize_filename_mode and canonicalize_file_name. * lib/canonicalize-lgpl.c, m4/canonicalize-lgpl.m4: * modules/canonicalize-lgpl: New files. 2006-11-05 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Create directories also for files in subdirectories of lib/. 2006-11-05 Bruno Haible * lib/gl_array_list.c (gl_array_iterator_next): Make pointer decrement ANSI C compliant. 2006-11-03 Bruno Haible Simplify xmalloc expressions. Add overflow check in xmalloc arguments. * m4/xalloc.m4 (gl_PREREQ_XALLOC): Require AC_C_INLINE. * lib/xalloc.h (XMALLOC, XNMALLOC, XZALLOC, XCALLOC): New macros. (xnboundedmalloc): New inline function. * lib/classpath.c (new_classpath): Use XNMALLOC instead of xmalloc. * lib/clean-temp.c (create_temp_dir): Use XNMALLOC, XMALLOC instead of xmalloc. * lib/concatpath.c (concatenated_pathname): Use XNMALLOC instead of xmalloc. * lib/fatal-signal.c (at_fatal_signal): Use XNMALLOC instead of xmalloc. * lib/findprog.c (find_in_path): Use XNMALLOC instead of xmalloc. * lib/gl_array_list.c (gl_array_create_empty): Use XMALLOC instead of xmalloc. (gl_array_create): Use XNMALLOC, XMALLOC instead of xmalloc. * lib/gl_array_oset.c (gl_array_create_empty): Use XNMALLOC instead of xmalloc. * lib/gl_avltree_oset.c (gl_tree_add_first, gl_tree_add_before, gl_tree_add_after): Use XMALLOC instead of xmalloc. * lib/gl_carray_list.c (gl_carray_create_empty): Use XMALLOC instead of xmalloc. (gl_carray_create): Use XNMALLOC, XMALLOC instead of xmalloc. * lib/gl_rbtree_oset.c (gl_tree_add_first, gl_tree_add_before, gl_tree_add_after): Use XMALLOC instead of xmalloc. * lib/gl_sublist.c (gl_sublist_create): Use XMALLOC instead of xmalloc. * lib/pagealign_alloc.c (new_memnode): Use XMALLOC instead of xmalloc. * lib/sh-quote.c (shell_quote_argv): Use XNMALLOC instead of xmalloc. * lib/xvasprintf.c (xstrcat): Use XNMALLOC instead of xmalloc. 2006-11-03 Bruno Haible * lib/c-ctype.h [C++]: Define functions without name mangling. * lib/fwriteerror.h [C++]: Likewise. * lib/gcd.h [C++]: Likewise. * lib/linebreak.h [C++]: Likewise. 2006-11-03 Paul Eggert * lib/canonicalize.h: (canonicalize_mode_t, CAN_EXISTING): (CAN_ALL_BUT_LAST, CAN_MISSING, canonicalize_filename_mode): Define only if PROVIDE_CANONICALIZE_FILENAME_MODE is defined. * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME): Check for functions and headers just once. Check for declaration of canonicalize_file_name. Define PROVIDE_CANONICALIZE_FILENAME_MODE. 2006-11-02 Charles Wilson * gnulib-tool (func_import): Fix typo in actioncmd. 2006-11-02 Bruno Haible * gnulib-tool (func_get_automake_snippet): Interpret a backslash- newline sequence in the Makefile.am snippet as a space, like "make" does. Reported by Roger Persson . 2006-11-01 Bruno Haible * m4/strcase.m4 (gl_FUNC_STRNCASECMP): Check whether strncasecmp is already declared in . * lib/strcase.h (strncasecmp): Don't declare it if yes. 2006-11-01 Bruno Haible * m4/strcase.m4 (gl_FUNC_STRCASECMP): Don't define strcasecmp here. * lib/strcase.h: Include . (strcasecmp): Define to rpl_strcasecmp here. 2006-11-01 Bruno Haible * lib/printf-parse.c (PRINTF_PARSE): Cast malloc/realloc results. 2006-11-01 Eric Blake * lib/mkstemp-safer.c (mkstemp_safer): Allow C++ compilation. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Allow C++ configuration. 2006-10-29 Bruno Haible Make it compile in C++ mode. * lib/full-write.c (full_rw): Add a cast. 2006-11-01 Bruno Haible * gnulib-tool (func_get_automake_snippet): Change sed_combine_lines to be POSIX compliant. Reported by Roger Persson . 2006-11-01 Eric Blake * lib/getopt_.h: Fix comments. 2006-10-31 Eric Blake * modules/tmpdir (Depends-on): Add sys_stat. * modules/mkdtemp (Depends-on): Add tempname, drop unistd. * lib/mkdtemp.c (gen_tempname): Remove; tempname covers this. * lib/tmpdir.c (S_ISDIR): Simplify, thanks to sys_stat. * m4/mkdtemp.m4 (gl_PREREQ_MKDTEMP): Simplify, thanks to tempname. 2006-10-31 Paul Eggert Avoid some C++ diagnostics reported by Bruno Haible. * lib/quotearg.c (clone_quoting_options): Use xmemdup rather than xmalloc. (quotearg_alloc): Use xcharalloc rather than xmalloc. (struct slotvec): Move to top level. (quotearg_n_options): Rewrite to avoid xmalloc. * lib/xalloc.h (xcharalloc): New function. * (xrealloc, xnrealloc, x2realloc, x2nrealloc, xmemdup): [defined __cplusplus]: Add function template that provides result type propagation. This part of the change is from Bruno Haible. 2006-10-29 Bruno Haible Make it compile in C++ mode. * lib/striconv.c (mem_cd_iconv): Cast malloc/realloc result. * lib/strnlen1.c (strnlen1): Cast memchr result. * lib/mbchar.h (mb_copy): Rename arguments to 'new_mbc', 'old_mbc'. * lib/clean-temp.c (string_equals, string_hash): Add casts. (create_temp_dir): Rename local variable 'template'. (compile_csharp_using_sscli): Add cast. * lib/fatal-signal.c (at_fatal_signal): Cast xmalloc result. * lib/findprog.c (find_in_path): Likewise. * lib/linebreak.c (mbs_width_linebreaks): Cast malloc result. * lib/wait-process.c (register_slave_subprocess): Likewise. 2006-10-22 Bruno Haible * modules/tsearch: New file. * lib/tsearch.h: New file. * lib/tsearch.c: New file, from glibc-2.5 with small modifications. * m4/tsearch.m4: New file. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add tsearch. 2006-10-29 Eric Blake * lib/arcfour.c: Assume config.h. * lib/arctwo.c: Likewise. * lib/base64.c: Likewise. * lib/check-version.c: Likewise. * lib/crc.c: Likewise. * lib/des.c: Likewise. * lib/gc-gnulib.c: Likewise. * lib/gc-libgcrypt.c: Likewise. * lib/gc-pbkdf2-sha1.c: Likewise. * lib/getaddrinfo.c: Likewise. * lib/getdelim.c: Likewise. * lib/getline.c: Likewise. * lib/hmac-md5.c: Likewise. * lib/hmac-sha1.c: Likewise. * lib/iconvme.c: Likewise. * lib/md2.c: Likewise. * lib/md4.c: Likewise. * lib/memxor.c: Likewise. * lib/read-file.c: Likewise. * lib/readline.c: Likewise. * lib/rijndael-alg-fst.c: Likewise. * lib/rijndael-api-fst.c: Likewise. * lib/xgetdomainname.c: Likewise. 2006-10-28 Eric Blake * lib/xstrndup.c: Assume config.h. 2006-10-27 Paul Eggert Move stat.h-substitute stuff from lib/stat-macros.h to lib/stat_.h. stat-macros.h is now for our own macros, whereas stat_h is for macros in the name space. * lib/stat-macros.h: Remove copyright notice, as this file is now tiny. (STAT_MACROS_H): Remove. (S_IFMT, S_ISBLK, S_ISCHR, S_ISDIR, S_ISFIFO, S_ISLNK, S_ISNAM): (S_ISMPB, S_ISMPC, S_ISNWK, S_ISREG, S_ISSOCK, S_ISDOOR, S_ISPORT): (S_TYPEISMQ, S_TYPEISTMO, S_TYPEISSEM, S_TYPEISSHM, S_ISCTG, S_ISOFD): (S_ISOFL, S_ISWHT, S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IRGRP): (S_IROTH, S_IWUSR, S_IWGRP, S_IWOTH, S_IXUSR, S_IXGRP, S_IXOTH): (S_IRWXU, S_IRWXG, S_IRWXO, S_IXUGO, S_IRWXUGO): Move these macros to ... * lib/stat_.h: here. Don't include stat-macros.h. * lib/canonicalize.c: Don't include stat-macros.h. * lib/chown.c: Likewise. * lib/euidaccess.c: Likewise. * lib/file-type.c: Likewise. * lib/filemode.c: Likewise. * lib/glob.c: Likewise. * lib/isapipe.c: Likewise. * lib/lchown.c: Likewise. * lib/lstat.c: Likewise. * lib/mkdir-p.c: Likewise. * lib/rmdir.c: Likewise. * m4/lchown.m4 (gl_FUNC_LCHOWN): Don't require gl_STAT_MACROS. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Don't check for io.h unless mkdir isn't declared, to speed up 'configure'. Always create sys/stat.h, since it's unlikely any real sys/stat.h would define all the S_* symbols. * modules/canonicalize (Depends-on): Depend on sys_stat, not stat-macros. * modules/chown: Likewise. * modules/euidaccess: Likewise. * modules/filemode: Likewise. * modules/file-type: Likewise. * modules/glob: Likewise. * modules/isapipe: Likewise. * modules/lchown: Likewise. * modules/lstat: Likewise. * modules/mkancesdirs: Likewise. * modules/rmdir: Likewise. * modules/mkdir-p (Depends-on): Also depend on sys_stat. * modules/modechange: Likewise. * modules/stat-macros (Files): Remove m4/stat-macros.m4. (configure.ac): Remove gl_STAT_MACROS. * modules/sys_stat (Depends-on): Remove stat-macros. 2006-10-27 Bruno Haible * m4/signed.m4: Remove file. * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_ARGS_: Remove bh_C_SIGNED invocation. * modules/vasnprintf (Files): Remove m4/signed.m4. 2006-10-27 Bruno Haible Update to GNU gettext 0.16. * modules/gettext (Files): Add m4/intl.m4, m4/intldir.m4. Remove m4/inttypes-h.m4, m4/signed.m4. * m4/gettext.m4: Update to GNU gettext 0.16. * m4/intl.m4: New file, from GNU gettext. * m4/intldir.m4: New file, from GNU gettext. * config/srclist.txt: Update 2006-10-27 Eric Blake * MODULES.html.sh: Document tempname. * modules/mkstemp (Depends-on): Add tempname, and drop transitive dependencies. (Files): Move lib/tempname.c... * modules/tempname: ...to this new module. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Remove tempname checks. (gl_PREREQ_TEMPNAME): Move... * m4/tempname.m4: ...to this new file. * lib/mkstemp.c (includes) [!_LIBC]: Use tempname.h. * modules/sys_stat (Depends-on): Add stat-macros. * lib/stat_.h (includes): Pick up stat macros. * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Replace if stat macros are broken. * lib/tempname.c (includes): No need to include "stat-macros.h". (__gen_tempname) [!_LIBC]: Expose as gen_tempname. (direxists, __path_search) [!_LIBC]: Don't compile these in gnulib; the tmpdir module covers that. * lib/tempname.h: New file. 2006-10-26 Paul Eggert * COPYING: Explain how gnulib-tool converts licence headers. Almost all wording by Eric Blake. 2006-10-25 Paul Eggert * lib/mbchar.h (is_basic_table): Make read-only. * lib/mbchar.c (is_basic_table): Likewise. Reported by John Darrington. 2006-10-25 Bruno Haible * lib/progname.h (set_program_name): Undefine before defining. 2006-10-25 Bruno Haible * lib/gettext.h (_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS): Define to false for non-gcc C++ compilers. Reported by Nelson H. F. Beebe . 2006-10-24 Bruno Haible * lib/striconv.c (mem_cd_iconv, str_cd_iconv): Treat all non-GNU iconv implementations like Irix iconv. 2006-10-24 Paul Eggert * modules/vararrays: New file. * m4/vararrays.m4: New file, taken from diffutils. * MODULES.html.sh: New module vararrays. 2006-10-24 Karl Berry * doc/gnulib-intro.texi: --- instead of --; non-naive naive. Don't call GNU Unix. 2006-10-24 Ralf Wildenhues * users.txt: Add Libtool. Sync from Libtool: 2006-10-24 Paul Eggert * lib/argz.c: Remove check for HAVE_CONFIG_H, to conform to gnulib's policy of including config.h unconditionally. 2006-10-24 Bruno Haible * modules/wcwidth (Files): Add m4/wint_t.m4. * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Require gt_TYPE_WINT_T. * lib/wcwidth.h (iswprint): Use 'int' if 'wint_t' is not defined. 2006-10-24 Paul Eggert * lib/getdate.y (yyerror): Make the arguments pointer-to-const, to pacify GCC with some -W flags enabled. Problem reported by Bruno Haible. 2006-10-24 Jim Meyering * MODULES.html.sh: Remove uinttostr. It's not a module. Reported by Karl Berry. 2006-10-23 Bruno Haible * lib/fts.c (fts_build): Move variable declaration, for C89 compliance. 2006-10-24 Bruno Haible * lib/gl_list.h: Use C comment style, not C++ comment style. 2006-10-23 Eric Blake * lib/getaddrinfo.c (includes): Add missing include. 2006-10-23 Bruno Haible Paul Eggert Ability to rename obstack_free. * lib/obstack.h (__obstack_free): New macro. Declare instead of obstack_free. (obstack_free): Invoke the __obstack_free macro. * lib/obstack.c (obstack_free): Use __obstack_free macro. 2006-10-23 Bruno Haible Paul Eggert * lib/argp.h (argp_parse, __argp_parse): Comment out the identifiers __argc, __argv from the declaration. (They are defined as macros on mingw.) 2006-10-22 Bruno Haible * doc/gnulib-intro.texi: New file. * doc/gnulib.texi: Include it. 2006-10-21 Bruno Haible * doc/gnulib.texi: Split the chapter "Gnulib" into 3 chapters "Introduction", "Miscellanous Notes", "Particular Modules". 2006-10-21 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Change mostlyclean-local rule to avoid sh syntax error from bash versions 2.00..2.05 when $(MOSTLYCLEANDIRS) is empty. 2006-10-23 Jim Meyering * lib/getaddrinfo.c (getnameinfo): Use new lightweight uinttostr, in place of snprintf. * modules/inttostr (Files): Add lib/uinttostr.c. * lib/uinttostr.c (inttostr): New file/function. * lib/inttostr.h (uinttostr): Declare. * m4/inttostr.m4: Add AC_LIBOBJ([uinttostr]). * MODULES.html.sh (Numeric conversion functions ): Add uinttostr. * modules/getaddrinfo (Depends-on): Remove snprintf. Add inttostr. 2006-10-21 Paul Eggert * lib/canonicalize.c (ELOOP): Define if not already defined. Problem reported by Bruno Haible in . 2006-10-21 Paul Eggert * lib/stdint_.h [defined _AIX]: Don't include . Problem reported by Perry Smith and Ville Laurikari. * lib/getndelim2.c (SSIZE_MAX): Use same defn that getdelim.c uses. 2006-10-19 Bruno Haible * lib/getndelim2.c (SSIZE_MAX): Provide fallback definition. Needed for mingw. 2006-10-19 Bruno Haible * lib/openat-priv.h (EOPNOTSUPP): Provide fallback definition. Needed for mingw. 2006-10-19 Bruno Haible * m4/size_max.m4 (gl_SIZE_MAX): Cache the result. 2006-10-19 Bruno Haible * m4/allocsa.m4 (gl_ALLOCSA): Invoke gl_FUNC_ALLOCA, don't AC_REQUIRE it. 2006-10-19 Bruno Haible * m4/alloca.m4 (gl_FUNC_ALLOCA): Cache the result of the AC_EGREP_CPP invocation. 2006-10-19 Bruno Haible * gnulib-tool (func_create_testdir): Don't include ftruncate and mountlist by default. 2006-10-16 Bruno Haible * lib/c-strstr.c: Include c-strstr.h. 2006-10-18 Charles Wilson * gnulib-tool: Don't clobber $sourcebase when $local_gnulib_dir ends in a slash. 2006-10-18 Bruno Haible * lib/lock.h [C++]: Wrap definitions in extern "C". 2006-10-18 Bruno Haible * gnulib-tool (func_emit_initmacro_end): Remove duplicates from the gl_LIBOBJS list. 2006-10-18 Bruno Haible * lib/findprog.c (find_in_path): Avoid "gcc -Wwrite-strings" warning. 2006-10-19 Paul Eggert * lib/xstrtol.h: Include gettext.h. (_STRTOL_ERROR): Wrap English-language formats inside gettext. Problem reported by Eric Blake. * modules/xstrtol (Depends-on): Add gettext-h. 2006-10-19 Paul Eggert (tiny change) * lib/strftime.c (advance): New macro. (add): Use it to avoid adding 0 to a FILE *. FILE can be an incomplete type, so you can't add 0 to it. Problem and patch reported by Eelco Dolstra for dietlibc. 2006-10-18 Jim Meyering * lib/readutmp.c (desirable_utmp_entry): Use "bool" as the type for a local, and rename it: s/up/user_proc/. 2006-10-18 Sergey Poznyakoff * lib/readutmp.c (desirable_utmp_entry): Implement new flag: READ_UTMP_USER_PROCESS. * lib/readutmp.h (READ_UTMP_USER_PROCESS): New flag 2006-10-17 Paul Eggert * lib/localcharset.c: Do not check HAVE_SETLOCALE. * m4/localcharset.m4 (gl_LOCALCHARSET): Don't check for setlocale. 2006-10-17 Eric Blake * lib/sigprocmask.c (sigprocmask): Fix typo. * m4/signalblocking.m4 (gl_PREREQ_SIGPROCMASK): Fix typo. * modules/clean-temp (Makefile.am): Don't add to make output... (configure.ac): ...instead define SIGNAL_SAFE_LIST inside config.h. 2006-10-17 Bruno Haible * lib/gettext.h (gettext, ngettext, pgettext, npgettext): Define differently if DEFAULT_TEXT_DOMAIN is set. 2006-10-16 Bruno Haible * lib/clean-temp.c: Include fwriteerror.h. 2006-10-16 Bruno Haible * getndelim2.m4 (gl_GETNDELIM2): Remove 2003-10-23 hack. 2006-10-16 Bruno Haible * m4/signalblocking.m4 (gl_PREREQ_SIGPROCMASK): Also test for sigset_t. * lib/sigprocmask.h: Include . (sigset_t): Use the system's definition if present. 2006-10-17 Eric Blake * lib/xvasprintf.c (includes): Assume config.h. * lib/xasprintf.c (includes): Likewise. 2006-10-16 Paul Eggert * lib/fsusage.c (PROPAGATE_ALL_ONES): Don't assume uintmax_t is at least as wide as intmax_t. 2006-10-16 Alexandre Duret-Lutz (Imported from Automake.) * build-aux/gnupload: Update to version 1.1 of directive file. 2006-10-16 Eric Blake * modules/configmake (Makefile.am): Add pkglibexecdir support, to match Automake 1.10a. 2006-10-14 Bruno Haible * modules/sigprocmask: New file. * lib/sigprocmask.h: New file. * lib/sigprocmask.c: New file. * m4/signalblocking.m4 (gl_SIGNALBLOCKING): Renamed from gt_SIGNALBLOCKING. When not defining HAVE_POSIX_SIGNALBLOCKING, request sigprocmask.o. (gl_PREREQ_SIGPROCMASK): New macro. * modules/fatal-signal (Files): Remove m4/signalblocking.m4. (Depends-on): Add sigprocmask. * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Don't require gt_SIGNALBLOCKING. Test for 'raise' only once. * lib/fatal-signal.c: Include sigprocmask.h. (fatal_signal_set, init_fatal_signal_set, block_fatal_signals, unblock_fatal_signals): Define always. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add sigprocmask. 2006-10-14 Paul Eggert Sync from Automake. * build-aux/install-sh (posix_mkdir): Reject FreeBSD 6.1 mkdir -p -m, which incorrectly sets the mode of an existing destination directory. In some cases the unpatched install-sh could do the equivalent of "chmod 777 /" or "chmod 0 /" on a buggy FreeBSD system. We hope this is rare in practice, but it's clearly worth fixing. Problem reported by Alex Unleashed in . Also, don't bother to check for -m bugs unless we're using -m; suggested by Stepan Kasal. 2006-10-14 Ralf Wildenhues Sync from Automake. * build-aux/depcomp (gcc3): Put dependency extraction flags before the `-c' flag, so they appear at the same position as in %FASTDEP% mode in depend2.am. Fixes build failure for FreeBSD's c89, which ignores unknown options only after the first non-option. Bug report against M4 by Nelson H. F. Beebe. 2006-10-13 Jim Meyering Fix a bug in yesterday's change. * lib/fts.c (fts_open): When using FTS_XDEV|FTS_NOSTAT, p->fts_statp->st_dev would be used uninitialized. Ensures that we always call fts_stat on the very first entry. Miklos Szeredi reported that find -xdev stopped working. 2006-10-12 Bruno Haible * gnulib-tool (func_get_automake_snippet): Append an automatically computed EXTRA_DIST augmentation. * modules/acl (Makefile.am): Remove EXTRA_DIST augmentation. * modules/alloca-opt (Makefile.am): Likewise. * modules/allocsa (Makefile.am): Likewise. * modules/arcfour (Makefile.am): Likewise. * modules/arctwo (Makefile.am): Likewise. * modules/argmatch (Makefile.am): Likewise. * modules/argz (Makefile.am): Likewise. * modules/atexit (Makefile.am): Likewise. * modules/backupfile (Makefile.am): Likewise. * modules/byteswap (Makefile.am): Likewise. * modules/c-strtod (Makefile.am): Likewise. * modules/c-strtold (Makefile.am): Likewise. * modules/calloc (Makefile.am): Likewise. * modules/canon-host (Makefile.am): Likewise. * modules/canonicalize (Makefile.am): Likewise. * modules/chdir-long (Makefile.am): Likewise. * modules/chdir-safer (Makefile.am): Likewise. * modules/check-version (Makefile.am): Likewise. * modules/chown (Makefile.am): Likewise. * modules/cloexec (Makefile.am): Likewise. * modules/close-stream (Makefile.am): Likewise. * modules/closeout (Makefile.am): Likewise. * modules/crc (Makefile.am): Likewise. * modules/csharpexec (Makefile.am): Likewise. * modules/cycle-check (Makefile.am): Likewise. * modules/des (Makefile.am): Likewise. * modules/dev-ino (Makefile.am): Likewise. * modules/dirfd (Makefile.am): Likewise. * modules/dirname (Makefile.am): Likewise. * modules/dup2 (Makefile.am): Likewise. * modules/eealloc (Makefile.am): Likewise. * modules/error (Makefile.am): Likewise. * modules/euidaccess (Makefile.am): Likewise. * modules/exclude (Makefile.am): Likewise. * modules/exitfail (Makefile.am): Likewise. * modules/fcntl-safer (Makefile.am): Likewise. * modules/fcntl (Makefile.am): Likewise. * modules/file-type (Makefile.am): Likewise. * modules/fileblocks (Makefile.am): Likewise. * modules/filemode (Makefile.am): Likewise. * modules/filenamecat (Makefile.am): Likewise. * modules/fnmatch (Makefile.am): Likewise. * modules/fopen-safer (Makefile.am): Likewise. * modules/fpending (Makefile.am): Likewise. * modules/fprintftime (Makefile.am): Likewise. * modules/free (Makefile.am): Likewise. * modules/fsusage (Makefile.am): Likewise. * modules/ftruncate (Makefile.am): Likewise. * modules/fts (Makefile.am): Likewise. * modules/gc-arcfour (Makefile.am): Likewise. * modules/gc-des (Makefile.am): Likewise. * modules/gc-hmac-md5 (Makefile.am): Likewise. * modules/gc-hmac-sha1 (Makefile.am): Likewise. * modules/gc-md4 (Makefile.am): Likewise. * modules/gc-pbkdf2-sha1 (Makefile.am): Likewise. * modules/gc-sha1 (Makefile.am): Likewise. * modules/gc (Makefile.am): Likewise. * modules/getaddrinfo (Makefile.am): Likewise. * modules/getcwd (Makefile.am): Likewise. * modules/getdelim (Makefile.am): Likewise. * modules/getdomainname (Makefile.am): Likewise. * modules/getgroups (Makefile.am): Likewise. * modules/gethostname (Makefile.am): Likewise. * modules/gethrxtime (Makefile.am): Likewise. * modules/getline (Makefile.am): Likewise. * modules/getloadavg (Makefile.am): Likewise. * modules/getlogin_r (Makefile.am): Likewise. * modules/getndelim2 (Makefile.am): Likewise. * modules/getopt (Makefile.am): Likewise. * modules/getpagesize (Makefile.am): Likewise. * modules/getpass-gnu (Makefile.am): Likewise. * modules/getpass (Makefile.am): Likewise. * modules/getsubopt (Makefile.am): Likewise. * modules/gettime (Makefile.am): Likewise. * modules/gettimeofday (Makefile.am): Likewise. * modules/getugroups (Makefile.am): Likewise. * modules/getusershell (Makefile.am): Likewise. * modules/glob (Makefile.am): Likewise. * modules/group-member (Makefile.am): Likewise. * modules/hard-locale (Makefile.am): Likewise. * modules/hash (Makefile.am): Likewise. * modules/hmac-md5 (Makefile.am): Likewise. * modules/hmac-sha1 (Makefile.am): Likewise. * modules/human (Makefile.am): Likewise. * modules/idcache (Makefile.am): Likewise. * modules/imaxabs (Makefile.am): Likewise. * modules/imaxdiv (Makefile.am): Likewise. * modules/inet_ntop (Makefile.am): Likewise. * modules/inet_pton (Makefile.am): Likewise. * modules/intprops (Makefile.am): Likewise. * modules/inttostr (Makefile.am): Likewise. * modules/inttypes (Makefile.am): Likewise. * modules/isapipe (Makefile.am): Likewise. * modules/javaversion (Makefile.am): Likewise. * modules/lchmod (Makefile.am): Likewise. * modules/lchown (Makefile.am): Likewise. * modules/localcharset (Makefile.am): Likewise. * modules/long-options (Makefile.am): Likewise. * modules/lstat (Makefile.am): Likewise. * modules/malloc (Makefile.am): Likewise. * modules/mathl (Makefile.am): Likewise. * modules/mbchar (Makefile.am): Likewise. * modules/md2 (Makefile.am): Likewise. * modules/md4 (Makefile.am): Likewise. * modules/md5 (Makefile.am): Likewise. * modules/memcasecmp (Makefile.am): Likewise. * modules/memchr (Makefile.am): Likewise. * modules/memcmp (Makefile.am): Likewise. * modules/memcoll (Makefile.am): Likewise. * modules/memcpy (Makefile.am): Likewise. * modules/memmem (Makefile.am): Likewise. * modules/memmove (Makefile.am): Likewise. * modules/mempcpy (Makefile.am): Likewise. * modules/memrchr (Makefile.am): Likewise. * modules/memset (Makefile.am): Likewise. * modules/memxor (Makefile.am): Likewise. * modules/mkancesdirs (Makefile.am): Likewise. * modules/mkdir-p (Makefile.am): Likewise. * modules/mkdir (Makefile.am): Likewise. * modules/mkdtemp (Makefile.am): Likewise. * modules/mkstemp (Makefile.am): Likewise. * modules/mktime (Makefile.am): Likewise. * modules/modechange (Makefile.am): Likewise. * modules/mountlist (Makefile.am): Likewise. * modules/nanosleep (Makefile.am): Likewise. * modules/obstack (Makefile.am): Likewise. * modules/openat (Makefile.am): Likewise. * modules/pagealign_alloc (Makefile.am): Likewise. * modules/pathmax (Makefile.am): Likewise. * modules/physmem (Makefile.am): Likewise. * modules/poll (Makefile.am): Likewise. * modules/posixtm (Makefile.am): Likewise. * modules/posixver (Makefile.am): Likewise. * modules/putenv (Makefile.am): Likewise. * modules/quote (Makefile.am): Likewise. * modules/quotearg (Makefile.am): Likewise. * modules/raise (Makefile.am): Likewise. * modules/read-file (Makefile.am): Likewise. * modules/readline (Makefile.am): Likewise. * modules/readlink (Makefile.am): Likewise. * modules/readtokens (Makefile.am): Likewise. * modules/readutmp (Makefile.am): Likewise. * modules/realloc (Makefile.am): Likewise. * modules/regex (Makefile.am): Likewise. * modules/rename-dest-slash (Makefile.am): Likewise. * modules/rename (Makefile.am): Likewise. * modules/rijndael (Makefile.am): Likewise. * modules/rmdir (Makefile.am): Likewise. * modules/rpmatch (Makefile.am): Likewise. * modules/safe-read (Makefile.am): Likewise. * modules/safe-write (Makefile.am): Likewise. * modules/same-inode (Makefile.am): Likewise. * modules/same (Makefile.am): Likewise. * modules/save-cwd (Makefile.am): Likewise. * modules/savedir (Makefile.am): Likewise. * modules/setenv (Makefile.am): Likewise. * modules/settime (Makefile.am): Likewise. * modules/sha1 (Makefile.am): Likewise. * modules/sig2str (Makefile.am): Likewise. * modules/snprintf (Makefile.am): Likewise. * modules/stat-macros (Makefile.am): Likewise. * modules/stat-time (Makefile.am): Likewise. * modules/stdbool (Makefile.am): Likewise. * modules/stdint (Makefile.am): Likewise. * modules/stdlib-safer (Makefile.am): Likewise. * modules/stpcpy (Makefile.am): Likewise. * modules/stpncpy (Makefile.am): Likewise. * modules/strcase (Makefile.am): Likewise. * modules/strcasestr (Makefile.am): Likewise. * modules/strchrnul (Makefile.am): Likewise. * modules/strcspn (Makefile.am): Likewise. * modules/strdup (Makefile.am): Likewise. * modules/strerror (Makefile.am): Likewise. * modules/strftime (Makefile.am): Likewise. * modules/strndup (Makefile.am): Likewise. * modules/strnlen (Makefile.am): Likewise. * modules/strpbrk (Makefile.am): Likewise. * modules/strsep (Makefile.am): Likewise. * modules/strstr (Makefile.am): Likewise. * modules/strtod (Makefile.am): Likewise. * modules/strtoimax (Makefile.am): Likewise. * modules/strtok_r (Makefile.am): Likewise. * modules/strtol (Makefile.am): Likewise. * modules/strtoll (Makefile.am): Likewise. * modules/strtoul (Makefile.am): Likewise. * modules/strtoull (Makefile.am): Likewise. * modules/strtoumax (Makefile.am): Likewise. * modules/strverscmp (Makefile.am): Likewise. * modules/sys_socket (Makefile.am): Likewise. * modules/sys_stat (Makefile.am): Likewise. * modules/sysexits (Makefile.am): Likewise. * modules/time_r (Makefile.am): Likewise. * modules/timegm (Makefile.am): Likewise. * modules/timespec (Makefile.am): Likewise. * modules/tmpfile-safer (Makefile.am): Likewise. * modules/trim (Makefile.am): Likewise. * modules/unistd-safer (Makefile.am): Likewise. * modules/unlinkdir (Makefile.am): Likewise. * modules/unlocked-io (Makefile.am): Likewise. * modules/userspec (Makefile.am): Likewise. * modules/utime (Makefile.am): Likewise. * modules/utimecmp (Makefile.am): Likewise. * modules/utimens (Makefile.am): Likewise. * modules/vasnprintf (Makefile.am): Likewise. * modules/vasprintf (Makefile.am): Likewise. * modules/vsnprintf (Makefile.am): Likewise. * modules/xalloc (Makefile.am): Likewise. * modules/xgetcwd (Makefile.am): Likewise. * modules/xnanosleep (Makefile.am): Likewise. * modules/xreadlink (Makefile.am): Likewise. * modules/xstrtod (Makefile.am): Likewise. * modules/xstrtol (Makefile.am): Likewise. * modules/xstrtold (Makefile.am): Likewise. * modules/yesno (Makefile.am): Likewise. * modules/getdate (Makefile.am): Don't add getdate.h to EXTRA_DIST. 2006-10-12 Paul Eggert * modules/error (Makefile.am): Distribute files through EXTRA_DIST, not lib_SOURCES. 2006-10-12 Eric Blake * modules/error (Makefile.am): Distribute files in /lib. * modules/obstack (Makefile.am): Likewise. 2006-10-12 Bruno Haible * modules/acl (Makefile.am): Distribute all files in lib/ through EXTRA_DIST. * modules/arcfour (Makefile.am): Likewise. * modules/arctwo (Makefile.am): Likewise. * modules/argmatch (Makefile.am): Likewise. * modules/argz (Makefile.am): Likewise. * modules/atexit (Makefile.am): Likewise. * modules/backupfile (Makefile.am): Likewise. * modules/c-strtod (Makefile.am): Likewise. * modules/c-strtold (Makefile.am): Likewise. * modules/calloc (Makefile.am): Likewise. * modules/canon-host (Makefile.am): Likewise. * modules/canonicalize (Makefile.am): Likewise. * modules/chdir-long (Makefile.am): Likewise. * modules/chdir-safer (Makefile.am): Likewise. * modules/check-version (Makefile.am): Likewise. * modules/chown (Makefile.am): Likewise. * modules/cloexec (Makefile.am): Likewise. * modules/close-stream (Makefile.am): Likewise. * modules/closeout (Makefile.am): Likewise. * modules/crc (Makefile.am): Likewise. * modules/cycle-check (Makefile.am): Likewise. * modules/des (Makefile.am): Likewise. * modules/dirfd (Makefile.am): Likewise. * modules/dirname (Makefile.am): Likewise. * modules/dup2 (Makefile.am): Likewise. * modules/euidaccess (Makefile.am): Likewise. * modules/exclude (Makefile.am): Likewise. * modules/exitfail (Makefile.am): Likewise. * modules/fcntl-safer (Makefile.am): Likewise. * modules/file-type (Makefile.am): Likewise. * modules/fileblocks (Makefile.am): Likewise. * modules/filemode (Makefile.am): Likewise. * modules/filenamecat (Makefile.am): Likewise. * modules/fnmatch (Makefile.am): Likewise. * modules/fopen-safer (Makefile.am): Likewise. * modules/fpending (Makefile.am): Likewise. * modules/fprintftime (Makefile.am): Likewise. * modules/free (Makefile.am): Likewise. * modules/fsusage (Makefile.am): Likewise. * modules/ftruncate (Makefile.am): Likewise. * modules/fts (Makefile.am): Likewise. * modules/gc (Makefile.am): Likewise. * modules/gc-pbkdf2-sha1 (Makefile.am): Likewise. * modules/getaddrinfo (Makefile.am): Likewise. * modules/getcwd (Makefile.am): Likewise. * modules/getdelim (Makefile.am): Likewise. * modules/getdomainname (Makefile.am): Likewise. * modules/getgroups (Makefile.am): Likewise. * modules/gethostname (Makefile.am): Likewise. * modules/gethrxtime (Makefile.am): Likewise. * modules/getline (Makefile.am): Likewise. * modules/getloadavg (Makefile.am): Likewise. * modules/getlogin_r (Makefile.am): Likewise. * modules/getopt (Makefile.am): Likewise. * modules/getpass (Makefile.am): Likewise. * modules/getpass-gnu (Makefile.am): Likewise. * modules/getsubopt (Makefile.am): Likewise. * modules/gettime (Makefile.am): Likewise. * modules/gettimeofday (Makefile.am): Likewise. * modules/getugroups (Makefile.am): Likewise. * modules/getusershell (Makefile.am): Likewise. * modules/glob (Makefile.am): Likewise. * modules/group-member (Makefile.am): Likewise. * modules/hard-locale (Makefile.am): Likewise. * modules/hash (Makefile.am): Likewise. * modules/hmac-md5 (Makefile.am): Likewise. * modules/hmac-sha1 (Makefile.am): Likewise. * modules/human (Makefile.am): Likewise. * modules/idcache (Makefile.am): Likewise. * modules/imaxabs (Makefile.am): Likewise. * modules/imaxdiv (Makefile.am): Likewise. * modules/inet_ntop (Makefile.am): Likewise. * modules/inet_pton (Makefile.am): Likewise. * modules/inttostr (Makefile.am): Likewise. * modules/isapipe (Makefile.am): Likewise. * modules/lchown (Makefile.am): Likewise. * modules/long-options (Makefile.am): Likewise. * modules/lstat (Makefile.am): Likewise. * modules/malloc (Makefile.am): Likewise. * modules/mathl (Makefile.am): Likewise. * modules/mbchar (Makefile.am): Likewise. * modules/md2 (Makefile.am): Likewise. * modules/md4 (Makefile.am): Likewise. * modules/md5 (Makefile.am): Likewise. * modules/memcasecmp (Makefile.am): Likewise. * modules/memchr (Makefile.am): Likewise. * modules/memcmp (Makefile.am): Likewise. * modules/memcoll (Makefile.am): Likewise. * modules/memcpy (Makefile.am): Likewise. * modules/memmem (Makefile.am): Likewise. * modules/memmove (Makefile.am): Likewise. * modules/mempcpy (Makefile.am): Likewise. * modules/memrchr (Makefile.am): Likewise. * modules/memset (Makefile.am): Likewise. * modules/memxor (Makefile.am): Likewise. * modules/mkancesdirs (Makefile.am): Likewise. * modules/mkdir (Makefile.am): Likewise. * modules/mkdir-p (Makefile.am): Likewise. * modules/mkdtemp (Makefile.am): Likewise. * modules/mkstemp (Makefile.am): Likewise. * modules/mktime (Makefile.am): Likewise. * modules/modechange (Makefile.am): Likewise. * modules/mountlist (Makefile.am): Likewise. * modules/nanosleep (Makefile.am): Likewise. * modules/openat (Makefile.am): Likewise. * modules/pagealign_alloc (Makefile.am): Likewise. * modules/physmem (Makefile.am): Likewise. * modules/poll (Makefile.am): Likewise. * modules/posixtm (Makefile.am): Likewise. * modules/posixver (Makefile.am): Likewise. * modules/putenv (Makefile.am): Likewise. * modules/quote (Makefile.am): Likewise. * modules/quotearg (Makefile.am): Likewise. * modules/raise (Makefile.am): Likewise. * modules/read-file (Makefile.am): Likewise. * modules/readline (Makefile.am): Likewise. * modules/readlink (Makefile.am): Likewise. * modules/readtokens (Makefile.am): Likewise. * modules/readutmp (Makefile.am): Likewise. * modules/realloc (Makefile.am): Likewise. * modules/regex (Makefile.am): Likewise. * modules/rename (Makefile.am): Likewise. * modules/rename-dest-slash (Makefile.am): Likewise. * modules/rijndael (Makefile.am): Likewise. * modules/rmdir (Makefile.am): Likewise. * modules/rpmatch (Makefile.am): Likewise. * modules/safe-read (Makefile.am): Likewise. * modules/safe-write (Makefile.am): Likewise. * modules/same (Makefile.am): Likewise. * modules/save-cwd (Makefile.am): Likewise. * modules/savedir (Makefile.am): Likewise. * modules/setenv (Makefile.am): Likewise. * modules/settime (Makefile.am): Likewise. * modules/sha1 (Makefile.am): Likewise. * modules/sig2str (Makefile.am): Likewise. * modules/snprintf (Makefile.am): Likewise. * modules/stdlib-safer (Makefile.am): Likewise. * modules/stpcpy (Makefile.am): Likewise. * modules/stpncpy (Makefile.am): Likewise. * modules/strcase (Makefile.am): Likewise. * modules/strcasestr (Makefile.am): Likewise. * modules/strchrnul (Makefile.am): Likewise. * modules/strcspn (Makefile.am): Likewise. * modules/strdup (Makefile.am): Likewise. * modules/strerror (Makefile.am): Likewise. * modules/strftime (Makefile.am): Likewise. * modules/strndup (Makefile.am): Likewise. * modules/strnlen (Makefile.am): Likewise. * modules/strpbrk (Makefile.am): Likewise. * modules/strsep (Makefile.am): Likewise. * modules/strstr (Makefile.am): Likewise. * modules/strtod (Makefile.am): Likewise. * modules/strtoimax (Makefile.am): Likewise. * modules/strtok_r (Makefile.am): Likewise. * modules/strtol (Makefile.am): Likewise. * modules/strtoll (Makefile.am): Likewise. * modules/strtoul (Makefile.am): Likewise. * modules/strtoull (Makefile.am): Likewise. * modules/strtoumax (Makefile.am): Likewise. * modules/strverscmp (Makefile.am): Likewise. * modules/time_r (Makefile.am): Likewise. * modules/timegm (Makefile.am): Likewise. * modules/tmpfile-safer (Makefile.am): Likewise. * modules/unistd-safer (Makefile.am): Likewise. * modules/unlinkdir (Makefile.am): Likewise. * modules/userspec (Makefile.am): Likewise. * modules/utime (Makefile.am): Likewise. * modules/utimecmp (Makefile.am): Likewise. * modules/utimens (Makefile.am): Likewise. * modules/vasnprintf (Makefile.am): Likewise. * modules/vasprintf (Makefile.am): Likewise. * modules/vsnprintf (Makefile.am): Likewise. * modules/xalloc (Makefile.am): Likewise. * modules/xgetcwd (Makefile.am): Likewise. * modules/xnanosleep (Makefile.am): Likewise. * modules/xreadlink (Makefile.am): Likewise. * modules/xstrtod (Makefile.am): Likewise. * modules/xstrtol (Makefile.am): Likewise. * modules/xstrtold (Makefile.am): Likewise. * modules/yesno (Makefile.am): Likewise. 2006-10-12 Jim Meyering * m4/getloadavg.m4: Revert the change below. * m4/getloadavg.m4 (gl_GETLOADAVG): Test for the existence of lib/getloadavg.c using "ls -L", not "test -f". The latter would fail with a symlink, which is what coreutils' ./bootstrap now creates by default. 2006-10-12 Bruno Haible * lib/inttypes_.h (_LONG_LONG_FORMAT_PREFIX): Don't define for MSVC or mingw. (_PRI64_PREFIX, _PRIu64_PREFIX, _SCN64_PREFIX, _SCNu64_PREFIX): Handle MSVC and mingw explicitly. 2006-10-11 Simon Josefsson Bruno Haible Add support for multiple gnulib-tool invocations in the scope of a single configure.ac file. * gnulib-tool (func_emit_lib_Makefile_am): In the _LIBADD variable, use a private [LT]LIBOBJS variant. Define a _DEPENDENCIES variable with the same contents as the _LIBADD variable. (func_emit_initmacro_start, func_emit_initmacro_end, func_emit_initmacro_done): New functions. (func_import, func_create_testdir): Invoke them. Allow the identifiers gl_LIBOBJS and gl_LTLIBOBJS. 2006-10-11 Bruno Haible * gnulib-tool (GETTEXTPATH, AUTOHEADER, AUTOPOINT): New variables. (func_create_testdir): Don't create po/Makefile.am, don't invoke autoreconf. Instead, invoke autopoint explicitly but move back the *.m4 files from gnulib. 2006-10-11 Bruno Haible * gnulib-tool (func_usage): Make module names after --create-testdir optional. (func_create_testdir): If no module was specified, use nearly all modules. 2006-10-12 Jim Meyering Big performance improvement for fts-based tools that use FTS_NOSTAT. Avoid spurious inode-mismatch problems on non-POSIX file systems. Details: http://article.gmane.org/gmane.comp.lib.gnulib.bugs/7416 * lib/fts_.h (FTS_DEFER_STAT): Define new flag. (FTS_OPTIONMASK): Extend the mask to reflect this addition. * lib/fts.c (DT_IS_KNOWN, DT_MUST_BE): Define. (FTS_NO_STAT_REQUIRED, FTS_STAT_REQUIRED): Define. (fts_set_stat_required): New function. (fts_open): Defer the calls to fts_stat, if possible or requested. Move the code that maps a command-line fts_info value FTS_DOT to FTS_D into fts_stat itself. (fts_read): Perform any required (deferred) fts_stat call. (fts_build): Likewise, for the directory we're about to open and read. In the readdir loop, carefully decide whether each entry will require an eventual call to fts_stat, using dirent.d_type info if available. (fts_stat): Move the test for whether to honor FTS_COMFOLLOW on a command line argument into this function. Update all callers. Map a return value of FTS_DOT to FTS_D for a command line argument. * modules/fts (Depends-on): Add d-type. Alphabetize. Thanks to Miklos Szeredi for his tenacity and for the initial bug report about "find" failing on a FUSE-based file system. * lib/fts.c (fts_open): Use consistent indentation. 2006-10-12 Paul Eggert * m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Renamed from gl_USE_SYSTEM_EXTENSIONS, to fix a coreutils bootstrap failure reported by Jim Meyering. All uses of cache variables renamed to match Autoconf's. (gl_USE_SYSTEM_EXTENSIONS): New macro, which simply requires the other one. * m4/rename-dest-slash.m4 (gl_FUNC_RENAME_TRAILING_DEST_SLASH): Fix misspelling in diagnostic. 2006-10-11 Paul Eggert * lib/mkdir-p.c (HAVE_FCHMOD): Define to false if not already defined. Problem reported by Matthew Woehlke. * lib/inttypes_.h (_LONG_LONG_FORMAT_PREFIX): New macro. Add support for Tandem NonStop R series. (_PRI64_PREFIX, _PRIu64_PREFIX, _SCN64_PREFIX, _SCNu64_PREFIX): Use new macro. * lib/rename-dest-slash.c: Include stdbool.h but not string.h. (has_trailing_slash): Omit size arg; all callers changed. Omit 'inline', since it doesn't help performance and we'd need to configure it. Don't count //, ///, etc. as having a trailing slash. As a side effect, this removes a C99ism reported by Matthew Woehlke. (rpl_rename_dest_slash): On failure, use rename's errno rather than (in some cases) an incorrect or junk errno. Simplify code by removing need to compute length; this does cause it to make two passes instead of one over the file name, but it's worth it. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Undo previous change, since Autoconf's version may no longer be appropriate now that we are using CVS Autoconf's version. Add support for Tandem. 2006-10-11 Paul Eggert Bruno Haible * lib/allocsa.h (sa_alignment_longlong, sa_alignment_max): Test HAVE_LONG_LONG_INT instead of HAVE_LONG_LONG. * m4/allocsa.m4 (gl_ALLOCSA): Invoke AC_TYPE_LONG_LONG_INT instead of gl_AC_TYPE_LONG_LONG. * lib/printf-args.h (arg_type, argument): Test HAVE_LONG_LONG_INT instead of HAVE_LONG_LONG. * lib/printf-args.c (printf_fetchargs): Likewise. * lib/printf-parse.c (PRINTF_PARSE): Likewise. * lib/vasnprintf.c (VASNPRINTF): Likewise. * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_ARGS, gl_PREREQ_PRINTF_PARSE, gl_PREREQ_VASNPRINTF): Invoke AC_TYPE_LONG_LONG_INT instead of gl_AC_TYPE_LONG_LONG. 2006-10-11 Bruno Haible * m4/longlong.m4: Add comments. * m4/ulonglong.m4: Likewise. 2006-10-10 Bruno Haible Make it possible to #define stpcpy, strdup to aliases. * lib/stpcpy.c (stpcpy) [!_LIBC]: Don't undefine. * lib/strdup.c (strdup) [!_LIBC]: Don't undefine. 2006-10-10 Bruno Haible Make it possible to #define gcd to an alias. * lib/gcd.c: Include config.h. 2006-10-10 Bruno Haible Make it possible to #define c_isascii to an alias. * lib/c-ctype.h: Don't define the macros if NO_C_CTYPE_MACROS is defined. Undefine the macros before defining them, to avoid gcc warnings. * lib/c-ctype.c: Include config.h. Don't undefine the macros; instead, define NO_C_CTYPE_MACROS early. 2006-10-10 Bruno Haible Make it possible to #define set_program_name to an alias. * lib/progname.c: Don't undefine set_program_name; instead, undefine ENABLE_RELOCATABLE early. 2006-10-10 Paul Eggert Port to Tandem NSK OSS, which has 64-bit signed int but at most 32-bit unsigned int. Problem reported by Matthew Woehlke in: http://lists.gnu.org/r/bug-coreutils/2006-10/msg00062.html More generally, don't assume that 64-bit signed int is available if unsigned int is, and vice versa. * lib/inttypes_.h (_PRIu64_PREFIX, _SCNu64_PREFIX): Depend on unsigned symbols, not on their signed counterparts. * lib/stdint_.h (uint64_t, uint_least64_t, uint_fast64_t, uintmax_t): (UINT64_MAX, UINT_LEAST64_MAX, UINT_FAST64_MAX, UINTMAX_MAX): (UINT64_C, UINTMAX_C): Likewise. * lib/strtoimax.c (strtoll): Depend on signed symbols, not their unsigned counterparts. (Have_long_long, Unsigned): New macros. (Int): Renamed from INT. (strtoimax): Use the new macros. * m4/stdint.m4 (gl_STDINT_H): Require AC_TYPE_UNSIGNED_LONG_LONG_INT and substitute HAVE_UNSIGNED_LONG_LONG_INT. * modules/inttypes (inttypes.h): Substitute HAVE_UNSIGNED_LONG_LONG_INT. * modules/stdint (stdint.h): Likewise. (Files): Add m4/ulonglong.m4. 2006-10-10 Bruno Haible Fix a gcc -Wshadow warning. * lib/gl_anyhash_list2.h (hash_resize): Rename local variable 'index' to 'bucket'. * lib/gl_anylinked_list2.h (gl_linked_search_from_to, gl_linked_indexof_from_to): Likewise. * lib/gl_linkedhash_list.c (add_to_bucket, remove_from_bucket): Likewise. * lib/gl_anytreehash_list1.h (add_to_bucket, remove_from_bucket): Likewise. * lib/gl_anytreehash_list2.h (gl_tree_search_from_to): Likewise. Reported by Eric Blake. 2006-10-09 Paul Eggert * lib/filemode.h [HAVE_DECL_STRMODE]: Include unistd.h too, for NetBSD. Problem reported by Bruno Haible. 2006-10-09 Jim Meyering * lib/lchown.c: Include before "stat-macros.h". Patch from Bruno Haible. 2006-10-09 Jim Meyering * lib/fts-cycle.c (leave_dir): When "leaving" a top level directory due to FTS_SKIP, don't copy the parent's uninitialized dev/ino values. Trigger with e.g., mkdir d && valgrind ./chmod u+rwx d d 2006-10-08 Paul Eggert Don't include twice; this doesn't work in some cases, e.g., when config.h has "#define intmax_t long long int" and we include , , in that order. Problem reported by Matthew Woehlke in: http://lists.gnu.org/r/bug-coreutils/2006-10/msg00073.html * lib/fprintftime.c: Don't include config.h or fprintftime.h. * lib/fts-cycle.c: Don't include config.h. * lib/strftime.c: Include fprintftime.h if FPRINTFTIME is defined. * lib/xstrtoimax.c: Remove copyright notice since it's short tnow. Don't include config.h or xstrtol.h. Define STRTOL_T_MINIMUM and STRTOL_T_MAXIMUM unconditionally, since we now assume gnulib inttypes.h. * lib/xstrtoumax.c: Likewise. * lib/xstrtol.c: Include config.h and xstrtol.h after defining __strtol and the like, so that this module is more like its siblings. (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM) [! defined STRTOL_T_MINIMUM]: Remove; no longer needed now that we assume gnulib inttypes.h. 2006-10-08 Bruno Haible * doc/gnulib-tool.texi: Emphasize the drawbacks of the --symlink option. 2006-10-07 Jim Meyering * modules/inttypes (inttypes.h): Revert what seems to have been an inadvertent part of today's change: use "|", not "/" in the substitution for the "/"-containing string, $(ABSOLUTE_INTTYPES_H). 2006-10-07 Bruno Haible * modules/sublist: New file. 2006-10-07 Bruno Haible * modules/alloca-opt (alloca.h): Add a "DO NOT EDIT" comment. * modules/argz (argz.h): Likewise. * modules/arpa_inet (arpa/inet.h): Likewise. * modules/byteswap (byteswap.h): Likewise. * modules/configmake (configmake.h): Likewise. * modules/fcntl (fcntl.h): Likewise. * modules/fnmatch (fnmatch.h): Likewise. * modules/getopt (getopt.h): Likewise. * modules/glob (glob.h): Likewise. * modules/inttypes (inttypes.h): Likewise. * modules/netinet_in (netinet/in.h): Likewise. * modules/poll (poll.h): Likewise. * modules/stdbool (stdbool.h): Likewise. * modules/stdint (stdint.h): Likewise. * modules/sys_select (sys/select.h): Likewise. * modules/sys_socket (sys/socket.h): Likewise. * modules/sys_stat (sys/stat.h): Likewise. * modules/sysexits (sysexits.h): Likewise. * modules/unistd (unistd.h): Likewise. * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Add a "DO NOT EDIT" comment to the generated file. (func_import): Likewise for gnulib-comp.m4. 2006-10-07 Bruno Haible * lib/gl_sublist.h: New file. * lib/gl_sublist.c: New file. 2006-10-06 Paul Eggert * lib/mkancesdirs.c (mkancesdirs): Pass to MAKE_DIR both the full file name (relative to the original working directory) and the file name component (relative to the temporary working directory). All callers changed. * lib/mkancesdirs.h (mkancesdirs): Adjust prototype to match. * lib/mkdir-p.c (make_dir_parents): Likewise. * lib/mkdir-p.h (make_dir_parents): Likewise. 2006-10-06 Eric Blake Define several macros for use by the clean-temp module. * m4/close-stream.m4 (gl_CLOSE_STREAM): Define GNULIB_CLOSE_STREAM. * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): Define GNULIB_FCNTL_SAFER. * m4/stdio-safer.m4 (gl_FOPEN_SAFER): Define GNULIB_FOPEN_SAFER. * lib/clean-temp.h (close_stream_temp): New declaration. * lib/clean-temp.c (includes): Pull in headers according to what other modules are in use. (close_stream_temp) [GNULIB_CLOSE_STREAM]: New function. 2006-10-06 Bruno Haible * lib/javacomp.c (write_temp_file): Use fopen_temp, fwriteerror_temp instead of fopen, fwriteerror. 2006-10-06 Bruno Haible * lib/clean-temp.h (cleanup_temp_file, cleanup_temp_subdir, cleanup_temp_dir_contents, cleanup_temp_dir): Change return type to int. * lib/clean-temp.c (do_unlink, do_rmdir, cleanup_temp_file, cleanup_temp_subdir, cleanup_temp_dir_contents, cleanup_temp_dir): Return an error indicator. Suggested by Eric Blake. 2006-10-06 Bruno Haible * lib/clean-temp.c (PATH_MAX): Provide a fallback for GNU Hurd. Reported by Eric Blake. 2006-10-06 Bruno Haible * modules/closeout (Description): Mention stderr too. 2006-10-06 Bruno Haible and Paul Eggert * lib/closeout.c (close_stdout): Also close stderr. * lib/closeout.h: Update comment. 2006-10-05 Paul Eggert Fix some Darwin-7.9.0 porting problems reported by Bruno Haible in . * lib/dirchownmod.c: Include lchown.h. * lib/lchown.c: Don't include files that lchown.h now includes. Don't declare chown, since lchown.h now does that. * lib/lchown.h: Include errno.h, sys/types.h, unistd.h. (lchown): Define to rpl_chown if lchown is declared but does not exist. Declare using a prototype if lchown is not declared. Add a copyright notice. * lib/mkstemp.h: Include . * lib/openat.c: Include lchown.h. * lib/fcntl_.h (O_NOFOLLOW): Don't depend on O_NOFOLLOW_IS_INEFFECTIVE; we now test for that separately. * lib/fts.c (fts_safe_changedir): Inspect HAVE_WORKING_O_NOFOLLOW rather than O_NOFOLLOW, when testing whether it's possible to avoid a race condition reliably. * lib/savewd.c (savewd_chdir): Likewise. Remove macros that are no longer needed now that stdint.h is reliable. * lib/fsusage.c (UINTMAX_MAX): Remove. * lib/human.c (SIZE_MAX, UINTMAX_MAX): Remove. * lib/utimecmp.c (SIZE_MAX): Remove. * m4/lchown.m4 (gl_FUNC_LCHOWN): Check whether lchown is declared. * m4/fcntl_h.m4 (gl_FCNTL_H): Define HAVE_WORKING_O_NOFOLLOW instead of O_NOFOLLOW_IS_INEFFECTIVE. Define HAVE_WORKING_O_NOATIME if O_NOATIME works. 2006-10-05 Bruno Haible * lib/gl_list.h (gl_sortedlist_search_from_to, gl_sortedlist_indexof_from_to): New declarations. (gl_list_implementation): New fields sortedlist_search_from_to, sortedlist_indexof_from_to. (gl_sortedlist_search_from_to, gl_sortedlist_indexof_from_to): New inline functions. * lib/gl_list.c (gl_sortedlist_search_from_to, gl_sortedlist_indexof_from_to): New functions. * lib/gl_array_list.c (gl_array_sortedlist_indexof_from_to): New function. (gl_array_sortedlist_indexof, gl_array_sortedlist_search): Use it. (gl_array_sortedlist_search_from_to): New function. (gl_array_list_implementation): Update. * lib/gl_carray_list.c (gl_carray_sortedlist_indexof_from_to): New function. (gl_carray_sortedlist_indexof, gl_carray_sortedlist_search): Use it. (gl_carray_sortedlist_search_from_to): New function. (gl_carray_list_implementation): Update. * lib/gl_anylinked_list2.h (gl_linked_sortedlist_search_from_to, gl_linked_sortedlist_indexof_from_to): New functions. * lib/gl_linked_list.c (gl_linked_list_implementation): Update. * lib/gl_linkedhash_list.c (gl_linkedhash_list_implementation): Update. * lib/gl_anytree_list2.h (gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof_from_to): New functions. * lib/gl_avltree_list.c (gl_avltree_list_implementation): Update. * lib/gl_avltreehash_list.c (gl_avltreehash_list_implementation): Update. * lib/gl_rbtree_list.c (gl_rbtree_list_implementation): Update. * lib/gl_rbtreehash_list.c (gl_avltreehash_list_implementation): Update. 2006-10-05 Bruno Haible * lib/gl_list.h (gl_list_search_from, gl_list_search_from_to, gl_list_indexof_from, gl_list_indexof_from_to): New declarations. (struct gl_list_implementation): Add fields search_from_to, indexof_from_to. Remove fields search, indexof. (gl_list_search): Use the search_from_to method. (gl_list_search_from, gl_list_search_from_to): New functions. (gl_list_indexof): Use the indexof_from_to method. (gl_list_indexof_from, gl_list_indexof_from_to): New functions. * lib/gl_list.c (gl_list_search): Use the search_from_to method. (gl_list_search_from, gl_list_search_from_to): New functions. (gl_list_indexof): Use the indexof_from_to method. (gl_list_indexof_from, gl_list_indexof_from_to): New functions. * lib/gl_array_list.c (gl_array_indexof_from_to): Renamed from gl_array_indexof. Add start_index, end_index arguments. (gl_array_search_from_to): Renamed from gl_array_search. Add start_index, end_index arguments. (gl_array_remove, gl_array_list_implementation): Update. * lib/gl_carray_list.c (gl_carray_indexof_from_to): Renamed from gl_carray_indexof. Add start_index, end_index arguments. (gl_carray_search_from_to): Renamed from gl_carray_search. Add start_index, end_index arguments. (gl_carray_remove, gl_carray_list_implementation): Update. * lib/gl_anylinked_list2.h (gl_linked_search_from_to): Renamed from gl_linked_search. Add start_index, end_index arguments. (gl_linked_indexof_from_to): Renamed from gl_linked_indexof. Add start_index, end_index arguments. (gl_linked_remove): Update. * lib/gl_linked_list.c (gl_linked_list_implementation): Update. * lib/gl_linkedhash_list.c (gl_linkedhash_list_implementation): Update. * lib/gl_anytree_list1.h (iterstack_item_t): Change type of 'rightp' field to 'size_t'. * lib/gl_anytree_list2.h (gl_tree_search_from_to): Renamed from gl_tree_search. Add start_index, end_index arguments. (gl_tree_indexof_from_to): Renamed from gl_tree_indexof. Add start_index, end_index arguments. (gl_tree_remove): Update. * lib/gl_avltree_list.c (gl_avltree_list_implementation): Update. * lib/gl_rbtree_list.c (gl_rbtree_list_implementation): Update. * lib/gl_anytreehash_list1.h (compare_position_threshold): New function. * lib/gl_anytreehash_list2.h (gl_tree_search_from_to): Renamed from gl_tree_search. Add start_index, end_index arguments. (gl_tree_indexof_from_to): Renamed from gl_tree_indexof. Add start_index, end_index arguments. * lib/gl_avltreehash_list.c (gl_avltreehash_list_implementation): Update. * lib/gl_rbtreehash_list.c (gl_rbtreehash_list_implementation): Update. 2006-10-05 Bruno Haible * modules/fwriteerror (configure.ac): Define GNULIB_FWRITEERROR. * lib/clean-temp.h (open_temp, fopen_temp, close_temp, fclose_temp, fwriteerror_temp): New declarations. * lib/clean-temp.c (uintptr_t): Provide fallback definition. (descriptors): New variable. (cleanup): First, close the descriptors. (register_fd, unregister_fd, open_temp, fopen_temp, close_temp, fclose_temp, fwriteerror_temp): New functions. 2006-10-04 Jim Meyering * lib/fts.c (fts_open): Tiny comment change. 2006-10-04 Bruno Haible Make it possible to invoke AC_GNU_SOURCE after gl_LOCK_EARLY. * m4/lock.m4 (gl_LOCK_EARLY_BODY): New macro, extracted code from gl_LOCK_BODY. (gl_LOCK_EARLY): Require gl_LOCK_EARLY_BODY, not gl_LOCK_BODY. (gl_LOCK_BODY): Remove settings of CPPFLAGS, now done in gl_LOCK_EARLY_BODY. (gl_LOCK): Require gl_LOCK_BODY. 2006-10-04 Bruno Haible * lib/gl_oset.h (gl_setelement_threshold_fn): New type. (gl_oset_search_atleast): New declaration. (struct gl_oset_implementation): Add field 'search_atleast'. (gl_oset_search_atleast): New inline function. * lib/gl_oset.c (gl_oset_search_atleast): New function. * lib/gl_array_oset.c (gl_array_search_atleast): New function. (gl_array_oset_implementation): Update. * lib/gl_anytree_oset.h (gl_tree_search_atleast): New function. * lib/gl_avltree_oset.c (gl_avltree_oset_implementation): Update. * lib/gl_rbtree_oset.c (gl_rbtree_oset_implementation): Update. 2006-10-04 Bruno Haible * lib/fatal-signal.c (fatal_signals) [WOE32]: Add the SIGBREAK signal. 2006-10-03 Bruno Haible * lib/gl_rbtreehash_list.c (gl_rbtreehash_list_implementation): Renamed from gl_avltreehash_list_implementation. 2006-10-03 Bruno Haible * lib/gl_oset.c (gl_oset_add): Fix return type. 2006-10-02 Paolo Bonzini (tiny change) * lib/quotearg.c (mbstate_t) [!HAVE_MBRTOWC]: #define to int. 2006-10-02 Eric Blake * modules/strnlen (Depends-on): Add extensions. 2006-10-02 Eric Blake * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Use autoconf's definition in 2.60+. 2006-10-02 Dmitry V. Levin * lib/fts.c (fts_close, fts_build, fts_palloc): Remove redundant checks. 2006-10-02 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Don't add no-dependencies to the AUTOMAKE_OPTIONS. Reported by Jim Meyering. 2006-09-29 Paul Eggert Work around bug in Solaris 10 /proc file system: /proc/self/fd/NNN/.. isn't the parent directory of the directory whose file descriptor is NNN. This needs to be worked around at run time, not compile time, since a program might be built on Solaris 8, where things work, and run on Solaris 10. * lib/openat-priv.h (BUILD_PROC_NAME): Remove. All callers changed to use the following interface instead: (OPENAT_BUFFER_SIZE): New macro. (openat_proc_name): New function. * lib/at-func.c (AT_FUNC_NAME): Adjust to above changes. * lib/openat.c (openat_permissive, openat_needs_fchdir, fdopendir): Likewise. * lib/openat-proc.c: New file. * modules/openat (Files): Add lib/openat-proc.c. (Depends-on): Add same-inode, stdbool. * m4/openat.m4 (gl_FUNC_OPENAT): Add AC_LIBOBJ(openat-proc). 2006-09-29 Bruno Haible * lib/fwriteerror.h (fwriteerror_no_ebadf): New declaration. * lib/(do_fwriteerror): Renamed from fwriteerror. Add ignore_ebadf argument. Set stdout_closed before testing for ferror, not after. (fwriteerror, fwriteerror_no_ebadf): New functions. 2006-09-28 Ralf Wildenhues * m4/intmax.m4 (gt_TYPE_INTMAX_T): Avoid unused variables warning. 2006-09-28 Paolo Bonzini * lib/poll.c (rpl_poll) [__APPLE__]: Use FIONREAD instead of MSG_PEEK. * m4/poll.m4: Look for sys/ioctl.h and sys/filio.h. 2006-09-28 Jim Meyering * lib/mkdir-p.c: Include "dirchownmod.h", not "dirchownmod.c". Include . 2006-09-28 Bruno Haible * modules/avltreehash-list (Depends-on): Add stdint, remove size_max. * modules/linkedhash-list (Depends-on): Likewise. * modules/rbtreehash-list (Depends-on): Likewise. 2006-09-28 Bruno Haible * lib/strndup.h: Simplify the redefinition of strndup. (_GL_CONCAT, _GL_XCONCAT, __STRNDUP_ID): Remove macros. * m4/strndup.m4 (gl_FUNC_STRNDUP): Don't define __STRNDUP_PREFIX. 2006-09-28 Bruno Haible * lib/gl_avltreehash_list.c: Include instead of size_max.h. * lib/gl_linkedhash_list.c: Likewise. * lib/gl_rbtreehash_list.c: Likewise. 2006-09-27 Paul Eggert * lib/canon-host.c (canon_host_r): Work around bug in Darwin 7.9.0 getaddrinfo. * lib/__fpending.h: Don't include unless HAVE_DECL___FPENDING. This avoids a bug with lsbcc, where it causes to cause a compile-time error. Problem reported by Nelson H. F. Beebe. * lib/getpass.c: Likewise, except for HAVE_DECL___FSETLOCKING instead of HAVE_DECL___PENDING. * m4/fpending.m4 (gl_FUNC_FPENDING): Check for stdio_ext at most once. * m4/getpass.m4 (gl_PREREQ_GETPASS): Check for __fsetlocking's declaration. 2006-09-27 Jim Meyering This file could end up with a definition for a function named __strndup, rather than rpl_strndup on a system with incomplete weak_alias support. * lib/strndup.c (strndup): Rename from __strndup. Remove #defines that used to map __strndup to strndup. Don't use K&R prototypes. Remove LIBC-related code, since this file is not sync'd with glibc. * lib/strndup.h: Revamp, accordingly. * m4/strndup.m4: Modernize. 2006-09-26 Paul Eggert * modules/savewd (Depends-on): Add 'raise'. * lib/savewd.c: Include , for 'raise'. 2006-09-26 Jim Meyering * m4/acl.m4 (AC_FUNC_ACL): Disable ACL support altogether when we detect Darwin 8.7.0's acl_get_file bug. Rearrange to perform the new (below) run-test while $LIBS contains any acl-related library. Set USE_ACL at the end. (gl_ACL_GET_FILE): New function. 2006-09-26 Eric Blake * lib/verror.c: Include unconditionally. 2006-09-25 Paul Eggert * modules/clock-time (Maintainer): Add self. * modules/getlogin_r (Depends-on): Add extensions. 2006-09-25 Ralf Wildenhues * modules/clock-time: New module. * modules/nanosleep (Depends-on): Add clock-time. * modules/gethrxtime (Depends-on): Likewise. * modules/gettime (Depends-on): Likewise. * modules/settime (Depends-on): Likewise. * modules/fts-lgpl: Depend on openat. * modules/mkancesdirs: Depend on savewd. * modules/mkdir-p: Likewise. 2006-09-25 Ralf Wildenhues * m4/host-os.m4 (gl_HOST_OS): Require AC_CANONICAL_HOST. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Rename cache variable from `gl_have_arbitrary_file_name_length_limit' to `gl_cv_have_arbitrary_file_name_length_limit', so that caching actually works between configure runs. 2006-09-25 Ralf Wildenhues Bruno Haible * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Include . 2006-09-25 Jim Meyering * m4/fcntl_h.m4 (gl_FCNTL_H): Fix typo in test for failed open. This typo caused coreutils/tests/dd/misc to fail on Darwin 8.7.0. 2006-09-25 Eric Blake * gnulib-tool (func_import, func_create_testdir): Fix typos in exec's in 2006-09-18 patch when shuffling fds. 2006-09-25 Bruno Haible * m4/getloadavg.m4 (gl_GETLOADAVG): Fix directory in error message. Reported by Jim Meyering. 2006-09-24 Jim Meyering * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Don't use '>' to compare a pointer against a literal "0". That caused failures with at least HP-UX's hpcc. 2006-09-22 Simon Josefsson * modules/gc-sha1: * modules/gc-md4: * modules/gc-hmac-sha1: * modules/gc-hmac-md5: * modules/gc-des: * modules/gc-arcfour: Distribute more files. 2006-09-22 Ralf Wildenhues * lib/gl_anylinked_list2.h [lint] (gl_linked_iterator) (gl_linked_iterator_from_to): Initialize struct completely. * lib/gl_anytree_list2.h [lint] (gl_tree_iterator): Likewise. (gl_tree_iterator_from_to): Likewise * lib/gl_anytree_oset.h [lint] (gl_tree_iterator): Likewise. * lib/gl_array_list.c [lint] (gl_array_iterator) (gl_array_iterator_from_to): Likewise. * lib/gl_array_oset.c [lint] (gl_array_iterator): Likewise. * lib/gl_carray_list.c [lint] (gl_carray_iterator) (gl_carray_iterator_from_to): Likewise. * lib/gc-gnulib.c [GC_USE_HMAC_SHA1]: include hmac.h for hmac_sha1. * lib/md4.c (md4_process_block): Remove unused variable. * lib/rijndael-api-fst.c (rijndaelBlockDecrypt): GCC suggests parentheses for clarity. 2006-09-22 Ralf Wildenhues * modules/bison-i18n (Depends-on): Add gettext. 2006-09-22 Ralf Wildenhues * m4/fsusage.m4 (gl_STATFS_TRUNCATES): Avoid unused variable. * m4/getdate.m4 (gl_C_COMPOUND_LITERALS): Likewise. * m4/jm-winsz1.m4 (gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H): Likewise; also add missing comma that caused broken test. * m4/link-follow.m4 (gl_AC_FUNC_LINK_FOLLOWS_SYMLINK): Include stdlib.h, for `abort'. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Avoid unused variables. * m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Check for and include unistd.h if present, for `rmdir'. * m4/physmem.m4 (gl_SYS__SYSTEM_CONFIGURATION): Avoid unused variables. * m4/putenv.m4 (gl_FUNC_PUTENV): Rewrite using AC_RUN_IFELSE, and in the process include standard headers for prototypes. * m4/readutmp.m4 (gl_READUTMP): Require AC_GNU_SOURCE, so utmpxname gets declared on GNU/Linux. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Check for and include unistd.h, for `rmdir'. * m4/time_r.m4 (gl_TIME_R): Avoid unused variables. * m4/fnmatch.m4 (_AC_FUNC_FNMATCH_IF): Avoid expression that is always true. * m4/strndup.m4 (gl_FUNC_STRNDUP): include stdlib.h, for `free'. * m4/sockpfaf.m4 (gl_SOCKET_FAMILIES): Avoid gcc -Wall warnings. 2006-09-22 Ralf Wildenhues * gnulib-tool (func_version): Create output all at once. This may help avoid triggering unnecessary SIGPIPEs, and at any rate it doesn't hurt. 2006-09-22 Ralf Wildenhues Bruno Haible * m4/lock.m4 (gl_LOCK_BODY): Avoid unused variables warning. * m4/mbswidth.m4 (gl_MBSWIDTH): Likewise. * m4/signed.m4 (bh_C_SIGNED): Likewise. * m4/vasprintf.m4 (gl_PREREQ_VASPRINTF_H): New macro. (gl_FUNC_VASPRINTF): Invoke it. 2006-09-22 Bruno Haible * m4/getloadavg.m4 (gl_GETLOADAVG): Expect the directory of getloadavg.c as first argument. 2006-09-22 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Set gl_source_base at the beginning of the gl_INIT macro. * modules/getloadavg (configure.ac): Pass $gl_source_base to gl_GETLOADAVG. 2006-09-22 Bruno Haible * gnulib-tool (func_create_megatestdir): Don't include the config-h module. Suggested by Ralf Wildenhues. 2006-09-20 Paul Eggert Import this patch from libc: 2006-09-06 Jakub Jelinek * lib/regex_internal.c (re_string_reconstruct): Handle offset < pstr->valid_raw_len && pstr->offsets_needed case. Ensure no bytes read before raw_mbs array. Pass a saved copy of pstr->valid_len - 1 rather than pstr->valid_raw_len - 1 to re_string_context_at. * m4/regex.m4 (gl_REGEX): Check for locale.h, since the test now requires it. (gl_PREREQ_REGEX): Don't check for locale.h any more, since gl_REGEX now does it for us. (gl_REGEX): Add test taken from http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Require AC_SYS_LARGEFILE. Check that large offsets work. Modernize Autoconf usages. Prefer "yes" to mean a good thing rather than a bad. Don't put "#define mkstemp" in config.h, as this might interfere with standard system headers that "#define mkstemp mkstemp64". * modules/mkstemp (Depends-on): Add extensions, so that mkstemp is visible on some platforms. (Makefile.am): Add mkstemp.h to EXTRA_DIST. (Include): Change to "mkstemp.h" from . (Files): Add mkstemp.h. * lib/mkstemp.h: New file, since some standard headers #define mkstemp. * lib/mkstemp.c: Revamp to put the !_LIBC code together. Include "mkstemp.h". Make the _LIBC code resemble glibc original more, e.g., use K&R style. * lib/mkstemp-safer.c: Include "mkstemp.h" instead of . (mkstemp): Remove, since mkstemp.h does this for us. * lib/stdlib--.h: Include mkstemp.h. Import this patch from libc: 2006-04-07 Ulrich Drepper * lib/tempname.c (__gen_tempname): Change attempts_min into a macro. Use preprocessor to decide how to initialize attempts [Coverity CID 67]. 2006-09-20 Bruno Haible * lib/mkdtemp.c: Import from libc. 2006-04-07 Ulrich Drepper * sysdeps/posix/tempname.c (__gen_tempname): Change attempts_min into a macro. Use preprocessor to decide how to initialize attempts [Coverity CID 67]. 2001-11-27 Paul Eggert * sysdeps/posix/tempname.c (__gen_tempname): Try at least ATTEMPTS_MIN or TMP_MAX times, whichever is greater. 2006-09-19 Ralf Wildenhues * gnulib-tool (func_exit): New function, to allow to pass the exit status portably through the trap. Use everywhere. (--help, --version): Signal a write error. (trap): catch SIGPIPE, for write errors. Exit at the end of the trap, with the correct exit status. 2006-09-19 Karl Berry * doc/gnulib.texi: note about the license texinfo files. 2006-09-19 Eric Blake * gnulib-tool: Avoid space-tab. 2006-09-18 Paul Eggert * lib/getaddrinfo.c (getaddrinfo) [defined HAVE_IPV6]: Fix typo that prevented coreutils 6.1 from building. Problem reported by Petter Reinholdtsen. 2006-09-18 Paul Eggert * gnulib-tool (avoidlist): Fix typo that broke options like --avoid=lock that are used by coreutils bootstrap. 2006-09-18 Mark D. Baushke * m4/inttypes.m4 (gl_INTTYPES_H): Quote "test" args more systematically. 2006-09-18 Jim Meyering * lib/savewd.c (savewd_restore): Don't shadow: s/status/child_status/. 2006-09-18 Bruno Haible * modules/inttypes (Files): Remove m4/inttypes-h.m4. 2006-09-18 Bruno Haible * m4/inttypes-h.m4 (gl_HEADER_INTTYPES_H): Remove macro. * m4/inttypes-pri.m4: Require autoconf >= 2.52. (gt_INTTYPES_PRI): Invoke AC_CHECK_HEADERS on inttypes.h. Test ac_cv_header_inttypes_h instead of gl_cv_header_inttypes_h. * m4/gettext.m4: Require autoconf >= 2.52. (gt_INTL_SUBDIR_CORE): Invoke AC_CHECK_HEADERS on inttypes.h. * m4/inttypes.m4 (gl_INTTYPES_H): Test ac_cv_header_inttypes_h instead of gl_cv_header_inttypes_h. 2006-09-18 Bruno Haible * lib/javaversion.c: Include configmake.h. 2006-09-18 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Use exec tricks to avoid that the while loops be executed in a subshell. 2006-09-18 Bruno Haible * MODULES.html.sh (func_module): Break long lines. Suggested by Bruce Korb . 2006-09-17 Ralf Wildenhues Speed up by a factor of 1.12. * gnulib-tool (nl): New variable. (func_import): Rewrite include directive extraction to only read each directive once. 2006-09-17 Bruno Haible * modules/javaversion (Makefile.am): Remove DEFS setting. (Depends-on): Add configmake, for PKGDATADIR definition. 2006-09-17 Bruno Haible * gnulib-tool (func_create_testdir): Rewrite all files at once. 2006-09-17 Bruno Haible * gnulib-tool (func_append): New function, stolen from libtool.m4. (func_modules_transitive_closure, func_modules_add_dummy, func_modules_to_filelist, func_import, func_create_testdir, func_create_megatestdir, ...): Use it wherever possible. Suggested by Ralf Wildenhues. 2006-09-16 Karl Berry * doc/fdl.texi (ADDENDUM): switch to @heading from @appendixsubsec, to avoid sectioning errors. * doc/lgpl.texi, gpl.texi (Copying): downcase @unnumbered title. [ifinfo]: blank line after @center-ed titles. * doc/lgpl.texi (Library Copying): Rename main node to GNU LGPL. Spell FSF address consistently with others. (These changes approved by rms.) 2006-09-15 Ralf Wildenhues Speed up by a factor of 1.61. * gnulib-tool (func_modules_transitive_closure): Rewrite to not check already checked module names again. 2006-09-15 Ralf Wildenhues Speed up by a factor of 1.13. * gnulib-tool (func_import): Rewrite all old_files at once; likewise for new_files, and the input to func_add_or_update. 2006-09-15 Ralf Wildenhues * gnulib-tool (func_all_modules, func_modules_to_filelist, func_import, func_create_testdir, ...): Change 'sort | uniq' to 'sort -u'. 2006-09-15 Paul Eggert * modules/mkancesdirs (Depends-on): Add fcntl. * modules/savewd: New file. * MODULES.html.sh (File system functions): Add savewd. * modules/configmake (Makefile.am): Add support for the Automake-supplied PKGLIBDIR, PKGINCLUDEDIR, PKGDATADIR. 2006-09-15 Paul Eggert * m4/savewd.m4: New file. 2006-09-15 Paul Eggert * lib/dirchownmod.c: Don't include fcntl.h; no longer needed. (dirchownmod): New arg FD. All callers changed. Use FD rather than opening the directory ourself, as opening is now the caller's responsibility. * lib/dirchownmod.h: Likewise. * lib/mkancesdirs.c: Include , for portability to older hosts that require before . Include fcntl.h, savewd.h, and unistd.h, not dirname.h and stat-macros.h. (test_dir): Remove. (mkancesdirs): Return length of prefix of FILE that has already been made, or -2 if there is a child doing the work. Redo algorithm so that it is O(N) rather than O(N**2). Optimize away ".", and treat ".." specially since it might stray back into already-created areas. Use a subprocess if necessary. New arg WD; all users changed. MAKE_DIR function should now return 1 if it creates a directory that is not readable. Return -2 if a child process is spun off. * lib/mkancesdirs.h: Include , for ptrdiff_t. Adjust signature to match code. * lib/mkdir-p.c: Include dirname.h, for IS_ABSOLUTE_FILE_NAME. (make_dir_parents): Use a subprocess if necessary. New arg WD; all users changed. * lib/savewd.c, lib/savewd.h: New files. 2006-09-15 Jim Meyering * modules/rename-dest-slash: New module. * MODULES.html.sh (posix_compat): Add it here. * modules/rename: Reflect vb_FUNC_RENAME -> gl_FUNC_RENAME change. 2006-09-15 Jim Meyering * m4/rename-dest-slash.m4 (gl_FUNC_RENAME_TRAILING_DEST_SLASH): New file. * m4/rename.m4 (gl_FUNC_RENAME): Rename from vb_FUNC_RENAME. 2006-09-15 Jim Meyering * lib/rename-dest-slash.c (has_trailing_slash): Use FILE_SYSTEM_PREFIX_LEN, for non-POSIX systems. (rpl_rename_dest_slash): Perform the cheaper trailing slash test before testing whether SRC is a directory. Suggestions from Bruno Haible. Avoid a warning about an unused variable. * lib/regex_internal.c (re_dfa_add_node): Move declaration of "type" into the #ifdef block where it's used. * lib/rename-dest-slash.c: New file. 2006-09-14 Bruno Haible * lib/allocsa.c: Include unconditionally. * lib/asnprintf.c: Likewise. * lib/asprintf.c: Likewise. * lib/c-strcasecmp.c: Likewise. * lib/c-strcasestr.c: Likewise. * lib/c-strncasecmp.c: Likewise. * lib/c-strstr.c: Likewise. * lib/classpath.c: Likewise. * lib/clean-temp.c: Likewise. * lib/concatpath.c: Likewise. * lib/copy-file.c: Likewise. * lib/csharpcomp.c: Likewise. * lib/csharpexec.c: Likewise. * lib/execute.c: Likewise. * lib/fatal-signal.c: Likewise. * lib/findprog.c: Likewise. * lib/fwriteerror.c: Likewise. * lib/gl_array_list.c: Likewise. * lib/gl_array_oset.c: Likewise. * lib/gl_avltree_list.c: Likewise. * lib/gl_avltree_oset.c: Likewise. * lib/gl_avltreehash_list.c: Likewise. * lib/gl_carray_list.c: Likewise. * lib/gl_linked_list.c: Likewise. * lib/gl_linkedhash_list.c: Likewise. * lib/gl_list.c: Likewise. * lib/gl_oset.c: Likewise. * lib/gl_rbtree_list.c: Likewise. * lib/gl_rbtree_oset.c: Likewise. * lib/gl_rbtreehash_list.c: Likewise. * lib/imaxabs.c: Likewise. * lib/imaxdiv.c: Likewise. * lib/javacomp.c: Likewise. * lib/javaexec.c: Likewise. * lib/javaversion.c: Likewise. * lib/linebreak.c: Likewise. * lib/localcharset.c: Likewise. * lib/lock.c: Likewise. * lib/mbchar.c: Likewise. * lib/mbswidth.c: Likewise. * lib/mkdtemp.c: Likewise. * lib/pipe.c: Likewise. * lib/printf-args.c: Likewise. * lib/printf-parse.c: Likewise. * lib/progname.c: Likewise. * lib/progreloc.c: Likewise. * lib/readlink.c: Likewise. * lib/sh-quote.c: Likewise. * lib/stpcpy.c: Likewise. * lib/stpncpy.c: Likewise. * lib/strcasecmp.c: Likewise. * lib/strcasestr.c: Likewise. * lib/strcspn.c: Likewise. * lib/striconv.c: Likewise. * lib/strncasecmp.c: Likewise. * lib/strnlen1.c: Likewise. * lib/strstr.c: Likewise. * lib/strtok_r.c: Likewise. * lib/tls.c: Likewise. * lib/tmpdir.c: Likewise. * lib/unicodeio.c: Likewise. * lib/unsetenv.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/vasprintf.c: Likewise. * lib/wait-process.c: Likewise. * lib/xallocsa.c: Likewise. * lib/xsetenv.c: Likewise. * lib/xstriconv.c: Likewise. 2006-09-13 Simon Josefsson * m4/getdate.m4: Don't AC_LIBOBJ([getdate]), automake takes care of that internally, suggested by Ralf Wildenhues . 2006-09-13 Simon Josefsson * gnulib-tool (func_emit_lib_Makefile_am): Use $(LIBOBJS), not @LIBOBJS@. Suggested by Ralf Wildenhues . 2006-09-13 Paul Eggert * lib/_fpending.c: Include unconditionally, since we no longer worry about uses that don't define HAVE_CONFIG_H. * lib/acl.c, lib/alloca.c, lib/argmatch.c, lib/atexit.c: * lib/backupfile.c, lib/basename.c, lib/c-stack.c, lib/c-strtod.c: * lib/calloc.c,lib/ canon-host.c, lib/canonicalize.c, lib/chdir-long.c: * lib/chdir-safer.c, lib/chown.c, lib/cloexec.c, lib/close-stream.c: * lib/closeout.c, lib/creat-safer.c, lib/cycle-check.c, lib/diacrit.c: * lib/dirchownmod.c, lib/dirfd.c, lib/dirname.c, lib/dup-safer.c: * lib/dup2.c, lib/error.c, lib/euidaccess.c, lib/exclude.c: * lib/exitfail.c, lib/fchmodat.c, lib/fchown-stub.c, lib/fd-safer.c: * lib/file-type.c, lib/fileblocks.c, lib/filemode.c, lib/filenamecat.c: * lib/fnmatch.c, lib/fopen-safer.c, lib/fprintftime.c, lib/free.c: * lib/fsusage.c, lib/ftruncate.c, lib/fts-cycle.c, lib/fts.c: * lib/full-write.c, lib/gai_strerror.c, lib/getcwd.c, lib/getdate.y: * lib/getdomainname.c, lib/getgroups.c, lib/gethostname.c: * lib/gethrxtime.c, lib/getloadavg.c, lib/getlogin_r.c: * lib/getndelim2.c, lib/getnline.c, lib/getopt.c, lib/getopt1.c: * lib/getpass.c, lib/gettime.c, lib/gettimeofday.c, lib/getugroups.c: * lib/getusershell.c, lib/glob.c, lib/group-member.c: * lib/hard-locale.c, lib/hash-pjw.c, lib/hash.c, lib/human.c: * lib/idcache.c, lib/inet_ntop.c, lib/inet_pton.c, lib/inttostr.c: * lib/isdir.c, lib/lchown.c, lib/linebuffer.c, lib/long-options.c: * lib/lstat.c, lib/malloc.c, lib/md5.c, lib/memcasecmp.c, lib/memchr.c: * lib/memcmp.c, lib/memcoll.c, lib/memcpy.c, lib/memmove.c: * lib/memrchr.c, lib/mkancesdirs.c, lib/mkdir-p.c, lib/mkdir.c: * lib/mkdirat.c, lib/mkstemp-safer.c, lib/mkstemp.c, lib/modechange.c: * lib/mountlist.c, lib/nanosleep.c, lib/obstack.c, lib/open-safer.c: * lib/openat-die.c, lib/openat.c, lib/pagealign_alloc.c, lib/physmem.c: * lib/pipe-safer.c, lib/posixtm.c, lib/posixver.c, lib/putenv.c: * lib/quote.c, lib/quotearg.c, lib/raise.c, lib/readtokens.c: * lib/readtokens0.c, lib/readutmp.c, lib/realloc.c, lib/regex.c: * lib/rename.c, lib/rmdir.c, lib/rpmatch.c, lib/safe-read.c: * lib/same.c, lib/save-cwd.c, lib/savedir.c, lib/setenv.c: * lib/settime.c, lib/sha1.c, lib/sig2str.c, lib/snprintf.c: * lib/strdup.c, lib/strerror.c, lib/strftime.c, lib/stripslash.c: * lib/strndup.c, lib/strnlen.c, lib/strpbrk.c, lib/strtod.c: * lib/strtoimax.c, lib/strtol.c, lib/strverscmp.c, lib/tempname.c: * lib/time_r.c, lib/timegm.c, lib/tmpfile-safer.c, lib/unlinkdir.c: * lib/userspec.c, lib/utime.c, lib/utimecmp.c, lib/utimens.c: * lib/version-etc-fsf.c, lib/version-etc.c, lib/xalloc-die.c: * lib/xgetcwd.c, lib/xgethostname.c, lib/xmalloc.c, lib/xmemcoll.c: * lib/xnanosleep.c, lib/xreadlink.c, lib/xstrtod.c, lib/xstrtoimax.c: * lib/xstrtol.c, lib/xstrtoumax.c, lib/yesno.c: Likewise. 2006-09-13 Eric Blake * lib/getopt.c: Fix typo in last commit. 2006-09-12 Sergey Poznyakoff * lib/argp-help.c (argp_doc): Make sure NULL is not passed to dgettext. 2006-09-12 Jim Meyering * lib/nanosleep.c: Include before sys/select.h, to avoid compilation failure (due to use of pid_t in latter) on NetBSD 1.6. Reported by Nelson H. F. Beebe. 2006-09-10 Sergey Poznyakoff * lib/argp-parse.c (__argp_parse) [!_LIBC]: Make sure program_invocation_name and program_invocation_short_name are initialized. * lib/argp-namefrob.h: Move declarations of program_invocation_name and program_invocation_short_name to argp.h, so they are visible to user programs. * lib/argp.h: Likewise 2006-09-10 Bruno Haible * modules/mkdtemp (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. 2006-09-10 Bruno Haible * m4/mkdtemp.m4 (gl_PREREQ_MKDTEMP): Don't require gl_AC_TYPE_UINTMAX_T. 2006-09-10 Bruno Haible * lib/mkdtemp.c: Include always. Don't include . 2006-09-09 Sergey Poznyakoff * lib/argp.h (struct argp): Document the N_("..") "\v" N_("..") convention. Text proposed by Bruno Haible. (struct argp_option): Document the use of N_() wrappers. * lib/argp-help.c (argp_doc): Split the untranslated doc string on '\v', and translate the two parts separately, instead of feeding the whole string to gettext. This allows to exclude '\v' from the strings visible to the translator by writing doc strings as N_("..") "\v" N_(".."). 2006-09-09 Paul Eggert * config/srclist.txt: Undo latest change; the bug was fixed. 2006-09-09 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Eliminate lib_LDFLAGS assignments if building a library without libtool. (func_emit_tests_Makefile_am): Likewise. Handle lib_* variables as in func_emit_lib_Makefile_am. (func_import): When building a static library libfoo.a, arrange to define variables LIBFOO_LIBDEPS and LIBFOO_LTLIBDEPS. (func_create_testdir): Likewise. * modules/gc (configure.ac, Makefile.am): If building statically, augment gl_libdeps and gl_ltlibdeps instead of lib_LDFLAGS. * modules/iconvme (configure.ac, Makefile.am): Likewise. * modules/striconv (configure.ac, Makefile.am): Likewise. Based on a suggestion by Ralf Wildenhues. 2006-09-08 Paul Eggert * m4/mktime.m4 (AC_FUNC_MKTIME): Sync from Autoconf. Check for unistd.h too, since Autoconf doesn't assume POSIX. Also: 2006-09-08 Paul Eggert Add year_2050_test to catch glibc bug 2821 . 2006-08-15 Paul Eggert Prefer #ifdef to #if. 2006-04-02 Paul Eggert Return from 'main' instead of calling 'exit'. 2006-09-08 Paul Eggert * lib/mktime.c (guess_time_tm): Fix bug where mktime returned the maximum time_t value rather than (time_t) -1. Problem originally reported by William Bardwell . * lib/isapipe.h (HAVE_FIFO_PIPES) [!defined HAVE_FIFO_PIPES]: Moved to here ... * lib/isapipe.c (HAVE_FIFO_PIPES) [!defined HAVE_FIFO_PIPES]: ... from here. 2006-09-08 Paul Eggert * config/srclist.txt: Temporarily comment out mktime.c until glibc bug 2821 is fixed. 2006-09-08 Jim Meyering Don't make generated files read-only. That would bother too many people. However, do retain the ability to work when targets are read-only: remove the destination and temporary files before writing them (when generated via sed or echo), or by using the -f option for both cp and mv commands. Suggestion to use -f from Paul Eggert. * modules/alloca-opt, modules/argz, modules/arpa_inet: * modules/byteswap, modules/configmake, modules/fcntl: * modules/fnmatch, modules/getopt, modules/glob, modules/inttypes: * modules/localcharset, modules/netinet_in, modules/poll: * modules/stdbool, modules/stdint, modules/sys_select: * modules/sys_socket, modules/sys_stat, modules/sysexits: 2006-09-08 Jim Meyering Avoid new build failure on FreeBSD 6.0. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Include when testing whether getmntinfo uses statvfs. Patch by Pavel Tsekov, in . 2006-09-07 Ralf Wildenhues * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Don't use plain echo. 2006-09-07 Jim Meyering Fix global typo in last change: use chmod u-w, not chmod u-x. Spotted by Paul Eggert and Bruce Korb. * modules/alloca-opt, modules/argz, modules/arpa_inet: * modules/byteswap, modules/configmake, modules/fcntl: * modules/fnmatch, modules/getopt, modules/glob, modules/inttypes: * modules/localcharset, modules/netinet_in, modules/poll: * modules/stdbool, modules/stdint, modules/sys_select: * modules/sys_socket, modules/sys_stat, modules/sysexits: 2006-09-06 Jim Meyering Make generated files be read-only. * modules/alloca-opt (Makefile.am): Work also when $@ is read-only. Ensure that each generated file is now read-only. * modules/argz: Likewise. * modules/arpa_inet: Likewise. * modules/byteswap: Likewise. * modules/configmake: Likewise. * modules/fcntl: Likewise. * modules/fnmatch: Likewise. * modules/getopt: Likewise. * modules/glob: Likewise. * modules/inttypes: Likewise. * modules/netinet_in: Likewise. * modules/poll: Likewise. * modules/stdbool: Likewise. * modules/stdint: Likewise. * modules/sys_select: Likewise. * modules/sys_socket: Likewise. * modules/sys_stat: Likewise. * modules/sysexits: Likewise. * modules/localcharset: Same as above, but continue using temporary file named "t-$@" (why different?) rather than the "$@-t" used everywhere else. * modules/sysexits (Makefile.am): Replace literal occurrences of "sysexit.h" more readable, and more consistent, "$@". 2006-09-06 Bruno Haible * modules/striconv: New file. * modules/xstriconv: New file. * MODULES.html.sh (Internationalization functions): Add striconv, xstriconv. 2006-09-06 Bruno Haible * modules/gc (Makefile.am): Augment lib_LDFLAGS, not lib_LIBADD. * modules/iconvme (Makefile.am): Likewise. Also handle the case of not using libtool correctly. 2006-09-06 Bruno Haible * lib/striconv.h: New file. * lib/striconv.c: New file, merging iconvme.c with GNU gettext's iconvstring.c. * lib/xstriconv.h: New file. * lib/xstriconv.c: New file. 2006-09-06 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Initialize also lib_..._LDFLAGS. 2006-09-05 Ralf Wildenhues * lib/argz_.h: Sync from Libtool. 2006-09-04 George Bosilca and Ralf Wildenhues * lib/libltdl/argz_.h: It's __cplusplus, not _cplusplus. 2006-09-05 Davide Angelocola * modules/trim: New file. 2006-09-05 Davide Angelocola * lib/trim.h: New file. * lib/trim.c: New file. 2006-09-05 Bruno Haible * MODULES.html.sh (String handling): Add trim. 2006-09-04 Karl Berry * config/srclist.txt (signed.m4, gettext.m4): changes not propagated until next release. 2006-09-03 Bruno Haible * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Locate mingw shared libraries correctly. 2006-09-01 Paul Eggert * m4/getloadavg.m4 (gl_GETLOADAVG): Use CONFIGURING_GETLOADAVG, not gl_GETLOADAVG. Omit unneeded semicolons. Problems reported by Ralf Wildenhues in . (gl_PREREQ_GETLOADAVG): Use AC_DEFUN, not m4_define. Put at the end, which is the usual gnulib style. * m4/fstypename.m4 (gl_FSTYPENAME): Use AC_CHECK_MEMBERS instead of doing all the work ourselves. * m4/fsusage.m4 (gl_PREREQ_FSUSAGE_EXTRA): Don't check for sys/statvfs.h since the code doesn't use HAVE_SYS_STATVFS_H. 2006-09-01 Paul Eggert * lib/getloadavg.c: Use CONFIGURING_GETLOADAVG, not gl_GETLOADAVG. Problem reported by Ralf Wildenhues in . * lib/mountlist.c: All uses of HAVE_F_FSTYPENAME_IN_STATFS replaced by HAVE_STRUCT_STATFS_F_FSTYPENAME. 2006-09-01 Paul Eggert * gnulib-tool (func_emit_lib_Makefile_am): Fix typos in yesterday's patch by changing test -n to test -z. 2006-08-31 Paul Eggert * modules/getloadavg (Files): Add m4/getloadavg.m4. (configure.ac): AC_FUNC_GETLOADAVG -> gl_GETLOADAVG, as the former is now obsolescent. * modules/chdir-long (Depends-on): Add fcntl. 2006-08-31 Paul Eggert * m4/fnmatch.m4: Add comment that Autoconf AC_FUNC_FNMATCH is obsolescent, and programs should use gnulib instead. * m4/getloadavg.m4: New file, with contents taken from Autoconf but with prefixes changed. 2006-08-31 Paul Eggert * lib/getloadavg.c [defined gl_GETLOADAVG]: Don't include config.h or stdbool.h, because they might not exist while configuring. * lib/chdir-long.c: Include , for O_DIRECTORY. Don't include unistd.h or limits.h; not needed, since chdir-long.h does that for us. (O_DIRECTORY): Remove. 2006-08-31 Eric Blake * gnulib-tool: Don't let emacs change spaces to TAB. 2006-08-31 Bruno Haible * gnulib-tool: When calling func_import more than once, do it in a subshell. Reported by Eric Blake . 2006-08-31 Bruno Haible * gnulib-tool (nl): Remove variable. (sed_transform_lib_file): Use more robust test for config-h module. (func_import): Fix typo in 2006-08-25 patch. 2006-08-31 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): When --makefile-name was specified, augment Makefile.am variables instead of assigning them. 2006-08-30 Paul Eggert Work around a bug in both the Linux and SunOS 64-bit kernels: nanosleep mishandles sleeps for longer than 2**31 seconds. Problem reported by Frank v Waveren in . * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Require gl_CLOCK_TIME. Check for nanosleep bug. (LIB_NANOSLEEP): Append clock_gettime library if needed. 2006-08-30 Paul Eggert Work around a bug in both the Linux and SunOS 64-bit kernels: nanosleep mishandles sleeps for longer than 2**31 seconds. Problem reported by Frank v Waveren in . * lib/nanosleep.c (BILLION): New constant. (getnow) [HAVE_BUG_BIG_NANOSLEEP]: New functions. (rpl_nanosleep) [HAVE_BUG_BIG_NANOSLEEP]: Completely new implementation. 2006-08-30 Paul Eggert * modules/nanosleep (Depends-on): Add gettime. 2006-08-30 Paul Eggert and Simon Josefsson and Oskar Liljeblad * MODULES.html.sh (Support for building documentation): Add gpl, lgpl. * gnulib-tool (func_import): New license type 'unmodifiable license text'. * modules/fdl: Use it. Longer description. * module/gpl, module/lgpl: New files. 2006-08-30 Jim Meyering * lib/isapipe.c (isapipe): Rename local s/fd/fd_pair/ to avoid shadowing the parameter. 2006-08-29 Ralf Wildenhues Sync from Libtool: 2006-08-28 Ralf Wildenhues * lib/libltdl/argz.c: Use `#ifdef HAVE_CONFIG_H', to facilitate code sharing with gnulib. Report by Eric Blake. 2006-08-29 Paul Eggert * modules/isapipe: New file. * MODULES.html.sh (File descriptor based Input/Output): Add isapipe. 2006-08-29 Paul Eggert * modules/configmake (Makefile.am): Add a comment, and omit the CONFIGMAKE_ prefix from generated macro names. Suggested by Bruno Haible. 2006-08-29 Paul Eggert * m4/isapipe.m4: New file. 2006-08-29 Paul Eggert * lib/isapipe.c, lib/isapipe.h: New files. 2006-08-29 Jim Meyering * modules/configmake (Makefile.am): Make configmake.h depend on Makefile. Otherwise, a stale configmake.h could hang around. 2006-08-29 Eric Blake * lib/error.c (error_at_line, print_errno_message): Match libc, after resolution of upstream bug 3044. 2006-08-29 Bruno Haible * modules/localcharset (Depends-on): Add configmake. (Makefile.am): Remove setting of LIBDIR through DEFS. 2006-08-29 Bruno Haible * lib/localcharset.c: Include configmake.h in order to get LIBDIR defined. 2006-08-28 Paul Eggert * modules/fcntl: New file. * modules/chdir-safer (Depends-on): Add fcntl. * modules/fts: Likewise. * modules/mkdir-p: Likewise. * modules/stdint (Makefile.am): Do not substitute ABSOLUTE_INTTYPES_H. This undoes the most recent change, since we're now addressing the problem in a different way. * gnulib-tool (emit_lib_Makefile_am): Don't put $makefile_name into output, since the output might be called Makefile.am even if $makefile_name is something different. (func_import): Use $makefile_am rather than ${makefile_name-Makefile.am}, to fix a bug where makefile_name was empty. * modules/inttypes (Files): Add m4/inttypes-h.m4. 2006-08-28 Paul Eggert * m4/inttypes.m4 (gl_INTTYPES_H): Move ABSOLUTE_INTTYPES_H code here... * m4/stdint.m4 (gl_STDINT_H): ... from here. This undoes the most recent change to stdint.m4, since we're now addressing the problem in a different way. 2006-08-28 Paul Eggert * m4/fcntl_h.m4: New file. 2006-08-28 Paul Eggert * lib/fcntl_.h: New file. * lib/chdir-safer.c (O_DIRECTORY, O_NOFOLLOW): Remove, now that we have the fcntl module. * lib/dirchownmod.c: Likewise. * lib/fts.c: Likewise. * lib/inttypes_.h [defined _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H]: Include @ABSOLUTE_INTTYPES_H@ if available, but do nothing else. * lib/stdint_.h (_GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H): Define just before including , to avoid circular inclusion. 2006-08-28 Jim Meyering * doc/visibility.texi: Actually read and correct the grammar of the sentence affected by yesterday's change. 2006-08-28 Eric Blake * modules/inttypes (Makefile.am): Fix sed error when inttypes.h needs wrapper. 2006-08-28 Eric Blake * m4/inttypes.m4 (gl_INTTYPES_H): Fix missing #endif. 2006-08-28 Eric Blake * m4/codeset.m4 (AM_LANGINFO_CODESET): Avoid compiler warning. 2006-08-28 Bruno Haible * modules/c-strstr: New file, from GNU gettext. * MODULES.html.sh (String handling): Add c-strstr. 2006-08-28 Bruno Haible * m4/inttypes.m4 (gl_INTTYPES_H): Don't test for the existence of SCNX* macros. Reported by Eric Blake. 2006-08-28 Bruno Haible * lib/vasnprintf.c (EOVERFLOW): Remove definition. (VASNPRINTF): Return a string of length > INT_MAX without failing. * lib/vasprintf.c: Include errno.h, limits.h. (EOVERFLOW): New fallback definition. (vasprintf): Test here whether the string length is > INT_MAX. * lib/vsnprintf.c: Include errno.h, limits.h. (EOVERFLOW): New fallback definition. (vsnprintf): Fix bug when generated string was too long for the buffer. Test here whether the string length is > INT_MAX. 2006-08-28 Bruno Haible * lib/inttypes_.h (SCNX*): Remove definitions. Reported by Eric Blake. 2006-08-28 Bruno Haible * lib/c-strstr.h: New file, from GNU gettext. * lib/c-strstr.c: New file, from GNU gettext. 2006-08-28 Bruno Haible * gnulib-tool: Reorder some statements. 2006-08-28 Bruno Haible * gnulib-tool: New option --makefile-name. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Use $makefile_name. (func_import): Write $makefile_name to the cache file, and read it from there unless explicitly specified. Use $makefile_name as file name instead of Makefile.am. Adjust the recommendations accordingly. 2006-08-28 Bruno Haible * gnulib-tool (func_verify_module): Check against misapplying patch. 2006-08-28 Bruno Haible * gnulib-tool (func_relativize, func_relconcat): New functions. Give an error if --local-dir is given with --update. Remove trailing slashes from $local_gnulib_dir. (func_import): Store the relativized $local_gnulib_dir in gnulib-cache.m4, and read it from there if not specified explicitly. 2006-08-28 Bruno Haible * gnulib-tool (func_get_tests_module): Don't assume that $gnulib_dir is the current directory. Respect also $local_gnulib_dir. 2006-08-28 Bruno Haible Simon Josefsson BeOS portability. * lib/getaddrinfo.c (PF_INET, PF_UNSPEC): New macros. 2006-08-27 Jim Meyering * doc/visibility.texi: Remove duplicate word: "pointer". 2006-08-26 Bruno Haible * modules/inttypes (Files): Add lib/inttypes_.h, remove lib/inttypes.h. Add m4/inttypes.m4, remove m4/_inttypes_h.m4 and m4/include_next.m4. (Makefile.am): Create inttypes.h from inttypes_.h. * modules/stdint (Makefile.am): Substitute also ABSOLUTE_INTTYPES_H. * modules/imaxabs: New file. * modules/imaxdiv: New file. 2006-08-26 Bruno Haible * m4/inttypes.m4: New file. * m4/_inttypes_h.m4: Remove file. * m4/inttypes-pri.m4 (gt_INTTYPES_PRI): Also AC_SUBST PRI_MACROS_BROKEN. * m4/stdint.m4 (gl_STDINT_H): Define also ABSOLUTE_INTTYPES_H. * m4/imaxabs.m4: New file. * m4/imaxdiv.m4: New file. 2006-08-26 Bruno Haible * lib/inttypes_.h: New file. * lib/inttypes.h: Remove file. * lib/stdint_.h: Include through its absolute filename. * lib/imaxabs.c: New file. * lib/imaxdiv.c: New file. 2006-08-25 Paul Eggert New config-h module, so that "make" output needn't be cluttered by -DHAVE_CONFIG_H. * MODULES.html.sh (Support for building libraries and executables): Add config-h. * modules/config-h: New file. * gnulib-tool (nl, sed_transform_lib_file): New vars. (func_import): Turn "#ifdef HAVE_CONFIG_H" to "#if 1" if the config-h module is used. New configmake module, so that "make" output needn't be cluttered by fluff like '-DLIBDIR=\"/usr/local/lib\"'. * MODULES.html.sh (Support for building libraries and executables): Add configmake. * modules/configmake: New file. 2006-08-25 Paul Eggert * m4/config-h.m4: New file. 2006-08-24 Paul Eggert * config/srclist.txt: Add elisp-comp. 2006-08-24 Paul Eggert * MODULES.html.sh (Support for building libraries and executables): Add elisp-comp. * build-aux/elisp-comp: New file. * modules/elisp-comp: New file. 2006-08-24 Bruno Haible * gnulib-tool (func_create_testdir): Use non-default values of sourcebase and m4base. 2006-08-24 Bruno Haible * MODULES.html.sh (Compatibility checks for POSIX:2001 functions: Fix HTML structure. 2006-08-23 Paul Eggert * modules/openat (Depends-on): Add lchown. 2006-08-23 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Emit an invocation of gl_LOCK_EARLY instead of gl_LOCK. 2006-08-23 Bruno Haible * m4/lock.m4 (gl_LOCK_BODY): Change the default value of gl_use_threads on OSF/1 to no. Reported by Stephen Cartwright . 2006-08-23 Bruno Haible * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Don't consider BeOS statvfs as unusable. * m4/lock.m4 (gl_LOCK_EARLY): Renamed from gl_LOCK. (gl_LOCK_BODY): Remove gl_PREREQ_LOCK invocation. (gl_LOCK): New macro. 2006-08-22 Simon Josefsson * modules/gc-md5 (Makefile.am): Need to add md5.h, after changes to md5 module. 2006-08-22 Simon Josefsson * MODULES.html.sh: Add "Support for maintaining and release projects". * build-aux/gnupload: New file, from coreutils. 2006-08-22 Paul Eggert Avoid the need for AC_LIBSOURCES in m4 macros. * modules/arcfour (EXTRA_DIST): Add arcfour.h. * modules/arctwo (EXTRA_DIST): Add arctwo.h. * modules/check-version (EXTRA_DIST): Add check-version.h. * modules/crc (EXTRA_DIST): Add crc.h. * modules/des (EXTRA_DIST): Add des.h. * modules/gc (EXTRA_DIST): Add gc.h. * modules/getdelim (EXTRA_DIST): Add getdelim.h. * modules/getline (EXTRA_DIST): Add getline.h. * modules/getlogin_r (EXTRA_DIST): Add getlogin_r.h. * modules/hmac-md5 (EXTRA_DIST): Add hmac.h. * modules/hmac-sha1 (EXTRA_DIST): Add hmac.h. * modules/md2 (EXTRA_DIST): Add md2.h. * modules/md4 (EXTRA_DIST): Add md4.h. * modules/pagealign_alloc (EXTRA_DIST): Add pagealign_alloc.h. * modules/read-file (EXTRA_DIST): Add read-file.h. * modules/readline (EXTRA_DIST): Add readline.h. * modules/rijndael (EXTRA_DIST): Add rijndael-alg-fst.h, rijndael-api-fst.h. 2006-08-22 Paul Eggert * m4/rijndael.m4 (gl_ARCFOUR): * m4/arctwo.m4 (gl_ARCTWO): * m4/check-version.m4 (gl_CHECK_VERSION): * m4/crc.m4 (gl_CRC): * m4/des.m4 (gl_DES): * m4/gc-pbkdf2-sha1.m4 (gl_GC_PBKDF2_SHA1): * m4/gc.m4 (gl_GC): * m4/getdelim.m4 (gl_FUNC_GETDELIM): * m4/getline.m4 (gl_FUNC_GETLINE): * m4/getlogin_r.m4 (gl_GETLOGIN_R_SUBSTITUTE): * m4/hmac-md5.m4 (gl_HMAC_MD5): * m4/hmac-sha1.m4 (gl_HMAC_SHA1): * m4/md2.m4 (gl_MD2): * m4/md4.m4 (gl_MD4): * m4/pagealign_alloc.m4 (gl_PAGEALIGN_ALLOC): * m4/read-file.m4 (gl_FUNC_READ_FILE): * m4/readline.m4 (gl_FUNC_READLINE): * m4/rijndael.m4 (gl_RIJNDAEL): Don't use AC_LIBSOURCES; instead, rely on the files in ../modules/ to get the necessary .h files and whatnot. 2006-08-22 Paul Eggert * config/srclist.txt: Remove gnupload, since coreutils now syncs from gnulib rather than the other way around. * config/srclistvars.sh (COREUTILS): Remove. 2006-08-22 Jim Meyering * modules/mkdir-p (Makefile.am): Fix typo: s/lib+SOURCES/lib_SOURCES/. * modules/getpass-gnu (Makefile.am): Add getpass.h to EXTRA_DIST. 2006-08-22 Eric Blake * modules/regexprops-generic: New file. * MODULES.html.sh (Support for building documentation): List it. 2006-08-22 Eric Blake * m4/stdint_h.m4 (gl_AC_HEADER_STDINT_H): Avoid compiler warning. * m4/inttypes_h.m4 (gl_AC_HEADER_INTTYPES_H): Likewise. * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Likewise. * m4/intmax_t.m4 (gt_AC_TYPE_INTMAX_T): Likewise. 2006-08-22 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Don't treat lib_LIBRARIES and lib_LTLIBRARIES like the other lib_* variables. 2006-08-22 Bruno Haible * build-aux/x-to-1.in: New file, from GNU gettext. 2006-08-22 Bruno Haible * m4/readutmp.m4 (gl_READUTMP): Compile readutmp.c only if or exists. 2006-08-22 Bruno Haible * lib/readutmp.h: Skip most definitions if neither nor exists. 2006-08-21 Paul Eggert BeOS portability. * lib/dirchownmod.c (dirchownmod): Don't use fchmod if it doesn't exist. Problem reported by Bruno Haible. 2006-08-21 Paul Eggert Avoid the need for AC_LIBSOURCES in m4 macros. * modules/acl (EXTRA_DIST): Add acl.h. * modules/argmatch (Files): Add m4/argmatch.m4. (configure.ac): Add gl_ARGMATCH. (EXTRA_DIST): Renamed from lib_SOURCES, for consistency with the other modules. Remove argmatch.c. * modules/backupfile (EXTRA_DIST): Add backupfile.h. * modules/c-strtod (EXTRA_DIST): Add c-strtod.h. * modules/c-strtold (EXTRA_DIST): Add c-strtod.c, c-strtod.h. * modules/canonhost (EXTRA_DIST): Add c-canonhost.h. * modules/canonicalize (EXTRA_DIST): Add canonicalize.h. * modules/chdir-long (EXTRA_DIST): Add chdir-long.h. * modules/chdir-safer (EXTRA_DIST): Add chdir-safer.h. * modules/cloexec (EXTRA_DIST): Add cloexec.h. * modules/close-stream (EXTRA_DIST): Add close-stream.h. * modules/closeout (EXTRA_DIST): Add closeout.h. * modules/cycle-check (EXTRA_DIST): Add cycle-check.h. * modules/dev-ino (EXTRA_DIST): Add dev-ino.h. * modules/dirfd (EXTRA_DIST): Add dirfd.h. * modules/dirname (EXTRA_DIST): Renamed from lib_SOURCES. Add dirname.h; remove basename.c and stripslash.c. * modules/exclude (EXTRA_DIST): Add exclude.h. * modules/exitfail (EXTRA_DIST): Add exitfail.h. * modules/fcntl-safer (EXTRA_DIST): Add fcntl-safer.h fcntl--.h. * modules/file-type (EXTRA_DIST): Add file-type.h. * modules/filemode (EXTRA_DIST): Add filemode.h. * modules/filenamecat (EXTRA_DIST): Add filenamecat.h. * modules/fopen-safer (EXTRA_DIST): Add stdio-safer.h stdio--.h. * modules/fpending (EXTRA_DIST): Add __fpending.h. * modules/fprintftime (EXTRA_DIST): Add fprintftime.h. * modules/fsusage (EXTRA_DIST): Add fsusage.h. * modules/fts (EXTRA_DIST): Add fts_.h fts-cycle.c. * modules/getcwd (EXTRA_DIST): Add getcwd.h. * modules/getdate (EXTRA_DIST): Add getdate.c. * modules/gethrxtime (EXTRA_DIST): Add gethrxtime.h xtime.h. * modules/getpagesize (EXTRA_DIST): Add getpagesize.h. * modules/getpass (EXTRA_DIST): Add getpass.h. * modules/glob (EXTRA_DIST): Add glob_.h glob-libc.h. * modules/group-member (EXTRA_DIST): Add group-member.h. * modules/hard-locale (EXTRA_DIST): Add hard-locale.h. * modules/hash (EXTRA_DIST): Add hash.h. * modules/human (EXTRA_DIST): Add human.h. * modules/inttypes (EXTRA_DIST): Add inttypes.h. * modules/lchmod (EXTRA_DIST): Add lchmod.h. * modules/lchown (EXTRA_DIST): Add lchown.h. * modules/long-options (EXTRA_DIST): Add long-options.h. * modules/lstat (EXTRA_DIST): Add lstat.h. * modules/md5 (EXTRA_DIST): Add memcasecmp.h. * modules/memcoll (EXTRA_DIST): Add memcoll.h. * modules/mempcpy (EXTRA_DIST): Add mempcpy.h. * modules/memrchr (EXTRA_DIST): Add memrchr.h. * modules/memxor (EXTRA_DIST): Add memxor.h. * modules/mkancesdirs (EXTRA_DIST): Add mkancesdirs.h. * modules/mkdir-p (EXTRA_DIST): Add modechange.h. * modules/mountlist (EXTRA_DIST): Add mountlist.h. * modules/openat (EXTRA_DIST): Add at-func.c openat.h openat-priv.h. * modules/pathmax (EXTRA_DIST): Add pathmax.h. * modules/physmem (EXTRA_DIST): Add physmem.h. * modules/posixtm (EXTRA_DIST): Add posixtm.h. * modules/posixver (EXTRA_DIST): Add posixver.h. * modules/quote (EXTRA_DIST): Add quote.h. * modules/quotearg (EXTRA_DIST): Add quotearg.h. * modules/readtokens (EXTRA_DIST): Add readtokens.h. * modules/readutmp (EXTRA_DIST): Add readutmp.h. * modules/regex (EXTRA_DIST): Add regcomp.c regex.h regex_internal.c regex_internal.h regexec.c. * modules/safe-read (EXTRA_DIST): Add safe-read.h. * modules/safe-write (EXTRA_DIST): Add safe-write.h. * modules/same (EXTRA_DIST): Add same.h. * modules/same-inode (EXTRA_DIST): Add same-inode.h. * modules/save-cwd (EXTRA_DIST): Add save-cwd.h. * modules/savedir (EXTRA_DIST): Add savedir.h. * modules/sha1 (EXTRA_DIST): Add sha1.h. * modules/sig2str (EXTRA_DIST): Add sig2str.h. * modules/stat-macros (EXTRA_DIST): Add stat-macros.h. * modules/stat-time (EXTRA_DIST): Add stat-time.h. * modules/stdlib-safer (EXTRA_DIST): Add stdlib-safer.h stdlib--.h. * modules/strdup (EXTRA_DIST): Add strdup.h. * modules/strftime (EXTRA_DIST): Add strftime.h. * modules/strndup (EXTRA_DIST): Add strndup.h. * modules/strnlen (EXTRA_DIST): Add strnlen.h. * modules/strverscmp (EXTRA_DIST): Add strverscmp.h. * modules/time_r (EXTRA_DIST): Add time_r.h. * modules/timespec (EXTRA_DIST): Add timespec.h. * modules/tmpfile-safer (EXTRA_DIST): Add stdio-safer.h stdio--.h. * modules/unistd-safer (EXTRA_DIST): Add unistd-safer.h unistd--.h. * modules/unlinkdir (EXTRA_DIST): Add unlinkdir.h. * modules/unlocked-io (EXTRA_DIST): Add unlocked-io.h. * modules/userspec (EXTRA_DIST): Add userspec.h. * modules/utimecmp (EXTRA_DIST): Add utimecmp.h. * modules/utimens (EXTRA_DIST): Add utimens.h. * modules/xalloc (EXTRA_DIST): Add xalloc.h. * modules/xgetcwd (EXTRA_DIST): Add xgetcwd.h. * modules/xnanosleep (EXTRA_DIST): Add xnanosleep.h. * modules/xreadlink (EXTRA_DIST): Add xreadlink.h. * modules/xstrtod (EXTRA_DIST): Add xstrtod.h. * modules/xstrtol (EXTRA_DIST): Add xstrtol.h. * modules/xstrtold (EXTRA_DIST): Add xstrtod.c xstrtod.h. * modules/yesno (EXTRA_DIST): Add yesno.h. 2006-08-21 Paul Eggert * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Check for fchmod. * m4/argmatch.m4: New file, from coreutils with AC_LIBSOURCES removed. * m4/dev-ino.m4, same-inode.m4: Remove. * m4/_inttypes_h.m4 (gl_INTTYPES_H): * m4/acl.m4 (AC_FUNC_ACL): * m4/backupfile.m4 (gl_BACKUPFILE): * m4/c-strtod.m4 (gl_C99_STRTOLD): * m4/canon-host.m4 (gl_CANON_HOST): * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME): * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): * m4/chdir-safer.m4 (gl_CHDIR_SAFER): * m4/cloexec.m4 (gl_CLOEXEC): * m4/close-stream.m4 (gl_CLOSE_STREAM): * m4/closeout.m4 (gl_CLOSEOUT): * m4/dirfd.m4 (gl_FUNC_DIRFD): * m4/dirname.m4 (gl_DIRNAME): * m4/exclude.m4 (gl_EXCLUDE): * m4/exitfail.m4 (gl_EXITFAIL): * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): * m4/file-type.m4 (gl_FILE_TYPE): * m4/filemode.m4 (gl_FILEMODE): * m4/filenamecat.m4 (gl_FILE_NAME_CONCAT): * m4/fpending.m4 (gl_FUNC_FPENDING): * m4/fprintftime.m4 (gl_FPRINTFTIME): * m4/fts.m4 (gl_FUNC_FTS): * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): * m4/getdate.m4 (gl_GETDATE): * m4/gethrxtime.m4 (gl_GETHRXTIME): * m4/getpagesize.m4 (gl_GETPAGESIZE): * m4/getpass.m4 (gl_FUNC_GETPASS): * m4/gettime.m4 (gl_GETTIME): * m4/getugroups.m4 (gl_GETUGROUPS): * m4/glob.m4 (gl_GLOB_SUBSTITUTE): * m4/group-member.m4 (gl_FUNC_GROUP_MEMBER): * m4/hard-locale.m4 (gl_HARD_LOCALE): * m4/hash.m4 (gl_HASH): * m4/idcache.m4 (gl_IDCACHE): * m4/lchmod.m4 (gl_FUNC_LCHMOD): * m4/lchown.m4 (gl_FUNC_LCHOWN): * m4/long-options.m4 (gl_LONG_OPTIONS): * m4/lstat.m4 (gl_FUNC_LSTAT): * m4/md5.m4 (gl_MD5): * m4/memcasecmp.m4 (gl_MEMCASECMP): * m4/memcoll.m4 (gl_MEMCOLL): * m4/mempcpy.m4 (gl_FUNC_MEMPCPY): * m4/memrchr.m4 (gl_FUNC_MEMRCHR): * m4/memxor.m4 (gl_MEMXOR): * m4/mkancesdirs.m4 (gl_MKANCESDIRS): * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): * m4/modechange.m4 (gl_MODECHANGE): * m4/mountlist.m4 (gl_MOUNTLIST): * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): * m4/openat.m4 (gl_FUNC_OPENAT): * m4/pathmax.m4 (gl_PATHMAX): * m4/physmem.m4 (gl_PHYSMEM): * m4/posixtm.m4 (gl_POSIXTM): * m4/posixver.m4 (gl_POSIXVER): * m4/quote.m4 (gl_QUOTE): * m4/quotearg.m4 (gl_QUOTEARG): * m4/readtokens.m4 (gl_READTOKENS): * m4/readutmp.m4 (gl_READUTMP): * m4/regex.m4 (gl_REGEX): * m4/safe-read.m4 (gl_SAFE_READ): * m4/safe-write.m4 (gl_SAFE_WRITE): * m4/same.m4 (gl_SAME): * m4/save-cwd.m4 (gl_SAVE_CWD): * m4/savedir.m4 (gl_SAVEDIR): * m4/settime.m4 (gl_SETTIME): * m4/sha1.m4 (gl_SHA1): * m4/sig2str.m4 (gl_FUNC_SIG2STR): * m4/stat-macros.m4 (gl_STAT_MACROS): * m4/stat-time.m4 (gl_STAT_TIME): * m4/stdio-safer.m4 (gl_FOPEN_SAFER): * m4/stdlib-safer.m4 (gl_STDLIB_SAFER): * m4/strdup.m4 (gl_FUNC_STRDUP): * m4/strftime.m4 (gl_FUNC_GNU_STRFTIME): * m4/strndup.m4 (gl_FUNC_STRNDUP): * m4/strnlen.m4 (gl_FUNC_STRNLEN): * m4/strverscmp.m4 (gl_FUNC_STRVERSCMP): * m4/time_r.m4 (gl_TIME_R): * m4/timespec.m4 (gl_TIMESPEC): * m4/unistd-safer.m4 (gl_UNISTD_SAFER): * m4/unlinkdir.m4 (gl_UNLINKDIR): * m4/unlocked-io.m4 (gl_FUNC_GLIBC_UNLOCKED_IO): * m4/userspec.m4 (gl_USERSPEC): * m4/utimecmp.m4 (gl_UTIMECMP): * m4/utimens.m4 (gl_UTIMENS): * m4/xalloc.m4 (gl_XALLOC): * m4/xgetcwd.m4 (gl_XGETCWD): * m4/xnanosleep.m4 (gl_XNANOSLEEP): * m4/xreadlink.m4 (gl_XREADLINK): * m4/xstrtod.m4 (gl_XSTRTOD): * m4/yesno.m4 (gl_YESNO): Don't use AC_LIBSOURCES; instead, rely on the files in ../modules/ to get the necessary .h files and whatnot. 2006-08-21 Mark D. Baushke Bruno Haible * gnulib-tool (func_verify_module): Work around Sun's non-POSIX 1003.2 /bin/sh understanding of '!' conditional negation. 2006-08-21 Jim Meyering * modules/openat (Depends-on): Really alphabetize. * modules/acl (Depends-on): Add error and quote. * check-module (find_included_lib_files): Add at-func.c to the ok-to-include-more-than-once white list. * modules/openat (Depends-on): Add lstat. Alphabetize. 2006-08-21 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Emit a pkgdata_DATA variable only if some snippets add contents to it. Reported by Martin Lambers . 2006-08-21 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): If the snippets already specify an installation location, don't emit a noinst_LIBRARIES or noinst_LTLIBRARIES assignment. 2006-08-21 Bruno Haible BeOS portability. * modules/mbchar (Include): Don't test HAVE_WCTYPE_H any more, since BeOS has mbrtowc() but no . 2006-08-21 Bruno Haible BeOS portability. * m4/mbchar.m4 (gl_MBCHAR): Compile mbchar.c also if doesn't exist. 2006-08-21 Bruno Haible BeOS portability. * lib/mbchar.h: Include only if it exists. 2006-08-20 Paul Eggert Remove files that are no longer needed by their respective modules. * m4/obstack.m4: Remove. * m4/strerror_r.m4: Remove. * m4/uint32_t.m4: Remove. * m4/uintptr_t.m4: Remove. * m4/ullong_max.m4: Remove. * m4/xstrtoimax.m4: Remove. * m4/xstrtoumax.m4: Remove. * m4/cycle-check.m4 (gl_CYCLE_CHECK): Do not require gl_AC_TYPE_UINTMAX_T, gl_STRUCT_DEV_INO, or gl_SAME_INODE, since gnulib dependencies now capture this. * m4/cycle-check.m4 (gl_CYCLE_CHECK): Do not use AC_LIBSOURCES, since gnulib modules now do this. * m4/fsusage.m4 (gl_FSUSAGE): Likewise. * m4/human.m4 (gl_HUMAN): Likewise. * m4/inttostr.m4 (gl_INTTOSTR): Likewise. * m4/xstrtol.m4 (gl_XSTRTOL): Likewise. * m4/filemode.m4 (gl_FILEMODE): Require AC_STRUCT_ST_DM_MODE. * m4/filemode.m4 (gl_PREREQ_FSUSAGE_EXTRA): Do not require gl_AC_TYPE_INTMAX_T or gl_AC_TYPE_UINTMAX_T, since we now require stdint. * m4/human.m4 (gl_HUMAN): Likewise. * m4/inttostr.m4 (gl_PREREQ_INTTOSTR): Likewise. * m4/mkstemp.m4 (gl_PREREQ_TEMPNAME): Likewise. * m4/strtoimax.m4 (gl_PREREQ_STRTOIMAX): Likewise. * m4/strtoumax.m4 (gl_PREREQ_STRTOUMAX): Likewise. * m4/xstrtol (gl_XSTRTOL): Likewise. * m4/gethrxtime.m4 (gl_XTIME): gl_AC_TYPE_LONG_LONG -> AC_TYPE_LONG_LONG_INT. * m4/strtoimax.m4 (gl_PREREQ_STRTOIMAX): Likewise. * m4/strtoll.m4 (gl_FUNC_STRTOLL): Likewise. * m4/strtoull.m4 (gl_FUNC_STRTOULL): Likewise, for unsigned long. * m4/strtoumax.m4 (gl_PREREQ_STRTOUMAX): Likewise. * m4/human.m4 (gl_HUMAN): Do not require AM_STDBOOL_H since we depend on stdbool. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL_H, gl_PREREQ_XSTRTOL): Remove. (gl_PREREQ_XSTRTOUL): Remove. * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Check for hasmntopt. * m4/posixver.m4: Fix comment since head -1 now works even in POSIX mode. 2006-08-20 Paul Eggert Add and change modules to make it easier for coreutils to use gnulib-tool. * modules/backupfile (Files): Remove m4/d-ino.m4. (Depends-on): Add d-ino. * modules/cycle-check (Depends-on): Add stdint. (lib_SOURCES): Add cycle-check.h. * modules/d-ino: New module. * modules/d-type: New module. * modules/error (Files): Remove m4/strerror_r.m4. * modules/filemode (Files): Add m4/st_dm_mode.m4. * modules/fsuage (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. (lib_SOURCES): Add fsusage.h. * modules/getcwd (Files): Remove d-ino.m4. (Depends-on): Add d-ino. * modules/getndelim2 (Depends-on): Add stdint. * modules/glob (Files): Remove m4/d-type.m4. (Depends-on): Add d-type. * modules/host-os: New module. * modules/human (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. * Depends-on: Add stdint. (lib_SOURCES): Add human.h. * modules/inttostr (Files): Remove m4/intmax_t.m4, m4/inttostr.m4, m4/inttypes_h.m4, m4/longlong.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4. (Depends-on): Add stdint. (EXTRA_DIST): Add inttostr.h. * modules/lchmod: New module. * modules/link-follow: New module. * modules/mkdir-p (Files): Remove lib/lchmod.h, m4/lchmod.m4. (Depends-on): Add lchmod. * modules/mkstemp (Files): Remove m4/ulonglong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. * modules/obstack (Files): Remove m4/inttypes_h.m4, m4/obstack.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4. (Depends-on): Add stdint. (configure.ac): Change gl_OBSTACK to AC_FUNC_OBSTACK. * modules/perl: New module. * modules/regex (Depends-on): Add stdint. * modules/rmdir-errno: New module. * modules/strtoimax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4, m4/intmax_t.m4. (Depends-on): Add stdint. * modules/strtoumax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4. (Depends-on): Add stdint. * modules/unlink-busy: New module. * modules/utimecmp (Depends-on): Add stdint. * modules/uptime: New module. * modules/winsz-ioctl: New module. * modules/winsz-termios: New module. * modules/xnanosleep (Depends-on): Add nanosleep. * modules/ullong_max: Remove. * modules/xstrtoimax (Files): Remove m4/xstrtoimax.m4. (configure.ac): Remove gl_XSTRTOIMAX; no action needed now. * modules/xstrtol (Files): Remove m4/ulonglong.m4, m4/longlong.m4, m4/stdint_h.m4, m4/inttypes_h.m4, m4/uintmax_t.m4, m4/intmax_t.m4. (Depends-on): Add inttypes. (lib_SOURCES): Add xstrtol.h. * modules/xstrtoumax (Files): Remove m4/xstrtoumax.m4. (configure.ac): Remove gl_XSTRTOUMAX; no action needed now. * MODULES.html.sh: Move 'assert' into the assert section. Move 'dummy' into the linking section. Remove ullong_max. Add section for compatibility checks for POSIX:2001 functions, and put d-ino, d-type, link-follow, rmdir-errno, unlink-busy, winsz-ioctl, and winsz-termios into it. Add lchmod. Add top-level Misc section and put host-os, perl, and uptime into it. 2006-08-20 Paul Eggert * lib/cycle-check.h: Include unconditionally, since we now assume the stdint module. Do not include inttypes.h. * lib/fsusage.h: Likewise. * lib/getndelim2.c: Likewise. * lib/human.h: Likewise. * lib/inttostr.h: Likewise. * lib/obstack.c: Likewise. * lib/regex_internal.h: Likewise. * lib/tempname.c: Likewise. * lib/utimecmp.c: Likewise. * lib/xstrtol.h: Likewise. * lib/stat_.h: Fix typo: HAVE_FUNC_LSTAT -> HAVE_LSTAT. * lib/strtoimax.c: Adjust to macro name changes in Autoconf, e.g., HAVE_LONG_LONG -> HAVE_LONG_LONG_INT. * lib/xtime.h: Likewise. 2006-08-19 Paul Eggert * modules/openat (Files): Add lib/fchmodat.c. Fixes problem reported by Jay Youngman. 2006-08-19 Paul Eggert * lib/fchmodat.c: New file, from coreutils. This was inadvertently omitted in the 2006-08-17 update. Problem reported by Jay Youngman. 2006-08-18 Paul Eggert Bruno Haible * m4/bison-i18n.m4 (BISON_I18N): Also handle the case where yacc exists and is a script that invokes bison. Tighten the code. Add comments. 2006-08-18 Jim Meyering * m4/gethrxtime.m4 (gl_PREREQ_GETHRXTIME): Also check for CLOCK_REALTIME, since gethrxtime may revert to using clock_gettime via gettime.c. Gabor Z. Papp reported that gethrxtime-using programs failed to link due to unresolved clock_gettime on a linux-2.4.x system. 2006-08-18 Bruno Haible * modules/bison-i18n: New file. * MODULES.html.sh (Internationalization functions): Add it. 2006-08-18 Bruno Haible * m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Also check for sys/statvfs.h. When getmntinfo was found, check its declaration and set either MOUNTED_GETMNTINFO or MOUNTED_GETMNTINFO2 depending on it. 2006-08-18 Bruno Haible * m4/bison-i18n.m4: New file, from bison. 2006-08-18 Bruno Haible * lib/mountlist.c [MOUNTED_GETMNTINFO2]: Include sys/statvfs.h. (ME_DUMMY): Treat "kernfs" as a dummy. (read_file_system_list) [MOUNTED_GETMNTINFO2]: Implement. 2006-08-17 Paul Eggert Update from coreutils. 2006-08-15 Jim Meyering * m4/openat.m4 (gl_FUNC_OPENAT): Add at-func.c via AC_LIBSOURCES. 2006-01-17 Jim Meyering * m4/fts.m4 (gl_FUNC_FTS_CORE): Depend on gl_FUNC_OPENAT. 2006-01-11 Jim Meyering * m4/openat.m4 (gl_FUNC_OPENAT): Require and compile fchmodat.c. Check for the lchmod function. 2006-08-17 Paul Eggert Update from coreutils. * lib/__fpending.h: Add copyright notice. * lib/fprintftime.h: Likewise. * lib/savedir.c: Use (C) in copyright notice. * lib/savedir.h: Likewise. 2006-08-15 Jim Meyering * lib/at-func.c: New file, with the logic of all emulated at-functions. * lib/openat-priv.h: Include and define ENOSYS, in support of the EXPECTED_ERRNO macro. * lib/openat.c (fstatat, unlinkat, fchownat): Remove function definitions. Instead, define the appropriate symbols and include "at-func.c". * lib/mkdirat.c (mkdirat): Likewise. * lib/fchmodat.c (fchmodat): Likewise. (ENOSYS): Remove definition. * lib/openat.c: Don't include , now that "openat-priv.h" does it. Don't include "unistd--.h" -- it wasn't ever used. 2006-01-17 Jim Meyering Rewrite fts.c not to change the current working directory, by using openat, fstatat, fdopendir, etc.. * lib/fts.c [! _LIBC]: Include "openat.h" and "unistd--.h". (HAVE_OPENAT_SUPPORT): Define. [_LIBC] (fchdir): Don't undef or define; no longer used. (FCHDIR): Define in terms of cwd_advance_fd rather than fchdir. Now, this `function' always succeeds, and consumes its file descriptor parameter -- so callers must not close such FDs. Update callers. (diropen_fd, opendirat, cwd_advance_fd): New functions. (diropen): Add parameter, SP. Adjust all callers. Implement using diropen_fd, rather than open. (fts_open): Initialize new member, fts_cwd_fd. Remove fts_rft-setting code. (fts_close): Close fts_cwd_fd, if necessary. (__opendir2): Define in terms of opendir or opendirat, depending on whether the FST_NOCHDIR flag is set. (fts_build): Since fts_safe_changedir consumes its FD, and since this code must do `closedir(dirp)', dup the dirfd(dirp) argument, and close the dup'd file descriptor upon failure. (fts_stat): Use fstatat(...AT_SYMLINK_NOFOLLOW) in place of lstat. (fts_safe_changedir): Tweak semantics to reflect that this function now calls cwd_advance_fd and hence consumes its FD argument. * lib/fts_.h [struct FTS] (fts_cwd_fd): New member. [struct FTS] (fts_rft): Remove now-unused member. [struct FTS] (fts_cycle.state): Improve comment. * lib/openat.c (openat_needs_fchdir): New function. * lib/openat.h (openat_needs_fchdir): Declare it. 2006-08-16 Paul Eggert * lib/memcoll.c (memcoll): Set errno = 0 in the shortcut case, too. Problem and fix reported by Pádraig Brady in . 2006-08-15 Paul Eggert * modules/cycle-check (configure.ac): Add gl_CYCLE_CHECK. 2006-08-15 Paul Eggert * lib/memcoll.c (memcoll): Optimize for the common case where the arguments are bytewise equal. 2006-08-15 Paul Eggert * doc/regexprops-generic.texi: Add a copyright notice. 2006-08-15 Bruno Haible * modules/tmpdir (License): Change to LGPL. 2006-08-15 Bruno Haible * gnulib-tool (func_all_modules, func_verify_module): COPYING is not a module. 2006-08-14 Simon Josefsson * config/srclist.txt: Add gnupload. 2006-08-14 Paul Eggert Change copyright notice from LGPL 2 to GPL 2, since that's the standard form used in the gnulib repository. * tests/test-lock.c: Likewise. * tests/test-stdint.c: Likewise. * tests/test-tls.c: Likewise. * users.txt: Add bison, diffutils, libprelude, prelude-lml, prelude-manager. User shorter URLs for GNU projects, without '?'. Add copyright notice. * check-module: Add copyright notice. Output a copyright notice if "--version" is specified. * modules/COPYING: New file. * tests/test-getaddrinfo.c: Add copyright notice. * tests/test-verify.c: Likewise. 2006-08-14 Paul Eggert Change copyright notice from LGPL 2 to GPL 2, since that's the standard form used in the gnulib repository. * lib/lock.c: LGPL -> GPL. * lib/lock.h: Likewise. * lib/strnlen1.c: Likewise. * lib/strnlen1.h: Likewise. * lib/tls.c: Likewise. * lib/tls.h: Likewise. * lib/tmpdir.c: Likewise. * lib/TODO: Remove; this belongs only in coreutils. 2006-08-14 Paul Eggert Add copyright notices to long-enough files that lack them, since otherwise the files aren't clearly free. Use the same notice that getdate.texi already uses. * doc/alloca-opt.texi: Add copyright notice. * doc/alloca.texi: Likewise. * doc/ctime.texi: Likewise. * doc/functions.texi: Likewise. * doc/gcd.texi: Likewise. * doc/gnulib-tool.texi: Likewise. * doc/inet_ntoa.texi: Likewise. * doc/visibility.texi: Likewise. * doc/getdate.texi: Update FDL version from 1.1 to 1.2. * doc/quote.texi: Add copyright notice. * doc/solaris-versions: Add SunOS 5.10, SunOS 1.x, SunOS 4.0, SunOS 4.0.x, SunOS 4.1.1.1, SunOS 4.1.1_U1, SunOS 4.1.3B. SunOS 4.1.3 was Solaris 1.1A. Remove space before B in Solaris 1.1.1B. Mention SunOS 5.11. Mention that everything before SunOS 5.7 is now obsolete, and give a pointer to the Sun list. Add copyright notice. 2006-08-14 Paul Eggert * config/srclistvars.sh: Add copyright notice. 2006-08-14 Eric Blake Import the following change from libc: 2006-08-12 Ulrich Drepper Upstream bug 2997. * lib/misc/error.c: Add space between program name and message if file name is missing. 2006-08-12 Karl Berry * config/srclist.txt (ssize_t.m4, sig_atomic_t.m4, signalblocking.m4): remove, these originate in gnulib now. 2006-08-11 Ralf Wildenhues * doc/Makefile (standards.info standards.html standards.dvi): Also depend on make-stds.texi. 2006-08-11 Paul Eggert * lib/pipe-safer.c (pipe_safer): Fix misspelling: HAVE_FUNC_PIPE -> HAVE_PIPE. Fix a file descriptor leak when fd_safer fails. * lib/regex_internal.c (re_string_skip_chars): Don't assume WEOF fits in wchar_t. Problem reported by Eric Blake. * lib/snprintf.c (snprintf): memcpy LEN bytes, not SIZE - 1, when LEN is smaller than SIZE. Suggested by Bruno Haible. Also, help the compiler to keep LEN in a register. 2006-08-11 Eric Blake * users.txt: Sort. Add tar. 2006-08-11 Bruno Haible * users.txt: New file. 2006-08-11 Bruno Haible * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Include and before . Needed for OSF/1 and BSD/OS. 2006-08-10 Paul Eggert * modules/snprintf (Depends-on): Remove minmax. (Maintainer): Add self and Bruno. 2006-08-10 Paul Eggert * lib/.cppi-disable: Add snprintf.h, socket_.h. * lib/snprintf.c: Include and . (EOVERFLOW): Define if the system does not. Do not include "minmax.h"; it wasn't used. (snprintf): Don't assume size_t promotes to an unsigned type. Fix bug when generated string was too long for the buffer: the buffer's contents are supposed to be the initial prefix of the output. Don't assume vasnprintf returns EOVERFLOW if the size exceeds INT_MAX; do the check ourselves. Import the following changes from libc: 2006-06-02 Jakub Jelinek * lib/posix/regex_internal.c (re_string_skip_chars): If no character has been converted at all, set *last_wc to WEOF. If mbrtowc failed, set wc to the byte which couldn't be converted. (re_string_reconstruct): Don't clear valid_raw_len before calling re_string_skip_chars. If wc is WEOF after re_string_skip_chars, set tip_context using re_string_context_at. 2006-05-02 Ulrich Drepper * lib/posix/regex.h: g++ still cannot handled [restrict]. 2006-04-21 Ulrich Drepper * lib/posix/regex.h: Remove special handling for VMS. 2006-08-10 Jim Meyering * modules/same-inode: New module. * modules/dev-ino: New module. * modules/cycle-check: Depend on these modules, rather than simply including their .h files. (Makefile.am): Don't list cycle-check.[ch] here, now that they're required via m4/cycle-check.m4. * modules/same: Depend on new same-inode module, rather than including same-inode.h. * modules/chdir-safer: New file. * modules/chown (Depends-on): Add stat-macros. 2006-08-10 Jim Meyering * m4/cycle-check.m4: New file. Require gl_STRUCT_DEV_INO and gl_SAME_INODE. * m4/dev-ino.m4, m4/same-inode.m4: New files. 2006-08-10 Eric Blake * modules/verror (Depends-on): Remove bogus gl_VERROR that snuck in from original proposal. 2006-08-10 Eric Blake and Ralf Wildenhues * gnulib-tool (func_import): Detect unexpanded macros in gnulib namespace. 2006-08-10 Bruno Haible * gnulib-tool (func_create_testdir): Detect unexpanded macros here as well. 2006-08-09 Paul Eggert Sync from coreutils. 2006-07-19 Mike Frysinger * lib/mountlist.c [ME_REMOTE]: Filter out cifs. Reported by Toralf Förster in . 2006-08-09 Paul Eggert * modules/restrict: Remove; no longer needed now that we assume Autoconf 2.59 or later. * MODULES.html.sh: Remove 'restrict'. * modules/argp (Depends-on): Remove 'restrict'. * modules/base64 (Depends-on): Likewise. * modules/gc (Depends-on): Likewise. * modules/getaddrinfo (Depends-on): Likewise. * modules/glob (Depends-on): Likewise. * modules/inet_ntop (Depends-on): Likewise. * modules/inet_pton (Depends-on): Likewise. * modules/memxor (Depends-on): Likewise. * modules/regex (Depends-on): Likewise. * modules/strtok_r (Depends-on): Likewise. * modules/time_r (Depends-on): Likewise. 2006-08-09 Paul Eggert * m4/argp.m4 (gl_ARGP): Require AC_C_RESTRICT. * m4/gc.m4 (gl_PREREQ_GC): Likewise. * m4/glob.m4 (gl_PREREQ_GLOB): Likewise. * m4/inet_ntop.m4 (gl_PREREQ_INET_NTOP): Likewise. * m4/inet_pton.m4 (gl_PREREQ_INET_PTON): Likewise. * m4/memxor.m4 (gl_MEMXOR): Likewise. * m4/restrict.m4: Remove; no longer needed. All remaining uses of gl_C_RESTRICT replaced by AC_C_RESTRICT. Merge from coreutils. * m4/regex.m4 (gl_PREREQ_REGEX): Require AC_C_RESTRICT, not gl_C_RESTRICT, now that we assume Autoconf 2.59 or later. * m4/strtok_r.m4 (gl_FUNC_STRTOK_R): Likewise. * m4/time_r.m4 (gl_TIME_R): Likewise. 2006-08-09 Karl Berry * config/srclist.txt: no more gettext-tools, per Bruno. 2006-08-08 Eric Blake * modules/verror: New module. * MODULES.html.sh: Document it. 2006-08-08 Eric Blake * lib/verror.h, lib/verror.c: New files. 2006-08-08 Eric Blake * lib/verror.c (verror_at_line): Work around glibc bug 2997, so that verror_at_line output complies with GNU Coding Standards even when file is NULL. 2006-08-07 Bruno Haible * lib/allocsa.h (sa_alignof) [_AIX]: Also consider 'long long' in newer versions of AIX. Reported by Ralf Wildenhues. 2006-08-07 Bruno Haible * gnulib-tool (func_create_testdir): Wrap the set of autoconf snippets in an AC_DEFUN. Needed so that the autoconf snippets can use AC_REQUIRE. 2006-08-06 Ralf Wildenhues * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Initialize pkgdata_DATA. * modules/javaversion (Makefile.am): Add to pkgdata_DATA, rather than overriding it. 2006-08-06 Eric Blake * lib/error.h: Fold in some upstream changes from glibc. * lib/error.c: Likewise. 2006-08-04 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Make the mostlyclean-local rule depend on mostlyclean-generic. Reported by Jim Meyering. Solution suggested by Ralf Wildenhues. 2006-07-31 Bruno Haible * m4/localcharset.m4 (gl_LOCALCHARSET): Remove tests for , , . 2006-07-30 Bruno Haible * modules/readlink (License): Change to LGPL. 2006-07-30 Bruno Haible * modules/javaversion (Makefile.am): Distribute javaversion.java and javaversion.class. Also install javaversion.class in $(pkgdatadir) and set PKGDATADIR to point to it. 2006-07-30 Bruno Haible * modules/csharpexec (configure.ac): Comment out macro invocation. * modules/javaexec (configure.ac): Likewise. * modules/javacomp-script (configure.ac): Likewise. * modules/csharpcomp-script (configure.ac): Use AC_REQUIRE. 2006-07-30 Bruno Haible * modules/clean-temp (Depends-on): Add linkedhash-list, remove linked-list. 2006-07-30 Bruno Haible * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Assume exists. 2006-07-30 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Initialize MOSTLYCLEANFILES to core and *.stackdump, so that core dumps get removed. 2006-07-29 Bruno Haible Make it possible for gnulib-tool to work with locally modified or augmented gnulib repositories. * gnulib-tool (func_usage): Document --local-dir option. (local_gnulib_dir): New variable. Handle --local-dir option. (func_lookup_file): New function. (func_all_modules, func_verify_module): Look also in $local_gnulib_dir. (func_get_description, func_get_filelist, func_get_description, func_get_filelist, func_get_dependencies, func_get_autoconf_snippet, func_get_automake_snippet, func_get_include_directive, func_get_license, func_get_maintainer): Use func_lookup_file. (func_import, func_create_testdir): Use func_lookup_file. 2006-07-29 Bruno Haible * modules/setenv (Depends-on): Add unistd. 2006-07-29 Bruno Haible * lib/setenv.c: Undo unintended modification done on 2006-02-27. 2006-07-29 Bruno Haible * lib/localcharset.c: Assume , , exist. 2006-07-29 Bruno Haible * gnulib-tool (import, update): If there is no Makefile.am, look at aclocal.m4, instead of bailing out. 2006-07-29 Bruno Haible * gnulib-tool (func_usage): Revert most of the 2006-07-15 change. Categorize the options by when they are useful. 2006-07-29 Bruno Haible * gnulib-tool (func_usage): Document option --no-libtool. Handle option --no-libtool. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Update for changed semantics of $libtool variable. (func_import): Likewise. If libtool is not used, show this through an option --no-libtool. (func_create_testdir): Update. 2006-07-29 Bruno Haible * gnulib-tool (func_import): Extend error message about missing --doc-base. 2006-07-29 Bruno Haible * gnulib-tool (func_import): Don't create the $docbase directory if there is no file to store there. 2006-07-29 Bruno Haible * gnulib-tool (autoconf_minversion): If a --dir option is given and relevant, look for configure.ac there, not in the current directory. Also use a simple search for AC_PREREQ, not "autoconf --trace". 2006-07-29 Bruno Haible * gnulib-tool (SORT): New variable. (func_usage): Undocument --assume-autoconf option. Remove --assume-autoconf option handling. (autoconf_minversion): Determine from the contents of configure.ac. (func_import): Remove autoconf_minversion handling. Suggested by Eric Blake. 2006-07-29 Bruno Haible * doc/gnulib-tool.texi (gl_LIBTOOL): Mention --no-libtool option. 2006-07-29 Bruno Haible * config/srclist.txt (*setenv.[ch]): Remove rules. 2006-07-28 Yoann Vandoorselaere * m4/inet_pton.m4, inet_ntop.m4: Check for netinet/in.h too. 2006-07-28 Yoann Vandoorselaere * lib/inet_ntop.h, inet_pton.h: Need to include netinet/in.h before arpa/inet.h. 2006-07-28 Simon Josefsson * modules/inet_ntop (Depends-on): Depend on arpa_inet. * modules/inet_pton (Depends-on): Likewise. 2006-07-28 Simon Josefsson * m4/netinet_in_h.m4: New file. 2006-07-28 Simon Josefsson * lib/inet_ntop.h, inet_pton.h: No need to guard netinet/in.h #include's. 2006-07-28 Simon Josefsson * lib/inet_ntop.h, inet_pton.h: No need to guard arpa/inet.h #include's. 2006-07-28 Paul Eggert * lib/modechange.c (mode_compile): Numeric modes now affect setuid and setgid on directories only if they set these bits. * lib/modechange.h: Remove obsolete comment about masks. 2006-07-28 Eric Blake * lib/regex_internal.h (struct re_dfa_t) [!_LIBC]: Avoid invalid C89 macro expansion. 2006-07-28 Bruno Haible * lib/inet_ntop.h, inet_pton.h: Use #if HAVE* instead of #ifdef HAVE*. 2006-07-28 Bruno Haible * m4/mbchar.m4 (gl_MBCHAR): Also test for iswcntrl. 2006-07-28 Bruno Haible * lib/mbchar.h (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper, iswxdigit): Define fallbacks. Avoids link error on FreeBSD 4.x. Reported by Yoann Vandoorselaere . * lib/wcwidth.h (iswprint): Assume an ASCII compatible wide character encoding. * lib/mbswidth.c (iswcntrl): Likewise. 2006-07-27 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Define __STDC_CONSTANT_MACROS during the test. 2006-07-27 Bruno Haible * lib/stdint_.h (INT*_C, UINT*_C) [C++]: Define these if __STDC_CONSTANT_MACROS is defined, not if __STDC_LIMIT_MACROS is defined. 2006-07-26 Eric Blake * m4/unistd-safer.m4 (gl_UNISTD_SAFER): Check for missing pipe. 2006-07-26 Eric Blake * lib/mkstemp-safer.c [! HAVE_MKSTEMP]: Add prototype for platforms like mingw that lack mkstemp. * lib/pipe-safer.c (pipe_safer) [!HAVE_FUNC_PIPE]: Provide fallback to avoid compilation warning on mingw. 2006-07-26 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Also verify the existence of the macros INT*_MIN, INT_LEAST*_MAX, INT_LEAST*_MIN, UINT_LEAST*_MAX, INT_FAST*_MIN, INTPTR_MIN. 2006-07-25 Bruno Haible * modules/version-etc (Depends-on): Add stdarg. 2006-07-25 Bruno Haible * m4/stdint.m4 (gl_INTEGER_TYPE_SUFFIX): Avoid 'eval' in front of complex commands. 2006-07-25 Bruno Haible * lib/version-etc.c (version_etc_va): Use va_copy, assumed to be defined in or config.h. 2006-07-24 Paul Eggert * m4/stdio-safer.m4 (gl_FOPEN_SAFER, gl_TMPFILE_SAFER): New macros. (gl_STDIO_SAFER): Remove. 2006-07-24 Paul Eggert * MODULES.html.sh (File stream based Input/Output): Add fopen-safer, tmpfile-safer; remove stdio-safer. * modules/getusershell (Depends-on): Change stdio-safer to fopen-safer. * modules/fopen-safer, modules/tmpfile-safer: New files. * modules/stdio-safer: Remove. 2006-07-24 Bruno Haible * modules/tmpdir: New file. * MODULES.html.sh (File system functions): Add it. 2006-07-24 Bruno Haible * modules/javacomp (Depends-on): Add unistd, javaversion, binary-io, getline, pathname, fwriteerror, clean-temp, xvasprintf, strstr. 2006-07-24 Bruno Haible * modules/clean-temp: New file. 2006-07-24 Bruno Haible * m4/tmpdir.m4: New file, from GNU gettext. 2006-07-24 Bruno Haible * lib/tmpdir.h: New file, from GNU gettext. * lib/tmpdir.c: New file, from GNU gettext. 2006-07-24 Bruno Haible * lib/clean-temp.h: New file, from GNU gettext. * lib/clean-temp.c: New file, from GNU gettext. 2006-07-23 Eric Blake * modules/stdio-safer (Files): Add tmpfile-safer.c. (Depends-on): Add binary-io. 2006-07-23 Eric Blake * m4/stdio-safer.m4 (gl_STDIO_SAFER): Add tmpfile-safer.c. 2006-07-23 Eric Blake * lib/tmpfile-safer.c: New file. * lib/stdio-safer.h (fopen_safer): Add prototype. * lib/stdio--.h (tmpfile): Make safer. 2006-07-23 Bruno Haible * lib/gl_anylinked_list2.h (ASYNCSAFE): New macro. (gl_linked_add_first, gl_linked_add_last, gl_linked_add_before, gl_linked_add_after, gl_linked_add_at, gl_linked_remove_node, gl_linked_remove_at): Use it. 2006-07-22 Yoann Vandoorselaere and Simon Josefsson * lib/getaddrinfo.h (AI_PASSIVE): Make sure it is defined. * lib/getaddrinfo.c (getaddrinfo): Support AI_PASSIVE. 2006-07-22 Paul Eggert * modules/close-stream: New file. * modules/closeout (Description): Make it clear that it exits with a diagnostic on error. (Depends-on): Add close-stream. Remove fpending, stdbool. * MODULES.html.sh (File stream based Input/Output): Add close-stream. 2006-07-22 Paul Eggert * m4/close-stream.m4: New file. 2006-07-22 Paul Eggert * lib/close-stream.c, lib/close-stream.h: New files. 2006-07-22 Bruno Haible Merge from GNU gettext 0.15. 2006-05-01 Bruno Haible * build-aux/javacomp.sh.in: Update for changed javacomp.m4. 2006-07-22 Bruno Haible * modules/javaversion: New file. * MODULES.html.sh (Java): Add javaversion. 2006-03-12 Bruno Haible * build-aux/javaexec.sh.in: Update for changed javaexec.m4. 2005-12-04 Bruno Haible * build-aux/csharpexec.sh.in: Add support for 'clix' launcher (untested). 2006-06-21 Bruno Haible Avoid warnings from recent versions of mcs. * build-aux/csharpcomp.sh.in (options_mcs): Don't use options -o, -L, -r any more. Use options documented since mcs-1.0 instead. Similarly for -g. 2005-12-04 Bruno Haible * build-aux/csharpcomp.sh.in: Suffix for resources is .resources, not .resource. 2005-07-09 Bruno Haible * build-aux/csharpcomp.sh.in (options_csc): For -l option, add a .dll suffix. Reported by Mark Junker . 2006-07-22 Bruno Haible * modules/gettext: Upgrade to gettext-0.15. (Files): Remove m4/isc-posix.m4. Add m4/lock.m4, m4/visibility.m4. Replace m4/inttypes.m4 with m4/inttypes-h.m4. 2006-07-22 Bruno Haible Merge from GNU gettext 0.15. 2006-03-25 Bruno Haible * lib-link.m4 (AC_LIB_LINKFLAGS_FROM_LIBS): New macro. 2006-07-21 Bruno Haible * javacomp.m4 (gt_JAVACOMP): Convert target_version "null" to "1.1". 2006-05-09 Bruno Haible * javacomp.m4 (gt_JAVACOMP): On Cygwin, set CLASSPATH_SEPARATOR to a semicolon. Use CLASSPATH_SEPARATOR for the conftestver execution. 2006-05-01 Bruno Haible * javacomp.m4 (gt_JAVACOMP): Accept a source-version and an optional target-version argument. Verify that the compiler groks source of the specified source-version, or add -source option as necessary. Verify that the compiler produces bytecode in the specified target-version, or add -target and -source options as necessary. Make the result of the test available as variable CONF_JAVAC. Also log error output in config.log. 2006-03-11 Bruno Haible * javacomp.m4 (gt_JAVACOMP): Treat gcj-4.x like gcj-3.x. 2006-05-09 Bruno Haible * javaexec.m4 (gt_JAVAEXEC): On Cygwin, set CLASSPATH_SEPARATOR to a semicolon. 2006-03-12 Bruno Haible * javaexec.m4 (gt_JAVAEXEC): Make the result of the test available as variable CONF_JAVA, for subsequent autoconf tests. Also log error output in config.log. 2006-07-19 Bruno Haible * getline.m4 (AM_FUNC_GETLINE): When cross-compiling, assume that getline works on glibc2 systems. Needed to avoid trouble in relocatable.c. Reported by Nils Magnus Larsgard . 2005-12-04 Bruno Haible * csharpexec.m4 (gt_CSHARPEXEC): Add support for 'clix' launcher (untested). 2005-12-04 Bruno Haible * csharpcomp.m4 (gt_CSHARPCOMP): Also set CSHARPCOMPFLAGS. 2006-07-22 Bruno Haible * gettext.m4: Update from GNU gettext-0.15. * nls.m4: Likewise. * po.m4: Likewise. * inttypes-pri.m4: Likewise. * inttypes-h.m4: Renamed from inttypes.m4. (gl_HEADER_INTTYPES_H): Renamed from gt_HEADER_INTTYPES_H. 2006-07-22 Bruno Haible Merge from GNU gettext 0.15. 2005-07-05 Bruno Haible * printf-args.c (printf_fetchargs): Work around broken definition of wint_t on mingw. 2005-02-12 Bruno Haible * xallocsa.h: Add extern "C" for C++. 2006-05-17 Bruno Haible Cygwin portability. * progreloc.c (WIN32_NATIVE): Renamed from WIN32. 2006-04-30 Bruno Haible * progreloc.c: Include if available. (find_executable): Use _NSGetExecutablePath when possible. 2006-05-06 Charles Wilson * progreloc.c (maybe_executable) [CYGWIN]: Use the access() function. 2005-12-29 Bruno Haible * progreloc.c (set_program_name_and_installdir): Fix compilation error. 2005-12-04 Bruno Haible Cygwin portability. * progreloc.c: Include also on Cygwin. (find_executable): Add support for Cygwin. (set_program_name_and_installdir): Handle also platforms with nonempty EXEEXT. 2006-07-11 Bruno Haible * javacomp.c: Fix a comment. Reported by Jim Meyering. 2006-04-30 Bruno Haible * javacomp.h (compile_java_class): Add source_version, target_version arguments. * javacomp.c: Rewritten to choose only a compiler that respects the specified source_version and target_version. 2006-06-27 Bruno Haible Assume correct S_ISDIR macro. * mkdtemp.c: Remove test of STAT_MACROS_BROKEN. 2006-07-22 Bruno Haible * javaversion.h: New file, from GNU gettext. * javaversion.c: New file, from GNU gettext. * javaversion.java: New file, from GNU gettext. * javaversion.class: New file, from GNU gettext. 2006-05-17 Bruno Haible Cygwin portability. * javaexec.c (execute_java_class): Test for jview program also on Cygwin. 2006-04-09 Bruno Haible * fatal-signal.c: Don't include string.h. (at_fatal_signal): Use a copying loop instead of memcpy. 2005-12-04 Bruno Haible * csharpexec.c: Add support for 'clix' launcher (untested). (execute_csharp_using_sscli): New function. (execute_csharp_program): Call it. 2006-06-21 Bruno Haible Avoid warnings from recent versions of mcs. * csharpcomp.c (compile_csharp_using_mono): Don't use options -o, -L, -r any more. Use options documented since mcs-1.0 instead. Similarly for -g. 2005-07-09 Bruno Haible * csharpcomp.c (compile_csharp_using_sscli): For -l option, add a .dll suffix. Reported by Mark Junker . 2006-06-17 Bruno Haible * config.charset: Update for NetBSD 3.0. 2006-05-17 Bruno Haible Cygwin portability. * localcharset.c (WIN32_NATIVE): Renamed from WIN32. 2006-05-16 Bruno Haible * localcharset.c [CYGWIN]: Include . (get_charset_aliases): For Cygwin, return the same CPxxx aliases list as under WIN32. (locale_charset) [CYGWIN]: Try to retrieve the encoding from the environment variables. Fall back to GetACP(). 2006-04-05 Bruno Haible * config.charset: Update Juan Manuel Guerrero's address. 2005-02-12 Bruno Haible * allocsa.h: Add extern "C" for C++. 2005-02-10 Bruno Haible * allocsa.h (sa_alignof): Define differently with AIX xlc, to avoid a bug of this compiler on AIX 3.2.5 dealing with enums. 2006-07-22 Bruno Haible * gettext.h: Update to GNU gettext-0.15. 2006-07-22 Bruno Haible * config/srclist.txt: Resync printf-args.c, vasnprintf.c, localcharset.c, mkdtemp.c, config.rpath, lib-ld.m4, lib-link.m4, lib-prefix.m4, longdouble.m4, ssize_t.m4. 2006-07-21 Eric Blake * modules/stdlib-safer: New file. * MODULES.html.sh (File stream based Input/Output): Add stdlib-safer. 2006-07-21 Eric Blake * lib/stdlib-safer.h: New file from coreutils, required by stdlib--.h. 2006-07-20 Paul Eggert * gnulib-tool (func_usage): Document --assume-autoconf='latest-stable'. 2006-07-20 Bruno Haible * gnulib-tool: Recognize new option --assume-autoconf. (autoconf_minversion): New variable. (func_get_filelist): Use it to decide whether to add onceonly_2_57.m4. 2006-07-20 Bruno Haible * MODULES.html.sh (func_all_modules): Add a missing func_begin_table. 2006-07-19 Derek R. Price * lib/getaddrinfo.h: Don't define unimplemented AI_* flags. Reindent and repaginate. 2006-07-19 Derek Price * doc/gnulib.texi (Libtool and Windows): Eliminate passive voice. Correct grammar. 2006-07-17 Bruno Haible * modules/list: New file. * modules/array-list: New file. * modules/carray-list, modules/carray-list-tests: New files. * modules/linked-list, modules/linked-list-tests: New files. * modules/avltree-list, modules/avltree-list-tests: New files. * modules/rbtree-list, modules/rbtree-list-tests: New files. * modules/linkedhash-list, modules/linkedhash-list-tests: New files. * modules/avltreehash-list, modules/avltreehash-list-tests: New files. * modules/rbtreehash-list, modules/rbtreehash-list-tests: New files. * modules/oset: New file. * modules/array-oset: New file. * modules/avltree-oset, modules/avltree-oset-tests: New files. * modules/rbtree-oset, modules/rbtree-oset-tests: New files. * tests/test-carray_list.c: New file. * tests/test-linked_list.c: New file. * tests/test-avltree_list.c: New file. * tests/test-rbtree_list.c: New file. * tests/test-linkedhash_list.c: New file. * tests/test-avltreehash_list.c: New file. * tests/test-rbtreehash_list.c: New file. * tests/test-avltree_oset.c: New file. * tests/test-rbtree_oset.c: New file. * MODULES.html.sh (Container data structures): New section. 2006-07-17 Bruno Haible * m4/gl_list.m4: New file. 2006-07-17 Bruno Haible * lib/gl_list.h: New file. * lib/gl_list.c: New file. * lib/gl_array_list.h: New file. * lib/gl_array_list.c: New file. * lib/gl_carray_list.h: New file. * lib/gl_carray_list.c: New file. * lib/gl_linked_list.h: New file. * lib/gl_linked_list.c: New file. * lib/gl_anylinked_list1.h: New file. * lib/gl_anylinked_list2.h: New file. * lib/gl_avltree_list.h: New file. * lib/gl_avltree_list.c: New file. * lib/gl_anyavltree_list1.h: New file. * lib/gl_anyavltree_list2.h: New file. * lib/gl_rbtree_list.h: New file. * lib/gl_rbtree_list.c: New file. * lib/gl_anyrbtree_list1.h: New file. * lib/gl_anyrbtree_list2.h: New file. * lib/gl_anytree_list1.h: New file. * lib/gl_anytree_list2.h: New file. * lib/gl_linkedhash_list.h: New file. * lib/gl_linkedhash_list.c: New file. * lib/gl_anyhash_list1.h: New file. * lib/gl_anyhash_list2.h: New file. * lib/gl_avltreehash_list.h: New file. * lib/gl_avltreehash_list.c: New file. * lib/gl_rbtreehash_list.h: New file. * lib/gl_rbtreehash_list.c: New file. * lib/gl_anytreehash_list1.h: New file. * lib/gl_anytreehash_list2.h: New file. * lib/gl_oset.h: New file. * lib/gl_oset.c: New file. * lib/gl_array_oset.h: New file. * lib/gl_array_oset.c: New file. * lib/gl_avltree_oset.h: New file. * lib/gl_avltree_oset.c: New file. * lib/gl_rbtree_oset.h: New file. * lib/gl_rbtree_oset.c: New file. * lib/gl_anytree_oset.h: New file. 2006-07-16 Paul Eggert * m4/mkancesdirs.m4: New file. * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Mention dirchownmod.c, dirchownmod.h. Don't require AC_FUNC_ALLOCA, gl_AFS, gl_CHDIR_SAFER; no longer needed. Require gl_FUNC_LCHOWN, since dirchownmod.c needs it. 2006-07-16 Paul Eggert * lib/dirchownmod.c, lib/dirchownmod.h, lib/mkancesdirs.c: * lib/mkancesdirs.h: New files. * lib/mkdir-p.c: Don't include alloca.h, stdio.h, sys/types.h, unistd.h, string.h, chdir-safer.h, dirname.h, lchmod.h, lchown.h, save-cwd.h. Instead, include dirchownmod.h and mkancesdirs.h. (make_dir_parents): New args MAKE_ANCESTOR, OPTIONS, ANNOUNCE, MODE_BITS. Remove options VERBOSE_FMT_STRING, CWD_ERRNO. All callers changed. Revamp internals significantly, by not attempting to create directories that are temporarily more permissive than the final results. Do not attempt to use save_cwd/restore_cwd; it isn't worth it for mkdir and install. This removes some race conditions, fixes some bugs, and simplifies things. Use new dirchownmod function to do owner and mode changes. * lib/mkdir-p.h: Likewise. * lib/modechange.c (octal_to_mode): New function. (struct mode_change): New member mentioned. (make_node_op_equals): New arg mentioned. All callers changed. (mode_compile): Keep track of which mode bits the user has explicitly mentioned. (mode_adjust): New arg DIR, so that we implement the X op correctly. New arg PMODE_BITS, to keep track of which mode bits the user mentioned; it treats S_ISUID and S_ISGID speciall. All callers changed. * lib/modechange.h: Likewise. 2006-07-16 Paul Eggert * MODULES.html.sh: Add mkancestors. * modules/mkancesdirs: New module. * modules/mkdir-p (Files): Remove lib/chdir-safer.c, lib/chdir-safer.h, lib/same-inode.h, m4/afs.m4, m4/chdir-safer.m4. The chdir-safer and afs files are now orphans; I'll remove them unless someone speaks up. Add lib/dirchownmod.c, lib/dirchownmod.h. (Depends-on): Remove alloca, chown, save-cwd, dirname. Add lchown, mkancesdirs. (Maintainer): Add self. 2006-07-15 Karl Berry * gnulib-tool: help message wording/arrangement. 2006-07-14 Simon Josefsson * doc/gnulib.texi (Libtool and Windows): New section. 2006-07-12 Simon Josefsson * modules/gendocs (License): Fix license, approved by Karl. 2006-07-12 Eric Blake * MODULES.html.sh: Add gendocs. 2006-07-11 Eric Blake * modules/fdl: New module, to install doc/fdl.texi. * MODULES.html.sh: Add new section for documentation modules. * gnulib-tool: Avoid space-tab. (--doc-base): New option, to manage files from doc. 2006-07-11 Eric Blake * m4/absolute-header.m4: Fix comments to match recent change. 2006-07-11 Eric Blake * gnulib-tool: List --doc-base before --tests-base. 2006-07-11 Derek R. Price * lib/glob.c: s/NAMLEN/_D_EXACT_NAMLEN/. 2006-07-11 Bruno Haible * README: Mention where to put documentation. 2006-07-10 Ralf Wildenhues * doc/functions.texi, gnulib-tool.texi, gnulib.texi: Fix some typos. 2006-07-10 Paul Eggert * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Like today's change to stdint.m4. 2006-07-10 Paul Eggert * m4/stdint.m4 (gl_STDINT_H): Like yesterday's change to absolute-header.m4. Also, set ABSOLUTE_STDINT_H to a string "no/such/file/stdint.h" when there is no such file, so that the resulting C code can be parsed by dodgy compilers. Problems reported by Bob Proulx. 2006-07-10 Derek R. Price * lib/backupfile.c, dirfd.h, fts.c, getcwd.c, glob.c, glob_.h: Ignore the obsolescent !HAVE_DIRENT_H case. Consolidate NAMLEN macros into the GNU _D_EXACT_NAMLEN. * lib/savedir.c: Likewise. (savedirstream): Use _D_EXACT_NAMLEN in preference to strlen. 2006-07-10 Derek R. Price and Paul Eggert * m4/backupfile.m4, d-ino.m4, d-type.m4, dirfd.m4, fts.m4, getcwd.m4: * m4/savedir.m4: Ignore the obsolescent !HAVE_DIRENT_H case. Consolidate NAMLEN macros into the GNU _D_EXACT_NAMLEN. 2006-07-09 Paul Eggert * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Use "" rather than <> around the absolute name, to work around a problem with the HP-UX 11.23 native C compiler, reported by Bob Proulx. 2006-07-09 Paul Eggert * doc/maintain.texi, make-stds.texi: Sync from . 2006-07-09 Paul Eggert * build-aux/depcomp, build-aux/install-sh: Sync from Automake. 2006-07-09 Jim Meyering * m4/glob.m4: Remove a doubled word in a comment. 2006-07-09 Jim Meyering * lib/argp-pv.c: Remove a doubled word in a comment. * lib/check-version.c (check_version): Likewise. * lib/javacomp.c (compile_java_class): Likewise. 2006-07-08 Paul Eggert * gnulib-tool (func_get_filelist): Don't echo m4/onceonly_2_57.m4, for the benefit of people using Autoconf 2.60. If you want to support older Autoconf versions you can copy m4/onceonly_2_57.m4 (or m4/onceonly.m4, if pre-2.57) manually. 2006-07-08 Jim Meyering * m4/link-follow.m4: Remove one of two adjacent "whether"s in a comment. * m4/getopt.m4: Remove one of two adjacent "your"s in a comment. * m4/regex.m4 (gl_REGEX): Remove one of two adjacent "the"s in a comment. 2006-07-08 Jim Meyering * lib/getndelim2.h (getndelim2): Remove doubled "after" in comment. 2006-07-07 Simon Josefsson * tests/test-crc.c: Change expected crc value, the test vector were probably computed using the old broken crc.c? 2006-07-06 Simon Josefsson * modules/sys_socket (Files): Add m4/sockpfaf.m4 (this module is now the canonical place for the M4 file). * modules/getaddrinfo (Files): Remove m4/sockpfaf.m4, we get it from the sys_socket dependency now. * modules/inet_pton (Files): Ditto. * modules/inet_ntop (Files): Ditto. 2006-07-06 Ralf Wildenhues (tiny change) * modules/getusershell (configure.ac): Use gl_FUNC_GETUSERSHELL, not gl_PREREQ_GETUSERSHELL. 2006-07-06 Ralf Wildenhues * m4/_inttypes_h.m4 (gl_INTTYPES_H): Use AC_CHECK_DECLS_ONCE with only one argument, for Autoconf 2.60. * m4/fileblocks.m4 (gl_PREREQ_FILEBLOCKS): AC_CHECK_DECLS_ONCE may expand to nothing, so add a shell command to avoid syntax error. * m4/getpass.m4 (gl_PREREQ_GETPASS): Likewise. 2006-07-06 Ralf Wildenhues * lib/strtod.c (strtod): cast the argument of tolower to unsigned char. 2006-07-06 Paul Eggert * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Don't check for getenv decl; no longer needed. Check for isblank decl. * m4/mkstemp.m4 (gl_PREREQ_TEMPNAME): Don't check for getenv decl. * m4/regex.m4 (gl_PREREQ_REGEX): Dheck for isblank decl instead of existence. 2006-07-06 Paul Eggert * lib/getloadavg.c: Use __VMS, not VMS. * lib/getopt.c: Likewise. * lib/getpagesize.h: Likewise. * lib/glob.c: Remove most VMS cruft; it hasn't been tested for a while and probably does not work. 2006-07-06 Paul Eggert * lib/.cppi-disable: Add wcwidth. * lib/fnmatch.c (ISBLANK): Remove. All uses changed to isblank. (isblank) [! (defined isblank || HAVE_DECL_ISBLANK)]: New macro. (ISGRAPH): Remove. All uses changed to isgraph. (FOLD) [!defined _LIBC]: Remove special case. * lib/getdate.y (lookup_word): Remove no-longer-needed call to islower. * lib/regex_internal.h (isblank): Depend on HAVE_DECL_ISBLANK, not HAVE_ISBLANK. * lib/strftime.c (TOLOWER, TOUPPER) [!defined _LIBC]: Remove special case. 2006-07-06 Jim Hyslop (tiny change) * lib/getaddrinfo.c: Changes to compile under MSVC6: changed '#if WIN32_NATIVE' to '#ifdef' & moved WSAAPI macro inside brackets. Other minor changes to suppress some compiler warnings. 2006-07-06 Derek R. Price and Paul Eggert * m4/backupfile.m4 (gl_BACKUPFILE): Check for dirent.h, instead of invoking obsolescent AC_HEADER_DIRENT macro. * m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise. * m4/d-type.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE): Likewise. * m4/dirfd.m4 (gl_FUNC_DIRFD): Likewise. * m4/fts.m4 (gl_FUNC_FTS_CORE): Likewise. * m4/getcwd.m4 (gl_PREREQ_GETCWD): Likewise. * m4/glob.m4 (gl_PREREQ_GLOB): Likewise. * m4/savedir.m4 (gl_SAVEDIR): Likewise. * m4/readdir.m4: Remove; no longer needed. 2006-07-06 Derek R. Price and Paul Eggert * lib/backupfile.c [HAVE_DIRENT_H && ! HAVE_NDIR_H]: Don't worry about this obsolete case any more. (HAVE_DIR): Remove. All uses removed; we now assume you can read directories. * lib/dirfd.h [HAVE_DIRENT_H && ! HAVE_NDIR_H]: Don't worry about this obsolete case any more. * lib/fts.c: Likewise. * lib/getcwd.c: Likewise. * lib/glob.h: Likewise. * lib/savedir.c: Likewise. 2006-07-05 Paul Eggert * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Use AC_CHECK_DECLS_ONCE rather than AC_CHECK_DECLS for strtoimax and strtoumax. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Remove; no longer needed. All uses removed. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/strtoul.m4 (gl_PREREQ_STRTOUL): Likewise. * m4/exclude.m4 (gl_EXCLUDE): Don't check for isascii; no longer needed. * m4/getdate.m4 (gl_GETDATE): Likewise. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Likewise. * m4/memcasecmp.m4 (gl_MEMCASECMP): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/strtoul.m4 (gl_PREREQ_STRTOUL): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise. * m4/exclude.m4 (gl_EXCLUDE): Don't require AC_C_INLINE; no longer needed. 2006-07-05 Paul Eggert * lib/memcasecmp.c: Include . (memcasecmp): Don't assume UCHAR_MAX <= INT_MAX. * lib/strtod.c (strtod): Don't assume isspace works on negative chars. Don't assume isdigit succeeds only on '0' through '9'. 2006-07-05 Eric Blake * modules/getaddrinfo (Depends-on): Add snprintf. 2006-07-05 Eric Blake * m4/sockpfaf.m4 (gl_SOCKET_FAMILIES): Use gl_HEADER_SYS_SOCKET to avoid 'header present but could not be compiled' on cygwin. 2006-07-05 Eric Blake * lib/getaddrinfo.h (NI_NUMERICHOST, NI_NUMERICSERV): Define if missing from netdb.h. * lib/getaddrinfo.c (includes): Include inet_ntop and snprintf. 2006-07-05 Derek R. Price * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Don't require AC_HEADER_STDC; no longer needed. * m4/exclude.m4 (gl_EXCLUDE): Likewise. * m4/getdate.m4 (gl_GETDATE): Likewise. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Likewise. * m4/memcasecmp.m4 (gl_MEMCASECMP): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise. 2006-07-05 Derek R. Price * lib/exclude.c (IN_CTYPE_DOMAIN, is_space): Remove; no longer needed. All uses of is_space replaced by isspace. * lib/exit.h: Don't talk about STDC_HEADERS. * lib/fnmatch.c (ISASCII): Remove; no longer needed. All uses removed. (ISPRINT, ISDIGIT, ISALNUM, ISALPHA, ISCNTRL, ISLOWER, ISPUNCT): (ISSPACE, ISUPPER, ISXDIGIT): Remove; no longer needed. All uses replaced by isprint etc. * lib/getdate.y (IN_CTYPE_DOMAIN, ISSPACE, ISALPHA, ISLOWER): Likewise. * lib/getusershell.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise. * lib/memcasecmp.c (IN_CTYPE_DOMAIN, ISLOWER, TOUPPER): Likewise. * lib/strtod.c (IN_CTYPE_DOMAIN, ISSPACE, ISDIGIT, TOLOWER): Likewise. * lib/strtol.c (IN_CTYPE_DOMAIN): Likewise. * lib/xstrtol.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise. 2006-07-05 Bruno Haible * m4/strndup.m4 (gl_FUNC_STRNDUP): When cross-compiling, check whether the function exists, before testing against AIX. Reported by Martin Lambers . 2006-07-04 Paul Eggert * modules/cycle-check (lib_SOURCES): Add same-inode.h. From Mark D. Baushke. 2006-07-04 Paul Eggert * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Prepend three slashes to the absolute name, not just one, to bypass Sun C 5.8's "warning: #include of /usr/include/... may be non-portable". 2006-07-04 Eric Blake * modules/dirname-tests: New test module. * tests/test-dirname.c: New file, replacing dirname.c TEST_DIRNAME section that was recently deleted. 2006-07-04 Bruno Haible Assume ANSI C header files and functions. * lib/mbswidth.c (IN_CTYPE_DOMAIN, ISPRINT, ISCNTRL): Remove macros. (mbsnwidth): Use isprint, iscntrl instead. 2006-07-03 Paul Eggert Merge from coreutils. * MODULES.html.sh: Add xstrtold. * modules/xstrtold: New file. * modules/cycle-check (Files): Add lib/same-inode.h. * modules/dirname (Files): Add m4/double-slash-root.m4. * modules/getcwd (Files): Add m4/getcwd-abort-bug.m4. * modules/mkdir-p (Files): Add lib/same-inode.h. * modules/same (Files): Add lib/same-inode.h. 2006-07-03 Paul Eggert * m4/absolute-header.m4: Renamed from full-header-path.m4. This is to keep the terminology clean; POSIX talks about "absolute pathnames", not "full pathnames", but the GNU Coding Standards say to use "path" for something else; so use "absolute" to keep both sides happy. (gl_ABSOLUTE_HEADER): Renamed from gl_FULL_HEADER_PATH. Set gl_absolute_header, not gl_full_header_path. Set gl_cv_absolute_
, not gl_full_path_
. Define ABSOLUTE_
, not FULL_PATH_
. All uses changed. Merge from coreutils. 2006-06-30 Paul Eggert * m4/c-strtod.m4 (gl_C_STRTOLD): Add c-strtod.c to LIBSOURCES. Require gl_USE_SYSTEM_EXTENSIONS, not gl_C_STRTOD, since we don't want to require the building of c-strtod.o. * m4/lib-check.m4 (cu_LIB_CHECK): Remove SEQ_LIBM, since seq no longer needs -lm directly. * m4/xstrtod.m4 (gl_XSTRTOLD): New macro. 2006-06-19 Paul Eggert * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Prefer binutils's --as-needed option if available. Problem reported by Albert Chin in . However, use -Wl,--as-needed, not bare --as-needed, since HP-UX 11.11 cc merely issues a bunch of annoying warnings for --as-needed (this problem was reported by Bob Proulx). Also, try linking with -lm to detect a bug in binutils 2.16 (this problem was reported by Ralf Wildenhues). 2006-06-18 Jim Meyering Test for a bug that causes glibc's getcwd to suffer a failed assertion. * m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): New file and macro. * m4/getcwd.m4 (gl_FUNC_GETCWD): If we detect support for getcwd_null, also check for glibc-2.4's abort-inducing bug. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Fix typo. Low-probability clean-up should be to use rmdir to get rid of the just-created directory, not unlink. * m4/ftruncate.m4 (gl_FUNC_FTRUNCATE): If ftruncate is missing, make configure fail, and request a bug report to inform us about it. Add a comment that, barring reports to the contrary, in 2007 we'll assume ftruncate is universally available. 2006-04-17 Paul Eggert * m4/filemode.m4 (gl_FILEMODE): Check for strmode declaration. 2006-03-12 Jim Meyering * m4/chdir-safer.m4 (gl_CHDIR_SAFER): Add same-inode.h to the list. * m4/cycle-check.m4 (gl_CYCLE_CHECK): Likewise. * m4/same.m4 (gl_SAME): Likewise. * m4/root-dev-ino.m4 (gl_ROOT_DEV_INO): Likewise. 2006-03-11 Eric Blake * m4/double-slash-root.m4: New file, provides gl_DOUBLE_SLASH_ROOT. * m4/dirname.m4 (gl_DIRNAME): Use gl_DOUBLE_SLASH_ROOT. * m4/dos.m4 (FILE_SYSTEM_PREFIX_LEN): Move from here to dirname.h. (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE): New define. 2006-07-03 Paul Eggert * lib/stdint_.h: Include after @FULL_PATH_STDINT_H@, for MacOS X 10.4.6. Don't mention . Problems reported by Mark D. Baushke, one in . Merge from coreutils. * lib/.cppi-disable: Add stdint_.h. * lib/.cvsignore: Add stdint.h. 2006-06-30 Paul Eggert * lib/xstrtod.c (XSTRTOD, DOUBLE): New macros, so that we can support both double and long double versions. (XSTRTOD): Renamed from xstrtod. Use DOUBLE internally. * lib/xstrtold.c: New file. * lib/xstrtod.h (xstrtold): New decl. 2006-05-22 Paul Eggert * lib/filemode.c (setst): Remove. (strmode): Rewrite to avoid setst. This makes the code shorter, (arguably) clearer, and the generated code is a bit smaller on my Debian GNU/Linux stable x86 host. 2006-04-17 Paul Eggert * lib/filemode.c: Include "filemode.h" first, to test the interface. Assume that filemode.h includes sys/types.h and sys/stat.h. (HAVE_ST_DM_MODE): New macro, moved here from ls.c. (ftypelet): Reorder to put common cases first, for efficiency. Add 'P', 'w'. Remove 'M', since it's now the caller's responsibility to do 'M'. (strmode): Renamed from mode_string, and now stores 12 bytes instead of 10, for compatibility with FreeBSD. All callers changed. (filemodestring): Now stores 12 bytes instead of 10, and sets file types that can't be deduced solely from st_mode. First arg is now a const pointer. * lib/filemode.h (HAVE_DECL_STRMODE): Include for strmode. (strmode): Renamed from mode_string. (filemodestring): New decl. * lib/stat-macros.h: Don't undef S_ISDOOR, since it's never buggy. (S_ISDOOR): Don't bother with S_IFDOOR, since that code is never needed. (S_ISPORT, S_ISWHT): New macros, if not already defined. 2006-04-12 Paul Eggert * lib/fsusage.c: Don't include or , since fsusage.h now does that. Include fsusage.h first, to test interface. Prefer statvfs if it works, since it's blessed by POSIX. Attempt at most one method (the old code could have generated decls that didn't conform to C89, not that this was ever exercised). * lib/fsusage.h: Include and if they exist. 2006-03-19 Jim Meyering Work even in a chroot where d_ino values for entries in "/" don't match the stat.st_ino values for the same names. * lib/getcwd.c (__getcwd): When no d_ino value matches the target inode number, iterate through all entries again, using lstat instead. Reported by Kenshi Muto in http://bugs.debian.org/355810, and by Zouhir Hafidi in https://bugzilla.redhat.com/bugzilla/190656. * lib/getcwd.c (__getcwd): Clarify a comment. Use memcpy in place of a call to strcpy. 2006-03-12 Jim Meyering * lib/fts-cycle.c (leave_dir): If cycle-check's saved dev-ino pair matches that of the current directory (which we're about to chdir ".." out of), then save the dev-ino of the parent, instead. * lib/same-inode.h (SAME_INODE): New file/macro. * lib/chdir-safer.c (SAME_INODE): Remove definition. Include "same-inode.h", instead. * lib/same.c: Likewise. * lib/cycle-check.h: Include "same-inode.h". (CYCLE_CHECK_REFLECT_CHDIR_UP): Define. * lib/cycle-check.c (SAME_INODE): Remove definition. * lib/root-dev-ino.h: Include "same-inode.h". 2006-03-11 Eric Blake * lib/same.c (same_name): s/base_name/last_component/ * lib/backupfile.c (check_extension, numbered_backup): Likewise. * lib/filenamecat.c (file_name_concat): Likewise. 2006-03-11 Eric Blake , Paul Eggert * lib/dirname.h (FILE_SYSTEM_PREFIX_LEN): Move here from dos.m4. [FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX]: Don't treat 1: as a drive prefix. (IS_ABSOLUTE_FILE_NAME): Treat all drive letters as absolute on platforms like cygwin with FILE_SYSTEM_DRIVE_PREFIX_IS_ABSOLUTE. (last_component): New method. * lib/dirname.c (dir_len): Determine when drive letters need a subsequent slash. Preserve // when it is special. (dir_name): Don't append dot when drive letter is absolute. [TEST_DIRNAME]: Move into a full-blown gnulib test. * lib/basename.c (base_name): New semantics - malloc the result. Preserve // when it is special. Preserve relative files that look like drive letters. (base_len): Preserve // when it is special. (last_component): New method, similar to old base_name semantics. * lib/stripslash.c (strip_trailing_slashes): Use last_component, not base_name. Strip redundant slashes from ///. 2006-07-03 Jim Meyering * lib/cycle-check.h (CYCLE_CHECK_REFLECT_CHDIR_UP): Abort if this macro is used before the first cycle_check call. 2006-07-03 Eric Blake * modules/dirname (Depends-on): Add xstrndup. 2006-07-02 Paul Eggert * m4/stdint.m4 (gl_STDINT_H): Use more-mnemonic identifiers for test cases, so that config.log is a bit easier to follow. 2006-07-02 Paul Eggert * lib/stdint_.h (intmax_t, uintmax_t): Prefer long to long long if both are 64 bits, since this seems to be the tradition, and this prevents gcc -Wformat from warning about usages with PRIuMAX. If we ever run into a host that prefers long long to long in this case, we'll need another configure-time test. Problem reported by Jim Meyering. 2006-07-02 Eric Blake * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Simplify by using AC_CHECK_DECLS. 2006-07-01 Paul Eggert * modules/inttypes (Depends-on): No longer depends on stdint. * modules/stdint (Description): Say more about assumptions. Say that the fast types might differ. Say macros are used. (Files): Remove m4/size_max.m4, m4/wchar_t.m4. Add m4/longlong.m4. (Makefile.am): Revise list of substituted symbols to match new stdint.m4. * modules/stdint-tests (Files): Add m4/wchar_t.m4, m4/wint_t.m4. (configure.ac): Add gt_TYPE_WCHAR_T, gt_TYPE_WINT_T. * tests/test-stdint.c (verify_same_types) [! (__GNUC__ >= 2 && DO_PEDANTIC)]: Put in a decl, so that the code conforms to C99/C89. Test for WCHAR_MIN and WCHAR_MAX only if HAVE_WCHAR_T. Test for WINT_MIN and WINT_MAX only if HAVE_WINT_T. 2006-07-01 Paul Eggert * m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Backport from Autoconf 2.60, but fix a bug, by requiring at least 64 bits. * m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Likewise. * m4/longlong.m4 (gl_AC_TYPE_LONG_LONG): Now just call AC_TYPE_LONG_LONG_INT. This macro is obsolete and will go soon. * m4/ulonglong.m4 (gl_AC_TYPE_UNSIGNED_LONG_LONG): Likewise. * m4/stdint.m4 (gl_STDINT_H): Rewrite to accommodate stdint_.h changes. Make 2.59 a prerequisite. Check and substitute for HAVE_LONG_LONG_INT. Rely on Autoconf to check for stdint.h and inttypes.h. Do not use special include files; just use the defaults. Check for sys/inttypes.h and sys/bitypes.h in the usual way now. Remove no-longer-needed tests for HAVE_LONG_64BIT, HAVE_LONG_LONG_64BIT, int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t uint64_t, int_least8_t, int_least16_t, int_least32_t, int_least64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t, int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast8_t uint_fast16_t, uint_fast32_t, uint_fast64_t, intptr_t, uintptr_t, intmax_t, uintmax_t, INT8_MIN, INT8_MAX, UINT8_MAX, INT16_MIN, INT16_MAX, UINT16_MAX, INT32_MIN, INT32_MAX, UINT32_MAX, INT64_MIN, INT64_MAX, UINT64_MAX, INT_LEAST8_MIN, INT_LEAST8_MAX, UINT_LEAST8_MAX, INT_LEAST16_MIN, INT_LEAST16_MAX, UINT_LEAST16_MAX, INT_LEAST32_MIN, INT_LEAST32_MAX, UINT_LEAST32_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST8_MIN, INT_FAST8_MAX, UINT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX, UINT_FAST16_MAX, INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX, INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX, INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX, INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX, PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX. Check for C99 conformance more strictly, by detecting bugs in glibc 2.4, Solaris 10, and OpenBSD 3.9. On the other hand do not check for things that C99 does not require, e.g., int8_t. If a test isn't needed unless isn't working, and is unlikely to be needed for any other reason, then don't do it unless isn't working. Do not check for ptrdiff_t or size_t, since we assume C89 freestanding at least. Do not check for sig_atomic_t, wchar_t, or wint_t, since the code now does the right thing even if the types are not defined. Instead use: (gl_STDINT_TYPE_PROPERTIES): New macro. (gl_HEADER_STDINT_H, gl_HEADER_INTTYPES_H): Remove. Don't bother testing whether clashes, as Autoconf does this for us now. All uses removed. (gl_STDINT_CHECK_TYPES, gl_STDINT_MISSING_BOUND): (gl_STDINT_MISSING_BOUNDS, gl_STDINT_MISSING_BOUNDS2): (gl_CHECK_TYPE_SAME): Remove; no longer needed. (gl_STDINT_BITSIZEOF): Don't bother to check whether the type exists, since we'll return 0 anyway in that case. (gl_INTEGER_TYPE_SUFFIX, gl_STDINT_INCLUDES): New macros. 2006-07-01 Paul Eggert * lib/stdint_.h (_GL_STDINT_H): Renamed from _STDINT_H, to avoid possible collision with system files. (, , ) [defined __cplusplus && ! defined __STDC_CONSTANT_MACROS)]: Do not include, since we don't need WCHAR_MIN and WCHAR_MAX in this case. (): Do not include; no longer needed. (): Include if @HAVE_SYS_TYPES_H@, not if (defined(__OpenBSD__) || defined(__bsdi__) || defined(__sgi)). (): Include if @HAVE_SYS_INTTYPES_H@ && !@HAVE_INTTYPES_H@, not if (defined(__FreeBSD__) && (__FreeBSD__ >= 3) && (__FreeBSD__ <= 4)). (__STDINT_H__) [@HAVE_STDINT_H@ && defined __sgi && ! defined __c99]: Define, to work around IRIX incompatibility. (@FULL_PATH_STDINT_H@) [!(defined(__sgi) && @HAVE_INTTYPES_H@ && !defined(__c99))]: Include in this case too, since it's harmless now. () [@HAVE_INTTYPES_H@]: Include, since it's no longer dangerous to do so. (@FULL_PATH_INTTYPES_H@) [(defined(__hpux) || defined(_AIX)) && @HAVE_INTTYPES_H@]: Do not include, since we now include . (_STDINT_MIN, _STDINT_MAX): New macros. (int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t): (uint64_t, int_least8_t, uint_least8_t, int_least16_t): (uint_least16_t, int_least32_t, uint_least32_t, int_least64_t): (uint_least64_t, int_fast8_t, uint_fast8_t, int_fast16_t): (uint_fast16_t, int_fast32_t, uint_fast32_t, int_fast64_t): (uint_fast64_t, intptr_t, uintptr_t, intmax_t, uintmax_t): Now macros, not typedefs; this simplifies things quite a bit. Use long int for all types narrower than int64_t. (intmax_t, uintmax_t, INTMAX_C, UINTMAX_C): Define in terms of long long int or int64_t or long int, not int64_t or int32_t. This saves some compile-time testing. (INT8_MIN, INT8_MAX, UINT8_MAX, INT16_MIN, INT16_MAX, UINT16_MAX): (INT32_MIN, INT32_MAX, UINT32_MAX, INT64_MIN, INT64_MAX): (UINT64_MAX, INT_LEAST8_MIN, INT_LEAST8_MAX, UINT_LEAST8_MAX): (INT_LEAST16_MIN, INT_LEAST16_MAX, UINT_LEAST16_MAX): (INT_LEAST32_MIN, INT_LEAST32_MAX, UINT_LEAST32_MAX): (INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST8_MIN): (INT_FAST8_MAX, UINT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX): (UINT_FAST16_MAX, INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX): (INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX, INTPTR_MIN): (INTPTR_MAX, UINTPTR_MAX, INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX): (PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX): (SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX): undef any previous version and define our own version, for simplicity and consistency with the new macros for types. (PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX): (SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX): Simplify definitions by using _STDINT_MIN and _STDINT_MAX where appropriate. Rely on new symbols @PTRDIFF_T_SUFFIX@, @SIG_ATOMIC_T_SUFFIX@, @SIZE_T_SUFFIX@, @WCHAR_T_SUFFIX@, @WINT_T_SUFFIX@ to keep things simple here. (UINT8_C, UINT16_C, UINT32_C, INT64_C, UINT64_C): Simplify by assuming typical 8/16/32/64 host, since we're already doing that elsewhere anyway. Use (LONG_MAX >> 31 >> 31 == 1) rather than @HAVE_LONG_64BIT@, and assume long long int is 64 bits if available. This speeds up 'configure'. 2006-07-01 Eric Blake * m4/stdarg.m4 (gl_STDARG_H): Use proper AH_VERBATIM. Reported by Andreas Buening. 2006-07-01 Eric Blake * m4/stdarg.m4 (gl_STDARG_H): Properly parenthesize gl_va_copy. 2006-06-30 Jim Hyslop (tiny change) * lib/getaddrinfo.c: fixed typo 2006-06-29 Jim Meyering * modules/strftime (Maintainer): Add my name, since with the FPRINTFTIME changes strftime.c has forked from glibc. 2006-06-29 Eric Blake * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): Use AC_C_INLINE. 2006-06-29 Eric Blake * m4/sys_stat_h.m4 (gl_HEADER_SYS_STAT_H): New file. 2006-06-29 Eric Blake * lib/stat_.h: New file. 2006-06-29 Eric Blake * lib/stat_.h (rpl_mkdir): Declare inline, to avoid warnings about unused static function. 2006-06-29 Eric Blake * doc/functions.texi (Function Portability): Document missing lstat on mingw. 2006-06-29 Eric Blake * MODULES.html.sh: Add sys_stat. * modules/sys_stat: New module. * modules/mkstemp (Depends-on): Add sys_stat. 2006-06-29 Derek R. Price * m4/strftime.m4: Don't call AC_FUNC_STRFTIME. 2006-06-29 Derek R. Price * m4/c-bs-a.m4: Removed. 2006-06-29 Derek R. Price * lib/strftime.c: Assume strftime() exists. 2006-06-29 Derek Price * modules/c-bs-a: Removed - \a is C89. * MODULES.html.sh: Remove c-bs-a. 2006-06-29 Bruno Haible * modules/wcwidth (License): Change to LGPL. 2006-06-28 Simon Josefsson * tests/test-getaddrinfo.c: Test getnameinfo too. Call WSAStartup on _WIN32. * modules/getaddrinfo (Depends-on): Add inet_ntop, needed by getnameinfo. 2006-06-28 Simon Josefsson * m4/getaddrinfo.m4: Look for getnameinfo prototypes too. 2006-06-28 Simon Josefsson * lib/getaddrinfo.c: Try to load ws2_32.dll on Windows, to find the functions there. It will succeed on Windows XP, but on Windows 2000 and (presumably) earlier, it will fail, and use the internal re-implementation. (use_win32_p): New function. (getaddrinfo): Use strtoul on servname, to support numeric ports. Support AI_NUMERICSERV to disable getservbyname. (getnameinfo): New function, only supports NI_NUMERICHOST|NI_NUMERICSERV for now. * lib/getaddrinfo.h: Test and check for AI_* flags separately, MinGW only have some of them. Add AI_NUMERICSERV. Add prototype for getnameinfo. 2006-06-28 Eric Blake * modules/wcwidth: New file. * modules/mbchar (Depends-on): Add wcwidth. * modules/mbswidth (Depends-on): Add wcwidth. * MODULES.html.sh: Add wcwidth. 2006-06-28 Eric Blake * m4/mbswidth.m4 (gl_MBSDWIDTH): Move wcwidth from here... * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): ...to this new file. 2006-06-28 Eric Blake * lib/xvasprintf.h: Fix comments. 2006-06-28 Eric Blake * lib/mbchar.h (wcwidth): Include wcwidth.h. * lib/mbswidth.c (wcwidth): Move from here... * lib/wcwidth.h: ...to this new file. 2006-06-28 Derek R. Price * m4/savedir.m4: Remove AC_FUNC_CLOSEDIR_VOID requirement. * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Don't require AC_C_CONST, since it's obsolete. * m4/strftime.m4 (gl_FUNC_GNU_STRFTIME): Likewise. 2006-06-28 Derek R. Price * lib/savedir.c (CLOSEDIR): Remove. All uses changed to closedir. Autoconf 2.60 says this stuff was obsolete. 2006-06-28 Bruno Haible * modules/wcwidth (Files): Add m4/wchar_t.m4. 2006-06-28 Bruno Haible * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Also require AC_C_INLINE and gt_TYPE_WCHAR_T. 2006-06-28 Bruno Haible * lib/wcwidth.h: Declare nothing if !HAVE_WCHAR_T. Provide a fallback declaration for wcwidth. * lib/mbswidth.c: Restore the includes of and . 2006-06-28 Bruno Haible * lib/mkdtemp.c [MINGW]: Include . (mkdir): Define using _mkdir. 2006-06-28 Bruno Haible * lib/getaddrinfo.h: Fix POSIX URL. * lib/getaddrinfo.c (WIN32_NATIVE): New macro. Use it instead of _WIN32. (use_win32_p): Make static. (getaddrinfo): Reject service name if it is empty or does not consist solely of decimal digits, or if its value is > 65535. (getnameinfo): Remove useless casts. 2006-06-27 Simon Josefsson * modules/sys_select: New file, suggested by Bruno Haible, Paul Eggert and Martin Lambers. 2006-06-27 Simon Josefsson * m4/sys_select_h.m4: New file, suggested by Bruno Haible, Paul Eggert and Martin Lambers. 2006-06-27 Bruno Haible * m4/stdint.m4 (gl_STDINT_BITSIZEOF): For nonexistent types, set the result to 0, not to empty. Reported by Martin Neitzel . 2006-06-27 Bruno Haible * lib/stdint_.h (intmax_t, uintmax_t): Undefine before typedef. 2006-06-26 Simon Josefsson * m4/inet_ntop.m4: Don't check for sys/types.h, we assume it is present. 2006-06-26 Paul Eggert * lib/base64.c (B64): Use _ as the formal parameter, not x, to avoid bug in IBM C V6 for AIX. Problem reported by Larry Jones in . 2006-06-26 Mark D. Baushke * m4/stdint.m4 (gl_STDINT_H): Treat BSD/OS like OpenBSD. 2006-06-26 Bruno Haible * modules/stdint (Makefile.am): Also substitute HAVE_WCHAR_H. 2006-06-26 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Test also for . 2006-06-26 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Don't include when using the SGI C compiler in pre-C99 mode. Suggested by Mark D. Baushke and Larry Jones. 2006-06-26 Bruno Haible * lib/stdint_.h: Include if necessary for WCHAR_MIN or WCHAR_MAX. Reported by Mark D. Baushke and Larry Jones. 2006-06-26 Bruno Haible * lib/stdint_.h: Don't include when using the SGI C compiler in pre-C99 mode. Suggested by Mark D. Baushke and Larry Jones. 2006-06-23 Simon Josefsson Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Define MOSTLYCLEANDIRS. Emit mostlyclean-local rule. (func_emit_tests_Makefile_am): Likewise. * modules/sys_socket (Makefile.am): Use MOSTLYCLEANDIRS. 2006-06-23 Mark D. Baushke * lib/stdint_.h: Treat BSD/OS like OpenBSD. 2006-06-23 Bruno Haible * tests/test-stdint.c: Update to match ISO C 99 Technical Corrigendum 1. 2006-06-23 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Treat IRIX like OpenBSD. 2006-06-23 Bruno Haible * lib/stdint_.h: Treat IRIX like OpenBSD. 2006-06-23 Bruno Haible * lib/stdint_.h (UINT8_C, UINT16_C, UINT32_C): Define according to ISO C 99 Technical Corrigendum 1. 2006-06-22 Simon Josefsson * m4/sockpfaf.m4: Include winsock2.h too, to make it work under MinGW. 2006-06-22 Paul Eggert * lib/glob.c (collated_compare): Remove 'const' uses that weren't needed. Some compiler complained about some of them. Problem reported by Larry Jones in . 2006-06-21 Simon Josefsson * tests/test-getaddrinfo.c: New file. * modules/getaddrinfo-tests: New file. * MODULES.html.sh: Add inet_pton. * modules/inet_pton: New file. 2006-06-21 Simon Josefsson * m4/getaddrinfo.m4: Don't define WINVER. Look for gethostbyname in -lws2_32 too. Fixes getaddrinfo on Windows 2000, with the price of using the (limited) gnulib implementation on Windows XP. * m4/inet_pton.m4: New file. 2006-06-21 Simon Josefsson * lib/getaddrinfo.c (getaddrinfo): Set ai_family in the return variable. * lib/socket_.h: Don't define WINVER. * lib/inet_pton.h, inet_pton.c: New file, taken from glibc but slightly modified to work in gnulib. 2006-06-21 Simon Josefsson * doc/gnulib.texi (Windows sockets): Add. 2006-06-21 Paul Eggert * lib/read-file.c (fread_file): Start with buffer allocation of 0 bytes rather than 1 byte; this simplifies the code. Don't invoke feof; it's not needed. Refactor to avoid duplicate code to free buffer and save/restore errno. (internal_read_file): Remove unused local. 2006-06-20 Paul Eggert * lib/openat.c (openat): Use ?:, not if, to work around GCC bug 4210 . Problem reported by Denis Excoffier in . 2006-06-19 Yoann Vandoorselaere * modules/sys_socket, modules/socklen: Include sys/types since FreeBSD 4.x's sys/socket.h needs it. 2006-06-19 Simon Josefsson * lib/inet_ntop.c: Always build inet_ntop4, since inet_ntop6 calls it. 2006-06-19 Paul Eggert * lib/alloca_.h (alloca) [defined alloca]: Don't define or declare. 2006-06-19 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Enclose the values of FULL_PATH_STDINT_H and FULL_PATH_INTTYPES_H in angle brackets. Reported by Mark D. Baushke . 2006-06-17 Eric Blake * m4/rmdir-errno.m4 (gl_FUNC_FMDIR_NOTEMPTY): Assume errno.h declares errno. 2006-06-17 Bruno Haible * m4/stdint.m4 (gl_STDINT_H) [FreeBSD >= 5]: Don't include . 2006-06-17 Bruno Haible * m4/setenv.m4 (gl_PREREQ_SETENV, gl_PREREQ_UNSETENV): Remove test whether errno is declared. Assume declares errno. 2006-06-17 Bruno Haible * lib/stdint_.h [FreeBSD >= 5]: Don't include . 2006-06-17 Bruno Haible * lib/stdint_.h (_UINT8_T, _UINT32_T, _UINT64_T): New macros. Fixes a problem on Solaris 2.5.1. 2006-06-16 Eric Blake * lib/unsetenv.c [!defined errno]: Assume errno.h declares errno. * lib/unicodeio.c [!defined errno]: Likewise. * lib/strtol.c [!defined errno]: Likewise. * lib/strtod.c [!defined errno]: Likewise. 2006-06-15 Eric Blake * m4/ssize_t.m4 (gt_TYPE_SSIZE_T): Work in spite of -Werror. 2006-06-15 Eric Blake * config/srclist.txt (ssize_t.m4): Lose sync. 2006-06-15 Bruno Haible * modules/stdint (Files): Include m4/full-header-path.m4, m4/size_max.m4, m4/wchar_t.m4. (Makefile.am): Many more substitutions. * modules/stdint-tests: New file. * tests/test-stdint.c: New file. 2006-06-15 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Rewritten to produce a complete stdint.h. (gl_HEADER_STDINT_H, gl_HEADER_INTTYPES_H, gl_STDINT_CHECK_TYPES, gl_STDINT_MISSING_BOUND, gl_STDINT_MISSING_BOUNDS, gl_STDINT_MISSING_BOUNDS2, gl_STDINT_BITSIZEOF, gl_CHECK_TYPES_SIGNED, gl_CHECK_TYPE_SAME): New macros. 2006-06-15 Bruno Haible * m4/size_max.m4 (gl_SIZE_MAX): Make it work also when cross-compiling. 2006-06-15 Bruno Haible * lib/stdint_.h: Rewritten to be fully auto-configured. Fixes bug on HP-UX/IA64. 2006-06-11 Paul Eggert * lib/getdate.y (__attribute__): Don't define if already defined. Problem reported by Larry Jones. * lib/utimens.c (__attribute__): Likewise. 2006-06-04 Paul Eggert * lib/regexec.c (group_nodes_into_DFAstates): Fix a buffer overrun reported by Andreas Schwab. 2006-05-30 Ralf Wildenhues Bruno Haible * m4/strndup.m4 (gl_FUNC_STRNDUP): Replace the AC_REPLACE_FUNCS with a check for the declaration of strnlen and a run test that exposes the AIX 5.1 strnlen bug. In the failure case, #define strndup to rpl_strndup. 2006-05-30 Ralf Wildenhues Bruno Haible * lib/strndup.c (strndup) [!_LIBC]: Don't undefine macro definition. 2006-05-28 Ralf Wildenhues * m4/c-strtod.m4 (gl_C99_STRTOLD): Use a link test rather than a compile test, for Tru64 4.0D. 2006-05-28 Karl Berry * config/srclist.txt (printf-args.c): lose sync. 2006-05-26 Martin Lambers * lib/getpass.c: Updates the test for the native W32 API, and adds missing includes, thus fixing compilation warnings. 2006-05-25 Sergey Poznyakoff * lib/exclude.c (exclude_fnmatch): New function. (excluded_file_name): Call exclude_fnmatch. * lib/exclude.h (excluded_file_name): New prototype 2006-05-25 Paul Eggert * lib/tempname.c (small_open, large_open): New macros. (__open, __open64) [!_LIBC]: Remove. (__gen_tempname): Use small_open and large_open instead of __open and __open64. This fixes a portability bug on HP-UX 11.11i reported by Simon Wing-Tang in . 2006-05-24 Bruno Haible * lib/printf-args.c (printf_fetchargs): Turn NULL pointers for TYPE_STRING and TYPE_WIDE_STRING into a non-NULL replacement. Reported by Thorsten Maerz via Aaron Stone . 2006-05-19 Paul Eggert * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Rename cache variables to use gl_ rather than jm_. Link, don't run, so that cross-compiles are allowed. Check that resulting type is arithmetic. Move AC_REQUIRE and AC_CHECK_HEADERS_ONCE outside of AC_CACHE_CHECK, since they're not really conditional on the cache. (gl_PREREQ_NANOSLEEP): Check for sys/select.h. 2006-05-19 Paul Eggert * lib/nanosleep.c [HAVE_SYS_SELECT_H]: Include . Use the usual Autoconf way to include and/or sys/time.h. (my_usleep): Don't mishandle maximum value. 2006-05-19 Jim Meyering * lib/getugroups.c: Correct an outdated comment. From Bruno Haible. 2006-05-17 Bruno Haible Cygwin portability. * lib/classpath.c (PATH_SEPARATOR) [CYGWIN]: Define as ':'. 2006-05-17 Bruno Haible * lib/stdint_.h: Fix recognition of Cygwin. 2006-05-15 Bruno Haible * build-aux/config.rpath: Improve support for Sun C 5.9 on Linux, based on libtool patch by Ralf Wildenhues. 2006-05-14 Paul Eggert * m4/stdbool.m4 (AC_HEADER_STDBOOL): Fix overly-picky test for C99 conformance; (bool) 0.5 is an integer constant expression, but (bool) -0.5 is not. Problem reported by Fedor Sergeev in . 2006-05-11 Simon Josefsson * m4/xvasprintf.m4: Fix obvious typo. 2006-05-11 Jim Meyering * lib/sha1.c (sha1_buffer): Correct comment: s/MD5/SHA1/. From James Lemley. 2006-05-10 Simon Josefsson * lib/md4.c: Typo fix, update copyright years. (K1, K2): Don't use L because it turn computations into 64-bit on 64-bit platforms. 2006-05-10 Paul Eggert * lib/crc.c (crc32_update): Remove unnecessary L suffix. * lib/md4.c (rol): Cast right-shift arg to uint32_t to prevent unwanted sign propagation, e.g., on hosts with 64-bit int. There still are some problems with reeelly weird theoretical hosts (e.g., 33-bit int) but it's not worth worrying about now. * lib/sha1.c (rol): Likewise. (K1, K2, K3, K4): Remove unnecessary L suffix. 2006-05-10 Bruno Haible * lib/des.c: Cast to avoid warnings. 2006-05-09 Bruno Haible * modules/xvasprintf (Files): Add m4/xvasprintf.m4. (Depends-on): Depend also on xsize, stdarg. (configure.ac): Add gl_XVASPRINTF. 2006-05-09 Bruno Haible * m4/xvasprintf.m4: New file. 2006-05-09 Bruno Haible * lib/xvasprintf.c: Include limits.h, string.h, xsize.h. (EOVERFLOW): Define fallback value. (xstrcat): New function. (xvasprintf): Recognize the special case of a string concatenation. 2006-05-08 Eric Blake * gnulib-tool (func_version): Base copyright year on CVS date. (func_emit_copyright_notice): New function. (func_emit_lib_Makefile_am): Use it. (func_emit_tests_Makefile_am): Likewise. (func_import): Likewise. 2006-05-08 Bruno Haible * modules/stdarg: New file. * MODULES.html.sh (func_all_modules): Add section for . 2006-05-08 Bruno Haible * m4/stdarg.m4: New file, from GNU gettext. 2006-05-08 Bruno Haible * config/srclist.txt (build-aux/config.rpath): different from latest release. 2006-05-08 Bruno Haible * build-aux/config.rpath: Add support for Sun C 5.9 on Linux. 2006-05-05 Jim Meyering * m4/warning.m4: New file, derived from bison's file by the same name. 2006-05-03 Bruno Haible * lib/stdint_.h: Shorter URL. * lib/inttypes.h: Likewise. 2006-05-02 Paul Eggert * modules/inttypes (Maintainer): Change from Derek Price to 'all'. 2006-05-02 Paul Eggert * lib/verify.h: Document the internals better. Most of this change was written by Bruno Haible. 2006-05-02 Paul Eggert * doc/verify.texi: New file, partly based on a proposal by Bruno Haible. 2006-05-02 Bruno Haible * m4/full-header-path.m4 (gl_FULL_HEADER_PATH): Move the include_next test from here... * m4/_inttypes_h.m4 (gl_INTTYPES_H): ... to here. 2006-04-29 Bruno Haible * lib/gcd.c: Use WORD_T and GCD instead of unsigned long and gcd. Suggested by Oskar Liljeblad . 2006-04-29 Bruno Haible * gnulib-tool: Make --update option actually work. 2006-04-29 Bruno Haible * doc/gcd.texi: New file. * doc/gnulib.texi: Include it. 2006-04-25 Paul Eggert * lib/getdate.y (get_date): When adding relative date, start with the initial time, not with the result of the first mktime call. 2006-04-25 Bruno Haible * gnulib-tool (func_import): Output the include directives in three blocks, sorted separately. Reported by Ben Pfaff . 2006-04-24 Paul Eggert * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Use prototype to define main with arguments, for C++. Reported by Eric Blake. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Prefer 'int main ()' to 'int main (void)', for C++. * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Likewise. * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Specify a return type for 'main', for C99 and C++. 2006-04-24 Paul Eggert * m4/fsusage.m4 (gl_FILE_SYSTEM_USAGE): Use return, not exit. Don't assume that exit status -1 is valid. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/putenv.m4 (gl_FUNC_PUTENV): Likewise. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Likewise. * m4/readdir.m4 (GL_FUNC_READDIR): Include . * m4/rename.m4 (vb_FUNC_RENAME): Likewise. * m4/unlink-busy.m4 (gl_FUNC_UNLINK_BUSY_TEXT): Use AC_RUN_IFELSE, not AC_TRY_RUN. Use return, not exit. Don't assume that functions can be used without declaring them, or that you can exit with status -1. * m4/utimes-null.m4 (gl_FUNC_UTIMES_NULL): Likewise. 2006-04-24 Karl Berry * config/srclist.txt (longdouble.m4): sync lost. 2006-04-24 Eric Blake * m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Avoid unused variable warning. 2006-04-24 Bruno Haible * m4/poll.m4 (gl_FUNC_POLL): When cross-compiling, reject also the poll() implementation in AIX. Reported by Ralf Wildenhues . 2006-04-24 Bruno Haible * m4/poll.m4 (gl_FUNC_POLL): Rearrange code, so that POLL_H gets assigned exactly once. 2006-04-23 Claudio Fontana Bruno Haible * modules/gettext (Makefile.am): Add a -I flag for . * gnulib-tool (func_emit_lib_Makefile_am): Emit empty default value for AM_CPPFLAGS. 2006-04-23 Bruno Haible * modules/copy-file: Depend on unistd. * modules/execute: Likewise. * modules/fatal-signal: Likewise. * modules/findprog: Likewise. * modules/mkdtemp : Likewise. * modules/pipe: Likewise. * modules/wait-process: Likewise. 2006-04-23 Bruno Haible * lib/fwriteerror.c (fwriteerror): Call fclose also when an error condition was already detected. Reported by Ben Pfaff . 2006-04-23 Bruno Haible * lib/copy-file.c: Include unconditionally. * lib/execute.c: Likewise. * lib/fatal-signal.c: Likewise. * lib/findprog.c: Likewise. * lib/mkdtemp.c: Likewise. * lib/pipe.h: Likewise. * lib/pipe.c: Likewise. * lib/wait-process.h: Likewise. 2006-04-23 Bruno Haible * gnulib-tool (func_usage): Fix --import description. Document --update. (func_import): Create temporary file in a temporary directory, if --dry-run is specified. Silence errors from 'grep' when there are no m4 files in $m4dir. (func_create_testdir): Silence errors from 'grep' when there are no m4 files in $m4dir. Reported by Karl Berry . 2006-04-20 Bruno Haible * m4/argp.m4 (gl_ARGP): Don't call AC_CHECK_DECLS_ONCE with more than one argument, so that the code will be portable to Autoconf 2.60. * m4/getlogin_r.m4 (gl_PREREQ_GETLOGIN_R): Likewise. * m4/getpass.m4 (gl_PREREQ_GETPASS): Likewise. * m4/unlocked-io.m4 (gl_FUNC_GLIBC_UNLOCKED_IO): Likewise. 2006-04-19 Derek Price Eric Blake * m4/full-header-path.m4 (gl_FULL_HEADER_PATH): Use rather than "/full/path.h". Update comment to match. Shorten & generalize m4_translit call via AS_TR_CPP. 2006-04-19 Derek Price Eric Blake * lib/inttypes.h: Correct grammar in comment. 2006-04-18 Derek Price Paul Eggert * modules/inttypes: New file. * modules/strtoimax, modules/strtoumax: Depend on inttypes. 2006-04-18 Derek Price Paul Eggert * m4/_inttypes_h.m4, m4/full-header-path.m4, m4/include_next.m4: New files. 2006-04-18 Derek Price Paul Eggert * lib/inttypes.h: New file. * lib/strtoimax.c: Assume . 2006-04-15 Paul Eggert * lib/utimens.c (futimens): glibc futimesat messes up if /proc isn't mounted. Problem reported by Kir Kolyshkin. 2006-04-13 Paul Eggert * lib/regcomp.c (init_dfa): Don't use wchar_t or wctype_t if RE_ENABLE_I18N is not defined. Problem reported by Mark D. Baushke via Derek R. Price. * lib/regex.h (RE_DUP_MAX): Update comment to match current implementation. 2006-04-12 Eric Blake * modules/time_r (Makefile.am): Remove lib_SOURCES line, as this is now done automatically by the corresponding Autoconf macro. 2006-04-11 Paul Eggert * m4/time_r.m4 (gl_TIME_R): Add AC_LIBSOURCES for time_r.c and time_r.h. 2006-04-09 Paul Eggert Merge regex changes from libc, removing some of our POSIX-conformance changes that were rejected and redoing them in a less-intrusive way. * lib/regcomp.c (re_compile_internal, init_dfa): Length arg is now size_t, not Idx. All uses changed. (peek_token): Forward decl now says internal_function. (__re_error_msgid, __re_error_msgid_idx): Now static rather than extern with attribute_hidden. (re_compile_pattern) [!defined _LIBC]: Use K&R-style defn. For some reason libc prefers K&R style defns for external functions. (regerror) [!defined _LIBC]: Likewise. (re_set_syntax, re_compile_fastmap, regcomp, regfree, re_comp): (seek_collating_symbol_entry, lookup_collation_sequence_value): (build_range_exp, build_collating_symbol): Use K&R-style defn. (re_compile_fastmap): Use '\0' to memset, not 0. (utf8_sb_map): Make the calculations more obvious. (init_dfa, parse_bracket_exp, build_charclass_op): Call calloc and cast result, as glibc does. (init_word_char, fetch_token, peek_token, peek_token_bracket): (build_range_exp, build_collating_symbol): Now internal functions. * lib/regex.c [!defined _LIBC]: Allow compiling with C++ compilers. * lib/regex.h (__USE_GNU_REGEX): New macro. Don't depend on _REGEX_SOURCE any more; depend on _GNU_SOURCE instead. Don't depend on VMS; depend on __VMS instead, for POSIX namespace cleanness. (regoff_t): Define to ssize_t, not long int. Remove the REG_ macros named below. Instead, make the old names (e.g., RE_BACKSLASH_ESCAPE_IN_LISTS) visible only if __USE_GNU_REGEX. (REG_BACKSLASH_ESCAPE_IN_LISTS): (REG_BK_PLUS_QM, REG_CHAR_CLASSES, REG_CONTEXT_INDEP_ANCHORS): (REG_CONTEXT_INDEP_OPS, REG_CONTEXT_INVALID_OPS): (REG_DOT_NEWLINE, REG_DOT_NOT_NULL, REG_HAT_LISTS_NOT_NEWLINE): (REG_INTERVALS, REG_LIMITED_OPS, REG_NEWLINE_ALT): (REG_NO_BK_BRACES, REG_NO_BK_PARENS, REG_NO_BK_REFS): (REG_NO_BK_VBAR, REG_NO_EMPTY_RANGES): (REG_UNMATCHED_RIGHT_PAREN_ORD, REG_NO_POSIX_BACKTRACKING): (REG_NO_GNU_OPS, REG_DEBUG, REG_INVALID_INTERVAL_ORD): (REG_IGNORE_CASE, REG_CARET_ANCHORS_HERE): (REG_CONTEXT_INVALID_DUP, REG_NO_SUB, REG_SYNTAX_EMACS): (REG_SYNTAX_AWK, REG_SYNTAX_GNU_AWK, REG_SYNTAX_POSIX_AWK): (REG_SYNTAX_GREP, REG_SYNTAX_EGREP, REG_SYNTAX_POSIX_EGREP): (REG_SYNTAX_ED, REG_SYNTAX_SED, _REG_SYNTAX_POSIX_COMMON): (REG_SYNTAX_POSIX_BASIC, REG_SYNTAX_POSIX_MINIMAL_BASIC): (REG_SYNTAX_POSIX_EXTENDED, REG_SYNTAX_POSIX_MINIMAL_EXTENDED): (REG_DUP_MAX, REG_UNALLOCATED, REG_REALLOCATE, REG_FIXED): (REG_NREGS): Remove. All uses replaced by the old RE_* names. (RE_BACKSLASH_ESCAPE_IN_LISTS): (RE_BK_PLUS_QM, RE_CHAR_CLASSES, RE_CONTEXT_INDEP_ANCHORS): (RE_CONTEXT_INDEP_OPS, RE_CONTEXT_INVALID_OPS): (RE_DOT_NEWLINE, RE_DOT_NOT_NULL, RE_HAT_LISTS_NOT_NEWLINE): (RE_INTERVALS, RE_LIMITED_OPS, RE_NEWLINE_ALT): (RE_NO_BK_BRACES, RE_NO_BK_PARENS, RE_NO_BK_REFS): (RE_NO_BK_VBAR, RE_NO_EMPTY_RANGES): (RE_UNMATCHED_RIGHT_PAREN_ORD, RE_NO_POSIX_BACKTRACKING): (RE_NO_GNU_OPS, RE_DEBUG, RE_INVALID_INTERVAL_ORD): (RE_IGNORE_CASE, RE_CARET_ANCHORS_HERE): (RE_CONTEXT_INVALID_DUP, RE_NO_SUB): Don't bother having these macros be independent of each others' values, since they no longer exist in the POSIX name space. Rename the following member names back to their old names, unless !__USE_GNU_REGEX. All uses changed back. (buffer): Renamed from re_buffer. (allocated): Renamed from re_allocated. (used): Renamed from re_used. (syntax): Renamed from re_syntax. (fastmap): Renamed from re_fastmap. (translate): Renamed from re_translate. (can_be_null): Renamed from re_can_be_null. (regs_allocated): Renamed from re_regs_allocated. (fastmap_accurate): Renamed from re_fastmap_accurate. (no_sub): Renamed from re_no_sub. (not_bol): Renamed from re_not_bol. (not_eol): Renamed from re_not_eol. (newline_anchor): Renamed from re_newline_anchor. (num_regs): Renamed from rm_num_regs. (start): Renamed from rm_start. (end): Renamed from rm_end. (free_state): Move up a bit. * lib/regex_internal.h (inline) [__GNUC__ < 3 && defined _LIBC]: #define to be empty. (ASCII_CHARS): New macro, replacing all uses of 0x80 and/or SBC_MAX / 2 when that is what is intended. (SBC_MAX): Define to UCHAR_MAX + 1, not 256. (__re_error_msgid, __re_error_msgid_idx): Remove decls; not needed. (MAX): New macro. (re_xmalloc, re_calloc, re_xrealloc, re_x2realloc): Remove. All uses changed back to re_malloc, etc. It's now the caller's responsibility to check for overflow; all callers changed. (re_alloc_oversized, re_x2alloc_oversized, re_xnmalloc, re_xnrealloc): (re_x2nrealloc): Remove. (free_state): Remove decl. * lib/regexc.c (regexec, re_match, re_search, re_match_2, re_search_2): (re_set_registers, re_exec): Use K&R-style defn. 2006-01-31 Roland McGrath * lib/regcomp.c (calc_eclosure_iter): Remove dead variables. Reported by Mike Frysinger . 2006-01-15 Andreas Jaeger [BZ #1950] * lib/regex_internal.c (re_string_reconstruct): Adjust for build_wcs_upper_buffer change. (build_wcs_upper_buffer): Change return type. 2005-12-10 Ulrich Drepper * lib/regex_internal.h: Include if available. 2005-12-06 Paolo Bonzini * lib/regex_internal.h (SIZE_MAX): Provide a default definition. 2005-10-14 Ulrich Drepper * lib/regcomp.c: Adjust for changed secondary hash function. 2005-09-30 Ulrich Drepper * lib/regex.h: Pretty printing. Clean up namespace a bit. 2005-09-30 Jakub Jelinek * lib/regexec.c (update_cur_sifted_state, check_arrival, check_arrival_add_next_nodes): Avoid using uninitialized variable. 2005-09-06 Paul Eggert Ulrich Drepper [BZ #1302] * lib/regex_internal.h (bitset_t): Renamed from bitset. All uses changed. (bitset_word_t): Renamed from bitset_word. All uses changed. 2005-09-22 Ulrich Drepper [BZ #281] * lib/regex.h: Define RE_TRANSLATE_TYPE as unsigned char *. * lib/regcomp.c: Remove unnecessary uses of unsigned RE_TRANSLATE_TYPE. * lib/regex_internal.h: Likewise. * lib/regex_internal.c: Likewise. * lib/regexec.c: Likewise. Based on a patch by Stepan Kasal . 2005-09-07 Ulrich Drepper * lib/regexec.c (find_recover_state): Remove unnecessary initialization. (transit_state_bkref): Make DFA a const pointer. (get_subexp): Likewise. (check_arrival): Likewise. (update_cur_sifted_state): Likewise. (re_search_internal): Likewise. (prune_impossible_nodes): Likewise. (acquire_init_state_context): Likewise. (proceed_next_node): Likewise. (set_regs): Likewise. (free_fail_stack_return): Likewise. (check_arrival_expand_ecl): Mark DFA parameter as const. (check_arrival_expand_ecl_sub): Likewise. (check_subexp_limits): Likewise. (sub_epsilon_src_nodes): Likewise. (add_epsilon_src_nodes): Likewise. (merge_state_array): Likewise. (update_regs): Likewise. (build_trtable): Likewise. (sift_states_backward): Mark MCTX parameter as const. (build_sifted_states): Likewise. (update_cur_sifted_state): Likewise. (sift_states_mkref): Likewise. (check_arrival_expand_ecl): Mark eclosure as const. (check_dst_limits_calc_pos_1): Likewise. * lib/regex_internal.h (re_match_context_t): Make dfa a const pointer. 2005-09-06 Ulrich Drepper * lib/regexec.c (merge_state_with_log): Define dfa as const pointer. (transit_state_sb): Likewise. (transit_state_mb): Likewise. (sift_states_iter_mb): Likewise. (check_arrival_add_next_nodes): Likewise. (check_node_accept_bytes): Change first parameter to pointer-to-const. [_LIBC] (re_search_2_stub): Use mempcpy. * lib/regex_internal.c (re_string_reconstruct): Avoid calling mbrtowc for very simple UTF-8 case. * lib/regex_internal.c (re_acquire_state): Make DFA pointer arg a pointer-to-const. (re_acquire_state_context): Likewise. * lib/regex_internal.h: Adjust prototypes. * lib/regex.c: Prevent using C++ compilers. * lib/regex_internal.c (re_acquire_state): Minor code rearrangement. (re_acquire_state_context): Likewise. 2006-04-09 Paul Eggert * modules/regex (Depends-on): Add ssize_t. 2006-04-09 Paul Eggert * m4/regex.m4 (gl_REGEX): Check for new glibc interface to translation table. 2006-04-09 Paul Eggert * doc/gnulib-tool.texi (Modified imports): pathname -> file name. 2006-03-29 Mark D. Baushke Bruno Haible * lib/stdint_.h: On OpenBSD, don't redefine types already included in and . 2006-03-25 Ralf Wildenhues * m4/argz.m4 (gl_FUNC_ARGZ): If we define `error_t', also define `__error_t_defined', so argp.h will not typedef the former. 2006-03-25 Paul Eggert * m4/regex.m4 (gl_REGEX): Don't insist on REG_SYNTAX_POSIX_EGREP, REG_SYNTAX_EMACS, and REG_IGNORE_CASE. Settle for the traditional glibc names. Even if glibc is changed to conform to POSIX, the traditional names will be available anyway, since regex depends on the extensions module. Also, fix a longstanding typo in the implementation of Spencer ERE test #75 from grep 2.3. Problems reported by Emanuele Giaquinta. Also, change sense of cached variable, so that the message makes sense. 2006-03-24 Simon Josefsson * lib/base64.c: Fix problems reported by Eric Blake , including some doc fixes. (base64_encode_alloc): Fix +1 bug on allocation failures. 2006-03-24 Ralf Wildenhues * lib/base64.c (base64_encode): Do not read past end of array with unsanitized input on systems with CHAR_BIT > 8. 2006-03-24 Eric Blake * lib/time_r.c (copy_string_result): Remove, as it is no longer used. 2006-03-22 Karl Berry * config/srclist.txt (*setenv.[ch]): get from coreutils. * config/srclistvars.sh (COREUTILS): new var. 2006-03-17 Jim Meyering * m4/regex.m4 (gl_REGEX): Fix typo in last change: s/_REGEX_WIDE_OFFSETS/_REGEX_LARGE_OFFSETS/. 2006-03-16 Paul Eggert * m4/regex.m4 (gl_REGEX): Don't check for off_t, since the code no longer needs it. Instead, check that regoff_t is as least as wide as ptrdiff_t. Don't define _REGEX_WIDE_OFFSETS unless using the included regex, so that our regex.h stays compatible with the installed regex. This is helpful for installers who configure --without-included-regex. Problem reported by Emanuele Giaquinta. 2006-03-16 Paul Eggert * lib/regex.h (regoff_t) [defined _REGEX_LARGE_OFFSETS]: Typedef to long int, not to off_, as POSIX will likely change in that direction. 2006-03-15 Eric Blake * m4/dirfd.m4 (gl_FUNC_DIRFD): Use AC_REQUIRE for AC_HEADER_DIRENT. 2006-03-13 Sergey Poznyakoff * lib/argp-help.c (validate_uparams): Fix typo * lib/argp-parse.c (argp_default_options): Consistently begin help messages with a lowercase letter. 2006-03-11 Paul Eggert * lib/time_r.h (asctime_r, ctime_r): Remove. These functions can overrun buffers and shouldn't be used (much as gets shouldn't be used). * lib/time_r.c (asctime_r, ctime_r): Likewise. 2006-03-08 Simon Josefsson * m4/gc-random.m4: Permit 'no' as variable values and fix warnings, suggested by Ralf Wildenhues . 2006-03-08 Simon Josefsson * m4/gc-random.m4: Call AC_CANONICAL_HOST and use $host_os instead of $target, suggested by Ralf Wildenhues . 2006-03-08 Simon Josefsson * lib/gc-gnulib.c (randomize): Don't open files called 'no', they signal that configure disabled the device. 2006-03-08 Simon Josefsson * build-aux/maint.mk: Fix refresh-po, to handle no translated languages. 2006-03-07 Simon Josefsson * modules/getopt (Depends-on): Add unistd. * modules/unistd: New file. 2006-03-07 Simon Josefsson * modules/gc-random: New file. 2006-03-07 Simon Josefsson * m4/unistd_h.m4: New file. 2006-03-07 Simon Josefsson * m4/readline.m4 (gl_FUNC_READLINE): Rewrite the cached part of the test to be side-effect free by storing the result in the cache variable gl_cv_lib_readline, and moving the assignment of LIBREADLINE and LTLIBREADLINE outside the COMMANDS-TO-SET-IT. From Ralf Wildenhues . 2006-03-07 Simon Josefsson * m4/gc-random.m4: New file, mostly from gc.m4. Warn instead of error on missing devices (the functions will return an error). * m4/gc.m4: Move random stuff to gc-random.m4 2006-03-07 Simon Josefsson * lib/unistd_.h: New file. 2006-03-07 Simon Josefsson * lib/gc-libgcrypt.c, gc-gnulib.c: Use GC_USE_RANDOM. 2006-03-07 Paul Eggert * m4/unistd_h.m4 (gl_HEADER_UNISTD): Rename, to match modules file. Problem reported by Juan Manuel Guerrero. 2006-03-07 Paul Eggert * lib/c-stack.c: Include unistd.h unconditionally, since we now assume the unistd module. * lib/getlogin_r.c: Likewise. * lib/getlogin_r.h: Likewise. * lib/glob.c: Likewise. * lib/pagealign_alloc.c: Likewise. * lib/unistd_.h: Remove; no longer needed. 2006-03-07 Paul Eggert * MODULES.html.sh (Support for systems lacking POSIX:2001): Add unistd. * modules/c-stack (Depends-on): Add unistd. * modules/getlogin_r: Likewise. * modules/glob: Likewise. * modules/pagealign_alloc: Likewise. * modules/unistd (Files): Remove lib/unistd_.h. (EXTRA_DIST): Remove. (unistd.h): Create using 'echo' rather than 'cp', so that we don't need unistd_.h. (MOSTLYCLEANFILES): Remove unistd.h-t. 2006-03-03 Simon Josefsson * build-aux/maint.mk: Add several syntax checks from CoreUtils. 2006-03-03 Simon Josefsson * build-aux/maint.mk: Add refresh-po rule, based on ideas from libidn and bison. 2006-03-03 Simon Josefsson * build-aux/maint.mk: Add indent target. 2006-03-03 Ralf Wildenhues (tiny change) * m4/poll.m4 (gl_FUNC_POLL): If we deem poll(2) unacceptable, use our replacement poll.h in any case, to avoid a differing declaration from a system header. Seen on AIX. 2006-03-01 Simon Josefsson * lib/readline.c: Fix typo, tiny patch from Stepan Kasal . 2006-03-01 Paul Eggert * modules/gettime (Depends-on): Add extensions module. * modules/nanosleep (Depends-on): Likewise. * modules/settime (Depends-on): Likewise. 2006-03-01 Paul Eggert * m4/clock_time.m4 (gl_CLOCK_TIME): Require gl_USE_SYSTEM_EXTENSIONS, not merely AC_GNU_SOURCE, for the benefit of Solaris 10 when compiled pedantically. * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise. * m4/timespec.m4 (gl_TIMESPEC): Likewise. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Use "=" with "test", not "==". Reported by Ralf Wildenhues. 2006-03-01 Karl Berry * doc/Copyright/request-*: new files, synced from gnuorg. 2006-03-01 Karl Berry * config/srclist.txt (Copyright/*): new entries. 2006-02-28 Simon Josefsson * lib/getopt.c: Protect #include of unistd.h, for MSVS. 2006-02-27 Simon Josefsson * lib/base64.h: Indent #define's. From Jim Meyering . 2006-02-27 Jim Meyering Revert the change of 2006-02-24, so these files can continue to be sync'd from gettext. * lib/mkdtemp.c, setenv.c, unsetenv.c: *Un*-normalize inclusion of `config.h'. 2006-02-26 Paul Eggert * modules/intprops: New file. * MODULES.html.sh (Numeric conversion functions ): Add intprops. * modules/getloadavg (Files): Remove lib/intprops.h. (Depends-on): Add intprops. * modules/human: Likewise. * modules/inttostr: Likewise. * modules/openat: Likewise. * modules/sig2str: Likewise. * modules/userspec: Likewise. * modules/utimecmp: Likewise. * modules/xnanosleep: Likewise. * modules/xstrtol: Likewise. 2006-02-24 Ralf Wildenhues (tiny changes) * modules/xstrtod: Omit xstrtod.h, xstrtod.c; they're in LIB_SOURCES. * modules/lock-tests (TESTS): Use $(EXEEXT). * modules/tls-tests: Likewise. * modules/argp-tests: Likewise. (check_PROGRAMS): New var, replacing... (noinst_PROGRAMS, test_argp_SOURCES): Remove. 2006-02-24 Ralf Wildenhues * lib/mkdtemp.c, lib/setenv.c, lib/unsetenv.c: Normalize inclusion of `config.h'. 2006-02-24 Paul Eggert * lib/glob.c: Say "invalid" rather than "illegal" in comments. 2006-02-22 Ralf Wildenhues Sync from coreutils. * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Require gl_FUNC_LCHMOD and gl_CHDIR_SAFER. 2006-02-22 Jim Meyering Sync from coreutils. * m4/chdir-safer.m4: New file. 2006-02-20 Paul Eggert * lib/getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where AT_FDCWD exceeds INT_MAX. * lib/openat.h (AT_FDCWD): Likewise. 2006-02-17 Eric Blake * m4/getaddrinfo.m4 (gl_GETADDRINFO): Fix caching error. 2006-02-16 Simon Josefsson * modules/getaddrinfo (Depends-on): Add sys_socket. 2006-02-15 Simon Josefsson * build-aux/maint.mk: Add dsyntax-check rule. 2006-02-15 Eric Blake * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Don't attempt using winsock2.h or ws2tcpip.h when sys/socket.h is present. Fixes 'present but cannot compile' warnings on cygwin. * m4/socklen.m4 (gl_TYPE_SOCKLEN_T): Use gl_HEADER_SYS_SOCKET. Don't use ws2tcpip.h if sys/socket.h works. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Use gl_HEADER_SYS_SOCKET. (gl_GETADDRINFO): Don't use ws2tcpip.h when sys/socket.h is present. 2006-02-14 Simon Josefsson * modules/maintainer-makefile (Files): Rename. * build-aux/GNUmakefile: Rename Makefile.maint to maint.mk and (the local) Makefile.cfg to maint-cfg.mk. * build-aux/Makefile.maint, build-aux/maint.mk: Renamed the former to the latter. * modules/maintainer-makefile: New module. * build-aux/Makefile.maint: New file, from GNU CoreUtils, although severaly stripped to make it possible to build it up from scratch with reliable tests. * build-aux/GNUmakefile: New file, from GNU CoreUtils with some fixes to permit overriding the default actions when configure and makefile are not available. 2006-02-14 Paul Eggert Sync from coreutils. * modules/lstat (Depends-on): Don't depend on xalloc. (License): Change from GPL to LGPL, since this is now simply a replacement for a libc function. 2006-02-14 Jim Meyering Sync from coreutils. Eliminate the unwelcome (albeit unlikely) possibility of xmalloc failure on deficient systems, and simplify gnulib lgpl dependencies. * lib/lstat.c (rpl_lstat): Rewrite to use stat() in place of the xmalloc/lstat combination. Based on a patch from Bruno Haible. * lib/xalloc-die.c: Remove unused definition of N_. 2006-02-14 Jim Meyering Sync from coreutils. * m4/ls-mntd-fs.m4 (AC_FUNC_GETMNTENT): Invoke AC_CHECK_FUNCS(getmntent) unconditionally so that tests of $ac_cv_func_getmntent (e.g., in gl_LIST_MOUNTED_FILE_SYSTEMS) need not double-quote uses of that variable, to accommodate the rare case in which getmntent is available in none of the libraries checked. This happens at least on FreeBSD 5.0. 2006-02-13 Simon Josefsson * gnulib-tool (Usage): Fix --import, from karl@freefriends.org (Karl Berry). 2006-02-13 Sergey Poznyakoff * lib/argp-fmtstream.c: Restore another bugfix lost on 2005-12-12 2006-02-07 Sergey Poznyakoff * lib/argp-namefrob.h: Restore changes accidentally lost during the "autoupdate" on 2005-12-12. 2006-02-07 Paul Eggert * modules/closeout (Depends-on): Remove atexit. 2006-02-07 Paul Eggert * lib/closeout.c (close_stdout): Don't assume 'bool' converts nonzero ints to 0 or 1, as this isn't true for the stdbool.h substitute. 2006-02-05 Paul Eggert * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Don't #define __EXTENSIONS__ if this causes compilation to fail. Problem reported by Nelson H. F. Beebe with Solaris 10 and Sun C 5.7 c89 -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED. 2006-01-27 Paul Eggert * lib/fnmatch.c (L_): Renamed from L, to work around a bug in Mac OS X 10.3.9 with GCC 3 reported by Claudio Fontana in . All uses changed. 2006-01-26 Simon Josefsson * lib/socket_.h: Set WINVER to 0x0501, to make sure getaddrinfo prototype is visible on mingw32. * lib/getaddrinfo.h: Define EAI_ADDRFAMILY and EAI_SYSTEM if not set, for mingw32. * lib/gai_strerror.c, getaddrinfo.h: Protect netdb.h #include (for mingw32). 2006-01-26 Paul Eggert * lib/fts.c (diropen): Open with O_NOCTTY | O_NONBLOCK too. Don't attempt to open for write; this always fails, at least on POSIX hosts. This reinstates the 2006-01-09 change, which was inadvertently removed. 2006-01-26 Bruno Haible * gnulib-tool (func_import): Use "trap 'exit $?' instead of "trap :". Reported by Paul Eggert. 2006-01-26 Bruno Haible Paul Eggert * lib/stdbool_.h (_Bool) [(! (defined __cplusplus || defined __BEOS__) && !defined __GNUC__ && !(defined __HP_cc || defined __xlc__ || (defined __SUNPRO_C && (__SUNPRO_C < 0x550 || __STDC__ == 1)) || defined __sgi))]: #define to signed char in these cases too; this simplifies the code (so that we don't have to worry about HP-UX, AIX, SunPRO, etc., separately) and makes it more conservative. 2006-01-25 Simon Josefsson * m4/getaddrinfo.m4: Look for getaddrinfo inside ws2tcip.h and -lws2_32. Protect sys/socket.h and netdb.h #include's. Include ws2tcpip.h with WINVER=0x0501. All for mingw32. 2006-01-25 Sergey Poznyakoff * lib/argp-namefrob.h: Bugfix. Remove stray # 2006-01-25 Paul Eggert * m4/stdbool.m4 (AC_HEADER_STDBOOL): Check for xlc bug if __GCC__ too, so that we test the test. Check for yet another HP-UX cc bug involving *bool |= bool. 2006-01-25 Karl Berry * config/srclist.txt (vasnprintf.c): sync lost. 2006-01-25 Jim Meyering Sync from the stable (b5) branch of coreutils: * lib/fts.c (fts_children): Don't let close() clobber errno from failed fchdir(). * lib/fts.c (fts_stat): When following a symlink-to-directory, don't necessarily interpret stat-fails+lstat-succeeds as indicating a dangling symlink. That can also happen at least for ELOOP. The fix: return FTS_SLNONE only when the stat errno is ENOENT. FYI, this bug predates the inclusion of fts.c in coreutils. * lib/fts.c (fts_open): Put new maxarglen declaration and uses in their own block, so pre-c99 compilers don't object. Avoid the double-free (first in fts_read, second in fts_close) that would occur when an `active' directory is made inaccessible (e.g., via chmod a-x) during a traversal. * lib/fts.c (fts_read): After a failed fchdir, update sp->fts_cur before returning. Reproduce this failure by mkdir -p a/b; cd a; chmod a-x . b Reported by Stavros Passas. 2006-01-25 Jim Meyering * lib/fileblocks.c: Remove more useless parentheses. * lib/readutmp.h: Likewise. 2006-01-25 Bruno Haible * lib/stdbool_.h (_Bool) [IRIX cc]: Define as 'signed char', to avoid warnings. Reported by Paul Eggert. 2006-01-25 Bruno Haible * gnulib-tool (func_import): Use "trap :" instead of "trap -" to get rid of a trap command. For Solaris sh. Reported by Mark D. Baushke . 2006-01-24 Simon Josefsson * lib/socket_.h (SHUT_WR, SHUT_RDWR): Don't hardcode, suggested by Bruno. 2006-01-24 Karl Berry * config/srclist.txt (argp-namefrob.h): sync lost. 2006-01-24 Jim Meyering * modules/openat (Files): Add lib/intprops.h. From Mark D. Baushke. 2006-01-24 Jim Meyering * m4/openat.m4 (gl_FUNC_OPENAT): Add AC_LIBSOURCES([intprops.h]). Reported by Mark D. Baushke. 2006-01-24 Jim Meyering * lib/socket_.h: Remove useless parentheses in uses of cpp `defined'. 2006-01-24 Bruno Haible * modules/strnlen (Maintainer): Change from glibc to all. 2006-01-24 Bruno Haible * m4/stdbool.m4 (AC_HEADER_STDBOOL): Check for IBM and HP-UX bugs. Patch by Paul Eggert. 2006-01-24 Bruno Haible * lib/stdbool_.h (_Bool) [__cplusplus]: Don't define if the compiler already has it. Report and patch by Albert Chin-A-Young on 2005-11-26. * lib/stdbool_.h (_Bool) [HP-UX cc, AIX cc,xlc]: Define as 'signed char' to avoid problems with the built-in _Bool type. Reported by Paul Eggert on 2005-11-26. 2006-01-24 Bruno Haible * gnulib-tool (func_import): Avoid constructing complicated sed expressions inside backquote. Report and solution by Mark D. Baushke . 2006-01-23 Ulrich Drepper These changes imported from libc. * lib/getopt.c: Use __fxprintf instead of inline stream orientation test and two separate function calls. * lib/strndup.c (__strndup): Add libc_hidden_def. 2006-01-23 Simon Josefsson * modules/lock-tests: Use check_PROGRAMS instead of noinst_PROGRAMS. Remove the test_*_SOURCES variable: automake infers it by default. * modules/tls-tests: Likewise. 2006-01-23 Paul Eggert Work around porting bugs reported by Dieter in . * lib/getopt.c (_NOPROTO): Remove; no longer needed. Include and in all environments; it's safe now. Include "getopt.h" first, to check interface. (getenv): Declare only if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV. * lib/strndup.c [!_LIBC]: Include "strndup.h" to get prototype. (__strndup): Revert to K&R-style function dfns, the glibc style. * lib/strnlen.c: Don't claim it's taken from glibc; it's not. (strnlen, __strnlen): Remove #defines and #undefs; not needed. Include strnlen.h first, to get prototype properly. (strnlen): Renamed from __strnlen. Remove weak alias. 2006-01-23 Paul Eggert * m4/getopt.m4 (gl_PREREQ_GETOPT): Check for getenv decl. 2006-01-23 Paul Eggert * config/srclist.txt: Adjust to reflect glibc reorganization. This affects only comments. 2006-01-22 Ralf Wildenhues (tiny change) * gnulib-tool, build-aux/csharpcomp.sh.in: Do not pass `-q' to mktemp. Reported by Bruce Korb . 2006-01-22 Paul Eggert * lib/quotearg.c (quotearg_buffer_restyled): Add "default: break;" to pacify gcc -Wswitch-default. 2006-01-22 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): In the computation of the size of the temporary buffer for sprintf, take into account the precision also for 'd', 'i', 'u', 'o', 'x', 'X'. 2006-01-21 Sergey Poznyakoff * modules/argp-tests: New module * tests/test-argp.c: New file * tests/test-argp-2.sh: New file 2006-01-21 Sergey Poznyakoff * lib/argp-help.c (usage_long_opt): Do not print DOC options. (__argp_base_name): Removed * lib/argp-namefrob.h (__argp_basename): Removed definition. Was a typo. (__argp_base_name): Provide macro definition or extern declaration depending on the configuration 2006-01-20 Simon Josefsson * modules/inet_ntop (Depends-on): Depend on sys_socket. 2006-01-20 Simon Josefsson * lib/inet_ntop.h: Unconditionally include sys/socket.h. 2006-01-20 Paul Eggert * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Use -Wl,-z,ignore rather than -Xlinker -z -Xlinker ignore, as it's more portable. Suggested by Bruno Haible. 2006-01-20 Karl Berry * config/srclist.txt (argp-fmtstream.h, localcharset.c): comment out until changes propagate, I guess. 2006-01-19 Simon Josefsson * m4/socklen.m4: Look in ws2tcpip.h too, for mingw32. 2006-01-19 Simon Josefsson * lib/socket_.h: Map SHUT_RD, SHUT_WR, SHUT_RDWR correctly. 2006-01-19 Simon Josefsson * gnulib-tool: Set check_PROGRAMS. * modules/arcfour-tests, modules/arctwo-tests, modules/crc-tests, modules/des-tests, modules/gc-arcfour-tests, modules/gc-arctwo-tests, modules/gc-des-tests, modules/gc-hmac-md5-tests, modules/gc-hmac-sha1-tests, modules/gc-md2-tests, modules/gc-md4-tests, modules/gc-md5-tests, modules/gc-pbkdf2-sha1-tests, modules/gc-rijndael-tests, modules/gc-sha1-tests, modules/gc-tests, modules/hmac-md5-tests, modules/hmac-sha1-tests, modules/md2-tests, modules/md4-tests, modules/md5-tests, modules/readline, modules/rijndael-tests: Use check_PROGRAMS instead of noinst_PROGRAMS to be able to remove test_*_SOURCES. 2006-01-18 Simon Josefsson * modules/socklen (Depends-on): Depend on sys_socket. 2006-01-18 Simon Josefsson * modules/arcfour-tests, modules/arctwo-tests, modules/crc-tests, modules/des-tests, modules/gc-arcfour-tests, modules/gc-arctwo-tests, modules/gc-des-tests, modules/gc-hmac-md5-tests, modules/gc-hmac-sha1-tests, modules/gc-md2-tests, modules/gc-md4-tests, modules/gc-md5-tests, modules/gc-pbkdf2-sha1-tests, modules/gc-rijndael-tests, modules/gc-sha1-tests, modules/gc-tests, modules/hmac-md5-tests, modules/hmac-sha1-tests, modules/md2-tests, modules/md4-tests, modules/md5-tests, modules/readline, modules/rijndael-tests: Add $(EXEEXT) to automake TESTS variable, for mingw32. 2006-01-17 Simon Josefsson * modules/socklen (Include): Need sys/socket.h. 2006-01-17 Bruno Haible * modules/ssize_t (Include): Add . 2006-01-16 Paul Eggert * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Don't use ldd, as it's not portable and it doesn't work with cross-compiles. Problem reported by Bruno Haible. Fix missing-$ typo in 'test "gl_cv_ignore_unused_libraries" ...' that prevented -zignore from being used with Sun's C compiler. 2006-01-12 Simon Josefsson * lib/base64.c: Fix warning, reported by Bruno Haible and patch by Paul Eggert . 2006-01-12 Bruno Haible * modules/ldd: New file. * build-aux/ldd.sh.in: New file. * MODULES.html.sh (Support for building libraries and executables): Add ldd. 2006-01-12 Bruno Haible * m4/ldd.m4: New file. 2006-01-12 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Don't go into an endless loop while replacing $auxdir with build-aux. 2006-01-11 Simon Josefsson * lib/stdint_.h (SIZE_MAX): Add missing (. 2006-01-11 Paul Eggert Sync from coreutils. * lib/md5.c: Fix commentary typos. (alignof, UNALIGNED_P): No need for a GCC-specific version. * lib/md5.h (__attribute__): Remove; unused. * lib/sha1.c: Fix commentary to match md5 better. * lib/sha1.h (struct sha1_ctx): Use a word buffer, not a byte buffer, so that we don't need to worry about alignment. All uses changed. This merges the 2005-10-28 md5 change into sha1. 2006-01-11 Jim Meyering Sync from coreutils. * lib/md5.c (OP): Fix spacing. 2006-01-11 Bruno Haible Ensure automatic ordering between gl_LOCK and gl_ARGP. * m4/lock.m4 (gl_LOCK_BODY): Renamed from gl_LOCK. (gl_LOCK): New macro, requiring gl_LOCK_BODY. 2006-01-11 Bruno Haible Ensure automatic ordering between gl_LOCK and gl_ARGP. * gnulib-tool (func_import, func_create_testdir): Put gl_LOCK into the "early" section as well. 2006-01-11 Bruno Haible Avoid "ar: no archive members specified" error on MacOS X. * gnulib-tool (func_modules_add_dummy): New function. (func_import, func_create_testdir): Invoke it. 2006-01-11 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Replace build-aux with $auxdir in AC_CONFIG_FILES statements. 2006-01-11 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Initialize also noinst_HEADERS to empty. 2006-01-11 Bruno Haible * gnulib-tool (AUTOMAKEPATH, AUTOCONF, ACLOCAL, AUTOMAKE): New variables. (func_create_megatestdir): Call aclocal, autoconf, automake here, not autoreconf. 2006-01-11 Bruno Haible * gnulib-tool (AUTOCONF, ACLOCAL, AUTOMAKE, AUTORECONF): Make overridable by the user. Reported by Ralf Wildenhues . 2006-01-10 Simon Josefsson * modules/sys_socket: New file. 2006-01-10 Simon Josefsson * m4/sys_socket_h.m4: New file. 2006-01-10 Simon Josefsson * lib/socket_.h: New file. 2006-01-10 Paul Eggert * modules/readutmp (Maintainer): Add myself. 2006-01-10 Paul Eggert * m4/memcoll.m4 (gl_MEMCOLL): Don't require AC_FUNC_MEMCMP, undoing the 2002-12-31 change. Problem and fix reported by Bruno Haible. People who are still concerned with buggy memcmp implementations can invoke gl_FUNC_MEMCMP themselves. 2006-01-10 Paul Eggert * lib/regex_internal.h (BITSET_WORD_BITS): Work around a bug in 64-bit PGC (before version 6.1-2), where the preprocessor mishandles large unsigned values as if they were signed. Problem reported by Claudio Fontana in . 2006-01-10 Jim Meyering Avoid the double-free (first in fts_read, second in fts_close) that would occur when an `active' directory is made inaccessible (e.g., via chmod a-x) during a traversal. * lib/fts.c (fts_read): After a failed fchdir, update sp->fts_cur before returning. Reproduce this failure by mkdir -p a/b; cd a; chmod a-x . b Reported by Stavros Passas. Sync from coreutils. * lib/sha1.c: Tweak grammar in a comment. 2006-01-10 Jim Meyering * m4/fpending.m4: Also include , for Dragonfly. Patch by Joerg Sonnenberger. 2006-01-10 Bruno Haible * modules/readutmp: Depend on module free. * modules/strtok_r: Depend on module restrict. 2006-01-10 Bruno Haible * modules/gettext (configure.ac): Add an invocation of AM_GNU_GETTEXT_VERSION. Needed since autoreconf is used by gnulib-tool. 2006-01-10 Bruno Haible * m4/localcharset.m4 (gl_LOCALCHARSET): Also test for getc_unlocked. Reported by Werner Lemberg . 2006-01-10 Bruno Haible * lib/localcharset.c: Update from GNU gettext. 2006-01-10 Bruno Haible * lib/argp.h (__const): Remove macro. Use const instead. * lib/argp-fmtstream.h (__const): Likewise. * lib/glob_.h (__const): Remove macro. * lib/glob-libc.h: Use const instead of __const. 2006-01-10 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Emit an empty SUBDIR variable. Needed to avoid an automake error regarding the 'gettext' module. 2006-01-09 Simon Josefsson * modules/inet_ntop (Depends-on): Add restrict. 2006-01-09 Simon Josefsson * modules/gc-rijndael-tests (License): Put under LGPL. * modules/gc-des-tests (License): Likewise. * modules/gc-arcfour-tests (License): Likewise. * modules/gc-arctwo-tests (License): Likewise. * modules/gc-pbkdf2-sha1-tests (License): Likewise. * modules/gc-hmac-sha1-tests (Files): Likewise. * modules/gc-hmac-md5-tests (License): Likewise. * modules/gc-sha1-tests (License): Likewise. * modules/gc-md5-tests (License): Likewise. * modules/gc-md4-tests (License): Likewise. * modules/gc-md2-tests (License): Likewise. * modules/gc-tests (License): Likewise. * modules/des-tests (License): Likewise. * modules/md4-tests (License): Likewise. * modules/md2-tests (License): Likewise. 2006-01-09 Paul Eggert Sync from coreutils: * MODULES.html.sh (build_lib): New section, with new lib-ignore module. * modules/lib-ignore: New file. * modules/mkdir-p (Files): Add chdir-safer.c, chdir-safer.h, lchmod.h, chdir-safer.m4, lchmod.m4. * modules/openat: Add mkdirat.c, openat-priv.h. 2006-01-09 Paul Eggert Sync from coreutils. * m4/lib-ignore.m4: New file. * m4/lchmod.m4: New file. 2006-01-09 Paul Eggert Sync from coreutils. * lib/chdir-long.c (cdb_free): Don't bother trying to open directory for write access: POSIX says that must fail. * lib/fts.c (diropen): Likewise. * lib/save-cwd.c (save_cwd): Likewise. * lib/chdir-long.c (cdb_free): Open with O_NOCTTY | O_NONBLOCK as well, for minor improvements on hosts that lack O_DIRECTORY. * lib/chown.c (rpl_chown) [CHOWN_MODIFIES_SYMLINK]: Don't try O_WRONLY unless O_RDONLY failed wth EACCES. Fall back on chown if open failed with EACCES. * lib/gettime.c (gettime) [!defined OK_TO_USE_1S_CLOCK]: Report an error at compile-time if only a 1-second nominal clock resolution is found. * lib/lchmod.h: New file. * lib/mkdir-p.c: Include lchmod.h, lchown.h. (make_dir_parents): Use lchown rather than chown, and lchmod rather than chmod. * lib/mountlist.c (ME_DUMMY): "none" and "proc" file systems are dummies too. Problem with "none" reported by Bob Proulx. Problem with "proc" reported by n0dalus. * lib/mountlist.c: Include . (dev_from_mount_options) [defined MOUNTED_GETMNTENT1 || defined MOUNTED_GETMNTENT2]: New function. It no longer assumes "dev=" has the System V meaning on Linux (since it doesn't). It also parses "dev=" more carefully. (read_file_system_list) [defined MOUNTED_GETMNTENT1 || defined MOUNTED_GETMNTENT2]: Use it. MOUNTED_GETMNTENT2 is new here; the code didn't used to look for dev= in that case. * lib/posixtm.h (PDS_PRE_2000): New macro. * lib/posixtm.c (year): Arg is now syntax_bits rather than allow_century. All usages changed. Reject dates outside the range 1969-1999 if PDS_PRE_2000 is used. 2006-01-09 Paul Eggert Sync from coreutils. * doc/getdate.texi (General date syntax): Invalid dates are rejected. (Time of day items): Mention the possibility of leap seconds. Problem reported by Dr. David Alan Gilbert. 2006-01-09 Jim Meyering Sync from coreutils. * lib/version-etc.c (COPYRIGHT_YEAR): Update to 2006. * lib/chdir-safer.h, lib/chdir-safer.c: New files. * lib/modechange.c (mode_compile): Reject an invalid mode string that starts with an octal digit. From Andreas Gruenbacher. * lib/openat.c: Include "fcntl--.h" and "unistd--.h", to map open and dup to open_safer and dup_safer, respectively. (openat_permissive): Fix typo in comment. * lib/openat.c: Don't include , , , "gettext.h"; either no longer needed or are guaranteed by openat.h. (_): Remove; no longer needed. (openat): Renamed from rpl_openat; no need for rpl_openat since openat.h renames openat for us. Replace most of the body with a call to openat_permissive, to avoid duplicate code. Port to (probably hypothetical) environments were mode_t is wider than int. (openat_permissive): Require mode arg, so that we can check types better. Put it just after flags. Change cwd failure indicator from pointer-to-bool to pointer-to-errno-value. All callers changed. Invoke openat_save_fail and/or openat_restore_fail if cwd_errno is null, so that openat can call us. (openat_permissive, fdopendir, fstatat, unlinkat): Simplify errno handling to avoid some duplicate code, as it's OK to set errno on success. * lib/openat.h: Revamp code so that function macros depend on __OPENAT_PREFIX only, not also on AT_FDCWD. (openat_ro): Remove. Caller changed to use openat_permissive. (openat_permissive): Now a macro, if not a function. (openat_restore_fail, openat_save_fail): Now always functions, since mkdirat needs them even if __OPENAT_PREFIX is defined. * lib/openat-priv.h: New file, defining macros used by mkdirat.c and openat.c. * lib/mkdirat.c: Include openat-priv.h. Remove definitions of macros defined therein. * lib/openat.c: Likewise. * lib/mkdirat.c (mkdirat): New file and function. * lib/openat.h (mkdirat): Declare. * lib/openat.c (fdopendir): Don't change errno when returning non-NULL. * lib/openat.h (openat_permissive): Declare. (openat_ro): Define. * lib/openat.c (EXPECTED_ERRNO): New macro. (openat_permissive): New function -- used in remove.c rewrite. (all functions): Set errno just before returning, only if there was an actual failure. Use EXPECTED_ERRNO rather than comparing against only ENOTDIR. Emulate openat-family functions using Linux's procfs, if possible. Idea and some code based on Ulrich Drepper's glibc changes. * lib/openat.c: (BUILD_PROC_NAME): New macro. Include , , "alloca.h" and "intprops.h". (rpl_openat): Emulate by trying to open /proc/self/fd/%d/%s, before falling back on save_cwd and restore_cwd. (fdopendir, fstatat, unlinkat): Likewise. * lib/openat.c (fstatat, unlinkat): Perform the syscall directly, skipping the save_cwd...restore_cwd overhead, if FILE is absolute. * lib/openat.c (rpl_openat): Use the promoted type (int), not mode_t, as second argument to va_arg. Otherwise, some versions of gcc warn that `if this code is reached, the program will abort'. 2006-01-09 Jim Meyering Sync from coreutils. * m4/openat.m4 (gl_FUNC_OPENAT): Require and compile mkdirat.c. Require openat-priv.h. 2006-01-09 Bruno Haible * modules/strnlen (Include): Use strnlen.h. 2006-01-09 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Also test for . 2006-01-09 Bruno Haible * lib/sysexit_.h (EX_OK): New macro. Suggested by Martin Lambers . 2006-01-09 Bruno Haible * lib/stdint_.h: On Linux libc4 and libc5, include and don't define _STDINT_H_NEED_SIGNED_INT_TYPES. 2006-01-09 Bruno Haible * lib/stdint_.h (SIZE_MAX): Write the value without involving negative numbers. 2006-01-09 Bruno Haible * lib/javacomp.sh.in: Move to ../build-aux/javacomp.sh.in. * lib/javaexec.sh.in: Move to ../build-aux/javaexec.sh.in. * lib/csharpcomp.sh.in: Move to ../build-aux/csharpcomp.sh.in. * lib/csharpexec.sh.in: Move to ../build-aux/csharpexec.sh.in. 2006-01-09 Bruno Haible * build-aux/javacomp.sh.in: New file, moved from lib/. * modules/javacomp-script (Files): Update. (configure.ac): Add AC_CONFIG_FILES invocation. (EXTRA_DIST): Remove variable. * build-aux/javaexec.sh.in: New file, moved from lib/. * modules/javaexec (Files): Update. (configure.ac): Add AC_CONFIG_FILES invocation. (EXTRA_DIST): Remove javaexec.sh.in. * build-aux/csharpcomp.sh.in: New file, moved from lib/. * modules/csharpcomp-script (Files): Update. (configure.ac): Add AC_CONFIG_FILES invocation. (EXTRA_DIST): Remove variable. * build-aux/csharpexec.sh.in: New file, moved from lib/. * modules/csharpexec (Files): Update. (configure.ac): Add AC_CONFIG_FILES invocation. (EXTRA_DIST): Remove csharpexec.sh.in. 2006-01-09 Andreas Gruenbacher Sync from coreutils. Add POSIX ACL support * lib/acl.h (copy_acl, set_acl): Add declarations. * lib/acl.c (acl_entries): Add fallback implementation for POSIX ACL systems other than Linux. (chmod_or_fchmod): New function: use fchmod when possible, and chmod otherwise. (file_has_acl): Add a POSIX ACL implementation, with a Linux-specific subcase. (copy_acl): Add: copy an acl and S_ISUID, S_ISGID, and S_ISVTX from one file to another. Fall back to fchmod/chmod when acls are unsupported. (set_acl): Add: set a file's acl and S_ISUID, S_ISGID, and S_ISVTX to a defined value. Fall back to fchmod/chmod when acls are unsupported. 2006-01-09 Andreas Gruenbacher Sync from coreutils. * m4/acl.m4 (AC_FUNC_ACL): Add POSIX ACL and Linux-specific acl tests. 2006-01-07 Bruno Haible * gnulib-tool (func_import): Add an AC_PROG_RANLIB dependency to gl_EARLY. 2006-01-04 Paul Eggert * lib/strftime.c (tzname): Don't declare if it is already #defined. Problem reported for Mingw by Mark Junker. 2006-01-04 Paul Eggert * README: Gnulib normally doesn't generate a tarball. 2006-01-03 Paul Eggert * lib/xtime.h (xtime_make, xtime_nonnegative_nsec, xtime_nsec): Use long int, not int, for nanosecond counts, so that people who are used to POSIX struct timespec won't be surprised. Reported by Jim Meyering. 2005-12-28 Bruno Haible * build-aux/config.rpath: Update from GNU gettext. 2005-12-16 Jim Meyering * modules/fprintftime: New module. * MODULES.html.sh (Date and time ): Add fprintftime. 2005-12-16 Jim Meyering * m4/fprintftime.m4: New file. 2005-12-16 Jim Meyering * lib/fprintftime.c, lib/fprintftime.h: New files. 2005-12-15 Simon Josefsson * modules/socklen (configure.ac): Fix M4 macro name, to align with new m4/socklen.m4. 2005-12-10 Sergey Poznyakoff * m4/argp.m4: Define HAVE_DECL_PROGRAM_INVOCATION_NAME and HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 2005-12-10 Sergey Poznyakoff * lib/argp-fmtstream.c (__argp_fmtstream_update): Fix coredump * lib/argp-help.c (fill_in_uparams): Check if the constructed struct uparams is valid. Fall back to the default values if it is not. 2005-12-09 Sergey Poznyakoff * modules/argp (Files): Add argp-pin.c (Depends-on): dirname (lib_SOURCES): Add argp-pin.c 2005-12-09 Sergey Poznyakoff * m4/argp.m4: Check if program_invocation_name and program_invocation_short_name are declared and define appropriate macros if they are not. 2005-12-09 Sergey Poznyakoff * lib/argp-help.c (__argp_base_name): New function (__argp_short_program_name): Rewrite using __argp_base_name * lib/argp-namefrob.h: Define program_invocation_name and program_invocation_short_name if requested (__argp_base_name): Add prototype * lib/argp-parse.c (argp_def): Use gettext wrappers (argp_default_parser): Use __argp_base_name * lib/argp-pin.c: New file. Defines program_invocation_name and program_invocation_short_name on systems that lack them. 2005-12-07 Paul Eggert * m4/stat-time.m4 (gl_STAT_TIME): Add check for TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC, to fix IRIX 5.3 porting problem reported by Georg Schwarz in . 2005-12-07 Paul Eggert * lib/stat-time.h (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC, to fix IRIX 5.3 porting problem reported by Georg Schwarz in . 2005-12-05 Bruno Haible * lib/csharpcomp.sh.in (options_csc): For -l option, add a .dll suffix. * lib/csharpcomp.c (compile_csharp_using_sscli): Likewise. Reported by Mark Junker . 2005-12-02 Paul Eggert * m4/socklen.m4 (gl_TYPE_SOCKLEN_T): Renamed from gl_SOCKLEN_T. Use implementation from Albert Chin, with some comments/corrections by Stepan Kasal and myself. 2005-12-02 Bruno Haible * gnulib-tool (func_import): Accept GPLed build tool modules when --lgpl is given. * modules/csharpcomp-script: New file. * modules/csharpcomp: Depend on it. * modules/javacomp-script: New file. * modules/javacomp: Depend on it. Suggested by Simon Josefsson. 2005-12-01 Paul Eggert * m4/regex.m4 (gl_REGEX): Check whether off_t can be used in a switch statement, to work around an HP-UX 10.20 compiler bug reported by Peter O'Gorman. 2005-11-29 Paul Eggert * modules/savedir (Depends-on): Add openat. 2005-11-29 Paul Eggert * lib/stdint_.h (intmax_t) [defined intmax_t]: Do not declare. (uintmax_t) [defined uintmax_t]: Do not declare. (SIZE_MAX) [defined SIZE_MAX]: Do not define. This works around a problem if intmax_t.m4 and/or uintmax_t.m4 and/or size_max.m4 are also used. Problem reported by Mark D. Baushke. (SIZE_MAX): Define to ((size_t) -1), not (~(size_t)0), for the sake of portability to weird hosts that C allows (though we don't know of any practical examples). * lib/savedir.h (fdsavedir): New decl. * lib/savedir.c (fdsavedir, savedirstream): New functions; the latter contains most of the former guts of savedir. (savedir): Use savedirstream. Include "openat.h". 2005-11-25 Paul Eggert * modules/obstack (Files): Add m4/ulonglong.m4. Problem reported by Davide Angelocola. 2005-11-15 Paul Eggert * lib/xstrtod.c: Don't bother with #pragma STDC FENV_ACCESS ON, as coreutils no longer futzes with rounding modes. 2005-11-14 Jim Meyering * lib/mkstemp-safer.c: Include , required for possible replacement of mkstemp. 2005-11-10 Simon Josefsson * lib/readline.c: Remove EOL. 2005-11-10 Paul Eggert * modules/gethrxtime (Depends-on): Add gettime. 2005-11-10 Paul Eggert * m4/gethrxtime.m4 (gl_PREREQ_GETHRXTIME): Don't require AC_HEADER_TIME or gettimeofday; no longer needed. 2005-11-10 Paul Eggert * lib/gethrxtime.c: Include "timespec.h" rather than the sys/time / time business. (gethrxtime) [! (HAVE_NANOUPTIME || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME) || HAVE_MICROUPTIME)]: Fall back on gettime rather than rolling our own approximation. 2005-11-08 Eric Blake * lib/inet_ntop.h: Use #if !, not #ifndef, for AC_CHECK_DECLS. 2005-11-08 Eric Blake * lib/getaddrinfo.h: Use #if !, not #ifndef, for AC_CHECK_DECLS. 2005-11-04 Bruno Haible * gnulib-tool: Implement --update mode. 2005-10-30 Paul Eggert Fix porting problem reported by Theodoros V. Kalamatianos. * lib/utimens.c (futimens) [HAVE_WORKING_UTIMES && HAVE_FUTIMES]: Don't assume that futimes failing means we must fail. 2005-10-30 Paul Eggert * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Revamp wording and local variables to suggest the intended function of the PATH_MAX check. 2005-10-30 Kean Johnston Trivial changes to support SCO systems. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Check for MAXPATHLEN as well as PATH_MAX. * m4/fpending.m4 (gl_FUNC_FPENDING): Correct check for SCO systems, where __ptr is null when no I/O is pending. 2005-10-29 Paul Eggert * lib/getcwd.c (__getcwd): Don't assume that system calls after readdir leave errno alone. Problem reported by Dmitry V. Levin. 2005-10-28 Simon Josefsson * tests/test-gc-md4.c, tests/test-gc-md5.c, tests/test-gc-sha1.c: Test more. * tests/test-gc-md2.c, tests/test-md2.c: New files. * modules/md2, modules/md2-tests: New files. 2005-10-28 Simon Josefsson * m4/inet_ntop.m4: More tests. * m4/gc-md2.m4, md2.m4: New file. 2005-10-28 Simon Josefsson * lib/inet_ntop.h, inet_ntop.c: Make it work under mingw32: Add "restrict" keywords, as per POSIX. Protect the function declaration around HAVE_DECL_INET_NTOP rather than HAVE_INET_NTOP. Don't use K&R prototypes. Check the sprintf return values. Re-define EAFNOSUPPORT if not present. Indent. * lib/md5.h, md5.c: Simplify buffer handling visavi alignment, suggested by Bruno Haible . * lib/gc-gnulib.c, gc-libgcrypt.c: Check calloc return value. * lib/gc.h: Add MD2 and RMD160 length defines. Add prototypes. * lib/gc-libgcrypt.c: Add MD2 (which is not available through libgcrypt). * lib/gc-gnulib.c: Add MD2. Implement gc_hash_* API. * lib/md2.h, lib/md2.c: New files. 2005-10-28 Paul Eggert * lib/savedir.c (savedir): Don't assume that xrealloc etc. leave errno alone. Problem reported by Frederic Jolliton. 2005-10-27 Paul Eggert * modules/verify (License): Change from GPL to LGPL. This is a tiny module and there are apparently near-equivalents that are under the BSD license. 2005-10-24 Simon Josefsson * modules/sha1: Relicense to LGPL. 2005-10-24 Simon Josefsson * lib/md4.h: Shrink buffer size, now that we changed the type. 2005-10-23 Simon Josefsson * gnulib-tool (func_import): Fix --tests-base. 2005-10-22 Simon Josefsson * modules/arcfour (Depends-on): Need stdint. 2005-10-22 Simon Josefsson * m4/gc.m4: Don't be fooled by --disable-*random-device parameters, suggested by Bruno Haible . Fix error messages. 2005-10-22 Simon Josefsson * lib/md4.h, md4.c: Simplify buffer handling visavi alignment, suggested by Bruno Haible . 2005-10-22 Simon Josefsson * lib/crc.h: Include stddef.h, for size_t. 2005-10-22 Simon Josefsson * lib/arcfour.h, arcfour.c: Use fixed size indices in the arcfour_context struct (simplify test vector testing in GNU Shishi). 2005-10-21 Simon Josefsson * modules/des, modules/des-tests: New files. * modules/gc-des, modules/gc-des-tests: New files. * tests/test-des.c, tests/test-gc-des.c: New file. 2005-10-21 Simon Josefsson * modules/arctwo, modules/arctwo-tests: New files. * tests/test-arctwo.c: New file. * modules/gc-arctwo, modules/gc-arctwo-tests: New files. * tests/test-gc-arctwo.c: New file. 2005-10-21 Simon Josefsson * m4/gc.m4: Don't use libgcrypt if gcrypt.h isn't found, suggested by Bruno Haible . * m4/gc-des.m4: New file. 2005-10-21 Simon Josefsson * m4/arctwo.m4: New file. * m4/gc-arctwo.m4: New file. 2005-10-21 Simon Josefsson * lib/rijndael-api-fst.c: Fix bugs in CBC mode for more than one block. 2005-10-21 Simon Josefsson * lib/hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible . * lib/hmac-sha1.c (hmac_sha1): Likewise. * lib/crc.c (crc32_update): Actually use crc parameter, suggested by Bruno Haible . * lib/crc.h: Include stdint.h directly, suggested by Bruno Haible . 2005-10-21 Simon Josefsson * lib/gc-libgcrypt.c (gc_cipher_open): Handle ECB. 2005-10-21 Simon Josefsson * lib/gc-gnulib.c: Support ARCTWO in CBC mode. 2005-10-21 Simon Josefsson * lib/des.h, lib/des.c: New files. * lib/gc-gnulib.c: Support DES.c 2005-10-21 Simon Josefsson * lib/arctwo.h, lib/arctwo.c: New files. * lib/gc-gnulib.c: Support ARCTWO. 2005-10-21 Simon Josefsson * lib/arctwo.h (arctwo_setkey): Protect variable in CPP macro, suggested by Ralf Wildenhues . 2005-10-21 Simon Josefsson * gnulib-tool (func_import, func_create_testdir): Define automake conditional GL_COND_LIBTOOL if libtool is used (to be used by modules Makefile.am snippet), suggested by Bruno Haible . * modules/gc (Makefile.am): Use it. 2005-10-21 Bruno Haible * gnulib-tool (func_import, func_create_testdir): Add quoting to last patch. 2005-10-19 Simon Josefsson * tests/test-gc-rijndael.c: New file. * modules/gc-rijndael, modules/gc-rijndael-test: New files. 2005-10-19 Simon Josefsson * tests/test-gc-md4.c, tests/test-gc-md5.c: Test gc_hash_buffer interface too. 2005-10-19 Simon Josefsson * tests/test-gc-arcfour.c: New file. * modules/gc-arcfour, modules/gc-arcfour-tests: New files. 2005-10-19 Simon Josefsson * modules/gc-md4, modules/gc-md4-tests: New file. * tests/test-gc-md4.c: New file. 2005-10-19 Simon Josefsson * m4/gc-md4.m4: New file. 2005-10-19 Simon Josefsson * m4/gc-hmac-md5.m4, gc-hmac-sha1.m4, gc-md4.m4, gc-md5.m4, gc-sha1.m4: Fix typo, suggested by Stepan Kasal . 2005-10-19 Simon Josefsson * m4/gc-arcfour.m4: New file. * m4/gc-rijndael.m4: New file. 2005-10-19 Simon Josefsson * lib/gc.h, gc-gnulib.c, gc-libgcrypt.c: Support MD4. 2005-10-19 Simon Josefsson * lib/gc-gnulib.c: Support ARCFOUR. 2005-10-19 Simon Josefsson * lib/gc-gnulib.c: Implement gc_cipher_* API, currently only with AES support. * lib/gc.h: Add ECB enum type. * lib/hmac-md5.c, hmac-sha1.c: Include memxor.h. 2005-10-18 Simon Josefsson * tests/test-md5.c: New file. * modules/md5-tests: New file. 2005-10-18 Simon Josefsson * tests/test-md4.c: New file. * modules/md4, modules/md4-tests: New files. 2005-10-18 Simon Josefsson * m4/md4.m4: New file. 2005-10-18 Simon Josefsson * lib/md4.h, lib/md4.c: New files, based on md5.?. 2005-10-17 Stepan Kasal * gnulib-tool (func_create_testdir): Omit the second check whether BUILT_SOURCES in nonempty. 2005-10-17 Simon Josefsson * tests/test-rijndael.c: New file. 2005-10-17 Simon Josefsson * modules/sha1: Depend on stdint instead of md5. * modules/md5: Depend on stdint, remove uint32_t. 2005-10-17 Simon Josefsson * modules/gc-sha1-tests: New file. * tests/test-gc-sha1.c: New file. 2005-10-17 Simon Josefsson * m4/md5.m4: Remove call to uint32_t.m4. 2005-10-17 Simon Josefsson * lib/sha1.c: Use uint32_t instead of md5_uint32.t * lib/sha1.h: Use stdint.h and uint32_t instead of md5_uint32 from md5.h. * lib/md5.c: Use uin32_t. Fix non-gcc UNALIGNED_P macro. * lib/md5.h: Use stdint.h and uint32_t. Doc fix. 2005-10-17 Simon Josefsson * lib/gc.h, gc-libgcrypt.c: Add more hash types/functions. 2005-10-17 Simon Josefsson * lib/gc.h, gc-libgcrypt.c: Add ciphers. 2005-10-17 Simon Josefsson * lib/gc-libgcrypt.c (gc_hmac_sha1): Fix assert. * lib/gc.h (gc_nonce, gc_pseudo_random, gc_random): Add prototypes. 2005-10-17 Bruno Haible * m4/stdbool.m4 (AC_HEADER_STDBOOL): Change the return statement so that it can also be used in a test. 2005-10-16 Bruno Haible * gnulib-tool (func_emit_tests_Makefile_am): Also define TESTS_ENVIRONMENT, so that individual tests can augment it. * gnulib-tool (func_create_testdir): Use an intermediate target for building $(BUILT_SOURCES). Needed because BUILT_SOURCES can contain macros, like $(ALLOCA_H), which cannot be passed through the command line. 2005-10-15 Simon Josefsson * modules/rijndael-tests: New file. * modules/rijndael: New file. 2005-10-15 Simon Josefsson * m4/rijndael.m4: New file. 2005-10-15 Simon Josefsson * lib/rijndael-api-fst.h, lib/rijndael-api-fst.c: New files. * lib/rijndael-alg-fst.h, lib/rijndael-alg-fst.c: New files. 2005-10-14 Simon Josefsson * tests/test-arcfour.c: New file. * modules/arcfour, modules/arcfour-tests: New files. 2005-10-14 Simon Josefsson * m4/arcfour.m4: New file. 2005-10-14 Simon Josefsson * lib/arcfour.h, lib/arcfour.c: New files. 2005-10-14 Roland McGrath Import from libc. [BZ #1331] * lib/obstack.h [!__STDC__] (obstack_int_grow_fast): Fix misnamed macro argument. Reported by Matej Vela . 2005-10-14 Paul Eggert * lib/obstack.c [defined _LIBC && defined USE_IN_LIBIO]: Don't include ; no longer needed. 2005-10-14 Paul Eggert * config/srclist.txt: Add glibc bug 321 for obstack.c, obstack.h. 2005-10-14 Jakub Jelinek and Ulrich Drepper Import from libc. * lib/obstack.c (print_and_abort) [defined _LIBC]: Use __fxprintf instead of inline stream orientation test and two separate function calls. Pay no attention to USE_IN_LIBIO. 2005-10-13 Simon Josefsson * modules/gc-hmac-md5-tests: New file. * tests/test-gc-hmac-sha1.c: New file. * tests/test-gc.c (main): Remove MD5 and HMAC-MD5 tests. * modules/gc-hmac-md5-tests: New file. * tests/test-gc-md5.c: New file. * modules/gc-md5-tests: New file. 2005-10-13 Simon Josefsson * lib/gc-pbkdf2-sha1.c (gc_pbkdf2_sha1): Optimize CEIL computation. Move memory allocation outside of loop. 2005-10-13 Paul Eggert * lib/mkdir-p.c (make_dir_parents): Don't report an error if an intermediate directory is in a read-only file system. Problem reported by Eric Blake. 2005-10-13 Oskar Liljeblad * modules/human (Depends-on): Depend on xstrtoumax, not xstrtol. 2005-10-12 Simon Josefsson * tests/test-hmac-sha1.c: New file. * modules/hmac-sha1-tests: New file. * modules/hmac-sha1: New file. 2005-10-12 Simon Josefsson * modules/gc-sha1: New file. 2005-10-12 Simon Josefsson * modules/gc-pbkdf2-sha1, modules/gc-pbkdf2-sha1-tests: New files. * tests/test-gc-pbkdf2-sha1.c: New file. 2005-10-12 Simon Josefsson * modules/gc-md5, modules/gc-hmac-md5: New files. * modules/gc (Files): Remove md5, memxor and hmac files. 2005-10-12 Simon Josefsson * m4/gc-pbkdf2-sha1.m4: New file. * m4/gc-hmac-sha1.m4: New file. * m4/gc-sha1: New file. * m4/hmac-sha1.m4: New file. 2005-10-12 Simon Josefsson * m4/gc-md5.m4, m4/gc-hmac-md5.m4: New files. * m4/gc.m4: Don't call gl_MD5, gl_MEMXOR or gl_HMAC_MD5. 2005-10-12 Simon Josefsson * lib/gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types, suggested by Bruno Haible . 2005-10-12 Simon Josefsson * lib/gc.h, gc-gnulib.c, gc-libgcrypt.c: Support SHA-1. 2005-10-12 Simon Josefsson * lib/gc-pbkdf2-sha1.c: New file. * lib/gc.h: Add gc_pbkdf2_sha1 prototype. 2005-10-12 Simon Josefsson * lib/gc-libgcrypt.c (gc_hmac_sha1): New function. * lib/gc-gnulib.c (gc_hmac_sha1): New function. 2005-10-12 Simon Josefsson * lib/gc-gnulib.c: Condition MD5 and HMAC-MD5 use on GC_USE_MD5 and GC_USE_HMAC_MD5, respectively. * lib/gc-libgcrypt.c (gc_md5): Fix assert call. (gc_md5): Fix typo. * lib/gc.h (gc_hash_buffer): Use gc_hash in prototype. * lib/gc-libgcrypt.c (gc_hash_buffer): Ditto. * lib/gc-gnulib.c (gc_hash_buffer): Ditto. 2005-10-12 Bruno Haible * m4/stdbool.m4 (gl_STDBOOL_H): Define as an alias of AM_STDBOOL_H. Reported by Stepan Kasal . 2005-10-11 Simon Josefsson * tests/test-crc.c: New file. * modules/crc, modules/crc-tests: New files. 2005-10-11 Simon Josefsson * m4/crc.m4: New file. 2005-10-11 Simon Josefsson * lib/gc.h: Add gc_hash and gc_hash_buffer. * lib/gc-gnulib.c (gc_hash_buffer): Add. Reorder #include's. * lib/gc-libgcrypt.c (gc_hash_buffer): Add. 2005-10-11 Simon Josefsson * lib/crc.h, lib/crc.c: New files. * lib/gc.h (gc_hash_buffer): Add doc. 2005-10-11 Bruno Haible * modules/c-strcasestr: New file. * MODULES.html.sh (String handling ): Add c-strcasestr. 2005-10-11 Bruno Haible * modules/c-strcase: New file. * MODULES.html.sh (String handling ): Add c-strcase. 2005-10-11 Bruno Haible * lib/strcasecmp.c: Include limits.h. (strcasecmp): Avoid integer overflow on exotic platforms. * lib/strncasecmp.c: Include limits.h. (strncasecmp): Avoid integer overflow on exotic platforms. Reported by Paul Eggert. 2005-10-11 Bruno Haible * lib/c-strcasestr.h: New file, from GNU gettext. * lib/c-strcasestr.c: New file, from GNU gettext. 2005-10-11 Bruno Haible * lib/c-strcase.h: New file, from GNU gettext. * lib/c-strcasecmp.c: New file, from GNU gettext. * lib/c-strncasecmp.c: New file, from GNU gettext. 2005-10-10 Paul Eggert * modules/mempcpy (License): GPL -> LGPL. * modules/strchrnul (License): Likewise. * modules/sysexits (License): Likewise. 2005-10-08 Simon Josefsson * config/srclist.txt: Bug 1423 is closed, but 1439 remains. 2005-10-07 Simon Josefsson * m4/memxor.m4: Remove gl_C_RESTRICT call. 2005-10-06 Simon Josefsson * tests/test-hmac-md5.c: New file. * modules/hmac-md5-tests: New file. * modules/hmac-md5: New file. 2005-10-06 Simon Josefsson * m4/hmac-md5.m4: New file. * m4/memxor.m4: Require gl_C_RESTRICT. 2005-10-06 Simon Josefsson * lib/memxor.c (memxor): Avoid casts and warnings. 2005-10-06 Simon Josefsson * lib/hmac-md5.c: New file. * lib/hmac.h: New file. 2005-10-06 Paul Eggert * m4/stdbool.m4 (AC_HEADER_STDBOOL): Check that bool promotes to int, not unsigned int, to catch the AIX 5.3 compiler bug. 2005-10-05 Simon Josefsson * modules/memxor: New file. * modules/iconv (Files): Move config.rpath to havelib, it is used there. * modules/havelib (Files): Add config.rpath. 2005-10-05 Simon Josefsson * m4/memxor.m4: New file. 2005-10-05 Simon Josefsson * lib/memxor.c (memxor): Fix compiler error. * lib/md5.h (MD5_DIGEST_SIZE, MD5_BLOCK_SIZE): Add, see also . * lib/memxor.h, lib/memxor.c: New files. * lib/getaddrinfo.h: Don't protect sys/types.h with HAVE_SYS_TYPES_H, we assume all systems have it, suggested by Jim Meyering . Remove HAVE_SYS_SOCKET_H test too, to see if any systems lack sys/socket.h; mingw32 is known to lack it, but we don't support it yet anyway. Also remove HAVE_NETDB_H test, for same reasons. 2005-10-05 Simon Josefsson * config/srclist.txt: Add glibc bug 1423 for md5.h. 2005-10-05 Paul Eggert * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Don't check for sys/socket.h, netdb.h, sys/types.h; the checks areno longer needed, since the source code now assumes these .h files. 2005-10-05 Derek Price * lib/getdelim.c (SIZE_MAX): New macro, if not already defined. 2005-10-05 Bruno Haible * modules/stdint (License): Change to LGPL. 2005-10-04 Simon Josefsson * lib/getaddrinfo.h: Move sys/types.h include first, reported by "Mark D. Baushke" . 2005-10-04 Bruno Haible * lib/verify.h (verify_true): Provide alternative definition for C++. 2005-10-03 Paul Eggert * lib/getdelim.c: Include getdelim.h first. Include . (SSIZE_MAX): New macro, if not already defined. (getdelim): Fix buffer overrun on 64-bit hosts with lines longer than 2 GiB. 2005-10-02 Paul Eggert Sync from coreutils. * m4/openat.m4 (gl_FUNC_OPENAT): Check for fdopendir. * m4/ullong_max.m4 (gl_ULLONG_MAX): Simplify so that it merely defines ULONG_MAX_LT_ULLONG_MAX. Thomas M.Ott reports that ULLONG_MAX doesn't work with 2.7.2.1. 2005-10-02 Paul Eggert * modules/xreadlink (Makefile.am): Remove lib_SOURCES. From Ben Pfaff. * modules/exclude (Depends-on): Depend on verify. * modules/strtoimax (Depends-on): Likewise. * modules/utimecmp (Depends-on): Likewise. 2005-10-02 Paul Eggert * lib/exclude.c: Include verify.h. (verify): Remove. All callers changed to use verify.h's version. * lib/strtoimax.c: Likewise. * lib/utimecmp.c: Likewis.e Sync from coreutils. * lib/.cppi-disable: Add getaddrinfo.h, getdelim.h, getline.h, getpass.c, mbchar.h, mbuiter.h, strcase.h, strnlen.h, strnlen1.h. * lib/.cvsignore: Add fts.h, search.h, t-fpending. * lib/settime.c (settime): Fix { typo in previous patch. Also, don't bother returning ENOSYS if settimeofday or stime fails; just let them return whatever errno they want to return. * lib/utimens.c: Include unistd.h, for dup2. (futimens): Fix typo: HAVE_FUTIMESAT was misspelled in an #if. (futimens) [! HAVE_FUTIMESAT]: If !file, set errno before returning -1. 2005-10-02 Jim Meyering Sync from coreutils. * m4/utimes.m4 (gl_FUNC_UTIMES): Detect the version of utimes from glibc-2.2.5 that fails for read-only files. 2005-10-02 Jim Meyering Sync from coreutils. * lib/fts-cycle.c [HAVE_CONFIG_H]: Include . * lib/openat-die.c: Use `#ifdef HAVE_CONFIG_H', not `#if HAVE_CONFIG_H'. * lib/openat.c (fdopendir): Do not define if HAVE_FDOPENDIR. Remove AT_FDCWD test. Do not consume the fd unless successful. * lib/openat.h (fdopendir): Do not define if HAVE_FDOPENDIR. * lib/settime.c (settime): Move the HAVE_STIME block `up' into an #elif block, so that we don't even try to compile it if settimeofday is available. This works around a compilation failure on OSF1 V5.1, due to stime requiring a `long int*' while tv_sec is `int'. 2005-10-02 Alfred M. Szmidt Sync from coreutils. * m4/chdir-long.m4 (gl_FUNC_CHDIR_LONG): Compare $gl_have_path... against `yes', rather than just testing for nonempty. 2005-10-01 Simon Josefsson * m4/getaddrinfo.m4: Include sys/types.h for sys/socket.h, on FreeBSD and Darwin. * m4/getaddrinfo.m4: Use AC_GNU_SOURCE, GNU only declare getaddrinfo as an (POSIX) extension. Check for sys/types.h, sys/socket.h, and netdb.h too, needed by getaddrinfo.h. Check if getaddrinfo, freeaddrinfo and gai_strerror are declared by the POSIX headers. Check if struct addrinfo is declared. 2005-10-01 Simon Josefsson * lib/getaddrinfo.h: Protect #include's of sys/socket.h and netdb.h. Only define struct addrinfo if !HAVE_STRUCT_ADDRINFO. Protect AI_* and EAI_* definitions. Protect function declarations. 2005-10-01 Jim Meyering Sync from coreutils. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Look for getservbyname in these libraries [inet nsl socket xnet]. Nelson Beebe reported that with native cc on Solaris 7, getaddrinfo.c requires -lsocket. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Check for gethostbyname in the inet and nsl libraries. Required on Solaris 5.7. 2005-10-01 Jim Meyering Sync from coreutils. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Check for gethostbyname in the inet and nsl libraries. Required on Solaris 5.7. 2005-10-01 Eric Blake (tiny change) * lib/getdelim.c (getdelim): Remove unused variables. 2005-09-29 Paul Eggert * lib/xtime.h (XTIME_PRECISION): Now of type int, not long long int, so that the code works even with ancient cpp. Portability problem with GCC 2.7.2.1 reported by Thomas M.Ott. 2005-09-27 Paul Eggert * modules/regex (Depends-on): Add strcase. * modules/gethostname (Licence): Change from GPL to LGPL, since gethostname.c is a trivial implementation of a standard library function. * modules/poll (License): Change from GPL to LGPL, since it's derived from LGPL code. 2005-09-27 Jim Meyering * lib/getcwd.c: Change #ifdefHAVE_CONFIG_H to #ifdef HAVE_CONFIG_H. * lib/intprops.h (signed_type_or_expr__): Define. (INT_STRLEN_BOUND) [__GNUC__]: Use a slightly tighter bound for unsigned types. 2005-09-26 Paul Eggert * lib/verify.h (verify_expr): Remove, replacing with: (verify_true): New macro that returns true instead of void. (verify_type__): Remove. (verify): Use verify_true rather than verify_type__. 2005-09-26 Bruno Haible * modules/mbchar (Include): Mention that HAVE_WCHAR_H && HAVE_WCTYPE_H is necessary. (lib_SOURCES): Remove mbchar.c. * modules/mbfile (Include): Mention that HAVE_MBRTOWC is necessary. (Files): Add m4/mbrtowc.m4. * modules/mbiter: Likewise. * modules/mbuiter: Likewise. 2005-09-26 Bruno Haible * m4/mbchar.m4 (gl_MBCHAR): Check for wchar.h and wctype.h. Don't compile mbchar.c if they are not both present. * m4/mbfile.m4 (gl_MBFILE): Require gl_FUNC_MBRTOWC. * m4/mbiter.m4 (gl_MBITER): Likewise. * m4/strstr.m4 (gl_PREREQ_STRSTR): Use AC_REQUIRE. * m4/strcasestr.m4 (gl_PREREQ_STRCASESTR): Likewise. * m4/strcase.m4 (gl_PREREQ_STRCASECMP): Likewise. 2005-09-25 Jim Meyering * modules/inet_ntop (Depends-on): Add socklen, since inet_ntop.c also uses socklen_t. 2005-09-24 Paul Eggert * lib/utimens.c (ENOSYS): Define if not already defined. (futimens): Support having a null PATH if the file descriptor is nonnegative. * lib/regex_internal.h (__GNUC_PREREQ, always_inline, inline, pure): Remove. (__attribute): Define to empty unless GCC 3.1 or later. This works around a core dump on OpenBSD 3.4, which has GCC 2.95.3, which dumps core when given __attribute__(()). It also simplifies other tests, since we really don't want to bother with worrying about which ancient version of GCC supported what. Original problem reported by Yoann Vandoorselaere, with part of the fix suggested by Derek Price. 2005-09-24 Jim Meyering * lib/verify.h (verify_type__): Use `unsigned int' as the bitfield type so we can once again use a positive bitfield width of 1 -- now we don't have to explain why we were using a bitfield width of 2. 2005-09-23 Paul Eggert * m4/regex.m4 (gl_REGEX): If replacing, define regcomp to rpl_regcomp, and similarly for the other external symbols. Problem reported by James Gallager. * m4/fnmatch.m4 (_AC_FUNC_FNMATCH_IF): Catch Sun Studio 10u1 on Linux bug reported by Jim Meyering. * m4/utimens.m4 (gl_UTIMENS): Check for futimesat. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Undo previous change; not needed, since socklen is a prerequisite module. 2005-09-23 Paul Eggert * lib/getaddrinfo.c [HAVE_NETINET_IN_H]: Include . Problem reported by Eric Blake. (getaddrinfo): Initialize se so that it's not garbage. Redo internal storage allocation so that it doesn't make unportable assumptions about alignment. Fix a memory leak. * lib/utimens.c (futimens): Use futimesat if available. Prefer it to futimes since it doesn't have the futimes bug. * lib/verify.h (GL_CONCAT0, GL_CONCAT): Remove. (verify): Don't use the __LINE__ trick, as it doesn't work in general. Instead, declare a function that returns a pointer to an array, and use verify_type__ to declare the size of the array. Problem and germ of a solution reported by Bruno Haible. (verify_type__): Use 2, not 1, for bitfield size, to avoid a warning with Irix 6.5 cc. Problem reported by Bruno Haible. 2005-09-23 Jim Meyering Sync from coreutils. Correct build failure (socklen_t not defined) on at least mips-sgi-irix6.5 and alphaev67-dec-osf5.1. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Require gl_SOCKLEN_T. 2005-09-23 Jim Meyering * modules/getaddrinfo (Depends-on): Add socklen. 2005-09-23 Bruno Haible * tests/test-verify.c: New file. 2005-09-22 Paul Eggert Sync from coreutils. * modules/argmatch (Depends-on): Add verify. * modules/getloadavg (Depends-on): Depend on fcntl-safer, not unistd-safer. * modules/save-cwd (Depends-on): Likewise. * modules/openat (Files): Add lib/openat-die.c. (Depends-on): Remove error, exitfail. Add dirname. * modules/verify: New file. * MODULES.html.sh (Diagnostics ): New section, with "verify" module. 2005-09-22 Paul Eggert Sync from coreutils. * m4/backupfile.m4, calloc.m4, chown.m4, cloexec.m4, dup2.m4: * m4/fileblocks.m4, free.m4, ftruncate.m4, getcwd.m4, getpagesize.m4: * m4/getugroups.m4, group-member.m4, idcache.m4, link-follow.m4: * m4/mkstemp.m4, mktime.m4, mountlist.m4, nanosleep.m4, pathmax.m4: * m4/physmem.m4, posixver.m4, putenv.m4, safe-read.m4, same.m4: * m4/save-cwd.m4, stdio-safer.m4, unistd-safer.m4, unlinkdir.m4: * m4/userspec.m4, xgetcwd.m4, xreadlink.m4: Don't bother checking for string.h, stdlib.h, unistd.h. * m4/fts.m4 (gl_FUNC_FTS_CORE): Don't require AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK; that's now the lstat module's job. * m4/jm-macros.m4 (gl_MACROS): Likewise. * m4/prereq.m4 (gl_PREREQ): Add gl_FUNC_LSTAT. * m4/getdate.m4 (gl_C_COMPOUND_LITERALS): New macro. (gl_GETDATE): Use it. * m4/mkdir-p.m4 (gl_MKDIR_PARENTS): Don't bother checking for unistd.h. 2005-09-22 Paul Eggert Sync from coreutils. * lib/.cppi-disable: Add regcomp.c, regex_internal.c, regex_internal.h, stat-time.h. * lib/argmatch.h: Include verify.h (ARGMATCH_VERIFY): Use verify rather than rolling our own. (ARGMATCH_ASSERT): Remove; unused. * lib/canonicalize.c: Assume STDC_HEADERS. * lib/exclude.c: Include "strcase.h". * lib/regex_internal.h [!defined _LIBC]: Likewise. * lib/getusershell.c: Include stdio--.h rather than stdio.h and stdio-safer.h. (getusershell): Call fopen, not fopen_safer. * lib/save-cwd.c: Include fcntl--.h rather than fcntl.h. Do not include unistd-safer.h. (save_cwd): Don't call fd_safer; no longer needed now that we include fcntl--.h. * lib/getdate.y (relative_time): New type. (RELATIVE_TIME_0): New constant. (parser_control): Use relative_time instead of doing it ourselves. (%union): Add new relative_time rel member. (tYEAR_UNIT, tMONTH_UNIT, tHOUR_UNIT, tMINUTE_UNIT, tSEC_UNIT): Now typeless. (relunit, relunit_snumber): Now of type rel. (zone, rel, relunit, get_date): Adjust to above changes. * lib/getloadavg.c: Include fcntl--.h rather than fcntl.h. Do not include unistd-safer.h. (getloadavg): Don't call fd_safer; no longer needed now that we include fcntl--.h. * lib/mkdir-p.c (ENOSYS): Define to EEXIST if not defined. (make_dir_parents): Treat ENOSYS like EEXIST. Improve quality of diagnostics on restore_cwd failure. * lib/mkdir-p.h (make_dir): Remove. All uses replaced by mkdir. (make_dir_parents): Last arg is now int * (for errno), not bool *. * lib/mkdir-p.c (make_dir, make_dir_parents): Likewise. Rewrite "mkdir -p" algorithm to avoid the need for "stat" each time through the loop. Do not diagnose restore_cwd failure; that is the caller's job (and perhaps the caller does not care). * lib/mkdir-p.c (CLEANUP_CWD, CLEANUP): Remove. (make_dir_parents): Revamp to avoid need for CLEANUP_CWD, CLEANUP. If the file already exists but is not a directory, don't bother to try to make its parents. Close potential file descriptor leak if we can't chdir("/") (!). Don't always return true if chdir($PWD) fails; return true only if the requested action was done successfully (except for the chdir($PWD)). Don't log final directory unless we actually made it. Refactor to avoid duplicate code to fix up permissions. Don't attempt to fix up parent permissions if chdir($PWD) fails. * lib/strftime.c (my_strftime): Rewrite the previous change slightly, to make it a bit faster and (I hope) clearer. * lib/strftime.c (my_strftime): Add support for %:z, %::z, %:::z. Fix bug in formats like %2N. * lib/verify.h: New file. 2005-09-22 Paul Eggert Sync from coreutils. * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Check for netinet/in.h. 2005-09-22 Jim Meyering Sync from coreutils. * m4/lstat.m4 (gl_FUNC_LSTAT): Use AC_LIBSOURCES to require lstat.c and lstat.h. Remove obsolete comment. * m4/xreadlink.m4: Use AC_LIBSOURCES and AC_LIBOBJ. * m4/xstrtod.m4: Likewise. * m4/openat.m4 (gl_FUNC_OPENAT): Add openat-die.c. 2005-09-22 Jim Meyering Sync from coreutils. * lib/backupfile.c: Use ARGMATCH_VERIFY, just in case. * lib/posixtm.c (posixtime) [lint]: Initialize *all* of tm0, not just the .tm_year member, since otherwise gcc-4.0 would now warn about tm_zone, tm_gmtoff, tm_isdst, tm_yday, tm_wday. * lib/quotearg.c (quotearg_n_options): Change code to be suboptimal, in order to avoid an unsuppressible warning from gcc on 64-bit systems. * lib/getdate.y (get_date): Undo part of the 2005-04-04 change, so that the command "date -d'2005-03-27 +1 day'" succeeds once again, even when run in a time zone for which daylight savings time is in effect for the starting date. * lib/mkdir-p.c (make_dir_parents): Don't let a failed chdir($PWD) stop us from restricting permissions of just-created absolute-named directories. * lib/mkdir-p.c (CLEANUP_CWD): Return *true*, not false when failing to restore initial working directory. * lib/mkdir-p.c (make_dir_parents): New parameter: different_working_dir, to tell caller if/when we change the working directory and are unable to return to the initial one. * lib/mkdir-p.h (make_dir_parents): Update prototype. * lib/mkdir-p.c (CLEANUP_CWD): Change one more `return 1' to `return false'. This fixes a bug introduced on 2004-07-30. * lib/openat.c (fdopendir): Be sure to close the supplied file descriptor before returning. This makes our replacement implementation a little closer to Solaris's, where fdopendir ties the file descriptor to the returned DIR* pointer. * lib/openat.c (unlinkat): New function. * lib/openat.h (unlinkat): Add prototype. * lib/openat-die.c (openat_save_fail): Rename from openat_save_die. (openat_restore_fail): Rename from openat_restore_die. * lib/openat.c, openat.h: Reflect s/_die/_fail/ renaming. Provide an alternative to exiting immediately upon save_cwd or restore_cwd failure. Now, an application can arrange e.g., to perform a longjump in that case. * lib/openat.c: Include dirname.h. Use IS_ABSOLUTE_FILE_NAME rather than testing for leading slash. (rpl_openat, fdopendir, fstatat): Call openat_save_die and openat_restore_die rather than calling error directly. Don't include "error.h" or "exitfail.h"; they're no longer needed. * lib/openat-die.c (openat_save_die, openat_restore_die): New file. * lib/openat.h (openat_save_die, openat_restore_die): Declare and define. * lib/strftime.c [FPRINTFTIME] (fprintftime): Provide a new interface: size_t fprintftime (FILE *fp, char const *fmt, struct tm const *tm, int utc, int nanoseconds); Background: date should not have to allocate a megabyte of virtual memory to handle a format argument like +%1048575T. When implemented with strftime, it must allocate such a buffer, use strftime to fill it in, print it, then free it. With fprintftime, it simply prints everything and exits. With no need for memory allocation, that's one fewer way to fail. * lib/strftime.c (my_strftime): Parse the colons of %:::z *after* the optional field width, not before, so we accept %9:z, not %:9z. (my_strftime): Be sure to use L_('x') for literals. * lib/backupfile.c, lib/canon-host.c, lib/canonicalize.c, lib/chown.c: * lib/cloexec.c, lib/dup-safer.c, lib/dup2.c, lib/euidaccess.c: * lib/fd-safer.c, lib/fileblocks.c, lib/fopen-safer.c, lib/fsusage.c: * lib/ftruncate.c, lib/getcwd.c, lib/getcwd.h, lib/getloadavg.c: * lib/getopt_.h, lib/getpagesize.h, lib/getugroups.c: * lib/group-member.c, lib/human.h, lib/idcache.c, lib/mkdir-p.c: * lib/mountlist.c, lib/nanosleep.c, lib/pathmax.h, lib/physmem.c: * lib/posixver.c, lib/putenv.c, lib/raise.c, lib/safe-read.c: * lib/same.c, lib/save-cwd.c, lib/setenv.c, lib/settime.c: * lib/tempname.c, lib/unlinkdir.c, lib/unsetenv.c, lib/userspec.c: * lib/xgethostname.c, lib/xreadlink.c: Assume HAVE_UNISTD_H, i.e., include unconditionally. * lib/chown.c, lib/cloexec.c, lib/dup-safer.c, lib/dup2.c: * lib/fsusage.c, lib/getcwd.c, lib/getloadavg.c, lib/mountlist.c: * lib/openat.h, lib/save-cwd.c, lib/tempname.c: Assume HAVE_FCNTL_H (i.e., include unconditionally, and don't include ). 2005-09-22 Eric Blake (tiny change) Sync from coreutils. * lib/getloadavg.c (getloadavg) [__CYGWIN__]: Port to cygwin. [__linux__]: Allocate a big enough buffer for /proc/loadavg. [!LDAV_DONE]: Avoid unused variable warning. 2005-09-21 Bruno Haible * lib/unicodeio.h (unicode_to_mb): New declaration. 2005-09-20 Derek Price * lib/getaddrinfo.c: Don't include included from getaddrinfo.h. 2005-09-20 Bruno Haible * gnulib-tool: Remove trailing slashes from the values specified for --source-base, --m4-base, --tests-base, --aux-dir. Suggested by Simon Josefsson . 2005-09-20 Bruno Haible * gnulib-tool (func_all_modules, func_modules_transitive_closure, func_modules_to_filelist, func_import, func_create_testdir): Make all sorting results locale-independent, so that gnulib-cache.m4 doesn't change when gnulib-tool is invoked in a different locale. 2005-09-19 Simon Josefsson * m4/socklen.m4: Fix typo. 2005-09-19 Ralf Wildenhues Use a consistent style for including . * lib/__fpending.c, lib/acl.c, lib/argmatch.c, lib/argp-help.c, lib/argp-parse.c, lib/argp-pvh.c, lib/backupfile.c, lib/basename.c, lib/c-stack.c, lib/calloc.c, lib/check-version.c, lib/cloexec.c, lib/closeout.c, lib/copy-file.c, lib/creat-safer.c, lib/cycle-check.c, lib/dirfd.c, lib/dirname.c, lib/dup-safer.c, lib/dup2.c, lib/euidaccess.c, lib/exclude.c, lib/exitfail.c, lib/fatal-signal.c, lib/fd-safer.c, lib/file-type.c, lib/fileblocks.c, lib/filemode.c, lib/filenamecat.c, lib/findprog.c, lib/fnmatch.c, lib/fopen-safer.c, lib/free.c, lib/fsusage.c, lib/ftruncate.c, lib/full-write.c, lib/fwriteerror.c, lib/getaddrinfo.c, lib/getcwd.c, lib/getdelim.c, lib/getline.c, lib/getlogin_r.c, lib/getndelim2.c, lib/getnline.c, lib/getopt1.c, lib/getpass.c, lib/group-member.c, lib/hard-locale.c, lib/hash-pjw.c, lib/hash.c, lib/human.c, lib/idcache.c, lib/inet_ntop.c, lib/isdir.c, lib/long-options.c, lib/malloc.c, lib/memcasecmp.c, lib/memcmp.c, lib/memcoll.c, lib/memcpy.c, lib/memmove.c, lib/mkdir-p.c, lib/modechange.c, lib/mountlist.c, lib/open-safer.c, lib/physmem.c, lib/pipe-safer.c, lib/pipe.c, lib/poll.c, lib/posixver.c, lib/progname.c, lib/progreloc.c, lib/putenv.c, lib/quote.c, lib/quotearg.c, lib/readline.c, lib/readlink.c, lib/realloc.c, lib/regex.c, lib/rename.c, lib/rmdir.c, lib/rpmatch.c, lib/safe-read.c, lib/same.c, lib/save-cwd.c, lib/savedir.c, lib/sig2str.c, lib/strcspn.c, lib/strerror.c, lib/stripslash.c, lib/strncasecmp.c, lib/strndup.c, lib/strnlen.c, lib/strnlen1.c, lib/strsep.c, lib/strstr.c, lib/strtod.c, lib/strtoimax.c, lib/strtol.c, lib/strverscmp.c, lib/tempname.c, lib/time_r.c, lib/userspec.c, lib/utimecmp.c, lib/version-etc-fsf.c, lib/version-etc.c, lib/wait-process.c, lib/xalloc-die.c, lib/xgetcwd.c, lib/xmalloc.c, lib/xmemcoll.c, lib/xnanosleep.c, lib/xreadlink.c, lib/xsetenv.c, lib/xstrndup.c, lib/xstrtoimax.c, lib/xstrtol.c, lib/xstrtoumax.c, lib/yesno.c: Standardize inclusion of config.h. * lib/__fpending.h, lib/dirfd.h, lib/getdate.h, lib/human.h, lib/inttostr.h: Removed inclusion of config.h from header files. * lib/inttostr.c: Adjusted in-tree users. * lib/timespec.h: Remove superfluous warning to include config.h. * lib/atexit.c, lib/chdir-long.c, lib/chown.c, lib/fchown-stub.c, lib/getgroups.c, lib/gettimeofday.c, lib/lchown.c, lib/lstat.c, lib/mkdir.c, lib/mkstemp.c, lib/nanosleep.c, lib/openat.c, lib/raise.c, lib/readtokens0.c, lib/readutmp.c, lib/unlinkdir.c: Guard inclusion of config.h with HAVE_CONFIG_H. 2005-09-19 Jim Meyering * modules/pathmax (License): Change to LGPL. 2005-09-19 Derek Price * config/srclist.txt: glibc's glob.h is now in lib/glob-libc.h. 2005-09-19 Bruno Haible * gnulib-tool (import): Provide default for --tests-base. 2005-09-19 Bruno Haible * doc/quote.texi: New file, extracted from gnulib.texi. * doc/ctime.texi: New file, extracted from gnulib.texi. * doc/inet_ntoa.texi: New file, extracted from gnulib.texi. * doc/gnulib-tool.texi: New file, extracted from gnulib.texi. * doc/gnulib.texi: Include them. 2005-09-18 Bruno Haible Portability fix. * gnulib-tool (func_readlink): New function. (func_ln_if_changed): Use it. 2005-09-18 Bruno Haible * gnulib-tool: Support --with-tests also with --import. (func_emit_tests_Makefile_am): Use variables $m4base and $testsbase. (func_import): Use variables $testsbase and $inctests. Emit a gl_TESTS_BASE form into gnulib-cache.m4. Create $testsbase/Makefile.am. Remind the user to add AC_CONFIG_FILES($testsdir/Makefile) and SUBDIRS += $testsdir. (func_create_testdir): Update. 2005-09-18 Bruno Haible * gnulib-tool: Revise --dry-run implementation. Use variable $doit instead of $dry_run. (func_cp_if_changed, func_mv_if_changed): Remove functions. (func_ln_if_changed): Don't handle dry-run here. (func_import): In dry-run mode, detect more precisely which actions would be performed, and don't use "...ing" verbs. 2005-09-18 Bruno Haible * gnulib-tool (func_tmpdir): New function, taken from GNU gettextize. (func_import): Use join on two temporary files instead of three nested loops, in order to determine which files are new or old. 2005-09-18 Bruno Haible * gnulib-tool (func_import): Comment out code that spits out the new files with --dry-run. 2005-09-18 Bruno Haible * doc/gnulib.texi (Invoking gnulib-tool): 50% rewritten. 2005-09-16 Paul Eggert * lib/stat-time.h: New file. * lib/timespec.h (ST_TIME_CMP_NS, ST_TIME_CMP, ATIME_CMP, CTIME_CMP): (MTIME_CMP, TIMESPEC_NS): Remove. Now done by stat-time.h, in a different way. (timespec_cmp): New function. * lib/utimecmp.c: Include stat-time.h. (SYSCALL_RESOLUTION): Depend on whether various struct stat members exist, not on the obsolescent ST_MTIM_NSEC. (utimecmp): Use the new stat-time functions rater than TIMESPEC_NS. 2005-09-16 Paul Eggert * config/srclist.txt: Remove glibc bug 1033 and uncomment mktime.c. 2005-09-16 Paul Eggert * MODULES.html.sh (File system functions): Add stat-time. * modules/stat-time: New file. * modules/timespec (Files): Remove m4/st_mtim.m4; this is now done in a different way, by the stat-time module. * modules/utimecmp (Depends-on): Add stat-time. 2005-09-15 Paul Eggert * m4/st_mtim.m4: Remove. Superseded by... * m4/stat-time.m4: New file. * m4/timespec.m4 (gl_TIMESPEC): Require AC_C_INLINE. Do not invoke AC_STRUCT_ST_MTIM_NSEC; no longer needed. 2005-09-15 Derek Price * m4/strstr.m4 (gl_FUNC_STRSTR): Don't define strstr here. 2005-09-15 Derek Price * lib/regex_internal.h: Blank `pure' for GNUC < 3. * lib/regex_internal.c: Ditto, using this... (__GNUC_PREREQ): ...new macro. * lib/regcomp.c, regexec.c: Blank `always_inline' for GNUC < 3.1 using... (__GNUC_PREREQ): ...this new macro. * lib/strstr.h: Include string.h. Define strstr as a macro here. 2005-09-15 Derek Price Paul Eggert * lib/regcomp.c, regexec.c, regex_internal.c: Back out previous changes, consolidating in... * lib/regex_internal.h: ...this file. 2005-09-13 Jim Meyering * lib/canon-host.c: Filter through gnu indent and reword comments slightly. * lib/canon-host.h (ch_strerror_r): Tweak cpp indentation and spacing. 2005-09-13 Derek Price * lib/canon-host.c (canon_host_r): Set *cherror on memory allocation failure. Reported by Jim Meyering . 2005-09-12 Ralf Wildenhues (tiny change) * lib/base64.c: Typo. (base64_encode): Put b64str in initialized data section. 2005-09-12 Paul Eggert Merge glibc and coreutils changes into gnulib, plus a few extra fixes. * lib/md5.c: Use #error rather than a string. (CYCLIC): New macro, from glibc source. Use it instead of rol. * lib/md5.h (__GNUC_PREREQ, __THROW): Define if not defined already. (__attribute__): Define to empty for non recent-GCC. (__md5_buffer, __md5_finish_ctx, __md5_init_ctx, __md5_process_block): (__md5_process_bytes, __md5_read_ctx, __md5_stream): Renamed from their non-__ counterparts, with new macros replacing them if not _LIBC. Add __THROW attribute. (rol): Remove. (struct md5_ctx): Align buffer if using GCC. * lib/sha1.h (struct sha1_ctx): Likewise. * lib/sha1.c (SWAP): Renamed from the NOTSWAP. All uses changed. The old name was backwards. (NOTSWAP): Remove; not used. (rol): New macro, moved here from md5.h. (sha1_process_block): Remove a FIXME that doesn't make sense. 2005-09-12 Derek Price Return usable errors from canon-host. * lib/canon-host.h: New file. * lib/canon-host.c (canon_host): Wrap... (canon_host_r): ...this new function, which now relies exclusively on getaddrinfo. (ch_strerror): New function. (last_cherror): New global. * lib/getaddrinfo.c: Move include of getaddrinfo.h first to test interface. (getaddrinfo): Add AI_CANONNAME functionality. Don't do arithmetic on void *. (freeaddrinfo): Free ai->ai_canonname when set. 2005-09-12 Derek Price Make canon-host require getaddrinfo. * m4/canon-host.m4 (gl_CANON_HOST): Remove most dependencies. AC_LIBSOURCE canon-host.h. Call... (gl_PREREQ_CANON_HOST): ...this new function, which requires gl_GETADDRINFO. * m4/getaddrinfo.m4 (gl_GETADDRINFO): Compile gai_strerror when needed. 2005-09-12 Derek Price * modules/canon-host: Add canon-host.h. Depend on getaddrinfo. Make LGPL. * modules/getaddrinfo: Add link to opengroup spec. Depend on strdup. 2005-09-12 Derek Price * lib/gai_strerror.c: Include config.h when available. Include getaddrinfo.h before other headers to test interface. Reported by Larry Jones . 2005-09-12 Derek Price Paul Eggert * modules/glob (Files): Add glob-libc.h. 2005-09-12 Derek Price Paul Eggert * m4/glob.m4 (gl_GLOB_SUBSTITUTE): AC_LIBSOURCES for glob.c, glob_.h, glob-libc.h. (gl_PREREQ_GLOB): Remove _SYS_CDEFS_H hack; no longer needed. 2005-09-12 Derek Price Paul Eggert * lib/glob-libc.h: Renamed from glob_.h. The new version is taken from libc's glob.h, except with '#ifdef __GLOB_GNULIB' protecting things that should be done only in gnulib contexts. * lib/glob_.h: New file, containing only the glob things needed for gnulib. (GLOB_PREFIX): Remove. All uses changed to look for __GLOB_GNULIB. (__GLOB_CONCAT, __GLOB_XCONCAT, __GLOB_ID): Remove; no longer needed. (glob, globfree, glob_pattern_p): Now defined simply in terms of rpl_glob, rpl_globfree, rpl_glob_pattern_p. (__GLOB_GNULIB): New macro, to keep the glob.h changes clearer and to respect the namespace rules better. 2005-09-08 Simon Josefsson * modules/socklen: New file. 2005-09-08 Simon Josefsson * m4/socklen.m4: New file. 2005-09-08 Paul Eggert * modules/utimens (Files): Add m4/utimbuf.m4, since m4/utimens.m4 requires gl_CHECK_TYPE_STRUCT_UTIMBUF. Reported by Sergey Poznyakoff. 2005-09-08 Paul Eggert * lib/glob.c (glob, globfree, __glob_pattern_p): Use old-style function definitions, since that's the preferred style in glibc. Fix a minor spacing issue, and update copyright notice to match glibc's. 2005-09-08 Paul Eggert * config/srclist.txt: Remove glibc bug 1061; it's been fixed. 2005-09-06 Simon Josefsson * lib/getpass.c (getpass): Fix typo, test for HAVE_TCSETATTR and not TCSETATTR. Reported by Derek Price . 2005-09-06 Paul Eggert * lib/regex_internal.h (bitset_not): Add parens to avoid gcc -Wall warning. 2005-09-06 Paul Eggert * config/srclist.txt: Add glibc bug 1302. 2005-09-05 Paul Eggert Change bitset word type from unsigned int to unsigned long int, as this has better performance on typical 64-bit hosts. Port bitset code to hosts with unusual word sizes. * lib/regcomp.c (build_equiv_class, build_charclass, build_range_exp): (build_collating_symbol): Prefer bitset to re_bitset_ptr_t in prototypes, when the actual argument is a bitset. This is merely a style issue, but it makes it clearer that an entire array is expected. (re_compile_fastmap_iter, init_dfa, init_word_char, optimize_subexps): * lib/regcomp.c (lower_subexp, parse_bracket_exp, built_charclass_op): Port to the case where bitset_word is not the same as unsigned int. * lib/regex_internal.h (bitset_set, bitset_clear, bitset_contain): (bitset_not, bitset_merge, bitset_set_all, bitset_mask): Likewise. * lib/regexec.c (check_dst_limits_calc_pos_1, check_subexp_matching_top): (build_trtable, group_nodes_into_DFAstates): Likewise. * lib/regcomp.c (re_compile_fastmap_iter, utf8_sb_map, optimize_utf8): Don't assume that SBC_MAX is a multiple of BITSET_WORD_BITS. * lib/regex_internal.h (bitset_set_all, bitset_not): Likewise. * lib/regexec.c (group_nodes_into_DFAstates): Likewise. * lib/regcomp.c (utf8_sb_map): Don't assume UINT_MAX == 0xffffffff. * lib/regcomp.c (optimize_subexps, lower_subexp): Work even if bitset_word has holes in its bitwise representation. * lib/regex_internal.h (BITSET_WORD_BITS): Likewise. * lib/regexec.c (check_dst_limits_calc_pos_1, check_subexp_matching_top): Likewise. * lib/regex_internal.c (re_string_reconstruct): Don't assume UCHAR_MAX == 255. * lib/regex_internal.h (bitset_set_all): Likewise. * lib/regex_internal.h (BITSET_WORD_BITS): Renamed from UINT_BITS. All uses changed. (BITSET_WORDS): Renamed from BITSET_UINTS. All uses changed. (bitset_word): New type, replacing 'unsigned int' for bitset uses. All uses changed. (BITSET_WORD_MAX): New macro. (bitset_set, bitset_clear, bitset_contain, bitset_empty): (bitset_set_all, bitset_copy): Now inline functions, not macros. (bitset_empty, bitset_copy): Prefer sizeof (bitset) to multiplying it out ourselves. (bitset_not_merge): Remove; unused. (bitset_contain): Return bool, not unsigned int with one bit on. All callers changed. * lib/regexec.c (build_trtable): Don't assume bitset has no stricter alignment than re_node_set; do this by defining a new internal type struct dests_alloc and using it to allocate memory. 2005-09-05 Bruno Haible * gnulib-tool (func_import): Fix comparison in handling of symbolic links. 2005-09-04 Martin Lambers (tiny change) * modules/size_max (Makefile.am): Add size_max.h 2005-09-04 Derek Price * gnulib-tool (func_import): Fix reversed $symbolic logic. 2005-09-03 Simon Josefsson * gnulib-tool: Fix typo. 2005-09-03 Simon Josefsson * config/srclist.txt: Add glibc bug 1293. 2005-09-03 Derek Price * m4/getlogin_r (gl_GETLOGIN_R): Fix cut & paste error. From Larry Jones . 2005-09-02 Simon Josefsson * modules/socklen: New file. 2005-09-02 Simon Josefsson * modules/havelib: New module. * modules/gettext, modules/iconv, modules/lock, modules/readline: Use havelib. 2005-09-02 Paul Eggert Check for arithmetic overflow when calculating sizes, to prevent some buffer-overflow issues. These patches are conservative, in the sense that when I couldn't determine whether an overflow was possible, I inserted a run-time check. * lib/regex_internal.h (re_xmalloc, re_xrealloc, re_x2realloc): New macros. (SIZE_MAX) [!defined SIZE_MAX]: New macro. (re_alloc_oversized, re_x2alloc_oversized, re_xnmalloc): (re_xnrealloc, re_x2nrealloc): New inline functions. * lib/regcomp.c (init_dfa, analyze, build_range_exp, parse_bracket_exp): (build_equiv_class, build_charclass): Check for arithmetic overflow in size expression calculations. * lib/regex_internal.c (re_string_realloc_buffers): (build_wcs_upper_buffer, re_node_set_add_intersect): (re_node_set_init_union, re_node_set_insert, re_node_set_insert_last): (re_dfa_add_node, register_state): Likewise. * lib/regexec.c (re_search_stub, re_copy_regs, re_search_internal): (prune_impossible_nodes, push_fail_stack, set_regs, check_arrival): (build_trtable, extend_buffers, match_ctx_init, match_ctx_add_entry): (match_ctx_add_subtop, match_ctx_add_sublast): Likewise. 2005-09-02 Paul Eggert * modules/inttostr (Files): Add m4/inttypes_h.m4, m4/stdint_h.m4, m4/ulonglong.m4. Problem reported by Martin Lambers. 2005-09-02 Bruno Haible Support for lib vs. lib64 distinction on biarch platforms. * m4/lib-prefix.m4 (AC_LIB_PREPARE_MULTILIB): New macro. (AC_LIB_PREFIX): Require it. Use $acl_libdirstem instead of 'lib'. * m4/lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Likewise. 2005-09-02 Bruno Haible * gnulib-tool (import): In the other first-use case, provide defaults as well. 2005-09-02 Bruno Haible * config/srclist.txt: lib-link.m4 and lib-prefix.m4 currently have patches not yet found in the latest gettext release. 2005-09-01 Paul Eggert * lib/glob.c (GET_LOGIN_NAME_MAX): Renamed from LOGIN_NAME_MAX, to avoid a collision with bits/local_lim.h in glibc. All uses changed. Problem reported by Dmitry V. Levin in . * lib/regex_internal.c (build_wcs_upper_buffer): Fix portability bugs in int versus size_t comparisons. (re_string_context_at): Fix bug where the code assumed that Idx is signed. Use bool where appropriate. * lib/regcomp.c (re_set_fastmap): ICASE arg is bool, not int. All callers changed. (calc_eclosure_iter): Likewise, for ROOT arg. (parse_bracket_element): Likewise, for ACCEPT_HYPHEN arg. (build_charclass_op): Likewise, for NON_MATCH arg. * lib/regex_internal.c (re_string_allocate, re_string_construct): (re_string_construct_common): Likewise, for ICASE arg. * lib/regexec.c (re_search_2_stub, re_search_stub): Likewise, for RET_LEN arg. (check_matching): Likewise, for FL_LONGEST_MATCH arg. (set_regs): Likewise, for FL_BACKTRACK arg. * lib/regcomp.c (re_compile_fastmap_iter, optimize_utf8): (duplicate_node_closure, calc_inveclosure, calc_eclosure): (calc_eclosure_iter, parse_bracket_exp): Use bool for internal variables that are booleans. * lib/regexec.c (re_search_internal, check_matching, proceed_next_node): (set_regs, build_sifted_states, sift_states_bkref): (check_arrival_add_next_nodes, check_arrival_expand_ecl_sub): (expand_bkref_cache, build_trtable, group_nodes_into_DFAstates): (find_collation_sequence_value): Likewise. * lib/regex_internal.c (re_node_set_insert, re_node_set_insert_last): (re_node_set_compare): Return bool, not int. All callers changed. * lib/regexec.c (check_halt_node_context, check_dst_limits): (build_trtable, check_node_accept): Likewise. * lib/regex_internal.h: Include stdbool.h. Fix bugs uncovered when converting to bool. * lib/regcomp.c (calc_eclosure_iter): Check for storage allocation failure instead of charging ahead blindly. * lib/regex_internal.c (register_state): Likewise. * lib/regexec.c (re_search_2_stub): Use simpler method than boolean for freeing internal storage. (group_nodes_into_DFA_states): Use unsigned int, not int, for bitset pieces used as boolean, to avoid undefined behavior on hosts that do int overflow checking. 2005-09-01 Paul Eggert * config/srclist.txt: Add glibc bugs 1285-1287. 2005-09-01 Jim Meyering * m4/lchown.m4: Require gl_FUNC_CHOWN, for the definition of CHOWN_MODIFIES_SYMLINK, which is used by lchown.c. Require gl_STAT_MACROS, too. 2005-09-01 Bruno Haible * gnulib-tool (import): In the first-use case, provide defaults. 2005-09-01 Bruno Haible * gnulib-tool (func_import): Remove the .tmp files. 2005-09-01 Bruno Haible * gnulib-tool (func_import): Fix handling of symbolic links. 2005-08-31 Paul Eggert On 64-bit hosts (where size_t is 64 bits and int is 32 bits), the old glibc regex code mishandles strings longer than 2**31 bytes. This patch fixes this when the regex code is used in gnulib (i.e., outside glibc). This patch should not affect the use of the regex code inside glibc. No doubt this problem also needs to be handled for glibc as well, but the result will be an incompatible change to the glibc ABI, and the old ABI will have to be supported too. That can be the subject for another patch. * lib/regex.h (_REGEX_LARGE_OFFSETS): New feature-test macro, governing whether the rest of this patch is active. By default, the macro is disabled and the patch has no effect. (regoff_t) [defined _REGEX_LARGE_OFFSETS]: Define to off_t, not int. (__re_idx_t, __re_size_t, __re_long_size_t): New types. (struct re_pattern_buffer, re_search, re_search_2, re_match): (re_match_2, re_set_registers): Use the new types. * lib/regex_internal.h (Idx, re_hashval_t): New types. (REG_MISSING, REG_ERROR, REG_VALID_INDEX, REG_VALID_NONZERO_INDEX): New macros. (re_node_set, re_charset_t, re_token_t, re_string_realloc_buffers): (re_string_context_at, bin_tree_t, re_dfastate_t): (struct re_state_table_entry, state_array_t, re_sub_match_last_t): (re_sub_match_top_t, re_match_context_t, re_sift_context_t): (struct re_fail_stack_ent_t, struct re_fail_stack_t, struct re_dfa_t): (re_string_char_size_at, re_string_wchar_at): (re_string_elem_size_at): Use the new types and macros to port to 64-bit hosts. Use unsigned types for internal values, so that the code mostly works even for arrays larger than SSIZE_MAX. * lib/regcomp.c (re_compile_internal, init_dfa, duplicate_node): (search_duplicated_node, calc_eclosure_iter, fetch_number): (parse_reg_exp, parse_branch, parse_expression, parse_sub_exp): (build_equiv_class, build_charclass, re_compile_fastmap_iter): (free_dfa_content, create_initial_state, optimize_utf8, analyze): (optimize_subexps, calc_first, link_nfa_nodes, duplicate_node_closure): (calc_inveclosure, parse_dup_op, build_range_exp): (build_collating_symbol, parse_bracket_exp, build_charclass_op): (fetch_number, create_token_tree, mark_opt_subexp): Likewise. * lib/regex_internal.c (re_string_construct_common, create_ci_newstate): (create_cd_newstate, re_string_allocate, re_string_construct): (re_string_realloc_buffers, build_wcs_upper_buffer): (re_string_skip_chars, build_upper_buffer, re_string_translate_buffer): (re_string_reconstruct, re_string_peek_byte_case): (re_string_fetch_byte_case, re_string_context_at): (re_node_set_alloc, re_node_set_init_1, re_node_set_init_2): (re_node_set_init_copy, re_node_set_add_intersect): (re_node_set_init_union, re_node_set_merge, re_node_set_insert): (re_node_set_insert_last, re_node_set_compare, re_node_set_contains): (re_node_set_remove_at, re_dfa_add_node, calc_state_hash): (re_acquire_state, re_acquire_state_context, register_state): Likewise. * lib/regex.c (match_ctx_init, match_ctx_add_entry, search_cur_bkref_entry): (match_ctx_add_subtop, match_ctx_add_sublast, sift_ctx_init): (re_search_internal, re_search_2_stub, re_search_stub) (re_copy_regs, check_matching, check_halt_state_context, update_regs): (push_fail_stack, sift_states_iter_mb, build_sifted_states): (update_cur_sifted_state, check_dst_limits): (check_dst_limits_calc_pos_1, check_dst_limits_calc_pos): (check_subexp_limits, sift_states_bkref, merge_state_array): (check_subexp_matching_top, get_subexp, get_subexp_sub): (find_subexp_node, check_arrival, check_arrival_add_next_nodes): (check_arrival_expand_ecl, check_arrival_expand_ecl_sub): (expand_bkref_cache, check_node_accept_bytes): (group_nodes_into_DFAstates, check_node_accept, regexec, re_match): (re_search, re_match_2, re_search_2, prune_impossible_nodes): (acquire_init_state_context, check_halt_node_context): (proceed_next_node, pop_fail_stack, set_regs, free_fail_stack_return): (sift_states_backward, clean_state_log_if_needed): (sub_epsilon_src_nodes, add_epsilone_src_nodes, merge_state_with_log): (find_recover_state, transit_state_sb, transit_state_mb): (transit_state_bkref, build_trtable, match_ctx_clean): Likewise. * lib/regcomp.c (parse_dup_op): Add an extra test if Idx is unsigned, to work around an assumption that REG_MISSING is negative. * lib/regcomp.c (re_comp) [defined _REGEX_RE_COMP || defined _LIBC]: (seek_collating_symbol_entry) [defined _LIBC]: (lookup_collation_sequence_value) [defined _LIBC]: (build_range_exp, build_collating_symbol) [defined _LIBC]: Use prototypes rather than old-style function definitions. * lib/regexec.c (re_exec) [defined _REGEX_RE_COMP || defined _LIBC]: (transit_state_sb) [0]: (find_collation_sequence_value) [defined _LIBC]: Likewise. * lib/regexec.c (re_search_internal): Simplify update of rm_so and rm_eo. * lib/regcomp.c (re_compile_fastmap_iter, init_dfa, init_word_char): (optimize_subexps, lower_subexp): Don't assume 1<<31 has defined behavior on hosts with 32-bit int, since the signed shift might overflow. Use 1u<<31 instead. * lib/regex_internal.h (bitset_set, bitset_clear, bitset_contain): Likewise. * lib/regexec.c (check_dst_limits_calc_pos_1, check_subexp_matching_top): Likewise. * lib/regcomp.c (optimize_subexps, lower_subexp): Use CHAR_BIT rather than 8, for clarity. * lib/regexec.c (check_dst_limits_calc_pos_1): (check_subexp_matching_top): Likewise. * lib/regcomp.c (init_dfa): Make table_size unsigned, so that we don't have to worry about portability issues when shifting it left. Remove no-longer-needed test for table_size > 0. * lib/regcomp.c (parse_sub_exp): Do not shift more bits than there are in a word, as the resulting behavior is undefined. * lib/regexec.c (check_dst_limits_calc_pos_1): Likewise; in one case, a <= should have been an <, and in another case the whole test was missing. * lib/regex_internal.h (BYTE_BITS): Remove. All uses changed to the standard name CHAR_BIT. * lib/regexec.c (match_ctx_add_entry): Don't assume that ~0 == -1; this is not true on one's complement and signed-magnitude hosts. * lib/regex_internal.h (re_sub_match_top_t): Remove unused member next_last_offset. (struct re_dfa_t): Remove unused member states_alloc. * lib/regcomp.c (init_dfa): Don't initialize unused members. 2005-08-31 Paul Eggert * m4/regex.m4 (gl_REGEX): Require AC_SYS_LARGEFILE, Define _REGEX_LARGE_OFFSETS). Test for regoff_t/off_t bug in 64-bit and large-file glibc and in 32-bit large-file Solaris. 2005-08-31 Paul Eggert * lib/regex_internal.c (re_string_reconstruct): Don't assume buffer lengths fit in regoff_t; this isn't true if regoff_t is the same width as size_t. * lib/regex.c (re_search_internal): 5th arg is LAST_START (= START + RANGE) instead of RANGE. This avoids overflow problems when regoff_t is the same width as size_t. All callers changed. (re_search_2_stub): Check for overflow when adding the sizes of the two strings. (re_search_stub): Check for overflow when adding START to RANGE; if it occurs, substitute the extreme value. 2005-08-31 Paul Eggert * config/srclist.txt: Add glibc bugs 1273, 1278-1282, 1284. 2005-08-31 Jim Meyering * lib/regcomp.c (search_duplicated_node): Make first pointer arg a pointer-to-const. * lib/regex_internal.c (create_ci_newstate, create_cd_newstate): (register_state): Likewise. * lib/regexec.c (search_cur_bkref_entry, check_dst_limits): (check_dst_limits_calc_pos_1, check_dst_limits_calc_pos): (group_nodes_into_DFAstates): Likewise. 2005-08-31 Jim Meyering * check-module: Add a FIXME comment. 2005-08-31 Eric Blake * modules/unistd-safer (Files): Add unistd--.h. * modules/stdio-safer (Files): Add stdio--.h. 2005-08-31 Derek Price * lib/getdelim.c (getdelim): Return EOF on EOF. Reported by Larry Jones . 2005-08-31 Bruno Haible Avoid unnecessary diffs in the generated lib/Makefile.am. * gnulib-tool (func_emit_lib_Makefile_am): Don't write the cmd into the generated files. (func_import): Don't set cmd. 2005-08-31 Bruno Haible * lib/strstr.c: Include , for NULL. * lib/strcasestr.c: Likewise. Reported by Yoann Vandoorselaere . 2005-08-31 Bruno Haible * gnulib-tool: New option --macro-prefix. (func_import): Use macro_prefix. (import): Handle option --macro-prefix. 2005-08-31 Bruno Haible * gnulib-tool (import): Rename most ac_* variables to cached_*. Also use new variables cached_lgpl, cached_libtool. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Require AC_GNU_SOURCE etc. instead of always instantiating them. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Read the previous cached settings from gnulib-cache.m4 and gnulib-comp.m4. Remove files that were earlier added by gnulib but are now dropped. Warn when a gnulib file overwrites a non-gnulib file. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Generate two files gnulib-cache.m4 and gnulib-comp.m4 instead of a single gnulib.m4, to make it easy for projects that don't keep autogenerated files in CVS. Put into actioncmd only the specified modules, not the transitive closure. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Fix defaulting of $libname and $libtool. Create directories that shall be filled. (import): Don't look for gl_* macros in configure.ac. Recurse across all directories containing a gnulib-cache.m4 files, if meaningful. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Emit also a stub for gl_LIBTOOL. (import): Set seen_libtool when we see gl_LIBTOOL. 2005-08-31 Bruno Haible * gnulib-tool (func_import): Also copy m4/gnulib-tool.m4. Omit declaration macro definitions from generated gnulib.m4. 2005-08-30 Oskar Liljeblad * lib/iconvme.h: Add prototype for iconv_alloc. 2005-08-29 Simon Josefsson * lib/iconvme.c: Fix errno. 2005-08-29 Bruno Haible * gnulib-tool: Enclose all occurrences of $destdir in "...", so that it works when the directory contains spaces. 2005-08-29 Bruno Haible * gnulib-tool (import): Avoid unnecessary spaces in $avoidlist. 2005-08-29 Bruno Haible * gnulib-tool (func_import): Emit more comments into gnulib.m4. Emit more advice. 2005-08-29 Bruno Haible and Stepan Kasal * check-module: If more parameters are given, check each of them separately; add more exceptions, as noted by Jim Meyering. (check_module): New procedure. (%exempt_header): Now contains all exceptions. 2005-08-29 Ben Pfaff * modules/byteswap (Makefile.am): Fix rule to not assume GNU make. 2005-08-29 Oskar Liljeblad * lib/iconvme.c: Split iconv_string into iconv_alloc. 2005-08-28 Bruno Haible * m4/gnulib-tool.m4: New file. 2005-08-27 Jim Meyering * modules/unistd-safer (Files): Add pipe-safer.c. * modules/fcntl-safer (Files): Add creat-safer.c. 2005-08-27 Jim Meyering * m4/stdlib-safer.m4: New file. From coreutils. * m4/stdio-safer.m4 (gl_STDIO_SAFER): Add stdio--.h. * m4/fcntl-safer.m4 (gl_FCNTL_SAFER): Add creat-safer.c to the AC_LIBSOURCES list and arrange to compile it via AC_LIBOBJ. * m4/unistd-safer.m4 (gl_UNISTD_SAFER): Likewise, add pipe-safer.c. Add pipe-safer.c and unistd--.h to the AC_LIBSOURCES list. 2005-08-27 Jim Meyering * lib/fopen-safer.c: Merge minor changes from coreutils. * lib/dup-safer.c: Likewise. * lib/fd-safer.c: Likewise. Merge from coreutils. * lib/stdio--.h: New file. * lib/stdlib--.h: New file. * lib/mkstemp-safer.c: New file. GNU tar needs these. * lib/pipe-safer.c: New file. * lib/creat-safer.c: New file. * lib/fcntl--.h (creat): Define to creat_safer. * lib/fcntl-safer.h: Include and declare creat_safer. * lib/unistd--.h (pipe): Define to pipe_safer. * lib/unistd-safer.h: Declare pipe_safer. 2005-08-26 Simon Josefsson * lib/getpass.c: Use _WIN32 instead of WIN32, suggested by Bruno Haible . 2005-08-26 Paul Eggert * lib/regex_internal.h: Remove all references to RE_NO_INTERNAL_PROTOTYPES; no longer neeeded now that we assume C89 or better. (bitset_not, bitset_merge, bitset_not_merge): (bitset_mask, re_string_allocate, re_string_construct): (re_string_reconstruct, re_string_destruct, re_string_elem_size_at): (re_string_char_size_at, re_string_wchar_at, re_string_peek_byte_case): (re_string_fetch_byte_case, re_node_set_alloc, re_node_set_init_1): (re_node_set_init_2, re_node_set_init_copy, re_node_set_add_intersect): (re_node_set_init_union, re_node_set_merge, re_node_set_insert): (re_node_set_insert_last, re_node_set_compare, re_node_set_contains): (re_node_set_remove_at, re_dfa_add_node, re_acquire_state): (re_acquire_state_context): Remove unnecessary forward decls. (re_string_char_size_at, re_string_wchar_at, re_string_elem_size_at): Put __attribute at function definition, now that the function decl has been removed. * lib/regex_internal.c (re_string_peek_byte_case): (re_string_fetch_byte_case, re_node_set_compare, re_node_set_contains): Likewise. 2005-08-25 Stepan Kasal * m4/regex.m4: Add AC_PREREQ(2.50). (gl_REGEX): If --with-included-regex was given, skip the autodetection. 2005-08-25 Simon Josefsson * m4/getpass.m4: Check for termios.h, tcgetattr, tcsetattr, and __fsetlocking. 2005-08-25 Simon Josefsson * lib/getpass.c: Add WIN32 implementation. Conditionalize use of termios.h, tcgetattr, tcsetattr and __fsetlocking. Remove some GLIBC specific code. 2005-08-25 Paul Eggert Make regex safe for g++. This fixes one real bug (an "err" that should have been "*err"). g++ problem reported by Sam Steingold. * lib/regex_internal.h (re_calloc): New macro, consistent with re_malloc etc. All callers of calloc changed to use re_calloc. * lib/regex_internal.c (build_wcs_upper_buffer): Return reg_errcode_t, not int. All callers changed. * lib/regcomp.c (re_compile_fastmap_iter): Don't use alloca (mb_cur_max); just use an array of size MB_LEN_MAX. * lib/regexec.c (push_fail_stack): Use re_realloc, not realloc. (find_recover_state): Change "err" to "*err"; this fixes what appears to be a real bug. (check_arrival_expand_ecl_sub): Be consistent about reg_errcode_t versus int. 2005-08-25 Paul Eggert * modules/regex (Depends-on): Add malloc, since the code assumes that !malloc(0) means failure. 2005-08-25 Paul Eggert * lib/regexec.c (set_regs): Don't alloca with an unbounded size. alloca modernization/simplification for regex. * lib/regex.c: Remove portability cruft for alloca. This no longer needs to be at the start of the file, and can be moved into regex_internal.h and simplified. * lib/regex_internal.h: Include . (__libc_use_alloca) [!defined _LIBC]: New macro. * lib/regexec.c (build_trtable): Remove "#ifdef _LIBC", since the code now works outside glibc. 2005-08-25 Paul Eggert * config/srclist.txt: Add glibc bugs 1241, 1245. 2005-08-25 Jim Meyering * lib/open-safer.c: Include . Otherwise, we'd lose LARGEFILE support in any file using e.g. "fcntl--.h" 2005-08-25 Bruno Haible * m4/minmax.m4: Require autoconf 2.52. (gl_MINMAX_IN_HEADER): Add comments. Use m4_pushdef/m4_popdef instead of define/undefine. Use AS_TR_SH and AS_TR_CPP as more robust alternatives of translit over the alphabet. Based on a patch from Stepan Kasal . 2005-08-24 Simon Josefsson * tests/test-getpass.c: New file. 2005-08-24 Paul Eggert * m4/regex.m4 (gl_REGEX): Use POSIX-compliant spellings when testing for GNU regex features. 2005-08-24 Paul Eggert * lib/regcomp.c (regerror): 2nd arg is 'restrict', as per POSIX. * lib/regex.h (regerror): Likewise. * lib/regex.c: Do not include , as POSIX no longer requires this. (The code never needed it.) * lib/regcomp.c, regex_internal.c, regex_internal.h, regexec.c: All uses of recently-renamed identifiers changed to use the new, POSIX-compliant names. The code will build and run just fine without these changes, but it's better to eat our own dog food and use the standard-conforming names. * lib/regex.h: Fix a multitude of POSIX name space violations. These changes have an effect only for programs that define _POSIX_C_SOURCE, _POSIX_SOURCE, or _XOPEN_SOURCE; they do not change anything for programs compiled in the normal way. Also, there is no effect on the ABI. (_REGEX_SOURCE): New macro. Do not include if _XOPEN_SOURCE and VMS are both defined and _GNU_SOURCE is not; this fixes a name space violation. Rename the following macros to obey POSIX requirements. The old names are still visible as macros if _REGEX_SOURCE is defined. (REG_BACKSLASH_ESCAPE_IN_LISTS): renamed from RE_BACKSLASH_ESCAPE_IN_LISTS. (REG_BK_PLUS_QM): renamed from RE_BK_PLUS_QM. (REG_CHAR_CLASSES): renamed from RE_CHAR_CLASSES. (REG_CONTEXT_INDEP_ANCHORS): renamed from RE_CONTEXT_INDEP_ANCHORS. (REG_CONTEXT_INDEP_OPS): renamed from RE_CONTEXT_INDEP_OPS. (REG_CONTEXT_INVALID_OPS): renamed from RE_CONTEXT_INVALID_OPS. (REG_DOT_NEWLINE): renamed from RE_DOT_NEWLINE. (REG_DOT_NOT_NULL): renamed from RE_DOT_NOT_NULL. (REG_HAT_LISTS_NOT_NEWLINE): renamed from RE_HAT_LISTS_NOT_NEWLINE. (REG_INTERVALS): renamed from RE_INTERVALS. (REG_LIMITED_OPS): renamed from RE_LIMITED_OPS. (REG_NEWLINE_ALT): renamed from RE_NEWLINE_ALT. (REG_NO_BK_BRACES): renamed from RE_NO_BK_BRACES. (REG_NO_BK_PARENS): renamed from RE_NO_BK_PARENS. (REG_NO_BK_REFS): renamed from RE_NO_BK_REFS. (REG_NO_BK_VBAR): renamed from RE_NO_BK_VBAR. (REG_NO_EMPTY_RANGES): renamed from RE_NO_EMPTY_RANGES. (REG_UNMATCHED_RIGHT_PAREN_ORD): renamed from RE_UNMATCHED_RIGHT_PAREN_ORD. (REG_NO_POSIX_BACKTRACKING): renamed from RE_NO_POSIX_BACKTRACKING. (REG_NO_GNU_OPS): renamed from RE_NO_GNU_OPS. (REG_DEBUG): renamed from RE_DEBUG. (REG_INVALID_INTERVAL_ORD): renamed from RE_INVALID_INTERVAL_ORD. (REG_IGNORE_CASE): renamed from RE_ICASE. This renaming is a bit unusual, since we can't clash with the POSIX REG_ICASE. (REG_CARET_ANCHORS_HERE): renamed from RE_CARET_ANCHORS_HERE. (REG_CONTEXT_INVALID_DUP): renamed from RE_CONTEXT_INVALID_DUP. (REG_NO_SUB): renamed from RE_NO_SUB. (REG_SYNTAX_EMACS): renamed from RE_SYNTAX_EMACS. (REG_SYNTAX_AWK): renamed from RE_SYNTAX_AWK. (REG_SYNTAX_GNU_AWK): renamed from RE_SYNTAX_GNU_AWK. (REG_SYNTAX_POSIX_AWK): renamed from RE_SYNTAX_POSIX_AWK. (REG_SYNTAX_GREP): renamed from RE_SYNTAX_GREP. (REG_SYNTAX_EGREP): renamed from RE_SYNTAX_EGREP. (REG_SYNTAX_POSIX_EGREP): renamed from RE_SYNTAX_POSIX_EGREP. (REG_SYNTAX_ED): renamed from RE_SYNTAX_ED. (REG_SYNTAX_SED): renamed from RE_SYNTAX_SED. (_REG_SYNTAX_POSIX_COMMON): renamed from _RE_SYNTAX_POSIX_COMMON. (REG_SYNTAX_POSIX_BASIC): renamed from RE_SYNTAX_POSIX_BASIC. (REG_SYNTAX_POSIX_MINIMAL_BASIC): renamed from RE_SYNTAX_POSIX_MINIMAL_BASIC. (REG_SYNTAX_POSIX_EXTENDED): renamed from RE_SYNTAX_POSIX_EXTENDED. (REG_SYNTAX_POSIX_MINIMAL_EXTENDED): renamed from RE_SYNTAX_POSIX_MINIMAL_EXTENDED. (REG_DUP_MAX): renamed from RE_DUP_MAX. No need to undef it. (REG_UNALLOCATED): Renamed from REGS_UNALLOCATED. (REG_REALLOCATE): Renamed from REGS_REALLOCATE. (REG_FIXED): Renamed from REGS_FIXED. (REG_NREGS): Renamed from RE_NREGS. (REG_ICASE, REG_NEWLINE, REG_NOSUB): Do not depend on the values of other REG_* macros, since POSIX says the user is allowed to #undef these macros selectively. (reg_errcode_t): Update comment stating what other tables need to be consistent. Rename the following enum values to obey POSIX requirements. The old names are still visible as macros. (_REG_ENOSYS): Renamed from REG_ENOSYS. Define even if _XOPEN_SOURCE is not defined, since GNU is supposed to be a superset of POSIX as much as possible, and since we want reg_errcode_t to be a signed type for implementation consistency. (_REG_NOERROR): Renamed from REG_NOERROR. (_REG_NOMATCH): Renamed from REG_NOMATCH. (_REG_BADPAT): Renamed from REG_BADPAT. (_REG_ECOLLATE): Renamed from REG_ECOLLATE. (_REG_ECTYPE): Renamed from REG_ECTYPE. (_REG_EESCAPE): Renamed from REG_EESCAPE. (_REG_ESUBREG): Renamed from REG_ESUBREG. (_REG_EBRACK): Renamed from REG_EBRACK. (_REG_EPAREN): Renamed from REG_EPAREN. (_REG_EBRACE): Renamed from REG_EBRACE. (_REG_BADBR): Renamed from REG_BADBR. (_REG_ERANGE): Renamed from REG_ERANGE. (_REG_ESPACE): Renamed from REG_ESPACE. (_REG_BADRPT): Renamed from REG_BADRPT. (_REG_EEND): Renamed from REG_EEND. (_REG_ESIZE): Renamed from REG_ESIZE. (_REG_ERPAREN): Renamed from REG_ERPAREN. (REG_ENOSYS, REG_NOERROR, REG_NOMATCH, REG_BADPAT, REG_ECOLLATE): (REG_ECTYPE, REG_EESCAPE, REG_ESUBREG, REG_EBRACK, REG_EPAREN): (REG_EBRACE, REG_BADBR, REG_ERANGE, REG_ESPACE, REG_BADRPT, REG_EEND): (REG_ESIZE, REG_ERPAREN): Now macros, not enum constants. (_REG_RE_NAME, _REG_RM_NAME): New macros. (REG_TRANSLATE_TYPE): Renamed from RE_TRANSLATE_TYPE. All uses changed. But support the old name if the new one is not defined and if _REGEX_SOURCE. Change the following member names in struct re_pattern_buffer. The old names are still supported if !_REGEX_SOURCE. The new names are always supported, regardless of _REGEX_SOURCE. (re_buffer): Renamed from buffer. (re_allocated): Renamed from allocated. (re_used): Renamed from used. (re_syntax): Renamed from syntax. (re_fastmap): Renamed from fastmap. (re_translate): Renamed from translate. (re_can_be_null): Renamed from can_be_null. (re_regs_allocated): Renamed from regs_allocated. (re_fastmap_accurate): Renamed from fastmap_accurate. (re_no_sub): Renamed from no_sub. (re_not_bol): Renamed from not_bol. (re_not_eol): Renamed from not_eol. (re_newline_anchor): Renamed from newline_anchor. Change the following member names in struct re_registers. The old names are still supported if !_REGEX_SOURCE. The new names are always supported, regardless of _REGEX_SOURCE. (rm_num_regs): Renamed from num_regs. (rm_start): Renamed from start. (rm_end): Renamed from end. (re_set_syntax, re_compile_pattern, re_compile_fastmap): (re_search, re_search_2, re_match, re_match_2, re_set_registers): Prepend __ to parameter names. Undo yesterday's changes. 2005-08-24 Paul Eggert * config/srclist.txt: Remove glibc bug 1233 and add 1236, which supersedes it. Add glibc bugs 1237, 1238, 1240. Comment out lib/regex.c. 2005-08-24 Jim Meyering Sync from coreutils. * m4/fcntl-safer.m4: New file. * m4/xgetcwd.m4: Use AC_LIBSOURCES and AC_LIBOBJ to indicate source and object files for this module. 2005-08-24 Jim Meyering Sync from coreutils. * lib/fcntl--.h, lib/fcntl-safer.h, lib/open-safer.c: New files. 2005-08-24 Jim Meyering * modules/xgetcwd (Makefile.am): Remove `lib_SOURCES += ...' line, now that xgetcwd.m4 requires xgetcwd.c and xgetcwd.h. 2005-08-24 Jim Meyering * modules/fcntl-safer: New module. * modules/fts (Depends-on): Add fcntl-safer. * MODULES.html.sh (File descriptor based Input/Output): Add fcntl-safer. 2005-08-24 Bruno Haible Support for unit test modules. * modules/README: Mention tests modules. * modules/TEMPLATE-TESTS: New file. * gnulib-tool: New options --extract-tests-module, --with-tests and --tests-base (unused for the moment). (testsbase, inctests): New variables. (func_all_modules): Exclude TEMPLATE-TESTS and *-tests. (func_verify_module): Exclude TEMPLATE-TESTS. (func_verify_nontests_module, func_verify_tests_module): New functions. (func_get_dependencies): Add implicit dependency for tests modules. (func_get_tests_module): New function. (func_modules_transitive_closure): When --with-tests was specified, include the unit tests as well, unless explicitly avoided. (func_emit_lib_Makefile_am): Ignore the tests modules here. (func_emit_tests_Makefile_am): New function. (func_create_testdir): When --with-tests was specified, emit a tests/ directory. * MODULES.html.sh (Future developments): Update. 2005-08-24 Bruno Haible * modules/tls-tests: New file. * tests/test-tls.c: New file, from GNU gettext. 2005-08-24 Bruno Haible * modules/lock-tests: New file. * tests/test-lock.c: New file, from GNU gettext. 2005-08-24 Bruno Haible * lib/lock.h: Add multiple inclusion guard. * lib/tls.h: Add multiple inclusion guard. 2005-08-24 Bruno Haible * gnulib-tool: Add support for the --aux-dir option to --create-testdir, --create-megatestdir, --test, --megatest. (func_create_testdir, func_create_megatestdir): Optionally emit a AC_CONFIG_AUX_DIR directive. (create-testdir, create-megatestdir, test, megatest): Provide a default value for $auxdir. 2005-08-24 Bruno Haible * gnulib-tool (import): Use compound statement instead of subshell where possible. 2005-08-24 Bruno Haible * gnulib-tool (import): Change --aux-dir default to "build-aux". 2005-08-24 Bruno Haible * gnulib-tool (func_version): Update. 2005-08-24 Bruno Haible * gnulib-tool (func_import, func_create_testdir, func_create_megatestdir): Quote all autoconf macro arguments. 2005-08-24 Bruno Haible * gnulib-tool (func_create_megatestdir): Call autoreconf without the option --force, because --force causes the aclocal.m4 of each subdirectory to be newer than the corresponding config.h.in. 2005-08-23 Paul Eggert * m4/regex.m4 (gl_INCLUDED_REGEX): Remove; no longer used. All contents moved to gl_REGEX. (gl_REGEX): Don't bother checking whether lib/regex.c exists; assume that it does. 2005-08-23 Paul Eggert * lib/regex.h (REG_NOSYS) [!defined _XOPEN_SOURCE && 200112L <= _POSIX_C_SOURCE]: Define, since POSIX requires it as of 2001. (_REG_ENOSYS) [! (defined _XOPEN_SOURCE || 200112L <= _POSIX_C_SOURCE)]: New private symbol, used to keep the enum signed in all cases. * lib/regex.h (RE_NO_EMPTY_RANGES): Fix doc bug reported by James Youngman in . * lib/regex_internal.c (re_string_skip_chars, register_state): (calc_state_hash): Remove forward decls; no longer needed now that we use prototypes. * lib/regexec.c (acquire_init_state_context, check_halt_node_context): (proceed_next_node, pop_fail_stack, sub_epsilon_src_nodes): (clean_state_log_if_needed): Likewise. 2005-08-23 Paul Eggert * config/srclist.txt: Add glibc bugs 1231-1233. 2005-08-20 Paul Eggert Fix problems reported by Sam Steingold in . * lib/regexec.c (sift_states_bkref): Fix portability bug: the code assumed that reg_errcode_t is a signed type, which is not necessarily true if _XOPEN_SOURCE is not defined. * lib/regex_internal.c (calc_state_hash): Put 'inline' before type, since some compilers warn about it otherwise. 2005-08-20 Paul Eggert * lib/regcomp.c (create_initial_state): Remove duplicate decl. (init_word_char, create_initial_state, duplicate_node_closure): (fetch_token, peek_token_bracket, build_range_exp): (build_collating_symbol): Remove forward decls; no longer needed now that we use prototypes. * lib/regcomp.c: (re_compile_pattern, re_set_syntax, re_compile_fastmap): (re_compile_fastmap_iter, regcomp, regerror, regfree): (re_compile_internal, init_dfa, init_word_char, free_workarea_compile): (create_initial_state, optimize_utf8, analyze, postorder, preorder): (optimize_subexps, lower_subexps, lower_subexp, calc_first, calc_next): (link_nfa_nodes, duplicate_node_closure, search_duplicated_node): (duplicate_node, calc_inveclosure, calc_eclosure, calc_eclosure_iter): (fetch_token, peek_token, peek_token_bracket, parse, parse_reg_exp): (parse_branch, parse_expression, parse_sub_exp, parse_dup_op): (build_range_exp, build_collating_symbol, parse_bracket_exp): (parse_bracket_element, parse_bracket_symbol, build_equiv_class): (build_charclass, build_charclass_op, fetch_number, create_tree): (create_token_tree, mark_opt_subexp, duplicate_tree): Use prototypes rather than old-style definitions. * lib/regex_internal.c: (re_string_allocate, re_string_construct, re_string_realloc_buffers): (re_string_construct_common, build_wcs_buffer, build_wcs_upper_buffer): (re_string_skip_chars, build_upper_buffer, re_string_translate_buffer): (re_string_reconstruct, re_string_peek_byte_case): (re_string_fetch_byte_case, re_string_destruct, re_string_context_at): (re_node_set_alloc, re_node_set_init_1, re_node_set_init_2): (re_node_set_init_copy, re_node_set_add_intersect): (re_node_set_init_union, re_node_set_merge, re_node_set_insert): (re_node_set_insert_last, re_node_set_compare, re_node_set_contains): (re_node_set_remove_at, re_dfa_add_node, calc_state_hash): (re_acquire_state, re_acquire_state_context, register_state): (create_ci_newstate, create_cd_newstate, free_state): Likewise. * lib/regexec.c (regexec, re_match, re_search, re_match_2, re_search_2): (re_search_2_stub, re_search_stub, re_copy_regs, re_set_registers): (re_search_internal, prune_impossible_nodes): (acquire_init_state_context, check_matching, static): (check_halt_node_context, check_halt_state_context, proceed_next_node): (push_fail_stack, pop_fail_stack, set_regs, free_fail_stack_return): (update_regs, sift_states_backward, build_sifted_states): (clean_state_log_if_needed, merge_state_array): (update_cur_sifted_state, add_epsilon_src_nodes): (sub_epsilon_src_nodes, check_dst_limits, check_dst_limits_calc_pos_1): (check_dst_limits_calc_pos, check_subexp_limits, sift_states_bkref): (sift_states_iter_mb, transit_state, merge_state_with_log, static): (find_recover_state, check_subexp_matching_top, transit_state_mb): (transit_state_bkref, get_subexp, get_subexp_sub, find_subexp_node): (check_arrival, check_arrival_add_next_nodes): (check_arrival_expand_ecl, check_arrival_expand_ecl_sub): (expand_bkref_cache, build_trtable, group_nodes_into_DFAstates): (check_node_accept_bytes, check_node_accept, extend_buffers): (match_ctx_init, match_ctx_clean, match_ctx_free, match_ctx_add_entry): (search_cur_bkref_entry, match_ctx_add_subtop, match_ctx_add_sublast): (sift_ctx_init): Likewise. * lib/regex_internal.h: (re_string_allocate, re_string_construct, re_string_reconstruct): (re_string_realloc_buffers, build_wcs_buffer, build_wcs_upper_buffer): (build_upper_buffer, re_string_translate_buffer, re_string_destruct): (re_string_elem_size_at, re_string_char_size_at, re_string_wchar_at): (re_string_context_at, re_string_peek_byte_case): (re_string_fetch_byte_case): Declare even if RE_NO_INTERNAL_PROTOTYPES is defined, since we now use prototypes always. * lib/regex.h (_RE_ARGS): Remove. No longer needed, since we assume C89 or better. All uses removed. 2005-08-20 Paul Eggert * config/srclist.txt: Add glibc bugs 1220-1227. 2005-08-20 Jim Meyering * lib/regexec.c (regexec, re_search_stub) [!_LIBC]: Omit declaration of unused local, dfa. 2005-08-20 Bruno Haible * m4/regex.m4 (gl_PREREQ_REGEX): Require AC_GNU_SOURCE. 2005-08-19 Paul Eggert * lib/regex_internal.c (re_string_realloc_buffers, re_node_set_insert): (re_node_set_insert_last, re_dfa_add_node): Rename local variables to avoid GCC shadowing warnings. 2005-08-19 Paul Eggert * lib/regex_internal.c (re_acquire_state, re_acquire_state_context) [defined lint]: Suppress bogus uninitialized-variable warnings. * lib/regcomp.c (duplicate_node): Return new index, not an error code, and let the caller return REG_ESPACE if out of space. This removes an uninitialied-variable warning with GCC 4.0.1, and also avoids taking the address of a local variable. All callers changed. 2005-08-19 Paul Eggert * config/srclist.txt: Comment out $LIBCSRC/posix/regex_internal.c, $LIBCSRC/posix/regexec.c. Add glibc bug 1217 for regcomp.c. 2005-08-19 Jim Meyering * lib/regexec.c (proceed_next_node): Redo local variables to avoid GCC shadowing warnings. 2005-08-18 Bruno Haible * lib/strstr.c (strstr): Fix return value in multibyte case. * lib/strcasestr.c (strcasestr): Likewise. 2005-08-17 Paul Eggert * lib/regex.h: Remove useless space-before-tab. From coreutils. 2005-08-17 Jim Meyering Make the %s format (seconds since the epoch) work for a negative number and when used with a zero-padded field width, e.g. %015s. * lib/strftime.c (my_strftime): Move the `do_number_sign_and_padding' label so that it precedes the code to set `digits'. Otherwise, %0Ns wouldn't work. Before this change, `date -d @-22 +%05s' would print `00-22'. Now, it prints `-0022', as it should. 2005-08-17 Bruno Haible * modules/strstr (Files): Add m4/mbrtowc.m4. (Depends-on): Add mbuiter. 2005-08-17 Bruno Haible * modules/strcasestr: New file. * MODULES.html.sh (String handling, based on ANSI C 89): Add strcasestr. 2005-08-17 Bruno Haible * modules/strcase (Depends-on): Add mbuiter. Remove strnlen1, mbchar. 2005-08-17 Bruno Haible * modules/mbuiter: New file. * MODULES.html.sh (Extended multibyte and wide character utilities): Add mbuiter. 2005-08-17 Bruno Haible * m4/strstr.m4 (gl_FUNC_STRSTR): Use the replacement function always. (gl_PREREQ_STRSTR): Use gl_FUNC_MBRTOWC. 2005-08-17 Bruno Haible * m4/strcasestr.m4: New file. 2005-08-17 Bruno Haible * lib/strstr.h: Ignore HAVE_STRSTR, always declare the gnulib function. * lib/strstr.c: Completely rewritten, with multibyte locale support. 2005-08-17 Bruno Haible * lib/strcasestr.h: New file. * lib/strcasestr.c: New file. 2005-08-17 Bruno Haible * lib/strcasecmp.c: Use mbuiter.h. 2005-08-17 Bruno Haible * lib/mbuiter.h: New file. 2005-08-16 Paul Eggert * m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Do not override the results of gl_GETOPT_SUBSTITUTE. That way, if both gl_GETOPT_SUBSTITUTE and gl_GETOPT are both invoked via different paths (as happens with GNU tar CVS because it uses both argp and getopt), the former wins. 2005-08-16 Bruno Haible * modules/tls: New file. * MODULES.html.sh (Multithreading): Add tls. 2005-08-16 Bruno Haible * modules/strnlen1: New file. * MODULES.html.sh (String handling): Add strnlen1. 2005-08-16 Bruno Haible * modules/strcase (Files): Add m4/mbrtowc.m4. (Depends-on): Add strnlen1, mbchar. 2005-08-16 Bruno Haible * modules/mbiter: New file. * MODULES.html.sh (Extended multibyte and wide character utilities): Add mbiter. 2005-08-16 Bruno Haible * modules/mbfile: New file. * MODULES.html.sh (Extended multibyte and wide character utilities): Add mbfile. 2005-08-16 Bruno Haible * modules/mbchar: New file. * MODULES.html.sh (Extended multibyte and wide character utilities): New section. 2005-08-16 Bruno Haible * m4/tls.m4: New file, from GNU gettext. 2005-08-16 Bruno Haible * m4/strcase.m4 (gl_FUNC_STRCASECMP): Use the replacement function always. (gl_PREREQ_STRCASECMP): Use gl_FUNC_MBRTOWC. 2005-08-16 Bruno Haible * m4/mbiter.m4: New file. 2005-08-16 Bruno Haible * m4/mbfile.m4: New file. 2005-08-16 Bruno Haible * m4/mbchar.m4: New file. 2005-08-16 Bruno Haible * lib/tls.h: New file, from GNU gettext. * lib/tls.c: New file, from GNU gettext. 2005-08-16 Bruno Haible * lib/strnlen1.h: New file. * lib/strnlen1.c: New file. 2005-08-16 Bruno Haible * lib/strcasecmp.c (struct mbiter_multi): Remove at_end field. (mbi_init): Update. (mbi_avail, mbi_advance): Let the iteration end before the terminating NUL byte, not after it. 2005-08-16 Bruno Haible * lib/strcase.h (strcasecmp): Add note in comments. * lib/strncasecmp.c: Use code from strcasecmp.c. * lib/strcasecmp.c: Use mbchar module. Define private mbiter variant. (strcasecmp): Work correctly in multibyte locales. 2005-08-16 Bruno Haible * lib/mbiter.h: New file. 2005-08-16 Bruno Haible * lib/mbfile.h: New file. 2005-08-16 Bruno Haible * lib/mbchar.h: New file. * lib/mbchar.c: New file. 2005-08-16 Bruno Haible * lib/mbchar.h (mb_cmp, mb_casecmp): Order the invalid characters after the valid ones. Makes the comparison operations transitive: cmp (a, b) < 0 && cmp (b, c) < 0 ==> cmp (a, c) < 0. * lib/strcasecmp.c (strcasecmp): Use mb_casecmp. 2005-08-15 Simon Josefsson * modules/ssize_t (License): Change to 'unlimited'. * gnulib-tool (sed_extract_prog): Recognize 'unlimited' license. 2005-08-15 Paul Eggert * config/srclist.txt: Comment out $LIBCSRC/posix/regex.h. Add comments for each pending glibc patch. 2005-08-15 Bruno Haible * lib/regex.h (__restrict_arr): Don't define to __restrict if __cplusplus is defined. 2005-08-14 Jim Meyering Sync from coreutils. * lib/fts-cycle.c (setup_dir, enter_dir, leave_dir, free_dir): Use the hash-table-based cycle-detection code not just when FTS_TIGHT_CYCLE_CHECK if specified, but also with FTS_LOGICAL. Reported by James Youngman in . * lib/fts_.h: Mention that with FTS_LOGICAL, we use FTS_TIGHT_CYCLE_CHECK. * lib/fts.c (fts_cross_check) [FTS_DEBUG]: s/active_dir_ht/fts_cycle.ht/. This lets us compile with -DFTS_DEBUG, once again. * lib/fts.c [! _LIBC]: Include "lstat.h" rather than rolling our own. * lib/fts.c (fd_safer): Remove decl. Include fcntl--.h rather than unistd-safer.h (fts_safe_changedir): Don't call fd_safer; no longer needed now that we include fcntl--.h. 2005-08-12 Simon Josefsson * modules/getndelim2: Use ssize_t module. * modules/getnline: Likewise. * modules/safe-read: Likewise. * modules/xreadlink: Likewise. * modules/ssize_t: New file. 2005-08-12 Simon Josefsson * m4/readline.m4: Look for termcap, curses or ncurses if required. 2005-08-12 Simon Josefsson * MODULES.html.sh (Support for systems lacking POSIX:2001): Add ssize_t. 2005-08-12 Simon Josefsson * MODULES.html.sh (Extra functions based on ANSI C 89: Misc): Add readline, getdelim and check_version. (Support for systems lacking ISO C 99: Sizes of integer types): Add size_max. 2005-08-12 Bruno Haible * m4/readline.m4 (gl_FUNC_READLINE): Look for ncurses first. 2005-08-11 Simon Josefsson * modules/readline: New file. * modules/strnlen (Files): Add strnlen.h. 2005-08-11 Simon Josefsson * m4/readline.m4: New file. 2005-08-11 Simon Josefsson * lib/readline.h, readline.c: New file. 2005-08-11 Simon Josefsson * doc/gnulib.texi (Initial import, Finishing touches): Mention gl_AVOID. 2005-08-11 Bruno Haible * lib/strnlen.h (strnlen): Change parameter name to match comment. 2005-08-10 Stepan Kasal * m4/onceonly_2_57.m4: Really require Autoconf 2.57. 2005-08-10 Simon Josefsson * tests/test-iconvme.c: New file. 2005-08-10 Simon Josefsson * m4/strnlen.m4: New file. * m4/strndup.m4: Don't check for strnlen declaration, done in strnlen.m4. 2005-08-10 Simon Josefsson * lib/strndup.c: Use strnlen.h. * lib/strnlen.h: New file. 2005-08-08 Ralf Wildenhues (tiny change) * README: Typos. 2005-08-02 Simon Josefsson * modules/readline: New file. 2005-08-02 Simon Josefsson * modules/getdelim: New file. * modules/getline: Rewrite, don't use getndelim2. 2005-08-02 Simon Josefsson * m4/getline.m4: Separate out getdelim stuff into separate module. * m4/getdelim.m4: New file. 2005-08-02 Simon Josefsson * lib/getline.h, getline.c: Rewrite. * lib/getdelim.h, lib/getdelim.c: New files, ported from glibc. 2005-07-31 Bruno Haible * lib/lock.h (gl_lock_initializer): New macro. (gl_lock_define_initialized): Use it. (gl_rwlock_initializer): New macro. (gl_rwlock_define_initialized): Use it. (gl_recursive_lock_initializer): New macro. (gl_recursive_lock_define_initialized): Use it. 2005-07-30 Karl Berry * doc/gnulib.texi (Initial import): mention -I$(top_builddir)/lib. Report from Ben Pfaff, regarding getopt. 2005-07-26 Paul Eggert Add support to getopt for Emacs, which doesn't use LIBOBJS in the normal way. * m4/getopt.m4 (gl_GETOPT_SUBSTITUTE_HEADER): New macro. (gl_GETOPT_SUBSTITUTE): Use it. Invoke gl_PREREQ_GETOPT. (gl_GETOPT_IFELSE, gl_GETOPT_CHECK_HEADERS): New macros. (gl_GETOPT): Use the new macros. Most of the implementation is moved to the new macros. This is for programs like Emacs that don't want all the functionality of gl_GETOPT. 2005-07-26 Bruno Haible * m4/lock.m4: Update from GNU gettext. 2005-07-26 Bruno Haible * lib/lock.h: Update from GNU gettext. * lib/lock.c: Update from GNU gettext. 2005-07-25 Paul Eggert * m4/regex.m4 (gl_INCLUDED_REGEX): Use AC_RUN_IFELSE instead of the obsolescent AC_TRY_RUN. Include the default includes files, for 'exit'. 2005-07-24 Bruno Haible * modules/visibility: New file. * MODULES.html.sh (Misc): Add visibility. 2005-07-24 Bruno Haible * m4/visibility.m4: New file. 2005-07-24 Bruno Haible * doc/visibility.texi: New file. 2005-07-22 Bruno Haible * modules/alloca-opt (Makefile.am): Remove explicit dependency on $(ALLOCA_H), redundant through BUILT_SOURCES. * modules/argz (Makefile.am): Remove explicit dependency on $(ARGZ_H), redundant through BUILT_SOURCES. * modules/byteswap (Makefile.am): Remove explicit dependency on $(BYTESWAP_H), redundant through BUILT_SOURCES. * modules/fnmatch (Makefile.am): Remove explicit dependency on $(FNMATCH_H), redundant through BUILT_SOURCES. * modules/getopt (Makefile.am): Remove explicit dependency on $(GETOPT_H), redundant through BUILT_SOURCES. * modules/glob (Makefile.am): Remove explicit dependency on $(GLOB_H), redundant through BUILT_SOURCES. * modules/poll (Makefile.am): Remove explicit dependency on $(POLL_H), redundant through BUILT_SOURCES. * modules/stdbool (Makefile.am): Remove explicit dependency on $(STDBOOL_H), redundant through BUILT_SOURCES. * modules/stdint (Makefile.am): Remove explicit dependency on $(STDINT_H), redundant through BUILT_SOURCES. * modules/sysexits (Makefile.am): Add $(SYSEXITS_H) to BUILT_SOURCES. Remove explicit dependency on $(SYSEXITS_H). Reported by Alexandre Duret-Lutz . 2005-07-18 Simon Josefsson * lib/check-version.c (check_version): Accept identical versions too. 2005-07-18 Bruno Haible * modules/lock: New file. * MODULES.html.sh (Multithreading): New section. 2005-07-18 Bruno Haible * m4/lock.m4: New file, from GNU gettext. 2005-07-18 Bruno Haible * lib/lock.h: New file, from GNU gettext. * lib/lock.c: New file, from GNU gettext. 2005-07-18 Bruno Haible * lib/lock.h (gl_once_t): New type. (gl_once_define, gl_once): New macros. * lib/lock.c (fresh_once): New variable. (glthread_once, glthread_once_call, glthread_once_singlethreaded): New functions. 2005-07-16 Simon Josefsson * doc/gnulib.texi (Library version handling): Add ELF symbol collision workaround, suggested by Bruno. 2005-07-15 Paul Eggert * modules/xalloc (Depends-on): Add xalloc-die. * modules/xvasprintf (Depends-on): Add xalloc-die. 2005-07-15 Paul Eggert * lib/quotearg.c: Add translator comment suggested by Bruno Haible, with a minor change. 2005-07-15 Bruno Haible * m4/poll.m4 (gl_FUNC_POLL): Check against MacOS X 10.4 poll() bug. When using lib/poll.c, define poll as rpl_poll. 2005-07-14 Paul Eggert * modules/argp (Depends-on): Remove unlocked-io. 2005-07-14 Derek Price * m4/glob.m4 (gl_GLOB): Cache glob interface check result. Add check for glob symlink bug. 2005-07-14 Bruno Haible * m4/argp.m4 (gl_ARGP): Remove invocation of gl_FUNC_GLIBC_UNLOCKED_IO. Instead, test for *_unlocked function declarations directly. 2005-07-11 Simon Josefsson * modules/size_max: New file. * modules/xsize: Depend on size_max module for size_max.m4. 2005-07-11 Simon Josefsson * lib/size_max.h: New file. 2005-07-11 Paul Eggert * lib/version-etc-fsf.c (version_etc_copyright): Parameterize the copyright symbol and the year. * lib/version-etc.c (COPYRIGHT_YEAR): New constant. (version_etc_va): Use parameterized copyright notice. Reword to conform to the current GNU coding standards. 2005-07-11 Karl Berry * doc/gnulib.texi (Quoting): new node. (Initial import): more info, from Patrice. 2005-07-11 Bruno Haible * gnulib-tool (func_usage): Document option --avoid. (Command line options): Handle --avoid. (func_acceptable): New function. (func_modules_transitive_closure): Use it. 2005-07-11 Bruno Haible * MODULES.html.sh: Use shortcut URLs to the www.opengroup.org site. Reported by Jim Meyering. 2005-07-10 Bruno Haible * m4/size_max.m4 (gl_SIZE_MAX): Cast ~(size_t)0 back to size_t. Needed when size_t is smaller than 'unsigned int'. Reported by Paul Eggert. 2005-07-09 Sergey Poznyakoff * modules/argp (Depends-on): Add unlocked-io 2005-07-09 Sergey Poznyakoff * lib/argp-namefrob.h: Include unlocked-io.h. Removed unnecessary block of defines. 2005-07-08 Paul Eggert * config/srclist.txt: Comment out regcomp.c, since we have a porting fix now. 2005-07-08 Eric Blake (tiny change) and Paul Eggert * lib/regcomp.c (init_dfa, build_range_exp): Store __btowc value in wint_t, not wchar_t. Remove now-unnecessary cast. 2005-07-07 Paul Eggert * modules/regex (Files): Add lib/regex_internal.c, lib/regex_internal.h, lib/regexec.c, lib/regcomp.c, m4/codeset.m4. (Depends-on): Add extensions. (Makefile.am): Remove lib_SOURCES; now done by m4 code. 2005-07-07 Paul Eggert * m4/backupfile.m4 (gl_BACKUPFILE): Use AC_CHECK_FUNCS_ONCE on pathconf. * m4/same.m4 (gl_SAME): Likewise. Require AC_SYS_LONG_FILE_NAMES; bug reported by Gerrit P. Haase. * m4/regex.m4: Adjust to new libc regex implementation. (gl_INCLUDED_REGEX): Add AC_LIBSOURCES for all the .c and .h parts of (the new) regex. Quote the m4 stuff better. Check for RE_ICASE bug of old gnulib. Check for REG_STARTEND of recent libc. Rename local variables from jm_* to gl_*. Quote operand of "test -f". Say "recent enough" version of libc, not "version 2". (gl_PREREQ_REGEX): Remove AC_FUNC_ALLOCA, since alloca is a prerequisite module. Remove AC_HEADER_STDC; no longer needed. Check for locale.h, isblank, mbrtowc, wcrtomb, wcscoll. Remove check for btowc, isascii. Require AM_LANGINFO_CODESET. 2005-07-07 Paul Eggert * lib/regex.c, regex.h: Sync from libc. * lib/regcomp.c, lib/regexec_internal.c, lib/regex_internal.h: * lib/regexec.c: New files, synced from libc, except that regex_internal.h currently has a small porting fix. 2005-07-07 Paul Eggert * config/srclist.txt: Add regcomp.c, regex.c, regex.h, regex_internal.c, regexec.c. Add regex_internal.h too, but as a comment, since the libc version is currently broken in gnulib mode. 2005-07-06 Paul Eggert Support programs like Emacs that use gnulib but not gettext. * MODULES.html.sh (Internationalization functions): Add gettext-h. * modules/gettext-h: New file. * modules/gettext (Files): Remove lib/gettext.h. (Depends-on): Add gettext-h. (Makefile.am): Remove lib_SOURCES. * modules/argmatch, modules/c-stack, modules/closeout: * modules/copy-file, modules/csharpcomp, modules/csharpexec: * modules/execute, modules/file-type, modules/getaddrinfo: * modules/getopt, modules/human, modules/javacomp: * modules/javaexec, modules/mkdir-p, modules/obstack: * modules/openat, modules/pagealign_alloc, modules/pipe: * modules/quotearg, modules/regex, modules/rpmatch: * modules/unicodeio, modules/userspec, modules/version-etc: * modules/wait-process, modules/xalloc-die, modules/xmemcoll: * modules/xsetenv: Depend on gettext-h, not gettext. 2005-07-05 Paul Eggert * gnulib-tool (func_import): Add support for 'public domain' license. * modules/alloca, modules/atexit, modules/memmove: Now public domain, not GPL. * modules/dup2, modules/getpagesize, modules/malloc, modules/memset: * modules/realloc, modules/strerror, modules/strtod: Now LGPL, not GPL. 2005-07-05 Bruno Haible * m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): Upgrade to version from current autoconf CVS. Needed for mingw. 2005-07-03 Paul Eggert Remove the dependency of the strftime module on the tzset module. * modules/strftime (Depends-on): Remove dependency on tzset. 2005-07-03 Paul Eggert Remove the dependency of the strftime module on the tzset module. * m4/strftime.m4 (gl_FUNC_STRFTIME): Don't require gl_FUNC_TZSET_CLOBBER. 2005-07-03 Paul Eggert Remove the dependency of the strftime module on the tzset module. * lib/strftime.c (my_strftime) [! defined _LIBC && ! HAVE_RUN_TZSET_TEST]: Copy the input structure, to work around some of the bug with Solaris 2.5.1 and Solaris 2.6. If you still care about these old Solaris releases, you should also use the tzset module, but we won't require it as a dependency any more since we don't want LGPLed code to depend on GPLed code. 2005-07-02 Jim Meyering * m4/chown.m4, cloexec.m4, dup2.m4, fsusage.m4: * m4/getcwd-path-max.m4, getcwd.m4, mkstemp.m4, mountlist.m4: * m4/pagealign_alloc.m4, save-cwd.m4, unistd-safer.m4: Don't check for fcntl.h, and don't test for HAVE_FCNTL_H. 2005-07-02 Jim Meyering * lib/backupfile.c (backup_args): Change a `0' to NULL. 2005-07-01 Paul Eggert * lib/xnanosleep.c: Include timespec.h, since OpenBSD 3.4 declares only 'struct timespec;' (!). 2005-07-01 Jim Meyering * lib/chown.c, cloexec.c, dup-safer.c, dup2.c, fsusage.c, getcwd.c: * lib/getloadavg.c, mountlist.c, openat.h, pagealign_alloc.c: * lib/save-cwd.c, tempname.c: Assume HAVE_FCNTL_H (i.e., include unconditionally, and don't include ). 2005-06-29 Jim Meyering * lib/mkdir-p.c (make_dir_parents): Don't apply sizeof to a hard-coded type name. Use the variable name instead. * lib/idcache.c (getuser, getuidbyname, getgroup, getgidbyname): Likewise. 2005-06-28 Simon Josefsson * modules/check-version (Files): Add check-version.m4. 2005-06-28 Simon Josefsson * m4/check-version.m4: New file, suggested by Jim Meyering . 2005-06-28 Simon Josefsson * lib/check-version.h, lib/check-version.c: New files. 2005-06-28 Simon Josefsson * lib/base64.c (base64_encode): Indent. Rename 'b64' to avoid collision with global variable. Better indentation. Don't increment buffer pointer beyond buffer end. Based on comments from Paul Eggert . * lib/base64.h: Indent. 2005-06-28 Simon Josefsson * doc/gnulib.texi (Library version handling): New section. 2005-06-28 Jim Meyering * check-module (find_included_lib_files): Hard-code another pair of exceptions: fts.c includes fts-cycle.c and unistd-safer.h but modules/fts-lgpl (correctly) does not list those files. * modules/canonicalize (Files): Add lib/pathmax.h. 2005-06-25 Simon Josefsson * modules/check-version: New file. 2005-06-24 Paul Eggert * lib/canon-host.c (canon-host): Append trailing "," to 0 in initializer of struct addrinfo, as an indication that we don't care how many members the structure has. 2005-06-24 Derek Price and Bruno Haible Remove stat module & update lstat. * m4/lstat.m4 (gl_FUNC_LSTAT): Drop AC_FUNC_LSTAT in favor of AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. * m4/stat.m4: Remove this file. 2005-06-24 Derek Price and Bruno Haible Remove stat module & update lstat. * lib/stat.c: Remove this file... (slash_aware_lstat): ...moving this content and its support... * lib/lstat.c (rpl_lstat): ...into here. * lib/lstat.h: New file. 2005-06-24 Derek Price and Bruno Haible Remove stat module & update lstat. * config/srclist.txt (libc sources): Remove stat. 2005-06-24 Derek Price and Bruno Haible Remove stat module & update lstat. * MODULES.html.sh (stat): Remove. * MODULES.html: Regenerated. * modules/lstat (Description): Correct function name. (Files): Add "lstat.h". (Depends-on): Remove stat, add xalloc, stat-macros. * modules/stat: Remove this file. (Include): Add "lstat.h", remove . 2005-06-23 Paul Eggert * lib/mktime.c: Include even if !DEBUG. (From glibc.) (ranged_convert): Don't save conversion in a temporary struct. This causes a warning with GCC 4.0.0, and anyway in the typical case it's not worth the extra 100 bytes or so of code. (ranged_convert, __mktime_internal): When calling a function via a pointer P, use P () rather than (*P) (), as we now assume C89 or better. 2005-06-22 Paul Eggert * lib/readutmp.c (desirable_utmp_entry): Fix bug where "who -b" and "who -r" failed to give output. Problem reported by Tim Waugh. * lib/xmalloc.c (HAVE_GNU_CALLOC): New constant. (xcalloc): Use it to avoid needless tests. Problem reported by Jim Meyering. 2005-06-20 Derek Price * m4/bison.m4: Note that precious decls of YACC & YFLAGS will be unnecessary for Autoconfs > 2.59c. 2005-06-16 Sergey Poznyakoff * lib/argp.h (__option_is_short): Check upper limit of __key. Isprint() requires its argument to have the value of an unsigned char or EOF. 2005-06-16 Jim Meyering * lib/calloc.c (rpl_calloc): Allocate a 1-byte buffer (not 1xS or Nx1) when either N or S is zero. 2005-06-16 Derek Price * m4/bison.m4: Declare YACC & YFLAGS precious. 2005-06-10 Paul Eggert * lib/fnmatch.c (fnmatch): If there is an encoding error in a multibyte string or pattern, fall back on unibyte matching. Problem reported by James Youngman. 2005-06-08 Bruno Haible * modules/csharpcomp: New file. * MODULES.html.sh (C#): Add csharpcomp. 2005-06-08 Bruno Haible * m4/csharpcomp.m4: New file, from GNU gettext. 2005-06-08 Bruno Haible * lib/csharpcomp.h: New file, from GNU gettext. * lib/csharpcomp.c: New file, from GNU gettext. * lib/csharpcomp.sh.in: New file, from GNU gettext. 2005-06-08 Bruno Haible * lib/binary-io.h (fileno): Undefine before defining it. Avoids a gcc warning on mingw. 2005-06-07 Derek Price Sync from CVS. * lib/glob_.h: Indent nested #ifdef. 2005-06-02 Paul Eggert Sync from coreutils. Use "file name" when talking about file names, instead of "filename" or "path", as per the GNU coding standards. * lib/mkdir-p.c: Renamed from makepath.c. (make_dir_parents): Renamed from make_path. All callers changed. * lib/mkdir-p.h: Likewise. All includers changed. * lib/filenamecat.c: Renamed from path-concat.c. (file_name_concat): Renamed from path_concat. All callers changed. [TEST_FILE_NAME_CONCAT]: Renamed from TEST_PATH_CONCAT. * lib/filenamecat.h: Likewise. All includers changed. * lib/acl.c: Don't use "path" or "filename" to mean "file name" in comments or local variable names. * lib/basename.c: Likewise. * lib/canonicalize.c, canonicalize.h: Likewise. * lib/dirname.c, dirname.h: Likewise. * lib/euidaccess.c: Likewise. * lib/exclude.c: Likewise * lib/fnmatch_.h, fnmatch_loop.c: Likewise. * lib/fsusage.c, fsuage.h: Likewise. * lib/fts.c, fts_.h: Likewise. * lib/getcwd.c: Likewise. * lib/getloadavg.c: Likewise. * lib/mkstemp.c: Likewise. * lib/mountlist.c, mountlist.h: Likewise. * lib/openat.c, openat.h: Likewise. * lib/readlink-stub.c: Likewise. * lib/readutmp.c, readutmp.h: Likewise. * lib/rename.c: Likewise. * lib/rmdir.c: Likewise. * lib/same.c: Likewise. * lib/savedir.c: Likewise. * lib/stripslash.c: Likewise. * lib/tempname.c: Likewise. * lib/xreadlink.c: Likewise. * lib/exclude.c (excluded_file_name): Renamed from excluded_filename. All uses changed. * lib/exclude.h: Likewise. * lib/euidaccess.c (getuid, getgid, getuid, getegid) [!defined _POSIX_VERSION]: Remove decls; not needed these days. * lib/idcache.c (getpwuid, getpwnam, getgrgid, getgrnam) [!defined _POSIX_VERSION]: Remove decls; not needed these days. * lib/pathmax.h: Include unconditionally, since other files have been getting away with it for years (MORE/BSD 4.3 is extinct now). * lib/userspec.c (getpwnam, getgrnam, getgrgid) [!defined _POSIX_VERSION]: Remove decls; not needed these days. * lib/pathmax.h (_POSIX_PATH_MAX) [!defined _POSIX_PATH_MAX]: Define to 256, not 255, as per modern POSIX. 2005-06-02 Paul Eggert Sync from coreutils. Use "file name" when talking about file names, instead of "filename" or "path", as per the GNU coding standards. * MODULES.html.sh: mkdir-p renamed from makepath. filenamecat renamed from path-concat. * modules/filenamecat: Renamed from modules/path-concat. (Files): filenamecat.h and filenamecat.c renamed from path-concat.h and path-concat.c. (configure.ac): gl_FILE_NAME_CONCAT, not gl_PATH_CONCAT. (Include): filenamecat.h, not path-concat.h. * modules/mkdir-p: Renamed from modules/makepath. (Files): mkdir-p.h and mkdir-p.c renamed from makepath.h and makepath.c. (configure.ac): gl_MKDIR_PARENTS, not gl_MAKEPATH. (Include): mkdir-p.h, not makepath.h. 2005-06-02 Paul Eggert Sync from coreutils. * m4/mkdir-p.m4: Renamed from makepath.m4. (gl_MKDIR_PARENTS): Renamed from gl_MAKEPATH. All uses changed. Rename files from makepath.c to mkdir-p.c, and from makepath.h to mkdir-p.h. * m4/filenamecat.m4: Renamed from path-concat.m4. (gl_FILE_NAME_CONCAT): Renamed from gl_PATH_CONCAT. All uses changed. Rename files from path-concat.c to filenamecat.c, and from path-concat.h to filenamecat.h. * m4/getcwd-path-max.m4: Don't use "path" or "filename" to mean "file name" in local variables or comments. * m4/rename.m4: Likewise. 2005-06-01 Bruno Haible * modules/csharpexec: New file. * MODULES.html.sh (C#): New section. 2005-06-01 Bruno Haible * m4/csharp.m4: New file, from GNU gettext. * m4/csharpexec.m4: New file, from GNU gettext. 2005-06-01 Bruno Haible * lib/csharpexec.h: New file, from GNU gettext. * lib/csharpexec.c: New file, from GNU gettext. * lib/csharpexec.sh.in: New file, from GNU gettext. 2005-05-31 Derek Price Paul Eggert Sync from cvs. * m4/glob.m4: s/MISSING_SYS_CDEFS_H/_SYS_CDEFS_H/ and comment. 2005-05-31 Derek Price Paul Eggert Sync from cvs. * lib/glob_.h: s/MISSING_SYS_CDEFS_H/_SYS_CDEFS_H/ and comment. 2005-05-29 Derek Price * config/srclist.txt (glob_.h, glob.c): Add these files. 2005-05-29 Derek Price * MODULES.html.sh: Add glob to Enhanced POSIX.2001 section. * modules/glob: New file. * modules/getlogin_r: Add link to POSIX spec in description. 2005-05-29 Derek Price Paul Eggert * m4/glob.m4: New file. 2005-05-29 Derek Price Paul Eggert * lib/glob_.h, lib/glob.c: New files. 2005-05-27 Paul Eggert * modules/fts (Files): Remove m4/inttypes-pri.m4. * modules/fts-lgpl (Depends-on): Remove gettext. 2005-05-27 Paul Eggert * m4/fts.m4 (gl_FUNC_FTS_CORE): Don't check for inttypes.h or stdint.h, and don't require gt_INTTYPES_PRI. 2005-05-27 Paul Eggert * lib/getlogin_r.c (getlogin_r): Don't set errno to 0 on return. * lib/fts.c: Don't worry about debugging on pre-C99-compatible hosts; the configuration hassle isn't worth it. Include inttypes.h and stdint.h unconditionally if FTS_DEBUG. (LONGEST_MODIFIER, PRIuMAX): Remove. 2005-05-27 Bruno Haible * lib/getlogin_r.h: Remove second include of . 2005-05-26 Paul Eggert * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Define _POSIX_PTHREAD_SEMANTICS for Solaris. 2005-05-25 Derek Price * MODULES.html.sh: Add getlogin_r to POSIX.2001 support section. 2005-05-25 Derek Price Paul Eggert * modules/getlogin_r, m4/getlogin_r.m4: New files. * lib/getlogin_r.c, getlogin_r.h: New files. 2005-05-25 Bruno Haible Derek Price * lib/getlogin_r.h: Simplify API documentation. 2005-05-23 Derek Price * modules/minmax (Files): Add m4/minmax.m4. (configure.ac): Add gl_MINMAX. 2005-05-22 Paul Eggert * lib/fts.c (fd_safer) [_LGPL_PACKAGE]: New static function, so that unistd-safer.h (GPL'ed code) need not be included. 2005-05-22 Bruno Haible * m4/minmax.m4: New file. Based on a patch by Derek Price . 2005-05-22 Bruno Haible * lib/stdint_.h (_STDINT_H_HAVE_INT64): New macro. Use it in #ifdefs. (INT64_MIN): Fix definition. Suggested by Paul Eggert . * lib/stdint_.h (_STDINT_H_NEED_SIGNED_INT_TYPES): Renamed from NEED_SIGNED_INT_TYPES. * lib/stdint_.h (_STDINT_H_HAVE_SYSTEM_INTTYPES): Renamed from HAVE_SYSTEM_INTTYPES. 2005-05-22 Bruno Haible * lib/minmax.h: Include only when it defines MIN, MAX. Also include if it defines MIN, MAX. Based on a patch by Derek Price . 2005-05-21 Jim Meyering * modules/fts (Files): Add m4/inttypes-pri.m4. (Depends-on): Add lstat and remove gettext. Alphabetize. 2005-05-20 Paul Eggert New fts module. * lib/fts.c: Don't include "cycle-check.h" or "hash.h". (setup_dir, free_dir): New functions. (enter_dir, leave_dir): Define trivial alternatives of _LGPL_PACKAGE. Move to fts-cycle.c if !_LGPL_PACKAGE. (HT_INITIAL_SIZE, ENTER_DIR): Remove. All uses removed. (LEAVE_DIR): Fix typo: pass Fts and Ent to leave_dir. (struct Active_dir, AD_compare, AD_hash, enter_dir, leave_dir): Move to fts-cycle.c. (fts_open): Use setup_dir. (fts_close): Use free_dir. (fts_read): Have just one copy of the ENTER_DIR code rather than three. This adds a label and some gotos, but the alternatives were messier. Check for memory allocation failure when entering a dir. (fts_stat) [_LGPL_PACKAGE]: Bring back glibc cycle detection code. * lib/fts_.h (_LGPL_PACKAGE) [defined _LIBC]: New macro. (FTS): New member fts_cycle, that is a union that contains the old active_dir_ht and cycle_state. All uses changed to mention fts_cycle.ht and fts_cycle.state. * lib/fts-cycle.c: New file, containing GPL'ed code migrated out of fts.c, with the following changes: (setup_dir, free_dir): New functions. (enter_dir): Now returns bool. Return true if successful, false if memory exhausted. All callers changed. Do not bother partly cleaning up on memory allocation failure; that is free_dir's job. However, free ad if hash_insert fails, to avoid memory leak. (enter_dir, leave_dir): Accommodate change to FTS by inspecting fts->fts_options to see which union member to use. 2005-05-20 Paul Eggert * m4/fts.m4 (gl_FUNC_FTS_CORE): Renamed from gl_FUNC_FTS. (gl_FUNC_FTS, gl_FUNC_FTS_LGPL): New macros. 2005-05-20 Paul Eggert * MODULES.html.sh (File system functions): Add fts, fts-lgpl. 2005-05-20 Jim Meyering * lib/unlinkdir.h (cannot_unlink_dir) [UNLINK_CANNOT_UNLINK_DIR]: Now a macro, to pacify GCC. 2005-05-20 Eric Blake (tiny change) * m4/chown.m4 (gl_FUNC_CHOWN): Correct sense of test for honoring IDs of -1. 2005-05-20 Eric Blake (tiny change) * lib/chown.c (rpl_chown): Return -1 on failure. 2005-05-18 Paul Eggert * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME]): Don't check for stddef.h. * m4/fts.m4 (gl_FUNC_FTS): Don't require AC_HEADER_STDC, as we don't use its results. Don't check for fcntl.h, stddef.h, stdlib.h, string.h, unistd.h, since we include them unconditionally. Don't require AM_STDBOOL_H, since stdbool is a prerequisite. Don't require AC_C_CONST, AC_TYPE_SIZE_T or check for ptrdiff_t since we assume C89 or better. Don't require AC_FUNC_CLOSEDIR_VOID, AC_FUNC_LSTAT, or AC_FUNC_STAT, as we don't use their results. Don't check for fchdir, memmove, memset, strrchr, as we use them unconditionally. * m4/gettimeofday.m4 (AC_FUNC_GETTIMEOFDAY_CLOBBER): Don't define GETTIMEOFDAY_CLOBBERS_LOCALTIME_BUFFER, since nobody uses it. 2005-05-18 Paul Eggert * lib/canonicalize.c: Include canonicalize.h first, to test interface. Include unconditionally, since we assume C89 now. All uses of PTR_INT_TYPE replaced by ptrdiff_t. * lib/fts.c: Include fts_.h first, to check interface. Do not include intprops.h; no longer needed. Include cycle-check.h and hash.h, since fts_.h no longer does. Remove unnecessary casts of closedir to void. (fts_build): Use a simpler method (not involving TYPE_SIGNED) to decide whether to decrement nlinks. * lib/fts_.h: Do not include hash.h or cycle-check.h; no longer needed. (FTS): Use struct hash_table * instead of Hash_table, so that we no longer need to include hash.h here. 2005-05-18 Jim Meyering * modules/dirfd (License): Change to LGPL. Most of the code is already in the public domain. 2005-05-18 Jim Meyering * m4/fts.m4 (AC_LIBSOURCES): Add intprops.h to the list. Reported by Yoann Vandoorselaere. 2005-05-17 Jim Meyering * m4/fts.m4: New file, from coreutils. 2005-05-17 Jim Meyering * lib/fts.c, lib/fts_.h: New files, from coreutils. 2005-05-14 Paul Eggert Sync from coreutils. * m4/unlinkdir.m4: New file. 2005-05-14 Paul Eggert Sync from coreutils. * lib/unlinkdir.c, lib/unlinkdir.h: New files. * lib/gethrxtime.c, lib/gethrxtime.h, lib/getpass.h, lib/mountlist.h, lib/path-concat.c, lib/regex.h, lib/unlocked-io.h, lib/xtime.h: White space changes only. * lib/makepath.c (make_path): Port to hosts where leading "//" is special. * lib/yesno.c: Include getline.h, not ctype.h. (yesno): Don't remove leading white space; POSIX doesn't allow it. Use getline to remove arbitrary restriction on response length. 2005-05-14 Paul Eggert * config/srclist-update: Spell out "Street" in FSF postal mail address; this is the style the FSF seems to prefer. * build-aux/depcomp, build-aux/install-sh, build-aux/mdate-sh, build-aux/missing, build-aux/mkinstalldirs: Sync from Automake; this updates FSF postal mail address. Sync from coreutils. * modules/unlinkdir: New file. * modules/yesno (Depends-on): Add getline. * MODULES.html.sh (File system functions): Add unlinkdir. 2005-05-13 Paul Eggert * lib/byteswap_.h, lib/getsubopt.h, lib/iconvme.h, lib/strsep.c, lib/strsep.h: Change the initial comment to refer to GPL, not LGPL. gnulib-tool will change it to LGPL as needed. * lib/__fpending.c, lib/acl.c, lib/acl.h, lib/alloca_.h, lib/allocsa.c, lib/allocsa.h, lib/argmatch.c, lib/argmatch.h, lib/argp-ba.c, lib/argp-eexst.c, lib/argp-fmtstream.c, lib/argp-fmtstream.h, lib/argp-fs-xinl.c, lib/argp-help.c, lib/argp-namefrob.h, lib/argp-parse.c, lib/argp-pv.c, lib/argp-pvh.c, lib/argp-xinl.c, lib/argp.h, lib/argz.c, lib/argz_.h, lib/asnprintf.c, lib/asprintf.c, lib/atanl.c, lib/backupfile.c, lib/backupfile.h, lib/base64.c, lib/base64.h, lib/basename.c, lib/binary-io.h, lib/byteswap_.h, lib/c-ctype.c, lib/c-ctype.h, lib/c-stack.c, lib/c-stack.h, lib/c-strtod.c, lib/calloc.c, lib/canon-host.c, lib/canonicalize.c, lib/canonicalize.h, lib/ceill.c, lib/chdir-long.c, lib/chdir-long.h, lib/chown.c, lib/classpath.c, lib/classpath.h, lib/cloexec.c, lib/closeout.c, lib/closeout.h, lib/concatpath.c, lib/config.charset, lib/copy-file.c, lib/copy-file.h, lib/cycle-check.c, lib/cycle-check.h, lib/diacrit.c, lib/diacrit.h, lib/dirfd.c, lib/dirfd.h, lib/dirname.c, lib/dirname.h, lib/dummy.c, lib/dup-safer.c, lib/dup2.c, lib/eealloc.h, lib/error.c, lib/error.h, lib/euidaccess.c, lib/exclude.c, lib/exclude.h, lib/execute.c, lib/execute.h, lib/exit.h, lib/exitfail.c, lib/exitfail.h, lib/expl.c, lib/fatal-signal.c, lib/fatal-signal.h, lib/fd-safer.c, lib/file-type.c, lib/file-type.h, lib/fileblocks.c, lib/filemode.c, lib/filemode.h, lib/findprog.c, lib/findprog.h, lib/floorl.c, lib/fnmatch.c, lib/fnmatch_.h, lib/fnmatch_loop.c, lib/fopen-safer.c, lib/free.c, lib/frexpl.c, lib/fsusage.c, lib/fsusage.h, lib/full-read.c, lib/full-read.h, lib/full-write.c, lib/full-write.h, lib/fwriteerror.c, lib/fwriteerror.h, lib/gai_strerror.c, lib/gcd.c, lib/gcd.h, lib/getaddrinfo.c, lib/getaddrinfo.h, lib/getcwd.c, lib/getcwd.h, lib/getdate.h, lib/getdate.y, lib/getdomainname.c, lib/getdomainname.h, lib/getgroups.c, lib/gethostname.c, lib/gethrxtime.c, lib/gethrxtime.h, lib/getline.c, lib/getline.h, lib/getloadavg.c, lib/getndelim2.c, lib/getndelim2.h, lib/getnline.c, lib/getnline.h, lib/getopt.c, lib/getopt1.c, lib/getopt_.h, lib/getopt_int.h, lib/getpagesize.h, lib/getpass.c, lib/getpass.h, lib/getsubopt.c, lib/getsubopt.h, lib/gettext.h, lib/gettime.c, lib/gettimeofday.c, lib/getugroups.c, lib/getusershell.c, lib/group-member.c, lib/group-member.h, lib/hard-locale.c, lib/hard-locale.h, lib/hash-pjw.c, lib/hash-pjw.h, lib/hash.c, lib/hash.h, lib/human.c, lib/human.h, lib/iconvme.c, lib/iconvme.h, lib/idcache.c, lib/inet_ntop.h, lib/intprops.h, lib/inttostr.c, lib/inttostr.h, lib/isdir.c, lib/javacomp.c, lib/javacomp.h, lib/javacomp.sh.in, lib/javaexec.c, lib/javaexec.h, lib/javaexec.sh.in, lib/lbrkprop.h, lib/lchown.c, lib/ldexpl.c, lib/linebreak.c, lib/linebreak.h, lib/linebuffer.c, lib/linebuffer.h, lib/localcharset.c, lib/localcharset.h, lib/logl.c, lib/long-options.c, lib/long-options.h, lib/lstat.c, lib/makepath.c, lib/makepath.h, lib/malloc.c, lib/mathl.h, lib/mbswidth.c, lib/mbswidth.h, lib/md5.c, lib/md5.h, lib/memcasecmp.c, lib/memcasecmp.h, lib/memchr.c, lib/memcmp.c, lib/memcoll.c, lib/memcoll.h, lib/memcpy.c, lib/memmem.c, lib/memmem.h, lib/mempcpy.c, lib/mempcpy.h, lib/memrchr.c, lib/memrchr.h, lib/memset.c, lib/minmax.h, lib/mkdir.c, lib/mkdtemp.c, lib/mkdtemp.h, lib/mkstemp.c, lib/mktime.c, lib/modechange.c, lib/modechange.h, lib/mountlist.c, lib/mountlist.h, lib/nanosleep.c, lib/obstack.c, lib/obstack.h, lib/openat.c, lib/openat.h, lib/pagealign_alloc.c, lib/pagealign_alloc.h, lib/path-concat.c, lib/path-concat.h, lib/pathmax.h, lib/pathname.h, lib/physmem.c, lib/physmem.h, lib/pipe.c, lib/pipe.h, lib/poll.c, lib/poll_.h, lib/posixtm.c, lib/posixtm.h, lib/posixver.c, lib/printf-args.c, lib/printf-args.h, lib/printf-parse.c, lib/printf-parse.h, lib/progname.c, lib/progname.h, lib/progreloc.c, lib/putenv.c, lib/quote.c, lib/quote.h, lib/quotearg.c, lib/quotearg.h, lib/raise.c, lib/readlink.c, lib/readtokens.c, lib/readtokens.h, lib/readtokens0.c, lib/readtokens0.h, lib/readutmp.c, lib/readutmp.h, lib/realloc.c, lib/ref-add.sin, lib/ref-del.sin, lib/regex.c, lib/regex.h, lib/rename.c, lib/rmdir.c, lib/rpmatch.c, lib/safe-read.c, lib/safe-read.h, lib/safe-write.c, lib/safe-write.h, lib/same.c, lib/same.h, lib/save-cwd.c, lib/save-cwd.h, lib/savedir.c, lib/savedir.h, lib/setenv.c, lib/setenv.h, lib/settime.c, lib/sh-quote.c, lib/sh-quote.h, lib/sha1.c, lib/sha1.h, lib/sig2str.c, lib/sig2str.h, lib/sincosl.c, lib/snprintf.c, lib/snprintf.h, lib/sqrtl.c, lib/stat-macros.h, lib/stat.c, lib/stdbool_.h, lib/stdint_.h, lib/stdio-safer.h, lib/stpcpy.c, lib/stpcpy.h, lib/stpncpy.c, lib/stpncpy.h, lib/strcase.h, lib/strcasecmp.c, lib/strchrnul.c, lib/strchrnul.h, lib/strcspn.c, lib/strdup.c, lib/strdup.h, lib/strerror.c, lib/strftime.c, lib/strftime.h, lib/stripslash.c, lib/strndup.c, lib/strndup.h, lib/strnlen.c, lib/strpbrk.c, lib/strpbrk.h, lib/strsep.c, lib/strsep.h, lib/strstr.c, lib/strstr.h, lib/strtod.c, lib/strtoimax.c, lib/strtok_r.c, lib/strtok_r.h, lib/strtol.c, lib/strtoll.c, lib/strtoul.c, lib/strtoull.c, lib/strverscmp.c, lib/strverscmp.h, lib/sysexit_.h, lib/tempname.c, lib/time_r.c, lib/time_r.h, lib/timegm.c, lib/timegm.h, lib/timespec.h, lib/trigl.c, lib/trigl.h, lib/ucs4-utf16.h, lib/ucs4-utf8.h, lib/unicodeio.c, lib/unicodeio.h, lib/unistd-safer.h, lib/unlocked-io.h, lib/unsetenv.c, lib/userspec.c, lib/utf16-ucs4.h, lib/utf8-ucs4.h, lib/utime.c, lib/utimecmp.c, lib/utimecmp.h, lib/utimens.c, lib/vasnprintf.c, lib/vasnprintf.h, lib/vasprintf.c, lib/vasprintf.h, lib/version-etc-fsf.c, lib/version-etc.c, lib/version-etc.h, lib/vsnprintf.c, lib/vsnprintf.h, lib/w32spawn.h, lib/wait-process.c, lib/wait-process.h, lib/xalloc-die.c, lib/xalloc.h, lib/xallocsa.c, lib/xallocsa.h, lib/xasprintf.c, lib/xgetcwd.c, lib/xgetcwd.h, lib/xgetdomainname.c, lib/xgetdomainname.h, lib/xgethostname.c, lib/xmalloc.c, lib/xmemcoll.c, lib/xnanosleep.c, lib/xreadlink.c, lib/xreadlink.h, lib/xsetenv.c, lib/xsetenv.h, lib/xsize.h, lib/xstrndup.c, lib/xstrndup.h, lib/xstrtod.c, lib/xstrtod.h, lib/xstrtoimax.c, lib/xstrtol.c, lib/xstrtol.h, lib/xstrtoumax.c, lib/xtime.h, lib/xvasprintf.c, lib/xvasprintf.h, lib/yesno.c, lib/yesno.h: Update FSF postal mail address. 2005-05-13 Paul Eggert * MODULES.html.sh, README, gnulib-tool, tests/test-base64.c, tests/test-memmem.c, tests/test-stpncpy.c: Update FSF postal mail address. 2005-05-13 Bruno Haible * lib/stdint_.h (int64_t, uint64_t, int_least64_t, uint_least64_t, int_fast64_t, uint_fast64_t, intmax_t, uintmax_t, INT64_MIN, INT64_MAX, UINT64_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX, INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX, INT64_C, UINT64_C, INTMAX_C, UINTMAX_C): Add support for 64-bit integers in the MSVC compiler. 2005-05-12 Sergey Poznyakoff * modules/getdate (Makefile.am): Add getdate.c to EXTRA_DIST 2005-05-12 Eric Blake (tiny change) * gnulib-tool (func_import): Sort and uniquify recommended includes. 2005-05-11 Paul Eggert * doc/getdate.texi (General date syntax): Don't say that date date --iso-8601=ns generates acceptable dates; it doesn't yet. Problem reported by Nic Ferrier. 2005-05-10 Yoann Vandoorselaere * lib/getaddrinfo.c: Don't fail when SOCK_STREAM or SOCK_DGRAM are specified in ai_socktype. Fix invalid ai_protocol check. ai_protocol is usually set to 0 or depending on ai_family/ai_socktype to IPPROTO_TCP / IPPROTO_UDP. Checking for SOCK_STREAM / SOCK_DGRAM in ai_protocol was invalid. Set ai_socktype / ai_protocol in the returned addrinfo structure. 2005-05-10 Simon Josefsson * m4/getaddrinfo.m4: Look in libnsl/libsocket for getaddrinfo, from Yoann Vandoorselaere . 2005-05-10 Karl Berry * doc/fdl.texi, gpl.texi, lgpl.texi, COPYING: update FSF address (from http://www.gnu.org/licenses). * doc/COPYING.LIB: also rename to COPYING.LESSER. * doc/COPYING.DOC: remove; per rms, only needed in doc files, so fdl.texi suffices. 2005-05-10 Karl Berry * config/srclist.txt (COPYING.LESSER): rename from COPYING.LIB. (COPYING.DOC): remove. * config/srclist-update: new FSF address. 2005-05-10 Derek Price * m4/getopt.m4 (gl_GETOPT): Check for Solaris 10 bug, not decl, when possible. 2005-05-09 Yoann Vandoorselaere Bruno Haible * modules/inet_ntop: New file. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add inet_ntop. 2005-05-09 Yoann Vandoorselaere Bruno Haible * m4/inet_ntop.m4: New file. 2005-05-09 Yoann Vandoorselaere Bruno Haible * lib/inet_ntop.h: New file. * lib/inet_ntop.c: New file, from glibc with modifications. 2005-05-09 Paul Eggert * modules/time_r (License): Change to LGPL. * modules/extensions (License): Change to LGPL. Actually, the license is more permissive than that, but currently gnulib-tool doesn't know how to handle more-permissive licenses. * modules/stat-macros (Depends-on): Don't depend on stat-macros (!). Problem reported by Dave Love. 2005-05-08 Jim Meyering * lib/classpath.c (PATH_SEPARATOR): Remove insignificant trailing blank. 2005-05-06 Paul Eggert * modules/argmatch (Depends-on): Add stdbool. * modules/backupfile (Depends-on): Likewise. * modules/chdir-long (Depends-on): Likewise. * modules/closeout (Depends-on): Likewise. * modules/cycle-check (Depends-on): Likewise. * modules/dirname (Depends-on): Likewise. * modules/fnmatch (Depends-on): Likewise. * modules/fsusage (Depends-on): Likewise. * modules/fwriteerror (Depends-on): Likewise. * modules/getcwd (Depends-on): Likewise. * modules/getloadavg (Depends-on): Likewise. * modules/hard-locale (Depends-on): Likewise. * modules/makepath (Depends-on): Likewise. * modules/mountlist (Depends-on): Likewise. * modules/nanosleep (Depends-on): Likewise. * modules/posixtm (Depends-on): Likewise. * modules/quotearg (Depends-on): Likewise. * modules/readtokens (Depends-on): Likewise. * modules/readtokens0 (Depends-on): Likewise. * modules/readutmp (Depends-on): Likewise. * modules/save-cwd (Depends-on): Likewise. * modules/strftime (Depends-on): Likewise. * modules/userspec (Depends-on): Likewise. * modules/utimecmp (Depends-on): Likewise. * modules/xgetcwd (Depends-on): Likewise. * modules/xnanosleep (Depends-on): Likewise. * modules/xstrtod (Depends-on): Likewise. * modules/yesno (Depends-on): Likewise. 2005-05-05 Paul Eggert * m4/getopt.m4 (gl_GETOPT): Check for Solaris 10 getopt, and avoid needless checks. 2005-05-01 Paul Eggert Merge from coreutils. Among other things, add bulletproofing for cases where stdin, stdout, or stderr are closed. * lib/fd-safer.c: New file. * lib/fcntl-safer.h, open-safer.c: Remove. * lib/chdir-long.c: Fix comment "fetish" -> "coreutils". * lib/dup-safer.c: Include unistd-safer.h first. Don't include errno.h. (dup_safer) [!defined F_DUPFD]: Let fd_safer do the real work. * lib/file-type.h: Don't assume invoker included sys/stat.h first. * lib/file-type.c: Rely on file-type.h change. * lib/getloadavg.c: Include unistd-safer.h. (getloadavg): Use safer open. * lib/getusershell.c: Include "stdio-safer.h". (getusershell): Use safer fopen. * lib/long-options.c (long_options): Use NULL rather than 0. * lib/modechange.h (mode_free): Remove; all callers changed to invoke 'free'. * lib/modechange.c: Likewise. xstrtol.h, stdbool.h, stddef.h: Don't include; no longer needed. (MODE_DONE): New constant. (struct mode_change): Remove 'next' member. (make_node_op_equals): New function; like the old one of the same name, except it allocates an array. (mode_compile, mode_create_from_ref): Use it. (mode_compile): Allocate result as an array, not a linked list. Parse octal string ourself, so that we catch mistakes like "+0". (mode_adjust): Arg is an array, not a linked list. * lib/modechange.c: Include stat-macros.h, xalloc.h. (S_ISDIR, S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IWUSR, S_IXUSR): (S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH, S_IRXWU): (S_IRWXG, S_IRWXO, CHMOD_MODE_BITS): Remove. This is now stat-macros.h's job. (talloc): Remove. All callers replaced by xalloc, so that our invokers don't have to worry about reporting memory failures. (make_node_op_equals): Remove. (MODE_ORDINARY_CHAGE, MODE_X_IF_ANY_X, MODE_COPY_EXISTING): New constants. (struct mode_change): Moved here from modechange.h. (mode_append_entry): Remove. (mode_compile): Remove MASKED_OPS arg, since it encouraged apps to have incorrect behavior. Use simpler algorithm for head and tail. Don't futz with umask; that's now the job of mode_adjust. Detect more invalid usages rather than having somewhat-random behavior. Don't insert an "a=" action, as that leads to incorrect behavior. (mode_compile, mode_create_from_ref): Return NULL on error instead of an enum, since now there's only one way to have an error. All callers changed. (mode_adjust): Accept new arg UMASK_VALUE, and interpret it at the correct time. Simplify calculation of "+u" and its ilk. Don't mishandle "+X". (mode_free): Remove "register" and localize decls. * lib/modechange.h (MODE_X_IF_ANY_X, MODE_COPY_EXISTING): (struct mode_change): Move to modechange.c; callers don't need to see this stuff. (MODE_MASK_EQUALS, MODE_MASK_PLUS, MODE_MASK_MINUS, MODE_MASK_ALL): (MODE_INVALID, MODE_MEMORY_EXHAUSTED, MODE_BAD_REFERENCE): Remove. (mode_change, mode_adjust): Reflect the new signatures noted above. * lib/nanosleep.c (rpl_nanosleep): Include "timespec.h" before macros that might redefine system include files. (siginterrupt) [!HAVE_SIGINTERRUPT]: New macro. (my_usleep): Use NULL rather than (void *) 0. (rpl_nanosleep) [!defined SA_NOCLDSTOP]: Use siginterrupt to specify that system calls should be interrupted. (rpl_nanosleep): Move initialization of suspended closer to call of my_usleep. * lib/readutmp.h (read_utmp): New arg OPTIONS. All uses changed. * lib/readutmp.c: Likewise. Include signal.h, stdbool.h. (desirable_utmp_entry): New function. (read_utmp) [defined UTMP_NAME_FUNCTION]: Redo memory allocation using x2nrealloc, to simplify logic. (read_utmp) [!defined UTMP_NAME_FUNCTION]: Check for overflow in size calculation. Do not assume utmp file is a regular file. * lib/readutmp.h (UT_PID): Moved here from ../src/who.c. (READ_UTMP_CHECK_PIDS): New constant. * lib/save-cwd.c: Include unistd-safer.h. (save_cwd): Use fd_safer. * lib/tempname.c (S_ISDIR, S_IRUSR, S_IRUSR, S_IWUSR, S_IXUSR): Remove. [!_LIBC] Include "stat-macros.h" instead. * lib/unistd-safer.h (fd_safer): New decl. 2005-05-01 Paul Eggert * modules/getloadavg (Depends-on): Add unistd-safer. * modules/getusershell (Depends-on): Add stdio-safer. * modules/lstat (Depends-on): Remove xalloc. * modules/mkstemp (Depends-on): Add stat-macros. * modules/modechange (Depends-on): Remove xstrtol. Add stat-macros, xalloc. * modules/save-cwd (Depends-on): Add unistd-safer. * modules/stdio-safer (Makefile.am): Remove lib_SOURCES. * modules/unistd-safer (Files): Add lib/fd-safer.c (Makefile.am): Remove lib_SOURCES. * MODULES.html.sh (Enhancements for POSIX:2001 functions): Remove fcntl-safer; unistd-safer supersedes it. 2005-05-01 Paul Eggert * m4/euidaccess.m4 (gl_PREREQ_EUIDACCESS): Don't require AC_HEADER_STAT. * m4/lchown.m4 (gl_FUNC_CHOWN): Likewise. (gl_PREREQ_CHOWN): Remove. * m4/lstat.m4 (gl_FUNC_LSTAT): Require AC_FUNC_LSTAT instead of calling it. Don't require AC_HEADER_STAT. (gl_PREREQ_LSTAT): Remove. * m4/mkstemp.m4 (gl_PREREQ_TEMPNAME): Check stdint.h only once. Don't require AC_HEADER_STAT. * m4/rmdir.m4 (gl_FUNC_RMDIR): Don't require AC_HEADER_STAT. (gl_PREREQ_RMDIR): Remove. * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME): Don't mention stat-macros.h or AC_HEADER_STAT, since we'll make the stat-macros module a prerequisite. * m4/file-type.m4 (gl_FILE_TYPE): Likewise. * m4/filemode.m4 (gl_FILEMODE): Likewise. * m4/makepath.m4 (gl_MAKEPATH): Likewise. * m4/modechange.m4 (gl_MODECHANGE): Likewise. * m4/clock_time.m4 (gl_CLOCK_TIME): Use gl_ rather than fetish_ for variable names. * m4/rmdir-errno.m4 (gl_FUNC_RMDIR_NOTEMPTY): Renamed from fetish_FUNC_RMDIR_NOTEMPTY. All uses changed. Use gl_ for variable prefixes. * m4/fcntl-safer.m4: Remove. * m4/stdio-safer.m4 (gl_STDIO_SAFER): Use AC_LIBSOURCES and AC_LIBOBJ. * m4/unistd-safer.m4 (gl_UNISTD_SAFER): Likewise. Invoke gl_PREREQ_FD_SAFER. (gl_PREREQ_FD_SAFER): New macro. * m4/nanosleep.m4 (gl_PREREQ_NANOSLEEP): Check for siginterrupt. * m4/readutmp.m4 (gl_READUTMP): Require AC_C_INLINE. Use AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE when possible. Remove duplicate call to AC_LIBOBJ(readutmp). (gl_PREREQ_READUTMP): Remove. All uses inlined. * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Check for message, not for MAP_ANON. Problem reported by Moriyoshi Koizumi to bug-cvs. 2005-05-01 Paul Eggert * MODULES.html.sh (Misc): Add byteswap. 2005-05-01 Oskar Liljeblad * modules/getcwd (Depends-on): Add extensions. * modules/openat (Depends-on): Likewise. 2005-05-01 Oskar Liljeblad * modules/byteswap: New file. 2005-05-01 Oskar Liljeblad * m4/byteswap.m4: New file. 2005-05-01 Oskar Liljeblad * lib/byteswap_.h: New file. 2005-04-25 Karl Berry * m4/gettext.m4: Update from GNU gettext 0.14.4. 2005-04-25 Albert Chin * lib/regex.c: Include , as a workaround to a Compaq Desktop Toolkit C bug. 2005-04-21 Oskar Liljeblad * gnulib-tool (Options): Add -s for --symlink/--symbolic. (func_ln_if_changed): Remove forcibly for no error message in case file does not exist. 2005-04-19 Simon Josefsson * gnulib-tool (Options): Make --symlink mean --symbolic. 2005-04-18 Oskar Liljeblad * doc/gnulib.texi (Initial import): Fix. Mention --aux-dir. 2005-04-16 Simon Josefsson * modules/getpass-gnu (Makefile.am): Don't mention getpass.h. 2005-04-15 Simon Josefsson * m4/getpass.m4 (gl_FUNC_GETPASS): Use AC_LIBSOURCES. 2005-04-15 Simon Josefsson * gnulib-tool: Rename --symlink to --symbolic. 2005-04-15 Oskar Liljeblad * gnulib-tool: Add -s, --symlink option to gnulib-tool to make symbolic links to files instead of copying/moving. Add --aux-dir, specifying directory relative --dir where auxiliary build tools are placed. 2005-04-14 Bruno Haible * modules/allocsa (License): Change to LGPL. Requested by Yoann Vandoorselaere . 2005-04-13 Paul Eggert * lib/getdate.y (zone): Allow relunit_snumber after tZONE, so that "UTC +1 second" continues to work. Problem reported by Dmitry V. Levin. (relunit_snumber): New rule. (relunit): Use it. 2005-04-12 Paul Eggert * lib/getdate.y (universal_time_zone_table): New constant. (time_zone_table): Remove GMT, UT, UTC entries; they're now in universal_time_zone_table. (lookup_zone): Prefer universal_time_zone_table to local_time_zone_table, so that "GMT" time stamps are allowed in London during the summer. Problem reported by Ian Abbott. 2005-04-12 Jim Meyering * lib/human.c (humblock): Set *options even when returning due to xstrtoumax conversion failure. Thanks to a used-uninitialized warning from gcc-4. 2005-04-09 Jim Meyering * lib/posixtm.c (posixtime) [lint]: Avoid spurious warning from gcc-4's -Wuninitialized: initialize tm0.tm_year. 2005-04-04 Paul Eggert * lib/getdate.y (parser_control): rels_seen is now a boolean, not a count, since there's no maximum. All uses changed. Add member dsts_seen. (local_zone): Accumulate dsts_seen rather than relying on tm_isdst not being INT_MAX. (get_date): Initialize dsts_seen, and check that it doesn't go over 1. Use pc_rels_seen to decide whether a date is absolute. * lib/getdate.y (number): Don't overwrite year. (get_date): Initialize pc.year.digits to 0, not 4, to enable above check. 2005-04-02 Simon Josefsson * lib/getaddrinfo.h: Fix OpenBSD compilation failure, inspired by tiny patch from Yoann Vandoorselaere . 2005-03-28 Eric Blake (tiny change) * m4/getcwd-path-max.m4: Return success on systems such as Cygwin where no absolute path name can be longer than PATH_MAX. 2005-03-27 Jim Meyering * lib/argmatch.c: Clarify comment: null-terminated -> NULL-terminated. 2005-03-26 Paul Eggert * lib/intprops.h (INT_STRLEN_BOUND, INT_BUFSIZE_BOUND): "one's complement" -> "ones' complement" in comment, as per Knuth. "value of type" -> "type or expression" in comment. * lib/mktime.c, strftime.c: Propagate intprops.h comment nits. 2005-03-26 Jim Meyering Comment nits. * lib/intprops.h: Add the apostrophe in `(one|two)'s complement'. Correct typos: s/or/of/. 2005-03-26 Jim Meyering * modules/check-include-files: Move to ../ and rename to... * check-module: ...this. 2005-03-25 Jim Meyering * modules/xvasprintf (Files): Add xalloc.h. 2005-03-23 Paul Eggert * modules/gettext (Files): config/config.rpath -> build-aux/config.rpath * modules/iconv (Files): Likewise. Problem reported by Oskar Liljeblad. 2005-03-23 Jim Meyering * modules/check-include-files: New script to check for missing dependencies, multiple includes, etc. * modules/c-strtold (Depends-on): Add xalloc. * modules/c-strtod (Depends-on): Add xalloc. * modules/hash (Depends-on): Add xalloc. (Files): Remove lib/xalloc.h. * modules/gethrxtime (Files): Add lib/gethrxtime.h. * modules/userspec (Files): Add lib/inttostr.h. 2005-03-23 Jim Meyering * lib/canonicalize.c: Remove duplicate `#include "stat-macros.h"'. 2005-03-22 Jim Meyering * modules/stat-macros: New module. * modules/canonicalize, modules/euidaccess, modules/file-type, * modules/filemode, modules/lchown, modules/makepath, * modules/rmdir, modules/stat: Depend on new stat-macros module rather than listing lib/stat-macros.h manually. Don't add stat-macros.h to lib_SOURCES or list it in Files: section. 2005-03-22 Jim Meyering * m4/stat-macros.m4 (gl_STAT_MACROS): New file/macro. 2005-03-22 Bruno Haible * config/srclist.txt: Replace target directory 'config' with 'build-aux'. * config/config.guess, config.sub, config.rpath, depcomp, install-sh: * config/mdate-sh, missing, mkinstalldirs, texinfo.tex: Move to ../build-aux/. 2005-03-21 Paul Eggert * modules/chdir-long (Depends-on): Add mempcpy. * modules/acl, modules/backupfile, modules/c-strtod, modules/c-strtold, modules/canon-host, modules/canonicalize, modules/cloexec, modules/closeout, modules/dirfd, modules/dirname, modules/exclude, modules/exitfail, modules/file-type, modules/filemode, modules/fpending, modules/fsusage, modules/getcwd, modules/getdate, modules/getline, modules/getpagesize, modules/getpass, modules/getugroups, modules/group-member, modules/hard-locale, modules/hash, modules/human, modules/idcache, modules/inttostr, modules/long-options, modules/makepath, modules/md5, modules/memcasecmp, modules/memcoll, modules/modechange, modules/mountlist, modules/path-concat, modules/pathmax, modules/physmem, modules/posixtm, modules/posixver, modules/quote, modules/quotearg, modules/readtokens, modules/readutmp, modules/safe-read, modules/safe-write, modules/same, modules/savedir, modules/settime, modules/sha1, modules/sig2str, modules/strdup, modules/strftime, modules/strndup, modules/strverscmp, modules/timespec, modules/unlocked-io, modules/userspec, modules/utimecmp, modules/utimens, modules/xalloc, modules/xstrtol, modules/yesno: Remove lib_SOURCES line from Makefile.am section, as this is now done automatically by the corresponding Autoconf macro. 2005-03-21 Jim Meyering Changes imported from coreutils. * lib/cycle-check.c: Don't include xalloc.h. * lib/path-concat.c: Don't include assert.h. (path_concat): Remove assertion that would have triggered for ABASE starting with more than one slash. Reported by Andreas Schwab. * lib/path-concat.c (path_concat): Set *BASE_IN_RESULT properly when ABASE is an absolute file name. Correct the description of this function. Include . Add an assertion and a test driver. This fixes a bug introduced on 2004-07-02. Andreas Schwab reported the resulting failure of cp --parents: http://lists.gnu.org/r/bug-coreutils/2005-01/msg00130.html 2005-03-21 Jim Meyering * m4/chdir-long.m4 (gl_PREREQ_CHDIR_LONG): Invoke gl_FUNC_MEMRCHR. * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Check for memrchr decl. 2005-03-21 Jim Meyering and Paul Eggert * m4/acl.m4, m4/backupfile.m4, m4/c-strtod.m4, m4/canon-host.m4, m4/canonicalize.m4, m4/cloexec.m4, m4/closeout.m4, m4/dirfd.m4, m4/dirname.m4, m4/exclude.m4, m4/exitfail.m4, m4/file-type.m4, m4/filemode.m4, m4/fpending.m4, m4/fsusage.m4, m4/getcwd.m4, m4/getdate.m4, m4/getline.m4, m4/getpagesize.m4, m4/getpass.m4, m4/getugroups.m4, m4/group-member.m4, m4/hard-locale.m4, m4/hash.m4, m4/human.m4, m4/idcache.m4, m4/inttostr.m4, m4/long-options.m4, m4/makepath.m4, m4/md5.m4, m4/memcasecmp.m4, m4/memcoll.m4, m4/modechange.m4, m4/mountlist.m4, m4/nanosleep.m4, m4/path-concat.m4, m4/pathmax.m4, m4/physmem.m4, m4/posixtm.m4, m4/posixver.m4, m4/quote.m4, m4/quotearg.m4, m4/readtokens.m4, m4/readutmp.m4, m4/safe-read.m4, m4/safe-write.m4, m4/same.m4, m4/savedir.m4, m4/settime.m4, m4/sha1.m4, m4/sig2str.m4, m4/strdup.m4, m4/strftime.m4, m4/strndup.m4, m4/strverscmp.m4, m4/timespec.m4, m4/unlocked-io.m4, m4/userspec.m4, m4/utimecmp.m4, m4/utimens.m4, m4/xalloc.m4, m4/xnanosleep.m4, m4/xstrtol.m4, m4/yesno.m4: Use AC_LIBSOURCES and AC_LIBOBJ to indicate source and object files for these modules. 2005-03-18 Paul Eggert * lib/strftime.c (my_strftime): If the underlying strftime returns 0 (which shouldn't happen), generate nothing instead of returning 0 immediately, so that nstrftime (NULL, ...) doesn't return 0. 2005-03-16 Bruno Haible * modules/stdint (Makefile.am): Use HAVE_LONG_LONG_64BIT instead of HAVE_LONGLONG_64BIT. 2005-03-16 Bruno Haible * m4/stdint.m4 (gl_STDINT_H): Define HAVE_LONG_LONG_64BIT instead of HAVE_LONGLONG_64BIT. 2005-03-16 Bruno Haible * lib/stdint_.h: Use HAVE_LONG_LONG_64BIT instead of HAVE_LONGLONG_64BIT. 2005-03-15 Paul Eggert * lib/strftime.c (my_strftime): Prepend space to format so that we can reliably distinguish strftime failure from empty output on POSIX hosts. 2005-03-15 Paul Eggert * lib/iconvme.c (SIZE_MAX): New macro, if not already defined. (iconv_string): Don't guess a size-zero buffer, as that might cause buffer overrun. Instead, avoid multiplying by MB_LEN_MAX if the result would be 'too large', where 'too large' is (heuristically) the square root of SIZE_MAX, divided by MB_LEN_MAX to allay overflow concerns. This will prevent some unwanted malloc failures when the inputs are very large. 2005-03-15 Karl Berry * config/srclist.txt (config.rpath): from gettext. * config/config.rpath: update. 2005-03-15 Bruno Haible * lib/regex.c (byte_re_match_2_internal): Rename local variable 'not' to 'negate'. * lib/regex.c (byte_re_match_2_internal): Reduce scope of same_str_p variable. * lib/regex.c (EXTEND_BUFFER, regcomp): Cast the realloc/malloc results. 2005-03-14 Simon Josefsson * lib/timegm.h: Use proper prototype CPP guards, reported by Dave Love . 2005-03-14 Paul Eggert * lib/mktime.c (TYPE_TWOS_COMPLEMENT, TYPE_ONES_COMPLEMENT, TYPE_SIGNED_MAGNITUDE, TYPE_MINIMUM, TYPE_MAXIMUM): Sync from intprops.h. * lib/strtol.c: Likewise. 2005-03-14 Jim Meyering * lib/strftime.c (my_strftime) [HAVE_STRFTIME && ! (_NL_CURRENT && HAVE_STRUCT_ERA_ENTRY)]: Initialize the first byte of ubuf[] to be nonzero so that we (and caller) can detect the difference between a valid zero-length expansion and an error return, even when the underlying strftime fails before writing anything into that location. 2005-03-14 Bruno Haible * m4/lib-link.m4, gettext.m4, nls.m4, po.m4: Update from GNU gettext 0.14.3. 2005-03-10 Jim Meyering * m4/save-cwd.m4 (gl_SAVE_CWD): Check for fchdir. 2005-03-10 Jim Meyering * lib/save-cwd.c [!HAVE_FCHDIR]: Define open, fchdir, and chdir_long so that this module works on systems without fchdir. 2005-03-09 Paul Eggert Factor int-properties macros into a single file, except for glibc-related files. * lib/intprops.h: New file. * lib/getloadavg.c: Include it instead of limits.h. (INT_STRLEN_BOUND): Remove. * lib/human.c: Include intprops.h. (group_number): Use INT_STRLEN_BOUND instead of rolling it ourself. * lib/human.h (LONGEST_HUMAN_READABLE): Use 146/485 rather than 302/1000. * lib/inttostr.h: Include intprops.h instead of limits.h. (INT_STRLEN_BOUND, INT_BUFSIZE_BOUND): Remove. * lib/mktime.c (TYPE_IS_INTEGER, TYPE_TWOS_COMPLEMENT): New macros, for consistency with intprops.h. (time_t_is_integer, twos_complement_arithmetic): Use them. * lib/sig2str.h: Include , intprops.h. (INT_STRLEN_BOUND): Remove. * lib/strftime.c (TYPE_SIGNED): Remove. (INT_STRLEN_BOUND): Switch to same implementation as intprops.h. * lib/strtol.c: Adjust comments to match intprops.h. * lib/userspec.c: Include intprops.h. (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove. * lib/utimecmp.c, xnanosleep.c, xstrtol.c: Likewise. * lib/utimecmp.c (utimecmp): Use TYPE_IS_INTEGER, TYPE_TWOS_COMPLEMENT instead of rolling our own expressions. * lib/xstrtol.c: Include xstrtol.h first, to test interface. * lib/strftime.c: Include . Use bool where appropriate, instead of int. (my_strftime): Do not mishandle years close to INT_MAX, by doing the right thing even if adding 1900 would overflow. Similarly for tm_mon + 1 and tm_yday + 1. Make %Y always equivalent to %C%y, and similarly for %G and %g. (DO_NUMBER, DO_NUMBER_SPACEPAD): Set digits to d, not a conditional. (DO_SIGNED_NUMBER): New macro. (my_strftime) [HAVE_TZNAME]: Don't dump core if tp->tm_dst > 1. 2005-03-07 Bruno Haible * m4/mmap-anon.m4 (MAP_FILE, MAP_FAILED): Remove definitions. 2005-03-07 Bruno Haible * lib/pagealign_alloc.c (MAP_FILE, MAP_FAILED): Define fallbacks. 2005-03-04 Derek R. Price * gnulib-tool (func_cp_if_changed, func_mv_if_changed): New functions. (func_import): Only replace files via --import when they have actually changed. 2005-03-03 Derek R. Price * m4/mmap-anon.m4: New file. * m4/pagealign_alloc.m4: New file. 2005-03-03 Derek R. Price Bruno Haible * modules/pagealign_alloc: New file. * MODULES.html.sh (Memory management functions): Add pagealign_alloc. 2005-03-03 Derek R. Price Bruno Haible * lib/pagealign_alloc.h: New file. * lib/pagealign_alloc.c: New file. 2005-03-03 Bruno Haible * m4/inttypes.m4, isc-posix.m4, once-only.m4: Use an all-permissive copyright notice, recommended by RMS. 2005-03-02 Bruno Haible * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Undo the replacement here. Because of AIX, the replacement has to be done only after is included, therefore not in config.h. stpncpy.h does the replacement, and stpncpy.c uses it. 2005-03-02 Bruno Haible * lib/stpncpy.h (stpncpy): Define as a macro without arguments, so that stpncpy.c uses it. 2005-03-01 Paul Eggert Remove workaround for bug in Linux kernel 2.6.8 or thereabouts. The workaround isn't strictly needed for POSIX conformance, and it's too much of a pain to configure and maintain. We'll ask people to fix their kernels instead. * lib/xnanosleep.c: Don't include gethrxtime.h or xtime.h. (NANOSLEEP_BUG_WORKAROUND): Remove. (xnanosleep): Remove the workaround. 2005-03-01 Paul Eggert * modules/gettime (Makefile.am): Remove lib_SOURCES line. Reported by Derek Price. (Include): Add "timespec.h". * modules/xnanosleep (Depends-on): Remove gethrxtime. 2005-03-01 Paul Eggert * m4/xnanosleep.m4 (gl_XNANOSLEEP): Remove configuration attempting to detect nanosleep bug. 2005-03-01 Bruno Haible * lib/vasnprintf.c (EOVERFLOW): Define to a fallback if needed. 2005-02-26 Paul Eggert * modules/gethrxtime: New file. * modules/xnanosleep (Files): Add m4/xnanosleep.m4. (Depends-on): Add gethrxtime. (configure.ac): Add gl_XNANOSLEEP. (Makefile.am): Remove lib_SOURCES line. 2005-02-25 Paul Eggert * m4/gethrxtime.m4, m4/xnanosleep.m4: New files. * m4/gettime.m4 (gl_GETTIME): Check for nanotime. 2005-02-25 Paul Eggert * lib/gethrxtime.h, lib/gethrxtime.c, lib/xtime.h: New files. * lib/timespec.h (gettime): Return void, since it always succeeds now. All uses changed. * lib/gettime.c (gettime): Likewise. [HAVE_NANOTIME]: Prefer nanotime. Assume gettimeofday succeeds, as POSIX requires. Assime time () succeeds, since other code already does. * lib/xnanosleep.c: Include xtime.h and gethrxtime.h, not xalloc.h. (timespec_subtract): Remove. (NANOSLEEP_BUG_WORKAROUND): New constant. (xnanosleep): Use gethrxtime rather than gettime; this simplifies things considerably. Use it only on GNU/Linux hosts, since the workaround shouldn't be needed elsewhere. 2005-02-24 Bruno Haible * modules/gettext (Files): Add m4/glibc2.m4. 2005-02-24 Bruno Haible * m4/gettext.m4, intdiv0.m4, intmax.m4, inttypes-pri.m4, lcmessage.m4: * m4/lib-link.m4, lib-prefix.m4, nls.m4, po.m4, printf-posix.m4: * m4/progtest.m4: Update from GNU gettext 0.14.2. * m4/glibc2.m4: New file, from GNU gettext 0.14.2. 2005-02-24 Bruno Haible * lib/localcharset.c: Update from GNU gettext 0.14.2. * lib/config.charset: Update from GNU gettext 0.14.2. 2005-02-24 Bruno Haible * lib/gettext.h: Update from GNU gettext 0.14.2. 2005-02-23 Simon Josefsson * m4/iconvme.m4: New file. 2005-02-23 Jim Meyering * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Revert yesteday's change. Thanks to Bruno Haible for catching it. 2005-02-22 Simon Josefsson * modules/iconvme: New file. * MODULES.html.sh: Add iconvme. 2005-02-22 Simon Josefsson * lib/iconvme.h, lib/iconvme.c: New files, from libc. 2005-02-22 Simon Josefsson * config/srclist.txt: Sync iconvme.h, iconvme.c from libc. 2005-02-22 Jim Meyering * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Fix typo: s/ifndef/ifdef/. 2005-02-20 Neil Conway * lib/xgethostname.c (xgethostname): Check for ENOMEM, which is returned by OSX/Darwin if the specified buffer is not large enough for the hostname. 2005-02-03 Sergey Poznyakoff * lib/argp-help.c (__argp_help): Create a fake struct argp_state and pass it to _help, otherwise the latter coredumps trying to dereference state.root_argp. 2005-02-03 Paul Eggert * modules/chdir-long (Depends-on): Add memrchr. * modules/memrchr (Files): Add lib/memrchr.h. (Include): "memrchr.h". 2005-02-03 Paul Eggert * m4/memrchr.m4 (gl_FUNC_MEMRCHR): Add AC_LIBSOURCES, for memrchr.h. 2005-02-03 Paul Eggert * lib/memrchr.h: New file. * lib/chdir-long.c: Include it. * lib/memrchr.c [!defined _LIBC]: Include it rather than Don't bother including stddef.h. 2005-02-01 Paul Eggert * lib/mountlist.h (MOUNTLIST_H_): New macro, to protect against double inclusion. Include , for dev_t. (ME_DUMMY, ME_REMOTE): Move from here.... * lib/mountlist.c (ME_DUMMY, ME_REMOTE): To here. (ME_DUMMY): Count "subfs" as a dummy. Problem reported by Dmitry V. Levin. Include mountlist.h first, to test the interface. 2005-01-29 Bruno Haible * lib/progname.c (program_name): Initialize. Needed when linking statically on MacOS X. 2005-01-28 Paul Eggert Sync from coreutils. * modules/getloadavg (Files): Remove m4/getloadavg.m4. (Depends-on): Add c-strtod. (configure.ac): Replace gl_FUNC_GETLOADAVG with AC_FUNC_GETLOADAVG. 2005-01-28 Paul Eggert Sync from coreutils. * m4/getloadavg.m4, glibc.m4, search-libs.m4: Remove. Remove files that are specific to coreutils. * m4/check-decl.m4, jm-macros.m4, lib-check.m4, prereq.m4: Remove. 2005-01-28 Bruno Haible * modules/javacomp: New file. * MODULES.html.sh (Java): Add javacomp. 2005-01-28 Bruno Haible * m4/javacomp.m4: New file, from GNU gettext. 2005-01-28 Bruno Haible * lib/javacomp.sh.in: New file, from GNU gettext. * lib/javacomp.h: New file, from GNU gettext. * lib/javacomp.c: New file, from GNU gettext. 2005-01-26 Simon Josefsson * lib/gai_strerror.c: Use GPL in header. 2005-01-26 Bruno Haible * modules/javaexec: New file. * MODULES.html.sh (Java): Add javaexec. 2005-01-26 Bruno Haible * m4/javaexec.m4: New file, from GNU gettext. 2005-01-26 Bruno Haible * lib/javaexec.sh.in: New file, from GNU gettext. * lib/javaexec.h: New file, from GNU gettext. * lib/javaexec.c: New file, from GNU gettext. 2005-01-24 Sergey Poznyakoff * modules/lchown (Depends-on): Remove lchown.h 2005-01-24 Sergey Poznyakoff * m4/sysexits.m4 (gl_SYSEXITS): Reverted logic. SYSEXITS_H must be defined if the header file was not found, in order to provide a replacement. Reported by Todd Vierling 2005-01-24 Sergey Poznyakoff * lib/argp-help.c (hol_entry_help): Avoid using non-constant initializers for struct pentry_state. (__argp_error): Check return value of __asprintf (__argp_failure): Translate error message * lib/argp-parse.c: Removed braces around the expansion of N_() 2005-01-23 Paul Eggert * m4/acl.m4, afs.m4, alloca.m4, argp.m4, assert.m4, atexit.m4, backupfile.m4, base64.m4, bison.m4, c-bs-a.m4, c-stack.m4, c-strtod.m4, calloc.m4, canon-host.m4, canonicalize.m4, clock_time.m4, cloexec.m4, closeout.m4, d-ino.m4, d-type.m4, dirfd.m4, dirname.m4, dos.m4, dup2.m4, error.m4, euidaccess.m4, exclude.m4, exitfail.m4, extensions.m4, fcntl-safer.m4, file-type.m4, fileblocks.m4, filemode.m4, fnmatch.m4, fpending.m4, free.m4, fstypename.m4, fsusage.m4, ftruncate.m4, getaddrinfo.m4, getcwd-path-max.m4, getcwd.m4, getdate.m4, getdomainname.m4, getgroups.m4, gethostname.m4, getline.m4, getndelim2.m4, getnline.m4, getopt.m4, getpagesize.m4, getpass.m4, getsubopt.m4, gettime.m4, gettimeofday.m4, getugroups.m4, getusershell.m4, group-member.m4, hard-locale.m4, hash.m4, host-os.m4, human.m4, idcache.m4, inttostr.m4, isdir.m4, jm-winsz1.m4, jm-winsz2.m4, link-follow.m4, long-options.m4, ls-mntd-fs.m4, lstat.m4, makepath.m4, mathl.m4, md5.m4, memcasecmp.m4, memchr.m4, memcmp.m4, memcoll.m4, memcpy.m4, memmem.m4, memmove.m4, memrchr.m4, memset.m4, mkdir-slash.m4, mkstemp.m4, mktime.m4, modechange.m4, mountlist.m4, nanosleep.m4, obstack.m4, path-concat.m4, pathmax.m4, perl.m4, physmem.m4, poll.m4, posixtm.m4, posixver.m4, putenv.m4, quote.m4, quotearg.m4, readdir.m4, readtokens.m4, readutmp.m4, regex.m4, rename.m4, restrict.m4, rmdir-errno.m4, rmdir.m4, rpmatch.m4, same.m4, savedir.m4, settime.m4, sha1.m4, sig2str.m4, snprintf.m4, sockpfaf.m4, st_dm_mode.m4, st_mtim.m4, stat.m4, stdint.m4, stdio-safer.m4, strchrnul.m4, strdup.m4, strerror.m4, strerror_r.m4, strftime.m4, strndup.m4, strnlen.m4, strsep.m4, strtod.m4, strtoimax.m4, strtok_r.m4, strtol.m4, strtoll.m4, strtoul.m4, strtoull.m4, strtoumax.m4, strverscmp.m4, sysexits.m4, time_r.m4, timegm.m4, timespec.m4, tm_gmtoff.m4, tzset.m4, uint32_t.m4, uintptr_t.m4, unistd-safer.m4, unlink-busy.m4, unlocked-io.m4, uptime.m4, userspec.m4, utimbuf.m4, utime.m4, utimecmp.m4, utimens.m4, utimes-null.m4, vsnprintf.m4, xalloc.m4, xgetcwd.m4, xreadlink.m4, xstrndup.m4, xstrtod.m4, xstrtoimax.m4, xstrtol.m4, xstrtoumax.m4, yesno.m4: Use an all-permissive copyright notice, recommended by RMS. 2005-01-21 Paul Eggert * modules/chdir-long (Depends-on): Remove mempcpy. 2005-01-21 Jim Meyering * lib/openat.h (AT_SYMLINK_NOFOLLOW): Define to 4096, so it's the same value as for Solaris 9. * lib/chdir-long.c (chdir_long): Rewrite to remove limitation on component length. This included changing the parameter to be of type `char *' rather than `char const *'. * lib/chdir-long.h (chdir_long): Update prototype. * lib/openat.c (fdopendir, fstatat): New functions. * lib/openat.h: Include headers required for use of DIR and struct stat. [AT_SYMLINK_NOFOLLOW]: Define. (fdopendir, fstatat): Add prototypes. 2005-01-21 Bruno Haible * modules/classpath: New file. * MODULES.html.sh (Java): Add classpath. 2005-01-21 Bruno Haible * lib/classpath.h: New file, from GNU gettext. * lib/classpath.c: New file, from GNU gettext. 2005-01-20 Simon Josefsson * modules/version-etc-fsf: New file. 2005-01-20 Simon Josefsson * lib/version-etc-fsf.c: New file, with version_etc_copyright. * lib/version-etc.c: Remove version_etc_copyright. * lib/version-etc.h (version_etc_copyright): Use [] instead of * in prototype, suggested by Paul Eggert . 2005-01-20 Simon Josefsson * lib/base64.h (isbase64): Add. * lib/base64.c (isb64): Rename to isbase64, use to_uchar instead of using a unsigned prototype, don't inline. (base64_decode): Use it. 2005-01-20 Paul Eggert * m4/save-cwd.m4 (gl_SAVE_CWD): Remove check for fcntl; we now assume it. 2005-01-20 Paul Eggert * lib/save-cwd.c (save_cwd): Remove code to support the case where fchdir is missing or flaky. 2005-01-20 Paul Eggert * MODULES.html.sh (Command-line arguments): Add version-etc-fsf. 2005-01-19 Paul Eggert * modules/mempcpy (Makefile.am): Remove mention of mempcpy.h; AC_LIBSOURCES now does this. * MODULES.html.sh (Sizes of integer types ): New element, with new ullong_max module. 2005-01-19 Bruno Haible * modules/sh-quote: New file. * MODULES.html.sh (Executing programs): Add sh-quote. 2005-01-19 Bruno Haible * lib/sh-quote.h: New file, from GNU gettext. * lib/sh-quote.c: New file, from GNU gettext. 2005-01-18 Paul Eggert Merge from coreutils. * m4/ullong_max.m4: New file. * m4/jm-macros.m4 (gl_MACROS): Require gl_ULLONG_MAX. (gl_MACROS): Assume localeconv exists. 2005-01-18 Paul Eggert Merge changes from coreutils, as described below in several changelogs dated today. * lib/save-cwd.c: Include "save-cwd.h" before other include files. (O_DIRECTORY): Remove; not needed here, since "." must be a directory. All uses removed. (save_cwd): Use __sgi || __sun, not sun || __sun. __sun is universal on Suns, and we also need to test for IRIX. Revamp code to use 'if' rather than '#if'. Avoid unnecessary comparison of cwd->desc to 0. * lib/utimens.c (futimens): Robustify the previous patch, by checking for known valid error numbers rather than observed invalid ones. 2005-01-18 Paul Eggert * modules/ullong_max: New file. * modules/chdir-long, modules/openat: New files. * modules/save-cwd (Depends-on): Depend on chdir-long. (Makefile.am): Remove lib_SOURCES; now handled by AC_LIBSOURCES. 2005-01-18 Jim Meyering Merge from coreutils. * m4/chdir-long.m4, m4/openat.m4: New files. * m4/save-cwd.m4 (gl_SAVE_CWD): Add AC_LIBSOURCES for save-cwd.c, save-cwd.h. Add AC_LIBOBJ for save-cwd. * m4/chown.m4 (gl_FUNC_CHOWN): When cross-compiling, assume that chown is sane and DOES follow symlinks. Besides, testing 20 different systems found no broken chown implementations. Prompted by a change in rsync's copy of this macro. * m4/jm-macros.m4 (gl_MACROS): Require gl_FUNC_CHDIR_LONG. * m4/lchown.m4 (gl_FUNC_LCHOWN): Use AC_LIBSOURCES. * m4/utimes.m4: Work around tests/touch/empty-file failure on a system (sparc64, Linux-2.4.28, glibc-2.3.3) that didn't honor utimes' NULL-means-set-to-current-time semantics. Remove temporary file immediately, rather than waiting for configure's at-exit trap code to do it. 2005-01-18 Jim Meyering * lib/version-etc.c (version_etc_copyright): Update copyright date. * lib/utimens.c (futimens): Account for the fact that futimes can also fail with errno == ENOSYS or errno == ENOENT. Patch from Dmitry V. Levin. Change the name of the robust chdir function from chdir to chdir_long. * lib/save-cwd.c: Include chdir-long.h rather than chdir.h. (restore_cwd): Use chdir_long, not chdir. * lib/chdir-long.c: Renamed from chdir.c. * lib/chdir-long.h: Renamed from chdir.h. [!defined PATH_MAX]: Define chdir_long to chdir on systems like the Hurd. 2005-01-18 Bruno Haible * m4/allocsa.m4, m4/codeset.m4, m4/copy-file.m4, m4/eaccess.m4: * m4/eealloc.m4, m4/eoverflow.m4, m4/execute.m4, m4/fatal-signal.m4: * m4/findprog.m4, m4/glibc21.m4, m4/iconv.m4, m4/intmax_t.m4: * m4/inttypes_h.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: * m4/linebreak.m4, m4/localcharset.m4, m4/longdouble.m4: * m4/longlong.m4, m4/mbrtowc.m4, m4/mbstate_t.m4, m4/mbswidth.m4: * m4/mkdtemp.m4, m4/pipe.m4, m4/readlink.m4, m4/safe-read.m4: * m4/safe-write.m4, m4/setenv.m4, m4/sig_atomic_t.m4: * m4/signalblocking.m4, m4/signed.m4, m4/size_max.m4, m4/ssize_t.m4: * m4/stdbool.m4, m4/stdint_h.m4, m4/stpcpy.m4, m4/stpncpy.m4: * m4/strcase.m4, m4/strcspn.m4, m4/strpbrk.m4, m4/strstr.m4: * m4/ucs4-utf.m4, m4/uintmax_t.m4, m4/ulonglong.m4, m4/unicodeio.m4: * m4/utf-ucs4.m4, m4/vasnprintf.m4, m4/vasprintf.m4: * m4/wait-process.m4, m4/wchar_t.m4, m4/wint_t.m4, m4/xsize.m4: Use an all-permissive copyright notice, recommended by RMS. 2005-01-18 Bob Proulx * lib/obstack.c [DEFAULT_ALIGNMENT]: Use an intermediate type to simplify offsetof() macro construct to avoid compile failure with native HP-UX 11.0 ANSI C compiler. 2005-01-17 Bruno Haible * lib/stpncpy.c: Remove HAVE_STPNCPY and gnu_stpncpy renaming, redundant because stpncpy.m4 takes care of it. 2005-01-17 Bruno Haible * lib/progreloc.c: Include xalloc.h instead of xmalloc.h. 2005-01-17 Bruno Haible * lib/progreloc.c (xstrdup): Define as strdup if no xmalloc should be used. 2005-01-17 Bruno Haible * lib/fwriteerror.h (fwriteerror): Change specification to include fclose. * lib/fwriteerror.c: Include . (fwriteerror): At the end, close the file stream. Record whether stdout was already closed. 2005-01-17 Bruno Haible * lib/execute.c (environ): Declare if needed. * lib/pipe.c (environ): Likewise. Reported by Michael Schloh von Bennewitz . 2005-01-11 Sergey Poznyakoff * modules/argp: Depend on vsnprintf 2005-01-10 Jim Meyering * modules/closeout (Depends-on): Add atexit. 2005-01-06 Bruno Haible * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Rename stpncpy to gnu_stpncpy here. 2005-01-04 Paul Eggert * lib/human.c (SIZE_MAX, UINTMAX_MAX): Move these conditional definitions to be after all include files, to avoid collisions. Problem reported by Bob Proulx. 2005-01-04 Jim Meyering Changes imported from coreutils. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Rather than using "conftestXXXXXX" as the mkstemp template, use a temporary directory and an 8.3-friendly template to avoid trouble on systems like DJGPP. Reported by Juan M. Guerrero via Stepan Kasal. * m4/(gl_FUNC_MKSTEMP): Include for the declaration of close. Remove the temporary directory right away, rather than waiting for configure's at-exit trap code to do it. Suggestion from Stepan Kasal. 2005-01-01 Simon Josefsson * gnulib-tool: Print #include directives when --import'ing. 2004-12-28 Simon Josefsson * tests/test-base64.c: Include required header files. Remove unused variables. 2004-12-28 Paul Eggert * modules/error (Depends-on): Remove gettext. 2004-12-28 Paul Eggert * lib/error.c [!_LIBC && !ENABLE_NLS]: Do not include "gettext.h"; not needed. This removes a dependency on the gettext module. [defined _LIBC]: Do not include ; not needed. 2004-12-24 Paul Eggert * m4/c-strtod.m4 (gl_C99_STRTOLD): New macro. (gl_C_STRTOD): Use it instead of AC_CHECK_DECLS_ONCE(strtold). 2004-12-24 Paul Eggert * lib/c-strtod.c (STRTOD): Depend on HAVE_C99_STRTOLD, not HAVE_DECL_STRTOLD. 2004-12-23 Paul Eggert * modules/getdate (Depends-on): Remove alloca-opt. 2004-12-23 Paul Eggert * m4/getdate.m4 (gl_GETDATE): Remove AC_FUNC_ALLOCA. 2004-12-23 Paul Eggert * lib/argp-parse.c: Include . (alignof, alignto): New macros. (parser_init): Don't assume that void * is aligned sufficiently for struct option. * lib/getdate.y (YYSTACK_USE_ALLOCA): Define to 0, since there's no need to extend the stack. (YYINITDEPTH): New macro, so that the initial stack isn't overly large. 2004-12-22 Sergey Poznyakoff * lib/argp-parse.c (parser_init): Avoid arithmetics on void pointers. 2004-12-19 Paul Eggert * modules/regex (lib_SOURCES): Remove regex.c, undoing previous (2004-10-24) change. Apparently this was a false alarm. * modules/getdate: Depend on alloca-opt, not alloca. 2004-12-19 Paul Eggert * lib/alloca_.h: Conditionalize on _GNULIB_ALLOCA_H, not _ALLOCA_H. Remove now-obsolete comment about AIX. * lib/getdate.y: Include only if HAVE_ALLOCA. (YYSTACK_USE_ALLOCA): Define to 0 if !HAVE_ALLOCA. (YYMAXDEPTH): New macro. 2004-12-18 Simon Josefsson * modules/alloca: Depend on alloca-opt, instead of duplicating it. 2004-12-18 Bruno Haible * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Also test for sigaction. 2004-12-18 Bruno Haible * lib/fatal-signal.c (fatal_signals): Make non-const. (init_fatal_signals): New function. (uninstall_handlers, install_handlers): Ignore signals that were set to SIG_IGN. (at_fatal_signal): Call init_fatal_signals. (init_fatal_signal_set): Likewise. Ignore signals that were set to SIG_IGN. Reported by Paul Eggert. 2004-12-18 Bruno Haible * doc/alloca.texi: New file. * doc/alloca-opt.texi: New file. 2004-12-17 Jim Meyering * config/install-sh: Use `(exit N); exit N', not `(exit N); exit'. Otherwise, install-sh could exit with improper exit status when exiting via a trapped interrupt. Thanks to a report from Bob Proulx. 2004-12-16 Simon Josefsson * tests/test-base64.c: Add license. 2004-12-15 Stepan Kasal * gnulib-tool (func_emit_lib_Makefile_am): Shorten a long sed command. 2004-12-12 Paul Eggert * modules/getcwd (Files): Add m4/d-ino.m4. Suggested by Mark D. Baushke. 2004-12-08 Paul Eggert * lib/getdate.y (textint): New member "negative". (time_zone_hhmm): New function. Expect 14 shift-reduce conflicts, not 13. (o_colon_minutes): New rule. (time, zone): Use it to add support for +HH:MM, UTC+HH:MM. (yylex): Set the "negative" member of signed numbers. 2004-12-08 Paul Eggert * doc/getdate.texi (Time of day items, Time zone items): Describe new formats +00:00, UTC+00:00. 2004-12-07 Paul Eggert * m4/ls-mntd-fs.m4 (AC_FUNC_GETMNTENT): Fix typo in previous change: spurious "-l"s. Problem reported by Stepan Kasal. 2004-12-06 Paul Eggert * m4/ls-mntd-fs.m4 (AC_FUNC_GETMNTENT): New macro, to work around bug in Autoconf 2.59. Problem reported by Mark D. Baushke. 2004-12-04 Simon Josefsson * modules/getaddrinfo (License): Add LGPL, reported by Yoann Vandoorselaere . 2004-12-04 Paul Eggert Changes imported from coreutils. * m4/hard-locale.m4 (gl_HARD_LOCALE): Assume locale.h and setlocale exist. * m4/human.m4 (gl_HUMAN): Assume locale.h and localeconv exist. 2004-12-04 Paul Eggert Changes imported from coreutils. * lib/hard-locale.c: Assume exists. Include "strdup.h". (GLIBC_VERSION): New macro. (hard_locale): Assume setlocale exists. Rewrite to avoid #ifdef. Use strdup rather than malloc + strcpy. * lib/human.c: Assume exists. (human_readable): Assume localeconv exists. 2004-12-04 Paul Eggert * modules/hard-locale (Depends-on): Add strdup. 2004-12-01 Jakub Jelinek * lib/mktime.c (__mktime_internal): If SEC_REQUESTED != SEC, convert T2, not T. (Imported from libc.) 2004-11-30 Simon Josefsson * modules/restrict (License): Change to LGPL. 2004-11-30 Simon Josefsson * m4/restrict.m4: Add copyright and copying conditions. 2004-11-30 Simon Josefsson * m4/base64.m4: New file. 2004-11-30 Simon Josefsson * MODULES.html.sh (Extra functions based on ANSI C 89): Add base64. * tests/test-base64.c: New file. * modules/base64: New file. 2004-11-30 Paul Eggert * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Define HAVE_PARTLY_WORKING_GETCWD if getcwd is partly working. * m4/readutmp.m4 (gl_READUTMP): Don't check for sys/param.h. 2004-11-30 Paul Eggert * lib/getcwd.c (is_ENAMETOOLONG): New macro. (__getcwd.c): Don't restore errno; glibc doesn't. [HAVE_PARTLY_WORKING_GETCWD && !defined AT_FDCWD]: Try system getcwd first, falling back to our code only if its results look suspicious. Ensure that the resulting buffer is only as large as necessary. * lib/readutmp.c: Include readutmp.h first. Include , since readutmp.h no longer does that. * lib/readutmp.h: Don't include , , ; not needed to establish interface. (errno): Remove decl. (HAVE_STRUCT_XTMP_UT_TYPE): Remove; no longer needed. (UT_TYPE_EQ, UT_TYPE_NOT_DEFINED, UT_TYPE_BOOT_TIME, UT_TYPE_USER_PROCESS, IS_USER_PROCESS): New macros. 2004-11-28 Simon Josefsson * lib/base64.h, base64.c: New file. 2004-11-27 Paul Eggert * lib/getcwd.h: New file, which I forgot to check in on 2004-11-25. 2004-11-26 Paul Eggert * modules/getcwd (Files): Add lib/getcwd.h, m4/getcwd.m4. (Depends-on): Remove pathmax, same. Add mempcpy. (configure.ac): GL_FUNC_GETCWD_PATH_MAX -> gl_FUNC_GETCWD. (Makefile.am): Append getcwd.h to lib_SOURCES. (Include): Add getcwd.h. (Maintainer): Change from Jim Meyering to "all, glibc", since getdate now uses intended-for-glibc code. * modules/xgetcwd (Files): Remove m4/getcwd.m4. (Depends-on): Depend on getcwd. Do not depend on pathmax. 2004-11-25 Paul Eggert Fix problems reported by Scott S. Tinsley for HP-UX 11.11 using HP's ANSI C compiler. * lib/fsusage.c (statvfs) [HAVE_SYS_STATVFS_H]: Remove decl. Declaring int functions causes warnings on some modern systems and shouldn't be needed to compile on ancient ones. * lib/same.c (MIN) [defined MIN]: Don't define, since it's already defined. * lib/getcwd.c: Replace by a copy of glibc/sysdeps/posix/getcwd.c, but with the following changes. (__set_errno): Parenthesize properly. Include . (MIN, MAX, MATCHING_INO): New macros. (__getcwd): Define with prototype, not K&R form. Use heuristics to allocate default buffer on stack if possible. If AT_FDCWD is defined, use openat and fstatat to avoid O(N**2) behavior, and to avoid the PATH_MAX limit when computing ../../../../... Use MATCHING_INO to compare inode number to file. Check for arithmetic overflow in size calculations. Fix bug in reallocation of dot array that caused getcwd to fail on directories nested deeper than 75. Be more careful about saving errno on error. Do not use realloc; use only free+malloc, as this is a bit more flexible and avoids a needless copy operation. Do not inspect st_dev and st_ino for symbolic links; POSIX doesn't specify the latter. Check for closedir errors. Avoid needless casts. Use "#ifdef weak_alias" around weak_alias, to be like other glibc code. The following changes to getcwd.c have effect only when used in gnulib; they have no effect inside glibc proper. (#pragma alloca) [defined _AIX && !defined __GNUC__]: Remove, as alloca isn't used. (alloca, __alloca): Likewise. [!_LIBC]: Include "getcwd.h", "mempcpy.h". Include , , , unconditionally, as gnulib assumes C89 or better. Do not include . (errno) [!defined __GNU_LIBRARY__ && !defined STDC_HEADERS]: Remove no-longer-necessary 'extern int errno' decl; gnulib assumes C89 or better. (NULL) [!defined NULL]: Remove; we assume C89 or better. Include in a way that is compatible with modern Autoconf. (_D_ALLOC_NAMELEN, _D_EXACT_NAMLEN): New macros, if not already defined. Include if _LIBC, not if __GNU_LIBRARY__. Use "_LIBC", not "defined _LIBC", for consistency. (HAVE_MEMPCPY): Remove; no longer needed now that gnulib has a mempcpy module. (__lstat, __closedir, __opendir, __readdir) [!_LIBC]: New macros. (GETCWD_RETURN_TYPE): Remove. All uses replaced by char *. * lib/xgetcwd.c: David MacKenzie's old code was removed, so give credit only to Jim Meyering and adjust the copyright dates. Do not include , , , , , "pathmax.h". Instead, include "xgetcwd.h" (first) and "getcwd.h". (INITIAL_BUFFER_SIZE): Remove. (xgetcwd): Rely on getcwd, since we now depend on a reliable one. 2004-11-25 Paul Eggert * m4/getcwd-path-max.m4 (gl_FUNC_GETCWD_PATH_MAX): Renamed from GL_FUNC_GETCWD_PATH_MAX for consistency. All uses changed. Use the _ONCE methods, for efficiency. Check for fcntl.h. In test program, include and if available. Remove old K&R cruft from test program. Check for common errors in GNU/Linux, OpenBSD, and Solaris. Just set gl_cv_func_getcwd_path_max; don't do AC_LIBOBJ, as that's getcwd.m4's job. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Renamed from AC_FUNC_GETCWD_NULL. All used changed. Change cache variable name accordingly. (gl_FUNC_GETCWD, gl_PREREQ_GETCWD): New macros. Revamp to accommodate new getcwd.c. * m4/jm-macros.m4 (gl_MACROS): Don't require GL_FUNC_GETCWD_PATH_MAX. * m4/prereq.m4 (gl_PREREQ): Add gl_FUNC_MEMPCPY. * m4/xgetcwd.m4 (gl_XGETCWD): Replace with gl_FUNC_GETCWD, since that's all we need now. 2004-11-23 Sergey Poznyakoff * m4/argp.m4 (gl_ARGP): Require gl_GETOPT_SUBSTITUTE unconditionally: argp-parse.c depends on getopt internals, that means we should always use our getopt, to be on the safe side. * m4/getopt.m4 (gl_GETOPT): Check if GETOPT_H is already set, in order not to spoil the result of an eventual previous invocation of gl_GETOPT_SUBSTITUTE. 2004-11-23 Sergey Poznyakoff * lib/getopt_.h: Re-addition of __getopt_argv_const caused redefinition warnings. To avoid them, include the defines in `#if !defined __need_getopt ... #endif'. The only place where __getopt_argv_const is used is in definitions of getopt_long and getopt_long_only below, which are as well protected by `#ifndef __need_getopt'. [defined __GETOPT_PREFIX && !defined __need_getopt]: Undef __need_getopt after including and These headers might have defined it. 2004-11-23 Paul Eggert * m4/utimens.m4 (gl_UTIMENS): Check for futimes function. 2004-11-23 Paul Eggert * lib/utimens.c (__attribute__, ATTRIBUTE_UNUSED): New macros. (futimens): New function, which uses futimes if available. (futimens, utimens): Support timespec==NULL, with same semantics as utime and utimens. * lib/utimens.h (futimens): New decl. 2004-11-23 Jim Meyering * lib/getopt_.h: Remove trailing blanks. 2004-11-23 Jim Meyering * lib/__fpending.c: Add comment. 2004-11-22 Paul Eggert * modules/canonicalize (Depends-on): Add xreadlink. Problem reported by James Youngman. 2004-11-20 Paul Eggert * lib/getopt_.h (__GETOPT_CONCAT, __GETOPT_XCONCAT, __GETOPT_ID): New macros. (getopt, getopt_long, getopt_long_only, optarg, opterr, optind, optopt): Use them instead of invoking ## directly; otherwise, the symbols will be __GETOPT_PREFIXgetopt rather than rpl_getopt. 2004-11-19 Bruno Haible * lib/strtok_r.c: Move comments from here... * lib/strtok_r.h: ... to here. 2004-11-17 Paul Eggert * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Check for buggy calloc implementations that mishandle size_t overflow. 2004-11-17 Paul Eggert * lib/realloc.c (rpl_realloc): Call 'free' if n==0, since realloc might fail. Problem reported by Yoann Vandoorselaere. * lib/calloc.c (rpl_calloc): Defend against buggy calloc implementations that mishandle size_t overflow. 2004-11-16 Paul Eggert * modules/canon-host (Depends-on): Add strdup. 2004-11-16 Paul Eggert * m4/canon-host.m4 (gl_CANON_HOST): Check for getaddrinfo. 2004-11-16 Paul Eggert * lib/canon-host.c: Include "strdup.h". (canon_host): Use getaddrinfo if available, so that IPv6 works. Use strdup instead of malloc/strcpy to duplicate strings. * lib/human.h (LONGEST_HUMAN_READABLE): Add 1 for space before unit. (human_space_before_unit): New constant. * lib/human.c (human_readable): Support it. * lib/xgetcwd.c: Include , for PATH_MAX. (xgetcwd): Set errno correctly when failing. Work around Solaris 9 bug: getcwd sets errno==ERANGE even though the failure is actually due to a PATH_MAX problem. Further getopt changes to make it more likely that glibc will buy the changes back. * lib/getopt.c (POSIXLY_CORRECT): New constant. (getopt): Use it, so to preserve glibc semantic * lib/getopt1.c (getopt_long, getopt_long_only): Arg is char * const * when compiling for libc. * lib/getopt_.h (__getopt_argv_const): Bring it back. (getopt_long, getopt_long_only): Use it. * lib/getopt.c (_getopt_initialize, _getopt_internal_r, _getopt_internal): New arg POSIXLY_CORRECT. All callers changed. (getopt): Argv is now char * const *, as per standard. (_getopt_internal_r, _getopt_internal): Argv is now char **, not char *__getopt_argv_const *. * lib/getopt1.c (getopt_long, _getopt_long_r, getopt_long_only, _getopt_long_only_r): Likewise. * lib/getopt_.h (getopt, getopt_long, geopt_long_only): Likewise. * lib/getopt_int.h (_getopt_internal, _getopt_internal_r, _getopt_long_r, _getopt_long_only_r): Likewise. * lib/getopt_.h (__getopt_argv_const): Remove. (getopt): Argv is now char * const *, as per standard. * lib/getdate.y (tORDINAL): New token. (day, relunit): Allow it for relative times. (relative_time_table): Use tORDINAL for ordinals. 2004-11-16 Paul Eggert * doc/getdate.texi (General date syntax): "next" is 1, not 2. Document that "second" isn't allowed as an ordinal number. 2004-11-16 Jim Meyering * modules/closeout (Depends-on): Add fpending. 2004-11-15 Jim Meyering * lib/closeout.c: Include "__fpending.h" once again. Include . (close_stdout): Don't fail just because stdout was closed initially, since some programs don't write to stdout in the normal course of operation (other than --version and --help), and we don't want this function to make e.g. `touch file >&-' fail. But do fail if it was closed and someone has tried to write to it. E.g., `printf foo >&-' must fail. 2004-11-13 Jim Meyering * m4/jm-macros.m4: Do require gl_FUNC_FPENDING. 2004-11-12 Simon Josefsson * config/srclist.txt: Add strtok_r.c, glibc bought our changes, but a small doc fix is still pending. 2004-11-11 Simon Josefsson * modules/strtok_r: New file. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add strtok_r. 2004-11-11 Simon Josefsson * m4/strtok_r.m4: New file. * m4/getopt.m4: Replace opterr. 2004-11-11 Simon Josefsson * lib/strtok_r.h, strtok_r.c: New file. 2004-11-11 Paul Eggert * m4/getopt.m4 (gl_GETOPT_SUBSTITUTE): Define __GETOPT_PREFIX instead of replacing opterr, getopt, etc. This should handle the powerpc-apple-darwin5.5 problem recently noted by Simon Josefsson. 2004-11-11 Paul Eggert * lib/getopt_.h (__getopt_argv_const): New macro, to be used so that we can stop lying to compilers about the constness of argv when we are compiled outside glibc. (getopt, getopt_long, getopt_long_only): Use it. * lib/getopt.c (_getopt_initialize, _getopt_internal_r, _getopt_internal, getopt): Likewise. * lib/getopt1.c (getopt_long, _getopt_long_r, getopt_long_only, _getopt_long_only_r): Likewise. * lib/getopt_int.h (_getopt_internal, _getopt_internal_r, _getopt_long_r, _getopt_long_only_r): Likewise. * lib/getopt_.h [defined __GETOPT_PREFIX && !defined __need_getopt]: Include and , and if available. Then rename getopt to __GETOPT_PREFIX##getopt, and so forth for the other external symbols. (getopt) [!defined __GNU_LIBRARY]: Use prototype, not old-style declaration, since the above renaming now works around collisions. 2004-11-11 Jim Meyering * lib/linebreak.c: Remove trailing blanks. * lib/alloca_.h: Likewise. * lib/acosl.c: Likewise. * lib/euidaccess.c: Likewise. * lib/allocsa.h: Likewise. 2004-11-10 Simon Josefsson * m4/getaddrinfo.m4: New file. 2004-11-10 Simon Josefsson * lib/getaddrinfo.h, lib/getaddrinfo.c: New files. 2004-11-10 Simon Josefsson * MODULES.html.sh (Support for systems lacking POSIX:2001): Add getaddrinfo. * modules/getaddrinfo: New file. 2004-11-10 Paul Eggert * m4/prereq.m4 (gl_PREREQ): Require gt_FUNC_SETENV. 2004-11-10 Paul Eggert * lib/mktime.c (SHR): New macro, which is a portable substitute for >> that should work even on Crays. (TIME_T_MIDPOINT, ydhms_diff, __mktime_internal): Use it. Problem reported by Mark D. Baushke in . * lib/getdate.y (SHR): Likewise. (tm_diff): Use it. * lib/strftime.c (SHR): Likewise. (tm_diff): Use it. * lib/quotearg.c (struct quoting_options): Use unsigned int for quote_these_too, so that right shifts are well defined. All uses changed. 2004-11-10 Jim Meyering Ensure that no close failure goes unreported. * lib/closeout.c (close_stdout): Always close stdout. I.e., don't return early when it seems there's nothing to flush. Don't include __fpending.h. 2004-11-10 Jim Meyering * modules/closeout (Depends-on): Remove fpending. 2004-11-10 Jim Meyering * m4/jm-macros.m4 (gl_MACROS): Don't require gl_FUNC_FPENDING. 2004-11-09 Paul Eggert * m4/strftime.m4 (_gl_STRFTIME_PREREQS): Remove. Move its body to gl_FUNC_STRFTIME. (gl_FUNC_STRFTIME): Use AC_CHECK_FUNCS_ONCE and AC_CHECK_HEADERS_ONCE and AC_REQUIRE when possible, to avoid duplicate checks. Check for . 2004-11-09 Paul Eggert * lib/strftime.c (DO_MULTIBYTE): Check for wchar.h, too. 2004-11-09 Bruno Haible * m4/sockpfaf.m4: New file. 2004-11-05 Bruno Haible * lib/readlink.c: Include stddef.h, needed for size_t on Woe32. Reported by Mark D. Baushke . 2004-11-04 Bruno Haible 2004-09-11 Bruno Haible * allocsa.valgrind: New file. 2004-02-06 Bruno Haible * allocsa.h (sa_alignof): Define differently with HP-UX cc, to avoid a bug of this cc on HP-UX 10.20 dealing with enums. Reported by Christopher Seip . 2004-11-04 Bruno Haible * modules/allocsa (Files): Add lib/allocsa.valgrind. (Makefile.am): Distribute it. 2004-11-03 Paul Eggert * lib/xreadlink.c (xreadlink): AIX and HP-UX readlink return -1 with errno == ERANGE if the buffer is too small. Problem reported by Mark D. Baushke. 2004-11-03 Albert Chin Paul Eggert * m4/uint32_t.m4 (gl_AC_TYPE_UINT32_T): When determining uint32_t equivalent, substitute $ac_type for equivalent type rather than blindly using uint32_t *always* which won't work if uint32_t is not available. Define _UINT32_T to work around typedef of uint32_t if , , or used on Solaris 2.5.1. 2004-11-02 Paul Eggert * m4/jm-macros.m4: Sync from coreutils. (gl_MACROS): Check for mbrlen, for pathchk. (gl_CHECK_ALL_TYPES): Require AC_TYPE_MBSTATE_T, for pathchk. 2004-11-02 Paul Eggert * lib/xreadlink.c (MAXSIZE): New macro. (xreadlink): Use it instead of SSIZE_MAX. Ensure initial buffer size does not exceed MAXSIZE. Avoid cast. As suggested by Mark D. Baushke in , if readlink fails with buffer size just under MAXSIZE, try again with MAXSIZE. 2004-11-02 Paul Eggert * config/srclist.txt: Add mktime.c; glibc bought all our changes. 2004-11-02 Derek R. Price and Paul Eggert * lib/getdate.y [!TEST]: Include , since we use sprintf now. (get_date): Overparenthesize to avoid GCC warning. 2004-11-02 Bruno Haible * m4/setenv.m4 (gt_FUNC_SETENV): Define VOID_UNSETENV if unsetenv() returns void. 2004-11-02 Bruno Haible * lib/setenv.h (unsetenv): Define as a macro if the system's unsetenv() function returns void. 2004-11-01 Paul Eggert * m4/getpass.m4 (gl_PREREQ_GETPASS): Check for declarations of fflush_unlocked, flockfile, funlockfile, funlockfile, fputs_unlocked, putc_unlocked. 2004-11-01 Paul Eggert * lib/getpass.c (fflush_unlocked, flockfile, funlockfile) (funlockfile, fputs_unlocked, putc_unlocked): Don't define if already declared. 2004-10-29 Paul Eggert * modules/getdate (Files): Add doc/getdate.texi. (Depends-on): Add setenv, xalloc. 2004-10-29 Paul Eggert * lib/getdate.y: Add support for TZ="foo" within a date string. Fix some bugs near time_t boundaries. Reject dates with out-of-range components, e.g., "Sept 31". Include , "setenv.h", "xalloc.h". (ISDIGIT_LOCALE): Remove; unused. Note that the TZ and time functions used here are not reentrant. (mktime_ok, get_tz): New functions. (TZBUFSIZE): New constant. (get_date): Parse leading TZ="foo". Reject out-of-range components;. This requires that we sometimes generate our own TZ="XXX..." setting. 2004-10-29 Paul Eggert * doc/getdate.texi: New file, from coreutils with modifications for the new TZ parsing. 2004-10-27 Derek R. Price * lib/mktime.c (not_equal_tm): Remove redundant check. 2004-10-24 Paul Eggert * modules/regex (lib_SOURCES): Add regex.c. Reported by James Youngman in . 2004-10-24 Paul Eggert * lib/getdate.y: Use Bison 1.875 features, and some minor code cleanups. This change does not affect semantics. Don't include ; no longer needed. Don't include unlocked-io.h; only the "#if TEST" code uses stdio, and performance isn't crucial there. (PC, YYLEX_PARAM, YYPARSE_PARAM): Remove; replaced by Bison 1.875 features as described below. All uses of "PC." replaced by "pc->". (YYSTYPE): Add a forward declaration. (yylex, yyerror): Use full prototypes in forward decls. Use "%pure-parser" rather than obsolescent "%pure_parser". Use %parse-param and %lex-param instead of obsolescent YYPARSE_PARAM and YYLEX_PARAM. (meridian_table, month_and_day_table, time_units_table, relative_time_table, time_zone_table, military_table, lookup_zone, lookup_word, get_date): Use NULL instead of 0 where appropriate. (to_hour): Avoid abort (), to avoid a dependency on stdlib.h. (yyerror, yylex): Now accepts parser_control * arg. (main) [TEST]: Use '\0' rather than 0 for char. 2004-10-22 Paul Eggert * m4/getpagesize.m4 (gl_GETPAGESIZE): Check for . 2004-10-22 Paul Eggert * lib/getpagesize.c (getpagesize): Don't assume exists. It's now the caller's responsibility to handle the case where !HAVE_GETPAGESIZE && !defined getpagesize. * lib/mktime.c (leapyear): Arg is long int, not int. 2004-10-18 Paul Eggert * lib/argp-fs-xinl.c, argp-xinl.c: Update from glibc. 2004-10-17 Paul Eggert * gnulib-tool (func_emit_lib_Makefile_am): Fix typo: a $ was missing. Problem reported by James Youngman. 2004-10-16 Simon Josefsson * gnulib-tool: Fix comments. Fix parse problem. (func_emit_lib_Makefile_am): Don't hard code a in libgl_a_SOURCES. 2004-10-15 Paul Eggert * m4/getopt.m4 (gl_GETOPT): Detect and reject the incompatible BSD implementation of getopt_long. Problem reported by Alexander Taler in: http://lists.gnu.org/r/bug-gnulib/2004-10/msg00103.html 2004-10-15 Bruno Haible * gnulib-tool: Untabify. Initialize supplied_libname. (func_usage): More homogenous output. (func_modules_transitive_closure, func_modules_to_filelist, func_emit_lib_Makefile_am): New functions. (func_import): New function, extracted from big case statement. Use func_get_license, func_modules_transitive_closure, func_modules_to_filelist, func_emit_lib_Makefile_am. Initialize opt_lgpl. Don't use test -a, as it's not portable. (func_create_testdir): Use func_modules_transitive_closure, func_modules_to_filelist, func_emit_lib_Makefile_am. 2004-10-15 Bruno Haible * gnulib-tool (func_import): Let gl_INIT define LTALLOCA when needed. 2004-10-15 Bruno Haible * gnulib-tool (func_emit_lib_Makefile_am): Add markers to separate the portions belonging to each module. Suggested by Derek Robert Price . 2004-10-12 Simon Josefsson * lib/getpass.c (fflush_unlocked, flockfile, funlockfile) (fputs_unlocked, putc_unlocked) [!_LIBCS && !USE_UNLOCKED_IO]: Map to real functions. 2004-10-11 Yoann Vandoorselaere * modules/vsnprintf: New file. 2004-10-11 Yoann Vandoorselaere * m4/vsnprintf.m4: New file. 2004-10-11 Yoann Vandoorselaere * lib/vsnprintf.h: New file. * lib/vsnprintf.c: New file. 2004-10-11 Bruno Haible * MODULES.html.sh (Support for systems lacking ISO C 99): Add vsnprintf. 2004-10-10 Paul Eggert * config/srclistvars.sh: Add GNUSTANDARDS (for eggert only). 2004-10-07 Bruno Haible * lib/snprintf.c (snprintf): Avoid a memory allocation if the result fits into the provided buffer. 2004-10-06 Paul Eggert * lib/diacrit.c, diacrit.h: Add GPL notice. * lib/atanl.c, logl.c: Add GPL notice, to match glibc's added LGPL notice. * lib/atanl.c (atanl): Keep the code as similar to glibc as possible. * lib/logl.c (logl): Keep the code as similar to glibc as possible. This avoids a potential constant-folding bug. 2004-10-05 Bruno Haible * m4/strsep.m4 (gl_FUNC_STRSEP): Require AC_GNU_SOURCE. Don't check for the declaration of strsep. 2004-10-05 Bruno Haible * lib/strsep.h: Don't declare strsep() if HAVE_STRSEP. 2004-10-04 Simon Josefsson * modules/memmem: New file. * tests/test-memmem.c: New file. * MODULES.html.sh (Extra functions based on ANSI C 89): Add memmem. 2004-10-04 Simon Josefsson * m4/memmem.m4: New file. 2004-10-04 Simon Josefsson * lib/memmem.h: New file. * lib/memmem.c: New file, taken from glibc. 2004-10-04 Simon Josefsson * lib/error.c, md5.c, regex.c: Use '#if USE_UNLOCKED_IO' instead of '#ifdef USE_UNLOCKED_IO'. 2004-10-04 Simon Josefsson * config/srclist.txt: Add memmem from glibc. 2004-10-04 Paul Eggert * modules/xalloc (Files, Makefile.am): Remove xstrdup.c. * modules/argmatch, modules/argp, modules/closeout, modules/error, modules/exclude, modules/getdate, modules/getline, modules/getndelim2, modules/getpass, modules/getpass-gnu, modules/getusershell, modules/linebuffer, modules/md5, modules/mountlist, modules/posixtm, modules/readtokens, modules/readutmp, modules/regex, modules/sha1, modules/version-etc, modules/yesno: Remove dependency on unlocked-io. 2004-10-04 Paul Eggert * m4/xalloc.m4 (gl_PREREQ_XSTRDUP): Remove. All uses removed. * m4/unlocked-io.m4: Add copyright notice. (gl_FUNC_GLIBC_UNLOCKED_IO): Define USE_UNLOCKED_IO. 2004-10-04 Paul Eggert * lib/xalloc.h (xmemdup): Renamed from xclone. All uses changed. * lib/xmalloc.c (xmemdup): Likewise. * lib/xalloc.h (CCLONE, CLONE, NEW, XCALLOC, XMALLOC, XREALLOC, XFREE): Remove these long-obsolescent macros. * lib/xmalloc.c (xstrdup): Implementation moved here from xstrdup.c * lib/xstrdup.c: Remove. * lib/regex.c (re_comp): Cast gettext return value to char *, Problem reported by Martin Neitzel via Mark D. Baushke. 2004-10-04 Paul Eggert * lib/argmatch.c, closeout.c, error.c, exclude.c, getdate.y, getndelim2.c, getpass.c, getusershell.c, linebuffer.c, md5.c, mountlist.c, posixtm.c, readtokens.c, readutmp.c, regex.c, sha1.c, version-etc.c, yesno.c: Include "unlocked-io.h" only if USE_UNLOCKED_IO. * lib/unlocked-io.h: Don't worry about USE_UNLOCKED_IO; that's now the includer's responsibility. Sync from coreutils. * lib/modechange.c (mode_compile): Don't decrement a pointer that points to the start of a string, as the C Standard says the resulting behavior is undefined. * lib/backupfile.h (enum backuptype): Rename none -> no_backups, simple -> simple_backups, numbered_existing -> numbered_existing_backups, numbered -> numbered_backups to avoid shadowing problems. All uses changed. * lib/argmatch.c (enum backuptype) [defined TEST]: Likewise. * lib/backupfile.c (check_extension, numbered_backup): Rename locals to avoid shadowing 'basename'. * lib/backupfile.h (VALID_BACKUP_TYPE): Don't evaluate arg more than once. * lib/.cppi-disable: Add getopt_.h, getopt_int.h. * lib/.cvsignore: Add getopt.h. 2004-10-04 Bruno Haible * modules/README: New file. * gnulib-tool (func_all_modules, func_verify_module): modules/README is not a module. 2004-10-02 Jim Meyering * lib/dirfd.h, getpagesize.h: Add copyright notice. 2004-10-01 Yoann Vandoorselaere * modules/strsep: New file. 2004-10-01 Yoann Vandoorselaere * m4/strsep.m4: New file. 2004-10-01 Yoann Vandoorselaere * lib/strsep.h: New file. * lib/strsep.c: New file. 2004-10-01 Simon Josefsson * lib/snprintf.c (snprintf): Handle size==0. 2004-10-01 Simon Josefsson Bruno Haible * lib/snprintf.c: Include , , . (snprintf): Declare 'args'. 2004-10-01 Paul Eggert * lib/snprintf.c: Remove comments as to why each header is needed. 2004-10-01 Bruno Haible * MODULES.html.sh: Add strsep. 2004-09-30 Simon Josefsson * modules/snprintf: New file. 2004-09-30 Simon Josefsson * m4/snprintf.m4: New file. 2004-09-30 Simon Josefsson * lib/snprintf.h, lib/snprintf.c: New files. 2004-09-30 Sergey Poznyakoff * lib/argp-help.c (canon_doc_option): Fixed coredump if *name==NULL (hol_entry_help): Never translate an empty string. Do not translate option tag (opt->name) if OPTION_NO_TRANS is set * lib/argp.h (OPTION_NO_TRANS): New option. 2004-09-30 Paul Eggert * modules/argp (Maintainer): Replace Simon Josefsson by Sergey Poznyakoff. 2004-09-30 Paul Eggert * config/srclist.txt: Comment-out argp/argp.h, until we get the argp changes merged back into glibc. 2004-09-30 Paul Eggert * MODULES.html.sh (Support for systems lacking ISO C 99): Add snprintf. 2004-09-29 Oskar Liljeblad * lib/xvasprintf.c: Include xalloc.h. (xvasprintf): Use xalloc_die, not xmalloc_die. 2004-09-29 Bruno Haible * modules/alloca-opt: New file, derived from modules/alloca. * modules/allocsa: Depend on alloca-opt instead of alloca. * modules/setenv: Likewise. * modules/vasnprintf: Likewise. * MODULES.html.sh: Add alloca-opt. 2004-09-28 Simon Josefsson * gnulib-tool: New parameter --lgpl, to asseert that modules are LGPL, and to replace license template from GPL to LGPL. 2004-09-28 Paul Eggert * modules/dummy: Change license to LGPL. 2004-09-28 Paul Eggert * lib/dummy.c: Change copyright notice to FSF, and license to GPL. 2004-09-24 Simon Josefsson * modules/minmax (License): Change from GPL to LGPL. 2004-09-23 Simon Josefsson * gnulib-tool (--import): Typo. 2004-09-23 Simon Josefsson * gnulib-tool (--import): Make sure *.m4 end up in m4/ by default. 2004-09-22 Bruno Haible * modules/*: Add 'License' field. * gnulib-tool: Accept --extract-license option. (func_get_license): New function. 2004-09-21 Bruno Haible * modules/vasnprintf (Files): Add m4/stdint_h.m4, m4/inttypes_h.m4. Reported by Simon Josefsson. 2004-09-20 Paul Eggert * modules/inttostr (Files): Add m4/longlong.m4, since it uses gl_AC_TYPE_LONG_LONG. 2004-09-20 Paul Eggert * config/srclist.txt: Add getsubopt.c, since libc bought our changes. 2004-09-18 Simon Josefsson and Paul Eggert * gnulib-tool: Replace various ad-hoc automake/autoconf/aclocal calls with autoreconf. Define GL_LIB. 2004-09-14 Karl Berry * config/srclist.txt: unsync setenv.c, sigh. 2004-09-13 Paul Eggert * lib/argp-pvh.c (argp_program_version_hook): Provide initial value. Problem reported by Bruno Haible in: http://lists.gnu.org/r/bug-tar/2004-09/msg00023.html 2004-09-13 Paul Eggert * config/srclist.txt: Comment out argp-pvh.c. 2004-09-11 Paul Eggert * lib/mempcpy.h: Wrap the entire include file inside #ifndef mempcpy, in case some system header has #define'd it. Problem reported by Soeren D. Schulze in . 2004-09-09 Karl Berry * regex.[ch]: delete from the root. These were supposed to be synced with emacs cvs, but this has not happened for about a year, and anyway nothing else uses emacs regex.[ch]. bug-gnulib mail from Jeff Bailey, 9 Sep 2004 15:49:24 -0700. lib/regex[.ch] is untouched. 2004-09-09 Bruno Haible * modules/vasnprintf (Files): Add m4/eoverflow.m4. 2004-09-09 Bruno Haible * m4/eoverflow.m4: New file, taken from GNU libiconv eilseq.m4 with modifications. * m4/vasnprintf.m4 (gl_FUNC_VASNPRINTF): Require gl_EOVERFLOW. 2004-09-08 Oskar Liljeblad * modules/xvasprintf: New file. * MODULES.html.sh (Extra functions based on ANSI C 89): Add vasprintf. 2004-09-08 Oskar Liljeblad * lib/xvasprintf.h: New file. * lib/xvasprintf.c: New file. * lib/xasprintf.c: New file. 2004-09-08 Bruno Haible * m4/stdint.m4: New file, taken from GNU clisp with modifications. 2004-09-08 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Signal EOVERFLOW if the resulting length is > INT_MAX. * lib/vasprintf.c (vasprintf): Don't test for length > INT_MAX any more. 2004-09-08 Bruno Haible * lib/stdint_.h: New file, taken from GNU clisp. 2004-09-08 Bruno Haible Oskar Liljeblad * modules/stdint: New file. * MODULES.html.sh (Support for systems lacking ISO C 99): Add stdint. 2004-08-19 Paul Eggert Import from coreutils. * lib/userspec.c: Don't use , so that we don't use alloca on strings on unbounded length. alloca's performance benefits aren't that important here. (V_STRDUP): Remove. (parse_with_separator): New function, with most of the internals of the old parse_user_spec. Allow user to omit both user and group, for compatibility with FreeBSD. Clone only the user name, not the entire spec. Do not set *uid, *gid unless entirely successful. Avoid memory leak in some failing cases. Fix regression for USER.GROUP reported by Dmitry V. Levin in (parse_user_spec): Rewrite to use parse_with_separator. 2004-08-19 Paul Eggert * modules/userspec: Don't depend on alloca. 2004-08-19 Paul Eggert * m4/userspec.m4 (gl_USERSPEC): Don't require AC_FUNC_ALLOCA. 2004-08-17 Paul Eggert * MODULES.html.sh: Add xalloc-die, c-strtod, c-strtold, raise, readtokens0, getcwd, fcntl-safer, canonicalize, cycle-check, utimecmp, utimens, xnanosleep. Rename sha to sha1. 2004-08-16 Simon Josefsson * gnulib-tool: Use sed instead of autoconf --trace, inspired by libtoolize behaviour by "Gary V. Vaughan" . Add --dry-run for --import. Let user provided command line parameters override configure.ac settings. 2004-08-12 Simon Josefsson * m4/getopt.m4 (gl_GETOPT_SUBSTITUTE): New macro, as discussed with Paul Eggert in threads rooted at and . Before, the test was empty, and relied on ELIDE_CODE in source code.) (gl_PREREQ_GETOPT): New macro. (gl_GETOPT): Use them. 2004-08-12 Simon Josefsson * lib/getopt.c, getopt1.c: Remove ELIDE_CODE hack. * lib/getopt_.h: Renamed from getopt.h. 2004-08-12 Simon Josefsson * gnulib-tool: Add --source-base, --m4-base, --libtool options. Change default library name from libfoo to libgnu. Now, if you have a configure.ac that says: gl_SOURCE_BASE(gl) gl_M4_BASE(gl/m4) gl_MODULES(error getopt etcetera) gl_INIT you can import all you need by running: ../gnulib/gnulib-tool --import * modules/getopt (Files): Rename getopt.h to getopt_.h. (Makefile.am): Rewrite, use logic from argz. (Include): Use instead of "getopt.h". 2004-08-12 Paul Eggert * modules/argp (Files): Add m4/unlocked-io.m4. (Depends-on): Add extensions. 2004-08-12 Paul Eggert * m4/argp.m4 (gl_ARGP): Do not check for argp.h or argp_parse; nobody uses HAVE_ARGP_H or HAVE_ARGP_PARSE. Require gl_FUNC_GLIBC_UNLOCKED_IO, gl_USE_SYSTEM_EXTENSIONS. Check for program_invocation_name, program_invocation_short_name, flockfile, funlockfile, features.h, _getopt_long_only_r. 2004-08-12 Paul Eggert * lib/argp-help.c, argp-parse.c: Use "gettext.h" instead of its complicated substitute. * lib/argp-help.c: Include , for program_invocation_short_name and program_invocation_name. (__argp_basename) [!_LIBC]: Remove; the only use was replaced by its body. (__argp_short_program_name): Change condition from !defined __argp_short_program_name to ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME), to match argp-namefrob.h. (__argp_failure): Don't assume strerror_r returns char *. * lib/argp-parse.c (N_): Define unconditionally. (argp_default_options): Fill out initializers with 0 to avoid gcc warnings. 2004-08-12 Paul Eggert * config/srclist.txt: Remove getopt.c, getopt.h (renamed to getopt_.h), getopt1.c. 2004-08-11 Paul Eggert Merge from coreutils. * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for wmemchr and wmemcpy. * m4/obstack.m4 (gl_PREREQ_OBSTACK): Require gl_AC_HEADER_INTTYPES_H, gl_AC_HEADER_STDINT_H, gl_AC_TYPE_UINTMAX_T. 2004-08-11 Paul Eggert Merge from coreutils. * lib/fnmatch.c (WIDE_CHAR_SUPPORT): Don't set to 1 if missing wmemchr or wmemcpy. Problem reported by Robert Dahlem for Reliant Unix 5.43. * lib/obstack.c: Include and if available. (union fooround): Use uintmax_t, not long int. The rest is a merge from libc: [defined _LIBC]: Include . (_obstack) [defined _LIBC]: Remove after 2.3.4. * lib/settime.c (settime): Recode to avoid warning with Sun Forte C 6U2. * lib/strverscmp.c: Convert to UTF-8. 2004-08-11 Paul Eggert * modules/obstack (Files): Add m4/inttypes_h.m4, m4/stdint_h.m4, m4/uintmax_t.m4. 2004-08-09 Paul Eggert * modules/xalloc-die: New file. * modules/xalloc: Remove dependencies on error, gettext, exitfail. * modules/md5 (Files): Add m4/uint32_t.m4. * modules/sha1: Renamed from modules/sha. (Files): Rename lib/sha.h to lib/sha1.h. Rename lib/sha.c to lib/sha1.c. Rename m4/sha.m4 to m4/sha1.m4. (lib_SOURCES): Likewise. (configure.ac): Rename gl_SHA to gl_SHA1. (Include): sha.h -> sha1.h. 2004-08-09 Paul Eggert * m4/uint32_t.m4, m4/uintptr_t.m4: New files. * m4/sha1.m4: Renamed from sha.m4. (gl_SHA1): Renamed from gl_SHA. All uses changed. 2004-08-09 Paul Eggert * lib/obstack.h (obstack_empty_p): Don't assume that chunk->contents is suitably aligned. * lib/obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk): Likewise. Problem reported by Benno in . * lib/chown.c (rpl_chown): Work even if the file is writeable but not readable. This could be improved further but it'd take some work. 2004-08-08 Simon Josefsson * modules/xgethostname (Depends-on): Remove exit and error (not used). * modules/getpass-gnu: Add getpass.h. (Depends-on): Add stdbool. * modules/getpass: Add getpass.h. 2004-08-08 Simon Josefsson * m4/getpass.m4 (gl_FUNC_GETPASS, gl_FUNC_GETPASS_GNU): Check getpass declaration. 2004-08-08 Simon Josefsson * lib/xgethostname.c: Don't include error.h (not used). * lib/getpass.h: Add. * lib/getpass.c: Include getpass.h first. 2004-08-08 Paul Eggert * lib/xalloc-die.c: New file. * lib/xalloc.h (xalloc_fail_func, xalloc_msg_memory_exhausted): Remove. All uses removed. * lib/xmalloc.c (xalloc_fail_func, xalloc_msg_memory_exhausted): Likewise. Move inclusions of gettext.h, error.h, exitfail.h to xalloc-die.c. (_, N_, xalloc_die): Move to xalloc-die.c. * lib/userspec.c (parse_user_spaec): Use xstrdup rather than strdup, so that we needn't mess with xalloc_msg_memory_exhausted. * lib/sha1.h: Renamed from sha.h. (SHA1_H): Renamed from _SHA_H. (sha1_ctx): Renamed from sha_ctx. (sha1_init_ctx): Renamed from sha_init_ctx. (sha1_process_block): Renamed from sha_process_block. (sha1_process_bytes): Renamed from sha_process_bytes. (sha1_finish_ctx): Renamed from sha_finish_ctx. (sha1_read_ctx): Renamed from sha_read_ctx. (sha1_stream): Renamed from sha_stream. (sha1_buffer): Renamed from sha_buffer. * lib/sha1.c: Likewise; renamed from sha.c. Do not include . Include rather than . 2004-08-08 Bruno Haible * lib/pathname.h (FILE_SYSTEM_PREFIX_LEN): Renamed from FILESYSTEM_PREFIX_LEN. * lib/progreloc.c: Likewise. * lib/concatpath.c (concatenated_pathname): Use FILE_SYSTEM_PREFIX_LEN. 2004-08-06 Simon Josefsson * modules/progname (Depends-on): Don't depend on stdbool. 2004-08-06 Simon Josefsson * modules/getsubopt: New file. * MODULES.html.sh (Support for systems lacking POSIX:2001): Add getsubopt. 2004-08-06 Paul Eggert More merge from coreutils. * m4/utimens.m4, m4/utimecmp.m4: New files. * m4/backupfile.m4, euidacces.m4, acl.m4, afs.m4, calloc.m4, dirfd.m4, fsusage.m4, jm-macros.m4, ls-mntd-fs.m4, md5.m4, mountlist.m4, prereq.m4, sha.m4: Import changes from coreutils. 2004-08-06 Paul Eggert More merge from coreutils. * modules/raise, modules/readtokens0, modules/utimens: * modules/utimecmp, module/xnanosleep: New files. * modules/strftime: Add lib/strftime.h. Change include from to "strftime.h". * modules/yesno: Add lib/yesno.h. * modules/backupfile: Remove lib/addext.c. * modules/euidaccess: Add stat-macros.h. * modules/canonicalize, modules/euidaccess, modules/filemode, modules/lchown, modules/makepath, modules/rmdir, modules/stat: Likewise. 2004-08-06 Paul Eggert Merge from tar. * lib/argp-help.c (make_hol, hol_append): Don't assume that SIZE_MAX is a valid preprocessor constant. (__argp_basename): Change from "#ifndef _LIBC" to "#ifndef __argp_short_program_name", so that we don't compile these functions for tar. More merges from coreutils. * lib/raise.c, lib/readtokens0.h, lib/readtokens0.c, lib/strftime.h: * lib/utimens.h, lib/utimens.c, lib/utimecmp.h, lib/utimecmp.c: * lib/xnanosleep.h, lib/xnanosleep.c, lib/yesno.h: New files. * lib/addext.c: Remove; no longer needed. * lib/yesno.c, lib/argmatch.h, lib/argmatch.c, lib/backupfile.h, lib/backupfile.c, lib/euidaccess.c, lib/filemode.c, lib/closeout.c, lib/dup2.c, lib/exclude.c, lib/fileblocks.c, lib/filemode.c, lib/fnmatch.c, lib/fnmtahc_loop.c, lib/fopen-safer.c, lib/fsusage.c, lib/fsusage.h, lib/ftruncate.c, lib/full-write.c, lib/getdate.y, lib/getloadavg.c, lib/getugroups.c, lib/hard-locale.c, lib/hard-locale.h, lib/hash.c, lib/human.c, lib/human.h, lib/lchown.c, lib/lchown.h, lib/makepath.c, lib/makepath.h, lib/md5.c, lib/md5.h, lib/memchr.c, lib/memcoll.c, lib/memrchr.c, lib/modechange.c, lib/modechange.h, lib/mountlist.c, lib/mountlist.h, lib/nanosleep.c, lib/posixtm.c, lib/putenv.c, quotearg.c, lib/quotearg.h, lib/readtokens.c, lib/readutmp.c, lib/readutmp.h, lib/rmdir.c, lib/safe-read.c, lib/save-cwd.c, lib/savedir.c, lib/setenv.c, lib/sig2str.c, lib/stat.c, lib/strtoimax.c, lib/strverscmp.c, lib/userspec.c, lib/utime.c, lib/version-etc.c., lib/xgethostname.c, lib/xmemcoll.c, lib/xreadlink.c, lib/xstrtod.c, lib/xstrtod.h, lib/xstrtoimax.c, lib/xstrtol.c, lib/xstrtol.h, lib/xstrtoumax.c: Import changes from coreutils. 2004-08-05 Simon Josefsson * m4/strdup.m4: Always run gl_PREREQ_STRDUP, since strdup.h need it. 2004-08-05 Simon Josefsson * m4/getsubopt.m4: New file. 2004-08-05 Paul Eggert Merge from coreutils. * m4/c-strtod.m4, m4/canonicalize.m4, m4/fcntl-safer.m4: * m4/getcwd-path-max.m4: New files. * m4/dos.m4 (gl_AC_DOS): filesystem -> file system renaming. FILESYSTEM_PREFIX_LEN -> FILE_SYSTEM_PREFIX_LEN. FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX -> FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX. FILESYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR -> FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR. * m4/path-concat.m4 (gl_PATH_CONCAT): Don't require gl_AC_DOS, the prerequisite modules now handle the DOS stuff. Don't check for unistd.h. 2004-08-05 Paul Eggert Merge from coreutils. * lib/.gdb-history: Remove; this doesn't belong here. * lib/c-strtod.c, lib/c-strtod.h, lib/c-strtold.c, lib/cycle-check.c: * lib/cycle-check.h, lib/dev-ino.h, lib/canonicalize.h: * lib/canonicalize.c, lib/fcntl-safer.h, lib/fcntl-safer.c: * lib/getcwd.c: New files. * lib/dirname.h: Include . (FILE_SYSTEM_PREFIX_LEN): Renamed from FILESYSTEM_PREFIX_LEN, for consistency with POSIX terminology. All uses changed. (IS_ABSOLUTE_FILE_NAME, IS_RELATIVE_FILE_NAME): New macros. (strip_trailing_slashes): Use bool for booleans. * lib/stripslash.c (strip_trailing_slashes): Likewise. * lib/error.c: Work around bug in OpenBSD 3.4 sterror_r: it sometimes returns a positive errno value even when it succeeds. (print_errno_message) [!LIBC]: Fall back on strerror if __strerror_r fails. * lib/path-concat.c (mempcpy): Don't define if a system header defines it. Don't include stdio.h, stdlib.h, unistd.h, strdup.h. (longest_relative_suffix): New function. (path_concat): Use it. Assume first argument is not NULL. Port to DOS. Omit redundant separators. Report an error instead of returning NULL. Use mempcpy instead of memcpy. (xpath_concat): Remove: not declared or used. * lib/same.h: Include (same_name): Return bool, not int. * lib/same.c (same_name): Likewise. (errno): Don't declare; we assume C89 or better now. * lib/stat-macros (S_ISCTG, S_ISOFD, S_ISOFL): New macros, if not already defined. * lib/xgetcwd.c (errno): Don't declare; we assume C89 or better now. * lib/dup-safer.c (errno): Likewise. 2004-08-05 Paul Eggert Merge from coreutils. * modules/c-strtod, modules/c-strtold, modules/canonicalize: * modules/cycle-check, modules/fcntl-safer, modules/getcwd: New files. * modules/path-concat: Don't depend on strdup. 2004-08-03 Simon Josefsson * lib/strdup.h: Only use HAVE_DECL_STRDUP if defined. * lib/progname.h: Don't include stdbool.h. 2004-08-03 Paul Eggert * modules/fatal: Remove, as the "fatal" module wasn't used or working. * MODULES.html.sh (func_all_modules): Remove fatal. 2004-08-03 Paul Eggert * m4/fatal.m4: Remove, as the "fatal" module wasn't used or working. 2004-08-03 Paul Eggert * lib/fatal.c, fatal.h: Remove as the "fatal" module wasn't used or working. 2004-08-02 Simon Josefsson * lib/getsubopt.h: New file, with comments from Bruno Haible. * lib/getsubopt.c: New file, from glibc, but slightly modified based on suggestions from Paul Eggert . 2004-08-01 Simon Josefsson * lib/xgetdomainname.c: Include stdlib.h, for free(). 2004-07-19 Bruno Haible * MODULES.html.sh (func_all_modules): Add dummy. 2004-07-16 Simon Josefsson * modules/dummy: New file. 2004-07-16 Simon Josefsson * lib/dummy.c: New file. 2004-07-16 Bruno Haible * lib/backupfile.h: Add extern "C" for C++. * lib/closeout.h: Likewise. * lib/copy-file.h: Likewise. * lib/findprog.h: Likewise. * lib/full-write.h: Likewise. * lib/pathname.h: Likewise. * lib/progname.h: Likewise. * lib/stpcpy.h: Likewise. * lib/stpncpy.h: Likewise. * lib/strcase.h: Likewise. * lib/strstr.h: Likewise. * lib/xalloc.h: Likewise. * lib/mbswidth.h: Add extern "C" for C++. Reported by Albert Chin-A-Young . 2004-07-13 Robert Millan * m4/host-os.m4: s/KNetBSD/kNetBSD/g and s/KFreeBSD/kFreeBSD/g. 2004-07-09 Simon Josefsson * lib/getndelim2.c: Include stddef.h, for ptrdiff_t. (FreeBSD 4.9 failed without this.) 2004-07-09 Paul Eggert * modules/chown (Files): Add lib/fchown-stub.c, since gl_PREREQ_CHOWN invokes AC_LIBOBJ(fchown-stub). 2004-07-09 Paul Eggert * lib/fchown-stub.c: New file. 2004-06-24 Jim Meyering * lib/obstack.h (obstack_base): Cast to (void *), per documentation. 2004-06-22 Paul Eggert * modules/argz: Omit "#include". * MODULES.html.sh (func_all_modules): Add calloc, to match 2004-06-01 addition of calloc module. 2004-06-22 Paul Eggert * m4/argz.m4: New file, which is autoupdated from libtool. 2004-06-22 Paul Eggert * lib/argz.c, lib/argz_.h: New files, which are autoupdated from libtool. 2004-06-22 Paul Eggert * config/srclist-update: Don't insist on "USA." before the close-comment, as libtool omits the period and puts the */ on a separate line. * config/srclist.txt: Add argz.c, argz_.h, argz.m4. * config/srclistvars.sh: Add LIBTOOL (for eggert only). 2004-06-22 Gary V. Vaughan * modules/argz: New file. * MODULES.html.sh (func_all_modules): Add argz. 2004-06-12 Jim Meyering and Paul Eggert * modules/hash (Files): Add lib/xalloc.h. * modules/pipe (Depends-on): Add wait-process. * modules/stat (Depends-on): Add xalloc. * modules/userspec (Files): Add lib/userspec.h. * modules/xstrto Upgrade from gettext-0.13. * modules/gettext (Files): Add m4/intmax.m4, m4/longdouble.m4, m4/longlong.m4, m4/printf-posix.m4, m4/signed.m4, m4/size_max.m4, m4/wchar_t.m4, m4/wint_t.m4, m4/xsize.m4. 2004-06-10 Jim Meyering * lib/calloc.c: New file. 2004-06-06 Paul Eggert * lib/getdate.y (yylex): Allow space between sign and number. Problem reported by Dan Jacobson. 2004-06-01 Paul Eggert Merge from coreutils CVS. * m4/backupfile.m4, dirname.m4, human.m4, inttypes.m4, longlong.m4, makepath.m4, memchr.m4, memcmp.m4, mountlist.m4, path-concat.m4, putenv.m4, quotearg.m4, readutmp.m4, strtoimax.m4, strtoll.m4, strtoull.m4, strtoumax.m4, ulonglong.m4, vasnprintf.m4, xstrtol.m4: Fix copyright date and/or serial number. * m4/chown.m4 (gl_PREREQ_CHOWN): Check for fcntl.h. See if we need an fchown replacement. (gl_FUNC_CHOWN_FOLLOWS_SYMLINK): New macro. (gl_FUNC_CHOWN): Require gl_FUNC_CHOWN_FOLLOWS_SYMLINK, and use the replacement function if we detect either defect. * m4/prereq.m4 (gl_PREREQ): Add gl_ALLOCSA, gl_CLOEXEC, gl_INTTOSTR, gl_UTIMECMP. 2004-06-01 Paul Eggert and Jim Meyering Merge from coreutils CVS. * lib/stat-macros.h: New file, with contents from file-type.h and coreutils' system.h. * lib/file-type.c: Include "stat-macros.h". * lib/file-type.h (file_type): Move all macro definitions to new file, stat-macros.h. * lib/chown.c (rpl_chown) [CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE]: Wrap old code with this conditional. [CHOWN_MODIFIES_SYMLINK]: Try to work around a chown function that does not dereference symlinks. * lib/lchown.c (lchown) [CHOWN_MODIFIES_SYMLINK]: Just call chown. * lib/xreadlink.c: Include xreadlink.h first, to catch .h file dependency problems. (xreadlink): Accept new arg SIZE, for efficiency. All decls and uses changed. * lib/xreadlink.h: Include , for size_t. * lib/.cppi-disable: Add alloca_.h, allocsa.h, exit.h, getndelim2.h, gettext.h, localcharset.h, strdup.h, strndup.h, strtoul.c, time_r.h. * lib/.cvsignore: Add alloca.h, fnmatch.h, poll.h, stdbool.h, sysexits.h. 2004-06-01 Jim Meyering * m4/calloc.m4: New file. 2004-05-31 Paul Eggert * m4/stdbool.m4 (AC_HEADER_STDBOOL): Detect _Bool bug in HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. Problem reported by Jim Meyering. Also, fix a typo in a diagnostic. 2004-05-30 Paul Eggert * m4/xalloc.m4 (gl_PREREQ_XMALLOC): Do not require AC_FUNC_MALLOC or AC_FUNC_REALLOC. 2004-05-30 Paul Eggert * lib/xmalloc.c (HAVE_MALLOC, HAVE_REALLOC): Do not require these macros to be defined. (xnmalloc_inline, xnrealloc_inline, xcalloc): Do not die if the allocator returns NULL because the requested size is zero. 2004-05-20 Paul Eggert * lib/malloc/obstack.c (_obstack) [defined _LIBC]: Bring back this var. Add comment explaining why libc still defines it. This merges the following patch from glibc: http://sources.redhat.com/ml/libc-alpha/2004-05/msg00157.html 2004-05-20 Andreas Schwab * m4/free.m4: Replace free if it not known to work, not the other way round. 2004-05-19 Paul Eggert * lib/obstack.c (_obstack): Remove unused variable. It hasn't been present in glibc since revision 1.1 of this file. * lib/obstack.h (_obstack_free, obstack_1grow, obstack_1grow_fast, obstack_alignment_mask, obstack_alloc, obstack_base, obstack_blank, obstack_blank_fast, obstack_chunk_size, obstack_copy, obstack_copy0, obstack_finish, obstack_grow, obstack_grow0, obstack_init, obstack_int_grow, obstack_int_grow_fast, obstack_make_room, obstack_memory_used, obstack_next_free, obstack_object_size, obstack_ptr_grow, obstack_ptr_grow_fast, obstack_room): Remove declarations of nonexistent functions. 2004-05-18 Karl Berry * config/srclist.txt: break link for vasnprintf.c. 2004-05-17 Paul Eggert Port obstack to the AS/400, where pointers are 16 bytes wide and you cannot cast an integer to a valid pointer. This patch is currently waiting to be integrated into glibc; see . * lib/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove. All uses of __INT_TO_PTR (PTR_TO_INT ...) replaced by __PTR_ALIGN. (__BPTR_ALIGN, __PTR_ALIGN): New macros. (struct obstack): temp member is now a union of a pointer and an integer, instead of an integer. All integer uses changed. This does not affect the physical layout of struct obstack, except on hosts (like the AS/400) where the size or alignment of void * is greater than that of ptrdiff_t. (obstack_finish) [! (defined __GNUC__ && defined __STDC__ && __STDC__)]: Store temporary in pointer member of union, not integer member. * lib/obstack.c: Include , for offsetof. (struct fooalign): Remove; it doesn't need a name. (union fooround): Change double to long double, and add void *. (DEFAULT_ALIGNMENT): Use offsetof to compute. (DEFAULT_ALIGNMENT, DEFAULT_ROUNDING): Now an enum constant, not a macro. Hence the values are always int; so remove all casts-to-int in uses. 2004-05-17 Paul Eggert * config/srclist.txt: Break link for argp-help.c and argp-parse.c until we can get this patch merged into glibc. 2004-05-17 Derek R. Price Paul Eggert * m4/argp: Depend on alloca. 2004-05-17 Derek R. Price Paul Eggert * lib/argp-help.c, argp-parse.c: Assume rather than freecoding. 2004-05-17 Bruno Haible * lib/vasnprintf.c (VASNPRINTF): Correctly handle the case of a precision that consists of a '.' followed by an empty digit string. Patch by Tor Lillqvist . 2004-05-16 Paul Eggert * m4/alloca.m4 (gl_FUNC_ALLOCA): Define HAVE_ALLOCA_H always, for backward compatibility with older code. We need our own alloca.h if _AIX is defined. Define HAVE_ALLOCA if we discover it under some other name, and our alloca.h will define it. 2004-05-16 Paul Eggert Derek Price * lib/alloca.c: Include , to get our interface. * lib/alloca_.h: Use __alloca on AIX, so that we don't have to include first. Use C89 prototype for alloca; this requires including for size_t. Use extern "C" if C++. Use #elif for simplicity, since we can assume C89 now. Don't try to source the system alloca.h since it will not be found and to prevent recursively including its replacement. * lib/fnmatch.c: Include instead of opencoding. * lib/regex.c: Likewise. 2004-05-16 Derek Price Paul Eggert getline cleanup. This changes the getndelim2 API: both order of arguments, and meaning of delim2 (now uses EOF, not 0, to indicate no delimiter). * lib/getline.c: Don't include stddef.h or stdio.h, since our interface does that. (getline): Always use getdelim, so that we don't have two copies of this code. * lib/getndelim2.c: Include , , if available. (PTRDIFF_MAX, SIZE_MAX, SSIZE_MAX): Define if not defined. (GETNDELIM2_MAXIMUM): New macro. (getndelim2): Reorder arguments. delim==EOF now means no delimiter, instead of the old practice of delim2==0. All callers changed. Return -1 on overflow, instead of returning junk. Do not set *linesize unless allocation succeeds. * lib/getndelim2.h: Do not include stddef.h; no longer needed, now that we include sys/types.h. * lib/getnline.h: Likewise. * lib/getndelim2.h (GETNLINE_NO_LIMIT): New macro. (getndelim2): Reorder arguments. * lib/getnline.c (getnline, getndelim): Don't discard the NMAX argument. (getnline): Invoke getndelim, to avoid code duplication. * lib/getnline.h (GETNLINE_NO_LIMIT): New macro, used instead of (size_t) -1 by callers of the getnline family. 2004-05-13 Paul Eggert * m4/gettime.m4 (gl_GETTIME): Require gl_TIMESPEC. Check for gettimeofday. * m4/settime.m4 (gl_SETTIME): Require gl_TIMESPEC. Check for settimeofday, stime. 2004-05-13 Paul Eggert * lib/nanosleep.c (suspended): Change its type from int to sig_atomic_t volatile. (first_call): Make it private to rpl_nanosleep, and have it be zero initially as that's a bit faster. (my_usleep): Round up fractional times instead of truncating them, as this is the usual meaning for 'sleep'. * lib/gettime.c (gettime): Fall back on `time' if `gettimeofday' doesn't work. * lib/settime.c: Include , for stime (on Solaris 8, anyway). (ENOSYS): Define if not defined. (settime): Fall back on stime if it exists and settimeofday fails. But don't bother with fallbacks if a method fails with errno == EPERM. 2004-05-11 Jim Meyering Prior to this change, the save_cwd caller required read access to the current directory on most systems (ones with the fchdir function). * lib/save-cwd.c (save_cwd) [HAVE_FCHDIR]: If opening `.' read-only fails, try write-only, and finally, resort to using xgetcwd. 2004-05-06 Paul Eggert * lib/obstack.c, obstack.h: Import changes from libc. 2004-04-28 Bruno Haible * lib/findprog.c (find_in_path): Treat Cygwin like Windows, since it also implicitly appends .exe to executables. * lib/localcharset.c (ISSLASH): Treat Cygwin like Windows, since it now accepts Windows pathnames. * lib/pathname.h (ISSLASH, IS_PATH_WITH_DIR, FILESYSTEM_PREFIX_LEN): Treat Cygwin like Windows, since it now accepts Windows pathnames. * lib/progreloc.c (ISSLASH, IS_PATH_WITH_DIR, FILESYSTEM_PREFIX_LEN): Treat Cygwin like Windows, since it now accepts Windows pathnames. Reported by Derek Robert Price . 2004-04-21 Karl Berry * config/srclist.txt (localcharset.c): break sync. 2004-04-20 Paul Eggert * m4/host-os.m4: Add a copyright notice. 2004-04-20 Jim Meyering Change UTILS_ to gl_ in AC_DEFINE'd names. Change utils_- and jm_-prefixed variables, too. * m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Renamed from UTILS_FUNC_MKDIR_TRAILING_SLASH. * m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Renamed from UTILS_FUNC_MKSTEP. * m4/dirfd.m4 (gl_FUNC_DIRFD): Rename from UTILS_FUNC_DIRFD. Don't emit trailing blanks. Also rename jm_-prefixed variables to have gl_ prefix. * m4/host-os.m4 (gl_HOST_OS): Rename from UTILS_HOST_OS. Also rename jm_-prefixed variables to have gl_ prefix. * m4/jm-macros.m4: Reflect the renamings. * m4/prereq.m4: Likewise. 2004-04-20 Jim Meyering * lib/getndelim2.c (getndelim2): Upon realloc failure, don't leak memory. 2004-04-20 Jim Meyering Bruno Haible * lib/localcharset.c (get_charset_aliases) [!VMS && !WIN32]: Don't leak memory when realloc fails. 2004-04-19 Jim Meyering * m4/readutmp.m4 (gl_PREREQ_READUTMP): Require gl_FUNC_FREE, now that readutmp.c may call `free (0)'. 2004-04-19 Bruno Haible * m4/mbrtowc.m4: Change jm_ to gl_ in cache variables as well. * m4/inttypes_h.m4: Likewise. * m4/stdint_h.m4: Likewise. * m4/intmax_t.m4: Likewise. * m4/uintmax_t.m4: Likewise. 2004-04-18 Jim Meyering * m4/prereq.m4: Don't forbid jm_ prefix. * m4/afs.m4, m4/allocsa.m4, m4/assert.m4, m4/backupfile.m4: * m4/bison.m4, m4/check-decl.m4, m4/chown.m4, m4/d-ino.m4: * m4/d-type.m4, m4/dirname.m4, m4/dos.m4, m4/error.m4, m4/fpending.m4: * m4/fstypename.m4, m4/fsusage.m4, m4/ftruncate.m4, m4/getdate.m4: * m4/getgroups.m4, m4/gettext.m4, m4/glibc21.m4, m4/group-member.m4: * m4/human.m4, m4/intmax.m4, m4/intmax_t.m4, m4/inttostr.m4: * m4/inttypes.m4, m4/inttypes_h.m4, m4/jm-macros.m4, m4/jm-winsz1.m4: * m4/jm-winsz2.m4, m4/lchown.m4, m4/lib-check.m4, m4/link-follow.m4: * m4/localcharset.m4, m4/longlong.m4, m4/ls-mntd-fs.m4, m4/lstat.m4: * m4/makepath.m4, m4/mbrtowc.m4, m4/mbswidth.m4, m4/memchr.m4: * m4/memcmp.m4, m4/mkdtemp.m4, m4/mkstemp.m4, m4/mountlist.m4: * m4/nanosleep.m4, m4/path-concat.m4, m4/perl.m4, m4/prereq.m4: * m4/putenv.m4, m4/quotearg.m4, m4/regex.m4, m4/stat.m4: * m4/stdint_h.m4, m4/strftime.m4, m4/strtoimax.m4, m4/strtoll.m4: * m4/strtoull.m4, m4/strtoumax.m4, m4/timespec.m4, m4/uintmax_t.m4: * m4/ulonglong.m4, m4/unlink-busy.m4, m4/unlocked-io.m4, m4/uptime.m4, * m4/utimbuf.m4, m4/utime.m4, m4/utimes-null.m4, m4/vasnprintf.m4: * m4/xstrtoimax.m4, m4/xstrtol.m4, m4/xstrtoumax.m4: Change jm_ to gl_ in AC_DEFINE'd names. Update all uses. 2004-04-18 Jim Meyering * lib/readutmp.c (read_utmp) [UTMP_NAME_FUNCTION]: Upon realloc failure, don't leak memory and do call END_UTMP_ENT. 2004-04-16 Jim Meyering * m4/prereq.m4 (jm_PREREQ_STAT): Remove macro. It is specific to coreutils' stat program. (gl_PREREQ): Don't require jm_PREREQ_STAT. 2004-04-11 Paul Eggert * lib/inttostr.h: Include unconditionally, since we assume C89. (CHAR_BIT): Remove, since we assume C89. Include if available, as per current Autoconf CVS advice. 2004-03-31 Jim Meyering * m4/prereq.m4: Require AC_FUNC_MALLOC, not jm_FUNC_MALLOC. Require AC_FUNC_REALLOC, not jm_FUNC_REALLOC. * m4/xalloc.m4: Likewise. 2004-03-30 Paul Eggert Merge from coreutils. * m4/inttostr.m4: New file. * m4/getdate.m4 (gl_GETDATE): Remove time-related stuff. Require AM_STDBOOL_H and gl_TIMESPEC instead. Require gl_CLOCK_TIME. * m4/clock_time.m4 (gl_CLOCK_TIME): Require AC_GNU_SOURCE. 2004-03-30 Paul Eggert * lib/cloexec.h, cloexec.c (set_cloexec_flag): Return int not bool, to be more consistent with Unix conventions. Suggested by Bruno Haible. Merge from coreutils. * lib/imaxtostr.c, lib/inttostr.c, lib/inttostr.h, lib/offtostr.c: * lib/umaxtostr.c: New files. * lib/getdate.h: Include stdbool.h, and timespec.h instead of the usual dance. (get_date): Change signature to support fractional time stamps. All callers changed. * lib/getdate.y: Include "getdate.h" first, as we can now assume C89 and don't need to worry about 'const'. Similarly, include "unlocked-io.h" near start, not in middle. Include . (textint.value): Use long int rather than int. (textint.digits): Use size_t rather than int. (BILLION, LOG10_BILLION): New constants. (parser_control): New member rel_ns. Members day_ordinal, time_zone, month, day, hour, minutes, rel_year, rel_month, rel_day, rel_hour, rel_minutes, rel_seconds are now long int, not int. Member seconds is now struct timespec, not int. New member timespec_seen. Members dates_seen, days_seen, local_zones_seen, rels_seen, times_seen, zones_seen are now size_t, not int. (%union.intval): Now long int, not int. New member timespec. (tSDECIMAL_NUMBER, tUDECIMAL_NUMBER): New tokens. (seconds, signed_seconds, unsigned_seconds): New nonterminals. (spec): Now is a timespec or an item list. (timespec, items): New nonterminals. (time, rel, relunit, number, get_date): Add support for fractional seconds. (time): Fix bug: seconds weren't cleared in "00:00 +0000" syntax. (gmtime, localtime, mktime): Remove decls; not needed with C89. (to_hour): First arg is now long int, not int. (to_year): Returns long int, not int. Don't treat year -70 like 70. (tm_diff): Returns long int, not int. (lookup_word): Use bool instead of int when appropriate. (yylex): Use size_t for count, not int. Detect overflow when parsing large integer constants. Add support for fractions. (get_date): Make pointers 'const' if possible. Use more-portable code to detect integer overflow. (main) [TEST]: Adjust to above changes. Test for localtime failure. Don't use ctime; it's not reliable if the year has >4 digits. * lib/human.c (humblock): Inspect BLOCKSIZE if BLOCK_SIZE isn't set. This is for compatibility with BSD. * lib/timespec.h (ST_TIME_CMP_NS, ST_TIME_CMP): Define. (ATIME_CMP, CTIME_CMP, MTIME_CMP, TIMESPEC_NS): Likewise. From coreutils' system.h. * lib/userspec.c: Don't include "posixver.h". (parse_user_spec): Fall back on USER.GROUP parsing, regardless of POSIX version, as POSIX 1003.1-2001 allows that behavior as a compatible extension. Simplify code by removing a boolean int that was always nonzero if a string was nonnull. 2004-03-30 Jim Meyering Merge from coreutils. Avoid a configure-time warning about sys/ucred.h on OSF V4.0. * m4/ls-mntd-fs.m4: Test for sys/ucred.h separately, since on some systems one must include before it. Reported by Christian Krackowizer. 2004-03-30 Jim Meyering Merge from coreutils. * lib/mountlist.c [HAVE_SYS_UCRED_H]: Include grp.h before sys/ucred.h. * lib/readtokens.c (readtoken): Don't leak 64 bytes when reading an empty input stream. * lib/readtokens.c: Include . (readtoken): Use `size_t' rather than int/long. All callers adjusted. Use `bool' rather than `int' where appropriate. Use memset rather than an explicit loop. Use x2nrealloc rather than xrealloc. Allow the use of `\0' as a delimiter. (readtokens): Likewise. * lib/readtokens.h (readtoken, readtokens): Update prototypes. 2004-03-30 Jim Meyering * m4/realloc.m4: Remove file, since now it does no more than AC_REQUIRE([AC_FUNC_REALLOC]), and that can be done via the `configure.ac' section of module/realloc. * m4/malloc.m4: Likewise, but for AC_FUNC_MALLOC. 2004-03-30 Bruno Haible * lib/getloadavg.c (getloadavg): Don't assume setlocale returns nonnull. 2004-03-29 Paul Eggert Merge changes to getloadavg.c from coreutils and Emacs. * lib/getloadavg.c [!defined HAVE_SETLOCALE] (setlocale): Define to an expression, not to the empty string. Include cloexec.h and xalloc.h. (getloadavg): Restore LC_NUMERIC locale after setting it temporarily. Use set_cloexec_flag rather than rolling our own. * lib/cloexec.c, lib/cloexec.h: New files. 2004-03-29 Paul Eggert * m4/cloexec.m4: New file. 2004-03-18 Paul Eggert * lib/getopt.h: Sync with libc CVS. 2004-03-18 Paul Eggert Bruno Haible * m4/mbswidth.m4 (gl_MBSWIDTH): Also test whether declares mbswidth. 2004-03-18 Paul Eggert Bruno Haible * lib/mbswidth.h: Include only if HAVE_DECL_MBSWIDTH_IN_WCHAR_H, not on all platforms that have . * lib/mbswidth.c: Include and before . 2004-03-09 Paul Eggert * lib/argp-parse.c, getopt.c, getopt.h, getopt1.c: Sync with libc CVS. * lib/getopt_int.h: New file, also synced from libc. 2004-03-09 Paul Eggert * config/srclistvars.sh: Add GNUWWWLICENSES for eggert. * config/srclist.txt: Sync getopt with libc. Add getopt_int.h. Bring back getopt.c, getopt.h, getopt1.c. 2004-03-07 Paul Eggert * m4/c-stack.m4 (gl_PREREQ_C_STACK): Renamed from jm_PREREQ_C_STACK. All uses changed. Check for sa_sigaction member; this fixes a bug first reported by Jason Andrade in . 2004-03-07 Paul Eggert * lib/c-stack.c (SIGACTION_WORKS): New macro. Use it instead of long '#if' expressions. Unlike the code it replaces, it does not depend on (defined _SC_PAGESIZE). However, it does depend on HAVE_STRUCT_SIGACTION_SA_SIGACTION; this last change fixes a bug first reported by Jason Andrade in . 2004-02-25 Simon Josefsson * m4/strdup.m4 (gl_PREREQ_STRDUP): Check whether strdup is declared. 2004-02-25 Simon Josefsson * lib/strdup.h: New file. * lib/strdup.c: Include it. * lib/path-concat.c: Include strdup.h. Drop strdup declaration. * lib/userspec.c: Include strdup.h. Drop strdup declaration. 2004-02-23 Karl Berry * doc/maintain.texi, doc/standards.texi, doc/make-stds.texi: new files (from fencepost.gnu.org:/gd/gnuorg). 2004-02-23 Karl Berry * config/srclistvars.sh (GNUORG) [karl]: redefine. * config/srclist.txt: add maintain/standards documents. 2004-02-18 Bruno Haible * m4/xsize.m4 (gl_XSIZE): Require AC_C_INLINE. Reported by Derek Robert Price . 2004-02-16 Karl Berry * config/mkinstalldirs, install-sh: update from automake. 2004-02-06 Karl Berry * m4/po.m4: update from gettext 0.14.1. 2004-02-06 Karl Berry * lib/config.charset: update from gettext 0.14.1. 2004-02-05 Paul Eggert Add comments and code, prompted by suggestions from Bruno Haible for sh-quote. * lib/quotearg.h (quotearg_alloc): New decl. Improve the comments describing the enum quoting_style values. * lib/quotearg.c (quotearg_alloc): New function. (quotearg_buffer_restyled): Treat lone { and } as special. Treat = as special. Work around bug with older shells that "see" a '\' that is really the 2nd byte of a multibyte char. Quote empty string with shell_quoting_style. 2004-02-03 Bruno Haible * m4/pipe.m4: New file, from GNU gettext. 2004-02-03 Bruno Haible * lib/pipe.h: New file, from GNU gettext. * lib/pipe.c: New file, from GNU gettext. 2004-01-27 Bruno Haible * m4/execute.m4: New file, from GNU gettext. 2004-01-27 Bruno Haible * lib/execute.h: New file, from GNU gettext. * lib/execute.c: New file, from GNU gettext. * lib/w32spawn.h: New file, from GNU gettext. 2004-01-24 Paul Eggert Merge from diffutils. * lib/file-type.c (file_type): Add typed memory objects. * lib/file-type.h (S_TYPEISTMO): New macro. * lib/c-stack.h (c_stack_action): Remove argv argument. * lib/c-stack.c (c_stack_action): Likewise. All uses changed. (die): Don't calculate message unless segv_action returns. (get_stack_location, min_address_from_argv, max_address_from_argv, volatile stack_base, volatile_stack_size): Remove. (segv_handler): If ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC, assume that every segmentation violation is a stack overflow. (Ouch!) See Debian bug 136249 (still outstanding) for more info about why HAVE_XSI_STACK_OVERFLOW_HEURISTIC fails on Linux kernels. 2004-01-24 Paul Eggert Exit-status fix from coreutils. Use exit_failure consistently in place of EXIT_FAILURE, so that program exit statuses are consistent on failure. * lib/argmatch.c (ARGMATCH_DIE) [! defined ARGMATCH_DIE]: Include "exitfail.h", and use exit_failure rather than EXIT_FAILURE. * lib/argmatch.h: Comment fix to match the above. * lib/obstack.c (obstack_exit_failure) [!defined _LIBC]: Now a macro referring to exit_failure, instead of a separate variable. Include "exitfail.h" to get it. * lib/xstrtol.h: Include "exitfail.h". (STRTOL_FATAL_ERROR): Exit with status exit_failure, not 2. * lib/long-options.c (parse_long_options): Use prototype for usage function arg. Pass it EXIT_SUCCESS rather than 0, for clarity. 2004-01-21 Jim Meyering * lib/mktime.c (__mktime_internal) [!_LIBC]: Define to mktime_internal so as not to conflict with a different-sized __mktime_internal function in GNU libc. * lib/timegm.c (__mktime_internal) [!_LIBC]: Likewise. Problem building statically-linked `ls' reported by Michael Brunnbauer. 2004-01-20 Karl Berry * config/config.guess: update from config. * config/srclistvars.sh: GNUWWWLICENSES for karl. 2004-01-20 Bruno Haible Safer stack allocation. * lib/setenv.c: Include allocsa.h. (alloca): Remove fallback definition. (freea): Remove macro. (__add_to_environ) [!_LIBC]: Use allocsa instead of alloca. Use freesa instead of freea. 2004-01-20 Bruno Haible * m4/eealloc.m4: New file, from GNU gettext. 2004-01-20 Bruno Haible * m4/allocsa.m4: New file, from GNU gettext. 2004-01-20 Bruno Haible * lib/xallocsa.h: New file, from GNU gettext. * lib/xallocsa.c: New file, from GNU gettext. 2004-01-20 Bruno Haible * lib/wait-process.c: On Windows, include windows.h. Needed on mingw. 2004-01-20 Bruno Haible * lib/wait-process.c (wait_subprocess): Add ignore_sigpipe argument. * lib/wait-process.c (wait_subprocess): Likewise. Handle SIGPIPE specially. 2004-01-20 Bruno Haible * lib/wait-process.c (wait_process): Disable the 2003-10-31 waitid() patch. 2004-01-20 Bruno Haible * lib/wait-process.c (cleanup_slaves): Use ANSI C declaration. 2004-01-20 Bruno Haible * lib/eealloc.h: New file. 2004-01-20 Bruno Haible * lib/binary-io.h: Avoid warnings on Cygwin. 2004-01-20 Bruno Haible * lib/allocsa.h: New file, from GNU gettext. * lib/allocsa.c: New file, from GNU gettext. 2004-01-18 Karl Berry * doc/gpl.texi, doc/lgpl.texi: new files. 2004-01-18 Karl Berry * config/srclistvars.sh (GNUWWWLICENSES): new variable. * config/srclist.txt ({fdl,gpl,lgpl}.text): get from there. 2004-01-15 Paul Eggert Merge from coreutils. * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Check for uintptr_t. * m4/posixver.m4 (gl_POSIXVER): Require gl_DEFAULT_POSIX2_VERSION. (gl_DEFAULT_POSIX2_VERSION): Move the documentation from 'configure' into 'config.hin', so that 'configure --help' isn't burdened by it and we don't have to worry about its formatting there. Reword the documentation so that it's more succinct and can be run together into a single paragraph. * m4/same.m4 (gl_SAME): Check for pathconf. 2004-01-15 Paul Eggert Merge from coreutils. * lib/posixver.c: Include posixver.h. * lib/same.c: Include , . (_POSIX_NAME_MAX): Define if not defined. (MIN): New macro. (same_name): If file names are silently truncated, report that the file names are the same if they are the same after the silent truncation. * lib/xstrtod.h (xstrtod): Accept an extra arg, specifying the conversion function. * lib/xstrtod.c (xstrtod): Likewise. All callers changed to include c-strtod.h and use c_strtod. Don't include stdlib.h; no longer needed. 2004-01-15 Jim Meyering Merge from coreutils. * m4/clock_time.m4 (gl_CLOCK_TIME): Don't set LIB_CLOCK_GETTIME if no library is required. * m4/jm-macros.m4: Don't require UTILS_SYS_OPEN_MAX. * m4/jm-macros.m4 (jm_MACROS): Require gl_FUNC_FREE. * m4/jm-macros.m4 (jm_MACROS): Require autoconf-2.58. (AC_LANG_SOURCE): Remove definition, now that we require autoconf-2.58. * m4/jm-macros.m4 (jm_MACROS): Don't require AC_FUNC_FTW. * m4/lib-check.m4 (jm_LIB_CHECK): Do not set LIB_CRYPT to the value, $ac_cv_search_crypt, if it's "none required". * m4/posixver.m4 (gl_DEFAULT_POSIX2_VERSION): New macro. * m4/prereq.m4 (jm_PREREQ): Require AC_FUNC_GETLOADAVG, not gl_FUNC_GETLOADAVG. * m4/prereq.m4 (jm_PREREQ): Require gl_READTOKENS, gl_MD5, gl_MAKEPATH, gl_LONG_OPTIONS, and gl_IDCACHE, gl_GETUGROUPS. 2004-01-15 Jim Meyering Merge from coreutils. * lib/md5.h (rol) [__GNUC__ && __i386__]: Don't use `asm' code. These days, gcc-3.x does better all by itself. Patch from Dean Gaudet: http://mail.gnu.org/r/bug-coreutils/2003-11/msg00144.html * lib/posixver.c (DEFAULT_POSIX2_VERSION): Use definition of new, optional configure-time default. * lib/version-etc.c (version_etc_copyright): Update copyright date. * lib/xreadlink.c (xreadlink): Correct outdated comment. 2004-01-15 Alexandre Duret-Lutz Merge from coreutils. * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): Do not set LIB_NANOSLEEP to the value, $ac_cv_search_nanosleep, if it's "none required". 2004-01-14 Paul Eggert * lib/fnmatch_loop.c (ALLOCA_LIMIT): Remove macro, which collided with like-named macro in fnmatch.c. (EXT): Use an internal constant instead. Merge fnmatch patches from glibc. * lib/fnmatch.c (mbsinit): Remove define. Add libc_hidden_ver (__fnmatch, fnmatch). * lib/fnmatch_loop.c (FCT): Cast to int32_t and UCHAR when appropriate. Adjust to renaming of collseq_table_lookup to __collseq_table_lookup. 2004-01-14 Karl Berry * config/install-sh: update from automake. 2004-01-13 Karl Berry * config/install-sh: update from automake. 2004-01-09 Karl Berry * config/install-sh: update from automake. 2004-01-05 Karl Berry * config/config.{sub,guess}: update from config. 2003-12-31 Karl Berry * config/depcomp: update from automake. 2003-12-14 Karl Berry * lib/config.charset: update from gettext-runtime. 2003-12-03 Paul Eggert * lib/getgroups.c (getgroups): xmalloc takes one argument, not two. Bug reported by Alfred M. Szmidt. 2003-12-03 Bruno Haible * m4/gettext.m4: Upgrade from gettext-0.13. * m4/po.m4: Upgrade from gettext-0.13. * m4/size_max.m4 (gl_SIZE_MAX): Don't use the _ONCE macros here. * m4/intmax.m4: New file, from gettext-0.13. * m4/printf-posix.m4: New file, from gettext-0.13. 2003-11-29 Karl Berry * lib/argp-{help.c,parse.c,namefrob.h}, argp.h: update from libc. 2003-11-25 Paul Eggert Bruno Haible * lib/printf-parse.h: Don't include sys/types.h. (ARG_NONE): New macro. (char_directive): Change type of *arg_index fields to size_t. * lib/printf-parse.c: Don't include sys/types.h. (SSIZE_MAX): Remove macro. (PRINTF_PARSE): Change the type of the arg_index variables to size_t. Remove unnecessary overflow check. * lib/vasnprintf.c (VASNPRINTF): Update for type change of *arg_index fields. 2003-11-25 Bruno Haible * modules/vasnprintf (Files): Remove m4/ssize_t.m4. 2003-11-25 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Don't require gt_TYPE_SSIZE_T. 2003-11-24 Paul Eggert * modules/alloca: Remove dependency on xalloc. 2003-11-24 Paul Eggert * lib/alloca.c: Remove dependency on xalloc module. (xalloc_die): Remove. (memory_full) [!defined emacs]: New macro. [!defined emacs]: Don't include xalloc.h. (alloca): Invoke memory_full, not xalloc_die, if malloc fails or address arithmetic overflows. Change datatypes a bit to avoid unnecessary casts. 2003-11-22 Jim Meyering * lib/xmalloc.c (x2nrealloc_inline): Fix typos in comments: s/size/size_t/. 2003-11-21 Karl Berry * config/config.{sub,guess}: update from config. 2003-11-18 Karl Berry * config/config.{sub,guess}: update from config. * config/(printf-{parse,args}.[ch]): sync broken, sigh. 2003-11-17 Paul Eggert * README: Mention that S+T cannot overflow if S is the size of an existing object and T is sufficiently small. 2003-11-17 Jim Meyering On systems without utime and without a utimes function capable of dealing with a NULL struct utimbuf* argument, this utime replacement could -- in unusual circumstances -- leak a file descriptor. * lib/utime.c: Include and . (utime_null): Be sure to close `fd' and to preserve errno. Reported by Geoff Collyer via Arnold Robbins. 2003-11-17 Bruno Haible * modules/vasnprintf (Files): Add m4/ssize_t.m4. (Depends-on): Add xsize. 2003-11-17 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Require gt_TYPE_SSIZE_T. 2003-11-17 Bruno Haible * lib/vasnprintf.c (alloca): Remove fallback definition. (freea): Remove definition. (VASNPRINTF): Use alloca only for small sizes, say <= 4000 bytes. Reported by Paul Eggert. 2003-11-16 Paul Eggert Bruno Haible Protect against address arithmetic overflow. * lib/printf-args.h: Include stddef.h. (arguments): Change type of field 'count' to size_t. * lib/printf-args.c (printf_fetchargs): Use size_t instead of 'unsigned int' where appropriate. * lib/printf-parse.h: Include sys/types.h. (char_directive): Change type of *arg_index fields to ssize_t. (char_directives): Change type of fields 'count', max_*_length to size_t. * lib/printf-parse.c: Include sys/types.h and xsize.h. (SSIZE_MAX): Define fallback value. (PRINTF_PARSE): Use size_t instead of 'unsigned int' and ssize_t instead of 'int' where appropriate. Check a_allocated, d_allocated against overflow. Reject %m$ argument numbers > SSIZE_MAX + 1. * lib/vasnprintf.c: Include xsize.h. (VASNPRINTF): Use size_t instead of 'unsigned int' where appropriate. Check alloca, malloc, realloc, ENSURE_ALLOCATION arguments against overflow. Avoid wraparound when converting a width or precision from decimal to binary. 2003-11-16 Bruno Haible Update from GNU gettext. * lib/printf-parse.c: Generalize to it can be compiled for wide strings. (PRINTF_PARSE, CHAR_T, DIRECTIVE, DIRECTIVES): New macros. * lib/vasnprintf.c: Generalize to it can be compiled for wide strings. (VASNPRINTF, CHAR_T, DIRECTIVE, DIRECTIVES, PRINTF_PARSE, USE_SNPRINTF, SNPRINTF): New macros. Don't include if the file is used inside libintl. (local_wcslen): New function, for Solaris 2.5.1. (VASNPRINTF): Use it instead of wcslen. 2003-11-16 Bruno Haible * lib/xsize.h (xmax): New function. (xsum, xsum3, xsum4): Declare as "pure" functions. 2003-11-12 Paul Eggert * modules/xalloc (Files): Undo latest change, since xalloc.h no longer needs SIZE_MAX or PTRDIFF_MAX. 2003-11-12 Paul Eggert * m4/xalloc.m4 (gl_PREREQ_XALLOC): Do not require gl_SIZE_MAX or gl_PTRDIFF_MAX. 2003-11-12 Paul Eggert * lib/xstrtol.c (__xstrtol): Remove "break" immediately after "return", to pacify some unknown compiler. Problem reported by Joerg Schilling. 2003-11-12 Paul Eggert * lib/xalloc.h: Do not include or . (xalloc_oversized): Use sizeof (ptrdiff_t) and sizeof (size_t) for the heuristic, rather than PTRDIFF_MAX and SIZE_MAX. This heuristic is just as accurate as far as we know, and it removes a dependency on size_max.m4 and ptrdiff_max.m4. 2003-11-11 Bruno Haible * modules/xsize (Files): Add m4/size_max.m4. * modules/xalloc (Files): Add m4/size_max.m4, m4/ptrdiff_max.m4. 2003-11-11 Bruno Haible * m4/size_max.m4: New file. * m4/ptrdiff_max.m4: New file. * m4/xsize,m4 (gl_XSIZE): Require gl_SIZE_MAX. * m4/xalloc.m4 (gl_PREREQ_XALLOC): New macro. (gl_XALLOC): Invoke it. 2003-11-11 Bruno Haible * lib/xsize.h (SIZE_MAX): Remove fallback definition. * lib/xalloc.h: Include limits.h. Assume SIZE_MAX and PTRDIFF_MAX are defined. 2003-11-10 Paul Eggert * lib/xalloc.h (xalloc_oversized): [! (defined PTRDIFF_MAX && PTRDIFF_MAX < SIZE_MAX)]: Fix off-by-one error that would have rejected some allocations of exactly SIZE_MAX - 2 bytes. From Bruno Haible. [defined PTRDIFF_MAX && PTRDIFF_MAX < SIZE_MAX]: Use SIZE_MAX, not (size_t) -1, since it's defined here. 2003-11-09 Karl Berry * config/mkinstalldirs, depcomp, mdate-sh: update from automake. 2003-11-06 Paul Eggert * lib/xalloc.h [HAVE_STDINT_H]: Include . (xalloc_oversized) [! (PTRDIFF_MAX < SIZE_MAX)]: Reject sizes of exactly SIZE_MAX bytes. * lib/xreadlink.c: Include "xalloc.h" before checking whether SIZE_MAX is defined, since "xalloc.h" now defines SIZE_MAX on modern hosts. 2003-11-05 Bruno Haible * lib/xsize.h: Include limits.h, to avoid a possible collision with SIZE_MAX defined in on Solaris. 2003-11-04 Jim Meyering * modules/sysexits: Use the `$(VAR)' notation for AC_SUBST'd variable names, rather than @VAR@. * modules/poll: Likewise. 2003-11-04 Bruno Haible * modules/xsize: New file. * modules/linebreak: Depend on xsize. * MODULES.html.sh (func_all_modules): Add xsize. 2003-11-04 Bruno Haible * m4/xsize.m4: New file. 2003-11-04 Bruno Haible * lib/xsize.h: New file. * lib/linebreak.c: Include xsize.h. (mbs_possible_linebreaks, mbs_width_linebreaks): Check malloc() argument for overflow. Suggested by Paul Eggert. 2003-11-03 Karl Berry * config/config.{guess,sub}: update from config. 2003-11-03 Jim Meyering * modules/userspec (lib_SOURCES): Add userspec.h. (Include): Add "userspec.h". Improve description. 2003-11-03 Jim Meyering * lib/userspec.c: Include "userspec.h". * lib/userspec.h: New file. 2003-11-03 Bruno Haible * m4/wait-process.m4 (gl_WAIT_PROCESS): Also check for waitid. 2003-11-03 Bruno Haible * lib/wait-process.c (wait_process): Use waitid with WNOWAIT if available, to avoid (extremely rare) race condition. Suggested by Paul Eggert. 2003-11-02 Karl Berry * config/srclist.txt (vasprintf.c): sync broken, sigh. 2003-10-31 Paul Eggert * lib/mountlist.h (struct mount_entry.me_type_malloced): New member. * lib/mountlist.c (SIZE_MAX): Define if not defined already. (read_filesystem_list): Set and use me_type_malloced. Use "sizeof *me" rather than "sizeof (struct mount_entry)" (or whatever the type happens to be), for brevity and consistency. Check for size calculation overflow on Alphas running OSF/1. 2003-10-31 Jim Meyering * lib/hash.c: Include "xalloc.h" for use of xalloc_oversized. * lib/linebuffer.c: Include for declaration of memset. 2003-10-30 Paul Eggert Bruno Haible * lib/vasprintf.c: Include , . (vasprintf): Fail if the resulting length doesn't fit in an 'int'. 2003-10-30 Paul Eggert * m4/host-os.m4 (UTILS_HOST_OS): Change netbsd*-gnu pattern back to netbsd*-gnu*. Suggested by Robert Millan. 2003-10-29 Paul Eggert * modules/group-member: Depend on stdbool. 2003-10-29 Paul Eggert * m4/xalloc.m4 (gl_XALLOC): Undo previous change. 2003-10-29 Paul Eggert * m4/host-os.m4 (UTILS_HOST_OS): Resurrect netbsd*-gnu. Add comments to it, and to knetbsd*-gnu and kfreebsd*-gnu. Remove the '*' from after the 'gnu' in these cases. This fixes some bugs in the previous change, and is based on suggestions by Robert Millan. 2003-10-29 Paul Eggert * lib/xalloc.h (xalloc_oversized): Now a macro, not a function, so that it works even if SIZE_MAX < N. Do not include ; no longer needed. * lib/quotearg.c (quotearg_n_options): Use it. * lib/group-member.c: Include . (free_group_info): Arg is now const *; don't free arg. (get_group_info): Now returns bool and accepts struct group_info *, rather than returning a malloc'ed struct group_info *. All uses changed. Check for overflow in internal size calculation. * lib/getusershell.c (readname): Simplify the code by using x2nrealloc rather than xmalloc/xrealloc. * lib/linebuffer.c (initbuffer, readlinebuffer): Simplify the code by using x2realloc rather than xmalloc/xrealloc. Also, fix a C conformance bug: the old code used a pointer after freeing the storage that it addressed. * lib/hash.c (hash_initialize): Simplify the code by using xalloc_oversized rather than doing it by hand. * lib/getgroups.c (getgroups): Don't use xrealloc, since we don't need the buffer preserved. Use free and xmalloc instead. * lib/quotearg.c (quotearg_n_options): Likewise. Use a simpler test for size overflow. Don't use xalloc_oversized because unsigned int might be wider than size_t (!); this suggests that we should switch from unsigned int to size_t for slot numbers. 2003-10-28 Paul Eggert * m4/host-os.m4 (UTILS_HOST_OS): Identify GNU/KFreeBSD and GNU/KNetBSD. These implementations use glibc atop the FreeBSD and NetBSD kernels. Requested by Richard Stallman. 2003-10-27 Paul Eggert * lib/exclude.c (new_exclude): Use xzalloc rather than xmalloc to allocate the returned structure. Do not allocate a subarray, as x2nrealloc will do that. (add_exclude): Use x2nrealloc to reallocate ex->exclude, instead of xnrealloc. (add_exclude_file): Use x2realloc instead of malloc + xnrealloc. 2003-10-27 Bruno Haible * lib/stdbool_.h: Better support for BeOS. 2003-10-26 Paul Eggert * m4/xalloc.m4 (gl_XALLOC): Requore AC_C_INLINE, since xalloc.h now uses inline. 2003-10-26 Paul Eggert * lib/xalloc.h (xalloc_oversized): New static inline function, for callers that want to do their own size-overflow checking. Include , since xalloc_oversized returns bool. * lib/xalloc.c (array_size_overflow): Remove. All callers changed to use xalloc_oversized. Add two functions x2realloc, x2nrealloc, for programs that grow arrays dynamically by doubling their sizes. * lib/xalloc.h (x2realloc, x2nrealloc): New decls. * lib/xmalloc.c (x2nrealloc_inline, x2nrealloc, x2realloc): New functions. Port to C99 semantics for 'inline' of external functions. Bug reported by Bruno Haible. * lib/xmalloc.c (xnmalloc_inline): New static inline function, with the old contents of xnmalloc. (xnmalloc, xmalloc): Use it. (xnrealloc_inline): New static inline function, with the old contents of xnrealloc. (xnrealloc, xrealloc): Use it. * lib/alloc.c (alloca): xmalloc cannot return NULL, so don't test for that. 2003-10-26 Karl Berry * config/srclist.txt (COPYING.DOC): no longer available from /gd/gnuorg; don't know where the ultimate source is. 2003-10-25 Paul Eggert Fix several address-calculation bugs in the hash modules, plus some minor code cleanup. * lib/hash.h: Include , for bool. * lib/hash.c: Don't include , since hash.h does it now. * lib/hash.h (Hash_hasher, hash_get_n_buckets, hash_get_n_buckets_used, hash_get_n_entries, hash_get_max_bucket_length, hash_get_entries, hash_do_for_each, hash_string, hash_initialize, hash_rehash): Use size_t rather than unsigned. * lib/hash.c (struct hash_table, hash_get_n_buckets, hash_get_n_buckets_used, hash_get_n_entries, hash_get_max_bucket_length, hash_table_ok, hash_print_statistics, hash_get_entries, hash_do_for_each, hash_string, is_prime, next_prime, hash_initialize, hash_rehash, hash_delete, hash_print): Likewise. (SIZE_MAX): Define if not defined. (hash_get_max_bucket_length, hash_table_ok, hash_lookup, hash_get_first, hash_get_next, hash_get_entries, hash_do_for_each, hash_print): Use const * when possible. (hash_string): Use (unsigned char) *P rather than *(unsigned char *) P. (check_tuning): Fix bug: if tuning parameters were very close to 0 or 1, rounding errors could have caused subscript violations. (hash_initialize, allocate_entry, hash_print): Remove unnecessary cast. (hash_initialize): Add 'fail:' label to free table and return NULL, and use it to simplify code. Use calloc rather than clearing the storage ourself. (hash_initialize, hash_rehash): Check for arithmetic overflow in buffer size calculations. * lib/hash-pjw.h (hash_pjw): Use size_t, not unsigned. Include , for size_t. * lib/hash-pjw.c (hash_pjw): Likewise. Switch to method described by Bruno Haible. Include , for CHAR_BIT. (SIZE_BITS): New macro. 2003-10-23 Paul Eggert * m4/getline.m4 (AM_FUNC_GETLINE): Don't include getndelim2.o twice into LIBOBJS; this breaks on some hosts. Problem reported by Derek Robert Price in . This patch can be withdrawn after Autoconf 2.58 is required for gnulib. * m4/getndelim2.m4 (gl_GETNDELIM2): Likewise. 2003-10-21 Paul Eggert * lib/getndelim2.c (getndelim2): When size calculation overflows, ceiling the allocation at NMAX bytes rather than silently discarding input bytes before NMAX is reached. This makes a difference only if NMAX exceeds SIZE_MAX / 2. * lib/obstack.c: Merge from glibc. [defined _LIBC]: Include , not "obstack.h". Add libc_hidden_def (_obstack_newchunk). (_obstack_free) [! defined _LIBC]: Remove. [defined _LIBC]: Make a strong alias from obstack_free, rather than a clone of the function body. (fputs) [defined _LIBC && defined USE_IN_LIBIO]: Remove. [defined _LIBC && !defined USE_IN_LIBIO]: Include . * lib/obstack.h: Indenting cleanup, to make it easier to merge with glibc. (obstack_grow, obstack_grow0): Remove unnecessary parentheses around arg to memcpy. * lib/obstack.h (obstack_1grow_fast): Properly parenthesize arg. (obstack_ptr_grow_fast, obstack_int_grow_fast): Don't use lvalue casts, as GCC plans to remove support for them in GCC 3.5. Reported by Joseph S. Myers. This bug was also present in the non-GCC version, indicating that this code had always been buggy and had never been widely used. (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): Use the fast variant of each macro, rather than copying the definiens of the fast variant; that way, we'll be more likely to catch future bugs in the fast variants. 2003-10-20 Bruno Haible * modules/wait-process: New file. * MODULES.html.sh (func_all_modules): Add wait-process. 2003-10-20 Bruno Haible * m4/wait-process.m4: New file. 2003-10-20 Bruno Haible * lib/wait-process.h: New file, from GNU gettext. * lib/wait-process.c: New file, from GNU gettext. 2003-10-19 Jim Meyering * lib/vasnprintf.c (vasnprintf): Work around losing snprintf on HPUX 10.20. 2003-10-18 Karl Berry * config/config.guess: update from config. 2003-10-16 Paul Eggert * lib/getgroups.c: Include , . (getgroups): First arg is int, not size_t. Don't let 'free' mangle errno. 2003-10-16 Paul Eggert * README: Mention that gnulib assumes that (foo *) NULL + 0 == NULL. 2003-10-16 Karl Berry * config/config.{guess,sub}: update from config. 2003-10-16 Jim Meyering * lib/xmalloc.c: Include , for declarations of memset and memcpy. 2003-10-15 Paul Eggert * lib/exclude.c: Do not include or . (SIZE_MAX): Remove. (new_exclude, add_exclude_file): Initial size no longer needs to be a power of 2. (add_exclude, add_exclude_file): Use xnrealloc instead of rolling our own address arithmetic overflow checking. * lib/fnmatch.c (SIZE_MAX): Define if standard headers don't. (fnmatch): Do not alloca more than 2000 wide characters; instead, use malloc for large buffers. Check for address arithmetic overflow, and return -1 with errno set to ENOMEM in that case. * lib/fnmatch_loop.c (ALLOCA_LIMIT): New macro. (NEW_PATTERN): Do not alloca more than 8000 bytes; instead, return -1. Check for address arithmetic overflow. 2003-10-14 Paul Eggert Handle invalid suffixes and overflow independently, so that callers can treat them independently as needed. Fix some bugs in suffix handling, e.g., "100k@" was not diagnosed as an invalid suffix for a human-readable blocksize. The major caller-visible change is the addition of a new LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW enum value, indicating that both overflow and suffix chars were found. * lib/human.c (humblock): Don't check separately for invalid suffix char; that is xstrtoumax's job (now that its bug is fixed). * lib/xstrtoimax.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM) [defined INTMAX_MAX]: New macros. * lib/xstrtol.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM, TYPE_MINIMUM, TYPE_MAXIMUM): New macros. (bkm_scale, bkm_scale_by_power): Return strtol_error, not int. (bkm_scale, bkm_scale_by_power, __xstrtol): Return maximal values if overflow occurs, as it's what __strtol does and it's more useful in practice. (__xstrtol): If __strtol reports some error other than ERANGE, reflect it to the caller as LONGINT_INVALID. If it reports ERANGE, continue the rest of parsing, and report LONGINT_OVERFLOW | LONGINT_INVALID_SUFFIX_CHAR if both errors occur. * lib/xstrtol.h (LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW): New enum value. (_STRTOL_ERROR): Handle it. Abort when given unknown error codes. * lib/xstrtoul.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM): New macros. * lib/xstrtoumax.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM) [defined UINTMAX_MAX]: New macros. 2003-10-14 Bruno Haible * modules/fatal-signal: Add m4/sig_atomic_t.m4 to file list. 2003-10-14 Bruno Haible * m4/sig_atomic_t: New file, from GNU gettext. * m4/fatal-signal.m4 (gl_FATAL_SIGNAL): Require gt_TYPE_SIG_ATOMIC_T. 2003-10-14 Bruno Haible * lib/fatal-signal.h: Improved comments. Suggested by Paul Eggert. * lib/fatal-signal.c: Use sig_atomic_t. Suggested by Paul Eggert. Also use volatile where needed. 2003-10-12 Paul Eggert * modules/xalloc: Do not depend on 'exit'. Depend on 'stdbool'. Change maintainer from Bruno Haible to 'all'. 2003-10-12 Paul Eggert * m4/xalloc.m4 (gl_PREREQ_XMALLOC): Require AC_C_INLINE. 2003-10-12 Paul Eggert * lib/xalloc.h (xnmalloc, xzalloc, xnrealloc, xclone): New decls. (XMALLOC, XCALLOC, XREALLOC, XFREE, CCLONE, CLONE): Deprecate, and define in terms of the other primitives. * lib/xmalloc.c: Include stdbool.h; do not include exit.h. (SIZE_MAX): Define if not already defined. (array_size_overflow): New function. (xalloc_die): Abort instead of exiting if 'error' returns. (xnmalloc, xnrealloc, xzalloc, xclone): New functions. (xmalloc, xrealloc): Use them. (xcalloc): Check for address arithmetic overflow. * lib/xstrdup.c (xstrdup): Use xclone, since memcpy should be a bit faster than strcpy. 2003-10-10 Simon Josefsson * modules/argp (Depends-on): Add restrict and strcase. 2003-10-10 Simon Josefsson * m4/argp.m4: Add AC_C_INLINE. 2003-10-08 Paul Eggert Merge getpass from libc, plus a few fixes. * lib/getpass.c (HAVE_STDIO_EXT) [_LIBC]: Define to 1. Include . Include if HAVE_STDIO_H, otherwise define __fsetlocking to empty. [_LIBC]: Do not include "getline.h" or "unlocked-io.h", but do include . Do not include ; not needed. [_LIBC]: Include . (NOTCANCEL_MODE): New macro. (flockfile, funlockfile) [_LIBC]: New macros. (__libc_cleanup_push, __libc_cleanup_pop, __getline, __tcgetattr) [!_LIBC]: New macros. (call_fclose): New function. (getpass): Use it. Save tty stream separately; this simplifies the code and makes it more reliable if stdin happens to equal stdout. Invoke __fsetlocking on tty. Handle thread cancellation if needed. Namespace cleanup (use __tcgetattr, __getline). Use bool for Booleans. [USE_IN_LIBIO]: Handle wide streams. [!_LIBC]: Unconditionally do the fseek, since we don't know what stream might go where. * lib/unlocked-io.h: Include , so that the caller doesn't have to include before us. (clearerr_unlocked, feof_unlocked, ferror_unlocked, fflush_unlocked, fgets_unlocked, fputc_unlocked, fputs_unlocked, fread_unlocked, fwrite_unlocked, getc_unlocked, getchar_unlocked, putc_unlocked, putchar_unlocked): Define to the unlocked counterpart if not declared, so that we can use getpass.c code from libc without rewriting it. (flockfile, ftrylockfile, funlockfile): New macros. 2003-10-08 Paul Eggert * modules/getpass: Depend on stdbool. 2003-10-08 Paul Eggert * m4/getpass.m4 (gl_PREREQ_GETPASS): Check for stdio_ext.h. 2003-10-07 Karl Berry * config/config.{guess,sub}: update from config. 2003-10-06 Jim Meyering Bruno Haible This lets translators provide better translations for the "Written by ..." part of --version output. * lib/version-etc.h: Include stdarg.h. (version_etc_copyright): Declare as readonly. (version_etc): Make this function variadic with a NULL-terminated list of author name strings. (version_etc_va): New declaration. * lib/version-etc.c: Include stdarg.h, stdlib.h. (version_etc_copyright): Declare as readonly. (version_etc_va): New function. Provide a different translatable string for each possible number of authors < 10. Abbreviate when there are 10 authors or more. (version_etc): Make this function variadic. Call version_etc_va. Suggestion from Gary V. Vaughan. * lib/long-options.h (parse_long_options): Change prototype: the authors string is moved to the end and becomes variadic. * lib/long-options.c: Include stdarg.h. (parse_long_options): Make this function variadic, too. Call version_etc_va, not version_etc. 2003-10-06 Bruno Haible * modules/version-etc-2: Remove file. * MODULES.html.sh (func_all_modules): Remove version-etc-2. 2003-10-06 Bruno Haible * modules/fatal-signal: New file. * MODULES.html.sh (func_all_modules): Add fatal-signal. 2003-10-06 Bruno Haible * m4/fatal-signal.m4: New file. * m4/signalblocking.m4: New file, from GNU gettext. 2003-10-06 Bruno Haible * lib/version-etc-2.h: Remove file. * lib/version-etc-2.c: Remove file. 2003-10-06 Bruno Haible * lib/fatal-signal.h: New file, from GNU gettext. * lib/fatal-signal.c: New file, from GNU gettext. 2003-10-05 Paul Eggert * README: Rework advice for preventing empty .o files. Don't recommend ELIDE constructs. Recommend , not . 2003-10-04 Karl Berry * lib/argp*: update from libc. 2003-10-04 Karl Berry * config/config.{guess,sub}: update from config. 2003-10-02 Bruno Haible * modules/lchown (Include): Add lchown.h. * modules/time_r (Include): Use "..." syntax. * modules/xgetdomainname (Include): Add xgetdomainname.h. 2003-10-01 Simon Josefsson * MODULES.html.sh (func_all_modules): Move gethostname from section 'based on' to section 'lacking' POSIX:2001. 2003-10-01 Larry Jones * lib/getpass.c (getpass): Use a no-op fseek when switching from input to output mode on the same stream. 2003-09-29 Paul Eggert * lib/strftime.c (tm_diff) [! HAVE_TM_GMTOFF]: Fix arg typo in previous patch. 2003-09-28 Jim Meyering * lib/error.c: Correct cpp indentation. 2003-09-27 Paul Eggert * modules/free: New file. 2003-09-27 Paul Eggert * m4/free.m4: New file. 2003-09-27 Paul Eggert * lib/minmax.h (MIN, MAX) [__STDC__ && defined __GNUC__ && __GNUC__ >= 2]: Omit the special code that used __typeof__, since we worry that it could be more trouble than it's worth. See: http://mail.gnu.org/r/bug-gnulib/2003-01/msg00090.html http://mail.gnu.org/r/bug-gnulib/2003-01/msg00095.html * lib/free.c: New file. 2003-09-27 Oskar Liljeblad Trivial fixes to Makefile.am parts of module listings. * modules/strstr: Append strstr.h to lib_SOURCES. * modules/strcase: Likewise, for strcase.h. 2003-09-27 Karl Berry * config/mkinstalldirs: update from automake. 2003-09-26 Paul Eggert * lib/error.c (SIZE_MAX) [!defined SIZE_MAX]: Define. (error_tail): Do not loop, reallocating temporary buffer, since the output cannot contain more wide characters than the input contains bytes, the size must be big enough already. This avoids one potential size overflow calculation. Check for size overflow when calculating temporary buffer size. Free temporary buffer when done, if it was allocated with malloc; this plugs a memory leak. Remove casts from void * to pointers, that are no longer needed now that we're assuming C89 or better. Merge error changes from glibc. * lib/error.c, error.h: Update copyright notice header to match glibc. * lib/error.c [defined _LIBC]: Include , . (error, error_at_line) [defined _LIBC && defined __libc_ptf_call]: Disable cancellation while printing error. * lib/error.h: Prepend __ to parameter names. 2003-09-26 Jim Meyering * lib/error.c (error_tail): Move some declarations into inner scope where the local variables are used. 2003-09-26 Bruno Haible * m4/stpncpy.m4 (gl_FUNC_STPNCPY): Add comments about the AIX stpncpy(). Don't define stpncpy through config.h; it's now done through stpncpy.h. 2003-09-26 Bruno Haible * lib/stpncpy.h (gnu_stpncpy): New declaration. (stpncpy): Define as alias for gnu_stpncpy. * lib/stpncpy.c [!_LIBC]: Define gnu_stpncpy, not stpncpy. 2003-09-25 Simon Josefsson * lib/xgetdomainname.h: New file. * lib/xgetdomainname.c: New file. 2003-09-25 Simon Josefsson Bruno Haible * modules/getdomainname: New file. * modules/xgetdomainname: New file. * MODULES.html.sh (func_all_modules): Add getdomainname, xgetdomainname. 2003-09-25 Simon Josefsson Bruno Haible * m4/getdomainname.m4: New file. 2003-09-25 Simon Josefsson Bruno Haible * lib/getdomainname.h: New file. * lib/getdomainname.c: New file. 2003-09-25 Karl Berry * lib/argp-fmtstream.c, argp-help.c: update from libc. 2003-09-25 Karl Berry * config/install-sh: update from automake. 2003-09-25 Bruno Haible * modules/version-etc-2: New file, from modules/version-etc with modifications. * MODULES.html.sh (func_all_modules): Add version-etc-2. 2003-09-25 Bruno Haible * lib/version-etc-2.h: New file, from version-etc.h with modifications. * lib/version-etc-2.c: New file, from version-etc.c with modifications. 2003-09-24 Simon Josefsson * modules/xgethostname: Add xgethostname.h. 2003-09-24 Paul Eggert * lib/linebuffer.c (freebuffer): Don't free the argument, just the buffer associated with the argument. Bug reported by Simon Josefsson. 2003-09-24 Paul Eggert * README: Document assumptions that 'int' is at least 32 bits wide, that integer arithmetic is 2's complement without overflow, that there are no holes in integer values, that adding sizes of two nonoverlapping objects can't overflow, and that all-bits-zero yields scalar zero. Fix spelling and capitalization typos. 2003-09-19 Karl Berry * lib/argp.h: update from libc. 2003-09-17 Paul Eggert * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Call AC_BEFORE first, to avoid spurious warnings like "AC_RUN_IFELSE was called before gl_USE_SYSTEM_EXTENSIONS" from autoreconf. 2003-09-17 Paul Eggert * gnulib-tool: Use "test -h", not "test -L", for portability to Solaris 8 /bin/sh. (This bug is fixed in Solaris 9.) (tags_regexp): Remove, since \| doesn't conform to POSIX. (sed_extract_prog): Issue s commands one-by-one, rather than using \| in one s command. 2003-09-16 Paul Eggert * lib/linebuffer.c (readlinebuffer): Return NULL immediately upon input error, instead of returning NULL the next time we are called (and therefore losing track of errno). 2003-09-16 Bruno Haible * gnulib-tool (func_create_testdir): Warn about duplicated dependencies. 2003-09-15 Paul Eggert * modules/argmatch, modules/fatal, modules/obstack, modules/xalloc, modules/xgethostname: Sort dependencies by importance, not alphabetically. 2003-09-15 Paul Eggert * lib/getndelim2.c (getndelim2): Don't trash errno when a read fails, so that the caller gets the proper errno. * lib/readutmp.c (read_utmp): Likewise. Check for fstat error. Close stream and free storage when failing. 2003-09-14 Karl Berry * config/srclist.txt (strdup.c): disable for c89 changes. 2003-09-14 Jim Meyering * lib/getloadavg.c: Correct cpp indentation. * lib/strdup.c: Likewise. * lib/vasnprintf.c: Likewise. 2003-09-14 Bruno Haible * modules/fwriteerror: New file. * MODULES.html.sh (func_all_modules): Add fwriteerror. 2003-09-14 Bruno Haible * lib/fwriteerror.h: New file. * lib/fwriteerror.c: New file. 2003-09-12 Paul Eggert * modules/argmatch, modules/exitfail, modules/fatal, modules/obstack, modules/xgethostname, modules/xalloc: Depend on exit. 2003-09-12 Paul Eggert * m4/error.m4: Require AC_FUNC_STRERROR_R rather than invoking it. * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Require AC_AIX and AC_MINIX, too, so that their extensions are available. * m4/prereq.m4 (jm_PREREQ_ADDEXT): Remove. All uses removed. This macro has been superseded by gl_BACKUPFILE. More patches to assume C89 or better. * m4/error.m4 (gl_ERROR): Don't check for vprintf. * m4/check-decl.m4 (jm_CHECK_DECLS): Include , unconditionally. * m4/closeout.m4 (gl_CLOSEOUT): Don't check for stdlib.h. * m4/gettimeofday.m4 (AC_FUNC_GETTIMEOFDAY_CLOBBER): Include , unconditionally. * m4/lstat.m4 (gl_PREREQ_LSTAT): Don't check for stdlib.h, free. * m4/readdir.m4 (GL_FUNC_READDIR): Don't check for string.h. * m4/readutmp.m4 (gl_PREREQ_READUTMP): Don't check for standard C headers or for string.h. * m4/strtoumax.m4 (gl_PREREQ_STRTOUMAX): Don't check for stdlib.h or strtoul. * m4/mkstemp.m4 (jm_PREREQ_TEMPNAME): Do not require standard C headers. * m4/strdup.m4 (gl_PREREQ_STRDUP): Likewise. * m4/userspec.m4 (gl_USERSPEC): Likewise. * m4/xalloc.m4 (gl_PREREQ_XMALLOC): Likewise. * m4/xstrtod.m4 (gl_XSTRTOD): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise. * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Don't check for limits.h, memcpy, memset. (jm_FUNC_GNU_STRFTIME): Don't require standard C headers. * m4/strtod.m4 (gl_FUNC_STRTOD): Do not check for float.h. * m4/strtoimax.m4 (gl_PREREQ_STRTOIMAX): Do not check for stdlib.h, strtol. * m4/strtol.m4 (gl_FUNC_STRTOL): Do not check for limits.h. * m4/userspec.m4 (gl_USERSPEC): Do not check for string.h. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Do not check for string.h, strtol, strtoul. 2003-09-12 Paul Eggert * lib/argmatch.c, fatal.c, xgethostname.c, xmalloc.c: Include exit.h. * lib/obstack.c [!defined _LIBC]: Likewise. * lib/argmatch.c (EXIT_FAILURE): Remove; now done by exit.h * lib/exitfail.c, fatal.c, xgethostname.c, xmalloc.c: Likewise. * lib/exitfail.c: Don't include stdlib.h; no longer needed. More changes to assume C89 or better. * lib/error.c (error_tail): Assume vprintf. * lib/argmatch.c (getenv): Remove decl. * lib/progreloc.c (get_full_program_name): Define via prototype. * lib/setenv.c (clearenv): Likewise. * lib/stpncpy.c: Do not include or ; not needed. * lib/strdup.c: Include , unconditionally. (malloc, memcpy): Remove decls. * lib/strftime.c (HAVE_LIMITS_H, STDC_HEADERS) [defined _LIBC]: Remove. (HAVE_MEMCPY) [defined emacs && !defined HAVE_BCOPY]: Remove. Include , , , unconditionally. (memcpy): Remove macro. (MEMCPY) [!defined COMPILE_WIDE]: Define to memcpy unconditionally. (__P): Remove. All uses removed. (PTR): Remove. All uses changed to void *. (CHAR_BIT, NULL): Remove. (spaces, zeros, memset_space, memset_zero) [!defined memset && !defined HAVE_MEMSET && !defined _LIBC]: Remove. (LOCALE_PARAM, LOCALE_PARAM_DECL): Remove. (memcpy_lowcase, memcpy_uppcase, tm_diff, iso_week_days): Define with prototype. Remove now-unnecessary prototype decl. (extra_args_spec): Assume ANSI C. All uses changed. (extra_args_spec_iso): Remove. (my_strftime, emacs_strftimeu): Define via prototype. * lib/strtod.c: Include , , unconditionally. (DBL_MAX, DBL_MIN, HUGE_VAL, NULL): Remove decls. * lib/strtoimax.c: Include unconditionally. (strtoul, strtol): Remove decls. * lib/strtol.c (STDC_HEADERS, HAVE_LIMITS_H, NULL, ULONG_MAX, LONG_MAX): Remove. Include , , , unconditionally. (LOCALE_PARAM_DECL): Remove. All uses changed to LOCALE_PARAM_PROTO. (LOCALE_PARAM_PROTO): New macro. (INTERNAL, INTERNAL1, WEAKNAME): Assume ANSI C, not K&R. (INTERNAL (strtol), strtol): Define with a prototype. (PARAMS): Remove. All uses removed. * lib/tempname.c: Include unconditionally. * lib/userspec.c: Include , unconditionally. * lib/xgethostname.c (main): Define with a prototype. * lib/xmalloc.c: Include "xalloc.h" first, to check interface. Include unconditionally. (calloc, malloc, realloc, free): Remove decls. * lib/xstrtod.c: Include "xstrtod.h" first, to check interface. Include unconditionally. Sort include file names. (strtod): Remove. (xstrtod): Define with a prototype. * lib/xstrtol.c: Include , unconditionally. (strtol, strtoul): Remove decls. 2003-09-11 Paul Eggert More patches to assume C89 or better. * m4/strndup.m4 (gl_PREREQ_STRNDUP): Remove STDC_HEADERS check. * m4/strnlen.m4 (gl_PREREQ_STRNLEN): Don't check for memory.h, string.h, memchr, STDC_HEADERS. 2003-09-11 Paul Eggert * lib/strndup.c: Don't include , . Include , unconditionally. Remove now-unnecessary cast to char *. * lib/strnlen.c: Include unconditionally. * lib/yesno.c (yesno): Define with a prototype. 2003-09-11 Bruno Haible * config/srclist.txt (setenv.c, unsetenv.c): Disable for the moment. 2003-09-10 Jim Meyering * lib/error.c: Correct indentation of cpp directives. 2003-09-10 Bruno Haible * m4/strcspn.m4 (gl_PREREQ_STRCSPN): Remove check. * m4/strpbrk.m4 (gl_PREREQ_STRPBRK): Remove check. * m4/strstr.m4 (gl_PREREQ_STRSTR): Remove check. * m4/unicodeio.m4 (gl_UNICODEIO): Remove check. * m4/setenv.m4 (gl_PREREQ_SETENV, gl_PREREQ_UNSETENV): Remove and checks. * m4/xreadlink.m4 (gl_XREADLINK): Remove check. * m4/yesno.m4 (gl_YESNO): Remove check. 2003-09-10 Bruno Haible * lib/strcspn.c: Include unconditionally. * lib/strpbrk.c: Include unconditionally. * lib/strstr.c: Include unconditionally. * lib/unicodeio.c: Include unconditionally. * lib/setenv.c: Include and unconditionally. * lib/unsetenv.c: Likewise. * lib/xreadlink.c: Include unconditionally. * lib/yesno.c: Include unconditionally. (rpmatch): Add prototype. 2003-09-09 Paul Eggert More patches to assume C89 or better. * m4/getcwd.m4 (AC_FUNC_GETCWD_NULL): Don't check for stdlib.h. * m4/getopt.m4 (gl_GETOPT): Don't check for string.h. * m4/getugroups.m4 (gl_GETUGROUPS): Do not check for standard C headers or for string.h. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Do not check for stdlib.h. * m4/group-member.m4 (gl_PREREQ_GROUP_MEMBER): Do not require standard C headers. * m4/hard-locale.m4 (gl_HARD_LOCALE): Do not check for stdlib.h, string.h. * m4/hash.m4 (gl_HASH): Do not check for stdlib.h, malloc, free. * m4/human.m4 (gl_HUMAN): Do not check for stdlib.h, string.h, getenv. * m4/idcache.m4 (gl_IDCACHE): Do not check for standard C headers, or for string.h. * m4/long-options.m4 (gl_LONG_OPTIONS): Do not check for stdlib.h. * m4/makepath.m4 (gl_MAKEPATH): Do not check for string.h or standard C headers. * m4/md5.m4 (gl_MD5): Don't check for limits.h, standard C headers, memcpy. * m4/sha.m4 (gl_SHA): Don't check for standard Cheaders, memcpy. * m4/memchr.m4 (jm_PREREQ_MEMCHR): Don't check for limits.h, stdlib.h. * m4/memcmp.m4 (gl_PREREQ_MEMCMP): Don't check for string.h. * m4/memcoll.m4 (gl_MEMCOLL): Likewise. * m4/memrchr.c (gl_PREREQ_MEMRCHR): Don't check for limits.h. * m4/mkdir-slash.m4 (gl_PREREQ_MKDIR): Don't check for stdlib.h, string.h, free. * m4/mktime.m4 (gl_PREREQ_MKTIME): Don't check for standard C headers. * m4/modechange.m4 (gl_MODECHANGE): Don't check for standard C headers. * m4/mountlist.m4 (gl_PREREQ_MOUNTLIST_EXTRA): Don't check for standard C headers, or for string.h. * m4/obstack.m4 (gl_OBSTACK): Don't check for stddefe.h, string.h. (gl_PREREQ_OBSTACK): Don't check for stdlib.h. * m4/path-concat.m4 (gl_PATH_CONCAT): Don't check for standard C headers, memory.h, stdlib.h, string.h, strings.h. * m4/posixtm.m4 (gl_POSIXTM): Don't check for stdlib.h, string.h. * m4/posixver.m4 (gl_POSIXVER): Don't check for getenv. * m4/putenv.m4 (gl_PREREQ_PUTENV): Don't check for string.h, memcpy, strchr. * m4/readtokens.m4 (gl_READTOKENS): Don't check for standard C headers, memory.h, string.h. * m4/regex.m4 (jm_PREREQ_REGEX): Do not check for limits.h, string.h. * m4/rename.m4 (gl_PREREQ_RENAME): Do not check for stdlib.h, string.h, free. * m4/rpmatch.m4 (gl_PREREQ_RPMATCH): Don't check for standard C headers. * m4/same.m4 (gl_SAME): Don't check for stdlib.h, string.h, free. * m4/save-cwd.m4 (gl_SAVE_CWD): Don't check for standard C headers. * m4/savedir.m4 (gl_SAVEDIR): Don't check for standard C headers. * m4/strchrnul.m4 (gl_PREREQ_STRCHRNUL): Don't check for string.h. * m4/xgetcwd.m4 (gl_XGETCWD): Don't check for stdlib.h. 2003-09-09 Paul Eggert More K&R removal. * lib/acosl.c (main): Use a prototype. * lib/asinl.c, cosl.c, expl.c, frexpl.c, ldexpl.c, sinl.c, tanl.c: Likewise. * lib/getloadavg.c (getloadavg, main): Define via prototypes. * lib/getopt.h (struct option.name): Assume C89, and use 'const'. (getopt, etopt_long, getopt_long_only, _getopt_internal) [defined __GNU_LIBRARY__]: Assume C89, so we can always declare with a prototype. * lib/getopt.c (const): Remove macro. Include unconditionally. (my_index): Remove; all uses changed to strchr. (strlen): Remove decl. (exchange): Remove forward decl; no longer needed. (exchange, _getopt_initialize, _getopt_internal, getopt, main): Define with prototype. * lib/getopt1.c (const): Remove macro. (getopt_long, getopt_long_only, main): Define with prototype. * lib/getugroups.c: Include unconditionally. * lib/getusershell.c: Include unconditionally. (getusershell, setusershell, endusershell, readname, main): Define with prototypes. * lib/group-member.c: Include group-member.h first. Include unconditionally. * lib/hard-locale.c: Include hard-locale.h first. Include , unconditionally. * lib/hash.c (free, malloc): Remove decls. Include unconditionally. * lib/human.c: Include , unconditionally. (getenv): Do not declare. * lib/idcache.c: Include unconditionally. * lib/long-options.c: Include long-options.h first, to test interface. Include unconditionally. * lib/makepath.c: Include makepath.h first, to test interface. Include and unconditionally. * lib/linebuffer.c: Include . (free): Remove decl. * lib/malloc.c: Include , for malloc; don't bother with stddef.h. rpl_malloc returns void *, not char *. * lib/realloc.c (rpl_realloc): Likewise. Also, define with a prototype. * lib/md5.h: Include unconditionally. (UINT_MAX_32_BITS): Don't worry about non-__STDC__ case. (__P): Remove; all uses removed. * lib/md5.c: Include "md5.h" first. (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream, md5_buffer, md5_process_bytes, md5_process_block): Define with prototypes. * lib/sha.h (__P): Remove all uses. (It wasn't defined??) * lib/sha.c: Include "sha.h" first. Include , unconditionally. * lib/memchr.c (__ptr_t): Remove; all uses changed to void *. * lib/memcmp.c (__ptr_t): Likewise. * lib/memrchr.c (__ptr_t): Likewise. * lib/memchr.c, memcmp.c, memcoll.c, memrchr.c: Include unconditionally. * lib/memchr.c, memrchr.c: Include unconditionally. * lib/memchr.c: Include unconditionally. * lib/memchr.c (LONG_MAX): Remove. * lib/memrchr.c (LONG_MAX): Likewise. * lib/memchr.c (__memchr): Define via a prototype. * lib/memrchr.c (__memrchr): Likewise. * lib/memcmp.c (__P): Remove, and remove all uses. (memcmp_bytes, memcmp_common_alignment, memcmp_not_common_alignment): Remove forward decls; no longer needed. * lib/memcpy.c, memmove.c, memset.c: Include . Use types required by C89 in prototype. * lib/mkdir.c: Include , unconditionally. * lib/savedir.c: Likewise. * lib/mkdir.c (free): Remove decl. * lib/rmdir.c (rmdir): Define with a prototype. * lib/savedir.c: Include savedir.h first, to test interface. * lib/mktime.c (STDC_HEADERS): Remove. Include , unconditionally. * lib/modechange.c: Include unconditionally. (malloc): Remove decl. * lib/mountlist.c: Include , unconditionally. (free): Remove decl. * lib/obstack.h (PTR_INT_TYPE) [!defined __PTRDIFF_TYPE__]: Define to ptrdiff_t, without bothering to check HAVE_STDDEF_H. (This type really should be intptr_t, but that's a C99ism.) (_obstack_memcpy): Remove: all uses changed to memcpy. Include unconditionally. (struct obstack): Assume __STDC__ for types of members chunkfun, freefun, extra_arg. (_obstack_newchunk, _obstack_free, _obstack_begin, _obstack_begin_1, _obstack_memory_used, obstack_alloc_failed_handler, obstack_init, obstack_begin, obstack_specify_allocation, obstack_specify_allocation_with_arg, obstack_chunkfun, obstack_freefun, obstack_free) [! (defined __STDC__ && __STDC__)]: Remove unprototyped decls and the macros that use them. * lib/obstack.c (POINTER): Remove. All uses changed to void *. (obstack_alloc_failed_handler, CALL_CHUNKFUN, CALL_FREEFUN, _obstack_begin, _obstack_begin_1, _obstack_allocated_p) (defined __STDC__ && __STDC__)]: Remove nonprototyped code. Include unconditionally. (_obstack_begin, _obstack_begin_1, _obstack_newchunk, _obstack_allocated_p, _obstack_free, obstack_free, _obstack_memory_used, print_and_abort): Define using prototypes. (obstack_1grow, obstack_1grow_fast, obstack_alloc, obstack_base, obstack_blank, obstack_blank_fast, obstack_copy, obstack_copy0, obstack_finish, obstack_grow, obstack_grow0, obstack_make_room, obstack_next_free, obstack_object_size, obstack_room) [0]: Remove unused, unprototyped code. * lib/path-concat.c: Include , unconditionally. * lib/physmem.c (physmem_total, physmem_available, main): Define with prototypes. * lib/posixtm.c: Include , unconditionally. (main): Define with a prototype. * lib/posixver.c (getenv): Remove decl. * lib/putenv.c (malloc): Returns void *, not char *. Include unconditionally. (strchr, memcpy, NULL): Do not define. * lib/readtokens.c: Include readtokens.h first, to test interface. Include , unconditionally. (init_tokenbuffer): Define with a prototype. * lib/regex.c (PARAMS): Remove. All uses removed. All uses of _RE_ARGS removed, too. Include , , , unconditionally. (bzero): Assume memset exists. (memcmp, memcpy, NULL): Remove. (SIGN_EXTEND_CHAR): Remove; all uses replaced by casts to signed char, or assignments to local vars of type signed char. (init_syntax_once, PREFIX(extract_number_and_incr), PREFIX(print_partial_compiled_pattern), PREFIX(print_compiled_pattern), PREFIX(print_double_string), convert_mbs_to_wcs, print_fastmap, re_set_syntax, PREFIX(regex_grow_registers), PREFIX(regex_compile), PREFIX(store_op1), PREFIX(store_op2), PREFIX(insert_op1), PREFIX(insert_op2), PREFIX(at_begline_loc_p), PREFIX(at_endline_loc_p), group_in_compile_stack, insert_space, wcs_compile_range, byte_compile_range, truncate_wchar, PREFIX(re_compile_fastmap), re_compile_fastmap, re_set_registers, re_search, re_search_2, PREFIX(re_search_2), re_match, re_match_2, count_mbs_length, wcs_re_match_2_internal, byte_re_match_2_internal, PREFIX(group_match_null_string_p), PREFIX(alt_match_null_string_p), PREFIX(common_op_match_null_string_p), PREFIX(bcmp_translate), re_compile_pattern, re_comp, re_exec, regcomp, regexec, regerror, regfree, PREFIX(extract_number)): Define with prototype. Remove now-unnecessary declaration, if any. (byte_compile_range, PREFIX(regex_compile), re_comp, re_exec, regcomp, regexec): Remove now-unnecessary casts among pointer types. * lib/regex.h (_RE_ARGS): Remove. All uses removed. * lib/rename.c: Include , unconditionally. (free): Remove decl. * lib/rpmatch.c: Include unconditionally. * lib/same.c: Include , unconditionally. (free): Remove decl. * lib/save-cwd.c: Include unconditionally. * lib/xgetcwd.c: Likewise. * lib/stat.c: Include , unconditionally. (free): Remove decl. * lib/strchrnul.c (strchrnul): Define with a prototype. Fix bug: c_in was not converted to char before searching. The following changes are not K&R related: * lib/group-member.h: Include , so that this file is self-contained. * lib/makepath.h: Likewise. * lib/getusershell.c (readname, default_index, line_size, readname): Use size_t, not int, for sizes. (readname): If the size overflows, report an error instead of looping forever. 2003-09-09 Paul Eggert * config/srclist.txt: Do not get getopt.h, getopt1.c, or regex.h from libc. 2003-09-09 Paul Eggert * README: New section: portability guidelines. 2003-09-09 Derek Robert Price * m4/getndelim2.m4 (gl_PREREQ_GETNDELIM2): Assume stdlib.h per the C89 spec. 2003-09-09 Derek Robert Price * lib/getndelim2.c: Assume stdlib.h per the C89 spec. 2003-09-08 Paul Eggert Assume C89 or better; remove K&R cruft. A few of these changes were first proposed by Derek Robert Price in . * lib/addext.c: Include unconditionally. * lib/backupfile.c: Include , unconditionally. Don't declare getenv or malloc. * lib/alloca.c: Include , unconditionally. (POINTER_TYPE, pointer): Remove; all uses changed to void *. (NULL): Remove. (find_stack_direction, alloca): Use prototypes. * lib/atexit.c (atexit): Define using a prototype. * lib/basename.c, dirname.c, stripslash.c: Include unconditionally. * lib/bcopy.c: Include . (bcopy): Define with prototype, using 'const' and 'void' and 'size_t'. * lib/canon-host.c: Include , unconditionally. * lib/error.h (error, error_at_line, error_print_progname) [! (defined (__STDC__) && __STDC__)]: Remove decls. * lib/error.c: Include error.h first, to check interface. Include , , unconditionally. (VA_START): Remove; all uses changeed to va_start. (exit, strerror): Remove decls. (error_print_progname): Prototype uncondionally. Don't include ; no longer needed. (private_strerror): Remove. (error_tail): Always define. (error, error_at_line): Assume C89 or better; always use prototypes. * lib/fatal.c: Include "fatal.h" first, to test interface. Include , , unconditionally. (VA_START): Remove; all uses changed to va_start. [! (HAVE_VPRINTF || HAVE_DOPRNT || _LIBC)]: Remove support for this case. (exit): Remove decl. (fatal): Prototype unconditionally. Assume va_start works. Abort at end, to pacify gcc. * lib/euidaccess.c (main): Define with a prototype. * lib/exclude.c: Include , unconditionally. * lib/exitfail.c: Include unconditionally. * lib/fnmatch_.h (__P): Remove. All uses changed to assume prototypes. * lib/fnmatch.c: Include fnmatch.h first, to test interface. Include , , unconditionally. (getenv): Remove decl. (fnmatch): Define using a prototype. * lib/fnmatch_loop.c (FCT): Remove forward decl; no longer needed. (FCT): Define using a prototype. * lib/getdate.y: Include , unconditionally. * lib/gethostname.c: Include . (gethostname): Define with prototype. Length is size_t, not int. 2003-09-08 Paul Eggert Assume C89 or better; remove K&R cruft. * m4/alloca.m4 (gl_PREREQ_ALLOCA): Don't check for stdlib.h, string.h. * m4/backupfile.m4 (gl_BACKUPFILE): Don't check for stdlib.h, string.h, getenv, malloc. * m4/dirname.m4 (gl_DIRNAME): Don't check for string.h or C standard headers. * m4/canon-host.m4 (gl_CANON_HOST): Don't check for string.h, stdlib.h. * m4/error.m4 (jm_PREREQ_ERROR): Do not require STDC headers, and do not check for strerror. * m4/exclude.m4: Do not check for stdlib.h, string.h, strings.h. * m4/exitfail.m4 (gl_EXITFAIL): Do not check for stdlib.h. * m4/fatal.m4 (gl_FATAL): Do not require STDC headers, and do not check for doprnt or vprintf. * m4/fnmatch.m4 (gl_PREREQ_FNMATCH_EXTRA): Remove. All uses removed. * m4/getdate.m4 (gl_GETDATE): Don't check for stdlib.h or string.h. 2003-09-08 Paul Eggert * lib/getversion.c: Remove; was migrated to backupfile.c in 1997. getversion.c should have been removed then, but was accidentally preserved. * lib/utime.c [!HAVE_UTIMES_NULL]: Include , . (utime_null): Fix typo: 'st' was sometimes called 'sb'. 2003-09-08 Karl Berry * config/config.sub, config.guess, srclistvars.sh: update from savannah config, forget about prep. * config/depcomp, missing: update from automake. 2003-09-07 Paul Eggert * modules/time_r: Depend on 'restrict'. Fix from Simon Josefsson in . 2003-09-07 Paul Eggert * lib/time_r.c (gmtime_r, localtime_r): Fix silly typo: missing arg to copy_tm_result. Bug reported by Simon Josefsson in . 2003-09-06 Paul Eggert * m4/time_r.m4: New file. * m4/mktime.m4 (gl_PREREQ_MKTIME): Remove check for limits.h. * m4/timegm.m4 (gl_FUNC_TIMEGM): Assume that timegm is buggy if mktime is. Check for timegm declaration. (gl_PREREQ_TIMEGM): Require gl_FUNC_MKTIME. Do not check for gmtime_r. Replace mktime if __mktime_internal does not exist and if mktime hasn't been replaced already. 2003-09-06 Paul Eggert * lib/time_r.c, lib/time_r.h: New files. * lib/mktime.c (my_mktime_localtime_r): Remove; all uses changed to __localtime_r. (__localtime_r) [!defined _LIBC]: New macro. Include . (__mktime_internal) [!defined _LIBC]: Now extern, not static. * lib/strftime.c (my_strftime_gmtime_r): Remove; all uses changed to __gmtime_r. (my_strftime_localtime_r): Remove; all uses changed to __localtime_r. (__gtime_r, __localtime_r) [!HAVE_TM_GMTOFF]: New macros. Include . * lib/timegm.c: Switch to glibc implementation, with the following changes: [defined HAVE_CONFIG_H]: Include . [!defined _LIBC]: Include "timegm.h" rather than . (__mktime_internal) [!defined _LIBC]: New decl. (__gmtime_r) [!defined _LIBC]: New macro and function. (timegm): Use a prototype, since gnulib assumes C89. Do not bother declaring tmp to be const, as it's not really usefu. * lib/timegm.h: Hoist "#include " out of #ifdef. (timegm): Declare only if HAVE_DECL_TIMEGM. 2003-09-06 Paul Eggert * MODULES.html.sh (func_all_modules): Add time_r. * modules/time_r: New file. * modules/mktime, modules/strftime, modules/timegm: Depend on time_r. * modules/timegm: Depend on mktime. Change maintainer to "all, glibc". 2003-09-03 Paul Eggert * lib/human.c (human_readable): Fix bug that rounded 10501 to 10k. Bug reported by Lute Kamstra in . * lib/getdate.y (relative_time_table): Use tDAY_UNIT for "tomorrow", "yesterday", "today", and "now" rather than tMINUTE_UNIT. Of course with correspondingly smaller numbers for tomorrow and yesterday. From Tadayoshi Funaba. Originally installed into sh-utils on 1999-08-07, but the patch got lost (I guess during the coreutils merge?). 2003-08-31 Simon Josefsson * modules/timegm: New file. * MODULES.html.sh (func_all_modules): Add timegm. 2003-08-31 Simon Josefsson * m4/timegm.m4: New file. 2003-08-31 Simon Josefsson * lib/timegm.h: New file. * lib/timegm.c: New file. Based on wget-1.8.2/src/http.c:mktime_from_utc. 2003-08-31 Karl Berry * lib/argp.h: update from libc. 2003-08-28 Bruno Haible * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Remove AC_DEFINE of fnmatch here. This avoids havoc on compilers for which '#define fnmatch rpl_fnmatch' followed by '#define fnmatch fnmatch_posix' gives an error. 2003-08-28 Bruno Haible * lib/binary-io.h: Undefine O_BINARY before defining it. This avoids a warning on QNX, which defines O_BINARY to 000000. 2003-08-27 Jim Meyering * m4/mkstemp.m4: Require that the system mkstemp be able to create 70 temporary files, not just 30. Tru64 V4.0F's mkstemp function would fail after 32. Reported by Danny Levinson. Details here: http://mail.gnu.org/r/bug-coreutils/2003-08/msg00124.html 2003-08-24 Bruno Haible * lib/binary-io.h: Include , to avoid a compilation error when MSVC7 is included later. 2003-08-22 Simon Josefsson * modules/strndup (Makefile.am): Add strndup.h to lib_SOURCES. 2003-08-20 Karl Berry * m4/lib-ld.m4: serial 1003 from gettext, no changes besides serial. 2003-08-20 Bruno Haible * modules/progname: New file. * MODULES.html.sh (func_all_modules): Add progname. 2003-08-20 Bruno Haible * lib/progname.h: New file, from GNU gettext. * lib/progname.c: New file, from GNU gettext. * lib/progreloc.c: New file, from GNU gettext. 2003-08-19 Jim Meyering * m4/lib-ld.m4: Revert yesterday's change, per Bruno's request here: http://mail.gnu.org/r/bug-gnulib/2003-08/msg00155.html 2003-08-19 Bruno Haible * m4/xalloc.m4 (gl_PREREQ_XSTRDUP): Don't check for any more. 2003-08-19 Bruno Haible * lib/xstrdup.c: Assume exists. 2003-08-18 Paul Eggert * modules/stdbool: Add BUILT_SOURCES. Prefer $@ to target name in makefile rules. 2003-08-18 Jim Meyering * m4/getloadavg.m4: Use [\t ], not [ \t] (where \t is a literal TAB). * m4/lib-ld.m4: Likewise. 2003-08-18 Jim Meyering * lib/setenv.h: Indent nested cpp directive. * lib/vasnprintf.c: Remove trailing blanks. 2003-08-17 Simon Josefsson * modules/xstrndup: New file. * MODULES.html.sh (func_all_modules): Add xstrndup. 2003-08-17 Simon Josefsson * modules/argp: Fix autoconf macro name. Add more dependencies. 2003-08-17 Simon Josefsson * m4/xstrndup.m4: New file. 2003-08-17 Simon Josefsson * m4/argp.m4: New file. 2003-08-17 Simon Josefsson Bruno Haible * lib/xstrndup.h: New file. * lib/xstrndup.c: New file. 2003-08-17 Bruno Haible * modules/strndup (Files, Include): Add lib/strndup.h. 2003-08-17 Bruno Haible * modules/euidaccess (Files): Add lib/euidaccess.h. 2003-08-17 Bruno Haible * lib/strndup.h: New file. 2003-08-17 Bruno Haible * gnulib-tool (func_create_testdir): Handle gl_USE_SYSTEM_EXTENSIONS like AC_GNU_SOURCE. * modules/extensions (configure.ac): Comment out the invocation of gl_USE_SYSTEM_EXTENSIONS. 2003-08-16 Paul Eggert Merges from coreutils, etc. * m4/rpmatch.m4 (gl_PREREQ_RPMATCH): Insert ':' to prevent a syntax error in gl_FUNC_MATCH. This fixes a bug I introduced on 2003-05-28. * m4/readlink.m4 (gl_PREREQ_READLINK): Renamed from gl_PREREQ_READLINE, fixing a typo. * m4/host-os.m4 (UTILS_HOST_OS): Add GNU/NetBSD, GNU/FreeBSD. * m4/hash.m4 (gl_HASH): Use AM_STDBOOL_H, not AC_HEADER_STDBOOL. 2003-08-16 Paul Eggert Document merge from coreutils. * modules/alloca: Append $(ALLOCA_H) to BUILT_SOURCES. * modules/fnmatch: Append $(FNMATCH_H) to BUILT_SOURCES. * modules/utime: Add m4/utimes-null.m4. 2003-08-16 Paul Eggert * lib/regex.h, strdup.c, strtoll.c, strtoul.c: Do not normalize white space, undoing this 2003-08-12 change: 2003-08-16 Paul Eggert * config/srclist.txt: Get regex.h, strdup.c, strtoll.c, strtoul.c from libc, undoing this 2003-08-12 change: 2003-08-16 Jim Meyering Merges from coreutils. * m4/readdir.m4 (GL_FUNC_READDIR): Change name to have GL_ (not jm_) prefix. Adjust cache variables similarly. Create 500 rather than just 300 files, to exercise bug on Darwin6.5, too. * m4/perl.m4 (jm_PERL): Use $am_missing_run, not undefined $missing_dir. * m4/jm-winsz1.m4: Require AC_SYS_POSIX_TERMIOS, not AM_SYS_POSIX_TERMIOS. Reported by mkc@mathdogs.com. Also change use of $am_cv_sys_posix_termios to $ac_cv_sys_posix_termios. Reported by Andreas Schwab. * m4/getgroups.m4 (jm_FUNC_GETGROUPS): Rewrite to use AC_FUNC_GETGROUPS and (if needed) to call AC_LIBOBJ and to set GETGROUPS_LIB. * m4/fsusage.m4 [__GLIBC__]: GNU libc's statvfs stats each mount point in /proc/mounts until it finds one with matching device number. This is unnecessary when the FILE argument *is* a mount point. No stat call is necessary in that case. So, disable the statvfs-testing code on systems with GNU libc. Reported by Andrei Gaponenko via Tim Waugh as RedHat bug# 84846. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Limit stack size to 1MB, so as not to render systems with no stack size limit (e.g., linux-2.2.x) unusable. Suggestion and code from Bruno Haible. Include . On some systems, it is required for the definition of _SC_PAGESIZE. 2003-08-16 Jim Meyering Merge from coreutils. * lib/xstrtoimax.c: #else #if -> #elif. * lib/xstrtoumax.c: Likewise. 2003-08-16 Jim Meyering * m4/utimes.m4 (gl_FUNC_UTIMES): New file. * m4/utimes.m4: Removed. * m4/utimes-null.m4: Renamed from utimes.m4. * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Limit stack size to 1MB, so as not to render systems with no stack size limit (e.g., linux-2.2.x) unusable. Suggestion and code from Bruno Haible. Include . On some systems, it is required for the definition of _SC_PAGESIZE. 2003-08-16 Jim Meyering and Paul Eggert Merges from coreutils, etc. * m4/jm-macros.m4 (AC_LANG_SOURCE(C)): New macro, undefine, then define using the latest version from cvs. This avoids problems with #line directives using a vendor (Sun) compiler. (jm_MACROS): Bump prerequisite from 2.52g to 2.57. Don't set GETGROUPS_LIB here; now it's done via getgroups.m4's wrapper function. AC_SUBST OPTIONAL_BIN_PROGS, OPTIONAL_BIN_ZCRIPTS, and MAN here, rather than just in sh-util/configure.in, so that the now-shared-by-fileutils-and-textutils lib/Makefile.am are all the same. Use AC_CONFIG_LIBOBJ_DIR(lib) to tell the new AC_FUNC_GETLOADAVG where to find getloadavg.c. Require AC_FUNC_FTW, gt_INTTYPES_PRI, gl_CLOCK_TIME, UTILS_SYS_OPEN_MAX, GL_FUNC_GETCWD_PATH_MAX, GL_FUNC_READDIR, gl_FSUSAGE, gl_MOUNTLIST, AC_FUNC_CANONICALIZE_FILE_NAME. Remove code that is now done by the newly-required macros. Append $(EXEEXT) to DF_PROG. AC_LIBOBJ fchdir-stub if fchdir doesn't exist; similarly for fchown. Do not invoke or require the following here, since prereq.m4 or some gnulib .m4 now does this for us: gl_REGEX, UTILS_FUNC_MKDIR_TRAILING_SLASH, jm_BISON, gl_FUNC_MKTIME, jm_FUNC_LSTAT, jm_FUNC_STAT, jm_FUNC_REALLOC, jm_FUNC_MALLOC, jm_FUNC_NANOSLEEP, jm_FUNC_READDIR, jm_FUNC_MEMCMP, jm_FUNC_GLIBC_UNLOCKED_IO, AC_FUNC_FNMATCH_GNU, jm_FUNC_PUTENV, jm_AC_PREREQ_XSTRTOUMAX, jm_AC_PREREQ_XSTRTOIMAX, AC_FUNC_ERROR_AT_LINE, jm_FUNC_GNU_STRFTIME, AC_FUNC_VPRINTF, vb_FUNC_RENAME, UTILS_FUNC_MKSTEP, jm_FUNC_UTIME, AM_FUNC_GETLINE, AC_FUNC_OBSTACK. Do not replace the following functions, as this is now the job of some gnulib .m4: strcasecmp, strncasecmp, dup2, gethostname, getusershell, sig2str, strcspn, stpcpy, strstr, strtol, strtoul strpbrk, euidaccess, memcmp, rmdir, rpmatch, strndup, strverscmp, atexit getpass, strdup, getpagesize. Replace 'raise'. Do not check for the following functions, as this is now the job of some gnulib .m4: bcopy, canonicalize_file_name, fchdir, ftime, getcwd, getmntinfo, resolvepath. But check for sysctl, setreuid, setregid. (jm_CHECK_ALL_HEADERS): Do not check for fenv.h. Check for sys/sysctl.h. (jm_CHECK_ALL_TYPES): Do not require AC_STRUCT_TM, AC_STRUCT_TIMEZONE, jm_CHECK_TYPE_STRUCT_TIMESPEC. Invoke gt_TYPE_SSIZE_T instead of checking for ssize_t ourselves. * m4/prereq.m4 (jm_PREREQ): Don't invoke macros; AC_REQUIRE them. Require every macro that gnulib/modules/* suggests for us. (jm_PREREQ_ADDEXT): New macro. (jm_PREREQ_STAT): Check for 'struct statfs' on Ultrix 4.4. Require jm_AC_TYPE_LONG_LONG instead of invoking it. * m4/physmem.m4 (gl_SYS__SYSTEM_CONFIGURATION): New macro. (gl_PHYSMEM): Use it. Also check for `table' function. Check for new headers and functions. Add check for sys/sysmp.h. With suggestions from Kaveh Ghazi. Ignore headers that are present but cannot be compiled. This avoids spurious warnings on Solaris 9 sparc with Forte Developer 7 C 5.4. 2003-08-15 Paul Eggert Document merge from coreutils. * modules/userspec: Depend on posixver. * modules/strftime: Depend on tzset. 2003-08-15 Paul Eggert * lib/config.charset, ref-add.sin, ref-del.sin: Use three spaces, rather than tab, after '#' in shell-script copyright notices. Suggested by Bruno Haible. 2003-08-15 Paul Eggert * config/srclist-update: Use three spaces, rather than tab, after '#' in shell-script copyright notices. Suggested by Bruno Haible. Remove unnecessary parenthesization in regular expression. 2003-08-15 Jim Meyering Merge from coreutils. * lib/xgethostname.c: Include . (xghostname): Don't exit for anything other than memory-related failure; just return NULL. * lib/userspec.c: Include "posixver.h". (parse_user_spec): Accept `.' as a separator only in pre-POSIX-200112 mode. * lib/strtoimax.c: Use #elif rather than #else #if. * lib/strftime.c (my_strftime) [!_LIBC && HAVE_TZNAME && HAVE_TZSET]: Remove function, now that we can rely on a working tzset function. [!_LIBC]: Ensure that the required autoconf test has been run. [!defined _NL_CURRENT && HAVE_STRFTIME]: Use underlying_strftime for %r. * lib/sha.c: Merge in some clean-up and optimization changes from glibc. * lib/sha.c (sha_stream) [BLOCKSIZE]: Move definition to top of file. Ensure that it is a multiple of 64. Rearrange loop exit tests so as to avoid performing an additional fread after encountering an error or EOF. * lib/realloc.c: Update copyright date. 2003-08-15 Jim Meyering and Paul Eggert Merge from coreutils. * lib/readutmp.h (HAVE_UTMPX_H): Undef if struct utmp has the ut_exit member but strut utmpx does not. Needed for AIX 4.3.3. (UT_EXIT_E_TERMINATION, UT_EXIT_E_EXIT): Define. 2003-08-15 Jim Meyering and Paul Eggert Merges from coreutils, etc. * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Require gl_FUNC_TZSET_CLOBBER. * m4/readutmp.m4 (gl_READUTMP): Check for ut_exit.ut_exit, ut_exit.e_exit, ut_exit.ut_termination, and ut_exit.e_termination members. 2003-08-14 Paul Eggert Help the merge from coreutils. * m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): New macro. (AC_FUNC_GETTIMEOFDAY_CLOBBER): Use it. * m4/tzset.m4: Use it too. 2003-08-14 Paul Eggert * modules/tzset: New file. 2003-08-14 Jim Meyering Merges from coreutils. * modules/fnmatch: Use the `$(FNMATCH_H)' notation for AC_REPLACED variable names, rather than @FNMATCH_H@. * modules/alloca: Likewise for $(ALLOCA_H). * modules/fnmatch (fnmatch.h): Use `$@' in the commands, in place of the three copies of the literal target, `fnmatch.h'. * modules/alloca (alloca.h): Likewise. 2003-08-14 Jim Meyering Merge from coreutils. * m4/tzset.m4: New file. * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Move the MOUNTED_VMOUNT test to precede the MOUNTED_GETMNTENT1 tests, since otherwise, AIX 5.1 systems would end up using the latter. MOUNTED_GETMNTENT1 support is inadequate on such systems: 1) detecting whether a file system is remote doesn't work 2) the MOUNTED_VMOUNT code reports the HOSTNAME:/MOUNT_POINT, while the MOUNTED_GETMNTENT1 code reports merely /MOUNT_POINT. Reported by Mike Jetzer. 2003-08-14 Jim Meyering Merge from coreutils. * lib/obstack.h: Whitespace changes. * lib/mountlist.c: Remove anachronistic casts of xmalloc, xrealloc, and xcalloc return values. (read_filesystem_list) [MOUNTED_GETFSSTAT]: Use MNT_NOWAIT, rather than MNT_WAIT. Otherwise, `df DIR' could hang on OSF/1 5.1 for DIR on both local and remote file systems. Reported by (and fix confirmed by) Nelson H. F. Beebe. (read_filesystem_list) [MOUNTED_VMOUNT]: Detect any error from mntctl. Use mntctl's return value to drive the entry-processing loop, since we can't rely on the value of the vmt_length member in the last entry. On some systems doing so could result in exhausting virtual memory. Based in part on a patch from Mike Jetzer. 2003-08-14 Jim Meyering and Paul Eggert Merges from coreutils, plus other fixes. * lib/physmem.c: Merge in portability changes from gcc/libiberty to support AIX, IRIX, Tru64, and Windows. See the ChangeLog there for credits and details. Thanks to Kaveh Ghazi for helping to keep these files in sync. (ARRAY_SIZE): Define it. (physmem_total, physmem_available): Add comments. From Kaveh Ghazi. * lib/memcasecmp.c: Remove unnecessary parentheses after 'defined'. (memcasecmp): Don't assume size_t fits in unsigned int. Remove casts and duplicate code. * lib/md5.c: Include and unconditionally. (memcpy): Remove definition. Merge in some clean-up and optimization changes from glibc. [BLOCKSIZE]: Move definition to top of file. Ensure that it is a multiple of 64. Rearrange loop exit tests so as to avoid performing an additional fread after encountering an error or EOF. * lib/md5.h (md5_uintptr): Define. * lib/makepath.c (CLEANUP_CWD): Report an error if we failed to return to the initial working directory. Preserve errno for caller. * lib/idcache.c: Include "xalloc.h". (xmalloc, xrealloc): Remove decls. (getuser): Remove casts no longer required in C89. * lib/human.c: Include stdio.h, for sprintf. * lib/group-member.c: Include "xalloc.h". (xmalloc, xrealloc): Remove decls. (get_group_info): Remove casts no longer required in C89. * lib/getusershell.c (readname): Remove casts no longer required in C89. * lib/gettimeofday.c (rpl_gmtime, rpl_tzset): New functions. * lib/getline.c: Whitespace fix, from coreutils. 2003-08-13 Paul Eggert * m4/exclude.m4 (gl_EXCLUDE): Require AC_C_INLINE, AC_HEADER_STDC. Check for isascii. * m4/gettext.m4, iconv.m4, intdiv0.m4, inttypes-pri.m4, lib-link.m4, lib-prefix.m4, longdouble.m4, po.m4, progtest.m4, signed.m4: Undo previous (whitespace-only) change. 2003-08-13 Paul Eggert * lib/exclude.c: Include (IN_CTYPE_DOMAIN): New macro. (is_space): New fn. (add_exclude_file): If LINE_END is a space, ignore trailing spaces and empty lines. * lib/argp-help.c, argp-parse.c, config.charset, getopt.h: Undo previous (whitespace-only) change. 2003-08-13 Paul Eggert * config/srclist-update: Change update back to the old behavior, leaving whitespace alone. Use one 'sed' command rather than a pipeline. (fixlicense): Now a variable, not a function. (remove_trailing_blanks): Remove. (fixfile): Don't invoke unexpand or cat, or remove trailing blanks. * config/config.guess, config.sub, install-sh, missing, texinfo.tex: Undo previous (whitespace-only) change. 2003-08-12 Paul Eggert Merge from coreutils. * modules/euidaccess: Add lib_SOURCES, include for new file euidaccess.h 2003-08-12 Paul Eggert * m4/gettext.m4, iconv.m4, intdiv0.m4, inttypes-pri.m4, lib-link.m4, lib-prefix.m4, longdouble.m4, po.m4, progtest.m4, signed.m4: Normalize leading white space and remove trailing white space. Merge from coreutils * m4/euidaccess.m4 (gl_FUNC_EUIDACCESS): Check for euidaccess decl. * m4/lib-ld.m4, lib-link.m4, lib-prefix.m4: Regenerate from gettext 0.12.1. These files are now being upgraded automatically by ../config/srclist-update. 2003-08-12 Paul Eggert * lib/argp-help.c, argp-parse.c, config.charset, getopt.h: Normalize leading white space and remove trailing white space. * lib/ref-add.sin, ref-del.sin: Use '#' before empty line in copyright notice, as per ../config/srclist-update. Merge from coreutils. * lib/euidaccess.h: New file. * lib/euidaccess.c: Include it. * lib/.cppi-disable: Add printf-args.h, printf-parse.h, stdbool_.h, vasnprintf.h, vasprintf.h. Remove strdup.c, gettext.h. * lib/regex.h, strdup.c, strtoll.c, strtoul.c: Normalize white space. 2003-08-12 Paul Eggert * config/srclist-update: Add copyright notice. (remove_id_lines, remove_trailing_blanks): New constants. (fixfile): Use them to normalize spacing a bit in copied files. * config/config.guess, config.sub, install-sh, missing, texinfo.tex: Normalize leading white space and remove trailing white space. * config/texinfo.tex: Sync with texinfo. * config/srclist.txt: Don't get regex.h, strdup.c, strtoll.c, strtoul.c from libc, to merge coreutils whitespace changes. * config/srclist.txt: Get the following m4 files from gettext: codeset.m4, gettext.m4, glibc21.m4, iconv.m4, intdiv0.m4, inttypes-pri.m4, lcmessage.m4, lib-ld.m4, lib-link.m4, lib-prefix.m4, longdouble.m4, nls.m4, po.m4, progtest.m4, signed.m4, wchar_t.m4, wint_t.m4. 2003-08-12 Karl Berry * config/srclist.txt: can't sync vasnprintf.c any more, changes have been made. 2003-08-11 Paul Eggert * modules/gnu-source, m4/gnu-source.m4: Remove; we're assuming Autoconf 2.54 or later now. Suggested by Bruno Haible. * MODULES.html.sh (func_all_modules): Remove gnu-source. 2003-08-11 Bruno Haible * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF): Also check for wcslen. 2003-08-11 Bruno Haible * lib/vasnprintf.c (local_wcslen): New function, for Solaris 2.5.1. (vasnprintf): Use it instead of wcslen. 2003-08-11 Bruno Haible * lib/stdbool_.h (_Bool): Undo last change; instead use a negative enum value to ensure that _Bool promotes to int. Use #define for _Bool when using the Solaris C compiler. Adds comments suggested by Paul Eggert. 2003-08-10 Karl Berry * lib/regex.h: update from libc (whitespace fix). 2003-08-09 Paul Eggert Merge some files from coreutils. These changes were originally made by Jim Meyering. * lib/acl.c: Include before ; many older Unixes require this. * lib/alloca.c (alloca): Remove cast to argument of free; no longer needed in C89. * lib/alloca_.h, regex.h: Fix white space to match what GNU indent does. 2003-08-09 Paul Eggert * m4/regex.m4 (jm_INCLUDED_REGEX): Change "\201" to "\371"; apparently Emacs's Unicode mode got confused before my 2003-08-05 checkin. 2003-08-08 Paul Eggert * m4/extensions.m4: New file. * m4/timespec.m4 (jm_CHECK_TYPE_STRUCT_TIMESPEC): Require gl_USE_SYSTEM_EXTENSIONS. * m4/unlocked-io.m4 (jm_FUNC_GLIBC_UNLOCKED_IO): Require gl_USE_SYSTEM_EXTENSIONS rather than AC_GNU_SOURCE. 2003-08-08 Paul Eggert * MODULES.html.sh (func_all_modules): Add extensions, gnu-source. * modules/extensions, modules/gnu-source: New files. * modules/timespec, modules/unlocked-io: Depend on extensions. 2003-08-07 Paul Eggert * modules/restrict: New file. * MODULES.html.sh (func_all_modules): Add restrict. * modules/regex: Depend on restrict. 2003-08-07 Paul Eggert * m4/restrict.m4: New file. * m4/regex.m4 (jm_PREREQ_REGEX): Add gl_C_RESTRICT. 2003-08-07 Bruno Haible * modules/getndelim2 (Makefile.am): Add the files to EXTRA_DIST, not lib_SOURCES, because getndelim2.m4 now uses AC_LIBOBJ(getndelim2). 2003-08-07 Bruno Haible * m4/getndelim2.m4 (gl_GETNDELIM2): Use AC_LIBOBJ(getndelim2). This makes the module 'getndelim2' compatible with the module 'getline'. 2003-08-05 Paul Eggert * m4/regex.m4 (jm_INCLUDED_REGEX): Replace a single non-ASCII byte with "\201" to avoid glitches when editing that source file with multi-gnome-terminal. 2003-08-05 Paul Eggert * lib/bumpalloc.h: Remove. 2003-08-05 Paul Eggert * MODULES.html.sh (func_all_modules): Remove bumpalloc. * modules/bumpalloc: Remove. 2003-08-04 Paul Eggert * lib/getloadavg.c: Change copyright notice and spacing to conform to GNU coding style. Merge from coreutils. * lib/error.c [!USE_IN_LIBIO]: Omit this case; assume USE_IN_LIBIO is 1. From glibc. * lib/getdate.y (date): Also accept dates like May-23-2003; suggestion from Karl Berry, implemented by Jim Meyering. * lib/getgroups.c: Include "xalloc.h" instead of declaring xalloc fns; from Dmitry V. Levin. Remove anachronistic cast of xrealloc. * lib/fnmatch_.h (__const): Remove. Use 'const'. * lib/fnmatch_loop.c (NEW_PATTERN): Cast alloca return value to proper type. Otherwise, it wouldn't compile with at least /bin/cc on ymp-cray-unicos9.0.2.X. Combine two mostly-identical uses of alloca into one. Thanks to the Cray-Cyber project for access to a Cray Y-MP. 2003-08-04 Dave Love [From Emacs.] * lib/getloadavg.c: Check `__unix' as well as `unix'. Use #ifdef, not #if. Check HAVE_LIBKSTAT as well as LOAD_AVE_TYPE. Check F_SETFD, not FD_SETFD. Use HAVE_STRUCT_NLIST_N_UN_N_NAME, not obsolete NLIST_NAME_UNION. [__GNU__]: Undef BSD and FSCALE. [!NLIST_STRUCT]: Remove conditional definition of NLIST_STRUCT. 2003-08-03 Paul Eggert * lib/stdbool_.h (_Bool): Make it signed char, instead of an enum type, so that it's guaranteed to promote to int. See: 2003-08-03 Karl Berry * config/depcomp: update from automake. 2003-07-31 Paul Eggert * lib/strerror.c: Include config.h, limits.h. Declare sprintf. (strerror): Don't assume that a printable int fits in 14 bytes. 2003-07-31 Bruno Haible * modules/getpass-gnu: New file. * MODULES.html.sh (func_all_modules): Add getpass-gnu. 2003-07-31 Bruno Haible * m4/getpass.m4 (gl_FUNC_GETPASS_GNU): New macro. 2003-07-24 Karl Berry * config/missing: update from automake. 2003-07-24 Derek Robert Price Bruno Haible * lib/getline.h (getline, getdelim): Change return type to ssize_t. * lib/getline.c (getline, getdelim): Likewise. Remove _GNU_SOURCE define; now it's defined in config.h through m4/getline.m4. 2003-07-23 Karl Berry * config/config.sub: update from prep. 2003-07-22 Paul Eggert * modules/xalloc (Depends-on): Add exitfail. * modules/xmemcoll: Likewise. 2003-07-22 Paul Eggert * lib/xalloc.h (XCALLOC, XREALLOC, CCLONE): Fix under- and over-parenthesization in macros. Sync with coreutils. * lib/xalloc.h (XMALLOC, XCALLOC, XREALLOC): Remove casts not required by C99. Use `exit_failure' for xalloc and xmemcoll instead of their own private exit-failure variables. * lib/xalloc.h (xalloc_exit_failure): Remove. * lib/xmalloc.c: Likewise. Include exitfail.h. (xalloc_die): Use exit_failure instead of xalloc_exit_failure. * lib/xmemcoll.h (xmemcoll_exit_failure): Remove. * lib/xmemcoll.c: Likewise. Include exitfail.h. (xmemcoll): Use exit_failure instead of xalloc_exit_failure. 2003-07-20 Jim Meyering * modules/closeout (Depends-on): Add exitfail. Suggestion from Bruno Haible. 2003-07-19 Karl Berry * config/config.sub: update from prep. 2003-07-18 Paul Eggert * lib/closeout.h (close_stdout_set_status, close_stdout_status): Remove. * lib/closeout.c: Likewise. Include "closeout.h" right after config.h, to test that it can stand by itself. Include "exitfail.h". Clients should set exit_failure instead. (EXIT_FAILURE): Remove; no longer needed. Do not include . 2003-07-18 Bruno Haible * modules/getndelim2: New file. * modules/getline: Share files with module getndelim2. * modules/getnline: Depend on getndelim2 instead of sharing files with it. Add getnline.c to lib_SOURCES. * MODULES.html.sh (func_all_modules): Add getndelim2. 2003-07-18 Bruno Haible * m4/getndelim2.m4: New file. * m4/getline.m4 (AM_FUNC_GETLINE): Add AC_LIBOBJ of getndelim2.c and invoke gl_PREREQ_GETNDELIM2. (gl_PREREQ_GETLINE): Drop AC_HEADER_STDC, now done by gl_PREREQ_GETNDELIM2. * m4/getnline.m4 (gl_GETNLINE): Drop AC_HEADER_STDC, now done by gl_GETNDELIM2. 2003-07-18 Bruno Haible * lib/getndelim2.h: New file. * lib/getndelim2.c: Make into a module of its own. Include config.h, getndelim2.h. (getndelim2): Make non-static. Change return type to ssize_t. * lib/getline.h: Change argument names. * lib/getline.c: Include getndelim2.h instead of getndelim2.c. * lib/getnline.c: Include getndelim2.h. 2003-07-18 Andreas Schwab * lib/memcoll.c (memcoll) [!HAVE_STRCOLL]: Clear errno. 2003-07-17 Karl Berry * config/config.sub: update from prep. 2003-07-17 Bruno Haible * modules/getnline: New file. * modules/getline: Add lib/getndelim2.c to source file list. * MODULES.html.sh (func_all_modules): Add getnline. 2003-07-17 Bruno Haible * m4/getnline.m4: New file. 2003-07-17 Bruno Haible * m4/Makefile.am.in: Remove file. * m4/Makefile.am: Remove file. * m4/Makefile.in: Remove file. 2003-07-17 Bruno Haible * lib/getnline.h: New file. * lib/getnline.c: New file. * lib/getndelim2.c: New file, extracted from getline.c. (getndelim2): Renamed from getdelim2, with added nmax argument. * lib/getline.c: Include getndelim2.c. (getdelim2): Moved out to getndelim2.c. (getline, getdelim): Update. 2003-07-17 Bruno Haible * lib/Makefile.am: Remove file. * lib/Makefile.in: Remove file. 2003-07-17 Bruno Haible * configure.in: Remove file. * Makefile.in: Remove file. 2003-07-17 Bruno Haible * MODULES.html.sh: Put the right before . 2003-07-16 Karl Berry * config/srclist-update: was running fixlicense twice, which caused texinfo.tex to be nullified for some reason. Simplify, $gplsrc is no longer needed as far as I can see? 2003-07-16 Jim Meyering * modules/save-cwd: Depend on xgetcwd. From Derek Price. 2003-07-15 Paul Eggert * config/srclist.txt: Get the following files from gettext-runtime/intl instead: config.charset, localcharset.c, localcharset.h, ref-add.sin, ref-del.sin. From Bruno Haible. * config/srclist-update (fixfile): Change grep pattern again, since the previous fix didn't work (there was another trailing $). Use '[$]' to escape the $s. 2003-07-15 Karl Berry * lib/vasnprintf.c: update from gettext. 2003-07-15 Karl Berry * config/srclist-update (fixfile): Change grep pattern, since 'Id' gets expanded when surrounded by '$'. 2003-07-15 Jim Meyering * modules/save-cwd: Don't depend on error. From Derek Price. 2003-07-15 Jim Meyering * lib/makepath.c (make_path): Enclose diagnostic in _(...). 2003-07-14 Simon Josefsson * modules/mempcpy: New file. * MODULES.html.sh (func_all_modules): Add mempcpy. 2003-07-14 Simon Josefsson * m4/mempcpy.m4: New file. 2003-07-14 Simon Josefsson * lib/mempcpy.h: New file. * lib/mempcpy.c: New file. 2003-07-14 Paul Eggert * modules/getdate, modules/posixtm: Depend on mktime. 2003-07-14 Paul Eggert * lib/ceill.c, expl.c, floorl.c, frexpl.c, ldexpl.c, mathl.h, sincosl.c, sqrtl.c, trigl.c, trigl.h, poll.c, poll_.h, mkstemp.c, unicodeio.c, unicodeio.h, unlocked-io.h: Switch from LGPL to GPL. 2003-07-14 Paul Eggert * lib/asnprintf.c, asprintf.c, config.charset, gettext.h, localcharset.c, localcharset.h, mkdtemp.c, printf-args.c, printf-args.h, printf-parse.c, printf-parse.h, ref-add.sin, ref-del.sin, setenv.c, unsetenv.c, vasnprintf.c, vasnprintf.h, vasprintf.c, vasprintf.h: Regenerate. These files are now being updated automatically by ../config/srclist-update. This changes their license from LPGL to GPL. 2003-07-14 Paul Eggert * config/srclist.txt: Add tons more gettext files. $GETTEXT is now assumed to refer to the root of the most recent stable gettext version. * config/srclistvars.sh: Add defaults for eggert. * config/srclist-update: Convert LGPL to GPL in shell scripts, too. Match "This program" as well as "The program". This is needed for gettext. 2003-07-14 Jim Meyering Don't emit diagnostics. Let callers do that. * lib/save-cwd.c: Don't include "error.h". (save_cwd): Don't call error. Ensure that errno is valid when returning nonzero. * lib/save-cwd.h (restore_cwd): Update prototype. * lib/save-cwd.c (restore_cwd): Remove two parameters. Simplify. Don't call error upon failure. Let callers do that. (save_cwd): Mention that Irix 5.3 has the same problem as SunOS 4 when auditing is enabled. But don't bother updating the #if. 2003-07-11 Alexandre Duret-Lutz * lib/obstack.h (__INT_TO_PTR): Revert change of 2003-03-13; it breaks C++ compilation. [!__GNUC__ || !__STDC__] (obstack_finish): Cast result to void*. 2003-07-10 Simon Josefsson * modules/strchrnul (Makefile.am): Add strchrnul.h. 2003-07-10 Jim Meyering * m4/clock_time.m4: Remove trailing blank. * m4/intmax_t.m4: Likewise. 2003-07-10 Jim Meyering * lib/vasnprintf.c: Remove trailing blanks. Make cpp indentation consistent. 2003-07-09 Paul Eggert * lib/alloca_.h, euidaccess.c, getpass.c, memrchr.c, obstack.h, posixver.c, strftime.c, strnlen.c, strverscmp.c: Switch from LGPL to GPL. 2003-07-09 Paul Eggert * config/srclist.txt: Sort sublists. Add $LIBCSRC/sysdeps/generic/strtoul.c. In comments, add more libc files that differ from gnulib for one reason or another; we'd like this list to be smaller but for now let's document what we have. 2003-07-08 Paul Eggert * config/srclist-update: Port to POSIX 1003.1-2001 hosts by avoiding the use of GNU extensions. Change "x=`eval echo $x`" to the shorter and sweeter "eval x=$x". * config/srclist.txt: Get lib/argp* from glibc. 2003-07-07 Paul Eggert * lib/mktime.c: Fix some boundary cases and remove need for floating point. Issue a compile-time diagnostic if time_t is floating point, or if two's complement arithmetic is not in effect, or if arithmetic right shift does not propagate the sign. These assumptions were all in the original code but they weren't checked. (TIME_T_MIDPOINT, verify): New macros. (__isleap): Remove; it has integer overflow problems. (leapyear): New function, without those problems. (ydhms_tm_diff): Remove; splitting into two parts. (ydhms_diff): New function, containing the arithmetic part of the old ydhms_tm_diff function. Issue a compile-time diagnostic if we are not using C99 integer division. Avoid casts when possible. (guess_time_tm): New function, containing the checking part of the old ydhms_tm_diff function. Return the new value, rather than the difference between it and the old. Accept a new argument T so that *T specifies the old value. Check for overflow in the result. (__mktime_internal): Use a time_t offset, not a long int offset. This undoes the 2003-06-04 change, which is no longer needed now that we have better overflow checking. (localtime_offset): Likewise. (__mktime_internal): Avoid harmful overflow on hosts where time_t and long are 64-bit but int is only 32-bit. (ydhms_diff): Use long int to store year1 and yday1. Issue a compile-time diagnostic if long int is not wide enough. (__mktime_internal): Use long int to store adjusted year and yday. Use plain C rather than preprocessor commands, if that doesn't affect efficiency. Check for overflow (and try to repair) after each probe rather than checking only at the very end. This avoids some bugs (e.g., southern hemisphere, behind GMT, and GMT offset at minimum time does not equal GMT offset at maximum time). Use integer to check for overflow rather than floating point; this is more portable to non-IEEE hosts, and is a tad faster. When we detect that we are oscillating between two values, don't check whether tm_isdst has the requested value, since we already know the answer. When tm_isdst has the wrong value, use a different heuristic to find the right one, based on the extreme values actually observed in practice in tz2003a, rather than the (overly optimistic) "previous 3 calendar quarters". (not_equal_tm, print_tm, check_result): Use "const T" rather than "T const" to accommodate glibc style. (check_result): Use less-confusing report format. "long" -> "long int. (main): Likewise. Don't loop if the iteration overflows time_t. Allow a negative step in the iteration. 2003-07-06 Karl Berry * config/depcomp: update from automake. * config/config.sub: update from prep. 2003-07-03 Karl Berry * config/config.guess: update from prep. 2003-07-01 Paul Eggert * m4/xreadlink.m4 (gl_XREADLINK): Don't check for sys/types.h, since xreadlink.c now includes it unconditionally. 2003-07-01 Paul Eggert * lib/xreadlink.c: Include unconditionally, instead of having it depend on HAVE_SYS_TYPES_H. 2003-07-01 Bruno Haible * m4/ssize_t.m4 (gt_TYPE_SSIZE_T): Don't include . should be sufficient. Reported by Paul Eggert. 2003-06-26 Karl Berry * config/depcomp: update from automake. 2003-06-26 Bruno Haible * modules/human: Depend on module stdbool. 2003-06-25 Bruno Haible * modules/readlink: New file. * modules/xreadlink: Depend on it. * MODULES.html.sh (func_all_modules): Add readlink. 2003-06-25 Bruno Haible * m4/readlink.m4: New file. 2003-06-25 Bruno Haible * lib/readlink.c: New file. 2003-06-22 Karl Berry * config/srclist.txt: update mkinstalldirs from automake. * config/mkinstalldirs: update. 2003-06-22 Bruno Haible Portability to mingw32. * m4/ssize_t.m4: New file, from GNU gettext. * m4/safe-read.m4 (gl_PREREQ_SAFE_READ): Require gt_TYPE_SSIZE_T. * m4/xreadlink.m4 (gl_XREADLINK): Require gt_TYPE_SSIZE_T. 2003-06-22 Bruno Haible * modules/safe-read: Add m4/ssize_t.m4. * modules/xreadlink: Add m4/ssize_t.m4. 2003-06-20 Bruno Haible Assume C89, so PARAMS isn't needed. * lib/unicodeio.h (PARAMS): Remove. * lib/unicodeio.c: Don't use PARAMS. 2003-06-18 Karl Berry * config/config.{guess,sub}: update from prep. 2003-06-18 Jim Meyering Merge changes from coreutils. * lib/readutmp.c: Include and unconditionally. Remove explicit declarations of xmalloc and realloc. Include xalloc.h. (read_utmp): Remove anachronistic cast of xmalloc. 2003-06-17 Paul Eggert Assume C89, so PARAMS isn't needed. * lib/backupfile.h (PARAMS): Remove. All uses removed. * lib/closeout.h, lib/dirname.h, lib/filemode.h, lib/fsusage.h, lib/getdate.h, lib/getline.h, lib/group-member.h, lib/hard-locale.h, lib/hash.h, lib/linebuffer.h, lib/long-options.h, lib/makepath.h, lib/memcasecmp.h, lib/memcoll.h, lib/modechange.h, lib/mountlist.h, lib/path-concat.h, lib/physmem.h, lib/posixtm.h, lib/quote.h, lib/readutmp.h, lib/same.h, lib/save-cwd.h, lib/savedir.h, lib/stdio-safer.h, lib/strtoimax.c, lib/strverscmp.h, lib/unistd-safer.h, lib/version-etc.h, lib/xalloc.h, lib/xreadlink.h, lib/xstrtod.h, lib/xstrtol.h: Likewise. * lib/filemode.h, lib/hard-locale.h, lib/memcoll.h, lib/modechange.h, lib/physmem.h, lib/same.h, lib/strverscmp.h: Do not include config.h; no longer needed. Anyway, config.h should always be included before any other file. 2003-06-11 Simon Josefsson * modules/sysexits: New file. * MODULES.html.sh (func_all_modules): Add sysexits. 2003-06-11 Simon Josefsson * lib/sysexit_.h: New file. 2003-06-11 Derek Price * lib/stat.c [LSTAT]: Compile/use slash_aware_lstat only if it is necessary. 2003-06-11 Bruno Haible * m4/sysexits.m4: New file. 2003-06-10 Simon Josefsson * lib/argp.h: New file, from glibc. * lib/argp-ba.c: New file, from glibc. * lib/argp-eexst.c: New file, from glibc. * lib/argp-fmtstream.c: New file, from glibc. * lib/argp-fmtstream.h: New file, from glibc. * lib/argp-fs-xinl.c: New file, from glibc. * lib/argp-help.c: New file, from glibc. * lib/argp-namefrob.h: New file, from glibc. * lib/argp-parse.c: New file, from glibc. * lib/argp-pv.c: New file, from glibc. * lib/argp-pvh.c: New file, from glibc. * lib/argp-xinl.c: New file, from glibc. 2003-06-10 Simon Josefsson * modules/strchrnul: New file. 2003-06-10 Simon Josefsson * modules/argp: New file. 2003-06-10 Simon Josefsson * m4/strchrnul.m4: New file. 2003-06-10 Simon Josefsson * lib/strchrnul.h: New file. * lib/strchrnul.c: New file. 2003-06-10 Bruno Haible * MODULES.html.sh (func_all_modules): Add strchrnul and argp. 2003-06-07 Karl Berry * config/config.{guess,sub}: update from prep. 2003-06-07 Jim Meyering * modules/strtod: Use $(...) notation, not @...@ for AC_REPLACE'd variables. * modules/localcharset: Likewise. 2003-06-07 Jim Meyering * lib/readtokens.h: Put `Free Software Foundation, Inc.' in place of my name in the copyright comment. Remove definition and uses of __P. From coreutils. * lib/stat.c: Don't declare xmalloc explicitly. Instead, include "xalloc.h". * lib/readtokens.c (readtokens): Remove anachronistic casts of xmalloc, xrealloc, and xcalloc return values. * lib/xgetcwd.c (xgetcwd): Include "xgetcwd.h". Improve comment. * lib/xgetcwd.h: Remove definition/uses of PARAMS. 2003-06-07 Bruno Haible * modules/poll (Makefile.am): Use explicit creation rule for poll.h, to avoid AC_CONFIG_LINKS. * modules/fnmatch (Makefile.am): Use explicit creation rule for fnmatch.h, to avoid AC_CONFIG_LINKS. * modules/alloca (Makefile.am): Make creation of alloca.h Ctrl-C safe. 2003-06-07 Bruno Haible * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH, gl_FUNC_FNMATCH_POSIX, gl_FUNC_FNMATCH_GNU): Set FNMATCH_H instead of invoking AC_CONFIG_LINKS. Needed to allow for a different name of the lib directory. * m4/poll.m4 (gl_FUNC_POLL): Set POLL_H instead of invoking AC_CONFIG_LINKS. Needed to allow for a different name of the lib directory. 2003-06-06 Jim Meyering Merge from coreutils. * lib/same.c: (same_name): Declare *_basename locals to be `const'. Consolidate declarations and initializations of *_base* locals. Merge from coreutils. This avoids a core dump on systems without GNU putenv, when running `env -u SOME_ALREADY_UNSET_VARIABLE'. * lib/putenv.c (__set_errno, LOCK, UNLOCK): Define. (unsetenv): New static function, from GNU libc. (rpl_putenv): Use it. * lib/modechange.c: Remove trailing blanks. Merge from coreutils. * lib/fsusage.c: Remove declaration of statfs. It conflicted with one from OSF/1 5.1 in . * lib/posixtm.c: Include unconditionally. 2003-06-06 Jim Meyering * lib/stdbool_.h: Renamed from stdbool.h.in. 2003-06-06 Jim Meyering Bruno Haible * modules/stdbool: Reflect renaming: stdbool.h.in -> stdbool_.h. Adjust Makefile.am snippet not to redirect directly to target. Use $(STDBOOL_H) notation, not @STDBOOL_H@ for AC_REPLACE'd variables. 2003-06-05 Paul Eggert * lib/mktime.c (__mktime_internal): When resolving a tm_isdst mismatch, look in future quarters as well as past. This fixes a bug when processing fall-backwards gaps immediately after a long period of daylight-saving time. * lib/mktime.c: Assume freestanding C89 or better. (HAVE_LIMITS_H): Remove. Assume it's 1. (__P): Remove; not used. (CHAR_BIT, INT_MIN, INT_MAX): Remove; defines them. (mktime, not_equal_tm, print_tm, check_result, main): Use prototypes. Use const * where appropriate. (main): Fix typo in testing code that uncovered by above changes. (Local Variables): Remove -DHAVE_LIMITS_H from compile-command. 2003-06-04 Paul Eggert * m4/human.m4 (gl_HUMAN): Require AM_STDBOOL_H. Check for locale.h, localeconv. This merges changes from coreutils. * m4/mktime.m4 (AC_FUNC_MKTIME): New macro, taken from Autoconf CVS. It can be removed after the next Autoconf is released. * m4/exclude.m4 (gl_EXCLUDE): Don't check for sys/types.h; no loner needed. 2003-06-04 Paul Eggert * lib/mktime.c: Fix Debian bug 177940 . (localtime_offset): Now long int, not time_t, because we want it to be guaranteed to be signed. All uses changed. (__mktime_internal): If overflow would occur when adding offset, don't add it. Merge 'human' changes from coreutils. Rewrite to support locale-specific notations like thousands separators. * lib/human.c: Simplify authorship notice. Include human.h immediately after config.h. , : Do not include; no longer needed. : Do not include, since human.h does. (SIZE_MAX, UINTMAX_MAX): New macros. : Include if HAVE_STRINGS_H, not if !HAVE_STRING_H. : Include if HAVE_LOCALE_H and HAVE_LOCALECONV. (HUMAN_READABLE_SUFFIX_LENGTH_MAX): New macro. (power_letter): Renamed from suffixes. (generate_suffix_backwards): Remove. (adjust_value): Now takes int style (because of human.h changes) and long double value (for greater precision on some platforms). (group_number): New function. (human_readable): Use it. Use integer options, not enum. Put the options before the sizes in the arg list. Support all the new options. The old human_readable function has been removed; use inttostr.h instead. (human_readable, default_block_size, humblock): Use uintmax_t, not int, for block sizes. (human_readable_inexact, block_size_types): Remove. (block_size_opts): New constant. (human_options): Renamed from human_block_size, with new signature that allows block sizes up to UINTMAX_MAX. All callers changed. * lib/human.h: Add copyright and authorship notice. Include and unconditionally. (PARAMS): Remove. All uses removed. (LONGEST_HUMAN_READABLE): Add support for thousands separator. (enum human_inexact_style): Remove tag; now a nameless enum. (human_floor, human_ceiling, human_round_to_even): Now have values 2, 0, 1 rather than -1, 1, 0. (human_group_digits, human_suppress_point_zero, human_autoscale, human_base_1024, human_SI, human_B): New constants. (human_readable_inexact, human_block_size): Remove. (human_readable): Size args are now uintmax_t, not int. (human_options): New decl. * lib/exclude.c: (new_exclude, add_exclude): Remove casts that are unnecessary now that we assume C89 or better. This change imported from coreutils. * lib/mktime.c (__mktime_internal): Do not reject negative timestamps arbitrarily. This is the same patch as 2003-05-28, but it got lost in the 2003-05-30 sync from glibc. .h files should stand alone, but we shouldn't include if we can get away with just . * lib/__fpending.h, addext.c, backupfile.c, exclude.c, getline.c, malloc.c, putenv.c, realloc.c, strcasecmp.c: Include rather than , as we merely need size_t. * lib/dirname.h, memcoll.h, xalloc.h, xmemcoll.h: Include , to get size_t. * lib/hash.h, linebuffer.h, readtokens.h, stdio-safer.h, version-etc.h: Include , to get FILE. * lib/memcasecmp.c: Don't include , as we can assume memcasecmp.h has included and all we need is size_t. * lib/memcoll.c: Include "memcoll.h", which gets us size_t and checks our interface, instead of including 2003-06-04 Paul Eggert * config/srclist.txt ($LIBCSRC/time/mktime.c lib gpl): Comment out for now, as glibc mktime is buggy on non-glibc systems. 2003-06-03 Karl Berry * config/config.sub: update from prep. 2003-06-02 Paul Eggert [from coreutils] Fix some minor time-related bugs with POSIX time arguments. Some valid time stamps were being rejected (notably -1, and time stamps before 1900 on 64-bit hosts). And some invalid time stamps were being accepted, e.g. September 31. * lib/posixtm.h (posixtime): Return bool instead of time_t, so that we can return (time_t) -1 successfully. * lib/posixtm.c: Likewise. [HAVE_STDBOOL_H]: Include . (bool, false, true) [!HAVE_STDBOOL_H]: New type. (t): Remove static var. (year, posix_time_parse): Now takes struct tm * arg to modify, instead of static var. All uses changed. (year): Do not reject years before 1900; they can occur with 64-bit time_t. (posix_time_parse): Do not check for out-of-range components; that is now the caller's responsibility, since our checks were only approximations. (posixtime): Use mktime to check for out-of-range components, since it knows them exactly. If mktime returns (time_t) -1, check whether an error actually occurred by invoking localtime on -1. (main) [TEST_POSIXTIME]: Check for input data errors, and report posixtime failures better. Improve the test data (in comments only). 2003-06-02 Karl Berry * config/mkinstalldirs (version): new variable. (--version): new option. (usage): improve message. 2003-05-30 Karl Berry * lib/mktime.c: update from libc. 2003-05-30 Bruno Haible * modules/gettext: Add files m4/nls.m4 and m4/po.m4. * config/config.rpath: Upgrade to gettext-0.12.1. 2003-05-30 Bruno Haible * m4/gettext.m4: Upgrade to gettext-0.12.1. * m4/nls.m4: New file, from gettext-0.12.1. * m4/po.m4: New file, from gettext-0.12.1. * m4/progtest.m4: Upgrade to gettext-0.12.1. 2003-05-30 Bruno Haible * lib/config.charset: Upgrade to gettext-0.12.1 and libiconv-1.9.1. * lib/localcharset.h: Likewise. * lib/localcharset.c: Likewise. 2003-05-29 Karl Berry * config/config.rpath: update from gettext. 2003-05-28 Paul Eggert Assume the headers required for C89 freestanding compilers. * m4/backupfile.m4 (gl_BACKUPFILE): Don't check for limits.h. * m4/fsusage.m4 (gl_PREREQ_FSUSAGE_EXTRA): Likewise. * m4/human.m4 (gl_HUMAN): Likewise. * m4/pathmax.m4 (gl_PATHMAX): Likewise. * m4/rpmatch.m4 (gl_FUNC_RPMATCH): Likewise. * m4/userspec.m4 (gl_USERSPEC): Likewise. * m4/xreadlink.m4 (gl_XREADLINK): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise. * m4/quote.m4 (gl_QUOTE): Don't check for stddef.h. 2003-05-28 Paul Eggert Assume the headers required for C89 freestanding compilers. * lib/addext.c, lib/backupfile.c, lib/fsusage.c, lib/human.c, lib/pathmax.h, lib/rpmatch.c, lib/userspec.c, lib/xreadlink.c, lib/xstrtol.c: Include without checking for HAVE_LIMITS_H. * lib/backupfile.c, lib/fsusage.c, lib/hash.c, lib/human.c, lib/safe-read.c, lib/userspec.c, lib/xstrtol.c (CHAR_BIT): Don't define, since is guaranteed to do that. * lib/fatal.c: Include without checking for __STDC__. * lib/exclude.c: Include unconditionally. * lib/tempname.c: Include unconditionally. * lib/hash.c: Include , since we no longer define CHAR_BIT. * lib/modechange.c, rpmatch.c (NULL): Don't define, since does that. * lib/quote.c: Dont include or ; not needed. * lib/safe-read.c (INT_MAX): Don't define, since does that. * lib/safe-read.c (TYPE_MINIMUM, TYPE_MAXIMUM): Remove; no longer needed. * lib/xstrtol.c: Likewise. * lib/safe-read.c: Remove TYPE_SIGNED; no longer needed. * lib/savedir.c: Include instead of defining NULL. * lib/addext.c (addext): Use assignment rather than cast, to avoid warnings on some platforms. * lib/mktime.c (__mktime_internal): Do not reject negative timestamps arbitrarily. 2003-05-26 Jim Meyering Merge in a change from coreutils: * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Test the cache variable, not one that is guaranteed to be `no'. Use `no_such_member' to indicate that condition, rather than `-1' which is slightly misleading. Change the name of the cache variable to have the gl_ prefix. Prompted by a patch from Richard Dawe for DJGPP. 2003-05-24 Karl Berry * config/config.guess: update from prep. 2003-05-22 Karl Berry * gnulib-tool (func_usage): =LIBRARY not =libRARY in help msg. 2003-05-20 Karl Berry * config/config.guess: update from prep. 2003-05-18 Karl Berry * config/srclistvars.sh (TEXMF): use TEXMFROOT instead, since TEXMF might actually be set by the user. * config/depcomp, install-sh, mdate-sh: update from automake. 2003-05-17 Bruno Haible * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Fix a quoting bug leading to an invalid expansion for AC_EGREP_CPP. * m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Likewise. * m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Likewise. Suggested by Akim Demaille in http://mail.gnu.org/r/bug-autoconf/2003-05/threads.html 2003-05-12 Jim Meyering * lib/strftime.c (my_strftime): Let the `-' (no-pad) flag affect the space-padded-by-default conversion specifiers, %e, %k, %l. 2003-05-12 Bruno Haible * lib/linebreak.c (iconv_string_length): Don't return -1 just because the string is longer than 4 KB. 2003-05-11 Karl Berry * config/config.{guess,sub}: update from prep. 2003-05-09 Bruno Haible * modules/error: Add m4/strerror_r.m4 to file list. 2003-05-03 Bruno Haible Upgrade to Unicode-4.0. * lib/linebreak.c (nonspacing_table_data): Change width of U+00AD, U+0350..U+0357, U+035D..U+035F, U+0600..U+0603, U+0610..U+0615, U+0656..U+0658, U+0A01, U+0AE2..U+0AE3, U+0CBC, U+17B4..U+17B5, U+17DD, U+1920..U+1922, U+1927..U+192B, U+1932, U+1939..U+193B from 1 to 0. Change width of U+0CBF, U+0CC6, U+180E from 0 to 1. (uc_width): Change width of U+4DC0..U+4DFF from 2 to 1. Change width of U+2A6D7..U+2F7FF, U+2FA1E..U+2FFFD, U+30000..U+3FFFD from 1 to 2. Change width of U+E0100..U+E01EF from 1 to 0. 2003-04-25 Jim Meyering * lib/copy-file.c (copy_file_preserving): Declare buf_size to be of type size_t, not int. 2003-04-25 Bruno Haible * lib/copy-file.c: Include , for size_t. 2003-04-21 Paul Eggert * m4/error.m4 (gl_ERROR): Do not put under dynamic conditions some code which expansion is under static control. Patch imported from Akim Demaille's patch to Bison; see . 2003-04-14 Bruno Haible * m4/error.m4 (jm_PREREQ_ERROR): Use AC_FUNC_VPRINTF. 2003-04-11 Jim Meyering Merge changes from Coreutils. 2003-03-22 Jim Meyering * lib/strftime.c (widen): Cast alloca return value to proper type. 2003-01-19 Ulrich Drepper From GNU libc. * lib/strftime.c (my_strftime): Handle very large width specifications for numeric values correctly. Improve checks for overflow. 2003-01-19 Jim Meyering * lib/strftime.c (widen) [COMPILE_WIDE]: Merge nearly-identical definitions. (nl_get_alt_digit) [! defined my_strftime]: Define. (my_strftime) [_NL_CURRENT]: Merge nearly-identical uses of _nl_get_alt_digit and _nl_get_walt_digit. * lib/strftime.c (my_strftime): Merge in locale-related changes from libc. These changes have no effect outside of _LIBC. 2003-04-10 Bruno Haible * modules/findprog: New file. * MODULES.html.sh (func_all_modules): Add it. 2003-04-10 Bruno Haible * m4/findprog.m4: New file. * m4/eaccess.m4: New file. 2003-04-10 Bruno Haible * lib/findprog.h: New file, from GNU gettext. * lib/findprog.c: New file, from GNU gettext. 2003-04-05 Jim Meyering Merge changes from Coreutils. * lib/exclude.h (PARAMS): Remove definition and uses. * lib/exclude.c: Remove uses of `PARAMS'. * lib/dirname.c [TEST_DIRNAME]: Update build instructions for test. Add test-cases for DOS filenames. Declare program_name. (main): Set up program_name. Patch by Rich Dawe. * lib/mountlist.c (read_filesystem_list) [MOUNTED_VMOUNT]: Detect any error from mntctl. Use mntctl's return value to drive the entry-processing loop, since we can't rely on the value of the vmt_length member in the last entry. On some systems doing so could result in exhausting virtual memory. Based in part on a patch from Mike Jetzer. 2003-04-04 Bruno Haible * modules/linebreak: New file. * MODULES.html.sh (func_all_modules): Add it. 2003-04-04 Bruno Haible * m4/linebreak.m4: New file. 2003-04-04 Bruno Haible * lib/linebreak.h: New file, from GNU gettext. * lib/linebreak.c: New file, from GNU gettext with slight modifications. * lib/lbrkprop.h: New file, from GNU gettext. 2003-04-03 Bruno Haible * modules/utf8-ucs4: New file. * modules/utf16-ucs4: New file. * modules/ucs4-utf8: New file. * modules/ucs4-utf16: New file. * MODULES.html.sh (func_all_modules): Add them. 2003-04-03 Bruno Haible * m4/utf-ucs4.m4: New file. * m4/ucs4-utf.m4: New file. 2003-04-03 Bruno Haible * lib/utf8-ucs4.h: New file, from GNU gettext. * lib/utf16-ucs4.h: New file, from GNU gettext. * lib/ucs4-utf8.h: New file, from GNU gettext. * lib/ucs4-utf16.h: New file, from GNU gettext. 2003-04-02 Bruno Haible * modules/binary-io: New file. * MODULES.html.sh (func_all_modules): Add it. 2003-04-02 Bruno Haible * lib/binary-io.h: New file, from GNU gettext. 2003-04-01 Bruno Haible * modules/pathname: New file. * MODULES.html.sh (func_all_modules): Add it. 2003-04-01 Bruno Haible * lib/pathname.h: New file, from GNU gettext. * lib/concatpath.c: New file, from GNU gettext. 2003-03-30 Bruno Haible * m4/copy-file.m4 (gl_COPY_FILE): Add check for chown(). 2003-03-30 Bruno Haible * lib/copy-file.c (copy_file_preserving): Don't set owner if the function chown() doesn't exist. 2003-03-28 Bruno Haible * modules/copy-file: New file. * MODULES.html.sh (func_all_modules): Add it. 2003-03-28 Bruno Haible * m4/copy-file.m4: New file. 2003-03-28 Bruno Haible * lib/copy-file.h: New file, from GNU gettext. * lib/copy-file.c: New file, from GNU gettext. 2003-03-18 Jim Meyering * lib/quote.c (quote_n): Fix typo in comment. 2003-03-18 Bruno Haible * m4/onceonly.m4: Use m4_defn instead of defn, for better error checking. * m4/onceonly_2_57.m4: Likewise. 2003-03-17 Bruno Haible * m4/onceonly.m4: Require autoconf 2.54 or newer. (m4_quote): Remove macro. * m4/onceonly_2_57.m4: Require autoconf 2.54 or newer. 2003-03-14 Jim Meyering Merge changes from Coreutils. * lib/obstack.h (obstack_object_size): Declare temporary, __o, to be const, in order to avoid warnings. (obstack_room): Likewise. (obstack_empty_p): Likewise. 2003-03-14 Bruno Haible * m4/onceonly_2_57.m4 (AC_CHECK_HEADERS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_DECLS_ONCE): Quote AC_FOREACH variable-expansions properly. 2003-03-13 Paul Eggert Merge changes from Bison. * lib/obstack.h: (__INT_TO_PTR) [__STDC__]: Cast result to (void *) to avoid diagnostic with native c89 on SGI IRIX 6.5 when compiling Bison 1.875's `bitset bset = obstack_alloc (bobstack, bytes);'. Problem reported by Nelson H. F. Beebe. * lib/hash.c: Include unconditionally. 2003-03-13 Paul Eggert * m4/onceonly.m4 (m4_quote): New macro. (AC_CHECK_HEADERS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_DECLS_ONCE): Quote AC_FOREACH variable-expansions properly. 2003-03-13 Paul Eggert * doc/COPYING.DOC, fdl.texi: Sync with latest FSF version. 2003-03-09 Paul Eggert * lib/argmatch.c (EXIT_FAILURE): Define if the system doesn't. Reported by Bruce Becker; see: http://mail.gnu.org/r/bug-bison/2003-03/msg00017.html 2003-03-03 Paul Eggert Bruno Haible * lib/mbswidth.h: Include . Needed for UnixWare 7.1.1. Reported by John Hughes, see http://mail.gnu.org/r/bug-bison/2003-02/msg00030.html 2003-02-20 Bruno Haible * MODULES.html.sh (func_all_modules): Add poll. 2003-02-19 Paolo Bonzini * modules/poll: New file. 2003-02-19 Paolo Bonzini * lib/poll_.h: New file. * lib/poll.c: New file. 2003-02-19 Paolo Bonzini * m4/poll.m4: New file. 2003-02-18 Paolo Bonzini * modules/mathl: New file. 2003-02-18 Paolo Bonzini * lib/mathl.h: New file. * lib/acosl.c: New file. * lib/asinl.c: New file. * lib/atanl.c: New file. * lib/ceill.c: New file. * lib/cosl.c: New file. * lib/expl.c: New file. * lib/floorl.c: New file. * lib/frexpl.c: New file. * lib/ldexpl.c: New file. * lib/logl.c: New file. * lib/sincosl.c: New file. * lib/sinl.c: New file. * lib/sqrtl.c: New file. * lib/tanl.c: New file. * lib/trigl.c: New file. * lib/trigl.h: New file. 2003-02-18 Paolo Bonzini * m4/mathl.m4: New file. 2003-02-18 Bruno Haible * MODULES.html.sh (func_all_modules): Add mathl. 2003-02-17 Bruno Haible * modules/mkdtemp: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-02-17 Bruno Haible * m4/mkdtemp.m4: New file, from GNU gettext with modifications. 2003-02-17 Bruno Haible * lib/mkdtemp.h: New file, from GNU gettext. * lib/mkdtemp.c: New file, from GNU gettext. 2003-02-02 Jim Meyering * m4/regex.m4 (jm_INCLUDED_REGEX): Detect broken re_search in e.g. glibc-2.2.93. 2003-01-31 Bruno Haible * m4/rename.m4 (vb_FUNC_RENAME): Add a redirection from 'rename' to 'rpl_rename'. * m4/strnlen.m4 (gl_FUNC_STRNLEN): Add a redirection from 'strnlen' to 'rpl_strnlen'. * m4/strtod.m4 (gl_FUNC_STRTOD): Add a redirection from 'strtod' to 'rpl_strtod'. * m4/utime.m4 (jm_FUNC_UTIME): Add a redirection from 'utime' to 'rpl_utime'. 2003-01-31 Bruno Haible * lib/rename.c: #undef rename before defining rpl_rename. * lib/strnlen.c: #undef strnlen, define rpl_strnlen instead of strnlen. 2003-01-30 Bruno Haible * modules/vasnprintf, modules/vasprintf: New modules. * MODULES.html.sh (func_all_modules): Add them. 2003-01-30 Bruno Haible * m4/signed.m4: New file, from GNU gettext. * m4/longdouble.m4: New file, from GNU gettext. * m4/wchar_t.m4: New file, from GNU gettext. * m4/wint_t.m4: New file, from GNU gettext. * m4/vasnprintf.m4: New file. * m4/vasprintf.m4: New file. 2003-01-30 Bruno Haible * lib/printf-args.h: New file, from GNU gettext. * lib/printf-args.c: New file, from GNU gettext. * lib/printf-parse.h: New file, from GNU gettext. * lib/printf-parse.c: New file, from GNU gettext. * lib/vasnprintf.h: New file, from GNU gettext. * lib/vasnprintf.c: New file, from GNU gettext. * lib/asnprintf.c: New file, from GNU gettext. * lib/vasprintf.h: New file, from GNU gettext with modifications. * lib/vasprintf.c: New file, from GNU gettext. * lib/asprintf.c: New file, from GNU gettext. 2003-01-29 Bruno Haible * modules/stpncpy: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-01-29 Bruno Haible * m4/stpncpy.m4: New file. 2003-01-29 Bruno Haible * lib/stpncpy.h: New file, from GNU gettext with modifications. * lib/stpncpy.c: New file, from GNU gettext with modifications. 2003-01-28 Bruno Haible * modules/c-ctype: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-01-28 Bruno Haible * lib/c-ctype.h: New file, from GNU gettext, with changes suggested by Paul Eggert. * lib/c-ctype.c: New file, from GNU gettext, with changes suggested by Paul Eggert. 2003-01-27 Bruno Haible * modules/xsetenv: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-01-27 Bruno Haible * lib/xsetenv.h: New file, from GNU gettext. * lib/xsetenv.c: New file, from GNU gettext. 2003-01-23 Jim Meyering * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Correct typo: s/-1/no/ that kept this from working on systems without dirfd (at least Irix and OSF1/Tru64). 2003-01-23 Bruno Haible * modules/minmax: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-01-23 Bruno Haible * lib/minmax.h: New file, from GNU gettext, with comments from Paul Eggert. 2003-01-22 Bruno Haible * modules/exit: New module. * MODULES.html.sh (func_all_modules): Add it. 2003-01-22 Bruno Haible * lib/exit.h: New file, from GNU gettext. 2003-01-19 Bruno Haible * gnulib-tool: Recognize option --extract-maintainer. (func_get_maintainer): New function. * modules/*: Add Maintainer entry. 2003-01-16 Jim Meyering * m4/regex.m4: The `regex' struct is both input and output. Initialize it before each use. Patch by Tim Waugh. 2003-01-16 Bruno Haible * MODULES.html.sh: Add a table of contents. Add the module name as leftmost column. Add hyperlinks. 2003-01-15 Bruno Haible * m4/md5.m4 (gl_MD5): Require AC_C_INLINE. 2003-01-15 Bruno Haible * m4/longlong.m4 (jm_AC_TYPE_LONG_LONG): Also test the LL suffix. * m4/ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Also test the ULL suffix. 2003-01-15 Bruno Haible * m4/alloca.m4 (gl_FUNC_ALLOCA): Invoke AC_EGREP_CPP prerequisites. 2003-01-15 Bruno Haible * lib/stpcpy.h (stpcpy): Use ANSI C function declarations. * lib/strcase.h (strcasecmp, strncasecmp): Likewise. 2003-01-14 Jim Meyering * lib/same.c (same_name): Tweak a comment. 2003-01-14 Bruno Haible * lib/same.c (same_name): Reorder tests so as to avoid calling stat() when a string comparison is sufficient. 2003-01-14 Bruno Haible * lib/readtokens.c (readtoken): Cast character to 'unsigned char', not 'unsigned int'. 2003-01-14 Bruno Haible * lib/hash-pjw.c: Add comment about low quality of this function. 2003-01-13 Bruno Haible * modules/stpcpy: Distribute lib/stpcpy.h. * modules/setenv: Depend on alloca. Distribute lib/setenv.h. 2003-01-13 Bruno Haible * modules/*: Add a description. * modules/strpbrk: Fix Makefile.am snippet. * modules/strtoimax: Fix dependencies. * modules/strtoumax: Likewise. 2003-01-13 Bruno Haible * gnulib-tool (func_create_testdir): Substitute lib_OBJECTS. * modules/alloca (Makefile.am): All object files depend on alloca.h. * modules/stdbool (Makefile.am): All object files depend on stdbool.h. 2003-01-13 Bruno Haible * gnulib-tool (func_create_testdir): Store config/* files in the main directory. * config.rpath: Move to ... * config/config.rpath: ... here. * modules/gettext: Contains config/config.rpath, not config.rpath. * modules/iconv: Likewise. 2003-01-12 Paul Eggert Finish renaming getstr -> getdelim2 and readline -> readlinebuffer, to avoid collisions with libcurses and libreadline. * m4/getstr.m4: Remove. * m4/getline.m4 (gl_PREREQ_GETLINE): Require AC_HEADER_STDC. 2003-01-12 Paul Eggert Finish renaming getstr -> getdelim2 and readline -> readlinebuffer, to avoid collisions with libcurses and libreadline. * lib/Makefile.am (libfetish_a_SOURCES): Remove getstr.c, getstr.h. * lib/getstr.h, getstr.c: Remove. * lib/getline.c: Include "getline.h", to check interface. Move body of old getstr.c here: this defines MIN_CHUNK and declares getdelim2, which is renamed from getstr. (getline, getdelim): Adjust to renaming of getstr -> getdelim2. * lib/linebuffer.c (readlinebuffer): Renamed from readline. All uses changed. * lib/linebuffer.h: Likewise. (readline): Remove backward-compatibility macro. 2003-01-12 Paul Eggert Finish renaming getstr -> getdelim2 and readline -> readlinebuffer, to avoid collisions with libcurses and libreadline. * getstr: Remove. * MODULES.html.sh: Remove getstr. * modules/getline: Depend on unlocked-io, not getstr. 2003-01-12 Jim Meyering * lib/makepath.c: Don't test HAVE_ERRNO_H. It's not necessary. 2003-01-10 Bruno Haible * modules/alloca: Change Makefile.am requirements. Simplify Include requirements. Add lib/alloca_.h to file list. 2003-01-10 Bruno Haible * m4/alloca.m4 (gl_FUNC_ALLOCA): Also define ALLOCA_H. 2003-01-10 Bruno Haible * lib/alloca_.h: New file. * lib/getdate.y: Unconditionally include alloca.h. * lib/makepath.c: Likewise. * lib/setenv.c: Likewise. * lib/userspec.c: Likewise. 2003-01-09 Karl Berry * MODULES.html.sh: include `dirname $0` in PATH, to find gnulib-tool. 2003-01-09 Bruno Haible * modules/stdbool: Change configure.ac, Makefile.am requirements. Simplify Include requirements. Add lib/stdbool.h.in to file list. 2003-01-09 Bruno Haible * m4/stdbool.m4 (AM_STDBOOL_H): New macro. 2003-01-09 Bruno Haible * lib/stdbool.h.in: New file. 2003-01-09 Bruno Haible * gnulib-tool (func_all_modules): Ignore files ending in ~. * MODULES.html.sh: Likewise. 2003-01-08 Jim Meyering * lib/full-write.c: Undefine and define-away `const' after inclusion of errno.h, not before. Suggestion from Bruno Haible. 2003-01-08 Bruno Haible * modules/full-read: Depend on full-write. 2003-01-08 Bruno Haible * lib/safe-read.c: Include specification header first, to ensure its selfcontainedness. * lib/full-write.c: Likewise. 2003-01-07 Jim Meyering * lib/full-write.c: Rework so that it may serve to define full_read, too. * lib/full-read.c: Simply #define FULL_READ and include full-write.c. 2003-01-07 Bruno Haible * lib/strtoimax.c: Include as an alternative to . * lib/xstrtol.h: Likewise. * lib/xstrtoimax.c: Likewise. * lib/xstrtoumax.c: Likewise. * lib/human.h: Likewise. * lib/tempname.c: Include too. Avoids a compilation error on systems that have but not . 2003-01-07 Bruno Haible * MODULES.html.sh: Add copyright notice. (missed_files): Omit CVS directory entries. (func_module): Make it work with sed-3.02. * MODULES.txt: Remove file. 2003-01-06 Jim Meyering * lib/version-etc.c: Update year in translatable copyright string. 2003-01-03 Karl Berry * config/config.{guess,sub}: update from prep. 2003-01-02 Karl Berry * doc/COPYING.DOC: belatedly updated to 1.2. 2003-01-01 Karl Berry * gnulib-tool (func_verify_module): report module name $module in error message, not $1. * gnulib-tool (create-testdir): don't complain if destdir couldn't be created, only if it doesn't exist. * gnulib-tool (last_checkin_date): don't expand the $Date here. 2002-12-31 Paul Eggert * m4/memcoll.m4 (gl_MEMCOLL): Require AC_FUNC_MEMCMP. 2002-12-31 Paul Eggert * lib/memcoll.c (memcoll): Fall back on a simple algorithm using memcmp if strcoll doesn't work. 2002-12-31 Bruno Haible * lib/utime.c (utime_null): No need to call ftruncate if the file was nonempty. 2002-12-31 Bruno Haible * lib/memcoll.c (STRCOLL): New macro. (memcoll): Use it. 2002-12-31 Bruno Haible * lib/localcharset.h: New file. * lib/localcharset.c: Include it. * lib/unicodeio.c: Likewise. 2002-12-31 Bruno Haible * lib/getstr.h (getstr): Define, to avoid clash with libcurses. * lib/linebuffer.h (readline): Define, to avoid clash with libreadline. 2002-12-31 Bruno Haible * lib/getline.h: Include , for size_t. * lib/unicodeio.h: Include , for size_t. * lib/unicodeio.c: Don't include . 2002-12-31 Bruno Haible * lib/getdate.y (get_date): Test HAVE_STRUCT_TM_TM_ZONE, not HAVE_TM_ZONE. 2002-12-24 Karl Berry * config/config.guess: update from prep. 2002-12-24 Bruno Haible General infrasructure. * m4/README: Rewritten. * m4/onceonly.m4: New file. * m4/onceonly_2_57.m4: New file. Module atexit. * m4/atexit.m4: New file. Module strtod. * m4/strtod.m4: New file. Module strtol. * m4/strtol.m4: New file. Module strtoul. * m4/strtoul.m4: New file. Module memchr. * m4/memchr.m4: New file. Module memcmp. * m4/memcmp.m4 (gl_PREREQ_MEMCMP): New macro. (jm_FUNC_MEMCMP): Invoke it. Module memcpy. * m4/memcpy.m4: New file. Module memmove. * m4/memmove.m4: New file. Module memset. * m4/memset.m4: New file. Module strcspn. * m4/strcspn.m4: New file. Module strpbrk. * m4/strpbrk.m4: New file. Module strstr. * m4/strstr.m4: New file. Module strerror. * m4/strerror.m4: New file. Module mktime. * m4/mktime.m4: Renamed from jm-mktime.m4. (gl_PREREQ_MKTIME): New macro. (gl_FUNC_MKTIME): Renamed from jm_FUNC_MKTIME. Invoke gl_PREREQ_MKTIME. Module malloc. * m4/malloc.m4 (gl_PREREQ_MALLOC): New macro. (jm_FUNC_MALLOC): Use AC_FUNC_MALLOC. Invoke gl_PREREQ_MALLOC. Don't define HAVE_DONE_WORKING_MALLOC_CHECK, since nothing uses it. Module realloc. * m4/realloc.m4 (gl_PREREQ_REALLOC): New macro. (jm_FUNC_REALLOC): Use AC_FUNC_REALLOC. Invoke gl_PREREQ_REALLOC. Don't define HAVE_DONE_WORKING_REALLOC_CHECK, since nothing uses it. Module strftime. * m4/tm_gmtoff.m4: New file, extracted from strftime.m4. * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Use AC_FUNC_STRFTIME. Don't test for bcopy (we are not emacs). Invoke AC_TYPE_MBSTATE_T and gl_TM_GMTOFF. (_jm_STRFTIME_PREREQS, jm_FUNC_GNU_STRFTIME): Use onceonly macros. Module xalloc. * m4/xalloc.m4: New file. Module alloca. * m4/alloca.m4: New file. Module putenv. * m4/putenv.m4 (gl_PREREQ_PUTENV): New macro. (jm_FUNC_PUTENV): Invoke it. Module setenv. * m4/setenv.m4 (gt_FUNC_SETENV): New macro. (gt_CHECK_VAR_DECL): Fix quoting error that led to infinite loop in m4 when invoked twice. (gt_PREREQ_SETENV, gt_PREREQ_UNSETENV): New macros, replacing old gt_FUNC_SETENV. Module memrchr. * m4/memrchr.m4: New file. Module stpcpy. * m4/stpcpy.m4: New file. Module strcase. * m4/strcase.m4: New file. Module strdup. * m4/strdup.m4: New file. Module strnlen. * m4/strnlen.m4: New file. Module strndup. * m4/strndup.m4: New file. Module xstrtod. * m4/xstrtod.m4: New file. Module xstrtol. * m4/xstrtol.m4: New file. Module getdate. * m4/getdate.m4: New file. Module unlocked-io. * m4/unlocked-io.m4: Renamed from jm-glibc-io.m4. (jm_FUNC_GLIBC_UNLOCKED_IO): Invoke AC_GNU_SOURCE. Use onceonly macros. * m4/jm-glibc-io.m4n: Remove file. Module long-options. * m4/long-options.m4: New file. Module md5. * m4/md5.m4: New file. Module sha. * m4/sha.m4: New file. Module getstr. * m4/getstr.m4: New file. Module getline. * m4/getline.m4 (gl_PREREQ_GETLINE): New macro. (AM_FUNC_GETLINE): Invoke AC_GNU_SOURCE. Use , not , for size_t. Use the function name gnu_getline, not simply getline. Infoke gl_PREREQ_GETLINE. Module obstack. * m4/obstack.m4: New file. Module hash. * m4/hash.m4: New file. Module readtokens. * m4/readtokens.m4: New file. Module strverscmp. * m4/strverscmp.m4: New file. Module stdbool. * m4/stdbool.m4 (AC_HEADER_STDBOOL): Add test for _Bool. Needed for OSF/1. Module strtoll. * m4/strtoll.m4: New file. Module strtoull. * m4/strtoull.m4: New file. Module strtoimax. * m4/strtoimax.m4: New file. Module strtoumax. * m4/strtoumax.m4: New file. Module xstrtoimax. * m4/xstrtoimax.m4 (jm_XSTRTOIMAX): Renamed from jm_AC_PREREQ_XSTRTOIMAX. Moved the strtol prerequisites to strtol.m4. Moved the strtoll prerequisites to strtoll.m4. Moved the strtoimax prerequisites to strtoimax.m4. Module xstrtoumax. * m4/xstrtoumax.m4 (jm_XSTRTOUMAX): Renamed from jm_AC_PREREQ_XSTRTOUMAX. Moved the strtoul prerequisites to strtoul.m4. Moved the strtoull prerequisites to strtoull.m4. Moved the strtoumax prerequisites to strtoumax.m4. Module chown. * m4/chown.m4 (gl_PREREQ_CHOWN): New macro. (jm_FUNC_CHOWN): Use AC_FUNC_CHOWN. Invoke gl_PREREQ_CHOWN. Module dup2. * m4/dup2.m4: New file. Module ftruncate. * m4/ftruncate.m4 (gl_PREREQ_FTRUNCATE): New macro. (jm_FUNC_FTRUNCATE): Use AC_REPLACE_FUNCS. Invoke gl_PREREQ_FTRUNCATE. Module getgroups. * m4/getgroups.m4 (gl_PREREQ_GETGROUPS): New macro. (jm_FUNC_GETGROUPS): Use AC_FUNC_GETGROUPS. Invoke gl_PREREQ_GETGROUPS. Module gettimeofday. * m4/gettimeofday.m4 (gl_PREREQ_GETTIMEOFDAY): New macro. (AC_FUNC_GETTIMEOFDAY_CLOBBER): Use onceonly macros. Invoke gl_PREREQ_GETTIMEOFDAY. Module mkdir. * m4/mkdir-slash.m4 (gl_PREREQ_MKDIR): New macro. (UTILS_FUNC_MKDIR_TRAILING_SLASH): Invoke gl_PREREQ_MKDIR. Module mkstemp. * m4/mkstemp.m4 (gl_PREREQ_MKSTEMP): New macro. (jm_PREREQ_TEMPNAME): New macro, from prereq.m4. Also invoke jm_AC_TYPE_UINTMAX_T. (UTILS_FUNC_MKSTEMP): Invoke gl_PREREQ_MKSTEMP and jm_PREREQ_TEMPNAME. Module stat. * m4/stat.m4 (gl_PREREQ_STAT): New macro. (jm_FUNC_STAT): Use AC_FUNC_STAT. Invoke gl_PREREQ_STAT. Module lstat. * m4/lstat.m4 (gl_PREREQ_LSTAT): New macro. (jm_FUNC_LSTAT): Use AC_FUNC_LSTAT. Invoke gl_PREREQ_LSTAT. Module timespec. * m4/timespec.m4 (gl_TIMESPEC): New macro. (jm_CHECK_TYPE_STRUCT_TIMESPEC): Add check for . * m4/st_mtim.m4: Indentation. Module nanosleep. * m4/nanosleep.m4 (gl_PREREQ_NANOSLEEP): New macro. (jm_FUNC_NANOSLEEP): Add check for . Invoke gl_PREREQ_NANOSLEEP. Module regex. * m4/regex.m4 (jm_PREREQ_REGEX): New macro. (jm_INCLUDED_REGEX): Invoke jm_PREREQ_REGEX. (gl_REGEX): New macro. Module rename. * m4/rename.m4 (gl_PREREQ_RENAME): New macro. (vb_FUNC_RENAME): Invoke gl_PREREQ_RENAME. Module rmdir. * m4/rmdir.m4: New file. Module utime. * m4/utimbuf.m4 (jm_CHECK_TYPE_STRUCT_UTIMBUF): Use onceonly macros. * m4/utime.m4 (gl_PREREQ_UTIME): New macro. (jm_FUNC_UTIME): Invoke gl_PREREQ_UTIME. Module dirname. * m4/dirname.m4: New file. Module getopt. * m4/getopt.m4: New file. Module unistd-safer. * m4/unistd-safer.m4: New file. Module fnmatch. * m4/fnmatch.m4 (_AC_FUNC_FNMATCH_IF): Include , for exit() declaration. (gl_PREREQ_FNMATCH_EXTRA): New macro. (gl_FUNC_FNMATCH_POSIX): New macro. (gl_FUNC_FNMATCH_GNU): Renamed from AC_FUNC_FNMATCH_GNU. Invoke gl_PREREQ_FNMATCH_EXTRA. Use the function name gnu_fnmatch, not simply fnmatch. Module exclude. * m4/exclude.m4: New file. Module human. * m4/human.m4: New file. Module acl. * m4/acl.m4: Nop. Module backupfile. * m4/backupfile.m4: New file. * m4/d-ino.m4: Indentation. Module fsusage. * m4/fsusage.m4 (gl_FSUSAGE): New macro. (jm_STATFS_TRUNCATES): New macro, from coreutils-4.5.4/configure.ac. (gl_PREREQ_FSUSAGE_EXTRA): New macro. Module dirfd. * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Invoke some AC_EGREP_CPP requirements. Module euidaccess. * m4/euidaccess.m4: New file. Module file-type. * m4/file-type.m4: New file. Module fileblocks. * m4/fileblocks.m4: New file. Module filemode. * m4/filemode.m4: New file. Module isdir. * m4/isdir.m4: New file. Module lchown. * m4/lchown.m4 (gl_PREREQ_LCHOWN): New macro. (jm_FUNC_LCHOWN): Invoke gl_PREREQ_LCHOWN. Module makepath. * m4/makepath.m4: New file. Module modechange. * m4/modechange.m4: New file. Module mountlist. * m4/mountlist.m4: New file. * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Use onceonly macros. Indentation. Module path-concat. * m4/path-concat.m4: New file. Module pathmax. * m4/pathmax.m4: New file. Module same. * m4/same.m4: New file. Module save-cwd. * m4/save-cwd.m4: New file. Module savedir. * m4/savedir.m4: New file. Module xgetcwd. * m4/xgetcwd.m4: New file. * m4/getcwd.m4 (AC_FUNC_GETCWD_NULL): Use onceonly macros. Module xreadlink. * m4/xreadlink.m4: New file. Module safe-read. * m4/safe-read.m4: New file. Module safe-write. * m4/safe-write.m4: New file. Module closeout. * m4/closeout.m4: New file. Module stdio-safer. * m4/stdio-safer.m4: New file. Module getpass. * m4/getpass.m4: New file. Module getugroups. * m4/getugroups.m4: New file. Module group-member. * m4/group-member.m4 (gl_PREREQ_GROUP_MEMBER): New macro. (jm_FUNC_GROUP_MEMBER): Invoke AC_GNU_SOURCE, gl_PREREQ_GROUP_MEMBER. Module idcache. * m4/idcache.m4: New file. Module userspec. * m4/userspec.m4: New file. Module gettime. * m4/clock_time.m4: New file. * m4/gettime.m4: New file. Module settime. * m4/settime.m4: New file. Module posixtm. * m4/posixtm.m4: New file. Module gethostname. * m4/gethostname.m4: New file. Module canon-host. * m4/canon-host.m4: New file. Module gettext. * m4/codeset.m4: New file, from gettext-0.11.5. * m4/gettext.m4: New file, from gettext-0.11.5. * m4/glibc21.m4: New file, from gettext-0.11.5. * m4/iconv.m4: New file, from gettext-0.11.5. * m4/intdiv0.m4: New file, from gettext-0.11.5. * m4/inttypes-pri.m4: New file, from gettext-0.11.5. * m4/inttypes.m4: New file, from gettext-0.11.5. * m4/inttypes_h.m4: New file, from gettext-0.11.5 with modifications. * m4/isc-posix.m4: New file, from gettext-0.11.5. * m4/lcmessage.m4: New file, from gettext-0.11.5. * m4/lib-ld.m4: New file, from gettext-0.11.5. * m4/lib-link.m4: New file, from gettext-0.11.5. * m4/lib-prefix.m4: New file, from gettext-0.11.5. * m4/progtest.m4: New file, from gettext-0.11.5. * m4/stdint_h.m4: New file, from gettext-0.11.5 with modifications. * m4/uintmax_t.m4: New file, from gettext-0.11.5 with modifications. * m4/ulonglong.m4: New file, from gettext-0.11.5 with modifications. Module localcharset. * m4/localcharset.m4: New file. Module hard-locale. * m4/hard-locale.m4: New file. Module mbswidth. * m4/mbswidth.m4 (gl_MBSWIDTH): Renamed from jm_PREREQ_MBSWIDTH. Use onceonly macros. * m4/mbrtowc.m4: Add comment. Module memcasecmp. * m4/memcasecmp.m4: New file. Module memcoll. * m4/memcoll.m4: New file. Module unicodeio. * m4/unicodeio.m4: New file. Module rpmatch. * m4/rpmatch.m4: New file. Module yesno. * m4/yesno.m4: New file. Module exitfail. * m4/exitfail.m4: New file. Module c-stack. * m4/c-stack.m4 (gl_C_STACK): New macro. (jm_PREREQ_C_STACK): Check for . Use onceonly macros. Module error. * m4/error.m4 (gl_ERROR): New macro. (jm_PREREQ_ERROR): Use onceonly macros. Module fatal. * m4/fatal.m4: New file. Module getloadavg. * m4/getloadavg.m4 (AC_FUNC_GETLOADAVG): Use onceonly macros. (gl_FUNC_GETLOADAVG, gl_PREREQ_GETLOADAVG): New macros. Module getpagesize. * m4/getpagesize.m4: New file. Module getusershell. * m4/getusershell.m4: New file. Module physmem. * m4/physmem.m4: New file. Module posixver. * m4/posixver.m4: New file. Module quotearg. * m4/quotearg.m4: New file. Module quote. * m4/quote.m4: New file. Module readutmp. * m4/readutmp.m4: New file, based on jm_PREREQ_READUTMP from prereq.m4. Module sig2str. * m4/sig2str.m4: New file. Other. * m4/longlong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Remove, moved to ulonglong.m4. * m4/intmax_t.m4: New file. * m4/d-type.m4: Indentation. * m4/jm-macros.m4: Update. * m4/prereq.m4 (jm_PREREQ): Update. (jm_PREREQ_ADDEXT): Remove, obsoleted by backupfile.m4. (jm_PREREQ_CANON_HOST): Remove, obsoleted by canon-host.m4. (jm_PREREQ_DIRNAME): Remove, obsoleted by dirname.m4. (jm_PREREQ_EXCLUDE): Remove, obsoleted by exclude.m4. (jm_PREREQ_GETPAGESIZE): Remove, obsoleted by getpagesize.m4. (jm_PREREQ_HARD_LOCALE): Remove, obsoleted by hard-locale.m4. (jm_PREREQ_HASH): Remove, obsoleted by hash.m4. (jm_PREREQ_HUMAN): Remove, obsoleted by human.m4. (jm_PREREQ_MEMCHR): Remove, obsoleted by memchr.m4. (jm_PREREQ_PHYSMEM): Remove, obsoleted by physmem.m4. (jm_PREREQ_POSIXVER): Remove, obsoleted by posixver.m4. (jm_PREREQ_QUOTEARG): Remove, obsoleted by quotearg.m4. (jm_PREREQ_READUTMP): Remove, obsoleted by readutmp.m4. (jm_PREREQ_REGEX): Remove, obsoleted by regex.m4. (jm_PREREQ_STRNLEN): Remove, obsoleted by strnlen.m4. (jm_PREREQ_TEMPNAME): Remove, obsoleted by mkstemp.m4. (jm_PREREQ_XGETCWD): Remove, obsoleted by xgetcwd.m4. (jm_PREREQ_XREADLINK): Remove, obsoleted by xreadlink.m4. * m4/readdir.m4 (jm_FUNC_READDIR): Use onceonly macros. 2002-12-24 Bruno Haible * MODULES.txt: Update according to m4/ changes. Module gettext. * config.rpath: New file, from gettext-0.11.5. * modules/*: New module descriptions. * gnulib-tool: New file. * MODULES.html.sh: New file. 2002-12-21 Karl Berry * doc/fdl.texi: update to version 1.2. 2002-12-19 Karl Berry * config/config.guess: update from prep. 2002-12-18 Bruno Haible * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Don't test for localtime_r. * m4/jm-mktime.m4 (jm_FUNC_MKTIME): Likewise. 2002-12-17 Bruno Haible * m4/mbswidth.m4 (jm_PREREQ_MBSWIDTH): Remove checks for limits.h, stdlib.h, string.h. 2002-12-17 Bruno Haible * lib/canon-host.c (strdup): Remove unused declaration. * lib/fsusage.c: Include full_read.h. (get_fs_usage): Use full_read instead of safe_read. * lib/utime.c (utime_null): Use SAFE_READ_ERROR. 2002-12-12 Karl Berry * config/config.guess: update from prep. 2002-12-11 Bruno Haible * m4/setenv.m4: New file, from gettext-0.11.5. 2002-12-11 Bruno Haible * lib/setenv.h: Rewritten to cope with systems that have setenv() but not unsetenv(). * lib/setenv.c, unsetenv.c: Taken from glibc-2.2.4 with the following modifications: 2002-12-11 Bruno Haible * setenv.c (alloca): Fall back to malloc. (freea): New macro. (setenv): Use freea() to free memory allocated with alloca(). 2002-11-13 Bruno Haible * setenv.c (compar_fn_t, __add_to_environ, setenv): Use ANSI C function declarations. * unsetenv.c (unsetenv): Likewise. 2002-03-04 Bruno Haible Portability to AIX 4.3.3. * unsetenv.c: New file, extracted from setenv.c. * setenv.c: Move the unsetenv() function to unsetenv.c. 2001-12-20 Bruno Haible * setenv.c (__add_to_environ): Don't call realloc(NULL,...), use malloc instead. For SunOS 4. 2001-12-11 Bruno Haible * setenv.c: Declare alloca. (compar_fn_t): New typedef. (KNOWN_VALUE, STORE_VALUE): Use it. * lib/Makefile.am (libfetish_a_SOURCES): Add setenv.c, unsetenv.c, setenv.h. 2002-12-10 Paul Eggert Port exclude.c and exclude.h to more non-GNU systems, e.g. Solaris 7. * lib/exclude.h (EXCLUDE_ANCHORED, EXCLUDE_INCLUDE, EXCLUDE_WILDCARDS): Choose values that are less likely to collide with system fnmatch options. * lib/exclude.c (FNM_CASEFOLD, FNM_LEADING_DIR): Define to 0 if not defined (e.g., a pure POSIX system). (EXCLUDE_macros_do_not_collide_with_FNM_macros): Use FNM_PATHNAME instead of FNM_FILE_NAME, for compatibility with pure POSIX sytems. 2002-12-06 Paul Eggert Undo the 2001-07-02 change for jm-glibc-io, as it was too much of a pain in practice to deal with generated m4 files. This change goes together with the 2002-12-04 unlocked-io.h change in ../lib. * m4/Makefile.am.in (Makefile.am): Don't mention jm-glibc-io.m4n and jm-glibc-io.m4, as they are no longer a special case. * m4/jm-glibc-io.m4: Rename from jm-glibc-io.m4n, and remove the kludge and the auto-generation stuff. Check only whether the functions are declared, not whether they exist, since older hosts that don't declare the functions can't use the optimization anyway. 2002-12-06 Jim Meyering * lib/error.c: Be consistent: change `#ifndef _LIBC' to `#if !_LIBC'. Merge in changes from libc's misc/error.c, in preparation for the merge of gnulib's changes back into libc. * lib/error.c (_): Define only if not already defined. Move definition to follow all #include directives. Include unlocked-io.h only if !_LIBC. [_LIBC]: Include . [USE_IN_LIBIO]: Include (fflush): Tweak definition to use INTUSE. (putc): Define. 2002-12-05 Paul Eggert * lib/alloca.c [defined emacs]: Include "lisp.h". (xalloc_die) [defined emacs]: New macro. (free) [defined emacs && defined EMACS_FREE]: Define to EMACS_FREE. [! defined emacs]: Include . (POINTER_TYPE) [!defined POINTER_TYPE]: New macro. (pointer): Typedef to POINTER_TYPE *. (malloc): Remove decl; we now always use xmalloc. (alloca): Use old-style definition, since Emacs needs this. Check for arithmetic overflow when computing combined size. 2002-12-04 Paul Eggert Do not generate unlocked-io.h automatically, since it's easier to maintain it by hand. * lib/unlocked-io.h: New file, from GNU diffutils, but with proper copyright notice and attribution. * lib/gen-uio: Remove. * lib/Makefile.am: Add copyright notice. (libfetish_a_SOURCES): Add unlocked-io.h. (BUILT_SOURCES, all-local): Remove unlocked-io.h. (DISTCLEANFILES, io_functions): Remove macros. (EXTRA_DIST): Remove gen_uio. (unlocked-io.h): Remove rule. 2002-12-04 Jim Meyering Reflect the fact that stat.c and lstat.c are no longer generated. * lib/Makefile.am (BUILT_SOURCES): Remove stat.c and lstat.c. (DISTCLEANFILES): Likewise. (EXTRA_DIST): Likewise. (all_local): Don't depend on stat.c or lstat.c. (stat.c, lstat.c): Remove rules. (EXTRA_DIST): Remove xstat.in. * lib/xstat.in: Remove file. Contents moved into stat.c. * lib/stat.c: New file. Contents mostly from xstat.in. * lib/stat.c: Rework so that it may serve to define rpl_lstat, too. * lib/lstat.c: New file. Simply #define LSTAT and include stat.c. * lib/safe-read.c: Rework so that it may serve to define safe_write, too. * lib/safe-write.c: Simply #define SAFE_WRITE and include safe-read.c. 2002-12-03 Jim Meyering * lib/safe-read.c, safe-write.c: Change variable names and comments, but not semantics, to minimize the differences between these two files. (safe_read): Change comment to mention SAFE_READ_ERROR. * lib/safe-read.c (IS_EINTR): Define. (safe_read): Use IS_EINTR in place of in-function cpp directives. 2002-12-02 Jim Meyering * lib/safe-read.c (EINTR): Define. (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Define. (INT_MAX): Provide fallback. (safe_read): Rewrite to iterate IFF the read fails with EINTR. * lib/safe-read.h (SAFE_READ_ERROR): Define. 2002-12-02 Bruno Haible * lib/safe-write.c (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Define, taken from safe-read.c. (INT_MAX): Provide fallback. (safe_write): Rewrite to iterate IFF the write fails with EINTR. * lib/safe-write.h (SAFE_WRITE_ERROR): Define. * lib/safe-read.c (EINTR): Remove definition. (safe_read): Don't use EINTR if it is absent. 2002-12-01 Jim Meyering * lib/safe-read.c: (safe_read): Also exit the loop when read returns zero. (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM, INT_MAX): Define. 2002-11-27 Paul Eggert * lib/hash.c (hash_lookup, hash_get_first, hash_get_next, hash_find_entry, hash_rehash): Replace `if (limit <= value) abort ();' with `if (! (value < limit)) abort ();', for readability. 2002-11-26 Karl Berry * lib/strdup.c: copy from libc again, with jim's ok. * lib/.cppi-disable: re-add strdup.c 2002-11-25 Karl Berry * lib/strtoll.c: copy from libc, meaning we now #include instead of "strtol.c". 2002-11-25 Karl Berry * config/install-sh: update from automake for variable quoting, $0 in error msgs, etc. * config/srclist.txt ($LIBCSRC/time/mktime.c lib gpl): new entry. * config/srclist.txt ($LIBCSRC/sysdeps/generic/strtoll.c lib gpl): new entry. 2002-11-25 Jim Meyering * lib/mktime.c: Sync from libc, now that it has the latest fix. 2002-11-24 Karl Berry * lib/error.c, getopt.c, getopt.h, getopt1.c, obstack.c, regex.c, regex.h, strdup.c, strtoll.c, tempname.c: change license to gpl. 2002-11-24 Jim Meyering Update from coreutils: * lib/mktime.c: Merge in changes from libc. Avoid a link-time failure on some Linux systems. * lib/mktime.c (STATIC): Define to be empty (_LIBC) or `static' (otherwise). (__mon_yday): Declare with the STATIC attribute. (__mktime_internal): Likewise. Based on a report from Greg Schafer. 2002-11-23 Jim Meyering * lib/sig2str.c (str2signum, sig2str): Avoid a warning from gcc: Use `unsigned', not `int', as type of index. * lib/xstat.in [@BEGIN_LSTAT_ONLY@]: Include . * lib/fsusage.c: Remove unneeded parentheses around operands of `defined'. 2002-11-22 Paul Eggert * lib/quotearg.h: Allow multiple inclusion by surrounding with "#ifndef QUOTEARG_H_". Include , for size_t, so that we can be included first. (PARAMS): Remove; we now assume C89 or later. All uses removed. * lib/quotearg.c: Include quotearg.h immediately after config.h. No need to include stddef.h or sys/types.h any more. Surround local include files with "", not "<>". Assume HAVE_LIMITS_H unconditionally, as we assume C89. Similarly, assume HAVE_C_BACKSLASH_A, CHAR_BIT, UCHAR_MAX, UINT_MAX, HAVE_STDLIB_H, HAVE_STRING_H, STDC_HEADERS. (HAVE_MBSINIT): Undef if !HAVE_MBRTOWC. (mbsinit): Define to 1 if !defined mbsinit && !HAVE_MBSINIT. (ISPRINT): Remove; no longer needed now that we assume C89. (clone_quoting_options, quotearg_buffer, quotearg_n_options): Preserve errno. (quotearg_buffer_restyled, quotearg_n, quotearg_n_style, quotearg_char): Use SIZE_MAX rather than (size_t) -1 when we are talking about "infinity". (quotearg_buffer_restyled): Fix bug when quoting trigraphs. 2002-11-22 Paul Eggert * lib/hash.c: Avoid use of , as the GNU Coding Standards hint that one should use `if (! x) abort ();' rather than `assert (x);', and anyway it's one less thing to worry about configuring. (hash_lookup, hash_get_first, hash_get_next, hash_find_entry, hash_rehash, hash_insert): Use abort rather than assert. 2002-11-22 Bruno Haible * lib/safe-read.h: Assume C89. Add comments. (safe_read): Change return type to size_t. * lib/safe-read.c (safe_read): Change return type to size_t. Handle byte counts > SSIZE_MAX correctly. * lib/safe-write.h: New file. * lib/safe-write.c: New file. * lib/full-read.h: New file. * lib/full-read.c: New file. * lib/full-write.h: Assume C89. Add comments. * lib/full-write.c: Include safe-write.h. (full_write): Rewritten to use safe_write. Suggested by Jim Meyering and Paul Eggert. 2002-11-21 Jim Meyering * lib/strdup.c (strdup): Tweak comment and initial #if/#include. Merge in changes from the coreutils. 2002-09-25 Paul Eggert * lib/fsusage.c [! HAVE_INTTYPES_H && HAVE_STDINT_H] Include . (UINTMAX_MAX) [!defined UINTMAX_MAX]: New macro. (PROPAGATE_ALL_ONES): Work even if X is unsigned and narrower than int. Work more efficiently if X is the same width as uintmax_t. Do not compare X to -1, to avoid bogus compiler warning. (get_fs_usage): (uintmax_t) -1 -> UINTMAX_MAX to avoid a cast. Don't assume that f_frsize and f_bsize are the same type. * lib/mountlist.c: #undef MNT_IGNORE before defining it, to avoid warning on FreeBSD. * lib/makepath.c (make_path): Restore umask *before* creating the final component. (make_path): Minor reformatting. * lib/xmalloc.c: Adjust to work with new autoconf macros, AC_FUNC_MALLOC and AC_FUNC_REALLOC: test #ifndef HAVE_MALLOC/HAVE_REALLOC. * lib/mountlist.h (ME_DUMMY): Don't count entries of type `auto' as dummy ones. At least on GNU/Linux systems, `auto' means something else. From Michael Stone. 2002-11-21 Bruno Haible Remove case insensitive option matching. * lib/argmatch.h (argcasematch): Remove declaration. (ARGCASEMATCH): Remove macro. (__xargmatch_internal): Remove case_sensitive argument. (XARGMATCH): Update. (XARGCASEMATCH): Remove macro. * lib/argmatch.c (argmatch): Renamed from __argmatch_internal. Remove case_sensitive argument. (argcasematch): Remove function. (__xargmatch_internal): Remove case_sensitive argument. (main): Use XARGMATCH instead of XARGCASEMATCH. * lib/xmalloc.c: Change compile-time error message. Add comment about required autoconf version. 2002-11-20 Paul Eggert Merge argmatch cleanups from Bison. Assume C89. * lib/argmatch.c: Include config.h here, not in argmatch.h. Include stdlib.h, for EXIT_FAILURE. Always include , since we assume C89. (EXIT_FAILURE): Remove pre-C89 bug workaround. * lib/argmatch.h: Do not include or . Include instead, since it's all we need for size_t. (PARAMS): Remove. All uses removed. (ARRAY_CARDINALITY): Do not bother to #undef. (ARRAY_CARDINALITY, ARGMATCH, ARGCASEMATCH, invalid_arg, ARGMATCH_VALID, XARGMATCH, XARGCASEMATCH): Remove unnecessary parentheses. (ARGMATCH_VALID, XARGMATCH, XARGCASEMATCH): Insert necessary parentheses. (ARGMATCH_CONSTRAINT, ARGMATCH_VERIFY): New macros. (ARGMATCH_ASSERT): Use ARGMATCH_CONSTRAINT. 2002-11-19 Bruno Haible * lib/mbswidth.c: Include mbswidth.h right at the beginning. * lib/mbswidth.h: Include , for size_t. * lib/mbswidth.h (PARAMS): Remove macro. (mbswidth, mbsnwidth): Use ANSI C function declarations. * lib/mbswidth.c (mbswidth, mbsnwidth): Likewise. * lib/gcd.h (PARAMS): Remove macro. (gcd): Use ANSI C function declarations. * lib/gcd.c (gcd): Likewise. 2002-11-15 Bruno Haible * lib/strcspn.c: Include . (strcspn): Use ANSI C function declaration. Change return type to size_t. Use NULL. * lib/strpbrk.c: Minimize diffs to glibc. Include . (strpbrk): Use NULL. * lib/strpbrk.h (PARAMS): Remove macro. (strpbrk): Use ANSI C function declaration. * lib/strstr.c: Don't include . * lib/strstr.h (PARAMS): Remove macro. (strstr): Use ANSI C function declarations. 2002-11-14 Karl Berry * config/mkinstalldirs: `do' on separate line, instead of `for var; do'. 2002-11-06 Bruno Haible * lib/gcd.h (gcd): Change argument type to 'unsigned long'. * lib/gcd.c (gcd): Likewise. 2002-11-05 Bruno Haible * lib/gcd.h: New file, from gettext-0.11.5. * lib/gcd.c: New file, from gettext-0.11.5. 2002-11-05 Bruno Haible * lib/error.c [!_LIBC]: Include gettext.h instead of . * lib/getopt.c [!_LIBC]: Include gettext.h instead of . * lib/obstack.c [!_LIBC]: Include gettext.h instead of . * lib/regex.c [!_LIBC]: Include gettext.h instead of . * lib/argmatch.c: Include gettext.h instead of and . * lib/makepath.c: Include gettext.h instead of and . * lib/closeout.c: Include gettext.h instead of . * lib/human.c: Include gettext.h instead of . * lib/quotearg.c: Include gettext.h instead of . * lib/rpmatch.c: Include gettext.h instead of . * lib/unicodeio.c: Include gettext.h instead of . * lib/userspec.c: Include gettext.h instead of . * lib/version-etc.c: Include gettext.h instead of . * lib/xmalloc.c: Include gettext.h instead of . (textdomain): Remove definition. * lib/xmemcoll.c: Include gettext.h instead of . * lib/long-options.c: Remove include of and definition of _. * lib/same.c: Remove include of and definition of _. 2002-11-04 Owen Taylor * lib/config.charset: A few additions for Solaris. 2002-11-04 Bruno Haible Make it possible to build libcharset with CC=gcc CFLAGS="-x c++". * lib/localcharset.c (locale_charset): Declare as extern "C". 2002-11-04 Bruno Haible * lib/config.charset: msdos in uk_UA uses CP1125. 2002-11-04 Bruno Haible * lib/stpcpy.h: New file, from GNU gettext-0.11.5. * lib/strcase.h: New file, from GNU gettext-0.11.5. * lib/strpbrk.h: New file, from GNU gettext-0.11.5. * lib/strstr.h: New file, from GNU gettext-0.11.5. * lib/xgetcwd.h: New file, from GNU gettext-0.11.5. 2002-11-04 Bruno Haible * lib/localcharset.c (locale_charset): Don't return an empty string. 2002-11-04 Bruno Haible * lib/localcharset.c (get_charset_aliases): Add more Windows specific aliases. 2002-11-04 Bruno Haible * lib/config.charset: Update for newest glibc. Add canonical names ISO-8859-14, KOI8-T, TCVN5712-1, GEORGIAN-PS. 2002-11-04 Bruno Haible * lib/config.charset: Add support for NetBSD. 2002-11-04 Bruno Haible * lib/config.charset [msdosdjgpp]: For Russian, use CP866. 2002-11-01 Bruno Haible * configure.in: Add AC_CONFIG_AUX_DIR call. (AC_OUTPUT): Add m4/Makefile, lib/Makefile. Remove doc/Makefile, test/Makefile. * Makefile.in (subdirs): Add m4, lib. Remove doc, test. 2002-09-28 Karl Berry * config/srclist.txt: can't copy install-sh/mkinstalldirs from installed automake until the next release, since changes have been made. 2002-09-25 Karl Berry * lib/strdup.c: copy from libc/string (via ../config/srclist*). * lib/getopt*: copy from libc/posix. * lib/gettext.h: copy from gettext. * lib/.cppi-disable: add strdup.c, gettext.h. 2002-09-25 Karl Berry * config/srclist.txt: enable gettext.h check. * config/config.{guess,sub}: update from prep. * config/depcomp, install-sh, mdate-sh, missing, mkinstalldirs: update from automake 1.6.3. See srclist*. 2002-08-23 Stefan Monnier * regex.c (PATFETCH): Remove the translating fetch. (PATFETCH_RAW): Rename to PATFETCH. (set_image_of_range): New fun. (SET_RANGE_TABLE_WORK_AREA): Use it. (regex_compile): Don't translate the pattern chars so eagerly. Only do it when inserting an `exactn' bytecode or when handling a char-range. (mutually_exclusive_p): Avoid empty statement. 2002-07-06 Jim Meyering * m4/README: Don't mention Makefile.am.in. Outline how I've tested changes to .m4 files. Yep, it's a pain. 2002-07-01 Jim Meyering * lib/c-stack.c: Include sys/time.h. From Volker Borchert. 2002-06-26 Paul Eggert * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for btowc. 2002-06-26 Paul Eggert * lib/fnmatch.c, fnmatch_loop.c (WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H). It also uses HAVE_BTOWC, to fix a porting bug on Solaris 2.5.1 reported by Vin Shelton. 2002-06-22 Paul Eggert * lib/c-stack.h (segv_handler, c_stack_action) [! defined SA_SIGINFO]: Do not assume SA_SIGINFO behavior. Bug reported by Jim Meyering on NetBSD 1.5.2. 2002-06-22 Jim Meyering * m4/c-stack.m4: New file, from diffutils-2.8.2. * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_C_STACK. * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Don't require AC__GNU_SOURCE, now that configure.ac uses AC_GNU_SOURCE. (jm_MACROS): Rename: jm_FUNC_FNMATCH to AC_FUNC_FNMATCH_GNU. * m4/prereq.m4 (jm_PREREQ_EXCLUDE): Likewise, wrt jm_FUNC_FNMATCH. Update to latest tools. Suggestions from Paul Eggert. * m4/stdbool.m4: New file, from diffutils-2.8.2. * m4/gnu-source.m4: Update from diffutils-2.8.2. * m4/fnmatch.m4: Likewise. * m4/prereq.m4: Change each use of AC_CHECK_HEADERS(stdbool.h) to AC_HEADER_STDBOOL 2002-06-22 Jim Meyering * lib/fnmatch.c (ISASCII, ISPRINT): Undefine, to avoid warning about redefinition due to Solaris 2.6's definition in /usr/include/sys/euc.h. 2002-06-22 Jim Meyering * lib/c-stack.c, lib/c-stack.h: New files, from diffutils-2.8.2. * lib/exitfail.c, exitfail.h: Likewise. * lib/Makefile.am (libfetish_a_SOURCES): Add exitfail.c and exitfail.h. * lib/Makefile.am (libfetish_a_SOURCES): Add fnmatch_.h in place of fnmatch.h. (EXTRA_DIST): Add fnmatch_loop.c. (libfetish_a_SOURCES): Add c-stack.c and c-stack.h. * lib/fnmatch_loop.c: New file, from diffutils-2.8.2. * lib/fnmatch.c: Update from diffutils-2.8.2. * lib/fnmatch_.h: New file. From diffutils-2.8.2. * lib/fnmatch.h: Remove file. 2002-06-21 Jim Meyering * m4/c-bs-a.m4: Add comment, from diffutils-2.8.2. * m4/mbrtowc.m4: Likewise. * m4/mbstate_t.m4: Update from diffutils-2.8.2. * m4/mbswidth.m4: Reflect name change: s/AC_MBSTATE_T/AC_TYPE_MBSTATE_T. * m4/prereq.m4 (jm_PREREQ_QUOTEARG): Likewise. * m4/lib-link.m4: Update from gettext-0.11.2. * m4/gettext.m4: Likewise. * m4/jm-macros.m4 (jm_CHECK_ALL_HEADERS): Check for hurd.h. From Alfred M. Szmidt. 2002-06-18 Paul Eggert * lib/file-type.h: Report an error if neither S_ISREG nor S_IFREG is defined, instead of using a test specific to glibc 2.2. This should be safe, since POSIX requires S_ISREG and Unix Version 7 had S_IFREG. We don't need to check for since we don't use any symbols that it defines. 2002-06-15 Richard Dawe * lib/Makefile.am (lstat.c, stat.c, .sin.sed): Use t-$@, rather than $@-t, so that each temporary file name is unique and valid in the first 8 characters, for operation under DOS. 2002-06-15 Paul Eggert * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Check for st_author. 2002-06-15 Jim Meyering Work even with DJGPP 2.03, which lacks support for symlinks. From Richard Dawe. * lib/xstat.in (S_ISLNK): Define to 0 if neither S_ISLNK nor S_IFLNK is defined. * lib/lchown.c (S_ISLNK): Likewise. 2002-06-15 Jim Meyering * lib/file-type.h (FILE_TYPE_H): Guard entire contents with #ifndef. For GNU libc 2.2 and newer, ensure that and have been included before this file. 2002-06-14 Jim Meyering * lib/file-type.h: Use the version from diffutils-2.8.2. * lib/file-type.c: Likewise. 2002-06-07 Jim Meyering * m4/prereq.m4 (jm_PREREQ_STAT): Check for sys/param.h and sys/mount.h. They're needed at least for NetBSD 1.5.2. ($statxfs_includes): Include those same headers. ($statxfs_includes): Include sys/vfs.h if available. ($statxfs_includes): Likewise for sys/statvfs.h. Check for the following members in both structs statfs and statvfs: f_basetype, f_type, f_fsid.__val, f_namemax, f_namelen. 2002-06-01 Jim Meyering * m4/d-type.m4 (jm_CHECK_TYPE_STRUCT_DIRENT_D_TYPE): Rename macro: s/D_TYPE_IN_DIRENT/HAVE_STRUCT_DIRENT_D_TYPE/. 2002-05-28 Jim Meyering * m4/readdir.m4 (jm_FUNC_READDIR): Undefine `mkdir', not `rmdir'. Reported by Volker Borchert. 2002-05-27 Jim Meyering Fix a problem seen only on nonconforming systems whereby ls.c's use of localtime, and then of gettimeofday would cause trouble: the localtime call used to initialize rpl_gettimeofday's save mechanism would clobber ls's current local time information so that in any long listing the first file would always be listed with date 1970-01-01. Analysis by Volker Borchert. * lib/gettimeofday.c (localtime): Undefine. (rpl_localtime): New function. 2002-05-27 Jim Meyering * m4/gettimeofday.m4 (AC_FUNC_GETTIMEOFDAY_CLOBBER): Also replace localtime. * m4/readdir.m4 (jm_FUNC_READDIR): Undefine `rmdir' so we don't try to use the replacement function; it wouldn't resolve at link time. Reported by Volker Borchert. 2002-05-22 Jim Meyering * lib/Makefile.am (libfetish_a_SOURCES): Add file-type.c and file-type.h. * lib/file-type.h: New file. * lib/file-type.c (file_type): New file/function. Extracted from diffutils. 2002-04-30 Jim Meyering * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_STAT. 2002-04-29 Paul Eggert * m4/prereq.m4 (jm_PREREQ_SIG2STR): Remove; all callers changed. 2002-04-29 Paul Eggert * m4/prereq.m4 (jm_PREREQ_HARD_LOCALE): Check for stdlib.h. Do not check for alloca.h (no longer used) or stdbool.h (was never used?). Add AM_C_PROTOTYPES since hard-locale.h uses it. 2002-04-29 Paul Eggert * lib/hard-locale.c: Upgrade to version used in GNU Diffutils 2.8.1. 2002-04-29 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Remove use of AC_FUNC_STRNLEN. * m4/prereq.m4: Add jm_PREREQ_STRNLEN. Use AC_FUNC_STRNLEN here instead. * m4/jm-macros.m4: Don't AC_REQUIRE([AC_PROG_CC_STDC]). With autoconf-2.53a, it's part of AC_PROG_CC. 2002-04-28 Paul Eggert * m4/jm-macros.m4 (jm_MACROS): Add AC_REPLACE_FUNCS(sig2str). * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_SIG2STR. 2002-04-28 Paul Eggert * lib/sig2str.h, lib/sig2str.c: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add sig2str.h. 2002-04-28 Paul Eggert * lib/sig2str.h (SIGNUM_BOUND): Do not use WTERMSIG, to avoid depending on and WTERMSIG. Default to 64 instead of 127, since 64 is the largest conceivable number for ancient nonstandard hosts. * lib/sig2str.c: Do not include ; no longer needed. 2002-04-28 Jim Meyering * lib/sig2str.c (WTERMSIG): Remove definition (unused). 2002-04-24 Jim Meyering * m4/prereq.m4 (jm_PREREQ_HARD_LOCALE): New macro. (jm_PREREQ): Use it. * m4/getloadavg.m4: Check for these headers: locale.h unistd.h mach/mach.h fcntl.h. Check for this function: setlocale. 2002-04-24 Jim Meyering * lib/gettext.h: New file, from Gettext. * lib/Makefile.am (INCLUDES): Remove -I../intl. (libfetish_a_SOURCES): Add gettext.h. 2002-04-16 Jim Meyering * m4/prereq.m4 (jm_PREREQ_READUTMP): Also check for these members: ut_pid, ut_id, ut_exit. 2002-04-16 Jim Meyering * lib/readutmp.h (UT_TYPE): Remove definition (now in who.c). (HAVE_STRUCT_XTMP_UT_EXIT, HAVE_STRUCT_XTMP_UT_ID): Define. (HAVE_STRUCT_XTMP_UT_PID, HAVE_STRUCT_XTMP_UT_TYPE): Define. 2002-04-12 Jim Meyering * m4/ls-mntd-fs.m4 (checking for getmntinfo function...): Remove now-bogus check for f_type in sys/mount.h. Instead, just test for the existence of the getmntinfo function. Needed for Darwin 5.3. * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Also detect when dirfd is a macro. This is necessary at least on Darwin 5.3. * m4/jm-macros.m4: Don't AC_REPLACE(strnlen), now that we use AC_FUNC_STRNLEN. Otherwise, we'd end up putting two copies of strnlen.o in the library, and that makes some versions of ranlib object. 2002-04-12 Jim Meyering * lib/dirfd.h (dirfd): Elide prototype if dirfd is a macro. 2002-04-09 Jim Meyering * m4/malloc.m4: (jm_FUNC_MALLOC): Change the `checking ...' message to be more precise. Rather than saying we're checking whether the function `works', say what we're testing. * m4/realloc.m4 (jm_FUNC_REALLOC): Likewise. Reported by Bruno Haible. 2002-03-10 Jim Meyering * lib/makepath.c (make_path): Remove a comma from a diagnostic. Suggestion from Santiago Vila. 2002-03-08 Jim Meyering * lib/rename.c: Mention that this wrapper is needed also on mips-dec-ultrix4.4 systems. 2002-03-02 Jim Meyering * lib/gettime.c (gettime): Test HAVE_CLOCK_GETTIME, not HAVE_CLOCK_SETTIME. 2002-02-27 Paul Eggert * m4/jm-macros.m4 (jm_MACROS): Do not replace stime; no longer used. Check for clock_settime. 2002-02-27 Paul Eggert * lib/nanosleep.h: Rename to.... * lib/timespec.h: New name for nanosleep.h. All uses changed. * lib/gettime.c: New file. * lib/settime.c: New file. * lib/stime.c: Remove. * lib/Makefile.am (libfetish_a_SOURCES): Add gettime.c, settime.c, timespec.h. Remove nanosleep.h. 2002-02-25 Paul Eggert * m4/acl.m4: New file. * m4/jm-macros.m4 (jm_MACROS): Require AC_FUNC_ACL. Do not check for acl or sys/acl.h, as AC_FUNC_ACL does that now. 2002-02-25 Paul Eggert * lib/acl.c, lib/acl.h: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add acl.h, acl.c. 2002-02-24 Jim Meyering * lib/strnlen.c (strnlen): Define-away/undef so that an inconsistent prototype in string.h (on at least AIX4.3.2.0 w/gcc-2.95.3) doesn't cause trouble. Reported by Nelson Beebe. 2002-02-23 Paul Eggert * lib/path-concat.c (xpath_concat): Reorder code to pacify compilers that don't know that xalloc_die never returns. 2002-02-20 Jim Meyering * lib/getdate.c: Regenerate using bison-1.33. 2002-02-17 Jim Meyering * config/config.guess (main): Don't use `head -1'; it's no longer portable. Use `sed 1q' instead. 2002-02-16 gettextize * m4/codeset.m4: Upgrade to gettext-0.11. * m4/gettext.m4: Upgrade to gettext-0.11. * m4/glibc21.m4: Upgrade to gettext-0.11. * m4/iconv.m4: Upgrade to gettext-0.11. * m4/isc-posix.m4: Upgrade to gettext-0.11. * m4/lcmessage.m4: Upgrade to gettext-0.11. * m4/lib-ld.m4: New file, from gettext-0.11. * m4/lib-link.m4: New file, from gettext-0.11. * m4/lib-prefix.m4: New file, from gettext-0.11. * m4/progtest.m4: Upgrade to gettext-0.11. 2002-02-15 Paul Eggert * m4/prereq.m4 (jm_PREREQ_POSIXVER): New macro. (jm_PREREQ): Use it. 2002-02-15 Paul Eggert * lib/posixver.c, lib/posixver.h: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add them. 2002-02-02 Paul Eggert Bruno Haible * lib/unicodeio.h (print_unicode_char): Add exit_on_error argument. (fwrite_success_callback): New declaration. * lib/unicodeio.c (unicode_to_mb): New function, extracted from print_unicode_char. Call failure callback instead of error. (fwrite_success_callback): New function. (exit_failure_callback): New function. (fallback_failure_callback): New function. (print_unicode_char): Call unicode_to_mb. 2002-01-26 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Require autoconf-2.52g. * m4/strnlen.m4: Remove file, now that it's part of autoconf. 2002-01-26 Jim Meyering * lib/Makefile.am (getdate$U.o): Depend on unlocked-io.h. 2002-01-22 Paul Eggert * m4/jm-macros.m4 (jm_MACROS): Require AC_FUNC_FSEEKO. 2002-01-22 Jim Meyering * lib/Makefile.am (Makefile): Don't depend on $(BUILT_SOURCES). Otherwise, some versions of automake would omit the rule that makes Makefile from Makefile.in. 2002-01-21 Paul Eggert * lib/xmemcoll.h, lib/xmemcoll.c: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add them. * lib/memcoll.c: Include errno.h, and declare errno if not defined. (memcoll): Set errno to zero if there is no error. * lib/quotearg.c (quotearg_buffer_restyled): Fix bug with quoting buffers containing NUL when backslashing escapes. This bug was exposed by the other changes in this patch. (quotearg_n_options): New arg ARGSIZE. All callers changed. (quoting_options_from_style): New function. (quotearg_n_style): Use it. (quotearg_n_style_mem): New function. * lib/quotearg.h (quotearg_n_style_mem): New function. 2002-01-19 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Use AC_FUNC_STRNLEN. Remove useless quotes: DF_PROG="df". * m4/strnlen.m4: New file. 2002-01-16 Paul Eggert * lib/backupfile.c (ISDIGIT): Comment fix. * lib/getdate.y (ISDIGIT): Likewise. * lib/posixtm.c (ISDIGIT, year): Likewise. * lib/strverscmp.c (ISDIGIT): Likewise. * lib/userspec.c (ISDIGIT): Likewise. 2002-01-16 Jim Meyering * lib/getdate.y: Add three semicolons, each just before a closing brace. Bison (as of version 1.31) no longer papers over that mistake. 2002-01-05 Jim Meyering * lib/version-etc.c (version_etc_copyright): Update copyright year. 2001-12-19 Paul Eggert * lib/closeout.c (close_stdout_status): If ferror (stdout), do not silently exit merely because the output buffer happens to have nothing pending. 2001-12-18 Paul Eggert See the big note in ../ChangeLog. * lib/human.c (suffixes): Prefer K to k for 1024. (generate_suffix_backwards): New function. (human_readable_inexact): Use it. * lib/xstrtol.c (__xstrtol): If there is no number but there is a valid suffix, assume 1. "MB" now means decimal, "MiB" binary. Accept 'K' as well as 'k'. 2001-12-15 Jim Meyering * lib/regex.h (__restrict_arr): Update from libc. * lib/mountlist.h (ME_REMOTE): Recognize file systems of type smbfs as `remote' if the name starts with `//'. Suggested by Michael Stone. (STREQ): Define. 2001-12-14 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Check for iswspace. Suggestion from Bruno Haible. 2001-12-10 Jim Meyering * lib/linebuffer.c: Remove explicit declarations of xmalloc and xrealloc, Instead, include "xalloc.h". (initbuffer): Don't cast xmalloc return value to char*. (readline): Reword comment. Don't cast xrealloc return value to char* Return NULL, not 0. 2001-12-09 Jim Meyering * lib/modechange.c (mode_compile): Add cast to avoid pedantic warning about `signed and unsigned type in conditional expression'. * lib/posixtm.c (posix_time_parse): Likewise. * lib/xreadlink.c (xreadlink): Add cast to avoid a pedantic warning. * lib/readtokens.c (readtoken): Declare an index to be of type unsigned to avoid a pedantic warning. * lib/getstr.c: Don't include assert.h. (getstr): Remove warning-evoking assertions. Return -1 if offset parameter is out of bounds. Change the type of a local from int to size_t. * lib/strftime.c (my_strftime_localtime_r): Include this function definition in the `#if ! HAVE_TM_GMTOFF' block. * lib/xgethostname.c: Remove declarations of xmalloc and xrealloc. Include xalloc.h instead. 2001-12-02 Jim Meyering * lib/tempname.c: Don't declare getenv, thus reverting the change of 2001-11-18. It's no longer necessary, now that stdlib.h is always included. * lib/regex.c [!__BOUNDED_POINTERS__]: Define away __bounded, __unbounded, and __ptrvalue. Reported by Uwe H. Steinfeld. 2001-11-30 Akim Demaille * lib/xstrdup.c: Include xalloc.h, so that xstrdup is declared before being defined. 2001-11-27 Paul Eggert * lib/quotearg.h (quotearg_n, quotearg_n_style): First arg is int, not unsigned. * lib/quotearg.c (quotearg_n, quotearg_n_style): Likewise. (SIZE_MAX, UINT_MAX): New macros. (quotearg_n_options): Abort if N is negative. Avoid overflow check on hosts where size_t is 64 bits and int is 32 bits, as overflow is impossible there. Fix off-by-one typo that caused unnecessary reallocation. 2001-11-27 Jim Meyering * lib/tempname.c: Merge with version from libc. * lib/regex.c: Likewise. * lib/tempname.c: Include stdlib.h unconditionally. On some old systems for which STDC_HEADERS is 0, it was not included, resulting in a warning about an integer-to-pointer conversion problem with getenv. Reported by Volker Borchert. 2001-11-26 Jim Meyering * lib/gtod.h: Remove file. * lib/Makefile.am (libfetish_a_SOURCES): Remove gtod.h. * lib/gettimeofday.c: Don't include gtod.h. (GTOD_init): Remove function. (rpl_gettimeofday): Do its job here instead, rather than aborting. Suggestion from Volker Borchert. 2001-11-23 Jim Meyering * lib/hash.h (struct hash_table): Don't define here. Merely declare it. * lib/hash.c (struct hash_table): Define it here instead. 2001-11-22 Jim Meyering * lib/hash.h: Bracket contents of file with #ifndef HASH_H_ ... #endif. 2001-11-20 Jim Meyering * m4/mkstemp.m4 (UTILS_FUNC_MKSTEMP): Update comment to reflect that SunOS 4.1.4 and Solaris 2.5.1 lose, too. 2001-11-19 Jim Meyering * m4/mkstemp.m4 (UTILS_FUNC_MKSTEMP): Don't bother with a temporary directory. Use "conftestXXXXXX" as the template. Suggestion from Paul Eggert. * m4/mkstemp.m4 (UTILS_FUNC_MKSTEMP): Close each descriptor immediately, so the test doesn't mistakenly hit the max-open-files limit. 2001-11-18 Paul Eggert * lib/tempname.c (TMP_MAX): Remove; no longer needed. (TEMPORARIES): New macro. (__gen_tempname): Use TEMPORARIES rather than TMP_MAX. This removes an artificial limitation (e.g. HP-UX 10.20, where TMP_MAX is 17576). 2001-11-18 Jim Meyering * m4/prereq.m4 (jm_PREREQ_TEMPNAME): Check for declaration of getenv. 2001-11-18 Jim Meyering * lib/tempname.c [!HAVE_DECL_GETENV]: Declare getenv to avoid warning on SunOS 4. * lib/Makefile.am (Makefile): Depend on $(BUILT_SOURCES), so those files will be created before anything else. 2001-11-17 Paul Eggert * m4/jm-winsz1.m4 (jm_WINSIZE_IN_PTEM): Do not define WINSIZE_IN_PTEM if defines struct winsize. 2001-11-17 Jim Meyering * m4/mkstemp.m4 (UTILS_FUNC_MKSTEMP): New file and macro. Prompted by a report from Bob Proulx. * m4/jm-macros.m4 (jm_MACROS): Don't test for mkstemp here. Instead, require UTILS_FUNC_MKSTEMP. 2001-11-17 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Remove code to set POW_LIBM. Now, that's done as part of AC_FUNC_STRTOD. 2001-11-17 Jim Meyering * lib/modechange.c (mode_adjust): Fix error introduced on 1999-04-26 that made e.g., `chmod a=,o=w,g=o F' cause F to be group readable rather than group writable. Patch by Juan F. Codagnone. * lib/readtokens.c: Remove explicit declarations of xmalloc and xrealloc, Instead, include "xalloc.h". * lib/mountlist.c: Include unlocked-io.h after all system headers. Remove explicit declarations of xmalloc, xrealloc, and xstrdup. Instead, include "xalloc.h". * lib/argmatch.c, closeout.c, error.c, exclude.c: Include unlocked-io.h. * lib/fatal.c, getdate.y, getpass.c, getstr.c, getusershell.c: Likewise. * lib/mountlist.c, posixtm.c, readtokens.c, readutmp.c: Likewise. * lib/regex.c, sha.c, version-etc.c, yesno.c: Likewise. Reported by Padraig Brady. * lib/mkstemp.c: #undef mkstemp. Include config.h. (rpl_mkstemp): Rename from mkstemp. Protoize. 2001-11-16 Jim Meyering * lib/physmem.c [HAVE_SYS_PSTAT_H]: Include . (physmem_total) [HAVE_PSTAT_GETSTATIC]: If sysconf couldn't be used to determine the amount of total physical memory, use pstat_getstatic. HPUX-11 doesn't define _SC_PHYS_PAGES. (physmem_available) [HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC]: If sysconf couldn't be used to determine the amount of available physical memory, use both pstat_getstatic and pstat_getdynamic. Based on a patch from Bob Proulx. 2001-11-10 Jim Meyering * m4/prereq.m4 (jm_PREREQ_PHYSMEM): New function. (jm_PREREQ): Use it. 2001-11-09 Jim Meyering * m4/jm-macros.m4: Require autoconf-2.52f. (AC_FUNC_ERROR_AT_LINE, AC_FUNC_OBSTACK, AC_FUNC_STRTOD): Use these AC_-prefixed names, not the AM_-prefixed ones. * m4/afs.m4 (jm_AFS): Quote the body. Patch by Akim Demaille. 2001-11-05 Jim Meyering * lib/xstat.in (slash_aware_lstat): Correct a misleading comment. 2001-11-04 Jim Meyering * m4/fpending.m4: Remove unused cruft that saved, set, and restored $DEFS. 2001-11-03 Jim Meyering * m4/jm-glibc-io.m4n (jm_FUNC_GLIBC_UNLOCKED_IO): Quote first arg of AC_DEFUN. * m4/dirfd.m4 (UTILS_FUNC_DIRFD): Rework so dirfd.c doesn't have to know the name of the variable in the macro definition. 2001-11-03 Jim Meyering * lib/argmatch.h (ARGMATCH_TO_ARGUMENT): Remove casts of first two args in argmatch_to_argument call. * lib/dirfd.c (dirfd): Reflect the fact that DIR_TO_FD now takes an argument. * lib/hash.c (hash_clear): Fix a bug that could lead to an infloop or e.g., a fault due to an attempt to free a NULL pointer. 2001-11-01 Jim Meyering * m4/dirfd.m4 (UTILS_FUNC_DIRFD): New macro. * m4/jm-macros.m4 (jm_MACROS): Require UTILS_FUNC_DIRFD. 2001-11-01 Jim Meyering * lib/dirfd.c, lib/dirfd.h: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add dirfd.h. * lib/hash.c (hash_print) [TESTING]: Clean up. 2001-10-22 Paul Eggert * lib/hard-locale.c (alloca): Define to __builtin_alloca if __GNUC__, to avoid a warning if -Wall. 2001-10-22 Jeff Bailey * README: New file * doc/*: Add COPYING, COPYING.LIB, COPYING.DOC, fdl.texi (per RMS's instructions, this is now the canonical source) * lgpl/, gpl/: New directories. 2001-10-21 Paul Eggert * lib/regex.c (uintptr_t): Remove macro and decl; it's config.h's job. 2001-10-21 Jim Meyering * lib/obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise, this code would end up calling gettext even in packages built with --disable-nls. * lib/getopt.c (_): Likewise. * lib/regex.c (_): Likewise. 2001-10-20 Paul Eggert * m4/error.m4 (jm_PREREQ_ERROR): Do not invoke AC_CHECK_FUNCS with strerror_r, as AC_FUNC_STRERROR_R does that. Check for strerror declaration. * m4/strerror_r.m4: Add copyright notice, as nontrivial m4 files are supposed to have them these days. (AC_FUNC_STRERROR_R): Always do char* test, so that it gets cached. Merge changes from latest Autoconf CVS. Rename ac_cv_func_strerror_r_works to ac_cv_func_strerror_r_char_p, and rename HAVE_WORKING_STRERROR_R to STRERROR_R_CHAR_P, since POSIX decided to standardize on the int flavor of strerror_r. 2001-10-20 Paul Eggert * lib/error.c (strerror_r): Do not declare unless !_LIBC. Do not check for HAVE_DECL_STRERROR_R missing unless STRERROR_R_CHAR_P. Use strerror_r that is only a macro, even if it is not a function. (strerror): Check for HAVE_DECL_STRERROR before declaring. (private_strerror): Use prototypes, not old-style function definition. (print_errno_message): New function. Support the POSIX 'int'-flavored strerror_r, as well as the traditional char*-flavored one. (error_tail, error, error_at_line): Use it. 2001-10-11 Jim Meyering * lib/argmatch.c (argmatch_invalid): Use quotearg_n_style (0, ... and quote_n (1, ... to avoid clobbering a buffer. 2001-10-05 Jim Meyering * lib/Makefile.am: (libfetish_a_SOURCES): Add hash-pjw.c and hash-pjw.h. * lib/hash-pjw.c: New file (factored out of fileutils' remove.c). * lib/hash-pjw.h: New file. 2001-09-30 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): See if `struct fsstat' has the `f_fstypename' member. Use that to define FS_TYPE, which is now used to make the getfsstat link test tighter. 2001-09-30 Jim Meyering * lib/mountlist.c [MOUNTED_GETFSSTAT]: Include , for Apple Darwin. Include sys/mount.h and sys/fs_types.h only if available. (FS_TYPE): Define. (read_filesystem_list): Use FS_TYPE. 2001-09-29 Paul Eggert * lib/exclude.c (excluded_filename): 0 -> false, since it's a boolean context. 2001-09-29 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS) [one-argument getmntent function]): Include stdio.h before mntent.h. SunOS 4.1.x needs it for the declaration of `FILE'. Patch by Volker Borchert. * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS) Check for these headers: sys/param.h sys/ucred.h sys/mount.h sys/fs_types.h, and make the link-test for getfsstat guard #include directives with appropriate #if HAVE_*_H tests so that we can detect getfsstat on Apple Darwin1.3.7 systems. Reported by Nelson Beebe. Fix harmless typo in cache variable name: s/getsstat/getfsstat/. 2001-09-28 Paul Eggert Fix bug reported by Petter Reinholdtsen for HP-UX 10.20, which #defines strtoimax. Also treat the other strto* functions like strtoimax. * m4/xstrtoimax.m4 (jm_AC_PREREQ_XSTRTOIMAX): Check for strtoul and strtoumax, as those declarations are made even in the signed case. * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Likewise, for strtol and strtoimax. 2001-09-28 Paul Eggert Fix bug reported by Petter Reinholdtsen for HP-UX 10.20, which #defines strtoimax. Also treat the other strto* functions like strtoimax. * lib/xstrtol.c (strtol): Do not declare if HAVE_DECL_STRTOL. (strtoul): Do not declare if HAVE_DECL_STRTOUL. (strtoimax, strtoumax): Do not declare if already defined as a macro. 2001-09-26 Jim Meyering Most macros in unlocked-io.h had the wrong number of arguments. * lib/gen-uio: New script. (USE_UNLOCKED_IO): Define to 1 if not already defined. * lib/unlocked-io.hin: Remove file. * lib/Makefile.am (unlocked-io.h): Rewrite to use a separate script, rather than trying to embed it here. (EXTRA_DIST): Add gen-uio. Remove unlocked-io.hin Reported by Padraig Brady. 2001-09-25 Volker Borchert * lib/gettimeofday.c (rpl_gettimeofday): Declare local variable `result'. 2001-09-24 Jim Meyering * m4/gettext.m4: Use the version from gettext-0.10.40, not CVS. 2001-09-23 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Add a compile-test instead of the mere test for existence of mntent.h. The latter would get a false-positive on AIX 3.4 systems. In the outer getmntent if-block, don't die if neither of the getmntent tests succeeds. Instead, just fall through and continue with the remaining tests. 2001-09-23 Jim Meyering * lib/mountlist.c: Remove useless parentheses in #if directives. (MOUNTED) [!defined MOUNTED]: Define to _PATH_MOUNTED, for when the deprecated MOUNTED symbol is no longer defined in mntent.h. 2001-09-22 Jim Meyering * m4/gettext.m4: New file. From gettext. * m4/lcmessage.m4: Sync with gettext -- this changes only comments. * m4/progtest.m4: Likewise * m4/isc-posix.m4: Decrement serial number to sync with gettext. * m4/glibc21.m4: Likewise. * m4/libintl.m4: Remove. No longer used. 2001-09-22 Jim Meyering * lib/localcharset.c: Update from latest gettext. * lib/config.charset: Likewise. 2001-09-20 Jim Meyering * m4/xstrtoimax.m4 (jm_AC_PREREQ_XSTRTOIMAX): Check for declaration of strtoimax. * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Check for declaration of strtoumax. 2001-09-20 Jim Meyering * lib/xstrtol.c (strtoimax): Guard declaration with `#if !HAVE_DECL_STRTOIMAX', rather than just `#ifndef strtoimax'. The latter fails because some systems (at least rs6000-ibm-aix4.3.3.0) have their own, conflicting declaration of strtoimax in sys/inttypes.h. (strtoumax): Likewise, for completeness (it wasn't necessary). 2001-09-17 Paul Eggert * lib/strtoimax.c (HAVE_LONG_LONG): Redefine to HAVE_UNSIGNED_LONG_LONG if unsigned. (strtoimax): Use sizeof (long), not sizeof strtol (ptr, endptr, base), to work around bug in IBM C compiler. 2001-09-17 Jim Meyering * m4/chown.m4, fstypename.m4, getgroups.m4, gettimeofday.m4, * m4/jm-mktime.m4, lstat.m4, malloc.m4, memcmp.m4, mkdir-slash.m4, * m4/nanosleep.m4, putenv.m4, readdir.m4, realloc.m4, rename.m4, * m4/st_dm_mode.m4, stat.m4, strerror_r.m4, timespec.m4, utimbuf.m4, * m4/utimes.m4: Use AC_DEFINE rather than AC_DEFINE_UNQUOTED, whenever the right hand side need not be expanded by the shell. 2001-09-16 Paul Eggert * m4/fnmatch.m4 (jm_FUNC_FNMATCH): Remove test for GNU C library. It's not correct, as some older glibcs are buggy. fnmatch wasn't fixed until glibc 2.2. Use AC_DEFINE, not AC_DEFINE_UNQUOTED, as there's no special shell magic here. 2001-09-16 Jim Meyering * m4/mkdir-slash.m4 (UTILS_FUNC_MKDIR_TRAILING_SLASH): New file/macro. * m4/jm-macros.m4: Require it. 2001-09-16 Jim Meyering * lib/mkdir.c: New file. 2001-09-15 Jim Meyering * m4/jm-macros.m4: Check for help2man. 2001-09-11 Jim Meyering * m4/host-os.m4 (UTILS_HOST_OS): New file/macro. The body, by Paul Eggert, was moved here from configure.in. * m4/jm-macros.m4: Require UTILS_HOST_OS. 2001-09-04 Paul Eggert * m4/prereq.m4 (jm_PREREQ_XREADLINK): New macro. (jm_PREREQ): Use it. 2001-09-04 Paul Eggert * lib/xreadlink.c (xreadlink): Omit size_t* arg. All uses changed. Use ssize_t, not int, to store result of readlink. Check for ssize_t overflow as well as size_t overflow, as POSIX says the result of readlink is implementation-defined when ssize_t overflows. Remove unnecessary cast to char*. Use free+malloc instead of realloc, as the storage doesn't need to be preserved and it's clearer and can be more efficient that way. (SIZE_MAX, SSIZE_MAX): New macros, if doesn't declare. * lib/xreadlink.h (xreadlink): Update prototype. 2001-09-04 Paul Eggert * lib/xgetcwd.c: Revert some of the previous change; intead, fix the HAVE_GETCWD_NULL code to behave more like the !HAVE_GETCWD_NULL code used to. Include "xalloc.h". (xgetcwd): Do not return NULL when memory is exhausted; instead, invoke xalloc_die. 2001-09-03 Paul Eggert * m4/prereq.m4 (jm_PREREQ_XGETCWD): Check for limits.h and sys/param.h, as pathmax.h includes them. 2001-09-03 Paul Eggert * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_XGETCWD. (jm_PREREQ_XGETCWD): New macro. * m4/getcwd.m4: New file. 2001-09-03 Paul Eggert * lib/xgetcwd.c: Fix the !HAVE_GETCWD_NULL code to behave more like the HAVE_GETCWD_NULL code. Include pathmax.h if not HAVE_GETCWD. Do not include xalloc.h. (INITIAL_BUFFER_SIZE): New symbol. Do not use xmalloc / xrealloc, since the caller is responsible for handling errors. Preserve errno around `free' during failure. Do not overrun buffer when using getwd. 2001-09-03 Paul Eggert * lib/xgetcwd.c (xgetcwd): Use HAVE_GETCWD_NULL, not (defined __GLIBC__ && __GLIBC__ >= 2), to decide whether to use getcwd (NULL, 0). 2001-09-03 Paul Eggert * lib/exclude.c (fnmatch_no_wildcards): Fix confusion between usage of FNM_CASEFOLD and FNM_LEADING_DIR. The bug was spotted by Jim Meyering. 2001-09-03 Jim Meyering * lib/xreadlink.c (xreadlink): Preserve errno around `free' during failure. 2001-09-02 Jim Meyering * lib/error.c: Update from GNU libc. 2001-09-01 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Check for canonicalize_file_name. Used by df. 2001-09-01 Jim Meyering * lib/xreadlink.c: New file. * lib/xreadlink.h: New file. * lib/Makefile.am (libfetish_a_SOURCES): Add xreadlink.c and xreadlink.h. * lib/regex.c (uintptr_t) [!_LIBC]: Define to private_uintptr_t, so it doesn't conflict with sparc Solaris 7's definition in /usr/include/sys/int_types.h. * lib/exclude.c: Use `""', not `<>' to #include non-system header files. (fnmatch_no_wildcards): Rewrite not to use function names, strcasecmp and strncasecmp as r-values. Unixware didn't have declarations. 2001-08-31 Paul Eggert * lib/xstrtol.h: Add copyright notice. (_DECLARE_XSTRTOL): Improve quality of diagnostic for LONGINT_INVALID_SUFFIX_CHAR. 2001-08-31 Paul Eggert * lib/xstrtol.c (strtoimax): New decl. 2001-08-31 Paul Eggert * lib/xgetcwd.c: Don't include pathmax.h. Include stdlib.h and unistd.h if available. Include xalloc.h. (xmalloc, xstrdup, free): Remove decls. (xgetcwd): Don't assume sizes fit in unsigned. Check for overflow when computing sizes. Simplify reallocation code. 2001-08-31 Paul Eggert * lib/savedir.c (savedir): Remove size parameter, as POSIX says that a directory's st_size can have an arbitrary value, so the old usage could waste an arbitrary amount of memory. All uses changed. * lib/savedir.h: Update prototype. 2001-08-31 Paul Eggert * lib/Makefile.am (libfetish_a_SOURCES): Remove strtoxmax.c. * lib/strtoimax.c: Renamed from strtoxmax.c, removing the old strtoimax.c. Also, make the following further changes to make this file's configuration more similar to that of strtol.c: (UNSIGNED): Renamed from STRTOUXMAX_UNSIGNED. All uses changed. (strtoumax, uintmax_t, strtoull, strtol): Remove. (intmax_t, strtoimax, strtol, strtoll): New macros, if UNSIGNED. (strtoimax): Renamed from strtoumax. All uses of unsigned values changed to signed values. And make the following changes as well: Fix copyright notice, as 1999 was missing. (verify): New macro. (strtoimax): Check sizes at compile-time, not run-time. Prefer strtol to strtoll if both work. (main): Remove; it was not that useful and was a pain to maintain. * lib/strtoumax.c: Include strtoimax.c, not strtouxmax.c. 2001-08-31 Jim Meyering * lib/xgetcwd.c (xgetcwd): Reorganize to avoid some duplication. Use an initial, malloc'd, buffer of length 128 rather than a statically allocated one of length 1024. 2001-08-30 Paul Eggert Simplify code, partly by assuming autoconf 2.52 semantics. * m4/Makefile.am (EXTRA_DIST): Remove uintmax_t.m4. * m4/inttypes.m4 (AC_PREREQ): Bump to 2.52. (jm_AC_HEADER_INTTYPES_H): Remove; now done by autoconf in 2.52. All uses removed. (jm_AC_TYPE_INTMAX_T, jm_AC_TYPE_UINTMAX_T): Move AC_REQUIRE to next-to-top level, to avoid confusion. Use 2.52's AC_CHECK_TYPE instead of merely looking for the header. * m4/prereq.m4 (jm_PREREQ_HUMAN): Don't require jm_AC_HEADER_INTTYPES_H. * m4/jm-macros.m4 (jm_MACROS): Likewise. * m4/uintmax_t.m4: Remove, as it duplicates inttypes.m4. * m4/xstrtoimax.m4 (jm_AC_PREREQ_XSTRTOIMAX): Quote first arg of AC_DEFUN. Require jm_AC_TYPE_UINTMAX_T and jm_AC_TYPE_UNSIGNED_LONG_LONG since they are needed to parse the include file even if we need only xstrtoimax. Simplify logic behind the args to AC_REPLACE. * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Likewise, but with opposite signedness. 2001-08-30 Paul Eggert Merge 'exclude' changes from tar 1.13.22. This fixes one or two unlikely storage allocation overflow bugs, but doesn't change user-visible behavior otherwise. 2001-08-30 Paul Eggert * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_EXCLUDE. (jm_PREREQ_EXCLUDE): New macro. 2001-08-30 Paul Eggert * lib/quotearg.c: BSD/OS 4.1 wchar.h requires FILE and struct tm to be declared. 2001-08-30 Paul Eggert * lib/hash.c: Remove '2001' from copyright notice. 2001-08-30 Paul Eggert * lib/full-write.h: New file. * lib/Makefile.am (libfetish_a_SOURCES): Add full-write.h. * lib/full-write.c: Correct credits, as cccp.c no longer exists and anyway it was so heavily changed from the old cccp code as to be unrecognizable. Include full-write.h. (full_write): Return size_t, with short writes meaning failure. All callers changed. This fixes a bug with large buffers on 64-bit hosts. * lib/utime.c: Include full-write.h. 2001-08-30 Paul Eggert * lib/exclude.c (bool): Declare, perhaps by including stdbool.h. (): Include only if HAVE_SYS_TYPES_H. (, , , , ): Include if available. (): Include (SIZE_MAX): Define if or doesn't. (verify): New macro. Use it to verify that EXCLUDE macros do not collide with FNM macros. (struct patopts): New struct. (struct exclude): Use it, as exclude patterns now come with options. (new_exclude): Support above changes. (new_exclude, add_exclude_file): Initial size must now be a power of two to simplify overflow checking. (free_exclude, fnmatch_no_wildcards): New function. (excluded_filename): No longer requires options arg, as the options are determined by add_exclude. Now returns bool, not int. (excluded_filename, add_exclude): Add support for the fancy new exclusion options. (add_exclude, add_exclude_file): Now takes int options arg. Check for arithmetic overflow when computing sizes. (add_exclude_file): xrealloc might modify errno, so don't realloc until after errno might be used. * lib/exclude.h (EXCLUDE_ANCHORED, EXCLUDE_INCLUDE,EXCLUDE_WILDCARDS): New macros. (free_exclude): New decl. (add_exclude, add_exclude_file): Now takes int options arg. (excluded_filename): No longer requires options arg, as the options are determined by add_exclude. Now returns bool, not int. 2001-08-30 Paul Eggert * lib/alloca.c (alloca): Arg is of type size_t, not unsigned. 2001-08-27 Jim Meyering * lib/Makefile.am (libfetish_a_SOURCES): Add strtoxmax.c * lib/version-etc.c (N_): Remove definition. Revert most of last change. Instead, simply don't mark the `Copyright...' string for translation. Based on advice from Paul Eggert. * lib/strtoxmax.c: Tweak comment. 2001-08-26 Jim Meyering * m4/jm-macros.m4: Require jm_AC_PREREQ_XSTRTOIMAX. * m4/xstrtoimax.m4: New file. * m4/xstrtoumax.m4: Add comments explaining why we AC_REPLACE_FUNCS(strtol). 2001-08-26 Jim Meyering * lib/version-etc.c (version_etc_copyright_fmt): Replace literal year of copyright with `%s' so translators don't get an untranslated message in 2002. (COPYRIGHT_YEAR): Define. (version_etc): Use fprintf rather than fputs. Suggestion from Ulrich Drepper. * lib/Makefile.am (libfetish_a_SOURCES): Add xstrtoimax.c. * lib/strtoll.c: New file, from GNU libc. * lib/xstrtoimax.c: New file. * lib/xstrtol.h: Add xstrtoimax. * lib/strtoumax.c: New file. Simply include "strtoumax.c". * lib/strtoimax.c: New file. Likewise, but first define STRTOUXMAX_SIGNED. * lib/strtoumax.c: Factor to work both for unsigned and signed types, ... * lib/strtoxmax.c: ... then renamed to this. 2001-08-18 Paul Eggert * m4/inttypes.m4: Add AC_PREREQ(2.13). (jm_AC_HEADER_INTTYPES_H): Test for intmax_t, too. (jm_AC_TYPE_INTMAX_T): New macro. (jm_AC_TYPE_UINTMAX_T): Moved here from uintmax_t.m4. * m4/longlong.m4 (jm_AC_TYPE_LONG_LONG): New macro. * m4/longlong.m4: Renamed from ulonglong.m4. * m4/inttypes.m4: Renamed from inttypes_h.m4. * m4/uintmax_t.m4: Removed. 2001-08-13 Paul Eggert * lib/Makefile.am (unlocked-io.h): Do not append "_unlocked" twice. Port to Solaris 8, where 'sed' requires a space after the 'r' command, and where sh dislikes "$/". Clean up the spacing a bit. Redirect output to $tmp just once. 2001-08-12 Paul Eggert * lib/addext.c (): Include. (errno): Declare if not defined. (addext): Work correctly when pathconf returns -1 and leaves errno alone because there is no limit. Also, work even if pathconf returns a value greater than SIZE_MAX. 2001-08-12 Jim Meyering * m4/afs.m4, assert.m4, bison.m4, check-decl.m4, chown.m4, d-ino.m4, d-type.m4, dos.m4, error.m4, fnmatch.m4, fpending.m4, fstypename.m4, fsusage.m4, ftruncate.m4, getgroups.m4, glibc.m4, gnu-source.m4, group-member.m4, jm-glibc-io.m4, jm-macros.m4, jm-mktime.m4, jm-winsz1.m4, jm-winsz2.m4, lchown.m4, lib-check.m4, libintl.m4, link-follow.m4, ls-mntd-fs.m4, lstat.m4, malloc.m4, mbrtowc.m4, mbstate_t.m4, mbswidth.m4, memcmp.m4, nanosleep.m4, perl.m4, prereq.m4, putenv.m4, readdir.m4, realloc.m4, regex.m4, rename.m4, rmdir-errno.m4, search-libs.m4, st_dm_mode.m4, st_mtim.m4, stat.m4, strftime.m4, timespec.m4, unlink-busy.m4, uptime.m4, utimbuf.m4, utime.m4, utimes.m4, xstrtoumax.m4: Quote the first argument in each use of AC_DEFUN. 2001-08-12 Jim Meyering * lib/xgetcwd.c (xgetcwd) [defined __GLIBC__ && __GLIBC__ >= 2]: Simply `return getcwd (NULL, 0);'. [! (defined __GLIBC__ && __GLIBC__ >= 2)]: Use 1300 as initial value for length, not PATH_MAX. * lib/pathmax.h: Clean up cpp syntax. 2001-08-12 Jim Meyering * lib/gettimeofday.c: New file. * lib/gtod.h: New file. * lib/Makefile.am (libfetish_a_SOURCES): Add gtod.h. 2001-08-05 Jim Meyering * m4/jm-macros.m4: Require autoconf-2.52. 2001-08-04 Jim Meyering * lib/error.h (__attribute__): Remove `|| __STRICT_ANSI__' from #if stmt, to get in sync with glibc. 2001-08-03 Paul Eggert The following changes are from gettext 0.10.39 as maintained by Bruno Haible. * lib/mbswidth.h (MBSW_REJECT_UNPRINTABLE, MBSW_REJECT_INVALID): Renamed from MBSW_ACCEPT_UNPRINTABLE and MBSW_ACCEPT_INVALID with inverted sense. All uses changed. * lib/mbswidth.c: Don't include . Include and unconditionally. (iswcntrl, mbsinit, ISCNTRL): New macros. (mbsnwidth): Use K&R style function declarations. Don't bother checking for MB_LEN_MAX == 1, since the compiler can optimize it when MB_CUR_MAX == 1. The width of control characters is zero, not 1. 2001-08-03 Paul Eggert The following changes are from gettext 0.10.39 as maintained by Bruno Haible, except that getline.m4 continues to use AC_LIBOBJ. * m4/codeset.m4: Upgrade to serial AM1. (AM_LANGINFO_CODESET): Renamed from jm_LANGINFO_CODESET; all uses changed. Quote first arg of AC_DEFUN. (am_cv_langinfo_codeset): Renamed from jm_cv_langinfo_codeset. * m4/iconv.m4: Upgrade to serial AM2. (AM_ICONV): Renamed from jm_ICONV; all uses changed. Add --with-libconv-prefix. Quote first arg of AC_DEFUN. Add description for ICONV_CONST. (am_cv_func_iconv): Renamed from jm_cv_func_iconv. (am_cv_lib_iconv): Renamed from jm_cv_lib_iconv. (am_cv_proto_iconv): Renamed from jm_cv_proto_iconv. * m4/jm-macros.m4 (jm_MACROS): Reflect s/jm_/AM_/ renamings. * m4/c-bs-a.m4 (AC_C_BACKSLASH_A): Quote first arg of AC_DEFUN. * m4/getline.m4 (AM_FUNC_GETLINE): Likewise. * m4/glibc21.m4 (jm_GLIBC21): Likewise. * m4/inttypes_h.m4 (jm_AC_HEADER_INTTYPES_H): Likewise. * m4/isc-posix.m4 (AC_ISC_POSIX): Likewise. * m4/lcmessage.m4 (AM_LC_MESSAGES): Likewise. * m4/progtest.m4 (AM_PATH_PROG_WITH_TEST): Likewise. * m4/uintmax_t.m4 (jm_AC_TYPE_UINTMAX_T): Likewise. * m4/ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Likewise. * m4/getline.m4 (AM_FUNC_GETLINE): Don't bother checking for string.h any more. * m4/progtest.m4 (AM_PATH_PROG_WITH_TEST): If not found, print "no", not the default value. 2001-06-25 Bruno Haible * m4/mbswidth.m4 (jm_PREREQ_MBSWIDTH): Don't require AM_C_PROTOTYPES. Also check for mbsinit. Needed for SCO 3.2v5.0.2. Also include ; this is where AIX 3.2.5 declares wcwidth. Also check for iswcntrl, used for wcwidth fallback. Use AC_TRY_COMPILE to emulate AC_CHECK_DECLS, for portability to Autoconf 2.13. 2001-08-03 Jim Meyering * m4/mbrtowc.m4 (jm_FUNC_MBRTOWC): Use `#include', not `@%:@include', as it was in the original. Reported by Paul Eggert. 2001-07-16 Jim Meyering * m4/gettimeofday.m4: New file. Prompted by a report from Bernhard Baehr. 2001-07-15 Jim Meyering * m4/Makefile.am.in (Makefile.am): Remove most of the unlocked-io.h stuff. Now it's in ../Makefile.cfg. 2001-07-15 Jim Meyering * lib/Makefile.am (EXTRA_DIST): Add unlocked-io.hin. (BUILT_SOURCES): Add unlocked-io.h. (io_functions): Define. (unlocked-io.h): New rule. (DISTCLEANFILES): Add unlocked-io.h. (all-local): Depend on unlocked-io.h, to ensure it is created. * lib/unlocked-io.hin: New file * lib/regex.c: Update from glibc. 2001-07-05 Jim Meyering * lib/Makefile.am (noinst_HEADERS): Remove definition, per new automake recommendation. (libfetish_a_SOURCES): Put all .h files here instead. Remove a thus-exposed (better checks in automake) duplicate and two unnecessary .h files. 2001-07-04 Jim Meyering * m4/Makefile.am.in (glibc-io.struct): New target. Rework the code that generates jm-glibc-io.m4 so that it doesn't trigger any make distcheck failure. 2001-07-02 Jim Meyering The following changes were prompted by suggestions from Bruno Haible. * m4/jm-glibc-io.m4n: New file, the template from which jm-glibc-io.m4 is now generated. * m4/Makefile.am.in (Makefile.am): Include jm-glibc-io.m4n in emitted definition of EXTRA_DIST. (Makefile.am): Emit the dependency, `all-local: jm-glibc-io.m4' to ensure that the generated file is created/updated whenever the list of $(unlocked_functions) is changed. (jm-glibc-io.m4): New rule. (unlocked-io.h): New rule -- currently unused. 2001-06-24 Jim Meyering * m4/regex.m4 (jm_INCLUDED_REGEX): Use a quadrigraph to represent an unmatched right bracket, rather than kludging it with an extra, falsely-matching quote in a comment. Patch by Akim Demaille. 2001-06-11 Jim Meyering * lib/regex.c: Update from GNU libc. 2001-05-27 Jim Meyering * m4/prereq.m4 (jm_PREREQ_READUTMP): Check for ut_type in struct utmpx. Check for ut_type in struct utmp. 2001-05-27 Jim Meyering * lib/readutmp.h (UT_TYPE): Define. 2001-05-24 Jim Meyering * lib/argmatch.c: Include "quote.h". (argmatch_invalid): Remove explicit `' quotes. Instead, use the quote function. Reported by Göran Uddeborg. 2001-05-22 Jim Meyering * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Don't use AC_LIBOBJ(strftime), now that we use the package-supplied version unconditionally. (jm_FUNC_STRFTIME): Don't replace strftime, for the same reason. 2001-05-21 Jim Meyering * m4/regex.m4: Change a couple backticks to single quotes to avoid shell syntax errors. 2001-05-21 Alexandre Duret-Lutz * m4/dos.m4 (jm_AC_DOS): Check for _WIN32, __WIN32__, and __MSDOS__. 2001-05-20 Paul Eggert * m4/strftime.m4 (jm_FUNC_GNU_STRFTIME): Don't bother to check library strftime, since we'll be using our own my_strftime function anyway. Define my_strftime instead of strftime. 2001-05-20 Alexandre Duret-Lutz * lib/dirname.c (dir_name): Compute append_dot using path, not newpath which is not yet declared. 2001-05-15 Jim Meyering * m4/regex.m4: Use proper quoting so brackets appear in the test program. Reported by, and with help from, Bruno Haible. 2001-05-13 Jim Meyering * m4/jm-macros.m4 (major_t, minor_t): Define to unsigned int if undefined. 2001-05-11 Paul Eggert dirname code cleanup. base_name now behaves more compatibly with POSIX basename when given file names that have trailing slashes, and similarly for dir_name. Add new primitives base_len and dir_len. Put the directory-name-related decls into dirname.h. * lib/addext.c (ISSLASH, base_name): Remove; now in dirname.h. * lib/backupfile.c (base_name): Likewise. * lib/basename.c (FILESYSTEM_PREFIX_LEN, PARAMS, ISSLASH): Likewise. * lib/dirname.c (FILESYSTEM_PREFIX_LEN, ISSLASH): Likewise. * lib/makepath.c (strip_trailing_slashes): Likewise. * lib/path-concat.c (DIRECTORY_SEPARATOR, FILESYSTEM_PREFIX_LEN, ISSLASH): Likewise. * lib/rename.c (strip_trailing_slashes): Likewise. * lib/same.c (base_name): Likewise. * lib/stripslash.c (ISSLASH): Likewise. * lib/addext.c: Include after size_t is defined. * lib/backupfile.c: Likewise. * lib/addext.c (addext): Use base_len to trim redundant trailing slashes instead of doing it ourselves. But do not trim the last slash if it is not redundant. * lib/backupfile.c (find_backup_file_name, max_backup_version): Use base_len instead of rolling it ourselves. Handle the case of "" and (on DOS) "C:" correctly. * lib/basename.c: Do not include , ; no longer needed. Include , . (base_name): Allow file names ending in slashes, other than names that are all slashes. In this case, return the basename followed by the slashes. This is more general, and can be used in places where the original base_name purposely had an assertion failure. (base_len): New function. * lib/dirname.c: Include instead of . Do not include ; no longer needed. Include xalloc.h. (memrchr): Remove decl. (dir_name_r): Remove. (dir_len): Renamed from dirlen. All callers changed. Rewrite in terms of base_name, for simplicity and consistency. (dir_name): Never return NULL. All callers changed. Do not include in test program; no longer needed. return 0; is fine for test program. * lib/dirname.h (DIRECTORY_SEPARATOR, ISSLASH, FILESYSTEM_PREFIX_LEN): New macros. (base_name, base_len, dir_len, strip_trailing_slashes): New decls. * lib/path-concat.c (path_concat): Use base_len to compute base length, not strlen; this means we cannot rely on memcpy to null-terminate. * lib/same.c (STREQ): Remove. (same_name): Handle the case where the basename ends in trailing '/'. * lib/stripslash.c (strip_trailing_slashes): Return nonzero if a slash was stripped. Do not strip the last slash after a file system prefix. 2001-05-11 Paul Eggert * lib/Makefile.am (libfetish_a_SOURCES): Add strftime.c, since we now compile it on all hosts. * lib/strftime.c (my_strftime): Define to nstrftime if emacs, but only if my_strftime is not defined. (extra_args, extra_args_spec, extra_args_spec_iso): Rename from ut_argument, ut_argument_spec, ut_argument_spec_iso, respectively. Add one more extra argument: a nanoseconds value. All uses changed. (ns): New macro. (my_strftime function): Add %N format. (emacs_strftimeu): Renamed from emacs_strftime, with extra ut argument. 2001-05-09 Paul Eggert * m4/jm-macros.m4 (jm_MACROS): Do not check for fseeko; no longer used. 2001-04-21 Jim Meyering * m4/rmdir-errno.m4: Write to a new file, so that a restrictive umask doesn't interfere. 2001-04-21 Alexandre Duret-Lutz * m4/ftruncate.m4: Check for chsize. Link with ftruncate.o unconditionally if ftruncate is missing. This was required when cross-compiling to i586-mingw32msvc. 2001-04-08 Jim Meyering * lib/getdate.y (get_date): Set tm_isdst to -1 to ensure that it is recomputed; that's necessary when the offset spans a DST transition. Patch by David J. MacKenzie. Reported by Hon-Yin Kok. 2001-04-02 Jim Meyering * lib/regex.h, regex.c: Update from GNU libc. 2001-03-24 Jim Meyering * m4/jm-macros.m4: Require autoconf-2.49d. 2001-03-20 Bruno Haible * m4/iconv.m4 (jm_ICONV): Recommend GNU libiconv. 2001-03-19 Paul Eggert * lib/version-etc.c (version_etc_copyright): Update to 2001. 2001-03-17 Jim Meyering * m4/memcmp.m4 (jm_AC_FUNC_MEMCMP): Remove my copy of AC_FUNC_MEMCMP, now that the version in autoconf is equivalent. (jm_FUNC_MEMCMP): Adjust to use AC_FUNC_MEMCMP. * m4/error.m4 (jm_PREREQ_ERROR): Invoke AC_FUNC_STRERROR_R. Suggestion from Akim Demaille. * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_TEMPNAME. (jm_PREREQ_TEMPNAME): New function. 2001-03-16 Paul Eggert * lib/tempname.c (uint64_t): Define to uintmax_t if not defined, and if UINT64_MAX is not defined. Required at least for Vax Ultrix4.3, which doesn't define uint64_t. Reported by John David Anglin. 2001-03-15 Bruno Haible * lib/localcharset.c (locale_charset): Allow wildcard syntax. Also resolve alias if codeset is empty. * lib/config.charset (BeOS): Use wildcard syntax. 2001-03-13 Jim Meyering * lib/path-concat.c (path_concat) [FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX]: Don't insert a backslash when concatenating e.g., `C:' and `foo'. From Bruno Haible. 2001-03-06 Bruno Haible * lib/localcharset.c (locale_charset): Don't use setlocale(LC_CTYPE,NULL). Don't return NULL. * lib/unicodeio.c (print_unicode_char): Simplify accordingly. 2001-03-06 Bruno Haible * lib/config.charset: Update for FreeBSD 4.2 and OSF/1 5.1. Add support for DOS/DJGPP. 2001-03-01 Paul Eggert * m4/jm-macros.m4 (jm_MACROS): Use mkstemp replacement if the system lacks mkstemp. Compile our own tempname.c if we compile our own mkstemp.c, as mkstemp relies on tempname. 2001-03-01 Jim Meyering * m4/dos.m4 (jm_AC_DOS): Remove extra backslashes, now that AH_VERBATIM really does output its argument verbatim. 2001-02-28 Paul Eggert * lib/Makefile.am (libfetish_a_SOURCES): Add dup-safer.c, fopen-safer.c. (noinst_HEADERS): Add stdio-safer.h, unistd-safer.h. * lib/dup-safer.c, lib/fopen-safer.c, lib/stdio-safer.h: * lib/unistd-safer.h: New files. 2001-02-25 Paul Eggert The mkstemp replacement is taken from glibc 2.2.2, with some portability fixes for use outside glibc, as follows: * lib/tempname.c (struct_stat64): New macro. (direxists, __gen_tempname): Use it. This avoids a portability problem with Solaris 8. * lib/tempname.c (): Include if HAVE_CONFIG_H. (, , ): Include only if STDC_HEADERS || _LIBC. (): Include only if HAVE_FCNTL_H || _LIBC. (): Include only if HAVE_UNISTD_H || _LIBC. (): Include only if HAVE_SYS_TIME_H || _LIBC. (__set_errno): Define this macro if doesn't. (P_tmpdir, TMP_MAX, __GT_FILE, __GT_BIGFILE, __GT_DIR, __GT_NOCREATE): Define these macros if doesn't. (S_ISDIR, S_IRUSR, S_IWUSR, S_IXUSR): Define these macros if doesn't. Ignore S_ISDIR if STAT_MACROS_BROKEN. (stat64, __getpid, __gettimeofday, __mkdir, __open, __open64, lxstat64, __xstat64): Define if not _LIBC. (__secure_getenv): Define if ! (HAVE___SECURE_GETENV || _LIBC). (__gen_tempname): Invoke gettimeofday only if HAVE_GETTIMEOFDAY || _LIBC; otherwise, fall back on plain "time". Use macros like S_IRUSR | S_IWUSR rather than octal values like 0600. * lib/mkstemp.c (__GT_FILE): Define to zero if not defined. * lib/mkstemp.c, lib/tempname.c: New files, taken from glibc 2.2.2. 2001-02-18 Paul Eggert * m4/jm-macros.m4 (jm_CHECK_ALL_HEADERS): Check for sys/resource.h. 2001-02-17 Paul Eggert * m4/mbrtowc.m4: New file, defining jm_FUNC_MBRTOWC. * m4/mbswidth.m4 (jm_PREREQ_MBSWIDTH): Use jm_FUNC_MBRTOWC, not AC_CHECK_FUNCS(mbrtowc). * m4/prereq.m4 (jm_PREREQ_QUOTEARG): Likewise. 2001-02-17 Paul Eggert * lib/mbswidth.c, quotearg.c (mbrtowc, mbsinit): Remove workaround macros for hosts that have mbrtowc but not mbstate_t, as we now insist on proper declarations for both before using mbrtowc. 2001-02-17 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Don't check for getmntent via AC_CHECK_FUNCS, since that would get a `no' and disrupt further attempts by AC_FUNC_GETMNTENT to check with e.g., -lgen on UnixWare 7.1.1. * m4/mbrtowc.m4 (jm_FUNC_MBRTOWC): Adapt to use AC_CACHE_CHECK etc., rather than AC_CACHE_VAL. 2001-02-17 Jim Meyering * lib/strtoul.c: Sync from GNU libc. Use double quotes, not <...> around included file name. * lib/strnlen.c (__strnlen): Merge in a change from GNU libc. * lib/strftime.c: Update from GNU libc (the only changes were to comments). 2001-02-17 Jim Meyering * lib/regex.c: Update from libc. 2001-02-17 Bruno Haible * lib/mbswidth.h (mbswidth): Also define as macro, to avoid prototype clash. 2001-02-16 Paul Eggert * lib/alloca.c (malloc): Undef before defining, since stdlib.h may have defined it. Needed for Encore Umax-3.0.9.16b systems. Reported by Mark Hounschell via Paul Eggert. 2001-02-07 Jim Meyering * m4/regex.m4 (jm_INCLUDED_REGEX): Add a test for the latest bug. 2001-02-05 Jim Meyering * m4/jm-macros.m4: Require autoconf-2.14d (not yet released), because it includes the patch required for `large file' support with at least HP-UX's 10.20 /bin/cc. 2001-02-03 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Restore prior use of AS_IF, now that it works once again (mysteriously). * m4/fsusage.m4 (jm_FILE_SYSTEM_USAGE): Likewise. 2001-01-30 Jim Meyering Don't use filenames that are 8.3-equivalent to "conftest" on DOS. * m4/chown.m4: Rename conftestchown to conftest.chown. * m4/rename.m4: s/conftestdir/conftest.d1/ and s/conftestdir2/conftest.d2/. * m4/utimes.m4: s/conftestdata/conftest.data/ Inspired by Pavel Roskin's change in autoconf. 2001-01-30 Bruno Haible * lib/config.charset: Update for FreeBSD 4.2. 2001-01-27 Jim Meyering * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Open-code what was a use of AS_IF. * m4/fsusage.m4 (jm_FILE_SYSTEM_USAGE): Likewise. 2001-01-26 Jim Meyering * m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for stddef.h, now that quotearg.c includes it. 2001-01-26 Jim Meyering * lib/quotearg.c: Include stddef.h. * lib/quote.c: Include stddef.h. Reported by Axel Kittenberger. * lib/xmalloc.c [HAVE_DONE_WORKING_MALLOC_CHECK]: Enclose error-evoking line in double quotes so that it evokes a better diagnostic. [HAVE_DONE_WORKING_REALLOC_CHECK]: Likewise. Reported by Axel Kittenberger. 2001-01-24 Stefan Monnier * regex.c (mutually_exclusive_p): Don't blindly handle `charset_not' as if it was a `charset'. 2001-01-21 Bruno Haible * m4/iconv.m4 (jm_ICONV): Also check whether the iconv declaration has const. 2001-01-21 Bruno Haible * lib/unicodeio.c (print_unicode_char): Cast the second iconv() arg, to avoid a warning. Add back 'const' to inptr. 2001-01-20 Jim Meyering Be sure that headers are checked before used in code compiled for the type checks. * m4/jm-macros.m4 (jm_MACROS): Remove all header checks. In place of that, invoke jm_CHECK_ALL_TYPES. (jm_CHECK_ALL_HEADERS): New functions with the above checks. (jm_CHECK_ALL_TYPES): Require jm_CHECK_ALL_HEADERS. Alan Iwi reported a build failure on an f300-fujitsu-uxpv4.1_ES; The check for ssize_t was mistakenly run before the test for unistd.h. The configure-time check for stdbool.h was missing. * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_HASH. (jm_PREREQ_HASH): New function. 2001-01-17 Jim Meyering * m4/fsusage.m4 (jm_FILE_SYSTEM_USAGE): Use AS_IF, not AS_IFELSE, for autoconf-2.49c. * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Likewise. 2001-01-16 Jim Meyering * lib/basename.c: Include , needed by assert on SunOS 4. From Bruno Haible. 2001-01-14 Jim Meyering * m4/rename.m4: Use temporary directories named conftestdir{,2}, not foo and bar. Create conftestdir/ in the script, not in the C code. Remove directories in the script, not in the C code. Remove conftestdir{,2} before trying to create the directory. Make the entire configure script fail if the mkdir fails. 2001-01-14 Jim Meyering * lib/rename.c: New file. From Volker Borchert. Include stdlib.h, string.h or strings.h, and xalloc.h. Use strip_trailing_slashes rather than open-coding it. 2001-01-03 Paul Eggert * lib/strftime.c: Sync with glibc time/strftime.c 1.81. 2001-01-03 Jim Meyering * lib/unicodeio.c (print_unicode_char): Remove `const' from declaration of local `inptr' to avoid warning with some system declarations of iconv. 2001-01-02 Volker Borchert * m4/rename.m4: New file. * m4/jm-macros.m4 (jm_MACROS): Require vb_FUNC_RENAME. 2001-01-01 Jim Meyering * m4/prereq.m4 (jm_PREREQ_READUTMP): Include utmp.h (if available), even on systems with utmpx.h. It's necessary for the declaration of utmp's ut_user member. Reported by Andreas Jaeger. * m4/check-decl.m4 (jm_CHECK_DECLS): Include grp.h and pwd.h if available. They are required for the declarations of getgrgid and getpwuid resp. (_jm_DECL_HEADERS): Check for grp.h and pwd.h. Reported by Andreas Jaeger. 2001-01-01 Alexandre Duret-Lutz * m4/libintl.m4 (AM_GNU_GETTEXT): Define MKINSTALLDIRS by expanding the value of $ac_aux_dir, as in AM_MISSING_HAS_RUN, so `make install' also works in VPATH builds. 2000-12-31 Alexandre Duret-Lutz * m4/libintl.m4 (AM_WITH_NLS): When using AC_CONFIG_AUX_DIR, prepend $(top_srcdir) to the value of MKINSTALLDIRS so that it can be used in subdirectories. 2000-12-29 Paul Eggert * lib/modechange.c: Do not assume that mode_t uses the traditional octal encoding. E.g. "chmod 1 FOO" should set the other-execute bit of FOO even if S_IXOTH != 1. (SUID, SGID, SVTX, RUSR, WUSR, XUSR, RGRP, WGRP, XGRP, ROTH, WOTH, XOTH, ALLM): New macros. (S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH): Use them. (S_ISGID): Fix typo; it was defaulting to the same value as S_ISUID. (S_IRWXU, S_IRWXG, S_IRWXO): Specify defaults in terms of the above. (mode_compile): No need to use uintmax_t; unsigned long is long enough. Don't bother to get suffix since we don't use it. 2000-12-26 Jim Meyering * m4/dos.m4 (jm_AC_DOS): Rewrite (though it's still a stub) to work better with autoheader. 2000-12-24 Jim Meyering * lib/hash.c (is_prime): Return explicit boolean values. (hash_get_first): Return NULL to appease Irix5.6's 89. Reported by Nelson Beebe. 2000-12-19 Bruno Haible * lib/localcharset.c (locale_charset): Add support for Win32. 2000-12-18 Paul Eggert * lib/physmem.h, lib/physmem.c: New files. * lib/Makefile.am (libfetish_a_SOURCES): Add physmem.c. (noinst_HEADERS): Add physmem.h. * lib/xstrtol.c (__xstrtol): Add undocumented suffixes 'g' and 't' for compatibility with Solaris 8 sort. 2000-12-18 Bruno Haible * lib/config.charset: Add support for BeOS. 2000-12-17 Jim Meyering * m4/dos.m4 (jm_AC_DOS): New file and macro. * m4/jm-macros.m4 (jm_MACROS): Require jm_AC_DOS. 2000-12-16 Jim Meyering This bug had a serious impact on chown: `chown N:M FILE' (for integer N and M) would have treated it like `chown N:N FILE'. * lib/userspec.c (parse_user_spec): Fix typo: s/u/g/. 2000-12-16 Jim Meyering * lib/getusershell.c [!SHELLS_FILE && __DJGPP__]: Define SHELLS_FILE to a file name that's useful on djgpp systems. Include stdlib.h. (ADDITIONAL_DEFAULT_SHELLS): Define. (default_shells): Prepend ADDITIONAL_DEFAULT_SHELLS. Based mostly on a patch from Prashant TR. 2000-12-16 Bruno Haible * lib/config.charset: Add ISO-8859-3, BIG5HKSCS, GB18030, JOHAB, VISCII, CP874, CP949, CP950, CP1250, CP1253, CP1254, CP1255, CP1256, CP1257 to the list of canonical encodings. Rename EUC-CN to GB2312. 2000-12-08 Andreas Schwab * lib/mbswidth.c (mbsnwidth): Don't loop endlessly when called with an invalid mulitbyte sequence and with the MBSW_ACCEPT_INVALID flag set. 2000-12-07 Jim Meyering * lib/stripslash.c (ISSLASH): Define. (strip_trailing_slashes): Use ISSLASH rather than comparing against `/'. From Prashant TR. * lib/dirname.c (FILESYSTEM_PREFIX_LEN): Define. (dir_name_r): Declare this function as static. [BACKSLASH_IS_PATH_SEPARATOR]: Fix a bug that'd manifest itself on a name containing a mix of slashes and backslashes. Make this function work with names starting with a DOS-style drive letter and colon prefix. (dir_name): Append `.' if necessary. Based mostly on patches from Prashant TR and Eli Zaretskii. * lib/dirname.h (dir_name_r): Remove prototype. 2000-12-06 Paul Eggert * m4/off_t-format.m4: Remove this file. * m4/jm-macros.m4 (jm_MACROS): Remove jm_SYS_OFF_T_PRINTF_FORMAT. 2000-12-06 Jim Meyering * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): If we need the replacement strtoull, we may well need the replacement strtoul, too. Check for declarations of strtoul and strtoull. Check for strtol. Mainly as a cue to cause automake to include strtol.c -- that file is included by each of strtoul.c and strtoull.c. Check for limits.h -- strtol.c needs it. 2000-12-05 Jim Meyering * lib/dirname.c (dir_name_r): Add `const' in a few local declarations. 2000-12-04 Jim Meyering * lib/path-concat.c: [!HAVE_DECL_MALLOC]: Declare malloc. Also include memory.h, stdlib.h, unistd.h if appropriate. Reported by Andreas Jaeger (conflicting declaration of malloc). 2000-12-02 Jim Meyering * m4/off_t-format.m4 (OFF_T_PRINTF_FORMAT_STRING): New file/macro. * m4/jm-macros.m4 (jm_MACROS): require it. 2000-12-02 Jim Meyering * lib/closeout.h: Make idempotent, to avoid some obscure warnings. 2000-12-01 Paul Eggert * lib/memrchr.c: Include before any system include file. 2000-11-30 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Check for stdint.h. 2000-11-30 Jim Meyering * m4/getloadavg.m4: s/ifval/m4_ifval/ to accommodate new autoconf. 2000-11-29 Paul Eggert * lib/dirname.c (dir_name_r): Fix typo: int -> size_t. 2000-11-26 Jim Meyering * lib/memcoll.c: Include sys/types.h. From Werner Almesberger. 2000-11-22 Paul Eggert * lib/strftime.c (my_strftime): Do not invoke mbrlen with a size of (size_t) -1; it's not portable. 2000-11-17 Jim Meyering * lib/strstr.c: Update from GNU libc. 2000-11-17 Akim Demaille * lib/obstack.h: Formatting changes. (obstack_grow, obstack_grow0): Don't cast WHERE at all: that would prevent type checking. (obstack_ptr_grow, obstack_ptr_grow_fast): When assigning, don't cast the value to (void *): assigning a `foo *' to a `void *' variable is valid. (obstack_int_grow, obstack_int_grow_fast): Don't cast AINT to int. 2000-11-16 Jim Meyering * lib/strverscmp.c: Incorporate weak-alias-related changes from glibc. 2000-11-11 Jim Meyering * lib/error.c: Add a couple #includes, merging from GNU libc version. 2000-11-10 Jim Meyering * lib/obstack.h: Update from GNU libc. * lib/obstack.c: Likewise. 2000-11-08 Bruno Haible * m4/jm-macros.m4 (jm_MACROS): Add test for wcrtomb. 2000-11-06 Paul Eggert * lib/getusershell.c (setusershell): Use rewind rather than fseek/fseeko, to avoid configuration hassles with fseeko. Don't bother opening SHELLS_FILE if shellstream is NULL; it's not necessary. 2000-11-05 Jim Meyering * lib/makepath.h (make_dir): Declare. * lib/makepath.c (make_dir): Remove `static' attribute. Tweak a comment. 2000-11-04 Jim Meyering * m4/regex.m4: Use the `m4_' prefix on `syscmd' and `m4_sysval'. 2000-11-04 Alexandre Duret-Lutz * lib/hash.c (hash_get_next): Fix a thinko: when ENTRY is the last one in a bucket, advance to the next bucket. 2000-11-02 Vesselin Atanasov * lib/fnmatch.c: Do not comment out all the code if we are using the GNU C library, because in some cases we are replacing buggy code in the GNU C library itself. 2000-10-30 Stefan Monnier * regex.c (re_iswctype, re_wctype_to_bit): Fix braino. (regex_compile): Catch bogus \(\1\). 2000-10-30 Paul Eggert * lib/fnmatch.c (FOLD): Do not assume that characters are unsigned. (fnmatch): Fix some FNM_FILE_NAME and FNM_LEADING_DIR bugs, e.g. fnmatch("d*/*1", "d/s/1", FNM_FILE_NAME) incorrectly yielded zero. 2000-10-30 Paul Eggert * lib/error.h, getline.h, modechange.h: Remove "2000" from Copyright line, as the file hasn't been changed this year other than in the copyright notice. * lib/xalloc.h: Add "2000" to Copyright line, as this file was changed this year. 2000-10-29 Jim Meyering * m4/fsusage.m4: s/AC_SHELL_IFELSE/AS_IFELSE/ to match autoconf renaming. * m4/ls-mntd-fs.m4: Likewise 2000-10-29 Jim Meyering * lib/xstat.in: Fix grammar in comment. 2000-10-29 Greg Louis * lib/regex.h (__restrict_arr): Move definition out of #ifndef block. Required because egcs-2.91.66 (aka 1.1.2) defines __restrict, but doesn't define __restrict_arr. 2000-10-28 Jim Meyering * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_MEMCHR. (jm_PREREQ_MEMCHR): New function. 2000-10-28 Jim Meyering * lib/memchr.c: Update from libc. Adjust for portability: [HAVE_STDLIB_H]: Include stdlib.h. [HAVE_BP_SYM_H || _LIBC]: Guard inclusion of bp-sym.h. Undef __memchr, too. [!weak_alias]: Define __memchr to memchr. * lib/regex.c: Update from libc. * lib/regex.h: Likewise. * lib/getopt1.c: Likewise. * lib/memcmp.c: Likewise. * lib/getusershell.c (setusershell) [HAVE_FSEEKO]: Use fseeko. Avoid using fseek, when possible -- it's broken by design. Patch by Ulrich Drepper. 2000-10-27 Stefan Monnier * regex.c (POP_FAILURE_REG_OR_COUNT, re_match_2_internal) (re_match_2_internal, re_match_2_internal, re_match_2_internal): Giving in to popular pressure to shut up the compiler with casts. 2000-10-26 Jim Meyering * lib/strftime.c: Update from libc. 2000-10-25 Stefan Monnier * regex.c: More `unsigned char' -> `re_char' changes. Also change several `int' into `re_wchar_t'. (PATTERN_STACK_EMPTY, PUSH_PATTERN_OP, POP_PATTERN_OP): Remove. (PUSH_FAILURE_POINTER): Don't cast any more. (POP_FAILURE_REG_OR_COUNT): Remove the cast that strips `const'. We want GCC to complain, since this piece of code makes re_match non-reentrant, which *should* be fixed. (GET_BUFFER_SPACE): Use size_t rather than unsigned long. (EXTEND_BUFFER): Use RETALLOC. (SET_LIST_BIT): Don't cast. (re_wchar_t): New type. (re_iswctype, re_wctype_to_bit): Make it crystal clear to GCC that those two functions will always properly return. (IMMEDIATE_QUIT_CHECK): Cast to void. (analyse_first): Use recursion rather than an explicit stack. (re_compile_fastmap): Can't fail anymore. (re_search_2): Don't check re_compile_fastmap for failure. (PUSH_NUMBER): Renamed from PUSH_FAILURE_COUNT. Now also sets the new value (passed in a new argument). (re_match_2_internal): Use it. Also, use a new var `reg' of type size_t when looping through regs rather than reuse the inappropriate `mcnt'. 2000-10-25 Jim Meyering * lib/obstack.c: Update from libc. 2000-10-24 Kenichi Handa * regex.c (regex_compile): Change the way of handling a range from a char less than 256 to a char not less than 256. 2000-10-24 Andrew Innes * regex.c (IMMEDIATE_QUIT_CHECK): New macro, which does QUIT on NT-Emacs only. (re_match_2_internal): Use IMMEDIATE_QUIT_CHECK instead of QUIT, so that re_search functions only quit when callers expect them to. 2000-10-23 Jim Meyering * lib/hard-locale.c (hard_locale): Revert last change -- it was simply wrong. That set_locale call must not have any side effects. From Paul Eggert. 2000-10-22 Jim Meyering * lib/md5.c (md5_process_block) [OP]: Use `rol', not CYCLIC. [CYCLIC]: Remove now-unused definition. * lib/save-cwd.c (O_DIRECTORY): Define, if needed. (save_cwd) [HAVE_FCHDIR]: Use O_DIRECTORY when opening ".". Suggestion from Ulrich Drepper. 2000-10-21 Jim Meyering * m4/check-decl.m4 (jm_CHECK_DECLS): Also check for memrchr. * m4/prereq.m4 (jm_PREREQ_DIRNAME): New macro. * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add memrchr. 2000-10-21 Jim Meyering * lib/dirname.c (memrchr): Declare if necessary. (dir_name): Remove the restriction that there be no trailing slashes. Now, this code skips past them, effectively ignoring them. [TEST_DIRNAME] (main): New unit tests. * lib/memrchr.c: New file from GNU libc. Undef __memrchr, too. [!weak_alias]: Define __memrchr to memrchr. Guard weak_alias use with `#ifdef weak_alias'. 2000-10-21 Jim Meyering * lib/dirname.c (dir_name_r): New function, factored out of dir_name. (dir_name): Use dir_name_r. * lib/dirname.h (dir_name_r): Declare it. 2000-10-17 Jim Meyering * lib/quote.h (PARAMS): Define and use. Reported by Akim Demaille. * lib/getopt.c: Update from libc. 2000-10-16 Jim Meyering * lib/hard-locale.c (hard_locale): Use "", not 0 as 2nd arg to setlocale. From Jan Fedak. 2000-10-15 Stefan Monnier * regex.c (WIDE_CHAR_SUPPORT): Define if _LIBC as well. 2000-09-25 Jim Meyering * lib/md5.h (rol): Define (from GnuPG). * lib/sha.c: Give credit (GnuPG) where due. (M): Use rol rather than open-coding it. Add a FIXME comment. 2000-09-21 Jim Meyering * lib/userspec.c (parse_user_spec): Remove debugging printf I'd added. Reported by Michael Stone. 2000-09-20 Jim Meyering * lib/Makefile.am (libfetish_a_SOURCES): Add sha.c. (noinst_HEADERS): Add sha.h. Based on code from Scott G. Miller and from GnuPG. 2000-09-18 Jim Meyering * m4/getloadavg.m4 (AC_FUNC_GETLOADAVG): Restore the initial value of LIBS. Otherwise, everyone ends up linking with -lelf for some configurations. Reported by Mike Stone. 2000-09-15 Jim Meyering * lib/regex.c: Update from libc. 2000-09-10 Jim Meyering * lib/getopt.c (_getopt_internal): Update from glibc. 2000-09-09 Jim Meyering * lib/quotearg.c: Rename ISASCII to IN_CTYPE_DOMAIN, so people don't think it should be used as a general replacement for isascii. * lib/fnmatch.c: Likewise. * lib/mbswidth.c: Likewise * lib/regex.c: Likewise. Don't use atoi. * lib/userspec.c: Include sys/param.h and limits.h. Include xstrtol.h. (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Define. (UID_T_MAX, GID_T_MAX, MAXUID, MAXGID): Define. (parse_user_spec): Use xstrtoul, not atoi when converting numeric UID, GID. Check range. 2000-09-06 Jim Meyering * lib/getopt.c (_getopt_internal): Update from glibc. 2000-08-30 Jim Meyering * lib/strftime.c: Merge in changes from GNU libc. 2000-08-26 Jim Meyering * m4/jm-macros.m4: Use jm_FUNC_FPENDING. * m4/fpending.m4: New file. 2000-08-26 Jim Meyering * lib/closeout.c: Include "__fpending.h". (close_stdout_status): Return right away if there's nothing to flush. * lib/Makefile.am (noinst_HEADERS): Add __fpending.h. * lib/__fpending.c: New file. * lib/__fpending.h: New file. 2000-08-20 Jim Meyering * m4/check-decl.m4: Include utmp.h `#if HAVE_UTMP_H', rather than `#if !HAVE_UTMPX_H'. The latter would lose on systems with neither utmp.h nor utmpx.h. Reported by Eli Zaretskii. 2000-08-11 J. David Anglin Improve fileutils installation on systems where running programs (like install) can't be unlinked. * m4/unlink-busy.m4 (jm_FUNC_UNLINK_BUSY_TEXT): New file/macro. * m4/jm-macros.m4: Use jm_FUNC_UNLINK_BUSY_TEXT. 2000-08-07 Paul Eggert Standardize on "memory exhausted" instead of "Memory exhausted" or "virtual memory exhausted". * lib/obstack.c (print_and_abort): Use "memory exhausted", not "virtual memory exhausted". * lib/same.c (same_name): Invoke xalloc_die instead of printing our own message. * lib/userspec.c (parse_user_spec): Likewise. * lib/bumpalloc.h: comment fix * lib/same.c, userspec.c: Include xalloc.h. * lib/xalloc.h (xalloc_msg_memory_exhausted): Now char const[], not char *const and pointing to a constant array. * lib/xmalloc.c (xalloc_msg_memory_exhausted): Likewise. (xrealloc): Comment fix. * lib/userspec.c (parse_user_spec): Don't translate a message until just before returning, to avoid unnecessary translation. 2000-08-07 Jim Meyering * lib/addext.c, argmatch.c, argmatch.h, backupfile.h, bumpalloc.h, chown.c, diacrit.h, dirname.h, dup2.c, exclude.h, fileblocks.c, fnmatch.c, fnmatch.h, fsusage.c, fsusage.h, getdate.h, getgroups.c, gethostname.c, getopt.h, group-member.c, hard-locale.c, hash.h, isdir.c, lchown.c, linebuffer.c, linebuffer.h, long-options.h, malloc.c, md5.c, md5.h, memchr.c, memcmp.c, memcoll.c, memset.c, mktime.c, modechange.h, obstack.h, pathmax.h, realloc.c, rmdir.c, safe-read.c, save-cwd.c, stime.c, stpcpy.c, strcasecmp.c, strcspn.c, strdup.c, stripslash.c, strstr.c, strtod.c, strtol.c, strtoul.c, strtoull.c, strtoumax.c, utime.c, version-etc.h, xalloc.h, xstrdup.c, xstrtoumax.c, yesno.c: Back out Copyright date changes for each file with no change this year. This eases coordination with other programs using the same source code modules. From Paul Eggert. 2000-08-06 Paul Eggert * m4/mbstate_t.m4 (AC_MBSTATE_T): Define mbstate_t to be int, not char, for compatibility with glibc 2.1.3 strftime.c. 2000-08-03 Greg McGary * lib/regex.c (SET_HIGH_BOUND, MOVE_BUFFER_POINTER, ELSE_EXTEND_BUFFER_HIGH_BOUND): New macros. (EXTEND_BUFFER): Use them. 2000-08-01 Jim Meyering * lib/dirname.c (ISSLASH): Define. (BACKSLASH_IS_PATH_SEPARATOR): Define. (dir_name) [BACKSLASH_IS_PATH_SEPARATOR]: Handle the case in which both `\' and `/' may be use as path separators. Based on a patch from Prashant TR. 2000-07-31 Paul Eggert * lib/quotearg.c (quotearg_n_options): Don't make the initial slot vector a constant, since it might get modified. 2000-07-31 Jim Meyering * lib/xmalloc.c: Use `virtual memory exhausted', not `Memory exhausted'. * lib/obstack.c (print_and_abort): Likewise. 2000-07-30 Paul Eggert * lib/quotearg.c (quotearg_n_options): Preallocate a slot 0 buffer, so that the caller can always quote one small component of a "memory exhausted" message in slot 0. From a suggestion by Jim Meyering. 2000-07-30 Jim Meyering * lib/makepath.c (make_path): Quote the other instance, too. * lib/quotearg.c (N_STATIC_SLOTVECS): Define. (STATIC_BUF_SIZE): Define. (quotearg_n_options): Use only statically allocated storage when N < N_STATIC_SLOTVECS and the length of the quoted result is smaller than STATIC_BUF_SIZE. 2000-07-29 Jim Meyering * lib/diacrit.c (diacrit_diac): Use __MSDOS__ in favor of MSDOS. * lib/dirname.c (dir_name): Likewise. * lib/basename.c (base_name): Use ISSLASH rather than comparing against `/'. * lib/dirname.c (dir_name) [MSDOS]: Declare `lim' to be const. (dir_name): Assert that there are no trailing slashes. 2000-07-29 Bruno Haible * lib/mbswidth.h (mbswidth): Add a flags argument. (mbswidth): New declaration. (MBSW_ACCEPT_INVALID, MBSW_ACCEPT_UNPRINTABLE): New macros. * lib/mbswidth.c (mbswidth): Add a flags argument. (mbsnwidth): New function. 2000-07-24 Jim Meyering * lib/mbswidth.c: Remove useless #else. From Bruno Haible. 2000-07-23 Paul Eggert * m4/mbswidth.m4 (jm_PREREQ_MBSWIDTH): Check for wcwidth declaration. 2000-07-23 Paul Eggert * lib/quotearg.c: Streamline by invoking multibyte code only if needed. : Include only if HAVE_MBRTOWC && 1 < MB_LEN_MAX. (MB_CUR_MAX): Redefine to 1 if ! (HAVE_MBRTOWC && 1 < MB_LEN_MAX). (quotearg_buffer_restyled): If a unibyte locale, don't bother to invoke multibyte primitives. 2000-07-23 Paul Eggert * lib/quotearg.c: Include even if ! (HAVE_MBRTOWC && 1 < MB_LEN_MAX), so that mbstate_t is always defined. Do not inspect MB_LEN_MAX, since it's incorrectly defined to be 1 in at least one GCC installation, and this configuration error is likely to be common. Ignoring MB_LEN_MAX hurts performance on hosts that have mbrtowc but have only unibyte locales, but I assume these hosts are rare. 2000-07-23 Paul Eggert * lib/mbswidth.c (_XOPEN_SOURCE): Don't define; this causes problems on Solaris 7. (wcwidth) [!HAVE_DECL_WCWIDTH]: Declare. 2000-07-23 Jim Meyering * m4/check-decl.m4 (jm_CHECK_DECLS): Check for declarations of these, too: getgrgid, getpwuid, getuid. 2000-07-23 Jim Meyering * lib/basename.c (base_name): Add an assertion. 2000-07-23 Bruno Haible * lib/quotearg.c: When the system forces us to redefine mbstate_t, shadow its mbsinit function. 2000-07-17 Bruno Haible * lib/mbswidth.h: New file. * lib/mbswidth.c: New file. * lib/Makefile.am (libfetish_a_SOURCES): Add mbswidth.c. (noinst_HEADERS): Add mbswidth.h. 2000-07-17 Bruno Haible * lib/config.charset: Add support for FreeBSD. Improve support for HP-UX and IRIX 6. 2000-07-16 Bruno Haible * m4/mbswidth.m4: New file. * m4/prereq.m4 (jm_PREREQ): Call jm_PREREQ_MBSWIDTH. 2000-07-15 Jim Meyering * lib/makepath.c: Include quote.h. (make_path): Convert "`%s'" in format strings to "%s", and wrap each corresponding argument in a `quote (...)' call. Give better diagnostics. * lib/Makefile.am (libfetish_a_SOURCES): Add quote.c. (noinst_HEADERS): Add quote.h. * lib/quote.c (quote, quote_n): New file. Two functions taken verbatim from tar's src/misc.c. * lib/quote.h: New file. Prototypes for same. 2000-07-14 Paul Eggert From a suggestion by Bruno Haible. * lib/quotearg.c (mbrtowc): Do not use HAVE_WCHAR_H in the definition. Use defined mbstate_t, not HAVE_MBSTATE_T_OBJECT, to decide whether to define the BeOS workaround macro; this adjusts to the change to AC_MBSTATE_T. 2000-07-14 Jim Meyering * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Require jm_AC_TYPE_UINTMAX_T. 2000-07-13 Paul Eggert * lib/quotearg.h (enum quoting style): New enum clocale_quoting_style. * lib/quotearg.c (quoting_style_args, quoting_style_vals, quotearg_buffer_restyled): Add support for clocale_quoting_style. Undo previous change to locale_quoting_style behavior, and undo the "{LEFT QUOTATION MARK}" and "{RIGHT QUOTATION MARK}" msgids. 2000-07-10 Paul Eggert From a suggestion by Bruno Haible. * m4/mbstate_t.m4 (AC_MBSTATE_T): Renamed from AC_MBSTATE_T_OBJECT. All uses changed. Change from a two-part test, which defines both HAVE_MBSTATE_T_OBJECT and mbstate_t, to a single-part test that simply defines mbstate_t. * m4/prereq.m4 (jm_PREREQ_QUOTEARG): s/AC_MBSTATE_T_OBJECT/AC_MBSTATE_T/. 2000-07-10 Jim Meyering * m4/strerror_r.m4: Mirror the correction made in autoconf. * m4/gnu-source.m4: Output to confdefs.h directly. Suggestion from Akim Demaille. 2000-07-09 Paul Eggert The old behavior of quoting `like this' doesn't look good with newer, ISO-style fonts. See: http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html Instead, quote "like this" by default. Let the translator tailor the locale-specific quoting behavior by providing translations for {LEFT QUOTATION MARK} and {RIGHT QUOTATION MARK}. * lib/quotearg.c (N_): New macro. (gettext_default): New function. (quotearg_buffer_restyled): Use gettext_default ("{LEFT QUOTATION MARK}", "\"") for left quote, and gettext_default ("{RIGHT QUOTATION MARK}", "\"") for right quote. 2000-07-09 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Add a test to see if -lm is required to link seq. If so, set SEQ_LIBM to -lm. From Bruno Haible. * m4/gnu-source.m4 (AC__GNU_SOURCE): New file/macro. * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Require it. 2000-07-09 Jim Meyering * lib/Most files: Update copyright dates to include 2000. 2000-07-08 Jim Meyering * lib/xgethostname.c (ENAMETOOLONG): Define to an unlikely value if not defined. (xgethostname): Remove now-unnecessary #ifdef. Move declaration of `err' into loop where it's used. 2000-07-05 Paul Eggert and Bruno Haible * m4/mbstate_t.m4 (AC_MBSTATE_T_OBJECT): Test for mbstate_t only if the test for an object-type mbstate_t fails. This prevents us from mistakenly reporting that mbstate_t is a system object type after we "#define mbstate_t int" to work around its lack. 2000-07-05 Paul Eggert and Bruno Haible * lib/quotearg.c (mbrtowc): Declare returned type, since BeOS doesn't. 2000-07-05 Bruno Haible * m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Pass a reasonably large buffer to strerror_r. Include for use of isalpha. 2000-07-05 Bruno Haible * lib/xgethostname.c (xgethostname): Protect against the SunOS 5.5 bug by allocating a larger buffer. Test the gethostname return value for being >= 0, not == 0, for BeOS. Don't exhaust memory if gethostname returns an error and ENAMETOOLONG isn't defined. 2000-07-05 Bruno Haible * lib/quotearg.c (struct quoting_options): Simplify quote_these_too dimension. 2000-07-04 Jim Meyering * m4/fsusage.m4 (jm_FILE_SYSTEM_USAGE): Use plain old `echo' instead of the deprecated AC_CHECKING. 2000-07-04 Jim Meyering * lib/strndup.c: [!HAVE_DECL_STRNLEN]: Declare strnlen. Reported by Bruno Haible. 2000-07-04 Jim Meyering * lib/quotearg.c: Make inclusion of independent of whether HAVE_MBRTOWC is set. Required at least for irix-5.6, which lacks mbrtowc. 2000-07-03 Paul Eggert * m4/mbstate_t.m4 (AC_MBSTATE_T_OBJECT): Port to autoconf 2.13. Add AC_CHECK_HEADERS(stdlib.h), since we use HAVE_STDLIB_H. 2000-07-03 Paul Eggert and Bruno Haible * lib/quotearg.c (mbrtowc): Assign to *pwc, and return 1 only if result is nonzero. (iswprint): Use ISPRINT when substituting our own mbrtowc. 2000-07-03 Jim Meyering * m4/check-decl.m4 (AC_CHECK_DECLS): Add strnlen. 2000-07-03 Jim Meyering * lib/readutmp.h: [HAVE_UTMPX_H]: Include if HAVE_UTMP_H. This is necessary to get a definition of e.g., UTMP_FILE on HP-UX 10.20. From Bob Proulx. 2000-07-02 Jim Meyering * m4/mbstate_t.m4: Also define mbstate_t, if necessary. * m4/chown.m4: Replace each use of AC_SUBST(LIBOBJS)/LIBOBJS=... with AC_LIBOBJ(function_name). * m4/chown.m4: Likewise. * m4/fnmatch.m4: Likewise. * m4/ftruncate.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/getline.m4: Likewise. * m4/group-member.m4: Likewise. * m4/jm-macros.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/memcmp.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/putenv.m4: Likewise. * m4/realloc.m4: Likewise. * m4/regex.m4: Likewise. * m4/stat.m4: Likewise. * m4/strftime.m4: Likewise. 2000-07-02 Jim Meyering * lib/quotearg.c (mbstate_t): Don't define here. 2000-07-02 Jim Meyering * lib/nanosleep.c (SIGCONT): Define if not already defined. 2000-07-01 Jim Meyering * m4/uptime.m4: Put double quotes around use of $cross_compiling. 2000-07-01 Jim Meyering * m4/ls-mntd-fs.m4: Remove a `FIXME' comment and fix the associated problem. 2000-07-01 Bruno Haible * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Rename BeOS specific macro from MOUNTED_NEXT_DEV to MOUNTED_FS_STAT_DEV. 2000-07-01 Bruno Haible * lib/mountlist.c: Use MOUNTED_FS_STAT_DEV instead of MOUNTED_NEXT_DEV, per change in ../m4/ls-mntd-fs.m4. (read_filesystem_list): Ignore symbolic links. 2000-06-29 Jim Meyering * lib/same.c: Include or , as appropriate, for declaration of strcmp. * lib/long-options.c: Include , for declaration of exit. * lib/mountlist.c (fsp_to_string) [HAVE_F_FSTYPENAME_IN_STATFS]: Avoid warning by casting result to `char *' to remove `const'. 2000-06-28 Jim Meyering * m4/mbstate_t.m4: Use stdlib.h, not stdio.h. The latter is not included by quotearg.c, for which we perform this test. From Bruno Haible. 2000-06-27 Bruno Haible * m4/check-decl.m4 (_jm_DECL_HEADERS): Check for utmp.h as well. * m4/prereq.m4 (jm_PREREQ_READUTMP): Likewise. If either or exists, put readutmp.o into LIBOBJS. 2000-06-27 Bruno Haible * lib/Makefile.am (libfetish_a_SOURCES): Remove readutmp.c. 2000-06-26 Paul Eggert savedir now sets errno on failure and invokes xmalloc to get memory. Fix a couple of other minor bugs while we're at it. * lib/savedir.c (): Do not include; there's no need. (NAMLEN): Remove macro. (malloc, realloc): Remove decls. (stpcpy): Likewise. ("xalloc.h"): Include. (NAME_SIZE_DEFAULT): New macro. (savedir): Use xmalloc / xrealloc to allocate memory. Use NAME_SIZE_DEFAULT if name_size is negative or overflows to zero. Skip "" directory entries. Use strlen to calculate directory entry length, since the old method is rarely used these days and isn't worth supporting. Don't use a pointer after freeing it. Check for integer overflow when calculating allocation size. Use memcpy to copy entries, instead of stpcpy. Set errno properly when returning NULL. Check for readdir error. 2000-06-26 Jim Meyering * lib/posixtm.c [HAVE_STDLIB_H]: Include stdlib.h, for decl of abort. 2000-06-25 Jim Meyering * m4/mbstate_t.m4: Include stdio.h before wchar.h to work around Linux header bug when _XOPEN_SOURCE is defined to 500. 2000-06-25 Bruno Haible * lib/unicodeio.c (print_unicode_char): Work around ansi2knr deficiency. 2000-06-25 Bruno Haible * lib/getusershell.c (xmalloc, xrealloc): Remove functions. Include xalloc.h. Don't include . Don't declare malloc, realloc. 2000-06-24 Jim Meyering * m4/strerror_r.m4: Revive this file -- to try out an experimental version of AC_FUNC_STRERROR_R that may work even on BeOS, a system for which strerror does return char*, but which lacks a conveniently accessible declaration of the function. If the compile-test says strerror_r doesn't work, then resort to a `run'-test that works on BeOS and segfaults on DEC Unix. 2000-06-24 Jim Meyering * lib/error.c [!HAVE_DECL_STRERROR_R]: Declare strerror_r. 2000-06-23 Paul Eggert * m4/mbstate_t.m4: New file, defining AC_MBSTATE_T_OBJECT. * m4/prereq.m4 (jm_PREREQ_QUOTEARG): Use it. Add check for iswprint. 2000-06-23 Paul Eggert * lib/quotearg.c: Include after , for Solaris 2.5. (mbrtowc, mbstate_t): Define substitutes if HAVE_MBRTOWC && HAVE_WCHAR_H && !HAVE_MBSTATE_T_OBJECT. (iswprint): Define to 1 if !defined iswprint && !HAVE_ISWPRINT, not if ! (HAVE_MBRTOWC && HAVE_WCHAR_H). 2000-06-23 Jim Meyering * m4/afs.m4: Add missing AC_MSG_RESULT. Reported by Bruno Haible. * m4/fsusage.m4: s/AC_MSG_CHECKING/AC_CHECKING/. Suggestion from Bruno Haible. 2000-06-23 Jim Meyering * lib/getpass.c: New file, from Bruno Haible. Required for BeOS. 2000-06-21 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add getpass. 2000-06-21 Jim Meyering * lib/Makefile.am (libfetish_a_SOURCES): Add getstr.c. (noinst_HEADERS): Add getstr.h. * lib/getline.c (getstr): Move into a separate file. * lib/getstr.c (getstr): New file, extracted from getline.c, with the following changes: new parameter, delim2; both delim[12] parameters have type `int', not `char'. The latter would lose with 8-bit delimiters. * lib/getstr.h: New file. 2000-06-21 Bruno Haible * lib/xgetcwd.c (xgetcwd): If the required pathname length is smaller than 1024, return a memory chunk of least possible size, instead of size PATH_MAX + 2. In the loop, increment the size proportionally. Use free/xmalloc instead of xrealloc to avoid copying for very long paths. 2000-06-21 Bruno Haible * lib/path-concat.c (path_concat): Don't access dir[-1] if dir is the empty string. 2000-06-21 Bruno Haible * lib/canon-host.c (canon_host): Use malloc and memcpy to copy an address, not strdup. Include and don't declare free(). 2000-06-19 Jim Meyering * lib/getloadavg.c [HAVE_NLIST_H] (NLIST_STRUCT): Define. 2000-06-18 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Remove mkdir. * m4/link-follow.m4 (jm_AC_FUNC_LINK_FOLLOWS_SYMLINK): Change the `checking whether...' message to be consistent with that of the lstat test. 2000-06-18 Jim Meyering * lib/mkdir.c: Remove file, due mainly to copyright incompatibility. Besides, these days every porting target provides a mkdir function. * lib/strnlen.c: Include memory.h, string.h, and/or strings.h as needed. (this snippet comes from src/system.h). 2000-06-16 Bruno Haible * m4/glibc21.m4 (jm_GLIBC21): Define GLIBC21 for Makefiles, not for C. 2000-06-15 Paul Eggert * lib/human.c (adjust_value): New function. (human_readable_inexact): Apply rounding style even when printing approximate values. 2000-06-14 Paul Eggert * lib/human.c (human_readable_inexact): Allow an input block size that is not a multiple of the output block size, and vice versa. Reported by Piergiorgio Sartor. 2000-06-14 Paul Eggert * lib/getdate.y (get_date): Apply relative times after time zone indicator, not before. Reported by Todd A. Jacobs. 2000-06-13 Jim Meyering * lib/Makefile.am (all-local): Depend on lstat.c and stat.c. * lib/xstat.in [!HAVE_DECL_FREE]: Declare free in lstat.c. 2000-06-12 Paul Eggert * lib/xstat.in: Include in lstat, to declare "free". 2000-06-12 Jim Meyering * m4/getloadavg.m4 (AM_FUNC_GETLOADAVG): Replace with AC_FUNC_GETLOADAVG from autoconf, and tweak the latter to accept an optional argument. * m4/jm-macros.m4: s/AM_FUNC_GETLOADAVG/AC_FUNC_GETLOADAVG/, and supply the optional argument, `lib'. 2000-06-08 Jim Meyering * m4/largefile.m4: Remove file (now that it's part of autoconf). 2000-06-04 Paul Eggert Rewrite largefile configuration so that we don't need to run getconf and don't need AC_CANONICAL_HOST. [I'm leaving the use of AC_CANONICAL_HOST in configure.in -- jmm] * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS, AC_SYS_LARGEFILE_SPACE_APPEND): Remove. (AC_SYS_LARGEFILE_TEST_INCLUDES): New macro. (AC_SYS_LARGEFILE_MACRO_VALUE): Change arguments from CODE-TO-SET-DEFAULT to VALUE, INCLUDES, FUNCTION-BODY. All uses changed. Instead of inspecting the output of getconf, try to compile the test program without and with the macro definition. (AC_SYS_LARGEFILE): Do not require AC_CANONICAL_HOST or check for getconf. Instead, check for the needed flags by compiling test programs. 2000-06-04 Paul Eggert * lib/strnlen.c: Include if HAVE_CONFIG_H. 2000-06-04 Jim Meyering * lib/getugroups.c (getugroups): Cast -1 to gid_t, for systems like SunOS 4.1.4 for which gid_t is an unsigned type. 2000-06-03 Jim Meyering * m4/prereq.m4 (jm_PREREQ_HUMAN): Use []-quoted list in AC_CHECK_DECLS, now that autoconf requires that. * m4/jm-glibc-io.m4: Add a kludge to make autoheader emit the required #undefs. E.g., #undef HAVE_DECL_FERROR_UNLOCKED. Use []-quoted list in AC_CHECK_DECLS, now that autoconf requires that. 2000-06-03 Jim Meyering * lib/strnlen.c [!HAVE_DECL_MEMCHR]: Declare memchr. 2000-06-03 Bruno Haible * m4/glibc21.m4: New file. * m4/jm-macros.m4 (jm_MACROS): Call jm_GLIBC21. 2000-06-03 Bruno Haible * lib/Makefile.am (install-exec-local): On systems with glibc-2.1 or newer, don't install charset.alias. * lib/config.charset: Change the Linux/glibc rules so they become empty on glibc-2.1 or newer. 2000-06-02 Jim Meyering * lib/mountlist.c: Back out last change. Instead, do this... * lib/mountlist.c (read_filesystem_list) [MOUNTED_VMOUNT]: Set the me_dummy member using the same `ignore'-testing code. * lib/mountlist.h (ME_DUMMY): Add `autofs' to the list of ignored fs_type strings. From Mark D. Roth. 2000-05-29 Jim Meyering * lib/mountlist.c (read_filesystem_list) [MOUNTED_VMOUNT]: Ignore mounts with the `ignore' attribute. Based on a patch from Mark D. Roth. 2000-05-28 Jim Meyering * m4/jm-macros.m4 (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Rename from jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. * m4/stat.m4: Likewise. * m4/lstat.m4: Likewise. * m4/lstat-slash.m4: Remove file (absorbed into autoconf). * m4/jm-macros.m4 (AC_FUNC_STRERROR_R): Rename from jm_FUNC_STRERROR_R. * m4/strerror_r.m4: Remove file (absorbed into autoconf). 2000-05-26 Jim Meyering * m4/uptime.m4: Use `$cross_compiling', not `$ac_cv_prog_cc_cross'. 2000-05-24 Jim Meyering * m4/prereq.m4: Use []-quoted list in AC_CHECK_MEMBERS, now that autoconf requires that. * m4/lib-check.m4: Likewise. * m4/jm-macros.m4: Likewise. * m4/strftime.m4: Likewise. * m4/check-decl.m4 (jm_CHECK_DECLS): Use []-quoted list in AC_CHECK_DECLS, now that autoconf requires that. 2000-05-22 Jim Meyering * m4/stat.m4: Require jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. * m4/lstat.m4: Likewise. 2000-05-22 Jim Meyering * lib/makepath.c: Remove old, now-unnecessary `#ifdef __MSDOS__' block. 2000-05-20 Jim Meyering * m4/prereq.m4 (jm_PREREQ_HUMAN): New macro. (jm_PREREQ): Use it. 2000-05-18 Jim Meyering * lib/hash.c (hash_rehash): Fix a nasty bug: copy the free entry list back, too, since it may have been modified by allocate_entry. (hash_delete): Rewrite to use neither the assignment operator nor the comma operator in an if-expression. 2000-05-15 Paul Eggert * lib/closeout.c: , , , (STDOUT_FILENO): Remove; no longer needed. "quotearg.h": Add include. (file_name): Do not bother to explicitly initialize to NULL; it's less efficient on some hosts. (close_stdout_status): Remove test as to whether stdout was already closed; it breaks for the case "echo x | sort >&-". Quote file name colons. Do not assume that _("write error") lacks format strings. 2000-05-15 Jim Meyering * lib/version-etc.c (version_etc_copyright): Update the copyright string used in all --version output. 2000-05-14 Jim Meyering * lib/closeout.c (close_stdout_set_file_name): New function. (close_stdout_status): Use new file-scoped global. Return right away if fstat says the stdout file descriptor is invalid. * lib/closeout.h (close_stdout_set_file_name): Declare. 2000-05-10 Jim Meyering * lib/closeout.c [default_exit_status]: New file-scoped variable. (close_stdout_set_status): New function. * lib/closeout.h (close_stdout_set_status): Declare. 2000-05-09 Jim Meyering * m4/gettext.m4: Rename this... * m4/libintl.m4: ...to this. 2000-05-08 Jim Meyering * lib/long-options.c: Don't include closeout.h. (parse_long_options): Don't call close_stdout for --version. 2000-05-06 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE): Define _XOPEN_SOURCE to be 500, instead of _GNU_SOURCE to be 1, to work around glibc 2.1.3 bug. This avoids a clash when files like regex.c define _GNU_SOURCE. 2000-05-06 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add atexit. (AC_REPLACE_FUNCS): Add strnlen. * m4/rmdir-errno.m4 (fetish_FUNC_RMDIR_NOTEMPTY): New macro and file. * m4/jm-macros.m4: Require fetish_FUNC_RMDIR_NOTEMPTY. * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): Save and restore LIBS around AC_SEARCH_LIBS call for nanosleep. (LIB_NANOSLEEP): Set and AC_SUBST. 2000-05-06 Jim Meyering * lib/strnlen.c: Undefine __strnlen and strnlen. [!weak_alias]: Define __strnlen to strnlen. * lib/atexit.c: New file, from libiberty. 2000-05-06 Jim Meyering * lib/closeout.c (close_stdout_status): Also check for errors on the stderr stream. 2000-05-05 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Save and restore LIBS around AC_SEARCH_LIBS call for clock_gettime. (LIB_CLOCK_GETTIME): Set and AC_SUBST. * m4/search-libs.m4: Update from autoconf. su doesn't work on Solaris 2.6. * m4/lib-check.m4: When checking for struct spwd.sp_pwdp, also include . Reported by Dragos Harabor. 2000-05-05 Bruno Haible * lib/localcharset.c (get_charset_aliases): Use malloc, realloc and memcpy instead of xmalloc, xrealloc, path_concat. (locale_charset): Treat empty environment variables as absent. (DIRECTORY_SEPARATOR, ISSLASH): New macros. 2000-05-04 Jim Meyering * lib/getopt.c: Update from glibc. * lib/obstack.c: Likewise. * lib/obstack.h: Likewise. * lib/regex.c: Likewise. NB: K&R compiler support is dropped for this file * lib/regex.h: Likewise. * lib/strndup.c: Likewise. * lib/strnlen.c: New file, from glibc. 2000-05-03 Jim Meyering * m4/check-decl.m4 (AC_CHECK_DECLS): Add strndup. 2000-05-02 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE): Define _GNU_SOURCE if this is needed to make ftello visible (e.g. glibc 2.1.3). Use compile-time test, rather than inspecting host and OS, to decide whether to define _LARGEFILE_SOURCE. 2000-05-01 Jim Meyering * m4/fsusage.m4: Use AC_MSG_CHECKING instead of obsolete AC_CHECKING. * m4/ls-mntd-fs.m4 (jm_LIST_MOUNTED_FILESYSTEMS): Add BeOS support. Based on a patch from Bruno Haible. 2000-05-01 Jim Meyering * lib/full-write.c (full_write): Remove `FIXME' part of comment. 2000-04-29 Jim Meyering * lib/path-concat.c: Declare strdup only if it's not defined. * lib/canon-host.c: Likewise. 2000-04-28 Jim Meyering * lib/rpmatch.c [HAVE_LIMITS_H]: Include limits.h before regex.h to avoid redefinition warning on some systems (HPUX). Otherwise, regex.h is included first, then limits.h is included by locale.h by libintl.h. From John David Anglin. 2000-04-25 Jim Meyering * lib/makepath.c (S_IRWXUGO): Define. (make_path): Always perform explicit chmod if MODE specifies any of the `special' permission bits. Prompted by a bug report against install from Mate Wierdl and Joost van Baal. 2000-04-18 Jim Meyering * m4/prereq.m4 (jm_PREREQ_GETPAGESIZE): New macro. (jm_PREREQ): Use it. 2000-04-18 Jim Meyering * lib/README: New file. * lib/getpagesize.h [!getpagesize && HAVE_OS_H && B_PAGE_SIZE]: Define getpagesize. For BeOS. Based on a patch from Bruno Haible. 2000-04-17 Jim Meyering Get it right :-) * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES) [_GNU_SOURCE]: Emit the actual #define via AH_VERBATIM. Don't need separate AC_DEFINE. Suggestion from Akim Demaille. 2000-04-17 Jim Meyering * lib/strftime.c (my_strftime) [strftime]: Declare strftime here, since the definition of it to rpl_strftime also defined-away the system's declaration. 2000-04-15 Jim Meyering Use `C' to denote so-called `contiguous' files, the same way that tar does. * lib/filemode.c (S_ISCTG) [!S_ISCTG && S_IFCTG]: Define. (ftypelet): Use S_ISCTG. From Michael Deutschmann. 2000-04-14 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES) [_GNU_SOURCE]: Use the one-arg form of AC_DEFINE. Otherwise, the #ifndef in AH_VERBATIM gets clobbered. 2000-04-14 Jim Meyering * lib/strftime.c (my_strftime) [#ifdef strftime]: Declare strftime. 2000-04-13 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES) [_GNU_SOURCE]: Use new AH_VERBATIM to insert required #ifndef into config.h.in. Suggestion from Akim Demaille. 2000-04-12 Jim Meyering * m4/getloadavg.m4 (AM_FUNC_GETLOADAVG): Use AC_CHECK_HEADERS, not `AC_CHECK_HEADER' to check for locale.h. Thanks to a report from Christian Krackowizer. More code moved from ../configure.in into (jm_CHECK_ALL_TYPES). * m4/jm-macros.m4 (_GNU_SOURCE): Define. (AC_SYS_LARGEFILE): Require. (AM_C_PROTOTYPES): Require. 2000-04-08 Jim Meyering * lib/Makefile.am (charset.alias): Use t-$@, not $@-t so the DOS 8.3 names don't conflict. Reported by Eli Zaretskii. 2000-04-07 Jim Meyering * lib/putenv.c: Move inclusion of errno.h so it follows that of sys/types.h, to work around system header problems on AIX 3.2.5. From Bruno Haible. 2000-04-07 Bruno Haible * lib/unicodeio.c (print_unicode_char): Avoid triggering Solaris iconv bug. Deal with the different error behavior of Irix iconv. 2000-04-05 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Don't use -n32 on IRIX if the installer said otherwise. 2000-04-05 Jim Meyering Portability tweaks required for ultrix4.3. * m4/check-decl.m4 [!HAVE_UTMPX_H] (headers): Include . (jm_CHECK_DECLS): Add getutent to the list of functions. (_jm_DECL_HEADERS): Add utmpx.h. From John David Anglin. * m4/strftime.m4: Back out the 2000-04-02 change. Instead of that change, simply undefine putenv in the test program. 2000-04-05 Jim Meyering Portability tweaks required for ultrix4.3. * lib/readutmp.h [HAVE_UTMPX_H && !HAVE_DECL_GETUTENT]: Declare getutent. * lib/readutmp.c: Include sys/types.h before sys/stat.h. * lib/canon-host.c: Declare strdup. * lib/path-concat.c: Likewise. From John David Anglin. 2000-04-04 Jim Meyering Be more DOS 8.3-friendly. * lib/ref-add.sin: Renamed from ref-add.sed.in. * lib/ref-del.sin: Renamed from ref-del.sed.in. * lib/Makefile.am: Reflect renaming. Reported by Eli Zaretskii. Use a temporary file name that won't clash with `charset.alias' in the DOS 8.3 name space. * lib/Makefile.am (charset_tmp): Define. (install-exec-local): Use $(charset_tmp) instead of $(charset_alias)-t. (uninstall-local): Likewise. Reported by Eli Zaretskii. 2000-04-03 Jim Meyering * m4/gettext.m4: Fix typo in comment. * m4/codeset.m4 (AC_CHECK_HEADERS): Add langinfo.h (moved here from textutils/configure.in). Suggestion from Paul Eggert. (AC_CHECK_FUNCS): Add nl_langinfo. (also from textutils/configure.in) 2000-04-02 Paul Eggert * m4/strftime.m4 (jm_FUNC_GNU_STRFTIME): Set TZ environment variable in the shell rather than using putenv, which isn't portable. This avoids the configure-time inter-test dependency on the potentially-renamed putenv function. 2000-03-30 Paul Eggert * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Include before checking struct stat.st_blksize, so that HAVE_STRUCT_STAT_ST_BLKSIZE is defined correctly. 2000-03-29 Paul Eggert * m4/strftime.m4 (_jm_STRFTIME_PREREQS): Check for strftime, since strftime.c uses HAVE_STRFTIME to decide whether to use the underlying strftime. 2000-03-29 Paul Eggert * lib/time/strftime.c (my_strftime): Make sure we call the system strftime, not ourselves, when invoking the underlying strftime. 2000-03-24 Jim Meyering * lib/Makefile.am (EXTRA_DIST): Add ref-add.sed.in and ref-del.sed.in. (charset_alias): Define. (install-exec-local): Factor out common code. (uninstall-local): Split lines longer than 80. (ref-add.sed, ref-del.sed): Remove rules... (do the following instead) (SUFFIXES): Define. (.sed.in.sed): New rule. Don't redirect directly to $@. (CLEANFILES): Add ref-add.sed and ref-del.sed. 2000-03-19 Bruno Haible * lib/config.charset: Output a line containing "Packages using this file". * lib/ref-add.sed.in, lib/ref-del.sed.in: New files. * lib/Makefile.am (install-exec-local, uninstall-local, ref-add.sed, ref-del.sed): New rules. 2000-03-17 Jim Meyering * lib/unicodeio.c (): Include only #if HAVE_STRING_H. Otherwise, include 2000-03-17 Bruno Haible * lib/unicodeio.c (utf8_wctomb): New function. (print_unicode_char): Pass the Unicode character to iconv in UTF-8 format instead of in UCS-4 with platform dependent endianness. 2000-03-10 Jim Meyering * m4/lib-check.m4: Look for getspnam in -lgen, too. From Marco Franzen. 2000-03-07 Paul Eggert * lib/savedir.c (savedir): Work even if directory size is negative; this can happen with some screwy NFS configurations. 2000-03-06 Jim Meyering * lib/localcharset.c (get_charset_aliases): Don't try to free file_name if it's NULL (because we ran out of memory). From Bruno Haible. 2000-03-05 Jim Meyering * lib/localcharset.c ("path-concat.h"): Include. (get_charset_aliases): Use path_concat instead of ANSI string concatenation. * lib/unicodeio.h (PARAMS): Define. Use it to guard prototype. 2000-03-04 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Require AC_C_VOLATILE, for lib/localcharset.c. 2000-03-04 Jim Meyering * lib/Makefile.am (install-exec-local): Create $(libdir) before installing into it. (uninstall-local): Uncomment this rule so `make distcheck' works once again. * lib/unicodeio.c (): Include it. (errno): Declare if not defined. * lib/localcharset.c: Add Bruno's comment justifying use of volatile. * lib/config.charset: New version, incorporating remarks from a linux i18n mailing list. From Bruno Haible. 2000-03-04 Bruno Haible * m4/codeset.m4: New file. * m4/iconv.m4: New file. * m4/jm-macros.m4 (jm_MACROS): Call jm_LANGINFO_CODESET and jm_ICONV. 2000-03-03 Jim Meyering * m4/regex.m4: Make sure re_compile_pattern accepts patterns like `{1'. 2000-03-02 Jim Meyering * m4/timespec.m4: Require AC_HEADER_TIME before the cache check so the messages come out on separate lines. * m4/jm-glibc-io.m4 (jm_FUNC_GLIBC_UNLOCKED_IO): Use AC_CHECK_DECLS, rather than jm_CHECK_DECLARATIONS. * m4/decl.m4: Remove now-unused file. * m4/check-decl.m4 (AC_CHECK_DECLS): Add getlogin, ttyname, and geteuid. 2000-03-02 Jim Meyering * lib/Makefile.am (EXTRA_DIST): Add config.charset. 2000-03-01 Jim Meyering * lib/localcharset.c: Guard some #includes with `#if HAVE_...'. * lib/unicodeio.c: Likewise. 2000-03-01 Bruno Haible * lib/config.charset: New file. * lib/localcharset.c: New file. * lib/unicodeio.h, lib/unicodeio.c: New files. * lib/Makefile.am (DEFS): Add -DLIBDIR=... (libfetish_a_SOURCES): Add localcharset.c and unicodeio.c. (noinst_HEADERS): Add unicodeio.h. (all-local, install-exec-local, charset.alias): New targets. 2000-02-28 Paul Eggert * lib/quotearg.c (ALERT_CHAR): New macro. (quotearg_buffer_restyled): Use it. 2000-02-27 Jim Meyering * m4/check-decl.m4: Add getenv to the list. 2000-02-27 Jim Meyering * lib/strtoumax.c: Fix typo in decl of strtoul: s/long long/long/. Guard declaration of strtoull also with `&& HAVE_UNSIGNED_LONG_LONG'. * lib/backupfile.c: Guard inclusion of stdlib.h with `#if HAVE_STDLIB_H', not `#if STDC_HEADERS'. Declare malloc if needed. * lib/backupfile.c: Use `#if !HAVE_DECL...' instead of `#ifndef HAVE_DECL..' now that autoconf always defines the HAVE_DECL_ symbols. * lib/human.c: Likewise. * lib/same.c: Likewise. * lib/strtoumax.c: Likewise. * lib/backupfile.c: Arrange for cpp to fail if the configure-time declaration check was not run. * lib/hash.c: Likewise. * lib/human.c: Likewise. * lib/same.c: Likewise. * lib/strtoumax.c: Likewise. * lib/userspec.c (parse_user_spec): If there is no `:' but there is a `.', then first look up the entire `.'-containing string as a login name. 2000-02-23 Jim Meyering * m4/check-decl.m4: Now that we have the new AC_CHECK_DECLS, use it in place of my hack. 2000-02-18 Paul Eggert * lib/getdate.y: Handle two-digit years with leading zeros correctly. (textint): New typedef. (parser_control): Member year changed from int to textint. All uses changed. (YYSTYPE): Removed; replaced by %union with int and textint members. (tDAY, tDAY_UNIT, tDAYZONE, tHOUR_UNIT, tID, tLOCAL_ZONE, tMERIDIAN, tMINUTE_UNIT, tMONTH, tMONTH_UNIT tSEC_UNIT, tSNUMBER, tUNUMBER, tYEAR_UNIT, tZONE, o_merid): Now of type . (tSNUMBER, tUNUMBER): Now of type . (date, number, to_year): Use width of number in digits, not its value, to determine whether it's a 2-digit year, or a 2-digit time. (yylex): Store number of digits of numeric tokens. Reported by John Kendall. (parser_control): Changed from struct parser_control to typedef (for consistency). All uses changed. (tID): Removed; not used. (yylex): Return '?' for unknown identifiers, rather than (unused) tID. 2000-02-14 Paul Eggert * lib/getpagesize.h (getpagesize): Port to VMS for Alpha; adapted from changes to grep getpagesize.h by Martin P.J. Zinser. 2000-02-12 Jim Meyering * lib/userspec.c (ISDIGIT): Define it. (isdigit): Remove definition. (is_number): Use ISDIGIT, not isdigit. : Include. (_ and N_): Define. (parse_user_spec): Mark translatable strings. 2000-02-10 Jim Meyering With these changes, nanosleep.[ch] are finally enough like the other lib/* replacement files to compile on a few more losing systems. * lib/nanosleep.h: Don't include config.h. Remove prototype from declaration of nanosleep. (PARAMS): Remove now-unneeded definition. * lib/nanosleep.c: #undef nanosleep. (rpl_nanosleep): Rename from nanosleep. 2000-02-10 Jim Meyering * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): Rename replacement function from gnu_nanosleep to rpl_nanosleep. 2000-02-09 Jim Meyering * m4/lib-check.m4 (jm_LIB_CHECK): Fix typo: check for sp_pwdp in struct spwd, rather than in struct passwd. Reported by Gaël Quéri. 2000-02-08 Akim Demaille * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Quote square brackets with `[' and `]' and remove uses of `changequote'. (AC_SYS_LARGEFILE_MACRO_VALUE): Likewise. (AC_SYS_LARGEFILE): Likewise. * m4/gettext.m4 (AM_GNU_GETTEXT): Likewise. * m4/strftime.m4 (jm_FUNC_GNU_STRFTIME): Remove now-unnecessary use of changequote. * m4/regex.m4 (jm_INCLUDED_REGEX): Likewise. * m4/readdir.m4 (jm_FUNC_READDIR): Likewise * m4/memcmp.m4 (jm_AC_FUNC_MEMCMP): Likewise, and add `int' for main. * m4/getloadavg.m4 (AM_FUNC_GETLOADAVG): Likewise. 2000-02-05 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Require most macros. Remove explicit use of AC_HEADER_TIME. It is required by jm_CHECK_TYPE_STRUCT_TIMESPEC. Using AC_HEADER_TIME and `AC_REQUIRE'ing jm_CHECK_TYPE_STRUCT_TIMESPEC provoked a but in autoconf whereby the expansion of the latter ended up preceding the expansion of its prerequisite, AC_HEADER_TIME. Reported by Volker Borchert. 2000-02-03 Jim Meyering * m4/prereq.m4 (jm_PREREQ_READUTMP): Check for utmpxname. 2000-02-03 Jim Meyering * lib/readutmp.c (read_utmp): Guard with `#ifdef UTMP_NAME_FUNCTION', rather than with `#if HAVE_UTMPNAME'. 2000-02-02 Jim Meyering * m4/prereq.m4 (jm_PREREQ_ADDEXT): Fix typo that resulted in no definition of HAVE_PATHCONF: s/AC_CHECK_FUNC/AC_CHECK_FUNCS/. Reported by Eli Zaretskii. 2000-02-01 Jim Meyering * lib/readutmp.h (UT_USER): Add parens. From Andreas Schwab. 2000-01-31 Jim Meyering * m4/check-decl.m4 (jm_CHECK_DECLS): Add nanosleep to the list of functions. Add the time.h and sys/time.h headers along with the AC_REQUIRE'ment of AC_HEADER_TIME. 2000-01-31 Jim Meyering * lib/nanosleep.h (nanosleep): Guard declaration with `#if ! HAVE_DECL_NANOSLEEP'. Without this, OFS gets a redeclaration error for rpl_nanosleep, due to the declaration in that vendor's sys/timers.h. Reported by Christian Krackowizer. * lib/quotearg.c (ISASCII): Add #undef and move definition to follow inclusion of wctype.h to work around Solaris 2.6 namespace pollution. (ISPRINT): Likewise. Reported by Tom Tromey. 2000-01-30 Jim Meyering * m4/lib-check.m4: Clean up some kludgy old shadow password tests. * m4/prereq.m4 (utmp_includes): Define. Check for ut_user and ut_name members in both struct utmpx and struct utmp. 2000-01-30 Jim Meyering * lib/readutmp.c (extract_trimmed_name): Use UT_USER instead of hard-coding uses of ->ut_name. The latter doesn't work with new Linux header files where only utmpx.ut_user is declared. * lib/readutmp.h (UT_USER): Define. 2000-01-29 Jim Meyering * m4/lib-check.m4: New file containing library-related checks from fileutils and sh-utils (textutils had none). 2000-01-28 Jim Meyering * m4/perl.m4: Change format of warning message to look more like that from the missing script. Suggestion from François Pinard. 2000-01-25 Jim Meyering * m4/timespec.m4: Require AC_HEADER_TIME, and include sys/time.h as well as time.h in the compile check. * m4/nanosleep.m4: Require AC_HEADER_TIME rather than simply using it. Fix typo in cross-compiling case: s/yes/no/. 2000-01-23 Jim Meyering * m4/jm-macros.m4: Move df-related tests here from fileutils/configure.in * m4/ls-mntd-fs.m4: s/list_mounted_fs/ac_list_mounted_fs/ (jm_LIST_MOUNTED_FILESYSTEMS): Take two parameters. * m4/fsusage.m4: New file. Extracted from fileutils/configure.in. s/space/ac_fsusage_space/. (jm_FILE_SYSTEM_USAGE): Take two parameters. * m4/ftruncate.m4: New file (derived from part of fileutils/configure.in). * m4/jm-macros.m4 (jm_FUNC_FTRUNCATE): AC_REQUIRE it. (jm_CHECK_ALL_TYPES): Require AC_HEADER_MAJOR and AC_HEADER_DIRENT. * m4/jm-macros.m4 (OPTIONAL_BIN_PROGS, OPTIONAL_BIN_ZCRIPTS, MAN): AC_SUBST these here, rather than just in sh-util/configure.in, so that the now-shared-by-fileutils-and-textutils lib/Makefile.am are all the same. (AM_FUNC_OBSTACK): Add (from fileutils/configure.in). (AC_CHECK_FUNCS): Merge all checks from fileutils, textutils, sh-utils. (AM_FUNC_STRTOD): Added (from textutils', sh-utils' configure.in). (AC_SUBST(POW_LIBM)): Likewise. (AC_SUBST(DF_PROG)): Moved from fileutils/configure.in. 2000-01-23 Jim Meyering * lib/Makefile.am (libfetish_a_SOURCES): Remove explicit mention of obstack.c. 2000-01-22 Jim Meyering * m4/jm-macros.m4: Call AC_PROG_CC_STDC just before AC_C_CONST. * m4/prereq.m4 (jm_PREREQ_QUOTEARG): Add wctype.h. * m4/jm-macros.m4 (AC_CHECK_HEADERS): Add checks from fileutils' configure.in (AC_CHECK_HEADERS): Likewise for sh-utils. (AC_CHECK_HEADERS): Likewise for textutils. Merge the three lists of headers. * m4/prereq.m4 (jm_PREREQ_ADDEXT): New macro. Parts moved here from fileutils' configure.in. * m4/decl.m4: Remove kludgy `test -z $ac_...AC_CHECK_HEADERS(...)' code. Moved tests into their own function (_jm_DECL_HEADERS) in check-decl.m4. * m4/check-decl.m4: Use #if rather than #ifdef. Add HAVE_DECL_STRTOUL and HAVE_DECL_STRTOULL. (jm_CHECK_DECLARATIONS): Add strtoul strtoull. (_jm_DECL_HEADERS): Define new function. (jm_CHECK_DECLARATIONS): Require it. 2000-01-22 Jim Meyering * lib/strtoumax.c: [! HAVE_DECL_STRTOUL]: Declare strtoul. [! HAVE_DECL_STRTOULL]: Declare strtoull. Required for some AIX systems. Reported by Christian Krackowizer. [TESTING] (main): New function. 1997-10-17 Eli Zaretskii * lib/dirname.c (dir_name): Support for DOS-style file names with drive letters. * lib/quotearg.c [HAVE_WCTYPE_H]: Include for decl of iswprint. * lib/strverscmp.c (ISDIGIT): Define. (strverscmp): Use ISDIGIT, not isdigit. 2000-01-19 Jim Meyering * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): Include , too. Use AC_HEADER_TIME. Volker Borchert reported that OpenBSD-2.3/sparc defines `struct timespec' in * m4/c-bs-a.m4: Remove uses of changequote altogether. Thanks to Akim for explaining. 2000-01-17 Paul Eggert * lib/nanosleep.c (nanosleep): Don't use SA_INTERRUPT to decide whether to call sigaction, as POSIX.1 doesn't require SA_INTERRUPT and some systems (e.g. Solaris 7) don't define it. Use SA_NOCLDSTOP instead; it's been part of POSIX.1 since day 1 (in 1988). 2000-01-17 Jim Meyering * lib/interlock: Remove unused file. Reported by François Pinard. 2000-01-16 Paul Eggert * lib/quotearg.c (quotearg_buffer_restyled): Do not quote alert, backslash, formfeed, and vertical tab unnecessarily in shell quoting style. 2000-01-16 Jim Meyering * m4/jm-macros.m4: Require jm_FUNC_GROUP_MEMBER, jm_FUNC_PUTENV, AM_FUNC_ERROR_AT_LINE, jm_FUNC_GNU_STRFTIME, jm_FUNC_MKTIME, jm_FUNC_GETGROUPS AC_FUNC_VPRINTF, AC_FUNC_ALLOCA, AM_FUNC_GETLOADAVG, and jm_SYS_PROC_UPTIME. 2000-01-16 Jim Meyering * m4/c-bs-a.m4: Use `changequote(<<,>>)', rather than `changequote(, )' because the latter didn't work. 2000-01-15 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add gethostname and getusershell. (AC_REPLACE_FUNCS): Add memcpy and memset. Add these, too: stime strcspn stpcpy strstr strtol strtoul. Add strpbrk. Add these: euidaccess memcmp mkdir rmdir rpmatch strndup strverscmp. 2000-01-12 Jim Meyering * m4/prereq.m4 (jm_PREREQ_CANON_HOST): New macro. (jm_PREREQ): Use it. (jm_PREREQ_READUTMP): New macro. (jm_PREREQ): Use it. 2000-01-11 Paul Eggert Quote multibyte characters correctly. * m4/c-bs-a.m4: New file. * m4/prereq.m4 (jm_PREREQ_QUOTEARG): New macro. (jm_PREREQ): Use it. 2000-01-11 Paul Eggert * m4/uintmax_t.m4: Port to autoconf 2.13. 2000-01-08 Jim Meyering * m4/strerror_r.m4 (jm_FUNC_STRERROR_R): New file/macro. * m4/jm-macros.m4 (jm_FUNC_STRERROR_R): Require it. 2000-01-04 Jim Meyering * m4/d-type.m4 (jm_CHECK_TYPE_STRUCT_DIRENT_D_TYPE): Rename from jm_STRUCT_DIRENT_D_TYPE. * m4/d-ino.m4 (jm_CHECK_TYPE_STRUCT_DIRENT_D_INO): Rename from jm_STRUCT_DIRENT_D_INO. * m4/utimbuf.m4 (jm_CHECK_TYPE_STRUCT_UTIMBUF): Rename from jm_STRUCT_UTIMBUF. * m4/jm-macros.m4: Reflect s/jm_STRUCT_/jm_CHECK_TYPE_STRUCT_/ renamings. * m4/utime.m4: Likewise. * m4/timespec.m4 (jm_CHECK_TYPE_STRUCT_TIMESPEC): New file, macro. * m4/jm-macros.m4 (jm_CHECK_TYPE_STRUCT_TIMESPEC): Require it. 2000-01-03 Paul Eggert * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): Search for nanosleep in -lrt (for Solaris 7) and in -lposix4 (for Solaris 2.5.1). 2000-01-02 Jim Meyering * m4/search-libs.m4: Escape `$' in $3 of dnl comment. I no longer remember if this is necessary. 1999-12-26 Jim Meyering * m4/jm-macros.m4: Use it here. * m4/nanosleep.m4 (jm_FUNC_NANOSLEEP): New file/macro. 1999-12-23 Jim Meyering * m4/jm-macros.m4: Check for clock_gettime (moved from fileutils/configure.in) Check for gettimeofday. 1999-12-20 Jim Meyering * m4/strftime.m4: Remove kludge, now that I'm using the fixed autoconf-2.14a-1999-12-20. 1999-12-19 Jim Meyering * m4/lstat-slash.m4: New file. * m4/jm-macros.m4: Use the new macro: jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. 1999-12-07 Jim Meyering * m4/perl.m4: Require that File::Compare be available, too. Too many systems seem to lack it. * m4/strftime.m4: Add checks for most of the cpp macros tested in GNU's strftime.c. Prompted by a patch from Paul Eggert. 1999-11-18 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Work around a problem with the QNX 4.25 shell, which doesn't propagate exit status of failed commands inside shell assignments. 1999-11-17 Jim Meyering * m4/gettext.m4: Use new AC_CONFIG_LINKS in place of AC_LINK_FILES. 1999-11-07 Jim Meyering * m4/getloadavg.m4: Add `, 1, [FIXME]' to each use of AC_DEFINE. 1999-11-06 Jim Meyering * m4/link-follow.m4 (jm_AC_FUNC_LINK_FOLLOWS_SYMLINK): New file/macro. * m4/jm-macros.m4 (jm_MACROS): Use it here. 1999-11-05 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Move some tests from configure.in of textutils, fileutils, and sh-utils into this one (shared between those packages) file. Use `AC_CHECK_MEMBERS((struct stat.st_blksize))' instead of deprecated AC_STRUCT_ST_BLKSIZE. 1999-11-03 Jim Meyering * m4/ssize_t.m4: Remove file. No longer needed since the new version of AC_CHECK_TYPE checks includes unistd.h. * m4/jm-macros.m4: Use straight `AC_CHECK_TYPE(ssize_t, int)'. Suggestion from Akim Demaille. 1999-10-30 Jim Meyering * m4/uintmax_t.m4: Require 2.14a. Remove backslash before backtick in m4-quoted string. * m4/ls-mntd-fs.m4: Likewise. * m4/jm-macros.m4: Likewise. Also, use AC_TYPE_SSIZE_T instead * m4/jm-winsz1.m4: Likewise. * m4/const.m4: Remove file, since the fix made it into the experimental version of autoconf. * m4/mktime.m4: Likewise. * m4/check-type.m4: Remove file, now that the latest version of AC_CHECK_TYPE takes a third arg to specify additional #includes. * m4/ssize_t.m4: New file, requires experimental version of autoconf. * m4/jm-macros.m4: Use new AC_TYPE_SSIZE_T instead of my hacked AC_CHECK_TYPE. 1999-10-04 Jim Meyering * m4/jm-macros.m4: Don't require autoconf-2.14.1. 1999-09-22 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE_FLAGS): Work around GCC 2.95.1 bug with HP-UX 10.20. 1999-09-17 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add strdup. Paul Nevai reported a link failure on a NeXT CUBE with NeXTSTEP 3.3 due to missing strdup (against sh-utils-2.0). 1999-08-29 Jim Meyering * m4/jm-macros.m4: Require jm_BISON. * m4/bison.m4: New file. 1999-08-17 Paul Eggert * m4/largefile.m4 (AC_SYS_LARGEFILE): Fix typo: missing comma in value for _FILE_OFFSET_BITS, which broke ports to HP-UX 10.20. 1999-08-05 Jim Meyering * m4/getline.m4: Rename test file from conftestdata to conftest.data to avoid conflicts with `conftest' on 8+3 filesystems. Suggestion from Eli Zaretskii. 1999-08-04 Jim Meyering * m4/jm-macros.m4: Move a 4-line block of code from the configure.in of fileutils and sh-utils (textutils's getline test was inadequate). (AM_FUNC_GETLINE): Run this test. (AC_CHECK_FUNCS): Check for getdelim. Reported by Bob Proulx. 1999-08-02 Jim Meyering * m4/jm-macros.m4: Add a comment. 1999-08-01 Paul Eggert * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Check whether defines strtoumax as a macro (and not as a function). 1999-08-01 Paul Eggert * m4/ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Make sure that we can shift, multiply and divide unsigned long long values; Ultrix cc can't do it. 1999-08-01 Paul Eggert * m4/mktime.m4: New file, which is a preview of what should appear in the next public autoconf release. 1999-08-01 Paul Eggert * m4/lfs.m4: Remove this file. * m4/largefile.m4: New file. It contains the old contents of lfs.m4, except that all names with prefix AC_LFS have been changed to use the prefix AC_SYS_LARGEFILE instead, to be compatible with future autoconf versions. Also, some minor m4 quoting problems have been fixed. 1999-08-01 Paul Eggert * m4/gettext.m4 (AM_WITH_NLS): Remove unnecessary lines. Fix typo: $nls_cv_header_intl was misspelled as $nsl_cv_header_intl. (AM_GNU_GETTEXT): Fix problem with brackets and m4 quoting, and simplify the shell code. 1999-08-01 Jim Meyering * m4/mktime.m4 (AC_FUNC_MKTIME): Undefine to avoid syntax errors from m4. 1999-07-20 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add memmove. 1999-07-15 Jim Meyering * m4/jm-macros.m4 (AC_CHECK_FUNCS): Check for getpagesize. 1999-05-22 Jim Meyering * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add memchr. 1999-05-20 Jim Meyering * m4/search-libs.m4 [AC_SEARCH_LIBS]: Quote name in undefine. Add a colon after each `then' in case $4 is empty. 1999-05-16 Jim Meyering * m4/search-libs.m4: New file to override autoconf's AC_SEARCH_LIBS. 1999-05-10 Jim Meyering * m4/jm-mktime.m4: Reflect renaming: AM_FUNC_MKTIME -> AC_FUNC_MKTIME. * m4/jm-macros.m4: Require 2.14.1, since we use newly-renamed AC_FUNC_MKTIME. 1999-05-10 Andreas Schwab * m4/jm-mktime.m4, putenv.m4: Fix typos in config.h comments. 1999-05-04 Paul Eggert * m4/lfs.m4 (AC_LFS): -n32, -o32, and -n64 should be in CFLAGS, not CPPFLAGS, so that linking works correctly in IRIX. 1999-04-30 Paul Eggert * m4/jm-macros.m4 (AC_REPLACE_FUNCS): Add dup2. 1999-04-20 Paul Eggert * m4/uintmax_t.m4 (jm_AC_TYPE_UINTMAX_T): Move unsigned long long check into new jm_AC_TYPE_UNSIGNED_LONG_LONG macro. * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): Require jm_AC_TYPE_UNSIGNED_LONG_LONG. * m4/ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): New file/macro. * m4/lfs.m4: Port to AIX and HP-UX. Support cross-compilation. 1999-04-20 Jim Meyering * m4/xstrtoumax.m4: Require jm_AC_TYPE_UNSIGNED_LONG_LONG. AC_REPLACE xstroull if necessary. From Paul Eggert. (AC_CHECK_FUNCS): Remove strtoull, strtoumax, strtouq. 1999-04-18 Jim Meyering * m4/xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): New file/macro. * m4/jm-macros.m4: Use it. 1999-04-06 Jim Meyering * m4/strftime.m4: Remove test for %f. 1999-03-29 Jim Meyering * m4/jm-macros.m4 (jm_CHECK_ALL_TYPES): New macro, contains the superset of the AC_TYPE_* checks in the textutils, fileutils, and sh-utils, plus AC_TYPE_PID_T. Paul Eggert suggested adding AC_TYPE_PID_T. 1999-03-28 Jim Meyering * m4/jm-macros.m4: Define GNU_PACKAGE here. Be sure to AC_SUBST it, once again, so that @GNU_PACKAGE@ is replaced e.g., in the *.sh files of the sh-utils. 1999-03-20 Jim Meyering * m4/jm-macros.m4: s/jm_WITH_REGEX/jm_INCLUDED_REGEX/. * m4/regex.m4 (jm_INCLUDED_REGEX): Rename from jm_WITH_REGEX. Don't depend on AM_GLIBC. Suggestions from Alain Magloire. 1999-03-19 Jim Meyering * m4/jm-winsz1.m4 (jm_WINSIZE_IN_PTEM): New macro. 1999-03-12 Jim Meyering * m4/jm-macros.m4: Use AC_FUNC_SETVBUF_REVERSED. 1999-03-07 Jim Meyering * m4/jm-glibc-io.m4: Use only those *_unlocked macros that are declared. 1999-02-17 Jim Meyering * m4/gettext.m4 (AM_GNU_GETTEXT): Do `changequote' around use of brackets in macro definition. From Eli Zaretskii and Alain Magloire. 1999-02-07 Jim Meyering * m4/group-member.m4: New file -- extracted from sh-utils' configure.in. 1999-02-05 Eli Zaretskii * m4/gettext.m4: Support DOS-style d:/foo/bar absolute file names. 1999-02-06 Jim Meyering * m4/chown.m4: Use `AC_SUBST(LIBOBJS)' since we set LIBOBJS. * m4/fnmatch.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/putenv.m4: Likewise. * m4/realloc.m4: Likewise. * m4/regex.m4: Likewise. * m4/stat.m4: Likewise. * m4/strftime.m4: Likewise. Suggestion from Alain Magloire. * m4/chown.m4: Use `.$ac_objext', not `.o'. * m4/fnmatch.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/getline.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/memcmp.m4: Likewise. * m4/putenv.m4: Likewise. * m4/realloc.m4: Likewise. * m4/regex.m4: Likewise. * m4/stat.m4: Likewise. * m4/strftime.m4: Likewise. Suggestion from Alain Magloire. * m4/jm-macros.m4: Actually invoke jm_WITH_REGEX now that it requires an argument. * m4/regex.m4: Add a run-time Test for proper operation of re_compile_pattern. 1999-01-31 Jim Meyering * m4/getloadavg.m4: Check for locale.h and the function, setlocale. 1999-01-30 Jim Meyering * m4/check-type.m4: Use 3-arg form of AC_DEFINE. * m4/jm-mktime.m4: Make this a wrapper around the official AM_FUNC_MKTIME rather than my private copy, now that the official one is up to date. * m4/mktime.m4: Remove file. * m4/getloadavg.m4: Use 3-arg form of AC_DEFINE. * m4/uptime.m4: Likewise. * m4/uintmax_t.m4: Likewise. 1999-01-28 Jim Meyering * m4/jm-macros.m4: Use jm_AFS. * m4/afs.m4: New file (from fileutils' configure.in). * m4/assert.m4: Use the 3-argument forms of AC_DEFINE* macros. * m4/chown.m4: Likewise. * m4/d-ino.m4: Likewise. * m4/d-type.m4: Likewise. * m4/fnmatch.m4: Likewise. * m4/getgroups.m4: Likewise. * m4/gettext.m4: Likewise. * m4/jm-mktime.m4: Likewise. * m4/jm-winsz2.m4: Likewise. * m4/lcmessage.m4: Likewise. * m4/ls-mntd-fs.m4: Likewise. * m4/malloc.m4: Likewise. * m4/memcmp.m4: Likewise. * m4/putenv.m4: Likewise. * m4/realloc.m4: Likewise. * m4/st_mtim.m4: Likewise. * m4/strftime.m4: Likewise. 1999-01-16 Jim Meyering * m4/jm-macros.m4 (ARGMATCH_DIE): Define. (ARGMATCH_DIE_DECL): Define. 1999-01-12 Jim Meyering * m4/Makefile.am.in: Rewrite to avoid using fmt. Reported by Lars Hecking. 1999-01-10 Jim Meyering * m4/fstypename.m4: Use the new 3-arg form of AC_DEFINE instead of my gross kludge. * m4/inttypes_h.m4: Likewise. * m4/lstat.m4: Likewise. * m4/malloc.m4: Likewise. * m4/readdir.m4: Likewise. * m4/realloc.m4: Likewise. * m4/st_dm_mode.m4: Likewise. * m4/stat.m4: Likewise. * m4/utimbuf.m4: Likewise. * m4/utimes.m4: Likewise. * m4/check-decl.m4: Use the new 3-arg form of AC_DEFINE instead of the AC_CHECK_FUNCS hack. Now, it's still a hack, but at least the comments in config.h.in are meaningful. * m4/jm-macros.m4: Require autoconf-2.13 here. * m4/regex.m4: By default, don't use the included regex.c on systems with glibc 2. Suggestion from Uli Drepper. 1999-01-02 Jim Meyering * m4/jm-macros.m4: Replace strcasecmp and strncasecmp. 1998-12-18 Jim Meyering * m4/Makefile.am.in (Makefile.am): Simplify rule. Based on a suggestion from Lars Hecking. 1998-11-16 Paul Eggert * m4/lfs.m4 (AC_LFS): Add support for HP-UX 10.20 and HP-UX 11. 1998-11-16 Jim Meyering * m4/lfs.m4: Double-quote the `uname...` expression. 1998-11-14 Jim Meyering * m4/lstat.m4: Correct comment. POSIX does not permit it to succeed. * m4/stat.m4: Likewise. 1998-11-03 Jim Meyering * m4/stat.m4: Rewrite to set HAVE_STAT_EMPTY_STRING_BUG. * m4/lstat.m4: Rewrite to set HAVE_LSTAT_EMPTY_STRING_BUG. 1998-10-18 Jim Meyering * m4/check-decl.m4 (jm_CHECK_DECL_LOCALTIME_R): Remove macro. 1998-10-17 Jim Meyering * m4/decl.m4 (jm_CHECK_DECLARATION): Don't hard-code which headers to include, though we still hard-code the `require'-like AC_CHECK_HEADERS calls for those previously hard-coded headers. Instead, take a new parameter. (jm_CHECK_DECLARATIONS): Reflect interface change. * m4/check-decl.m4 (jm_CHECK_DECLS): Likewise. (jm_CHECK_DECL_LOCALTIME_R): New macro. * m4/mktime.m4: Test for spring-forward gap before long-running test. 1998-10-14 Jim Meyering * m4/mktime.m4: Use the more portable "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver". From Paul Eggert. 1998-10-11 Jim Meyering * m4/mktime.m4 (jm_AM_FUNC_MKTIME): New file and macro. This adds a test for a recently added compatibility fix for mktime.c. * m4/jm-mktime.m4: Require jm_AM_FUNC_MKTIME, not AM_FUNC_MKTIME. 1998-09-27 Jim Meyering * m4/jm-macros.m4 (jm_MACROS): Require jm_FUNC_FNMATCH. * m4/fnmatch.m4 (jm_FUNC_FNMATCH): New file/macro. Extracted from ../configure.in, including a change from Gordon Matzigkeit to allow cross-compiling for the Hurd. * m4/glibc.m4: New file/macro to test for the GNU C Library versions 1 and 2. From Gordon Matzigkeit. Indent. 1998-09-21 Jim Meyering * m4/chown.m4: Declare locals: before, after. From Andries Brouwer. 1998-08-18 Paul Eggert Port nanosecond-resolution times to UnixWare 2.1.2 and pedantic Solaris 2.6. * m4/st_mtim.m4 (AC_STRUCT_ST_MTIM_NSEC): Renamed from AC_STRUCT_ST_MTIM. * m4/st_mtim.m4 (AC_STRUCT_ST_MTIM_NSEC): Generate name of ns member, instead of just 1 or undef. Allow for UnixWare 2.1.2 and Solaris 2.6 if in pedantic mode. 1998-08-15 Jim Meyering * m4/ssize_t.m4 (jm_TYPE_SSIZE_T): Remove file. * m4/check-type.m4: New file. Replacement for AC_CHECK_TYPE. * m4/jm-macros.m4: Use the new AC_CHECK_TYPE(ssize_t, int) instead of jm_TYPE_SSIZE_T. 1998-08-12 Jim Meyering * m4/st_dm_mode.m4: New file. From Johan Danielsson. 1998-08-02 Jim Meyering * m4/st_mtim.m4: Use hack to avoid having to put #undef HAVE_ST_MTIM in acconfig.h manually. 1998-07-31 Paul Eggert * m4/st_mtim.m4: New file. 1998-07-28 Jim Meyering * m4/utimes.m4: Undef stat. 1998-07-25 Jim Meyering * m4/utime.m4 (jm_FUNC_UTIME): New file and macro. * m4/utimes.m4 (jm_FUNC_UTIMES_NULL): New file and macro. 1998-07-09 Manfred Hollstein * m4/chown.m4 (jm_FUNC_CHOWN): Add a check to verify that the uid and gid actually remain unchanged. 1998-07-07 Jim Meyering * m4/jm-glibc-io.m4: Remove fclose_unlocked. 1998-07-04 Jim Meyering * m4/regex.m4: Use syscmd, ifelse, and sysval. Mainly as an exercise to prove that this macro can be used in packages without regex.c. 1998-07-04 Andreas Schwab * m4/gettext.m4 (AM_WITH_NLS): Remove intl/libintl.h if is to be used. 1998-07-03 Jim Meyering * m4/gettext.m4: Add -lintl if it's found to be necessary. * m4/gettext.m4: New file -- from gettext-0.10.35. * m4/lcmessage.m4: Likewise. * m4/progtest.m4: Likewise. * m4/regex.m4 (jm_WITH_REGEX): New file and macro. * m4/jm-macros.m4: Require the new macro. 1998-06-29 Jim Meyering * m4/fstypename.m4: Include sys/param.h. NetBSD 1.3.1 requires this for the definition of NGROUPS (used in a system header included by sys/mount.h). 1998-06-28 Jim Meyering * m4/ls-mntd-fs.m4: New file. * m4/fstypename.m4: New file. * m4/jm-macros.m4: Require the new macro. * m4/jm-glibc-io.m4: New file. 1998-05-19 Jim Meyering * m4/jm-macros.m4: Add jm_FUNC_LCHOWN. * m4/lchown.m4: New file. * m4/Makefile.am.in: New file. * m4/Makefile.am (Makefile.am): Depend on Makefile.am.in. 1998-05-14 Jim Meyering * m4/Makefile.am (EXTRA_DIST): Add them. * m4/jm-macros.m4: New file. * m4/utimbuf.m4: New file. 1998-05-12 Jim Meyering * m4/Makefile.am (EXTRA_DIST): Add isc-posix.m4. 1998-05-11 Jim Meyering * m4/isc-posix.m4: New file. 1998-05-10 Jim Meyering * m4/jm-mktime.m4: Use AM_FUNC_MKTIME, now that it's up to date. 1998-05-09 Jim Meyering * m4/Makefile.am (EXTRA_DIST): Add ssize_t.m4. (EXTRA_DIST): Remove mktime.m4, now that the new version is included with automake. * m4/ssize_t.m4: New file. * m4/mktime.m4: Remove file -- the new automake has this now. 1998-04-26 Jim Meyering * m4/assert.m4: New file. * m4/Makefile.am (EXTRA_DIST): Add assert.m4. 1998-04-05 Jim Meyering * m4/prereq.m4 (jm_PREREQ_REGEX): New macro. (jm_PREREQ): Use it here. 1998-03-23 Jim Meyering * m4/inttypes_h.m4: Kludges so I don't have to add HAVE_INTTYPES_H in acconfig.h. 1998-03-15 Jim Meyering * m4/prereq.m4: New file. * m4/error.m4: New file. * m4/Makefile.am (EXTRA_DIST): Add error.m4 and prereq.m4. 1998-02-07 Jim Meyering * m4/getline.m4: Don't set am_cv_func_working_getline before the cache-check for the same variable -- that defeated the purpose of the test; the test program was never run. This was a problem only on systems with losing getline functions -- HP-UX 10.20 is one. Reported by Bjorn Helgaas. 1998-02-06 Jim Meyering * m4/Makefile.am (EXTRA_DIST): Add perl.m4. 1998-01-10 Jim Meyering * m4/Makefile.am (EXTRA_DIST): Add const.m4. * m4/const.m4: New file. Use an initializer in this declaration typedef int charset[2]; const charset x; Reported by Bob Glickstein. 1997-12-21 Jim Meyering * m4/chown.m4: Fix reversed types on -1 args to chown. From Kaveh Ghazi. 1997-12-14 Jim Meyering * m4/check-decl.m4: s/DECLARATION_/DECL_/g. Add lseek and memchr. * m4/decl.m4: s/HAVE_DECLARATION_/HAVE_DECL_/g. T.E.Dickey said that some older preprocessors have a 20-character limit on names. 1997-11-30 Jim Meyering * m4/inttypes_h.m4: New file. * m4/uintmax_t.m4: New file. * m4/Makefile.am (EXTRA_DIST): Add inttypes_h.m4 and uintmax_t.m4. ----- Local Variables: coding: utf-8 End: Copyright (C) 1997-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. gnulib-20210822~d383792/DEPENDENCIES000066400000000000000000000133651411057217300160600ustar00rootroot00000000000000The following packages are needed by maintainers for using 'gnulib-tool'. In general, Gnulib prefers the latest stable version of each package, but in some cases it also supports older versions; this caters to commonly-used software distributions that may lag behind the latest stable package. Support for older versions is not guaranteed, though, and the version numbers in the following list may be incremented at any time. * A C runtime, compiler, linker, etc. + Mandatory. Using the platform's native 'cc' gives good portability exposure, but you can also use GCC 3.1 or newer. + GCC Homepage: https://gcc.gnu.org/ + Download: https://ftp.gnu.org/gnu/gcc/ * A 'make' utility. + Mandatory. Using the platform's native 'make' gives good portability exposure for in-tree builds, but VPATH builds require GNU Make 3.79.1 or newer. + GNU Make Homepage: https://www.gnu.org/software/make/ + Download: https://ftp.gnu.org/gnu/make/ * GNU M4 1.4.5 or newer. + Mandatory. 1.4.5 or newer is mandatory, but 1.4.9 or newer is recommended. If you want to build it from source, use the tarball from https://gitlab.com/gnu-m4/ci-distcheck/-/jobs/artifacts/master/raw/m4-snapshot.tar?job=check-optimized + Homepage: https://www.gnu.org/software/m4/ + Download: https://ftp.gnu.org/gnu/m4/ * Autoconf 2.64 or newer. + Mandatory. + Homepage: https://www.gnu.org/software/autoconf/ + Download: https://ftp.gnu.org/gnu/autoconf/ * Automake 1.11.1 or newer. + Mandatory. + Homepage: https://www.gnu.org/software/automake/ + Download: https://ftp.gnu.org/gnu/automake/ * A shell + Mandatory. Using the platform's native 'sh' gives good portability exposure, but you can also use Bash. + Homepage: https://www.gnu.org/software/bash/ + Download: https://ftp.gnu.org/gnu/bash/ * Core POSIX utilities, including: [ basename cat chgrp chmod chown cp dd echo expand expr false hostname install join kill ln ls md5sum mkdir mkfifo mknod mv printenv pwd rm rmdir sleep sort tee test touch true uname + Mandatory. Using the platform's native utilities gives good portability exposure, but you can also use GNU coreutils. + Homepage: https://www.gnu.org/software/coreutils/ + Download: https://ftp.gnu.org/gnu/coreutils/ * The comparison utilities 'cmp' and 'diff'. + Mandatory. Using the platform's native utilities gives good portability exposure, but you can also use GNU diffutils. + Homepage: https://www.gnu.org/software/diffutils/ + Download: https://ftp.gnu.org/gnu/diffutils/ * The patch utility 'patch'. + Mandatory if you use gnulib-local diffs. Using the platform's native utilities gives good portability exposure, but you can also use GNU patch. + Homepage: https://www.gnu.org/software/patch/ + Download: https://ftp.gnu.org/gnu/patch/ * Grep. + Mandatory. Using the platform's native grep gives good portability exposure, but you can also use GNU grep. + Homepage: https://www.gnu.org/software/grep/ + Download: https://ftp.gnu.org/gnu/grep/ * Awk. + Mandatory. Using the platform's native awk, mawk, or nawk gives good portability exposure, but you can also use GNU awk. + Homepage: https://www.gnu.org/software/gawk/ + Download: https://ftp.gnu.org/gnu/gawk/ * GNU gettext. + If your project wants to follow GNU Coding Standards: + Always use the newest available gettext release, see . + Use the 'gettext' module. + If your project cares more about ease of development on older platforms: + gettext 0.17 or newer. + Use the 'gettext-h' module. + Recommended. Needed if you use modules that use internationalization (many do). + Homepage: https://www.gnu.org/software/gettext/ + Download: https://ftp.gnu.org/gnu/gettext/ + Pre-built package name: - On Debian and Debian-based systems: gettext, - On Red Hat distributions: gettext. - Other: https://repology.org/project/gettext/versions * Bison 2.0 or newer. + Recommended. Needed if you use the 'parse-datetime' module. + Homepage: https://www.gnu.org/software/bison/ + Download: https://ftp.gnu.org/gnu/bison/ + Pre-built package name: - On Debian and Debian-based systems: bison, - On Red Hat distributions: bison. - Other: https://repology.org/project/bison/versions * GNU gperf 3.0.1 or newer. + 3.0.1 or newer is mandatory, but 3.1 or newer is recommended. Needed if you use the 'iconv_open' module. + Homepage: https://www.gnu.org/software/gperf/ + Download: https://ftp.gnu.org/gnu/gperf/ + Pre-built package name: - On Debian and Debian-based systems: gperf, - On Red Hat distributions: gperf. - Other: https://repology.org/project/gperf/versions * Texinfo 4.6 or newer. + Recommended. Needed if you use modules that include documentation. + Homepage: https://www.gnu.org/software/texinfo/ + Download: https://ftp.gnu.org/gnu/texinfo/ + Pre-built package name: - On Debian and Debian-based systems: texinfo, - On Red Hat distributions: texinfo. - Other: https://repology.org/project/texinfo/versions * GNU sed. + Recommended. Needed on platforms where the vendor's 'sed' program is too buggy. + Homepage: https://www.gnu.org/software/sed/ + Download: https://ftp.gnu.org/gnu/sed/ * GNU libtool 1.5.22 or newer. + Optional. Needed if you want to invoke gnulib-tool with option --libtool. libtool 2.2.x or newer is needed if you want to invoke gnulib-tool with options --create-testdir/--test and --libtool. + Homepage: https://www.gnu.org/software/libtool/ + Download: https://ftp.gnu.org/gnu/libtool/ gnulib-20210822~d383792/MODULES.html.sh000077500000000000000000002377521411057217300167310ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This 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 . # # Usage: MODULES.html.sh [--git-urls] > MODULES.html # Extend the PATH so that gnulib-tool is found. PATH=`dirname "$0"`:$PATH; export PATH POSIX2001_URL='https://pubs.opengroup.org/onlinepubs/009695399' POSIX2008_URL='https://pubs.opengroup.org/onlinepubs/9699919799' repo_url_prefix= repo_url_suffix= if test $# != 0; then case "$1" in --git-urls) # Generate URLs to the official gnulib git repository. repo_url_prefix='https://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=' repo_url_suffix='' ;; esac fi # For sed replacements: Escape the '&'. repo_url_suffix_repl=`echo "$repo_url_suffix" | sed -e 's,[&],\\\&,'` sed_lt='s,<,\<,g' sed_gt='s,>,\>,g' sed_escape_dot='s,\.,\\.,g' sed_escape_slash='s,/,\\/,g' trnl='\012' sed_alt1='s,$,\\|,' sed_alt2='s,^\\|,\\(,' sed_alt3='s,\\|\\|$,\\),' posix_headers=`echo ' aio arpa/inet assert complex cpio ctype dirent dlfcn errno fcntl fenv float fmtmsg fnmatch ftw glob grp iconv inttypes iso646 langinfo libgen limits locale math monetary mqueue ndbm net/if netdb netinet/in netinet/tcp nl_types poll pthread pwd regex sched search semaphore setjmp signal spawn stdarg stdbool stddef stdint stdio stdlib string strings stropts sys/ipc sys/mman sys/msg sys/resource sys/select sys/sem sys/shm sys/socket sys/stat sys/statvfs sys/time sys/times sys/types sys/uio sys/un sys/utsname sys/wait syslog tar termios tgmath time trace ulimit unistd utime utmpx wchar wctype wordexp ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` posix2001_headers=`echo ' sys/timeb ucontext ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` posix_functions=`echo ' FD_CLR FD_ISSET FD_SET FD_ZERO _Exit _exit _longjmp _setjmp _tolower _toupper a64l abort abs accept access acos acosf acosh acoshf acoshl acosl aio_cancel aio_error aio_fsync aio_read aio_return aio_suspend aio_write alarm alphasort asctime asctime_r asin asinf asinh asinhf asinhl asinl assert atan atan2 atan2f atan2l atanf atanh atanhf atanhl atanl atexit atof atoi atol atoll basename bind bsearch btowc cabs cabsf cabsl cacos cacosf cacosh cacoshf cacoshl cacosl calloc carg cargf cargl casin casinf casinh casinhf casinhl casinl catan catanf catanh catanhf catanhl catanl catclose catgets catopen cbrt cbrtf cbrtl ccos ccosf ccosh ccoshf ccoshl ccosl ceil ceilf ceill cexp cexpf cexpl cfgetispeed cfgetospeed cfsetispeed cfsetospeed chdir chmod chown cimag cimagf cimagl clearerr clock clock_getcpuclockid clock_getres clock_gettime clock_nanosleep clock_settime clog clogf clogl close closedir closelog confstr conj conjf conjl connect copysign copysignf copysignl cos cosf cosh coshf coshl cosl cpow cpowf cpowl cproj cprojf cprojl creal crealf creall creat crypt csin csinf csinh csinhf csinhl csinl csqrt csqrtf csqrtl ctan ctanf ctanh ctanhf ctanhl ctanl ctermid ctime ctime_r daylight dbm_clearerr dbm_close dbm_delete dbm_error dbm_fetch dbm_firstkey dbm_nextkey dbm_open dbm_store difftime dirfd dirname div dlclose dlerror dlopen dlsym dprintf drand48 dup dup2 duplocale encrypt endgrent endhostent endnetent endprotoent endpwent endservent endutxent environ erand48 erf erfc erfcf erfcl erff erfl errno execl execle execlp execv execve execvp exit exp exp2 exp2f exp2l expf expl expm1 expm1f expm1l fabs fabsf fabsl faccessat fattach fchdir fchmod fchmodat fchown fchownat fclose fcntl fdatasync fdetach fdim fdimf fdiml fdopen fdopendir feclearexcept fegetenv fegetexceptflag fegetround feholdexcept feof feraiseexcept ferror fesetenv fesetexceptflag fesetround fetestexcept feupdateenv fexecve fflush ffs fgetc fgetpos fgets fgetwc fgetws fileno flock flockfile floor floorf floorl fma fmaf fmal fmax fmaxf fmaxl fmemopen fmin fminf fminl fmod fmodf fmodl fmtmsg fnmatch fopen fork fpathconf fpclassify fprintf fputc fputs fputwc fputws fread free freeaddrinfo freelocale freopen frexp frexpf frexpl fscanf fseek fseeko fsetpos fstat fstatat fstatvfs fsync ftell ftello ftok ftruncate ftrylockfile ftw funlockfile futimens fwide fwprintf fwrite fwscanf gai_strerror getaddrinfo getc getc_unlocked getchar getchar_unlocked getcwd getdate getdate_err getdelim getegid getenv geteuid getgid getgrent getgrgid getgrgid_r getgrnam getgrnam_r getgroups gethostent gethostid gethostname getitimer getline getlogin getlogin_r getmsg getnameinfo getnetbyaddr getnetbyname getnetent getopt getpeername getpgid getpgrp getpid getpmsg getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwnam_r getpwuid getpwuid_r getrlimit getrusage gets getservbyname getservbyport getservent getsid getsockname getsockopt getsubopt gettimeofday getuid getutxent getutxid getutxline getwc getwchar glob globfree gmtime gmtime_r grantpt hcreate hdestroy hsearch htonl htons hypot hypotf hypotl iconv iconv_close iconv_open if_freenameindex if_indextoname if_nameindex if_nametoindex ilogb ilogbf ilogbl imaxabs imaxdiv inet_addr inet_ntoa inet_ntop inet_pton initstate insque ioctl isalnum isalnum_l isalpha isalpha_l isascii isastream isatty isblank isblank_l iscntrl iscntrl_l isdigit isdigit_l isfinite isgraph isgraph_l isgreater isgreaterequal isinf isless islessequal islessgreater islower islower_l isnan isnormal isprint isprint_l ispunct ispunct_l isspace isspace_l isunordered isupper isupper_l iswalnum iswalnum_l iswalpha iswalpha_l iswblank iswblank_l iswcntrl iswcntrl_l iswctype iswctype_l iswdigit iswdigit_l iswgraph iswgraph_l iswlower iswlower_l iswprint iswprint_l iswpunct iswpunct_l iswspace iswspace_l iswupper iswupper_l iswxdigit iswxdigit_l isxdigit isxdigit_l j0 j1 jn jrand48 kill killpg l64a labs lchown lcong48 ldexp ldexpf ldexpl ldiv lfind lgamma lgammaf lgammal link linkat lio_listio listen llabs lldiv llrint llrintf llrintl llround llroundf llroundl localeconv localtime localtime_r lockf log log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl logf logl longjmp lrand48 lrint lrintf lrintl lround lroundf lroundl lsearch lseek lstat malloc mblen mbrlen mbrtowc mbsinit mbsnrtowcs mbsrtowcs mbstowcs mbtowc memccpy memchr memcmp memcpy memmove memset mkdir mkdirat mkdtemp mkfifo mkfifoat mknod mknodat mkstemp mktime mlock mlockall mmap modf modff modfl mprotect mq_close mq_getattr mq_notify mq_open mq_receive mq_send mq_setattr mq_timedreceive mq_timedsend mq_unlink mrand48 msgctl msgget msgrcv msgsnd msync munlock munlockall munmap nan nanf nanl nanosleep nearbyint nearbyintf nearbyintl newlocale nextafter nextafterf nextafterl nexttoward nexttowardf nexttowardl nftw nice nl_langinfo nl_langinfo_l nrand48 ntohl ntohs open open_memstream open_wmemstream openat opendir openlog optarg opterr optind optopt pathconf pause pclose perror pipe poll popen posix_fadvise posix_fallocate posix_madvise posix_mem_offset posix_memalign posix_openpt posix_spawn posix_spawn_file_actions_addclose posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addopen posix_spawn_file_actions_destroy posix_spawn_file_actions_init posix_spawnattr_destroy posix_spawnattr_getflags posix_spawnattr_getpgroup posix_spawnattr_getschedparam posix_spawnattr_getschedpolicy posix_spawnattr_getsigdefault posix_spawnattr_getsigmask posix_spawnattr_init posix_spawnattr_setflags posix_spawnattr_setpgroup posix_spawnattr_setschedparam posix_spawnattr_setschedpolicy posix_spawnattr_setsigdefault posix_spawnattr_setsigmask posix_spawnp posix_trace_attr_destroy posix_trace_attr_getclockres posix_trace_attr_getcreatetime posix_trace_attr_getgenversion posix_trace_attr_getinherited posix_trace_attr_getlogfullpolicy posix_trace_attr_getlogsize posix_trace_attr_getmaxdatasize posix_trace_attr_getmaxsystemeventsize posix_trace_attr_getmaxusereventsize posix_trace_attr_getname posix_trace_attr_getstreamfullpolicy posix_trace_attr_getstreamsize posix_trace_attr_init posix_trace_attr_setinherited posix_trace_attr_setlogfullpolicy posix_trace_attr_setlogsize posix_trace_attr_setmaxdatasize posix_trace_attr_setname posix_trace_attr_setstreamfullpolicy posix_trace_attr_setstreamsize posix_trace_clear posix_trace_close posix_trace_create posix_trace_create_withlog posix_trace_event posix_trace_eventid_equal posix_trace_eventid_get_name posix_trace_eventid_open posix_trace_eventset_add posix_trace_eventset_del posix_trace_eventset_empty posix_trace_eventset_fill posix_trace_eventset_ismember posix_trace_eventtypelist_getnext_id posix_trace_eventtypelist_rewind posix_trace_flush posix_trace_get_attr posix_trace_get_filter posix_trace_get_status posix_trace_getnext_event posix_trace_open posix_trace_rewind posix_trace_set_filter posix_trace_shutdown posix_trace_start posix_trace_stop posix_trace_timedgetnext_event posix_trace_trid_eventid_open posix_trace_trygetnext_event posix_typed_mem_get_info posix_typed_mem_open pow powf powl pread printf pselect psiginfo psignal pthread_atfork pthread_attr_destroy pthread_attr_getdetachstate pthread_attr_getguardsize pthread_attr_getinheritsched pthread_attr_getschedparam pthread_attr_getschedpolicy pthread_attr_getscope pthread_attr_getstack pthread_attr_getstacksize pthread_attr_init pthread_attr_setdetachstate pthread_attr_setguardsize pthread_attr_setinheritsched pthread_attr_setschedparam pthread_attr_setschedpolicy pthread_attr_setscope pthread_attr_setstack pthread_attr_setstacksize pthread_barrier_destroy pthread_barrier_init pthread_barrier_wait pthread_barrierattr_destroy pthread_barrierattr_getpshared pthread_barrierattr_init pthread_barrierattr_setpshared pthread_cancel pthread_cleanup_pop pthread_cleanup_push pthread_cond_broadcast pthread_cond_destroy pthread_cond_init pthread_cond_signal pthread_cond_timedwait pthread_cond_wait pthread_condattr_destroy pthread_condattr_getclock pthread_condattr_getpshared pthread_condattr_init pthread_condattr_setclock pthread_condattr_setpshared pthread_create pthread_detach pthread_equal pthread_exit pthread_getconcurrency pthread_getcpuclockid pthread_getschedparam pthread_getspecific pthread_join pthread_key_create pthread_key_delete pthread_kill pthread_mutex_consistent pthread_mutex_destroy pthread_mutex_getprioceiling pthread_mutex_init pthread_mutex_lock pthread_mutex_setprioceiling pthread_mutex_timedlock pthread_mutex_trylock pthread_mutex_unlock pthread_mutexattr_destroy pthread_mutexattr_getprioceiling pthread_mutexattr_getprotocol pthread_mutexattr_getpshared pthread_mutexattr_getrobust pthread_mutexattr_gettype pthread_mutexattr_init pthread_mutexattr_setprioceiling pthread_mutexattr_setprotocol pthread_mutexattr_setpshared pthread_mutexattr_setrobust pthread_mutexattr_settype pthread_once pthread_rwlock_destroy pthread_rwlock_init pthread_rwlock_rdlock pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock pthread_rwlock_tryrdlock pthread_rwlock_trywrlock pthread_rwlock_unlock pthread_rwlock_wrlock pthread_rwlockattr_destroy pthread_rwlockattr_getpshared pthread_rwlockattr_init pthread_rwlockattr_setpshared pthread_self pthread_setcancelstate pthread_setcanceltype pthread_setconcurrency pthread_setschedparam pthread_setschedprio pthread_setspecific pthread_sigmask pthread_spin_destroy pthread_spin_init pthread_spin_lock pthread_spin_trylock pthread_spin_unlock pthread_testcancel ptsname putc putc_unlocked putchar putchar_unlocked putenv putmsg putpmsg puts pututxline putwc putwchar pwrite qsort raise rand rand_r random read readdir readdir_r readlink readlinkat readv realloc realpath recv recvfrom recvmsg regcomp regerror regexec regfree remainder remainderf remainderl remove remque remquo remquof remquol rename renameat rewind rewinddir rint rintf rintl rmdir round roundf roundl scalbln scalblnf scalblnl scalbn scalbnf scalbnl scandir scanf sched_get_priority_max sched_get_priority_min sched_getparam sched_getscheduler sched_rr_get_interval sched_setparam sched_setscheduler sched_yield seed48 seekdir select sem_close sem_destroy sem_getvalue sem_init sem_open sem_post sem_timedwait sem_trywait sem_unlink sem_wait semctl semget semop send sendmsg sendto setbuf setegid setenv seteuid setgid setgrent sethostent setitimer setjmp setkey setlocale setlogmask setnetent setpgid setpgrp setpriority setprotoent setpwent setregid setreuid setrlimit setservent setsid setsockopt setstate setuid setutxent setvbuf shm_open shm_unlink shmat shmctl shmdt shmget shutdown sigaction sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore siginterrupt sigismember siglongjmp signal signbit signgam sigpause sigpending sigprocmask sigqueue sigrelse sigset sigsetjmp sigsuspend sigtimedwait sigwait sigwaitinfo sin sinf sinh sinhf sinhl sinl sleep snprintf sockatmark socket socketpair sprintf sqrt sqrtf sqrtl srand srand48 srandom sscanf stat statvfs stderr stdin stdout stpcpy stpncpy strcasecmp strcasecmp_l strcat strchr strcmp strcoll strcoll_l strcpy strcspn strdup strerror strerror_l strerror_r strfmon strfmon_l strftime strftime_l strlen strncasecmp strncasecmp_l strncat strncmp strncpy strndup strnlen strpbrk strptime strrchr strsignal strspn strstr strtod strtof strtoimax strtok strtok_r strtol strtold strtoll strtoul strtoull strtoumax strxfrm strxfrm_l swab swprintf swscanf symlink symlinkat sync sysconf syslog system tan tanf tanh tanhf tanhl tanl tcdrain tcflow tcflush tcgetattr tcgetpgrp tcgetsid tcsendbreak tcsetattr tcsetpgrp tdelete telldir tempnam tfind tgamma tgammaf tgammal time timer_create timer_delete timer_getoverrun timer_gettime timer_settime times timezone tmpfile tmpnam toascii tolower tolower_l toupper toupper_l towctrans towctrans_l towlower towlower_l towupper towupper_l trunc truncate truncf truncl tsearch ttyname ttyname_r twalk tzname tzset ulimit umask uname ungetc ungetwc unlink unlinkat unlockpt unsetenv uselocale utime utimensat utimes va_arg va_copy va_end va_start vdprintf vfprintf vfscanf vfwprintf vfwscanf vprintf vscanf vsnprintf vsprintf vsscanf vswprintf vswscanf vwprintf vwscanf wait waitid waitpid wcpcpy wcpncpy wcrtomb wcscasecmp wcscasecmp_l wcscat wcschr wcscmp wcscoll wcscoll_l wcscpy wcscspn wcsdup wcsftime wcslen wcsncasecmp wcsncasecmp_l wcsncat wcsncmp wcsncpy wcsnlen wcsnrtombs wcspbrk wcsrchr wcsrtombs wcsspn wcsstr wcstod wcstof wcstoimax wcstok wcstol wcstold wcstoll wcstombs wcstoul wcstoull wcstoumax wcswidth wcsxfrm wcsxfrm_l wctob wctomb wctrans wctrans_l wctype wctype_l wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wordexp wordfree wprintf write writev wscanf y0 y1 yn ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` posix2001_functions=`echo ' bcmp bcopy bsd_signal bzero ecvt fcvt ftime gcvt getcontext gethostbyaddr gethostbyname getwd h_errno index makecontext mktemp pread pthread_attr_getstackaddr pthread_attr_setstackaddr rindex scalb setcontext swapcontext ualarm usleep vfork wcswcs ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` indent="" seen_modules= seen_files= # func_exit STATUS # exit with status func_exit () { (exit $1); exit $1 } # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/MDXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/MD$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 func_exit 1 } } # func_append var value # appends the given value to the shell variable var. if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then # Use bash's += operator. It reduces complexity of appending repeatedly to # a single variable from O(n^2) to O(n). func_append () { eval "$1+=\"\$2\"" } else func_append () { eval "$1=\"\$$1\$2\"" } fi # func_echo line # outputs line with indentation. func_echo () { echo "${indent}$*" } # func_indent # increases the indentation. func_indent () { indent="$indent " } # func_unindent # decreases the indentation. func_unindent () { indent=`echo "$indent" | sed -e 's/ $//'` } # func_begin tag [attribute...] # opens a HTML tag. func_begin () { func_echo "<$*>" func_indent } # func_end tag # closes a HTML tag. func_end () { func_unindent func_echo "" } # func_wrap tag [attribute...] # encloses $element in a HTML tag, without line breaks. func_wrap () { element="<$*>${element}" } # func_section_wrap sectiontag # encloses $element in a HTML tag referring to the given tag. func_section_wrap () { if test -n "$in_toc"; then func_wrap A "HREF=\"#$1\"" else func_wrap A "NAME=\"$1\"" fi } # func_begin_table func_begin_table () { func_begin TABLE if test -z "$in_toc"; then func_begin TR func_echo "modules/" func_echo "lib/" func_echo "lib/" func_echo "m4/" func_echo " " func_end TR func_begin TR func_echo "Module" func_echo "Header" func_echo "Implementation" func_echo "Autoconf macro" func_echo "Depends on" func_end TR fi } # func_module module func_module () { sed_remove_trailing_empty_line='${ /^$/d }' if test -n "$in_toc"; then func_begin TR "WIDTH=\"100%\"" element=''$1'' func_echo "$element" # Rendering the description: # - Change the symbol() syntax as suitable for documentation, removing the # parentheses (as per GNU standards, section "GNU Manuals"). # - Flag the remaining symbol() constructs as errors. # - Change 'xxx' to xxx. sed_extract_element=' '$sed_lt' '$sed_gt' '$sed_remove_trailing_empty_line' s,^, , s,$, , s,\([^a-zA-Z_]\)'$posix_functions'() \(function\|macro\),\1\2 \3,g s,\([^a-zA-Z_]\)'$posix_functions' \(function\|macro\),\1\2 \3,g s,\([^a-zA-Z_]\)'$posix_functions'(),\1\2 what?? If you mean a function\, please say so.,g s,\([^a-zA-Z_]\)'$posix2001_functions'() \(function\|macro\),\1\2 \3,g s,\([^a-zA-Z_]\)'$posix2001_functions' \(function\|macro\),\1\2 \3,g s,\([^a-zA-Z_]\)'$posix2001_functions'(),\1\2 what?? If you mean a function\, please say so.,g s,\([^a-zA-Z_]\)\([a-zA-Z_][a-zA-Z0-9_]*\)() \(function\|macro\),\1\2 \3,g s,\([^a-zA-Z_]\)\([a-zA-Z_][a-zA-Z0-9_]*\)(),\1\2 what?? If you mean a function\, please say so.,g s, '"'"'\([a-zA-Z0-9_ -]*\)'"'"'\([^a-zA-Z0-9_]\), \1\2,g s,^ ,, s, $,, ' element=`gnulib-tool --extract-description $1 \ | LC_ALL=C sed -e "$sed_extract_element"` func_echo "$element" func_end TR else func_begin TR element=''$1'' func_echo "$element" includes=`gnulib-tool --extract-include-directive $1` files=`gnulib-tool --extract-filelist $1 \ | grep -v '^m4/gnulib-common\.m4$'` sed_extract_element=' '$sed_lt' '$sed_gt' '$sed_remove_trailing_empty_line' s,^#include "\(.*\)"$,#include "\1", s,^#include <'$posix_headers'\.h>$,#include \<\1.h\>, s,,, s,^#include <'$posix2001_headers'\.h>$,#include \<\1.h\>, s/$/
/ ' element=`echo "$includes" \ | LC_ALL=C sed -e "$sed_extract_element" | tr -d "$trnl" \ | sed -e 's/
$//'` test -n "$element" || element='---' func_echo "$element" sed_choose_unconditional_nonstandard_include='s,^#include "\(.*\)"$,\1,p' includefile=`echo "$includes" \ | sed -n -e "$sed_choose_unconditional_nonstandard_include" \ | sed -e "$sed_escape_dot" | tr -d "$trnl"` sed_choose_lib_files='s,^lib/\(.*\)$,\1,p' sed_extract_include=' \|^'"$includefile"'$|d s,^\(.*\)$,\1, s/$/
/ ' element=`echo "$files" \ | sed -e '/^$/d' \ | sed -n -e "$sed_choose_lib_files" \ | sed -e "$sed_extract_include" \ | tr -d "$trnl" | sed -e 's/
$//'` test -n "$element" || element='---' func_echo "$element" sed_choose_m4_files='s,^m4/\(.*\)$,\1,p' sed_extract_repo_url=' /^onceonly/d s,^\(.*\)$,\1, ' element=`(echo "$files" \ | sed -e "$sed_remove_trailing_empty_line" \ | sed -n -e "$sed_choose_m4_files" \ | sed -e "$sed_extract_repo_url"; \ gnulib-tool --extract-autoconf-snippet $1 \ | sed -e "$sed_remove_trailing_empty_line") \ | sed -e 's/$/
/' | tr -d "$trnl" | sed -e 's/
$//'` test -n "$element" || element='---' func_echo "$element" element=`gnulib-tool --extract-dependencies $1 \ | sed -e "$sed_remove_trailing_empty_line" \ -e 's/$/
/' | tr -d "$trnl" | sed -e 's/
$//'` test -n "$element" || element='---' func_echo "$element" func_end TR func_append seen_modules " $1" func_append seen_files " $files" fi } # func_end_table func_end_table () { func_end TABLE } # func_all_modules func_all_modules () { element="Support for obsolete systems lacking ANSI C 89" func_section_wrap ansic_sup_obsolete func_wrap H2 func_echo "$element" func_begin_table func_module stdlib func_module strtol func_module strtoul func_module memcmp func_module memcpy func_module memmove func_module memset func_module strcspn func_module strpbrk func_end_table func_echo 'These modules are not listed among dependencies below, for simplicity.' func_echo 'If your package requires portability to old, obsolete systems, you need to list these modules explicitly among the modules to import through gnulib-tool.' element="Support for systems lacking ANSI C 89" func_section_wrap ansic_sup func_wrap H2 func_echo "$element" func_begin_table func_module atexit func_module ctime func_module localtime func_module strtod func_module strerror func_module strerror-override func_module mktime func_end_table element="Enhancements for ANSI C 89 functions" func_section_wrap ansic_enh func_wrap H2 func_echo "$element" element="Diagnostics " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_assert_diagnostics func_wrap H3 func_echo "$element" func_begin_table func_module assert func_module assure func_module verify func_end_table element="Mathematics " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_math func_wrap H3 func_echo "$element" func_begin_table func_module fpieee func_end_table element="Input/output " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_stdio func_wrap H3 func_echo "$element" func_begin_table func_module fflush func_module fseterr func_module tmpfile func_end_table element="Memory management functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_stdlib_memory func_wrap H3 func_echo "$element" func_begin_table func_module calloc-gnu func_module eealloc func_module free-posix func_module malloc-gnu func_module realloc-gnu func_module reallocarray func_module pagealign_alloc func_end_table element="Sorting functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_stdlib_sorting func_wrap H3 func_echo "$element" func_begin_table func_module array-mergesort func_module mpsort func_module qsort_r func_end_table element="Date and time " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_enh_time_datetime func_wrap H3 func_echo "$element" func_begin_table func_module fprintftime func_module nstrftime func_module strftime-fixes func_module time_rz func_module year2038 func_end_table element="Extra functions based on ANSI C 89" func_section_wrap ansic_ext func_wrap H2 func_echo "$element" element="Memory management functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_stdlib_memory func_wrap H3 func_echo "$element" func_begin_table func_module xsize func_module xalloc func_module xalloc-die func_module alloca func_module alloca-opt func_module malloca func_module xmalloca func_module xmemdup0 func_module safe-alloc func_end_table element="Integer arithmetic functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_stdlib_arith func_wrap H3 func_echo "$element" func_begin_table func_module count-leading-zeros func_module count-one-bits func_module count-trailing-zeros func_module ffs func_module ffsl func_module ffsll func_module gcd func_module minmax func_end_table element="Environment variables " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_stdlib_env func_wrap H3 func_echo "$element" func_begin_table func_module putenv func_module secure_getenv func_module setenv func_module unsetenv func_module xsetenv func_end_table element="Character handling " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_ctype func_wrap H3 func_echo "$element" func_begin_table func_module c-ctype func_end_table element="String handling " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_string func_wrap H3 func_echo "$element" func_begin_table func_module bcopy func_module explicit_bzero func_module memchr func_module memchr2 func_module memcmp2 func_module memmem func_module memmem-simple func_module mempcpy func_module memrchr func_module amemxfrm func_module rawmemchr func_module stpcpy func_module stpncpy func_module c-strcase func_module strcase func_module c-strcaseeq func_module c-strcasestr func_module strcasestr func_module strcasestr-simple func_module strchrnul func_module streq func_module strerror_r-posix func_module strnlen func_module strnlen1 func_module strndup func_module strsep func_module strstr func_module strstr-simple func_module c-strstr func_module astrxfrm func_module trim func_module fstrcmp func_module xstrndup func_end_table element="Mathematics " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_math func_wrap H3 func_echo "$element" func_begin_table func_module printf-frexp func_end_table element="Numeric conversion functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_stdlib_conv func_wrap H3 func_echo "$element" func_begin_table func_module c-strtod func_module c-strtold func_module xstrtod func_module xstrtol func_module xstrtol-error func_module xstrtoll func_module xstrtold func_end_table element="Date and time " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_time_datetime func_wrap H3 func_echo "$element" func_begin_table func_module mktime-internal func_module parse-datetime func_module timegm func_module tzset func_end_table element="Input/Output " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_stdio func_wrap H3 func_echo "$element" func_begin_table func_module unlocked-io func_module fwriteerror func_module vasnprintf func_module vasprintf func_module xprintf func_module xvasprintf func_end_table element="Signal handling " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_signal func_wrap H3 func_echo "$element" func_begin_table func_module fatal-signal func_module raise func_module strsignal func_end_table element="Command-line arguments" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_argv func_wrap H3 func_echo "$element" func_begin_table func_module argmatch func_module argv-iter func_module version-etc func_module version-etc-fsf func_module long-options func_end_table element="Container data structures" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_container func_wrap H3 func_echo "$element" func_begin_table func_module list func_module xlist func_module array-list func_module carray-list func_module linked-list func_module avltree-list func_module rbtree-list func_module linkedhash-list func_module avltreehash-list func_module rbtreehash-list func_module sublist func_module xsublist func_module oset func_module xoset func_module array-oset func_module avltree-oset func_module rbtree-oset func_end_table element="Cryptographic computations (low-level)" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_crypto func_wrap H3 func_echo "$element" func_begin_table func_module crypto/arcfour func_module crypto/arctwo func_module crypto/des func_module crypto/hmac-md5 func_module crypto/hmac-sha1 func_module crypto/md2 func_module crypto/md4 func_module crypto/md5 func_module crypto/rijndael func_module crypto/sha1 func_module crypto/sha256 func_module crypto/sha512 func_module crypto/sm3 func_end_table element="Cryptographic computations (high-level)" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_crypto2 func_wrap H3 func_echo "$element" func_begin_table func_module crypto/gc func_module crypto/gc-arcfour func_module crypto/gc-arctwo func_module crypto/gc-camellia func_module crypto/gc-des func_module crypto/gc-hmac-md5 func_module crypto/gc-hmac-sha1 func_module crypto/gc-md2 func_module crypto/gc-md4 func_module crypto/gc-md5 func_module crypto/gc-pbkdf2 func_module crypto/gc-pbkdf2-sha1 func_module crypto/gc-random func_module crypto/gc-rijndael func_module crypto/gc-sha1 func_module crypto/gc-sm3 func_end_table element="Compiler warning management" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_compwarn func_wrap H3 func_echo "$element" func_begin_table func_module ignore-value func_end_table element="Misc" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap ansic_ext_misc func_wrap H3 func_echo "$element" func_begin_table func_module base32 func_module base64 func_module check-version func_module crc func_module diffseq func_module execinfo func_module getline func_module getdelim func_module getnline func_module getndelim2 func_module linebuffer func_module memxor func_module obstack func_module obstack-printf func_module obstack-printf-posix func_module hash-pjw func_module hash-pjw-bare func_module hash func_module hamt func_module readline func_module readtokens func_module readtokens0 func_module stack func_module strverscmp func_module filevercmp func_end_table element="Support for systems lacking ISO C 99" func_section_wrap isoc_sup func_wrap H2 func_echo "$element" element="Core language properties" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_core_properties func_wrap H3 func_echo "$element" func_begin_table func_module alignof func_module c99 func_module flexmember func_module fpucw func_module func func_module inline func_module longlong func_module snippet/unused-parameter func_module va-args func_module vararrays func_module vla func_end_table element="Variable arguments " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stdarg func_wrap H3 func_echo "$element" func_begin_table func_module stdarg func_end_table element="Boolean type and values " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stdbool func_wrap H3 func_echo "$element" func_begin_table func_module stdbool func_end_table element="Basic types " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stddef func_wrap H3 func_echo "$element" func_begin_table func_module stddef func_end_table element="Integer types and values " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stdint func_wrap H3 func_echo "$element" func_begin_table func_module size_max func_module stdint func_end_table element="Input/output " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stdio func_wrap H3 func_echo "$element" func_begin_table func_module stdio func_module snprintf func_module vsnprintf func_end_table element="Process control, Numeric conversion functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_stdlib_procconv func_wrap H3 func_echo "$element" func_begin_table func_module _Exit func_module atoll func_module strtoll func_module strtoull func_end_table element="Unibyte characters " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_ctype func_wrap H3 func_echo "$element" func_begin_table func_module ctype func_end_table element="Functions for greatest-width integer types " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_inttypes func_wrap H3 func_echo "$element" func_begin_table func_module imaxabs func_module imaxdiv func_module inttypes func_module strtoimax func_module strtoumax func_end_table element="String handling " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_string func_wrap H3 func_echo "$element" func_begin_table func_module strncat func_end_table element="Extended multibyte and wide character utilities " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_wchar func_wrap H3 func_echo "$element" func_begin_table func_module wchar func_module btowc func_module wctob func_module mbsinit func_module mbrlen func_module mbrtowc func_module mbsrtowcs func_module wcrtomb func_module wcsrtombs func_end_table element="Wide character classification and mapping utilities " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_wctype func_wrap H3 func_echo "$element" func_begin_table func_module wctype func_end_table element="Characteristics of floating types " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_float func_wrap H3 func_echo "$element" func_begin_table func_module float func_end_table element="Mathematics " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_math func_wrap H3 func_echo "$element" func_begin_table func_module acos func_module acosl func_module asin func_module asinl func_module atan func_module atan2 func_module atanl func_module cbrt func_module ceil func_module ceilf func_module ceill func_module copysign func_module cos func_module cosh func_module cosl func_module erf func_module erfc func_module exp func_module expl func_module fabs func_module floor func_module floorf func_module floorl func_module fmod func_module frexp func_module frexp-nolibm func_module frexpl func_module frexpl-nolibm func_module hypot func_module isfinite func_module isinf func_module isnan func_module isnanf func_module isnanf-nolibm func_module isnand func_module isnand-nolibm func_module isnanl func_module isnanl-nolibm func_module j0 func_module j1 func_module jn func_module ldexp func_module ldexpl func_module lgamma func_module log func_module log10 func_module log1p func_module logb func_module logl func_module math func_module mathl func_module modf func_module nextafter func_module pow func_module remainder func_module rint func_module round func_module roundf func_module roundl func_module signbit func_module sin func_module sinh func_module sinl func_module sqrt func_module sqrtl func_module tan func_module tanh func_module tanl func_module trunc func_module truncf func_module truncl func_module y0 func_module y1 func_module yn func_end_table element="Enhancements for ISO C 99 functions" func_section_wrap isoc_enh func_wrap H2 func_echo "$element" element="Input/output " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_enh_stdio func_wrap H3 func_echo "$element" func_begin_table func_module printf-safe func_end_table element="Extra functions based on ISO C 99" func_section_wrap isoc_ext func_wrap H2 func_echo "$element" element="Mathematics " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_ext_math func_wrap H3 func_echo "$element" func_begin_table func_module printf-frexpl func_end_table element="Numeric conversion functions " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_ext_stdlib_conv func_wrap H3 func_echo "$element" func_begin_table func_module c-dtoastr func_module c-ldtoastr func_module dtoastr func_module ftoastr func_module intprops func_module inttostr func_module ldtoastr func_module xstrtoimax func_module xstrtoumax func_end_table element="Extended multibyte and wide character utilities " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_ext_wchar_mb func_wrap H3 func_echo "$element" func_begin_table func_module mbchar func_module mbiter func_module mbuiter func_module mbfile func_end_table element="Support for systems lacking ISO C 11" func_section_wrap c11_sup func_wrap H2 func_echo "$element" element="Core language properties" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap c11_core_properties func_wrap H3 func_echo "$element" func_begin_table func_module noreturn func_module std-gnu11 func_module stdalign func_end_table element="Support for standard extensions to ISO C 11" func_section_wrap c11_ext func_wrap H2 func_echo "$element" func_begin_table func_module attribute func_module builtin-expect func_module ieee754-h func_module limits-h func_end_table element="Support for GNU multiple precision arithmetic" func_section_wrap gmp func_wrap H2 func_echo "$element" func_begin_table func_module libgmp func_end_table element="Support for sharing code with the GNU C Library" func_section_wrap glibc func_wrap H2 func_echo "$element" func_begin_table func_module libc-config func_end_table element="Support for obsolete systems lacking POSIX:2008" func_section_wrap posix_sup_obsolete func_wrap H2 func_echo "$element" func_begin_table func_module strdup func_end_table func_echo 'These modules are not listed among dependencies below, for simplicity.' func_echo 'If your package requires portability to old, obsolete systems, you need to list these modules explicitly among the modules to import through gnulib-tool.' element="Support for systems lacking POSIX:2008" func_section_wrap posix_sup func_wrap H2 func_echo "$element" func_begin_table func_module accept func_module alphasort func_module arpa_inet func_module bind func_module calloc-posix func_module chown func_module close func_module connect func_module dirent func_module dprintf func_module dprintf-posix func_module dup2 func_module duplocale func_module environ func_module errno func_module fchdir func_module fclose func_module fcntl-h func_module fcntl func_module fdatasync func_module flock func_module fopen func_module fprintf-posix func_module freopen func_module fseek func_module fseeko func_module fsync func_module ftell func_module ftello func_module ftruncate func_module futimens func_module getaddrinfo func_module getcwd func_module getcwd-lgpl func_module getgroups func_module gethostname func_module getlogin func_module getlogin_r func_module getopt-posix func_module getpeername func_module getsockname func_module getsockopt func_module getsubopt func_module gettimeofday func_module grantpt func_module hostent func_module iconv-h func_module iconv_open func_module inet_ntop func_module inet_pton func_module ioctl func_module isblank func_module langinfo func_module link func_module linkat func_module listen func_module locale func_module lseek func_module lstat func_module malloc-posix func_module mbsnrtowcs func_module mkdir func_module mkdtemp func_module mkfifo func_module mknod func_module mkstemp func_module net_if func_module netdb func_module netinet_in func_module nl_langinfo func_module open func_module perror func_module poll func_module popen func_module posix_openpt func_module posix_spawn func_module posix_spawnattr_destroy func_module posix_spawnattr_getflags func_module posix_spawnattr_getpgroup func_module posix_spawnattr_getschedparam func_module posix_spawnattr_getschedpolicy func_module posix_spawnattr_getsigdefault func_module posix_spawnattr_getsigmask func_module posix_spawnattr_init func_module posix_spawnattr_setflags func_module posix_spawnattr_setpgroup func_module posix_spawnattr_setschedparam func_module posix_spawnattr_setschedpolicy func_module posix_spawnattr_setsigdefault func_module posix_spawnattr_setsigmask func_module posix_spawn_file_actions_addclose func_module posix_spawn_file_actions_adddup2 func_module posix_spawn_file_actions_addopen func_module posix_spawn_file_actions_destroy func_module posix_spawn_file_actions_init func_module posix_spawn-internal func_module posix_spawnp func_module pread func_module printf-posix func_module pselect func_module pthread func_module ptsname func_module pwrite func_module readlink func_module realloc-posix func_module recv func_module recvfrom func_module remove func_module scandir func_module sched func_module select func_module send func_module sendto func_module servent func_module setsockopt func_module shutdown func_module signal-h func_module sleep func_module snprintf-posix func_module socket func_module spawn func_module sprintf-posix func_module stat func_module strdup-posix func_module string func_module strings func_module tempname func_module time func_module time_r func_module times func_module timespec func_module nanosleep func_module pthread_sigmask func_module regex func_module rename func_module renameat func_module rmdir func_module search func_module sigaction func_module sigprocmask func_module socklen func_module ssize_t func_module strptime func_module strtok_r func_module sys_select func_module sys_socket func_module sys_stat func_module sys_time func_module sys_times func_module sys_uio func_module sys_utsname func_module sys_wait func_module truncate func_module tsearch func_module ttyname_r func_module uname func_module unistd func_module unlink func_module unlockpt func_module utime func_module utime-h func_module utimensat func_module vasnprintf-posix func_module vasprintf-posix func_module vdprintf func_module vdprintf-posix func_module vfprintf-posix func_module vprintf-posix func_module vsnprintf-posix func_module vsprintf-posix func_module wcsnrtombs func_module wcwidth func_module windows-stat-inodes func_module windows-stat-override func_module windows-stat-timespec func_module write func_end_table element="Compatibility checks for POSIX:2008 functions" func_section_wrap posix_compat func_wrap H2 func_echo "$element" func_begin_table func_module clock-time func_module d-ino func_module d-type func_module link-follow func_module rmdir-errno func_module timer-time func_module unlink-busy func_module winsz-ioctl func_module winsz-termios func_end_table element="Enhancements for POSIX:2008 functions" func_section_wrap posix_enh func_wrap H2 func_echo "$element" func_begin_table func_module chdir-long func_module dirent-safer func_module dirname func_module dirname-lgpl func_module getopt-gnu func_module iconv_open-utf func_module unistd-safer func_module fnmatch func_module fnmatch-gnu func_module glob func_module exclude func_end_table element="Extra functions based on POSIX:2008" func_section_wrap posix_ext func_wrap H2 func_echo "$element" element="Input/output" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_stdio func_wrap H3 func_echo "$element" func_begin_table func_module xprintf-posix func_module xvasprintf-posix func_end_table element="Numeric conversion functions" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_conv func_wrap H3 func_echo "$element" func_begin_table func_module human func_end_table element="File system functions" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_filesys func_wrap H3 func_echo "$element" func_begin_table func_module acl func_module acl-permissions func_module areadlink func_module areadlink-with-size func_module areadlinkat func_module areadlinkat-with-size func_module backupfile func_module backup-rename func_module canonicalize func_module canonicalize-lgpl func_module clean-temp func_module concat-filename func_module copy-file func_module fsusage func_module dirfd func_module double-slash-root func_module euidaccess func_module faccessat func_module fdopendir func_module fdutimensat func_module file-type func_module fileblocks func_module filemode func_module filename func_module filenamecat func_module filenamecat-lgpl func_module fts func_module isdir func_module largefile func_module lchmod func_module lchown func_module mkancesdirs func_module mkfifoat func_module mkdir-p func_module mkostemp func_module mkostemps func_module mkstemps func_module modechange func_module mountlist func_module openat func_module openat-die func_module pathmax func_module qacl func_module qcopy-acl func_module qset-acl func_module read-file func_module readlinkat func_module renameatu func_module same func_module save-cwd func_module savedir func_module savewd func_module stat-macros func_module stat-time func_module symlink func_module symlinkat func_module sys_file func_module sys_ioctl func_module tmpdir func_module unlinkdir func_module utimecmp func_module utimens func_module write-any-file func_module xconcat-filename func_module xgetcwd func_module xreadlink func_module xreadlinkat func_end_table element="File system as inode set" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_inodeset func_wrap H3 func_echo "$element" func_begin_table func_module cycle-check func_module dev-ino func_module file-set func_module hash-triple func_module i-ring func_module same-inode func_end_table element="File descriptor based Input/Output" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_filedesc func_wrap H3 func_echo "$element" func_begin_table func_module binary-io func_module copy-file-range func_module dup3 func_module fcntl-safer func_module fd-safer-flag func_module full-read func_module full-write func_module getdtablesize func_module isapipe func_module openat-safer func_module pipe-posix func_module pipe2 func_module pipe2-safer func_module safe-read func_module safe-write func_end_table element="File stream based Input/Output" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_filestream func_wrap H3 func_echo "$element" func_begin_table func_module close-stream func_module closein func_module closeout func_module fbufmode func_module fopen-safer func_module fpending func_module fpurge func_module freadable func_module freadahead func_module freading func_module freadptr func_module freadseek func_module freopen-safer func_module fwritable func_module fwriting func_module getpass func_module getpass-gnu func_module popen-safer func_module stdlib-safer func_module tmpfile-safer func_module xfreopen func_end_table element="Users and groups" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_uidgid func_wrap H3 func_echo "$element" func_begin_table func_module getugroups func_module group-member func_module idcache func_module mgetgroups func_module userspec func_end_table element="Security" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_security func_wrap H3 func_echo "$element" func_begin_table func_module idpriv-drop func_module idpriv-droptemp func_module priv-set func_end_table element="Date and time" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_datetime func_wrap H3 func_echo "$element" func_begin_table func_module gethrxtime func_module gettime func_module posixtm func_module settime func_module usleep func_module xnanosleep func_end_table element="Networking functions" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_net func_wrap H3 func_echo "$element" func_begin_table func_module accept4 func_module xgethostname func_module canon-host func_module sockets func_end_table element="Multithreading" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_thread func_wrap H3 func_echo "$element" func_begin_table func_module threadlib func_module lock func_module tls func_module thread func_module yield func_module cond func_module openmp func_end_table element="Signal handling" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_signal func_wrap H3 func_echo "$element" func_begin_table func_module c-stack func_module libsigsegv func_module sig2str func_module sigpipe func_module sigpipe-die func_end_table element="Internationalization functions" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_i18n func_wrap H3 func_echo "$element" func_begin_table func_module gettext func_module gettext-h func_module propername func_module iconv func_module striconv func_module xstriconv func_module striconveh func_module xstriconveh func_module striconveha func_module localcharset func_module hard-locale func_module localename func_module mbmemcasecmp func_module mbmemcasecoll func_module mbslen func_module mbsnlen func_module mbschr func_module mbsrchr func_module mbsstr func_module mbscasecmp func_module mbsncasecmp func_module mbspcasecmp func_module mbscasestr func_module mbscspn func_module mbspbrk func_module mbsspn func_module mbssep func_module mbstok_r func_module mbswidth func_module memcasecmp func_module memcoll func_module xmemcoll func_module unicodeio func_module rpmatch func_module yesno func_module bison-i18n func_end_table element="Unicode string functions" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_unicode func_wrap H3 func_echo "$element" func_begin_table func_module libunistring func_module libunistring-optional func_module unitypes func_module ucs4-utf8 func_module ucs4-utf16 func_module utf8-ucs4-unsafe func_module utf16-ucs4-unsafe func_module utf8-ucs4 func_module utf16-ucs4 func_module unistr/base func_module unistr/u8-to-u16 func_module unistr/u8-to-u32 func_module unistr/u16-to-u8 func_module unistr/u16-to-u32 func_module unistr/u32-to-u8 func_module unistr/u32-to-u16 func_module unistr/u8-check func_module unistr/u16-check func_module unistr/u32-check func_module unistr/u8-chr func_module unistr/u16-chr func_module unistr/u32-chr func_module unistr/u8-cmp func_module unistr/u16-cmp func_module unistr/u32-cmp func_module unistr/u8-cmp2 func_module unistr/u16-cmp2 func_module unistr/u32-cmp2 func_module unistr/u8-cpy func_module unistr/u16-cpy func_module unistr/u32-cpy func_module unistr/u8-cpy-alloc func_module unistr/u16-cpy-alloc func_module unistr/u32-cpy-alloc func_module unistr/u8-endswith func_module unistr/u16-endswith func_module unistr/u32-endswith func_module unistr/u8-mblen func_module unistr/u16-mblen func_module unistr/u32-mblen func_module unistr/u8-mbsnlen func_module unistr/u16-mbsnlen func_module unistr/u32-mbsnlen func_module unistr/u8-mbtouc-unsafe func_module unistr/u16-mbtouc-unsafe func_module unistr/u32-mbtouc-unsafe func_module unistr/u8-mbtouc func_module unistr/u16-mbtouc func_module unistr/u32-mbtouc func_module unistr/u8-mbtoucr func_module unistr/u16-mbtoucr func_module unistr/u32-mbtoucr func_module unistr/u8-move func_module unistr/u16-move func_module unistr/u32-move func_module unistr/u8-next func_module unistr/u16-next func_module unistr/u32-next func_module unistr/u8-prev func_module unistr/u16-prev func_module unistr/u32-prev func_module unistr/u8-set func_module unistr/u16-set func_module unistr/u32-set func_module unistr/u8-startswith func_module unistr/u16-startswith func_module unistr/u32-startswith func_module unistr/u8-stpcpy func_module unistr/u16-stpcpy func_module unistr/u32-stpcpy func_module unistr/u8-stpncpy func_module unistr/u16-stpncpy func_module unistr/u32-stpncpy func_module unistr/u8-strcat func_module unistr/u16-strcat func_module unistr/u32-strcat func_module unistr/u8-strchr func_module unistr/u16-strchr func_module unistr/u32-strchr func_module unistr/u8-strcmp func_module unistr/u16-strcmp func_module unistr/u32-strcmp func_module unistr/u8-strcoll func_module unistr/u16-strcoll func_module unistr/u32-strcoll func_module unistr/u8-strcpy func_module unistr/u16-strcpy func_module unistr/u32-strcpy func_module unistr/u8-strcspn func_module unistr/u16-strcspn func_module unistr/u32-strcspn func_module unistr/u8-strdup func_module unistr/u16-strdup func_module unistr/u32-strdup func_module unistr/u8-strlen func_module unistr/u16-strlen func_module unistr/u32-strlen func_module unistr/u8-strmblen func_module unistr/u16-strmblen func_module unistr/u32-strmblen func_module unistr/u8-strmbtouc func_module unistr/u16-strmbtouc func_module unistr/u32-strmbtouc func_module unistr/u8-strncat func_module unistr/u16-strncat func_module unistr/u32-strncat func_module unistr/u8-strncmp func_module unistr/u16-strncmp func_module unistr/u32-strncmp func_module unistr/u8-strncpy func_module unistr/u16-strncpy func_module unistr/u32-strncpy func_module unistr/u8-strnlen func_module unistr/u16-strnlen func_module unistr/u32-strnlen func_module unistr/u8-strpbrk func_module unistr/u16-strpbrk func_module unistr/u32-strpbrk func_module unistr/u8-strrchr func_module unistr/u16-strrchr func_module unistr/u32-strrchr func_module unistr/u8-strspn func_module unistr/u16-strspn func_module unistr/u32-strspn func_module unistr/u8-strstr func_module unistr/u16-strstr func_module unistr/u32-strstr func_module unistr/u8-strtok func_module unistr/u16-strtok func_module unistr/u32-strtok func_module unistr/u8-uctomb func_module unistr/u16-uctomb func_module unistr/u32-uctomb func_module uniconv/base func_module uniconv/u8-conv-from-enc func_module uniconv/u16-conv-from-enc func_module uniconv/u32-conv-from-enc func_module uniconv/u8-conv-to-enc func_module uniconv/u16-conv-to-enc func_module uniconv/u32-conv-to-enc func_module uniconv/u8-strconv-from-enc func_module uniconv/u16-strconv-from-enc func_module uniconv/u32-strconv-from-enc func_module uniconv/u8-strconv-to-enc func_module uniconv/u16-strconv-to-enc func_module uniconv/u32-strconv-to-enc func_module uniconv/u8-strconv-from-locale func_module uniconv/u16-strconv-from-locale func_module uniconv/u32-strconv-from-locale func_module uniconv/u8-strconv-to-locale func_module uniconv/u16-strconv-to-locale func_module uniconv/u32-strconv-to-locale func_module unistdio/base func_module unistdio/u-printf-args func_module unistdio/ulc-asnprintf func_module unistdio/ulc-asprintf func_module unistdio/ulc-fprintf func_module unistdio/ulc-printf-parse func_module unistdio/ulc-snprintf func_module unistdio/ulc-sprintf func_module unistdio/ulc-vasnprintf func_module unistdio/ulc-vasprintf func_module unistdio/ulc-vfprintf func_module unistdio/ulc-vsnprintf func_module unistdio/ulc-vsprintf func_module unistdio/u8-asnprintf func_module unistdio/u8-asprintf func_module unistdio/u8-printf-parse func_module unistdio/u8-snprintf func_module unistdio/u8-sprintf func_module unistdio/u8-vasnprintf func_module unistdio/u8-vasprintf func_module unistdio/u8-vsnprintf func_module unistdio/u8-vsprintf func_module unistdio/u8-u8-asnprintf func_module unistdio/u8-u8-asprintf func_module unistdio/u8-u8-snprintf func_module unistdio/u8-u8-sprintf func_module unistdio/u8-u8-vasnprintf func_module unistdio/u8-u8-vasprintf func_module unistdio/u8-u8-vsnprintf func_module unistdio/u8-u8-vsprintf func_module unistdio/u16-asnprintf func_module unistdio/u16-asprintf func_module unistdio/u16-printf-parse func_module unistdio/u16-snprintf func_module unistdio/u16-sprintf func_module unistdio/u16-vasnprintf func_module unistdio/u16-vasprintf func_module unistdio/u16-vsnprintf func_module unistdio/u16-vsprintf func_module unistdio/u16-u16-asnprintf func_module unistdio/u16-u16-asprintf func_module unistdio/u16-u16-snprintf func_module unistdio/u16-u16-sprintf func_module unistdio/u16-u16-vasnprintf func_module unistdio/u16-u16-vasprintf func_module unistdio/u16-u16-vsnprintf func_module unistdio/u16-u16-vsprintf func_module unistdio/u32-asnprintf func_module unistdio/u32-asprintf func_module unistdio/u32-printf-parse func_module unistdio/u32-snprintf func_module unistdio/u32-sprintf func_module unistdio/u32-vasnprintf func_module unistdio/u32-vasprintf func_module unistdio/u32-vsnprintf func_module unistdio/u32-vsprintf func_module unistdio/u32-u32-asnprintf func_module unistdio/u32-u32-asprintf func_module unistdio/u32-u32-snprintf func_module unistdio/u32-u32-sprintf func_module unistdio/u32-u32-vasnprintf func_module unistdio/u32-u32-vasprintf func_module unistdio/u32-u32-vsnprintf func_module unistdio/u32-u32-vsprintf func_module uniname/base func_module uniname/uniname func_module unictype/base func_module unictype/bidiclass-byname func_module unictype/bidiclass-name func_module unictype/bidiclass-longname func_module unictype/bidiclass-of func_module unictype/bidiclass-test func_module unictype/bidiclass-all func_module unictype/block-list func_module unictype/block-of func_module unictype/block-test func_module unictype/block-all func_module unictype/category-C func_module unictype/category-Cc func_module unictype/category-Cf func_module unictype/category-Cn func_module unictype/category-Co func_module unictype/category-Cs func_module unictype/category-L func_module unictype/category-Ll func_module unictype/category-Lm func_module unictype/category-Lo func_module unictype/category-Lt func_module unictype/category-Lu func_module unictype/category-M func_module unictype/category-Mc func_module unictype/category-Me func_module unictype/category-Mn func_module unictype/category-N func_module unictype/category-Nd func_module unictype/category-Nl func_module unictype/category-No func_module unictype/category-P func_module unictype/category-Pc func_module unictype/category-Pd func_module unictype/category-Pe func_module unictype/category-Pf func_module unictype/category-Pi func_module unictype/category-Po func_module unictype/category-Ps func_module unictype/category-S func_module unictype/category-Sc func_module unictype/category-Sk func_module unictype/category-Sm func_module unictype/category-So func_module unictype/category-Z func_module unictype/category-Zl func_module unictype/category-Zp func_module unictype/category-Zs func_module unictype/category-and func_module unictype/category-and-not func_module unictype/category-byname func_module unictype/category-name func_module unictype/category-none func_module unictype/category-of func_module unictype/category-or func_module unictype/category-test func_module unictype/category-test-withtable func_module unictype/category-all func_module unictype/combining-class func_module unictype/ctype-alnum func_module unictype/ctype-alpha func_module unictype/ctype-blank func_module unictype/ctype-cntrl func_module unictype/ctype-digit func_module unictype/ctype-graph func_module unictype/ctype-lower func_module unictype/ctype-print func_module unictype/ctype-punct func_module unictype/ctype-space func_module unictype/ctype-upper func_module unictype/ctype-xdigit func_module unictype/decimal-digit func_module unictype/digit func_module unictype/mirror func_module unictype/numeric func_module unictype/property-alphabetic func_module unictype/property-ascii-hex-digit func_module unictype/property-bidi-arabic-digit func_module unictype/property-bidi-arabic-right-to-left func_module unictype/property-bidi-block-separator func_module unictype/property-bidi-boundary-neutral func_module unictype/property-bidi-common-separator func_module unictype/property-bidi-control func_module unictype/property-bidi-embedding-or-override func_module unictype/property-bidi-eur-num-separator func_module unictype/property-bidi-eur-num-terminator func_module unictype/property-bidi-european-digit func_module unictype/property-bidi-hebrew-right-to-left func_module unictype/property-bidi-left-to-right func_module unictype/property-bidi-non-spacing-mark func_module unictype/property-bidi-other-neutral func_module unictype/property-bidi-pdf func_module unictype/property-bidi-segment-separator func_module unictype/property-bidi-whitespace func_module unictype/property-byname func_module unictype/property-case-ignorable func_module unictype/property-cased func_module unictype/property-changes-when-casefolded func_module unictype/property-changes-when-casemapped func_module unictype/property-changes-when-lowercased func_module unictype/property-changes-when-titlecased func_module unictype/property-changes-when-uppercased func_module unictype/property-combining func_module unictype/property-composite func_module unictype/property-currency-symbol func_module unictype/property-dash func_module unictype/property-decimal-digit func_module unictype/property-default-ignorable-code-point func_module unictype/property-deprecated func_module unictype/property-diacritic func_module unictype/property-extender func_module unictype/property-format-control func_module unictype/property-grapheme-base func_module unictype/property-grapheme-extend func_module unictype/property-grapheme-link func_module unictype/property-hex-digit func_module unictype/property-hyphen func_module unictype/property-id-continue func_module unictype/property-id-start func_module unictype/property-ideographic func_module unictype/property-ids-binary-operator func_module unictype/property-ids-trinary-operator func_module unictype/property-ignorable-control func_module unictype/property-iso-control func_module unictype/property-join-control func_module unictype/property-left-of-pair func_module unictype/property-line-separator func_module unictype/property-logical-order-exception func_module unictype/property-lowercase func_module unictype/property-math func_module unictype/property-non-break func_module unictype/property-not-a-character func_module unictype/property-numeric func_module unictype/property-other-alphabetic func_module unictype/property-other-default-ignorable-code-point func_module unictype/property-other-grapheme-extend func_module unictype/property-other-id-continue func_module unictype/property-other-id-start func_module unictype/property-other-lowercase func_module unictype/property-other-math func_module unictype/property-other-uppercase func_module unictype/property-paired-punctuation func_module unictype/property-paragraph-separator func_module unictype/property-pattern-syntax func_module unictype/property-pattern-white-space func_module unictype/property-private-use func_module unictype/property-punctuation func_module unictype/property-quotation-mark func_module unictype/property-radical func_module unictype/property-sentence-terminal func_module unictype/property-soft-dotted func_module unictype/property-space func_module unictype/property-terminal-punctuation func_module unictype/property-test func_module unictype/property-titlecase func_module unictype/property-unassigned-code-value func_module unictype/property-unified-ideograph func_module unictype/property-uppercase func_module unictype/property-variation-selector func_module unictype/property-white-space func_module unictype/property-xid-continue func_module unictype/property-xid-start func_module unictype/property-zero-width func_module unictype/property-all func_module unictype/scripts func_module unictype/scripts-all func_module unictype/syntax-c-ident func_module unictype/syntax-c-whitespace func_module unictype/syntax-java-ident func_module unictype/syntax-java-whitespace func_module uniwidth/base func_module uniwidth/u8-strwidth func_module uniwidth/u8-width func_module uniwidth/u16-strwidth func_module uniwidth/u16-width func_module uniwidth/u32-strwidth func_module uniwidth/u32-width func_module uniwidth/width func_module uniwbrk/base func_module uniwbrk/ulc-wordbreaks func_module uniwbrk/u8-wordbreaks func_module uniwbrk/u16-wordbreaks func_module uniwbrk/u32-wordbreaks func_module uniwbrk/wordbreak-property func_module unilbrk/base func_module unilbrk/tables func_module unilbrk/ulc-common func_module unilbrk/u8-possible-linebreaks func_module unilbrk/u16-possible-linebreaks func_module unilbrk/u32-possible-linebreaks func_module unilbrk/ulc-possible-linebreaks func_module unilbrk/u8-width-linebreaks func_module unilbrk/u16-width-linebreaks func_module unilbrk/u32-width-linebreaks func_module unilbrk/ulc-width-linebreaks func_module uninorm/base func_module uninorm/canonical-decomposition func_module uninorm/composition func_module uninorm/decomposing-form func_module uninorm/decomposition func_module uninorm/filter func_module uninorm/nfc func_module uninorm/nfd func_module uninorm/nfkc func_module uninorm/nfkd func_module uninorm/u8-normalize func_module uninorm/u16-normalize func_module uninorm/u32-normalize func_module uninorm/u8-normcmp func_module uninorm/u16-normcmp func_module uninorm/u32-normcmp func_module uninorm/u8-normcoll func_module uninorm/u16-normcoll func_module uninorm/u32-normcoll func_module uninorm/u8-normxfrm func_module uninorm/u16-normxfrm func_module uninorm/u32-normxfrm func_module unicase/base func_module unicase/empty-prefix-context func_module unicase/empty-suffix-context func_module unicase/locale-language func_module unicase/tolower func_module unicase/totitle func_module unicase/toupper func_module unicase/ulc-casecmp func_module unicase/ulc-casecoll func_module unicase/ulc-casexfrm func_module unicase/u8-casecmp func_module unicase/u16-casecmp func_module unicase/u32-casecmp func_module unicase/u8-casecoll func_module unicase/u16-casecoll func_module unicase/u32-casecoll func_module unicase/u8-casefold func_module unicase/u16-casefold func_module unicase/u32-casefold func_module unicase/u8-casexfrm func_module unicase/u16-casexfrm func_module unicase/u32-casexfrm func_module unicase/u8-ct-casefold func_module unicase/u16-ct-casefold func_module unicase/u32-ct-casefold func_module unicase/u8-ct-tolower func_module unicase/u16-ct-tolower func_module unicase/u32-ct-tolower func_module unicase/u8-ct-totitle func_module unicase/u16-ct-totitle func_module unicase/u32-ct-totitle func_module unicase/u8-ct-toupper func_module unicase/u16-ct-toupper func_module unicase/u32-ct-toupper func_module unicase/u8-is-cased func_module unicase/u16-is-cased func_module unicase/u32-is-cased func_module unicase/u8-is-casefolded func_module unicase/u16-is-casefolded func_module unicase/u32-is-casefolded func_module unicase/u8-is-lowercase func_module unicase/u16-is-lowercase func_module unicase/u32-is-lowercase func_module unicase/u8-is-titlecase func_module unicase/u16-is-titlecase func_module unicase/u32-is-titlecase func_module unicase/u8-is-uppercase func_module unicase/u16-is-uppercase func_module unicase/u8-prefix-context func_module unicase/u16-prefix-context func_module unicase/u32-prefix-context func_module unicase/u8-suffix-context func_module unicase/u16-suffix-context func_module unicase/u32-suffix-context func_module unicase/u8-tolower func_module unicase/u16-tolower func_module unicase/u32-tolower func_module unicase/u8-totitle func_module unicase/u16-totitle func_module unicase/u32-totitle func_module unicase/u8-toupper func_module unicase/u16-toupper func_module unicase/u32-toupper func_end_table element="Executing programs" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_exec func_wrap H3 func_echo "$element" func_begin_table func_module cloexec func_module findprog func_module findprog-lgpl func_module wait-process func_module execute func_module spawn-pipe func_module pipe-filter-gi func_module pipe-filter-ii func_module sh-quote func_end_table element="Java" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_java func_wrap H3 func_echo "$element" func_begin_table func_module classpath func_module javacomp-script func_module javacomp func_module javaexec-script func_module javaexec func_module javaversion #func_module gcj func_end_table element="C#" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_csharp func_wrap H3 func_echo "$element" func_begin_table func_module csharpcomp-script func_module csharpcomp func_module csharpexec-script func_module csharpexec func_end_table element="Misc" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap posix_ext_misc func_wrap H3 func_echo "$element" func_begin_table func_module argp func_module argp-version-etc func_module argz func_module bitrotate func_module byteswap func_module dfa func_module exitfail func_module error func_module extensions func_module forkpty func_module getdomainname func_module xgetdomainname func_module getentropy func_module getloadavg func_module getpagesize func_module getprogname func_module getrandom func_module getusershell func_module lib-symbol-visibility func_module login_tty func_module nproc func_module openpty func_module parse-duration func_module physmem func_module posixver func_module progname func_module ptsname_r func_module pty func_module quotearg func_module quote func_module readutmp func_module random_r func_module selinux-h func_module selinux-at func_module sysexits func_module u64 func_module verror func_end_table element="Support for building libraries and executables" func_section_wrap build_lib func_wrap H2 func_echo "$element" func_begin_table func_module absolute-header func_module snippet/arg-nonnull func_module config-h func_module configmake func_module dummy func_module gperf func_module havelib func_module include_next func_module ldd func_module lib-ignore func_module lib-msvc-compat func_module lib-symbol-versions func_module snippet/link-warning func_module manywarnings func_module no-c++ func_module relocatable-lib func_module relocatable-lib-lgpl func_module relocatable-prog func_module relocatable-prog-wrapper func_module relocatable-script func_module snippet/warn-on-use func_module warnings func_end_table element="Support for building documentation" func_section_wrap build_doc func_wrap H2 func_echo "$element" func_begin_table func_module agpl-3.0 func_module fdl func_module fdl-1.3 func_module gendocs func_module gpl-2.0 func_module gpl-3.0 func_module lgpl-2.1 func_module lgpl-3.0 func_module pmccabe2html func_module regexprops-generic func_end_table element="Support for maintaining and releasing projects" func_section_wrap maintain func_wrap H2 func_echo "$element" func_begin_table func_module announce-gen func_module autobuild func_module do-release-commit-and-tag func_module git-version-gen func_module gitlog-to-changelog func_module gnu-web-doc-update func_module gnumakefile func_module gnupload func_module maintainer-makefile func_module mktempd func_module non-recursive-gnulib-prefix-hack func_module readme-release func_module test-framework-sh func_module update-copyright func_module useless-if-before-free func_module vc-list-files func_module vcs-to-changelog func_end_table element="Misc" func_section_wrap misc func_wrap H2 func_echo "$element" func_begin_table func_module gnu-make func_module host-os func_module nocrash func_module perl func_module posix-shell func_module uptime func_end_table } func_tmpdir trap 'exit_status=$? if test "$signal" != 0; then echo "caught signal $signal" >&2 fi rm -rf "$tmp" exit $exit_status' 0 for signal in 1 2 3 13 15; do trap '{ signal='$signal'; func_exit 1; }' $signal done signal=0 echo '' func_begin HTML func_begin HEAD element="Gnulib Module List" func_wrap TITLE func_echo "$element" modules=`gnulib-tool --list` modules=`for m in $modules; do printf "%s, " $m; done | sed -e 's/, $//'` func_echo '' func_end HEAD func_begin BODY element="Gnulib Module List" func_wrap H1 func_echo "$element" func_echo 'This is a list of the modules which make up gnulib, with dependencies.' in_toc=yes func_all_modules in_toc= func_all_modules gnulib-tool --list > "$tmp/all-modules" missed_modules=`for module in $seen_modules; do echo $module; done \ | LC_ALL=C sort -u \ | LC_ALL=C join -v 2 - "$tmp/all-modules"` if test -n "$missed_modules"; then element="Unclassified modules - please update MODULES.html.sh" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_wrap H2 func_echo "$element" func_begin_table for module in $missed_modules; do func_module $module done func_end_table fi { find lib -type f -print; find m4 -type f -print; } | LC_ALL=C sort | sed -e '/\/\./d' -e /README/d -e /ChangeLog/d -e /Makefile/d -e /TODO/d -e '/tags$/d' -e '/TAGS$/d' -e '/~$/d' > "$tmp/all-files" missed_files=`for file in $seen_files; do echo $file; done \ | LC_ALL=C sort -u \ | LC_ALL=C join -v 2 - "$tmp/all-files"` if test -n "$missed_files"; then element="Lone files - please create new modules containing them" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_wrap H2 func_echo "$element" func_echo '
'
  echo "$missed_files" | sed -e 's,^\(.*\)$,\1,'
  echo '
' fi element="Future developments" element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_wrap H2 func_echo "$element" func_echo 'Ideally a module could consist of:' func_begin UL func_echo '
  • A header file: lib/module.h' func_echo '
  • One or more implementation files: lib/module.c et al.' func_echo '
  • One or more autoconf macro files: m4/module.m4 et al.' func_echo '
  • A configure.ac fragment, Makefile.am fragment, dependency list: modules/module' func_echo '
  • A testsuite: source files in tests/ and metainformation (a configure.ac fragment, Makefile.am fragment, dependency list) in modules/module-tests' func_echo '
  • Some documentation' func_echo '
  • A POT file and some PO files' func_end UL func_echo '
    ' git_checkout_date=`if test -d .git; then git log -n 1 --date=iso --format=fuller | sed -n -e 's/^CommitDate: //p'; else sed -n -e 's/^\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/p' -e 1q ChangeLog; fi` pretty_date=`LC_ALL=C date +"%e %B %Y" --date="$git_checkout_date"` func_echo "Generated by MODULES.html.sh from a git checkout as of ${pretty_date}." func_end BODY func_end HTML rm -rf "$tmp" # Undo the effect of the previous 'trap' command. trap '' 0 trap 'func_exit $?' 1 2 3 13 15 exit 0 # Local Variables: # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: gnulib-20210822~d383792/Makefile000066400000000000000000000150131411057217300157370ustar00rootroot00000000000000# GNU Makefile for gnulib central. # Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # in any medium, are permitted without royalty provided the copyright # notice and this notice are preserved. # This Makefile requires the use of GNU make. Some targets require # that you have tools like git, makeinfo and cppi installed. # Required for the use of <(...) below. SHELL=bash # Produce some files that are not stored in the repository. all: # Produce the documentation in readable form. info html dvi pdf: cd doc && $(MAKE) $@ && $(MAKE) mostlyclean # Collect the names of rules starting with 'sc_'. syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p'\ Makefile)) # Perform some platform independent checks on the gnulib code. check: $(syntax-check-rules) sc_prefer_ac_check_funcs_once: @if test -d .git; then \ git grep -w -l AC_CHECK_FUNCS modules \ && { echo use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS \ in modules/ 1>&2; exit 1; } || : \ else :; fi sc_prohibit_leading_TABs: @if test -d .git; then \ git grep -l '^ * ' lib m4 tests \ | grep -Ev '^lib/reg|Makefile|test-update-copyright' \ | grep . \ && { printf '*** %s\n' 'indent with spaces, not TABs;' \ 1>&2; exit 1; } || : \ else :; fi sc_prohibit_augmenting_PATH_via_TESTS_ENVIRONMENT: @if test -d .git; then \ url=https://lists.gnu.org/r/bug-gnulib/2010-09/msg00064.html; \ git grep '^[ ]*TESTS_ENVIRONMENT += PATH=' modules \ && { printf '%s\n' 'Do not augment PATH via TESTS_ENVIRONMENT;' \ " see <$$url>" 1>&2; exit 1; } || : \ else :; fi # It's easy to forget the noise-suppressing "@" at the beginning # of each sc_ rule. Check for it both in maint.mk and in this file. sc_prohibit_sc_omitted_at: @if test -d .git; then \ git grep -n -A1 '^sc_[[:alnum:]_-]*:' top/maint.mk Makefile \ | grep -vE ':sc_|[0-9][-] @|--$$' \ | sed 's/-\([0-9][0-9]*\)-/:\1:/' \ | grep . \ && { printf '*** %s\n' 'oops; missing "@"' \ 1>&2; exit 1; } || : \ else :; fi # Run all maint.mk syntax-check tests on gnulib's sources. sc_maint: @rm -f maint.mk; ln -s top/maint.mk maint.mk $(MAKE) -s srcdir=. gnulib_dir=. _build-aux=build-aux \ -f cfg.mk -f maint.mk syntax-check rm -f maint.mk # Files in m4/ that (exceptionally) may use AC_LIBOBJ. # Do not include their ".m4" suffix. allow_AC_LIBOBJ = \ close \ dprintf \ dup2 \ faccessat \ fchdir \ fclose \ fcntl \ fprintf-posix \ open \ printf-posix-rpl \ snprintf \ sprintf-posix \ stdio_h \ vasnprintf \ vasprintf \ vdprintf \ vfprintf-posix \ vprintf-posix \ vsnprintf \ vsprintf-posix allow_AC_LIBOBJ_or := $(shell echo $(allow_AC_LIBOBJ) | tr -s ' ' '|') sc_prohibit_AC_LIBOBJ_in_m4: @url=https://lists.gnu.org/r/bug-gnulib/2011-06/msg00051.html; \ if test -d .git; then \ git ls-files m4 \ | grep -Ev '^m4/($(allow_AC_LIBOBJ_or))\.m4$$' \ | xargs grep '^ *AC_LIBOBJ(' \ && { printf '%s\n' 'Do not use AC_LIBOBJ in m4/*.m4;' \ "see <$$url>"; exit 1; } || :; \ else :; fi sc_pragma_columns: @if test -d .git; then \ git ls-files|grep '\.in\.h$$' \ | xargs grep -l '^@PRAGMA_SYSTEM_HEADER@' \ | xargs grep -L '^@PRAGMA_COLUMNS@' \ | grep . \ && { printf '%s\n' \ 'the files listed above use @PRAGMA_SYSTEM_HEADER@' \ 'without also using @PRAGMA_COLUMNS@' 1>&2; \ exit 1; } || :; \ else :; fi # Verify that certain (for now, only Jim Meyering and Eric Blake's) # *.c files are consistently cpp indented. sc_cpp_indent_check: @./gnulib-tool --extract-filelist \ $$(cd ./modules; grep -ilrE '(meyering|blake)' .) \ | sort -u \ | grep '\.c$$' \ | grep -vE '/(stdio-(read|write)|getloadavg)\.c$$' \ | xargs cppi -c # Ensure that the list of symbols checked for by the # sc_prohibit_intprops_without_use rule match those in the actual file. # Extract the symbols from the .h file and compare with the list of # symbols extracted from the rule in maint.mk. sc_check_sym_list: @i=lib/intprops.h; \ diff -u <(perl -lne '/^# *define ([A-Z]\w+)\(/ and print $$1' $$i|fmt) \ <(sed -n /^_intprops_name/,/^_intprops_syms_re/p top/maint.mk \ |sed '/^_/d;s/^ //;s/ *\\$$//') # Ensure that the copyright statements in files and in the module descriptions # are consistent. sc_check_copyright: @./check-copyright # Regenerate some files that are stored in the repository. regen: MODULES.html # MODULES.html is periodically being generated and copied to the web pages at # :ext:USER@cvs.savannah.gnu.org:/web/gnulib/gnulib/ # where it then appears at . MODULES.html: MODULES.html.sh ./MODULES.html.sh > MODULES.html # A perl BEGIN block to set Y to the current year number and W to Y-1. _year_and_prev = BEGIN{@t=localtime(time); $$y=$$t[5]+1900; $$w=$$y-1} # Run this rule once per year (usually early in January) # to update all FSF copyright year lists here. # We exclude the files listed in srclist.txt (maintained elsewhere) # as well as those in tests/unictype (generated). # Also exclude any file that includes the "GENERATED AUTOMATICALLY" comment, # being careful not to exclude code that merely generates the comment. # Also exclude doc/INSTALL*, since they too are generated. # Also adjust template-style files that must start with a single # (the current) year number in some places. # Also adjust version-etc.c and and gendocs.sh. update-copyright: exempt=$$(mktemp); \ grep -v '^#' config/srclist.txt|grep -v '^$$' \ | while read top src dst options; do \ test -f "$$dst" && { echo "$$dst"; continue; }; \ test -d "$$dst" || continue; \ echo "$$dst"/$$(basename "$$src"); \ done > $$exempt; \ git ls-files tests/unictype >> $$exempt; \ git ls-files doc/INSTALL* >> $$exempt; \ git ls-files | grep -vFf $$exempt \ | xargs grep -L '^/\*.*GENERATED AUTOMATICALLY' \ | UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79 \ UPDATE_COPYRIGHT_USE_INTERVALS=1 \ xargs build-aux/update-copyright perl -pi -e '$(_year_and_prev) s/(copyright.*)\b$$w\b/$$1$$y/i' \ lib/version-etc.c doc/gnulib.texi build-aux/gendocs.sh perl -pi -e '$(_year_and_prev) s/ $$w-$$y / $$y /g' \ doc/gendocs_template* build-aux/gendocs.sh perl -pi -e \ '$(_year_and_prev) s/^(scriptversion=)$$w.*/$$1$$y-01-01.00/i' \ build-aux/gendocs.sh gnulib-20210822~d383792/NEWS000066400000000000000000001510511411057217300150010ustar00rootroot00000000000000Important general notes ----------------------- Date Modules Changes 2021-06-04 (all) The license notices in source files are now really stating the effective license, rather than a fake GPL notice. gnulib-tool no longer replaces GPL notices in source files by something else. 2020-08-16 (all) Automake >= 1.11 and Autoconf >= 2.64 are required. 2019-12-11 Support for These modules are now supported in C++ mode as well. ISO C or POSIX This means, while the autoconfiguration uses the C functions compiler, the resulting header files and function substitutes can be used with a matching C++ compiler as well. 2019-02-14 gnulib-tool If you use multiple --local-dir options at once: The first one now has the highest priority, not the last one. 2019-01-04 (all) The meaning of the 'Link' section in the module descriptions has been clarified: It overrides the combined 'Link' sections from the dependencies. 2018-10-22 (all) Automake >= 1.11 and Autoconf >= 2.63 are required. 2016-09-05 progname There is now an alternate module 'getprogname'. It defines a getprogname() function; use it to obtain the name of the current program. Recommended use: - In a program's main() function, and associated usage() and help() functions, use 'progname'. - In library code, or more generally any code that is not near the main() function, use 'getprogname'. 2013-04-24 gettext If your project uses 'gettextize --intl' it is now your responsibility to put -I$(top_builddir)/intl into the Makefile.am for gnulib. 2012-06-27 elisp-comp The module 'elisp-comp' is removed; the script is not independently useful outside of automake. 2012-06-21 gnulib-tool The option --with-tests is now implied by the options --create-testdir, --test, --create-megatestdir, --megatest. 2012-01-07 quotearg In the C locale, the function will no longer use the grave accent character to begin a quoted string (`like this'). It will use apostrophes 'like these' or, in Unicode locales, single quotes ‘like these’. You may want to adjust any error messages that hard code the quoting characters. 2010-09-04 gnulib-tool The option '--import' is no longer cumulative; it now expects the complete list of modules and other options on the command line. If you want to augment (not set) the list of modules, use the new option '--add-import' instead of '--import'. User visible incompatible changes --------------------------------- Date Modules Changes 2021-07-29 (all) Due to draft C2x, the following attributes should now appear at the start of a function declaration: _GL_ATTRIBUTE_DEPRECATED _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD attribute Likewise for DEPRECATED, MAYBE_UNUSED, NODISCARD. snippet/unused-parameter Likewise for _GL_UNUSED_PARAMETER. 2021-07-01 largefile AC_SYS_LARGEFILE now also arranges for time_t to be 64-bit on 32-bit GNU/Linux platforms that support it (glibc 2.34 or later). 2021-03-21 fatal-signal The function at_fatal_signal now returns an error indicator. 2021-03-21 diacrit This deprecated module is removed. 2021-03-07 mbrtowc For single-locale optimizations, you now need to mbrtoc32 define GNULIB_WCHAR_SINGLE_LOCALE instead of wcwidth GNULIB_WCHAR_SINGLE. 2021-02-28 parse-datetime The parse_datetime2 function has been moved to the new parse-datetime2 module, so that programs that need just parse_datetime need not build the fancier function. 2020-12-23 execute These functions no longer execute scripts without spawn-pipe '#!' marker through /bin/sh. To execute such a posix_spawn script as a shell script, either add a '#!/bin/sh' posix_spawnp marker in the first line, or specify "/bin/sh" as the program to execute and the script as its first argument. 2020-12-18 free This module, obsoleted in 2008, is gone. 2020-12-14 findprog-in The function 'find_in_given_path' now takes a 3rd argument 'const char *directory'. To maintain the previous behaviour, insert NULL as additional 3rd argument. 2020-12-11 sh-quote The argv argument of the 'shell_quote_argv' function is now of type 'const char * const *'. You no longer need to cast read-only strings to 'char *' when constructing this argument. execute The prog_argv argument of the 'execute' function is now of type 'const char * const *'. You no longer need to cast read-only strings to 'char *' when constructing this argument. spawn-pipe The prog_argv argument of the functions 'create_pipe_out', 'create_pipe_in', 'create_pipe_bidi' is now of type 'const char * const *'. You no longer need to cast read-only strings to 'char *' when constructing this argument. pipe-filter-gi The prog_argv argument of the 'pipe_filter_gi_create' function is now of type 'const char * const *'. You no longer need to cast read-only strings to 'char *' when constructing this argument. pipe-filter-ii The prog_argv argument of the 'pipe_filter_ii_execute' function is now of type 'const char * const *'. You no longer need to cast read-only strings to 'char *' when constructing this argument. javaexec The prog_argv argument of the 'execute_fn' function type is now of type 'const char * const *'. Update the signature of all your implementations of this type. csharpexec The prog_argv argument of the 'execute_fn' function type is now of type 'const char * const *'. Update the signature of all your implementations of this type. 2020-12-02 spawn-pipe The functions 'create_pipe_out', 'create_pipe_in', 'create_pipe_bidi' now take a 4th argument 'const char *directory'. To maintain the previous behaviour, insert NULL as additional 4th argument. 2020-12-02 execute The function 'execute' now takes a 4th argument 'const char *directory'. To maintain the previous behaviour, insert NULL as additional 4th argument. 2020-10-16 hash This module deprecates the 'hash_delete' function using gcc's "deprecated" attribute. Use the better- named 'hash_remove' equivalent. 2020-08-24 diffseq If you do not define NOTE_ORDERED to true, the NOTE_DELETE and NOTE_INSERT actions might not be done in order, to help cut down worst-case recursion stack space from O(N) to O(log N). 2020-08-01 libtextstyle-optional You now need to invoke gl_LIBTEXTSTYLE_OPTIONAL explicitly, because this macro now takes an optional MINIMUM-VERSION argument. 2020-08-01 libtextstyle You now need to invoke gl_LIBTEXTSTYLE explicitly, because this macro now takes an optional MINIMUM-VERSION argument. 2020-06-27 clean-temp The functions open_temp, fopen_temp now take a 'bool delete_on_close' argument. If in doubt, pass false. 2020-06-27 tempname The link requirements of these modules are changed mkdtemp from empty to $(LIB_GETRANDOM). mkstemp mkstemps mkostemp mkostemps tmpfile stdlib-safer tmpfile-safer clean-temp javacomp $(LIB_GETRANDOM) was added to the link requirements of this module. 2020-05-27 read-file The functions provided by this module now take an 'int flags' argument to modify the file reading behavior. The read_binary_file function has been removed as it is no longer necessary. 2020-04-27 getdate This deprecated module is removed. Use the module 'parse-datetime' instead. Instead of #include "getdate.h" write #include "parse-datetime.h" The function get_date is renamed to parse_datetime. 2020-04-27 realloc This deprecated module is removed. Use the module 'realloc-gnu' instead. 2020-04-27 calloc This deprecated module is removed. Use the module 'calloc-gnu' instead. 2020-04-27 malloc This deprecated module is removed. Use the module 'malloc-gnu' instead. 2020-04-27 fnmatch-posix This deprecated module is removed. Use the module 'fnmatch' instead. 2020-04-27 pipe This deprecated module is removed. Use the module 'spawn-pipe' instead. Instead of #include "pipe.h" write #include "spawn-pipe.h" 2020-04-27 getopt This deprecated module is removed. Please choose among getopt-posix and getopt-gnu. getopt-gnu provides "long options" and "options with optional arguments", getopt-posix doesn't. 2020-04-27 rename-dest-slash This deprecated module is removed. Use the module 'rename' instead. 2020-04-27 unictype/bidicategory-* These deprecated modules are removed. Use the modules unictype/bidiclass-* instead. 2020-03-28 dosname On native Windows, OS/2, DOS, IS_RELATIVE_FILE_NAME("c:") now returns false. 2020-03-28 filename The macro IS_ABSOLUTE_PATH is deprecated. Use IS_ABSOLUTE_FILE_NAME instead. The macro IS_PATH_WITH_DIR is deprecated. Use IS_FILE_NAME_WITH_DIR instead. 2020-02-22 fchownat This module no longer defines the functions 'chownat' and 'lchownat'. Program that need these functions should add the module 'chownat' to the list of imported modules. 2020-02-22 fchmodat This module no longer defines the functions 'chmodat' and 'lchmodat'. Program that need these functions should add the module 'chmodat' to the list of imported modules. 2020-02-07 fchmodat When applied to non-symlinks, these now act like lchmod chmod (the BSD behavior, which POSIX requires for fchmodat + AT_SYMLINK_NOFOLLOW), instead of failing (the GNU/Linux behavior through glibc 2.31). Future versions of GNU/Linux are planned to act as per POSIX and BSD. 2020-01-15 gc-pbkdf2-sha1 This module is deprecated. Use gc-pbkdf2 instead. 2019-12-12 dfa Its API now uses ptrdiff_t instead of size_t. 2019-12-11 dfa To call dfamust, one must now call dfaparse without yet calling dfacomp. This fixes a bug introduced on 2018-10-22 that broke dfamust. 2019-12-07 xstrtol This module no longer defines the function xstrtoll 'xstrtol_fatal'. Program that need this function xstrtoimax should add the module 'xstrtol-error' to the list xstrtoumax of imported modules. 2019-05-90 verify verify_true (deprecated 2011-06-15) is removed. 2019-03-16 fatal-signal The function that you pass to at_fatal_signal now takes the signal as argument. 2019-02-02 c-strtod This and related modules no longer define the HAVE_C99_STRTOLD macro. Programs requiring standard strtold should use the strtold module. 2019-01-21 diacrit This module is deprecated. Please use the module uninorm/canonical-decomposition instead. 2018-10-23 backupfile backup_file_rename and find_backup_file_name now take an additional directory file descriptor argument. Pass AT_FDCWD to get the old behavior. 2018-08-18 getpass The include file is changed from "getpass.h" to getpass-gnu . 2018-07-17 hard-locale m4/hard-locale.m4 and gl_HARD_LOCALE are removed. 2018-07-05 renameat2 This module is renamed to 'renameatu' and all its include files and functions are renamed accordingly. 2017-12-30 chdir-safer This module is removed. It was deprecated on 2006-07-17. 2017-11-24 posixtm Previously, callers had to specify either PDS_LEADING_YEAR or PDS_TRAILING_YEAR (but not both). Now, callers should specify only PDS_TRAILING_YEAR; leading years are requested by not specifying PDS_TRAILING_YEAR. 2017-08-14 fcntl-h This module now defaults O_CLOEXEC to a nonzero value instead of to 0, as the 'open' and 'openat' modules now emulate O_CLOEXEC. 2017-07-23 strftime This module is renamed to 'nstrftime'. 2017-05-19 closeout close_stdout longer closes stderr when addresses are being sanitized, as the sanitizer outputs to stderr afterwards. 2017-02-16 binary-io On MS-DOS and OS/2, set_binary_mode now fails on ttys, and sets errno == EINVAL. 2017-01-20 parse-datetime The parse_datetime2 function now takes two more arguments TZ and TZSTRING, for the time zone and its name. 2017-01-16 host-cpu-c-abi On ARM platforms, HOST_CPU_C_ABI is now set to 'arm' or 'armhf' instead of 'armel'. 2017-01-15 localeinfo Change case_folded_counterparts's first arg's type from wchar_t to wint_t, so it now accepts WEOF. 2016-12-17 getlogin The link requirements of these modules are changed getlogin_r from empty to $(LIB_GETLOGIN). 2016-12-13 dfa Remove DFA_CASE_FOLD flag. Now based on RE_ICASE. 2016-11-17 unistr/u32-strmblen The function u32_strmblen can now return -1. 2016-11-17 unistr/u32-strmbtouc The function u32_strmbtouc can now return -1. 2016-08-17 stdbool This no longer supports _Bool for C++. Programs intended to be portable to C++ compilers should use plain 'bool' instead. 2016-04-12 intprops The following macros were removed: TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT TYPE_SIGNED_MAGNITUDE 2015-09-25 c-ctype The following macros were removed: C_CTYPE_CONSECUTIVE_DIGITS C_CTYPE_CONSECUTIVE_LOWERCASE C_CTYPE_CONSECUTIVE_UPPERCASE 2015-09-22 savewd SAVEWD_CHDIR_READABLE constant removed. 2015-07-24 fprintftime Exported functions' time zone arguments are now of strftime type timezone_t (with NULL denoting UTC) instead of type int (with nonzero denoting UTC). These modules now depend on time_rz. 2015-04-24 acl This module no longer defines file_has_acl. Use the new file-has-acl module for that. Using only the latter module makes for fewer link-time dependencies on GNU/Linux. 2015-04-15 acl If your project only uses the file_has_acl() detection routine, then the requirements are potentially reduced by using $LIB_HAS_ACL rather than $LIB_ACL. 2015-04-03 hash hash_insert0 function removed (deprecated in 2011). 2014-10-29 obstack The obstack functions are no longer limited to int sizes; size values are now of type size_t. This changes both the ABI and the API. obstack_blank no longer accepts a negative size to shrink the current object; callers must now use obstack_blank_fast with a "negative" (actually, large positive) size for that. 2014-02-23 diffseq The members too_expensive, lo_minimal and hi_minimal were removed from public structures, and the find_minimal argument was removed from diag and compareseq. 2014-02-11 savedir The savedir and streamsavedir functions have a new argument specifying how to sort the result. The fdsavedir function is removed. 2013-05-04 gnulib-tool CVS checkout of gnulib are no longer supported. 2013-02-08 careadlinkat This module no longer provides the careadlinkatcwd function. 2012-06-26 getopt-posix This module no longer guarantees that option processing is resettable. If your code uses 'optreset' or 'optind = 0;', rewrite it to make only one pass over the argument array. 2012-02-24 streq This module no longer provides the STREQ macro. Use STREQ_OPT instead. 2012-01-10 ignore-value This module no longer provides the ignore_ptr function. It was deprecated a year ago, but existed so briefly before then that it never came into use. Now, the ignore_value function does its job. 2011-11-18 hash This module deprecates the hash_insert0 function using gcc's "deprecated" attribute. Use the better- named hash_insert_if_absent equivalent. 2011-11-04 openat This module no longer provides the mkdirat() function. If you need this function, you now need to request the 'mkdirat' module. 2011-11-04 openat This module no longer provides the fstatat() function. If you need this function, you now need to request the 'fstatat' module. 2011-11-03 openat This module no longer provides the unlinkat() function. If you need this function, you now need to request the 'unlinkat' module. 2011-11-02 openat This module no longer provides the fchmodat() function. If you need this function, you now need to request the 'fchmodat' module. 2011-11-01 alignof This module no longer provides the alignof() macro. Use either alignof_slot() or alignof_type() instead. 2011-11-01 openat This module no longer provides the fchownat() function. If you need this function, you now need to request the 'fchownat' module. 2011-10-03 poll The link requirements of this module are changed from empty to $(LIB_POLL). 2011-09-25 sys_stat This module no longer provides the fstat() function. If you need this function, you now need to request the 'fstat' module. 2011-09-23 signal This module is renamed to 'signal-h'. 2011-09-22 select The link requirements of this module are changed from $(LIBSOCKET) to $(LIB_SELECT). 2011-09-12 fchdir This module no longer overrides the functions opendir() and closedir(), unless the modules 'opendir' and 'closedir' are in use, respectively. If you use opendir(), please use module 'opendir'. If you use closedir(), please use module 'closedir'. 2011-08-04 pathmax The header file "pathmax.h" no longer defines PATH_MAX on GNU/Hurd. Please use one of the methods listed in pathmax.h to ensure your package is portable to GNU/Hurd. 2011-07-24 close This module no longer pulls in the 'fclose' module. If your code creates a socket descriptor using socket() or accept(), then a FILE stream referring to it using fdopen(), then in order to close this stream, you need the 'fclose' module. 2011-07-12 arg-nonnull Renamed to snippet/arg-nonnull. c++defs Renamed to snippet/c++defs. link-warning Renamed to snippet/link-warning. unused-parameter Renamed to snippet/unused-parameter. warn-on-use Renamed to snippet/warn-on-use. 2011-06-15 verify verify_true (V) is deprecated; please use verify_expr (V, 1) instead. 2011-06-05 ansi-c++-opt When a C++ compiler is not found, the variable CXX is now set to "no", not to ":". 2011-05-11 group-member The include file is changed from "group-member.h" to . 2011-05-02 exit The module is removed. It was deprecated on 2010-03-05. Use 'stdlib' directly instead. 2011-04-27 mgetgroups The 'xgetgroups' function has been split into a new 'xgetgroups' module. 2011-04-27 save-cwd This module pulls in fewer dependencies by default; to retain robust handling of directories with an absolute name longer than PATH_MAX, you must now explicitly include the 'getcwd' module. 2011-04-19 close-hook This module has been renamed to 'fd-hook' and generalized. 2011-03-08 regex-quote The last argument is no longer an 'int cflags' but instead a pointer to a previously constructed 'struct regex_quote_spec'. 2011-02-25 dirname These modules no longer put #defines for the dirname-lgpl following symbols into : ISSLASH, backupfile FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX, lstat FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR, openat FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE. remove Applications that need ISSLASH can include the new rmdir header dosname.h. savewd stat unlink 2011-02-14 getloadavg This module no longer #defines C_GETLOADAVG or HAVE_GETLOADAVG, as the application no longer needs to worry about how getloadavg is defined. It no longer defines the obsolete symbol NLIST_NAME_UNION (which should have been internal to the module anyway). Also, support for setgid use has been removed, as nobody seems to be using it; thus GETLOADAVG_PRIVILEGED is no longer #defined and KMEM_GROUP and NEED_SETGID are no longer substituted for. 2011-02-08 stdlib Unless the random_r module is also used, this module no longer guarantees that the following are defined: struct random_data, RAND_MAX, random_r, srandom_r, initstate_r, setstate_r. 2011-02-08 wctype-h This module no longer provides the iswblank() function. If you need this function, you now need to request the 'iswblank' module. 2011-02-07 wctype This module is renamed to wctype-h. 2011-01-18 multiarch This no longer #defines AA_APPLE_UNIVERSAL_BUILD; instead, use the shell var APPLE_UNIVERSAL_BUILD. 2010-12-10 pipe This module is renamed to spawn-pipe. The include file is renamed to "spawn-pipe.h". 2010-10-05 getdate This module is deprecated. Please use the new parse-datetime module for the replacement function parse_datetime(), or help us write getdate-posix for getdate(). Also, the header "getdate.h" has been renamed "parse-datetime.h", and doc/getdate.texi to doc/parse-datetime.texi. 2010-09-29 sys_wait This module no longer provides the waitpid() function. If you need this function, you now need to request the 'waitpid' module. 2010-09-17 utimens The function gl_futimens is removed, and its signature has been migrated to fdutimens. Callers of gl_futimens should change function name, and callers of fdutimens should swap parameter order. 2010-09-17 fdutimensat This function has a new signature: the fd now comes first instead of the dir/name pair, and a new atflag parameter is added at the end. Old code should rearrange parameters, and pass 0 for atflag. 2010-09-13 regex The module is not guaranteeing anymore support for 64-bit regoff_t on 64-bit systems. The size of regoff_t will always be 32-bit unless the program is being configured --with-included-regex. This may change again in the future once glibc provides this feature as well. 2010-09-12 savedir The fdsavedir function is now deprecated. 2010-09-10 fcntl-h This module now defaults O_CLOEXEC to 0, and it defaults O_EXEC and O_SEARCH to O_RDONLY. Use "#if O_CLOEXEC" instead of "#ifdef O_CLOEXEC". 2010-08-28 realloc This module is deprecated. Use 'realloc-gnu' instead. It will be removed 2012-01-01. 2010-08-28 calloc This module is deprecated. Use 'calloc-gnu' instead. It will be removed 2012-01-01. 2010-08-28 malloc This module is deprecated. Use 'malloc-gnu' instead. It will be removed 2012-01-01. 2010-08-14 memxfrm This module is renamed to amemxfrm. The include file is renamed to "amemxfrm.h". The function is renamed to amemxfrm. 2010-08-09 symlinkat This module now only provides symlinkat; use the new module 'readlinkat' if needed. 2010-07-31 ansi-c++-opt If Autoconf >= 2.66 is used, the 'configure' option is now called --disable-c++ rather than --disable-cxx. 2010-04-02 maintainer-makefile The macro _prohibit_regexp has been revamped into a new macro _sc_search_regexp; custom syntax checks in your cfg.mk will need to be rewritten. 2010-03-28 lib-ignore This module now provides a variable IGNORE_UNUSED_LIBRARIES_CFLAGS that you should add to LDFLAGS (when linking C programs only) or CFLAGS yourself. It is no longer added to LDFLAGS automatically. 2010-03-18 pty This module now only declares the pty.h header. Use the new modules 'forkpty' or 'openpty' to get the functions that were previously provided. 2010-03-05 exit This module is deprecated, use 'stdlib' directly instead. It will be removed 2011-01-01. 2009-12-13 sublist The module does not define functions any more that call xalloc_die() in out-of-memory situations. Use module 'xsublist' and include file "gl_xsublist.h" instead. 2009-12-13 list The module does not define functions any more that call xalloc_die() in out-of-memory situations. Use module 'xlist' and include file "gl_xlist.h" instead. 2009-12-13 oset The module does not define functions any more that call xalloc_die() in out-of-memory situations. Use module 'xoset' and include file "gl_xoset.h" instead. 2009-12-10 * Most source code files have been converted to indentation by spaces (rather than tabs). Patches of gnulib source code needs to be updated. 2009-12-09 link-warning The Makefile rules that use $(LINK_WARNING_H) now must contain an explicit dependency on $(LINK_WARNING_H). 2009-11-12 getgroups These functions now use a signature of gid_t, getugroups rather than GETGROUPS_T. This probably has no effect except on very old platforms. 2009-11-04 tempname The gen_tempname function takes an additional 'suffixlen' argument. You can safely pass 0. 2009-11-04 nproc The num_processors function now takes an argument. 2009-11-02 inet_pton The use of this module now requires linking with $(INET_PTON_LIB). 2009-11-02 inet_ntop The use of this module now requires linking with $(INET_NTOP_LIB). 2009-10-10 utimens The use of this module now requires linking with $(LIB_CLOCK_GETTIME). 2009-09-16 canonicalize-lgpl The include file is changed from "canonicalize.h" to . 2009-09-04 link-follow The macro LINK_FOLLOWS_SYMLINK is now tri-state, rather than only defined to 1. 2009-09-03 openat The include files are standardized to POSIX 2008. For openat, include ; for fchmodat, fstatat, and mkdirat, include ; for fchownat and unlinkat, include . For all other functions provided by this module, continue to include "openat.h". 2009-08-30 striconveh The functions mem_cd_iconveh and str_cd_iconveh now take an 'iconveh_t *' argument instead of three iconv_t arguments. 2009-08-23 tempname The gen_tempname function takes an additional 'flags' argument. You can safely pass 0. 2009-08-12 getopt This module is deprecated. Please choose among getopt-posix and getopt-gnu. getopt-gnu provides "long options" and "options with optional arguments", getopt-posix doesn't. 2009-06-25 fpurge The include file is changed from "fpurge.h" to . 2009-04-26 modules/uniconv/u8-conv-from-enc modules/uniconv/u16-conv-from-enc modules/uniconv/u32-conv-from-enc The calling convention of the functions u*_conv_from_encoding is changed. 2009-04-26 modules/uniconv/u8-conv-to-enc modules/uniconv/u16-conv-to-enc modules/uniconv/u32-conv-to-enc The calling convention of the functions u*_conv_to_encoding is changed. 2009-04-24 maintainer-makefile The maint.mk file was copied from coreutils, and the old coverage/gettext/indent rules were re-added. If you used 'make syntax-check' this will add several new checks. If some new check is annoying, add the name of the checks to 'local-checks-to-skip' in your cfg.mk. 2009-04-01 visibility Renamed to lib-symbol-visibility. 2009-04-01 ld-version-script Renamed to lib-symbol-versions. 2009-03-20 close The substituted variable LIB_CLOSE is removed. 2009-03-05 filevercmp Move hidden files up in ordering. 2009-01-22 c-strtod This function no longer calls xalloc_die(). If c-strtold you want to exit the program in case of out-of- memory, the calling function needs to arrange for it, like this: errno = 0; val = c_strtod (...); if (val == 0 && errno == ENOMEM) xalloc_die (); 2009-01-17 relocatable-prog In the Makefile.am or Makefile.in, you now also need to set RELOCATABLE_STRIP = :. 2008-12-22 getaddrinfo When using this module, you now need to link with canon-host $(GETADDRINFO_LIB). 2008-12-21 mbiter The header files "mbiter.h", "mbuiter.h", mbuiter "mbfile.h" can now be included without checking mbfile HAVE_MBRTOWC. The macro HAVE_MBRTOWC will no longer be defined by these modules in a year. If you want to continue to use it, you need to invoke AC_FUNC_MBRTOWC yourself. 2008-11-11 warnings This module subsumes the file m4/warning.m4 which was removed. 2008-10-20 lstat The include file is changed from "lstat.h" to . 2008-10-20 getaddrinfo The include file is changed from "getaddrinfo.h" to . 2008-10-19 isnanf The include file is changed from "isnanf.h" to . isnand The include file is changed from "isnand.h" to . isnanl The include file is changed from "isnanl.h" to . 2008-10-18 lchmod The include file is changed from "lchmod.h" to . 2008-10-18 dirfd The include file is changed from "dirfd.h" to . 2008-10-18 euidaccess The include file is changed from "euidaccess.h" to . 2008-10-18 getdomainname The include file is changed from "getdomainname.h" to . 2008-09-28 sockets When using this module, you now need to link with $(LIBSOCKET). 2008-09-24 sys_select The limitation on 'select', introduced 2008-09-23, was removed. sys_select now includes a select wrapper for Winsock. The wrapper expects socket and file descriptors to be compatible as arranged by the sys_socket on MinGW. 2008-09-23 sys_socket Under Windows (MinGW), the module now adds wrappers around Winsock functions, so that socket descriptors are now compatible with file descriptors. In general, this change will simply improve your code's portability between POSIX platforms and Windows. In particular, you will be able to use ioctl and close instead of ioctlsocket and closesocket, and test errno instead of WSAGetLastError (). On the other hand, you have to audit your code to remove usage of these Winsock-specific functions. This change does not remove the need to call the gl_sockets_startup function from the sockets gnulib module. Also, for now select is disabled when you include the sys_socket module; while the functionality will be restored soon, for efficiency it is suggested to use the poll system poll system call and gnulib module instead. 2008-09-13 EOVERFLOW The module is removed. Use module errno instead. 2008-09-01 filename The module does not define the function concatenated_filename any more. To get an equivalent function, use function xconcatenated_filename from module 'xconcat-filename'. 2008-08-31 havelib On Solaris, when searching for 64-bit mode libraries the directory $prefix/lib is now ignored. Instead the directory $prefix/lib/64 is searched. You may need to create a symbolic link for $prefix/lib/64 if you have 64-bit libraries installed in $prefix/lib. 2008-08-19 strverscmp The include file is changed from "strverscmp.h" to . 2008-08-14 lock The include file is changed from "lock.h" to "glthread/lock.h". tls The include file is changed from "tls.h" to "glthread/tls.h". 2008-07-17 c-stack The module now requires the addition of $(LIBCSTACK) or $(LTLIBCSTACK) in Makefile.am, since it may depend on linking with libsigsegv. 2008-07-07 isnanf-nolibm The include file is changed from "isnanf.h" to "isnanf-nolibm.h". isnand-nolibm The include file is changed from "isnand.h" to "isnand-nolibm.h". 2008-06-10 execute The execute function takes an additional termsigp argument. Passing termsigp = NULL is ok. wait-process The wait_subprocess function takes an additional termsigp argument. Passing termsigp = NULL is ok. 2008-05-10 linebreak The module is split into several modules unilbrk/*. The include file is changed from "linebreak.h" to "unilbrk.h". Two functions are renamed: mbs_possible_linebreaks -> ulc_possible_linebreaks mbs_width_linebreaks -> ulc_width_linebreaks 2008-04-28 rpmatch The include file is now . 2008-04-28 inet_ntop The include file is changed from "inet_ntop.h" to . 2008-04-28 inet_pton The include file is changed from "inet_pton.h" to . 2008-03-06 freadahead The return value's computation has changed. It now increases by 1 after ungetc. 2008-01-26 isnan-nolibm The module name is changed from isnan-nolibm to isnand-nolibm. The include file is changed from "isnan.h" to "isnand.h". The function that it defines is changed from isnan() to isnand(). 2008-01-14 strcasestr This module now replaces worst-case inefficient implementations; clients that use controlled needles and thus do not care about worst-case efficiency should use the new strcasestr-simple module instead for smaller code size. 2008-01-09 alloca-opt Now defines HAVE_ALLOCA_H only when the system supplies an . Gnulib-using code is now expected to include unconditionally. Non-gnulib-using code can continue to include only if HAVE_ALLOCA_H is defined. 2008-01-08 memmem This module now replaces worst-case inefficient implementations; clients that use controlled needles and thus do not care about worst-case efficiency should use the new memmem-simple module instead for smaller code size. 2007-12-24 setenv The include file is changed from "setenv.h" to . Also, the unsetenv function is no longer declared in this module; use the 'unsetenv' module if you need it. 2007-12-03 getpagesize The include file is changed from "getpagesize.h" to . 2007-12-03 strcase The include file is changed from to . 2007-10-07 most modules The license for most modules has changed from GPLv2+ to GPLv3+, and from LGPLv2+ to LGPLv3+. A few modules are still under LGPLv2+; see the module description for the applicable license. 2007-09-01 linebreak "linebreak.h" no longer declares the functions locale_charset, uc_width, u{8,16,32}_width. Use "uniwidth.h" to get these functions declared. 2007-08-28 areadlink-with-size Renamed from mreadlink-with-size. Function renamed: mreadlink_with_size -> areadlink_with_size. 2007-08-22 getdelim, getline The include file is changed from "getdelim.h" and "getline.h" to the POSIX 200x . 2007-08-18 idcache Now provides prototypes in "idcache.h". 2007-08-10 xstrtol The STRTOL_FATAL_ERROR macro is removed. Use the new xstrtol_fatal function instead. 2007-08-04 human The function human_options no longer reports an error to standard error; that is now the caller's responsibility. It returns an error code of type enum strtol_error instead of the integer option value, and stores the option value via a new int * argument. xstrtol The first two arguments of STRTOL_FATAL_ERROR are now an option name and option argument instead of an option argument and a type string, STRTOL_FAIL_WARN is removed. 2007-07-14 gpl, lgpl New Texinfo versions with no sectioning commands. 2007-07-10 version-etc Output now mentions GPLv3+, not GPLv2+. Use gnulib-tool --local-dir to override this. 2007-07-07 wcwidth The include file is changed from "wcwidth.h" to . 2007-07-02 gpl, lgpl Renamed to gpl-2.0 and lgpl-2.1 respectively. (There is also a new module gpl-3.0.) 2007-06-16 lchown The include file is changed from "lchown.h" to . 2007-06-09 xallocsa Renamed to xmalloca. The include file "xallocsa.h" was renamed to "xmalloca.h". The function was renamed: xallocsa -> xmalloca 2007-06-09 allocsa Renamed to malloca. The include file "allocsa.h" was renamed to "malloca.h". The function-like macros were renamed: allocsa -> malloca freesa -> freea 2007-05-20 utimens Renamed futimens to gl_futimens, to avoid conflict with the glibc-2.6-introduced function that has a different signature. 2007-05-01 sigprocmask The module now depends on signal, so replace #include "sigprocmask.h" with #include 2007-04-06 gettext The macro HAVE_LONG_DOUBLE is no longer set. You can replace all its uses with 1, i.e. assume 'long double' as a type exists. 2007-04-01 arcfour Renamed to crypto/arcfour. arctwo Renamed to crypto/arctwo. des Renamed to crypto/des. gc Renamed to crypto/gc. gc-arcfour Renamed to crypto/gc-arcfour. gc-arctwo Renamed to crypto/gc-arctwo. gc-des Renamed to crypto/gc-des. gc-hmac-md5 Renamed to crypto/gc-hmac-md5. gc-hmac-sha1 Renamed to crypto/gc-hmac-sha1. gc-md2 Renamed to crypto/gc-md2. gc-md4 Renamed to crypto/gc-md4. gc-md5 Renamed to crypto/gc-md5. gc-pbkdf2-sha1 Renamed to crypto/gc-pbkdf2-sha1. gc-random Renamed to crypto/gc-random. gc-rijndael Renamed to crypto/gc-rijndael. gc-sha1 Renamed to crypto/gc-sha1. hmac-md5 Renamed to crypto/hmac-md5. hmac-sha1 Renamed to crypto/hmac-sha1. md2 Renamed to crypto/md2. md4 Renamed to crypto/md4. md5 Renamed to crypto/md5. rijndael Renamed to crypto/rijndael. sha1 Renamed to crypto/sha1. 2007-03-27 vasprintf The module now depends on stdio, so replace #include "vasprintf.h" with #include 2007-03-24 tsearch The include file is changed from "tsearch.h" to . 2007-03-24 utf8-ucs4 The include file is changed from "utf8-ucs4.h" to "unistr.h". utf8-ucs4-unsafe The include file is changed from "utf8-ucs4-unsafe.h" to "unistr.h". utf16-ucs4 The include file is changed from "utf16-ucs4.h" to "unistr.h". utf16-ucs4-unsafe The include file is changed from "utf16-ucs4-unsafe.h" to "unistr.h". ucs4-utf8 The include file is changed from "ucs4-utf8.h" to "unistr.h". ucs4-utf16 The include file is changed from "ucs4-utf16.h" to "unistr.h". 2007-03-19 iconvme The module is removed. Use module striconv instead: iconv_string -> str_iconv iconv_alloc -> str_cd_iconv (with reversed arguments) 2007-03-15 list The functions gl_list_create_empty and array-list gl_list_create now take an extra fourth argument. carray-list You can pass NULL. linked-list linkedhash-list avltree-list rbtree-list avltreehash-list rbtreehash-list 2007-03-15 oset The function gl_oset_create_empty now takes a array-oset third argument. You can pass NULL. avltree-oset rbtree-oset 2007-03-12 des The types and functions in lib/des.h have been gc-des renamed: des_ctx -> gl_des_ctx, tripledes_ctx -> gl_3des_ctx, des_is_weak_key -> gl_des_is_weak_key, des_setkey -> gl_des_setkey, des_makekey -> gl_des_makekey, des_ecb_crypt -> gl_des_ecb_crypt, des_ecb_encrypt -> gl_des_ecb_encrypt, des_ecb_decrypt -> gl_des_ecb_decrypt, tripledes_set2keys -> gl_3des_set2keys, tripledes_set3keys -> gl_3des_set3keys, tripledes_makekey -> gl_3des_makekey, tripledes_ecb_crypt -> gl_3des_ecb_crypt. Also consider using the "gc-des" buffer instead of using the "des" module directly. 2007-02-28 xreadlink The module xreadlink was renamed to xreadlink-with-size. The function was renamed: xreadlink -> xreadlink_with_size. 2007-02-18 exit The modules now depend on stdlib, so replace mkdtemp #include "exit.h" mkstemp #include "mkdtemp.h" #include "mkstemp.h" with #include 2007-01-26 strdup The module now depends on string, so replace #include "strdup.h" with #include # This is for Emacs. # Local Variables: # coding: utf-8 # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: gnulib-20210822~d383792/README000066400000000000000000000002671411057217300151640ustar00rootroot00000000000000Please create and read the docs with $ cd doc $ make gnulib.html $ xdg-open gnulib.html or read the online manual at https://www.gnu.org/software/gnulib/manual/gnulib.html gnulib-20210822~d383792/STATUS-libposix000066400000000000000000000103601411057217300170740ustar00rootroot00000000000000Status for libposix =================== This file documents the status of work-in-progress. No ChangeLog entries are needed for this file. Status for the libposix branch ------------------------------ Bruce Korb says: I think a real big step in libposix is to get a little experience with it. There are also some few little nits pointed out in the discussions that need some careful consideration, but some experience in using it would be good, too. The intended/expected usage is along the lines of: 1. configure, build and install the thing. Perhaps from: http://autogen.sourceforge.net/data/ or roll your own, but the distribution should be there, I think. 2. fiddle a project to detect that it is "sufficiently recent" to cover the needs of this unnamed project. That is an interesting issue, though: the concept behind "configure" is that you do feature tests rather than version testing. However, if you choose to not test the version of libposix and test the features you need of libposix, then I have an extremely difficult time trying to understand the point of libposix -- you are back to running a bunch of feature tests that take too long. Testing for a libposix current as of some marker (version number or date) seems right to me, though there are some caveats to consider regarding "retired" POSIX features. Anyway, the "fiddle a project" should boil down to testing for libposix in some way and then dying if it is not up to snuff. 3. configure, build, test, install and test installation of said project. TODO list for master -------------------- Bruno Haible says: 1) ... 7) proposed by Gary in the thread starting at [PATCH 0/7] contents of topic/libposix for merge to master in 1) Allow generate header files to coexist without shadowing each other. Discussion: Still missing: dealing with include_next and old compilers, cf. 2) Allow using libgnu's file name in module descriptions. Discussion: Discussion: libposix needs to install only selected headers, not all of them. Let the script look at the 'Include:' section of each module description. 4) Module libposix Discussion: More discussion needed 5) Installable headers Discussion: Patch to be rewritten to use nobase_nodist_include_HEADERS, also need to add an Automake conditional to distinguish libposix from other projects. Also see whether the Automake bug can be fixed. 6) libposix subdirectory Discussion: 7) use git-version-gen for version numbering Discussion: Patch to be revised. 8) Licensing Status: A majority of the issues have been handled. Obsolete modules (free, memcpy) can be ignored. To be done: getcwd faccessat fdopendir linkat mkfifoat openat readlinkat renameat symlinkat utimensat 9) Versioning Status: No real plan exists. gnulib-20210822~d383792/build-aux/000077500000000000000000000000001411057217300161715ustar00rootroot00000000000000gnulib-20210822~d383792/build-aux/announce-gen000077500000000000000000000413571411057217300205060ustar00rootroot00000000000000#!/bin/sh #! -*-perl-*- # Generate a release announcement message. # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This 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 . # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2021-08-04 09:17'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. my $copyright_year = '2021'; use strict; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; my %valid_release_types = map {$_ => 1} qw (alpha beta stable); my @archive_suffixes = qw (tar.gz tar.bz2 tar.lz tar.lzma tar.xz); my $srcdir = '.'; sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { my @types = sort keys %valid_release_types; print $STREAM < = C Compute the sizes of the C<@file> and return them as a hash. Return C if one of the computation failed. =cut sub sizes (@) { my (@file) = @_; my $fail = 0; my %res; foreach my $f (@file) { my $cmd = "du -h $f"; my $t = `$cmd`; # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS $@ and (warn "command failed: '$cmd'\n"), $fail = 1; chomp $t; $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/; $res{$f} = $t; } return $fail ? undef : %res; } =item C dedicated to the list of <@file>, which sizes are stored in C<%size>, and which are available from the C<@url>. =cut sub print_locations ($\@\%@) { my ($title, $url, $size, @file) = @_; print "Here are the $title:\n"; foreach my $url (@{$url}) { for my $file (@file) { print " $url/$file"; print " (", $$size{$file}, ")" if exists $$size{$file}; print "\n"; } } print "\n"; } =item C. =cut sub print_checksums (@) { my (@file) = @_; print "Here are the SHA1 and SHA256 checksums:\n"; print "\n"; use Digest::file qw(digest_file_hex digest_file_base64); foreach my $f (@file) { print digest_file_hex($f, "SHA-1"), " $f\n"; print digest_file_base64($f, "SHA-256"), " $f\n"; } print "\nThe SHA256 checksum is base64 encoded, instead of the\n"; print "hexadecimal encoding that most checksum tools default to.\n\n"; } =item C addressing changes between versions C<$prev_version> and C<$curr_version>. =cut sub print_news_deltas ($$$) { my ($news_file, $prev_version, $curr_version) = @_; my $news_name = $news_file; $news_name =~ s|^\Q$srcdir\E/||; print "\n$news_name\n\n"; # Print all lines from $news_file, starting with the first one # that mentions $curr_version up to but not including # the first occurrence of $prev_version. my $in_items; my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/; my $found_news; open NEWS, '<', $news_file or die "$ME: $news_file: cannot open for reading: $!\n"; while (defined (my $line = )) { if ( ! $in_items) { # Match lines like these: # * Major changes in release 5.0.1: # * Noteworthy changes in release 6.6 (2006-11-22) [stable] $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o or next; $in_items = 1; print $line; } else { # This regexp must not match version numbers in NEWS items. # For example, they might well say "introduced in 4.5.5", # and we don't want that to match. $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o and last; print $line; $line =~ /\S/ and $found_news = 1; } } close NEWS; $in_items or die "$ME: $news_file: no matching lines for '$curr_version'\n"; $found_news or die "$ME: $news_file: no news item found for '$curr_version'\n"; } sub print_changelog_deltas ($$) { my ($package_name, $prev_version) = @_; # Print new ChangeLog entries. # First find all CVS-controlled ChangeLog files. use File::Find; my @changelog; find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS' and push @changelog, $File::Find::name}}, '.'); # If there are no ChangeLog files, we're done. @changelog or return; my %changelog = map {$_ => 1} @changelog; # Reorder the list of files so that if there are ChangeLog # files in the specified directories, they're listed first, # in this order: my @dir = qw ( . src lib m4 config doc ); # A typical @changelog array might look like this: # ./ChangeLog # ./po/ChangeLog # ./m4/ChangeLog # ./lib/ChangeLog # ./doc/ChangeLog # ./config/ChangeLog my @reordered; foreach my $d (@dir) { my $dot_slash = $d eq '.' ? $d : "./$d"; my $target = "$dot_slash/ChangeLog"; delete $changelog{$target} and push @reordered, $target; } # Append any remaining ChangeLog files. push @reordered, sort keys %changelog; # Remove leading './'. @reordered = map { s!^\./!!; $_ } @reordered; print "\nChangeLog entries:\n\n"; # print join ("\n", @reordered), "\n"; $prev_version =~ s/\./_/g; my $prev_cvs_tag = "\U$package_name\E-$prev_version"; my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered"; open DIFF, '-|', $cmd or die "$ME: cannot run '$cmd': $!\n"; # Print two types of lines, making minor changes: # Lines starting with '+++ ', e.g., # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247 # and those starting with '+'. # Don't print the others. my $prev_printed_line_empty = 1; while (defined (my $line = )) { if ($line =~ /^\+\+\+ /) { my $separator = "*"x70 ."\n"; $line =~ s///; $line =~ s/\s.*//; $prev_printed_line_empty or print "\n"; print $separator, $line, $separator; } elsif ($line =~ /^\+/) { $line =~ s///; print $line; $prev_printed_line_empty = ($line =~ /^$/); } } close DIFF; # The exit code should be 1. # Allow in case there are no modified ChangeLog entries. $? == 256 || $? == 128 or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n"; } sub get_tool_versions ($$) { my ($tool_list, $gnulib_version) = @_; @$tool_list or return (); my $fail; my @tool_version_pair; foreach my $t (@$tool_list) { if ($t eq 'gnulib') { push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version; next; } # Assume that the last "word" on the first line of # 'tool --version' output is the version string. my ($first_line, undef) = split ("\n", `$t --version`); if ($first_line =~ /.* (\d[\w.-]+)$/) { $t = ucfirst $t; push @tool_version_pair, "$t $1"; } else { defined $first_line and $first_line = ''; warn "$t: unexpected --version output\n:$first_line"; $fail = 1; } } $fail and exit 1; return @tool_version_pair; } { # Use the C locale so that, for instance, "du" does not # print "1,2" instead of "1.2", which would confuse our regexps. $ENV{LC_ALL} = "C"; my $mail_headers; my $release_type; my $package_name; my $prev_version; my $curr_version; my $gpg_key_id; my @url_dir_list; my @news_file; my $bootstrap_tools; my $gnulib_version; my $print_checksums_p = 1; # Reformat the warnings before displaying them. local $SIG{__WARN__} = sub { my ($msg) = @_; # Warnings from GetOptions. $msg =~ s/Option (\w)/option --$1/; warn "$ME: $msg"; }; GetOptions ( 'mail-headers=s' => \$mail_headers, 'release-type=s' => \$release_type, 'package-name=s' => \$package_name, 'previous-version=s' => \$prev_version, 'current-version=s' => \$curr_version, 'gpg-key-id=s' => \$gpg_key_id, 'url-directory=s' => \@url_dir_list, 'news=s' => \@news_file, 'srcdir=s' => \$srcdir, 'bootstrap-tools=s' => \$bootstrap_tools, 'gnulib-version=s' => \$gnulib_version, 'print-checksums!' => \$print_checksums_p, 'archive-suffix=s' => \@archive_suffixes, help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n"; print "License GPLv3+: GNU GPL version 3 or later .\n" . "This is free software: you are free to change and redistribute it.\n" . "There is NO WARRANTY, to the extent permitted by law.\n"; print "\n"; my $author = "Jim Meyering"; print "Written by $author.\n"; exit }, ) or usage 1; my $fail = 0; # Ensure that each required option is specified. $release_type or (warn "release type not specified\n"), $fail = 1; $package_name or (warn "package name not specified\n"), $fail = 1; $prev_version or (warn "previous version string not specified\n"), $fail = 1; $curr_version or (warn "current version string not specified\n"), $fail = 1; $gpg_key_id or (warn "GnuPG key ID not specified\n"), $fail = 1; @url_dir_list or (warn "URL directory name(s) not specified\n"), $fail = 1; my @tool_list = split ',', $bootstrap_tools if $bootstrap_tools; grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version and (warn "when specifying gnulib as a tool, you must also specify\n" . "--gnulib-version=V, where V is the result of running git describe\n" . "in the gnulib source directory.\n"), $fail = 1; !$release_type || exists $valid_release_types{$release_type} or (warn "'$release_type': invalid release type\n"), $fail = 1; @ARGV and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"), $fail = 1; $fail and usage 1; my $my_distdir = "$package_name-$curr_version"; my $xd = "$package_name-$prev_version-$curr_version.xdelta"; my @candidates = map { "$my_distdir.$_" } @archive_suffixes; my @tarballs = grep {-f $_} @candidates; @tarballs or die "$ME: none of " . join(', ', @candidates) . " were found\n"; my @sizable = @tarballs; -f $xd and push @sizable, $xd; my %size = sizes (@sizable); %size or exit 1; my $headers = ''; if (defined $mail_headers) { ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g; $headers .= "\n"; } # The markup is escaped as <\# so that when this script is sent by # mail (or part of a diff), Gnus is not triggered. print < FIXME: put comments here EOF if (@url_dir_list == 1 && @tarballs == 1) { # When there's only one tarball and one URL, use a more concise form. my $m = "$url_dir_list[0]/$tarballs[0]"; print "Here are the compressed sources and a GPG detached signature[*]:\n" . " $m\n" . " $m.sig\n\n"; } else { print_locations ("compressed sources", @url_dir_list, %size, @tarballs); -f $xd and print_locations ("xdelta diffs (useful? if so, " . "please tell bug-gnulib\@gnu.org)", @url_dir_list, %size, $xd); my @sig_files = map { "$_.sig" } @tarballs; print_locations ("GPG detached signatures[*]", @url_dir_list, %size, @sig_files); } if ($url_dir_list[0] =~ "gnu\.org") { print "Use a mirror for higher download bandwidth:\n"; if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!) { (my $m = "$url_dir_list[0]/$tarballs[0]") =~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!; print " $m\n" . " $m.sig\n\n"; } else { print " https://www.gnu.org/order/ftp.html\n\n"; } } $print_checksums_p and print_checksums (@sizable); print <. # # This 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin | msys) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. # Originally written by Paul Eggert. The canonical version of this # script is maintained as build-aux/bootstrap in gnulib, however, to # be useful to your project, you should place a copy of it under # version control in the top-level directory of your project. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. # Please report bugs or propose patches to bug-gnulib@gnu.org. nl=' ' # Ensure file names are sorted consistently across platforms. LC_ALL=C export LC_ALL # Ensure that CDPATH is not set. Otherwise, the output from cd # would cause trouble in at least one use below. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH local_gl_dir=gl # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" me=$0 default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git usage() { cat <&2 } # warn_ WORD1... warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) warnf_ '%s\n' "$*";; *) (IFS=' '; warn_ "$@");; esac } # die WORD1... die() { warn_ "$@"; exit 1; } # Configuration. # Name of the Makefile.am gnulib_mk=gnulib.mk # List of gnulib modules needed. gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= : ${AUTOPOINT=autopoint} : ${AUTORECONF=autoreconf} # A function to be called for each unrecognized option. Returns 0 if # the option in $1 has been processed by the function. Returns 1 if # the option has not been processed by the function. Override it via # your own definition in bootstrap.conf bootstrap_option_hook() { return 1; } # A function to be called in order to print the --help information # corresponding to user-defined command-line options. bootstrap_print_option_usage_hook() { :; } # A function to be called right after gnulib-tool is run. # Override it via your own definition in bootstrap.conf. bootstrap_post_import_hook() { :; } # A function to be called after everything else in this script. # Override it via your own definition in bootstrap.conf. bootstrap_epilogue() { :; } # The command to download all .po files for a specified domain into a # specified directory. Fill in the first %s with the destination # directory and the second with the domain name. po_download_command_format=\ "wget --mirror --level=1 -nd -nv -A.po -P '%s' \ https://translationproject.org/latest/%s/" # Prefer a non-empty tarname (4th argument of AC_INIT if given), else # fall back to the package name (1st argument with munging). extract_package_name=' /^AC_INIT(\[*/{ s/// /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{ s//\1/ s/[],)].*// p q } s/[],)].*// s/^GNU // y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g p } ' package=$(${AUTOCONF:-autoconf} --trace AC_INIT:\$4 configure.ac 2>/dev/null) if test -z "$package"; then package=$(sed -n "$extract_package_name" configure.ac) \ || die 'cannot find package name in configure.ac' fi gnulib_name=lib$package build_aux=build-aux source_base=lib m4_base=m4 doc_base=doc tests_base=tests gnulib_extra_files=" build-aux/install-sh build-aux/mdate-sh build-aux/texinfo.tex build-aux/depcomp build-aux/config.guess build-aux/config.sub doc/INSTALL " # Additional gnulib-tool options to use. Use "\newline" to break lines. gnulib_tool_option_extras= # Other locale categories that need message catalogs. EXTRA_LOCALE_CATEGORIES= # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS='\\\ --flag=_:1:pass-c-format\\\ --flag=N_:1:pass-c-format\\\ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ ' # Package bug report address and copyright holder for gettext files COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. checkout_only_file=README-hacking # Whether to use copies instead of symlinks. copy=false # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want # those files to be generated in directories like lib/, m4/, and po/. # Or set it to 'auto' to make this script select which to use based # on which version control system (if any) is used in the source directory. vc_ignore=auto # Set this to true in bootstrap.conf to enable --bootstrap-sync by # default. bootstrap_sync=false # Use git to update gnulib sources use_git=true check_exists() { if test "$1" = "--verbose"; then ($2 --version /dev/null 2>&1 if test $? -ge 126; then # If not found, run with diagnostics as one may be # presented with env variables to set to find the right version ($2 --version /dev/null 2>&1 fi test $? -lt 126 } # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, # otherwise find the first of the NAMES that can be run. # If found, set ENVVAR to the program name, die otherwise. # # FIXME: code duplication, see also gnu-web-doc-update. find_tool () { find_tool_envvar=$1 shift find_tool_names=$@ eval "find_tool_res=\$$find_tool_envvar" if test x"$find_tool_res" = x; then for i; do if check_exists $i; then find_tool_res=$i break fi done fi if test x"$find_tool_res" = x; then warn_ "one of these is required: $find_tool_names;" die "alternatively set $find_tool_envvar to a compatible tool" fi eval "$find_tool_envvar=\$find_tool_res" eval "export $find_tool_envvar" } # Override the default configuration, if necessary. # Make sure that bootstrap.conf is sourced from the current directory # if we were invoked as "sh bootstrap". case "$0" in */*) test -r "$0.conf" && . "$0.conf" ;; *) test -r "$0.conf" && . ./"$0.conf" ;; esac if test "$vc_ignore" = auto; then vc_ignore= test -d .git && vc_ignore=.gitignore test -d CVS && vc_ignore="$vc_ignore .cvsignore" fi if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then use_gnulib=false else use_gnulib=true fi # Translate configuration into internal form. # Parse options. for option do case $option in --help) usage exit;; --version) set -e echo "bootstrap $scriptversion" echo "$copyright" exit 0 ;; --gnulib-srcdir=*) GNULIB_SRCDIR=${option#--gnulib-srcdir=};; --skip-po) SKIP_PO=t;; --force) checkout_only_file=;; --copy) copy=true;; --bootstrap-sync) bootstrap_sync=true;; --no-bootstrap-sync) bootstrap_sync=false;; --no-git) use_git=false;; *) bootstrap_option_hook $option || die "$option: unknown option";; esac done $use_git || test -d "$GNULIB_SRCDIR" \ || die "Error: --no-git requires --gnulib-srcdir" if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then die "Bootstrapping from a non-checked-out distribution is risky." fi # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" } # If $STR is not already on a line by itself in $FILE, insert it at the start. # Entries are inserted at the start of the ignore list to ensure existing # entries starting with ! are not overridden. Such entries support # whitelisting exceptions after a more generic blacklist pattern. insert_if_absent() { file=$1 str=$2 test -f $file || touch $file test -r $file || die "Error: failed to read ignore file: $file" duplicate_entries=$(gitignore_entries $file | sort | uniq -d) if [ "$duplicate_entries" ] ; then die "Error: Duplicate entries in $file: " $duplicate_entries fi linesold=$(gitignore_entries $file | wc -l) linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) if [ $linesold != $linesnew ] ; then { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ || die "insert_if_absent $file $str: failed" fi } # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with # insert_if_absent. insert_vc_ignore() { vc_ignore_file="$1" pattern="$2" case $vc_ignore_file in *.gitignore) # A .gitignore entry that does not start with '/' applies # recursively to subdirectories, so prepend '/' to every # .gitignore entry. pattern=$(echo "$pattern" | sed s,^,/,);; esac insert_if_absent "$vc_ignore_file" "$pattern" } # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ >/dev/null && found_aux_dir=yes grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ >/dev/null && found_aux_dir=yes test $found_aux_dir = yes \ || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" # If $build_aux doesn't exist, create it now, otherwise some bits # below will malfunction. If creating it, also mark it as ignored. if test ! -d $build_aux; then mkdir $build_aux for dot_ig in x $vc_ignore; do test $dot_ig = x && continue insert_vc_ignore $dot_ig $build_aux done fi # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. sort_ver() { # sort -V is not generally available ver1="$1" ver2="$2" # split on '.' and compare each component i=1 while : ; do p1=$(echo "$ver1" | cut -d. -f$i) p2=$(echo "$ver2" | cut -d. -f$i) if [ ! "$p1" ]; then echo "$1 $2" break elif [ ! "$p2" ]; then echo "$2 $1" break elif [ ! "$p1" = "$p2" ]; then if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison echo "$2 $1" elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison echo "$1 $2" else # numeric, then lexicographic comparison lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) if [ "$lp" = "$p2" ]; then echo "$1 $2" else echo "$2 $1" fi fi break fi i=$(($i+1)) done } get_version_sed=' # Move version to start of line. s/.*[v ]\([0-9]\)/\1/ # Skip lines that do not start with version. /^[0-9]/!d # Remove characters after the version. s/[^.a-z0-9-].*// # The first component must be digits only. s/^\([0-9]*\)[a-z-].*/\1/ #the following essentially does s/5.005/5.5/ s/\.0*\([1-9]\)/.\1/g p q' get_version() { app=$1 $app --version >/dev/null 2>&1 || { $app --version; return 1; } $app --version 2>&1 | sed -n "$get_version_sed" } check_versions() { ret=0 while read app req_ver; do # We only need libtoolize from the libtool package. if test "$app" = libtool; then app=libtoolize fi # Exempt git if --no-git is in effect. if test "$app" = git; then $use_git || continue fi # Honor $APP variables ($TAR, $AUTOCONF, etc.) appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') test "$appvar" = TAR && appvar=AMTAR case $appvar in GZIP) ;; # Do not use $GZIP: it contains gzip options. PERL::*) ;; # Keep perl modules as-is *) eval "app=\${$appvar-$app}" ;; esac # Handle the still-experimental Automake-NG programs specially. # They remain named as the mainstream Automake programs ("automake", # and "aclocal") to avoid gratuitous incompatibilities with # pre-existing usages (by, say, autoreconf, or custom autogen.sh # scripts), but correctly identify themselves (as being part of # "GNU automake-ng") when asked their version. case $app in automake-ng|aclocal-ng) app=${app%-ng} ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { warn_ "Error: '$app' not found or not from Automake-NG" ret=1 continue } ;; # Another check is for perl modules. These can be written as # e.g. perl::XML::XPath in case of XML::XPath module, etc. perl::*) # Extract module name app="${app#perl::}" if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then warn_ "Error: perl module '$app' not found" ret=1 fi continue ;; esac if [ "$req_ver" = "-" ]; then # Merely require app to exist; not all prereq apps are well-behaved # so we have to rely on $? rather than get_version. if ! check_exists --verbose $app; then warn_ "Error: '$app' not found" ret=1 fi else # Require app to produce a new enough version string. inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then warn_ "Error: '$app' not found" ret=1 else latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) if [ ! "$latest_ver" = "$inst_ver" ]; then warnf_ '%s\n' \ "Error: '$app' version == $inst_ver is too old" \ " '$app' version >= $req_ver is required" ret=1 fi fi fi done return $ret } print_versions() { echo "Program Min_version" echo "----------------------" printf %s "$buildreq" echo "----------------------" # can't depend on column -t } # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. # Also find the compatible sha1 utility on the BSDs if test x"$SKIP_PO" = x; then find_tool SHA1SUM sha1sum gsha1sum shasum sha1 fi use_libtool=0 # We'd like to use grep -E, to see if any of LT_INIT, # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, # but that's not portable enough (e.g., for Solaris). grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ && use_libtool=1 grep '^[ ]*LT_INIT' configure.ac >/dev/null \ && use_libtool=1 if test $use_libtool = 1; then find_tool LIBTOOLIZE glibtoolize libtoolize fi # gnulib-tool requires at least automake and autoconf. # If either is not listed, add it (with minimum version) as a prerequisite. case $buildreq in *automake*) ;; *) buildreq="automake 1.9 $buildreq" ;; esac case $buildreq in *autoconf*) ;; *) buildreq="autoconf 2.59 $buildreq" ;; esac # When we can deduce that gnulib-tool will require patch, # and when patch is not already listed as a prerequisite, add it, too. if test -d "$local_gl_dir" \ && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then case $buildreq in *patch*) ;; *) buildreq="patch - $buildreq" ;; esac fi if ! printf "$buildreq" | check_versions; then echo >&2 if test -f README-prereq; then die "See README-prereq for how to get the prerequisite programs" else die "Please install the prerequisite programs" fi fi # Warn the user if autom4te appears to be broken; this causes known # issues with at least gettext 0.18.3. probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) if test "x$probe" != xhi; then warn_ "WARNING: your autom4te wrapper eats stdin;" warn_ "if bootstrap fails, consider upgrading your autotools" fi echo "$0: Bootstrapping from checked-out $package sources..." # See if we can use gnulib's git-merge-changelog merge driver. if $use_git && test -d .git && check_exists git; then if git config merge.merge-changelog.driver >/dev/null ; then : elif check_exists git-merge-changelog; then echo "$0: initializing git-merge-changelog driver" git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' else echo "$0: consider installing git-merge-changelog from gnulib" fi fi cleanup_gnulib() { status=$? rm -fr "$gnulib_path" exit $status } git_modules_config () { test -f .gitmodules && git config --file .gitmodules "$@" } if $use_gnulib; then if $use_git; then gnulib_path=$(git_modules_config submodule.gnulib.path) test -z "$gnulib_path" && gnulib_path=gnulib fi # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a # submodule, for use in the rest of the script. case ${GNULIB_SRCDIR--} in -) # Note that $use_git is necessarily true in this case. if git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." git submodule init -- "$gnulib_path" || exit $? git submodule update -- "$gnulib_path" || exit $? elif [ ! -d "$gnulib_path" ]; then echo "$0: getting gnulib files..." trap cleanup_gnulib 1 2 13 15 shallow= if test -z "$GNULIB_REVISION"; then git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' fi git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ || cleanup_gnulib trap - 1 2 13 15 fi GNULIB_SRCDIR=$gnulib_path ;; *) # Use GNULIB_SRCDIR directly or as a reference. if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." if git submodule -h|grep -- --reference > /dev/null; then # Prefer the one-liner available in git 1.6.4 or newer. git submodule update --init --reference "$GNULIB_SRCDIR" \ "$gnulib_path" || exit $? else # This fallback allows at least git 1.5.5. if test -f "$gnulib_path"/gnulib-tool; then # Since file already exists, assume submodule init already complete. git submodule update -- "$gnulib_path" || exit $? else # Older git can't clone into an empty directory. rmdir "$gnulib_path" 2>/dev/null git clone --reference "$GNULIB_SRCDIR" \ "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ && git submodule init -- "$gnulib_path" \ && git submodule update -- "$gnulib_path" \ || exit $? fi fi GNULIB_SRCDIR=$gnulib_path fi ;; esac if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ && ! git_modules_config submodule.gnulib.url >/dev/null; then (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib fi # $GNULIB_SRCDIR now points to the version of gnulib to use, and # we no longer need to use git or $gnulib_path below here. if $bootstrap_sync; then cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { echo "$0: updating bootstrap and restarting..." case $(sh -c 'echo "$1"' -- a) in a) ignored=--;; *) ignored=ignored;; esac exec sh -c \ 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ "$0" "$@" --no-bootstrap-sync } fi gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || exit $? fi # Get translations. download_po_files() { subdir=$1 domain=$2 echo "$me: getting translations into $subdir for $domain..." cmd=$(printf "$po_download_command_format" "$subdir" "$domain") eval "$cmd" } # Mirror .po files to $po_dir/.reference and copy only the new # or modified ones into $po_dir. Also update $po_dir/LINGUAS. # Note po files that exist locally only are left in $po_dir but will # not be included in LINGUAS and hence will not be distributed. update_po_files() { # Directory containing primary .po files. # Overwrite them only when we're sure a .po file is new. po_dir=$1 domain=$2 # Mirror *.po files into this dir. # Usually contains *.s1 checksum files. ref_po_dir="$po_dir/.reference" test -d $ref_po_dir || mkdir $ref_po_dir || return download_po_files $ref_po_dir $domain \ && ls "$ref_po_dir"/*.po 2>/dev/null | sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') test "$langs" = '*' && langs=x for po in $langs; do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" if ! test -f "$cksum_file" || ! test -f "$po_dir/$po.po" || ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then echo "$me: updated $po_dir/$po.po..." cp "$new_po" "$po_dir/$po.po" \ && $SHA1SUM < "$new_po" > "$cksum_file" || return fi done } case $SKIP_PO in '') if test -d po; then update_po_files po $package || exit fi if test -d runtime-po; then update_po_files runtime-po $package-runtime || exit fi;; esac symlink_to_dir() { src=$1/$2 dst=${3-$2} test -f "$src" && { # If the destination directory doesn't exist, create it. # This is required at least for "lib/uniwidth/cjk.h". dst_dir=$(dirname "$dst") if ! test -d "$dst_dir"; then mkdir -p "$dst_dir" # If we've just created a directory like lib/uniwidth, # tell version control system(s) it's ignorable. # FIXME: for now, this does only one level parent=$(dirname "$dst_dir") for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore $ig "${dst_dir##*/}" done fi if $copy; then { test ! -h "$dst" || { echo "$me: rm -f $dst" && rm -f "$dst" } } && test -f "$dst" && cmp -s "$src" "$dst" || { echo "$me: cp -fp $src $dst" && cp -fp "$src" "$dst" } else # Leave any existing symlink alone, if it already points to the source, # so that broken build tools that care about symlink times # aren't confused into doing unnecessary builds. Conversely, if the # existing symlink's timestamp is older than the source, make it afresh, # so that broken tools aren't confused into skipping needed builds. See # . test -h "$dst" && src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && test "$src_i" = "$dst_i" && both_ls=$(ls -dt "$src" "$dst") && test "X$both_ls" = "X$dst$nl$src" || { dot_dots= case $src in /*) ;; *) case /$dst/ in *//* | */../* | */./* | /*/*/*/*/*/) die "invalid symlink calculation: $src -> $dst";; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; /*/*/) dot_dots=../;; esac;; esac echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi } } version_controlled_file() { parent=$1 file=$2 if test -d .git; then git rm -n "$file" > /dev/null 2>&1 elif test -d .svn; then svn log -r HEAD "$file" > /dev/null 2>&1 elif test -d CVS; then grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | grep '^/[^/]*/[0-9]' > /dev/null else warn_ "no version control for $file?" false fi } # NOTE: we have to be careful to run both autopoint and libtoolize # before gnulib-tool, since gnulib-tool is likely to provide newer # versions of files "installed" by these two programs. # Then, *after* gnulib-tool (see below), we have to be careful to # run autoreconf in such a way that it does not run either of these # two just-pre-run programs. # Import from gettext. with_gettext=yes grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ with_gettext=no if test $with_gettext = yes || test $use_libtool = 1; then tempbase=.bootstrap$$ trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 > $tempbase.0 > $tempbase.1 && find . ! -type d -print | sort > $tempbase.0 || exit if test $with_gettext = yes; then # Released autopoint has the tendency to install macros that have been # obsoleted in current gnulib, so run this before gnulib-tool. echo "$0: $AUTOPOINT --force" $AUTOPOINT --force || exit fi # Autoreconf runs aclocal before libtoolize, which causes spurious # warnings if the initial aclocal is confused by the libtoolized # (or worse out-of-date) macro directory. # libtoolize 1.9b added the --install option; but we support back # to libtoolize 1.5.22, where the install action was default. if test $use_libtool = 1; then install= case $($LIBTOOLIZE --help) in *--install*) install=--install ;; esac echo "running: $LIBTOOLIZE $install --copy" $LIBTOOLIZE $install --copy fi find . ! -type d -print | sort >$tempbase.1 old_IFS=$IFS IFS=$nl for file in $(comm -13 $tempbase.0 $tempbase.1); do IFS=$old_IFS parent=${file%/*} version_controlled_file "$parent" "$file" || { for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore "$ig" "${file##*/}" done } done IFS=$old_IFS rm -f $tempbase.0 $tempbase.1 trap - 1 2 13 15 fi # Import from gnulib. if $use_gnulib; then gnulib_tool_options="\ --no-changelog\ --aux-dir=$build_aux\ --doc-base=$doc_base\ --lib=$gnulib_name\ --m4-base=$m4_base/\ --source-base=$source_base/\ --tests-base=$tests_base\ --local-dir=$local_gl_dir\ $gnulib_tool_option_extras\ " if test $use_libtool = 1; then case "$gnulib_tool_options " in *' --libtool '*) ;; *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; esac fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ || die "gnulib-tool failed" for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file \ || die "failed to symlink $file" done fi bootstrap_post_import_hook \ || die "bootstrap_post_import_hook failed" # Don't proceed if there are uninitialized submodules. In particular, # the next step will remove dangling links, which might be links into # uninitialized submodules. # # Uninitialized submodules are listed with an initial dash. if $use_git && git submodule | grep '^-' >/dev/null; then die "some git submodules are not initialized. " \ "Run 'git submodule update --init' and bootstrap again." fi # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some # gnulib-populated directories. Such .m4 files would cause aclocal to fail. # The following requires GNU find 4.2.3 or newer. Considering the usual # portability constraints of this script, that may seem a very demanding # requirement, but it should be ok. Ignore any failure, which is fine, # since this is only a convenience to help developers avoid the relatively # unusual case in which a symlinked-to .m4 file is git-removed from gnulib # between successive runs of this script. find "$m4_base" "$source_base" \ -depth \( -name '*.m4' -o -name '*.[ch]' \) \ -type l -xtype l -delete > /dev/null 2>&1 # Invoke autoreconf with --force --install to ensure upgrades of tools # such as ylwrap. AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" # Some systems (RHEL 5) are using ancient autotools, for which the # --no-recursive option had not been invented. Detect that lack and # omit the option when it's not supported. FIXME in 2017: remove this # hack when RHEL 5 autotools are updated, or when they become irrelevant. case $($AUTORECONF --help) in *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; esac # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ || die "autoreconf failed" # Get some extra files from gnulib, overriding existing files. for file in $gnulib_extra_files; do case $file in */INSTALL) dst=INSTALL;; build-aux/*) dst=$build_aux/${file#build-aux/};; *) dst=$file;; esac symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ || die "failed to symlink $file" done if test $with_gettext = yes; then # Create gettext configuration. echo "$0: Creating po/Makevars from po/Makevars.template ..." rm -f po/Makevars sed ' /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } ' po/Makevars.template >po/Makevars \ || die 'cannot generate po/Makevars' # If the 'gettext' module is in use, grab the latest Makefile.in.in. # If only the 'gettext-h' module is in use, assume autopoint already # put the correct version of this file into place. case $gnulib_modules in *gettext-h*) ;; *gettext*) cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ || die "cannot create po/Makefile.in.in" ;; esac if test -d runtime-po; then # Similarly for runtime-po/Makevars, but not quite the same. rm -f runtime-po/Makevars sed ' /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ /^subdir *=.*/s/=.*/= runtime-po/ /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} } ' po/Makevars.template >runtime-po/Makevars \ || die 'cannot generate runtime-po/Makevars' # Copy identical files from po to runtime-po. (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) fi fi bootstrap_epilogue echo "$0: done. Now you can run './configure'." # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnulib-20210822~d383792/build-aux/bootstrap.conf000066400000000000000000000041201411057217300210520ustar00rootroot00000000000000# Bootstrap configuration. # Copyright (C) 2006-2021 Free Software Foundation, Inc. # This 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 . # gnulib modules used by this package. gnulib_modules=" " # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\ --from-code=UTF-8\\\ --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\ --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\ --flag=wrapf:1:c-format\\\ ' # If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]" # appears in configure.ac, exclude some unnecessary files. # Without grep's -E option (not portable enough, pre-configure), # the following test is ugly. Also, this depends on the existence # of configure.ac, not the obsolescent-named configure.in. But if # you're using this infrastructure, you should care about such things. gettext_external=0 grep '^[ ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null && gettext_external=1 grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null && gettext_external=1 if test $gettext_external = 1; then # Gettext supplies these files, but we don't need them since # we don't have an intl subdirectory. excluded_files=' m4/glibc2.m4 m4/intdiv0.m4 m4/lcmessage.m4 m4/lock.m4 m4/printf-posix.m4 m4/size_max.m4 m4/uintmax_t.m4 m4/ulonglong.m4 m4/visibility.m4 m4/xsize.m4 ' fi # Build prerequisites buildreq="\ autoconf 2.59 automake 1.9.6 git 1.5.5 tar - " gnulib-20210822~d383792/build-aux/compile000077500000000000000000000163501411057217300175540ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnulib-20210822~d383792/build-aux/config.guess000077500000000000000000001403041411057217300205130ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-06-03' # 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 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnulib-20210822~d383792/build-aux/config.libpath000077500000000000000000000100661411057217300210110ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable at run time. # # Copyright 1996-2021 Free Software Foundation, Inc. # Taken from GNU libtool, 2003 # Originally by Gordon Matzigkeit , 1996 # # This 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variable LD should be set by the caller. # # The set of defined variables is at the end of this script. host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` shlibpath_var= case $host_os in aix3*) shlibpath_var=LIBPATH ;; aix[4-9]*) if test "$host_cpu" = ia64; then # AIX 5 supports IA64 shlibpath_var=LD_LIBRARY_PATH else shlibpath_var=LIBPATH fi ;; beos*) shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) shlibpath_var=LD_LIBRARY_PATH ;; cygwin* | mingw* | pw32* | cegcc*) # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) shlibpath_var=DYLD_LIBRARY_PATH ;; dgux*) shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) shlibpath_var=LD_LIBRARY_PATH ;; gnu*) shlibpath_var=LD_LIBRARY_PATH ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64* | hppa*64*) shlibpath_var=LD_LIBRARY_PATH ;; *) shlibpath_var=SHLIB_PATH ;; esac ;; interix[3-9]*) shlibpath_var=LD_LIBRARY_PATH ;; irix5* | irix6* | nonstopux*) case $host_os in irix5* | nonstopux*) shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") shlibsuff= ;; *-n32|*"-n32 ") shlibsuff=N32 ;; *-64|*"-64 ") shlibsuff=64 ;; *) shlibsuff= ;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) shlibpath_var=LD_LIBRARY_PATH ;; netbsd*) shlibpath_var=LD_LIBRARY_PATH ;; newsos6) shlibpath_var=LD_LIBRARY_PATH ;; nto-qnx*) shlibpath_var=LD_LIBRARY_PATH ;; openbsd*) shlibpath_var=LD_LIBRARY_PATH ;; os2*) shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) shlibpath_var=LD_LIBRARY_PATH ;; rdos*) ;; solaris*) shlibpath_var=LD_LIBRARY_PATH ;; sunos4*) shlibpath_var=LD_LIBRARY_PATH ;; sysv4 | sysv4.3*) shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) shlibpath_var=LD_LIBRARY_PATH ;; uts4*) shlibpath_var=LD_LIBRARY_PATH ;; esac LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnulib-20210822~d383792/build-aux/csharpcomp.sh.in000066400000000000000000000113321411057217300212710ustar00rootroot00000000000000#!/bin/sh # Compile a C# program. # Copyright (C) 2003-2021 Free Software Foundation, Inc. # Written by Bruno Haible , 2003. # # This 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 . # This uses the same choices as csharpcomp.c, but instead of relying on the # environment settings at run time, it uses the environment variables # present at configuration time. # # This is a separate shell script, because the various C# compilers have # different command line options. # # Usage: /bin/sh csharpcomp.sh [OPTION] SOURCE.cs ... RES.resource ... # Options: # -o PROGRAM.exe or -o LIBRARY.dll # set the output assembly name # -L DIRECTORY search for C# libraries also in DIRECTORY # -l LIBRARY reference the C# library LIBRARY.dll # -O optimize # -g generate debugging information # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d -q "$TMPDIR/gtXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gt$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } } sed_quote_subst='s/\([|&;<>()$`"'"'"'*?[#~=% \\]\)/\\\1/g' options_mcs= options_csc="-nologo" sources= while test $# != 0; do case "$1" in -o) case "$2" in *.dll) options_mcs="$options_mcs -target:library" options_csc="$options_csc -target:library" ;; *.exe) options_csc="$options_csc -target:exe" ;; esac options_mcs="$options_mcs -out:"`echo "$2" | sed -e "$sed_quote_subst"` options_csc="$options_csc -out:"`echo "$2" | sed -e "$sed_quote_subst"` shift ;; -L) options_mcs="$options_mcs -lib:"`echo "$2" | sed -e "$sed_quote_subst"` options_csc="$options_csc -lib:"`echo "$2" | sed -e "$sed_quote_subst"` shift ;; -l) options_mcs="$options_mcs -reference:"`echo "$2" | sed -e "$sed_quote_subst"` options_csc="$options_csc -reference:"`echo "$2" | sed -e "$sed_quote_subst"`".dll" shift ;; -O) options_csc="$options_csc -optimize+" ;; -g) options_mcs="$options_mcs -debug" options_csc="$options_csc -debug+" ;; -*) echo "csharpcomp: unknown option '$1'" 1>&2 exit 1 ;; *.resources) options_mcs="$options_mcs -resource:"`echo "$1" | sed -e "$sed_quote_subst"` options_csc="$options_csc -resource:"`echo "$1" | sed -e "$sed_quote_subst"` ;; *.cs) sources="$sources "`echo "$1" | sed -e "$sed_quote_subst"` ;; *) echo "csharpcomp: unknown type of argument '$1'" 1>&2 exit 1 ;; esac shift done if test -n "@HAVE_MCS@"; then # mcs prints it errors and warnings to stdout, not stderr. Furthermore it # adds a useless line "Compilation succeeded..." at the end. Correct both. sed_drop_success_line='${ /^Compilation succeeded/d }' func_tmpdir trap 'rm -rf "$tmp"' 1 2 3 15 test -z "$CSHARP_VERBOSE" || echo mcs $options_mcs $sources mcs $options_mcs $sources > "$tmp"/mcs.err result=$? sed -e "$sed_drop_success_line" < "$tmp"/mcs.err >&2 rm -rf "$tmp" exit $result else if test -n "@HAVE_CSC@"; then test -z "$CSHARP_VERBOSE" || echo csc $options_csc $sources exec csc $options_csc $sources else echo 'C# compiler not found, try installing mono, then reconfigure' 1>&2 exit 1 fi fi gnulib-20210822~d383792/build-aux/csharpexec.sh.in000066400000000000000000000047541411057217300212710ustar00rootroot00000000000000#!/bin/sh # Execute a C# program. # Copyright (C) 2003-2021 Free Software Foundation, Inc. # Written by Bruno Haible , 2003. # # This 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 . # This uses the same choices as csharpexec.c, but instead of relying on the # environment settings at run time, it uses the environment variables # present at configuration time. # # This is a separate shell script, because the various C# interpreters have # different command line options. # # Usage: /bin/sh csharpexec.sh [OPTION] program.exe [ARGUMENTS] # Options: # -L DIRECTORY search for C# libraries also in DIRECTORY sed_quote_subst='s/\([|&;<>()$`"'"'"'*?[#~=% \\]\)/\\\1/g' libdirs_mono= prog= while test $# != 0; do case "$1" in -L) libdirs_mono="${libdirs_mono:+$libdirs_mono@MONO_PATH_SEPARATOR@}$2" shift ;; -*) echo "csharpexec: unknown option '$1'" 1>&2 exit 1 ;; *) prog="$1" break ;; esac shift done if test -z "$prog"; then echo "csharpexec: no program specified" 1>&2 exit 1 fi case "$prog" in *.exe) ;; *) echo "csharpexec: program is not a .exe" 1>&2 exit 1 ;; esac if test -n "@HAVE_MONO@"; then CONF_MONO_PATH='@MONO_PATH@' if test -n "$libdirs_mono"; then MONO_PATH="$libdirs_mono${CONF_MONO_PATH:+@MONO_PATH_SEPARATOR@$CONF_MONO_PATH}" else MONO_PATH="$CONF_MONO_PATH" fi export MONO_PATH test -z "$CSHARP_VERBOSE" || echo mono "$@" exec mono "$@" else if test -n "@HAVE_CLIX@"; then CONF_CLIX_PATH='@CLIX_PATH@' if test -n "$libdirs_mono"; then @CLIX_PATH_VAR@="$libdirs_mono${CONF_CLIX_PATH:+@MONO_PATH_SEPARATOR@$CONF_CLIX_PATH}" else @CLIX_PATH_VAR@="$CONF_CLIX_PATH" fi export @CLIX_PATH_VAR@ test -z "$CSHARP_VERBOSE" || echo clix "$@" exec clix "$@" else echo 'C# virtual machine not found, try installing mono, then reconfigure' 1>&2 exit 1 fi fi gnulib-20210822~d383792/build-aux/declared.sh000077500000000000000000000102731411057217300202760ustar00rootroot00000000000000#! /bin/sh # # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This 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 . # # This script determines the declared global symbols in a C header file. # Assumptions: # - The header files are in C, with only C89 comments. # - No use of macros with parameters. # - All global declarations are marked with 'extern'. # - All declarations end in ';' on the same line. # - Not more than one symbol is declared in a declaration. # This script requires GNU sed. # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: declared.sh [OPTION]... < SOURCE.h Extracts the declared global symbols of a C header file. Options: --help print this help and exit --version print version information and exit Report bugs to ." } # func_version # outputs to stdout the --version message. func_version () { echo "declared.sh (GNU gnulib)" echo "Copyright (C) 2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." echo "Written by" "Bruno Haible" } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. func_fatal_error () { echo "declared.sh: *** $1" 1>&2 echo "declared.sh: *** Stop." 1>&2 exit 1 } # Command-line option processing. while test $# -gt 0; do case "$1" in --help | --hel | --he | --h ) func_usage exit 0 ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version exit 0 ;; -- ) # Stop option processing shift; break ;; -* ) func_fatal_error "unrecognized option: $option" ;; * ) break ;; esac done if test $# -gt 0; then func_fatal_error "too many arguments" fi # A sed expression that removes ANSI C and ISO C99 comments. sed_remove_comments=" /[/][/*]/{ ta :a s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)//.*,\\1, te s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)/[*]\\([^*]\\|[*][^/*]\\)*[*][*]*/,\\1 , ta /^\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*[/][*]/{ s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)/[*].*,\\1 , tu :u n s,^\\([^*]\\|[*][^/*]\\)*[*][*]*/,, tv s,^.*\$,, bu :v } :e }" # Check that 'sed' supports the kind of regular expressions used in # sed_remove_comments. The use of \| meaning alternation of basic regular # expressions is a GNU extension. sed_test='s,^\(\(a\|X\)*\)//.*,\1,' sed_result=`echo 'aaa//bcd' | sed -e "$sed_test"` test "$sed_result" = 'aaa' \ || func_fatal_error "The 'sed' program is not GNU sed. Try installing GNU sed." # A sed expression that joins 'extern' declarations that are broken over # several lines. sed_join_multiline_externs=' /^extern [^;"]*$/{ :a N s/\n/ /g /^extern [^;"]*$/{ ba } }' # A sed expression that extracts the identifier of each 'extern' declaration. sed_extract_extern_declared='s/^extern [^()]*[ *]\([A-Za-z_][A-Za-z0-9_]*\) *[;(].*$/\1/p' sed -e "$sed_remove_comments" \ | sed -e "$sed_join_multiline_externs" \ | sed -n -e "$sed_extract_extern_declared" gnulib-20210822~d383792/build-aux/depcomp000077500000000000000000000560201411057217300175510ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnulib-20210822~d383792/build-aux/do-release-commit-and-tag000077500000000000000000000123271411057217300227430ustar00rootroot00000000000000#!/bin/sh # In a git/autoconf/automake-enabled project with a NEWS file and a version- # controlled .prev-version file, automate the procedure by which we record # the date, release-type and version string in the NEWS file. That commit # will serve to identify the release, so apply a signed tag to it as well. VERSION=2018-03-07.03 # UTC # Note: this is a bash script (could be zsh or dash) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This 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 . # Written by Jim Meyering ME=$(basename "$0") warn() { printf '%s: %s\n' "$ME" "$*" >&2; } die() { warn "$*"; exit 1; } help() { cat <. EOF exit } version() { year=$(echo "$VERSION" | sed 's/[^0-9].*//') cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit } ## ------ ## ## Main. ## ## ------ ## # Constants. noteworthy='* Noteworthy changes in release' noteworthy_stub="$noteworthy ?.? (????-??-??) [?]" # Variables. branch=$(git branch | sed -ne '/^\* /{s///;p;q;}') builddir=. while test $# != 0 do # Handle --option=value by splitting apart and putting back on argv. case $1 in --*=*) opt=$(echo "$1" | sed -e 's/=.*//') val=$(echo "$1" | sed -e 's/[^=]*=//') shift set dummy "$opt" "$val" "$@"; shift ;; esac case $1 in --help|--version) ${1#--};; --branch) shift; branch=$1; shift ;; -C|--builddir) shift; builddir=$1; shift ;; --*) die "unrecognized option: $1";; *) break;; esac done test $# = 2 \ || die "Usage: $ME [OPTION...] VERSION TYPE" ver=$1 type=$2 ## ---------------------- ## ## First, sanity checks. ## ## ---------------------- ## # Verify that $ver looks like a version number, and... echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \ || die "invalid version: $ver" prev_ver=$(cat .prev-version) \ || die 'failed to determine previous version number from .prev-version' # Verify that $ver is sensible (> .prev-version). case $(printf "$prev_ver\n$ver\n"|sort -V -u|tr '\n' ':') in "$prev_ver:$ver:") ;; *) die "invalid version: $ver (<= $prev_ver)";; esac case $type in alpha|beta|stable) ;; *) die "invalid release type: $type";; esac # No local modifications allowed. case $(git diff-index --name-only HEAD) in '') ;; *) die 'this tree is dirty; commit your changes first';; esac # Ensure the current branch name is correct: curr_br=$(git rev-parse --symbolic-full-name HEAD) test "$curr_br" = "refs/heads/$branch" || die not on branch $branch # Extract package name from Makefile. Makefile=$builddir/Makefile pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \ || die "failed to determine package name from $Makefile" # Check that line 3 of NEWS is the stub line about to be replaced. test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \ || die "line 3 of NEWS must be exactly '$noteworthy_stub'" ## --------------- ## ## Then, changes. ## ## --------------- ## # Update NEWS to have today's date, plus desired version number and $type. perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \ -e 'my ($type, $ver) = qw('"$type $ver"');' \ -e 'my $pfx = "'"$noteworthy"'";' \ -e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \ NEWS || die 'failed to update NEWS' printf "version $ver\n\n* NEWS: Record release date.\n" \ | git commit -F - -a || die 'git commit failed' git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed' # Local variables: # indent-tabs-mode: nil # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "VERSION=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: " # UTC" # End: gnulib-20210822~d383792/build-aux/g++-warning.spec000066400000000000000000000073331411057217300210720ustar00rootroot00000000000000# options to filter out, and why --all-warnings alias for -Wall --extra-warnings alias for -Wextra -frequire-return-statement go -Waggregate-return obsolescent -Waliasing fortran -Walign-commons fortran -Wampersand fortran -Warray-bounds covered by -Warray-bounds= -Warray-bounds= handled specially by gl_MANYWARN_ALL_GCC -Warray-temporaries fortran -Wassign-intercept objc/objc++ -Wbad-function-cast c -Wc++0x-compat c++ compatibility -Wc++11-compat c++ compatibility -Wc++14-compat c++ compatibility -Wc90-c99-compat c compatibility -Wc99-c11-compat c compatibility -Wcast-qual FIXME maybe? too much noise; encourages bad changes -Wcast-result d -Wc-binding-type fortran -Wc++-compat FIXME maybe? borderline. some will want this -Wcharacter-truncation fortran -Wcompare-reals fortran -Wconversion-extra fortran -Wconversion FIXME maybe? too much noise; encourages bad changes -Wdeclaration-after-statement FIXME: do not want. others may -Wdesignated-init c -Wdiscarded-array-qualifiers c -Wdiscarded-qualifiers c -Werror-implicit-function-declaration deprecated -Wfloat-conversion FIXME maybe? borderline. some will want this -Wfloat-equal FIXME maybe? borderline. some will want this -Wformat covered by -Wformat=2 -Wformat= gcc --help=warnings artifact -Wframe-larger-than= FIXME: choose something sane? -Wfunction-elimination fortran -Wimplicit c -Wimplicit-function-declaration c -Wimplicit-int c -Wimplicit-interface fortran -Wimplicit-procedure fortran -Wincompatible-pointer-types c -Wint-conversion c -Winteger-division fortran -Wintrinsic-shadow fortran -Wintrinsics-std fortran -Wjump-misses-init c -Wlarger-than- gcc --help=warnings artifact -Wlarger-than= FIXME: choose something sane? -Wline-truncation fortran -Wlong-long obsolescent -Wmissing-format-attribute obsolescent -Wmissing-noreturn obsolescent -Wmissing-parameter-type c -Wmissing-prototypes c -Wnested-externs c -Wnormalized covered by -Wnormalized= -Wnormalized= handled specially by gl_MANYWARN_ALL_GCC -Wold-style-declaration c -Wold-style-definition c -Woverride-init c -Wpadded FIXME maybe? warns about "stabil" member in /usr/include/bits/timex.h -Wpedantic FIXME: too strict? -Wpointer-sign c -Wpointer-to-int-cast c -Wproperty-assign-default objc++ -Wprotocol objc++ -Wrealloc-lhs-all fortran -Wrealloc-lhs fortran -Wreal-q-constant fortran -Wredundant-decls FIXME maybe? many _gl_cxxalias_dummy FPs -Wselector objc and objc++ -Wshadow-ivar objc -Wshift-overflow covered by -Wshift-overflow=2 -Wshift-overflow= gcc --help=warnings artifact -Wsign-compare FIXME maybe? borderline. some will want this -Wsign-conversion FIXME maybe? borderline. some will want this -Wstack-usage= FIXME: choose something sane? -Wstrict-aliasing= FIXME: choose something sane? -Wstrict-overflow= FIXME: choose something sane? -Wstrict-prototypes c -Wstrict-selector-match objc and objc++ -Wsurprising fortran -Wswitch-default https://lists.gnu.org/r/bug-gnulib/2018-05/msg00179.html -Wswitch-enum FIXME maybe? borderline. some will want this -Wsynth deprecated -Wtabs fortran -Wtarget-lifetime fortran -Wtraditional-conversion obsolescent -Wtraditional obsolescent -Wundeclared-selector objc and objc++ -Wundef FIXME maybe? too many false positives -Wunderflow fortran -Wunreachable-code obsolescent no-op -Wunsuffixed-float-constants triggers warning in gnulib's timespec.h -Wunused-const-variable covered by -Wunusec-const-variable=2 -Wunused-const-variable= gcc --help=warnings artifact -Wunused-dummy-argument fortran -Wuse-without-only fortran -Wzerotrip fortran gnulib-20210822~d383792/build-aux/gcc-warning.spec000066400000000000000000000304011411057217300212420ustar00rootroot00000000000000# options to filter out, and why --all-warnings alias for -Wall --extra-warnings alias for -Wextra -W alias for -Wextra -Wabi this is now a no-op -Wabi-tag c++ -Wabi= c++ -Wabsolute-value enabled by -Wextra -Waddress enabled by -Wall -Waddress-of-packed-member default -Waggregate-return obsolescent -Waggressive-loop-optimizations default -Waliasing fortran -Walign-commons fortran -Waligned-new=[none|global|all] c++ -Walloc-size-larger-than= defaults to PTRDIFF_MAX -Walloc-zero Gnulib fixes this problem -Walloca we like alloca in small doses -Walloca-larger-than= FIXME: choose something sane? -Wampersand fortran -Wanalyzer-double-fclose enabled by -fanalyzer -Wanalyzer-double-free enabled by -fanalyzer -Wanalyzer-exposure-through-output-file enabled by -fanalyzer -Wanalyzer-file-leak enabled by -fanalyzer -Wanalyzer-free-of-non-heap enabled by -fanalyzer -Wanalyzer-malloc-leak enabled by -fanalyzer -Wanalyzer-mismatching-deallocation enabled by -fanalyzer -Wanalyzer-null-argument enabled by -fanalyzer -Wanalyzer-null-dereference enabled by -fanalyzer -Wanalyzer-possible-null-argument enabled by -fanalyzer -Wanalyzer-possible-null-dereference enabled by -fanalyzer -Wanalyzer-shift-count-negative enabled by -fanalyzer -Wanalyzer-shift-count-overflow enabled by -fanalyzer -Wanalyzer-stale-setjmp-buffer implied by -fanalyzer -Wanalyzer-tainted-array-index FIXME maybe? too much noise -Wanalyzer-too-complex enabled by -fanalyzer -Wanalyzer-unsafe-call-within-signal-handler enabled by -fanalyzer -Wanalyzer-use-after-free enabled by -fanalyzer -Wanalyzer-use-of-pointer-in-stale-stack-frame enabled by -fanalyzer -Wanalyzer-write-to-const enabled by -fanalyzer -Wanalyzer-write-to-string-literal enabled by -fanalyzer -Warray-bounds covered by -Warray-bounds= -Warray-bounds=<0,2> handled specially by gl_MANYWARN_ALL_GCC -Warray-parameter enabled by -Wall -Warray-parameter=<0,2> enabled by -Wall -Warray-temporaries fortran -Wassign-intercept objc/objc++ -Wattribute-alias covered by -Wattribute-alias=2 -Wattribute-alias=<0,2> handled specially by gl_MANYWARN_ALL_GCC -Wattribute-warning default -Wattributes default -Wbool-compare enabled by -Wall -Wbool-operation enabled by -Wall -Wbuiltin-declaration-mismatch default -Wbuiltin-macro-redefined default -Wc++-compat only useful for code meant to be compiled by a C++ compiler -Wc++0x-compat c++ -Wc++11-compat c++ -Wc++14-compat c++ -Wc++17-compat c++ -Wc++1z-compat c++ -Wc++20-compat c++ -Wc++2a-compat c++ -Wc-binding-type fortran -Wc11-c2x-compat c compatibility -Wc90-c99-compat c compatibility -Wc99-c11-compat c compatibility -Wcannot-profile default -Wcast-align enabled by -Wcast-align=strict -Wcast-function-type enabled by -Wextra -Wcast-qual FIXME maybe? too much noise; encourages bad changes -Wcast-result D -Wcatch-value c++ -Wcatch-value=<0,3> c++ -Wchar-subscripts enabled by -Wall -Wcharacter-truncation fortran -Wchkp deprecated -Wclass-conversion c++ and objc++ -Wclass-memaccess c++ -Wclobbered enabled by -Wextra -Wcomma-subscript c++ and objc++ -Wcomment enabled by -Wall -Wcomments alias for -Wcomment -Wcompare-reals fortran -Wconditionally-supported c++ and objc++ -Wconversion FIXME maybe? too much noise; encourages bad changes -Wconversion-extra fortran -Wconversion-null c++ and objc++ -Wcoverage-mismatch default -Wcpp default -Wctad-maybe-unsupported c++ and objc++ -Wctor-dtor-privacy c++ -Wdangling-else enabled by -Wparentheses -Wdeclaration-after-statement needed only for pre-C99, so obsolete -Wdelete-incomplete c++ and objc++ -Wdelete-non-virtual-dtor c++ -Wdeprecated default -Wdeprecated-copy c++ and objc++ -Wdeprecated-copy-dtor c++ and objc++ -Wdeprecated-declarations default -Wdeprecated-enum-enum-conversion c++ and objc++ -Wdeprecated-enum-float-conversion c++ and objc++ -Wdesignated-init default -Wdiscarded-array-qualifiers default -Wdiscarded-qualifiers default -Wdo-subscript fortran -Wdiv-by-zero default -Wduplicate-decl-specifier enabled by -Wall -Weffc++ c++ -Wempty-body enabled by -Wextra -Wenum-compare enabled by -Wall -Wenum-conversion enabled by -Wextra -Wendif-labels default -Werror-implicit-function-declaration deprecated -Wexceptions c++ and objc++ -Wexpansion-to-defined enabled by -Wextra -Wextra-semi c++ -Wfloat-conversion FIXME maybe? borderline. some will want this -Wfloat-equal FIXME maybe? borderline. some will want this -Wformat covered by -Wformat=2 -Wformat-contains-nul default -Wformat-diag enabled by -Wformat=2 -Wformat-extra-args enabled by -Wformat=2 -Wformat-nonliteral enabled by -Wformat=2 -Wformat-overflow<0,2> gcc --help=warnings artifact -Wformat-overflow=<0,2> handled specially by gl_MANYWARN_ALL_GCC -Wformat-security enabled by -Wformat=2 -Wformat-truncation covered by -Wformat-truncation=2 -Wformat-truncation=<0,2> handled specially by gl_MANYWARN_ALL_GCC -Wformat-y2k enabled by -Wformat=2 -Wformat-zero-length enabled by -Wformat=2 -Wformat=<0,2> gcc --help=warnings artifact -Wframe-address enabled by -Wall -Wframe-larger-than= FIXME: choose something sane? -Wfree-nonheap-object default -Wfunction-elimination fortran -Whsa default -Wif-not-aligned default -Wignored-attributes default -Wignored-qualifiers enabled by -Wextra -Wimplicit enabled by -Wall -Wimplicit-fallthrough covered by -Wimplicit-fallthrough=2 -Wimplicit-fallthrough=<0,5> handled specially by gl_MANYWARN_ALL_GCC -Wimplicit-function-declaration enabled by -Wimplicit -Wimplicit-int enabled by -Wimplicit -Wimplicit-interface fortran -Wimplicit-procedure fortran -Winaccessible-base c++ and objc++ -Wincompatible-pointer-types default -Winherited-variadic-ctor c++ -Winit-list-lifetime c++ and objc++ -Wint-conversion default -Wint-in-bool-context enabled by -Wall -Wint-to-pointer-cast default -Winteger-division fortran -Wintrinsic-shadow fortran -Wintrinsics-std fortran -Winvalid-imported-macros c++ and objc++ -Winvalid-memory-model default -Winvalid-offsetof c++ and objc++ -Wjump-misses-init only useful for code meant to be compiled by a C++ compiler -Wlarger-than- gcc --help=warnings artifact -Wlarger-than= FIXME: choose something sane? -Wline-truncation fortran -Wliteral-suffix c++ and objc++ -Wlogical-not-parentheses enabled by -Wall -Wlong-long obsolescent -Wlto-type-mismatch c++ and objc++ -Wmain enabled by -Wall -Wmaybe-uninitialized enabled by -Wall or -Wextra -Wmemset-elt-size enabled by -Wall -Wmemset-transposed-args enabled by -Wall -Wmisleading-indentation enabled by -Wall -Wmismatched-dealloc default -Wmismatched-new-delete default, c++ and objc++ -Wmismatched-tags c++ and objc++ -Wmissing-attributes enabled by -Wall -Wmissing-braces enabled by -Wall -Wmissing-field-initializers enabled by -Wextra -Wmissing-format-attribute obsolescent -Wmissing-noreturn obsolescent -Wmissing-parameter-type enabled by -Wextra -Wmissing-profile default -Wmultichar default -Wmultiple-inheritance c++ and objc++ -Wmultistatement-macros enabled by -Wall -Wnamespaces c++ -Wnarrowing enabled by -Wall -Wno-alloc-size-larger-than see -Walloc-size-larger-than -Wno-alloca-larger-than see -Walloca-larger-than -Wno-frame-larger-than see -Wframe-larger-than -Wno-larger-than see -Wlarger-than -Wno-stack-usage see -Wstack-usage -Wno-vla-larger-than see -Wvla-larger-than -Wnoexcept c++ -Wnoexcept-type c++ -Wnon-template-friend c++ -Wnon-virtual-dtor c++ -Wnonnull enabled by -Wall or -Wformat -Wnonnull-compare enabled by -Wall -Wnormalized default -Wnormalized=[none|id|nfc|nfkc] defaults to nfc -WNSObject-attribute objc and objc++ -Wobjc-root-class objc and objc++ -Wodr default -Wold-style-cast c++ and objc++ -Wold-style-declaration enabled by -Wextra -Woverflow default -Woverloaded-virtual c++ -Woverride-init enabled by -Wextra -Woverride-init-side-effects c++ and objc++ -Woverwrite-recursive fortran -Wpacked-bitfield-compat default -Wpacked-not-aligned enabled by -Wall -Wpadded FIXME maybe? warns about "stabil" member in /usr/include/bits/timex.h -Wparentheses enabled by -Wall -Wpedantic FIXME: too strict? -Wpessimizing-move c++ and objc++ -Wplacement-new c++ -Wplacement-new=<0,2> c++ -Wpmf-conversions c++ and objc++ -Wpointer-compare default -Wpointer-sign enabled by -Wall -Wpointer-to-int-cast default -Wpragmas default -Wprio-ctor-dtor c++ -Wproperty-assign-default objc++ -Wprotocol objc++ -Wpsabi default -Wrange-loop-construct c++ and objc++ -Wreal-q-constant fortran -Wrealloc-lhs fortran -Wrealloc-lhs-all fortran -Wredundant-decls FIXME maybe? many _gl_cxxalias_dummy FPs -Wredundant-move c++ and objc++ -Wredundant-tags c++ and objc++ -Wregister c++ and objc++ -Wreorder c++ and objc++ -Wrestrict enabled by -Wall -Wreturn-local-addr default -Wreturn-type enabled by -Wall -Wscalar-storage-order default -Wselector objc and objc++ -Wsequence-point enabled by -Wall -Wshadow-compatible-local covered by -Wshadow -Wshadow-ivar objc -Wshadow-local covered by -Wshadow -Wshadow=compatible-local covered by -Wshadow -Wshadow=global covered by -Wshadow -Wshadow=local covered by -Wshadow -Wshift-count-negative default -Wshift-count-overflow default -Wshift-negative-value enabled by -Wextra -Wshift-overflow covered by -Wshift-overflow=2 -Wshift-overflow=<0,2> gcc --help=warnings artifact -Wsign-compare enabled by -Wextra -Wsign-conversion FIXME maybe? borderline. some will want this -Wsign-promo c++ and objc++ -Wsized-deallocation c++ and objc++ -Wsizeof-array-argument default -Wsizeof-array-div enabled by -Wall -Wsizeof-pointer-div enabled by -Wall -Wsizeof-pointer-memaccess enabled by -Wall -Wstack-usage= FIXME: choose something sane? -Wstrict-aliasing enabled by -Wall -Wstrict-aliasing=<0,3> FIXME: choose something sane? -Wstrict-null-sentinel c++ and objc++ -Wstrict-overflow=<0,5> FIXME: choose something sane? -Wstrict-selector-match objc and objc++ -Wstring-compare enabled by -Wextra -Wstringop-overflow covered by -Wstringop-overflow=2 -Wstringop-overflow=<0,4> defaults to 2 -Wstringop-overread default -Wstringop-truncation default -Wsubobject-linkage c++ and objc++ -Wsuggest-override c++ and objc++ -Wsurprising fortran -Wswitch enabled by -Wall -Wswitch-bool default -Wswitch-default https://lists.gnu.org/r/bug-gnulib/2018-05/msg00179.html -Wswitch-enum FIXME maybe? borderline. some will want this -Wswitch-outside-range default -Wswitch-unreachable default -Wsynth deprecated -Wtabs fortran -Wtarget-lifetime fortran -Wtautological-compare enabled by -Wall -Wtemplates c++ and objc++ -Wterminate c++ and objc++ -Wtraditional obsolescent -Wtraditional-conversion obsolescent -Wtrigraphs enabled by -Wall -Wtsan default -Wtype-limits enabled by -Wextra -Wundeclared-selector objc and objc++ -Wundef FIXME maybe? too many false positives -Wundefined-do-loop fortran -Wunderflow fortran -Wunreachable-code obsolescent no-op -Wunsuffixed-float-constants triggers warning in gnulib's timespec.h -Wunused enabled by -Wall -Wunused-but-set-parameter enabled by -Wunused -Wunused-but-set-variable enabled by -Wunused -Wunused-const-variable covered by -Wunused-const-variable=2 -Wunused-const-variable=<0,2> gcc --help=warnings artifact -Wunused-dummy-argument fortran -Wunused-function enabled by -Wunused -Wunused-label enabled by -Wunused -Wunused-local-typedefs enabled by -Wunused -Wunused-parameter enabled by -Wunused -Wunused-result enabled by -Wunused -Wunused-value enabled by -Wunused -Wunused-variable enabled by -Wunused -Wuse-without-only fortran -Wuseless-cast c++ and objc++ -Wvarargs default -Wvexing-parse c++ and objc++ -Wvirtual-inheritance c++ -Wvirtual-move-assign c++ -Wvla-larger-than= handled specially by gl_MANYWARN_ALL_GCC -Wvla-parameter enabled by -Wall -Wvolatile c++ and objc++ -Wvolatile-register-var enabled by -Wall -Wzero-as-null-pointer-constant c++ and objc++ -Wzero-length-bounds enabled by -Wall -Wzerotrip fortran -frequire-return-statement go gnulib-20210822~d383792/build-aux/gendocs.sh000077500000000000000000000414731411057217300201630ustar00rootroot00000000000000#!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2021-07-19.18 # Copyright 2003-2021 Free Software Foundation, Inc. # # This 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 . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-gnulib@gnu.org. # # The latest version of this script, and the companion template, is # available from the Gnulib repository: # # https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh # https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template # TODO: # - image importing was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. prog=`basename "$0"` srcdir=`pwd` scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${PERL='perl'} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invcations. dirargs= # passed to all tools (-I dir). dirs= # -I directories. htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" default_htmlarg=true infoarg=--no-split generate_ascii=true generate_html=true generate_info=true generate_tex=true outdir=manual source_extra= split=node srcfile= texarg="-t @finalout" version="gendocs.sh $scriptversion Copyright 2021 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate output in various formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: https://www.gnu.org/prep/maintain_toc.html Options: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets, instead of '$htmlarg'. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-html skip generating the html output. --no-info skip generating the info output. --no-tex skip generating the dvi and pdf output. --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default; use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option so your own bug-reporting address will be used in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-gnulib@gnu.org. " while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; default_htmlarg=false; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --no-html) generate_ascii=false;; --no-info) generate_info=false;; --no-tex) generate_tex=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --tex) shift; texarg=$1;; --texi2html) use_texi2html=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # For most of the following, the base name is just $PACKAGE base=$PACKAGE if $default_htmlarg && test -n "$use_texi2html"; then # The legacy texi2html doesn't support TOP_NODE_UP_URL htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css" fi if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. # Look for them in . and the -I directories; this is simpler than what # makeinfo supports with -I, but hopefully it will suffice. copy_images() { local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw(. $dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" # if $generate_info; then cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. fi # end info # if $generate_tex; then cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" printf "\nGenerating dvi... ($cmd)\n" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" printf "\nGenerating pdf... ($cmd)\n" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" fi # end tex (dvi + pdf) # if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... ($cmd)\n" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # if $generate_html; then # Split HTML at level $1. Used for texi2html. html_split() { opt="--split=$1 --node-files $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by $1... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html ) eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` rm -f "$outdir"/html_$1/*.html mkdir -p "$outdir/html_$1/" mv ${split_html_dir}/*.html "$outdir/html_$1/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test "x$split" = xnode; then split_arg= else split_arg=--split=$split fi # opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by $split... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split node html_split chapter html_split section fi fi # end html # printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` # # Do everything again through docbook. if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... ($cmd)\n" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... ($cmd)\n" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook ASCII... ($cmd)\n" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... ($cmd)\n" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi # printf "\nMaking index.html for $PACKAGE...\n" if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else # should take account of --split here. CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/git-version-gen���������������������������������������������������0000775�0000000�0000000�00000017635�14110572173�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Print a version string. scriptversion=2019-10-13.15; # UTC # Copyright (C) 2007-2021 Free Software Foundation, Inc. # # This 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/>. # This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) # - from a non-git-repo directory containing a .tarball-version file, which # presumes this script is invoked like "./git-version-gen .tarball-version". # In order to use intra-version strings in your project, you will need two # separate generated version string files: # # .tarball-version - present only in a distribution tarball, and not in # a checked-out repository. Created with contents that were learned at # the last time autoconf was run, and used by git-version-gen. Must not # be present in either $(srcdir) or $(builddir) for git-version-gen to # give accurate answers during normal development with a checked out tree, # but must be present in a tarball when there is no version control system. # Therefore, it cannot be used in any dependencies. GNUmakefile has # hooks to force a reconfigure at distribution time to get the value # correct, without penalizing normal development with extra reconfigures. # # .version - present in a checked-out repository and in a distribution # tarball. Usable in dependencies, particularly for files that don't # want to depend on config.h but do want to track version changes. # Delete this file prior to any autoconf run where you want to rebuild # files to pick up a version string change; and leave it stale to # minimize rebuild time after unrelated changes to configure sources. # # As with any generated file in a VC'd directory, you should add # /.version to .gitignore, so that you don't accidentally commit it. # .tarball-version is never generated in a VC'd directory, so needn't # be listed there. # # Use the following line in your configure.ac, so that $(VERSION) will # automatically be up-to-date each time configure is run (and note that # since configure.ac no longer includes a version string, Makefile rules # should not depend on configure.ac for version updates). # # AC_INIT([GNU project], # m4_esyscmd([build-aux/git-version-gen .tarball-version]), # [bug-project@example]) # # Then use the following lines in your Makefile.am, so that .version # will be present for dependencies, and so that .version and # .tarball-version will exist in distribution tarballs. # # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: # echo $(VERSION) > $@-t && mv $@-t $@ # dist-hook: # echo $(VERSION) > $(distdir)/.tarball-version me=$0 year=`expr "$scriptversion" : '\([^-]*\)'` version="git-version-gen $scriptversion Copyright (C) ${year} Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix PREFIX prefix of git tags (default 'v') --fallback VERSION fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit Running without arguments will suffice in most cases." prefix=v fallback= while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix=${1?};; --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 exit 1;; *) if test "x$tarball_version_file" = x; then tarball_version_file="$1" elif test "x$tag_sed_script" = x; then tag_sed_script="$1" else echo "$0: extra non-option argument '$1'." >&2 exit 1 fi;; esac shift done if test "x$tarball_version_file" = x; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" nl=' ' # Avoid meddling by environment variable of the same name. v= v_from_git= # First see if there is a tarball-only version file. # then try "git describe", then default. if test -f $tarball_version_file then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output esac test "x$v" = x \ && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2 fi if test "x$v" != x then : # use $v # Otherwise, if there is at least one git commit involving the working # directory, and "git describe" output looks sensible, use that to # derive a version string. elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ || git describe --abbrev=4 HEAD 2>/dev/null` \ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ && case $v in $prefix[0-9]*) ;; *) (exit 1) ;; esac then # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v case $vprefix in *-*) : git describe is probably okay three part flavor ;; *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version # of git describe. vtag=`echo "$v" | sed 's/-.*//'` commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ || { commit_list=failed; echo "$0: WARNING: git rev-list failed" 1>&2; } numcommits=`echo "$commit_list" | wc -l` v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; test "$commit_list" = failed && v=UNKNOWN ;; esac # Change the penultimate "-" to ".", for version-comparing tools. # Remove the "g" to save a byte. v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN else v=$fallback fi v=`echo "$v" |sed "s/^$prefix//"` # Test whether to append the "-dirty" suffix only if the version # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= case "$dirty" in '') ;; *) # Append the suffix only if there isn't one already. case $v in *-dirty) ;; *) v="$v-dirty" ;; esac ;; esac fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. printf %s "$v" # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/gitlog-to-changelog�����������������������������������������������0000775�0000000�0000000�00000040260�14110572173�0021753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #! -*-perl-*- # Convert git log output to ChangeLog format. # Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This 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 Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2021-02-24 23:42'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use warnings; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; # use File::Coda; # https://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM <<EOF; Usage: $ME [OPTIONS] [ARGS] Convert git log output to ChangeLog format. If present, any ARGS are passed to "git log". To avoid ARGS being parsed as options to $ME, they may be preceded by '--'. OPTIONS: --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that makes a change to SHA1's commit log text or metadata. --append-dot append a dot to the first line of each commit message if there is no other punctuation or blank at the end. --no-cluster never cluster commit messages under the same date/author header; the default is to cluster adjacent commit messages if their headers are the same and neither commit message contains multiple paragraphs. --srcdir=DIR the root of the source tree, from which the .git/ directory can be derived. --since=DATE convert only the logs since DATE; the default is to convert all log entries. --until=DATE convert only the logs older than DATE. --ignore-matching=PAT ignore commit messages whose first lines match PAT. --ignore-line=PAT ignore lines of commit messages that match PAT. --format=FMT set format string for commit subject and body; see 'man git-log' for the list of format metacharacters; the default is '%s%n%b%n' --strip-tab remove one additional leading TAB from commit message lines. --strip-cherry-pick remove data inserted by "git cherry-pick"; this includes the "cherry picked from commit ..." line, and the possible final "Conflicts:" paragraph. --help display this help and exit --version output version information and exit EXAMPLE: $ME --since=2008-01-01 > ChangeLog $ME -- -n 5 foo > last-5-commits-to-branch-foo SPECIAL SYNTAX: The following types of strings are interpreted specially when they appear at the beginning of a log message line. They are not copied to the output. Copyright-paperwork-exempt: Yes Append the "(tiny change)" notation to the usual "date name email" ChangeLog header to mark a change that does not require a copyright assignment. Co-authored-by: Joe User <user\@example.com> List the specified name and email address on a second ChangeLog header, denoting a co-author. Signed-off-by: Joe User <user\@example.com> These lines are simply elided. In a FILE specified via --amend, comment lines (starting with "#") are ignored. FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on a line) referring to a commit in the current project, and CODE refers to one or more consecutive lines of Perl code. Pairs must be separated by one or more blank line. Here is sample input for use with --amend=FILE, from coreutils: 3a169f4c5d9159283548178668d2fae6fced3030 # fix typo in title: s/all tile types/all file types/ 1379ed974f1fa39b12e2ffab18b3f7a607082202 # Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself. # Change the author to be Paul. Note the escaped "@": s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>, EOF } exit $exit_code; } # If the string $S is a well-behaved file name, simply return it. # If it contains white space, quotes, etc., quote it, and return the new string. sub shell_quote($) { my ($s) = @_; if ($s =~ m![^\w+/.,-]!) { # Convert each single quote to '\'' $s =~ s/\'/\'\\\'\'/g; # Then single quote the string. $s = "'$s'"; } return $s; } sub quoted_cmd(@) { return join (' ', map {shell_quote $_} @_); } # Parse file F. # Comment lines (starting with "#") are ignored. # F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 # (alone on a line) referring to a commit in the current project, and # CODE refers to one or more consecutive lines of Perl code. # Pairs must be separated by one or more blank line. sub parse_amend_file($) { my ($f) = @_; open F, '<', $f or die "$ME: $f: failed to open for reading: $!\n"; my $fail; my $h = {}; my $in_code = 0; my $sha; while (defined (my $line = <F>)) { $line =~ /^\#/ and next; chomp $line; $line eq '' and $in_code = 0, next; if (!$in_code) { $line =~ /^([[:xdigit:]]{40})$/ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"), $fail = 1, next; $sha = lc $1; $in_code = 1; exists $h->{$sha} and (warn "$ME: $f:$.: duplicate SHA1\n"), $fail = 1, next; } else { $h->{$sha} ||= ''; $h->{$sha} .= "$line\n"; } } close F; $fail and exit 1; return $h; } # git_dir_option $SRCDIR # # From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR # is undef). Return as a list (0 or 1 element). sub git_dir_option($) { my ($srcdir) = @_; my @res = (); if (defined $srcdir) { my $qdir = shell_quote $srcdir; my $cmd = "cd $qdir && git rev-parse --show-toplevel"; my $qcmd = shell_quote $cmd; my $git_dir = qx($cmd); defined $git_dir or die "$ME: cannot run $qcmd: $!\n"; $? == 0 or die "$ME: $qcmd had unexpected exit code or signal ($?)\n"; chomp $git_dir; push @res, "--git-dir=$git_dir/.git"; } @res; } { my $since_date; my $until_date; my $format_string = '%s%n%b%n'; my $amend_file; my $append_dot = 0; my $cluster = 1; my $ignore_matching; my $ignore_line; my $strip_tab = 0; my $strip_cherry_pick = 0; my $srcdir; GetOptions ( help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, 'since=s' => \$since_date, 'until=s' => \$until_date, 'format=s' => \$format_string, 'amend=s' => \$amend_file, 'append-dot' => \$append_dot, 'cluster!' => \$cluster, 'ignore-matching=s' => \$ignore_matching, 'ignore-line=s' => \$ignore_line, 'strip-tab' => \$strip_tab, 'strip-cherry-pick' => \$strip_cherry_pick, 'srcdir=s' => \$srcdir, ) or usage 1; defined $since_date and unshift @ARGV, "--since=$since_date"; defined $until_date and unshift @ARGV, "--until=$until_date"; # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/) # that makes a correction in the log or attribution of that commit. my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {}; my @cmd = ('git', git_dir_option $srcdir, qw(log --log-size), '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV); open PIPE, '-|', @cmd or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n" . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); my $prev_multi_paragraph; my $prev_date_line = ''; my @prev_coauthors = (); my @skipshas = (); while (1) { defined (my $in = <PIPE>) or last; $in =~ /^log size (\d+)$/ or die "$ME:$.: Invalid line (expected log size):\n$in"; my $log_nbytes = $1; my $log; my $n_read = read PIPE, $log, $log_nbytes; $n_read == $log_nbytes or die "$ME:$.: unexpected EOF\n"; # Extract leading hash. my ($sha, $rest) = split ':', $log, 2; defined $sha or die "$ME:$.: malformed log entry\n"; $sha =~ /^[[:xdigit:]]{40}$/ or die "$ME:$.: invalid SHA1: $sha\n"; my $skipflag = 0; if (@skipshas) { foreach(@skipshas) { if ($sha =~ /^$_/) { $skipflag = $_; last; } } } # If this commit's log requires any transformation, do it now. my $code = $amend_code->{$sha}; if (defined $code) { eval 'use Safe'; my $s = new Safe; # Put the unpreprocessed entry into "$_". $_ = $rest; # Let $code operate on it, safely. my $r = $s->reval("$code") or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n"; # Note that we've used this entry. delete $amend_code->{$sha}; # Update $rest upon success. $rest = $_; } # Remove lines inserted by "git cherry-pick". if ($strip_cherry_pick) { $rest =~ s/^\s*Conflicts:\n.*//sm; $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m; } my @line = split /[ \t]*\n/, $rest; my $author_line = shift @line; defined $author_line or die "$ME:$.: unexpected EOF\n"; $author_line =~ /^(\d+) (.*>)$/ or die "$ME:$.: Invalid line " . "(expected date/author/email):\n$author_line\n"; # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog # `(tiny change)' annotation. my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line) ? ' (tiny change)' : ''); my $date_line = sprintf "%s %s$tiny\n", strftime ("%Y-%m-%d", localtime ($1)), $2; my @coauthors = grep /^Co-authored-by:.*$/, @line; # Omit meta-data lines we've already interpreted. @line = grep !/^(?:Signed-off-by:[ ].*>$ |Co-authored-by:[ ] |Copyright-paperwork-exempt:[ ] |Tiny-change:[ ] )/x, @line; # Remove leading and trailing blank lines. if (@line) { while ($line[0] =~ /^\s*$/) { shift @line; } while ($line[$#line] =~ /^\s*$/) { pop @line; } } # Handle Emacs gitmerge.el "skipped" commits. # Yes, this should be controlled by an option. So sue me. if ( grep /^(; )?Merge from /, @line ) { my $found = 0; foreach (@line) { if (grep /^The following commit.*skipped:$/, $_) { $found = 1; ## Reset at each merge to reduce chance of false matches. @skipshas = (); next; } if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/) { push ( @skipshas, $1 ); } } } # Ignore commits that match the --ignore-matching pattern, if specified. if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/) { $skipflag = 1; } elsif ($skipflag) { ## Perhaps only warn if a pattern matches more than once? warn "$ME: warning: skipping $sha due to $skipflag\n"; } if (! $skipflag) { if (defined $ignore_line && @line) { @line = grep ! /$ignore_line/, @line; while ($line[$#line] =~ /^\s*$/) { pop @line; } } # Record whether there are two or more paragraphs. my $multi_paragraph = grep /^\s*$/, @line; # Format 'Co-authored-by: A U Thor <email@example.com>' lines in # standard multi-author ChangeLog format. for (@coauthors) { s/^Co-authored-by:\s*/\t /; s/\s*</ </; /<.*?@.*\..*>/ or warn "$ME: warning: missing email address for " . substr ($_, 5) . "\n"; } # If clustering of commit messages has been disabled, if this header # would be different from the previous date/name/etc. header, # or if this or the previous entry consists of two or more paragraphs, # then print the header. if ( ! $cluster || $date_line ne $prev_date_line || "@coauthors" ne "@prev_coauthors" || $multi_paragraph || $prev_multi_paragraph) { $prev_date_line eq '' or print "\n"; print $date_line; @coauthors and print join ("\n", @coauthors), "\n"; } $prev_date_line = $date_line; @prev_coauthors = @coauthors; $prev_multi_paragraph = $multi_paragraph; # If there were any lines if (@line == 0) { warn "$ME: warning: empty commit message:\n" . " commit $sha\n $date_line\n"; } else { if ($append_dot) { # If the first line of the message has enough room, then if (length $line[0] < 72) { # append a dot if there is no other punctuation or blank # at the end. $line[0] =~ /[[:punct:]\s]$/ or $line[0] .= '.'; } } # Remove one additional leading TAB from each line. $strip_tab and map { s/^\t// } @line; # Prefix each non-empty line with a TAB. @line = map { length $_ ? "\t$_" : '' } @line; print "\n", join ("\n", @line), "\n"; } } defined ($in = <PIPE>) or last; $in ne "\n" and die "$ME:$.: unexpected line:\n$in"; } close PIPE or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; # FIXME-someday: include $PROCESS_STATUS in the diagnostic # Complain about any unused entry in the --amend=F specified file. my $fail = 0; foreach my $sha (keys %$amend_code) { warn "$ME:$amend_file: unused entry: $sha\n"; $fail = 1; } exit $fail; } # Local Variables: # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-line-limit: 50 # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d %02H:%02M" # time-stamp-time-zone: "UTC0" # time-stamp-end: "'; # UTC" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/gnu-web-doc-update������������������������������������������������0000775�0000000�0000000�00000014103�14110572173�0021505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Run this after each non-alpha release, to update the web documentation at # https://www.gnu.org/software/$pkg/manual/ VERSION=2021-01-09.09; # UTC # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This 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/>. ME=$(basename "$0") warn() { printf '%s: %s\n' "$ME" "$*" >&2; } die() { warn "$*"; exit 1; } help() { cat <<EOF Usage: $ME Run this script from top_srcdir (no arguments) after each non-alpha release, to update the web documentation at https://www.gnu.org/software/\$pkg/manual/ This script assumes you're using git for revision control, and requires a .prev-version file as well as a Makefile, from which it extracts the version number and package name, respectively. Also, it assumes all documentation is in the doc/ sub-directory. Options: -C, --builddir=DIR location of (configured) Makefile (default: .) -n, --dry-run don't actually commit anything -m, --mirror remove out of date files from document server -u, --user the name of the CVS user on Savannah --help print this help, then exit --version print version number, then exit Report bugs and patches to <bug-gnulib@gnu.org>. EOF exit } version() { year=$(echo "$VERSION" | sed 's/[^0-9].*//') cat <<EOF $ME $VERSION Copyright (C) $year Free Software Foundation, Inc, License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit } # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, # otherwise find the first of the NAMES that can be run (i.e., # supports --version). If found, set ENVVAR to the program name, # die otherwise. # # FIXME: code duplication, see also bootstrap. find_tool () { find_tool_envvar=$1 shift find_tool_names=$@ eval "find_tool_res=\$$find_tool_envvar" if test x"$find_tool_res" = x; then for i do if ($i --version </dev/null) >/dev/null 2>&1; then find_tool_res=$i break fi done else find_tool_error_prefix="\$$find_tool_envvar: " fi test x"$find_tool_res" != x \ || die "one of these is required: $find_tool_names" ($find_tool_res --version </dev/null) >/dev/null 2>&1 \ || die "${find_tool_error_prefix}cannot run $find_tool_res --version" eval "$find_tool_envvar=\$find_tool_res" eval "export $find_tool_envvar" } ## ------ ## ## Main. ## ## ------ ## # Requirements: everything required to bootstrap your package, plus # these. find_tool CVS cvs find_tool GIT git find_tool RSYNC rsync find_tool XARGS gxargs xargs builddir=. dryrun= rm_stale='echo' cvs_user="$USER" while test $# != 0 do # Handle --option=value by splitting apart and putting back on argv. case $1 in --*=*) opt=$(echo "$1" | sed -e 's/=.*//') val=$(echo "$1" | sed -e 's/[^=]*=//') shift set dummy "$opt" "$val" "$@"; shift ;; esac case $1 in --help|--version) ${1#--};; -C|--builddir) shift; builddir=$1; shift ;; -n|--dry-run) dryrun=echo; shift;; -m|--mirror) rm_stale=''; shift;; -u|--user) shift; cvs_user=$1; shift ;; --*) die "unrecognized option: $1";; *) break;; esac done test $# = 0 \ || die "too many arguments" prev=.prev-version version=$(cat $prev) || die "no $prev file?" pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \ || die "no Makefile?" tmp_branch=web-doc-$version-$$ current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}') cleanup() { __st=$? $dryrun rm -rf "$tmp" $GIT checkout "$current_branch" $GIT submodule update --recursive $GIT branch -d $tmp_branch exit $__st } trap cleanup 0 trap 'exit $?' 1 2 13 15 # We must build using sources for which --version reports the # just-released version number, not some string like 7.6.18-20761. # That version string propagates into all documentation. set -e $GIT checkout -b $tmp_branch v$version $GIT submodule update --recursive ./bootstrap srcdir=$(pwd) cd "$builddir" builddir=$(pwd) ./config.status --recheck ./config.status make make web-manual cd "$srcdir" set +e tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1 ( cd $tmp \ && $CVS -d $cvs_user@cvs.sv.gnu.org:/webcvs/$pkg co $pkg ) $RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual ( cd $tmp/$pkg/manual # Add all the files. This is simpler than trying to add only the # new ones because of new directories # First add non empty dirs individually find . -name CVS -prune -o -type d \! -empty -print \ | $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko # Now add all files find . -name CVS -prune -o -type f -print \ | $XARGS --no-run-if-empty -- $dryrun $CVS add -ko # Report/Remove stale files # excluding doc server specific files like CVS/* and .symlinks if test -n "$rm_stale"; then echo 'Consider the --mirror option if all of the manual is generated,' >&2 echo 'which will run `cvs remove` to remove stale files.' >&2 fi { find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print (cd "$builddir"/doc/manual/ && find . -type f -print | sed p) } | sort | uniq -u \ | $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f $dryrun $CVS ci -m $version ) # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "VERSION=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/gnupload����������������������������������������������������������0000775�0000000�0000000�00000032666�14110572173�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Sign files and upload them. scriptversion=2021-04-11.09; # UTC # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This 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 2, 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/>. # Originally written by Alexandre Duret-Lutz <adl@gnu.org>. # The master copy of this file is maintained in the gnulib Git repository. # Please send bug reports and feature requests to bug-gnulib@gnu.org. set -e GPG=gpg # Choose the proper version of gpg, so as to avoid a # "gpg-agent is not available in this session" error # when gpg-agent is version 2 but gpg is still version 1. # FIXME-2020: remove, once all major distros ship gpg version 2 as /usr/bin/gpg gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` case "$gpg_agent_version" in 2.*) gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` case "$gpg_version" in 1.*) if (type gpg2) >/dev/null 2>/dev/null; then # gpg2 is present. GPG=gpg2 else # gpg2 is missing. Ubuntu users should install the package 'gnupg2'. echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2 fi ;; esac ;; esac GPG="${GPG} --batch --no-tty" conffile=.gnuploadrc to= dry_run=false replace= symlink_files= delete_files= delete_symlinks= collect_var= dbg= nl=' ' usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] Sign all FILES, and process them at the destinations specified with --to. If CMD is not given, it defaults to uploading. See examples below. Commands: --delete delete FILES from destination --symlink create symbolic links --rmsymlink remove symbolic links -- treat the remaining arguments as files to upload Options: --to DEST specify a destination DEST for FILES (multiple --to options are allowed) --user NAME sign with key NAME --replace allow replacements of existing files --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names -n, --dry-run do nothing, show what would have been done (including the constructed directive file) --version output version information and exit -h, --help print this help text and exit If --symlink-regex is given without EXPR, then the link target name is created by replacing the version information with '-latest', e.g.: foo-1.3.4.tar.gz -> foo-latest.tar.gz Recognized destinations are: alpha.gnu.org:DIRECTORY savannah.gnu.org:DIRECTORY savannah.nongnu.org:DIRECTORY ftp.gnu.org:DIRECTORY build directive files and upload files by FTP download.gnu.org.ua:{alpha|ftp}/DIRECTORY build directive files and upload files by SFTP [user@]host:DIRECTORY upload files with scp Options and commands are applied in order. If the file $conffile exists in the current working directory, its contents are prepended to the actual command line options. Use this to keep your defaults. Comments (#) and empty lines in $conffile are allowed. <https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> gives some further background. Examples: 1. Upload foobar-1.0.tar.gz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz 2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz 3. Same as above, and also create symbolic links to foobar-latest.tar.*: gnupload --to ftp.gnu.org:foobar \\ --symlink-regex \\ foobar-1.0.tar.gz foobar-1.0.tar.xz 4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz and likewise for the corresponding .sig file: gnupload --to ftp.gnu.org:foobar \\ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\ foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig or (equivalent): gnupload --to ftp.gnu.org:foobar \\ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\ --symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig 5. Upload foobar-0.9.90.tar.gz to two sites: gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ foobar-0.9.90.tar.gz 6. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz (the -- terminates the list of files to delete): gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ --delete oopsbar-0.9.91.tar.gz \\ -- foobar-0.9.91.tar.gz gnupload executes a program ncftpput to do the transfers; if you don't happen to have an ncftp package installed, the ncftpput-ftp script in the build-aux/ directory of the gnulib package (https://savannah.gnu.org/projects/gnulib) may serve as a replacement. Send patches and bug reports to <bug-gnulib@gnu.org>." copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'` copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." # Read local configuration file if test -r "$conffile"; then echo "$0: Reading configuration file $conffile" conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` eval set x "$conf \"\$@\"" shift fi while test -n "$1"; do case $1 in -*) collect_var= case $1 in -h | --help) echo "$usage" exit $? ;; --to) if test -z "$2"; then echo "$0: Missing argument for --to" 1>&2 exit 1 elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2 echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2 echo "$0: is used for direct ftp uploads, not with gnupload)." >&2 echo "$0: See --help and its examples if need be." >&2 exit 1 else to="$to $2" shift fi ;; --user) if test -z "$2"; then echo "$0: Missing argument for --user" 1>&2 exit 1 else GPG="$GPG --local-user $2" shift fi ;; --delete) collect_var=delete_files ;; --replace) replace="replace: true" ;; --rmsymlink) collect_var=delete_symlinks ;; --symlink-regex=*) symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` ;; --symlink-regex) symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' ;; --symlink) collect_var=symlink_files ;; -n | --dry-run) dry_run=: ;; --version) echo "gnupload $scriptversion" echo "$copyright" exit 0 ;; --) shift break ;; -*) echo "$0: Unknown option '$1', try '$0 --help'" 1>&2 exit 1 ;; esac ;; *) if test -z "$collect_var"; then break else eval "$collect_var=\"\$$collect_var $1\"" fi ;; esac shift done dprint() { echo "Running $* ..." } if $dry_run; then dbg=dprint fi if test -z "$to"; then echo "$0: Missing destination sites" >&2 exit 1 fi if test -n "$symlink_files"; then x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` if test -n "$x"; then echo "$0: Odd number of symlink arguments" >&2 exit 1 fi fi if test $# = 0; then if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then echo "$0: No file to upload" 1>&2 exit 1 fi else # Make sure all files exist. We don't want to ask # for the passphrase if the script will fail. for file do if test ! -f $file; then echo "$0: Cannot find '$file'" 1>&2 exit 1 elif test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` if test -z "$linkname"; then echo "$0: symlink expression produces empty results" >&2 exit 1 elif test "$linkname" = $file; then echo "$0: symlink expression does not alter file name" >&2 exit 1 fi fi done fi # Make sure passphrase is not exported in the environment. unset passphrase unset passphrase_fd_0 GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg} # Reset PATH to be sure that echo is a built-in. We will later use # 'echo $passphrase' to output the passphrase, so it is important that # it is a built-in (third-party programs tend to appear in 'ps' # listings with their arguments...). # Remember this script runs with 'set -e', so if echo is not built-in # it will exit now. if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else PATH=/empty echo -n "Enter GPG passphrase: " stty -echo read -r passphrase stty echo echo passphrase_fd_0="--passphrase-fd 0" fi if test $# -ne 0; then for file do echo "Signing $file ..." rm -f $file.sig echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file done fi # mkdirective DESTDIR BASE FILE STMT # Arguments: See upload, below mkdirective () { stmt="$4" if test -n "$3"; then stmt=" filename: $3$stmt" fi cat >${2}.directive<<EOF version: 1.2 directory: $1 comment: gnupload v. $scriptversion$stmt EOF if $dry_run; then echo "File ${2}.directive:" cat ${2}.directive echo "File ${2}.directive:" | sed 's/./-/g' fi } mksymlink () { while test $# -ne 0 do echo "symlink: $1 $2" shift shift done } # upload DEST DESTDIR BASE FILE STMT FILES # Arguments: # DEST Destination site; # DESTDIR Destination directory; # BASE Base name for the directive file; # FILE Name of the file to distribute (may be empty); # STMT Additional statements for the directive file; # FILES List of files to upload. upload () { dest=$1 destdir=$2 base=$3 file=$4 stmt=$5 files=$6 rm -f $base.directive $base.directive.asc case $dest in alpha.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc ;; ftp.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc ;; savannah.gnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files ;; savannah.nongnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files ;; download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` mkdirective "$destdir_p1" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive for f in $files $base.directive.asc do echo put $f done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir ;; /*) dest_host=`echo "$dest" | sed 's,:.*,,'` mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg cp $files $base.directive.asc $dest_host ;; *) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg scp $files $dest ;; esac rm -f $base.directive $base.directive.asc } ##### # Process any standalone directives stmt= if test -n "$symlink_files"; then stmt="$stmt `mksymlink $symlink_files`" fi for file in $delete_files do stmt="$stmt archive: $file" done for file in $delete_symlinks do stmt="$stmt rmsymlink: $file" done if test -n "$stmt"; then for dest in $to do destdir=`echo $dest | sed 's/[^:]*://'` upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" done fi # Process actual uploads for dest in $to do for file do echo "Uploading $file to $dest ..." stmt= # # allowing file replacement is all or nothing. if test -n "$replace"; then stmt="$stmt $replace" fi # files="$file $file.sig" destdir=`echo $dest | sed 's/[^:]*://'` if test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` stmt="$stmt symlink: $file $linkname symlink: $file.sig $linkname.sig" fi upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" done done exit 0 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/increment-serial��������������������������������������������������0000775�0000000�0000000�00000005506�14110572173�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Increment serial number in Autoconf *.m4 files. # Copyright (C) 2021 Free Software Foundation, Inc. # # This 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 2, 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/>. scriptversion=2021-04-11 copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'` copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." usage="Usage: $0 [FILE...] Increments the serial number, if present, in each of the files. Options: --version output version information and exit --help print this help text and exit Send patches and bug reports to <bug-gnulib@gnu.org>." # Based on # <https://www.gnu.org/software/sed/manual/html_node/Increment-a-number.html> sed_inc_serial='1,10 { /serial *[0-9]/ { s/\(serial *[0-9][0-9]*\)/\1~/ :a s/\(serial *[0-9]*\)9\(_*\)~/\1_\2~/ ta s/\(serial *\)\(_*\)~/\11\2~/ tb s/\(serial *[0-9]*\)8\(_*\)~/\19\2~/ tb s/\(serial *[0-9]*\)7\(_*\)~/\18\2~/ tb s/\(serial *[0-9]*\)6\(_*\)~/\17\2~/ tb s/\(serial *[0-9]*\)5\(_*\)~/\16\2~/ tb s/\(serial *[0-9]*\)4\(_*\)~/\15\2~/ tb s/\(serial *[0-9]*\)3\(_*\)~/\14\2~/ tb s/\(serial *[0-9]*\)2\(_*\)~/\13\2~/ tb s/\(serial *[0-9]*\)1\(_*\)~/\12\2~/ tb s/\(serial *[0-9]*\)0\(_*\)~/\11\2~/ tb :b s/\(serial *[0-9]*\)_/\10/ tb s/\(serial *[0-9]*\)~/\1/ } }' # func_process FILE func_process () { sed -i -e "$sed_inc_serial" "$1" || exit 1 } while test $# -gt 0; do case "$1" in --version) set -e echo "increment-serial $scriptversion" echo "$copyright" echo printf 'Written by %s.\n' "Bruno Haible" exit 0 ;; --help) set -e echo "$usage" exit 0 ;; --) shift while test $# -gt 0; do case "$1" in -*) func_process "./$1" ;; *) func_process "$1" ;; esac shift done break ;; -*) echo "$0: Unknown option '$1', try '$0 --help'" 1>&2 exit 1 ;; *) func_process "$1" ;; esac shift done exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/install-reloc�����������������������������������������������������0000775�0000000�0000000�00000022567�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install-reloc - install a program including a relocating wrapper # Copyright (C) 2003-2021 Free Software Foundation, Inc. # Written by Bruno Haible <bruno@clisp.org>, 2003. # # This 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/>. # Usage 1: # install-reloc -- library_path_var library_path_value prefix destdir \ # compile_command srcdir builddir config_h_dir exeext \ # strip_command \ # install_command... destprog # where # - library_path_var is the platform dependent runtime library path variable # - library_path_value is a colon separated list of directories that contain # the libraries at installation time (use this instead of -rpath) # - prefix is the base directory at installation time # - destdir is a string that is prepended to all file names at installation # time; it is already prepended to destprog but not to library_path_value # and prefix # - compile_command is a C compiler compilation and linking command # - srcdir is the directory where to find relocwrapper.c and its dependencies # - builddir is the directory where to find built dependencies (namely, # alloca.h and stdbool.h) # - config_h_dir is the directory where to find config.h # - exeext is platform dependent suffix of executables # - strip_command is the command for stripping executables, or : if no # stripping is desired # - install_command is the install command line, excluding the final destprog # - destprog is the destination program name # Usage 2: # env RELOC_LIBRARY_PATH_VAR=library_path_var \ # RELOC_LIBRARY_PATH_VALUE=library_path_value \ # RELOC_PREFIX=prefix \ # RELOC_DESTDIR=destdir \ # RELOC_COMPILE_COMMAND=compile_command \ # RELOC_SRCDIR=srcdir \ # RELOC_BUILDDIR=builddir \ # RELOC_CONFIG_H_DIR=config_h_dir \ # RELOC_EXEEXT=exeext \ # RELOC_STRIP_PROG=strip_command \ # RELOC_INSTALL_PROG=install_command... \ # install-reloc prog1 ... destprog # where destprog is either the destination program name (when only one program # is specified) or the destination directory for all programs. # install-reloc renames destprog to destprog.bin and installs a relocating # wrapper in the place of destprog. progname=$0 if test $# -ge 12 && test "x$1" = "x--"; then # Get fixed position arguments. shift library_path_var=$1 library_path_value=$2 prefix=$3 destdir=$4 shift shift shift shift compile_command=$1 srcdir=$2 builddir=$3 config_h_dir=$4 exeext=$5 shift shift shift shift shift strip_prog=$1 shift install_prog=$1 # maybe not including the "-c" option shift else if test $# -ge 2; then # Get arguments from environment variables. library_path_var=$RELOC_LIBRARY_PATH_VAR library_path_value=$RELOC_LIBRARY_PATH_VALUE prefix=$RELOC_PREFIX destdir=$RELOC_DESTDIR compile_command=$RELOC_COMPILE_COMMAND srcdir=$RELOC_SRCDIR builddir=$RELOC_BUILDDIR config_h_dir=$RELOC_CONFIG_H_DIR exeext=$RELOC_EXEEXT strip_prog=$RELOC_STRIP_PROG install_prog=$RELOC_INSTALL_PROG # including the "-c" option else echo "Usage: $0 -- library_path_var library_path_value prefix destdir" \ "compile_command srcdir builddir config_h_dir exeext" \ "strip_command" \ "install_command... destprog" 1>&2 exit 1 fi fi # Get destprog, last argument. destprog= for arg do destprog=$arg done # Determine whether destprog is a program name or a directory name. if test -d "$destprog"; then sed_remove_trailing_slashes='s|//*$||' destprog_directory=`echo "$destprog" | sed -e "$sed_remove_trailing_slashes"` if test -z "$destprog_directory"; then destprog_directory='/' fi else destprog_directory= fi # Prepare for remove trailing $exeext, if present. if test -n "$exeext"; then sed_quote='s,\.,\\.,g' sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||' fi if test -z "$destprog_directory"; then # Remove trailing $exeext, if present. if test -n "$exeext"; then destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"` fi fi # Outputs a command and runs it. func_verbose () { # Make it easy to copy&paste the printed command into a shell in most cases, # by escaping '\\', '"', and '$'. This is not perfect, just good enough. echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g' "$@" } # Run install_command. func_verbose $install_prog "$@" || exit $? # Iterate over all destination program names. # func_iterate f # applies f to each destination program names, after setting destprog. sed_basename_of_file='s|^.*/||' func_iterate () { if test -n "$destprog_directory"; then prev_arg= for arg do if test -n "prev_arg"; then destprog="$destprog_directory"/`echo "$prev_arg" | sed -e "$sed_basename_of_file"` $1 fi prev_arg="$arg" done else $1 fi } # Run strip_command. func_strip () { # Remove trailing $exeext, if present. if test -n "$exeext"; then destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"` fi func_verbose "$strip_prog" "$destprog$exeext" || exit $? } if test "$strip_prog" != ':'; then func_iterate func_strip fi # If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build # a wrapper. test -n "$library_path_var" || exit 0 libdirs= save_IFS="$IFS"; IFS=":" for dir in $library_path_value; do IFS="$save_IFS" if test -n "$dir"; then case "$libdirs" in *"\"$dir\""*) ;; # remove duplicate *) libdirs="$libdirs\"$dir\"," ;; esac fi done IFS="$save_IFS" # If there are no library directories to add at runtime, we don't need a # wrapper. test -n "$libdirs" || exit 0 # Determine installdir from destprog, removing a leading destdir if present. if test -n "$destprog_directory"; then installdir="$destprog_directory" else installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'` fi if test -n "$destdir"; then sed_quote='s,\([|.\*^$[]\),\\\1,g' sed_remove_destdir='s|^'`echo "$destdir" | sed -e "$sed_quote"`'||' installdir=`echo "$installdir" | sed -e "$sed_remove_destdir"` fi # Compile and install wrapper. func_create_wrapper () { # Remove trailing $exeext, if present. if test -n "$exeext"; then destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"` fi # Compile wrapper. func_verbose $compile_command \ -I"$builddir" -I"$srcdir" -I"$config_h_dir" \ -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC \ -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" \ -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" \ -D"EXEEXT=\"$exeext\"" \ "$srcdir"/relocwrapper.c \ "$srcdir"/progname.c \ "$srcdir"/progreloc.c \ "$srcdir"/areadlink.c \ "$srcdir"/careadlinkat.c \ "$srcdir"/allocator.c \ "$srcdir"/readlink.c \ "$srcdir"/stat.c \ "$srcdir"/canonicalize-lgpl.c \ "$srcdir"/malloc/scratch_buffer_dupfree.c \ "$srcdir"/malloc/scratch_buffer_grow.c \ "$srcdir"/malloc/scratch_buffer_grow_preserve.c \ "$srcdir"/malloc/scratch_buffer_set_array_size.c \ "$srcdir"/malloc.c \ "$srcdir"/realloc.c \ "$srcdir"/free.c \ "$srcdir"/mempcpy.c \ "$srcdir"/rawmemchr.c \ "$srcdir"/malloca.c \ "$srcdir"/relocatable.c \ "$srcdir"/setenv.c \ "$srcdir"/c-ctype.c \ -o "$destprog.wrapper$exeext" rc=$? # Clean up object files left over in the current directory by the native C # compilers on Solaris, HP-UX, OSF/1, IRIX. rm -f relocwrapper.o \ progname.o \ progreloc.o \ areadlink.o \ careadlinkat.o \ allocator.o \ readlink.o \ stat.o \ canonicalize-lgpl.o \ scratch_buffer_dupfree.o \ scratch_buffer_grow.o \ scratch_buffer_grow_preserve.o \ scratch_buffer_set_array_size.o \ malloc.o \ realloc.o \ free.o \ mempcpy.o \ rawmemchr.o \ malloca.o \ relocatable.o \ setenv.o \ c-ctype.o test $rc = 0 || exit $? # Clean up debugging information left over by the native C compiler on MacOS X. rm -rf "$destprog.wrapper$exeext.dSYM" test $rc = 0 || exit $? # Strip wrapper. test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog.wrapper$exeext" || exit $? # Rename $destprog.wrapper -> $destprog -> $destprog.bin. ln -f "$destprog$exeext" "$destprog.bin$exeext" \ || { rm -f "$destprog.bin$exeext" \ && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \ || exit 1 mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1 } func_iterate func_create_wrapper exit 0 �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/install-sh��������������������������������������������������������0000775�0000000�0000000�00000035776�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS 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. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��gnulib-20210822~d383792/build-aux/javacomp.sh.in����������������������������������������������������0000664�0000000�0000000�00000005236�14110572173�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Compile a Java program. # Copyright (C) 2001-2021 Free Software Foundation, Inc. # Written by Bruno Haible <haible@clisp.cons.org>, 2001. # # This 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/>. # This uses the same choices as javacomp.c, but instead of relying on the # environment settings at run time, it uses the environment variables # present at configuration time. # # This is a separate shell script, because it must be able to unset JAVA_HOME # in some cases, which a simple shell command cannot do. # # The extra CLASSPATH must have been set prior to calling this script. # Options that can be passed are -O, -g and "-d DIRECTORY". CONF_JAVAC='@CONF_JAVAC@' CONF_CLASSPATH='@CLASSPATH@' if test -n "@HAVE_JAVAC_ENVVAR@"; then # Combine given CLASSPATH and configured CLASSPATH. if test -n "$CLASSPATH"; then CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}" else CLASSPATH="$CONF_CLASSPATH" fi export CLASSPATH test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" exec $CONF_JAVAC "$@" else unset JAVA_HOME if test -n "@HAVE_GCJ_C@"; then # In this case, $CONF_JAVAC starts with "gcj -C". CLASSPATH="$CLASSPATH" export CLASSPATH test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" exec $CONF_JAVAC "$@" else if test -n "@HAVE_JAVAC@"; then # In this case, $CONF_JAVAC starts with "javac". CLASSPATH="$CLASSPATH" export CLASSPATH test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" exec $CONF_JAVAC "$@" else if test -n "@HAVE_JIKES@"; then # In this case, $CONF_JAVAC starts with "jikes". # Combine given CLASSPATH and configured CLASSPATH. if test -n "$CLASSPATH"; then CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}" else CLASSPATH="$CONF_CLASSPATH" fi export CLASSPATH test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@" exec $CONF_JAVAC "$@" else echo 'Java compiler not found, try installing gcj or set $JAVAC, then reconfigure' 1>&2 exit 1 fi fi fi fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/javaexec.sh.in����������������������������������������������������0000664�0000000�0000000�00000004640�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Execute a Java program. # Copyright (C) 2001-2021 Free Software Foundation, Inc. # Written by Bruno Haible <haible@clisp.cons.org>, 2001. # # This 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/>. # This uses the same choices as javaexec.c, but instead of relying on the # environment settings at run time, it uses the environment variables # present at configuration time. # # This is a separate shell script, because it must be able to unset JAVA_HOME # in some cases, which a simple shell command cannot do. # # The extra CLASSPATH must have been set prior to calling this script. CONF_JAVA='@CONF_JAVA@' CONF_CLASSPATH='@CLASSPATH@' if test -n "@HAVE_JAVA_ENVVAR@"; then # Combine given CLASSPATH and configured CLASSPATH. if test -n "$CLASSPATH"; then CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}" else CLASSPATH="$CONF_CLASSPATH" fi export CLASSPATH test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" exec $CONF_JAVA "$@" else unset JAVA_HOME export CLASSPATH if test -n "@HAVE_GIJ@"; then # In this case, $CONF_JAVA is "gij". test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" exec $CONF_JAVA "$@" else if test -n "@HAVE_JAVA@"; then # In this case, $CONF_JAVA is "java". test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" exec $CONF_JAVA "$@" else if test -n "@HAVE_JRE@"; then # In this case, $CONF_JAVA is "jre". test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" exec $CONF_JAVA "$@" else if test -n "@HAVE_JVIEW@"; then # In this case, $CONF_JAVA is "jview". test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@" exec $CONF_JAVA "$@" else echo 'Java virtual machine not found, try installing gij or set $JAVA, then reconfigure' 1>&2 exit 1 fi fi fi fi fi ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/ldd.sh.in���������������������������������������������������������0000664�0000000�0000000�00000001551�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Determine the dynamically linked dependencies of a program. # Copyright (C) 2006-2021 Free Software Foundation, Inc. # Written by Bruno Haible <bruno@clisp.org>, 2006. # # This 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/>. # Usage: ldd.sh program @LDDPROG@ "$1" @LDDPOSTPROC@ �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/libtool-next-version����������������������������������������������0000775�0000000�0000000�00000023730�14110572173�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Copyright (C) 2019-2021 Free Software Foundation, Inc. # # This 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/>. # # This program is a wizard that helps a maintainer update the libtool # version of a shared library, according to the documentation section # 'Updating version info' # <https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html>. # # Let's call the three parts of the version # LTV_CURRENT # LTV_REVISION # LTV_AGE # # The list of steps given in this documentation section # - If the library source code has changed at all since the last update, # then increment LTV_REVISION. # - If any interfaces have been added, removed, or changed since the last # update, increment LTV_CURRENT and set LTV_REVISION to 0. # - If any interfaces have been added since the last public release, then # increment LTV_AGE. # - If any interfaces have been removed or changed since the last public # release, then set LTV_AGE to 0. # leads to mistakes, because # - It does not say what "interfaces" are. # - It does not enforce that applying the second, third, or fourth rule # is only possible after applying the first rule. # - It does not enforce that applying the third or fourth rule is only # possible after applying the second rule. scriptversion=2021-04-11 # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: libtool-next-version [OPTION]... PREVIOUS-LIBRARY CURRENT-LIBRARY Determines the next version to use for a libtool library. PREVIOUS-LIBRARY is the installed library (in .a or .so format) of the previous release. CURRENT-LIBRARY is the installed library (in .a or .so format) of the current release candidate. Options: --help print this help and exit --version print version information and exit Report bugs to <bruno@clisp.org>." } # func_version # outputs to stdout the --version message. func_version () { copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'` echo "libtool-next-version (GNU gnulib) $scriptversion" echo "Copyright (C) ${copyright_year} Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." echo printf 'Written by %s.\n' "Bruno Haible" } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. func_fatal_error () { echo "libtool-next-version: *** $1" 1>&2 echo "libtool-next-version: *** Stop." 1>&2 exit 1 } # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d -q "$TMPDIR/gtXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gt$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } } # func_read_yesno # reads an answer (yes or no). # Sets variable # - ans yes or no func_read_yesno () { while true; do read ans if test yes = "$ans" || test no = "$ans"; then break fi echo "Invalid answer. Please answer yes or no." done } # Command-line option processing. while test $# -gt 0; do case "$1" in --help | --hel | --he | --h ) func_usage exit 0 ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version exit 0 ;; -- ) # Stop option processing shift; break ;; -* ) func_fatal_error "unrecognized option: $option" ;; * ) break ;; esac done test $# = 2 || { if test $# -gt 2; then func_fatal_error "too many arguments" else func_fatal_error "Usage: libtool-next-version [OPTION]... PREVIOUS-LIBRARY CURRENT-LIBRARY" fi } test -f "$1" || func_fatal_error "file $1 not found" test -f "$2" || func_fatal_error "file $2 not found" (type nm) >/dev/null || func_fatal_error "program 'nm' not found" # Determine how to extract a symbol list from the 'nm' output. case `uname -s` in Linux | FreeBSD | NetBSD | OpenBSD) nm_filter="sed -n -e 's/^.* [TWDRB] //p'" ;; Darwin) nm_filter="sed -n -e 's/^.* [TWDRB] _//p'" ;; Minix) nm_filter="sed -n -e 's/^.* [TDC] _//p'" ;; AIX) nm_filter="sed -n -e 's/ *[UD] .*//p' | sed -e 's/^\\.//'" ;; HP-UX) nm_filter="grep '|extern|\\(code\\|data\\) |' | sed -e 's/|.*//' | sed -e 's/ *$//'" ;; IRIX) nm_filter="grep '|\\(GLOB\\|WEAK\\)' | sed -e 's/^.*|//'" ;; SunOS) case `uname -r` in 5.10) nm_filter="sed -n -e 's/^.* [ATWDRBV] //p'" ;; *) nm_filter="grep '|\\(GLOB\\|WEAK\\)' | grep -v '|UNDEF' | grep -v '|SUNW' | sed -e 's/^.*|//'" ;; esac ;; CYGWIN*) nm_filter="sed -n -e 's/^.* T _//p'" ;; *) func_fatal_error "unknown OS - don't know how to interpret the 'nm' output" ;; esac nm_filter="$nm_filter | LC_ALL=C sort -u" func_tmpdir eval "nm '$1' | $nm_filter > '$tmp/symlist1'" eval "nm '$2' | $nm_filter > '$tmp/symlist2'" echo "Please enter the libtool version of the library in the previous release." printf "LTV_CURRENT="; read current nondigits=`echo "$current" | tr -d '0123456789'` { test -n "$current" && test -z "$nondigits"; } \ || func_fatal_error "LTV_CURRENT is invalid. It should be a nonnegative integer." printf "LTV_REVISION="; read revision nondigits=`echo "$revision" | tr -d '0123456789'` { test -n "$revision" && test -z "$nondigits"; } \ || func_fatal_error "LTV_REVISION is invalid. It should be a nonnegative integer." printf "LTV_AGE="; read age nondigits=`echo "$age" | tr -d '0123456789'` { test -n "$age" && test -z "$nondigits"; } \ || func_fatal_error "LTV_AGE is invalid. It should be a nonnegative integer." echo echo "-------------------------------------------------------------------------------" echo "Did the library's code change at all since the previous version?" echo "You can usually detect this by looking at the source code changes in git;" echo "don't forget source code that is imported from other projects." if cmp "$tmp/symlist1" "$tmp/symlist2" >/dev/null; then echo "Please answer yes or no." else echo "The symbol list changed. Here are the differences:" (cd "$tmp" && diff symlist1 symlist2 | grep '^[<>]' | sed -e 's/^/ /') echo "Please answer yes or no (probably yes)." fi func_read_yesno if test "$ans" = yes; then revision=`expr $revision + 1` echo echo "-------------------------------------------------------------------------------" echo "Have any interfaces (functions, variables, classes) been removed since the" echo "previous release? What matters here are interfaces at the linker level;" echo "whether macros have been removed from the include files does not matter." if diff "$tmp/symlist1" "$tmp/symlist2" | grep '^< ' >/dev/null; then echo "Some symbols have been removed:" diff "$tmp/symlist1" "$tmp/symlist2" | grep '^< ' | sed -e 's/^< / /' echo "Please answer yes or no (probably yes)." else echo "Please answer yes or no." fi func_read_yesno if test "$ans" = yes; then current=`expr $current + 1` revision=0 age=0 else echo echo "-------------------------------------------------------------------------------" echo "Have any interfaces (functions, variables, classes) been changed since the" echo "previous release? This includes signature changes. It includes also details of" echo "how functions produce their results and the values of variables, IF AND ONLY IF" echo "users of the library are likely use these details in their test suite." echo "Please answer yes or no." func_read_yesno if test "$ans" = yes; then current=`expr $current + 1` revision=0 age=0 else echo echo "-------------------------------------------------------------------------------" echo "Have any interfaces (functions, variables, classes) been added since the" echo "previous release? What matters here are interfaces at the linker level;" echo "whether macros have been added to the include files does not matter." if diff "$tmp/symlist1" "$tmp/symlist2" | grep '^> ' >/dev/null; then echo "Some symbols have been added:" diff "$tmp/symlist1" "$tmp/symlist2" | grep '^> ' | sed -e 's/^> / /' echo "Please answer yes or no (probably yes)." else echo "Please answer yes or no." fi func_read_yesno if test "$ans" = yes; then current=`expr $current + 1` revision=0 age=`expr $age + 1` fi fi fi fi echo echo "-------------------------------------------------------------------------------" echo "This is the libtool version of the library for the new release:" echo "LTV_CURRENT=$current" echo "LTV_REVISION=$revision" echo "LTV_AGE=$age" ����������������������������������������gnulib-20210822~d383792/build-aux/libtool-reloc�����������������������������������������������������0000775�0000000�0000000�00000005504�14110572173�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # libtool-reloc - libtool wrapper with support for relocatable programs # Copyright (C) 2019-2021 Free Software Foundation, Inc. # Written by Bruno Haible <bruno@clisp.org>, 2019. # # This 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/>. # Usage: libtool-reloc libtool LIBTOOL_ARGUMENTS # Outputs a command and runs it. func_verbose () { # Make it easy to copy&paste the printed command into a shell in most cases, # by escaping '\\', '"', and '$'. This is not perfect, just good enough. echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g' "$@" } # Determine the mode from the arguments. mode= for arg do case "$arg" in --mode=link) mode=link ;; esac done if test "$mode" = link; then # Determine the target from the arguments. target= next_is_target=false for arg do if $next_is_target; then target="$arg" next_is_target=false else case "$arg" in -o) next_is_target=true ;; *) next_is_target=false ;; esac fi done case "$target" in *.la) # When creating a library: # 1. Add a '-Wl,-rpath,@loader_path' option. # (A '-R @loader_path' option does not work: libtool produces # an error "error: only absolute run-paths are allowed".) # (Also note that 'install_name_tool -add_rpath @loader_path ...' # does not work on Mac OS X 10.5.) # This is done through the RELOCATABLE_LDFLAGS macro. # 2. After creating the library, run # install_name_tool -id @rpath/$dlname $target_dir/.libs/$dlname # (This is easier than to modify the libtool script to emit a different # install_name. Also, an option '-Wl,-install_name,@rpath/$dlname' does # not work since libtool emits another option '-Wl,-install_name,...' # after it. "$@" && { dlname_assignment=`grep '^dlname=' "$target"` dlname= eval "$dlname_assignment" # Nothing to do when --disable-shared was specified. if test -n "$dlname"; then target_dir=`dirname "$target"` if test -f "$target_dir/.libs/$dlname"; then func_verbose install_name_tool -id "@rpath/$dlname" "$target_dir/.libs/$dlname" fi fi } ;; *) "$@" ;; esac else "$@" fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/mdate-sh����������������������������������������������������������0000775�0000000�0000000�00000013732�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1995-2021 Free Software Foundation, Inc. # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 # # This 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 2, 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/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 export TZ # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������gnulib-20210822~d383792/build-aux/mkinstalldirs�����������������������������������������������������0000775�0000000�0000000�00000006672�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2020-07-26.22; # UTC # Original author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to <bug-automake@gnu.org>." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the 'mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because '.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "umask 22" umask 22 echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac echo "umask 22" umask 22 for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp=$pathcomp/ done if test ! -z "$dirmode"; then echo "chmod $dirmode $file" chmod "$dirmode" "$file" || errstatus=$? fi done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������gnulib-20210822~d383792/build-aux/mktempd�����������������������������������������������������������0000775�0000000�0000000�00000007203�14110572173�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Create a temporary directory, much like mktemp -d does. # Copyright (C) 2007-2021 Free Software Foundation, Inc. # This 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 Jim Meyering. # Usage: mktempd /tmp phoey.XXXXXXXXXX # First, try to use the mktemp program. # Failing that, we'll roll our own mktemp-like function: # - try to get random bytes from /dev/urandom # - failing that, generate output from a combination of quickly-varying # sources and gzip. Ignore non-varying gzip header, and extract # "random" bits from there. # - given those bits, map to file-name bytes using tr, and try to create # the desired directory. # - make only $MAX_TRIES attempts ME=`basename "$0"` die() { echo >&2 "$ME: $@"; exit 1; } MAX_TRIES=4 rand_bytes() { n=$1 chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 dev_rand=/dev/urandom if test -r "$dev_rand"; then # Note: 256-length($chars) == 194; 3 copies of $chars is 186 + 8 = 194. dd ibs=$n count=1 if="$dev_rand" 2>/dev/null \ | tr -c $chars 01234567$chars$chars$chars return fi cmds='date; date +%N; free; who -a; w; ps auxww; ps -ef' data=` (eval "$cmds") 2>&1 | gzip ` n_plus_50=`expr $n + 50` # Ensure that $data has length at least 50+$n while :; do len=`echo "$data"|wc -c` test $n_plus_50 -le $len && break; data=` (echo "$data"; eval "$cmds") 2>&1 | gzip ` done echo "$data" \ | dd bs=1 skip=50 count=$n 2>/dev/null \ | tr -c $chars 01234567$chars$chars$chars } mktempd() { case $# in 2);; *) die "Usage: $ME DIR TEMPLATE";; esac destdir=$1 template=$2 # Disallow any trailing slash on specified destdir: # it would subvert the post-mktemp "case"-based destdir test. case $destdir in /) ;; */) die "invalid destination dir: remove trailing slash(es)";; esac case $template in *XXXX) ;; *) die "invalid template: $template (must have a suffix of at least 4 X's)";; esac fail=0 # First, try to use mktemp. d=`env -u TMPDIR mktemp -d -t -p "$destdir" "$template" 2>/dev/null` \ || fail=1 # The resulting name must be in the specified directory. case $d in "$destdir"*);; *) fail=1;; esac # It must have created the directory. test -d "$d" || fail=1 # It must have 0700 permissions. Handle sticky "S" bits. perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1 case $perms in drwx------*) ;; *) fail=1;; esac test $fail = 0 && { echo "$d" return } # If we reach this point, we'll have to create a directory manually. # Get a copy of the template without its suffix of X's. base_template=`echo "$template"|sed 's/XX*$//'` # Calculate how many X's we've just removed. template_length=`echo "$template" | wc -c` nx=`echo "$base_template" | wc -c` nx=`expr $template_length - $nx` err= i=1 while :; do X=`rand_bytes $nx` candidate_dir="$destdir/$base_template$X" err=`mkdir -m 0700 "$candidate_dir" 2>&1` \ && { echo "$candidate_dir"; return; } test $MAX_TRIES -le $i && break; i=`expr $i + 1` done die "$err" } mktempd "$@" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/move-if-change����������������������������������������������������0000775�0000000�0000000�00000005161�14110572173�0020707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Like mv $1 $2, but if the files are the same, just delete $1. # Status is zero if successful, nonzero otherwise. VERSION='2018-03-07 03:47'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. # Copyright (C) 2002-2021 Free Software Foundation, Inc. # This 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/>. usage="usage: $0 SOURCE DEST" help="$usage or: $0 OPTION If SOURCE is different than DEST, then move it to DEST; else remove SOURCE. --help display this help and exit --version output version information and exit The variable CMPPROG can be used to specify an alternative to 'cmp'. Report bugs to <bug-gnulib@gnu.org>." year=`expr "$VERSION" : '\([^-]*\)'` version=`expr "$VERSION" : '\([^ ]*\)'` version="move-if-change (gnulib) $version Copyright $year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." cmpprog=${CMPPROG-cmp} for arg do case $arg in --help | --hel | --he | --h) exec echo "$help" ;; --version | --versio | --versi | --vers | --ver | --ve | --v) exec echo "$version" ;; --) shift break ;; -*) echo "$0: invalid option: $arg" >&2 exit 1 ;; *) break ;; esac done test $# -eq 2 || { echo "$0: $usage" >&2; exit 1; } if test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null; then rm -f -- "$1" else if mv -f -- "$1" "$2"; then :; else # Ignore failure due to a concurrent move-if-change. test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null && rm -f -- "$1" fi fi ## Local Variables: ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-start: "VERSION='" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/ncftpput-ftp������������������������������������������������������0000775�0000000�0000000�00000002602�14110572173�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This 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/>. # # Original author: Karl Berry. # Bug reports and correspondence to bug-gnulib@gnu.org. # # This is a minimal replacement for ncftpput using standard ftp. # It was written for use with the Automake gnupload script for machines # without ncftpput, e.g., rename it to ncftpput and put it in your PATH. # # The arguments are: # host dir file1 file2 ... host=$1; shift dir=$1; shift newline=" " mputs= for f do if test ! -s "$f"; then echo "$0: $f not readable or empty, goodbye." >&2 exit 1 fi target=`basename "$f"` mputs="${mputs}put $f $target$newline" done if test "$dir" = .; then dir= else dir="cd $dir" fi ftp -i $host <<END_SESSION $dir bin verbose $mputs quit END_SESSION ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/pmccabe.css�������������������������������������������������������0000664�0000000�0000000�00000006075�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Styling for cyclomatic code complexity charts. Copyright (C) 2008-2021 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/>. */ body { font-family: Helvetica, sans-serif; } .page_title { font: 18pt Georgia, serif; color: darkred; } .section_title { font: 14pt Georgia, serif; color: darkred; } .report_timestamp { color: darkred; font-weight: bold; } .function_src { text-align: left; background: white; } .resume_table { } .resume_header_entry { color: black; } .resume_number_entry { color: darkred; font-weight: bold; text-align: right; } .ranges_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .ranges_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .ranges_entry { } .ranges_entry_simple { background: #87ff75; } .ranges_entry_moderate { background: #fffc60; } .ranges_entry_high { background: #ff5a5d; } .ranges_entry_untestable { background: #993300 } .function_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .function_table_caption { font-size: 1.1em; font-weight: bold; color: black; padding: 5px; } .function_table_header { } .function_table_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .function_entry { } .function_entry_simple { background: #87ff75; } .function_entry_moderate { background: #fffc60; } .function_entry_high { background: #ff5a5d; } .function_entry_untestable { background: #993300 } .function_entry_name { font-size: 1em; text-align: left; font-weight: bold; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_cyclo { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_number { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_filename { font-size: 1em; text-align: left; text-valign: top; border-top: solid 1px black; padding: 3px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/build-aux/pmccabe2html������������������������������������������������������0000664�0000000�0000000�00000060630�14110572173�0020462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pmccabe2html - AWK script to convert pmccabe output to html -*- awk -*- # Copyright (C) 2007-2021 Free Software Foundation, Inc. # This 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 Jose E. Marchesi <jemarch@gnu.org>. # Adapted for gnulib by Simon Josefsson <simon@josefsson.org>. # Added support for C++ by Giuseppe Scrivano <gscrivano@gnu.org>. # Typical Invocation is from a Makefile.am: # # CYCLO_SOURCES = ${top_srcdir}/src/*.[ch] # # cyclo-$(PACKAGE).html: $(CYCLO_SOURCES) # $(PMCCABE) $(CYCLO_SOURCES) \ # | sort -nr \ # | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \ # -v lang=html -v name="$(PACKAGE_NAME)" \ # -v vcurl="https://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \ # -v url="https://www.gnu.org/software/$(PACKAGE)/" \ # -v css=${top_srcdir}/build-aux/pmccabe.css \ # -v cut_dir=${top_srcdir}/ \ # > $@-tmp # mv $@-tmp $@ # # The variables available are: # lang output language, either 'html' or 'wiki' # name project name # url link to project's home page # vcurl URL to version controlled source code browser, # a %FILENAME% in the string is replaced with the relative # source filename # css CSS stylesheet filename, included verbatim in HTML output # css_url link to CSS stylesheet, an URL # Prologue & configuration BEGIN { # Portable lookup of present time. "date +%s" | getline epoch_time "date" | getline chronos_time section_global_stats_p = 1 section_function_cyclo_p = 1 # "html" or "wiki" package_name = name output_lang = lang # General Options cyclo_simple_max = 10 cyclo_moderate_max = 20 cyclo_high_max = 50 source_file_link_tmpl = vcurl # HTML options if (url != "") { html_prolog = "<a href=\"" url "\">Back to " package_name " Homepage</a><br/><br/>" } html_epilog = "<hr color=\"black\" size=\"2\"/> \ Copyright (c) 2007, 2008 Free Software Foundation, Inc." html_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \ \"http://www.w3.org/TR/html401/loose.dtd\">" html_comment = "<!-- Generated by gnulib's pmccabe2html at " epoch_time " -->" html_title = "Cyclomatic Complexity report for " package_name # Wiki options wiki_prolog = "{{Note|This page has been automatically generated}}" wiki_epilog = "" # Internal variables nfuncs = 0; } # Functions function build_stats() { # Maximum modified cyclo for (fcn in mcyclo) { num_of_functions++ if (mcyclo[fcn] > max_mcyclo) { max_mcyclo = mcyclo[fcn] } if (mcyclo[fcn] > cyclo_high_max) { num_of_untestable_functions++ } else if (mcyclo[fcn] > cyclo_moderate_max) { num_of_high_functions++ } else if (mcyclo[fcn] > cyclo_simple_max) { num_of_moderate_functions++ } else { num_of_simple_functions++ } } } function html_fnc_table_complete (caption) { html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) } function html_fnc_table_abbrev (caption) { html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0) } function html_fnc_table (caption, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "<table width=\"90%\" class=\"function_table\" cellpadding=\"0\" cellspacing=\"0\">" if (caption != "") { print "<caption class=\"function_table_caption\">" caption "</caption>" } html_fnc_header(fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) for (nfnc = 1; nfnc <= nfuncs; nfnc++) { html_fnc(nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) } print "</table>" } function html_header () { print html_doctype print "<html>" print html_comment print "<head>" print "<title>" html_title "" print "" print "" print "" print "" print "" print "" print "" print "" if (css_url != "") { print "" } if (css != "") { print "" close(css) } print "" print "" } function html_footer () { print "" print "" } function html_fnc_header (fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "" if (fname_p) { # Function name print "" print "" print "" print "" print "Function Name" print "" } if (mcyclo_p) { # Modified cyclo print "" print "Modified Cyclo" print "" } if (cyclo_p) { # Cyclo print "" print "Cyclomatic" print "
    " print "Complexity" print "" } if (num_statements_p) { print "" print "Number of" print "
    " print "Statements" print "" } if (num_lines_p) { print "" print "Number of" print "
    " print "Lines" print "" } if (first_line_p) { print "" print "First Line" print "" } if (file_p) { print "" print "Source File" print "" } print "" } function html_fnc (nfun, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { fname = fnames[nfun] # Function name trclass = "function_entry_simple" if (mcyclo[nfun] > cyclo_high_max) { trclass="function_entry_untestable" } else if (mcyclo[nfun] > cyclo_moderate_max) { trclass="function_entry_high" } else if (mcyclo[nfun] > cyclo_simple_max) { trclass="function_entry_moderate" } print "" if (fname_p) { print "" if (file_p && mcyclo[nfun] > cyclo_simple_max) { print "\ " } else { print " " } print "" print "" print fname print "" } if (mcyclo_p) { # Modified cyclo print "" print mcyclo[nfun] print "" } if (cyclo_p) { # Cyclo print "" print cyclo[nfun] print "" } if (num_statements_p) { # Number of statements print "" print num_statements[nfun] print "" } if (num_lines_p) { # Number of lines print "" print num_lines[nfun] print "" } if (first_line_p) { # First line print "" print first_line[nfun] print "" } if (file_p) { href = "" if (source_file_link_tmpl != "") { # Get href target href = source_file_link_tmpl sub(/%FILENAME%/, file[nfun], href) } # Source file print "" if (href != "") { print "" file[nfun] "" } else { print file[nfun] } print "" print "" if (mcyclo[nfun] > cyclo_simple_max) { print "" num_columns = 1; if (fname_p) { num_columns++ } if (mcyclo_p) { num_columns++ } if (cyclo_p) { num_columns++ } if (num_statements_p) { num_columns++ } if (num_lines_p) { num_columns++ } if (first_line_p) { num_columns++ } if (file_p) { num_columns++ } print "" print "
    " print "
    "
    
                while ((getline codeline < (fname nfun "_fn.txt")) > 0)
                {
                    gsub(/&/, "\\&", codeline)	# Must come first.
                    gsub(//, "\\>", codeline)
    
                    print codeline
                }
                close(fname nfun "_fn.txt")
                system("rm " "'" fname "'" nfun "_fn.txt")
                print "
    " print "
    " print "" print "" } } } function html_global_stats () { print "
    Summary
    " print "" # Total number of functions print "" print "" print "" print "" # Number of simple functions print "" print "" print "" print "" # Number of moderate functions print "" print "" print "" print "" # Number of high functions print "" print "" print "" print "" # Number of untestable functions print "" print "" print "" print "" print "
    " print "Total number of functions" print "" print num_of_functions print "
    " print "Number of low risk functions" print "" print num_of_simple_functions print "
    " print "Number of moderate risk functions" print "" print num_of_moderate_functions print "
    " print "Number of high risk functions" print "" print num_of_high_functions print "
    " print "Number of untestable functions" print "" print num_of_untestable_functions print "
    " print "
    " } function html_function_cyclo () { print "
    Details for all functions
    " print "" print "" print "" print "" print "" print "" # Simple print "" print "" print "" print "" print "" # Moderate print "" print "" print "" print "" print "" # High print "" print "" print "" print "" print "" # Untestable print "" print "" print "" print "" print "" print "
    " print " " print "" print "Cyclomatic Complexity" print "" print "Risk Evaluation" print "
    " print " " print "" print "0 - " cyclo_simple_max print "" print "Simple module, without much risk" print "
    " print " " print "" print cyclo_simple_max + 1 " - " cyclo_moderate_max print "" print "More complex module, moderate risk" print "
    " print " " print "" print cyclo_moderate_max + 1 " - " cyclo_high_max print "" print "Complex module, high risk" print "
    " print " " print "" print "greater than " cyclo_high_max print "" print "Untestable module, very high risk" print "
    " print "
    " html_fnc_table_complete("") } function wiki_global_stats () { print "{| class=\"cyclo_summary_table\"" # Total number of functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Total number of functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_functions # Number of simple functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions # Number of moderate functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions # Number of high functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions # Number of untestable functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions print "|}" } function wiki_function_cyclo () { print "==Details for all functions==" print "Used ranges:" print "{| class =\"cyclo_ranges_table\"" print "|-" print "| class=\"cyclo_ranges_header_entry\" | " print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity" print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation" # Simple print "|-" print "| class=\"cyclo_ranges_entry_simple\" | " print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk" # Moderate print "|-" print "| class=\"cyclo_ranges_entry_moderate\" | " print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk" # High print "|-" print "| class=\"cyclo_ranges_entry_high\" | " print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max print "| class=\"cyclo_ranges_entry\" | Complex module, high risk" # Untestable print "|-" print "| class=\"cyclo_ranges_entry_untestable\" | " print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk" print "|}" print "" print "" wiki_fnc_table_complete("") } function wiki_fnc_table_complete (caption) { wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) } function wiki_fnc_table_abbrev (caption) { wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0) } function wiki_fnc_table (caption, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">" if (caption != "") { print "|+" caption } wiki_fnc_header(fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) for (nfnc = 1; nfnc <= nfuncs; nfnc++) { wiki_fnc(nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) } print "|}" } function wiki_fnc_header (fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { if (fname_p) { # Function name print "! class=\"cyclo_function_table_header_entry\" | Function Name" } if (mcyclo_p) { # Modified cyclo print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo" } if (cyclo_p) { # Cyclo print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity" } if (num_statements_p) { print "! class=\"cyclo_function_table_header_entry\" | Number of Statements" } if (num_lines_p) { print "! class=\"cyclo_function_table_header_entry\" | Number of Lines" } if (first_line_p) { print "! class=\"cyclo_function_table_header_entry\" | First Line" } if (file_p) { print "! class=\"cyclo_function_table_header_entry\" | Source File" } } function wiki_fnc (nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { fname = fnames[nfnc] # Function name trclass = "cyclo_function_entry_simple" if (mcyclo[nfnc] > cyclo_high_max) { trclass="cyclo_function_entry_untestable" } else if (mcyclo[nfnc] > cyclo_moderate_max) { trclass="cyclo_function_entry_high" } else if (mcyclo[nfnc] > cyclo_simple_max) { trclass="cyclo_function_entry_moderate" } print "|- class=\"" trclass "\"" if (fname_p) { print "| class=\"cyclo_function_entry_name\" |" fname } if (mcyclo_p) { # Modified cyclo print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc] } if (cyclo_p) { # Cyclo print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc] } if (num_statements_p) { # Number of statements print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc] } if (num_lines_p) { # Number of lines print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc] } if (first_line_p) { # First line print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc] } if (file_p) { href = "" if (source_file_link_tmpl != "") { # Get href target href = source_file_link_tmpl sub(/%FILENAME%/, file[nfnc], href) } # Source file print "| class=\"cyclo_function_entry_filename\" |" \ ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]") } } # Scan data from a line { function_name = $7 nfuncs++; fnames[nfuncs] = function_name mcyclo[nfuncs] = $1 cyclo[nfuncs] = $2 num_statements[nfuncs] = $3 first_line[nfuncs] = $4 num_lines[nfuncs] = $5 # Build the filename from the file_spec ($6) begin_util_path = index($6, cut_dir) tmpfilename = substr($6, begin_util_path + length(cut_dir)) sub(/\([0-9]+\):/, "", tmpfilename) file[nfuncs] = tmpfilename if (mcyclo[nfuncs] > cyclo_simple_max) { # Extract function contents to a fn_txt file filepath = $6 sub(/\([0-9]+\):/, "", filepath) num_line = 0 while ((getline codeline < filepath) > 0) { num_line++; if ((num_line >= first_line[nfuncs]) && (num_line < first_line[nfuncs] + num_lines[nfuncs])) { print codeline > (function_name nfuncs "_fn.txt") } } close (function_name nfuncs "_fn.txt") close(filepath) } # Initial values for statistics variables num_of_functions = 0 max_mcyclo = 0 max_function_length = 0 num_of_simple_functions = 0 num_of_moderate_functions = 0 num_of_high_functions = 0 num_of_untestable_functions = 0 } # Epilogue END { # Print header (only for html) if (output_lang == "html") { html_header() } # Print prolog if ((output_lang == "html") && (html_prolog != "")) { print html_prolog } if ((output_lang == "wiki") && (wiki_prolog != "")) { print wiki_prolog } if (output_lang == "html") { print "
    " package_name " Cyclomatic Complexity Report
    " print "

    Report generated at: " chronos_time "

    " } if (output_lang == "wiki") { print "==" package_name " Cyclomatic Complexity Report==" print "Report generated at: '''" chronos_time "'''" } if (section_global_stats_p) { build_stats() if (output_lang == "html") { html_global_stats() } if (output_lang == "wiki") { wiki_global_stats() } } if (section_function_cyclo_p) { if (output_lang == "html") { html_function_cyclo() } if (output_lang == "wiki") { wiki_function_cyclo() } } # Print epilog if ((output_lang == "html") && (html_epilog != "")) { print html_epilog } if ((output_lang == "wiki") && (wiki_epilog != "")) { print wiki_epilog } # Print footer (html only) if (output_lang == "html") { html_footer() } } # End of pmccabe2html gnulib-20210822~d383792/build-aux/po/000077500000000000000000000000001411057217300166075ustar00rootroot00000000000000gnulib-20210822~d383792/build-aux/po/Makefile.in.in000066400000000000000000000453271411057217300212740ustar00rootroot00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-2000 Ulrich Drepper # Copyright (C) 2000-2021 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # Origin: gettext-0.20 GETTEXT_MACRO_VERSION = 0.20 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ # When building gettext-tools, we prefer to use the built programs # rather than installed programs. However, we can't do that when we # are cross compiling. CROSS_COMPILING = @CROSS_COMPILING@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = @MSGMERGE@ MSGMERGE_UPDATE = @MSGMERGE@ --update MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update # The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs. # The GNU Coding Standards say in # : # "GNU distributions usually contain some files which are not source files # ... . Since these files normally appear in the source directory, they # should always appear in the source directory, not in the build directory. # So Makefile rules to update them should put the updated files in the # source directory." # Therefore we put these files in the source directory, not the build directory. # During .po -> .gmo conversion, take into account the most recent changes to # the .pot file. This eliminates the need to update the .po files when the # .pot file has changed, which would be troublesome if the .po files are put # under version control. .po.gmo: $(srcdir)/$(DOMAIN).pot @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \ cd $(srcdir) && \ rm -f $${lang}.gmo && \ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \ mv t-$${lang}.gmo $${lang}.gmo && \ rm -f $${lang}.1po .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: $(srcdir)/stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target). # $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS # have been loosely updated. Its purpose is that when a developer or translator # checks out the package from a version control system, and the $(DOMAIN).pot # file is not under version control, "make" will update the $(DOMAIN).pot and # the $(CATALOGS), but subsequent invocations of "make" will do nothing. This # timestamp would not be necessary if updating the $(CATALOGS) would always # touch them; however, the rule for $(POFILES) has been designed to not touch # files that don't need to be changed. $(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch $(srcdir)/stamp-po" && \ echo timestamp > $(srcdir)/stamp-poT && \ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot-header; then \ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \ rm -f $(DOMAIN).1po \ || exit 1; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: install-dvi install-ps install-pdf install-html: mostlyclean: rm -f remove-potcdate.sed rm -f $(srcdir)/stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(srcdir)/stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnulib-20210822~d383792/build-aux/po/remove-potcdate.sin000066400000000000000000000013331411057217300224200ustar00rootroot00000000000000# Sed script that removes the POT-Creation-Date line in the header entry # from a POT file. # # Copyright (C) 2002, 2020-2021 Free Software Foundation, Inc. # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gnulib-20210822~d383792/build-aux/prefix-gnulib-mk000077500000000000000000000171131411057217300213020ustar00rootroot00000000000000#!/bin/sh #! -*-perl-*- # Rewrite a gnulib.mk, adding prefixes to work with automake's subdir-objects. # Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2020-04-04 15:07'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use IO::File; use Getopt::Long; use File::Basename; # for dirname (my $ME = $0) =~ s|.*/||; my $prefix; my $lib_name; sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM <getline or die "$file"; $f->close; return $contents; } # prefix_word ($WORD) # ------------------- # Do not prefix special words such as variable dereferences. Also, # "Makefile" is really "Makefile", since precisely there is no # lib/Makefile. sub prefix_word ($) { local ($_) = @_; $_ = $prefix . $_ unless (/^-/ || m{^\$\(\w+\)} || $_ eq "Makefile" || $_ eq '\\' || $_ eq '@ALLOCA@'); return $_; } # prefix_words ($TEXT) # -------------------- sub prefix_words ($) { local ($_) = @_; s{(\S+)}{prefix_word($1)}gem; return $_; } # prefix_assignment ($LHS-AND-ASSIGN-OP, $RHS) # -------------------------------------------- sub prefix_assignment ($$) { my ($lhs_and_assign_op, $rhs) = @_; # Some variables are initialized by gnulib.mk, and we don't want # that. Change '=' to '+='. if ($lhs_and_assign_op =~ /^(GPERF|V_GPERF.*) =$/) { # Do not change the RHS, which specifies the GPERF program. } # Don't change variables such as HAVE_INCLUDE_NEXT. elsif ($lhs_and_assign_op =~ /^HAVE_/) { } elsif ($lhs_and_assign_op =~ /^(SUBDIRS|EXTRA_DIST|BUILT_SOURCES|SUFFIXES|MOSTLYCLEANFILES |CLEANFILES|DISTCLEANFILES|MAINTAINERCLEANFILES |AM_GNU_GETTEXT)\ =/x) { $lhs_and_assign_op =~ s/=/+=/; } # We don't want things such as AM_CPPFLAGS += # -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\" to apply to the whole # Makefile.in: scope it to the library: libbison_a_CPPFLAGS = # $(AM_CPPFLAGS) -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\". elsif ($lhs_and_assign_op =~ /^(AM_CFLAGS|AM_CPPFLAGS)\ \+?=/x) { $lhs_and_assign_op =~ s/^AM_(\w+)\ \+?=/${lib_name}_a_$1 =/; $rhs = " \$(AM_$1)$rhs"; } # We don't want to inherit gnulib's AUTOMAKE_OPTIONS, comment them. elsif ($lhs_and_assign_op =~ /^AUTOMAKE_OPTIONS =/) { $lhs_and_assign_op =~ s/^/# /; } # Elide any SUFFIXES assignment or concatenation. elsif ($lhs_and_assign_op =~ /^SUFFIXES /) { $lhs_and_assign_op =~ s/^/# /; } # The words are (probably) paths to files in lib/: prefix them. else { $rhs = prefix_words($rhs) } # Variables whose name depend on the location: libbison_a_SOURCES => # lib_libbison_a_SOURCES. $lhs_and_assign_op =~ s/($lib_name)/lib_$1/g; $lhs_and_assign_op . $rhs; } # prefix $CONTENTS # ---------------- # $CONTENTS is a Makefile content. Post-process it so that each file-name # is prefixed with $prefix (e.g., "lib/"). # # Relies heavily on the regularity of the file generated by gnulib-tool. sub prefix ($) { # Work on $_. local ($_) = @_; # Prefix all the occurrence of files in rules. If there is nothing # after in the :, it's probably a phony target, or a suffix rule. # Don't touch it. s{^([-\w+/]+\.[-\w.]+ *: *\S.*)$} {prefix_words($1)}gem; # Prefix files in variables. s{^([\w.]+\s*\+?=)(.*)$} {prefix_assignment($1, $2)}gem; # $(srcdir)/ is actually $(top_srcdir)/$prefix/. # The trailing slash is required to avoid matching this rule: # test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile s{\$\(srcdir\)/}{\$(top_srcdir)/$prefix}g; # Sometimes, t-$@ is used instead of $@-t, which, of course, does # not work when we have a $@ with a directory in it. s{t-\$\@}{\$\@-t}g; # Some AC_SUBST patterns remain and would better be Make macros. s{\@(MKDIR_P)\@}{\$($1)}g; # Adjust paths in mkdir. s{(\$\(MKDIR_P\))\s*(\w+)}{$1 $prefix$2}g; return $_; } # process ($IN) # ------------- sub process ($) { my ($file) = @_; my ($bak) = "$file.bak"; rename ($file, $bak) or die "$ME: rename $file $bak failed: $!\n"; my $contents = contents ($bak); $contents = prefix ($contents); my $out = new IO::File(">$file") or die "$ME: $file: failed to open for writing: $!\n"; print $out $contents; } { GetOptions ( 'lib-name=s' => \$lib_name, help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, ) or usage 1; my $fail = 0; defined $lib_name or (warn "$ME: no library name; use --lib-name=NAME\n"), $fail = 1; # There must be exactly one argument. @ARGV == 0 and (warn "$ME: missing FILE argument\n"), $fail = 1; 1 < @ARGV and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"), $fail = 1; $fail and usage 1; my $file = $ARGV[0]; $prefix = (dirname $file) . '/'; warn "prefix=$prefix\n"; process $file; } ### Setup "GNU" style for perl-mode and cperl-mode. ## Local Variables: ## perl-indent-level: 2 ## perl-continued-statement-offset: 2 ## perl-continued-brace-offset: 0 ## perl-brace-offset: 0 ## perl-brace-imaginary-offset: 0 ## perl-label-offset: -2 ## cperl-indent-level: 2 ## cperl-brace-offset: 0 ## cperl-continued-brace-offset: 0 ## cperl-label-offset: -2 ## cperl-extra-newline-before-brace: t ## cperl-merge-trailing-else: nil ## cperl-continued-statement-offset: 2 ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-line-limit: 50 ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: gnulib-20210822~d383792/build-aux/reloc-ldflags000077500000000000000000000074631411057217300206470ustar00rootroot00000000000000#! /bin/sh # Output a system dependent linker command for putting a relocatable library # search path into an executable. # # Copyright 2003-2021 Free Software Foundation, Inc. # Written by Bruno Haible , 2003. # # This 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variable LD should be set by the caller. # # The second argument is a colon separated list of directories that contain # the libraries at installation time. # # The third argument is the directory into which the executable is going to be # installed. host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` library_path_value=$2 installdir=$3 # Verify that installdir is absolute. case "$installdir" in /*) ;; *) echo "installdir is not absolute: $installdir" 1>&2 exit 1 ;; esac origin_token= case "$host_os" in linux* | gnu* | kfreebsd* | \ freebsd* | dragonfly* | midnightbsd* | \ netbsd* | \ openbsd* | \ solaris* | \ haiku*) origin_token='$ORIGIN' ;; darwin*) origin_token='@loader_path' ;; esac if test -n "$origin_token"; then # We are not on AIX, HP-UX, or IRIX. Therefore the -rpath options are # cumulative. rpath_options= save_IFS="$IFS"; IFS=":" for dir in $library_path_value; do IFS="$save_IFS" case "$dir" in /*) # Make dir relative to installdir. (Works only if dir is absolute.) idir="$installdir" while true; do dfirst=`echo "$dir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'` ifirst=`echo "$idir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'` if test -z "$dfirst" || test -z "$ifirst"; then break fi if test "$dfirst" != "$ifirst"; then break fi dir=`echo "$dir" | sed -e 's,^//*[^/]*,,'` idir=`echo "$idir" | sed -e 's,^//*[^/]*,,'` done dir="$origin_token"`echo "$idir" | sed -e 's,//*[^/]*,/..,g'`"$dir" # Augment rpath_options with dir. rpath_options="${rpath_options}${rpath_options:+ }-Wl,-rpath,$dir" ;; *) if test -n "$dir"; then echo "libdir is not absolute: $dir" 1>&2 fi ;; esac done IFS="$save_IFS" # Output it. if test -n "$rpath_options"; then case "$host_os" in # At least some versions of FreeBSD, DragonFly, and OpenBSD need the # linker option "-z origin". See . freebsd* | dragonfly* | openbsd*) rpath_options="-Wl,-z,origin $rpath_options" ;; esac echo "$rpath_options" fi else echo "relocation via rpath not supported on this system: $host" 1>&2 exit 1 fi exit 0 gnulib-20210822~d383792/build-aux/relocatable.pl.in000066400000000000000000000046501411057217300214150ustar00rootroot00000000000000# The functions in this file provide support for relocatability of # Perl scripts. They should be included near the beginning of each # Perl script in a relocatable program, by adding @relocatable_pl@ # and causing the script to be expanded with AC_CONFIG_FILES. A # small amount of additional code must be added and adapted to the # package by hand; see doc/relocatable-maint.texi (in Gnulib) for # details. # # This code is based on relocatable.sh.in, and design changes (and # bugs) should probably be cross-checked with it. # # Copyright (C) 2013, 2015-2021 Free Software Foundation, Inc. # # This 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 . # use Config; use File::Basename; use File::Spec::Functions; use Cwd 'realpath'; # Support for relocatability. sub find_curr_installdir { # Determine curr_installdir, even taking into account symlinks. my $curr_executable = $0; my $basename = basename($0); if ($curr_executable eq $basename) { LOOP: for my $dir (split /$Config{path_sep}/, $ENV{PATH}) { $dir = "." unless $dir; for my $ext ('') { my $filename = catfile($dir, "$curr_executable$ext"); if (-f $filename) { $curr_executable = $filename; last LOOP; } } } } # Resolve symlinks and canonicalize. return realpath(dirname($curr_executable)); } sub find_prefixes { # Compute the original/current installation prefixes by stripping the # trailing directories off the original/current installation directories. my ($orig_installprefix, $curr_installprefix) = @_; my $orig_last = basename($orig_installprefix); my $curr_last = basename($curr_installprefix); if ($orig_last && $curr_last && $orig_last eq $curr_last) { $orig_installprefix = dirname($orig_installprefix); $curr_installprefix = dirname($curr_installprefix); } return $orig_installprefix, $curr_installprefix; } gnulib-20210822~d383792/build-aux/relocatable.sh.in000066400000000000000000000071511411057217300214130ustar00rootroot00000000000000# The functions in this file provide support for relocatability of # shell scripts. They should be included near the beginning of each # shell script in a relocatable program, by adding @relocatable_sh@ # and causing the script to be expanded with AC_CONFIG_FILES. A # small amount of additional code must be added and adapted to the # package by hand; see doc/relocatable-maint.texi (in Gnulib) for # details. # # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This 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 . # # Support for relocatability. func_find_curr_installdir () { # Determine curr_installdir, even taking into account symlinks. curr_executable="$0" case "$curr_executable" in */* | *\\*) ;; *) # Need to look in the PATH. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi save_IFS="$IFS"; IFS="$PATH_SEPARATOR" for dir in $PATH; do IFS="$save_IFS" test -z "$dir" && dir=. for exec_ext in ''; do if test -f "$dir/$curr_executable$exec_ext"; then curr_executable="$dir/$curr_executable$exec_ext" break 2 fi done done IFS="$save_IFS" ;; esac # Make absolute. case "$curr_executable" in /* | ?:/* | ?:\\*) ;; *) curr_executable=`pwd`/"$curr_executable" ;; esac # Resolve symlinks. sed_dirname='s,/[^/]*$,,' sed_linkdest='s,^.* -> \(.*\),\1,p' while : ; do lsline=`LC_ALL=C ls -l "$curr_executable"` case "$lsline" in *" -> "*) linkdest=`echo "$lsline" | sed -n -e "$sed_linkdest"` case "$linkdest" in /* | ?:/* | ?:\\*) curr_executable="$linkdest" ;; *) curr_executable=`echo "$curr_executable" | sed -e "$sed_dirname"`/"$linkdest" ;; esac ;; *) break ;; esac done curr_installdir=`echo "$curr_executable" | sed -e 's,/[^/]*$,,'` # Canonicalize. curr_installdir=`cd "$curr_installdir" && pwd` } func_find_prefixes () { # Compute the original/current installation prefixes by stripping the # trailing directories off the original/current installation directories. orig_installprefix="$orig_installdir" curr_installprefix="$curr_installdir" while true; do orig_last=`echo "$orig_installprefix" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'` curr_last=`echo "$curr_installprefix" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'` if test -z "$orig_last" || test -z "$curr_last"; then break fi if test "$orig_last" != "$curr_last"; then break fi orig_installprefix=`echo "$orig_installprefix" | sed -e 's,/[^/]*$,,'` curr_installprefix=`echo "$curr_installprefix" | sed -e 's,/[^/]*$,,'` done } gnulib-20210822~d383792/build-aux/run-test000077500000000000000000000103271411057217300177030ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This 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 . # # This program is a test driver that supports running a test under valgrind. # Usage: run-test CHECKER PROGRAM [ARGUMENT...] progname=$0 # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: run-test [OPTION...] CHECKER PROGRAM [ARGUMENT...] Runs PROGRAM under the control of CHECKER. CHECKER may be empty or a valgrind command with some options, such as 'valgrind --tool=memcheck --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes'. When CHECKER is not empty, it is recommended that the package has been configured with --disable-shared so that tests are real executables and not libtool wrapper scripts, and CFLAGS=\"-g\" so that valgrind shows line numbers. Report bugs to Bruno Haible." } # func_version # outputs to stdout the --version message. func_version () { echo "\ run-test (GNU gnulib) Copyright (C) 2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by" "Bruno Haible" } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. # Input: # - progname name of this program func_fatal_error () { echo "$progname: *** $1" 1>&2 echo "$progname: *** Stop." 1>&2 func_exit 1 } # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: # - checker wrapper program for executables { while test $# -gt 0; do case "$1" in --help | --hel | --he | --h ) func_usage exit $? ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version exit $? ;; -- ) # Stop option processing shift break ;; -* ) echo "run-test: unknown option $1" 1>&2 echo "Try 'run-test --help' for more information." 1>&2 exit 1 ;; * ) break ;; esac done if test $# -lt 2; then echo "run-test: too few arguments" 1>&2 echo "Try 'run-test --help' for more information." 1>&2 exit 1 fi checker="$1" shift } if test -z "$checker"; then # No checker. Run the test directly. case "$1" in *.sh) # Support environments where sh exists but not /bin/sh. exec sh "$@" ;; *) exec "$@" ;; esac else # Using valgrind. We want to apply valgrind only to executables, not to # shell scripts, because # 1. we don't want to look for memory leaks in bash, # 2. on a bi-arch system, we would get an error message such as # "valgrind: wrong executable class (eg. 32-bit instead of 64-bit)". case "$1" in *.sh) # A shell script. Ignore the checker. # Support environments where sh exists but not /bin/sh. exec sh "$@" ;; *) # The 'file' command is not portable enough. So, look # at the first two bytes of the file. Are they '#!'? if { if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. firstbytes=`od -A n -t o1 -N 2 < "$1" | tr -d ' '` else # Use BSD hexdump. firstbytes=`dd if="$1" bs=1 count=2 2>/dev/null | hexdump -e '1/1 "%03o"'` fi test "$firstbytes" = "043041" }; then # A shell script. Ignore the checker. exec "$@" else # An executable. Use the checker. exec $checker "$@" fi ;; esac fi gnulib-20210822~d383792/build-aux/snippet/000077500000000000000000000000001411057217300176535ustar00rootroot00000000000000gnulib-20210822~d383792/build-aux/snippet/link-warning.h000066400000000000000000000044541411057217300224330ustar00rootroot00000000000000/* A C macro for emitting link time warnings. Copyright (C) 1995, 1997, 2000, 2002-2003, 2007, 2009-2021 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 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 . */ #if @HAVE_FEATURES_H@ # include /* for __GLIBC__, __UCLIBC__ */ #endif /* GL_LINK_WARNING("literal string") arranges to emit the literal string as a linker warning on most glibc systems. We use a linker warning rather than a preprocessor warning, because #warning cannot be used inside macros. */ #ifndef GL_LINK_WARNING /* This works on platforms with GNU ld and ELF object format. Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. Testing __ELF__ guarantees the ELF object format. Testing __GNUC__ is necessary for the compound expression syntax. */ # if (defined __GLIBC__ || defined __UCLIBC__) && defined __ELF__ && defined __GNUC__ # define GL_LINK_WARNING(message) \ GL_LINK_WARNING1 (__FILE__, __LINE__, message) # define GL_LINK_WARNING1(file, line, message) \ GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ # define GL_LINK_WARNING2(file, line, message) \ GL_LINK_WARNING3 (file ":" #line ": warning: " message) # define GL_LINK_WARNING3(message) \ ({ static const char warning[sizeof (message)] \ __attribute__ ((__unused__, \ __section__ (".gnu.warning"), \ __aligned__ (1))) \ = message "\n"; \ (void)0; \ }) # else # define GL_LINK_WARNING(message) ((void) 0) # endif #endif gnulib-20210822~d383792/build-aux/test-driver-1.16.3.diff000066400000000000000000000005661411057217300220260ustar00rootroot00000000000000--- test-driver.bak 2019-01-23 03:22:06.672283432 +0100 +++ test-driver 2019-01-23 04:23:21.201060757 +0100 @@ -106,7 +106,10 @@ trap "st=143; $do_exit" 15 # Test script is run here. -"$@" >$log_file 2>&1 +case "$1" in + *.sh) sh "$@" >$log_file 2>&1 ;; + *) "$@" >$log_file 2>&1 ;; +esac estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then gnulib-20210822~d383792/build-aux/test-driver.diff000066400000000000000000000007171411057217300213000ustar00rootroot00000000000000--- test-driver.bak 2021-08-04 11:12:04.399976745 +0200 +++ test-driver 2021-08-04 11:17:17.646343985 +0200 @@ -109,7 +109,10 @@ # to ameliorate tests themselves also writing to the log file. Our tests # don't, but others can (automake bug#35762). : >"$log_file" -"$@" >>"$log_file" 2>&1 +case "$1" in + *.sh) sh "$@" >>"$log_file" 2>&1 ;; + *) "$@" >>"$log_file" 2>&1 ;; +esac estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then gnulib-20210822~d383792/build-aux/texinfo.tex000066400000000000000000013327261411057217300204050ustar00rootroot00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2021-04-25.21} % % Copyright 1985, 1986, 1988, 1990-2021 Free Software Foundation, Inc. % % This texinfo.tex 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 texinfo.tex 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 . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, which hides the original value of \topmark. This % can lead to a page heading being output and duplicating the chapter heading % of the index. Hence, save the contents of \topmark at the beginning of % the output routine. The saved contents are valid until we actually % \shipout a page. % % (We used to run a short output routine to actually set \topmark and % \firstmark to the right values, but if this was called with an empty page % containing whatsits for writing index entries, the whatsits would be thrown % away and the index auxiliary file would remain empty.) % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % \checkchapterpage % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % Common context changes for both heading and footing. % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars} % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Check if we are on the first page of a chapter. Used for printing headings. \newif\ifchapterpage \def\checkchapterpage{% % Get the chapter that was current at the end of the last page \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \let\curchaptername\thischaptername % \ifx\curchaptername\prevchaptername \chapterpagefalse \else \chapterpagetrue \fi } % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Pass the result on to % \argcheckspaces. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo calls \checkenv and executes the definition of \Efoo. \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % leave vertical mode without cancelling any first paragraph indent \gdef\imageindent{% \toks0=\everypar \everypar={}% \ptexnoindent \global\everypar=\toks0 } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c / 256), math.floor(c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c_hi / 256), math.floor(c_hi % 256), math.floor(c_lo / 256), math.floor(c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint(-2, string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(-2, string.char(c)) end end end } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % Output page labels information. % See PDF reference v.1.7 p.594, section 8.3.1. \ifpdf \def\pagelabels{% \def\title{0 << /P (T-) /S /D >>}% \edef\roman{\the\romancount << /S /r >>}% \edef\arabic{\the\arabiccount << /S /D >>}% % % Page label ranges must be increasing. Remove any duplicates. % (There is a slight chance of this being wrong if e.g. there is % a @contents but no @titlepage, etc.) % \ifnum\romancount=0 \def\roman{}\fi \ifnum\arabiccount=0 \def\title{}% \else \ifnum\romancount=\arabiccount \def\roman{}\fi \fi % \ifnum\romancount<\arabiccount \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax \else \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax \fi } \else \let\pagelabels\relax \fi \newcount\pagecount \pagecount=0 \newcount\romancount \romancount=0 \newcount\arabiccount \arabiccount=0 \ifpdf \let\ptxadvancepageno\advancepageno \def\advancepageno{% \ptxadvancepageno\global\advance\pagecount by 1 } \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\xeteximgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % % Putting an \hbox around the image can prevent an over-long line % after the image. \hbox\bgroup \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax \egroup } \fi % \message{fonts,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}}\def\ttstylename{tt} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % % The font-changing commands (all called \...fonts) redefine the meanings % of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs % to also set the current \fam for math mode. Our \STYLE (e.g., \rm) % commands hardwire \STYLEfont to set the current font. % % The fonts used for \ifont are for "math italics" (\itfont is for italics % in regular text). \syfont is also used in math mode only. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\assignfonts#1{% \expandafter\let\expandafter\rmfont\csname #1rm\endcsname \expandafter\let\expandafter\itfont\csname #1it\endcsname \expandafter\let\expandafter\slfont\csname #1sl\endcsname \expandafter\let\expandafter\bffont\csname #1bf\endcsname \expandafter\let\expandafter\ttfont\csname #1tt\endcsname \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname \expandafter\let\expandafter\sffont \csname #1sf\endcsname \expandafter\let\expandafter\ifont \csname #1i\endcsname \expandafter\let\expandafter\syfont \csname #1sy\endcsname \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\definefontsetatsize#1#2#3#4#5{% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \assignfonts{#1}% \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } { \catcode`\'=\active \catcode`\`=\active \gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright} \gdef\setregularquotes{\let`\lq \let'\rq} } % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \ifmonospace \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi \else '% \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \ifmonospace \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi \else \relax`% \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setcodequotes \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The default \pretolerance setting stops the penalty inserted in % \urefallowbreak being a discouragement to line breaking. Set it to % a negative value for this paragraph only. Hopefully this does not % conflict with redefinitions of \par done elsewhere. \def\nopretolerance{% \pretolerance=-1 \def\par{\endgraf\pretolerance=100 \let\par\endgraf}% } % The main macro is \urefbreak, which allows breaking at expected % places within the url. \def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setcodequotes \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpostbreak \fi } } % By default we'll break after the special characters, but some people like to % break before the special chars, so allow that. Also allow no breaking at % all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. There can % be a break at the \allowbreak with no extra glue (if the existing stretch in % the line is sufficient), a break at the \penalty with extra glue added % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferable one choice is over the other. \def\urefallowbreak{% \penalty0\relax \hskip 0pt plus 2 em\relax \penalty1000\relax \hskip 0pt plus -2 em\relax } \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdforxetex \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setcodequotes\look}}\fi \else{\tclose{\kbdfont\setcodequotes\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setregularquotes \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \ifmmode\else % only go into math if not in math mode already \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % provide this command from LaTeX as it is very common \def\frac#1#2{{{#1}\over{#2}}} % @displaymath. % \globaldefs is needed to recognize the end lines in \tex and % \end tex. Set \thisenv as @end displaymath is seen before @end tex. {\obeylines \globaldefs=1 \envdef\displaymath{% \tex% \def\thisenv{\displaymath}% \begingroup\let\end\displaymathend% $$% } \def\displaymathend{$$\endgroup\end}% \def\Edisplaymath{% \def\thisenv{\tex}% \end tex }} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} \def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{\ifmonospace{\ecfont\char"BF}\else{\it\$}\fi} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quoteleft=`\` \chardef\quoteright=`\' % only change font for tt for correct kerning and to avoid using % \ecfont unless necessary. \def\quotedblleft{% \ifmonospace{\ecfont\char"10}\else{\char"5C}\fi } \def\quotedblright{% \ifmonospace{\ecfont\char"11}\else{\char`\"}\fi } \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenchapheadline% headline on even pages with a new chapter \newtoks\oddchapheadline % headline on odd pages with a new chapter \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm \ifchapterpage \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi \else \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} \global\evenchapheadline=\evenheadline} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}% \global\oddchapheadline=\oddheadline} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. \def\pageone{ \global\pageno=1 \global\arabiccount = \pagecount } % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \pageone \HEADINGSdoublex } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \pageone \HEADINGSsinglex } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\folio\hfil}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\hfil\folio}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chappager } % for @setchapternewpage off \def\HEADINGSsinglechapoff{% \pageone \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline=\evenheadline \global\oddchapheadline=\oddheadline \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @multitable macros % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % \def\tab{\checkenv\multitable &\the\everytab}% \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \parskip=0pt \parindent=6pt \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \strut \vtop{% \advance\hsize by -1\leftskip % Find the correct column width \hsize=\expandafter\csname col\the\colcount\endcsname % \rightskip=0pt \ifnum\colcount=1 \advance\hsize by\leftskip % Add indent of surrounding text \else % In order to keep entries from bumping into each other. \leftskip=12pt \ifsetpercent \else % If a template has been used \advance\hsize by \leftskip \fi \fi \noindent\ignorespaces##\unskip\strut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \string\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\docind{\indexname}{#1}} % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. % \def\atdummies{% \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% \definedummyletter\&% % % Do the redefinitions. \definedummies \otherbackslash } % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter % Called from \atdummies to prevent the expansion of commands. % \def\definedummies{% % \let\commondummyword\definedummyword \let\commondummyletter\definedummyletter \let\commondummyaccent\definedummyaccent \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\ampchar \definedummyword\atchar \definedummyword\arrow \definedummyword\backslashchar \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \macrolist \let\value\dummyvalue % \normalturnoffactive } % \commondummiesnofonts: common to \definedummies and \indexnofonts. % Define \commondummyletter, \commondummyaccent and \commondummyword before % using. Used for accents, font commands, and various control letters. % \def\commondummiesnofonts{% % Control letters and accents. \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% \commondummyword\u \commondummyword\v \commondummyword\H \commondummyword\dotaccent \commondummyword\ogonek \commondummyword\ringaccent \commondummyword\tieaccent \commondummyword\ubaraccent \commondummyword\udotaccent \commondummyword\dotless % % Texinfo font commands. \commondummyword\b \commondummyword\i \commondummyword\r \commondummyword\sansserif \commondummyword\sc \commondummyword\slanted \commondummyword\t % % Commands that take arguments. \commondummyword\abbr \commondummyword\acronym \commondummyword\anchor \commondummyword\cite \commondummyword\code \commondummyword\command \commondummyword\dfn \commondummyword\dmn \commondummyword\email \commondummyword\emph \commondummyword\env \commondummyword\file \commondummyword\image \commondummyword\indicateurl \commondummyword\inforef \commondummyword\kbd \commondummyword\key \commondummyword\math \commondummyword\option \commondummyword\pxref \commondummyword\ref \commondummyword\samp \commondummyword\strong \commondummyword\tie \commondummyword\U \commondummyword\uref \commondummyword\url \commondummyword\var \commondummyword\verb \commondummyword\w \commondummyword\xref } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty \fi % \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else \backslashdisappear \fi % \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else \def-{}% \fi \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else \def<{}% \fi \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else \def\@{}% \fi } \gdef\indexnonalnumreappear{% \let-\normaldash \let<\normalless } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\commondummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\commondummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\commondummyword\commondummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \let\do\indexnofontsdef % \do\LaTeX{LaTeX}% \do\TeX{TeX}% % % Assorted special characters. \do\atchar{@}% \do\arrow{->}% \do\bullet{bullet}% \do\comma{,}% \do\copyright{copyright}% \do\dots{...}% \do\enddots{...}% \do\equiv{==}% \do\error{error}% \do\euro{euro}% \do\expansion{==>}% \do\geq{>=}% \do\guillemetleft{<<}% \do\guillemetright{>>}% \do\guilsinglleft{<}% \do\guilsinglright{>}% \do\leq{<=}% \do\lbracechar{\{}% \do\minus{-}% \do\point{.}% \do\pounds{pounds}% \do\print{-|}% \do\quotedblbase{"}% \do\quotedblleft{"}% \do\quotedblright{"}% \do\quoteleft{`}% \do\quoteright{'}% \do\quotesinglbase{,}% \do\rbracechar{\}}% \do\registeredsymbol{R}% \do\result{=>}% \do\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist \let\value\indexnofontsvalue } % Give the control sequence a definition that removes the {} that follows % its use, e.g. @AA{} -> AA \def\indexnofontsdef#1#2{\def#1##1{#2}}% % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % Same as \doind, but for code indices \def\docind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\docindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \ifincodeindex \edef\trimmed{\noexpand\code{\trimmed}}% \fi % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \newif\ifincodeindex \def\doindwrite{\incodeindexfalse\doindwritex} \def\docindwrite{\incodeindextrue\doindwritex} \def\doindwritex{% \maybemarginindex % \atdummies % \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else \escapeisbackslash \fi % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. % \edef\temp{% \write\writeto{% \string\entry{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% \else (Skipped sorted index file in obsolete format) \fi \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi \else \begindoublecolumns \catcode`\\=0\relax % % Make @ an escape character to give macros a chance to work. This % should work because we (hopefully) don't otherwise use @ in index files. %\catcode`\@=12\relax \catcode`\@=0\relax \input \jobname.\indexname s \enddoublecolumns \fi } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 \gdef\finishentry#1{% \egroup % end box A \dimen@ = \wd\boxA % Length of text of entry \global\setbox\boxA=\hbox\bgroup \unhbox\boxA % #1 is the page number. % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 % private names \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% \savetopmark % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\def\HEADINGSon{\HEADINGSsinglechapoff}} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdforxetex \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi \def\thistitle{}% no title in double-sided headings % Record where the Roman numerals started. \ifnum\romancount=0 \global\romancount=\pagecount \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \contentsendroman } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \contentsendroman } \let\shortcontents = \summarycontents % Get ready to use Arabic numerals again \def\contentsendroman{% \lastnegativepageno = \pageno \global\pageno = \savepageno % % If \romancount > \arabiccount, the contents are at the end of the % document. Otherwise, advance where the Arabic numerals start for % the page numbers. \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi } % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{\numeralbox\labelspace#1}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setregularquotes \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envdef\cartouche{% \cartouchefontdefs \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp, @verbatim % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setcodequotes \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \parsearg\gobble } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setcodequotes \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. \newbox\verbbox \def\starttabbox{\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \leavevmode\box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}% \tabexpand \setcodequotes % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{% \starttabbox#2\egroup\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. % The \egroup ends the \verbbox started at the end of the last line in % the block. \endgroup % \envdef\verbatim{% \setnormaldispenv\setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim {% \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \edef\tmp{\noexpand\input #1 } \expandafter }\expandafter\starttabbox\tmp\egroup \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % \dosubind {index}{topic}{subtopic} % % If SUBTOPIC is present, precede it with a space, and call \doind. % (At some time during the 20th century, this made a two-level entry in an % index such as the operation index. Nobody seemed to notice the change in % behaviour though.) \def\dosubind#1#2#3{% \def\thirdarg{#3}% \ifx\thirdarg\empty \doind{#1}{#2}% \else \doind{#1}{#2\space#3}% \fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \rmfont % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setregularquotes\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \let\E=\expandafter % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M % expand the expansion of \eatleadingcr twice to maybe remove a leading % newline (and \else and \fi tokens), then call \eatspaces on the result. \def\xeatspaces##1{% \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% }}% \def\xempty##1{}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } {\catcode`\^^M=\other% \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% % Warning: this won't work for a delimited argument % or for an empty argument % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \passthroughcharstrue } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\@=\other \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\ =\other \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active \catcode`\@=\other \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \let\xempty\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % the \xempty{} is to give \eatleadingcr an argument in the case of an % empty macro argument. % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \defmacro. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \def\xeatspaces##1{##1}% % This removes the pair of braces around the argument. We don't % use \eatspaces, because this can cause ends of lines to be lost % when the argument to \eatspaces is read, leading to line-based % commands like "@itemize" not being read correctly. \else \let\xeatspaces\relax % suppress expansion \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \egroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \egroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node or @bye command, divert output to a box that is not % output. \def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % Only output a following space if the -snt ref is nonempty, as the ref % will be empty for @unnumbered and @anchor. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi % % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % \expandafter\ifx\csname SETtxiomitxrefpg\endcsname\relax % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi \fi \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \refx{NAME} - reference a cross-reference string named NAME. \def\refx#1{% \requireauxfile {% \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \makevalueexpandable % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV \else \imageindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, otherwise our check for duplicated % definitions gets triggered. Making non-ascii chars active is % sufficient. \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree{}} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \DeclareUnicodeCharacter{00BF}{\questiondown}% % \DeclareUnicodeCharacter{00C0}{\`A}% \DeclareUnicodeCharacter{00C1}{\'A}% \DeclareUnicodeCharacter{00C2}{\^A}% \DeclareUnicodeCharacter{00C3}{\~A}% \DeclareUnicodeCharacter{00C4}{\"A}% \DeclareUnicodeCharacter{00C5}{\AA}% \DeclareUnicodeCharacter{00C6}{\AE}% \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% \DeclareUnicodeCharacter{00C8}{\`E}% \DeclareUnicodeCharacter{00C9}{\'E}% \DeclareUnicodeCharacter{00CA}{\^E}% \DeclareUnicodeCharacter{00CB}{\"E}% \DeclareUnicodeCharacter{00CC}{\`I}% \DeclareUnicodeCharacter{00CD}{\'I}% \DeclareUnicodeCharacter{00CE}{\^I}% \DeclareUnicodeCharacter{00CF}{\"I}% % \DeclareUnicodeCharacter{00D0}{\DH}% \DeclareUnicodeCharacter{00D1}{\~N}% \DeclareUnicodeCharacter{00D2}{\`O}% \DeclareUnicodeCharacter{00D3}{\'O}% \DeclareUnicodeCharacter{00D4}{\^O}% \DeclareUnicodeCharacter{00D5}{\~O}% \DeclareUnicodeCharacter{00D6}{\"O}% \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% \DeclareUnicodeCharacter{00D8}{\O}% \DeclareUnicodeCharacter{00D9}{\`U}% \DeclareUnicodeCharacter{00DA}{\'U}% \DeclareUnicodeCharacter{00DB}{\^U}% \DeclareUnicodeCharacter{00DC}{\"U}% \DeclareUnicodeCharacter{00DD}{\'Y}% \DeclareUnicodeCharacter{00DE}{\TH}% \DeclareUnicodeCharacter{00DF}{\ss}% % \DeclareUnicodeCharacter{00E0}{\`a}% \DeclareUnicodeCharacter{00E1}{\'a}% \DeclareUnicodeCharacter{00E2}{\^a}% \DeclareUnicodeCharacter{00E3}{\~a}% \DeclareUnicodeCharacter{00E4}{\"a}% \DeclareUnicodeCharacter{00E5}{\aa}% \DeclareUnicodeCharacter{00E6}{\ae}% \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% \DeclareUnicodeCharacter{00E8}{\`e}% \DeclareUnicodeCharacter{00E9}{\'e}% \DeclareUnicodeCharacter{00EA}{\^e}% \DeclareUnicodeCharacter{00EB}{\"e}% \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% % \DeclareUnicodeCharacter{00F0}{\dh}% \DeclareUnicodeCharacter{00F1}{\~n}% \DeclareUnicodeCharacter{00F2}{\`o}% \DeclareUnicodeCharacter{00F3}{\'o}% \DeclareUnicodeCharacter{00F4}{\^o}% \DeclareUnicodeCharacter{00F5}{\~o}% \DeclareUnicodeCharacter{00F6}{\"o}% \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% \DeclareUnicodeCharacter{00F8}{\o}% \DeclareUnicodeCharacter{00F9}{\`u}% \DeclareUnicodeCharacter{00FA}{\'u}% \DeclareUnicodeCharacter{00FB}{\^u}% \DeclareUnicodeCharacter{00FC}{\"u}% \DeclareUnicodeCharacter{00FD}{\'y}% \DeclareUnicodeCharacter{00FE}{\th}% \DeclareUnicodeCharacter{00FF}{\"y}% % \DeclareUnicodeCharacter{0100}{\=A}% \DeclareUnicodeCharacter{0101}{\=a}% \DeclareUnicodeCharacter{0102}{\u{A}}% \DeclareUnicodeCharacter{0103}{\u{a}}% \DeclareUnicodeCharacter{0104}{\ogonek{A}}% \DeclareUnicodeCharacter{0105}{\ogonek{a}}% \DeclareUnicodeCharacter{0106}{\'C}% \DeclareUnicodeCharacter{0107}{\'c}% \DeclareUnicodeCharacter{0108}{\^C}% \DeclareUnicodeCharacter{0109}{\^c}% \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{e}}% \DeclareUnicodeCharacter{011A}{\v{E}}% \DeclareUnicodeCharacter{011B}{\v{e}}% \DeclareUnicodeCharacter{011C}{\^G}% \DeclareUnicodeCharacter{011D}{\^g}% \DeclareUnicodeCharacter{011E}{\u{G}}% \DeclareUnicodeCharacter{011F}{\u{g}}% % \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% \DeclareUnicodeCharacter{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \DeclareUnicodeCharacter{014C}{\=O}% \DeclareUnicodeCharacter{014D}{\=o}% \DeclareUnicodeCharacter{014E}{\u{O}}% \DeclareUnicodeCharacter{014F}{\u{o}}% % \DeclareUnicodeCharacter{0150}{\H{O}}% \DeclareUnicodeCharacter{0151}{\H{o}}% \DeclareUnicodeCharacter{0152}{\OE}% \DeclareUnicodeCharacter{0153}{\oe}% \DeclareUnicodeCharacter{0154}{\'R}% \DeclareUnicodeCharacter{0155}{\'r}% \DeclareUnicodeCharacter{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{r}}% \DeclareUnicodeCharacter{0158}{\v{R}}% \DeclareUnicodeCharacter{0159}{\v{r}}% \DeclareUnicodeCharacter{015A}{\'S}% \DeclareUnicodeCharacter{015B}{\'s}% \DeclareUnicodeCharacter{015C}{\^S}% \DeclareUnicodeCharacter{015D}{\^s}% \DeclareUnicodeCharacter{015E}{\cedilla{S}}% \DeclareUnicodeCharacter{015F}{\cedilla{s}}% % \DeclareUnicodeCharacter{0160}{\v{S}}% \DeclareUnicodeCharacter{0161}{\v{s}}% \DeclareUnicodeCharacter{0162}{\cedilla{T}}% \DeclareUnicodeCharacter{0163}{\cedilla{t}}% \DeclareUnicodeCharacter{0164}{\v{T}}% \DeclareUnicodeCharacter{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0168}{\~U}% \DeclareUnicodeCharacter{0169}{\~u}% \DeclareUnicodeCharacter{016A}{\=U}% \DeclareUnicodeCharacter{016B}{\=u}% \DeclareUnicodeCharacter{016C}{\u{U}}% \DeclareUnicodeCharacter{016D}{\u{u}}% \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% % \DeclareUnicodeCharacter{0170}{\H{U}}% \DeclareUnicodeCharacter{0171}{\H{u}}% \DeclareUnicodeCharacter{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{u}}% \DeclareUnicodeCharacter{0174}{\^W}% \DeclareUnicodeCharacter{0175}{\^w}% \DeclareUnicodeCharacter{0176}{\^Y}% \DeclareUnicodeCharacter{0177}{\^y}% \DeclareUnicodeCharacter{0178}{\"Y}% \DeclareUnicodeCharacter{0179}{\'Z}% \DeclareUnicodeCharacter{017A}{\'z}% \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% \DeclareUnicodeCharacter{017D}{\v{Z}}% \DeclareUnicodeCharacter{017E}{\v{z}}% \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% % \DeclareUnicodeCharacter{01C4}{D\v{Z}}% \DeclareUnicodeCharacter{01C5}{D\v{z}}% \DeclareUnicodeCharacter{01C6}{d\v{z}}% \DeclareUnicodeCharacter{01C7}{LJ}% \DeclareUnicodeCharacter{01C8}{Lj}% \DeclareUnicodeCharacter{01C9}{lj}% \DeclareUnicodeCharacter{01CA}{NJ}% \DeclareUnicodeCharacter{01CB}{Nj}% \DeclareUnicodeCharacter{01CC}{nj}% \DeclareUnicodeCharacter{01CD}{\v{A}}% \DeclareUnicodeCharacter{01CE}{\v{a}}% \DeclareUnicodeCharacter{01CF}{\v{I}}% % \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% \DeclareUnicodeCharacter{01D1}{\v{O}}% \DeclareUnicodeCharacter{01D2}{\v{o}}% \DeclareUnicodeCharacter{01D3}{\v{U}}% \DeclareUnicodeCharacter{01D4}{\v{u}}% % \DeclareUnicodeCharacter{01E2}{\={\AE}}% \DeclareUnicodeCharacter{01E3}{\={\ae}}% \DeclareUnicodeCharacter{01E6}{\v{G}}% \DeclareUnicodeCharacter{01E7}{\v{g}}% \DeclareUnicodeCharacter{01E8}{\v{K}}% \DeclareUnicodeCharacter{01E9}{\v{k}}% % \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% \DeclareUnicodeCharacter{01F1}{DZ}% \DeclareUnicodeCharacter{01F2}{Dz}% \DeclareUnicodeCharacter{01F3}{dz}% \DeclareUnicodeCharacter{01F4}{\'G}% \DeclareUnicodeCharacter{01F5}{\'g}% \DeclareUnicodeCharacter{01F8}{\`N}% \DeclareUnicodeCharacter{01F9}{\`n}% \DeclareUnicodeCharacter{01FC}{\'{\AE}}% \DeclareUnicodeCharacter{01FD}{\'{\ae}}% \DeclareUnicodeCharacter{01FE}{\'{\O}}% \DeclareUnicodeCharacter{01FF}{\'{\o}}% % \DeclareUnicodeCharacter{021E}{\v{H}}% \DeclareUnicodeCharacter{021F}{\v{h}}% % \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% \DeclareUnicodeCharacter{0228}{\cedilla{E}}% \DeclareUnicodeCharacter{0229}{\cedilla{e}}% \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% % \DeclareUnicodeCharacter{0232}{\=Y}% \DeclareUnicodeCharacter{0233}{\=y}% \DeclareUnicodeCharacter{0237}{\dotless{j}}% % \DeclareUnicodeCharacter{02BC}{'}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% % \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% % \DeclareUnicodeCharacter{1E20}{\=G}% \DeclareUnicodeCharacter{1E21}{\=g}% \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% \DeclareUnicodeCharacter{1E26}{\"H}% \DeclareUnicodeCharacter{1E27}{\"h}% % \DeclareUnicodeCharacter{1E30}{\'K}% \DeclareUnicodeCharacter{1E31}{\'k}% \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% \DeclareUnicodeCharacter{1E3E}{\'M}% \DeclareUnicodeCharacter{1E3F}{\'m}% % \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% % \DeclareUnicodeCharacter{1E54}{\'P}% \DeclareUnicodeCharacter{1E55}{\'p}% \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% % \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% % \DeclareUnicodeCharacter{1E7C}{\~V}% \DeclareUnicodeCharacter{1E7D}{\~v}% \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% % \DeclareUnicodeCharacter{1E80}{\`W}% \DeclareUnicodeCharacter{1E81}{\`w}% \DeclareUnicodeCharacter{1E82}{\'W}% \DeclareUnicodeCharacter{1E83}{\'w}% \DeclareUnicodeCharacter{1E84}{\"W}% \DeclareUnicodeCharacter{1E85}{\"w}% \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% \DeclareUnicodeCharacter{1E8C}{\"X}% \DeclareUnicodeCharacter{1E8D}{\"x}% \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% % \DeclareUnicodeCharacter{1E90}{\^Z}% \DeclareUnicodeCharacter{1E91}{\^z}% \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% \DeclareUnicodeCharacter{1E97}{\"t}% \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% % \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% % \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% \DeclareUnicodeCharacter{1EBC}{\~E}% \DeclareUnicodeCharacter{1EBD}{\~e}% % \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% % \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% % \DeclareUnicodeCharacter{1EF2}{\`Y}% \DeclareUnicodeCharacter{1EF3}{\`y}% \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% % \DeclareUnicodeCharacter{1EF8}{\~Y}% \DeclareUnicodeCharacter{1EF9}{\~y}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\expansion{}}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about. This makes UTF-8 the default % input encoding and allows @U to work. \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \txipageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} \def\bsixpaper{{\globaldefs = 1 \afourpaper \internalpagesizes{140mm}{100mm}% {-6.35mm}{-12.7mm}% {\bindingoffset}{14pt}% {176mm}{125mm}% \let\SETdispenvsize=\smallword \lispnarrowing = 0.2in \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by 2.5in % default 1in margin above heading line % and 1.5in to include heading, footing and % bottom margin % \dimen2 = \hsize \advance\dimen2 by 2in % default to 1 inch margin on each side % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. % \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \setregularquotes \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @passthroughcharstrue @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @setregularquotes @unsepspaces } } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have @fixbackslash turn them back on. @catcode`+=@other @catcode`@_=@other % \enablebackslashhack - allow file to begin `\input texinfo' % % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % If the file did not have a `\input texinfo', then it is turned off after % the first line; otherwise the first `\' in the file would cause an error. % This is used on the very last line of this file, texinfo.tex. % We also use @c to call @fixbackslash, in case ends of lines are hidden. { @catcode`@^=7 @catcode`@^^M=13@gdef@enablebackslashhack{% @global@let\ = @eatinput% @catcode`@^^M=13% @def@c{@fixbackslash@c}% % Definition for the newline at the end of this file. @def ^^M{@let^^M@secondlinenl}% % Definition for a newline in the main Texinfo file. @gdef @secondlinenl{@fixbackslash}% % In case the first line has a whole-line command on it @let@originalparsearg@parsearg @def@parsearg{@fixbackslash@originalparsearg} }} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@fixbackslash}} % Emergency active definition of newline, in case an active newline token % appears by mistake. {@catcode`@^=7 @catcode13=13% @gdef@enableemergencynewline{% @gdef^^M{% @par% %@par% }}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @enableemergencynewline @let@c=@comment @let@parsearg@originalparsearg % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. @catcode`+=@active @catcode`@_=@active % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets % called at the beginning of every Texinfo file. Not opening texinfo.cnf % directly in this file, texinfo.tex, makes it possible to make a format % file for Texinfo. % @openin 1 texinfo.cnf @ifeof 1 @else @input texinfo.cnf @fi @closein 1 } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @setregularquotes @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp) @c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @enablebackslashhack gnulib-20210822~d383792/build-aux/update-copyright000077500000000000000000000251351411057217300214150ustar00rootroot00000000000000#!/bin/sh #! -*-perl-*- # Update an FSF copyright year list to include the current year. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This 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, 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 . # # Written by Jim Meyering and Joel E. Denny # This script updates an FSF copyright year list to include the current year. # Usage: update-copyright [FILE...] # # The arguments to this script should be names of files that contain # copyright statements to be updated. The copyright holder's name # defaults to "Free Software Foundation, Inc." but may be changed to # any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment # variable. # # For example, you might wish to use the update-copyright target rule # in maint.mk from gnulib's maintainer-makefile module. # # Iff a copyright statement is recognized in a file and the final # year is not the current year, then the statement is updated for the # new year and it is reformatted to: # # 1. Fit within 72 columns. # 2. Convert 2-digit years to 4-digit years by prepending "19". # 3. Expand copyright year intervals. (See "Environment variables" # below.) # # A warning is printed for every file for which no copyright # statement is recognized. # # Each file's copyright statement must be formatted correctly in # order to be recognized. For example, each of these is fine: # # Copyright @copyright{} 1990-2005, 2007-2009 Free Software # Foundation, Inc. # # # Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # /* # * Copyright © 90,2005,2007-2009 # * Free Software Foundation, Inc. # */ # # However, the following format is not recognized because the line # prefix changes after the first line: # # ## Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # However, any correctly formatted copyright statement following # a non-matching copyright statements would be recognized. # # The exact conditions that a file's copyright statement must meet # to be recognized are: # # 1. It is the first copyright statement that meets all of the # following conditions. Subsequent copyright statements are # ignored. # 2. Its format is "Copyright (C)", then a list of copyright years, # and then the name of the copyright holder. # 3. The "(C)" takes one of the following forms or is omitted # entirely: # # A. (C) # B. (c) # C. @copyright{} # D. © # E. © # # 4. The "Copyright" appears at the beginning of a line, except that it # may be prefixed by any sequence (e.g., a comment) of no more than # 5 characters -- including white space. # 5. Iff such a prefix is present, the same prefix appears at the # beginning of each remaining line within the FSF copyright # statement. There is one exception in order to support C-style # comments: if the first line's prefix contains nothing but # whitespace surrounding a "/*", then the prefix for all subsequent # lines is the same as the first line's prefix except with each of # "/" and possibly "*" replaced by a " ". The replacement of "*" # by " " is consistent throughout all subsequent lines. # 6. Blank lines, even if preceded by the prefix, do not appear # within the FSF copyright statement. # 7. Each copyright year is 2 or 4 digits, and years are separated by # commas, "-", or "--". Whitespace may appear after commas. # # Environment variables: # # 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement # is reformatted even if it does not need updating for the new # year. If unset or set to 0, only updated FSF copyright # statements are reformatted. # 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive # copyright years (such as 90, 1991, 1992-2007, 2008) in a # reformatted FSF copyright statement is collapsed to a single # interval (such as 1990-2008). If unset or set to 0, all existing # copyright year intervals in a reformatted FSF copyright statement # are expanded instead. # If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps # to the minimal containing range. For example, convert # 2000, 2004-2007, 2009 to 2000-2009. # 3. For testing purposes, you can set the assumed current year in # UPDATE_COPYRIGHT_YEAR. # 4. The default maximum line length for a copyright line is 72. # Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length. # 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other # than "Free Software Foundation, Inc.". # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx -0777 -pi "$0" "$@"' if 0; my $VERSION = '2020-04-04.15:07'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use warnings; my $copyright_re = 'Copyright'; my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $holder ||= 'Free Software Foundation, Inc.'; my $prefix_max = 5; my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH}; !$margin || $margin !~ m/^\d+$/ and $margin = 72; my $tab_width = 8; my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; if (!$this_year || $this_year !~ m/^\d{4}$/) { my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); $this_year = $year + 1900; } # Unless the file consistently uses "\r\n" as the EOL, use "\n" instead. my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n"; my $leading; my $prefix; my $ws_re; my $stmt_re; while (/(^|\n)(.{0,$prefix_max})$copyright_re/g) { $leading = "$1$2"; $prefix = $2; if ($prefix =~ /^(\s*\/)\*(\s*)$/) { $prefix =~ s,/, ,; my $prefix_ws = $prefix; $prefix_ws =~ s/\*/ /; # Only whitespace. if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/) { $prefix = $prefix_ws; } } $ws_re = '[ \t\r\f]'; # \s without \n $ws_re = "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)"; my $holder_re = $holder; $holder_re =~ s/\s/$ws_re/g; my $stmt_remainder_re = "(?:$ws_re$circle_c_re)?" . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*" . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; if (/\G$stmt_remainder_re/) { $stmt_re = quotemeta($leading) . "($copyright_re$stmt_remainder_re)"; last; } } if (defined $stmt_re) { /$stmt_re/ or die; # Should never die. my $stmt = $1; my $final_year_orig = $2; # Handle two-digit year numbers like "98" and "99". my $final_year = $final_year_orig; $final_year <= 99 and $final_year += 1900; if ($final_year != $this_year) { # Update the year. $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/; } if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'}) { # Normalize all whitespace including newline-prefix sequences. $stmt =~ s/$ws_re/ /g; # Put spaces after commas. $stmt =~ s/, ?/, /g; # Convert 2-digit to 4-digit years. $stmt =~ s/(\b\d\d\b)/19$1/g; # Make the use of intervals consistent. if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) { $stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg; } else { my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-"; $stmt =~ s/ (\d{4}) (?: (,\ |--?) ((??{ if ($2 ne ', ') { '\d{4}'; } elsif (!$3) { $1 + 1; } else { $3 + 1; } })) )+ /$1$ndash$3/gx; # When it's 2, emit a single range encompassing all year numbers. $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2 and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/; } # Format within margin. my $stmt_wrapped; my $text_margin = $margin - length($prefix); if ($prefix =~ /^(\t+)/) { $text_margin -= length($1) * ($tab_width - 1); } while (length $stmt) { if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//) || ($stmt =~ s/^([\S]+)(?: |$)//)) { my $line = $1; $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading; $stmt_wrapped .= $line; } else { # Should be unreachable, but we don't want an infinite # loop if it can be reached. die; } } # Replace the old copyright statement. s/$stmt_re/$stmt_wrapped/; } } else { print STDERR "$ARGV: warning: copyright statement not found\n"; } # Hey Emacs! # Local variables: # coding: utf-8 # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-line-limit: 200 # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d.%02H:%02M" # time-stamp-time-zone: "UTC0" # time-stamp-end: "'; # UTC" # End: gnulib-20210822~d383792/build-aux/useless-if-before-free000077500000000000000000000170161411057217300223620ustar00rootroot00000000000000#!/bin/sh #! -*-perl-*- # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. # Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This 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 . # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2021-04-11 10:11'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. my $copyright_year = '2021'; use strict; use warnings; use Getopt::Long; (my $ME = $0) =~ s|.*/||; # use File::Coda; # https://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM < sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n"; print "License GPLv3+: GNU GPL version 3 or later .\n" . "This is free software: you are free to change and redistribute it.\n" . "There is NO WARRANTY, to the extent permitted by law.\n"; print "\n"; my $author = "Jim Meyering"; print "Written by $author.\n"; exit }, list => \$list, 'name=s@' => \@name, ) or usage 1; # Make sure we have the right number of non-option arguments. # Always tell the user why we fail. @ARGV < 1 and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; my $or = join '|', @name; my $regexp = qr/(?:$or)/; # Set the input record separator. # Note: this makes it impractical to print line numbers. $/ = '"'; my $found_match = 0; FILE: foreach my $file (@ARGV) { open FH, '<', $file or (warn "$ME: can't open '$file' for reading: $!\n"), $err = EXIT_ERROR, next; while (defined (my $line = )) { # Skip non-matching lines early to save time $line =~ /\bif\b/ or next; while ($line =~ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) # 1 2 3 (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) { my $all = $1; my ($lhs, $rhs) = ($2, $3); my ($free_opnd, $braced_free_opnd) = ($4, $5); my $non_NULL; if (!defined $rhs) { $non_NULL = $lhs } elsif (is_NULL $rhs) { $non_NULL = $lhs } elsif (is_NULL $lhs) { $non_NULL = $rhs } else { next } # Compare the non-NULL part of the "if" expression and the # free'd expression, without regard to white space. $non_NULL =~ tr/ \t//d; my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; $e2 =~ tr/ \t//d; if ($non_NULL eq $e2) { $found_match = 1; $list and (print "$file\0"), next FILE; print "$file: $all\n"; } } } } continue { close FH; } $found_match && $err == EXIT_NO_MATCH and $err = EXIT_MATCH; exit $err; } my $foo = <<'EOF'; # The above is to *find* them. # This adjusts them, removing the unnecessary "if (p)" part. # FIXME: do something like this as an option (doesn't do braces): free=xfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0x3b -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' # Use the following to remove redundant uses of kfree inside braces. # Note that -0777 puts perl in slurp-whole-file mode; # but we have plenty of memory, these days... free=kfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0777 -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' Be careful that the result of the above transformation is valid. If the matched string is followed by "else", then obviously, it won't be. When modifying files, refuse to process anything other than a regular file. EOF ## Local Variables: ## mode: perl ## indent-tabs-mode: nil ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-line-limit: 50 ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: gnulib-20210822~d383792/build-aux/vc-list-files000077500000000000000000000073671411057217300206150ustar00rootroot00000000000000#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2006-2021 Free Software Foundation, Inc. # This 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 . # List the specified version-controlled files. # With no argument, list them all. With a single DIRECTORY argument, # list the version-controlled files in that directory. # If there's an argument, it must be a single, "."-relative directory name. # cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/ postprocess= case $1 in --help) cat <. EOF exit ;; --version) year=`echo "$scriptversion" | sed 's/[^0-9].*//'` cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit ;; -C) test "$2" = . || postprocess="| sed 's|^|$2/|'" cd "$2" || exit 1 shift; shift ;; esac test $# = 0 && set . for dir do if test -d .git || test -f .git; then test "x$dir" = x. \ && dir= sed_esc= \ || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } # Ignore git symlinks - either they point into the tree, in which case # we don't need to visit the target twice, or they point somewhere # else (often into a submodule), in which case the content does not # belong to this package. eval exec git ls-tree -r 'HEAD:"$dir"' \ \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess elif test -d .hg; then eval exec hg locate '"$dir/*"' $postprocess elif test -d .bzr; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" eval exec bzr ls -R --versioned '"$dir"' $postprocess elif test -d CVS; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" if test -x build-aux/cvsu; then eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess elif (cvsu --help) >/dev/null 2>&1; then eval cvsu --find --types=AFGM '"$dir"' $postprocess else eval awk -F/ \''{ \ if (!$1 && $3 !~ /^-/) { \ f=FILENAME; \ if (f ~ /CVS\/Entries$/) \ f = substr(f, 1, length(f)-11); \ print f $2; \ }}'\'' \ `find "$dir" -name Entries -print` /dev/null' $postprocess fi elif test -d .svn; then eval exec svn list -R '"$dir"' $postprocess else echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 exit 1 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnulib-20210822~d383792/build-aux/vcs-to-changelog.py000077500000000000000000000077521411057217300217210ustar00rootroot00000000000000#!/usr/bin/python3 # Main VCSToChangeLog script. # Copyright (C) 2019-2021 Free Software Foundation, Inc. # # This 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 . ''' Generate a ChangeLog style output based on a VCS log. This script takes two revisions as input and generates a ChangeLog style output for all revisions between the two revisions. This script is intended to be executed from the project parent directory. The vcstocl directory has a file vcstocl_quirks.py that defines a function called get_project_quirks that returns a object of class type ProjectQuirks or a subclass of the same. The definition of the ProjectQuirks class is below and it specifies the properties that the project must set to ensure correct parsing of its contents. Among other things, ProjectQurks specifies the VCS to read from; the default is assumed to be git. The script then studies the VCS log and for each change, list out the nature of changes in the constituent files. Each file type may have parser frontends that can read files and construct objects that may be compared to determine the minimal changes that occured in each revision. For files that do not have parsers, we may only know the nature of changes at the top level depending on the information that the VCS stores. The parser frontend must have a compare() method that takes the old and new files as arrays of strings and prints the output in ChangeLog format. Currently implemented VCS: git Currently implemented frontends: C ''' import sys import os import re import argparse from vcstocl.misc_util import * from vcstocl import frontend_c from vcstocl.vcs_git import * from vcstocl.projectquirks import ProjectQuirks debug = DebugUtil(False) sys.path.append('/'.join([os.path.dirname(os.path.realpath(__file__)), 'vcstocl'])) def main(repo, frontends, refs): ''' ChangeLog Generator Entry Point. ''' commits = repo.list_commits(args.refs) for commit in commits: repo.list_changes(commit, frontends) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('refs', metavar='ref', type=str, nargs=2, help='Refs to print ChangeLog entries between') parser.add_argument('-d', '--debug', required=False, action='store_true', help='Run the file parser debugger.') parser.add_argument('-q', '--quirks', required=False, type=str, help='Load a quirks file.') args = parser.parse_args() debug.debug = args.debug if len(args.refs) < 2: debug.eprint('Two refs needed to get a ChangeLog.') sys.exit(os.EX_USAGE) # Load quirks file. We assume that the script is run from the top level source # directory. if args.quirks: import importlib.util spec = importlib.util.spec_from_file_location("vcstocl_quirks", args.quirks) vcstocl_quirks = importlib.util.module_from_spec(spec) spec.loader.exec_module(vcstocl_quirks) project_quirks = vcstocl_quirks.get_project_quirks(debug) else: try: from vcstocl_quirks import * project_quirks = get_project_quirks(debug) except: project_quirks = ProjectQuirks() REPO = {'git': GitRepo(project_quirks.IGNORE_LIST, debug)} fe_c = frontend_c.Frontend(project_quirks, debug) FRONTENDS = {'.c': fe_c, '.h': fe_c} main(REPO[project_quirks.repo], FRONTENDS, args.refs) gnulib-20210822~d383792/build-aux/vcstocl/000077500000000000000000000000001411057217300176465ustar00rootroot00000000000000gnulib-20210822~d383792/build-aux/vcstocl/frontend_c.py000066400000000000000000000735341411057217300223550ustar00rootroot00000000000000# The C Parser. # Copyright (C) 2019-2021 Free Software Foundation, Inc. # # This 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 . from enum import Enum import re from vcstocl.misc_util import * class block_flags(Enum): ''' Flags for the code block. ''' else_block = 1 macro_defined = 2 macro_redefined = 3 class block_type(Enum): ''' Type of code block. ''' file = 1 macro_cond = 2 macro_def = 3 macro_undef = 4 macro_include = 5 macro_info = 6 decl = 7 func = 8 composite = 9 macrocall = 10 fndecl = 11 assign = 12 struct = 13 union = 14 enum = 15 # A dictionary describing what each action (add, modify, delete) show up as in # the ChangeLog output. actions = {0:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.file:{'new': 'New file', 'mod': 'Modified file', 'del': 'Remove file'}, block_type.macro_cond:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.macro_def:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.macro_include:{'new': 'Include file', 'mod': 'Modified', 'del': 'Remove include'}, block_type.macro_info:{'new': 'New preprocessor message', 'mod': 'Modified', 'del': 'Remove'}, block_type.decl:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.func:{'new': 'New function', 'mod': 'Modified function', 'del': 'Remove function'}, block_type.composite:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.struct:{'new': 'New struct', 'mod': 'Modified struct', 'del': 'Remove struct'}, block_type.union:{'new': 'New union', 'mod': 'Modified union', 'del': 'Remove union'}, block_type.enum:{'new': 'New enum', 'mod': 'Modified enum', 'del': 'Remove enum'}, block_type.macrocall:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}, block_type.fndecl:{'new': 'New function', 'mod': 'Modified', 'del': 'Remove'}, block_type.assign:{'new': 'New', 'mod': 'Modified', 'del': 'Remove'}} def new_block(name, type, contents, parent, flags = 0): ''' Create a new code block with the parent as PARENT. The code block is a basic structure around which the tree representation of the source code is built. It has the following attributes: - name: A name to refer it by in the ChangeLog - type: Any one of the following types in BLOCK_TYPE. - contents: The contents of the block. For a block of types file or macro_cond, this would be a list of blocks that it nests. For other types it is a list with a single string specifying its contents. - parent: This is the parent of the current block, useful in setting up #elif or #else blocks in the tree. - flags: A special field to indicate some properties of the block. See BLOCK_FLAGS for values. ''' block = {} block['matched'] = False block['name'] = name block['type'] = type block['contents'] = contents block['parent'] = parent if parent: parent['contents'].append(block) block['flags'] = flags block['actions'] = actions[type] return block class ExprParser: ''' Parent class of all of the C expression parsers. It is necessary that the children override the parse_line() method. ''' ATTRIBUTE = r'(((__attribute__\s*\(\([^;]+\)\))|(asm\s*\([?)]+\)))\s*)*' def __init__(self, project_quirks, debug): self.project_quirks = project_quirks self.debug = debug def fast_forward_scope(self, cur, op, loc): ''' Consume lines in a code block. Consume all lines of a block of code such as a composite type declaration or a function declaration. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - Returns: The next location to be read in the array as well as the updated value of CUR, which will now have the body of the function or composite type. ''' nesting = cur.count('{') - cur.count('}') while nesting > 0 and loc < len(op): cur = cur + ' ' + op[loc] nesting = nesting + op[loc].count('{') nesting = nesting - op[loc].count('}') loc = loc + 1 return (cur, loc) def parse_line(self, cur, op, loc, code, macros): ''' The parse method should always be overridden by the child. ''' raise class FuncParser(ExprParser): REGEX = re.compile(ExprParser.ATTRIBUTE + r'\s*(\w+)\s*\([^(][^{]+\)\s*{') def parse_line(self, cur, op, loc, code, macros): ''' Parse a function. Match a function definition. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this - Returns: The next location to be read in the array. ''' found = re.search(self.REGEX, cur) if not found: return cur, loc name = found.group(5) self.debug.print('FOUND FUNC: %s' % name) # Consume everything up to the ending brace of the function. (cur, loc) = self.fast_forward_scope(cur, op, loc) new_block(name, block_type.func, [cur], code) return '', loc class CompositeParser(ExprParser): # Composite types such as structs and unions. REGEX = re.compile(r'(struct|union|enum)\s*(\w*)\s*{') def parse_line(self, cur, op, loc, code, macros): ''' Parse a composite type. Match declaration of a composite type such as a sruct or a union.. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this - Returns: The next location to be read in the array. ''' found = re.search(self.REGEX, cur) if not found: return cur, loc # Lap up all of the struct definition. (cur, loc) = self.fast_forward_scope(cur, op, loc) name = found.group(2) if not name: if 'typedef' in cur: name = re.sub(r'.*}\s*(\w+);$', r'\1', cur) else: name= '' ctype = found.group(1) if ctype == 'struct': blocktype = block_type.struct if ctype == 'enum': blocktype = block_type.enum if ctype == 'union': blocktype = block_type.union new_block(name, block_type.composite, [cur], code) return '', loc class AssignParser(ExprParser): # Static assignments. REGEX = re.compile(r'(\w+)\s*(\[[^\]]*\])*\s*([^\s]*attribute[\s\w()]+)?\s*=') def parse_line(self, cur, op, loc, code, macros): ''' Parse an assignment statement. This includes array assignments. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this - Returns: The next location to be read in the array. ''' found = re.search(self.REGEX, cur) if not found: return cur, loc name = found.group(1) self.debug.print('FOUND ASSIGN: %s' % name) # Lap up everything up to semicolon. while ';' not in cur and loc < len(op): cur = op[loc] loc = loc + 1 new_block(name, block_type.assign, [cur], code) return '', loc class DeclParser(ExprParser): # Function pointer typedefs. TYPEDEF_FN_RE = re.compile(r'\(\*(\w+)\)\s*\([^)]+\);') # Simple decls. DECL_RE = re.compile(r'(\w+)(\[\w*\])*\s*' + ExprParser.ATTRIBUTE + ';') # __typeof decls. TYPEOF_RE = re.compile(r'__typeof\s*\([\w\s]+\)\s*(\w+)\s*' + \ ExprParser.ATTRIBUTE + ';') # Function Declarations. FNDECL_RE = re.compile(r'\s*(\w+)\s*\(([^\(][^;]*)?\)\s*' + ExprParser.ATTRIBUTE + ';') def __init__(self, regex, blocktype, project_quirks, debug): # The regex for the current instance. self.REGEX = regex self.blocktype = blocktype super().__init__(project_quirks, debug) def parse_line(self, cur, op, loc, code, macros): ''' Parse a top level declaration. All types of declarations except function declarations. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this function - Returns: The next location to be read in the array. ''' found = re.search(self.REGEX, cur) if not found: return cur, loc # The name is the first group for all of the above regexes. This is a # coincidence, so care must be taken if regexes are added or changed to # ensure that this is true. name = found.group(1) self.debug.print('FOUND DECL: %s' % name) new_block(name, self.blocktype, [cur], code) return '', loc class MacroParser(ExprParser): # The macrocall_re peeks into the next line to ensure that it doesn't # eat up a FUNC by accident. The func_re regex is also quite crude and # only intends to ensure that the function name gets picked up # correctly. MACROCALL_RE = re.compile(r'(\w+)\s*(\(.*\))*$') def parse_line(self, cur, op, loc, code, macros): ''' Parse a macro call. Match a symbol hack macro calls that get added without semicolons. - CUR is the string to consume this expression from - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this - MACROS is the regex match object. - Returns: The next location to be read in the array. ''' # First we have the macros for symbol hacks and all macros we identified so # far. if cur.count('(') != cur.count(')'): return cur, loc if loc < len(op) and '{' in op[loc]: return cur, loc found = re.search(self.MACROCALL_RE, cur) if found: sym = found.group(1) name = found.group(2) if sym in macros or self.project_quirks and \ sym in self.project_quirks.C_MACROS: self.debug.print('FOUND MACROCALL: %s (%s)' % (sym, name)) new_block(sym, block_type.macrocall, [cur], code) return '', loc # Next, there could be macros that get called right inside their #ifdef, but # without the semi-colon. if cur.strip() == code['name'].strip(): self.debug.print('FOUND MACROCALL (without brackets): %s' % (cur)) new_block(cur, block_type.macrocall, [cur], code) return '',loc return cur, loc class Frontend: ''' The C Frontend implementation. ''' KNOWN_MACROS = [] def __init__(self, project_quirks, debug): self.op = [] self.debug = debug self.project_quirks = project_quirks self.c_expr_parsers = [ CompositeParser(project_quirks, debug), AssignParser(project_quirks, debug), DeclParser(DeclParser.TYPEOF_RE, block_type.decl, project_quirks, debug), DeclParser(DeclParser.TYPEDEF_FN_RE, block_type.decl, project_quirks, debug), DeclParser(DeclParser.FNDECL_RE, block_type.fndecl, project_quirks, debug), FuncParser(project_quirks, debug), DeclParser(DeclParser.DECL_RE, block_type.decl, project_quirks, debug), MacroParser(project_quirks, debug)] def remove_extern_c(self): ''' Process extern "C"/"C++" block nesting. The extern "C" nesting does not add much value so it's safe to almost always drop it. Also drop extern "C++" ''' new_op = [] nesting = 0 extern_nesting = 0 for l in self.op: if '{' in l: nesting = nesting + 1 if re.match(r'extern\s*"C"\s*{', l): extern_nesting = nesting continue if '}' in l: nesting = nesting - 1 if nesting < extern_nesting: extern_nesting = 0 continue new_op.append(l) # Now drop all extern C++ blocks. self.op = new_op new_op = [] nesting = 0 extern_nesting = 0 in_cpp = False for l in self.op: if re.match(r'extern\s*"C\+\+"\s*{', l): nesting = nesting + 1 in_cpp = True if in_cpp: if '{' in l: nesting = nesting + 1 if '}' in l: nesting = nesting - 1 if nesting == 0: new_op.append(l) self.op = new_op def remove_comments(self, op): ''' Remove comments. Return OP by removing all comments from it. ''' self.debug.print('REMOVE COMMENTS') sep='\n' opstr = sep.join(op) opstr = re.sub(r'/\*.*?\*/', r'', opstr, flags=re.MULTILINE | re.DOTALL) opstr = re.sub(r'\\\n', r' ', opstr, flags=re.MULTILINE | re.DOTALL) new_op = list(filter(None, opstr.split(sep))) return new_op def normalize_condition(self, name): ''' Make some minor transformations on macro conditions to make them more readable. ''' # Negation with a redundant bracket. name = re.sub(r'!\s*\(\s*(\w+)\s*\)', r'! \1', name) # Pull in negation of equality. name = re.sub(r'!\s*\(\s*(\w+)\s*==\s*(\w+)\)', r'\1 != \2', name) # Pull in negation of inequality. name = re.sub(r'!\s*\(\s*(\w+)\s*!=\s*(\w+)\)', r'\1 == \2', name) # Fix simple double negation. name = re.sub(r'!\s*\(\s*!\s*(\w+)\s*\)', r'\1', name) # Similar, but nesting a complex expression. Because of the greedy match, # this matches only the outermost brackets. name = re.sub(r'!\s*\(\s*!\s*\((.*)\)\s*\)$', r'\1', name) return name def parse_preprocessor(self, loc, code, start = ''): ''' Parse a preprocessor directive. In case a preprocessor condition (i.e. if/elif/else), create a new code block to nest code into and in other cases, identify and add entities suchas include files, defines, etc. - OP is the string array for the file - LOC is the first unread location in CUR - CODE is the block to which we add this function - START is the string that should continue to be expanded in case we step into a new macro scope. - Returns: The next location to be read in the array. ''' cur = self.op[loc] loc = loc + 1 endblock = False self.debug.print('PARSE_MACRO: %s' % cur) # Remove the # and strip spaces again. cur = cur[1:].strip() # Include file. if cur.find('include') == 0: m = re.search(r'include\s*["<]?([^">]+)[">]?', cur) new_block(m.group(1), block_type.macro_include, [cur], code) # Macro definition. if cur.find('define') == 0: m = re.search(r'define\s+([a-zA-Z0-9_]+)', cur) name = m.group(1) exists = False # Find out if this is a redefinition. for c in code['contents']: if c['name'] == name and c['type'] == block_type.macro_def: c['flags'] = block_flags.macro_redefined exists = True break if not exists: new_block(m.group(1), block_type.macro_def, [cur], code, block_flags.macro_defined) # Add macros as we encounter them. self.KNOWN_MACROS.append(m.group(1)) # Macro undef. if cur.find('undef') == 0: m = re.search(r'undef\s+([a-zA-Z0-9_]+)', cur) new_block(m.group(1), block_type.macro_def, [cur], code) # #error and #warning macros. if cur.find('error') == 0 or cur.find('warning') == 0: m = re.search(r'(error|warning)\s+"?(.*)"?', cur) if m: name = m.group(2) else: name = '' new_block(name, block_type.macro_info, [cur], code) # Start of an #if or #ifdef block. elif cur.find('if') == 0: rem = re.sub(r'ifndef', r'!', cur).strip() rem = re.sub(r'(ifdef|defined|if)', r'', rem).strip() rem = self.normalize_condition(rem) ifdef = new_block(rem, block_type.macro_cond, [], code) ifdef['headcond'] = ifdef ifdef['start'] = start loc = self.parse_line(loc, ifdef, start) # End the previous #if/#elif and begin a new block. elif cur.find('elif') == 0 and code['parent']: rem = self.normalize_condition(re.sub(r'(elif|defined)', r'', cur).strip()) # The #else and #elif blocks should go into the current block's parent. ifdef = new_block(rem, block_type.macro_cond, [], code['parent']) ifdef['headcond'] = code['headcond'] loc = self.parse_line(loc, ifdef, code['headcond']['start']) endblock = True # End the previous #if/#elif and begin a new block. elif cur.find('else') == 0 and code['parent']: name = self.normalize_condition('!(' + code['name'] + ')') ifdef = new_block(name, block_type.macro_cond, [], code['parent'], block_flags.else_block) ifdef['headcond'] = code['headcond'] loc = self.parse_line(loc, ifdef, code['headcond']['start']) endblock = True elif cur.find('endif') == 0 and code['parent']: # Insert an empty else block if there isn't one. if code['flags'] != block_flags.else_block: name = self.normalize_condition('!(' + code['name'] + ')') ifdef = new_block(name, block_type.macro_cond, [], code['parent'], block_flags.else_block) ifdef['headcond'] = code['headcond'] loc = self.parse_line(loc - 1, ifdef, code['headcond']['start']) endblock = True return (loc, endblock) def parse_c_expr(self, cur, loc, code): ''' Parse a C expression. CUR is the string to be parsed, which continues to grow until a match is found. OP is the string array and LOC is the first unread location in the string array. CODE is the block in which any identified expressions should be added. ''' self.debug.print('PARSING: %s' % cur) for p in self.c_expr_parsers: cur, loc = p.parse_line(cur, self.op, loc, code, self.KNOWN_MACROS) if not cur: break return cur, loc def expand_problematic_macros(self, cur): ''' Replace problem macros with their substitutes in CUR. ''' for p in self.project_quirks.MACRO_QUIRKS: cur = re.sub(p['orig'], p['sub'], cur) return cur def parse_line(self, loc, code, start = ''): ''' Parse the file line by line. The function assumes a mostly GNU coding standard compliant input so it might barf with anything that is eligible for the Obfuscated C code contest. The basic idea of the parser is to identify macro conditional scopes and definitions, includes, etc. and then parse the remaining C code in the context of those macro scopes. The parser does not try to understand the semantics of the code or even validate its syntax. It only records high level symbols in the source and makes a tree structure to indicate the declaration/definition of those symbols and their scope in the macro definitions. OP is the string array. LOC is the first unparsed line. CODE is the block scope within which the parsing is currently going on. START is the string with which this parsing should start. ''' cur = start endblock = False saved_cur = '' saved_loc = 0 endblock_loc = loc while loc < len(self.op): nextline = self.op[loc] # Macros. if nextline[0] == '#': (loc, endblock) = self.parse_preprocessor(loc, code, cur) if endblock: endblock_loc = loc # Rest of C Code. else: cur = cur + ' ' + nextline cur = self.expand_problematic_macros(cur).strip() cur, loc = self.parse_c_expr(cur, loc + 1, code) if endblock and not cur: # If we are returning from the first #if block, we want to proceed # beyond the current block, not repeat it for any preceding blocks. if code['headcond'] == code: return loc else: return endblock_loc return loc def drop_empty_blocks(self, tree): ''' Drop empty macro conditional blocks. ''' newcontents = [] for x in tree['contents']: if x['type'] != block_type.macro_cond or len(x['contents']) > 0: newcontents.append(x) for t in newcontents: if t['type'] == block_type.macro_cond: self.drop_empty_blocks(t) tree['contents'] = newcontents def consolidate_tree_blocks(self, tree): ''' Consolidate common macro conditional blocks. Get macro conditional blocks at the same level but scatterred across the file together into a single common block to allow for better comparison. ''' # Nothing to do for non-nesting blocks. if tree['type'] != block_type.macro_cond \ and tree['type'] != block_type.file: return # Now for nesting blocks, get the list of unique condition names and # consolidate code under them. The result also bunches up all the # conditions at the top. newcontents = [] macros = [x for x in tree['contents'] \ if x['type'] == block_type.macro_cond] macro_names = sorted(set([x['name'] for x in macros])) for m in macro_names: nc = [x['contents'] for x in tree['contents'] if x['name'] == m \ and x['type'] == block_type.macro_cond] b = new_block(m, block_type.macro_cond, sum(nc, []), tree) self.consolidate_tree_blocks(b) newcontents.append(b) newcontents.extend([x for x in tree['contents'] \ if x['type'] != block_type.macro_cond]) tree['contents'] = newcontents def compact_tree(self, tree): ''' Try to reduce the tree to its minimal form. A source code tree in its simplest form may have a lot of duplicated information that may be difficult to compare and come up with a minimal difference. ''' # First, drop all empty blocks. self.drop_empty_blocks(tree) # Macro conditions that nest the entire file aren't very interesting. This # should take care of the header guards. if tree['type'] == block_type.file \ and len(tree['contents']) == 1 \ and tree['contents'][0]['type'] == block_type.macro_cond: tree['contents'] = tree['contents'][0]['contents'] # Finally consolidate all macro conditional blocks. self.consolidate_tree_blocks(tree) def parse(self, op): ''' File parser. Parse the input array of lines OP and generate a tree structure to represent the file. This tree structure is then used for comparison between the old and new file. ''' self.KNOWN_MACROS = [] tree = new_block('', block_type.file, [], None) self.op = self.remove_comments(op) self.remove_extern_c() self.op = [re.sub(r'#\s+', '#', x) for x in self.op] self.parse_line(0, tree) self.compact_tree(tree) self.dump_tree(tree, 0) return tree def print_change(self, tree, action, prologue = ''): ''' Print the nature of the differences found in the tree compared to the other tree. TREE is the tree that changed, action is what the change was (Added, Removed, Modified) and prologue specifies the macro scope the change is in. The function calls itself recursively for all macro condition tree nodes. ''' if tree['type'] != block_type.macro_cond: print('\t%s(%s): %s.' % (prologue, tree['name'], action)) return prologue = '%s[%s]' % (prologue, tree['name']) for t in tree['contents']: if t['type'] == block_type.macro_cond: self.print_change(t, action, prologue) else: print('\t%s(%s): %s.' % (prologue, t['name'], action)) def compare_trees(self, left, right, prologue = ''): ''' Compare two trees and print the difference. This routine is the entry point to compare two trees and print out their differences. LEFT and RIGHT will always have the same name and type, starting with block_type.file and '' at the top level. ''' if left['type'] == block_type.macro_cond or left['type'] == block_type.file: if left['type'] == block_type.macro_cond: prologue = '%s[%s]' % (prologue, left['name']) # Make sure that everything in the left tree exists in the right tree. for cl in left['contents']: found = False for cr in right['contents']: if not cl['matched'] and not cr['matched'] and \ cl['name'] == cr['name'] and cl['type'] == cr['type']: cl['matched'] = cr['matched'] = True self.compare_trees(cl, cr, prologue) found = True break if not found: self.print_change(cl, cl['actions']['del'], prologue) # ... and vice versa. This time we only need to look at unmatched # contents. for cr in right['contents']: if not cr['matched']: self.print_change(cr, cr['actions']['new'], prologue) else: if left['contents'] != right['contents']: self.print_change(left, left['actions']['mod'], prologue) def dump_tree(self, tree, indent): ''' Print the entire tree. ''' if not self.debug.debug: return if tree['type'] == block_type.macro_cond or tree['type'] == block_type.file: print('%sScope: %s' % (' ' * indent, tree['name'])) for c in tree['contents']: self.dump_tree(c, indent + 4) print('%sEndScope: %s' % (' ' * indent, tree['name'])) else: if tree['type'] == block_type.func: print('%sFUNC: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.composite: print('%sCOMPOSITE: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.assign: print('%sASSIGN: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.fndecl: print('%sFNDECL: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.decl: print('%sDECL: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.macrocall: print('%sMACROCALL: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.macro_def: print('%sDEFINE: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.macro_include: print('%sINCLUDE: %s' % (' ' * indent, tree['name'])) elif tree['type'] == block_type.macro_undef: print('%sUNDEF: %s' % (' ' * indent, tree['name'])) else: print('%sMACRO LEAF: %s' % (' ' * indent, tree['name'])) def compare(self, oldfile, newfile): ''' Entry point for the C backend. Parse the two files into trees and compare them. Print the result of the comparison in the ChangeLog-like format. ''' self.debug.print('LEFT TREE') self.debug.print('-' * 80) left = self.parse(oldfile) self.debug.print('RIGHT TREE') self.debug.print('-' * 80) right = self.parse(newfile) self.compare_trees(left, right) gnulib-20210822~d383792/build-aux/vcstocl/misc_util.py000066400000000000000000000040651411057217300222150ustar00rootroot00000000000000# General Utility functions. # Copyright (C) 2019-2021 Free Software Foundation, Inc. # # This 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 . import sys import os class DebugUtil: debug = False def __init__(self, debug): self.debug = debug def eprint(self, *args, **kwargs): ''' Print to stderr. ''' print(*args, file=sys.stderr, **kwargs) def print(self, *args, **kwargs): ''' Convenience function to print diagnostic information in the program. ''' if self.debug: self.eprint(*args, **kwargs) def decode(string): ''' Attempt to decode a string. Decode a string read from the source file. The multiple attempts are needed due to the presence of the page break characters and some tests in locales. ''' codecs = ['utf8', 'cp1252'] for i in codecs: try: return string.decode(i) except UnicodeDecodeError: pass DebugUtil.eprint('Failed to decode: %s' % string) def analyze_diff(filename, oldfile, newfile, frontends): ''' Parse the output of the old and new files and print the difference. For input files OLDFILE and NEWFILE with name FILENAME, generate reduced trees for them and compare them. We limit our comparison to only C source files. ''' name, ext = os.path.splitext(filename) if not ext in frontends.keys(): return None else: frontend = frontends[ext] frontend.compare(oldfile, newfile) gnulib-20210822~d383792/build-aux/vcstocl/projectquirks.py000066400000000000000000000034201411057217300231240ustar00rootroot00000000000000# Project quirks base class. # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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 . class ProjectQuirks: ''' Base class for project quirks The following members can be overridden in the subclass: - MACRO_QUIRKS A list of dictionary entries with indexes as `orig` and `sub` where `orig` is a Python regular expression pattern to match and `sub` is the substitution. These substitutions are used to work around C/C++ macros that are known to break parsing of C programs. - C_MACROS This is a list of macro definitions that are extensively used and are known to break parsing due to some characteristic, mainly the lack of a semicolon at the end. - IGNORE_LIST A list of files to ignore in the changesets, either because they are not needed (such as the ChangeLog) or because they are not parseable. For example, glibc has a header file that is only assembly code, which breaks the C parser. - repo Specify the project repo source control. The default value is `git`. ''' MACRO_QUIRKS = [] C_MACROS = [] repo = 'git' IGNORE_LIST = ['ChangeLog'] gnulib-20210822~d383792/build-aux/vcstocl/vcs_git.py000066400000000000000000000144261411057217300216650ustar00rootroot00000000000000# Git repo support. # Copyright (C) 2019-2021 Free Software Foundation, Inc. # # This 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 . import subprocess import re from vcstocl.misc_util import * class GitRepo: def __init__(self, ignore_list, debug): self.ignore_list = ignore_list self.debug = debug def exec_git_cmd(self, args): ''' Execute a git command and return its result as a list of strings. ''' args.insert(0, 'git') self.debug.print(args) proc = subprocess.Popen(args, stdout=subprocess.PIPE) # Clean up the output by removing trailing spaces, newlines and dropping # blank lines. op = [decode(x[:-1]).strip() for x in proc.stdout] op = [re.sub(r'[ \f]+', ' ', x) for x in op] op = [x for x in op if x] return op def list_changes(self, commit, frontends): ''' List changes in a single commit. For the input commit id COMMIT, identify the files that have changed and the nature of their changes. Print commit information in the ChangeLog format, calling into helper functions as necessary. ''' op = self.exec_git_cmd(['show', '--pretty=fuller', '--date=short', '--raw', commit]) authors = [] date = '' merge = False copyright_exempt='' subject= '' for l in op: if l.lower().find('copyright-paperwork-exempt:') == 0 \ and 'yes' in l.lower(): copyright_exempt=' (tiny change)' elif l.lower().find('co-authored-by:') == 0 or \ l.find('Author:') == 0: author = l.split(':')[1] author = re.sub(r'([^ ]*)\s*(<.*)', r'\1 \2', author.strip()) authors.append(author) elif l.find('CommitDate:') == 0: date = l[11:].strip() elif l.find('Merge:') == 0: merge = True elif not subject and date: subject = l.strip() # Find raw commit information for all non-ChangeLog files. op = [x[1:] for x in op if len(x) > 0 and re.match(r'^:[0-9]+', x)] # Skip all ignored files. for ign in self.ignore_list: op = [x for x in op if ign not in x] # It was only the ChangeLog, ignore. if len(op) == 0: return print('%s %s' % (date, authors[0])) if (len(authors) > 1): authors = authors[1:] for author in authors: print(' %s' % author) print() if merge: print('\t MERGE COMMIT: %s\n' % commit) return print('\tCOMMIT%s: %s\n\t%s\n' % (copyright_exempt, commit, subject)) # Changes across a large number of files are typically mechanical (URL # updates, copyright notice changes, etc.) and likely not interesting # enough to produce a detailed ChangeLog entry. if len(op) > 100: print('\t* Suppressing diff as too many files differ.\n') return # Each of these lines has a space separated format like so: # : # # where OPERATION can be one of the following: # A: File added # D: File removed # M[0-9]{3}: File modified # R[0-9]{3}: File renamed, with the 3 digit number following it indicating # what percentage of the file is intact. # C[0-9]{3}: File copied. Same semantics as R. # T: The permission bits of the file changed # U: Unmerged. We should not encounter this, so we ignore it/ # X, or anything else: Most likely a bug. Report it. # # FILE2 is set only when OPERATION is R or C, to indicate the new file name. # # Also note that merge commits have a different format here, with three # entries each for the modes and refs, but we don't bother with it for now. # # For more details: https://git-scm.com/docs/diff-format for f in op: data = f.split('\t') file1 = data[1] if len(data) > 2: file2 = data[2] data = data[0].split() if data[4] == 'A': print('\t* %s: New file.' % file1) elif data[4] == 'D': print('\t* %s: Delete file.' % file1) elif data[4] == 'T': print('\t* %s: Changed file permission bits from %s to %s' % \ (file1, data[0], data[1])) elif data[4][0] == 'M': print('\t* %s: Modified.' % file1) analyze_diff(file1, self.exec_git_cmd(['show', data[2]]), self.exec_git_cmd(['show', data[3]]), frontends) elif data[4][0] == 'R' or data[4][0] == 'C': change = int(data[4][1:]) print('\t* %s: Move to...' % file1) print('\t* %s: ... here.' % file2) if change < 100: analyze_diff(file2, self.exec_git_cmd(['show', data[2]]), self.exec_git_cmd(['show', data[3]]), frontends) # We should never encounter this, so ignore for now. elif data[4] == 'U': pass else: eprint('%s: Unknown line format %s' % (commit, data[4])) sys.exit(42) print('') def list_commits(self, revs): ''' List commit IDs between the two revs in the REVS list. ''' ref = revs[0] + '..' + revs[1] return self.exec_git_cmd(['log', '--pretty=%H', ref]) gnulib-20210822~d383792/build-aux/x-to-1.in000066400000000000000000000055701411057217300175550ustar00rootroot00000000000000#! /bin/sh # # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This 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 . # # This program creates a program's manual from the .x skeleton and its --help # output. # # Usage: x-to-1 [OPTIONS] PERL HELP2MAN EXECUTABLE PROGRAM.x PROGRAM.1 # where # # PERL The file name of the perl program. # HELP2MAN Either the file name of the help2man perl script, or a complete # command such as "$PERL -w -- help2man". # EXECUTABLE The file name of the program to invoke with --help. # PROGRAM The name of the program. # PROGRAM.x The .x skeleton is a file containing manual page text that is # not part of the --help output. It is passed to help2man via # its --include option. Its format is described in the help2man # documentation. # PROGRAM.1 The output file, a manual page in mandoc format. # # Options: # --update Don't overwrite the output if nothing would change. update= while true; do case "$1" in --update) update=yes; shift;; *) break;; esac done if test $# != 5; then echo "Usage: x-to-1 [OPTIONS] PERL HELP2MAN executable program.x program.1" 1>&2 exit 1 fi PERL="$1" HELP2MAN="$2" executable="$3" aux="$4" output="$5" # Accommodate both possible forms of the HELP2MAN argument. case "$HELP2MAN" in "$PERL "*) ;; *) HELP2MAN="$PERL $HELP2MAN" ;; esac progname=`basename $aux .x` # configure determined whether perl exists. case "$PERL" in *"/missing perl") perlok=no ;; *) # Determine whether all the perl modules that help2man needs are installed. if $HELP2MAN --help >/dev/null 2>/dev/null; then perlok=yes else perlok=no fi ;; esac if test @CROSS_COMPILING@ = no && test -f $executable && test $perlok = yes; then echo "Updating man page $output" echo "$HELP2MAN --include=$aux $executable > $output" rm -f t-$progname.1 $HELP2MAN --include=$aux $executable > t-$progname.1 || exit 1 if test -n "$update"; then # In --update mode, don't overwrite the output if nothing would change. if cmp t-$progname.1 $output >/dev/null 2>&1; then rm -f t-$progname.1 else mv t-$progname.1 $output fi else mv t-$progname.1 $output fi else echo "WARNING: The man page $output cannot be updated yet." fi gnulib-20210822~d383792/cfg.mk000066400000000000000000000062511411057217300153730ustar00rootroot00000000000000# This file is used via the maint.mk-using rule in Makefile. # This is a gnulib-specific rule to keep non-ascii characters # from creeping into our .texi files. There is nothing inherently # wrong with e.g., UTF-8 characters in texinfo sources, but here, # we had accumulated some non-ascii apostrophes and hyphens, and # they were recently replaced with their ascii analogs. This rule # should help keep things consistent. sc_keep_gnulib_texi_files_mostly_ascii: @prohibit='[^][ a-zA-Z0-9'\''`~!\@#$$%^&*(){}=+";:,./<>?|\_-]' \ in_vc_files='\.texi$$' \ halt='invalid bytes in gnulib .texi file' \ $(_sc_search_regexp) local-checks-to-skip = \ sc_GFDL_version \ sc_GPL_version \ sc_bindtextdomain \ sc_cast_of_alloca_return_value \ sc_cast_of_argument_to_free \ sc_cast_of_x_alloc_return_value \ sc_error_message_period \ sc_error_message_uppercase \ sc_immutable_NEWS \ sc_m4_quote_check \ sc_makefile_TAB_only_indentation \ sc_makefile_at_at_check \ sc_makefile_path_separator_check \ sc_obsolete_symbols \ sc_prohibit_HAVE_MBRTOWC \ sc_prohibit_S_IS_definition \ sc_prohibit_always_true_header_tests \ sc_prohibit_always-defined_macros \ sc_prohibit_atoi_atof \ sc_prohibit_c_ctype_without_use \ sc_prohibit_dirent_without_use \ sc_prohibit_error_without_use \ sc_prohibit_getopt_without_use \ sc_prohibit_have_config_h \ sc_prohibit_inttostr_without_use \ sc_prohibit_magic_number_exit \ sc_prohibit_path_max_allocation \ sc_prohibit_reversed_compare_failure \ sc_prohibit_safe_read_without_use \ sc_prohibit_signal_without_use \ sc_prohibit_stat_st_blocks \ sc_prohibit_stddef_without_use \ sc_prohibit_stdio--_without_use \ sc_prohibit_strcmp \ sc_prohibit_strings_without_use \ sc_prohibit_undesirable_word_seq \ sc_prohibit_xalloc_without_use \ sc_require_config_h \ sc_require_config_h_first \ sc_space_tab \ sc_texinfo_acronym \ sc_two_space_separator_in_usage \ sc_unmarked_diagnostics \ sc_useless_cpp_parens empty-at-EOF = /fr/LC_MESSAGES/test-quotearg\.mo$$|^doc/INSTALL(\.(ISO|UTF-8))? exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \ ^modules/|^lib/javaversion\.class$$|$(empty-at-EOF) exclude_file_name_regexp--sc_prohibit_doubled_word = \ ^(tests/test-init\.sh|lib/base(32|64)\.c)$$ exclude_file_name_regexp--sc_prohibit_openat_without_use = ^lib/selinux-at\.c$$ exclude_file_name_regexp--sc_trailing_blank = \ ^(.*\.class|build-aux/texinfo\.tex|doc/Copyright/assign\.future\.manual)$$ # Disable strncpy prohibition completely, for now. exclude_file_name_regexp--sc_prohibit_strncpy = .* if_before_free_offenders_ = \ clean-temp.c \ csharpcomp.c \ free.c \ fstrcmp.c \ gl_carray_list.c \ glob.c \ glthread/lock.c \ propername.c \ relocatable.c \ vasnprintf.c if_before_free_basename_re_ = \ $(shell printf '%s\n' '$(if_before_free_offenders_)' \ |sed 's|\.c\>||g'|tr -s '[\n[:space:]]' '|') exclude_file_name_regexp--sc_avoid_if_before_free = \ ^lib/($(if_before_free_basename_re_))\.c$$ exclude_file_name_regexp--sc_prohibit_defined_have_decl_tests = \ ^lib/((error|getopt|strtoimax)\.c|(argp-namefrob)\.h)$$ gnulib-20210822~d383792/check-AC_LIBOBJ000077500000000000000000000020701411057217300166030ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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 . # # Check that all AC_LIBOBJ invocations in module descriptions follow the rules. exitcode=0 for module in `./gnulib-tool --list`; do f=modules/$module for g in `sed -n -e 's/^ *AC_LIBOBJ(\[\(.*\)\]).*/\1/p' < $f`; do if grep "^lib/$g\.c\$" $f >/dev/null; then : else echo "$f lacks file lib/$g.c" exitcode=1 fi done done exit $exitcode gnulib-20210822~d383792/check-copyright000077500000000000000000000141561411057217300173170ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This 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 . # # func_file_license # Input: # - file A file name. # Output: # - file_license The license mentioned in the file, # or a token with '??' if unknown. func_file_license () { if head -n 50 $file | grep 'the GNU LGPLv3[+] or the GNU GPLv2[+]' > /dev/null \ || { { head -n 50 $file | grep 'under the terms of either:' > /dev/null; } \ && { head -n 50 $file | grep 'GNU Lesser General Public' > /dev/null; } \ && { head -n 50 $file | grep 'GNU General Public' > /dev/null; } \ && { head -n 50 $file | grep 'either version 3' > /dev/null; } \ && { head -n 50 $file | grep 'either version 2' > /dev/null; }; }; then file_license='LGPLv3+ or GPLv2+' else if head -n 50 $file | grep 'GNU General Public' > /dev/null; then if { head -n 50 $file | grep 'version 3 or later' > /dev/null; } \ || { head -n 50 $file | grep 'either version 3' > /dev/null; }; then file_license='GPL' # an alias for GPLv3+ else if { head -n 50 $file | grep 'version 2 or later' > /dev/null; } \ || { head -n 50 $file | grep 'either version 2' > /dev/null; }; then file_license='GPLv2+' else file_license='GPL??' fi fi else if head -n 50 $file | grep 'Lesser General' > /dev/null; then if { head -n 50 $file | grep 'version 3 or later' > /dev/null; } \ || { head -n 50 $file | grep 'either version 3' > /dev/null; }; then file_license='LGPL' # an alias for LGPLv3+ else if { head -n 50 $file | grep 'version 2 or later' > /dev/null; } \ || { head -n 50 $file | tr -d '\n' | grep 'version 2 of the *. *License, or' > /dev/null; } \ || { head -n 50 $file | tr -d '\n' | grep 'version 2\.1 of the *. *License, or' > /dev/null; }; then file_license='LGPLv2+' else file_license='LGPL??' fi fi else if head -n 50 $file | grep 'unlimited permission to copy and/or distribute' > /dev/null; then file_license='unlimited' else if head -n 50 $file | grep 'This file is in the public domain' > /dev/null; then file_license='public domain' else file_license='??' fi fi fi fi fi } # func_module_license # Input: # - module A module name. # Output: # - module_license The license mentioned in the module. func_module_license () { module_license=`./gnulib-tool --extract-license $module` if test "$module_license" = 'GPLv3+' || test "$module_license" = 'GPLed build tool'; then module_license='GPL' else if test "$module_license" = 'GPLv2+ build tool'; then module_license='GPLv2+' fi fi } # func_weaker_license license1 license2 # Determines the weaker among the licenses license1, license2. # Input: # - license1 A license. # - license2 A license. # Output: # - weaker_license The weaker among the licenses license1, license2. func_weaker_license () { if test "$1" = 'public domain' || test "$2" = 'public domain'; then weaker_license='public domain' else if test "$1" = 'unlimited' || test "$2" = 'unlimited'; then weaker_license='unlimited' else if test "$1" = 'LGPLv2+' || test "$2" = 'LGPLv2+'; then weaker_license='LGPLv2+' else if test "$1" = 'LGPLv3+ or GPLv2+' || test "$2" = 'LGPLv3+ or GPLv2+'; then weaker_license='LGPLv3+ or GPLv2+' else if { test "$1" = 'LGPL' && test "$2" != 'GPLv2+'; } \ || { test "$2" = 'LGPL' && test "$1" != 'GPLv2+'; }; then weaker_license='LGPL' else if { test "$1" = 'GPLv2+' && test "$2" != 'LGPL'; } \ || { test "$2" = 'GPLv2+' && test "$1" != 'LGPL'; }; then weaker_license='GPLv2+' else if test "$1" = "$2"; then weaker_license="$1" else weaker_license='' fi fi fi fi fi fi fi } # Iterate over the modules and collect the mismatch candidates. candidates= for module in `./gnulib-tool --list`; do func_module_license for file in `./gnulib-tool --extract-filelist "$module" | grep '^\(lib\|build-aux\)/'`; do case $file in *.class) # These are binary files, that don't contain a license notice. ;; *) func_file_license if test "$file_license" != "$module_license"; then # This pair (module, file) is a mismatch candidate. case " $candidates " in *" $file "*) ;; *) candidates="$candidates $file" ;; esac fi ;; esac done done # Look at the candidates in more detail. error=0 for file in $candidates; do func_file_license weakest_license= for module in `./gnulib-tool --find "$file"`; do func_module_license if test -z "$weakest_license"; then weakest_license="$module_license" else func_weaker_license "$weakest_license" "$module_license" weakest_license="$weaker_license" fi done if test "$file_license" != "$weakest_license"; then if test $error = 0; then echo "Module License File License File name" echo "================= ============== =====================================" fi printf '%-17s %-14s %s\n' "$weakest_license" "$file_license" "$file" error=1 fi done exit $error gnulib-20210822~d383792/check-module000077500000000000000000000170571411057217300165770ustar00rootroot00000000000000#!/usr/bin/perl -w # Check a gnulib module. # Copyright (C) 2005-2007, 2009-2021 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 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 . # Read a module description file and derive the set of files # included directly by any .c or .h file listed in the 'Files:' section. # Take the union of all such sets for any dependent modules. # Then, compare that set with the set derived from the names # listed in the various Files: sections. # This script makes no attempt to diagnose invalid or empty # module-description files. # Written by Jim Meyering # FIXME: # for each .m4 file listed in the Files: section(s) # parse it for AC_LIBSOURCES directives, and accumulate the set # of files "required" via all AC_LIBSOURCES. # If this set is not empty, ensure that it contains # the same (.c and .h only?) files as are listed in the Files: sections. use strict; use Getopt::Long; use File::Basename; #use Coda; my $COPYRIGHT_NOTICE = "Copyright (C) 2012 Free Software Foundation, Inc.\n". "This is free software. You may redistribute copies of it under the terms of\n". "the GNU General Public License .\n". "There is NO WARRANTY, to the extent permitted by law.\n"; (my $VERSION = '$Revision: 1.8 $ ') =~ tr/[0-9].//cd; (my $ME = $0) =~ s|.*/||; use constant ST_INIT => 1; use constant ST_FILES => 2; use constant ST_DEPENDENTS => 3; # Parse a module file (returning list of Files: names and # list of dependent-modules. # my ($file, $dep) = parse_module_file $module_file; sub parse_module_file ($) { my ($module_file) = @_; open FH, '<', $module_file or die "$ME: can't open '$module_file' for reading: $!\n"; my %file_set; my %dep_set; my $state = ST_INIT; while (defined (my $line = )) { if ($state eq ST_INIT) { if ($line =~ /^Files:$/) { $state = ST_FILES; } elsif ($line =~ /^Depends-on:$/) { $state = ST_DEPENDENTS; } } else { chomp $line; $line =~ s/^\s+//; $line =~ s/\s+$//; if ( ! $line) { $state = ST_INIT; next; } if ($state eq ST_FILES) { $file_set{$line} = 1; } elsif ($state eq ST_DEPENDENTS) { $dep_set{$line} = 1; (my $base = $module_file) =~ s,.*/,,; $line eq $base and die "$ME: module $module_file depends on itself\n"; } } } close FH; # my @t = sort keys %file_set; # print "files: @t\n"; # my @u = sort keys %dep_set; # print "dependents: @u\n"; return (\%file_set, \%dep_set); } # Extract the set of files required for this module, including # those required via dependent modules. # Files: # lib/stat.c # m4/stat.m4 # lib/foo.h # # Depends-on: # some-other-module sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM < 1, 'regex.c' => 1, 'at-func.c' => 1, 'vasnprintf.c' => 1 ); my %dup_include_ok; $dup_include_ok{'vasnprintf.c'}{'isnand-nolibm.h'} = 1; $dup_include_ok{'vasnprintf.c'}{'isnanl-nolibm.h'} = 1; $dup_include_ok{'vasnprintf.c'}{'fpucw.h'} = 1; $dup_include_ok{'gen-uni-tables.c'}{'3level.h'} = 1; $dup_include_ok{'csharpexec.c'}{'classpath.c'} = 1; $dup_include_ok{'csharpexec.c'}{'classpath.h'} = 1; my %inc; open FH, '<', $file or die "$ME: can't open '$file' for reading: $!\n"; while (defined (my $line = )) { # Ignore test-driver code at end of file. $line =~ m!^\#if(def)? TEST_! and last; $line =~ m!^\s*\#\s*include\s+"! or next; $line =~ s///; chomp $line; $line =~ s/".*//; exists $inc{$line} && ! exists $special_non_dup{$line} && ! exists $dup_include_ok{basename $file}{$line} and warn "$ME: $file: duplicate inclusion of $line\n"; $inc{$line} = 1; } close FH; return \%inc; } my %exempt_header = ( # Exempt headers like unlocked-io.h that are '#include'd # but not necessarily used. 'unlocked-io.h' => 1, # Give gettext.h a free pass only when included from lib/error.c, # since we've made that exception solely to make the error # module easier to use -- at RMS's request. 'lib/error.c:gettext.h' => 1, # The full-read module shares code with the full-write module. 'lib/full-write.c:full-read.h' => 1, # The safe-write module shares code with the safe-read module. 'lib/safe-read.c:safe-write.h' => 1, # The use of obstack.h in the hash module is conditional, off by default. 'lib/hash.c:obstack.h' => 1, # C files in the gc module have conditional includes. 'lib/gc-gnulib.c:des.h' => 1, 'lib/gc-gnulib.c:arcfour.h' => 1, 'lib/gc-gnulib.c:arctwo.h' => 1, 'lib/gc-gnulib.c:md2.h' => 1, 'lib/gc-gnulib.c:md4.h' => 1, 'lib/gc-gnulib.c:md5.h' => 1, 'lib/gc-gnulib.c:rijndael.h' => 1, 'lib/gc-gnulib.c:sha1.h' => 1, 'lib/gc-gnulib.c:rijndael-api-fst.h' => 1, 'lib/gc-gnulib.c:hmac.h' => 1, 'lib/gc-libgcrypt.c:md2.h' => 1, ); sub check_module ($) { my @m = @_; my %file; my %module_all_files; my %dep; my %seen_module; while (@m) { my $m = pop @m; # warn "M: $m\n"; exists $seen_module{$m} and next; $seen_module{$m} = 1; my ($file, $dep) = parse_module_file $m; push @m, keys %$dep; foreach my $f (keys %$file) { $module_all_files{$f} = 1; } } my @t = sort keys %module_all_files; # warn "ALL files: @t\n"; # Derive from %module_all_files (by parsing the .c and .h files therein), # the list of all #include'd files that reside in lib/. foreach my $f (keys %module_all_files) { $f =~ /\.[ch]$/ or next; # FIXME: this is too naive my $inc = find_included_lib_files "../$f"; foreach my $i (sort keys %$inc) { my $lib_file = "lib/$i"; exists $exempt_header{"$f:$i"} || exists $exempt_header{$i} and next; !exists $module_all_files{$lib_file} && -f "../lib/$i" and warn "$f: $i is '#include'd, but not " . "listed in module's Files: section\n"; } #my @t = sort keys %$inc; #print "** $f: @t\n"; } } { GetOptions ( help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n$COPYRIGHT_NOTICE"; exit }, ) or usage 1; @ARGV < 1 and (warn "$ME: missing FILE argument\n"), usage 1; foreach my $module (@ARGV) { check_module $module; } exit 0; } gnulib-20210822~d383792/config/000077500000000000000000000000001411057217300155445ustar00rootroot00000000000000gnulib-20210822~d383792/config/argz.mk000066400000000000000000000041451411057217300170440ustar00rootroot00000000000000# Generate argz.c and argz.in.h from glibc sources. glibc_dir = ../glibc glibc_dir = /mirror/d/glibc argz_names = \ append addsep ctsep insert next stringify count \ extract create delete replace argz_files = $(patsubst %, $(glibc_dir)/string/argz-%.c, $(argz_names)) define print-header printf '%s\n' \ "/* Functions for dealing with '\0' separated arg vectors." \ " Copyright (C) 1995-1998, 2000-2002, 2006, 2009-2021 Free Software " Foundation, Inc."\ " This file is part of the GNU C Library." \ "" \ " This 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 2, 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 . */" \ "" \ "#include " \ "" \ "#include " \ "#include " \ "#include " \ "#include " endef targets = argz.c argz.in.h all: $(targets) argz.c: $(argz_files) ($(print-header); \ for i in $^; do \ perl -pe 's/__(argz_|st|mem)/$$1/g' $$i \ | perl -0x0 -pe 's,/\*(.|\n)+?\*/\n,,' \ | grep -vE '^(#include|INTDEF|weak_alias|libc_hidden_def)'; \ done) > $@-t && mv $@-t $@ argz.in.h: $(glibc_dir)/string/argz.h perl -pe 's/__(restrict|const|st|mem)/$$1/g;' \ -e 's/\s*__THROW//;' \ -e 's/\s*__attribute_pure__//;' \ $< \ | perl -ne \ '/^(#include |__(?:BEGIN|END)_DECLS)/ or print' \ | perl -0x3b -pe 's/extern \S+ \*?__argz_(.|\n)*?\)\n*;//' \ | perl -pe 's/__(argz_next)/$$1/g;' \ > $@-t && mv $@-t $@ clean: rm -f $(targets) gnulib-20210822~d383792/config/srclist-update000077500000000000000000000137041411057217300204420ustar00rootroot00000000000000#!/bin/sh # Check for files in directory $1 being up to date, according to the # list on stdin. Don't actually make any changes, just show the diffs. # # Empty (or only whitespace) input lines are ignored. # Lines beginning with # are ignored. # Lines with just one word are ignored. # Otherwise, the line has two or more whitespace-separated words: # the first word is the source directory, which can be a top-level # directory of source archive, # the second word is the source file name relative to the source # directory, and # the third word is the destination, other optional words are # options. # The possible options are "gpl" (to replace the license with the GPL) # and "doclicense" (to replace @include doclicense.texi with fdl.texi) # and "strip-trailing-space" (to strip trailing white space from lines) # and "release" (to use the release version instead of the # development version). # Unrecognized options are ignored. # $VARIABLE expansions are done (with sh eval). # # This script is used in gnulib and texinfo; the input files are named # srclist.txt. # # Copyright (C) 2002-2003, 2005, 2007-2021 Free Software Foundation, Inc. # # This 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 . # Originally written by Karl Berry. if test -n "$1"; then cd "$1" || exit 1 fi verbose=false #chicken="echo (would)" : ${TMPDIR=/tmp} dsttmp=$TMPDIR/srclist.dst # Source `dirname $0`/srclistvars.sh first, if it exists. mydir=`dirname $0` test -r $mydir/srclistvars.sh && . $mydir/srclistvars.sh # # sed command to fix the license to be GPL. fixlicense=' /^[[:space:]]*#[[:space:]]*Th[ei][ s].* is free software/,/^[[:space:]]*#.*USA\./c\ # This 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 . /Th[ei][ s].* is free software/,/\*\//c\ This 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 . */ ' # sed command to remove lines containing $Id lines. # Quote the $ so that CVS does not expand it in this script. remove_id_lines='/[$]Id:.*[$]/d' # $1 is input file, $2 is output. # Remove $Id lines, since they'll differ between source # locations. If $options contains "gpl", change the license to be the # standard GPL. We use this for libc files, et al. # fixfile() \ { sed_command="$remove_id_lines" case " $options " in *' strip-trailing-space '*) sed_command="$sed_command; s/[[:space:]]*\$//";; esac case " $options " in *' gpl '*) sed_command="$sed_command; $fixlicense";; *' doclicense '*) sed_command="$sed_command; s/@include doclicense.texi/@include fdl.texi/";; esac sed "$sed_command" $1 >$2-t && mv $2-t $2 } # cat | while read top src dst options; do #echo "top=$top, src=$src, dst=$dst, options=$options" >&2 case $top:$src:$dst in *: ) continue;; # skip lines without last element '#'* ) continue;; # skip comment-only lines esac release=false case " $options " in *' release '*) release=true ;; esac eval top=$top if $release && test ! -d $top/.git; then echo "$0: 'release' option only works with git checkout" release=false fi # Expand variables and make sure we have an input file. src1=$src eval src=$top/$src if test ! -r $src; then echo "$0: cannot read $src" >&2 continue fi # Ignore subdirs in src dir. E.g., if input spec is # src/subdir/foo.c dst # then write destination file dst/foo.c. eval dst=$dst test -d $dst && dst=$dst/`basename $src` if $release; then rev=$(git --git-dir=$top/.git describe --abbrev=0) reltmp=$TMPDIR/`basename $src1`:$rev git --git-dir=$top/.git show $rev:$src1 > $reltmp fixfile $reltmp $reltmp fi # Fix files in both src and dst, for the sake # of a clean comparison. srctmp=$TMPDIR/`basename $src` fixfile $src $srctmp test -r $dst && fixfile $dst $dsttmp # if src was executable, make dst executable, to placate git. test -x $src && chmod a+x $dst if test ! -e $dst; then echo "## $srctmp $dst # new" $chicken cp -p $srctmp $dst elif $release && cmp -s $reltmp $dsttmp; then $verbose && echo "## $reltmp $dst # unchanged" elif cmp -s $srctmp $dsttmp; then $verbose && echo "## $srctmp $dst # unchanged" else echo "## $srctmp $dst # changes" diff -C 2 $dst $srctmp fi done rm -f $dsttmp gnulib-20210822~d383792/config/srclist.txt000066400000000000000000000167501411057217300200010ustar00rootroot00000000000000# Public domain. # Files for which we are not the source. See ./srclistvars.sh for the # variable definitions. $GNUCONFIG config.guess build-aux $GNUCONFIG config.sub build-aux $AUTOMAKE lib/ar-lib build-aux $AUTOMAKE lib/compile build-aux $AUTOMAKE lib/depcomp build-aux $AUTOMAKE lib/install-sh build-aux $AUTOMAKE lib/mdate-sh build-aux $AUTOMAKE lib/mkinstalldirs build-aux $TEXINFOTEX texinfo.tex build-aux strip-trailing-space # we generate INSTALL from this via a rule in doc/Makefile. $AUTOCONF doc/install.texi doc $GMP mini-gmp/mini-gmp.c lib $GMP mini-gmp/mini-gmp.h lib $GNUSTANDARDS maintain.texi doc strip-trailing-space $GNUSTANDARDS standards.texi doc strip-trailing-space $GNUSTANDARDS make-stds.texi doc $GNUSTANDARDS gnu-oids.texi doc $GNUSTANDARDS fdl.texi doc $GNUWWWLICENSES lgpl-3.0.txt doc/COPYING.LESSERv3 $GNUWWWLICENSES old-licenses/lgpl-2.1.txt doc/COPYING.LESSERv2 $GNUWWWLICENSES gpl-3.0.txt doc/COPYINGv3 $GNUWWWLICENSES old-licenses/gpl-2.0.txt doc/COPYINGv2 $GNUWWWLICENSES old-licenses/lgpl-2.1.texi doc $GNUWWWLICENSES old-licenses/gpl-2.0.texi doc # no longer modified and fails @acronym checks #$GNUWWWLICENSES old-licenses/fdl-1.2.texi doc $GNUWWWLICENSES agpl-3.0.texi doc $GNUWWWLICENSES fdl-1.3.texi doc $GNUWWWLICENSES gpl-3.0.texi doc $GNUWWWLICENSES lgpl-3.0.texi doc # The official forms for contributors to fill out, mentioned in maintain. # We intentionally do not mirror assign.* or disclaim.* files; the # request-* files are sufficient to give the copyright clerk enough # information to tell the candidate of the right procedures to use. $GNUORG conditions.text doc/Copyright $GNUORG Copyright/request-assign.changes doc/Copyright $GNUORG Copyright/request-assign.future doc/Copyright $GNUORG Copyright/request-assign.program doc/Copyright $GNUORG Copyright/request-disclaim.changes doc/Copyright $LIBCSRC include/filename.h lib $LIBCSRC include/idx.h lib #$LIBCSRC malloc/dynarray-skeleton.c lib/malloc #$LIBCSRC malloc/dynarray.h lib/malloc #$LIBCSRC malloc/dynarray_at_failure.c lib/malloc #$LIBCSRC malloc/dynarray_emplace_enlarge.c lib/malloc #$LIBCSRC malloc/dynarray_finalize.c lib/malloc #$LIBCSRC malloc/dynarray_resize.c lib/malloc #$LIBCSRC malloc/dynarray_resize_clear.c lib/malloc $LIBCSRC include/scratch_buffer.h lib/malloc $LIBCSRC malloc/scratch_buffer_dupfree.c lib/malloc $LIBCSRC malloc/scratch_buffer_grow.c lib/malloc $LIBCSRC malloc/scratch_buffer_grow_preserve.c lib/malloc $LIBCSRC malloc/scratch_buffer_set_array_size.c lib/malloc #$LIBCSRC include/intprops.h lib #$LIBCSRC posix/regcomp.c lib $LIBCSRC posix/regex.c lib #$LIBCSRC posix/regex.h lib #$LIBCSRC posix/regex_internal.c lib #$LIBCSRC posix/regex_internal.h lib #$LIBCSRC posix/regexec.c lib #$LIBCSRC stdlib/canonicalize lib/canonicalize-lgpl.c #$LIBCSRC sysdeps/generic/eloop-threshold.h lib $LIBCSRC time/timegm.c lib #$LIBCSRC time/mktime.c lib $LIBCSRC time/mktime-internal.h lib # # All below here commented out in forlorn hope of future syncs. # new argp not in glibc yet --13feb06. #$LIBCSRC argp/argp-ba.c lib gpl #$LIBCSRC argp/argp-eexst.c lib gpl #$LIBCSRC argp/argp-fmtstream.c lib gpl #$LIBCSRC argp/argp-fmtstream.h lib gpl #$LIBCSRC argp/argp-fs-xinl.c lib gpl #$LIBCSRC argp/argp-help.c lib gpl #$LIBCSRC argp/argp-namefrob.h lib gpl #$LIBCSRC argp/argp-parse.c lib gpl #$LIBCSRC argp/argp-pv.c lib gpl #$LIBCSRC argp/argp-pvh.c lib gpl #$LIBCSRC argp/argp-xinl.c lib gpl #$LIBCSRC argp/argp.h lib gpl #$LIBCSRC misc/sys/cdefs.h lib #$LIBCSRC stdlib/getsubopt.c lib gpl #$LIBCSRC posix/getopt.c lib gpl #$LIBCSRC posix/getopt.h lib gpl (getopt.in.h in gnulib) #$LIBCSRC posix/getopt1.c lib gpl #$LIBCSRC posix/getopt_int.h lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=1293 #$LIBCSRC libidn/iconvme.h lib gpl #$LIBCSRC libidn/iconvme.c lib gpl # c89 changes $LIBCSRC/string/strdup.c lib gpl #tab changes $LIBCSRC/stdlib/strtoll.c lib gpl #tab changes $LIBCSRC/stdlib/strtoul.c lib gpl # (no more strtok_r.h) $LIBCSRC/string/strtok_r.c lib gpl # (gnulib needs config.h?) $LIBCSRC/string/memmem.c lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=1439 #$LIBCSRC crypt/md5.c lib gpl #$LIBCSRC crypt/md5.h lib gpl # These are close, but ... #$LIBCSRC locale/programs/xmalloc.c lib gpl #$LIBCSRC locale/programs/xstrdup.c lib gpl # #$LIBCSRC login/forkpty.c lib gpl #$LIBCSRC login/programs/pt_chown.c lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=321 #$LIBCSRC malloc/obstack.c lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=321 #$LIBCSRC malloc/obstack.h lib gpl #$LIBCSRC misc/error.c lib gpl #$LIBCSRC misc/error.h lib gpl #$LIBCSRC misc/getpass.c lib gpl #$LIBCSRC misc/mkstemp.c lib gpl #$LIBCSRC posix/fnmatch.c lib gpl #$LIBCSRC posix/fnmatch.h lib gpl (fnmatch.in.h in gnulib) #$LIBCSRC posix/fnmatch_loop.c lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=1060 # https://sourceware.org/bugzilla/show_bug.cgi?id=1062 #$LIBCSRC posix/glob.c lib gpl # # https://sourceware.org/bugzilla/show_bug.cgi?id=1060 #$LIBCSRC posix/glob.h lib gpl (glob-libc.h in gnulib) # #$LIBCSRC stdlib/putenv.c lib gpl #$LIBCSRC stdlib/random.c lib gpl #$LIBCSRC stdlib/random_r.c lib gpl #$LIBCSRC stdlib/rpmatch.c lib gpl #$LIBCSRC stdlib/strtol.c lib gpl #$LIBCSRC string/strndup.c lib gpl #$LIBCSRC string/strverscmp.c lib gpl # #$LIBCSRC string/memchr.c lib gpl #$LIBCSRC string/memcmp.c lib gpl #$LIBCSRC string/memrchr.c lib gpl #$LIBCSRC string/stpcpy.c lib gpl #$LIBCSRC string/stpncpy.c lib gpl #$LIBCSRC string/strcspn.c lib gpl #$LIBCSRC string/strpbrk.c lib gpl #$LIBCSRC string/strstr.c lib gpl #$LIBCSRC sysdeps/generic/pty-private.h lib gpl #$LIBCSRC sysdeps/ieee754/ieee754.h lib gpl (ieee754.in.h in gnulib) #$LIBCSRC sysdeps/posix/dup2.c lib gpl #$LIBCSRC sysdeps/posix/euidaccess.c lib gpl #$LIBCSRC sysdeps/posix/tempname.c lib gpl #$LIBCSRC sysdeps/unix/bsd/unlockpt.c lib gpl #$LIBCSRC sysdeps/unix/dirfd.c lib gpl #$LIBCSRC sysdeps/unix/grantpt.c lib gpl #$LIBCSRC sysdeps/unix/rmdir.c lib gpl (nstrftime.c in gnulib) #$LIBCSRC time/strftime.c lib gpl # These are close, but we are using the gettext versions. #$LIBCSRC misc/mkdtemp.c lib gpl #$LIBCSRC stdlib/setenv.c lib gpl (setenv.c, unsetenv.c) # # These implementations are quite different. #$LIBCSRC io/lstat.c lib gpl #$LIBCSRC libio/__fpending.c lib gpl #$LIBCSRC malloc/malloc.c lib gpl #$LIBCSRC misc/dirname.c lib gpl #$LIBCSRC misc/getusershell.c lib gpl #$LIBCSRC stdio-common/getline.c lib gpl #$LIBCSRC stdlib/atexit.c lib gpl #$LIBCSRC stdlib/exit.h lib gpl #$LIBCSRC stdlib/strtod.c lib gpl #$LIBCSRC stdlib/strtoimax.c lib gpl #$LIBCSRC stdlib/strtoull.c lib gpl #$LIBCSRC stdlib/strtoumax.c lib gpl #$LIBCSRC string/basename.c lib gpl #$LIBCSRC string/bcopy.c lib gpl #$LIBCSRC string/memcpy.c lib gpl #$LIBCSRC string/memmove.c lib gpl #$LIBCSRC string/memset.c lib gpl #$LIBCSRC string/strcasecmp.c lib gpl #$LIBCSRC string/strchrnul.c lib gpl #$LIBCSRC string/strerror.c lib gpl #$LIBCSRC string/strnlen.c lib gpl #$LIBCSRC sysdeps/posix/gettimeofday.c lib gpl #$LIBCSRC sysdeps/posix/rename.c lib gpl #$LIBCSRC sysdeps/unix/mkdir.c lib gpl #$LIBCSRC sysdeps/unix/sysv/gethostname.c lib gpl #$LIBCSRC sysdeps/unix/utime.c lib gpl $LIBGCRYPT src/libgcrypt.m4 m4 # Now derived from concatenation of separate .c files in glibc. # See argz.mk for details. #$LIBTOOL libltdl/argz.c lib gpl #$LIBTOOL libltdl/argz_.h lib gpl #$LIBTOOL libltdl/m4/argz.m4 m4 gnulib-20210822~d383792/config/srclistvars.sh000077500000000000000000000025501411057217300204640ustar00rootroot00000000000000# Variables for srclist-update and srclist.txt. # Will likely change for each user. # Copyright 2002-2021 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 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 . # per-user overrides. case $LOGNAME in karl) : ${GNUORG=$HOME/gnu/gnuorg} : ${GNUWWWLICENSES=$HOME/gnu/www/www/licenses} ;; esac # Default to sibling (of parent) directories. : ${AUTOCONF=../autoconf} : ${AUTOMAKE=../automake} : ${GMP=../gmp} # https://gmplib.org/devel/repo-usage -> hg pull -u : ${GNUCONFIG=../config} : ${GNULIBSRC=../gnulib} : ${GNUORG=../gnuorg} : ${GNUSTANDARDS=../gnustandards} : ${GNUWWWLICENSES=../www/www/licenses} : ${LIBCSRC=../libc} : ${LIBGCRYPT=../libgcrypt} # https://dev.gnupg.org/source/libgcrypt.git : ${LIBTOOL=../libtool} : ${TEXINFOTEX=../../ftp.gnu.org/gnu/texinfo} gnulib-20210822~d383792/doc/000077500000000000000000000000001411057217300150445ustar00rootroot00000000000000gnulib-20210822~d383792/doc/.cvsignore000066400000000000000000000000551411057217300170440ustar00rootroot00000000000000gnulib.?? gnulib.??? gnulib.info gnulib.html gnulib-20210822~d383792/doc/.gitignore000066400000000000000000000004301411057217300170310ustar00rootroot00000000000000gnulib.aux gnulib.cn gnulib.cp gnulib.cps gnulib.dvi gnulib.fn gnulib.ky gnulib.log gnulib.pg gnulib.toc gnulib.tp gnulib.vr gnulib.vrs gnulib.info gnulib.info-1 gnulib.info-2 gnulib.info-3 gnulib.info-4 gnulib.info-5 gnulib.info-6 gnulib.html gnulib.pdf regex.info updated-stamp gnulib-20210822~d383792/doc/COPYING.LESSERv2000066400000000000000000000636421411057217300173560ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This 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. This 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 this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! gnulib-20210822~d383792/doc/COPYING.LESSERv3000066400000000000000000000167441411057217300173600ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. gnulib-20210822~d383792/doc/COPYINGv2000066400000000000000000000432541411057217300163570ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. gnulib-20210822~d383792/doc/COPYINGv3000066400000000000000000001045151411057217300163560ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnulib-20210822~d383792/doc/Copyright/000077500000000000000000000000001411057217300170145ustar00rootroot00000000000000gnulib-20210822~d383792/doc/Copyright/conditions.text000066400000000000000000000144601411057217300221000ustar00rootroot00000000000000Legal Issues about Contributing Code to GNU last updated 14 July 2015 Project GNU has to be careful to obey copyright laws, even though these laws are wrong when they stop people from sharing generally useful published information such as software, because we are in the public eye. We also use copyright to defend users' freedom, by means of copyleft (though this does not excuse copyright law for helping to make software proprietary). This means that if you want to contribute software to GNU, you have to do something to give us legal permission to use it. There are three ways this can be done: * Assign the copyright to the Free Software Foundation. This allows the FSF to act to stop violations of the GPL. * Keep the copyright and release the program yourself under the GNU GPL. (This alternative is too impractical for contributions to a preexisting FSF-copyrighted GNU program.) * Put the code in the public domain. Then there is nothing to stop hoarding of modified versions, but we can still use the program in GNU. Most of these alternatives require a signed piece of paper, or in some cases a digital signature, to make it happen. * Assigning copyright. Assigning the copyright means signing a contract that makes the Free Software Foundation the "owner" of the program according to the law. As the copyright holder, the Foundation can sue anyone who tries to distribute the program as a proprietary product. We are willing to keep your name on the program as the author for as long as the program remains recognizably distinct. ("Owner" is in quotes to show that we don't really believe in this kind of ownership.) The assignment contract commits the foundation to setting distribution terms that permit free redistribution. Often we don't want to do the work of starting to distribute a program right away. There are many things which we will need in order to have a complete system but which aren't really useful until the rest of the system is done. But signing the assignment does not stop you from distributing the program yourself--as long as you do so under the GNU terms. You don't have to wait for us to start distributing. You can start distributing as soon as you attach our standard copyleft to the files. (Ask for our advice on how to do this.) The assignment contract we normally use has a clause that permits you to use your code in proprietary programs, on 30 days' notice. (The 30 days' notice is there because, through a legal technicality, it would improve our position in a suit against a hoarder.) Although we believe that proprietary software is wrong, we include this clause because it would serve no purpose to ask you to promise not to do it. You're giving us a gift in the first place. You don't need to invoke this clause in order to distribute copies as free software under the GNU GPL, since everyone is allowed to do that. * Releasing it yourself. You can release a program yourself under copyleft distribution terms such as the GNU GPL. (In order to accept the program as GNU software, we would have to be happy with your choice of terms.) This does not require a contract between you and the FSF, but we would appreciate having a signed piece of paper to confirm your decision. If someone violates your terms--for example, if someone gets a copy from us, and uses it as a basis for a proprietary product in violation of the terms--we cannot sue him. You would have to sue, or he gets away with it. * Public domain. If you put the program in the public domain, we prefer to have a signed piece of paper--a disclaimer of rights--from you confirming this. If the program is not very important, we can do without one; the worst that could happen is that we might some day be forced to stop using it. The law says that anyone can copyright a modified version of the public domain work. (This doesn't restrict the original, which remains in the public domain; only the changes are copyrighted.) If we make extensive changes, we will probably do this and add our usual copyleft. If we make small changes, we will leave the version we distribute in the public domain. * What about your employer? If you are employed to do programming, or have made an agreement with your employer that says it owns programs you write, we need a signed piece of paper from your employer disclaiming rights to the program. It should be signed by a vice president or general manager of the company. If you can't get at them, it is almost as good to find someone who signs licenses for software that is purchased. Here is a sample wording: Digital Simulation Corporation hereby disclaims all copyright interest in the program "sample.el" (a program to direct assemblers to make passes at compilers under GNU Emacs) written by Hugh Hacker. , 1 April 1987 Mo Ghoul, President of Vice, Digital Simulation Corp. The description of what the program does is just to make it clearer what the disclaimer covers. If what you did was change an existing program, it should say this: ...in the changes and enhancements made by Hugh Hacker to the program "sample.el". * Did anyone else contribute? If someone else contributed more than a few lines here or there to the program, then that person too is an author, and that person too needs to sign papers just as you do. So may that person's employer. However, if his contribution is just a fraction of the whole work, it is satisfactory if he disclaims his own rights, even if you are assigning yours. (If just the minor contributors' work goes in the public domain, that doesn't leave much of a loophole for hoarders.) If you incorporated packages which you found floating around as "public domain", we might still want to track down their authors, to get disclaimers to reassure us that they really are in the public domain. So keep track of what these packages are and who wrote them. * A reminder: In working on a project for GNU, DO NOT study and follow any Unix sources or other non-free software that might have any bearing on the project. Don't refer to them at all, unless you are forced to for non-GNU reasons. It is not considered a serious problem if you have read Unix sources or other non-free source code in the past for other purposes, provided you don't copy anything in particular from them. However, referring to them while you do the work could cause us legal problems later. gnulib-20210822~d383792/doc/Copyright/request-assign.changes000066400000000000000000000021331411057217300233170ustar00rootroot00000000000000Please email the following information to assign@gnu.org, and we will send you the assignment form that covers the changes you have already written. That form will cover subsequent corrections to those changes, but it will not cover other unrelated future changes to the same program. Please use your full legal name (in ASCII characters) as the subject line of the message. --------------------------------------------------------------------- REQUEST: SEND FORM FOR CHANGES ALREADY MADE [What is the name of the program or package you're contributing to?] [Did you copy any files or text written by someone else in these changes? Even if that material is free software, we need to know about it.] [Do you have an employer who might have a basis to claim to own your changes? Do you attend a school which might make such a claim?] [For the copyright registration, what country are you a citizen of?] [What year were you born?] [Please write your email address here.] [Please write your postal address here.] [Which files have you changed so far, and which new files have you written so far?] gnulib-20210822~d383792/doc/Copyright/request-assign.future000066400000000000000000000017051411057217300232250ustar00rootroot00000000000000Please email the following information to assign@gnu.org, and we will send you the assignment form for your past and future changes. Please use your full legal name (in ASCII characters) as the subject line of the message. ---------------------------------------------------------------------- REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES [What is the name of the program or package you're contributing to?] [Did you copy any files or text written by someone else in these changes? Even if that material is free software, we need to know about it.] [Do you have an employer who might have a basis to claim to own your changes? Do you attend a school which might make such a claim?] [For the copyright registration, what country are you a citizen of?] [What year were you born?] [Please write your email address here.] [Please write your postal address here.] [Which files have you changed so far, and which new files have you written so far?] gnulib-20210822~d383792/doc/Copyright/request-assign.program000066400000000000000000000014331411057217300233600ustar00rootroot00000000000000Please email the following information to fsf-records@gnu.org, and we will send you the assignment form that covers your program. Please use your full legal name (in ASCII characters) as the subject line of the message. [What is the name of the program or package you're contributing?] [Will this become part of a larger GNU package? If so, what package?] [Did you copy any files or text written by someone else into the program? Even if that material is free software, we need to know about it.] [Do you have an employer who might have a basis to claim to own your changes? Do you attend a school which might make such a claim?] [What country are you a citizen of?] [What year were you born?] [Please write your email address here.] [Please write your postal address here.] gnulib-20210822~d383792/doc/Copyright/request-disclaim.changes000066400000000000000000000024511411057217300236230ustar00rootroot00000000000000Please email the following information to assign@gnu.org, and we will send you the disclaimer form for your changes. This form is preferred when your changes are small, they do not add any nontrivial new files, and you are finished making them (aside perhaps from small bug fixes). If you would like to make further contributions to the same package, and you would like to avoid the need to sign more papers when you contribute them, you have another option: to sign a copyright assignment covering your future changes. If that is what you want to do, please tell the maintainer you would prefer to sign an assignment of past and future changes. Please use your full legal name (in ASCII characters) as the subject line of the message. ----------------------------------------------------------------------- REQUEST: SEND DISCLAIMER FORM [What is the name of the program or package you're contributing to?] [Did you copy any files or text written by someone else in these changes? Even if that material is free software, we need to know about it.] [Do you have an employer who might have a basis to claim to own your changes?] [Please write your email address here.] [Please write your snail address here.] [Please list the files involved, or give a brief description of the changes being disclaimed.] gnulib-20210822~d383792/doc/INSTALL000066400000000000000000000366261411057217300161120ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. gnulib-20210822~d383792/doc/INSTALL.ISO000066400000000000000000000366261411057217300165430ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. gnulib-20210822~d383792/doc/INSTALL.UTF-8000066400000000000000000000366261411057217300167140ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. gnulib-20210822~d383792/doc/Makefile000066400000000000000000000052761411057217300165160ustar00rootroot00000000000000# Makefile for gnulib doc. -*- coding: utf-8 -*- # Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. doc = gnulib lang_env = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= makeinfo_prog = makeinfo MAKEINFO = $(lang_env) $(makeinfo_prog) manual_opts = --no-split --reference-limit=2000 TEXI2HTML = $(MAKEINFO) $(manual_opts) --html # Needed so that tex finds a recent enough texinfo.tex. tex_opts = -I ../build-aux %.info: %.texi $(MAKEINFO) $(manual_opts) $< %.html: %.texi $(TEXI2HTML) -o $@ $< %.dvi: %.texi texi2dvi $(tex_opts) $< || { if texi2dvi $(tex_opts) $< 2>/dev/null | grep 'TeX capacity exceeded, sorry \[save size=' > /dev/null; then echo '*** You must increase the save_size in your texmf.cnf file, often located under /etc/texmf/.'; fi; exit 1; } %.pdf: %.texi texi2pdf $(tex_opts) $< || { if texi2pdf $(tex_opts) $< 2>/dev/null | grep 'TeX capacity exceeded, sorry \[save size=' > /dev/null; then echo '*** You must increase the save_size in your texmf.cnf file, often located under /etc/texmf/.'; fi; exit 1; } all: info html dvi info: $(doc).info html: $(doc).html dvi: $(doc).dvi pdf: $(doc).pdf INSTALL_PRELUDE = echo '@firstparagraphindent insert' OMIT_TRAILING_EMPTY_LINES = /^$$/H; /^$$/d; x; s/\n//p; s/\n*//; x # INSTALL file with directed ASCII quotation marks. INSTALL: install.texi $(INSTALL_PRELUDE) | cat - $< > tmp.texi $(MAKEINFO) --plaintext --no-validate tmp.texi \ | sed -e '$(OMIT_TRAILING_EMPTY_LINES)' > $@ rm -f tmp.texi # INSTALL file with ISO 646 or ISO 8859 quotation marks. INSTALL.ISO: INSTALL sed -e "s/\`\([^']*\)'/'\1'/g" $< > $@ # INSTALL file with ISO 10646 (Unicode) quotation marks. INSTALL.UTF-8: INSTALL sed -e "s/\`\([^']*\)'/‘\1’/g" $< > $@ GNULIB_TEXI_FILES = $(filter-out maintain.texi make-stds.texi standards.texi,$(wildcard *.texi)) $(wildcard posix-headers/*.texi) $(wildcard posix-functions/*.texi) $(wildcard glibc-headers/*.texi) $(wildcard glibc-functions/*.texi) NEWEST_GNULIB_TEXI_FILE = $(shell ls -t $(GNULIB_TEXI_FILES) | sed 1q) # Date of last update. Requires GNU date. updated-stamp: $(GNULIB_TEXI_FILES) date -u -r $(NEWEST_GNULIB_TEXI_FILE) +"@set UPDATED %F %T" > $@ # Dependencies. Search for @include to find them all. gnulib.info gnulib.html gnulib.dvi gnulib.pdf: $(GNULIB_TEXI_FILES) updated-stamp standards.info standards.html standards.dvi: standards.texi make-stds.texi fdl.texi mostlyclean: rm -f *.aux *.cn *.cp *.cps *.fn *.ky *.log *.pg *.toc *.tp *.vr *.vrs rm -f updated-stamp clean: mostlyclean rm -f *.info *.html *.dvi *.ps *.pdf gnulib-20210822~d383792/doc/README000066400000000000000000000034231411057217300157260ustar00rootroot00000000000000Misc notes ---------- regexprops-generic.texi is generated via a utility in findutils. How to update gnulib manual on www.gnu.org ------------------------------------------ 1) You need a non-anonymous checkout of the web pages directory. $ cvs -d :ext:jas@cvs.savannah.gnu.org:/web/gnulib \ checkout gnulib 2) Get familiar with the instructions for web page maintainers. https://www.gnu.org/server/standards/readme_index.html https://www.gnu.org/server/standards/README.software.html especially the note about symlinks. 3) Assuming GNULIB_CHECKOUT refers to a checkout of the gnulib dir, and GNULIB_WWW_CHECKOUT refers to the other directory created above (1), do GNULIB_WWW_CHECKOUT=`cd $GNULIB_WWW_CHECKOUT && pwd` cd $GNULIB_WWW_CHECKOUT tar -cf html-CVS.tar manual/html_node/CVS manual/html_node/.symlinks cd $GNULIB_CHECKOUT/doc make updated-stamp ../build-aux/gendocs.sh \ -I ../build-aux \ --email bug-gnulib@gnu.org \ -o "$GNULIB_WWW_CHECKOUT/manual" \ gnulib "The GNU Portability Library" cd $GNULIB_WWW_CHECKOUT tar -xf html-CVS.tar rm html-CVS.tar Run 'cvs diff -u' and verify that the output looks sane. 4) Commit the modified and the new files. 5) Find the files which have not been overwritten (because they belonged to sections that have been removed or renamed): $ cd manual/html_node $ ls -lt Remove these files and commit their removal to CVS. For each of these files, add a line to the file .symlinks. This will ensure that hyperlinks to the removed files will redirect to the entire manual; this is better than a 404 error. There is a problem with 'index.html' being written twice (once for POSIX function 'index', once for the table of contents); you can ignore this issue. gnulib-20210822~d383792/doc/acl-cygwin.txt000066400000000000000000000116041411057217300176440ustar00rootroot00000000000000$ getfacl --help Usage: getfacl [-adn] FILE [FILE2...] Display file and directory access control lists (ACLs). -a, --all display the filename, the owner, the group, and the ACL of the file -d, --dir display the filename, the owner, the group, and the default ACL of the directory, if it exists -h, --help output usage information and exit -n, --noname display user and group IDs instead of names -v, --version output version information and exit When multiple files are specified on the command line, a blank line separates the ACLs for each file. For each argument that is a regular file, special file or directory, getfacl displays the owner, the group, and the ACL. For directories getfacl displays additionally the default ACL. With no options specified, getfacl displays the filename, the owner, the group, and both the ACL and the default ACL, if it exists. The format for ACL output is as follows: # file: filename # owner: name or uid # group: name or uid user::perm user:name or uid:perm group::perm group:name or gid:perm mask:perm other:perm default:user::perm default:user:name or uid:perm default:group::perm default:group:name or gid:perm default:mask:perm default:other:perm $ setfacl --help Usage: setfacl [-r] (-f ACL_FILE | -s acl_entries) FILE... setfacl [-r] ([-d acl_entries] [-m acl_entries]) FILE... Modify file and directory access control lists (ACLs) -d, --delete delete one or more specified ACL entries -f, --file set ACL entries for FILE to ACL entries read from a ACL_FILE -m, --modify modify one or more specified ACL entries -r, --replace replace mask entry with maximum permissions needed for the file group class -s, --substitute substitute specified ACL entries for the ACL of FILE -h, --help output usage information and exit -v, --version output version information and exit At least one of (-d, -f, -m, -s) must be specified Acl_entries are one or more comma-separated ACL entries from the following list: u[ser]::perm u[ser]:uid:perm g[roup]::perm g[roup]:gid:perm m[ask]:perm o[ther]:perm Default entries are like the above with the additional default identifier. For example: d[efault]:u[ser]:uid:perm 'perm' is either a 3-char permissions string in the form "rwx" with the character - for no permission or it is the octal representation of the permissions, a value from 0 (equivalent to "---") to 7 ("rwx"). 'uid' is a user name or a numerical uid. 'gid' is a group name or a numerical gid. For each file given as parameter, setfacl will either replace its complete ACL (-s, -f), or it will add, modify, or delete ACL entries. The following options are supported: -d Delete one or more specified entries from the file's ACL. The owner, group and others entries must not be deleted. Acl_entries to be deleted should be specified without permissions, as in the following list: u[ser]:uid g[roup]:gid d[efault]:u[ser]:uid d[efault]:g[roup]:gid d[efault]:m[ask]: d[efault]:o[ther]: -f Take the Acl_entries from ACL_FILE one per line. Whitespace characters are ignored, and the character "#" may be used to start a comment. The special filename "-" indicates reading from stdin. Required entries are - One user entry for the owner of the file. - One group entry for the group of the file. - One other entry. If additional user and group entries are given: - A mask entry for the file group class of the file. - No duplicate user or group entries with the same uid/gid. If it is a directory: - One default user entry for the owner of the file. - One default group entry for the group of the file. - One default mask entry for the file group class. - One default other entry. -m Add or modify one or more specified ACL entries. Acl_entries is a comma-separated list of entries from the same list as above. -r Causes the permissions specified in the mask entry to be ignored and replaced by the maximum permissions needed for the file group class. -s Like -f, but substitute the file's ACL with Acl_entries specified in a comma-separated list on the command line. While the -d and -m options may be used in the same command, the -f and -s options may be used only exclusively. Directories may contain default ACL entries. Files created in a directory that contains default ACL entries will have permissions according to the combination of the current umask, the explicit permissions requested and the default ACL entries Note: Under Cygwin, the default ACL entries are not taken into account currently. gnulib-20210822~d383792/doc/acl-resources.txt000066400000000000000000000257041411057217300203640ustar00rootroot00000000000000General introduction: http://www.suse.de/~agruen/acl/linux-acls/online/ POSIX ACLs Documents from POSIX.1e (headers & functions) and POSIX.2c (utilities): http://wt.tuxomania.net/publications/posix.1e/download.html Linux ACLs Introduction: http://www.suse.de/~agruen/acl/linux-acls/online/ Hands-on tutorial: http://www.vanemery.com/Linux/ACL/linux-acl.html Manual pages: https://www.kernel.org/doc/man-pages/ Includes: Library: -lacl Functions: acl_add_perm acl_calc_mask acl_check acl_clear_perms acl_cmp acl_copy_entry acl_copy_ext acl_copy_int acl_create_entry acl_delete_def_file acl_delete_entry acl_delete_perm acl_dup acl_entries acl_equiv_mode acl_error acl_extended_fd acl_extended_file acl_free acl_from_mode acl_from_text acl_get_entry acl_get_fd acl_get_file acl_get_perm acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set_fd acl_set_file acl_set_permset acl_set_qualifier acl_set_tag_type acl_size acl_to_any_text acl_to_text acl_valid Utilities: getfacl setfacl Solaris ACLs Introductions: http://www.softpanorama.org/Solaris/ACL/index.shtml https://www.cs.duke.edu/csl/faqs/solaris-acls.php Manual pages: https://docs.oracle.com/cd/E23823_01/html/816-5167/acl-2.html https://docs.oracle.com/cd/E23823_01/html/816-5165/getfacl-1.html https://docs.oracle.com/cd/E23823_01/html/816-5165/setfacl-1.html https://docs.oracle.com/cd/E23823_01/html/816-5167/pathconf-2.html Includes: Library: -lsec Functions: acl facl Functions in libsec: aclcheck aclfrommode aclfromtext aclsort acltomode acltotext Additionally in Solaris 10 patch 118833-17 ( version 1.15): acl_t type ACL_NO_TRIVIAL macro ACE_OTHER macro replaced with ACE_EVERYONE macro ACE_OWNER, ACE_GROUP changed their values(!) ALLOW, DENY macros removed(!) acl_check acl_free acl_fromtext acl_get acl_set acl_strip acl_totext acl_trivial facl_get facl_set Utilities: getfacl setfacl chmod FreeBSD ACLs Introduction: https://www.freebsd.org/doc/en/books/handbook/fs-acl.html http://www.onlamp.com/pub/a/bsd/2005/09/22/FreeBSD_Basics.html Manual pages: https://www.freebsd.org/cgi/man.cgi https://www.freebsd.org/cgi/man.cgi?query=acl&apropos=0&sektion=0&manpath=FreeBSD+7.0-RELEASE&format=html Includes: Library: none needed Functions: acl_add_perm acl_calc_mask acl_clear_perms acl_copy_entry acl_copy_ext acl_copy_int acl_create_entry acl_delete_entry acl_delete_fd_np acl_delete_file_np acl_delete_link_np acl_delete_def_file acl_delete_def_link_np acl_delete_perm acl_dup acl_free acl_from_text acl_get acl_get_entry acl_get_fd acl_get_fd_np acl_get_file acl_get_link_np acl_get_perm_np acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set acl_set_fd acl_set_fd_np acl_set_file acl_set_link_np acl_set_permset acl_set_qualifier acl_set_tag_type acl_size acl_to_text acl_valid acl_valid_fd_np acl_valid_file_np acl_valid_link_np Utilities: getfacl setfacl NetBSD ACLs Not available. OpenBSD ACLs Not available. Mac OS X ACLs Manual pages: https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/acl.3.html Includes: Library: none needed Functions: acl_add_flag_np acl_add_perm acl_calc_mask acl_clear_flags_np acl_clear_perms acl_copy_entry acl_copy_ext acl_copy_ext_native acl_copy_int acl_copy_int_native acl_create_entry acl_create_entry_np acl_delete_def_file acl_delete_fd_np (undeclared?) acl_delete_file_np (undeclared?) acl_delete_flag_np acl_delete_link_np (undeclared?) acl_delete_entry acl_delete_perm acl_dup acl_free acl_from_text acl_get_entry acl_get_fd acl_get_fd_np acl_get_file acl_get_flag_np acl_get_flagset_np acl_get_link_np acl_get_perm_np acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set_fd acl_set_fd_np acl_set_file acl_set_flagset_np acl_set_link_np acl_set_permset acl_set_qualifier acl_set_tag_type acl_size acl_to_text acl_valid acl_valid_fd_np acl_valid_file_np acl_valid_link_np Utilities: chmod HP-UX 11.00 ACLs Present in HP-UX >= 11.00. On some machines, yields ENOSYS always. Manual pages: getacl, fgetacl: https://nixdoc.net/man-pages/hp-ux/man2/getacl.2.html setacl, fsetacl: https://nixdoc.net/man-pages/hp-ux/man2/setacl.2.html lsacl: https://nixdoc.net/man-pages/hp-ux/man1/lsacl.1.html chacl: https://nixdoc.net/man-pages/hp-ux/man1/chacl.1.html Includes: or Library: none needed Functions: getacl fgetacl fsetacl setacl Utilities: lsacl chacl chmod HP-UX 11.11 ACLs Present in HP-UX >= 11.11. Manual pages: acl: https://nixdoc.net/man-pages/hp-ux/man2/acl.2.html aclsort: https://docstore.mik.ua/manuals/hp-ux/en/B2355-60130/aclsort.3C.html? getacl: https://nixdoc.net/man-pages/hp-ux/man1/getacl.1.html setacl: https://nixdoc.net/man-pages/hp-ux/man1/setacl.1.html Includes: Library: none needed Functions: acl aclsort Utilities: getacl setacl IRIX ACLs Manual pages: http://techpubs.sgi.com/library/tpl/cgi-bin/browse.cgi?cmd=search&db=man&srch=acl&coll=0650&range=0,133 http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=man&fname=/usr/share/catman/p_man/cat4/acl.z Includes: Library: none needed Functions: acl_add_perm acl_calc_mask acl_clear_perms acl_copy_entry acl_copy_ext acl_copy_int acl_create_entry acl_delete_def_file acl_delete_entry acl_delete_perm acl_dup acl_free acl_from_text acl_get_entry acl_get_fd acl_get_file acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set_fd acl_set_file acl_set_permset acl_set_qualifier acl_set_tag_type acl_size acl_to_short_text acl_to_text acl_valid Utilities: chacl Tru64 ACLs Manual pages: https://backdrift.org/man/tru64/man4/acl.4.html https://backdrift.org/man/tru64/man3/acl_add_perm.3.html https://backdrift.org/man/tru64/man3/acl_clear_perm.3.html https://backdrift.org/man/tru64/man3/acl_copy_entry.3.html https://backdrift.org/man/tru64/man3/acl_copy_ext.3.html https://backdrift.org/man/tru64/man3/acl_copy_int.3.html https://backdrift.org/man/tru64/man3/acl_create_entry.3.html https://backdrift.org/man/tru64/man3/acl_delete_def_fd.3.html https://backdrift.org/man/tru64/man3/acl_delete_def_file.3.html https://backdrift.org/man/tru64/man3/acl_delete_entry.3.html https://backdrift.org/man/tru64/man3/acl_delete_perm.3.html https://backdrift.org/man/tru64/man3/acl_dup.3.html https://backdrift.org/man/tru64/man3/acl_first_entry.3.html https://backdrift.org/man/tru64/man3/acl_free.3.html https://backdrift.org/man/tru64/man3/acl_free_qualifier.3.html https://backdrift.org/man/tru64/man3/acl_free_text.3.html https://backdrift.org/man/tru64/man3/acl_from_text.3.html https://backdrift.org/man/tru64/man3/acl_get_entry.3.html https://backdrift.org/man/tru64/man3/acl_get_fd.3.html https://backdrift.org/man/tru64/man3/acl_get_file.3.html https://backdrift.org/man/tru64/man3/acl_get_permset.3.html https://backdrift.org/man/tru64/man3/acl_get_qualifier.3.html https://backdrift.org/man/tru64/man3/acl_get_tag_type.3.html https://backdrift.org/man/tru64/man3/acl_init.3.html https://backdrift.org/man/tru64/man3/acl_set_fd.3.html https://backdrift.org/man/tru64/man3/acl_set_file.3.html https://backdrift.org/man/tru64/man3/acl_set_permset.3.html https://backdrift.org/man/tru64/man3/acl_set_qualifier.3.html https://backdrift.org/man/tru64/man3/acl_set_tag_type.3.html https://backdrift.org/man/tru64/man3/acl_size.3.html https://backdrift.org/man/tru64/man3/acl_to_text.3.html https://backdrift.org/man/tru64/man3/acl_valid.3.html Includes: Library: -lpacl Functions: acl_add_perm acl_clear_perm acl_copy_entry acl_copy_ext acl_copy_int acl_create_entry acl_delete_def_fd acl_delete_def_file acl_delete_entry acl_delete_perm acl_dup acl_first_entry acl_free acl_free_qualifier acl_free_text acl_from_text acl_get_entry acl_get_fd acl_get_file acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set_fd acl_set_file acl_set_permset acl_set_qualifier acl_set_tag_type acl_size acl_to_text acl_valid Unportable functions: acl_add_entry acl_delete_access_fd acl_delete_access_file acl_delete_def_dir_fd acl_delete_def_dir_file acl_ext_to_text acl_find_entry acl_get acl_mod_perm acl_set acl_to_fmt_text allocate_acl_entry convert_to_er isaclprop Utilities: getacl setacl AIX ACLs Documentation: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.security/access_control_list.htm Introduction: http://www1.uni-hamburg.de/RRZ/Software/AIX/ACL.htm Includes: or Library: none needed Functions: acl_chg acl_fchg acl_fget acl_fput acl_fset acl_get acl_put acl_set chacl fchacl fstatacl statacl Function in AIX 5.3: aclx_convert aclx_fget aclx_fput aclx_get aclx_gettypeinfo aclx_gettypes aclx_print aclx_printStr aclx_put aclx_scan aclx_scanStr Utilities: aclget aclput acledit NonStop Kernel ACLs Documentation: http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c02492445/c02492445.pdf p. 249..260 http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c02128649/c02128649.pdf http://bizsupport2.austin.hp.com/bc/docs/support/SupportManual/c02128680/c02128680.pdf Includes: Library: none needed Functions: acl aclsort Utilities: getacl setacl Cygwin ACLs Documentation: https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-aclfuncs acl-cygwin.txt Includes: Library: none needed Functions: acl aclcheck aclfrommode aclfrompbits aclfromtext aclsort acltomode acltopbits acltotext facl lacl Utilities: getfacl setfacl Native Windows ACLs Introduction: https://helgeklein.com/blog/2009/03/permissions-a-primer-or-dacl-sacl-owner-sid-and-ace-explained/ Manual pages: https://docs.microsoft.com/en-us/windows/desktop/SecAuthZ/access-control-lists https://docs.microsoft.com/en-us/windows/desktop/SecAuthZ/getting-information-from-an-acl https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_acl https://en.wikipedia.org/wiki/Cacls Library: ? Functions: GetAclInformation SetAclInformation ... Utilities: cacls Copyright 2008-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the "GNU Free Documentation License" file as part of this distribution. gnulib-20210822~d383792/doc/agpl-3.0.texi000066400000000000000000001031551411057217300171650ustar00rootroot00000000000000@c The GNU Affero General Public License. @center Version 3, 19 November 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU Affero General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see @url{https://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a ``Source'' link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see @url{https://www.gnu.org/licenses/}. gnulib-20210822~d383792/doc/alloca-opt.texi000066400000000000000000000037211411057217300177750ustar00rootroot00000000000000@c Documentation of gnulib module 'alloca-opt'. @c Copyright (C) 2004, 2007, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{alloca-opt} module provides for a function @code{alloca} which allocates memory on the stack, where the system allows it. A memory block allocated with @code{alloca} exists only until the function that calls @code{alloca} returns or exits abruptly. There are a few systems where this is not possible: HP-UX systems, and some other platforms when the C++ compiler is used. On these platforms the @code{alloca-opt} module provides no replacement, just a preprocessor macro HAVE_ALLOCA. The user can @code{#include } on all platforms, and use @code{alloca} on those platforms where the preprocessor macro HAVE_ALLOCA evaluates to true. If HAVE_ALLOCA is false, the code should use a heap-based memory allocation based on @code{malloc} or (in C++) @code{new}. Note that the @code{#include } must be the first one after the autoconf-generated @file{config.h}, for AIX 3 compatibility. Thanks to IBM for this nice restriction! Note that GCC 3.1 and 3.2 can @emph{inline} functions that call @code{alloca}. When this happens, the memory blocks allocated with @code{alloca} will not be freed until @emph{the end of the calling function}. If this calling function runs a loop calling the function that uses @code{alloca}, the program easily gets a stack overflow and crashes. To protect against this compiler behaviour, you can mark the function that uses @code{alloca} with the following attribute: @smallexample #ifdef __GNUC__ __attribute__ ((__noinline__)) #endif @end smallexample gnulib-20210822~d383792/doc/alloca.texi000066400000000000000000000041061411057217300171730ustar00rootroot00000000000000@c Documentation of gnulib module 'alloca'. @c Copyright (C) 2004, 2007, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{alloca} module provides for a function @code{alloca} which allocates memory on the stack, where the system allows it. A memory block allocated with @code{alloca} exists only until the function that calls @code{alloca} returns or exits abruptly. There are a few systems where this is not possible: HP-UX systems, and some other platforms when the C++ compiler is used. On these platforms the alloca module provides a @code{malloc} based emulation. This emulation will not free a memory block immediately when the calling function returns, but rather will wait until the next @code{alloca} call from a function with the same or a shorter stack length. Thus, in some cases, a few memory blocks will be kept although they are not needed any more. The user can @code{#include } and use @code{alloca} on all platforms. Note that the @code{#include } must be the first one after the autoconf-generated @file{config.h}, for AIX 3 compatibility. Thanks to IBM for this nice restriction! Note that GCC 3.1 and 3.2 can @emph{inline} functions that call @code{alloca}. When this happens, the memory blocks allocated with @code{alloca} will not be freed until @emph{the end of the calling function}. If this calling function runs a loop calling the function that uses @code{alloca}, the program easily gets a stack overflow and crashes. To protect against this compiler behaviour, you can mark the function that uses @code{alloca} with the following attribute: @smallexample #ifdef __GNUC__ __attribute__ ((__noinline__)) #endif @end smallexample An alternative to this module is the @samp{alloca-opt} module. gnulib-20210822~d383792/doc/argmatch.texi000066400000000000000000000104701411057217300175270ustar00rootroot00000000000000@node Recognizing Option Arguments @section Recognizing Option Arguments The module @samp{argmatch} provides a simple textual user interface to a finite choice. It is for example well suited to recognize arguments of options or values of environment variables that accept a fixed set of valid choices. These choices may be denoted by synonyms, such as `none' and `off' below. @smallexample $ @kbd{my_cp --backup=none foo bar} $ @kbd{my_cp --backup=non foo bar} $ @kbd{my_cp --backup=no foo bar} $ @kbd{my_cp --backup=n foo bar} my_cp: ambiguous argument 'n' for 'backup type' Valid arguments are: - 'no', 'none', 'off' - 'numbered', 't', 'newstyle' - 'existing', 'nil', 'numbered-existing' - 'simple', 'never', 'single' Try 'my_cp --help' for more information. $ @kbd{my_cp --backup=num foo bar} $ @kbd{my_cp --backup=true foo bar} my_cp: invalid argument 'true' for 'backup type' Valid arguments are: - 'no', 'none', 'off' - 'numbered', 't', 'newstyle' - 'existing', 'nil', 'numbered-existing' - 'simple', 'never', 'single' Try 'my_cp --help' for more information. @end smallexample To set up @code{argmatch}, first call @samp{ARGMATCH_DEFINE_GROUP (@var{name}, @var{type})} with the name of the argmatch group name, and the value type. For instance: @smallexample enum backup_type @{ no_backups, simple_backups, numbered_existing_backups, numbered_backups @}; ARGMATCH_DEFINE_GROUP (backup, enum backup_type); @end smallexample @noindent This defines a few types and functions named @code{argmatch_@var{name}_*}. Introduce the array that defines the mapping from user-input to actual value, with a terminator: @example static const argmatch_backup_arg argmatch_backup_args[] = @{ @{ "no", no_backups @}, @{ "none", no_backups @}, @{ "off", no_backups @}, @{ "simple", simple_backups @}, @{ "never", simple_backups @}, @{ "single", simple_backups @}, @{ "existing", numbered_existing_backups @}, @{ "nil", numbered_existing_backups @}, @{ "numbered-existing", numbered_existing_backups @}, @{ "numbered", numbered_backups @}, @{ "t", numbered_backups @}, @{ "newstyle", numbered_backups @}, @{ NULL, no_backups @} @}; @end example @noindent Then introduce the array that defines the values, also with a terminator. Document only once per group of synonyms: @example static const argmatch_backup_doc argmatch_backup_docs[] = @{ @{ "no", N_("never make backups (even if --backup is given)") @}, @{ "numbered", N_("make numbered backups") @}, @{ "existing", N_("numbered if numbered backups exist, simple otherwise") @}, @{ "simple", N_("always make simple backups") @}, @{ NULL, NULL @} @}; @end example @noindent Finally, define the argmatch group: @example const argmatch_backup_group_type argmatch_backup_group = @{ argmatch_backup_args, argmatch_backup_docs, N_("\ The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\ The version control method may be selected via the --backup option or through\n\ the VERSION_CONTROL environment variable. Here are the values:\n"), NULL @}; @end example @sp 1 To use the argmatch group: @smallexample ptrdiff_t i = argmatch_backup_choice ("--backup", "none"); // argmatch_backup_group.args[i].arg is "none", so its value // is argmatch_backup_group.args[i].val. // Return -1 on invalid argument, and -2 on ambiguity. enum backup_type val = *argmatch_backup_value ("--backup", "none"); // Returns a pointer to the value, and exit on errors. // So argmatch_backup_group.args[i].val == val. const char *arg = argmatch_backup_argument (&no_backups); // arg is "no". // Print the documentation on stdout. argmatch_backup_usage (stdout); // Gives: // // The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. // The version control method may be selected via the --backup option or through // the VERSION_CONTROL environment variable. Here are the values: // // no, none, off never make backups (even if --backup is given) // numbered, t, newstyle // make numbered backups // existing, nil, numbered-existing // numbered if numbered backups exist, simple otherwise // simple, never, single // always make simple backups @end smallexample gnulib-20210822~d383792/doc/attribute.texi000066400000000000000000000036671411057217300177560ustar00rootroot00000000000000@c attribute module documentation @c Copyright 2020--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @node Attributes @section Attributes @cindex Attributes @findex __attribute__ This module provides a header file @file{attribute.h} that defines macros related to C and C++ attributes and the GCC @code{__attribute__} keyword. Here is an example of its use: @example #include NODISCARD extern char *crypt (char const *, char const *) ATTRIBUTE_NOTHROW ATTRIBUTE_LEAF ATTRIBUTE_NONNULL ((1, 2)); @end example @noindent @code{NODISCARD} expands to @code{[[nodiscard]]} if the compiler supports this C2x syntax, otherwise to @code{__attribute__ ((__warn_unused_result__))} if the compiler is a recent-enough GCC or GCC-like compiler, otherwise to nothing. @code{ATTRIBUTE_NOTHROW} expands to @code{__attribute__ ((__nothrow__))} if the compiler is a recent-enough GCC or GCC-like compiler, and to nothing otherwise. Similarly for @code{ATTRIBUTE_LEAF}. @code{ATTRIBUTE_NONNULL ((1, 2))} expands to @code{__attribute__ ((__nonnull__ (1, 2)))} if the compiler is recent-enough GCC, and to nothing otherwise. Most of these attribute names begin with @code{ATTRIBUTE_}. A few do not, because they are part of C2x and their names are not likely to clash with other macro names. These macros are @code{DEPRECATED}, @code{FALLTHROUGH}, @code{MAYBE_UNUSED}, and @code{NODISCARD}, which can be defined to @code{[[deprecated]]} etc.@: on C2x platforms. Also, these exceptional macros should be placed at the start of function declarations, whereas the @code{ATTRIBUTE_*} macros can be placed at the end. gnulib-20210822~d383792/doc/bitset.texi000066400000000000000000000033541411057217300172360ustar00rootroot00000000000000@node Bitsets @section Bitsets The module @samp{bitset} provides a common interface to several implementations of bitsets. It also provides routines for vectors of bitsets. To look at an existing use, see GNU Bison. Currently it supports five flavours of bitsets: @description @code @item BITSET_ARRAY Array of bits (fixed size, fast for dense bitsets). Memory for bit array and bitset structure allocated contiguously. @item BITSET_LIST Linked list of arrays of bits (variable size, least storage for large very sparse sets). @item BITSET_TABLE Expandable table of pointers to arrays of bits (variable size, less storage for large sparse sets). Faster than @code{BITSET_LIST} for random access. @item BITSET_VECTOR Variable array of bits (variable size, fast for dense bitsets). @item BITSET_STATS Wrapper bitset for internal use only. Used for gathering statistics and/or better run-time checking. @end description However, the choice of the actual implementation is performed by the library, based on the user provided attributes: @description @code @code BITSET_FIXED Bitset size fixed. @code BITSET_VARIABLE Bitset size variable. @code BITSET_DENSE Bitset dense. @code BITSET_SPARSE Bitset sparse. @code BITSET_FRUGAL Prefer most compact. @code BITSET_GREEDY Prefer fastest at memory expense. @end description @smallexample enum { nbits = 32 }; bitset bs0 = bitset_create (nbits, BITSET_FIXED); bitset_set (bs0, 1); bitset_set (bs0, 3); bitset_set (bs0, 5); bitset bs1 = bitset_create (nbits, BITSET_FIXED); bitset_set (bs1, 0); bitset_set (bs1, 2); bitset_set (bs1, 4); bitset bs = bitset_create (nbits, BITSET_FIXED); bitset_or (bs, bs0, bs1); ASSERT (bitset_count (bs) == 6); bitset_free (bs); bitset_free (bs1); bitset_free (bs0); @end smallexample gnulib-20210822~d383792/doc/build-automation.texi000066400000000000000000000030641411057217300212170ustar00rootroot00000000000000@node Building gnulib @section Building gnulib If you wish to help the gnulib development effort with build logs for your favorite platform, you may perform these steps: @enumerate @item Prerequisites tools Install the proper development tools. To build and test all of Gnulib, you will need development tools for the programming languages C, C++, Java, and Perl, along with standard POSIX utilities such as @command{awk}, @command{make} and @command{sh}. You will also need development tools that include Autoconf, Automake, Bison, Gettext, Git, GNU M4, Gperf, Libtool, and Texinfo. Some of these tools are needed only by some modules. More details can be found in Gnulib's @file{DEPENDENCIES} file. @item Obtain Gnulib See @url{https://www.gnu.org/software/gnulib/} for how to get the current Gnulib sources via Git. @item Create gnulib directory On a machine with GNU development tools installed and with a gnulib git checkout, use @example gnulib-tool --create-megatestdir --with-tests --dir=... @end example Note: The created directory uses ca. 512 MB on disk. @item Transfer gnulib directory Transfer this directory to a build machine (HP-UX, Cygwin, or whatever). Often it is easier to transfer one file, and this can be achieved by running, inside the directory the following commands: @example ./configure make dist @end example And then transferring the @file{dummy-0.tar.gz} file. @item Build modules On the build machine, run ./do-autobuild (or "nohup ./do-autobuild"). It creates a directory @file{logs/} with a log file for each module. @end enumerate gnulib-20210822~d383792/doc/c-ctype.texi000066400000000000000000000032451411057217300173070ustar00rootroot00000000000000@c Documentation of gnulib module 'c-ctype'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-ctype} module contains functions operating on single-byte characters, like the functions in @code{}, that operate as if the locale encoding was ASCII@. (The "C" locale on many systems has the locale encoding "ASCII".) The functions are: @smallexample extern bool c_isascii (int c); extern bool c_isalnum (int c); extern bool c_isalpha (int c); extern bool c_isblank (int c); extern bool c_iscntrl (int c); extern bool c_isdigit (int c); extern bool c_islower (int c); extern bool c_isgraph (int c); extern bool c_isprint (int c); extern bool c_ispunct (int c); extern bool c_isspace (int c); extern bool c_isupper (int c); extern bool c_isxdigit (int c); extern int c_tolower (int c); extern int c_toupper (int c); @end smallexample These functions assign properties only to ASCII characters. The @var{c} argument can be a @code{char} or @code{unsigned char} value, whereas the corresponding functions in @code{} take an argument that is actually an @code{unsigned char} value. The @code{c_is*} functions return @samp{bool}, where the corresponding functions in @code{} return @samp{int} for historical reasons. Note: The @code{} functions support only unibyte locales. gnulib-20210822~d383792/doc/c-locale.texi000066400000000000000000000017321411057217300174210ustar00rootroot00000000000000@node String Functions in C Locale @section Character and String Functions in C Locale The functions in this section are similar to the generic string functions from the standard C library, except that @itemize @item They behave as if the locale was set to the "C" locale, even when the locale is different, and/or @item They are specially optimized for the case where all characters are plain ASCII characters. @end itemize @menu * c-ctype:: * c-strcase:: * c-strcaseeq:: * c-strcasestr:: * c-strstr:: * c-strtod:: * c-strtold:: @end menu @node c-ctype @subsection c-ctype @include c-ctype.texi @node c-strcase @subsection c-strcase @include c-strcase.texi @node c-strcaseeq @subsection c-strcaseeq @include c-strcaseeq.texi @node c-strcasestr @subsection c-strcasestr @include c-strcasestr.texi @node c-strstr @subsection c-strstr @include c-strstr.texi @node c-strtod @subsection c-strtod @include c-strtod.texi @node c-strtold @subsection c-strtold @include c-strtold.texi gnulib-20210822~d383792/doc/c-strcase.texi000066400000000000000000000023461411057217300176300ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcase'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strcase} module contains case-insensitive string comparison functions operating on single-byte character strings, like the functions in @code{}, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The functions are: @smallexample extern int c_strcasecmp (const char *s1, const char *s2); extern int c_strncasecmp (const char *s1, const char *s2, size_t n); @end smallexample For case conversion here, only ASCII characters are considered to be upper case or lower case. Note: The functions @code{strcasecmp}, @code{strncasecmp} from @code{} support only unibyte locales; for multibyte locales, you need the functions @code{mbscasecmp}, @code{mbsncasecmp}, @code{mbspcasecmp}. gnulib-20210822~d383792/doc/c-strcaseeq.texi000066400000000000000000000022751411057217300201570ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcaseeq'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strcaseeq} module contains an optimized case-insensitive string comparison function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The functions is actually implemented as a macro: @smallexample extern int STRCASEEQ (const char *s1, const char *s2, int s20, int s21, int s22, int s23, int s24, int s25, int s26, int s27, int s28); @end smallexample @var{s2} should be a short literal ASCII string, and @var{s20}, @var{s21}, ... the individual characters of @var{s2}. For case conversion here, only ASCII characters are considered to be upper case or lower case. gnulib-20210822~d383792/doc/c-strcasestr.texi000066400000000000000000000021061411057217300203530ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcasestr'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strcasestr} module contains a case-insensitive string search function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: @smallexample extern char *c_strcasestr (const char *haystack, const char *needle); @end smallexample For case conversion here, only ASCII characters are considered to be upper case or lower case. Note: The function @code{strcasestr} from @code{} supports only unibyte locales; for multibyte locales, you need the function @code{mbscasestr}. gnulib-20210822~d383792/doc/c-strstr.texi000066400000000000000000000017041411057217300175220ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strstr'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strstr} module contains a substring search function operating on single-byte character strings, that operate as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: @smallexample extern char *c_strstr (const char *haystack, const char *needle); @end smallexample Note: The function @code{strstr} from @code{} supports only unibyte locales; for multibyte locales, you need the function @code{mbsstr}. gnulib-20210822~d383792/doc/c-strtod.texi000066400000000000000000000022361411057217300175010ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strtod'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strtod} module contains a string to number (@samp{double}) conversion function operating on single-byte character strings, that operates as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: @smallexample extern double c_strtod (const char *string, char **endp); @end smallexample In particular, only a period @samp{.} is accepted as decimal point, even when the current locale's notion of decimal point is a comma @samp{,}, and no characters outside the basic character set are accepted. On platforms without @code{strtod_l}, this function is not safe for use in multi-threaded applications since it calls @code{setlocale}. gnulib-20210822~d383792/doc/c-strtold.texi000066400000000000000000000017421411057217300176560ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strtold'. @c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{c-strtold} module contains a string to number (@samp{long double}) conversion function operating on single-byte character strings, that operates as if the locale encoding was ASCII. (The "C" locale on many systems has the locale encoding "ASCII".) The function is: @smallexample extern long double c_strtold (const char *string, char **endp); @end smallexample In particular, only a period @samp{.} is accepted as decimal point, even when the current locale's notion of decimal point is a comma @samp{,}. gnulib-20210822~d383792/doc/check-version.texi000066400000000000000000000034411411057217300205010ustar00rootroot00000000000000@node Library version handling @section Library version handling The module @samp{check-version} can be useful when your gnulib application is a system library. You will typically wrap the call to the @code{check_version} function through a library API, your library header file may contain: @example #define STRINGPREP_VERSION "0.5.18" ... extern const char *stringprep_check_version (const char *req_version); @end example To avoid ELF symbol collisions with other libraries that use the @samp{check-version} module, add to @file{config.h} through a AC_DEFINE something like: @example AC_DEFINE(check_version, stringprep_check_version, [Rename check_version.]) @end example The @code{stringprep_check_version} function will thus be implemented by the @code{check_version} module. There are two uses of the interface. The first is a way to provide for applications to find out the version number of the library it uses. The application may contain diagnostic code such as: @example printf ("Stringprep version: header %s library %s", STRINGPREP_VERSION, stringprep_check_version (NULL)); @end example Separating the library and header file version can be useful when searching for version mismatch related problems. The second uses is as a rudimentary test of proper library version, by making sure the application get a library version that is the same, or newer, than the header file used when building the application. This doesn't catch all problems, libraries may change backwards incompatibly in later versions, but enable applications to require a certain minimum version before it may proceed. Typical uses look like: @example /* Check version of libgcrypt. */ if (!gcry_check_version (GCRYPT_VERSION)) die ("version mismatch\n"); @end example gnulib-20210822~d383792/doc/configmake.texi000066400000000000000000000026001411057217300200400ustar00rootroot00000000000000@node configmake @section configmake @findex configmake @r{module} @cindex @file{configmake.h}, module for updating The @code{configmake} module builds a C include file named @file{configmake.h} containing the usual installation directory values; for example, those specified by @code{--prefix} or @code{--libdir} to configure. Each variable is given a @code{#define} with an all-uppercase macro name, such as @code{PREFIX} and @code{LIBDIR}. (Automake cannot create this file directly because the user might override directory values at @code{make} time.) Specifically, the module retrieves values of the variables through @code{configure} followed by @code{make}, not directly through @code{configure}, so that a user who sets some of these variables consistently on the @code{make} command line gets correct results. One advantage of this approach, compared to the classical approach of adding @code{-DLIBDIR=\"$(libdir)\"} etc.@: to @code{AM_CPPFLAGS}, is that it protects against the use of undefined variables. That is, if, say, @code{$(libdir)} is not set in the Makefile, @code{LIBDIR} is not defined by this module, and code using @code{LIBDIR} gives a compilation error. Another advantage is that @code{make} output is shorter. For the complete list of variables which are @code{#define}d this way, see the file @file{gnulib/modules/configmake}, or inspect your resulting gnulib Makefile. gnulib-20210822~d383792/doc/containers.texi000066400000000000000000000413241411057217300201100ustar00rootroot00000000000000@node Container data types @section Container data types @c Copyright (C) 2019--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @c Written by Bruno Haible. @c This macro expands to \log in TeX mode, but just 'log' in HTML and info @c modes. @ifnottex @macro log log @end macro @end ifnottex @c This macro expands to \mathopsup in TeX mode, to a superscript in HTML @c mode, and to ^ without braces in info mode. @ifhtml @macro mathopsup {EXP} @sup{\EXP\} @end macro @end ifhtml @ifinfo @macro mathopsup {EXP} ^\EXP\ @end macro @end ifinfo Gnulib provides several generic container data types. They can be used to organize collections of application-defined objects. @node Ordinary containers @subsection Ordinary container data types @multitable @columnfractions .15 .5 .1 .1 .15 @headitem Data type @tab Details @tab Module @tab Main include file @tab Include file for operations with out-of-memory checking @item Sequential list @tab Can contain any number of objects in any given order. Duplicates are allowed, but can optionally be forbidden. @tab @code{list} @tab @code{"gl_list.h"} @tab @code{"gl_xlist.h"} @item Set @tab Can contain any number of objects; the order does not matter. Duplicates (in the sense of the comparator) are forbidden. @tab @code{set} @tab @code{"gl_set.h"} @tab @code{"gl_xset.h"} @item Ordered set @tab Can contain any number of objects in the order of a given comparator function. Duplicates (in the sense of the comparator) are forbidden. @tab @code{oset} @tab @code{"gl_oset.h"} @tab @code{"gl_xoset.h"} @item Map @tab Can contain any number of (key, value) pairs, where keys and values are objects; there are no (key, value1) and (key, value2) pairs with the same key (in the sense of a given comparator function). @tab @code{map} @tab @code{"gl_map.h"} @tab @code{"gl_xmap.h"} @item Ordered map @tab Can contain any number of (key, value) pairs, where keys and values are objects; the (key, value) pairs are ordered by the key, in the order of a given comparator function; there are no (key, value1) and (key, value2) pairs with the same key (in the sense of the comparator function). @tab @code{omap} @tab @code{"gl_omap.h"} @tab @code{"gl_xomap.h"} @end multitable Operations without out-of-memory checking (suitable for use in libraries) are declared in the ``main include file''. Whereas operations with out-of-memory checking (suitable only in programs) are declared in the ``include file for operations with out-of-memory checking''. For each of the data types, several implementations are available, with different performance profiles with respect to the available operations. This enables you to start with the simplest implementation (ARRAY) initially, and switch to a more suitable implementation after profiling your application. The implementation of each container instance is specified in a single place only: in the invocation of the function @code{gl_*_create_empty} that creates the instance. The implementations and the guaranteed average performance for the operations for the ``sequential list'' data type are: @multitable @columnfractions 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 @headitem Operation @tab ARRAY @tab CARRAY @tab LINKED @tab TREE @tab LINKEDHASH with duplicates @tab LINKEDHASH without duplicates @tab TREEHASH with duplicates @tab TREEHASH without duplicates @item @code{gl_list_size} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_list_node_value} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_list_node_set_value} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(1)} @item @code{gl_list_next_node} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_previous_node} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_first_node} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_last_node} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_get_at} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_get_first} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_get_last} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_set_at} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_set_first} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_set_last} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_search} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @item @code{gl_list_search_from} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_search_from_to} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_indexof} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_indexof_from} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_indexof_from_to} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_add_first} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_add_last} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_add_before} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_add_after} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_add_at} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_remove_node} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_remove_at} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_remove_first} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_remove_last} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_remove} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(1)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_list_iterator} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_iterator_from_to} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_list_iterator_next} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(1)} @tab @math{O(1)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_sortedlist_search} @tab @math{O(@log n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_sortedlist_search_from} @tab @math{O(@log n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_sortedlist_indexof} @tab @math{O(@log n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_sortedlist_indexof_from} @tab @math{O(@log n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_sortedlist_add} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @item @code{gl_sortedlist_remove} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O(@log n)} @tab @math{O(n)} @tab @math{O(n)} @tab @math{O((@log n)@mathopsup{2})} @tab @math{O(@log n)} @end multitable The implementations and the guaranteed average performance for the operations for the ``set'' data type are: @multitable @columnfractions 0.4 0.2 0.4 @headitem Operation @tab ARRAY @tab LINKEDHASH, HASH @item @code{gl_set_size} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_set_add} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_set_remove} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_set_search} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_set_iterator} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_set_iterator_next} @tab @math{O(1)} @tab @math{O(1)} @end multitable The implementations and the guaranteed average performance for the operations for the ``ordered set'' data type are: @multitable @columnfractions 0.5 0.25 0.25 @headitem Operation @tab ARRAY @tab TREE @item @code{gl_oset_size} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_oset_add} @tab @math{O(n)} @tab @math{O(@log n)} @item @code{gl_oset_remove} @tab @math{O(n)} @tab @math{O(@log n)} @item @code{gl_oset_search} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_oset_search_atleast} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_oset_iterator} @tab @math{O(1)} @tab @math{O(@log n)} @item @code{gl_oset_iterator_next} @tab @math{O(1)} @tab @math{O(@log n)} @end multitable The implementations and the guaranteed average performance for the operations for the ``map'' data type are: @multitable @columnfractions 0.4 0.2 0.4 @headitem Operation @tab ARRAY @tab LINKEDHASH, HASH @item @code{gl_map_size} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_map_get} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_map_put} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_map_remove} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_map_search} @tab @math{O(n)} @tab @math{O(1)} @item @code{gl_map_iterator} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_map_iterator_next} @tab @math{O(1)} @tab @math{O(1)} @end multitable The implementations and the guaranteed average performance for the operations for the ``ordered map'' data type are: @multitable @columnfractions 0.5 0.25 0.25 @headitem Operation @tab ARRAY @tab TREE @item @code{gl_omap_size} @tab @math{O(1)} @tab @math{O(1)} @item @code{gl_omap_get} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_omap_put} @tab @math{O(n)} @tab @math{O(@log n)} @item @code{gl_omap_remove} @tab @math{O(n)} @tab @math{O(@log n)} @item @code{gl_omap_search} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_omap_search_atleast} @tab @math{O(@log n)} @tab @math{O(@log n)} @item @code{gl_omap_iterator} @tab @math{O(1)} @tab @math{O(@log n)} @item @code{gl_omap_iterator_next} @tab @math{O(1)} @tab @math{O(@log n)} @end multitable For C++, Gnulib provides a C++ template class for each of these container data types. @multitable @columnfractions .30 .20 .25 .25 @headitem Data type @tab C++ class @tab Module @tab Include file @item Sequential list @tab @code{gl_List} @tab @code{list-c++} @tab @code{"gl_list.hh"} @item Set @tab @code{gl_Set} @tab @code{set-c++} @tab @code{"gl_set.hh"} @item Ordered set @tab @code{gl_OSet} @tab @code{oset-c++} @tab @code{"gl_oset.hh"} @item Map @tab @code{gl_Map} @tab @code{map-c++} @tab @code{"gl_map.hh"} @item Ordered map @tab @code{gl_OMap} @tab @code{omap-c++} @tab @code{"gl_omap.hh"} @end multitable @node Specialized containers @subsection Specialized container data types The @code{hamt} module implements the hash array mapped trie (HAMT) data structure. This is a data structure that contains (key, value) pairs. Lookup of a (key, value) pair given the key is on average an @math{O(1)} operation, assuming a good hash function for the keys is employed. The HAMT data structure is useful when you want modifications (additions of pairs, removal, value changes) to be visible only to some part of your program, whereas other parts of the program continue to use the unmodified HAMT. The HAMT makes this possible in a space-efficient manner: the modified and the unmodified HAMT share most of their allocated memory. It is also time-efficient: Every such modification is @math{O(1)} on average, again assuming a good hash function for the keys. A HAMT can be used whenever an ordinary hash table would be used. It does however, provide non-destructive updating operations without the need to copy the whole container. On the other hand, a hash table is simpler so that its performance may be better when non-destructive update operations are not needed. For example, a HAMT can be used to model the dynamic environment in a LISP interpreter. Updating a value in the dynamic environment of one continuation frame would not modify values in earlier frames. To use the module, include @code{hamt.h} in your code. The public interface is documented in that header file. You have to provide a hash function and an equivalence relation, which defines key equality. The module includes a test file @code{test-hamt.c}, which demonstrates how the API can be used. In the current implementation, each inner node of the HAMT can store up to @math{32 = 2^5} entries and subtries. Whenever a collision between the initial bits of the hash values of two entries would happen, the next @math{5} bits of the hash values are examined and the two entries pushed down one level in the trie. HAMTs have the same average access times as hash tables but grow and shrink dynamically, so they use memory more economically and do not have to be periodically resized. They were described and analyzed in @cite{Phil Bagwell (2000). Ideal Hash Trees (Report). Infoscience Department, École Polytechnique Fédérale de Lausanne.} The persistence aspect of the HAMT data structure, which means that each updating operation (like inserting, replacing, or removing an entry) returns a new HAMT while leaving the original one intact, is achieved through structure sharing, which is even safe in the presence of multiple threads when the used C compiler supports atomics. @ifnottex @unmacro log @end ifnottex @ifhtml @unmacro mathopsup @end ifhtml @ifinfo @unmacro mathopsup @end ifinfo gnulib-20210822~d383792/doc/extern-inline.texi000066400000000000000000000066161411057217300205310ustar00rootroot00000000000000@c GNU extern-inline module documentation @c Copyright (C) 2013--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @c Written by Paul Eggert. @node extern inline @section Extern inline functions @cindex extern inline @cindex inline The @code{extern-inline} module supports the use of C99-style @code{extern inline} functions so that the code still runs on compilers that do not support this feature correctly. C code ordinarily should not use @code{inline}. Typically it is better to let the compiler figure out whether to inline, as compilers are pretty good about optimization nowadays. In this sense, @code{inline} is like @code{register}, another keyword that is typically no longer needed. Functions defined (not merely declared) in headers are an exception, as avoiding @code{inline} would commonly cause problems for these functions. Suppose @file{aaa.h} defines the function @code{aaa_fun}, and @file{aaa.c}, @file{bbb.c} and @file{ccc.c} all include @file{aaa.h}. If code is intended to portable to non-C99 compilers, @code{aaa_fun} cannot be declared with the C99 @code{inline} keyword. This problem cannot be worked around by making @code{aaa_fun} an ordinary function, as it would be defined three times with external linkage and the definitions would clash. Although @code{aaa_fun} could be a static function, with separate compilation if @code{aaa_fun} is not inlined its code will appear in the executable three times. To avoid this code bloat, @file{aaa.h} can do this: @example /* aaa.h */ /* #include any other headers here */ #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef AAA_INLINE # define AAA_INLINE _GL_INLINE #endif ... AAA_INLINE int aaa_fun (int i) @{ return i + 1; @} ... _GL_INLINE_HEADER_END @end example @noindent and @file{aaa.c} can do this: @example /* aaa.c */ #include #define AAA_INLINE _GL_EXTERN_INLINE #include @end example @noindent whereas @file{bbb.c} and @file{ccc.c} can include @file{aaa.h} in the usual way. C99 compilers expand @code{AAA_INLINE} to C99-style @code{inline} usage, where @code{aaa_fun} is declared @code{extern inline} in @file{aaa.c} and plain @code{inline} in other modules. Non-C99 compilers that are compatible with GCC use GCC-specific syntax to accomplish the same ends. Other non-C99 compilers use @code{static inline} so they suffer from code bloat, but they are not mainline platforms and will die out eventually. @findex _GL_INLINE @code{_GL_INLINE} is a portable alternative to C99 plain @code{inline}. @findex _GL_EXTERN_INLINE @code{_GL_EXTERN_INLINE} is a portable alternative to C99 @code{extern inline}. @findex _GL_INLINE_HEADER_BEGIN Invoke @code{_GL_INLINE_HEADER_BEGIN} before all uses of @code{_GL_INLINE} in an include file. This suppresses some bogus warnings in GCC versions before 5.1. If an include file includes other files, it is better to invoke this macro after including the other files. @findex _GL_INLINE_HEADER_END Invoke @code{_GL_INLINE_HEADER_END} after all uses of @code{_GL_INLINE} in an include file. gnulib-20210822~d383792/doc/extra-tests.texi000066400000000000000000000057751411057217300202400ustar00rootroot00000000000000@node Extra tests modules @section Extra tests modules @cindex Extra tests modules @cindex C++ tests modules @cindex tests modules, C++ @cindex long-running tests modules @cindex tests modules, long-running @cindex privileged tests modules @cindex tests modules, privileged @cindex unportable tests modules @cindex tests modules, unportable Test modules can be marked with some special status attributes. When a test module has such an attribute, @code{gnulib-tool --import} will not include it by default. The supported status attributes are: @table @code @item c++-test Indicates that the test is testing C++ interoperability. Such a test is useful in a C++ or mixed C/C++ package, but is useless in a C package. @item longrunning-test Indicates that the test takes a long time to compile or execute (more than five minutes or so). Such a test is better avoided in a release that is made for the general public. @item privileged-test Indicates that the test will request special privileges, for example, ask for the superuser password. Such a test may hang when run non-interactively and is therefore better avoided in a release that is made for the general public. @item unportable-test Indicates that the test is known to fail on some systems, and that there is no workaround about it. Such a test is better avoided in a release that is made for the general public. @end table @code{gnulib-tool --import --with-tests} will not include tests marked with these attributes by default. When @code{gnulib-tool} is invoked with one of the options @code{--with-c++-tests}, @code{--with-longrunning-tests}, @code{--with-privileged-tests}, @code{--with-unportable-tests}, it will include tests despite the corresponding special status attribute. When @code{gnulib-tool} receives the option @code{--with-all-tests}, it will include all tests regardless of their status attributes. @code{gnulib-tool --create-testdir --with-tests} and @code{gnulib-tool --create-megatestdir --with-tests} by default include all tests of modules specified on the command line, regardless of their status attributes. Tests of modules occurring as dependencies are not included by default if they have one of these status attributes. The options @code{--with-c++-tests}, @code{--with-longrunning-tests}, @code{--with-privileged-tests}, @code{--with-unportable-tests} are recognized here as well. Additionally, @code{gnulib-tool} also understands the options @code{--without-c++-tests}, @code{--without-longrunning-tests}, @code{--without-privileged-tests}, @code{--without-unportable-tests}. In order to mark a module with a status attribute, you need to add it to the module description, like this: @example Status: longrunning-test @end example If only a part of a test deserves a particular status attribute, you can split the module into a primary and a secondary test module, say @code{foo-tests} and @code{foo-extra-tests}. Then add a dependency from @code{foo-tests} to @code{foo-extra-tests}, and mark the @code{foo-extra-tests} with the particular status attribute. gnulib-20210822~d383792/doc/fdl-1.3.texi000066400000000000000000000556121411057217300170140ustar00rootroot00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{https://www.gnu.org/licenses/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: gnulib-20210822~d383792/doc/fdl.texi000066400000000000000000000556121411057217300165150ustar00rootroot00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{https://www.gnu.org/licenses/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: gnulib-20210822~d383792/doc/func.texi000066400000000000000000000007041411057217300166730ustar00rootroot00000000000000@node func @section func The @code{func} module makes sure that you can use the predefined identifier @code{__func__} as defined by C99 in your code. A small example is: @smallexample #include #include /* for printf */ int main (void) @{ printf ("%s: hello world\n", __func__); @} @end smallexample Note that @code{sizeof} cannot be applied to @code{__func__}: On SunPRO C compiler, @code{sizeof __func__} evaluates to 0. gnulib-20210822~d383792/doc/gcd.texi000066400000000000000000000037451411057217300165050ustar00rootroot00000000000000@node gcd @section gcd: greatest common divisor @findex gcd @c Copyright (C) 2006, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{gcd} function returns the greatest common divisor of two numbers @code{a > 0} and @code{b > 0}. It is the caller's responsibility to ensure that the arguments are non-zero. If you need a gcd function for an integer type larger than @samp{unsigned long}, you can include the @file{gcd.c} implementation file with parametrization. The parameters are: @itemize @bullet @item WORD_T Define this to the unsigned integer type that you need this function for. @item GCD Define this to the name of the function to be created. @end itemize The created function has the prototype @smallexample WORD_T GCD (WORD_T a, WORD_T b); @end smallexample If you need the least common multiple of two numbers, it can be computed like this: @code{lcm(a,b) = (a / gcd(a,b)) * b} or @code{lcm(a,b) = a * (b / gcd(a,b))}. Avoid the formula @code{lcm(a,b) = (a * b) / gcd(a,b)} because---although mathematically correct---it can yield a wrong result, due to integer overflow. In some applications it is useful to have a function taking the gcd of two signed numbers. In this case, the gcd function result is usually normalized to be non-negative (so that two gcd results can be compared in magnitude or compared against 1, etc.). Note that in this case the prototype of the function has to be @smallexample unsigned long gcd (long a, long b); @end smallexample and not @smallexample long gcd (long a, long b); @end smallexample because @code{gcd(LONG_MIN,LONG_MIN) = -LONG_MIN = LONG_MAX + 1} does not fit into a signed @samp{long}. gnulib-20210822~d383792/doc/gendocs_template000066400000000000000000000073461411057217300203160ustar00rootroot00000000000000 %%TITLE%% - GNU Project - Free Software Foundation

    %%TITLE%%

    Free Software Foundation
    last updated %%DATE%%

    This manual (%%PACKAGE%%) is available in the following formats:

    You can buy printed copies of some manuals (among other items) from the Free Software Foundation; this helps support FSF activities.

    (This page generated by the %%SCRIPTNAME%% script.)

    gnulib-20210822~d383792/doc/gendocs_template_min000066400000000000000000000075241411057217300211570ustar00rootroot00000000000000 %%TITLE%% - GNU Project - Free Software Foundation

    %%TITLE%%

    Free Software Foundation
    last updated %%DATE%%

     [image of the head of a GNU]


    This manual (%%PACKAGE%%) is available in the following formats:

    (This page generated by the %%SCRIPTNAME%% script.)

    Copyright © 2020 Free Software Foundation, Inc.

    This page is licensed under a Creative Commons Attribution-NoDerivs 3.0 United States License.

    gnulib-20210822~d383792/doc/glibc-functions/000077500000000000000000000000001411057217300201325ustar00rootroot00000000000000gnulib-20210822~d383792/doc/glibc-functions/_Fork.texi000066400000000000000000000011461411057217300220670ustar00rootroot00000000000000@node _Fork @subsection @code{_Fork} @findex _Fork Documentation:@* @ifinfo @ref{Creating a Process,,Creating a Process,libc} @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Creating-a-Process.html} @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.33, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/__libc_single_threaded.texi000066400000000000000000000012521411057217300254350ustar00rootroot00000000000000@node __libc_single_threaded @subsection @code{__libc_single_threaded} @findex __libc_single_threaded Documentation:@* @ifinfo @ref{Single Threaded,,Detecting Single-Threaded Execution,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Single_002dThreaded.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/accept4.texi000066400000000000000000000013651411057217300223550ustar00rootroot00000000000000@node accept4 @subsection @code{accept4} @findex accept4 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html,,man accept4} Gnulib module: accept4 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 4.4. But the replacement function is not atomic; this matters in multi-threaded programs that spawn child processes. @end itemize Portability problems not fixed by Gnulib: @itemize @item SOCK_CLOEXEC and SOCK_NONBLOCK may not be defined as they're also significant to the socket() function. @end itemize gnulib-20210822~d383792/doc/glibc-functions/acct.texi000066400000000000000000000010071411057217300217350ustar00rootroot00000000000000@node acct @subsection @code{acct} @findex acct LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-acct-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/acct.2.html,,man acct} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/add-links.sh000077500000000000000000000060711411057217300223430ustar00rootroot00000000000000#!/bin/sh # Adds the reference to the Glibc documentation and to the Linux manual page # to the file foo.texi. # Usage: add-links.sh foo.texi case "$1" in *.texi) f="$1" g="${f%.texi}" glibc_inforef= glibc_link= if test -f _index.html \ || { wget -O _index1.html https://www.gnu.org/software/libc/manual/html_node/Function-Index.html \ && wget -O _index2.html https://www.gnu.org/software/libc/manual/html_node/Variable-Index.html \ && cat _index1.html _index2.html > _index.html; \ }; then glibc_page=`sed -n -e "s|^.*$g.*|\1|p" < _index.html | sed -s 's/#.*//'` if test -n "$glibc_page"; then glibc_page_title=`wget -O - "https://www.gnu.org/software/libc/manual/html_node/$glibc_page" 2>/dev/null | sed -n -e 's/^.*]*>[0-9. ]*\(.*\)<\/h.*/\1/p' | sed -e 's|<[^>]*>||g' -e 's|,||g' | head -n 1` if test -n "$glibc_page_title"; then glibc_node=`echo "$glibc_page" | sed -e 's/\.html$//' -e 's/_/\\\\u/g' -e 's/\\u00\([0-7]\)/\\x\1/g' -e 's/-/ /g'` # Avoid the broken built-in 'printf' in the dash shell. glibc_node=`/usr/bin/printf "$glibc_node" 2>/dev/null || printf "$glibc_node"` glibc_inforef="@ref{$glibc_node,,$glibc_page_title,libc}" glibc_link="@url{https://www.gnu.org/software/libc/manual/html_node/$glibc_page}" else echo "failed to determine page title of https://www.gnu.org/software/libc/manual/html_node/$glibc_page" fi else echo $f not documented in glibc manual fi else echo "failed to fetch glibc index" fi manpages_link= if wget https://www.kernel.org/doc/man-pages/online/pages/man3/${g}.3.html >/dev/null 2>&1; then manpages_link="@uref{https://www.kernel.org/doc/man-pages/online/pages/man3/${g}.3.html,,man ${g}}" else if wget https://www.kernel.org/doc/man-pages/online/pages/man2/${g}.2.html >/dev/null 2>&1; then manpages_link="@uref{https://www.kernel.org/doc/man-pages/online/pages/man2/${g}.2.html,,man ${g}}" else echo $f not documented among the man pages fi fi if test -n "$glibc_link"; then if test -n "$manpages_link"; then documentation="Documentation:\n\ @itemize\n\ @item\n\ @ifinfo\n\ $glibc_inforef,\n\ @end ifinfo\n\ @ifnotinfo\n\ $glibc_link,\n\ @end ifnotinfo\n\ @item\n\ $manpages_link.\n\ @end itemize" else documentation="Documentation:@*\n\ @ifinfo\n\ $glibc_inforef.\n\ @end ifinfo\n\ @ifnotinfo\n\ $glibc_link.\n\ @end ifnotinfo" fi else if test -n "$manpages_link"; then documentation="Documentation:@* $manpages_link" else documentation= fi fi if test -n "$documentation"; then mv ${f} ${f}~ if cat ${f}~ | sed -e '/^Documentation:/,/^$/d' | sed -e "s|^Gnulib module|$documentation\n\ \n\ Gnulib module|" > ${f}; then echo $f updated else echo $f update failed mv ${f}~ ${f} fi fi ;; *) echo "invalid argument: $1" 1>&2 ;; esac gnulib-20210822~d383792/doc/glibc-functions/addmntent.texi000066400000000000000000000012351411057217300230040ustar00rootroot00000000000000@node addmntent @subsection @code{addmntent} @findex addmntent Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/addmntent.3.html,,man addmntent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/addseverity.texi000066400000000000000000000013341411057217300233510ustar00rootroot00000000000000@node addseverity @subsection @code{addseverity} @findex addseverity Documentation: @itemize @item @ifinfo @ref{Adding Severity Classes,,Adding Severity Classes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Adding-Severity-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/addseverity.3.html,,man addseverity}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/adjtime.texi000066400000000000000000000014201411057217300224370ustar00rootroot00000000000000@node adjtime @subsection @code{adjtime} @findex adjtime LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-adjtime-2.html} Documentation: @itemize @item @ifinfo @ref{High-Resolution Calendar,,High-Resolution Calendar,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/High_002dResolution-Calendar.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/adjtime.3.html,,man adjtime}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/adjtimex.texi000066400000000000000000000014311411057217300226310ustar00rootroot00000000000000@node adjtimex @subsection @code{adjtimex} @findex adjtimex Documentation: @itemize @item @ifinfo @ref{High-Resolution Calendar,,High-Resolution Calendar,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/High_002dResolution-Calendar.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/adjtimex.2.html,,man adjtimex}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/advance.texi000066400000000000000000000006301411057217300224250ustar00rootroot00000000000000@node advance @subsection @code{advance} @findex advance Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/aio_init.texi000066400000000000000000000013441411057217300226220ustar00rootroot00000000000000@node aio_init @subsection @code{aio_init} @findex aio_init Documentation: @itemize @item @ifinfo @ref{Configuration of AIO,,How to optimize the AIO implementation,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Configuration-of-AIO.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/aio_init.3.html,,man aio_init}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_err_exit_status.texi000066400000000000000000000012171411057217300252630ustar00rootroot00000000000000@node argp_err_exit_status @subsection @code{argp_err_exit_status} @findex argp_err_exit_status Documentation:@* @ifinfo @ref{Argp Global Variables,,Argp Global Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Global-Variables.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_error.texi000066400000000000000000000011751411057217300231730ustar00rootroot00000000000000@node argp_error @subsection @code{argp_error} @findex argp_error Documentation:@* @ifinfo @ref{Argp Helper Functions,,Functions For Use in Argp Parsers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Helper-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_failure.texi000066400000000000000000000012031411057217300234610ustar00rootroot00000000000000@node argp_failure @subsection @code{argp_failure} @findex argp_failure Documentation:@* @ifinfo @ref{Argp Helper Functions,,Functions For Use in Argp Parsers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Helper-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_help.texi000066400000000000000000000011271411057217300227670ustar00rootroot00000000000000@node argp_help @subsection @code{argp_help} @findex argp_help Documentation:@* @ifinfo @ref{Argp Help,,The argp_help Function,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Help.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_parse.texi000066400000000000000000000011331411057217300231460ustar00rootroot00000000000000@node argp_parse @subsection @code{argp_parse} @findex argp_parse Documentation:@* @ifinfo @ref{Argp,,Parsing Program Options with Argp,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_program_bug_address.texi000066400000000000000000000012331411057217300260460ustar00rootroot00000000000000@node argp_program_bug_address @subsection @code{argp_program_bug_address} @findex argp_program_bug_address Documentation:@* @ifinfo @ref{Argp Global Variables,,Argp Global Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Global-Variables.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_program_version.texi000066400000000000000000000012171411057217300252530ustar00rootroot00000000000000@node argp_program_version @subsection @code{argp_program_version} @findex argp_program_version Documentation:@* @ifinfo @ref{Argp Global Variables,,Argp Global Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Global-Variables.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_program_version_hook.texi000066400000000000000000000012361411057217300262740ustar00rootroot00000000000000@node argp_program_version_hook @subsection @code{argp_program_version_hook} @findex argp_program_version_hook Documentation:@* @ifinfo @ref{Argp Global Variables,,Argp Global Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Global-Variables.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_state_help.texi000066400000000000000000000012141411057217300241640ustar00rootroot00000000000000@node argp_state_help @subsection @code{argp_state_help} @findex argp_state_help Documentation:@* @ifinfo @ref{Argp Helper Functions,,Functions For Use in Argp Parsers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Helper-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argp_usage.texi000066400000000000000000000011751411057217300231460ustar00rootroot00000000000000@node argp_usage @subsection @code{argp_usage} @findex argp_usage Documentation:@* @ifinfo @ref{Argp Helper Functions,,Functions For Use in Argp Parsers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp-Helper-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_add.texi000066400000000000000000000015751411057217300226100ustar00rootroot00000000000000@node argz_add @subsection @code{argz_add} @findex argz_add LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_add.3.html,,man argz_add}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_add_sep.texi000066400000000000000000000016211411057217300234470ustar00rootroot00000000000000@node argz_add_sep @subsection @code{argz_add_sep} @findex argz_add_sep LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_add_sep.3.html,,man argz_add_sep}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_append.texi000066400000000000000000000016141411057217300233210ustar00rootroot00000000000000@node argz_append @subsection @code{argz_append} @findex argz_append LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_append.3.html,,man argz_append}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_count.texi000066400000000000000000000016071411057217300232040ustar00rootroot00000000000000@node argz_count @subsection @code{argz_count} @findex argz_count LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_count.3.html,,man argz_count}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_create.texi000066400000000000000000000016141411057217300233150ustar00rootroot00000000000000@node argz_create @subsection @code{argz_create} @findex argz_create LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_create.3.html,,man argz_create}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_create_sep.texi000066400000000000000000000016401411057217300241630ustar00rootroot00000000000000@node argz_create_sep @subsection @code{argz_create_sep} @findex argz_create_sep LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_create_sep.3.html,,man argz_create_sep}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_delete.texi000066400000000000000000000016141411057217300233140ustar00rootroot00000000000000@node argz_delete @subsection @code{argz_delete} @findex argz_delete LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_delete.3.html,,man argz_delete}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_extract.texi000066400000000000000000000016211411057217300235220ustar00rootroot00000000000000@node argz_extract @subsection @code{argz_extract} @findex argz_extract LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_extract.3.html,,man argz_extract}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_insert.texi000066400000000000000000000016141411057217300233560ustar00rootroot00000000000000@node argz_insert @subsection @code{argz_insert} @findex argz_insert LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_insert.3.html,,man argz_insert}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_next.texi000066400000000000000000000016021411057217300230250ustar00rootroot00000000000000@node argz_next @subsection @code{argz_next} @findex argz_next LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_next.3.html,,man argz_next}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_replace.texi000066400000000000000000000016211411057217300234630ustar00rootroot00000000000000@node argz_replace @subsection @code{argz_replace} @findex argz_replace LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_replace.3.html,,man argz_replace}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/argz_stringify.texi000066400000000000000000000016331411057217300240710ustar00rootroot00000000000000@node argz_stringify @subsection @code{argz_stringify} @findex argz_stringify LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-argz-add.html} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,Argz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz_stringify.3.html,,man argz_stringify}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/asprintf.texi000066400000000000000000000050051411057217300226530ustar00rootroot00000000000000@node asprintf @subsection @code{asprintf} @findex asprintf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-asprintf.html} Documentation: @itemize @item @ifinfo @ref{Dynamic Output,,Dynamically Allocating Formatted Output,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Dynamic-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/asprintf.3.html,,man asprintf}. @end itemize Gnulib module: vasprintf or vasprintf-posix Portability problems fixed by either Gnulib module @code{vasprintf} or @code{vasprintf-posix}: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{vasprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: Cygwin 1.5.24. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.0. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, Solaris 11.4, Cygwin 1.5.x. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, Cygwin 1.5.x. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11.0, Cygwin 1.5.x. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authdes_create.texi000066400000000000000000000005671411057217300240150ustar00rootroot00000000000000@node authdes_create @subsection @code{authdes_create} @findex authdes_create Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authdes_getucred.texi000066400000000000000000000005751411057217300243530ustar00rootroot00000000000000@node authdes_getucred @subsection @code{authdes_getucred} @findex authdes_getucred Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authdes_pk_create.texi000066400000000000000000000006701411057217300245020ustar00rootroot00000000000000@node authdes_pk_create @subsection @code{authdes_pk_create} @findex authdes_pk_create Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authnone_create.texi000066400000000000000000000007071411057217300241750ustar00rootroot00000000000000@node authnone_create @subsection @code{authnone_create} @findex authnone_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/authnone_create.3.html,,man authnone_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authunix_create.texi000066400000000000000000000007371411057217300242240ustar00rootroot00000000000000@node authunix_create @subsection @code{authunix_create} @findex authunix_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/authunix_create.3.html,,man authunix_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/authunix_create_default.texi000066400000000000000000000010071411057217300257170ustar00rootroot00000000000000@node authunix_create_default @subsection @code{authunix_create_default} @findex authunix_create_default Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/authunix_create_default.3.html,,man authunix_create_default} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/backtrace.texi000066400000000000000000000014651411057217300227520ustar00rootroot00000000000000@node backtrace @subsection @code{backtrace} @findex backtrace LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-backtrace-1.html} Documentation: @itemize @item @ifinfo @ref{Backtraces,,Backtraces,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Backtraces.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html,,man backtrace}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/backtrace_symbols.texi000066400000000000000000000015351411057217300245200ustar00rootroot00000000000000@node backtrace_symbols @subsection @code{backtrace_symbols} @findex backtrace_symbols LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-backtrace-1.html} Documentation: @itemize @item @ifinfo @ref{Backtraces,,Backtraces,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Backtraces.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/backtrace_symbols.3.html,,man backtrace_symbols}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/backtrace_symbols_fd.texi000066400000000000000000000015541411057217300251720ustar00rootroot00000000000000@node backtrace_symbols_fd @subsection @code{backtrace_symbols_fd} @findex backtrace_symbols_fd LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-backtrace-1.html} Documentation: @itemize @item @ifinfo @ref{Backtraces,,Backtraces,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Backtraces.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/backtrace_symbols_fd.3.html,,man backtrace_symbols_fd}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bdflush.texi000066400000000000000000000010511411057217300224510ustar00rootroot00000000000000@node bdflush @subsection @code{bdflush} @findex bdflush Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/bdflush.2.html,,man bdflush} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bind_textdomain_codeset.texi000066400000000000000000000017021411057217300257030ustar00rootroot00000000000000@node bind_textdomain_codeset @subsection @code{bind_textdomain_codeset} @findex bind_textdomain_codeset LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-bind-textdomain-codeset.html} Documentation: @itemize @item @ifinfo @ref{Charset conversion in gettext,,How to specify the output character set gettext uses,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Charset-conversion-in-gettext.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bind_textdomain_codeset.3.html,,man bind_textdomain_codeset}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bindresvport.texi000066400000000000000000000010721411057217300235460ustar00rootroot00000000000000@node bindresvport @subsection @code{bindresvport} @findex bindresvport LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-bindresvport-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bindresvport.3.html,,man bindresvport} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bindtextdomain.texi000066400000000000000000000015671411057217300240470ustar00rootroot00000000000000@node bindtextdomain @subsection @code{bindtextdomain} @findex bindtextdomain LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-bindtextdomain.html} Documentation: @itemize @item @ifinfo @ref{Locating gettext catalog,,How to determine which catalog to be used,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Locating-gettext-catalog.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bindtextdomain.3.html,,man bindtextdomain}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/brk.texi000066400000000000000000000011671411057217300216100ustar00rootroot00000000000000@node brk @subsection @code{brk} @findex brk Documentation: @itemize @item @ifinfo @ref{Resizing the Data Segment,,Resizing the Data Segment,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Resizing-the-Data-Segment.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html,,man brk}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 12.2/arm64, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bswap_16.texi000066400000000000000000000010021411057217300224400ustar00rootroot00000000000000@node bswap_16 @subsection @code{bswap_16} @findex bswap_16 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bswap_16.3.html,,man bswap_16} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bswap_32.texi000066400000000000000000000010021411057217300224360ustar00rootroot00000000000000@node bswap_32 @subsection @code{bswap_32} @findex bswap_32 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bswap_32.3.html,,man bswap_32} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/bswap_64.texi000066400000000000000000000010021411057217300224430ustar00rootroot00000000000000@node bswap_64 @subsection @code{bswap_64} @findex bswap_64 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/bswap_64.3.html,,man bswap_64} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/callrpc.texi000066400000000000000000000006371411057217300224530ustar00rootroot00000000000000@node callrpc @subsection @code{callrpc} @findex callrpc Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/callrpc.3.html,,man callrpc} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/canonicalize_file_name.texi000066400000000000000000000016201411057217300254620ustar00rootroot00000000000000@node canonicalize_file_name @subsection @code{canonicalize_file_name} @findex canonicalize_file_name Documentation: @itemize @item @ifinfo @ref{Symbolic Links,,Symbolic Links,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/canonicalize_file_name.3.html,,man canonicalize_file_name}. @end itemize Gnulib module: canonicalize-lgpl Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @item This function fails to detect trailing slashes on non-directories on some platforms: glibc 2.3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/capget.texi000066400000000000000000000010301411057217300222620ustar00rootroot00000000000000@node capget @subsection @code{capget} @findex capget Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/capget.2.html,,man capget} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/capset.texi000066400000000000000000000010301411057217300222760ustar00rootroot00000000000000@node capset @subsection @code{capset} @findex capset Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/capset.2.html,,man capset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/cfmakeraw.texi000066400000000000000000000014411411057217300227650ustar00rootroot00000000000000@node cfmakeraw @subsection @code{cfmakeraw} @findex cfmakeraw LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-cfmakeraw-3.html} Documentation: @itemize @item @ifinfo @ref{Noncanonical Input,,Noncanonical Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Noncanonical-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/cfmakeraw.3.html,,man cfmakeraw}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/cfree.texi000066400000000000000000000007101411057217300221070ustar00rootroot00000000000000@node cfree @subsection @code{cfree} @findex cfree Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/cfree.3.html,,man cfree} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/cfsetspeed.texi000066400000000000000000000014171411057217300231550ustar00rootroot00000000000000@node cfsetspeed @subsection @code{cfsetspeed} @findex cfsetspeed LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-cfsetspeed-3.html} Documentation: @itemize @item @ifinfo @ref{Line Speed,,Line Speed,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Line-Speed.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/cfsetspeed.3.html,,man cfsetspeed}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/chroot.texi000066400000000000000000000005751411057217300223320ustar00rootroot00000000000000@node chroot @subsection @code{chroot} @findex chroot Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/chroot.2.html,,man chroot} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clearenv.texi000066400000000000000000000012641411057217300226270ustar00rootroot00000000000000@node clearenv @subsection @code{clearenv} @findex clearenv Documentation: @itemize @item @ifinfo @ref{Environment Access,,Environment Access,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Environment-Access.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html,,man clearenv}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clearerr_unlocked.texi000066400000000000000000000015451411057217300245150ustar00rootroot00000000000000@node clearerr_unlocked @subsection @code{clearerr_unlocked} @findex clearerr_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-clearerr-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Error Recovery,,Recovering from errors,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Recovery.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clearerr_unlocked.3.html,,man clearerr_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_broadcast.texi000066400000000000000000000007021411057217300240060ustar00rootroot00000000000000@node clnt_broadcast @subsection @code{clnt_broadcast} @findex clnt_broadcast Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_broadcast.3.html,,man clnt_broadcast} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_create.texi000066400000000000000000000006631411057217300233150ustar00rootroot00000000000000@node clnt_create @subsection @code{clnt_create} @findex clnt_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_create.3.html,,man clnt_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_pcreateerror.texi000066400000000000000000000007211411057217300245420ustar00rootroot00000000000000@node clnt_pcreateerror @subsection @code{clnt_pcreateerror} @findex clnt_pcreateerror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_pcreateerror.3.html,,man clnt_pcreateerror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_perrno.texi000066400000000000000000000006631411057217300233570ustar00rootroot00000000000000@node clnt_perrno @subsection @code{clnt_perrno} @findex clnt_perrno Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_perrno.3.html,,man clnt_perrno} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_perror.texi000066400000000000000000000006631411057217300233630ustar00rootroot00000000000000@node clnt_perror @subsection @code{clnt_perror} @findex clnt_perror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_perror.3.html,,man clnt_perror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_spcreateerror.texi000066400000000000000000000007261411057217300247320ustar00rootroot00000000000000@node clnt_spcreateerror @subsection @code{clnt_spcreateerror} @findex clnt_spcreateerror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_spcreateerror.3.html,,man clnt_spcreateerror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_sperrno.texi000066400000000000000000000006701411057217300235400ustar00rootroot00000000000000@node clnt_sperrno @subsection @code{clnt_sperrno} @findex clnt_sperrno Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_sperrno.3.html,,man clnt_sperrno} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnt_sperror.texi000066400000000000000000000006701411057217300235440ustar00rootroot00000000000000@node clnt_sperror @subsection @code{clnt_sperror} @findex clnt_sperror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnt_sperror.3.html,,man clnt_sperror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clntraw_create.texi000066400000000000000000000007021411057217300240210ustar00rootroot00000000000000@node clntraw_create @subsection @code{clntraw_create} @findex clntraw_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clntraw_create.3.html,,man clntraw_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clnttcp_create.texi000066400000000000000000000007021411057217300240160ustar00rootroot00000000000000@node clnttcp_create @subsection @code{clnttcp_create} @findex clnttcp_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clnttcp_create.3.html,,man clnttcp_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clntudp_bufcreate.texi000066400000000000000000000007211411057217300245160ustar00rootroot00000000000000@node clntudp_bufcreate @subsection @code{clntudp_bufcreate} @findex clntudp_bufcreate Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clntudp_bufcreate.3.html,,man clntudp_bufcreate} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clntudp_create.texi000066400000000000000000000007021411057217300240200ustar00rootroot00000000000000@node clntudp_create @subsection @code{clntudp_create} @findex clntudp_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clntudp_create.3.html,,man clntudp_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clntunix_create.texi000066400000000000000000000006331411057217300242160ustar00rootroot00000000000000@node clntunix_create @subsection @code{clntunix_create} @findex clntunix_create Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clock_adjtime.texi000066400000000000000000000007371411057217300236240ustar00rootroot00000000000000@node clock_adjtime @subsection @code{clock_adjtime} @findex clock_adjtime Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clog10.texi000066400000000000000000000015411411057217300221130ustar00rootroot00000000000000@node clog10 @subsection @code{clog10} @findex clog10 LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib---clog10.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clog10.3.html,,man clog10}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clog10f.texi000066400000000000000000000015471411057217300222670ustar00rootroot00000000000000@node clog10f @subsection @code{clog10f} @findex clog10f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib---clog10f.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clog10f.3.html,,man clog10f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clog10l.texi000066400000000000000000000015611411057217300222710ustar00rootroot00000000000000@node clog10l @subsection @code{clog10l} @findex clog10l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib---clog10l.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/clog10l.3.html,,man clog10l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 9, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/clone.texi000066400000000000000000000007321411057217300221270ustar00rootroot00000000000000@node clone @subsection @code{clone} @findex clone Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/clone.2.html,,man clone} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/closefrom.texi000066400000000000000000000021441411057217300230170ustar00rootroot00000000000000@node closefrom @subsection @code{closefrom} @findex closefrom Documentation:@* @ifinfo @ref{Opening and Closing Files,,Opening and Closing Files,libc} @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Opening-and-Closing-Files.html} @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.33, macOS 11.1, FreeBSD 7.2, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Note (quoted from @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/close.3p.html,,man close}): ``The [POSIX] standard developers rejected a proposal to add @code{closefrom()} to the [POSIX] standard. Because the standard permits implementations to use inherited file descriptors as a means of providing a conforming environment for the child process, it is not possible to standardize an interface that closes arbitrary file descriptors above a certain value while still guaranteeing a conforming environment.'' gnulib-20210822~d383792/doc/glibc-functions/copy_file_range.texi000066400000000000000000000016471411057217300241620ustar00rootroot00000000000000@node copy_file_range @subsection @code{copy_file_range} @findex copy_file_range Documentation: @itemize @item @ifinfo @ref{Copying File Data,,Copying data between two files,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Copying-File-Data.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/copy_file_range.2.html,,man copy_file_range}. @end itemize Gnulib module: copy-file-range Portability problems fixed by Gnulib: @itemize @item This function exists only on Linux and FreeBSD and is therefore missing on many non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. But the replacement function is only a stub: It always fails with error ENOSYS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/cuserid.texi000066400000000000000000000012121411057217300224570ustar00rootroot00000000000000@node cuserid @subsection @code{cuserid} @findex cuserid Documentation: @itemize @item @ifinfo @ref{Who Logged In,,Identifying Who Logged In,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Who-Logged-In.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/cuserid.3.html,,man cuserid}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/daemon.texi000066400000000000000000000010331411057217300222650ustar00rootroot00000000000000@node daemon @subsection @code{daemon} @findex daemon LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-daemon-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/daemon.3.html,,man daemon} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dcgettext.texi000066400000000000000000000015331411057217300230220ustar00rootroot00000000000000@node dcgettext @subsection @code{dcgettext} @findex dcgettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dcgettext.html} Documentation: @itemize @item @ifinfo @ref{Translation with gettext,,What has to be done to translate a message?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Translation-with-gettext.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dcgettext.3.html,,man dcgettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dcngettext.texi000066400000000000000000000015561411057217300232050ustar00rootroot00000000000000@node dcngettext @subsection @code{dcngettext} @findex dcngettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dcngettext.html} Documentation: @itemize @item @ifinfo @ref{Advanced gettext functions,,Additional functions for more complicated situations,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Advanced-gettext-functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dcngettext.3.html,,man dcngettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dgettext.texi000066400000000000000000000015251411057217300226600ustar00rootroot00000000000000@node dgettext @subsection @code{dgettext} @findex dgettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dgettext.html} Documentation: @itemize @item @ifinfo @ref{Translation with gettext,,What has to be done to translate a message?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Translation-with-gettext.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dgettext.3.html,,man dgettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dl_iterate_phdr.texi000066400000000000000000000012331411057217300241550ustar00rootroot00000000000000@node dl_iterate_phdr @subsection @code{dl_iterate_phdr} @findex dl_iterate_phdr LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dl-iterate-phdr-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dl_iterate_phdr.3.html,,man dl_iterate_phdr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dladdr.texi000066400000000000000000000010371411057217300222600ustar00rootroot00000000000000@node dladdr @subsection @code{dladdr} @findex dladdr LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dladdr-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dladdr.3.html,,man dladdr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, IRIX 6.5, Cygwin 1.7.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dladdr1.texi000066400000000000000000000007571411057217300223510ustar00rootroot00000000000000@node dladdr1 @subsection @code{dladdr1} @findex dladdr1 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dladdr1.3.html,,man dladdr1} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dlinfo.texi000066400000000000000000000007341411057217300223040ustar00rootroot00000000000000@node dlinfo @subsection @code{dlinfo} @findex dlinfo Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dlinfo.3.html,,man dlinfo} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dlmopen.texi000066400000000000000000000007571411057217300224740ustar00rootroot00000000000000@node dlmopen @subsection @code{dlmopen} @findex dlmopen Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dlmopen.3.html,,man dlmopen} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dlvsym.texi000066400000000000000000000011761411057217300223500ustar00rootroot00000000000000@node dlvsym @subsection @code{dlvsym} @findex dlvsym LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dlvsym-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dlvsym.3.html,,man dlvsym} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dn_comp.texi000066400000000000000000000006721411057217300224510ustar00rootroot00000000000000@node dn_comp @subsection @code{dn_comp} @findex dn_comp Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dn_comp.3.html,,man dn_comp} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dn_expand.texi000066400000000000000000000006211411057217300227640ustar00rootroot00000000000000@node dn_expand @subsection @code{dn_expand} @findex dn_expand Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dn_expand.3.html,,man dn_expand} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dn_skipname.texi000066400000000000000000000007331411057217300233200ustar00rootroot00000000000000@node dn_skipname @subsection @code{dn_skipname} @findex dn_skipname Documentation:@* @uref{https://nixdoc.net/man-pages/FreeBSD/man3/dn_skipname.3.html,,man dn_skipname} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dngettext.texi000066400000000000000000000015501411057217300230340ustar00rootroot00000000000000@node dngettext @subsection @code{dngettext} @findex dngettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dngettext.html} Documentation: @itemize @item @ifinfo @ref{Advanced gettext functions,,Additional functions for more complicated situations,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Advanced-gettext-functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dngettext.3.html,,man dngettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/drand48_r.texi000066400000000000000000000015151411057217300226140ustar00rootroot00000000000000@node drand48_r @subsection @code{drand48_r} @findex drand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-drand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/drand48_r.3.html,,man drand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/drem.texi000066400000000000000000000013371411057217300217600ustar00rootroot00000000000000@node drem @subsection @code{drem} @findex drem LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-drem.html} Documentation: @itemize @item @ifinfo @ref{Remainder Functions,,Remainder Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Remainder-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/drem.3.html,,man drem}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dremf.texi000066400000000000000000000014041411057217300221210ustar00rootroot00000000000000@node dremf @subsection @code{dremf} @findex dremf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dremf.html} Documentation: @itemize @item @ifinfo @ref{Remainder Functions,,Remainder Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Remainder-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dremf.3.html,,man dremf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dreml.texi000066400000000000000000000015061411057217300221320ustar00rootroot00000000000000@node dreml @subsection @code{dreml} @findex dreml LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dreml.html} Documentation: @itemize @item @ifinfo @ref{Remainder Functions,,Remainder Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Remainder-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dreml.3.html,,man dreml}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/dup3.texi000066400000000000000000000011061411057217300216760ustar00rootroot00000000000000@node dup3 @subsection @code{dup3} @findex dup3 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html,,man dup3} Gnulib module: dup3 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 4.4. @item This function can crash on some platforms: Cygwin 1.7.25. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/dysize.texi000066400000000000000000000010011411057217300223240ustar00rootroot00000000000000@node dysize @subsection @code{dysize} @findex dysize Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/dysize.3.html,,man dysize} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/eaccess.texi000066400000000000000000000003541411057217300224350ustar00rootroot00000000000000@node eaccess @subsection @code{eaccess} @findex eaccess Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/eaccess.3.html,,man eaccess} This function is an alias of @code{euidaccess}. See @ref{euidaccess}. gnulib-20210822~d383792/doc/glibc-functions/ecvt_r.texi000066400000000000000000000013501411057217300223060ustar00rootroot00000000000000@node ecvt_r @subsection @code{ecvt_r} @findex ecvt_r Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ecvt_r.3.html,,man ecvt_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endaliasent.texi000066400000000000000000000010321411057217300233100ustar00rootroot00000000000000@node endaliasent @subsection @code{endaliasent} @findex endaliasent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endaliasent.3.html,,man endaliasent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endfsent.texi000066400000000000000000000011621411057217300226330ustar00rootroot00000000000000@node endfsent @subsection @code{endfsent} @findex endfsent Documentation: @itemize @item @ifinfo @ref{fstab,,The fstab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endfsent.3.html,,man endfsent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endmntent.texi000066400000000000000000000012211411057217300230150ustar00rootroot00000000000000@node endmntent @subsection @code{endmntent} @findex endmntent Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endmntent.3.html,,man endmntent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endnetgrent.texi000066400000000000000000000012061411057217300233410ustar00rootroot00000000000000@node endnetgrent @subsection @code{endnetgrent} @findex endnetgrent Documentation: @itemize @item @ifinfo @ref{Lookup Netgroup,,Looking up one Netgroup,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Lookup-Netgroup.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endnetgrent.3.html,,man endnetgrent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endrpcent.texi000066400000000000000000000006511411057217300230110ustar00rootroot00000000000000@node endrpcent @subsection @code{endrpcent} @findex endrpcent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endrpcent.3.html,,man endrpcent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endsgent.texi000066400000000000000000000006531411057217300226400ustar00rootroot00000000000000@node endsgent @subsection @code{endsgent} @findex endsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endspent.texi000066400000000000000000000007521411057217300226510ustar00rootroot00000000000000@node endspent @subsection @code{endspent} @findex endspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endspent.3.html,,man endspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endttyent.texi000066400000000000000000000006761411057217300230540ustar00rootroot00000000000000@node endttyent @subsection @code{endttyent} @findex endttyent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endttyent.3.html,,man endttyent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/endusershell.texi000066400000000000000000000010121411057217300235140ustar00rootroot00000000000000@node endusershell @subsection @code{endusershell} @findex endusershell Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endusershell.3.html,,man endusershell} Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, mingw, MSVC 14, Android 9.0. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/endutent.texi000066400000000000000000000014521411057217300226550ustar00rootroot00000000000000@node endutent @subsection @code{endutent} @findex endutent LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-endutent-3.html} Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/endutent.3.html,,man endutent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_add.texi000066400000000000000000000014731411057217300226240ustar00rootroot00000000000000@node envz_add @subsection @code{envz_add} @findex envz_add LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_add.3.html,,man envz_add}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_entry.texi000066400000000000000000000015051411057217300232310ustar00rootroot00000000000000@node envz_entry @subsection @code{envz_entry} @findex envz_entry LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_entry.3.html,,man envz_entry}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_get.texi000066400000000000000000000014731411057217300226530ustar00rootroot00000000000000@node envz_get @subsection @code{envz_get} @findex envz_get LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_get.3.html,,man envz_get}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_merge.texi000066400000000000000000000015051411057217300231670ustar00rootroot00000000000000@node envz_merge @subsection @code{envz_merge} @findex envz_merge LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_merge.3.html,,man envz_merge}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_remove.texi000066400000000000000000000015121411057217300233630ustar00rootroot00000000000000@node envz_remove @subsection @code{envz_remove} @findex envz_remove LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_remove.3.html,,man envz_remove}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/envz_strip.texi000066400000000000000000000015051411057217300232310ustar00rootroot00000000000000@node envz_strip @subsection @code{envz_strip} @findex envz_strip LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-envz-add.html} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,Envz Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz_strip.3.html,,man envz_strip}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/epoll_create.texi000066400000000000000000000013051411057217300234620ustar00rootroot00000000000000@node epoll_create @subsection @code{epoll_create} @findex epoll_create LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-epoll-create-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/epoll_create.2.html,,man epoll_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/epoll_create1.texi000066400000000000000000000011421411057217300235420ustar00rootroot00000000000000@node epoll_create1 @subsection @code{epoll_create1} @findex epoll_create1 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/epoll_create1.2.html,,man epoll_create1} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/epoll_ctl.texi000066400000000000000000000012631411057217300230040ustar00rootroot00000000000000@node epoll_ctl @subsection @code{epoll_ctl} @findex epoll_ctl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-epoll-ctl-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/epoll_ctl.2.html,,man epoll_ctl} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/epoll_pwait.texi000066400000000000000000000011301411057217300233370ustar00rootroot00000000000000@node epoll_pwait @subsection @code{epoll_pwait} @findex epoll_pwait Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/epoll_pwait.2.html,,man epoll_pwait} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/epoll_wait.texi000066400000000000000000000012711411057217300231650ustar00rootroot00000000000000@node epoll_wait @subsection @code{epoll_wait} @findex epoll_wait LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-epoll-wait-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/epoll_wait.2.html,,man epoll_wait} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/erand48_r.texi000066400000000000000000000015151411057217300226150ustar00rootroot00000000000000@node erand48_r @subsection @code{erand48_r} @findex erand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-erand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/erand48_r.3.html,,man erand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/err.texi000066400000000000000000000013201411057217300216110ustar00rootroot00000000000000@node err @subsection @code{err} @findex err LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-err-3.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/err.3.html,,man err}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/error.texi000066400000000000000000000015051411057217300221570ustar00rootroot00000000000000@node error @subsection @code{error} @findex error LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-error-n.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error.3.html,,man error}. @end itemize Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/error_at_line.texi000066400000000000000000000013611411057217300236520ustar00rootroot00000000000000@node error_at_line @subsection @code{error_at_line} @findex error_at_line Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error_at_line.3.html,,man error_at_line}. @end itemize Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/error_message_count.texi000066400000000000000000000014171411057217300250750ustar00rootroot00000000000000@node error_message_count @subsection @code{error_message_count} @findex error_message_count Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error_message_count.3.html,,man error_message_count}. @end itemize Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/error_one_per_line.texi000066400000000000000000000014121411057217300246720ustar00rootroot00000000000000@node error_one_per_line @subsection @code{error_one_per_line} @findex error_one_per_line Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error_one_per_line.3.html,,man error_one_per_line}. @end itemize Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/error_print_progname.texi000066400000000000000000000011141411057217300252570ustar00rootroot00000000000000@node error_print_progname @subsection @code{error_print_progname} @findex error_print_progname Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error_print_progname.3.html,,man error_print_progname} Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/errx.texi000066400000000000000000000013261411057217300220070ustar00rootroot00000000000000@node errx @subsection @code{errx} @findex errx LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-errx-3.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/errx.3.html,,man errx}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_aton.texi000066400000000000000000000006531411057217300231610ustar00rootroot00000000000000@node ether_aton @subsection @code{ether_aton} @findex ether_aton Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_aton.3.html,,man ether_aton} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 2.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_aton_r.texi000066400000000000000000000010141411057217300234720ustar00rootroot00000000000000@node ether_aton_r @subsection @code{ether_aton_r} @findex ether_aton_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_aton_r.3.html,,man ether_aton_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 2.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_hostton.texi000066400000000000000000000006721411057217300237170ustar00rootroot00000000000000@node ether_hostton @subsection @code{ether_hostton} @findex ether_hostton Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_hostton.3.html,,man ether_hostton} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_line.texi000066400000000000000000000006531411057217300231470ustar00rootroot00000000000000@node ether_line @subsection @code{ether_line} @findex ether_line Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_line.3.html,,man ether_line} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_ntoa.texi000066400000000000000000000006531411057217300231610ustar00rootroot00000000000000@node ether_ntoa @subsection @code{ether_ntoa} @findex ether_ntoa Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_ntoa.3.html,,man ether_ntoa} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 2.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_ntoa_r.texi000066400000000000000000000010141411057217300234720ustar00rootroot00000000000000@node ether_ntoa_r @subsection @code{ether_ntoa_r} @findex ether_ntoa_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_ntoa_r.3.html,,man ether_ntoa_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 2.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ether_ntohost.texi000066400000000000000000000006721411057217300237170ustar00rootroot00000000000000@node ether_ntohost @subsection @code{ether_ntohost} @findex ether_ntohost Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ether_ntohost.3.html,,man ether_ntohost} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/euidaccess.texi000066400000000000000000000017771411057217300231510ustar00rootroot00000000000000@node euidaccess @subsection @code{euidaccess} @findex euidaccess Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/euidaccess.3.html,,man euidaccess} Gnulib module: euidaccess Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Other problems of this function: @itemize @item There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. @item This function does not have an option for not following symbolic links (like @code{stat} versus @code{lstat}). If you need this option, use the Gnulib module @code{faccessat} with the @code{AT_EACCESS} flag. @end itemize gnulib-20210822~d383792/doc/glibc-functions/eventfd.texi000066400000000000000000000011011411057217300224510ustar00rootroot00000000000000@node eventfd @subsection @code{eventfd} @findex eventfd Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/eventfd.2.html,,man eventfd} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux, FreeBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/eventfd_read.texi000066400000000000000000000011321411057217300234500ustar00rootroot00000000000000@node eventfd_read @subsection @code{eventfd_read} @findex eventfd_read Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/eventfd_read.3.html,,man eventfd_read} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux, FreeBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/eventfd_write.texi000066400000000000000000000011371411057217300236740ustar00rootroot00000000000000@node eventfd_write @subsection @code{eventfd_write} @findex eventfd_write Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/eventfd_write.3.html,,man eventfd_write} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux, FreeBSD, and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/execveat.texi000066400000000000000000000010471411057217300226330ustar00rootroot00000000000000@node execveat @subsection @code{execveat} @findex execveat Documentation: @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/execveat.2.html,,man execveat}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.33/Linux, glibc 2.34/Hurd, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/execvpe.texi000066400000000000000000000022401411057217300224620ustar00rootroot00000000000000@node execvpe @subsection @code{execvpe} @findex execvpe Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/execvpe.3.html,,man execvpe} Gnulib module: execvpe Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.10, macOS 11.1, FreeBSD 13.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, Android 4.4. @item This function is not declared on some platforms: AIX 7.1. @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/exp10.texi000066400000000000000000000015321411057217300217630ustar00rootroot00000000000000@node exp10 @subsection @code{exp10} @findex exp10 LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-exp10.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/exp10.3.html,,man exp10}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/exp10f.texi000066400000000000000000000015401411057217300221300ustar00rootroot00000000000000@node exp10f @subsection @code{exp10f} @findex exp10f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-exp10f.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/exp10f.3.html,,man exp10f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/exp10l.texi000066400000000000000000000015521411057217300221410ustar00rootroot00000000000000@node exp10l @subsection @code{exp10l} @findex exp10l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-exp10l.html} Documentation: @itemize @item @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/exp10l.3.html,,man exp10l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/explicit_bzero.texi000066400000000000000000000025101411057217300240450ustar00rootroot00000000000000@node explicit_bzero @subsection @code{explicit_bzero} @findex explicit_bzero Documentation: @itemize @item @ifinfo @ref{Erasing Sensitive Data,,Erasing Sensitive Data,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Erasing-Sensitive-Data.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/explicit_bzero.3.html,,man explicit_bzero}. @end itemize Gnulib module: explicit_bzero The @code{explicit_bzero} function is an approximation to what is needed, and does not suffice in general to erase information. Although calling @code{explicit_bzero} should clear the memory in question, the information that was in memory may still be available elsewhere on the machine. Proper implementation of information erasure requires support from levels below C code. Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.24, FreeBSD 10, NetBSD 7.1, OpenBSD 5.4, macOS 10.12, Solaris 11.4, Android 9.0, and many other systems. @end itemize Portability problems not fixed by Gnulib: @itemize @item Although the module's implementation should clear the memory on platforms compatible with GCC and on platforms using traditional linkers, it may not clear the memory on non-GCC platforms that use whole-program optimization. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fallocate.texi000066400000000000000000000014421411057217300227600ustar00rootroot00000000000000@node fallocate @subsection @code{fallocate} @findex fallocate Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fallocate.2.html,,man fallocate} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on older glibc versions and many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fanotify_init.texi000066400000000000000000000011261411057217300236670ustar00rootroot00000000000000@node fanotify_init @subsection @code{fanotify_init} @findex fanotify_init Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fanotify_init.2.html,,man fanotify_init} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fanotify_mark.texi000066400000000000000000000011261411057217300236560ustar00rootroot00000000000000@node fanotify_mark @subsection @code{fanotify_mark} @findex fanotify_mark Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fanotify_mark.2.html,,man fanotify_mark} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fcloseall.texi000066400000000000000000000014321411057217300227710ustar00rootroot00000000000000@node fcloseall @subsection @code{fcloseall} @findex fcloseall Documentation: @itemize @item @ifinfo @ref{Closing Streams,,Closing Streams,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Closing-Streams.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fcloseall.3.html,,man fcloseall}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, Android 9.0. @item This functions returns @code{void} instead of @code{int} on some platforms: FreeBSD 13.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fcvt_r.texi000066400000000000000000000013501411057217300223070ustar00rootroot00000000000000@node fcvt_r @subsection @code{fcvt_r} @findex fcvt_r Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fcvt_r.3.html,,man fcvt_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fedisableexcept.texi000066400000000000000000000016141411057217300241560ustar00rootroot00000000000000@node fedisableexcept @subsection @code{fedisableexcept} @findex fedisableexcept LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fedisableexcept.html} Documentation: @itemize @item @ifinfo @ref{Control Functions,,Floating-Point Control Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Control-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fedisableexcept.3.html,,man fedisableexcept}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/feenableexcept.texi000066400000000000000000000016061411057217300240020ustar00rootroot00000000000000@node feenableexcept @subsection @code{feenableexcept} @findex feenableexcept LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-feenableexcept.html} Documentation: @itemize @item @ifinfo @ref{Control Functions,,Floating-Point Control Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Control-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/feenableexcept.3.html,,man feenableexcept}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fegetexcept.texi000066400000000000000000000015751411057217300233400ustar00rootroot00000000000000@node fegetexcept @subsection @code{fegetexcept} @findex fegetexcept LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fegetexcept.html} Documentation: @itemize @item @ifinfo @ref{Control Functions,,Floating-Point Control Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Control-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fegetexcept.3.html,,man fegetexcept}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/feof_unlocked.texi000066400000000000000000000015151411057217300236320ustar00rootroot00000000000000@node feof_unlocked @subsection @code{feof_unlocked} @findex feof_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-feof-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{EOF and Errors,,End-Of-File and Errors,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/EOF-and-Errors.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/feof_unlocked.3.html,,man feof_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ferror_unlocked.texi000066400000000000000000000015311411057217300242100ustar00rootroot00000000000000@node ferror_unlocked @subsection @code{ferror_unlocked} @findex ferror_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ferror-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{EOF and Errors,,End-Of-File and Errors,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/EOF-and-Errors.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ferror_unlocked.3.html,,man ferror_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fflush_unlocked.texi000066400000000000000000000015731411057217300242060ustar00rootroot00000000000000@node fflush_unlocked @subsection @code{fflush_unlocked} @findex fflush_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fflush-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Flushing Buffers,,Flushing Buffers,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Flushing-Buffers.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fflush_unlocked.3.html,,man fflush_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ffsl.texi000066400000000000000000000011231411057217300217540ustar00rootroot00000000000000@node ffsl @subsection @code{ffsl} @findex ffsl Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ffsl.3.html,,man ffsl} Gnulib module: ffsl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function is declared in @code{} instead of @code{} on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/ffsll.texi000066400000000000000000000013171411057217300221350ustar00rootroot00000000000000@node ffsll @subsection @code{ffsll} @findex ffsll Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ffsll.3.html,,man ffsll} Gnulib module: ffsll Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function is declared in @code{} instead of @code{} on some platforms: AIX 7.2. @item This function returns completely wrong values on some platforms: AIX 7.2 in 32-bit mode. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetc_unlocked.texi000066400000000000000000000015741411057217300240100ustar00rootroot00000000000000@node fgetc_unlocked @subsection @code{fgetc_unlocked} @findex fgetc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fgetc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Character Input,,Character Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Character-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetc_unlocked.3.html,,man fgetc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetfilecon.texi000066400000000000000000000003271411057217300233140ustar00rootroot00000000000000@node fgetfilecon @subsection @code{fgetfilecon} @findex fgetfilecon Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetfilecon.3.html,,man fgetfilecon} @getfileconDesc{fgetfilecon} gnulib-20210822~d383792/doc/glibc-functions/fgetgrent.texi000066400000000000000000000012771411057217300230210ustar00rootroot00000000000000@node fgetgrent @subsection @code{fgetgrent} @findex fgetgrent Documentation: @itemize @item @ifinfo @ref{Scanning All Groups,,Scanning the List of All Groups,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetgrent.3.html,,man fgetgrent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetgrent_r.texi000066400000000000000000000013231411057217300233320ustar00rootroot00000000000000@node fgetgrent_r @subsection @code{fgetgrent_r} @findex fgetgrent_r Documentation: @itemize @item @ifinfo @ref{Scanning All Groups,,Scanning the List of All Groups,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetgrent_r.3.html,,man fgetgrent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetpwent.texi000066400000000000000000000012741411057217300230340ustar00rootroot00000000000000@node fgetpwent @subsection @code{fgetpwent} @findex fgetpwent Documentation: @itemize @item @ifinfo @ref{Scanning All Users,,Scanning the List of All Users,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Users.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetpwent.3.html,,man fgetpwent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetpwent_r.texi000066400000000000000000000013201411057217300233450ustar00rootroot00000000000000@node fgetpwent_r @subsection @code{fgetpwent_r} @findex fgetpwent_r Documentation: @itemize @item @ifinfo @ref{Scanning All Users,,Scanning the List of All Users,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Users.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetpwent_r.3.html,,man fgetpwent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgets_unlocked.texi000066400000000000000000000015541411057217300240260ustar00rootroot00000000000000@node fgets_unlocked @subsection @code{fgets_unlocked} @findex fgets_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fgets-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Line Input,,Line-Oriented Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Line-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgets_unlocked.3.html,,man fgets_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetsgent.texi000066400000000000000000000006561411057217300230220ustar00rootroot00000000000000@node fgetsgent @subsection @code{fgetsgent} @findex fgetsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetsgent_r.texi000066400000000000000000000006641411057217300233420ustar00rootroot00000000000000@node fgetsgent_r @subsection @code{fgetsgent_r} @findex fgetsgent_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetspent.texi000066400000000000000000000007571411057217300230350ustar00rootroot00000000000000@node fgetspent @subsection @code{fgetspent} @findex fgetspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetspent.3.html,,man fgetspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetspent_r.texi000066400000000000000000000007711411057217300233520ustar00rootroot00000000000000@node fgetspent_r @subsection @code{fgetspent_r} @findex fgetspent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetspent_r.3.html,,man fgetspent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetwc_unlocked.texi000066400000000000000000000020061411057217300241660ustar00rootroot00000000000000@node fgetwc_unlocked @subsection @code{fgetwc_unlocked} @findex fgetwc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fgetwc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Character Input,,Character Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Character-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetwc_unlocked.3.html,,man fgetwc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetws_unlocked.texi000066400000000000000000000017771411057217300242240ustar00rootroot00000000000000@node fgetws_unlocked @subsection @code{fgetws_unlocked} @findex fgetws_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fgetws-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Line Input,,Line-Oriented Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Line-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fgetws_unlocked.3.html,,man fgetws_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fgetxattr.texi000066400000000000000000000011401411057217300230310ustar00rootroot00000000000000@node fgetxattr @subsection @code{fgetxattr} @findex fgetxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fgetxattr.2.html,,man fgetxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @item This function has extra @code{offset} and @code{options} parameters: macOS 11.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fileno_unlocked.texi000066400000000000000000000015541411057217300241720ustar00rootroot00000000000000@node fileno_unlocked @subsection @code{fileno_unlocked} @findex fileno_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fileno-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Descriptors and Streams,,Descriptors and Streams,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Descriptors-and-Streams.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fileno_unlocked.3.html,,man fileno_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/finite.texi000066400000000000000000000013671411057217300223120ustar00rootroot00000000000000@node finite @subsection @code{finite} @findex finite LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-finite.html} Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/finite.3.html,,man finite}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/finitef.texi000066400000000000000000000014611411057217300224530ustar00rootroot00000000000000@node finitef @subsection @code{finitef} @findex finitef LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-finitef.html} Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/finitef.3.html,,man finitef}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/finitel.texi000066400000000000000000000015631411057217300224640ustar00rootroot00000000000000@node finitel @subsection @code{finitel} @findex finitel LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-finitel.html} Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/finitel.3.html,,man finitel}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/flistxattr.texi000066400000000000000000000010161411057217300232270ustar00rootroot00000000000000@node flistxattr @subsection @code{flistxattr} @findex flistxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/flistxattr.2.html,,man flistxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/flock.texi000066400000000000000000000012201411057217300221160ustar00rootroot00000000000000@node flock @subsection @code{flock} @findex flock LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-flock-2.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/flock.2.html,,man flock} Gnulib module: flock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14 @item This function is missing on some platforms: AIX 7.1, HP-UX 11.23, Solaris 11.4. But the replacement function does not really work; it exhibits test failures. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/fopencookie.texi000066400000000000000000000013721411057217300233310ustar00rootroot00000000000000@node fopencookie @subsection @code{fopencookie} @findex fopencookie Documentation: @itemize @item @ifinfo @ref{Streams and Cookies,,Custom Streams and Cookies,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Streams-and-Cookies.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fopencookie.3.html,,man fopencookie}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/forkpty.texi000066400000000000000000000023601411057217300225240ustar00rootroot00000000000000@node forkpty @subsection @code{forkpty} @findex forkpty Documentation: @itemize @item @ifinfo @ref{Pseudo-Terminal Pairs,,Opening a Pseudo-Terminal Pair,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Pseudo_002dTerminal-Pairs.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/forkpty.3.html,,man forkpty}. @end itemize Gnulib module: forkpty Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Android 5.1. @item One some systems (at least including Cygwin and Mac OS X) linking with @code{-lutil} is not required. @item On glibc, OpenBSD, NetBSD and FreeBSD linking with @code{-lutil} is required. @item The function is declared in pty.h on glibc and Cygwin. It is declared in util.h on Mac OS X, OpenBSD, and NetBSD. It is declared in libutil.h on FreeBSD. It is declared in termios.h on Solaris. @item Some platforms declare the function without marking the last two parameters @code{const}. FreeBSD 13.0, Solaris 11.4, Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fputc_unlocked.texi000066400000000000000000000016031411057217300240320ustar00rootroot00000000000000@node fputc_unlocked @subsection @code{fputc_unlocked} @findex fputc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fputc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fputc_unlocked.3.html,,man fputc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fputs_unlocked.texi000066400000000000000000000016151411057217300240550ustar00rootroot00000000000000@node fputs_unlocked @subsection @code{fputs_unlocked} @findex fputs_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fputs-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fputs_unlocked.3.html,,man fputs_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fputwc_unlocked.texi000066400000000000000000000020271411057217300242220ustar00rootroot00000000000000@node fputwc_unlocked @subsection @code{fputwc_unlocked} @findex fputwc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fputwc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fputwc_unlocked.3.html,,man fputwc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fputws_unlocked.texi000066400000000000000000000020271411057217300242420ustar00rootroot00000000000000@node fputws_unlocked @subsection @code{fputws_unlocked} @findex fputws_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fputws-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fputws_unlocked.3.html,,man fputws_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fread_unlocked.texi000066400000000000000000000015771411057217300240040ustar00rootroot00000000000000@node fread_unlocked @subsection @code{fread_unlocked} @findex fread_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fread-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Block Input/Output,,Block Input/Output,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Block-Input_002fOutput.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fread_unlocked.3.html,,man fread_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/freeifaddrs.texi000066400000000000000000000007211411057217300233030ustar00rootroot00000000000000@node freeifaddrs @subsection @code{freeifaddrs} @findex freeifaddrs Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/freeifaddrs.3.html,,man freeifaddrs} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fremovexattr.texi000066400000000000000000000010301411057217300235450ustar00rootroot00000000000000@node fremovexattr @subsection @code{fremovexattr} @findex fremovexattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fremovexattr.2.html,,man fremovexattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fsetxattr.texi000066400000000000000000000010111411057217300230420ustar00rootroot00000000000000@node fsetxattr @subsection @code{fsetxattr} @findex fsetxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fsetxattr.2.html,,man fsetxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fstatfs.texi000066400000000000000000000013541411057217300225020ustar00rootroot00000000000000@node fstatfs @subsection @code{fstatfs} @findex fstatfs LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fstatfs-2.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/fstatfs.2.html,,man fstatfs} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. @item On platforms where @code{f_blocks} in @samp{struct statfs} is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. This affects Mac OS X. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fts_children.texi000066400000000000000000000015201411057217300234670ustar00rootroot00000000000000@node fts_children @subsection @code{fts_children} @findex fts_children Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts_children.3.html,,man fts_children} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB and may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. The fix is to use the @code{AC_SYS_LARGEFILE} macro (only on Mac OS X systems). @end itemize gnulib-20210822~d383792/doc/glibc-functions/fts_close.texi000066400000000000000000000006561411057217300230150ustar00rootroot00000000000000@node fts_close @subsection @code{fts_close} @findex fts_close Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts_close.3.html,,man fts_close} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fts_open.texi000066400000000000000000000006511411057217300226440ustar00rootroot00000000000000@node fts_open @subsection @code{fts_open} @findex fts_open Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts_open.3.html,,man fts_open} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fts_read.texi000066400000000000000000000014741411057217300226220ustar00rootroot00000000000000@node fts_read @subsection @code{fts_read} @findex fts_read Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts_read.3.html,,man fts_read} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB and may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. The fix is to use the @code{AC_SYS_LARGEFILE} macro (only on Mac OS X systems). @end itemize gnulib-20210822~d383792/doc/glibc-functions/fts_set.texi000066400000000000000000000006441411057217300225000ustar00rootroot00000000000000@node fts_set @subsection @code{fts_set} @findex fts_set Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts_set.3.html,,man fts_set} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/futimes.texi000066400000000000000000000015301411057217300225000ustar00rootroot00000000000000@node futimes @subsection @code{futimes} @findex futimes LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-futimes.html} Documentation: @itemize @item @ifinfo @ref{File Times,,File Times,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/File-Times.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/futimes.3.html,,man futimes}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 7.1. @item This function cannot set full timestamp resolution. Use @code{futimens(fd,times)} instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/futimesat.texi000066400000000000000000000014521411057217300230300ustar00rootroot00000000000000@node futimesat @subsection @code{futimesat} @findex futimesat Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/futimesat.2.html,,man futimesat} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. @item On some platforms, this function mis-handles a trailing slash: Solaris 9. @item This function cannot set full timestamp resolution. Use @example file ? utimensat(fd, file, times, 0) : futimens(fd, times) @end example @noindent or the gnulib module @code{fdutimensat}, instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/fwrite_unlocked.texi000066400000000000000000000016051411057217300242130ustar00rootroot00000000000000@node fwrite_unlocked @subsection @code{fwrite_unlocked} @findex fwrite_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fwrite-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Block Input/Output,,Block Input/Output,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Block-Input_002fOutput.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fwrite_unlocked.3.html,,man fwrite_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gamma.texi000066400000000000000000000013071411057217300221100ustar00rootroot00000000000000@node gamma @subsection @code{gamma} @findex gamma LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gamma.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gamma.3.html,,man gamma}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gammaf.texi000066400000000000000000000013661411057217300222630ustar00rootroot00000000000000@node gammaf @subsection @code{gammaf} @findex gammaf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gammaf.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gammaf.3.html,,man gammaf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gammal.texi000066400000000000000000000014661411057217300222720ustar00rootroot00000000000000@node gammal @subsection @code{gammal} @findex gammal LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gammal.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gammal.3.html,,man gammal}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/get_avphys_pages.texi000066400000000000000000000014641411057217300243620ustar00rootroot00000000000000@node get_avphys_pages @subsection @code{get_avphys_pages} @findex get_avphys_pages Documentation: @itemize @item @ifinfo @ref{Query Memory Parameters,,How to get information about the memory subsystem?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Query-Memory-Parameters.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_avphys_pages.3.html,,man get_avphys_pages}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/get_current_dir_name.texi000066400000000000000000000014101411057217300252000ustar00rootroot00000000000000@node get_current_dir_name @subsection @code{get_current_dir_name} @findex get_current_dir_name Documentation: @itemize @item @ifinfo @ref{Working Directory,,Working Directory,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Working-Directory.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_current_dir_name.3.html,,man get_current_dir_name}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/get_myaddress.texi000066400000000000000000000006751411057217300236670ustar00rootroot00000000000000@node get_myaddress @subsection @code{get_myaddress} @findex get_myaddress Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_myaddress.3.html,,man get_myaddress} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/get_nprocs.texi000066400000000000000000000015511411057217300231720ustar00rootroot00000000000000@node get_nprocs @subsection @code{get_nprocs} @findex get_nprocs Documentation: @itemize @item @ifinfo @ref{Processor Resources,,Learn about the processors available,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Processor-Resources.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_nprocs.3.html,,man get_nprocs}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. @end itemize Gnulib provides the module @code{nproc} that performs a similar function but is portable to more systems. gnulib-20210822~d383792/doc/glibc-functions/get_nprocs_conf.texi000066400000000000000000000014271411057217300242010ustar00rootroot00000000000000@node get_nprocs_conf @subsection @code{get_nprocs_conf} @findex get_nprocs_conf Documentation: @itemize @item @ifinfo @ref{Processor Resources,,Learn about the processors available,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Processor-Resources.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_nprocs_conf.3.html,,man get_nprocs_conf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/get_phys_pages.texi000066400000000000000000000014521411057217300240300ustar00rootroot00000000000000@node get_phys_pages @subsection @code{get_phys_pages} @findex get_phys_pages Documentation: @itemize @item @ifinfo @ref{Query Memory Parameters,,How to get information about the memory subsystem?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Query-Memory-Parameters.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/get_phys_pages.3.html,,man get_phys_pages}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.1, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getaliasbyname.texi000066400000000000000000000010511411057217300240070ustar00rootroot00000000000000@node getaliasbyname @subsection @code{getaliasbyname} @findex getaliasbyname Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getaliasbyname.3.html,,man getaliasbyname} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getaliasbyname_r.texi000066400000000000000000000010631411057217300243330ustar00rootroot00000000000000@node getaliasbyname_r @subsection @code{getaliasbyname_r} @findex getaliasbyname_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getaliasbyname_r.3.html,,man getaliasbyname_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getaliasent.texi000066400000000000000000000010321411057217300233210ustar00rootroot00000000000000@node getaliasent @subsection @code{getaliasent} @findex getaliasent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getaliasent.3.html,,man getaliasent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getaliasent_r.texi000066400000000000000000000010441411057217300236450ustar00rootroot00000000000000@node getaliasent_r @subsection @code{getaliasent_r} @findex getaliasent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getaliasent_r.3.html,,man getaliasent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getauxval.texi000066400000000000000000000013411411057217300230240ustar00rootroot00000000000000@node getauxval @subsection @code{getauxval} @findex getauxval Documentation: @itemize @item @ifinfo @ref{Auxiliary Vector,,Auxiliary Vector,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Auxiliary-Vector.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getauxval.3.html,,man getauxval}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getcpu.texi000066400000000000000000000014131411057217300223130ustar00rootroot00000000000000@node getcpu @subsection @code{getcpu} @findex getcpu Documentation: @itemize @item @ifinfo @ref{CPU Affinity,,Limiting execution to certain CPUs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getcpu.2.html,,man getcpu}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.28, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getdate_r.texi000066400000000000000000000014031411057217300227610ustar00rootroot00000000000000@node getdate_r @subsection @code{getdate_r} @findex getdate_r Documentation: @itemize @item @ifinfo @ref{General Time String Parsing,,A More User-friendly Way to Parse Times and Dates,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/General-Time-String-Parsing.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getdate_r.3.html,,man getdate_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getdirentries.texi000066400000000000000000000012341411057217300236750ustar00rootroot00000000000000@node getdirentries @subsection @code{getdirentries} @findex getdirentries Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getdirentries.3.html,,man getdirentries} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getdomainname.texi000066400000000000000000000020001411057217300236250ustar00rootroot00000000000000@node getdomainname @subsection @code{getdomainname} @findex getdomainname LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getdomainname.html} Documentation: @itemize @item @ifinfo @ref{Host Identification,,Host Identification,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Identification.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getdomainname.2.html,,man getdomainname}. @end itemize Gnulib module: getdomainname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 11.3, mingw, MSVC 14, Android 7.1. @item This function is declared in @code{netdb.h}, not in @code{unistd.h}, on some platforms: AIX 7.1. @item The second argument is of type @code{int}, not @code{size_t}, on some platforms: macOS 11.1, FreeBSD 13.0, AIX 7.1, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getdtablesize.texi000066400000000000000000000020271411057217300236540ustar00rootroot00000000000000@node getdtablesize @subsection @code{getdtablesize} @findex getdtablesize SUSv2 specification: @url{https://pubs.opengroup.org/onlinepubs/7908799/xsh/getdtablesize.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getdtablesize.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getdtablesize.3.html,,man getdtablesize} Gnulib module: getdtablesize Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Android LP64, mingw, MSVC 14, Android 9.0. @item This function is not declared on some platforms: Android LP32. @item This function does not represent the true @code{RLIMIT_NOFILE} soft limit on some platforms: Android LP32, Cygwin 1.7.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item On OpenVMS, this function returns the maximum number of open file descriptors in a process. The possible values of file descriptors are not constrained by this function. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getentropy.texi000066400000000000000000000031561411057217300232320ustar00rootroot00000000000000@node getentropy @subsection @code{getentropy} @findex getentropy Documentation: @itemize @item @ifinfo @ref{Unpredictable Bytes,,Generating Unpredictable Bytes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Unpredictable-Bytes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getentropy.3.html,,man getentropy}. @end itemize Gnulib module: getentropy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.24, Mac OS X 10.11, FreeBSD 11.0, NetBSD 9.0, OpenBSD 5.5, Minix 3.3, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function is declared in @code{}, not in @code{}, on some platforms: macOS 11.1, Solaris 11.4, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize @noindent Although this function is intended to produce random data, the data's security properties may not be appropriate for your application. For example, identical ``random'' data streams might be produced by rebooted virtual machines. If this is of concern you may need to use additional techniques such as hedging.@footnote{Ristenpart T, Yilek S@. @url{http://pages.cs.wisc.edu/~rist/papers/sslhedge.pdf, When good randomness goes bad: virtual machine vulnerabilities and hedging deployed cryptography}. NDSS 2010.} Related modules include @code{getrandom}, which has a more-flexible but more-complex API, and @code{crypto/gc-random}, which is likely a better match for code already using the other @code{crypto} APIs. gnulib-20210822~d383792/doc/glibc-functions/getfilecon-desc.texi000066400000000000000000000022441411057217300240620ustar00rootroot00000000000000@macro getfileconDesc{fn} Gnulib module: selinux-h Portability problems fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. On those platforms, this module provides a stub that always sets @code{errno} to @code{ENOTSUP} and returns @samp{-1}. @item On systems with SELinux support, this module provides a wrapper for the @code{\fn\} function that insulates the caller from API-nonconforming behavior. Without this wrapper, @code{\fn\} can return @samp{0} and set the @code{context} pointer to NULL, and in another scenario can return @samp{10} and set the @code{context} pointer to @samp{unlabeled}. This wrapper returns @samp{-1} in each case and sets @code{errno} to @code{ENOTSUP} and @code{ENODATA} respectively. While the conditions that can provoke such behavior are rare, the average caller does not handle them because the possibility of such behavior is not documented. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize @end macro gnulib-20210822~d383792/doc/glibc-functions/getfilecon.texi000066400000000000000000000003211411057217300231400ustar00rootroot00000000000000@node getfilecon @subsection @code{getfilecon} @findex getfilecon Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getfilecon.3.html,,man getfilecon} @getfileconDesc{getfilecon} gnulib-20210822~d383792/doc/glibc-functions/getfsent.texi000066400000000000000000000011621411057217300226440ustar00rootroot00000000000000@node getfsent @subsection @code{getfsent} @findex getfsent Documentation: @itemize @item @ifinfo @ref{fstab,,The fstab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getfsent.3.html,,man getfsent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getfsfile.texi000066400000000000000000000011671411057217300230020ustar00rootroot00000000000000@node getfsfile @subsection @code{getfsfile} @findex getfsfile Documentation: @itemize @item @ifinfo @ref{fstab,,The fstab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getfsfile.3.html,,man getfsfile}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getfsspec.texi000066400000000000000000000011671411057217300230150ustar00rootroot00000000000000@node getfsspec @subsection @code{getfsspec} @findex getfsspec Documentation: @itemize @item @ifinfo @ref{fstab,,The fstab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getfsspec.3.html,,man getfsspec}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getgrent_r.texi000066400000000000000000000014651411057217300231730ustar00rootroot00000000000000@node getgrent_r @subsection @code{getgrent_r} @findex getgrent_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getgrent-r-1.html} Documentation: @itemize @item @ifinfo @ref{Scanning All Groups,,Scanning the List of All Groups,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getgrent_r.3.html,,man getgrent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getgrouplist.texi000066400000000000000000000017171411057217300235630ustar00rootroot00000000000000@node getgrouplist @subsection @code{getgrouplist} @findex getgrouplist LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getgrouplist-3.html} Documentation: @itemize @item @ifinfo @ref{Setting Groups,,Setting the Group IDs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Setting-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getgrouplist.3.html,,man getgrouplist}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function takes @code{int} instead of @code{gid_t} parameters on some platforms: OS X 10.11. @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.0, Cygwin 1.7.9, mingw, MSVC 14. @end itemize The Gnulib module @code{getugroups} provides a similar API. gnulib-20210822~d383792/doc/glibc-functions/gethostbyaddr_r.texi000066400000000000000000000015051411057217300242120ustar00rootroot00000000000000@node gethostbyaddr_r @subsection @code{gethostbyaddr_r} @findex gethostbyaddr_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gethostbyaddr-r-3.html} Documentation: @itemize @item @ifinfo @ref{Host Names,,Host Names,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Names.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gethostbyaddr_r.3.html,,man gethostbyaddr_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gethostbyname2.texi000066400000000000000000000014321411057217300237600ustar00rootroot00000000000000@node gethostbyname2 @subsection @code{gethostbyname2} @findex gethostbyname2 LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gethostbyname2-3.html} Documentation: @itemize @item @ifinfo @ref{Host Names,,Host Names,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Names.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gethostbyname2.3.html,,man gethostbyname2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gethostbyname2_r.texi000066400000000000000000000015661411057217300243110ustar00rootroot00000000000000@node gethostbyname2_r @subsection @code{gethostbyname2_r} @findex gethostbyname2_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gethostbyname2-r-3.html} Documentation: @itemize @item @ifinfo @ref{Host Names,,Host Names,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Names.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gethostbyname2_r.3.html,,man gethostbyname2_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gethostbyname_r.texi000066400000000000000000000014701411057217300242210ustar00rootroot00000000000000@node gethostbyname_r @subsection @code{gethostbyname_r} @findex gethostbyname_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gethostbyname-r-3.html} Documentation: @itemize @item @ifinfo @ref{Host Names,,Host Names,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Names.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gethostbyname_r.3.html,,man gethostbyname_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gethostent_r.texi000066400000000000000000000007641411057217300235410ustar00rootroot00000000000000@node gethostent_r @subsection @code{gethostent_r} @findex gethostent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gethostent_r.3.html,,man gethostent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getifaddrs.texi000066400000000000000000000011131411057217300231350ustar00rootroot00000000000000@node getifaddrs @subsection @code{getifaddrs} @findex getifaddrs LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getifaddrs.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getifaddrs.3.html,,man getifaddrs} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getipv4sourcefilter.texi000066400000000000000000000006701411057217300250410ustar00rootroot00000000000000@node getipv4sourcefilter @subsection @code{getipv4sourcefilter} @findex getipv4sourcefilter Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getloadavg.texi000066400000000000000000000016431411057217300231460ustar00rootroot00000000000000@node getloadavg @subsection @code{getloadavg} @findex getloadavg LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getloadavg-3.html} Documentation: @itemize @item @ifinfo @ref{Processor Resources,,Learn about the processors available,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Processor-Resources.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getloadavg.3.html,,man getloadavg}. @end itemize Gnulib module: getloadavg Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function is declared in @code{}, not @code{}, on some platforms: Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getmntent.texi000066400000000000000000000011661411057217300230360ustar00rootroot00000000000000@node getmntent @subsection @code{getmntent} @findex getmntent Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getmntent.3.html,,man getmntent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getmntent_r.texi000066400000000000000000000013201411057217300233470ustar00rootroot00000000000000@node getmntent_r @subsection @code{getmntent_r} @findex getmntent_r Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getmntent_r.3.html,,man getmntent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetbyaddr_r.texi000066400000000000000000000007761411057217300240340ustar00rootroot00000000000000@node getnetbyaddr_r @subsection @code{getnetbyaddr_r} @findex getnetbyaddr_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getnetbyaddr_r.3.html,,man getnetbyaddr_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetbyname_r.texi000066400000000000000000000007761411057217300240420ustar00rootroot00000000000000@node getnetbyname_r @subsection @code{getnetbyname_r} @findex getnetbyname_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getnetbyname_r.3.html,,man getnetbyname_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetent_r.texi000066400000000000000000000007571411057217300233540ustar00rootroot00000000000000@node getnetent_r @subsection @code{getnetent_r} @findex getnetent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getnetent_r.3.html,,man getnetent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetgrent.texi000066400000000000000000000012061411057217300233520ustar00rootroot00000000000000@node getnetgrent @subsection @code{getnetgrent} @findex getnetgrent Documentation: @itemize @item @ifinfo @ref{Lookup Netgroup,,Looking up one Netgroup,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Lookup-Netgroup.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getnetgrent.3.html,,man getnetgrent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetgrent_r.texi000066400000000000000000000013261411057217300236760ustar00rootroot00000000000000@node getnetgrent_r @subsection @code{getnetgrent_r} @findex getnetgrent_r Documentation: @itemize @item @ifinfo @ref{Lookup Netgroup,,Looking up one Netgroup,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Lookup-Netgroup.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getnetgrent_r.3.html,,man getnetgrent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getnetname.texi000066400000000000000000000005411411057217300231540ustar00rootroot00000000000000@node getnetname @subsection @code{getnetname} @findex getnetname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getopt_long.texi000066400000000000000000000036601411057217300233530ustar00rootroot00000000000000@node getopt_long @subsection @code{getopt_long} @findex getopt_long LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getopt-long-3.html} Documentation: @itemize @item @ifinfo @ref{Getopt Long Options,,Parsing Long Options with getopt_long,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Options.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getopt_long.3.html,,man getopt_long}. @end itemize Gnulib module: getopt-gnu Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, MSVC 14. @item The function @code{getopt_long} does not obey the combination of @samp{+} and @samp{:} flags in the options string on some platforms: glibc 2.11. @item The use of @samp{W;} in the optstring argument to does not always allow @code{-W foo} to behave synonymously with @code{--foo}: glibc 2.11. @item The function @code{getopt_long} does not support the @samp{+} flag in the options string on some platforms: macOS 11.1, AIX 5.2, Solaris 10. @item The value of @code{optind} after a missing required argument is wrong on some platforms: macOS 11.1. @item The function @code{getopt_long} does not obey the @samp{-} flag in the options string when @env{POSIXLY_CORRECT} is set on some platforms: Cygwin 1.7.0. @item Some implementations fail to reset state, including re-checking @env{POSIXLY_CORRECT}, when @code{optind} is set to @samp{0}: NetBSD, Cygwin 1.7.0. @item The function @code{getopt_long} does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.5.x. @item This function crashes if the option string includes @code{W;} but there are no long options, on some platforms: glibc 2.14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getopt_long_only.texi000066400000000000000000000044021411057217300244070ustar00rootroot00000000000000@node getopt_long_only @subsection @code{getopt_long_only} @findex getopt_long_only LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getopt-long-only-3.html} Documentation: @itemize @item @ifinfo @ref{Getopt Long Options,,Parsing Long Options with getopt_long,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Options.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getopt_long_only.3.html,,man getopt_long_only}. @end itemize Gnulib module: getopt-gnu Portability problems fixed by Gnulib: @itemize @item The function @code{getopt_long_only} does not obey the combination of @samp{+} and @samp{:} flags in the options string on some platforms: glibc 2.11. @item The use of @samp{W;} in the optstring argument to does not always allow @code{-W foo} to behave synonymously with @code{--foo}: glibc 2.11. @item The function @code{getopt_long_only} does not support the @samp{+} flag in the options string on some platforms: macOS 11.1, AIX 5.2, Solaris 10. @item The value of @code{optind} after a missing required argument is wrong on some platforms: macOS 11.1. @item The function @code{getopt_long_only} does not obey the @samp{-} flag in the options string when @env{POSIXLY_CORRECT} is set on some platforms: Cygwin 1.7.0. @item Some implementations fail to reset state, including re-checking @env{POSIXLY_CORRECT}, when @code{optind} is set to @samp{0}: NetBSD, Cygwin 1.7.0. @item The function @code{getopt_long_only} does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, Solaris 11 2010-11, Cygwin 1.5.x. @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @item This function crashes if the option string includes @code{W;} but there are no long options, on some platforms: glibc 2.14. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some implementations return success instead of reporting an ambiguity if user's option is a prefix of two long options with the same outcome: FreeBSD. @item The GNU Coding Standards discourage the use of @code{getopt_long_only} in new programs. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpagesize.texi000066400000000000000000000017021411057217300233340ustar00rootroot00000000000000@node getpagesize @subsection @code{getpagesize} @findex getpagesize LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getpagesize.html} Documentation: @itemize @item @ifinfo @ref{Query Memory Parameters,,How to get information about the memory subsystem?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Query-Memory-Parameters.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getpagesize.2.html,,man getpagesize}. @end itemize Gnulib module: getpagesize Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14, Android 4.4. @item This function is not declared on some platforms: HP-UX 11 with compiler option @code{-D_XOPEN_SOURCE=600}. @item This function is broken on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpass.texi000066400000000000000000000021001411057217300224640ustar00rootroot00000000000000@node getpass @subsection @code{getpass} @findex getpass Documentation: @itemize @item @ifinfo @ref{getpass,,Reading Passphrases,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/getpass.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getpass.3.html,,man getpass}. @end itemize Gnulib module: getpass or getpass-gnu Portability problems fixed by either Gnulib module @code{getpass} or @code{getpass-gnu}: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize Portability problems fixed by Gnulib module @code{getpass-gnu}: @itemize @item The returned password is truncated to PASS_MAX characters on some platforms: uClibc (256), musl (128), macOS 11.1 (128), FreeBSD 13.0 (128), NetBSD 3.0 (128), OpenBSD 4.0 (128), AIX 5.1 (32), HP-UX 11 (8), IRIX 6.5 (32), Solaris 11 2010-11 (8, even less than PASS_MAX), Cygwin (128). The gnulib implementation returns the password untruncated. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getprotobyname_r.texi000066400000000000000000000011641411057217300244070ustar00rootroot00000000000000@node getprotobyname_r @subsection @code{getprotobyname_r} @findex getprotobyname_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getprotobyname-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getprotobyname_r.3.html,,man getprotobyname_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getprotobynumber_r.texi000066400000000000000000000012001411057217300247460ustar00rootroot00000000000000@node getprotobynumber_r @subsection @code{getprotobynumber_r} @findex getprotobynumber_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getprotobynumber-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getprotobynumber_r.3.html,,man getprotobynumber_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getprotoent_r.texi000066400000000000000000000011421411057217300237160ustar00rootroot00000000000000@node getprotoent_r @subsection @code{getprotoent_r} @findex getprotoent_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getprotoent-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getprotoent_r.3.html,,man getprotoent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpt.texi000066400000000000000000000012771411057217300221570ustar00rootroot00000000000000@node getpt @subsection @code{getpt} @findex getpt Documentation: @itemize @item @ifinfo @ref{Allocation,,Allocating Pseudo-Terminals,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Allocation.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getpt.3.html,,man getpt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpublickey.texi000066400000000000000000000005611411057217300235160ustar00rootroot00000000000000@node getpublickey @subsection @code{getpublickey} @findex getpublickey Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpw.texi000066400000000000000000000007101411057217300221510ustar00rootroot00000000000000@node getpw @subsection @code{getpw} @findex getpw Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getpw.3.html,,man getpw} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getpwent_r.texi000066400000000000000000000014621411057217300232060ustar00rootroot00000000000000@node getpwent_r @subsection @code{getpwent_r} @findex getpwent_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getpwent-r-1.html} Documentation: @itemize @item @ifinfo @ref{Scanning All Users,,Scanning the List of All Users,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-All-Users.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getpwent_r.3.html,,man getpwent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrandom.texi000066400000000000000000000035411411057217300230100ustar00rootroot00000000000000@node getrandom @subsection @code{getrandom} @findex getrandom Documentation: @itemize @item @ifinfo @ref{Unpredictable Bytes,,Generating Unpredictable Bytes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Unpredictable-Bytes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getrandom.2.html,,man getrandom}. @end itemize Gnulib module: getrandom Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.24, macOS 11.1, FreeBSD 11.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function has a different return type on some platforms: Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{GRND_INSECURE} flag is missing on some platforms: glibc 2.34, macOS 10.15, GNU/kFreeBSD, FreeBSD 12.0, OpenBSD 6.7, Minix 3.3, Haiku. @item The @code{GRND_RANDOM} flag has different effects on different platforms. Some platforms ignore the flag, or yield data that can fail to be random in some cases. @end itemize @noindent Although this function is intended to produce random data, the data's security properties may not be appropriate for your application. For example, identical ``random'' data streams might be produced by rebooted virtual machines. If this is of concern you may need to use additional techniques such as hedging.@footnote{Ristenpart T, Yilek S@. @url{http://pages.cs.wisc.edu/~rist/papers/sslhedge.pdf, When good randomness goes bad: virtual machine vulnerabilities and hedging deployed cryptography}. NDSS 2010.} Related modules include @code{getentropy}, which has a simpler but more-limited API, and @code{crypto/gc-random}, which is likely a better match for code already using the other @code{crypto} APIs. gnulib-20210822~d383792/doc/glibc-functions/getresgid.texi000066400000000000000000000007421411057217300230050ustar00rootroot00000000000000@node getresgid @subsection @code{getresgid} @findex getresgid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getresgid.2.html,,man getresgid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getresuid.texi000066400000000000000000000007421411057217300230230ustar00rootroot00000000000000@node getresuid @subsection @code{getresuid} @findex getresuid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getresuid.2.html,,man getresuid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcbyname.texi000066400000000000000000000006701411057217300235100ustar00rootroot00000000000000@node getrpcbyname @subsection @code{getrpcbyname} @findex getrpcbyname Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcbyname.3.html,,man getrpcbyname} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcbyname_r.texi000066400000000000000000000007771411057217300240410ustar00rootroot00000000000000@node getrpcbyname_r @subsection @code{getrpcbyname_r} @findex getrpcbyname_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcbyname_r.3.html,,man getrpcbyname_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcbynumber.texi000066400000000000000000000007021411057217300240540ustar00rootroot00000000000000@node getrpcbynumber @subsection @code{getrpcbynumber} @findex getrpcbynumber Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcbynumber.3.html,,man getrpcbynumber} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcbynumber_r.texi000066400000000000000000000010111411057217300243670ustar00rootroot00000000000000@node getrpcbynumber_r @subsection @code{getrpcbynumber_r} @findex getrpcbynumber_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcbynumber_r.3.html,,man getrpcbynumber_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcent.texi000066400000000000000000000006511411057217300230220ustar00rootroot00000000000000@node getrpcent @subsection @code{getrpcent} @findex getrpcent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcent.3.html,,man getrpcent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcent_r.texi000066400000000000000000000007601411057217300233440ustar00rootroot00000000000000@node getrpcent_r @subsection @code{getrpcent_r} @findex getrpcent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcent_r.3.html,,man getrpcent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getrpcport.texi000066400000000000000000000006701411057217300232210ustar00rootroot00000000000000@node getrpcport @subsection @code{getrpcport} @findex getrpcport Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getrpcport.3.html,,man getrpcport} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsecretkey.texi000066400000000000000000000005771411057217300235340ustar00rootroot00000000000000@node getsecretkey @subsection @code{getsecretkey} @findex getsecretkey Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getservbyname_r.texi000066400000000000000000000011561411057217300242240ustar00rootroot00000000000000@node getservbyname_r @subsection @code{getservbyname_r} @findex getservbyname_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getservbyname-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getservbyname_r.3.html,,man getservbyname_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getservbyport_r.texi000066400000000000000000000011561411057217300242700ustar00rootroot00000000000000@node getservbyport_r @subsection @code{getservbyport_r} @findex getservbyport_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getservbyport-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getservbyport_r.3.html,,man getservbyport_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getservent_r.texi000066400000000000000000000011341411057217300235330ustar00rootroot00000000000000@node getservent_r @subsection @code{getservent_r} @findex getservent_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getservent-r.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getservent_r.3.html,,man getservent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsgent.texi000066400000000000000000000006531411057217300226510ustar00rootroot00000000000000@node getsgent @subsection @code{getsgent} @findex getsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsgent_r.texi000066400000000000000000000006611411057217300231710ustar00rootroot00000000000000@node getsgent_r @subsection @code{getsgent_r} @findex getsgent_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsgnam.texi000066400000000000000000000006531411057217300226360ustar00rootroot00000000000000@node getsgnam @subsection @code{getsgnam} @findex getsgnam Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsgnam_r.texi000066400000000000000000000006611411057217300231560ustar00rootroot00000000000000@node getsgnam_r @subsection @code{getsgnam_r} @findex getsgnam_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getsourcefilter.texi000066400000000000000000000006541411057217300242400ustar00rootroot00000000000000@node getsourcefilter @subsection @code{getsourcefilter} @findex getsourcefilter Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getspent.texi000066400000000000000000000007521411057217300226620ustar00rootroot00000000000000@node getspent @subsection @code{getspent} @findex getspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getspent.3.html,,man getspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getspent_r.texi000066400000000000000000000007641411057217300232060ustar00rootroot00000000000000@node getspent_r @subsection @code{getspent_r} @findex getspent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getspent_r.3.html,,man getspent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getspnam.texi000066400000000000000000000007521411057217300226470ustar00rootroot00000000000000@node getspnam @subsection @code{getspnam} @findex getspnam Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getspnam.3.html,,man getspnam} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getspnam_r.texi000066400000000000000000000007641411057217300231730ustar00rootroot00000000000000@node getspnam_r @subsection @code{getspnam_r} @findex getspnam_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getspnam_r.3.html,,man getspnam_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gettext.texi000066400000000000000000000015171411057217300225150ustar00rootroot00000000000000@node gettext @subsection @code{gettext} @findex gettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gettext.html} Documentation: @itemize @item @ifinfo @ref{Translation with gettext,,What has to be done to translate a message?,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Translation-with-gettext.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gettext.3.html,,man gettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gettid.texi000066400000000000000000000013701411057217300223060ustar00rootroot00000000000000@node gettid @subsection @code{gettid} @findex gettid Documentation: @itemize @item @ifinfo @ref{Process Identification,,Process Identification,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Process-Identification.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/gettid.2.html,,man gettid}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on most non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getttyent.texi000066400000000000000000000006761411057217300230650ustar00rootroot00000000000000@node getttyent @subsection @code{getttyent} @findex getttyent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getttyent.3.html,,man getttyent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getttynam.texi000066400000000000000000000006761411057217300230520ustar00rootroot00000000000000@node getttynam @subsection @code{getttynam} @findex getttynam Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getttynam.3.html,,man getttynam} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getumask.texi000066400000000000000000000014531411057217300226500ustar00rootroot00000000000000@node getumask @subsection @code{getumask} @findex getumask Documentation: @itemize @item @ifinfo @ref{Setting Permissions,,Assigning File Permissions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Setting-Permissions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getumask.3.html,,man getumask}. @end itemize Gnulib module: getumask Portability problems fixed by Gnulib: @itemize @item This function exists only on Hurd and is therefore missing on all non-glibc platforms: glibc/Linux, glibc/kFreeBSD, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3, AIX 7.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getusershell.texi000066400000000000000000000010121411057217300235250ustar00rootroot00000000000000@node getusershell @subsection @code{getusershell} @findex getusershell Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getusershell.3.html,,man getusershell} Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, mingw, MSVC 14, Android 9.0. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutent.texi000066400000000000000000000014521411057217300226660ustar00rootroot00000000000000@node getutent @subsection @code{getutent} @findex getutent LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getutent-3.html} Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutent.3.html,,man getutent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutent_r.texi000066400000000000000000000015751411057217300232150ustar00rootroot00000000000000@node getutent_r @subsection @code{getutent_r} @findex getutent_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getutent-r-3.html} Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutent_r.3.html,,man getutent_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutid.texi000066400000000000000000000012771411057217300225010ustar00rootroot00000000000000@node getutid @subsection @code{getutid} @findex getutid Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutid.3.html,,man getutid}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutid_r.texi000066400000000000000000000013671411057217300230220ustar00rootroot00000000000000@node getutid_r @subsection @code{getutid_r} @findex getutid_r Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutid_r.3.html,,man getutid_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutline.texi000066400000000000000000000013111411057217300230210ustar00rootroot00000000000000@node getutline @subsection @code{getutline} @findex getutline Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutline.3.html,,man getutline}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutline_r.texi000066400000000000000000000014011411057217300233420ustar00rootroot00000000000000@node getutline_r @subsection @code{getutline_r} @findex getutline_r Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutline_r.3.html,,man getutline_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutmp.texi000066400000000000000000000012531411057217300225130ustar00rootroot00000000000000@node getutmp @subsection @code{getutmp} @findex getutmp Documentation: @itemize @item @ifinfo @ref{XPG Functions,,XPG User Accounting Database Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/XPG-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutmp.3.html,,man getutmp}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getutmpx.texi000066400000000000000000000012601411057217300227010ustar00rootroot00000000000000@node getutmpx @subsection @code{getutmpx} @findex getutmpx Documentation: @itemize @item @ifinfo @ref{XPG Functions,,XPG User Accounting Database Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/XPG-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getutmpx.3.html,,man getutmpx}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getw.texi000066400000000000000000000010621411057217300217720ustar00rootroot00000000000000@node getw @subsection @code{getw} @findex getw Documentation: @itemize @item @ifinfo @ref{Character Input,,Character Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Character-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getw.3.html,,man getw}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getwc_unlocked.texi000066400000000000000000000017661411057217300240340ustar00rootroot00000000000000@node getwc_unlocked @subsection @code{getwc_unlocked} @findex getwc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getwc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Character Input,,Character Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Character-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getwc_unlocked.3.html,,man getwc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getwchar_unlocked.texi000066400000000000000000000020211411057217300245100ustar00rootroot00000000000000@node getwchar_unlocked @subsection @code{getwchar_unlocked} @findex getwchar_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getwchar-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Character Input,,Character Input,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Character-Input.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getwchar_unlocked.3.html,,man getwchar_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/getxattr.texi000066400000000000000000000011331411057217300226650ustar00rootroot00000000000000@node getxattr @subsection @code{getxattr} @findex getxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getxattr.2.html,,man getxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @item This function has extra @code{offset} and @code{options} parameters: macOS 11.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/glob_pattern_p.texi000066400000000000000000000006621411057217300240300ustar00rootroot00000000000000@node glob_pattern_p @subsection @code{glob_pattern_p} @findex glob_pattern_p Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gnu_dev_major.texi000066400000000000000000000014051411057217300236440ustar00rootroot00000000000000@node gnu_dev_major @subsection @code{gnu_dev_major} @findex gnu_dev_major Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gnu_dev_major.3.html,,man gnu_dev_major} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item The @code{AC_HEADER_MAJOR} macro in Autoconf 2.69 and earlier fails to set @code{MAJOR_IN_SYSMACROS} when it detects namespace pollution in @file{sys/types.h}; which in turn provokes deprecation warnings in glibc 2.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gnu_dev_makedev.texi000066400000000000000000000014171411057217300241530ustar00rootroot00000000000000@node gnu_dev_makedev @subsection @code{gnu_dev_makedev} @findex gnu_dev_makedev Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gnu_dev_makedev.3.html,,man gnu_dev_makedev} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item The @code{AC_HEADER_MAJOR} macro in Autoconf 2.69 and earlier fails to set @code{MAJOR_IN_SYSMACROS} when it detects namespace pollution in @file{sys/types.h}; which in turn provokes deprecation warnings in glibc 2.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gnu_dev_minor.texi000066400000000000000000000014051411057217300236600ustar00rootroot00000000000000@node gnu_dev_minor @subsection @code{gnu_dev_minor} @findex gnu_dev_minor Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gnu_dev_minor.3.html,,man gnu_dev_minor} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item The @code{AC_HEADER_MAJOR} macro in Autoconf 2.69 and earlier fails to set @code{MAJOR_IN_SYSMACROS} when it detects namespace pollution in @file{sys/types.h}; which in turn provokes deprecation warnings in glibc 2.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gnu_get_libc_release.texi000066400000000000000000000013111411057217300251420ustar00rootroot00000000000000@node gnu_get_libc_release @subsection @code{gnu_get_libc_release} @findex gnu_get_libc_release LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gnu-get-libc-version-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gnu_get_libc_release.3.html,,man gnu_get_libc_release} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/gnu_get_libc_version.texi000066400000000000000000000013111411057217300252070ustar00rootroot00000000000000@node gnu_get_libc_version @subsection @code{gnu_get_libc_version} @findex gnu_get_libc_version LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-gnu-get-libc-version-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gnu_get_libc_version.3.html,,man gnu_get_libc_version} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/group_member.texi000066400000000000000000000010501411057217300235040ustar00rootroot00000000000000@node group_member @subsection @code{group_member} @findex group_member Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/group_member.3.html,,man group_member} Gnulib module: group-member Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/gsignal.texi000066400000000000000000000012461411057217300224540ustar00rootroot00000000000000@node gsignal @subsection @code{gsignal} @findex gsignal Documentation: @itemize @item @ifinfo @ref{Signaling Yourself,,Signaling Yourself,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signaling-Yourself.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/gsignal.3.html,,man gsignal}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/hasmntopt.texi000066400000000000000000000012171411057217300230430ustar00rootroot00000000000000@node hasmntopt @subsection @code{hasmntopt} @findex hasmntopt Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/hasmntopt.3.html,,man hasmntopt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/hcreate_r.texi000066400000000000000000000015121411057217300227600ustar00rootroot00000000000000@node hcreate_r @subsection @code{hcreate_r} @findex hcreate_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-hcreate-r.html} Documentation: @itemize @item @ifinfo @ref{Hash Search Function,,The hsearch function.,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/hcreate_r.3.html,,man hcreate_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/hdestroy_r.texi000066400000000000000000000015201411057217300232050ustar00rootroot00000000000000@node hdestroy_r @subsection @code{hdestroy_r} @findex hdestroy_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-hdestroy-r.html} Documentation: @itemize @item @ifinfo @ref{Hash Search Function,,The hsearch function.,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/hdestroy_r.3.html,,man hdestroy_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/herror.texi000066400000000000000000000006011411057217300223230ustar00rootroot00000000000000@node herror @subsection @code{herror} @findex herror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/herror.3.html,,man herror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/host2netname.texi000066400000000000000000000005471411057217300234420ustar00rootroot00000000000000@node host2netname @subsection @code{host2netname} @findex host2netname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/hsearch_r.texi000066400000000000000000000015121411057217300227620ustar00rootroot00000000000000@node hsearch_r @subsection @code{hsearch_r} @findex hsearch_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-hsearch-r.html} Documentation: @itemize @item @ifinfo @ref{Hash Search Function,,The hsearch function.,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/hsearch_r.3.html,,man hsearch_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/hstrerror.texi000066400000000000000000000006321411057217300230600ustar00rootroot00000000000000@node hstrerror @subsection @code{hstrerror} @findex hstrerror Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/hstrerror.3.html,,man hstrerror} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/in6addr_any.texi000066400000000000000000000010661411057217300232260ustar00rootroot00000000000000@node in6addr_any @subsection @code{in6addr_any} @findex in6addr_any Documentation:@* @ifinfo @ref{Host Address Data Type,,Host Address Data Type,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Data-Type.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/in6addr_loopback.texi000066400000000000000000000011051411057217300242230ustar00rootroot00000000000000@node in6addr_loopback @subsection @code{in6addr_loopback} @findex in6addr_loopback Documentation:@* @ifinfo @ref{Host Address Data Type,,Host Address Data Type,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Data-Type.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_append.texi000066400000000000000000000006661411057217300242730ustar00rootroot00000000000000@node inet6_opt_append @subsection @code{inet6_opt_append} @findex inet6_opt_append Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_find.texi000066400000000000000000000006601411057217300237360ustar00rootroot00000000000000@node inet6_opt_find @subsection @code{inet6_opt_find} @findex inet6_opt_find Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_finish.texi000066400000000000000000000006661411057217300243040ustar00rootroot00000000000000@node inet6_opt_finish @subsection @code{inet6_opt_finish} @findex inet6_opt_finish Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_get_val.texi000066400000000000000000000006711411057217300244410ustar00rootroot00000000000000@node inet6_opt_get_val @subsection @code{inet6_opt_get_val} @findex inet6_opt_get_val Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_init.texi000066400000000000000000000006601411057217300237610ustar00rootroot00000000000000@node inet6_opt_init @subsection @code{inet6_opt_init} @findex inet6_opt_init Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_next.texi000066400000000000000000000006601411057217300237740ustar00rootroot00000000000000@node inet6_opt_next @subsection @code{inet6_opt_next} @findex inet6_opt_next Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_opt_set_val.texi000066400000000000000000000006711411057217300244550ustar00rootroot00000000000000@node inet6_opt_set_val @subsection @code{inet6_opt_set_val} @findex inet6_opt_set_val Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_alloc.texi000066400000000000000000000006141411057217300246150ustar00rootroot00000000000000@node inet6_option_alloc @subsection @code{inet6_option_alloc} @findex inet6_option_alloc Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_append.texi000066400000000000000000000006171411057217300247750ustar00rootroot00000000000000@node inet6_option_append @subsection @code{inet6_option_append} @findex inet6_option_append Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_find.texi000066400000000000000000000006111411057217300244400ustar00rootroot00000000000000@node inet6_option_find @subsection @code{inet6_option_find} @findex inet6_option_find Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_init.texi000066400000000000000000000006111411057217300244630ustar00rootroot00000000000000@node inet6_option_init @subsection @code{inet6_option_init} @findex inet6_option_init Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_next.texi000066400000000000000000000006111411057217300244760ustar00rootroot00000000000000@node inet6_option_next @subsection @code{inet6_option_next} @findex inet6_option_next Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_option_space.texi000066400000000000000000000006141411057217300246160ustar00rootroot00000000000000@node inet6_option_space @subsection @code{inet6_option_space} @findex inet6_option_space Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_add.texi000066400000000000000000000006551411057217300235450ustar00rootroot00000000000000@node inet6_rth_add @subsection @code{inet6_rth_add} @findex inet6_rth_add Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_getaddr.texi000066400000000000000000000006711411057217300244250ustar00rootroot00000000000000@node inet6_rth_getaddr @subsection @code{inet6_rth_getaddr} @findex inet6_rth_getaddr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_init.texi000066400000000000000000000006601411057217300237540ustar00rootroot00000000000000@node inet6_rth_init @subsection @code{inet6_rth_init} @findex inet6_rth_init Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_reverse.texi000066400000000000000000000006711411057217300244660ustar00rootroot00000000000000@node inet6_rth_reverse @subsection @code{inet6_rth_reverse} @findex inet6_rth_reverse Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_segments.texi000066400000000000000000000006741411057217300246430ustar00rootroot00000000000000@node inet6_rth_segments @subsection @code{inet6_rth_segments} @findex inet6_rth_segments Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet6_rth_space.texi000066400000000000000000000006631411057217300241070ustar00rootroot00000000000000@node inet6_rth_space @subsection @code{inet6_rth_space} @findex inet6_rth_space Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.4, Mac OS X 10.5, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 9, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_aton.texi000066400000000000000000000013431411057217300230060ustar00rootroot00000000000000@node inet_aton @subsection @code{inet_aton} @findex inet_aton LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-inet-aton-3.html} Documentation: @itemize @item @ifinfo @ref{Host Address Functions,,Host Address Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_aton.3.html,,man inet_aton}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_lnaof.texi000066400000000000000000000012161411057217300231430ustar00rootroot00000000000000@node inet_lnaof @subsection @code{inet_lnaof} @findex inet_lnaof Documentation: @itemize @item @ifinfo @ref{Host Address Functions,,Host Address Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_lnaof.3.html,,man inet_lnaof}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_makeaddr.texi000066400000000000000000000012211411057217300236100ustar00rootroot00000000000000@node inet_makeaddr @subsection @code{inet_makeaddr} @findex inet_makeaddr Documentation: @itemize @item @ifinfo @ref{Host Address Functions,,Host Address Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_makeaddr.3.html,,man inet_makeaddr}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_net_ntop.texi000066400000000000000000000007241411057217300236750ustar00rootroot00000000000000@node inet_net_ntop @subsection @code{inet_net_ntop} @findex inet_net_ntop Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_net_ntop.3.html,,man inet_net_ntop} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_net_pton.texi000066400000000000000000000007241411057217300236750ustar00rootroot00000000000000@node inet_net_pton @subsection @code{inet_net_pton} @findex inet_net_pton Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_net_pton.3.html,,man inet_net_pton} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_netof.texi000066400000000000000000000012021411057217300231520ustar00rootroot00000000000000@node inet_netof @subsection @code{inet_netof} @findex inet_netof Documentation: @itemize @item @ifinfo @ref{Host Address Functions,,Host Address Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_netof.3.html,,man inet_netof}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_network.texi000066400000000000000000000011771411057217300235430ustar00rootroot00000000000000@node inet_network @subsection @code{inet_network} @findex inet_network Documentation: @itemize @item @ifinfo @ref{Host Address Functions,,Host Address Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Address-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/inet_network.3.html,,man inet_network}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_nsap_addr.texi000066400000000000000000000005251411057217300240010ustar00rootroot00000000000000@node inet_nsap_addr @subsection @code{inet_nsap_addr} @findex inet_nsap_addr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inet_nsap_ntoa.texi000066400000000000000000000005251411057217300240300ustar00rootroot00000000000000@node inet_nsap_ntoa @subsection @code{inet_nsap_ntoa} @findex inet_nsap_ntoa Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, HP-UX 11.00, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/initgroups.texi000066400000000000000000000017411411057217300232330ustar00rootroot00000000000000@node initgroups @subsection @code{initgroups} @findex initgroups LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-initgroups-3.html} Documentation: @itemize @item @ifinfo @ref{Setting Groups,,Setting the Group IDs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Setting-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/initgroups.3.html,,man initgroups}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is unsafe to call between @code{fork} and @code{exec} if the parent process is multi-threaded. Instead, use @code{getgroups} or @code{getgrouplist} (or use the gnulib module @code{mgetgroups}) before forking, and @code{setgroups} in the child. @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/initstate_r.texi000066400000000000000000000020251411057217300233510ustar00rootroot00000000000000@node initstate_r @subsection @code{initstate_r} @findex initstate_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-initstate-r-1.html} Documentation: @itemize @item @ifinfo @ref{BSD Random,,BSD Random Number Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/initstate_r.3.html,,man initstate_r}. @end itemize Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has an incompatible declaration on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. @end itemize gnulib-20210822~d383792/doc/glibc-functions/innetgr.texi000066400000000000000000000012021411057217300224660ustar00rootroot00000000000000@node innetgr @subsection @code{innetgr} @findex innetgr Documentation: @itemize @item @ifinfo @ref{Netgroup Membership,,Testing for Netgroup Membership,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Netgroup-Membership.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/innetgr.3.html,,man innetgr}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inotify_add_watch.texi000066400000000000000000000013021411057217300245000ustar00rootroot00000000000000@node inotify_add_watch @subsection @code{inotify_add_watch} @findex inotify_add_watch LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-inotify-add-watch.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/inotify_add_watch.2.html,,man inotify_add_watch} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inotify_init.texi000066400000000000000000000012441411057217300235320ustar00rootroot00000000000000@node inotify_init @subsection @code{inotify_init} @findex inotify_init LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-inotify-init.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/inotify_init.2.html,,man inotify_init} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inotify_init1.texi000066400000000000000000000010651411057217300236140ustar00rootroot00000000000000@node inotify_init1 @subsection @code{inotify_init1} @findex inotify_init1 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/inotify_init1.2.html,,man inotify_init1} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/inotify_rm_watch.texi000066400000000000000000000012741411057217300243760ustar00rootroot00000000000000@node inotify_rm_watch @subsection @code{inotify_rm_watch} @findex inotify_rm_watch LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-inotify-rm-watch.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/inotify_rm_watch.2.html,,man inotify_rm_watch} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ioperm.texi000066400000000000000000000010011411057217300223100ustar00rootroot00000000000000@node ioperm @subsection @code{ioperm} @findex ioperm Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/ioperm.2.html,,man ioperm} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/iopl.texi000066400000000000000000000007671411057217300220020ustar00rootroot00000000000000@node iopl @subsection @code{iopl} @findex iopl Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/iopl.2.html,,man iopl} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/isctype.texi000066400000000000000000000006071411057217300225100ustar00rootroot00000000000000@node isctype @subsection @code{isctype} @findex isctype Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/isfdtype.texi000066400000000000000000000007651411057217300226640ustar00rootroot00000000000000@node isfdtype @subsection @code{isfdtype} @findex isfdtype Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/isfdtype.3.html,,man isfdtype} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/isinff.texi000066400000000000000000000014171411057217300223060ustar00rootroot00000000000000@node isinff @subsection @code{isinff} @findex isinff Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/isinff.3.html,,man isinff}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 4.4. @item This function is not declared on some platforms: Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/isinfl.texi000066400000000000000000000014661411057217300223200ustar00rootroot00000000000000@node isinfl @subsection @code{isinfl} @findex isinfl Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/isinfl.3.html,,man isinfl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item This function is not declared on some platforms: Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/isnanf.texi000066400000000000000000000012241411057217300223020ustar00rootroot00000000000000@node isnanf @subsection @code{isnanf} @findex isnanf Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/isnanf.3.html,,man isnanf}. @end itemize Gnulib module: isnanf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/isnanl.texi000066400000000000000000000014441411057217300223140ustar00rootroot00000000000000@node isnanl @subsection @code{isnanl} @findex isnanl Documentation: @itemize @item @ifinfo @ref{Floating Point Classes,,Floating-Point Number Classification Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/isnanl.3.html,,man isnanl}. @end itemize Gnulib module: isnanl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.x, MSVC 14, Android 4.4. @item This function is not declared on some platforms: Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/j0f.texi000066400000000000000000000013441411057217300215060ustar00rootroot00000000000000@node j0f @subsection @code{j0f} @findex j0f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-j0f.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/j0f.3.html,,man j0f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/j0l.texi000066400000000000000000000014441411057217300215150ustar00rootroot00000000000000@node j0l @subsection @code{j0l} @findex j0l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-j0l.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/j0l.3.html,,man j0l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/j1f.texi000066400000000000000000000013441411057217300215070ustar00rootroot00000000000000@node j1f @subsection @code{j1f} @findex j1f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-j1f.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/j1f.3.html,,man j1f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/j1l.texi000066400000000000000000000014441411057217300215160ustar00rootroot00000000000000@node j1l @subsection @code{j1l} @findex j1l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-j1l.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/j1l.3.html,,man j1l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/jnf.texi000066400000000000000000000013441411057217300216040ustar00rootroot00000000000000@node jnf @subsection @code{jnf} @findex jnf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-jnf.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/jnf.3.html,,man jnf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/jnl.texi000066400000000000000000000014441411057217300216130ustar00rootroot00000000000000@node jnl @subsection @code{jnl} @findex jnl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-jnl.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/jnl.3.html,,man jnl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/jrand48_r.texi000066400000000000000000000015151411057217300226220ustar00rootroot00000000000000@node jrand48_r @subsection @code{jrand48_r} @findex jrand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-jrand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/jrand48_r.3.html,,man jrand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_decryptsession.texi000066400000000000000000000010051411057217300247470ustar00rootroot00000000000000@node key_decryptsession @subsection @code{key_decryptsession} @findex key_decryptsession Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/key_decryptsession.3.html,,man key_decryptsession} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_decryptsession_pk.texi000066400000000000000000000006371411057217300254530ustar00rootroot00000000000000@node key_decryptsession_pk @subsection @code{key_decryptsession_pk} @findex key_decryptsession_pk Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_encryptsession.texi000066400000000000000000000010051411057217300247610ustar00rootroot00000000000000@node key_encryptsession @subsection @code{key_encryptsession} @findex key_encryptsession Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/key_encryptsession.3.html,,man key_encryptsession} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_encryptsession_pk.texi000066400000000000000000000006371411057217300254650ustar00rootroot00000000000000@node key_encryptsession_pk @subsection @code{key_encryptsession_pk} @findex key_encryptsession_pk Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_gendes.texi000066400000000000000000000007351411057217300231470ustar00rootroot00000000000000@node key_gendes @subsection @code{key_gendes} @findex key_gendes Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/key_gendes.3.html,,man key_gendes} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_get_conv.texi000066400000000000000000000005611411057217300235030ustar00rootroot00000000000000@node key_get_conv @subsection @code{key_get_conv} @findex key_get_conv Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_secretkey_is_set.texi000066400000000000000000000010311411057217300252340ustar00rootroot00000000000000@node key_secretkey_is_set @subsection @code{key_secretkey_is_set} @findex key_secretkey_is_set Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/key_secretkey_is_set.3.html,,man key_secretkey_is_set} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/key_setsecret.texi000066400000000000000000000007541411057217300237040ustar00rootroot00000000000000@node key_setsecret @subsection @code{key_setsecret} @findex key_setsecret Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/key_setsecret.3.html,,man key_setsecret} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/klogctl.texi000066400000000000000000000010351411057217300224630ustar00rootroot00000000000000@node klogctl @subsection @code{klogctl} @findex klogctl Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/klogctl.3.html,,man klogctl} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lchmod.texi000066400000000000000000000015341411057217300222760ustar00rootroot00000000000000@node lchmod @subsection @code{lchmod} @findex lchmod Gnulib module: lchmod Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared on some platforms: HP-UX 11.31. @item This function always fails with @code{errno} set to @code{ENOSYS}, even when the file is not a symbolic link: GNU/Linux with glibc 2.31. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms do not allow changing the access bits on symbolic links. @item This function can fail with @code{errno} set to @code{EMFILE} or @code{ENFILE}, and it fails with @code{errno} set to @code{EOPNOTSUPP} if the @file{/proc} file system is not mounted: GNU/Linux with glibc 2.34. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lckpwdf.texi000066400000000000000000000007331411057217300224620ustar00rootroot00000000000000@node lckpwdf @subsection @code{lckpwdf} @findex lckpwdf Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lckpwdf.3.html,,man lckpwdf} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lcong48_r.texi000066400000000000000000000015151411057217300226260ustar00rootroot00000000000000@node lcong48_r @subsection @code{lcong48_r} @findex lcong48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-lcong48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lcong48_r.3.html,,man lcong48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lgamma_r.texi000066400000000000000000000013661411057217300226120ustar00rootroot00000000000000@node lgamma_r @subsection @code{lgamma_r} @findex lgamma_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-lgamma-r.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lgamma_r.3.html,,man lgamma_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5 x86, Minix 3.1.8, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lgammaf_r.texi000066400000000000000000000014131411057217300227510ustar00rootroot00000000000000@node lgammaf_r @subsection @code{lgammaf_r} @findex lgammaf_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-lgammaf-r.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lgammaf_r.3.html,,man lgammaf_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lgammal_r.texi000066400000000000000000000015031411057217300227570ustar00rootroot00000000000000@node lgammal_r @subsection @code{lgammal_r} @findex lgammal_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-lgammal-r.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lgammal_r.3.html,,man lgammal_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lgetfilecon.texi000066400000000000000000000003271411057217300233220ustar00rootroot00000000000000@node lgetfilecon @subsection @code{lgetfilecon} @findex lgetfilecon Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lgetfilecon.3.html,,man lgetfilecon} @getfileconDesc{lgetfilecon} gnulib-20210822~d383792/doc/glibc-functions/lgetxattr.texi000066400000000000000000000010251411057217300230410ustar00rootroot00000000000000@node lgetxattr @subsection @code{lgetxattr} @findex lgetxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/lgetxattr.2.html,,man lgetxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/listxattr.texi000066400000000000000000000010111411057217300230540ustar00rootroot00000000000000@node listxattr @subsection @code{listxattr} @findex listxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/listxattr.2.html,,man listxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/llistxattr.texi000066400000000000000000000010321411057217300232330ustar00rootroot00000000000000@node llistxattr @subsection @code{llistxattr} @findex llistxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/llistxattr.2.html,,man llistxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/loc1.texi000066400000000000000000000006201411057217300216610ustar00rootroot00000000000000@node loc1 @subsection @code{loc1} @findex loc1 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/loc2.texi000066400000000000000000000006201411057217300216620ustar00rootroot00000000000000@node loc2 @subsection @code{loc2} @findex loc2 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/locs.texi000066400000000000000000000006201411057217300217630ustar00rootroot00000000000000@node locs @subsection @code{locs} @findex locs Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/login.texi000066400000000000000000000012741411057217300221410ustar00rootroot00000000000000@node login @subsection @code{login} @findex login Documentation: @itemize @item @ifinfo @ref{Logging In and Out,,Logging In and Out,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Logging-In-and-Out.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/login.3.html,,man login}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/login_tty.texi000066400000000000000000000023411411057217300230350ustar00rootroot00000000000000@node login_tty @subsection @code{login_tty} @findex login_tty Documentation: @itemize @item @ifinfo @ref{Logging In and Out,,Logging In and Out,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Logging-In-and-Out.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/login_tty.3.html,,man login_tty}. @end itemize Gnulib module: login_tty Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Android 5.1. @item This function requires linking with @code{-lutil} on some platforms: glibc 2.3.6, FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8. It is available without link options on other platforms: macOS 11.1, Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is declared in @code{} on glibc, Cygwin, in @code{} on macOS 11.1, NetBSD 5.0, OpenBSD 3.8, and in @code{} on FreeBSD 13.0, Haiku. Also note that @code{} is a prerequisite of @code{} on FreeBSD 8.0, OpenBSD 4.6 and of @code{} on FreeBSD 8.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lrand48_r.texi000066400000000000000000000015151411057217300226240ustar00rootroot00000000000000@node lrand48_r @subsection @code{lrand48_r} @findex lrand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-lrand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lrand48_r.3.html,,man lrand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lremovexattr.texi000066400000000000000000000010441411057217300235600ustar00rootroot00000000000000@node lremovexattr @subsection @code{lremovexattr} @findex lremovexattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/lremovexattr.2.html,,man lremovexattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lsetxattr.texi000066400000000000000000000010251411057217300230550ustar00rootroot00000000000000@node lsetxattr @subsection @code{lsetxattr} @findex lsetxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/lsetxattr.2.html,,man lsetxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/lutimes.texi000066400000000000000000000017311411057217300225110ustar00rootroot00000000000000@node lutimes @subsection @code{lutimes} @findex lutimes Documentation: @itemize @item @ifinfo @ref{File Times,,File Times,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/File-Times.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/lutimes.3.html,,man lutimes}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 7.1. @item This function cannot set full timestamp resolution. Use @code{utimensat(AT_FDCWD,file,times,AT_SYMLINK_NOFOLLOW)}, or the gnulib module @code{utimens}, instead. @item The mere act of using @code{lstat} modifies the access time of symlinks on some platforms, so @code{lutimes} can only effectively change modification time: Cygwin. @end itemize gnulib-20210822~d383792/doc/glibc-functions/madvise.texi000066400000000000000000000011661411057217300224610ustar00rootroot00000000000000@node madvise @subsection @code{madvise} @findex madvise Documentation: @itemize @item @ifinfo @ref{Memory-mapped I/O,,Memory-mapped I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/madvise.2.html,,man madvise}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 1.7.7, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mallinfo.texi000066400000000000000000000013161411057217300226270ustar00rootroot00000000000000@node mallinfo @subsection @code{mallinfo} @findex mallinfo Documentation: @itemize @item @ifinfo @ref{Statistics of Malloc,,Statistics for Memory Allocation with malloc,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mallinfo.3.html,,man mallinfo}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mallinfo2.texi000066400000000000000000000014041411057217300227070ustar00rootroot00000000000000@node mallinfo2 @subsection @code{mallinfo2} @findex mallinfo2 Documentation: @itemize @item @ifinfo @ref{Statistics of Malloc,,Statistics for Memory Allocation with malloc,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mallinfo2.3.html,,man mallinfo2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.32, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/malloc_info.texi000066400000000000000000000010511411057217300233040ustar00rootroot00000000000000@node malloc_info @subsection @code{malloc_info} @findex malloc_info Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/malloc_info.3.html,,man malloc_info} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/malloc_stats.texi000066400000000000000000000010121411057217300235040ustar00rootroot00000000000000@node malloc_stats @subsection @code{malloc_stats} @findex malloc_stats Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/malloc_stats.3.html,,man malloc_stats} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/malloc_trim.texi000066400000000000000000000010051411057217300233230ustar00rootroot00000000000000@node malloc_trim @subsection @code{malloc_trim} @findex malloc_trim Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/malloc_trim.3.html,,man malloc_trim} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/malloc_usable_size.texi000066400000000000000000000010521411057217300246570ustar00rootroot00000000000000@node malloc_usable_size @subsection @code{malloc_usable_size} @findex malloc_usable_size Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/malloc_usable_size.3.html,,man malloc_usable_size} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 4.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mallopt.texi000066400000000000000000000013151411057217300224750ustar00rootroot00000000000000@node mallopt @subsection @code{mallopt} @findex mallopt Documentation: @itemize @item @ifinfo @ref{Malloc Tunable Parameters,,Malloc Tunable Parameters,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Malloc-Tunable-Parameters.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mallopt.3.html,,man mallopt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/matherr.texi000066400000000000000000000010771411057217300224740ustar00rootroot00000000000000@node matherr @subsection @code{matherr} @findex matherr LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-matherr-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/matherr.3.html,,man matherr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mcheck.texi000066400000000000000000000013531411057217300222610ustar00rootroot00000000000000@node mcheck @subsection @code{mcheck} @findex mcheck Documentation: @itemize @item @ifinfo @ref{Heap Consistency Checking,,Heap Consistency Checking,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mcheck.3.html,,man mcheck}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mcheck_check_all.texi000066400000000000000000000010631411057217300242440ustar00rootroot00000000000000@node mcheck_check_all @subsection @code{mcheck_check_all} @findex mcheck_check_all Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mcheck_check_all.3.html,,man mcheck_check_all} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mcheck_pedantic.texi000066400000000000000000000010561411057217300241300ustar00rootroot00000000000000@node mcheck_pedantic @subsection @code{mcheck_pedantic} @findex mcheck_pedantic Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mcheck_pedantic.3.html,,man mcheck_pedantic} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/memalign.texi000066400000000000000000000020051411057217300226130ustar00rootroot00000000000000@node memalign @subsection @code{memalign} @findex memalign Documentation: @itemize @item @ifinfo @ref{Aligned Memory Blocks,,Allocating Aligned Memory Blocks,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/memalign.3.html,,man memalign}. @end itemize Gnulib module: memalign Portability problems fixed by Gnulib: @itemize @item This function is declared in @code{} instead of @code{} on some platforms: Solaris 11. @item This function doesn't accept an alignment of 1 or 2 on some platforms: Solaris 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.00, mingw, MSVC 14. @end itemize The Gnulib module @code{aligned-malloc} provides functions for allocating and freeing blocks of suitably aligned memory. gnulib-20210822~d383792/doc/glibc-functions/memfd_create.texi000066400000000000000000000014671411057217300234500ustar00rootroot00000000000000@node memfd_create @subsection @code{memfd_create} @findex memfd_create Documentation: @itemize @item @ifinfo @ref{Memory-mapped I/O,,Memory-mapped I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/memfd_create.2.html,,man memfd_create}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and FreeBSD and is therefore missing on many non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/memfrob.texi000066400000000000000000000013241411057217300224540ustar00rootroot00000000000000@node memfrob @subsection @code{memfrob} @findex memfrob Documentation: @itemize @item @ifinfo @ref{Obfuscating Data,,Obfuscating Data,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Obfuscating-Data.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/memfrob.3.html,,man memfrob}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/memmem.texi000066400000000000000000000033111411057217300223000ustar00rootroot00000000000000@node memmem @subsection @code{memmem} @findex memmem LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-memmem-3.html} Documentation: @itemize @item @ifinfo @ref{Search Functions,,Search Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/memmem.3.html,,man memmem}. @end itemize Gnulib module: memmem or memmem-simple Both modules implement the same replacement for the @code{memmem} function with the @code{memmem} module providing a replacement on more platforms where the existing @code{memmem} function has a quadratic worst-case complexity. Portability problems fixed by either Gnulib module @code{memmem-simple} or @code{memmem}: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 5.2.1, OpenBSD 4.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @item This function has reversed arguments on some older platforms: Linux libc 5.0.9 @item This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. @item This function returns incorrect values in some cases, such as when given an empty needle: glibc <= 2.0, Solaris 11.4, Cygwin 1.5.x. @end itemize Performance problems fixed by Gnulib module @code{memmem}: @itemize @item This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, FreeBSD 6.2, NetBSD 9.0, AIX 5.1, Solaris 11.4, Cygwin 1.5.x. Note for small needles the replacement may be slower. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/mempcpy.texi000066400000000000000000000013411411057217300224760ustar00rootroot00000000000000@node mempcpy @subsection @code{mempcpy} @findex mempcpy Documentation: @itemize @item @ifinfo @ref{Copying Strings and Arrays,,Copying Strings and Arrays,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Copying-Strings-and-Arrays.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mempcpy.3.html,,man mempcpy}. @end itemize Gnulib module: mempcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/memrchr.texi000066400000000000000000000015111411057217300224600ustar00rootroot00000000000000@node memrchr @subsection @code{memrchr} @findex memrchr LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-memrchr.html} Documentation: @itemize @item @ifinfo @ref{Search Functions,,Search Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/memrchr.3.html,,man memrchr}. @end itemize Gnulib module: memrchr Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/mincore.texi000066400000000000000000000006741411057217300224700ustar00rootroot00000000000000@node mincore @subsection @code{mincore} @findex mincore Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/mincore.2.html,,man mincore} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mkostemp.texi000066400000000000000000000016561411057217300226740ustar00rootroot00000000000000@node mkostemp @subsection @code{mkostemp} @findex mkostemp Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mkostemp.3.html,,man mkostemp} Gnulib module: mkostemp Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.5, mingw, MSVC 14, Android 5.1. @item This function is declared in @code{} instead of @code{} on some platforms: macOS 11.1. @item On platforms where @code{off_t} is a 32-bit type, @code{mkostemp} may not work correctly to create files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize The gnulib module @code{clean-temp} can create temporary files that will not be left behind after signals such as SIGINT. gnulib-20210822~d383792/doc/glibc-functions/mkostemps.texi000066400000000000000000000016661411057217300230600ustar00rootroot00000000000000@node mkostemps @subsection @code{mkostemps} @findex mkostemps Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mkostemps.3.html,,man mkostemps} Gnulib module: mkostemps Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.10, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.5, mingw, MSVC 14, Android 5.1. @item This function is declared in @code{} instead of @code{} on some platforms: macOS 11.1. @item On platforms where @code{off_t} is a 32-bit type, @code{mkostemps} may not work correctly to create files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize The gnulib module @code{clean-temp} can create temporary files that will not be left behind after signals such as SIGINT. gnulib-20210822~d383792/doc/glibc-functions/mkstemps.texi000066400000000000000000000015531411057217300226740ustar00rootroot00000000000000@node mkstemps @subsection @code{mkstemps} @findex mkstemps Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mkstemps.3.html,,man mkstemps} Gnulib module: mkstemps Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.10, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @item This function is declared in @code{} instead of @code{} on some platforms: macOS 11.1. @item On platforms where @code{off_t} is a 32-bit type, @code{mkstemps} may not work correctly to create files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize The gnulib module @code{clean-temp} can create temporary files that will not be left behind after signals such as SIGINT. gnulib-20210822~d383792/doc/glibc-functions/mlock2.texi000066400000000000000000000014311411057217300222130ustar00rootroot00000000000000@node mlock2 @subsection @code{mlock2} @findex mlock2 Documentation: @itemize @item @ifinfo @ref{Page Lock Functions,,Functions To Lock And Unlock Pages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Page-Lock-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/mlock2.2.html,,man mlock2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/monstartup.texi000066400000000000000000000005361411057217300232450ustar00rootroot00000000000000@node monstartup @subsection @code{monstartup} @findex monstartup Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mount.texi000066400000000000000000000011241411057217300221650ustar00rootroot00000000000000@node mount @subsection @code{mount} @findex mount Documentation: @itemize @item @ifinfo @ref{Mount-Unmount-Remount,,Mount Unmount Remount,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/mount.2.html,,man mount}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mprobe.texi000066400000000000000000000013411411057217300223100ustar00rootroot00000000000000@node mprobe @subsection @code{mprobe} @findex mprobe Documentation: @itemize @item @ifinfo @ref{Heap Consistency Checking,,Heap Consistency Checking,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mprobe.3.html,,man mprobe}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mrand48_r.texi000066400000000000000000000015151411057217300226250ustar00rootroot00000000000000@node mrand48_r @subsection @code{mrand48_r} @findex mrand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-mrand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mrand48_r.3.html,,man mrand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mremap.texi000066400000000000000000000014771411057217300223170ustar00rootroot00000000000000@node mremap @subsection @code{mremap} @findex mremap LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-mremap.html} Documentation: @itemize @item @ifinfo @ref{Memory-mapped I/O,,Memory-mapped I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/mremap.2.html,,man mremap}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: macOS 11.1, FreeBSD 13.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/mtrace.texi000066400000000000000000000013431411057217300223010ustar00rootroot00000000000000@node mtrace @subsection @code{mtrace} @findex mtrace Documentation: @itemize @item @ifinfo @ref{Tracing malloc,,How to install the tracing functionality,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Tracing-malloc.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/mtrace.3.html,,man mtrace}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/muntrace.texi000066400000000000000000000013551411057217300226470ustar00rootroot00000000000000@node muntrace @subsection @code{muntrace} @findex muntrace Documentation: @itemize @item @ifinfo @ref{Tracing malloc,,How to install the tracing functionality,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Tracing-malloc.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/muntrace.3.html,,man muntrace}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/name_to_handle_at.texi000066400000000000000000000011521411057217300244450ustar00rootroot00000000000000@node name_to_handle_at @subsection @code{name_to_handle_at} @findex name_to_handle_at Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/name_to_handle_at.2.html,,man name_to_handle_at} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/netname2host.texi000066400000000000000000000005471411057217300234420ustar00rootroot00000000000000@node netname2host @subsection @code{netname2host} @findex netname2host Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/netname2user.texi000066400000000000000000000005471411057217300234430ustar00rootroot00000000000000@node netname2user @subsection @code{netname2user} @findex netname2user Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ngettext.texi000066400000000000000000000015421411057217300226710ustar00rootroot00000000000000@node ngettext @subsection @code{ngettext} @findex ngettext LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ngettext.html} Documentation: @itemize @item @ifinfo @ref{Advanced gettext functions,,Additional functions for more complicated situations,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Advanced-gettext-functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ngettext.3.html,,man ngettext}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_add.texi000066400000000000000000000005761411057217300224360ustar00rootroot00000000000000@node nis_add @subsection @code{nis_add} @findex nis_add Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_add_entry.texi000066400000000000000000000006201411057217300236450ustar00rootroot00000000000000@node nis_add_entry @subsection @code{nis_add_entry} @findex nis_add_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_addmember.texi000066400000000000000000000006201411057217300236140ustar00rootroot00000000000000@node nis_addmember @subsection @code{nis_addmember} @findex nis_addmember Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_checkpoint.texi000066400000000000000000000006231411057217300240260ustar00rootroot00000000000000@node nis_checkpoint @subsection @code{nis_checkpoint} @findex nis_checkpoint Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_clone_object.texi000066400000000000000000000006131411057217300243240ustar00rootroot00000000000000@node nis_clone_object @subsection @code{nis_clone_object} @findex nis_clone_object Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_creategroup.texi000066400000000000000000000006261411057217300242220ustar00rootroot00000000000000@node nis_creategroup @subsection @code{nis_creategroup} @findex nis_creategroup Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_destroy_object.texi000066400000000000000000000006211411057217300247140ustar00rootroot00000000000000@node nis_destroy_object @subsection @code{nis_destroy_object} @findex nis_destroy_object Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_destroygroup.texi000066400000000000000000000006311411057217300244440ustar00rootroot00000000000000@node nis_destroygroup @subsection @code{nis_destroygroup} @findex nis_destroygroup Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_dir_cmp.texi000066400000000000000000000005741411057217300233210ustar00rootroot00000000000000@node nis_dir_cmp @subsection @code{nis_dir_cmp} @findex nis_dir_cmp Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_domain_of.texi000066400000000000000000000006021411057217300236270ustar00rootroot00000000000000@node nis_domain_of @subsection @code{nis_domain_of} @findex nis_domain_of Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_domain_of_r.texi000066400000000000000000000006621411057217300241560ustar00rootroot00000000000000@node nis_domain_of_r @subsection @code{nis_domain_of_r} @findex nis_domain_of_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_first_entry.texi000066400000000000000000000006261411057217300242520ustar00rootroot00000000000000@node nis_first_entry @subsection @code{nis_first_entry} @findex nis_first_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_freenames.texi000066400000000000000000000006201411057217300236410ustar00rootroot00000000000000@node nis_freenames @subsection @code{nis_freenames} @findex nis_freenames Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_freeresult.texi000066400000000000000000000006231411057217300240570ustar00rootroot00000000000000@node nis_freeresult @subsection @code{nis_freeresult} @findex nis_freeresult Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_freeservlist.texi000066400000000000000000000006311411057217300244130ustar00rootroot00000000000000@node nis_freeservlist @subsection @code{nis_freeservlist} @findex nis_freeservlist Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_freetags.texi000066400000000000000000000006151411057217300235000ustar00rootroot00000000000000@node nis_freetags @subsection @code{nis_freetags} @findex nis_freetags Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_getnames.texi000066400000000000000000000006151411057217300235030ustar00rootroot00000000000000@node nis_getnames @subsection @code{nis_getnames} @findex nis_getnames Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_getservlist.texi000066400000000000000000000006261411057217300242550ustar00rootroot00000000000000@node nis_getservlist @subsection @code{nis_getservlist} @findex nis_getservlist Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_ismember.texi000066400000000000000000000006151411057217300235030ustar00rootroot00000000000000@node nis_ismember @subsection @code{nis_ismember} @findex nis_ismember Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_leaf_of.texi000066400000000000000000000005741411057217300232770ustar00rootroot00000000000000@node nis_leaf_of @subsection @code{nis_leaf_of} @findex nis_leaf_of Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_leaf_of_r.texi000066400000000000000000000006131411057217300236120ustar00rootroot00000000000000@node nis_leaf_of_r @subsection @code{nis_leaf_of_r} @findex nis_leaf_of_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_lerror.texi000066400000000000000000000006071411057217300232060ustar00rootroot00000000000000@node nis_lerror @subsection @code{nis_lerror} @findex nis_lerror Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_list.texi000066400000000000000000000006011411057217300226460ustar00rootroot00000000000000@node nis_list @subsection @code{nis_list} @findex nis_list Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_local_directory.texi000066400000000000000000000006241411057217300250560ustar00rootroot00000000000000@node nis_local_directory @subsection @code{nis_local_directory} @findex nis_local_directory Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_local_group.texi000066400000000000000000000006101411057217300242010ustar00rootroot00000000000000@node nis_local_group @subsection @code{nis_local_group} @findex nis_local_group Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_local_host.texi000066400000000000000000000006051411057217300240260ustar00rootroot00000000000000@node nis_local_host @subsection @code{nis_local_host} @findex nis_local_host Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_local_principal.texi000066400000000000000000000006421411057217300250330ustar00rootroot00000000000000@node nis_local_principal @subsection @code{nis_local_principal} @findex nis_local_principal Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_lookup.texi000066400000000000000000000006071411057217300232120ustar00rootroot00000000000000@node nis_lookup @subsection @code{nis_lookup} @findex nis_lookup Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_mkdir.texi000066400000000000000000000006041411057217300230040ustar00rootroot00000000000000@node nis_mkdir @subsection @code{nis_mkdir} @findex nis_mkdir Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_modify.texi000066400000000000000000000006071411057217300231700ustar00rootroot00000000000000@node nis_modify @subsection @code{nis_modify} @findex nis_modify Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_modify_entry.texi000066400000000000000000000006311411057217300244060ustar00rootroot00000000000000@node nis_modify_entry @subsection @code{nis_modify_entry} @findex nis_modify_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_name_of.texi000066400000000000000000000005741411057217300233100ustar00rootroot00000000000000@node nis_name_of @subsection @code{nis_name_of} @findex nis_name_of Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_name_of_r.texi000066400000000000000000000006311411057217300236230ustar00rootroot00000000000000@node nis_name_of_r @subsection @code{nis_name_of_r} @findex nis_name_of_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_next_entry.texi000066400000000000000000000006231411057217300240760ustar00rootroot00000000000000@node nis_next_entry @subsection @code{nis_next_entry} @findex nis_next_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_perror.texi000066400000000000000000000006071411057217300232120ustar00rootroot00000000000000@node nis_perror @subsection @code{nis_perror} @findex nis_perror Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_ping.texi000066400000000000000000000006011411057217300226300ustar00rootroot00000000000000@node nis_ping @subsection @code{nis_ping} @findex nis_ping Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_directory.texi000066400000000000000000000006531411057217300251220ustar00rootroot00000000000000@node nis_print_directory @subsection @code{nis_print_directory} @findex nis_print_directory Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_entry.texi000066400000000000000000000006371411057217300242610ustar00rootroot00000000000000@node nis_print_entry @subsection @code{nis_print_entry} @findex nis_print_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_group.texi000066400000000000000000000006371411057217300242540ustar00rootroot00000000000000@node nis_print_group @subsection @code{nis_print_group} @findex nis_print_group Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_group_entry.texi000066400000000000000000000006621411057217300254730ustar00rootroot00000000000000@node nis_print_group_entry @subsection @code{nis_print_group_entry} @findex nis_print_group_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_link.texi000066400000000000000000000006341411057217300240520ustar00rootroot00000000000000@node nis_print_link @subsection @code{nis_print_link} @findex nis_print_link Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_object.texi000066400000000000000000000006311411057217300243600ustar00rootroot00000000000000@node nis_print_object @subsection @code{nis_print_object} @findex nis_print_object Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_result.texi000066400000000000000000000006651411057217300244370ustar00rootroot00000000000000@node nis_print_result @subsection @code{nis_print_result} @findex nis_print_result Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_rights.texi000066400000000000000000000006311411057217300244120ustar00rootroot00000000000000@node nis_print_rights @subsection @code{nis_print_rights} @findex nis_print_rights Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_print_table.texi000066400000000000000000000006371411057217300242070ustar00rootroot00000000000000@node nis_print_table @subsection @code{nis_print_table} @findex nis_print_table Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_remove.texi000066400000000000000000000006071411057217300231760ustar00rootroot00000000000000@node nis_remove @subsection @code{nis_remove} @findex nis_remove Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_remove_entry.texi000066400000000000000000000006311411057217300244140ustar00rootroot00000000000000@node nis_remove_entry @subsection @code{nis_remove_entry} @findex nis_remove_entry Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_removemember.texi000066400000000000000000000006311411057217300243630ustar00rootroot00000000000000@node nis_removemember @subsection @code{nis_removemember} @findex nis_removemember Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_rmdir.texi000066400000000000000000000006041411057217300230130ustar00rootroot00000000000000@node nis_rmdir @subsection @code{nis_rmdir} @findex nis_rmdir Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_servstate.texi000066400000000000000000000006201411057217300237140ustar00rootroot00000000000000@node nis_servstate @subsection @code{nis_servstate} @findex nis_servstate Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_sperrno.texi000066400000000000000000000006121411057217300233650ustar00rootroot00000000000000@node nis_sperrno @subsection @code{nis_sperrno} @findex nis_sperrno Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_sperror.texi000066400000000000000000000006121411057217300233710ustar00rootroot00000000000000@node nis_sperror @subsection @code{nis_sperror} @findex nis_sperror Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_sperror_r.texi000066400000000000000000000006311411057217300237130ustar00rootroot00000000000000@node nis_sperror_r @subsection @code{nis_sperror_r} @findex nis_sperror_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_stats.texi000066400000000000000000000006041411057217300230340ustar00rootroot00000000000000@node nis_stats @subsection @code{nis_stats} @findex nis_stats Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nis_verifygroup.texi000066400000000000000000000006261411057217300242630ustar00rootroot00000000000000@node nis_verifygroup @subsection @code{nis_verifygroup} @findex nis_verifygroup Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/nrand48_r.texi000066400000000000000000000015151411057217300226260ustar00rootroot00000000000000@node nrand48_r @subsection @code{nrand48_r} @findex nrand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-nrand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nrand48_r.3.html,,man nrand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ntp_adjtime.texi000066400000000000000000000013031411057217300233200ustar00rootroot00000000000000@node ntp_adjtime @subsection @code{ntp_adjtime} @findex ntp_adjtime Documentation: @itemize @item @ifinfo @ref{High Accuracy Clock,,High Accuracy Clock,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/High-Accuracy-Clock.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ntp_adjtime.3.html,,man ntp_adjtime}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ntp_gettime.texi000066400000000000000000000013031411057217300233410ustar00rootroot00000000000000@node ntp_gettime @subsection @code{ntp_gettime} @findex ntp_gettime Documentation: @itemize @item @ifinfo @ref{High Accuracy Clock,,High Accuracy Clock,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/High-Accuracy-Clock.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ntp_gettime.3.html,,man ntp_gettime}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ntp_gettimex.texi000066400000000000000000000010561411057217300235360ustar00rootroot00000000000000@node ntp_gettimex @subsection @code{ntp_gettimex} @findex ntp_gettimex Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ntp_gettimex.3.html,,man ntp_gettimex} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.11, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/obstack_alloc_failed_handler.texi000066400000000000000000000012471411057217300266320ustar00rootroot00000000000000@node obstack_alloc_failed_handler @subsection @code{obstack_alloc_failed_handler} @findex obstack_alloc_failed_handler Documentation:@* @ifinfo @ref{Preparing for Obstacks,,Preparing for Using Obstacks,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Preparing-for-Obstacks.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/obstack_exit_failure.texi000066400000000000000000000006701411057217300252160ustar00rootroot00000000000000@node obstack_exit_failure @subsection @code{obstack_exit_failure} @findex obstack_exit_failure Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/obstack_free.texi000066400000000000000000000011721411057217300234550ustar00rootroot00000000000000@node obstack_free @subsection @code{obstack_free} @findex obstack_free Documentation:@* @ifinfo @ref{Freeing Obstack Objects,,Freeing Objects in an Obstack,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Freeing-Obstack-Objects.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/obstack_printf.texi000066400000000000000000000061471411057217300240450ustar00rootroot00000000000000@node obstack_printf @subsection @code{obstack_printf} @findex obstack_printf Documentation:@* @ifinfo @ref{Dynamic Output,,Dynamically Allocating Formatted Output,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Dynamic-Output.html}. @end ifnotinfo Gnulib module: obstack-printf or obstack-printf-posix Portability problems fixed by either Gnulib module @code{obstack-printf} or @code{obstack-printf-posix}: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems fixed by Gnulib module @code{obstack-printf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.0, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 6.1. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 13.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.0, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: Solaris 10/x86, mingw, MSVC/clang. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/obstack_vprintf.texi000066400000000000000000000061741411057217300242330ustar00rootroot00000000000000@node obstack_vprintf @subsection @code{obstack_vprintf} @findex obstack_vprintf Documentation:@* @ifinfo @ref{Variable Arguments Output,,Variable Arguments Output Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Variable-Arguments-Output.html}. @end ifnotinfo Gnulib module: obstack-printf or obstack-printf-posix Portability problems fixed by either Gnulib module @code{obstack-printf} or @code{obstack-printf-posix}: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems fixed by Gnulib module @code{obstack-printf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.0, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 6.1. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 13.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.0, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: Solaris 10/x86, mingw, MSVC/clang. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/on_exit.texi000066400000000000000000000012661411057217300224770ustar00rootroot00000000000000@node on_exit @subsection @code{on_exit} @findex on_exit Documentation: @itemize @item @ifinfo @ref{Cleanups on Exit,,Cleanups on Exit,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Cleanups-on-Exit.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/on_exit.3.html,,man on_exit}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/open_by_handle_at.texi000066400000000000000000000011521411057217300244560ustar00rootroot00000000000000@node open_by_handle_at @subsection @code{open_by_handle_at} @findex open_by_handle_at Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/open_by_handle_at.2.html,,man open_by_handle_at} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/openpty.texi000066400000000000000000000023431411057217300225250ustar00rootroot00000000000000@node openpty @subsection @code{openpty} @findex openpty Documentation: @itemize @item @ifinfo @ref{Pseudo-Terminal Pairs,,Opening a Pseudo-Terminal Pair,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Pseudo_002dTerminal-Pairs.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/openpty.3.html,,man openpty}. @end itemize Gnulib module: openpty Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Android 5.1. @item One some systems (at least including Cygwin and Mac OS X) linking with @code{-lutil} is not required. @item On glibc, OpenBSD, NetBSD and FreeBSD linking with @code{-lutil} is required. @item The function is declared in pty.h on glibc and Cygwin. It is declared in util.h on Mac OS X, OpenBSD, and NetBSD. It is declared in libutil.h on FreeBSD. It is declared in termios.h on Solaris. @item Some platforms declare the function without marking the last two parameters @code{const}. FreeBSD 13.0, Solaris 11.4, Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/parse_printf_format.texi000066400000000000000000000012311411057217300250660ustar00rootroot00000000000000@node parse_printf_format @subsection @code{parse_printf_format} @findex parse_printf_format Documentation:@* @ifinfo @ref{Parsing a Template String,,Parsing a Template String,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-a-Template-String.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/personality.texi000066400000000000000000000011001411057217300233660ustar00rootroot00000000000000@node personality @subsection @code{personality} @findex personality Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/personality.2.html,,man personality} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.0.2. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pipe2.texi000066400000000000000000000015651411057217300220530ustar00rootroot00000000000000@node pipe2 @subsection @code{pipe2} @findex pipe2 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html,,man pipe2} Gnulib module: pipe2 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.8, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.1, mingw, MSVC 14, Android 2.2. But the replacement function is not atomic; this matters in multi-threaded programs that spawn child processes. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function crashes rather than failing with @code{EMFILE} if no resources are left on some platforms: Cygwin 1.7.9. @end itemize Note: This function portably supports the @code{O_NONBLOCK} flag only if the gnulib module @code{nonblocking} is also used. gnulib-20210822~d383792/doc/glibc-functions/pkey_alloc.texi000066400000000000000000000014301411057217300231450ustar00rootroot00000000000000@node pkey_alloc @subsection @code{pkey_alloc} @findex pkey_alloc Documentation: @itemize @item @ifinfo @ref{Memory Protection,,Memory Protection,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory-Protection.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pkey_alloc.2.html,,man pkey_alloc}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pkey_free.texi000066400000000000000000000014231411057217300227760ustar00rootroot00000000000000@node pkey_free @subsection @code{pkey_free} @findex pkey_free Documentation: @itemize @item @ifinfo @ref{Memory Protection,,Memory Protection,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory-Protection.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pkey_free.2.html,,man pkey_free}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pkey_get.texi000066400000000000000000000012211411057217300226300ustar00rootroot00000000000000@node pkey_get @subsection @code{pkey_get} @findex pkey_get Documentation:@* @ifinfo @ref{Memory Protection,,Memory Protection,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory-Protection.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pkey_mprotect.texi000066400000000000000000000014471411057217300237200ustar00rootroot00000000000000@node pkey_mprotect @subsection @code{pkey_mprotect} @findex pkey_mprotect Documentation: @itemize @item @ifinfo @ref{Memory Protection,,Memory Protection,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory-Protection.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pkey_mprotect.2.html,,man pkey_mprotect}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pkey_set.texi000066400000000000000000000012211411057217300226440ustar00rootroot00000000000000@node pkey_set @subsection @code{pkey_set} @findex pkey_set Documentation:@* @ifinfo @ref{Memory Protection,,Memory Protection,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Memory-Protection.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pmap_getmaps.texi000066400000000000000000000006701411057217300235050ustar00rootroot00000000000000@node pmap_getmaps @subsection @code{pmap_getmaps} @findex pmap_getmaps Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pmap_getmaps.3.html,,man pmap_getmaps} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pmap_getport.texi000066400000000000000000000010731411057217300235270ustar00rootroot00000000000000@node pmap_getport @subsection @code{pmap_getport} @findex pmap_getport LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pmap-getport-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pmap_getport.3.html,,man pmap_getport} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pmap_rmtcall.texi000066400000000000000000000006701411057217300235030ustar00rootroot00000000000000@node pmap_rmtcall @subsection @code{pmap_rmtcall} @findex pmap_rmtcall Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pmap_rmtcall.3.html,,man pmap_rmtcall} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pmap_set.texi000066400000000000000000000010431411057217300226330ustar00rootroot00000000000000@node pmap_set @subsection @code{pmap_set} @findex pmap_set LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pmap-set-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pmap_set.3.html,,man pmap_set} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pmap_unset.texi000066400000000000000000000010571411057217300232030ustar00rootroot00000000000000@node pmap_unset @subsection @code{pmap_unset} @findex pmap_unset LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pmap-unset-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pmap_unset.3.html,,man pmap_unset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/posix_spawn_file_actions_addchdir_np.texi000066400000000000000000000012221411057217300304320ustar00rootroot00000000000000@node posix_spawn_file_actions_addchdir_np @subsection @code{posix_spawn_file_actions_addchdir_np} @findex posix_spawn_file_actions_addchdir_np Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.28, macOS 10.13, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Note: Gnulib has a module @code{posix_spawn_file_actions_addchdir} that provides equivalent functionality, just without the suffix @code{_np}. gnulib-20210822~d383792/doc/glibc-functions/posix_spawn_file_actions_addclosefrom_np.texi000066400000000000000000000010131411057217300313300ustar00rootroot00000000000000@node posix_spawn_file_actions_addclosefrom_np @subsection @code{posix_spawn_file_actions_addclosefrom_np} @findex posix_spawn_file_actions_addclosefrom_np Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.33, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/posix_spawn_file_actions_addfchdir_np.texi000066400000000000000000000012251411057217300306030ustar00rootroot00000000000000@node posix_spawn_file_actions_addfchdir_np @subsection @code{posix_spawn_file_actions_addfchdir_np} @findex posix_spawn_file_actions_addfchdir_np Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.28, macOS 10.13, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Note: Gnulib has a module @code{posix_spawn_file_actions_addfchdir} that provides equivalent functionality, just without the suffix @code{_np}. gnulib-20210822~d383792/doc/glibc-functions/pow10.texi000066400000000000000000000011571411057217300217770ustar00rootroot00000000000000@node pow10 @subsection @code{pow10} @findex pow10 LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pow10.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pow10.3.html,,man pow10} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pow10f.texi000066400000000000000000000011651411057217300221440ustar00rootroot00000000000000@node pow10f @subsection @code{pow10f} @findex pow10f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pow10f.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pow10f.3.html,,man pow10f} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pow10l.texi000066400000000000000000000011771411057217300221550ustar00rootroot00000000000000@node pow10l @subsection @code{pow10l} @findex pow10l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pow10l.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pow10l.3.html,,man pow10l} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ppoll.texi000066400000000000000000000010021411057217300221440ustar00rootroot00000000000000@node ppoll @subsection @code{ppoll} @findex ppoll Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/ppoll.2.html,,man ppoll} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/prctl.texi000066400000000000000000000007341411057217300221550ustar00rootroot00000000000000@node prctl @subsection @code{prctl} @findex prctl Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/prctl.2.html,,man prctl} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/preadv.texi000066400000000000000000000015631411057217300223130ustar00rootroot00000000000000@node preadv @subsection @code{preadv} @findex preadv Documentation: @itemize @item @ifinfo @ref{Scatter-Gather,,Fast Scatter-Gather I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/preadv.2.html,,man preadv}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.9, macOS 10.13, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize gnulib-20210822~d383792/doc/glibc-functions/preadv2.texi000066400000000000000000000014161411057217300223720ustar00rootroot00000000000000@node preadv2 @subsection @code{preadv2} @findex preadv2 Documentation: @itemize @item @ifinfo @ref{Scatter-Gather,,Fast Scatter-Gather I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/preadv2.2.html,,man preadv2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.25, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/printf_size.texi000066400000000000000000000012041411057217300233560ustar00rootroot00000000000000@node printf_size @subsection @code{printf_size} @findex printf_size Documentation:@* @ifinfo @ref{Predefined Printf Handlers,,Predefined printf Handlers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Predefined-Printf-Handlers.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/printf_size_info.texi000066400000000000000000000012231411057217300243720ustar00rootroot00000000000000@node printf_size_info @subsection @code{printf_size_info} @findex printf_size_info Documentation:@* @ifinfo @ref{Predefined Printf Handlers,,Predefined printf Handlers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Predefined-Printf-Handlers.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/prlimit.texi000066400000000000000000000010711411057217300225040ustar00rootroot00000000000000@node prlimit @subsection @code{prlimit} @findex prlimit Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/prlimit.2.html,,man prlimit} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.12, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/process_vm_readv.texi000066400000000000000000000011461411057217300243700ustar00rootroot00000000000000@node process_vm_readv @subsection @code{process_vm_readv} @findex process_vm_readv Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/process_vm_readv.2.html,,man process_vm_readv} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/process_vm_writev.texi000066400000000000000000000011531411057217300246050ustar00rootroot00000000000000@node process_vm_writev @subsection @code{process_vm_writev} @findex process_vm_writev Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/process_vm_writev.2.html,,man process_vm_writev} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/profil.texi000066400000000000000000000006431411057217300223230ustar00rootroot00000000000000@node profil @subsection @code{profil} @findex profil Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/profil.3.html,,man profil} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/program_invocation_name.texi000066400000000000000000000014271411057217300257310ustar00rootroot00000000000000@node program_invocation_name @subsection @code{program_invocation_name} @findex program_invocation_name Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/program_invocation_name.3.html,,man program_invocation_name}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/program_invocation_short_name.texi000066400000000000000000000014651411057217300271520ustar00rootroot00000000000000@node program_invocation_short_name @subsection @code{program_invocation_short_name} @findex program_invocation_short_name Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/program_invocation_short_name.3.html,,man program_invocation_short_name}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.7, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_attr_getaffinity_np.texi000066400000000000000000000013101411057217300265670ustar00rootroot00000000000000@node pthread_attr_getaffinity_np @subsection @code{pthread_attr_getaffinity_np} @findex pthread_attr_getaffinity_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_attr_getaffinity_np.3.html,,man pthread_attr_getaffinity_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.3.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_attr_getsigmask_np.texi000066400000000000000000000013301411057217300264160ustar00rootroot00000000000000@node pthread_attr_getsigmask_np @subsection @code{pthread_attr_getsigmask_np} @findex pthread_attr_getsigmask_np Documentation:@* @ifinfo @ref{Initial Thread Signal Mask,,Controlling the Initial Signal Mask of a New Thread,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Initial-Thread-Signal-Mask.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_attr_setaffinity_np.texi000066400000000000000000000013101411057217300266030ustar00rootroot00000000000000@node pthread_attr_setaffinity_np @subsection @code{pthread_attr_setaffinity_np} @findex pthread_attr_setaffinity_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_attr_setaffinity_np.3.html,,man pthread_attr_setaffinity_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.3.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_attr_setsigmask_np.texi000066400000000000000000000013301411057217300264320ustar00rootroot00000000000000@node pthread_attr_setsigmask_np @subsection @code{pthread_attr_setsigmask_np} @findex pthread_attr_setsigmask_np Documentation:@* @ifinfo @ref{Initial Thread Signal Mask,,Controlling the Initial Signal Mask of a New Thread,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Initial-Thread-Signal-Mask.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_clockjoin_np.texi000066400000000000000000000015341411057217300252070ustar00rootroot00000000000000@node pthread_clockjoin_np @subsection @code{pthread_clockjoin_np} @findex pthread_clockjoin_np Documentation: @itemize @item @ifinfo @ref{Default Thread Attributes,,Setting Process-wide defaults for thread attributes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Default-Thread-Attributes.html}. @end ifnotinfo @c Not yet. @c @item @c @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_clockjoin_np.3.html,,man pthread_clockjoin_np}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_cond_clockwait.texi000066400000000000000000000012601411057217300255160ustar00rootroot00000000000000@node pthread_cond_clockwait @subsection @code{pthread_cond_clockwait} @findex pthread_cond_clockwait Documentation: @itemize @item @ifinfo @ref{Non-POSIX Extensions,,Non-POSIX Extensions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Non_002dPOSIX-Extensions.html}, @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_getaffinity_np.texi000066400000000000000000000014131411057217300255410ustar00rootroot00000000000000@node pthread_getaffinity_np @subsection @code{pthread_getaffinity_np} @findex pthread_getaffinity_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_getaffinity_np.3.html,,man pthread_getaffinity_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.3.3. @item The third parameter has a different type on some platforms: FreeBSD 13.0, NetBSD 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_getattr_default_np.texi000066400000000000000000000015671411057217300264200ustar00rootroot00000000000000@node pthread_getattr_default_np @subsection @code{pthread_getattr_default_np} @findex pthread_getattr_default_np Documentation: @itemize @item @ifinfo @ref{Default Thread Attributes,,Setting Process-wide defaults for thread attributes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Default-Thread-Attributes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_getattr_default_np.3.html,,man pthread_getattr_default_np}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.17, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_getattr_np.texi000066400000000000000000000012741411057217300247070ustar00rootroot00000000000000@node pthread_getattr_np @subsection @code{pthread_getattr_np} @findex pthread_getattr_np LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pthread-getattr-np-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_getattr_np.3.html,,man pthread_getattr_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_getname_np.texi000066400000000000000000000011061411057217300246470ustar00rootroot00000000000000@node pthread_getname_np @subsection @code{pthread_getname_np} @findex pthread_getname_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_getname_np.3.html,,man pthread_getname_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 12.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_kill_other_threads_np.texi000066400000000000000000000011641411057217300271010ustar00rootroot00000000000000@node pthread_kill_other_threads_np @subsection @code{pthread_kill_other_threads_np} @findex pthread_kill_other_threads_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_kill_other_threads_np.3.html,,man pthread_kill_other_threads_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_mutex_clocklock.texi000066400000000000000000000007361411057217300257300ustar00rootroot00000000000000@node pthread_mutex_clocklock @subsection @code{pthread_mutex_clocklock} @findex pthread_mutex_clocklock Documentation: --- Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_rwlock_clockrdlock.texi000066400000000000000000000012741411057217300264130ustar00rootroot00000000000000@node pthread_rwlock_clockrdlock @subsection @code{pthread_rwlock_clockrdlock} @findex pthread_rwlock_clockrdlock Documentation: @itemize @item @ifinfo @ref{Non-POSIX Extensions,,Non-POSIX Extensions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Non_002dPOSIX-Extensions.html}, @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_rwlock_clockwrlock.texi000066400000000000000000000012741411057217300264360ustar00rootroot00000000000000@node pthread_rwlock_clockwrlock @subsection @code{pthread_rwlock_clockwrlock} @findex pthread_rwlock_clockwrlock Documentation: @itemize @item @ifinfo @ref{Non-POSIX Extensions,,Non-POSIX Extensions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Non_002dPOSIX-Extensions.html}, @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_rwlockattr_getkind_np.texi000066400000000000000000000014111411057217300271270ustar00rootroot00000000000000@node pthread_rwlockattr_getkind_np @subsection @code{pthread_rwlockattr_getkind_np} @findex pthread_rwlockattr_getkind_np LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pthread-rwlockattr-getkind-np-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_rwlockattr_getkind_np.3.html,,man pthread_rwlockattr_getkind_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_rwlockattr_setkind_np.texi000066400000000000000000000014111411057217300271430ustar00rootroot00000000000000@node pthread_rwlockattr_setkind_np @subsection @code{pthread_rwlockattr_setkind_np} @findex pthread_rwlockattr_setkind_np LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-pthread-rwlockattr-getkind-np-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_rwlockattr_setkind_np.3.html,,man pthread_rwlockattr_setkind_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_setaffinity_np.texi000066400000000000000000000014131411057217300255550ustar00rootroot00000000000000@node pthread_setaffinity_np @subsection @code{pthread_setaffinity_np} @findex pthread_setaffinity_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setaffinity_np.3.html,,man pthread_setaffinity_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.3.3. @item The third parameter has a different type on some platforms: FreeBSD 13.0, NetBSD 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_setattr_default_np.texi000066400000000000000000000015671411057217300264340ustar00rootroot00000000000000@node pthread_setattr_default_np @subsection @code{pthread_setattr_default_np} @findex pthread_setattr_default_np Documentation: @itemize @item @ifinfo @ref{Default Thread Attributes,,Setting Process-wide defaults for thread attributes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Default-Thread-Attributes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setattr_default_np.3.html,,man pthread_setattr_default_np}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.17, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_setname_np.texi000066400000000000000000000013731411057217300246710ustar00rootroot00000000000000@node pthread_setname_np @subsection @code{pthread_setname_np} @findex pthread_setname_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setname_np.3.html,,man pthread_setname_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 12.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 1.7.x, mingw, MSVC 14. @item This function has a different signature on some platforms: NetBSD 9.0. On NetBSD the second argument is interpreted as a @code{printf} format string, with the third argument as parameter. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_sigqueue.texi000066400000000000000000000011051411057217300243600ustar00rootroot00000000000000@node pthread_sigqueue @subsection @code{pthread_sigqueue} @findex pthread_sigqueue Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_sigqueue.3.html,,man pthread_sigqueue} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.10, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.0, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_timedjoin_np.texi000066400000000000000000000013321411057217300252120ustar00rootroot00000000000000@node pthread_timedjoin_np @subsection @code{pthread_timedjoin_np} @findex pthread_timedjoin_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_timedjoin_np.3.html,,man pthread_timedjoin_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item FreeBSD 6.4 has a function of this name in @code{libthr} but not in @code{libpthread}, and it also is missing a declaration. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pthread_tryjoin_np.texi000066400000000000000000000011151411057217300247250ustar00rootroot00000000000000@node pthread_tryjoin_np @subsection @code{pthread_tryjoin_np} @findex pthread_tryjoin_np Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_tryjoin_np.3.html,,man pthread_tryjoin_np} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.3.2, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ptrace.texi000066400000000000000000000010061411057217300223000ustar00rootroot00000000000000@node ptrace @subsection @code{ptrace} @findex ptrace LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ptrace-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/ptrace.2.html,,man ptrace} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ptsname_r.texi000066400000000000000000000022431411057217300230160ustar00rootroot00000000000000@node ptsname_r @subsection @code{ptsname_r} @findex ptsname_r Documentation: @itemize @item @ifinfo @ref{Allocation,,Allocating Pseudo-Terminals,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Allocation.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ptsname_r.3.html,,man ptsname_r}. @end itemize Gnulib module: ptsname_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 12.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. @item When this function fails, it returns -1 instead of the error code on some platforms: macOS 11.1, FreeBSD 13.0, Android 4.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item When this function fails, it returns 0 and stores an empty string as result on some platforms: Cygwin 2.9. @end itemize Note: Portable programs should expect to find the error code as the return value of this function, not as the value of @code{errno}. This is needed for compatibility with musl libc and with the forthcoming POSIX Issue 8. gnulib-20210822~d383792/doc/glibc-functions/putgrent.texi000066400000000000000000000007711411057217300227020ustar00rootroot00000000000000@node putgrent @subsection @code{putgrent} @findex putgrent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putgrent.3.html,,man putgrent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/putpwent.texi000066400000000000000000000012611411057217300227130ustar00rootroot00000000000000@node putpwent @subsection @code{putpwent} @findex putpwent Documentation: @itemize @item @ifinfo @ref{Writing a User Entry,,Writing a User Entry,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Writing-a-User-Entry.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putpwent.3.html,,man putpwent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/putsgent.texi000066400000000000000000000006531411057217300227020ustar00rootroot00000000000000@node putsgent @subsection @code{putsgent} @findex putsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/putspent.texi000066400000000000000000000007521411057217300227130ustar00rootroot00000000000000@node putspent @subsection @code{putspent} @findex putspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putspent.3.html,,man putspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pututline.texi000066400000000000000000000012741411057217300230620ustar00rootroot00000000000000@node pututline @subsection @code{pututline} @findex pututline Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pututline.3.html,,man pututline}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/putw.texi000066400000000000000000000010041411057217300220170ustar00rootroot00000000000000@node putw @subsection @code{putw} @findex putw Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putw.3.html,,man putw}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/putwc_unlocked.texi000066400000000000000000000020071411057217300240520ustar00rootroot00000000000000@node putwc_unlocked @subsection @code{putwc_unlocked} @findex putwc_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-putwc-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putwc_unlocked.3.html,,man putwc_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/putwchar_unlocked.texi000066400000000000000000000020431411057217300245450ustar00rootroot00000000000000@node putwchar_unlocked @subsection @code{putwchar_unlocked} @findex putwchar_unlocked LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-putwchar-unlocked-1.html} Documentation: @itemize @item @ifinfo @ref{Simple Output,,Simple Output by Characters or Lines,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/putwchar_unlocked.3.html,,man putwchar_unlocked}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pvalloc.texi000066400000000000000000000007721411057217300224730ustar00rootroot00000000000000@node pvalloc @subsection @code{pvalloc} @findex pvalloc Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/pvalloc.3.html,,man pvalloc} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pwritev.texi000066400000000000000000000015701411057217300225300ustar00rootroot00000000000000@node pwritev @subsection @code{pwritev} @findex pwritev Documentation: @itemize @item @ifinfo @ref{Scatter-Gather,,Fast Scatter-Gather I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pwritev.2.html,,man pwritev}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.9, macOS 10.13, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 6.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize gnulib-20210822~d383792/doc/glibc-functions/pwritev2.texi000066400000000000000000000014231411057217300226070ustar00rootroot00000000000000@node pwritev2 @subsection @code{pwritev2} @findex pwritev2 Documentation: @itemize @item @ifinfo @ref{Scatter-Gather,,Fast Scatter-Gather I/O,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/pwritev2.2.html,,man pwritev2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.25, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qecvt.texi000066400000000000000000000013501411057217300221460ustar00rootroot00000000000000@node qecvt @subsection @code{qecvt} @findex qecvt Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qecvt.3.html,,man qecvt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qecvt_r.texi000066400000000000000000000014121411057217300224660ustar00rootroot00000000000000@node qecvt_r @subsection @code{qecvt_r} @findex qecvt_r Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qecvt_r.3.html,,man qecvt_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qfcvt.texi000066400000000000000000000013501411057217300221470ustar00rootroot00000000000000@node qfcvt @subsection @code{qfcvt} @findex qfcvt Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qfcvt.3.html,,man qfcvt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qfcvt_r.texi000066400000000000000000000014121411057217300224670ustar00rootroot00000000000000@node qfcvt_r @subsection @code{qfcvt_r} @findex qfcvt_r Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qfcvt_r.3.html,,man qfcvt_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qgcvt.texi000066400000000000000000000013501411057217300221500ustar00rootroot00000000000000@node qgcvt @subsection @code{qgcvt} @findex qgcvt Documentation: @itemize @item @ifinfo @ref{System V Number Conversion,,Old-fashioned System V number-to-string functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-V-Number-Conversion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qgcvt.3.html,,man qgcvt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/qsort_r.texi000066400000000000000000000011001411057217300225060ustar00rootroot00000000000000@node qsort_r @subsection @code{qsort_r} @findex qsort_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/qsort_r.3.html,,man qsort_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.7, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item This function has an incompatible API on some platforms: FreeBSD 13.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/quotactl.texi000066400000000000000000000006751411057217300226710ustar00rootroot00000000000000@node quotactl @subsection @code{quotactl} @findex quotactl Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/quotactl.2.html,,man quotactl} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/random_r.texi000066400000000000000000000020031411057217300226210ustar00rootroot00000000000000@node random_r @subsection @code{random_r} @findex random_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-random-r-1.html} Documentation: @itemize @item @ifinfo @ref{BSD Random,,BSD Random Number Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/random_r.3.html,,man random_r}. @end itemize Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has an incompatible declaration on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rawmemchr.texi000066400000000000000000000013461411057217300230160ustar00rootroot00000000000000@node rawmemchr @subsection @code{rawmemchr} @findex rawmemchr Documentation: @itemize @item @ifinfo @ref{Search Functions,,Search Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rawmemchr.3.html,,man rawmemchr}. @end itemize Gnulib module: rawmemchr Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/rcmd.texi000066400000000000000000000005671411057217300217620ustar00rootroot00000000000000@node rcmd @subsection @code{rcmd} @findex rcmd Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rcmd.3.html,,man rcmd} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rcmd_af.texi000066400000000000000000000007011411057217300224160ustar00rootroot00000000000000@node rcmd_af @subsection @code{rcmd_af} @findex rcmd_af Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rcmd_af.3.html,,man rcmd_af} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_comp.texi000066400000000000000000000007221411057217300224520ustar00rootroot00000000000000@node re_comp @subsection @code{re_comp} @findex re_comp Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/re_comp.3.html,,man re_comp} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_compile_fastmap.texi000066400000000000000000000006621411057217300246620ustar00rootroot00000000000000@node re_compile_fastmap @subsection @code{re_compile_fastmap} @findex re_compile_fastmap Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_compile_pattern.texi000066400000000000000000000006621411057217300247040ustar00rootroot00000000000000@node re_compile_pattern @subsection @code{re_compile_pattern} @findex re_compile_pattern Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_exec.texi000066400000000000000000000007221411057217300224400ustar00rootroot00000000000000@node re_exec @subsection @code{re_exec} @findex re_exec Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/re_exec.3.html,,man re_exec} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_match.texi000066400000000000000000000006241411057217300226110ustar00rootroot00000000000000@node re_match @subsection @code{re_match} @findex re_match Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_match_2.texi000066400000000000000000000006321411057217300230310ustar00rootroot00000000000000@node re_match_2 @subsection @code{re_match_2} @findex re_match_2 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_search.texi000066400000000000000000000006271411057217300227650ustar00rootroot00000000000000@node re_search @subsection @code{re_search} @findex re_search Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_search_2.texi000066400000000000000000000006351411057217300232050ustar00rootroot00000000000000@node re_search_2 @subsection @code{re_search_2} @findex re_search_2 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_set_registers.texi000066400000000000000000000006541411057217300244020ustar00rootroot00000000000000@node re_set_registers @subsection @code{re_set_registers} @findex re_set_registers Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_set_syntax.texi000066400000000000000000000006431411057217300237170ustar00rootroot00000000000000@node re_set_syntax @subsection @code{re_set_syntax} @findex re_set_syntax Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/re_syntax_options.texi000066400000000000000000000006571411057217300246240ustar00rootroot00000000000000@node re_syntax_options @subsection @code{re_syntax_options} @findex re_syntax_options Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/readahead.texi000066400000000000000000000010661411057217300227260ustar00rootroot00000000000000@node readahead @subsection @code{readahead} @findex readahead Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/readahead.2.html,,man readahead} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/reallocarray.texi000066400000000000000000000022611411057217300235060ustar00rootroot00000000000000@node reallocarray @subsection @code{reallocarray} @findex reallocarray Documentation: @itemize @item @ifinfo @ref{Changing Block Size,,Changing the Size of a Block,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Changing-Block-Size.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/reallocarray.3.html,,man reallocarray}. @end itemize Gnulib module: reallocarray Allocate multiple memory locations of a fixed size with integer overflow protection. Glibc Manual: @url{https://www.gnu.org/software/libc/manual/html_node/Changing-Block-Size.html#Changing-Block-Size} Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.25, macOS 11.1, FreeBSD 10, NetBSD 7, OpenBSD 5.5, Minix 3.3.0, AIX 7.2, HP-UX 11, IRIX, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item On some platforms, @code{reallocarray (n, s)} can succeed even if multiplying @code{n} by @code{s} would exceed @code{PTRDIFF_MAX}, which can lead to undefined behavior later: FreeBSD 13, NetBSD 9, OpenBSD 6, musl 1.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/reboot.texi000066400000000000000000000006111411057217300223150ustar00rootroot00000000000000@node reboot @subsection @code{reboot} @findex reboot Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/reboot.2.html,,man reboot} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/recvmmsg.texi000066400000000000000000000010321411057217300226440ustar00rootroot00000000000000@node recvmmsg @subsection @code{recvmmsg} @findex recvmmsg Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/recvmmsg.2.html,,man recvmmsg} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.11, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/register_printf_function.texi000066400000000000000000000012551411057217300261430ustar00rootroot00000000000000@node register_printf_function @subsection @code{register_printf_function} @findex register_printf_function Documentation:@* @ifinfo @ref{Registering New Conversions,,Registering New Conversions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Registering-New-Conversions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/register_printf_modifier.texi000066400000000000000000000007331411057217300261140ustar00rootroot00000000000000@node register_printf_modifier @subsection @code{register_printf_modifier} @findex register_printf_modifier Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/register_printf_specifier.texi000066400000000000000000000007361411057217300262720ustar00rootroot00000000000000@node register_printf_specifier @subsection @code{register_printf_specifier} @findex register_printf_specifier Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/register_printf_type.texi000066400000000000000000000007171411057217300253010ustar00rootroot00000000000000@node register_printf_type @subsection @code{register_printf_type} @findex register_printf_type Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/remap_file_pages.texi000066400000000000000000000011261411057217300243070ustar00rootroot00000000000000@node remap_file_pages @subsection @code{remap_file_pages} @findex remap_file_pages Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/remap_file_pages.2.html,,man remap_file_pages} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/removexattr.texi000066400000000000000000000010231411057217300234010ustar00rootroot00000000000000@node removexattr @subsection @code{removexattr} @findex removexattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/removexattr.2.html,,man removexattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/renameat2.texi000066400000000000000000000011041411057217300226770ustar00rootroot00000000000000@node renameat2 @subsection @code{renameat2} @findex renameat2 Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/renameat2.2.html,,man renameat2} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_dnok.texi000066400000000000000000000007261411057217300226360ustar00rootroot00000000000000@node res_dnok @subsection @code{res_dnok} @findex res_dnok Documentation:@* @uref{https://nixdoc.net/man-pages/IRIX/man3c/res_hnok.3c.html,,man res_dnok} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_hnok.texi000066400000000000000000000007261411057217300226420ustar00rootroot00000000000000@node res_hnok @subsection @code{res_hnok} @findex res_hnok Documentation:@* @uref{https://nixdoc.net/man-pages/IRIX/man3c/res_hnok.3c.html,,man res_hnok} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_init.texi000066400000000000000000000006141411057217300226420ustar00rootroot00000000000000@node res_init @subsection @code{res_init} @findex res_init Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_init.3.html,,man res_init} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_mailok.texi000066400000000000000000000007361411057217300231600ustar00rootroot00000000000000@node res_mailok @subsection @code{res_mailok} @findex res_mailok Documentation:@* @uref{https://nixdoc.net/man-pages/IRIX/man3c/res_hnok.3c.html,,man res_mailok} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_mkquery.texi000066400000000000000000000006471411057217300234020ustar00rootroot00000000000000@node res_mkquery @subsection @code{res_mkquery} @findex res_mkquery Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_mkquery.3.html,,man res_mkquery} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_nmkquery.texi000066400000000000000000000010041411057217300235440ustar00rootroot00000000000000@node res_nmkquery @subsection @code{res_nmkquery} @findex res_nmkquery Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_nmkquery.3.html,,man res_nmkquery} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_nquery.texi000066400000000000000000000007721411057217300232270ustar00rootroot00000000000000@node res_nquery @subsection @code{res_nquery} @findex res_nquery Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_nquery.3.html,,man res_nquery} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_nquerydomain.texi000066400000000000000000000010301411057217300244030ustar00rootroot00000000000000@node res_nquerydomain @subsection @code{res_nquerydomain} @findex res_nquerydomain Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_nquerydomain.3.html,,man res_nquerydomain} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_nsearch.texi000066400000000000000000000007771411057217300233340ustar00rootroot00000000000000@node res_nsearch @subsection @code{res_nsearch} @findex res_nsearch Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_nsearch.3.html,,man res_nsearch} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_nsend.texi000066400000000000000000000007651411057217300230150ustar00rootroot00000000000000@node res_nsend @subsection @code{res_nsend} @findex res_nsend Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_nsend.3.html,,man res_nsend} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.31, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_ownok.texi000066400000000000000000000007321411057217300230350ustar00rootroot00000000000000@node res_ownok @subsection @code{res_ownok} @findex res_ownok Documentation:@* @uref{https://nixdoc.net/man-pages/IRIX/man3c/res_hnok.3c.html,,man res_ownok} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_query.texi000066400000000000000000000006211411057217300230420ustar00rootroot00000000000000@node res_query @subsection @code{res_query} @findex res_query Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_query.3.html,,man res_query} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_querydomain.texi000066400000000000000000000007251411057217300242370ustar00rootroot00000000000000@node res_querydomain @subsection @code{res_querydomain} @findex res_querydomain Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_querydomain.3.html,,man res_querydomain} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_search.texi000066400000000000000000000006261411057217300231470ustar00rootroot00000000000000@node res_search @subsection @code{res_search} @findex res_search Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_search.3.html,,man res_search} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/res_send.texi000066400000000000000000000006771411057217300226410ustar00rootroot00000000000000@node res_send @subsection @code{res_send} @findex res_send Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_send.3.html,,man res_send} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.3.0, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/revoke.texi000066400000000000000000000005171411057217300223230ustar00rootroot00000000000000@node revoke @subsection @code{revoke} @findex revoke Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rexec.texi000066400000000000000000000006741411057217300221420ustar00rootroot00000000000000@node rexec @subsection @code{rexec} @findex rexec Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rexec.3.html,,man rexec} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rexec_af.texi000066400000000000000000000007671411057217300226130ustar00rootroot00000000000000@node rexec_af @subsection @code{rexec_af} @findex rexec_af Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rexec_af.3.html,,man rexec_af} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rpc_createerr.texi000066400000000000000000000005301411057217300236430ustar00rootroot00000000000000@node rpc_createerr @subsection @code{rpc_createerr} @findex rpc_createerr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: Minix 3.1.8, AIX 5.1, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rpmatch.texi000066400000000000000000000013441411057217300224650ustar00rootroot00000000000000@node rpmatch @subsection @code{rpmatch} @findex rpmatch Documentation: @itemize @item @ifinfo @ref{Yes-orYes-or002dNo Questions,,Yes-or-No Questions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Yes_002dor_002dNo-Questions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rpmatch.3.html,,man rpmatch}. @end itemize Gnulib module: rpmatch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 10.13, FreeBSD 5.2.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/rresvport.texi000066400000000000000000000006351411057217300230770ustar00rootroot00000000000000@node rresvport @subsection @code{rresvport} @findex rresvport Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rresvport.3.html,,man rresvport} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rresvport_af.texi000066400000000000000000000007321411057217300235430ustar00rootroot00000000000000@node rresvport_af @subsection @code{rresvport_af} @findex rresvport_af Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rresvport_af.3.html,,man rresvport_af} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/rtime.texi000066400000000000000000000007341411057217300221510ustar00rootroot00000000000000@node rtime @subsection @code{rtime} @findex rtime Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/rtime.3.html,,man rtime} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ruserok.texi000066400000000000000000000006231411057217300225200ustar00rootroot00000000000000@node ruserok @subsection @code{ruserok} @findex ruserok Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ruserok.3.html,,man ruserok} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ruserok_af.texi000066400000000000000000000010251411057217300231630ustar00rootroot00000000000000@node ruserok_af @subsection @code{ruserok_af} @findex ruserok_af Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ruserok_af.3.html,,man ruserok_af} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sbrk.texi000066400000000000000000000006071411057217300217710ustar00rootroot00000000000000@node sbrk @subsection @code{sbrk} @findex sbrk Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sbrk.2.html,,man sbrk} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 12.2/arm64, AIX 5.1, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/scalbf.texi000066400000000000000000000014101411057217300222530ustar00rootroot00000000000000@node scalbf @subsection @code{scalbf} @findex scalbf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-scalbf.html} Documentation: @itemize @item @ifinfo @ref{Normalization Functions,,Normalization Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/scalbf.3.html,,man scalbf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/scalbl.texi000066400000000000000000000015121411057217300222640ustar00rootroot00000000000000@node scalbl @subsection @code{scalbl} @findex scalbl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-scalbl.html} Documentation: @itemize @item @ifinfo @ref{Normalization Functions,,Normalization Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/scalbl.3.html,,man scalbl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/scandirat.texi000066400000000000000000000010431411057217300227730ustar00rootroot00000000000000@node scandirat @subsection @code{scandirat} @findex scandirat Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/scandirat.3.html,,man scandirat} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.14, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 1.7.10, mingw, MSVC 14, Android 6.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sched_getaffinity.texi000066400000000000000000000016271411057217300245120ustar00rootroot00000000000000@node sched_getaffinity @subsection @code{sched_getaffinity} @findex sched_getaffinity LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sched-getaffinity.html} Documentation: @itemize @item @ifinfo @ref{CPU Affinity,,Limiting execution to certain CPUs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sched_getaffinity.2.html,,man sched_getaffinity}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 3.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sched_getcpu.texi000066400000000000000000000011041411057217300234560ustar00rootroot00000000000000@node sched_getcpu @subsection @code{sched_getcpu} @findex sched_getcpu Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sched_getcpu.3.html,,man sched_getcpu} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on most non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sched_setaffinity.texi000066400000000000000000000016271411057217300245260ustar00rootroot00000000000000@node sched_setaffinity @subsection @code{sched_setaffinity} @findex sched_setaffinity LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sched-setaffinity.html} Documentation: @itemize @item @ifinfo @ref{CPU Affinity,,Limiting execution to certain CPUs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sched_setaffinity.2.html,,man sched_setaffinity}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 3.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/secure_getenv.texi000066400000000000000000000014161411057217300236650ustar00rootroot00000000000000@node secure_getenv @subsection @code{secure_getenv} @findex secure_getenv Documentation: @itemize @item @ifinfo @ref{Environment Access,,Environment Access,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Environment-Access.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/secure_getenv.3.html,,man secure_getenv}. @end itemize Gnulib module: secure_getenv Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.16, OS X 10.8, FreeBSD 13.0, NetBSD 9.0, OpenBSD 5.2, Minix 3.2.0, AIX 7.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/seed48_r.texi000066400000000000000000000015071411057217300224450ustar00rootroot00000000000000@node seed48_r @subsection @code{seed48_r} @findex seed48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-seed48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/seed48_r.3.html,,man seed48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sem_clockwait.texi000066400000000000000000000012251411057217300236510ustar00rootroot00000000000000@node sem_clockwait @subsection @code{sem_clockwait} @findex sem_clockwait Documentation: @itemize @item @ifinfo @ref{Non-POSIX Extensions,,Non-POSIX Extensions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Non_002dPOSIX-Extensions.html}, @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/semtimedop.texi000066400000000000000000000012751411057217300232000ustar00rootroot00000000000000@node semtimedop @subsection @code{semtimedop} @findex semtimedop Documentation: @itemize @item @ifinfo @ref{Semaphores,,Semaphores,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Semaphores.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/semtimedop.2.html,,man semtimedop}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sendfile.texi000066400000000000000000000014201411057217300226130ustar00rootroot00000000000000@node sendfile @subsection @code{sendfile} @findex sendfile LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sendfile.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html,,man sendfile} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11 2010-11, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sendmmsg.texi000066400000000000000000000010321411057217300226360ustar00rootroot00000000000000@node sendmmsg @subsection @code{sendmmsg} @findex sendmmsg Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sendmmsg.2.html,,man sendmmsg} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setaliasent.texi000066400000000000000000000010321411057217300233350ustar00rootroot00000000000000@node setaliasent @subsection @code{setaliasent} @findex setaliasent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setaliasent.3.html,,man setaliasent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setbuffer.texi000066400000000000000000000014051411057217300230120ustar00rootroot00000000000000@node setbuffer @subsection @code{setbuffer} @findex setbuffer LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-setbuffer-3.html} Documentation: @itemize @item @ifinfo @ref{Controlling Buffering,,Controlling Which Kind of Buffering,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Controlling-Buffering.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setbuffer.3.html,,man setbuffer}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setdomainname.texi000066400000000000000000000012351411057217300236520ustar00rootroot00000000000000@node setdomainname @subsection @code{setdomainname} @findex setdomainname Documentation: @itemize @item @ifinfo @ref{Host Identification,,Host Identification,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Identification.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setdomainname.2.html,,man setdomainname}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setfsent.texi000066400000000000000000000011621411057217300226600ustar00rootroot00000000000000@node setfsent @subsection @code{setfsent} @findex setfsent Documentation: @itemize @item @ifinfo @ref{fstab,,The fstab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setfsent.3.html,,man setfsent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setfsgid.texi000066400000000000000000000010571411057217300226400ustar00rootroot00000000000000@node setfsgid @subsection @code{setfsgid} @findex setfsgid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setfsgid.2.html,,man setfsgid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setfsuid.texi000066400000000000000000000010571411057217300226560ustar00rootroot00000000000000@node setfsuid @subsection @code{setfsuid} @findex setfsuid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setfsuid.2.html,,man setfsuid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setgroups.texi000066400000000000000000000020121411057217300230530ustar00rootroot00000000000000@node setgroups @subsection @code{setgroups} @findex setgroups LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-setgroups-2.html} Documentation: @itemize @item @ifinfo @ref{Setting Groups,,Setting the Group IDs,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Setting-Groups.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setgroups.2.html,,man setgroups}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, mingw, MSVC 14. @item On very old systems, this function operated on an array of @samp{int}, even though that was a different size than an array of @samp{gid_t}; you can use autoconf's AC_TYPE_GETGROUPS to set @code{GETGROUPS_T} to the appropriate size (since @code{getgroups} and @code{setgroups} share the same bug). @end itemize gnulib-20210822~d383792/doc/glibc-functions/sethostid.texi000066400000000000000000000012411411057217300230310ustar00rootroot00000000000000@node sethostid @subsection @code{sethostid} @findex sethostid Documentation: @itemize @item @ifinfo @ref{Host Identification,,Host Identification,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Identification.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sethostid.3.html,,man sethostid}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sethostname.texi000066400000000000000000000022421411057217300233570ustar00rootroot00000000000000@node sethostname @subsection @code{sethostname} @findex sethostname LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sethostname-2.html} Documentation: @itemize @item @ifinfo @ref{Host Identification,,Host Identification,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Host-Identification.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sethostname.2.html,,man sethostname}. @end itemize Gnulib module: sethostname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. Note that the Gnulib replacement may fail with ENOSYS on some platforms. @item This function is not declared on some platforms: AIX 7.1, Solaris 10. @end itemize Portability problems not fixed by Gnulib: @itemize @item The first parameter is @code{char *} instead of @code{const char *} on some platforms: Solaris 11 2010-11. @item The second parameter is @code{int} instead of @code{size_t} on some platforms: macOS 11.1, MidnightBSD 2.0, Solaris 11 2010-11. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setipv4sourcefilter.texi000066400000000000000000000007021411057217300250510ustar00rootroot00000000000000@node setipv4sourcefilter @subsection @code{setipv4sourcefilter} @findex setipv4sourcefilter Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setlinebuf.texi000066400000000000000000000012151411057217300231640ustar00rootroot00000000000000@node setlinebuf @subsection @code{setlinebuf} @findex setlinebuf Documentation: @itemize @item @ifinfo @ref{Controlling Buffering,,Controlling Which Kind of Buffering,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Controlling-Buffering.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setlinebuf.3.html,,man setlinebuf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setlogin.texi000066400000000000000000000005411411057217300226510ustar00rootroot00000000000000@node setlogin @subsection @code{setlogin} @findex setlogin Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setmntent.texi000066400000000000000000000012211411057217300230420ustar00rootroot00000000000000@node setmntent @subsection @code{setmntent} @findex setmntent Documentation: @itemize @item @ifinfo @ref{mtab,,The mtab file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setmntent.3.html,,man setmntent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setnetgrent.texi000066400000000000000000000012061411057217300233660ustar00rootroot00000000000000@node setnetgrent @subsection @code{setnetgrent} @findex setnetgrent Documentation: @itemize @item @ifinfo @ref{Lookup Netgroup,,Looking up one Netgroup,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Lookup-Netgroup.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setnetgrent.3.html,,man setnetgrent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setns.texi000066400000000000000000000010571411057217300221640ustar00rootroot00000000000000@node setns @subsection @code{setns} @findex setns Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setns.2.html,,man setns} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setresgid.texi000066400000000000000000000007251411057217300230220ustar00rootroot00000000000000@node setresgid @subsection @code{setresgid} @findex setresgid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setresgid.2.html,,man setresgid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setresuid.texi000066400000000000000000000007251411057217300230400ustar00rootroot00000000000000@node setresuid @subsection @code{setresuid} @findex setresuid Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setresuid.2.html,,man setresuid} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setrpcent.texi000066400000000000000000000006511411057217300230360ustar00rootroot00000000000000@node setrpcent @subsection @code{setrpcent} @findex setrpcent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setrpcent.3.html,,man setrpcent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setsgent.texi000066400000000000000000000006531411057217300226650ustar00rootroot00000000000000@node setsgent @subsection @code{setsgent} @findex setsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setsourcefilter.texi000066400000000000000000000006661411057217300242570ustar00rootroot00000000000000@node setsourcefilter @subsection @code{setsourcefilter} @findex setsourcefilter Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setspent.texi000066400000000000000000000007521411057217300226760ustar00rootroot00000000000000@node setspent @subsection @code{setspent} @findex setspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setspent.3.html,,man setspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setstate_r.texi000066400000000000000000000020171411057217300232020ustar00rootroot00000000000000@node setstate_r @subsection @code{setstate_r} @findex setstate_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-setstate-r-1.html} Documentation: @itemize @item @ifinfo @ref{BSD Random,,BSD Random Number Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setstate_r.3.html,,man setstate_r}. @end itemize Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has an incompatible declaration on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly different (but compatible) declaration on some platforms: Haiku 2017. @end itemize gnulib-20210822~d383792/doc/glibc-functions/settimeofday.texi000066400000000000000000000011741411057217300235250ustar00rootroot00000000000000@node settimeofday @subsection @code{settimeofday} @findex settimeofday Documentation: @itemize @item @ifinfo @ref{High-Resolution Calendar,,High-Resolution Calendar,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/High_002dResolution-Calendar.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/settimeofday.2.html,,man settimeofday}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setttyent.texi000066400000000000000000000006761411057217300231010ustar00rootroot00000000000000@node setttyent @subsection @code{setttyent} @findex setttyent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setttyent.3.html,,man setttyent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setusershell.texi000066400000000000000000000010121411057217300235410ustar00rootroot00000000000000@node setusershell @subsection @code{setusershell} @findex setusershell Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setusershell.3.html,,man setusershell} Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, mingw, MSVC 14, Android 9.0. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/setutent.texi000066400000000000000000000014521411057217300227020ustar00rootroot00000000000000@node setutent @subsection @code{setutent} @findex setutent LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-setutent-3.html} Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setutent.3.html,,man setutent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/setxattr.texi000066400000000000000000000010041411057217300226760ustar00rootroot00000000000000@node setxattr @subsection @code{setxattr} @findex setxattr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/setxattr.2.html,,man setxattr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sgetsgent.texi000066400000000000000000000006561411057217300230370ustar00rootroot00000000000000@node sgetsgent @subsection @code{sgetsgent} @findex sgetsgent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sgetsgent_r.texi000066400000000000000000000006641411057217300233570ustar00rootroot00000000000000@node sgetsgent_r @subsection @code{sgetsgent_r} @findex sgetsgent_r Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sgetspent.texi000066400000000000000000000010211411057217300230330ustar00rootroot00000000000000@node sgetspent @subsection @code{sgetspent} @findex sgetspent Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sgetspent.3.html,,man sgetspent} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sgetspent_r.texi000066400000000000000000000010331411057217300233570ustar00rootroot00000000000000@node sgetspent_r @subsection @code{sgetspent_r} @findex sgetspent_r Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sgetspent_r.3.html,,man sgetspent_r} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigabbrev_np.texi000066400000000000000000000014601411057217300234670ustar00rootroot00000000000000@node sigabbrev_np @subsection @code{sigabbrev_np} @findex sigabbrev_np Documentation:@* @ifinfo @ref{Signal Messages,,Signal Messages,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signal-Messages.html}. @end ifnotinfo Gnulib module: sigabbrev_np Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: Gnulib has a module @code{sig2str} that contains an equivalent function and also one that does the opposite conversion, from an abbreviated signal name to a signal number. gnulib-20210822~d383792/doc/glibc-functions/sigandset.texi000066400000000000000000000012171411057217300230070ustar00rootroot00000000000000@node sigandset @subsection @code{sigandset} @findex sigandset LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sigandset.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigandset.3.html,,man sigandset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigblock.texi000066400000000000000000000011741411057217300226250ustar00rootroot00000000000000@node sigblock @subsection @code{sigblock} @findex sigblock Documentation: @itemize @item @ifinfo @ref{BSD Signal Handling,,BSD Signal Handling,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Signal-Handling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigblock.3.html,,man sigblock}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigdescr_np.texi000066400000000000000000000014671411057217300233350ustar00rootroot00000000000000@node sigdescr_np @subsection @code{sigdescr_np} @findex sigdescr_np Documentation:@* @ifinfo @ref{Signal Messages,,Signal Messages,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signal-Messages.html}. @end ifnotinfo Gnulib module: sigdescr_np Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function is hardly useful, because it returns English strings, not internationalized strings. Better use the function @code{strsignal}, which returns internationalized strings. gnulib-20210822~d383792/doc/glibc-functions/siggetmask.texi000066400000000000000000000010031411057217300231550ustar00rootroot00000000000000@node siggetmask @subsection @code{siggetmask} @findex siggetmask Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/siggetmask.3.html,,man siggetmask} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigisemptyset.texi000066400000000000000000000012471411057217300237420ustar00rootroot00000000000000@node sigisemptyset @subsection @code{sigisemptyset} @findex sigisemptyset LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sigisemptyset.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigisemptyset.3.html,,man sigisemptyset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/signalfd.texi000066400000000000000000000010741411057217300226160ustar00rootroot00000000000000@node signalfd @subsection @code{signalfd} @findex signalfd Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/signalfd.2.html,,man signalfd} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/significand.texi000066400000000000000000000014321411057217300233030ustar00rootroot00000000000000@node significand @subsection @code{significand} @findex significand LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-significand.html} Documentation: @itemize @item @ifinfo @ref{Normalization Functions,,Normalization Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/significand.3.html,,man significand}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/significandf.texi000066400000000000000000000014541411057217300234550ustar00rootroot00000000000000@node significandf @subsection @code{significandf} @findex significandf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-significandf.html} Documentation: @itemize @item @ifinfo @ref{Normalization Functions,,Normalization Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/significandf.3.html,,man significandf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/significandl.texi000066400000000000000000000015371411057217300234650ustar00rootroot00000000000000@node significandl @subsection @code{significandl} @findex significandl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-significandl.html} Documentation: @itemize @item @ifinfo @ref{Normalization Functions,,Normalization Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/significandl.3.html,,man significandl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigorset.texi000066400000000000000000000012111411057217300226570ustar00rootroot00000000000000@node sigorset @subsection @code{sigorset} @findex sigorset LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sigorset.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigorset.3.html,,man sigorset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 12.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigreturn.texi000066400000000000000000000011541411057217300230500ustar00rootroot00000000000000@node sigreturn @subsection @code{sigreturn} @findex sigreturn LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sigreturn-2.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sigreturn.2.html,,man sigreturn} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigsetmask.texi000066400000000000000000000012061411057217300231760ustar00rootroot00000000000000@node sigsetmask @subsection @code{sigsetmask} @findex sigsetmask Documentation: @itemize @item @ifinfo @ref{BSD Signal Handling,,BSD Signal Handling,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Signal-Handling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigsetmask.3.html,,man sigsetmask}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigstack.texi000066400000000000000000000012631411057217300226370ustar00rootroot00000000000000@node sigstack @subsection @code{sigstack} @findex sigstack Documentation: @itemize @item @ifinfo @ref{Signal Stack,,Using a Separate Signal Stack,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signal-Stack.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigstack.3.html,,man sigstack}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sigvec.texi000066400000000000000000000006621411057217300223110ustar00rootroot00000000000000@node sigvec @subsection @code{sigvec} @findex sigvec Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sigvec.3.html,,man sigvec} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sincos.texi000066400000000000000000000014351411057217300223260ustar00rootroot00000000000000@node sincos @subsection @code{sincos} @findex sincos LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sincos.html} Documentation: @itemize @item @ifinfo @ref{Trig Functions,,Trigonometric Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Trig-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sincos.3.html,,man sincos}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sincosf.texi000066400000000000000000000014431411057217300224730ustar00rootroot00000000000000@node sincosf @subsection @code{sincosf} @findex sincosf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sincosf.html} Documentation: @itemize @item @ifinfo @ref{Trig Functions,,Trigonometric Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Trig-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sincosf.3.html,,man sincosf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sincosl.texi000066400000000000000000000014611411057217300225010ustar00rootroot00000000000000@node sincosl @subsection @code{sincosl} @findex sincosl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sincosl.html} Documentation: @itemize @item @ifinfo @ref{Trig Functions,,Trigonometric Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Trig-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sincosl.3.html,,man sincosl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 11.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sprofil.texi000066400000000000000000000006121411057217300225020ustar00rootroot00000000000000@node sprofil @subsection @code{sprofil} @findex sprofil Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/srand48_r.texi000066400000000000000000000015151411057217300226330ustar00rootroot00000000000000@node srand48_r @subsection @code{srand48_r} @findex srand48_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-srand48-r-1.html} Documentation: @itemize @item @ifinfo @ref{SVID Random,,SVID Random Number Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/SVID-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/srand48_r.3.html,,man srand48_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/srandom_r.texi000066400000000000000000000015201411057217300230070ustar00rootroot00000000000000@node srandom_r @subsection @code{srandom_r} @findex srandom_r LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-srandom-r-1.html} Documentation: @itemize @item @ifinfo @ref{BSD Random,,BSD Random Number Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Random.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/srandom_r.3.html,,man srandom_r}. @end itemize Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/ssignal.texi000066400000000000000000000012571411057217300224720ustar00rootroot00000000000000@node ssignal @subsection @code{ssignal} @findex ssignal Documentation: @itemize @item @ifinfo @ref{Basic Signal Handling,,Basic Signal Handling,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Basic-Signal-Handling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ssignal.3.html,,man ssignal}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/statfs.texi000066400000000000000000000013631411057217300223340ustar00rootroot00000000000000@node statfs @subsection @code{statfs} @findex statfs LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-statfs-2.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/statfs.2.html,,man statfs} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, mingw, MSVC 14. @item On platforms where @code{f_blocks} in @samp{struct statfs} is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. This affects Mac OS X. @end itemize gnulib-20210822~d383792/doc/glibc-functions/statx.texi000066400000000000000000000011511411057217300221660ustar00rootroot00000000000000@node statx @subsection @code{statx} @findex statx Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/statx.2.html,,man statx} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item There is an incompatible function of the same name on some platforms: AIX 5.2 or newer. @end itemize gnulib-20210822~d383792/doc/glibc-functions/step.texi000066400000000000000000000006201411057217300217760ustar00rootroot00000000000000@node step @subsection @code{step} @findex step Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/stime.texi000066400000000000000000000014231411057217300221460ustar00rootroot00000000000000@node stime @subsection @code{stime} @findex stime LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-stime-2.html} Documentation: @itemize @item @ifinfo @ref{Simple Calendar Time,,Simple Calendar Time,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/stime.2.html,,man stime}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strcasestr.texi000066400000000000000000000025441411057217300232270ustar00rootroot00000000000000@node strcasestr @subsection @code{strcasestr} @findex strcasestr LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strcasestr.html} Documentation: @itemize @item @ifinfo @ref{Search Functions,,Search Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strcasestr.3.html,,man strcasestr}. @end itemize Gnulib module: strcasestr or strcasestr-simple Portability problems fixed by either Gnulib module @code{strcasestr-simple} or @code{strcasestr}: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @item This function can trigger memchr bugs on some platforms: glibc 2.10. @item This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. @item This function may fail to find matches on some platforms: glibc 2.28. @end itemize Portability problems fixed by Gnulib module @code{strcasestr}: @itemize @item This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, FreeBSD 6.2, NetBSD 9.0, OpenBSD 4.0, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/strchrnul.texi000066400000000000000000000014751411057217300230600ustar00rootroot00000000000000@node strchrnul @subsection @code{strchrnul} @findex strchrnul Documentation: @itemize @item @ifinfo @ref{Search Functions,,Search Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strchrnul.3.html,,man strchrnul}. @end itemize Gnulib module: strchrnul Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.8, mingw, MSVC 14, Android 6.0. @item This function crashes when no occurrence is found on some platforms: Cygwin 1.7.9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/strerrordesc_np.texi000066400000000000000000000011721411057217300242440ustar00rootroot00000000000000@node strerrordesc_np @subsection @code{strerrordesc_np} @findex strerrordesc_np Documentation:@* @ifinfo @ref{Error Messages,,Error Messages,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strerrorname_np.texi000066400000000000000000000014071411057217300242470ustar00rootroot00000000000000@node strerrorname_np @subsection @code{strerrorname_np} @findex strerrorname_np Documentation:@* @ifinfo @ref{Error Messages,,Error Messages,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}. @end ifnotinfo Gnulib module: strerrorname_np Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.31, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function returns wrong values on some platforms: @c https://sourceware.org/bugzilla/show_bug.cgi?id=26555 glibc 2.32. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/strfry.texi000066400000000000000000000013141411057217300223550ustar00rootroot00000000000000@node strfry @subsection @code{strfry} @findex strfry Documentation: @itemize @item @ifinfo @ref{Shuffling Bytes,,Shuffling Bytes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Shuffling-Bytes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strfry.3.html,,man strfry}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strptime_l.texi000066400000000000000000000006171411057217300232130ustar00rootroot00000000000000@node strptime_l @subsection @code{strptime_l} @findex strptime_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strsep.texi000066400000000000000000000014001411057217300223400ustar00rootroot00000000000000@node strsep @subsection @code{strsep} @findex strsep LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strsep-3.html} Documentation: @itemize @item @ifinfo @ref{Finding Tokens in a String,,Finding Tokens in a String,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Finding-Tokens-in-a-String.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strsep.3.html,,man strsep}. @end itemize Gnulib module: strsep Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtod_l.texi000066400000000000000000000006111411057217300226550ustar00rootroot00000000000000@node strtod_l @subsection @code{strtod_l} @findex strtod_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtof_l.texi000066400000000000000000000006111411057217300226570ustar00rootroot00000000000000@node strtof_l @subsection @code{strtof_l} @findex strtof_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtol_l.texi000066400000000000000000000006111411057217300226650ustar00rootroot00000000000000@node strtol_l @subsection @code{strtol_l} @findex strtol_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtold_l.texi000066400000000000000000000006141411057217300230340ustar00rootroot00000000000000@node strtold_l @subsection @code{strtold_l} @findex strtold_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtoll_l.texi000066400000000000000000000006141411057217300230440ustar00rootroot00000000000000@node strtoll_l @subsection @code{strtoll_l} @findex strtoll_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtoq.texi000066400000000000000000000015201411057217300223570ustar00rootroot00000000000000@node strtoq @subsection @code{strtoq} @findex strtoq LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strtoq-3.html} Documentation: @itemize @item @ifinfo @ref{Parsing of Integers,,Parsing of Integers,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strtoq.3.html,,man strtoq}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @item This function is not declared on some platforms: Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtoul_l.texi000066400000000000000000000006141411057217300230550ustar00rootroot00000000000000@node strtoul_l @subsection @code{strtoul_l} @findex strtoul_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtoull_l.texi000066400000000000000000000006171411057217300232340ustar00rootroot00000000000000@node strtoull_l @subsection @code{strtoull_l} @findex strtoull_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strtouq.texi000066400000000000000000000015261411057217300225520ustar00rootroot00000000000000@node strtouq @subsection @code{strtouq} @findex strtouq LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strtouq-3.html} Documentation: @itemize @item @ifinfo @ref{Parsing of Integers,,Parsing of Integers,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strtouq.3.html,,man strtouq}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @item This function is not declared on some platforms: Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/strverscmp.texi000066400000000000000000000020301411057217300232300ustar00rootroot00000000000000@node strverscmp @subsection @code{strverscmp} @findex strverscmp Documentation: @itemize @item @ifinfo @ref{String/Array Comparison,,String/Array Comparison,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/String_002fArray-Comparison.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strverscmp.3.html,,man strverscmp}. @end itemize Gnulib module: strverscmp Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item On older glibc platforms, this function does not always properly treat digit strings with leading zeros as fractions (for example, @code{strverscmp ("B0075022800016.gbp.corp.com", "B007502357019.GBP.CORP.COM")} does not yield a negative number as it should): glibc 2.9 @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_exit.texi000066400000000000000000000005421411057217300226520ustar00rootroot00000000000000@node svc_exit @subsection @code{svc_exit} @findex svc_exit Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_fdset.texi000066400000000000000000000005261411057217300230100ustar00rootroot00000000000000@node svc_fdset @subsection @code{svc_fdset} @findex svc_fdset Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_getreq.texi000066400000000000000000000006561411057217300231760ustar00rootroot00000000000000@node svc_getreq @subsection @code{svc_getreq} @findex svc_getreq Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_getreq.3.html,,man svc_getreq} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_getreq_common.texi000066400000000000000000000005601411057217300245400ustar00rootroot00000000000000@node svc_getreq_common @subsection @code{svc_getreq_common} @findex svc_getreq_common Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_getreq_poll.texi000066400000000000000000000005411411057217300242150ustar00rootroot00000000000000@node svc_getreq_poll @subsection @code{svc_getreq_poll} @findex svc_getreq_poll Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_getreqset.texi000066400000000000000000000006751411057217300237130ustar00rootroot00000000000000@node svc_getreqset @subsection @code{svc_getreqset} @findex svc_getreqset Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_getreqset.3.html,,man svc_getreqset} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_max_pollfd.texi000066400000000000000000000006131411057217300240250ustar00rootroot00000000000000@node svc_max_pollfd @subsection @code{svc_max_pollfd} @findex svc_max_pollfd Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_pollfd.texi000066400000000000000000000005771411057217300231710ustar00rootroot00000000000000@node svc_pollfd @subsection @code{svc_pollfd} @findex svc_pollfd Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_register.texi000066400000000000000000000010731411057217300235250ustar00rootroot00000000000000@node svc_register @subsection @code{svc_register} @findex svc_register LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-svc-register-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_register.3.html,,man svc_register} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_run.texi000066400000000000000000000010351411057217300225030ustar00rootroot00000000000000@node svc_run @subsection @code{svc_run} @findex svc_run LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-svc-run-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_run.3.html,,man svc_run} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_sendreply.texi000066400000000000000000000011011411057217300236760ustar00rootroot00000000000000@node svc_sendreply @subsection @code{svc_sendreply} @findex svc_sendreply LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-svc-sendreply-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_sendreply.3.html,,man svc_sendreply} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svc_unregister.texi000066400000000000000000000007021411057217300240660ustar00rootroot00000000000000@node svc_unregister @subsection @code{svc_unregister} @findex svc_unregister Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svc_unregister.3.html,,man svc_unregister} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_auth.texi000066400000000000000000000006631411057217300233570ustar00rootroot00000000000000@node svcerr_auth @subsection @code{svcerr_auth} @findex svcerr_auth Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_auth.3.html,,man svcerr_auth} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_decode.texi000066400000000000000000000006751411057217300236440ustar00rootroot00000000000000@node svcerr_decode @subsection @code{svcerr_decode} @findex svcerr_decode Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_decode.3.html,,man svcerr_decode} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_noproc.texi000066400000000000000000000006751411057217300237210ustar00rootroot00000000000000@node svcerr_noproc @subsection @code{svcerr_noproc} @findex svcerr_noproc Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_noproc.3.html,,man svcerr_noproc} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_noprog.texi000066400000000000000000000006751411057217300237250ustar00rootroot00000000000000@node svcerr_noprog @subsection @code{svcerr_noprog} @findex svcerr_noprog Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_noprog.3.html,,man svcerr_noprog} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_progvers.texi000066400000000000000000000007071411057217300242640ustar00rootroot00000000000000@node svcerr_progvers @subsection @code{svcerr_progvers} @findex svcerr_progvers Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_progvers.3.html,,man svcerr_progvers} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_systemerr.texi000066400000000000000000000007141411057217300244500ustar00rootroot00000000000000@node svcerr_systemerr @subsection @code{svcerr_systemerr} @findex svcerr_systemerr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_systemerr.3.html,,man svcerr_systemerr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcerr_weakauth.texi000066400000000000000000000007071411057217300242260ustar00rootroot00000000000000@node svcerr_weakauth @subsection @code{svcerr_weakauth} @findex svcerr_weakauth Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcerr_weakauth.3.html,,man svcerr_weakauth} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcraw_create.texi000066400000000000000000000006751411057217300236650ustar00rootroot00000000000000@node svcraw_create @subsection @code{svcraw_create} @findex svcraw_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcraw_create.3.html,,man svcraw_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svctcp_create.texi000066400000000000000000000011011411057217300236430ustar00rootroot00000000000000@node svctcp_create @subsection @code{svctcp_create} @findex svctcp_create LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-svctcp-create-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svctcp_create.3.html,,man svctcp_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcudp_bufcreate.texi000066400000000000000000000007141411057217300243530ustar00rootroot00000000000000@node svcudp_bufcreate @subsection @code{svcudp_bufcreate} @findex svcudp_bufcreate Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcudp_bufcreate.3.html,,man svcudp_bufcreate} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcudp_create.texi000066400000000000000000000011011411057217300236450ustar00rootroot00000000000000@node svcudp_create @subsection @code{svcudp_create} @findex svcudp_create LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-svcudp-create-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/svcudp_create.3.html,,man svcudp_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/svcunix_create.texi000066400000000000000000000006301411057217300240460ustar00rootroot00000000000000@node svcunix_create @subsection @code{svcunix_create} @findex svcunix_create Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/swapoff.texi000066400000000000000000000007451411057217300225000ustar00rootroot00000000000000@node swapoff @subsection @code{swapoff} @findex swapoff Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/swapoff.2.html,,man swapoff} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/swapon.texi000066400000000000000000000007101411057217300223320ustar00rootroot00000000000000@node swapon @subsection @code{swapon} @findex swapon Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/swapon.2.html,,man swapon} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sync_file_range.texi000066400000000000000000000011401411057217300241500ustar00rootroot00000000000000@node sync_file_range @subsection @code{sync_file_range} @findex sync_file_range Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sync_file_range.2.html,,man sync_file_range} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on many non-glibc platforms: glibc 2.5, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/syncfs.texi000066400000000000000000000010201411057217300223230ustar00rootroot00000000000000@node syncfs @subsection @code{syncfs} @findex syncfs Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/syncfs.2.html,,man syncfs} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.13, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 8.1. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sys_errlist.texi000066400000000000000000000007011411057217300234050ustar00rootroot00000000000000@node sys_errlist @subsection @code{sys_errlist} @findex sys_errlist Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sys_errlist.3.html,,man sys_errlist} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: Minix 3.1.8, macOS 10.13, IRIX 6.5, Cygwin 2.9, mingw, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sys_nerr.texi000066400000000000000000000006621411057217300226750ustar00rootroot00000000000000@node sys_nerr @subsection @code{sys_nerr} @findex sys_nerr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sys_nerr.3.html,,man sys_nerr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 10.13, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sys_siglist.texi000066400000000000000000000010371411057217300234020ustar00rootroot00000000000000@node sys_siglist @subsection @code{sys_siglist} @findex sys_siglist Documentation:@* @ifinfo @ref{Signal Messages,,Signal Messages,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signal-Messages.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This constant is missing on some platforms: macOS 10.13, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/syscall.texi000066400000000000000000000011351411057217300224770ustar00rootroot00000000000000@node syscall @subsection @code{syscall} @findex syscall Documentation: @itemize @item @ifinfo @ref{System Calls,,System Calls,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-Calls.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/syscall.2.html,,man syscall}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sysctl.texi000066400000000000000000000012301411057217300223420ustar00rootroot00000000000000@node sysctl @subsection @code{sysctl} @findex sysctl Documentation: @itemize @item @ifinfo @ref{System Parameters,,System Parameters,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/System-Parameters.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sysctl.2.html,,man sysctl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.34, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sysinfo.texi000066400000000000000000000011161411057217300225160ustar00rootroot00000000000000@node sysinfo @subsection @code{sysinfo} @findex sysinfo LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sysinfo-1.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/sysinfo.2.html,,man sysinfo} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 1.7.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/sysv_signal.texi000066400000000000000000000013561411057217300233730ustar00rootroot00000000000000@node sysv_signal @subsection @code{sysv_signal} @findex sysv_signal Documentation: @itemize @item @ifinfo @ref{Basic Signal Handling,,Basic Signal Handling,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Basic-Signal-Handling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/sysv_signal.3.html,,man sysv_signal}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/tdestroy.texi000066400000000000000000000013231411057217300227010ustar00rootroot00000000000000@node tdestroy @subsection @code{tdestroy} @findex tdestroy Documentation: @itemize @item @ifinfo @ref{Tree Search Function,,The tsearch function.,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Tree-Search-Function.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/tdestroy.3.html,,man tdestroy}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.0, mingw, MSVC 14, Android 4.0.4. @end itemize gnulib-20210822~d383792/doc/glibc-functions/textdomain.texi000066400000000000000000000015371411057217300232070ustar00rootroot00000000000000@node textdomain @subsection @code{textdomain} @findex textdomain LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-textdomain.html} Documentation: @itemize @item @ifinfo @ref{Locating gettext catalog,,How to determine which catalog to be used,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Locating-gettext-catalog.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/textdomain.3.html,,man textdomain}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/tgkill.texi000066400000000000000000000014011411057217300223070ustar00rootroot00000000000000@node tgkill @subsection @code{tgkill} @findex tgkill Documentation: @itemize @item @ifinfo @ref{Signaling Another Process,,Signaling Another Process,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Signaling-Another-Process.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/tgkill.2.html,,man tgkill}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and is therefore missing on most non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/timegm.texi000066400000000000000000000012011411057217300223010ustar00rootroot00000000000000@node timegm @subsection @code{timegm} @findex timegm Documentation: @itemize @item @ifinfo @ref{Broken-down Time,,Broken-down Time,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/timegm.3.html,,man timegm}. @end itemize Gnulib module: timegm Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14, Android 3.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/timelocal.texi000066400000000000000000000012151411057217300227750ustar00rootroot00000000000000@node timelocal @subsection @code{timelocal} @findex timelocal Documentation: @itemize @item @ifinfo @ref{Broken-down Time,,Broken-down Time,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/timelocal.3.html,,man timelocal}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14, Android 3.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/timerfd_create.texi000066400000000000000000000011471411057217300240050ustar00rootroot00000000000000@node timerfd_create @subsection @code{timerfd_create} @findex timerfd_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/timerfd_create.2.html,,man timerfd_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/timerfd_gettime.texi000066400000000000000000000011541411057217300241760ustar00rootroot00000000000000@node timerfd_gettime @subsection @code{timerfd_gettime} @findex timerfd_gettime Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/timerfd_gettime.2.html,,man timerfd_gettime} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/timerfd_settime.texi000066400000000000000000000011541411057217300242120ustar00rootroot00000000000000@node timerfd_settime @subsection @code{timerfd_settime} @findex timerfd_settime Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/timerfd_settime.2.html,,man timerfd_settime} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function exists only on Linux and illumos and is therefore missing on many non-glibc platforms: glibc 2.7, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 4.3. @end itemize gnulib-20210822~d383792/doc/glibc-functions/timespec_get.texi000066400000000000000000000006711411057217300235010ustar00rootroot00000000000000@node timespec_get @subsection @code{timespec_get} @findex timespec_get Gnulib module: timespec_get Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.15, macOS 10.13, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-functions/tmpnam_r.texi000066400000000000000000000012771411057217300226510ustar00rootroot00000000000000@node tmpnam_r @subsection @code{tmpnam_r} @findex tmpnam_r Documentation: @itemize @item @ifinfo @ref{Temporary Files,,Temporary Files,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Temporary-Files.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/tmpnam_r.3.html,,man tmpnam_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ttyslot.texi000066400000000000000000000006061411057217300225510ustar00rootroot00000000000000@node ttyslot @subsection @code{ttyslot} @findex ttyslot Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ttyslot.3.html,,man ttyslot} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/twalk_r.texi000066400000000000000000000013401411057217300224660ustar00rootroot00000000000000@node twalk_r @subsection @code{twalk_r} @findex twalk_r Documentation: @itemize @item @ifinfo @ref{Tree Search Function,,The tsearch function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Tree-Search-Function.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/twalk_r.3.html,,man twalk_r}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ulckpwdf.texi000066400000000000000000000007401411057217300226450ustar00rootroot00000000000000@node ulckpwdf @subsection @code{ulckpwdf} @findex ulckpwdf Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ulckpwdf.3.html,,man ulckpwdf} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/umount.texi000066400000000000000000000012251411057217300223540ustar00rootroot00000000000000@node umount @subsection @code{umount} @findex umount Documentation: @itemize @item @ifinfo @ref{Mount-Unmount-Remount,,Mount Unmount Remount,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/umount.2.html,,man umount}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/umount2.texi000066400000000000000000000013121411057217300224330ustar00rootroot00000000000000@node umount2 @subsection @code{umount2} @findex umount2 Documentation: @itemize @item @ifinfo @ref{Mount-Unmount-Remount,,Mount Unmount Remount,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Mount_002dUnmount_002dRemount.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/umount2.2.html,,man umount2}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/updwtmp.texi000066400000000000000000000013111411057217300225210ustar00rootroot00000000000000@node updwtmp @subsection @code{updwtmp} @findex updwtmp Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/updwtmp.3.html,,man updwtmp}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/updwtmpx.texi000066400000000000000000000007401411057217300227160ustar00rootroot00000000000000@node updwtmpx @subsection @code{updwtmpx} @findex updwtmpx Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/updwtmpx.3.html,,man updwtmpx} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/user2netname.texi000066400000000000000000000005471411057217300234430ustar00rootroot00000000000000@node user2netname @subsection @code{user2netname} @findex user2netname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ustat.texi000066400000000000000000000007211411057217300221650ustar00rootroot00000000000000@node ustat @subsection @code{ustat} @findex ustat Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/ustat.2.html,,man ustat} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/utmpname.texi000066400000000000000000000014521411057217300226550ustar00rootroot00000000000000@node utmpname @subsection @code{utmpname} @findex utmpname LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-utmpname-3.html} Documentation: @itemize @item @ifinfo @ref{Manipulating the Database,,Manipulating the User Accounting Database,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Manipulating-the-Database.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/utmpname.3.html,,man utmpname}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/utmpxname.texi000066400000000000000000000012511411057217300230420ustar00rootroot00000000000000@node utmpxname @subsection @code{utmpxname} @findex utmpxname Documentation: @itemize @item @ifinfo @ref{XPG Functions,,XPG User Accounting Database Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/XPG-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/utmpxname.3.html,,man utmpxname}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/valloc.texi000066400000000000000000000011511411057217300223030ustar00rootroot00000000000000@node valloc @subsection @code{valloc} @findex valloc Documentation: @itemize @item @ifinfo @ref{Aligned Memory Blocks,,Allocating Aligned Memory Blocks,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/valloc.3.html,,man valloc}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vasprintf.texi000066400000000000000000000050351411057217300230440ustar00rootroot00000000000000@node vasprintf @subsection @code{vasprintf} @findex vasprintf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vasprintf.html} Documentation: @itemize @item @ifinfo @ref{Variable Arguments Output,,Variable Arguments Output Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Variable-Arguments-Output.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/vasprintf.3.html,,man vasprintf}. @end itemize Gnulib module: vasprintf or vasprintf-posix Portability problems fixed by either Gnulib module @code{vasprintf} or @code{vasprintf-posix}: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{vasprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: Cygwin 1.5.24. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.0. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, Solaris 11.4, Cygwin 1.5.x. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, Cygwin 1.5.x. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11.0, Cygwin 1.5.x. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @end itemize gnulib-20210822~d383792/doc/glibc-functions/verr.texi000066400000000000000000000011331411057217300220010ustar00rootroot00000000000000@node verr @subsection @code{verr} @findex verr Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/verr.3.html,,man verr}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/verrx.texi000066400000000000000000000013341411057217300221740ustar00rootroot00000000000000@node verrx @subsection @code{verrx} @findex verrx LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-verrx-3.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/verrx.3.html,,man verrx}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/versionsort.texi000066400000000000000000000014211411057217300234200ustar00rootroot00000000000000@node versionsort @subsection @code{versionsort} @findex versionsort Documentation: @itemize @item @ifinfo @ref{Scanning Directory Content,,Scanning the Content of a Directory,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Scanning-Directory-Content.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/versionsort.3.html,,man versionsort}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vhangup.texi000066400000000000000000000007171411057217300225020ustar00rootroot00000000000000@node vhangup @subsection @code{vhangup} @findex vhangup Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/vhangup.2.html,,man vhangup} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vlimit.texi000066400000000000000000000013121411057217300223260ustar00rootroot00000000000000@node vlimit @subsection @code{vlimit} @findex vlimit Documentation: @itemize @item @ifinfo @ref{Limits on Resources,,Limiting Resource Usage,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Limits-on-Resources.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/vlimit.3.html,,man vlimit}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vsyslog.texi000066400000000000000000000013461411057217300225370ustar00rootroot00000000000000@node vsyslog @subsection @code{vsyslog} @findex vsyslog LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vsyslog-3.html} Documentation: @itemize @item @ifinfo @ref{syslog; vsyslog,,syslog, vsyslog,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/syslog_003b-vsyslog.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/vsyslog.3.html,,man vsyslog}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vwarn.texi000066400000000000000000000011401411057217300221560ustar00rootroot00000000000000@node vwarn @subsection @code{vwarn} @findex vwarn Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/vwarn.3.html,,man vwarn}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/vwarnx.texi000066400000000000000000000011451411057217300223530ustar00rootroot00000000000000@node vwarnx @subsection @code{vwarnx} @findex vwarnx Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/vwarnx.3.html,,man vwarnx}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wait3.texi000066400000000000000000000011441411057217300220540ustar00rootroot00000000000000@node wait3 @subsection @code{wait3} @findex wait3 Documentation: @itemize @item @ifinfo @ref{BSD Wait Functions,,BSD Process Wait Function,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/BSD-Wait-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/wait3.2.html,,man wait3}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wait4.texi000066400000000000000000000013601411057217300220550ustar00rootroot00000000000000@node wait4 @subsection @code{wait4} @findex wait4 LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-wait4-2.html} Documentation: @itemize @item @ifinfo @ref{Process Completion,,Process Completion,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Process-Completion.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/wait4.2.html,,man wait4}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, IRIX 6.5, mingw, MSVC 14, Android 4.2. @end itemize gnulib-20210822~d383792/doc/glibc-functions/warn.texi000066400000000000000000000013261411057217300217760ustar00rootroot00000000000000@node warn @subsection @code{warn} @findex warn LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-warn-3.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/warn.3.html,,man warn}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/warnx.texi000066400000000000000000000013341411057217300221650ustar00rootroot00000000000000@node warnx @subsection @code{warnx} @findex warnx LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-warnx-3.html} Documentation: @itemize @item @ifinfo @ref{Error Messages,,Error Messages,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/warnx.3.html,,man warnx}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcschrnul.texi000066400000000000000000000013441411057217300230370ustar00rootroot00000000000000@node wcschrnul @subsection @code{wcschrnul} @findex wcschrnul Documentation:@* @ifinfo @ref{Search Functions,,Search Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Search-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcsftime_l.texi000066400000000000000000000010231411057217300231550ustar00rootroot00000000000000@node wcsftime_l @subsection @code{wcsftime_l} @findex wcsftime_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstod_l.texi000066400000000000000000000010151411057217300226400ustar00rootroot00000000000000@node wcstod_l @subsection @code{wcstod_l} @findex wcstod_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstof_l.texi000066400000000000000000000010151411057217300226420ustar00rootroot00000000000000@node wcstof_l @subsection @code{wcstof_l} @findex wcstof_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstol_l.texi000066400000000000000000000010151411057217300226500ustar00rootroot00000000000000@node wcstol_l @subsection @code{wcstol_l} @findex wcstol_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstold_l.texi000066400000000000000000000010201411057217300230100ustar00rootroot00000000000000@node wcstold_l @subsection @code{wcstold_l} @findex wcstold_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstoll_l.texi000066400000000000000000000010201411057217300230200ustar00rootroot00000000000000@node wcstoll_l @subsection @code{wcstoll_l} @findex wcstoll_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstoq.texi000066400000000000000000000015371411057217300223530ustar00rootroot00000000000000@node wcstoq @subsection @code{wcstoq} @findex wcstoq LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-wcstoq.html} Documentation:@* @ifinfo @ref{Parsing of Integers,,Parsing of Integers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstoul_l.texi000066400000000000000000000010201411057217300230310ustar00rootroot00000000000000@node wcstoul_l @subsection @code{wcstoul_l} @findex wcstoul_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstoull_l.texi000066400000000000000000000010231411057217300232100ustar00rootroot00000000000000@node wcstoull_l @subsection @code{wcstoull_l} @findex wcstoull_l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wcstouq.texi000066400000000000000000000015431411057217300225350ustar00rootroot00000000000000@node wcstouq @subsection @code{wcstouq} @findex wcstouq LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-wcstouq.html} Documentation:@* @ifinfo @ref{Parsing of Integers,,Parsing of Integers,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/wmempcpy.texi000066400000000000000000000016011411057217300226640ustar00rootroot00000000000000@node wmempcpy @subsection @code{wmempcpy} @findex wmempcpy Documentation: @itemize @item @ifinfo @ref{Copying Strings and Arrays,,Copying Strings and Arrays,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Copying-Strings-and-Arrays.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/wmempcpy.3.html,,man wmempcpy}. @end itemize Gnulib module: wmempcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_array.texi000066400000000000000000000006531411057217300230240ustar00rootroot00000000000000@node xdr_array @subsection @code{xdr_array} @findex xdr_array Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_array.3.html,,man xdr_array} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_authunix_parms.texi000066400000000000000000000007561411057217300247610ustar00rootroot00000000000000@node xdr_authunix_parms @subsection @code{xdr_authunix_parms} @findex xdr_authunix_parms Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_authunix_parms.3.html,,man xdr_authunix_parms} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_bool.texi000066400000000000000000000006461411057217300226430ustar00rootroot00000000000000@node xdr_bool @subsection @code{xdr_bool} @findex xdr_bool Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_bool.3.html,,man xdr_bool} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_bytes.texi000066400000000000000000000006531411057217300230340ustar00rootroot00000000000000@node xdr_bytes @subsection @code{xdr_bytes} @findex xdr_bytes Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_bytes.3.html,,man xdr_bytes} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_callhdr.texi000066400000000000000000000006631411057217300233200ustar00rootroot00000000000000@node xdr_callhdr @subsection @code{xdr_callhdr} @findex xdr_callhdr Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_callhdr.3.html,,man xdr_callhdr} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_callmsg.texi000066400000000000000000000006631411057217300233310ustar00rootroot00000000000000@node xdr_callmsg @subsection @code{xdr_callmsg} @findex xdr_callmsg Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_callmsg.3.html,,man xdr_callmsg} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_cback_data.texi000066400000000000000000000006231411057217300237370ustar00rootroot00000000000000@node xdr_cback_data @subsection @code{xdr_cback_data} @findex xdr_cback_data Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_char.texi000066400000000000000000000006461411057217300226250ustar00rootroot00000000000000@node xdr_char @subsection @code{xdr_char} @findex xdr_char Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_char.3.html,,man xdr_char} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_cryptkeyarg.texi000066400000000000000000000005721411057217300242520ustar00rootroot00000000000000@node xdr_cryptkeyarg @subsection @code{xdr_cryptkeyarg} @findex xdr_cryptkeyarg Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_cryptkeyarg2.texi000066400000000000000000000005751411057217300243370ustar00rootroot00000000000000@node xdr_cryptkeyarg2 @subsection @code{xdr_cryptkeyarg2} @findex xdr_cryptkeyarg2 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_cryptkeyres.texi000066400000000000000000000005721411057217300242720ustar00rootroot00000000000000@node xdr_cryptkeyres @subsection @code{xdr_cryptkeyres} @findex xdr_cryptkeyres Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_des_block.texi000066400000000000000000000005051411057217300236270ustar00rootroot00000000000000@node xdr_des_block @subsection @code{xdr_des_block} @findex xdr_des_block Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_domainname.texi000066400000000000000000000005631411057217300240160ustar00rootroot00000000000000@node xdr_domainname @subsection @code{xdr_domainname} @findex xdr_domainname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_double.texi000066400000000000000000000006601411057217300231560ustar00rootroot00000000000000@node xdr_double @subsection @code{xdr_double} @findex xdr_double Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_double.3.html,,man xdr_double} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_enum.texi000066400000000000000000000006461411057217300226540ustar00rootroot00000000000000@node xdr_enum @subsection @code{xdr_enum} @findex xdr_enum Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_enum.3.html,,man xdr_enum} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_float.texi000066400000000000000000000006531411057217300230130ustar00rootroot00000000000000@node xdr_float @subsection @code{xdr_float} @findex xdr_float Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_float.3.html,,man xdr_float} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_free.texi000066400000000000000000000006461411057217300226310ustar00rootroot00000000000000@node xdr_free @subsection @code{xdr_free} @findex xdr_free Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_free.3.html,,man xdr_free} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_getcredres.texi000066400000000000000000000005671411057217300240410ustar00rootroot00000000000000@node xdr_getcredres @subsection @code{xdr_getcredres} @findex xdr_getcredres Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_hyper.texi000066400000000000000000000005101411057217300230250ustar00rootroot00000000000000@node xdr_hyper @subsection @code{xdr_hyper} @findex xdr_hyper Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_int.texi000066400000000000000000000006411411057217300224750ustar00rootroot00000000000000@node xdr_int @subsection @code{xdr_int} @findex xdr_int Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_int.3.html,,man xdr_int} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_int16_t.texi000066400000000000000000000005361411057217300231720ustar00rootroot00000000000000@node xdr_int16_t @subsection @code{xdr_int16_t} @findex xdr_int16_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_int32_t.texi000066400000000000000000000005361411057217300231700ustar00rootroot00000000000000@node xdr_int32_t @subsection @code{xdr_int32_t} @findex xdr_int32_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_int64_t.texi000066400000000000000000000005531411057217300231740ustar00rootroot00000000000000@node xdr_int64_t @subsection @code{xdr_int64_t} @findex xdr_int64_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_int8_t.texi000066400000000000000000000006161411057217300231120ustar00rootroot00000000000000@node xdr_int8_t @subsection @code{xdr_int8_t} @findex xdr_int8_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_key_netstarg.texi000066400000000000000000000005751411057217300244100ustar00rootroot00000000000000@node xdr_key_netstarg @subsection @code{xdr_key_netstarg} @findex xdr_key_netstarg Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_key_netstres.texi000066400000000000000000000005751411057217300244300ustar00rootroot00000000000000@node xdr_key_netstres @subsection @code{xdr_key_netstres} @findex xdr_key_netstres Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_keybuf.texi000066400000000000000000000005531411057217300231720ustar00rootroot00000000000000@node xdr_keybuf @subsection @code{xdr_keybuf} @findex xdr_keybuf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_keydat.texi000066400000000000000000000005631411057217300231670ustar00rootroot00000000000000@node xdr_keydat @subsection @code{xdr_keydat} @findex xdr_keydat Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_keystatus.texi000066400000000000000000000005641411057217300237430ustar00rootroot00000000000000@node xdr_keystatus @subsection @code{xdr_keystatus} @findex xdr_keystatus Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_long.texi000066400000000000000000000006461411057217300226470ustar00rootroot00000000000000@node xdr_long @subsection @code{xdr_long} @findex xdr_long Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_long.3.html,,man xdr_long} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_longlong_t.texi000066400000000000000000000005271411057217300240500ustar00rootroot00000000000000@node xdr_longlong_t @subsection @code{xdr_longlong_t} @findex xdr_longlong_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_netnamestr.texi000066400000000000000000000005671411057217300240720ustar00rootroot00000000000000@node xdr_netnamestr @subsection @code{xdr_netnamestr} @findex xdr_netnamestr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_netobj.texi000066400000000000000000000004761411057217300231720ustar00rootroot00000000000000@node xdr_netobj @subsection @code{xdr_netobj} @findex xdr_netobj Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_obj_p.texi000066400000000000000000000006041411057217300227730ustar00rootroot00000000000000@node xdr_obj_p @subsection @code{xdr_obj_p} @findex xdr_obj_p Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_opaque.texi000066400000000000000000000006601411057217300231760ustar00rootroot00000000000000@node xdr_opaque @subsection @code{xdr_opaque} @findex xdr_opaque Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_opaque.3.html,,man xdr_opaque} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_opaque_auth.texi000066400000000000000000000007071411057217300242210ustar00rootroot00000000000000@node xdr_opaque_auth @subsection @code{xdr_opaque_auth} @findex xdr_opaque_auth Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_opaque_auth.3.html,,man xdr_opaque_auth} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_pmap.texi000066400000000000000000000006441411057217300226430ustar00rootroot00000000000000@node xdr_pmap @subsection @code{xdr_pmap} @findex xdr_pmap Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_pmap.3.html,,man xdr_pmap} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_pmaplist.texi000066400000000000000000000006701411057217300235360ustar00rootroot00000000000000@node xdr_pmaplist @subsection @code{xdr_pmaplist} @findex xdr_pmaplist Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_pmaplist.3.html,,man xdr_pmaplist} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_pointer.texi000066400000000000000000000006651411057217300233710ustar00rootroot00000000000000@node xdr_pointer @subsection @code{xdr_pointer} @findex xdr_pointer Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_pointer.3.html,,man xdr_pointer} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_quad_t.texi000066400000000000000000000006431411057217300231620ustar00rootroot00000000000000@node xdr_quad_t @subsection @code{xdr_quad_t} @findex xdr_quad_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_reference.texi000066400000000000000000000006771411057217300236520ustar00rootroot00000000000000@node xdr_reference @subsection @code{xdr_reference} @findex xdr_reference Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_reference.3.html,,man xdr_reference} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_replymsg.texi000066400000000000000000000006701411057217300235470ustar00rootroot00000000000000@node xdr_replymsg @subsection @code{xdr_replymsg} @findex xdr_replymsg Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_replymsg.3.html,,man xdr_replymsg} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_rmtcall_args.texi000066400000000000000000000005461411057217300243610ustar00rootroot00000000000000@node xdr_rmtcall_args @subsection @code{xdr_rmtcall_args} @findex xdr_rmtcall_args Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_rmtcallres.texi000066400000000000000000000005101411057217300240460ustar00rootroot00000000000000@node xdr_rmtcallres @subsection @code{xdr_rmtcallres} @findex xdr_rmtcallres Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_short.texi000066400000000000000000000006531411057217300230450ustar00rootroot00000000000000@node xdr_short @subsection @code{xdr_short} @findex xdr_short Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_short.3.html,,man xdr_short} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_sizeof.texi000066400000000000000000000005561411057217300232070ustar00rootroot00000000000000@node xdr_sizeof @subsection @code{xdr_sizeof} @findex xdr_sizeof Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_string.texi000066400000000000000000000006601411057217300232120ustar00rootroot00000000000000@node xdr_string @subsection @code{xdr_string} @findex xdr_string Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_string.3.html,,man xdr_string} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_char.texi000066400000000000000000000006601411057217300231450ustar00rootroot00000000000000@node xdr_u_char @subsection @code{xdr_u_char} @findex xdr_u_char Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_u_char.3.html,,man xdr_u_char} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_hyper.texi000066400000000000000000000005161411057217300233570ustar00rootroot00000000000000@node xdr_u_hyper @subsection @code{xdr_u_hyper} @findex xdr_u_hyper Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_int.texi000066400000000000000000000010531411057217300230170ustar00rootroot00000000000000@node xdr_u_int @subsection @code{xdr_u_int} @findex xdr_u_int LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-xdr-u-int-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_u_int.3.html,,man xdr_u_int} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_long.texi000066400000000000000000000006601411057217300231670ustar00rootroot00000000000000@node xdr_u_long @subsection @code{xdr_u_long} @findex xdr_u_long Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_u_long.3.html,,man xdr_u_long} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_longlong_t.texi000066400000000000000000000005351411057217300243730ustar00rootroot00000000000000@node xdr_u_longlong_t @subsection @code{xdr_u_longlong_t} @findex xdr_u_longlong_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_quad_t.texi000066400000000000000000000006511411057217300235050ustar00rootroot00000000000000@node xdr_u_quad_t @subsection @code{xdr_u_quad_t} @findex xdr_u_quad_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_u_short.texi000066400000000000000000000006651411057217300233740ustar00rootroot00000000000000@node xdr_u_short @subsection @code{xdr_u_short} @findex xdr_u_short Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_u_short.3.html,,man xdr_u_short} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_uint16_t.texi000066400000000000000000000007461411057217300233620ustar00rootroot00000000000000@node xdr_uint16_t @subsection @code{xdr_uint16_t} @findex xdr_uint16_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_uint32_t.texi000066400000000000000000000007441411057217300233560ustar00rootroot00000000000000@node xdr_uint32_t @subsection @code{xdr_uint32_t} @findex xdr_uint32_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_uint64_t.texi000066400000000000000000000007441411057217300233630ustar00rootroot00000000000000@node xdr_uint64_t @subsection @code{xdr_uint64_t} @findex xdr_uint64_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_uint8_t.texi000066400000000000000000000007421411057217300232770ustar00rootroot00000000000000@node xdr_uint8_t @subsection @code{xdr_uint8_t} @findex xdr_uint8_t Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_union.texi000066400000000000000000000006531411057217300230360ustar00rootroot00000000000000@node xdr_union @subsection @code{xdr_union} @findex xdr_union Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_union.3.html,,man xdr_union} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_unixcred.texi000066400000000000000000000005611411057217300235250ustar00rootroot00000000000000@node xdr_unixcred @subsection @code{xdr_unixcred} @findex xdr_unixcred Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_valdat.texi000066400000000000000000000005631411057217300231610ustar00rootroot00000000000000@node xdr_valdat @subsection @code{xdr_valdat} @findex xdr_valdat Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_vector.texi000066400000000000000000000006601411057217300232060ustar00rootroot00000000000000@node xdr_vector @subsection @code{xdr_vector} @findex xdr_vector Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_vector.3.html,,man xdr_vector} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_void.texi000066400000000000000000000006461411057217300226510ustar00rootroot00000000000000@node xdr_void @subsection @code{xdr_void} @findex xdr_void Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_void.3.html,,man xdr_void} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_wrapstring.texi000066400000000000000000000007041411057217300241030ustar00rootroot00000000000000@node xdr_wrapstring @subsection @code{xdr_wrapstring} @findex xdr_wrapstring Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdr_wrapstring.3.html,,man xdr_wrapstring} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypbind_resptype.texi000066400000000000000000000006001411057217300251160ustar00rootroot00000000000000@node xdr_ypbind_resptype @subsection @code{xdr_ypbind_resptype} @findex xdr_ypbind_resptype Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypmap_parms.texi000066400000000000000000000005441411057217300242350ustar00rootroot00000000000000@node xdr_ypmap_parms @subsection @code{xdr_ypmap_parms} @findex xdr_ypmap_parms Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypmaplist.texi000066400000000000000000000005231411057217300237240ustar00rootroot00000000000000@node xdr_ypmaplist @subsection @code{xdr_ypmaplist} @findex xdr_ypmaplist Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_yppushresp_xfr.texi000066400000000000000000000005551411057217300250100ustar00rootroot00000000000000@node xdr_yppushresp_xfr @subsection @code{xdr_yppushresp_xfr} @findex xdr_yppushresp_xfr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypreq_key.texi000066400000000000000000000005051411057217300237120ustar00rootroot00000000000000@node xdr_ypreq_key @subsection @code{xdr_ypreq_key} @findex xdr_ypreq_key Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypreq_nokey.texi000066400000000000000000000005131411057217300242460ustar00rootroot00000000000000@node xdr_ypreq_nokey @subsection @code{xdr_ypreq_nokey} @findex xdr_ypreq_nokey Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypreq_xfr.texi000066400000000000000000000005361411057217300237250ustar00rootroot00000000000000@node xdr_ypreq_xfr @subsection @code{xdr_ypreq_xfr} @findex xdr_ypreq_xfr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 3.8, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_all.texi000066400000000000000000000005771411057217300240650ustar00rootroot00000000000000@node xdr_ypresp_all @subsection @code{xdr_ypresp_all} @findex xdr_ypresp_all Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_key_val.texi000066400000000000000000000005241411057217300247370ustar00rootroot00000000000000@node xdr_ypresp_key_val @subsection @code{xdr_ypresp_key_val} @findex xdr_ypresp_key_val Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_maplist.texi000066400000000000000000000005241411057217300247560ustar00rootroot00000000000000@node xdr_ypresp_maplist @subsection @code{xdr_ypresp_maplist} @findex xdr_ypresp_maplist Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_master.texi000066400000000000000000000005211411057217300245750ustar00rootroot00000000000000@node xdr_ypresp_master @subsection @code{xdr_ypresp_master} @findex xdr_ypresp_master Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_order.texi000066400000000000000000000005161411057217300244210ustar00rootroot00000000000000@node xdr_ypresp_order @subsection @code{xdr_ypresp_order} @findex xdr_ypresp_order Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_val.texi000066400000000000000000000005101411057217300240620ustar00rootroot00000000000000@node xdr_ypresp_val @subsection @code{xdr_ypresp_val} @findex xdr_ypresp_val Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypresp_xfr.texi000066400000000000000000000006301411057217300241020ustar00rootroot00000000000000@node xdr_ypresp_xfr @subsection @code{xdr_ypresp_xfr} @findex xdr_ypresp_xfr Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypstat.texi000066400000000000000000000005631411057217300232320ustar00rootroot00000000000000@node xdr_ypstat @subsection @code{xdr_ypstat} @findex xdr_ypstat Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdr_ypxfrstat.texi000066400000000000000000000006251411057217300237510ustar00rootroot00000000000000@node xdr_ypxfrstat @subsection @code{xdr_ypxfrstat} @findex xdr_ypxfrstat Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrmem_create.texi000066400000000000000000000006771411057217300236560ustar00rootroot00000000000000@node xdrmem_create @subsection @code{xdrmem_create} @findex xdrmem_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrmem_create.3.html,,man xdrmem_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrrec_create.texi000066400000000000000000000006771411057217300236510ustar00rootroot00000000000000@node xdrrec_create @subsection @code{xdrrec_create} @findex xdrrec_create Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrrec_create.3.html,,man xdrrec_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrrec_endofrecord.texi000066400000000000000000000007301411057217300246660ustar00rootroot00000000000000@node xdrrec_endofrecord @subsection @code{xdrrec_endofrecord} @findex xdrrec_endofrecord Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrrec_endofrecord.3.html,,man xdrrec_endofrecord} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrrec_eof.texi000066400000000000000000000006601411057217300231470ustar00rootroot00000000000000@node xdrrec_eof @subsection @code{xdrrec_eof} @findex xdrrec_eof Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrrec_eof.3.html,,man xdrrec_eof} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrrec_skiprecord.texi000066400000000000000000000007231411057217300245430ustar00rootroot00000000000000@node xdrrec_skiprecord @subsection @code{xdrrec_skiprecord} @findex xdrrec_skiprecord Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrrec_skiprecord.3.html,,man xdrrec_skiprecord} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xdrstdio_create.texi000066400000000000000000000011171411057217300242100ustar00rootroot00000000000000@node xdrstdio_create @subsection @code{xdrstdio_create} @findex xdrstdio_create LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-xdrstdio-create-3.html} Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xdrstdio_create.3.html,,man xdrstdio_create} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xprt_register.texi000066400000000000000000000006751411057217300237360ustar00rootroot00000000000000@node xprt_register @subsection @code{xprt_register} @findex xprt_register Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xprt_register.3.html,,man xprt_register} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/xprt_unregister.texi000066400000000000000000000007071411057217300242750ustar00rootroot00000000000000@node xprt_unregister @subsection @code{xprt_unregister} @findex xprt_unregister Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/xprt_unregister.3.html,,man xprt_unregister} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/y0f.texi000066400000000000000000000013441411057217300215250ustar00rootroot00000000000000@node y0f @subsection @code{y0f} @findex y0f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-y0f.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/y0f.3.html,,man y0f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/y0l.texi000066400000000000000000000014441411057217300215340ustar00rootroot00000000000000@node y0l @subsection @code{y0l} @findex y0l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-y0l.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/y0l.3.html,,man y0l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/y1f.texi000066400000000000000000000013441411057217300215260ustar00rootroot00000000000000@node y1f @subsection @code{y1f} @findex y1f LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-y1f.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/y1f.3.html,,man y1f}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/y1l.texi000066400000000000000000000014441411057217300215350ustar00rootroot00000000000000@node y1l @subsection @code{y1l} @findex y1l LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-y1l.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/y1l.3.html,,man y1l}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ynf.texi000066400000000000000000000013441411057217300216230ustar00rootroot00000000000000@node ynf @subsection @code{ynf} @findex ynf LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ynf.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ynf.3.html,,man ynf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ynl.texi000066400000000000000000000014441411057217300216320ustar00rootroot00000000000000@node ynl @subsection @code{ynl} @findex ynl LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ynl.html} Documentation: @itemize @item @ifinfo @ref{Special Functions,,Special Functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Special-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/ynl.3.html,,man ynl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_all.texi000066400000000000000000000004601411057217300223050ustar00rootroot00000000000000@node yp_all @subsection @code{yp_all} @findex yp_all Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_bind.texi000066400000000000000000000004631411057217300224540ustar00rootroot00000000000000@node yp_bind @subsection @code{yp_bind} @findex yp_bind Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_first.texi000066400000000000000000000004661411057217300226720ustar00rootroot00000000000000@node yp_first @subsection @code{yp_first} @findex yp_first Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_get_default_domain.texi000066400000000000000000000005471411057217300253550ustar00rootroot00000000000000@node yp_get_default_domain @subsection @code{yp_get_default_domain} @findex yp_get_default_domain Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_master.texi000066400000000000000000000004711411057217300230320ustar00rootroot00000000000000@node yp_master @subsection @code{yp_master} @findex yp_master Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_match.texi000066400000000000000000000004661411057217300226370ustar00rootroot00000000000000@node yp_match @subsection @code{yp_match} @findex yp_match Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_next.texi000066400000000000000000000004631411057217300225160ustar00rootroot00000000000000@node yp_next @subsection @code{yp_next} @findex yp_next Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_order.texi000066400000000000000000000004661411057217300226560ustar00rootroot00000000000000@node yp_order @subsection @code{yp_order} @findex yp_order Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yp_unbind.texi000066400000000000000000000004711411057217300230160ustar00rootroot00000000000000@node yp_unbind @subsection @code{yp_unbind} @findex yp_unbind Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ypbinderr_string.texi000066400000000000000000000006361411057217300244160ustar00rootroot00000000000000@node ypbinderr_string @subsection @code{ypbinderr_string} @findex ypbinderr_string Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/yperr_string.texi000066400000000000000000000005021411057217300235510ustar00rootroot00000000000000@node yperr_string @subsection @code{yperr_string} @findex yperr_string Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-functions/ypprot_err.texi000066400000000000000000000004741411057217300232370ustar00rootroot00000000000000@node ypprot_err @subsection @code{ypprot_err} @findex ypprot_err Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/000077500000000000000000000000001411057217300175355ustar00rootroot00000000000000gnulib-20210822~d383792/doc/glibc-headers/a.out.texi000066400000000000000000000010451411057217300214560ustar00rootroot00000000000000@node a.out.h @section @file{a.out.h} Describes the structure of executables (and object files?) in the old @code{a.out} format. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item This header file is useless because most executables and object files are in ELF format on some platforms: glibc 2.3.6, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7. @end itemize gnulib-20210822~d383792/doc/glibc-headers/aliases.texi000066400000000000000000000013371411057217300220550ustar00rootroot00000000000000@node aliases.h @section @file{aliases.h} Defines the type @code{struct aliasent} and declares the functions @code{setaliasent}, @code{endaliasent}, @code{getaliasent}, @code{getaliasent_r}, @code{getaliasbyname}, @code{getaliasbyname_r}. Documentation: @itemize @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setaliasent.3.html,,man setaliasent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/alloca.texi000066400000000000000000000012771411057217300216720ustar00rootroot00000000000000@node alloca.h @section @file{alloca.h} Declares the @code{alloca} function of function-like macro. Documentation: @itemize @item @ifinfo @ref{Variable Size Automatic,,Automatic Storage with Variable Size,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Variable-Size-Automatic.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/alloca.3.html,,man alloca}. @end itemize Gnulib module: alloca Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/ar.texi000066400000000000000000000006351411057217300210360ustar00rootroot00000000000000@node ar.h @section @file{ar.h} Describes the structure of files produced by the @samp{ar} program. Defines the type @code{struct ar_hdr} and the macros @code{ARMAG}, @code{SARMAG}, @code{ARFMAG}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/argp.texi000066400000000000000000000011271411057217300213620ustar00rootroot00000000000000@node argp.h @section @file{argp.h} Documentation: @itemize @item @ifinfo @ref{Argp,,Parsing Program Options with Argp,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argp.html}. @end ifnotinfo @end itemize Gnulib module: argp Portability problems fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/argz.texi000066400000000000000000000013241411057217300213730ustar00rootroot00000000000000@node argz.h @section @file{argz.h} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/argz.3.html,,man argz}. @end itemize Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @item The argz functions do not work on some platforms: Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/byteswap.texi000066400000000000000000000007251411057217300222720ustar00rootroot00000000000000@node byteswap.h @section @file{byteswap.h} Defines the functions or function-like macros @code{bswap_16}, @code{bswap_32}, @code{bswap_64}. Gnulib module: byteswap Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/crypt.texi000066400000000000000000000023561411057217300215770ustar00rootroot00000000000000@node crypt.h @section @file{crypt.h} Defines the type @code{struct crypt_data} and declares the functions @code{crypt}, @code{crypt_r}, @code{setkey}, @code{setkey_r}, @code{encrypt}, @code{encrypt_r}. Documentation: @itemize @item @ifinfo @ref{crypt,,Encrypting Passwords,libc}, @ref{DES Encryption,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/crypt.html}, @url{https://www.gnu.org/software/libc/manual/html_node/DES-Encryption.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html,,man crypt}, @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/encrypt.3.html,,man encrypt}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @item The functions @code{crypt}, @code{setkey}, @code{encrypt} are missing on some platforms: HP-UX 11. @item The type @code{struct crypt_data} and the functions @code{crypt_r}, @code{setkey_r}, @code{encrypt_r} are missing on some platforms: IRIX 6.5, Solaris 11.4, Cygwin. @end itemize gnulib-20210822~d383792/doc/glibc-headers/endian.texi000066400000000000000000000010351411057217300216650ustar00rootroot00000000000000@node endian.h @section @file{endian.h} Describe's the platform's endianness (byte ordering of words stored in memory). Defines the macros @code{BYTE_ORDER}, @code{LITTLE_ENDIAN}, @code{BIG_ENDIAN}, @code{PDP_ENDIAN}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/envz.texi000066400000000000000000000012231411057217300214100ustar00rootroot00000000000000@node envz.h @section @file{envz.h} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/envz.3.html,,man envz}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/err.texi000066400000000000000000000013041411057217300212160ustar00rootroot00000000000000@node err.h @section @file{err.h} Declares the functions @code{warn}, @code{vwarn}, @code{warnx}, @code{vwarnx}, @code{err}, @code{verr}, @code{errx}, @code{verrx}. Documentation: @itemize @item @ifinfo @ref{Error Messages,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/err.3.html,,man err}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/error.texi000066400000000000000000000014731411057217300215660ustar00rootroot00000000000000@node error.h @section @file{error.h} Declares the functions @code{error}, @code{error_at_line} and the variables @code{error_print_progname}, @code{error_message_count}, @code{error_one_per_line}. Documentation: @itemize @item @ifinfo @ref{Error Messages,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/error.3.html,,man error}. @end itemize Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This header file is missing on many platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/execinfo.texi000066400000000000000000000015631411057217300222350ustar00rootroot00000000000000@node execinfo.h @section @file{execinfo.h} Declares the functions @code{backtrace}, @code{backtrace_symbols}, @code{backtrace_symbols_fd}. Documentation: @itemize @item @ifinfo @ref{Backtraces,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Backtraces.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html,,man backtrace}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item On platforms where the header file is missing, the Gnulib substitute implementation is just a stub, and does nothing. @end itemize gnulib-20210822~d383792/doc/glibc-headers/fpu_control.texi000066400000000000000000000011051411057217300227570ustar00rootroot00000000000000@node fpu_control.h @section @file{fpu_control.h} Handling of the FPU control word. Defines the @code{fpu_control_t} type, declares the @code{__fpu_control} variable, and defines the @code{_FPU_GETCW}, @code{_FPU_SETCW} macros. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/fstab.texi000066400000000000000000000015711411057217300215330ustar00rootroot00000000000000@node fstab.h @section @file{fstab.h} Defines the type @code{struct fstab}, the macros @code{FSTAB_*}, @code{_PATH_FSTAB}, and declares the functions @code{setfsent}, @code{endfsent}, @code{getfsent}, @code{getfsspec}, @code{getfsfile}. Documentation: @itemize @item @ifinfo @ref{fstab,,The `fstab' file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setfsent.3.html,,man setfsent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @item The macro @code{_PATH_FSTAB} is missing on some platforms: AIX 5.1, HP-UX 11. @end itemize gnulib-20210822~d383792/doc/glibc-headers/fts.texi000066400000000000000000000011411411057217300212210ustar00rootroot00000000000000@node fts.h @section @file{fts.h} Defines the types @code{FTS}, @code{FTSENT} and the macros @code{FTS_*}, and declares the functions @code{fts_open}, @code{fts_read}, @code{fts_children}, @code{fts_set}, @code{fts_close}. Documentation: @itemize @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/fts.3.html,,man fts}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/getopt.texi000066400000000000000000000023761411057217300217420ustar00rootroot00000000000000@node getopt.h @section @file{getopt.h} Defines the type @code{struct option} and declares the variables @code{optarg}, @code{optind}, @code{opterr}, @code{optopt} and the functions @code{getopt}, @code{getopt_long}, @code{getopt_long_only}. Documentation: @itemize @item @ifinfo @ref{Getopt,,Parsing program options using `getopt',libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Getopt.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/getopt.3.html,,man getopt}. @end itemize Gnulib module: getopt-gnu Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: AIX 5.1, HP-UX 11, MSVC 14. @item The function @code{getopt_long} is missing on some platforms: IRIX 6.5, Solaris 9. @item The function @code{getopt_long_only} is missing on some platforms: FreeBSD 5.2.1, NetBSD 9.0, IRIX 6.5, Solaris 9, mingw. @item The method to reset options is incompatible on some platforms: FreeBSD 6.0, NetBSD 9.0(?), OpenBSD 6.7, Cygwin 1.5.x, mingw. @item The function @code{getopt} does not handle a leading @samp{+} character in the options string on some platforms: Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/gshadow.texi000066400000000000000000000012241411057217300220630ustar00rootroot00000000000000@node gshadow.h @section @file{gshadow.h} Defines the type @code{struct sgrp} and declares the functions @code{setsgent}, @code{endsgent}, @code{getsgent}, @code{getsgnam}, @code{sgetsgent}, @code{fgetsgent}, @code{putsgent}, @code{getsgent_r}, @code{getsgnam_r}, @code{sgetsgent_r}, @code{fgetsgent_r}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/ieee754.texi000066400000000000000000000013611411057217300216000ustar00rootroot00000000000000@node ieee754.h @section @file{ieee754.h} Defines the types @code{union ieee754_float}, @code{union ieee754_double}, @code{union ieee854_long_double}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item The substitute for this header file has not been tested for @code{long double} and does not work on some platforms. @item The substitute for this header file returns nonsense on (now-quite-rare) platforms that do not use IEEE floating point. @end itemize gnulib-20210822~d383792/doc/glibc-headers/ifaddrs.texi000066400000000000000000000010361411057217300220440ustar00rootroot00000000000000@node ifaddrs.h @section @file{ifaddrs.h} Defines the type @code{struct ifaddrs} and declares the functions @code{getifaddrs}, @code{freeifaddrs}. Documentation: @itemize @item @url{https://www.kernel.org/doc/man-pages/online/pages/man3/getifaddrs.3.html}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/libintl.texi000066400000000000000000000023611411057217300220670ustar00rootroot00000000000000@node libintl.h @section @file{libintl.h} Defines the macros @code{__USE_GNU_GETTEXT}, @code{__GNU_GETTEXT_SUPPORTED_REVISION}, and declares the functions @code{gettext}, @code{dgettext}, @code{dcgettext}, @code{ngettext}, @code{dngettext}, @code{dcngettext}, @code{textdomain}, @code{bindtextdomain}, @code{bind_textdomain_codeset}. Documentation: @itemize @item @ifinfo @ref{Message catalogs with gettext,,The `gettext' family of functions,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Message-catalogs-with-gettext.html}, @end ifnotinfo @item @ifinfo @ref{gettext,,,gettext}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/gettext/manual/html_node/gettext.html}. @end ifnotinfo @end itemize Gnulib module: gettext Portability problems fixed by Gnulib, if GNU gettext is installed: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 14, Android 9.0. @item The functions cannot deal with GNU .mo files with system-dependent strings (of major version 1 or of minor version 1) on some non-glibc platforms: NetBSD 3.0, Solaris 10. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/link.texi000066400000000000000000000006511411057217300213670ustar00rootroot00000000000000@node link.h @section @file{link.h} Defines the type @code{struct dl_phdr_info}, and declares the function @code{dl_iterate_phdr}. Documentation: --- Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, AIX 7.1, HP-UX 11.31, IRIX 6.5, Cygwin 2.9.0, mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/malloc.texi000066400000000000000000000011071411057217300216760ustar00rootroot00000000000000@node malloc.h @section @file{malloc.h} Declares the function @code{memalign} and functions for customizing the @code{malloc} behavior. Documentation: @itemize @item @ifinfo @ref{Unconstrained Allocation,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Unconstrained-Allocation.html}. @end ifnotinfo @end itemize Gnulib module: malloc-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, OpenBSD 6.7. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/mcheck.texi000066400000000000000000000014311411057217300216610ustar00rootroot00000000000000@node mcheck.h @section @file{mcheck.h} Defines the type @code{enum mcheck_status} and declares the functions @code{mcheck}, @code{mcheck_pedantic}, @code{mcheck_check_all}, @code{mprobe}, @code{mtrace}, @code{muntrace}. Documentation: @itemize @item @ifinfo @ref{Heap Consistency Checking,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html}. @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/mntent.texi000066400000000000000000000020671411057217300217420ustar00rootroot00000000000000@node mntent.h @section @file{mntent.h} Defines the type @code{struct mntent} and the macros @code{MNTTAB}, @code{MOUNTED}, @code{MNTTYPE_*}, @code{MNTOPT_*}, and declares the functions @code{setmntent}, @code{getmntent}, @code{getmntent_r}, @code{addmntent}, @code{endmntent}, @code{hasmntopt}. Documentation: @itemize @item @ifinfo @ref{mtab,,The `mtab' file,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setmntent.3.html,,man setmntent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Solaris 11.4, mingw, MSVC 14. @item The function @code{getmntent_r} is missing on all non-glibc platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin, Android 9.0. @end itemize Gnulib module @code{mountlist} provides a higher-level abstraction. gnulib-20210822~d383792/doc/glibc-headers/obstack.texi000066400000000000000000000010761411057217300220620ustar00rootroot00000000000000@node obstack.h @section @file{obstack.h} Documentation: @itemize @item @ifinfo @ref{Obstacks,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Obstacks.html}. @end ifnotinfo @end itemize Gnulib module: obstack Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/paths.texi000066400000000000000000000006121411057217300215460ustar00rootroot00000000000000@node paths.h @section @file{paths.h} Defines the macros @code{_PATH_*}. Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 11 2010-11, mingw, MSVC 14. @item The set of @code{_PATH_*} macros is platform dependent. @end itemize gnulib-20210822~d383792/doc/glibc-headers/printf.texi000066400000000000000000000015611411057217300217350ustar00rootroot00000000000000@node printf.h @section @file{printf.h} Defines the type @code{struct printf_info} and the macros and enum values @code{PA_*}, and declares the functions @code{printf_function}, @code{printf_arginfo_function}, @code{register_printf_function}, @code{parse_printf_format}, @code{printf_size}, @code{printf_size_info}. Documentation: @itemize @item @ifinfo @ref{Parsing a Template String,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Parsing-a-Template-String.html}. @end ifnotinfo @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/glibc-headers/pty.texi000066400000000000000000000017111411057217300212440ustar00rootroot00000000000000@node pty.h @section @file{pty.h} Declares the functions @code{openpty} and @code{forkpty}. Documentation: @itemize @item @ifinfo @ref{Pseudo-Terminal Pairs,,Opening a Pseudo-Terminal Pair,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Pseudo_002dTerminal-Pairs.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/openpty.3.html,,man openpty}. @end itemize Gnulib module: pty Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms that declare the @code{forkpty} and @code{openpty} functions in @code{util.h} or @code{libutil.h} instead: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7. @item This header file is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize gnulib-20210822~d383792/doc/glibc-headers/resolv.texi000066400000000000000000000014471411057217300217500ustar00rootroot00000000000000@node resolv.h @section @file{resolv.h} Defines the types @code{res_sendhookact}, @code{res_send_qhook}, @code{res_send_rhook}, @code{res_state}, @code{struct res_sym} and the macros @code{_PATH_RESCONF}, @code{RES_*}, and declares the functions @code{res_close}, @code{res_init}, @code{res_mkquery}, @code{res_query}, @code{res_querydomain}, @code{res_search}, @code{res_send}. Documentation: @itemize @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/res_init.3.html,,man res_init}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @item The functions are missing on some platforms: HP-UX 11. @end itemize gnulib-20210822~d383792/doc/glibc-headers/shadow.texi000066400000000000000000000020651411057217300217200ustar00rootroot00000000000000@node shadow.h @section @file{shadow.h} Defines the type @code{struct spwd} and declares the functions @code{setspent}, @code{endspent}, @code{getspent}, @code{getspent_r}, @code{getspnam}, @code{getspnam_r}, @code{sgetspent}, @code{sgetspent_r}, @code{fgetspent}, @code{fgetspent_r}, @code{putspent}, @code{lckpwdf}, @code{ulckpwdf}. Documentation: @itemize @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setspent.3.html,,man setspent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin, mingw, MSVC 14, Android 9.0. @item The functions @code{getspent_r}, @code{getspnam_r}, @code{sgetspent_r}, @code{fgetspent}, @code{fgetspent_r}, @code{putspent} are missing on some platforms: HP-UX 11. @item The functions @code{sgetspent}, @code{sgetspent_r} are missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4. @end itemize gnulib-20210822~d383792/doc/glibc-headers/sys_ioctl.texi000066400000000000000000000012721411057217300224420ustar00rootroot00000000000000@node sys/ioctl.h @section @file{sys/ioctl.h} Declares the function @code{ioctl}. Documentation: @itemize @item @ifinfo @ref{IOCTLs,,,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/IOCTLs.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/ioctl.2.html,,man ioctl}. @end itemize Gnulib module: sys_ioctl Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file does not declare the @code{ioctl} function on some platforms: AIX 5.1, Solaris 11.4, Haiku 2017. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/sys_random.texi000066400000000000000000000015221411057217300226060ustar00rootroot00000000000000@node sys/random.h @section @file{sys/random.h} Declares the function @code{getrandom} and the flags for it. Documentation: @itemize @item @ifinfo @ref{Unpredictable Bytes,,Generating Unpredictable Bytes,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Unpredictable-Bytes.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man2/getrandom.2.html,,man getrandom}. @end itemize Gnulib module: sys_random Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: glibc 2.24, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.11, IRIX 6.5, Cygwin 2.6.x, mingw, MSVC 14. @item This header file is not self-contained on some platforms: uClibc, macOS 11.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/sysexits.texi000066400000000000000000000007761411057217300223350ustar00rootroot00000000000000@node sysexits.h @section @file{sysexits.h} Defines the @code{EX_*} macros, including @code{EX_OK}. Gnulib module: sysexits Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file defines no @code{EX_*} macros if @code{_BSD_SOURCE} is not defined on some platforms: Haiku. @item The macro @code{EX_CONFIG} is missing on some platforms: HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20210822~d383792/doc/glibc-headers/ttyent.texi000066400000000000000000000011131411057217300217530ustar00rootroot00000000000000@node ttyent.h @section @file{ttyent.h} Defines the type @code{struct ttyent} and declares the functions @code{setttyent}, @code{endttyent}, @code{getttyent}, @code{getttynam}. Documentation: @itemize @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/setttyent.3.html,,man setttyent}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize gnulib-20210822~d383792/doc/gnu-oids.texi000066400000000000000000000041011411057217300174600ustar00rootroot00000000000000@c This table of OID's is included in the GNU Coding Standards. @c @c Copyright 2008, 2009, 2010, 2013 Free Software Foundation, Inc. @c @c Copying and distribution of this file, with or without modification, @c are permitted in any medium without royalty provided the copyright @c notice and this notice are preserved. @c @c When adding new OIDs, please add them also to @c https://www.alvestrand.no/objectid/ @c (Our page is https://www.alvestrand.no/objectid/1.3.6.1.4.1.11591.html.) 1.3.6.1.4.1.11591 GNU 1.3.6.1.4.1.11591.1 GNU Radius 1.3.6.1.4.1.11591.2 GnuPG 1.3.6.1.4.1.11591.2.1 notation 1.3.6.1.4.1.11591.2.1.1 pkaAddress 1.3.6.1.4.1.11591.3 GNU Radar 1.3.6.1.4.1.11591.4 GNU GSS @c Added 2008-10-24 on request from Sergey Poznyakoff 1.3.6.1.4.1.11591.5 GNU Mailutils @c Added 2009-03-03 on request from Simon Josefsson 1.3.6.1.4.1.11591.6 GNU Shishi @c Added 2010-05-17 on request from Eric Blossom 1.3.6.1.4.1.11591.7 GNU Radio @c Added 2010-07-02 on request from Sergey Poznyakoff 1.3.6.1.4.1.11591.8 GNU Dico @c Added 2013-12-17 on request from Sergey Poznyakoff 1.3.6.1.4.1.11591.9 GNU Rush 1.3.6.1.4.1.11591.12 digestAlgorithm 1.3.6.1.4.1.11591.12.2 TIGER/192 1.3.6.1.4.1.11591.13 encryptionAlgorithm 1.3.6.1.4.1.11591.13.2 Serpent 1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB 1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC 1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB 1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB 1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB 1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC 1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB 1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB 1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB 1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC 1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB 1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB 1.3.6.1.4.1.11591.14 CRC algorithms 1.3.6.1.4.1.11591.14.1 CRC 32 @c Added 2013-12-05 on request from Werner Koch 1.3.6.1.4.1.11591.15 ellipticCurve 1.3.6.1.4.1.11591.15.1 Ed25519 gnulib-20210822~d383792/doc/gnulib-intro.texi000066400000000000000000000533451411057217300203620ustar00rootroot00000000000000@node Benefits @section Benefits of using Gnulib Gnulib is useful to enhance various aspects of a package: @itemize @bullet @item Portability: With Gnulib, a package maintainer can program against the POSIX and GNU libc APIs and nevertheless expect good portability to platforms that don't implement POSIX. @item Maintainability: When a package uses modules from Gnulib instead of code written specifically for that package, the maintainer has less code to maintain. @item Security: Gnulib provides functions that are immune against vulnerabilities that plague the uses of the corresponding commonplace functions. For example, @code{asprintf}, @code{canonicalize_file_name} are not affected by buffer sizing problems that affect @code{sprintf}, @code{realpath}. @code{openat} does not have the race conditions that @code{open} has. Etc. @item Reliability: Gnulib provides functions that combine a call to a system function with a check of the result. Examples are @code{xalloc}, @code{xprintf}, @code{xstrtod}, @code{xgetcwd}. @item Structure: Gnulib offers a way to structure code into modules, typically one include file, one source code file, and one autoconf macro for each functionality. Modularity helps maintainability. @end itemize @node Library vs Reusable Code @section Library vs. Reusable Code Classical libraries are installed as binary object code. Gnulib is different: It is used as a source code library. Each package that uses Gnulib thus ships with part of the Gnulib source code. The used portion of Gnulib is tailored to the package: A build tool, called @code{gnulib-tool}, is provided that copies a tailored subset of Gnulib into the package. @node Portability and Application Code @section Portability and Application Code One of the goals of Gnulib is to make portable programming easy, on the basis of the standards relevant for GNU (and Unix). The objective behind that is to avoid a fragmentation of the user community into disjoint user communities according to the operating system, and instead allow synergies between users on different operating systems. Another goal of Gnulib is to provide application code that can be shared between several applications. Some people wonder: "What? glibc doesn't have a function to copy a file?" Indeed, the scope of a system's libc is to implement the relevant standards (ISO C, POSIX) and to provide access functions to the kernel's system calls, and little more. There is no clear borderline between both areas. For example, Gnulib has a facility for generating the name of backup files. While this task is entirely at the application level---no standard specifies an API for it---the na@"{@dotless{i}}ve code has some portability problems because on some platforms the length of file name components is limited to 30 characters or so. Gnulib handles that. Similarly, Gnulib has a facility for executing a command in a subprocess. It is at the same time a portability enhancement (it works on GNU, Unix, and Windows, compared to the classical @code{fork}/@code{exec} idiom which is not portable to Windows), as well as an application aid: it takes care of redirecting stdin and/or stdout if desired, and emits an error message if the subprocess failed. @node Target Platforms @section Target Platforms Gnulib supports a number of platforms that we call the ``reasonable portability targets''. This class consists of widespread operating systems, for three years after their last availability, or---for proprietary operating systems---as long as the vendor provides commercial support for it. Already existing Gnulib code for older operating systems is usually left in place for longer than these three years. So it comes that programs that use Gnulib run pretty well also on these older operating systems. Some operating systems are not very widespread, but are Free Software and are actively developed. Such platforms are also supported by Gnulib, if that OS's developers community keeps in touch with the Gnulib developers, by providing bug reports, analyses, or patches. For such platforms, Gnulib supports only the versions of the last year or the last few months, depending on the maturity of said OS project, the number of its users, and how often these users upgrade. Niche operating systems are generally unsupported by Gnulib, unless some of their developers or users contribute support to Gnulib. The degree of support Gnulib guarantees for a platform depends on the amount of testing it gets from volunteers. Platforms on which Gnulib is frequently tested are the best supported. Then come platforms with occasional testing, then platforms which are rarely tested. Usually, we fix bugs when they are reported. Except that some rarely tested platforms are also low priority; bug fixes for these platforms can take longer. @menu * Supported Platforms:: * Formerly Supported Platforms:: * Unsupported Platforms:: @end menu @node Supported Platforms @subsection Supported Platforms As of 2020, the list of supported platforms is the following: @itemize @item glibc systems. With glibc 2.19 or newer, they are frequently tested. @c [Not very relevant in the long term.] @c The distributions Ubuntu, Fedora, RHEL, Arch Linux are frequently tested. @c CentOS is occasionally tested. @c Debian, gNewSense, Trisquel, OpenSUSE are rarely tested. About the kernels: @itemize @item glibc on Linux is frequently tested. @item glibc on kFreeBSD is rarely tested. @end itemize @item Mac OS X@. In versions 10.13, it's occasionally tested. In version 10.5, it's rarely tested. @item FreeBSD 11.0 or newer is occasionally tested. @item OpenBSD 6.1 or newer is occasionally tested. @item NetBSD 7.0 or newer is occasionally tested. @item AIX 7.1 is occasionally tested. @item Solaris 10 and 11 are occasionally tested. Solaris 9 is rarely tested and low priority. @item Cygwin 2.9 is occasionally tested. Cygwin 1.7.x is rarely tested. @item mingw is occasionally tested. But note that some modules are currently unsupported on mingw: @code{mgetgroups}, @code{getugroups}, @code{idcache}, @code{userspec}, @code{openpty}, @code{login_tty}, @code{forkpty}, @code{pt_chown}, @code{grantpt}, @code{pty}, @code{savewd}, @code{mkancesdirs}, @code{mkdir-p}, @code{euidaccess}, @code{faccessat}. The versions of Windows that are supported are Windows XP and newer. Only the latest version of mingw is tested; older versions are not supported. @item GNU Hurd 0.7 is rarely tested. @item Native Windows, with MSVC as compiler, is rarely tested and low priority. The versions of MSVC that are supported are MSVC 14 (Visual Studio 2015) or newer. @item @c There is musl-gcc on Ubuntu, and Alpine Linux 3.3.3. musl libc is rarely tested. @item Minix 3.3.0 is rarely tested. @item @c IRIX 6.5 cc has no option for C99 support. You would need to use gcc instead. IRIX 6.5 is very rarely tested. @item Haiku is no longer tested. @item uClibc on Linux is no longer tested. @item QNX is no longer tested. @end itemize @node Formerly Supported Platforms @subsection Formerly Supported Platforms The following platforms were supported in the past, but are no longer supported: @itemize @item glibc versions 2.1.x and older. @item Mac OS X 10.4 and older. @item AIX 4 and older. @item HP-UX 11.31. @item IRIX 6.4 and older. @item OSF/1 5.1. @item Solaris 8 and older. @item Interix. @item BeOS. @end itemize Gnulib supports these operating systems only in an unvirtualized environment. When you run an OS inside a virtual machine, you have to be aware that the virtual machine can bring in bugs of its own. For example, floating-point operations on Solaris can behave slightly differently in QEMU than on real hardware. And Haiku's @command{bash} program misbehaves in VirtualBox 3, whereas it behaves fine in VirtualBox 4. Similarly, running native Windows binaries on GNU/Linux under WINE is rarely tested and low priority: WINE has a set of behaviours and bugs that is slightly different from native Windows. @node Unsupported Platforms @subsection Unsupported Platforms @cindex integer arithmetic portability @cindex portability, integer arithmetic Some platforms with C compilers are not supported by Gnulib because the platforms violate Gnulib's C portability assumptions. @xref{Other portability assumptions}. These assumptions are not required by the C or POSIX standards but hold on almost all practical porting targets. If you need to port Gnulib code to a platform where these assumptions are not true, we would appreciate hearing of any fixes. We need fixes that do not increase runtime overhead on standard hosts and that are relatively easy to maintain. These platforms are listed below to illustrate problems that Gnulib and Gnulib-using code would have if it were intended to be portable to all practical POSIX or C platforms. @itemize @bullet @item The IBM i's pointers are 128 bits wide and it lacks the two types @code{intptr_t} and @code{uintptr_t}, which are optional in the C and POSIX standards. However, these two types are required for the XSI extension to POSIX, and many Gnulib modules use them. To work around this compatibility problem, Gnulib-using applications can be run on the IBM i's PASE emulation environment. The IBM i's architecture descends from the System/38 (1978). @item The Unisys ClearPath Dorado's machine word is 36 bits. Its signed integers use a ones'-complement representation. On these machines, @code{CHAR_BIT == 9} and @code{INT_MIN == -INT_MAX}. By default @code{UINT_MAX} is @math{2^{36} - 2}, which does not conform to the C requirement that it be one less than a power of two. Although compiler options can raise @code{UINT_MAX} to be @math{2^{36} - 1}, this can break system code that uses @math{-0} as a flag value. This platform's architecture descends from the UNIVAC 1107 (1962). @item The Unisys ClearPath Libra's machine word is 48 bits. Its @code{unsigned int} uses the low-order 40 bits of the word, and @code{int} uses the low-order 41 bits of the word with a signed-magnitude representation. On these machines, @code{INT_MAX == UINT_MAX}, @code{INT_MIN == -INT_MAX}, and @code{sizeof (int) == 6}. This platform's architecture descends from the Burroughs B5000 (1961). @end itemize The following platforms are not supported by Gnulib. The cost of supporting them would exceed the benefit because they are rarely used, or poorly documented, or have been supplanted by other platforms, or diverge too much from POSIX, or some combination of these and other factors. Please don't bother sending us patches for them. @itemize @item Windows 95/98/ME. @item DJGPP and EMX (the 32-bit operating systems running in DOS). @item MSDOS (the 16-bit operating system). @item Windows Mobile, Symbian OS, iOS. @end itemize @node Modules @section Modules Gnulib is divided into modules. Every module implements a single facility. Modules can depend on other modules. A module consists of a number of files and a module description. The files are copied by @code{gnulib-tool} into the package that will use it, usually verbatim, without changes. Source code files (.h, .c files) reside in the @file{lib/} subdirectory. Autoconf macro files reside in the @file{m4/} subdirectory. Build scripts reside in the @file{build-aux/} subdirectory. The module description contains the list of files; @code{gnulib-tool} copies these files. It contains the module's dependencies; @code{gnulib-tool} installs them as well. It also contains the autoconf macro invocation (usually a single line or nothing at all); @code{gnulib-tool} ensures this is invoked from the package's @file{configure.ac} file. And also a @file{Makefile.am} snippet; @code{gnulib-tool} collects these into a @file{Makefile.am} for the tailored Gnulib part. The module description and include file specification are for documentation purposes; they are combined into @file{MODULES.html}. The module system serves two purposes: @enumerate @item It ensures consistency of the used autoconf macros and @file{Makefile.am} rules with the source code. For example, source code which uses the @code{getopt_long} function---this is a common way to implement parsing of command line options in a way that complies with the GNU standards---needs the source code (@file{lib/getopt.c} and others), the autoconf macro which detects whether the system's libc already has this function (in @file{m4/getopt.m4}), and a few @file{Makefile.am} lines that create the substitute @file{getopt.h} if not. These three pieces belong together. They cannot be used without each other. The module description and @code{gnulib-tool} ensure that they are copied altogether into the destination package. @item It allows for scalability. It is well-known since the inception of the MODULA-2 language around 1978 that dissection into modules with dependencies allows for building large sets of code in a maintainable way. The maintainability comes from the facts that: @itemize @bullet @item Every module has a single purpose; you don't worry about other parts of the program while creating, reading or modifying the code of a module. @item The code you have to read in order to understand a module is limited to the source of the module and the .h files of the modules listed as dependencies. It is for this reason also that we recommend to put the comments describing the functions exported by a module into its .h file. @end itemize In other words, the module is the elementary unit of code in Gnulib, comparable to a class in object-oriented languages like Java or C#. @end enumerate The module system is the basis of @code{gnulib-tool}. When @code{gnulib-tool} copies a part of Gnulib into a package, it first compiles a module list, starting with the requested modules and adding all the dependencies, and then collects the files, @file{configure.ac} snippets and @file{Makefile.am} snippets. @node Various Kinds of Modules @section Various Kinds of Modules There are modules of various kinds in Gnulib. For a complete list of the modules, see in @file{MODULES.html}. @subsection Support for ISO C or POSIX functions. When a function is not implemented by a system, the Gnulib module provides an implementation under the same name. Examples are the @samp{snprintf} and @samp{readlink} modules. Similarly, when a function is not correctly implemented by a system, Gnulib provides a replacement. For functions, we use the pattern @smallexample #if !HAVE_WORKING_FOO # define foo rpl_foo #endif @end smallexample @noindent and implement the @code{foo} function under the name @code{rpl_foo}. This renaming is needed to avoid conflicts at compile time (in case the system header files declare @code{foo}) and at link/run time (because the code making use of @code{foo} could end up residing in a shared library, and the executable program using this library could be defining @code{foo} itself). For header files, such as @code{stdbool.h} or @code{stdint.h}, we provide the substitute only if the system doesn't provide a correct one. The template of this replacement is distributed in a slightly different name, with @samp{.in} inserted before the @samp{.h} extension, so that on systems which do provide a correct header file the system's one is used. The modules in this category are supported in C++ mode as well. This means, while the autoconfiguration uses the C compiler, the resulting header files and function substitutes can be used with a matching C++ compiler as well. @subsection Enhancements of ISO C or POSIX functions These are sometimes POSIX functions with GNU extensions also found in glibc---examples: @samp{getopt}, @samp{fnmatch}---and often new APIs---for example, for all functions that allocate memory in one way or the other, we have variants which also include the error checking against the out-of-memory condition. @subsection Portable general use facilities Examples are a module for copying a file---the portability problems relate to the copying of the file's modification time, access rights, and extended attributes---or a module for extracting the tail component of a file name---here the portability to native Windows requires a different API than the classical POSIX @code{basename} function. @subsection Reusable application code Examples are an error reporting function, a module that allows output of numbers with K/M/G suffixes, or cryptographic facilities. @subsection Object oriented classes Examples are data structures like @samp{list}, or abstract output stream classes that work around the fact that an application cannot implement an stdio @code{FILE} with its logic. Here, while staying in C, we use implementation techniques like tables of function pointers, known from the C++ language or from the Linux kernel. @subsection Interfaces to external libraries Examples are the @samp{iconv} module, which interfaces to the @code{iconv} facility, regardless whether it is contained in libc or in an external @code{libiconv}. Or the @samp{readline} module, which interfaces to the GNU readline library. @subsection Build / maintenance infrastructure An example is the @samp{maintainer-makefile} module, which provides extra Makefile tags for maintaining a package. @node Collaborative Development @section Collaborative Development Gnulib is maintained collaboratively. The mailing list is @code{}. Be warned that some people on the list may be very active at some times and unresponsive at other times. Every module has one or more maintainers. While issues are discussed collaboratively on the list, the maintainer of a module nevertheless has a veto right regarding changes in his module. All patches should be posted to the list, regardless whether they are proposed patches or whether they are committed immediately by the maintainer of the particular module. The purpose is not only to inform the other users of the module, but mainly to allow peer review. It is not uncommon that several people contribute comments or spot bugs after a patch was proposed. Conversely, if you are using Gnulib, and a patch is posted that affects one of the modules that your package uses, you have an interest in proofreading the patch. @node Copyright @section Copyright Most modules are under the GPL@. Some, mostly modules which can reasonably be used in libraries, are under LGPL@. Few modules are under other licenses, such as LGPLv2+, unlimited, or public domain. If the module description file says "GPL", it means "GPLv3+" (GPLv3 or newer, at the licensee's choice); if it says "LGPL", it means "LGPLv3+" (LGPLv3 or newer, at the licensee's choice). The source files, more precisely the files in @file{lib/} and @file{build-aux/}, are under a license compatible with the module's license. Most often, they are under the same license. But files can be shared among several modules, and in these cases it can happen that a source file is under a weaker license than noted in the module description --- namely under the weakest license among the licenses of the modules that contain the file. Different licenses apply to files in special directories: @table @file @item modules/ Module description files are under this copyright: @quotation Copyright @copyright{} 20XX--20YY Free Software Foundation, Inc.@* Copying and distribution of this file, with or without modification, in any medium, are permitted without royalty provided the copyright notice and this notice are preserved. @end quotation @item m4/ Autoconf macro files are under this copyright: @quotation Copyright @copyright{} 20XX--20YY Free Software Foundation, Inc.@* This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. @end quotation @item tests/ If a license statement is not present in a test module, the test files are under GPL@. Even if the corresponding source module is under LGPL, this is not a problem, since compiled tests are not installed by ``make install''. @item doc/ Documentation files are under this copyright: @quotation Copyright @copyright{} 2004--20YY Free Software Foundation, Inc.@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is at @url{https://www.gnu.org/licenses/fdl-1.3.en.html}. @end quotation @end table If you want to use some Gnulib modules under LGPL, you can do so by passing the option @samp{--lgpl} to @code{gnulib-tool}. This will ensure that all imported modules can be used under the LGPL license. Similarly, if you want some Gnulib modules under LGPLv2+ (Lesser GPL version 2.1 or newer), you can do so by passing the option @samp{--lgpl=2} to @code{gnulib-tool}. Keep in mind that when you submit patches to files in Gnulib, you should license them under a compatible license. This means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL@. You can find out about it by looking at the license header of the file. @node Steady Development @section Steady Development Gnulib modules are continually adapted, to match new practices, to be consistent with newly added modules, or simply as a response to build failure reports. If you are willing to report an occasional regression, we recommend to use the newest version from git always, except in periods of major changes. Most Gnulib users do this. @node Openness @section Openness Gnulib is open in the sense that we gladly accept contributions if they are generally useful, well engineered, and if the contributors have signed the obligatory papers with the FSF. The module system is open in the sense that a package using Gnulib can @enumerate @item locally patch or override files in Gnulib, @item locally add modules that are treated like Gnulib modules by @code{gnulib-tool}. @end enumerate This is achieved by the @samp{--local-dir} option of @code{gnulib-tool} (@pxref{Extending Gnulib}). gnulib-20210822~d383792/doc/gnulib-readme.texi000066400000000000000000000477131411057217300204660ustar00rootroot00000000000000@c Gnulib README @c Copyright 2001, 2003--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @menu * Gnulib Basics:: * Git Checkout:: * Keeping Up-to-date:: * Contributing to Gnulib:: * Portability guidelines:: * High Quality:: @end menu @node Gnulib Basics @section Gnulib Basics While portability across operating systems is not one of GNU's primary goals, it has helped introduce many people to the GNU system, and is worthwhile when it can be achieved at a low cost. This collection helps lower that cost. Gnulib is intended to be the canonical source for most of the important ``portability'' and/or common files for GNU projects. These are files intended to be shared at the source level; Gnulib is not a typical library meant to be installed and linked against. Thus, unlike most projects, Gnulib does not normally generate a source tarball distribution; instead, developers grab modules directly from the source repository. The easiest, and recommended, way to do this is to use the @command{gnulib-tool} script. Since there is no installation procedure for Gnulib, @command{gnulib-tool} needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of @command{gnulib-tool}, or by using a symbolic link from a place inside your @env{PATH} to the @command{gnulib-tool} file of your preferred Gnulib checkout. For example: @example $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool @end example @node Git Checkout @section Git Checkout Gnulib is available for anonymous checkout. In any Bourne-shell the following should work: @example $ git clone https://git.savannah.gnu.org/git/gnulib.git @end example For a read-write checkout you need to have a login on @samp{savannah.gnu.org} and be a member of the Gnulib project at @url{https://savannah.gnu.org/projects/gnulib}. Then, instead of the URL @url{https://git.savannah.gnu.org/git/gnulib.git}, use the URL @samp{ssh://@var{user}@@git.savannah.gnu.org/srv/git/gnulib} where @var{user} is your login name on savannah.gnu.org. git resources: @table @asis @item Overview: @url{https://en.wikipedia.org/wiki/Git_(software)} @item Homepage: @url{https://git-scm.com/} @end table When you use @code{git annotate} or @code{git blame} with Gnulib, it's recommended that you use the @option{-w} option, in order to ignore massive whitespace changes that happened in 2009. @node Keeping Up-to-date @section Keeping Up-to-date The best way to work with Gnulib is to check it out of git. To synchronize, you can use @code{git pull}. Subscribing to the @email{bug-gnulib@@gnu.org} mailing list will help you to plan when to update your local copy of Gnulib (which you use to maintain your software) from git. You can review the archives, subscribe, etc., via @url{https://lists.gnu.org/mailman/listinfo/bug-gnulib}. Sometimes, using an updated version of Gnulib will require you to use newer versions of GNU Automake or Autoconf. You may find it helpful to join the autotools-announce mailing list to be advised of such changes. @node Contributing to Gnulib @section Contributing to Gnulib All software here is copyrighted by the Free Software Foundation---you need to have filled out an assignment form for a project that uses the module for that contribution to be accepted here. If you have a piece of code that you would like to contribute, please email @email{bug-gnulib@@gnu.org}. Generally we are looking for files that fulfill at least one of the following requirements: @itemize @item If your @file{.c} and @file{.h} files define functions that are broken or missing on some other system, we should be able to include it. @item If your functions remove arbitrary limits from existing functions (either under the same name, or as a slightly different name), we should be able to include it. @end itemize If your functions define completely new but rarely used functionality, you should probably consider packaging it as a separate library. @menu * Gnulib licensing:: * Indent with spaces not TABs:: * How to add a new module:: @end menu @node Gnulib licensing @subsection Gnulib licensing Gnulib contains code both under GPL and LGPL@. Because several packages that use Gnulib are GPL, the files state they are licensed under GPL@. However, to support LGPL projects as well, you may use some of the files under LGPL@. The ``License:'' information in the files under modules/ clarifies the real license that applies to the module source. Keep in mind that if you submit patches to files in Gnulib, you should license them under a compatible license, which means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL via a ``License: LGPL'' information in the projects' modules/ file. @node Indent with spaces not TABs @subsection Indent with spaces not TABs We use space-only indentation in nearly all files. This includes all @file{*.h}, @file{*.c}, @file{*.y} files, except for the @code{regex} module. Makefile and ChangeLog files are excluded, since TAB characters are part of their format. In order to tell your editor to produce space-only indentation, you can use these instructions. @itemize @item For Emacs: Add these lines to your Emacs initialization file (@file{$HOME/.emacs} or similar): @example ;; In Gnulib, indent with spaces everywhere (not TABs). ;; Exceptions: Makefile and ChangeLog modes. (add-hook 'find-file-hook '(lambda () (if (and buffer-file-name (string-match "/gnulib\\>" (buffer-file-name)) (not (string-equal mode-name "Change Log")) (not (string-equal mode-name "Makefile"))) (setq indent-tabs-mode nil)))) @end example @item For vi (vim): Add these lines to your @file{$HOME/.vimrc} file: @example " Don't use tabs for indentation. Spaces are nicer to work with. set expandtab @end example For Makefile and ChangeLog files, compensate for this by adding this to your @file{$HOME/.vim/after/indent/make.vim} file, and similarly for your @file{$HOME/.vim/after/indent/changelog.vim} file: @example " Use tabs for indentation, regardless of the global setting. set noexpandtab @end example @item For Eclipse: In the ``Window|Preferences'' dialog (or ``Eclipse|Preferences'' dialog on Mac OS), @enumerate @item Under ``General|Editors|Text Editors'', select the ``Insert spaces for tabs'' checkbox. @item Under ``C/C++|Code Style'', select a code style profile that has the ``Indentation|Tab policy'' combobox set to ``Spaces only'', such as the ``GNU [built-in]'' policy. @end enumerate If you use the GNU indent program, pass it the option @option{--no-tabs}. @end itemize @node How to add a new module @subsection How to add a new module @itemize @item Add the header files and source files to @file{lib/}. @item If the module needs configure-time checks, write an Autoconf macro for it in @file{m4/@var{module}.m4}. See @file{m4/README} for details. @item Write a module description @file{modules/@var{module}}, based on @file{modules/TEMPLATE}. @item If the module contributes a section to the end-user documentation, put this documentation in @file{doc/@var{module}.texi} and add it to the ``Files'' section of @file{modules/@var{module}}. Most modules don't do this; they have only documentation for the programmer (= Gnulib user). Such documentation usually goes into the @file{lib/} source files. It may also go into @file{doc/}; but don't add it to the module description in this case. @item Add the module to the list in @file{MODULES.html.sh}. @end itemize @noindent You can test that a module builds correctly with: @example $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN $ cd /tmp/testdir $ ./configure && make @end example @noindent Other things: @itemize @item Check the license and copyright year of headers. @item Check that the source code follows the GNU coding standards; see @url{https://www.gnu.org/prep/standards}. @item Add source files to @file{config/srclist*} if they are identical to upstream and should be upgraded in Gnulib whenever the upstream source changes. @item Include header files in source files to verify the function prototypes. @item Make sure a replacement function doesn't cause warnings or clashes on systems that have the function. @item Autoconf functions can use @samp{gl_*} prefix. The @samp{AC_*} prefix is for autoconf internal functions. @item Build files only if they are needed on a platform. Look at the @code{alloca} and @code{fnmatch} modules for how to achieve this. If for some reason you cannot do this, and you have a @file{.c} file that leads to an empty @file{.o} file on some platforms (through some big @code{#if} around all the code), then ensure that the compilation unit is not empty after preprocessing. One way to do this is to @code{#include } or @code{} before the big @code{#if}. @end itemize @node Portability guidelines @section Portability guidelines Gnulib code is intended to be portable to a wide variety of platforms, not just GNU platforms. Gnulib typically attempts to support a platform as long as it is still supported by its provider, even if the platform is not the latest version. @xref{Target Platforms}. Many Gnulib modules exist so that applications need not worry about undesirable variability in implementations. For example, an application that uses the @code{malloc} module need not worry about @code{malloc@ (0)} returning @code{NULL} on some Standard C platforms; and @code{glob} users need not worry about @code{glob} silently omitting symbolic links to nonexistent files on some platforms that do not conform to POSIX. Gnulib code is intended to port without problem to new hosts, e.g., hosts conforming to recent C and POSIX standards. Hence Gnulib code should avoid using constructs that these newer standards no longer require, without first testing for the presence of these constructs. For example, because C11 made variable length arrays optional, Gnulib code should avoid them unless it first uses the @code{vararrays} module to check whether they are supported. The following subsections discuss some exceptions and caveats to the general Gnulib portability guidelines. @menu * C language versions:: * C99 features assumed:: * C99 features avoided:: * Other portability assumptions:: @end menu @node C language versions @subsection C language versions Currently Gnulib assumes at least a freestanding C99 compiler, possibly operating with a C library that predates C99; with time this assumption will likely be strengthened to later versions of the C standard. Old platforms currently supported include AIX 6.1, HP-UX 11i v1 and Solaris 10, though these platforms are rarely tested. Gnulib itself is so old that it contains many fixes for obsolete platforms, fixes that may be removed in the future. Because of the freestanding C99 assumption, Gnulib code can include @code{}, @code{}, @code{}, @code{}, @code{}, and @code{} unconditionally. Gnulib code can also assume the existence of @code{}, @code{}, @code{}, @code{}, @code{}, @code{}, @code{}, @code{}, and @code{}. Similarly, many modules include @code{} even though it's not even in C11; that's OK since @code{} has been around nearly forever. Even if the include files exist, they may not conform to the C standard. However, GCC has a @command{fixincludes} script that attempts to fix most C89-conformance problems. Gnulib currently assumes include files largely conform to C89 or better. People still using ancient hosts should use fixincludes or fix their include files manually. Even if the include files conform, the library itself may not. For example, @code{strtod} and @code{mktime} have some bugs on some platforms. You can work around some of these problems by requiring the relevant modules, e.g., the Gnulib @code{mktime} module supplies a working and conforming @code{mktime}. @node C99 features assumed @subsection C99 features assumed by Gnulib Although the C99 standard specifies many features, Gnulib code is conservative about using them, partly because Gnulib predates the widespread adoption of C99, and partly because many C99 features are not well-supported in practice. C99 features that are reasonably portable nowadays include: @itemize @item A declarations after a statement, or as the first clause in a @code{for} statement. @item @code{long long int}. @item @code{}, assuming the @code{stdbool} module is used. @xref{stdbool.h}. @item @code{}, assuming the @code{stdint} module is used. @xref{stdint.h}. @item Compound literals and designated initializers. @item Variadic macros. @item @code{static inline} functions. @item @code{__func__}, assuming the @code{func} module is used. @xref{func}. @item The @code{restrict} qualifier, assuming @code{AC_REQUIRE([AC_C_RESTRICT])} is used. This qualifier is sometimes implemented via a macro, so C++ code that uses Gnulib should avoid using @code{restrict} as an identifier. @item Flexible array members (however, see the @code{flexmember} module). @end itemize @node C99 features avoided @subsection C99 features avoided by Gnulib Gnulib avoids some features even though they are standardized by C99, as they have portability problems in practice. Here is a partial list of avoided C99 features. Many other C99 features are portable only if their corresponding modules are used; Gnulib code that uses such a feature should require the corresponding module. @itemize @item Variable length arrays, unless @code{__STDC_NO_VLA__} is defined. See the @code{vararrays} module. @item @code{extern inline} functions, without checking whether they are supported. @xref{extern inline}. @item Type-generic math functions. @item Universal character names in source code. @item @code{}, since GNU programs need not worry about deficient source-code encodings. @item Comments beginning with @samp{//}. This is mostly for style reasons. @end itemize @node Other portability assumptions @subsection Other portability assumptions made by Gnulib The GNU coding standards allow one departure from strict C: Gnulib code can assume that standard internal types like @code{ptrdiff_t} and @code{size_t} are no wider than @code{long}. POSIX requires implementations to support at least one programming environment where this is true, and such environments are recommended for Gnulib-using applications. When it is easy to port to non-POSIX platforms like MinGW where these types are wider than @code{long}, new Gnulib code should do so, e.g., by using @code{ptrdiff_t} instead of @code{long}. However, it is not always that easy, and no effort has been made to check that all Gnulib modules work on MinGW-like environments. Gnulib code makes the following additional assumptions: @itemize @item @code{int} and @code{unsigned int} are at least 32 bits wide. POSIX and the GNU coding standards both require this. @item Signed integer arithmetic is two's complement. Previously, Gnulib code sometimes also assumed that signed integer arithmetic wraps around, but modern compiler optimizations sometimes do not guarantee this, and Gnulib code with this assumption is now considered to be questionable. @xref{Integer Properties}. Although some Gnulib modules contain explicit support for the other signed integer representations allowed by the C standard (ones' complement and signed magnitude), these modules are the exception rather than the rule. All practical Gnulib targets use two's complement. @item There are no ``holes'' in integer values: all the bits of an integer contribute to its value in the usual way. In particular, an unsigned type and its signed counterpart have the same number of bits when you count the latter's sign bit. @item Objects with all bits zero are treated as 0 or NULL@. For example, @code{memset@ (A, 0, sizeof@ A)} initializes an array @code{A} of pointers to NULL. @item The types @code{intptr_t} and @code{uintptr_t} exist, and pointers can be converted to and from these types without loss of information. @item Addresses and sizes behave as if objects reside in a flat address space. In particular: @itemize @item If two nonoverlapping objects have sizes @var{S} and @var{T} represented as @code{ptrdiff_t} or @code{size_t} values, then @code{@var{S} + @var{T}} cannot overflow. @item A pointer @var{P} points within an object @var{O} if and only if @code{(char *) &@var{O} <= (char *) @var{P} && (char *) @var{P} < (char *) (&@var{O} + 1)}. @item Arithmetic on a valid pointer is equivalent to the same arithmetic on the pointer converted to @code{uintptr_t}, except that offsets are multiplied by the size of the pointed-to objects. For example, if @code{P + I} is a valid expression involving a pointer @var{P} and an integer @var{I}, then @code{(uintptr_t) (P + I) == (uintptr_t) ((uintptr_t) P + I * sizeof *P)}. Similar arithmetic can be done with @code{intptr_t}, although more care must be taken in case of integer overflow or negative integers. @item A pointer @code{P} has alignment @code{A} if and only if @code{(uintptr_t) P % A} is zero, and similarly for @code{intptr_t}. @item If an existing object has size @var{S}, and if @var{T} is sufficiently small (e.g., 8 KiB), then @code{@var{S} + @var{T}} cannot overflow. Overflow in this case would mean that the rest of your program fits into @var{T} bytes, which can't happen in realistic flat-address-space hosts. @item Adding zero to a null pointer does not change the pointer. For example, @code{0 + (char *) NULL == (char *) NULL}. @end itemize @end itemize Some system platforms violate these assumptions and are therefore not Gnulib porting targets. @xref{Unsupported Platforms}. @node High Quality @section High Quality We develop and maintain a testsuite for Gnulib. The goal is to have a 100% firm interface so that maintainers can feel free to update to the code in git at @emph{any} time and know that their application will not break. This means that before any change can be committed to the repository, a test suite program must be produced that exposes the bug for regression testing. All experimental work should be done on branches to help promote this. When compiling and testing Gnulib and Gnulib-using programs, certain compiler options can help improve reliability. The @code{manywarnings} module enables several forms of static checking in GCC and related compilers (@pxref{manywarnings}). For dynamic checking, you can run @code{configure} with @code{CFLAGS} options appropriate for your compiler. For example: @example ./configure \ CFLAGS='-g3 -O2'\ ' -D_FORTIFY_SOURCE=2'\ ' -fsanitize=undefined'\ ' -fsanitize-undefined-trap-on-error' @end example @noindent Here: @itemize @bullet @item @code{-D_FORTIFY_SOURCE=2} enables extra security hardening checks in the GNU C library. @item @code{-fsanitize=undefined} enables GCC's undefined behavior sanitizer (@code{ubsan}), and @item @code{-fsanitize-undefined-trap-on-error} causes @code{ubsan} to abort the program (through an ``illegal instruction'' signal). This measure stops exploit attempts and also allows you to debug the issue. @end itemize Without the @code{-fsanitize-undefined-trap-on-error} option, @code{-fsanitize=undefined} causes messages to be printed, and execution continues after an undefined behavior situation. The message printing causes GCC-like compilers to arrange for the program to dynamically link to libraries it might not otherwise need. With GCC, instead of @code{-fsanitize-undefined-trap-on-error} you can use the @code{-static-libubsan} option to arrange for two of the extra libraries (@code{libstdc++} and @code{libubsan}) to be linked statically rather than dynamically, though this typically bloats the executable and the remaining extra libraries are still linked dynamically. gnulib-20210822~d383792/doc/gnulib-tool.texi000066400000000000000000001214251411057217300201770ustar00rootroot00000000000000@node Invoking gnulib-tool @chapter Invoking gnulib-tool @c Copyright (C) 2005--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @pindex gnulib-tool @cindex invoking @command{gnulib-tool} The @command{gnulib-tool} command is the recommended way to import Gnulib modules. It is possible to borrow Gnulib modules in a package without using @command{gnulib-tool}, relying only on the meta-information stored in the @file{modules/*} files, but with a growing number of modules this becomes tedious. @command{gnulib-tool} simplifies the management of source files, @file{Makefile.am}s and @file{configure.ac} in packages incorporating Gnulib modules. @file{gnulib-tool} is not installed in a standard directory that is contained in the @code{PATH} variable. It needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of @file{gnulib-tool}, or you can also use a symbolic link from a place inside your @code{PATH} to the @file{gnulib-tool} file of your preferred and most up-to-date Gnulib checkout, like this: @smallexample $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool @end smallexample Run @samp{gnulib-tool --help} for information. To get familiar with @command{gnulib-tool} without affecting your sources, you can also try some commands with the option @samp{--dry-run}; then @code{gnulib-tool} will only report which actions it would perform in a real run without changing anything. @menu * Which modules?:: Determining the needed set of Gnulib modules * Initial import:: First import of Gnulib modules. * Modified imports:: Changing the import specification. * Simple update:: Tracking Gnulib development. * Source changes:: Impact of Gnulib on your source files. * Link-time requirements:: Which libraries to link against * Finding POSIX substitutes:: Determining additional suitable Gnulib modules * Modified build rules:: Modifying the build rules of a Gnulib import * Multiple instances:: Using Gnulib for both a library and a program * gettextize and autopoint:: Caveat: @code{gettextize} and @code{autopoint} users! * Localization:: Handling Gnulib's own message translations. * VCS Issues:: Integration with Version Control Systems. * Unit tests:: Bundling the unit tests of the Gnulib modules. * Conditional dependencies:: Avoiding unnecessary checks and compilations. @end menu @node Which modules? @section Finding modules @cindex Finding modules There are four ways of finding the names of Gnulib modules that you can use in your package: @itemize @item You have the complete module list, sorted according to categories, in @url{https://www.gnu.org/software/gnulib/MODULES.html}. @item If you are looking for POSIX function replacements that you don't know about yet, follow the procedure described in section @ref{Finding POSIX substitutes}. @item If you are looking for a particular POSIX header or function replacement, look in the chapters @ref{Header File Substitutes} and @ref{Function Substitutes}. For headers and functions that are provided by Glibc but not standardized by POSIX, look in the chapters @ref{Glibc Header File Substitutes} and @ref{Glibc Function Substitutes}. @item If you have already found the source file in Gnulib and are looking for the module that contains this source file, you can use the command @samp{gnulib-tool --find @var{filename}}. @end itemize @node Initial import @section Initial import @cindex initial import Gnulib assumes that your project uses Autoconf. When using Gnulib, you will need to have Autoconf among your build tools. Gnulib also assumes that your project's @file{configure.ac} contains the line @smallexample AC_CONFIG_HEADERS([config.h]) @end smallexample The @file{config.h} file gets generated with platform dependent C macro definitions, and the source files include it (see @ref{Source changes}). Unless you use @command{gnulib-tool}'s @option{--gnu-make} option, Gnulib also assumes that your project uses Automake at least in a subdirectory of your project. While the use of Automake in your project's top level directory is an easy way to fulfil the Makefile conventions of the GNU coding standards, Gnulib does not require it. Invoking @samp{gnulib-tool --import} will copy source files, create a @file{Makefile.am} to build them, generate a file @file{gnulib-comp.m4} with Autoconf M4 macro declarations used by @file{configure.ac}, and generate a file @file{gnulib-cache.m4} containing the cached specification of how Gnulib is used. Our example will be a library that uses Autoconf, Automake and Libtool. It calls @code{strdup}, and you wish to use gnulib to make the package portable to C99 and C11 (which don't have @code{strdup}). @example ~/src/libfoo$ gnulib-tool --import strdup Module list with included dependencies: absolute-header extensions strdup string File list: lib/dummy.c lib/strdup.c lib/string.in.h m4/absolute-header.m4 m4/extensions.m4 m4/gnulib-common.m4 m4/strdup.m4 m4/string_h.m4 Creating directory ./lib Creating directory ./m4 Copying file lib/dummy.c Copying file lib/strdup.c Copying file lib/string.in.h Copying file m4/absolute-header.m4 Copying file m4/extensions.m4 Copying file m4/gnulib-common.m4 Copying file m4/gnulib-tool.m4 Copying file m4/strdup.m4 Copying file m4/string_h.m4 Creating lib/Makefile.am Creating m4/gnulib-cache.m4 Creating m4/gnulib-comp.m4 Finished. You may need to add #include directives for the following .h files. #include Don't forget to - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac, - mention "lib" in SUBDIRS in Makefile.am, - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am, - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC, - invoke gl_INIT in ./configure.ac. ~/src/libfoo$ @end example By default, the source code is copied into @file{lib/} and the M4 macros in @file{m4/}. You can override these paths by using @code{--source-base=DIRECTORY} and @code{--m4-base=DIRECTORY}. Some modules also provide other files necessary for building. These files are copied into the directory specified by @samp{AC_CONFIG_AUX_DIR} in @file{configure.ac} or by the @code{--aux-dir=DIRECTORY} option. If neither is specified, the current directory is assumed. @code{gnulib-tool} can make symbolic links instead of copying the source files. The option to specify for this is @samp{--symlink}, or @samp{-s} for short. This can be useful to save a few kilobytes of disk space. But it is likely to introduce bugs when @code{gnulib} is updated; it is more reliable to use @samp{gnulib-tool --update} (see below) to update to newer versions of @code{gnulib}. Furthermore it requires extra effort to create self-contained tarballs, and it may disturb some mechanism the maintainer applies to the sources. For these reasons, this option is generally discouraged. @code{gnulib-tool} will overwrite any pre-existing files, in particular @file{Makefile.am}. It is also possible to separate the generated @file{Makefile.am} content (for building the gnulib library) into a separate file, say @file{gnulib.mk}, that can be included by your handwritten @file{Makefile.am}, but this is a more advanced use of @code{gnulib-tool}. Consequently, it is a good idea to choose directories that are not already used by your projects, to separate gnulib imported files from your own files. This approach is also useful if you want to avoid conflicts between other tools (e.g., @code{gettextize} that also copy M4 files into your package. Simon Josefsson successfully uses a source base of @file{gl/}, and a M4 base of @file{gl/m4/}, in several packages. After the @samp{--import} option on the command line comes the list of Gnulib modules that you want to incorporate in your package. The names of the modules coincide with the filenames in Gnulib's @file{modules/} directory. Some Gnulib modules depend on other Gnulib modules. @code{gnulib-tool} will automatically add the needed modules as well; you need not list them explicitly. @code{gnulib-tool} will also memorize which dependent modules it has added, so that when someday a dependency is dropped, the implicitly added module is dropped as well (unless you have explicitly requested that module). If you want to cut a dependency, i.e., not add a module although one of your requested modules depends on it, you may use the option @samp{--avoid=@var{module}} to do so. Multiple uses of this option are possible. Of course, you will then need to implement the same interface as the removed module. A few manual steps are required to finish the initial import. @code{gnulib-tool} printed a summary of these steps. First, you must ensure Autoconf can find the macro definitions in @file{gnulib-comp.m4}. Use the @code{ACLOCAL_AMFLAGS} specifier in your top-level @file{Makefile.am} file, as in: @example ACLOCAL_AMFLAGS = -I m4 @end example You are now ready to call the M4 macros in @code{gnulib-comp.m4} from @file{configure.ac}. The macro @code{gl_EARLY} must be called as soon as possible after verifying that the C compiler is working. Typically, this is immediately after @code{AC_PROG_CC}, as in: @example ... AC_PROG_CC gl_EARLY ... @end example The core part of the gnulib checks are done by the macro @code{gl_INIT}. Place it further down in the file, typically where you normally check for header files or functions. It must come after other checks which may affect the compiler invocation, such as @code{AC_MINIX}. For example: @example ... # For gnulib. gl_INIT ... @end example @code{gl_INIT} will in turn call the macros related with the gnulib functions, be it specific gnulib macros, like @code{gl_FUNC_ALLOCA} or Autoconf or Automake macros like @code{AC_FUNC_ALLOCA} or @code{AM_FUNC_GETLINE}. So there is no need to call those macros yourself when you use the corresponding gnulib modules. You must also make sure that the gnulib library is built. Add the @code{Makefile} in the gnulib source base directory to @code{AC_CONFIG_FILES}, as in: @example AC_CONFIG_FILES(... lib/Makefile ...) @end example You must also make sure that @code{make} will recurse into the gnulib directory. To achieve this, add the gnulib source base directory to a @code{SUBDIRS} Makefile.am statement, as in: @example SUBDIRS = lib @end example or if you, more likely, already have a few entries in @code{SUBDIRS}, you can add something like: @example SUBDIRS += lib @end example Finally, you have to add compiler and linker flags in the appropriate source directories, so that you can make use of the gnulib library. Since some modules (@samp{getopt}, for example) may copy files into the build directory, @file{top_builddir/lib} is needed as well as @file{top_srcdir/lib}. For example: @example ... AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib ... LDADD = lib/libgnu.a ... @end example Don't forget to @code{#include} the various header files. In this example, you would need to make sure that @samp{#include } is evaluated when compiling all source code files, that want to make use of @code{strdup}. In the usual case where Autoconf is creating a @file{config.h} file, you should include @file{config.h} first, before any other include file. That way, for example, if @file{config.h} defines @samp{restrict} to be the empty string on a non-C99 host, or a macro like @samp{_FILE_OFFSET_BITS} that affects the layout of data structures, the definition is consistent for all include files. Also, on some platforms macros like @samp{_FILE_OFFSET_BITS} and @samp{_GNU_SOURCE} may be ineffective, or may have only a limited effect, if defined after the first system header file is included. Finally, note that you cannot use @code{AC_LIBOBJ} or @code{AC_REPLACE_FUNCS} in your @file{configure.ac} and expect the resulting object files to be automatically added to @file{lib/libgnu.a}. This is because your @code{AC_LIBOBJ} and @code{AC_REPLACE_FUNCS} invocations from @file{configure.ac} augment a variable @code{@@LIBOBJS@@} (and/or @code{@@LTLIBOBJS@@} if using Libtool), whereas @file{lib/libgnu.a} is built from the contents of a different variable, usually @code{@@gl_LIBOBJS@@} (or @code{@@gl_LTLIBOBJS@@} if using Libtool). @node Modified imports @section Modified imports You can at any moment decide to use Gnulib differently than the last time. There are two ways to change how Gnulib is used. Which one you'll use, depends on where you keep track of options and module names that you pass to @code{gnulib-tool}. @itemize @bullet @item If you store the options and module names in a file under your own control, such as @file{autogen.sh}, @file{bootstrap}, @file{bootstrap.conf}, or similar, simply invoke @command{gnulib-tool} again, with modified options and more or fewer module names. @item @code{gnulib-tool} remembers which modules were used last time. If you want to rely on @code{gnulib-tool}'s own memory of the last used options and module names, you can use the commands @command{gnulib-tool --add-import} and @command{gnulib-tool --remove-import}. So, if you only want to use more Gnulib modules, simply invoke @command{gnulib-tool --add-import @var{new-modules}}. The list of modules that you pass after @samp{--add-import} is @emph{added} to the previous list of modules. Similarly, if you want to use fewer Gnulib modules, simply invoke @command{gnulib-tool --remove-import @var{unneeded-modules}}. The list of modules that you pass after @samp{--remove-import} is @emph{removed} from the previous list of modules. Note that if a module is then still needed as dependency of other modules, it will be used nevertheless. If you want to @emph{really} not use a module any more, regardless of whether other modules may need it, you need to use the @samp{--avoid} option. For other changes, such as different choices of @samp{--lib}, @samp{--source-base} or @samp{--aux-dir}, the normal way is to modify manually the file @file{gnulib-cache.m4} in the M4 macros directory, then launch @samp{gnulib-tool --add-import}. The only change for which this doesn't work is a change of the @samp{--m4-base} directory. Because, when you pass a different value of @samp{--m4-base}, @code{gnulib-tool} will not find the previous @file{gnulib-cache.m4} file any more. A possible solution is to manually copy the @file{gnulib-cache.m4} into the new M4 macro directory. In the @file{gnulib-cache.m4} file, the macros have the following meaning: @table @code @item gl_MODULES The argument is a space separated list of the requested modules, not including dependencies. @item gl_AVOID The argument is a space separated list of modules that should not be used, even if they occur as dependencies. Corresponds to the @samp{--avoid} command line argument. @item gl_SOURCE_BASE The argument is the relative file name of the directory containing the gnulib source files (mostly *.c and *.h files). Corresponds to the @samp{--source-base} command line argument. @item gl_M4_BASE The argument is the relative file name of the directory containing the gnulib M4 macros (*.m4 files). Corresponds to the @samp{--m4-base} command line argument. @item gl_TESTS_BASE The argument is the relative file name of the directory containing the gnulib unit test files. Corresponds to the @samp{--tests-base} command line argument. @item gl_LIB The argument is the name of the library to be created. Corresponds to the @samp{--lib} command line argument. @item gl_LGPL The presence of this macro without arguments corresponds to the @samp{--lgpl} command line argument. The presence of this macro with an argument (whose value must be 2 or 3) corresponds to the @samp{--lgpl=@var{arg}} command line argument. @item gl_LIBTOOL The presence of this macro corresponds to the @samp{--libtool} command line argument and to the absence of the @samp{--no-libtool} command line argument. It takes no arguments. @item gl_MACRO_PREFIX The argument is the prefix to use for macros in the @file{gnulib-comp.m4} file. Corresponds to the @samp{--macro-prefix} command line argument. @end table @end itemize @node Simple update @section Simple update When you want to update to a more recent version of Gnulib, without changing the list of modules or other parameters, a simple call does it: @smallexample $ gnulib-tool --add-import @end smallexample @noindent This will create, update or remove files, as needed. Note: From time to time, changes are made in Gnulib that are not backward compatible. When updating to a more recent Gnulib, you should consult Gnulib's @file{NEWS} file to check whether the incompatible changes affect your project. @node Source changes @section Changing your sources for use with Gnulib Gnulib contains some header file overrides. This means that when building on systems with deficient header files in @file{/usr/include/}, it may create files named @file{string.h}, @file{stdlib.h}, @file{stdint.h} or similar in the build directory. In the other source directories of your package you will usually pass @samp{-I} options to the compiler, so that these Gnulib substitutes are visible and take precedence over the files in @file{/usr/include/}. These Gnulib substitute header files rely on @file{} being already included. Furthermore @file{} must be the first include in every compilation unit. This means that to @emph{all your source files} and likely also to @emph{all your tests source files} you need to add an @samp{#include } at the top. Which source files are affected? Exactly those whose compilation includes a @samp{-I} option that refers to the Gnulib library directory. This is annoying, but inevitable: On many systems, @file{} is used to set system dependent flags (such as @code{_GNU_SOURCE} on GNU systems), and these flags have no effect after any system header file has been included. @node Link-time requirements @section Changing your link commands for use with Gnulib When you use Gnulib, you need to augment the set of libraries against which your programs and libraries are linked. This is done by augmenting the Automake variable @code{LDADD} (for all programs) or @code{@var{prog}_LDADD} (for a single program @code{@var{prog}}) or @code{@var{library}_la_LIBADD} (for a single library @code{@var{library}.la}). What do you need to add to this Automake variable? @enumerate @item The reference to the Gnulib library. In the example of section @ref{Initial import}, this would be @code{lib/libgnu.a} for source in the top-level directory, or @code{../lib/libgnu.a} for source in a sibling directory of @code{lib/}. @item References to additional libraries, brought in by some of the Gnulib modules that you use (directly or indirectly). The complete list of such libraries is printed when you invoke @code{gnulib-tool}. Alternatively, you can retrieve the set of additional libraries required by a specific Gnulib module by running @smallexample ./gnulib-tool --extract-recursive-link-directive @var{module} @end smallexample @noindent Beware: By looking into the module description file @code{modules/@var{module}} or by running @smallexample ./gnulib-tool --extract-link-directive @var{module} @end smallexample @noindent you would miss the link dependencies of indirectly used modules. @end enumerate @node Finding POSIX substitutes @section Finding recommended ISO C and POSIX function substitutes Gnulib contains a wealth of portability workarounds for ISO C and POSIX functions. They are listed in detail in the chapter @ref{Function Substitutes}. If you want to know which function substitutes are recommended for your package, you can search your source code for ISO C and POSIX functions that it uses and read the corresponding sections of said documentation chapter. But this is a tedious task. Here is an alternative approach that makes this task easier. @enumerate @item Add the Gnulib module @samp{posixcheck} to the Gnulib imports of your package, as described earlier in this chapter. @item Do a @code{make distclean} if you previously built in the top-level directory. Then regenerate the Autotools-generated parts of the package. @item On a glibc system, build your package. Pay attention to the compiler warnings. Warnings are generated for uses of ISO C and POSIX functions that have portability problems or other important pitfalls and for which you have not yet imported the corresponding Gnulib module. If you get, say, a warning ``warning: call to 'close' declared with attribute warning: close does not portably work on sockets - use gnulib module close for portability'', put @samp{close} on your list of modules to import. @item Add the modules you noted to the Gnulib imports of your package. @item Optionally, you can do the same steps again, and make sure that there are no warnings left except those that you want to intentionally ignore. @item Finally, remove the Gnulib module @samp{posixcheck} from the Gnulib imports, and run @code{make distclean}. @end enumerate @node Modified build rules @section Modifying the build rules of a Gnulib import directory In some cases, you may want to set additional compiler options for use within the Gnulib import directory. For example, the @samp{relocatable} module operates better if you define the C macros @code{ENABLE_COSTLY_RELOCATABLE} and @code{INSTALLDIR} during its compilation. There are two ways to do so: Use of the @code{gnulib-tool} option @code{--makefile-name}, and a kitchen-sink module. With the @code{gnulib-tool} option @code{--makefile-name}, you are telling @code{gnulib-tool} to generate an includable @code{Makefile.am} portion, rather than a self-contained @code{Makefile.am}. For example, when you use @code{--makefile-name=Makefile.gnulib}, @code{gnulib-tool} will generate @code{Makefile.gnulib}, and you will provide a hand-written @code{Makefile.am} that includes @code{Makefile.gnulib} through a line such as @smallexample include Makefile.gnulib @end smallexample Before this include, you need to initialize this set of @code{Makefile.am} variables: @itemize @bullet @item @code{AUTOMAKE_OPTIONS} @item @code{SUBDIRS} @item @code{noinst_HEADERS} @item @code{noinst_LIBRARIES} @item @code{noinst_LTLIBRARIES} @item @code{pkgdata_DATA} (only with Automake @geq{} 1.11.4) @item @code{EXTRA_DIST} @item @code{BUILT_SOURCES} @item @code{SUFFIXES} @item @code{MOSTLYCLEANFILES} @item @code{MOSTLYCLEANDIRS} @item @code{CLEANFILES} @item @code{DISTCLEANFILES} @item @code{MAINTAINERCLEANFILES} @item @code{AM_CPPFLAGS} @item @code{AM_CFLAGS} @end itemize @code{AUTOMAKE_OPTIONS} should be initialized as described in @ref{Options,,Changing Automake's Behavior,automake,GNU Automake}. The other variables can be initialized to empty. However, you will most likely want to initialize some of them with non-empty values, in order to achieve the desired customization. The other approach, the kitchen-sink module, is more advanced. See chapter @ref{Extending Gnulib}. @node Multiple instances @section Using Gnulib for both a library and a program Your project might build both a library and some accompanying programs in the same source tree. In that case you might want to use different modules for the library than for the programs. Typically the programs might want to make use of @code{getopt-posix} or @code{version-etc}, while the library wants to stay clear of these modules for technical or licensing reasons. Let's assume that your project contains a @file{lib} directory where the source of the library resides and a @file{src} directory for the sources of the programs as follows. @example . |-- configure.ac |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c `-- Makefile.am @end example You can now add two instances of Gnulib to your project in separate source trees: @example ~/src/libfoo$ gnulib-tool --import --lib=libgnu --source-base=gnulib \ --m4-base=gnulib/m4 --macro-prefix=gl strndup ~/src/libfoo$ gnulib-tool --import --lib=libgnutools \ --source-base=src/gnulib --m4-base=src/gnulib/m4 \ --macro-prefix=gl_tools getopt-gnu @end example The first one will import the module @code{strndup} in @file{gnulib} and the second one will import @code{getopt-gnu} in @file{src/gnulib} and you will end up with the following source tree (many files omitted in the interest of brevity): @example . |-- configure.ac |-- gnulib | |-- m4 | |-- strndup.c |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c |-- gnulib | |-- getopt.c | |-- getopt.in.h | |-- m4 `-- Makefile.am @end example As discussed in @ref{Unit tests}, you may not use @samp{--with-tests} for this project since the @code{configure.ac} is shared. Integration with your code is basically the same as outlined in @ref{Initial import} with the one exception that you have to add both the macro @code{gl_EARLY} and the macro @code{gl_tools_EARLY} to your @file{configure.ac} (and of course also both macros @code{gl_INIT} and @code{gl_tools_INIT}). Obviously the name of the second macro is dependent on the value of the @option{--macro-prefix} option in your @command{gnulib-tool} invocation. @example ... AC_PROG_CC gl_EARLY gl_tools_EARLY ... # For gnulib. gl_INIT gl_tools_INIT ... @end example Also as outlined in @ref{Initial import} you will have to add compiler and linker flags. For the library you might have to add something along the line of the following to your @file{Makefile.am}: @example ... AM_CPPFLAGS = -I$(top_srcdir)/gnulib -I$(top_builddir)/gnulib ... libfoo_la_LIBADD = $(top_builddir)/gnulib/libgnu.la ... @end example Correspondingly for the programs you will have to add something like this: @example ... AM_CPPFLAGS = -I$(top_srcdir)/src/gnulib -I$(top_builddir)/src/gnulib ... LDADD = $(top_builddir)/src/gnulib/libgnutools.la ... @end example The name of the library that you have pass in the linker option depends on the @option{--lib} option in @command{gnulib-tool} invocation. @node gettextize and autopoint @section Caveat: @code{gettextize} and @code{autopoint} users @cindex gettextize, caveat @cindex autopoint, caveat The programs @code{gettextize} and @code{autopoint}, part of GNU @code{gettext}, import or update the internationalization infrastructure. Some of this infrastructure, namely ca.@: 20 Autoconf macro files and the @file{config.rpath} file, is also contained in Gnulib and may be imported by @code{gnulib-tool}. The use of @code{gettextize} or @code{autopoint} will therefore overwrite some of the files that @code{gnulib-tool} has imported, and vice versa. Avoiding to use @code{gettextize} (manually, as package maintainer) or @code{autopoint} (as part of a script like @code{autoreconf} or @code{autogen.sh}) is not the solution: These programs also import the infrastructure in the @file{po/} and optionally in the @file{intl/} directory. The copies of the conflicting files in Gnulib are more up-to-date than the copies brought in by @code{gettextize} and @code{autopoint}. When a new @code{gettext} release is made, the copies of the files in Gnulib will be updated immediately. The choice of which version of gettext to require depends on the needs of your package. For a package that wants to comply to GNU Coding Standards, the steps are: @enumerate @item When you run @code{gettextize}, always use the @code{gettextize} from the matching GNU gettext release. For the most recent Gnulib checkout, this is the newest release found on @url{https://ftp.gnu.org/gnu/gettext/}. For an older Gnulib snapshot, it is the release that was the most recent release at the time the Gnulib snapshot was taken. @item After running @code{gettextize}, invoke @code{gnulib-tool} and import the @code{gettext} module. Also, copy the latest version of gnulib's @file{build-aux/po/Makefile.in.in} to your @file{po/} directory (this is done for you if you use gnulib's @file{bootstrap} script). @item If you get an error message like @code{*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version ... but the Autoconf macros are from gettext version ...}, it means that a new GNU gettext release was made, and its Autoconf macros were integrated into Gnulib and now mismatch the @file{po/} infrastructure. In this case, fetch and install the new GNU gettext release and run @code{gettextize} followed by @code{gnulib-tool}. @end enumerate On the other hand, if your package is not as concerned with compliance to the latest standards, but instead favors development on stable environments, the steps are: @enumerate @item Determine the oldest version of @code{gettext} that you intend to support during development (at this time, gnulib recommends going no older than version 0.17). Run @code{autopoint} (not @code{gettextize}) to copy infrastructure into place (newer versions of gettext will install the older infrastructure that you requested). @item Invoke @code{gnulib-tool}, and import the @code{gettext-h} module. @end enumerate Regardless of which approach you used to get the infrastructure in place, the following steps must then be used to preserve that infrastructure (gnulib's @file{bootstrap} script follows these rules): @enumerate @item When a script of yours run @code{autopoint}, invoke @code{gnulib-tool} afterwards. @item When you invoke @code{autoreconf} after @code{gnulib-tool}, make sure to not invoke @code{autopoint} a second time, by setting the @code{AUTOPOINT} environment variable, like this: @smallexample $ env AUTOPOINT=true autoreconf --install @end smallexample @end enumerate @node Localization @section Handling Gnulib's own message translations Gnulib provides some functions that emit translatable messages using GNU @code{gettext}. The @samp{gnulib} domain at the @url{https://translationproject.org/, Translation Project} collects translations of these messages, which you should incorporate into your own programs. There are two basic ways to achieve this. The first, and older, method is to list all the source files you use from Gnulib in your own @file{po/POTFILES.in} file. This will cause all the relevant translatable strings to be included in your POT file. When you send this POT file to the Translation Project, translators will normally fill in the translations of the Gnulib strings from their ``translation memory'', and send you back updated PO files. However, this process is error-prone: you might forget to list some source files, or the translator might not be using a translation memory and provide a different translation than another translator, or the translation might not be kept in sync between Gnulib and your package. It is also slow and causes substantial extra work, because a human translator must be in the loop for each language and you will need to incorporate their work on request. For these reasons, a new method was designed and is now recommended. If you pass the @code{--po-base=@var{directory}} and @code{--po-domain=@var{domain}} options to @code{gnulib-tool}, then @code{gnulib-tool} will create a separate directory with its own @file{POTFILES.in}, and fetch current translations directly from the Translation Project (using @command{rsync} or @command{wget}, whichever is available). The POT file in this directory will be called @file{@var{domain}-gnulib.pot}, depending on the @var{domain} you gave to the @code{--po-domain} option (typically the same as the package name). This causes these translations to reside in a separate message domain, so that they do not clash either with the translations for the main part of your package nor with those of other packages on the system that use possibly different versions of Gnulib. When you use these options, the functions in Gnulib are built in such a way that they will always use this domain regardless of the default domain set by @code{textdomain}. In order to use this method, you must---in each program that might use Gnulib code---add an extra line to the part of the program that initializes locale-dependent behavior. Where you would normally write something like: @example @group setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); @end group @end example @noindent you should add an additional @code{bindtextdomain} call to inform gettext of where the MO files for the extra message domain may be found: @example @group bindtextdomain (PACKAGE "-gnulib", LOCALEDIR); @end group @end example (This example assumes that the @var{domain} that you specified to @code{gnulib-tool} is the same as the value of the @code{PACKAGE} preprocessor macro.) Since you do not change the @code{textdomain} call, the default message domain for your program remains the same and your own use of @code{gettext} functions will not be affected. @node VCS Issues @section Issues with Version Control Systems If a project stores its source files in a version control system (VCS), such as CVS, Subversion, or Git, one needs to decide which files to commit. In principle, all files created by @code{gnulib-tool}, except @file{gnulib-cache.m4}, can be treated like generated source files, like for example a @file{parser.c} file generated from @file{parser.y}. Alternatively, they can be considered source files and updated manually. Here are the three different approaches in common use. Each has its place, and you should use whichever best suits your particular project and development methods. @enumerate @item In projects which commit all source files, whether generated or not, into their VCS, the @code{gnulib-tool} generated files should all be committed. In this case, you should pass the option @samp{--no-vc-files} to @code{gnulib-tool}, which avoids alteration of VCS-related files such as @file{.gitignore}. Gnulib also contains files generated by @command{make} (and removed by @code{make clean}), using information determined by @command{configure}. For a Gnulib source file of the form @file{lib/foo.in.h}, the corresponding @file{lib/foo.h} is such a @command{make}-generated file. These should @emph{not} be checked into the VCS, but instead added to @file{.gitignore} or equivalent. @item In projects which customarily omit from their VCS all files that are generated from other source files, none of these files and directories are added into the VCS@. As described in @ref{Modified imports}, there are two ways to keep track of options and module names that are passed to @code{gnulib-tool}. The command for restoring the omitted files depends on it: @itemize @bullet @item If they are stored in a file other than @code{gnulib-cache.m4}, such as @file{autogen.sh}, @file{bootstrap}, @file{bootstrap.conf}, or similar, the restoration command is the entire @code{gnulib-tool ... --import ...} invocation with all options and module names. @item If the project relies on @code{gnulib-tool}'s memory of the last used options and module names, then the file @file{gnulib-cache.m4} in the M4 macros directory must be added to the VCS, and the restoration command is: @smallexample $ gnulib-tool --update @end smallexample The @samp{--update} option operates much like the @samp{--add-import} option, but it does not offer the possibility to change the way Gnulib is used. Also it does not report in the ChangeLogs the files that it had to add because they were missing. @end itemize Gnulib includes the file @file{build-aux/bootstrap} to aid a developer in using this setup. Furthermore, in projects that use git for version control, it is possible to use a git submodule containing the precise commit of the gnulib repository, so that each developer running @file{bootstrap} will get the same version of all gnulib-provided files. The location of the submodule can be chosen to fit the package's needs; here's how to initially create the submodule in the directory @file{.gnulib}: @smallexample $ dir=.gnulib $ git submodule add -- https://git.savannah.gnu.org/git/gnulib.git $dir $ git config alias.syncsub "submodule foreach git pull origin master" @end smallexample @noindent Thereafter, @file{bootstrap} can run this command to update the submodule to the recorded checkout level: @smallexample git submodule update --init $dir @end smallexample @noindent and a developer can use this sequence to update to a newer version of gnulib: @smallexample $ git syncsub $ git add $dir $ ./bootstrap @end smallexample @item Some projects take a ``middle road'': they do commit Gnulib source files as in the first approach, but they do not commit other derived files, such as a @code{Makefile.in} generated by Automake. This increases the size and complexity of the repository, but can help occasional contributors by not requiring them to have a full Gnulib checkout to do a build, and all developers by ensuring that all developers are working with the same version of Gnulib in the repository. It also supports multiple Gnulib instances within a project. It remains important not to commit the @command{make}-generated files, as described above. @end enumerate @node Unit tests @section Bundling the unit tests of the Gnulib modules You can bundle the unit tests of the Gnulib modules together with your package, through the @samp{--with-tests} option. Together with @samp{--with-tests}, you also specify the directory for these tests through the @samp{--tests-base} option. Of course, you need to add this directory to the @code{SUBDIRS} variable in the @code{Makefile.am} of the parent directory. The advantage of having the unit tests bundled is that when your program has a problem on a particular platform, running the unit tests may help determine quickly if the problem is on Gnulib's side or on your package's side. Also, it helps verifying Gnulib's portability, of course. The unit tests will be compiled and run when the user runs @samp{make check}. When the user runs only @samp{make}, the unit tests will not be compiled. In the @code{SUBDIRS} variable, it is useful to put the Gnulib tests directory after the directory containing the other tests, not before: @smallexample SUBDIRS = gnulib-lib src man tests gnulib-tests @end smallexample @noindent This will ensure that on platforms where there are test failures in either directory, users will see and report the failures from the tests of your program. Note: In packages which use more than one invocation of @code{gnulib-tool} in the scope of the same @code{configure.ac}, you cannot use @samp{--with-tests}. You will have to use a separate @code{configure.ac} in this case. @node Conditional dependencies @section Avoiding unnecessary checks and compilations @cindex conditional dependencies In some cases, a module is needed by another module only on specific platforms. But when a module is present, its Autoconf checks are always executed, and its @code{Makefile.am} additions are always enabled. So it can happen that some Autoconf checks are executed and some source files are compiled, although no other module needs them on this particular platform, just @emph{in case} some other module would need them. The option @samp{--conditional-dependencies} enables an optimization of configure checks and @code{Makefile.am} snippets that avoids this. With this option, whether a module is considered ``present'' is no longer decided when @code{gnulib-tool} is invoked, but later, when @code{configure} is run. This applies to modules that were added as dependencies while @code{gnulib-tool} was run; modules that were passed on the command line explicitly are always ``present''. For example, the @code{timegm} module needs, on platforms where the system's @code{timegm} function is missing or buggy, a replacement that is based on a function @code{mktime_internal}. The module @code{mktime-internal} that provides this function provides it on all platforms. So, by default, the file @file{mktime-internal.c} will be compiled on all platforms, even on glibc and BSD systems which have a working @code{timegm} function. When the option @samp{--conditional-dependencies} is given, on the other hand, and if @code{mktime-internal} was not explicitly required on the command line, the file @file{mktime-internal.c} will only be compiled on the platforms where the @code{timegm} needs them. Conditional dependencies are specified in the module description by putting the condition on the same line as the dependent module, enclosed in brackets. The condition is a boolean shell expression that can assume that the @code{configure.ac} snippet from the module description has already been executed. In the example above, the dependency from @code{timegm} to @code{mktime-internal} is written like this: @smallexample Depends-on: ... mktime-internal [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1] ... @end smallexample Note: The option @samp{--conditional-dependencies} cannot be used together with the option @samp{--with-tests}. It also cannot be used when a package uses @code{gnulib-tool} for several subdirectories, with different values of @samp{--source-base}, in the scope of a single @code{configure.ac} file. gnulib-20210822~d383792/doc/gnulib.texi000066400000000000000000005676651411057217300172500ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename gnulib.info @settitle GNU Gnulib @c These two require Texinfo 5.0 or later, so we use the older @c equivalent @set variables supported in 4.11 and hence @ignore @codequotebacktick on @codequoteundirected on @end ignore @set txicodequoteundirected @set txicodequotebacktick @c Define a new index for the magic constants in regex.texi. @defcodeindex cn @syncodeindex fn cp @syncodeindex ky cp @syncodeindex pg cp @syncodeindex tp cp @syncodeindex vr cp @syncodeindex cn cp @ifclear texi2html @firstparagraphindent insert @end ifclear @comment %**end of header @comment Defines the UPDATED variable. @include updated-stamp @copying This manual is for GNU Gnulib (updated @value{UPDATED}), which is a library of common routines intended to be shared at the source level. Copyright @copyright{} 2004--2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @c A copy of the license is at . @end copying @dircategory Software development @direntry * Gnulib: (gnulib). Source files to share among distributions. @end direntry @titlepage @title GNU Gnulib @subtitle updated @value{UPDATED} @author @email{bug-gnulib@@gnu.org} @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Gnulib @insertcopying @end ifnottex @menu * Brief Overview:: * Philosophy:: * Invoking gnulib-tool:: * Writing modules:: * Extending Gnulib:: * Miscellaneous Notes:: * POSIX Substitutes Library:: Building as a separate substitutes library. * Header File Substitutes:: Overriding system headers. * Function Substitutes:: Replacing system functions. * Legacy Function Substitutes:: Replacing system functions. * Glibc Header File Substitutes:: Overriding system headers. * Glibc Function Substitutes:: Replacing system functions. * Native Windows Support:: Support for the native Windows platforms. * Multithreading:: Multiple threads of execution. * Particular Modules:: Documentation of individual modules. * Regular expressions:: The regex module. * Build Infrastructure Modules:: Modules that extend the GNU Build System. * Build Infrastructure Files:: Non-modules files for the build system. * Release Management Files:: Non-modules files for preparing releases. * GNU Free Documentation License:: Copying and sharing this manual. * Index:: @end menu @c This is used at the beginning of four chapters. @macro nosuchmodulenote{thing} The notation ``Gnulib module: ---'' means that Gnulib does not provide a module providing a substitute for the \thing\. When the list ``Portability problems not fixed by Gnulib'' is empty, such a module is not needed: No portability problems are known. Otherwise, it indicates that such a module would be useful but is not available: No one so far found this \thing\ important enough to contribute a substitute for it. If you need this particular \thing\, you may write to @w{@code{}}. @end macro @node Brief Overview @chapter Brief Overview Gnulib is a source code library that provides basic functionality to programs and libraries. Many software packages make use of Gnulib to avoid reinventing the portability wheel. Resources: @itemize @item Gnulib is hosted at Savannah: @url{https://savannah.gnu.org/projects/gnulib}. Get the sources through Git from there. @item The Gnulib home page: @url{https://www.gnu.org/software/gnulib/}. @end itemize @include gnulib-readme.texi @node Philosophy @chapter Philosophy Gnulib's design and development philosophy is organized around steady, collaborative, and open development of reusable modules that are suitable for a reasonably wide variety of platforms. @menu * Benefits:: * Library vs Reusable Code:: * Portability and Application Code:: * Target Platforms:: * Modules:: * Various Kinds of Modules:: * Collaborative Development:: * Copyright:: * Steady Development:: * Openness:: @end menu @include gnulib-intro.texi @include gnulib-tool.texi @node Writing modules @chapter Writing modules This chapter explains how to write modules of your own, either to extend Gnulib for your own package (@pxref{Extending Gnulib}), or for inclusion in gnulib proper. The guidelines in this chapter do not necessarily need to be followed for using @code{gnulib-tool}. They merely represent a set of good practices. Following them will result in a good structure of your modules and in consistency with gnulib. @menu * Source code files:: * Header files:: * Implementation files:: * Specification:: * Module description:: * Autoconf macros:: * Using @code{AC_LIBOBJ}:: * Unit test modules:: * Incompatible changes:: @end menu @node Source code files @section Source code files Every API (C functions or variables) provided should be declared in a header file (.h file) and implemented in one or more implementation files (.c files). The separation has the effect that users of your module need to read only the contents of the .h file and the module description in order to understand what the module is about and how to use it---not the entire implementation. Furthermore, users of your module don't need to repeat the declarations of the functions in their code, and are likely to receive notification through compiler errors if you make incompatible changes to the API (like, adding a parameter or changing the return type of a function). @node Header files @section Header files The .h file should declare the C functions and variables that the module provides. The .h file should be stand-alone. That is, it does not require other .h files to be included before. Rather, it includes all necessary .h files by itself. @cindex double inclusion of header files @cindex header file include protection It is a tradition to use CPP tricks to avoid parsing the same header file more than once, which might cause warnings. The trick is to wrap the content of the header file (say, @file{foo.h}) in a block, as in: @example #ifndef FOO_H # define FOO_H ... body of header file goes here ... #endif /* FOO_H */ @end example Whether to use @code{FOO_H} or @code{_FOO_H} is a matter of taste and style. The C99 and C11 standards reserve all identifiers that begin with an underscore and either an uppercase letter or another underscore, for any use. Thus, in theory, an application might not safely assume that @code{_FOO_H} has not already been defined by a library. On the other hand, using @code{FOO_H} will likely lead the higher risk of collisions with other symbols (e.g., @code{KEY_H}, @code{XK_H}, @code{BPF_H}, which are CPP macro constants, or @code{COFF_LONG_H}, which is a CPP macro function). Your preference may depend on whether you consider the header file under discussion as part of the application (which has its own namespace for CPP symbols) or a supporting library (that shouldn't interfere with the application's CPP symbol namespace). @cindex C++ header files @cindex Header files and C++ Adapting C header files for use in C++ applications can use another CPP trick, as in: @example # ifdef __cplusplus extern "C" @{ # endif ... body of header file goes here ... # ifdef __cplusplus @} # endif @end example The idea here is that @code{__cplusplus} is defined only by C++ implementations, which will wrap the header file in an @samp{extern "C"} block. Again, whether to use this trick is a matter of taste and style. While the above can be seen as harmless, it could be argued that the header file is written in C, and any C++ application using it should explicitly use the @samp{extern "C"} block itself. Your preference might depend on whether you consider the API exported by your header file as something available for C programs only, or for C and C++ programs alike. Note that putting a @code{#include} in an @code{extern "C" @{ ... @}} block yields a syntax error in C++ mode on some platforms (e.g., glibc systems with g++ v3.3 to v4.2, AIX, IRIX). For this reason, it is recommended to place the @code{#include} before the @code{extern "C"} block. @node Implementation files @section Implementation files The .c file or files implement the functions and variables declared in the .h file. @subheading Include ordering Every implementation file must start with @samp{#include }. This is necessary for activating the preprocessor macros that are defined on behalf of the Autoconf macros. Some of these preprocessor macros, such as @code{_GNU_SOURCE}, would have no effect if defined after a system header file has already been included. Then comes the @samp{#include "..."} specifying the header file that is being implemented. Putting this right after @samp{#include } has the effect that it verifies that the header file is self-contained. Then come the system and application headers. It is customary to put all the system headers before all application headers, so as to minimize the risk that a preprocessor macro defined in an application header confuses the system headers on some platforms. In summary: @itemize @item First comes #include . @item Second comes the #include "..." specifying the module being implemented. @item Then come all the #include <...> of system or system-replacement headers, in arbitrary order. @item Then come all the #include "..." of gnulib and application headers, in arbitrary order. @end itemize @node Specification @section Specification The specification of a function should answer at least the following questions: @itemize @item What is the purpose of the function? @item What are the arguments? @item What is the return value? @item What happens in case of failure? (Exit? A specific return value? Errno set?) @item Memory allocation policy: If pointers to memory are returned, are they freshly allocated and supposed to be freed by the caller? @end itemize @cindex specification @cindex comments describing functions @cindex describing functions, locating Where to put the specification describing exported functions? Three practices are used in gnulib: @itemize @item The specification can be as comments in the header file, just above the function declaration. @item The specification can be as comments in the implementation file, just above the function definition. @item The specification can be in texinfo format, so that it gets included in the gnulib manual. @end itemize In any case, the specification should appear in just one place, unless you can ensure that the multiple copies will always remain identical. The advantage of putting it in the header file is that the user only has to read the include file normally never needs to peek into the implementation file(s). The advantage of putting it in the implementation file is that when reviewing or changing the implementation, you have both elements side by side. The advantage of texinfo formatted documentation is that it is easily published in HTML or Info format. Currently (as of 2020), 70% of gnulib uses the first practice, 25% of gnulib uses the second practice, and a small minority uses the texinfo practice. @node Module description @section Module description For the module description, you can start from an existing module's description, or from a blank one: @file{module/TEMPLATE} for a normal module, or @file{module/TEMPLATE-TESTS} for a unit test module. Some more fields are possible but rarely used. Use @file{module/TEMPLATE-EXTENDED} if you want to use one of them. Module descriptions have the following fields. Absent fields are equivalent to fields with empty contents. @table @asis @item Description This field should contain a concise description of the module's functionality. One sentence is enough. For example, if it defines a single function @samp{frob}, the description can be @samp{frob() function: frobnication.} Gnulib's documentation generator will automatically convert the first part to a hyperlink when it has this form. @item Status This field is either empty/absent, or contains the word @samp{obsolete}. In the latter case, @command{gnulib-tool} will, unless the option @code{--with-obsolete} is given, omit it when it used as a dependency. It is good practice to also notify the user about an obsolete module. This is done by putting into the @samp{Notice} section (see below) text like @samp{This module is obsolete.} @item Notice This field contains text that @command{gnulib-tool} will show to the user when the module is used. This can be a status indicator like @samp{This module is obsolete.} or additional advice. Do not abuse this field. @item Applicability This field is either empty/absent, or contains the word @samp{all}. It describes to which @code{Makefile.am} the module is applied. By default, a normal module is applied to @code{@var{source_base}/Makefile.am} (normally @code{lib/Makefile.am}), whereas a module ending in @code{-tests} is applied to @code{@var{tests_base}/Makefile.am} (normally @code{tests/Makefile.am}). If this field is @samp{all}, it is applied to both @code{Makefile.am}s. This is useful for modules which provide Makefile.am macros rather than compiled source code. @item Files This field contains a newline separated list of the files that are part of the module. @code{gnulib-tool} copies these files into the package that uses the module. This list is typically ordered by importance: First comes the header file, then the implementation files, then other files. It is possible to have the same file mentioned in multiple modules. That is, if the maintainers of that module agree on the purpose and future of said file. @item Depends-on This field contains a newline separated list of the modules that are required for the proper working of this module. @code{gnulib-tool} includes each required module automatically, unless it is specified with option @code{--avoid} or it is marked as obsolete and the option @code{--with-obsolete} is not given. A test modules @code{foo-tests} implicitly depends on the corresponding non-test module @code{foo}. @code{foo} implicitly depends on @code{foo-tests} if the latter exists and if the option @code{--with-tests} has been given. Tests modules can depend on non-tests modules. Non-tests modules should not depend on tests modules. (Recall that tests modules are built in a separate directory.) Each listed required module may be declared a conditional dependency. This is indicated by placing the condition for the dependency on the same line, enclosed in brackets, after the name of the required module. The condition is a shell expression that is run after the module's @code{configure.ac} statements. For example: @smallexample strtoull [test $ac_cv_func_strtoumax = no] @end smallexample Lines starting with @code{#} are recognized as comments and are ignored. @item configure.ac-early This field contains @file{configure.ac} stuff (Autoconf macro invocations and shell statements) that are logically placed early in the @file{configure.ac} file: right after the @code{AC_PROG_CC} invocation. This section is adequate for statements that modify @code{CPPFLAGS}, as these can affect the results of other Autoconf macros. @item configure.ac This field contains @file{configure.ac} stuff (Autoconf macro invocations and shell statements). It is forbidden to add items to the @code{CPPFLAGS} variable here, other than temporarily, as these could affect the results of other Autoconf macros. We avoid adding items to the @code{LIBS} variable, other than temporarily. Instead, the module can export an Autoconf-substituted variable that contains link options. The user of the module can then decide to which executables to apply which link options. Recall that a package can build executables of different kinds and purposes; having all executables link against all libraries is inappropriate. If the statements in this section grow larger than a couple of lines, we recommend moving them to a @code{.m4} file of their own. @item Makefile.am This field contains @code{Makefile.am} statements. Variables like @code{lib_SOURCES} are transformed to match the name of the library being built in that directory. For example, @code{lib_SOURCES} may become @code{libgnu_a_SOURCES} (for a plain library) or @code{libgnu_la_SOURCES} (for a libtool library). Therefore, the normal way of having an implementation file @code{lib/foo.c} compiled unconditionally is to write @smallexample lib_SOURCES += foo.c @end smallexample @item Include This field contains the preprocessor statements that users of the module need to add to their source code files. Typically it's a single include statement. A shorthand is allowed: You don't need to write the word ``#include'', just the name of the include file in the way it will appear in an include statement. Example: @smallexample "foo.h" @end smallexample @item Link This field contains the set of libraries that are needed when linking libraries or executables that use this module. Often this will be written as a reference to a Makefile variable. Please write them one per line, so that @command{gnulib-tool} can remove duplicates when presenting a summary to the user. Example: @smallexample $(POW_LIBM) $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise @end smallexample When this field is omitted, it defaults to the union of the @code{Link} field of the dependencies. @item License This field specifies the license that governs the source code parts of this module. See @ref{Copyright} for details. Be sure to place, in every source code file, a copyright notice and the appropriate license notice, taken from the @file{etc/license-notices/} directory. @item Maintainer This field specifies the persons who have a definitive say about proposed changes to this module. You don't need to mention email addresses here: they can be inferred from the @code{ChangeLog} file. Please put at least one person here. We don't like unmaintained modules. @end table @node Autoconf macros @section Autoconf macros For a module @code{foo}, an Autoconf macro file @file{m4/foo.m4} is typically created when the Autoconf macro invocations for the module are longer than one or two lines. The name of the main entry point into this Autoconf macro file is typically @code{gl_FOO}. For modules outside Gnulib that are not likely to be moved into Gnulib, please use a prefix specific to your package: @code{gt_} for GNU gettext, @code{cu_} for GNU coreutils, etc. For modules that define a function @code{foo}, the entry point is called @code{gl_FUNC_FOO} instead of @code{gl_FOO}. For modules that provide a header file with multiple functions, say @code{foo.h}, the entry point is called @code{gl_FOO_H} or @code{gl_HEADER_FOO_H}. This convention is useful because sometimes a header and a function name coincide (for example, @code{fcntl} and @code{fcntl.h}). For modules that provide a replacement, it is useful to split the Autoconf macro into two macro definitions: one that detects whether the replacement is needed and requests the replacement by setting a @code{HAVE_FOO} variable to 0 or a @code{REPLACE_FOO} variable to 1 (this is the entry point, say @code{gl_FUNC_FOO}), and one that arranges for the macros needed by the replacement code @code{lib/foo.c} (typically called @code{gl_PREREQ_FOO}). The reason of this separation is @enumerate @item to make it easy to update the Autoconf macros when you have modified the source code file: after changing @code{lib/foo.c}, all you have to review is the @code{Depends-on} section of the module description and the @code{gl_PREREQ_FOO} macro in the Autoconf macro file. @item The Autoconf macros are often large enough that splitting them eases maintenance. @end enumerate @node Using @code{AC_LIBOBJ} @section Making proper use of @code{AC_LIBOBJ} Source files that provide a replacement should be only compiled on the platforms that need this replacement. While it is actually possible to compile a @code{.c} file whose contents is entirely @code{#ifdef}'ed out on the platforms that don't need the replacement, this practice is discouraged because @itemize @bullet @item It makes the build time longer than needed, by invoking the compiler for nothing. @item It produces a @code{.o} file that suggests that a replacement was needed. @item Empty object files produce a linker warning on some platforms: MSVC. @end itemize The typical idiom for invoking @code{AC_LIBOBJ} is thus the following, in the module description: @smallexample if test $HAVE_FOO = 0 || test $REPLACE_FOO = 1; then AC_LIBOBJ([foo]) gl_PREREQ_FOO fi @end smallexample Important: Do not place @code{AC_LIBOBJ} invocations in the Autoconf macros in the @code{m4/} directory. The purpose of the Autoconf macros is to determine what features or bugs the platform has, and to make decisions about which replacements are needed. The purpose of the @code{configure.ac} and @code{Makefile.am} sections of the module descriptions is to arrange for the replacements to be compiled. @strong{Source file names do not belong in the @code{m4/} directory.} When an @code{AC_LIBOBJ} invocation is unconditional, it is simpler to just have the source file compiled through an Automake variable augmentation: In the @code{Makefile.am} section write @smallexample lib_SOURCES += foo.c @end smallexample When a module description contains an @code{AC_LIBOBJ([foo])} invocation, you @strong{must} list the source file @code{lib/foo.c} in the @code{Files} section. This is needed even if the module depends on another module that already lists @code{lib/foo.c} in its @code{Files} section --- because your module might be used among the test modules (in the directory specified through @samp{--tests-base}) and the other module among the main modules (in the directory specified through @samp{--source-base}), and in this situation, the @code{AC_LIBOBJ([foo])} of your module can only be satisfied by having @code{foo.c} be present in the tests source directory as well. @node Unit test modules @section Unit test modules A unit test that is a simple C program usually has a module description as simple as this: @smallexample Files: tests/test-foo.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-foo check_PROGRAMS += test-foo @end smallexample The test program @file{tests/test-foo.c} often has the following structure: @itemize @item First comes the obligatory @samp{#include }. @item Second comes the include of the header file that declares the API being tested. Including it here verifies that said header file is self-contained. @item Then come other includes. In particular, the file @file{macros.h} is often used here. It contains a convenient @code{ASSERT} macro. @end itemize The body of the test, then, contains many @code{ASSERT} invocations. When a test fails, the @code{ASSERT} macro prints the line number of the failing statement, thus giving you, the developer, an idea of which part of the test failed, even when you don't have access to the machine where the test failed and the reporting user cannot run a debugger. Sometimes it is convenient to write part of the test as a shell script. (For example, in areas related to process control or interprocess communication, or when different locales should be tried.) In these cases, the typical module description is like this: @smallexample Files: tests/test-foo.sh tests/test-foo.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-foo.sh TESTS_ENVIRONMENT += FOO_BAR='@@FOO_BAR@@' check_PROGRAMS += test-foo @end smallexample Here, the @code{TESTS_ENVIRONMENT} variable can be used to pass values determined by @code{configure} or by the @code{Makefile} to the shell script, as environment variables. The Autoconf values @code{EXEEXT} and @code{srcdir} are already provided as environment variables, through an initial value of @code{TESTS_ENVIRONMENT} that @code{gnulib-tool} puts in place. Regardless of the specific form of the unit test, the following guidelines should be respected: @itemize @item A test indicates success by exiting with exit code 0. It should normally not produce output in this case. (Output to temporary files that are cleaned up at the end of the test are possible, of course.) @item A test indicates failure by exiting with an exit code different from 0 and 77, typically 1. It is useful to print a message about the failure in this case. The @code{ASSERT} macro already does so. @item A test indicates "skip", that is, that most of its interesting functionality could not be performed, through a return code of 77. A test should also print a message to stdout or stderr about the reason for skipping. For example: @smallexample fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; @end smallexample Such a message helps detecting bugs in the autoconf macros: A simple message @samp{SKIP: test-foo} does not sufficiently catch the attention of the user. @end itemize @node Incompatible changes @section Incompatible changes Incompatible changes to Gnulib modules should be mentioned in Gnulib's @file{NEWS} file. Incompatible changes here mean that existing source code may not compile or work any more. We don't mean changes in the binary interface (ABI), since @enumerate @item Gnulib code is used in source-code form. @item The user who distributes libraries that contain Gnulib code is supposed to bump the version number in the way described in the Libtool documentation before every release. @end enumerate @node Extending Gnulib @chapter Extending Gnulib Gnulib modules are intended to be suitable for widespread use. Most problems with Gnulib can and should be fixed in a generic way, so that all of Gnulib's users can benefit from the change. But occasionally a problem arises that is difficult or undesirable to fix generically, or a project that uses Gnulib may need to work around an issue before the Gnulib maintainers commit a final fix. Maintainers may also want to add their own pools of modules to projects as Gnulib ``staging areas.'' The obvious way to make local changes to Gnulib modules is to use @command{gnulib-tool} to check out pristine modules, then to modify the results in-place. This works well enough for short-lived experiments. It is harder to keep modified versions of Gnulib modules for a long time, even though Git (or another distributed version control systems) can help out a lot with this during the development process. Git, however, doesn't address the distribution issue. When a package ``foobar'' needs a modified version of, say, @file{stdint.in.h}, it either has to put a comment into @file{foobar/autogen.sh} saying ``Attention! This doesn't work with a pristine Gnulib, you need this and that patch after checking out Gnulib,'' or it has to use the @samp{--avoid=stdint} option and provide the modified @code{stdint} module in a different directory. The @option{--local-dir} option to @command{gnulib-tool} solves this problem. It allows the package to override or augment Gnulib. This means: @itemize @bullet @item You can store files that are to override Gnulib files or modules. @item You can store context diffs to be applied to Gnulib files. @item You can add modules of your own, that are not (yet) in Gnulib. @item You can also add unstructured amounts of code to the library, by grouping the non-Gnulib files of the library in a single kitchen-sink ``module.'' (This kind of kitchen-sink module is not needed when you use the @command{gnulib-tool} option @option{--makefile-name}.) @end itemize In a release tarball, you can distribute the contents of this @option{--local-dir} directory that will be combinable with newer versions of Gnulib, barring incompatible changes to Gnulib. If the @option{--local-dir=@var{directory}} option is specified, then @command{gnulib-tool} looks in @file{@var{directory}} whenever it reads a file from the Gnulib directory. Suppose @command{gnulib-tool} is looking for @var{file}. Then: @itemize @bullet @item If @file{@var{directory}/@var{file}} exists, then @command{gnulib-tool} uses it instead of the file included in Gnulib. @item Otherwise, if @file{@var{directory}/@var{file}.diff} exists, then @command{gnulib-tool} uses the file from Gnulib after applying the diff using the @command{patch} program. @item Otherwise, @command{gnulib-tool} uses the file included in Gnulib. @end itemize You can specify the @option{--local-dir} multiple times. In this case, the first specified directory has the highest precedence. That is, a @file{@var{file}} found in one directory will shadow any @file{@var{file}} and @file{@var{file}.diff} in the later directories and in the Gnulib directory. And a file @file{@var{file}.diff} found in one directory will be applied on top of the combination of @file{@var{file}} and @file{@var{file}.diff} files found in the later directories and in the Gnulib directory. Please make wise use of this option. It also allows you to easily hold back modifications you make to Gnulib macros in cases it may be better to share them. @node Miscellaneous Notes @chapter Miscellaneous Notes @menu * Out of memory handling:: * Obsolete modules:: * Extra tests modules:: * Modules that modify the way other modules work:: * A C++ namespace for gnulib:: A different way of using Gnulib in C++ * License Texinfo sources:: * Building gnulib:: @end menu @include out-of-memory.texi @include obsolete.texi @include extra-tests.texi @include transversal.texi @include namespace.texi @include licenses-texi.texi @include build-automation.texi @node POSIX Substitutes Library @chapter Building the ISO C and POSIX Substitutes This section shows a radically different way to use Gnulib. You can extract the ISO C / POSIX substitutes part of gnulib by running the command @smallexample gnulib-tool --create-testdir --source-base=lib \ --dir=/tmp/posixlib `posix-modules` @end smallexample @noindent The command @samp{posix-modules} is found in the same directory as @code{gnulib-tool}. The resulting directory can be built on a particular platform, independently of the program being ported. Then you can configure and build any program, by setting @code{CPPFLAGS} and @code{LDFLAGS} at configure time accordingly: set @code{CPPFLAGS="-I.../posixlib/lib"}, plus any essential type definitions and flags that you find in @code{.../posixlib/config.h}, and set @code{LDFLAGS=".../posixlib/lib/libgnu.a"}. This way of using Gnulib is useful when you don't want to modify the program's source code, or when the program uses a mix between C and C++ sources (requiring separate builds of the @code{posixlib} for the C compiler and for the C++ compiler). @node Header File Substitutes @chapter ISO C and POSIX Header File Substitutes This chapter describes which header files specified by ISO C or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. @nosuchmodulenote header file @menu * aio.h:: * arpa/inet.h:: * assert.h:: * complex.h:: * cpio.h:: * ctype.h:: * dirent.h:: * dlfcn.h:: * errno.h:: * fcntl.h:: * fenv.h:: * float.h:: * fmtmsg.h:: * fnmatch.h:: * ftw.h:: * glob.h:: * grp.h:: * iconv.h:: * inttypes.h:: * iso646.h:: * langinfo.h:: * libgen.h:: * limits.h:: * locale.h:: * math.h:: * monetary.h:: * mqueue.h:: * ndbm.h:: * net/if.h:: * netdb.h:: * netinet/in.h:: * netinet/tcp.h:: * nl_types.h:: * poll.h:: * pthread.h:: * pwd.h:: * regex.h:: * sched.h:: * search.h:: * semaphore.h:: * setjmp.h:: * signal.h:: * spawn.h:: * stdalign.h:: * stdarg.h:: * stdbool.h:: * stddef.h:: * stdint.h:: * stdio.h:: * stdlib.h:: * stdnoreturn.h:: * string.h:: * strings.h:: * stropts.h:: * sys/ipc.h:: * sys/mman.h:: * sys/msg.h:: * sys/resource.h:: * sys/select.h:: * sys/sem.h:: * sys/shm.h:: * sys/socket.h:: * sys/stat.h:: * sys/statvfs.h:: * sys/time.h:: * sys/timeb.h:: * sys/times.h:: * sys/types.h:: * sys/uio.h:: * sys/un.h:: * sys/utsname.h:: * sys/wait.h:: * syslog.h:: * tar.h:: * termios.h:: * tgmath.h:: * threads.h:: * time.h:: * trace.h:: * uchar.h:: * ucontext.h:: * ulimit.h:: * unistd.h:: * utime.h:: * utmpx.h:: * wchar.h:: * wctype.h:: * wordexp.h:: @end menu @include posix-headers/aio.texi @include posix-headers/arpa_inet.texi @include posix-headers/assert.texi @include posix-headers/complex.texi @include posix-headers/cpio.texi @include posix-headers/ctype.texi @include posix-headers/dirent.texi @include posix-headers/dlfcn.texi @include posix-headers/errno.texi @include posix-headers/fcntl.texi @include posix-headers/fenv.texi @include posix-headers/float.texi @include posix-headers/fmtmsg.texi @include posix-headers/fnmatch.texi @include posix-headers/ftw.texi @include posix-headers/glob.texi @include posix-headers/grp.texi @include posix-headers/iconv.texi @include posix-headers/inttypes.texi @include posix-headers/iso646.texi @include posix-headers/langinfo.texi @include posix-headers/libgen.texi @include posix-headers/limits.texi @include posix-headers/locale.texi @include posix-headers/math.texi @include posix-headers/monetary.texi @include posix-headers/mqueue.texi @include posix-headers/ndbm.texi @include posix-headers/net_if.texi @include posix-headers/netdb.texi @include posix-headers/netinet_in.texi @include posix-headers/netinet_tcp.texi @include posix-headers/nl_types.texi @include posix-headers/poll.texi @include posix-headers/pthread.texi @include posix-headers/pwd.texi @include posix-headers/regex.texi @include posix-headers/sched.texi @include posix-headers/search.texi @include posix-headers/semaphore.texi @include posix-headers/setjmp.texi @include posix-headers/signal.texi @include posix-headers/spawn.texi @include posix-headers/stdalign.texi @include posix-headers/stdarg.texi @include posix-headers/stdbool.texi @include posix-headers/stddef.texi @include posix-headers/stdint.texi @include posix-headers/stdio.texi @include posix-headers/stdlib.texi @include posix-headers/stdnoreturn.texi @include posix-headers/string.texi @include posix-headers/strings.texi @include posix-headers/stropts.texi @include posix-headers/sys_ipc.texi @include posix-headers/sys_mman.texi @include posix-headers/sys_msg.texi @include posix-headers/sys_resource.texi @include posix-headers/sys_select.texi @include posix-headers/sys_sem.texi @include posix-headers/sys_shm.texi @include posix-headers/sys_socket.texi @include posix-headers/sys_stat.texi @include posix-headers/sys_statvfs.texi @include posix-headers/sys_time.texi @include posix-headers/sys_timeb.texi @include posix-headers/sys_times.texi @include posix-headers/sys_types.texi @include posix-headers/sys_uio.texi @include posix-headers/sys_un.texi @include posix-headers/sys_utsname.texi @include posix-headers/sys_wait.texi @include posix-headers/syslog.texi @include posix-headers/tar.texi @include posix-headers/termios.texi @include posix-headers/tgmath.texi @include posix-headers/threads.texi @include posix-headers/time.texi @include posix-headers/trace.texi @include posix-headers/uchar.texi @include posix-headers/ucontext.texi @include posix-headers/ulimit.texi @include posix-headers/unistd.texi @include posix-headers/utime.texi @include posix-headers/utmpx.texi @include posix-headers/wchar.texi @include posix-headers/wctype.texi @include posix-headers/wordexp.texi @node Function Substitutes @chapter ISO C and POSIX Function Substitutes This chapter describes which functions and function-like macros specified by ISO C (including ISO TS 18661-1) or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. @nosuchmodulenote function @menu * FD_CLR:: * FD_ISSET:: * FD_SET:: * FD_ZERO:: * _Exit:: * _exit:: * _longjmp:: * _setjmp:: * _tolower:: * _toupper:: * a64l:: * abort:: * abs:: * accept:: * access:: * acos:: * acosf:: * acosh:: * acoshf:: * acoshl:: * acosl:: * aio_cancel:: * aio_error:: * aio_fsync:: * aio_read:: * aio_return:: * aio_suspend:: * aio_write:: * alarm:: * aligned_alloc:: * alphasort:: * asctime:: * asctime_r:: * asin:: * asinf:: * asinh:: * asinhf:: * asinhl:: * asinl:: * assert:: * atan:: * atan2:: * atan2f:: * atan2l:: * atanf:: * atanh:: * atanhf:: * atanhl:: * atanl:: * atexit:: * atof:: * atoi:: * atol:: * atoll:: * basename:: * bind:: * bsearch:: * btowc:: * c16rtomb:: * c32rtomb:: * cabs:: * cabsf:: * cabsl:: * cacos:: * cacosf:: * cacosh:: * cacoshf:: * cacoshl:: * cacosl:: * calloc:: * call_once:: * canonicalize:: * canonicalizef:: * canonicalizel:: * carg:: * cargf:: * cargl:: * casin:: * casinf:: * casinh:: * casinhf:: * casinhl:: * casinl:: * catan:: * catanf:: * catanh:: * catanhf:: * catanhl:: * catanl:: * catclose:: * catgets:: * catopen:: * cbrt:: * cbrtf:: * cbrtl:: * ccos:: * ccosf:: * ccosh:: * ccoshf:: * ccoshl:: * ccosl:: * ceil:: * ceilf:: * ceill:: * cexp:: * cexpf:: * cexpl:: * cfgetispeed:: * cfgetospeed:: * cfsetispeed:: * cfsetospeed:: * chdir:: * chmod:: * chown:: * cimag:: * cimagf:: * cimagl:: * clearerr:: * clock:: * clock_getcpuclockid:: * clock_getres:: * clock_gettime:: * clock_nanosleep:: * clock_settime:: * clog:: * clogf:: * clogl:: * close:: * closedir:: * closelog:: * cnd_broadcast:: * cnd_destroy:: * cnd_init:: * cnd_signal:: * cnd_timedwait:: * cnd_wait:: * confstr:: * conj:: * conjf:: * conjl:: * connect:: * copysign:: * copysignf:: * copysignl:: * cos:: * cosf:: * cosh:: * coshf:: * coshl:: * cosl:: * cpow:: * cpowf:: * cpowl:: * cproj:: * cprojf:: * cprojl:: * creal:: * crealf:: * creall:: * creat:: * crypt:: * csin:: * csinf:: * csinh:: * csinhf:: * csinhl:: * csinl:: * csqrt:: * csqrtf:: * csqrtl:: * ctan:: * ctanf:: * ctanh:: * ctanhf:: * ctanhl:: * ctanl:: * ctermid:: * ctime:: * ctime_r:: * daddl:: * daylight:: * dbm_clearerr:: * dbm_close:: * dbm_delete:: * dbm_error:: * dbm_fetch:: * dbm_firstkey:: * dbm_nextkey:: * dbm_open:: * dbm_store:: * ddivl:: * difftime:: * dirfd:: * dirname:: * div:: * dlclose:: * dlerror:: * dlopen:: * dlsym:: * dmull:: * dprintf:: * drand48:: * dsubl:: * dup:: * dup2:: * duplocale:: * encrypt:: * endgrent:: * endhostent:: * endnetent:: * endprotoent:: * endpwent:: * endservent:: * endutxent:: * environ:: * erand48:: * erf:: * erfc:: * erfcf:: * erfcl:: * erff:: * erfl:: * errno:: * execl:: * execle:: * execlp:: * execv:: * execve:: * execvp:: * exit:: * exp:: * exp2:: * exp2f:: * exp2l:: * expf:: * expl:: * expm1:: * expm1f:: * expm1l:: * fabs:: * fabsf:: * fabsl:: * faccessat:: * fadd:: * faddl:: * fattach:: * fchdir:: * fchmod:: * fchmodat:: * fchown:: * fchownat:: * fclose:: * fcntl:: * fdatasync:: * fdetach:: * fdim:: * fdimf:: * fdiml:: * fdiv:: * fdivl:: * fdopen:: * fdopendir:: * feclearexcept:: * fegetenv:: * fegetexceptflag:: * fegetmode:: * fegetround:: * feholdexcept:: * feof:: * feraiseexcept:: * ferror:: * fesetenv:: * fesetexcept:: * fesetexceptflag:: * fesetmode:: * fesetround:: * fetestexcept:: * fetestexceptflag:: * feupdateenv:: * fexecve:: * fflush:: * ffs:: * fgetc:: * fgetpos:: * fgets:: * fgetwc:: * fgetws:: * fileno:: * flockfile:: * floor:: * floorf:: * floorl:: * fma:: * fmaf:: * fmal:: * fmax:: * fmaxf:: * fmaxl:: * fmaxmag:: * fmaxmagf:: * fmaxmagl:: * fmemopen:: * fmin:: * fminf:: * fminl:: * fminmag:: * fminmagf:: * fminmagl:: * fmod:: * fmodf:: * fmodl:: * fmtmsg:: * fmul:: * fmull:: * fnmatch:: * fopen:: * fork:: * fpathconf:: * fpclassify:: * fprintf:: * fputc:: * fputs:: * fputwc:: * fputws:: * fread:: * free:: * freeaddrinfo:: * freelocale:: * freopen:: * frexp:: * frexpf:: * frexpl:: * fromfp:: * fromfpf:: * fromfpl:: * fromfpx:: * fromfpxf:: * fromfpxl:: * fscanf:: * fseek:: * fseeko:: * fsetpos:: * fstat:: * fstatat:: * fstatvfs:: * fsub:: * fsubl:: * fsync:: * ftell:: * ftello:: * ftok:: * ftruncate:: * ftrylockfile:: * ftw:: * funlockfile:: * futimens:: * fwide:: * fwprintf:: * fwrite:: * fwscanf:: * gai_strerror:: * getaddrinfo:: * getc:: * getc_unlocked:: * getchar:: * getchar_unlocked:: * getcwd:: * getdate:: * getdate_err:: * getdelim:: * getegid:: * getenv:: * geteuid:: * getgid:: * getgrent:: * getgrgid:: * getgrgid_r:: * getgrnam:: * getgrnam_r:: * getgroups:: * gethostent:: * gethostid:: * gethostname:: * getitimer:: * getline:: * getlogin:: * getlogin_r:: * getmsg:: * getnameinfo:: * getnetbyaddr:: * getnetbyname:: * getnetent:: * getopt:: * getpayload:: * getpayloadf:: * getpayloadl:: * getpeername:: * getpgid:: * getpgrp:: * getpid:: * getpmsg:: * getppid:: * getpriority:: * getprotobyname:: * getprotobynumber:: * getprotoent:: * getpwent:: * getpwnam:: * getpwnam_r:: * getpwuid:: * getpwuid_r:: * getrlimit:: * getrusage:: * gets:: * getservbyname:: * getservbyport:: * getservent:: * getsid:: * getsockname:: * getsockopt:: * getsubopt:: * gettimeofday:: * getuid:: * getutxent:: * getutxid:: * getutxline:: * getwc:: * getwchar:: * glob:: * globfree:: * gmtime:: * gmtime_r:: * grantpt:: * hcreate:: * hdestroy:: * hsearch:: * htonl:: * htons:: * hypot:: * hypotf:: * hypotl:: * iconv:: * iconv_close:: * iconv_open:: * if_freenameindex:: * if_indextoname:: * if_nameindex:: * if_nametoindex:: * ilogb:: * ilogbf:: * ilogbl:: * imaxabs:: * imaxdiv:: * inet_addr:: * inet_ntoa:: * inet_ntop:: * inet_pton:: * initstate:: * insque:: * ioctl:: * isalnum:: * isalnum_l:: * isalpha:: * isalpha_l:: * isascii:: * isastream:: * isatty:: * isblank:: * isblank_l:: * iscntrl:: * iscntrl_l:: * isdigit:: * isdigit_l:: * isfinite:: * isgraph:: * isgraph_l:: * isgreater:: * isgreaterequal:: * isinf:: * isless:: * islessequal:: * islessgreater:: * islower:: * islower_l:: * isnan:: * isnormal:: * isprint:: * isprint_l:: * ispunct:: * ispunct_l:: * isspace:: * isspace_l:: * isunordered:: * isupper:: * isupper_l:: * iswalnum:: * iswalnum_l:: * iswalpha:: * iswalpha_l:: * iswblank:: * iswblank_l:: * iswcntrl:: * iswcntrl_l:: * iswctype:: * iswctype_l:: * iswdigit:: * iswdigit_l:: * iswgraph:: * iswgraph_l:: * iswlower:: * iswlower_l:: * iswprint:: * iswprint_l:: * iswpunct:: * iswpunct_l:: * iswspace:: * iswspace_l:: * iswupper:: * iswupper_l:: * iswxdigit:: * iswxdigit_l:: * isxdigit:: * isxdigit_l:: * j0:: * j1:: * jn:: * jrand48:: * kill:: * killpg:: * l64a:: * labs:: * lchown:: * lcong48:: * ldexp:: * ldexpf:: * ldexpl:: * ldiv:: * lfind:: * lgamma:: * lgammaf:: * lgammal:: * link:: * linkat:: * lio_listio:: * listen:: * llabs:: * lldiv:: * llogb:: * llogbf:: * llogbl:: * llrint:: * llrintf:: * llrintl:: * llround:: * llroundf:: * llroundl:: * localeconv:: * localtime:: * localtime_r:: * lockf:: * log:: * log10:: * log10f:: * log10l:: * log1p:: * log1pf:: * log1pl:: * log2:: * log2f:: * log2l:: * logb:: * logbf:: * logbl:: * logf:: * logl:: * longjmp:: * lrand48:: * lrint:: * lrintf:: * lrintl:: * lround:: * lroundf:: * lroundl:: * lsearch:: * lseek:: * lstat:: * malloc:: * mblen:: * mbrlen:: * mbrtoc16:: * mbrtoc32:: * mbrtowc:: * mbsinit:: * mbsnrtowcs:: * mbsrtowcs:: * mbstowcs:: * mbtowc:: * memccpy:: * memchr:: * memcmp:: * memcpy:: * memmove:: * memset:: * mkdir:: * mkdirat:: * mkdtemp:: * mkfifo:: * mkfifoat:: * mknod:: * mknodat:: * mkstemp:: * mktime:: * mlock:: * mlockall:: * mmap:: * modf:: * modff:: * modfl:: * mprotect:: * mq_close:: * mq_getattr:: * mq_notify:: * mq_open:: * mq_receive:: * mq_send:: * mq_setattr:: * mq_timedreceive:: * mq_timedsend:: * mq_unlink:: * mrand48:: * msgctl:: * msgget:: * msgrcv:: * msgsnd:: * msync:: * mtx_destroy:: * mtx_init:: * mtx_lock:: * mtx_timedlock:: * mtx_trylock:: * mtx_unlock:: * munlock:: * munlockall:: * munmap:: * nan:: * nanf:: * nanl:: * nanosleep:: * nearbyint:: * nearbyintf:: * nearbyintl:: * newlocale:: * nextafter:: * nextafterf:: * nextafterl:: * nextdown:: * nextdownf:: * nextdownl:: * nexttoward:: * nexttowardf:: * nexttowardl:: * nextup:: * nextupf:: * nextupl:: * nftw:: * nice:: * nl_langinfo:: * nl_langinfo_l:: * nrand48:: * ntohl:: * ntohs:: * open:: * openat:: * opendir:: * openlog:: * open_memstream:: * open_wmemstream:: * optarg:: * opterr:: * optind:: * optopt:: * pathconf:: * pause:: * pclose:: * perror:: * pipe:: * poll:: * popen:: * posix_fadvise:: * posix_fallocate:: * posix_madvise:: * posix_mem_offset:: * posix_memalign:: * posix_openpt:: * posix_spawn:: * posix_spawn_file_actions_addclose:: * posix_spawn_file_actions_adddup2:: * posix_spawn_file_actions_addopen:: * posix_spawn_file_actions_destroy:: * posix_spawn_file_actions_init:: * posix_spawnattr_destroy:: * posix_spawnattr_getflags:: * posix_spawnattr_getpgroup:: * posix_spawnattr_getschedparam:: * posix_spawnattr_getschedpolicy:: * posix_spawnattr_getsigdefault:: * posix_spawnattr_getsigmask:: * posix_spawnattr_init:: * posix_spawnattr_setflags:: * posix_spawnattr_setpgroup:: * posix_spawnattr_setschedparam:: * posix_spawnattr_setschedpolicy:: * posix_spawnattr_setsigdefault:: * posix_spawnattr_setsigmask:: * posix_spawnp:: * posix_trace_attr_destroy:: * posix_trace_attr_getclockres:: * posix_trace_attr_getcreatetime:: * posix_trace_attr_getgenversion:: * posix_trace_attr_getinherited:: * posix_trace_attr_getlogfullpolicy:: * posix_trace_attr_getlogsize:: * posix_trace_attr_getmaxdatasize:: * posix_trace_attr_getmaxsystemeventsize:: * posix_trace_attr_getmaxusereventsize:: * posix_trace_attr_getname:: * posix_trace_attr_getstreamfullpolicy:: * posix_trace_attr_getstreamsize:: * posix_trace_attr_init:: * posix_trace_attr_setinherited:: * posix_trace_attr_setlogfullpolicy:: * posix_trace_attr_setlogsize:: * posix_trace_attr_setmaxdatasize:: * posix_trace_attr_setname:: * posix_trace_attr_setstreamfullpolicy:: * posix_trace_attr_setstreamsize:: * posix_trace_clear:: * posix_trace_close:: * posix_trace_create:: * posix_trace_create_withlog:: * posix_trace_event:: * posix_trace_eventid_equal:: * posix_trace_eventid_get_name:: * posix_trace_eventid_open:: * posix_trace_eventset_add:: * posix_trace_eventset_del:: * posix_trace_eventset_empty:: * posix_trace_eventset_fill:: * posix_trace_eventset_ismember:: * posix_trace_eventtypelist_getnext_id:: * posix_trace_eventtypelist_rewind:: * posix_trace_flush:: * posix_trace_get_attr:: * posix_trace_get_filter:: * posix_trace_get_status:: * posix_trace_getnext_event:: * posix_trace_open:: * posix_trace_rewind:: * posix_trace_set_filter:: * posix_trace_shutdown:: * posix_trace_start:: * posix_trace_stop:: * posix_trace_timedgetnext_event:: * posix_trace_trid_eventid_open:: * posix_trace_trygetnext_event:: * posix_typed_mem_get_info:: * posix_typed_mem_open:: * pow:: * powf:: * powl:: * pread:: * printf:: * pselect:: * psiginfo:: * psignal:: * pthread_atfork:: * pthread_attr_destroy:: * pthread_attr_getdetachstate:: * pthread_attr_getguardsize:: * pthread_attr_getinheritsched:: * pthread_attr_getschedparam:: * pthread_attr_getschedpolicy:: * pthread_attr_getscope:: * pthread_attr_getstack:: * pthread_attr_getstacksize:: * pthread_attr_init:: * pthread_attr_setdetachstate:: * pthread_attr_setguardsize:: * pthread_attr_setinheritsched:: * pthread_attr_setschedparam:: * pthread_attr_setschedpolicy:: * pthread_attr_setscope:: * pthread_attr_setstack:: * pthread_attr_setstacksize:: * pthread_barrier_destroy:: * pthread_barrier_init:: * pthread_barrier_wait:: * pthread_barrierattr_destroy:: * pthread_barrierattr_getpshared:: * pthread_barrierattr_init:: * pthread_barrierattr_setpshared:: * pthread_cancel:: * pthread_cleanup_pop:: * pthread_cleanup_push:: * pthread_cond_broadcast:: * pthread_cond_destroy:: * pthread_cond_init:: * pthread_cond_signal:: * pthread_cond_timedwait:: * pthread_cond_wait:: * pthread_condattr_destroy:: * pthread_condattr_getclock:: * pthread_condattr_getpshared:: * pthread_condattr_init:: * pthread_condattr_setclock:: * pthread_condattr_setpshared:: * pthread_create:: * pthread_detach:: * pthread_equal:: * pthread_exit:: * pthread_getconcurrency:: * pthread_getcpuclockid:: * pthread_getschedparam:: * pthread_getspecific:: * pthread_join:: * pthread_key_create:: * pthread_key_delete:: * pthread_kill:: * pthread_mutex_consistent:: * pthread_mutex_destroy:: * pthread_mutex_getprioceiling:: * pthread_mutex_init:: * pthread_mutex_lock:: * pthread_mutex_setprioceiling:: * pthread_mutex_timedlock:: * pthread_mutex_trylock:: * pthread_mutex_unlock:: * pthread_mutexattr_destroy:: * pthread_mutexattr_getprioceiling:: * pthread_mutexattr_getprotocol:: * pthread_mutexattr_getpshared:: * pthread_mutexattr_getrobust:: * pthread_mutexattr_gettype:: * pthread_mutexattr_init:: * pthread_mutexattr_setprioceiling:: * pthread_mutexattr_setprotocol:: * pthread_mutexattr_setpshared:: * pthread_mutexattr_setrobust:: * pthread_mutexattr_settype:: * pthread_once:: * pthread_rwlock_destroy:: * pthread_rwlock_init:: * pthread_rwlock_rdlock:: * pthread_rwlock_timedrdlock:: * pthread_rwlock_timedwrlock:: * pthread_rwlock_tryrdlock:: * pthread_rwlock_trywrlock:: * pthread_rwlock_unlock:: * pthread_rwlock_wrlock:: * pthread_rwlockattr_destroy:: * pthread_rwlockattr_getpshared:: * pthread_rwlockattr_init:: * pthread_rwlockattr_setpshared:: * pthread_self:: * pthread_setcancelstate:: * pthread_setcanceltype:: * pthread_setconcurrency:: * pthread_setschedparam:: * pthread_setschedprio:: * pthread_setspecific:: * pthread_sigmask:: * pthread_spin_destroy:: * pthread_spin_init:: * pthread_spin_lock:: * pthread_spin_trylock:: * pthread_spin_unlock:: * pthread_testcancel:: * ptsname:: * putc:: * putc_unlocked:: * putchar:: * putchar_unlocked:: * putenv:: * putmsg:: * putpmsg:: * puts:: * pututxline:: * putwc:: * putwchar:: * pwrite:: * qsort:: * quick_exit:: * raise:: * rand:: * rand_r:: * random:: * read:: * readdir:: * readdir_r:: * readlink:: * readlinkat:: * readv:: * realloc:: * realpath:: * recv:: * recvfrom:: * recvmsg:: * regcomp:: * regerror:: * regexec:: * regfree:: * remainder:: * remainderf:: * remainderl:: * remove:: * remque:: * remquo:: * remquof:: * remquol:: * rename:: * renameat:: * rewind:: * rewinddir:: * rint:: * rintf:: * rintl:: * rmdir:: * round:: * roundeven:: * roundevenf:: * roundevenl:: * roundf:: * roundl:: * scalbln:: * scalblnf:: * scalblnl:: * scalbn:: * scalbnf:: * scalbnl:: * scandir:: * scanf:: * sched_get_priority_max:: * sched_get_priority_min:: * sched_getparam:: * sched_getscheduler:: * sched_rr_get_interval:: * sched_setparam:: * sched_setscheduler:: * sched_yield:: * seed48:: * seekdir:: * select:: * sem_close:: * sem_destroy:: * sem_getvalue:: * sem_init:: * sem_open:: * sem_post:: * sem_timedwait:: * sem_trywait:: * sem_unlink:: * sem_wait:: * semctl:: * semget:: * semop:: * send:: * sendmsg:: * sendto:: * setbuf:: * setegid:: * setenv:: * seteuid:: * setgid:: * setgrent:: * sethostent:: * setitimer:: * setjmp:: * setkey:: * setlocale:: * setlogmask:: * setnetent:: * setpayload:: * setpayloadf:: * setpayloadl:: * setpayloadsig:: * setpayloadsigf:: * setpayloadsigl:: * setpgid:: * setpgrp:: * setpriority:: * setprotoent:: * setpwent:: * setregid:: * setreuid:: * setrlimit:: * setservent:: * setsid:: * setsockopt:: * setstate:: * setuid:: * setutxent:: * setvbuf:: * shm_open:: * shm_unlink:: * shmat:: * shmctl:: * shmdt:: * shmget:: * shutdown:: * sigaction:: * sigaddset:: * sigaltstack:: * sigdelset:: * sigemptyset:: * sigfillset:: * sighold:: * sigignore:: * siginterrupt:: * sigismember:: * siglongjmp:: * signal:: * signbit:: * signgam:: * sigpause:: * sigpending:: * sigprocmask:: * sigqueue:: * sigrelse:: * sigset:: * sigsetjmp:: * sigsuspend:: * sigtimedwait:: * sigwait:: * sigwaitinfo:: * sin:: * sinf:: * sinh:: * sinhf:: * sinhl:: * sinl:: * sleep:: * snprintf:: * sockatmark:: * socket:: * socketpair:: * sprintf:: * sqrt:: * sqrtf:: * sqrtl:: * srand:: * srand48:: * srandom:: * sscanf:: * stat:: * statvfs:: * stderr:: * stdin:: * stdout:: * stpcpy:: * stpncpy:: * strcasecmp:: * strcasecmp_l:: * strcat:: * strchr:: * strcmp:: * strcoll:: * strcoll_l:: * strcpy:: * strcspn:: * strdup:: * strerror:: * strerror_l:: * strerror_r:: * strfmon:: * strfmon_l:: * strfromd:: * strfromf:: * strfroml:: * strftime:: * strftime_l:: * strlen:: * strncasecmp:: * strncasecmp_l:: * strncat:: * strncmp:: * strncpy:: * strndup:: * strnlen:: * strpbrk:: * strptime:: * strrchr:: * strsignal:: * strspn:: * strstr:: * strtod:: * strtof:: * strtoimax:: * strtok:: * strtok_r:: * strtol:: * strtold:: * strtoll:: * strtoul:: * strtoull:: * strtoumax:: * strxfrm:: * strxfrm_l:: * swab:: * swprintf:: * swscanf:: * symlink:: * symlinkat:: * sync:: * sysconf:: * syslog:: * system:: * tan:: * tanf:: * tanh:: * tanhf:: * tanhl:: * tanl:: * tcdrain:: * tcflow:: * tcflush:: * tcgetattr:: * tcgetpgrp:: * tcgetsid:: * tcsendbreak:: * tcsetattr:: * tcsetpgrp:: * tdelete:: * telldir:: * tempnam:: * tfind:: * tgamma:: * tgammaf:: * tgammal:: * thrd_create:: * thrd_current:: * thrd_detach:: * thrd_equal:: * thrd_exit:: * thrd_join:: * thrd_sleep:: * thrd_yield:: * time:: * timer_create:: * timer_delete:: * timer_getoverrun:: * timer_gettime:: * timer_settime:: * times:: * timespec_getres:: * timezone:: * tmpfile:: * tmpnam:: * toascii:: * tolower:: * tolower_l:: * totalorder:: * totalorderf:: * totalorderl:: * totalordermag:: * totalordermagf:: * totalordermagl:: * toupper:: * toupper_l:: * towctrans:: * towctrans_l:: * towlower:: * towlower_l:: * towupper:: * towupper_l:: * trunc:: * truncate:: * truncf:: * truncl:: * tsearch:: * tss_create:: * tss_delete:: * tss_get:: * tss_set:: * ttyname:: * ttyname_r:: * twalk:: * tzname:: * tzset:: * ufromfp:: * ufromfpf:: * ufromfpl:: * ufromfpx:: * ufromfpxf:: * ufromfpxl:: * ulimit:: * umask:: * uname:: * ungetc:: * ungetwc:: * unlink:: * unlinkat:: * unlockpt:: * unsetenv:: * uselocale:: * utime:: * utimensat:: * utimes:: * va_arg:: * va_copy:: * va_end:: * va_start:: * vdprintf:: * vfprintf:: * vfscanf:: * vfwprintf:: * vfwscanf:: * vprintf:: * vscanf:: * vsnprintf:: * vsprintf:: * vsscanf:: * vswprintf:: * vswscanf:: * vwprintf:: * vwscanf:: * wait:: * waitid:: * waitpid:: * wcpcpy:: * wcpncpy:: * wcrtomb:: * wcscasecmp:: * wcscasecmp_l:: * wcscat:: * wcschr:: * wcscmp:: * wcscoll:: * wcscoll_l:: * wcscpy:: * wcscspn:: * wcsdup:: * wcsftime:: * wcslen:: * wcsncasecmp:: * wcsncasecmp_l:: * wcsncat:: * wcsncmp:: * wcsncpy:: * wcsnlen:: * wcsnrtombs:: * wcspbrk:: * wcsrchr:: * wcsrtombs:: * wcsspn:: * wcsstr:: * wcstod:: * wcstof:: * wcstoimax:: * wcstok:: * wcstol:: * wcstold:: * wcstoll:: * wcstombs:: * wcstoul:: * wcstoull:: * wcstoumax:: * wcswidth:: * wcsxfrm:: * wcsxfrm_l:: * wctob:: * wctomb:: * wctrans:: * wctrans_l:: * wctype:: * wctype_l:: * wcwidth:: * wmemchr:: * wmemcmp:: * wmemcpy:: * wmemmove:: * wmemset:: * wordexp:: * wordfree:: * wprintf:: * write:: * writev:: * wscanf:: * y0:: * y1:: * yn:: @end menu @include posix-functions/FD_CLR.texi @include posix-functions/FD_ISSET.texi @include posix-functions/FD_SET.texi @include posix-functions/FD_ZERO.texi @include posix-functions/_Exit_C99.texi @include posix-functions/_exit.texi @include posix-functions/_longjmp.texi @include posix-functions/_setjmp.texi @include posix-functions/_tolower.texi @include posix-functions/_toupper.texi @include posix-functions/a64l.texi @include posix-functions/abort.texi @include posix-functions/abs.texi @include posix-functions/accept.texi @include posix-functions/access.texi @include posix-functions/acos.texi @include posix-functions/acosf.texi @include posix-functions/acosh.texi @include posix-functions/acoshf.texi @include posix-functions/acoshl.texi @include posix-functions/acosl.texi @include posix-functions/aio_cancel.texi @include posix-functions/aio_error.texi @include posix-functions/aio_fsync.texi @include posix-functions/aio_read.texi @include posix-functions/aio_return.texi @include posix-functions/aio_suspend.texi @include posix-functions/aio_write.texi @include posix-functions/alarm.texi @include posix-functions/aligned_alloc.texi @include posix-functions/alphasort.texi @include posix-functions/asctime.texi @include posix-functions/asctime_r.texi @include posix-functions/asin.texi @include posix-functions/asinf.texi @include posix-functions/asinh.texi @include posix-functions/asinhf.texi @include posix-functions/asinhl.texi @include posix-functions/asinl.texi @include posix-functions/assert.texi @include posix-functions/atan.texi @include posix-functions/atan2.texi @include posix-functions/atan2f.texi @include posix-functions/atan2l.texi @include posix-functions/atanf.texi @include posix-functions/atanh.texi @include posix-functions/atanhf.texi @include posix-functions/atanhl.texi @include posix-functions/atanl.texi @include posix-functions/atexit.texi @include posix-functions/atof.texi @include posix-functions/atoi.texi @include posix-functions/atol.texi @include posix-functions/atoll.texi @include posix-functions/basename.texi @include posix-functions/bind.texi @include posix-functions/bsearch.texi @include posix-functions/btowc.texi @include posix-functions/c16rtomb.texi @include posix-functions/c32rtomb.texi @include posix-functions/cabs.texi @include posix-functions/cabsf.texi @include posix-functions/cabsl.texi @include posix-functions/cacos.texi @include posix-functions/cacosf.texi @include posix-functions/cacosh.texi @include posix-functions/cacoshf.texi @include posix-functions/cacoshl.texi @include posix-functions/cacosl.texi @include posix-functions/calloc.texi @include posix-functions/call_once.texi @include posix-functions/canonicalize.texi @include posix-functions/canonicalizef.texi @include posix-functions/canonicalizel.texi @include posix-functions/carg.texi @include posix-functions/cargf.texi @include posix-functions/cargl.texi @include posix-functions/casin.texi @include posix-functions/casinf.texi @include posix-functions/casinh.texi @include posix-functions/casinhf.texi @include posix-functions/casinhl.texi @include posix-functions/casinl.texi @include posix-functions/catan.texi @include posix-functions/catanf.texi @include posix-functions/catanh.texi @include posix-functions/catanhf.texi @include posix-functions/catanhl.texi @include posix-functions/catanl.texi @include posix-functions/catclose.texi @include posix-functions/catgets.texi @include posix-functions/catopen.texi @include posix-functions/cbrt.texi @include posix-functions/cbrtf.texi @include posix-functions/cbrtl.texi @include posix-functions/ccos.texi @include posix-functions/ccosf.texi @include posix-functions/ccosh.texi @include posix-functions/ccoshf.texi @include posix-functions/ccoshl.texi @include posix-functions/ccosl.texi @include posix-functions/ceil.texi @include posix-functions/ceilf.texi @include posix-functions/ceill.texi @include posix-functions/cexp.texi @include posix-functions/cexpf.texi @include posix-functions/cexpl.texi @include posix-functions/cfgetispeed.texi @include posix-functions/cfgetospeed.texi @include posix-functions/cfsetispeed.texi @include posix-functions/cfsetospeed.texi @include posix-functions/chdir.texi @include posix-functions/chmod.texi @include posix-functions/chown.texi @include posix-functions/cimag.texi @include posix-functions/cimagf.texi @include posix-functions/cimagl.texi @include posix-functions/clearerr.texi @include posix-functions/clock.texi @include posix-functions/clock_getcpuclockid.texi @include posix-functions/clock_getres.texi @include posix-functions/clock_gettime.texi @include posix-functions/clock_nanosleep.texi @include posix-functions/clock_settime.texi @include posix-functions/clog.texi @include posix-functions/clogf.texi @include posix-functions/clogl.texi @include posix-functions/close.texi @include posix-functions/closedir.texi @include posix-functions/closelog.texi @include posix-functions/cnd_broadcast.texi @include posix-functions/cnd_destroy.texi @include posix-functions/cnd_init.texi @include posix-functions/cnd_signal.texi @include posix-functions/cnd_timedwait.texi @include posix-functions/cnd_wait.texi @include posix-functions/confstr.texi @include posix-functions/conj.texi @include posix-functions/conjf.texi @include posix-functions/conjl.texi @include posix-functions/connect.texi @include posix-functions/copysign.texi @include posix-functions/copysignf.texi @include posix-functions/copysignl.texi @include posix-functions/cos.texi @include posix-functions/cosf.texi @include posix-functions/cosh.texi @include posix-functions/coshf.texi @include posix-functions/coshl.texi @include posix-functions/cosl.texi @include posix-functions/cpow.texi @include posix-functions/cpowf.texi @include posix-functions/cpowl.texi @include posix-functions/cproj.texi @include posix-functions/cprojf.texi @include posix-functions/cprojl.texi @include posix-functions/creal.texi @include posix-functions/crealf.texi @include posix-functions/creall.texi @include posix-functions/creat.texi @include posix-functions/crypt.texi @include posix-functions/csin.texi @include posix-functions/csinf.texi @include posix-functions/csinh.texi @include posix-functions/csinhf.texi @include posix-functions/csinhl.texi @include posix-functions/csinl.texi @include posix-functions/csqrt.texi @include posix-functions/csqrtf.texi @include posix-functions/csqrtl.texi @include posix-functions/ctan.texi @include posix-functions/ctanf.texi @include posix-functions/ctanh.texi @include posix-functions/ctanhf.texi @include posix-functions/ctanhl.texi @include posix-functions/ctanl.texi @include posix-functions/ctermid.texi @include posix-functions/ctime.texi @include posix-functions/ctime_r.texi @include posix-functions/daddl.texi @include posix-functions/daylight.texi @include posix-functions/dbm_clearerr.texi @include posix-functions/dbm_close.texi @include posix-functions/dbm_delete.texi @include posix-functions/dbm_error.texi @include posix-functions/dbm_fetch.texi @include posix-functions/dbm_firstkey.texi @include posix-functions/dbm_nextkey.texi @include posix-functions/dbm_open.texi @include posix-functions/dbm_store.texi @include posix-functions/ddivl.texi @include posix-functions/difftime.texi @include posix-functions/dirfd.texi @include posix-functions/dirname.texi @include posix-functions/div.texi @include posix-functions/dlclose.texi @include posix-functions/dlerror.texi @include posix-functions/dlopen.texi @include posix-functions/dlsym.texi @include posix-functions/dmull.texi @include posix-functions/dprintf.texi @include posix-functions/drand48.texi @include posix-functions/dsubl.texi @include posix-functions/dup.texi @include posix-functions/dup2.texi @include posix-functions/duplocale.texi @include posix-functions/encrypt.texi @include posix-functions/endgrent.texi @include posix-functions/endhostent.texi @include posix-functions/endnetent.texi @include posix-functions/endprotoent.texi @include posix-functions/endpwent.texi @include posix-functions/endservent.texi @include posix-functions/endutxent.texi @include posix-functions/environ.texi @include posix-functions/erand48.texi @include posix-functions/erf.texi @include posix-functions/erfc.texi @include posix-functions/erfcf.texi @include posix-functions/erfcl.texi @include posix-functions/erff.texi @include posix-functions/erfl.texi @include posix-functions/errno.texi @include posix-functions/execl.texi @include posix-functions/execle.texi @include posix-functions/execlp.texi @include posix-functions/execv.texi @include posix-functions/execve.texi @include posix-functions/execvp.texi @include posix-functions/exit.texi @include posix-functions/exp.texi @include posix-functions/exp2.texi @include posix-functions/exp2f.texi @include posix-functions/exp2l.texi @include posix-functions/expf.texi @include posix-functions/expl.texi @include posix-functions/expm1.texi @include posix-functions/expm1f.texi @include posix-functions/expm1l.texi @include posix-functions/fabs.texi @include posix-functions/fabsf.texi @include posix-functions/fabsl.texi @include posix-functions/faccessat.texi @include posix-functions/fadd.texi @include posix-functions/faddl.texi @include posix-functions/fattach.texi @include posix-functions/fchdir.texi @include posix-functions/fchmod.texi @include posix-functions/fchmodat.texi @include posix-functions/fchown.texi @include posix-functions/fchownat.texi @include posix-functions/fclose.texi @include posix-functions/fcntl.texi @include posix-functions/fdatasync.texi @include posix-functions/fdetach.texi @include posix-functions/fdim.texi @include posix-functions/fdimf.texi @include posix-functions/fdiml.texi @include posix-functions/fdiv.texi @include posix-functions/fdivl.texi @include posix-functions/fdopen.texi @include posix-functions/fdopendir.texi @include posix-functions/feclearexcept.texi @include posix-functions/fegetenv.texi @include posix-functions/fegetexceptflag.texi @include posix-functions/fegetmode.texi @include posix-functions/fegetround.texi @include posix-functions/feholdexcept.texi @include posix-functions/feof.texi @include posix-functions/feraiseexcept.texi @include posix-functions/ferror.texi @include posix-functions/fesetenv.texi @include posix-functions/fesetexcept.texi @include posix-functions/fesetexceptflag.texi @include posix-functions/fesetmode.texi @include posix-functions/fesetround.texi @include posix-functions/fetestexcept.texi @include posix-functions/fetestexceptflag.texi @include posix-functions/feupdateenv.texi @include posix-functions/fexecve.texi @include posix-functions/fflush.texi @include posix-functions/ffs.texi @include posix-functions/fgetc.texi @include posix-functions/fgetpos.texi @include posix-functions/fgets.texi @include posix-functions/fgetwc.texi @include posix-functions/fgetws.texi @include posix-functions/fileno.texi @include posix-functions/flockfile.texi @include posix-functions/floor.texi @include posix-functions/floorf.texi @include posix-functions/floorl.texi @include posix-functions/fma.texi @include posix-functions/fmaf.texi @include posix-functions/fmal.texi @include posix-functions/fmax.texi @include posix-functions/fmaxf.texi @include posix-functions/fmaxl.texi @include posix-functions/fmaxmag.texi @include posix-functions/fmaxmagf.texi @include posix-functions/fmaxmagl.texi @include posix-functions/fmemopen.texi @include posix-functions/fmin.texi @include posix-functions/fminf.texi @include posix-functions/fminl.texi @include posix-functions/fminmag.texi @include posix-functions/fminmagf.texi @include posix-functions/fminmagl.texi @include posix-functions/fmod.texi @include posix-functions/fmodf.texi @include posix-functions/fmodl.texi @include posix-functions/fmtmsg.texi @include posix-functions/fmul.texi @include posix-functions/fmull.texi @include posix-functions/fnmatch.texi @include posix-functions/fopen.texi @include posix-functions/fork.texi @include posix-functions/fpathconf.texi @include posix-functions/fpclassify.texi @include posix-functions/fprintf.texi @include posix-functions/fputc.texi @include posix-functions/fputs.texi @include posix-functions/fputwc.texi @include posix-functions/fputws.texi @include posix-functions/fread.texi @include posix-functions/free.texi @include posix-functions/freeaddrinfo.texi @include posix-functions/freelocale.texi @include posix-functions/freopen.texi @include posix-functions/frexp.texi @include posix-functions/frexpf.texi @include posix-functions/frexpl.texi @include posix-functions/fromfp.texi @include posix-functions/fromfpf.texi @include posix-functions/fromfpl.texi @include posix-functions/fromfpx.texi @include posix-functions/fromfpxf.texi @include posix-functions/fromfpxl.texi @include posix-functions/fscanf.texi @include posix-functions/fseek.texi @include posix-functions/fseeko.texi @include posix-functions/fsetpos.texi @include posix-functions/fstat.texi @include posix-functions/fstatat.texi @include posix-functions/fstatvfs.texi @include posix-functions/fsub.texi @include posix-functions/fsubl.texi @include posix-functions/fsync.texi @include posix-functions/ftell.texi @include posix-functions/ftello.texi @include posix-functions/ftok.texi @include posix-functions/ftruncate.texi @include posix-functions/ftrylockfile.texi @include posix-functions/ftw.texi @include posix-functions/funlockfile.texi @include posix-functions/futimens.texi @include posix-functions/fwide.texi @include posix-functions/fwprintf.texi @include posix-functions/fwrite.texi @include posix-functions/fwscanf.texi @include posix-functions/gai_strerror.texi @include posix-functions/getaddrinfo.texi @include posix-functions/getc.texi @include posix-functions/getc_unlocked.texi @include posix-functions/getchar.texi @include posix-functions/getchar_unlocked.texi @include posix-functions/getcwd.texi @include posix-functions/getdate.texi @include posix-functions/getdate_err.texi @include posix-functions/getdelim.texi @include posix-functions/getegid.texi @include posix-functions/getenv.texi @include posix-functions/geteuid.texi @include posix-functions/getgid.texi @include posix-functions/getgrent.texi @include posix-functions/getgrgid.texi @include posix-functions/getgrgid_r.texi @include posix-functions/getgrnam.texi @include posix-functions/getgrnam_r.texi @include posix-functions/getgroups.texi @include posix-functions/gethostent.texi @include posix-functions/gethostid.texi @include posix-functions/gethostname.texi @include posix-functions/getitimer.texi @include posix-functions/getline.texi @include posix-functions/getlogin.texi @include posix-functions/getlogin_r.texi @include posix-functions/getmsg.texi @include posix-functions/getnameinfo.texi @include posix-functions/getnetbyaddr.texi @include posix-functions/getnetbyname.texi @include posix-functions/getnetent.texi @include posix-functions/getopt.texi @include posix-functions/getpayload.texi @include posix-functions/getpayloadf.texi @include posix-functions/getpayloadl.texi @include posix-functions/getpeername.texi @include posix-functions/getpgid.texi @include posix-functions/getpgrp.texi @include posix-functions/getpid.texi @include posix-functions/getpmsg.texi @include posix-functions/getppid.texi @include posix-functions/getpriority.texi @include posix-functions/getprotobyname.texi @include posix-functions/getprotobynumber.texi @include posix-functions/getprotoent.texi @include posix-functions/getpwent.texi @include posix-functions/getpwnam.texi @include posix-functions/getpwnam_r.texi @include posix-functions/getpwuid.texi @include posix-functions/getpwuid_r.texi @include posix-functions/getrlimit.texi @include posix-functions/getrusage.texi @include posix-functions/gets.texi @include posix-functions/getservbyname.texi @include posix-functions/getservbyport.texi @include posix-functions/getservent.texi @include posix-functions/getsid.texi @include posix-functions/getsockname.texi @include posix-functions/getsockopt.texi @include posix-functions/getsubopt.texi @include posix-functions/gettimeofday.texi @include posix-functions/getuid.texi @include posix-functions/getutxent.texi @include posix-functions/getutxid.texi @include posix-functions/getutxline.texi @include posix-functions/getwc.texi @include posix-functions/getwchar.texi @include posix-functions/glob.texi @include posix-functions/globfree.texi @include posix-functions/gmtime.texi @include posix-functions/gmtime_r.texi @include posix-functions/grantpt.texi @include posix-functions/hcreate.texi @include posix-functions/hdestroy.texi @include posix-functions/hsearch.texi @include posix-functions/htonl.texi @include posix-functions/htons.texi @include posix-functions/hypot.texi @include posix-functions/hypotf.texi @include posix-functions/hypotl.texi @include posix-functions/iconv.texi @include posix-functions/iconv_close.texi @include posix-functions/iconv_open.texi @include posix-functions/if_freenameindex.texi @include posix-functions/if_indextoname.texi @include posix-functions/if_nameindex.texi @include posix-functions/if_nametoindex.texi @include posix-functions/ilogb.texi @include posix-functions/ilogbf.texi @include posix-functions/ilogbl.texi @include posix-functions/imaxabs.texi @include posix-functions/imaxdiv.texi @include posix-functions/inet_addr.texi @include posix-functions/inet_ntoa.texi @include posix-functions/inet_ntop.texi @include posix-functions/inet_pton.texi @include posix-functions/initstate.texi @include posix-functions/insque.texi @include posix-functions/ioctl.texi @include posix-functions/isalnum.texi @include posix-functions/isalnum_l.texi @include posix-functions/isalpha.texi @include posix-functions/isalpha_l.texi @include posix-functions/isascii.texi @include posix-functions/isastream.texi @include posix-functions/isatty.texi @include posix-functions/isblank.texi @include posix-functions/isblank_l.texi @include posix-functions/iscntrl.texi @include posix-functions/iscntrl_l.texi @include posix-functions/isdigit.texi @include posix-functions/isdigit_l.texi @include posix-functions/isfinite.texi @include posix-functions/isgraph.texi @include posix-functions/isgraph_l.texi @include posix-functions/isgreater.texi @include posix-functions/isgreaterequal.texi @include posix-functions/isinf.texi @include posix-functions/isless.texi @include posix-functions/islessequal.texi @include posix-functions/islessgreater.texi @include posix-functions/islower.texi @include posix-functions/islower_l.texi @include posix-functions/isnan.texi @include posix-functions/isnormal.texi @include posix-functions/isprint.texi @include posix-functions/isprint_l.texi @include posix-functions/ispunct.texi @include posix-functions/ispunct_l.texi @include posix-functions/isspace.texi @include posix-functions/isspace_l.texi @include posix-functions/isunordered.texi @include posix-functions/isupper.texi @include posix-functions/isupper_l.texi @include posix-functions/iswalnum.texi @include posix-functions/iswalnum_l.texi @include posix-functions/iswalpha.texi @include posix-functions/iswalpha_l.texi @include posix-functions/iswblank.texi @include posix-functions/iswblank_l.texi @include posix-functions/iswcntrl.texi @include posix-functions/iswcntrl_l.texi @include posix-functions/iswctype.texi @include posix-functions/iswctype_l.texi @include posix-functions/iswdigit.texi @include posix-functions/iswdigit_l.texi @include posix-functions/iswgraph.texi @include posix-functions/iswgraph_l.texi @include posix-functions/iswlower.texi @include posix-functions/iswlower_l.texi @include posix-functions/iswprint.texi @include posix-functions/iswprint_l.texi @include posix-functions/iswpunct.texi @include posix-functions/iswpunct_l.texi @include posix-functions/iswspace.texi @include posix-functions/iswspace_l.texi @include posix-functions/iswupper.texi @include posix-functions/iswupper_l.texi @include posix-functions/iswxdigit.texi @include posix-functions/iswxdigit_l.texi @include posix-functions/isxdigit.texi @include posix-functions/isxdigit_l.texi @include posix-functions/j0.texi @include posix-functions/j1.texi @include posix-functions/jn.texi @include posix-functions/jrand48.texi @include posix-functions/kill.texi @include posix-functions/killpg.texi @include posix-functions/l64a.texi @include posix-functions/labs.texi @include posix-functions/lchown.texi @include posix-functions/lcong48.texi @include posix-functions/ldexp.texi @include posix-functions/ldexpf.texi @include posix-functions/ldexpl.texi @include posix-functions/ldiv.texi @include posix-functions/lfind.texi @include posix-functions/lgamma.texi @include posix-functions/lgammaf.texi @include posix-functions/lgammal.texi @include posix-functions/link.texi @include posix-functions/linkat.texi @include posix-functions/lio_listio.texi @include posix-functions/listen.texi @include posix-functions/llabs.texi @include posix-functions/lldiv.texi @include posix-functions/llogb.texi @include posix-functions/llogbf.texi @include posix-functions/llogbl.texi @include posix-functions/llrint.texi @include posix-functions/llrintf.texi @include posix-functions/llrintl.texi @include posix-functions/llround.texi @include posix-functions/llroundf.texi @include posix-functions/llroundl.texi @include posix-functions/localeconv.texi @include posix-functions/localtime.texi @include posix-functions/localtime_r.texi @include posix-functions/lockf.texi @include posix-functions/log.texi @include posix-functions/log10.texi @include posix-functions/log10f.texi @include posix-functions/log10l.texi @include posix-functions/log1p.texi @include posix-functions/log1pf.texi @include posix-functions/log1pl.texi @include posix-functions/log2.texi @include posix-functions/log2f.texi @include posix-functions/log2l.texi @include posix-functions/logb.texi @include posix-functions/logbf.texi @include posix-functions/logbl.texi @include posix-functions/logf.texi @include posix-functions/logl.texi @include posix-functions/longjmp.texi @include posix-functions/lrand48.texi @include posix-functions/lrint.texi @include posix-functions/lrintf.texi @include posix-functions/lrintl.texi @include posix-functions/lround.texi @include posix-functions/lroundf.texi @include posix-functions/lroundl.texi @include posix-functions/lsearch.texi @include posix-functions/lseek.texi @include posix-functions/lstat.texi @include posix-functions/malloc.texi @include posix-functions/mblen.texi @include posix-functions/mbrlen.texi @include posix-functions/mbrtoc16.texi @include posix-functions/mbrtoc32.texi @include posix-functions/mbrtowc.texi @include posix-functions/mbsinit.texi @include posix-functions/mbsnrtowcs.texi @include posix-functions/mbsrtowcs.texi @include posix-functions/mbstowcs.texi @include posix-functions/mbtowc.texi @include posix-functions/memccpy.texi @include posix-functions/memchr.texi @include posix-functions/memcmp.texi @include posix-functions/memcpy.texi @include posix-functions/memmove.texi @include posix-functions/memset.texi @include posix-functions/mkdir.texi @include posix-functions/mkdirat.texi @include posix-functions/mkdtemp.texi @include posix-functions/mkfifo.texi @include posix-functions/mkfifoat.texi @include posix-functions/mknod.texi @include posix-functions/mknodat.texi @include posix-functions/mkstemp.texi @include posix-functions/mktime.texi @include posix-functions/mlock.texi @include posix-functions/mlockall.texi @include posix-functions/mmap.texi @include posix-functions/modf.texi @include posix-functions/modff.texi @include posix-functions/modfl.texi @include posix-functions/mprotect.texi @include posix-functions/mq_close.texi @include posix-functions/mq_getattr.texi @include posix-functions/mq_notify.texi @include posix-functions/mq_open.texi @include posix-functions/mq_receive.texi @include posix-functions/mq_send.texi @include posix-functions/mq_setattr.texi @include posix-functions/mq_timedreceive.texi @include posix-functions/mq_timedsend.texi @include posix-functions/mq_unlink.texi @include posix-functions/mrand48.texi @include posix-functions/msgctl.texi @include posix-functions/msgget.texi @include posix-functions/msgrcv.texi @include posix-functions/msgsnd.texi @include posix-functions/msync.texi @include posix-functions/mtx_destroy.texi @include posix-functions/mtx_init.texi @include posix-functions/mtx_lock.texi @include posix-functions/mtx_timedlock.texi @include posix-functions/mtx_trylock.texi @include posix-functions/mtx_unlock.texi @include posix-functions/munlock.texi @include posix-functions/munlockall.texi @include posix-functions/munmap.texi @include posix-functions/nan.texi @include posix-functions/nanf.texi @include posix-functions/nanl.texi @include posix-functions/nanosleep.texi @include posix-functions/nearbyint.texi @include posix-functions/nearbyintf.texi @include posix-functions/nearbyintl.texi @include posix-functions/newlocale.texi @include posix-functions/nextafter.texi @include posix-functions/nextafterf.texi @include posix-functions/nextafterl.texi @include posix-functions/nextdown.texi @include posix-functions/nextdownf.texi @include posix-functions/nextdownl.texi @include posix-functions/nexttoward.texi @include posix-functions/nexttowardf.texi @include posix-functions/nexttowardl.texi @include posix-functions/nextup.texi @include posix-functions/nextupf.texi @include posix-functions/nextupl.texi @include posix-functions/nftw.texi @include posix-functions/nice.texi @include posix-functions/nl_langinfo.texi @include posix-functions/nl_langinfo_l.texi @include posix-functions/nrand48.texi @include posix-functions/ntohl.texi @include posix-functions/ntohs.texi @include posix-functions/open.texi @include posix-functions/openat.texi @include posix-functions/opendir.texi @include posix-functions/openlog.texi @include posix-functions/open_memstream.texi @include posix-functions/open_wmemstream.texi @include posix-functions/optarg.texi @include posix-functions/opterr.texi @include posix-functions/optind.texi @include posix-functions/optopt.texi @include posix-functions/pathconf.texi @include posix-functions/pause.texi @include posix-functions/pclose.texi @include posix-functions/perror.texi @include posix-functions/pipe.texi @include posix-functions/poll.texi @include posix-functions/popen.texi @include posix-functions/posix_fadvise.texi @include posix-functions/posix_fallocate.texi @include posix-functions/posix_madvise.texi @include posix-functions/posix_mem_offset.texi @include posix-functions/posix_memalign.texi @include posix-functions/posix_openpt.texi @include posix-functions/posix_spawn.texi @include posix-functions/posix_spawn_file_actions_addclose.texi @include posix-functions/posix_spawn_file_actions_adddup2.texi @include posix-functions/posix_spawn_file_actions_addopen.texi @include posix-functions/posix_spawn_file_actions_destroy.texi @include posix-functions/posix_spawn_file_actions_init.texi @include posix-functions/posix_spawnattr_destroy.texi @include posix-functions/posix_spawnattr_getflags.texi @include posix-functions/posix_spawnattr_getpgroup.texi @include posix-functions/posix_spawnattr_getschedparam.texi @include posix-functions/posix_spawnattr_getschedpolicy.texi @include posix-functions/posix_spawnattr_getsigdefault.texi @include posix-functions/posix_spawnattr_getsigmask.texi @include posix-functions/posix_spawnattr_init.texi @include posix-functions/posix_spawnattr_setflags.texi @include posix-functions/posix_spawnattr_setpgroup.texi @include posix-functions/posix_spawnattr_setschedparam.texi @include posix-functions/posix_spawnattr_setschedpolicy.texi @include posix-functions/posix_spawnattr_setsigdefault.texi @include posix-functions/posix_spawnattr_setsigmask.texi @include posix-functions/posix_spawnp.texi @include posix-functions/posix_trace_attr_destroy.texi @include posix-functions/posix_trace_attr_getclockres.texi @include posix-functions/posix_trace_attr_getcreatetime.texi @include posix-functions/posix_trace_attr_getgenversion.texi @include posix-functions/posix_trace_attr_getinherited.texi @include posix-functions/posix_trace_attr_getlogfullpolicy.texi @include posix-functions/posix_trace_attr_getlogsize.texi @include posix-functions/posix_trace_attr_getmaxdatasize.texi @include posix-functions/posix_trace_attr_getmaxsystemeventsize.texi @include posix-functions/posix_trace_attr_getmaxusereventsize.texi @include posix-functions/posix_trace_attr_getname.texi @include posix-functions/posix_trace_attr_getstreamfullpolicy.texi @include posix-functions/posix_trace_attr_getstreamsize.texi @include posix-functions/posix_trace_attr_init.texi @include posix-functions/posix_trace_attr_setinherited.texi @include posix-functions/posix_trace_attr_setlogfullpolicy.texi @include posix-functions/posix_trace_attr_setlogsize.texi @include posix-functions/posix_trace_attr_setmaxdatasize.texi @include posix-functions/posix_trace_attr_setname.texi @include posix-functions/posix_trace_attr_setstreamfullpolicy.texi @include posix-functions/posix_trace_attr_setstreamsize.texi @include posix-functions/posix_trace_clear.texi @include posix-functions/posix_trace_close.texi @include posix-functions/posix_trace_create.texi @include posix-functions/posix_trace_create_withlog.texi @include posix-functions/posix_trace_event.texi @include posix-functions/posix_trace_eventid_equal.texi @include posix-functions/posix_trace_eventid_get_name.texi @include posix-functions/posix_trace_eventid_open.texi @include posix-functions/posix_trace_eventset_add.texi @include posix-functions/posix_trace_eventset_del.texi @include posix-functions/posix_trace_eventset_empty.texi @include posix-functions/posix_trace_eventset_fill.texi @include posix-functions/posix_trace_eventset_ismember.texi @include posix-functions/posix_trace_eventtypelist_getnext_id.texi @include posix-functions/posix_trace_eventtypelist_rewind.texi @include posix-functions/posix_trace_flush.texi @include posix-functions/posix_trace_get_attr.texi @include posix-functions/posix_trace_get_filter.texi @include posix-functions/posix_trace_get_status.texi @include posix-functions/posix_trace_getnext_event.texi @include posix-functions/posix_trace_open.texi @include posix-functions/posix_trace_rewind.texi @include posix-functions/posix_trace_set_filter.texi @include posix-functions/posix_trace_shutdown.texi @include posix-functions/posix_trace_start.texi @include posix-functions/posix_trace_stop.texi @include posix-functions/posix_trace_timedgetnext_event.texi @include posix-functions/posix_trace_trid_eventid_open.texi @include posix-functions/posix_trace_trygetnext_event.texi @include posix-functions/posix_typed_mem_get_info.texi @include posix-functions/posix_typed_mem_open.texi @include posix-functions/pow.texi @include posix-functions/powf.texi @include posix-functions/powl.texi @include posix-functions/pread.texi @include posix-functions/printf.texi @include posix-functions/pselect.texi @include posix-functions/psiginfo.texi @include posix-functions/psignal.texi @include posix-functions/pthread_atfork.texi @include posix-functions/pthread_attr_destroy.texi @include posix-functions/pthread_attr_getdetachstate.texi @include posix-functions/pthread_attr_getguardsize.texi @include posix-functions/pthread_attr_getinheritsched.texi @include posix-functions/pthread_attr_getschedparam.texi @include posix-functions/pthread_attr_getschedpolicy.texi @include posix-functions/pthread_attr_getscope.texi @include posix-functions/pthread_attr_getstack.texi @include posix-functions/pthread_attr_getstacksize.texi @include posix-functions/pthread_attr_init.texi @include posix-functions/pthread_attr_setdetachstate.texi @include posix-functions/pthread_attr_setguardsize.texi @include posix-functions/pthread_attr_setinheritsched.texi @include posix-functions/pthread_attr_setschedparam.texi @include posix-functions/pthread_attr_setschedpolicy.texi @include posix-functions/pthread_attr_setscope.texi @include posix-functions/pthread_attr_setstack.texi @include posix-functions/pthread_attr_setstacksize.texi @include posix-functions/pthread_barrier_destroy.texi @include posix-functions/pthread_barrier_init.texi @include posix-functions/pthread_barrier_wait.texi @include posix-functions/pthread_barrierattr_destroy.texi @include posix-functions/pthread_barrierattr_getpshared.texi @include posix-functions/pthread_barrierattr_init.texi @include posix-functions/pthread_barrierattr_setpshared.texi @include posix-functions/pthread_cancel.texi @include posix-functions/pthread_cleanup_pop.texi @include posix-functions/pthread_cleanup_push.texi @include posix-functions/pthread_cond_broadcast.texi @include posix-functions/pthread_cond_destroy.texi @include posix-functions/pthread_cond_init.texi @include posix-functions/pthread_cond_signal.texi @include posix-functions/pthread_cond_timedwait.texi @include posix-functions/pthread_cond_wait.texi @include posix-functions/pthread_condattr_destroy.texi @include posix-functions/pthread_condattr_getclock.texi @include posix-functions/pthread_condattr_getpshared.texi @include posix-functions/pthread_condattr_init.texi @include posix-functions/pthread_condattr_setclock.texi @include posix-functions/pthread_condattr_setpshared.texi @include posix-functions/pthread_create.texi @include posix-functions/pthread_detach.texi @include posix-functions/pthread_equal.texi @include posix-functions/pthread_exit.texi @include posix-functions/pthread_getconcurrency.texi @include posix-functions/pthread_getcpuclockid.texi @include posix-functions/pthread_getschedparam.texi @include posix-functions/pthread_getspecific.texi @include posix-functions/pthread_join.texi @include posix-functions/pthread_key_create.texi @include posix-functions/pthread_key_delete.texi @include posix-functions/pthread_kill.texi @include posix-functions/pthread_mutex_consistent.texi @include posix-functions/pthread_mutex_destroy.texi @include posix-functions/pthread_mutex_getprioceiling.texi @include posix-functions/pthread_mutex_init.texi @include posix-functions/pthread_mutex_lock.texi @include posix-functions/pthread_mutex_setprioceiling.texi @include posix-functions/pthread_mutex_timedlock.texi @include posix-functions/pthread_mutex_trylock.texi @include posix-functions/pthread_mutex_unlock.texi @include posix-functions/pthread_mutexattr_destroy.texi @include posix-functions/pthread_mutexattr_getprioceiling.texi @include posix-functions/pthread_mutexattr_getprotocol.texi @include posix-functions/pthread_mutexattr_getpshared.texi @include posix-functions/pthread_mutexattr_getrobust.texi @include posix-functions/pthread_mutexattr_gettype.texi @include posix-functions/pthread_mutexattr_init.texi @include posix-functions/pthread_mutexattr_setprioceiling.texi @include posix-functions/pthread_mutexattr_setprotocol.texi @include posix-functions/pthread_mutexattr_setpshared.texi @include posix-functions/pthread_mutexattr_setrobust.texi @include posix-functions/pthread_mutexattr_settype.texi @include posix-functions/pthread_once.texi @include posix-functions/pthread_rwlock_destroy.texi @include posix-functions/pthread_rwlock_init.texi @include posix-functions/pthread_rwlock_rdlock.texi @include posix-functions/pthread_rwlock_timedrdlock.texi @include posix-functions/pthread_rwlock_timedwrlock.texi @include posix-functions/pthread_rwlock_tryrdlock.texi @include posix-functions/pthread_rwlock_trywrlock.texi @include posix-functions/pthread_rwlock_unlock.texi @include posix-functions/pthread_rwlock_wrlock.texi @include posix-functions/pthread_rwlockattr_destroy.texi @include posix-functions/pthread_rwlockattr_getpshared.texi @include posix-functions/pthread_rwlockattr_init.texi @include posix-functions/pthread_rwlockattr_setpshared.texi @include posix-functions/pthread_self.texi @include posix-functions/pthread_setcancelstate.texi @include posix-functions/pthread_setcanceltype.texi @include posix-functions/pthread_setconcurrency.texi @include posix-functions/pthread_setschedparam.texi @include posix-functions/pthread_setschedprio.texi @include posix-functions/pthread_setspecific.texi @include posix-functions/pthread_sigmask.texi @include posix-functions/pthread_spin_destroy.texi @include posix-functions/pthread_spin_init.texi @include posix-functions/pthread_spin_lock.texi @include posix-functions/pthread_spin_trylock.texi @include posix-functions/pthread_spin_unlock.texi @include posix-functions/pthread_testcancel.texi @include posix-functions/ptsname.texi @include posix-functions/putc.texi @include posix-functions/putc_unlocked.texi @include posix-functions/putchar.texi @include posix-functions/putchar_unlocked.texi @include posix-functions/putenv.texi @include posix-functions/putmsg.texi @include posix-functions/putpmsg.texi @include posix-functions/puts.texi @include posix-functions/pututxline.texi @include posix-functions/putwc.texi @include posix-functions/putwchar.texi @include posix-functions/pwrite.texi @include posix-functions/qsort.texi @include posix-functions/quick_exit.texi @include posix-functions/raise.texi @include posix-functions/rand.texi @include posix-functions/rand_r.texi @include posix-functions/random.texi @include posix-functions/read.texi @include posix-functions/readdir.texi @include posix-functions/readdir_r.texi @include posix-functions/readlink.texi @include posix-functions/readlinkat.texi @include posix-functions/readv.texi @include posix-functions/realloc.texi @include posix-functions/realpath.texi @include posix-functions/recv.texi @include posix-functions/recvfrom.texi @include posix-functions/recvmsg.texi @include posix-functions/regcomp.texi @include posix-functions/regerror.texi @include posix-functions/regexec.texi @include posix-functions/regfree.texi @include posix-functions/remainder.texi @include posix-functions/remainderf.texi @include posix-functions/remainderl.texi @include posix-functions/remove.texi @include posix-functions/remque.texi @include posix-functions/remquo.texi @include posix-functions/remquof.texi @include posix-functions/remquol.texi @include posix-functions/rename.texi @include posix-functions/renameat.texi @include posix-functions/rewind.texi @include posix-functions/rewinddir.texi @include posix-functions/rint.texi @include posix-functions/rintf.texi @include posix-functions/rintl.texi @include posix-functions/rmdir.texi @include posix-functions/round.texi @include posix-functions/roundeven.texi @include posix-functions/roundevenf.texi @include posix-functions/roundevenl.texi @include posix-functions/roundf.texi @include posix-functions/roundl.texi @include posix-functions/scalbln.texi @include posix-functions/scalblnf.texi @include posix-functions/scalblnl.texi @include posix-functions/scalbn.texi @include posix-functions/scalbnf.texi @include posix-functions/scalbnl.texi @include posix-functions/scandir.texi @include posix-functions/scanf.texi @include posix-functions/sched_get_priority_max.texi @include posix-functions/sched_get_priority_min.texi @include posix-functions/sched_getparam.texi @include posix-functions/sched_getscheduler.texi @include posix-functions/sched_rr_get_interval.texi @include posix-functions/sched_setparam.texi @include posix-functions/sched_setscheduler.texi @include posix-functions/sched_yield.texi @include posix-functions/seed48.texi @include posix-functions/seekdir.texi @include posix-functions/select.texi @include posix-functions/sem_close.texi @include posix-functions/sem_destroy.texi @include posix-functions/sem_getvalue.texi @include posix-functions/sem_init.texi @include posix-functions/sem_open.texi @include posix-functions/sem_post.texi @include posix-functions/sem_timedwait.texi @include posix-functions/sem_trywait.texi @include posix-functions/sem_unlink.texi @include posix-functions/sem_wait.texi @include posix-functions/semctl.texi @include posix-functions/semget.texi @include posix-functions/semop.texi @include posix-functions/send.texi @include posix-functions/sendmsg.texi @include posix-functions/sendto.texi @include posix-functions/setbuf.texi @include posix-functions/setegid.texi @include posix-functions/setenv.texi @include posix-functions/seteuid.texi @include posix-functions/setgid.texi @include posix-functions/setgrent.texi @include posix-functions/sethostent.texi @include posix-functions/setitimer.texi @include posix-functions/setjmp.texi @include posix-functions/setkey.texi @include posix-functions/setlocale.texi @include posix-functions/setlogmask.texi @include posix-functions/setnetent.texi @include posix-functions/setpayload.texi @include posix-functions/setpayloadf.texi @include posix-functions/setpayloadl.texi @include posix-functions/setpayloadsig.texi @include posix-functions/setpayloadsigf.texi @include posix-functions/setpayloadsigl.texi @include posix-functions/setpgid.texi @include posix-functions/setpgrp.texi @include posix-functions/setpriority.texi @include posix-functions/setprotoent.texi @include posix-functions/setpwent.texi @include posix-functions/setregid.texi @include posix-functions/setreuid.texi @include posix-functions/setrlimit.texi @include posix-functions/setservent.texi @include posix-functions/setsid.texi @include posix-functions/setsockopt.texi @include posix-functions/setstate.texi @include posix-functions/setuid.texi @include posix-functions/setutxent.texi @include posix-functions/setvbuf.texi @include posix-functions/shm_open.texi @include posix-functions/shm_unlink.texi @include posix-functions/shmat.texi @include posix-functions/shmctl.texi @include posix-functions/shmdt.texi @include posix-functions/shmget.texi @include posix-functions/shutdown.texi @include posix-functions/sigaction.texi @include posix-functions/sigaddset.texi @include posix-functions/sigaltstack.texi @include posix-functions/sigdelset.texi @include posix-functions/sigemptyset.texi @include posix-functions/sigfillset.texi @include posix-functions/sighold.texi @include posix-functions/sigignore.texi @include posix-functions/siginterrupt.texi @include posix-functions/sigismember.texi @include posix-functions/siglongjmp.texi @include posix-functions/signal.texi @include posix-functions/signbit.texi @include posix-functions/signgam.texi @include posix-functions/sigpause.texi @include posix-functions/sigpending.texi @include posix-functions/sigprocmask.texi @include posix-functions/sigqueue.texi @include posix-functions/sigrelse.texi @include posix-functions/sigset.texi @include posix-functions/sigsetjmp.texi @include posix-functions/sigsuspend.texi @include posix-functions/sigtimedwait.texi @include posix-functions/sigwait.texi @include posix-functions/sigwaitinfo.texi @include posix-functions/sin.texi @include posix-functions/sinf.texi @include posix-functions/sinh.texi @include posix-functions/sinhf.texi @include posix-functions/sinhl.texi @include posix-functions/sinl.texi @include posix-functions/sleep.texi @include posix-functions/snprintf.texi @include posix-functions/sockatmark.texi @include posix-functions/socket.texi @include posix-functions/socketpair.texi @include posix-functions/sprintf.texi @include posix-functions/sqrt.texi @include posix-functions/sqrtf.texi @include posix-functions/sqrtl.texi @include posix-functions/srand.texi @include posix-functions/srand48.texi @include posix-functions/srandom.texi @include posix-functions/sscanf.texi @include posix-functions/stat.texi @include posix-functions/statvfs.texi @include posix-functions/stderr.texi @include posix-functions/stdin.texi @include posix-functions/stdout.texi @include posix-functions/stpcpy.texi @include posix-functions/stpncpy.texi @include posix-functions/strcasecmp.texi @include posix-functions/strcasecmp_l.texi @include posix-functions/strcat.texi @include posix-functions/strchr.texi @include posix-functions/strcmp.texi @include posix-functions/strcoll.texi @include posix-functions/strcoll_l.texi @include posix-functions/strcpy.texi @include posix-functions/strcspn.texi @include posix-functions/strdup.texi @include posix-functions/strerror.texi @include posix-functions/strerror_l.texi @include posix-functions/strerror_r.texi @include posix-functions/strfmon.texi @include posix-functions/strfmon_l.texi @include posix-functions/strfromd.texi @include posix-functions/strfromf.texi @include posix-functions/strfroml.texi @include posix-functions/strftime.texi @include posix-functions/strftime_l.texi @include posix-functions/strlen.texi @include posix-functions/strncasecmp.texi @include posix-functions/strncasecmp_l.texi @include posix-functions/strncat.texi @include posix-functions/strncmp.texi @include posix-functions/strncpy.texi @include posix-functions/strndup.texi @include posix-functions/strnlen.texi @include posix-functions/strpbrk.texi @include posix-functions/strptime.texi @include posix-functions/strrchr.texi @include posix-functions/strsignal.texi @include posix-functions/strspn.texi @include posix-functions/strstr.texi @include posix-functions/strtod.texi @include posix-functions/strtof.texi @include posix-functions/strtoimax.texi @include posix-functions/strtok.texi @include posix-functions/strtok_r.texi @include posix-functions/strtol.texi @include posix-functions/strtold.texi @include posix-functions/strtoll.texi @include posix-functions/strtoul.texi @include posix-functions/strtoull.texi @include posix-functions/strtoumax.texi @include posix-functions/strxfrm.texi @include posix-functions/strxfrm_l.texi @include posix-functions/swab.texi @include posix-functions/swprintf.texi @include posix-functions/swscanf.texi @include posix-functions/symlink.texi @include posix-functions/symlinkat.texi @include posix-functions/sync.texi @include posix-functions/sysconf.texi @include posix-functions/syslog.texi @include posix-functions/system.texi @include posix-functions/tan.texi @include posix-functions/tanf.texi @include posix-functions/tanh.texi @include posix-functions/tanhf.texi @include posix-functions/tanhl.texi @include posix-functions/tanl.texi @include posix-functions/tcdrain.texi @include posix-functions/tcflow.texi @include posix-functions/tcflush.texi @include posix-functions/tcgetattr.texi @include posix-functions/tcgetpgrp.texi @include posix-functions/tcgetsid.texi @include posix-functions/tcsendbreak.texi @include posix-functions/tcsetattr.texi @include posix-functions/tcsetpgrp.texi @include posix-functions/tdelete.texi @include posix-functions/telldir.texi @include posix-functions/tempnam.texi @include posix-functions/tfind.texi @include posix-functions/tgamma.texi @include posix-functions/tgammaf.texi @include posix-functions/tgammal.texi @include posix-functions/thrd_create.texi @include posix-functions/thrd_current.texi @include posix-functions/thrd_detach.texi @include posix-functions/thrd_equal.texi @include posix-functions/thrd_exit.texi @include posix-functions/thrd_join.texi @include posix-functions/thrd_sleep.texi @include posix-functions/thrd_yield.texi @include posix-functions/time.texi @include posix-functions/timer_create.texi @include posix-functions/timer_delete.texi @include posix-functions/timer_getoverrun.texi @include posix-functions/timer_gettime.texi @include posix-functions/timer_settime.texi @include posix-functions/times.texi @include posix-functions/timespec_getres.texi @include posix-functions/timezone.texi @include posix-functions/tmpfile.texi @include posix-functions/tmpnam.texi @include posix-functions/toascii.texi @include posix-functions/tolower.texi @include posix-functions/tolower_l.texi @include posix-functions/totalorder.texi @include posix-functions/totalorderf.texi @include posix-functions/totalorderl.texi @include posix-functions/totalordermag.texi @include posix-functions/totalordermagf.texi @include posix-functions/totalordermagl.texi @include posix-functions/toupper.texi @include posix-functions/toupper_l.texi @include posix-functions/towctrans.texi @include posix-functions/towctrans_l.texi @include posix-functions/towlower.texi @include posix-functions/towlower_l.texi @include posix-functions/towupper.texi @include posix-functions/towupper_l.texi @include posix-functions/trunc.texi @include posix-functions/truncate.texi @include posix-functions/truncf.texi @include posix-functions/truncl.texi @include posix-functions/tsearch.texi @include posix-functions/tss_create.texi @include posix-functions/tss_delete.texi @include posix-functions/tss_get.texi @include posix-functions/tss_set.texi @include posix-functions/ttyname.texi @include posix-functions/ttyname_r.texi @include posix-functions/twalk.texi @include posix-functions/tzname.texi @include posix-functions/tzset.texi @include posix-functions/ufromfp.texi @include posix-functions/ufromfpf.texi @include posix-functions/ufromfpl.texi @include posix-functions/ufromfpx.texi @include posix-functions/ufromfpxf.texi @include posix-functions/ufromfpxl.texi @include posix-functions/ulimit.texi @include posix-functions/umask.texi @include posix-functions/uname.texi @include posix-functions/ungetc.texi @include posix-functions/ungetwc.texi @include posix-functions/unlink.texi @include posix-functions/unlinkat.texi @include posix-functions/unlockpt.texi @include posix-functions/unsetenv.texi @include posix-functions/uselocale.texi @include posix-functions/utime.texi @include posix-functions/utimensat.texi @include posix-functions/utimes.texi @include posix-functions/va_arg.texi @include posix-functions/va_copy.texi @include posix-functions/va_end.texi @include posix-functions/va_start.texi @include posix-functions/vdprintf.texi @include posix-functions/vfprintf.texi @include posix-functions/vfscanf.texi @include posix-functions/vfwprintf.texi @include posix-functions/vfwscanf.texi @include posix-functions/vprintf.texi @include posix-functions/vscanf.texi @include posix-functions/vsnprintf.texi @include posix-functions/vsprintf.texi @include posix-functions/vsscanf.texi @include posix-functions/vswprintf.texi @include posix-functions/vswscanf.texi @include posix-functions/vwprintf.texi @include posix-functions/vwscanf.texi @include posix-functions/wait.texi @include posix-functions/waitid.texi @include posix-functions/waitpid.texi @include posix-functions/wcpcpy.texi @include posix-functions/wcpncpy.texi @include posix-functions/wcrtomb.texi @include posix-functions/wcscasecmp.texi @include posix-functions/wcscasecmp_l.texi @include posix-functions/wcscat.texi @include posix-functions/wcschr.texi @include posix-functions/wcscmp.texi @include posix-functions/wcscoll.texi @include posix-functions/wcscoll_l.texi @include posix-functions/wcscpy.texi @include posix-functions/wcscspn.texi @include posix-functions/wcsdup.texi @include posix-functions/wcsftime.texi @include posix-functions/wcslen.texi @include posix-functions/wcsncasecmp.texi @include posix-functions/wcsncasecmp_l.texi @include posix-functions/wcsncat.texi @include posix-functions/wcsncmp.texi @include posix-functions/wcsncpy.texi @include posix-functions/wcsnlen.texi @include posix-functions/wcsnrtombs.texi @include posix-functions/wcspbrk.texi @include posix-functions/wcsrchr.texi @include posix-functions/wcsrtombs.texi @include posix-functions/wcsspn.texi @include posix-functions/wcsstr.texi @include posix-functions/wcstod.texi @include posix-functions/wcstof.texi @include posix-functions/wcstoimax.texi @include posix-functions/wcstok.texi @include posix-functions/wcstol.texi @include posix-functions/wcstold.texi @include posix-functions/wcstoll.texi @include posix-functions/wcstombs.texi @include posix-functions/wcstoul.texi @include posix-functions/wcstoull.texi @include posix-functions/wcstoumax.texi @include posix-functions/wcswidth.texi @include posix-functions/wcsxfrm.texi @include posix-functions/wcsxfrm_l.texi @include posix-functions/wctob.texi @include posix-functions/wctomb.texi @include posix-functions/wctrans.texi @include posix-functions/wctrans_l.texi @include posix-functions/wctype.texi @include posix-functions/wctype_l.texi @include posix-functions/wcwidth.texi @include posix-functions/wmemchr.texi @include posix-functions/wmemcmp.texi @include posix-functions/wmemcpy.texi @include posix-functions/wmemmove.texi @include posix-functions/wmemset.texi @include posix-functions/wordexp.texi @include posix-functions/wordfree.texi @include posix-functions/wprintf.texi @include posix-functions/write.texi @include posix-functions/writev.texi @include posix-functions/wscanf.texi @include posix-functions/y0.texi @include posix-functions/y1.texi @include posix-functions/yn.texi @node Legacy Function Substitutes @chapter Past POSIX Function Substitutes This chapter describes which functions and function-like macros specified by older versions of POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. @nosuchmodulenote function @menu * bcmp:: * bcopy:: * bsd_signal:: * bzero:: * ecvt:: * fcvt:: * ftime:: * gcvt:: * getcontext:: * gethostbyaddr:: * gethostbyname:: * getwd:: * h_errno:: @ifhtml * _index:: @end ifhtml @ifnothtml * index:: @end ifnothtml * makecontext:: * mktemp:: * pthread_attr_getstackaddr:: * pthread_attr_setstackaddr:: * rindex:: * scalb:: * setcontext:: * swapcontext:: * ualarm:: * usleep:: * vfork:: * wcswcs:: @end menu @include pastposix-functions/bcmp.texi @include pastposix-functions/bcopy.texi @include pastposix-functions/bsd_signal.texi @include pastposix-functions/bzero.texi @include pastposix-functions/ecvt.texi @include pastposix-functions/fcvt.texi @include pastposix-functions/ftime.texi @include pastposix-functions/gcvt.texi @include pastposix-functions/getcontext.texi @include pastposix-functions/gethostbyaddr.texi @include pastposix-functions/gethostbyname.texi @include pastposix-functions/getwd.texi @include pastposix-functions/h_errno.texi @include pastposix-functions/index.texi @include pastposix-functions/makecontext.texi @include pastposix-functions/mktemp.texi @include pastposix-functions/pthread_attr_getstackaddr.texi @include pastposix-functions/pthread_attr_setstackaddr.texi @include pastposix-functions/rindex.texi @include pastposix-functions/scalb.texi @include pastposix-functions/setcontext.texi @include pastposix-functions/swapcontext.texi @include pastposix-functions/ualarm.texi @include pastposix-functions/usleep.texi @include pastposix-functions/vfork.texi @include pastposix-functions/wcswcs.texi @node Glibc Header File Substitutes @chapter Glibc Header File Substitutes This chapter describes which header files contained in GNU libc but not specified by ISO C or POSIX are substituted by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. @nosuchmodulenote header file @menu * a.out.h:: * aliases.h:: * alloca.h:: * ar.h:: * argp.h:: * argz.h:: * byteswap.h:: * crypt.h:: * endian.h:: * envz.h:: * err.h:: * error.h:: * execinfo.h:: * fpu_control.h:: * fstab.h:: * fts.h:: * getopt.h:: * gshadow.h:: * ieee754.h:: * ifaddrs.h:: * libintl.h:: * link.h:: * malloc.h:: * mcheck.h:: * mntent.h:: * obstack.h:: * paths.h:: * printf.h:: * pty.h:: * resolv.h:: * shadow.h:: * sys/ioctl.h:: * sys/random.h:: * sysexits.h:: * ttyent.h:: @end menu @include glibc-headers/a.out.texi @include glibc-headers/aliases.texi @include glibc-headers/alloca.texi @include glibc-headers/ar.texi @include glibc-headers/argp.texi @include glibc-headers/argz.texi @include glibc-headers/byteswap.texi @include glibc-headers/crypt.texi @include glibc-headers/endian.texi @include glibc-headers/envz.texi @include glibc-headers/err.texi @include glibc-headers/error.texi @include glibc-headers/execinfo.texi @include glibc-headers/fpu_control.texi @include glibc-headers/fstab.texi @include glibc-headers/fts.texi @include glibc-headers/getopt.texi @include glibc-headers/gshadow.texi @include glibc-headers/ieee754.texi @include glibc-headers/ifaddrs.texi @include glibc-headers/libintl.texi @include glibc-headers/link.texi @include glibc-headers/malloc.texi @include glibc-headers/mcheck.texi @include glibc-headers/mntent.texi @include glibc-headers/obstack.texi @include glibc-headers/paths.texi @include glibc-headers/printf.texi @include glibc-headers/pty.texi @include glibc-headers/resolv.texi @include glibc-headers/shadow.texi @include glibc-headers/sys_ioctl.texi @include glibc-headers/sys_random.texi @include glibc-headers/sysexits.texi @include glibc-headers/ttyent.texi @node Glibc Function Substitutes @chapter Glibc Function Substitutes This chapter describes which functions and function-like macros provided as extensions by at least GNU libc are also supported by Gnulib, which portability pitfalls are fixed by Gnulib, and which (known) portability problems are not worked around by Gnulib. @nosuchmodulenote function This list of functions is sorted according to the header that declares them. @menu * Glibc aio.h:: * Glibc aliases.h:: * Glibc argp.h:: * Glibc argz.h:: * Glibc arpa/inet.h:: * Glibc byteswap.h:: * Glibc complex.h:: * Glibc ctype.h:: * Glibc dirent.h:: * Glibc dlfcn.h:: * Glibc envz.h:: * Glibc err.h:: * Glibc errno.h:: * Glibc error.h:: * Glibc execinfo.h:: * Glibc fcntl.h:: * Glibc fenv.h:: * Glibc fmtmsg.h:: * Glibc fstab.h:: * Glibc fts.h:: * Glibc getopt.h:: * Glibc glob.h:: * Glibc gnu/libc-version.h:: * Glibc grp.h:: * Glibc gshadow.h:: * Glibc ifaddrs.h:: * Glibc libintl.h:: * Glibc link.h:: * Glibc malloc.h:: * Glibc math.h:: * Glibc mcheck.h:: * Glibc mntent.h:: * Glibc netdb.h:: * Glibc netinet/ether.h:: * Glibc netinet/in.h:: * Glibc obstack.h:: * Glibc poll.h:: * Glibc printf.h:: * Glibc pthread.h:: * Glibc pty.h:: * Glibc pwd.h:: * Glibc regex.h:: * Glibc regexp.h:: * Glibc resolv.h:: * Glibc rpc/auth.h:: * Glibc rpc/auth_des.h:: * Glibc rpc/auth_unix.h:: * Glibc rpc/clnt.h:: * Glibc rpc/key_prot.h:: * Glibc rpc/netdb.h:: * Glibc rpc/pmap_clnt.h:: * Glibc rpc/pmap_prot.h:: * Glibc rpc/pmap_rmt.h:: * Glibc rpc/rpc_msg.h:: * Glibc rpc/svc.h:: * Glibc rpc/xdr.h:: * Glibc rpcsvc/nislib.h:: * Glibc rpcsvc/nis_callback.h:: * Glibc rpcsvc/yp.h:: * Glibc rpcsvc/ypclnt.h:: * Glibc sched.h:: * Glibc search.h:: * Glibc selinux/selinux.h:: * Glibc semaphore.h:: * Glibc shadow.h:: * Glibc signal.h:: * Glibc spawn.h:: * Glibc stdio.h:: * Glibc stdlib.h:: * Glibc string.h:: * Glibc sys/auxv.h:: * Glibc sys/capability.h:: * Glibc sys/epoll.h:: * Glibc sys/eventfd.h:: * Glibc sys/fanotify.h:: * Glibc sys/file.h:: * Glibc sys/fsuid.h:: * Glibc sys/gmon.h:: * Glibc sys/inotify.h:: * Glibc sys/io.h and sys/perm.h:: * Glibc sys/kdaemon.h:: * Glibc sys/klog.h:: * Glibc sys/mman.h:: * Glibc sys/mount.h:: * Glibc sys/personality.h:: * Glibc sys/prctl.h:: * Glibc sys/profil.h:: * Glibc sys/ptrace.h:: * Glibc sys/quota.h:: * Glibc sys/random.h:: * Glibc sys/reboot.h:: * Glibc sys/resource.h:: * Glibc sys/sem.h:: * Glibc sys/sendfile.h:: * Glibc sys/signalfd.h:: * Glibc sys/single_threaded.h:: * Glibc sys/socket.h:: * Glibc sys/stat.h:: * Glibc sys/statfs.h:: * Glibc sys/swap.h:: * Glibc sys/sysctl.h:: * Glibc sys/sysinfo.h:: * Glibc sys/syslog.h:: * Glibc sys/sysmacros.h:: * Glibc sys/time.h:: * Glibc sys/timerfd.h:: * Glibc sys/timex.h:: * Glibc sys/uio.h:: * Glibc sys/ustat.h:: * Glibc sys/vlimit.h:: * Glibc sys/wait.h:: * Glibc sys/xattr.h:: * Glibc termios.h:: * Glibc time.h:: * Glibc ttyent.h:: * Glibc unistd.h:: * Glibc utmp.h:: * Glibc utmpx.h:: * Glibc wchar.h:: @end menu @c @node Glibc a.out.h @c @section Glibc @code{} @node Glibc aio.h @section Glibc Extensions to @code{} @menu * aio_init:: @end menu @include glibc-functions/aio_init.texi @node Glibc aliases.h @section Glibc @code{} @menu * endaliasent:: * getaliasbyname:: * getaliasbyname_r:: * getaliasent:: * getaliasent_r:: * setaliasent:: @end menu @include glibc-functions/endaliasent.texi @include glibc-functions/getaliasbyname.texi @include glibc-functions/getaliasbyname_r.texi @include glibc-functions/getaliasent.texi @include glibc-functions/getaliasent_r.texi @include glibc-functions/setaliasent.texi @c @node Glibc alloca.h @c @section Glibc @code{} @c @node Glibc ar.h @c @section Glibc @code{} @node Glibc argp.h @section Glibc @code{} @menu * argp_err_exit_status:: * argp_error:: * argp_failure:: * argp_help:: * argp_parse:: * argp_program_bug_address:: * argp_program_version:: * argp_program_version_hook:: * argp_state_help:: * argp_usage:: @end menu @include glibc-functions/argp_err_exit_status.texi @include glibc-functions/argp_error.texi @include glibc-functions/argp_failure.texi @include glibc-functions/argp_help.texi @include glibc-functions/argp_parse.texi @include glibc-functions/argp_program_bug_address.texi @include glibc-functions/argp_program_version.texi @include glibc-functions/argp_program_version_hook.texi @include glibc-functions/argp_state_help.texi @include glibc-functions/argp_usage.texi @node Glibc argz.h @section Glibc @code{} @menu * argz_add:: * argz_add_sep:: * argz_append:: * argz_count:: * argz_create:: * argz_create_sep:: * argz_delete:: * argz_extract:: * argz_insert:: * argz_next:: * argz_replace:: * argz_stringify:: @end menu @include glibc-functions/argz_add.texi @include glibc-functions/argz_add_sep.texi @include glibc-functions/argz_append.texi @include glibc-functions/argz_count.texi @include glibc-functions/argz_create.texi @include glibc-functions/argz_create_sep.texi @include glibc-functions/argz_delete.texi @include glibc-functions/argz_extract.texi @include glibc-functions/argz_insert.texi @include glibc-functions/argz_next.texi @include glibc-functions/argz_replace.texi @include glibc-functions/argz_stringify.texi @node Glibc arpa/inet.h @section Glibc Extensions to @code{} @menu * inet_aton:: * inet_lnaof:: * inet_makeaddr:: * inet_net_ntop:: * inet_net_pton:: * inet_netof:: * inet_network:: * inet_nsap_addr:: * inet_nsap_ntoa:: @end menu @include glibc-functions/inet_aton.texi @include glibc-functions/inet_lnaof.texi @include glibc-functions/inet_makeaddr.texi @include glibc-functions/inet_net_ntop.texi @include glibc-functions/inet_net_pton.texi @include glibc-functions/inet_netof.texi @include glibc-functions/inet_network.texi @include glibc-functions/inet_nsap_addr.texi @include glibc-functions/inet_nsap_ntoa.texi @c @node Glibc assert.h @c @section Glibc Extensions to @code{} @node Glibc byteswap.h @section Glibc @code{} @menu * bswap_16:: * bswap_32:: * bswap_64:: @end menu @include glibc-functions/bswap_16.texi @include glibc-functions/bswap_32.texi @include glibc-functions/bswap_64.texi @node Glibc complex.h @section Glibc Extensions to @code{} @menu * clog10:: * clog10f:: * clog10l:: @end menu @include glibc-functions/clog10.texi @include glibc-functions/clog10f.texi @include glibc-functions/clog10l.texi @c @node Glibc cpio.h @c @section Glibc Extensions to @code{} @c @node Glibc crypt.h @c @section Glibc @code{} @node Glibc ctype.h @section Glibc Extensions to @code{} @menu * isctype:: @end menu @include glibc-functions/isctype.texi @node Glibc dirent.h @section Glibc Extensions to @code{} @menu * getdirentries:: * scandirat:: * versionsort:: @end menu @include glibc-functions/getdirentries.texi @include glibc-functions/scandirat.texi @include glibc-functions/versionsort.texi @node Glibc dlfcn.h @section Glibc Extensions to @code{} @menu * dladdr:: * dladdr1:: * dlinfo:: * dlmopen:: * dlvsym:: @end menu @include glibc-functions/dladdr.texi @include glibc-functions/dladdr1.texi @include glibc-functions/dlinfo.texi @include glibc-functions/dlmopen.texi @include glibc-functions/dlvsym.texi @c @node Glibc endian.h @c @section Glibc @code{} @node Glibc envz.h @section Glibc @code{} @menu * envz_add:: * envz_entry:: * envz_get:: * envz_merge:: * envz_remove:: * envz_strip:: @end menu @include glibc-functions/envz_add.texi @include glibc-functions/envz_entry.texi @include glibc-functions/envz_get.texi @include glibc-functions/envz_merge.texi @include glibc-functions/envz_remove.texi @include glibc-functions/envz_strip.texi @node Glibc err.h @section Glibc @code{} @menu * err:: * errx:: * verr:: * verrx:: * vwarn:: * vwarnx:: * warn:: * warnx:: @end menu @include glibc-functions/err.texi @include glibc-functions/errx.texi @include glibc-functions/verr.texi @include glibc-functions/verrx.texi @include glibc-functions/vwarn.texi @include glibc-functions/vwarnx.texi @include glibc-functions/warn.texi @include glibc-functions/warnx.texi @node Glibc errno.h @section Glibc Extensions to @code{} @menu * program_invocation_name:: * program_invocation_short_name:: @end menu @include glibc-functions/program_invocation_name.texi @include glibc-functions/program_invocation_short_name.texi @node Glibc error.h @section Glibc @code{} @menu * error:: * error_at_line:: * error_message_count:: * error_one_per_line:: * error_print_progname:: @end menu @include glibc-functions/error.texi @include glibc-functions/error_at_line.texi @include glibc-functions/error_message_count.texi @include glibc-functions/error_one_per_line.texi @include glibc-functions/error_print_progname.texi @node Glibc execinfo.h @section Glibc @code{} @menu * backtrace:: * backtrace_symbols:: * backtrace_symbols_fd:: @end menu @include glibc-functions/backtrace.texi @include glibc-functions/backtrace_symbols.texi @include glibc-functions/backtrace_symbols_fd.texi @node Glibc fcntl.h @section Glibc Extensions to @code{} @menu * fallocate:: * name_to_handle_at:: * readahead:: * open_by_handle_at:: * sync_file_range:: @end menu @include glibc-functions/fallocate.texi @include glibc-functions/name_to_handle_at.texi @include glibc-functions/readahead.texi @include glibc-functions/open_by_handle_at.texi @include glibc-functions/sync_file_range.texi @node Glibc fenv.h @section Glibc Extensions to @code{} @menu * fedisableexcept:: * feenableexcept:: * fegetexcept:: @end menu @include glibc-functions/fedisableexcept.texi @include glibc-functions/feenableexcept.texi @include glibc-functions/fegetexcept.texi @c @node Glibc float.h @c @section Glibc Extensions to @code{} @node Glibc fmtmsg.h @section Glibc Extensions to @code{} @menu * addseverity:: @end menu @include glibc-functions/addseverity.texi @c @node Glibc fnmatch.h @c @section Glibc Extensions to @code{} @c @node Glibc fpu_control.h @c @section Glibc @code{} @node Glibc fstab.h @section Glibc @code{} @menu * endfsent:: * getfsent:: * getfsfile:: * getfsspec:: * setfsent:: @end menu @include glibc-functions/endfsent.texi @include glibc-functions/getfsent.texi @include glibc-functions/getfsfile.texi @include glibc-functions/getfsspec.texi @include glibc-functions/setfsent.texi @node Glibc fts.h @section Glibc @code{} @menu * fts_children:: * fts_close:: * fts_open:: * fts_read:: * fts_set:: @end menu @include glibc-functions/fts_children.texi @include glibc-functions/fts_close.texi @include glibc-functions/fts_open.texi @include glibc-functions/fts_read.texi @include glibc-functions/fts_set.texi @c @node Glibc ftw.h @c @section Glibc Extensions to @code{} @node Glibc getopt.h @section Glibc @code{} @menu * getopt_long:: * getopt_long_only:: @end menu @include glibc-functions/getopt_long.texi @include glibc-functions/getopt_long_only.texi @node Glibc glob.h @section Glibc Extensions to @code{} @menu * glob_pattern_p:: @end menu @include glibc-functions/glob_pattern_p.texi @node Glibc gnu/libc-version.h @section Glibc Extensions to @code{} @menu * gnu_get_libc_release:: * gnu_get_libc_version:: @end menu @include glibc-functions/gnu_get_libc_release.texi @include glibc-functions/gnu_get_libc_version.texi @node Glibc grp.h @section Glibc Extensions to @code{} @menu * fgetgrent:: * fgetgrent_r:: * getgrent_r:: * getgrouplist:: * initgroups:: * putgrent:: * setgroups:: @end menu @include glibc-functions/fgetgrent.texi @include glibc-functions/fgetgrent_r.texi @include glibc-functions/getgrent_r.texi @include glibc-functions/getgrouplist.texi @include glibc-functions/initgroups.texi @include glibc-functions/putgrent.texi @include glibc-functions/setgroups.texi @node Glibc gshadow.h @section Glibc @code{} @menu * endsgent:: * fgetsgent:: * fgetsgent_r:: * getsgent:: * getsgent_r:: * getsgnam:: * getsgnam_r:: * putsgent:: * setsgent:: * sgetsgent:: * sgetsgent_r:: @end menu @include glibc-functions/endsgent.texi @include glibc-functions/fgetsgent.texi @include glibc-functions/fgetsgent_r.texi @include glibc-functions/getsgent.texi @include glibc-functions/getsgent_r.texi @include glibc-functions/getsgnam.texi @include glibc-functions/getsgnam_r.texi @include glibc-functions/putsgent.texi @include glibc-functions/setsgent.texi @include glibc-functions/sgetsgent.texi @include glibc-functions/sgetsgent_r.texi @c @node Glibc iconv.h @c @section Glibc Extensions to @code{} @c @node Glibc ieee754.h @c @section Glibc @code{} @node Glibc ifaddrs.h @section Glibc @code{} @menu * getifaddrs:: * freeifaddrs:: @end menu @include glibc-functions/getifaddrs.texi @include glibc-functions/freeifaddrs.texi @c @node Glibc inttypes.h @c @section Glibc Extensions to @code{} @c @node Glibc iso646.h @c @section Glibc Extensions to @code{} @c @node Glibc langinfo.h @c @section Glibc Extensions to @code{} @c @node Glibc libgen.h @c @section Glibc Extensions to @code{} @node Glibc libintl.h @section Glibc @code{} @menu * bind_textdomain_codeset:: * bindtextdomain:: * dcgettext:: * dcngettext:: * dgettext:: * dngettext:: * gettext:: * ngettext:: * textdomain:: @end menu @include glibc-functions/bind_textdomain_codeset.texi @include glibc-functions/bindtextdomain.texi @include glibc-functions/dcgettext.texi @include glibc-functions/dcngettext.texi @include glibc-functions/dgettext.texi @include glibc-functions/dngettext.texi @include glibc-functions/gettext.texi @include glibc-functions/ngettext.texi @include glibc-functions/textdomain.texi @c @node Glibc limits.h @c @section Glibc Extensions to @code{} @node Glibc link.h @section Glibc @code{} @menu * dl_iterate_phdr:: @end menu @include glibc-functions/dl_iterate_phdr.texi @c @node Glibc locale.h @c @section Glibc Extensions to @code{} @node Glibc malloc.h @section Glibc @code{} @menu * mallinfo:: * mallinfo2:: * malloc_info:: * malloc_stats:: * malloc_trim:: * malloc_usable_size:: * mallopt:: * memalign:: * pvalloc:: @end menu @include glibc-functions/mallinfo.texi @include glibc-functions/mallinfo2.texi @include glibc-functions/malloc_info.texi @include glibc-functions/malloc_stats.texi @include glibc-functions/malloc_trim.texi @include glibc-functions/malloc_usable_size.texi @include glibc-functions/mallopt.texi @include glibc-functions/memalign.texi @include glibc-functions/pvalloc.texi @node Glibc math.h @section Glibc Extensions to @code{} @menu * drem:: * dremf:: * dreml:: * exp10:: * exp10f:: * exp10l:: * finite:: * finitef:: * finitel:: * gamma:: * gammaf:: * gammal:: * isinff:: * isinfl:: * isnanf:: * isnanl:: * j0f:: * j0l:: * j1f:: * j1l:: * jnf:: * jnl:: * lgamma_r:: * lgammaf_r:: * lgammal_r:: * matherr:: * pow10:: * pow10f:: * pow10l:: * scalbf:: * scalbl:: * significand:: * significandf:: * significandl:: * sincos:: * sincosf:: * sincosl:: * y0f:: * y0l:: * y1f:: * y1l:: * ynf:: * ynl:: @end menu @include glibc-functions/drem.texi @include glibc-functions/dremf.texi @include glibc-functions/dreml.texi @include glibc-functions/exp10.texi @include glibc-functions/exp10f.texi @include glibc-functions/exp10l.texi @include glibc-functions/finite.texi @include glibc-functions/finitef.texi @include glibc-functions/finitel.texi @include glibc-functions/gamma.texi @include glibc-functions/gammaf.texi @include glibc-functions/gammal.texi @include glibc-functions/isinff.texi @include glibc-functions/isinfl.texi @include glibc-functions/isnanf.texi @include glibc-functions/isnanl.texi @include glibc-functions/j0f.texi @include glibc-functions/j0l.texi @include glibc-functions/j1f.texi @include glibc-functions/j1l.texi @include glibc-functions/jnf.texi @include glibc-functions/jnl.texi @include glibc-functions/lgamma_r.texi @include glibc-functions/lgammaf_r.texi @include glibc-functions/lgammal_r.texi @include glibc-functions/matherr.texi @include glibc-functions/pow10.texi @include glibc-functions/pow10f.texi @include glibc-functions/pow10l.texi @include glibc-functions/scalbf.texi @include glibc-functions/scalbl.texi @include glibc-functions/significand.texi @include glibc-functions/significandf.texi @include glibc-functions/significandl.texi @include glibc-functions/sincos.texi @include glibc-functions/sincosf.texi @include glibc-functions/sincosl.texi @include glibc-functions/y0f.texi @include glibc-functions/y0l.texi @include glibc-functions/y1f.texi @include glibc-functions/y1l.texi @include glibc-functions/ynf.texi @include glibc-functions/ynl.texi @node Glibc mcheck.h @section Glibc @code{} @menu * mcheck:: * mcheck_check_all:: * mcheck_pedantic:: * mprobe:: * mtrace:: * muntrace:: @end menu @include glibc-functions/mcheck.texi @include glibc-functions/mcheck_check_all.texi @include glibc-functions/mcheck_pedantic.texi @include glibc-functions/mprobe.texi @include glibc-functions/mtrace.texi @include glibc-functions/muntrace.texi @c @node Glibc monetary.h @c @section Glibc Extensions to @code{} @node Glibc mntent.h @section Glibc @code{} @menu * addmntent:: * endmntent:: * getmntent:: * getmntent_r:: * hasmntopt:: * setmntent:: @end menu @include glibc-functions/addmntent.texi @include glibc-functions/endmntent.texi @include glibc-functions/getmntent.texi @include glibc-functions/getmntent_r.texi @include glibc-functions/hasmntopt.texi @include glibc-functions/setmntent.texi @c @node Glibc mqueue.h @c @section Glibc Extensions to @code{} @c @node Glibc ndbm.h @c @section Glibc Extensions to @code{} @node Glibc netdb.h @section Glibc Extensions to @code{} @menu * endnetgrent:: * gethostbyaddr_r:: * gethostbyname2:: * gethostbyname2_r:: * gethostbyname_r:: * gethostent_r:: * getnetbyaddr_r:: * getnetbyname_r:: * getnetent_r:: * getnetgrent:: * getnetgrent_r:: * getprotobyname_r:: * getprotobynumber_r:: * getprotoent_r:: * getservbyname_r:: * getservbyport_r:: * getservent_r:: * herror:: * hstrerror:: * innetgr:: * rcmd:: * rcmd_af:: * rexec:: * rexec_af:: * rresvport:: * rresvport_af:: * ruserok:: * ruserok_af:: * setnetgrent:: @end menu @include glibc-functions/endnetgrent.texi @include glibc-functions/gethostbyaddr_r.texi @include glibc-functions/gethostbyname2.texi @include glibc-functions/gethostbyname2_r.texi @include glibc-functions/gethostbyname_r.texi @include glibc-functions/gethostent_r.texi @include glibc-functions/getnetbyaddr_r.texi @include glibc-functions/getnetbyname_r.texi @include glibc-functions/getnetent_r.texi @include glibc-functions/getnetgrent.texi @include glibc-functions/getnetgrent_r.texi @include glibc-functions/getprotobyname_r.texi @include glibc-functions/getprotobynumber_r.texi @include glibc-functions/getprotoent_r.texi @include glibc-functions/getservbyname_r.texi @include glibc-functions/getservbyport_r.texi @include glibc-functions/getservent_r.texi @include glibc-functions/herror.texi @include glibc-functions/hstrerror.texi @include glibc-functions/innetgr.texi @include glibc-functions/rcmd.texi @include glibc-functions/rcmd_af.texi @include glibc-functions/rexec.texi @include glibc-functions/rexec_af.texi @include glibc-functions/rresvport.texi @include glibc-functions/rresvport_af.texi @include glibc-functions/ruserok.texi @include glibc-functions/ruserok_af.texi @include glibc-functions/setnetgrent.texi @node Glibc netinet/ether.h @section Glibc @code{} @menu * ether_aton:: * ether_aton_r:: * ether_hostton:: * ether_line:: * ether_ntoa:: * ether_ntoa_r:: * ether_ntohost:: @end menu @include glibc-functions/ether_aton.texi @include glibc-functions/ether_aton_r.texi @include glibc-functions/ether_hostton.texi @include glibc-functions/ether_line.texi @include glibc-functions/ether_ntoa.texi @include glibc-functions/ether_ntoa_r.texi @include glibc-functions/ether_ntohost.texi @node Glibc netinet/in.h @section Glibc Extensions to @code{} @menu * bindresvport:: * getipv4sourcefilter:: * getsourcefilter:: * in6addr_any:: * in6addr_loopback:: * inet6_option_alloc:: * inet6_option_append:: * inet6_option_find:: * inet6_option_init:: * inet6_option_next:: * inet6_option_space:: * inet6_opt_append:: * inet6_opt_find:: * inet6_opt_finish:: * inet6_opt_get_val:: * inet6_opt_init:: * inet6_opt_next:: * inet6_opt_set_val:: * inet6_rth_add:: * inet6_rth_getaddr:: * inet6_rth_init:: * inet6_rth_reverse:: * inet6_rth_segments:: * inet6_rth_space:: * setipv4sourcefilter:: * setsourcefilter:: @end menu @include glibc-functions/bindresvport.texi @include glibc-functions/getipv4sourcefilter.texi @include glibc-functions/getsourcefilter.texi @include glibc-functions/in6addr_any.texi @include glibc-functions/in6addr_loopback.texi @include glibc-functions/inet6_option_alloc.texi @include glibc-functions/inet6_option_append.texi @include glibc-functions/inet6_option_find.texi @include glibc-functions/inet6_option_init.texi @include glibc-functions/inet6_option_next.texi @include glibc-functions/inet6_option_space.texi @include glibc-functions/inet6_opt_append.texi @include glibc-functions/inet6_opt_find.texi @include glibc-functions/inet6_opt_finish.texi @include glibc-functions/inet6_opt_get_val.texi @include glibc-functions/inet6_opt_init.texi @include glibc-functions/inet6_opt_next.texi @include glibc-functions/inet6_opt_set_val.texi @include glibc-functions/inet6_rth_add.texi @include glibc-functions/inet6_rth_getaddr.texi @include glibc-functions/inet6_rth_init.texi @include glibc-functions/inet6_rth_reverse.texi @include glibc-functions/inet6_rth_segments.texi @include glibc-functions/inet6_rth_space.texi @include glibc-functions/setipv4sourcefilter.texi @include glibc-functions/setsourcefilter.texi @c @node Glibc nl_types.h @c @section Glibc Extensions to @code{} @node Glibc obstack.h @section Glibc @code{} @menu * obstack_alloc_failed_handler:: * obstack_exit_failure:: * obstack_free:: * obstack_printf:: * obstack_vprintf:: @end menu @include glibc-functions/obstack_alloc_failed_handler.texi @include glibc-functions/obstack_exit_failure.texi @include glibc-functions/obstack_free.texi @include glibc-functions/obstack_printf.texi @include glibc-functions/obstack_vprintf.texi @c @node Glibc paths.h @c @section Glibc @code{} @node Glibc poll.h @section Glibc Extensions to @code{} @menu * ppoll:: @end menu @include glibc-functions/ppoll.texi @node Glibc printf.h @section Glibc @code{} @menu * parse_printf_format:: * printf_size:: * printf_size_info:: * register_printf_function:: * register_printf_modifier:: * register_printf_specifier:: * register_printf_type:: @end menu @include glibc-functions/parse_printf_format.texi @include glibc-functions/printf_size.texi @include glibc-functions/printf_size_info.texi @include glibc-functions/register_printf_function.texi @include glibc-functions/register_printf_modifier.texi @include glibc-functions/register_printf_specifier.texi @include glibc-functions/register_printf_type.texi @node Glibc pthread.h @section Glibc Extensions to @code{} @menu * pthread_attr_getaffinity_np:: * pthread_attr_setaffinity_np:: * pthread_attr_getsigmask_np:: * pthread_attr_setsigmask_np:: * pthread_clockjoin_np:: * pthread_cond_clockwait:: * pthread_getaffinity_np:: * pthread_getattr_default_np:: * pthread_getattr_np:: * pthread_getname_np:: * pthread_kill_other_threads_np:: * pthread_mutex_clocklock:: * pthread_rwlock_clockrdlock:: * pthread_rwlock_clockwrlock:: * pthread_rwlockattr_getkind_np:: * pthread_rwlockattr_setkind_np:: * pthread_setaffinity_np:: * pthread_setattr_default_np:: * pthread_setname_np:: * pthread_sigqueue:: * pthread_timedjoin_np:: * pthread_tryjoin_np:: @end menu @include glibc-functions/pthread_attr_getaffinity_np.texi @include glibc-functions/pthread_attr_setaffinity_np.texi @include glibc-functions/pthread_attr_getsigmask_np.texi @include glibc-functions/pthread_attr_setsigmask_np.texi @include glibc-functions/pthread_clockjoin_np.texi @include glibc-functions/pthread_cond_clockwait.texi @include glibc-functions/pthread_getaffinity_np.texi @include glibc-functions/pthread_getattr_default_np.texi @include glibc-functions/pthread_getattr_np.texi @include glibc-functions/pthread_getname_np.texi @include glibc-functions/pthread_kill_other_threads_np.texi @include glibc-functions/pthread_mutex_clocklock.texi @include glibc-functions/pthread_rwlock_clockrdlock.texi @include glibc-functions/pthread_rwlock_clockwrlock.texi @include glibc-functions/pthread_rwlockattr_getkind_np.texi @include glibc-functions/pthread_rwlockattr_setkind_np.texi @include glibc-functions/pthread_setaffinity_np.texi @include glibc-functions/pthread_setattr_default_np.texi @include glibc-functions/pthread_setname_np.texi @include glibc-functions/pthread_sigqueue.texi @include glibc-functions/pthread_timedjoin_np.texi @include glibc-functions/pthread_tryjoin_np.texi @node Glibc pty.h @section Glibc @code{} @menu * forkpty:: * openpty:: @end menu @include glibc-functions/forkpty.texi @include glibc-functions/openpty.texi @node Glibc pwd.h @section Glibc Extensions to @code{} @menu * fgetpwent:: * fgetpwent_r:: * getpw:: * getpwent_r:: * putpwent:: @end menu @include glibc-functions/fgetpwent.texi @include glibc-functions/fgetpwent_r.texi @include glibc-functions/getpw.texi @include glibc-functions/getpwent_r.texi @include glibc-functions/putpwent.texi @node Glibc regex.h @section Glibc Extensions to @code{} @menu * re_comp:: * re_compile_fastmap:: * re_compile_pattern:: * re_exec:: * re_match:: * re_match_2:: * re_search:: * re_search_2:: * re_set_registers:: * re_set_syntax:: * re_syntax_options:: @end menu @include glibc-functions/re_comp.texi @include glibc-functions/re_compile_fastmap.texi @include glibc-functions/re_compile_pattern.texi @include glibc-functions/re_exec.texi @include glibc-functions/re_match.texi @include glibc-functions/re_match_2.texi @include glibc-functions/re_search.texi @include glibc-functions/re_search_2.texi @include glibc-functions/re_set_registers.texi @include glibc-functions/re_set_syntax.texi @include glibc-functions/re_syntax_options.texi @node Glibc regexp.h @section Glibc @code{} @menu * advance:: * loc1:: * loc2:: * locs:: * step:: @end menu @include glibc-functions/advance.texi @include glibc-functions/loc1.texi @include glibc-functions/loc2.texi @include glibc-functions/locs.texi @include glibc-functions/step.texi @node Glibc resolv.h @section Glibc @code{} @menu * dn_comp:: * dn_expand:: * dn_skipname:: * res_dnok:: * res_hnok:: * res_init:: * res_mailok:: * res_mkquery:: * res_nmkquery:: * res_nquery:: * res_nquerydomain:: * res_nsearch:: * res_nsend:: * res_ownok:: * res_query:: * res_querydomain:: * res_search:: * res_send:: @end menu @include glibc-functions/dn_comp.texi @include glibc-functions/dn_expand.texi @include glibc-functions/dn_skipname.texi @include glibc-functions/res_dnok.texi @include glibc-functions/res_hnok.texi @include glibc-functions/res_init.texi @include glibc-functions/res_mailok.texi @include glibc-functions/res_mkquery.texi @include glibc-functions/res_nmkquery.texi @include glibc-functions/res_nquery.texi @include glibc-functions/res_nquerydomain.texi @include glibc-functions/res_nsearch.texi @include glibc-functions/res_nsend.texi @include glibc-functions/res_ownok.texi @include glibc-functions/res_query.texi @include glibc-functions/res_querydomain.texi @include glibc-functions/res_search.texi @include glibc-functions/res_send.texi @node Glibc rpc/auth.h @section Glibc @code{} @menu * authdes_create:: * authdes_pk_create:: * authnone_create:: * authunix_create:: * authunix_create_default:: * getnetname:: * host2netname:: * key_decryptsession:: * key_decryptsession_pk:: * key_encryptsession:: * key_encryptsession_pk:: * key_gendes:: * key_get_conv:: * key_secretkey_is_set:: * key_setsecret:: * netname2host:: * netname2user:: * user2netname:: * xdr_des_block:: * xdr_opaque_auth:: @end menu @include glibc-functions/authdes_create.texi @include glibc-functions/authdes_pk_create.texi @include glibc-functions/authnone_create.texi @include glibc-functions/authunix_create.texi @include glibc-functions/authunix_create_default.texi @include glibc-functions/getnetname.texi @include glibc-functions/host2netname.texi @include glibc-functions/key_decryptsession.texi @include glibc-functions/key_decryptsession_pk.texi @include glibc-functions/key_encryptsession.texi @include glibc-functions/key_encryptsession_pk.texi @include glibc-functions/key_gendes.texi @include glibc-functions/key_get_conv.texi @include glibc-functions/key_secretkey_is_set.texi @include glibc-functions/key_setsecret.texi @include glibc-functions/netname2host.texi @include glibc-functions/netname2user.texi @include glibc-functions/user2netname.texi @include glibc-functions/xdr_des_block.texi @include glibc-functions/xdr_opaque_auth.texi @node Glibc rpc/auth_des.h @section Glibc @code{} @menu * authdes_getucred:: * getpublickey:: * getsecretkey:: * rtime:: @end menu @include glibc-functions/authdes_getucred.texi @include glibc-functions/getpublickey.texi @include glibc-functions/getsecretkey.texi @include glibc-functions/rtime.texi @node Glibc rpc/auth_unix.h @section Glibc @code{} @menu * xdr_authunix_parms:: @end menu @include glibc-functions/xdr_authunix_parms.texi @node Glibc rpc/clnt.h @section Glibc @code{} @menu * callrpc:: * clnt_create:: * clnt_pcreateerror:: * clnt_perrno:: * clnt_perror:: * clnt_spcreateerror:: * clnt_sperrno:: * clnt_sperror:: * clntraw_create:: * clnttcp_create:: * clntudp_bufcreate:: * clntudp_create:: * clntunix_create:: * get_myaddress:: * getrpcport:: * rpc_createerr:: @end menu @include glibc-functions/callrpc.texi @include glibc-functions/clnt_create.texi @include glibc-functions/clnt_pcreateerror.texi @include glibc-functions/clnt_perrno.texi @include glibc-functions/clnt_perror.texi @include glibc-functions/clnt_spcreateerror.texi @include glibc-functions/clnt_sperrno.texi @include glibc-functions/clnt_sperror.texi @include glibc-functions/clntraw_create.texi @include glibc-functions/clnttcp_create.texi @include glibc-functions/clntudp_bufcreate.texi @include glibc-functions/clntudp_create.texi @include glibc-functions/clntunix_create.texi @include glibc-functions/get_myaddress.texi @include glibc-functions/getrpcport.texi @include glibc-functions/rpc_createerr.texi @c @node Glibc rpc/des_crypt.h @c @section Glibc @code{} @node Glibc rpc/key_prot.h @section Glibc @code{} @menu * xdr_cryptkeyarg:: * xdr_cryptkeyarg2:: * xdr_cryptkeyres:: * xdr_getcredres:: * xdr_key_netstarg:: * xdr_key_netstres:: * xdr_keybuf:: * xdr_keystatus:: * xdr_netnamestr:: * xdr_unixcred:: @end menu @include glibc-functions/xdr_cryptkeyarg.texi @include glibc-functions/xdr_cryptkeyarg2.texi @include glibc-functions/xdr_cryptkeyres.texi @include glibc-functions/xdr_getcredres.texi @include glibc-functions/xdr_key_netstarg.texi @include glibc-functions/xdr_key_netstres.texi @include glibc-functions/xdr_keybuf.texi @include glibc-functions/xdr_keystatus.texi @include glibc-functions/xdr_netnamestr.texi @include glibc-functions/xdr_unixcred.texi @node Glibc rpc/netdb.h @section Glibc @code{} @menu * endrpcent:: * getrpcbyname:: * getrpcbyname_r:: * getrpcbynumber:: * getrpcbynumber_r:: * getrpcent:: * getrpcent_r:: * setrpcent:: @end menu @include glibc-functions/endrpcent.texi @include glibc-functions/getrpcbyname.texi @include glibc-functions/getrpcbyname_r.texi @include glibc-functions/getrpcbynumber.texi @include glibc-functions/getrpcbynumber_r.texi @include glibc-functions/getrpcent.texi @include glibc-functions/getrpcent_r.texi @include glibc-functions/setrpcent.texi @node Glibc rpc/pmap_clnt.h @section Glibc @code{} @menu * clnt_broadcast:: * pmap_getmaps:: * pmap_getport:: * pmap_rmtcall:: * pmap_set:: * pmap_unset:: @end menu @include glibc-functions/clnt_broadcast.texi @include glibc-functions/pmap_getmaps.texi @include glibc-functions/pmap_getport.texi @include glibc-functions/pmap_rmtcall.texi @include glibc-functions/pmap_set.texi @include glibc-functions/pmap_unset.texi @node Glibc rpc/pmap_prot.h @section Glibc @code{} @menu * xdr_pmap:: * xdr_pmaplist:: @end menu @include glibc-functions/xdr_pmap.texi @include glibc-functions/xdr_pmaplist.texi @node Glibc rpc/pmap_rmt.h @section Glibc @code{} @menu * xdr_rmtcall_args:: * xdr_rmtcallres:: @end menu @include glibc-functions/xdr_rmtcall_args.texi @include glibc-functions/xdr_rmtcallres.texi @node Glibc rpc/rpc_msg.h @section Glibc @code{} @menu * xdr_callhdr:: * xdr_callmsg:: * xdr_replymsg:: @end menu @include glibc-functions/xdr_callhdr.texi @include glibc-functions/xdr_callmsg.texi @include glibc-functions/xdr_replymsg.texi @node Glibc rpc/svc.h @section Glibc @code{} @menu * svc_exit:: * svc_fdset:: * svc_getreq:: * svc_getreq_common:: * svc_getreq_poll:: * svc_getreqset:: * svc_max_pollfd:: * svc_pollfd:: * svc_register:: * svc_run:: * svc_sendreply:: * svc_unregister:: * svcerr_auth:: * svcerr_decode:: * svcerr_noproc:: * svcerr_noprog:: * svcerr_progvers:: * svcerr_systemerr:: * svcerr_weakauth:: * svcraw_create:: * svctcp_create:: * svcudp_bufcreate:: * svcudp_create:: * svcunix_create:: * xprt_register:: * xprt_unregister:: @end menu @include glibc-functions/svc_exit.texi @include glibc-functions/svc_fdset.texi @include glibc-functions/svc_getreq.texi @include glibc-functions/svc_getreq_common.texi @include glibc-functions/svc_getreq_poll.texi @include glibc-functions/svc_getreqset.texi @include glibc-functions/svc_max_pollfd.texi @include glibc-functions/svc_pollfd.texi @include glibc-functions/svc_register.texi @include glibc-functions/svc_run.texi @include glibc-functions/svc_sendreply.texi @include glibc-functions/svc_unregister.texi @include glibc-functions/svcerr_auth.texi @include glibc-functions/svcerr_decode.texi @include glibc-functions/svcerr_noproc.texi @include glibc-functions/svcerr_noprog.texi @include glibc-functions/svcerr_progvers.texi @include glibc-functions/svcerr_systemerr.texi @include glibc-functions/svcerr_weakauth.texi @include glibc-functions/svcraw_create.texi @include glibc-functions/svctcp_create.texi @include glibc-functions/svcudp_bufcreate.texi @include glibc-functions/svcudp_create.texi @include glibc-functions/svcunix_create.texi @include glibc-functions/xprt_register.texi @include glibc-functions/xprt_unregister.texi @node Glibc rpc/xdr.h @section Glibc @code{} @menu * xdr_array:: * xdr_bool:: * xdr_bytes:: * xdr_char:: * xdr_double:: * xdr_enum:: * xdr_float:: * xdr_free:: * xdr_hyper:: * xdr_int:: * xdr_int16_t:: * xdr_int32_t:: * xdr_int64_t:: * xdr_int8_t:: * xdr_long:: * xdr_longlong_t:: * xdr_netobj:: * xdr_opaque:: * xdr_pointer:: * xdr_quad_t:: * xdr_reference:: * xdr_short:: * xdr_sizeof:: * xdr_string:: * xdr_u_char:: * xdr_u_hyper:: * xdr_u_int:: * xdr_u_long:: * xdr_u_longlong_t:: * xdr_u_quad_t:: * xdr_u_short:: * xdr_uint16_t:: * xdr_uint32_t:: * xdr_uint64_t:: * xdr_uint8_t:: * xdr_union:: * xdr_vector:: * xdr_void:: * xdr_wrapstring:: * xdrmem_create:: * xdrrec_create:: * xdrrec_endofrecord:: * xdrrec_eof:: * xdrrec_skiprecord:: * xdrstdio_create:: @end menu @include glibc-functions/xdr_array.texi @include glibc-functions/xdr_bool.texi @include glibc-functions/xdr_bytes.texi @include glibc-functions/xdr_char.texi @include glibc-functions/xdr_double.texi @include glibc-functions/xdr_enum.texi @include glibc-functions/xdr_float.texi @include glibc-functions/xdr_free.texi @include glibc-functions/xdr_hyper.texi @include glibc-functions/xdr_int.texi @include glibc-functions/xdr_int16_t.texi @include glibc-functions/xdr_int32_t.texi @include glibc-functions/xdr_int64_t.texi @include glibc-functions/xdr_int8_t.texi @include glibc-functions/xdr_long.texi @include glibc-functions/xdr_longlong_t.texi @include glibc-functions/xdr_netobj.texi @include glibc-functions/xdr_opaque.texi @include glibc-functions/xdr_pointer.texi @include glibc-functions/xdr_quad_t.texi @include glibc-functions/xdr_reference.texi @include glibc-functions/xdr_short.texi @include glibc-functions/xdr_sizeof.texi @include glibc-functions/xdr_string.texi @include glibc-functions/xdr_u_char.texi @include glibc-functions/xdr_u_hyper.texi @include glibc-functions/xdr_u_int.texi @include glibc-functions/xdr_u_long.texi @include glibc-functions/xdr_u_longlong_t.texi @include glibc-functions/xdr_u_quad_t.texi @include glibc-functions/xdr_u_short.texi @include glibc-functions/xdr_uint16_t.texi @include glibc-functions/xdr_uint32_t.texi @include glibc-functions/xdr_uint64_t.texi @include glibc-functions/xdr_uint8_t.texi @include glibc-functions/xdr_union.texi @include glibc-functions/xdr_vector.texi @include glibc-functions/xdr_void.texi @include glibc-functions/xdr_wrapstring.texi @include glibc-functions/xdrmem_create.texi @include glibc-functions/xdrrec_create.texi @include glibc-functions/xdrrec_endofrecord.texi @include glibc-functions/xdrrec_eof.texi @include glibc-functions/xdrrec_skiprecord.texi @include glibc-functions/xdrstdio_create.texi @node Glibc rpcsvc/nislib.h @section Glibc @code{} @menu * nis_add:: * nis_add_entry:: * nis_addmember:: * nis_checkpoint:: * nis_clone_object:: * nis_creategroup:: * nis_destroy_object:: * nis_destroygroup:: * nis_dir_cmp:: * nis_domain_of:: * nis_domain_of_r:: * nis_first_entry:: * nis_freenames:: * nis_freeresult:: * nis_freeservlist:: * nis_freetags:: * nis_getnames:: * nis_getservlist:: * nis_ismember:: * nis_leaf_of:: * nis_leaf_of_r:: * nis_lerror:: * nis_list:: * nis_local_directory:: * nis_local_group:: * nis_local_host:: * nis_local_principal:: * nis_lookup:: * nis_mkdir:: * nis_modify:: * nis_modify_entry:: * nis_name_of:: * nis_name_of_r:: * nis_next_entry:: * nis_perror:: * nis_ping:: * nis_print_directory:: * nis_print_entry:: * nis_print_group:: * nis_print_group_entry:: * nis_print_link:: * nis_print_object:: * nis_print_result:: * nis_print_rights:: * nis_print_table:: * nis_remove:: * nis_remove_entry:: * nis_removemember:: * nis_rmdir:: * nis_servstate:: * nis_sperrno:: * nis_sperror:: * nis_sperror_r:: * nis_stats:: * nis_verifygroup:: @end menu @include glibc-functions/nis_add.texi @include glibc-functions/nis_add_entry.texi @include glibc-functions/nis_addmember.texi @include glibc-functions/nis_checkpoint.texi @include glibc-functions/nis_clone_object.texi @include glibc-functions/nis_creategroup.texi @include glibc-functions/nis_destroy_object.texi @include glibc-functions/nis_destroygroup.texi @include glibc-functions/nis_dir_cmp.texi @include glibc-functions/nis_domain_of.texi @include glibc-functions/nis_domain_of_r.texi @include glibc-functions/nis_first_entry.texi @include glibc-functions/nis_freenames.texi @include glibc-functions/nis_freeresult.texi @include glibc-functions/nis_freeservlist.texi @include glibc-functions/nis_freetags.texi @include glibc-functions/nis_getnames.texi @include glibc-functions/nis_getservlist.texi @include glibc-functions/nis_ismember.texi @include glibc-functions/nis_leaf_of.texi @include glibc-functions/nis_leaf_of_r.texi @include glibc-functions/nis_lerror.texi @include glibc-functions/nis_list.texi @include glibc-functions/nis_local_directory.texi @include glibc-functions/nis_local_group.texi @include glibc-functions/nis_local_host.texi @include glibc-functions/nis_local_principal.texi @include glibc-functions/nis_lookup.texi @include glibc-functions/nis_mkdir.texi @include glibc-functions/nis_modify.texi @include glibc-functions/nis_modify_entry.texi @include glibc-functions/nis_name_of.texi @include glibc-functions/nis_name_of_r.texi @include glibc-functions/nis_next_entry.texi @include glibc-functions/nis_perror.texi @include glibc-functions/nis_ping.texi @include glibc-functions/nis_print_directory.texi @include glibc-functions/nis_print_entry.texi @include glibc-functions/nis_print_group.texi @include glibc-functions/nis_print_group_entry.texi @include glibc-functions/nis_print_link.texi @include glibc-functions/nis_print_object.texi @include glibc-functions/nis_print_result.texi @include glibc-functions/nis_print_rights.texi @include glibc-functions/nis_print_table.texi @include glibc-functions/nis_remove.texi @include glibc-functions/nis_remove_entry.texi @include glibc-functions/nis_removemember.texi @include glibc-functions/nis_rmdir.texi @include glibc-functions/nis_servstate.texi @include glibc-functions/nis_sperrno.texi @include glibc-functions/nis_sperror.texi @include glibc-functions/nis_sperror_r.texi @include glibc-functions/nis_stats.texi @include glibc-functions/nis_verifygroup.texi @node Glibc rpcsvc/nis_callback.h @section Glibc @code{} @menu * xdr_cback_data:: * xdr_obj_p:: @end menu @include glibc-functions/xdr_cback_data.texi @include glibc-functions/xdr_obj_p.texi @node Glibc rpcsvc/yp.h @section Glibc @code{} @menu * xdr_domainname:: * xdr_keydat:: * xdr_valdat:: * xdr_ypbind_resptype:: * xdr_ypmap_parms:: * xdr_ypmaplist:: * xdr_yppushresp_xfr:: * xdr_ypreq_key:: * xdr_ypreq_nokey:: * xdr_ypreq_xfr:: * xdr_ypresp_all:: * xdr_ypresp_key_val:: * xdr_ypresp_maplist:: * xdr_ypresp_master:: * xdr_ypresp_order:: * xdr_ypresp_val:: * xdr_ypresp_xfr:: * xdr_ypstat:: * xdr_ypxfrstat:: @end menu @include glibc-functions/xdr_domainname.texi @include glibc-functions/xdr_keydat.texi @include glibc-functions/xdr_valdat.texi @include glibc-functions/xdr_ypbind_resptype.texi @include glibc-functions/xdr_ypmap_parms.texi @include glibc-functions/xdr_ypmaplist.texi @include glibc-functions/xdr_yppushresp_xfr.texi @include glibc-functions/xdr_ypreq_key.texi @include glibc-functions/xdr_ypreq_nokey.texi @include glibc-functions/xdr_ypreq_xfr.texi @include glibc-functions/xdr_ypresp_all.texi @include glibc-functions/xdr_ypresp_key_val.texi @include glibc-functions/xdr_ypresp_maplist.texi @include glibc-functions/xdr_ypresp_master.texi @include glibc-functions/xdr_ypresp_order.texi @include glibc-functions/xdr_ypresp_val.texi @include glibc-functions/xdr_ypresp_xfr.texi @include glibc-functions/xdr_ypstat.texi @include glibc-functions/xdr_ypxfrstat.texi @c @node Glibc rpcsvc/yp_prot.h @c @section Glibc @code{} @node Glibc rpcsvc/ypclnt.h @section Glibc @code{} @menu * yp_all:: * yp_bind:: * yp_first:: * yp_get_default_domain:: * yp_master:: * yp_match:: * yp_next:: * yp_order:: * yp_unbind:: * ypbinderr_string:: * yperr_string:: * ypprot_err:: @end menu @include glibc-functions/yp_all.texi @include glibc-functions/yp_bind.texi @include glibc-functions/yp_first.texi @include glibc-functions/yp_get_default_domain.texi @include glibc-functions/yp_master.texi @include glibc-functions/yp_match.texi @include glibc-functions/yp_next.texi @include glibc-functions/yp_order.texi @include glibc-functions/yp_unbind.texi @include glibc-functions/ypbinderr_string.texi @include glibc-functions/yperr_string.texi @include glibc-functions/ypprot_err.texi @c @node Glibc rpcsvc/ypupd.h @c @section Glibc @code{} @node Glibc sched.h @section Glibc Extensions to @code{} @menu * clone:: * getcpu:: * sched_getaffinity:: * sched_getcpu:: * sched_setaffinity:: * setns:: @end menu @include glibc-functions/clone.texi @include glibc-functions/getcpu.texi @include glibc-functions/sched_getaffinity.texi @include glibc-functions/sched_getcpu.texi @include glibc-functions/sched_setaffinity.texi @include glibc-functions/setns.texi @node Glibc search.h @section Glibc Extensions to @code{} @menu * hcreate_r:: * hdestroy_r:: * hsearch_r:: * tdestroy:: * twalk_r:: @end menu @include glibc-functions/hcreate_r.texi @include glibc-functions/hdestroy_r.texi @include glibc-functions/hsearch_r.texi @include glibc-functions/tdestroy.texi @include glibc-functions/twalk_r.texi @node Glibc selinux/selinux.h @section Glibc Extensions to @code{} @menu * fgetfilecon:: * getfilecon:: * lgetfilecon:: @end menu @include glibc-functions/getfilecon-desc.texi @include glibc-functions/fgetfilecon.texi @include glibc-functions/getfilecon.texi @include glibc-functions/lgetfilecon.texi @node Glibc semaphore.h @section Glibc Extensions to @code{} @menu * sem_clockwait:: @end menu @include glibc-functions/sem_clockwait.texi @c @node Glibc setjmp.h @c @section Glibc Extensions to @code{} @node Glibc shadow.h @section Glibc @code{} @menu * endspent:: * fgetspent:: * fgetspent_r:: * getspent:: * getspent_r:: * getspnam:: * getspnam_r:: * lckpwdf:: * putspent:: * setspent:: * sgetspent:: * sgetspent_r:: * ulckpwdf:: @end menu @include glibc-functions/endspent.texi @include glibc-functions/fgetspent.texi @include glibc-functions/fgetspent_r.texi @include glibc-functions/getspent.texi @include glibc-functions/getspent_r.texi @include glibc-functions/getspnam.texi @include glibc-functions/getspnam_r.texi @include glibc-functions/lckpwdf.texi @include glibc-functions/putspent.texi @include glibc-functions/setspent.texi @include glibc-functions/sgetspent.texi @include glibc-functions/sgetspent_r.texi @include glibc-functions/ulckpwdf.texi @node Glibc signal.h @section Glibc Extensions to @code{} @menu * gsignal:: * sigandset:: * sigblock:: * siggetmask:: * sigisemptyset:: * sigorset:: * sigreturn:: * sigsetmask:: * sigstack:: * sigvec:: * ssignal:: * sys_siglist:: * sysv_signal:: * tgkill:: @end menu @include glibc-functions/gsignal.texi @include glibc-functions/sigandset.texi @include glibc-functions/sigblock.texi @include glibc-functions/siggetmask.texi @include glibc-functions/sigisemptyset.texi @include glibc-functions/sigorset.texi @include glibc-functions/sigreturn.texi @include glibc-functions/sigsetmask.texi @include glibc-functions/sigstack.texi @include glibc-functions/sigvec.texi @include glibc-functions/ssignal.texi @include glibc-functions/sys_siglist.texi @include glibc-functions/sysv_signal.texi @include glibc-functions/tgkill.texi @node Glibc spawn.h @section Glibc Extensions to @code{} @menu * posix_spawn_file_actions_addchdir_np:: * posix_spawn_file_actions_addclosefrom_np:: * posix_spawn_file_actions_addfchdir_np:: @end menu @include glibc-functions/posix_spawn_file_actions_addchdir_np.texi @include glibc-functions/posix_spawn_file_actions_addclosefrom_np.texi @include glibc-functions/posix_spawn_file_actions_addfchdir_np.texi @c @node Glibc stdarg.h @c @section Glibc Extensions to @code{} @c @node Glibc stdbool.h @c @section Glibc Extensions to @code{} @c @node Glibc stddef.h @c @section Glibc Extensions to @code{} @c @node Glibc stdint.h @c @section Glibc Extensions to @code{} @node Glibc stdio.h @section Glibc Extensions to @code{} @menu * asprintf:: * cuserid:: * clearerr_unlocked:: * fcloseall:: * feof_unlocked:: * ferror_unlocked:: * fflush_unlocked:: * fgetc_unlocked:: * fgets_unlocked:: * fileno_unlocked:: * fopencookie:: * fputc_unlocked:: * fputs_unlocked:: * fread_unlocked:: * fwrite_unlocked:: * getw:: * putw:: * renameat2:: * setbuffer:: * setlinebuf:: * sys_errlist:: * sys_nerr:: * tmpnam_r:: * vasprintf:: @end menu @include glibc-functions/asprintf.texi @include glibc-functions/cuserid.texi @include glibc-functions/clearerr_unlocked.texi @include glibc-functions/fcloseall.texi @include glibc-functions/feof_unlocked.texi @include glibc-functions/ferror_unlocked.texi @include glibc-functions/fflush_unlocked.texi @include glibc-functions/fgetc_unlocked.texi @include glibc-functions/fgets_unlocked.texi @include glibc-functions/fileno_unlocked.texi @include glibc-functions/fopencookie.texi @include glibc-functions/fputc_unlocked.texi @include glibc-functions/fputs_unlocked.texi @include glibc-functions/fread_unlocked.texi @include glibc-functions/fwrite_unlocked.texi @include glibc-functions/getw.texi @include glibc-functions/putw.texi @include glibc-functions/renameat2.texi @include glibc-functions/setbuffer.texi @include glibc-functions/setlinebuf.texi @include glibc-functions/sys_errlist.texi @include glibc-functions/sys_nerr.texi @include glibc-functions/tmpnam_r.texi @include glibc-functions/vasprintf.texi @node Glibc stdlib.h @section Glibc Extensions to @code{} @menu * canonicalize_file_name:: * cfree:: * clearenv:: * drand48_r:: * ecvt_r:: * erand48_r:: * fcvt_r:: * getloadavg:: * getpt:: * initstate_r:: * jrand48_r:: * lcong48_r:: * lrand48_r:: * mkostemp:: * mkostemps:: * mkstemps:: * mrand48_r:: * nrand48_r:: * on_exit:: * ptsname_r:: * qecvt:: * qecvt_r:: * qfcvt:: * qfcvt_r:: * qgcvt:: * qsort_r:: * random_r:: * rpmatch:: * secure_getenv:: * seed48_r:: * setstate_r:: * srand48_r:: * srandom_r:: * strtod_l:: * strtof_l:: * strtol_l:: * strtold_l:: * strtoll_l:: * strtoq:: * strtoul_l:: * strtoull_l:: * strtouq:: * valloc:: @end menu @include glibc-functions/canonicalize_file_name.texi @include glibc-functions/cfree.texi @include glibc-functions/clearenv.texi @include glibc-functions/drand48_r.texi @include glibc-functions/ecvt_r.texi @include glibc-functions/erand48_r.texi @include glibc-functions/fcvt_r.texi @include glibc-functions/getloadavg.texi @include glibc-functions/getpt.texi @include glibc-functions/initstate_r.texi @include glibc-functions/jrand48_r.texi @include glibc-functions/lcong48_r.texi @include glibc-functions/lrand48_r.texi @include glibc-functions/mkostemp.texi @include glibc-functions/mkostemps.texi @include glibc-functions/mkstemps.texi @include glibc-functions/mrand48_r.texi @include glibc-functions/nrand48_r.texi @include glibc-functions/on_exit.texi @include glibc-functions/ptsname_r.texi @include glibc-functions/qecvt.texi @include glibc-functions/qecvt_r.texi @include glibc-functions/qfcvt.texi @include glibc-functions/qfcvt_r.texi @include glibc-functions/qgcvt.texi @include glibc-functions/qsort_r.texi @include glibc-functions/random_r.texi @include glibc-functions/rpmatch.texi @include glibc-functions/secure_getenv.texi @include glibc-functions/seed48_r.texi @include glibc-functions/setstate_r.texi @include glibc-functions/srand48_r.texi @include glibc-functions/srandom_r.texi @include glibc-functions/strtod_l.texi @include glibc-functions/strtof_l.texi @include glibc-functions/strtol_l.texi @include glibc-functions/strtold_l.texi @include glibc-functions/strtoll_l.texi @include glibc-functions/strtoq.texi @include glibc-functions/strtoul_l.texi @include glibc-functions/strtoull_l.texi @include glibc-functions/strtouq.texi @include glibc-functions/valloc.texi @node Glibc string.h @section Glibc Extensions to @code{} @menu * explicit_bzero:: * ffsl:: * ffsll:: * memfrob:: * memmem:: * mempcpy:: * memrchr:: * rawmemchr:: * sigabbrev_np:: * sigdescr_np:: * strcasestr:: * strchrnul:: * strerrordesc_np:: * strerrorname_np:: * strfry:: * strsep:: * strverscmp:: @end menu @include glibc-functions/explicit_bzero.texi @include glibc-functions/ffsl.texi @include glibc-functions/ffsll.texi @include glibc-functions/memfrob.texi @include glibc-functions/memmem.texi @include glibc-functions/mempcpy.texi @include glibc-functions/memrchr.texi @include glibc-functions/rawmemchr.texi @include glibc-functions/sigabbrev_np.texi @include glibc-functions/sigdescr_np.texi @include glibc-functions/strcasestr.texi @include glibc-functions/strchrnul.texi @include glibc-functions/strerrordesc_np.texi @include glibc-functions/strerrorname_np.texi @include glibc-functions/strfry.texi @include glibc-functions/strsep.texi @include glibc-functions/strverscmp.texi @c @node Glibc strings.h @c @section Glibc Extensions to @code{} @c @node Glibc stropts.h @c @section Glibc Extensions to @code{} @node Glibc sys/auxv.h @section Glibc @code{} @menu * getauxval:: @end menu @include glibc-functions/getauxval.texi @node Glibc sys/capability.h @section Glibc @code{} @menu * capget:: * capset:: @end menu @include glibc-functions/capget.texi @include glibc-functions/capset.texi @node Glibc sys/epoll.h @section Glibc @code{} @menu * epoll_create:: * epoll_create1:: * epoll_ctl:: * epoll_pwait:: * epoll_wait:: @end menu @include glibc-functions/epoll_create.texi @include glibc-functions/epoll_create1.texi @include glibc-functions/epoll_ctl.texi @include glibc-functions/epoll_pwait.texi @include glibc-functions/epoll_wait.texi @node Glibc sys/eventfd.h @section Glibc @code{} @menu * eventfd:: * eventfd_read:: * eventfd_write:: @end menu @include glibc-functions/eventfd.texi @include glibc-functions/eventfd_read.texi @include glibc-functions/eventfd_write.texi @node Glibc sys/fanotify.h @section Glibc @code{} @menu * fanotify_init:: * fanotify_mark:: @end menu @include glibc-functions/fanotify_init.texi @include glibc-functions/fanotify_mark.texi @node Glibc sys/file.h @section Glibc @code{} @menu * flock:: @end menu @include glibc-functions/flock.texi @node Glibc sys/fsuid.h @section Glibc @code{} @menu * setfsgid:: * setfsuid:: @end menu @include glibc-functions/setfsgid.texi @include glibc-functions/setfsuid.texi @node Glibc sys/gmon.h @section Glibc @code{} @menu * monstartup:: @end menu @include glibc-functions/monstartup.texi @node Glibc sys/inotify.h @section Glibc @code{} @menu * inotify_add_watch:: * inotify_init:: * inotify_init1:: * inotify_rm_watch:: @end menu @include glibc-functions/inotify_add_watch.texi @include glibc-functions/inotify_init.texi @include glibc-functions/inotify_init1.texi @include glibc-functions/inotify_rm_watch.texi @node Glibc sys/io.h and sys/perm.h @section Glibc @code{}, @code{} @menu * ioperm:: * iopl:: @end menu @include glibc-functions/ioperm.texi @include glibc-functions/iopl.texi @c @node Glibc sys/ioctl.h @c @section Glibc @code{} @c @node Glibc sys/ipc.h @c @section Glibc Extensions to @code{} @node Glibc sys/kdaemon.h @section Glibc @code{} @menu * bdflush:: @end menu @include glibc-functions/bdflush.texi @node Glibc sys/klog.h @section Glibc @code{} @menu * klogctl:: @end menu @include glibc-functions/klogctl.texi @node Glibc sys/mman.h @section Glibc Extensions to @code{} @menu * madvise:: * memfd_create:: * mincore:: * mlock2:: * mremap:: * pkey_alloc:: * pkey_free:: * pkey_get:: * pkey_mprotect:: * pkey_set:: * remap_file_pages:: @end menu @include glibc-functions/madvise.texi @include glibc-functions/memfd_create.texi @include glibc-functions/mincore.texi @include glibc-functions/mlock2.texi @include glibc-functions/mremap.texi @include glibc-functions/pkey_alloc.texi @include glibc-functions/pkey_free.texi @include glibc-functions/pkey_get.texi @include glibc-functions/pkey_mprotect.texi @include glibc-functions/pkey_set.texi @include glibc-functions/remap_file_pages.texi @node Glibc sys/mount.h @section Glibc @code{} @menu * mount:: * umount:: * umount2:: @end menu @include glibc-functions/mount.texi @include glibc-functions/umount.texi @include glibc-functions/umount2.texi @c @node Glibc sys/msg.h @c @section Glibc Extensions to @code{} @node Glibc sys/personality.h @section Glibc @code{} @menu * personality:: @end menu @include glibc-functions/personality.texi @node Glibc sys/prctl.h @section Glibc @code{} @menu * prctl:: @end menu @include glibc-functions/prctl.texi @node Glibc sys/profil.h @section Glibc @code{} @menu * sprofil:: @end menu @include glibc-functions/sprofil.texi @node Glibc sys/ptrace.h @section Glibc @code{} @menu * ptrace:: @end menu @include glibc-functions/ptrace.texi @node Glibc sys/quota.h @section Glibc @code{} @menu * quotactl:: @end menu @include glibc-functions/quotactl.texi @node Glibc sys/random.h @section Glibc @code{} @menu * getentropy:: * getrandom:: @end menu @include glibc-functions/getentropy.texi @include glibc-functions/getrandom.texi @node Glibc sys/reboot.h @section Glibc @code{} @menu * reboot:: @end menu @include glibc-functions/reboot.texi @node Glibc sys/resource.h @section Glibc Extensions to @code{} @menu * prlimit:: @end menu @include glibc-functions/prlimit.texi @c @node Glibc sys/select.h @c @section Glibc Extensions to @code{} @node Glibc sys/sem.h @section Glibc Extensions to @code{} @menu * semtimedop:: @end menu @include glibc-functions/semtimedop.texi @node Glibc sys/sendfile.h @section Glibc @code{} @menu * sendfile:: @end menu @include glibc-functions/sendfile.texi @c @node Glibc sys/shm.h @c @section Glibc Extensions to @code{} @node Glibc sys/signalfd.h @section Glibc @code{} @menu * signalfd:: @end menu @include glibc-functions/signalfd.texi @node Glibc sys/single_threaded.h @section Glibc @code{} @menu * __libc_single_threaded:: @end menu @include glibc-functions/__libc_single_threaded.texi @node Glibc sys/socket.h @section Glibc Extensions to @code{} @menu * accept4:: * isfdtype:: * recvmmsg:: * sendmmsg:: @end menu @include glibc-functions/accept4.texi @include glibc-functions/isfdtype.texi @include glibc-functions/recvmmsg.texi @include glibc-functions/sendmmsg.texi @node Glibc sys/stat.h @section Glibc Extensions to @code{} @menu * getumask:: * lchmod:: * statx:: @end menu @include glibc-functions/getumask.texi @include glibc-functions/lchmod.texi @include glibc-functions/statx.texi @node Glibc sys/statfs.h @section Glibc @code{} @menu * fstatfs:: * statfs:: @end menu @include glibc-functions/fstatfs.texi @include glibc-functions/statfs.texi @c @node Glibc sys/statvfs.h @c @section Glibc Extensions to @code{} @node Glibc sys/swap.h @section Glibc @code{} @menu * swapoff:: * swapon:: @end menu @include glibc-functions/swapoff.texi @include glibc-functions/swapon.texi @node Glibc sys/sysctl.h @section Glibc @code{} @menu * sysctl:: @end menu @include glibc-functions/sysctl.texi @node Glibc sys/sysinfo.h @section Glibc @code{} @menu * get_avphys_pages:: * get_nprocs:: * get_nprocs_conf:: * get_phys_pages:: * sysinfo:: @end menu @include glibc-functions/get_avphys_pages.texi @include glibc-functions/get_nprocs.texi @include glibc-functions/get_nprocs_conf.texi @include glibc-functions/get_phys_pages.texi @include glibc-functions/sysinfo.texi @node Glibc sys/syslog.h @section Glibc @code{} @menu * vsyslog:: @end menu @include glibc-functions/vsyslog.texi @node Glibc sys/sysmacros.h @section Glibc @code{} @menu * gnu_dev_major:: * gnu_dev_makedev:: * gnu_dev_minor:: @end menu @include glibc-functions/gnu_dev_major.texi @include glibc-functions/gnu_dev_makedev.texi @include glibc-functions/gnu_dev_minor.texi @node Glibc sys/time.h @section Glibc Extensions to @code{} @menu * adjtime:: * futimes:: * futimesat:: * lutimes:: * settimeofday:: @end menu @include glibc-functions/adjtime.texi @include glibc-functions/futimes.texi @include glibc-functions/futimesat.texi @include glibc-functions/lutimes.texi @include glibc-functions/settimeofday.texi @c @node Glibc sys/timeb.h @c @section Glibc Extensions to @code{} @node Glibc sys/timerfd.h @section Glibc @code{} @menu * timerfd_create:: * timerfd_gettime:: * timerfd_settime:: @end menu @include glibc-functions/timerfd_create.texi @include glibc-functions/timerfd_gettime.texi @include glibc-functions/timerfd_settime.texi @c @node Glibc sys/times.h @c @section Glibc Extensions to @code{} @node Glibc sys/timex.h @section Glibc @code{} @menu * adjtimex:: * ntp_adjtime:: * ntp_gettime:: * ntp_gettimex:: @end menu @include glibc-functions/adjtimex.texi @include glibc-functions/ntp_adjtime.texi @include glibc-functions/ntp_gettime.texi @include glibc-functions/ntp_gettimex.texi @c @node Glibc sys/types.h @c @section Glibc Extensions to @code{} @node Glibc sys/uio.h @section Glibc Extensions to @code{} @menu * preadv:: * preadv2:: * process_vm_readv:: * process_vm_writev:: * pwritev:: * pwritev2:: @end menu @include glibc-functions/preadv.texi @include glibc-functions/preadv2.texi @include glibc-functions/process_vm_readv.texi @include glibc-functions/process_vm_writev.texi @include glibc-functions/pwritev.texi @include glibc-functions/pwritev2.texi @c @node Glibc sys/un.h @c @section Glibc Extensions to @code{} @node Glibc sys/ustat.h @section Glibc @code{} @menu * ustat:: @end menu @include glibc-functions/ustat.texi @c @node Glibc sys/utsname.h @c @section Glibc Extensions to @code{} @node Glibc sys/vlimit.h @section Glibc @code{} @menu * vlimit:: @end menu @include glibc-functions/vlimit.texi @c @node Glibc sys/vm86.h @c @section Glibc @code{} @node Glibc sys/wait.h @section Glibc Extensions to @code{} @menu * wait3:: * wait4:: @end menu @include glibc-functions/wait3.texi @include glibc-functions/wait4.texi @node Glibc sys/xattr.h @section Glibc @code{} @menu * fgetxattr:: * flistxattr:: * fremovexattr:: * fsetxattr:: * getxattr:: * lgetxattr:: * listxattr:: * llistxattr:: * lremovexattr:: * lsetxattr:: * removexattr:: * setxattr:: @end menu @include glibc-functions/fgetxattr.texi @include glibc-functions/flistxattr.texi @include glibc-functions/fremovexattr.texi @include glibc-functions/fsetxattr.texi @include glibc-functions/getxattr.texi @include glibc-functions/lgetxattr.texi @include glibc-functions/listxattr.texi @include glibc-functions/llistxattr.texi @include glibc-functions/lremovexattr.texi @include glibc-functions/lsetxattr.texi @include glibc-functions/removexattr.texi @include glibc-functions/setxattr.texi @c @node Glibc sysexits.h @c @section Glibc @code{} @c @node Glibc syslog.h @c @section Glibc Extensions to @code{} @c @node Glibc tar.h @c @section Glibc Extensions to @code{} @node Glibc termios.h @section Glibc Extensions to @code{} @menu * cfmakeraw:: * cfsetspeed:: @end menu @include glibc-functions/cfmakeraw.texi @include glibc-functions/cfsetspeed.texi @c @node Glibc tgmath.h @c @section Glibc Extensions to @code{} @node Glibc time.h @section Glibc Extensions to @code{} @menu * clock_adjtime:: * dysize:: * getdate_r:: * stime:: * strptime_l:: * timegm:: * timelocal:: * timespec_get:: @end menu @include glibc-functions/clock_adjtime.texi @include glibc-functions/dysize.texi @include glibc-functions/getdate_r.texi @include glibc-functions/stime.texi @include glibc-functions/strptime_l.texi @include glibc-functions/timegm.texi @include glibc-functions/timelocal.texi @include glibc-functions/timespec_get.texi @c @node Glibc trace.h @c @section Glibc Extensions to @code{} @node Glibc ttyent.h @section Glibc @code{} @menu * endttyent:: * getttyent:: * getttynam:: * setttyent:: @end menu @include glibc-functions/endttyent.texi @include glibc-functions/getttyent.texi @include glibc-functions/getttynam.texi @include glibc-functions/setttyent.texi @c @node Glibc uchar.h @c @section Glibc Extensions to @code{} @c @node Glibc ucontext.h @c @section Glibc Extensions to @code{} @c @node Glibc ulimit.h @c @section Glibc Extensions to @code{} @node Glibc unistd.h @section Glibc Extensions to @code{} @menu * _Fork:: * acct:: * brk:: * chroot:: * closefrom:: * copy_file_range:: * daemon:: * dup3:: * eaccess:: * endusershell:: * euidaccess:: * execveat:: * execvpe:: * get_current_dir_name:: * getdomainname:: * getdtablesize:: * getpagesize:: * getpass:: * getresgid:: * getresuid:: * gettid:: * getusershell:: * group_member:: * pipe2:: * profil:: * revoke:: * sbrk:: * setlogin:: * setdomainname:: * sethostid:: * sethostname:: * setresgid:: * setresuid:: * setusershell:: * syncfs:: * syscall:: * ttyslot:: * vhangup:: @end menu @include glibc-functions/_Fork.texi @include glibc-functions/acct.texi @include glibc-functions/brk.texi @include glibc-functions/chroot.texi @include glibc-functions/closefrom.texi @include glibc-functions/copy_file_range.texi @include glibc-functions/daemon.texi @include glibc-functions/dup3.texi @include glibc-functions/eaccess.texi @include glibc-functions/endusershell.texi @include glibc-functions/euidaccess.texi @include glibc-functions/execveat.texi @include glibc-functions/execvpe.texi @include glibc-functions/get_current_dir_name.texi @include glibc-functions/getdomainname.texi @include glibc-functions/getdtablesize.texi @include glibc-functions/getpagesize.texi @include glibc-functions/getpass.texi @include glibc-functions/getresgid.texi @include glibc-functions/getresuid.texi @include glibc-functions/gettid.texi @include glibc-functions/getusershell.texi @include glibc-functions/group_member.texi @include glibc-functions/pipe2.texi @include glibc-functions/profil.texi @include glibc-functions/revoke.texi @include glibc-functions/sbrk.texi @include glibc-functions/setlogin.texi @include glibc-functions/setdomainname.texi @include glibc-functions/sethostid.texi @include glibc-functions/sethostname.texi @include glibc-functions/setresgid.texi @include glibc-functions/setresuid.texi @include glibc-functions/setusershell.texi @include glibc-functions/syncfs.texi @include glibc-functions/syscall.texi @include glibc-functions/ttyslot.texi @include glibc-functions/vhangup.texi @c @node Glibc utime.h @c @section Glibc Extensions to @code{} @node Glibc utmp.h @section Glibc @code{} @menu * endutent:: * getutent:: * getutent_r:: * getutid:: * getutid_r:: * getutline:: * getutline_r:: * pututline:: * setutent:: * updwtmp:: * utmpname:: * login:: * login_tty:: @end menu @include glibc-functions/endutent.texi @include glibc-functions/getutent.texi @include glibc-functions/getutent_r.texi @include glibc-functions/getutid.texi @include glibc-functions/getutid_r.texi @include glibc-functions/getutline.texi @include glibc-functions/getutline_r.texi @include glibc-functions/pututline.texi @include glibc-functions/setutent.texi @include glibc-functions/updwtmp.texi @include glibc-functions/utmpname.texi @include glibc-functions/login.texi @include glibc-functions/login_tty.texi @node Glibc utmpx.h @section Glibc Extensions to @code{} @menu * getutmp:: * getutmpx:: * updwtmpx:: * utmpxname:: @end menu @include glibc-functions/getutmp.texi @include glibc-functions/getutmpx.texi @include glibc-functions/updwtmpx.texi @include glibc-functions/utmpxname.texi @node Glibc wchar.h @section Glibc Extensions to @code{} @menu * fgetwc_unlocked:: * fgetws_unlocked:: * fputwc_unlocked:: * fputws_unlocked:: * getwc_unlocked:: * getwchar_unlocked:: * putwc_unlocked:: * putwchar_unlocked:: * wcschrnul:: * wcsftime_l:: * wcstod_l:: * wcstof_l:: * wcstol_l:: * wcstold_l:: * wcstoll_l:: * wcstoq:: * wcstoul_l:: * wcstoull_l:: * wcstouq:: * wmempcpy:: @end menu @include glibc-functions/fgetwc_unlocked.texi @include glibc-functions/fgetws_unlocked.texi @include glibc-functions/fputwc_unlocked.texi @include glibc-functions/fputws_unlocked.texi @include glibc-functions/getwc_unlocked.texi @include glibc-functions/getwchar_unlocked.texi @include glibc-functions/putwc_unlocked.texi @include glibc-functions/putwchar_unlocked.texi @include glibc-functions/wcschrnul.texi @include glibc-functions/wcsftime_l.texi @include glibc-functions/wcstod_l.texi @include glibc-functions/wcstof_l.texi @include glibc-functions/wcstol_l.texi @include glibc-functions/wcstold_l.texi @include glibc-functions/wcstoll_l.texi @include glibc-functions/wcstoq.texi @include glibc-functions/wcstoul_l.texi @include glibc-functions/wcstoull_l.texi @include glibc-functions/wcstouq.texi @include glibc-functions/wmempcpy.texi @c @node Glibc wctype.h @c @section Glibc Extensions to @code{} @c @node Glibc wordexp.h @c @section Glibc Extensions to @code{} @node Native Windows Support @chapter Native Windows Support There are three ways to create binaries that run on Microsoft Windows: @itemize @item Native binaries, built using the MinGW tool chain. @item Native binaries, built using the MSVC (MS Visual C/C++) tool chain. @item Binaries for the Cygwin environment. @end itemize This chapter deals with the MinGW and MSVC platforms, commonly called ``native Windows'' platforms. Cygwin, on the other hand, is close enough to POSIX that it can be treated like any other Unix-like platform. @menu * Libtool and Windows:: * Large File Support:: * Inode numbers on Windows:: * Precise file timestamps on Windows:: * Avoiding the year 2038 problem:: * Windows sockets:: * Native Windows Support without MSVC Support:: * Visual Studio Compatibility:: @end menu @include windows-libtool.texi @include largefile.texi @include windows-stat-inodes.texi @include windows-stat-timespec.texi @include year2038.texi @include windows-sockets.texi @include windows-without-msvc.texi @include ld-output-def.texi @include multithread.texi @node Particular Modules @chapter Particular Modules @menu * alloca:: * alloca-opt:: * Safe Allocation Macros:: * Attributes:: * Compile-time Assertions:: * Non-returning Functions:: * Integer Properties:: * static inline:: * extern inline:: * Closed standard fds:: * Container data types:: * String Functions in C Locale:: * Recognizing Option Arguments:: * Quoting:: * progname and getprogname:: * gcd:: * Profiling of program phases:: * Library version handling:: * Supporting Relocation:: * func:: * stat-size:: @end menu @node alloca @section alloca @findex alloca @include alloca.texi @node alloca-opt @section alloca-opt @findex alloca @include alloca-opt.texi @include safe-alloc.texi @include attribute.texi @include verify.texi @include noreturn.texi @include intprops.texi @include static-inline.texi @include extern-inline.texi @include xstdopen.texi @include containers.texi @include c-locale.texi @include argmatch.texi @include quote.texi @include progname.texi @include gcd.texi @include timevar.texi @include check-version.texi @include relocatable-maint.texi @include func.texi @include stat-size.texi @node Regular expressions @chapter Regular expressions @menu * Overview:: * Regular Expression Syntax:: * Common Operators:: * GNU Operators:: * GNU Emacs Operators:: * What Gets Matched?:: * Programming with Regex:: * Regular expression syntaxes:: @end menu @lowersections @include regex.texi @raisesections @node Regular expression syntaxes @section Regular expression syntaxes Gnulib supports many different types of regular expressions; although the underlying features are the same or identical, the syntax used varies. The descriptions given here for the different types are generated automatically. @include regexprops-generic.texi @node Build Infrastructure Modules @chapter Build Infrastructure Modules Gnulib has a couple of modules that don't provide code, but rather extend the GNU Build System. That is, they are convenience facilities for use with GNU Automake (in particular). @menu * Searching for Libraries:: * Exported Symbols of Shared Libraries:: * LD Version Scripts:: * configmake:: * warnings:: * manywarnings:: * Running self-tests under valgrind:: * VCS To ChangeLog:: @end menu @include havelib.texi @include lib-symbol-visibility.texi @include ld-version-script.texi @include configmake.texi @include warnings.texi @include manywarnings.texi @include valgrind-tests.texi @include vcs-to-changelog.texi @node Build Infrastructure Files @chapter Build Infrastructure Files Gnulib contains also a small number of files that are not part of modules. They are meant to be imported into packages by means of @samp{gnulib-tool --copy-file}, not @samp{gnulib-tool --import}. For example, the commands to import the files @code{config.guess} and @code{config.sub} are @smallexample for file in config.guess config.sub; do $GNULIB_TOOL --copy-file build-aux/$file \ && chmod a+x build-aux/$file \ || exit $? done @end smallexample Packages that don't use Gnulib can get hold of these files through direct download from Gnulib's git repository. The commands to do this look as follows: @smallexample for file in config.guess config.sub; do echo "$0: getting $file..." wget -q --timeout=5 -O build-aux/$file.tmp "https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/$@{file@};hb=HEAD" \ && mv build-aux/$file.tmp build-aux/$file \ && chmod a+x build-aux/$file retval=$? rm -f build-aux/$file.tmp test $retval -eq 0 || exit $retval done @end smallexample @menu * Recognizing platforms:: * Utilities for Makefiles:: * Developer tools:: * For building documentation:: * For building libraries:: * For running tests:: @end menu @node Recognizing platforms @section Recognizing platforms @table @code @item build-aux/config.guess @itemx build-aux/config.sub These files are helper scripts, invoked by the @samp{configure} script. @code{config.guess} recognizes the platform on which the script is running, and produces a triplet of the form @code{@var{cpu-type}-@var{vendor}-@var{operating_system}}. @code{config.sub} receives a possibly abbreviated triplet and produces a canonical triplet for a platform. For more information, see @ifinfo @ref{Configuration,,,standards}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/prep/standards/html_node/Configuration.html}. @end ifnotinfo @end table It is important that you always include the newest versions of these two files in your tarball, because people who work on emerging platforms otherwise have a hard time building your package. @node Utilities for Makefiles @section Utilities for Makefiles These are a couple of programs that are often useful in Makefiles. Some of them are also described in @ifinfo @ref{Auxiliary Programs,,,automake}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/automake/manual/html_node/Auxiliary-Programs.html}. @end ifnotinfo @table @code @item build-aux/ar-lib @itemx build-aux/compile These two scripts are necessary for supporting portability to native Windows with the MSVC compiler. @code{compile} is a wrapper script that invokes the compiler and provides a command-line interface compatible with Unix compilers. Similarly, @code{ar-lib} is a wrapper script that provides a command-line interface compatible with Unix @code{ar}. @item build-aux/depcomp This is a helper script, used by Makefile rules generated by GNU Automake. It generates Makefile dependencies while compiling a file. @item build-aux/install-sh This is a helper script, used by Makefile rules generated by GNU Automake. It installs files during the @code{make install} phase. In the Makefile, don't use this file directly; always use @code{$(INSTALL_PROGRAM)} or @code{$(INSTALL_DATA)} instead. @item build-aux/mdate-sh This script determines the modification time of a file and pretty-prints it. The typical use is to add a ``Last modified'' line to the documentation. @item build-aux/mkinstalldirs This is a helper script, used by Makefile rules generated by GNU Automake. It creates directories during the @code{make install} phase. It is roughly equivalent to @samp{mkdir -p} (except that the latter is not portable). In the Makefile, don't use this file directly; always use @code{$(MKDIR_P)} instead. @item build-aux/mktempd This script creates a temporary directory. It is roughly equivalent to @samp{mktemp -d} (except that the latter is not portable). @item build-aux/move-if-change This script moves a freshly generated file to a destination file, with a special optimization for the case that both files are identical. In this case the freshly generated file is deleted, and the time stamp of the destination file is @emph{not} changed. This is useful when updating a file that rarely actually changes and which many Makefile targets depend upon. @end table @node Developer tools @section Programs for developing in Git checkouts These are a couple of programs that help when developing in a Git checkout. The maintainer of the package copies these programs into the version control of the package, so that co-developers can use these tools right away. @table @code @item top/gitsub.sh This program manages the subdirectories of a Git checkout that come from other packages, including Gnulib. @item build-aux/bootstrap This program manages the Git submodules, including Gnulib, and is also a wrapper around @code{gnulib-tool} and @code{automake}, that generates files from other files.@* Note: Because this program mixes version control management and generation of files in non-obvious ways, it has a number of usability issues for the advanced developer. @item build-aux/bootstrap.conf This is the template configuration file. After copying it into your package, you need to customize it. @item build-aux/po/Makefile.in.in @itemx build-aux/po/remove-potcdate.sin These are auxiliary files used by @code{bootstrap}. You don't have to copy them yourself; @code{bootstrap} will do that. @end table @node For building documentation @section Utilities for building documentation These are auxiliary files for building documentation. @table @code @item build-aux/texinfo.tex This file is needed for the conversion of Texinfo-format documentation to PDF, PostScript, or DVI formats. It implements the GNU Texinfo commands on top of plain TeX. @item build-aux/x-to-1.in This file, once processed, gives a program @code{x-to-1}, that produces a manual page for a program, by combining a skeleton with the program's @code{--help} output. @end table @node For building libraries @section Utilities for building libraries @table @code @item build-aux/declared.sh This program extracts the declared global symbols of a C header file. It is useful when you want to control the set of symbols exported by a library. See @ref{Exported Symbols of Shared Libraries}. @end table @node For running tests @section Utilities for running test suites @table @code @item build-aux/run-test This file is a test driver that supports running a test under @code{valgrind}. @item build-aux/test-driver.diff This is a patch, against Automake's test driver, that supports running a test suite on Android. @end table @node Release Management Files @chapter Release Management Files Gnulib also contain a few scripts that are useful for the release management of a package. They can be used directly off the Gnulib checkout; they don't need to copied first. @menu * For building shared libraries:: * For uploading releases:: @end menu @node For building shared libraries @section Tools for releasing packages with shared libraries @table @code @item build-aux/libtool-next-version This program is a wizard that helps a maintainer update the libtool version of a shared library, without making mistakes in this process. For background documentation, see @ifinfo @ref{Updating version info,,,libtool}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html}. @end ifnotinfo @end table @node For uploading releases @section Tools for uploading release tarballs @table @code @item build-aux/gnupload This program is a user-friendly way to upload a release tarball to one of the GNU servers (@code{ftp.gnu.org} or @code{alpha.gnu.org}). It implements the interface described in @ifinfo @ref{Automated FTP Uploads,,,maintain}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html}. @end ifnotinfo @item build-aux/ncftpput-ftp This is a helper program that mimics the @code{ncftpput} program used by @code{gnupload}. If you want to use @code{gnupload} but don't have @code{ncftp} installed, copy this file into your $PATH, renaming it to @code{ncftpput}. @end table @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl-1.3.texi @node Index @unnumbered Index @printindex cp @bye @c Local Variables: @c indent-tabs-mode: nil @c whitespace-check-buffer-indent: nil @c End: gnulib-20210822~d383792/doc/gpl-2.0.texi000066400000000000000000000436271411057217300170320ustar00rootroot00000000000000@c The GNU General Public License. @center Version 2, June 1991 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software---to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @enumerate 0 @item This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The ``Program'', below, refers to any such program or work, and a ``work based on the Program'' means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term ``modification''.) Each licensee is addressed as ``you''. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. @item You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. @item You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: @enumerate a @item You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. @item You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. @item If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) @end enumerate These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. @item You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: @enumerate a @item Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, @item Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, @item Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) @end enumerate The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. @item You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. @item Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. @item If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. @item If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. @item The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. @item If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. @iftex @heading NO WARRANTY @end iftex @ifinfo @center NO WARRANTY @end ifinfo @item BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @end enumerate @iftex @heading END OF TERMS AND CONDITIONS @end iftex @ifinfo @center END OF TERMS AND CONDITIONS @end ifinfo @page @heading Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{yyyy} @var{name of author} This 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: @smallexample Gnomovision version 69, Copyright (C) @var{year} @var{name of author} Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than @samp{show w} and @samp{show c}; they could even be mouse-clicks or menu items---whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. Here is a sample; alter the names: @example Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. @var{signature of Ty Coon}, 1 April 1989 Ty Coon, President of Vice @end example This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. gnulib-20210822~d383792/doc/gpl-3.0.texi000066400000000000000000001044211411057217300170210ustar00rootroot00000000000000@c The GNU General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This 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 @url{https://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{https://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{https://www.gnu.org/licenses/why-not-lgpl.html}. gnulib-20210822~d383792/doc/havelib.texi000066400000000000000000000215661411057217300173630ustar00rootroot00000000000000@node Searching for Libraries @section Searching for Libraries The following macros check for the presence or location of certain C, C++, or Fortran library archive files. @unnumberedsubsec Simple Library Tests The macros @code{AC_CHECK_LIB}, @code{AC_SEARCH_LIBS} from GNU Autoconf check for the presence of certain C, C++, or Fortran library archive files. The libraries are looked up in the default linker path---a system dependent list of directories, that usually contains the @file{/usr/lib} directory---and those directories given by @code{-L} options in the @code{LDFLAGS} variable. @unnumberedsubsec Locating Libraries The following macros, defined in the Gnulib module @code{havelib}, search for the location of certain C, C++, or Fortran library archive files and make the found location available to the compilation process and to further Autoconf tests. @deffn Macro @code{AC_LIB_LINKFLAGS(@var{name}, [@var{dependencies}])} Searches for @code{lib<@var{name}>} and the libraries corresponding to explicit and implicit dependencies. Sets and AC_SUBSTs the @code{LIB<@var{NAME}>} and @code{LTLIB<@var{NAME}>} variables (with @code{<@var{NAME}>} in upper case) and augments the @code{CPPFLAGS} variable by @code{-I} options. This macro should be used when @code{lib<@var{name}>} is expected to be found. @end deffn @deffn Macro @code{AC_LIB_HAVE_LINKFLAGS(@var{name}, [@var{dependencies}], [@var{includes}], [@var{testcode}], [@var{missing-message}])} Searches for @code{lib<@var{name}>} and the libraries corresponding to explicit and implicit dependencies, together with the specified include files and the ability to compile and link the specified @var{testcode}. The @var{missing-message} defaults to @code{no} and may contain additional hints for the user. If found, it sets and AC_SUBSTs @code{HAVE_LIB<@var{NAME}>=yes} and the @code{LIB<@var{NAME}>} and @code{LTLIB<@var{NAME}>} variables (with @code{<@var{NAME}>} in upper case) and augments the @code{CPPFLAGS} variable by @code{-I} options, and #defines @code{HAVE_LIB<@var{NAME}>} to 1. Otherwise, it sets and AC_SUBSTs @code{HAVE_LIB<@var{NAME}>=no} and @code{LIB<@var{NAME}>} and @code{LTLIB<@var{NAME}>} to empty. @end deffn These macros assume that when a library is installed in @code{@var{some_directory}/lib}, its include files are installed in @code{@var{some_directory}/include}. The complexities that @code{AC_LIB_LINKFLAGS} and @code{AC_LIB_HAVE_LINKFLAGS} deal with are the following: @itemize @bullet @item The library is not necessarily already in the search path (@code{CPPFLAGS} for the include file search path, @code{LDFLAGS} for the library search path). The macro provides a @samp{--with-lib<@var{name}>} option. The user of the @samp{configure} script can use this option to indicate the location of the library and its include files. If not provided, the @code{--prefix} directory is searched as well. @item The library is not necessarily already in the run time library search path. To avoid the need for setting an environment variable like @code{LD_LIBRARY_PATH}, the macro adds the appropriate run time search path options to the @code{LIB<@var{NAME}>} variable. This works on most systems. It can also be inhibited: The user of @samp{configure} can use the @code{--disable-rpath} option to force an installation that doesn't contain hardcoded library search paths but instead may require the use of an environment variable like @code{LD_LIBRARY_PATH}. @end itemize The macros also set a variable @code{LTLIB<@var{NAME}>}, that should be used when linking with libtool. Both @code{LTLIB<@var{NAME}>} and @code{LIB<@var{NAME}>} contain essentially the same option, but where @code{LIB<@var{NAME}>} contains platform dependent flags like @samp{-Wl,-rpath}, @code{LTLIB<@var{NAME}>} contains platform independent flags like @samp{-R}. If you, by mistake, use @code{LIB<@var{NAME}>} instead of @code{LTLIB<@var{NAME}>} when linking with libtool, you will observe that the binaries created in the build dir will prefer the shared libraries in the installation directories over the shared libraries in the build dir; this can lead to all sorts of build failures, test failures, or crashes! If you, on the other hand, by mistake, use @code{LTLIB<@var{NAME}>} instead of @code{LIB<@var{NAME}>} when linking @emph{without} libtool, you will observe build failures, because the @samp{-R} options contained in @code{LTLIB<@var{NAME}>} are not valid options to compilers such as GCC. @unnumberedsubsubsec Example of using @code{AC_LIB_LINKFLAGS} Suppose you want to use @code{libz}, the compression library. @enumerate @item In configure.ac you add the line @smallexample AC_CONFIG_AUX_DIR([build-aux]) AC_LIB_LINKFLAGS([z]) @end smallexample @noindent Note that since the @code{AC_LIB_LINKFLAGS} invocation modifies the CPPFLAGS, it should precede all tests that check for header files, declarations, structures or types. @item To the package's @file{build-aux} directory you add the file @file{config.rpath}, also part of the Gnulib @code{havelib} module. (@code{gnulib-tool} will usually do this for you automatically.) @item In @code{Makefile.in} you add @code{@@LIBZ@@} to the link command line of your program. Or, if you are using Automake, you add @code{$(LIBZ)} to the @code{LDADD} variable that corresponds to your program. @end enumerate @unnumberedsubsubsec Dependencies The dependencies list is a space separated list of library names that @code{lib@var{name}} is known to depend upon. Example: If @code{libfooy} depends on @code{libfoox}, and @code{libfooz} depends on @code{libfoox} and @code{libfooy}, you can write: @smallexample AC_LIB_LINKFLAGS([foox]) AC_LIB_LINKFLAGS([fooy], [foox]) AC_LIB_LINKFLAGS([fooz], [foox fooy]) @end smallexample @noindent Explicit dependencies are necessary if you cannot assume that a @code{.la} file, created by libtool, is installed. If you can assume that @code{libfooy.la} is installed by libtool (and has not been omitted by the package distributor!), you can omit the explicit dependency and just write @smallexample AC_LIB_LINKFLAGS([fooy]) @end smallexample @noindent This way, you don't need to know in advance which libraries the needed library depends upon. @unnumberedsubsubsec Static vs. shared The macros find the libraries regardless whether they are installed as shared or static libraries. @unnumberedsubsubsec @code{CPPFLAGS} vs. @code{LDFLAGS} The macros determine the directories that should be added to the compiler preprocessor's search path and to the linker's search path. For the compiler preprocessor, @code{-I} options with the necessary directories are added to the @code{CPPFLAGS} variable, for use by the whole package. For the linker, appropriate options are added to the @code{LIB<@var{NAME}>} and @code{LTLIB<@var{NAME}>} variables, for use during linking by those programs and libraries that need the dependency on @code{lib<@var{name}>}. You need to use the value of @code{LIB<@var{NAME}>} or @code{LTLIB<@var{NAME}>} in the Makefiles. @code{LTLIB<@var{NAME}>} is for use with libtool, whereas @code{LIB<@var{NAME}>} is for when libtool is not involved in linking. The macros do not check whether the include files and the library found match. If you want to verify this at configure time, one technique is to have a version number in the include files and a version number in the library, like this: @smallexample #define LIB@var{NAME}_VERSION 10203 extern int lib@var{name}_version; /* initialized to LIB@var{NAME}_VERSION */ @end smallexample @noindent and use a test like @smallexample AC_TRY_RUN([int main () @{ return lib@var{name}_version != LIB@var{NAME}_VERSION; @}]) @end smallexample @unnumberedsubsubsec Bi-arch systems A bi-arch system is one where @itemize @item the processor has a 32-bit execution mode and a 64-bit execution mode (for example, x86_64, ia64, sparc64, powerpc64), and @item 32-bit mode libraries and executables and 64-bit mode libraries are both installed, and @item 32-bit mode libraries and object files cannot be mixed with 64-bit mode ones. @end itemize On several types of such systems, for historical reasons, the 32-bit libraries are installed in @file{@var{prefix}/lib}, whereas the 64-bit libraries are installed in @itemize @item @file{@var{prefix}/lib64} on many glibc systems, @item @file{@var{prefix}/lib/64} on Solaris systems. @end itemize On such systems, in 64-bit mode, @command{configure} will search for the libraries in @file{@var{prefix}/lib64} or @file{@var{prefix}/lib/64}, respectively, not in @file{@var{prefix}/lib}. A user can adhere to these system-wide conventions by using the @samp{--libdir} option when installing packages. When a user has already installed packages in 64-bit mode using the GNU default @samp{--libdir=@var{prefix}/lib}, he can make this directory adhere to the system-wide convention by placing a symbolic link: @table @asis @item On glibc systems: @code{ln -s lib @var{prefix}/lib64} @item On Solaris systems: @code{ln -s . @var{prefix}/lib/64} @end table gnulib-20210822~d383792/doc/install.texi000066400000000000000000000417701411057217300174160ustar00rootroot00000000000000@c This file is included by autoconf.texi and is used to produce @c the INSTALL file. @ifclear autoconf @unnumbered Installation Instructions Copyright @copyright{} 1994--1996, 1999--2002, 2004--2017, 2020--2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. @end ifclear @node Basic Installation @section Basic Installation Briefly, the shell command @samp{./configure@tie{}&& make@tie{}&& make@tie{}install} should configure, build, and install this package. The following more-detailed instructions are generic; see the @file{README} file for instructions specific to this package. @ifclear autoconf Some packages provide this @file{INSTALL} file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. @end ifclear More recommendations for GNU packages can be found in @ref{Makefile Conventions, , Makefile Conventions, standards, GNU Coding Standards}. The @command{configure} shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a @file{Makefile} in each directory of the package. It may also create one or more @file{.h} files containing system-dependent definitions. Finally, it creates a shell script @file{config.status} that you can run in the future to recreate the current configuration, and a file @file{config.log} containing compiler output (useful mainly for debugging @command{configure}). It can also use an optional file (typically called @file{config.cache} and enabled with @option{--cache-file=config.cache} or simply @option{-C}) that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how @command{configure} could check whether to do them, and mail diffs or instructions to the address given in the @file{README} so they can be considered for the next release. If you are using the cache, and at some point @file{config.cache} contains results you don't want to keep, you may remove or edit it. The file @file{configure.ac} (or @file{configure.in}) is used to create @file{configure} by a program called @command{autoconf}. You need @file{configure.ac} if you want to change it or regenerate @file{configure} using a newer version of @command{autoconf}. The simplest way to compile this package is: @enumerate @item @command{cd} to the directory containing the package's source code and type @samp{./configure} to configure the package for your system. Running @command{configure} might take a while. While running, it prints some messages telling which features it is checking for. @item Type @samp{make} to compile the package. @item Optionally, type @samp{make check} to run any self-tests that come with the package, generally using the just-built uninstalled binaries. @item Type @samp{make install} to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the @samp{make install} phase executed with root privileges. @item Optionally, type @samp{make installcheck} to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior @samp{make install} required root privileges, verifies that the installation completed correctly. @item You can remove the program binaries and object files from the source code directory by typing @samp{make clean}. To also remove the files that @command{configure} created (so you can compile the package for a different kind of computer), type @samp{make distclean}. There is also a @samp{make maintainer-clean} target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. @item Often, you can also type @samp{make uninstall} to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. @item Some packages, particularly those that use Automake, provide @samp{make distcheck}, which can by used by developers to test that all other targets like @samp{make install} and @samp{make uninstall} work correctly. This target is generally not run by end users. @end enumerate @node Compilers and Options @section Compilers and Options Some systems require unusual options for compilation or linking that the @command{configure} script does not know about. Run @samp{./configure --help} for details on some of the pertinent environment variables. You can give @command{configure} initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: @example ./configure CC=c99 CFLAGS=-g LIBS=-lposix @end example @xref{Defining Variables}, for more details. @node Multiple Architectures @section Compiling For Multiple Architectures You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU @command{make}. @command{cd} to the directory where you want the object files and executables to go and run the @command{configure} script. @command{configure} automatically checks for the source code in the directory that @command{configure} is in and in @file{..}. This is known as a @dfn{VPATH} build. With a non-GNU @command{make}, it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use @samp{make distclean} before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types---known as @dfn{fat} or @dfn{universal} binaries---by specifying multiple @option{-arch} options to the compiler but only a single @option{-arch} option to the preprocessor. Like this: @example ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" @end example This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the @command{lipo} tool if you have problems. @node Installation Names @section Installation Names By default, @samp{make install} installs the package's commands under @file{/usr/local/bin}, include files under @file{/usr/local/include}, etc. You can specify an installation prefix other than @file{/usr/local} by giving @command{configure} the option @option{--prefix=@var{prefix}}, where @var{prefix} must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option @option{--exec-prefix=@var{prefix}} to @command{configure}, the package uses @var{prefix} as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like @option{--bindir=@var{dir}} to specify different values for particular kinds of files. Run @samp{configure --help} for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of @samp{$@{prefix@}}, so that specifying just @option{--prefix} will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to @command{configure}; however, many packages provide one or both of the following shortcuts of passing variable assignments to the @samp{make install} command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, @samp{make install prefix=/alternate/directory} will choose an alternate location for all directory configuration variables that were expressed in terms of @samp{$@{prefix@}}. Any directories that were specified during @command{configure}, but not in terms of @samp{$@{prefix@}}, must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the @samp{DESTDIR} variable. For example, @samp{make install DESTDIR=/alternate/directory} will prepend @samp{/alternate/directory} before all installation names. The approach of @samp{DESTDIR} overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of @samp{$@{prefix@}} at @command{configure} time. @node Optional Features @section Optional Features If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving @command{configure} the option @option{--program-prefix=@var{PREFIX}} or @option{--program-suffix=@var{SUFFIX}}. Some packages pay attention to @option{--enable-@var{feature}} options to @command{configure}, where @var{feature} indicates an optional part of the package. They may also pay attention to @option{--with-@var{package}} options, where @var{package} is something like @samp{gnu-as} or @samp{x} (for the X Window System). The @file{README} should mention any @option{--enable-} and @option{--with-} options that the package recognizes. For packages that use the X Window System, @command{configure} can usually find the X include and library files automatically, but if it doesn't, you can use the @command{configure} options @option{--x-includes=@var{dir}} and @option{--x-libraries=@var{dir}} to specify their locations. Some packages offer the ability to configure how verbose the execution of @command{make} will be. For these packages, running @samp{./configure --enable-silent-rules} sets the default to minimal output, which can be overridden with @code{make V=1}; while running @samp{./configure --disable-silent-rules} sets the default to verbose, which can be overridden with @code{make V=0}. @node Particular Systems @section Particular systems On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: @example ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" @end example @noindent and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX @command{make} updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as @command{configure} are involved. Use GNU @command{make} instead. On OSF/1 a.k.a.@: Tru64, some versions of the default C compiler cannot parse its @code{} header file. The option @option{-nodtk} can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try @example ./configure CC="cc" @end example @noindent and if that doesn't work, try @example ./configure CC="cc -nodtk" @end example On Solaris, don't put @code{/usr/ucb} early in your @env{PATH}. This directory contains several dysfunctional programs; working variants of these programs are available in @code{/usr/bin}. So, if you need @code{/usr/ucb} in your @env{PATH}, put it @emph{after} @code{/usr/bin}. On Haiku, software installed for all users goes in @file{/boot/common}, not @file{/usr/local}. It is recommended to use the following options: @example ./configure --prefix=/boot/common @end example @node System Type @section Specifying the System Type There may be some features @command{configure} cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the @emph{same} architectures, @command{configure} can figure that out, but if it prints a message saying it cannot guess the machine type, give it the @option{--build=@var{type}} option. @var{type} can either be a short name for the system type, such as @samp{sun4}, or a canonical name which has the form: @example @var{cpu}-@var{company}-@var{system} @end example @noindent where @var{system} can have one of these forms: @example @var{os} @var{kernel}-@var{os} @end example See the file @file{config.sub} for the possible values of each field. If @file{config.sub} isn't included in this package, then this package doesn't need to know the machine type. If you are @emph{building} compiler tools for cross-compiling, you should use the option @option{--target=@var{type}} to select the type of system they will produce code for. If you want to @emph{use} a cross compiler, that generates code for a platform different from the build platform, you should specify the @dfn{host} platform (i.e., that on which the generated programs will eventually be run) with @option{--host=@var{type}}. @node Sharing Defaults @section Sharing Defaults If you want to set default values for @command{configure} scripts to share, you can create a site shell script called @file{config.site} that gives default values for variables like @code{CC}, @code{cache_file}, and @code{prefix}. @command{configure} looks for @file{@var{prefix}/share/config.site} if it exists, then @file{@var{prefix}/etc/config.site} if it exists. Or, you can set the @code{CONFIG_SITE} environment variable to the location of the site script. A warning: not all @command{configure} scripts look for a site script. @node Defining Variables @section Defining Variables Variables not defined in a site shell script can be set in the environment passed to @command{configure}. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the @command{configure} command line, using @samp{VAR=value}. For example: @example ./configure CC=/usr/local2/bin/gcc @end example @noindent causes the specified @command{gcc} to be used as the C compiler (unless it is overridden in the site shell script). @noindent Unfortunately, this technique does not work for @env{CONFIG_SHELL} due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: @example CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash @end example @node configure Invocation @section @command{configure} Invocation @command{configure} recognizes the following options to control how it operates. @table @option @item --help @itemx -h Print a summary of all of the options to @command{configure}, and exit. @item --help=short @itemx --help=recursive Print a summary of the options unique to this package's @command{configure}, and exit. The @code{short} variant lists options used only in the top level, while the @code{recursive} variant lists options also present in any nested packages. @item --version @itemx -V Print the version of Autoconf used to generate the @command{configure} script, and exit. @item --cache-file=@var{file} @cindex Cache, enabling Enable the cache: use and save the results of the tests in @var{file}, traditionally @file{config.cache}. @var{file} defaults to @file{/dev/null} to disable caching. @item --config-cache @itemx -C Alias for @option{--cache-file=config.cache}. @item --quiet @itemx --silent @itemx -q Do not print messages saying which checks are being made. To suppress all normal output, redirect it to @file{/dev/null} (any error messages will still be shown). @item --srcdir=@var{dir} Look for the package's source code in directory @var{dir}. Usually @command{configure} can determine that directory automatically. @item --prefix=@var{dir} Use @var{dir} as the installation prefix. @ref{Installation Names} for more details, including other options available for fine-tuning the installation locations. @item --no-create @itemx -n Run the configure checks, but stop before creating any output files. @end table @noindent @command{configure} also accepts some other, not widely useful, options. Run @samp{configure --help} for more details. @c Local Variables: @c fill-column: 72 @c ispell-local-dictionary: "american" @c indent-tabs-mode: nil @c whitespace-check-buffer-indent: nil @c End: gnulib-20210822~d383792/doc/intprops.texi000066400000000000000000000505451411057217300176260ustar00rootroot00000000000000@node Integer Properties @section Integer Properties @c Copyright (C) 2011--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @c Written by Paul Eggert. @cindex integer properties The @code{intprops} module consists of an include file @code{} that defines several macros useful for testing properties of integer types. @cindex integer overflow @cindex overflow, integer Integer overflow is a common source of problems in programs written in C and other languages. In some cases, such as signed integer arithmetic in C programs, the resulting behavior is undefined, and practical platforms do not always behave as if integers wrap around reliably. In other cases, such as unsigned integer arithmetic in C, the resulting behavior is well-defined, but programs may still misbehave badly after overflow occurs. Many techniques have been proposed to attack these problems. These include precondition testing, wraparound behavior where signed integer arithmetic is guaranteed to be modular, saturation semantics where overflow reliably yields an extreme value, undefined behavior sanitizers where overflow is guaranteed to trap, and various static analysis techniques. Gnulib supports wraparound arithmetic and precondition testing, as these are relatively easy to support portably and efficiently. There are two families of precondition tests: the first, for integer types, is easier to use, while the second, for integer ranges, has a simple and straightforward portable implementation. Like other Gnulib modules, the implementation of the @code{intprops} module assumes that integers use a two's complement representation, but it does not assume that signed integer arithmetic wraps around. @xref{Other portability assumptions}. @menu * Arithmetic Type Properties:: Determining properties of arithmetic types. * Integer Bounds:: Bounds on integer values and representations. * Checking Integer Overflow:: Checking for overflow while computing integers. * Wraparound Arithmetic:: Well-defined behavior on integer overflow. * Integer Type Overflow:: General integer overflow checking. * Integer Range Overflow:: Integer overflow checking if bounds are known. @end menu @node Arithmetic Type Properties @subsection Arithmetic Type Properties @findex TYPE_IS_INTEGER @code{TYPE_IS_INTEGER (@var{t})} is an arithmetic constant expression that is 1 if the arithmetic type @var{t} is an integer type. @code{_Bool} counts as an integer type. @findex TYPE_SIGNED @code{TYPE_SIGNED (@var{t})} is an arithmetic constant expression that is 1 if the real type @var{t} is a signed integer type or a floating type. If @var{t} is an integer type, @code{TYPE_SIGNED (@var{t})} is an integer constant expression. @findex EXPR_SIGNED @code{EXPR_SIGNED (@var{e})} is 1 if the real expression @var{e} has a signed integer type or a floating type. If @var{e} is an integer constant expression or an arithmetic constant expression, @code{EXPR_SIGNED (@var{e})} is likewise. The expression @var{e} is not evaluated, and @code{EXPR_SIGNED (@var{e})} is typically optimized to a constant. Example usage: @example #include #include enum @{ time_t_is_signed_integer = TYPE_IS_INTEGER (time_t) && TYPE_SIGNED (time_t) @}; int CLOCKS_PER_SEC_is_signed (void) @{ return EXPR_SIGNED (CLOCKS_PER_SEC); @} @end example @node Integer Bounds @subsection Integer Bounds @cindex integer bounds @findex INT_BUFSIZE_BOUND @code{INT_BUFSIZE_BOUND (@var{t})} is an integer constant expression that is a bound on the size of the string representing an integer type or expression @var{t} in decimal notation, including the terminating null character and any leading @code{-} character. For example, if @code{INT_BUFSIZE_BOUND (int)} is 12, any value of type @code{int} can be represented in 12 bytes or less, including the terminating null. The bound is not necessarily tight. Example usage: @example #include #include int int_strlen (int i) @{ char buf[INT_BUFSIZE_BOUND (int)]; return sprintf (buf, "%d", i); @} @end example @findex INT_STRLEN_BOUND @code{INT_STRLEN_BOUND (@var{t})} is an integer constant expression that is a bound on the length of the string representing an integer type or expression @var{t} in decimal notation, including any leading @code{-} character. This is one less than @code{INT_BUFSIZE_BOUND (@var{t})}. @findex TYPE_MINIMUM @findex TYPE_MAXIMUM @code{TYPE_MINIMUM (@var{t})} and @code{TYPE_MAXIMUM (@var{t})} are integer constant expressions equal to the minimum and maximum values of the integer type @var{t}. These expressions are of the type @var{t} (or more precisely, the type @var{t} after integer promotions). Example usage: @example #include #include #include int in_off_t_range (intmax_t a) @{ return TYPE_MINIMUM (off_t) <= a && a <= TYPE_MAXIMUM (off_t); @} @end example @node Checking Integer Overflow @subsection Checking Integer Overflow @cindex integer overflow checking Signed integer arithmetic has undefined behavior on overflow in C@. Although almost all modern computers use two's complement signed arithmetic that is well-defined to wrap around, C compilers routinely optimize assuming that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine arithmetic. For example: @example if ((a + b < b) == (a < 0)) a += b; else printf ("overflow\n"); @end example @noindent might not work as expected if @code{a} and @code{b} are signed, because a compiler can assume that signed overflow cannot occur and treat the entire @code{if} expression as if it were true. And even if @code{a} is unsigned, the expression might not work as expected if @code{b} is negative or is wider than @code{a}. The following macros work around this problem by returning an overflow indication while computing the sum, difference, or product of two integers. For example, if @code{i} is of type @code{int}, @code{INT_ADD_OK (INT_MAX - 1, 1, &i)} sets @code{i} to @code{INT_MAX} and returns true, whereas @code{INT_ADD_OK (INT_MAX, 1, &i)} returns false. Example usage: @example #include #include /* Compute A * B, reporting whether overflow occurred. */ void print_product (long int a, long int b) @{ long int r; if (INT_MULTIPLY_OK (a, b, r)) printf ("result is %ld\n", r); else printf ("overflow\n"); @} @end example These macros work for both signed and unsigned integers, so they can be used with integer types like @code{time_t} that may or may not be signed, depending on the platform. These macros have the following restrictions: @itemize @bullet @item Their first two arguments must be integer expressions. @item Their last argument must be a non-null pointer to an integer. @item They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. @item They are not necessarily constant expressions, even if all their arguments are constant expressions. @end itemize @table @code @item INT_ADD_OK (@var{a}, @var{b}, @var{r}) @findex INT_ADD_OK Compute the sum of @var{a} and @var{b}. If it fits into @code{*@var{r}}, store it there and return true. Otherwise return false, possibly modifying @code{*@var{r}} to an unspecified value. See above for restrictions. @item INT_SUBTRACT_OK (@var{a}, @var{b}, @var{r}) @findex INT_SUBTRACT_OK Compute the difference between @var{a} and @var{b}. If it fits into @code{*@var{r}}, store it there and return true. Otherwise return false, possibly modifying @code{*@var{r}} to an unspecified value. See above for restrictions. @item INT_MULTIPLY_OK (@var{a}, @var{b}, @var{r}) @findex INT_MULTIPLY_OK Compute the product of @var{a} and @var{b}. If it fits into @code{*@var{r}}, store it there and return true. Otherwise return false, possibly modifying @code{*@var{r}} to an unspecified value. See above for restrictions. @end table Other macros are available if you need wrapped-around results when overflow occurs (@pxref{Wraparound Arithmetic}), or if you need to check for overflow in operations other than addition, subtraction, and multiplication (@pxref{Integer Type Overflow}). @node Wraparound Arithmetic @subsection Wraparound Arithmetic with Integers @cindex wraparound integer arithmetic Signed integer arithmetic has undefined behavior on overflow in C@. Although almost all modern computers use two's complement signed arithmetic that is well-defined to wrap around, C compilers routinely optimize assuming that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine arithmetic. For example, on a typical machine with 32-bit two's complement @code{int} the expression @code{INT_MAX + 1} does not necessarily yield @code{INT_MIN}, because the compiler may do calculations with a 64-bit register, or may generate code that traps on signed integer overflow. The following macros work around this problem by storing the wraparound value, i.e., the low-order bits of the correct answer, and by returning an overflow indication. For example, if @code{i} is of type @code{int}, @code{INT_ADD_WRAPV (INT_MAX, 1, &i)} sets @code{i} to @code{INT_MIN} and returns 1 on a two's complement machine. @xref{Integer Type Overflow}. Example usage: @example #include #include /* Print the low order bits of A * B, reporting whether overflow occurred. */ void print_product (long int a, long int b) @{ long int r; int overflow = INT_MULTIPLY_WRAPV (a, b, &r); printf ("result is %ld (%s)\n", r, (overflow ? "after overflow" : "no overflow")); @} @end example These macros work for both signed and unsigned integers, so they can be used with integer types like @code{time_t} that may or may not be signed, depending on the platform. These macros have the following restrictions: @itemize @bullet @item Their first two arguments must be integer expressions. @item Their last argument must be a non-null pointer to an integer. @item They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. @item They are not necessarily constant expressions, even if all their arguments are constant expressions. @end itemize @table @code @item INT_ADD_WRAPV (@var{a}, @var{b}, @var{r}) @findex INT_ADD_WRAPV Store the low-order bits of the sum of @var{a} and @var{b} into @code{*@var{r}}. Return true if overflow occurred, false if the low-order bits are the mathematically-correct sum. See above for restrictions. @item INT_SUBTRACT_WRAPV (@var{a}, @var{b}, @var{r}) @findex INT_SUBTRACT_WRAPV Store the low-order bits of the difference between @var{a} and @var{b} into @code{*@var{r}}. Return true if overflow occurred, false if the low-order bits are the mathematically-correct difference. See above for restrictions. @item INT_MULTIPLY_WRAPV (@var{a}, @var{b}, @var{r}) @findex INT_MULTIPLY_WRAPV Store the low-order bits of the product of @var{a} and @var{b} into @code{*@var{r}}. Return true if overflow occurred, false if the low-order bits are the mathematically-correct product. See above for restrictions. @end table Other macros are available if you do not need wrapped-around results when overflow occurs (@pxref{Checking Integer Overflow}), or if you need to check for overflow in operations other than addition, subtraction, and multiplication (@pxref{Integer Type Overflow}). @node Integer Type Overflow @subsection Integer Type Overflow @cindex integer type overflow @cindex overflow, integer type Although unsigned integer arithmetic wraps around modulo a power of two, signed integer arithmetic has undefined behavior on overflow in C@. Almost all modern computers use two's complement signed arithmetic that is well-defined to wrap around, but C compilers routinely optimize based on the assumption that signed integer overflow cannot occur, which means that a C program cannot easily get at the underlying machine behavior. For example, the signed integer expression @code{(a + b < b) != (a < 0)} is not a reliable test for whether @code{a + b} overflows, because a compiler can assume that signed overflow cannot occur and treat the entire expression as if it were false. These macros yield 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow of an integer type. They work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. They are integer constant expressions if their arguments are. They are typically easier to use than the integer range overflow macros (@pxref{Integer Range Overflow}), and they support more operations and evaluation contexts than the wraparound macros (@pxref{Wraparound Arithmetic}). Example usage: @example #include #include #include /* Print A * B if in range, an overflow indicator otherwise. */ void print_product (long int a, long int b) @{ if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("multiply would overflow"); else printf ("product is %ld", a * b); @} /* Does the product of two ints always fit in a long int? */ enum @{ INT_PRODUCTS_FIT_IN_LONG = ! (INT_MULTIPLY_OVERFLOW ((long int) INT_MIN, INT_MIN)) @}; @end example @noindent These macros have the following restrictions: @itemize @bullet @item Their arguments must be integer expressions. @item They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. @end itemize @noindent These macros are tuned for their last argument being a constant. @table @code @item INT_ADD_OVERFLOW (@var{a}, @var{b}) @findex INT_ADD_OVERFLOW Yield 1 if @code{@var{a} + @var{b}} would overflow. See above for restrictions. @item INT_SUBTRACT_OVERFLOW (@var{a}, @var{b}) @findex INT_SUBTRACT_OVERFLOW Yield 1 if @code{@var{a} - @var{b}} would overflow. See above for restrictions. @item INT_NEGATE_OVERFLOW (@var{a}) @findex INT_NEGATE_OVERFLOW Yields 1 if @code{-@var{a}} would overflow. See above for restrictions. @item INT_MULTIPLY_OVERFLOW (@var{a}, @var{b}) @findex INT_MULTIPLY_OVERFLOW Yield 1 if @code{@var{a} * @var{b}} would overflow. See above for restrictions. @item INT_DIVIDE_OVERFLOW (@var{a}, @var{b}) @findex INT_DIVIDE_OVERFLOW Yields 1 if @code{@var{a} / @var{b}} would overflow. See above for restrictions. Division overflow can happen on two's complement hosts when dividing the most negative integer by @minus{}1. This macro does not check for division by zero. @item INT_REMAINDER_OVERFLOW (@var{a}, @var{b}) @findex INT_REMAINDER_OVERFLOW Yield 1 if @code{@var{a} % @var{b}} would overflow. See above for restrictions. Remainder overflow can happen on two's complement hosts when dividing the most negative integer by @minus{}1; although the mathematical result is always 0, in practice some implementations trap, so this counts as an overflow. This macro does not check for division by zero. @item INT_LEFT_SHIFT_OVERFLOW (@var{a}, @var{b}) @findex INT_LEFT_SHIFT_OVERFLOW Yield 1 if @code{@var{a} << @var{b}} would overflow. See above for restrictions. The C standard says that behavior is undefined for shifts unless 0@leq{}@var{b}<@var{w} where @var{w} is @var{a}'s word width, and that when @var{a} is negative then @code{@var{a} << @var{b}} has undefined behavior, but this macro does not check these other restrictions. @end table @node Integer Range Overflow @subsection Integer Range Overflow @cindex integer range overflow @cindex overflow, integer range These macros yield 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. They are integer constant expressions if their arguments are. Their implementations are simple and straightforward, but they are typically harder to use than the integer type overflow macros. @xref{Integer Type Overflow}. Although the implementation of these macros is similar to that suggested in the SEI CERT C Secure Coding Standard, in its two sections ``@url{https://www.securecoding.cert.org/confluence/display/c/INT30-C.+Ensure+that+unsigned+integer+operations+do+not+wrap, INT30-C@. Ensure that unsigned integer operations do not wrap}'' and ``@url{https://www.securecoding.cert.org/confluence/display/c/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow, INT32-C@. Ensure that operations on signed integers do not result in overflow}'', Gnulib's implementation was derived independently of CERT's suggestions. Example usage: @example #include #include #include void print_product (long int a, long int b) @{ if (INT_MULTIPLY_RANGE_OVERFLOW (a, b, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", a * b); @} /* Does the product of two ints always fit in a long int? */ enum @{ INT_PRODUCTS_FIT_IN_LONG = ! (INT_MULTIPLY_RANGE_OVERFLOW ((long int) INT_MIN, (long int) INT_MIN, LONG_MIN, LONG_MAX)) @}; @end example @noindent These macros have the following restrictions: @itemize @bullet @item Their arguments must be integer expressions. @item They may evaluate their arguments zero or multiple times, so the arguments should not have side effects. @item The arithmetic arguments (including the @var{min} and @var{max} arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value @var{min} and maximum @var{max}. Unsigned values should use a zero @var{min} of the proper type, for example, @code{(unsigned int) 0}. @end itemize @noindent These macros are tuned for constant @var{min} and @var{max}. For commutative operations such as @code{@var{a} + @var{b}}, they are also tuned for constant @var{b}. @table @code @item INT_ADD_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_ADD_RANGE_OVERFLOW Yield 1 if @code{@var{a} + @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. @item INT_SUBTRACT_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_SUBTRACT_RANGE_OVERFLOW Yield 1 if @code{@var{a} - @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. @item INT_NEGATE_RANGE_OVERFLOW (@var{a}, @var{min}, @var{max}) @findex INT_NEGATE_RANGE_OVERFLOW Yield 1 if @code{-@var{a}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. @item INT_MULTIPLY_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_MULTIPLY_RANGE_OVERFLOW Yield 1 if @code{@var{a} * @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. @item INT_DIVIDE_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_DIVIDE_RANGE_OVERFLOW Yield 1 if @code{@var{a} / @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. Division overflow can happen on two's complement hosts when dividing the most negative integer by @minus{}1. This macro does not check for division by zero. @item INT_REMAINDER_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_REMAINDER_RANGE_OVERFLOW Yield 1 if @code{@var{a} % @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. Remainder overflow can happen on two's complement hosts when dividing the most negative integer by @minus{}1; although the mathematical result is always 0, in practice some implementations trap, so this counts as an overflow. This macro does not check for division by zero. @item INT_LEFT_SHIFT_RANGE_OVERFLOW (@var{a}, @var{b}, @var{min}, @var{max}) @findex INT_LEFT_SHIFT_RANGE_OVERFLOW Yield 1 if @code{@var{a} << @var{b}} would overflow in [@var{min},@var{max}] integer arithmetic. See above for restrictions. Here, @var{min} and @var{max} are for @var{a} only, and @var{b} need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0@leq{}@var{b}<@var{w} where @var{w} is @var{a}'s word width, and that when @var{a} is negative then @code{@var{a} << @var{b}} has undefined behavior, but this macro does not check these other restrictions. @end table gnulib-20210822~d383792/doc/largefile.texi000066400000000000000000000006241411057217300176730ustar00rootroot00000000000000@node Large File Support @section Large File Support The module provides support for files larger than 2 GB, or with device or inode numbers or timestamps exceeding 32 bits. To this effect, it ensures that types like @code{off_t} and @code{time_t} are 64-bit when possible, at least on the following platforms: glibc, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, Solaris, Cygwin, mingw, MSVC. gnulib-20210822~d383792/doc/ld-output-def.texi000066400000000000000000000050111411057217300204250ustar00rootroot00000000000000@node Visual Studio Compatibility @section Visual Studio Compatibility @cindex DEF files @cindex LD DEF files The @code{lib-msvc-compat} module detects whether the linker supports @code{--output-def} when building a library. That parameter is used to generate a DEF file for a shared library (DLL). DEF files are useful for developers that use Visual Studio to develop programs that links to your library. See the GNU LD manual for more information. There are other ways to create a DEF file, but we believe they are all sub-optimal to using @code{--output-def} during the build process. The variants we have considered include: @itemize @bullet @item Use DUMPBIN /EXPORTS. This is explained in @url{https://docs.microsoft.com/en-us/cpp/build/reference/dash-exports}. The tool does not generate DEF files directly, so its output needs to be post processed manually: @smallexample $ @{ echo EXPORTS; \ dumpbin /EXPORTS libfoo-0.dll | tail -n+20 | awk '@{ print $4 @}'; \ @} > libfoo-0.def $ lib /def:libfoo-0.def @end smallexample @item Use IMPDEF. There is a tool called IMPDEF that can generate DEF files. However, it is not part of a standard Visual Studio installation. Further, it is documented as being an unreliable process. @item Use DLLTOOL. The dlltool is part of the MinGW suite, and thus not part of a standard Visual Studio installation. The documentation for the IMPDEF tool claims that DLLTOOL is the wrong tool for this job. Finally, DLLTOOL does not generate DEF files directly, so it requires post-processing of the output. @end itemize If you are using libtool to build your shared library, here is how to use this module. Import @code{lib-msvc-compat} to your project, and then add the following lines to the @code{Makefile.am} that builds the library: @smallexample if HAVE_LD_OUTPUT_DEF libfoo_la_LDFLAGS += -Wl,--output-def,libfoo-$(DLL_VERSION).def libfoo-$(DLL_VERSION).def: libfoo.la defexecdir = $(libdir) defexec_DATA = libfoo-$(DLL_VERSION).def DISTCLEANFILES += $(defexec_DATA) endif @end smallexample The @code{DLL_VERSION} variable needs to be defined. It should be the shared library version number used in the DLL filename. For Windows targets you compute this value from the values you pass to Libtool's @code{-version-info}. Assuming you have variables @code{LT_CURRENT} and @code{LT_AGE} defined for the @code{CURRENT} and @code{AGE} libtool version integers, you compute @code{DLL_VERSION} as follows: @smallexample DLL_VERSION=`expr $@{LT_CURRENT@} - $@{LT_AGE@}` AC_SUBST(DLL_VERSION) @end smallexample gnulib-20210822~d383792/doc/ld-version-script.texi000066400000000000000000000044321411057217300213260ustar00rootroot00000000000000@node LD Version Scripts @section LD Version Scripts The @code{lib-symbol-versions} module can be used to add shared library versioning support. Currently, only GNU LD and the Solaris linker supports this. Version scripts provides information that can be used by GNU/Linux distribution packaging tools. For example, Debian has a tool @code{dpkg-shlibdeps} that can determine the minimal required version of each dependency (by looking at the symbol list) and stuff the information into the Debian specific packaging files. For more information and other uses of version scripts, see Ulrich Drepper's paper @url{https://www.akkadia.org/drepper/dsohowto.pdf} You use the module by importing it to your library, and then add the following lines to the @code{Makefile.am} that builds the library: @smallexample if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map endif @end smallexample The version script file format is documented in the GNU LD manual, but a small example would be: @smallexample LIBFOO_1.0 @{ global: libfoo_init; libfoo_doit; libfoo_done; local: *; @}; @end smallexample If you target platforms that do not support linker scripts (i.e., all platforms that doesn't use GNU LD) you may want to consider a more portable but less powerful alternative: libtool @code{-export-symbols}. It will hide internal symbols from your library, but will not add ELF versioning symbols. Your usage would then be something like: @smallexample if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map else libfoo_la_LDFLAGS += -export-symbols $(srcdir)/libfoo.sym endif @end smallexample See the Libtool manual for the file syntax, but a small example would be: @smallexample libfoo_init libfoo_doit libfoo_done @end smallexample To avoid the need for a @code{*.sym} file if your symbols are easily expressed using a regular expression, you may use @code{-export-symbols-regex}: @smallexample if HAVE_LD_VERSION_SCRIPT libfoo_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libfoo.map else libfoo_la_LDFLAGS += -export-symbols-regex '^libfoo_.*' endif @end smallexample For more discussions about symbol visibility, rather than shared library versioning, see the @code{visibility} module (@pxref{Exported Symbols of Shared Libraries}). gnulib-20210822~d383792/doc/lgpl-2.1.texi000066400000000000000000000636771411057217300172160ustar00rootroot00000000000000@c The GNU Lesser General Public License. @center Version 2.1, February 1999 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] @end display @subheading Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software---to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software---typically libraries---of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the @dfn{Lesser} General Public License because it does @emph{Less} to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a ``work based on the library'' and a ``work that uses the library''. The former contains code derived from the library, whereas the latter must be combined with the library in order to run. @subheading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @enumerate 0 @item This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called ``this License''). Each licensee is addressed as ``you''. A ``library'' means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The ``Library'', below, refers to any such software library or work which has been distributed under these terms. A ``work based on the Library'' means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term ``modification''.) ``Source code'' for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. @item You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. @item You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: @enumerate a @item The modified work must itself be a software library. @item You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. @item You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. @item If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) @end enumerate These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. @item You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. @item You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. @item A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a ``work that uses the Library''. Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a ``work that uses the Library'' with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a ``work that uses the library''. The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a ``work that uses the Library'' uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. @item As an exception to the Sections above, you may also combine or link a ``work that uses the Library'' with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: @enumerate a @item Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable ``work that uses the Library'', as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) @item Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. @item Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. @item If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. @item Verify that the user has already received a copy of these materials or that you have already sent this user a copy. @end enumerate For an executable, the required form of the ``work that uses the Library'' must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. @item You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: @enumerate a @item Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. @item Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. @end enumerate @item You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. @item Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. @item If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. @item If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. @item The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. @item If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. @center @b{NO WARRANTY} @item BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @end enumerate @subheading END OF TERMS AND CONDITIONS @page @subheading How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the library's name and an idea of what it does.} Copyright (C) @var{year} @var{name of author} This 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. This 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 this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @end smallexample Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the library, if necessary. Here is a sample; alter the names: @smallexample Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. @var{signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice @end smallexample That's all there is to it! gnulib-20210822~d383792/doc/lgpl-3.0.texi000066400000000000000000000171221411057217300171760ustar00rootroot00000000000000@c The GNU Lesser General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. @enumerate 0 @item Additional Definitions. As used herein, ``this License'' refers to version 3 of the GNU Lesser General Public License, and the ``GNU GPL'' refers to version 3 of the GNU General Public License. ``The Library'' refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An ``Application'' is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A ``Combined Work'' is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the ``Linked Version''. The ``Minimal Corresponding Source'' for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The ``Corresponding Application Code'' for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. @item Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. @item Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: @enumerate a @item under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or @item under the GNU GPL, with none of the additional permissions of this License applicable to that copy. @end enumerate @item Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: @enumerate a @item Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. @item Accompany the object code with a copy of the GNU GPL and this license document. @end enumerate @item Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: @enumerate a @item Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. @item Accompany the Combined Work with a copy of the GNU GPL and this license document. @item For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. @item Do one of the following: @enumerate 0 @item Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. @item Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. @end enumerate @item Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) @end enumerate @item Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: @enumerate a @item Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. @item Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. @end enumerate @item Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. @end enumerate gnulib-20210822~d383792/doc/lib-symbol-visibility.texi000066400000000000000000000161461411057217300222050ustar00rootroot00000000000000@node Exported Symbols of Shared Libraries @section Controlling the Exported Symbols of Shared Libraries @c Documentation of gnulib module 'lib-symbol-visibility'. @c Copyright (C) 2005--2006, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . The @code{lib-symbol-visibility} module allows precise control of the symbols exported by a shared library. This is useful because @itemize @bullet @item It prevents abuse of undocumented APIs of your library. Symbols that are not exported from the library cannot be used. This eliminates the problem that when the maintainer of the library changes internals of the library, maintainers of other projects cry ``breakage''. Instead, these maintainers are forced to negotiate the desired API from the maintainer of the library. @item It reduces the risk of symbol collision between your library and other libraries. For example, the symbol @samp{readline} is defined in several libraries, most of which don't have the same semantics and the same calling convention as the GNU readline library. @item It reduces the startup time of programs linked to the library. This is because the dynamic loader has less symbols to process. @item It allows the compiler to generate better code. Within a shared library, a call to a function that is a global symbol costs a ``call'' instruction to a code location in the so-called PLT (procedure linkage table) which contains a ``jump'' instruction to the actual function's code. (This is needed so that the function can be overridden, for example by a function with the same name in the executable or in a shared library interposed with @code{LD_PRELOAD}.) Whereas a call to a function for which the compiler can assume that it is in the same shared library is just a direct ``call'' instructions. Similarly for variables: A reference to a global variable fetches a pointer in the so-called GOT (global offset table); this is a pointer to the variable's memory. So the code to access it is two memory load instructions. Whereas for a variable which is known to reside in the same shared library, it is just a direct memory access: one memory load instruction. @end itemize There are traditionally three ways to specify the exported symbols of a shared library. @itemize @bullet @item The programmer specifies the list of symbols to be exported when the shared library is created. Usually a command-line option is passed to the linker, with the name of a file containing the symbols. The upside of this approach is flexibility: it allows the same code to be used in different libraries with different export lists. The downsides are: 1. it's a lot of maintenance overhead when the symbol list is platform dependent, 2. it doesn't work well with C++, due to name mangling. @item The programmer specifies a ``hidden'' attribute for every variable and function that shall not be exported. The drawbacks of this approach are: Symbols are still exported from the library by default. It's a lot of maintenance work to mark every non- exported variable and function. But usually the exported API is quite small, compared to the internal API of the library. And it's the wrong paradigm: It doesn't force thinking when introducing new exported API. @item The programmer specifies a ``hidden'' attribute for all files that make up the shared library, and an ``exported'' attribute for those symbols in these files that shall be exported. This is perfect: It burdens the maintainer only for exported API, not for library-internal API@. And it keeps the annotations in the source code. @end itemize GNU libtool's @option{-export-symbols} option implements the first approach. The script @code{declared.sh} from Gnulib can help to produce the list of symbols. This gnulib module implements the third approach. For this it relies on GNU GCC 4.0 or newer, namely on its @samp{-fvisibility=hidden} command-line option and the ``visibility'' attribute. (The ``visibility'' attribute was already supported in GCC 3.4, but without the command line option, introduced in GCC 4.0, the third approach could not be used.) More explanations on this subject can be found in @url{https://gcc.gnu.org/wiki/Visibility}, which contains more details on the GCC features and additional advice for C++ libraries, and in Ulrich Drepper's paper @url{https://www.akkadia.org/drepper/dsohowto.pdf}, which also explains other tricks for reducing the startup time impact of shared libraries. The gnulib autoconf macro @code{gl_VISIBILITY} tests for GCC 4.0 or newer. It defines a Makefile variable @code{@@CFLAG_VISIBILITY@@} containing @samp{-fvisibility=hidden} or nothing. It also defines as a C macro and as a substituted variable: @@HAVE_VISIBILITY@@. Its value is 1 when symbol visibility control is supported, and 0 otherwise. To use this module in a library, say libfoo, you will do these steps: @enumerate @item Add @code{@@CFLAG_VISIBILITY@@} or (in a Makefile.am) @code{$(CFLAG_VISIBILITY)} to the CFLAGS for the compilation of the sources that make up the library. @item Add a C macro definition, say @samp{-DBUILDING_LIBFOO}, to the CPPFLAGS for the compilation of the sources that make up the library. @item Define a macro specific to your library like this. @smallexample #if BUILDING_LIBFOO && HAVE_VISIBILITY #define LIBFOO_DLL_EXPORTED __attribute__((__visibility__("default"))) #else #define LIBFOO_DLL_EXPORTED #endif @end smallexample This macro should be enabled in all public header files of your library. @item Annotate all variable, function and class declarations in all public header files of your library with @samp{LIBFOO_DLL_EXPORTED}. This annotation can occur at different locations: between the @samp{extern} and the type or return type, or just before the entity being declared, or after the entire declarator. My preference is to put it right after @samp{extern}, so that the declarations in the header files remain halfway readable. @end enumerate Note that the precise control of the exported symbols will not work with other compilers than GCC >= 4.0, and will not work on systems where the assembler or linker lack the support of ``hidden'' visibility. Therefore, it's good if, in order to reduce the risk of collisions with symbols in other libraries, you continue to use a prefix specific to your library for all non-static variables and functions and for all C++ classes in your library. Note about other compilers: MSVC support can be added easily, by extending the definition of the macro mentioned above, to something like this: @smallexample #if BUILDING_LIBFOO && HAVE_VISIBILITY #define LIBFOO_DLL_EXPORTED __attribute__((__visibility__("default"))) #elif BUILDING_LIBFOO && defined _MSC_VER #define LIBFOO_DLL_EXPORTED __declspec(dllexport) #elif defined _MSC_VER #define LIBFOO_DLL_EXPORTED __declspec(dllimport) #else #define LIBFOO_DLL_EXPORTED #endif @end smallexample gnulib-20210822~d383792/doc/licenses-texi.texi000066400000000000000000000042141411057217300205140ustar00rootroot00000000000000@node License Texinfo sources @section License Texinfo sources Gnulib provides copies of the GNU GPL, GNU LGPL, GNU Affero GPL, and GNU FDL licenses in Texinfo form. (The master location is @url{https://www.gnu.org/licenses/}). These Texinfo documents do not have any node names and structures built into them; for your manual, you should @code{@@include} them in an appropriate @code{@@node}. The conventional name for the GPL node is @samp{Copying} and for the FDL @samp{GNU Free Documentation License}. The LGPL doesn't seem to have a conventional node name. Of course the license texts themselves should not be changed at all. The recommended way to make use of these license files, consistently with current practice, is as follows: @itemize @item The code license (GNU GPL, GNU LGPL, or GNU Affero GPL) is usually present as a file in the top-level directory. This is true not only for the release tarballs, but also in the VCS repository. The file is typically named @samp{COPYING} for the GNU GPL, or @samp{COPYING.LIB} or @samp{COPYING.LESSER} for the GNU LGPL@. The presence of this file fulfills a legal obligation; see @url{https://www.gnu.org/licenses/gpl-faq.html#WhyMustIInclude}. To make use of the code license in your documentation, you may request one of the modules @code{gpl-3.0}, @code{gpl-2.0}, @code{lgpl-3.0}, @code{lgpl-2.1}, @code{agpl-3.0}, through a @code{gnulib-tool} invocation. Or you may copy the relevant Texinfo file directly into your VCS repository. Both approaches are equally good. The Texinfo file changes very rarely. @item The documentation license file (GNU FDL) is usually not present as a file in the top-level directory, because that would be ambiguous: When you use the GNU FDL, you need to specify the Invariant Sections, the Front-Cover Texts, and the Back-Cover Texts. To make use of this documentation license, copy the relevant Texinfo file into your VCS repository. This makes sure that anyone who receives a copy of your VCS repository has also received a copy of the documentation license. In the documentation, also state what are the Invariant Sections, the Front-Cover Texts, and the Back-Cover Texts. @end itemize gnulib-20210822~d383792/doc/maintain.texi000066400000000000000000003464211411057217300175510ustar00rootroot00000000000000\input texinfo.tex @c -*-texinfo-*- @c %**start of header @setfilename maintain.info @settitle Information for Maintainers of GNU Software @c For double-sided printing, uncomment: @c @setchapternewpage odd @c This date is automagically updated when you save this file: @set lastupdate August 23, 2020 @c %**end of header @documentencoding UTF-8 @dircategory GNU organization @direntry * Maintaining: (maintain). Maintaining GNU software. @end direntry @setchapternewpage off @c Put everything in one index (arbitrarily chosen to be the concept index). @syncodeindex fn cp @syncodeindex pg cp @copying Information for maintainers of GNU software, last updated @value{lastupdate}. Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end copying @titlepage @title Information for Maintainers of GNU Software @author Richard Stallman @author last updated @value{lastupdate} @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top Version @insertcopying @end ifnottex @menu * Preface:: * Getting Help:: * GNU Accounts and Resources:: * Stepping Down:: * Recruiting Developers:: * Legal Matters:: * Clean Ups:: * Platforms:: * Mail:: * Old Versions:: * Distributions:: * Web Pages:: * Ethical and Philosophical Consideration:: * Humor:: * Other Politics:: * Terminology:: * Interviews and Speeches:: * Hosting:: * Donations:: * Free Software Directory:: * Using the Proofreaders List:: * GNU Free Documentation License:: * Index:: @end menu @node Preface @chapter About This Document This file contains guidelines and advice for someone who is the maintainer of a GNU program on behalf of the GNU Project. Everyone is entitled to change and redistribute GNU software; you need not pay attention to this file to get permission. But if you want to maintain a version for widespread distribution, we suggest you follow these guidelines. If you are or would like to be a GNU maintainer, then it is essential to follow these guidelines. In addition to this document, please read and follow the GNU Coding Standards (@pxref{Top, , Contents, standards, GNU Coding Standards}). You may also usefully check the ``Tips for new GNU maintainers'' (@url{https://www.gnu.org/software/maintainer-tips}), a list of the most important things you will need to do as a new maintainer. @cindex @code{bug-standards@@gnu.org} email address @cindex Savannah repository for @code{gnustandards} @cindex @code{gnustandards} project repository Please send corrections or suggestions for this document to @email{bug-standards@@gnu.org}. If you make a suggestion, please include suggested new wording if you can. We prefer a context diff to the Texinfo source, but if that's difficult for you, you can make a diff for some other version of this document, or propose it in any way that makes it clear. The source repository for this document can be found at @url{https://savannah.gnu.org/projects/gnustandards}. @cindex @code{gnustandards-commit@@gnu.org} mailing list If you want to receive diffs for every change to these GNU documents, join the mailing list @code{gnustandards-commit@@gnu.org}, for instance via the web interface at @url{https://lists.gnu.org/mailman/listinfo/gnustandards-commit}. Archives are also available there. @cindex Piercy, Marge This document uses the gender-neutral third-person pronouns ``person'' (which can be shortened to ``perse''), ``per'', ``pers'' and ``perself.'' These pronouns (aside from ``perse'') were promoted, and perhaps invented, by Marge Piercy in @cite{Woman on the Edge of Time}. They are used just like ``she'', ``her'', ``hers'' and ``herself'', except that they apply regardless of gender. For example, ``Person placed per new program under the GNU GPL, to maintain freedom for all users of per work, and this way perse knows perse has done the right thing.'' This release of the GNU Maintainer Information was last updated @value{lastupdate}. @node Getting Help @chapter Getting Help @cindex help, getting @cindex @code{mentors@@gnu.org} mailing list If you have any general questions or encounter a situation where it isn't clear how to get something done or who to ask, you (as a GNU contributor) can always write to @email{mentors@@gnu.org}, which is a list of a few experienced GNU folks who have volunteered to answer questions. Any GNU-related question is fair game for the @code{mentors} list. @cindex advisory committee The GNU Advisory Committee helps to coordinate activities in the GNU project on behalf of RMS (Richard Stallman, the Chief GNUisance). If you have any organizational questions or concerns you can contact the committee at @email{gnu-advisory@@gnu.org}. See @url{https://www.gnu.org/contact/gnu-advisory.html} for the current committee members. Additional information is in @file{/gd/gnuorg/advisory}. @cindex down, when GNU machines are @cindex outage, of GNU machines @cindex @url{https://hostux.social/@@fsfstatus} If you find that any GNU computer systems (@code{fencepost.gnu.org}, @code{ftp.gnu.org}, @code{www.gnu.org}, @code{savannah.gnu.org}, @dots{}) seem to be down, you can check the current status at @url{https://hostux.social/@@fsfstatus}. Most likely the problem, if it can be alleviated at the FSF end, is already being worked on. @cindex sysadmin, FSF @cindex FSF system administrators @cindex GNU system administrators The FSF system administrators maintain the GNU network and server hardware. You can email them at @email{sysadmin@@fsf.org}. Please report any failures in GNU servers to them without delay. Aside from that, please try not to burden them unnecessarily. @node GNU Accounts and Resources @chapter GNU Accounts and Resources @cindex shell account, on fencepost @cindex @code{fencepost.gnu.org} GNU login host @cindex resources for GNU developers @cindex development resources @c We want to repeat this text later, so define a macro. @macro gdgnuorgtext The directory @file{/gd/gnuorg} mentioned throughout this document is available on the general GNU server, currently @code{fencepost.gnu.org}. If you are the maintainer of a GNU package, you should have an account there. If you don't have one already, see @url{https://www.gnu.org/software/README.accounts.html}. Such GNU login accounts include email (see @url{https://www.fsf.org/about/systems/sending-mail-via-fencepost}). You can request for accounts for people who significantly help you in working on the package; we will do this in special cases when there is a good reason. @end macro @gdgnuorgtext{} Other resources available to GNU maintainers are described at @url{https://www.gnu.org/software/devel.html}, as well as throughout this document. In brief: @itemize @bullet @item Login accounts (see above). @item Version control (@pxref{Old Versions}). @item Mailing lists (@pxref{Mail}). @item Web pages (@pxref{Web Pages}). @item Mirrored release areas (@pxref{Distributions}). @cindex Hydra @cindex @code{platform-testers} mailing list @item Pre-release portability testing, both automated (via Hydra) and on request (via volunteers). @end itemize @node Stepping Down @chapter Stepping Down @cindex stepping down as maintainer @cindex resigning as maintainer With good fortune, you will continue maintaining your package for many decades. But sometimes for various reasons maintainers decide to step down. If you're the official maintainer of a GNU package and you decide to step down, please inform the GNU Project (@email{maintainers@@gnu.org}). We need to know that the package no longer has a maintainer, so we can look for and appoint a new maintainer. @cindex @email{maintainers@@gnu.org} If you have an idea for who should take over, please tell @email{maintainers@@gnu.org} your suggestion. The appointment of a new maintainer needs the GNU Project's confirmation, but your judgment that a person is capable of doing the job will carry a lot of weight. As your final act as maintainer, it would be helpful to set up or update the package under @code{savannah.gnu.org} (@pxref{Old Versions}). This will make it much easier for the new maintainer to pick up where you left off and will ensure that the source tree is not misplaced if it takes us a while to find a new maintainer. @node Recruiting Developers @chapter Recruiting Developers Unless your package is a fairly small, you probably won't do all the work on it yourself. Most maintainers recruit other developers to help. Sometimes people will offer to help. Some of them will be capable, while others will not. It's up to you to determine who provides useful help, and encourage those people to participate more. Some of the people who offer to help will support the GNU Project, while others may be interested for other reasons. Some will support the goals of the Free Software Movement, but some may not. They are all welcome to help with the work---we don't ask people's views or motivations before they contribute to GNU packages. As a consequence, you cannot expect all contributors to support the GNU Project, or to have a concern for its policies and standards. So part of your job as maintainer is to exercise your authority on these points when they arise. No matter how much of the work other people do, you are in charge of what goes in the release. When a crucial point arises, you should calmly state your decision and stick to it. Sometimes a package has several co-maintainers who share the role of maintainer. Unlike developers who help, co-maintainers have actually been appointed jointly as the maintainers of the package, and they carry out the maintainer's functions together. If you would like to propose some of your developers as co-maintainers, please contact @email{maintainers@@gnu.org}. We're happy to acknowledge all major contributors to GNU packages on the @url{https://www.gnu.org/people/people.html} web page. Please send an entry for yourself to @email{webmasters@@gnu.org}, and feel free to suggest it to other significant developers on your package. @node Legal Matters @chapter Legal Matters @cindex legal matters This chapter describes procedures you should follow for legal reasons as you maintain the program, to avoid legal difficulties. @menu * Copyright Papers:: * Legally Significant:: * Recording Contributors:: * Copying from Other Packages:: * Copyright Notices:: * License Notices:: * External Libraries:: * Crediting Authors:: @end menu @node Copyright Papers @section Copyright Papers @cindex copyright papers @cindex assignments, copyright @cindex disclaimers If you maintain an FSF-copyrighted package, certain legal procedures are required when incorporating legally significant changes written by other people. This ensures that the FSF has the legal right to distribute the package, and the standing to defend its GPL-covered status in court if necessary. GNU packages need not be FSF-copyrighted; this is up to the author(s), generally at the time the package is dubbed GNU@. When copyright is assigned to the FSF, the FSF can act to stop GPL violations about the package. Otherwise, legal actions are up to the author(s). The rest of this section is about the case when a package is FSF-copyrighted. @emph{Before} incorporating significant changes, make sure that the person who wrote the changes has signed copyright papers and that the Free Software Foundation has received and signed them. We may also need an employer's disclaimer from the person's employer, which confirms that the work was not part of the person's job and the employer makes no claim on it. However, a copy of the person's employment contract, showing that the employer can't claim any rights to this work, is often sufficient. If the employer does claim the work was part of the person's job, and there is no clear basis to say that claim is invalid, then we have to consider it valid. Then the person cannot assign copyright, but the employer can. Many companies have done this. Please ask the appropriate managers to contact @code{assign@@gnu.org}. @cindex data base of GNU copyright assignments To check whether papers have been received, look in @file{/gd/gnuorg/copyright.list}. If you can't look there directly, @email{fsf-records@@gnu.org} can check for you. Our clerk can also check for papers that are waiting to be entered and inform you when expected papers arrive. @cindex @file{/gd/gnuorg} directory @c This paragraph intentionally duplicates information given @c near the beginning of the file--to make sure people don't miss it. @gdgnuorgtext{} In order for the contributor to know person should sign papers, you need to ask per for the necessary papers. If you don't know per well, and you don't know that person is used to our ways of handling copyright papers, then it might be a good idea to raise the subject with a message like this: @quotation Would you be willing to assign the copyright to the Free Software Foundation, so that we could install it in @var{package}? @end quotation @noindent or @quotation Would you be willing to sign a copyright disclaimer to put this change in the public domain, so that we can install it in @var{package}? @end quotation If the contributor then wants more information, you can send per the file @file{/gd/gnuorg/conditions.text}, which explains per options (assign vs.@: disclaim) and their consequences. Once the conversation is under way and the contributor is ready for more details, you should send one of the templates that are found in the directory @file{/gd/gnuorg/Copyright/}; they are also available from the @file{doc/Copyright/} directory of the @code{gnulib} project at @url{https://savannah.gnu.org/projects/gnulib}. This section explains which templates you should use in which circumstances. @strong{Please don't use any of the templates except for those listed here, and please don't change the wording.} Once the conversation is under way, you can send the contributor the precise wording and instructions by email. Before you do this, make sure to get the current version of the template you will use! We change these templates occasionally---don't keep using an old version. For large changes, ask the contributor for an assignment. Send per a copy of the file @file{request-assign.changes}. (Like all the @samp{request-} files, it is in @file{/gd/gnuorg/Copyright} and in @code{gnulib}.) For medium to small changes, request a personal disclaimer by sending per the file @file{request-disclaim.changes}. If the contributor is likely to keep making changes, person might want to sign an assignment for all per future changes to the program. So it is useful to offer per that alternative. If person wants to do it that way, send per the @file{request-assign.future}. When you send a @file{request-} file, you don't need to fill in anything before sending it. Just send the file verbatim to the contributor. The file gives per instructions for how to ask the FSF to mail per the papers to sign. The @file{request-} file also raises the issue of getting an employer's disclaimer from the contributor's employer. When the contributor emails the form to the FSF, the FSF sends per an electronic (usually PDF) copy of the assignment. This, or whatever response is required, should happen within five business days of the initial request. If no reply from the FSF comes after that time, please send a reminder. If there is still no response after an additional week, please write to @email{maintainers@@gnu.org} about it. After receiving the necessary form, the contributor needs to sign it. Contributors residing in the USA or Italy may use GPG in order to sign their assignment. Contributors located anywhere else can print, sign, and then email (or fax) a scanned copy back to the FSF@. (Specific instructions for both cases are sent with the assignment form.) They may use postal mail, if they prefer. To emphasize, the necessary distinction is between residents and non-residents of these countries; citizenship does not matter. For less common cases, we have template files you should send to the contributor. Be sure to fill in the name of the person and the name of the program in these templates, where it says @samp{NAME OF PERSON} and @samp{NAME OF PROGRAM}, before sending; otherwise person might sign without noticing them, and the papers would be useless. Note that in some templates there is more than one place to put the name of the program or the name of the person; be sure to change all of them. All the templates raise the issue of an employer's disclaimer as well. @cindex legal papers for changes in manuals You do not need to ask for separate papers for a manual that is distributed only in the software package it describes. But if we sometimes distribute the manual separately (for instance, if we publish it as a book), then we need separate legal papers for changes in the manual. For smaller changes, use @file{disclaim.changes.manual}; for larger ones, use @file{assign.changes.manual}. To cover both past and future changes to a manual, you can use @file{assign.future.manual}. For a translation of a manual, use @file{assign.translation.manual}. For translations of program strings (as used by GNU Gettext, for example; @pxref{Internationalization,,, standards, GNU Coding Standards}), use @file{disclaim.translation}. If you make use of the Translation Project (@url{https://translationproject.org}) facilities, please check with the TP coordinators that they have sent the contributor the papers; if they haven't, then you should send the papers. In any case, you should wait for the confirmation from the FSF that the signed papers have been received and accepted before integrating the new contributor's material, as usual. If a contributor is reluctant to sign an assignment for a large change, and is willing to sign a disclaimer instead, that is acceptable, so you should offer this alternative if it helps you reach agreement. We prefer an assignment for a larger change, so that we can enforce the GNU GPL for the new text, but a disclaimer is enough to let us use the text. If you maintain a collection of programs, occasionally someone will contribute an entire separate program or manual that should be added to the collection. Then you can use the files @file{request-assign.program}, @file{disclaim.program}, @file{assign.manual}, and @file{disclaim.manual}. We very much prefer an assignment for a new separate program or manual, unless it is quite small, but a disclaimer is acceptable if the contributor insists on handling the matter that way. When a copyright holder has signed an assignment for all future changes to the package, and contributes a change made up of new files which require no change to any of the old files, we want to avoid any uncertainty about whether these files are intended as a change to the package and thus covered by that assignment. The way to do this is to ask the contributor to say so in a message to you --- for instance, ``My modules `frog' and `kangaroo' are intended as changes to the program Hoppers.'' Forward the message to @email{assign@@gnu.org}, who will save it permanently. A variation on this procedure: the contributor who wrote the new files can send copies of the new files which contain such a message. If a contributor wants the FSF to publish only a pseudonym, that is ok. The contributor should say this, and state the desired pseudonym, when answering the @file{request-} form. The actual legal papers will use the real name, but the FSF will publish only the pseudonym. When using one of the other forms, fill in the real name but ask the contributor to discuss the use of a pseudonym with @email{assign@@gnu.org} before sending back the signed form. @strong{Although there are other templates besides the ones listed here, they are for special circumstances; please do not use them without getting advice from @email{assign@@gnu.org}.} If you are not sure what to do, then please ask @email{assign@@gnu.org} for advice; if the contributor asks you questions about the meaning and consequences of the legal papers, and you don't know the answers, you can forward them to @email{assign@@gnu.org} and we will answer. @strong{Please do not try changing the wording of a template yourself. If you think a change is needed, please talk with @email{assign@@gnu.org}, and we will work with a lawyer to decide what to do.} @node Legally Significant @section Legally Significant Changes If a person contributes more than around 15 lines of code and/or text that is legally significant for copyright purposes, we need copyright papers for that contribution, as described above. A change of just a few lines (less than 15 or so) is not legally significant for copyright. A regular series of repeated changes, such as renaming a symbol, is not legally significant even if the symbol has to be renamed in many places. Keep in mind, however, that a series of minor changes by the same person can add up to a significant contribution. What counts is the total contribution of the person; it is irrelevant which parts of it were contributed when. Copyright does not cover ideas. If someone contributes ideas but no text, these ideas may be morally significant as contributions, and worth giving credit for, but they are not significant for copyright purposes. Likewise, bug reports do not count for copyright purposes. When giving credit to people whose contributions are not legally significant for copyright purposes, be careful to make that fact clear. The credit should clearly say they did not contribute significant code or text. When people's contributions are not legally significant because they did not write code, do this by stating clearly what their contribution was. For instance, you could write this: @example /* * Ideas by: * Richard Mlynarik (1997) * Masatake Yamato (1999) */ @end example @noindent @code{Ideas by:} makes it clear that Mlynarik and Yamato here contributed only ideas, not code. Without the @code{Ideas by:} note, several years from now we would find it hard to be sure whether they had contributed code, and we might have to track them down and ask them. When you record a small patch in a change log file, first search for previous changes by the same person, and see if per past contributions, plus the new one, add up to something legally significant. If so, you should get copyright papers for all per changes before you install the new change. If that is not so, you can install the small patch. Write @samp{(tiny change)} after the patch author's name, like this: @example 2002-11-04 Robert Fenk (tiny change) @end example @node Recording Contributors @section Recording Contributors @cindex recording contributors @strong{Keep correct records of which portions were written by whom.} This is very important. These records should say which files or parts of files were written by each person, and which files or parts of files were revised by each person. This should include installation scripts as well as manuals and documentation files---everything. These records don't need to be as detailed as a change log. They don't need to distinguish work done at different times, only different people. They don't need describe changes in more detail than which files or parts of a file were changed. And they don't need to say anything about the function or purpose of a file or change---the Register of Copyrights doesn't care what the text does, just who wrote or contributed to which parts. The list should also mention if certain files distributed in the same package are really a separate program. Only the contributions that are legally significant for copyright purposes (@pxref{Legally Significant}) need to be listed. Small contributions, bug reports, ideas, etc., can be omitted. For example, this would describe an early version of GAS: @display Dean Elsner first version of all files except gdb-lines.c and m68k.c. Jay Fenlason entire files gdb-lines.c and m68k.c, most of app.c, plus extensive changes in messages.c, input-file.c, write.c and revisions elsewhere. Note: GAS is distributed with the files obstack.c and obstack.h, but they are considered a separate package, not part of GAS proper. @end display @cindex @file{AUTHORS} file Please keep these records in a file named @file{AUTHORS} in the source directory for the program itself. You can use the change log as the basis for these records, if you wish. Just make sure to record the correct author for each change (the person who wrote the change, @emph{not} the person who installed it), and add @samp{(tiny change)} for those changes that are too trivial to matter for copyright purposes. Later on you can update the @file{AUTHORS} file from the change log. This can even be done automatically, if you are careful about the formatting of the change log entries. It is ok to include other email addresses, names, and program information in @file{AUTHORS}, such as bug-reporting information. @xref{Standard Mailing Lists}. @node Copying from Other Packages @section Copying from Other Packages This section explains legal considerations when merging code from other packages into your package. Using an entire module as a whole, and maintaining its separate identity, is a different issue; see @ref{External Libraries}. @menu * Non-FSF-Copyrighted Package:: * FSF-Copyrighted Package:: @end menu @node Non-FSF-Copyrighted Package @subsection Non-FSF-Copyrighted Package Here we suppose that your package is not FSF-copyrighted. When you copy legally significant code from another free software package with a GPL-compatible license, you should look in the package's records to find out the authors of the part you are copying, and list them as the contributors of the code that you copied. If all you did was copy it, not write it, then for copyright purposes you are @emph{not} one of the contributors of @emph{this} code. If the code is supposed to be in the public domain, make sure that is really true: that all the authors of the code have disclaimed copyright interest. Then, when copying the new files into your project, add a brief note at the beginning of the files recording the authors, the public domain status, and anything else relevant. On the other hand, when merging some public domain code into an existing file covered by the GPL (or LGPL or other free software license), there is no reason to indicate the pieces which are public domain. The notice saying that the whole file is under the GPL (or other license) is legally sufficient. Using code that is not in the public domain, but rather released under a GPL-compatible free license, may require preserving copyright notices or other steps. Of course, you should follow the requirements stated. @node FSF-Copyrighted Package @subsection FSF-Copyrighted Package If you are maintaining an FSF-copyrighted package, please don't copy in any code without verifying first that we have suitable legal papers for that code. If you are copying from another FSF-copyrighted package, then we presumably have papers for that package's own code, but you must check whether the code you are copying is part of an external library; if that is the case, we don't have papers for it, so you should not copy it. It can't hurt in any case to double-check with the developer of that package. When you are copying code for which we do not already have papers, you need to get papers for it. It may be difficult to get the papers if the code was not written as a contribution to your package, but that doesn't mean it is ok to do without them. If you cannot get papers for the code, you can only use it as an external library (@pxref{External Libraries}). @node Copyright Notices @section Copyright Notices @cindex copyright notices in program files You should maintain a proper copyright notice and a license notice in each nontrivial file in the package. (Any file more than ten lines long is nontrivial for this purpose.) This includes header files and interface definitions for building or running the program, documentation files, and any supporting files. If a file has been explicitly placed in the public domain, then instead of a copyright notice, it should have a notice saying explicitly that it is in the public domain. Even image files and sound files should contain copyright notices and license notices, if their format permits. Some formats do not have room for textual annotations; for these files, state the copyright and copying permissions in a @file{README} file in the same directory. Change log files should have a copyright notice and license notice at the end, since new material is added at the beginning but the end remains the end. When a file is automatically generated from some other file in the distribution, it is useful for the automatic procedure to copy the copyright notice and permission notice of the file it is generated from, if possible. Alternatively, put a notice at the beginning saying which file it is generated from. A copyright notice looks like this: @example Copyright (C) @var{year1}, @var{year2}, @var{year3} @var{copyright-holder} @end example The word @samp{Copyright} must always be in English, by international convention. The @var{copyright-holder} may be the Free Software Foundation, Inc., or someone else; you should know who is the copyright holder for your package. Replace the @samp{(C)} with a C-in-a-circle symbol if it is available. For example, use @samp{@@copyright@{@}} in a Texinfo file. However, stick with parenthesized @samp{C} unless you know that C-in-a-circle will work. For example, a program's standard @option{--version} message should use parenthesized @samp{C} by default, though message translations may use C-in-a-circle in locales where that symbol is known to work. Alternatively, the @samp{(C)} or C-in-a-circle can be omitted entirely; the word @samp{Copyright} suffices. To update the list of year numbers, add each year in which you have made nontrivial changes to the package. (Here we assume you're using a publicly accessible revision control server, so that every revision installed is also immediately and automatically published.) When you add the new year, it is not required to keep track of which files have seen significant changes in the new year and which have not. It is recommended and simpler to add the new year to all files in the package, and be done with it for the rest of the year. Don't delete old year numbers, though; they are significant since they indicate when older versions might theoretically go into the public domain, if the movie companies don't continue buying laws to further extend copyright. If you copy a file into the package from some other program, keep the copyright years that come with the file. You can use a range (@samp{2008-2010}) instead of listing individual years (@samp{2008, 2009, 2010}) if and only if: 1)@tie{}every year in the range, inclusive, really is a ``copyrightable'' year that would be listed individually; @emph{and} 2)@tie{}you make an explicit statement in a @file{README} file about this usage. For files which are regularly copied from another project (such as @samp{gnulib}), leave the copyright notice as it is in the original. The copyright statement may be split across multiple lines, both in source files and in any generated output. This often happens for files with a long history, having many different years of publication. For an FSF-copyrighted package, if you have followed the procedures to obtain legal papers, each file should have just one copyright holder: the Free Software Foundation, Inc. You should edit the file's copyright notice to list that name and only that name. But if contributors are not all assigning their copyrights to a single copyright holder, it can easily happen that one file has several copyright holders. Each contributor of nontrivial text is a copyright holder. In that case, you should always include a copyright notice in the name of main copyright holder of the file. You can also include copyright notices for other copyright holders as well, and this is a good idea for those who have contributed a large amount and for those who specifically ask for notices in their names. (Sometimes the license on code that you copy in may require preserving certain copyright notices.) But you don't have to include a notice for everyone who contributed to the file (which would be rather inconvenient). Sometimes a program has an overall copyright notice that refers to the whole program. It might be in the @file{README} file, or it might be displayed when the program starts up. This copyright notice should mention the year of completion of the most recent major version; it can mention years of completion of previous major versions, but that is optional. @node License Notices @section License Notices @cindex license notices in program files Every nontrivial file needs a license notice as well as the copyright notice. (Without a license notice giving permission to copy and change the file, the file is non-free.) The package itself should contain a full copy of GPL in plain text (conventionally in a file named @file{COPYING}) and the GNU Free Documentation License (included within your documentation, so there is no need for a separate plain text version). If the package contains any files distributed under the Lesser GPL, it should contain a full copy of its plain text version also (conventionally in a file named @file{COPYING.LESSER}). If you have questions about licensing issues for your GNU package, please write @email{licensing@@gnu.org}. @menu * Which: Licensing of GNU Packages. * Canonical: Canonical License Sources. * Code: License Notices for Code. * Documentation: License Notices for Documentation. * Examples: License Notices for Code Examples. * Other: License Notices for Other Files. @end menu @node Licensing of GNU Packages @subsection Licensing of GNU Packages Normally, GNU packages should use the latest version of the GNU GPL, with the ``or any later version'' formulation. @xref{License Notices for Code}, for the exact wording of the license notice. Occasionally, a GNU library may provide functionality which is already widely available to proprietary programs through alternative implementations; for example, the GNU C Library. In such cases, the Lesser GPL should be used (again, for the notice wording, @pxref{License Notices for Code}). If a GNU library provides unique functionality, however, the GNU GPL should be used. @url{https://www.gnu.org/licenses/why-not-lgpl.html} discusses this strategic choice. Some of these libraries need to work with programs released under GPLv2-only; that is, which allow the GNU GPL version 2 but not later versions. In this case, the GNU package should be released under a dual license: GNU GPL version 2 (or any later version) and the GNU Lesser GPL version 3 (or any later version). Here is the notice for that case: @smallexample This file is part of GNU @var{package}. GNU @var{package} is free software: you can redistribute it and/or modify it under the terms of either: * 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. or * the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. or both in parallel, as here. GNU @var{package} 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 copies of the GNU General Public License and the GNU Lesser General Public License along with this program. If not, see @url{https://www.gnu.org/licenses/}. @end smallexample For small packages, you can use ``This program'' instead of ``GNU @var{package}''. @node Canonical License Sources @subsection Canonical License Sources You can get the official versions of these files from several places. You can use whichever is the most convenient for you. @itemize @bullet @item @uref{https://www.gnu.org/licenses/}. @item The @code{gnulib} project on @code{savannah.gnu.org}, which you can access via anonymous Git or CVS@. See @uref{https://savannah.gnu.org/projects/gnulib}. @end itemize The official Texinfo sources for the licenses are also available in those same places, so you can include them in your documentation. A GFDL-covered manual should include the GFDL in this way. @xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a Texinfo manual. @node License Notices for Code @subsection License Notices for Code Typically the license notice for program files (including build scripts, configure files and makefiles) should cite the GPL, like this: @quotation This file is part of GNU @var{package}. GNU @var{package} 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. GNU @var{package} 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 @url{https://www.gnu.org/licenses/}. @end quotation But in a small program which is just a few files, you can use this instead: @quotation This 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 @url{https://www.gnu.org/licenses/}. @end quotation In either case, for those few packages which use the Lesser GPL (@pxref{Licensing of GNU Packages}), insert the word ``Lesser'' before ``General'' in @emph{all three} places. @url{https://@/www.gnu.org/@/licenses/@/gpl-howto.html} discusses application the GPL in more detail. @node License Notices for Documentation @subsection License Notices for Documentation Documentation files should have license notices also. Manuals should use the GNU Free Documentation License. Following is an example of the license notice to use after the copyright line(s) using all the features of the GFDL. @smallexample Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'', with the Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled ``GNU Free Documentation License''. (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.'' @end smallexample If the FSF does not publish this manual on paper, then omit the last sentence in (a) that talks about copies from GNU Press. If the FSF is not the copyright holder, then replace @samp{FSF} with the appropriate name. Please adjust the list of invariant sections as appropriate for your manual. If there are none, then say ``with no Invariant Sections''. If your manual is not published by the FSF, and under 400 pages, you can omit both cover texts. However, if it is copyright FSF, always ask the FSF what to do. @xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a Texinfo manual, and see @url{https://www.gnu.org/licenses/fdl-howto.html} for more advice about how to use the GNU FDL. If you write a manual that people might want to buy on paper, please write to @email{maintainers@@gnu.org} to tell the FSF about it. We might want to publish it. If the manual is over 400 pages, or if the FSF thinks it might be a good choice for publishing on paper, then please include the GNU GPL, as in the notice above. Please also include our standard invariant section which explains the importance of free documentation. Write to @email{assign@@gnu.org} to get a copy of this section. When you distribute several manuals together in one software package, their on-line forms can share a single copy of the GFDL (see section@tie{}6). However, the printed (@samp{.dvi}, @samp{.pdf}, @dots{}) forms should each contain a copy of the GFDL, unless they are set up to be printed and published only together. Therefore, it is usually simplest to include the GFDL in each manual. @node License Notices for Code Examples @subsection License Notices for Code Examples When a code example in documentation is more than two or three lines, and specific enough that people might want to copy and adapt it, we suggest putting a copy of the example in a file of code and releasing that under some free software license. That means it will be released under two different licenses: in the manual under the GFDL, and in the code example file under a software license. If the example is important and nontrivial, and 40 lines or more, we suggest releasing the code copy under the same license as the program it pertains to. Otherwise, we recommend releasing it under the X11 license. @node License Notices for Other Files @subsection License Notices for Other Files Small supporting files, short manuals (under 300 lines long) and rough documentation (@file{README} files, @file{INSTALL} files, etc.)@: can use a simple all-permissive license like this one: @smallexample Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. @end smallexample Older versions of this license did not have the second sentence with the express warranty disclaimer. There is no urgent need to update existing files, but new files should use the new text. If your package distributes Autoconf macros that are intended to be used (hence distributed) by third-party packages under possibly incompatible licenses, you may also use the above all-permissive license for these macros. These kinds of files can also be put in the public domain. If publishing in the US, it is enough to insert a notice saying so. Otherwise, use Creative Commons's CC0---See @url{https://creativecommons.org/choose/zero/}. @node External Libraries @section External Libraries As maintainer of an FSF-copyrighted GNU package, how do you use separately-published general-purpose free modules? (We also call them ``libraries'' because we are using them as libraries; it doesn't matter whether they are packaged as libraries or not.) It would be unreasonable to ask their authors to assign copyright to the FSF@. They didn't write those modules as contributions to GNU@. We just happen to want to use them, as any developer might. It would be rude to ask developers, out of the blue, to give the FSF their copyright. Please don't ask for that in cases like these. The proper way to use those modules is to link your package with them and say they are @emph{not} part of your package. See below for the mechanics of this. To avoid present or future legal trouble, you must make sure the license of the module is compatible with current @emph{and future} GPL versions. ``GNU GPL version 3 or later'' is good, and so is anything which includes permission for use under those GPL versions (including ``GNU GPL version 2 or later'', ``LGPL version @var{n} or later'', ``LGPL version 2.1'', ``GNU Affero GPL version 3 or later''). Lax permissive licenses are ok too, since they are compatible with all GPL versions. ``GPL version 2 only'' is obviously unacceptable because it is incompatible with GPL version 3. ``GPL version 3 only'' and ``GPL version 2 or 3 only'' have a subtler problem: they would be incompatible with GPL version 4, if we ever make one, so the module would become an obstacle to upgrading your package's license to ``GPL version 4 or later''. Don't use such modules. One library you need to avoid is @code{goffice}, since it allows only GPL versions 2 and 3. So, here are the mechanics of how to arrange your package to use the unrelated free module. @enumerate @item Assume the module is already installed on the system, and link with it when linking your program. This is only reasonable if the module really has the form of a library. @item Include the module in your package's distribution, putting the source in a separate subdirectory whose @file{README} file says, ``This is not part of the GNU FOO program, but is used with GNU FOO.'' Then set up your makefiles to build this module and link it into the executable. With this method, it is not necessary to treat the module as a library and make a @samp{.a} file from it. You can link directly with the @samp{.o} files in the usual manner. @end enumerate Both of these methods create an irregularity, and our lawyers have told us to minimize the amount of such irregularity. So use these methods only for general-purpose modules that were @emph{not} written for your package. For anything that was written as a contribution to your package, please get papers signed. @node Crediting Authors @section Crediting Authors @cindex crediting authors Strictly speaking, this is not a legal issue, but it seems to belong with copyright notices. In any FSF-copyrighted GNU package, the authors of a file are not named in the copyright notice. Therefore, it is nice to include a comment line @samp{Authors: @var{authors of this file}} at the top near the copyright notice, to give them credit in close association with their contribution. @node Clean Ups @chapter Cleaning Up Changes @cindex contributions, accepting @cindex quality of changes suggested by others Don't feel obligated to include every change that someone asks you to include. You must judge which changes are improvements---partly based on what you think the users will like, and partly based on your own judgment of what is better. If you think a change is not good, you should reject it. If someone sends you changes which are useful, but written in an ugly way or hard to understand and maintain in the future, don't hesitate to ask per to clean up their changes before you merge them. Since the amount of work we can do is limited, the more we convince others to help us work efficiently, the faster GNU will advance. If the contributor will not or can not make the changes clean enough, then it is legitimate to say ``I can't install this in its present form; I can only do so if you clean it up.'' Invite per to distribute per changes another way, or to find other people to make them clean enough for you to install and maintain. The only reason to do these cleanups yourself is if (1) it is easy, less work than telling the author what to clean up, or (2) the change is an important one, important enough to be worth the work of cleaning it up. The GNU Coding Standards are a good thing to send people when you ask them to clean up changes (@pxref{Top, , Contents, standards, GNU Coding Standards}). The Emacs Lisp manual contains an appendix that gives coding standards for Emacs Lisp programs; it is good to urge Lisp authors to read it (@pxref{Tips, , Tips and Conventions, elisp, The GNU Emacs Lisp Reference Manual}). @node Platforms @chapter Platforms to Support Most GNU packages run on a wide range of platforms. These platforms are not equally important. Please resist requests to implement or add features that would function only on some non-GNU systems and not on GNU itself. The most important platforms for a GNU package to support are GNU and GNU/Linux. Developing the GNU operating system is the whole point of the GNU Project; a GNU package exists to make the whole GNU system more powerful. So please keep that goal in mind and let it shape your work. For instance, every new feature you add should work on GNU, and GNU/Linux if possible too. If a new feature only runs on GNU and GNU/Linux, it could still be acceptable. However, a feature that runs only on other systems and not on GNU or GNU/Linux would undermine that purpose, as it would promote the non-GNU system at the expense of GNU itself. If the feature functions only on some nonfree systems, it would work against our goal of freedom for the users. Please say no when asked to implement such a feature, citing these reasnos, and ask the contributors to implement the feature for the GNU system as well. You will naturally want to keep the program running on all the platforms it supports. But you personally will not have access to most of these platforms---so how should you do it? Don't worry about trying to get access to all of these platforms. Even if you did have access to all the platforms, it would be inefficient for you to test the program on each platform yourself. Instead, you should test the program on a few platforms, including GNU or GNU/Linux, and let the users test it on the other platforms. You can do this through a pretest phase before the real release; when there is no reason to expect problems, in a package that is mostly portable, you can just make a release and let the users tell you if anything unportable was introduced. It is important to test the program personally on GNU or GNU/Linux, because these are the most important platforms for a GNU package. If you don't have access to one of these platforms, as a GNU maintainer you can get access to the general GNU login machine; see @url{https://www.gnu.org/software/README.accounts.html}. Supporting other platforms is optional---we do it when that seems like a good idea, but we don't consider it obligatory. If the users don't take care of a certain platform, you may have to desupport it unless and until users come forward to help. Conversely, if a user offers changes to support an additional platform, you will probably want to install them, but you don't have to. If you feel the changes are complex and ugly, if you think that they will increase the burden of future maintenance, you can and should reject them. This includes both free or mainly-free platforms such as OpenBSD, FreeBSD, and NetBSD, and non-free platforms such as Windows. @node Mail @chapter Dealing With Mail @cindex email This chapter describes setting up mailing lists for your package, and gives advice on how to handle bug reports and random requests once you have them. @menu * Standard Mailing Lists:: @samp{bug-pkg@@gnu.org} and other standard names. * Creating Mailing Lists:: The best way is to use Savannah. * Replying to Mail:: Advice on replying to incoming mail. @end menu @node Standard Mailing Lists @section Standard Mailing Lists @cindex standard mailing lists @cindex mailing lists, standard names of @cindex mailing list for bug reports Once a program is in use, you will get bug reports for it. Most GNU programs have their own special lists for sending bug reports. The advertised bug-reporting email address should always be @samp{bug-@var{package}@@gnu.org}, to help show users that the program is a GNU package, but it is ok to set up that list to forward to another site if you prefer. @cindex @email{bug-gnu-utils@@gnu.org} We also have a catch-all list, @email{bug-gnu-utils@@gnu.org}, which is used for all GNU programs that don't have their own specific lists. But nowadays we want to give each program its own bug-reporting list and move away from using @email{bug-gnu-utils}. @xref{Replying to Mail}, for more about handling and tracking bug reports. @cindex help for users, mailing list for Some GNU programs with many users have another mailing list, @samp{help-@var{package}@@gnu.org}, for people to ask other users for help. If your program has many users, you should create such a list for it. For a fairly new program, which doesn't have a large user base yet, it is better not to bother with this. @cindex announcements, mailing list for If you wish, you can also have a mailing list @samp{info-@var{package}@@gnu.org} for announcements (@pxref{Announcements}). Any other mailing lists you find useful can also be created. The package distribution should state the name of all the package's mailing lists in a prominent place, and ask users to help us by reporting bugs appropriately. The top-level @file{README} file and/or @file{AUTHORS} file are good places. Mailing list information should also be included in the manual and the package web pages (@pxref{Web Pages}). @node Creating Mailing Lists @section Creating Mailing Lists @cindex creating mailing lists @cindex mailing lists, creating Using the web interface on @code{savannah.gnu.org} is by far the easiest way to create normal mailing lists, managed through Mailman on the GNU mail server. Once you register your package on Savannah, you can create (and remove) lists yourself through the `Mailing Lists' menu, without needing to wait for intervention by anyone else. Furthermore, lists created through Savannah will have a reasonable default configuration for antispam purposes (see below). To create and maintain simple aliases and unmanaged lists, you can edit @file{/com/mailer/aliases} on the main GNU server. If you don't have an account there, please read @url{https://www.gnu.org/software/README.accounts.html} (@pxref{GNU Accounts and Resources}). But if you don't want to learn how to do those things, you can ask @email{new-mailing-list@@gnu.org} to help you. @cindex spam prevention You should moderate postings from non-subscribed addresses on your mailing lists, to prevent propagation of unwanted messages (``spam'') to subscribers and to the list archives. For lists controlled by Mailman, you can do this by setting @code{Privacy Options - Sender Filter - generic_nonmember_action} to @code{Hold}, and then periodically (daily is best) reviewing the held messages, accepting the real ones and discarding the junk. Lists created through Savannah will have this setting, and a number of others, such that spam will be automatically deleted (after a short delay). The Savannah mailing list page describes all the details. You should still review the held messages in order to approve any that are real. @node Replying to Mail @section Replying to Mail @cindex responding to bug reports @cindex bug reports, handling @cindex help requests, handling When you receive bug reports, keep in mind that bug reports are crucial for your work. If you don't know about problems, you cannot fix them. So always thank each person who sends a bug report. You don't have an obligation to give more response than that, though. The main purpose of bug reports is to help you contribute to the community by improving the next version of the program. Many of the people who report bugs don't realize this---they think that the point is for you to help them individually. Some will ask you to focus on that @emph{instead of} on making the program better. If you comply with their wishes, you will have been distracted from the job of maintaining the program. For example, people sometimes report a bug in a vague (and therefore useless) way, and when you ask for more information, they say, ``I just wanted to see if you already knew the solution'' (in which case the bug report would do nothing to help improve the program). When this happens, you should explain to them the real purpose of bug reports. (A canned explanation will make this more efficient.) When people ask you to put your time into helping them use the program, it may seem ``helpful'' to do what they ask. But it is much @emph{less} helpful than improving the program, which is the maintainer's real job. By all means help individual users when you feel like it, if you feel you have the time available. But be careful to limit the amount of time you spend doing this---don't let it eat away the time you need to maintain the program! Know how to say no; when you are pressed for time, just ``thanks for the bug report---I will fix it'' is enough response. Some GNU packages, such as Emacs and GCC, come with advice about how to make bug reports useful. Copying and adapting that could be very useful for your package. @cindex @url{https://bugs.gnu.org} @cindex bug reports, email tracker for @cindex bug reports, web tracker for If you would like to use an email-based bug tracking system, see @url{https://bugs.gnu.org}; this can be connected with the regular bug-reporting address. Alternatively, if you would like to use a web-based bug tracking system, Savannah supports this (@pxref{Old Versions}), but please don't fail to accept bugs by regular email as well---we don't want to put up unnecessary barriers against users submitting reports. @node Old Versions @chapter Recording Old Versions @cindex version control It is very important to keep backup files of all source files of GNU. You can do this using a source control system (such as Bazaar, RCS, CVS, Git, Subversion, @dots{}) if you like. An easy way to use many such systems is via the Version Control library in Emacs (@pxref{Introduction to VC,, Introduction to Version Control, emacs, The GNU Emacs Manual}). The history of previous revisions and log entries is very important for future maintainers of the package, so even if you do not make it publicly accessible, be careful not to put anything in the repository or change log that you would not want to hand over to another maintainer some day. @cindex @code{savannah-hackers@@gnu.org} The GNU Project provides a server that GNU packages can use for source control and other package needs: @code{savannah.gnu.org}. Savannah is managed by @email{savannah-hackers@@gnu.org}. For more details on using and contributing to Savannah, see @url{https://savannah.gnu.org/maintenance}. It's not an absolute requirement, but all GNU maintainers are strongly encouraged to take advantage of Savannah, as sharing such a central point can serve to foster a sense of community among GNU developers as well as help in keeping up with project management. Please don't mark Savannah projects for GNU packages as private; that defeats a large part of the purpose of using Savannah in the first place. @cindex @code{savannah-announce@@gnu.org} mailing list If you do use Savannah, please subscribe to the @email{savannah-announce@@gnu.org} mailing list (@url{https://lists.gnu.org/mailman/listinfo/savannah-announce}). This is a very low-volume list to keep Savannah users informed of system upgrades, problems, and the like. @node Distributions @chapter Distributions Please follow the GNU conventions when making GNU software distributions. @menu * Distribution tar Files:: * Distribution Patches:: * Binary Distribution:: * Distribution on ftp.gnu.org:: * Test Releases:: * Automated FTP Uploads:: * Announcements:: @end menu @node Distribution tar Files @section Distribution tar Files @cindex distribution, tar files All packages should provide tar files for the distribution of their releases. The tar file for version @var{m}.@var{n} of program @code{foo} should be named @file{foo-@var{m}.@var{n}.tar}. It should unpack into a subdirectory named @file{foo-@var{m}.@var{n}}. Tar files should not unpack into files in the current directory, because this is inconvenient if the user happens to unpack into a directory with other files in it. Here is how the @file{Makefile} for Bison creates the tar file. This method is good for other programs. @example dist: bison.info echo bison-`sed -e '/version_string/!d' \ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname -rm -rf `cat .fname` mkdir `cat .fname` dst=`cat .fname`; for f in $(DISTFILES); do \ ln $(srcdir)/$$f $$dst/$$f || @{ echo copying $$f; \ cp -p $(srcdir)/$$f $$dst/$$f ; @} \ done tar --gzip -chf `cat .fname`.tar.gz `cat .fname` -rm -rf `cat .fname` .fname @end example Source files that are symbolic links to other file systems cannot be installed in the temporary directory using @code{ln}, so use @code{cp} if @code{ln} fails. @pindex automake Using Automake is a good way to take care of writing the @code{dist} target. @node Distribution Patches @section Distribution Patches @cindex patches, against previous releases If the program is large, it is useful to make a set of diffs for each release, against the previous important release. At the front of the set of diffs, put a short explanation of which version this is for and which previous version it is relative to. Also explain what else people need to do to update the sources properly (for example, delete or rename certain files before installing the diffs). The purpose of having diffs is that they are small. To keep them small, exclude files that the user can easily update. For example, exclude info files, DVI files, tags tables, output files of Bison or Flex. In Emacs diffs, we exclude compiled Lisp files, leaving it up to the installer to recompile the patched sources. When you make the diffs, each version should be in a directory suitably named---for example, @file{gcc-2.3.2} and @file{gcc-2.3.3}. This way, it will be very clear from the diffs themselves which version is which. @pindex diff @pindex patch @cindex time stamp in diffs If you use GNU @code{diff} to make the patch, use the options @samp{-rc2P}. That will put any new files into the output as ``entirely different''. Also, the patch's context diff headers should have dates and times in Universal Time using traditional Unix format, so that patch recipients can use GNU @code{patch}'s @samp{-Z} option. For example, you could use the following Bourne shell command to create the patch: @example LC_ALL=C TZ=UTC0 diff -rc2P gcc-2.3.2 gcc-2.3.3 | \ gzip -9 >gcc-2.3.2-2.3.3.patch.gz @end example If the distribution has subdirectories in it, then the diffs probably include some files in the subdirectories. To help users install such patches reliably, give them precise directions for how to run patch. For example, say this: @display To apply these patches, cd to the main directory of the program and then use `patch -p1'. `-p1' avoids guesswork in choosing which subdirectory to find each file in. @end display It's wise to test your patch by applying it to a copy of the old version, and checking that the result exactly matches the new version. @node Binary Distribution @section Binary Distribution for Nonfree Platforms Some package maintainers release pre-compiled binaries for proprietary systems such as Microsoft Windows or MacOS@. It's entirely up to you whether to do that; we don't ask you to do it, but we don't object. Please do not let anyone make you feel you have an obligation to do this. If you distribute them, please inform their users prominently that those non-free platforms trample their freedom. It is useful to refer them to @url{https://www.gnu.org/philosophy/free-software-even-more-important.html}. You can say, ``This program respects your freedom, but Windows does not. To have freedom, you need to stop using Windows and other software that denies your freedom.'' @node Distribution on ftp.gnu.org @section Distribution on @code{ftp.gnu.org} @cindex GNU ftp site @cindex @code{ftp.gnu.org}, the GNU release site We strongly recommend using @code{ftp.gnu.org} to distribute official releases. If you want to also distribute the package from a site of your own, that is fine. To use some other site instead of @code{ftp.gnu.org} is acceptable, provided it allows connections from anyone anywhere. @xref{Automated FTP Uploads}, for the procedural details of putting new versions on @code{ftp.gnu.org}. @node Test Releases @section Test Releases @cindex test releases @cindex beta releases @cindex pretest releases @cindex @code{alpha.gnu.org}, test release site When you release a greatly changed new major version of a program, you might want to do so as a pretest. This means that you make a tar file, but send it only to a group of volunteers that you have recruited. (Use a suitable GNU mailing list/newsgroup to recruit them.) We normally use the server @code{alpha.gnu.org} for pretests and prerelease versions. @xref{Automated FTP Uploads}, for the procedural details of putting new versions on @code{alpha.gnu.org}. Once a program gets to be widely used and people expect it to work solidly, it is a good idea to do pretest releases before each ``real'' release. There are three ways of handling version numbers for pretest versions. One method is to treat them as versions preceding the release you are going to make. In this method, if you are about to release version 4.6 but you want to do a pretest first, call it 4.5.90. If you need a second pretest, call it 4.5.91, and so on. If you are really unlucky and ten pretests are not enough, after 4.5.99 you could advance to 4.5.990 and so on. (You could also use 4.5.100, but 990 has the advantage of sorting in the right order.) Another method is to attach a date to the release number that is coming. For a pretest for version 4.6, made on Dec 10, 2002, this would be 4.6.20021210. A second pretest made the same day could be 4.6.20021210.1. For development snapshots that are not formal pretests, using just the date without the version numbers is ok too. A third method, if the package uses Git, is to run the script @code{build-aux/git-version-gen} from Gnulib to generate test release version numbers. It generates version numbers in the form @samp{@var{version}.@var{commits}-@var{commithash}}, where @var{version} is the latest version tag, @var{commits} is the number of commits since that tag, and @var{commithash} is a hash code for the latest commit. One thing that you should never do is to release a pretest with the same version number as the planned real release. Many people will look only at the version number (in the tar file name, in the directory name that it unpacks into, or wherever they can find it) to determine whether a tar file is the latest version. People might look at the test release in this way and mistake it for the real release. Therefore, always change the number when you release changed code. @node Automated FTP Uploads @section Automated FTP Uploads @cindex ftp uploads, automated In order to upload new releases to @code{ftp.gnu.org} or @code{alpha.gnu.org}, you first need to register the necessary information. Then, you can perform uploads yourself, with no intervention needed by the system administrators. The general idea is that releases should be cryptographically signed before they are made publicly available. @menu * Automated Upload Registration:: * Automated Upload Procedure:: * FTP Upload Release File Triplet:: * FTP Upload Directive File:: * FTP Upload Directory Trees:: * FTP Upload File Replacement:: * FTP Upload Standalone Directives:: * FTP Upload Directive File - v1.1:: * FTP Upload Directive File - v1.0:: @end menu @node Automated Upload Registration @subsection Automated Upload Registration @cindex registration for uploads @cindex uploads, registration for Here is how to register your information so you can perform uploads for your GNU package: @enumerate @item Create an account for yourself at @url{https://savannah.gnu.org}, and register your package there, if you haven't already done that. By the way, this is also needed to maintain the web pages at @url{https://www.gnu.org} for your project (@pxref{Web Pages}). @item Compose a message with the following items in some @var{msgfile}. Then GPG-sign it by running @code{gpg --clearsign @var{msgfile}}, and finally email the resulting @file{@var{msgfile}.asc} as an attachment to @email{ftp-upload@@gnu.org}. @enumerate @item Name of package(s) that you are the maintainer for, your preferred email address, and your Savannah username. @item The ASCII armored copy of your GPG key, as an attachment. @item A list of names and preferred email addresses of other individuals you authorize to make releases for which packages, if any (in the case that you don't make all releases yourself). @item ASCII armored copies of GPG keys for any individuals listed in (3). @end enumerate @item Publish the concatenated ASCII armored copies of your GPG key with the GPG keys listed in the previous step in the @samp{GPG Keys Used for Releases} area of the @samp{Public info} of the Savannah group of your package. Optional but recommended: Send your keys to a GPG public key server: @code{gpg --keyserver keys.gnupg.net --send-keys @var{keyid}...}, where @var{keyid} is the eight hex digits reported by @code{gpg --list-public-keys} on the @code{pub} line before the date. For full information about GPG, see @url{https://www.gnu.org/software/gpg}. @end enumerate The administrators will acknowledge your message when they have added the proper GPG keys as authorized to upload files for the corresponding packages. The upload system will email receipts to the given email addresses when an upload is made, either successfully or unsuccessfully. Should you later have to update your GPG key, you'll have to re-submit it to both Savannah and @email{ftp-upload@@gnu.org}, as these systems are not connected. @node Automated Upload Procedure @subsection Automated Upload Procedure @cindex uploads Once you have registered your information as described in the previous section, you can and should do ftp uploads for your package. There are two basic kinds of uploads (details in the following sections): @enumerate @item Three related files (a ``triplet'') to upload a file destined for @code{ftp.gnu.org} or @code{alpha.gnu.org}: @pxref{FTP Upload Release File Triplet}. @item A single (signed) standalone ``directive file'' to perform operations on the server: @pxref{FTP Upload Standalone Directives}. @end enumerate In either case, you upload the file(s) via anonymous ftp to the host @code{ftp-upload.gnu.org}. If the upload is destined for @code{ftp.gnu.org}, place the file(s) in the directory @file{/incoming/ftp}. If the upload is destined for @code{alpha.gnu.org}, place the file(s) in the directory @file{/incoming/alpha}. Uploads are processed every five minutes. Uploads that are in progress while the upload processing script is running are handled properly, so do not worry about the timing of your upload. Spurious and stale uploaded files are deleted automatically after 24 hours. Your designated upload email addresses (@pxref{Automated Upload Registration}) are sent a message if there are problems processing an upload for your package. You also receive a message when an upload has been successfully processed. One programmatic way to create and transfer the necessary files is to use the @code{gnupload} script, which is available from the @file{build-aux/} directory of the @code{gnulib} project at @url{https://savannah.gnu.org/projects/gnulib}. Run @code{gnupload@tie{}--help} for a description and examples. (With @code{gnupload}, you specify a destination such as @samp{ftp.gnu.org:}@var{pkgname} rather than using the @samp{ftp-upload} hostname.) @code{gnupload} invokes the program @code{ncftpput} to do the actual transfers; if you don't happen to have the @code{ncftp} package installed, the @code{ncftpput-ftp} script in the @file{build-aux/} directory of @code{gnulib} can serve as a replacement. It uses the plain command line @code{ftp} program. If you have difficulties with an upload, email @email{ftp-upload@@gnu.org}. You can check the archive of uploads processed at @url{https://lists.gnu.org/archive/html/ftp-upload-report}. @node FTP Upload Release File Triplet @subsection FTP Upload Release File Triplet @cindex FTP uploads, of release files Ordinarily, the goal is to upload a new release of your package, let's say, the source archive @file{foo-1.0.tar.gz}. To do this, you simultaneously upload three files: @enumerate @item The file to be distributed; in our example, @file{foo-1.0.tar.gz}. @item Detached GPG binary signature file for (1); for example, @file{foo-1.0.tar.gz.sig}. Make this with @samp{gpg -b foo-1.0.tar.gz}. @item A clearsigned @dfn{directive file}; for example, @file{foo-1.0.tar.gz.directive.asc}, created with @samp{gpg --clearsign foo-1.0.tar.gz.directive}. Its contents are described in the next section. @end enumerate The names of the files are important. The signature file must have the same name as the file to be distributed, with an additional @file{.sig} extension. The directive file must have the same name as the file to be distributed, with an additional @file{.directive.asc} extension. If you do not follow this naming convention, the upload @emph{will not be processed}. @node FTP Upload Directive File @subsection FTP Upload Directive File @cindex directive file, for FTP uploads To repeat, a (signed) @dfn{directive file} must be part of every upload. The unsigned original is just a plain text file you can create with any text editor. Its name must be, e.g., @file{foo-1.0.tar.gz.directive} for accompanying an upload of @file{foo-1.0.tar.gz}. After creating the file, run @samp{gpg --clearsign foo-1.0.tar.gz.directive}, which will create @file{foo-1.0.tar.gz.directive.asc}; this is the file to be uploaded. When part of a triplet for uploading a release file, the directive file must always contain the directives @code{version}, @code{filename} and @code{directory}. In addition, a @code{comment} directive is optional. These directives can be given in any order. Continuing our example of uploading @file{foo-1.0.tar.gz} for a package named @code{foo} to @code{ftp.gnu.org}, the values would be as follows: @table @code @item version must be the value @samp{1.2} (the current version, as of May@tie{}2012):@* @t{version: 1.2} @item filename must be the name of the file to be distributed:@* @t{filename: foo-1.0.tar.gz} @item directory specifies the final destination directory where the uploaded file and its @file{.sig} companion are to be placed. Here we will put our file in the top level directory of the package, as is the most common practice:@* @t{directory: foo} @item comment is optional, and ignored if present:@* @t{comment: let's hope this works!} @end table Putting all of the above together, the complete contents of the directive file @file{foo-1.0.tar.gz.directive} for our example would be: @example version: 1.2 directory: foo filename: foo-1.0.tar.gz comment: let's hope this works! @end example Then you @samp{gpg --clearsign} the file as given above, and upload (using anonymous ftp) the three files: @table @file @item foo-1.0.tar.gz @item foo-1.0.tar.gz.sig @item foo-1.0.tar.gz.directive.asc @end table @noindent to the host @file{ftp-upload.gnu.org}, directory @file{/incoming/ftp} (for official releases), or the directory @file{/incoming/alpha} (for test releases). After the system authenticates the signatures, the files @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} are placed in the directory @file{gnu/foo/} on @code{ftp.gnu.org}. That is, we'll have made our release available at @indicateurl{https://ftp.gnu.org/gnu/foo/foo-1.0.tar.gz} (and then from our many mirrors via @indicateurl{https://ftpmirror.gnu.org/foo/foo-1.0.tar.gz}). Whew. A common reason for the upload not succeeding is your GPG signature not being registered with the upload system. There is nothing that makes this happen automatically. You must email the system administrators as described above (@pxref{Automated Upload Registration}). @node FTP Upload Directory Trees @subsection FTP Upload Directory Trees @cindex directory trees, in ftp uploads @cindex hierarchy, under ftp upload directory @cindex uploads, directory trees in You can make any directory hierarchy you like under your package directory. The system automatically creates any intermediate directories you specify in the @code{directory} directive. Slightly modifying the example above, the following directive file: @example version: 1.2 directory: foo/foo-1.0 filename: foo-1.0.tar.gz comment: creates per-version subdirectory as needed @end example @noindent would put the tar file in the @file{foo-1.0/} subdirectory of the package @code{foo}, thus ending up at @indicateurl{ftp.gnu.org:gnu/foo/foo-1.0/foo-1.0.tar.gz}. However, to keep things simpler for users, we recommend not using subdirectories, unless perhaps each release of your package consists of many separate files. @node FTP Upload File Replacement @subsection FTP Upload File Replacement @cindex replacing uploaded files @cindex uploads, replacing You can replace existing files that have already been uploaded by including a directive line @code{replace:@tie{}true}. For example, you might like to provide a README file in the release directory and update it from time to time. The full directive file for that would look like this: @example replace: true version: 1.2 directory: foo filename: README comment: replaces an existing README @end example It is ok if the file to be replaced doesn't already exist; then the new file is simply added, i.e., the @file{replace} directive has no effect. When an existing file is replaced, the original is archived to a private location. There is no automated or public access to such archived files; if you want to retrieve or view them, please email @email{sysadmin@@fsf.org}. We very strongly discourage replacing an actual software release file, such as @file{foo-1.0.tar.gz}. Releases should be unique, and forever. If you need to make fixes, make another release. If you have an exigent reason for a particular release file to no longer be available, it can be explicitly archived, as described in the next section. If you want to make the current release available under a generic name, such as @code{foo-latest.tar.gz}, that is better done with symlinks, also as described in the next section. @node FTP Upload Standalone Directives @subsection FTP Upload Standalone Directives @cindex standalone directives, for ftp uploads @cindex directives for ftp uploads, standalone The previous sections describe how to upload a file to be publicly released. It's also possible to upload a directive file by itself to perform a few operations on the upload directory. The supported directives are: @table @code @item symlink creates a symlink. @item rmsymlink removes a symlink. @item archive takes a file or directory offline. @end table As for the directives described above, the @code{directory} and @code{version} directives are still required, the @code{comment} directive remains optional, and the @code{filename} directive is not allowed. The @file{.sig} file should not be explicitly mentioned in a directive. When you specify a directive to operate on a file, its corresponding @file{.sig} file will be handled automatically. When uploaded by itself, the name of the directive file is not important. But it must be still be signed, using @samp{gpg --clearsign}; the resulting @file{.asc} file is what should be uploaded. Here's an example of the full directive file to create a @file{foo-latest.tar.gz} symlink: @example version: 1.2 directory: foo symlink: foo-1.1.tar.gz foo-latest.tar.gz comment: create a symlink @end example If you include more than one directive in a standalone upload, the directives are executed in the sequence they are specified in. If a directive results in an error, further execution of the upload is aborted. Removing a symbolic link (with @code{rmsymlink}) which does not exist results in an error. On the other hand, attempting to create a symbolic link that already exists (with @code{symlink}) is not an error. In this case @code{symlink} behaves like the command @command{ln -s -f}: any existing symlink is removed before creating the link. (But an existing regular file or directory is not replaced.) Here's an example of removing a symlink, e.g., if you decide not to maintain a @file{foo-latest} link any more: @example version: 1.2 directory: foo rmsymlink: foo-latest.tar.gz comment: remove a symlink @end example @noindent And here's an example of archiving a file, e.g., an unintended upload: @example version: 1.2 directory: foo archive: foo-1.1x.tar.gz comment: archive an old file; it will not be comment: publicly available any more. @end example The @code{archive} directive causes the specified items to become inaccessible. This should only be used when it is actively bad for them to be available, e.g., you uploaded something by mistake. If all you want to do is reduce how much stuff is in your release directory, an alternative is to email @email{sysadmin@@fsf.org} and ask them to move old items to the @file{https://ftp.gnu.org/old-gnu/} directory; then they will still be available. In general, however, we recommend leaving all official releases in the main release directory. @node FTP Upload Directive File - v1.1 @subsection FTP Upload Directive File - v1.1 The v1.1 protocol for uploads lacked the @code{replace} directive; instead, file replacements were done automatically and silently (clearly undesirable). This is the only difference between v1.2 and v1.1. @node FTP Upload Directive File - v1.0 @subsection FTP Upload Directive File - v1.0 Support for v1.0 uploads was discontinued in May 2012; please upgrade to@tie{}v1.2. In v1.0, the directive file contained one line, excluding the clearsigned data GPG that inserts, which specifies the final destination directory where items (1) and (2) are to be placed. For example, the @file{foo-1.0.tar.gz.directive.asc} file might contain the single line: @example directory: bar/v1 @end example This directory line indicates that @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} are part of package @code{bar}. If you were to upload the triplet to @file{/incoming/ftp}, and the system can positively authenticate the signatures, then the files @file{foo-1.0.tar.gz} and @file{foo-1.0.tar.gz.sig} will be placed in the directory @file{gnu/bar/v1} of the @code{ftp.gnu.org} site. The directive file can be used to create currently non-existent directory trees, as long as they are under the package directory for your package (in the example above, that is @code{bar}). @node Announcements @section Announcing Releases @cindex announcements @cindex @code{info-gnu} mailing list When you have a new release, please make an announcement. For official new releases, including those made just to fix bugs, we strongly recommend using the (moderated) general GNU announcements list, @email{info-gnu@@gnu.org}. Doing so makes it easier for users and developers to find the latest GNU releases. On the other hand, please do not announce test releases on @code{info-gnu} unless it's a highly unusual situation. @cindex @url{https://planet.gnu.org} @cindex Savannah, news area Please also post release announcements in the news section of your Savannah project site. Here, it is fine to also write news entries for test releases and any other newsworthy events. The news feeds from all GNU projects at savannah are aggregated at @url{https://planet.gnu.org} (GNU Planet), unless the text of the entry contains the string @samp{::noplanet::}. You can also post items directly, or arrange for feeds from other locations; see information on the GNU Planet web page. @cindex announcement mailing list, project-specific You can maintain your own mailing list (typically @indicateurl{info-@var{package}@@gnu.org}) for announcements as well if you like. For your own list, of course you decide as you see fit what events are worth announcing. (@xref{Mail}, for setting this up, and more suggestions on handling mail for your package.) @cindex contents of announcements When writing an announcement, please include the following: @itemize @bullet @item A very brief description (a few sentences at most) of the general purpose of your package. @item Your package's web page (normally @indicateurl{https://www.gnu.org/software/@var{package}/}). @item Your package's download location (normally @indicateurl{https://ftp.gnu.org/gnu/@var{package}/}). It is also useful to mention the mirror list at @url{https://www.gnu.org/order/ftp.html}, and that @indicateurl{https://ftpmirror.gnu.org/@var{package/}} will automatically redirect to a nearby mirror. @item The @t{NEWS} (@pxref{NEWS File,,, standards, GNU Coding Standards}) for the present release. @end itemize You may find the @file{announce-gen} script useful for creating announcements, which is available from the @file{build-aux/} directory of the @code{gnulib} project at @url{https://savannah.gnu.org/projects/gnulib}. @node Web Pages @chapter Web Pages @cindex web pages As soon as a new package is dubbed GNU, its home page (@indicateurl{https://www.gnu.org/software/@var{package}/}) is listed on @url{https://www.gnu.org/software/software.html} and @url{https://www.gnu.org/manual/manual.html}. To avoid broken links, the webmasters create a temporary home page as follows: @itemize @bullet @item If there is a Savannah project for this package (@pxref{Hosting for Web Pages}), the temporary home page redirects to the project's main page, @indicateurl{https://savannah.gnu.org/projects/@var{package}}, where a short description should be available. @item Otherwise, the webmasters make a simple home page containing the short description provided with the original submission of the package to GNU. @end itemize This temporary home page ought to be replaced with the real one as soon as possible. Some GNU packages have just simple web pages, but the more information you provide, the better. So please write as much as you usefully can, and put all of it on @code{www.gnu.org}. However, pages that access databases (including mail archives and bug tracking) are an exception; set them up on whatever site is convenient for you, and make the pages on @code{www.gnu.org} link to that site. Your web pages should follow our usual standards (see @url{https://www.gnu.org/server/@/fsf-html-style-sheet.html}). The overall goals are to support a wide variety of browsers, to focus on information rather than visual adornments, and to keep gnu.org/software/ consistent on certain important points. We encourage you to use the standard @code{www.gnu.org} template as the basis for your pages: @url{https://www.gnu.org/server/@/standards/@/boilerplate-source.html}. This template changes slightly from time to time for various reasons. If a change affects existing web pages, the webmasters will inform you; then you can make the change or they can. Please follow the best practices of accessibility in your web pages (see @url{https://www.gnu.org/accessibility/accessibility.html}). @menu * Hosting for Web Pages:: * Freedom for Web Pages:: * Manuals on Web Pages:: * CVS Keywords in Web Pages:: @end menu @node Hosting for Web Pages @section Hosting for Web Pages @cindex web pages, hosting for The best way to maintain the web pages for your project is to register the project on @code{savannah.gnu.org}. Then you can edit the pages using CVS, using the separate ``web pages repository'' available on Savannah, which corresponds to @indicateurl{https://www.gnu.org/software/@var{package}/}. You can keep your source files there too (using any of a variety of version control systems), but you can use @code{savannah.gnu.org} only for your gnu.org web pages if you wish; simply register a ``web-only'' project. If you don't want to use that method, please talk with @email{webmasters@@gnu.org} about other possible methods. For instance, you can mail them pages to install, if necessary. But that is more work for them, so please use Savannah if you can. Please note that the GNU webmasters may fix technical details in your web pages (HTML, CSS, obvious typos, broken links in the footer, etc.) and inform you of the change afterwards. If you use Savannah, you can use a special file named @file{.symlinks} in order to create symbolic links, which are not supported in CVS. For details, see @url{https://www.gnu.org/server/standards/README.webmastering.html#symlinks}. @node Freedom for Web Pages @section Freedom for Web Pages @cindex web pages, freedom for If you use a site other than @code{www.gnu.org}, please make sure that the site runs on free software alone. (It is ok if the site uses unreleased custom software, since that is free in a trivial sense: there's only one user and it has the four freedoms.) If the web site for a GNU package runs on non-free software, the public will see this, and it will have the effect of granting legitimacy to the non-free program. If you use multiple sites, they should all follow that criterion. Please don't link to a site that is about your package, which the public might perceive as connected with it and reflecting the position of its developers, unless it follows that criterion. Please make sure it is possible to use the web site fully using the Lynx browser, and with the IceCat browser with LibreJS enabled. It should work both with Tor and without Tor. Of course, it is desirable for the site to support as many other browsers as possible. Historically, web pages for GNU packages did not include GIF images, because of patent problems (@pxref{Ethical and Philosophical Consideration}). Although the GIF patents expired in 2006, using GIF images is still not recommended, as the PNG and JPEG formats are generally superior. See @url{https://www.gnu.org/philosophy/gif.html}. Please make sure that any Javascript code in your web pages is covered by a free license, and has its license indicated in a way LibreJS can recognize. See @url{https://gnu.org/philosophy/javascript-trap.html}. If the Javascript in the page is minified, or for any other reason is not the source code, it must point to its source code as described there. @node Manuals on Web Pages @section Manuals on Web Pages @cindex web pages, including manuals on @cindex formats for documentation, desired The web pages for the package should include its manuals, in HTML, DVI, Info, PDF, plain ASCII, and the source Texinfo. All of these can be generated automatically from Texinfo using Makeinfo and other programs. If the Texinfo itself is generated from some other source format, include that too. When there is only one manual, put it in a subdirectory called @file{manual}; the file @file{manual/index.html} should have a link to the manual in each of its forms. If the package has more than one manual, put each one in a subdirectory of @file{manual}, set up @file{index.html} in each subdirectory to link to that manual in all its forms, and make @file{manual/index.html} link to each manual through its subdirectory. See the section below for details on a script to make the job of creating all these different formats and index pages easier. We would like to list all GNU manuals on the page @url{https://www.gnu.org/manual}, so if yours isn't there, please send mail to @code{webmasters@@gnu.org}, asking them to add yours, and they will do so based on the contents of your @file{manual} directory. @menu * Invoking gendocs.sh:: @end menu @node Invoking gendocs.sh @subsection Invoking @command{gendocs.sh} @pindex gendocs.sh @cindex generating documentation output @cindex documentation output, generating The script @command{gendocs.sh} eases the task of generating the Texinfo documentation output for your web pages section above. It has a companion template file, used as the basis for the HTML index pages. Both are available from the Gnulib development: @smallformat @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh} @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template} @end smallformat There is also a minimalistic template, available from: @smallformat @uref{https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min} @end smallformat Invoke the script like this, in the directory containing the Texinfo source: @smallexample gendocs.sh --email @var{yourbuglist} @var{yourmanual} "GNU @var{yourmanual} manual" @end smallexample @noindent where @var{yourmanual} is the short name for your package and @var{yourbuglist} is the email address for bug reports (which should be @code{bug-@var{package}@@gnu.org}). The script processes the file @file{@var{yourmanual}.texinfo} (or @file{.texi} or @file{.txi}). For example: @smallexample cd .../texinfo/doc # download gendocs.sh and gendocs_template gendocs.sh --email bug-texinfo@@gnu.org texinfo "GNU Texinfo manual" @end smallexample @command{gendocs.sh} creates a subdirectory @file{manual/} containing the manual generated in all the standard output formats: Info, HTML, DVI, and so on, as well as the Texinfo source. You then need to move all those files, retaining the subdirectories, into the web pages for your package. You can specify the option @option{-o @var{outdir}} to override the name @file{manual}. Any previous contents of @var{outdir} will be deleted. The second argument, with the description, is included as part of the HTML @code{} of the overall @file{manual/index.html} file. It should include the name of the package being documented, as shown. @file{manual/index.html} is created by substitution from the file @file{gendocs_template}. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different arguments, specifying a different output directory with @option{-o} each time, and moving all the output to your web page. Then write (by hand) an overall index.html with links to them all. For example: @smallexample cd .../texinfo/doc gendocs.sh --email bug-texinfo@@gnu.org -o texinfo texinfo "GNU Texinfo manual" gendocs.sh --email bug-texinfo@@gnu.org -o info info "GNU Info manual" gendocs.sh --email bug-texinfo@@gnu.org -o info-stnd info-stnd "GNU info-stnd manual" @end smallexample By default, the script uses @command{makeinfo} for generating HTML output. If you prefer to use @command{texi2html}, use the @option{--texi2html} command line option, e.g.: @smallexample gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual" @end smallexample The template files will automatically produce entries for additional HTML output generated by @command{texi2html} (i.e., split by sections and chapters). You can set the environment variables @env{MAKEINFO}, @env{TEXI2DVI}, etc., to control the programs that get executed, and @env{GENDOCS_TEMPLATE_DIR} to control where the @file{gendocs_template} file is found. As usual, run @samp{gendocs.sh --help} for a description of all the options, environment variables, and more information. Please email bug reports, enhancement requests, or other correspondence about @command{gendocs} to @email{bug-texinfo@@gnu.org}. @node CVS Keywords in Web Pages @section CVS Keywords in Web Pages @cindex CVS keywords in web pages @cindex RCS keywords in web pages @cindex $ keywords in web pages @cindex web pages, and CVS keywords Since @code{www.gnu.org} works through CVS, CVS keywords in your manual, such as @code{@w{$}Log$}, need special treatment (even if you don't happen to maintain your manual in CVS). If these keywords end up in the generated output as literal strings, they will be expanded. The most robust way to handle this is to turn off keyword expansion for such generated files. For existing files, this is done with: @example cvs admin -ko @var{file1} @var{file2} ... @end example @noindent For new files: @example cvs add -ko @var{file1} @var{file2} ... @end example @c The CVS manual is now built with numeric references and no nonsplit @c form, so it's not worth trying to give a direct link. See the ``Keyword Substitution'' section in the CVS manual, available from @url{https://cvs.nongnu.org}. In Texinfo source, the recommended way to literally specify a ``dollar'' keyword is: @example @@w@{$@}Log$ @end example The @code{@@w} prevents keyword expansion in the Texinfo source itself. Also, @code{makeinfo} notices the @code{@@w} and generates output avoiding the literal keyword string. @node Ethical and Philosophical Consideration @chapter Ethical and Philosophical Consideration @cindex ethics @cindex philosophy The GNU project takes a strong stand for software freedom. Many times, this means you'll need to avoid certain technologies when their use would conflict with our long-term goals. Software patents threaten the advancement of free software and freedom to program. There are so many software patents in the US that any large program probably implements hundreds of patented techniques, unknown to the program's developers. It would be futile and self-defeating to try to find and avoid all these patents. But there are some patents which we know are likely to be used to threaten free software, so we make an effort to avoid the patented techniques. If you are concerned about the danger of a patent and would like advice, write to @email{licensing@@gnu.org}, and we will try to help you get advice from a lawyer. Sometimes the GNU project takes a strong stand against a particular patented technology in order to encourage society to reject it. That is why we rejected MP3 audio format in favor of the unpatented Ogg Vorbis format. These patents have reportedly expired, but we still prefer Ogg formats to MP3 formats. Please support this campaign by making Ogg Vorbis the preferred format for audio distribution in GNU packages and their web sites. We will consider using Ogg Opus at some point in the future. It is fine to distribute Ogg Opus files @emph{also}, but please continue distributing Ogg Vorbis, so as not to hurry users to change the software with which they listen to audio. We are unable to find a modern compressed video format that is truly safe from patents, so we use the Ogg Theora and WebM formats for which no licensing consortium has been set up. GNU programs and their web sites should not distribute video in MPEG-2 or MPEG 4 formats. A GNU package should not recommend use of any non-free program, nor should it require a non-free program (such as a non-free compiler or IDE) to build. Thus, a GNU package cannot be written in a programming language that does not have a free software implementation. Now that GNU/Linux systems are widely available, all GNU packages should provide full functionality on a 100% free GNU/Linux system, and should not require any non-free software to build or function. The GNU Coding Standards say a lot more about this issue. Similarly, a GNU package should not require the use of non-free software, including JavaScript, for the coordination of its development. For example, please don't use Transifex for translation of your software because it requires your translators to use non-free, JavaScript-based editing tools. Instead, a service without any ethical concerns should be used, such as The Translation Project (@url{https://translationproject.org}). A GNU package should not refer the user to any non-free documentation for free software. The need for free documentation to come with free software is now a major focus of the GNU project; to show that we are serious about the need for free documentation, we must not contradict our position by recommending use of documentation that isn't free. Please don't host discussions about your package in a service that requires nonfree software. For instance, Google+ ``communities'' require running a nonfree JavaScript program to post a message, so they can't be used in the Free World. Google Groups has the same problem. To host discussions there would be excluding people who live by free software principles. Of course, you can't order people not to use such services to talk with each other. What you can do is not legitimize them, and use your influence to lead people away from them. For instance, where you say where to have discussions related to the program, don't list such a place. Finally, new issues concerning the ethics of software freedom come up frequently. We ask that GNU maintainers, at least on matters that pertain specifically to their package, stand with the rest of the GNU project when such issues come up. @node Humor @chapter Humor and GNU In GNU, we appreciate humor in our work. GNU is a project of hackers, and @uref{https://stallman.org/articles/on-hacking.html,,hacking means playful cleverness}. Even the name ``GNU'' is an example of playful cleverness---it is a @uref{https://gnu.org/gnu/the-gnu-project.html,,recursive acronym for ``GNU's Not Unix.''} In that spirit, we prize occasional doses of humor in GNU packages. Humor is not mandatory in a GNU package; we do not tell maintainers, ``Make users smile, or else!'' But when maintainers do that, we too smile. Nowadays, our humor-positive approach occasionally encounters direct, blanket opposition. Some people advocate, and even demand, removal of jokes from software packages simply because they are jokes. We shrug off that point of view. Jokes are subject to the same sorts of issues and criticism as other writing. Sometimes there is a valid objection to text which is humorous, so we do not defend every joke obtusely to the bitter end. But @emph{the fact that it is a joke} is not a valid objection. There are people who frown on anything that is slightly risqué or controversial, including jokes. It would be a terrible shame for that attitude to prevail, so our policy is that the occasional risqué joke is ok. GNU is a 21st century project, not a 19th. @node Other Politics @chapter Other Politics The GNU Project supports the cause of software freedom, that the users of computing should have control of their computing activities. This requires that they have control of their software that does those activities, which in turn requires that they do these activities with free software and have the possibility of replacing any shared copies with their own copies. It also supports basic human rights in computing including use of the internet; opposing censorship, for instance. A GNU package should not seriously advocate any other political causes. Not that the GNU Project opposes those other causes. Rather, it is neutral on them, and GNU packages should be neutral too. @node Terminology @chapter Terminology Issues @cindex terminology This chapter explains a couple of issues of terminology which are important for correcting two widespread and important misunderstandings about GNU. @menu * Free Software and Open Source:: * GNU and Linux:: @end menu @node Free Software and Open Source @section Free Software and Open Source @cindex free software movement @cindex open source @cindex movement, free software @cindex development method, open source The terms ``free software'' and ``open source'', while describing almost the same category of software, stand for views based on fundamentally different values. The free software movement is idealistic, and raises issues of freedom, ethics, principle and what makes for a good society. The term open source, initiated in 1998, is associated with a philosophy which studiously avoids such questions. For a detailed explanation, see @url{https://www.gnu.org/philosophy/open-source-misses-the-point.html}. The GNU Project is aligned with the free software movement. This doesn't mean that all GNU contributors and maintainers have to agree; your views on these issues are up to you, and you're entitled to express them when speaking for yourself. However, due to the much greater publicity that the term ``open source'' receives, the GNU Project needs to overcome a widespread mistaken impression that GNU is @emph{and always was} an ``open source'' activity. For this reason, please use the term ``free software'', not ``open source'' or ``FOSS'', in GNU software releases, GNU documentation, and announcements and articles that you publish in your role as the maintainer of a GNU package. A reference to the URL given above, to explain the difference, is a useful thing to include as well. @node GNU and Linux @section GNU and Linux @cindex Linux @cindex GNU/Linux The GNU Project was formed to develop a free Unix-like operating system, GNU@. The existence of this system is our major accomplishment. However, the widely used version of the GNU system, in which Linux is used as the kernel, is often called simply ``Linux''. As a result, most users don't know about the GNU Project's major accomplishment---or more precisely, they know about it, but don't realize it is the GNU Project's accomplishment and reason for existence. Even people who believe they know the real history often believe that the goal of GNU was to develop ``tools'' or ``utilities''. To correct this confusion, we have made a years-long effort to distinguish between Linux, the kernel that Linus Torvalds wrote, and GNU/Linux, the operating system that is the combination of GNU and Linux. The resulting increased awareness of what the GNU Project has already done helps every activity of the GNU Project recruit more support and contributors. Please make this distinction consistently in GNU software releases, GNU documentation, and announcements and articles that you publish in your role as the maintainer of a GNU package. If you want to explain the terminology and its reasons, you can refer to the URL @url{https://www.gnu.org/gnu/linux-and-gnu.html}. To make it clear that Linux is a kernel, not an operating system, please take care to avoid using the term ``Linux system'' in those materials. If you want to have occasion to make a statement about systems in which the kernel is Linux, write ``systems in which the kernel is Linux'' or ``systems with Linux as the kernel.'' That explicitly contrasts the system and the kernel, and will help readers understand the difference between the two. Please avoid simplified forms such as ``Linux-based systems'' because those fail to highlight the difference between the kernel and the system, and could encourage readers to overlook the distinction. To contrast the GNU system proper with GNU/Linux, you can call it ``GNU/Hurd'' or ``the GNU/Hurd system''. However, when that contrast is not specifically the focus, please call it just ``GNU'' or ``the GNU system''. When referring to the collection of servers that is the higher level of the GNU kernel, please call it ``the Hurd'' or ``the GNU Hurd''. Note that this uses a space, not a slash. For more about this point, see @url{https://www.gnu.org/gnu/gnu-linux-faq.html}. @node Interviews and Speeches @chapter Interviews and Speeches Interviews and speeches about your package are an important channel for informing the public about the GNU system and the ideas of the free software movement. Please avoid saying ``open source'' and avoid calling the GNU system ``Linux'', just as you would in the package itself (@pxref{Terminology}). Likewise, avoid promoting nonfree programs (@pxref{References,,, standards, GNU Coding Standards}) as you would in the package itself. Many GNU users have erroneous ideas about GNU@. Outside of our community, most people think it is Linux. Please use your opportunity to set them straight. Start the presentation with the answers to these basic questions: @itemize @bullet @item What GNU is (an operating system developed to be Unix-like and totally free software). It is good to mention @url{https://www.gnu.org}. @item What free software is (the users control it, so it doesn't control them). It is good to state the four freedoms and/or refer to @url{https://www.gnu.org/philosophy/free-sw.html}. @item What GNU/Linux is (Linux filled the last gap in GNU). It is useful to refer to @url{https://www.gnu.org/gnu/linux-and-gnu.html}. @item What the GNU Project is (the project to develop GNU). @item How your package fits in (it's part of GNU, and the work is part of the GNU Project). @end itemize If you feel a social pressure not to say these things, you may be coming in contact with some who would prefer that these things not be said. That's precisely when we need your support most. Please don't include advertisements or plugs for any company, product or service. Even if the product would meet the standards for the FSF to endorse it, an ad for it is out of place in a presentation about a GNU package. Likewise, please don't include company slogans. Mention a company only when called for by the subject matter. A few GNU packages are actually business activities of a particular company. In that case, it is ok to say so at the start. Otherwise, please show that this is a project of the GNU Project, and avoid suggesting it is any company's project. If you are paid by a company to work on the GNU package, it is appropriate to thank the company in a discreet way, but please don't go beyond that. Before you do a speech or interview, please contact the GNU Project leadership. We can give you advice on how to deal with various eventualities. When your interviews and speech recordings or transcript are posted, please tell us about them. Then we can publicize them. Please post them in formats that are friendly to free software: not in Doc or Docx format, not with Flash, not with QuickTime, not with MP3, MPEG2 or MPEG4. Plain text, HTML and PDF are good. @node Hosting @chapter Hosting @cindex CVS repository @cindex repository @cindex source repository @cindex version control system @cindex FTP site @cindex release site @cindex hosting We recommend using @code{savannah.gnu.org} for the source code repository for your package, but that's not required. @xref{Old Versions}, for more information about Savannah. We strongly urge you to use @code{ftp.gnu.org} as the standard distribution site for releases. Doing so makes it easier for developers and users to find the latest GNU releases. However, it is ok to use another server if you wish, provided it allows access from the general public without limitation (for instance, without excluding any country). If you use a company's machine to hold the repository for your program, or as its release distribution site, please put this statement in a prominent place on the site, so as to prevent people from getting the wrong idea about the relationship between the package and the company: @smallexample The programs <list of them> hosted here are free software packages of the GNU Project, not products of <company name>. We call them "free software" because you are free to copy and redistribute them, following the rules stated in the license of each package. For more information, see https://www.gnu.org/philosophy/free-sw.html. If you are looking for service or support for GNU software, see https://www.gnu.org/gethelp/ for suggestions of where to ask. If you would like to contribute to the development of one of these packages, contact the package maintainer or the bug-reporting address of the package (which should be listed in the package itself), or look on www.gnu.org for more information on how to contribute. @end smallexample @node Donations @chapter Donations @cindex Donations, for packages @cindex Money, donated to packages As a maintainer, you might want to accept donations for your work, especially if you pay for any of your own hosting/development infrastructure. Following is some text you can adapt to your own situation, and use on your package's web site, @file{README}, or in wherever way you find it useful: @smallexample We appreciate contributions of any size -- donations enable us to spend more time working on the project, and help cover our infrastructure expenses. If you'd like to make a small donation, please visit @var{url1} and do it through @var{payment-service}. Since our project isn't a tax-exempt organization, we can't offer you a tax deduction, but for all donations over @var{amount1}, we'd be happy to recognize your contribution on @var{url2}. We are also happy to consider making particular improvements or changes, or giving specific technical assistance, in return for a substantial donation over @var{amount2}. If you would like to discuss this possibility, write to us at @var{address}. Another possibility is to pay a software maintenance fee. Again, write to us about this at @var{address} to discuss how much you want to pay and how much maintenance we can offer in return. If you pay more than @var{amount1}, we can give you a document for your records. Thanks for your support! @end smallexample We don't recommend any specific payment service. However, GNU developers should not use a service that requires them to sign a proprietary software license, such as Google's payment service. Please also avoid sites that requires users to run nonfree software in order to donate. (This includes JavaScript software, so try it with LibreJS or with JavaScript disabled.) In the text you post on the site, please pay attention to the terminological issues we care about (@pxref{Terminology}). We have no objections to using Bitcoin to receive donations. The FSF can collect donations for a limited number of projects; if you want to propose that for your project, write to @email{maintainers@@gnu.org}. The FSF is required to supervise the spending of these funds. Of course, it is also good to encourage people to join the FSF (@url{https://www.fsf.org}) or make a general donation, either instead of or as well as package-specific donations. @node Free Software Directory @chapter Free Software Directory @cindex Free Software Directory @cindex Directory, Free Software The Free Software Directory aims to be a complete list of free software packages, within certain criteria. Every GNU package should be listed there, so please see @url{https://www.gnu.org/help/directory.html#adding-entries} for information on how to write an entry for your package. Contact @email{bug-directory@@gnu.org} with any questions or suggestions for the Free Software Directory. @node Using the Proofreaders List @chapter Using the Proofreaders List @cindex proofreading If you want help finding errors in documentation, or help improving the quality of writing, or if you are not a native speaker of English and want help producing good English documentation, you can use the GNU proofreaders mailing list: @email{proofreaders@@gnu.org}. But be careful when you use the list, because there are over 200 people on it. If you simply ask everyone on the list to read your work, there will probably be tremendous duplication of effort by the proofreaders, and you will probably get the same errors reported 100 times. This must be avoided. Also, the people on the list do not want to get a large amount of mail from it. So do not ever ask people on the list to send mail to the list! Here are a few methods that seem reasonable to use: @itemize @bullet @item For something small, mail it to the list, and ask people to pick a random number from 1 to 20, and read it if the number comes out as 10. This way, assuming 50% response, some 5 people will read the piece. @item For a larger work, divide your work into around 20 equal-sized parts, tell people where to get it, and ask each person to pick randomly which part to read. Be sure to specify the random choice procedure; otherwise people will probably use a mental procedure that is not really random, such as ``pick a part near the middle'', and you will not get even coverage. You can either divide up the work physically, into 20 separate files, or describe a virtual division, such as by sections (if your work has approximately 20 sections). If you do the latter, be sure to be precise about it---for example, do you want the material before the first section heading to count as a section, or not? @item For a job needing special skills, send an explanation of it, and ask people to send you mail if they volunteer for the job. When you get enough volunteers, send another message to the list saying ``I have enough volunteers, no more please.'' @end itemize @node GNU Free Documentation License @appendix GNU Free Documentation License @cindex FDL, GNU Free Documentation License @include fdl.texi @node Index @unnumbered Index @printindex cp @bye Local variables: eval: (add-hook 'before-save-hook 'time-stamp) time-stamp-start: "@set lastupdate " time-stamp-end: "$" time-stamp-format: "%:b %:d, %:y" compile-command: "make -C work.m" coding: utf-8 End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/make-stds.texi����������������������������������������������������������0000664�0000000�0000000�00000134647�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@comment This file is included by both standards.texi and make.texinfo. @comment It was broken out of standards.texi on 1/6/93 by roland. @node Makefile Conventions @chapter Makefile Conventions @cindex makefile, conventions for @cindex conventions for makefiles @cindex standards for makefiles @c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, @c 2004, 2005, 2006, 2007, 2008, 2010, 2013, 2014, 2015 @c Free Software Foundation, Inc. @c @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 @c or any later version published by the Free Software Foundation; @c with no Invariant Sections, with no @c Front-Cover Texts, and with no Back-Cover Texts. @c A copy of the license is included in the section entitled ``GNU @c Free Documentation License''. This @ifinfo node @end ifinfo @iftex @ifset CODESTD section @end ifset @ifclear CODESTD chapter @end ifclear @end iftex describes conventions for writing the Makefiles for GNU programs. Using Automake will help you write a Makefile that follows these conventions. For more information on portable Makefiles, see @sc{posix} and @ref{Portable Make, Portable Make Programming,, autoconf, Autoconf}. @menu * Makefile Basics:: General conventions for Makefiles. * Utilities in Makefiles:: Utilities to be used in Makefiles. * Command Variables:: Variables for specifying commands. * DESTDIR:: Supporting staged installs. * Directory Variables:: Variables for installation directories. * Standard Targets:: Standard targets for users. * Install Command Categories:: Three categories of commands in the @samp{install} rule: normal, pre-install and post-install. @end menu @node Makefile Basics @section General Conventions for Makefiles Every Makefile should contain this line: @example SHELL = /bin/sh @end example @noindent to avoid trouble on systems where the @code{SHELL} variable might be inherited from the environment. (This is never a problem with GNU @code{make}.) Different @code{make} programs have incompatible suffix lists and implicit rules, and this sometimes creates confusion or misbehavior. So it is a good idea to set the suffix list explicitly using only the suffixes you need in the particular Makefile, like this: @example .SUFFIXES: .SUFFIXES: .c .o @end example @noindent The first line clears out the suffix list, the second introduces all suffixes which may be subject to implicit rules in this Makefile. Don't assume that @file{.} is in the path for command execution. When you need to run programs that are a part of your package during the make, please make sure that it uses @file{./} if the program is built as part of the make or @file{$(srcdir)/} if the file is an unchanging part of the source code. Without one of these prefixes, the current search path is used. The distinction between @file{./} (the @dfn{build directory}) and @file{$(srcdir)/} (the @dfn{source directory}) is important because users can build in a separate directory using the @samp{--srcdir} option to @file{configure}. A rule of the form: @smallexample foo.1 : foo.man sedscript sed -f sedscript foo.man > foo.1 @end smallexample @noindent will fail when the build directory is not the source directory, because @file{foo.man} and @file{sedscript} are in the source directory. When using GNU @code{make}, relying on @samp{VPATH} to find the source file will work in the case where there is a single dependency file, since the @code{make} automatic variable @samp{$<} will represent the source file wherever it is. (Many versions of @code{make} set @samp{$<} only in implicit rules.) A Makefile target like @smallexample foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o @end smallexample @noindent should instead be written as @smallexample foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ @end smallexample @noindent in order to allow @samp{VPATH} to work correctly. When the target has multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest way to make the rule work well. For example, the target above for @file{foo.1} is best written as: @smallexample foo.1 : foo.man sedscript sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@@ @end smallexample GNU distributions usually contain some files which are not source files---for example, Info files, and the output from Autoconf, Automake, Bison or Flex. Since these files normally appear in the source directory, they should always appear in the source directory, not in the build directory. So Makefile rules to update them should put the updated files in the source directory. However, if a file does not appear in the distribution, then the Makefile should not put it in the source directory, because building a program in ordinary circumstances should not modify the source directory in any way. Try to make the build and installation targets, at least (and all their subtargets) work correctly with a parallel @code{make}. @node Utilities in Makefiles @section Utilities in Makefiles Write the Makefile commands (and any shell scripts, such as @code{configure}) to run under @code{sh} (both the traditional Bourne shell and the @sc{posix} shell), not @code{csh}. Don't use any special features of @code{ksh} or @code{bash}, or @sc{posix} features not widely supported in traditional Bourne @code{sh}. The @code{configure} script and the Makefile rules for building and installation should not use any utilities directly except these: @c dd find @c gunzip gzip md5sum @c mkfifo mknod tee uname @example awk cat cmp cp diff echo egrep expr false grep install-info ln ls mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true @end example Compression programs such as @code{gzip} can be used in the @code{dist} rule. Generally, stick to the widely-supported (usually @sc{posix}-specified) options and features of these programs. For example, don't use @samp{mkdir -p}, convenient as it may be, because a few systems don't support it at all and with others, it is not safe for parallel execution. For a list of known incompatibilities, see @ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}. It is a good idea to avoid creating symbolic links in makefiles, since a few file systems don't support them. The Makefile rules for building and installation can also use compilers and related programs, but should do so via @code{make} variables so that the user can substitute alternatives. Here are some of the programs we mean: @example ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc @end example Use the following @code{make} variables to run those programs: @example $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) @end example When you use @code{ranlib} or @code{ldconfig}, you should make sure nothing bad happens if the system does not have the program in question. Arrange to ignore an error from that command, and print a message before the command to tell the user that failure of this command does not mean a problem. (The Autoconf @samp{AC_PROG_RANLIB} macro can help with this.) If you use symbolic links, you should implement a fallback for systems that don't have symbolic links. Additional utilities that can be used via Make variables are: @example chgrp chmod chown mknod @end example It is ok to use other utilities in Makefile portions (or scripts) intended only for particular systems where you know those utilities exist. @node Command Variables @section Variables for Specifying Commands Makefiles should provide variables for overriding certain commands, options, and so on. In particular, you should run most utility programs via variables. Thus, if you use Bison, have a variable named @code{BISON} whose default value is set with @samp{BISON = bison}, and refer to it with @code{$(BISON)} whenever you need to use Bison. File management utilities such as @code{ln}, @code{rm}, @code{mv}, and so on, need not be referred to through variables in this way, since users don't need to replace them with other programs. Each program-name variable should come with an options variable that is used to supply options to the program. Append @samp{FLAGS} to the program-name variable name to get the options variable name---for example, @code{BISONFLAGS}. (The names @code{CFLAGS} for the C compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are exceptions to this rule, but we keep them because they are standard.) Use @code{CPPFLAGS} in any compilation command that runs the preprocessor, and use @code{LDFLAGS} in any compilation command that does linking as well as in any direct use of @code{ld}. If there are C compiler options that @emph{must} be used for proper compilation of certain files, do not include them in @code{CFLAGS}. Users expect to be able to specify @code{CFLAGS} freely themselves. Instead, arrange to pass the necessary options to the C compiler independently of @code{CFLAGS}, by writing them explicitly in the compilation commands or by defining an implicit rule, like this: @smallexample CFLAGS = -g ALL_CFLAGS = -I. $(CFLAGS) .c.o: $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< @end smallexample Do include the @samp{-g} option in @code{CFLAGS}, because that is not @emph{required} for proper compilation. You can consider it a default that is only recommended. If the package is set up so that it is compiled with GCC by default, then you might as well include @samp{-O} in the default value of @code{CFLAGS} as well. Put @code{CFLAGS} last in the compilation command, after other variables containing compiler options, so the user can use @code{CFLAGS} to override the others. @code{CFLAGS} should be used in every invocation of the C compiler, both those which do compilation and those which do linking. Every Makefile should define the variable @code{INSTALL}, which is the basic command for installing a file into the system. Every Makefile should also define the variables @code{INSTALL_PROGRAM} and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be @code{$@{INSTALL@} -m 644}.) Then it should use those variables as the commands for actual installation, for executables and non-executables respectively. Minimal use of these variables is as follows: @example $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a @end example However, it is preferable to support a @code{DESTDIR} prefix on the target files, as explained in the next section. It is acceptable, but not required, to install multiple files in one command, with the final argument being a directory, as in: @example $(INSTALL_PROGRAM) foo bar baz $(bindir) @end example @node DESTDIR @section @code{DESTDIR}: Support for Staged Installs @vindex DESTDIR @cindex staged installs @cindex installations, staged @code{DESTDIR} is a variable prepended to each installed target file, like this: @example $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a @end example The @code{DESTDIR} variable is specified by the user on the @code{make} command line as an absolute file name. For example: @example make DESTDIR=/tmp/stage install @end example @noindent @code{DESTDIR} should be supported only in the @code{install*} and @code{uninstall*} targets, as those are the only targets where it is useful. If your installation step would normally install @file{/usr/local/bin/foo} and @file{/usr/@/local/@/lib/@/libfoo.a}, then an installation invoked as in the example above would install @file{/tmp/stage/usr/local/bin/foo} and @file{/tmp/stage/usr/local/lib/libfoo.a} instead. Prepending the variable @code{DESTDIR} to each target in this way provides for @dfn{staged installs}, where the installed files are not placed directly into their expected location but are instead copied into a temporary location (@code{DESTDIR}). However, installed files maintain their relative directory structure and any embedded file names will not be modified. You should not set the value of @code{DESTDIR} in your @file{Makefile} at all; then the files are installed into their expected locations by default. Also, specifying @code{DESTDIR} should not change the operation of the software in any way, so its value should not be included in any file contents. @code{DESTDIR} support is commonly used in package creation. It is also helpful to users who want to understand what a given package will install where, and to allow users who don't normally have permissions to install into protected areas to build and install before gaining those permissions. Finally, it can be useful with tools such as @code{stow}, where code is installed in one place but made to appear to be installed somewhere else using symbolic links or special mount operations. So, we strongly recommend GNU packages support @code{DESTDIR}, though it is not an absolute requirement. @node Directory Variables @section Variables for Installation Directories Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables and the values they should have in GNU packages are described below. They are based on a standard file system layout; variants of it are used in GNU/Linux and other modern operating systems. Installers are expected to override these values when calling @command{make} (e.g., @kbd{make prefix=/usr install}) or @command{configure} (e.g., @kbd{configure --prefix=/usr}). GNU packages should not try to guess which value should be appropriate for these variables on the system they are being installed onto: use the default settings specified here so that all GNU packages behave identically, allowing the installer to achieve any desired layout. @cindex directories, creating installation @cindex installation directories, creating All installation directories, and their parent directories, should be created (if necessary) before they are installed into. These first two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, and nothing should be directly installed into these two directories. @table @code @item prefix @vindex prefix A prefix used in constructing the default values of the variables listed below. The default value of @code{prefix} should be @file{/usr/local}. When building the complete GNU system, the prefix will be empty and @file{/usr} will be a symbolic link to @file{/}. (If you are using Autoconf, write it as @samp{@@prefix@@}.) Running @samp{make install} with a different value of @code{prefix} from the one used to build the program should @emph{not} recompile the program. @item exec_prefix @vindex exec_prefix A prefix used in constructing the default values of some of the variables listed below. The default value of @code{exec_prefix} should be @code{$(prefix)}. (If you are using Autoconf, write it as @samp{@@exec_prefix@@}.) Generally, @code{$(exec_prefix)} is used for directories that contain machine-specific files (such as executables and subroutine libraries), while @code{$(prefix)} is used directly for other directories. Running @samp{make install} with a different value of @code{exec_prefix} from the one used to build the program should @emph{not} recompile the program. @end table Executable programs are installed in one of the following directories. @table @code @item bindir @vindex bindir The directory for installing executable programs that users can run. This should normally be @file{/usr/local/bin}, but write it as @file{$(exec_prefix)/bin}. (If you are using Autoconf, write it as @samp{@@bindir@@}.) @item sbindir @vindex sbindir The directory for installing executable programs that can be run from the shell, but are only generally useful to system administrators. This should normally be @file{/usr/local/sbin}, but write it as @file{$(exec_prefix)/sbin}. (If you are using Autoconf, write it as @samp{@@sbindir@@}.) @item libexecdir @vindex libexecdir @comment This paragraph adjusted to avoid overfull hbox --roland 5jul94 The directory for installing executable programs to be run by other programs rather than by users. This directory should normally be @file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. (If you are using Autoconf, write it as @samp{@@libexecdir@@}.) The definition of @samp{libexecdir} is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under @file{$(libexecdir)/@var{package-name}/}, possibly within additional subdirectories thereof, such as @file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}. @end table Data files used by the program during its execution are divided into categories in two ways. @itemize @bullet @item Some files are normally modified by programs; others are never normally modified (though users may edit some of these). @item Some files are architecture-independent and can be shared by all machines at a site; some are architecture-dependent and can be shared only by machines of the same kind and operating system; others may never be shared between two machines. @end itemize This makes for six different possibilities. However, we want to discourage the use of architecture-dependent files, aside from object files and libraries. It is much cleaner to make other data files architecture-independent, and it is generally not hard. Here are the variables Makefiles should use to specify directories to put these various kinds of files in: @table @samp @item datarootdir The root of the directory tree for read-only architecture-independent data files. This should normally be @file{/usr/local/share}, but write it as @file{$(prefix)/share}. (If you are using Autoconf, write it as @samp{@@datarootdir@@}.) @samp{datadir}'s default value is based on this variable; so are @samp{infodir}, @samp{mandir}, and others. @item datadir The directory for installing idiosyncratic read-only architecture-independent data files for this program. This is usually the same place as @samp{datarootdir}, but we use the two separate variables so that you can move these program-specific files without altering the location for Info files, man pages, etc. @c raggedright (not until next Texinfo release) This should normally be @file{/usr/local/share}, but write it as @file{$(datarootdir)}. (If you are using Autoconf, write it as @samp{@@datadir@@}.) @c end raggedright The definition of @samp{datadir} is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under @file{$(datadir)/@var{package-name}/}. @item sysconfdir The directory for installing read-only data files that pertain to a single machine--that is to say, files for configuring a host. Mailer and network configuration files, @file{/etc/passwd}, and so forth belong here. All the files in this directory should be ordinary ASCII text files. This directory should normally be @file{/usr/local/etc}, but write it as @file{$(prefix)/etc}. (If you are using Autoconf, write it as @samp{@@sysconfdir@@}.) Do not install executables here in this directory (they probably belong in @file{$(libexecdir)} or @file{$(sbindir)}). Also do not install files that are modified in the normal course of their use (programs whose purpose is to change the configuration of the system excluded). Those probably belong in @file{$(localstatedir)}. @item sharedstatedir The directory for installing architecture-independent data files which the programs modify while they run. This should normally be @file{/usr/local/com}, but write it as @file{$(prefix)/com}. (If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.) @item localstatedir The directory for installing data files which the programs modify while they run, and that pertain to one specific machine. Users should never need to modify files in this directory to configure the package's operation; put such configuration information in separate files that go in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)} should normally be @file{/usr/local/var}, but write it as @file{$(prefix)/var}. (If you are using Autoconf, write it as @samp{@@localstatedir@@}.) @item runstatedir The directory for installing data files which the programs modify while they run, that pertain to one specific machine, and which need not persist longer than the execution of the program---which is generally long-lived, for example, until the next reboot. PID files for system daemons are a typical use. In addition, this directory should not be cleaned except perhaps at reboot, while the general @file{/tmp} (@code{TMPDIR}) may be cleaned arbitrarily. This should normally be @file{/var/run}, but write it as @file{$(localstatedir)/run}. Having it as a separate variable allows the use of @file{/run} if desired, for example. (If you are using Autoconf 2.70 or later, write it as @samp{@@runstatedir@@}.) @end table These variables specify the directory for installing certain specific types of files, if your program has them. Every GNU package should have Info files, so every program needs @samp{infodir}, but not all need @samp{libdir} or @samp{lispdir}. @table @samp @item includedir The directory for installing header files to be included by user programs with the C @samp{#include} preprocessor directive. This should normally be @file{/usr/local/include}, but write it as @file{$(prefix)/include}. (If you are using Autoconf, write it as @samp{@@includedir@@}.) Most compilers other than GCC do not look for header files in directory @file{/usr/local/include}. So installing the header files this way is only useful with GCC@. Sometimes this is not a problem because some libraries are only really intended to work with GCC@. But some libraries are intended to work with other compilers. They should install their header files in two places, one specified by @code{includedir} and one specified by @code{oldincludedir}. @item oldincludedir The directory for installing @samp{#include} header files for use with compilers other than GCC@. This should normally be @file{/usr/include}. (If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.) The Makefile commands should check whether the value of @code{oldincludedir} is empty. If it is, they should not try to use it; they should cancel the second installation of the header files. A package should not replace an existing header in this directory unless the header came from the same package. Thus, if your Foo package provides a header file @file{foo.h}, then it should install the header file in the @code{oldincludedir} directory if either (1) there is no @file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo package. To tell whether @file{foo.h} came from the Foo package, put a magic string in the file---part of a comment---and @code{grep} for that string. @item docdir The directory for installing documentation files (other than Info) for this package. By default, it should be @file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as @file{$(datarootdir)/doc/@var{yourpkg}}. (If you are using Autoconf, write it as @samp{@@docdir@@}.) The @var{yourpkg} subdirectory, which may include a version number, prevents collisions among files with common names, such as @file{README}. @item infodir The directory for installing the Info files for this package. By default, it should be @file{/usr/local/share/info}, but it should be written as @file{$(datarootdir)/info}. (If you are using Autoconf, write it as @samp{@@infodir@@}.) @code{infodir} is separate from @code{docdir} for compatibility with existing practice. @item htmldir @itemx dvidir @itemx pdfdir @itemx psdir Directories for installing documentation files in the particular format. They should all be set to @code{$(docdir)} by default. (If you are using Autoconf, write them as @samp{@@htmldir@@}, @samp{@@dvidir@@}, etc.) Packages which supply several translations of their documentation should install them in @samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where @var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}. @item libdir The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in @file{$(libexecdir)} instead. The value of @code{libdir} should normally be @file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. (If you are using Autoconf, write it as @samp{@@libdir@@}.) @item lispdir The directory for installing any Emacs Lisp files in this package. By default, it should be @file{/usr/local/share/emacs/site-lisp}, but it should be written as @file{$(datarootdir)/emacs/site-lisp}. If you are using Autoconf, write the default as @samp{@@lispdir@@}. In order to make @samp{@@lispdir@@} work, you need the following lines in your @file{configure.ac} file: @example lispdir='$@{datarootdir@}/emacs/site-lisp' AC_SUBST(lispdir) @end example @item localedir The directory for installing locale-specific message catalogs for this package. By default, it should be @file{/usr/local/share/locale}, but it should be written as @file{$(datarootdir)/locale}. (If you are using Autoconf, write it as @samp{@@localedir@@}.) This directory usually has a subdirectory per locale. @end table Unix-style man pages are installed in one of the following: @table @samp @item mandir The top-level directory for installing the man pages (if any) for this package. It will normally be @file{/usr/local/share/man}, but you should write it as @file{$(datarootdir)/man}. (If you are using Autoconf, write it as @samp{@@mandir@@}.) @item man1dir The directory for installing section 1 man pages. Write it as @file{$(mandir)/man1}. @item man2dir The directory for installing section 2 man pages. Write it as @file{$(mandir)/man2} @item @dots{} @strong{Don't make the primary documentation for any GNU software be a man page. Write a manual in Texinfo instead. Man pages are just for the sake of people running GNU software on Unix, which is a secondary application only.} @item manext The file name extension for the installed man page. This should contain a period followed by the appropriate digit; it should normally be @samp{.1}. @item man1ext The file name extension for installed section 1 man pages. @item man2ext The file name extension for installed section 2 man pages. @item @dots{} Use these names instead of @samp{manext} if the package needs to install man pages in more than one section of the manual. @end table And finally, you should set the following variable: @table @samp @item srcdir The directory for the sources being compiled. The value of this variable is normally inserted by the @code{configure} shell script. (If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.) @end table For example: @smallexample @c I have changed some of the comments here slightly to fix an overfull @c hbox, so the make manual can format correctly. --roland # Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local datarootdir = $(prefix)/share datadir = $(datarootdir) exec_prefix = $(prefix) # Where to put the executable for the command 'gcc'. bindir = $(exec_prefix)/bin # Where to put the directories used by the compiler. libexecdir = $(exec_prefix)/libexec # Where to put the Info files. infodir = $(datarootdir)/info @end smallexample If your program installs a large number of files into one of the standard user-specified directories, it might be useful to group them into a subdirectory particular to that program. If you do this, you should write the @code{install} rule to create these subdirectories. Do not expect the user to include the subdirectory name in the value of any of the variables listed above. The idea of having a uniform set of variable names for installation directories is to enable the user to specify the exact same values for several different GNU packages. In order for this to be useful, all the packages must be designed so that they will work sensibly when the user does so. At times, not all of these variables may be implemented in the current release of Autoconf and/or Automake; but as of Autoconf@tie{}2.60, we believe all of them are. When any are missing, the descriptions here serve as specifications for what Autoconf will implement. As a programmer, you can either use a development version of Autoconf or avoid using these variables until a stable release is made which supports them. @node Standard Targets @section Standard Targets for Users All GNU programs should have the following targets in their Makefiles: @table @samp @item all Compile the entire program. This should be the default target. This target need not rebuild any documentation files; Info files should normally be included in the distribution, and DVI (and other documentation format) files should be made only when explicitly asked for. By default, the Make rules should compile and link with @samp{-g}, so that executable programs have debugging symbols. Otherwise, you are essentially helpless in the face of a crash, and it is often far from easy to reproduce with a fresh build. @item install Compile the program and copy the executables, libraries, and so on to the file names where they should reside for actual use. If there is a simple test to verify that a program is properly installed, this target should run that test. Do not strip executables when installing them. This helps eventual debugging that may be needed later, and nowadays disk space is cheap and dynamic loaders typically ensure debug sections are not loaded during normal execution. Users that need stripped binaries may invoke the @code{install-strip} target to do that. If possible, write the @code{install} target rule so that it does not modify anything in the directory where the program was built, provided @samp{make all} has just been done. This is convenient for building the program under one user name and installing it under another. The commands should create all the directories in which files are to be installed, if they don't already exist. This includes the directories specified as the values of the variables @code{prefix} and @code{exec_prefix}, as well as all subdirectories that are needed. One way to do this is by means of an @code{installdirs} target as described below. Use @samp{-} before any command for installing a man page, so that @code{make} will ignore any errors. This is in case there are systems that don't have the Unix man page documentation system installed. The way to install Info files is to copy them into @file{$(infodir)} with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run the @code{install-info} program if it is present. @code{install-info} is a program that edits the Info @file{dir} file to add or update the menu entry for the given Info file; it is part of the Texinfo package. Here is a sample rule to install an Info file that also tries to handle some additional situations, such as @code{install-info} not being present. @comment This example has been carefully formatted for the Make manual. @comment Please do not reformat it without talking to bug-make@gnu.org. @smallexample do-install-info: foo.info installdirs $(NORMAL_INSTALL) # Prefer an info file in . to one in srcdir. if test -f foo.info; then d=.; \ else d="$(srcdir)"; fi; \ $(INSTALL_DATA) $$d/foo.info \ "$(DESTDIR)$(infodir)/foo.info" # Run install-info only if it exists. # Use 'if' instead of just prepending '-' to the # line so we notice real errors from install-info. # Use '$(SHELL) -c' because some shells do not # fail gracefully when there is an unknown command. $(POST_INSTALL) if $(SHELL) -c 'install-info --version' \ >/dev/null 2>&1; then \ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \ "$(DESTDIR)$(infodir)/foo.info"; \ else true; fi @end smallexample When writing the @code{install} target, you must classify all the commands into three categories: normal ones, @dfn{pre-installation} commands and @dfn{post-installation} commands. @xref{Install Command Categories}. @item install-html @itemx install-dvi @itemx install-pdf @itemx install-ps These targets install documentation in formats other than Info; they're intended to be called explicitly by the person installing the package, if that format is desired. GNU prefers Info files, so these must be installed by the @code{install} target. When you have many documentation files to install, we recommend that you avoid collisions and clutter by arranging for these targets to install in subdirectories of the appropriate installation directory, such as @code{htmldir}. As one example, if your package has multiple manuals, and you wish to install HTML documentation with many files (such as the ``split'' mode output by @code{makeinfo --html}), you'll certainly want to use subdirectories, or two nodes with the same name in different manuals will overwrite each other. Please make these @code{install-@var{format}} targets invoke the commands for the @var{format} target, for example, by making @var{format} a dependency. @item uninstall Delete all the installed files---the copies that the @samp{install} and @samp{install-*} targets create. This rule should not modify the directories where compilation is done, only the directories where files are installed. The uninstallation commands are divided into three categories, just like the installation commands. @xref{Install Command Categories}. @item install-strip Like @code{install}, but strip the executable files while installing them. In simple cases, this target can use the @code{install} target in a simple way: @smallexample install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install @end smallexample But if the package installs scripts as well as real executables, the @code{install-strip} target can't just refer to the @code{install} target; it has to strip the executables but not the scripts. @code{install-strip} should not strip the executables in the build directory which are being copied for installation. It should only strip the copies that are installed. Normally we do not recommend stripping an executable unless you are sure the program has no bugs. However, it can be reasonable to install a stripped executable for actual execution while saving the unstripped executable elsewhere in case there is a bug. @item clean Delete all files in the current directory that are normally created by building the program. Also delete files in other directories if they are created by this makefile. However, don't delete the files that record the configuration. Also preserve files that could be made by building, but normally aren't because the distribution comes with them. There is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. Delete @file{.dvi} files here if they are not part of the distribution. @item distclean Delete all files in the current directory (or created by this makefile) that are created by configuring or building the program. If you have unpacked the source and built the program without creating any other files, @samp{make distclean} should leave only the files that were in the distribution. However, there is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. @item mostlyclean Like @samp{clean}, but may refrain from deleting a few files that people normally don't want to recompile. For example, the @samp{mostlyclean} target for GCC does not delete @file{libgcc.a}, because recompiling it is rarely necessary and takes a lot of time. @item maintainer-clean Delete almost everything that can be reconstructed with this Makefile. This typically includes everything deleted by @code{distclean}, plus more: C source files produced by Bison, tags tables, Info files, and so on. The reason we say ``almost everything'' is that running the command @samp{make maintainer-clean} should not delete @file{configure} even if @file{configure} can be remade using a rule in the Makefile. More generally, @samp{make maintainer-clean} should not delete anything that needs to exist in order to run @file{configure} and then begin to build the program. Also, there is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. These are the only exceptions; @code{maintainer-clean} should delete everything else that can be rebuilt. The @samp{maintainer-clean} target is intended to be used by a maintainer of the package, not by ordinary users. You may need special tools to reconstruct some of the files that @samp{make maintainer-clean} deletes. Since these files are normally included in the distribution, we don't take care to make them easy to reconstruct. If you find you need to unpack the full distribution again, don't blame us. To help make users aware of this, the commands for the special @code{maintainer-clean} target should start with these two: @smallexample @@echo 'This command is intended for maintainers to use; it' @@echo 'deletes files that may need special tools to rebuild.' @end smallexample @item TAGS Update a tags table for this program. @c ADR: how? @item info Generate any Info files needed. The best way to write the rules is as follows: @smallexample info: foo.info foo.info: foo.texi chap1.texi chap2.texi $(MAKEINFO) $(srcdir)/foo.texi @end smallexample @noindent You must define the variable @code{MAKEINFO} in the Makefile. It should run the @code{makeinfo} program, which is part of the Texinfo distribution. Normally a GNU distribution comes with Info files, and that means the Info files are present in the source directory. Therefore, the Make rule for an info file should update it in the source directory. When users build the package, ordinarily Make will not update the Info files because they will already be up to date. @item dvi @itemx html @itemx pdf @itemx ps Generate documentation files in the given format. These targets should always exist, but any or all can be a no-op if the given output format cannot be generated. These targets should not be dependencies of the @code{all} target; the user must manually invoke them. Here's an example rule for generating DVI files from Texinfo: @smallexample dvi: foo.dvi foo.dvi: foo.texi chap1.texi chap2.texi $(TEXI2DVI) $(srcdir)/foo.texi @end smallexample @noindent You must define the variable @code{TEXI2DVI} in the Makefile. It should run the program @code{texi2dvi}, which is part of the Texinfo distribution. (@code{texi2dvi} uses @TeX{} to do the real work of formatting. @TeX{} is not distributed with Texinfo.) Alternatively, write only the dependencies, and allow GNU @code{make} to provide the command. Here's another example, this one for generating HTML from Texinfo: @smallexample html: foo.html foo.html: foo.texi chap1.texi chap2.texi $(TEXI2HTML) $(srcdir)/foo.texi @end smallexample @noindent Again, you would define the variable @code{TEXI2HTML} in the Makefile; for example, it might run @code{makeinfo --no-split --html} (@command{makeinfo} is part of the Texinfo distribution). @item dist Create a distribution tar file for this program. The tar file should be set up so that the file names in the tar file start with a subdirectory name which is the name of the package it is a distribution for. This name can include the version number. For example, the distribution tar file of GCC version 1.40 unpacks into a subdirectory named @file{gcc-1.40}. The easiest way to do this is to create a subdirectory appropriately named, use @code{ln} or @code{cp} to install the proper files in it, and then @code{tar} that subdirectory. Compress the tar file with @code{gzip}. For example, the actual distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}. It is ok to support other free compression formats as well. The @code{dist} target should explicitly depend on all non-source files that are in the distribution, to make sure they are up to date in the distribution. @ifset CODESTD @xref{Releases, , Making Releases}. @end ifset @ifclear CODESTD @xref{Releases, , Making Releases, standards, GNU Coding Standards}. @end ifclear @item check Perform self-tests (if any). The user must build the program before running the tests, but need not install the program; you should write the self-tests so that they work when the program is built but not installed. @end table The following targets are suggested as conventional names, for programs in which they are useful. @table @code @item installcheck Perform installation tests (if any). The user must build and install the program before running the tests. You should not assume that @file{$(bindir)} is in the search path. @item installdirs It's useful to add a target named @samp{installdirs} to create the directories where files are installed, and their parent directories. There is a script called @file{mkinstalldirs} which is convenient for this; you can find it in the Gnulib package. You can use a rule like this: @comment This has been carefully formatted to look decent in the Make manual. @comment Please be sure not to make it extend any further to the right.--roland @smallexample # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ $(libdir) $(infodir) \ $(mandir) @end smallexample @noindent or, if you wish to support @env{DESTDIR} (strongly encouraged), @smallexample # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs \ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ $(DESTDIR)$(mandir) @end smallexample This rule should not modify the directories where compilation is done. It should do nothing but create installation directories. @end table @node Install Command Categories @section Install Command Categories @cindex pre-installation commands @cindex post-installation commands When writing the @code{install} target, you must classify all the commands into three categories: normal ones, @dfn{pre-installation} commands and @dfn{post-installation} commands. Normal commands move files into their proper places, and set their modes. They may not alter any files except the ones that come entirely from the package they belong to. Pre-installation and post-installation commands may alter other files; in particular, they can edit global configuration files or data bases. Pre-installation commands are typically executed before the normal commands, and post-installation commands are typically run after the normal commands. The most common use for a post-installation command is to run @code{install-info}. This cannot be done with a normal command, since it alters a file (the Info directory) which does not come entirely and solely from the package being installed. It is a post-installation command because it needs to be done after the normal command which installs the package's Info files. Most programs don't need any pre-installation commands, but we have the feature just in case it is needed. To classify the commands in the @code{install} rule into these three categories, insert @dfn{category lines} among them. A category line specifies the category for the commands that follow. A category line consists of a tab and a reference to a special Make variable, plus an optional comment at the end. There are three variables you can use, one for each category; the variable name specifies the category. Category lines are no-ops in ordinary execution because these three Make variables are normally undefined (and you @emph{should not} define them in the makefile). Here are the three possible category lines, each with a comment that explains what it means: @smallexample $(PRE_INSTALL) # @r{Pre-install commands follow.} $(POST_INSTALL) # @r{Post-install commands follow.} $(NORMAL_INSTALL) # @r{Normal commands follow.} @end smallexample If you don't use a category line at the beginning of the @code{install} rule, all the commands are classified as normal until the first category line. If you don't use any category lines, all the commands are classified as normal. These are the category lines for @code{uninstall}: @smallexample $(PRE_UNINSTALL) # @r{Pre-uninstall commands follow.} $(POST_UNINSTALL) # @r{Post-uninstall commands follow.} $(NORMAL_UNINSTALL) # @r{Normal commands follow.} @end smallexample Typically, a pre-uninstall command would be used for deleting entries from the Info directory. If the @code{install} or @code{uninstall} target has any dependencies which act as subroutines of installation, then you should start @emph{each} dependency's commands with a category line, and start the main target's commands with a category line also. This way, you can ensure that each command is placed in the right category regardless of which of the dependencies actually run. Pre-installation and post-installation commands should not run any programs except for these: @example [ basename bash cat chgrp chmod chown cmp cp dd diff echo egrep expand expr false fgrep find getopt grep gunzip gzip hostname install install-info kill ldconfig ln ls md5sum mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee test touch true uname xargs yes @end example @cindex binary packages The reason for distinguishing the commands in this way is for the sake of making binary packages. Typically a binary package contains all the executables and other files that need to be installed, and has its own method of installing them---so it does not need to run the normal installation commands. But installing the binary package does need to execute the pre-installation and post-installation commands. Programs to build binary packages work by extracting the pre-installation and post-installation commands. Here is one way of extracting the pre-installation commands (the @option{-s} option to @command{make} is needed to silence messages about entering subdirectories): @smallexample make -s -n install -o all \ PRE_INSTALL=pre-install \ POST_INSTALL=post-install \ NORMAL_INSTALL=normal-install \ | gawk -f pre-install.awk @end smallexample @noindent where the file @file{pre-install.awk} could contain this: @smallexample $0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@} on @{print $0@} $0 ~ /^pre-install[ \t]*$/ @{on = 1@} @end smallexample �����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/manywarnings.texi�������������������������������������������������������0000664�0000000�0000000�00000004210�14110572173�0020451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node manywarnings @section manywarnings The @code{manywarnings} module allows you to enable as many GCC warnings as possible for your package. The purpose is to protect against introducing new code that triggers warnings that weren't already triggered by the existing code base. An example use of the module is as follows: @smallexample gl_MANYWARN_ALL_GCC([warnings]) # Set up the list of the pointless, undesired warnings. nw= nw="$nw -Winline" # It's OK to not inline. nw="$nw -Wstrict-overflow" # It's OK to optimize strictly. nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings. # Enable all GCC warnings not in this list. gl_MANYWARN_COMPLEMENT([warnings], [$warnings], [$nw]) for w in $warnings; do gl_WARN_ADD([$w]) done @end smallexample This module is meant to be used by developers who are not very experienced regarding the various GCC warning options. In the beginning you will set the list of undesired warnings (@samp{nw} in the example above) to empty, and compile the package with all possible warnings enabled. The GCC option @code{-fdiagnostics-show-option}, available in GCC 4.1 or newer, helps understanding which warnings originated from which option. Then you will go through the list of warnings. You will likely deactivate warnings that occur often and don't point to mistakes in the code, by adding them to the @samp{nw} variable, then reconfiguring and recompiling. When warnings point to real mistakes and bugs in the code, you will of course not disable them. There are also many GCC warning options which usually don't point to mistakes in the code; these warnings enforce a certain programming style. It is a project management decision whether you want your code to follow any of these styles. Note that some of these programming styles are conflicting. You cannot have them all; you have to choose among them. When a new version of GCC is released, you can add the new warning options that it introduces into the @code{gl_MANYWARN_ALL_GCC} macro (and submit your modification to the Gnulib maintainers :-)), and enjoy the benefits of the new warnings, while adding the undesired ones to the @samp{nw} variable. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/multithread.texi��������������������������������������������������������0000664�0000000�0000000�00000027700�14110572173�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Multithreading @chapter Multithreading Multithreading is a programming paradigm. In a multithreaded program, multiple threads execute concurrently (or quasi concurrently) at different places in the program. There are three motivations for using multithreading in a program: @itemize @bullet @item Exploiting CPU hardware with multiple execution units. Nowadays, many CPUs have 2 to 8 execution cores in a single chip. Additionally, often multiple CPU chips are combined in a single package. Thus, some CPU packages support 64 or 96 simultaneous threads of execution. @item Simplifying program architecture. When a program has to read from different file descriptors, network sockets, or event channels at the same time, the classical single-threaded architecture is to have a main loop which uses @code{select} or @code{poll} on all the descriptors and then dispatches according to from which descriptor input arrived. In a multi-threaded program, you allocate one thread for each descriptor, and these threads can be programmed and managed independently. @item Offloading work from signal handlers. A signal handler is not allowed to call @code{malloc}; therefore you are very limited in what you can do in a signal handler. But a signal handler can notify a thread, and the thread can then do the appropriate processing, as complex as it needs to be. @end itemize A multithreading API offers @itemize @bullet @item Primitives for creating threads, for waiting until threads are terminated, and for reaping their results. @item Primitives through which different threads can operate on the same data or use some data structures for communicating between the threads. These are called ``mutexes'' or ``locks''. @item Primitives for executing a certain (initialization) code at most once. @item Primitives for notifying one or more other threads. These are called wait queues or ``condition variables''. @item Primitives for allowing different threads to have different values for a variable. Such a variable is said to reside in ``thread-local storage'' or ``thread-specific storage''. @item Primitives for relinquishing control for some time and letting other threads go. @end itemize Note: Programs that achieve multithreading through OpenMP (cf. the gnulib module @samp{openmp}) don't create and manage their threads themselves. Nevertheless, they need to use mutexes/locks in many cases. @menu * Multithreading APIs:: * Choosing a multithreading API:: * POSIX multithreading:: * ISO C multithreading:: * Gnulib multithreading:: * Multithreading Optimizations:: @end menu @node Multithreading APIs @section The three multithreading APIs Three multithreading APIs are available to Gnulib users: @itemize @bullet @item POSIX multithreading, @item ISO C multithreading, @item Gnulib multithreading. @end itemize They are supported on all platforms that have multithreading in one form or the other. Currently, these are all platforms supported by Gnulib, except for Minix. The main differences are: @itemize @bullet @item The exit code of a thread is a pointer in the POSIX and Gnulib APIs, but only an @code{int} in the ISO C API. @item The POSIX API has additional facilities for detaching threads, setting the priority of a thread, assigning a thread to a certain set of processors, and much more. @item In the POSIX and ISO C APIs, most functions have a return code, and you are supposed to check the return code; even locking and unlocking a lock can fail. In the Gnulib API, many functions don't have a return code; if they cannot complete, the program aborts. This sounds harsh, but such aborts have not been reported in 12 years. @item In the ISO C API, the initialization of a statically allocated lock is clumsy: You have to initialize it through a once-only function. @end itemize @node Choosing a multithreading API @section Choosing the right multithreading API Here are guidelines for determining which multithreading API is best for your code. In programs that use advanced POSIX APIs, such as spin locks, detached threads (@code{pthread_detach}), signal blocking (@code{pthread_sigmask}), priorities (@code{pthread_setschedparam}), processor affinity (@code{pthread_setaffinity_np}), it is best to use the POSIX API. This is because you cannot convert an ISO C @code{thrd_t} or a Gnulib @code{gl_thread_t} to a POSIX @code{pthread_t}. In code that is shared with glibc, it is best to use the POSIX API as well. In libraries, it is best to use the Gnulib API. This is because it gives the person who builds the library an option @samp{--enable-threads=@{isoc,posix,windows@}}, that determines on which native multithreading API of the platform to rely. In other words, with this choice, you can minimize the amount of glue code that your library needs to contain. In the other cases, the POSIX API and the Gnulib API are equally well suited. The ISO C API is never the best choice, as of this writing (2020). @node POSIX multithreading @section The POSIX multithreading API The POSIX multithreading API is documented in POSIX @url{https://pubs.opengroup.org/onlinepubs/9699919799/}. To make use of POSIX multithreading, even on platforms that don't support it natively (most prominently, native Windows), use the following Gnulib modules: @multitable @columnfractions .75 .25 @headitem Purpose @tab Module @item For thread creation and management:@tie{} @tab @code{pthread-thread} @item For simple and recursive locks:@tie{} @tab @code{pthread-mutex} @item For read-write locks:@tie{} @tab @code{pthread-rwlock} @item For once-only execution:@tie{} @tab @code{pthread-once} @item For ``condition variables'' (wait queues):@tie{} @tab @code{pthread-cond} @item For thread-local storage:@tie{} @tab @code{pthread-tss} @item For relinquishing control:@tie{} @tab @code{sched_yield} @item For spin locks:@tie{} @tab @code{pthread-spin} @end multitable There is also a convenience module named @code{pthread} which depends on all of these (except @code{sched_yield}); so you don't need to enumerate these modules one by one. @node ISO C multithreading @section The ISO C multithreading API The ISO C multithreading API is documented in ISO C 11 @url{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf}. To make use of ISO C multithreading, even on platforms that don't support it or have severe bugs, use the following Gnulib modules: @multitable @columnfractions .85 .15 @headitem Purpose @tab Module @item For thread creation and management:@tie{} @tab @code{thrd} @item For simple locks, recursive locks, and read-write locks:@tie{} @tab @code{mtx} @item For once-only execution:@tie{} @tab @code{mtx} @item For ``condition variables'' (wait queues):@tie{} @tab @code{cnd} @item For thread-local storage:@tie{} @tab @code{tss} @end multitable There is also a convenience module named @code{threads} which depends on all of these; so you don't need to enumerate these modules one by one. @node Gnulib multithreading @section The Gnulib multithreading API The Gnulib multithreading API is documented in the respective include files: @itemize @item @code{<glthread/thread.h>} @item @code{<glthread/lock.h>} @item @code{<glthread/cond.h>} @item @code{<glthread/tls.h>} @item @code{<glthread/yield.h>} @end itemize To make use of Gnulib multithreading, use the following Gnulib modules: @multitable @columnfractions .85 .15 @headitem Purpose @tab Module @item For thread creation and management:@tie{} @tab @code{thread} @item For simple locks, recursive locks, and read-write locks:@tie{} @tab @code{lock} @item For once-only execution:@tie{} @tab @code{lock} @item For ``condition variables'' (wait queues):@tie{} @tab @code{cond} @item For thread-local storage:@tie{} @tab @code{tls} @item For relinquishing control:@tie{} @tab @code{yield} @end multitable The Gnulib multithreading supports a configure option @samp{--enable-threads=@{isoc,posix,windows@}}, that chooses the underlying thread implementation. Currently (2020): @itemize @bullet @item @code{--enable-threads=posix} is supported and is the best choice on all platforms except for native Windows. It may also work, to a limited extent, on mingw with the @code{winpthreads} library, but is not recommended there. @item @code{--enable-threads=windows} is supported and is the best choice on native Windows platforms (mingw and MSVC). @item @code{--enable-threads=isoc} is supported on all platforms that have the ISO C multithreading API. However, @code{--enable-threads=posix} is always a better choice. @end itemize @node Multithreading Optimizations @section Optimizations of multithreaded code Despite all the optimizations of multithreading primitives that have been implemented over the years --- from @url{https://en.wikipedia.org/wiki/Compare-and-swap, atomic operations in hardware}, over @url{https://en.wikipedia.org/wiki/Futex, futexes} and @url{https://www.efficios.com/blog/2019/02/08/linux-restartable-sequences/, restartable sequences} in the Linux kernel, to lock elision @url{https://lwn.net/Articles/534758/, [1]} @url{https://www.gnu.org/software/libc/manual/html_node/Elision-Tunables.html, [2]}) --- single-threaded programs can still profit performance-wise from the assertion that they are single-threaded. Gnulib defines four facilities that help optimizing for the single-threaded case. @itemize @bullet @item The Gnulib multithreading API, when used on glibc @leq{} 2.32 and *BSD systems, uses weak symbols to detect whether the program is linked with @code{libpthread}. If not, the program has no way to create additional threads and must therefore be single-threaded. This optimization applies to all the Gnulib multithreading API (locks, thread-local storage, and more). @item The @code{thread-optim} module, on glibc @geq{} 2.32 systems, allows your code to skip locking between threads (regardless which of the three multithreading APIs you use). You need extra code for this: include the @code{"thread-optim.h"} header file, and use the macro @code{gl_multithreaded} like this: @smallexample bool mt = gl_multithreaded (); if (mt) gl_lock_lock (some_lock); ... if (mt) gl_lock_unlock (some_lock); @end smallexample @item You may use the @code{unlocked-io} module if you want the @code{FILE} stream functions @code{getc}, @code{putc}, etc.@: to use unlocked I/O if available, throughout the package. Unlocked I/O can improve performance, sometimes dramatically. But unlocked I/O is safe only in single-threaded programs, as well as in multithreaded programs for which you can guarantee that every @code{FILE} stream, including @code{stdin}, @code{stdout}, @code{stderr}, is used only in a single thread. You need extra code for this optimization to be effective: include the @code{"unlocked-io.h"} header file. Some Gnulib modules that do operations on @code{FILE} streams have these preparations already included. @item You may define the C macro @code{GNULIB_REGEX_SINGLE_THREAD}, if all the programs in your package invoke the functions of the @code{regex} module only from a single thread. @item You may define the C macro @code{GNULIB_MBRTOWC_SINGLE_THREAD}, if all the programs in your package invoke the functions @code{mbrtowc}, @code{mbrtoc32}, and the functions of the @code{regex} module only from a single thread. (The @code{regex} module uses @code{mbrtowc} under the hood.) @item You may define the C macro @code{GNULIB_WCHAR_SINGLE_LOCALE}, if all the programs in your package set the locale early and @itemize @item don't change the locale after it has been initialized, and @item don't call locale sensitive functions (@code{mbrtowc}, @code{wcwidth}, etc.@:) before the locale has been initialized. @end itemize This macro optimizes the functions @code{mbrtowc}, @code{mbrtoc32}, and @code{wcwidth}. @item You may define the C macro @code{GNULIB_GETUSERSHELL_SINGLE_THREAD}, if all the programs in your package invoke the functions @code{setusershell}, @code{getusershell}, @code{endusershell} only from a single thread. @item You may define the C macro @code{GNULIB_EXCLUDE_SINGLE_THREAD}, if all the programs in your package invoke the functions of the @code{exclude} module only from a single thread. @end itemize ����������������������������������������������������������������gnulib-20210822~d383792/doc/namespace.texi����������������������������������������������������������0000664�0000000�0000000�00000006217�14110572173�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node A C++ namespace for gnulib @section A C++ namespace for gnulib The function definitions provided by Gnulib (@code{.c} code) are meant to be compiled by a C compiler. The header files (@code{.h} files), on the other hand, can be used in either C or C++. By default, when used in a C++ compilation unit, the @code{.h} files declare the same symbols and overrides as in C mode, except that functions defined by Gnulib or by the system are declared as @samp{extern "C"}. It is also possible to indicate to Gnulib to provide many of its symbols in a dedicated C++ namespace. If you define the macro @code{GNULIB_NAMESPACE} to an identifier, many functions will be defined in the namespace specified by the identifier instead of the global namespace. For example, after you have defined @smallexample #define GNULIB_NAMESPACE gnulib @end smallexample @noindent at the beginning of a compilation unit, Gnulib's @code{<fcntl.h>} header file will make available the @code{open} function as @code{gnulib::open}. The symbol @code{open} will still refer to the system's @code{open} function, with its platform specific bugs and limitations. The symbols provided in the Gnulib namespace are those for which the corresponding header file contains a @code{_GL_CXXALIAS_RPL} or @code{_GL_CXXALIAS_SYS} macro invocation. The benefits of this namespace mode are: @itemize @item Gnulib defines fewer symbols as preprocessor macros. For example, on a platform where @code{open} has to be overridden, Gnulib normally does @code{#define open rpl_open}. If your package has a class with a member @code{open}, for example a class @code{foo} with a method @code{foo::open}, then if you define this member in a compilation unit that includes @code{<fcntl.h>} and use it in a compilation unit that does not include @code{<fcntl.h>}, or vice versa, you will get a link error. Worse: You will not notice this problem on the platform where the system's @code{open} function works fine. This problem goes away in namespace mode. @item It provides a safety check whether the set of modules your package requests from Gnulib is sufficient. For example, if you use the function @code{gnulib::open} in your code, and you forgot to request the module @samp{open} from Gnulib, you will get a compilation error (regardless of the platform). @end itemize The drawback of this namespace mode is that the system provided symbols in the global namespace are still present, even when they contain bugs that Gnulib fixes. For example, if you call @code{open (...)} in your code, it will invoke the possibly buggy system function, even if you have requested the module @samp{open} from gnulib-tool. You can turn on the namespace mode in some compilation units and keep it turned off in others. This can be useful if your package consists of an application layer that does not need to invoke POSIX functions and an operating system interface layer that contains all the OS function calls. In such a situation, you will want to turn on the namespace mode for the application layer---to avoid many preprocessor macro definitions---and turn it off for the OS interface layer---to avoid the drawback of the namespace mode, mentioned above. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/noreturn.texi�����������������������������������������������������������0000664�0000000�0000000�00000004664�14110572173�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU noreturn, stdnoreturn modules documentation @c Copyright (C) 2019--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @node Non-returning Functions @section Non-returning Functions @cindex @code{_Noreturn} @cindex @code{noreturn} @cindex @code{stdnoreturn} A "non-returning" function is a function which cannot return normally. It can transfer control only through @code{longjmp()}, @code{throw} (in C++), or similar mechanisms. The most prominent function of this class is the @code{abort} function. Non-returning functions are declared with a @code{void} return type. It helps the compiler's ability to emit sensible warnings, following data-flow analysis, to declare which functions are non-returning. To decorate function declarations and function definitions, you can use the @code{_Noreturn} keyword. No modules are needed, as Gnulib arranges for @code{<config.h>} to define @code{_Noreturn} to an appropriate replacement on platforms lacking it. Gnulib has two modules that support such a declaration: @itemize @bullet @item The @samp{noreturn} module. It provides a way to put this declaration at function declarations, at function definitions, and in function pointer types. The identifiers to use are: @itemize - @item @code{_GL_NORETURN_FUNC} for use in function declarations and function definitions. @item @code{_GL_NORETURN_FUNCPTR} for use on function pointers. @end itemize @noindent The include file is @code{<noreturn.h>}. @item The @samp{stdnoreturn} module. This can improve readability by letting you use @code{noreturn} instead of @code{_Noreturn}; unfortunately, @code{noreturn} is a no-op on some platforms even though @code{_Noreturn} works on them. The include file is @code{<stdnoreturn.h>}. @end itemize Which of the two modules to use? If the non-returning functions you have to declare are unlikely to be accessed through function pointers, you should use module @code{stdnoreturn}; otherwise the module @code{noreturn} provides for better data-flow analysis and thus for better warnings. For a detailed description of the @code{stdnoreturn} module, see @ref{stdnoreturn.h}. ����������������������������������������������������������������������������gnulib-20210822~d383792/doc/obsolete.texi�����������������������������������������������������������0000664�0000000�0000000�00000001444�14110572173�0017556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Obsolete modules @section Obsolete modules @cindex Obsolete modules Modules can be marked obsolete. This means that the problems they fix don't occur any more on the platforms that are reasonable porting targets now. @code{gnulib-tool} warns when obsolete modules are mentioned on the command line, and by default ignores dependencies from modules to obsolete modules. When you pass the option @code{--with-obsolete} to @code{gnulib-tool}, dependencies to obsolete modules will be included, however, unless blocked through an @code{--avoid} option. This option is useful if your package should be portable even to very old platforms. In order to mark a module obsolete, you need to add this to the module description: @example Status: obsolete Notice: This module is obsolete. @end example ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/out-of-memory.texi������������������������������������������������������0000664�0000000�0000000�00000003062�14110572173�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Out of memory handling @section Out of memory handling @cindex Out of Memory handling @cindex Memory allocation failure The gnulib API does not have a standard error code for the out of memory error condition. Instead of adding a non-standard error code, gnulib has chosen to adopt a different strategy. Out of memory handling happens in rare situations, but performing the out of memory error handling after almost all API function invocations pollute your source code and might make it harder to spot more serious problems. The strategy chosen improves code readability and robustness. @cindex Aborting execution For most applications, aborting the application with an error message when the out of memory situation occurs is the best that can be wished for. This is how the library behaves by default (using the @samp{xalloc-die} module). @vindex xalloc_die However, we realize that some applications may not want to abort execution in any situation. Gnulib supports a hook to let the application regain control and perform its own cleanups when an out of memory situation has occurred. The application can define a function (having a @code{void} prototype, i.e., no return value and no parameters) and set the library variable @code{xalloc_die} to that function. The variable should be declared as follows. @example extern void (*xalloc_die) (void); @end example Gnulib will invoke this function if an out of memory error occurs. Note that the function should not return. Of course, care must be taken to not allocate more memory, as that will likely also fail. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/parse-datetime.texi�����������������������������������������������������0000664�0000000�0000000�00000056532�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU date syntax documentation @c Copyright (C) 1994--2006, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @node Date input formats @chapter Date input formats @cindex date input formats @findex parse_datetime First, a quote: @quotation Our units of temporal measurement, from seconds on up to months, are so complicated, asymmetrical and disjunctive so as to make coherent mental reckoning in time all but impossible. Indeed, had some tyrannical god contrived to enslave our minds to time, to make it all but impossible for us to escape subjection to sodden routines and unpleasant surprises, he could hardly have done better than handing down our present system. It is like a set of trapezoidal building blocks, with no vertical or horizontal surfaces, like a language in which the simplest thought demands ornate constructions, useless particles and lengthy circumlocutions. Unlike the more successful patterns of language and science, which enable us to face experience boldly or at least level-headedly, our system of temporal calculation silently and persistently encourages our terror of time. @dots{} It is as though architects had to measure length in feet, width in meters and height in ells; as though basic instruction manuals demanded a knowledge of five different languages. It is no wonder then that we often look into our own immediate past or future, last Tuesday or a week from Sunday, with feelings of helpless confusion. @dots{} ---Robert Grudin, @cite{Time and the Art of Living}. @end quotation This section describes the textual date representations that GNU programs accept. These are the strings you, as a user, can supply as arguments to the various programs. The C interface (via the @code{parse_datetime} function) is not described here. @menu * General date syntax:: Common rules * Calendar date items:: 21 Jul 2020 * Time of day items:: 9:20pm * Time zone items:: UTC, -0700, +0900, @dots{} * Combined date and time of day items:: 2020-07-21T20:02:00,000000-0400 * Day of week items:: Monday and others * Relative items in date strings:: next tuesday, 2 years ago * Pure numbers in date strings:: 20200721, 1440 * Seconds since the Epoch:: @@1595289600 * Specifying time zone rules:: TZ="America/New_York", TZ="UTC0" * Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al. @end menu @node General date syntax @section General date syntax @cindex general date syntax @cindex items in date strings A @dfn{date} is a string, possibly empty, containing many items separated by whitespace. The whitespace may be omitted when no ambiguity arises. The empty string means the beginning of today (i.e., midnight). Order of the items is immaterial. A date string may contain many flavors of items: @itemize @bullet @item calendar date items @item time of day items @item time zone items @item combined date and time of day items @item day of the week items @item relative items @item pure numbers. @end itemize @noindent We describe each of these item types in turn, below. @cindex numbers, written-out @cindex ordinal numbers @findex first @r{in date strings} @findex next @r{in date strings} @findex last @r{in date strings} A few ordinal numbers may be written out in words in some contexts. This is most useful for specifying day of the week items or relative items (see below). Among the most commonly used ordinal numbers, the word @samp{last} stands for @math{-1}, @samp{this} stands for 0, and @samp{first} and @samp{next} both stand for 1. Because the word @samp{second} stands for the unit of time there is no way to write the ordinal number 2, but for convenience @samp{third} stands for 3, @samp{fourth} for 4, @samp{fifth} for 5, @samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8, @samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and @samp{twelfth} for 12. @cindex months, written-out When a month is written this way, it is still considered to be written numerically, instead of being ``spelled in full''; this changes the allowed strings. @cindex language, in dates In the current implementation, only English is supported for words and abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first}, @samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}. @cindex language, in dates @cindex time zone item The output of the @command{date} command is not always acceptable as a date string, not only because of the language problem, but also because there is no standard meaning for time zone items like @samp{IST}@. When using @command{date} to generate a date string intended to be parsed later, specify a date format that is independent of language and that does not use time zone items other than @samp{UTC} and @samp{Z}@. Here are some ways to do this: @example $ LC_ALL=C TZ=UTC0 date Tue Jul 21 23:00:37 UTC 2020 $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' 2020-07-21 23:00:37Z $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. 2020-07-21 19:00:37.692722128-04:00 $ date --rfc-2822 # a GNU extension Tue, 21 Jul 2020 19:00:37 -0400 $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. 2020-07-21 19:00:37 -0400 $ date +'@@%s.%N' # %s and %N are GNU extensions. @@1595372437.692722128 @end example @cindex case, ignored in dates @cindex comments, in dates Alphabetic case is completely ignored in dates. Comments may be introduced between round parentheses, as long as included parentheses are properly nested. Hyphens not followed by a digit are currently ignored. Leading zeros on numbers are ignored. @cindex leap seconds Invalid dates like @samp{2019-02-29} or times like @samp{24:00} are rejected. In the typical case of a host that does not support leap seconds, a time like @samp{23:59:60} is rejected even if it corresponds to a valid leap second. @node Calendar date items @section Calendar date items @cindex calendar date item A @dfn{calendar date item} specifies a day of the year. It is specified differently, depending on whether the month is specified numerically or literally. All these strings specify the same calendar date: @example 2020-07-20 # ISO 8601. 20-7-20 # Assume 19xx for 69 through 99, # 20xx for 00 through 68 (not recommended). 7/20/2020 # Common U.S. writing. 20 July 2020 20 Jul 2020 # Three-letter abbreviations always allowed. Jul 20, 2020 20-jul-2020 20jul2020 @end example The year can also be omitted. In this case, the last specified year is used, or the current year if none. For example: @example 7/20 jul 20 @end example Here are the rules. @cindex ISO 8601 date format @cindex date format, ISO 8601 For numeric months, the ISO 8601 format @samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is any positive number, @var{month} is a number between 01 and 12, and @var{day} is a number between 01 and 31. A leading zero must be present if a number is less than ten. If @var{year} is 68 or smaller, then 2000 is added to it; otherwise, if @var{year} is less than 100, then 1900 is added to it. The construct @samp{@var{month}/@var{day}/@var{year}}, popular in the United States, is accepted. Also @samp{@var{month}/@var{day}}, omitting the year. @cindex month names in date strings @cindex abbreviations for months Literal months may be spelled out in full: @samp{January}, @samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June}, @samp{July}, @samp{August}, @samp{September}, @samp{October}, @samp{November} or @samp{December}. Literal months may be abbreviated to their first three letters, possibly followed by an abbreviating dot. It is also permitted to write @samp{Sept} instead of @samp{September}. When months are written literally, the calendar date may be given as any of the following: @example @var{day} @var{month} @var{year} @var{day} @var{month} @var{month} @var{day} @var{year} @var{day}-@var{month}-@var{year} @end example Or, omitting the year: @example @var{month} @var{day} @end example @node Time of day items @section Time of day items @cindex time of day item A @dfn{time of day item} in date strings specifies the time on a given day. Here are some examples, all of which represent the same time: @example 20:02:00.000000 20:02 8:02pm 20:02-0500 # In EST (U.S. Eastern Standard Time). @end example @cindex leap seconds More generally, the time of day may be given as @samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is a number between 0 and 23, @var{minute} is a number between 0 and 59, and @var{second} is a number between 0 and 59 possibly followed by @samp{.} or @samp{,} and a fraction containing one or more digits. Alternatively, @samp{:@var{second}} can be omitted, in which case it is taken to be zero. On the rare hosts that support leap seconds, @var{second} may be 60. @findex am @r{in date strings} @findex pm @r{in date strings} @findex midnight @r{in date strings} @findex noon @r{in date strings} If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.} or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and @samp{:@var{minute}} may be omitted (taken to be zero). @samp{am} indicates the first half of the day, @samp{pm} indicates the second half of the day. In this notation, 12 is the predecessor of 1: midnight is @samp{12am} while noon is @samp{12pm}. (This is the zero-oriented interpretation of @samp{12am} and @samp{12pm}, as opposed to the old tradition derived from Latin which uses @samp{12m} for noon and @samp{12pm} for midnight.) @cindex time zone correction @cindex minutes, time zone correction by The time may alternatively be followed by a time zone correction, expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+} or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number of zone minutes. The zone minutes term, @var{mm}, may be omitted, in which case the one- or two-digit correction is interpreted as a number of hours. You can also separate @var{hh} from @var{mm} with a colon. When a time zone correction is given this way, it forces interpretation of the time relative to Coordinated Universal Time (UTC), overriding any previous specification for the time zone or the local time zone. For example, @samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours ahead of UTC (e.g., India). This is the best way to specify a time zone correction by fractional parts of an hour. The maximum zone correction is 24 hours. Either @samp{am}/@samp{pm} or a time zone correction may be specified, but not both. @node Time zone items @section Time zone items @cindex time zone item A @dfn{time zone item} specifies an international time zone, indicated by a small set of letters, e.g., @samp{UTC} or @samp{Z} for Coordinated Universal Time. Any included periods are ignored. By following a non-daylight-saving time zone by the string @samp{DST} in a separate word (that is, separated by some white space), the corresponding daylight saving time zone may be specified. Alternatively, a non-daylight-saving time zone can be followed by a time zone correction, to add the two values. This is normally done only for @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to @samp{+05:30}. Time zone items other than @samp{UTC} and @samp{Z} are obsolescent and are not recommended, because they are ambiguous; for example, @samp{EST} has a different meaning in Australia than in the United States, and @samp{A} has different meaning as a military time zone than as an obsolescent RFC 822 time zone. Instead, it's better to use unambiguous numeric time zone corrections like @samp{-0500}, as described in the previous section. If neither a time zone item nor a time zone correction is supplied, timestamps are interpreted using the rules of the default time zone (@pxref{Specifying time zone rules}). @node Combined date and time of day items @section Combined date and time of day items @cindex combined date and time of day item @cindex ISO 8601 date and time of day format @cindex date and time of day format, ISO 8601 The ISO 8601 date and time of day extended format consists of an ISO 8601 date, a @samp{T} character separator, and an ISO 8601 time of day. This format is also recognized if the @samp{T} is replaced by a space. In this format, the time of day should use 24-hour notation. Fractional seconds are allowed, with either comma or period preceding the fraction. ISO 8601 fractional minutes and hours are not supported. Typically, hosts support nanosecond timestamp resolution; excess precision is silently discarded. Here are some examples: @example 2012-09-24T20:02:00.052-05:00 2012-12-31T23:59:59,999999999+11:00 1970-01-01 00:00Z @end example @node Day of week items @section Day of week items @cindex day of week item The explicit mention of a day of the week will forward the date (only if necessary) to reach that day of the week in the future. Days of the week may be spelled out in full: @samp{Sunday}, @samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday}, @samp{Friday} or @samp{Saturday}. Days may be abbreviated to their first three letters, optionally followed by a period. The special abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for @samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are also allowed. @findex next @var{day} @findex last @var{day} A number may precede a day of the week item to move forward supplementary weeks. It is best used in expression like @samp{third monday}. In this context, @samp{last @var{day}} or @samp{next @var{day}} is also acceptable; they move one week before or after the day that @var{day} by itself would represent. A comma following a day of the week item is ignored. @node Relative items in date strings @section Relative items in date strings @cindex relative items in date strings @cindex displacement of dates @dfn{Relative items} adjust a date (or the current date if none) forward or backward. The effects of relative items accumulate. Here are some examples: @example 1 year 1 year ago 3 years 2 days @end example @findex year @r{in date strings} @findex month @r{in date strings} @findex fortnight @r{in date strings} @findex week @r{in date strings} @findex day @r{in date strings} @findex hour @r{in date strings} @findex minute @r{in date strings} The unit of time displacement may be selected by the string @samp{year} or @samp{month} for moving by whole years or months. These are fuzzy units, as years and months are not all of equal duration. More precise units are @samp{fortnight} which is worth 14 days, @samp{week} worth 7 days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes, @samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or @samp{sec} worth one second. An @samp{s} suffix on these units is accepted and ignored. @findex ago @r{in date strings} The unit of time may be preceded by a multiplier, given as an optionally signed number. Unsigned numbers are taken as positively signed. No number at all implies 1 for a multiplier. Following a relative item by the string @samp{ago} is equivalent to preceding the unit by a multiplier with value @math{-1}. @findex day @r{in date strings} @findex tomorrow @r{in date strings} @findex yesterday @r{in date strings} The string @samp{tomorrow} is worth one day in the future (equivalent to @samp{day}), the string @samp{yesterday} is worth one day in the past (equivalent to @samp{day ago}). @findex now @r{in date strings} @findex today @r{in date strings} @findex this @r{in date strings} The strings @samp{now} or @samp{today} are relative items corresponding to zero-valued time displacement, these strings come from the fact a zero-valued time displacement represents the current time when not otherwise changed by previous items. They may be used to stress other items, like in @samp{12:00 today}. The string @samp{this} also has the meaning of a zero-valued time displacement, but is preferred in date strings like @samp{this thursday}. When a relative item causes the resulting date to cross a boundary where the clocks were adjusted, typically for daylight saving time, the resulting date and time are adjusted accordingly. The fuzz in units can cause problems with relative items. For example, @samp{2020-07-31 -1 month} might evaluate to 2020-07-01, because 2020-06-31 is an invalid date. To determine the previous month more reliably, you can ask for the month before the 15th of the current month. For example: @example $ date -R Thu, 31 Jul 2020 13:02:39 -0400 $ date --date='-1 month' +'Last month was %B?' Last month was July? $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' Last month was June! @end example Also, take care when manipulating dates around clock changes such as daylight saving leaps. In a few cases these have added or subtracted as much as 24 hours from the clock, so it is often wise to adopt universal time by setting the @env{TZ} environment variable to @samp{UTC0} before embarking on calendrical calculations. @node Pure numbers in date strings @section Pure numbers in date strings @cindex pure numbers in date strings The precise interpretation of a pure decimal number depends on the context in the date string. If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no other calendar date item (@pxref{Calendar date items}) appears before it in the date string, then @var{yyyy} is read as the year, @var{mm} as the month number and @var{dd} as the day of the month, for the specified calendar date. If the decimal number is of the form @var{hh}@var{mm} and no other time of day item appears before it in the date string, then @var{hh} is read as the hour of the day and @var{mm} as the minute of the hour, for the specified time of day. @var{mm} can also be omitted. If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year. @node Seconds since the Epoch @section Seconds since the Epoch If you precede a number with @samp{@@}, it represents an internal timestamp as a count of seconds. The number can contain an internal decimal point (either @samp{.} or @samp{,}); any excess precision not supported by the internal representation is truncated toward minus infinity. Such a number cannot be combined with any other date item, as it specifies a complete timestamp. @cindex beginning of time, for POSIX @cindex Epoch, for POSIX Internally, computer times are represented as a count of seconds since an Epoch---a well-defined point of time. On GNU and POSIX systems, the Epoch is 1970-01-01 00:00:00 UTC, so @samp{@@0} represents this time, @samp{@@1} represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other POSIX-compliant systems support such times as an extension to POSIX, using negative counts, so that @samp{@@-1} represents 1969-12-31 23:59:59 UTC. Most modern systems count seconds with 64-bit two's-complement integers of seconds with nanosecond subcounts, which is a range that includes the known lifetime of the universe with nanosecond resolution. Some obsolescent systems count seconds with 32-bit two's-complement integers and can represent times from 1901-12-13 20:45:52 through 2038-01-19 03:14:07 UTC@. A few systems sport other time ranges. @cindex leap seconds On most hosts, these counts ignore the presence of leap seconds. For example, on most hosts @samp{@@1483228799} represents 2016-12-31 23:59:59 UTC, @samp{@@1483228800} represents 2017-01-01 00:00:00 UTC, and there is no way to represent the intervening leap second 2016-12-31 23:59:60 UTC. @node Specifying time zone rules @section Specifying time zone rules @vindex TZ Normally, dates are interpreted using the rules of the current time zone, which in turn are specified by the @env{TZ} environment variable, or by a system default if @env{TZ} is not set. To specify a different set of default time zone rules that apply just to one date, start the date with a string of the form @samp{TZ="@var{rule}"}. The two quote characters (@samp{"}) must be present in the date, and any quotes or backslashes within @var{rule} must be escaped by a backslash. For example, with the GNU @command{date} command you can answer the question ``What time is it in New York when a Paris clock shows 6:30am on October 31, 2019?'' by using a date beginning with @samp{TZ="Europe/Paris"} as shown in the following shell transcript: @example $ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2019-10-31 06:30' Sun Oct 31 01:30:00 EDT 2019 @end example In this example, the @option{--date} operand begins with its own @env{TZ} setting, so the rest of that operand is processed according to @samp{Europe/Paris} rules, treating the string @samp{2019-10-31 06:30} as if it were in Paris. However, since the output of the @command{date} command is processed according to the overall time zone rules, it uses New York time. (Paris was normally six hours ahead of New York in 2019, but this example refers to a brief Halloween period when the gap was five hours.) A @env{TZ} value is a rule that typically names a location in the @uref{https://www.iana.org/time-zones, @samp{tz} database}. A recent catalog of location names appears in the @uref{https://twiki.org/cgi-bin/xtra/tzdatepick.html, TWiki Date and Time Gateway}. A few non-GNU hosts require a colon before a location name in a @env{TZ} setting, e.g., @samp{TZ=":America/New_York"}. The @samp{tz} database includes a wide variety of locations ranging from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but if you are at sea and have your own private time zone, or if you are using a non-GNU host that does not support the @samp{tz} database, you may need to use a POSIX rule instead. Simple POSIX rules like @samp{UTC0} specify a time zone without daylight saving time; other rules can specify simple daylight saving regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ}, libc, The GNU C Library}. @node Authors of parse_datetime @section Authors of @code{parse_datetime} @c the anchor keeps the old node name, to try to avoid breaking links @anchor{Authors of get_date} @cindex authors of @code{parse_datetime} @cindex Bellovin, Steven M. @cindex Salz, Rich @cindex Berets, Jim @cindex MacKenzie, David @cindex Meyering, Jim @cindex Eggert, Paul @code{parse_datetime} started life as @code{getdate}, as originally implemented by Steven M. Bellovin (@email{smb@@research.att.com}) while at the University of North Carolina at Chapel Hill. The code was later tweaked by a couple of people on Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com}) and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various revisions for the GNU system were made by David MacKenzie, Jim Meyering, Paul Eggert and others, including renaming it to @code{get_date} to avoid a conflict with the alternative Posix function @code{getdate}, and a later rename to @code{parse_datetime}. The Posix function @code{getdate} can parse more locale-specific dates using @code{strptime}, but relies on an environment variable and external file, and lacks the thread-safety of @code{parse_datetime}. @cindex Pinard, F. @cindex Berry, K. This chapter was originally produced by Fran@,{c}ois Pinard (@email{pinard@@iro.umontreal.ca}) from the @file{parse_datetime.y} source code, and then edited by K. Berry (@email{kb@@cs.umb.edu}). ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/����������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0021104�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/bcmp.texi�������������������������������������������0000664�0000000�0000000�00000000710�14110572173�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bcmp @section @code{bcmp} @findex bcmp POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/bcmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @item This function is marked as ``legacy'' in POSIX@. Better use @code{memcmp} instead. @end itemize ��������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/bcopy.texi������������������������������������������0000664�0000000�0000000�00000000740�14110572173�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bcopy @section @code{bcopy} @findex bcopy POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/bcopy.html} Gnulib module: bcopy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is marked as ``legacy'' in POSIX@. Better use @code{memcpy} or @code{memmove} instead. @end itemize ��������������������������������gnulib-20210822~d383792/doc/pastposix-functions/bsd_signal.texi�������������������������������������0000664�0000000�0000000�00000000653�14110572173�0024110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bsd_signal @section @code{bsd_signal} @findex bsd_signal POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/bsd_signal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 7.1, Cygwin 2.9, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/bzero.texi������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bzero @section @code{bzero} @findex bzero POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @item This function is marked as ``legacy'' in POSIX@. Better use @code{memset} instead. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/ecvt.texi�������������������������������������������0000664�0000000�0000000�00000001026�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ecvt @section @code{ecvt} @findex ecvt POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/ecvt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 9.0, Android 9.0. @item This function is not declared on some platforms: Cygwin 2.9. @item This function is marked as ``legacy'' in POSIX@. Better use @code{sprintf} instead. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/fcvt.texi�������������������������������������������0000664�0000000�0000000�00000001026�14110572173�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcvt @section @code{fcvt} @findex fcvt POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/fcvt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 9.0, Android 9.0. @item This function is not declared on some platforms: Cygwin 2.9. @item This function is marked as ``legacy'' in POSIX@. Better use @code{sprintf} instead. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/ftime.texi������������������������������������������0000664�0000000�0000000�00000001354�14110572173�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftime @section @code{ftime} @findex ftime POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/ftime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Android 9.0. @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @item This function is marked as ``legacy'' in POSIX@. Better use @code{gettimeofday} or @code{clock_gettime} instead, and use @code{ftime} only as a fallback for portability to Windows platforms. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/gcvt.texi�������������������������������������������0000664�0000000�0000000�00000001042�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gcvt @section @code{gcvt} @findex gcvt POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/gcvt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, Android 9.0. @item This function is not declared on some platforms: Cygwin 2.9. @item This function is marked as ``legacy'' in POSIX@. Better use @code{sprintf} instead. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/getcontext.texi�������������������������������������0000664�0000000�0000000�00000000641�14110572173�0024164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getcontext @section @code{getcontext} @findex getcontext POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/getcontext.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/gethostbyaddr.texi����������������������������������0000664�0000000�0000000�00000000605�14110572173�0024643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostbyaddr @section @code{gethostbyaddr} @findex gethostbyaddr POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/gethostbyaddr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/gethostbyname.texi����������������������������������0000664�0000000�0000000�00000000605�14110572173�0024651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostbyname @section @code{gethostbyname} @findex gethostbyname POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/gethostbyname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/getwd.texi������������������������������������������0000664�0000000�0000000�00000001231�14110572173�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwd @section @code{getwd} @findex getwd POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/getwd.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @item The size of the buffer required for this function is not a compile-time constant. Also, the function truncates a result that would be larger than the minimum buffer size. For these reasons, this function is marked as ``legacy'' in POSIX@. Better use the @code{getcwd} function instead. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/h_errno.texi����������������������������������������0000664�0000000�0000000�00000000634�14110572173�0023436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node h_errno @section @code{h_errno} @findex h_errno POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/h_errno.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.34, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/index.texi������������������������������������������0000664�0000000�0000000�00000001007�14110572173�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@ifhtml @node _index @end ifhtml @ifnothtml @node index @end ifnothtml @section @code{index} @findex index POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/index.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @item This function is marked as ``legacy'' in POSIX@. Better use @code{strchr} instead. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/makecontext.texi������������������������������������0000664�0000000�0000000�00000000645�14110572173�0024326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node makecontext @section @code{makecontext} @findex makecontext POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/mktemp.texi�����������������������������������������0000664�0000000�0000000�00000000733�14110572173�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mktemp @section @code{mktemp} @findex mktemp POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/mktemp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is not appropriate for creating temporary files. (It has security risks.) Therefore it is marked as ``legacy'' in POSIX@. Better use @code{mkstemp} instead. @end itemize �������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/pthread_attr_getstackaddr.texi����������������������0000664�0000000�0000000�00000000754�14110572173�0027206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstackaddr @section @code{pthread_attr_getstackaddr} @findex pthread_attr_getstackaddr POSIX specification:@inlinefmt{tex,@*} @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_attr_getstackaddr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������gnulib-20210822~d383792/doc/pastposix-functions/pthread_attr_setstackaddr.texi����������������������0000664�0000000�0000000�00000000754�14110572173�0027222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstackaddr @section @code{pthread_attr_setstackaddr} @findex pthread_attr_setstackaddr POSIX specification:@inlinefmt{tex,@*} @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_attr_setstackaddr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������gnulib-20210822~d383792/doc/pastposix-functions/rindex.texi�����������������������������������������0000664�0000000�0000000�00000000721�14110572173�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rindex @section @code{rindex} @findex rindex POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/rindex.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @item This function is marked as ``legacy'' in POSIX@. Better use @code{strrchr} instead. @end itemize �����������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/scalb.texi������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0023064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalb @section @code{scalb} @findex scalb POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/scalb.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/setcontext.texi�������������������������������������0000664�0000000�0000000�00000001142�14110572173�0024175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setcontext @section @code{setcontext} @findex setcontext POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/setcontext.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @item The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/swapcontext.texi������������������������������������0000664�0000000�0000000�00000000645�14110572173�0024363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swapcontext @section @code{swapcontext} @findex swapcontext POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/swapcontext.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/ualarm.texi�����������������������������������������0000664�0000000�0000000�00000000566�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ualarm @section @code{ualarm} @findex ualarm POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/ualarm.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/usleep.texi�����������������������������������������0000664�0000000�0000000�00000001122�14110572173�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node usleep @section @code{usleep} @findex usleep POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html} Gnulib module: usleep Portability problems fixed by Gnulib: @itemize @item On some systems, @code{usleep} rejects attempts to sleep longer than 1 second, as allowed by POSIX: NetBSD 9.0, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item According to POSIX, the @code{usleep} function may interfere with the program's use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms, it may. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/vfork.texi������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfork @section @code{vfork} @findex vfork POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/vfork.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 6.5, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/pastposix-functions/wcswcs.texi�����������������������������������������0000664�0000000�0000000�00000001172�14110572173�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcswcs @section @code{wcswcs} @findex wcswcs POSIX specification: @url{https://pubs.opengroup.org/onlinepubs/009695399/functions/wcswcs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item This function is marked as ``legacy'' in POSIX@. Better use @code{wcsstr} instead. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/��������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020214�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/FD_CLR.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_CLR @section @code{FD_CLR} @findex FD_CLR POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/FD_CLR.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/FD_ISSET.texi�������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_ISSET @section @code{FD_ISSET} @findex FD_ISSET POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/FD_ISSET.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/FD_SET.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_SET @section @code{FD_SET} @findex FD_SET POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/FD_SET.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/FD_ZERO.texi��������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_ZERO @section @code{FD_ZERO} @findex FD_ZERO POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/FD_ZERO.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_Exit_C99.texi������������������������������������������0000664�0000000�0000000�00000001126�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _Exit @section @code{_Exit} @findex _Exit @c This file would ideally be called _Exit.texi, but then it would collide @c with _exit.texi on case-insensitive file systems (Mac OS X HFS+ and Windows @c file systems). POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html} Gnulib module: _Exit Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_exit.texi����������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _exit @section @code{_exit} @findex _exit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_exit.html} Gnulib module: unistd Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<stdlib.h>}) on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_longjmp.texi�������������������������������������������0000664�0000000�0000000�00000001251�14110572173�0022713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _longjmp @section @code{_longjmp} @findex _longjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_longjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Note: A future revision of POSIX later than the 2008/2009 one may drop the functions @code{_setjmp} and @code{_longjmp}. Still, in 2008, on all systems which have @code{_setjmp}, it is the fastest way to save the registers but not the signal mask (up to 30 times faster than @code{setjmp} on some systems). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_setjmp.texi��������������������������������������������0000664�0000000�0000000�00000001143�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _setjmp @section @code{_setjmp} @findex _setjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_setjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: A future revision of POSIX later than the 2008/2009 one may drop the functions @code{_setjmp} and @code{_longjmp}. Still, in 2008, on all systems which have @code{_setjmp}, it is the fastest way to save the registers but not the signal mask (up to 30 times faster than @code{setjmp} on some systems). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_tolower.texi�������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _tolower @section @code{_tolower} @findex _tolower POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_tolower.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, Android 4.4. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/_toupper.texi�������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _toupper @section @code{_toupper} @findex _toupper POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/_toupper.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, Minix 3.1.8, Android 4.4. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/a64l.texi�����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node a64l @section @code{a64l} @findex a64l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/a64l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @item This function was not correctly implemented in glibc versions before 2.2.5. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/abort.texi����������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node abort @section @code{abort} @findex abort POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/abort.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms mistakenly close all stdio streams prior to raising SIGABRT: Cygwin 1.5.x. @item Some platforms always print a message to stderr, even if a SIGABRT handler uses longjmp to resume execution at a safe point: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/abs.texi������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0021657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node abs @section @code{abs} @findex abs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/abs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.3. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/accept.texi���������������������������������������������0000664�0000000�0000000�00000002350�14110572173�0022346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node accept @section @code{accept} @findex accept POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.html} Gnulib module: accept Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), the descriptors returned by the @code{accept} function cannot be used in calls to @code{read}, @code{write}, and @code{close}; you have to use @code{recv}, @code{send}, @code{closesocket} in these cases instead. @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API} is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact considers it as a pointer to a 32-bit wide @code{unsigned int} entity. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @item On some platforms, this function's third argument type is @samp{void *}, not @samp{socklen_t *}: Solaris 10. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/access.texi���������������������������������������������0000664�0000000�0000000�00000003212�14110572173�0022346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node access @section @code{access} @findex access POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/access.html} Gnulib module: access Portability problems fixed by Gnulib: @itemize @item This function does not support the @code{X_OK} mode on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function uses the effective id instead of the real id on some platforms: Cygwin 1.5.x. @end itemize Other problems of this function: @itemize @item There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. @item This function does not have an option for not following symbolic links (like @code{stat} versus @code{lstat}). If you need this option, use the Gnulib module @code{faccessat} with the @code{AT_EACCESS} flag. @item On native Windows, files whose basename does not contain a @samp{.} cannot be executed through @code{execlp} or @code{execvp}. Nevertheless, this function may return true for such files. @item On Windows, different facilities for executing a program have different ways of finding an executable file, by trying various suffixes. For example, @code{execlp} and @code{execvp} search for files with the suffixes @code{.com}, @code{.exe}, @code{.bat}, @code{.cmd}, when the file with the given file name does not exist. Whereas @code{cmd.exe} searches according to the @code{PATHEXT} environment variable. This function does not perform any search; it merely looks at the file with the given file name. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/acos.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acos @section @code{acos} @findex acos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acos.html} Gnulib module: acos Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/acosf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosf @section @code{acosf} @findex acosf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acosf.html} Gnulib module: acosf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/acosh.texi����������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosh @section @code{acosh} @findex acosh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acosh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/acoshf.texi���������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acoshf @section @code{acoshf} @findex acoshf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acoshf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/acoshl.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acoshl @section @code{acoshl} @findex acoshl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acoshl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/acosl.texi����������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosl @section @code{acosl} @findex acosl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/acosl.html} Gnulib module: acosl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_cancel.texi�����������������������������������������0000664�0000000�0000000�00000001152�14110572173�0023163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_cancel @section @code{aio_cancel} @findex aio_cancel POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_cancel.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_error.texi������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0023074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_error @section @code{aio_error} @findex aio_error POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_error.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_fsync.texi������������������������������������������0000664�0000000�0000000�00000001174�14110572173�0023064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_fsync @section @code{aio_fsync} @findex aio_fsync POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_fsync.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_read.texi�������������������������������������������0000664�0000000�0000000�00000001142�14110572173�0022650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_read @section @code{aio_read} @findex aio_read POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_read.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_return.texi�����������������������������������������0000664�0000000�0000000�00000001163�14110572173�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_return @section @code{aio_return} @findex aio_return POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_return.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_suspend.texi����������������������������������������0000664�0000000�0000000�00000001156�14110572173�0023423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_suspend @section @code{aio_suspend} @findex aio_suspend POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_suspend.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aio_write.texi������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0023073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_write @section @code{aio_write} @findex aio_write POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/aio_write.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/alarm.texi����������������������������������������������0000664�0000000�0000000�00000001372�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node alarm @section @code{alarm} @findex alarm POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/alarm.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has no impact if <code>SIGALRM</code> is inherited as ignored; programs should use <code>signal (SIGALRM, SIG_DFL)</code> if it is important to ensure the alarm will fire. @item Use of this function in multi-threaded applications is not advised. @item This function is missing on some platforms: mingw (2011), MSVC 14. @item This function is conditionally declared in the non-standard @code{<io.h>} header on some platforms: mingw (2012 or newer). @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/aligned_alloc.texi��������������������������������������0000664�0000000�0000000�00000001711�14110572173�0023664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aligned_alloc @section @code{aligned_alloc} @findex aligned_alloc Documentation:@* @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/aligned_alloc.3.html,,man aligned_alloc} Gnulib module: aligned_alloc Portability problems fixed by Gnulib: @itemize @item This function fails if the alignment argument is smaller than @code{sizeof (void *)} on some platforms: macOS 11.1, AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.15, macOS 10.13, FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize The Gnulib module @code{aligned-malloc} provides functions for allocating and freeing blocks of suitably aligned memory. The Gnulib module @code{pagealign_alloc} provides a similar API for allocating and freeing blocks of memory aligned on a system page boundary. �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/alphasort.texi������������������������������������������0000664�0000000�0000000�00000001222�14110572173�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node alphasort @section @code{alphasort} @findex alphasort POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/alphasort.html} Gnulib module: alphasort Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Solaris 9, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The parameters of this function are declared as @code{const void *} on some platforms: glibc 2.3.6, macOS 10.7, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7. @item The parameters of this function are declared as @code{void *} on some platforms: AIX 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asctime.texi��������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asctime @section @code{asctime} @findex asctime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asctime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function may overflow its internal buffer if an invalid year is passed. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asctime_r.texi������������������������������������������0000664�0000000�0000000�00000001160�14110572173�0023053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asctime_r @section @code{asctime_r} @findex asctime_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asctime_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function may put more than 26 bytes into the argument buffer if an invalid year is passed. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asin.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asin @section @code{asin} @findex asin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asin.html} Gnulib module: asin Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asinf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinf @section @code{asinf} @findex asinf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asinf.html} Gnulib module: asinf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asinh.texi����������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinh @section @code{asinh} @findex asinh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asinh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asinhf.texi���������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinhf @section @code{asinhf} @findex asinhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asinhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/asinhl.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinhl @section @code{asinhl} @findex asinhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asinhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/asinl.texi����������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinl @section @code{asinl} @findex asinl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/asinl.html} Gnulib module: asinl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/assert.texi���������������������������������������������0000664�0000000�0000000�00000000707�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node assert @section @code{assert} @findex assert POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/assert.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Extension: Gnulib offers a module @samp{assert} that allows the installer to disable assertions through a @samp{configure} option: @samp{--disable-assert}. ���������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atan.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan @section @code{atan} @findex atan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atan.html} Gnulib module: atan Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atan2.texi����������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2 @section @code{atan2} @findex atan2 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atan2.html} Gnulib module: atan2 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atan2f.texi���������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2f @section @code{atan2f} @findex atan2f POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atan2f.html} Gnulib module: atan2f Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/atan2l.texi���������������������������������������������0000664�0000000�0000000�00000001043�14110572173�0022266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2l @section @code{atan2l} @findex atan2l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atan2l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atanf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanf @section @code{atanf} @findex atanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atanf.html} Gnulib module: atanf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atanh.texi����������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanh @section @code{atanh} @findex atanh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atanh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atanhf.texi���������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanhf @section @code{atanhf} @findex atanhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atanhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atanhl.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanhl @section @code{atanhl} @findex atanhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atanhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/atanl.texi����������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanl @section @code{atanl} @findex atanl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atanl.html} Gnulib module: atanl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atexit.texi���������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atexit @section @code{atexit} @findex atexit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atexit.html} Gnulib module: atexit Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atof.texi�����������������������������������������������0000664�0000000�0000000�00000002244�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atof @section @code{atof} @findex atof POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atof.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.4. @item This function mis-parses strings with leading @samp{+} on some old platforms: Old versions of Linux. @item This function returns a positive value for negative underflow on some platforms: glibc 2.4, Mingw, Cygwin. @item This function fails to do a valid parse of @samp{-0x} on some platforms: glibc 2.4, Cygwin < 1.5.25-11. @item This function fails to parse Infinities and plain NaNs on some platforms: Mingw, OpenBSD 4.0. @item This function fails to parse NaN() on some platforms: Mingw, OpenBSD 4.0, Cygwin < 1.5.25-11. @item This function fails to parse NaN(n-char-sequence) on some platforms: Mingw, OpenBSD 4.0. @item This function fails to parse C99 hexadecimal floating point on some platforms: Mingw, OpenBSD 4.0. @item This function fails to correctly parse very long strings on some platforms: Mingw, Cygwin. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atoi.texi�����������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atoi @section @code{atoi} @findex atoi POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atoi.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atol.texi�����������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atol @section @code{atol} @findex atol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atol.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/atoll.texi����������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atoll @section @code{atoll} @findex atoll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/atoll.html} Gnulib module: atoll Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.23, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/basename.texi�������������������������������������������0000664�0000000�0000000�00000001546�14110572173�0022670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node basename @section @code{basename} @findex basename POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/basename.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-basename-3.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 6.5, mingw, MSVC 14. @item glibc and Android have two different functions @code{basename}: the POSIX version and the GNU version. @item @code{basename} assumes file names in POSIX syntax; it does not work with file names in Windows syntax. @end itemize The Gnulib module @code{basename-lgpl} provides similar API, with a function @code{last_component}, that also works with Windows file names. ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/bind.texi�����������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bind @section @code{bind} @findex bind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html} Gnulib module: bind Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/bsearch.texi��������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bsearch @section @code{bsearch} @findex bsearch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/bsearch.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/btowc.texi����������������������������������������������0000664�0000000�0000000�00000001750�14110572173�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node btowc @section @code{btowc} @findex btowc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/btowc.html} Gnulib module: btowc Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. @item This function returns WEOF for a NUL argument on some platforms: Cygwin 1.7.2. @item This function does not return WEOF for an EOF argument on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{btoc32}, provided by Gnulib module @code{btoc32}, operates on 32-bit wide characters and therefore does not have this limitation. @item In the C or POSIX locales, this function is not consistent with Gnulib's @code{mbrtowc} and can return @code{WEOF}: glibc 2.23, MirOS BSD #10. @end itemize ������������������������gnulib-20210822~d383792/doc/posix-functions/c16rtomb.texi�������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node c16rtomb @section @code{c16rtomb} @findex c16rtomb Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 9, Android 4.4. @end itemize ����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/c32rtomb.texi�������������������������������������������0000664�0000000�0000000�00000001160�14110572173�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node c32rtomb @section @code{c32rtomb} @findex c32rtomb Gnulib module: c32rtomb Portability problems fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 9, Android 4.4. @item This function returns 0 when the first argument is NULL in some locales on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as an inline function on some platforms: Haiku 2020. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cabs.texi�����������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabs @section @code{cabs} @findex cabs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cabs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Solaris 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cabsf.texi����������������������������������������������0000664�0000000�0000000�00000000622�14110572173�0022165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabsf @section @code{cabsf} @findex cabsf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cabsf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cabsl.texi����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabsl @section @code{cabsl} @findex cabsl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cabsl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/cacos.texi����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacos @section @code{cacos} @findex cacos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacos.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/cacosf.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosf @section @code{cacosf} @findex cacosf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacosf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/cacosh.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosh @section @code{cacosh} @findex cacosh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacosh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/cacoshf.texi��������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0022523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacoshf @section @code{cacoshf} @findex cacoshf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacoshf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize ���������������������������gnulib-20210822~d383792/doc/posix-functions/cacoshl.texi��������������������������������������������0000664�0000000�0000000�00000000746�14110572173�0022532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacoshl @section @code{cacoshl} @findex cacoshl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacoshl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ��������������������������gnulib-20210822~d383792/doc/posix-functions/cacosl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosl @section @code{cacosl} @findex cacosl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cacosl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/call_once.texi������������������������������������������0000664�0000000�0000000�00000001114�14110572173�0023023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node call_once @section @code{call_once} @findex call_once Documentation:@* @ifinfo @ref{Call Once,,Call Once,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Call-Once.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/calloc.texi���������������������������������������������0000664�0000000�0000000�00000001767�14110572173�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node calloc @section @code{calloc} @findex calloc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/calloc.html} Gnulib module: calloc-posix Portability problems fixed by Gnulib: @itemize @item Upon failure, the function does not set @code{errno} to @code{ENOMEM} on some platforms: mingw, MSVC 14. @item On some platforms, @code{calloc (n, s)} can succeed even if multiplying @code{n} by @code{s} would exceed @code{PTRDIFF_MAX} or @code{SIZE_MAX}. Although failing to check for exceeding @code{PTRDIFF_MAX} is arguably allowed by POSIX it can lead to undefined behavior later, so @code{calloc-posix} does not allow going over the limit. @end itemize Extension: Gnulib provides a module @samp{calloc-gnu} that substitutes a @code{calloc} implementation that behaves more like the glibc implementation. It fixes this portability problem: @itemize @item @code{calloc (0, s)} and @code{calloc (n, 0)} return @code{NULL} on success on some platforms: AIX 7.2. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/canonicalize.texi���������������������������������������0000664�0000000�0000000�00000001222�14110572173�0023543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node canonicalize @section @code{canonicalize} @findex canonicalize Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/canonicalizef.texi��������������������������������������0000664�0000000�0000000�00000001225�14110572173�0023714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node canonicalizef @section @code{canonicalizef} @findex canonicalizef Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/canonicalizel.texi��������������������������������������0000664�0000000�0000000�00000001225�14110572173�0023722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node canonicalizel @section @code{canonicalizel} @findex canonicalizel Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/carg.texi�����������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node carg @section @code{carg} @findex carg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/carg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cargf.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cargf @section @code{cargf} @findex cargf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cargf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cargl.texi����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cargl @section @code{cargl} @findex cargl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cargl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/casin.texi����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casin @section @code{casin} @findex casin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casin.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/casinf.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinf @section @code{casinf} @findex casinf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casinf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/casinh.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinh @section @code{casinh} @findex casinh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casinh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/casinhf.texi��������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0022530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinhf @section @code{casinhf} @findex casinhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casinhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize ���������������������������gnulib-20210822~d383792/doc/posix-functions/casinhl.texi��������������������������������������������0000664�0000000�0000000�00000000746�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinhl @section @code{casinhl} @findex casinhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casinhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ��������������������������gnulib-20210822~d383792/doc/posix-functions/casinl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinl @section @code{casinl} @findex casinl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/casinl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/catan.texi����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catan @section @code{catan} @findex catan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catan.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/catanf.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanf @section @code{catanf} @findex catanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/catanh.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanh @section @code{catanh} @findex catanh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catanh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/catanhf.texi��������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0022521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanhf @section @code{catanhf} @findex catanhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catanhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 5.1. @end itemize ���������������������������gnulib-20210822~d383792/doc/posix-functions/catanhl.texi��������������������������������������������0000664�0000000�0000000�00000000746�14110572173�0022530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanhl @section @code{catanhl} @findex catanhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catanhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ��������������������������gnulib-20210822~d383792/doc/posix-functions/catanl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanl @section @code{catanl} @findex catanl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catanl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/catclose.texi�������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catclose @section @code{catclose} @findex catclose POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catclose.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/catgets.texi��������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catgets @section @code{catgets} @findex catgets POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catgets.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/catopen.texi��������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catopen @section @code{catopen} @findex catopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/catopen.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 7.1. @end itemize ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cbrt.texi�����������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrt @section @code{cbrt} @findex cbrt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cbrt.html} Gnulib module: cbrt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cbrtf.texi����������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrtf @section @code{cbrtf} @findex cbrtf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cbrtf.html} Gnulib module: cbrtf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @item This function returns a wrong value for a minus zero on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cbrtl.texi����������������������������������������������0000664�0000000�0000000�00000001536�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrtl @section @code{cbrtl} @findex cbrtl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cbrtl.html} Gnulib module: cbrtl or cbrtl-ieee Portability problems fixed by either Gnulib module @code{cbrtl} or @code{cbrtl-ieee} @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function is not declared on some platforms: IRIX 6.5. @item This function produces grossly wrong results on some platforms: OpenBSD 5.1/SPARC. @end itemize Portability problems fixed by Gnulib module @code{cbrtl-ieee}: @itemize @item This function returns a positive zero for a minus zero argument on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ccos.texi�����������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccos @section @code{ccos} @findex ccos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccos.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ccosf.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosf @section @code{ccosf} @findex ccosf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccosf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ccosh.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosh @section @code{ccosh} @findex ccosh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccosh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ccoshf.texi���������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccoshf @section @code{ccoshf} @findex ccoshf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccoshf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ccoshl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccoshl @section @code{ccoshl} @findex ccoshl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccoshl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/ccosl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosl @section @code{ccosl} @findex ccosl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ccosl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/ceil.texi�����������������������������������������������0000664�0000000�0000000�00000001043�14110572173�0022021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceil @section @code{ceil} @findex ceil POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ceil.html} Gnulib module: ceil or ceil-ieee Portability problems fixed by either Gnulib module @code{ceil} or @code{ceil-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{ceil-ieee}: @itemize @item This function returns a positive zero for an argument between @minus{}1 and 0 on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ceilf.texi����������������������������������������������0000664�0000000�0000000�00000001360�14110572173�0022171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceilf @section @code{ceilf} @findex ceilf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ceilf.html} Gnulib module: ceilf or ceilf-ieee Portability problems fixed by either Gnulib module @code{ceilf} or @code{ceilf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{ceilf-ieee}: @itemize @item This function returns a positive zero for an argument between @minus{}1 and 0 on some platforms: macOS 10.13, AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ceill.texi����������������������������������������������0000664�0000000�0000000�00000001411�14110572173�0022174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceill @section @code{ceill} @findex ceill POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ceill.html} Gnulib module: ceill or ceill-ieee Portability problems fixed by either Gnulib module @code{ceill} or @code{ceill-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function returns a wrong result for small arguments on some platforms: OpenBSD 5.6. @end itemize Portability problems fixed by Gnulib module @code{ceill-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cexp.texi�����������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexp @section @code{cexp} @findex cexp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cexp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cexpf.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexpf @section @code{cexpf} @findex cexpf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cexpf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cexpl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexpl @section @code{cexpl} @findex cexpl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cexpl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/cfgetispeed.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfgetispeed @section @code{cfgetispeed} @findex cfgetispeed POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cfgetispeed.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cfgetospeed.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfgetospeed @section @code{cfgetospeed} @findex cfgetospeed POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cfgetospeed.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cfsetispeed.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfsetispeed @section @code{cfsetispeed} @findex cfsetispeed POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cfsetispeed.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cfsetospeed.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfsetospeed @section @code{cfsetospeed} @findex cfsetospeed POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cfsetospeed.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/chdir.texi����������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chdir @section @code{chdir} @findex chdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/chdir.html} Gnulib module: chdir Portability problems fixed by Gnulib: @itemize @item This function is declared in different header files (namely, @code{<io.h>} or @code{<direct.h>}) on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/chmod.texi����������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chmod @section @code{chmod} @findex chmod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/chown.texi����������������������������������������������0000664�0000000�0000000�00000001773�14110572173�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chown @section @code{chown} @findex chown POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html} Gnulib module: chown Portability problems fixed by Gnulib: @itemize @item Some platforms fail to detect trailing slash on non-directories, as in @code{chown("link-to-file/",uid,gid)}: FreeBSD 7.2, AIX 7.1, Solaris 9. @item Some platforms fail to update the change time when at least one argument was not @minus{}1, but no ownership changes resulted: OpenBSD 6.7. @item When passed an argument of @minus{}1, some implementations really set the owner user/group id of the file to this value, rather than leaving that id of the file alone. @item When applied to a symbolic link, some implementations don't dereference the symlink, i.e.@: they behave like @code{lchown}. @item This function is missing on some platforms; however, the replacement always fails with @code{ENOSYS}: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����gnulib-20210822~d383792/doc/posix-functions/cimag.texi����������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0022170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimag @section @code{cimag} @findex cimag POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cimag.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cimagf.texi���������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0022342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimagf @section @code{cimagf} @findex cimagf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cimagf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cimagl.texi���������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimagl @section @code{cimagl} @findex cimagl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cimagl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������gnulib-20210822~d383792/doc/posix-functions/clearerr.texi�������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0022710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clearerr @section @code{clearerr} @findex clearerr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clearerr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock.texi����������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock @section @code{clock} @findex clock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock_getcpuclockid.texi��������������������������������0000664�0000000�0000000�00000001051�14110572173�0025077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_getcpuclockid @section @code{clock_getcpuclockid} @findex clock_getcpuclockid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getcpuclockid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14, Android 5.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock_getres.texi���������������������������������������0000664�0000000�0000000�00000000641�14110572173�0023554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_getres @section @code{clock_getres} @findex clock_getres POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock_gettime.texi��������������������������������������0000664�0000000�0000000�00000001056�14110572173�0023722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_gettime @section @code{clock_gettime} @findex clock_gettime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_gettime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, mingw, MSVC 14. The Gnulib module @code{gettime} is a partial substitute; it implements the @code{CLOCK_REALTIME} functionality of @code{clock_gettime}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock_nanosleep.texi������������������������������������0000664�0000000�0000000�00000001012�14110572173�0024240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_nanosleep @section @code{clock_nanosleep} @findex clock_nanosleep POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_nanosleep.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 11.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clock_settime.texi��������������������������������������0000664�0000000�0000000�00000000663�14110572173�0023741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_settime @section @code{clock_settime} @findex clock_settime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_settime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/clog.texi�����������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clog @section @code{clog} @findex clog POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clog.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/clogf.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clogf @section @code{clogf} @findex clogf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clogf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/clogl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clogl @section @code{clogl} @findex clogl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/clogl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/close.texi����������������������������������������������0000664�0000000�0000000�00000001257�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node close @section @code{close} @findex close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html} Gnulib module: close Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: MSVC 14. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @item On Windows platforms (excluding Cygwin), @code{socket} and @code{accept} do not return file descriptors that can be closed by @code{close}. Instead, @code{closesocket} must be used. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/closedir.texi�������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node closedir @section @code{closedir} @findex closedir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/closedir.html} Gnulib module: closedir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/closelog.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node closelog @section @code{closelog} @findex closelog POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/closelog.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_broadcast.texi��������������������������������������0000664�0000000�0000000�00000001202�14110572173�0023670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_broadcast @section @code{cnd_broadcast} @findex cnd_broadcast Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_destroy.texi����������������������������������������0000664�0000000�0000000�00000001174�14110572173�0023427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_destroy @section @code{cnd_destroy} @findex cnd_destroy Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_init.texi�������������������������������������������0000664�0000000�0000000�00000001163�14110572173�0022677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_init @section @code{cnd_init} @findex cnd_init Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_signal.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_signal @section @code{cnd_signal} @findex cnd_signal Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_timedwait.texi��������������������������������������0000664�0000000�0000000�00000001202�14110572173�0023715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_timedwait @section @code{cnd_timedwait} @findex cnd_timedwait Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cnd_wait.texi�������������������������������������������0000664�0000000�0000000�00000001163�14110572173�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cnd_wait @section @code{cnd_wait} @findex cnd_wait Documentation:@* @ifinfo @ref{ISO C Condition Variables,,Condition Variables,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Condition-Variables.html}. @end ifnotinfo Gnulib module: cnd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/confstr.texi��������������������������������������������0000664�0000000�0000000�00000000630�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node confstr @section @code{confstr} @findex confstr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/confstr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/conj.texi�����������������������������������������������0000664�0000000�0000000�00000000716�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conj @section @code{conj} @findex conj POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/conj.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ��������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/conjf.texi����������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conjf @section @code{conjf} @findex conjf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/conjf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/conjl.texi����������������������������������������������0000664�0000000�0000000�00000000737�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conjl @section @code{conjl} @findex conjl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/conjl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize ���������������������������������gnulib-20210822~d383792/doc/posix-functions/connect.texi��������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node connect @section @code{connect} @findex connect POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html} Gnulib module: connect Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/copysign.texi�������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysign @section @code{copysign} @findex copysign POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/copysign.html} Gnulib module: copysign Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/copysignf.texi������������������������������������������0000664�0000000�0000000�00000000750�14110572173�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysignf @section @code{copysignf} @findex copysignf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/copysignf.html} Gnulib module: copysignf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������gnulib-20210822~d383792/doc/posix-functions/copysignl.texi������������������������������������������0000664�0000000�0000000�00000000747�14110572173�0023126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysignl @section @code{copysignl} @findex copysignl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/copysignl.html} Gnulib module: copysignl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������gnulib-20210822~d383792/doc/posix-functions/cos.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cos @section @code{cos} @findex cos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cos.html} Gnulib module: cos Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cosf.texi�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosf @section @code{cosf} @findex cosf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cosf.html} Gnulib module: cosf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cosh.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosh @section @code{cosh} @findex cosh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cosh.html} Gnulib module: cosh Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/coshf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node coshf @section @code{coshf} @findex coshf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/coshf.html} Gnulib module: coshf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/coshl.texi����������������������������������������������0000664�0000000�0000000�00000001037�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node coshl @section @code{coshl} @findex coshl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/coshl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cosl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosl @section @code{cosl} @findex cosl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cosl.html} Gnulib module: cosl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cpow.texi�����������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0022061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpow @section @code{cpow} @findex cpow POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cpow.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/cpowf.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpowf @section @code{cpowf} @findex cpowf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cpowf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/cpowl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpowl @section @code{cpowl} @findex cpowl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cpowl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 11.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/cproj.texi����������������������������������������������0000664�0000000�0000000�00000001001�14110572173�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cproj @section @code{cproj} @findex cproj POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cproj.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @item The glibc implementation is or was broken. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cprojf.texi���������������������������������������������0000664�0000000�0000000�00000001005�14110572173�0022366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cprojf @section @code{cprojf} @findex cprojf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cprojf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @item The glibc implementation is or was broken. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/cprojl.texi���������������������������������������������0000664�0000000�0000000�00000001022�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cprojl @section @code{cprojl} @findex cprojl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/cprojl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @item The glibc implementation is or was broken. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/creal.texi����������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creal @section @code{creal} @findex creal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/creal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/crealf.texi���������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0022350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node crealf @section @code{crealf} @findex crealf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/crealf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/creall.texi���������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creall @section @code{creall} @findex creall POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/creall.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize �����������������������������gnulib-20210822~d383792/doc/posix-functions/creat.texi����������������������������������������������0000664�0000000�0000000�00000001640�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creat @section @code{creat} @findex creat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/creat.html} Gnulib module: creat Portability problems fixed by Gnulib: @itemize @item This function does not support modes with execution bits (such as 0700) on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{creat} may not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: FreeBSD 7.2, AIX 7.1, HP-UX 11.31, Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows, this function returns a file handle in @code{O_TEXT} mode. If you need a file handle in @code{O_BINARY} mode, you need to use the function @code{open} instead. @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/crypt.texi����������������������������������������������0000664�0000000�0000000�00000001056�14110572173�0022252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node crypt @section @code{crypt} @findex crypt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/crypt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.34, FreeBSD 6.0, NetBSD 5.0, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in @code{<unistd.h>} (without @code{-D_GNU_SOURCE}) on some platforms: glibc (at least 2.11--2.13). @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csin.texi�����������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csin @section @code{csin} @findex csin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csin.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csinf.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinf @section @code{csinf} @findex csinf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csinf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csinh.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinh @section @code{csinh} @findex csinh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csinh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csinhf.texi���������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinhf @section @code{csinhf} @findex csinhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csinhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csinhl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinhl @section @code{csinhl} @findex csinhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csinhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/csinl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinl @section @code{csinl} @findex csinl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csinl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/csqrt.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrt @section @code{csqrt} @findex csqrt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csqrt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csqrtf.texi���������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrtf @section @code{csqrtf} @findex csqrtf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csqrtf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/csqrtl.texi���������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrtl @section @code{csqrtl} @findex csqrtl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/csqrtl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 5.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/ctan.texi�����������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctan @section @code{ctan} @findex ctan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctan.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctanf.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanf @section @code{ctanf} @findex ctanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctanh.texi����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanh @section @code{ctanh} @findex ctanh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctanh.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctanhf.texi���������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanhf @section @code{ctanhf} @findex ctanhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctanhf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctanhl.texi���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanhl @section @code{ctanhl} @findex ctanhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctanhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-functions/ctanl.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanl @section @code{ctanl} @findex ctanl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctanl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 7.1. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/ctermid.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctermid @section @code{ctermid} @findex ctermid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctermid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctime.texi����������������������������������������������0000664�0000000�0000000�00000002160�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctime @section @code{ctime} @findex ctime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html} Gnulib module: ctime Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function may overflow its internal buffer if an invalid year is passed. @item The @code{ctime} function need not be reentrant, and consequently is not required to be thread safe. Implementations of @code{ctime} typically write the timestamp into static buffer. If two threads call @code{ctime} at roughly the same time, you might end up with the wrong date in one of the threads, or some undefined string. There is a re-entrant interface @code{ctime_r}. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize A more flexible function is @code{strftime}. However, note that it is locale dependent. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ctime_r.texi��������������������������������������������0000664�0000000�0000000�00000002403�14110572173�0022530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctime_r @section @code{ctime_r} @findex ctime_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function may put more than 26 bytes into the argument buffer if an invalid year is passed. @end itemize @code{ctime_r} takes a pre-allocated buffer and length of the buffer, and returns @code{NULL} on errors. The input buffer should be at least 26 bytes in size. The output string is locale-independent. However, years can have more than 4 digits if @code{time_t} is sufficiently wide, so the length of the required output buffer is not easy to determine. Increasing the buffer size when @code{ctime_r} returns @code{NULL} is not necessarily sufficient. The @code{NULL} return value could mean some other error condition, which will not go away by increasing the buffer size. A more flexible function is @code{strftime}. However, note that it is locale dependent. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/daddl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node daddl @section @code{daddl} @findex daddl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/daylight.texi�������������������������������������������0000664�0000000�0000000�00000001354�14110572173�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node daylight @section @code{daylight} @findex daylight POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/daylight.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: FreeBSD 13.0, OpenBSD 3.8, IRIX 6.5. @item The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize A more portable way of getting the UTC offset is to use @code{strftime} with the @code{%z} format. @xref{strftime}. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_clearerr.texi���������������������������������������0000664�0000000�0000000�00000000667�14110572173�0023541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_clearerr @section @code{dbm_clearerr} @findex dbm_clearerr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_clearerr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_close.texi������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0023043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_close @section @code{dbm_close} @findex dbm_close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_close.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_delete.texi�����������������������������������������0000664�0000000�0000000�00000000642�14110572173�0023175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_delete @section @code{dbm_delete} @findex dbm_delete POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_delete.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_error.texi������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0023066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_error @section @code{dbm_error} @findex dbm_error POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_error.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, HP-UX 11.11, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_fetch.texi������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0023027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_fetch @section @code{dbm_fetch} @findex dbm_fetch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_fetch.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_firstkey.texi���������������������������������������0000664�0000000�0000000�00000000652�14110572173�0023574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_firstkey @section @code{dbm_firstkey} @findex dbm_firstkey POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_firstkey.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_nextkey.texi����������������������������������������0000664�0000000�0000000�00000000646�14110572173�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_nextkey @section @code{dbm_nextkey} @findex dbm_nextkey POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_nextkey.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_open.texi�������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0022673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_open @section @code{dbm_open} @findex dbm_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dbm_store.texi������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0023072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_store @section @code{dbm_store} @findex dbm_store POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_store.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ddivl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ddivl @section @code{ddivl} @findex ddivl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/difftime.texi�������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node difftime @section @code{difftime} @findex difftime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/difftime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dirfd.texi����������������������������������������������0000664�0000000�0000000�00000001163�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirfd @section @code{dirfd} @findex dirfd POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dirfd.html} Gnulib module: dirfd Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 7.1, HP-UX 11, Solaris 10, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function always fails on some platforms: mingw. @end itemize With the @code{dirfd} module, this functions always sets @code{errno} when it fails. (POSIX does not require that @code{dirfd} sets @code{errno} when it fails.) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dirname.texi��������������������������������������������0000664�0000000�0000000�00000001175�14110572173�0022532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirname @section @code{dirname} @findex dirname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dirname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 6.5, mingw, MSVC 14. @item @code{dirname} assumes file names in POSIX syntax; it does not work with file names in Windows syntax. @end itemize The Gnulib module @code{dirname} provides similar API, with functions @code{dir_name} and @code{mdir_name}, that also works with Windows file names. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/div.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node div @section @code{div} @findex div POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/div.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dlclose.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlclose @section @code{dlclose} @findex dlclose POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlclose.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dlerror.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlerror @section @code{dlerror} @findex dlerror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlerror.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dlopen.texi���������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlopen @section @code{dlopen} @findex dlopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlopen.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dlopen-1.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item If the file name argument is not absolute, the file is searched for. The search algorithm is system specific. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dlsym.texi����������������������������������������������0000664�0000000�0000000�00000001155�14110572173�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlsym @section @code{dlsym} @findex dlsym POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-dlsym-1.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item The visibility of symbols loaded in dependent shared libraries or present in the main executable is system dependent. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dmull.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dmull @section @code{dmull} @findex dmull Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dprintf.texi��������������������������������������������0000664�0000000�0000000�00000004077�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dprintf @section @code{dprintf} @findex dprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dprintf.html} Gnulib module: dprintf or dprintf-posix Portability problems fixed by either Gnulib module @code{dprintf} or @code{dprintf-posix}: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{dprintf-posix}: @itemize @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.4. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Solaris 11.4. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Solaris 11.4. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/drand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node drand48 @section @code{drand48} @findex drand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/drand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dsubl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dsubl @section @code{dsubl} @findex dsubl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/dup.texi������������������������������������������������0000664�0000000�0000000�00000000751�14110572173�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dup @section @code{dup} @findex dup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup.html} Gnulib module: dup Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: MSVC 14. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������gnulib-20210822~d383792/doc/posix-functions/dup2.texi�����������������������������������������������0000664�0000000�0000000�00000002651�14110572173�0021765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dup2 @section @code{dup2} @findex dup2 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html} Gnulib module: dup2 Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: MSVC 14. @item This function always returns 0 for success on some platforms: mingw, MSVC 14. @item This function can hang when duplicating an fd to itself on some platforms: mingw, MSVC 14. @item This function crashes when invoked with invalid arguments on some platforms: Cygwin 1.7.17, MSVC 14. @item This function crashes when invoked with valid arguments on some platforms: Cygwin 1.7.25. @item This function fails with @code{EINVAL} when duplicating an fd to itself: Android. @item This function resets the @code{FD_CLOEXEC} flag when duplicating an fd to itself on some platforms: Haiku. @item This function returns 0 for @code{dup2 (1, 1)} on some platforms: Cygwin 1.5.x. @item This function may return @code{-EBADF} instead of @code{-1} on some platforms: Linux releases between July 2008 and May 2009 (versions 2.6.27 to 2.6.29). @item This function returns @code{EMFILE} instead of @code{EBADF} for large targets, which interferes with using @code{dup2(fd,fd)==fd)} as the minimal @code{EBADF} filter: AIX 7.1, FreeBSD 6.1, Cygwin 1.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/duplocale.texi������������������������������������������0000664�0000000�0000000�00000001470�14110572173�0023061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node duplocale @section @code{duplocale} @findex duplocale POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/duplocale.html} Gnulib module: duplocale Portability problems fixed by Gnulib: @itemize @item The argument @code{LC_GLOBAL_LOCALE} is not supported on some platforms: glibc 2.11, AIX 7.1. @item With the argument @code{LC_GLOBAL_LOCALE}, this function returns a wrong result on some platforms: NetBSD 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. @item This function is useless because the @code{locale_t} type is not defined on some platforms: z/OS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/encrypt.texi��������������������������������������������0000664�0000000�0000000�00000001067�14110572173�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node encrypt @section @code{encrypt} @findex encrypt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/encrypt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in @code{<unistd.h>} (without @code{-D_GNU_SOURCE}) on some platforms: glibc (at least 2.11--2.13). @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endgrent.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endgrent @section @code{endgrent} @findex endgrent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endgrent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endhostent.texi�����������������������������������������0000664�0000000�0000000�00000000611�14110572173�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endhostent @section @code{endhostent} @findex endhostent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endhostent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endnetent.texi������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0023072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endnetent @section @code{endnetent} @findex endnetent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endnetent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endprotoent.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endprotoent @section @code{endprotoent} @findex endprotoent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endprotoent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endpwent.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endpwent @section @code{endpwent} @findex endpwent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endpwent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endservent.texi�����������������������������������������0000664�0000000�0000000�00000000574�14110572173�0023272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endservent @section @code{endservent} @findex endservent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endservent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/endutxent.texi������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endutxent @section @code{endutxent} @findex endutxent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/endutxent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/environ.texi��������������������������������������������0000664�0000000�0000000�00000002713�14110572173�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node environ @section @code{environ} @findex environ POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/environ.html} Gnulib module: environ Portability problems fixed by Gnulib: @itemize @item POSIX does not require this variable to be declared, and it is indeed not declared on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 3.8, IRIX 6.5, Solaris 11.4. @item On macOS, this variable is not declared. Up to Mac OS X 10.4, one can use @smallexample extern char **environ; @end smallexample to get the variable declared. This does not work any more, however, in shared libraries on macOS 11.1. Here is a workaround: Instead, one can use @smallexample #include <crt_externs.h> #define environ (*_NSGetEnviron()) @end smallexample This works at all versions of macOS. @item On Cygwin in 64-bit mode, references to this variable cause a link error when the option @code{-Wl,--disable-auto-import} is in use. @end itemize Portability problems not fixed by Gnulib: @itemize @item The address of this variable is not a compile-time constant on some platforms: mingw. @item Assigning NULL to @code{environ} to clear all variables is not portable; better is to assign @code{environ} to one-element array containing a NULL pointer. That said, an empty environment is not portable either, as some systems may require particular environment variables (such as @code{PATH}) to be present in order to operate consistently. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erand48 @section @code{erand48} @findex erand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erf.texi������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0021667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erf @section @code{erf} @findex erf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erf.html} Gnulib module: erf Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erfc.texi�����������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfc @section @code{erfc} @findex erfc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erfc.html} Gnulib module: erfc Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erfcf.texi����������������������������������������������0000664�0000000�0000000�00000000625�14110572173�0022177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfcf @section @code{erfcf} @findex erfcf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erfcf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erfcl.texi����������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfcl @section @code{erfcl} @findex erfcl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erfcl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erff.texi�����������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erff @section @code{erff} @findex erff POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erff.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/erfl.texi�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfl @section @code{erfl} @findex erfl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/erfl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/errno.texi����������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0022242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node errno @section @code{errno} @findex errno POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/errno.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows, the socket functions don't set @code{errno}; their error code is available through @code{WSAGetLastError()} instead. @end itemize �����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/execl.texi����������������������������������������������0000664�0000000�0000000�00000002116�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execl @section @code{execl} @findex execl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execl.html} Gnulib module: execl Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/execle.texi���������������������������������������������0000664�0000000�0000000�00000002123�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execle @section @code{execle} @findex execle POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execle.html} Gnulib module: execle Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/execlp.texi���������������������������������������������0000664�0000000�0000000�00000001731�14110572173�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execlp @section @code{execlp} @findex execlp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execlp.html} Gnulib module: execlp Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ���������������������������������������gnulib-20210822~d383792/doc/posix-functions/execv.texi����������������������������������������������0000664�0000000�0000000�00000002116�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execv @section @code{execv} @findex execv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execv.html} Gnulib module: execv Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/execve.texi���������������������������������������������0000664�0000000�0000000�00000002123�14110572173�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execve @section @code{execve} @findex execve POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html} Gnulib module: execve Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Note: The Gnulib replacement for this function is not async-safe, that is, it must not be invoked from a signal handler. Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/execvp.texi���������������������������������������������0000664�0000000�0000000�00000001731�14110572173�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execvp @section @code{execvp} @findex execvp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/execvp.html} Gnulib module: execvp Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not pass command-line arguments correctly if they contain space, tab, backslash, or double-quote characters. @item On Windows platforms (excluding Cygwin), this function spawns an asynchronous child process and then exits the current process immediately. As a consequence, the parent of the current process 1. may incorrectly proceed as if its child had exited, and 2. will never see the child's exit status. @item On Windows platforms (excluding Cygwin), the return type of this function is @code{intptr_t}, not @code{int}. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, a script without executable permission is still run: Cygwin 1.5.x. @end itemize ���������������������������������������gnulib-20210822~d383792/doc/posix-functions/exit.texi�����������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exit @section @code{exit} @findex exit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html} Gnulib module: stdlib Portability problems fixed by Gnulib: @itemize @item Some problems with the macros @code{EXIT_SUCCESS} and @code{EXIT_FAILURE}, see @ref{stdlib.h}. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/exp.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp @section @code{exp} @findex exp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/exp.html} Gnulib module: exp Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/exp2.texi�����������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0021757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2 @section @code{exp2} @findex exp2 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/exp2.html} Gnulib module: exp2 Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @item This function returns grossly wrong results on some platforms: OpenBSD 4.9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/exp2f.texi����������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2f @section @code{exp2f} @findex exp2f POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/exp2f.html} Gnulib module: exp2f Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/exp2l.texi����������������������������������������������0000664�0000000�0000000�00000001741�14110572173�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2l @section @code{exp2l} @findex exp2l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/exp2l.html} Gnulib module: exp2l or exp2l-ieee Portability problems fixed by either Gnulib module @code{exp2l} or @code{exp2l-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function is not declared on some platforms: IRIX 6.5. @item This function produces results which are accurate to only 16 digits on some platforms: NetBSD 9.0. @end itemize Portability problems fixed by Gnulib module @code{exp2l-ieee}: @itemize @item This function returns a wrong value for a NaN argument on some platforms: OpenBSD 4.9. @item This function returns a wrong value for a negative infinity argument on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/expf.texi�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expf @section @code{expf} @findex expf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/expf.html} Gnulib module: expf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/expl.texi�����������������������������������������������0000664�0000000�0000000�00000001527�14110572173�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expl @section @code{expl} @findex expl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/expl.html} Gnulib module: expl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function returns 0.0 for all arguments on some platforms: Haiku 2017. @item This function returns NaN for small operands on some platforms: OpenBSD 5.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/expm1.texi����������������������������������������������0000664�0000000�0000000�00000001147�14110572173�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1 @section @code{expm1} @findex expm1 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/expm1.html} Gnulib module: expm1 or expm1-ieee Portability problems fixed by either Gnulib module @code{expm1} or @code{expm1-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{expm1-ieee}: @itemize @item This function has problems when the argument is minus zero on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/expm1f.texi���������������������������������������������0000664�0000000�0000000�00000001375�14110572173�0022315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1f @section @code{expm1f} @findex expm1f POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/expm1f.html} Gnulib module: expm1f or expm1f-ieee Portability problems fixed by either Gnulib module @code{expm1f} or @code{expm1f-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, mingw, MSVC 9. @item This function produces wrong results for arguments <= @minus{}17.32868 on some platforms: IRIX 6.5. @end itemize Portability problems fixed by Gnulib module @code{expm1f-ieee}: @itemize @item This function returns a positive zero for a minus zero argument on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/expm1l.texi���������������������������������������������0000664�0000000�0000000�00000001321�14110572173�0022312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1l @section @code{expm1l} @findex expm1l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/expm1l.html} Gnulib module: expm1l Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @item This function is not declared on some platforms: IRIX 6.5. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, Mac OS X 10.5, NetBSD 8.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fabs.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabs @section @code{fabs} @findex fabs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fabs.html} Gnulib module: fabs Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fabsf.texi����������������������������������������������0000664�0000000�0000000�00000000710�14110572173�0022166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabsf @section @code{fabsf} @findex fabsf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fabsf.html} Gnulib module: fabsf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fabsl.texi����������������������������������������������0000664�0000000�0000000�00000001166�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabsl @section @code{fabsl} @findex fabsl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fabsl.html} Gnulib module: fabsl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function returns a minus zero for a minus zero argument on some platforms: IRIX 6.5 with gcc 4.2.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/faccessat.texi������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0023054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node faccessat @section @code{faccessat} @findex faccessat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/faccessat.html} Gnulib module: faccessat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 10.12, FreeBSD 7.4, NetBSD 6.1.5, OpenBSD 4.9, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.0.4. @item On some platforms, @code{faccessat (dfd, "file/", amode, flag)} succeeds instead of failing when @file{file} is not a directory. macOS 11.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item The replacement does not always take ACLs into account. @item The replacement is not safe to be used in libraries. @item The replacement is not multithread-safe. @item The replacement does not support the @code{AT_SYMLINK_NOFOLLOW} flag, which is supported by GNU @code{faccessat}. @item On some platforms, @code{faccessat} can mishandle @code{AT_EACCESS} after a process starts as root and then becomes non-root: @c https://sourceware.org/bugzilla/show_bug.cgi?id=18683 GNU/Linux with glibc 2.32. @end itemize Other problems of this function: @itemize @item There is an inherent race between calling this function and performing some action based on the results; you should think twice before trusting this function, especially in a set-uid or set-gid program. @end itemize �����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fadd.texi�����������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0022010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fadd @section @code{fadd} @findex fadd Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/faddl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node faddl @section @code{faddl} @findex faddl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fattach.texi��������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0022520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fattach @section @code{fattach} @findex fattach POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fattach.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fchdir.texi���������������������������������������������0000664�0000000�0000000�00000000715�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchdir @section @code{fchdir} @findex fchdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html} Gnulib module: fchdir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fchmod.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchmod @section @code{fchmod} @findex fchmod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmod.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fchmodat.texi�������������������������������������������0000664�0000000�0000000�00000002430�14110572173�0022673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchmodat @section @code{fchmodat} @findex fchmodat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html} Gnulib module: fchmodat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. @item When given the @code{AT_SYMLINK_NOFOLLOW} flag, this function fails with @code{errno} set to @code{ENOTSUP}, even when the file is not a symbolic link: GNU/Linux with glibc 2.31, Cygwin 2.9. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms do not allow changing the access bits on symbolic links. @item If the @code{AT_SYMLINK_NOFOLLOW} flag is specified, this function can fail with @code{errno} set to @code{EMFILE} or @code{ENFILE}, and it fails with @code{errno} set to @code{EOPNOTSUPP} if the @file{/proc} file system is not mounted: GNU/Linux with glibc 2.34. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fchown.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchown @section @code{fchown} @findex fchown POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchown.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fchownat.texi�������������������������������������������0000664�0000000�0000000�00000002250�14110572173�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchownat @section @code{fchownat} @findex fchownat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchownat.html} Gnulib module: fchownat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Also, the replacement may fail to change symlinks if @code{lchown} is unsupported, or fail altogether if @code{chown} is unsupported. @item This function is declared in @code{<sys/stat.h>}, not in @code{<unistd.h>}, on some platforms: Android 4.3. @item Some platforms fail to detect trailing slash on non-directories, as in @code{fchown(dir,"link-to-file/",uid,gid,flag)}: Solaris 9. @item Some platforms mistakenly dereference symlinks when using @code{AT_SYMLINK_NOFOLLOW}: Linux kernel 2.6.17. @item This function does not fail for an empty filename on some platforms: Linux with glibc < 2.11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fclose.texi���������������������������������������������0000664�0000000�0000000�00000001523�14110572173�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fclose @section @code{fclose} @findex fclose POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fclose.html} Gnulib module: fclose Portability problems fixed by Gnulib: @itemize @item On some platforms, this function fails to set the file position of a seekable input stream to the byte after the last one actually read: glibc 2.34, FreeBSD, AIX 7.2. @item This function crashes if the stream's file descriptor has already been closed on some platforms: MSVC 14. @item On Windows platforms (excluding Cygwin), @code{socket} and @code{accept} followed by @code{fdopen} do not return streams that can be closed by @code{fclose}. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fcntl.texi����������������������������������������������0000664�0000000�0000000�00000003635�14110572173�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcntl @section @code{fcntl} @findex fcntl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fcntl-3.html} Gnulib module: fcntl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function does not support @code{F_DUPFD_CLOEXEC} on some platforms: glibc with Linux kernels before 2.6.24, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 7.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.7.1. Note that the gnulib replacement code is functional but not atomic. @item The @code{F_DUPFD_CLOEXEC} action of this function does not set the @code{FD_CLOEXEC} flag on some platforms: NetBSD 9.0. @item The @code{F_DUPFD_CLOEXEC} action of this function sets the @code{FD_CLOEXEC} flag on the wrong file descriptor on some platforms: Haiku. @item The @code{F_DUPFD} action of this function does not reject out-of-range targets properly on some platforms: AIX 7.1, Cygwin 1.5.x, Haiku. @item The @code{F_DUPFD} action of this function mistakenly clears @code{FD_CLOEXEC} on the source descriptor on some platforms: Haiku. @end itemize Portability problems not fixed by Gnulib: @itemize @item The replacement function does not support @code{F_SETFD}, @code{F_GETFL}, @code{F_SETFL}, @code{F_GETOWN}, @code{F_SETOWN}, @code{F_GETLK}, @code{F_SETLK}, and @code{F_SETLKW} on some platforms: mingw, MSVC 14. @item When a file does not support locking (such as on an NFS file system that does not support file locking), calls with @code{F_SETLK} and @code{F_SETLKW} fail with @code{errno} set to different values on different systems: @code{EINVAL} on OpenIndiana (as suggested by the POSIX 1003.1-2017 @code{fcntl} specification), @code{ENOLCK} on GNU/Linux, and @code{EOPNOTSUPP} on FreeBSD. @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdatasync.texi������������������������������������������0000664�0000000�0000000�00000001024�14110572173�0023060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdatasync @section @code{fdatasync} @findex fdatasync POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html} Gnulib module: fdatasync Portability problems fixed by Gnulib: @itemize @item This function is present but not declared on some platforms: Mac OS X 10.7. @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 11.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 2.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdetach.texi��������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0022504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdetach @section @code{fdetach} @findex fdetach POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdetach.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdim.texi�����������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdim @section @code{fdim} @findex fdim POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdim.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdimf.texi����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdimf @section @code{fdimf} @findex fdimf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdimf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdiml.texi����������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdiml @section @code{fdiml} @findex fdiml POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdiml.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdiv.texi�����������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdiv @section @code{fdiv} @findex fdiv Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdivl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdivl @section @code{fdivl} @findex fdivl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fdopen.texi���������������������������������������������0000664�0000000�0000000�00000000756�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdopen @section @code{fdopen} @findex fdopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdopen.html} Gnulib module: fdopen Portability problems fixed by Gnulib: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������gnulib-20210822~d383792/doc/posix-functions/fdopendir.texi������������������������������������������0000664�0000000�0000000�00000001771�14110572173�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdopendir @section @code{fdopendir} @findex fdopendir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdopendir.html} Gnulib module: fdopendir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. Also, the replacement does not guarantee that @samp{dirfd(fdopendir(n))==n} (dirfd might fail, or return a different file descriptor than n). @item This function exists but is not declared on some platforms: FreeBSD 7.3. @item This function does not reject non-directory file descriptors on some platforms: GNU/Hurd. @item This function mistakenly closes non-directory file descriptors on some platforms: FreeBSD 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������gnulib-20210822~d383792/doc/posix-functions/feclearexcept.texi��������������������������������������0000664�0000000�0000000�00000000754�14110572173�0023727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feclearexcept @section @code{feclearexcept} @findex feclearexcept POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/feclearexcept.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ��������������������gnulib-20210822~d383792/doc/posix-functions/fegetenv.texi�������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetenv @section @code{fegetenv} @findex fegetenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fegetenv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/fegetexceptflag.texi������������������������������������0000664�0000000�0000000�00000000764�14110572173�0024253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetexceptflag @section @code{fegetexceptflag} @findex fegetexceptflag POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fegetexceptflag.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ������������gnulib-20210822~d383792/doc/posix-functions/fegetmode.texi������������������������������������������0000664�0000000�0000000�00000001175�14110572173�0023052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetmode @section @code{fegetmode} @findex fegetmode Documentation:@* @ifinfo @ref{Control Functions,,Floating-Point Control Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Control-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fegetround.texi�����������������������������������������0000664�0000000�0000000�00000000723�14110572173�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetround @section @code{fegetround} @findex fegetround POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fegetround.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ���������������������������������������������gnulib-20210822~d383792/doc/posix-functions/feholdexcept.texi���������������������������������������0000664�0000000�0000000�00000000735�14110572173�0023566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feholdexcept @section @code{feholdexcept} @findex feholdexcept POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/feholdexcept.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/feof.texi�����������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feof @section @code{feof} @findex feof POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/feof.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/feraiseexcept.texi��������������������������������������0000664�0000000�0000000�00000000757�14110572173�0023747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feraiseexcept @section @code{feraiseexcept} @findex feraiseexcept POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/feraiseexcept.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 14, Android 4.4. @end itemize �����������������gnulib-20210822~d383792/doc/posix-functions/ferror.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ferror @section @code{ferror} @findex ferror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ferror.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fesetenv.texi�������������������������������������������0000664�0000000�0000000�00000000730�14110572173�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetenv @section @code{fesetenv} @findex fesetenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fesetenv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ����������������������������������������gnulib-20210822~d383792/doc/posix-functions/fesetexcept.texi����������������������������������������0000664�0000000�0000000�00000001210�14110572173�0023420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetexcept @section @code{fesetexcept} @findex fesetexcept Documentation:@* @ifinfo @ref{Status bit operations,,Examining the FPU status word,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Status-bit-operations.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fesetexceptflag.texi������������������������������������0000664�0000000�0000000�00000000766�14110572173�0024271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetexceptflag @section @code{fesetexceptflag} @findex fesetexceptflag POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fesetexceptflag.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ����������gnulib-20210822~d383792/doc/posix-functions/fesetmode.texi������������������������������������������0000664�0000000�0000000�00000001175�14110572173�0023066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetmode @section @code{fesetmode} @findex fesetmode Documentation:@* @ifinfo @ref{Control Functions,,Floating-Point Control Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Control-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fesetround.texi�����������������������������������������0000664�0000000�0000000�00000000723�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetround @section @code{fesetround} @findex fesetround POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fesetround.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ���������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fetestexcept.texi���������������������������������������0000664�0000000�0000000�00000000750�14110572173�0023614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fetestexcept @section @code{fetestexcept} @findex fetestexcept POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fetestexcept.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4. @end itemize ������������������������gnulib-20210822~d383792/doc/posix-functions/fetestexceptflag.texi�����������������������������������0000664�0000000�0000000�00000001227�14110572173�0024446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fetestexceptflag @section @code{fetestexceptflag} @findex fetestexceptflag Documentation:@* @ifinfo @ref{Status bit operations,,Examining the FPU status word,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Status-bit-operations.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/feupdateenv.texi����������������������������������������0000664�0000000�0000000�00000000747�14110572173�0023425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feupdateenv @section @code{feupdateenv} @findex feupdateenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/feupdateenv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 14, Android 4.4. @end itemize �������������������������gnulib-20210822~d383792/doc/posix-functions/fexecve.texi��������������������������������������������0000664�0000000�0000000�00000001005�14110572173�0022530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fexecve @section @code{fexecve} @findex fexecve POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fexecve.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 14, Android 8.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fflush.texi���������������������������������������������0000664�0000000�0000000�00000003125�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fflush @section @code{fflush} @findex fflush POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html} Gnulib module: fflush Portability problems fixed by Gnulib: @itemize @item @code{fflush} followed by @code{fseek} or @code{fseeko}, applied to an input stream, should have the effect of positioning the underlying file descriptor. It doesn't do this on some platforms: glibc 2.34, FreeBSD 13.0, and others. @item @code{fflush} on an input stream changes the position of the stream to the end of the previous buffer, on some platforms: mingw, MSVC 14. @item @code{fflush} on an input stream right after @code{ungetc} does not discard the @code{ungetc} buffer, on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Cygwin 1.5.25-10. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{fflush}, @code{ftell}, @code{ftello}, @code{fgetpos} behave incorrectly on input streams that are opened in @code{O_TEXT} mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item This function crashes if the stream's file descriptor has already been closed, if @code{MSVC_INVALID_PARAMETER_HANDLING} is @code{HAIRY_LIBRARY_HANDLING} or @code{SANE_LIBRARY_HANDLING}, on some platforms: MSVC 14. @item @code{fflush} on an input stream right after @code{ungetc} does not discard the @code{ungetc} buffer, on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ffs.texi������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ffs @section @code{ffs} @findex ffs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ffs.html} Gnulib module: ffs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fgetc.texi����������������������������������������������0000664�0000000�0000000�00000002350�14110572173�0022177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetc @section @code{fgetc} @findex fgetc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetc.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item This function crashes if the stream's file descriptor has already been closed, if @code{MSVC_INVALID_PARAMETER_HANDLING} is @code{HAIRY_LIBRARY_HANDLING} or @code{SANE_LIBRARY_HANDLING}, on some platforms: MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fgetpos.texi��������������������������������������������0000664�0000000�0000000�00000001303�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetpos @section @code{fgetpos} @findex fgetpos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetpos.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{fflush}, @code{ftell}, @code{ftello}, @code{fgetpos} behave incorrectly on input streams that are opened in @code{O_TEXT} mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fgets.texi����������������������������������������������0000664�0000000�0000000�00000002013�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgets @section @code{fgets} @findex fgets POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fgetwc.texi���������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetwc @section @code{fgetwc} @findex fgetwc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetwc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/fgetws.texi���������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetws @section @code{fgetws} @findex fgetws POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetws.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/fileno.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fileno @section @code{fileno} @findex fileno POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fileno.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/flockfile.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node flockfile @section @code{flockfile} @findex flockfile POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/flockfile.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/floor.texi����������������������������������������������0000664�0000000�0000000�00000000674�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floor @section @code{floor} @findex floor POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/floor.html} Gnulib module: floor or floor-ieee Portability problems fixed by either Gnulib module @code{floor} or @code{floor-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{floor-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/floorf.texi���������������������������������������������0000664�0000000�0000000�00000001174�14110572173�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floorf @section @code{floorf} @findex floorf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/floorf.html} Gnulib module: floorf or floorf-ieee Portability problems fixed by either Gnulib module @code{floorf} or @code{floorf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{floorf-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/floorl.texi���������������������������������������������0000664�0000000�0000000�00000001052�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floorl @section @code{floorl} @findex floorl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/floorl.html} Gnulib module: floorl or floorl-ieee Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fma.texi������������������������������������������������0000664�0000000�0000000�00000001076�14110572173�0021656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fma @section @code{fma} @findex fma POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fma.html} Gnulib module: fma Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @item This function produces wrong results on some platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 6.4/x86, NetBSD 8.0, Cygwin 1.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaf.texi�����������������������������������������������0000664�0000000�0000000�00000001352�14110572173�0022021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaf @section @code{fmaf} @findex fmaf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmaf.html} Gnulib module: fmaf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @item This function produces wrong results on some platforms: glibc 2.11, Mac OS X 10.5, FreeBSD 6.4/x86, FreeBSD 12.2/arm, Cygwin 1.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function produces wrong results on some platforms: musl libc/powerpc64le when emulated by QEMU 5.0.0. @c https://bugs.launchpad.net/qemu/+bug/1912934 @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmal.texi�����������������������������������������������0000664�0000000�0000000�00000001104�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmal @section @code{fmal} @findex fmal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmal.html} Gnulib module: fmal Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function produces wrong results on some platforms: glibc 2.11, macOS 10.13, FreeBSD 6.4/x86, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmax.texi�����������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmax @section @code{fmax} @findex fmax POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmax.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaxf.texi����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxf @section @code{fmaxf} @findex fmaxf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmaxf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaxl.texi����������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxl @section @code{fmaxl} @findex fmaxl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmaxl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaxmag.texi��������������������������������������������0000664�0000000�0000000�00000001176�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxmag @section @code{fmaxmag} @findex fmaxmag Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaxmagf.texi�������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0022667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxmagf @section @code{fmaxmagf} @findex fmaxmagf Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmaxmagl.texi�������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0022675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxmagl @section @code{fmaxmagl} @findex fmaxmagl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmemopen.texi�������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmemopen @section @code{fmemopen} @findex fmemopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmin.texi�����������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmin @section @code{fmin} @findex fmin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmin.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fminf.texi����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminf @section @code{fminf} @findex fminf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fminf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fminl.texi����������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminl @section @code{fminl} @findex fminl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fminl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fminmag.texi��������������������������������������������0000664�0000000�0000000�00000001176�14110572173�0022532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminmag @section @code{fminmag} @findex fminmag Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fminmagf.texi�������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0022665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminmagf @section @code{fminmagf} @findex fminmagf Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fminmagl.texi�������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0022673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminmagl @section @code{fminmagl} @findex fminmagl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmod.texi�����������������������������������������������0000664�0000000�0000000�00000001035�14110572173�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmod @section @code{fmod} @findex fmod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmod.html} Gnulib module: fmod or fmod-ieee Portability problems fixed by either Gnulib module @code{fmod} or @code{fmod-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{fmod-ieee}: @itemize @item This function has problems when the first argument is minus zero on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmodf.texi����������������������������������������������0000664�0000000�0000000�00000001314�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmodf @section @code{fmodf} @findex fmodf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmodf.html} Gnulib module: fmodf or fmodf-ieee Portability problems fixed by either Gnulib module @code{fmodf} or @code{fmodf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{fmodf-ieee}: @itemize @item This function has problems when the first argument is minus zero on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmodl.texi����������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmodl @section @code{fmodl} @findex fmodl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmodl.html} Gnulib module: fmodl or fmodl-ieee Portability problems fixed by either Gnulib module @code{fmodl} or @code{fmodl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function is not declared and does not work on some platforms: AIX 5.1. @end itemize Portability problems fixed by Gnulib module @code{fmodl-ieee}: @itemize @item This function has problems when the first argument is minus zero on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmtmsg.texi���������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmtmsg @section @code{fmtmsg} @findex fmtmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fmtmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmul.texi�����������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0022055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmul @section @code{fmul} @findex fmul Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fmull.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmull @section @code{fmull} @findex fmull Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fnmatch.texi��������������������������������������������0000664�0000000�0000000�00000001160�14110572173�0022525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fnmatch @section @code{fnmatch} @findex fnmatch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fnmatch.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fnmatch-3.html} Gnulib module: fnmatch or fnmatch-gnu Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is broken on some platforms: some versions of glibc, NetBSD 7.1, some versions of Solaris. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fopen.texi����������������������������������������������0000664�0000000�0000000�00000004252�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fopen @section @code{fopen} @findex fopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html} Gnulib module: fopen or fopen-gnu Portability problems fixed by either Gnulib module @code{fopen} or @code{fopen-gnu}: @itemize @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: HP-UX 11.00, AIX 7.1, Solaris 9. @item On platforms where @code{off_t} is a 32-bit type, @code{fopen} may not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Windows platforms (excluding Cygwin), this function does usually not recognize the @file{/dev/null} filename. @end itemize Portability problems fixed by Gnulib module @code{fopen-gnu}: @itemize @item This function does not support the mode character @samp{x} (corresponding to @code{O_EXCL}), introduced in ISO C11, on some platforms: FreeBSD 8.2, NetBSD 6.1, OpenBSD 5.6, Minix 3.2, AIX 6.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 1.7.16 (2012), mingw, MSVC 14. @item This function does not support the mode character @samp{e} (corresponding to @code{O_CLOEXEC}), introduced into a future POSIX revision through @url{https://www.austingroupbugs.net/view.php?id=411}, on some platforms: glibc 2.6, macOS 11.1, FreeBSD 9.0, NetBSD 5.1, OpenBSD 5.6, Minix 3.2, AIX 7.2, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 1.7.16 (2012), mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, this function returns a file stream in ``text'' mode by default; this means that it translates @code{'\n'} to CR/LF by default. Use the @code{"b"} flag if you need reliable binary I/O. @item On Windows platforms (excluding Cygwin), this function fails to open directories for reading. Such streams have implementation-defined semantics on other platforms. To avoid directory streams with a consistent error message, use @code{fstat} after @code{open} and @code{fdopen}, rather than @code{fopen} and @code{fileno}. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fork.texi�����������������������������������������������0000664�0000000�0000000�00000001463�14110572173�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fork @section @code{fork} @findex fork POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fork.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On some platforms, @code{fork} followed by a call of the @code{exec} family (@code{execl}, @code{execlp}, @code{execle}, @code{execv}, @code{execvp}, or @code{execve}) is less efficient than @code{vfork} followed by the same call. @code{vfork} is a variant of @code{fork} that has been introduced to optimize the @code{fork}/@code{exec} pattern. @item On Windows platforms (excluding Cygwin), this function is not implemented; use @code{_spawnvp} instead. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fpathconf.texi������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0023061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fpathconf @section @code{fpathconf} @findex fpathconf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fpathconf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fpclassify.texi�����������������������������������������0000664�0000000�0000000�00000000663�14110572173�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fpclassify @section @code{fpclassify} @findex fpclassify POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fpclassify.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize �����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fprintf.texi��������������������������������������������0000664�0000000�0000000�00000007615�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fprintf @section @code{fprintf} @findex fprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html} Gnulib module: fprintf-posix or stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{fprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{fprintf-posix}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{fprintf-posix}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item Attempting to write to a read-only stream fails with @code{EOF} but does not set the error flag for @code{ferror} on some platforms: glibc 2.13, cygwin 1.7.9. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fputc.texi����������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputc @section @code{fputc} @findex fputc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fputc.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @item This function crashes if the stream's file descriptor has already been closed, if @code{MSVC_INVALID_PARAMETER_HANDLING} is @code{HAIRY_LIBRARY_HANDLING} or @code{SANE_LIBRARY_HANDLING}, on some platforms: MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fputs.texi����������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputs @section @code{fputs} @findex fputs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fputs.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fputwc.texi���������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputwc @section @code{fputwc} @findex fputwc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fputwc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/fputws.texi���������������������������������������������0000664�0000000�0000000�00000001224�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputws @section @code{fputws} @findex fputws POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fputws.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fread.texi����������������������������������������������0000664�0000000�0000000�00000002350�14110572173�0022170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fread @section @code{fread} @findex fread POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fread.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item This function crashes if the stream's file descriptor has already been closed, if @code{MSVC_INVALID_PARAMETER_HANDLING} is @code{HAIRY_LIBRARY_HANDLING} or @code{SANE_LIBRARY_HANDLING}, on some platforms: MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/free.texi�����������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node free @section @code{free} @findex free POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/free.html} Gnulib module: free-posix Portability problems fixed by Gnulib: @itemize @item This function may clobber @code{errno} on many platforms: glibc 2.32, Mac OS X, FreeBSD, NetBSD, OpenBSD 4.4, Minix, AIX, HP-UX, IRIX, Cygwin, mingw, MSVC. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/freeaddrinfo.texi���������������������������������������0000664�0000000�0000000�00000001217�14110572173�0023540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freeaddrinfo @section @code{freeaddrinfo} @findex freeaddrinfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/freeaddrinfo.html} Gnulib module: getaddrinfo Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @item On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in @code{<netdb.h>}. @item On Windows, in 32-bit mode, this function is defined with a calling convention that is different from @code{cdecl}. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/freelocale.texi�����������������������������������������0000664�0000000�0000000�00000001135�14110572173�0023210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freelocale @section @code{freelocale} @findex freelocale POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/freelocale.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. @item This function is useless because the @code{locale_t} type is not defined on some platforms: z/OS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/freopen.texi��������������������������������������������0000664�0000000�0000000�00000002655�14110572173�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freopen @section @code{freopen} @findex freopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/freopen.html} Gnulib module: freopen Portability problems fixed by Gnulib: @itemize @item On some platforms, if @code{stream} does not already have an open file descriptor, @code{freopen} returns the stream without opening the file: glibc 2.24. @item On platforms where @code{off_t} is a 32-bit type, @code{freopen} may not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Windows platforms (excluding Cygwin), this function does usually not recognize the @file{/dev/null} filename. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item This function does not support a @code{NULL} file name argument on some platforms: OpenBSD 4.9, AIX 7.1, HP-UX 11.23, IRIX 6.5, Solaris 10, mingw, MSVC 14. @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: HP-UX 11.00, Solaris 9. @item Applications should not assume that @code{fileno(f)} will be the same before and after a call to @code{freopen(name,mode,f)}. However, the module @code{freopen-safer} can at least protect @code{stdin}, @code{stdout}, and @code{stderr}. @end itemize �����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/frexp.texi����������������������������������������������0000664�0000000�0000000�00000001100�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexp @section @code{frexp} @findex frexp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/frexp.html} Gnulib module: frexp Portability problems fixed by Gnulib: @itemize @item This function does not work on denormalized numbers on some platforms: NetBSD 3.0. @item This function does not work on negative zero on some platforms: NetBSD 4.99, MSVC 14. @item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/frexpf.texi���������������������������������������������0000664�0000000�0000000�00000001233�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexpf @section @code{frexpf} @findex frexpf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/frexpf.html} Gnulib module: frexpf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function does not work on negative zero on some platforms: mingw. @item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/frexpl.texi���������������������������������������������0000664�0000000�0000000�00000001503�14110572173�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexpl @section @code{frexpl} @findex frexpl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/frexpl.html} Gnulib module: frexpl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function does not work on finite numbers on some platforms: AIX 5.1, MSVC 14. @item This function does not work on denormalized numbers on some platforms: macOS 10.13/i386. @item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfp.texi���������������������������������������������0000664�0000000�0000000�00000001150�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfp @section @code{fromfp} @findex fromfp Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfpf.texi��������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfpf @section @code{fromfpf} @findex fromfpf Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfpl.texi��������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfpl @section @code{fromfpl} @findex fromfpl Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfpx.texi��������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfpx @section @code{fromfpx} @findex fromfpx Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfpxf.texi�������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfpxf @section @code{fromfpxf} @findex fromfpxf Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fromfpxl.texi�������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fromfpxl @section @code{fromfpxl} @findex fromfpxl Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fscanf.texi���������������������������������������������0000664�0000000�0000000�00000002402�14110572173�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fscanf @section @code{fscanf} @findex fscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fscanf.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fseek.texi����������������������������������������������0000664�0000000�0000000�00000001271�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fseek @section @code{fseek} @findex fseek POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fseek.html} Gnulib module: fseek Portability problems fixed by Gnulib: @itemize @item This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On platforms where @code{long} is a 32-bit type, @code{fseek} does not work correctly with files larger than 2 GB, even when the @code{AC_SYS_LARGEFILE} macro is used. The fix is to use @code{fseeko} instead. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fseeko.texi���������������������������������������������0000664�0000000�0000000�00000001323�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fseeko @section @code{fseeko} @findex fseeko POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fseeko.html} Gnulib module: fseeko Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item The declaration of @code{fseeko} in @code{<stdio.h>} is not enabled by default on some platforms: glibc 2.3.6. @item This function fails on seekable stdin, stdout, and stderr: cygwin <= 1.5.24. @item On platforms where @code{off_t} is a 32-bit type, @code{fseeko} does not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fsetpos.texi��������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsetpos @section @code{fsetpos} @findex fsetpos POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsetpos.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/fstat.texi����������������������������������������������0000664�0000000�0000000�00000003042�14110572173�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstat @section @code{fstat} @findex fstat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fstat.html} Gnulib module: fstat Portability problems fixed by Gnulib: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{fstat} may not correctly report the size of files or block devices larger than 2 GB. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Solaris 11.4, when this function yields a timestamp with a nonpositive @code{tv_sec} value, @code{tv_nsec} might be in the range @minus{}1000000000..@minus{}1, representing a negative nanoseconds offset from @code{tv_sec}. @item The @code{st_atime}, @code{st_ctime}, @code{st_mtime} fields are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable @code{TZ} is set). @end itemize Portability problems not fixed by Gnulib: @itemize @item @xref{sys/stat.h}, for general portability problems with @code{struct stat}. @item On Cygwin, @code{fstat} applied to the file descriptors 0 and 1, returns different @code{st_ino} values, even if standard input and standard output are not redirected and refer to the same terminal. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fstatat.texi��������������������������������������������0000664�0000000�0000000�00000002715�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstatat @section @code{fstatat} @findex fstatat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fstatat.html} Gnulib module: fstatat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item On platforms where @code{off_t} is a 32-bit type, @code{fstatat} may not correctly report the size of files or block devices larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item On some platforms, @code{fstatat(fd,"file/",buf,flag)} succeeds instead of failing with @code{ENOTDIR}. Solaris 9. @item For symlinks, when the argument ends in a slash, some platforms don't dereference the argument: Solaris 9. @item On Solaris 11.4, when this function yields a timestamp with a nonpositive @code{tv_sec} value, @code{tv_nsec} might be in the range @minus{}1000000000..@minus{}1, representing a negative nanoseconds offset from @code{tv_sec}. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not fail when the second argument is an empty string on some platforms, even when @code{AT_EMPTY_PATH} is not used: glibc 2.7, Linux 2.6.38. @item @xref{sys/stat.h}, for general portability problems with @code{struct stat}. @end itemize ���������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fstatvfs.texi�������������������������������������������0000664�0000000�0000000�00000001220�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstatvfs @section @code{fstatvfs} @findex fstatvfs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fstatvfs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14, Android 4.3. @item On platforms where @code{f_blocks} in @samp{struct statvfs} is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. This affects glibc/Hurd, HP-UX 11, Solaris. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fsub.texi�����������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsub @section @code{fsub} @findex fsub Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fsubl.texi����������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsubl @section @code{fsubl} @findex fsubl Documentation:@* @ifinfo @ref{Misc FP Arithmetic,,Miscellaneous FP arithmetic functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Misc-FP-Arithmetic.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.27, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fsync.texi����������������������������������������������0000664�0000000�0000000�00000000756�14110572173�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsync @section @code{fsync} @findex fsync POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html} Gnulib module: fsync Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item If the argument is a read-only file descriptor, this function fails with @code{EBADF} on some platforms: AIX 7.2, Cygwin 2.9. @end itemize ������������������gnulib-20210822~d383792/doc/posix-functions/ftell.texi����������������������������������������������0000664�0000000�0000000�00000002411�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftell @section @code{ftell} @findex ftell POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftell.html} Gnulib module: ftell Portability problems fixed by Gnulib: @itemize @item This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. @item This function produces incorrect results after @code{putc} that followed a @code{getc} call that reached EOF on some platforms: Solaris 11 2010-11. @item This function, when invoked after @code{ungetc}, throws away the @code{ungetc} buffer, changes the stream's file position, and returns the wrong position on some platforms: macOS 10.15 and newer. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function produces incorrect results immediately after @code{fseek} on some platforms: HP-UX 11. @item @code{fflush}, @code{ftell}, @code{ftello}, @code{fgetpos} behave incorrectly on input streams that are opened in @code{O_TEXT} mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. @item On platforms where @code{long} is a 32-bit type, @code{ftell} does not work correctly with files larger than 2 GB, even when the @code{AC_SYS_LARGEFILE} macro is used. The fix is to use @code{ftello} instead. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ftello.texi���������������������������������������������0000664�0000000�0000000�00000002610�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftello @section @code{ftello} @findex ftello POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftello.html} Gnulib module: ftello Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item The declaration of @code{ftello} in @code{<stdio.h>} is not enabled by default on some platforms: glibc 2.3.6. @item This function produces incorrect results after @code{putc} that followed a @code{getc} call that reached EOF on some platforms: Solaris 11 2010-11. @item This function, when invoked after @code{ungetc}, throws away the @code{ungetc} buffer, changes the stream's file position, and returns the wrong position on some platforms: macOS 10.15 and newer. @item This function fails on seekable stdin, stdout, and stderr: cygwin <= 1.5.24. @item On platforms where @code{off_t} is a 32-bit type, @code{ftello} does not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @item This function produces incorrect results immediately after @code{fseek} on some platforms: HP-UX 11. @item @code{fflush}, @code{ftell}, @code{ftello}, @code{fgetpos} behave incorrectly on input streams that are opened in @code{O_TEXT} mode and whose contents contains Unix line terminators (LF), on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ftok.texi�����������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0022055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftok @section @code{ftok} @findex ftok POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftok.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ftruncate.texi������������������������������������������0000664�0000000�0000000�00000001067�14110572173�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftruncate @section @code{ftruncate} @findex ftruncate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html} Gnulib module: ftruncate Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function is not applicable to arbitrary lengths for files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ftrylockfile.texi���������������������������������������0000664�0000000�0000000�00000000621�14110572173�0023603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftrylockfile @section @code{ftrylockfile} @findex ftrylockfile POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftrylockfile.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ftw.texi������������������������������������������������0000664�0000000�0000000�00000001136�14110572173�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftw @section @code{ftw} @findex ftw POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftw.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 4.1. @item On platforms where @code{off_t} is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/funlockfile.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node funlockfile @section @code{funlockfile} @findex funlockfile POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/funlockfile.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/futimens.texi�������������������������������������������0000664�0000000�0000000�00000003301�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node futimens @section @code{futimens} @findex futimens POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html} Gnulib module: futimens Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.5, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.3. However, the replacement function may end up truncating timestamps to worse resolution than supported by the file system. @item This function returns a bogus value instead of failing with @code{ENOSYS} on some platforms: Linux kernel 2.6.21. @item When using @code{UTIME_OMIT} or @code{UTIME_NOW}, some systems require the @code{tv_sec} argument to be 0, and don't necessarily handle all file permissions in the manner required by POSIX: Linux kernel 2.6.25. @item When using @code{UTIME_OMIT} for the modification time, but specifying an access time, some systems fail to update the change time: Linux kernel 2.6.32, macOS 11.1, NetBSD 9.0, Solaris 11.1. @item Passing @code{AT_FDCWD} as the fd argument does not properly fail with @code{EBADF} on some systems: glibc 2.11, musl libc, Solaris 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms lack the ability to change the timestamps of a file descriptor, so the replacement can fail with @code{ENOSYS}; the gnulib module @samp{utimens} provides a more reliable interface @code{fdutimens}. @item The mere act of using @code{stat} modifies the access time of directories on some platforms, so @code{utimensat} can only effectively change directory modification time: Cygwin 1.5.x. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fwide.texi����������������������������������������������0000664�0000000�0000000�00000001220�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwide @section @code{fwide} @findex fwide POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fwide.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x, MSVC 14. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item @code{fwide} is not guaranteed to be able to change a file stream's mode to a different mode than the current one. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fwprintf.texi�������������������������������������������0000664�0000000�0000000�00000001774�14110572173�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwprintf @section @code{fwprintf} @findex fwprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fwprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ����gnulib-20210822~d383792/doc/posix-functions/fwrite.texi���������������������������������������������0000664�0000000�0000000�00000002452�14110572173�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwrite @section @code{fwrite} @findex fwrite POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fwrite.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @item This function crashes if the stream's file descriptor has already been closed, if @code{MSVC_INVALID_PARAMETER_HANDLING} is @code{HAIRY_LIBRARY_HANDLING} or @code{SANE_LIBRARY_HANDLING}, on some platforms: MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/fwscanf.texi��������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwscanf @section @code{fwscanf} @findex fwscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/fwscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-fwscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gai_strerror.texi���������������������������������������0000664�0000000�0000000�00000001224�14110572173�0023610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gai_strerror @section @code{gai_strerror} @findex gai_strerror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gai_strerror.html} Gnulib module: getaddrinfo Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x. @item This function is only available in @code{<ws2tcpip.h>} on some platforms: mingw, MSVC 14. @item This function's return type is @code{char *} instead of @code{const char *} on some platforms: AIX 7.1, HP-UX 11, Solaris 9, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getaddrinfo.texi����������������������������������������0000664�0000000�0000000�00000001405�14110572173�0023375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getaddrinfo @section @code{getaddrinfo} @findex getaddrinfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html} Gnulib module: getaddrinfo Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @item On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in @code{<netdb.h>}. @item On Windows, in 32-bit mode, this function is defined with a calling convention that is different from @code{cdecl}. @end itemize Portability problems not fixed by Gnulib: @itemize @item Unlike glibc's implementation, gnulib's replacement does not support internationalized domain names (IDN) encoding. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getc.texi�����������������������������������������������0000664�0000000�0000000�00000002007�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getc @section @code{getc} @findex getc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getc.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getc_unlocked.texi��������������������������������������0000664�0000000�0000000�00000000625�14110572173�0023720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getc_unlocked @section @code{getc_unlocked} @findex getc_unlocked POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getc_unlocked.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getchar.texi��������������������������������������������0000664�0000000�0000000�00000002023�14110572173�0022521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getchar @section @code{getchar} @findex getchar POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getchar.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getchar_unlocked.texi�����������������������������������0000664�0000000�0000000�00000000641�14110572173�0024411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getchar_unlocked @section @code{getchar_unlocked} @findex getchar_unlocked POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getchar_unlocked.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getcwd.texi���������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getcwd @section @code{getcwd} @findex getcwd POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getcwd.html} Gnulib module: getcwd or getcwd-lgpl Portability problems fixed by either Gnulib module @code{getcwd} or @code{getcwd-lgpl}: @itemize @item This function is declared in different header files (namely, @code{<io.h>} or @code{<direct.h>}) on some platforms: mingw, MSVC 14. @item On glibc and Solaris 11.4 platforms, @code{getcwd (NULL, n)} allocates memory for the result. On some other platforms, this call is not allowed. @item On some platforms, the prototype for @code{getcwd} uses @code{int} instead of @code{size_t} for the size argument when using non-standard headers, and the declaration is missing from @code{<unistd.h>}: mingw, MSVC 14. @item On some platforms, @code{getcwd (buf, 0)} crashes: MSVC 14. @item On some platforms, @code{getcwd (buf, 0)} fails with @code{ERANGE} instead of the required @code{EINVAL}: mingw. @end itemize Portability problems fixed by Gnulib module @code{getcwd}: @itemize @item This function does not handle long file names (greater than @code{PATH_MAX}) correctly on some platforms: glibc on Linux 2.4.20, musl libc 1.2.2/powerpc64le, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item When using @code{getcwd(NULL, nonzero)}, some platforms, such as glibc or cygwin, allocate exactly @code{nonzero} bytes and fail with @code{ERANGE} if it was not big enough, while other platforms, such as FreeBSD, mingw, or MSVC 14, ignore the size argument and allocate whatever size is necessary. If this call succeeds, an application cannot portably access beyond the string length of the result. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getdate.texi��������������������������������������������0000664�0000000�0000000�00000001133�14110572173�0022522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdate @section @code{getdate} @findex getdate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getdate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Gnulib provides a module @code{parse-datetime} that contains a function @code{parse_datetime} that has similar functionality as the @code{getdate} function. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getdate_err.texi����������������������������������������0000664�0000000�0000000�00000000744�14110572173�0023401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdate_err @section @code{getdate_err} @findex getdate_err POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getdate_err.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 10.13, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, IRIX 6.5, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������gnulib-20210822~d383792/doc/posix-functions/getdelim.texi�������������������������������������������0000664�0000000�0000000�00000001346�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdelim @section @code{getdelim} @findex getdelim POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html} Gnulib module: getdelim Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14, Android 4.2. @item This function crashes when passed a pointer to a NULL buffer together with a pointer to a non-zero buffer size on some platforms: FreeBSD 8.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has quadratic running time for long lines on some platforms: uClibc 0.9.31. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getegid.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getegid @section @code{getegid} @findex getegid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getegid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getenv.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getenv @section @code{getenv} @findex getenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getenv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/geteuid.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node geteuid @section @code{geteuid} @findex geteuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/geteuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgid.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgid @section @code{getgid} @findex getgid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgrent.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrent @section @code{getgrent} @findex getgrent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgrent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgrgid.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrgid @section @code{getgrgid} @findex getgrgid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgrgid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgrgid_r.texi�����������������������������������������0000664�0000000�0000000�00000001050�14110572173�0023220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrgid_r @section @code{getgrgid_r} @findex getgrgid_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgrgid_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.3 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 6.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgrnam.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrnam @section @code{getgrnam} @findex getgrnam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgrnam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgrnam_r.texi�����������������������������������������0000664�0000000�0000000�00000001050�14110572173�0023230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrnam_r @section @code{getgrnam_r} @findex getgrnam_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgrnam_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.3 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 6.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getgroups.texi������������������������������������������0000664�0000000�0000000�00000002347�14110572173�0023134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgroups @section @code{getgroups} @findex getgroups POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getgroups.html} Gnulib module: getgroups Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On some platforms, this function fails to reject a negative count, even though that is less than the size that would be returned: macOS 11.1, FreeBSD 13.0. @item On NeXTstep 3.2, @code{getgroups (0, NULL)} always fails. See macro @samp{AC_FUNC_GETGROUPS}. @item On very old systems, this function operated on an array of @samp{int}, even though that was a different size than an array of @samp{gid_t}. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is unsafe to call between @code{fork} and @code{exec} if the parent process is multi-threaded. @item It is unspecified whether the effective group id will be included in the returned list, nor whether the list will be sorted in any particular order. For that matter, some platforms include the effective group id twice, if it is also a member of the current supplemental group ids. @end itemize The Gnulib module @code{mgetgroups} provides a similar API. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gethostent.texi�����������������������������������������0000664�0000000�0000000�00000000625�14110572173�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostent @section @code{gethostent} @findex gethostent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gethostid.texi������������������������������������������0000664�0000000�0000000�00000000622�14110572173�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostid @section @code{gethostid} @findex gethostid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gethostname.texi����������������������������������������0000664�0000000�0000000�00000001523�14110572173�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostname @section @code{gethostname} @findex gethostname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostname.html} Gnulib module: gethostname Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<winsock2.h>}) on some platforms: MSVC 14. @item On mingw and MSVC 14, this function has a prototype that differs from that specified by POSIX, and it is defined only in the ws2_32 library. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function's second argument type is @code{int} instead of @code{size_t} on some platforms: Solaris 10. @item If the given buffer is too small for the host name, some implementations fail with @code{EINVAL}, instead of returning a truncated host name. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getitimer.texi������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getitimer @section @code{getitimer} @findex getitimer POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getitimer.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getline.texi��������������������������������������������0000664�0000000�0000000�00000001624�14110572173�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getline @section @code{getline} @findex getline POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html} Gnulib module: getline Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14, Android 4.2. @item This function is missing a declaration on some platforms: AIX 7.1. @item Some platforms provide a function by this name but with the wrong signature, for example in -linet. @item This function crashes when passed a pointer to a NULL buffer together with a pointer to a non-zero buffer size on some platforms: FreeBSD 8.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has quadratic running time for long lines on some platforms: uClibc 0.9.31. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getlogin.texi�������������������������������������������0000664�0000000�0000000�00000001113�14110572173�0022713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getlogin @section @code{getlogin} @findex getlogin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html} Gnulib module: getlogin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: older mingw, MSVC 14. @item This function is not declared unless @code{_POSIX} is defined on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function returns an empty string even when standard input is a tty on some platforms: HP-UX 11.11. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getlogin_r.texi�����������������������������������������0000664�0000000�0000000�00000002077�14110572173�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getlogin_r @section @code{getlogin_r} @findex getlogin_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin_r.html} Gnulib module: getlogin_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 8.1. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @item This function returns a truncated result, instead of failing with error code @code{ERANGE}, when the buffer is not large enough, on some platforms: macOS 11.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: MidnightBSD 2.0, Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @item This function fails even when standard input is a tty on some platforms: HP-UX 11.11. @item This function fails with error code @code{EINVAL} instead of @code{ERANGE} when the second argument is zero on some platforms: HP-UX 11.31. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getmsg.texi���������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getmsg @section @code{getmsg} @findex getmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getnameinfo.texi����������������������������������������0000664�0000000�0000000�00000000655�14110572173�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnameinfo @section @code{getnameinfo} @findex getnameinfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnameinfo.html} Gnulib module: getaddrinfo Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getnetbyaddr.texi���������������������������������������0000664�0000000�0000000�00000000620�14110572173�0023561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetbyaddr @section @code{getnetbyaddr} @findex getnetbyaddr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnetbyaddr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getnetbyname.texi���������������������������������������0000664�0000000�0000000�00000000620�14110572173�0023567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetbyname @section @code{getnetbyname} @findex getnetbyname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnetbyname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getnetent.texi������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetent @section @code{getnetent} @findex getnetent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnetent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getopt.texi���������������������������������������������0000664�0000000�0000000�00000006102�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getopt @section @code{getopt} @findex getopt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/libutil-getopt-3.html} Gnulib module: getopt-posix or getopt-gnu The module @code{getopt-gnu} has support for ``long options'' and for ``options that take optional arguments''. Compared to the API defined by POSIX, it adds a header file @code{<getopt.h>} and a function @code{getopt_long}. Portability problems fixed by either Gnulib module @code{getopt-posix} or @code{getopt-gnu}: @itemize @item This function is missing on some platforms: MSVC 14. @item The value of @code{optind} after a missing required argument is wrong on some platforms: macOS 11.1, AIX 7.1, mingw. @end itemize Portability problems fixed by Gnulib module @code{getopt-gnu}: @itemize @item The function @code{getopt} does not support the @samp{+} flag in the options string on some platforms: macOS 11.1, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11 2010-11. @item The function @code{getopt} does not obey the combination of @samp{+} and @samp{:} flags in the options string on some platforms: glibc 2.11. @item The function @code{getopt} does not obey the @samp{-} flag in the options string when @env{POSIXLY_CORRECT} is set on some platforms: Cygwin 1.7.0. @item The function @code{getopt} does not support options with optional arguments on some platforms: macOS 11.1, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.5.x. @item The function @code{getopt_long} is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 14. @item The function @code{getopt_long} does not support abbreviated long options where all disambiguations are equivalent on some platforms: OpenBSD 5.0. @item The function @code{getopt_long_only} is missing on some platforms: FreeBSD 5.2.1, NetBSD 9.0, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item This function crashes if the option string includes @code{W;} on some platforms: glibc 2.14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The default behavior of the glibc implementation of @code{getopt} allows mixing option and non-option arguments on the command line in any order. Other implementations, such as the one in Cygwin, enforce strict POSIX compliance: they require that the option arguments precede the non-option arguments. This is something to watch out in your program's testsuite. @item The glibc implementation allows a complete reset of the environment, including re-checking for @env{POSIXLY_CORRECT}, by setting @code{optind} to 0. Several BSD implementations provide @code{optreset}, causing a reset by setting it non-zero, although it does not necessarily re-read @env{POSIXLY_CORRECT}. Solaris @code{getopt} does not support either reset method, but does not maintain state that needs the extra level of reset. @item On some platforms, this function does not set the stream error indicator on attempts to write to a read-only stream: glibc 2.13, Cygwin 1.7.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpayload.texi�����������������������������������������0000664�0000000�0000000�00000001214�14110572173�0023236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpayload @section @code{getpayload} @findex getpayload Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpayloadf.texi����������������������������������������0000664�0000000�0000000�00000001217�14110572173�0023407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpayloadf @section @code{getpayloadf} @findex getpayloadf Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpayloadl.texi����������������������������������������0000664�0000000�0000000�00000001217�14110572173�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpayloadl @section @code{getpayloadl} @findex getpayloadl Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpeername.texi����������������������������������������0000664�0000000�0000000�00000001613�14110572173�0023404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpeername @section @code{getpeername} @findex getpeername POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpeername.html} Gnulib module: getpeername Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API} is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact considers it as a pointer to a 32-bit wide @code{unsigned int} entity. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @end itemize ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpgid.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpgid @section @code{getpgid} @findex getpgid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpgid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpgrp.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpgrp @section @code{getpgrp} @findex getpgrp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpgrp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpid.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpid @section @code{getpid} @findex getpid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpmsg.texi��������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpmsg @section @code{getpmsg} @findex getpmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getppid.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getppid @section @code{getppid} @findex getppid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getppid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpriority.texi����������������������������������������0000664�0000000�0000000�00000000600�14110572173�0023464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpriority @section @code{getpriority} @findex getpriority POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpriority.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getprotobyname.texi�������������������������������������0000664�0000000�0000000�00000000614�14110572173�0024147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotobyname @section @code{getprotobyname} @findex getprotobyname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getprotobyname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getprotobynumber.texi�����������������������������������0000664�0000000�0000000�00000000624�14110572173�0024520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotobynumber @section @code{getprotobynumber} @findex getprotobynumber POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getprotobynumber.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getprotoent.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotoent @section @code{getprotoent} @findex getprotoent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getprotoent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpwent.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwent @section @code{getpwent} @findex getpwent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpwnam.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwnam @section @code{getpwnam} @findex getpwnam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwnam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpwnam_r.texi�����������������������������������������0000664�0000000�0000000�00000001065�14110572173�0023254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwnam_r @section @code{getpwnam_r} @findex getpwnam_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwnam_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.3 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpwuid.texi�������������������������������������������0000664�0000000�0000000�00000001031�14110572173�0022732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwuid @section @code{getpwuid} @findex getpwuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is unsafe to call between @code{fork} and @code{exec} if the parent process is multi-threaded. Instead, use @code{getpwuid_r} prior to forking. @item This function is missing on some platforms: mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getpwuid_r.texi�����������������������������������������0000664�0000000�0000000�00000001302�14110572173�0023254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwuid_r @section @code{getpwuid_r} @findex getpwuid_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwuid_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.3 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is unsafe to call between @code{fork} and @code{exec} if the parent process is multi-threaded. Use it prior to forking. @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getrlimit.texi������������������������������������������0000664�0000000�0000000�00000001304�14110572173�0023105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getrlimit @section @code{getrlimit} @findex getrlimit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getrlimit.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getrlimit-1.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On platforms where @code{rlim_t} is a 32-bit type, this function does not allow to retrieve limits larger than 4 GB, such as for RLIMIT_FSIZE@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getrusage.texi������������������������������������������0000664�0000000�0000000�00000000755�14110572173�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getrusage @section @code{getrusage} @findex getrusage POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getrusage.html} Gnulib module: getrusage Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item Many platforms don't fill in all the fields of @code{struct rusage} with meaningful values. @end itemize �������������������gnulib-20210822~d383792/doc/posix-functions/gets.texi�����������������������������������������������0000664�0000000�0000000�00000001350�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gets @section @code{gets} @findex gets POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gets.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function should never be used, because it can overflow any given buffer. @item This function is missing on some platforms: OpenBSD 6.7, Solaris 11.4. @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getservbyname.texi��������������������������������������0000664�0000000�0000000�00000000610�14110572173�0023757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservbyname @section @code{getservbyname} @findex getservbyname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getservbyname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getservbyport.texi��������������������������������������0000664�0000000�0000000�00000000610�14110572173�0024023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservbyport @section @code{getservbyport} @findex getservbyport POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getservbyport.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getservent.texi�����������������������������������������0000664�0000000�0000000�00000000574�14110572173�0023303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservent @section @code{getservent} @findex getservent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getservent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getsid.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsid @section @code{getsid} @findex getsid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getsockname.texi����������������������������������������0000664�0000000�0000000�00000001613�14110572173�0023410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsockname @section @code{getsockname} @findex getsockname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockname.html} Gnulib module: getsockname Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API} is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact considers it as a pointer to a 32-bit wide @code{unsigned int} entity. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @end itemize ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getsockopt.texi�����������������������������������������0000664�0000000�0000000�00000002105�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsockopt @section @code{getsockopt} @findex getsockopt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockopt.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getsockopt-1.html} Gnulib module: getsockopt Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API} is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact considers it as a pointer to a 32-bit wide @code{unsigned int} entity. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms don't have a @code{socklen_t} type; in this case this function's fifth argument type is @samp{int *}. @item Many socket options are not available on all platforms. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getsubopt.texi������������������������������������������0000664�0000000�0000000�00000000772�14110572173�0023131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsubopt @section @code{getsubopt} @findex getsubopt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html} Gnulib module: getsubopt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @item This function is declared in @code{unistd.h} instead of @code{stdlib.h} on some platforms: Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������gnulib-20210822~d383792/doc/posix-functions/gettimeofday.texi���������������������������������������0000664�0000000�0000000�00000002164�14110572173�0023573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gettimeofday @section @code{gettimeofday} @findex gettimeofday POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gettimeofday.html} Gnulib module: gettimeofday Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item This function is declared with a nonstandard function prototype (only one argument, or ``...'' after the first argument) on some platforms. @item On some platforms, the second argument has type @code{struct timezone*} rather than @code{void *}, making it an error to redeclare the function with the POSIX signature: glibc. However, rather than penalize these systems with a replacement function, gnulib defines @code{GETTIMEOFDAY_TIMEZONE} to the appropriate type for use in avoiding a compiler warning if assigning @code{gettimeofday} to a function pointer. @item This function has only a precision of 15.6 milliseconds on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item Behavior is non-portable if the second argument to @code{gettimeofday} is not @code{NULL}. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getuid.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getuid @section @code{getuid} @findex getuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getutxent.texi������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxent @section @code{getutxent} @findex getutxent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getutxent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getutxid.texi�������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxid @section @code{getutxid} @findex getutxid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getutxid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getutxline.texi�����������������������������������������0000664�0000000�0000000�00000000660�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxline @section @code{getutxline} @findex getutxline POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getutxline.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/getwc.texi����������������������������������������������0000664�0000000�0000000�00000000767�14110572173�0022232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwc @section @code{getwc} @findex getwc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getwc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/getwchar.texi�������������������������������������������0000664�0000000�0000000�00000001003�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwchar @section @code{getwchar} @findex getwchar POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getwchar.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/glob.texi�����������������������������������������������0000664�0000000�0000000�00000001373�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node glob @section @code{glob} @findex glob POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/glob.html} Gnulib module: glob Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @item This function does not list symbolic links to nonexistent files among the results, on some platforms: glibc 2.26, AIX 7.2, HP-UX 11, Solaris 11.4. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms may store additional flags in the @code{gl_flags} field. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/globfree.texi�������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node globfree @section @code{globfree} @findex globfree POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/globfree.html} Gnulib module: glob Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gmtime.texi���������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gmtime @section @code{gmtime} @findex gmtime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. @end itemize �����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/gmtime_r.texi�������������������������������������������0000664�0000000�0000000�00000001132�14110572173�0022707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gmtime_r @section @code{gmtime_r} @findex gmtime_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html} Gnulib module: time_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/google-ranking.txt��������������������������������������0000664�0000000�0000000�00000146206�14110572173�0023671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������free 2420000 write 1570000 time 768000 strlen 702000 index 697000 printf 690000 fprintf 641000 errno 616000 strcmp 604000 malloc 574000 memset 556000 sprintf 550000 read 547000 remove 527000 strcpy 510000 exit 491000 system 459000 memcpy 455000 wait 388000 close 334000 fclose 328000 assert 327000 atoi 316000 fopen 315000 select 312000 strncpy 309000 signal 306000 strncmp 304000 times 300000 strchr 294000 log 259000 access 255000 socket 244000 open 227000 stat 220000 fgets 212000 link 206000 fflush 202000 strcat 201000 connect 198000 fcntl 195000 snprintf 185000 send 182000 random 172000 strdup 171000 accept 169000 abort 159000 memcmp 156000 strerror 154000 sscanf 153000 stdin 149000 strcasecmp 146000 exp 145000 realloc 144000 va_start 141000 gets 139000 ioctl 136000 strstr 133000 isspace 133000 getenv 131000 strrchr 129000 isdigit 125000 va_end 122000 clock 120000 sleep 119000 getopt 119000 perror 111000 unlink 110000 pipe 110000 kill 110000 calloc 108000 fputs 107000 getpid 97500 memmove 96000 bzero 92400 fwrite 90600 sync 89900 sqrt 88800 round 87800 optarg 85900 strtol 83200 poll 82900 htons 82500 syslog 82300 nice 81800 strncasecmp 81500 fabs 76600 mmap 76400 toupper 75300 abs 73500 ntohs 73100 qsort 72600 fork 72500 puts 70100 tolower 69400 fseek 67500 bcopy 66400 gettimeofday 66300 shutdown 65900 fread 65900 rename 64900 strtok 60600 fileno 60400 truncate 60100 getuid 60100 FD_ZERO 59900 fputc 58600 htonl 58300 FD_SET 56900 feof 55300 ntohl 53200 fstat 52300 atof 52200 floor 51800 chdir 51500 gethostbyname 51200 isalpha 50400 va_arg 49200 localtime 49000 putchar 48900 remainder 48800 sin 48700 alarm 48600 recv 48100 inet_ntoa 47500 getc 46900 ferror 46900 waitpid 46600 ctime 46400 putc 46200 usleep 45800 setjmp 45700 mkdir 45500 fscanf 43900 cos 43700 lseek 43600 FD_ISSET 43100 closedir 42900 ftell 42400 readdir 42100 bind 41800 vfprintf 41500 dup 41400 dup2 41300 y1 41200 isprint 41200 strtoul 40900 setsockopt 40900 isalnum 39800 vsprintf 39300 opendir 39300 gethostname 39000 strftime 38800 rand 38200 atexit 37700 vsnprintf 36400 raise 36000 isupper 35900 strncat 35600 crypt 35400 fgetc 35100 basename 34800 fdopen 34700 setlocale 34500 umask 34400 listen 33900 symlink 32900 chmod 32800 getcwd 32200 pow 31800 pthread_mutex_unlock 31700 getpwuid 31600 geteuid 31300 setuid 30100 lstat 29600 inet_addr 29500 pthread_mutex_lock 29300 popen 29100 dirname 29100 srand 29000 isatty 29000 ceil 28900 atol 28600 getpwnam 28300 environ 28300 pthread_create 27600 pclose 27200 islower 27200 longjmp 26500 _exit 26100 timezone 25900 div 25800 sendto 24900 getsockname 24600 gmtime 24300 readlink 24200 sigemptyset 23100 recvfrom 23000 sigaction 22400 putenv 22100 strtod 21900 munmap 21800 strpbrk 21700 utime 21500 uname 21500 chown 21400 scanf 21300 mktime 20900 rmdir 19800 ungetc 19600 setenv 19400 ftruncate 19400 atan2 19300 glob 18900 setgid 18600 setsid 18500 gethostbyaddr 18500 getgid 18300 execvp 18300 memchr 17800 openlog 17700 sysconf 17500 log10 17400 sigaddset 17000 strspn 16800 isxdigit 16800 getpeername 16300 pthread_mutex_init 16200 tcgetattr 16100 j1 15600 getchar 15400 dlopen 15300 setvbuf 15000 creat 15000 srandom 14800 freopen 14600 execl 14300 y0 13900 execv 13800 regcomp 13600 setbuf 13400 regexec 13300 pthread_join 12800 mktemp 12800 labs 12800 vprintf 12700 vfork 12600 getgrnam 12600 tcsetattr 12500 sigprocmask 12400 trunc 12300 tmpfile 12000 dlsym 11900 atan 11800 mkstemp 11600 h_errno 11300 FD_CLR 11300 acos 11100 seteuid 10800 inet_ntop 10800 getegid 10800 iscntrl 10700 getaddrinfo 10700 fchmod 10700 rindex 10600 pthread_self 10600 writev 10200 pthread_exit 10100 getppid 10100 tan 10000 ftime 10000 clearerr 10000 asctime 10000 setrlimit 9000 pthread_mutex_destroy 9000 pthread_cond_wait 9000 isgraph 9000 getwd 9000 getrlimit 9000 getlogin 9000 execlp 9000 dlerror 9000 ctan 9000 bsearch 9000 ttyname 8000 tmpnam 8000 strcspn 8000 shmget 8000 setitimer 8000 regfree 8000 nanosleep 8000 ispunct 8000 inet_pton 8000 fmod 8000 dlclose 8000 asin 8000 unsetenv 7000 strtok_r 7000 shmat 7000 rint 7000 regerror 7000 pthread_cond_signal 7000 pthread_cond_init 7000 localtime_r 7000 getgrgid 7000 freeaddrinfo 7000 fnmatch 7000 fchown 7000 difftime 7000 wcslen 6000 tempnam 6000 srand48 6000 realpath 6000 modf 6000 daylight 6000 closelog 6000 tanh 5000 sinh 5000 shmdt 5000 shmctl 5000 pthread_cond_destroy 5000 pthread_cancel 5000 mkfifo 5000 ldexp 5000 getnameinfo 5000 gai_strerror 5000 cosh 5000 strtoull 4000 strtoll 4000 sigsuspend 4000 pthread_sigmask 4000 pthread_detach 4000 pthread_cond_broadcast 4000 lrand48 4000 logf 4000 fsetpos 4000 frexp 4000 fgetpos 4000 drand48 4000 cfsetospeed 4000 cfsetispeed 4000 ulimit 3000 swab 3000 strptime 3000 sigset 3000 semop 3000 sem_wait 3000 pthread_setspecific 3000 pthread_mutex_trylock 3000 pthread_key_create 3000 pthread_getspecific 3000 pthread_cond_timedwait 3000 nan 3000 mlock 3000 mbstowcs 3000 ldiv 3000 iconv_open 3000 exp2 3000 wcstombs 2000 tcflush 2000 sqrtf 2000 setkey 2000 semget 2000 semctl 2000 sem_post 2000 sem_init 2000 sem_destroy 2000 pthread_once 2000 pthread_cleanup_push 2000 powf 2000 msgsnd 2000 msgrcv 2000 msgget 2000 msgctl 2000 getdate 2000 fmin 2000 fmax 2000 execle 2000 erfc 2000 cosf 2000 conj 2000 clock_gettime 2000 cbrt 2000 atanh 2000 asinh 2000 acosh 2000 lgamma 1000 ftok 1000 pause 900 endpwent 900 wcscmp 800 setpgid 800 sendmsg 800 pthread_mutexattr_init 800 pthread_equal 800 pthread_attr_destroy 800 isnan 800 isblank 800 isascii 800 hypot 800 getpwent 800 getgrent 800 wcscpy 700 vsscanf 700 tzset 700 toascii 700 tcdrain 700 socketpair 700 sigsetjmp 700 siglongjmp 700 sigismember 700 setpwent 700 setpgrp 700 sched_yield 700 rewinddir 700 rewind 700 remque 700 pthread_setschedparam 700 pthread_setcancelstate 700 pthread_mutexattr_settype 700 pthread_attr_setstacksize 700 pthread_attr_setdetachstate 700 pthread_attr_init 700 lchown 700 iconv_close 700 gmtime_r 700 globfree 700 getsockopt 700 getservbyport 700 getservbyname 700 getrusage 700 getpgrp 700 getgroups 700 fchdir 700 execve 700 endgrent 700 cexp 700 bcmp 700 wcsncpy 600 wcschr 600 wcscat 600 va_copy 600 tzname 600 tcsetpgrp 600 strerror_r 600 sigwait 600 sigfillset 600 sigdelset 600 setreuid 600 setgrent 600 setegid 600 seekdir 600 sched_setscheduler 600 sched_get_priority_max 600 recvmsg 600 putmsg 600 pthread_setcanceltype 600 pthread_rwlock_init 600 pthread_kill 600 pthread_cleanup_pop 600 pthread_attr_setscope 600 pthread_attr_setschedparam 600 nl_langinfo 600 mknod 600 memccpy 600 mbtowc 600 mbrtowc 600 log2 600 log1p 600 lockf 600 killpg 600 insque 600 if_nametoindex 600 getprotobynumber 600 getprotobyname 600 getpgid 600 getitimer 600 fsync 600 fseeko 600 floorf 600 fabsf 600 expf 600 dbm_store 600 dbm_open 600 dbm_fetch 600 dbm_close 600 copysign 600 cfgetospeed 600 atoll 600 wprintf 500 wcwidth 500 wctype 500 wctomb 500 vfscanf 500 unlockpt 500 towupper 500 towlower 500 telldir 500 tcsendbreak 500 tcgetpgrp 500 swprintf 500 strxfrm 500 strcoll 500 statvfs 500 sigpause 500 siginterrupt 500 sigignore 500 setregid 500 setpriority 500 setlogmask 500 readv 500 readdir_r 500 pwrite 500 ptsname 500 pthread_testcancel 500 pthread_rwlock_unlock 500 pthread_mutexattr_destroy 500 pthread_attr_setschedpolicy 500 pathconf 500 munlock 500 msync 500 mprotect 500 mblen 500 logb 500 localeconv 500 iswspace 500 isfinite 500 iconv 500 hsearch 500 grantpt 500 getpwuid_r 500 getpwnam_r 500 getmsg 500 gethostid 500 fdatasync 500 expm1 500 encrypt 500 cabs 500 atan2f 500 _tolower 500 _setjmp 500 wcsstr 400 wcsncmp 400 wcrtomb 400 vscanf 400 ualarm 400 tsearch 400 strtof 400 sqrtl 400 sigrelse 400 sigpending 400 signbit 400 sighold 400 sigaltstack 400 sem_trywait 400 sched_getparam 400 pthread_rwlock_wrlock 400 pthread_rwlock_rdlock 400 pthread_key_delete 400 pthread_getschedparam 400 pthread_attr_getstacksize 400 munlockall 400 mrand48 400 mlockall 400 mbrlen 400 logl 400 log10f 400 iswprint 400 iswdigit 400 iswalnum 400 if_indextoname 400 hcreate 400 getsid 400 getprotoent 400 getpriority 400 getnetbyname 400 getnetbyaddr 400 gcvt 400 fwprintf 400 funlockfile 400 fpathconf 400 flockfile 400 fcvt 400 fabsl 400 endservent 400 endhostent 400 ecvt 400 dbm_nextkey 400 dbm_firstkey 400 cosl 400 cfgetispeed 400 ceilf 400 asctime_r 400 acosf 400 _toupper 400 _longjmp 400 wcstol 300 wcsspn 300 wcsrchr 300 wcspbrk 300 wcsncat 300 wcscoll 300 waitid 300 vswprintf 300 utimes 300 twalk 300 timer_create 300 tanl 300 sinhf 300 sigtimedwait 300 shm_open 300 setstate 300 setprotoent 300 setcontext 300 sem_open 300 sem_getvalue 300 sched_setparam 300 sched_rr_get_interval 300 sched_getscheduler 300 scalbn 300 scalb 300 putc_unlocked 300 pthread_rwlock_destroy 300 pthread_condattr_init 300 pthread_attr_setinheritsched 300 pthread_attr_getschedparam 300 pthread_atfork 300 powl 300 posix_memalign 300 nrand48 300 nextafter 300 mbsrtowcs 300 lrintf 300 lrint 300 iswxdigit 300 iswupper 300 iswlower 300 iswctype 300 iswcntrl 300 iswalpha 300 isinf 300 initstate 300 ilogb 300 hypotf 300 getservent 300 getnetent 300 getcontext 300 getc_unlocked 300 ftello 300 frexpl 300 fmodf 300 floorl 300 expl 300 erand48 300 endprotoent 300 endnetent 300 dbm_delete 300 ctermid 300 csqrt 300 coshf 300 confstr 300 clock_getres 300 cimag 300 catclose 300 aio_write 300 aio_read 300 wscanf 200 wmemset 200 wmemmove 200 wmemcpy 200 wmemcmp 200 wmemchr 200 wctob 200 wcsxfrm 200 wcswidth 200 wcstoul 200 wcstok 200 wcstod 200 wcsrtombs 200 wcsftime 200 wcscspn 200 vwprintf 200 vfwprintf 200 ungetwc 200 ttyname_r 200 truncf 200 timer_settime 200 timer_getoverrun 200 timer_delete 200 tgamma 200 tdelete 200 tcflow 200 tanhl 200 tanhf 200 tanf 200 swscanf 200 strtoumax 200 strtold 200 strtoimax 200 sinhl 200 sigwaitinfo 200 sigqueue 200 shm_unlink 200 setutxent 200 setservent 200 setnetent 200 sem_unlink 200 sem_close 200 seed48 200 roundf 200 putwchar 200 putwc 200 pututxline 200 putpmsg 200 putchar_unlocked 200 pthread_setconcurrency 200 pthread_rwlock_trywrlock 200 pthread_rwlock_tryrdlock 200 pthread_mutexattr_setpshared 200 pthread_condattr_setpshared 200 pthread_condattr_destroy 200 pthread_attr_setstackaddr 200 pthread_attr_getstackaddr 200 pthread_attr_getscope 200 pthread_attr_getschedpolicy 200 pthread_attr_getinheritsched 200 pthread_attr_getdetachstate 200 pselect 200 nftw 200 mq_unlink 200 mq_send 200 mq_receive 200 mq_open 200 modfl 200 modff 200 mbsinit 200 makecontext 200 lround 200 log10l 200 lldiv 200 llabs 200 lfind 200 ldexpl 200 ldexpf 200 lcong48 200 l64a 200 jrand48 200 iswpunct 200 iswgraph 200 isnormal 200 isastream 200 if_nameindex 200 if_freenameindex 200 hypotl 200 hdestroy 200 getwc 200 getsubopt 200 getpmsg 200 getlogin_r 200 gethostent 200 getgrnam_r 200 getgrgid_r 200 getchar_unlocked 200 fstatvfs 200 frexpf 200 fputws 200 fputwc 200 fpclassify 200 fmodl 200 fma 200 fgetws 200 fgetwc 200 fdim 200 fattach 200 erff 200 endutxent 200 dbm_error 200 ctime_r 200 csinh 200 csin 200 cpow 200 coshl 200 copysignf 200 clock_settime 200 ceill 200 ccosh 200 ccos 200 catgets 200 btowc 200 atanl 200 atanf 200 atan2l 200 aio_return 200 acosl 200 acoshf 200 a64l 200 _Exit 200 wordfree 100 wordexp 100 wctrans 100 wcswcs 100 wcstoumax 100 wcstoull 100 wcstoll 100 wcstold 100 wcstoimax 100 wcstof 100 vwscanf 100 vswscanf 100 vfwscanf 100 towctrans 100 tfind 100 tcgetsid 100 swapcontext 100 strfmon 100 sockatmark 100 sinl 100 sinf 100 sethostent 100 sem_timedwait 100 scalbnl 100 scalbnf 100 scalblnf 100 scalbln 100 remquol 100 remquof 100 remquo 100 rand_r 100 pthread_spin_unlock 100 pthread_spin_trylock 100 pthread_spin_lock 100 pthread_spin_init 100 pthread_spin_destroy 100 pthread_rwlockattr_setpshared 100 pthread_rwlockattr_init 100 pthread_rwlockattr_getpshared 100 pthread_rwlockattr_destroy 100 pthread_rwlock_timedwrlock 100 pthread_rwlock_timedrdlock 100 pthread_mutexattr_setprotocol 100 pthread_mutexattr_setprioceiling 100 pthread_mutexattr_gettype 100 pthread_mutexattr_getpshared 100 pthread_mutexattr_getprotocol 100 pthread_mutexattr_getprioceiling 100 pthread_mutex_timedlock 100 pthread_mutex_setprioceiling 100 pthread_mutex_getprioceiling 100 pthread_getconcurrency 100 pthread_condattr_getpshared 100 pthread_barrierattr_setpshared 100 pthread_barrierattr_init 100 pthread_barrierattr_getpshared 100 pthread_barrierattr_destroy 100 pthread_barrier_wait 100 pthread_barrier_init 100 pthread_barrier_destroy 100 pthread_attr_setstack 100 pthread_attr_setguardsize 100 pthread_attr_getstack 100 pthread_attr_getguardsize 100 pread 100 posix_fadvise 100 nexttowardl 100 nexttoward 100 nextafterl 100 nextafterf 100 nearbyintl 100 nearbyintf 100 nearbyint 100 nanl 100 nanf 100 mq_timedsend 100 mq_timedreceive 100 mq_setattr 100 mq_notify 100 mq_getattr 100 mq_close 100 lsearch 100 lroundl 100 lroundf 100 lrintl 100 logbl 100 logbf 100 log2l 100 log2f 100 log1pl 100 log1pf 100 llroundf 100 llround 100 llrintl 100 llrintf 100 llrint 100 lio_listio 100 lgammal 100 lgammaf 100 iswblank 100 isunordered 100 isless 100 isgreater 100 imaxdiv 100 imaxabs 100 ilogbl 100 ilogbf 100 getwchar 100 getutxline 100 getutxid 100 getutxent 100 fwscanf 100 fwide 100 ftrylockfile 100 fmtmsg 100 fminl 100 fminf 100 fmaxl 100 fmaxf 100 fmal 100 fmaf 100 ffs 100 feupdateenv 100 fetestexcept 100 fesetround 100 fesetexceptflag 100 fesetenv 100 feraiseexcept 100 feholdexcept 100 fegetround 100 fegetexceptflag 100 fegetenv 100 feclearexcept 100 fdiml 100 expm1l 100 expm1f 100 exp2l 100 exp2f 100 erfcl 100 erfcf 100 erf 100 dbm_clearerr 100 ctanh 100 csqrtf 100 cproj 100 cpowf 100 copysignl 100 conjl 100 clogf 100 clog 100 clock_nanosleep 100 cimagl 100 cimagf 100 cbrtl 100 cbrtf 100 catopen 100 catanh 100 casinh 100 carg 100 cacosh 100 cacos 100 cabsl 100 cabsf 100 bsd_signal 100 atanhl 100 atanhf 100 asinl 100 asinhl 100 asinhf 100 asinf 100 aio_suspend 100 aio_fsync 100 aio_error 100 aio_cancel 100 acoshl 100 yn 50 tgammal 50 tgammaf 50 scalblnl 50 rintf 50 remainderl 50 remainderf 50 pthread_getcpuclockid 50 pthread_condattr_setclock 50 pthread_condattr_getclock 50 posix_spawn 50 posix_openpt 50 posix_madvise 50 posix_fallocate 50 nexttowardf 50 llroundl 50 islessgreater 50 islessequal 50 isgreaterequal 50 fdimf 50 erfl 50 ctanl 50 ctanhl 50 ctanhf 50 ctanf 50 csqrtl 50 csinl 50 csinhl 50 csinhf 50 csinf 50 crealf 50 creal 50 cprojl 50 cprojf 50 cpowl 50 conjf 50 clogl 50 clock_getcpuclockid 50 cexpl 50 cexpf 50 ccosl 50 ccoshl 50 ccoshf 50 ccosf 50 catanl 50 catanhl 50 catanhf 50 catanf 50 casinhl 50 casinhf 50 casin 50 cargl 50 cargf 50 cacosl 50 cacoshl 50 cacoshf 50 cacosf 50 pthread_setschedprio 20 j0 20 fdetach 20 casinl 20 truncl 0 roundl 0 rintl 0 posix_typed_mem_open 0 posix_typed_mem_get_info 0 posix_trace_trygetnext_event 0 posix_trace_trid_eventid_open 0 posix_trace_timedgetnext_event 0 posix_trace_stop 0 posix_trace_start 0 posix_trace_shutdown 0 posix_trace_set_filter 0 posix_trace_rewind 0 posix_trace_open 0 posix_trace_getnext_event 0 posix_trace_get_status 0 posix_trace_get_filter 0 posix_trace_get_attr 0 posix_trace_flush 0 posix_trace_eventtypelist_rewind 0 posix_trace_eventtypelist_getnext_id 0 posix_trace_eventset_ismember 0 posix_trace_eventset_fill 0 posix_trace_eventset_empty 0 posix_trace_eventset_del 0 posix_trace_eventset_add 0 posix_trace_eventid_open 0 posix_trace_eventid_get_name 0 posix_trace_eventid_equal 0 posix_trace_event 0 posix_trace_create_withlog 0 posix_trace_create 0 posix_trace_close 0 posix_trace_clear 0 posix_trace_attr_setstreamsize 0 posix_trace_attr_setstreamfullpolicy 0 posix_trace_attr_setname 0 posix_trace_attr_setmaxdatasize 0 posix_trace_attr_setlogsize 0 posix_trace_attr_setlogfullpolicy 0 posix_trace_attr_setinherited 0 posix_trace_attr_init 0 posix_trace_attr_getstreamsize 0 posix_trace_attr_getstreamfullpolicy 0 posix_trace_attr_getname 0 posix_trace_attr_getmaxusereventsize 0 posix_trace_attr_getmaxsystemeventsize 0 posix_trace_attr_getmaxdatasize 0 posix_trace_attr_getlogsize 0 posix_trace_attr_getlogfullpolicy 0 posix_trace_attr_getinherited 0 posix_trace_attr_getgenversion 0 posix_trace_attr_getcreatetime 0 posix_trace_attr_getclockres 0 posix_trace_attr_destroy 0 posix_spawnp 0 posix_spawnattr_setsigmask 0 posix_spawnattr_setsigdefault 0 posix_spawnattr_setschedpolicy 0 posix_spawnattr_setschedparam 0 posix_spawnattr_setpgroup 0 posix_spawnattr_setflags 0 posix_spawnattr_init 0 posix_spawnattr_getsigmask 0 posix_spawnattr_getsigdefault 0 posix_spawnattr_getschedpolicy 0 posix_spawnattr_getschedparam 0 posix_spawnattr_getpgroup 0 posix_spawnattr_getflags 0 posix_spawnattr_destroy 0 posix_spawn_file_actions_init 0 posix_spawn_file_actions_destroy 0 posix_spawn_file_actions_addopen 0 posix_spawn_file_actions_adddup2 0 posix_spawn_file_actions_addclose 0 posix_mem_offset 0 jn 0 ftw 0 creall 0 catan 0 casinf 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/grantpt.texi��������������������������������������������0000664�0000000�0000000�00000001021�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node grantpt @section @code{grantpt} @findex grantpt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/grantpt.html} Gnulib module: grantpt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function reports success for invalid file descriptors on some platforms: OpenBSD, Cygwin 1.7.9, musl libc. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hcreate.texi��������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hcreate @section @code{hcreate} @findex hcreate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hcreate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hdestroy.texi�������������������������������������������0000664�0000000�0000000�00000000616�14110572173�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hdestroy @section @code{hdestroy} @findex hdestroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hdestroy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. @end itemize ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hsearch.texi��������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hsearch @section @code{hsearch} @findex hsearch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hsearch.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 8.1. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/htonl.texi����������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node htonl @section @code{htonl} @findex htonl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/htonl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/htons.texi����������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node htons @section @code{htons} @findex htons POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/htons.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hypot.texi����������������������������������������������0000664�0000000�0000000�00000001070�14110572173�0022250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypot @section @code{hypot} @findex hypot POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hypot.html} Gnulib module: hypot or hypot-ieee Portability problems fixed by either Gnulib module @code{hypot} or @code{hypot-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{hypot-ieee}: @itemize @item When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hypotf.texi���������������������������������������������0000664�0000000�0000000�00000001374�14110572173�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypotf @section @code{hypotf} @findex hypotf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hypotf.html} Gnulib module: hypotf or hypotf-ieee Portability problems fixed by either Gnulib module @code{hypotf} or @code{hypotf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 14. @item This function produces wrong values on some platforms: NetBSD 5.1, OpenBSD 4.9. @end itemize Portability problems fixed by Gnulib module @code{hypot-ieee}: @itemize @item When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/hypotl.texi���������������������������������������������0000664�0000000�0000000�00000001530�14110572173�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypotl @section @code{hypotl} @findex hypotl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/hypotl.html} Gnulib module: hypotl or hypotl-ieee Portability problems fixed by either Gnulib module @code{hypotl} or @code{hypotl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 14, Android 4.4. @item This function produces very imprecise results on some platforms: NetBSD 9.0, OpenBSD 5.1/SPARC. @end itemize Portability problems fixed by Gnulib module @code{hypotl-ieee}: @itemize @item When the arguments are mixed NaN and Infinity, this function returns a wrong value on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iconv.texi����������������������������������������������0000664�0000000�0000000�00000003015�14110572173�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv @section @code{iconv} @findex iconv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv.html} Gnulib module: iconv Portability problems fixed by Gnulib: @itemize @item GNU libiconv is not found if installed in @file{$PREFIX/lib}. @end itemize Portability problems handled by Gnulib (in the sense that @code{HAVE_ICONV} does not get defined if the system's @code{iconv} function has this problem): @itemize @item Failures are not distinguishable from successful returns on some platforms: AIX 5.1..7.2, Solaris 10. @item A buffer overrun can occur on some platforms: AIX 6.1..7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. @item This function was not correctly implemented in glibc versions before 2.2. @item When @code{iconv} encounters an input character that is valid but that cannot be converted to the output character set, glibc's and GNU libiconv's @code{iconv} stop the conversion. Some other implementations put an implementation-defined character into the output buffer. Gnulib provides higher-level facilities @code{striconv} and @code{striconveh} (wrappers around @code{iconv}) that deal with conversion errors in a platform independent way. @item This function returns a positive return value, instead of zero, when converting from ISO-8859-1 to UTF-8 on HP-UX 11. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iconv_close.texi����������������������������������������0000664�0000000�0000000�00000001066�14110572173�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv_close @section @code{iconv_close} @findex iconv_close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv_close.html} Gnulib module: iconv Portability problems fixed by Gnulib: @itemize @item GNU libiconv is not found if installed in @file{$PREFIX/lib}. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iconv_open.texi�����������������������������������������0000664�0000000�0000000�00000003501�14110572173�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv_open @section @code{iconv_open} @findex iconv_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv_open.html} Gnulib module: iconv, iconv_open, iconv_open-utf Portability problems fixed by either Gnulib module @code{iconv} or @code{iconv_open}: @itemize @item GNU libiconv is not found if installed in @file{$PREFIX/lib}. @end itemize Portability problems handled by either Gnulib module @code{iconv} or @code{iconv_open} (in the sense that @code{HAVE_ICONV} does not get defined if the system's @code{iconv_open} function has this problem): @itemize @item No converter from EUC-JP to UTF-8 is provided on some platforms: HP-UX 11. @end itemize Portability problems fixed by Gnulib module @code{iconv_open}: @itemize @item This function recognizes only non-standard aliases for many encodings (not the IANA registered encoding names) on many platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, z/OS. @end itemize Portability problems fixed by Gnulib module @code{iconv_open-utf}: @itemize @item This function does not support the encodings UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE on many platforms: AIX 5.1, HP-UX 11, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 8.1, when GNU libiconv is not installed. @item For some encodings A and B, this function cannot convert directly from A to B, although an indirect conversion from A through UTF-8 to B is possible. This occurs on some platforms: Solaris 11 2010-11. Gnulib provides a higher-level facility @code{striconveh} (a wrapper around @code{iconv}) that deals with this problem. @item The set of supported encodings and conversions is system dependent. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/if_freenameindex.texi�����������������������������������0000664�0000000�0000000�00000001115�14110572173�0024375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_freenameindex @section @code{if_freenameindex} @findex if_freenameindex POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/if_freenameindex.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @item This is available only as a macro, rather than a function, on some platforms: OpenBSD 4.6, MirBSD 10. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/if_indextoname.texi�������������������������������������0000664�0000000�0000000�00000000676�14110572173�0024111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_indextoname @section @code{if_indextoname} @findex if_indextoname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/if_indextoname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @end itemize ������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/if_nameindex.texi���������������������������������������0000664�0000000�0000000�00000000703�14110572173�0023535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_nameindex @section @code{if_nameindex} @findex if_nameindex POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/if_nameindex.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @end itemize �������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/if_nametoindex.texi�������������������������������������0000664�0000000�0000000�00000000676�14110572173�0024111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_nametoindex @section @code{if_nametoindex} @findex if_nametoindex POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/if_nametoindex.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @end itemize ������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ilogb.texi����������������������������������������������0000664�0000000�0000000�00000001432�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogb @section @code{ilogb} @findex ilogb POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogb.html} Gnulib module: ilogb Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @item This function returns a wrong result for a zero argument on some platforms: OpenBSD 6.7, AIX 5.1. @item This function returns a wrong result for denormalized arguments on some platforms: AIX 7.1 64-bit. @item This function returns a wrong result for an infinite argument on some platforms: NetBSD 7.1, OpenBSD 6.7. @item This function returns a wrong result for a NaN argument on some platforms: NetBSD 7.1, OpenBSD 6.7. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ilogbf.texi���������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogbf @section @code{ilogbf} @findex ilogbf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogbf.html} Gnulib module: ilogbf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @item This function returns a wrong result for a zero argument on some platforms: OpenBSD 6.7. @item This function returns a wrong result for an infinite argument on some platforms: NetBSD 7.1, OpenBSD 6.7. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ilogbl.texi���������������������������������������������0000664�0000000�0000000�00000001333�14110572173�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogbl @section @code{ilogbl} @findex ilogbl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogbl.html} Gnulib module: ilogbl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @item This function returns a wrong result for a zero argument on some platforms: @c https://cygwin.com/ml/cygwin/2019-12/msg00074.html Cygwin 2.9. @item This function returns a wrong result for denormalized arguments on some platforms: AIX 7.1 64-bit, Haiku 2017. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/imaxabs.texi��������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0022533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node imaxabs @section @code{imaxabs} @findex imaxabs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/imaxabs.html} Gnulib module: imaxabs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, MSVC 9, Android 4.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/imaxdiv.texi��������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node imaxdiv @section @code{imaxdiv} @findex imaxdiv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/imaxdiv.html} Gnulib module: imaxdiv Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, MSVC 9, Android 4.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/inet_addr.texi������������������������������������������0000664�0000000�0000000�00000001022�14110572173�0023033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_addr @section @code{inet_addr} @findex inet_addr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_addr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On some old platforms, this function returns a @samp{struct in_addr} rather than a scalar type such as @samp{unsigned int} or @samp{unsigned long}. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/inet_ntoa.texi������������������������������������������0000664�0000000�0000000�00000001500�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_ntoa @section @code{inet_ntoa} @findex inet_ntoa POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntoa.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item The @code{inet_ntoa} function need not be reentrant, and consequently is not required to be thread safe. Implementations of @code{inet_ntoa} typically write the timestamp into static buffer. If two threads call @code{inet_ntoa} at roughly the same time, you might end up with the wrong date in one of the threads, or some undefined string. @end itemize Note: @code{inet_ntoa} is specific for IPv4 addresses. A protocol independent function is @code{inet_ntop}. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/inet_ntop.texi������������������������������������������0000664�0000000�0000000�00000001410�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_ntop @section @code{inet_ntop} @findex inet_ntop POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntop.html} Gnulib module: inet_ntop Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, mingw, MSVC 14. @item This function is declared in @code{<netdb.h>} instead of @code{<arpa/inet.h>} on some platforms: NonStop Kernel. @item This function is declared in @code{<ws2tcpip.h>}, with a POSIX incompatible declaration, on some platforms: MSVC 14 on Windows >= Vista. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function's fourth argument type is @code{size_t} instead of @code{socklen_t} on some platforms: Solaris 10. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/inet_pton.texi������������������������������������������0000664�0000000�0000000�00000001221�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_pton @section @code{inet_pton} @findex inet_pton POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_pton.html} Gnulib module: inet_pton Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, mingw, MSVC 14. @item This function is declared in @code{<netdb.h>} instead of @code{<arpa/inet.h>} on some platforms: NonStop Kernel. @item This function is declared in @code{<ws2tcpip.h>}, with a POSIX incompatible declaration, on some platforms: MSVC 14 on Windows >= Vista. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/initstate.texi������������������������������������������0000664�0000000�0000000�00000001251�14110572173�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node initstate @section @code{initstate} @findex initstate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/initstate.html} Gnulib module: random Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function is not declared on some platforms: Cygwin 1.5.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item The first parameter is @code{unsigned long} instead of @code{unsigned int} on some platforms: MidnightBSD 2.0. @item The third parameter is @code{long} instead of @code{size_t} on some platforms: MidnightBSD 2.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/insque.texi���������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node insque @section @code{insque} @findex insque POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/insque.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ioctl.texi����������������������������������������������0000664�0000000�0000000�00000002132�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ioctl @section @code{ioctl} @findex ioctl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ioctl.html} LSB specification: @itemize @item @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ioctl-2.html} @item @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-ttyio-2.html} @item @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sockio-2.html} @end itemize Gnulib module: ioctl Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), @code{ioctl} is called @code{ioctlsocket}, and error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item The second parameter is of type @code{unsigned long} rather than @code{int} on some platforms: glibc 2.26, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Haiku 2017. @end itemize Portability problems not fixed by Gnulib: @itemize @item Most @code{ioctl} requests are platform and hardware specific. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isalnum.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalnum @section @code{isalnum} @findex isalnum POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isalnum.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isalnum This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswalnum This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isalnum This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_alnum This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-alnum}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isalnum_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalnum_l @section @code{isalnum_l} @findex isalnum_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isalnum_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isalpha.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalpha @section @code{isalpha} @findex isalpha POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isalpha.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isalpha This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswalpha This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isalpha This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_alpha This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-alpha}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isalpha_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalpha_l @section @code{isalpha_l} @findex isalpha_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isalpha_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isascii.texi��������������������������������������������0000664�0000000�0000000�00000001752�14110572173�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isascii @section @code{isascii} @findex isascii POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isascii.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but requires special handling for the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are two alternative APIs: @table @code @item c_isascii This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item mb_isascii This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @end table ����������������������gnulib-20210822~d383792/doc/posix-functions/isastream.texi������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0023077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isastream @section @code{isastream} @findex isastream POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isastream.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isatty.texi���������������������������������������������0000664�0000000�0000000�00000001245�14110572173�0022426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isatty @section @code{isatty} @findex isatty POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isatty.html} Gnulib module: isatty Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: MSVC 14. @item On native Windows, this function also returns true for character devices such as @file{NUL}. @item On native Windows, this function returns false for Cygwin consoles. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isblank.texi��������������������������������������������0000664�0000000�0000000�00000002724�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isblank @section @code{isblank} @findex isblank POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isblank.html} Gnulib module: isblank Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 6.5, Solaris 9, mingw, MSVC 9. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isblank This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswblank This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isblank This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_blank This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-blank}. @end table ��������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isblank_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isblank_l @section @code{isblank_l} @findex isblank_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isblank_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/iscntrl.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iscntrl @section @code{iscntrl} @findex iscntrl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iscntrl.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_iscntrl This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswcntrl This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_iscntrl This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_cntrl This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-cntrl}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iscntrl_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iscntrl_l @section @code{iscntrl_l} @findex iscntrl_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iscntrl_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isdigit.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isdigit @section @code{isdigit} @findex isdigit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isdigit.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isdigit This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswdigit This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isdigit This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_digit This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-digit}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isdigit_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isdigit_l @section @code{isdigit_l} @findex isdigit_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isdigit_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isfinite.texi�������������������������������������������0000664�0000000�0000000�00000001475�14110572173�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isfinite @section @code{isfinite} @findex isfinite POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isfinite.html} Gnulib module: isfinite Portability problems fixed by Gnulib: @itemize @item This macro is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4. @item This macro incorrectly yields true for some @samp{double} arguments, on some platforms: Linux/ia64 (signalling NaNs). @end itemize Portability problems not fixed by Gnulib: @itemize @item It is implementation-dependent whether @code{isfinite} raises an exception given a signaling NaN operand. @item This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isgraph.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgraph @section @code{isgraph} @findex isgraph POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isgraph.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isgraph This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswgraph This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isgraph This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_graph This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-graph}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isgraph_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgraph_l @section @code{isgraph_l} @findex isgraph_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isgraph_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isgreater.texi������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgreater @section @code{isgreater} @findex isgreater POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isgreater.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize ���������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isgreaterequal.texi�������������������������������������0000664�0000000�0000000�00000000717�14110572173�0024131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgreaterequal @section @code{isgreaterequal} @findex isgreaterequal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isgreaterequal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize �������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isinf.texi����������������������������������������������0000664�0000000�0000000�00000001051�14110572173�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isinf @section @code{isinf} @findex isinf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isinf.html} Gnulib module: isinf Portability problems fixed by Gnulib: @itemize @item This macro is missing on some platforms: AIX 5.1, IRIX 6.5, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isless.texi���������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isless @section @code{isless} @findex isless POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isless.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/islessequal.texi����������������������������������������0000664�0000000�0000000�00000000703�14110572173�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islessequal @section @code{islessequal} @findex islessequal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/islessequal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize �������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/islessgreater.texi��������������������������������������0000664�0000000�0000000�00000000713�14110572173�0023764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islessgreater @section @code{islessgreater} @findex islessgreater POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/islessgreater.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/islower.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islower @section @code{islower} @findex islower POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/islower.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_islower This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswlower This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_islower This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_lower This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-lower}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/islower_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islower_l @section @code{islower_l} @findex islower_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/islower_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isnan.texi����������������������������������������������0000664�0000000�0000000�00000001505�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isnan @section @code{isnan} @findex isnan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isnan.html} Gnulib module: isnan Portability problems fixed by Gnulib: @itemize @item This macro is missing on some platforms: MSVC 9. @item @code{isnan} was introduced with C99 and is thus commonly not present on pre-C99 systems. @item @code{isnan} is not a macro on some platforms: IRIX 6.5, Solaris 11.4. @item This macro does not work on some platforms: MSVC 14. @item On IRIX 6.5 with @code{cc}, @code{isnan} does not recognize some NaNs. @end itemize Portability problems not fixed by Gnulib: @itemize @item This macro returns an unspecified result when given noncanonical values such as unnormalized numbers, pseudo-denormals, pseudo-NaNs, pseudo-Infinities, and pseudo-zeroes. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isnormal.texi�������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isnormal @section @code{isnormal} @findex isnormal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isnormal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 4.4. @end itemize �������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isprint.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isprint @section @code{isprint} @findex isprint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isprint.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isprint This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswprint This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isprint This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_print This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-print}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isprint_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isprint_l @section @code{isprint_l} @findex isprint_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isprint_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/ispunct.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ispunct @section @code{ispunct} @findex ispunct POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ispunct.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_ispunct This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswpunct This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_ispunct This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_punct This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-punct}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ispunct_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ispunct_l @section @code{ispunct_l} @findex ispunct_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ispunct_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isspace.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isspace @section @code{isspace} @findex isspace POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isspace.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isspace This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswspace This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isspace This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_space This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-space}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isspace_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isspace_l @section @code{isspace_l} @findex isspace_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isspace_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/isunordered.texi����������������������������������������0000664�0000000�0000000�00000000703�14110572173�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isunordered @section @code{isunordered} @findex isunordered POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isunordered.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.4, Android 9.0. @end itemize �������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isupper.texi��������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isupper @section @code{isupper} @findex isupper POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isupper.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isupper This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswupper This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isupper This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_upper This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-upper}. @end table ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isupper_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isupper_l @section @code{isupper_l} @findex isupper_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isupper_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/iswalnum.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalnum @section @code{iswalnum} @findex iswalnum POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswalnum.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isalnum}, provided by Gnulib module @code{c32isalnum}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswalnum_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalnum_l @section @code{iswalnum_l} @findex iswalnum_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswalnum_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswalpha.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalpha @section @code{iswalpha} @findex iswalpha POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswalpha.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isalpha}, provided by Gnulib module @code{c32isalpha}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswalpha_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalpha_l @section @code{iswalpha_l} @findex iswalpha_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswalpha_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswblank.texi�������������������������������������������0000664�0000000�0000000�00000001611�14110572173�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswblank @section @code{iswblank} @findex iswblank POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswblank.html} Gnulib module: iswblank Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5, Solaris 9, mingw, MSVC 9, Android 4.4. @item This function is declared but not defined on some platforms: IRIX 6.5.30. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isblank}, provided by Gnulib module @code{c32isblank}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswblank_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswblank_l @section @code{iswblank_l} @findex iswblank_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswblank_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswcntrl.texi�������������������������������������������0000664�0000000�0000000�00000001621�14110572173�0022754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswcntrl @section @code{iswcntrl} @findex iswcntrl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswcntrl.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32iscntrl}, provided by Gnulib module @code{c32iscntrl}, operates on 32-bit wide characters and therefore does not have this limitation. @item This function returns 0 for U+2028 (LINE SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) on some platforms: macOS 11.1. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswcntrl_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswcntrl_l @section @code{iswcntrl_l} @findex iswcntrl_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswcntrl_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswctype.texi�������������������������������������������0000664�0000000�0000000�00000001331�14110572173�0022754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswctype @section @code{iswctype} @findex iswctype POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswctype.html} Gnulib module: iswctype Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function is declared in @code{<wchar.h>}, not in @code{<wctype.h>}, on some platforms: HP-UX 11.00. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswctype_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswctype_l @section @code{iswctype_l} @findex iswctype_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswctype_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswdigit.texi�������������������������������������������0000664�0000000�0000000�00000001620�14110572173�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswdigit @section @code{iswdigit} @findex iswdigit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswdigit.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @item This function is not ISO C 99 compliant on some platforms: FreeBSD 13.0, NetBSD 9.0, Solaris 11.4, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isdigit}, provided by Gnulib module @code{c32isdigit}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswdigit_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswdigit_l @section @code{iswdigit_l} @findex iswdigit_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswdigit_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswgraph.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswgraph @section @code{iswgraph} @findex iswgraph POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswgraph.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isgraph}, provided by Gnulib module @code{c32isgraph}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswgraph_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswgraph_l @section @code{iswgraph_l} @findex iswgraph_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswgraph_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswlower.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswlower @section @code{iswlower} @findex iswlower POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswlower.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32islower}, provided by Gnulib module @code{c32islower}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswlower_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswlower_l @section @code{iswlower_l} @findex iswlower_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswlower_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswprint.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswprint @section @code{iswprint} @findex iswprint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswprint.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isprint}, provided by Gnulib module @code{c32isprint}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswprint_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswprint_l @section @code{iswprint_l} @findex iswprint_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswprint_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswpunct.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswpunct @section @code{iswpunct} @findex iswpunct POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswpunct.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32ispunct}, provided by Gnulib module @code{c32ispunct}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswpunct_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswpunct_l @section @code{iswpunct_l} @findex iswpunct_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswpunct_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswspace.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswspace @section @code{iswspace} @findex iswspace POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswspace.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isspace}, provided by Gnulib module @code{c32isspace}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswspace_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswspace_l @section @code{iswspace_l} @findex iswspace_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswspace_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswupper.texi�������������������������������������������0000664�0000000�0000000�00000001427�14110572173�0022771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswupper @section @code{iswupper} @findex iswupper POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswupper.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isupper}, provided by Gnulib module @code{c32isupper}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswupper_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswupper_l @section @code{iswupper_l} @findex iswupper_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswupper_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswxdigit.texi������������������������������������������0000664�0000000�0000000�00000001617�14110572173�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswxdigit @section @code{iswxdigit} @findex iswxdigit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswxdigit.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @item This function is not ISO C 99 compliant on some platforms: FreeBSD 13.0, NetBSD 9.0, Solaris 11.4, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32isxdigit}, provided by Gnulib module @code{c32isxdigit}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/iswxdigit_l.texi����������������������������������������0000664�0000000�0000000�00000001175�14110572173�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswxdigit_l @section @code{iswxdigit_l} @findex iswxdigit_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/iswxdigit_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isxdigit.texi�������������������������������������������0000664�0000000�0000000�00000002605�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isxdigit @section @code{isxdigit} @findex isxdigit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isxdigit.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function's behaviour depends on the locale, but does not support the multibyte characters that occur in strings in locales with @code{MB_CUR_MAX > 1} (this includes all the common UTF-8 locales). There are four alternative APIs: @table @code @item c_isxdigit This function operates in a locale independent way and returns true only for ASCII characters. It is provided by the Gnulib module @samp{c-ctype}. @item iswxdigit This function operates in a locale dependent way, on wide characters. In order to use it, you first have to convert from multibyte to wide characters, using the @code{mbrtowc} function. It is provided by the Gnulib module @samp{wctype}. @item mb_isxdigit This function operates in a locale dependent way, on multibyte characters. It is provided by the Gnulib module @samp{mbchar}. @item uc_is_xdigit This function operates in a locale independent way, on Unicode characters. It is provided by the Gnulib module @samp{unictype/ctype-xdigit}. @end table ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/isxdigit_l.texi�����������������������������������������0000664�0000000�0000000�00000000765�14110572173�0023256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isxdigit_l @section @code{isxdigit_l} @findex isxdigit_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/isxdigit_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize �����������gnulib-20210822~d383792/doc/posix-functions/j0.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node j0 @section @code{j0} @findex j0 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/j0.html} Gnulib module: j0 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/j1.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node j1 @section @code{j1} @findex j1 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/j1.html} Gnulib module: j1 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/jn.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node jn @section @code{jn} @findex jn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/jn.html} Gnulib module: jn Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/jrand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node jrand48 @section @code{jrand48} @findex jrand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/jrand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/kill.texi�����������������������������������������������0000664�0000000�0000000�00000000737�14110572173�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node kill @section @code{kill} @findex kill POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/kill.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-kill-3.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ���������������������������������gnulib-20210822~d383792/doc/posix-functions/killpg.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node killpg @section @code{killpg} @findex killpg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/killpg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/l64a.texi�����������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node l64a @section @code{l64a} @findex l64a POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/l64a.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @item This function was not correctly implemented in glibc versions before 2.2.5. @end itemize �����������������������������������gnulib-20210822~d383792/doc/posix-functions/labs.texi�����������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node labs @section @code{labs} @findex labs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/labs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.3. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lchown.texi���������������������������������������������0000664�0000000�0000000�00000001543�14110572173�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lchown @section @code{lchown} @findex lchown POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html} Gnulib module: lchown Portability problems fixed by Gnulib: @itemize @item Some platforms fail to detect trailing slash on non-directories, as in @code{lchown("link-to-file/",uid,gid)}: FreeBSD 7.2, Solaris 9. @item Some platforms fail to update the change time when at least one argument was not -1, but no ownership changes resulted. However, without @code{lchmod}, the replacement only fixes this for non-symlinks: OpenBSD 4.0. @item This function is missing on some platforms; however, the replacement fails on symlinks if @code{chown} is supported, and fails altogether with @code{ENOSYS} otherwise: Minix 3.1.8, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lcong48.texi��������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lcong48 @section @code{lcong48} @findex lcong48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lcong48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 5.1. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ldexp.texi����������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexp @section @code{ldexp} @findex ldexp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ldexp.html} Gnulib module: ldexp Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ldexpf.texi���������������������������������������������0000664�0000000�0000000�00000000764�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexpf @section @code{ldexpf} @findex ldexpf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ldexpf.html} Gnulib module: ldexpf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������gnulib-20210822~d383792/doc/posix-functions/ldexpl.texi���������������������������������������������0000664�0000000�0000000�00000001300�14110572173�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexpl @section @code{ldexpl} @findex ldexpl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ldexpl.html} Gnulib module: ldexpl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function has no prototype in @code{<math.h>} on some platforms: Mac OS X. @item This function does not work on finite numbers on some platforms: AIX 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ldiv.texi�����������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldiv @section @code{ldiv} @findex ldiv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ldiv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lfind.texi����������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lfind @section @code{lfind} @findex lfind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lfind.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.4. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lgamma.texi���������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgamma @section @code{lgamma} @findex lgamma POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lgamma.html} Gnulib module: lgamma Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lgammaf.texi��������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgammaf @section @code{lgammaf} @findex lgammaf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lgammaf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lgammal.texi��������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgammal @section @code{lgammal} @findex lgammal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lgammal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/link.texi�����������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node link @section @code{link} @findex link POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-link-1.html} Gnulib module: link Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function fails to reject trailing slashes on non-directories on some platforms: FreeBSD 7.2, Solaris 11.3, Cygwin 1.5.x. @item When the second argument is a dangling symlink, some platforms follow that link and create the destination rather than failing: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item When the first argument is a symlink, some platforms create a hard-link to what the symlink referenced, rather than to the symlink itself. Use @samp{linkat} to force a particular behavior. @end itemize ������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/linkat.texi���������������������������������������������0000664�0000000�0000000�00000001640�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node linkat @section @code{linkat} @findex linkat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/linkat.html} Gnulib module: linkat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.9, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function fails to directly hardlink symlinks on some platforms: Mac OS X 10.10. @item This function fails to reject trailing slashes on non-directories on some platforms: macOS 11.1, AIX 7.1, Solaris 11.3. @item This functions does not support @code{AT_SYMLINK_FOLLOW} on some platforms: Linux kernel 2.6.17. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lio_listio.texi�����������������������������������������0000664�0000000�0000000�00000001152�14110572173�0023254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lio_listio @section @code{lio_listio} @findex lio_listio POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lio_listio.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/listen.texi���������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node listen @section @code{listen} @findex listen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.html} Gnulib module: listen Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llabs.texi����������������������������������������������0000664�0000000�0000000�00000000607�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llabs @section @code{llabs} @findex llabs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llabs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.23, MSVC 9, Android 4.3. @end itemize �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lldiv.texi����������������������������������������������0000664�0000000�0000000�00000000607�14110572173�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lldiv @section @code{lldiv} @findex lldiv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lldiv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11.23, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llogb.texi����������������������������������������������0000664�0000000�0000000�00000001174�14110572173�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llogb @section @code{llogb} @findex llogb Documentation:@* @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llogbf.texi���������������������������������������������0000664�0000000�0000000�00000001177�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llogbf @section @code{llogbf} @findex llogbf Documentation:@* @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llogbl.texi���������������������������������������������0000664�0000000�0000000�00000001177�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llogbl @section @code{llogbl} @findex llogbl Documentation:@* @ifinfo @ref{Exponents and Logarithms,,Exponentiation and Logarithms,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Exponents-and-Logarithms.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llrint.texi���������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrint @section @code{llrint} @findex llrint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llrint.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9. @end itemize �����������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llrintf.texi��������������������������������������������0000664�0000000�0000000�00000000707�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrintf @section @code{llrintf} @findex llrintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llrintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9. @end itemize ���������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llrintl.texi��������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrintl @section @code{llrintl} @findex llrintl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llrintl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/llround.texi��������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llround @section @code{llround} @findex llround POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llround.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llroundf.texi�������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llroundf @section @code{llroundf} @findex llroundf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llroundf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.7, MSVC 9. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/llroundl.texi�������������������������������������������0000664�0000000�0000000�00000000727�14110572173�0022750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llroundl @section @code{llroundl} @findex llroundl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/llroundl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize �����������������������������������������gnulib-20210822~d383792/doc/posix-functions/localeconv.texi�����������������������������������������0000664�0000000�0000000�00000001350�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localeconv @section @code{localeconv} @findex localeconv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/localeconv.html} Gnulib module: localeconv Portability problems fixed by Gnulib: @itemize @item The @code{struct lconv} type does not contain any members on some platforms: Android up to 2014. @item The @code{struct lconv} type does not contain the members @code{int_p_cs_precedes}, @code{int_p_sign_posn}, @code{int_p_sep_by_space}, @code{int_n_cs_precedes}, @code{int_n_sign_posn}, @code{int_n_sep_by_space} on some platforms: glibc, OpenBSD 4.9, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/localtime.texi������������������������������������������0000664�0000000�0000000�00000002041�14110572173�0023055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localtime @section @code{localtime} @findex localtime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html} Gnulib module: localtime Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function loops forever for values near extrema (such as the year @math{-2**31}): Mac OS X 10.6. You can use the @code{time_rz} module to work around the problem. @item On some platforms, this function returns nonsense values for unsupported arguments (like @math{2^56}), rather than failing: FreeBSD 10. @item On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/localtime_r.texi����������������������������������������0000664�0000000�0000000�00000001664�14110572173�0023410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localtime_r @section @code{localtime_r} @findex localtime_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html} Gnulib module: time_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function loops forever for values near extrema (such as the year @math{-2**31}): Mac OS X 10.6. You can use the @code{time_rz} module to work around the problem. @item On some platforms, this function returns nonsense values for unsupported arguments (like @math{2^56}), rather than failing: FreeBSD 10. @item On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. @end itemize ����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lockf.texi����������������������������������������������0000664�0000000�0000000�00000001132�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lockf @section @code{lockf} @findex lockf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lockf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 6.0. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log.texi������������������������������������������������0000664�0000000�0000000�00000001031�14110572173�0021663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log @section @code{log} @findex log POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log.html} Gnulib module: log or log-ieee Portability problems fixed by either Gnulib module @code{log} or @code{log-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{log-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log10.texi����������������������������������������������0000664�0000000�0000000�00000001053�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10 @section @code{log10} @findex log10 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log10.html} Gnulib module: log10 or log10-ieee Portability problems fixed by either Gnulib module @code{log10} or @code{log10-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{log10-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log10f.texi���������������������������������������������0000664�0000000�0000000�00000001323�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10f @section @code{log10f} @findex log10f POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log10f.html} Gnulib module: log10f or log10f-ieee Portability problems fixed by either Gnulib module @code{log10f} or @code{log10f-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{log10f-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log10l.texi���������������������������������������������0000664�0000000�0000000�00000002006�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10l @section @code{log10l} @findex log10l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log10l.html} Gnulib module: log10l Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function is not declared and does not work on some platforms: AIX 5.1. @item This function returns an unnormalized negative infinity for a minus zero argument on some platforms: IRIX 6.5. @item This function returns an unnormalized positive infinity for a positive infinite argument on some platforms: IRIX 6.5. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log1p.texi����������������������������������������������0000664�0000000�0000000�00000001152�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1p @section @code{log1p} @findex log1p POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log1p.html} Gnulib module: log1p or log1p-ieee Portability problems fixed by either Gnulib module @code{log1p} or @code{log1p-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{log1p-ieee}: @itemize @item This function has problems when the argument is minus zero on some platforms: AIX 7.1, HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log1pf.texi���������������������������������������������0000664�0000000�0000000�00000001371�14110572173�0022301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1pf @section @code{log1pf} @findex log1pf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log1pf.html} Gnulib module: log1pf or log1pf-ieee Portability problems fixed by either Gnulib module @code{log1pf} or @code{log1pf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. @item This function returns a wrong value for the argument @code{-1.0f} on some platforms: IRIX 6.5. @end itemize Portability problems fixed by Gnulib module @code{log1pf-ieee}: @itemize @item This function has problems when the argument is minus zero on some platforms: OpenBSD 4.9, AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log1pl.texi���������������������������������������������0000664�0000000�0000000�00000001547�14110572173�0022314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1pl @section @code{log1pl} @findex log1pl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log1pl.html} Gnulib module: log1pl or log1pl-ieee Portability problems fixed by either Gnulib module @code{log1pl} or @code{log1pl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x. @end itemize Portability problems fixed by Gnulib module @code{log1pl-ieee}: @itemize @item This function has problems when the argument is minus zero on some platforms: AIX 7.1, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log2.texi�����������������������������������������������0000664�0000000�0000000�00000001700�14110572173�0021750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2 @section @code{log2} @findex log2 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log2.html} Gnulib module: log2 or log2-ieee Portability problems fixed by either Gnulib module @code{log2} or @code{log2-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, older IRIX 6.5, Solaris 9, MSVC 9, Android 4.2. @item This function is not declared on some platforms: IRIX 6.5. @item This function is only provided as a macro on some platforms: Cygwin 1.5.x. @item This function returns slightly wrong values for exact powers of 2 on some platforms: Cygwin 1.7.9. @end itemize Portability problems fixed by Gnulib module @code{log2-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 10/x86_64. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log2f.texi����������������������������������������������0000664�0000000�0000000�00000001711�14110572173�0022120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2f @section @code{log2f} @findex log2f POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log2f.html} Gnulib module: log2f or log2f-ieee Portability problems fixed by either Gnulib module @code{log2f} or @code{log2f-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, older IRIX 6.5, Solaris 9, MSVC 9, Android 4.2. @item This function is not declared on some platforms: IRIX 6.5. @item This function is only provided as a macro on some platforms: Cygwin 1.5.x. @item This function returns slightly wrong values for exact powers of 2 on some platforms: Cygwin 1.7.9. @end itemize Portability problems fixed by Gnulib module @code{log2f-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1, Solaris 10/x86_64. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/log2l.texi����������������������������������������������0000664�0000000�0000000�00000001460�14110572173�0022127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2l @section @code{log2l} @findex log2l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/log2l.html} Gnulib module: log2l Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.2. @item This function is not declared on some platforms: IRIX 6.5. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x. @item This function returns Infinity for some large finite arguments on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/logb.texi�����������������������������������������������0000664�0000000�0000000�00000001131�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logb @section @code{logb} @findex logb POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/logb.html} Gnulib module: logb Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @item This function is missing a declaration on some platforms: Cygwin 1.5.x. @item This function produces wrong results for subnormal numbers on some platforms: glibc 2.17/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4, Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/logbf.texi����������������������������������������������0000664�0000000�0000000�00000001052�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logbf @section @code{logbf} @findex logbf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/logbf.html} Gnulib module: logbf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @item This function produces wrong results for subnormal numbers on some platforms: glibc 2.11/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/logbl.texi����������������������������������������������0000664�0000000�0000000�00000001215�14110572173�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logbl @section @code{logbl} @findex logbl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/logbl.html} Gnulib module: logbl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.2. @item This function produces wrong results for subnormal numbers on some platforms: glibc 2.11/powerpc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 11.4, glibc 2.23/powerpc64le. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/logf.texi�����������������������������������������������0000664�0000000�0000000�00000001301�14110572173�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logf @section @code{logf} @findex logf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/logf.html} Gnulib module: logf or logf-ieee Portability problems fixed by either Gnulib module @code{logf} or @code{logf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{logf-ieee}: @itemize @item This function returns a wrong value for a negative argument on some platforms: NetBSD 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/logl.texi�����������������������������������������������0000664�0000000�0000000�00000001414�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logl @section @code{logl} @findex logl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/logl.html} Gnulib module: logl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function returns wrong results on some platforms: glibc 2.7 on Linux/SPARC64. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x, NetBSD 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/longjmp.texi��������������������������������������������0000664�0000000�0000000�00000001365�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node longjmp @section @code{longjmp} @findex longjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/longjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. @item When longjumping out of a signal handler that was being executed on an alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD, OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} structure managed by the kernel. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lrand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrand48 @section @code{lrand48} @findex lrand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lrand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lrint.texi����������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrint @section @code{lrint} @findex lrint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lrint.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lrintf.texi���������������������������������������������0000664�0000000�0000000�00000000665�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrintf @section @code{lrintf} @findex lrintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lrintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lrintl.texi���������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrintl @section @code{lrintl} @findex lrintl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lrintl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/lround.texi���������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lround @section @code{lround} @findex lround POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lround.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lroundf.texi��������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lroundf @section @code{lroundf} @findex lroundf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lroundf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �����������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lroundl.texi��������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lroundl @section @code{lroundl} @findex lroundl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lroundl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize ���������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lsearch.texi��������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lsearch @section @code{lsearch} @findex lsearch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lsearch.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lseek.texi����������������������������������������������0000664�0000000�0000000�00000002252�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lseek @section @code{lseek} @findex lseek POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html} Gnulib module: lseek Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{lseek} does not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX does not specify which file descriptors support seeking and which don't. In practice, regular files and block devices support seeking, and ttys, pipes, and most character devices don't support it. @item When the third argument is invalid, POSIX says that @code{lseek} should set @code{errno} to @code{EINVAL} and return @minus{}1, but in this situation a @code{SIGSYS} signal is raised on some platforms: IRIX 6.5. @item Some systems do not support @code{SEEK_DATA} and @code{SEEK_HOLE}: AIX, HP-UX, Microsoft Windows, NetBSD, OpenBSD. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/lstat.texi����������������������������������������������0000664�0000000�0000000�00000002546�14110572173�0022245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lstat @section @code{lstat} @findex lstat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lstat.html} Gnulib module: lstat Portability problems fixed by Gnulib: @itemize @item On platforms where @code{off_t} is a 32-bit type, @code{lstat} may not correctly report the size of files or block devices larger than 2 GB. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. (Cf. @code{AC_SYS_LARGEFILE}.) @item For symlinks, when the argument ends in a slash, some platforms don't dereference the argument: Solaris 9. @item On some platforms, @code{lstat("file/",buf)} succeeds instead of failing with @code{ENOTDIR}. macOS 11.1, Solaris 9. @item On Solaris 11.4, when this function yields a timestamp with a nonpositive @code{tv_sec} value, @code{tv_nsec} might be in the range @minus{}1000000000..@minus{}1, representing a negative nanoseconds offset from @code{tv_sec}. @item On Windows platforms (excluding Cygwin), symlinks are not supported, so @code{lstat} does not exist. @end itemize Portability problems not fixed by Gnulib: @itemize @item @xref{sys/stat.h}, for general portability problems with @code{struct stat}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/malloc.texi���������������������������������������������0000664�0000000�0000000�00000001621�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node malloc @section @code{malloc} @findex malloc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html} Gnulib module: malloc-posix Portability problems fixed by Gnulib: @itemize @item Upon failure, the function does not set @code{errno} to @code{ENOMEM} on some platforms: mingw, MSVC 14. @item On some platforms, @code{malloc (n)} can succeed even if @code{n} exceeds @code{PTRDIFF_MAX}. Although this behavior is arguably allowed by POSIX it can lead to behavior not defined by POSIX later, so @code{malloc-posix} does not allow going over the limit. @end itemize Extension: Gnulib provides a module @samp{malloc-gnu} that substitutes a @code{malloc} implementation that behaves more like the glibc implementation, by fixing this portability problem: @itemize @item @code{malloc (0)} returns @code{NULL} on success on some platforms: AIX 7.2. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mblen.texi����������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mblen @section @code{mblen} @findex mblen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mblen.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 7.1. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbrlen.texi���������������������������������������������0000664�0000000�0000000�00000002247�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrlen @section @code{mbrlen} @findex mbrlen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrlen.html} Gnulib module: mbrlen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw. @item In the C or POSIX locales, this function can return @code{(size_t) -1} and set @code{errno} to @code{EILSEQ}: glibc 2.23. @item This function returns 0 instead of @code{(size_t) -2} when the input is empty: glibc 2.19. @item This function returns @code{(size_t) -1} instead of @code{(size_t) -2} when the input is empty: AIX 5.1. @item This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 5.1. @item This function returns the total number of bytes that make up the multibyte character, not the number of bytes that were needed to complete the multibyte character, on some platforms: HP-UX 11.11, Solaris 11 2010-11. @item This function may not return 0 when parsing the NUL character on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbrtoc16.texi�������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrtoc16 @section @code{mbrtoc16} @findex mbrtoc16 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 9, Android 4.4. @end itemize ����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbrtoc32.texi�������������������������������������������0000664�0000000�0000000�00000001600�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrtoc32 @section @code{mbrtoc32} @findex mbrtoc32 Gnulib module: mbrtoc32 Portability problems fixed by Gnulib: @itemize @item This function is missing on most non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 9, Android 4.4. @item In the C or POSIX locales, this function can return @code{(size_t) -1} and set @code{errno} to @code{EILSEQ}: glibc 2.23. @item This function returns 0 instead of @code{(size_t) -2} when the input is empty: glibc 2.19. @item This function does not recognize multibyte sequences that @code{mbrtowc} recognizes on some platforms: FreeBSD 13.0, Solaris 11.4, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as an inline function on some platforms: Haiku 2020. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbrtowc.texi��������������������������������������������0000664�0000000�0000000�00000003556�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrtowc @section @code{mbrtowc} @findex mbrtowc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrtowc.html} Gnulib module: mbrtowc Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw. @item In the C or POSIX locales, this function can return @code{(size_t) -1} and set @code{errno} to @code{EILSEQ}: glibc 2.23. @item This function returns 0 instead of @code{(size_t) -2} when the input is empty: glibc 2.19. @item This function returns @code{(size_t) -1} instead of @code{(size_t) -2} when the input is empty: AIX 7.2. @item This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 7.2. @item This function stores a wide character when when parsing an incomplete multibyte character on some platforms: MSVC 14. @item This function returns the total number of bytes that make up the multibyte character, not the number of bytes that were needed to complete the multibyte character, on some platforms: HP-UX 11.11, Solaris 11 2010-11, mingw, possibly MSVC 14. @item This function may not return 0 when parsing the NUL character on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF (that is, beyond 0x0010FFFF) on some platforms: @c https://sourceware.org/bugzilla/show_bug.cgi?id=2373 @c https://sourceware.org/bugzilla/show_bug.cgi?id=26034 glibc 2.34. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the ISO C11 function @code{mbrtoc32}, provided by Gnulib module @code{mbrtoc32}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbsinit.texi��������������������������������������������0000664�0000000�0000000�00000000754�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsinit @section @code{mbsinit} @findex mbsinit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbsinit.html} Gnulib module: mbsinit Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, MSVC 14. @item This function always returns 1, even in multibyte locales, on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������gnulib-20210822~d383792/doc/posix-functions/mbsnrtowcs.texi�����������������������������������������0000664�0000000�0000000�00000002361�14110572173�0023312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsnrtowcs @section @code{mbsnrtowcs} @findex mbsnrtowcs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbsnrtowcs.html} Gnulib module: mbsnrtowcs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item This function produces invalid wide characters on some platforms: Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{mbsnrtoc32s}, provided by Gnulib module @code{mbsnrtoc32s}, operates on 32-bit wide characters and therefore does not have this limitation. @item The specification is not clear about whether this function should update the conversion state when the first argument (the destination pointer) is NULL. The glibc, Mac OS X, FreeBSD implementations do update the state in this case. For portability, when passing a NULL destination argument, it is best to pass a pointer to a temporary copy of the conversion state. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbsrtowcs.texi������������������������������������������0000664�0000000�0000000�00000002410�14110572173�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsrtowcs @section @code{mbsrtowcs} @findex mbsrtowcs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbsrtowcs.html} Gnulib module: mbsrtowcs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw. @item This function does not work on some platforms: HP-UX 11, Solaris 11 2010-11. @item This function does not work when the first argument is NULL on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{mbsrtoc32s}, provided by Gnulib module @code{mbsrtoc32s}, operates on 32-bit wide characters and therefore does not have this limitation. @item The specification is not clear about whether this function should update the conversion state when the first argument (the destination pointer) is NULL. The glibc implementation does not update the state in this case; the macOS and FreeBSD implementations do. For portability, when passing a NULL destination argument, it is best to pass a pointer to a temporary copy of the conversion state. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbstowcs.texi�������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbstowcs @section @code{mbstowcs} @findex mbstowcs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbstowcs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{mbstoc32s}, provided by Gnulib module @code{mbstoc32s}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mbtowc.texi���������������������������������������������0000664�0000000�0000000�00000001573�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbtowc @section @code{mbtowc} @findex mbtowc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbtowc.html} Gnulib module: mbtowc Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF (that is, beyond 0x0010FFFF) on some platforms: @c https://sourceware.org/bugzilla/show_bug.cgi?id=2373 @c https://sourceware.org/bugzilla/show_bug.cgi?id=26034 glibc 2.34. @item This function accumulates hidden state on some platforms: glibc 2.8 (see @url{https://sourceware.org/bugzilla/show_bug.cgi?id=9674}). @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memccpy.texi��������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memccpy @section @code{memccpy} @findex memccpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memccpy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memchr.texi���������������������������������������������0000664�0000000�0000000�00000001066�14110572173�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memchr @section @code{memchr} @findex memchr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memchr.html} Gnulib module: memchr Portability problems fixed by Gnulib: @itemize @item This function dereferences too much memory on some platforms: glibc 2.10 on x86_64, IA-64; glibc 2.11 on Alpha, AIX 7.2. @item This function returns NULL if the character argument is not in the range of an @code{unsigned char} on some platforms: Android 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memcmp.texi���������������������������������������������0000664�0000000�0000000�00000001101�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memcmp @section @code{memcmp} @findex memcmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memcmp.html} Gnulib module: memcmp Portability problems fixed by Gnulib: @itemize @item This function fails when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary on some older platforms: NeXTstep/x86. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function produces wrong results when the arguments are constant strings and the compiler is clang 6.0.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memcpy.texi���������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memcpy @section @code{memcpy} @findex memcpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memcpy.html} Gnulib module: memcpy Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memmove.texi��������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memmove @section @code{memmove} @findex memmove POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memmove.html} Gnulib module: memmove Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/memset.texi���������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memset @section @code{memset} @findex memset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/memset.html} Gnulib module: memset Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkdir.texi����������������������������������������������0000664�0000000�0000000�00000002100�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdir @section @code{mkdir} @findex mkdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html} Gnulib module: sys_stat or mkdir Portability problems fixed by either Gnulib module @code{sys_stat} or @code{mkdir}: @itemize @item This function is declared in different header files (namely, @code{<io.h>} or @code{<direct.h>}) on some platforms: mingw, MSVC 14. @item On Windows platforms (excluding Cygwin), this function is called @code{_mkdir} and takes only one argument. The fix (without Gnulib) is to define a macro like this: @smallexample #define mkdir ((int (*)()) _mkdir) @end smallexample or @smallexample #define mkdir(path,mode) _mkdir (path) @end smallexample @end itemize Portability problems fixed by Gnulib module @code{mkdir}: @itemize @item When the argument ends in a slash, the function call fails on some platforms. @item This function mistakenly succeeds on @samp{mkdir("d/./",mode)} on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkdirat.texi��������������������������������������������0000664�0000000�0000000�00000001130�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdirat @section @code{mkdirat} @findex mkdirat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdirat.html} Gnulib module: mkdirat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkdtemp.texi��������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdtemp @section @code{mkdtemp} @findex mkdtemp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdtemp.html} Gnulib module: mkdtemp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkfifo.texi���������������������������������������������0000664�0000000�0000000�00000001232�14110572173�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkfifo @section @code{mkfifo} @findex mkfifo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkfifo.html} Gnulib module: mkfifo Portability problems fixed by Gnulib: @itemize @item This function mishandles trailing slash on some platforms: FreeBSD 7.2, Solaris 9. @item This function is missing on some platforms; however, the replacement always fails with @code{ENOSYS}: mingw, MSVC 14, Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item If the argument exists and is a directory, this function fails with @code{EISDIR} instead of the correct @code{EEXIST}: HP-UX 11.11. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkfifoat.texi�������������������������������������������0000664�0000000�0000000�00000002011�14110572173�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkfifoat @section @code{mkfifoat} @findex mkfifoat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkfifoat.html} Gnulib module: mkfifoat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item The gnulib replacement function always fails with @samp{ENOSYS} on some platforms: mingw, MSVC 14. @item If the argument exists and is a directory, the gnulib replacement function fails with @code{EISDIR} instead of the correct @code{EEXIST}: HP-UX 11.11. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mknod.texi����������������������������������������������0000664�0000000�0000000�00000001616�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mknod @section @code{mknod} @findex mknod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mknod.html} Gnulib module: mknod Portability problems fixed by Gnulib: @itemize @item This function requires super-user privileges to create a fifo: FreeBSD 7.2, NetBSD 8.0, OpenBSD 6.7. @item This function mishandles trailing slash on some platforms: FreeBSD 7.2, Solaris 9. @item This function is missing on some platforms; however, the replacement always fails with @code{ENOSYS}: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item Use of this function for anything except fifos is not portable, generally requiring super-user privileges and knowledge of supported device numbers. @item If the argument exists and is a directory, this function fails with @code{EISDIR} instead of the correct @code{EEXIST}: HP-UX 11.11. @end itemize ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mknodat.texi��������������������������������������������0000664�0000000�0000000�00000002005�14110572173�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mknodat @section @code{mknodat} @findex mknodat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mknodat.html} Gnulib module: mkfifoat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file, on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item The gnulib replacement function always fails with @samp{ENOSYS} on some platforms: mingw, MSVC 14. @item If the argument exists and is a directory, the gnulib replacement function fails with @code{EISDIR} instead of the correct @code{EEXIST}: HP-UX 11.11. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mkstemp.texi��������������������������������������������0000664�0000000�0000000�00000001474�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkstemp @section @code{mkstemp} @findex mkstemp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkstemp.html} Gnulib module: mkstemp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{mkstemp} may not work correctly to create files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item On some older platforms, @code{mkstemp} can create a world or group writable or readable file, if you haven't set the process umask to 077. This is a security risk. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize The gnulib module @code{clean-temp} can create temporary files that will not be left behind after signals such as SIGINT. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mktime.texi���������������������������������������������0000664�0000000�0000000�00000001524�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mktime @section @code{mktime} @findex mktime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mktime.html} Gnulib module: mktime Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @item @code{mktime} may go into an endless loop on some platforms. @item @code{mktime} may occasionally return wrong results on some platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function yields incorrect values for timestamps before the year 1: MacOS X 10.5, Solaris 11.3. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mlock.texi����������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mlock @section @code{mlock} @findex mlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mlockall.texi�������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0022706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mlockall @section @code{mlockall} @findex mlockall POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mlockall.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.1. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mmap.texi�����������������������������������������������0000664�0000000�0000000�00000002137�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mmap @section @code{mmap} @findex mmap POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mmap.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @item To get anonymous memory, on some platforms, you can use the flags @code{MAP_ANONYMOUS | MAP_PRIVATE} and @code{-1} instead of a file descriptor; on others you have to use a read-only file descriptor of @file{/dev/zero}. @item On HP-UX, passing a non-NULL first argument, as a hint for the address (even without @code{MAP_FIXED}, often causes @code{mmap} to fail. Better pass NULL in this case. @item On HP-UX, @code{MAP_FIXED} basically never works. On other platforms, it depends on the circumstances whether memory can be returned at a given address. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/modf.texi�����������������������������������������������0000664�0000000�0000000�00000001177�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modf @section @code{modf} @findex modf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/modf.html} Gnulib module: modf or modf-ieee Portability problems fixed by either Gnulib module @code{modf} or @code{modf-ieee}: @itemize @end itemize Portability problems fixed by Gnulib module @code{modf-ieee}: @itemize @item This function has problems with a NaN argument on some platforms: NetBSD 5.1, Cygwin. @item This function has problems with infinite arguments on some platforms: FreeBSD 6.4, OpenBSD 6.7, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/modff.texi����������������������������������������������0000664�0000000�0000000�00000001477�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modff @section @code{modff} @findex modff POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/modff.html} Gnulib module: modff or modff-ieee Portability problems fixed by either Gnulib module @code{modff} or @code{modff-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11. @item This function is only defined as a buggy macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{modff-ieee}: @itemize @item This function has problems with a NaN argument on some platforms: NetBSD 5.1, OpenBSD 6.7, Solaris 9, Cygwin. @item This function has problems with infinite arguments on some platforms: IRIX 6.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/modfl.texi����������������������������������������������0000664�0000000�0000000�00000001422�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modfl @section @code{modfl} @findex modfl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/modfl.html} Gnulib module: modfl or modfl-ieee Portability problems fixed by either Gnulib module @code{modfl} or @code{modfl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{modfl-ieee}: @itemize @item This function has problems with infinite arguments on some platforms: IRIX 6.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mprotect.texi�������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mprotect @section @code{mprotect} @findex mprotect POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mprotect.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function does not set @code{errno} on some platforms: mingw. @item On AIX, it is not possible to use @code{mprotect} on memory regions allocated with @code{malloc}. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_close.texi�������������������������������������������0000664�0000000�0000000�00000000716�14110572173�0022715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_close @section @code{mq_close} @findex mq_close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_close.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_getattr.texi�����������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_getattr @section @code{mq_getattr} @findex mq_getattr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_getattr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_notify.texi������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_notify @section @code{mq_notify} @findex mq_notify POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_notify.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_open.texi��������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_open @section @code{mq_open} @findex mq_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_receive.texi�����������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_receive @section @code{mq_receive} @findex mq_receive POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_receive.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_send.texi��������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_send @section @code{mq_send} @findex mq_send POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_send.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_setattr.texi�����������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_setattr @section @code{mq_setattr} @findex mq_setattr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_setattr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_timedreceive.texi������������������������������������0000664�0000000�0000000�00000001022�14110572173�0024244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_timedreceive @section @code{mq_timedreceive} @findex mq_timedreceive POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_timedreceive.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_timedsend.texi���������������������������������������0000664�0000000�0000000�00000001006�14110572173�0023555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_timedsend @section @code{mq_timedsend} @findex mq_timedsend POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_timedsend.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mq_unlink.texi������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0023105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_unlink @section @code{mq_unlink} @findex mq_unlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mq_unlink.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mrand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mrand48 @section @code{mrand48} @findex mrand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/mrand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/msgctl.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgctl @section @code{msgctl} @findex msgctl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/msgctl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/msgget.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgget @section @code{msgget} @findex msgget POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/msgget.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/msgrcv.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgrcv @section @code{msgrcv} @findex msgrcv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/msgrcv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/msgsnd.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgsnd @section @code{msgsnd} @findex msgsnd POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/msgsnd.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/msync.texi����������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msync @section @code{msync} @findex msync POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/msync.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On NetBSD, @code{msync} takes only two arguments. @end itemize �����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_destroy.texi����������������������������������������0000664�0000000�0000000�00000001130�14110572173�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_destroy @section @code{mtx_destroy} @findex mtx_destroy Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_init.texi�������������������������������������������0000664�0000000�0000000�00000001117�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_init @section @code{mtx_init} @findex mtx_init Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_lock.texi�������������������������������������������0000664�0000000�0000000�00000001117�14110572173�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_lock @section @code{mtx_lock} @findex mtx_lock Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_timedlock.texi��������������������������������������0000664�0000000�0000000�00000001136�14110572173�0023753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_timedlock @section @code{mtx_timedlock} @findex mtx_timedlock Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_trylock.texi����������������������������������������0000664�0000000�0000000�00000001130�14110572173�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_trylock @section @code{mtx_trylock} @findex mtx_trylock Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/mtx_unlock.texi�����������������������������������������0000664�0000000�0000000�00000001125�14110572173�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mtx_unlock @section @code{mtx_unlock} @findex mtx_unlock Documentation:@* @ifinfo @ref{ISO C Mutexes,,Mutexes,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Mutexes.html}. @end ifnotinfo Gnulib module: mtx Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/munlock.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munlock @section @code{munlock} @findex munlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/munlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/munlockall.texi�����������������������������������������0000664�0000000�0000000�00000000642�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munlockall @section @code{munlockall} @findex munlockall POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/munlockall.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 4.1. @end itemize ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/munmap.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munmap @section @code{munmap} @findex munmap POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/munmap.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nan.texi������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0021665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nan @section @code{nan} @findex nan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nan.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ���������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nanf.texi�����������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanf @section @code{nanf} @findex nanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nanl.texi�����������������������������������������������0000664�0000000�0000000�00000000722�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanl @section @code{nanl} @findex nanl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 3.1. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nanosleep.texi������������������������������������������0000664�0000000�0000000�00000001123�14110572173�0023070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanosleep @section @code{nanosleep} @findex nanosleep POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html} Gnulib module: nanosleep Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function mishandles large arguments when interrupted by a signal on some platforms: Linux 64-bit, Solaris 64-bit. @item This function cannot sleep longer than 49.7 days on some platforms: Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nearbyint.texi������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyint @section @code{nearbyint} @findex nearbyint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nearbyint.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nearbyintf.texi�����������������������������������������0000664�0000000�0000000�00000000721�14110572173�0023250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyintf @section @code{nearbyintf} @findex nearbyintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nearbyintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nearbyintl.texi�����������������������������������������0000664�0000000�0000000�00000000752�14110572173�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyintl @section @code{nearbyintl} @findex nearbyintl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nearbyintl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @end itemize ����������������������gnulib-20210822~d383792/doc/posix-functions/newlocale.texi������������������������������������������0000664�0000000�0000000�00000001333�14110572173�0023060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node newlocale @section @code{newlocale} @findex newlocale POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/newlocale.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 9.0, NetBSD 5.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. @item This function is useless because the @code{locale_t} type is not defined on some platforms: z/OS. @item This function is useless because the @code{locale_t} type contains basically no information on some platforms: OpenBSD 6.3. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextafter.texi������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafter @section @code{nextafter} @findex nextafter POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafter.html} Gnulib module: nextafter Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextafterf.texi�����������������������������������������0000664�0000000�0000000�00000000637�14110572173�0023263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafterf @section @code{nextafterf} @findex nextafterf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafterf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextafterl.texi�����������������������������������������0000664�0000000�0000000�00000000763�14110572173�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafterl @section @code{nextafterl} @findex nextafterl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafterl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize �������������gnulib-20210822~d383792/doc/posix-functions/nextdown.texi�������������������������������������������0000664�0000000�0000000�00000001403�14110572173�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextdown @section @code{nextdown} @findex nextdown Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextdown.3.html,,man nextdown}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextdownf.texi������������������������������������������0000664�0000000�0000000�00000001410�14110572173�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextdownf @section @code{nextdownf} @findex nextdownf Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextdownf.3.html,,man nextdownf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextdownl.texi������������������������������������������0000664�0000000�0000000�00000001410�14110572173�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextdownl @section @code{nextdownl} @findex nextdownl Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextdownl.3.html,,man nextdownl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nexttoward.texi�����������������������������������������0000664�0000000�0000000�00000000763�14110572173�0023314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttoward @section @code{nexttoward} @findex nexttoward POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nexttoward.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.2. @end itemize �������������gnulib-20210822~d383792/doc/posix-functions/nexttowardf.texi����������������������������������������0000664�0000000�0000000�00000000752�14110572173�0023460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttowardf @section @code{nexttowardf} @findex nexttowardf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nexttowardf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9. @end itemize ����������������������gnulib-20210822~d383792/doc/posix-functions/nexttowardl.texi����������������������������������������0000664�0000000�0000000�00000000767�14110572173�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttowardl @section @code{nexttowardl} @findex nexttowardl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nexttowardl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 8.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 9, Android 4.2. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/nextup.texi���������������������������������������������0000664�0000000�0000000�00000001371�14110572173�0022434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextup @section @code{nextup} @findex nextup Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextup.3.html,,man nextup}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextupf.texi��������������������������������������������0000664�0000000�0000000�00000001376�14110572173�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextupf @section @code{nextupf} @findex nextupf Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextupf.3.html,,man nextupf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nextupl.texi��������������������������������������������0000664�0000000�0000000�00000001376�14110572173�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextupl @section @code{nextupl} @findex nextupl Documentation: @itemize @item @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/nextupl.3.html,,man nextupl}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.23, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nftw.texi�����������������������������������������������0000664�0000000�0000000�00000001142�14110572173�0022063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nftw @section @code{nftw} @findex nftw POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nftw.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14, Android 4.1. @item On platforms where @code{off_t} is a 32-bit type, this function may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nice.texi�����������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nice @section @code{nice} @findex nice POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nice.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item In glibc before glibc 2.2.4, @code{nice} returned 0 upon success. @end itemize ������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nl_langinfo.texi����������������������������������������0000664�0000000�0000000�00000003130�14110572173�0023372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_langinfo @section @code{nl_langinfo} @findex nl_langinfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nl_langinfo.html} Gnulib module: nl_langinfo Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @item The constant @code{CODESET} is not supported on some platforms: OpenBSD 3.8. @item The constants @code{ALTMON_1} to @code{ALTMON_12} are not defined on some platforms: glibc 2.26, musl libc, macOS 11.1, NetBSD 8.0, OpenBSD 6.7, AIX 7.2, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Haiku, Cygwin 2.9. @item The constants @code{ERA}, @code{ERA_D_FMT}, @code{ERA_D_T_FMT}, @code{ERA_T_FMT}, @code{ALT_DIGITS} are not supported on some platforms: OpenBSD 6.7. @item The constants @code{YESEXPR} and @code{NOEXPR} do not return a valid string on some platforms: IRIX 6.5. @item This function is not multithread-safe on some platforms: Solaris 11.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Cygwin 1.5.x, which doesn't have locales, @code{nl_langinfo(CODESET)} always returns @code{"US-ASCII"}. @item On Cygwin 1.7.0, only the charset portion of a locale designation is honored. @item On NetBSD 5.0, in some locales, @code{nl_langinfo(CRNCYSTR)} returns the empty string, although the local currency symbol, as returned by @code{localeconv()->currency_symbol}, is non-empty. @item On NetBSD 5.1, in the "C" locale, the results of @code{nl_langinfo(ABMON_1)} ... @code{nl_langinfo(ABMON_12)} are full month names, not abbreviated month names. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nl_langinfo_l.texi��������������������������������������0000664�0000000�0000000�00000001001�14110572173�0023700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_langinfo_l @section @code{nl_langinfo_l} @findex nl_langinfo_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nl_langinfo_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/nrand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nrand48 @section @code{nrand48} @findex nrand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/nrand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ntohl.texi����������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ntohl @section @code{ntohl} @findex ntohl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ntohl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ntohs.texi����������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ntohs @section @code{ntohs} @findex ntohs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ntohs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11, mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/open.texi�����������������������������������������������0000664�0000000�0000000�00000004103�14110572173�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open @section @code{open} @findex open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html} Gnulib module: open, fchdir Portability problems fixed by the Gnulib module @code{open}: @itemize @item Some platforms do not support @code{O_CLOEXEC}: @c See posix-headers/fcntl.texi for the list. Mac OS X 10.6, FreeBSD 8.4, NetBSD 5.1, OpenBSD 4.9, Minix 3.1.8, AIX 7.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.7.x, mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{open} may not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: macOS 11.1, FreeBSD 7.2, AIX 7.1, HP-UX 11.00, Solaris 9. @item This function does not support the @code{O_NONBLOCK} flag when it is defined by the gnulib module @code{nonblocking} on some platforms: mingw, MSVC 14. @item On Windows platforms (excluding Cygwin), this function does usually not recognize the @file{/dev/null} filename. @end itemize Portability problems fixed by the Gnulib module @code{fchdir}: @itemize @item On Windows platforms (excluding Cygwin), this function fails to open a read-only descriptor for directories. @end itemize Portability problems not fixed by Gnulib: @itemize @item The Gnulib replacement for @code{O_CLOEXEC} is not atomic, and so is not safe in the presence of multiple threads or signal handlers. @item @code{open ("symlink", O_NOFOLLOW ...)} fails with @code{errno} set to @code{EMLINK} instead of the POSIX-required @code{ELOOP} on some platforms: FreeBSD 10.1. @item @code{open ("symlink", O_NOFOLLOW ...)} fails with @code{errno} set to @code{EFTYPE} instead of the POSIX-required @code{ELOOP} on some platforms: NetBSD 6.1. @item On Windows, this function returns a file handle in @code{O_TEXT} mode by default; this means that it translates @code{'\n'} to CR/LF by default. Use the @code{O_BINARY} flag if you need reliable binary I/O. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/open_memstream.texi�������������������������������������0000664�0000000�0000000�00000001165�14110572173�0024125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open_memstream @section @code{open_memstream} @findex open_memstream POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. @end itemize An alternative to the @code{open_memstream} function is the Gnulib module @code{string-buffer}. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/open_wmemstream.texi������������������������������������0000664�0000000�0000000�00000001251�14110572173�0024310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open_wmemstream @section @code{open_wmemstream} @findex open_wmemstream POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/open_wmemstream.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/openat.texi���������������������������������������������0000664�0000000�0000000�00000002717�14110572173�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node openat @section @code{openat} @findex openat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/openat.html} Gnulib module: openat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item Some platforms do not support @code{O_CLOEXEC}: AIX 7.1, Solaris 10. @item On platforms where @code{off_t} is a 32-bit type, @code{open} may not work correctly with files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item The Gnulib replacement for @code{O_CLOEXEC} is not atomic, and so is not safe in the presence of multiple threads or signal handlers. @item @code{openat (fd, "symlink", O_NOFOLLOW ...)} fails with @code{errno} set to @code{EMLINK} instead of the POSIX-required @code{ELOOP} on some platforms: FreeBSD 10.1. @item @code{openat (fd, "symlink", O_NOFOLLOW ...)} fails with @code{errno} set to @code{EFTYPE} instead of the POSIX-required @code{ELOOP} on some platforms: NetBSD 6.1. @end itemize �������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/opendir.texi��������������������������������������������0000664�0000000�0000000�00000001176�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node opendir @section @code{opendir} @findex opendir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/opendir.html} Gnulib module: opendir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/openlog.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node openlog @section @code{openlog} @findex openlog POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/openlog.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/optarg.texi���������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optarg @section @code{optarg} @findex optarg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/optarg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: Mac OS X 10.5, IRIX 6.5, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/opterr.texi���������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node opterr @section @code{opterr} @findex opterr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/opterr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: IRIX 6.5, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/optind.texi���������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optind @section @code{optind} @findex optind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/optind.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: IRIX 6.5, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/optopt.texi���������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0022444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optopt @section @code{optopt} @findex optopt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/optopt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: Mac OS X 10.5, IRIX 6.5, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pathconf.texi�������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pathconf @section @code{pathconf} @findex pathconf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pathconf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pause.texi����������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pause @section @code{pause} @findex pause POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pclose.texi���������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pclose @section @code{pclose} @findex pclose POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pclose.html} Gnulib module: pclose Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/perror.texi���������������������������������������������0000664�0000000�0000000�00000002251�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node perror @section @code{perror} @findex perror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/perror.html} Gnulib module: perror Portability problems fixed by Gnulib: @itemize @item This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, Cygwin 1.5.x, mingw, MSVC 14. @item This function treats @code{errno} of 0 like failure, although POSIX requires that the message declare it as a success, on some platforms: FreeBSD 8.2, OpenBSD 4.7, macOS 11.1. @item This function clobbers the @code{strerror} buffer on some platforms: Cygwin 1.7.9. @item This function fails to print a useful a string for out-of-range integers on some platforms: HP-UX 11, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX requires that this function set the stream error bit (detected by @code{ferror}) on write failure, but not all platforms do this: glibc 2.13, cygwin 1.7.9. @item POSIX requires that this function not alter stream orientation, but the gnulib replacement locks in byte orientation and fails on wide character streams. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pipe.texi�����������������������������������������������0000664�0000000�0000000�00000000750�14110572173�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pipe @section @code{pipe} @findex pipe POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pipe.html} Gnulib module: pipe-posix Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function crashes rather than failing with @code{EMFILE} if no resources are left on some platforms: Cygwin 1.7.9. @end itemize ������������������������gnulib-20210822~d383792/doc/posix-functions/poll.texi�����������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0022053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node poll @section @code{poll} @findex poll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html} Gnulib module: poll Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, HP NonStop. @item This function doesn't work on special files like @file{/dev/null} and ttys like @file{/dev/tty} on some platforms: AIX 5.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item Under Windows, when passing a pipe, Gnulib's @code{poll} replacement might return 0 even before the timeout has passed. Programs using it with pipes can thus busy wait. @item On some platforms, file descriptors other than sockets do not support POLLHUP; they will return a "readable" or "writable" status instead: AIX 7.2, HP NonStop. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/popen.texi����������������������������������������������0000664�0000000�0000000�00000001547�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node popen @section @code{popen} @findex popen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html} Gnulib module: popen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item Some platforms start the child with closed stdin or stdout if the standard descriptors were closed in the parent: Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item On native Windows platforms, this functions terminates the current process with exit code 127 if the environment variable @code{COMSPEC} is not set. @item Some platforms mistakenly set the close-on-exec bit, then if it is cleared by the application, the platform then leaks file descriptors from earlier @code{popen} calls into subsequent @code{popen} children: Cygwin 1.5.x. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_fadvise.texi��������������������������������������0000664�0000000�0000000�00000001330�14110572173�0023747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_fadvise @section @code{posix_fadvise} @findex posix_fadvise POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_fadvise.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_fallocate.texi������������������������������������0000664�0000000�0000000�00000002074�14110572173�0024266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_fallocate @section @code{posix_fallocate} @findex posix_fallocate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_fallocate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item POSIX specifies that EINVAL should be returned when the file system doesn't support the allocation operation directly. glibc however emulates the file system allocation with writes where unsupported, and apps have depended on that long term implementation. This is both inefficient, and as of glibc 2.21 at least, buggy on certain NFS setups. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly across the entire data range of files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_madvise.texi��������������������������������������0000664�0000000�0000000�00000000762�14110572173�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_madvise @section @code{posix_madvise} @findex posix_madvise POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_madvise.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 5.1. @end itemize ��������������gnulib-20210822~d383792/doc/posix-functions/posix_mem_offset.texi�����������������������������������0000664�0000000�0000000�00000001045�14110572173�0024455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_mem_offset @section @code{posix_mem_offset} @findex posix_mem_offset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_mem_offset.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_memalign.texi�������������������������������������0000664�0000000�0000000�00000001567�14110572173�0024133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_memalign @section @code{posix_memalign} @findex posix_memalign POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html} Gnulib module: posix_memalign Portability problems fixed by Gnulib: @itemize @item This function produces misaligned results on some platforms: OpenBSD 6.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.1. @end itemize The Gnulib module @code{aligned-malloc} provides functions for allocating and freeing blocks of suitably aligned memory. The Gnulib module @code{pagealign_alloc} provides a similar API for allocating and freeing blocks of memory aligned on a system page boundary. �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_openpt.texi���������������������������������������0000664�0000000�0000000�00000001473�14110572173�0023643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_openpt @section @code{posix_openpt} @findex posix_openpt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_openpt.html} Gnulib module: posix_openpt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. However, the replacement may fail with @code{ENOSYS} or @code{ENOENT} on some platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note that when using this function to open the master side of a pseudo-terminal, you still need platform dependent code to open the corresponding slave side. The Gnulib module @code{openpty} provides an easy-to-use API that does both at once. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn.texi����������������������������������������0000664�0000000�0000000�00000002210�14110572173�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn @section @code{posix_spawn} @findex posix_spawn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html} Gnulib module: posix_spawn Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.3, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. @item When the program to be invoked is an executable script without a @samp{#!} marker in the first line, this function executes the script as if it were a shell script, on some platforms: GNU/Hurd. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not work on some platforms: AIX 6.1 (under particular circumstances). @end itemize The Gnulib modules @code{posix_spawn_file_actions_addchdir} and @code{posix_spawn_file_actions_addfchdir} provide additional actions, that consist in changing the current directory of the child process before starting the specified program. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn_file_actions_addclose.texi������������������0000664�0000000�0000000�00000001311�14110572173�0030032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn_file_actions_addclose @section @code{posix_spawn_file_actions_addclose} @findex posix_spawn_file_actions_addclose POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_addclose.html} Gnulib module: posix_spawn_file_actions_addclose Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item This function does not reject a negative file descriptor on some platforms: musl libc. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn_file_actions_adddup2.texi�������������������0000664�0000000�0000000�00000001323�14110572173�0027602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn_file_actions_adddup2 @section @code{posix_spawn_file_actions_adddup2} @findex posix_spawn_file_actions_adddup2 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_adddup2.html} Gnulib module: posix_spawn_file_actions_adddup2 Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item This function does not reject a too large file descriptor on some platforms: musl libc, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn_file_actions_addopen.texi�������������������0000664�0000000�0000000�00000001323�14110572173�0027671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn_file_actions_addopen @section @code{posix_spawn_file_actions_addopen} @findex posix_spawn_file_actions_addopen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_addopen.html} Gnulib module: posix_spawn_file_actions_addopen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item This function does not reject a too large file descriptor on some platforms: musl libc, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn_file_actions_destroy.texi�������������������0000664�0000000�0000000�00000001147�14110572173�0027754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn_file_actions_destroy @section @code{posix_spawn_file_actions_destroy} @findex posix_spawn_file_actions_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_destroy.html} Gnulib module: posix_spawn_file_actions_destroy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawn_file_actions_init.texi����������������������0000664�0000000�0000000�00000001130�14110572173�0027216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn_file_actions_init @section @code{posix_spawn_file_actions_init} @findex posix_spawn_file_actions_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn_file_actions_init.html} Gnulib module: posix_spawn_file_actions_init Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_destroy.texi����������������������������0000664�0000000�0000000�00000001072�14110572173�0026125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_destroy @section @code{posix_spawnattr_destroy} @findex posix_spawnattr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_destroy.html} Gnulib module: posix_spawnattr_destroy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getflags.texi���������������������������0000664�0000000�0000000�00000001077�14110572173�0026235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getflags @section @code{posix_spawnattr_getflags} @findex posix_spawnattr_getflags POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getflags.html} Gnulib module: posix_spawnattr_getflags Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getpgroup.texi��������������������������0000664�0000000�0000000�00000001104�14110572173�0026444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getpgroup @section @code{posix_spawnattr_getpgroup} @findex posix_spawnattr_getpgroup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getpgroup.html} Gnulib module: posix_spawnattr_getpgroup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getschedparam.texi����������������������0000664�0000000�0000000�00000001144�14110572173�0027243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getschedparam @section @code{posix_spawnattr_getschedparam} @findex posix_spawnattr_getschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getschedparam.html} Gnulib module: posix_spawnattr_getschedparam Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getschedpolicy.texi���������������������0000664�0000000�0000000�00000001151�14110572173�0027440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getschedpolicy @section @code{posix_spawnattr_getschedpolicy} @findex posix_spawnattr_getschedpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getschedpolicy.html} Gnulib module: posix_spawnattr_getschedpolicy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getsigdefault.texi����������������������0000664�0000000�0000000�00000001130�14110572173�0027256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getsigdefault @section @code{posix_spawnattr_getsigdefault} @findex posix_spawnattr_getsigdefault POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getsigdefault.html} Gnulib module: posix_spawnattr_getsigdefault Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_getsigmask.texi�������������������������0000664�0000000�0000000�00000001111�14110572173�0026564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getsigmask @section @code{posix_spawnattr_getsigmask} @findex posix_spawnattr_getsigmask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getsigmask.html} Gnulib module: posix_spawnattr_getsigmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_init.texi�������������������������������0000664�0000000�0000000�00000001053�14110572173�0025376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_init @section @code{posix_spawnattr_init} @findex posix_spawnattr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_init.html} Gnulib module: posix_spawnattr_init Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setflags.texi���������������������������0000664�0000000�0000000�00000001077�14110572173�0026251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setflags @section @code{posix_spawnattr_setflags} @findex posix_spawnattr_setflags POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setflags.html} Gnulib module: posix_spawnattr_setflags Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setpgroup.texi��������������������������0000664�0000000�0000000�00000001104�14110572173�0026460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setpgroup @section @code{posix_spawnattr_setpgroup} @findex posix_spawnattr_setpgroup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setpgroup.html} Gnulib module: posix_spawnattr_setpgroup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setschedparam.texi����������������������0000664�0000000�0000000�00000001144�14110572173�0027257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setschedparam @section @code{posix_spawnattr_setschedparam} @findex posix_spawnattr_setschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setschedparam.html} Gnulib module: posix_spawnattr_setschedparam Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setschedpolicy.texi���������������������0000664�0000000�0000000�00000001151�14110572173�0027454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setschedpolicy @section @code{posix_spawnattr_setschedpolicy} @findex posix_spawnattr_setschedpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setschedpolicy.html} Gnulib module: posix_spawnattr_setschedpolicy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setsigdefault.texi����������������������0000664�0000000�0000000�00000001130�14110572173�0027272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setsigdefault @section @code{posix_spawnattr_setsigdefault} @findex posix_spawnattr_setsigdefault POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setsigdefault.html} Gnulib module: posix_spawnattr_setsigdefault Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnattr_setsigmask.texi�������������������������0000664�0000000�0000000�00000001111�14110572173�0026600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setsigmask @section @code{posix_spawnattr_setsigmask} @findex posix_spawnattr_setsigmask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_setsigmask.html} Gnulib module: posix_spawnattr_setsigmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_spawnp.texi���������������������������������������0000664�0000000�0000000�00000002343�14110572173�0023643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnp @section @code{posix_spawnp} @findex posix_spawnp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnp.html} Gnulib module: posix_spawnp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.3, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 8.1. @item When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. @item When the program to be invoked is an executable script without a @samp{#!} marker in the first line, this function executes the script as if it were a shell script, on some platforms: glibc 2.14, GNU/Hurd, macOS 11.1, FreeBSD 12.0, OpenBSD 6.7, AIX 7.2, Solaris 11.4, Cygwin 2.9. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not work on some platforms: AIX 6.1 (under particular circumstances). @end itemize The Gnulib modules @code{posix_spawn_file_actions_addchdir} and @code{posix_spawn_file_actions_addfchdir} provide additional actions, that consist in changing the current directory of the child process before starting the specified program. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_destroy.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_destroy @section @code{posix_trace_attr_destroy} @findex posix_trace_attr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_destroy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getclockres.texi�����������������������0000664�0000000�0000000�00000001125�14110572173�0027045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getclockres @section @code{posix_trace_attr_getclockres} @findex posix_trace_attr_getclockres POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getclockres.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getcreatetime.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getcreatetime @section @code{posix_trace_attr_getcreatetime} @findex posix_trace_attr_getcreatetime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getcreatetime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getgenversion.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getgenversion @section @code{posix_trace_attr_getgenversion} @findex posix_trace_attr_getgenversion POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getgenversion.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getinherited.texi����������������������0000664�0000000�0000000�00000001131�14110572173�0027210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getinherited @section @code{posix_trace_attr_getinherited} @findex posix_trace_attr_getinherited POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getinherited.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getlogfullpolicy.texi������������������0000664�0000000�0000000�00000001151�14110572173�0030123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getlogfullpolicy @section @code{posix_trace_attr_getlogfullpolicy} @findex posix_trace_attr_getlogfullpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getlogfullpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getlogsize.texi������������������������0000664�0000000�0000000�00000001121�14110572173�0026710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getlogsize @section @code{posix_trace_attr_getlogsize} @findex posix_trace_attr_getlogsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getlogsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getmaxdatasize.texi��������������������0000664�0000000�0000000�00000001141�14110572173�0027550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getmaxdatasize @section @code{posix_trace_attr_getmaxdatasize} @findex posix_trace_attr_getmaxdatasize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getmaxdatasize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getmaxsystemeventsize.texi�������������0000664�0000000�0000000�00000001175�14110572173�0031234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getmaxsystemeventsize @section @code{posix_trace_attr_getmaxsystemeventsize} @findex posix_trace_attr_getmaxsystemeventsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getmaxsystemeventsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getmaxusereventsize.texi���������������0000664�0000000�0000000�00000001165�14110572173�0030665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getmaxusereventsize @section @code{posix_trace_attr_getmaxusereventsize} @findex posix_trace_attr_getmaxusereventsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getmaxusereventsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getname.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getname @section @code{posix_trace_attr_getname} @findex posix_trace_attr_getname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getstreamfullpolicy.texi���������������0000664�0000000�0000000�00000001165�14110572173�0030642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getstreamfullpolicy @section @code{posix_trace_attr_getstreamfullpolicy} @findex posix_trace_attr_getstreamfullpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getstreamfullpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_getstreamsize.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_getstreamsize @section @code{posix_trace_attr_getstreamsize} @findex posix_trace_attr_getstreamsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_getstreamsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_init.texi������������������������������0000664�0000000�0000000�00000001071�14110572173�0025503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_init @section @code{posix_trace_attr_init} @findex posix_trace_attr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_init.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setinherited.texi����������������������0000664�0000000�0000000�00000001131�14110572173�0027224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setinherited @section @code{posix_trace_attr_setinherited} @findex posix_trace_attr_setinherited POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setinherited.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setlogfullpolicy.texi������������������0000664�0000000�0000000�00000001151�14110572173�0030137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setlogfullpolicy @section @code{posix_trace_attr_setlogfullpolicy} @findex posix_trace_attr_setlogfullpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setlogfullpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setlogsize.texi������������������������0000664�0000000�0000000�00000001121�14110572173�0026724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setlogsize @section @code{posix_trace_attr_setlogsize} @findex posix_trace_attr_setlogsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setlogsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setmaxdatasize.texi��������������������0000664�0000000�0000000�00000001141�14110572173�0027564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setmaxdatasize @section @code{posix_trace_attr_setmaxdatasize} @findex posix_trace_attr_setmaxdatasize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setmaxdatasize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setname.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setname @section @code{posix_trace_attr_setname} @findex posix_trace_attr_setname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setstreamfullpolicy.texi���������������0000664�0000000�0000000�00000001165�14110572173�0030656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setstreamfullpolicy @section @code{posix_trace_attr_setstreamfullpolicy} @findex posix_trace_attr_setstreamfullpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setstreamfullpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_attr_setstreamsize.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_attr_setstreamsize @section @code{posix_trace_attr_setstreamsize} @findex posix_trace_attr_setstreamsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_attr_setstreamsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_clear.texi����������������������������������0000664�0000000�0000000�00000001051�14110572173�0024572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_clear @section @code{posix_trace_clear} @findex posix_trace_clear POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_clear.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_close.texi����������������������������������0000664�0000000�0000000�00000001051�14110572173�0024611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_close @section @code{posix_trace_close} @findex posix_trace_close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_close.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_create.texi���������������������������������0000664�0000000�0000000�00000001055�14110572173�0024753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_create @section @code{posix_trace_create} @findex posix_trace_create POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_create.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_create_withlog.texi�������������������������0000664�0000000�0000000�00000001115�14110572173�0026505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_create_withlog @section @code{posix_trace_create_withlog} @findex posix_trace_create_withlog POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_create_withlog.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_event.texi����������������������������������0000664�0000000�0000000�00000001051�14110572173�0024625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_event @section @code{posix_trace_event} @findex posix_trace_event POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_event.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventid_equal.texi��������������������������0000664�0000000�0000000�00000001111�14110572173�0026326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventid_equal @section @code{posix_trace_eventid_equal} @findex posix_trace_eventid_equal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventid_equal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventid_get_name.texi�����������������������0000664�0000000�0000000�00000001125�14110572173�0027003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventid_get_name @section @code{posix_trace_eventid_get_name} @findex posix_trace_eventid_get_name POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventid_get_name.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventid_open.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventid_open @section @code{posix_trace_eventid_open} @findex posix_trace_eventid_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventid_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventset_add.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventset_add @section @code{posix_trace_eventset_add} @findex posix_trace_eventset_add POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventset_add.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventset_del.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventset_del @section @code{posix_trace_eventset_del} @findex posix_trace_eventset_del POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventset_del.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventset_empty.texi�������������������������0000664�0000000�0000000�00000001115�14110572173�0026560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventset_empty @section @code{posix_trace_eventset_empty} @findex posix_trace_eventset_empty POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventset_empty.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventset_fill.texi��������������������������0000664�0000000�0000000�00000001111�14110572173�0026344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventset_fill @section @code{posix_trace_eventset_fill} @findex posix_trace_eventset_fill POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventset_fill.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventset_ismember.texi����������������������0000664�0000000�0000000�00000001131�14110572173�0027223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventset_ismember @section @code{posix_trace_eventset_ismember} @findex posix_trace_eventset_ismember POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventset_ismember.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventtypelist_getnext_id.texi���������������0000664�0000000�0000000�00000001165�14110572173�0030643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventtypelist_getnext_id @section @code{posix_trace_eventtypelist_getnext_id} @findex posix_trace_eventtypelist_getnext_id POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventtypelist_getnext_id.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_eventtypelist_rewind.texi�������������������0000664�0000000�0000000�00000001145�14110572173�0027777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_eventtypelist_rewind @section @code{posix_trace_eventtypelist_rewind} @findex posix_trace_eventtypelist_rewind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_eventtypelist_rewind.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_flush.texi����������������������������������0000664�0000000�0000000�00000001051�14110572173�0024625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_flush @section @code{posix_trace_flush} @findex posix_trace_flush POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_flush.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_get_attr.texi�������������������������������0000664�0000000�0000000�00000001065�14110572173�0025322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_get_attr @section @code{posix_trace_get_attr} @findex posix_trace_get_attr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_get_attr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_get_filter.texi�����������������������������0000664�0000000�0000000�00000001075�14110572173�0025636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_get_filter @section @code{posix_trace_get_filter} @findex posix_trace_get_filter POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_get_filter.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_get_status.texi�����������������������������0000664�0000000�0000000�00000001075�14110572173�0025674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_get_status @section @code{posix_trace_get_status} @findex posix_trace_get_status POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_get_status.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_getnext_event.texi��������������������������0000664�0000000�0000000�00000001111�14110572173�0026360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_getnext_event @section @code{posix_trace_getnext_event} @findex posix_trace_getnext_event POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_getnext_event.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_open.texi�����������������������������������0000664�0000000�0000000�00000001045�14110572173�0024450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_open @section @code{posix_trace_open} @findex posix_trace_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_rewind.texi���������������������������������0000664�0000000�0000000�00000001055�14110572173�0025000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_rewind @section @code{posix_trace_rewind} @findex posix_trace_rewind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_rewind.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_set_filter.texi�����������������������������0000664�0000000�0000000�00000001075�14110572173�0025652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_set_filter @section @code{posix_trace_set_filter} @findex posix_trace_set_filter POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_set_filter.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_shutdown.texi�������������������������������0000664�0000000�0000000�00000001065�14110572173�0025364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_shutdown @section @code{posix_trace_shutdown} @findex posix_trace_shutdown POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_shutdown.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_start.texi����������������������������������0000664�0000000�0000000�00000001051�14110572173�0024641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_start @section @code{posix_trace_start} @findex posix_trace_start POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_start.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_stop.texi�����������������������������������0000664�0000000�0000000�00000001045�14110572173�0024474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_stop @section @code{posix_trace_stop} @findex posix_trace_stop POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_stop.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_timedgetnext_event.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_timedgetnext_event @section @code{posix_trace_timedgetnext_event} @findex posix_trace_timedgetnext_event POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_timedgetnext_event.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_trid_eventid_open.texi����������������������0000664�0000000�0000000�00000001131�14110572173�0027204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_trid_eventid_open @section @code{posix_trace_trid_eventid_open} @findex posix_trace_trid_eventid_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_trid_eventid_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_trace_trygetnext_event.texi�����������������������0000664�0000000�0000000�00000001125�14110572173�0027124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_trygetnext_event @section @code{posix_trace_trygetnext_event} @findex posix_trace_trygetnext_event POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_trace_trygetnext_event.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_typed_mem_get_info.texi���������������������������0000664�0000000�0000000�00000001105�14110572173�0026163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_typed_mem_get_info @section @code{posix_typed_mem_get_info} @findex posix_typed_mem_get_info POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_typed_mem_get_info.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/posix_typed_mem_open.texi�������������������������������0000664�0000000�0000000�00000001065�14110572173�0025337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_typed_mem_open @section @code{posix_typed_mem_open} @findex posix_typed_mem_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_typed_mem_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pow.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pow @section @code{pow} @findex pow POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pow.html} Gnulib module: pow Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/powf.texi�����������������������������������������������0000664�0000000�0000000�00000000717�14110572173�0022067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node powf @section @code{powf} @findex powf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/powf.html} Gnulib module: powf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/powl.texi�����������������������������������������������0000664�0000000�0000000�00000001033�14110572173�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node powl @section @code{powl} @findex powl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/powl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pread.texi����������������������������������������������0000664�0000000�0000000�00000001315�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pread @section @code{pread} @findex pread POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html} Gnulib module: pread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function returns zero instead of positive values when large file support is enabled on some platforms: HP-UX 11.11. @item This function does not fail on pipes on some platforms: HP-UX 11.31. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/printf.texi���������������������������������������������0000664�0000000�0000000�00000007605�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node printf @section @code{printf} @findex printf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html} Gnulib module: printf-posix or stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{printf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{printf-posix}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{printf-posix}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item Attempting to write to a read-only stream fails with @code{EOF} but does not set the error flag for @code{ferror} on some platforms: glibc 2.13, cygwin 1.7.9. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pselect.texi��������������������������������������������0000664�0000000�0000000�00000001523�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pselect @section @code{pselect} @findex pselect POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pselect.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item On some platforms, this function fails to detect invalid fds with EBADF, but only if they lie beyond the current maximum open fd: FreeBSD 8.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item When the @var{sigmask} argument is nonnull on platforms that do not natively support this function, race conditions are possible when its gnulib implementation temporarily modifies the signal mask, and the behavior is unspecified in a multi-threaded process. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/psiginfo.texi�������������������������������������������0000664�0000000�0000000�00000000755�14110572173�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node psiginfo @section @code{psiginfo} @findex psiginfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/psiginfo.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.9, macOS 11.1, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 4.1. @end itemize �������������������gnulib-20210822~d383792/doc/posix-functions/psignal.texi��������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node psignal @section @code{psignal} @findex psignal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/psignal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, Cygwin 1.7.9, mingw, MSVC 14, Android 4.1. @end itemize ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_atfork.texi�������������������������������������0000664�0000000�0000000�00000000702�14110572173�0024103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_atfork @section @code{pthread_atfork} @findex pthread_atfork POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_atfork.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 3.0. @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_destroy.texi�������������������������������0000664�0000000�0000000�00000001022�14110572173�0025334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_destroy @section @code{pthread_attr_destroy} @findex pthread_attr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_destroy.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getdetachstate.texi������������������������0000664�0000000�0000000�00000001056�14110572173�0026643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getdetachstate @section @code{pthread_attr_getdetachstate} @findex pthread_attr_getdetachstate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getdetachstate.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getguardsize.texi��������������������������0000664�0000000�0000000�00000000740�14110572173�0026346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getguardsize @section @code{pthread_attr_getguardsize} @findex pthread_attr_getguardsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getguardsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ��������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getinheritsched.texi�����������������������0000664�0000000�0000000�00000000736�14110572173�0027027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getinheritsched @section @code{pthread_attr_getinheritsched} @findex pthread_attr_getinheritsched POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getinheritsched.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getschedparam.texi�������������������������0000664�0000000�0000000�00000000711�14110572173�0026456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getschedparam @section @code{pthread_attr_getschedparam} @findex pthread_attr_getschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getschedparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getschedpolicy.texi������������������������0000664�0000000�0000000�00000000715�14110572173�0026661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getschedpolicy @section @code{pthread_attr_getschedpolicy} @findex pthread_attr_getschedpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getschedpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getscope.texi������������������������������0000664�0000000�0000000�00000000665�14110572173�0025470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getscope @section @code{pthread_attr_getscope} @findex pthread_attr_getscope POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getscope.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getstack.texi������������������������������0000664�0000000�0000000�00000000756�14110572173�0025465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstack @section @code{pthread_attr_getstack} @findex pthread_attr_getstack POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getstack.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_getstacksize.texi��������������������������0000664�0000000�0000000�00000000705�14110572173�0026352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstacksize @section @code{pthread_attr_getstacksize} @findex pthread_attr_getstacksize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getstacksize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_init.texi����������������������������������0000664�0000000�0000000�00000001140�14110572173�0024607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_init @section @code{pthread_attr_init} @findex pthread_attr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_init.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @item This function is only defined as an inline function on some platforms: HP-UX 11.11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setdetachstate.texi������������������������0000664�0000000�0000000�00000001056�14110572173�0026657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setdetachstate @section @code{pthread_attr_setdetachstate} @findex pthread_attr_setdetachstate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setdetachstate.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setguardsize.texi��������������������������0000664�0000000�0000000�00000000740�14110572173�0026362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setguardsize @section @code{pthread_attr_setguardsize} @findex pthread_attr_setguardsize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setguardsize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ��������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setinheritsched.texi�����������������������0000664�0000000�0000000�00000000736�14110572173�0027043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setinheritsched @section @code{pthread_attr_setinheritsched} @findex pthread_attr_setinheritsched POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setinheritsched.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setschedparam.texi�������������������������0000664�0000000�0000000�00000000711�14110572173�0026472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setschedparam @section @code{pthread_attr_setschedparam} @findex pthread_attr_setschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setschedparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setschedpolicy.texi������������������������0000664�0000000�0000000�00000000715�14110572173�0026675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setschedpolicy @section @code{pthread_attr_setschedpolicy} @findex pthread_attr_setschedpolicy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setschedpolicy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setscope.texi������������������������������0000664�0000000�0000000�00000000665�14110572173�0025504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setscope @section @code{pthread_attr_setscope} @findex pthread_attr_setscope POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setscope.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setstack.texi������������������������������0000664�0000000�0000000�00000000756�14110572173�0025501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstack @section @code{pthread_attr_setstack} @findex pthread_attr_setstack POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setstack.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ������������������gnulib-20210822~d383792/doc/posix-functions/pthread_attr_setstacksize.texi��������������������������0000664�0000000�0000000�00000000705�14110572173�0026366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstacksize @section @code{pthread_attr_setstacksize} @findex pthread_attr_setstacksize POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setstacksize.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrier_destroy.texi����������������������������0000664�0000000�0000000�00000001050�14110572173�0026011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_destroy @section @code{pthread_barrier_destroy} @findex pthread_barrier_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_destroy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrier_init.texi�������������������������������0000664�0000000�0000000�00000001034�14110572173�0025265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_init @section @code{pthread_barrier_init} @findex pthread_barrier_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_init.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrier_wait.texi�������������������������������0000664�0000000�0000000�00000001034�14110572173�0025266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_wait @section @code{pthread_barrier_wait} @findex pthread_barrier_wait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_wait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrierattr_destroy.texi������������������������0000664�0000000�0000000�00000001070�14110572173�0026706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_destroy @section @code{pthread_barrierattr_destroy} @findex pthread_barrierattr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrierattr_destroy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrierattr_getpshared.texi���������������������0000664�0000000�0000000�00000001135�14110572173�0027345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_getpshared @section @code{pthread_barrierattr_getpshared} @findex pthread_barrierattr_getpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrierattr_getpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrierattr_init.texi���������������������������0000664�0000000�0000000�00000001054�14110572173�0026162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_init @section @code{pthread_barrierattr_init} @findex pthread_barrierattr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrierattr_init.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_barrierattr_setpshared.texi���������������������0000664�0000000�0000000�00000001120�14110572173�0027353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_setpshared @section @code{pthread_barrierattr_setpshared} @findex pthread_barrierattr_setpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrierattr_setpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 6.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cancel.texi�������������������������������������0000664�0000000�0000000�00000000646�14110572173�0024051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cancel @section @code{pthread_cancel} @findex pthread_cancel POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cancel.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cleanup_pop.texi��������������������������������0000664�0000000�0000000�00000001015�14110572173�0025120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cleanup_pop @section @code{pthread_cleanup_pop} @findex pthread_cleanup_pop POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cleanup_pop.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, NetBSD 9.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cleanup_push.texi�������������������������������0000664�0000000�0000000�00000001021�14110572173�0025276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cleanup_push @section @code{pthread_cleanup_push} @findex pthread_cleanup_push POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cleanup_push.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, macOS 11.1, NetBSD 9.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_broadcast.texi�����������������������������0000664�0000000�0000000�00000001030�14110572173�0025555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_broadcast @section @code{pthread_cond_broadcast} @findex pthread_cond_broadcast POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_broadcast.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_destroy.texi�������������������������������0000664�0000000�0000000�00000001020�14110572173�0025303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_destroy @section @code{pthread_cond_destroy} @findex pthread_cond_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_destroy.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_init.texi����������������������������������0000664�0000000�0000000�00000001004�14110572173�0024557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_init @section @code{pthread_cond_init} @findex pthread_cond_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_init.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_signal.texi��������������������������������0000664�0000000�0000000�00000001014�14110572173�0025072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_signal @section @code{pthread_cond_signal} @findex pthread_cond_signal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_signal.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_timedwait.texi�����������������������������0000664�0000000�0000000�00000001030�14110572173�0025602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_timedwait @section @code{pthread_cond_timedwait} @findex pthread_cond_timedwait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_cond_wait.texi����������������������������������0000664�0000000�0000000�00000001004�14110572173�0024560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_wait @section @code{pthread_cond_wait} @findex pthread_cond_wait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_wait.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_destroy.texi���������������������������0000664�0000000�0000000�00000001040�14110572173�0026200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_destroy @section @code{pthread_condattr_destroy} @findex pthread_condattr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_destroy.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_getclock.texi��������������������������0000664�0000000�0000000�00000001111�14110572173�0026301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_getclock @section @code{pthread_condattr_getclock} @findex pthread_condattr_getclock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_getclock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_getpshared.texi������������������������0000664�0000000�0000000�00000000763�14110572173�0026650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_getpshared @section @code{pthread_condattr_getpshared} @findex pthread_condattr_getpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_getpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize �������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_init.texi������������������������������0000664�0000000�0000000�00000001024�14110572173�0025454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_init @section @code{pthread_condattr_init} @findex pthread_condattr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_init.html} Gnulib module: pthread-cond Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_setclock.texi��������������������������0000664�0000000�0000000�00000001111�14110572173�0026315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_setclock @section @code{pthread_condattr_setclock} @findex pthread_condattr_setclock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_setclock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.2, macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_condattr_setpshared.texi������������������������0000664�0000000�0000000�00000000763�14110572173�0026664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_setpshared @section @code{pthread_condattr_setpshared} @findex pthread_condattr_setpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_setpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize �������������gnulib-20210822~d383792/doc/posix-functions/pthread_create.texi�������������������������������������0000664�0000000�0000000�00000001547�14110572173�0024070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_create @section @code{pthread_create} @findex pthread_create POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @item This function is only defined as an inline function on some platforms: HP-UX 11.11. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Linux/glibc platforms before the advent of NPTL in 2003, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_detach.texi�������������������������������������0000664�0000000�0000000�00000000772�14110572173�0024054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_detach @section @code{pthread_detach} @findex pthread_detach POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_detach.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������gnulib-20210822~d383792/doc/posix-functions/pthread_equal.texi��������������������������������������0000664�0000000�0000000�00000000766�14110572173�0023736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_equal @section @code{pthread_equal} @findex pthread_equal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_equal.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������gnulib-20210822~d383792/doc/posix-functions/pthread_exit.texi���������������������������������������0000664�0000000�0000000�00000000762�14110572173�0023574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_exit @section @code{pthread_exit} @findex pthread_exit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_exit.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������gnulib-20210822~d383792/doc/posix-functions/pthread_getconcurrency.texi�����������������������������0000664�0000000�0000000�00000000722�14110572173�0025651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getconcurrency @section @code{pthread_getconcurrency} @findex pthread_getconcurrency POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_getconcurrency.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_getcpuclockid.texi������������������������������0000664�0000000�0000000�00000001040�14110572173�0025431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getcpuclockid @section @code{pthread_getcpuclockid} @findex pthread_getcpuclockid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_getcpuclockid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.7.9, mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_getschedparam.texi������������������������������0000664�0000000�0000000�00000000665�14110572173�0025434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getschedparam @section @code{pthread_getschedparam} @findex pthread_getschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_getschedparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_getspecific.texi��������������������������������0000664�0000000�0000000�00000001013�14110572173�0025076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getspecific @section @code{pthread_getspecific} @findex pthread_getspecific POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_getspecific.html} Gnulib module: pthread-tss Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_join.texi���������������������������������������0000664�0000000�0000000�00000000762�14110572173�0023562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_join @section @code{pthread_join} @findex pthread_join POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������gnulib-20210822~d383792/doc/posix-functions/pthread_key_create.texi���������������������������������0000664�0000000�0000000�00000001007�14110572173�0024727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_key_create @section @code{pthread_key_create} @findex pthread_key_create POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_key_create.html} Gnulib module: pthread-tss Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_key_delete.texi���������������������������������0000664�0000000�0000000�00000001007�14110572173�0024726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_key_delete @section @code{pthread_key_delete} @findex pthread_key_delete POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_key_delete.html} Gnulib module: pthread-tss Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_kill.texi���������������������������������������0000664�0000000�0000000�00000000621�14110572173�0023550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_kill @section @code{pthread_kill} @findex pthread_kill POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_kill.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_consistent.texi���������������������������0000664�0000000�0000000�00000001101�14110572173�0026222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_consistent @section @code{pthread_mutex_consistent} @findex pthread_mutex_consistent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_consistent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_destroy.texi������������������������������0000664�0000000�0000000�00000001025�14110572173�0025527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_destroy @section @code{pthread_mutex_destroy} @findex pthread_mutex_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_destroy.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_getprioceiling.texi�����������������������0000664�0000000�0000000�00000000767�14110572173�0027056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_getprioceiling @section @code{pthread_mutex_getprioceiling} @findex pthread_mutex_getprioceiling POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_getprioceiling.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_init.texi���������������������������������0000664�0000000�0000000�00000001026�14110572173�0025002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_init @section @code{pthread_mutex_init} @findex pthread_mutex_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_init.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_lock.texi���������������������������������0000664�0000000�0000000�00000001011�14110572173�0024761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_lock @section @code{pthread_mutex_lock} @findex pthread_mutex_lock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_setprioceiling.texi�����������������������0000664�0000000�0000000�00000000767�14110572173�0027072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_setprioceiling @section @code{pthread_mutex_setprioceiling} @findex pthread_mutex_setprioceiling POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_setprioceiling.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_timedlock.texi����������������������������0000664�0000000�0000000�00000001236�14110572173�0026015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_timedlock @section @code{pthread_mutex_timedlock} @findex pthread_mutex_timedlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_timedlock.html} Gnulib module: pthread_mutex_timedlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 7.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_trylock.texi������������������������������0000664�0000000�0000000�00000001025�14110572173�0025525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_trylock @section @code{pthread_mutex_trylock} @findex pthread_mutex_trylock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_trylock.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutex_unlock.texi�������������������������������0000664�0000000�0000000�00000001021�14110572173�0025325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_unlock @section @code{pthread_mutex_unlock} @findex pthread_mutex_unlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_unlock.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_destroy.texi��������������������������0000664�0000000�0000000�00000001045�14110572173�0026424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_destroy @section @code{pthread_mutexattr_destroy} @findex pthread_mutexattr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_destroy.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_getprioceiling.texi�������������������0000664�0000000�0000000�00000001007�14110572173�0027735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getprioceiling @section @code{pthread_mutexattr_getprioceiling} @findex pthread_mutexattr_getprioceiling POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprioceiling.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_getprotocol.texi����������������������0000664�0000000�0000000�00000000773�14110572173�0027303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getprotocol @section @code{pthread_mutexattr_getprotocol} @findex pthread_mutexattr_getprotocol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 8.1. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_getpshared.texi�����������������������0000664�0000000�0000000�00000000767�14110572173�0027073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getpshared @section @code{pthread_mutexattr_getpshared} @findex pthread_mutexattr_getpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_getrobust.texi������������������������0000664�0000000�0000000�00000001205�14110572173�0026747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getrobust @section @code{pthread_mutexattr_getrobust} @findex pthread_mutexattr_getrobust POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getrobust.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. But the provided replacement is just a dummy. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_gettype.texi��������������������������0000664�0000000�0000000�00000001045�14110572173�0026414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_gettype @section @code{pthread_mutexattr_gettype} @findex pthread_mutexattr_gettype POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_gettype.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_init.texi�����������������������������0000664�0000000�0000000�00000001031�14110572173�0025671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_init @section @code{pthread_mutexattr_init} @findex pthread_mutexattr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_init.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_setprioceiling.texi�������������������0000664�0000000�0000000�00000001007�14110572173�0027751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setprioceiling @section @code{pthread_mutexattr_setprioceiling} @findex pthread_mutexattr_setprioceiling POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setprioceiling.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_setprotocol.texi����������������������0000664�0000000�0000000�00000000773�14110572173�0027317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setprotocol @section @code{pthread_mutexattr_setprotocol} @findex pthread_mutexattr_setprotocol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setprotocol.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, NetBSD 7.1, Minix 3.1.8, mingw, MSVC 14, Android 8.1. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_setpshared.texi�����������������������0000664�0000000�0000000�00000000767�14110572173�0027107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setpshared @section @code{pthread_mutexattr_setpshared} @findex pthread_mutexattr_setpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize ���������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_setrobust.texi������������������������0000664�0000000�0000000�00000001205�14110572173�0026763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setrobust @section @code{pthread_mutexattr_setrobust} @findex pthread_mutexattr_setrobust POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.11, macOS 11.1, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 2.9, mingw, MSVC 14, Android 9.0. But the provided replacement is just a dummy. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_mutexattr_settype.texi��������������������������0000664�0000000�0000000�00000001045�14110572173�0026430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_settype @section @code{pthread_mutexattr_settype} @findex pthread_mutexattr_settype POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_settype.html} Gnulib module: pthread-mutex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_once.texi���������������������������������������0000664�0000000�0000000�00000000760�14110572173�0023545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_once @section @code{pthread_once} @findex pthread_once POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_once.html} Gnulib module: pthread-once Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_destroy.texi�����������������������������0000664�0000000�0000000�00000001047�14110572173�0025672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_destroy @section @code{pthread_rwlock_destroy} @findex pthread_rwlock_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_destroy.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_init.texi��������������������������������0000664�0000000�0000000�00000001033�14110572173�0025137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_init @section @code{pthread_rwlock_init} @findex pthread_rwlock_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_init.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_rdlock.texi������������������������������0000664�0000000�0000000�00000001712�14110572173�0025456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_rdlock @section @code{pthread_rwlock_rdlock} @findex pthread_rwlock_rdlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) -- a behaviour that may lead to writer starvation -- on some platforms: glibc 2.28. As a workaround, you can use the @code{gl_rwlock_t} type from the Gnulib module @samp{lock}. @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_timedrdlock.texi�������������������������0000664�0000000�0000000�00000001737�14110572173�0026510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_timedrdlock @section @code{pthread_rwlock_timedrdlock} @findex pthread_rwlock_timedrdlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_timedrdlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) -- a behaviour that may lead to writer starvation -- on some platforms: glibc 2.28. @end itemize ���������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_timedwrlock.texi�������������������������0000664�0000000�0000000�00000001225�14110572173�0026523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_timedwrlock @section @code{pthread_rwlock_timedwrlock} @findex pthread_rwlock_timedwrlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_timedwrlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_tryrdlock.texi���������������������������0000664�0000000�0000000�00000001571�14110572173�0026220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_tryrdlock @section @code{pthread_rwlock_tryrdlock} @findex pthread_rwlock_tryrdlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_tryrdlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function prefers readers to writers (meaning, when this function is called on an rwlock that is already taken by one or more readers, and another writer is already waiting to take it, this function may return successfully immediately) -- a behaviour that may lead to writer starvation -- on some platforms: glibc 2.28. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_trywrlock.texi���������������������������0000664�0000000�0000000�00000001057�14110572173�0026242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_trywrlock @section @code{pthread_rwlock_trywrlock} @findex pthread_rwlock_trywrlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_trywrlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_unlock.texi������������������������������0000664�0000000�0000000�00000001043�14110572173�0025470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_unlock @section @code{pthread_rwlock_unlock} @findex pthread_rwlock_unlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_unlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlock_wrlock.texi������������������������������0000664�0000000�0000000�00000001043�14110572173�0025476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_wrlock @section @code{pthread_rwlock_wrlock} @findex pthread_rwlock_wrlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_wrlock.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.3. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlockattr_destroy.texi�������������������������0000664�0000000�0000000�00000001052�14110572173�0026561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_destroy @section @code{pthread_rwlockattr_destroy} @findex pthread_rwlockattr_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_destroy.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlockattr_getpshared.texi����������������������0000664�0000000�0000000�00000000741�14110572173�0027222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_getpshared @section @code{pthread_rwlockattr_getpshared} @findex pthread_rwlockattr_getpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_getpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlockattr_init.texi����������������������������0000664�0000000�0000000�00000001036�14110572173�0026035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_init @section @code{pthread_rwlockattr_init} @findex pthread_rwlockattr_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_init.html} Gnulib module: pthread-rwlock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_rwlockattr_setpshared.texi����������������������0000664�0000000�0000000�00000000741�14110572173�0027236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_setpshared @section @code{pthread_rwlockattr_setpshared} @findex pthread_rwlockattr_setpshared POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_setpshared.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_self.texi���������������������������������������0000664�0000000�0000000�00000000762�14110572173�0023554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_self @section @code{pthread_self} @findex pthread_self POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_self.html} Gnulib module: pthread-thread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������gnulib-20210822~d383792/doc/posix-functions/pthread_setcancelstate.texi�����������������������������0000664�0000000�0000000�00000000706�14110572173�0025623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setcancelstate @section @code{pthread_setcancelstate} @findex pthread_setcancelstate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setcancelstate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_setcanceltype.texi������������������������������0000664�0000000�0000000�00000000702�14110572173�0025460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setcanceltype @section @code{pthread_setcanceltype} @findex pthread_setcanceltype POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setcanceltype.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_setconcurrency.texi�����������������������������0000664�0000000�0000000�00000000722�14110572173�0025665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setconcurrency @section @code{pthread_setconcurrency} @findex pthread_setconcurrency POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setconcurrency.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 9.0, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_setschedparam.texi������������������������������0000664�0000000�0000000�00000000665�14110572173�0025450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setschedparam @section @code{pthread_setschedparam} @findex pthread_setschedparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setschedparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_setschedprio.texi�������������������������������0000664�0000000�0000000�00000001064�14110572173�0025313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setschedprio @section @code{pthread_setschedprio} @findex pthread_setschedprio POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setschedprio.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.3, macOS 11.1, FreeBSD 13.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 8.1. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_setspecific.texi��������������������������������0000664�0000000�0000000�00000001013�14110572173�0025112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setspecific @section @code{pthread_setspecific} @findex pthread_setspecific POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setspecific.html} Gnulib module: pthread-tss Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_sigmask.texi������������������������������������0000664�0000000�0000000�00000002275�14110572173�0024262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_sigmask @section @code{pthread_sigmask} @findex pthread_sigmask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_sigmask.html} Gnulib module: pthread_sigmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function is declared in @code{<pthread.h>} instead of @code{<signal.h>} on some platforms: FreeBSD 6.4, OpenBSD 3.8. @item This function does nothing and always returns 0 in programs that are not linked with @code{-lpthread} on some platforms: FreeBSD 13.0, MidnightBSD 1.1, HP-UX 11.31, Solaris 9. @item When it fails, this functions returns @minus{}1 instead of the error number on some platforms: Cygwin 1.7.5. @item This function does not immediately raise signals that were pending before the call and unblocked by the call on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On platforms that do not natively support this function, it has unspecified behavior in a multi-threaded process. @item This function may not fail when the first argument is invalid on some platforms: NetBSD 8.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_spin_destroy.texi�������������������������������0000664�0000000�0000000�00000001173�14110572173�0025342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_destroy @section @code{pthread_spin_destroy} @findex pthread_spin_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_destroy.html} Gnulib module: pthread-spin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_spin_init.texi����������������������������������0000664�0000000�0000000�00000001157�14110572173�0024616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_init @section @code{pthread_spin_init} @findex pthread_spin_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_init.html} Gnulib module: pthread-spin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_spin_lock.texi����������������������������������0000664�0000000�0000000�00000001157�14110572173�0024603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_lock @section @code{pthread_spin_lock} @findex pthread_spin_lock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_lock.html} Gnulib module: pthread-spin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_spin_trylock.texi�������������������������������0000664�0000000�0000000�00000001173�14110572173�0025340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_trylock @section @code{pthread_spin_trylock} @findex pthread_spin_trylock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_trylock.html} Gnulib module: pthread-spin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_spin_unlock.texi��������������������������������0000664�0000000�0000000�00000001167�14110572173�0025147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_unlock @section @code{pthread_spin_unlock} @findex pthread_spin_unlock POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_unlock.html} Gnulib module: pthread-spin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.9, mingw, MSVC 14, Android 6.0. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pthread_testcancel.texi���������������������������������0000664�0000000�0000000�00000000666�14110572173�0024753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_testcancel @section @code{pthread_testcancel} @findex pthread_testcancel POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_testcancel.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ptsname.texi��������������������������������������������0000664�0000000�0000000�00000001461�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ptsname @section @code{ptsname} @findex ptsname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ptsname.html} Gnulib module: ptsname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. @item This function fails to set errno on failure on some platforms: FreeBSD 8.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Solaris 11 2010-11, this function fails on all BSD-style @file{/dev/pty*} device files. @item This function is not thread-safe on some platforms: Cygwin 1.7.9. Likewise, the gnulib replacement is not thread-safe. @end itemize Note that the Gnulib module @code{ptsname_r} is a version of this function that is more likely to be thread-safe. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putc.texi�����������������������������������������������0000664�0000000�0000000�00000002105�14110572173�0022060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putc @section @code{putc} @findex putc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putc.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putc_unlocked.texi��������������������������������������0000664�0000000�0000000�00000001236�14110572173�0023750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putc_unlocked @section @code{putc_unlocked} @findex putc_unlocked POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putc_unlocked.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putchar.texi��������������������������������������������0000664�0000000�0000000�00000002121�14110572173�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putchar @section @code{putchar} @findex putchar POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putchar.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putchar_unlocked.texi�����������������������������������0000664�0000000�0000000�00000001252�14110572173�0024441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putchar_unlocked @section @code{putchar_unlocked} @findex putchar_unlocked POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putchar_unlocked.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putenv.texi���������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putenv @section @code{putenv} @findex putenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putenv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Extension: Gnulib provides a module @samp{putenv} that substitutes a @code{putenv} implementation that can also be used to remove environment variables. ������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putmsg.texi���������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putmsg @section @code{putmsg} @findex putmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putpmsg.texi��������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0022605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putpmsg @section @code{putpmsg} @findex putpmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putpmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/puts.texi�����������������������������������������������0000664�0000000�0000000�00000002105�14110572173�0022100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node puts @section @code{puts} @findex puts POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/puts.html} Gnulib module: stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pututxline.texi�����������������������������������������0000664�0000000�0000000�00000000660�14110572173�0023332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pututxline @section @code{pututxline} @findex pututxline POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pututxline.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ��������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putwc.texi����������������������������������������������0000664�0000000�0000000�00000001220�14110572173�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putwc @section @code{putwc} @findex putwc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putwc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/putwchar.texi�������������������������������������������0000664�0000000�0000000�00000001234�14110572173�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putwchar @section @code{putwchar} @findex putwchar POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/putwchar.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/pwrite.texi���������������������������������������������0000664�0000000�0000000�00000001456�14110572173�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pwrite @section @code{pwrite} @findex pwrite POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html} Gnulib module: pwrite Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @item This function does not fail when an invalid (negative) offset is passed when large file support is enabled on some platforms: HP-UX 11.11. @item This function uses an arbitrary offset instead of the @code{off_t} argument when large file support is enabled on some platforms: HP-UX 11.11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/qsort.texi����������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0022263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node qsort @section @code{qsort} @findex qsort POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/qsort.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/quick_exit.texi�����������������������������������������0000664�0000000�0000000�00000000657�14110572173�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node quick_exit @section @code{quick_exit} @findex quick_exit Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.9, macOS 11.1, FreeBSD 6.4, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 9, Android 4.4. @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/raise.texi����������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node raise @section @code{raise} @findex raise POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/raise.html} Gnulib module: raise Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rand.texi�����������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rand @section @code{rand} @findex rand POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rand.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as an inline function on some platforms: Android 4.4. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rand_r.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rand_r @section @code{rand_r} @findex rand_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rand_r.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/random.texi���������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node random @section @code{random} @findex random POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/random.html} Gnulib module: random Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is only defined as an inline function on some platforms: Android 4.4. @item @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly incompatible declaration (the return type being @samp{int} instead of @samp{long}) on some platforms: Cygwin 1.5.25, Haiku. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/read.texi�����������������������������������������������0000664�0000000�0000000�00000002114�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node read @section @code{read} @findex read POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html} Gnulib module: read, stdio, nonblocking Portability problems fixed by Gnulib module @code{read}: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: mingw, MSVC 14. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function may fail with error @code{EINTR}, even in programs that don't install any signal handlers, on some platforms: macOS 11.1. @end itemize For handling @code{EINTR}, Gnulib provides a module @samp{safe-read} with a function @code{safe_read}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/readdir.texi��������������������������������������������0000664�0000000�0000000�00000002202�14110572173�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readdir @section @code{readdir} @findex readdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/readdir.html} Gnulib module: readdir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. This can occur with file systems such as XFS (typically on large disks) and NFS@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @item Although POSIX places no restrictions on @code{d_ino} values, some older systems are rumored to return @code{d_ino} values equal to zero for directory entries that do not really exist. Although Gnulib formerly attempted to cater to these older systems, this caused misbehavior on standard systems and so Gnulib does not attempt to cater to them any more. If you know of any problems caused by this, please send a bug report. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/readdir_r.texi������������������������������������������0000664�0000000�0000000�00000002032�14110572173�0023037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readdir_r @section @code{readdir_r} @findex readdir_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/readdir_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function is planned to be removed from POSIX and to be deprecated in glibc. Portable applications should use @code{readdir}. @item This function has an incompatible declaration on some platforms: Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. This can occur with file systems such as XFS (typically on large disks) and NFS@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/readlink.texi�������������������������������������������0000664�0000000�0000000�00000004317�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readlink @section @code{readlink} @findex readlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html} Gnulib module: readlink Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item Some platforms mistakenly succeed on file names ending in @file{/}: FreeBSD 7.2, Solaris 9, Mac OS X 10.10. @item On some platforms, this function returns @code{int} instead of @code{ssize_t}: glibc 2.4, FreeBSD 6.0, OpenBSD 6.7, Cygwin 1.5.x, AIX 7.1. @end itemize Portability problems mostly fixed by Gnulib: @itemize @item On some platforms, this function fails and sets @code{errno} to @code{ERANGE} rather than returning truncated contents: AIX 7.2, HP-UX 11. The Gnulib replacement normally works as POSIX requires by returning the truncated contents. However, if the full link contents are unreasonably large (more than 4000 bytes) the replacement clears the entire buffer and returns the buffer size; although this is not a complete fix, it suffices for typical callers, which ignore the buffer contents anyway. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function always fails on platforms that don't support symlinks: mingw, MSVC 14. @item When this function is called on a directory: In the case of NFS mounted directories, Cygwin sets @code{errno} to @code{ENOENT} or @code{EIO} instead of @code{EINVAL}. To avoid this problem, check for a directory before calling this function. @item When this function is called on a file that is not a symbolic link: IRIX may set @code{errno} to @code{ENXIO} instead of @code{EINVAL}. Cygwin may set errno to @code{EACCES} instead of @code{EINVAL}. @item When this function fails because it is called on an existing non-directory's name concatenated to @file{/}, it sets @code{errno} to @code{EINVAL}: AIX 7.2. @item Symlink contents do not always have a trailing null byte, and there is no indication if symlink contents were truncated if the return value matches the length. Furthermore, Linux sets @code{errno} to @code{EINVAL} if the requested length is zero. Use the gnulib module @code{areadlink} for improved ability to read symlink contents. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/readlinkat.texi�����������������������������������������0000664�0000000�0000000�00000004561�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readlinkat @section @code{readlinkat} @findex readlinkat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlinkat.html} Gnulib module: readlinkat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.9, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item Some platforms mistakenly succeed on file names ending in @file{/}: OS X 10.10. @item On some platforms, this function returns @code{int} instead of @code{ssize_t}: AIX 7.1. @end itemize Portability problems mostly fixed by Gnulib: @itemize @item On some platforms, this function fails and sets @code{errno} to @code{ERANGE} rather than returning truncated contents: AIX 7.2. The Gnulib replacement normally works as POSIX requires by returning the truncated contents. However, if the full link contents are unreasonably large (more than 4000 bytes) the replacement clears the entire buffer and returns the buffer size; although this is not a complete fix, it suffices for typical callers, which ignore the buffer contents anyway. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function always fails on platforms that don't support symlinks: mingw, MSVC 14. @item When this function is called on a directory: In the case of NFS mounted directories, Cygwin sets @code{errno} to @code{ENOENT} or @code{EIO} instead of @code{EINVAL}. To avoid this problem, check for a directory before calling this function. @item When this function is called on a file that is not a symbolic link: IRIX may set @code{errno} to @code{ENXIO} instead of @code{EINVAL}. Cygwin may set errno to @code{EACCES} instead of @code{EINVAL}. @item When this function fails because it is called on an existing non-directory's name concatenated to @file{/}, it sets @code{errno} to @code{EINVAL}: AIX 7.2. @item Symlink contents do not always have a trailing null byte, and there is no indication if symlink contents were truncated if the return value matches the length. Furthermore, Linux sets @code{errno} to @code{EINVAL} if the requested length is zero. Use the gnulib module @code{areadlink} for improved ability to read symlink contents. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/readv.texi����������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readv @section @code{readv} @findex readv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/readv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/realloc.texi��������������������������������������������0000664�0000000�0000000�00000003435�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node realloc @section @code{realloc} @findex realloc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html} Gnulib module: realloc-posix Portability problems fixed by Gnulib: @itemize @item Upon failure, the function does not set @code{errno} to @code{ENOMEM} on some platforms: mingw, MSVC 14. @item On some platforms, @code{realloc (p, n)} can succeed even if @code{n} exceeds @code{PTRDIFF_MAX}. Although this behavior is arguably allowed by POSIX it can lead to behavior not defined by POSIX later, so @code{realloc-posix} does not allow going over the limit. @end itemize Without the @samp{realloc-gnu} module described below, it is not portable to call @code{realloc} with a size of 0. With a NULL pointer argument, this is the same ambiguity as @code{malloc (0)} on whether a unique zero-size object is created. With a non-NULL pointer argument @code{p}, C17 says that it is implementation-defined whether @code{realloc (p, 0)} frees @code{p}. Behavior varies on whether @code{realloc (p, 0)} always frees @code{p} and successfully returns a null pointer, or always fails and leaves @code{p} valid, or usually succeeds and returns a unique zero-size object; a program not suspecting these variations in semantics will leak memory (either the still-valid @code{p}, or the non-NULL return value). Extension: Gnulib provides a module @samp{realloc-gnu} that substitutes a @code{realloc} implementation that behaves more like the glibc implementation. It fixes these portability problems: @itemize @item @code{realloc (NULL, 0)} returns @code{NULL} on success on some platforms: AIX 7.2. @item On some platforms, @code{realloc (p, 0)} with non-null @code{p} might not free @code{p}, or might clobber @code{errno}, or might not return @code{NULL}. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/realpath.texi�������������������������������������������0000664�0000000�0000000�00000002254�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node realpath @section @code{realpath} @findex realpath POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html} Gnulib module: canonicalize-lgpl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function does not allow for a NULL @samp{resolved} parameter on some platforms: Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.4, Solaris 10. @item This function does not always return an absolute path on some platforms: Solaris 10. @item This function fails to detect trailing slashes on non-directories on some platforms: glibc 2.3.5, macOS 11.1, OpenBSD 6.0. @item This function fails to recognize non-directories or symlinks to non-directories followed by @samp{..} on some platforms: Cygwin 2.9. @item This function misbehaves on consecutive slashes on some platforms: musl libc 1.2.2, AIX 7. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not allow to determine the required size of output buffer; the use of a non-NULL @samp{resolved} buffer is non-portable, since PATH_MAX, if it is defined, is nothing more than a guess. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/recv.texi�����������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recv @section @code{recv} @findex recv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html} Gnulib module: recv Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/recvfrom.texi�������������������������������������������0000664�0000000�0000000�00000001574�14110572173�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recvfrom @section @code{recvfrom} @findex recvfrom POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvfrom.html} Gnulib module: recvfrom Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API} is not defined, this function behaves incorrectly because it is declared to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact considers it as a pointer to a 32-bit wide @code{unsigned int} entity. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms don't have a @code{socklen_t} type; in this case this function's sixth argument type is @samp{int *}. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/recvmsg.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recvmsg @section @code{recvmsg} @findex recvmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/regcomp.texi��������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regcomp @section @code{regcomp} @findex regcomp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/regcomp.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item Many regular expression implementations have bugs. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/regerror.texi�������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regerror @section @code{regerror} @findex regerror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/regerror.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/regexec.texi��������������������������������������������0000664�0000000�0000000�00000001051�14110572173�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regexec @section @code{regexec} @findex regexec POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/regexec.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-regexec-2.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item Many regular expression implementations have bugs. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/regfree.texi��������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regfree @section @code{regfree} @findex regfree POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/regfree.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remainder.texi������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainder @section @code{remainder} @findex remainder POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remainder.html} Gnulib module: remainder or remainder-ieee Portability problems fixed by either Gnulib module @code{remainder} or @code{remainder-ieee}: @itemize @item This function is missing on some platforms: MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{remainder-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remainderf.texi�����������������������������������������0000664�0000000�0000000�00000001354�14110572173�0023226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainderf @section @code{remainderf} @findex remainderf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remainderf.html} Gnulib module: remainderf or remainderf-ieee Portability problems fixed by either Gnulib module @code{remainderf} or @code{remainderf-ieee}: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @item This function may go into an endless loop on some platforms: IRIX 6.5. @end itemize Portability problems fixed by Gnulib module @code{remainderf-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remainderl.texi�����������������������������������������0000664�0000000�0000000�00000001705�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainderl @section @code{remainderl} @findex remainderl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remainderl.html} Gnulib module: remainderl or remainderl-ieee Portability problems fixed by either Gnulib module @code{remainderl} or @code{remainderl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function is not declared on some platforms: IRIX 6.5. @item This function returns completely wrong values on some platforms: OpenBSD 5.1/SPARC. @item This function produces results which are accurate to only 16 digits on some platforms: musl libc 1.2.2/arm64, musl libc 1.2.2/s390x. @end itemize Portability problems fixed by Gnulib module @code{remainderl-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remove.texi���������������������������������������������0000664�0000000�0000000�00000001152�14110572173�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remove @section @code{remove} @findex remove POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html} Gnulib module: remove Portability problems fixed by Gnulib: @itemize @item This function fails to reject trailing slashes on non-directories on some platforms: FreeBSD 7.2, Solaris 9. @item This function mistakenly removes a directory with @code{remove("dir/./")} on some platforms: Cygwin 1.5.x. @item This function does not remove empty directories on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remque.texi���������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remque @section @code{remque} @findex remque POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remque.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remquo.texi���������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquo @section @code{remquo} @findex remquo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remquo.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remquof.texi��������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquof @section @code{remquof} @findex remquof POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remquof.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/remquol.texi��������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquol @section @code{remquol} @findex remquol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/remquol.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/rename.texi���������������������������������������������0000664�0000000�0000000�00000005531�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rename @section @code{rename} @findex rename POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html} Gnulib module: rename Portability problems fixed by Gnulib: @itemize @item This function does not allow trailing slashes when creating a destination directory, as in @code{rename("dir","new/")}: NetBSD 1.6. @item This function does not reject trailing slashes on the destination for non-directories on some platforms, as in @code{rename("file","new/")}: AIX 7.1, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not reject trailing slashes on symlinks to non-directories on some platforms, as in @code{rename("link-to-file/","f")}: FreeBSD 7.2. @item This function ignores trailing slashes on symlinks on some platforms, such that @code{rename("link/","new")} corrupts @file{link}: Solaris 9. @item This function incorrectly reduces the link count when comparing two spellings of a hard link on some platforms: NetBSD 1.6, Cygwin 1.5.x. @item This function will not always replace an existing destination on some platforms: Cygwin 1.5.x, mingw, MSVC 14. However, the replacement is not atomic for directories, and may end up losing the empty destination if the source could not be renamed. @item This function mistakenly allows names ending in @samp{.} or @samp{..} on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @item This function does not reject attempts to rename existing directories and non-directories onto one another on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX requires that @code{rename("symlink-to-dir/","dir2")} rename @file{dir} and leave @file{symlink-to-dir} dangling; likewise, it requires that @code{rename("dir","dangling/")} rename @file{dir} so that @file{dangling} is no longer a dangling symlink. This behavior is counter-intuitive, so on some systems, @code{rename} fails with @code{ENOTDIR} if either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7. @item POSIX requires that @code{rename} do nothing and return 0 if the source and destination are hard links to the same file. This behavior is counterintuitive, and on some systems @code{renameat} is a no-op in this way only if the source and destination identify the same directory entry. On these systems, for example, although renaming @file{./f} to @file{f} is a no-op, renaming @file{f} to @file{g} deletes @file{f} when @file{f} and @file{g} are hard links to the same file: NetBSD 7.0. @item After renaming a non-empty directory over an existing empty directory, the old directory name is still visible through the @code{stat} function for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18. @item This function will not rename a source that is currently opened by any process: mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/renameat.texi�������������������������������������������0000664�0000000�0000000�00000004577�14110572173�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node renameat @section @code{renameat} @findex renameat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/renameat.html} Gnulib module: renameat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function is declared in @code{<unistd.h>}, not in @code{<stdio.h>}, on some platforms: NetBSD 7.0, Solaris 11.4. @item This function is declared in @code{<sys/stat.h>}, not in @code{<stdio.h>}, on some platforms: Android 4.3. @item This function does not reject trailing slashes on non-directories on some platforms, as in @code{renameat(fd,"file",fd,"new/")}: Solaris 11.4. @item This function ignores trailing slashes on symlinks on some platforms, such that @code{renameat(fd,"link/",fd,"new")} corrupts @file{link}: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX requires that @code{renameat(fd,"symlink-to-dir/",fd,"dir2")} rename @file{dir} and leave @file{symlink-to-dir} dangling; likewise, it requires that @code{renameat(fd,"dir",fd,"dangling/")} rename @file{dir} so that @file{dangling} is no longer a dangling symlink. This behavior is counter-intuitive, so on some systems, @code{renameat} fails with @code{ENOTDIR} if either argument is a symlink with a trailing slash: glibc, OpenBSD, Cygwin 1.7. @item POSIX requires that @code{renameat} do nothing and return 0 if the source and destination are hard links to the same file. This behavior is counterintuitive, and on some systems @code{renameat} is a no-op in this way only if the source and destination identify the same directory entry. On these systems, for example, although renaming @file{./f} to @file{f} is a no-op, renaming @file{f} to @file{g} deletes @file{f} when @file{f} and @file{g} are hard links to the same file: NetBSD 7.0. @item After renaming a non-empty directory over an existing empty directory, the old directory name is still visible through the @code{stat} function for 30 seconds after the rename, on NFS file systems, on some platforms: Linux 2.6.18. @item This function will not rename a source that is currently opened by any process: mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rewind.texi���������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rewind @section @code{rewind} @findex rewind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rewind.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rewinddir.texi������������������������������������������0000664�0000000�0000000�00000001045�14110572173�0023076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rewinddir @section @code{rewinddir} @findex rewinddir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rewinddir.html} Gnulib module: rewinddir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item On Mac OS X platforms where @code{long int} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rint.texi�����������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0022066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rint @section @code{rint} @findex rint POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rint.html} Gnulib module: rint Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rintf.texi����������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rintf @section @code{rintf} @findex rintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rintf.html} Gnulib module: rintf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/rintl.texi����������������������������������������������0000664�0000000�0000000�00000001067�14110572173�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rintl @section @code{rintl} @findex rintl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rintl.html} Gnulib module: rintl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item This function produces wrong results for negative numbers on some platforms: NetBSD 8.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/rmdir.texi����������������������������������������������0000664�0000000�0000000�00000002002�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rmdir @section @code{rmdir} @findex rmdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/rmdir.html} Gnulib module: rmdir Portability problems fixed by Gnulib: @itemize @item This function is declared in different header files (namely, @code{<io.h>} or @code{<direct.h>}) on some platforms: mingw, MSVC 14. @item This function mistakenly removes a directory with @code{rmdir("dir/./")} on some platforms: Cygwin 1.5.x. @item This function fails with @code{EINVAL} instead of the expected @code{ENOTDIR} for @code{rmdir("file/")} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item When @code{rmdir} fails because the specified directory is not empty, the @code{errno} value is system dependent. @item POSIX requires that @code{rmdir("link-to-empty/")} remove @file{empty} and leave @file{link-to-empty} as a dangling symlink. This is counter-intuitive, so some systems fail with @code{ENOTDIR} instead: glibc @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/round.texi����������������������������������������������0000664�0000000�0000000�00000001560�14110572173�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node round @section @code{round} @findex round POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/round.html} Gnulib module: round or round-ieee Portability problems fixed by either Gnulib module @code{round} or @code{round-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: glibc 2.8, IRIX 6.5. @item This functions returns a wrong result for @math{x = 1/2 - 2^-54} on some platforms: NetBSD 3.0, AIX 7.1. @end itemize Portability problems fixed by Gnulib module @code{round-ieee}: @itemize @item This function returns a positive zero for an argument between @minus{}0.5 and 0 on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/roundeven.texi������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundeven @section @code{roundeven} @findex roundeven Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/roundevenf.texi�����������������������������������������0000664�0000000�0000000�00000001164�14110572173�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundevenf @section @code{roundevenf} @findex roundevenf Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/roundevenl.texi�����������������������������������������0000664�0000000�0000000�00000001164�14110572173�0023272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundevenl @section @code{roundevenl} @findex roundevenl Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/roundf.texi���������������������������������������������0000664�0000000�0000000�00000001565�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundf @section @code{roundf} @findex roundf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/roundf.html} Gnulib module: roundf or roundf-ieee Portability problems fixed by either Gnulib module @code{roundf} or @code{roundf-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, MSVC 9. @item This function is not declared on some platforms: glibc 2.8, IRIX 6.5. @item This functions returns a wrong result for @math{x = 1/2 - 2^-25} on some platforms: mingw. @end itemize Portability problems fixed by Gnulib module @code{roundf-ieee}: @itemize @item This function returns a positive zero for an argument between @minus{}0.5 and 0 on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/roundl.texi���������������������������������������������0000664�0000000�0000000�00000001456�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundl @section @code{roundl} @findex roundl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/roundl.html} Gnulib module: roundl or roundl-ieee Portability problems fixed by either Gnulib module @code{roundl} or @code{roundl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @item This function is not declared on some platforms: glibc 2.8, IRIX 6.5. @end itemize Portability problems fixed by Gnulib module @code{roundl-ieee}: @itemize @item This function returns a positive zero for an argument between @minus{}0.5 and 0 on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scalbln.texi��������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0022527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbln @section @code{scalbln} @findex scalbln POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalbln.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9, Android 9.0. @end itemize �����������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scalblnf.texi�������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalblnf @section @code{scalblnf} @findex scalblnf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalblnf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9, Android 9.0. @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scalblnl.texi�������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0022706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalblnl @section @code{scalblnl} @findex scalblnl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalblnl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 9.0. @end itemize ����������������������������gnulib-20210822~d383792/doc/posix-functions/scalbn.texi���������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0022361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbn @section @code{scalbn} @findex scalbn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalbn.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, IRIX 6.5, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scalbnf.texi��������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbnf @section @code{scalbnf} @findex scalbnf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalbnf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scalbnl.texi��������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0022527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbnl @section @code{scalbnl} @findex scalbnl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scalbnl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @end itemize ���������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scandir.texi��������������������������������������������0000664�0000000�0000000�00000001715�14110572173�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scandir @section @code{scandir} @findex scandir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scandir.html} Gnulib module: scandir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Solaris 9, mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. Also, on platforms where @code{ino_t} is a 32-bit type, this function may report inode numbers incorrectly. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @item The fourth parameter of this function is declared as @code{int (*) (const void *, const void *)} on some platforms: glibc 2.3.6, macOS 10.7, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7. @item The fourth parameter of this function is declared as @code{int (*) (void *, void *)} on some platforms: AIX 5.1. @end itemize ���������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/scanf.texi����������������������������������������������0000664�0000000�0000000�00000002375�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scanf @section @code{scanf} @findex scanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-scanf.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item C99 and POSIX.1-2001 and later require end-of-file to be sticky, that is, they require this function to act as if it reads end-of-file if @code{feof} would return nonzero. However, on some systems this function attempts to read from the underlying file descriptor even if the stream's end-of-file indicator is set. These systems include glibc and default Solaris. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_get_priority_max.texi�����������������������������0000664�0000000�0000000�00000000720�14110572173�0025641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_get_priority_max @section @code{sched_get_priority_max} @findex sched_get_priority_max POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_get_priority_max.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_get_priority_min.texi�����������������������������0000664�0000000�0000000�00000000720�14110572173�0025637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_get_priority_min @section @code{sched_get_priority_min} @findex sched_get_priority_min POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_get_priority_min.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_getparam.texi�������������������������������������0000664�0000000�0000000�00000000662�14110572173�0024061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_getparam @section @code{sched_getparam} @findex sched_getparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_getparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_getscheduler.texi���������������������������������0000664�0000000�0000000�00000000702�14110572173�0024732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_getscheduler @section @code{sched_getscheduler} @findex sched_getscheduler POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_getscheduler.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_rr_get_interval.texi������������������������������0000664�0000000�0000000�00000000730�14110572173�0025443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_rr_get_interval @section @code{sched_rr_get_interval} @findex sched_rr_get_interval POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_rr_get_interval.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, mingw, MSVC 14. @end itemize ����������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_setparam.texi�������������������������������������0000664�0000000�0000000�00000000662�14110572173�0024075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_setparam @section @code{sched_setparam} @findex sched_setparam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setparam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_setscheduler.texi���������������������������������0000664�0000000�0000000�00000001111�14110572173�0024741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_setscheduler @section @code{sched_setscheduler} @findex sched_setscheduler POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sched-setscheduler.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sched_yield.texi����������������������������������������0000664�0000000�0000000�00000000753�14110572173�0023370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_yield @section @code{sched_yield} @findex sched_yield POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_yield.html} Gnulib module: sched_yield Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. But the provided replacement is just a dummy on some of these platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������gnulib-20210822~d383792/doc/posix-functions/seed48.texi���������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seed48 @section @code{seed48} @findex seed48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/seed48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/seekdir.texi��������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seekdir @section @code{seekdir} @findex seekdir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/seekdir.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14, Android 5.1. @item On platforms where @code{long int} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro (only on Mac OS X systems). @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/select.texi���������������������������������������������0000664�0000000�0000000�00000002460�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node select @section @code{select} @findex select POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html} Gnulib module: select Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), @code{select} can only be called on descriptors created by the @code{socket} function, not on regular file descriptors. @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On some platforms, this function fails to detect invalid fds with EBADF, but only if they lie beyond the current maximum open fd: FreeBSD 8.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item When you call @code{select} with a timeout, some implementations modify the timeout parameter so that upon return from the function, it contains the amount of time not slept. Other implementations leave the timeout parameter unmodified. @item Under Windows, when passing a pipe, Gnulib's @code{select} replacement might return 0 even before the timeout has passed. Programs using it with pipes can thus busy wait. @item On Linux, when some file descriptor refers to a regular file, @code{select} may fail, setting @code{errno} to @code{EBADF}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_close.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_close @section @code{sem_close} @findex sem_close POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_close.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_destroy.texi����������������������������������������0000664�0000000�0000000�00000000727�14110572173�0023452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_destroy @section @code{sem_destroy} @findex sem_destroy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_destroy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function is not implemented on some platforms: Mac OS X 10.11. @end itemize �����������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_getvalue.texi���������������������������������������0000664�0000000�0000000�00000000733�14110572173�0023572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_getvalue @section @code{sem_getvalue} @findex sem_getvalue POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_getvalue.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function is not implemented on some platforms: Mac OS X 10.11. @end itemize �������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_init.texi�������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_init @section @code{sem_init} @findex sem_init POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_init.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function is not implemented on some platforms: Mac OS X 10.11. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_open.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_open @section @code{sem_open} @findex sem_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_post.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_post @section @code{sem_post} @findex sem_post POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_post.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_timedwait.texi��������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_timedwait @section @code{sem_timedwait} @findex sem_timedwait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_timedwait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 14. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/sem_trywait.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_trywait @section @code{sem_trywait} @findex sem_trywait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_trywait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_unlink.texi�����������������������������������������0000664�0000000�0000000�00000000627�14110572173�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_unlink @section @code{sem_unlink} @findex sem_unlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_unlink.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sem_wait.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_wait @section @code{sem_wait} @findex sem_wait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_wait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/semctl.texi���������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semctl @section @code{semctl} @findex semctl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/semctl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/semget.texi���������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semget @section @code{semget} @findex semget POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/semget.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/semop.texi����������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semop @section @code{semop} @findex semop POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/semop.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/send.texi�����������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0022037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node send @section @code{send} @findex send POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html} Gnulib module: send Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sendmsg.texi��������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sendmsg @section @code{sendmsg} @findex sendmsg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sendmsg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sendto.texi���������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sendto @section @code{sendto} @findex sendto POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sendto.html} Gnulib module: sendto Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setbuf.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setbuf @section @code{setbuf} @findex setbuf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setbuf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setegid.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setegid @section @code{setegid} @findex setegid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setegid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.23, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setenv.texi���������������������������������������������0000664�0000000�0000000�00000001570�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setenv @section @code{setenv} @findex setenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html} Gnulib module: setenv Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.23, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item On some platforms, this function does not fail with @samp{EINVAL} when passed an empty string or a string containing @samp{=}: Mac OS X 10.5, FreeBSD 6.0, NetBSD 1.6, OpenBSD 6.7, Cygwin 1.5.x. @item On some platforms, this function removes a leading @samp{=} from the value argument: Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item Older versions of POSIX required that @code{setenv(NULL,"",0)} gracefully fail with @code{EINVAL}, but not all implementations guarantee this, and the requirement was removed. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/seteuid.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seteuid @section @code{seteuid} @findex seteuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/seteuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.23, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setgid.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setgid @section @code{setgid} @findex setgid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setgid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setgrent.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setgrent @section @code{setgrent} @findex setgrent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setgrent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sethostent.texi�����������������������������������������0000664�0000000�0000000�00000000611�14110572173�0023305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sethostent @section @code{sethostent} @findex sethostent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sethostent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setitimer.texi������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setitimer @section @code{setitimer} @findex setitimer POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setitimer.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setjmp.texi���������������������������������������������0000664�0000000�0000000�00000001464�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setjmp @section @code{setjmp} @findex setjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX does not specify whether @code{setjmp} saves the signal mask in the @code{jmp_buf}. It does on BSD platforms, and on glibc platforms when @code{_BSD_SOURCE} (and/or @code{_DEFAULT_SOURCE} on glibc >= 2.19) is defined; in this case @code{setjmp} behaves like @code{sigsetjmp(.,1)}, and functions @code{_setjmp} and @code{_longjmp} are available that don't save or restore the signal mask. On System V platforms (excluding HP-UX), and on glibc platforms by default, @code{setjmp} doesn't save the signal mask. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setkey.texi���������������������������������������������0000664�0000000�0000000�00000001077�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setkey @section @code{setkey} @findex setkey POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setkey.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.34, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function is not declared in @code{<stdlib.h>} (without @code{-D_GNU_SOURCE}) on some platforms: glibc (at least 2.11--2.13). @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setlocale.texi������������������������������������������0000664�0000000�0000000�00000004233�14110572173�0023064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setlocale @section @code{setlocale} @findex setlocale POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setlocale.html} Gnulib module: setlocale, setlocale-null Portability problems fixed by Gnulib module @code{setlocale}: @itemize @item On Windows platforms (excluding Cygwin), @code{setlocale(@var{category},NULL)} ignores the environment variables @code{LC_ALL}, @code{@var{category}}, and @code{LANG}. @item On Windows platforms (excluding Cygwin) and Cygwin 1.5.x, @code{setlocale(LC_ALL,@var{name})} succeeds and sets the LC_CTYPE category to @samp{C} when it does not support the encoding, instead of failing. @item On Windows platforms (excluding Cygwin), @code{setlocale} understands different locale names, that are not based on ISO 639 language names and ISO 3166 country names. @item On Android 4.3, which which doesn't have locales, the @code{setlocale} function always fails. The replacement, however, supports only the locale names @code{"C"} and @code{"POSIX"}. @end itemize Portability problems fixed by Gnulib module @code{setlocale} or @code{setlocale-null}: @itemize @item Invocations of @code{setlocale (..., NULL)} are not multithread-safe on some platforms: musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. To make these invocations multithread-safe, you need the Gnulib module @code{setlocale}, or you need to change the code to invoke @code{setlocale_null} or @code{setlocale_null_r} instead. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Cygwin 1.5.x, which doesn't have locales, @code{setlocale(LC_ALL,NULL)} always returns @code{"C"}. @item On Cygwin 1.7.0, only the charset portion of a locale designation is honored. @item On OpenBSD, @code{setlocale(LC_ALL,"")} will only update categories that are deemed appropriate for the @code{LC_ALL} environment value, even if there are other categories set to different values in the environment. In addition any value is accepted for @code{LC_CTYPE}, and so NULL is never returned to indicate a failure to set locale. To verify category values, each category must be set individually with @code{setlocale(LC_COLLATE,"")} etc. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setlogmask.texi�����������������������������������������0000664�0000000�0000000�00000000611�14110572173�0023256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setlogmask @section @code{setlogmask} @findex setlogmask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setlogmask.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setnetent.texi������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setnetent @section @code{setnetent} @findex setnetent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setnetent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 2.9, mingw, MSVC 14, Android 8.1. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayload.texi�����������������������������������������0000664�0000000�0000000�00000001214�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayload @section @code{setpayload} @findex setpayload Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayloadf.texi����������������������������������������0000664�0000000�0000000�00000001217�14110572173�0023423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayloadf @section @code{setpayloadf} @findex setpayloadf Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayloadl.texi����������������������������������������0000664�0000000�0000000�00000001217�14110572173�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayloadl @section @code{setpayloadl} @findex setpayloadl Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayloadsig.texi��������������������������������������0000664�0000000�0000000�00000001225�14110572173�0023757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayloadsig @section @code{setpayloadsig} @findex setpayloadsig Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayloadsigf.texi�������������������������������������0000664�0000000�0000000�00000001230�14110572173�0024121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayloadsigf @section @code{setpayloadsigf} @findex setpayloadsigf Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpayloadsigl.texi�������������������������������������0000664�0000000�0000000�00000001230�14110572173�0024127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpayloadsigl @section @code{setpayloadsigl} @findex setpayloadsigl Documentation:@* @ifinfo @ref{FP Bit Twiddling,,Setting and modifying single bits of FP values,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpgid.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpgid @section @code{setpgid} @findex setpgid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpgrp.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpgrp @section @code{setpgrp} @findex setpgrp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgrp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpriority.texi����������������������������������������0000664�0000000�0000000�00000000600�14110572173�0023500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpriority @section @code{setpriority} @findex setpriority POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpriority.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setprotoent.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setprotoent @section @code{setprotoent} @findex setprotoent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setprotoent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 8.1. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setpwent.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpwent @section @code{setpwent} @findex setpwent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpwent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setregid.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setregid @section @code{setregid} @findex setregid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setregid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setreuid.texi�������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setreuid @section @code{setreuid} @findex setreuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setreuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setrlimit.texi������������������������������������������0000664�0000000�0000000�00000001314�14110572173�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setrlimit @section @code{setrlimit} @findex setrlimit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setrlimit.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-getrlimit-1.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On platforms where @code{rlim_t} is a 32-bit type, this function does not allow to set limits larger than 4 GB, such as for RLIMIT_FSIZE@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setservent.texi�����������������������������������������0000664�0000000�0000000�00000000574�14110572173�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setservent @section @code{setservent} @findex setservent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setservent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setsid.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setsid @section @code{setsid} @findex setsid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setsid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setsockopt.texi�����������������������������������������0000664�0000000�0000000�00000001237�14110572173�0023310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setsockopt @section @code{setsockopt} @findex setsockopt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setsockopt.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-setsockopt-2.html} Gnulib module: setsockopt Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @item Many socket options are not available on all platforms. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setstate.texi�������������������������������������������0000664�0000000�0000000�00000001244�14110572173�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setstate @section @code{setstate} @findex setstate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setstate.html} Gnulib module: random Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function is not declared on some platforms: Cygwin 1.5.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly incompatible declaration (the argument type being @samp{const char *} instead of @samp{char *}) on some platforms: macOS 11.1, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11 OpenIndiana. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setuid.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setuid @section @code{setuid} @findex setuid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setuid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setutxent.texi������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0023157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setutxent @section @code{setutxent} @findex setutxent POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setutxent.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/setvbuf.texi��������������������������������������������0000664�0000000�0000000�00000001075�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setvbuf @section @code{setvbuf} @findex setvbuf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/setvbuf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows platforms (excluding Cygwin), @code{_IOLBF} (line-buffering) is treated as if it were @code{_IOFBF} (full buffering), possibly with a warning generated. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shm_open.texi�������������������������������������������0000664�0000000�0000000�00000000665�14110572173�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shm_open @section @code{shm_open} @findex shm_open POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shm_open.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shm_unlink.texi�����������������������������������������0000664�0000000�0000000�00000000675�14110572173�0023266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shm_unlink @section @code{shm_unlink} @findex shm_unlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shm_unlink.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shmat.texi����������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmat @section @code{shmat} @findex shmat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shmat.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @item On Linux, the flag @code{SHM_REMAP} is needed in order to force @code{shmat} to replace existing memory mappings in the specify address range. On other platforms, it is not needed. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shmctl.texi���������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmctl @section @code{shmctl} @findex shmctl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shmctl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shmdt.texi����������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmdt @section @code{shmdt} @findex shmdt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shmdt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shmget.texi���������������������������������������������0000664�0000000�0000000�00000001026�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmget @section @code{shmget} @findex shmget POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shmget.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 7.1. @item On many platforms (not Linux), SHMMAX is so small that it is unusable for reasonable applications, and/or @code{shmget} requires superuser privileges. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/shutdown.texi�������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shutdown @section @code{shutdown} @findex shutdown POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/shutdown.html} Gnulib module: shutdown Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigaction.texi������������������������������������������0000664�0000000�0000000�00000002605�14110572173�0023072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaction @section @code{sigaction} @findex sigaction POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaction.html} Gnulib module: sigaction Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item POSIX recommends that when specifying SA_RESETHAND, SA_NODEFER must also be specified. @item Support for SA_ONSTACK is missing on some platforms: mingw, MSVC 14, cygwin. @item Support for SA_SIGINFO is missing on some platforms: mingw, MSVC 14. @item Support for SIGCHLD, and thus for SA_NOCLDSTOP and SA_NOCLDWAIT, is missing on some platforms: mingw, MSVC 14. @item Support for SA_RESETHAND is missing on some platforms: NonStop. @item Support for SA_RESTART is missing on some platforms: mingw, MSVC 14, NonStop. @item The symbolic value @code{SIG_IGN} for the @code{SIGCHLD} signal is equivalent to a signal handler @smallexample void handle_child (int sigchld) @{ while (waitpid (-1, NULL, WNOHANG) > 0) ; @} @end smallexample except that @code{SIG_IGN} for @code{SIGCHLD} has the effect that the children execution times are not accounted in the @code{times} function. On some platforms (BSD? SystemV? Linux?), you need to use the @code{sigaction} flag @code{SA_NOCLDWAIT} in order to obtain this behavior. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigaddset.texi������������������������������������������0000664�0000000�0000000�00000000775�14110572173�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaddset @section @code{sigaddset} @findex sigaddset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaddset.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���gnulib-20210822~d383792/doc/posix-functions/sigaltstack.texi����������������������������������������0000664�0000000�0000000�00000001226�14110572173�0023421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaltstack @section @code{sigaltstack} @findex sigaltstack POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaltstack.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.7.x, mingw, MSVC 14. @item @code{sigaltstack} doesn't work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64. @item This function interprets the @code{ss_sp} member of @code{stack_t} as the upper bound instead of the lower bound of the alternate stack on some platforms: IRIX 6.5 @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigdelset.texi������������������������������������������0000664�0000000�0000000�00000000775�14110572173�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigdelset @section @code{sigdelset} @findex sigdelset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigdelset.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���gnulib-20210822~d383792/doc/posix-functions/sigemptyset.texi����������������������������������������0000664�0000000�0000000�00000001005�14110572173�0023460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigemptyset @section @code{sigemptyset} @findex sigemptyset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigemptyset.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigfillset.texi�����������������������������������������0000664�0000000�0000000�00000001001�14110572173�0023244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigfillset @section @code{sigfillset} @findex sigfillset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigfillset.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sighold.texi��������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sighold @section @code{sighold} @findex sighold POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sighold.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigignore.texi������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigignore @section @code{sigignore} @findex sigignore POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigignore.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. @end itemize ����������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/siginterrupt.texi���������������������������������������0000664�0000000�0000000�00000000771�14110572173�0023653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node siginterrupt @section @code{siginterrupt} @findex siginterrupt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/siginterrupt.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize Note: POSIX recommends using @code{sigaction} with SA_RESTART instead of @code{siginterrupt (sig, 0)}. �������gnulib-20210822~d383792/doc/posix-functions/sigismember.texi����������������������������������������0000664�0000000�0000000�00000001005�14110572173�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigismember @section @code{sigismember} @findex sigismember POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigismember.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/siglongjmp.texi�����������������������������������������0000664�0000000�0000000�00000000714�14110572173�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node siglongjmp @section @code{siglongjmp} @findex siglongjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/siglongjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This is only provided as a macro on some platforms: Cygwin. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/signal.texi���������������������������������������������0000664�0000000�0000000�00000001760�14110572173�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signal @section @code{signal} @findex signal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/signal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @item On System V platforms, when the signal is triggered, the kernel uninstalls the handler (i.e.@: resets the signal's action to SIG_DFL) before invoking the handler. This opens the door to race conditions: undesired things happen if the signal is triggered twice and the signal handler was not quick enough reinstalling itself as a handler. On BSD platforms and glibc platforms, on the other hand, when the signal is triggered, the kernel blocks the signal before invoking the handler. This is saner, but POSIX still allows either behavior. To avoid this problem, use @code{sigaction} instead of @code{signal}. @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/signbit.texi��������������������������������������������0000664�0000000�0000000�00000000663�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signbit @section @code{signbit} @findex signbit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/signbit.html} Gnulib module: signbit Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, AIX 5.1, IRIX 6.5, Solaris 11.0, MSVC 9, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/signgam.texi��������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signgam @section @code{signgam} @findex signgam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/signgam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: macOS 10.13, Minix 3.1.8, AIX 5.1, IRIX 6.5, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigpause.texi�������������������������������������������0000664�0000000�0000000�00000001015�14110572173�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigpause @section @code{sigpause} @findex sigpause POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigpause.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sigpause-3.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigpending.texi�����������������������������������������0000664�0000000�0000000�00000000604�14110572173�0023236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigpending @section @code{sigpending} @findex sigpending POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigpending.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigprocmask.texi����������������������������������������0000664�0000000�0000000�00000001403�14110572173�0023427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigprocmask @section @code{sigprocmask} @findex sigprocmask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigprocmask.html} Gnulib module: sigprocmask Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: Although @code{sigprocmask} officially has undefined behaviour in multi-threaded programs, in practice it is essentially equivalent to @code{pthread_sigmask}, with only a difference regarding the error return convention. It's simpler to use @code{sigprocmask}, since it does not require linking with @code{-lpthread} on some platforms: glibc, NetBSD, OpenBSD, AIX, IRIX. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigqueue.texi�������������������������������������������0000664�0000000�0000000�00000000700�14110572173�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigqueue @section @code{sigqueue} @findex sigqueue POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigqueue.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 5.1. @end itemize ����������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigrelse.texi�������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigrelse @section @code{sigrelse} @findex sigrelse POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigrelse.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 7.1. @end itemize ����������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigset.texi���������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigset @section @code{sigset} @findex sigset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigset.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 7.1. @end itemize ����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigsetjmp.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigsetjmp @section @code{sigsetjmp} @findex sigsetjmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigsetjmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigsuspend.texi�����������������������������������������0000664�0000000�0000000�00000000574�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigsuspend @section @code{sigsuspend} @findex sigsuspend POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigsuspend.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigtimedwait.texi���������������������������������������0000664�0000000�0000000�00000001102�14110572173�0023573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigtimedwait @section @code{sigtimedwait} @findex sigtimedwait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigtimedwait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 5.1. @item Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo} does; other platforms may not do the same. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigwait.texi��������������������������������������������0000664�0000000�0000000�00000001432�14110572173�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigwait @section @code{sigwait} @findex sigwait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigwait.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On Linux/glibc platforms before the advent of NPTL, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sigwaitinfo.texi����������������������������������������0000664�0000000�0000000�00000000663�14110572173�0023437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigwaitinfo @section @code{sigwaitinfo} @findex sigwaitinfo POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigwaitinfo.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: macOS 11.1, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 5.1. @end itemize �����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sin.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sin @section @code{sin} @findex sin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sin.html} Gnulib module: sin Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sinf.texi�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinf @section @code{sinf} @findex sinf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sinf.html} Gnulib module: sinf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sinh.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinh @section @code{sinh} @findex sinh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sinh.html} Gnulib module: sinh Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sinhf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinhf @section @code{sinhf} @findex sinhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sinhf.html} Gnulib module: sinhf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sinhl.texi����������������������������������������������0000664�0000000�0000000�00000001037�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinhl @section @code{sinhl} @findex sinhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sinhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sinl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinl @section @code{sinl} @findex sinl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sinl.html} Gnulib module: sinl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sleep.texi����������������������������������������������0000664�0000000�0000000�00000001362�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sleep @section @code{sleep} @findex sleep POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html} Gnulib module: sleep Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw (2005 or newer), MSVC 14. @item This function takes milliseconds as argument and returns @code{void} on some platforms: mingw (2005 and older). @item This function cannot sleep longer than 49.7 days on some platforms: Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item According to POSIX, the @code{sleep} function may interfere with the program's use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms, it may. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/snprintf.texi�������������������������������������������0000664�0000000�0000000�00000007134�14110572173�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node snprintf @section @code{snprintf} @findex snprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/snprintf.html} Gnulib module: snprintf or snprintf-posix Portability problems fixed by either Gnulib module @code{snprintf} or @code{snprintf-posix}: @itemize @item This function is missing on some platforms: MSVC 14. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw. @item This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, IRIX 6.5, Solaris 9, mingw. @end itemize Portability problems fixed by Gnulib module @code{snprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 14. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sockatmark.texi�����������������������������������������0000664�0000000�0000000�00000000734�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sockatmark @section @code{sockatmark} @findex sockatmark POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sockatmark.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������gnulib-20210822~d383792/doc/posix-functions/socket.texi���������������������������������������������0000664�0000000�0000000�00000001317�14110572173�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node socket @section @code{socket} @findex socket POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html} Gnulib module: socket Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), the descriptors returned by the @code{socket} function cannot be used in calls to @code{read}, @code{write}, and @code{close}; you have to use @code{recv}, @code{send}, @code{closesocket} in these cases instead. @item On Windows platforms (excluding Cygwin), error codes from this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/socketpair.texi�����������������������������������������0000664�0000000�0000000�00000000574�14110572173�0023261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node socketpair @section @code{socketpair} @findex socketpair POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/socketpair.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sprintf.texi��������������������������������������������0000664�0000000�0000000�00000006063�14110572173�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sprintf @section @code{sprintf} @findex sprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sprintf.html} Gnulib module: sprintf-posix Portability problems fixed by Gnulib: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sqrt.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrt @section @code{sqrt} @findex sqrt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sqrt.html} Gnulib module: sqrt Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sqrtf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrtf @section @code{sqrtf} @findex sqrtf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sqrtf.html} Gnulib module: sqrtf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sqrtl.texi����������������������������������������������0000664�0000000�0000000�00000001173�14110572173�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrtl @section @code{sqrtl} @findex sqrtl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sqrtl.html} Gnulib module: sqrtl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @item This function produces very imprecise results on some platforms: OpenBSD 5.1/SPARC. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/srand.texi����������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srand @section @code{srand} @findex srand POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/srand.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as an inline function on some platforms: Android 4.4. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/srand48.texi��������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srand48 @section @code{srand48} @findex srand48 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/srand48.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/srandom.texi��������������������������������������������0000664�0000000�0000000�00000001325�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srandom @section @code{srandom} @findex srandom POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/srandom.html} Gnulib module: random Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is only defined as an inline function on some platforms: Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function has a slightly incompatible declaration (the return type being @samp{long} instead of @samp{void}) on some platforms: Cygwin 1.5.25. @item The parameter is @code{unsigned long} instead of @code{unsigned int} on some platforms: MidnightBSD 2.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sscanf.texi���������������������������������������������0000664�0000000�0000000�00000001202�14110572173�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sscanf @section @code{sscanf} @findex sscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stat.texi�����������������������������������������������0000664�0000000�0000000�00000004135�14110572173�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stat @section @code{stat} @findex stat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html} Gnulib module: stat Portability problems fixed by Gnulib: @itemize @item On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly report the size of files or block devices larger than 2 GB. (Cf. @code{AC_SYS_LARGEFILE}.) @item On Linux/x86 and Linux/x86_64, applications compiled in 32-bit mode cannot access files that happen to have a 64-bit inode number. This can occur with file systems such as XFS (typically on large disks) and NFS. (Cf. @code{AC_SYS_LARGEFILE}.) @item The @code{st_atime}, @code{st_ctime}, @code{st_mtime} fields are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable @code{TZ} is set). @item On MSVC 14, this function fails with error @code{ENOENT} on files such as @samp{C:\pagefile.sys} and on directories such as @samp{C:\System Volume Information}. @item On some platforms, @code{stat("link-to-file/",buf)} succeeds instead of failing with @code{ENOTDIR}. macOS 11.1, FreeBSD 7.2, AIX 7.1, Solaris 9, mingw64. @item On some platforms, @code{stat(".",buf)} and @code{stat("./",buf)} give different results: mingw, MSVC 14. @item On Solaris 11.4, when this function yields a timestamp with a nonpositive @code{tv_sec} value, @code{tv_nsec} might be in the range @minus{}1000000000..@minus{}1, representing a negative nanoseconds offset from @code{tv_sec}. @end itemize Portability problems not fixed by Gnulib: @itemize @item @xref{sys/stat.h}, for general portability problems with @code{struct stat}. @item Cygwin's @code{stat} function sometimes sets @code{errno} to @code{EACCES} when @code{ENOENT} would be more appropriate. @item Because of the definition of @code{struct stat}, it is not possible to portably replace @code{stat} via an object-like macro. Therefore, expressions such as @code{(islnk ? lstat : stat) (name, buf)} are not portable, and should instead be written @code{islnk ? lstat (name, buf) : stat (name, buf)}. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/statvfs.texi��������������������������������������������0000664�0000000�0000000�00000001632�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node statvfs @section @code{statvfs} @findex statvfs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/statvfs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14, Android 4.3. @item This function can hang if it stats all preceding entries in /proc/mounts, and any of those file systems are hard-mounted and not available. This affects Linux < 2.6.36. @item On platforms where @code{f_blocks} in @samp{struct statvfs} is a 32-bit value, this function may not work correctly on files systems larger than 4 TiB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. This affects glibc/Hurd, HP-UX 11, Solaris. @end itemize Gnulib provides a module @code{fsusage} that provides similar information as @code{statvfs}. ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stderr.texi���������������������������������������������0000664�0000000�0000000�00000001607�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stderr @section @code{stderr} @findex stderr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stderr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item stderr is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, ``r+'', stderr) on Cygwin 1.5.21 or newer. Another is to use the gnulib @code{ftello} module and do ftello(stderr). @item POSIX states that a setuid application can guarantee that fd 2 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 2 closed, use of @code{stderr} can affect an unrelated file that happened to be assigned to fd 2. The gnulib *-safer modules may be used to guarantee that fd 2 stays reserved for @code{stderr}. @end itemize �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stdin.texi����������������������������������������������0000664�0000000�0000000�00000001566�14110572173�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdin @section @code{stdin} @findex stdin POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stdin.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item stdin is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, ``r'', stdin) on Cygwin 1.5.21 or newer. Another is to use the gnulib ftello module and do ftello(stdin). @item POSIX states that a setuid application can guarantee that fd 0 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 0 closed, use of @code{stdin} can affect an unrelated file that happened to be assigned to fd 0. The gnulib *-safer modules may be used to guarantee that fd 0 stays reserved for @code{stdin}. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stdout.texi���������������������������������������������0000664�0000000�0000000�00000001606�14110572173�0022434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdout @section @code{stdout} @findex stdout POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stdout.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item stdout is created in 32-bit mode instead of 64-bit mode: Cygwin 1.5.x. One workaround is to use freopen(NULL, ``w'', stdout) on Cygwin 1.5.21 or newer. Another is to use the gnulib @code{ftello} module and do ftello(stdout). @item POSIX states that a setuid application can guarantee that fd 1 is open, but some systems guarantee this even for non-setuid programs. If an application is executed with fd 1 closed, use of @code{stdout} can affect an unrelated file that happened to be assigned to fd 1. The gnulib *-safer modules may be used to guarantee that fd 1 stays reserved for @code{stdout}. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stpcpy.texi���������������������������������������������0000664�0000000�0000000�00000001100�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stpcpy @section @code{stpcpy} @findex stpcpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html} Gnulib module: stpcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/stpncpy.texi��������������������������������������������0000664�0000000�0000000�00000001262�14110572173�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stpncpy @section @code{stpncpy} @findex stpncpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/stpncpy.html} Gnulib module: stpncpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item This function has an incompatible return value on some platforms: AIX 5.1. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strcasecmp.texi�����������������������������������������0000664�0000000�0000000�00000001144�14110572173�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcasecmp @section @code{strcasecmp} @findex strcasecmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcasecmp.html} Gnulib module: strcase Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function @code{mbscasecmp} that does a case insensitive comparison of character strings and that works in all locales. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strcasecmp_l.texi���������������������������������������0000664�0000000�0000000�00000000775�14110572173�0023577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcasecmp_l @section @code{strcasecmp_l} @findex strcasecmp_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcasecmp_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize ���gnulib-20210822~d383792/doc/posix-functions/strcat.texi���������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcat @section @code{strcat} @findex strcat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcat.html} Gnulib module: string Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strchr.texi���������������������������������������������0000664�0000000�0000000�00000000753�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strchr @section @code{strchr} @findex strchr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strchr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in some multibyte locales. Gnulib provides an alternative function @code{mbschr} that works on character strings in all locales. @end itemize ���������������������gnulib-20210822~d383792/doc/posix-functions/strcmp.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcmp @section @code{strcmp} @findex strcmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strcoll.texi��������������������������������������������0000664�0000000�0000000�00000001000�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcoll @section @code{strcoll} @findex strcoll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcoll.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function fails, setting @code{errno} to @code{EILSEQ}, on Solaris 10, in UTF-8 locales, when at least one of the strings contains a Unicode character in a block that was not assigned in Unicode 4.0. @end itemize gnulib-20210822~d383792/doc/posix-functions/strcoll_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcoll_l @section @code{strcoll_l} @findex strcoll_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcoll_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/strcpy.texi���������������������������������������������0000664�0000000�0000000�00000001067�14110572173�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcpy @section @code{strcpy} @findex strcpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcpy.html} Gnulib module: string Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: @code{strcpy (dst, src)} is only safe to use when you can guarantee that there are at least @code{strlen (src) + 1} bytes allocated at @code{dst}. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strcspn.texi��������������������������������������������0000664�0000000�0000000�00000001044�14110572173�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcspn @section @code{strcspn} @findex strcspn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strcspn.html} Gnulib module: strcspn Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function @code{mbscspn} that works on character strings in all locales. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strdup.texi���������������������������������������������0000664�0000000�0000000�00000001210�14110572173�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strdup @section @code{strdup} @findex strdup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html} Gnulib module: strdup or strdup-posix Portability problems fixed by either Gnulib module @code{strdup} or @code{strdup-posix}: @itemize @item This function has no prototype in @code{<string.h>} on some old platforms. @end itemize Portability problems fixed by Gnulib module @code{strdup-posix}: @itemize @item Upon failure, the function does not set @code{errno} to @code{ENOMEM} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strerror.texi�������������������������������������������0000664�0000000�0000000�00000002141�14110572173�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror @section @code{strerror} @findex strerror POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror.html} Gnulib module: strerror Portability problems fixed by Gnulib: @itemize @item This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, NonStop Kernel, Cygwin 1.5.x, mingw, MSVC 14. @item This function reports failure for @code{strerror(0)} (by setting @code{errno} or using a string similar to out-of-range values), although POSIX requires this to leave @code{errno} unchanged and report success, on some platforms: FreeBSD 8.2, NetBSD 9.0, OpenBSD 4.7, macOS 11.1. @item This function fails to return a string for out-of-range integers on some platforms: HP-UX 11, IRIX 6.5. (Some return NULL which is a POSIX violation, others return the empty string which is valid but not as useful); this can still cause bugs because most programs call @code{strerror} without setting and testing @code{errno}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strerror_l.texi�����������������������������������������0000664�0000000�0000000�00000001015�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror_l @section @code{strerror_l} @findex strerror_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.5, macOS 11.1, FreeBSD 12.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strerror_r.texi�����������������������������������������0000664�0000000�0000000�00000005364�14110572173�0023322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror_r @section @code{strerror_r} @findex strerror_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror_r.html} LSB specification: @itemize @item @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strerror-r.html} @item @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib---xpg-strerror-r.html} @end itemize Gnulib module: strerror_r-posix Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, HP-UX 11.23, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item glibc, Cygwin, and Android have an incompatible version of this function. The POSIX compliant code @smallexample char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL); @end smallexample is essentially equivalent to this code using the glibc function: @smallexample char *s = strerror_r (err, buf, buflen); @end smallexample @item This function clobbers the @code{strerror} buffer on some platforms: Cygwin 1.7.9. @item This function is sometimes not declared in @code{<string.h>} on some platforms: glibc 2.8. @item The third argument is of type @code{int} instead of @code{size_t} on some platforms: AIX 5.1. @item When this function fails, it returns @minus{}1 and sets @code{errno}, instead of returning the error number, on some platforms: glibc 2.12 with @code{-D_POSIX_C_SOURCE=200112L}, AIX 6.1. @item When this function fails, it corrupts @code{errno}, on some platforms: Solaris 10. @item This function does not support many error values defined in @code{<errno.h>} on some platforms: MSVC 14. @item This function does not support the error values that are specified by POSIX but not defined by the system, on some platforms: OpenBSD 4.0, NonStop Kernel, Cygwin 1.5.x. @item This function reports failure for @code{strerror_r(0, buf, len)}, although POSIX requires this to succeed, on some platforms: FreeBSD 8.2. @item This function produces a different string for @code{0} than @code{strerror} on some platforms: macOS 11.1. @item This function always fails when the third argument is less than 80 on some platforms: HP-UX 11.31. @item When the buffer is too small and the value is in range, this function does not fail, but instead truncates the result and returns 0 on some platforms: AIX 6.1, Haiku 2017. @item When the value is not in range or the buffer is too small, this function fails to leave a NUL-terminated string in the buffer on some platforms: glibc 2.13, FreeBSD 8.2, Solaris 10. @item When the value is out of range but the buffer is too small, this function does not always return the longest possible string on some platforms: OpenBSD 4.7. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strfmon.texi��������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfmon @section @code{strfmon} @findex strfmon POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strfmon.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.1, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strfmon_l.texi������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfmon_l @section @code{strfmon_l} @findex strfmon_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strfmon_l.html} Gnulib module: strfmon_l Portability problems fixed by Gnulib: @itemize @item This function ignores the locale argument on some platforms: FreeBSD 13.0, Cygwin 2.9. @item This function uses a wrong locale for the numbers on some platforms: glibc 2.23. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strfromd.texi�������������������������������������������0000664�0000000�0000000�00000001353�14110572173�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfromd @section @code{strfromd} @findex strfromd Documentation: @itemize @item @ifinfo @ref{Printing of Floats,,Printing of Floats,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Printing-of-Floats.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strfromd.3.html,,man strfromd}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strfromf.texi�������������������������������������������0000664�0000000�0000000�00000001353�14110572173�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfromf @section @code{strfromf} @findex strfromf Documentation: @itemize @item @ifinfo @ref{Printing of Floats,,Printing of Floats,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Printing-of-Floats.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strfromf.3.html,,man strfromf}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strfroml.texi�������������������������������������������0000664�0000000�0000000�00000001353�14110572173�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfroml @section @code{strfroml} @findex strfroml Documentation: @itemize @item @ifinfo @ref{Printing of Floats,,Printing of Floats,libc}, @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Printing-of-Floats.html}, @end ifnotinfo @item @uref{https://www.kernel.org/doc/man-pages/online/pages/man3/strfroml.3.html,,man strfroml}. @end itemize Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strftime.texi�������������������������������������������0000664�0000000�0000000�00000001625�14110572173�0022750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strftime @section @code{strftime} @findex strftime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html} Gnulib module: strftime-fixes Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item The Windows C runtime library (which is used by MinGW) does not support the %e specifier (and possibly the other more recent SUS specifiers too, i.e., %C, %D, %h, %n, %r, %R, %t, and %T). @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize Extension: Gnulib offers a module @samp{nstrftime} that provides an @code{nstrftime} function with various GNU extensions. �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strftime_l.texi�����������������������������������������0000664�0000000�0000000�00000000765�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strftime_l @section @code{strftime_l} @findex strftime_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize �����������gnulib-20210822~d383792/doc/posix-functions/strlen.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strlen @section @code{strlen} @findex strlen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strlen.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strncasecmp.texi����������������������������������������0000664�0000000�0000000�00000001173�14110572173�0023433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncasecmp @section @code{strncasecmp} @findex strncasecmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strncasecmp.html} Gnulib module: strcase Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides alternative functions @code{mbsncasecmp} and @code{mbspcasecmp} that do a case insensitive comparison of character strings and that work in all locales. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strncasecmp_l.texi��������������������������������������0000664�0000000�0000000�00000001001�14110572173�0023734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncasecmp_l @section @code{strncasecmp_l} @findex strncasecmp_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strncasecmp_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strncat.texi��������������������������������������������0000664�0000000�0000000�00000001020�14110572173�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncat @section @code{strncat} @findex strncat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strncat.html} Gnulib module: strncat Portability problems fixed by Gnulib: @itemize @item This function dereferences too much memory on some platforms: Solaris 10 on SPARC, Solaris 11.0 on x86. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strncmp.texi��������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncmp @section @code{strncmp} @findex strncmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strncmp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strncpy.texi��������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0022620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncpy @section @code{strncpy} @findex strncpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strncpy.html} Gnulib module: string Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Note: This function was designed for the use-case of filling a fixed-size record with a string, before writing it to a file. This function is @strong{not} appropriate for copying a string into a bounded memory area, because you have no guarantee that the result will be NUL-terminated. Even if you add the NUL byte at the end yourself, this function is inefficient (as it spends time clearing unused memory) and will allow silent truncation to occur, which is not a good behavior for GNU programs. For more details, see @url{https://meyering.net/crusade-to-eliminate-strncpy/}. ���������������������������gnulib-20210822~d383792/doc/posix-functions/strndup.texi��������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strndup @section @code{strndup} @findex strndup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strndup.html} Gnulib module: strndup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, mingw, MSVC 14. @item This function does not NUL-terminate the result on some platforms: AIX 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strnlen.texi��������������������������������������������0000664�0000000�0000000�00000000700�14110572173�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strnlen @section @code{strnlen} @findex strnlen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strnlen.html} Gnulib module: strnlen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, HP-UX 11, IRIX 6.5, Solaris 10, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strpbrk.texi��������������������������������������������0000664�0000000�0000000�00000001044�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strpbrk @section @code{strpbrk} @findex strpbrk POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strpbrk.html} Gnulib module: strpbrk Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function @code{mbspbrk} that works on character strings in all locales. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strptime.texi�������������������������������������������0000664�0000000�0000000�00000000770�14110572173�0022762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strptime @section @code{strptime} @findex strptime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-strptime-3.html} Gnulib module: strptime Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������gnulib-20210822~d383792/doc/posix-functions/strrchr.texi��������������������������������������������0000664�0000000�0000000�00000000760�14110572173�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strrchr @section @code{strrchr} @findex strrchr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strrchr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in some multibyte locales. Gnulib provides an alternative function @code{mbsrchr} that works on character strings in all locales. @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/strsignal.texi������������������������������������������0000664�0000000�0000000�00000001344�14110572173�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strsignal @section @code{strsignal} @findex strsignal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strsignal.html} Gnulib module: strsignal Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11, IRIX 6.5, mingw, MSVC 14. @item This function does not return a string for out-of-range numbers on some platforms: Solaris, AIX 5.1. @item This function is declared in @code{unistd.h} instead of @code{string.h} on some platforms: NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function returns @code{const char *} instead of @code{char *} on some platforms: cygwin 1.5.25. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strspn.texi���������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0022446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strspn @section @code{strspn} @findex strspn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strspn.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function @code{mbsspn} that works on character strings in all locales. @end itemize ���������������������������gnulib-20210822~d383792/doc/posix-functions/strstr.texi���������������������������������������������0000664�0000000�0000000�00000002157�14110572173�0022455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strstr @section @code{strstr} @findex strstr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strstr.html} Gnulib module: strstr or strstr-simple Portability problems fixed by either Gnulib module @code{strstr-simple} or @code{strstr}: @itemize @item This function can trigger memchr bugs on some platforms: glibc 2.10. @item This function can trigger false positives for long periodic needles on some platforms: glibc 2.12, Cygwin 1.7.7. @item This function may fail to find matches on some platforms: glibc 2.28. @end itemize Portability problems fixed by Gnulib @code{strstr}: @itemize @item This function has quadratic instead of linear worst-case complexity on some platforms: glibc 2.8, macOS 11.1, FreeBSD 6.2, NetBSD 9.0, OpenBSD 4.0, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in most multibyte locales. Gnulib provides an alternative function @code{mbsstr} that works on character strings in all locales. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtod.texi���������������������������������������������0000664�0000000�0000000�00000005217�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtod @section @code{strtod} @findex strtod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtod.html} Gnulib module: strtod or strtod-obsolete Portability problems fixed by either Gnulib module @code{strtod} or @code{strtod-obsolete}: @itemize @item This function mis-parses strings with leading @samp{+} on some old platforms: Old versions of Linux. @item This function returns a wrong end pointer on some old platforms. @item This function consumes whitespace even when there is nothing that should be parsed on some platforms: IRIX 6.5. @item This function allows whitespace between @samp{e} and the exponent on some platforms: HP-UX 11.11, IRIX 6.5. @item This function returns the wrong end pointer for @samp{-0x} on some platforms: glibc 2.4, Mac OS X 10.5, FreeBSD 6.2, AIX 7.1, Cygwin < 1.5.25-11. @item This function returns +0.0 (not @minus{}0.0) for @samp{-0} on some platforms: IRIX 6.5. @item This function fails to parse Infinities and plain NaNs on some platforms: OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item This function fails to parse @samp{NaN()} on some platforms: glibc-2.3.6, Mac OS X 10.5, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, Cygwin < 1.5.25-11, mingw, MSVC 14. @item This function fails to parse @samp{NaN(@var{n-char-sequence})} on some platforms: OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, mingw, MSVC 14. @item This function parses @samp{NaN(@var{n-char-sequence})}, but returns the wrong end pointer on some platforms: glibc-2.4, AIX 7.1. @item This function fails to parse C99 hexadecimal floating point on some platforms: NetBSD 5.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, Solaris 11.4, mingw, MSVC 14. @item In hexadecimal floats, this function allows whitespace between @samp{p} and the exponent on some platforms: HP-UX 11.31/ia64. @item This function returns the wrong end pointer for @samp{0x1p} on some platforms: AIX 7.1. @end itemize Portability problems fixed by Gnulib module @code{strtod-obsolete}: @itemize @item This function is missing on some old platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function returns +0.0 (not @minus{}0.0) for negative underflow on some platforms: glibc 2.7, Cygwin 1.5.x, mingw, MSVC 14. @item This function cannot distinguish between ``nan'' and ``-nan'' on some platforms: glibc 2.7, IRIX 6.5, mingw, MSVC 14. @item This function fails to correctly parse very long strings on some platforms: Mac OS X 10.5, FreeBSD 6.2, NetBSD 5.0, OpenBSD 4.0, IRIX 6.5, Cygwin, mingw, MSVC 14. @item The replacement function does not always return correctly rounded results. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtof.texi���������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtof @section @code{strtof} @findex strtof POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtof.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9, Android 4.4. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtoimax.texi������������������������������������������0000664�0000000�0000000�00000001101�14110572173�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoimax @section @code{strtoimax} @findex strtoimax POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtoimax.html} Gnulib module: strtoimax Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Solaris 9, MSVC 9. @item This function fails on valid input strings on some platforms: AIX 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as a macro on some platforms: HP-UX 11.11. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtok.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtok @section @code{strtok} @findex strtok POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtok_r.texi�������������������������������������������0000664�0000000�0000000�00000001252�14110572173�0022756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtok_r @section @code{strtok_r} @findex strtok_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok_r.html} Gnulib module: strtok_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function crashes when invoked from code compiled with optimization enabled on some platforms: glibc 2.7. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function cannot work correctly on character strings in multibyte locales. Gnulib provides an alternative function @code{mbstok_r} that works on character strings in all locales. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtol.texi���������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtol @section @code{strtol} @findex strtol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html} Gnulib module: strtol Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @item This function does not parse the leading @samp{0} when the input string is @code{"0x"} and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtold.texi��������������������������������������������0000664�0000000�0000000�00000003622�14110572173�0022605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtold @section @code{strtold} @findex strtold POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtold.html} Gnulib module: strtold Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, older IRIX 6.5, Solaris 9, older Cygwin 1.7.x, MSVC 9, Android 4.4. @item This function returns a struct, not a @code{long double}, on some platforms: HP-UX 11.31/hppa. @item This function consumes whitespace even when there is nothing that should be parsed on some platforms: IRIX 6.5. @item This function allows whitespace between @samp{e} and the exponent on some platforms: HP-UX 11.31/ia64, IRIX 6.5. @item This function returns the wrong end pointer for @samp{-0x} on some platforms: glibc-2.3.2, Mac OS X 10.5, Haiku. @item This function returns +0.0 (not @minus{}0.0) for @samp{-0} on some platforms: IRIX 6.5. @item This function fails to parse Infinities and plain NaNs on some platforms: HP-UX 11.31/ia64, IRIX 6.5. @item This function fails to parse @samp{NaN()} on some platforms: glibc-2.3.2, IRIX 6.5, mingw, Haiku. @item This function fails to parse @samp{NaN(@var{n-char-sequence})} on some platforms: IRIX 6.5. @item This function parses @samp{NaN(@var{n-char-sequence})}, but returns the wrong end pointer on some platforms: glibc-2.3.2, mingw, Haiku. @item This function fails to parse C99 hexadecimal floating point on some platforms: IRIX 6.5, mingw. @item In hexadecimal floats, this function allows whitespace between @samp{p} and the exponent on some platforms: HP-UX 11.31/ia64. @item This function fails to set @code{errno} upon underflow on some platforms: @c https://cygwin.com/ml/cygwin/2019-12/msg00072.html Cygwin 2.9. @end itemize Portability problems not fixed by Gnulib: @itemize @item The replacement function does not always return correctly rounded results. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtoll.texi��������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoll @section @code{strtoll} @findex strtoll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtoll.html} Gnulib module: strtoll Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, MSVC 9. @item This function does not parse the leading @samp{0} when the input string is @code{"0x"} and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtoul.texi��������������������������������������������0000664�0000000�0000000�00000001013�14110572173�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoul @section @code{strtoul} @findex strtoul POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtoul.html} Gnulib module: strtoul Portability problems fixed by Gnulib: @itemize @item This function is missing on some old platforms. @item This function does not parse the leading @samp{0} when the input string is @code{"0x"} and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtoull.texi�������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoull @section @code{strtoull} @findex strtoull POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtoull.html} Gnulib module: strtoull Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.11, MSVC 9. @item This function does not parse the leading @samp{0} when the input string is @code{"0x"} and the base is 16 or 0 on some platforms: Minix 3.3, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strtoumax.texi������������������������������������������0000664�0000000�0000000�00000000775�14110572173�0023166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoumax @section @code{strtoumax} @findex strtoumax POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtoumax.html} Gnulib module: strtoumax Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is only defined as a macro on some platforms: HP-UX 11.11. @end itemize ���gnulib-20210822~d383792/doc/posix-functions/strxfrm.texi��������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strxfrm @section @code{strxfrm} @findex strxfrm POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strxfrm.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/strxfrm_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strxfrm_l @section @code{strxfrm_l} @findex strxfrm_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/strxfrm_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/swab.texi�����������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swab @section @code{swab} @findex swab POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/swab.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 8.1. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/swprintf.texi�������������������������������������������0000664�0000000�0000000�00000002370�14110572173�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swprintf @section @code{swprintf} @findex swprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/swprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item This function has a different signature on some platforms: MSVC 9. @item This function is only defined as a macro on some platforms: MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item On Windows, this function does not take a buffer size as second argument. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/swscanf.texi��������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swscanf @section @code{swscanf} @findex swscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/swscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-swscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/symlink.texi��������������������������������������������0000664�0000000�0000000�00000001144�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node symlink @section @code{symlink} @findex symlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/symlink.html} Gnulib module: symlink Portability problems fixed by Gnulib: @itemize @item On some systems, @code{symlink(value,"name/")} mistakenly creates a symlink: macOS 11.1, FreeBSD 7.2, AIX 7.1, Solaris 9. @item This function is missing on some platforms; however, the replacement always fails with @code{EPERM}: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some file systems do not support symbolic links. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/symlinkat.texi������������������������������������������0000664�0000000�0000000�00000001663�14110572173�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node symlinkat @section @code{symlinkat} @findex symlinkat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/symlinkat.html} Gnulib module: symlinkat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item Some platforms declare this function in @code{stdio.h} instead of @code{unistd.h}: Cygwin 1.7.1. @item On some systems, @code{symlinkat(value, fd, "name/")} mistakenly creates a symlink: macOS 11.1, AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function always fails with @samp{ENOSYS} on platforms that don't support symlinks: mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sync.texi�����������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0022066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sync @section @code{sync} @findex sync POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sync.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/sysconf.texi��������������������������������������������0000664�0000000�0000000�00000000754�14110572173�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sysconf @section @code{sysconf} @findex sysconf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/sysconf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-sysconf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������gnulib-20210822~d383792/doc/posix-functions/syslog.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node syslog @section @code{syslog} @findex syslog POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/syslog.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/system.texi���������������������������������������������0000664�0000000�0000000�00000001671�14110572173�0022440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node system @section @code{system} @findex system POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/system.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-system-3.html} Gnulib module: system-posix Portability problems fixed by Gnulib: @itemize @item The macros @code{WIFSIGNALED}, @code{WIFEXITED}, @code{WIFSTOPPED}, @code{WTERMSIG}, @code{WEXITSTATUS}, @code{WNOHANG}, @code{WUNTRACED}, @code{WSTOPSIG} are not defined in @code{<stdlib.h>} (only in @code{<sys/wait.h>}) on some platforms: MirBSD 10. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), the command processor used by the @code{system} function is @file{cmd.exe}, not @file{/bin/sh}. Accordingly, the rules for quoting shell arguments containing spaces, quote or other special characters are different. @end itemize �����������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tan.texi������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tan @section @code{tan} @findex tan POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tan.html} Gnulib module: tan Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tanf.texi�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanf @section @code{tanf} @findex tanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tanf.html} Gnulib module: tanf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tanh.texi�����������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanh @section @code{tanh} @findex tanh POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tanh.html} Gnulib module: tanh Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tanhf.texi����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanhf @section @code{tanhf} @findex tanhf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tanhf.html} Gnulib module: tanhf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 5.1, Solaris 9. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tanhl.texi����������������������������������������������0000664�0000000�0000000�00000001037�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanhl @section @code{tanhl} @findex tanhl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tanhl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tanl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanl @section @code{tanl} @findex tanl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tanl.html} Gnulib module: tanl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, Android 4.4. @item This function is only defined as a macro with arguments on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcdrain.texi��������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcdrain @section @code{tcdrain} @findex tcdrain POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcdrain.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item On some platforms, @code{tcdrain} on a non-tty fails with @code{errno} set to @code{EINVAL} or, on Mac OS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcflow.texi���������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcflow @section @code{tcflow} @findex tcflow POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcflow.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcflush.texi��������������������������������������������0000664�0000000�0000000�00000001352�14110572173�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcflush @section @code{tcflush} @findex tcflush POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcflush.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @item On some platforms, @code{tcflush} of @code{TCIFLUSH} on a non-tty fails with errno set to @code{EINVAL} rather than @code{ENOTTY}. @item On some platforms, @code{tcflush} of @code{TCOFLUSH} on a non-tty fails with errno set to @code{EINVAL} or, on IRIX, also @code{ENOSYS}, or, on Mac OS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcgetattr.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetattr @section @code{tcgetattr} @findex tcgetattr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcgetattr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcgetpgrp.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetpgrp @section @code{tcgetpgrp} @findex tcgetpgrp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcgetpgrp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcgetsid.texi�������������������������������������������0000664�0000000�0000000�00000001355�14110572173�0022721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetsid @section @code{tcgetsid} @findex tcgetsid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcgetsid.html} Gnulib module: tcgetsid Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, OpenBSD 4.5, Minix 3.1.8, Cygwin 1.7.9, mingw, MSVC 14, Android 4.4. @item The declaration of this function in C++ compilation units has C++ linkage, not C linkage, on some platforms: HP-UX 11.00. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function always fails on some platforms: FreeBSD 6.0, Cygwin 1.7.8, mingw, MSVC 14. @item This function returns int instead of pid_t on some platforms: Cygwin 1.7.11. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcsendbreak.texi����������������������������������������0000664�0000000�0000000�00000000615�14110572173�0023376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsendbreak @section @code{tcsendbreak} @findex tcsendbreak POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsendbreak.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcsetattr.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsetattr @section @code{tcsetattr} @findex tcsetattr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsetattr.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tcsetpgrp.texi������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0023123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsetpgrp @section @code{tcsetpgrp} @findex tcsetpgrp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsetpgrp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tdelete.texi��������������������������������������������0000664�0000000�0000000�00000001002�14110572173�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tdelete @section @code{tdelete} @findex tdelete POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tdelete.html} Gnulib module: tsearch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. @item @code{tdelete} returns @code{NULL} when removing the last element of a tree on some platforms: OpenBSD 4.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/telldir.texi��������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node telldir @section @code{telldir} @findex telldir POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/telldir.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14, Android 5.1. @item On platforms where @code{long int} is a 32-bit type, this function may not work correctly on huge directories larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro (only on Mac OS X systems). @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tempnam.texi��������������������������������������������0000664�0000000�0000000�00000000760�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tempnam @section @code{tempnam} @findex tempnam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tempnam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @item This function is not appropriate for creating temporary files. (It has security risks.) Better use @code{mkstemp} instead. @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/tfind.texi����������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tfind @section @code{tfind} @findex tfind POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tfind.html} Gnulib module: tsearch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tgamma.texi���������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgamma @section @code{tgamma} @findex tgamma POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tgamma.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize ������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tgammaf.texi��������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0022523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgammaf @section @code{tgammaf} @findex tgammaf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tgammaf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tgammal.texi��������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgammal @section @code{tgammal} @findex tgammal POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tgammal.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_create.texi����������������������������������������0000664�0000000�0000000�00000001332�14110572173�0023372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_create @section @code{thrd_create} @findex thrd_create Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function uses an incorrectly defined @code{thrd_start_t} on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_current.texi���������������������������������������0000664�0000000�0000000�00000001175�14110572173�0023616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_current @section @code{thrd_current} @findex thrd_current Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_detach.texi����������������������������������������0000664�0000000�0000000�00000001172�14110572173�0023361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_detach @section @code{thrd_detach} @findex thrd_detach Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_equal.texi�����������������������������������������0000664�0000000�0000000�00000001167�14110572173�0023244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_equal @section @code{thrd_equal} @findex thrd_equal Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_exit.texi������������������������������������������0000664�0000000�0000000�00000001164�14110572173�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_exit @section @code{thrd_exit} @findex thrd_exit Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_join.texi������������������������������������������0000664�0000000�0000000�00000001434�14110572173�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_join @section @code{thrd_join} @findex thrd_join Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function never stores an exit code on some platforms: AIX 7.2. @item This function crashes when the second argument is NULL on some platforms: Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_sleep.texi�����������������������������������������0000664�0000000�0000000�00000001167�14110572173�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_sleep @section @code{thrd_sleep} @findex thrd_sleep Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/thrd_yield.texi�����������������������������������������0000664�0000000�0000000�00000001167�14110572173�0023243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node thrd_yield @section @code{thrd_yield} @findex thrd_yield Documentation:@* @ifinfo @ref{ISO C Thread Management,,Creation and Control,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread-Management.html}. @end ifnotinfo Gnulib module: thrd Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/time.texi�����������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node time @section @code{time} @findex time POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timer_create.texi���������������������������������������0000664�0000000�0000000�00000001002�14110572173�0023543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_create @section @code{timer_create} @findex timer_create POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_create.html} Gnulib module: timer-time Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. @item This function fails with @code{ENOSYS} on some platforms: OpenBSD 4.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timer_delete.texi���������������������������������������0000664�0000000�0000000�00000001002�14110572173�0023542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_delete @section @code{timer_delete} @findex timer_delete POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_delete.html} Gnulib module: timer-time Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. @item This function fails with @code{ENOSYS} on some platforms: OpenBSD 4.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timer_getoverrun.texi�����������������������������������0000664�0000000�0000000�00000000712�14110572173�0024507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_getoverrun @section @code{timer_getoverrun} @findex timer_getoverrun POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_getoverrun.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.0, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timer_gettime.texi��������������������������������������0000664�0000000�0000000�00000001006�14110572173�0023742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_gettime @section @code{timer_gettime} @findex timer_gettime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_gettime.html} Gnulib module: timer-time Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. @item This function fails with @code{ENOSYS} on some platforms: OpenBSD 4.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timer_settime.texi��������������������������������������0000664�0000000�0000000�00000001006�14110572173�0023756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_settime @section @code{timer_settime} @findex timer_settime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_settime.html} Gnulib module: timer-time Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.11, FreeBSD 6.4, Minix 3.1.8, mingw, MSVC 14. @item This function fails with @code{ENOSYS} on some platforms: OpenBSD 4.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/times.texi����������������������������������������������0000664�0000000�0000000�00000001024�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node times @section @code{times} @findex times POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/times.html} Gnulib module: times Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item There is no function on Windows to measure consumed process child times, thus the @code{tms_cutime} and @code{tms_cstime} will always be 0 when the module is used. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timespec_getres.texi������������������������������������0000664�0000000�0000000�00000001040�14110572173�0024264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timespec_getres @section @code{timespec_getres} @findex timespec_getres ISO C2x specification:@* @url{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf} section 7.27.2.6 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.33, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/timezone.texi�������������������������������������������0000664�0000000�0000000�00000001320�14110572173�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timezone @section @code{timezone} @findex timezone POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/timezone.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: IRIX 6.5, mingw. @item The address of this variable is not a compile-time constant on some platforms: mingw. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize A more portable way of getting the UTC offset is to use @code{strftime} with the @code{%z} format. @xref{strftime}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tmpfile.texi��������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tmpfile @section @code{tmpfile} @findex tmpfile POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tmpfile.html} Gnulib module: tmpfile Portability problems fixed by Gnulib: @itemize @item This function always fails on some platforms: Android 4.3. @item This function often fails for trivial reasons on some platforms: mingw, MSVC 14. @item On platforms where @code{off_t} is a 32-bit type, @code{tmpfile} may not work correctly to create files larger than 2 GB@. (Cf. @code{AC_SYS_LARGEFILE}.) @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tmpnam.texi���������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tmpnam @section @code{tmpnam} @findex tmpnam POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tmpnam.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is not appropriate for creating temporary files. (It has security risks.) Better use @code{mkstemp} instead. @end itemize �����������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/toascii.texi��������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toascii @section @code{toascii} @findex toascii POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/toascii.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tolower.texi��������������������������������������������0000664�0000000�0000000�00000001044�14110572173�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tolower @section @code{tolower} @findex tolower POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tolower.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tolower_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tolower_l @section @code{tolower_l} @findex tolower_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tolower_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/totalorder.texi�����������������������������������������0000664�0000000�0000000�00000001334�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalorder @section @code{totalorder} @findex totalorder Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/totalorderf.texi����������������������������������������0000664�0000000�0000000�00000001337�14110572173�0023440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalorderf @section @code{totalorderf} @findex totalorderf Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/totalorderl.texi����������������������������������������0000664�0000000�0000000�00000001337�14110572173�0023446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalorderl @section @code{totalorderl} @findex totalorderl Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/totalordermag.texi��������������������������������������0000664�0000000�0000000�00000001345�14110572173�0023756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalordermag @section @code{totalordermag} @findex totalordermag Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/totalordermagf.texi�������������������������������������0000664�0000000�0000000�00000001350�14110572173�0024120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalordermagf @section @code{totalordermagf} @findex totalordermagf Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/totalordermagl.texi�������������������������������������0000664�0000000�0000000�00000001350�14110572173�0024126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node totalordermagl @section @code{totalordermagl} @findex totalordermagl Documentation:@* @ifinfo @ref{FP Comparison Functions,,Floating-Point Comparison Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/FP-Comparison-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item This function has a different signature on some platforms: glibc 2.30. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/toupper.texi��������������������������������������������0000664�0000000�0000000�00000001044�14110572173�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toupper @section @code{toupper} @findex toupper POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/toupper.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/toupper_l.texi������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toupper_l @section @code{toupper_l} @findex toupper_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/toupper_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @end itemize ���������������gnulib-20210822~d383792/doc/posix-functions/towctrans.texi������������������������������������������0000664�0000000�0000000�00000001062�14110572173�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towctrans @section @code{towctrans} @findex towctrans POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towctrans.html} Gnulib module: towctrans Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw, MSVC 9, Android 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/towctrans_l.texi����������������������������������������0000664�0000000�0000000�00000001175�14110572173�0023452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towctrans_l @section @code{towctrans_l} @findex towctrans_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towctrans_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/towlower.texi�������������������������������������������0000664�0000000�0000000�00000001221�14110572173�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towlower @section @code{towlower} @findex towlower POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towlower.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/towlower_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towlower_l @section @code{towlower_l} @findex towlower_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towlower_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/towupper.texi�������������������������������������������0000664�0000000�0000000�00000001221�14110572173�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towupper @section @code{towupper} @findex towupper POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towupper.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. @item This function cannot be called from plain inline or extern inline functions on some platforms: OS X 10.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/towupper_l.texi�����������������������������������������0000664�0000000�0000000�00000001171�14110572173�0023307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towupper_l @section @code{towupper_l} @findex towupper_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/towupper_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/trunc.texi����������������������������������������������0000664�0000000�0000000�00000001212�14110572173�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node trunc @section @code{trunc} @findex trunc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/trunc.html} Gnulib module: trunc or trunc-ieee Portability problems fixed by either Gnulib module @code{trunc} or @code{trunc-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Solaris 9, MSVC 9. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @end itemize Portability problems fixed by Gnulib module @code{trunc-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/truncate.texi�������������������������������������������0000664�0000000�0000000�00000001406�14110572173�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncate @section @code{truncate} @findex truncate POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html} Gnulib module: truncate Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14, Android 4.4 with @code{AC_SYS_LARGEFILE} in effect. @item On platforms where @code{off_t} is a 32-bit type, this function is not applicable to arbitrary lengths for files larger than 2 GB@. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @item This function does not fail when the file name argument ends in a slash and (without the slash) names a non-directory, on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/truncf.texi���������������������������������������������0000664�0000000�0000000�00000001263�14110572173�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncf @section @code{truncf} @findex truncf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncf.html} Gnulib module: truncf or truncf-ieee Portability problems fixed by either Gnulib module @code{truncf} or @code{truncf-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 9, MSVC 9. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @end itemize Portability problems fixed by Gnulib module @code{truncf-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/truncl.texi���������������������������������������������0000664�0000000�0000000�00000001313�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncl @section @code{truncl} @findex truncl POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncl.html} Gnulib module: truncl or truncl-ieee Portability problems fixed by either Gnulib module @code{truncl} or @code{truncl-ieee}: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @end itemize Portability problems fixed by Gnulib module @code{truncl-ieee}: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tsearch.texi��������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tsearch @section @code{tsearch} @findex tsearch POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tsearch.html} Gnulib module: tsearch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.0.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tss_create.texi�����������������������������������������0000664�0000000�0000000�00000001200�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tss_create @section @code{tss_create} @findex tss_create Documentation:@* @ifinfo @ref{ISO C Thread-local Storage,,Thread-local Storage,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread_002dlocal-Storage.html}. @end ifnotinfo Gnulib module: tss Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tss_delete.texi�����������������������������������������0000664�0000000�0000000�00000001200�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tss_delete @section @code{tss_delete} @findex tss_delete Documentation:@* @ifinfo @ref{ISO C Thread-local Storage,,Thread-local Storage,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread_002dlocal-Storage.html}. @end ifnotinfo Gnulib module: tss Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tss_get.texi��������������������������������������������0000664�0000000�0000000�00000001167�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tss_get @section @code{tss_get} @findex tss_get Documentation:@* @ifinfo @ref{ISO C Thread-local Storage,,Thread-local Storage,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread_002dlocal-Storage.html}. @end ifnotinfo Gnulib module: tss Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tss_set.texi��������������������������������������������0000664�0000000�0000000�00000001167�14110572173�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tss_set @section @code{tss_set} @findex tss_set Documentation:@* @ifinfo @ref{ISO C Thread-local Storage,,Thread-local Storage,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/ISO-C-Thread_002dlocal-Storage.html}. @end ifnotinfo Gnulib module: tss Portability problems fixed by Gnulib: @itemize @item This function is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ttyname.texi��������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ttyname @section @code{ttyname} @findex ttyname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ttyname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @item This function is just a stub that produces an error message on standard error on some platforms: Android 4.3. @end itemize ����������������������������gnulib-20210822~d383792/doc/posix-functions/ttyname_r.texi������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ttyname_r @section @code{ttyname_r} @findex ttyname_r POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ttyname_r.html} Gnulib module: ttyname_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @item This function has an incompatible declaration on some platforms: Solaris 11.4 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @item This function refuses to do anything when the output buffer is less than 128 bytes large, on some platforms: Solaris 11 2010-11. @item This function is just a stub that produces an error message on standard error on some platforms: Android 4.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/twalk.texi����������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node twalk @section @code{twalk} @findex twalk POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/twalk.html} Gnulib module: tsearch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14, Android 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tzname.texi���������������������������������������������0000664�0000000�0000000�00000001334�14110572173�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tzname @section @code{tzname} @findex tzname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzname.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This variable is missing on some platforms: IRIX 6.5, mingw. @item The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones supported by GNU or specified by POSIX@. @xref{tzset}. @end itemize A more portable way of getting the time zone abbreviation is to use @code{strftime} with the @code{%Z} format. @xref{strftime}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/tzset.texi����������������������������������������������0000664�0000000�0000000�00000002100�14110572173�0022251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tzset @section @code{tzset} @findex tzset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html} Gnulib module: tzset Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item Native Windows platforms (mingw, MSVC) support only a subset of POSIX-specified values for the @env{TZ} environment variable, consisting of a time zone abbreviation containing exactly three ASCII letters with no daylight saving time or angle brackets, and with no support for @code{tz} database settings like @code{TZ='America/New_York'}. Even this subset does not work on applications built via the Universal Windows Platform, as it does not make environment variables like @env{TZ} available to applications. @item Older POSIX platforms do not support angle brackets in @env{TZ} values, as this feature was added in IEEE Std 1003.1-2001. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfp.texi��������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfp @section @code{ufromfp} @findex ufromfp Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfpf.texi�������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfpf @section @code{ufromfpf} @findex ufromfpf Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfpl.texi�������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfpl @section @code{ufromfpl} @findex ufromfpl Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfpx.texi�������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfpx @section @code{ufromfpx} @findex ufromfpx Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfpxf.texi������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfpxf @section @code{ufromfpxf} @findex ufromfpxf Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ufromfpxl.texi������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ufromfpxl @section @code{ufromfpxl} @findex ufromfpxl Documentation:@* @ifinfo @ref{Rounding Functions,,Rounding Functions,libc}. @end ifinfo @ifnotinfo @url{https://www.gnu.org/software/libc/manual/html_node/Rounding-Functions.html}. @end ifnotinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: glibc 2.24, macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ulimit.texi���������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ulimit @section @code{ulimit} @findex ulimit POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ulimit.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/umask.texi����������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node umask @section @code{umask} @findex umask POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/umask.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/uname.texi����������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0022216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node uname @section @code{uname} @findex uname POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/uname.html} Gnulib module: uname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ungetc.texi���������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ungetc @section @code{ungetc} @findex ungetc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ungetc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/ungetwc.texi��������������������������������������������0000664�0000000�0000000�00000000777�14110572173�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ungetwc @section @code{ungetwc} @findex ungetwc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/ungetwc.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �gnulib-20210822~d383792/doc/posix-functions/unlink.texi���������������������������������������������0000664�0000000�0000000�00000003122�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlink @section @code{unlink} @findex unlink POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/unlink.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-unlink-3.html} Gnulib module: unlink Portability problems fixed by Gnulib: @itemize @item This function is declared in a different header file (namely, @code{<stdio.h>}) on some platforms: MSVC 14. @item Some systems mistakenly succeed on @code{unlink("link-to-file/")}: GNU/Hurd, FreeBSD 7.2, AIX 7.1, Solaris 9. @item On Mac OS X 10.10, in a writable HFS mount, @code{unlink("..")} succeeds without doing anything. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some systems allow a superuser to unlink directories, even though this can cause file system corruption. The error given if a process is not permitted to unlink directories varies across implementations; it is not always the POSIX value of @code{EPERM}. Meanwhile, if a process has the ability to unlink directories, POSIX requires that @code{unlink("symlink-to-dir/")} remove @file{dir} and leave @file{symlink-to-dir} dangling; this behavior is counter-intuitive. The gnulib module @code{unlinkdir} can help determine whether code must be cautious of unlinking directories. @item Removing an open file is non-portable: On Unix this allows the programs that have the file already open to continue working with it; the file's storage is only freed when the no process has the file open any more. On Windows, the attempt to remove an open file fails. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/unlinkat.texi�������������������������������������������0000664�0000000�0000000�00000004174�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlinkat @section @code{unlinkat} @findex unlinkat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/unlinkat.html} Gnulib module: unlinkat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function is declared in @code{<fcntl.h>}, not in @code{<unistd.h>}, on some platforms: Cygwin 1.7.1, Android 4.3. @item On Mac OS X 10.10, in a writable HFS mount, @code{unlinkat(fd, "..", 0)} succeeds without doing anything. @item Some systems mistakenly succeed on @code{unlinkat(fd,"file/",flag)}: GNU/Hurd, Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item When @code{unlinkat(fd,name,AT_REMOVEDIR)} fails because the specified directory is not empty, the @code{errno} value is system dependent. @item POSIX requires that @code{unlinkdir(fd,"link-to-empty/",AT_REMOVEDIR)} remove @file{empty} and leave @file{link-to-empty} as a dangling symlink. This is counter-intuitive, so some systems fail with @code{ENOTDIR} instead: glibc @item Some systems allow a superuser to unlink directories, even though this can cause file system corruption. The error given if a process is not permitted to unlink directories varies across implementations; it is not always the POSIX value of @code{EPERM}. Meanwhile, if a process has the ability to unlink directories, POSIX requires that @code{unlinkat(fd,"symlink-to-dir/",0)} remove @file{dir} and leave @file{symlink-to-dir} dangling; this behavior is counter-intuitive. The gnulib module @code{unlinkdir} can help determine whether code must be cautious of unlinking directories. @item Removing an open file is non-portable: On Unix this allows the programs that have the file already open to continue working with it; the file's storage is only freed when the no process has the file open any more. On Windows, the attempt to remove an open file fails. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/unlockpt.texi�������������������������������������������0000664�0000000�0000000�00000001001�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlockpt @section @code{unlockpt} @findex unlockpt POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/unlockpt.html} Gnulib module: unlockpt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function reports success for invalid file descriptors on some platforms: NetBSD 5.1, Cygwin 1.7.9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/unsetenv.texi�������������������������������������������0000664�0000000�0000000�00000002037�14110572173�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unsetenv @section @code{unsetenv} @findex unsetenv POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html} Gnulib module: unsetenv Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, mingw, MSVC 14. @item This function has the return type @samp{void} instead of @samp{int} on some platforms: FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8. @item On some platforms, this function does not fail with @samp{EINVAL} when passed an empty string or a string containing @samp{=}: FreeBSD 6.0, NetBSD 1.6, OpenBSD 4.7. @item This function removes only the first value association for the given environment variable, not all of them, on some platforms: Solaris 11.4, Haiku. @end itemize Portability problems not fixed by Gnulib: @itemize @item Older versions of POSIX required that @code{unsetenv(NULL)} gracefully fail with @code{EINVAL}, but not all implementations guarantee this, and the requirement was removed. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/uselocale.texi������������������������������������������0000664�0000000�0000000�00000001535�14110572173�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node uselocale @section @code{uselocale} @findex uselocale POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/uselocale.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 9.0, NetBSD 9.0, OpenBSD 6.1, Minix 3.1.8, AIX 6.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 2.5.x, mingw, MSVC 14, Android 4.4. @item This function is not documented and leads to crashes in subsequent @code{setlocale} invocations on some platforms: AIX 7.2. @item This function is useless because the @code{locale_t} type is not defined on some platforms: z/OS. @item This function is useless because the @code{locale_t} type contains basically no information on some platforms: OpenBSD 6.3. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/utime.texi����������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utime @section @code{utime} @findex utime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/utime.html} Gnulib module: utime Portability problems fixed by Gnulib: @itemize @item The times that are set on the file are affected by the current time zone and by the DST flag of the current time zone on some platforms: mingw, MSVC 14 (when the environment variable @code{TZ} is set). @item On some platforms, the prototype for @code{utime} omits @code{const} for the second argument: mingw, MSVC 14. @item On some platforms, @code{utime("link-to-file/",buf)} succeeds instead of failing with @code{ENOTDIR}. macOS 11.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this function mis-handles a trailing slash: Solaris 9. @item This function cannot set full timestamp resolution. Use @code{utimensat(AT_FDCWD,file,times,0)}, or the gnulib module @code{utimens}, instead. @end itemize ������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/utimensat.texi������������������������������������������0000664�0000000�0000000�00000004320�14110572173�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utimensat @section @code{utimensat} @findex utimensat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/utimensat.html} Gnulib module: utimensat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: glibc 2.5, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 3.0. However, the replacement function may end up truncating timestamps to worse resolution than supported by the file system. Furthermore, the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function returns a bogus value instead of failing with @code{ENOSYS} on some platforms: Linux kernel 2.6.21. @item This function fails with @code{ENOSYS} if passed the flag @code{AT_SYMLINK_NOFOLLOW} on a regular file: Linux kernel 2.6.22. @item When using @code{UTIME_OMIT} or @code{UTIME_NOW}, some systems require the @code{tv_sec} argument to be 0, and don't necessarily handle all file permissions in the manner required by POSIX: Linux kernel 2.6.25. @item When using @code{UTIME_OMIT} for the modification time, but specifying an access time, some systems fail to update the change time: Linux kernel 2.6.32, macOS 11.1, NetBSD 9.0, Solaris 11.1. @item Out-of-range values of @code{tv_nsec} do not lead to a failure on some platforms: Linux kernel 2.6.22.19 on hppa. @item On some platforms, this function mis-handles a trailing slash: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, timestamps of symbolic links cannot be modified, so the replacement fails with @code{ENOSYS} if passed the flag @code{AT_SYMLINK_NOFOLLOW} on a symlink. @item The mere act of using @code{lstat} modifies the access time of symlinks on some platforms, so @code{utimensat} with @code{AT_SYMLINK_NOFOLLOW} can only effectively change modification time: Cygwin. @item The mere act of using @code{stat} modifies the access time of directories on some platforms, so @code{utimensat} can only effectively change directory modification time: Cygwin 1.5.x. @end itemize The gnulib module @code{fdutimensat} provides a similar interface. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/utimes.texi���������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utimes @section @code{utimes} @findex utimes POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/utimes.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item On some platforms, this function mis-handles a trailing slash: FreeBSD 7.2, Solaris 9. @item This function cannot set full timestamp resolution. In particular, some platforms incorrectly round rather than truncate. Use @code{utimensat(AT_FDCWD,file,times,0)}, or the gnulib module @code{utimens}, instead. @item On some platforms, @code{utimes (file, NULL)} fails to set the file's timestamp to the current time: glibc 2.3.3. @item On some platforms, @code{utimes} failed on read-only files when @code{utime} worked fine. glibc 2.2.5. @item On OS/2, this function cannot set the timestamp to earlier than the year 1980 in local time. @item On OS/2, this function cannot set the timestamp to an odd number of seconds. @item On OS/2, this function does not work on an opened file. @end itemize Extension: Gnulib provides a module @samp{utimens} that works around these problems and allows to set the time with nanosecond resolution (as far as supported by the file system). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/va_arg.texi���������������������������������������������0000664�0000000�0000000�00000002046�14110572173�0022350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_arg @section @code{va_arg} @findex va_arg POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/va_arg.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The second argument of @code{va_arg} must be a type that is invariant under the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6). This means that the following are not valid here: @table @asis @item @samp{float} Use @samp{double} instead. @item @samp{bool} Use @samp{int} instead. @item Integer types smaller than @samp{int}. Use @samp{int} or @samp{unsigned int} instead. @end table This is a portability problem because you don't know the width of some abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}. So, instead of @smallexample mode = va_arg (ap, mode_t); @end smallexample you have to write @smallexample mode = (sizeof (mode_t) < sizeof (int) ? va_arg (ap, int) : va_arg (ap, mode_t)); @end smallexample @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/va_copy.texi��������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_copy @section @code{va_copy} @findex va_copy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/va_copy.html} Gnulib module: stdarg Portability problems fixed by Gnulib: @itemize @item This macro is missing on some platforms: AIX 5.1 with cc or xlc, HP-UX 11 with cc, IRIX 6.5 with cc. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/va_end.texi���������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_end @section @code{va_end} @findex va_end POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/va_end.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/va_start.texi�������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_start @section @code{va_start} @findex va_start POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/va_start.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vdprintf.texi�������������������������������������������0000664�0000000�0000000�00000004076�14110572173�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vdprintf @section @code{vdprintf} @findex vdprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vdprintf.html} Gnulib module: vdprintf or vdprintf-posix Portability problems fixed by either Gnulib module @code{vdprintf} or @code{vdprintf-posix}: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{vdprintf-posix}: @itemize @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11.4. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Solaris 11.4. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Solaris 11.4. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vfprintf.texi�������������������������������������������0000664�0000000�0000000�00000007625�14110572173�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfprintf @section @code{vfprintf} @findex vfprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vfprintf.html} Gnulib module: vfprintf-posix or stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{vfprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vfprintf-posix}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vfprintf-posix}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item Attempting to write to a read-only stream fails with @code{EOF} but does not set the error flag for @code{ferror} on some platforms: glibc 2.13, cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vfscanf.texi��������������������������������������������0000664�0000000�0000000�00000001740�14110572173�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfscanf @section @code{vfscanf} @findex vfscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vfscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vfscanf.html} Gnulib module: vfscanf, nonblocking Portability problems fixed by Gnulib module @code{vfscanf}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, IRIX 6.5. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize ��������������������������������gnulib-20210822~d383792/doc/posix-functions/vfwprintf.texi������������������������������������������0000664�0000000�0000000�00000002000�14110572173�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfwprintf @section @code{vfwprintf} @findex vfwprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vfwprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize gnulib-20210822~d383792/doc/posix-functions/vfwscanf.texi�������������������������������������������0000664�0000000�0000000�00000001306�14110572173�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfwscanf @section @code{vfwscanf} @findex vfwscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vfwscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vfwscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vprintf.texi��������������������������������������������0000664�0000000�0000000�00000007615�14110572173�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vprintf @section @code{vprintf} @findex vprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vprintf.html} Gnulib module: vprintf-posix or stdio, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{vprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vprintf-posix}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vprintf-posix}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item Attempting to write to a read-only stream fails with @code{EOF} but does not set the error flag for @code{ferror} on some platforms: glibc 2.13, cygwin 1.7.9. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vscanf.texi���������������������������������������������0000664�0000000�0000000�00000001714�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vscanf @section @code{vscanf} @findex vscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vscanf.html} Gnulib module: vscanf, nonblocking Portability problems fixed by Gnulib module @code{vscanf}, together with module @code{nonblocking}: @itemize @item When reading from a non-blocking pipe whose buffer is empty, this function fails with @code{errno} being set to @code{EINVAL} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 6.5. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize ����������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vsnprintf.texi������������������������������������������0000664�0000000�0000000�00000007120�14110572173�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsnprintf @section @code{vsnprintf} @findex vsnprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vsnprintf.html} Gnulib module: vsnprintf or vsnprintf-posix Portability problems fixed by either Gnulib module @code{vsnprintf} or @code{vsnprintf-posix}: @itemize @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, IRIX 6.5, Solaris 9, mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{vsnprintf-posix}: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 14. @item This function does not fully support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, HP-UX 11, mingw, MSVC 14. @item This function overwrites memory even when a zero size argument is passed on some platforms: HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vsprintf.texi�������������������������������������������0000664�0000000�0000000�00000006070�14110572173�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsprintf @section @code{vsprintf} @findex vsprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vsprintf.html} Gnulib module: vsprintf-posix Portability problems fixed by Gnulib: @itemize @item This function does not support size specifiers as in C99 (@code{hh}, @code{ll}, @code{j}, @code{t}, @code{z}) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, mingw, MSVC 14. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 14. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14. @item This function does not support the @samp{n} directive on some platforms: glibc when used with @code{_FORTIFY_SOURCE >= 2} (set by default on Ubuntu), macOS 11.1, MSVC 14. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11.4. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: NetBSD 3.0, mingw, MSVC 14. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14. @item This function does not round the argument of the @samp{a} directive correctly on some platforms: Mac OS X 10.12, FreeBSD 13.0. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) on some platforms: Solaris 10. @item This function can crash in out-of-memory conditions on some platforms: FreeBSD 13.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item Formatting noncanonical @samp{long double} numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vsscanf.texi��������������������������������������������0000664�0000000�0000000�00000001302�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsscanf @section @code{vsscanf} @findex vsscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vsscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vsscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 14. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @item On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vswprintf.texi������������������������������������������0000664�0000000�0000000�00000001667�14110572173�0023163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vswprintf @section @code{vswprintf} @findex vswprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vswprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item On Windows, this function does not take a buffer size as second argument. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @end itemize �������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vswscanf.texi�������������������������������������������0000664�0000000�0000000�00000001317�14110572173�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vswscanf @section @code{vswscanf} @findex vswscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vswscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vswscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vwprintf.texi�������������������������������������������0000664�0000000�0000000�00000002133�14110572173�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vwprintf @section @code{vwprintf} @findex vwprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vwprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.7. @item This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/vwscanf.texi��������������������������������������������0000664�0000000�0000000�00000001301�14110572173�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vwscanf @section @code{vwscanf} @findex vwscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/vwscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-vwscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, Cygwin 1.5.x, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wait.texi�����������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0022056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wait @section @code{wait} @findex wait POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/waitid.texi���������������������������������������������0000664�0000000�0000000�00000001021�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node waitid @section @code{waitid} @findex waitid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/waitid.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, Cygwin 2.9, mingw, MSVC 14. @item As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT} works correctly. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/waitpid.texi��������������������������������������������0000664�0000000�0000000�00000000762�14110572173�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node waitpid @section @code{waitpid} @findex waitpid POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-waitpid-3.html} Gnulib module: waitpid Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������gnulib-20210822~d383792/doc/posix-functions/wcpcpy.texi���������������������������������������������0000664�0000000�0000000�00000001305�14110572173�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcpcpy @section @code{wcpcpy} @findex wcpcpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcpcpy.html} Gnulib module: wcpcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.13. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcpncpy.texi��������������������������������������������0000664�0000000�0000000�00000001312�14110572173�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcpncpy @section @code{wcpncpy} @findex wcpncpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcpncpy.html} Gnulib module: wcpncpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.13. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcrtomb.texi��������������������������������������������0000664�0000000�0000000�00000001776�14110572173�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcrtomb @section @code{wcrtomb} @findex wcrtomb POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcrtomb.html} Gnulib module: wcrtomb Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw. @item This function produces wrong characters in the C locale on some platforms: Android 4.3. @item This function returns 0 when the first argument is NULL in some locales on some platforms: Solaris 11.3. @item This function does not ignore the second argument when the first argument is NULL on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the ISO C11 function @code{c32rtomb}, provided by Gnulib module @code{c32rtomb}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize ��gnulib-20210822~d383792/doc/posix-functions/wcscasecmp.texi�����������������������������������������0000664�0000000�0000000�00000001152�14110572173�0023236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscasecmp @section @code{wcscasecmp} @findex wcscasecmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscasecmp.html} Gnulib module: wcscasecmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscasecmp_l.texi���������������������������������������0000664�0000000�0000000�00000001233�14110572173�0023551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscasecmp_l @section @code{wcscasecmp_l} @findex wcscasecmp_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscasecmp_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscat.texi���������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscat @section @code{wcscat} @findex wcscat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscat.html} Gnulib module: wcscat Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcschr.texi���������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcschr @section @code{wcschr} @findex wcschr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcschr.html} Gnulib module: wcschr Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscmp.texi���������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscmp @section @code{wcscmp} @findex wcscmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscmp.html} Gnulib module: wcscmp Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscoll.texi��������������������������������������������0000664�0000000�0000000�00000000765�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscoll @section @code{wcscoll} @findex wcscoll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscoll.html} Gnulib module: wcscoll Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������gnulib-20210822~d383792/doc/posix-functions/wcscoll_l.texi������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0023073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscoll_l @section @code{wcscoll_l} @findex wcscoll_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscoll_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscpy.texi���������������������������������������������0000664�0000000�0000000�00000001125�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscpy @section @code{wcscpy} @findex wcscpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscpy.html} Gnulib module: wcscpy Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize Note: @code{wcscpy (dst, src)} is only safe to use when you can guarantee that there are at least @code{wcslen (src) + 1} wide characters allocated at @code{dst}. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcscspn.texi��������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscspn @section @code{wcscspn} @findex wcscspn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcscspn.html} Gnulib module: wcscspn Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsdup.texi���������������������������������������������0000664�0000000�0000000�00000001106�14110572173�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsdup @section @code{wcsdup} @findex wcsdup POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsdup.html} Gnulib module: wcsdup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsftime.texi�������������������������������������������0000664�0000000�0000000�00000001433�14110572173�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsftime @section @code{wcsftime} @findex wcsftime POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html} Gnulib module: wcsftime Portability problems fixed by Gnulib: @itemize @item On native Windows platforms (mingw, MSVC), this function works incorrectly when the environment variable @code{TZ} has been set by Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item Native Windows platforms (mingw, MSVC) support only a subset of time zones specified by POSIX@. @xref{tzset}. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcslen.texi���������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcslen @section @code{wcslen} @findex wcslen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcslen.html} Gnulib module: wcslen Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsncasecmp.texi����������������������������������������0000664�0000000�0000000�00000001157�14110572173�0023421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncasecmp @section @code{wcsncasecmp} @findex wcsncasecmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsncasecmp.html} Gnulib module: wcsncasecmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsncasecmp_l.texi��������������������������������������0000664�0000000�0000000�00000001237�14110572173�0023733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncasecmp_l @section @code{wcsncasecmp_l} @findex wcsncasecmp_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsncasecmp_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: Mac OS X 10.5, FreeBSD 13.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 5.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsncat.texi��������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncat @section @code{wcsncat} @findex wcsncat POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsncat.html} Gnulib module: wcsncat Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsncmp.texi��������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncmp @section @code{wcsncmp} @findex wcsncmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsncmp.html} Gnulib module: wcsncmp Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsncpy.texi��������������������������������������������0000664�0000000�0000000�00000002052�14110572173�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncpy @section @code{wcsncpy} @findex wcsncpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsncpy.html} Gnulib module: wcsncpy Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize Note: This function has no real use: It cannot be used for filling a fixed-size record with a wide string, before writing it to a file, because the wide string encoding is platform dependent and, on some platforms, also locale dependent. And this function is @strong{not} appropriate for copying a wide string into a bounded memory area, because you have no guarantee that the result will be null-terminated. Even if you add the null character at the end yourself, this function is inefficient (as it spends time clearing unused memory) and will allow silent truncation to occur, which is not a good behavior for GNU programs. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsnlen.texi��������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsnlen @section @code{wcsnlen} @findex wcsnlen POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsnlen.html} Gnulib module: wcsnlen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 7.1, OpenBSD 6.7, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsnrtombs.texi�����������������������������������������0000664�0000000�0000000�00000002046�14110572173�0023312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsnrtombs @section @code{wcsnrtombs} @findex wcsnrtombs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsnrtombs.html} Gnulib module: wcsnrtombs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.5.x, mingw, MSVC 14, Android 4.4. @item This function cannot consume valid sequences of wide characters on some platforms: Solaris 11.4. @item In C++ mode, the system's @code{<wchar.h>} defines @code{std::wcsnrtombs} but not @code{::wcsnrtombs} on some platforms: Solaris 11 OpenIndiana. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32snrtombs}, provided by Gnulib module @code{c32snrtombs}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcspbrk.texi��������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcspbrk @section @code{wcspbrk} @findex wcspbrk POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcspbrk.html} Gnulib module: wcspbrk Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsrchr.texi��������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsrchr @section @code{wcsrchr} @findex wcsrchr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsrchr.html} Gnulib module: wcsrchr Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsrtombs.texi������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0023142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsrtombs @section @code{wcsrtombs} @findex wcsrtombs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsrtombs.html} Gnulib module: wcsrtombs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw. @item This function does not ignore the length argument if the destination argument is NULL on some platforms: mingw. @item This function updates the source pointer also if the destination argument is NULL on some platforms: HP-UX 11. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32srtombs}, provided by Gnulib module @code{c32srtombs}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize ���������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsspn.texi���������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsspn @section @code{wcsspn} @findex wcsspn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsspn.html} Gnulib module: wcsspn Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsstr.texi���������������������������������������������0000664�0000000�0000000�00000000760�14110572173�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsstr @section @code{wcsstr} @findex wcsstr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsstr.html} Gnulib module: wcsstr Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/wcstod.texi���������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstod @section @code{wcstod} @findex wcstod POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstod.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/wcstof.texi���������������������������������������������0000664�0000000�0000000�00000001110�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstof @section @code{wcstof} @findex wcstof POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstof.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstoimax.texi������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0023123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoimax @section @code{wcstoimax} @findex wcstoimax POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstoimax.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstok.texi���������������������������������������������0000664�0000000�0000000�00000001431�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstok @section @code{wcstok} @findex wcstok POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstok.html} Gnulib module: wcstok Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Cygwin 1.5.x. @item This function takes only two arguments on some platforms: mingw, older MSVC. @item This function may use hidden state, ignoring the third argument, and thus exhibit a bug when two or more @code{wcstok} iteration loops are being performed in the same thread, on some platforms: HP-UX 11.31. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstol.texi���������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstol @section @code{wcstol} @findex wcstol POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstol.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����gnulib-20210822~d383792/doc/posix-functions/wcstold.texi��������������������������������������������0000664�0000000�0000000�00000001114�14110572173�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstold @section @code{wcstold} @findex wcstold POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstold.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin 1.7.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstoll.texi��������������������������������������������0000664�0000000�0000000�00000001054�14110572173�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoll @section @code{wcstoll} @findex wcstoll POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstoll.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstombs.texi�������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstombs @section @code{wcstombs} @findex wcstombs POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstombs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32stombs}, provided by Gnulib module @code{c32stombs}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstoul.texi��������������������������������������������0000664�0000000�0000000�00000000777�14110572173�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoul @section @code{wcstoul} @findex wcstoul POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstoul.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �gnulib-20210822~d383792/doc/posix-functions/wcstoull.texi�������������������������������������������0000664�0000000�0000000�00000001060�14110572173�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoull @section @code{wcstoull} @findex wcstoull POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstoull.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.11, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcstoumax.texi������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0023137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoumax @section @code{wcstoumax} @findex wcstoumax POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcstoumax.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, Solaris 9, Cygwin 1.5.x, MSVC 9, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcswidth.texi�������������������������������������������0000664�0000000�0000000�00000001027�14110572173�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcswidth @section @code{wcswidth} @findex wcswidth POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcswidth.html} Gnulib module: wcswidth Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsxfrm.texi��������������������������������������������0000664�0000000�0000000�00000001003�14110572173�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsxfrm @section @code{wcsxfrm} @findex wcsxfrm POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsxfrm.html} Gnulib module: wcsxfrm Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcsxfrm_l.texi������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsxfrm_l @section @code{wcsxfrm_l} @findex wcsxfrm_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsxfrm_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wctob.texi����������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctob @section @code{wctob} @findex wctob POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctob.html} Gnulib module: wctob Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, mingw. @item This function clobbers caller-owned registers on some platforms: Cygwin 1.7.5. @item This function does not work on some platforms: Solaris 9. @item This function is missing a declaration on some platforms: IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. However, the Gnulib function @code{c32tob}, provided by Gnulib module @code{c32tob}, operates on 32-bit wide characters and therefore does not have this limitation. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wctomb.texi���������������������������������������������0000664�0000000�0000000�00000000760�14110572173�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctomb @section @code{wctomb} @findex wctomb POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctomb.html} Gnulib module: wctomb Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������gnulib-20210822~d383792/doc/posix-functions/wctrans.texi��������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctrans @section @code{wctrans} @findex wctrans POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctrans.html} Gnulib module: wctrans Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, mingw, MSVC 9, Android 7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wctrans_l.texi������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctrans_l @section @code{wctrans_l} @findex wctrans_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctrans_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 7.1. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wctype.texi���������������������������������������������0000664�0000000�0000000�00000001147�14110572173�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype @section @code{wctype} @findex wctype POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctype.html} Gnulib module: wctype Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, MSVC 9. @item This function is declared in @code{<wchar.h>}, not in @code{<wctype.h>}, on some platforms: HP-UX 11.00. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wctype_l.texi�������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype_l @section @code{wctype_l} @findex wctype_l POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wctype_l.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.3, Cygwin 1.7.x, mingw, MSVC 14, Android 4.4. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wcwidth.texi��������������������������������������������0000664�0000000�0000000�00000001732�14110572173�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcwidth @section @code{wcwidth} @findex wcwidth POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcwidth.html} Gnulib module: wcwidth Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @item This function handles combining characters in UTF-8 locales incorrectly on some platforms: NetBSD 9.0, OpenBSD 5.8, MidnightBSD 1.1. @item This function returns 2 for characters with ambiguous east asian width, even in Western locales, on some platforms: Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item This function treats zero-width spaces like control characters on some platforms: AIX 7.2. @end itemize ��������������������������������������gnulib-20210822~d383792/doc/posix-functions/wmemchr.texi��������������������������������������������0000664�0000000�0000000�00000001010�14110572173�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemchr @section @code{wmemchr} @findex wmemchr POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wmemchr.html} Gnulib module: wmemchr Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wmemcmp.texi��������������������������������������������0000664�0000000�0000000�00000001010�14110572173�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemcmp @section @code{wmemcmp} @findex wmemcmp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wmemcmp.html} Gnulib module: wmemcmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wmemcpy.texi��������������������������������������������0000664�0000000�0000000�00000001007�14110572173�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemcpy @section @code{wmemcpy} @findex wmemcpy POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wmemcpy.html} Gnulib module: wmemcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wmemmove.texi�������������������������������������������0000664�0000000�0000000�00000001014�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemmove @section @code{wmemmove} @findex wmemmove POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wmemmove.html} Gnulib module: wmemmove Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wmemset.texi��������������������������������������������0000664�0000000�0000000�00000001007�14110572173�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemset @section @code{wmemset} @findex wmemset POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wmemset.html} Gnulib module: wmemset Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wordexp.texi��������������������������������������������0000664�0000000�0000000�00000001076�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordexp @section @code{wordexp} @findex wordexp POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wordexp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wordfree.texi�������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordfree @section @code{wordfree} @findex wordfree POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wordfree.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wprintf.texi��������������������������������������������0000664�0000000�0000000�00000002113�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wprintf @section @code{wprintf} @findex wprintf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wprintf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item The @code{%m} directive is not portable, use @code{%s} mapped to an argument of @code{strerror(errno)} (or a version of @code{strerror_r}) instead. @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5. @item This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1. @item On some platforms, this function does not set @code{errno} or the stream error indicator on attempts to write to a read-only stream: Cygwin 1.7.9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/write.texi����������������������������������������������0000664�0000000�0000000�00000003251�14110572173�0022242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node write @section @code{write} @findex write POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html} Gnulib module: write, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{write}: @itemize @item This function is declared in a different header file (namely, @code{<io.h>}) on some platforms: mingw, MSVC 14. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: mingw, MSVC 14. @item When writing to a non-blocking pipe on which no reader is currently waiting an amount of bytes that exceeds the pipe buffer's size, then---even if the pipe's buffer is empty---this function fails, instead of performing a partial write into the pipe buffer, on some platforms: mingw, MSVC 14. @end itemize Portability problems fixed by Gnulib module @code{stdio}, together with module @code{sigpipe}: @itemize @item When writing to a pipe with no readers, this function fails with error @code{EINVAL}, instead of obeying the current @code{SIGPIPE} handler, on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function may fail with error @code{EINTR}, even in programs that don't install any signal handlers, on some platforms: macOS 11.1. @end itemize For handling @code{EINTR}, Gnulib provides a module @samp{safe-write} with a function @code{safe_write}. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/writev.texi���������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node writev @section @code{writev} @findex writev POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/writev.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/wscanf.texi���������������������������������������������0000664�0000000�0000000�00000001246�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wscanf @section @code{wscanf} @findex wscanf POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/wscanf.html} LSB specification:@* @url{https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/baselib-wscanf.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin 1.5.x. @item On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/y0.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node y0 @section @code{y0} @findex y0 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/y0.html} Gnulib module: y0 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/y1.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node y1 @section @code{y1} @findex y1 POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/y1.html} Gnulib module: y1 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-functions/yn.texi�������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node yn @section @code{yn} @findex yn POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/yn.html} Gnulib module: yn Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/����������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017617�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/aio.texi��������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio.h @section @file{aio.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/aio.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/arpa_inet.texi��������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node arpa/inet.h @section @file{arpa/inet.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/arpa_inet.h.html} Gnulib module: arpa_inet Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/assert.texi�����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0022024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node assert.h @section @file{assert.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/assert.h.html} Gnulib module: assert-h See also the Gnulib modules @code{assert} and @code{verify}. Portability problems fixed by Gnulib: @itemize @item On older platforms @code{static_assert} and @code{_Static_assert} do not allow the second string-literal argument to be omitted. For example, GCC versions before 9.1 do not support the single-argument @code{static_assert} that was standardized by C2x and C++17. @item Even-older platforms do not support @code{static_assert} or @code{_Static_assert} at all. For example, GCC versions before 4.6 do not support @code{_Static_assert}, and G++ versions before 4.3 do not support @code{static_assert}, which was standardized by C11 and C++11. @end itemize Portability problems not fixed by Gnulib: @itemize @item C @code{_Static_assert} and C++ @code{static_assert} are keywords that can be used without including @code{<assert.h>}. The Gnulib substitutes are macros that require including @code{<assert.h>}. @item The C @code{static_assert} and @code{_Static_assert} can also be used within a @code{struct} or @code{union} specifier, in place of an ordinary declaration of a member of the struct or union. The Gnulib substitute can be used only as an ordinary declaration. @item In C99 and later, @code{assert} can be applied to any scalar expression. In C89, the argument to @code{assert} is of type @code{int}. @end itemize ��������������������������gnulib-20210822~d383792/doc/posix-headers/complex.texi����������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node complex.h @section @file{complex.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/complex.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.7, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/cpio.texi�������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpio.h @section @file{cpio.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/cpio.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, Cygwin 2.4.x, mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/ctype.texi������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctype.h @section @file{ctype.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ctype.h.html} Gnulib module: ctype Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/dirent.texi�����������������������������������������������0000664�0000000�0000000�00000003111�14110572173�0021773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirent.h @section @file{dirent.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html} Gnulib module: dirent Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 14. @item The type @code{ino_t} is missing on some platforms: glibc 2.23 and others. @end itemize Portability problems not fixed by Gnulib: @itemize @item Although many systems define a @code{struct dirent} member named @code{d_type} and directory entry type macros like @code{DT_DIR} and @code{DT_LNK}, some do not: Minix 3.1.8, AIX 7.2, HP-UX 11, IRIX 6.5, Solaris 11.4, mingw. @item On systems with @code{d_type}, not every filesystem supports @code{d_type}, and those lacking support will set it to @code{DT_UNKNOWN}. @item Some systems define a @code{struct dirent} member named @code{d_namlen} containing the string length of @code{d_name}, but others do not: glibc 2.23 on Linux, Minix 3.1.8, Solaris 11.4, Cygwin. All of these, except Cygwin, have a member @code{d_reclen} instead, that has a different semantics. @item Some systems define a @code{struct dirent} member named @code{d_off} containing a magic cookie suitable as an argument to @code{seekdir}, but others do not: glibc 2.23 on Hurd, macOS 11.1, FreeBSD 11.0, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, Cygwin, mingw. @item Some systems define a @code{struct dirent} member named @code{d_reclen} containing the number of bytes in the directory entry record, but others do not. This member has limited utility, as it is an implementation detail. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/dlfcn.texi������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlfcn.h @section @file{dlfcn.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dlfcn.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/errno.texi������������������������������������������������0000664�0000000�0000000�00000003736�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node errno.h @section @file{errno.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html} Gnulib module: errno Portability problems fixed by Gnulib: @itemize @item The macro @code{EOVERFLOW} is not defined on some platforms: OpenBSD 4.0, mingw, MSVC 9. @item The macro @code{ENOLINK} is not defined on some platforms: OpenBSD 6.7, mingw, MSVC 9. @item The macro @code{EMULTIHOP} is not defined on some platforms: OpenBSD 6.7, mingw, MSVC 14. @item The macro @code{ECANCELED} is not defined on some platforms: OpenBSD 4.0, Cygwin, mingw, MSVC 9. @item The macros @code{ENOMSG}, @code{EIDRM}, @code{EPROTO}, @code{EBADMSG}, @code{ENOTSUP} are not defined on some platforms: OpenBSD 4.0, mingw, MSVC 9. @item The macro @code{ESTALE} is not defined on some platforms: mingw, MSVC 14. @item The macro @code{EDQUOT} is not defined on some platforms: NonStop Kernel, mingw, MSVC 14. @item The macros @code{ENETRESET}, @code{ECONNABORTED} are not defined on some platforms: Minix 3.1.8, mingw, MSVC 9. @item The macros @code{EWOULDBLOCK}, @code{ETXTBSY}, @code{ELOOP}, @code{ENOTSOCK}, @code{EDESTADDRREQ}, @code{EMSGSIZE}, @code{EPROTOTYPE}, @code{ENOPROTOOPT}, @code{EPROTONOSUPPORT}, @code{EOPNOTSUPP}, @code{EAFNOSUPPORT}, @code{EADDRINUSE}, @code{EADDRNOTAVAIL}, @code{ENETDOWN}, @code{ENETUNREACH}, @code{ECONNRESET}, @code{ENOBUFS}, @code{EISCONN}, @code{ENOTCONN}, @code{ETIMEDOUT}, @code{ECONNREFUSED}, @code{EHOSTUNREACH}, @code{EALREADY}, @code{EINPROGRESS} are not defined on some platforms: mingw, MSVC 9. @item The macros @code{EOWNERDEAD}, @code{ENOTRECOVERABLE} are not defined on some platforms: glibc/Linux 2.3.6, glibc/Hurd 2.15, glibc/kFreeBSD 2.15, Mac OS X 10.5, FreeBSD 6.0, NetBSD 9.0, OpenBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin, mingw without pthreads-win32, MSVC 9. @item The macro @code{EILSEQ} is not defined on some platforms: LynxOS 178 2.2.2. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������gnulib-20210822~d383792/doc/posix-headers/fcntl.texi������������������������������������������������0000664�0000000�0000000�00000006174�14110572173�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcntl.h @section @file{fcntl.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fcntl.h.html} Gnulib module: fcntl-h Portability problems fixed by Gnulib: @itemize @item The type @code{pid_t} is not defined on some platforms: MSVC 14. @item The type @code{mode_t} is not defined on some platforms: MSVC 14. @item @samp{O_CLOEXEC} is not defined on some platforms: Mac OS X 10.6, FreeBSD 8.4, NetBSD 5.1, OpenBSD 4.9, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 10, Cygwin 1.7.1, mingw, MSVC 14. @item @samp{O_DIRECTORY}, @samp{O_DSYNC}, @samp{O_NOCTTY}, @samp{O_NOFOLLOW}, @samp{O_RSYNC}, @samp{O_SYNC}, and @samp{O_TTY_INIT} are not defined on some platforms. Gnulib defines these macros to 0, which is generally safe. @item @samp{O_NONBLOCK} is not defined on some platforms. If the @samp{nonblocking} module is in use, gnulib guarantees a working non-zero value; otherwise, the gnulib replacement is 0. @item @samp{O_EXEC} and @samp{O_SEARCH} are not defined on some platforms. Gnulib defines these macros to @samp{O_RDONLY}, which is typically 0. The @samp{O_PATH} macro of GNU/Linux is not a suitable substitute, as fchmod fails with @samp{errno==EBADF} when invoked on a file descriptor that was opened with @samp{O_PATH}. @item @samp{O_ACCMODE} is not defined on some platforms: MSVC 14. @item The @samp{O_ACCMODE} mask mistakenly omits @samp{O_SEARCH} and @samp{O_EXEC} on some platforms: Cygwin. @item @samp{O_BINARY}, @samp{O_TEXT} (not specified by POSIX, but essential for portability to native Windows platforms) are defined on some platforms but not on others. @item @samp{O_CLOEXEC}, @samp{O_NOFOLLOW}, and @samp{O_TTY_INIT} are defined to values that are too large for an @code{int} on some platforms: AIX 7.1 with XL C 12.1. @item @samp{O_DIRECT}, @samp{O_IGNORE_CTTY}, @samp{O_NDELAY}, @samp{O_NOATIME}, @samp{O_NOLINK}, @samp{O_NOLINKS}, and @samp{O_NOTRANS} (not specified by POSIX) are defined on some platforms but not on others. @item @samp{FD_CLOEXEC}, @samp{F_DUPFD}, and @samp{F_GETFD} are not defined on some platforms: mingw, MSVC 14. @item @samp{F_DUPFD_CLOEXEC} is not defined on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 14. @item @samp{AT_FDCWD}, @samp{AT_EACCESS}, @samp{AT_SYMLINK_NOFOLLOW}, @samp{AT_SYMLINK_FOLLOW}, and @samp{AT_REMOVEDIR} are not defined on many platforms: glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.5.x, mingw, MSVC 14. @item @samp{AT_FDCWD} is defined with a value too large for an @code{int} on some platforms: Solaris 11.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item @samp{F_SETFD}, @samp{F_GETFL}, @samp{F_SETFL}, @samp{F_GETLK}, @samp{F_SETLK}, @samp{F_SETLKW}, @samp{F_GETOWN}, and @samp{F_SETOWN} are not defined on some platforms: mingw, MSVC 14. @item @samp{POSIX_FADV_DONTNEED}, @samp{POSIX_FADV_NOREUSE}, @samp{POSIX_FADV_NORMAL}, @samp{POSIX_FADV_RANDOM}, @samp{POSIX_FADV_SEQUENTIAL}, and @samp{POSIX_FADV_WILLNEED} are not defined on some platforms. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/fenv.texi�������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fenv.h @section @file{fenv.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fenv.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, Cygwin 1.7.7, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/float.texi������������������������������������������������0000664�0000000�0000000�00000002102�14110572173�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node float.h @section @file{float.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html} Gnulib module: float Portability problems fixed by Gnulib: @itemize @item The conversion from @code{int} to @code{long double} in incorrect on some platforms: glibc 2.7 on Linux/SPARC64. @item The values of @code{LDBL_*} macros are incorrect on some platforms: On OpenBSD 4.0 and MirBSD 10, they are the same as the values of the @code{DBL_*} macros, although @samp{long double} is a larger type than @samp{double}. On FreeBSD/x86 6.4, they represent the incorrect 53-bit precision assumptions in the compiler, not the real 64-bit precision at runtime. On Linux/PowerPC with GCC 4.4, on AIX 7.1 with GCC 4.2, and on IRIX 6.5, they don't reflect the ``double double'' representation of @code{long double} correctly. @end itemize Portability problems not fixed by Gnulib: @itemize @item The macro @code{FLT_ROUNDS} is a constant expression and does not represent the current rounding mode on some platforms: glibc 2.11, HP-UX 11, mingw. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/fmtmsg.texi�����������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0022011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmtmsg.h @section @file{fmtmsg.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fmtmsg.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/fnmatch.texi����������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0022140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fnmatch.h @section @file{fnmatch.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fnmatch.h.html} Gnulib module: fnmatch-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/ftw.texi��������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftw.h @section @file{ftw.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ftw.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 14. @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/glob.texi�������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node glob.h @section @file{glob.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/glob.h.html} Gnulib module: glob-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/google-ranking.txt����������������������������������������0000664�0000000�0000000�00000003740�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<stdio.h> 678000 <string.h> 589000 <stdlib.h> 548000 <unistd.h> 448000 <sys/types.h> 319000 <netdb.h> 700 <sys/wait.h> 600 <sys/timeb.h> 600 <sys/resource.h> 600 <stdarg.h> 600 <signal.h> 600 <regex.h> 600 <netinet/in.h> 600 <limits.h> 600 <libgen.h> 600 <arpa/inet.h> 600 <wchar.h> 500 <termios.h> 500 <sys/un.h> 500 <sys/uio.h> 500 <sys/times.h> 500 <sys/time.h> 500 <sys/socket.h> 500 <sys/sem.h> 500 <sys/select.h> 500 <stdint.h> 500 <stdbool.h> 500 <setjmp.h> 500 <sched.h> 500 <pwd.h> 500 <pthread.h> 500 <netinet/tcp.h> 500 <math.h> 500 <locale.h> 500 <iconv.h> 500 <float.h> 500 <fcntl.h> 500 <dlfcn.h> 500 <dirent.h> 500 <assert.h> 500 <wctype.h> 400 <time.h> 400 <syslog.h> 400 <sys/utsname.h> 400 <sys/statvfs.h> 400 <sys/stat.h> 400 <sys/shm.h> 400 <sys/ipc.h> 400 <stropts.h> 400 <strings.h> 400 <semaphore.h> 400 <search.h> 400 <poll.h> 400 <net/if.h> 400 <ndbm.h> 400 <langinfo.h> 400 <inttypes.h> 400 <grp.h> 400 <glob.h> 400 <fnmatch.h> 400 <errno.h> 400 <ctype.h> 400 <utmpx.h> 300 <utime.h> 300 <ucontext.h> 300 <sys/msg.h> 300 <sys/mman.h> 300 <stddef.h> 300 <nl_types.h> 300 <complex.h> 300 <ftw.h> 200 <fenv.h> 200 <wordexp.h> 100 <ulimit.h> 100 <trace.h> 100 <mqueue.h> 100 <aio.h> 100 <tgmath.h> 50 <tar.h> 50 <spawn.h> 50 <monetary.h> 50 <iso646.h> 50 <fmtmsg.h> 50 <cpio.h> 50 ��������������������������������gnulib-20210822~d383792/doc/posix-headers/grp.texi��������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node grp.h @section @file{grp.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/grp.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/iconv.texi������������������������������������������������0000664�0000000�0000000�00000001012�14110572173�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv.h @section @file{iconv.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/iconv.h.html} Gnulib module: iconv Portability problems fixed by Gnulib: @itemize @item The <iconv.h> from GNU libiconv is not found if installed in @file{$PREFIX/include}. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, when GNU libiconv is not installed. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/inttypes.texi���������������������������������������������0000664�0000000�0000000�00000001570�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inttypes.h @section @file{inttypes.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html} Gnulib module: inttypes Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 9. @item This header file is very incomplete on some platforms. @item The declarations of @code{imaxabs} and @code{imaxdiv} are missing on some platforms: NetBSD 3.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5. @item The declarations of @code{strtoimax} and @code{strtoumax} are missing on some platforms: OpenBSD 6.7, AIX 5.1 (missing only @code{strtoumax}). @item On some hosts that predate C++11, when using C++ one must define @code{__STDC_FORMAT_MACROS} to make visible the declarations of format macros such as @code{PRIdMAX}. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/iso646.texi�����������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0021541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iso646.h @section @file{iso646.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/iso646.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Cygwin, mingw. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/langinfo.texi���������������������������������������������0000664�0000000�0000000�00000001500�14110572173�0022303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node langinfo.h @section @file{langinfo.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html} Gnulib module: langinfo Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item The constant @code{CODESET} is not defined on some platforms: OpenBSD 6.7. @item The constants @code{ALTMON_1} to @code{ALTMON_12} are not defined on some platforms: glibc 2.26, musl libc, macOS 11.1, NetBSD 8.0, OpenBSD 6.5, AIX 7.2, HP-UX 11.31, IRIX 6.5, Solaris 11.4, Haiku, Cygwin 2.9. @item The constants @code{ERA}, @code{ERA_D_FMT}, @code{ERA_D_T_FMT}, @code{ERA_T_FMT}, @code{ALT_DIGITS} are not defined on some platforms: OpenBSD 6.7. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/libgen.texi�����������������������������������������������0000664�0000000�0000000�00000000771�14110572173�0021757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node libgen.h @section @file{libgen.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/libgen.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize The Gnulib module @code{dirname} provides similar API, with functions @code{base_name} and @code{dir_name} that also work with Windows file names. �������gnulib-20210822~d383792/doc/posix-headers/limits.texi�����������������������������������������������0000664�0000000�0000000�00000003043�14110572173�0022013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node limits.h @section @file{limits.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html} Gnulib module: limits-h or gethostname Portability problems fixed by Gnulib module @code{limits-h}: @itemize @item The macros @code{LLONG_MIN}, @code{LLONG_MAX}, @code{ULLONG_MAX} are not defined on some platforms: older glibc systems (e.g. Fedora 1), AIX 5.1, HP-UX 11, IRIX 6.5, OpenVMS. @item The macros @code{WORD_BIT}, @code{LONG_BIT} are not defined on some platforms: glibc 2.11 without @code{-D_GNU_SOURCE}, Cygwin, mingw, MSVC 14. @item Macros like @code{CHAR_WIDTH} are not defined on some platforms: glibc 2.24, NetBSD 9.0, many others. @item The macros @code{BOOL_MAX} and @code{BOOL_WIDTH} are not defined on some platforms: glibc 2.32, many others. @end itemize Portability problems fixed by Gnulib module @code{gethostname}: @itemize @item The @code{HOST_NAME_MAX} macro is not defined on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item The macro @code{SSIZE_MAX} has the wrong type, albeit with the correct value: 32-bit glibc 2.24 (on some architectures), Cygwin 2.5.2. @item The macro @code{SSIZE_MAX} is not defined on some platforms: MSVC 14. @end itemize For @code{PATH_MAX}, Gnulib provides a module @code{pathmax} with a header file @code{"pathmax.h"}. It defines @code{PATH_MAX} to a constant on platforms with a file name length limit. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/locale.texi�����������������������������������������������0000664�0000000�0000000�00000001752�14110572173�0021756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node locale.h @section @file{locale.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/locale.h.html} Gnulib module: locale Portability problems fixed by Gnulib: @itemize @item The definition of @samp{LC_MESSAGES} is missing on some platforms: mingw, MSVC 14. @item The @code{locale_t} type is not defined on some platforms: glibc 2.11, macOS 11.1. @item The @code{struct lconv} type does not contain any members on some platforms: Android up to 2014. @item The @code{struct lconv} type does not contain the members @code{int_p_cs_precedes}, @code{int_p_sign_posn}, @code{int_p_sep_by_space}, @code{int_n_cs_precedes}, @code{int_n_sign_posn}, @code{int_n_sep_by_space} on some platforms: glibc, OpenBSD 4.9, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������gnulib-20210822~d383792/doc/posix-headers/math.texi�������������������������������������������������0000664�0000000�0000000�00000002741�14110572173�0021447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node math.h @section @file{math.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html} Gnulib module: math Portability problems fixed by Gnulib: @itemize @item The conversion from @code{int} to @code{long double} in incorrect on some platforms: glibc 2.7 on Linux/SPARC64. @item The macro @code{NAN} is not defined on some platforms: OpenBSD 4.0, AIX 5.1, IRIX 6.5. @item The macro @code{NAN} is not exposed outside of C99 compilation on some platforms: glibc. @item The macros @code{NAN} and @code{HUGE_VAL} expand to a function address rather than a floating point constant on some platforms: Solaris 10. @item The macros @code{HUGE_VALF} and @code{HUGE_VALL} are not defined on some platforms: glibc/HPPA, glibc/SPARC, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @item The macros @code{FP_ILOGB0} and @code{FP_ILOGBNAN} are not defined on some platforms: NetBSD 5.1, AIX 5.1, IRIX 6.5, Solaris 9, MSVC 9. @item The macros @code{FP_ILOGB0} and @code{FP_ILOGBNAN} have wrong values on some platforms: Haiku 2017. @item The macros @code{NAN}, @code{HUGE_VALL}, and @code{INFINITY} are not defined on some platforms: OpenVMS. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{NAN} is not a compile time constant with some compilers: OpenVMS. @item The macro or variable @code{math_errhandling} is not defined on some platforms: glibc 2.11, OpenBSD 4.9, NetBSD 5.1, UP-UX 11, IRIX 6.5, Cygwin 1.7.9, mingw, MSVC 9. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-headers/monetary.texi���������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0022342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node monetary.h @section @file{monetary.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/monetary.h.html} Gnulib module: monetary Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.7.1, mingw, MSVC 14, Android 9.0. @item This header file has a syntax error in C++ mode on some platforms: @c http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54744 NetBSD 8.0. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/mqueue.texi�����������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0022025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mqueue.h @section @file{mqueue.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/mqueue.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 6.0, NetBSD 3.0, OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize �����������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/ndbm.texi�������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ndbm.h @section @file{ndbm.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ndbm.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/net_if.texi�����������������������������������������������0000664�0000000�0000000�00000000777�14110572173�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node net/if.h @section @file{net/if.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/net_if.h.html} Gnulib module: net_if Portability problems fixed by Gnulib: @itemize @item This header file is not self-contained on some platforms (needing <sys/socket.h> to be included first): Mac OS X 10.5, FreeBSD 8.2, OpenBSD 5.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize �gnulib-20210822~d383792/doc/posix-headers/netdb.texi������������������������������������������������0000664�0000000�0000000�00000001326�14110572173�0021610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netdb.h @section @file{netdb.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/netdb.h.html} Gnulib module: netdb Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file is incomplete on some platforms: Cygwin 1.5.x, Haiku. @item This header file does not define the type @code{socklen_t} on some platforms: IRIX 6.5. @item This header file does not define @code{AI_ALL}, @code{AI_V4MAPPED} on some platforms: NetBSD 9.0. @item This header file does not define @code{AI_ADDRCONFIG} on some platforms: NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/netinet_in.texi�������������������������������������������0000664�0000000�0000000�00000000775�14110572173�0022657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netinet/in.h @section @file{netinet/in.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/netinet_in.h.html} Gnulib module: netinet_in Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file is not self-contained on some platforms (it requires @code{<sys/types.h>} to be included first): OpenBSD 4.6. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���gnulib-20210822~d383792/doc/posix-headers/netinet_tcp.texi������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0023033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netinet/tcp.h @section @file{netinet/tcp.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/netinet_tcp.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/nl_types.texi���������������������������������������������0000664�0000000�0000000�00000000615�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_types.h @section @file{nl_types.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/nl_types.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/poll.texi�������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node poll.h @section @file{poll.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/poll.h.html} Gnulib module: poll-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/pthread.texi����������������������������������������������0000664�0000000�0000000�00000001422�14110572173�0022140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread.h @section @file{pthread.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html} Gnulib module: pthread-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms. Minix 3.1.8, mingw 2.x, MSVC 14. But the provided replacement covers only the essential POSIX threads API. Furthermore it is just a dummy on some of these platforms: Minix 3.1.8. @item This header pollutes the namespace with some broken macro implementations for various functions such as @code{strtok_r} and @code{gmtime_r}: mingw 3.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file lacks the declaration of @code{pthread_atfork} on some platforms: IRIX 6.5. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/pwd.texi��������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pwd.h @section @file{pwd.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pwd.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/regex.texi������������������������������������������������0000664�0000000�0000000�00000000733�14110572173�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regex.h @section @file{regex.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/regex.h.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is not self-contained on some platforms: it requires @code{<sys/types.h>} to be included first. @end itemize �������������������������������������gnulib-20210822~d383792/doc/posix-headers/sched.texi������������������������������������������������0000664�0000000�0000000�00000001211�14110572173�0021573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched.h @section @file{sched.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sched.h.html} Gnulib module: sched Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @item This header file does not define the type @code{pid_t} on some platforms: glibc 2.11, macOS 11.1. @item @code{struct sched_param} is not defined on some platforms: Haiku. @item @code{SCHED_FIFO}, @code{SCHED_RR}, @code{SCHED_OTHER} are not defined on some platforms: Haiku. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/search.texi�����������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node search.h @section @file{search.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/search.h.html} Gnulib module: search Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/semaphore.texi��������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0022502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semaphore.h @section @file{semaphore.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/semaphore.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/setjmp.texi�����������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0022012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setjmp.h @section @file{setjmp.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/setjmp.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/signal.texi�����������������������������������������������0000664�0000000�0000000�00000002426�14110572173�0021773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signal.h @section @file{signal.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html} Gnulib module: signal-h Portability problems fixed by Gnulib: @itemize @item @code{volatile sig_atomic_t} is rejected by older compilers on some platforms: AIX. @item @code{sigset_t} is missing on some platforms: MSVC 14. @item @code{sigset_t} is only declared in <sys/types.h> on some platforms: mingw. @item @code{struct sigaction} and @code{siginfo_t} are missing on some platforms: mingw, MSVC 14. @item The type @code{pid_t} is not defined on some platforms: MSVC 14. @item The signal @code{SIGPIPE} is not defined on some platforms: mingw, MSVC 14. @item The macros @code{SA_RESETHAND} and @code{SA_RESTART} are not defined on some platforms: NonStop. @item The type @code{sighandler_t} (a GNU extension) is not defined on most non-glibc platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item Many signals are not defined on some platforms: mingw, MSVC 14. @item The macro @code{SIGBUS} is set to the same value as @code{SIGSEGV}, rather than being a distinct signal, on some platforms: Haiku. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/spawn.texi������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node spawn.h @section @file{spawn.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/spawn.h.html} Gnulib module: spawn Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.25, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stdalign.texi���������������������������������������������0000664�0000000�0000000�00000005043�14110572173�0022321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdalign.h @section @file{stdalign.h} POSIX specification:@* Not in POSIX yet, but we expect it will be. ISO C11 (latest free draft @url{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 @url{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf}) section 18.10. Gnulib module: stdalign Portability problems fixed by Gnulib: @itemize @item This header file is missing on many platforms: FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, mingw, MSVC 14, Android 9.0. @item Clang 3.0's @code{<stdalign.h>} does not define @code{alignof}/@code{_Alignof}. @item The @code{alignof} and @code{_Alignof} macros return too large values for the types @code{double} and @code{long long} in GCC 4.7.0. @end itemize Portability problems not fixed by Gnulib: @itemize @item In ISO C11, the operand of @code{alignof}/@code{_Alignof} must be a parenthesized type. Recent versions of GCC support an extension in which the operand can also be a unary expression, as with @code{sizeof}. The Gnulib substitute does not support this extension. @item On most pre-C11 platforms, the operand of @code{alignof}/@code{_Alignof} cannot be a structure type containing a flexible array member. @item @code{_Alignas} and @code{alignas} are not always supported; on platforms lacking support, the macro @code{__alignas_is_defined} is not defined. Supported compilers include GCC, IBM C, Sun C 5.9 and later, and MSVC 7.0 and later. @item Some compilers do not support alignment via @code{alignas}/@code{_Alignas} of @code{auto} variables (i.e., variables on the stack). They diagnose and ignore the alignment: Sun C 5.11. @item Some linkers do not support operands of @code{_Alignas}/@code{alignas} that are greater than 8: mingw. @item Some compilers require the operand of @code{_Alignas}/@code{alignas} to be a single integer constant, not an expression: MSVC 7.0 through at least 10.0. @item The Sun C 5.13 compiler sometimes mishandles the alignment of multiple external variables that are declared close together with @code{_Alignas}/@code{alignas}. The Sun Studio Developer Bug Report Review Team assigned the internal review ID 2125432 (dated 2011-11-01) to this issue. The bug appears to be fixed in Sun C 5.15, also known as Oracle Developer Studio 12.6. @item @code{<stdalign.h>} must be #included before @code{_Alignas} and @code{_Alignof} can be used. @item You cannot assume that @code{_Alignas} and @code{_Alignof} are reserved words; they might be macros. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stdarg.texi�����������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdarg.h @section @file{stdarg.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdarg.h.html} Gnulib module: stdarg Portability problems fixed by Gnulib: @itemize @item Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode for the builtin @code{va_copy} to work. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stdbool.texi����������������������������������������������0000664�0000000�0000000�00000002422�14110572173�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdbool.h @section @file{stdbool.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdbool.h.html} Gnulib module: stdbool Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5. @item This header file is not usable in C++ mode with the vendor compiler on Solaris 10. @item Some compilers have bugs relating to @samp{bool}. @item This header file defines @code{true} incorrectly on some platforms: OpenBSD 4.7 with gcc 2.95. @end itemize Portability problems not fixed by Gnulib: @itemize @item @samp{_Bool} cannot be used before @code{<stdbool.h>} is included, or if the program is intended to be compiled by a C++ compiler. @item You cannot assume that @code{_Bool} is a typedef; it might be a macro. @item Bit-fields of type @samp{bool} are not supported. Portable code should use @samp{unsigned int foo : 1;} rather than @samp{bool foo : 1;}. @item Casts and automatic conversions to @samp{bool} don't test against the zero value or the null pointer, as they should. Such casts should only be used if the value is known to be equal to 0 or 1. @item You cannot assume that casting a floating point literal to @samp{bool} will result in a constant expression. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stddef.texi�����������������������������������������������0000664�0000000�0000000�00000002342�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stddef.h @section @file{stddef.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html} Gnulib module: stddef Portability problems fixed by Gnulib: @itemize @item Some platforms fail to provide @code{max_align_t}, which was added in C11: NetBSD 8.0, Solaris 11.0, and others. @item @code{max_align_t} does not have the expected alignment on some platforms: NetBSD 8.0/x86, AIX 7.2 with xlc in 64-bit mode. @item Some old platforms fail to provide @code{wchar_t}. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @item Some platforms provide a @code{NULL} macro whose value does not have the size of a pointer: AIX 7.2 with xlc in 64-bit mode. @item When this header file is provided by TinyCC 0.9.27 on glibc or macOS systems, it does not fulfil the expectations of other system header files. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some platforms provide an @code{offsetof} macro that cannot be used in arbitrary expressions: Solaris 11.4 This problem can be worked around by parenthesizing the @code{offsetof} expression in the unlikely case you use it with @code{sizeof} or @samp{[]}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stdint.texi�����������������������������������������������0000664�0000000�0000000�00000005735�14110572173�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdint.h @section @file{stdint.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html} Gnulib module: stdint Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 3.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, MSVC 14. @item This header file is very incomplete on some platforms. @item The values of @code{SIG_ATOMIC_MIN} and @code{SIG_ATOMIC_MAX} are incorrect on some platforms: FreeBSD 6.2/ia64, FreeBSD 13.0/arm64. @item The value of @code{WINT_MAX} is incorrect on some platforms: mingw. @item The values of @code{INT8_MAX}, @code{UINT8_MAX} etc. are not usable in preprocessor expressions on some platforms: HP-UX 11.23. @item The values of @code{INTPTR_MAX} and @code{UINTPTR_MAX}, although correctly defined in @code{<stdint.h>}, are replaced by empty values when @code{<limits.h>} or @code{<inttypes.h>} gets included later on some platforms: Solaris 9 with GCC 4.5 or newer. @item The macros @code{WCHAR_MIN} and @code{WCHAR_MAX} are not defined in @code{<stdint.h>} (only in @code{<wchar.h>}) on some platforms: Dragonfly. @item On some hosts that predate C++11, when using C++ one must define @code{__STDC_CONSTANT_MACROS} to make visible the definitions of constant macros such as @code{INTMAX_C}, and one must define @code{__STDC_LIMIT_MACROS} to make visible the definitions of limit macros such as @code{INTMAX_MAX}. @item The macro @code{SIZE_MAX} has the wrong type, albeit with the correct value: 32-bit glibc 2.24 (on s390 architecture), Mac OS X 10.7. @item Macros like @code{INTMAX_WIDTH} are not defined on some platforms: glibc 2.24, NetBSD 9.0, many others. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{@{uint,int@}_fast@{8,16,32,64@}_t} may not correspond to the fastest types available on the system. Other @code{<stdint.h>} substitutes may define these types differently, so public header files should avoid these types. @item Macros are used instead of typedefs. @item Some C preprocessors mishandle constants that do not fit in @code{long int}. For example, as of 2007, Sun C mishandles @code{#if LLONG_MIN < 0} on a platform with 32-bit @code{long int} and 64-bit @code{long long int}. Some older preprocessors mishandle constants ending in @code{LL}. To work around these problems, compute the value of expressions like @code{LONG_MAX < LLONG_MAX} at @code{configure}-time rather than at @code{#if}-time. @end itemize The @code{stdint} module uses @code{#include_next}. If you wish to install the generated stdint.h file under another name, typically in order to be able to use some of the types defined by stdint.h in your public header file, you could use the following Makefile.am-snippet: @example BUILT_SOURCES += idn-int.h DISTCLEANFILES += idn-int.h nodist_include_HEADERS += idn-int.h idn-int.h: if test -n "$(STDINT_H)"; then \ sed -e s/include_next/include/ gl/stdint.h > idn-int.h; \ else \ echo '#include <stdint.h>' > idn-int.h; \ fi @end example �����������������������������������gnulib-20210822~d383792/doc/posix-headers/stdio.texi������������������������������������������������0000664�0000000�0000000�00000001315�14110572173�0021634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdio.h @section @file{stdio.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdio.h.html} Gnulib module: stdio Portability problems fixed by Gnulib: @itemize @item The type @code{off_t} is missing on some platforms: glibc 2.8, eglibc 2.11.2 and others. @item The type @code{ssize_t} is missing on some platforms: glibc 2.8, Mac OS X 10.5, Solaris 10, MSVC 14, and others. @item The type @code{va_list} is missing on some platforms: glibc 2.8, OpenBSD 4.0, Solaris 11.4, and others. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stdlib.texi�����������������������������������������������0000664�0000000�0000000�00000001741�14110572173�0021776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdlib.h @section @file{stdlib.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdlib.h.html} Gnulib module: stdlib, system-posix Portability problems fixed by the Gnulib module @code{stdlib}: @itemize @item The macros @code{EXIT_SUCCESS} and @code{EXIT_FAILURE} are not defined on some platforms. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems fixed by the Gnulib module @code{system-posix}: @itemize @item The macros @code{WIFSIGNALED}, @code{WIFEXITED}, @code{WIFSTOPPED}, @code{WTERMSIG}, @code{WEXITSTATUS}, @code{WNOHANG}, @code{WUNTRACED}, @code{WSTOPSIG} are not defined in this header file (only in @code{<sys/wait.h>}) on some platforms: MirBSD 10. @end itemize Portability problems not fixed by Gnulib: @itemize @item System status macros such as @code{WEXITSTATUS} require an lvalue argument on some platforms. macOS 11.1. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-headers/stdnoreturn.texi������������������������������������������0000664�0000000�0000000�00000003505�14110572173�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdnoreturn.h @section @file{stdnoreturn.h} POSIX specification:@* Not in POSIX yet, but we expect it will be. ISO C11 (latest free draft @url{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf}) sections 7.23. Gnulib module: stdnoreturn Portability problems fixed by Gnulib: @itemize @item This header file is missing on many platforms: FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.7, Minix 3.3.0, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9.0, mingw, MSVC 14, Android 9.0. @item This file conflicts with some system header files, such as @code{<stdlib.h>} and @code{<process.h>}, on some platforms: MSVC/clang. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{<stdnoreturn.h>} should be #included before @samp{_Noreturn} is used. @item You cannot assume that @code{_Noreturn} is a reserved word; it might be a macro. @item When the macro @code{lint} is defined, standard headers define @code{_Noreturn} (and therefore @code{noreturn}) to be a macro that expands to the empty token sequence on some platforms: Cygwin 2.5.1, FreeBSD 10.3. @item On Cygwin 1.7.30 and MSVC 14, @code{noreturn} expands to the empty token sequence, to avoid problems with standard headers that use @code{noreturn} in combination with @code{__attribute__} or @code{__declspec}. Although the resulting code operates correctly, the compiler is not informed whether @code{noreturn} functions do not return, so it may generate incorrect warnings at compile-time, or code that is slightly less optimized. This problem does not occur with @code{_Noreturn}. @item Circa 2012 bleeding-edge GCC with @code{-Werror=old-style-declaration} requires @code{_Noreturn} or @code{noreturn} before the returned type in a declaration, and therefore rejects valid but unusually-worded declarations such as @code{void _Noreturn foo (void);}. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/string.texi�����������������������������������������������0000664�0000000�0000000�00000000615�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node string.h @section @file{string.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/string.h.html} Gnulib module: string Portability problems fixed by Gnulib: @itemize @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/strings.texi����������������������������������������������0000664�0000000�0000000�00000001043�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strings.h @section @file{strings.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/strings.h.html} Gnulib module: strings Portability problems fixed by Gnulib: @itemize @item This header file is not self-contained on some platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 14. @item This header file defines symbols, such as @samp{index}, often used for variables, making debugging harder. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/stropts.texi����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stropts.h @section @file{stropts.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stropts.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_ipc.texi����������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/ipc.h @section @file{sys/ipc.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_ipc.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_mman.texi���������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/mman.h @section @file{sys/mman.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_mman.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_msg.texi����������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/msg.h @section @file{sys/msg.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_msg.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Minix 3.1.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_resource.texi�����������������������������������������0000664�0000000�0000000�00000001510�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/resource.h @section @file{sys/resource.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_resource.h.html} Gnulib module: sys_resource Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item On some platforms, this header file requires that <sys/types.h> and <sys/time.h> already be included: FreeBSD 5.0. @item On some platforms, this header file does not define the @code{RUSAGE_SELF} and @code{RUSAGE_CHILDREN} constants: OpenVMS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms, this header does not define some or all of the symbolic constants required by POSIX@. For example, OpenVMS and Android do not define @code{RLIM_SAVED_CUR} or @code{RLIM_SAVED_MAX}. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_select.texi�������������������������������������������0000664�0000000�0000000�00000001247�14110572173�0022673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/select.h @section @file{sys/select.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_select.h.html} Gnulib module: sys_select Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: HP-UX 11.11, NonStop Kernel, mingw, MSVC 14. @item This header file is not self-contained on some platforms: it requires @code{<sys/types.h>} to be included first. @item This header file is not self-contained---it requires @code{<string.h>} before @code{FD_ZERO} can be used---on some platforms: AIX 7.1, Solaris 11.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_sem.texi����������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/sem.h @section @file{sys/sem.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_sem.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_shm.texi����������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0022177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/shm.h @section @file{sys/shm.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_shm.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_socket.texi�������������������������������������������0000664�0000000�0000000�00000002657�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/socket.h @section @file{sys/socket.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html} Gnulib module: sys_socket Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file is not self-contained on some platforms: it requires @code{<sys/types.h>} to be included first. @item This header file does not define the type @code{socklen_t} on some platforms: IRIX 6.5. @item This header file does not define the type @code{struct iovec} on some platforms: OpenBSD 4.4. @item This header file is lacking the @code{SHUT_RD}, @code{SHUT_WR}, @code{SHUT_RDWR} macros on some platforms, despite having the @code{shutdown} functions: emx+gcc. @item The @code{struct sockaddr_storage} type does not have a member @code{ss_family} on some platforms: AIX 7.1. @item The @code{CMSG_SPACE} and @code{CMSG_LEN} macros are not provided on some platforms: OpenVMS. @item This header file does not define the @code{SO_REUSEPORT} macro on some platforms: Minix 3.1.8, Solaris 10, Cygwin, mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file does not declare the @code{msg_control} and @code{msg_controllen} members of @code{struct msghdr} on some platforms. This can be detected by the absence of the @code{CMSG_FIRSTHDR} macro: gnulib replacement header, old BSD @end itemize ���������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_stat.texi���������������������������������������������0000664�0000000�0000000�00000005654�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/stat.h @section @file{sys/stat.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html} Gnulib module: sys_stat Portability problems fixed by Gnulib module @code{sys_stat}: @itemize @item The type @code{mode_t} is not defined on some platforms: MSVC 14. @item Some macros, such as @code{S_IFMT} or @code{S_IFIFO}, are missing on some platforms. @item The macros @code{S_ISBLK}, @code{S_ISCHR}, @code{S_ISDIR}, @code{S_ISFIFO}, @code{S_ISLNK}, @code{S_ISREG}, @code{S_ISSOCK} are broken on some platforms. @item Some platforms define macros, such as @code{S_ISDOOR}, that are not defined on other platforms. @item The functions @code{lstat} and @code{mkdir} are not declared on some platforms: mingw, MSVC 14. @item The macros @code{UTIME_NOW} and @code{UTIME_OMIT} are missing on some platforms. @item On some platforms, @code{struct stat} does not include @code{st_atim}, @code{st_mtim}, or @code{st_ctim} members. Use the gnulib module @samp{stat-time} for accessors to portably get at subsecond resolution. @end itemize Portability problems fixed by Gnulib module @code{sys_stat}, together with module @code{windows-stat-inodes}: @itemize @item On Windows platforms (excluding Cygwin), @code{st_ino} is always 0. @end itemize Portability problems not fixed by Gnulib: @itemize @item @xref{time.h}, for general portability problems with the @code{time_t} components of @code{struct stat}. @item The macro @code{S_IFBLK} is missing on some platforms: MSVC 14. @item On OpenVMS, @code{st_ino} is an array of three @code{ino_t} values, not a single value. @item To partially work around the previous two problems, you can test for nonzero @code{st_ino} and use the Gnulib @code{same-inode} module to compare nonzero values. For example, @code{SAME_INODE (a, b)} is true if the @code{struct stat} values @code{a} and @code{b} are known to represent the same file, @code{(a.st_ino && !SAME_INODE (a, b))} is true if they are known to represent different files, and @code{!a.st_ino} is true if it is not known whether they represent different files. @item On some platforms, two different files may have the same @code{st_dev} and @code{st_ino} values, even when @code{st_ino} is nonzero: @itemize @item GNU/Linux NFS servers that export all local file systems as a single NFS file system, if a local @code{st_dev} exceeds 255, or if a local @code{st_ino} exceeds 16777215. @item Network Appliance NFS servers in snapshot directories; see Network Appliance bug #195. @item ClearCase MVFS; see bug id ATRia04618. @end itemize One partial workaround is to compare other file metadata such as @code{st_mode} and @code{st_mtime} to detect this bug, but this approach does not work on files whose metadata are being changed by other programs. @item On some file systems, @code{st_size} contains bogus information for symlinks; use the Gnulib module @code{areadlink-with-size} for a better way to get symlink contents. @end itemize ������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_statvfs.texi������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0023077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/statvfs.h @section @file{sys/statvfs.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_statvfs.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 3.8, mingw, MSVC 14. @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_time.texi���������������������������������������������0000664�0000000�0000000�00000001553�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/time.h @section @file{sys/time.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_time.h.html} Gnulib module: sys_time Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 14. @item @samp{struct timeval} is not defined on some platforms. @item @samp{struct timeval} is defined with a @code{tv_sec} type that is narrower than @code{time_t} on some native Windows platforms: mingw64 in 64-bit mode, mingw64 in 32-bit mode when @code{__MINGW_USE_VC2005_COMPAT} is defined, MSVC 14 in 64-bit mode, MSVC 14 in 32-bit mode when @code{_USE_32BIT_TIME_T} is not defined. @end itemize Portability problems not fixed by Gnulib: @itemize @item @samp{struct timeval} is defined with a @code{tv_sec} type that is wider than @code{time_t}: OpenBSD 5.1 in 64-bit mode. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_timeb.texi��������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0022520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/timeb.h @section @file{sys/timeb.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/timeb.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 6.7, Android 9.0. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_times.texi��������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/times.h @section @file{sys/times.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_times.h.html} Gnulib module: sys_times Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_types.texi��������������������������������������������0000664�0000000�0000000�00000002210�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/types.h @section @file{sys/types.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html} Gnulib module: sys_types Portability problems fixed by Gnulib: @itemize @item The type @code{pid_t} is not defined on some platforms: MSVC 14. @item The type @code{size_t} is not defined in this file on some platforms: MSVC 14. @item The type @code{ssize_t} is not defined on some platforms: MSVC 14. @item The type @code{mode_t} is not defined on some platforms: MSVC 14. @item Some systems leak definitions of @code{major}, @code{minor}, and @code{makedev} through this header; however, when @file{sys/sysmacros.h} exists, that file should also be included to avoid deprecation warnings from the versions in this header: glibc 2.25. @end itemize Portability problems not fixed by Gnulib: @itemize @item On some platforms the types @code{blksize_t} and @code{suseconds_t} are signed integer types that are wider than @code{long}: glibc x32 @end itemize This module, together with the module @code{largefile}, also defines the type @code{off_t} to a 64-bit integer type on some platforms: mingw, MSVC 14. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_uio.texi����������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/uio.h @section @file{sys/uio.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_uio.h.html} Gnulib module: sys_uio Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file is not self-contained (it requires @code{<sys/types.h>} to be included first) on some platforms: OpenBSD 4.4. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������gnulib-20210822~d383792/doc/posix-headers/sys_un.texi�����������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0022032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/un.h @section @file{sys/un.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_un.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header requires <code>sys/socket.h</code> to be included first on some platforms: Cygwin 1.7.18. @end itemize �����������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_utsname.texi������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/utsname.h @section @file{sys/utsname.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_utsname.h.html} Gnulib module: sys_utsname Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header file is not self-contained on some platforms: Minix 3.1.8. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/sys_wait.texi���������������������������������������������0000664�0000000�0000000�00000000740�14110572173�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/wait.h @section @file{sys/wait.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_wait.h.html} Gnulib module: sys_wait Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @item System status macros such as @code{WEXITSTATUS} require an lvalue argument on some platforms. macOS 11.1. @end itemize ��������������������������������gnulib-20210822~d383792/doc/posix-headers/syslog.texi�����������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node syslog.h @section @file{syslog.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/syslog.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/tar.texi��������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tar.h @section @file{tar.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/tar.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Cygwin 1.5.x, mingw, MSVC 14. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/termios.texi����������������������������������������������0000664�0000000�0000000�00000001173�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node termios.h @section @file{termios.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/termios.h.html} Gnulib module: termios Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 14. @item This header does not declare @code{pid_t} on all platforms: glibc on some architectures, FreeBSD 6.4, OpenBSD 4.9, Cygwin 1.7.11. @end itemize Portability problems not fixed by Gnulib: @itemize @item The types @code{struct termios}, @code{cc_t}, @code{speed_t}, @code{tcflag_t} are not defined on some platforms: mingw, MSVC 14. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/tgmath.texi�����������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0022000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgmath.h @section @file{tgmath.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/tgmath.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: Mac OS X 10.5, FreeBSD 5.2.1, NetBSD 9.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin 1.7.9, mingw, MSVC 14, Android 9.0. @end itemize �������������������������������gnulib-20210822~d383792/doc/posix-headers/threads.texi����������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node threads.h @section @file{threads.h} Defines the multithreading facility of ISO C11. Gnulib module: threads-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on many platforms: glibc 2.27, macOS 11.1, FreeBSD 9.3, NetBSD 8.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.2.x, mingw, MSVC 14, Android 9.0. @item This header file defines @code{thrd_start_t} incorrectly on some platforms: AIX 7.2. @item This header file does not define @code{TSS_DTOR_ITERATIONS} on some platforms: AIX 7.2. @end itemize Portability problems not fixed by Gnulib: @itemize @item There is no way to define a working @code{thread_local} macro on some platforms: @itemize @item Mac OS X 10.5, @item OpenBSD 6.5, @item AIX 7.1 with gcc (but it works with @samp{xlc -qthreaded -qtls}), @item HP-UX 11.31 with cc (but it works with gcc), @item IRIX 6.5, @item Android 4.3. @end itemize @end itemize ������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/time.texi�������������������������������������������������0000664�0000000�0000000�00000003200�14110572173�0021443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node time.h @section @file{time.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html} Gnulib module: time Portability problems fixed by Gnulib: @itemize @item @samp{struct timespec} is not defined on some platforms. @item The macro @code{TIME_UTC} is not defined on many platforms: glibc 2.15, macOS 10.13, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin 2.9, mingw, MSVC 14, Android 9.0. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0. @end itemize Portability problems fixed by the Gnulib module @code{year2038}: @itemize @item On some platforms where @code{time_t} defaults to 32-bit but can be changed to 64-bit, functions like @code{stat} can fail with @code{errno == EOVERFLOW} when a 32-bit timestamp is out of range, such as with a file timestamp in the far future or past: glibc 2.34. @end itemize Portability problems not fixed by Gnulib: @itemize @item On platforms where @code{time_t} is always 32-bit, functions like @code{stat} can fail with @code{errno == EOVERFLOW} when a timestamp is out of range, such as with a file timestamp in the far future or past; on other such platforms, the functions silently return the low-order 32 bits of the correct timestamp. These platforms will be obsolete when 32-bit @code{time_t} rolls around, which will occur in 2038 for the typical case when @code{time_t} is signed. @item On some platforms the @code{tv_nsec} member of @code{struct timespec} is not of type @code{long}, but is of type @code{long long} instead: glibc x32 @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/trace.texi������������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node trace.h @section @file{trace.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/trace.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: macOS 11.1, FreeBSD 13.0, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������gnulib-20210822~d383792/doc/posix-headers/uchar.texi������������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node uchar.h @section @file{uchar.h} Defines the types @code{char16_t}, @code{char32_t} and declares the functions @code{mbrtoc16}, @code{c16rtomb}, @code{mbrtoc32}, @code{c32rtomb}. Gnulib module: uchar Portability problems fixed by Gnulib: @itemize @item This header file is missing on many non-glibc platforms: glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/ucontext.texi���������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ucontext.h @section @file{ucontext.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/009695399/basedefs/ucontext.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 6.7, Cygwin 1.7.35, mingw, MSVC 14. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/ulimit.texi�����������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ulimit.h @section @file{ulimit.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ulimit.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin, mingw, MSVC 14, Android 9.0. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/unistd.texi�����������������������������������������������0000664�0000000�0000000�00000001315�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unistd.h @section @file{unistd.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html} Gnulib module: unistd Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 14. @item The SEEK_* macros are not defined in this file on some platforms: mingw. @item The *_FILENO macros are not defined in this file on some platforms: OS/2 EMX, mingw. @item The @code{_exit} function is not declared in this file on some platforms: mingw. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/utime.texi������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utime.h @section @file{utime.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/utime.h.html} Gnulib module: utime-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 14. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/utmpx.texi������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0021673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utmpx.h @section @file{utmpx.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/utmpx.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: FreeBSD 6.0, OpenBSD 6.7, Minix 3.1.8, mingw, MSVC 14, Android 9.0. @end itemize ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/wchar.texi������������������������������������������������0000664�0000000�0000000�00000001446�14110572173�0021623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wchar.h @section @file{wchar.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html} Gnulib module: wchar Portability problems fixed by Gnulib: @itemize @item This header file cannot be included on some platforms: Linux uClibc built without wide character support. @item The type @code{wint_t} is incorrect on some platforms: mingw, MSVC 14. @item Some platforms provide a @code{NULL} macro that cannot be used in arbitrary expressions: NetBSD 5.0 @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file leads to link errors and endless recursions or endless loops on some platforms: glibc version 2.5 or older, together with gcc version 4.3 or newer and the option @samp{-std=c99} or @samp{-std=gnu99}. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/wctype.texi�����������������������������������������������0000664�0000000�0000000�00000001140�14110572173�0022021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype.h @section @file{wctype.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: HP-UX 11.00. @item The type @code{wint_t} is incorrect on some platforms: mingw, MSVC 14. @item The functions @code{isw*} are missing on some platforms: FreeBSD 4.11. @item The function @code{iswblank} is declared but not defined on some platforms: IRIX 6.5.30. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/posix-headers/wordexp.texi����������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordexp.h @section @file{wordexp.h} POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wordexp.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: OpenBSD 6.7, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 14, Android 9.0. @end itemize ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/progname.texi�����������������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node progname and getprogname @section progname and getprogname @c Copyright (C) 2007, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. Gnulib has two modules for retrieving the name of the currently executing program: @code{progname} and @code{getprogname}. @findex progname @vindex program_name The @code{progname} module defines a variable @code{program_name}. It contains the name of the currently executing program, on all platforms. But it cannot be used implicitly: It requires that every @code{main} function be modified to invoke @code{set_program_name (argv[0])} as one of its first actions. @findex getprogname The @code{getprogname} module defines a function @code{getprogname()}. It returns the name of the currently executing program, on most platforms. The advantage of this module is that it can be used without prior initializations. But it has limitations: In some rare situations, it cannot determine the name; then it returns @code{"?"} instead. And on some platforms, it returns a truncated program name. @findex error The @code{error} function uses the @code{getprogname} module. ��������������������������������������������������������������gnulib-20210822~d383792/doc/quote.texi��������������������������������������������������������������0000664�0000000�0000000�00000002641�14110572173�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Quoting @section Quoting @c Copyright (C) 2005, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @cindex Quoting @findex quote @findex quotearg Gnulib provides @samp{quote} and @samp{quotearg} modules to help with quoting text, such as file names, in messages to the user. Here's an example of using @samp{quote}: @example #include <quote.h> ... error (0, errno, _("cannot change owner of %s"), quote (fname)); @end example This differs from @example error (0, errno, _("cannot change owner of '%s'"), fname); @end example @noindent in that @code{quote} escapes unusual characters in @code{fname}, e.g., @samp{'} and control characters like @samp{\n}. @findex quote_n However, a caveat: @code{quote} reuses the storage that it returns. Hence if you need more than one thing quoted at the same time, you need to use @code{quote_n}. @findex quotearg_alloc Also, the @code{quote} module is not suited for multithreaded applications. In that case, you have to use @code{quotearg_alloc}, defined in the @samp{quotearg} module, which is decidedly less convenient. �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/regex.texi��������������������������������������������������������������0000664�0000000�0000000�00000232763�14110572173�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Overview @chapter Overview A @dfn{regular expression} (or @dfn{regexp}, or @dfn{pattern}) is a text string that describes some (mathematical) set of strings. A regexp @var{r} @dfn{matches} a string @var{s} if @var{s} is in the set of strings described by @var{r}. Using the Regex library, you can: @itemize @bullet @item see if a string matches a specified pattern as a whole, and @item search within a string for a substring matching a specified pattern. @end itemize Some regular expressions match only one string, i.e., the set they describe has only one member. For example, the regular expression @samp{foo} matches the string @samp{foo} and no others. Other regular expressions match more than one string, i.e., the set they describe has more than one member. For example, the regular expression @samp{f*} matches the set of strings made up of any number (including zero) of @samp{f}s. As you can see, some characters in regular expressions match themselves (such as @samp{f}) and some don't (such as @samp{*}); the ones that don't match themselves instead let you specify patterns that describe many different strings. To either match or search for a regular expression with the Regex library functions, you must first compile it with a Regex pattern compiling function. A @dfn{compiled pattern} is a regular expression converted to the internal format used by the library functions. Once you've compiled a pattern, you can use it for matching or searching any number of times. The Regex library is used by including @file{regex.h}. @pindex regex.h Regex provides three groups of functions with which you can operate on regular expressions. One group---the GNU group---is more powerful but not completely compatible with the other two, namely the POSIX and Berkeley Unix groups; its interface was designed specifically for GNU. We wrote this chapter with programmers in mind, not users of programs---such as Emacs---that use Regex. We describe the Regex library in its entirety, not how to write regular expressions that a particular program understands. @node Regular Expression Syntax @chapter Regular Expression Syntax @cindex regular expressions, syntax of @cindex syntax of regular expressions @dfn{Characters} are things you can type. @dfn{Operators} are things in a regular expression that match one or more characters. You compose regular expressions from operators, which in turn you specify using one or more characters. Most characters represent what we call the match-self operator, i.e., they match themselves; we call these characters @dfn{ordinary}. Other characters represent either all or parts of fancier operators; e.g., @samp{.} represents what we call the match-any-character operator (which, no surprise, matches (almost) any character); we call these characters @dfn{special}. Two different things determine what characters represent what operators: @enumerate @item the regular expression syntax your program has told the Regex library to recognize, and @item the context of the character in the regular expression. @end enumerate In the following sections, we describe these things in more detail. @menu * Syntax Bits:: * Predefined Syntaxes:: * Collating Elements vs. Characters:: * The Backslash Character:: @end menu @node Syntax Bits @section Syntax Bits @cindex syntax bits In any particular syntax for regular expressions, some characters are always special, others are sometimes special, and others are never special. The particular syntax that Regex recognizes for a given regular expression depends on the current syntax (as set by @code{re_set_syntax}) when the pattern buffer of that regular expression was compiled. You get a pattern buffer by compiling a regular expression. @xref{GNU Pattern Buffers}, for more information on pattern buffers. @xref{GNU Regular Expression Compiling}, and @ref{BSD Regular Expression Compiling}, for more information on compiling. Regex considers the current syntax to be a collection of bits; we refer to these bits as @dfn{syntax bits}. In most cases, they affect what characters represent what operators. We describe the meanings of the operators to which we refer in @ref{Common Operators}, @ref{GNU Operators}, and @ref{GNU Emacs Operators}. For reference, here is the complete list of syntax bits, in alphabetical order: @table @code @cnindex RE_BACKSLASH_ESCAPE_IN_LIST @item RE_BACKSLASH_ESCAPE_IN_LISTS If this bit is set, then @samp{\} inside a list (@pxref{List Operators} quotes (makes ordinary, if it's special) the following character; if this bit isn't set, then @samp{\} is an ordinary character inside lists. (@xref{The Backslash Character}, for what @samp{\} does outside of lists.) @cnindex RE_BK_PLUS_QM @item RE_BK_PLUS_QM If this bit is set, then @samp{\+} represents the match-one-or-more operator and @samp{\?} represents the match-zero-or-more operator; if this bit isn't set, then @samp{+} represents the match-one-or-more operator and @samp{?} represents the match-zero-or-one operator. This bit is irrelevant if @code{RE_LIMITED_OPS} is set. @cnindex RE_CHAR_CLASSES @item RE_CHAR_CLASSES If this bit is set, then you can use character classes in lists; if this bit isn't set, then you can't. @cnindex RE_CONTEXT_INDEP_ANCHORS @item RE_CONTEXT_INDEP_ANCHORS If this bit is set, then @samp{^} and @samp{$} are special anywhere outside a list; if this bit isn't set, then these characters are special only in certain contexts. @xref{Match-beginning-of-line Operator}, and @ref{Match-end-of-line Operator}. @cnindex RE_CONTEXT_INDEP_OPS @item RE_CONTEXT_INDEP_OPS If this bit is set, then certain characters are special anywhere outside a list; if this bit isn't set, then those characters are special only in some contexts and are ordinary elsewhere. Specifically, if this bit isn't set then @samp{*}, and (if the syntax bit @code{RE_LIMITED_OPS} isn't set) @samp{+} and @samp{?} (or @samp{\+} and @samp{\?}, depending on the syntax bit @code{RE_BK_PLUS_QM}) represent repetition operators only if they're not first in a regular expression or just after an open-group or alternation operator. The same holds for @samp{@{} (or @samp{\@{}, depending on the syntax bit @code{RE_NO_BK_BRACES}) if it is the beginning of a valid interval and the syntax bit @code{RE_INTERVALS} is set. @cnindex RE_CONTEXT_INVALID_DUP @item RE_CONTEXT_INVALID_DUP If this bit is set, then an open-interval operator cannot occur at the start of a regular expression, or immediately after an alternation, open-group or close-interval operator. @cnindex RE_CONTEXT_INVALID_OPS @item RE_CONTEXT_INVALID_OPS If this bit is set, then repetition and alternation operators can't be in certain positions within a regular expression. Specifically, the regular expression is invalid if it has: @itemize @bullet @item a repetition operator first in the regular expression or just after a match-beginning-of-line, open-group, or alternation operator; or @item an alternation operator first or last in the regular expression, just before a match-end-of-line operator, or just after an alternation or open-group operator. @end itemize If this bit isn't set, then you can put the characters representing the repetition and alternation characters anywhere in a regular expression. Whether or not they will in fact be operators in certain positions depends on other syntax bits. @cnindex RE_DEBUG @item RE_DEBUG If this bit is set, and the regex library was compiled with @code{-DDEBUG}, then internal debugging is turned on; if unset, then it is turned off. @cnindex RE_DOT_NEWLINE @item RE_DOT_NEWLINE If this bit is set, then the match-any-character operator matches a newline; if this bit isn't set, then it doesn't. @cnindex RE_DOT_NOT_NULL @item RE_DOT_NOT_NULL If this bit is set, then the match-any-character operator doesn't match a null character; if this bit isn't set, then it does. @cnindex RE_HAT_LISTS_NOT_NEWLINE @item RE_HAT_LISTS_NOT_NEWLINE If this bit is set, nonmatching lists @samp{[^...]} do not match newline; if not set, they do. @cnindex RE_ICASE @item RE_ICASE If this bit is set, then ignore case when matching; otherwise, case is significant. @cnindex RE_INTERVALS @item RE_INTERVALS If this bit is set, then Regex recognizes interval operators; if this bit isn't set, then it doesn't. @cnindex RE_INVALID_INTERVAL_ORD @item RE_INVALID_INTERVAL_ORD If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the extended regular expression @samp{a@{1} is treated as @samp{a\@{1}. @cnindex RE_LIMITED_OPS @item RE_LIMITED_OPS If this bit is set, then Regex doesn't recognize the match-one-or-more, match-zero-or-one or alternation operators; if this bit isn't set, then it does. @cnindex RE_NEWLINE_ALT @item RE_NEWLINE_ALT If this bit is set, then newline represents the alternation operator; if this bit isn't set, then newline is ordinary. @cnindex RE_NO_BK_BRACES @item RE_NO_BK_BRACES If this bit is set, then @samp{@{} represents the open-interval operator and @samp{@}} represents the close-interval operator; if this bit isn't set, then @samp{\@{} represents the open-interval operator and @samp{\@}} represents the close-interval operator. This bit is relevant only if @code{RE_INTERVALS} is set. @cnindex RE_NO_BK_PARENS @item RE_NO_BK_PARENS If this bit is set, then @samp{(} represents the open-group operator and @samp{)} represents the close-group operator; if this bit isn't set, then @samp{\(} represents the open-group operator and @samp{\)} represents the close-group operator. @cnindex RE_NO_BK_REFS @item RE_NO_BK_REFS If this bit is set, then Regex doesn't recognize @samp{\}@var{digit} as the back-reference operator; if this bit isn't set, then it does. @cnindex RE_NO_BK_VBAR @item RE_NO_BK_VBAR If this bit is set, then @samp{|} represents the alternation operator; if this bit isn't set, then @samp{\|} represents the alternation operator. This bit is irrelevant if @code{RE_LIMITED_OPS} is set. @cnindex RE_NO_EMPTY_RANGES @item RE_NO_EMPTY_RANGES If this bit is set, then a regular expression with a range whose ending point collates lower than its starting point is invalid; if this bit isn't set, then Regex considers such a range to be empty. @cnindex RE_NO_GNU_OPS @item RE_NO_GNU_OPS If this bit is set, GNU regex operators are not recognized; otherwise, they are. @cnindex RE_NO_POSIX_BACKTRACKING @item RE_NO_POSIX_BACKTRACKING If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. This means that a match may not be the leftmost longest; @pxref{What Gets Matched?} for what this means. @cnindex RE_NO_SUB @item RE_NO_SUB If this bit is set, then @code{no_sub} will be set to one during @code{re_compile_pattern}. This causes matching and searching routines not to record substring match information. @cnindex RE_UNMATCHED_RIGHT_PAREN_ORD @item RE_UNMATCHED_RIGHT_PAREN_ORD If this bit is set and the regular expression has no matching open-group operator, then Regex considers what would otherwise be a close-group operator (based on how @code{RE_NO_BK_PARENS} is set) to match @samp{)}. @end table @node Predefined Syntaxes @section Predefined Syntaxes If you're programming with Regex, you can set a pattern buffer's (@pxref{GNU Pattern Buffers}) syntax either to an arbitrary combination of syntax bits (@pxref{Syntax Bits}) or else to the configurations defined by Regex. These configurations define the syntaxes used by certain programs---GNU Emacs, @cindex Emacs POSIX Awk, @cindex POSIX Awk traditional Awk, @cindex Awk Grep, @cindex Grep @cindex Egrep Egrep---in addition to syntaxes for POSIX basic and extended regular expressions. The predefined syntaxes---taken directly from @file{regex.h}---are: @smallexample #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_UNMATCHED_RIGHT_PAREN_ORD) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) @end smallexample @node Collating Elements vs. Characters @section Collating Elements vs.@: Characters POSIX generalizes the notion of a character to that of a collating element. It defines a @dfn{collating element} to be ``a sequence of one or more bytes defined in the current collating sequence as a unit of collation.'' This generalizes the notion of a character in two ways. First, a single character can map into two or more collating elements. For example, the German @tex ``\ss'' @end tex @ifinfo ``es-zet'' @end ifinfo collates as the collating element @samp{s} followed by another collating element @samp{s}. Second, two or more characters can map into one collating element. For example, the Spanish @samp{ll} collates after @samp{l} and before @samp{m}. Since POSIX's ``collating element'' preserves the essential idea of a ``character,'' we use the latter, more familiar, term in this document. @node The Backslash Character @section The Backslash Character @cindex \ The @samp{\} character has one of four different meanings, depending on the context in which you use it and what syntax bits are set (@pxref{Syntax Bits}). It can: 1) stand for itself, 2) quote the next character, 3) introduce an operator, or 4) do nothing. @enumerate @item It stands for itself inside a list (@pxref{List Operators}) if the syntax bit @code{RE_BACKSLASH_ESCAPE_IN_LISTS} is not set. For example, @samp{[\]} would match @samp{\}. @item It quotes (makes ordinary, if it's special) the next character when you use it either: @itemize @bullet @item outside a list,@footnote{Sometimes you don't have to explicitly quote special characters to make them ordinary. For instance, most characters lose any special meaning inside a list (@pxref{List Operators}). In addition, if the syntax bits @code{RE_CONTEXT_INVALID_OPS} and @code{RE_CONTEXT_INDEP_OPS} aren't set, then (for historical reasons) the matcher considers special characters ordinary if they are in contexts where the operations they represent make no sense; for example, then the match-zero-or-more operator (represented by @samp{*}) matches itself in the regular expression @samp{*foo} because there is no preceding expression on which it can operate. It is poor practice, however, to depend on this behavior; if you want a special character to be ordinary outside a list, it's better to always quote it, regardless.} or @item inside a list and the syntax bit @code{RE_BACKSLASH_ESCAPE_IN_LISTS} is set. @end itemize @item It introduces an operator when followed by certain ordinary characters---sometimes only when certain syntax bits are set. See the cases @code{RE_BK_PLUS_QM}, @code{RE_NO_BK_BRACES}, @code{RE_NO_BK_VAR}, @code{RE_NO_BK_PARENS}, @code{RE_NO_BK_REF} in @ref{Syntax Bits}. Also: @itemize @bullet @item @samp{\b} represents the match-word-boundary operator (@pxref{Match-word-boundary Operator}). @item @samp{\B} represents the match-within-word operator (@pxref{Match-within-word Operator}). @item @samp{\<} represents the match-beginning-of-word operator @* (@pxref{Match-beginning-of-word Operator}). @item @samp{\>} represents the match-end-of-word operator (@pxref{Match-end-of-word Operator}). @item @samp{\w} represents the match-word-constituent operator (@pxref{Match-word-constituent Operator}). @item @samp{\W} represents the match-non-word-constituent operator (@pxref{Match-non-word-constituent Operator}). @item @samp{\`} represents the match-beginning-of-buffer operator and @samp{\'} represents the match-end-of-buffer operator (@pxref{Buffer Operators}). @item If Regex was compiled with the C preprocessor symbol @code{emacs} defined, then @samp{\s@var{class}} represents the match-syntactic-class operator and @samp{\S@var{class}} represents the match-not-syntactic-class operator (@pxref{Syntactic Class Operators}). @end itemize @item In all other cases, Regex ignores @samp{\}. For example, @samp{\n} matches @samp{n}. @end enumerate @node Common Operators @chapter Common Operators You compose regular expressions from operators. In the following sections, we describe the regular expression operators specified by POSIX; GNU also uses these. Most operators have more than one representation as characters. @xref{Regular Expression Syntax}, for what characters represent what operators under what circumstances. For most operators that can be represented in two ways, one representation is a single character and the other is that character preceded by @samp{\}. For example, either @samp{(} or @samp{\(} represents the open-group operator. Which one does depends on the setting of a syntax bit, in this case @code{RE_NO_BK_PARENS}. Why is this so? Historical reasons dictate some of the varying representations, while POSIX dictates others. Finally, almost all characters lose any special meaning inside a list (@pxref{List Operators}). @menu * Match-self Operator:: Ordinary characters. * Match-any-character Operator:: . * Concatenation Operator:: Juxtaposition. * Repetition Operators:: * + ? @{@} * Alternation Operator:: | * List Operators:: [...] [^...] * Grouping Operators:: (...) * Back-reference Operator:: \digit * Anchoring Operators:: ^ $ @end menu @node Match-self Operator @section The Match-self Operator (@var{ordinary character}) This operator matches the character itself. All ordinary characters (@pxref{Regular Expression Syntax}) represent this operator. For example, @samp{f} is always an ordinary character, so the regular expression @samp{f} matches only the string @samp{f}. In particular, it does @emph{not} match the string @samp{ff}. @node Match-any-character Operator @section The Match-any-character Operator (@code{.}) @cindex @samp{.} This operator matches any single printing or nonprinting character except it won't match a: @table @asis @item newline if the syntax bit @code{RE_DOT_NEWLINE} isn't set. @item null if the syntax bit @code{RE_DOT_NOT_NULL} is set. @end table The @samp{.} (period) character represents this operator. For example, @samp{a.b} matches any three-character string beginning with @samp{a} and ending with @samp{b}. @node Concatenation Operator @section The Concatenation Operator This operator concatenates two regular expressions @var{a} and @var{b}. No character represents this operator; you simply put @var{b} after @var{a}. The result is a regular expression that will match a string if @var{a} matches its first part and @var{b} matches the rest. For example, @samp{xy} (two match-self operators) matches @samp{xy}. @node Repetition Operators @section Repetition Operators Repetition operators repeat the preceding regular expression a specified number of times. @menu * Match-zero-or-more Operator:: * * Match-one-or-more Operator:: + * Match-zero-or-one Operator:: ? * Interval Operators:: @{@} @end menu @node Match-zero-or-more Operator @subsection The Match-zero-or-more Operator (@code{*}) @cindex @samp{*} This operator repeats the smallest possible preceding regular expression as many times as necessary (including zero) to match the pattern. @samp{*} represents this operator. For example, @samp{o*} matches any string made up of zero or more @samp{o}s. Since this operator operates on the smallest preceding regular expression, @samp{fo*} has a repeating @samp{o}, not a repeating @samp{fo}. So, @samp{fo*} matches @samp{f}, @samp{fo}, @samp{foo}, and so on. Since the match-zero-or-more operator is a suffix operator, it may be useless as such when no regular expression precedes it. This is the case when it: @itemize @bullet @item is first in a regular expression, or @item follows a match-beginning-of-line, open-group, or alternation operator. @end itemize @noindent Three different things can happen in these cases: @enumerate @item If the syntax bit @code{RE_CONTEXT_INVALID_OPS} is set, then the regular expression is invalid. @item If @code{RE_CONTEXT_INVALID_OPS} isn't set, but @code{RE_CONTEXT_INDEP_OPS} is, then @samp{*} represents the match-zero-or-more operator (which then operates on the empty string). @item Otherwise, @samp{*} is ordinary. @end enumerate @cindex backtracking The matcher processes a match-zero-or-more operator by first matching as many repetitions of the smallest preceding regular expression as it can. Then it continues to match the rest of the pattern. If it can't match the rest of the pattern, it backtracks (as many times as necessary), each time discarding one of the matches until it can either match the entire pattern or be certain that it cannot get a match. For example, when matching @samp{ca*ar} against @samp{caaar}, the matcher first matches all three @samp{a}s of the string with the @samp{a*} of the regular expression. However, it cannot then match the final @samp{ar} of the regular expression against the final @samp{r} of the string. So it backtracks, discarding the match of the last @samp{a} in the string. It can then match the remaining @samp{ar}. @node Match-one-or-more Operator @subsection The Match-one-or-more Operator (@code{+} or @code{\+}) @cindex @samp{+} If the syntax bit @code{RE_LIMITED_OPS} is set, then Regex doesn't recognize this operator. Otherwise, if the syntax bit @code{RE_BK_PLUS_QM} isn't set, then @samp{+} represents this operator; if it is, then @samp{\+} does. This operator is similar to the match-zero-or-more operator except that it repeats the preceding regular expression at least once; @pxref{Match-zero-or-more Operator}, for what it operates on, how some syntax bits affect it, and how Regex backtracks to match it. For example, supposing that @samp{+} represents the match-one-or-more operator; then @samp{ca+r} matches, e.g., @samp{car} and @samp{caaaar}, but not @samp{cr}. @node Match-zero-or-one Operator @subsection The Match-zero-or-one Operator (@code{?} or @code{\?}) @cindex @samp{?} If the syntax bit @code{RE_LIMITED_OPS} is set, then Regex doesn't recognize this operator. Otherwise, if the syntax bit @code{RE_BK_PLUS_QM} isn't set, then @samp{?} represents this operator; if it is, then @samp{\?} does. This operator is similar to the match-zero-or-more operator except that it repeats the preceding regular expression once or not at all; @pxref{Match-zero-or-more Operator}, to see what it operates on, how some syntax bits affect it, and how Regex backtracks to match it. For example, supposing that @samp{?} represents the match-zero-or-one operator; then @samp{ca?r} matches both @samp{car} and @samp{cr}, but nothing else. @node Interval Operators @subsection Interval Operators (@code{@{} @dots{} @code{@}} or @code{\@{} @dots{} @code{\@}}) @cindex interval expression @cindex @samp{@{} @cindex @samp{@}} @cindex @samp{\@{} @cindex @samp{\@}} If the syntax bit @code{RE_INTERVALS} is set, then Regex recognizes @dfn{interval expressions}. They repeat the smallest possible preceding regular expression a specified number of times. If the syntax bit @code{RE_NO_BK_BRACES} is set, @samp{@{} represents the @dfn{open-interval operator} and @samp{@}} represents the @dfn{close-interval operator} ; otherwise, @samp{\@{} and @samp{\@}} do. Specifically, supposing that @samp{@{} and @samp{@}} represent the open-interval and close-interval operators; then: @table @code @item @{@var{count}@} matches exactly @var{count} occurrences of the preceding regular expression. @item @{@var{min},@} matches @var{min} or more occurrences of the preceding regular expression. @item @{@var{min}, @var{max}@} matches at least @var{min} but no more than @var{max} occurrences of the preceding regular expression. @end table The interval expression (but not necessarily the regular expression that contains it) is invalid if: @itemize @bullet @item @var{min} is greater than @var{max}, or @item any of @var{count}, @var{min}, or @var{max} are outside the range zero to @code{RE_DUP_MAX} (which symbol @file{regex.h} defines). @end itemize If the interval expression is invalid and the syntax bit @code{RE_NO_BK_BRACES} is set, then Regex considers all the characters in the would-be interval to be ordinary. If that bit isn't set, then the regular expression is invalid. If the interval expression is valid but there is no preceding regular expression on which to operate, then if the syntax bit @code{RE_CONTEXT_INVALID_OPS} is set, the regular expression is invalid. If that bit isn't set, then Regex considers all the characters---other than backslashes, which it ignores---in the would-be interval to be ordinary. @node Alternation Operator @section The Alternation Operator (@code{|} or @code{\|}) @kindex | @kindex \| @cindex alternation operator @cindex or operator If the syntax bit @code{RE_LIMITED_OPS} is set, then Regex doesn't recognize this operator. Otherwise, if the syntax bit @code{RE_NO_BK_VBAR} is set, then @samp{|} represents this operator; otherwise, @samp{\|} does. Alternatives match one of a choice of regular expressions: if you put the character(s) representing the alternation operator between any two regular expressions @var{a} and @var{b}, the result matches the union of the strings that @var{a} and @var{b} match. For example, supposing that @samp{|} is the alternation operator, then @samp{foo|bar|quux} would match any of @samp{foo}, @samp{bar} or @samp{quux}. The alternation operator operates on the @emph{largest} possible surrounding regular expressions. (Put another way, it has the lowest precedence of any regular expression operator.) Thus, the only way you can delimit its arguments is to use grouping. For example, if @samp{(} and @samp{)} are the open and close-group operators, then @samp{fo(o|b)ar} would match either @samp{fooar} or @samp{fobar}. (@samp{foo|bar} would match @samp{foo} or @samp{bar}.) @cindex backtracking The matcher usually tries all combinations of alternatives so as to match the longest possible string. For example, when matching @samp{(fooq|foo)*(qbarquux|bar)} against @samp{fooqbarquux}, it cannot take, say, the first (``depth-first'') combination it could match, since then it would be content to match just @samp{fooqbar}. Note that since the default behavior is to return the leftmost longest match, when more than one of a series of alternatives matches the actual match will be the longest matching alternative, not necessarily the first in the list. @node List Operators @section List Operators (@code{[} @dots{} @code{]} and @code{[^} @dots{} @code{]}) @cindex matching list @cindex @samp{[} @cindex @samp{]} @cindex @samp{^} @cindex @samp{-} @cindex @samp{\} @cindex @samp{[^} @cindex nonmatching list @cindex matching newline @cindex bracket expression @dfn{Lists}, also called @dfn{bracket expressions}, are a set of one or more items. An @dfn{item} is a character, a collating symbol, an equivalence class expression, a character class expression, or a range expression. The syntax bits affect which kinds of items you can put in a list. We explain the last four items in subsections below. Empty lists are invalid. A @dfn{matching list} matches a single character represented by one of the list items. You form a matching list by enclosing one or more items within an @dfn{open-matching-list operator} (represented by @samp{[}) and a @dfn{close-list operator} (represented by @samp{]}). For example, @samp{[ab]} matches either @samp{a} or @samp{b}. @samp{[ad]*} matches the empty string and any string composed of just @samp{a}s and @samp{d}s in any order. Regex considers invalid a regular expression with a @samp{[} but no matching @samp{]}. @dfn{Nonmatching lists} are similar to matching lists except that they match a single character @emph{not} represented by one of the list items. You use an @dfn{open-nonmatching-list operator} (represented by @samp{[^}@footnote{Regex therefore doesn't consider the @samp{^} to be the first character in the list. If you put a @samp{^} character first in (what you think is) a matching list, you'll turn it into a nonmatching list.}) instead of an open-matching-list operator to start a nonmatching list. For example, @samp{[^ab]} matches any character except @samp{a} or @samp{b}. If the syntax bit @code{RE_HAT_LISTS_NOT_NEWLINE} is set, then nonmatching lists do not match a newline. Most characters lose any special meaning inside a list. The special characters inside a list follow. @table @samp @item ] ends the list if it's not the first list item. So, if you want to make the @samp{]} character a list item, you must put it first. @item \ quotes the next character if the syntax bit @code{RE_BACKSLASH_ESCAPE_IN_LISTS} is set. @item [. represents the open-collating-symbol operator (@pxref{Collating Symbol Operators}). @item .] represents the close-collating-symbol operator. @item [= represents the open-equivalence-class operator (@pxref{Equivalence Class Operators}). @item =] represents the close-equivalence-class operator. @item [: represents the open-character-class operator (@pxref{Character Class Operators}) if the syntax bit @code{RE_CHAR_CLASSES} is set and what follows is a valid character class expression. @item :] represents the close-character-class operator if the syntax bit @code{RE_CHAR_CLASSES} is set and what precedes it is an open-character-class operator followed by a valid character class name. @item - represents the range operator (@pxref{Range Operator}) if it's not first or last in a list or the ending point of a range. @end table @noindent All other characters are ordinary. For example, @samp{[.*]} matches @samp{.} and @samp{*}. @menu * Collating Symbol Operators:: [.elem.] * Equivalence Class Operators:: [=class=] * Character Class Operators:: [:class:] * Range Operator:: start-end @end menu @node Collating Symbol Operators @subsection Collating Symbol Operators (@code{[.} @dots{} @code{.]}) Collating symbols can be represented inside lists. You form a @dfn{collating symbol} by putting a collating element between an @dfn{open-collating-symbol operator} and a @dfn{close-collating-symbol operator}. @samp{[.} represents the open-collating-symbol operator and @samp{.]} represents the close-collating-symbol operator. For example, if @samp{ll} is a collating element, then @samp{[[.ll.]]} would match @samp{ll}. @node Equivalence Class Operators @subsection Equivalence Class Operators (@code{[=} @dots{} @code{=]}) @cindex equivalence class expression in regex @cindex @samp{[=} in regex @cindex @samp{=]} in regex Regex recognizes equivalence class expressions inside lists. A @dfn{equivalence class expression} is a set of collating elements which all belong to the same equivalence class. You form an equivalence class expression by putting a collating element between an @dfn{open-equivalence-class operator} and a @dfn{close-equivalence-class operator}. @samp{[=} represents the open-equivalence-class operator and @samp{=]} represents the close-equivalence-class operator. For example, if @samp{a} and @samp{A} were an equivalence class, then both @samp{[[=a=]]} and @samp{[[=A=]]} would match both @samp{a} and @samp{A}. If the collating element in an equivalence class expression isn't part of an equivalence class, then the matcher considers the equivalence class expression to be a collating symbol. @node Character Class Operators @subsection Character Class Operators (@code{[:} @dots{} @code{:]}) @cindex character classes @cindex @samp{[colon} in regex @cindex @samp{colon]} in regex If the syntax bit @code{RE_CHAR_CLASSES} is set, then Regex recognizes character class expressions inside lists. A @dfn{character class expression} matches one character from a given class. You form a character class expression by putting a character class name between an @dfn{open-character-class operator} (represented by @samp{[:}) and a @dfn{close-character-class operator} (represented by @samp{:]}). The character class names and their meanings are: @table @code @item alnum letters and digits @item alpha letters @item blank system-dependent; for GNU, a space or tab @item cntrl control characters (in the ASCII encoding, code 0177 and codes less than 040) @item digit digits @item graph same as @code{print} except omits space @item lower lowercase letters @item print printable characters (in the ASCII encoding, space tilde---codes 040 through 0176) @item punct neither control nor alphanumeric characters @item space space, carriage return, newline, vertical tab, and form feed @item upper uppercase letters @item xdigit hexadecimal digits: @code{0}--@code{9}, @code{a}--@code{f}, @code{A}--@code{F} @end table @noindent These correspond to the definitions in the C library's @file{<ctype.h>} facility. For example, @samp{[:alpha:]} corresponds to the standard facility @code{isalpha}. Regex recognizes character class expressions only inside of lists; so @samp{[[:alpha:]]} matches any letter, but @samp{[:alpha:]} outside of a bracket expression and not followed by a repetition operator matches just itself. @node Range Operator @subsection The Range Operator (@code{-}) Regex recognizes @dfn{range expressions} inside a list. They represent those characters that fall between two elements in the current collating sequence. You form a range expression by putting a @dfn{range operator} between two of any of the following: characters, collating elements, collating symbols, and equivalence class expressions. The starting point of the range and the ending point of the range don't have to be the same kind of item, e.g., the starting point could be a collating element and the ending point could be an equivalence class expression. If a range's ending point is an equivalence class, then all the collating elements in that class will be in the range.@footnote{You can't use a character class for the starting or ending point of a range, since a character class is not a single character.} @samp{-} represents the range operator. For example, @samp{a-f} within a list represents all the characters from @samp{a} through @samp{f} inclusively. If the syntax bit @code{RE_NO_EMPTY_RANGES} is set, then if the range's ending point collates less than its starting point, the range (and the regular expression containing it) is invalid. For example, the regular expression @samp{[z-a]} would be invalid. If this bit isn't set, then Regex considers such a range to be empty. Since @samp{-} represents the range operator, if you want to make a @samp{-} character itself a list item, you must do one of the following: @itemize @bullet @item Put the @samp{-} either first or last in the list. @item Include a range whose starting point collates strictly lower than @samp{-} and whose ending point collates equal or higher. Unless a range is the first item in a list, a @samp{-} can't be its starting point, but @emph{can} be its ending point. That is because Regex considers @samp{-} to be the range operator unless it is preceded by another @samp{-}. For example, in the ASCII encoding, @samp{)}, @samp{*}, @samp{+}, @samp{,}, @samp{-}, @samp{.}, and @samp{/} are contiguous characters in the collating sequence. You might think that @samp{[)-+--/]} has two ranges: @samp{)-+} and @samp{--/}. Rather, it has the ranges @samp{)-+} and @samp{+--}, plus the character @samp{/}, so it matches, e.g., @samp{,}, not @samp{.}. @item Put a range whose starting point is @samp{-} first in the list. @end itemize For example, @samp{[-a-z]} matches a lowercase letter or a hyphen (in English, in ASCII). @node Grouping Operators @section Grouping Operators (@code{(} @dots{} @code{)} or @code{\(} @dots{} @code{\)}) @kindex ( @kindex ) @kindex \( @kindex \) @cindex grouping @cindex subexpressions @cindex parenthesizing A @dfn{group}, also known as a @dfn{subexpression}, consists of an @dfn{open-group operator}, any number of other operators, and a @dfn{close-group operator}. Regex treats this sequence as a unit, just as mathematics and programming languages treat a parenthesized expression as a unit. Therefore, using @dfn{groups}, you can: @itemize @bullet @item delimit the argument(s) to an alternation operator (@pxref{Alternation Operator}) or a repetition operator (@pxref{Repetition Operators}). @item keep track of the indices of the substring that matched a given group. @xref{Using Registers}, for a precise explanation. This lets you: @itemize @bullet @item use the back-reference operator (@pxref{Back-reference Operator}). @item use registers (@pxref{Using Registers}). @end itemize @end itemize If the syntax bit @code{RE_NO_BK_PARENS} is set, then @samp{(} represents the open-group operator and @samp{)} represents the close-group operator; otherwise, @samp{\(} and @samp{\)} do. If the syntax bit @code{RE_UNMATCHED_RIGHT_PAREN_ORD} is set and a close-group operator has no matching open-group operator, then Regex considers it to match @samp{)}. @node Back-reference Operator @section The Back-reference Operator (@dfn{\}@var{digit}) @cindex back-references If the syntax bit @code{RE_NO_BK_REF} isn't set, then Regex recognizes back-references. A back-reference matches a specified preceding group. The back-reference operator is represented by @samp{\@var{digit}} anywhere after the end of a regular expression's @w{@var{digit}-th} group (@pxref{Grouping Operators}). @var{digit} must be between @samp{1} and @samp{9}. The matcher assigns numbers 1 through 9 to the first nine groups it encounters. By using one of @samp{\1} through @samp{\9} after the corresponding group's close-group operator, you can match a substring identical to the one that the group does. Back-references match according to the following (in all examples below, @samp{(} represents the open-group, @samp{)} the close-group, @samp{@{} the open-interval and @samp{@}} the close-interval operator): @itemize @bullet @item If the group matches a substring, the back-reference matches an identical substring. For example, @samp{(a)\1} matches @samp{aa} and @samp{(bana)na\1bo\1} matches @samp{bananabanabobana}. Likewise, @samp{(.*)\1} matches any (newline-free if the syntax bit @code{RE_DOT_NEWLINE} isn't set) string that is composed of two identical halves; the @samp{(.*)} matches the first half and the @samp{\1} matches the second half. @item If the group matches more than once (as it might if followed by, e.g., a repetition operator), then the back-reference matches the substring the group @emph{last} matched. For example, @samp{((a*)b)*\1\2} matches @samp{aabababa}; first @w{group 1} (the outer one) matches @samp{aab} and @w{group 2} (the inner one) matches @samp{aa}. Then @w{group 1} matches @samp{ab} and @w{group 2} matches @samp{a}. So, @samp{\1} matches @samp{ab} and @samp{\2} matches @samp{a}. @item If the group doesn't participate in a match, i.e., it is part of an alternative not taken or a repetition operator allows zero repetitions of it, then the back-reference makes the whole match fail. For example, @samp{(one()|two())-and-(three\2|four\3)} matches @samp{one-and-three} and @samp{two-and-four}, but not @samp{one-and-four} or @samp{two-and-three}. For example, if the pattern matches @samp{one-and-}, then its @w{group 2} matches the empty string and its @w{group 3} doesn't participate in the match. So, if it then matches @samp{four}, then when it tries to back-reference @w{group 3}---which it will attempt to do because @samp{\3} follows the @samp{four}---the match will fail because @w{group 3} didn't participate in the match. @end itemize You can use a back-reference as an argument to a repetition operator. For example, @samp{(a(b))\2*} matches @samp{a} followed by two or more @samp{b}s. Similarly, @samp{(a(b))\2@{3@}} matches @samp{abbbb}. If there is no preceding @w{@var{digit}-th} subexpression, the regular expression is invalid. Back-references can greatly slow down matching, as they can generate exponentially many matching possibilities that can consume both time and memory to explore. Also, the POSIX specification for back-references is at times unclear. Furthermore, many regular expression implementations have back-reference bugs that can cause programs to return incorrect answers or even crash, and fixing these bugs has often been low-priority: for example, as of 2020 the @url{https://sourceware.org/bugzilla/,GNU C library bug database} contained back-reference bugs @url{https://sourceware.org/bugzilla/show_bug.cgi?id=52,,52}, @url{https://sourceware.org/bugzilla/show_bug.cgi?id=10844,,10844}, @url{https://sourceware.org/bugzilla/show_bug.cgi?id=11053,,11053}, @url{https://sourceware.org/bugzilla/show_bug.cgi?id=24269,,24269} and @url{https://sourceware.org/bugzilla/show_bug.cgi?id=25322,,25322}, with little sign of forthcoming fixes. Luckily, back-references are rarely useful and it should be little trouble to avoid them in practical applications. @node Anchoring Operators @section Anchoring Operators @cindex anchoring @cindex regexp anchoring These operators can constrain a pattern to match only at the beginning or end of the entire string or at the beginning or end of a line. @menu * Match-beginning-of-line Operator:: ^ * Match-end-of-line Operator:: $ @end menu @node Match-beginning-of-line Operator @subsection The Match-beginning-of-line Operator (@code{^}) @kindex ^ @cindex beginning-of-line operator @cindex anchors This operator can match the empty string either at the beginning of the string or after a newline character. Thus, it is said to @dfn{anchor} the pattern to the beginning of a line. In the cases following, @samp{^} represents this operator. (Otherwise, @samp{^} is ordinary.) @itemize @bullet @item It (the @samp{^}) is first in the pattern, as in @samp{^foo}. @cnindex RE_CONTEXT_INDEP_ANCHORS @r{(and @samp{^})} @item The syntax bit @code{RE_CONTEXT_INDEP_ANCHORS} is set, and it is outside a bracket expression. @cindex open-group operator and @samp{^} @cindex alternation operator and @samp{^} @item It follows an open-group or alternation operator, as in @samp{a\(^b\)} and @samp{a\|^b}. @xref{Grouping Operators}, and @ref{Alternation Operator}. @end itemize These rules imply that some valid patterns containing @samp{^} cannot be matched; for example, @samp{foo^bar} if @code{RE_CONTEXT_INDEP_ANCHORS} is set. @vindex not_bol @r{field in pattern buffer} If the @code{not_bol} field is set in the pattern buffer (@pxref{GNU Pattern Buffers}), then @samp{^} fails to match at the beginning of the string. This lets you match against pieces of a line, as you would need to if, say, searching for repeated instances of a given pattern in a line; it would work correctly for patterns both with and without match-beginning-of-line operators. @node Match-end-of-line Operator @subsection The Match-end-of-line Operator (@code{$}) @kindex $ @cindex end-of-line operator @cindex anchors This operator can match the empty string either at the end of the string or before a newline character in the string. Thus, it is said to @dfn{anchor} the pattern to the end of a line. It is always represented by @samp{$}. For example, @samp{foo$} usually matches, e.g., @samp{foo} and, e.g., the first three characters of @samp{foo\nbar}. Its interaction with the syntax bits and pattern buffer fields is exactly the dual of @samp{^}'s; see the previous section. (That is, ``@samp{^}'' becomes ``@samp{$}'', ``beginning'' becomes ``end'', ``next'' becomes ``previous'', ``after'' becomes ``before'', and ``@code{not_bol}'' becomes ``@code{not_eol}''.) @node GNU Operators @chapter GNU Operators Following are operators that GNU defines (and POSIX doesn't). @menu * Word Operators:: * Buffer Operators:: @end menu @node Word Operators @section Word Operators The operators in this section require Regex to recognize parts of words. Regex uses a syntax table to determine whether or not a character is part of a word, i.e., whether or not it is @dfn{word-constituent}. @menu * Non-Emacs Syntax Tables:: * Match-word-boundary Operator:: \b * Match-within-word Operator:: \B * Match-beginning-of-word Operator:: \< * Match-end-of-word Operator:: \> * Match-word-constituent Operator:: \w * Match-non-word-constituent Operator:: \W @end menu @node Non-Emacs Syntax Tables @subsection Non-Emacs Syntax Tables A @dfn{syntax table} is an array indexed by the characters in your character set. In the ASCII encoding, therefore, a syntax table has 256 elements. Regex always uses a @code{char *} variable @code{re_syntax_table} as its syntax table. In some cases, it initializes this variable and in others it expects you to initialize it. @itemize @bullet @item If Regex is compiled with the preprocessor symbols @code{emacs} and @code{SYNTAX_TABLE} both undefined, then Regex allocates @code{re_syntax_table} and initializes an element @var{i} either to @code{Sword} (which it defines) if @var{i} is a letter, number, or @samp{_}, or to zero if it's not. @item If Regex is compiled with @code{emacs} undefined but @code{SYNTAX_TABLE} defined, then Regex expects you to define a @code{char *} variable @code{re_syntax_table} to be a valid syntax table. @item @xref{Emacs Syntax Tables}, for what happens when Regex is compiled with the preprocessor symbol @code{emacs} defined. @end itemize @node Match-word-boundary Operator @subsection The Match-word-boundary Operator (@code{\b}) @cindex @samp{\b} @cindex word boundaries, matching This operator (represented by @samp{\b}) matches the empty string at either the beginning or the end of a word. For example, @samp{\brat\b} matches the separate word @samp{rat}. @node Match-within-word Operator @subsection The Match-within-word Operator (@code{\B}) @cindex @samp{\B} This operator (represented by @samp{\B}) matches the empty string within a word. For example, @samp{c\Brat\Be} matches @samp{crate}, but @samp{dirty \Brat} doesn't match @samp{dirty rat}. @node Match-beginning-of-word Operator @subsection The Match-beginning-of-word Operator (@code{\<}) @cindex @samp{\<} This operator (represented by @samp{\<}) matches the empty string at the beginning of a word. @node Match-end-of-word Operator @subsection The Match-end-of-word Operator (@code{\>}) @cindex @samp{\>} This operator (represented by @samp{\>}) matches the empty string at the end of a word. @node Match-word-constituent Operator @subsection The Match-word-constituent Operator (@code{\w}) @cindex @samp{\w} This operator (represented by @samp{\w}) matches any word-constituent character. @node Match-non-word-constituent Operator @subsection The Match-non-word-constituent Operator (@code{\W}) @cindex @samp{\W} This operator (represented by @samp{\W}) matches any character that is not word-constituent. @node Buffer Operators @section Buffer Operators Following are operators which work on buffers. In Emacs, a @dfn{buffer} is, naturally, an Emacs buffer. For other programs, Regex considers the entire string to be matched as the buffer. @menu * Match-beginning-of-buffer Operator:: \` * Match-end-of-buffer Operator:: \' @end menu @node Match-beginning-of-buffer Operator @subsection The Match-beginning-of-buffer Operator (@code{\`}) @cindex @samp{\`} This operator (represented by @samp{\`}) matches the empty string at the beginning of the buffer. @node Match-end-of-buffer Operator @subsection The Match-end-of-buffer Operator (@code{\'}) @cindex @samp{\'} This operator (represented by @samp{\'}) matches the empty string at the end of the buffer. @node GNU Emacs Operators @chapter GNU Emacs Operators Following are operators that GNU defines (and POSIX doesn't) that you can use only when Regex is compiled with the preprocessor symbol @code{emacs} defined. @menu * Syntactic Class Operators:: @end menu @node Syntactic Class Operators @section Syntactic Class Operators The operators in this section require Regex to recognize the syntactic classes of characters. Regex uses a syntax table to determine this. @menu * Emacs Syntax Tables:: * Match-syntactic-class Operator:: \sCLASS * Match-not-syntactic-class Operator:: \SCLASS @end menu @node Emacs Syntax Tables @subsection Emacs Syntax Tables A @dfn{syntax table} is an array indexed by the characters in your character set. In the ASCII encoding, therefore, a syntax table has 256 elements. If Regex is compiled with the preprocessor symbol @code{emacs} defined, then Regex expects you to define and initialize the variable @code{re_syntax_table} to be an Emacs syntax table. Emacs' syntax tables are more complicated than Regex's own (@pxref{Non-Emacs Syntax Tables}). @xref{Syntax, , Syntax, emacs, The GNU Emacs User's Manual}, for a description of Emacs' syntax tables. @node Match-syntactic-class Operator @subsection The Match-syntactic-class Operator (@code{\s}@var{class}) @cindex @samp{\s} This operator matches any character whose syntactic class is represented by a specified character. @samp{\s@var{class}} represents this operator where @var{class} is the character representing the syntactic class you want. For example, @samp{w} represents the syntactic class of word-constituent characters, so @samp{\sw} matches any word-constituent character. @node Match-not-syntactic-class Operator @subsection The Match-not-syntactic-class Operator (@code{\S}@var{class}) @cindex @samp{\S} This operator is similar to the match-syntactic-class operator except that it matches any character whose syntactic class is @emph{not} represented by the specified character. @samp{\S@var{class}} represents this operator. For example, @samp{w} represents the syntactic class of word-constituent characters, so @samp{\Sw} matches any character that is not word-constituent. @node What Gets Matched? @chapter What Gets Matched? Regex usually matches strings according to the ``leftmost longest'' rule; that is, it chooses the longest of the leftmost matches. This does not mean that for a regular expression containing subexpressions that it simply chooses the longest match for each subexpression, left to right; the overall match must also be the longest possible one. For example, @samp{(ac*)(c*d[ac]*)\1} matches @samp{acdacaaa}, not @samp{acdac}, as it would if it were to choose the longest match for the first subexpression. @node Programming with Regex @chapter Programming with Regex Here we describe how you use the Regex data structures and functions in C programs. Regex has three interfaces: one designed for GNU, one compatible with POSIX (as specified by POSIX, draft 1003.2/D11.2), and one compatible with Berkeley Unix. The POSIX interface is not documented here; see the documentation of GNU libc, or the POSIX man pages. The Berkeley Unix interface is documented here for convenience, since its documentation is not otherwise readily available on GNU systems. @menu * GNU Regex Functions:: * BSD Regex Functions:: @end menu @node GNU Regex Functions @section GNU Regex Functions If you're writing code that doesn't need to be compatible with either POSIX or Berkeley Unix, you can use these functions. They provide more options than the other interfaces. @menu * GNU Pattern Buffers:: The re_pattern_buffer type. * GNU Regular Expression Compiling:: re_compile_pattern () * GNU Matching:: re_match () * GNU Searching:: re_search () * Matching/Searching with Split Data:: re_match_2 (), re_search_2 () * Searching with Fastmaps:: re_compile_fastmap () * GNU Translate Tables:: The @code{translate} field. * Using Registers:: The re_registers type and related fns. * Freeing GNU Pattern Buffers:: regfree () @end menu @node GNU Pattern Buffers @subsection GNU Pattern Buffers @cindex pattern buffer, definition of @tindex re_pattern_buffer @r{definition} @tindex struct re_pattern_buffer @r{definition} To compile, match, or search for a given regular expression, you must supply a pattern buffer. A @dfn{pattern buffer} holds one compiled regular expression.@footnote{Regular expressions are also referred to as ``patterns,'' hence the name ``pattern buffer.''} You can have several different pattern buffers simultaneously, each holding a compiled pattern for a different regular expression. @file{regex.h} defines the pattern buffer @code{struct} with the following public fields: @example unsigned char *buffer; unsigned long allocated; char *fastmap; char *translate; size_t re_nsub; unsigned no_sub : 1; unsigned not_bol : 1; unsigned not_eol : 1; @end example @node GNU Regular Expression Compiling @subsection GNU Regular Expression Compiling In GNU, you can both match and search for a given regular expression. To do either, you must first compile it in a pattern buffer (@pxref{GNU Pattern Buffers}). @cindex syntax initialization @vindex re_syntax_options @r{initialization} Regular expressions match according to the syntax with which they were compiled; with GNU, you indicate what syntax you want by setting the variable @code{re_syntax_options} (declared in @file{regex.h}) before calling the compiling function, @code{re_compile_pattern} (see below). @xref{Syntax Bits}, and @ref{Predefined Syntaxes}. You can change the value of @code{re_syntax_options} at any time. Usually, however, you set its value once and then never change it. @cindex pattern buffer initialization @code{re_compile_pattern} takes a pattern buffer as an argument. You must initialize the following fields: @table @code @item translate @r{initialization} @item translate @vindex translate @r{initialization} Initialize this to point to a translate table if you want one, or to zero if you don't. We explain translate tables in @ref{GNU Translate Tables}. @item fastmap @vindex fastmap @r{initialization} Initialize this to nonzero if you want a fastmap, or to zero if you don't. @item buffer @itemx allocated @vindex buffer @r{initialization} @vindex allocated @r{initialization} @findex malloc If you want @code{re_compile_pattern} to allocate memory for the compiled pattern, set both of these to zero. If you have an existing block of memory (allocated with @code{malloc}) you want Regex to use, set @code{buffer} to its address and @code{allocated} to its size (in bytes). @code{re_compile_pattern} uses @code{realloc} to extend the space for the compiled pattern as necessary. @end table To compile a pattern buffer, use: @findex re_compile_pattern @example char * re_compile_pattern (const char *@var{regex}, const int @var{regex_size}, struct re_pattern_buffer *@var{pattern_buffer}) @end example @noindent @var{regex} is the regular expression's address, @var{regex_size} is its length, and @var{pattern_buffer} is the pattern buffer's address. If @code{re_compile_pattern} successfully compiles the regular expression, it returns zero and sets @code{*@var{pattern_buffer}} to the compiled pattern. It sets the pattern buffer's fields as follows: @table @code @item buffer @vindex buffer @r{field, set by @code{re_compile_pattern}} to the compiled pattern. @item syntax @vindex syntax @r{field, set by @code{re_compile_pattern}} to the current value of @code{re_syntax_options}. @item re_nsub @vindex re_nsub @r{field, set by @code{re_compile_pattern}} to the number of subexpressions in @var{regex}. @end table If @code{re_compile_pattern} can't compile @var{regex}, it returns an error string corresponding to a POSIX error code. @node GNU Matching @subsection GNU Matching @cindex matching with GNU functions Matching the GNU way means trying to match as much of a string as possible starting at a position within it you specify. Once you've compiled a pattern into a pattern buffer (@pxref{GNU Regular Expression Compiling}), you can ask the matcher to match that pattern against a string using: @findex re_match @example int re_match (struct re_pattern_buffer *@var{pattern_buffer}, const char *@var{string}, const int @var{size}, const int @var{start}, struct re_registers *@var{regs}) @end example @noindent @var{pattern_buffer} is the address of a pattern buffer containing a compiled pattern. @var{string} is the string you want to match; it can contain newline and null characters. @var{size} is the length of that string. @var{start} is the string index at which you want to begin matching; the first character of @var{string} is at index zero. @xref{Using Registers}, for an explanation of @var{regs}; you can safely pass zero. @code{re_match} matches the regular expression in @var{pattern_buffer} against the string @var{string} according to the syntax of @var{pattern_buffer}. (@xref{GNU Regular Expression Compiling}, for how to set it.) The function returns @math{-1} if the compiled pattern does not match any part of @var{string} and @math{-2} if an internal error happens; otherwise, it returns how many (possibly zero) characters of @var{string} the pattern matched. An example: suppose @var{pattern_buffer} points to a pattern buffer containing the compiled pattern for @samp{a*}, and @var{string} points to @samp{aaaaab} (whereupon @var{size} should be 6). Then if @var{start} is 2, @code{re_match} returns 3, i.e., @samp{a*} would have matched the last three @samp{a}s in @var{string}. If @var{start} is 0, @code{re_match} returns 5, i.e., @samp{a*} would have matched all the @samp{a}s in @var{string}. If @var{start} is either 5 or 6, it returns zero. If @var{start} is not between zero and @var{size}, then @code{re_match} returns @math{-1}. @node GNU Searching @subsection GNU Searching @cindex searching with GNU functions @dfn{Searching} means trying to match starting at successive positions within a string. The function @code{re_search} does this. Before calling @code{re_search}, you must compile your regular expression. @xref{GNU Regular Expression Compiling}. Here is the function declaration: @findex re_search @example int re_search (struct re_pattern_buffer *@var{pattern_buffer}, const char *@var{string}, const int @var{size}, const int @var{start}, const int @var{range}, struct re_registers *@var{regs}) @end example @noindent @vindex start @r{argument to @code{re_search}} @vindex range @r{argument to @code{re_search}} whose arguments are the same as those to @code{re_match} (@pxref{GNU Matching}) except that the two arguments @var{start} and @var{range} replace @code{re_match}'s argument @var{start}. If @var{range} is positive, then @code{re_search} attempts a match starting first at index @var{start}, then at @math{@var{start} + 1} if that fails, and so on, up to @math{@var{start} + @var{range}}; if @var{range} is negative, then it attempts a match starting first at index @var{start}, then at @math{@var{start} -1} if that fails, and so on. If @var{start} is not between zero and @var{size}, then @code{re_search} returns @math{-1}. When @var{range} is positive, @code{re_search} adjusts @var{range} so that @math{@var{start} + @var{range} - 1} is between zero and @var{size}, if necessary; that way it won't search outside of @var{string}. Similarly, when @var{range} is negative, @code{re_search} adjusts @var{range} so that @math{@var{start} + @var{range} + 1} is between zero and @var{size}, if necessary. If the @code{fastmap} field of @var{pattern_buffer} is zero, @code{re_search} matches starting at consecutive positions; otherwise, it uses @code{fastmap} to make the search more efficient. @xref{Searching with Fastmaps}. If no match is found, @code{re_search} returns @math{-1}. If a match is found, it returns the index where the match began. If an internal error happens, it returns @math{-2}. @node Matching/Searching with Split Data @subsection Matching and Searching with Split Data Using the functions @code{re_match_2} and @code{re_search_2}, you can match or search in data that is divided into two strings. The function: @findex re_match_2 @example int re_match_2 (struct re_pattern_buffer *@var{buffer}, const char *@var{string1}, const int @var{size1}, const char *@var{string2}, const int @var{size2}, const int @var{start}, struct re_registers *@var{regs}, const int @var{stop}) @end example @noindent is similar to @code{re_match} (@pxref{GNU Matching}) except that you pass @emph{two} data strings and sizes, and an index @var{stop} beyond which you don't want the matcher to try matching. As with @code{re_match}, if it succeeds, @code{re_match_2} returns how many characters of @var{string} it matched. Regard @var{string1} and @var{string2} as concatenated when you set the arguments @var{start} and @var{stop} and use the contents of @var{regs}; @code{re_match_2} never returns a value larger than @math{@var{size1} + @var{size2}}. The function: @findex re_search_2 @example int re_search_2 (struct re_pattern_buffer *@var{buffer}, const char *@var{string1}, const int @var{size1}, const char *@var{string2}, const int @var{size2}, const int @var{start}, const int @var{range}, struct re_registers *@var{regs}, const int @var{stop}) @end example @noindent is similarly related to @code{re_search}. @node Searching with Fastmaps @subsection Searching with Fastmaps @cindex fastmaps If you're searching through a long string, you should use a fastmap. Without one, the searcher tries to match at consecutive positions in the string. Generally, most of the characters in the string could not start a match. It takes much longer to try matching at a given position in the string than it does to check in a table whether or not the character at that position could start a match. A @dfn{fastmap} is such a table. More specifically, a fastmap is an array indexed by the characters in your character set. Under the ASCII encoding, therefore, a fastmap has 256 elements. If you want the searcher to use a fastmap with a given pattern buffer, you must allocate the array and assign the array's address to the pattern buffer's @code{fastmap} field. You either can compile the fastmap yourself or have @code{re_search} do it for you; when @code{fastmap} is nonzero, it automatically compiles a fastmap the first time you search using a particular compiled pattern. By setting the buffer's @code{fastmap} field before calling @code{re_compile_pattern}, you can reuse a buffer data structure across multiple searches with different patterns, and allocate the fastmap only once. Nonetheless, the fastmap must be recompiled each time the buffer has a new pattern compiled into it. To compile a fastmap yourself, use: @findex re_compile_fastmap @example int re_compile_fastmap (struct re_pattern_buffer *@var{pattern_buffer}) @end example @noindent @var{pattern_buffer} is the address of a pattern buffer. If the character @var{c} could start a match for the pattern, @code{re_compile_fastmap} makes @code{@var{pattern_buffer}->fastmap[@var{c}]} nonzero. It returns @math{0} if it can compile a fastmap and @math{-2} if there is an internal error. For example, if @samp{|} is the alternation operator and @var{pattern_buffer} holds the compiled pattern for @samp{a|b}, then @code{re_compile_fastmap} sets @code{fastmap['a']} and @code{fastmap['b']} (and no others). @code{re_search} uses a fastmap as it moves along in the string: it checks the string's characters until it finds one that's in the fastmap. Then it tries matching at that character. If the match fails, it repeats the process. So, by using a fastmap, @code{re_search} doesn't waste time trying to match at positions in the string that couldn't start a match. If you don't want @code{re_search} to use a fastmap, store zero in the @code{fastmap} field of the pattern buffer before calling @code{re_search}. Once you've initialized a pattern buffer's @code{fastmap} field, you need never do so again---even if you compile a new pattern in it---provided the way the field is set still reflects whether or not you want a fastmap. @code{re_search} will still either do nothing if @code{fastmap} is null or, if it isn't, compile a new fastmap for the new pattern. @node GNU Translate Tables @subsection GNU Translate Tables If you set the @code{translate} field of a pattern buffer to a translate table, then the GNU Regex functions to which you've passed that pattern buffer use it to apply a simple transformation to all the regular expression and string characters at which they look. A @dfn{translate table} is an array indexed by the characters in your character set. Under the ASCII encoding, therefore, a translate table has 256 elements. The array's elements are also characters in your character set. When the Regex functions see a character @var{c}, they use @code{translate[@var{c}]} in its place, with one exception: the character after a @samp{\} is not translated. (This ensures that, the operators, e.g., @samp{\B} and @samp{\b}, are always distinguishable.) For example, a table that maps all lowercase letters to the corresponding uppercase ones would cause the matcher to ignore differences in case.@footnote{A table that maps all uppercase letters to the corresponding lowercase ones would work just as well for this purpose.} Such a table would map all characters except lowercase letters to themselves, and lowercase letters to the corresponding uppercase ones. Under the ASCII encoding, here's how you could initialize such a table (we'll call it @code{case_fold}): @example for (i = 0; i < 256; i++) case_fold[i] = i; for (i = 'a'; i <= 'z'; i++) case_fold[i] = i - ('a' - 'A'); @end example You tell Regex to use a translate table on a given pattern buffer by assigning that table's address to the @code{translate} field of that buffer. If you don't want Regex to do any translation, put zero into this field. You'll get weird results if you change the table's contents anytime between compiling the pattern buffer, compiling its fastmap, and matching or searching with the pattern buffer. @node Using Registers @subsection Using Registers A group in a regular expression can match a (possibly empty) substring of the string that regular expression as a whole matched. The matcher remembers the beginning and end of the substring matched by each group. To find out what they matched, pass a nonzero @var{regs} argument to a GNU matching or searching function (@pxref{GNU Matching} and @ref{GNU Searching}), i.e., the address of a structure of this type, as defined in @file{regex.h}: @c We don't bother to include this directly from regex.h, @c since it changes so rarely. @example @tindex re_registers @vindex num_regs @r{in @code{struct re_registers}} @vindex start @r{in @code{struct re_registers}} @vindex end @r{in @code{struct re_registers}} struct re_registers @{ unsigned num_regs; regoff_t *start; regoff_t *end; @}; @end example Except for (possibly) the @var{num_regs}'th element (see below), the @var{i}th element of the @code{start} and @code{end} arrays records information about the @var{i}th group in the pattern. (They're declared as C pointers, but this is only because not all C compilers accept zero-length arrays; conceptually, it is simplest to think of them as arrays.) The @code{start} and @code{end} arrays are allocated in one of two ways. The simplest and perhaps most useful is to let the matcher (re)allocate enough space to record information for all the groups in the regular expression. If @code{re_set_registers} is not called before searching or matching, then the matcher allocates two arrays each of @math{1 + @var{re_nsub}} elements (@var{re_nsub} is another field in the pattern buffer; @pxref{GNU Pattern Buffers}). The extra element is set to @math{-1}. Then on subsequent calls with the same pattern buffer and @var{regs} arguments, the matcher reallocates more space if necessary. The function: @findex re_set_registers @example void re_set_registers (struct re_pattern_buffer *@var{buffer}, struct re_registers *@var{regs}, size_t @var{num_regs}, regoff_t *@var{starts}, regoff_t *@var{ends}) @end example @noindent sets @var{regs} to hold @var{num_regs} registers, storing them in @var{starts} and @var{ends}. Subsequent matches using @var{buffer} and @var{regs} will use this memory for recording register information. @var{starts} and @var{ends} must be allocated with malloc, and must each be at least @math{@var{num_regs} * @code{sizeof (regoff_t)}} bytes long. If @var{num_regs} is zero, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using @var{buffer} will allocate its own register data, without freeing the old data. The following examples illustrate the information recorded in the @code{re_registers} structure. (In all of them, @samp{(} represents the open-group and @samp{)} the close-group operator. The first character in the string @var{string} is at index 0.) @itemize @bullet @item If the regular expression has an @w{@var{i}-th} group that matches a substring of @var{string}, then the function sets @code{@w{@var{regs}->}start[@var{i}]} to the index in @var{string} where the substring matched by the @w{@var{i}-th} group begins, and @code{@w{@var{regs}->}end[@var{i}]} to the index just beyond that substring's end. The function sets @code{@w{@var{regs}->}start[0]} and @code{@w{@var{regs}->}end[0]} to analogous information about the entire pattern. For example, when you match @samp{((a)(b))} against @samp{ab}, you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 2 in @code{@w{@var{regs}->}end[0]} @item 0 in @code{@w{@var{regs}->}start[1]} and 2 in @code{@w{@var{regs}->}end[1]} @item 0 in @code{@w{@var{regs}->}start[2]} and 1 in @code{@w{@var{regs}->}end[2]} @item 1 in @code{@w{@var{regs}->}start[3]} and 2 in @code{@w{@var{regs}->}end[3]} @end itemize @item If a group matches more than once (as it might if followed by, e.g., a repetition operator), then the function reports the information about what the group @emph{last} matched. For example, when you match the pattern @samp{(a)*} against the string @samp{aa}, you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 2 in @code{@w{@var{regs}->}end[0]} @item 1 in @code{@w{@var{regs}->}start[1]} and 2 in @code{@w{@var{regs}->}end[1]} @end itemize @item If the @w{@var{i}-th} group does not participate in a successful match, e.g., it is an alternative not taken or a repetition operator allows zero repetitions of it, then the function sets @code{@w{@var{regs}->}start[@var{i}]} and @code{@w{@var{regs}->}end[@var{i}]} to @math{-1}. For example, when you match the pattern @samp{(a)*b} against the string @samp{b}, you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 1 in @code{@w{@var{regs}->}end[0]} @item @math{-1} in @code{@w{@var{regs}->}start[1]} and @math{-1} in @code{@w{@var{regs}->}end[1]} @end itemize @item If the @w{@var{i}-th} group matches a zero-length string, then the function sets @code{@w{@var{regs}->}start[@var{i}]} and @code{@w{@var{regs}->}end[@var{i}]} to the index just beyond that zero-length string. For example, when you match the pattern @samp{(a*)b} against the string @samp{b}, you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 1 in @code{@w{@var{regs}->}end[0]} @item 0 in @code{@w{@var{regs}->}start[1]} and 0 in @code{@w{@var{regs}->}end[1]} @end itemize @item If an @w{@var{i}-th} group contains a @w{@var{j}-th} group in turn not contained within any other group within group @var{i} and the function reports a match of the @w{@var{i}-th} group, then it records in @code{@w{@var{regs}->}start[@var{j}]} and @code{@w{@var{regs}->}end[@var{j}]} the last match (if it matched) of the @w{@var{j}-th} group. For example, when you match the pattern @samp{((a*)b)*} against the string @samp{abb}, @w{group 2} last matches the empty string, so you get what it previously matched: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 3 in @code{@w{@var{regs}->}end[0]} @item 2 in @code{@w{@var{regs}->}start[1]} and 3 in @code{@w{@var{regs}->}end[1]} @item 2 in @code{@w{@var{regs}->}start[2]} and 2 in @code{@w{@var{regs}->}end[2]} @end itemize When you match the pattern @samp{((a)*b)*} against the string @samp{abb}, @w{group 2} doesn't participate in the last match, so you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 3 in @code{@w{@var{regs}->}end[0]} @item 2 in @code{@w{@var{regs}->}start[1]} and 3 in @code{@w{@var{regs}->}end[1]} @item 0 in @code{@w{@var{regs}->}start[2]} and 1 in @code{@w{@var{regs}->}end[2]} @end itemize @item If an @w{@var{i}-th} group contains a @w{@var{j}-th} group in turn not contained within any other group within group @var{i} and the function sets @code{@w{@var{regs}->}start[@var{i}]} and @code{@w{@var{regs}->}end[@var{i}]} to @math{-1}, then it also sets @code{@w{@var{regs}->}start[@var{j}]} and @code{@w{@var{regs}->}end[@var{j}]} to @math{-1}. For example, when you match the pattern @samp{((a)*b)*c} against the string @samp{c}, you get: @itemize @item 0 in @code{@w{@var{regs}->}start[0]} and 1 in @code{@w{@var{regs}->}end[0]} @item @math{-1} in @code{@w{@var{regs}->}start[1]} and @math{-1} in @code{@w{@var{regs}->}end[1]} @item @math{-1} in @code{@w{@var{regs}->}start[2]} and @math{-1} in @code{@w{@var{regs}->}end[2]} @end itemize @end itemize @node Freeing GNU Pattern Buffers @subsection Freeing GNU Pattern Buffers To free any allocated fields of a pattern buffer, use the POSIX function @code{regfree}: @findex regfree @example void regfree (regex_t *@var{preg}) @end example @noindent @var{preg} is the pattern buffer whose allocated fields you want freed; this works because since the type @code{regex_t}---the type for POSIX pattern buffers---is equivalent to the type @code{re_pattern_buffer}. @code{regfree} also sets @var{preg}'s @code{allocated} field to zero. After a buffer has been freed, it must have a regular expression compiled in it before passing it to a matching or searching function. @node BSD Regex Functions @section BSD Regex Functions If you're writing code that has to be Berkeley Unix compatible, you'll need to use these functions whose interfaces are the same as those in Berkeley Unix. @menu * BSD Regular Expression Compiling:: re_comp () * BSD Searching:: re_exec () @end menu @node BSD Regular Expression Compiling @subsection BSD Regular Expression Compiling With Berkeley Unix, you can only search for a given regular expression; you can't match one. To search for it, you must first compile it. Before you compile it, you must indicate the regular expression syntax you want it compiled according to by setting the variable @code{re_syntax_options} (declared in @file{regex.h} to some syntax (@pxref{Regular Expression Syntax}). To compile a regular expression use: @findex re_comp @example char * re_comp (char *@var{regex}) @end example @noindent @var{regex} is the address of a null-terminated regular expression. @code{re_comp} uses an internal pattern buffer, so you can use only the most recently compiled pattern buffer. This means that if you want to use a given regular expression that you've already compiled---but it isn't the latest one you've compiled---you'll have to recompile it. If you call @code{re_comp} with the null string (@emph{not} the empty string) as the argument, it doesn't change the contents of the pattern buffer. If @code{re_comp} successfully compiles the regular expression, it returns zero. If it can't compile the regular expression, it returns an error string. @code{re_comp}'s error messages are identical to those of @code{re_compile_pattern} (@pxref{GNU Regular Expression Compiling}). @node BSD Searching @subsection BSD Searching Searching the Berkeley Unix way means searching in a string starting at its first character and trying successive positions within it to find a match. Once you've compiled a pattern using @code{re_comp} (@pxref{BSD Regular Expression Compiling}), you can ask Regex to search for that pattern in a string using: @findex re_exec @example int re_exec (char *@var{string}) @end example @noindent @var{string} is the address of the null-terminated string in which you want to search. @code{re_exec} returns either 1 for success or 0 for failure. It automatically uses a GNU fastmap (@pxref{Searching with Fastmaps}). �������������gnulib-20210822~d383792/doc/regexprops-generic.texi�������������������������������������������������0000664�0000000�0000000�00000055271�14110572173�0021561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c Copyright (C) 1994, 1996, 1998, 2000--2001, 2003--2007, 2009--2021 Free @c Software Foundation, Inc. @c @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @c this regular expression description is for: generic @menu * awk regular expression syntax:: * egrep regular expression syntax:: * ed regular expression syntax:: * emacs regular expression syntax:: * gnu-awk regular expression syntax:: * grep regular expression syntax:: * posix-awk regular expression syntax:: * posix-basic regular expression syntax:: * posix-egrep regular expression syntax:: * posix-extended regular expression syntax:: * posix-minimal-basic regular expression syntax:: * sed regular expression syntax:: @end menu @node awk regular expression syntax @subsection @samp{awk} regular expression syntax The character @samp{.} matches any single character except the null character. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} can be used to quote the following character. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are not supported and so @samp{\w}, @samp{\W}, @samp{\<}, @samp{\>}, @samp{\b}, @samp{\B}, @samp{\`}, and @samp{\'} match @samp{w}, @samp{W}, @samp{<}, @samp{>}, @samp{b}, @samp{B}, @samp{`}, and @samp{'} respectively. Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit matches that digit. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{(} @item After the alternation operator @samp{|} @end enumerate The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node egrep regular expression syntax @subsection @samp{egrep} regular expression syntax The character @samp{.} matches any single character. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{(}. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. The characters @samp{*}, @samp{+} and @samp{?} are special anywhere in a regular expression. Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1} The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node ed regular expression syntax @subsection @samp{ed} regular expression syntax The character @samp{.} matches any single character except the null character. @table @samp @item \+ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item \? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item + and ? match themselves. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{\(}. The alternation operator is @samp{\|}. The character @samp{^} only represents the beginning of a string when it appears: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After the alternation operator @samp{\|} @end enumerate The character @samp{$} only represents the end of a string when it appears: @enumerate @item At the end of a regular expression @item Before a close-group, signified by @samp{\)} @item Before the alternation operator @samp{\|} @end enumerate @samp{\*}, @samp{\+} and @samp{\?} are special at any point in a regular expression except: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After the alternation operator @samp{\|} @end enumerate Intervals are specified by @samp{\@{} and @samp{\@}}. Invalid intervals such as @samp{a\@{1z} are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node emacs regular expression syntax @subsection @samp{emacs} regular expression syntax The character @samp{.} matches any single character except newline. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are ignored. Within square brackets, @samp{\} is taken literally. Character classes are not supported, so for example you would need to use @samp{[0-9]} instead of @samp{[[:digit:]]}. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{\(}. The alternation operator is @samp{\|}. The character @samp{^} only represents the beginning of a string when it appears: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After the alternation operator @samp{\|} @end enumerate The character @samp{$} only represents the end of a string when it appears: @enumerate @item At the end of a regular expression @item Before a close-group, signified by @samp{\)} @item Before the alternation operator @samp{\|} @end enumerate @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After the alternation operator @samp{\|} @end enumerate The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node gnu-awk regular expression syntax @subsection @samp{gnu-awk} regular expression syntax The character @samp{.} matches any single character. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} can be used to quote the following character. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{(}. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{(} @item After the alternation operator @samp{|} @end enumerate Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1} The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node grep regular expression syntax @subsection @samp{grep} regular expression syntax The character @samp{.} matches any single character. @table @samp @item \+ indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item \? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item + and ? match themselves. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{\(}. The alternation operator is @samp{\|}. The character @samp{^} only represents the beginning of a string when it appears: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After a newline @item After the alternation operator @samp{\|} @end enumerate The character @samp{$} only represents the end of a string when it appears: @enumerate @item At the end of a regular expression @item Before a close-group, signified by @samp{\)} @item Before a newline @item Before the alternation operator @samp{\|} @end enumerate @samp{\*}, @samp{\+} and @samp{\?} are special at any point in a regular expression except: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @item After a newline @item After the alternation operator @samp{\|} @end enumerate Intervals are specified by @samp{\@{} and @samp{\@}}. Invalid intervals such as @samp{a\@{1z} are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node posix-awk regular expression syntax @subsection @samp{posix-awk} regular expression syntax The character @samp{.} matches any single character except the null character. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} can be used to quote the following character. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are not supported and so @samp{\w}, @samp{\W}, @samp{\<}, @samp{\>}, @samp{\b}, @samp{\B}, @samp{\`}, and @samp{\'} match @samp{w}, @samp{W}, @samp{<}, @samp{>}, @samp{b}, @samp{B}, @samp{`}, and @samp{'} respectively. Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{(}. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except the following places, where they are not allowed: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{(} @item After the alternation operator @samp{|} @end enumerate Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals are treated as literals, for example @samp{a@{1} is treated as @samp{a\@{1} The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node posix-basic regular expression syntax @subsection @samp{posix-basic} regular expression syntax This is a synonym for ed. @node posix-egrep regular expression syntax @subsection @samp{posix-egrep} regular expression syntax This is a synonym for egrep. @node posix-extended regular expression syntax @subsection @samp{posix-extended} regular expression syntax The character @samp{.} matches any single character except the null character. @table @samp @item + indicates that the regular expression should match one or more occurrences of the previous atom or regexp. @item ? indicates that the regular expression should match zero or one occurrence of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{(}. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, @samp{^} can be used to invert the membership of the character class being specified. @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except the following places, where they are not allowed: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{(} @item After the alternation operator @samp{|} @end enumerate Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals such as @samp{a@{1z} are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node posix-minimal-basic regular expression syntax @subsection @samp{posix-minimal-basic} regular expression syntax The character @samp{.} matches any single character except the null character. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. GNU extensions are supported: @enumerate @item @samp{\w} matches a character within a word @item @samp{\W} matches a character which is not within a word @item @samp{\<} matches the beginning of a word @item @samp{\>} matches the end of a word @item @samp{\b} matches a word boundary @item @samp{\B} matches characters which are not a word boundary @item @samp{\`} matches the beginning of the whole input @item @samp{\'} matches the end of the whole input @end enumerate Grouping is performed with backslashes followed by parentheses @samp{\(}, @samp{\)}. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{\(}. The character @samp{^} only represents the beginning of a string when it appears: @enumerate @item At the beginning of a regular expression @item After an open-group, signified by @samp{\(} @end enumerate The character @samp{$} only represents the end of a string when it appears: @enumerate @item At the end of a regular expression @item Before a close-group, signified by @samp{\)} @end enumerate Intervals are specified by @samp{\@{} and @samp{\@}}. Invalid intervals such as @samp{a\@{1z} are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to subexpressions within groups. @node sed regular expression syntax @subsection @samp{sed} regular expression syntax This is a synonym for ed. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/relocatable-maint.texi��������������������������������������������������0000664�0000000�0000000�00000021235�14110572173�0021325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Supporting Relocation @section Supporting Relocation It has been a pain for many users of GNU packages for a long time that packages are not relocatable. It means a user cannot copy a program, installed by another user on the same machine, to his home directory, and have it work correctly (including i18n). So many users need to go through @code{configure; make; make install} with all its dependencies, options, and hurdles. Red Hat, Debian, and other binary distributions solve the ``ease of installation'' problem, but they hardwire path names, usually to @file{/usr} or @file{/usr/local}. This means that users need root privileges to install a binary package, and prevents installing two different versions of the same binary package. A relocatable program can be moved or copied to a different location on the file system. It is possible to make symlinks to the installed and moved programs, and invoke them through the symlink. It is possible to do the same thing with a hard link @emph{only} if the hard link file is in the same directory as the real program. The @code{relocatable-prog} module aims to ease the process of making a GNU program relocatable. It helps overcome two obstacles. First, it aids with relocating the hard-coded references to absolute file names that GNU programs often contain. These references must be fixed up at runtime if a program is to be successfully relocated. The @code{relocatable-prog} module provides a function @code{relocate} that does this job. Second, the loader must be able to find shared libraries linked to relocatable executables or referenced by other shared libraries linked to relocatable executables. The @code{relocatable-prog} module helps out here in a platform-specific way: @itemize @item On most operating systems, it adds a linker option (@option{-rpath}) that causes the dynamic linker to search for libraries in a directory relative to the location of the invoked executable. This works on GNU/Linux and modern versions of GNU/Hurd, GNU/kFreeBSD, macOS, FreeBSD, NetBSD, OpenBSD, Solaris, Haiku. @item On other Unix systems, it installs a trampoline executable. The trampoline sets the environment variable that controls shared library searching (usually @env{LD_LIBRARY_PATH}) and then invokes the real executable. This applies to operating systems such as AIX, HP-UX, or Minix. @item On Windows, the executable's own directory is searched for libraries, so installing shared libraries into the executable's directory is sufficient. @end itemize You can make your program relocatable by following these steps: @enumerate @item Import the @code{relocatable-prog} module. For libraries, use the @code{relocatable-lib} or @code{relocatable-lib-lgpl} module, if the libraries are independent. For installing multiple libraries, at least one of which depends on another one, use the @code{relocatable-prog} module. If you need more than one module, or you need to use them with different settings, you will need multiple copies of gnulib (@pxref{Multiple instances}). @item In every program, add to @code{main} as the first statement (even before setting the locale or doing anything related to libintl): @example set_program_name (argv[0]); @end example The prototype for this function is in @file{progname.h}. @item If you want your code to be portable to platforms that do not support automatic initialization, call @code{set_relocation_prefix}. @item Everywhere where you use a constant pathname from installation-time, wrap it in @code{relocate} so it gets translated to the run-time situation. Example: @example bindtextdomain (PACKAGE, LOCALEDIR); @end example @noindent becomes: @example bindtextdomain (PACKAGE, relocate (LOCALEDIR)); @end example The prototype for this function is in @file{relocatable.h}. There is also a variant of this function, named @code{relocate2}, that makes it easy to reclaim the memory allocated by the call. @item The @code{set_program_name} function can also configure some additional libraries to relocate files that they access, by defining corresponding C preprocessor symbols to 1. The libraries for which this is supported and the corresponding preprocessor symbols are: @table @asis @item libcharset @code{DEPENDS_ON_LIBCHARSET} @item libiconv @code{DEPENDS_ON_LIBICONV} @item libintl @code{DEPENDS_ON_LIBINTL} @end table Defining the symbol for a library makes every program in the package depend on that library, whether the program really uses the library or not, so this feature should be used with some caution. @item If your package installs shell scripts, also import the @code{relocatable-script} module. Then, near the beginning of each shell script that your package installs, add the following: @smallexample @@relocatable_sh@@ prefix="@@prefix@@" exec_prefix="@@exec_prefix@@" # usually needs $prefix. datarootdir="@@datarootdir@@" # usually needs $prefix. if test "@@RELOCATABLE@@" = yes; then bindir="@@bindir@@" orig_installdir="$bindir" # see Makefile.am's *_SCRIPTS variables func_find_curr_installdir # determine curr_installdir func_find_prefixes relocate () @{ echo "$1/" \ | sed -e "s%^$@{orig_installprefix@}/%$@{curr_installprefix@}/%" \ | sed -e 's,/$,,' @} else relocate () @{ echo "$1" @} fi # Get some relocated directory names. sysconfdir=`relocate "@@sysconfdir@@"` # usually needs $prefix. some_datadir=`relocate "@@datadir@@/something"` # usually needs $datarootdir. bindir=`relocate "@@bindir@@"` # usually needs $exec_prefix, hence $prefix. @end smallexample You must adapt the definition of @code{orig_installdir}, depending on where the script gets installed. Also, at the end, instead of @code{sysconfdir} and @code{some_datadir}, transform those variables that you need. @item If your package installs Perl scripts, also import the @code{relocatable-perl} module. Then, near the beginning of each Perl script that your package installs, add the following: @smallexample @@relocatable_pl@@ if ("@@RELOCATABLE@@" eq "yes") @{ my $exec_prefix = "@@exec_prefix@@"; my $orig_installdir = "@@bindir@@"; # see Makefile.am's *_SCRIPTS variables my ($orig_installprefix, $curr_installprefix) = find_prefixes($orig_installdir, find_curr_installdir()); # the subroutine is defined whether or not the enclosing block is executed sub relocate @{ my ($dir) = @@_; if ("@@RELOCATABLE@@" eq "yes") @{ $dir =~ s%^$orig_installprefix/%$curr_installprefix/%; $dir =~ s,/$,,; @} return $dir; @} @} # Get some relocated directory names. # (The gnulib module 'configmake' can help with this.) $sysconfdir = relocate("@@sysconfdir@@"); $some_datadir = relocate(@@datadir@@/something"); @end smallexample You must adapt the definition of @code{$orig_installdir}, depending on where the script gets installed. Also, at the end, instead of @code{sysconfdir} and @code{some_datadir}, transform those variables that you need. @item In your @file{Makefile.am}, for every program @command{foo} that gets installed in, say, @file{$(bindir)}, you add: @example foo_CPPFLAGS = -DINSTALLDIR=\"$(bindir)\" if RELOCATABLE_VIA_LD foo_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)` endif @end example When building gnulib to use with a relocatable library, you need to define the preprocessor symbol @code{IN_LIBRARY}. You may also want to build with @code{ENABLE_COSTLY_RELOCATABLE}, in which case you will also need to define @code{INSTALLDIR}. The following fragment can be added to an override @code{Makefile.am} used to build gnulib (@pxref{Modified build rules}). @example AM_CPPFLAGS += -DIN_LIBRARY -DENABLE_COSTLY_RELOCATABLE if SHLIBS_IN_BINDIR AM_CPPFLAGS += -DINSTALLDIR=\"$(bindir)\" else AM_CPPFLAGS += -DINSTALLDIR=\"$(libdir)\" endif @end example @code{SHLIBS_IN_BINDIR} is defined in @file{configure.ac} as follows: @smallexample AM_CONDITIONAL([SHLIBS_IN_BINDIR], [case "$host_os" in mingw* | cygwin*) true;; *) false;; esac]) @end smallexample @item In your @file{Makefile.am}, for every library @command{libfoo} that gets installed in, say, @file{$(libdir)}, you add: @example if RELOCATABLE_VIA_LD libfoo_la_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(libdir)` endif @end example @item Add a couple of variable assignments to your @file{Makefile.am}. If your package (or any package you rely on, e.g.@: gettext-runtime) will be relocated together with a set of installed shared libraries, then set @code{RELOCATABLE_LIBRARY_PATH} to a colon-separated list of those libraries' directories, e.g. @example RELOCATABLE_LIBRARY_PATH = $(libdir) @end example If your @file{config.h} is not in @file{$(top_builddir)}, then set @code{RELOCATABLE_CONFIG_H_DIR} to its directory, e.g. @example RELOCATABLE_CONFIG_H_DIR = $(top_builddir)/src @end example @end enumerate �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/relocatable.texi��������������������������������������������������������0000664�0000000�0000000�00000005421�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Enabling Relocatability @section Enabling Relocatability It has been a pain for many users of GNU packages for a long time that packages are not relocatable. It means a user cannot copy a program, installed by another user on the same machine, to his home directory, and have it work correctly (including i18n). So many users need to go through @code{configure; make; make install} with all its dependencies, options, and hurdles. Most package management systems, that allow the user to install pre-built binaries of the packages, solve the ``ease of installation'' problem, but they hardwire path names, usually to @file{/usr} or @file{/usr/local}. This means that users need root privileges to install a binary package, and prevents installing two different versions of the same binary package. A relocatable program can be moved or copied to a different location on the file system. It is possible to make symlinks to the installed and moved programs, and invoke them through the symlink. It is possible to do the same thing with a hard link @emph{only} if the hard link file is in the same directory as the real program. To configure a program to be relocatable, add @option{--enable-relocatable} to the @command{configure} command line. On some OSes the executables remember the location of shared libraries and prefer them over any other search path. Therefore, such an executable will look for its shared libraries first in the original installation directory and only then in the current installation directory. Thus, for reliability, it is best to also give a @option{--prefix} option pointing to a directory that does not exist now and which never will be created, e.g.@: @option{--prefix=/nonexistent}. You may use @code{DESTDIR=@var{dest-dir}} on the @command{make} command line to avoid installing into that directory. We do not recommend using a prefix writable by unprivileged users (e.g.@: @file{/tmp/inst$$}) because such a directory can be recreated by an unprivileged user after the original directory has been removed. We also do not recommend prefixes that might be behind an automounter (e.g.@: @file{$HOME/inst$$}) because of the performance impact of directory searching. Here's a sample installation run that takes into account all these recommendations: @example ./configure --enable-relocatable --prefix=/nonexistent make make install DESTDIR=/tmp/inst$$ @end example Installation with @option{--enable-relocatable} will not work for setuid or setgid executables, because such executables search only system library paths for security reasons. The runtime penalty and size penalty are negligible on GNU/Linux (just one system call more when an executable is launched), and small on other systems (the wrapper program just sets an environment variable and executes the real program). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/safe-alloc.texi���������������������������������������������������������0000664�0000000�0000000�00000006010�14110572173�0017742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Safe Allocation Macros @section Safe Allocation Macros The standard C library malloc/realloc/calloc/free APIs are prone to a number of common coding errors. The @code{safe-alloc} module provides macros that make it easier to avoid many of them. It still uses the standard C allocation functions behind the scenes. Some of the memory allocation mistakes that are commonly made are @itemize @bullet @item passing the incorrect number of bytes to @code{malloc}, especially when allocating an array, @item unchecked integer overflow when calculating array sizes, @item fail to check the return value of @code{malloc} and @code{realloc} for errors, @item forget to fully initialize memory just allocated with @code{malloc}, @item duplicate calls to @code{free} by forgetting to set the pointer variable to @code{NULL}, @item leaking memory in calls to @code{realloc} when that call fails. @end itemize The @code{safe-alloc} module addresses these problems in the following way: @itemize @bullet @item It defines macros that wrap around the standard C allocation functions. That makes it possible to use the compiler's knowledge of the size of objects for allocation; it also allows setting pointers passed in as arguments when appropriate. @item It uses return values only for a success/failure error condition flag, and annotates them with GCC's @code{__warn_unused_result__} attribute. @item When allocating a fresh array, it uses @code{calloc} instead of @code{malloc} so that the array's contents are zeroed. However, memory added to an already-existing array is uninitialized. @end itemize @defmac {int} ALLOC (ptr) @findex ALLOC Allocate @code{sizeof *ptr} bytes of memory and store the address of allocated memory in @code{ptr}. Fill the newly allocated memory with zeros. Returns @minus{}1 on failure, 0 on success. @end defmac @defmac {int} ALLOC_N (ptr, count) @findex ALLOC_N Allocate an array of @code{count} elements, each @code{sizeof *ptr} bytes long, and store the address of allocated memory in @code{ptr}. Fill the newly allocated memory with zeros. Returns @minus{}1 on failure, 0 on success. @end defmac @defmac {int} ALLOC_N_UNINITIALIZED (ptr, count) @findex ALLOC_N_UNINITIALIZED Allocate an array of @code{count} elements, each @code{sizeof *ptr} bytes long, and store the address of allocated memory in @code{ptr}. The allocated memory is not initialized. Returns @minus{}1 on failure, 0 on success. @end defmac @defmac {int} REALLOC_N (ptr, count) @findex REALLOC_N Reallocate the memory pointed to by @code{ptr} to be big enough to hold at least @code{count} elements, each @code{sizeof *ptr} bytes long, and store the address of allocated memory in @code{ptr}. If reallocation fails, the @code{ptr} variable is not modified. If the new array is smaller than the old one, discard excess contents; if larger, the newly added storage is not initialized. Returns @minus{}1 on failure, 0 on success. @end defmac @defmac {void} FREE (ptr) @findex FREE Free the memory stored in @code{ptr} and set @code{ptr} to @code{NULL}. @end defmac ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/solaris-versions��������������������������������������������������������0000664�0000000�0000000�00000004162�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sun seems to care about Solaris versus SunOS branding... Here is a mapping table that maps the `uname -sr` values to Sun's marketing names. SunOS 1.x == SunOS 1.x SunOS 2.x == SunOS 2.x SunOS 3.x == SunOS 3.x SunOS 4.0 == SunOS 4.0 SunOS 4.0.x == SunOS 4.0.x Starting with 4.1.1B of SunOS we have the 'Solaris 1.0' release. SunOS 4.1.1B == Solaris 1.0 SunOS 4.1.1.1 == " " SunOS 4.1.1_U1 == " " SunOS 4.1.2 == Solaris 1.0.1 SunOS 4.1.3 == Solaris 1.1A SunOS 4.1.3B == Solaris 1.1B SunOS 4.1.3C == Solaris 1.1C SunOS 4.1.3_U1 == Solaris 1.1.1 SunOS 4.1.3_U1B == Solaris 1.1.1B SunOS 4.1.4 == Solaris 1.1.2 The SunOS 5.x uname output maps to the Solaris 2.x numbers through 2.6 SunOS 5.0 == Solaris 2.0 SunOS 5.1 == Solaris 2.1 SunOS 5.2 == Solaris 2.2 SunOS 5.3 == Solaris 2.3 SunOS 5.4 == Solaris 2.4 SunOS 5.5 == Solaris 2.5 SunOS 5.5.1 == Solaris 2.5.1 SunOS 5.6 == Solaris 2.6 After SunOS 5.6, they started numbering based on the second digit SunOS 5.7 == Solaris 7 SunOS 5.8 == Solaris 8 SunOS 5.9 == Solaris 9 SunOS 5.10 == Solaris 10 The next version will be SunOS 5.11, but as of 2006-08-14 it is not known whether it will also be called "Solaris 11". The common terminology is to use the name "SunOS ..." to designate SunOS 2.x, 3.x, 4.x, and "Solaris ..." to designate SunOS 5.x. Most of these operating systems are obsolete. As of 2006-07-24 only SunOS 5.7 and later are supported by Sun and are therefore of practical porting concern for GNU applications. For the current list, see <https://en.wikipedia.org/wiki/Solaris_(operating_system)#Version_history>. ----- Copyright (C) 2003, 2005-2006, 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/standards.texi����������������������������������������������������������0000664�0000000�0000000�00000476351�14110572173�0017742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename standards.info @settitle GNU Coding Standards @c This date is automagically updated when you save this file: @set lastupdate August 17, 2021 @c %**end of header @dircategory GNU organization @direntry * Standards: (standards). GNU coding standards. @end direntry @c @setchapternewpage odd @setchapternewpage off @c Put everything in one index (arbitrarily chosen to be the concept index). @syncodeindex fn cp @syncodeindex ky cp @syncodeindex pg cp @syncodeindex vr cp @c This is used by a cross ref in make-stds.texi @set CODESTD 1 @copying The GNU coding standards, last updated @value{lastupdate}. Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end copying @titlepage @title GNU Coding Standards @author Richard Stallman, et al. @author last updated @value{lastupdate} @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Coding Standards @insertcopying @end ifnottex @menu * Preface:: About the GNU Coding Standards. * Legal Issues:: Keeping free software free. * Design Advice:: General program design. * Program Behavior:: Program behavior for all programs * Writing C:: Making the best use of C. * Documentation:: Documenting programs. * Managing Releases:: The release process. * References:: Mentioning non-free software or documentation. * GNU Free Documentation License:: Copying and sharing this manual. * Index:: @end menu @node Preface @chapter About the GNU Coding Standards The GNU Coding Standards were written by Richard Stallman and other GNU Project volunteers. Their purpose is to make the GNU system clean, consistent, and easy to install. This document can also be read as a guide to writing portable, robust and reliable programs. It focuses on programs written in C, but many of the rules and principles are useful even if you write in another programming language. The rules often state reasons for writing in a certain way. @cindex where to obtain @code{standards.texi} @cindex downloading this manual If you did not obtain this file directly from the GNU project and recently, please check for a newer version. You can get the GNU Coding Standards from the GNU web server in many different formats, including the Texinfo source, PDF, HTML, DVI, plain text, and more, at: @uref{https://www.gnu.org/prep/standards/}. If you are maintaining an official GNU package, in addition to this document, please read and follow the GNU maintainer information (@pxref{Top, , Contents, maintain, Information for Maintainers of GNU Software}). @cindex @code{gnustandards-commit@@gnu.org} mailing list If you want to receive diffs for every change to these GNU documents, join the mailing list @code{gnustandards-commit@@gnu.org}, via the web interface at @url{https://lists.gnu.org/mailman/listinfo/gnustandards-commit}. Archives are also available there. @cindex @code{bug-standards@@gnu.org} email address @cindex Savannah repository for gnustandards @cindex gnustandards project repository Please send corrections or suggestions for this document to @email{bug-standards@@gnu.org}. If you make a suggestion, please include a suggested new wording for it, to help us consider the suggestion efficiently. We prefer a context diff to the Texinfo source, but if that's difficult for you, you can make a context diff for some other version of this document, or propose it in any way that makes it clear. The source repository for this document can be found at @url{https://savannah.gnu.org/projects/gnustandards}. These standards cover the minimum of what is important when writing a GNU package. Likely, the need for additional standards will come up. Sometimes, you might suggest that such standards be added to this document. If you think your standards would be generally useful, please do suggest them. You should also set standards for your package on many questions not addressed or not firmly specified here. The most important point is to be self-consistent---try to stick to the conventions you pick, and try to document them as much as possible. That way, your program will be more maintainable by others. The GNU Hello program serves as an example of how to follow the GNU coding standards for a trivial program. @uref{https://www.gnu.org/software/hello/hello.html}. This release of the GNU Coding Standards was last updated @value{lastupdate}. @node Legal Issues @chapter Keeping Free Software Free @cindex legal aspects This chapter discusses how you can make sure that GNU software avoids legal difficulties, and other related issues. @menu * Reading Non-Free Code:: Referring to proprietary programs. * Contributions:: Accepting contributions. * Trademarks:: How we deal with trademark issues. @end menu @node Reading Non-Free Code @section Referring to Proprietary Programs @cindex proprietary programs @cindex avoiding proprietary code Don't in any circumstances refer to Unix source code for or during your work on GNU! (Or to any other proprietary programs.) If you have a vague recollection of the internals of a Unix program, this does not absolutely mean you can't write an imitation of it, but do try to organize the imitation internally along different lines, because this is likely to make the details of the Unix version irrelevant and dissimilar to your results. For example, Unix utilities were generally optimized to minimize memory use; if you go for speed instead, your program will be very different. You could keep the entire input file in memory and scan it there instead of using stdio. Use a smarter algorithm discovered more recently than the Unix program. Eliminate use of temporary files. Do it in one pass instead of two (we did this in the assembler). Or, on the contrary, emphasize simplicity instead of speed. For some applications, the speed of today's computers makes simpler algorithms adequate. Or go for generality. For example, Unix programs often have static tables or fixed-size strings, which make for arbitrary limits; use dynamic allocation instead. Make sure your program handles NULs and other funny characters in the input files. Add a programming language for extensibility and write part of the program in that language. Or turn some parts of the program into independently usable libraries. Or use a simple garbage collector instead of tracking precisely when to free memory, or use a new GNU facility such as obstacks. @node Contributions @section Accepting Contributions @cindex legal papers @cindex accepting contributions If the program you are working on is copyrighted by the Free Software Foundation, then when someone else sends you a piece of code to add to the program, we need legal papers to use it---just as we asked you to sign papers initially. @emph{Each} person who makes a nontrivial contribution to a program must sign some sort of legal papers in order for us to have clear title to the program; the main author alone is not enough. So, before adding in any contributions from other people, please tell us, so we can arrange to get the papers. Then wait until we tell you that we have received the signed papers, before you actually use the contribution. This applies both before you release the program and afterward. If you receive diffs to fix a bug, and they make significant changes, we need legal papers for that change. This also applies to comments and documentation files. For copyright law, comments and code are just text. Copyright applies to all kinds of text, so we need legal papers for all kinds. We know it is frustrating to ask for legal papers; it's frustrating for us as well. But if you don't wait, you are going out on a limb---for example, what if the contributor's employer won't sign a disclaimer? You might have to take that code out again! You don't need papers for changes of a few lines here or there, since they are not significant for copyright purposes. Also, you don't need papers if all you get from the suggestion is some ideas, not actual code which you use. For example, if someone sent you one implementation, but you write a different implementation of the same idea, you don't need to get papers. The very worst thing is if you forget to tell us about the other contributor. We could be very embarrassed in court some day as a result. We have more detailed advice for maintainers of GNU packages. If you have reached the stage of maintaining a GNU program (whether released or not), please take a look: @pxref{Legal Matters,,, maintain, Information for GNU Maintainers}. @node Trademarks @section Trademarks @cindex trademarks Please do not include any trademark acknowledgments in GNU software packages or documentation. Trademark acknowledgments are the statements that such-and-such is a trademark of so-and-so. The GNU Project has no objection to the basic idea of trademarks, but these acknowledgments feel like kowtowing, and there is no legal requirement for them, so we don't use them. What is legally required, as regards other people's trademarks, is to avoid using them in ways which a reader might reasonably understand as naming or labeling our own programs or activities. For example, since ``Objective C'' is (or at least was) a trademark, we made sure to say that we provide a ``compiler for the Objective C language'' rather than an ``Objective C compiler''. The latter would have been meant as a shorter way of saying the former, but it does not explicitly state the relationship, so it could be misinterpreted as using ``Objective C'' as a label for the compiler rather than for the language. Please don't use ``win'' as an abbreviation for Microsoft Windows in GNU software or documentation. In hacker terminology, calling something a ``win'' is a form of praise. You're free to praise Microsoft Windows on your own if you want, but please don't do so in GNU packages. Please write ``Windows'' in full, or abbreviate it to ``w.'' @xref{System Portability}. @node Design Advice @chapter General Program Design @cindex program design This chapter discusses some of the issues you should take into account when designing your program. @c Standard or ANSI C @c @c In 1989 the American National Standards Institute (ANSI) standardized @c C as standard X3.159-1989. In December of that year the @c International Standards Organization ISO adopted the ANSI C standard @c making minor changes. In 1990 ANSI then re-adopted ISO standard @c C. This version of C is known as either ANSI C or Standard C. @c A major revision of the C Standard appeared in 1999. @menu * Source Language:: Which languages to use. * Compatibility:: Compatibility with other implementations. * Using Extensions:: Using non-standard features. * Standard C:: Using standard C features. * Conditional Compilation:: Compiling code only if a conditional is true. @end menu @node Source Language @section Which Languages to Use @cindex programming languages When you want to use a language that gets compiled and runs at high speed, the best language to use is C@. C++ is ok too, but please don't make heavy use of templates. So is Java, if you compile it. When highest efficiency is not required, other languages commonly used in the free software community, such as Lisp, Scheme, Python, Ruby, and Java, are OK too. Scheme, as implemented by GNU@tie{}Guile, plays a particular role in the GNU System: it is the preferred language to extend programs written in C/C++, and also a fine language for a wide range of applications. The more GNU components use Guile and Scheme, the more users are able to extend and combine them (@pxref{The Emacs Thesis,,, guile, GNU Guile Reference Manual}). Many programs are designed to be extensible: they include an interpreter for a language that is higher level than C@. Often much of the program is written in that language, too. The Emacs editor pioneered this technique. @cindex Guile @cindex GNOME and Guile The standard extensibility interpreter for GNU software is Guile (@uref{https://www.gnu.org/@/software/@/guile/}), which implements the language Scheme (an especially clean and simple dialect of Lisp). Guile also includes bindings for GTK+/GNOME, making it practical to write modern GUI functionality within Guile. We don't reject programs written in other ``scripting languages'' such as Perl and Python, but using Guile is the path that will lead to overall consistency of the GNU system. @node Compatibility @section Compatibility with Other Implementations @cindex compatibility with C and POSIX standards @cindex C compatibility @cindex POSIX compatibility With occasional exceptions, utility programs and libraries for GNU should be upward compatible with those in Berkeley Unix, and upward compatible with Standard C if Standard C specifies their behavior, and upward compatible with POSIX if POSIX specifies their behavior. When these standards conflict, it is useful to offer compatibility modes for each of them. @cindex options for compatibility Standard C and POSIX prohibit many kinds of extensions. Feel free to make the extensions anyway, and include a @samp{--ansi}, @samp{--posix}, or @samp{--compatible} option to turn them off. However, if the extension has a significant chance of breaking any real programs or scripts, then it is not really upward compatible. So you should try to redesign its interface to make it upward compatible. @cindex @code{POSIXLY_CORRECT}, environment variable Many GNU programs suppress extensions that conflict with POSIX if the environment variable @code{POSIXLY_CORRECT} is defined (even if it is defined with a null value). Please make your program recognize this variable if appropriate. When a feature is used only by users (not by programs or command files), and it is done poorly in Unix, feel free to replace it completely with something totally different and better. (For example, @code{vi} is replaced with Emacs.) But it is nice to offer a compatible feature as well. (There is a free @code{vi} clone, so we offer it.) Additional useful features are welcome regardless of whether there is any precedent for them. @node Using Extensions @section Using Non-standard Features @cindex non-standard extensions Many GNU facilities that already exist support a number of convenient extensions over the comparable Unix facilities. Whether to use these extensions in implementing your program is a difficult question. On the one hand, using the extensions can make a cleaner program. On the other hand, people will not be able to build the program unless the other GNU tools are available. This might cause the program to work on fewer kinds of machines. With some extensions, it might be easy to provide both alternatives. For example, you can define functions with a ``keyword'' @code{INLINE} and define that as a macro to expand into either @code{inline} or nothing, depending on the compiler. In general, perhaps it is best not to use the extensions if you can straightforwardly do without them, but to use the extensions if they are a big improvement. An exception to this rule are the large, established programs (such as Emacs) which run on a great variety of systems. Using GNU extensions in such programs would make many users unhappy, so we don't do that. Another exception is for programs that are used as part of compilation: anything that must be compiled with other compilers in order to bootstrap the GNU compilation facilities. If these require the GNU compiler, then no one can compile them without having them installed already. That would be extremely troublesome in certain cases. @node Standard C @section Standard C and Pre-Standard C @cindex ANSI C standard 1989 Standard C is widespread enough now that it is ok to use its features in programs. There is one exception: do not ever use the ``trigraph'' feature of Standard C. The 1999 and 2011 editions of Standard C are not fully supported on all platforms. If you aim to support compilation by compilers other than GCC, you should not require these C features in your programs. It is ok to use these features conditionally when the compiler supports them. If your program is only meant to compile with GCC, then you can use these features if GCC supports them, when they give substantial benefit. However, it is easy to support pre-standard compilers in most programs, so if you know how to do that, feel free. @cindex function prototypes To support pre-standard C, instead of writing function definitions in standard prototype form, @example int foo (int x, int y) @dots{} @end example @noindent write the definition in pre-standard style like this, @example int foo (x, y) int x, y; @dots{} @end example @noindent and use a separate declaration to specify the argument prototype: @example int foo (int, int); @end example You need such a declaration anyway, in a header file, to get the benefit of prototypes in all the files where the function is called. And once you have the declaration, you normally lose nothing by writing the function definition in the pre-standard style. This technique does not work for integer types narrower than @code{int}. If you think of an argument as being of a type narrower than @code{int}, declare it as @code{int} instead. There are a few special cases where this technique is hard to use. For example, if a function argument needs to hold the system type @code{dev_t}, you run into trouble, because @code{dev_t} is shorter than @code{int} on some machines; but you cannot use @code{int} instead, because @code{dev_t} is wider than @code{int} on some machines. There is no type you can safely use on all machines in a non-standard definition. The only way to support non-standard C and pass such an argument is to check the width of @code{dev_t} using Autoconf and choose the argument type accordingly. This may not be worth the trouble. In order to support pre-standard compilers that do not recognize prototypes, you may want to use a preprocessor macro like this: @example /* Declare the prototype for a general external function. */ #if defined (__STDC__) || defined (WINDOWSNT) #define P_(proto) proto #else #define P_(proto) () #endif @end example @node Conditional Compilation @section Conditional Compilation When supporting configuration options already known when building your program we prefer using @code{if (... )} over conditional compilation, as in the former case the compiler is able to perform more extensive checking of all possible code paths. For example, please write @smallexample if (HAS_FOO) ... else ... @end smallexample @noindent instead of: @smallexample #ifdef HAS_FOO ... #else ... #endif @end smallexample A modern compiler such as GCC will generate exactly the same code in both cases, and we have been using similar techniques with good success in several projects. Of course, the former method assumes that @code{HAS_FOO} is defined as either 0 or 1. While this is not a silver bullet solving all portability problems, and is not always appropriate, following this policy would have saved GCC developers many hours, or even days, per year. In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in GCC which cannot be simply used in @code{if (...)} statements, there is an easy workaround. Simply introduce another macro @code{HAS_REVERSIBLE_CC_MODE} as in the following example: @smallexample #ifdef REVERSIBLE_CC_MODE #define HAS_REVERSIBLE_CC_MODE 1 #else #define HAS_REVERSIBLE_CC_MODE 0 #endif @end smallexample @node Program Behavior @chapter Program Behavior for All Programs This chapter describes conventions for writing robust software. It also describes general standards for error messages, the command line interface, and how libraries should behave. @menu * Non-GNU Standards:: We consider standards such as POSIX; we don't "obey" them. * Semantics:: Writing robust programs. * Libraries:: Library behavior. * Errors:: Formatting error messages. * User Interfaces:: Standards about interfaces generally. * Finding Program Files:: How to find the program's executable and other files that go with it. * Graphical Interfaces:: Standards for graphical interfaces. * Command-Line Interfaces:: Standards for command line interfaces. * Dynamic Plug-In Interfaces:: Standards for dynamic plug-in interfaces. * Option Table:: Table of long options. * OID Allocations:: Table of OID slots for GNU. * Memory Usage:: When and how to care about memory needs. * File Usage:: Which files to use, and where. @end menu @node Non-GNU Standards @section Non-GNU Standards The GNU Project regards standards published by other organizations as suggestions, not orders. We consider those standards, but we do not ``obey'' them. In developing a GNU program, you should implement an outside standard's specifications when that makes the GNU system better overall in an objective sense. When it doesn't, you shouldn't. In most cases, following published standards is convenient for users---it means that their programs or scripts will work more portably. For instance, GCC implements nearly all the features of Standard C as specified by that standard. C program developers would be unhappy if it did not. And GNU utilities mostly follow specifications of POSIX.2; shell script writers and users would be unhappy if our programs were incompatible. But we do not follow either of these specifications rigidly, and there are specific points on which we decided not to follow them, so as to make the GNU system better for users. For instance, Standard C says that nearly all extensions to C are prohibited. How silly! GCC implements many extensions, some of which were later adopted as part of the standard. If you want these constructs to give an error message as ``required'' by the standard, you must specify @samp{--pedantic}, which was implemented only so that we can say ``GCC is a 100% implementation of the standard'', not because there is any reason to actually use it. POSIX.2 specifies that @samp{df} and @samp{du} must output sizes by default in units of 512 bytes. What users want is units of 1k, so that is what we do by default. If you want the ridiculous behavior ``required'' by POSIX, you must set the environment variable @samp{POSIXLY_CORRECT} (which was originally going to be named @samp{POSIX_ME_HARDER}). GNU utilities also depart from the letter of the POSIX.2 specification when they support long-named command-line options, and intermixing options with ordinary arguments. This minor incompatibility with POSIX is never a problem in practice, and it is very useful. In particular, don't reject a new feature, or remove an old one, merely because a standard says it is ``forbidden'' or ``deprecated''. @node Semantics @section Writing Robust Programs @cindex arbitrary limits on data Avoid arbitrary limits on the length or number of @emph{any} data structure, including file names, lines, files, and symbols, by allocating all data structures dynamically. In most Unix utilities, ``long lines are silently truncated''. This is not acceptable in a GNU utility. @cindex @code{NUL} characters @findex libiconv Utilities reading files should not drop NUL characters, or any other nonprinting characters. Programs should work properly with multibyte character encodings, such as UTF-8. You can use libiconv to deal with a range of encodings. @cindex error messages Check every system call for an error return, unless you know you wish to ignore errors. Include the system error text (from @code{strerror}, or equivalent) in @emph{every} error message resulting from a failing system call, as well as the name of the file if any and the name of the utility. Just ``cannot open foo.c'' or ``stat failed'' is not sufficient. @cindex @code{malloc} return value @cindex memory allocation failure Check every call to @code{malloc} or @code{realloc} to see if it returned @code{NULL}. Check @code{realloc} even if you are making the block smaller; in a system that rounds block sizes to a power of 2, @code{realloc} may get a different block if you ask for less space. You must expect @code{free} to alter the contents of the block that was freed. Anything you want to fetch from the block, you must fetch before calling @code{free}. If @code{malloc} fails in a noninteractive program, make that a fatal error. In an interactive program (one that reads commands from the user), it is better to abort the command and return to the command reader loop. This allows the user to kill other processes to free up virtual memory, and then try the command again. @cindex command-line arguments, decoding Use @code{getopt_long} to decode arguments, unless the argument syntax makes this unreasonable. When static storage is to be written in during program execution, use explicit C code to initialize it. This way, restarting the program (without reloading it), or part of it, will reinitialize those variables. Reserve C initialized declarations for data that will not be changed. @c ADR: why? Try to avoid low-level interfaces to obscure Unix data structures (such as file directories, utmp, or the layout of kernel memory), since these are less likely to work compatibly. If you need to find all the files in a directory, use @code{readdir} or some other high-level interface. These are supported compatibly by GNU. @cindex signal handling The preferred signal handling facilities are the BSD variant of @code{signal}, and the POSIX @code{sigaction} function; the alternative USG @code{signal} interface is an inferior design. Nowadays, using the POSIX signal functions may be the easiest way to make a program portable. If you use @code{signal}, then on GNU/Linux systems running GNU libc version 1, you should include @file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD behavior. It is up to you whether to support systems where @code{signal} has only the USG behavior, or give up on them. @cindex impossible conditions In error checks that detect ``impossible'' conditions, just abort. There is usually no point in printing any message. These checks indicate the existence of bugs. Whoever wants to fix the bugs will have to read the source code and run a debugger. So explain the problem with comments in the source. The relevant data will be in variables, which are easy to examine with the debugger, so there is no point moving them elsewhere. Do not use a count of errors as the exit status for a program. @emph{That does not work}, because exit status values are limited to 8 bits (0 through 255). A single run of the program might have 256 errors; if you try to return 256 as the exit status, the parent process will see 0 as the status, and it will appear that the program succeeded. @cindex temporary files @cindex @code{TMPDIR} environment variable If you make temporary files, check the @code{TMPDIR} environment variable; if that variable is defined, use the specified directory instead of @file{/tmp}. In addition, be aware that there is a possible security problem when creating temporary files in world-writable directories. In C, you can avoid this problem by creating temporary files in this manner: @example fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600); @end example @noindent or by using the @code{mkstemps} function from Gnulib (@pxref{mkstemps,,, gnulib, Gnulib}). In bash, use @code{set -C} (long name @code{noclobber}) to avoid this problem. In addition, the @code{mktemp} utility is a more general solution for creating temporary files from shell scripts (@pxref{mktemp invocation,,, coreutils, GNU Coreutils}). @node Libraries @section Library Behavior @cindex libraries Try to make library functions reentrant. If they need to do dynamic storage allocation, at least try to avoid any nonreentrancy aside from that of @code{malloc} itself. Here are certain name conventions for libraries, to avoid name conflicts. Choose a name prefix for the library, more than two characters long. All external function and variable names should start with this prefix. In addition, there should only be one of these in any given library member. This usually means putting each one in a separate source file. An exception can be made when two external symbols are always used together, so that no reasonable program could use one without the other; then they can both go in the same file. External symbols that are not documented entry points for the user should have names beginning with @samp{_}. The @samp{_} should be followed by the chosen name prefix for the library, to prevent collisions with other libraries. These can go in the same files with user entry points if you like. Static functions and variables can be used as you like and need not fit any naming convention. @node Errors @section Formatting Error Messages @cindex formatting error messages @cindex error messages, formatting Error messages from compilers should look like this: @example @var{sourcefile}:@var{lineno}: @var{message} @end example @noindent If you want to mention the column number, use one of these formats: @example @var{sourcefile}:@var{lineno}:@var{column}: @var{message} @var{sourcefile}:@var{lineno}.@var{column}: @var{message} @end example @noindent Line numbers should start from 1 at the beginning of the file, and column numbers should start from 1 at the beginning of the line. (Both of these conventions are chosen for compatibility.) Calculate column numbers assuming that space and all ASCII printing characters have equal width, and assuming tab stops every 8 columns. For non-ASCII characters, Unicode character widths should be used when in a UTF-8 locale; GNU libc and GNU gnulib provide suitable @code{wcwidth} functions. The error message can also give both the starting and ending positions of the erroneous text. There are several formats so that you can avoid redundant information such as a duplicate line number. Here are the possible formats: @example @var{sourcefile}:@var{line1}.@var{column1}-@var{line2}.@var{column2}: @var{message} @var{sourcefile}:@var{line1}.@var{column1}-@var{column2}: @var{message} @var{sourcefile}:@var{line1}-@var{line2}: @var{message} @end example @noindent When an error is spread over several files, you can use this format: @example @var{file1}:@var{line1}.@var{column1}-@var{file2}:@var{line2}.@var{column2}: @var{message} @end example Error messages from other noninteractive programs should look like this: @example @var{program}:@var{sourcefile}:@var{lineno}: @var{message} @end example @noindent when there is an appropriate source file, or like this: @example @var{program}: @var{message} @end example @noindent when there is no relevant source file. If you want to mention the column number, use this format: @example @var{program}:@var{sourcefile}:@var{lineno}:@var{column}: @var{message} @end example In an interactive program (one that is reading commands from a terminal), it is better not to include the program name in an error message. The place to indicate which program is running is in the prompt or with the screen layout. (When the same program runs with input from a source other than a terminal, it is not interactive and would do best to print error messages using the noninteractive style.) The string @var{message} should not begin with a capital letter when it follows a program name and/or file name, because that isn't the beginning of a sentence. (The sentence conceptually starts at the beginning of the line.) Also, it should not end with a period. Error messages from interactive programs, and other messages such as usage messages, should start with a capital letter. But they should not end with a period. @node User Interfaces @section Standards for Interfaces Generally @cindex program name and its behavior @cindex behavior, dependent on program's name Please don't make the behavior of a utility depend on the name used to invoke it. It is useful sometimes to make a link to a utility with a different name, and that should not change what it does. Thus, if you make @file{foo} a link to @file{ls}, the program should behave the same regardless of which of those names is used to invoke it. Instead, use a run time option or a compilation switch or both to select among the alternate behaviors. You can also build two versions of the program, with different default behaviors, and install them under two different names. @cindex output device and program's behavior Likewise, please don't make the behavior of a command-line program depend on the type of output device it gets as standard output or standard input. Device independence is an important principle of the system's design; do not compromise it merely to save someone from typing an option now and then. (Variation in error message syntax when using a terminal is ok, because that is a side issue that people do not depend on.) If you think one behavior is most useful when the output is to a terminal, and another is most useful when the output is a file or a pipe, then it is usually best to make the default behavior the one that is useful with output to a terminal, and have an option for the other behavior. You can also build two different versions of the program with different names. There is an exception for programs whose output in certain cases is binary data. Sending such output to a terminal is useless and can cause trouble. If such a program normally sends its output to stdout, it should detect, in these cases, when the output is a terminal and give an error message instead. The @code{-f} option should override this exception, thus permitting the output to go to the terminal. Compatibility requires certain programs to depend on the type of output device. It would be disastrous if @code{ls} or @code{sh} did not do so in the way all users expect. In some of these cases, we supplement the program with a preferred alternate version that does not depend on the output device type. For example, we provide a @code{dir} program much like @code{ls} except that its default output format is always multi-column format. @node Finding Program Files @section Finding the Program's Executable and Associated Files A program may need to find the executable file it was started with, so as to relaunch the same program. It may need to find associated files, either source files or files constructed by building, that it uses at run time. The way to find them starts with looking at @code{argv[0]}. If that string contains a slash, it is by convention the file name of the executable and its directory part is the directory that contained the executable. This is the case when the program was not found through @env{PATH}, which normally means it was built but not installed, and run from the build directory. The program can use the @code{argv[0]} file name to relaunch itself, and can look in its directory part for associated files. If that file name is not absolute, then it is relative to the working directory in which the program started. If @code{argv[0]} does not contain a slash, it is a command name whose executable was found via @env{PATH}. The program should search for that name in the directories in @env{PATH}, interpreting @file{.} as the working directory that was current when the program started. If this procedure finds the executable, we call the directory it was found in the @dfn{invocation directory}. The program should check for the presence in that directory of the associated files it needs. If the program's executable is normally built in a subdirectory of the main build directory, and the main build directory contains associated files (perhaps including subdirectories), the program should look at the parent of the invocation directory, checking for the associated files and subdirectories the main build directory should contain. If the invocation directory doesn't contain what's needed, but the executable file name is a symbolic link, the program should try using the link target's containing directory as the invocation directory. If this procedure doesn't come up with an invocation directory that is valid---normally the case for an installed program that was found via @env{PATH}---the program should look for the associated files in the directories where the program's makefile installs them. @xref{Directory Variables}. Providing valid information in @code{argv[0]} is a convention, not guaranteed. Well-behaved programs that launch other programs, such as shells, follow the convention; your code should follow it too, when launching other programs. But it is always possible to launch the program and give a nonsensical value in @code{argv[0]}. Therefore, any program that needs to know the location of its executable, or that of of other associated files, should offer the user environment variables to specify those locations explicitly. @strong{Don't give special privilege, such as with the @code{setuid} bit, to programs that will search heuristically for associated files or for their own executables when invoked that way.} Limit that privilege to programs that find associated files in hard-coded installed locations such as under @file{/usr} and @file{/etc}. @c ??? Is even that safe, in a setuid program? @xref{Bourne Shell Variables,,, bash, Bash Reference Manual}, for more information about @env{PATH}. @node Graphical Interfaces @section Standards for Graphical Interfaces @cindex graphical user interface @cindex interface styles @cindex user interface styles @cindex GTK+ @cindex GNUstep When you write a program that provides a graphical user interface, please make it work with the X Window System, using the GTK+ toolkit or the GNUstep toolkit, unless the functionality specifically requires some alternative (for example, ``displaying jpeg images while in console mode''). In addition, please provide a command-line interface to control the functionality. (In many cases, the graphical user interface can be a separate program which invokes the command-line program.) This is so that the same jobs can be done from scripts. @cindex CORBA @cindex GNOME @cindex D-bus @cindex keyboard interface @cindex library interface Please also consider providing a D-bus interface for use from other running programs, such as within GNOME@. (GNOME used to use CORBA for this, but that is being phased out.) In addition, consider providing a library interface (for use from C), and perhaps a keyboard-driven console interface (for use by users from console mode). Once you are doing the work to provide the functionality and the graphical interface, these won't be much extra work. Please make your program interoperate with access technology such as screen readers (see @url{https://www.gnu.org/accessibility/accessibility.html}). This should be automatic if you use GTK+. @node Command-Line Interfaces @section Standards for Command Line Interfaces @cindex command-line interface @findex getopt It is a good idea to follow the POSIX guidelines for the command-line options of a program. The easiest way to do this is to use @code{getopt} to parse them. Note that the GNU version of @code{getopt} will normally permit options anywhere among the arguments unless the special argument @samp{--} is used. This is not what POSIX specifies; it is a GNU extension. @cindex long-named options Please define long-named options that are equivalent to the single-letter Unix-style options. We hope to make GNU more user friendly this way. This is easy to do with the GNU function @code{getopt_long}. One of the advantages of long-named options is that they can be consistent from program to program. For example, users should be able to expect the ``verbose'' option of any GNU program which has one, to be spelled precisely @samp{--verbose}. To achieve this uniformity, look at the table of common long-option names when you choose the option names for your program (@pxref{Option Table}). It is usually a good idea for file names given as ordinary arguments to be input files only; any output files would be specified using options (preferably @samp{-o} or @samp{--output}). Even if you allow an output file name as an ordinary argument for compatibility, try to provide an option as another way to specify it. This will lead to more consistency among GNU utilities, and fewer idiosyncrasies for users to remember. @cindex standard command-line options @cindex options, standard command-line @cindex CGI programs, standard options for @cindex PATH_INFO, specifying standard options as All programs should support two standard options: @samp{--version} and @samp{--help}. CGI programs should accept these as command-line options, and also if given as the @env{PATH_INFO}; for instance, visiting @indicateurl{http://example.org/p.cgi/--help} in a browser should output the same information as invoking @samp{p.cgi --help} from the command line. @menu * --version:: The standard output for --version. * --help:: The standard output for --help. @end menu @node --version @subsection @option{--version} @cindex @samp{--version} output The standard @code{--version} option should direct the program to print information about its name, version, origin and legal status, all on standard output, and then exit successfully. Other options and arguments should be ignored once this is seen, and the program should not perform its normal function. @cindex canonical name of a program @cindex program's canonical name The first line is meant to be easy for a program to parse; the version number proper starts after the last space. In addition, it contains the canonical name for this program, in this format: @example GNU Emacs 19.30 @end example @noindent The program's name should be a constant string; @emph{don't} compute it from @code{argv[0]}. The idea is to state the standard or canonical name for the program, not its file name. There are other ways to find out the precise file name where a command is found in @code{PATH}. If the program is a subsidiary part of a larger package, mention the package name in parentheses, like this: @example emacsserver (GNU Emacs) 19.30 @end example @noindent If the package has a version number which is different from this program's version number, you can mention the package version number just before the close-parenthesis. If you @emph{need} to mention the version numbers of libraries which are distributed separately from the package which contains this program, you can do so by printing an additional line of version info for each library you want to mention. Use the same format for these lines as for the first line. Please do not mention all of the libraries that the program uses ``just for completeness''---that would produce a lot of unhelpful clutter. Please mention library version numbers only if you find in practice that they are very important to you in debugging. The following line, after the version number line or lines, should be a copyright notice. If more than one copyright notice is called for, put each on a separate line. Next should follow a line stating the license, preferably using one of abbreviations below, and a brief statement that the program is free software, and that users are free to copy and change it. Also mention that there is no warranty, to the extent permitted by law. See recommended wording below. It is ok to finish the output with a list of the major authors of the program, as a way of giving credit. Here's an example of output that follows these rules: @smallexample GNU hello 2.3 Copyright (C) 2007 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. @end smallexample You should adapt this to your program, of course, filling in the proper year, copyright holder, name of program, and the references to distribution terms, and changing the rest of the wording as necessary. This copyright notice only needs to mention the most recent year in which changes were made---there's no need to list the years for previous versions' changes. You don't have to mention the name of the program in these notices, if that is inconvenient, since it appeared in the first line. (The rules are different for copyright notices in source files; @pxref{Copyright Notices,,,maintain,Information for GNU Maintainers}.) Translations of the above lines must preserve the validity of the copyright notices (@pxref{Internationalization}). If the translation's character set supports it, the @samp{(C)} should be replaced with the copyright symbol, as follows: @ifinfo (the official copyright symbol, which is the letter C in a circle); @end ifinfo @ifnotinfo @copyright{} @end ifnotinfo Write the word ``Copyright'' exactly like that, in English. Do not translate it into another language. International treaties recognize the English word ``Copyright''; translations into other languages do not have legal significance. Finally, here is the table of our suggested license abbreviations. Any abbreviation can be followed by @samp{v@var{version}[+]}, meaning that particular version, or later versions with the @samp{+}, as shown above. In the case of a GNU license, @emph{always} indicate the permitted versions in this way. In the case of exceptions for extra permissions with the GPL, we use @samp{/} for a separator; the version number can follow the license abbreviation as usual, as in the examples below. @table @asis @item GPL GNU General Public License, @url{https://www.gnu.org/@/licenses/@/gpl.html}. @item LGPL GNU Lesser General Public License, @url{https://www.gnu.org/@/licenses/@/lgpl.html}. @item GPL/Ada GNU GPL with the exception for Ada. @item Apache The Apache Software Foundation license, @url{https://directory.fsf.org/@/wiki/@/License:Apache2.0}. @item Artistic The Artistic license used for Perl, @url{https://directory.fsf.org/@/wiki/@/License:ArtisticLicense2.0}. @item Expat The Expat license, @url{https://directory.fsf.org/@/wiki/@/License:Expat}. @item MPL The Mozilla Public License, @url{https://directory.fsf.org/@/wiki/@/License:MPLv2.0}. @item OBSD The original (4-clause) BSD license, incompatible with the GNU GPL,@* @url{https://directory.fsf.org/@/wiki/@/License:BSD_4Clause}. @item PHP The license used for PHP, @url{https://directory.fsf.org/@/wiki/@/License:PHPv3.01}. @item public domain The non-license that is being in the public domain,@* @url{https://www.gnu.org/@/licenses/@/license-list.html#PublicDomain}. @item Python The license for Python, @url{https://directory.fsf.org/@/wiki/@/License:Python2.0.1}. @item RBSD The revised (3-clause) BSD, compatible with the GNU GPL,@* @url{https://directory.fsf.org/@/wiki/@/License:BSD_3Clause}. @item X11 The simple non-copyleft license used for most versions of the X Window System, @url{https://directory.fsf.org/@/wiki/@/License:X11}. @item Zlib The license for Zlib, @url{https://directory.fsf.org/@/wiki/@/License:Zlib}. @end table More information about these licenses and many more are on the GNU licensing web pages, @url{https://www.gnu.org/@/licenses/@/license-list.html}. @node --help @subsection @option{--help} @cindex @samp{--help} output The standard @code{--help} option should output brief documentation for how to invoke the program, on standard output, then exit successfully. Other options and arguments should be ignored once this is seen, and the program should not perform its normal function. @cindex address for bug reports @cindex bug reports Near the end of the @samp{--help} option's output, please place lines giving the email address for bug reports, the package's home page (normally @indicateurl{https://www.gnu.org/software/@var{pkg}}), and the general page for help using GNU programs. The format should be like this: @example Report bugs to: @var{mailing-address} @var{pkg} home page: <https://www.gnu.org/software/@var{pkg}/> General help using GNU software: <https://www.gnu.org/gethelp/> @end example It is ok to mention other appropriate mailing lists and web pages. @node Dynamic Plug-In Interfaces @section Standards for Dynamic Plug-in Interfaces @cindex plug-ins @cindex dynamic plug-ins Another aspect of keeping free programs free is encouraging development of free plug-ins, and discouraging development of proprietary plug-ins. Many GNU programs will not have anything like plug-ins at all, but those that do should follow these practices. First, the general plug-in architecture design should closely tie the plug-in to the original code, such that the plug-in and the base program are parts of one extended program. For GCC, for example, plug-ins receive and modify GCC's internal data structures, and so clearly form an extended program with the base GCC. @vindex plugin_is_GPL_compatible Second, you should require plug-in developers to affirm that their plug-ins are released under an appropriate license. This should be enforced with a simple programmatic check. For GCC, again for example, a plug-in must define the global symbol @code{plugin_is_GPL_compatible}, thus asserting that the plug-in is released under a GPL-compatible license (@pxref{Plugins,, Plugins, gccint, GCC Internals}). By adding this check to your program you are not creating a new legal requirement. The GPL itself requires plug-ins to be free software, licensed compatibly. As long as you have followed the first rule above to keep plug-ins closely tied to your original program, the GPL and AGPL already require those plug-ins to be released under a compatible license. The symbol definition in the plug-in---or whatever equivalent works best in your program---makes it harder for anyone who might distribute proprietary plug-ins to legally defend themselves. If a case about this got to court, we can point to that symbol as evidence that the plug-in developer understood that the license had this requirement. @node Option Table @section Table of Long Options @cindex long option names @cindex table of long options Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that a new program might want to be compatible with. If you use names not already in the table, please send @email{bug-standards@@gnu.org} a list of them, with their meanings, so we can update the table. @c Please leave newlines between items in this table; it's much easier @c to update when it isn't completely squashed together and unreadable. @c When there is more than one short option for a long option name, put @c a semicolon between the lists of the programs that use them, not a @c period. --friedman @table @samp @item after-date @samp{-N} in @code{tar}. @item all @samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname}, and @code{unexpand}. @item all-text @samp{-a} in @code{diff}. @item almost-all @samp{-A} in @code{ls}. @item append @samp{-a} in @code{etags}, @code{tee}, @code{time}; @samp{-r} in @code{tar}. @item archive @samp{-a} in @code{cp}. @item archive-name @samp{-n} in @code{shar}. @item arglength @samp{-l} in @code{m4}. @item ascii @samp{-a} in @code{diff}. @item assign @samp{-v} in @code{gawk}. @item assume-new @samp{-W} in @code{make}. @item assume-old @samp{-o} in @code{make}. @item auto-check @samp{-a} in @code{recode}. @item auto-pager @samp{-a} in @code{wdiff}. @item auto-reference @samp{-A} in @code{ptx}. @item avoid-wraps @samp{-n} in @code{wdiff}. @item background For server programs, run in the background. @item backward-search @samp{-B} in @code{ctags}. @item basename @samp{-f} in @code{shar}. @item batch Used in GDB. @item baud Used in GDB. @item before @samp{-b} in @code{tac}. @item binary @samp{-b} in @code{cpio} and @code{diff}. @item bits-per-code @samp{-b} in @code{shar}. @item block-size Used in @code{cpio} and @code{tar}. @item blocks @samp{-b} in @code{head} and @code{tail}. @item break-file @samp{-b} in @code{ptx}. @item brief Used in various programs to make output shorter. @item bytes @samp{-c} in @code{head}, @code{split}, and @code{tail}. @item c@t{++} @samp{-C} in @code{etags}. @item catenate @samp{-A} in @code{tar}. @item cd Used in various programs to specify the directory to use. @item changes @samp{-c} in @code{chgrp} and @code{chown}. @item classify @samp{-F} in @code{ls}. @item colons @samp{-c} in @code{recode}. @item command @samp{-c} in @code{su}; @samp{-x} in GDB. @item compare @samp{-d} in @code{tar}. @item compat Used in @code{gawk}. @item compress @samp{-Z} in @code{tar} and @code{shar}. @item concatenate @samp{-A} in @code{tar}. @item confirmation @samp{-w} in @code{tar}. @item context Used in @code{diff}. @item copyleft @samp{-W copyleft} in @code{gawk}. @item copyright @samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff}; @samp{-W copyright} in @code{gawk}. @item core Used in GDB. @item count @samp{-q} in @code{who}. @item count-links @samp{-l} in @code{du}. @item create Used in @code{tar} and @code{cpio}. @item cut-mark @samp{-c} in @code{shar}. @item cxref @samp{-x} in @code{ctags}. @item date @samp{-d} in @code{touch}. @item debug @samp{-d} in @code{make} and @code{m4}; @samp{-t} in Bison. @item define @samp{-D} in @code{m4}. @item defines @samp{-d} in Bison and @code{ctags}. @item delete @samp{-D} in @code{tar}. @item dereference @samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du}, @code{ls}, and @code{tar}. @item dereference-args @samp{-D} in @code{du}. @item device Specify an I/O device (special file name). @item diacritics @samp{-d} in @code{recode}. @item dictionary-order @samp{-d} in @code{look}. @item diff @samp{-d} in @code{tar}. @item digits @samp{-n} in @code{csplit}. @item directory Specify the directory to use, in various programs. In @code{ls}, it means to show directories themselves rather than their contents. In @code{rm} and @code{ln}, it means to not treat links to directories specially. @item discard-all @samp{-x} in @code{strip}. @item discard-locals @samp{-X} in @code{strip}. @item dry-run @samp{-n} in @code{make}. @item ed @samp{-e} in @code{diff}. @item elide-empty-files @samp{-z} in @code{csplit}. @item end-delete @samp{-x} in @code{wdiff}. @item end-insert @samp{-z} in @code{wdiff}. @item entire-new-file @samp{-N} in @code{diff}. @item environment-overrides @samp{-e} in @code{make}. @item eof @samp{-e} in @code{xargs}. @item epoch Used in GDB. @item error-limit Used in @code{makeinfo}. @item error-output @samp{-o} in @code{m4}. @item escape @samp{-b} in @code{ls}. @item exclude-from @samp{-X} in @code{tar}. @item exec Used in GDB. @item exit @samp{-x} in @code{xargs}. @item exit-0 @samp{-e} in @code{unshar}. @item expand-tabs @samp{-t} in @code{diff}. @item expression @samp{-e} in @code{sed}. @item extern-only @samp{-g} in @code{nm}. @item extract @samp{-i} in @code{cpio}; @samp{-x} in @code{tar}. @item faces @samp{-f} in @code{finger}. @item fast @samp{-f} in @code{su}. @item fatal-warnings @samp{-E} in @code{m4}. @item file @samp{-f} in @code{gawk}, @code{info}, @code{make}, @code{mt}, @code{sed}, and @code{tar}. @item field-separator @samp{-F} in @code{gawk}. @item file-prefix @samp{-b} in Bison. @item file-type @samp{-F} in @code{ls}. @item files-from @samp{-T} in @code{tar}. @item fill-column Used in @code{makeinfo}. @item flag-truncation @samp{-F} in @code{ptx}. @item fixed-output-files @samp{-y} in Bison. @item follow @samp{-f} in @code{tail}. @item footnote-style Used in @code{makeinfo}. @item force @samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}. @item force-prefix @samp{-F} in @code{shar}. @item foreground For server programs, run in the foreground; in other words, don't do anything special to run the server in the background. @item format Used in @code{ls}, @code{time}, and @code{ptx}. @item freeze-state @samp{-F} in @code{m4}. @item fullname Used in GDB. @item gap-size @samp{-g} in @code{ptx}. @item get @samp{-x} in @code{tar}. @item graphic @samp{-i} in @code{ul}. @item graphics @samp{-g} in @code{recode}. @item group @samp{-g} in @code{install}. @item gzip @samp{-z} in @code{tar} and @code{shar}. @item hashsize @samp{-H} in @code{m4}. @item header @samp{-h} in @code{objdump} and @code{recode} @item heading @samp{-H} in @code{who}. @item help Used to ask for brief usage information. @item here-delimiter @samp{-d} in @code{shar}. @item hide-control-chars @samp{-q} in @code{ls}. @item html In @code{makeinfo}, output HTML. @item idle @samp{-u} in @code{who}. @item ifdef @samp{-D} in @code{diff}. @item ignore @samp{-I} in @code{ls}; @samp{-x} in @code{recode}. @item ignore-all-space @samp{-w} in @code{diff}. @item ignore-backups @samp{-B} in @code{ls}. @item ignore-blank-lines @samp{-B} in @code{diff}. @item ignore-case @samp{-f} in @code{look} and @code{ptx}; @samp{-i} in @code{diff} and @code{wdiff}. @item ignore-errors @samp{-i} in @code{make}. @item ignore-file @samp{-i} in @code{ptx}. @item ignore-indentation @samp{-I} in @code{etags}. @item ignore-init-file @samp{-f} in Oleo. @item ignore-interrupts @samp{-i} in @code{tee}. @item ignore-matching-lines @samp{-I} in @code{diff}. @item ignore-space-change @samp{-b} in @code{diff}. @item ignore-zeros @samp{-i} in @code{tar}. @item include @samp{-i} in @code{etags}; @samp{-I} in @code{m4}. @item include-dir @samp{-I} in @code{make}. @item incremental @samp{-G} in @code{tar}. @item info @samp{-i}, @samp{-l}, and @samp{-m} in Finger. @item init-file In some programs, specify the name of the file to read as the user's init file. @item initial @samp{-i} in @code{expand}. @item initial-tab @samp{-T} in @code{diff}. @item inode @samp{-i} in @code{ls}. @item interactive @samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm}; @samp{-e} in @code{m4}; @samp{-p} in @code{xargs}; @samp{-w} in @code{tar}. @item intermix-type @samp{-p} in @code{shar}. @item iso-8601 Used in @code{date} @item jobs @samp{-j} in @code{make}. @item just-print @samp{-n} in @code{make}. @item keep-going @samp{-k} in @code{make}. @item keep-files @samp{-k} in @code{csplit}. @item kilobytes @samp{-k} in @code{du} and @code{ls}. @item language @samp{-l} in @code{etags}. @item less-mode @samp{-l} in @code{wdiff}. @item level-for-gzip @samp{-g} in @code{shar}. @item line-bytes @samp{-C} in @code{split}. @item lines Used in @code{split}, @code{head}, and @code{tail}. @item link @samp{-l} in @code{cpio}. @item lint @itemx lint-old Used in @code{gawk}. @item list @samp{-t} in @code{cpio}; @samp{-l} in @code{recode}. @item list @samp{-t} in @code{tar}. @item literal @samp{-N} in @code{ls}. @item load-average @samp{-l} in @code{make}. @item login Used in @code{su}. @item machine Used in @code{uname}. @item macro-name @samp{-M} in @code{ptx}. @item mail @samp{-m} in @code{hello} and @code{uname}. @item make-directories @samp{-d} in @code{cpio}. @item makefile @samp{-f} in @code{make}. @item mapped Used in GDB. @item max-args @samp{-n} in @code{xargs}. @item max-chars @samp{-n} in @code{xargs}. @item max-lines @samp{-l} in @code{xargs}. @item max-load @samp{-l} in @code{make}. @item max-procs @samp{-P} in @code{xargs}. @item mesg @samp{-T} in @code{who}. @item message @samp{-T} in @code{who}. @item minimal @samp{-d} in @code{diff}. @item mixed-uuencode @samp{-M} in @code{shar}. @item mode @samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}. @item modification-time @samp{-m} in @code{tar}. @item multi-volume @samp{-M} in @code{tar}. @item name-prefix @samp{-a} in Bison. @item nesting-limit @samp{-L} in @code{m4}. @item net-headers @samp{-a} in @code{shar}. @item new-file @samp{-W} in @code{make}. @item no-builtin-rules @samp{-r} in @code{make}. @item no-character-count @samp{-w} in @code{shar}. @item no-check-existing @samp{-x} in @code{shar}. @item no-common @samp{-3} in @code{wdiff}. @item no-create @samp{-c} in @code{touch}. @item no-defines @samp{-D} in @code{etags}. @item no-deleted @samp{-1} in @code{wdiff}. @item no-dereference @samp{-d} in @code{cp}. @item no-inserted @samp{-2} in @code{wdiff}. @item no-keep-going @samp{-S} in @code{make}. @item no-lines @samp{-l} in Bison. @item no-piping @samp{-P} in @code{shar}. @item no-prof @samp{-e} in @code{gprof}. @item no-regex @samp{-R} in @code{etags}. @item no-sort @samp{-p} in @code{nm}. @item no-splash Don't print a startup splash screen. @item no-split Used in @code{makeinfo}. @item no-static @samp{-a} in @code{gprof}. @item no-time @samp{-E} in @code{gprof}. @item no-timestamp @samp{-m} in @code{shar}. @item no-validate Used in @code{makeinfo}. @item no-wait Used in @code{emacsclient}. @item no-warn Used in various programs to inhibit warnings. @item node @samp{-n} in @code{info}. @item nodename @samp{-n} in @code{uname}. @item nonmatching @samp{-f} in @code{cpio}. @item nstuff @samp{-n} in @code{objdump}. @item null @samp{-0} in @code{xargs}. @item number @samp{-n} in @code{cat}. @item number-nonblank @samp{-b} in @code{cat}. @item numeric-sort @samp{-n} in @code{nm}. @item numeric-uid-gid @samp{-n} in @code{cpio} and @code{ls}. @item nx Used in GDB. @item old-archive @samp{-o} in @code{tar}. @item old-file @samp{-o} in @code{make}. @item one-file-system @samp{-l} in @code{tar}, @code{cp}, and @code{du}. @item only-file @samp{-o} in @code{ptx}. @item only-prof @samp{-f} in @code{gprof}. @item only-time @samp{-F} in @code{gprof}. @item options @samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount}, @code{fdmountd}, and @code{fdumount}. @item output In various programs, specify the output file name. @item output-prefix @samp{-o} in @code{shar}. @item override @samp{-o} in @code{rm}. @item overwrite @samp{-c} in @code{unshar}. @item owner @samp{-o} in @code{install}. @item paginate @samp{-l} in @code{diff}. @item paragraph-indent Used in @code{makeinfo}. @item parents @samp{-p} in @code{mkdir} and @code{rmdir}. @item pass-all @samp{-p} in @code{ul}. @item pass-through @samp{-p} in @code{cpio}. @item port @samp{-P} in @code{finger}. @item portability @samp{-c} in @code{cpio} and @code{tar}. @item posix Used in @code{gawk}. @item prefix-builtins @samp{-P} in @code{m4}. @item prefix @samp{-f} in @code{csplit}. @item preserve Used in @code{tar} and @code{cp}. @item preserve-environment @samp{-p} in @code{su}. @item preserve-modification-time @samp{-m} in @code{cpio}. @item preserve-order @samp{-s} in @code{tar}. @item preserve-permissions @samp{-p} in @code{tar}. @item print @samp{-l} in @code{diff}. @item print-chars @samp{-L} in @code{cmp}. @item print-data-base @samp{-p} in @code{make}. @item print-directory @samp{-w} in @code{make}. @item print-file-name @samp{-o} in @code{nm}. @item print-symdefs @samp{-s} in @code{nm}. @item printer @samp{-p} in @code{wdiff}. @item prompt @samp{-p} in @code{ed}. @item proxy Specify an HTTP proxy. @item query-user @samp{-X} in @code{shar}. @item question @samp{-q} in @code{make}. @item quiet Used in many programs to inhibit the usual output. Every program accepting @samp{--quiet} should accept @samp{--silent} as a synonym. @item quiet-unshar @samp{-Q} in @code{shar} @item quote-name @samp{-Q} in @code{ls}. @item rcs @samp{-n} in @code{diff}. @item re-interval Used in @code{gawk}. @item read-full-blocks @samp{-B} in @code{tar}. @item readnow Used in GDB. @item recon @samp{-n} in @code{make}. @item record-number @samp{-R} in @code{tar}. @item recursive Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff}, and @code{rm}. @item reference @samp{-r} in @code{touch}. @item references @samp{-r} in @code{ptx}. @item regex @samp{-r} in @code{tac} and @code{etags}. @item release @samp{-r} in @code{uname}. @item reload-state @samp{-R} in @code{m4}. @item relocation @samp{-r} in @code{objdump}. @item rename @samp{-r} in @code{cpio}. @item replace @samp{-i} in @code{xargs}. @item report-identical-files @samp{-s} in @code{diff}. @item reset-access-time @samp{-a} in @code{cpio}. @item reverse @samp{-r} in @code{ls} and @code{nm}. @item reversed-ed @samp{-f} in @code{diff}. @item right-side-defs @samp{-R} in @code{ptx}. @item same-order @samp{-s} in @code{tar}. @item same-permissions @samp{-p} in @code{tar}. @item save @samp{-g} in @code{stty}. @item se Used in GDB. @item sentence-regexp @samp{-S} in @code{ptx}. @item separate-dirs @samp{-S} in @code{du}. @item separator @samp{-s} in @code{tac}. @item sequence Used by @code{recode} to chose files or pipes for sequencing passes. @item shell @samp{-s} in @code{su}. @item show-all @samp{-A} in @code{cat}. @item show-c-function @samp{-p} in @code{diff}. @item show-ends @samp{-E} in @code{cat}. @item show-function-line @samp{-F} in @code{diff}. @item show-tabs @samp{-T} in @code{cat}. @item silent Used in many programs to inhibit the usual output. Every program accepting @samp{--silent} should accept @samp{--quiet} as a synonym. @item size @samp{-s} in @code{ls}. @item socket Specify a file descriptor for a network server to use for its socket, instead of opening and binding a new socket. This provides a way to run, in a non-privileged process, a server that normally needs a reserved port number. @item sort Used in @code{ls}. @item source @samp{-W source} in @code{gawk}. @item sparse @samp{-S} in @code{tar}. @item speed-large-files @samp{-H} in @code{diff}. @item split-at @samp{-E} in @code{unshar}. @item split-size-limit @samp{-L} in @code{shar}. @item squeeze-blank @samp{-s} in @code{cat}. @item start-delete @samp{-w} in @code{wdiff}. @item start-insert @samp{-y} in @code{wdiff}. @item starting-file Used in @code{tar} and @code{diff} to specify which file within a directory to start processing with. @item statistics @samp{-s} in @code{wdiff}. @item stdin-file-list @samp{-S} in @code{shar}. @item stop @samp{-S} in @code{make}. @item strict @samp{-s} in @code{recode}. @item strip @samp{-s} in @code{install}. @item strip-all @samp{-s} in @code{strip}. @item strip-debug @samp{-S} in @code{strip}. @item submitter @samp{-s} in @code{shar}. @item suffix @samp{-S} in @code{cp}, @code{ln}, @code{mv}. @item suffix-format @samp{-b} in @code{csplit}. @item sum @samp{-s} in @code{gprof}. @item summarize @samp{-s} in @code{du}. @item symbolic @samp{-s} in @code{ln}. @item symbols Used in GDB and @code{objdump}. @item synclines @samp{-s} in @code{m4}. @item sysname @samp{-s} in @code{uname}. @item tabs @samp{-t} in @code{expand} and @code{unexpand}. @item tabsize @samp{-T} in @code{ls}. @item terminal @samp{-T} in @code{tput} and @code{ul}. @samp{-t} in @code{wdiff}. @item text @samp{-a} in @code{diff}. @item text-files @samp{-T} in @code{shar}. @item time Used in @code{ls} and @code{touch}. @item timeout Specify how long to wait before giving up on some operation. @item to-stdout @samp{-O} in @code{tar}. @item total @samp{-c} in @code{du}. @item touch @samp{-t} in @code{make}, @code{ranlib}, and @code{recode}. @item trace @samp{-t} in @code{m4}. @item traditional @samp{-t} in @code{hello}; @samp{-W traditional} in @code{gawk}; @samp{-G} in @code{ed}, @code{m4}, and @code{ptx}. @item tty Used in GDB. @item typedefs @samp{-t} in @code{ctags}. @item typedefs-and-c++ @samp{-T} in @code{ctags}. @item typeset-mode @samp{-t} in @code{ptx}. @item uncompress @samp{-z} in @code{tar}. @item unconditional @samp{-u} in @code{cpio}. @item undefine @samp{-U} in @code{m4}. @item undefined-only @samp{-u} in @code{nm}. @item update @samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}. @item usage Used in @code{gawk}; same as @samp{--help}. @item uuencode @samp{-B} in @code{shar}. @item vanilla-operation @samp{-V} in @code{shar}. @item verbose Print more information about progress. Many programs support this. @item verify @samp{-W} in @code{tar}. @item version Print the version number. @item version-control @samp{-V} in @code{cp}, @code{ln}, @code{mv}. @item vgrind @samp{-v} in @code{ctags}. @item volume @samp{-V} in @code{tar}. @item what-if @samp{-W} in @code{make}. @item whole-size-limit @samp{-l} in @code{shar}. @item width @samp{-w} in @code{ls} and @code{ptx}. @item word-regexp @samp{-W} in @code{ptx}. @item writable @samp{-T} in @code{who}. @item zeros @samp{-z} in @code{gprof}. @end table @node OID Allocations @section OID Allocations @cindex OID allocations for GNU @cindex SNMP @cindex LDAP @cindex X.509 The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the GNU Project (thanks to Sergey Poznyakoff). These are used for SNMP, LDAP, X.509 certificates, and so on. The web site @url{https://www.alvestrand.no/objectid} has a (voluntary) listing of many OID assignments. If you need a new slot for your GNU package, write @email{maintainers@@gnu.org}. Here is a list of arcs currently assigned: @example @include gnu-oids.texi @end example @node Memory Usage @section Memory Usage @cindex memory usage If a program typically uses just a few meg of memory, don't bother making any effort to reduce memory usage. For example, if it is impractical for other reasons to operate on files more than a few meg long, it is reasonable to read entire input files into memory to operate on them. However, for programs such as @code{cat} or @code{tail}, that can usefully operate on very large files, it is important to avoid using a technique that would artificially limit the size of files it can handle. If a program works by lines and could be applied to arbitrary user-supplied input files, it should keep only a line in memory, because this is not very hard and users will want to be able to operate on input files that are bigger than will fit in memory all at once. If your program creates complicated data structures, just make them in memory and give a fatal error if @code{malloc} returns @code{NULL}. @pindex valgrind @cindex memory leak Memory analysis tools such as @command{valgrind} can be useful, but don't complicate a program merely to avoid their false alarms. For example, if memory is used until just before a process exits, don't free it simply to silence such a tool. @node File Usage @section File Usage @cindex file usage Programs should be prepared to operate when @file{/usr} and @file{/etc} are read-only file systems. Thus, if the program manages log files, lock files, backup files, score files, or any other files which are modified for internal purposes, these files should not be stored in @file{/usr} or @file{/etc}. There are two exceptions. @file{/etc} is used to store system configuration information; it is reasonable for a program to modify files in @file{/etc} when its job is to update the system configuration. Also, if the user explicitly asks to modify one file in a directory, it is reasonable for the program to store other files in the same directory. @node Writing C @chapter Making The Best Use of C This chapter provides advice on how best to use the C language when writing GNU software. @menu * Formatting:: Formatting your source code. * Comments:: Commenting your work. * Syntactic Conventions:: Clean use of C constructs. * Names:: Naming variables, functions, and files. * System Portability:: Portability among different operating systems. * CPU Portability:: Supporting the range of CPU types. * System Functions:: Portability and ``standard'' library functions. * Internationalization:: Techniques for internationalization. * Character Set:: Use ASCII by default. * Quote Characters:: Use "..." or '...' in the C locale. * Mmap:: How you can safely use @code{mmap}. @end menu @node Formatting @section Formatting Your Source Code @cindex formatting source code @cindex line length @cindex length of source lines Please keep the length of source lines to 79 characters or less, for maximum readability in the widest range of environments. @cindex open brace @cindex braces, in C source @cindex function definitions, formatting It is important to put the open-brace that starts the body of a C function in column one, so that they will start a defun. Several tools look for open-braces in column one to find the beginnings of C functions. These tools will not work on code not formatted that way. Avoid putting open-brace, open-parenthesis or open-bracket in column one when they are inside a function, so that they won't start a defun. The open-brace that starts a @code{struct} body can go in column one if you find it useful to treat that definition as a defun. It is also important for function definitions to start the name of the function in column one. This helps people to search for function definitions, and may also help certain tools recognize them. Thus, using Standard C syntax, the format is this: @example static char * concat (char *s1, char *s2) @{ @dots{} @} @end example @noindent or, if you want to use traditional C syntax, format the definition like this: @example static char * concat (s1, s2) /* Name starts in column one here */ char *s1, *s2; @{ /* Open brace in column one here */ @dots{} @} @end example In Standard C, if the arguments don't fit nicely on one line, split it like this: @example int lots_of_args (int an_integer, long a_long, short a_short, double a_double, float a_float) @dots{} @end example @cindex @code{struct} types, formatting @cindex @code{enum} types, formatting For @code{struct} and @code{enum} types, likewise put the braces in column one, unless the whole contents fits on one line: @example struct foo @{ int a, b; @} @exdent @r{or} struct foo @{ int a, b; @} @end example The rest of this section gives our recommendations for other aspects of C formatting style, which is also the default style of the @code{indent} program in version 1.2 and newer. It corresponds to the options @smallexample -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob @end smallexample We don't think of these recommendations as requirements, because it causes no problems for users if two different programs have different formatting styles. But whatever style you use, please use it consistently, since a mixture of styles within one program tends to look ugly. If you are contributing changes to an existing program, please follow the style of that program. For the body of the function, our recommended style looks like this: @example if (x < foo (y, z)) haha = bar[4] + 5; else @{ while (z) @{ haha += foo (z, z); z--; @} return ++x + bar (); @} @end example @cindex spaces before open-paren We find it easier to read a program when it has spaces before the open-parentheses and after the commas. Especially after the commas. When you split an expression into multiple lines, split it before an operator, not after one. Here is the right way: @cindex expressions, splitting @example if (foo_this_is_long && bar > win (x, y, z) && remaining_condition) @end example Try to avoid having two operators of different precedence at the same level of indentation. For example, don't write this: @example mode = (inmode[j] == VOIDmode || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) ? outmode[j] : inmode[j]); @end example Instead, use extra parentheses so that the indentation shows the nesting: @example mode = ((inmode[j] == VOIDmode || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) ? outmode[j] : inmode[j]); @end example Insert extra parentheses so that Emacs will indent the code properly. For example, the following indentation looks nice if you do it by hand, @example v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; @end example @noindent but Emacs would alter it. Adding a set of parentheses produces something that looks equally nice, and which Emacs will preserve: @example v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); @end example Format do-while statements like this: @example do @{ a = foo (a); @} while (a > 0); @end example @cindex formfeed @cindex control-L Please use formfeed characters (control-L) to divide the program into pages at logical places (but not within a function). It does not matter just how long the pages are, since they do not have to fit on a printed page. The formfeeds should appear alone on lines by themselves. @node Comments @section Commenting Your Work @cindex commenting Every program should start with a comment saying briefly what it is for. Example: @samp{fmt - filter for simple filling of text}. This comment should be at the top of the source file containing the @samp{main} function of the program. Also, please write a brief comment at the start of each source file, with the file name and a line or two about the overall purpose of the file. Please write the comments in a GNU program in English, because English is the one language that nearly all programmers in all countries can read. If you do not write English well, please write comments in English as well as you can, then ask other people to help rewrite them. If you can't write comments in English, please find someone to work with you and translate your comments into English. Please put a comment on each function saying what the function does, what sorts of arguments it gets, and what the possible values of arguments mean and are used for. It is not necessary to duplicate in words the meaning of the C argument declarations, if a C type is being used in its customary fashion. If there is anything nonstandard about its use (such as an argument of type @code{char *} which is really the address of the second character of a string, not the first), or any possible values that would not work the way one would expect (such as, that strings containing newlines are not guaranteed to work), be sure to say so. Also explain the significance of the return value, if there is one. Please put two spaces after the end of a sentence in your comments, so that the Emacs sentence commands will work. Also, please write complete sentences and capitalize the first word. If a lower-case identifier comes at the beginning of a sentence, don't capitalize it! Changing the spelling makes it a different identifier. If you don't like starting a sentence with a lower case letter, write the sentence differently (e.g., ``The identifier lower-case is @dots{}''). The comment on a function is much clearer if you use the argument names to speak about the argument values. The variable name itself should be lower case, but write it in upper case when you are speaking about the value rather than the variable itself. Thus, ``the inode number NODE_NUM'' rather than ``an inode''. There is usually no purpose in restating the name of the function in the comment before it, because readers can see that for themselves. There might be an exception when the comment is so long that the function itself would be off the bottom of the screen. There should be a comment on each static variable as well, like this: @example /* Nonzero means truncate lines in the display; zero means continue them. */ int truncate_lines; @end example @cindex conditionals, comments for @cindex @code{#endif}, commenting Every @samp{#endif} should have a comment, except in the case of short conditionals (just a few lines) that are not nested. The comment should state the condition of the conditional that is ending, @emph{including its sense}. @samp{#else} should have a comment describing the condition @emph{and sense} of the code that follows. For example: @example @group #ifdef foo @dots{} #else /* not foo */ @dots{} #endif /* not foo */ @end group @group #ifdef foo @dots{} #endif /* foo */ @end group @end example @noindent but, by contrast, write the comments this way for a @samp{#ifndef}: @example @group #ifndef foo @dots{} #else /* foo */ @dots{} #endif /* foo */ @end group @group #ifndef foo @dots{} #endif /* not foo */ @end group @end example @node Syntactic Conventions @section Clean Use of C Constructs @cindex syntactic conventions @cindex implicit @code{int} @cindex function argument, declaring Please explicitly declare the types of all objects. For example, you should explicitly declare all arguments to functions, and you should declare functions to return @code{int} rather than omitting the @code{int}. @cindex compiler warnings @cindex @samp{-Wall} compiler option Some programmers like to use the GCC @samp{-Wall} option, and change the code whenever it issues a warning. If you want to do this, then do. Other programmers prefer not to use @samp{-Wall}, because it gives warnings for valid and legitimate code which they do not want to change. If you want to do this, then do. The compiler should be your servant, not your master. @pindex clang @pindex lint Don't make the program ugly just to placate static analysis tools such as @command{lint}, @command{clang}, and GCC with extra warnings options such as @option{-Wconversion} and @option{-Wundef}. These tools can help find bugs and unclear code, but they can also generate so many false alarms that it hurts readability to silence them with unnecessary casts, wrappers, and other complications. For example, please don't insert casts to @code{void} or calls to do-nothing functions merely to pacify a lint checker. Declarations of external functions and functions to appear later in the source file should all go in one place near the beginning of the file (somewhere before the first function definition in the file), or else should go in a header file. Don't put @code{extern} declarations inside functions. @cindex temporary variables It used to be common practice to use the same local variables (with names like @code{tem}) over and over for different values within one function. Instead of doing this, it is better to declare a separate local variable for each distinct purpose, and give it a name which is meaningful. This not only makes programs easier to understand, it also facilitates optimization by good compilers. You can also move the declaration of each local variable into the smallest scope that includes all its uses. This makes the program even cleaner. Don't use local variables or parameters that shadow global identifiers. GCC's @samp{-Wshadow} option can detect this problem. @cindex multiple variables in a line Don't declare multiple variables in one declaration that spans lines. Start a new declaration on each line, instead. For example, instead of this: @example @group int foo, bar; @end group @end example @noindent write either this: @example int foo, bar; @end example @noindent or this: @example int foo; int bar; @end example @noindent (If they are global variables, each should have a comment preceding it anyway.) When you have an @code{if}-@code{else} statement nested in another @code{if} statement, always put braces around the @code{if}-@code{else}. Thus, never write like this: @example if (foo) if (bar) win (); else lose (); @end example @noindent always like this: @example if (foo) @{ if (bar) win (); else lose (); @} @end example If you have an @code{if} statement nested inside of an @code{else} statement, either write @code{else if} on one line, like this, @example if (foo) @dots{} else if (bar) @dots{} @end example @noindent with its @code{then}-part indented like the preceding @code{then}-part, or write the nested @code{if} within braces like this: @example if (foo) @dots{} else @{ if (bar) @dots{} @} @end example Don't declare both a structure tag and variables or typedefs in the same declaration. Instead, declare the structure tag separately and then use it to declare the variables or typedefs. Try to avoid assignments inside @code{if}-conditions (assignments inside @code{while}-conditions are ok). For example, don't write this: @example if ((foo = (char *) malloc (sizeof *foo)) == NULL) fatal ("virtual memory exhausted"); @end example @noindent instead, write this: @example foo = (char *) malloc (sizeof *foo); if (foo == NULL) fatal ("virtual memory exhausted"); @end example @node Names @section Naming Variables, Functions, and Files @cindex names of variables, functions, and files The names of global variables and functions in a program serve as comments of a sort. So don't choose terse names---instead, look for names that give useful information about the meaning of the variable or function. In a GNU program, names should be English, like other comments. Local variable names can be shorter, because they are used only within one context, where (presumably) comments explain their purpose. Try to limit your use of abbreviations in symbol names. It is ok to make a few abbreviations, explain what they mean, and then use them frequently, but don't use lots of obscure abbreviations. Please use underscores to separate words in a name, so that the Emacs word commands can be useful within them. Stick to lower case; reserve upper case for macros and @code{enum} constants, and for name-prefixes that follow a uniform convention. For example, you should use names like @code{ignore_space_change_flag}; don't use names like @code{iCantReadThis}. Variables that indicate whether command-line options have been specified should be named after the meaning of the option, not after the option-letter. A comment should state both the exact meaning of the option and its letter. For example, @example @group /* Ignore changes in horizontal whitespace (-b). */ int ignore_space_change_flag; @end group @end example When you want to define names with constant integer values, use @code{enum} rather than @samp{#define}. GDB knows about enumeration constants. @cindex file-name limitations @pindex doschk You might want to make sure that none of the file names would conflict if the files were loaded onto an MS-DOS file system which shortens the names. You can use the program @code{doschk} to test for this. Some GNU programs were designed to limit themselves to file names of 14 characters or less, to avoid file name conflicts if they are read into older System V systems. Please preserve this feature in the existing GNU programs that have it, but there is no need to do this in new GNU programs. @code{doschk} also reports file names longer than 14 characters. @node System Portability @section Portability between System Types @cindex portability, between system types In the Unix world, ``portability'' refers to porting to different Unix versions. For a GNU program, this kind of portability is desirable, but not paramount. The primary purpose of GNU software is to run as part of the GNU operating system, compiled with GNU compilers, on various types of hardware. So the kinds of portability that are absolutely necessary are quite limited. It is important to support Linux-based GNU systems, since they are the form of GNU that people mainly use. Making a GNU program operate on operating systems other than the GNU system is not part of the core goal of developing a GNU package. You don't ever have to do that. However, users will ask you to do that, and cooperating with those requests is useful---as long as you don't let it dominate the project or impede the primary goal. It is good to support the other free or nearly free operating systems (for instance, *BSD). Supporting a variety of Unix-like systems is desirable, although not paramount. It is usually not too hard, so you may as well do it. But you don't have to consider it an obligation, if it does turn out to be hard. For the most part it is good to port the program to more platforms, but you should not let take up so much of your time that it hinders you from improving the program in more central ways. If it starts to do that, please tell users that you don't want to spend any more time on this---someone else must write that code, debug it, document it, etc., and then you can install it. You can reject porting patches for technical reasons too, as with any other patch that users submit. It is up to you. @pindex autoconf The easiest way to achieve portability to most Unix-like systems is to use Autoconf. It's unlikely that your program needs to know more information about the host platform than Autoconf can provide, simply because most of the programs that need such knowledge have already been written. Avoid using the format of semi-internal data bases (e.g., directories) when there is a higher-level alternative (@code{readdir}). @cindex non-POSIX systems, and portability As for systems that are not like Unix, such as MS-DOS, Windows, VMS, MVS, and older Macintosh systems, supporting them is often a lot of work. When that is the case, it is better to spend your time adding features that will be useful on GNU and GNU/Linux, rather than on supporting other incompatible systems. If you do support Windows, please do not abbreviate it as ``win''. @xref{Trademarks}. Usually we write the name ``Windows'' in full, but when brevity is very important (as in file names and some symbol names), we abbreviate it to ``w''. In GNU Emacs, for instance, we use @samp{w32} in file names of Windows-specific files, but the macro for Windows conditionals is called @code{WINDOWSNT}. In principle there could also be @samp{w64}. It is a good idea to define the ``feature test macro'' @code{_GNU_SOURCE} when compiling your C files. When you compile on GNU or GNU/Linux, this will enable the declarations of GNU library extension functions, and that will usually give you a compiler error message if you define the same function names in some other way in your program. (You don't have to actually @emph{use} these functions, if you prefer to make the program more portable to other systems.) But whether or not you use these GNU extensions, you should avoid using their names for any other meanings. Doing so would make it hard to move your code into other GNU programs. @node CPU Portability @section Portability between CPUs @cindex data types, and portability @cindex portability, and data types Even GNU systems will differ because of differences among CPU types---for example, difference in byte ordering and alignment requirements. It is absolutely essential to handle these differences. However, don't make any effort to cater to the possibility that an @code{int} will be less than 32 bits. We don't support 16-bit machines in GNU. You need not cater to the possibility that @code{long} will be smaller than pointers and @code{size_t}. We know of one such platform: 64-bit programs on Microsoft Windows. If you care about making your package run on Windows using Mingw64, you would need to deal with 8-byte pointers and 4-byte @code{long}, which would break this code: @example printf ("size = %lu\n", (unsigned long) sizeof array); printf ("diff = %ld\n", (long) (pointer2 - pointer1)); @end example Whether to support Mingw64, and Windows in general, in your package is your choice. The GNU Project doesn't say you have any responsibility to do so. Our goal is to replace proprietary systems, including Windows, not to enhance them. If people pressure you to make your program run on Windows, and you are not interested, you can respond with, ``Switch to GNU/Linux --- your freedom depends on it.'' Predefined file-size types like @code{off_t} are an exception: they are longer than @code{long} on many platforms, so code like the above won't work with them. One way to print an @code{off_t} value portably is to print its digits yourself, one by one. Don't assume that the address of an @code{int} object is also the address of its least-significant byte. This is false on big-endian machines. Thus, don't make the following mistake: @example int c; @dots{} while ((c = getchar ()) != EOF) write (file_descriptor, &c, 1); @end example @noindent Instead, use @code{unsigned char} as follows. (The @code{unsigned} is for portability to unusual systems where @code{char} is signed and where there is integer overflow checking.) @example int c; while ((c = getchar ()) != EOF) @{ unsigned char u = c; write (file_descriptor, &u, 1); @} @end example @cindex casting pointers to integers Avoid casting pointers to integers if you can. Such casts greatly reduce portability, and in most programs they are easy to avoid. In the cases where casting pointers to integers is essential---such as, a Lisp interpreter which stores type information as well as an address in one word---you'll have to make explicit provisions to handle different word sizes. You will also need to make provision for systems in which the normal range of addresses you can get from @code{malloc} starts far away from zero. @node System Functions @section Calling System Functions @cindex C library functions, and portability @cindex POSIX functions, and portability @cindex library functions, and portability @cindex portability, and library functions Historically, C implementations differed substantially, and many systems lacked a full implementation of ANSI/ISO C89. Nowadays, however, all practical systems have a C89 compiler and GNU C supports almost all of C99 and some of C11. Similarly, most systems implement POSIX.1-2001 libraries and tools, and many have POSIX.1-2008. Hence, there is little reason to support old C or non-POSIX systems, and you may want to take advantage of standard C and POSIX to write clearer, more portable, or faster code. You should use standard interfaces where possible; but if GNU extensions make your program more maintainable, powerful, or otherwise better, don't hesitate to use them. In any case, don't make your own declaration of system functions; that's a recipe for conflict. Despite the standards, nearly every library function has some sort of portability issue on some system or another. Here are some examples: @table @code @item open Names with trailing @code{/}'s are mishandled on many platforms. @item printf @code{long double} may be unimplemented; floating values Infinity and NaN are often mishandled; output for large precisions may be incorrect. @item readlink May return @code{int} instead of @code{ssize_t}. @item scanf On Windows, @code{errno} is not set on failure. @end table @cindex Gnulib @uref{https://www.gnu.org/software/gnulib/, Gnulib} is a big help in this regard. Gnulib provides implementations of standard interfaces on many of the systems that lack them, including portable implementations of enhanced GNU interfaces, thereby making their use portable, and of POSIX-1.2008 interfaces, some of which are missing even on up-to-date GNU systems. @findex xmalloc, in Gnulib @findex error messages, in Gnulib @findex data structures, in Gnulib Gnulib also provides many useful non-standard interfaces; for example, C implementations of standard data structures (hash tables, binary trees), error-checking type-safe wrappers for memory allocation functions (@code{xmalloc}, @code{xrealloc}), and output of error messages. Gnulib integrates with GNU Autoconf and Automake to remove much of the burden of writing portable code from the programmer: Gnulib makes your configure script automatically determine what features are missing and use the Gnulib code to supply the missing pieces. The Gnulib and Autoconf manuals have extensive sections on portability: @ref{Top,, Introduction, gnulib, Gnulib} and @pxref{Portable C and C++,,, autoconf, Autoconf}. Please consult them for many more details. @node Internationalization @section Internationalization @cindex internationalization @pindex gettext GNU has a library called GNU gettext that makes it easy to translate the messages in a program into various languages. You should use this library in every program. Use English for the messages as they appear in the program, and let gettext provide the way to translate them into other languages. Using GNU gettext involves putting a call to the @code{gettext} macro around each string that might need translation---like this: @example printf (gettext ("Processing file '%s'..."), file); @end example @noindent This permits GNU gettext to replace the string @code{"Processing file '%s'..."} with a translated version. Once a program uses gettext, please make a point of writing calls to @code{gettext} when you add new strings that call for translation. Using GNU gettext in a package involves specifying a @dfn{text domain name} for the package. The text domain name is used to separate the translations for this package from the translations for other packages. Normally, the text domain name should be the same as the name of the package---for example, @samp{coreutils} for the GNU core utilities. @cindex message text, and internationalization To enable gettext to work well, avoid writing code that makes assumptions about the structure of words or sentences. When you want the precise text of a sentence to vary depending on the data, use two or more alternative string constants each containing a complete sentences, rather than inserting conditionalized words or phrases into a single sentence framework. Here is an example of what not to do: @smallexample printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk"); @end smallexample If you apply gettext to all strings, like this, @smallexample printf (gettext ("%s is full"), capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk")); @end smallexample @noindent the translator will hardly know that "disk" and "floppy disk" are meant to be substituted in the other string. Worse, in some languages (like French) the construction will not work: the translation of the word "full" depends on the gender of the first part of the sentence; it happens to be not the same for "disk" as for "floppy disk". Complete sentences can be translated without problems: @example printf (capacity > 5000000 ? gettext ("disk is full") : gettext ("floppy disk is full")); @end example A similar problem appears at the level of sentence structure with this code: @example printf ("# Implicit rule search has%s been done.\n", f->tried_implicit ? "" : " not"); @end example @noindent Adding @code{gettext} calls to this code cannot give correct results for all languages, because negation in some languages requires adding words at more than one place in the sentence. By contrast, adding @code{gettext} calls does the job straightforwardly if the code starts out like this: @example printf (f->tried_implicit ? "# Implicit rule search has been done.\n", : "# Implicit rule search has not been done.\n"); @end example Another example is this one: @example printf ("%d file%s processed", nfiles, nfiles != 1 ? "s" : ""); @end example @noindent The problem with this example is that it assumes that plurals are made by adding `s'. If you apply gettext to the format string, like this, @example printf (gettext ("%d file%s processed"), nfiles, nfiles != 1 ? "s" : ""); @end example @noindent the message can use different words, but it will still be forced to use `s' for the plural. Here is a better way, with gettext being applied to the two strings independently: @example printf ((nfiles != 1 ? gettext ("%d files processed") : gettext ("%d file processed")), nfiles); @end example @noindent But this still doesn't work for languages like Polish, which has three plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, 24, ... and one for the rest. The GNU @code{ngettext} function solves this problem: @example printf (ngettext ("%d files processed", "%d file processed", nfiles), nfiles); @end example @node Character Set @section Character Set @cindex character set @cindex encodings @cindex ASCII characters @cindex non-ASCII characters Sticking to the ASCII character set (plain text, 7-bit characters) is preferred in GNU source code comments, text documents, and other contexts, unless there is good reason to do something else because of the application domain. For example, if source code deals with the French Revolutionary calendar, it is OK if its literal strings contain accented characters in month names like ``Flor@'eal''. Also, it is OK (but not required) to use non-ASCII characters to represent proper names of contributors in change logs (@pxref{Change Logs}). If you need to use non-ASCII characters, you should normally stick with one encoding, certainly within a single file. UTF-8 is likely to be the best choice. @node Quote Characters @section Quote Characters @cindex quote characters @cindex locale-specific quote characters @cindex left quote @cindex right quote @cindex opening quote @cindex single quote @cindex double quote @cindex grave accent @set txicodequoteundirected @set txicodequotebacktick In the C locale, the output of GNU programs should stick to plain ASCII for quotation characters in messages to users: preferably 0x22 (@samp{"}) or 0x27 (@samp{'}) for both opening and closing quotes. Although GNU programs traditionally used 0x60 (@samp{`}) for opening and 0x27 (@samp{'}) for closing quotes, nowadays quotes @samp{`like this'} are typically rendered asymmetrically, so quoting @samp{"like this"} or @samp{'like this'} typically looks better. It is ok, but not required, for GNU programs to generate locale-specific quotes in non-C locales. For example: @example printf (gettext ("Processing file '%s'..."), file); @end example @noindent Here, a French translation might cause @code{gettext} to return the string @code{"Traitement de fichier @guilsinglleft{}@tie{}%s@tie{}@guilsinglright{}..."}, yielding quotes more appropriate for a French locale. Sometimes a program may need to use opening and closing quotes directly. By convention, @code{gettext} translates the string @samp{"`"} to the opening quote and the string @samp{"'"} to the closing quote, and a program can use these translations. Generally, though, it is better to translate quote characters in the context of longer strings. If the output of your program is ever likely to be parsed by another program, it is good to provide an option that makes this parsing reliable. For example, you could escape special characters using conventions from the C language or the Bourne shell. See for example the option @option{--quoting-style} of GNU @code{ls}. @clear txicodequoteundirected @clear txicodequotebacktick @node Mmap @section Mmap @findex mmap If you use @code{mmap} to read or write files, don't assume it either works on all files or fails for all files. It may work on some files and fail on others. The proper way to use @code{mmap} is to try it on the specific file for which you want to use it---and if @code{mmap} doesn't work, fall back on doing the job in another way using @code{read} and @code{write}. The reason this precaution is needed is that the GNU kernel (the HURD) provides a user-extensible file system, in which there can be many different kinds of ``ordinary files''. Many of them support @code{mmap}, but some do not. It is important to make programs handle all these kinds of files. @node Documentation @chapter Documenting Programs @cindex documentation A GNU program should ideally come with full free documentation, adequate for both reference and tutorial purposes. If the package can be programmed or extended, the documentation should cover programming or extending it, as well as just using it. @menu * GNU Manuals:: Writing proper manuals. * Doc Strings and Manuals:: Compiling doc strings doesn't make a manual. * Manual Structure Details:: Specific structure conventions. * License for Manuals:: Writing the distribution terms for a manual. * Manual Credits:: Giving credit to documentation contributors. * Printed Manuals:: Mentioning the printed manual. * NEWS File:: NEWS files supplement manuals. * Change Logs:: Recording changes. * Man Pages:: Man pages are secondary. * Reading other Manuals:: How far you can go in learning from other manuals. @end menu @node GNU Manuals @section GNU Manuals The preferred document format for the GNU system is the Texinfo formatting language. Every GNU package should (ideally) have documentation in Texinfo both for reference and for learners. Texinfo makes it possible to produce a good quality formatted book, using @TeX{}, and to generate an Info file. It is also possible to generate HTML output from Texinfo source. See the Texinfo manual, either the hardcopy, or the on-line version available through @code{info} or the Emacs Info subsystem (@kbd{C-h i}). Nowadays some other formats such as Docbook and Sgmltexi can be converted automatically into Texinfo. It is ok to produce the Texinfo documentation by conversion this way, as long as it gives good results. Make sure your manual is clear to a reader who knows nothing about the topic and reads it straight through. This means covering basic topics at the beginning, and advanced topics only later. This also means defining every specialized term when it is first used. Remember that the audience for a GNU manual (and other GNU documentation) is global, and that it will be used for years, maybe decades. This means that the reader could have very different cultural reference points. Decades from now, all but old folks will have very different cultural reference points; many things that "everyone knows about" today may be mostly forgotten. For this reason, try to avoid writing in a way that depends on cultural reference points for proper understanding, or that refers to them in ways that would impede reading for someone that doesn't recognize them. Likewise, be conservative in your choice of words (aside from technical terms), linguistic constructs, and spelling: aim to make them intelligible to readers from ten years ago. In any contest for trendiness, GNU writing should not even qualify to enter. It is ok to refer once in a rare while to spatially or temporally localized reference points or facts, if it is directly pertinent or as an aside. Changing these few things (which in any case stand out) when they no longer make sense will not be a lot of work. By contrast, it is always proper to refer to concepts of GNU and the free software movement, when they are pertinent. These are a central part of our message, so we should take advantage of opportunities to mention them. They are fundamental moral positions, so they will rarely if ever change. Programmers tend to carry over the structure of the program as the structure for its documentation. But this structure is not necessarily good for explaining how to use the program; it may be irrelevant and confusing for a user. Instead, the right way to structure documentation is according to the concepts and questions that a user will have in mind when reading it. This principle applies at every level, from the lowest (ordering sentences in a paragraph) to the highest (ordering of chapter topics within the manual). Sometimes this structure of ideas matches the structure of the implementation of the software being documented---but often they are different. An important part of learning to write good documentation is to learn to notice when you have unthinkingly structured the documentation like the implementation, stop yourself, and look for better alternatives. For example, each program in the GNU system probably ought to be documented in one manual; but this does not mean each program should have its own manual. That would be following the structure of the implementation, rather than the structure that helps the user understand. Instead, each manual should cover a coherent @emph{topic}. For example, instead of a manual for @code{diff} and a manual for @code{diff3}, we have one manual for ``comparison of files'' which covers both of those programs, as well as @code{cmp}. By documenting these programs together, we can make the whole subject clearer. The manual which discusses a program should certainly document all of the program's command-line options and all of its commands. It should give examples of their use. But don't organize the manual as a list of features. Instead, organize it logically, by subtopics. Address the questions that a user will ask when thinking about the job that the program does. Don't just tell the reader what each feature can do---say what jobs it is good for, and show how to use it for those jobs. Explain what is recommended usage, and what kinds of usage users should avoid. In general, a GNU manual should serve both as tutorial and reference. It should be set up for convenient access to each topic through Info, and for reading straight through (appendixes aside). A GNU manual should give a good introduction to a beginner reading through from the start, and should also provide all the details that hackers want. The Bison manual is a good example of this---please take a look at it to see what we mean. That is not as hard as it first sounds. Arrange each chapter as a logical breakdown of its topic, but order the sections, and write their text, so that reading the chapter straight through makes sense. Do likewise when structuring the book into chapters, and when structuring a section into paragraphs. The watchword is, @emph{at each point, address the most fundamental and important issue raised by the preceding text.} If necessary, add extra chapters at the beginning of the manual which are purely tutorial and cover the basics of the subject. These provide the framework for a beginner to understand the rest of the manual. The Bison manual provides a good example of how to do this. To serve as a reference, a manual should have an Index that lists all the functions, variables, options, and important concepts that are part of the program. One combined Index should do for a short manual, but sometimes for a complex package it is better to use multiple indices. The Texinfo manual includes advice on preparing good index entries, see @ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and see @ref{Indexing Commands, , Defining the Entries of an Index, texinfo, GNU Texinfo}. Don't use Unix man pages as a model for how to write GNU documentation; most of them are terse, badly structured, and give inadequate explanation of the underlying concepts. (There are, of course, some exceptions.) Also, Unix man pages use a particular format which is different from what we use in GNU manuals. Please include an email address in the manual for where to report bugs @emph{in the text of the manual}. Please do not use the term ``pathname'' that is used in Unix documentation; use ``file name'' (two words) instead. We use the term ``path'' only for search paths, which are lists of directory names. Please do not use the term ``illegal'' to refer to erroneous input to a computer program. Please use ``invalid'' for this, and reserve the term ``illegal'' for activities prohibited by law. Please do not write @samp{()} after a function name just to indicate it is a function. @code{foo ()} is not a function, it is a function call with no arguments. Whenever possible, please stick to the active voice, avoiding the passive, and use the present tense, not the future tense. For instance, write ``The function @code{foo} returns a list containing @var{a} and @var{b}'' rather than ``A list containing @var{a} and @var{b} will be returned.'' One advantage of the active voice is it requires you to state the subject of the sentence; with the passive voice, you might omit the subject, which leads to vagueness. It is proper to use the future tense when grammar demands it, as in, ``If you type @kbd{x}, the computer will self-destruct in 10 seconds.'' @node Doc Strings and Manuals @section Doc Strings and Manuals Some programming systems, such as Emacs, provide a documentation string for each function, command or variable. You may be tempted to write a reference manual by compiling the documentation strings and writing a little additional text to go around them---but you must not do it. That approach is a fundamental mistake. The text of well-written documentation strings will be entirely wrong for a manual. A documentation string needs to stand alone---when it appears on the screen, there will be no other text to introduce or explain it. Meanwhile, it can be rather informal in style. The text describing a function or variable in a manual must not stand alone; it appears in the context of a section or subsection. Other text at the beginning of the section should explain some of the concepts, and should often make some general points that apply to several functions or variables. The previous descriptions of functions and variables in the section will also have given information about the topic. A description written to stand alone would repeat some of that information; this redundancy looks bad. Meanwhile, the informality that is acceptable in a documentation string is totally unacceptable in a manual. The only good way to use documentation strings in writing a good manual is to use them as a source of information for writing good text. @node Manual Structure Details @section Manual Structure Details @cindex manual structure The title page of the manual should state the version of the programs or packages documented in the manual. The Top node of the manual should also contain this information. If the manual is changing more frequently than or independent of the program, also state a version number for the manual in both of these places. Each program documented in the manual should have a node named @samp{@var{program} Invocation} or @samp{Invoking @var{program}}. This node (together with its subnodes, if any) should describe the program's command line arguments and how to run it (the sort of information people would look for in a man page). Start with an @samp{@@example} containing a template for all the options and arguments that the program uses. Alternatively, put a menu item in some menu whose item name fits one of the above patterns. This identifies the node which that item points to as the node for this purpose, regardless of the node's actual name. The @samp{--usage} feature of the Info reader looks for such a node or menu item in order to find the relevant text, so it is essential for every Texinfo file to have one. If one manual describes several programs, it should have such a node for each program described in the manual. @node License for Manuals @section License for Manuals @cindex license for manuals Please use the GNU Free Documentation License for all GNU manuals that are more than a few pages long. Likewise for a collection of short documents---you only need one copy of the GNU FDL for the whole collection. For a single short document, you can use a very permissive non-copyleft license, to avoid taking up space with a long license. See @uref{https://www.gnu.org/copyleft/fdl-howto.html} for more explanation of how to employ the GFDL. Note that it is not obligatory to include a copy of the GNU GPL or GNU LGPL in a manual whose license is neither the GPL nor the LGPL@. It can be a good idea to include the program's license in a large manual; in a short manual, whose size would be increased considerably by including the program's license, it is probably better not to include it. @node Manual Credits @section Manual Credits @cindex credits for manuals Please credit the principal human writers of the manual as the authors, on the title page of the manual. If a company sponsored the work, thank the company in a suitable place in the manual, but do not cite the company as an author. @node Printed Manuals @section Printed Manuals The FSF publishes some GNU manuals in printed form. To encourage sales of these manuals, the on-line versions of the manual should mention at the very start that the printed manual is available and should point at information for getting it---for instance, with a link to the page @url{https://www.gnu.org/order/order.html}. This should not be included in the printed manual, though, because there it is redundant. It is also useful to explain in the on-line forms of the manual how the user can print out the manual from the sources. @node NEWS File @section The NEWS File @cindex @file{NEWS} file In addition to its manual, the package should have a file named @file{NEWS} which contains a list of user-visible changes worth mentioning. In each new release, add items to the front of the file and identify the version they pertain to. Don't discard old items; leave them in the file after the newer items. This way, a user upgrading from any previous version can see what is new. If the @file{NEWS} file gets very long, move some of the older items into a file named @file{ONEWS} and put a note at the end referring the user to that file. @node Change Logs @section Change Logs @cindex change logs Keep a change log to describe all the changes made to program source files. The purpose of this is so that people investigating bugs in the future will know about the changes that might have introduced the bug. Often a new bug can be found by looking at what was recently changed. More importantly, change logs can help you eliminate conceptual inconsistencies between different parts of a program, by giving you a history of how the conflicting concepts arose, who they came from, and why the conflicting changes were made. @cindex software forensics, and change logs Therefore, change logs should be detailed enough and accurate enough to provide the information commonly required for such @dfn{software forensics}. Specifically, change logs should make finding answers to the following questions easy: @itemize @bullet @item What changes affected a particular source file? @item Was a particular source file renamed or moved, and if so, as part of what change? @item What changes affected a given function or macro or definition of a data structure? @item Was a function (or a macro or the definition of a data structure) renamed or moved from another file, and if so, as part of which change? @item What changes deleted a function (or macro or data structure)? @item What was the rationale for a given change, and what were its main ideas? @item Is there any additional information regarding the change, and if so, where can it be found? @end itemize @cindex VCS @cindex version control system, for keeping change logs Historically, change logs were maintained on specially formatted files. Nowadays, projects commonly keep their source files under a @dfn{version control system} (VCS), such as Git, Subversion, or Mercurial. If the VCS repository is publicly accessible, and changes are committed to it separately (one commit for each logical changeset) and record the authors of each change, then the information recorded by the VCS can be used to produce the change logs out of VCS logs, and to answer the above questions by using the suitable VCS commands. (However, the VCS log messages still need to provide some supporting information, as described below.) Projects that maintain such VCS repositories can decide not to maintain separate change log files, and instead rely on the VCS to keep the change logs. If you decide not to maintain separate change log files, you should still consider providing them in the release tarballs, for the benefit of users who'd like to review the change logs without accessing the project's VCS repository. Scripts exist that can produce @file{ChangeLog} files from the VCS logs; for example, the @file{gitlog-to-changelog} script, which is part of Gnulib, can do that for Git repositories. In Emacs, the command @kbd{C-x v a} (@code{vc-update-change-log}) does the job of incrementally updating a @file{ChangeLog} file from the VCS logs. If separate change log files @emph{are} maintained, they are normally called @file{ChangeLog}, and each such file covers an entire directory. Each directory can have its own change log file, or a directory can use the change log of its parent directory---it's up to you. @menu * Change Log Concepts:: * Style of Change Logs:: * Simple Changes:: * Conditional Changes:: * Indicating the Part Changed:: @end menu @node Change Log Concepts @subsection Change Log Concepts and Conventions @cindex changeset, in a change log @cindex batch of changes, in a change log You can think of the change log as a conceptual ``undo list'' which states how earlier versions were different from the current version. People can see the current version; they don't need the change log to tell them what is in it. What they want from a change log is a clear explanation of how the earlier version differed. Each @dfn{entry} in a change log describes either an individual change or the smallest batch of changes that belong together, also known as a @dfn{changeset}. @cindex title, change log entry @cindex header line, change log entry It is a good idea to start the change log entry with a @dfn{header line}: a single line that is a complete sentence which summarizes the changeset. If you keep the change log in a VCS, this should be a requirement, as VCS commands that show the change log in abbreviated form, such as @kbd{git log --oneline}, treat the header line specially. (In a @file{ChangeLog} file, the header line follows a line that says who was the author of the change and when it was installed.) @cindex description, change log entry Follow the change log entry's header line with a description of the overall change. This should be as long as needed to give a clear description. Pay special attention to aspects of the changeset not easily gleaned from the diffs or from the names of modified files and functions: the overall idea of the change and the need for it, and the relations, if any, between changes made to different files/functions. If the change or its reasons were discussed on some public forum, such as the project's issue tracker or mailing list, it is a good idea to summarize the main points of that discussion in the change's description, and include a pointer to that discussion or the issue ID for those who'd like to read it in full. The best place to explain how parts of the new code work with other code is in comments in the code, not in the change log. If you think that a change calls for explanation of @emph{why} the change was needed---that is, what problem the old code had such that it required this change---you're probably right. Please put the explanation in comments in the code, where people will see it whenever they see the code. An example of such an explanation is, ``This function used to be iterative, but that failed when MUMBLE was a tree.'' (Though such a simple reason would not need this kind of explanation.) The best place for other kinds of explanation of the change is in the change log entry. In particular, comments usually will not say why some code was deleted or moved to another place---that belongs to the description of the change which did that. Following the free-text description of the change, it is a good idea to give a list of names of the entities or definitions that you changed, according to the files they are in, and what was changed in each one. @xref{Style of Change Logs}. If a project uses a modern VCS to keep the change log information, as described in @ref{Change Logs}, explicitly listing the files and functions that were changed is not strictly necessary, and in some cases (like identical mechanical changes in many places) even tedious. It is up to you to decide whether to allow your project's developers to omit the list of changed files and functions from the log entries, and whether to allow such omissions under some specific conditions. However, while making this decision, please consider the following benefits of providing the list of changed entities with each change: @itemize @bullet @item Generation of useful @file{ChangeLog} files from VCS logs becomes more difficult if the change log entries don't list the modified functions/macros, because VCS commands cannot reliably reproduce their names from the commit information alone. For example, when there is a change in the header part of a function definition, the heading of the diff hunk as shown in the VCS log commands will name the wrong function as being modified (usually, the function defined before the one being modified), so using those diffs to glean the names of the modified functions will produce inaccurate results. You will need to use specialized scripts, such as gnulib's @file{vcs-to-changelog.py}, mentioned below, to solve these difficulties, and make sure it supports the source languages used by your project. @item While modern VCS commands, such as Git's @kbd{git log -L} and @kbd{git log -G}, provide powerful means for finding changes that affected a certain function or macro or data structure (and thus might make @file{ChangeLog} files unnecessary if you have the repository available), they can sometimes fail. For example, @kbd{git log -L} doesn't support syntax of some programming languages out of the box. Mentioning the modified functions/macros explicitly allows finding the related changes simply and reliably. @item Some VCS commands have difficulties or limitations when tracking changes across file moves or renames. Again, if the entities are mentioned explicitly, those difficulties can be overcome. @item Users that review changes using the generated @file{ChangeLog} files may not have the repository and the VCS commands available to them. Naming the modified entities alleviates that problem. @end itemize @noindent For these reasons, providing lists of modified files and functions with each change makes the change logs more useful, and we therefore recommend to include them whenever possible and practical. It is also possible to generate the lists naming the modified entities by running a script. One such script is @file{mklog.py} (written in Python 3); it is used by the @code{GCC} project. Gnulib provides another variant of such a script, called @file{vcs-to-changelog.py}, part of the @code{vcs-to-changelog} module. Note that these scripts currently support fewer programming languages than the manual commands provided by Emacs (@pxref{Style of Change Logs}). Therefore, the above mentioned method of generating the @code{ChangeLog} file from the VCS commit history, for instance via the @code{gitlog-to-changelog} script, usually gives better results---provided that the contributors stick to providing good commit messages. @node Style of Change Logs @subsection Style of Change Logs @cindex change logs, style Here are some simple examples of change log entries, starting with the header line that says who made the change and when it was installed, followed by descriptions of specific changes. (These examples are drawn from Emacs.) Keep in mind that the line which shows the date of the change and the author's name and email address is needed only in a separate @file{ChangeLog} file, not when the change logs are kept in a VCS. @example 2019-08-29 Noam Postavsky <npostavs@@gmail.com> Handle completely undecoded input in term (Bug#29918) * lisp/term.el (term-emulate-terminal): Avoid errors if the whole decoded string is eight-bit characters. Don't attempt to save the string for next iteration in that case. * test/lisp/term-tests.el (term-decode-partial) (term-undecodable-input): New tests. 2019-06-15 Paul Eggert <eggert@@cs.ucla.edu> Port to platforms where tputs is in libtinfow * configure.ac (tputs_library): Also try tinfow, ncursesw (Bug#33977). 2019-02-08 Eli Zaretskii <eliz@@gnu.org> Improve documentation of 'date-to-time' and 'parse-time-string' * doc/lispref/os.texi (Time Parsing): Document 'parse-time-string', and refer to it for the description of the argument of 'date-to-time'. * lisp/calendar/time-date.el (date-to-time): Refer in the doc string to 'parse-time-string' for more information about the format of the DATE argument. (Bug#34303) @end example If you mention the names of the modified functions or variables, it's important to name them in full. Don't abbreviate function or variable names, and don't combine them. Subsequent maintainers will often search for a function name to find all the change log entries that pertain to it; if you abbreviate the name, they won't find it when they search. For example, some people are tempted to abbreviate groups of function names by writing @samp{* register.el (@{insert,jump-to@}-register)}; this is not a good idea, since searching for @code{jump-to-register} or @code{insert-register} would not find that entry. Separate unrelated change log entries with blank lines. Don't put blank lines between individual changes of an entry. You can omit the file name and the asterisk when successive individual changes are in the same file. Break long lists of function names by closing continued lines with @samp{)}, rather than @samp{,}, and opening the continuation with @samp{(}. This makes highlighting in Emacs work better. Here is an example: @example * src/keyboard.c (menu_bar_items, tool_bar_items) (Fexecute_extended_command): Deal with 'keymap' property. @end example The easiest way to add an entry to @file{ChangeLog} is with the Emacs command @kbd{M-x add-change-log-entry}, or its variant @kbd{C-x 4 a} (@code{add-change-log-entry-other-window}). This automatically collects the name of the changed file and the changed function or variable, and formats a change log entry according to the conventions described above, leaving it up to you to describe the changes you made to that function or variable. When you install someone else's changes, put the contributor's name in the change log entry rather than in the text of the entry. In other words, write this: @example 2002-07-14 John Doe <jdoe@@gnu.org> * sewing.c: Make it sew. @end example @noindent rather than this: @example 2002-07-14 Usual Maintainer <usual@@gnu.org> * sewing.c: Make it sew. Patch by jdoe@@gnu.org. @end example When committing someone else's changes into a VCS, use the VCS features to specify the author. For example, with Git, use @kbd{git commit --author=@var{author}}. As for the date, that should be the date you applied the change. (With a VCS, use the appropriate command-line switches, e.g., @kbd{git commit --date=@var{date}}.) Modern VCS have commands to apply changes sent via email (e.g., Git has @kbd{git am}); in that case the author of the changeset and the date it was made will be automatically gleaned from the email message and recorded in the repository. If the patches are prepared with suitable VCS commands, such as @kbd{git format-patch}, the email message body will also have the original author of the changeset, so resending or forwarding the message will not interfere with attributing the changes to their author. Thus, we recommend that you request your contributors to use commands such as @kbd{git format-patch} to prepare the patches. @node Simple Changes @subsection Simple Changes Certain simple kinds of changes don't need much detail in the change log. If the description of the change is short enough, it can serve as its own header line: @example 2019-08-29 Eli Zaretskii <eliz@@gnu.org> * lisp/simple.el (kill-do-not-save-duplicates): Doc fix. (Bug#36827) @end example When you change the calling sequence of a function in a simple fashion, and you change all the callers of the function to use the new calling sequence, there is no need to make individual entries for all the callers that you changed. Just write in the entry for the function being called, ``All callers changed''---like this: @example * keyboard.c (Fcommand_execute): New arg SPECIAL. All callers changed. @end example When you change just comments or doc strings, it is enough to write an entry for the file, without mentioning the functions. Just ``Doc fixes'' is enough for the change log. When you make changes in many files that follow mechanically from one underlying change, it is enough to describe the underlying change. Here's an example of a change that affects all of the files in the repository: @example 2019-01-07 Paul Eggert <eggert@@cs.ucla.edu> Update copyright year to 2019 Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'. @end example Test suite files are part of the software, so we recommend treating them as code for change-log purposes. There's no technical need to make change log entries for non-software files (manuals, help files, media files, etc.). This is because they are not susceptible to bugs that are hard to understand. To correct an error, you need not know the history of the erroneous passage; it is enough to compare what the file says with the actual facts. However, you should keep change logs for non-software files when the project gets copyright assignments from its contributors, so as to make the records of authorship more accurate. For that reason, we recommend to keep change logs for Texinfo sources of your project's manuals. @node Conditional Changes @subsection Conditional Changes @cindex conditional changes, and change logs @cindex change logs, conditional changes Source files can often contain code that is conditional to build-time or static conditions. For example, C programs can contain compile-time @code{#if} conditionals; programs implemented in interpreted languages can contain module imports of function definitions that are only performed for certain versions of the interpreter; and Automake @file{Makefile.am} files can contain variable definitions or target declarations that are only to be considered if a configure-time Automake conditional is true. Many changes are conditional as well: sometimes you add a new variable, or function, or even a new program or library, which is entirely dependent on a build-time condition. It is useful to indicate in the change log the conditions for which a change applies. Our convention for indicating conditional changes is to use @emph{square brackets around the name of the condition}. Conditional changes can happen in numerous scenarios and with many variations, so here are some examples to help clarify. This first example describes changes in C, Perl, and Python files which are conditional but do not have an associated function or entity name: @example * xterm.c [SOLARIS2]: Include <string.h>. * FilePath.pm [$^O eq 'VMS']: Import the VMS::Feature module. * framework.py [sys.version_info < (2, 6)]: Make "with" statement available by importing it from __future__, to support also python 2.5. @end example Our other examples will for simplicity be limited to C, as the minor changes necessary to adapt them to other languages should be self-evident. Next, here is an entry describing a new definition which is entirely conditional: the C macro @code{FRAME_WINDOW_P} is defined (and used) only when the macro @code{HAVE_X_WINDOWS} is defined: @example * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined. @end example Next, an entry for a change within the function @code{init_display}, whose definition as a whole is unconditional, but the changes themselves are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional: @example * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent. @end example Finally, here is an entry for a change that takes effect only when a certain macro is @emph{not} defined: @example * host.c (gethostname) [!HAVE_SOCKETS]: Replace with winsock version. @end example @node Indicating the Part Changed @subsection Indicating the Part Changed Indicate the part of a function which changed by using angle brackets enclosing an indication of what the changed part does. Here is an entry for a change in the part of the function @code{sh-while-getopts} that deals with @code{sh} commands: @example * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that user-specified option string is empty. @end example @node Man Pages @section Man Pages @cindex man pages In the GNU project, man pages are secondary. It is not necessary or expected for every GNU program to have a man page, but some of them do. It's your choice whether to include a man page in your program. When you make this decision, consider that supporting a man page requires continual effort each time the program is changed. The time you spend on the man page is time taken away from more useful work. For a simple program which changes little, updating the man page may be a small job. Then there is little reason not to include a man page, if you have one. For a large program that changes a great deal, updating a man page may be a substantial burden. If a user offers to donate a man page, you may find this gift costly to accept. It may be better to refuse the man page unless the same person agrees to take full responsibility for maintaining it---so that you can wash your hands of it entirely. If this volunteer later ceases to do the job, then don't feel obliged to pick it up yourself; it may be better to withdraw the man page from the distribution until someone else agrees to update it. When a program changes only a little, you may feel that the discrepancies are small enough that the man page remains useful without updating. If so, put a prominent note near the beginning of the man page stating that you don't maintain it and that the Texinfo manual is more authoritative. The note should say how to access the Texinfo documentation. Be sure that man pages include a copyright statement and free license. The simple all-permissive license is appropriate for simple man pages (@pxref{License Notices for Other Files,,,maintain,Information for GNU Maintainers}). For long man pages, with enough explanation and documentation that they can be considered true manuals, use the GFDL (@pxref{License for Manuals}). Finally, the GNU help2man program (@uref{https://www.gnu.org/software/help2man/}) is one way to automate generation of a man page, in this case from @option{--help} output. This is sufficient in many cases. @node Reading other Manuals @section Reading other Manuals There may be non-free books or documentation files that describe the program you are documenting. It is ok to use these documents for reference, just as the author of a new algebra textbook can read other books on algebra. A large portion of any non-fiction book consists of facts, in this case facts about how a certain program works, and these facts are necessarily the same for everyone who writes about the subject. But be careful not to copy your outline structure, wording, tables or examples from preexisting non-free documentation. Copying from free documentation may be ok; please check with the FSF about the individual case. @node Managing Releases @chapter The Release Process @cindex releasing Making a release is more than just bundling up your source files in a tar file and putting it up for FTP@. You should set up your software so that it can be configured to run on a variety of systems. Your Makefile should conform to the GNU standards described below, and your directory layout should also conform to the standards discussed below. Doing so makes it easy to include your package into the larger framework of all GNU software. @menu * Configuration:: How configuration of GNU packages should work. * Makefile Conventions:: Makefile conventions. * Releases:: Making releases @end menu @node Configuration @section How Configuration Should Work @cindex program configuration @pindex configure Each GNU distribution should come with a shell script named @code{configure}. This script is given arguments which describe the kind of machine and system you want to compile the program for. The @code{configure} script must record the configuration options so that they affect compilation. The description here is the specification of the interface for the @code{configure} script in GNU packages. Many packages implement it using GNU Autoconf (@pxref{Top,, Introduction, autoconf, Autoconf}) and/or GNU Automake (@pxref{Top,, Introduction, automake, Automake}), but you do not have to use these tools. You can implement it any way you like; for instance, by making @code{configure} be a wrapper around a completely different configuration system. Another way for the @code{configure} script to operate is to make a link from a standard name such as @file{config.h} to the proper configuration file for the chosen system. If you use this technique, the distribution should @emph{not} contain a file named @file{config.h}. This is so that people won't be able to build the program without configuring it first. Another thing that @code{configure} can do is to edit the Makefile. If you do this, the distribution should @emph{not} contain a file named @file{Makefile}. Instead, it should include a file @file{Makefile.in} which contains the input used for editing. Once again, this is so that people won't be able to build the program without configuring it first. If @code{configure} does write the @file{Makefile}, then @file{Makefile} should have a target named @file{Makefile} which causes @code{configure} to be rerun, setting up the same configuration that was set up last time. The files that @code{configure} reads should be listed as dependencies of @file{Makefile}. All the files which are output from the @code{configure} script should have comments at the beginning stating that they were generated automatically using @code{configure}. This is so that users won't think of trying to edit them by hand. The @code{configure} script should write a file named @file{config.status} which describes which configuration options were specified when the program was last configured. This file should be a shell script which, if run, will recreate the same configuration. The @code{configure} script should accept an option of the form @samp{--srcdir=@var{dirname}} to specify the directory where sources are found (if it is not the current directory). This makes it possible to build the program in a separate directory, so that the actual source directory is not modified. If the user does not specify @samp{--srcdir}, then @code{configure} should check both @file{.} and @file{..} to see if it can find the sources. If it finds the sources in one of these places, it should use them from there. Otherwise, it should report that it cannot find the sources, and should exit with nonzero status. Usually the easy way to support @samp{--srcdir} is by editing a definition of @code{VPATH} into the Makefile. Some rules may need to refer explicitly to the specified source directory. To make this possible, @code{configure} can add to the Makefile a variable named @code{srcdir} whose value is precisely the specified directory. In addition, the @samp{configure} script should take options corresponding to most of the standard directory variables (@pxref{Directory Variables}). Here is the list: @example --prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir --sharedstatedir --localstatedir --runstatedir --libdir --includedir --oldincludedir --datarootdir --datadir --infodir --localedir --mandir --docdir --htmldir --dvidir --pdfdir --psdir @end example The @code{configure} script should also take an argument which specifies the type of system to build the program for. This argument should look like this: @example @var{cpu}-@var{company}-@var{system} @end example For example, an Athlon-based GNU/Linux system might be @samp{i686-pc-linux-gnu}. The @code{configure} script needs to be able to decode all plausible alternatives for how to describe a machine. Thus, @samp{athlon-pc-gnu/linux} would be a valid alias. There is a shell script called @uref{https://git.savannah.gnu.org/cgit/config.git/plain/config.sub, @file{config.sub}} that you can use as a subroutine to validate system types and canonicalize aliases. The @code{configure} script should also take the option @option{--build=@var{buildtype}}, which should be equivalent to a plain @var{buildtype} argument. For example, @samp{configure --build=i686-pc-linux-gnu} is equivalent to @samp{configure i686-pc-linux-gnu}. When the build type is not specified by an option or argument, the @code{configure} script should normally guess it using the shell script @uref{https://git.savannah.gnu.org/cgit/config.git/plain/config.guess, @file{config.guess}}. @cindex optional features, configure-time Other options are permitted to specify in more detail the software or hardware present on the machine, to include or exclude optional parts of the package, or to adjust the name of some tools or arguments to them: @table @samp @item --enable-@var{feature}@r{[}=@var{parameter}@r{]} Configure the package to build and install an optional user-level facility called @var{feature}. This allows users to choose which optional features to include. Giving an optional @var{parameter} of @samp{no} should omit @var{feature}, if it is built by default. No @samp{--enable} option should @strong{ever} cause one feature to replace another. No @samp{--enable} option should ever substitute one useful behavior for another useful behavior. The only proper use for @samp{--enable} is for questions of whether to build part of the program or exclude it. @item --with-@var{package} @c @r{[}=@var{parameter}@r{]} The package @var{package} will be installed, so configure this package to work with @var{package}. @c Giving an optional @var{parameter} of @c @samp{no} should omit @var{package}, if it is used by default. Possible values of @var{package} include @samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc}, @samp{gdb}, @samp{x}, and @samp{x-toolkit}. Do not use a @samp{--with} option to specify the file name to use to find certain files. That is outside the scope of what @samp{--with} options are for. @item @var{variable}=@var{value} Set the value of the variable @var{variable} to @var{value}. This is used to override the default values of commands or arguments in the build process. For example, the user could issue @samp{configure CFLAGS=-g CXXFLAGS=-g} to build with debugging information and without the default optimization. Specifying variables as arguments to @code{configure}, like this: @example ./configure CC=gcc @end example is preferable to setting them in environment variables: @example CC=gcc ./configure @end example as it helps to recreate the same configuration later with @file{config.status}. However, both methods should be supported. @end table All @code{configure} scripts should accept all of the ``detail'' options and the variable settings, whether or not they make any difference to the particular package at hand. In particular, they should accept any option that starts with @samp{--with-} or @samp{--enable-}. This is so users will be able to configure an entire GNU source tree at once with a single set of options. You will note that the categories @samp{--with-} and @samp{--enable-} are narrow: they @strong{do not} provide a place for any sort of option you might think of. That is deliberate. We want to limit the possible configuration options in GNU software. We do not want GNU programs to have idiosyncratic configuration options. Packages that perform part of the compilation process may support cross-compilation. In such a case, the host and target machines for the program may be different. The @code{configure} script should normally treat the specified type of system as both the host and the target, thus producing a program which works for the same type of machine that it runs on. To compile a program to run on a host type that differs from the build type, use the configure option @option{--host=@var{hosttype}}, where @var{hosttype} uses the same syntax as @var{buildtype}. The host type normally defaults to the build type. To configure a cross-compiler, cross-assembler, or what have you, you should specify a target different from the host, using the configure option @samp{--target=@var{targettype}}. The syntax for @var{targettype} is the same as for the host type. So the command would look like this: @example ./configure --host=@var{hosttype} --target=@var{targettype} @end example The target type normally defaults to the host type. Programs for which cross-operation is not meaningful need not accept the @samp{--target} option, because configuring an entire operating system for cross-operation is not a meaningful operation. Some programs have ways of configuring themselves automatically. If your program is set up to do this, your @code{configure} script can simply ignore most of its arguments. @comment The makefile standards are in a separate file that is also @comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93. @comment For this document, turn chapters into sections, etc. @lowersections @include make-stds.texi @raisesections @node Releases @section Making Releases @cindex packaging @cindex version numbers, for releases You should identify each release with a pair of version numbers, a major version and a minor. We have no objection to using more than two numbers, but it is very unlikely that you really need them. Package the distribution of @code{Foo version 69.96} up in a gzipped tar file with the name @file{foo-69.96.tar.gz}. It should unpack into a subdirectory named @file{foo-69.96}. Building and installing the program should never modify any of the files contained in the distribution. This means that all the files that form part of the program in any way must be classified into @dfn{source files} and @dfn{non-source files}. Source files are written by humans and never changed automatically; non-source files are produced from source files by programs under the control of the Makefile. @cindex @file{README} file The distribution should contain a file named @file{README} with a general overview of the package: @itemize @item the name of the package; @item the version number of the package, or refer to where in the package the version can be found; @item a general description of what the package does; @item a reference to the file @file{INSTALL}, which should in turn contain an explanation of the installation procedure; @item a brief explanation of any unusual top-level directories or files, or other hints for readers to find their way around the source; @item a reference to the file which contains the copying conditions. The GNU GPL, if used, should be in a file called @file{COPYING}. If the GNU LGPL is used, it should be in a file called @file{COPYING.LESSER}. @end itemize Naturally, all the source files must be in the distribution. It is okay to include non-source files in the distribution along with the source files they are generated from, provided they are up-to-date with the source they are made from, and machine-independent, so that normal building of the distribution will never modify them. We commonly include non-source files produced by Autoconf, Automake, Bison, @code{flex}, @TeX{}, and @code{makeinfo}; this helps avoid unnecessary dependencies between our distributions, so that users can install whichever versions of whichever packages they like. Do not induce new dependencies on other software lightly. Non-source files that might actually be modified by building and installing the program should @strong{never} be included in the distribution. So if you do distribute non-source files, always make sure they are up to date when you make a new distribution. Make sure that all the files in the distribution are world-readable, and that directories are world-readable and world-searchable (octal mode 755). We used to recommend that all directories in the distribution also be world-writable (octal mode 777), because ancient versions of @code{tar} would otherwise not cope when extracting the archive as an unprivileged user. That can easily lead to security issues when creating the archive, however, so now we recommend against that. Don't include any symbolic links in the distribution itself. If the tar file contains symbolic links, then people cannot even unpack it on systems that don't support symbolic links. Also, don't use multiple names for one file in different directories, because certain file systems cannot handle this and that prevents unpacking the distribution. Try to make sure that all the file names will be unique on MS-DOS@. A name on MS-DOS consists of up to 8 characters, optionally followed by a period and up to three characters. MS-DOS will truncate extra characters both before and after the period. Thus, @file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they are truncated to @file{foobarha.c} and @file{foobarha.o}, which are distinct. @cindex @file{texinfo.tex}, in a distribution Include in your distribution a copy of the @file{texinfo.tex} you used to test print any @file{*.texinfo} or @file{*.texi} files. Likewise, if your program uses small GNU software packages like regex, getopt, obstack, or termcap, include them in the distribution file. Leaving them out would make the distribution file a little smaller at the expense of possible inconvenience to a user who doesn't know what other files to get. @node References @chapter References to Non-Free Software and Documentation @cindex references to non-free material A GNU program should not recommend, promote, or grant legitimacy to the use of any non-free program. Proprietary software is a social and ethical problem, and our aim is to put an end to that problem. We can't stop some people from writing proprietary programs, or stop other people from using them, but we can and should refuse to advertise them to new potential customers, or to give the public the impression that their existence is legitimate. The GNU definition of free software is found on the GNU web site at @url{https://www.gnu.org/@/philosophy/@/free-sw.html}, and the definition of free documentation is found at @url{https://www.gnu.org/@/philosophy/@/free-doc.html}. The terms ``free'' and ``non-free'', used in this document, refer to those definitions. A list of important licenses and whether they qualify as free is in @url{https://www.gnu.org/@/licenses/@/license-list.html}. If it is not clear whether a license qualifies as free, please ask the GNU Project by writing to @email{licensing@@gnu.org}. We will answer, and if the license is an important one, we will add it to the list. When a non-free program or system is well known, you can mention it in passing---that is harmless, since users who might want to use it probably already know about it. For instance, it is fine to explain how to build your package on top of some widely used non-free operating system, or how to use it together with some widely used non-free program, after first explaining how to use it on the GNU system. However, you should give only the necessary information to help those who already use the non-free program to use your program with it---don't give, or refer to, any further information about the proprietary program, and don't imply that the proprietary program enhances your program, or that its existence is in any way a good thing. The goal should be that people already using the proprietary program will get the advice they need about how to use your free program with it, while people who don't already use the proprietary program will not see anything likely to lead them to take an interest in it. You shouldn't recommend any non-free add-ons for the non-free program, but it is ok to mention free add-ons that help it to work with your program, and how to install the free add-ons even if that requires running some non-free program. If a non-free program or system is obscure in your program's domain, your program should not mention or support it at all, since doing so would tend to popularize the non-free program more than it popularizes your program. (You cannot hope to find many additional users for your program among the users of Foobar, if the existence of Foobar is not generally known among people who might want to use your program.) Sometimes a program is free software in itself but depends on a non-free platform in order to run. For instance, it used to be the case that many Java programs depended on some non-free Java libraries. (See @uref{https://www.gnu.org/philosophy/java-trap.html}.) To recommend or promote such a program is to promote the other programs it needs; therefore, judge mentions of the former as if they were mentions of the latter. For this reason, we were careful about listing Java programs in the Free Software Directory: we wanted to avoid promoting the non-free Java libraries. Java no longer has this problem, but the general principle will remain the same: don't recommend, promote or legitimize programs that depend on non-free software to run. Some free programs strongly encourage the use of non-free software. A typical example is @command{mplayer}. It is free software in itself, and the free code can handle some kinds of files. However, @command{mplayer} recommends use of non-free codecs for other kinds of files, and users that install @command{mplayer} are very likely to install those codecs along with it. To recommend @command{mplayer} is, in effect, to promote use of the non-free codecs. Thus, you should not recommend programs that strongly encourage the use of non-free software. This is why we do not list @command{mplayer} in the Free Software Directory. A GNU package should not refer the user to any non-free documentation for free software. Free documentation that can be included in free operating systems is essential for completing the GNU system, or any free operating system, so encouraging it is a priority; to recommend use of documentation that we are not allowed to include undermines the impetus for the community to produce documentation that we can include. So GNU packages should never recommend non-free documentation. By contrast, it is ok to refer to journal articles and textbooks in the comments of a program for explanation of how it functions, even though they are non-free. This is because we don't include such things in the GNU system even if they are free---they are outside the scope of what a software distribution needs to include. Referring to a web site that describes or recommends a non-free program is promoting that program, so please do not make links to (or mention by name) web sites that contain such material. This policy is relevant particularly for the web pages for a GNU package. What about chains of links? Following links from nearly any web site can lead eventually to promotion of non-free software; this is inherent in the nature of the web. Here's how we treat that. You should not refer to AT&T's web site if that recommends AT&T's non-free software packages; you should not refer to a page @var{p} that links to AT&T's site presenting it as a place to get some non-free program, because that part of the page @var{p} itself recommends and legitimizes the non-free program. However, if @var{p} contains a link to AT&T's web site for some other purpose (such as long-distance telephone service), that is no reason you should not link to @var{p}. A web page recommends a program in an implicit but particularly strong way if it requires users to run that program in order to use the page. Many pages contain Javascript code which they recommend in this way. This Javascript code may be free or non-free, but non-free is the usual case. If the purpose for which you would refer to the page cannot be carried out without running non-free Javascript code, then you should not refer to it. Thus, if the purpose of referring to the page is for people to view a video, or subscribing to a mailing list, and the viewing or subscribing fail to work if the user's browser blocks the non-free Javascript code, then don't refer to that page. The extreme case is that of web sites which depend on non-free Javascript code even to @emph{see} the contents of the pages. Any site hosted on @indicateurl{wix.com} has this problem, and so do some other sites. Referring people to such pages to read their contents is, in effect, urging them to run those non-free programs---so please don't refer to those pages. (Such pages also break the Web, so they deserve condemnation for two reasons.) Instead, please quote excerpts from the page to make your point, or find another place to refer to that information. @node GNU Free Documentation License @appendix GNU Free Documentation License @cindex FDL, GNU Free Documentation License @include fdl.texi @node Index @unnumbered Index @printindex cp @bye Local variables: eval: (add-hook 'before-save-hook 'time-stamp) time-stamp-start: "@set lastupdate " time-stamp-end: "$" time-stamp-format: "%:b %:d, %:y" compile-command: "cd work.s && make" End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/stat-size.texi����������������������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stat-size @section stat-size The @code{stat-size} module provides a small number of macros intended for interpreting the file size information in an instance of @code{struct stat}. @c We deliberately don't document DEV_BSIZE (it looks to James @c Youngman as if the ST_NBLOCKSIZE macro should be used instead). @findex ST_NBLOCKS @findex ST_NBLOCKSIZE @cindex block size On POSIX systems, the @code{st_blocks} member of @code{struct stat} contains the number of disk blocks occupied by a file. The @code{ST_NBLOCKS} macro is used to estimate this quantity on systems which don't actually have @code{st_blocks}. Each of these blocks contains @code{ST_NBLOCKSIZE} bytes. @findex ST_BLKSIZE The value of @code{ST_NBLOCKSIZE} is often quite small, small enough that performing I/O in chunks that size would be inefficient. @code{ST_BLKSIZE} is the I/O block size recommended for I/O to this file. This is not guaranteed to give optimum performance, but it should be reasonably efficient. ���������������������������gnulib-20210822~d383792/doc/static-inline.texi������������������������������������������������������0000664�0000000�0000000�00000001313�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU static-inline module documentation @c Copyright (C) 2019--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @node static inline @section Static inline functions @cindex static inline @cindex inline In order to mark functions as @code{static inline}, the only prerequisite you need is an @code{AC_REQUIRE([AC_C_INLINE])}. No Gnulib module is needed. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/timevar.texi������������������������������������������������������������0000664�0000000�0000000�00000004437�14110572173�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Profiling of program phases @section Profiling of program phases The module @samp{timevar} provides a simple self-profiling facility, based on timers. @smallexample Execution times (seconds) read : 0.09 (19%) usr 0.08 (80%) sys 0.09 (18%) wall read: scan : 0.04 ( 9%) usr 0.08 (80%) sys 0.12 (26%) wall read: parse : 0.05 (10%) usr 0.00 ( 0%) sys 0.05 (10%) wall work : 0.33 (70%) usr 0.00 ( 0%) sys 0.35 (71%) wall work: phase 1 : 0.30 (64%) usr 0.00 ( 0%) sys 0.30 (64%) wall work: phase 2 : 0.13 (28%) usr 0.00 ( 0%) sys 0.14 (29%) wall output : 0.04 ( 9%) usr 0.02 (20%) sys 0.04 ( 8%) wall total time : 0.47 0.10 0.49 @end smallexample To set up @code{timevar}, copy the stub file @file{gnulib/lib/timevar.def} next to where @file{timevar.h} and @file{timevar.c} were imported in your project, and define your timers there. For instance: @smallexample /* The total execution time. Mandatory. */ DEFTIMEVAR (tv_total, "total time") /* Examples. */ DEFTIMEVAR (tv_read, "read") DEFTIMEVAR (tv_work, "work") DEFTIMEVAR (tv_work_1, "work: phase 1") DEFTIMEVAR (tv_work_2, "work: phase 2") DEFTIMEVAR (tv_output, "output") @end smallexample Do not remove @code{tv_total}, it is mandatory. You may change its associated string. @sp 1 Use @code{timevar_push}/@code{timevar_pop} to start/stop timers, as in the following example. @smallexample #include <config.h> #include "timevar.h" #include <stdio.h> #include "read.h" #include "work.h" #include "output.h" int main (void) @{ timevar_enabled = true; timevar_init (); timevar_start (tv_total); timevar_push (tv_read); reader (); timevar_pop (tv_read); timevar_push (tv_work); work (); timevar_pop (tv_work); timevar_push (tv_output); output (); timevar_pop (tv_output); timevar_stop (tv_total); timevar_print (stderr); @} @end smallexample @noindent with, for instance, in @file{work.c} @smallexample #include <config.h> #include "work.h" void work (void) @{ timevar_push (tv_work_phase1); work1 (); timevar_pop (tv_work_phase1); timevar_push (tv_work_phase2); work2 (); timevar_pop (tv_work_phase2); @} @end smallexample ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/transversal.texi��������������������������������������������������������0000664�0000000�0000000�00000007064�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Modules that modify the way other modules work @section Modules that modify the way other modules work The normal way to design modules is that each module has its own code, and the module dependencies provide the facilities on which this code can rely. But sometimes it is necessary to use more advanced techniques. For example: @itemize @item You may want to have optional module dependencies: Let module A use facilities provided by module B, if module B is present, but without requiring that module B is present. @item A module can indicate support for particular behaviours. For example, Gnulib has a module @samp{sigpipe} that requests POSIX compatible SIGPIPE behaviour from all other modules -- something that is not enabled by default. Or consider the @samp{nonblocking} module, that is an indicator that all I/O functions should handle non-blocking file descriptors -- something that, equally, is not enabled by default. @item A module can indicate to other modules that they can rely on certain guarantees, and thus omit specific code. For example, when Gnulib's @samp{malloc-gnu} module is present, you can omit code that test @code{n} against zero when you call @code{malloc (n)}. @end itemize Be aware that these advanced techniques likely cause breakage in the situation of multiple @code{gnulib-tool} invocations in the scope of a single @code{configure} file. This is because the question ``is module B present?'' does not have a unique answer in such situations. @code{gnulib-tool} has support for these techniques in the situation of @code{--create-testdir --single-configure}, which basically has two @code{gnulib-tool} invocations, one for a set of modules that end up in @code{gllib}, and one for the set of modules that end up in @code{gltests}. But you should be aware that this does not cover the general situation. Which technique to use, depends on the answer to the question: ``If my module occurs among the modules of @code{gltests}, should it have an effect on the modules in @code{gllib}?'' If the answer is ``no'', your module description should invoke the Autoconf macro @code{gl_MODULE_INDICATOR}. This Autoconf macro takes one argument: the name of your module. The effect of @code{gl_MODULE_INDICATOR([@var{my-module}])} is to define, in @code{config.h}, a C macro @code{GNULIB_@var{MY_MODULE}} that indicates whether your macro is considered to be present. This works even when your macro is used in @code{gltests}: @code{GNULIB_@var{MY_MODULE}} will then evaluate to 1 in @code{gltests} but to 0 in @code{gllib}. If the answer is ``yes'', you have two techniques available. The first one is to invoke a similar Autoconf macro, named @code{gl_MODULE_INDICATOR_FOR_TESTS}. It works similarly. However, when your macro is used in @code{gltests}, @code{GNULIB_@var{MY_MODULE}} will evaluate to 1 both in @code{gltests} and in @code{gllib}. The second one is to define a shell variable in the @code{configure} file that tells whether your module is present, through use of @code{m4_divert_text}. The Autoconf macros of a dependency module will initialize this shell variable, through @samp{m4_divert_text([DEFAULTS], [@var{my_shell_var}=no])}. The Autoconf macros of your module will override this value, through @samp{m4_divert_text([INIT_PREPARE], [@var{my_shell_var}=yes])}. Then you can use @code{@var{my_shell_var}} in the Autoconf macros of both modules. You can find more details about this technique in the Gnulib module @code{getopt-gnu}. Reminder: These techniques are advanced. They have the potential to cause lots of headaches if you apply them incorrectly. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/valgrind-tests.texi�����������������������������������������������������0000664�0000000�0000000�00000013426�14110572173�0020713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Running self-tests under valgrind @section Running self-tests under valgrind @cindex valgrind For projects written in C or similar languages, running the self-tests under Valgrind can reveal hard to find memory issues. Gnulib supports two ways to make use of Valgrind: one that enables use of Valgrind at configure time, when @code{configure} found it to be present; and one at the discretion of the developer. @menu * Using valgrind automatically:: * Valgrind options:: * Using valgrind manually:: * Valgrind and shell scripts:: @end menu @node Using valgrind automatically @subsection Using valgrind without developer intervention The @code{valgrind-tests} module searches for Valgrind at configure time and declares the @code{LOG_VALGRIND} automake variable for use with automake's @code{LOG_COMPILER}. After importing the @code{valgrind-tests} module to your project, you use it by adding the following to the @code{Makefile.am} that runs the self-tests: @smallexample LOG_COMPILER = $(LOG_VALGRIND) @end smallexample This will run all self-checks under valgrind. Replace @code{LOG_COMPILER} with @code{TESTS_ENVIRONMENT} if you are using the old serial test harness. The parallel test harness has been the default in automake since version 1.11.3, but if you are using an older automake, or put @samp{serial-tests} in @samp{AM_INIT_AUTOMAKE}/@samp{AUTOMAKE_OPTIONS} you would still be using the serial test harness. If you desire a project-wide decision that valgrind is not enabled by default, but still allow users to enable it with @code{--enable-valgrind-tests} you may put the following in configure.ac before gl_INIT. @smallexample gl_VALGRIND_TESTS_DEFAULT_NO @end smallexample @node Valgrind options @subsection Valgrind options The @code{VALGRIND} variable holds the name of the valgrind binary and some options passed to valgrind. You may provide additional options that are passed to valgrind using the @samp{VALGRINDFLAGS} variable, for example: @smallexample ./configure VALGRINDFLAGS="--suppressions=~/local.supp" @end smallexample Alternatively during build phase: @smallexample make check VALGRINDFLAGS="--suppressions=~/local.supp" @end smallexample This is useful if you have a valgrind suppression files that are needed to avoid triggering errors for known errors, typically in system libraries. The @code{VALGRIND} variable include options that are useful when valgrind is run non-interactively through the test harness. The default parameters are @code{-q} to silence the output, @code{--error-exitcode=1} to cause valgrind errors to be treated as fatal errors, and @code{--leak-check=full} to check for memory leaks. These options can be controlled through the @code{DEFAULT_VALGRINDFLAGS} variable. For example, when configuring the package: @smallexample ./configure DEFAULT_VALGRINDFLAGS="--quiet" @end smallexample Alternatively, during the build phase: @smallexample make check DEFAULT_VALGRINDFLAGS="--quiet" @end smallexample That would have the effect of removing @code{--error-exitcode=1} and @code{--leak-check=full} from the default options, thus causing any valgrind errors to be silently ignored, instead of causing fatal test failures. As a developer you may use the variables in @code{configure.ac} before calling @code{gl_INIT}, like this if your program has deeply-nested call chains: @smallexample gl_EARLY ... VALGRINDFLAGS="$VALGRINDFLAGS --num-callers=42" ... gl_INIT @end smallexample Note that any user-supplied @code{VALGRINDFLAGS} value is preserved, which is usually what you want. Finally, as a developer you may want to provide additional per-directory options to valgrind and the @code{AM_VALGRINDFLAGS} variable can be used for this. For example: @smallexample AM_VALGRINDFLAGS = --suppressions=$(srcdir)/local-valgrind.supp LOG_COMPILER = $(LOG_VALGRIND) @end smallexample @node Using valgrind manually @subsection Using valgrind at the developer's discretion In this approach, you define a @code{Makefile.am} variable @samp{VALGRIND} (or, more abstractly, @samp{CHECKER}), that is usually set to empty. When you have configured and built the package and you decide that you want to run the tests with valgrind, you do so by modifying the definition of @samp{VALGRIND} in the Makefile. @node Valgrind and shell scripts @subsection How to use Valgrind with shell scripts It is not desirable to apply valgrind to shell scripts or other non-binaries, because @itemize @bullet @item It is wasteful, and you usually don't want to look for memory leaks in bash. @item On a bi-arch system, you may get an error message such as "valgrind: wrong executable class (eg. 32-bit instead of 64-bit)". @end itemize There are two ways to avoid this: @itemize @bullet @item Using the Automake parallel-tests feature, you can use the following instead: @smallexample TEST_EXTENSIONS = .pl .sh LOG_COMPILER = $(LOG_VALGRIND) @end smallexample Then valgrind will only be used for the non-.sh and non-.pl tests. For old automake (before 1.11.3), you will need @code{AUTOMAKE_OPTIONS = parallel-tests} to enable the parallel test harness. @item You can make use of the @code{build-aux/run-test} script from Gnulib. Add these lines to your @code{Makefile.am}: @smallexample LOG_COMPILER += $(SHELL) $(top_srcdir)/build-aux/run-test '$(LOG_VALGRIND)' @end smallexample Replace @code{LOG_COMPILER} with @code{TESTS_ENVIRONMENT} if you use the old serial test harness. @end itemize However, with this measure in place, binaries invoked through scripts will not be invoked under valgrind. This can be solved by defining environment variables in the @code{TESTS_ENVIRONMENT} variable that are then used by the shell scripts. For example, add the following: @smallexample TESTS_ENVIRONMENT = VALGRIND='$(LOG_VALGRIND)' @end smallexample And then modify the shell scripts to invoke the binary prefixed with @code{$VALGRIND}. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/vcs-to-changelog.texi���������������������������������������������������0000664�0000000�0000000�00000004713�14110572173�0021104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node VCS To ChangeLog @section VCS To ChangeLog @c Copyright (C) 2020--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @cindex VCS To ChangeLog @findex vcs-to-changelog Gnulib provides the @samp{vcs-to-changelog} module to generate an output similar to the GNU ChangeLog format from metadata of source control software such as git. Here's an example of using @samp{vcs-to-changelog}: @example build-aux/vcs-to-changelog.py <from_ref> <to_ref> @end example where @code{<from_ref>} and @code{<to_ref>} refer to the range of commits to generate the output. VCS To ChangeLog currently recognises changes in C source code and can traverse commits in git. Additional source frontends and source control backends may be added to the module. @samp{vcs-to-changelog} takes the following optional arguments: @itemize @item @code{-d}: Run the parser debugger, used for debugging @samp{vcs-to-changelog} @item @code{-q filename}: Load @var{filename} as the quirks file for the project. @end itemize The quirks file is a python module that must minimally implement a @code{get_project_quirks} function that returns an object of type @code{ProjectQuirks} or its subclass. The subclass may override the following members of @code{ProjectQuirks}: @itemize @bullet @item @code{repo}: Specify the project repo source control. The default value is @code{git}. @item @code{IGNORE_LIST}: A list of files to ignore in the changesets, either because they are not needed (such as the ChangeLog) or because they are not parseable. For example, the GNU C Library has a header file that is only assembly code, which breaks the C parser. @item @code{MACRO_QUIRKS}: A list of dictionary entries with indexes as @code{orig} and @code{sub} where @code{orig} is a Python regular expression pattern to match and @code{sub} is the substitution. These substitutions are used to work around C/C++ macros that are known to break parsing of C programs. @item @code{C_MACROS}: This is a list of C preprocessor macro definitions that are extensively used and are known to break parsing due to some characteristic, mainly the lack of a semicolon at the end. @end itemize �����������������������������������������������������gnulib-20210822~d383792/doc/verify.texi�������������������������������������������������������������0000664�0000000�0000000�00000011771�14110572173�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU verify module documentation @c Copyright (C) 2006, 2009--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @node Compile-time Assertions @section Compile-time Assertions @cindex assertion @findex verify @findex verify_expr This module provides a header file @file{verify.h} that defines macros related to compile-time verification. Two of these macros are @code{verify (@var{V})} and @code{verify_expr (@var{V}, @var{EXPR})}. Both accept an integer constant expression argument @var{V} and verify that it is nonzero. If not, a compile-time error results. These two macros implement compile-time tests, as opposed to the standard @code{assert} macro which supports only runtime tests. Since the tests occur at compile-time, they are more reliable, and they require no runtime overhead. @code{verify (@var{V});} is a declaration; it can occur outside of functions. In contrast, @code{verify_expr (@var{V}, @var{EXPR})} is an expression that returns the value of @var{EXPR}; it can be used in macros that expand to expressions. If @var{EXPR} is an integer constant expression, then @code{verify_expr (@var{V}, @var{EXPR})} is also an integer constant expression. Although @var{EXPR} and @code{verify_expr (@var{V}, @var{EXPR})}@ are guaranteed to have the same side effects and value and type (after integer promotion), they need not have the same type if @var{EXPR}'s type is an integer that is narrower than @code{int} or @code{unsigned int}. @var{V} should be an integer constant expression in the sense of the C standard. Its leaf operands should be integer, enumeration, or character constants; or @code{sizeof} expressions that return constants; or floating constants that are the immediate operands of casts. Outside a @code{sizeof} subexpression, @var{V} should not contain any assignments, function calls, comma operators, casts to non-integer types, or subexpressions whose values are outside the representable ranges for their types. If @var{V} is not an integer constant expression, then a compiler might reject a usage like @samp{verify (@var{V});} even when @var{V} is nonzero. Although the standard @code{assert} macro is a runtime test, C2x specifies a builtin @code{_Static_assert (@var{V})}, its @file{assert.h} header has a similar macro named @code{static_assert}, and C++17 has a similar @code{static_assert} builtin. These builtins and macros differ from @code{verify} in two major ways. First, they can also be used within a @code{struct} or @code{union} specifier, in place of an ordinary member declaration. Second, they allow the programmer to specify, as an optional second argument, a compile-time diagnostic as a string literal. If your program is not intended to be portable to compilers that lack C2x or C++17 @code{static_assert}, the only advantage of @code{verify} is that its name is a bit shorter. The @file{verify.h} header defines one more macro, @code{assume (@var{E})}, which expands to an expression of type @code{void} that causes the compiler to assume that @var{E} yields a nonzero value. @var{E} should be a scalar expression, and should not have side effects; it may or may not be evaluated. The behavior is undefined if @var{E} would yield zero. The main use of @code{assume} is optimization, as the compiler may be able to generate better code if it assumes @var{E}. For best results, @var{E} should be simple enough that a compiler can determine that it has no side effects: if @var{E} calls an external function or accesses volatile storage the compiler may not be able to optimize @var{E} away and @code{assume (@var{E})} may therefore slow down the program. Here are some example uses of these macros. @example #include <verify.h> #include <limits.h> #include <time.h> /* Verify that time_t is an integer type. */ verify ((time_t) 1.5 == 1); /* Verify that time_t is no smaller than int. */ verify (sizeof (int) <= sizeof (time_t)); /* Verify that time_t is signed. */ verify ((time_t) -1 < 0); /* Verify that time_t uses two's complement representation. */ verify (~ (time_t) -1 == 0); /* Return the maximum value of the integer type T, verifying that T is an unsigned integer type. The cast to (T) is outside the call to verify_expr so that the result is of type T even when T is narrower than unsigned int. */ #define MAX_UNSIGNED_VAL(t) \ ((T) verify_expr (0 < (T) -1, -1)) /* Return T divided by CHAR_MAX + 1, where behavior is undefined if T < 0. In the common case where CHAR_MAX is 127 the compiler can therefore implement the division by shifting T right 7 bits, an optimization that would not be valid if T were negative. */ time_t time_index (time_t t) @{ assume (0 <= t); return t / (CHAR_MAX + 1); @} @end example �������gnulib-20210822~d383792/doc/warnings.texi�����������������������������������������������������������0000664�0000000�0000000�00000004667�14110572173�0017604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node warnings @section warnings The @code{warnings} module allows to regularly build a package with more GCC warnings than the default warnings emitted by GCC. It provides the following functionality: @itemize @bullet @item You can select some warning options, such as @samp{-Wall}, to be enabled whenever building with a GCC version that supports these options. The user can choose to override these warning options by providing the opposite options in the @code{CFLAGS} variable at configuration time. @item You can make these warnings apply to selected directories only. In projects where subprojects are maintained by different people, or where parts of the source code are imported from external sources (for example from gnulib), it is useful to apply different warning options to different directories. @item It lets you use @samp{-Werror} at @samp{make distcheck} time, to verify that on the maintainer's system, no warnings remain. (Note that use of @samp{-Werror} in @code{CFLAGS} does not work in general, because it may break autoconfiguration.) @item Similarly, it lets you use @samp{-Werror} when the builder runs @command{configure} with an option such as @option{--enable-gcc-warnings}. @end itemize To use this module, you need the following: @enumerate @item In @file{configure.ac}, use for example @smallexample gl_WARN_ADD([-Wall], [WARN_CFLAGS]) gl_WARN_ADD([-Wpointer-arith], [WARN_CFLAGS]) @end smallexample @item In the directories which shall use @code{WARN_CFLAGS}, use it in the definition of @code{AM_CFLAGS}, like this: @smallexample AM_CFLAGS = $(WARN_CFLAGS) @end smallexample Note that the @code{AM_CFLAGS} is used in combination with @code{CFLAGS} and before @code{CFLAGS} in build rules emitted by Automake. This allows the user to provide @code{CFLAGS} that override the @code{WARN_CFLAGS}. @end enumerate @samp{gl_WARN_ADD([-Werror])} is intended for developers, and should be avoided in contexts where it would affect ordinary installation builds. The warnings emitted by GCC depend, to some extent, on the contents of the system header files, on the size and signedness of built-in types, etc. Use of @samp{-Werror} would cause frustration to all users on platforms that the maintainer has not tested before the release. It is better if @samp{-Werror} is off by default, and is enabled only by developers. For example, @samp{-Werror} could affect @samp{make distcheck} or @samp{configure --enable-gcc-warnings} as mentioned above. �������������������������������������������������������������������������gnulib-20210822~d383792/doc/windows-libtool.texi����������������������������������������������������0000664�0000000�0000000�00000001205�14110572173�0021071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Libtool and Windows @section Libtool and Windows If you want it to be possible to compile your program for a native Windows platform and you use Libtool, you need to use the @code{win32-dll} option of @code{LT_INIT}. In other words, put: @example LT_INIT([win32-dll]) @end example in your @file{configure.ac}. This sets the correct names for the @code{OBJDUMP}, @code{DLLTOOL}, and @code{AS} tools for the build. If you are building a library, you will also need to pass @code{-no-undefined} to make sure Libtool produces a DLL for your library. From a @file{Makefile.am}: @example libgsasl_la_LDFLAGS += -no-undefined @end example �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/windows-sockets.texi����������������������������������������������������0000664�0000000�0000000�00000001567�14110572173�0021113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Windows sockets @section Windows sockets One of the portability problems for native Windows are sockets and networking functions. @subsection Getaddrinfo and WINVER This was written for the @code{getaddrinfo} module, but may be applicable to other functions too. The @code{getaddrinfo} function exists in @code{ws2tcpip.h} and @code{-lws2_32} on Windows XP@. The function declaration is present if @code{WINVER >= 0x0501}. Windows 2000 does not have @code{getaddrinfo} in its @file{WS2_32.DLL}. Thus, if you want to assume Windows XP or later, you can add @code{AC_DEFINE([WINVER], [0x0501])} to avoid compiling the (partial) @code{getaddrinfo} implementation. If you want to support Windows 2000, don't do anything. The replacement function will open @file{WS2_32.DLL} during run-time to see if there is a @code{getaddrinfo} function available, and use it when available. �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/windows-stat-inodes.texi������������������������������������������������0000664�0000000�0000000�00000001126�14110572173�0021661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Inode numbers on Windows @section Inode numbers on Windows The module @samp{windows-stat-inodes} ensures that, on native Windows platforms, @code{struct stat} contains @code{st_dev}, @code{st_ino} fields that are able to distinguish different inodes. Note: Such values can only be provided for most files on the file system. For a few files (such as inaccessible files), @code{st_dev} and @code{st_ino} are set to 0. Therefore, you should test whether @code{st_dev != 0 && st_ino != 0}, before going to make inferences based on the file identity based on @code{st_dev} and @code{st_ino}. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/windows-stat-timespec.texi����������������������������������������������0000664�0000000�0000000�00000001152�14110572173�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Precise file timestamps on Windows @section Precise file timestamps on Windows The module @samp{windows-stat-timespec} ensures that, on native Windows platforms, @code{struct stat} contains @code{st_atim}, @code{st_mtim}, @code{st_ctim} fields of type @code{struct timespec}, providing 100 ns resolution for the timestamps of files. Note: On some types of file systems, the timestamp resolution is limited by the file system. For example, on FAT file systems, @code{st_mtim} only has a resolution of 2 seconds. For more details, see @url{https://docs.microsoft.com/en-us/windows/desktop/SysInfo/file-times}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/windows-without-msvc.texi�����������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0022077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Native Windows Support without MSVC Support @section Native Windows Support without MSVC Support If your package does not desire to have MSVC support, that is, if MinGW shall be the only native Windows platform that you wish to get support for from Gnulib, and you wish to minimize the number of files imported from Gnulib accordingly, you can do so by passing the options @samp{--avoid=msvc-inval --avoid=msvc-nothrow} to @code{gnulib-tool}. ��������������������������������������������������������������gnulib-20210822~d383792/doc/xstdopen.texi�����������������������������������������������������������0000664�0000000�0000000�00000017336�14110572173�0017615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU xstdopen and *-safer modules documentation @c Copyright (C) 2019--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>. @c Written by Bruno Haible, based on ideas from Paul Eggert. @node Closed standard fds @section Handling closed standard file descriptors @cindex xstdopen @cindex stdopen @cindex dirent-safer @cindex fcntl-safer @cindex fopen-safer @cindex freopen-safer @cindex openat-safer @cindex pipe2-safer @cindex popen-safer @cindex stdlib-safer @cindex tmpfile-safer @cindex unistd-safer Usually, when a program gets invoked, its file descriptors 0 (for standard input), 1 (for standard output), and 2 (for standard error) are open. But there are situations when some of these file descriptors are closed. These situations can arise when @itemize @bullet @item The invoking process invokes @code{close()} on the file descriptor before @code{exec}, or @item The invoking process invokes @code{posix_spawn_file_actions_addclose()} for the file descriptor before @code{posix_spawn} or @code{posix_spawnp}, or @item The invoking process is a Bourne shell, and the shell script uses the POSIX syntax for closing the file descriptor: @code{<&-} for closing standard input, @code{>&-} for closing standard output, or @code{2>&-} for closing standard error. @end itemize When a closed file descriptor is accessed through a system call, such as @code{fcntl()}, @code{fstat()}, @code{read()}, or @code{write()}, the system calls fails with error @code{EBADF} ("Bad file descriptor"). When a new file descriptor is allocated, the operating system chooses the smallest non-negative integer that does not yet correspond to an open file descriptor. So, when a given fd (0, 1, or 2) is closed, opening a new file descriptor may assign the new file descriptor to this fd. This can have unintended effects, because now standard input/output/error of your process is referring to a file that was not meant to be used in that role. This situation is a security risk because the behaviour of the program in this situation was surely never tested, therefore anything can happen then -- from overwriting precious files of the user to endless loops. To deal with this situation, you first need to determine whether your program is affected by the problem. @itemize @bullet @item Does your program invoke functions that allocate new file descriptors? These are the system calls @itemize @bullet @item @code{open()}, @code{openat()}, @code{creat()} @item @code{dup()} @item @code{fopen()}, @code{freopen()} @item @code{pipe()}, @code{pipe2()}, @code{popen()} @item @code{opendir()} @item @code{tmpfile()}, @code{mkstemp()}, @code{mkstemps()}, @code{mkostemp()}, @code{mkostemps()} @end itemize @noindent Note that you also have to consider the libraries that your program uses. @item If your program may open two or more file descriptors or FILE streams for reading at the same time, and some of them may reference standard input, your program @emph{is affected}. @item If your program may open two or more file descriptors or FILE streams for writing at the same time, and some of them may reference standard output or standard error, your program @emph{is affected}. @item If your program does not open new file descriptors or FILE streams, it is @emph{not affected}. @item If your program opens only one new file descriptor or FILE stream at a time, it is @emph{not affected}. This is often the case for programs that are structured in simple phases: first a phase where input is read from a file into memory, then a phase of processing in memory, finally a phase where the result is written to a file. @item If your program opens only two new file descriptors or FILE streams at a time, out of which one is for reading and the one is for writing, it is @emph{not affected}. This is because if the first file descriptor is allocated and the second file descriptor is picked as 0, 1, or 2, and both happen to be the same, writing to the one opened in @code{O_RDONLY} mode will produce an error @code{EBADF}, as desired. @end itemize If your program is affected, what is the mitigation? Some operating systems install open file descriptors in place of the closed ones, either in the @code{exec} system call or during program startup. When such a file descriptor is accessed through a system call, it behaves like an open file descriptor opened for the ``wrong'' direction: the system calls @code{fcntl()} and @code{fstat()} succeed, whereas @code{read()} from fd 0 and @code{write()} to fd 1 or 2 fail with error @code{EBADF} ("Bad file descriptor"). The important point here is that when your program allocates a new file descriptor, it will have a value greater than 2. This mitigation is enabled on HP-UX, for all programs, and on glibc, FreeBSD, NetBSD, OpenBSD, but only for setuid or setgid programs. Since it is operating system dependent, it is not a complete mitigation. For a complete mitigation, Gnulib provides two alternative sets of modules: @itemize @bullet @item The @code{xstdopen} module. @item The @code{*-safer} modules: @code{fcntl-safer}, @code{openat-safer}, @code{unistd-safer}, @code{fopen-safer}, @code{freopen-safer}, @code{pipe2-safer}, @code{popen-safer}, @code{dirent-safer}, @code{tmpfile-safer}, @code{stdlib-safer}. @end itemize The approach with the @code{xstdopen} module is simpler, but it adds three system calls to program startup. Whereas the approach with the @code{*-safer} modules is more complex, but adds no overhead (no additional system calls) in the normal case. To use the approach with the @code{xstdopen} module: @enumerate @item Import the module @code{xstdopen} from Gnulib. @item In the compilation unit that contains the @code{main} function, include @code{"xstdopen.h"}. @item In the @code{main} function, near the beginning, namely right after the i18n related initializations (@code{setlocale}, @code{bindtextdomain}, @code{textdomain} invocations, if any) and the @code{closeout} initialization (if any), insert the invocation: @smallexample /* Ensure that stdin, stdout, stderr are open. */ xstdopen (); @end smallexample @end enumerate To use the approach with the @code{*-safer} modules: @enumerate @item Import the relevant modules from Gnulib. @item In the compilation units that contain these function calls, include the replacement header file. @end enumerate Do so according to this table: @multitable @columnfractions .28 .32 .4 @headitem Function @tab Module @tab Header file @item @code{open()} @tab @code{fcntl-safer} @tab @code{"fcntl--.h"} @item @code{openat()} @tab @code{openat-safer} @tab @code{"fcntl--.h"} @item @code{creat()} @tab @code{fcntl-safer} @tab @code{"fcntl--.h"} @item @code{dup()} @tab @code{unistd-safer} @tab @code{"unistd--.h"} @item @code{fopen()} @tab @code{fopen-safer} @tab @code{"stdio--.h"} @item @code{freopen()} @tab @code{freopen-safer} @tab @code{"stdio--.h"} @item @code{pipe()} @tab @code{unistd-safer} @tab @code{"unistd--.h"} @item @code{pipe2()} @tab @code{pipe2-safer} @tab @code{"unistd--.h"} @item @code{popen()} @tab @code{popen-safer} @tab @code{"stdio--.h"} @item @code{opendir()} @tab @code{dirent-safer} @tab @code{"dirent--.h"} @item @code{tmpfile()} @tab @code{tmpfile-safer} @tab @code{"stdio--.h"} @item @code{mkstemp()} @tab @code{stdlib-safer} @tab @code{"stdlib--.h"} @item @code{mkstemps()} @tab @code{stdlib-safer} @tab @code{"stdlib--.h"} @item @code{mkostemp()} @tab @code{stdlib-safer} @tab @code{"stdlib--.h"} @item @code{mkostemps()} @tab @code{stdlib-safer} @tab @code{"stdlib--.h"} @end multitable ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/doc/year2038.texi�����������������������������������������������������������0000664�0000000�0000000�00000002342�14110572173�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Avoiding the year 2038 problem @section Avoiding the year 2038 problem The ``year 2038 problem'' denotes unpredictable behaviour of programs that will likely occur in the year 2038, for programs that use a 32-bit @samp{time_t} type. See @url{https://en.wikipedia.org/wiki/Year_2038_problem} for details. The Gnulib module @samp{year2038} attempts to avoid this problem, by ensuring that @code{time_t} is a 64-bit type and by causing @code{configure} to fail otherwise. The Gnulib module @samp{largefile} also attempts to avoid this problem when possible, because @samp{largefile} enables the widest file-related types supported by the system and @code{time_t} is one of those types. However, @code{largefile} does not cause @code{configure} to fail when the year 2038 problem is not avoidable. The Gnulib @samp{largefile} and @samp{year2038} modules are recommended for any package that might be used after the year 2038 on 32-bit platforms. However, if you build such a package you can disable its use of 64-bit @code{time_t} by giving the @code{--disable-year2038} option to @code{configure}. This may be useful if the package links to other libraries whose user-facing ABIs still require @code{time_t} to be 32-bit on your platform. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0015052�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/��������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020136�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/GPL�����������������������������������������������������0000777�0000000�0000000�00000000000�14110572173�0021367�2GPLv3+����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/GPLv2+��������������������������������������������������0000664�0000000�0000000�00000002406�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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 2 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/>. */ * 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 2 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/>. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/GPLv3+��������������������������������������������������0000664�0000000�0000000�00000003576�14110572173�0021042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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/>. */ * 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/>. # 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/>. ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/LGPL����������������������������������������������������0000777�0000000�0000000�00000000000�14110572173�0021617�2LGPLv3+���������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/LGPLv2+�������������������������������������������������0000664�0000000�0000000�00000002464�14110572173�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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/>. */ * 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/>. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/LGPLv3+�������������������������������������������������0000664�0000000�0000000�00000002460�14110572173�0021145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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 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/>. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/LGPLv3+_or_GPLv2+���������������������������������������0000664�0000000�0000000�00000004104�14110572173�0022667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ * This file is free software. * It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". * You can redistribute it and/or modify it under either * - the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 3, or (at your * option) any later version, or * - the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) * any later version, or * - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". * * 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 and the GNU General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public * License and of the GNU General Public License along with this * program. If not, see <https://www.gnu.org/licenses/>. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/README��������������������������������������������������0000664�0000000�0000000�00000001151�14110572173�0021014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains license notices, ready for copy-and-pasting into Gnulib source files. The wording is based on the Maintainers Guide, section "License Notices", <https://www.gnu.org/prep/maintain/html_node/License-Notices.html>. Instead of "this program", we write "this file", because Gnulib files are very often copied into other packages, and we want to avoid the impression that the entire package is under a weaker license than it actually is. The difference between 'unlimited' and 'public domain' is that 'unlimited' still requires the license notice to be preserved, while 'public domain' does not. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/public_domain�������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ This file is in the public domain. */ * This file is in the public domain. # This file is in the public domain. See also <https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html> and <https://www.gnu.org/licenses/license-list.en.html#PublicDomain>. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/etc/license-notices/unlimited�����������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/gnulib-tool�����������������������������������������������������������������0000775�0000000�0000000�00001014255�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This 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/>. # # This program is meant for authors or maintainers which want to import # modules from gnulib into their packages. # CODING STYLE for this file: # * Indentation: Indent by 2 spaces. Indent case clauses by 2 spaces as well. # * Shell variable references: Use double-quote around shell variable # references always (except when word splitting is explicitly desired), # even when you know the double-quote are not needed. This style tends to # avoid undesired word splitting caused by omitted double-quotes (the # number one mistake in shell scripts). # When the referenced variable can only have a finite number of possible # values and these values are all simple words (e.g. true and false), it's # OK to omit the double-quotes. # * Backquotes: # - Use backquotes like in `command`, not $(command). # - Don't use `command` inside double-quotes. Instead assign the result of # `command` to a variable, and use the value of the variable afterwards. # * Functions: # - All functions that don't emulate a program or shell built-in have a name # that starts with 'func_'. # - Document the implicit and explicit arguments of all functions, as well # as their output variables and side effects. # * Use test condition instead of [ condition ]. # * Minimize the use of eval; when you need it, make sure the string to be # evaluated has a very simple syntactic structure. progname=$0 package=gnulib nl=' ' IFS=" "" $nl" # You can set AUTOCONFPATH to empty if autoconf 2.64 is already in your PATH. AUTOCONFPATH= #case $USER in # bruno ) # AUTOCONFBINDIR=/arch/x86-linux/gnu-inst-autoconf/2.64/bin # AUTOCONFPATH="eval env PATH=${AUTOCONFBINDIR}:\$PATH " # ;; #esac # You can set AUTOMAKEPATH to empty if automake 1.11 is already in your PATH. AUTOMAKEPATH= # You can set GETTEXTPATH to empty if autopoint 0.15 is already in your PATH. GETTEXTPATH= # You can set LIBTOOLPATH to empty if libtoolize 2.x is already in your PATH. LIBTOOLPATH= # If you didn't set AUTOCONFPATH and AUTOMAKEPATH, you can also set the # variables AUTOCONF, AUTOHEADER, ACLOCAL, AUTOMAKE, AUTORECONF individually. if test -z "${AUTOCONF}" || test -n "${AUTOCONFPATH}"; then AUTOCONF="${AUTOCONFPATH}autoconf" fi if test -z "${AUTOHEADER}" || test -n "${AUTOCONFPATH}"; then AUTOHEADER="${AUTOCONFPATH}autoheader" fi if test -z "${ACLOCAL}" || test -n "${AUTOMAKEPATH}"; then ACLOCAL="${AUTOMAKEPATH}aclocal" fi if test -z "${AUTOMAKE}" || test -n "${AUTOMAKEPATH}"; then AUTOMAKE="${AUTOMAKEPATH}automake" fi if test -z "${AUTORECONF}" || test -n "${AUTOCONFPATH}"; then AUTORECONF="${AUTOCONFPATH}autoreconf" fi # If you didn't set GETTEXTPATH, you can also set the variable AUTOPOINT. if test -z "${AUTOPOINT}" || test -n "${GETTEXTPATH}"; then AUTOPOINT="${GETTEXTPATH}autopoint" fi # If you didn't set LIBTOOLPATH, you can also set the variable LIBTOOLIZE. if test -z "${LIBTOOLIZE}" || test -n "${LIBTOOLPATH}"; then LIBTOOLIZE="${LIBTOOLPATH}libtoolize" fi # You can set MAKE. if test -z "${MAKE}"; then MAKE=make fi # When using GNU sed, turn off as many GNU extensions as possible, # to minimize the risk of accidentally using non-portable features. # However, do this only for gnulib-tool itself, not for the code that # gnulib-tool generates, since we don't want "sed --posix" to leak # into makefiles. And do it only for sed versions 4.2 or newer, # because "sed --posix" is buggy in GNU sed 4.1.5, see # <https://lists.gnu.org/r/bug-gnulib/2009-02/msg00225.html>. if (alias) > /dev/null 2>&1 \ && echo | sed --posix -e d >/dev/null 2>&1 \ && case `sed --version | sed -e 's/^[^0-9]*//' -e 1q` in \ [1-3]* | 4.[01]*) false;; \ *) true;; \ esac \ ; then # Define sed as an alias. # It is not always possible to use aliases. Aliases are guaranteed to work # if the executing shell is bash and either it is invoked as /bin/sh or # is a version >= 2.0, supporting shopt. This is the common case. # Two other approaches (use of a variable $sed or of a function func_sed # instead of an alias) require massive, fragile code changes. # An other approach (use of function sed) requires `which sed` - but # 'which' is hard to emulate, due to missing "test -x" on some platforms. if test -n "$BASH_VERSION"; then shopt -s expand_aliases >/dev/null 2>&1 fi alias sed='sed --posix' fi # sed_noop is a sed expression that does nothing. # An empty expression does not work with the native 'sed' on AIX 6.1. sed_noop='s,x,x,' # sed_comments is true or false, depending whether 'sed' supports comments. # AIX 5.3 sed barfs over indented comments. if echo fo | sed -e 's/f/g/ # s/o/u/ # indented comment s/o/e/' 2>/dev/null | grep ge > /dev/null; then sed_comments=true else sed_comments=false fi # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: gnulib-tool --list gnulib-tool --find filename gnulib-tool --import [module1 ... moduleN] gnulib-tool --add-import [module1 ... moduleN] gnulib-tool --remove-import [module1 ... moduleN] gnulib-tool --update gnulib-tool --create-testdir --dir=directory [module1 ... moduleN] gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN] gnulib-tool --test --dir=directory module1 ... moduleN gnulib-tool --megatest --dir=directory [module1 ... moduleN] gnulib-tool --extract-description module gnulib-tool --extract-comment module gnulib-tool --extract-status module gnulib-tool --extract-notice module gnulib-tool --extract-applicability module gnulib-tool --extract-filelist module gnulib-tool --extract-dependencies module gnulib-tool --extract-recursive-dependencies module gnulib-tool --extract-autoconf-snippet module gnulib-tool --extract-automake-snippet module gnulib-tool --extract-include-directive module gnulib-tool --extract-link-directive module gnulib-tool --extract-recursive-link-directive module gnulib-tool --extract-license module gnulib-tool --extract-maintainer module gnulib-tool --extract-tests-module module gnulib-tool --copy-file file [destination] Operation modes: --list print the available module names --find find the modules which contain the specified file --import import the given modules into the current package --add-import augment the list of imports from gnulib into the current package, by adding the given modules; if no modules are specified, update the current package from the current gnulib --remove-import reduce the list of imports from gnulib into the current package, by removing the given modules --update update the current package, restore files omitted from version control --create-testdir create a scratch package with the given modules --create-megatestdir create a mega scratch package with the given modules one by one and all together --test test the combination of the given modules (recommended to use CC=\"gcc -Wall\" here) --megatest test the given modules one by one and all together (recommended to use CC=\"gcc -Wall\" here) --extract-description extract the description --extract-comment extract the comment --extract-status extract the status (obsolete etc.) --extract-notice extract the notice or banner --extract-applicability extract the applicability --extract-filelist extract the list of files --extract-dependencies extract the dependencies --extract-recursive-dependencies extract the dependencies of the module and its dependencies, recursively, all together, but without the conditions --extract-autoconf-snippet extract the snippet for configure.ac --extract-automake-snippet extract the snippet for library makefile --extract-include-directive extract the #include directive --extract-link-directive extract the linker directive --extract-recursive-link-directive extract the linker directive of the module and its dependencies, recursively, all together --extract-license report the license terms of the source files under lib/ --extract-maintainer report the maintainer(s) inside gnulib --extract-tests-module report the unit test module, if it exists --copy-file copy a file that is not part of any module --help Show this help text. --version Show version and authorship information. General options: --dir=DIRECTORY Specify the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current directory. --local-dir=DIRECTORY Specify a local override directory where to look up files before looking in gnulib's directory. --cache-modules Enable module caching optimization. --no-cache-modules Disable module caching optimization. --verbose Increase verbosity. May be repeated. --quiet Decrease verbosity. May be repeated. Options for --import, --add/remove-import, --update: --dry-run Only print what would have been done. Options for --import, --add/remove-import: --with-tests Include unit tests for the included modules. Options for --create-[mega]testdir, --[mega]test: --without-tests Don't include unit tests for the included modules. Options for --import, --add/remove-import, --create-[mega]testdir, --[mega]test: --with-obsolete Include obsolete modules when they occur among the dependencies. By default, dependencies to obsolete modules are ignored. --with-c++-tests Include even unit tests for C++ interoperability. --without-c++-tests Exclude unit tests for C++ interoperability. --with-longrunning-tests Include even unit tests that are long-runners. --without-longrunning-tests Exclude unit tests that are long-runners. --with-privileged-tests Include even unit tests that require root privileges. --without-privileged-tests Exclude unit tests that require root privileges. --with-unportable-tests Include even unit tests that fail on some platforms. --without-unportable-tests Exclude unit tests that fail on some platforms. --with-all-tests Include all kinds of problematic unit tests. --avoid=MODULE Avoid including the given MODULE. Useful if you have code that provides equivalent functionality. This option can be repeated. --conditional-dependencies Support conditional dependencies (may save configure time and object code). --no-conditional-dependencies Don't use conditional dependencies. --libtool Use libtool rules. --no-libtool Don't use libtool rules. Options for --import, --add/remove-import: --lib=LIBRARY Specify the library name. Defaults to 'libgnu'. --source-base=DIRECTORY Directory relative to --dir where source code is placed (default \"lib\"). --m4-base=DIRECTORY Directory relative to --dir where *.m4 macros are placed (default \"m4\"). --po-base=DIRECTORY Directory relative to --dir where *.po files are placed (default \"po\"). --doc-base=DIRECTORY Directory relative to --dir where doc files are placed (default \"doc\"). --tests-base=DIRECTORY Directory relative to --dir where unit tests are placed (default \"tests\"). --aux-dir=DIRECTORY Directory relative to --dir where auxiliary build tools are placed (default comes from configure.ac). --gnu-make Output for GNU Make instead of for the default Automake --lgpl[=2|=3orGPLv2|=3] Abort if modules aren't available under the LGPL. Also modify license template from GPL to LGPL. The version number of the LGPL can be specified; the default is currently LGPLv3. --makefile-name=NAME Name of makefile in the source-base and tests-base directories (default \"Makefile.am\", or \"Makefile.in\" if --gnu-make). --macro-prefix=PREFIX Specify the prefix of the macros 'gl_EARLY' and 'gl_INIT'. Default is 'gl'. --po-domain=NAME Specify the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended. --witness-c-macro=NAME Specify the C macro that is defined when the sources in this directory are compiled or used. --vc-files Update version control related files. --no-vc-files Don't update version control related files (.gitignore and/or .cvsignore). Options for --create-[mega]testdir, --[mega]test: --single-configure Generate a single configure file, not a separate configure file for the tests directory. Options for --import, --add/remove-import, --update, --create-[mega]testdir, --[mega]test: -s, --symbolic, --symlink Make symbolic links instead of copying files. --local-symlink Make symbolic links instead of copying files, only for files from the local override directory. -h, --hardlink Make hard links instead of copying files. --local-hardlink Make hard links instead of copying files, only for files from the local override directory. Options for --import, --add/remove-import, --update: -S, --more-symlinks Deprecated; equivalent to --symlink. -H, --more-hardlinks Deprecated; equivalent to --hardlink. Report bugs to <bug-gnulib@gnu.org>." } # func_version # outputs to stdout the --version message. func_version () { func_gnulib_dir if test -d "$gnulib_dir"/.git \ && (git --version) >/dev/null 2>/dev/null \ && (date --version) >/dev/null 2>/dev/null; then # gnulib checked out from git. sed_extract_first_date='/^Date/{ s/^Date:[ ]*//p q }' date=`cd "$gnulib_dir" && git log ChangeLog | sed -n -e "$sed_extract_first_date"` # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600". sed_year_before_time='s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /' date=`echo "$date" | sed -e "$sed_year_before_time"` # Use GNU date to compute the time in GMT. date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"` version=' '`cd "$gnulib_dir" && ./build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'` else # gnulib copy without versioning information. date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog` version= fi year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed -e 's,^.* ,,'` echo "\ gnulib-tool (GNU $package $date)$version Copyright (C) $year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. " printf "Written by %s, %s, and %s.\n" "Bruno Haible" "Paul Eggert" "Simon Josefsson" } # func_emit_copyright_notice # outputs to stdout a header for a generated file. func_emit_copyright_notice () { sed -n -e '/Copyright/ { p q }' < "$self_abspathname" echo "#" echo "# This file is free software; you can redistribute it and/or modify" echo "# it under the terms of the GNU General Public License as published by" echo "# the Free Software Foundation; either version 3 of the License, or" echo "# (at your option) any later version." echo "#" echo "# This file is distributed in the hope that it will be useful," echo "# but WITHOUT ANY WARRANTY; without even the implied warranty of" echo "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" echo "# GNU General Public License for more details." echo "#" echo "# You should have received a copy of the GNU General Public License" echo "# along with this file. If not, see <https://www.gnu.org/licenses/>." echo "#" echo "# As a special exception to the GNU General Public License," echo "# this file may be distributed as part of a program that" echo "# contains a configuration script generated by Autoconf, under" echo "# the same distribution terms as the rest of that program." echo "#" echo "# Generated by gnulib-tool." } # func_exit STATUS # exits with a given status. # This function needs to be used, rather than 'exit', when a 'trap' handler is # in effect that refers to $?. func_exit () { (exit $1); exit $1 } # func_gnulib_dir # locates the directory where the gnulib repository lives # Input: # - progname name of this program # Sets variables # - self_abspathname absolute pathname of gnulib-tool # - gnulib_dir absolute pathname of gnulib repository func_gnulib_dir () { case "$progname" in /* | ?:*) self_abspathname="$progname" ;; */*) self_abspathname=`pwd`/"$progname" ;; *) # Look in $PATH. # Iterate through the elements of $PATH. # We use IFS=: instead of # for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'` # because the latter does not work when some PATH element contains spaces. # We use a canonicalized $pathx instead of $PATH, because empty PATH # elements are by definition equivalent to '.', however field splitting # according to IFS=: loses empty fields in many shells: # - /bin/sh on OSF/1 and Solaris loses all empty fields (at the # beginning, at the end, and in the middle), # - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields # at the beginning and at the end, # - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX, # Solaris lose empty fields at the end. # The 'case' statement is an optimization, to avoid evaluating the # explicit canonicalization command when $PATH contains no empty fields. self_abspathname= if test "$PATH_SEPARATOR" = ";"; then # On Windows, programs are searched in "." before $PATH. pathx=".;$PATH" else # On Unix, we have to convert empty PATH elements to ".". pathx="$PATH" case :$PATH: in *::*) pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'` ;; esac fi save_IFS="$IFS" IFS="$PATH_SEPARATOR" for d in $pathx; do IFS="$save_IFS" test -z "$d" && d=. if test -x "$d/$progname" && test ! -d "$d/$progname"; then self_abspathname="$d/$progname" break fi done IFS="$save_IFS" if test -z "$self_abspathname"; then func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?" fi ;; esac while test -h "$self_abspathname"; do # Resolve symbolic link. linkval=`func_readlink "$self_abspathname"` test -n "$linkval" || break case "$linkval" in /* | ?:* ) self_abspathname="$linkval" ;; * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;; esac done gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` } # func_tmpdir # creates a temporary directory. # Input: # - progname name of this program # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$progname: cannot create a temporary directory in $TMPDIR" >&2 func_exit 1 } } # func_append var value # appends the given value to the shell variable var. if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then # Use bash's += operator. It reduces complexity of appending repeatedly to # a single variable from O(n^2) to O(n). func_append () { eval "$1+=\"\$2\"" } fast_func_append=true else func_append () { eval "$1=\"\$$1\$2\"" } fast_func_append=false fi # func_remove_prefix var prefix # removes the given prefix from the value of the shell variable var. # var should be the name of a shell variable. # Its value should not contain a newline and not start or end with whitespace. # prefix should not contain the characters "$`\{}[]^|. if ( foo=bar; eval 'test "${foo#b}" = ar' ) >/dev/null 2>&1; then func_remove_prefix () { eval "$1=\${$1#\$2}" } fast_func_remove_prefix=true else func_remove_prefix () { eval "value=\"\$$1\"" prefix="$2" case "$prefix" in *.*) sed_escape_dots='s/\([.]\)/\\\1/g' prefix=`echo "$prefix" | sed -e "$sed_escape_dots"` ;; esac value=`echo "$value" | sed -e "s|^${prefix}||"` eval "$1=\"\$value\"" } fast_func_remove_prefix=false fi # Determine whether we should use ':' or ';' as PATH_SEPARATOR. func_determine_path_separator () { if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi } # func_path_append pathvar directory # appends directory to pathvar, delimiting directories by PATH_SEPARATOR. func_path_append () { if eval "test -n \"\$$1\""; then func_append "$1" "$PATH_SEPARATOR$2" else eval "$1=\$2" fi } # func_path_foreach_inner # helper for func_path_foreach because we need new 'args' array # Input: # - fpf_dir directory from local_gnulib_path # - fpf_cb callback to be run for fpf_dir func_path_foreach_inner () { set %start% "$@" for _fpf_arg do case "$_fpf_arg" in %start%) set dummy ;; %dir%) set "$@" "$fpf_dir" ;; *) set "$@" "$_fpf_arg" ;; esac done shift "$fpf_cb" "$@" } # func_path_foreach path method args # Execute method for each directory in path. The method will be called # like `method args` while any argument '%dir%' within args will be replaced # with processed directory from path. func_path_foreach () { fpf_dirs="$1"; shift fpf_cb="$1"; shift fpf_rc=false fpf_save_IFS="$IFS" IFS="$PATH_SEPARATOR" for fpf_dir in $fpf_dirs do IFS="$fpf_save_IFS" func_path_foreach_inner "$@" && fpf_rc=: done IFS="$fpf_save_IFS" $fpf_rc } # func_remove_suffix var suffix # removes the given suffix from the value of the shell variable var. # var should be the name of a shell variable. # Its value should not contain a newline and not start or end with whitespace. # suffix should not contain the characters "$`\{}[]^|. if ( foo=bar; eval 'test "${foo%r}" = ba' ) >/dev/null 2>&1; then func_remove_suffix () { eval "$1=\${$1%\$2}" } fast_func_remove_suffix=true else func_remove_suffix () { eval "value=\"\$$1\"" suffix="$2" case "$suffix" in *.*) sed_escape_dots='s/\([.]\)/\\\1/g' suffix=`echo "$suffix" | sed -e "$sed_escape_dots"` ;; esac value=`echo "$value" | sed -e "s|${suffix}\$||"` eval "$1=\"\$value\"" } fast_func_remove_suffix=false fi # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. # Input: # - progname name of this program func_fatal_error () { echo "$progname: *** $1" 1>&2 echo "$progname: *** Stop." 1>&2 func_exit 1 } # func_warning message # Outputs to stderr a warning message, func_warning () { echo "gnulib-tool: warning: $1" 1>&2 } # func_readlink SYMLINK # outputs the target of the given symlink. if (type readlink) > /dev/null 2>&1; then func_readlink () { # Use the readlink program from GNU coreutils. readlink "$1" } else func_readlink () { # Use two sed invocations. A single sed -n -e 's,^.* -> \(.*\)$,\1,p' # would do the wrong thing if the link target contains " -> ". LC_ALL=C ls -l "$1" | sed -e 's, -> ,#%%#,' | sed -n -e 's,^.*#%%#\(.*\)$,\1,p' } fi # func_relativize DIR1 DIR2 # computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2. # Input: # - DIR1 relative pathname, relative to the current directory # - DIR2 relative pathname, relative to the current directory # Output: # - reldir relative pathname of DIR2, relative to DIR1 func_relativize () { dir0=`pwd` dir1="$1" dir2="$2" sed_first='s,^\([^/]*\)/.*$,\1,' sed_rest='s,^[^/]*/*,,' sed_last='s,^.*/\([^/]*\)$,\1,' sed_butlast='s,/*[^/]*$,,' while test -n "$dir1"; do first=`echo "$dir1" | sed -e "$sed_first"` if test "$first" != "."; then if test "$first" = ".."; then dir2=`echo "$dir0" | sed -e "$sed_last"`/"$dir2" dir0=`echo "$dir0" | sed -e "$sed_butlast"` else first2=`echo "$dir2" | sed -e "$sed_first"` if test "$first2" = "$first"; then dir2=`echo "$dir2" | sed -e "$sed_rest"` else dir2="../$dir2" fi dir0="$dir0"/"$first" fi fi dir1=`echo "$dir1" | sed -e "$sed_rest"` done reldir="$dir2" } # func_relconcat DIR1 DIR2 # computes a relative pathname DIR1/DIR2, with obvious simplifications. # Input: # - DIR1 relative pathname, relative to the current directory # - DIR2 relative pathname, relative to DIR1 # Output: # - relconcat DIR1/DIR2, relative to the current directory func_relconcat () { dir1="$1" dir2="$2" sed_first='s,^\([^/]*\)/.*$,\1,' sed_rest='s,^[^/]*/*,,' sed_last='s,^.*/\([^/]*\)$,\1,' sed_butlast='s,/*[^/]*$,,' while true; do first=`echo "$dir2" | sed -e "$sed_first"` if test "$first" = "."; then dir2=`echo "$dir2" | sed -e "$sed_rest"` if test -z "$dir2"; then relconcat="$dir1" break fi else last=`echo "$dir1" | sed -e "$sed_last"` while test "$last" = "."; do dir1=`echo "$dir1" | sed -e "$sed_butlast"` last=`echo "$dir1" | sed -e "$sed_last"` done if test -z "$dir1"; then relconcat="$dir2" break fi if test "$first" = ".."; then if test "$last" = ".."; then relconcat="$dir1/$dir2" break fi dir1=`echo "$dir1" | sed -e "$sed_butlast"` dir2=`echo "$dir2" | sed -e "$sed_rest"` if test -z "$dir1"; then relconcat="$dir2" break fi if test -z "$dir2"; then relconcat="$dir1" break fi else relconcat="$dir1/$dir2" break fi fi done } # func_ensure_writable DEST # Ensures the file DEST is writable. func_ensure_writable () { test -w "$1" || chmod u+w "$1" } # func_ln_s SRC DEST # Like ln -s, except use cp -p if ln -s fails. func_ln_s () { ln -s "$1" "$2" || { echo "$progname: ln -s failed; falling back on cp -p" >&2 case "$1" in /* | ?:*) # SRC is absolute. cp_src="$1" ;; *) # SRC is relative to the directory of DEST. case "$2" in */*) cp_src="${2%/*}/$1" ;; *) cp_src="$1" ;; esac ;; esac cp -p "$cp_src" "$2" func_ensure_writable "$2" } } # func_symlink_target SRC DEST # Determines LINK_TARGET such that "ln -s LINK_TARGET DEST" will create a # symbolic link DEST that points to SRC. # Output: # - link_target link target, relative to the directory of DEST func_symlink_target () { case "$1" in /* | ?:*) link_target="$1" ;; *) # SRC is relative. case "$2" in /* | ?:*) link_target="`pwd`/$1" ;; *) # DEST is relative too. ln_destdir=`echo "$2" | sed -e 's,[^/]*$,,'` test -n "$ln_destdir" || ln_destdir="." func_relativize "$ln_destdir" "$1" link_target="$reldir" ;; esac ;; esac } # func_symlink SRC DEST # Like func_ln_s, except that SRC is given relative to the current directory (or # absolute), not given relative to the directory of DEST. func_symlink () { func_symlink_target "$1" "$2" func_ln_s "$link_target" "$2" } # func_symlink_if_changed SRC DEST # Like func_symlink, but avoids munging timestamps if the link is correct. # SRC is given relative to the current directory (or absolute). func_symlink_if_changed () { if test $# -ne 2; then echo "usage: func_symlink_if_changed SRC DEST" >&2 fi func_symlink_target "$1" "$2" ln_target=`func_readlink "$2"` if test -h "$2" && test "$link_target" = "$ln_target"; then : else rm -f "$2" func_ln_s "$link_target" "$2" fi } # func_hardlink SRC DEST # Like ln, except use cp -p if ln fails. # SRC is given relative to the current directory (or absolute). func_hardlink () { ln "$1" "$2" || { echo "$progname: ln failed; falling back on cp -p" >&2 cp -p "$1" "$2" func_ensure_writable "$2" } } # The 'join' program does not exist on all platforms. Where it exists, # we can use it. Where not, bail out. if (type join) >/dev/null 2>&1; then : else echo "$progname: 'join' program not found. Consider installing GNU coreutils." >&2 func_exit 1 fi # Ensure an 'echo' command that # 1. does not interpret backslashes and # 2. does not print an error message "broken pipe" when writing into a pipe # with no writers. # # Test cases for problem 1: # echo '\n' | wc -l prints 1 when OK, 2 when KO # echo '\t' | grep t > /dev/null has return code 0 when OK, 1 when KO # Test cases for problem 2: # echo hi | true frequently prints # "bash: echo: write error: Broken pipe" # to standard error in bash 3.2. # # Problem 1 is a weird heritage from SVR4. BSD got it right (except that # BSD echo interprets '-n' as an option, which is also not desirable). # Nowadays the problem occurs in 4 situations: # - in bash, when the shell option xpg_echo is set (bash >= 2.04) # or when it was built with --enable-usg-echo-default (bash >= 2.0) # or when it was built with DEFAULT_ECHO_TO_USG (bash < 2.0), # - in zsh, when sh-emulation is not set, # - in ksh (e.g. AIX /bin/sh and Solaris /usr/xpg4/bin/sh are ksh instances, # and HP-UX /bin/sh and IRIX /bin/sh behave similarly), # - in Solaris /bin/sh and OSF/1 /bin/sh. # We try the following workarounds: # - for all: respawn using $CONFIG_SHELL if that is set and works. # - for bash >= 2.04: unset the shell option xpg_echo. # - for bash >= 2.0: define echo to a function that uses the printf built-in. # - for bash < 2.0: define echo to a function that uses cat of a here document. # - for zsh: turn sh-emulation on. # - for ksh: alias echo to 'print -r'. # - for ksh: alias echo to a function that uses cat of a here document. # - for Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh and rely on # the ksh workaround. # - otherwise: respawn using /bin/sh and rely on the workarounds. # When respawning, we pass --no-reexec as first argument, so as to avoid # turning this script into a fork bomb in unlucky situations. # # Problem 2 is specific to bash 3.2 and affects the 'echo' built-in, but not # the 'printf' built-in. See # <https://lists.gnu.org/r/bug-bash/2008-12/msg00050.html> # <https://lists.gnu.org/r/bug-gnulib/2010-02/msg00154.html> # The workaround is: define echo to a function that uses the printf built-in. have_echo= if echo '\t' | grep t > /dev/null; then have_echo=yes # Lucky! fi # Try the workarounds. # Respawn using $CONFIG_SHELL if that is set and works. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -n "$CONFIG_SHELL" \ && test -f "$CONFIG_SHELL" \ && $CONFIG_SHELL -c "echo '\\t' | grep t > /dev/null"; then exec $CONFIG_SHELL "$0" --no-reexec "$@" exit 127 fi # For bash >= 2.04: unset the shell option xpg_echo. if test -z "$have_echo" \ && test -n "$BASH_VERSION" \ && (shopt -o xpg_echo; echo '\t' | grep t > /dev/null) 2>/dev/null; then shopt -o xpg_echo have_echo=yes fi # For bash >= 2.0: define echo to a function that uses the printf built-in. # For bash < 2.0: define echo to a function that uses cat of a here document. # (There is no win in using 'printf' over 'cat' if it is not a shell built-in.) # Also handle problem 2, specific to bash 3.2, here. if { test -z "$have_echo" \ || case "$BASH_VERSION" in 3.2*) true;; *) false;; esac; \ } \ && test -n "$BASH_VERSION"; then \ if type printf 2>/dev/null | grep / > /dev/null; then # 'printf' is not a shell built-in. echo () { cat <<EOF $* EOF } else # 'printf' is a shell built-in. echo () { printf '%s\n' "$*" } fi if echo '\t' | grep t > /dev/null; then have_echo=yes fi fi # For zsh: turn sh-emulation on. if test -z "$have_echo" \ && test -n "$ZSH_VERSION" \ && (emulate sh) >/dev/null 2>&1; then emulate sh fi # For ksh: alias echo to 'print -r'. if test -z "$have_echo" \ && (type print) >/dev/null 2>&1; then # A 'print' command exists. if type print 2>/dev/null | grep / > /dev/null; then : else # 'print' is a shell built-in. if (print -r '\told' | grep told > /dev/null) 2>/dev/null; then # 'print' is the ksh shell built-in. alias echo='print -r' fi fi fi if test -z "$have_echo" \ && echo '\t' | grep t > /dev/null; then have_echo=yes fi # For ksh: alias echo to a function that uses cat of a here document. # The ksh manual page says: # "Aliasing is performed when scripts are read, not while they are executed. # Therefore, for an alias to take effect, the alias definition command has # to be executed before the command which references the alias is read." # Because of this, we have to play strange tricks with have_echo, to ensure # that the top-level statement containing the test starts after the 'alias' # command. if test -z "$have_echo"; then bsd_echo () { cat <<EOF $* EOF } if (alias echo=bsd_echo) 2>/dev/null; then alias echo=bsd_echo 2>/dev/null fi fi if test -z "$have_echo" \ && echo '\t' | grep t > /dev/null; then have_echo=yes fi if test -z "$have_echo"; then if (alias echo=bsd_echo) 2>/dev/null; then unalias echo 2>/dev/null fi fi # For Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -f /bin/ksh; then exec /bin/ksh "$0" --no-reexec "$@" exit 127 fi # Otherwise: respawn using /bin/sh. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -f /bin/sh; then exec /bin/sh "$0" --no-reexec "$@" exit 127 fi if test -z "$have_echo"; then func_fatal_error "Shell does not support 'echo' correctly. Please install GNU bash and set the environment variable CONFIG_SHELL to point to it." fi if echo '\t' | grep t > /dev/null; then : # Works fine now. else func_fatal_error "Shell does not support 'echo' correctly. Workaround does not work. Please report this as a bug to bug-gnulib@gnu.org." fi if test "X$1" = "X--no-reexec"; then shift fi # Unset CDPATH. Otherwise, output from 'cd dir' can surprise callers. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Determine the path separator early because the following option parsing code # requires that. func_determine_path_separator # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: # - mode one of: list, find, import, add-import, remove-import, # update, create-testdir, create-megatestdir, test, megatest, # copy-file # - destdir from --dir # - local_gnulib_path from --local-dir, highest priority dir comes first # - modcache true or false, from --cache-modules/--no-cache-modules # - verbose integer, default 0, inc/decremented by --verbose/--quiet # - libname, supplied_libname from --lib # - sourcebase from --source-base # - m4base from --m4-base # - pobase from --po-base # - docbase from --doc-base # - testsbase from --tests-base # - auxdir from --aux-dir # - inctests true if --with-tests was given, false if --without-tests # was given, blank otherwise # - incobsolete true if --with-obsolete was given, blank otherwise # - inc_cxx_tests true if --with-c++-tests was given, blank otherwise # - inc_longrunning_tests true if --with-longrunning-tests was given, blank # otherwise # - inc_privileged_tests true if --with-privileged-tests was given, blank # otherwise # - inc_unportable_tests true if --with-unportable-tests was given, blank # otherwise # - inc_all_tests true if --with-all-tests was given, blank otherwise # - excl_cxx_tests true if --without-c++-tests was given, blank otherwise # - excl_longrunning_tests true if --without-longrunning-tests was given, # blank otherwise # - excl_privileged_tests true if --without-privileged-tests was given, blank # otherwise # - excl_unportable_tests true if --without-unportable-tests was given, blank # otherwise # - single_configure true if --single-configure was given, false otherwise # - avoidlist list of modules to avoid, from --avoid # - cond_dependencies true if --conditional-dependencies was given, false if # --no-conditional-dependencies was given, blank otherwise # - lgpl yes or a number if --lgpl was given, blank otherwise # - gnu_make true if --gnu-make was given, false otherwise # - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise # - macro_prefix from --macro-prefix # - po_domain from --po-domain # - witness_c_macro from --witness-c-macro # - vc_files true if --vc-files was given, false if --no-vc-files was # given, blank otherwise # - autoconf_minversion minimum supported autoconf version # - doit : if actions shall be executed, false if only to be printed # - copymode symlink if --symlink or --more-symlinks was given, # hardlink if --hardlink or --more-hardlinks was given, # blank otherwise # - lcopymode symlink if --local-symlink was given, # hardlink if --local-hardlink was given, # blank otherwise { mode= destdir= local_gnulib_path= modcache=true verbose=0 libname=libgnu supplied_libname= sourcebase= m4base= pobase= docbase= testsbase= auxdir= inctests= incobsolete= inc_cxx_tests= inc_longrunning_tests= inc_privileged_tests= inc_unportable_tests= inc_all_tests= excl_cxx_tests= excl_longrunning_tests= excl_privileged_tests= excl_unportable_tests= single_configure=false avoidlist= cond_dependencies= lgpl= gnu_make=false makefile_name= libtool= macro_prefix= po_domain= witness_c_macro= vc_files= doit=: copymode= lcopymode= supplied_opts="$@" while test $# -gt 0; do case "$1" in --list | --lis ) mode=list shift ;; --find | --fin | --fi | --f ) mode=find shift ;; --import | --impor | --impo | --imp | --im | --i ) mode=import shift ;; --add-import | --add-impor | --add-impo | --add-imp | --add-im | --add-i | --add- | --add | --ad ) mode=add-import shift ;; --remove-import | --remove-impor | --remove-impo | --remove-imp | --remove-im | --remove-i | --remove- | --remove | --remov | --remo | --rem | --re | --r ) mode=remove-import shift ;; --update | --updat | --upda | --upd | --up | --u ) mode=update shift ;; --create-testdir | --create-testdi | --create-testd | --create-test | --create-tes | --create-te | --create-t ) mode=create-testdir shift ;; --create-megatestdir | --create-megatestdi | --create-megatestd | --create-megatest | --create-megates | --create-megate | --create-megat | --create-mega | --create-meg | --create-me | --create-m ) mode=create-megatestdir shift ;; --test | --tes | --te | --t ) mode=test shift ;; --megatest | --megates | --megate | --megat | --mega | --meg | --me | --m ) mode=megatest shift ;; --extract-* ) mode=`echo "X$1" | sed -e 's/^X--//'` shift ;; --copy-file | --copy-fil | --copy-fi | --copy-f | --copy- | --copy | --cop ) mode=copy-file shift ;; --dir ) shift if test $# = 0; then func_fatal_error "missing argument for --dir" fi destdir=$1 shift ;; --dir=* ) destdir=`echo "X$1" | sed -e 's/^X--dir=//'` shift ;; --local-dir ) shift if test $# = 0; then func_fatal_error "missing argument for --local-dir" fi func_path_append local_gnulib_path "$1" shift ;; --local-dir=* ) local_dir=`echo "X$1" | sed -e 's/^X--local-dir=//'` func_path_append local_gnulib_path "$local_dir" shift ;; --cache-modules | --cache-module | --cache-modul | --cache-modu | --cache-mod | --cache-mo | --cache-m | --cache- | --cache | --cach | --cac | --ca ) modcache=true shift ;; --no-cache-modules | --no-cache-module | --no-cache-modul | --no-cache-modu | --no-cache-mod | --no-cache-mo | --no-cache-m | --no-cache- | --no-cache | --no-cach | --no-cac | --no-ca ) modcache=false shift ;; --verbose | --verbos | --verbo | --verb ) verbose=`expr $verbose + 1` shift ;; --quiet | --quie | --qui | --qu | --q ) verbose=`expr $verbose - 1` shift ;; --lib ) shift if test $# = 0; then func_fatal_error "missing argument for --lib" fi libname=$1 supplied_libname=true shift ;; --lib=* ) libname=`echo "X$1" | sed -e 's/^X--lib=//'` supplied_libname=true shift ;; --source-base ) shift if test $# = 0; then func_fatal_error "missing argument for --source-base" fi sourcebase=$1 shift ;; --source-base=* ) sourcebase=`echo "X$1" | sed -e 's/^X--source-base=//'` shift ;; --m4-base ) shift if test $# = 0; then func_fatal_error "missing argument for --m4-base" fi m4base=$1 shift ;; --m4-base=* ) m4base=`echo "X$1" | sed -e 's/^X--m4-base=//'` shift ;; --po-base ) shift if test $# = 0; then func_fatal_error "missing argument for --po-base" fi pobase=$1 shift ;; --po-base=* ) pobase=`echo "X$1" | sed -e 's/^X--po-base=//'` shift ;; --doc-base ) shift if test $# = 0; then func_fatal_error "missing argument for --doc-base" fi docbase=$1 shift ;; --doc-base=* ) docbase=`echo "X$1" | sed -e 's/^X--doc-base=//'` shift ;; --tests-base ) shift if test $# = 0; then func_fatal_error "missing argument for --tests-base" fi testsbase=$1 shift ;; --tests-base=* ) testsbase=`echo "X$1" | sed -e 's/^X--tests-base=//'` shift ;; --aux-dir ) shift if test $# = 0; then func_fatal_error "missing argument for --aux-dir" fi auxdir=$1 shift ;; --aux-dir=* ) auxdir=`echo "X$1" | sed -e 's/^X--aux-dir=//'` shift ;; --with-tests | --with-test | --with-tes | --with-te | --with-t) inctests=true shift ;; --with-obsolete | --with-obsolet | --with-obsole | --with-obsol | --with-obso | --with-obs | --with-ob | --with-o) incobsolete=true shift ;; --with-c++-tests | --with-c++-test | --with-c++-tes | --with-c++-te | --with-c++-t | --with-c++- | --with-c++ | --with-c+ | --with-c) inc_cxx_tests=true shift ;; --with-longrunning-tests | --with-longrunning-test | --with-longrunning-tes | --with-longrunning-te | --with-longrunning-t | --with-longrunning- | --with-longrunning | --with-longrunnin | --with-longrunni | --with-longrunn | --with-longrun | --with-longru | --with-longr | --with-long | --with-lon | --with-lo | --with-l) inc_longrunning_tests=true shift ;; --with-privileged-tests | --with-privileged-test | --with-privileged-tes | --with-privileged-te | --with-privileged-t | --with-privileged- | --with-privileged | --with-privilege | --with-privileg | --with-privile | --with-privil | --with-privi | --with-priv | --with-pri | --with-pr | --with-p) inc_privileged_tests=true shift ;; --with-unportable-tests | --with-unportable-test | --with-unportable-tes | --with-unportable-te | --with-unportable-t | --with-unportable- | --with-unportable | --with-unportabl | --with-unportab | --with-unporta | --with-unport | --with-unpor | --with-unpo | --with-unp | --with-un | --with-u) inc_unportable_tests=true shift ;; --with-all-tests | --with-all-test | --with-all-tes | --with-all-te | --with-all-t | --with-all- | --with-all | --with-al | --with-a) inc_all_tests=true shift ;; --without-tests | --without-test | --without-tes | --without-te | --without-t) inctests=false shift ;; --without-c++-tests | --without-c++-test | --without-c++-tes | --without-c++-te | --without-c++-t | --without-c++- | --without-c++ | --without-c+ | --without-c) excl_cxx_tests=true shift ;; --without-longrunning-tests | --without-longrunning-test | --without-longrunning-tes | --without-longrunning-te | --without-longrunning-t | --without-longrunning- | --without-longrunning | --without-longrunnin | --without-longrunni | --without-longrunn | --without-longrun | --without-longru | --without-longr | --without-long | --without-lon | --without-lo | --without-l) excl_longrunning_tests=true shift ;; --without-privileged-tests | --without-privileged-test | --without-privileged-tes | --without-privileged-te | --without-privileged-t | --without-privileged- | --without-privileged | --without-privilege | --without-privileg | --without-privile | --without-privil | --without-privi | --without-priv | --without-pri | --without-pr | --without-p) excl_privileged_tests=true shift ;; --without-unportable-tests | --without-unportable-test | --without-unportable-tes | --without-unportable-te | --without-unportable-t | --without-unportable- | --without-unportable | --without-unportabl | --without-unportab | --without-unporta | --without-unport | --without-unpor | --without-unpo | --without-unp | --without-un | --without-u) excl_unportable_tests=true shift ;; --single-configure | --single-configur | --single-configu | --single-config | --single-confi | --single-conf | --single-con | --single-con | --single-co | --single-c | --single- | --single | --singl | --sing | --sin | --si) single_configure=true shift ;; --avoid ) shift if test $# = 0; then func_fatal_error "missing argument for --avoid" fi func_append avoidlist " $1" shift ;; --avoid=* ) arg=`echo "X$1" | sed -e 's/^X--avoid=//'` func_append avoidlist " $arg" shift ;; --conditional-dependencies | --conditional-dependencie | --conditional-dependenci | --conditional-dependenc | --conditional-dependen | --conditional-depende | --conditional-depend | --conditional-depen | --conditional-depe | --conditional-dep | --conditional-de | --conditional-d | --conditional- | --conditional | --conditiona | --condition | --conditio | --conditi | --condit | --condi | --cond | --con) cond_dependencies=true shift ;; --no-conditional-dependencies | --no-conditional-dependencie | --no-conditional-dependenci | --no-conditional-dependenc | --no-conditional-dependen | --no-conditional-depende | --no-conditional-depend | --no-conditional-depen | --no-conditional-depe | --no-conditional-dep | --no-conditional-de | --no-conditional-d | --no-conditional- | --no-conditional | --no-conditiona | --no-condition | --no-conditio | --no-conditi | --no-condit | --no-condi | --no-cond | --no-con | --no-co) cond_dependencies=false shift ;; --lgpl ) lgpl=yes shift ;; --lgpl=* ) arg=`echo "X$1" | sed -e 's/^X--lgpl=//'` case "$arg" in 2 | 3orGPLv2 | 3) ;; *) func_fatal_error "invalid LGPL version number for --lgpl" ;; esac lgpl=$arg shift ;; --gnu-make ) gnu_make=true shift ;; --makefile-name ) shift if test $# = 0; then func_fatal_error "missing argument for --makefile-name" fi makefile_name="$1" shift ;; --makefile-name=* ) makefile_name=`echo "X$1" | sed -e 's/^X--makefile-name=//'` shift ;; --libtool ) libtool=true shift ;; --no-libtool ) libtool=false shift ;; --macro-prefix ) shift if test $# = 0; then func_fatal_error "missing argument for --macro-prefix" fi macro_prefix="$1" shift ;; --macro-prefix=* ) macro_prefix=`echo "X$1" | sed -e 's/^X--macro-prefix=//'` shift ;; --po-domain ) shift if test $# = 0; then func_fatal_error "missing argument for --po-domain" fi po_domain="$1" shift ;; --po-domain=* ) po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'` shift ;; --witness-c-macro ) shift if test $# = 0; then func_fatal_error "missing argument for --witness-c-macro" fi witness_c_macro="$1" shift ;; --witness-c-macro=* ) witness_c_macro=`echo "X$1" | sed -e 's/^X--witness-c-macro=//'` shift ;; --vc-files ) vc_files=true shift ;; --no-vc-files ) vc_files=false shift ;; --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch ) # A no-op for backward compatibility. shift ;; --dry-run ) doit=false shift ;; -s | --symbolic | --symboli | --symbol | --symbo | --symb | --symlink | --symlin | --symli | --syml | --sym | --sy ) copymode=symlink shift ;; --local-symlink | --local-symlin | --local-symli | --local-syml | --local-sym | --local-sy | --local-s ) lcopymode=symlink shift ;; -h | --hardlink | --hardlin | --hardli | --hardl | --hard | --har | --ha ) copymode=hardlink shift ;; --local-hardlink | --local-hardlin | --local-hardli | --local-hardl | --local-hard | --local-har | --local-ha | --local-h ) lcopymode=hardlink shift ;; -S | --more-symlinks | --more-symlink | --more-symlin | --more-symli | --more-syml | --more-sym | --more-sy | --more-s ) copymode=symlink shift ;; -H | --more-hardlinks | --more-hardlink | --more-hardlin | --more-hardli | --more-hardl | --more-hard | --more-har | --more-ha | --more-h ) copymode=hardlink shift ;; --help | --hel | --he ) func_usage func_exit $? ;; --version | --versio | --versi | --vers ) func_version func_exit $? ;; -- ) # Stop option processing shift break ;; -* ) echo "gnulib-tool: unknown option $1" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 func_exit 1 ;; * ) break ;; esac done if case "$mode" in import | add-import | remove-import) true;; *) false;; esac; then if test -n "$excl_cxx_tests" || test -n "$excl_longrunning_tests" \ || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \ || test "$single_configure" != false; then echo "gnulib-tool: invalid options for '$mode' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 func_exit 1 fi fi if test "$mode" = update; then if test $# != 0; then echo "gnulib-tool: too many arguments in 'update' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 func_exit 1 fi if test -n "$local_gnulib_path" || test -n "$supplied_libname" \ || test -n "$sourcebase" || test -n "$m4base" || test -n "$pobase" \ || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \ || test -n "$inctests" || test -n "$incobsolete" \ || test -n "$inc_cxx_tests" || test -n "$inc_longrunning_tests" \ || test -n "$inc_privileged_tests" || test -n "$inc_unportable_tests" \ || test -n "$inc_all_tests" \ || test -n "$excl_cxx_tests" || test -n "$excl_longrunning_tests" \ || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \ || test -n "$avoidlist" || test -n "$lgpl" || test -n "$makefile_name" \ || test -n "$macro_prefix" || test -n "$po_domain" \ || test -n "$witness_c_macro" || test -n "$vc_files"; then echo "gnulib-tool: invalid options for 'update' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 func_exit 1 fi fi if test -n "$pobase" && test -z "$po_domain"; then echo "gnulib-tool: together with --po-base, you need to specify --po-domain" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 func_exit 1 fi if test -z "$pobase" && test -n "$po_domain"; then func_warning "--po-domain has no effect without a --po-base option" fi case $mode,$gnu_make in *test*,true) echo "gnulib-tool: --gnu-make not supported when including tests" func_exit 1;; esac # Canonicalize the inctests variable. case "$mode" in import | add-import | remove-import | update) if test -z "$inctests"; then inctests=false fi ;; create-testdir | create-megatestdir | test | megatest) if test -z "$inctests"; then inctests=true fi ;; esac # Now the only possible values of "$inctests" are true and false # (or blank but then it is irrelevant). # Determine the minimum supported autoconf version from the project's # configure.ac. DEFAULT_AUTOCONF_MINVERSION="2.64" autoconf_minversion= configure_ac= if case "$mode" in import | add-import | remove-import | update) true;; *) false;; esac \ && test -n "$destdir"; then if test -f "$destdir"/configure.ac; then configure_ac="$destdir/configure.ac" else if test -f "$destdir"/configure.in; then configure_ac="$destdir/configure.in" fi fi else if test -f configure.ac; then configure_ac="configure.ac" else if test -f configure.in; then configure_ac="configure.in" fi fi fi if test -n "$configure_ac"; then # Use sed, not autoconf --trace, to look for the AC_PREREQ invocation, # because when some m4 files are omitted from a version control repository, # "autoconf --trace=AC_PREREQ" fails with an error message like this: # m4: aclocal.m4:851: Cannot open m4/absolute-header.m4: No such file or directory # autom4te: m4 failed with exit status: 1 prereqs= my_sed_traces=' s,#.*$,, s,^dnl .*$,, s, dnl .*$,, /AC_PREREQ/ { s,^.*AC_PREREQ([[ ]*\([^])]*\).*$,\1,p }' prereqs=`sed -n -e "$my_sed_traces" < "$configure_ac"` if test -n "$prereqs"; then autoconf_minversion=` for version in $prereqs; do echo $version; done | LC_ALL=C sort -nru | sed -e 1q ` fi fi if test -z "$autoconf_minversion"; then autoconf_minversion=$DEFAULT_AUTOCONF_MINVERSION fi case "$autoconf_minversion" in 1.* | 2.[0-5]* | 2.6[0-3]*) func_fatal_error "minimum supported autoconf version is 2.64. Try adding AC_PREREQ([$DEFAULT_AUTOCONF_MINVERSION]) to your configure.ac." ;; esac # Remove trailing slashes from the directory names. This is necessary for # m4base (to avoid an error in func_import) and optional for the others. sed_trimtrailingslashes='s,\([^/]\)//*$,\1,' old_local_gnulib_path="$local_gnulib_path" local_gnulib_path= save_IFS="$IFS" IFS=: for dir in $old_local_gnulib_path do IFS="$save_IFS" case "$dir" in */ ) dir=`echo "$dir" | sed -e "$sed_trimtrailingslashes"` ;; esac func_path_append local_gnulib_path "$dir" done IFS="$save_IFS" case "$sourcebase" in */ ) sourcebase=`echo "$sourcebase" | sed -e "$sed_trimtrailingslashes"` ;; esac case "$m4base" in */ ) m4base=`echo "$m4base" | sed -e "$sed_trimtrailingslashes"` ;; esac case "$pobase" in */ ) pobase=`echo "$pobase" | sed -e "$sed_trimtrailingslashes"` ;; esac case "$docbase" in */ ) docbase=`echo "$docbase" | sed -e "$sed_trimtrailingslashes"` ;; esac case "$testsbase" in */ ) testsbase=`echo "$testsbase" | sed -e "$sed_trimtrailingslashes"` ;; esac case "$auxdir" in */ ) auxdir=`echo "$auxdir" | sed -e "$sed_trimtrailingslashes"` ;; esac } func_gnulib_dir func_tmpdir trap 'exit_status=$? if test "$signal" != 0; then echo "caught signal $signal" >&2 fi rm -rf "$tmp" exit $exit_status' 0 for signal in 1 2 3 13 15; do trap '{ signal='$signal'; func_exit 1; }' $signal done signal=0 # Note: The 'eval' silences stderr output in dash. if (declare -A x && { x[f/2]='foo'; x[f/3]='bar'; eval test '${x[f/2]}' = foo; }) 2>/dev/null; then # Zsh 4 and Bash 4 have associative arrays. have_associative=true else # For other shells, use 'eval' with computed shell variable names. have_associative=false fi # func_lookup_local_file_cb dir file # returns true and sets func_lookup_local_file_result if the file $dir/$file # exists. func_lookup_local_file_cb () { test -n "$func_lookup_local_file_result" && return 1 # already found? test -f "$1/$2" || return 1 func_lookup_local_file_result=$1/$2 : } # func_lookup_local_file file # looks up a file in $local_gnulib_path. # Input: # - local_gnulib_path from --local-dir # Output: # - func_lookup_local_file_result name of the file, valid only when the # function succeeded. func_lookup_local_file () { func_lookup_local_file_result= func_path_foreach "$local_gnulib_path" func_lookup_local_file_cb %dir% "$1" } # func_lookup_file_cb dir # does one step in processing the $local_gnulib_path, looking for $dir/$lkfile # and $dir/$lkfile.diff. func_lookup_file_cb () { # If we found the file already in a --local-dir of higher priority, nothing # more to do. if test -z "$lookedup_file"; then # Otherwise, look for $dir/$lkfile and $dir/$lkfile.diff. if test -f "$1/$lkfile"; then lookedup_file="$1/$lkfile" else if test -f "$1/$lkfile.diff"; then lkpatches="$1/$lkfile.diff${lkpatches:+$PATH_SEPARATOR$lkpatches}" fi fi fi } # func_lookup_file file # looks up a file in $local_gnulib_path or $gnulib_dir, or combines it through # 'patch'. # Input: # - local_gnulib_path from --local-dir # Output: # - lookedup_file name of the merged (combined) file # - lookedup_tmp true if it is located in the tmp directory, blank otherwise func_lookup_file () { lkfile="$1" # Each element in $local_gnulib_path is a directory whose contents overrides # or amends the result of the lookup in the rest of $local_gnulib_path and # $gnulib_dir. So, the first element of $local_gnulib_path is the highest # priority one. lookedup_file= lkpatches= func_path_foreach "$local_gnulib_path" func_lookup_file_cb %dir% # Treat $gnulib_dir like a lowest-priority --local-dir, except that here we # don't look for .diff files. if test -z "$lookedup_file"; then if test -f "$gnulib_dir/$lkfile"; then lookedup_file="$gnulib_dir/$lkfile" else func_fatal_error "file $gnulib_dir/$lkfile not found" fi fi # Now apply the patches, from lowest-priority to highest-priority. lookedup_tmp= if test -n "$lkpatches"; then lkbase=`echo "$lkfile" | sed -e 's,^.*/,,'` rm -f "$tmp/$lkbase" cp "$lookedup_file" "$tmp/$lkbase" func_ensure_writable "$tmp/$lkbase" save_IFS="$IFS" IFS="$PATH_SEPARATOR" for patchfile in $lkpatches; do IFS="$save_IFS" patch -s "$tmp/$lkbase" < "$patchfile" >&2 \ || func_fatal_error "patch file $patchfile didn't apply cleanly" done IFS="$save_IFS" lookedup_file="$tmp/$lkbase" lookedup_tmp=true fi } # func_sanitize_modulelist # receives a list of possible module names on standard input, one per line. # It removes those which are just file names unrelated to modules, and outputs # the resulting list to standard output, one per line. func_sanitize_modulelist () { sed -e '/^ChangeLog$/d' -e '/\/ChangeLog$/d' \ -e '/^COPYING$/d' -e '/\/COPYING$/d' \ -e '/^README$/d' -e '/\/README$/d' \ -e '/^TEMPLATE$/d' \ -e '/^TEMPLATE-EXTENDED$/d' \ -e '/^TEMPLATE-TESTS$/d' \ -e '/^\..*/d' \ -e '/~$/d' } # func_modules_in_dir dir # outputs all module files in dir to standard output. func_modules_in_dir () { (test -d "$1" && cd "$1" && find modules -type f -print) } # func_all_modules # Input: # - local_gnulib_path from --local-dir func_all_modules () { # Filter out metainformation files like README, which are not modules. # Filter out unit test modules; they can be retrieved through # --extract-tests-module if desired. { (cd "$gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,') func_path_foreach "$local_gnulib_path" func_modules_in_dir %dir% | sed -e 's,^modules/,,' -e 's,\.diff$,,' } \ | func_sanitize_modulelist \ | sed -e '/-tests$/d' \ | LC_ALL=C sort -u } # func_exists_local_module dir module # returns true if module exists in dir func_exists_local_module () { test -d "$1/modules" && test -f "$1/modules/$2"; } # func_exists_module module # tests whether a module, given by name, exists # Input: # - local_gnulib_path from --local-dir func_exists_module () { { test -f "$gnulib_dir/modules/$1" \ || func_path_foreach "$local_gnulib_path" func_exists_local_module %dir% "$1" ; } \ && test "ChangeLog" != "$1" \ && test "COPYING" != "$1" \ && test "README" != "$1" \ && test "TEMPLATE" != "$1" \ && test "TEMPLATE-EXTENDED" != "$1" \ && test "TEMPLATE-TESTS" != "$1" } # func_verify_module # verifies a module name # Input: # - local_gnulib_path from --local-dir # - module module name argument # Output: # - module unchanged if OK, empty if not OK # - lookedup_file if OK: name of the merged (combined) module description file # - lookedup_tmp if OK: true if it is located in the tmp directory, blank otherwise func_verify_module () { if func_exists_module "$module"; then # OK, $module is a correct module name. # Verify that building the module description with 'patch' succeeds. func_lookup_file "modules/$module" else func_warning "module $module doesn't exist" module= fi } # func_verify_nontests_module # verifies a module name, excluding tests modules # Input: # - local_gnulib_path from --local-dir # - module module name argument func_verify_nontests_module () { case "$module" in *-tests ) module= ;; * ) func_verify_module ;; esac } # func_verify_tests_module # verifies a module name, considering only tests modules # Input: # - local_gnulib_path from --local-dir # - module module name argument func_verify_tests_module () { case "$module" in *-tests ) func_verify_module ;; * ) module= ;; esac } # Suffix of a sed expression that extracts a particular field from a # module description. # A field starts with a line that contains a keyword, such as 'Description', # followed by a colon and optional whitespace. All following lines, up to # the next field (or end of file if there is none) form the contents of the # field. # An absent field is equivalent to a field with empty contents. # NOTE: Keep this in sync with sed_extract_cache_prog below! sed_extract_prog=':[ ]*$/ { :a n s/^Description:[ ]*$// s/^Comment:[ ]*$// s/^Status:[ ]*$// s/^Notice:[ ]*$// s/^Applicability:[ ]*$// s/^Files:[ ]*$// s/^Depends-on:[ ]*$// s/^configure\.ac-early:[ ]*$// s/^configure\.ac:[ ]*$// s/^Makefile\.am:[ ]*$// s/^Include:[ ]*$// s/^Link:[ ]*$// s/^License:[ ]*$// s/^Maintainer:[ ]*$// tb p ba :b }' # Piece of a sed expression that converts a field header line to a shell # variable name, # NOTE: Keep this in sync with sed_extract_prog above! sed_extract_field_header=' s/^Description:[ ]*$/description/ s/^Comment:[ ]*$/comment/ s/^Status:[ ]*$/status/ s/^Notice:[ ]*$/notice/ s/^Applicability:[ ]*$/applicability/ s/^Files:[ ]*$/files/ s/^Depends-on:[ ]*$/dependson/ s/^configure\.ac-early:[ ]*$/configureac_early/ s/^configure\.ac:[ ]*$/configureac/ s/^Makefile\.am:[ ]*$/makefile/ s/^Include:[ ]*$/include/ s/^Link:[ ]*$/link/ s/^License:[ ]*$/license/ s/^Maintainer:[ ]*$/maintainer/' if $modcache; then if $have_associative; then # Declare the associative arrays. declare -A modcache_cached sed_to_declare_statement='s|^.*/\([a-zA-Z0-9_]*\)/$|declare -A modcache_\1|p' declare_script=`echo "$sed_extract_field_header" | sed -n -e "$sed_to_declare_statement"` eval "$declare_script" else # func_cache_var module # computes the cache variable name corresponding to $module. # Note: This computation can map different module names to the same # cachevar (such as 'foo-bar', 'foo_bar', or 'foo/bar'); the caller has # to protect against this case. # Output: # - cachevar a shell variable name if (f=foo; eval echo '${f//o/e}') < /dev/null 2>/dev/null | grep fee >/dev/null; then # Bash 2.0 and newer, ksh, and zsh support the syntax # ${param//pattern/replacement} # as a shorthand for # `echo "$param" | sed -e "s/pattern/replacement/g"`. # Note: The 'eval' is necessary for dash and NetBSD /bin/sh. eval 'func_cache_var () { cachevar=c_${1//[!a-zA-Z0-9_]/_} }' else func_cache_var () { case $1 in *[!a-zA-Z0-9_]*) cachevar=c_`echo "$1" | LC_ALL=C sed -e 's/[^a-zA-Z0-9_]/_/g'` ;; *) cachevar=c_$1 ;; esac } fi fi # func_init_sed_convert_to_cache_statements # Input: # - modcachevar_assignment # Output: # - sed_convert_to_cache_statements func_init_sed_convert_to_cache_statements () { # 'sed' script that turns a module description into shell script # assignments, suitable to be eval'ed. All active characters are escaped. # This script turns # Description: # Some module's description # # Files: # lib/file.h # into: # modcache_description[$1]=\ # 'Some module'"'"'s description # ' # modcache_files[$1]=\ # 'lib/file.h' # or: # c_MODULE_description_set=set; c_MODULE_description=\ # 'Some module'"'"'s description # ' # c_MODULE_files_set=set; c_MODULE_files=\ # 'lib/file.h' # The script consists of two parts: # 1) Ignore the lines before the first field header. # 2) A loop, treating non-field-header lines by escaping single quotes # and adding a closing quote in the last line, sed_convert_to_cache_statements=" :llla # Here we have not yet seen a field header. # See if the current line contains a field header. t llla1 :llla1 ${sed_extract_field_header} t lllb # No field header. Ignore the line. # Read the next line. Upon EOF, just exit. n b llla :lllb # The current line contains a field header. # Turn it into the beginning of an assignment. s/^\\(.*\\)\$/${modcachevar_assignment}\\\\/ # Move it to the hold space. Don't print it yet, # because we want no assignment if the field is empty. h # Read the next line. # Upon EOF, the field was empty. Print no assignment. Just exit. n # See if the current line contains a field header. t lllb1 :lllb1 ${sed_extract_field_header} # If it is, the previous field was empty. Print no assignment. t lllb # Not a field header. # Print the previous line, held in the hold space. x p x # Transform single quotes. s/'/'\"'\"'/g # Prepend a single quote. s/^/'/ :lllc # Move it to the hold space. h # Read the next line. # Upon EOF, branch. \${ b llle } n # See if the current line contains a field header. t lllc1 :lllc1 ${sed_extract_field_header} t llld # Print the previous line, held in the hold space. x p x # Transform single quotes. s/'/'\"'\"'/g b lllc :llld # A field header. # Print the previous line, held in the hold space, with a single quote # to end the assignment. x s/\$/'/ p x b lllb :llle # EOF seen. # Print the previous line, held in the hold space, with a single quote # to end the assignment. x s/\$/'/ p # Exit. n " if ! $sed_comments; then # Remove comments. sed_convert_to_cache_statements=`echo "$sed_convert_to_cache_statements" \ | sed -e 's/^ *//' -e 's/^#.*//'` fi } if $have_associative; then # sed_convert_to_cache_statements does not depend on the module. modcachevar_assignment='modcache_\1[$1]=' func_init_sed_convert_to_cache_statements fi # func_cache_lookup_module module # # looks up a module, like 'func_lookup_file modules/$module', and stores all # of its relevant data in a cache in the memory of the processing shell. If # already cached, it does not look it up again, thus saving file access time. # Parameters: # - module non-empty string # Output if $have_associative: # - modcache_cached[$module] set to yes # - modcache_description[$module] == # - modcache_status[$module] \ set to the field's value, minus the # - ... / final newline, # - modcache_maintainer[$module] == or unset if the field's value is empty # Output if ! $have_associative: # - cachevar a shell variable name # - ${cachevar}_cached set to $module # - ${cachevar}_description == # - ${cachevar}_status \ set to the field's value, minus the # - ... / final newline, # - ${cachevar}_maintainer == or unset if the field's value is empty # - ${cachevar}_description_set == # - ${cachevar}_status_set \ set to non-empty if the field's value # - ... / is non-empty, # - ${cachevar}_maintainer_set == or unset if the field's value is empty func_cache_lookup_module () { if $have_associative; then eval 'cached=${modcache_cached[$1]}' else func_cache_var "$1" eval "cached=\"\$${cachevar}_cached\"" fi if test -z "$cached"; then # Not found in cache. Look it up on the file system. func_lookup_file "modules/$1" if $have_associative; then eval 'modcache_cached[$1]=yes' else eval "${cachevar}_cached=\"\$1\"" fi if ! $have_associative; then # sed_convert_to_cache_statements depends on the module. modcachevar_assignment="${cachevar}"'_\1_set=set; '"${cachevar}"'_\1=' func_init_sed_convert_to_cache_statements fi cache_statements=`LC_ALL=C sed -n -e "$sed_convert_to_cache_statements" < "$lookedup_file"` eval "$cache_statements" else if ! $have_associative; then if test "$1" != "$cached"; then func_fatal_error "cache variable collision between $1 and $cached" fi fi fi } fi # func_get_description module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_description () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Description$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_description[$1]+set}"'; then eval 'echo "${modcache_description[$1]}"' fi else eval "field_set=\"\$${cachevar}_description_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_description\"" echo "${field_value}" fi fi fi } # func_get_comment module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_comment () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Comment$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_comment[$1]+set}"'; then eval 'echo "${modcache_comment[$1]}"' fi else eval "field_set=\"\$${cachevar}_comment_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_comment\"" echo "${field_value}" fi fi fi } # func_get_status module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_status () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Status$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_status[$1]+set}"'; then eval 'echo "${modcache_status[$1]}"' fi else eval "field_set=\"\$${cachevar}_status_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_status\"" echo "${field_value}" fi fi fi } # func_get_notice module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_notice () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Notice$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_notice[$1]+set}"'; then eval 'echo "${modcache_notice[$1]}"' fi else eval "field_set=\"\$${cachevar}_notice_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_notice\"" echo "${field_value}" fi fi fi } # func_get_applicability module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # The expected result (on stdout) is either 'main', or 'tests', or 'all'. func_get_applicability () { if ! $modcache; then func_lookup_file "modules/$1" my_applicability=`sed -n -e "/^Applicability$sed_extract_prog" < "$lookedup_file"` else func_cache_lookup_module "$1" # Get the field's value, without the final newline. if $have_associative; then eval 'my_applicability="${modcache_applicability[$1]}"' else eval "my_applicability=\"\$${cachevar}_applicability\"" fi fi if test -n "$my_applicability"; then echo $my_applicability else # The default is 'main' or 'tests', depending on the module's name. case $1 in *-tests) echo "tests";; *) echo "main";; esac fi } # func_get_filelist module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_filelist () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Files$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_files[$1]+set}"'; then eval 'echo "${modcache_files[$1]}"' fi else eval "field_set=\"\$${cachevar}_files_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_files\"" echo "${field_value}" fi fi fi echo m4/00gnulib.m4 echo m4/zzgnulib.m4 echo m4/gnulib-common.m4 } # func_filter_filelist outputvar separator filelist prefix suffix removed_prefix removed_suffix [added_prefix [added_suffix]] # stores in outputvar the filtered and processed filelist. Filtering: Only the # elements starting with prefix and ending with suffix are considered. # Processing: removed_prefix and removed_suffix are removed from each element, # added_prefix and added_suffix are added to each element. # prefix, suffix should not contain shell-special characters. # removed_prefix, removed_suffix should not contain the characters "$`\{}[]^|. # added_prefix, added_suffix should not contain the characters \|&. func_filter_filelist () { if test "$2" != "$nl" \ || { $fast_func_append \ && { test -z "$6" || $fast_func_remove_prefix; } \ && { test -z "$7" || $fast_func_remove_suffix; }; \ }; then ffflist= for fff in $3; do # Do not quote possibly-empty parameters in case patterns, # AIX and HP-UX ksh won't match them if they are empty. case "$fff" in $4*$5) if test -n "$6"; then func_remove_prefix fff "$6" fi if test -n "$7"; then func_remove_suffix fff "$7" fi fff="$8${fff}$9" if test -z "$ffflist"; then ffflist="${fff}" else func_append ffflist "$2${fff}" fi ;; esac done else sed_fff_filter="s|^$6\(.*\)$7\$|$8\\1$9|" ffflist=`for fff in $3; do case "$fff" in $4*$5) echo "$fff" ;; esac done | sed -e "$sed_fff_filter"` fi eval "$1=\"\$ffflist\"" } # func_get_dependencies module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_dependencies () { # ${module}-tests implicitly depends on ${module}, if that module exists. case "$1" in *-tests) fgd1="$1" func_remove_suffix fgd1 '-tests' if func_exists_module "$fgd1"; then echo "$fgd1" fi ;; esac # Then the explicit dependencies listed in the module description. { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_dependson[$1]+set}"'; then eval 'echo "${modcache_dependson[$1]}"' fi else eval "field_set=\"\$${cachevar}_dependson_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_dependson\"" echo "${field_value}" fi fi fi } \ | sed -e '/^#/d' } sed_dependencies_without_conditions='s/ *\[.*//' # func_get_autoconf_early_snippet module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_autoconf_early_snippet () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^configure\.ac-early$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_configureac_early[$1]+set}"'; then eval 'echo "${modcache_configureac_early[$1]}"' fi else eval "field_set=\"\$${cachevar}_configureac_early_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_configureac_early\"" echo "${field_value}" fi fi fi } # func_get_autoconf_snippet module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_autoconf_snippet () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^configure\.ac$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_configureac[$1]+set}"'; then eval 'echo "${modcache_configureac[$1]}"' fi else eval "field_set=\"\$${cachevar}_configureac_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_configureac\"" echo "${field_value}" fi fi fi } # Concatenate lines with trailing slash. # $1 is an optional filter to restrict the # concatenation to groups starting with that expression combine_lines() { sed -e "/$1.*"'\\$/{ :a N s/\\\n/ / s/\\$/\\/ ta }' } # func_get_automake_snippet_conditional module # returns the part of the Makefile.am snippet that can be put inside Automake # conditionals. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_automake_snippet_conditional () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_makefile[$1]+set}"'; then eval 'echo "${modcache_makefile[$1]}"' fi else eval "field_set=\"\$${cachevar}_makefile_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_makefile\"" echo "${field_value}" fi fi fi } # func_get_automake_snippet_unconditional module # returns the part of the Makefile.am snippet that must stay outside of # Automake conditionals. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_automake_snippet_unconditional () { case "$1" in *-tests) # *-tests module live in tests/, not lib/. # Synthesize an EXTRA_DIST augmentation. all_files=`func_get_filelist $1` func_filter_filelist tests_files " " "$all_files" 'tests/' '' 'tests/' '' extra_files="$tests_files" if test -n "$extra_files"; then echo "EXTRA_DIST +=" $extra_files echo fi ;; *) # Synthesize an EXTRA_DIST augmentation. sed_extract_mentioned_files='s/^lib_SOURCES[ ]*+=[ ]*//p' already_mentioned_files=` \ { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" if $have_associative; then if eval 'test -n "${modcache_makefile[$1]+set}"'; then eval 'echo "${modcache_makefile[$1]}"' fi else eval 'field_set="$'"${cachevar}"'_makefile_set"' if test -n "$field_set"; then eval 'field_value="$'"${cachevar}"'_makefile"' echo "${field_value}" fi fi fi } \ | combine_lines \ | sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'` all_files=`func_get_filelist $1` func_filter_filelist lib_files "$nl" "$all_files" 'lib/' '' 'lib/' '' # Remove $already_mentioned_files from $lib_files. echo "$lib_files" | LC_ALL=C sort -u > "$tmp"/lib-files extra_files=`for f in $already_mentioned_files; do echo $f; done \ | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/lib-files` if test -n "$extra_files"; then echo "EXTRA_DIST +=" $extra_files echo fi # Synthesize also an EXTRA_lib_SOURCES augmentation. # This is necessary so that automake can generate the right list of # dependency rules. # A possible approach would be to use autom4te --trace of the redefined # AC_LIBOBJ and AC_REPLACE_FUNCS macros when creating the Makefile.am # (use autom4te --trace, not just grep, so that AC_LIBOBJ invocations # inside autoconf's built-in macros are not missed). # But it's simpler and more robust to do it here, based on the file list. # If some .c file exists and is not used with AC_LIBOBJ - for example, # a .c file is preprocessed into another .c file for BUILT_SOURCES -, # automake will generate a useless dependency; this is harmless. case "$1" in relocatable-prog-wrapper) ;; pt_chown) ;; *) func_filter_filelist extra_files "$nl" "$extra_files" '' '.c' '' '' if test -n "$extra_files"; then echo "EXTRA_lib_SOURCES +=" $extra_files echo fi ;; esac # Synthesize an EXTRA_DIST augmentation also for the files in build-aux/. func_filter_filelist buildaux_files "$nl" "$all_files" 'build-aux/' '' 'build-aux/' '' if test -n "$buildaux_files"; then sed_prepend_auxdir='s,^,$(top_srcdir)/'"$auxdir"'/,' echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"` echo fi ;; esac } # func_get_automake_snippet module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_automake_snippet () { func_get_automake_snippet_conditional "$1" func_get_automake_snippet_unconditional "$1" } # func_get_include_directive module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_include_directive () { { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Include$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_include[$1]+set}"'; then eval 'echo "${modcache_include[$1]}"' fi else eval "field_set=\"\$${cachevar}_include_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_include\"" echo "${field_value}" fi fi fi } | sed -e 's/^\(["<]\)/#include \1/' } # func_get_link_directive module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_link_directive () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Link$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_link[$1]+set}"'; then eval 'echo "${modcache_link[$1]}"' fi else eval "field_set=\"\$${cachevar}_link_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_link\"" echo "${field_value}" fi fi fi } # func_get_license_raw module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_license_raw () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^License$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_license[$1]+set}"'; then eval 'echo "${modcache_license[$1]}"' fi else eval "field_set=\"\$${cachevar}_license_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_license\"" echo "${field_value}" fi fi fi } # func_get_license module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_license () { # Warn if the License field is missing. case "$1" in *-tests ) ;; * ) license=`func_get_license_raw "$1"` if test -z "$license"; then func_warning "module $1 lacks a License" fi ;; esac case "$1" in parse-datetime* ) # These modules are under a weaker license only for the purpose of some # users who hand-edit it and don't use gnulib-tool. For the regular # gnulib users they are under a stricter license. echo "GPL" ;; * ) { func_get_license_raw "$1" # The default is GPL. echo "GPL" } | sed -e 's,^ *$,,' | sed -e 1q ;; esac } # func_get_maintainer module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_maintainer () { if ! $modcache; then func_lookup_file "modules/$1" sed -n -e "/^Maintainer$sed_extract_prog" < "$lookedup_file" else func_cache_lookup_module "$1" # Output the field's value, including the final newline (if any). if $have_associative; then if eval 'test -n "${modcache_maintainer[$1]+set}"'; then eval 'echo "${modcache_maintainer[$1]}"' fi else eval "field_set=\"\$${cachevar}_maintainer_set\"" if test -n "$field_set"; then eval "field_value=\"\$${cachevar}_maintainer\"" echo "${field_value}" fi fi fi } # func_get_tests_module module # Input: # - local_gnulib_path from --local-dir func_get_tests_module () { # The naming convention for tests modules is hardwired: ${module}-tests. if test -f "$gnulib_dir/modules/$1"-tests \ || func_path_foreach "$local_gnulib_path" func_exists_local_module %dir% "$1-tests"; then echo "$1"-tests fi } # func_get_dependencies_recursively module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_dependencies_recursively () { # In order to process every module only once (for speed), process an "input # list" of modules, producing an "output list" of modules. During each round, # more modules can be queued in the input list. Once a module on the input # list has been processed, it is added to the "handled list", so we can avoid # to process it again. handledmodules= inmodules="$1" outmodules= while test -n "$inmodules"; do inmodules_this_round="$inmodules" inmodules= # Accumulator, queue for next round for module in $inmodules_this_round; do func_verify_module if test -n "$module"; then func_append outmodules " $module" deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` for dep in $deps; do func_append inmodules " $dep" done fi done handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u` # Remove $handledmodules from $inmodules. for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules` done rm -f "$tmp"/queued-modules for m in $outmodules; do echo $m; done | LC_ALL=C sort -u } # func_get_link_directive_recursively module # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_link_directive_recursively () { # In order to process every module only once (for speed), process an "input # list" of modules, producing an "output list" of modules. During each round, # more modules can be queued in the input list. Once a module on the input # list has been processed, it is added to the "handled list", so we can avoid # to process it again. handledmodules= inmodules="$1" outmodules= while test -n "$inmodules"; do inmodules_this_round="$inmodules" inmodules= # Accumulator, queue for next round for module in $inmodules_this_round; do func_verify_module if test -n "$module"; then if grep '^Link:[ ]*$' "$lookedup_file" >/dev/null; then # The module description has a 'Link:' field. Ignore the dependencies. func_append outmodules " $module" else # The module description has no 'Link:' field. Recurse through the dependencies. deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` for dep in $deps; do func_append inmodules " $dep" done fi fi done handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u` # Remove $handledmodules from $inmodules. for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules` done rm -f "$tmp"/queued-modules for m in $outmodules; do func_get_link_directive "$m"; done | LC_ALL=C sort -u | sed -e '/^$/d' } # func_acceptable module # tests whether a module is acceptable. # Input: # - avoidlist list of modules to avoid func_acceptable () { for avoid in $avoidlist; do if test "$avoid" = "$1"; then return 1 fi done return 0 } # sed expression to keep the first 32 characters of each line. sed_first_32_chars='s/^\(................................\).*/\1/' # func_module_shellfunc_name module # computes the shell function name that will contain the m4 macros for the module. # Input: # - macro_prefix prefix to use # Output: # - shellfunc shell function name func_module_shellfunc_name () { case $1 in *[!a-zA-Z0-9_]*) shellfunc=func_${macro_prefix}_gnulib_m4code_`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) shellfunc=func_${macro_prefix}_gnulib_m4code_$1 ;; esac } # func_module_shellvar_name module # computes the shell variable name the will be set to true once the m4 macros # for the module have been executed. # Output: # - shellvar shell variable name func_module_shellvar_name () { case $1 in *[!a-zA-Z0-9_]*) shellvar=${macro_prefix}_gnulib_enabled_`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) shellvar=${macro_prefix}_gnulib_enabled_$1 ;; esac } # func_module_conditional_name module # computes the automake conditional name for the module. # Output: # - conditional name of automake conditional func_module_conditional_name () { case $1 in *[!a-zA-Z0-9_]*) conditional=${macro_prefix}_GNULIB_ENABLED_`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) conditional=${macro_prefix}_GNULIB_ENABLED_$1 ;; esac } # func_uncond_add_module B # notes the presence of B as an unconditional module. # # func_conddep_add_module A B cond # notes the presence of a conditional dependency from module A to module B, # subject to the condition that A is enabled and cond is true. # # func_cond_module_p B # tests whether module B is conditional. # # func_cond_module_condition A B # returns the condition when B should be enabled as a dependency of A, once the # m4 code for A has been executed. # Output: - condition # if $have_associative; then declare -A conddep_isuncond declare -A conddep_dependers declare -A conddep_condition func_uncond_add_module () { eval 'conddep_isuncond[$1]=true' eval 'unset conddep_dependers[$1]' } func_conddep_add_module () { eval 'isuncond="${conddep_isuncond[$2]}"' if test -z "$isuncond"; then # No unconditional dependency to B known at this point. eval 'conddep_dependers[$2]="${conddep_dependers[$2]} $1"' eval 'conddep_condition[$1---$2]="$3"' fi } func_cond_module_p () { eval 'previous_dependers="${conddep_dependers[$1]}"' test -n "$previous_dependers" } func_cond_module_condition () { eval 'condition="${conddep_condition[$1---$2]}"' } else func_uncond_add_module () { case $1 in *[!a-zA-Z0-9_]*) suffix=`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) suffix=$1 ;; esac eval 'conddep_isuncond_'"$suffix"'=true' eval 'unset conddep_dependers_'"$suffix" } func_conddep_add_module () { case $2 in *[!a-zA-Z0-9_]*) suffix=`echo "$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) suffix=$2 ;; esac eval 'isuncond="${conddep_isuncond_'"$suffix"'}"' if test -z "$isuncond"; then eval 'conddep_dependers_'"$suffix"'="${conddep_dependers_'"$suffix"'} $1"' suffix=`echo "$1---$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` eval 'conddep_condition_'"$suffix"'="$3"' fi } func_cond_module_p () { case $1 in *[!a-zA-Z0-9_]*) suffix=`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;; *) suffix=$1 ;; esac eval 'previous_dependers="${conddep_dependers_'"$suffix"'}"' test -n "$previous_dependers" } func_cond_module_condition () { suffix=`echo "$1---$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` eval 'condition="${conddep_condition_'"$suffix"'}"' } fi # func_modules_transitive_closure # Input: # - local_gnulib_path from --local-dir # - gnu_make true if --gnu-make was given, false otherwise # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of specified modules # - inctests true if tests should be included, false otherwise # - incobsolete true if obsolete modules among dependencies should be # included, blank otherwise # - inc_cxx_tests true if C++ interoperability tests should be included, # blank otherwise # - inc_longrunning_tests true if long-runnings tests should be included, # blank otherwise # - inc_privileged_tests true if tests that require root privileges should be # included, blank otherwise # - inc_unportable_tests true if tests that fail on some platforms should be # included, blank otherwise # - inc_all_direct_tests true if all kinds of problematic unit tests among # the unit tests of the specified modules should be # included, blank otherwise # - inc_all_indirect_tests true if all kinds of problematic unit tests among # the unit tests of the dependencies should be # included, blank otherwise # - excl_cxx_tests true if C++ interoperability tests should be excluded, # blank otherwise # - excl_longrunning_tests true if long-runnings tests should be excluded, # blank otherwise # - excl_privileged_tests true if tests that require root privileges should be # excluded, blank otherwise # - excl_unportable_tests true if tests that fail on some platforms should be # excluded, blank otherwise # - avoidlist list of modules to avoid # - cond_dependencies true if conditional dependencies shall be supported, # blank otherwise # - tmp pathname of a temporary directory # Output: # - modules list of modules, including dependencies # - conddep_dependers, conddep_condition information about conditionally # enabled modules func_modules_transitive_closure () { sed_escape_dependency='s|\([/.]\)|\\\1|g' # In order to process every module only once (for speed), process an "input # list" of modules, producing an "output list" of modules. During each round, # more modules can be queued in the input list. Once a module on the input # list has been processed, it is added to the "handled list", so we can avoid # to process it again. handledmodules= inmodules="$modules" outmodules= fmtc_inc_all_tests="$inc_all_direct_tests" if test "$cond_dependencies" = true; then for module in $inmodules; do func_verify_module if test -n "$module"; then if func_acceptable $module; then func_uncond_add_module $module fi fi done fi while test -n "$inmodules"; do inmodules_this_round="$inmodules" inmodules= # Accumulator, queue for next round for module in $inmodules_this_round; do func_verify_module if test -n "$module"; then if func_acceptable $module; then func_append outmodules " $module" if test "$cond_dependencies" = true; then if ! $gnu_make \ && func_get_automake_snippet_conditional $module \ | grep '^if ' > /dev/null; then # A module whose Makefile.am snippet contains a reference to an # automake conditional. If we were to use it conditionally, we # would get an error # configure: error: conditional "..." was never defined. # because automake 1.11.1 does not handle nested conditionals # correctly. As a workaround, make the module unconditional. func_uncond_add_module $module fi if func_cond_module_p $module; then conditional=true else conditional=false fi fi deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` # Duplicate dependencies are harmless, but Jim wants a warning. duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d` if test -n "$duplicated_deps"; then func_warning "module $module has duplicated dependencies: "`echo $duplicated_deps` fi if $inctests; then testsmodule=`func_get_tests_module $module` if test -n "$testsmodule"; then deps="$deps $testsmodule" fi fi for dep in $deps; do # Determine whether to include the dependency or tests module. inc=true for word in `func_get_status $dep`; do case "$word" in obsolete) test -n "$incobsolete" \ || inc=false ;; c++-test) test -z "$excl_cxx_tests" \ || inc=false test -n "$fmtc_inc_all_tests" || test -n "$inc_cxx_tests" \ || inc=false ;; longrunning-test) test -z "$excl_longrunning_tests" \ || inc=false test -n "$fmtc_inc_all_tests" || test -n "$inc_longrunning_tests" \ || inc=false ;; privileged-test) test -z "$excl_privileged_tests" \ || inc=false test -n "$fmtc_inc_all_tests" || test -n "$inc_privileged_tests" \ || inc=false ;; unportable-test) test -z "$excl_unportable_tests" \ || inc=false test -n "$fmtc_inc_all_tests" || test -n "$inc_unportable_tests" \ || inc=false ;; *-test) test -n "$fmtc_inc_all_tests" \ || inc=false ;; esac done if $inc && func_acceptable "$dep"; then func_append inmodules " $dep" if test "$cond_dependencies" = true; then escaped_dep=`echo "$dep" | sed -e "$sed_escape_dependency"` sed_extract_condition1='/^ *'"$escaped_dep"' *$/{ s/^.*$/true/p }' sed_extract_condition2='/^ *'"$escaped_dep"' *\[.*\] *$/{ s/^ *'"$escaped_dep"' *\[\(.*\)\] *$/\1/p }' condition=`func_get_dependencies $module | sed -n -e "$sed_extract_condition1" -e "$sed_extract_condition2"` if test "$condition" = true; then condition= fi if test -n "$condition"; then func_conddep_add_module "$module" "$dep" "$condition" else if $conditional; then func_conddep_add_module "$module" "$dep" true else func_uncond_add_module "$dep" fi fi fi fi done fi fi done handledmodules=`for m in $handledmodules $inmodules_this_round; do echo $m; done | LC_ALL=C sort -u` # Remove $handledmodules from $inmodules. for m in $inmodules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/queued-modules inmodules=`echo "$handledmodules" | LC_ALL=C join -v 2 - "$tmp"/queued-modules` fmtc_inc_all_tests="$inc_all_indirect_tests" done modules=`for m in $outmodules; do echo $m; done | LC_ALL=C sort -u` rm -f "$tmp"/queued-modules } # func_show_module_list # Input: # - specified_modules list of specified modules (one per line, sorted) # - modules complete list of modules (one per line, sorted) # - tmp pathname of a temporary directory func_show_module_list () { if case "$TERM" in xterm*) test -t 1;; *) false;; esac; then # Assume xterm compatible escape sequences. bold_on=`printf '\033[1m'` bold_off=`printf '\033[0m'` else bold_on= bold_off= fi echo "Module list with included dependencies (indented):" echo "$specified_modules" | sed -e '/^$/d' -e 's/$/| /' > "$tmp"/specified-modules echo "$modules" | sed -e '/^$/d' \ | LC_ALL=C join -t '|' -a2 "$tmp"/specified-modules - \ | sed -e 's/^\(.*\)|.*/|\1/' -e 's/^/ /' -e 's/^ |\(.*\)$/ '"${bold_on}"'\1'"${bold_off}"'/' } # func_modules_transitive_closure_separately # Determine main module list and tests-related module list separately. # The main module list is the transitive closure of the specified modules, # ignoring tests modules. Its lib/* sources go into $sourcebase/. If --lgpl # is specified, it will consist only of LGPLed source. # The tests-related module list is the transitive closure of the specified # modules, including tests modules, minus the main module list excluding # modules of applicability 'all'. Its lib/* sources (brought in through # dependencies of *-tests modules) go into $testsbase/. It may contain GPLed # source, even if --lgpl is specified. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - specified_modules list of specified modules # - inctests true if tests should be included, false otherwise # - incobsolete true if obsolete modules among dependencies should be # included, blank otherwise # - inc_cxx_tests true if C++ interoperability tests should be included, # blank otherwise # - inc_longrunning_tests true if long-runnings tests should be included, # blank otherwise # - inc_privileged_tests true if tests that require root privileges should be # included, blank otherwise # - inc_unportable_tests true if tests that fail on some platforms should be # included, blank otherwise # - inc_all_direct_tests true if all kinds of problematic unit tests among # the unit tests of the specified modules should be # included, blank otherwise # - inc_all_indirect_tests true if all kinds of problematic unit tests among # the unit tests of the dependencies should be # included, blank otherwise # - excl_cxx_tests true if C++ interoperability tests should be excluded, # blank otherwise # - excl_longrunning_tests true if long-runnings tests should be excluded, # blank otherwise # - excl_privileged_tests true if tests that require root privileges should be # excluded, blank otherwise # - excl_unportable_tests true if tests that fail on some platforms should be # excluded, blank otherwise # - avoidlist list of modules to avoid # - cond_dependencies true if conditional dependencies shall be supported, # blank otherwise # - tmp pathname of a temporary directory # Output: # - main_modules list of modules, including dependencies # - testsrelated_modules list of tests-related modules, including dependencies # - conddep_dependers, conddep_condition information about conditionally # enabled modules func_modules_transitive_closure_separately () { # Determine main module list. saved_inctests="$inctests" inctests=false modules="$specified_modules" func_modules_transitive_closure main_modules="$modules" inctests="$saved_inctests" if test $verbose -ge 1; then echo "Main module list:" echo "$main_modules" | sed -e 's/^/ /' fi # Determine tests-related module list. echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules testsrelated_modules=`for module in $main_modules; do if test \`func_get_applicability $module\` = main; then echo $module fi done \ | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules` # If testsrelated_modules consists only of modules with applicability 'all', # set it to empty (because such modules are only helper modules for other modules). have_nontrivial_testsrelated_modules= for module in $testsrelated_modules; do if test `func_get_applicability $module` != all; then have_nontrivial_testsrelated_modules=yes break fi done if test -z "$have_nontrivial_testsrelated_modules"; then testsrelated_modules= fi if test $verbose -ge 1; then echo "Tests-related module list:" echo "$testsrelated_modules" | sed -e 's/^/ /' fi } # func_determine_use_libtests # Determines whether a $testsbase/libtests.a is needed. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - testsrelated_modules list of tests-related modules, including dependencies # Output: # - use_libtests true if a $testsbase/libtests.a is needed, false otherwise func_determine_use_libtests () { use_libtests=false for module in $testsrelated_modules; do func_verify_nontests_module if test -n "$module"; then all_files=`func_get_filelist $module` # Test whether some file in $all_files lies in lib/. for f in $all_files; do case $f in lib/*) use_libtests=true break 2 ;; esac done fi done } # func_remove_if_blocks # removes if...endif blocks from an automake snippet. func_remove_if_blocks () { sed -n -e '/^if / { :a n s/^endif// tb ba :b } p' } # func_modules_add_dummy # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of modules, including dependencies # Output: # - modules list of modules, including 'dummy' if needed func_modules_add_dummy () { # Determine whether any module provides a lib_SOURCES augmentation. have_lib_SOURCES= for module in $modules; do func_verify_nontests_module if test -n "$module"; then if test "$cond_dependencies" = true && func_cond_module_p $module; then # Ignore conditional modules, since they are not guaranteed to # contribute to lib_SOURCES. : else # Extract the value of unconditional "lib_SOURCES += ..." augmentations. for file in `func_get_automake_snippet "$module" | combine_lines | func_remove_if_blocks | sed -n -e 's,^lib_SOURCES[ ]*+=\([^#]*\).*$,\1,p'`; do # Ignore .h files since they are not compiled. case "$file" in *.h) ;; *) have_lib_SOURCES=yes break 2 ;; esac done fi fi done # Add the dummy module, to make sure the library will be non-empty. if test -z "$have_lib_SOURCES"; then if func_acceptable "dummy"; then func_append modules " dummy" fi fi } # func_modules_add_dummy_separately # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - main_modules list of modules, including dependencies # - testsrelated_modules list of tests-related modules, including dependencies # - use_libtests true if a $testsbase/libtests.a is needed, false otherwise # Output: # - main_modules list of modules, including 'dummy' if needed # - testsrelated_modules list of tests-related modules, including 'dummy' if # needed func_modules_add_dummy_separately () { # Add the dummy module to the main module list if needed. modules="$main_modules" func_modules_add_dummy main_modules="$modules" # Add the dummy module to the tests-related module list if needed. if $use_libtests; then modules="$testsrelated_modules" func_modules_add_dummy testsrelated_modules="$modules" fi } # func_modules_notice # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - verbose integer, default 0, inc/decremented by --verbose/--quiet # - modules list of modules, including dependencies func_modules_notice () { if test $verbose -ge -1; then for module in $modules; do func_verify_module if test -n "$module"; then msg=`func_get_notice $module` if test -n "$msg"; then echo "Notice from module $module:" echo "$msg" | sed -e 's/^/ /' fi fi done fi } # func_modules_to_filelist # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of modules, including dependencies # Output: # - files list of files func_modules_to_filelist () { files= for module in $modules; do func_verify_module if test -n "$module"; then fs=`func_get_filelist $module` func_append files " $fs" fi done files=`for f in $files; do echo $f; done | LC_ALL=C sort -u` } # func_modules_to_filelist_separately # Determine the final file lists. # They must be computed separately, because files in lib/* go into # $sourcebase/ if they are in the main file list but into $testsbase/ # if they are in the tests-related file list. Furthermore lib/dummy.c # can be in both. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - main_modules list of modules, including dependencies # - testsrelated_modules list of tests-related modules, including dependencies func_modules_to_filelist_separately () { # Determine final main file list. modules="$main_modules" func_modules_to_filelist main_files="$files" # Determine final tests-related file list. modules="$testsrelated_modules" func_modules_to_filelist testsrelated_files=`echo "$files" | sed -e 's,^lib/,tests=lib/,'` # Merge both file lists. sed_remove_empty_lines='/^$/d' files=`{ echo "$main_files"; echo "$testsrelated_files"; } | sed -e "$sed_remove_empty_lines" | LC_ALL=C sort -u` if test $verbose -ge 0; then echo "File list:" sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,' echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/ /' fi } # func_compute_include_guard_prefix # Determine include_guard_prefix and module_indicator_prefix. # Input: # - macro_prefix prefix of gl_LIBOBJS macros to use # Output: # - include_guard_prefix replacement for ${gl_include_guard_prefix} # - sed_replace_include_guard_prefix # sed expression for resolving ${gl_include_guard_prefix} # - module_indicator_prefix prefix of GNULIB_<modulename> variables to use func_compute_include_guard_prefix () { if test "$macro_prefix" = gl; then include_guard_prefix='GL' else include_guard_prefix='GL_'`echo "$macro_prefix" | LC_ALL=C tr '[a-z]' '[A-Z]'` fi sed_replace_include_guard_prefix='s/\${gl_include_guard_prefix}/'"${include_guard_prefix}"'/g' module_indicator_prefix="${include_guard_prefix}" } # func_execute_command command [args...] # Executes a command. # Uses also the variables # - verbose integer, default 0, inc/decremented by --verbose/--quiet func_execute_command () { if test $verbose -ge 0; then echo "executing $*" "$@" else # Commands like automake produce output to stderr even when they succeed. # Turn this output off if the command succeeds. "$@" > "$tmp"/cmdout 2>&1 cmdret=$? if test $cmdret = 0; then rm -f "$tmp"/cmdout else echo "executing $*" cat "$tmp"/cmdout 1>&2 rm -f "$tmp"/cmdout (exit $cmdret) fi fi } # func_dest_tmpfilename file # determines the name of a temporary file (file is relative to destdir). # Input: # - destdir target directory # - doit : if actions shall be executed, false if only to be printed # - tmp pathname of a temporary directory # Sets variable: # - tmpfile absolute filename of the temporary file func_dest_tmpfilename () { if $doit; then # Put the new contents of $file in a file in the same directory (needed # to guarantee that an 'mv' to "$destdir/$file" works). tmpfile="$destdir/$1.tmp" else # Put the new contents of $file in a file in a temporary directory # (because the directory of "$file" might not exist). tmpfile="$tmp"/`basename "$1"`.tmp fi } # func_is_local_file lookedup_file file # check whether file should be instantiated from local gnulib directory func_is_local_file () { dname=$1 func_remove_suffix dname "/$2" func_path_foreach "$local_gnulib_path" test %dir% = "$dname" } # func_should_link # determines whether the file $f should be copied, symlinked, or hardlinked. # Input: # - copymode copy mode for files in general # - lcopymode copy mode for files from local_gnulib_path # - f the original file name # - lookedup_file name of the merged (combined) file # Sets variable: # - copyaction copy or symlink or hardlink func_should_link () { if test -n "$lcopymode" && func_is_local_file "$lookedup_file" "$f"; then copyaction="$lcopymode" else if test -n "$copymode"; then copyaction="$copymode" else copyaction=copy fi fi } # func_add_file # copies a file from gnulib into the destination directory. The destination # is known to not exist. # Input: # - destdir target directory # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - f the original file name # - lookedup_file name of the merged (combined) file # - lookedup_tmp true if it is located in the tmp directory, blank otherwise # - g the rewritten file name # - tmpfile absolute filename of the temporary file # - doit : if actions shall be executed, false if only to be printed # - copymode copy mode for files in general # - lcopymode copy mode for files from local_gnulib_path func_add_file () { if $doit; then echo "Copying file $g" func_should_link if test "$copyaction" = symlink \ && test -z "$lookedup_tmp" \ && cmp -s "$lookedup_file" "$tmpfile"; then func_symlink_if_changed "$lookedup_file" "$destdir/$g" else if test "$copyaction" = hardlink \ && test -z "$lookedup_tmp" \ && cmp -s "$lookedup_file" "$tmpfile"; then func_hardlink "$lookedup_file" "$destdir/$g" else mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" fi fi else echo "Copy file $g" fi } # func_update_file # copies a file from gnulib into the destination directory. The destination # is known to exist. # Input: # - destdir target directory # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - f the original file name # - lookedup_file name of the merged (combined) file # - lookedup_tmp true if it is located in the tmp directory, blank otherwise # - g the rewritten file name # - tmpfile absolute filename of the temporary file # - doit : if actions shall be executed, false if only to be printed # - copymode copy mode for files in general # - lcopymode copy mode for files from local_gnulib_path # - already_present nonempty if the file should already exist, empty otherwise func_update_file () { if cmp -s "$destdir/$g" "$tmpfile"; then : # The file has not changed. else # Replace the file. if $doit; then if test -n "$already_present"; then echo "Updating file $g (backup in ${g}~)" else echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!" fi mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed" func_should_link if test "$copyaction" = symlink \ && test -z "$lookedup_tmp" \ && cmp -s "$lookedup_file" "$tmpfile"; then func_symlink_if_changed "$lookedup_file" "$destdir/$g" else if test "$copyaction" = hardlink \ && test -z "$lookedup_tmp" \ && cmp -s "$lookedup_file" "$tmpfile"; then func_hardlink "$lookedup_file" "$destdir/$g" else mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" fi fi else if test -n "$already_present"; then echo "Update file $g (backup in ${g}~)" else echo "Replace file $g (non-gnulib code backed up in ${g}~) !!" fi fi fi } # func_emit_lib_Makefile_am # emits the contents of library makefile to standard output. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of modules, including dependencies # - libname library name # - pobase directory relative to destdir where to place *.po files # - auxdir directory relative to destdir where to place build aux files # - gnu_make true if --gnu-make was given, false otherwise # - makefile_name from --makefile-name # - libtool true if libtool will be used, false or blank otherwise # - macro_prefix prefix of gl_LIBOBJS macros to use # - module_indicator_prefix prefix of GNULIB_<modulename> variables to use # - po_domain prefix of i18n domain to use (without -gnulib suffix) # - witness_c_macro from --witness-c-macro # - actioncmd (optional) command that will reproduce this invocation # - for_test true if creating a package for testing, false otherwise # - sed_replace_include_guard_prefix # sed expression for resolving ${gl_include_guard_prefix} # - destfile filename relative to destdir of makefile being generated # Input/Output: # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val,dotfirst} # list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_lib_Makefile_am () { # When using GNU make, or when creating an includable Makefile.am snippet, # augment variables with += instead of assigning them. if $gnu_make || test -n "$makefile_name"; then assign='+=' else assign='=' fi if test "$libtool" = true; then libext=la perhapsLT=LT sed_eliminate_LDFLAGS="$sed_noop" else libext=a perhapsLT= sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d' fi if $for_test; then # When creating a package for testing: Attempt to provoke failures, # especially link errors, already during "make" rather than during # "make check", because "make check" is not possible in a cross-compiling # situation. Turn check_PROGRAMS into noinst_PROGRAMS. sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g' else sed_transform_check_PROGRAMS="$sed_noop" fi echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" $gnu_make || echo "## Process this file with automake to produce Makefile.in." func_emit_copyright_notice if test -n "$actioncmd"; then printf '# Reproduce by:\n%s\n' "$actioncmd" fi echo uses_subdirs= { for module in $modules; do func_verify_nontests_module if test -n "$module"; then { func_get_automake_snippet_conditional "$module" | LC_ALL=C \ sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \ -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \ -e "$sed_eliminate_LDFLAGS" \ -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \ -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \ -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \ -e "$sed_transform_check_PROGRAMS" \ -e "$sed_replace_include_guard_prefix" if test "$module" = 'alloca'; then echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@" echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi } | combine_lines "${libname}_${libext}_SOURCES" > "$tmp"/amsnippet1 { func_get_automake_snippet_unconditional "$module" | LC_ALL=C \ sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' } > "$tmp"/amsnippet2 # Skip the contents if it's entirely empty. if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then echo "## begin gnulib module $module" if $gnu_make; then echo "ifeq (,\$(OMIT_GNULIB_MODULE_$module))" convert_to_gnu_make='s/^if \(.*\)/ifneq (,$(\1))/' else convert_to_gnu_make= fi echo if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then func_module_conditional_name "$module" if $gnu_make; then echo "ifneq (,\$($conditional))" else echo "if $conditional" fi fi fi sed "$convert_to_gnu_make" "$tmp"/amsnippet1 if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then echo "endif" fi fi sed "$convert_to_gnu_make" "$tmp"/amsnippet2 if $gnu_make; then echo "endif" fi echo "## end gnulib module $module" echo fi rm -f "$tmp"/amsnippet1 "$tmp"/amsnippet2 # Test whether there are some source files in subdirectories. for f in `func_get_filelist "$module"`; do case $f in lib/*/*.c) uses_subdirs=yes break ;; esac done fi done } > "$tmp"/allsnippets if test -z "$makefile_name"; then # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). subdir_options= if test -n "$uses_subdirs"; then subdir_options=' subdir-objects' fi echo "AUTOMAKE_OPTIONS = 1.11 gnits${subdir_options}" fi echo if test -z "$makefile_name"; then echo "SUBDIRS =" echo "noinst_HEADERS =" echo "noinst_LIBRARIES =" echo "noinst_LTLIBRARIES =" # Automake versions < 1.11.4 create an empty pkgdatadir at # installation time if you specify pkgdata_DATA to empty. # See automake bugs #10997 and #11030: # * https://debbugs.gnu.org/10997 # * https://debbugs.gnu.org/11030 # So we need this workaround. if grep '^pkgdata_DATA *+=' "$tmp"/allsnippets > /dev/null; then echo "pkgdata_DATA =" fi echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" fi echo "MOSTLYCLEANFILES $assign core *.stackdump" if test -z "$makefile_name"; then echo "MOSTLYCLEANDIRS =" echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" fi if $gnu_make; then echo "# Start of GNU Make output." # Put autoconf output into a temporary file, so that its exit status # can be checked from the shell. Signal any error by putting a # syntax error into the output makefile. ${AUTOCONF} -t 'AC_SUBST:$1 = @$1@' "$configure_ac" \ >"$tmp"/makeout 2>"$tmp"/makeout2 && LC_ALL=C sort -u "$tmp"/makeout || { echo "== gnulib-tool GNU Make output failed as follows ==" sed 's/^/# stderr: /' "$tmp"/makeout2 } rm -f "$tmp"/makeout "$tmp"/makeout2 echo "# End of GNU Make output." else echo "# No GNU Make output." fi # Execute edits that apply to the Makefile.am being generated. edit=0 while test $edit != $makefile_am_edits; do edit=`expr $edit + 1` eval dir=\"\$makefile_am_edit${edit}_dir\" eval var=\"\$makefile_am_edit${edit}_var\" eval val=\"\$makefile_am_edit${edit}_val\" eval dotfirst=\"\$makefile_am_edit${edit}_dotfirst\" if test -n "$var"; then if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then if test "${var}" = SUBDIRS && test -n "$dotfirst"; then # The added subdirectory ${val} needs to be mentioned after '.'. # Since we don't have '.' among SUBDIRS so far, add it now. val=". ${val}" fi echo "${var} += ${val}" eval "makefile_am_edit${edit}_var=" fi fi done if test -n "$witness_c_macro"; then cppflags_part1=" -D$witness_c_macro=1" else cppflags_part1= fi if $for_test; then cppflags_part2=" -DGNULIB_STRICT_CHECKING=1" else cppflags_part2= fi if test -z "$makefile_name"; then echo echo "AM_CPPFLAGS =$cppflags_part1$cppflags_part2" echo "AM_CFLAGS =" else if test -n "$cppflags_part1$cppflags_part2"; then echo echo "AM_CPPFLAGS +=$cppflags_part1$cppflags_part2" fi fi echo if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$tmp"/allsnippets > /dev/null \ || { test -n "$makefile_name" \ && test -f "$sourcebase/Makefile.am" \ && LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$sourcebase/Makefile.am" > /dev/null; \ }; then # One of the snippets or the user's Makefile.am already specifies an # installation location for the library. Don't confuse automake by saying # it should not be installed. : else # By default, the generated library should not be installed. echo "noinst_${perhapsLT}LIBRARIES += $libname.$libext" fi echo echo "${libname}_${libext}_SOURCES =" # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" echo "EXTRA_${libname}_${libext}_SOURCES =" if test "$libtool" = true; then echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)" echo "${libname}_${libext}_LDFLAGS += -no-undefined" # Synthesize an ${libname}_${libext}_LDFLAGS augmentation by combining # the link dependencies of all modules. for module in $modules; do func_verify_nontests_module if test -n "$module"; then func_get_link_directive "$module" fi done \ | LC_ALL=C sed -e '/^$/d' -e 's/ when linking with libtool.*//' \ | LC_ALL=C sort -u \ | LC_ALL=C sed -e 's/^/'"${libname}_${libext}"'_LDFLAGS += /' fi echo if test -n "$pobase"; then echo "AM_CPPFLAGS += -DDEFAULT_TEXT_DOMAIN=\\\"${po_domain}-gnulib\\\"" echo fi cat "$tmp"/allsnippets \ | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g' echo echo "mostlyclean-local: mostlyclean-generic" echo " @for dir in '' \$(MOSTLYCLEANDIRS); do \\" echo " if test -n \"\$\$dir\" && test -d \$\$dir; then \\" echo " echo \"rmdir \$\$dir\"; rmdir \$\$dir; \\" echo " fi; \\" echo " done; \\" echo " :" rm -f "$tmp"/allsnippets } # func_emit_po_Makevars # emits the contents of po/ makefile parameterization to standard output. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - sourcebase directory relative to destdir where to place source code # - pobase directory relative to destdir where to place *.po files # - po_domain prefix of i18n domain to use (without -gnulib suffix) func_emit_po_Makevars () { echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" func_emit_copyright_notice echo echo "# Usually the message domain is the same as the package name." echo "# But here it has a '-gnulib' suffix." echo "DOMAIN = ${po_domain}-gnulib" echo echo "# These two variables depend on the location of this directory." echo "subdir = ${pobase}" echo "top_builddir = "`echo "$pobase" | sed -e 's,//*,/,g' -e 's,[^/][^/]*,..,g'` echo cat <<\EOF # These options get passed to xgettext. XGETTEXT_OPTIONS = \ --keyword=_ --flag=_:1:pass-c-format \ --keyword=N_ --flag=N_:1:pass-c-format \ --keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' \ --keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' \ --flag=error:3:c-format --flag=error_at_line:5:c-format # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. gnulib is copyrighted by the FSF. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no EOF } # func_emit_po_POTFILES_in # emits the file list to be passed to xgettext to standard output. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - sourcebase directory relative to destdir where to place source code # - files list of new files func_emit_po_POTFILES_in () { echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" func_emit_copyright_notice echo echo "# List of files which contain translatable strings." echo "$files" | sed -n -e "s,^lib/,$sourcebase/,p" } # func_emit_tests_Makefile_am witness_macro # emits the contents of tests makefile to standard output. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of modules, including dependencies # - libname library name # - auxdir directory relative to destdir where to place build aux files # - gnu_make true if --gnu-make was given, false otherwise # - makefile_name from --makefile-name # - libtool true if libtool will be used, false or blank otherwise # - sourcebase relative directory containing lib source code # - m4base relative directory containing autoconf macros # - testsbase relative directory containing unit test code # - macro_prefix prefix of gl_LIBOBJS macros to use # - module_indicator_prefix prefix of GNULIB_<modulename> variables to use # - witness_c_macro from --witness-c-macro # - for_test true if creating a package for testing, false otherwise # - single_configure true if a single configure file should be generated, # false for a separate configure file for the tests # - use_libtests true if a libtests.a should be built, false otherwise # - sed_replace_include_guard_prefix # sed expression for resolving ${gl_include_guard_prefix} # - destfile filename relative to destdir of makefile being generated # Input/Output: # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val,dotfirst} # list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_tests_Makefile_am () { witness_macro="$1" if test "$libtool" = true; then libext=la perhapsLT=LT sed_eliminate_LDFLAGS="$sed_noop" else libext=a perhapsLT= sed_eliminate_LDFLAGS='/^lib_LDFLAGS[ ]*+=/d' fi if $for_test; then # When creating a package for testing: Attempt to provoke failures, # especially link errors, already during "make" rather than during # "make check", because "make check" is not possible in a cross-compiling # situation. Turn check_PROGRAMS into noinst_PROGRAMS. sed_transform_check_PROGRAMS='s,check_PROGRAMS,noinst_PROGRAMS,g' else sed_transform_check_PROGRAMS="$sed_noop" fi testsbase_inverse=`echo "$testsbase" | sed -e 's,/$,,' | sed -e 's,[^/][^/]*,..,g'` echo "## DO NOT EDIT! GENERATED AUTOMATICALLY!" echo "## Process this file with automake to produce Makefile.in." func_emit_copyright_notice echo uses_subdirs= { for module in $modules; do if $for_test && ! $single_configure; then func_verify_tests_module else func_verify_module fi if test -n "$module"; then { func_get_automake_snippet_conditional "$module" | LC_ALL=C \ sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \ -e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \ -e "$sed_eliminate_LDFLAGS" \ -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \ -e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \ -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \ -e "$sed_transform_check_PROGRAMS" \ -e "$sed_replace_include_guard_prefix" if $use_libtests && test "$module" = 'alloca'; then echo "libtests_a_LIBADD += @ALLOCA@" echo "libtests_a_DEPENDENCIES += @ALLOCA@" fi } | combine_lines "libtests_a_SOURCES" > "$tmp"/amsnippet1 { func_get_automake_snippet_unconditional "$module" | LC_ALL=C \ sed -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' } > "$tmp"/amsnippet2 # Skip the contents if it's entirely empty. if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then # Mention long-running tests at the end. ofd=3 for word in `func_get_status "$module"`; do if test "$word" = 'longrunning-test'; then ofd=4 break fi done { echo "## begin gnulib module $module" if $gnu_make; then echo "ifeq (,\$(OMIT_GNULIB_MODULE_$module))" convert_to_gnu_make='s/^if \(.*\)/ifneq (,$(\1))/' else convert_to_gnu_make= fi echo if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then func_module_conditional_name "$module" if $gnu_make; then echo "ifneq (,\$($conditional))" else echo "if $conditional" fi fi fi sed "$convert_to_gnu_make" "$tmp"/amsnippet1 if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then echo "endif" fi fi sed "$convert_to_gnu_make" "$tmp"/amsnippet2 if $gnu_make; then echo "endif" fi echo "## end gnulib module $module" echo } >&$ofd fi rm -f "$tmp"/amsnippet1 "$tmp"/amsnippet2 # Test whether there are some source files in subdirectories. for f in `func_get_filelist "$module"`; do case $f in lib/*/*.c | tests/*/*.c) uses_subdirs=yes break ;; esac done fi done } 3> "$tmp"/main_snippets 4> "$tmp"/longrunning_snippets # Generate dependencies here, since it eases the debugging of test failures. # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). subdir_options= if test -n "$uses_subdirs"; then subdir_options=' subdir-objects' fi echo "AUTOMAKE_OPTIONS = 1.11 foreign${subdir_options}" echo if $for_test && ! $single_configure; then echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}" echo fi # Nothing is being added to SUBDIRS; nevertheless the existence of this # variable is needed to avoid an error from automake: # "AM_GNU_GETTEXT used but SUBDIRS not defined" echo "SUBDIRS = ." echo "TESTS =" echo "XFAIL_TESTS =" echo "TESTS_ENVIRONMENT =" echo "noinst_PROGRAMS =" if ! $for_test; then echo "check_PROGRAMS =" fi echo "EXTRA_PROGRAMS =" echo "noinst_HEADERS =" echo "noinst_LIBRARIES =" if $use_libtests; then if $for_test; then echo "noinst_LIBRARIES += libtests.a" else echo "check_LIBRARIES = libtests.a" fi fi # Automake versions < 1.11.4 create an empty pkgdatadir at # installation time if you specify pkgdata_DATA to empty. # See automake bugs #10997 and #11030: # * https://debbugs.gnu.org/10997 # * https://debbugs.gnu.org/11030 # So we need this workaround. if grep '^pkgdata_DATA *+=' "$tmp"/main_snippets "$tmp"/longrunning_snippets > /dev/null; then echo "pkgdata_DATA =" fi echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" echo "MOSTLYCLEANFILES = core *.stackdump" echo "MOSTLYCLEANDIRS =" echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" # Execute edits that apply to the Makefile.am being generated. edit=0 while test $edit != $makefile_am_edits; do edit=`expr $edit + 1` eval dir=\"\$makefile_am_edit${edit}_dir\" eval var=\"\$makefile_am_edit${edit}_var\" eval val=\"\$makefile_am_edit${edit}_val\" eval dotfirst=\"\$makefile_am_edit${edit}_dotfirst\" if test -n "$var"; then if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then if test "${var}" = SUBDIRS && test -n "$dotfirst"; then # The added subdirectory ${val} needs to be mentioned after '.'. # But we have '.' among SUBDIRS already, so do nothing. : fi echo "${var} += ${val}" eval "makefile_am_edit${edit}_var=" fi fi done echo # Insert a '-Wno-error' option in the compilation commands emitted by # Automake, between $(AM_CPPFLAGS) and before the reference to @CFLAGS@. # Why? # 1) Because parts of the Gnulib tests exercise corner cases (invalid # arguments, endless recursions, etc.) that a compiler may warn about, # even with just the normal '-Wall' option. # 2) Because every package maintainer has their preferred set of warnings # that they may want to enforce in the main source code of their package. # But Gnulib tests are maintained in Gnulib and don't end up in binaries # that that package installs; therefore it does not make sense for # package maintainers to enforce the absence of warnings on these tests. # Why before @CFLAGS@? # - Because "the user is always right": If a user adds '-Werror' to their # CFLAGS, they have asked for errors, they will get errors. But they have # no right to complain about these errors, because Gnulib does not support # '-Werror'. echo "CFLAGS = @GL_CFLAG_ALLOW_WARNINGS@ @CFLAGS@" echo "CXXFLAGS = @GL_CXXFLAG_ALLOW_WARNINGS@ @CXXFLAGS@" echo echo "AM_CPPFLAGS = \\" if $for_test; then echo " -DGNULIB_STRICT_CHECKING=1 \\" fi if test -n "$witness_c_macro"; then echo " -D$witness_c_macro=1 \\" fi if test -n "${witness_macro}"; then echo " -D@${witness_macro}@=1 \\" fi echo " -I. -I\$(srcdir) \\" echo " -I${testsbase_inverse} -I\$(srcdir)/${testsbase_inverse} \\" echo " -I${testsbase_inverse}/${sourcebase-lib} -I\$(srcdir)/${testsbase_inverse}/${sourcebase-lib}" echo if $use_libtests; then # All test programs need to be linked with libtests.a. # It needs to be passed to the linker before ${libname}.${libext}, since # the tests-related modules depend on the main modules. # It also needs to be passed to the linker after ${libname}.${libext} # because the latter might contain incomplete modules (such as the # 'version-etc' module whose dependency to 'version-etc-fsf' is voluntarily # omitted). # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it does # not matter. echo "LDADD = libtests.a ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext} libtests.a ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext} libtests.a \$(LIBTESTS_LIBDEPS)" else echo "LDADD = ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}" fi echo if $use_libtests; then echo "libtests_a_SOURCES =" # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. echo "libtests_a_LIBADD = \$(${macro_prefix}tests_LIBOBJS)" echo "libtests_a_DEPENDENCIES = \$(${macro_prefix}tests_LIBOBJS)" echo "EXTRA_libtests_a_SOURCES =" # The circular dependency in LDADD requires this. echo "AM_LIBTOOLFLAGS = --preserve-dup-deps" echo fi # Many test scripts use ${EXEEXT} or ${srcdir}. # EXEEXT is defined by AC_PROG_CC through autoconf. # srcdir is defined by autoconf and automake. echo "TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='\$(srcdir)'" echo cat "$tmp"/main_snippets "$tmp"/longrunning_snippets \ | sed -e 's|\$(top_srcdir)/build-aux/|$(top_srcdir)/'"$auxdir"'/|g' # Arrange to print a message before compiling the files in this directory. echo "all: all-notice" echo "all-notice:" echo " @echo '## ---------------------------------------------------- ##'" echo " @echo '## ------------------- Gnulib tests ------------------- ##'" echo " @echo '## You can ignore compiler warnings in this directory. ##'" echo " @echo '## ---------------------------------------------------- ##'" echo # Arrange to print a message before executing the tests in this directory. echo "check-am: check-notice" echo "check-notice:" echo " @echo '## ---------------------------------------------------------------------- ##'" echo " @echo '## ---------------------------- Gnulib tests ---------------------------- ##'" echo " @echo '## Please report test failures in this directory to <bug-gnulib@gnu.org>. ##'" echo " @echo '## ---------------------------------------------------------------------- ##'" echo echo "# Clean up after Solaris cc." echo "clean-local:" echo " rm -rf SunWS_cache" echo echo "mostlyclean-local: mostlyclean-generic" echo " @for dir in '' \$(MOSTLYCLEANDIRS); do \\" echo " if test -n \"\$\$dir\" && test -d \$\$dir; then \\" echo " echo \"rmdir \$\$dir\"; rmdir \$\$dir; \\" echo " fi; \\" echo " done; \\" echo " :" rm -f "$tmp"/main_snippets "$tmp"/longrunning_snippets } # func_emit_initmacro_start macro_prefix gentests # emits the first few statements of the gl_INIT macro to standard output. # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use # - gentests true if a tests Makefile.am is being generated, # false otherwise # - module_indicator_prefix prefix of GNULIB_<modulename> variables to use func_emit_initmacro_start () { macro_prefix_arg="$1" # Overriding AC_LIBOBJ and AC_REPLACE_FUNCS has the effect of storing # platform-dependent object files in ${macro_prefix_arg}_LIBOBJS instead of # LIBOBJS. The purpose is to allow several gnulib instantiations under # a single configure.ac file. (AC_CONFIG_LIBOBJ_DIR does not allow this # flexibility.) # Furthermore it avoids an automake error like this when a Makefile.am # that uses pieces of gnulib also uses $(LIBOBJ): # automatically discovered file `error.c' should not be explicitly mentioned echo " m4_pushdef([AC_LIBOBJ], m4_defn([${macro_prefix_arg}_LIBOBJ]))" echo " m4_pushdef([AC_REPLACE_FUNCS], m4_defn([${macro_prefix_arg}_REPLACE_FUNCS]))" # Overriding AC_LIBSOURCES has the same purpose of avoiding the automake # error when a Makefile.am that uses pieces of gnulib also uses $(LIBOBJ): # automatically discovered file `error.c' should not be explicitly mentioned # We let automake know about the files to be distributed through the # EXTRA_lib_SOURCES variable. echo " m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix_arg}_LIBSOURCES]))" # Create data variables for checking the presence of files that are mentioned # as AC_LIBSOURCES arguments. These are m4 variables, not shell variables, # because we want the check to happen when the configure file is created, # not when it is run. ${macro_prefix_arg}_LIBSOURCES_LIST is the list of # files to check for. ${macro_prefix_arg}_LIBSOURCES_DIR is the subdirectory # in which to expect them. echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_LIST], [])" echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_DIR], [])" # Scope for m4 macros. echo " m4_pushdef([GL_MACRO_PREFIX], [${macro_prefix_arg}])" # Scope the GNULIB_<modulename> variables. echo " m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [${module_indicator_prefix}])" echo " gl_COMMON" if "$2"; then echo " AC_REQUIRE([gl_CC_ALLOW_WARNINGS])" echo " AC_REQUIRE([gl_CXX_ALLOW_WARNINGS])" fi } # func_emit_initmacro_end macro_prefix # emits the last few statements of the gl_INIT macro to standard output. # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use func_emit_initmacro_end () { macro_prefix_arg="$1" # Check the presence of files that are mentioned as AC_LIBSOURCES arguments. # The check is performed only when autoconf is run from the directory where # the configure.ac resides; if it is run from a different directory, the # check is skipped. echo " m4_ifval(${macro_prefix_arg}_LIBSOURCES_LIST, [" echo " m4_syscmd([test ! -d ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[ ||" echo " for gl_file in ]${macro_prefix_arg}_LIBSOURCES_LIST[ ; do" echo " if test ! -r ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file ; then" echo " echo \"missing file ]m4_defn([${macro_prefix_arg}_LIBSOURCES_DIR])[/\$gl_file\" >&2" echo " exit 1" echo " fi" echo " done])dnl" echo " m4_if(m4_sysval, [0], []," echo " [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])" echo " ])" echo " m4_popdef([GL_MODULE_INDICATOR_PREFIX])" echo " m4_popdef([GL_MACRO_PREFIX])" echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_DIR])" echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_LIST])" echo " m4_popdef([AC_LIBSOURCES])" echo " m4_popdef([AC_REPLACE_FUNCS])" echo " m4_popdef([AC_LIBOBJ])" echo " AC_CONFIG_COMMANDS_PRE([" echo " ${macro_prefix_arg}_libobjs=" echo " ${macro_prefix_arg}_ltlibobjs=" echo " if test -n \"\$${macro_prefix_arg}_LIBOBJS\"; then" echo " # Remove the extension." echo " sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'" echo " for i in \`for i in \$${macro_prefix_arg}_LIBOBJS; do echo \"\$i\"; done | sed -e \"\$sed_drop_objext\" | sort | uniq\`; do" echo " ${macro_prefix_arg}_libobjs=\"\$${macro_prefix_arg}_libobjs \$i.\$ac_objext\"" echo " ${macro_prefix_arg}_ltlibobjs=\"\$${macro_prefix_arg}_ltlibobjs \$i.lo\"" echo " done" echo " fi" echo " AC_SUBST([${macro_prefix_arg}_LIBOBJS], [\$${macro_prefix_arg}_libobjs])" echo " AC_SUBST([${macro_prefix_arg}_LTLIBOBJS], [\$${macro_prefix_arg}_ltlibobjs])" echo " ])" } # func_emit_initmacro_done macro_prefix sourcebase # emits a few statements after the gl_INIT macro to standard output. # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use # - sourcebase directory relative to destdir where to place source code func_emit_initmacro_done () { macro_prefix_arg="$1" sourcebase_arg="$2" echo echo "# Like AC_LIBOBJ, except that the module name goes" echo "# into ${macro_prefix_arg}_LIBOBJS instead of into LIBOBJS." echo "AC_DEFUN([${macro_prefix_arg}_LIBOBJ], [" echo " AS_LITERAL_IF([\$1], [${macro_prefix_arg}_LIBSOURCES([\$1.c])])dnl" echo " ${macro_prefix_arg}_LIBOBJS=\"\$${macro_prefix_arg}_LIBOBJS \$1.\$ac_objext\"" echo "])" echo echo "# Like AC_REPLACE_FUNCS, except that the module name goes" echo "# into ${macro_prefix_arg}_LIBOBJS instead of into LIBOBJS." echo "AC_DEFUN([${macro_prefix_arg}_REPLACE_FUNCS], [" echo " m4_foreach_w([gl_NAME], [\$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl" echo " AC_CHECK_FUNCS([\$1], , [${macro_prefix_arg}_LIBOBJ(\$ac_func)])" echo "])" echo echo "# Like AC_LIBSOURCES, except the directory where the source file is" echo "# expected is derived from the gnulib-tool parameterization," echo "# and alloca is special cased (for the alloca-opt module)." echo "# We could also entirely rely on EXTRA_lib..._SOURCES." echo "AC_DEFUN([${macro_prefix_arg}_LIBSOURCES], [" echo " m4_foreach([_gl_NAME], [\$1], [" echo " m4_if(_gl_NAME, [alloca.c], [], [" echo " m4_define([${macro_prefix_arg}_LIBSOURCES_DIR], [$sourcebase_arg])" echo " m4_append([${macro_prefix_arg}_LIBSOURCES_LIST], _gl_NAME, [ ])" echo " ])" echo " ])" echo "])" } # func_emit_autoconf_snippet indentation # emits the autoconf snippet of a module. # Input: # - indentation spaces to prepend on each line # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - sed_replace_build_aux sed expression that replaces reference to build-aux # - sed_replace_include_guard_prefix # sed expression for resolving ${gl_include_guard_prefix} # - module the module name # - toplevel true or false. 'false' means a subordinate use of # gnulib-tool. # - disable_libtool true or false. It tells whether to disable libtool # handling even if it has been specified through the # command line options. # - disable_gettext true or false. It tells whether to disable AM_GNU_GETTEXT # invocations. func_emit_autoconf_snippet () { indentation="$1" if { case $module in gnumakefile | maintainer-makefile) # These modules are meant to be used only in the top-level directory. $toplevel ;; *) true ;; esac }; then func_get_autoconf_snippet "$module" \ | sed -e '/^$/d;' -e "s/^/$indentation/" \ -e "$sed_replace_build_aux" \ -e "$sed_replace_include_guard_prefix" \ | { if $disable_libtool; then sed -e 's/\$gl_cond_libtool/false/g' \ -e 's/gl_libdeps/gltests_libdeps/g' \ -e 's/gl_ltlibdeps/gltests_ltlibdeps/g' else cat fi } \ | { if $disable_gettext; then sed -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' else # Don't indent AM_GNU_GETTEXT_VERSION line, as that confuses # autopoint through at least GNU gettext version 0.18.2. sed -e 's/^ *AM_GNU_GETTEXT_VERSION/AM_GNU_GETTEXT_VERSION/' fi } if test "$module" = 'alloca' && test "$libtool" = true && ! $disable_libtool; then echo 'changequote(,)dnl' echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' echo 'changequote([, ])dnl' echo 'AC_SUBST([LTALLOCA])' fi fi } # func_emit_autoconf_snippets modules referenceable_modules verifier toplevel disable_libtool disable_gettext # collects and emit the autoconf snippets of a set of modules. # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - sed_replace_build_aux sed expression that replaces reference to build-aux # - sed_replace_include_guard_prefix # sed expression for resolving ${gl_include_guard_prefix} # - modules the list of modules. # - referenceable_modules the list of modules which may be referenced as dependencies. # - verifier one of func_verify_module, func_verify_nontests_module, # func_verify_tests_module. It selects the subset of # $modules to consider. # - toplevel true or false. 'false' means a subordinate use of # gnulib-tool. # - disable_libtool true or false. It tells whether to disable libtool # handling even if it has been specified through the # command line options. # - disable_gettext true or false. It tells whether to disable AM_GNU_GETTEXT # invocations. func_emit_autoconf_snippets () { referenceable_modules="$2" verifier="$3" toplevel="$4" disable_libtool="$5" disable_gettext="$6" if test "$cond_dependencies" = true; then for m in $referenceable_modules; do echo $m; done | LC_ALL=C sort -u > "$tmp"/modules # Emit the autoconf code for the unconditional modules. for module in $1; do eval $verifier if test -n "$module"; then if func_cond_module_p "$module"; then : else func_emit_autoconf_snippet " " fi fi done # Initialize the shell variables indicating that the modules are enabled. for module in $1; do eval $verifier if test -n "$module"; then if func_cond_module_p "$module"; then func_module_shellvar_name "$module" echo " $shellvar=false" fi fi done # Emit the autoconf code for the conditional modules, each in a separate # function. This makes it possible to support cycles among conditional # modules. for module in $1; do eval $verifier if test -n "$module"; then if func_cond_module_p "$module"; then func_module_shellfunc_name "$module" func_module_shellvar_name "$module" echo " $shellfunc ()" echo ' {' echo " if ! \$$shellvar; then" func_emit_autoconf_snippet " " echo " $shellvar=true" deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` # Intersect $deps with the modules list $1. deps=`for m in $deps; do echo $m; done | LC_ALL=C sort -u | LC_ALL=C join - "$tmp"/modules` for dep in $deps; do if func_cond_module_p "$dep"; then func_module_shellfunc_name "$dep" func_cond_module_condition "$module" "$dep" if test "$condition" != true; then echo " if $condition; then" echo " $shellfunc" echo ' fi' else echo " $shellfunc" fi else # The autoconf code for $dep has already been emitted above and # therefore is already executed when this function is run. : fi done echo ' fi' echo ' }' fi fi done # Emit the dependencies from the unconditional to the conditional modules. for module in $1; do eval $verifier if test -n "$module"; then if func_cond_module_p "$module"; then : else deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` # Intersect $deps with the modules list $1. deps=`for m in $deps; do echo $m; done | LC_ALL=C sort -u | LC_ALL=C join - "$tmp"/modules` for dep in $deps; do if func_cond_module_p "$dep"; then func_module_shellfunc_name "$dep" func_cond_module_condition "$module" "$dep" if test "$condition" != true; then echo " if $condition; then" echo " $shellfunc" echo ' fi' else echo " $shellfunc" fi else # The autoconf code for $dep has already been emitted above and # therefore is already executed when this code is run. : fi done fi fi done # Define the Automake conditionals. echo " m4_pattern_allow([^${macro_prefix}_GNULIB_ENABLED_])" for module in $1; do eval $verifier if test -n "$module"; then if func_cond_module_p "$module"; then func_module_conditional_name "$module" func_module_shellvar_name "$module" echo " AM_CONDITIONAL([$conditional], [\$$shellvar])" fi fi done else # Ignore the conditions, and enable all modules unconditionally. for module in $1; do eval $verifier if test -n "$module"; then func_emit_autoconf_snippet " " fi done fi } # func_emit_pre_early_macros require indentation modules # The require parameter can be ':' (AC_REQUIRE) or 'false' (direct call). func_emit_pre_early_macros () { echo echo "${2}# Pre-early section." if $1; then _pre_early_snippet="echo \"${2}AC_REQUIRE([\$_pre_early_macro])\"" else _pre_early_snippet="echo \"${2}\$_pre_early_macro\"" fi # We need to call gl_USE_SYSTEM_EXTENSIONS before gl_PROG_AR_RANLIB. Doing # AC_REQUIRE in configure-ac.early is not early enough. _pre_early_macro="gl_USE_SYSTEM_EXTENSIONS" case "${nl}${3}${nl}" in *${nl}extensions${nl}*) eval "$_pre_early_snippet" ;; esac _pre_early_macro="gl_PROG_AR_RANLIB" eval "$_pre_early_snippet" echo } # func_reconstruct_cached_dir # callback for func_reconstruct_cached_local_gnulib_path # Input: # - destdir from --dir # Output: # - local_gnulib_path restored '--local-dir' path from cache func_reconstruct_cached_dir () { cached_dir=$1 if test -n "$cached_dir"; then case "$destdir" in /*) func_path_append local_gnulib_path "$destdir/$cached_dir" ;; *) case "$cached_dir" in /*) func_path_append local_gnulib_path "$destdir/$cached_dir" ;; *) func_relconcat "$destdir" "$cached_dir" func_path_append local_gnulib_path "$relconcat" ;; esac ;; esac fi } # func_reconstruct_cached_local_gnulib_path # reconstruct local_gnulib_path from cached_local_gnulib_path to be set # relatively to $destdir again. # Input: # - cached_local_gnulib_path local_gnulib_path stored within gnulib-cache.m4 # - destdir from --dir # Output: # - local_gnulib_path restored '--local-dir' path from cache func_reconstruct_cached_local_gnulib_path () { func_path_foreach "$cached_local_gnulib_path" func_reconstruct_cached_dir %dir% } # func_import modules # Uses also the variables # - mode import or add-import or remove-import or update # - destdir target directory # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - verbose integer, default 0, inc/decremented by --verbose/--quiet # - libname library name # - supplied_libname true if --lib was given, blank otherwise # - sourcebase directory relative to destdir where to place source code # - m4base directory relative to destdir where to place *.m4 macros # - pobase directory relative to destdir where to place *.po files # - docbase directory relative to destdir where to place doc files # - testsbase directory relative to destdir where to place unit test code # - auxdir directory relative to destdir where to place build aux files # - inctests true if --with-tests was given, false otherwise # - incobsolete true if --with-obsolete was given, blank otherwise # - inc_cxx_tests true if --with-c++-tests was given, blank otherwise # - inc_longrunning_tests true if --with-longrunning-tests was given, blank # otherwise # - inc_privileged_tests true if --with-privileged-tests was given, blank # otherwise # - inc_unportable_tests true if --with-unportable-tests was given, blank # otherwise # - inc_all_tests true if --with-all-tests was given, blank otherwise # - avoidlist list of modules to avoid, from --avoid # - cond_dependencies true if --conditional-dependencies was given, false if # --no-conditional-dependencies was given, blank otherwise # - lgpl yes or a number if library's license shall be LGPL, # blank otherwise # - makefile_name from --makefile-name # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise # - guessed_libtool true if the configure.ac file uses libtool, false otherwise # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use # - po_domain prefix of i18n domain to use (without -gnulib suffix) # - witness_c_macro from --witness-c-macro # - vc_files true if --vc-files was given, false if --no-vc-files was # given, blank otherwise # - autoconf_minversion minimum supported autoconf version # - doit : if actions shall be executed, false if only to be printed # - copymode copy mode for files in general # - lcopymode copy mode for files from local_gnulib_path func_import () { # Get the cached settings. # In 'import' mode, we read them only for the purpose of knowing the old # installed file list, and don't use them as defaults. cached_local_gnulib_path= cached_specified_modules= cached_incobsolete= cached_inc_cxx_tests= cached_inc_longrunning_tests= cached_inc_privileged_tests= cached_inc_unportable_tests= cached_inc_all_tests= cached_avoidlist= cached_sourcebase= cached_m4base= cached_pobase= cached_docbase= cached_testsbase= cached_inctests= cached_libname= cached_lgpl= cached_makefile_name= cached_cond_dependencies= cached_libtool= cached_macro_prefix= cached_po_domain= cached_witness_c_macro= cached_vc_files= cached_files= if test -f "$destdir"/$m4base/gnulib-cache.m4; then cached_libtool=false my_sed_traces=' s,#.*$,, s,^dnl .*$,, s, dnl .*$,, /gl_LOCAL_DIR(/ { s,^.*gl_LOCAL_DIR([[ ]*\([^]"$`\\)]*\).*$,cached_local_gnulib_path="\1",p } /gl_MODULES(/ { ta :a s/)/)/ tb N ba :b s,^.*gl_MODULES([[ ]*\([^]"$`\\)]*\).*$,cached_specified_modules="\1",p } /gl_WITH_OBSOLETE/ { s,^.*$,cached_incobsolete=true,p } /gl_WITH_CXX_TESTS/ { s,^.*$,cached_inc_cxx_tests=true,p } /gl_WITH_LONGRUNNING_TESTS/ { s,^.*$,cached_inc_longrunning_tests=true,p } /gl_WITH_PRIVILEGED_TESTS/ { s,^.*$,cached_inc_privileged_tests=true,p } /gl_WITH_UNPORTABLE_TESTS/ { s,^.*$,cached_inc_unportable_tests=true,p } /gl_WITH_ALL_TESTS/ { s,^.*$,cached_inc_all_tests=true,p } /gl_AVOID(/ { s,^.*gl_AVOID([[ ]*\([^]"$`\\)]*\).*$,cached_avoidlist="\1",p } /gl_SOURCE_BASE(/ { s,^.*gl_SOURCE_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_sourcebase="\1",p } /gl_M4_BASE(/ { s,^.*gl_M4_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_m4base="\1",p } /gl_PO_BASE(/ { s,^.*gl_PO_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_pobase="\1",p } /gl_DOC_BASE(/ { s,^.*gl_DOC_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_docbase="\1",p } /gl_TESTS_BASE(/ { s,^.*gl_TESTS_BASE([[ ]*\([^]"$`\\)]*\).*$,cached_testsbase="\1",p } /gl_WITH_TESTS/ { s,^.*$,cached_inctests=true,p } /gl_LIB(/ { s,^.*gl_LIB([[ ]*\([^]"$`\\)]*\).*$,cached_libname="\1",p } /gl_LGPL(/ { s,^.*gl_LGPL([[ ]*\([^]"$`\\)]*\).*$,cached_lgpl="\1",p } /gl_LGPL/ { s,^.*$,cached_lgpl=yes,p } /gl_MAKEFILE_NAME(/ { s,^.*gl_MAKEFILE_NAME([[ ]*\([^]"$`\\)]*\).*$,cached_makefile_name="\1",p } /gl_CONDITIONAL_DEPENDENCIES/ { s,^.*$,cached_cond_dependencies=true,p } /gl_LIBTOOL/ { s,^.*$,cached_libtool=true,p } /gl_MACRO_PREFIX(/ { s,^.*gl_MACRO_PREFIX([[ ]*\([^]"$`\\)]*\).*$,cached_macro_prefix="\1",p } /gl_PO_DOMAIN(/ { s,^.*gl_PO_DOMAIN([[ ]*\([^]"$`\\)]*\).*$,cached_po_domain="\1",p } /gl_WITNESS_C_MACRO(/ { s,^.*gl_WITNESS_C_MACRO([[ ]*\([^]"$`\\)]*\).*$,cached_witness_c_macro="\1",p } /gl_VC_FILES(/ { s,^.*gl_VC_FILES([[ ]*\([^]"$`\\)]*\).*$,cached_vc_files="\1",p }' eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4` if test -f "$destdir"/$m4base/gnulib-comp.m4; then my_sed_traces=' s,#.*$,, s,^dnl .*$,, s, dnl .*$,, /AC_DEFUN(\['"${cached_macro_prefix}"'_FILE_LIST\], \[/ { s,^.*$,cached_files=",p n ta :a s,^\]).*$,", tb s,["$`\\],,g p n ba :b p }' eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-comp.m4` fi fi if test "$mode" = import; then # In 'import' mode, the new set of specified modules overrides the cached # set of modules. Ignore the cached settings. specified_modules="$1" else # Merge the cached settings with the specified ones. # The m4base must be the same as expected from the pathname. if test -n "$cached_m4base" && test "$cached_m4base" != "$m4base"; then func_fatal_error "$m4base/gnulib-cache.m4 is expected to contain gl_M4_BASE([$m4base])" fi # The local_gnulib_path defaults to the cached one. Recall that the cached one # is relative to $destdir, whereas the one we use is relative to . or absolute. if test -z "$local_gnulib_path"; then func_reconstruct_cached_local_gnulib_path fi case $mode in add-import) # Append the cached and the specified module names. So that # "gnulib-tool --add-import foo" means to add the module foo. specified_modules="$cached_specified_modules $1" ;; remove-import) # Take the cached module names, minus the specified module names. specified_modules= if $have_associative; then # Use an associative array, for O(N) worst-case run time. declare -A to_remove for m in $1; do eval 'to_remove[$m]=yes' done for module in $cached_specified_modules; do if eval 'test -z "${to_remove[$module]}"'; then func_append specified_modules "$module " fi done else # This loop has O(N**2) worst-case run time. for module in $cached_specified_modules; do to_remove= for m in $1; do if test "$m" = "$module"; then to_remove=yes break fi done if test -z "$to_remove"; then func_append specified_modules "$module " fi done fi ;; update) # Take the cached module names. There are no specified module names. specified_modules="$cached_specified_modules" ;; esac # Included obsolete modules among the dependencies if specified either way. if test -z "$incobsolete"; then incobsolete="$cached_incobsolete" fi # Included special kinds of tests modules among the dependencies if specified # either way. if test -z "$inc_cxx_tests"; then inc_cxx_tests="$cached_inc_cxx_tests" fi if test -z "$inc_longrunning_tests"; then inc_longrunning_tests="$cached_inc_longrunning_tests" fi if test -z "$inc_privileged_tests"; then inc_privileged_tests="$cached_inc_privileged_tests" fi if test -z "$inc_unportable_tests"; then inc_unportable_tests="$cached_inc_unportable_tests" fi if test -z "$inc_all_tests"; then inc_all_tests="$cached_inc_all_tests" fi # Append the cached and the specified avoidlist. This is probably better # than dropping the cached one when --avoid is specified at least once. avoidlist=`for m in $cached_avoidlist $avoidlist; do echo $m; done | LC_ALL=C sort -u` avoidlist=`echo $avoidlist` # The sourcebase defaults to the cached one. if test -z "$sourcebase"; then sourcebase="$cached_sourcebase" if test -z "$sourcebase"; then func_fatal_error "missing --source-base option" fi fi # The pobase defaults to the cached one. if test -z "$pobase"; then pobase="$cached_pobase" fi # The docbase defaults to the cached one. if test -z "$docbase"; then docbase="$cached_docbase" if test -z "$docbase"; then func_fatal_error "missing --doc-base option. --doc-base has been introduced on 2006-07-11; if your last invocation of 'gnulib-tool --import' is before that date, you need to run 'gnulib-tool --import' once, with a --doc-base option." fi fi # The testsbase defaults to the cached one. if test -z "$testsbase"; then testsbase="$cached_testsbase" if test -z "$testsbase"; then func_fatal_error "missing --tests-base option" fi fi # Require the tests if specified either way. if ! $inctests; then inctests="$cached_inctests" if test -z "$inctests"; then inctests=false fi fi # The libname defaults to the cached one. if test -z "$supplied_libname"; then libname="$cached_libname" if test -z "$libname"; then func_fatal_error "missing --lib option" fi fi # Require LGPL if specified either way. if test -z "$lgpl"; then lgpl="$cached_lgpl" fi # The makefile_name defaults to the cached one. if test -z "$makefile_name"; then makefile_name="$cached_makefile_name" fi # Use conditional dependencies if specified either way. if test -z "$cond_dependencies"; then cond_dependencies="$cached_cond_dependencies" fi # Use libtool if specified either way, or if guessed. if test -z "$libtool"; then if test -n "$cached_m4base"; then libtool="$cached_libtool" else libtool="$guessed_libtool" fi fi # The macro_prefix defaults to the cached one. if test -z "$macro_prefix"; then macro_prefix="$cached_macro_prefix" if test -z "$macro_prefix"; then func_fatal_error "missing --macro-prefix option" fi fi # The po_domain defaults to the cached one. if test -z "$po_domain"; then po_domain="$cached_po_domain" fi # The witness_c_macro defaults to the cached one. if test -z "$witness_c_macro"; then witness_c_macro="$cached_witness_c_macro" fi # The vc_files defaults to the cached one. if test -z "$vc_files"; then vc_files="$cached_vc_files" fi # Ensure constraints. if test "$cond_dependencies" = true && $inctests; then echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2 func_exit 1 fi fi # --without-*-tests options are not supported here. excl_cxx_tests= excl_longrunning_tests= excl_privileged_tests= excl_unportable_tests= # Canonicalize the list of specified modules. specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u` # Include all kinds of tests modules if --with-all-tests was specified. inc_all_direct_tests="$inc_all_tests" inc_all_indirect_tests="$inc_all_tests" # Determine final module list. modules="$specified_modules" func_modules_transitive_closure if test $verbose -ge 0; then func_show_module_list fi final_modules="$modules" # Determine main module list and tests-related module list separately. func_modules_transitive_closure_separately # Determine whether a $testsbase/libtests.a is needed. func_determine_use_libtests # Add the dummy module to the main module list or to the tests-related module # list if needed. func_modules_add_dummy_separately # If --lgpl, verify that the licenses of modules are compatible. if test -n "$lgpl"; then license_incompatibilities= for module in $main_modules; do license=`func_get_license $module` case $license in 'GPLv2+ build tool' | 'GPLed build tool') ;; 'public domain' | 'unlimited' | 'unmodifiable license text') ;; *) case "$lgpl" in yes | 3) case $license in LGPLv2+ | 'LGPLv3+ or GPLv2+' | LGPLv3+ | LGPL) ;; *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; 3orGPLv2) case $license in LGPLv2+ | 'LGPLv3+ or GPLv2+') ;; *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; 2) case $license in LGPLv2+) ;; *) func_append license_incompatibilities "$module $license$nl" ;; esac ;; *) func_fatal_error "invalid value lgpl=$lgpl" ;; esac ;; esac done if test -n "$license_incompatibilities"; then # Format the license incompatibilities as a table. sed_expand_column1_width50_indent17='s,^\([^ ]*\) ,\1 , s,^\(.................................................[^ ]*\) *, \1 ,' license_incompatibilities=`echo "$license_incompatibilities" | sed -e "$sed_expand_column1_width50_indent17"` func_fatal_error "incompatible license on modules:$nl$license_incompatibilities" fi fi # Show banner notice of every module. modules="$main_modules" func_modules_notice # Determine script to apply to imported library files. sed_transform_lib_file= for module in $main_modules; do if test $module = config-h; then # Assume config.h exists, and that -DHAVE_CONFIG_H is omitted. sed_transform_lib_file=$sed_transform_lib_file' s/^#ifdef[ ]*HAVE_CONFIG_H[ ]*$/#if 1/ ' break fi done sed_transform_main_lib_file="$sed_transform_lib_file" # Determine script to apply to auxiliary files that go into $auxdir/. sed_transform_build_aux_file= # Determine script to apply to library files that go into $testsbase/. sed_transform_testsrelated_lib_file="$sed_transform_lib_file" # Determine the final file lists. func_modules_to_filelist_separately test -n "$files" \ || func_fatal_error "refusing to do nothing" # Add m4/gnulib-tool.m4 to the file list. It is not part of any module. new_files="$files m4/gnulib-tool.m4" old_files="$cached_files" if test -f "$destdir"/$m4base/gnulib-tool.m4; then func_append old_files " m4/gnulib-tool.m4" fi rewritten='%REWRITTEN%' sed_rewrite_old_files="\ s,^build-aux/,$rewritten$auxdir/, s,^doc/,$rewritten$cached_docbase/, s,^lib/,$rewritten$cached_sourcebase/, s,^m4/,$rewritten$cached_m4base/, s,^tests/,$rewritten$cached_testsbase/, s,^tests=lib/,$rewritten$cached_testsbase/, s,^top/,$rewritten, s,^$rewritten,," sed_rewrite_new_files="\ s,^build-aux/,$rewritten$auxdir/, s,^doc/,$rewritten$docbase/, s,^lib/,$rewritten$sourcebase/, s,^m4/,$rewritten$m4base/, s,^tests/,$rewritten$testsbase/, s,^tests=lib/,$rewritten$testsbase/, s,^top/,$rewritten, s,^$rewritten,," # Determine whether to put anything into $testsbase. testsfiles=`echo "$files" | sed -n -e 's,^tests/,,p' -e 's,^tests=lib/,,p'` if test -n "$testsfiles"; then gentests=true else gentests=false fi # Create directories. { echo "$sourcebase" echo "$m4base" if test -n "$pobase"; then echo "$pobase" fi docfiles=`echo "$files" | sed -n -e 's,^doc/,,p'` if test -n "$docfiles"; then echo "$docbase" fi if $gentests; then echo "$testsbase" fi echo "$auxdir" for f in $files; do echo $f; done \ | sed -e "$sed_rewrite_new_files" \ | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \ | LC_ALL=C sort -u } > "$tmp"/dirs { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/dirs while read d; do if test ! -d "$destdir/$d"; then if $doit; then echo "Creating directory $destdir/$d" mkdir -p "$destdir/$d" || func_fatal_error "failed" else echo "Create directory $destdir/$d" fi fi done exec 0<&5 5<&- } # Copy files or make symbolic links or hard links. Remove obsolete files. added_files='' removed_files='' delimiter=' ' # Construct a table with 2 columns: rewritten-file-name original-file-name, # representing the files according to the last gnulib-tool invocation. for f in $old_files; do echo $f; done \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_old_files" \ | LC_ALL=C sort \ > "$tmp"/old-files # Construct a table with 2 columns: rewritten-file-name original-file-name, # representing the files after this gnulib-tool invocation. for f in $new_files; do echo $f; done \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" \ | LC_ALL=C sort \ > "$tmp"/new-files # First the files that are in old-files, but not in new-files: sed_take_first_column='s,'"$delimiter"'.*,,' for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_first_column"`; do # Remove the file. Do nothing if the user already removed it. if test -f "$destdir/$g" || test -h "$destdir/$g"; then if $doit; then echo "Removing file $g (backup in ${g}~)" mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed" else echo "Remove file $g (backup in ${g}~)" fi func_append removed_files "$g$nl" fi done # func_add_or_update handles a file that ought to be present afterwards. # Uses parameters # - f the original file name # - g the rewritten file name # - already_present nonempty if the file should already exist, empty # otherwise func_add_or_update () { of="$f" case "$f" in tests=lib/*) f=`echo "$f" | sed -e 's,^tests=lib/,lib/,'` ;; esac func_dest_tmpfilename "$g" func_lookup_file "$f" cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed" func_ensure_writable "$tmpfile" case "$f" in *.class | *.mo ) # Don't process binary files with sed. ;; *) if test -n "$sed_transform_main_lib_file"; then case "$of" in lib/*) sed -e "$sed_transform_main_lib_file" \ < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed" ;; esac fi if test -n "$sed_transform_build_aux_file"; then case "$of" in build-aux/*) sed -e "$sed_transform_build_aux_file" \ < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed" ;; esac fi if test -n "$sed_transform_testsrelated_lib_file"; then case "$of" in tests=lib/*) sed -e "$sed_transform_testsrelated_lib_file" \ < "$lookedup_file" > "$tmpfile" || func_fatal_error "failed" ;; esac fi ;; esac if test -f "$destdir/$g"; then # The file already exists. func_update_file else # Install the file. # Don't protest if the file should be there but isn't: it happens # frequently that developers don't put autogenerated files under version control. func_add_file func_append added_files "$g$nl" fi rm -f "$tmpfile" } # Then the files that are in new-files, but not in old-files: sed_take_last_column='s,^.*'"$delimiter"',,' already_present= LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files \ | sed -e "$sed_take_last_column" \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/added-files { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/added-files while read g f; do func_add_or_update done exec 0<&5 5<&- } # Then the files that are in new-files and in old-files: already_present=true LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files \ | sed -e "$sed_take_last_column" \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_new_files" > "$tmp"/kept-files { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/kept-files while read g f; do func_add_or_update done exec 0<&5 5<&- } # Command-line invocation printed in a comment in generated gnulib-cache.m4. actioncmd="# gnulib-tool --import" # Local helper. func_append_local_dir () { func_append "$1" " --local-dir=$2" } func_path_foreach "$local_gnulib_path" func_append_local_dir actioncmd %dir% # Break the action command log into multiple lines. # Emacs puts some gnulib-tool log lines in its source repository, and # git send-email rejects patch lines longer than 998 characters. # Also, config.status uses awk, and the HP-UX 11.00 awk fails if a # line has length >= 3071; similarly, the IRIX 6.5 awk fails if a # line has length >= 3072. func_append_actionarg () { func_append actioncmd " \\$nl# $1" } func_append_actionarg "--lib=$libname" func_append_actionarg "--source-base=$sourcebase" func_append_actionarg "--m4-base=$m4base" if test -n "$pobase"; then func_append_actionarg "--po-base=$pobase" fi func_append_actionarg "--doc-base=$docbase" func_append_actionarg "--tests-base=$testsbase" func_append_actionarg "--aux-dir=$auxdir" if $inctests; then func_append_actionarg "--with-tests" fi if test -n "$incobsolete"; then func_append_actionarg "--with-obsolete" fi if test -n "$inc_cxx_tests"; then func_append_actionarg "--with-c++-tests" fi if test -n "$inc_longrunning_tests"; then func_append_actionarg "--with-longrunning-tests" fi if test -n "$inc_privileged_tests"; then func_append_actionarg "--with-privileged-tests" fi if test -n "$inc_unportable_tests"; then func_append_actionarg "--with-unportable-tests" fi if test -n "$inc_all_tests"; then func_append_actionarg "--with-all-tests" fi if test -n "$lgpl"; then if test "$lgpl" = yes; then func_append_actionarg "--lgpl" else func_append_actionarg "--lgpl=$lgpl" fi fi if $gnu_make; then func_append_actionarg "--gnu-make" fi if test -n "$makefile_name"; then func_append_actionarg "--makefile-name=$makefile_name" fi if test "$cond_dependencies" = true; then func_append_actionarg "--conditional-dependencies" else func_append_actionarg "--no-conditional-dependencies" fi if test "$libtool" = true; then func_append_actionarg "--libtool" else func_append_actionarg "--no-libtool" fi func_append_actionarg "--macro-prefix=$macro_prefix" if test -n "$po_domain"; then func_append_actionarg "--po-domain=$po_domain" fi if test -n "$witness_c_macro"; then func_append_actionarg "--witness-c-macro=$witness_c_macro" fi if test -n "$vc_files"; then if test "$vc_files" = true; then func_append_actionarg "--vc-files" else func_append_actionarg "--no-vc-files" fi fi for module in $avoidlist; do func_append_actionarg "--avoid=$module" done for module in $specified_modules; do func_append_actionarg "$module" done # Determine include_guard_prefix and module_indicator_prefix. func_compute_include_guard_prefix # Default the makefile name to Makefile.am. if test -n "$makefile_name"; then makefile_am=$makefile_name else makefile_am=Makefile.am fi # Create normal Makefile.ams. for_test=false # Setup list of Makefile.am edits that are to be performed afterwards. # Some of these edits apply to files that we will generate; others are # under the responsibility of the developer. makefile_am_edits=0 # func_note_Makefile_am_edit dir var value [dotfirst] # remembers that ${dir}Makefile.am needs to be edited to that ${var} mentions # ${value}. # If ${dotfirst} is non-empty, this mention needs to be present after '.'. # This is a special hack for the SUBDIRS variable, cf. # <https://www.gnu.org/software/automake/manual/html_node/Subdirectories.html>. func_note_Makefile_am_edit () { makefile_am_edits=`expr $makefile_am_edits + 1` eval makefile_am_edit${makefile_am_edits}_dir=\"\$1\" eval makefile_am_edit${makefile_am_edits}_var=\"\$2\" eval makefile_am_edit${makefile_am_edits}_val=\"\$3\" eval makefile_am_edit${makefile_am_edits}_dotfirst=\"\$4\" } if test "$makefile_am" = Makefile.am; then sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` sourcebase_base=`basename "$sourcebase"` func_note_Makefile_am_edit "$sourcebase_dir" SUBDIRS "$sourcebase_base" fi if test -n "$pobase"; then pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'` pobase_base=`basename "$pobase"` func_note_Makefile_am_edit "$pobase_dir" SUBDIRS "$pobase_base" fi if $inctests; then if test "$makefile_am" = Makefile.am; then testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` testsbase_base=`basename "$testsbase"` func_note_Makefile_am_edit "$testsbase_dir" SUBDIRS "$testsbase_base" true fi fi func_note_Makefile_am_edit "" ACLOCAL_AMFLAGS "-I ${m4base}" { # Find the first parent directory of $m4base that contains or will contain # a Makefile.am. sed_last='s,^.*/\([^/][^/]*\)//*$,\1/, s,//*$,/,' sed_butlast='s,[^/][^/]*//*$,,' dir1="${m4base}/"; dir2="" while test -n "$dir1" \ && ! { test -f "${destdir}/${dir1}Makefile.am" \ || test "${dir1}Makefile.am" = "$sourcebase/$makefile_am" \ || test "./${dir1}Makefile.am" = "$sourcebase/$makefile_am" \ || { $gentests \ && { test "${dir1}Makefile.am" = "$testsbase/$makefile_am" \ || test "./${dir1}Makefile.am" = "$testsbase/$makefile_am"; }; }; }; do dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2" dir1=`echo "$dir1" | sed -e "$sed_butlast"` done func_note_Makefile_am_edit "$dir1" EXTRA_DIST "${dir2}gnulib-cache.m4" } # Create library makefile. func_dest_tmpfilename $sourcebase/$makefile_am destfile="$sourcebase/$makefile_am" modules="$main_modules" func_emit_lib_Makefile_am > "$tmpfile" if test -f "$destdir"/$sourcebase/$makefile_am; then if cmp -s "$destdir"/$sourcebase/$makefile_am "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)" mv -f "$destdir"/$sourcebase/$makefile_am "$destdir"/$sourcebase/$makefile_am~ mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am else echo "Update $sourcebase/$makefile_am (backup in $sourcebase/$makefile_am~)" rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $sourcebase/$makefile_am" mv -f "$tmpfile" "$destdir"/$sourcebase/$makefile_am else echo "Create $sourcebase/$makefile_am" rm -f "$tmpfile" fi func_append added_files "$sourcebase/$makefile_am$nl" fi # Create po/ directory. if test -n "$pobase"; then # Create po makefile and auxiliary files. for file in Makefile.in.in remove-potcdate.sin; do func_dest_tmpfilename $pobase/$file func_lookup_file build-aux/po/$file cat "$lookedup_file" > "$tmpfile" if test -f "$destdir"/$pobase/$file; then if cmp -s "$destdir"/$pobase/$file "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $pobase/$file (backup in $pobase/$file~)" mv -f "$destdir"/$pobase/$file "$destdir"/$pobase/$file~ mv -f "$tmpfile" "$destdir"/$pobase/$file else echo "Update $pobase/$file (backup in $pobase/$file~)" rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $pobase/$file" mv -f "$tmpfile" "$destdir"/$pobase/$file else echo "Create $pobase/$file" rm -f "$tmpfile" fi func_append added_files "$pobase/$file$nl" fi done # Create po makefile parameterization, part 1. func_dest_tmpfilename $pobase/Makevars func_emit_po_Makevars > "$tmpfile" if test -f "$destdir"/$pobase/Makevars; then if cmp -s "$destdir"/$pobase/Makevars "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $pobase/Makevars (backup in $pobase/Makevars~)" mv -f "$destdir"/$pobase/Makevars "$destdir"/$pobase/Makevars~ mv -f "$tmpfile" "$destdir"/$pobase/Makevars else echo "Update $pobase/Makevars (backup in $pobase/Makevars~)" rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $pobase/Makevars" mv -f "$tmpfile" "$destdir"/$pobase/Makevars else echo "Create $pobase/Makevars" rm -f "$tmpfile" fi func_append added_files "$pobase/Makevars$nl" fi # Create po makefile parameterization, part 2. func_dest_tmpfilename $pobase/POTFILES.in func_emit_po_POTFILES_in > "$tmpfile" if test -f "$destdir"/$pobase/POTFILES.in; then if cmp -s "$destdir"/$pobase/POTFILES.in "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $pobase/POTFILES.in (backup in $pobase/POTFILES.in~)" mv -f "$destdir"/$pobase/POTFILES.in "$destdir"/$pobase/POTFILES.in~ mv -f "$tmpfile" "$destdir"/$pobase/POTFILES.in else echo "Update $pobase/POTFILES.in (backup in $pobase/POTFILES.in~)" rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $pobase/POTFILES.in" mv -f "$tmpfile" "$destdir"/$pobase/POTFILES.in else echo "Create $pobase/POTFILES.in" rm -f "$tmpfile" fi func_append added_files "$pobase/POTFILES.in$nl" fi # Fetch PO files. TP_URL="https://translationproject.org/latest/" if $doit; then echo "Fetching gnulib PO files from $TP_URL" (cd "$destdir"/$pobase \ && wget --no-verbose --mirror --level=1 -nd -A.po -P . "${TP_URL}gnulib/" ) else echo "Fetch gnulib PO files from $TP_URL" fi # Create po/LINGUAS. if $doit; then func_dest_tmpfilename $pobase/LINGUAS (cd "$destdir"/$pobase \ && { echo '# Set of available languages.' LC_ALL=C ls -1 *.po | sed -e 's,\.po$,,' } ) > "$tmpfile" if test -f "$destdir"/$pobase/LINGUAS; then if cmp -s "$destdir"/$pobase/LINGUAS "$tmpfile"; then rm -f "$tmpfile" else echo "Updating $pobase/LINGUAS (backup in $pobase/LINGUAS~)" mv -f "$destdir"/$pobase/LINGUAS "$destdir"/$pobase/LINGUAS~ mv -f "$tmpfile" "$destdir"/$pobase/LINGUAS fi else echo "Creating $pobase/LINGUAS" mv -f "$tmpfile" "$destdir"/$pobase/LINGUAS func_append added_files "$pobase/LINGUAS$nl" fi else if test -f "$destdir"/$pobase/LINGUAS; then echo "Update $pobase/LINGUAS (backup in $pobase/LINGUAS~)" else echo "Create $pobase/LINGUAS" fi fi fi # func_count_relative_local_gnulib_path # gl_LOCAL_DIR requires local_gnulib_path to be set relatively to destdir # Input: # - local_gnulib_path from --local-dir # - destdir from --dir # Output: # - relative_local_dir path to be stored into gl_LOCAL_DIR func_count_relative_local_gnulib_path () { relative_local_gnulib_path= save_IFS="$IFS" IFS="$PATH_SEPARATOR" for local_dir in $local_gnulib_path do IFS="$save_IFS" # Store the local_dir relative to destdir. case "$local_dir" in "" | /*) relative_local_dir="$local_dir" ;; * ) case "$destdir" in /*) relative_local_dir="$local_dir" ;; *) # destdir, local_dir are both relative. func_relativize "$destdir" "$local_dir" relative_local_dir="$reldir" ;; esac ;; esac func_path_append relative_local_gnulib_path "$relative_local_dir" done IFS="$save_IFS" } # Create m4/gnulib-cache.m4. func_dest_tmpfilename $m4base/gnulib-cache.m4 ( func_emit_copyright_notice echo "#" echo "# This file represents the specification of how gnulib-tool is used." echo "# It acts as a cache: It is written and read by gnulib-tool." echo "# In projects that use version control, this file is meant to be put under" echo "# version control, like the configure.ac and various Makefile.am files." echo echo echo "# Specification in the form of a command-line invocation:" printf '%s\n' "$actioncmd" echo echo "# Specification in the form of a few gnulib-tool.m4 macro invocations:" func_count_relative_local_gnulib_path echo "gl_LOCAL_DIR([$relative_local_gnulib_path])" echo "gl_MODULES([" echo "$specified_modules" | sed -e 's/^/ /g' echo "])" test -z "$incobsolete" || echo "gl_WITH_OBSOLETE" test -z "$inc_cxx_tests" || echo "gl_WITH_CXX_TESTS" test -z "$inc_longrunning_tests" || echo "gl_WITH_LONGRUNNING_TESTS" test -z "$inc_privileged_tests" || echo "gl_WITH_PRIVILEGED_TESTS" test -z "$inc_unportable_tests" || echo "gl_WITH_UNPORTABLE_TESTS" test -z "$inc_all_tests" || echo "gl_WITH_ALL_TESTS" echo "gl_AVOID([$avoidlist])" echo "gl_SOURCE_BASE([$sourcebase])" echo "gl_M4_BASE([$m4base])" echo "gl_PO_BASE([$pobase])" echo "gl_DOC_BASE([$docbase])" echo "gl_TESTS_BASE([$testsbase])" if $inctests; then echo "gl_WITH_TESTS" fi echo "gl_LIB([$libname])" if test -n "$lgpl"; then if test "$lgpl" = yes; then echo "gl_LGPL" else echo "gl_LGPL([$lgpl])" fi fi echo "gl_MAKEFILE_NAME([$makefile_name])" if test "$cond_dependencies" = true; then echo "gl_CONDITIONAL_DEPENDENCIES" fi if test "$libtool" = true; then echo "gl_LIBTOOL" fi echo "gl_MACRO_PREFIX([$macro_prefix])" echo "gl_PO_DOMAIN([$po_domain])" echo "gl_WITNESS_C_MACRO([$witness_c_macro])" if test -n "$vc_files"; then echo "gl_VC_FILES([$vc_files])" fi ) > "$tmpfile" if test -f "$destdir"/$m4base/gnulib-cache.m4; then if cmp -s "$destdir"/$m4base/gnulib-cache.m4 "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $m4base/gnulib-cache.m4 (backup in $m4base/gnulib-cache.m4~)" mv -f "$destdir"/$m4base/gnulib-cache.m4 "$destdir"/$m4base/gnulib-cache.m4~ mv -f "$tmpfile" "$destdir"/$m4base/gnulib-cache.m4 else echo "Update $m4base/gnulib-cache.m4 (backup in $m4base/gnulib-cache.m4~)" if false; then cat "$tmpfile" echo echo "# gnulib-cache.m4 ends here" fi rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $m4base/gnulib-cache.m4" mv -f "$tmpfile" "$destdir"/$m4base/gnulib-cache.m4 else echo "Create $m4base/gnulib-cache.m4" cat "$tmpfile" rm -f "$tmpfile" fi fi # Create m4/gnulib-comp.m4. func_dest_tmpfilename $m4base/gnulib-comp.m4 ( echo "# DO NOT EDIT! GENERATED AUTOMATICALLY!" func_emit_copyright_notice echo "#" echo "# This file represents the compiled summary of the specification in" echo "# gnulib-cache.m4. It lists the computed macro invocations that need" echo "# to be invoked from configure.ac." echo "# In projects that use version control, this file can be treated like" echo "# other built files." echo echo echo "# This macro should be invoked from $configure_ac, in the section" echo "# \"Checks for programs\", right after AC_PROG_CC, and certainly before" echo "# any checks for libraries, header files, types and library functions." echo "AC_DEFUN([${macro_prefix}_EARLY]," echo "[" echo " m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" echo " m4_pattern_allow([^gl_ES\$])dnl a valid locale name" echo " m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable" echo " m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable" func_emit_pre_early_macros : ' ' "$final_modules" if ! $gnu_make && test -n "$uses_subdirs"; then echo " AC_REQUIRE([AM_PROG_CC_C_O])" fi for module in $final_modules; do func_verify_module if test -n "$module"; then echo "# Code from module $module:" func_get_autoconf_early_snippet "$module" fi done \ | sed -e '/^$/d;' -e 's/^/ /' echo "])" echo echo "# This macro should be invoked from $configure_ac, in the section" echo "# \"Check for header files, types and library functions\"." echo "AC_DEFUN([${macro_prefix}_INIT]," echo "[" if test "$libtool" = true; then echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" echo " gl_cond_libtool=true" else echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" echo " gl_cond_libtool=false" echo " gl_libdeps=" echo " gl_ltlibdeps=" fi if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a /AC_CONFIG_FILES(.*:build-aux\/.*)/{ s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)| ba }' else sed_replace_build_aux="$sed_noop" fi echo " gl_m4_base='$m4base'" func_emit_initmacro_start $macro_prefix false echo " gl_source_base='$sourcebase'" if test -n "$witness_c_macro"; then echo " m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$witness_c_macro])" fi func_emit_autoconf_snippets "$main_modules" "$main_modules" func_verify_module true false true if test -n "$witness_c_macro"; then echo " m4_popdef([gl_MODULE_INDICATOR_CONDITION])" fi echo " # End of code from modules" func_emit_initmacro_end $macro_prefix echo " gltests_libdeps=" echo " gltests_ltlibdeps=" func_emit_initmacro_start ${macro_prefix}tests $gentests echo " gl_source_base='$testsbase'" # Define a tests witness macro that depends on the package. # PACKAGE is defined by AM_INIT_AUTOMAKE, PACKAGE_TARNAME is defined by AC_INIT. # See <https://lists.gnu.org/r/automake/2009-05/msg00145.html>. echo "changequote(,)dnl" echo " ${macro_prefix}tests_WITNESS=IN_\`echo \"\${PACKAGE-\$PACKAGE_TARNAME}\" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'\`_GNULIB_TESTS" echo "changequote([, ])dnl" echo " AC_SUBST([${macro_prefix}tests_WITNESS])" echo " gl_module_indicator_condition=\$${macro_prefix}tests_WITNESS" echo " m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [\$gl_module_indicator_condition])" func_emit_autoconf_snippets "$testsrelated_modules" "$main_modules $testsrelated_modules" func_verify_module true true true echo " m4_popdef([gl_MODULE_INDICATOR_CONDITION])" func_emit_initmacro_end ${macro_prefix}tests # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi if $use_libtests; then echo " LIBTESTS_LIBDEPS=\"\$gltests_libdeps\"" echo " AC_SUBST([LIBTESTS_LIBDEPS])" fi echo "])" func_emit_initmacro_done $macro_prefix $sourcebase func_emit_initmacro_done ${macro_prefix}tests $testsbase echo echo "# This macro records the list of files which have been installed by" echo "# gnulib-tool and may be removed by future gnulib-tool invocations." echo "AC_DEFUN([${macro_prefix}_FILE_LIST], [" echo "$files" | sed -e 's,^, ,' echo "])" ) > "$tmpfile" if test -f "$destdir"/$m4base/gnulib-comp.m4; then if cmp -s "$destdir"/$m4base/gnulib-comp.m4 "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $m4base/gnulib-comp.m4 (backup in $m4base/gnulib-comp.m4~)" mv -f "$destdir"/$m4base/gnulib-comp.m4 "$destdir"/$m4base/gnulib-comp.m4~ mv -f "$tmpfile" "$destdir"/$m4base/gnulib-comp.m4 else echo "Update $m4base/gnulib-comp.m4 (backup in $m4base/gnulib-comp.m4~)" if false; then cat "$tmpfile" echo echo "# gnulib-comp.m4 ends here" fi rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $m4base/gnulib-comp.m4" mv -f "$tmpfile" "$destdir"/$m4base/gnulib-comp.m4 else echo "Create $m4base/gnulib-comp.m4" cat "$tmpfile" rm -f "$tmpfile" fi fi if $gentests; then # Create tests makefile. func_dest_tmpfilename $testsbase/$makefile_am destfile="$testsbase/$makefile_am" modules="$testsrelated_modules" func_emit_tests_Makefile_am "${macro_prefix}tests_WITNESS" > "$tmpfile" if test -f "$destdir"/$testsbase/$makefile_am; then if cmp -s "$destdir"/$testsbase/$makefile_am "$tmpfile"; then rm -f "$tmpfile" else if $doit; then echo "Updating $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)" mv -f "$destdir"/$testsbase/$makefile_am "$destdir"/$testsbase/$makefile_am~ mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am else echo "Update $testsbase/$makefile_am (backup in $testsbase/$makefile_am~)" rm -f "$tmpfile" fi fi else if $doit; then echo "Creating $testsbase/$makefile_am" mv -f "$tmpfile" "$destdir"/$testsbase/$makefile_am else echo "Create $testsbase/$makefile_am" rm -f "$tmpfile" fi func_append added_files "$testsbase/$makefile_am$nl" fi fi if test "$vc_files" != false; then # Update the .cvsignore and .gitignore files. { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,' echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,' # Treat gnulib-comp.m4 like an added file, even if it already existed. echo "$m4base/|A|gnulib-comp.m4" } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/fileset-changes func_update_ignorelist () { ignore="$1" if test "$ignore" = .gitignore; then # In a .gitignore file, "foo" applies to the current directory and all # subdirectories, whereas "/foo" applies to the current directory only. anchor='/' escaped_anchor='\/' doubly_escaped_anchor='\\/' else anchor='' escaped_anchor='' doubly_escaped_anchor='' fi if test -f "$destdir/$dir$ignore"; then if test -n "$dir_added" || test -n "$dir_removed"; then sed -e "s|^$anchor||" < "$destdir/$dir$ignore" | LC_ALL=C sort > "$tmp"/ignore (echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \ | LC_ALL=C join -v 1 - "$tmp"/ignore > "$tmp"/ignore-added echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ > "$tmp"/ignore-removed ) if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then if $doit; then echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~ { sed -e 's,/,\\/,g' -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed if test -n "$anchor"; then sed -e 's,/,\\/,g' -e "s,^,/^${doubly_escaped_anchor}," -e 's,$,$/d,' < "$tmp"/ignore-removed; fi } > "$tmp"/sed-ignore-removed { cat "$destdir/$dir$ignore"~ sed -e "s|^|$anchor|" < "$tmp"/ignore-added } | sed -f "$tmp"/sed-ignore-removed \ > "$destdir/$dir$ignore" else echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" fi fi fi else if test -n "$dir_added"; then if $doit; then echo "Creating $destdir/$dir$ignore" { if test "$ignore" = .cvsignore; then echo ".deps" # Automake generates Makefile rules that create .dirstamp files. echo ".dirstamp" fi echo "$dir_added" | sed -e '/^$/d' -e "s|^|$anchor|" | LC_ALL=C sort -u } > "$destdir/$dir$ignore" else echo "Create $destdir/$dir$ignore" fi fi fi } func_done_dir () { dir="$1" dir_added="$2" dir_removed="$3" if test -d "$destdir/CVS" || test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then func_update_ignorelist .cvsignore fi if test -d "$destdir/.git" || test -f "$destdir/${dir}.gitignore"; then func_update_ignorelist .gitignore fi } last_dir= last_dir_added= last_dir_removed= while read line; do # Why not ''read next_dir op file'' ? Because the dir column can be empty. next_dir=`echo "$line" | sed -e 's,|.*,,'` op=`echo "$line" | sed -e 's,^[^|]*|\([^|]*\)|.*$,\1,'` file=`echo "$line" | sed -e 's,^[^|]*|[^|]*|,,'` if test "$next_dir" != "$last_dir"; then func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" last_dir="$next_dir" last_dir_added= last_dir_removed= fi case $op in A) func_append last_dir_added "$file$nl";; R) func_append last_dir_removed "$file$nl";; esac done func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" exec 0<&5 5<&- } fi echo "Finished." echo echo "You may need to add #include directives for the following .h files." # Intersect $specified_modules and $main_modules # (since $specified_modules is not necessarily of subset of $main_modules # - some may have been skipped through --avoid, and since the elements of # $main_modules but not in $specified_modules can go away without explicit # notice - through changes in the module dependencies). echo "$specified_modules" > "$tmp"/modules1 # a sorted list, one module per line echo "$main_modules" > "$tmp"/modules2 # also a sorted list, one module per line # First the #include <...> directives without #ifs, sorted for convenience, # then the #include "..." directives without #ifs, sorted for convenience, # then the #include directives that are surrounded by #ifs. Not sorted. for module in `LC_ALL=C join "$tmp"/modules1 "$tmp"/modules2`; do include_directive=`func_get_include_directive "$module"` case "$nl$include_directive" in *"$nl#if"*) echo "$include_directive" 1>&5 ;; *) echo "$include_directive" | grep -v 'include "' 1>&6 echo "$include_directive" | grep 'include "' 1>&7 ;; esac done 5> "$tmp"/include-if 6> "$tmp"/include-angles 7> "$tmp"/include-quotes ( LC_ALL=C sort -u "$tmp"/include-angles LC_ALL=C sort -u "$tmp"/include-quotes cat "$tmp"/include-if ) | sed -e '/^$/d' -e 's/^/ /' rm -f "$tmp"/include-angles "$tmp"/include-quotes "$tmp"/include-if for module in $main_modules; do func_get_link_directive "$module" done \ | LC_ALL=C sort -u | sed -e '/^$/d' -e 's/^/ /' > "$tmp"/link if test `wc -l < "$tmp"/link` != 0; then echo echo "You may need to use the following Makefile variables when linking." echo "Use them in <program>_LDADD when linking a program, or" echo "in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library." cat "$tmp"/link fi rm -f "$tmp"/link echo echo "Don't forget to" if test "$makefile_am" = Makefile.am; then echo " - add \"$sourcebase/Makefile\" to AC_CONFIG_FILES in $configure_ac," else echo " - \"include $makefile_name\" from within \"$sourcebase/Makefile.am\"," fi if test -n "$pobase"; then echo " - add \"$pobase/Makefile.in\" to AC_CONFIG_FILES in $configure_ac," fi if $gentests; then if test "$makefile_am" = Makefile.am; then echo " - add \"$testsbase/Makefile\" to AC_CONFIG_FILES in $configure_ac," else echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\"," fi fi edit=0 while test $edit != $makefile_am_edits; do edit=`expr $edit + 1` eval dir=\"\$makefile_am_edit${edit}_dir\" eval var=\"\$makefile_am_edit${edit}_var\" eval val=\"\$makefile_am_edit${edit}_val\" if test -n "$var"; then echo " - mention \"${val}\" in ${var} in ${dir}Makefile.am," fi done if grep '^ *AC_PROG_CC_STDC' "$configure_ac" > /dev/null; then echo " - replace AC_PROG_CC_STDC with AC_PROG_CC in $configure_ac," position_early_after=AC_PROG_CC_STDC else if grep '^ *AC_PROG_CC_C99' "$configure_ac" > /dev/null; then echo " - replace AC_PROG_CC_C99 with AC_PROG_CC in $configure_ac," position_early_after=AC_PROG_CC_C99 else position_early_after=AC_PROG_CC fi fi echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after $position_early_after," echo " - invoke ${macro_prefix}_INIT in $configure_ac." } # func_create_testdir testdir modules # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - auxdir directory relative to destdir where to place build aux files # - inctests true if tests should be included, false otherwise # - incobsolete true if obsolete modules among dependencies should be # included, blank otherwise # - excl_cxx_tests true if C++ interoperability tests should be excluded, # blank otherwise # - excl_longrunning_tests true if long-runnings tests should be excluded, # blank otherwise # - excl_privileged_tests true if tests that require root privileges should be # excluded, blank otherwise # - excl_unportable_tests true if tests that fail on some platforms should be # excluded, blank otherwise # - single_configure true if a single configure file should be generated, # false for a separate configure file for the tests # - avoidlist list of modules to avoid # - cond_dependencies true if --conditional-dependencies was given, false if # --no-conditional-dependencies was given, blank otherwise # - libtool true if --libtool was given, false if --no-libtool was # given, blank otherwise # - copymode copy mode for files in general # - lcopymode copy mode for files from local_gnulib_path func_create_testdir () { testdir="$1" modules="$2" if test -z "$modules"; then # All modules together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. # Except non-recursive-gnulib-prefix-hack, which represents a nonstandard # way of using Automake. # Except timevar, which lacks the required file timevar.def. # Except ftruncate, mountlist, which abort the configuration on mingw. FIXME. # Except lib-ignore, which leads to link errors when Sun C++ is used. FIXME. modules=`func_all_modules` modules=`for m in $modules; do case $m in config-h | non-recursive-gnulib-prefix-hack | timevar | ftruncate | mountlist | lib-ignore) ;; *) echo $m;; esac; done` fi specified_modules="$modules" # Canonicalize the list of specified modules. specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u` # Test modules which invoke AC_CONFIG_FILES cannot be used with # --with-tests --single-configure. Avoid them. if $inctests && $single_configure; then avoidlist="$avoidlist havelib-tests" fi # Unlike in func_import, here we want to include all kinds of tests for the # directly specified modules, but not for dependencies. inc_all_direct_tests=true inc_all_indirect_tests="$inc_all_tests" # Check that the license of every module is consistent with the license of # its dependencies. saved_inctests="$inctests" # When computing transitive closures, don't consider $module to depend on # $module-tests. Need this because tests are implicitly GPL and may depend # on GPL modules - therefore we don't want a warning in this case. inctests=false for requested_module in $specified_modules; do requested_license=`func_get_license "$requested_module"` if test "$requested_license" != GPL; then # Here we use func_modules_transitive_closure, not just # func_get_dependencies, so that we also detect weird situations like # an LGPL module which depends on a GPLed build tool module which depends # on a GPL module. modules="$requested_module" func_modules_transitive_closure for module in $modules; do license=`func_get_license "$module"` case "$license" in 'GPLv2+ build tool' | 'GPLed build tool') ;; 'public domain' | 'unlimited' | 'unmodifiable license text') ;; *) case "$requested_license" in GPLv3+ | GPL) case "$license" in LGPLv2+ | 'LGPLv3+ or GPLv2+' | LGPLv3+ | LGPL | GPLv2+ | GPLv3+ | GPL) ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; GPLv2+) case "$license" in LGPLv2+ | 'LGPLv3+ or GPLv2+' | GPLv2+) ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; LGPLv3+ | LGPL) case "$license" in LGPLv2+ | 'LGPLv3+ or GPLv2+' | LGPLv3+ | LGPL) ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; 'LGPLv3+ or GPLv2+') case "$license" in LGPLv2+ | 'LGPLv3+ or GPLv2+') ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; LGPLv2+) case "$license" in LGPLv2+) ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; esac ;; esac done fi done inctests="$saved_inctests" # Subdirectory names. sourcebase=gllib m4base=glm4 pobase= docbase=gldoc testsbase=gltests macro_prefix=gl po_domain= witness_c_macro= vc_files= # Determine final module list. modules="$specified_modules" func_modules_transitive_closure if test $verbose -ge 0; then func_show_module_list fi final_modules="$modules" if $single_configure; then # Determine main module list and tests-related module list separately. func_modules_transitive_closure_separately fi if $single_configure; then # Determine whether a $testsbase/libtests.a is needed. func_determine_use_libtests fi # Add the dummy module if needed. if $single_configure; then func_modules_add_dummy_separately else func_modules_add_dummy fi # Note: # If $single_configure, we use the module lists $main_modules and # $testsrelated_modules; $modules is merely a temporary variable. # Whereas if ! $single_configure, the module list is $modules. # Show banner notice of every module. if $single_configure; then modules="$main_modules" func_modules_notice else func_modules_notice fi # Determine final file list. if $single_configure; then func_modules_to_filelist_separately else func_modules_to_filelist if test $verbose -ge 0; then echo "File list:" echo "$files" | sed -e 's/^/ /' fi fi # Add files for which the copy in gnulib is newer than the one that # "automake --add-missing --copy" would provide. files="$files build-aux/config.guess" files="$files build-aux/config.sub" files=`for f in $files; do echo $f; done | LC_ALL=C sort -u` rewritten='%REWRITTEN%' sed_rewrite_files="\ s,^build-aux/,$rewritten$auxdir/, s,^doc/,$rewritten$docbase/, s,^lib/,$rewritten$sourcebase/, s,^m4/,$rewritten$m4base/, s,^tests/,$rewritten$testsbase/, s,^tests=lib/,$rewritten$testsbase/, s,^top/,$rewritten, s,^$rewritten,," # Create directories. for f in $files; do echo $f; done \ | sed -e "$sed_rewrite_files" \ | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \ | LC_ALL=C sort -u \ > "$tmp"/dirs { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/dirs while read d; do mkdir -p "$testdir/$d" done exec 0<&5 5<&- } # Copy files or make symbolic links or hard links. delimiter=' ' for f in $files; do echo $f; done \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \ | LC_ALL=C sort \ > "$tmp"/files { # Rearrange file descriptors. Needed because "while ... done < ..." # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. exec 5<&0 < "$tmp"/files while read g f; do case "$f" in tests=lib/*) f=`echo "$f" | sed -e 's,^tests=lib/,lib/,'` ;; esac func_lookup_file "$f" if test -n "$lookedup_tmp"; then cp -p "$lookedup_file" "$testdir/$g" func_ensure_writable "$testdir/$g" else func_should_link if test "$copyaction" = symlink; then func_symlink "$lookedup_file" "$testdir/$g" else if test "$copyaction" = hardlink; then func_hardlink "$lookedup_file" "$testdir/$g" else cp -p "$lookedup_file" "$testdir/$g" func_ensure_writable "$testdir/$g" fi fi fi done exec 0<&5 5<&- } # Determine include_guard_prefix and module_indicator_prefix. func_compute_include_guard_prefix # Create Makefile.ams that are for testing. for_test=true # No special edits are needed. makefile_am_edits=0 # Create $sourcebase/Makefile.am. mkdir -p "$testdir/$sourcebase" destfile="$sourcebase/Makefile.am" if $single_configure; then modules="$main_modules" fi func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am" any_uses_subdirs="$uses_subdirs" # Create $m4base/Makefile.am. mkdir -p "$testdir/$m4base" (echo "## Process this file with automake to produce Makefile.in." echo echo "EXTRA_DIST =" for f in $files; do case "$f" in m4/* ) echo "EXTRA_DIST += "`echo "$f" | sed -e 's,^m4/,,'` ;; esac done ) > "$testdir/$m4base/Makefile.am" subdirs="$sourcebase $m4base" subdirs_with_configure_ac="" if false && test -f "$testdir"/$m4base/gettext.m4; then # Avoid stupid error message from automake: # "AM_GNU_GETTEXT used but `po' not in SUBDIRS" mkdir -p "$testdir/po" (echo "## Process this file with automake to produce Makefile.in." ) > "$testdir/po/Makefile.am" func_append subdirs " po" fi if $inctests; then test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase" if $single_configure; then # Create $testsbase/Makefile.am. destfile="$testsbase/Makefile.am" modules="$testsrelated_modules" func_emit_tests_Makefile_am "${macro_prefix}tests_WITNESS" > "$testdir/$testsbase/Makefile.am" else # Viewed from the $testsbase subdirectory, $auxdir is different. saved_auxdir="$auxdir" auxdir=`echo "$testsbase/" | sed -e 's%[^/][^/]*//*%../%g'`"$auxdir" # Create $testsbase/Makefile.am. use_libtests=false destfile="$testsbase/Makefile.am" func_emit_tests_Makefile_am "" > "$testdir/$testsbase/Makefile.am" any_uses_subdirs="$any_uses_subdirs$uses_subdirs" # Create $testsbase/configure.ac. (echo "# Process this file with autoconf to produce a configure script." echo "AC_INIT([dummy], [0])" echo "AC_CONFIG_AUX_DIR([$auxdir])" echo "AM_INIT_AUTOMAKE" echo echo "AC_CONFIG_HEADERS([config.h])" echo echo "AC_PROG_CC" echo "AC_PROG_INSTALL" echo "AC_PROG_MAKE_SET" func_emit_pre_early_macros false '' "$modules" if test -n "$uses_subdirs"; then echo "AM_PROG_CC_C_O" echo fi for module in $modules; do func_verify_module if test -n "$module"; then case $module in gnumakefile | maintainer-makefile) # These modules are meant to be used only in the top-level directory. ;; *) func_get_autoconf_early_snippet "$module" ;; esac fi done \ | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/' if test "$libtool" = true; then echo "LT_INIT([win32-dll])" echo "LT_LANG([C++])" echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" echo "gl_cond_libtool=true" else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" echo "gl_cond_libtool=false" echo "gl_libdeps=" echo "gl_ltlibdeps=" fi # Wrap the set of autoconf snippets into an autoconf macro that is then # invoked. This is needed because autoconf does not support AC_REQUIRE # at the top level: # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro # but we want the AC_REQUIRE to have its normal meaning (provide one # expansion of the required macro before the current point, and only one # expansion total). echo "AC_DEFUN([gl_INIT], [" sed_replace_build_aux=' :a /AC_CONFIG_FILES(.*:build-aux\/.*)/{ s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)| ba }' echo "gl_m4_base='../$m4base'" func_emit_initmacro_start $macro_prefix true # We don't have explicit ordering constraints between the various # autoconf snippets. It's cleanest to put those of the library before # those of the tests. echo "gl_source_base='../$sourcebase'" func_emit_autoconf_snippets "$modules" "$modules" func_verify_nontests_module false false false echo "gl_source_base='.'" func_emit_autoconf_snippets "$modules" "$modules" func_verify_tests_module false false false func_emit_initmacro_end $macro_prefix # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi echo "])" func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase? echo echo "gl_INIT" echo # Usually $testsbase/config.h will be a superset of config.h. Verify this # by "merging" config.h into $testsbase/config.h; look out for gcc warnings. echo "AH_TOP([#include \"../config.h\"])" echo echo "AC_CONFIG_FILES([Makefile])" echo "AC_OUTPUT" ) > "$testdir/$testsbase/configure.ac" auxdir="$saved_auxdir" subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase" fi func_append subdirs " $testsbase" fi # Create Makefile.am. (echo "## Process this file with automake to produce Makefile.in." echo echo "AUTOMAKE_OPTIONS = 1.11 foreign" echo echo "SUBDIRS = $subdirs" echo echo "ACLOCAL_AMFLAGS = -I $m4base" ) > "$testdir/Makefile.am" # Create configure.ac. (echo "# Process this file with autoconf to produce a configure script." echo "AC_INIT([dummy], [0])" if test "$auxdir" != "."; then echo "AC_CONFIG_AUX_DIR([$auxdir])" fi echo "AM_INIT_AUTOMAKE" echo echo "AC_CONFIG_HEADERS([config.h])" echo echo "AC_PROG_CC" echo "AC_PROG_INSTALL" echo "AC_PROG_MAKE_SET" echo echo "# For autobuild." echo "AC_CANONICAL_BUILD" echo "AC_CANONICAL_HOST" echo echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" echo "m4_pattern_allow([^gl_ES\$])dnl a valid locale name" echo "m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable" echo "m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable" func_emit_pre_early_macros false '' "$final_modules" if test -n "$any_uses_subdirs"; then echo "AM_PROG_CC_C_O" echo fi for module in $final_modules; do if $single_configure; then func_verify_module else func_verify_nontests_module fi if test -n "$module"; then func_get_autoconf_early_snippet "$module" fi done \ | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/' if test "$libtool" = true; then echo "LT_INIT([win32-dll])" echo "LT_LANG([C++])" echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" echo "gl_cond_libtool=true" else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" echo "gl_cond_libtool=false" echo "gl_libdeps=" echo "gl_ltlibdeps=" fi # Wrap the set of autoconf snippets into an autoconf macro that is then # invoked. This is needed because autoconf does not support AC_REQUIRE # at the top level: # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro # but we want the AC_REQUIRE to have its normal meaning (provide one # expansion of the required macro before the current point, and only one # expansion total). echo "AC_DEFUN([gl_INIT], [" if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a /AC_CONFIG_FILES(.*:build-aux\/.*)/{ s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)| ba }' else sed_replace_build_aux="$sed_noop" fi echo "gl_m4_base='$m4base'" func_emit_initmacro_start $macro_prefix false echo "gl_source_base='$sourcebase'" if $single_configure; then func_emit_autoconf_snippets "$main_modules" "$main_modules" func_verify_module true false false else func_emit_autoconf_snippets "$modules" "$modules" func_verify_nontests_module true false false fi func_emit_initmacro_end $macro_prefix if $single_configure; then echo " gltests_libdeps=" echo " gltests_ltlibdeps=" func_emit_initmacro_start ${macro_prefix}tests true echo " gl_source_base='$testsbase'" # Define a tests witness macro. echo " ${macro_prefix}tests_WITNESS=IN_GNULIB_TESTS" echo " AC_SUBST([${macro_prefix}tests_WITNESS])" echo " gl_module_indicator_condition=\$${macro_prefix}tests_WITNESS" echo " m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [\$gl_module_indicator_condition])" func_emit_autoconf_snippets "$testsrelated_modules" "$main_modules $testsrelated_modules" func_verify_module true false false echo " m4_popdef([gl_MODULE_INDICATOR_CONDITION])" func_emit_initmacro_end ${macro_prefix}tests fi # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if test "$libtool" != true; then libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'` echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\"" echo " AC_SUBST([${libname_upper}_LIBDEPS])" echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi if $single_configure; then if $use_libtests; then echo " LIBTESTS_LIBDEPS=\"\$gltests_libdeps\"" echo " AC_SUBST([LIBTESTS_LIBDEPS])" fi fi echo "])" func_emit_initmacro_done $macro_prefix $sourcebase if $single_configure; then func_emit_initmacro_done ${macro_prefix}tests $testsbase fi echo echo "gl_INIT" echo if test -n "$subdirs_with_configure_ac"; then echo "AC_CONFIG_SUBDIRS(["`echo $subdirs_with_configure_ac`"])" fi makefiles="Makefile" for d in $subdirs; do # For subdirs that have a configure.ac by their own, it's the subdir's # configure.ac which creates the subdir's Makefile.am, not this one. case " $subdirs_with_configure_ac " in *" $d "*) ;; *) func_append makefiles " $d/Makefile" ;; esac done echo "AC_CONFIG_FILES([$makefiles])" echo "AC_OUTPUT" ) > "$testdir/configure.ac" # Create autogenerated files. (cd "$testdir" # Do not use "${AUTORECONF} --force --install", because it may invoke # autopoint, which brings in older versions of some of our .m4 files. if test -f $m4base/gettext.m4; then func_execute_command ${AUTOPOINT} --force || func_exit 1 for f in $m4base/*.m4~; do if test -f $f; then mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 fi done fi if test "$libtool" = true; then func_execute_command ${LIBTOOLIZE} --copy || func_exit 1 fi func_execute_command ${ACLOCAL} -I $m4base || func_exit 1 if ! test -d build-aux; then func_execute_command mkdir build-aux || func_exit 1 fi func_execute_command ${AUTOCONF} || func_exit 1 # Explicit 'touch config.h.in': see <https://savannah.gnu.org/support/index.php?109406>. func_execute_command ${AUTOHEADER} && func_execute_command touch config.h.in || func_exit 1 func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1 rm -rf autom4te.cache ) || func_exit 1 if $inctests && ! $single_configure; then # Create autogenerated files. (cd "$testdir/$testsbase" || func_exit 1 # Do not use "${AUTORECONF} --force --install", because it may invoke # autopoint, which brings in older versions of some of our .m4 files. if test -f ../$m4base/gettext.m4; then func_execute_command ${AUTOPOINT} --force || func_exit 1 for f in ../$m4base/*.m4~; do if test -f $f; then mv -f $f `echo $f | sed -e 's,~$,,'` || func_exit 1 fi done fi func_execute_command ${ACLOCAL} -I ../$m4base || func_exit 1 if ! test -d ../build-aux; then func_execute_command mkdir ../build-aux fi func_execute_command ${AUTOCONF} || func_exit 1 # Explicit 'touch config.h.in': see <https://savannah.gnu.org/support/index.php?109406>. func_execute_command ${AUTOHEADER} && func_execute_command touch config.h.in || func_exit 1 func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1 rm -rf autom4te.cache ) || func_exit 1 fi # Need to run configure and make once, to create built files that are to be # distributed (such as parse-datetime.c). sed_remove_make_variables='s,[$]([A-Za-z0-9_]*),,g' # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...". cleaned_files=`combine_lines < "$testdir/$sourcebase/Makefile.am" \ | sed -n -e 's,^CLEANFILES[ ]*+=\([^#]*\).*$,\1,p' -e 's,^MOSTLYCLEANFILES[ ]*+=\([^#]*\).*$,\1,p'` cleaned_files=`for file in $cleaned_files; do echo " $file "; done` # Extract the value of "BUILT_SOURCES += ...". Remove variable references # such $(FOO_H) because they don't refer to distributed files. built_sources=`combine_lines < "$testdir/$sourcebase/Makefile.am" \ | sed -n -e 's,^BUILT_SOURCES[ ]*+=\([^#]*\).*$,\1,p' \ | sed -e "$sed_remove_make_variables"` distributed_built_sources=`for file in $built_sources; do case "$cleaned_files" in *" "$file" "*) ;; *) echo $file ;; esac; done` tests_distributed_built_sources= if $inctests; then # Likewise for built files in the $testsbase directory. tests_cleaned_files=`combine_lines < "$testdir/$testsbase/Makefile.am" \ | sed -n -e 's,^CLEANFILES[ ]*+=\([^#]*\).*$,\1,p' -e 's,^MOSTLYCLEANFILES[ ]*+=\([^#]*\).*$,\1,p'` tests_cleaned_files=`for file in $tests_cleaned_files; do echo " $file "; done` tests_built_sources=`combine_lines < "$testdir/$testsbase/Makefile.am" \ | sed -n -e 's,^BUILT_SOURCES[ ]*+=\([^#]*\).*$,\1,p' \ | sed -e "$sed_remove_make_variables"` tests_distributed_built_sources=`for file in $tests_built_sources; do case "$tests_cleaned_files" in *" "$file" "*) ;; *) echo $file ;; esac; done` fi if test -n "$distributed_built_sources" || test -n "$tests_distributed_built_sources"; then (cd "$testdir" ./configure || func_exit 1 if test -n "$distributed_built_sources"; then cd "$sourcebase" echo 'built_sources: $(BUILT_SOURCES)' >> Makefile $MAKE AUTOCONF="${AUTOCONF}" AUTOHEADER="${AUTOHEADER}" ACLOCAL="${ACLOCAL}" AUTOMAKE="${AUTOMAKE}" AUTORECONF="${AUTORECONF}" AUTOPOINT="${AUTOPOINT}" LIBTOOLIZE="${LIBTOOLIZE}" \ built_sources \ || func_exit 1 cd .. fi if test -n "$tests_distributed_built_sources"; then cd "$testsbase" echo 'built_sources: $(BUILT_SOURCES)' >> Makefile $MAKE AUTOCONF="${AUTOCONF}" AUTOHEADER="${AUTOHEADER}" ACLOCAL="${ACLOCAL}" AUTOMAKE="${AUTOMAKE}" AUTORECONF="${AUTORECONF}" AUTOPOINT="${AUTOPOINT}" LIBTOOLIZE="${LIBTOOLIZE}" \ built_sources \ || func_exit 1 cd .. fi $MAKE AUTOCONF="${AUTOCONF}" AUTOHEADER="${AUTOHEADER}" ACLOCAL="${ACLOCAL}" AUTOMAKE="${AUTOMAKE}" AUTORECONF="${AUTORECONF}" AUTOPOINT="${AUTOPOINT}" LIBTOOLIZE="${LIBTOOLIZE}" \ distclean \ || func_exit 1 ) || func_exit 1 fi (cd "$testdir" if test -f build-aux/test-driver; then patch build-aux/test-driver < "$gnulib_dir"/build-aux/test-driver.diff \ || patch build-aux/test-driver < "$gnulib_dir"/build-aux/test-driver-1.16.3.diff \ || func_exit 1 fi ) || func_exit 1 } # func_create_megatestdir megatestdir allmodules # Input: # - local_gnulib_path from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - auxdir directory relative to destdir where to place build aux files func_create_megatestdir () { megatestdir="$1" allmodules="$2" if test -z "$allmodules"; then allmodules=`func_all_modules` fi megasubdirs= # First, all modules one by one. for onemodule in $allmodules; do func_create_testdir "$megatestdir/$onemodule" $onemodule func_append megasubdirs "$onemodule " done # Then, all modules all together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. allmodules=`for m in $allmodules; do if test $m != config-h; then echo $m; fi; done` func_create_testdir "$megatestdir/ALL" "$allmodules" func_append megasubdirs "ALL" # Create autobuild. cvsdate=`vc_witness="$gnulib_dir/.git/refs/heads/master"; \ sh "$gnulib_dir/build-aux/mdate-sh" "$vc_witness" \ | sed -e 's,January,01,' -e 's,Jan,01,' \ -e 's,February,02,' -e 's,Feb,02,' \ -e 's,March,03,' -e 's,Mar,03,' \ -e 's,April,04,' -e 's,Apr,04,' \ -e 's,May,05,' \ -e 's,June,06,' -e 's,Jun,06,' \ -e 's,July,07,' -e 's,Jul,07,' \ -e 's,August,08,' -e 's,Aug,08,' \ -e 's,September,09,' -e 's,Sep,09,' \ -e 's,October,10,' -e 's,Oct,10,' \ -e 's,November,11,' -e 's,Nov,11,' \ -e 's,December,12,' -e 's,Dec,12,' \ -e 's,^,00,' -e 's,^[0-9]*\([0-9][0-9] \),\1,' \ -e 's,^\([0-9]*\) \([0-9]*\) \([0-9]*\),\3\2\1,'` (echo '#!/bin/sh' echo "CVSDATE=$cvsdate" echo ": \${MAKE=make}" echo "test -d logs || mkdir logs" echo "for module in $megasubdirs; do" echo " echo \"Working on module \$module...\"" echo " safemodule=\`echo \$module | sed -e 's|/|-|g'\`" echo " (echo \"To: gnulib@autobuild.josefsson.org\"" echo " echo" echo " set -x" echo " : autobuild project... \$module" echo " : autobuild revision... cvs-\$CVSDATE-000000" echo " : autobuild timestamp... \`date \"+%Y%m%d-%H%M%S\"\`" echo " : autobuild hostname... \`hostname\`" echo " cd \$module && ./configure \$CONFIGURE_OPTIONS && \$MAKE && \$MAKE check && \$MAKE distclean" echo " echo rc=\$?" echo " ) 2>&1 | { if test -n \"\$AUTOBUILD_SUBST\"; then sed -e \"\$AUTOBUILD_SUBST\"; else cat; fi; } > logs/\$safemodule" echo "done" ) > "$megatestdir/do-autobuild" chmod a+x "$megatestdir/do-autobuild" # Create Makefile.am. (echo "## Process this file with automake to produce Makefile.in." echo echo "AUTOMAKE_OPTIONS = 1.11 foreign" echo echo "SUBDIRS = $megasubdirs" echo echo "EXTRA_DIST = do-autobuild" ) > "$megatestdir/Makefile.am" # Create configure.ac. (echo "# Process this file with autoconf to produce a configure script." echo "AC_INIT([dummy], [0])" if test "$auxdir" != "."; then echo "AC_CONFIG_AUX_DIR([$auxdir])" fi echo "AM_INIT_AUTOMAKE" echo echo "AC_PROG_MAKE_SET" echo echo "AC_CONFIG_SUBDIRS([$megasubdirs])" echo "AC_CONFIG_FILES([Makefile])" echo "AC_OUTPUT" ) > "$megatestdir/configure.ac" # Create autogenerated files. (cd "$megatestdir" # Do not use "${AUTORECONF} --install", because autoreconf operates # recursively, but the subdirectories are already finished, therefore # calling autoreconf here would only waste lots of CPU time. func_execute_command ${ACLOCAL} || func_exit 1 func_execute_command mkdir build-aux func_execute_command ${AUTOCONF} || func_exit 1 func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1 rm -rf autom4te.cache if test -f build-aux/test-driver; then patch build-aux/test-driver < "$gnulib_dir"/build-aux/test-driver.diff \ || patch build-aux/test-driver < "$gnulib_dir"/build-aux/test-driver-1.16.3.diff \ || func_exit 1 fi ) || func_exit 1 } case $mode in "" ) func_fatal_error "no mode specified" ;; list ) func_all_modules ;; find ) # sed expression that converts a literal to a basic regular expression. # Needs to handle . [ \ * ^ $. sed_literal_to_basic_regex='s/\\/\\\\/g s/\[/\\[/g s/\^/\\^/g s/\([.*$]\)/[\1]/g' for filename do if test -f "$gnulib_dir/$filename" \ || func_lookup_local_file "$filename"; then filename_anywhere_regex=`echo "$filename" | sed -e "$sed_literal_to_basic_regex"` filename_line_regex='^'"$filename_anywhere_regex"'$' module_candidates=` { (cd "$gnulib_dir" && find modules -type f -print | xargs -n 100 grep -l "$filename_line_regex" /dev/null | sed -e 's,^modules/,,') func_path_foreach "$local_gnulib_path" func_modules_in_dir %dir% | xargs -n 100 grep -l "$filename_anywhere_regex" /dev/null | sed -e 's,^modules/,,' -e 's,\.diff$,,' } \ | func_sanitize_modulelist \ | LC_ALL=C sort -u ` for module in $module_candidates; do if func_get_filelist $module | grep "$filename_line_regex" > /dev/null; then echo $module fi done else func_warning "file $filename does not exist" fi done ;; import | add-import | remove-import | update ) # Where to import. if test -z "$destdir"; then destdir=. fi test -d "$destdir" \ || func_fatal_error "destination directory does not exist: $destdir" # Prefer configure.ac to configure.in. if test -f "$destdir"/configure.ac; then configure_ac="$destdir/configure.ac" else if test -f "$destdir"/configure.in; then configure_ac="$destdir/configure.in" else func_fatal_error "cannot find $destdir/configure.ac - make sure you run gnulib-tool from within your package's directory" fi fi # Analyze configure.ac. guessed_auxdir="." guessed_libtool=false my_sed_traces=' s,#.*$,, s,^dnl .*$,, s, dnl .*$,, /AC_CONFIG_AUX_DIR/ { s,^.*AC_CONFIG_AUX_DIR([[ ]*\([^]"$`\\)]*\).*$,guessed_auxdir="\1",p } /A[CM]_PROG_LIBTOOL/ { s,^.*$,guessed_libtool=true,p }' eval `sed -n -e "$my_sed_traces" < "$configure_ac"` if test -z "$auxdir"; then auxdir="$guessed_auxdir" fi # Determine where to apply func_import. if test "$mode" = import; then # Apply func_import to a particular gnulib directory. # The command line contains the complete specification; don't look at # the contents of gnulib-cache.m4. test -n "$supplied_libname" || supplied_libname=true test -n "$sourcebase" || sourcebase="lib" test -n "$m4base" || m4base="m4" test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$macro_prefix" || macro_prefix="gl" func_import "$*" else if test -n "$m4base"; then # Apply func_import to a particular gnulib directory. # Any number of additional modules can be given. if test ! -f "$destdir/$m4base"/gnulib-cache.m4; then # First use of gnulib in the given m4base. test -n "$supplied_libname" || supplied_libname=true test -n "$sourcebase" || sourcebase="lib" test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$macro_prefix" || macro_prefix="gl" fi func_import "$*" else # Apply func_import to all gnulib directories. # To get this list of directories, look at Makefile.am. (Not at # configure, because it may be omitted from version control. Also, # don't run "find $destdir -name gnulib-cache.m4", as it might be # too expensive.) m4dirs= m4dirs_count=0 if test -f "$destdir"/Makefile.am; then aclocal_amflags=`sed -n -e 's/^ACLOCAL_AMFLAGS[ ]*=\(.*\)$/\1/p' "$destdir"/Makefile.am` m4dir_is_next= for arg in $aclocal_amflags; do if test -n "$m4dir_is_next"; then # Ignore absolute directory pathnames, like /usr/local/share/aclocal. case "$arg" in /*) ;; *) if test -f "$destdir/$arg"/gnulib-cache.m4; then func_append m4dirs " $arg" m4dirs_count=`expr $m4dirs_count + 1` fi ;; esac m4dir_is_next= else if test "X$arg" = "X-I"; then m4dir_is_next=yes else m4dir_is_next= fi fi done else # No Makefile.am! Oh well. Look at the last generated aclocal.m4. if test -f "$destdir"/aclocal.m4; then sedexpr1='s,^m4_include(\[\(.*\)])$,\1,p' sedexpr2='s,^[^/]*$,.,' sedexpr3='s,/[^/]*$,,' m4dirs=`sed -n -e "$sedexpr1" aclocal.m4 | sed -e "$sedexpr2" -e "$sedexpr3" | LC_ALL=C sort -u` m4dirs=`for arg in $m4dirs; do if test -f "$destdir/$arg"/gnulib-cache.m4; then echo $arg; fi; done` m4dirs_count=`for arg in $m4dirs; do echo "$arg"; done | wc -l` fi fi if test $m4dirs_count = 0; then # First use of gnulib in a package. # Any number of additional modules can be given. test -n "$supplied_libname" || supplied_libname=true test -n "$sourcebase" || sourcebase="lib" m4base="m4" test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$macro_prefix" || macro_prefix="gl" func_import "$*" else if test $m4dirs_count = 1; then # There's only one use of gnulib here. Assume the user means it. # Any number of additional modules can be given. for m4base in $m4dirs; do func_import "$*" done else # Ambiguous - guess what the user meant. if test $# = 0; then # No further arguments. Guess the user wants to update all of them. for m4base in $m4dirs; do # Perform func_import in a subshell, so that variable values # such as # local_gnulib_path, incobsolete, inc_cxx_tests, # inc_longrunning_tests, inc_privileged_tests, # inc_unportable_tests, inc_all_tests, avoidlist, sourcebase, # m4base, pobase, docbase, testsbase, inctests, libname, lgpl, # makefile_name, libtool, macro_prefix, po_domain, # witness_c_macro, vc_files # don't propagate from one directory to another. (func_import) || func_exit 1 done else # Really ambiguous. func_fatal_error "Ambiguity: to which directory should the modules be added? Please specify at least --m4-base=..." fi fi fi fi fi ;; create-testdir ) if test -z "$destdir"; then func_fatal_error "please specify --dir option" fi mkdir "$destdir" test -d "$destdir" \ || func_fatal_error "could not create destination directory" test -n "$auxdir" || auxdir="build-aux" func_create_testdir "$destdir" "$*" ;; create-megatestdir ) if test -z "$destdir"; then func_fatal_error "please specify --dir option" fi mkdir "$destdir" || func_fatal_error "could not create destination directory" test -n "$auxdir" || auxdir="build-aux" func_create_megatestdir "$destdir" "$*" ;; test ) test -n "$destdir" || destdir=testdir$$ mkdir "$destdir" || func_fatal_error "could not create destination directory" test -n "$auxdir" || auxdir="build-aux" func_create_testdir "$destdir" "$*" cd "$destdir" mkdir build cd build ../configure || func_exit 1 $MAKE || func_exit 1 $MAKE check || func_exit 1 $MAKE distclean || func_exit 1 remaining=`find . -type f -print` if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 func_exit 1 fi cd .. cd .. rm -rf "$destdir" ;; megatest ) test -n "$destdir" || destdir=testdir$$ mkdir "$destdir" || func_fatal_error "could not create destination directory" test -n "$auxdir" || auxdir="build-aux" func_create_megatestdir "$destdir" "$*" cd "$destdir" mkdir build cd build ../configure $MAKE $MAKE check $MAKE distclean remaining=`find . -type f -print` if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 func_exit 1 fi cd .. cd .. rm -rf "$destdir" ;; extract-description ) for module do func_verify_module if test -n "$module"; then func_get_description "$module" fi done ;; extract-comment ) for module do func_verify_module if test -n "$module"; then func_get_comment "$module" fi done ;; extract-status ) for module do func_verify_module if test -n "$module"; then func_get_status "$module" fi done ;; extract-notice ) for module do func_verify_module if test -n "$module"; then func_get_notice "$module" fi done ;; extract-applicability ) for module do func_verify_module if test -n "$module"; then func_get_applicability "$module" fi done ;; extract-filelist ) for module do func_verify_module if test -n "$module"; then func_get_filelist "$module" fi done ;; extract-dependencies ) if test -n "$avoidlist"; then func_fatal_error "cannot combine --avoid and --extract-dependencies" fi for module do func_verify_module if test -n "$module"; then func_get_dependencies "$module" fi done ;; extract-recursive-dependencies ) if test -n "$avoidlist"; then func_fatal_error "cannot combine --avoid and --extract-recursive-dependencies" fi for module do func_verify_module if test -n "$module"; then func_get_dependencies_recursively "$module" fi done ;; extract-autoconf-snippet ) for module do func_verify_module if test -n "$module"; then func_get_autoconf_snippet "$module" fi done ;; extract-automake-snippet ) for module do func_verify_module if test -n "$module"; then func_get_automake_snippet "$module" fi done ;; extract-include-directive ) for module do func_verify_module if test -n "$module"; then func_get_include_directive "$module" fi done ;; extract-link-directive ) for module do func_verify_module if test -n "$module"; then func_get_link_directive "$module" fi done ;; extract-recursive-link-directive ) if test -n "$avoidlist"; then func_fatal_error "cannot combine --avoid and --extract-recursive-link-directive" fi for module do func_verify_module if test -n "$module"; then func_get_link_directive_recursively "$module" fi done ;; extract-license ) for module do func_verify_module if test -n "$module"; then func_get_license "$module" fi done ;; extract-maintainer ) for module do func_verify_module if test -n "$module"; then func_get_maintainer "$module" fi done ;; extract-tests-module ) for module do func_verify_module if test -n "$module"; then func_get_tests_module "$module" fi done ;; copy-file ) # Verify the number of arguments. if test $# -lt 1 || test $# -gt 2; then func_fatal_error "invalid number of arguments for --$mode" fi # The first argument is the file to be copied. f="$1" # Verify the file exists. func_lookup_file "$f" # The second argument is the destination; either a directory ot a file. # It defaults to the current directory. dest="$2" test -n "$dest" || dest='.' test -n "$sourcebase" || sourcebase="lib" test -n "$m4base" || m4base="m4" test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$auxdir" || auxdir="build-aux" rewritten='%REWRITTEN%' sed_rewrite_files="\ s,^build-aux/,$rewritten$auxdir/, s,^doc/,$rewritten$docbase/, s,^lib/,$rewritten$sourcebase/, s,^m4/,$rewritten$m4base/, s,^tests/,$rewritten$testsbase/, s,^top/,$rewritten, s,^$rewritten,," if test -d "$dest"; then destdir="$dest" g=`echo "$f" | sed -e "$sed_rewrite_files"` else destdir=`dirname "$dest"` g=`basename "$dest"` fi # Create the directory for destfile. d=`dirname "$destdir/$g"` if $doit; then if test -n "$d" && test ! -d "$d"; then mkdir -p "$d" || func_fatal_error "failed" fi fi # Copy the file. func_dest_tmpfilename "$g" cp "$lookedup_file" "$tmpfile" || func_fatal_error "failed" func_ensure_writable "$tmpfile" already_present=true if test -f "$destdir/$g"; then # The file already exists. func_update_file else # Install the file. # Don't protest if the file should be there but isn't: it happens # frequently that developers don't put autogenerated files under version # control. func_add_file fi rm -f "$tmpfile" ;; * ) func_fatal_error "unknown operation mode --$mode" ;; esac if test "$copymode" = hardlink -o "$lcopymode" = hardlink; then # Setting hard links modifies the ctime of files in the gnulib checkout. # This disturbs the result of the next "gitk" invocation. # Workaround: Let git scan the files. This can be done through # "git update-index --refresh" or "git status" or "git diff". if test -d "$gnulib_dir"/.git \ && (git --version) >/dev/null 2>/dev/null; then (cd "$gnulib_dir" && git update-index --refresh >/dev/null) fi fi rm -rf "$tmp" # Undo the effect of the previous 'trap' command. Some shellology: # We cannot use "trap - 0 1 2 3 13 15", because Solaris sh would attempt to # execute the command "-". "trap '' ..." is fine only for signal 0 (= normal # exit); for the others we need to call 'exit' explicitly. The value of $? is # 128 + signal number and is set before the trap-registered command is run. trap '' 0 trap 'func_exit $?' 1 2 3 13 15 exit 0 # Local Variables: # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/gnulib-tool.py��������������������������������������������������������������0000775�0000000�0000000�00000114204�14110572173�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This 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/>. # # This program is meant for authors or maintainers which want to import # modules from gnulib into their packages. #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import codecs import random import shutil import argparse import subprocess as sp from tempfile import mktemp from pprint import pprint from pygnulib import constants from pygnulib import classes #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath #=============================================================================== # Define main part #=============================================================================== def main(): # Reset arguments mode = None destdir = None localdir = None modcache = None verbose = None auxdir = None modules = None avoids = None sourcebase = None m4base = None pobase = None docbase = None testsbase = None tests = None libname = None lgpl = None makefile = None libtool = None conddeps = None macro_prefix = None podomain = None witness_c_macro = None vc_files = None dryrun = None errors = None info = classes.GLInfo() parser = argparse.ArgumentParser( prog=constants.APP['name'], usage='gnulib-tool.py --help', add_help=False) # help parser.add_argument('-h', '--help', '--hel', '--he', '--h', dest='help', default=None, action='store_true') # version parser.add_argument('--version', '--versio', '--versi', '--vers', dest='version', default=None, action='store_true') # list parser.add_argument('-l', '--list', '--lis', dest='mode_list', default=None, action='store_true') # find parser.add_argument('-f', '--find', '--fin', '--fi', '--f', dest='mode_find', default=None, nargs='*') # import parser.add_argument('-i', '--import', dest='mode_import', default=None, nargs='*') # add-import parser.add_argument('-a', '--add-import', dest='mode_add_import', default=None, nargs='+') # remove-import parser.add_argument('-r', '--remove-import', dest='mode_remove_import', default=None, nargs='+') # update parser.add_argument('-u', '--update', dest='mode_update', default=None, action='store_true') # create-testdir parser.add_argument('-td', '--create-testdir', dest='mode_create_testdir', default=None, nargs='*') # create-megatestdir parser.add_argument('-mtd', '--create-megatestdir', dest='mode_create_megatestdir', default=None, nargs='*') # test parser.add_argument('-t', '--test', dest='mode_test', default=None, nargs='*') # megatest parser.add_argument('-mt', '--megatest', '--megates', '--megate', '--megat', '--mega', '--meg', '--me', '--m', dest='mode_megatest', default=None, nargs='*') # copy-file parser.add_argument('-c', '--copy-file', dest='mode_copy_file', default=None, nargs='+') # extract-* parser.add_argument('-xD', '--extract-description', dest='mode_xdescription', default=None, nargs='*') parser.add_argument('-xc', '--extract-comment', dest='mode_xcomment', default=None, nargs='*') parser.add_argument('-xs', '--extract-status', dest='mode_xstatus', default=None, nargs='*') parser.add_argument('-xn', '--extract-notice', dest='mode_xnotice', default=None, nargs='*') parser.add_argument('-xa', '--extract-applicability', dest='mode_xapplicability', default=None, nargs='*') parser.add_argument('-xf', '--extract-filelist', dest='mode_xfilelist', default=None, nargs='*') parser.add_argument('-xd', '--extract-dependencies', dest='mode_xdependencies', default=None, nargs='*') parser.add_argument('-xac', '--extract-autoconf-snippet', dest='mode_xautoconf', default=None, nargs='*') parser.add_argument('-xam', '--extract-automake-snippet', dest='mode_xautomake', default=None, nargs='*') parser.add_argument('-xi', '--extract-include-directive', dest='mode_xinclude', default=None, nargs='*') parser.add_argument('-xl', '--extract-link-directive', dest='mode_xlink', default=None, nargs='*') parser.add_argument('-xL', '--extract-license', dest='mode_xlicense', default=None, nargs='*') parser.add_argument('-xm', '--extract-maintainer', dest='mode_xmaintainer', default=None, nargs='*') # no-changelog: a no-op for backward compatibility parser.add_argument('--no-changelog', dest='changelog', default=None, action='store_false') # destdir parser.add_argument('-d', '--dir', dest='destdir', default=None, nargs=1) # localdir parser.add_argument('-ld', '--local-dir', dest='localdir', default=None, nargs=1) # verbose parser.add_argument('-v', '--verbose', default=0, action='count') # quiet parser.add_argument('-q', '--quiet', default=0, action='count') # dryrun parser.add_argument('--dry-run', dest='dryrun', default=None, action='store_true') # inctests parser.add_argument('--with-tests', dest='inctests', default=None, action='store_true') # makefile parser.add_argument("--makefile-name", dest="makefile", default=None, type=str) # obsolete parser.add_argument('--with-obsolete', dest='obsolete', default=None, action='store_true') # c++-tests parser.add_argument('--with-c++-tests', dest='cxx', default=None, action='store_true') # longrunning-tests parser.add_argument('--with-longrunning-tests', dest='longrunning', default=None, action='store_true') # privileged-tests parser.add_argument('--with-privileged-tests', dest='privileged', default=None, action='store_true') # unportable-tests parser.add_argument('--with-unportable-tests', dest='unportable', default=None, action='store_true') # all-tests parser.add_argument('--with-all-tests', dest='alltests', default=None, action='store_true') # auxdir parser.add_argument('--aux-dir', dest='auxdir', default=None, nargs=1) # libname parser.add_argument('--lib', dest='libname', default=None, nargs=1) # libtool parser.add_argument("--libtool", dest=libtool, default=False, action="store_true") # sourcebase parser.add_argument('-sb', '--source-base', dest='sourcebase', default=None, nargs=1) # m4base parser.add_argument('-mb', '--m4-base', dest='m4base', default=None, nargs=1) # pobase parser.add_argument('-pb', '--po-base', dest='pobase', default=None, nargs=1) # docbase parser.add_argument('-db', '--doc-base', dest='docbase', default=None, nargs=1) # testsbase parser.add_argument('-tb', '--tests-base', dest='testsbase', default=None, nargs=1) # lgpl parser.add_argument('--lgpl', dest='lgpl', default=False, type=int, nargs='?') # avoids parser.add_argument('--avoid', dest='avoids', default=None, nargs='+') # Parse the given arguments. cmdargs = parser.parse_args() # Determine when user tries to combine modes. args = [ cmdargs.mode_list, cmdargs.mode_import, cmdargs.mode_add_import, cmdargs.mode_remove_import, cmdargs.mode_update, cmdargs.mode_create_testdir, cmdargs.mode_create_megatestdir, cmdargs.mode_test, cmdargs.mode_megatest, cmdargs.mode_copy_file, cmdargs.mode_xdescription, cmdargs.mode_xcomment, cmdargs.mode_xstatus, cmdargs.mode_xnotice, cmdargs.mode_xapplicability, cmdargs.mode_xfilelist, cmdargs.mode_xdependencies, cmdargs.mode_xautoconf, cmdargs.mode_xautomake, cmdargs.mode_xinclude, cmdargs.mode_xlink, cmdargs.mode_xlicense, cmdargs.mode_xmaintainer, ] overflow = [arg for arg in args if arg] if len(overflow) > 1: message = 'gnulib-tool: Unable to combine different modes of work.\n' message += 'Try \'gnulib-tool --help\' for more information.\n' sys.stderr.write(message) sys.exit(1) # Determine selected mode. if cmdargs.help != None: print(info.usage()) sys.exit(0) if cmdargs.version != None: message = '''gnulib-tool (%s %s)%s\n%s\n%s\n\nWritten by %s.''' % \ (info.package(), info.date(), info.version(), info.copyright(), info.license(), info.authors()) print(message) sys.exit(0) if cmdargs.mode_list != None: mode = 'list' if cmdargs.mode_import != None: mode = 'import' modules = list(cmdargs.mode_import) if cmdargs.mode_add_import != None: mode = 'add-import' modules = list(cmdargs.mode_add_import) if cmdargs.mode_remove_import != None: mode = 'remove-import' modules = list(cmdargs.mode_remove_import) if cmdargs.mode_update != None: mode = 'update' if cmdargs.mode_create_testdir != None: mode = 'create-testdir' modules = list(cmdargs.mode_create_testdir) if cmdargs.mode_create_megatestdir != None: mode = 'create-megatestdir' modules = list(cmdargs.mode_create_megatestdir) if cmdargs.mode_test != None: mode = 'test' modules = list(cmdargs.mode_test) if cmdargs.mode_megatest != None: mode = 'megatest' modules = list(cmdargs.mode_megatest) if cmdargs.mode_xdescription != None: mode = 'extract-description' modules = list(cmdargs.mode_xdescription) if cmdargs.mode_xcomment != None: mode = 'extract-comment' modules = list(cmdargs.mode_xcomment) if cmdargs.mode_xstatus != None: mode = 'extract-status' modules = list(cmdargs.mode_xstatus) if cmdargs.mode_xnotice != None: mode = 'extract-notice' modules = list(cmdargs.mode_xnotice) if cmdargs.mode_xapplicability != None: mode = 'extract-applicability' modules = list(cmdargs.mode_xapplicability) if cmdargs.mode_xfilelist != None: mode = 'extract-filelist' modules = list(cmdargs.mode_xfilelist) if cmdargs.mode_xautoconf != None: mode = 'extract-autoconf-snippet' modules = list(cmdargs.mode_xautoconf) if cmdargs.mode_xautomake != None: mode = 'extract-automake-snippet' modules = list(cmdargs.mode_xautomake) if cmdargs.mode_xdependencies != None: mode = 'extract-dependencies' modules = list(cmdargs.mode_xdependencies) if cmdargs.mode_xinclude != None: mode = 'extract-include-directive' modules = list(cmdargs.mode_xinclude) if cmdargs.mode_xlink != None: mode = 'extract-link-directive' modules = list(cmdargs.mode_xlink) if cmdargs.mode_xlicense != None: mode = 'extract-license' modules = list(cmdargs.mode_xlicense) if cmdargs.mode_xmaintainer != None: mode = 'extract-maintainer' modules = list(cmdargs.mode_xmaintainer) if cmdargs.mode_copy_file != None: mode = 'copy-file' if len(cmdargs.mode_copy_file) > 2: message = '%s: *** ' % constants.APP['name'] message += 'invalid number of arguments for --%s' % mode message += '\n%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) files = list(cmdargs.mode_copy_file) # Determine specific settings. destdir = cmdargs.destdir if destdir != None: destdir = cmdargs.destdir[0] localdir = cmdargs.localdir if localdir != None: localdir = cmdargs.localdir[0] libname = cmdargs.libname if libname != None: libname = cmdargs.libname[0] auxdir = cmdargs.auxdir if auxdir != None: auxdir = cmdargs.auxdir[0] sourcebase = cmdargs.sourcebase if sourcebase != None: sourcebase = cmdargs.sourcebase[0] m4base = cmdargs.m4base if m4base != None: m4base = cmdargs.m4base[0] pobase = cmdargs.pobase if pobase != None: pobase = cmdargs.pobase[0] testsbase = cmdargs.testsbase if testsbase != None: testsbase = cmdargs.testsbase[0] dryrun = cmdargs.dryrun verbose = -cmdargs.quiet + cmdargs.verbose inctests = cmdargs.inctests flags = [cmdargs.inctests, cmdargs.obsolete, cmdargs.cxx, cmdargs.longrunning, cmdargs.privileged, cmdargs.unportable, cmdargs.alltests] testflags = list() for flag in flags: index = flags.index(flag) if flag != None: if flag: if index == 0: testflags += [constants.TESTS['tests']] elif index == 1: testflags += [constants.TESTS['obsolete']] elif index == 2: testflags += [constants.TESTS['cxx-tests']] elif index == 3: testflags += [constants.TESTS['longrunning-tests']] elif index == 4: testflags += [constants.TESTS['privileged-tests']] elif index == 5: testflags += [constants.TESTS['unportable-tests']] elif index == 6: testflags += [constants.TESTS['all-tests']] lgpl = cmdargs.lgpl libtool = cmdargs.libtool makefile = cmdargs.makefile if lgpl == None: lgpl = True avoids = cmdargs.avoids # Create pygnulib configuration. config = classes.GLConfig( destdir=destdir, localdir=localdir, m4base=m4base, auxdir=auxdir, modules=modules, avoids=avoids, sourcebase=sourcebase, pobase=pobase, docbase=docbase, testsbase=testsbase, testflags=testflags, libname=libname, lgpl=lgpl, makefile=makefile, libtool=libtool, conddeps=conddeps, macro_prefix=macro_prefix, podomain=podomain, witness_c_macro=witness_c_macro, vc_files=vc_files, modcache=modcache, verbose=verbose, dryrun=dryrun, ) # Canonicalize the inctests variable. if inctests == None: if mode in ['import', 'add-import', 'remove-import', 'update']: config.disableTestFlag(TESTS['tests']) elif mode in ['create-testdir', 'create-megatestdir', 'test', 'megatest']: config.enableTestFlag(TESTS['tests']) # Work in the given mode. if mode in ['list']: modulesystem = classes.GLModuleSystem(config) listing = modulesystem.list() result = '\n'.join(listing) os.rmdir(config['tempdir']) print(result) elif mode in ['import', 'add-import', 'remove-import', 'update']: mode = MODES[mode] if not destdir: destdir = '.' config.setDestDir(destdir) if mode == MODES['import']: # Set variables to default values. if not sourcebase: sourcebase = 'lib' if not m4base: m4base = 'm4' if not docbase: docbase = 'doc' if not testsbase: testsbase = 'tests' if not macro_prefix: macro_prefix = 'gl' config.setSourceBase(sourcebase) config.setM4Base(m4base) config.setDocBase(docbase) config.setTestsBase(testsbase) config.setMacroPrefix(macro_prefix) # Perform GLImport actions. importer = classes.GLImport(config, mode) filetable, transformers = importer.prepare() importer.execute(filetable, transformers) else: # if mode != MODE['--import'] if m4base: if not isfile(joinpath(destdir, m4base, 'gnulib-cache.m4')): if not sourcebase: sourcebase = 'lib' if not docbase: docbase = 'doc' if not testsbase: testsbase = 'tests' if not macro_prefix: macro_prefix = 'gl' config.setSourceBase(sourcebase) config.setM4Base(m4base) config.setDocBase(docbase) config.setTestsBase(testsbase) config.setMacroPrefix(macro_prefix) # Perform GLImport actions. importer = classes.GLImport(config, mode) filetable, transformers = importer.prepare() importer.execute(filetable, transformers) else: # if not m4base m4dirs = list() dirisnext = bool() filepath = joinpath(destdir, 'Makefile.am') if isfile(filepath): with codecs.open(filepath, 'rb', 'UTF-8') as file: data = file.read() data = data.split('ACLOCAL_AMFLAGS')[1] data = data[data.find('=') + 1:data.find('\n')] aclocal_amflags = data.split() for aclocal_amflag in aclocal_amflags: if dirisnext: if not isabs(aclocal_amflag): m4dirs += [aclocal_amflag] else: # if not dirisnext if aclocal_amflag == '-I': dirisnext = True else: # if aclocal_amflag != '-I' dirisnext = False else: # if not isfile(filepath) filepath = joinpath(destdir, 'aclocal.m4') if isfile(filepath): pattern = constants.compiler( r'm4_include\(\[(.*?)\]\)') with codecs.open(filepath, 'rb', 'UTF-8') as file: m4dirs = pattern.findall(file.read()) m4dirs = [os.path.dirname(m4dir) for m4dir in m4dirs] m4dirs = \ [ # Begin filtering m4dir for m4dir in m4dirs \ if isfile(joinpath(destdir, m4dir, 'gnulib-cache.m4')) ] # Finish filtering m4dirs = sorted(set(m4dirs)) if len(m4dirs) == 0: # First use of gnulib in a package. # Any number of additional modules can be given. if not sourcebase: sourcebase = 'lib' m4base = 'm4' if not docbase: docbase = 'doc' if not testsbase: testsbase = 'tests' if not macro_prefix: macro_prefix = 'gl' config.setSourceBase(sourcebase) config.setM4Base(m4base) config.setDocBase(docbase) config.setTestsBase(testsbase) config.setMacroPrefix(macro_prefix) # Perform GLImport actions. importer = classes.GLImport(config, mode) filetable, transformers = importer.prepare() importer.execute(filetable, transformers) elif len(m4dirs) == 1: m4base = m4dirs[-1] config.setM4Base(m4base) # Perform GLImport actions. importer = classes.GLImport(config, mode) filetable, transformers = importer.prepare() importer.execute(filetable, transformers) else: # if len(m4dirs) > 1 for m4base in m4dirs: config.setM4Base(m4base) # Perform GLImport actions. importer = classes.GLImport(config, mode) filetable, transformers = importer.prepare() importer.execute(filetable, transformers) elif mode == 'create-testdir': if not destdir: message = '%s: *** ' % constants.APP['name'] message += 'please specify --dir option' message += '\n%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) if not auxdir: auxdir = 'build-aux' config.setAuxDir(auxdir) testdir = classes.GLTestDir(config, destdir) testdir.execute() elif mode == 'create-megatestdir': if not destdir: message = '%s: *** ' % constants.APP['name'] message += 'please specify --dir option' message += '\n%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) if not auxdir: auxdir = 'build-aux' config.setAuxDir(auxdir) testdir = classes.GLMegaTestDir(config, destdir) testdir.execute() elif mode == 'test': if not destdir: destdir = 'testdir %04d' % random.randrange(0, 9999) if not auxdir: auxdir = 'build-aux' config.setAuxDir(auxdir) testdir = classes.GLTestDir(config, destdir) testdir.execute() os.chdir(destdir) os.mkdir('build') os.chdir('build') try: # Try to execute commands sp.call(['../configure']) sp.call([UTILS['make']]) sp.call([UTILS['make'], 'check']) sp.call([UTILS['make'], 'distclean']) except Exception as error: sys.exit(1) args = ['find', '.', '-type', 'f', '-print'] remaining = sp.check_output(args).decode(ENCS['shell']) lines = [line.strip() for line in remaining.split('\n') if line.strip()] remaining = ' '.join(lines) if remaining: message = 'Remaining files: %s\n' % remaining message += 'gnulib-tool: *** Stop.\n' sys.stderr.write(message) sys.exit(1) os.chdir('../..') sp.call(['rm', '-rf', destdir], shell=False) elif mode == 'megatest': if not destdir: destdir = 'testdir %04d' % random.randrange(0, 9999) if not auxdir: auxdir = 'build-aux' config.setAuxDir(auxdir) testdir = classes.GLMegaTestDir(config, destdir) testdir.execute() os.chdir(destdir) os.mkdir('build') os.chdir('build') sp.call(['../configure']) sp.call([UTILS['make']]) sp.call([UTILS['make'], 'check']) sp.call([UTILS['make'], 'distclean']) args = ['find', '.', '-type', 'f', '-print'] remaining = sp.check_output(args).decode(ENCS['shell']) lines = [line.strip() for line in remaining.split('\n') if line.strip()] remaining = ' '.join(lines) if remaining: message = 'Remaining files: %s\n' % remaining message += 'gnulib-tool: *** Stop.\n' sys.stderr.write(message) sys.exit(1) os.chdir('../..') sp.call(['rm', '-rf', destdir], shell=False) elif mode == 'extract-description': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getDescription()) elif mode == 'extract-comment': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getComment()) elif mode == 'extract-status': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: status = module.getStatus() print('\n'.join(status)) elif mode == 'extract-notice': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getNotice()) elif mode == 'extract-applicability': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getApplicability()) elif mode == 'extract-filelist': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: files = module.getFiles() print('\n'.join(files)) elif mode == 'extract-dependencies': result = string() if avoids: message = '%s: *** ' % constants.APP['name'] message += 'cannot combine --avoid and --extract-dependencies\n' message += '%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: dependencies = module.getDependencies() if dependencies: for depmodule, condition in dependencies: if condition == None: result += '%s\n' % str(depmodule) else: # if condition != None result += '%s\t%s' % (str(depmodule), condition) print(result) elif mode == 'extract-autoconf-snippet': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getAutoconfSnippet()) elif mode == 'extract-automake-snippet': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getAutomakeSnippet()) elif mode == 'extract-include-directive': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getInclude()) elif mode == 'extract-link-directive': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getLink()) elif mode == 'extract-license': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getLicense()) elif mode == 'extract-maintainer': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: print(module.getMaintainer()) elif mode == 'extract-tests-module': modulesystem = classes.GLModuleSystem(config) modules = [modulesystem.find(module) for module in modules] for module in modules: if module.getTestsModule(): print(module.getTestsName()) elif mode == 'copy-file': srcpath = files[0] if len(files) == 2: dest = files[1] else: # if len(files) != 2 dest = '.' if type(srcpath) is bytes: srcpath = srcpath.decode(ENCS['default']) if type(dest) is bytes: dest = dest.decode(ENCS['default']) if not auxdir: auxdir = 'build-aux' if not sourcebase: sourcebase = 'lib' if not m4base: m4base = 'm4' if not docbase: docbase = 'doc' if not testsbase: testsbase = 'tests' config.setAuxDir(auxdir) config.setSourceBase(sourcebase) config.setM4Base(m4base) config.setDocBase(docbase) config.setTestsBase(testsbase) filesystem = classes.GLFileSystem(config) lookedup, flag = filesystem.lookup(srcpath) if isdir(dest): destdir = string(dest) if srcpath.startswith('build-aux/'): destpath = constants.substart( 'build-aux/', '%s/' % auxdir, srcpath) elif srcpath.startswith('doc/'): destpath = constants.substart('doc/', '%s/' % docbase, srcpath) elif srcpath.startswith('lib/'): destpath = constants.substart( 'lib/', '%s/' % sourcebase, srcpath) elif srcpath.startswith('m4/'): destpath = constants.substart('m4/', '%s/' % m4base, srcpath) elif srcpath.startswith('tests/'): destpath = constants.substart( 'tests/', '%s/' % testsbase, srcpath) elif srcpath.startswith('tests=lib/'): destpath = constants.substart( 'tests=lib/', '%s/' % testsbase, srcpath) elif srcpath.startswith('top/'): destpath = constants.substart('top/', '', srcpath) else: # either case destpath = srcpath else: # if not isdir(destpath) destdir = os.path.dirname(destpath) destpath = os.path.basename(destpath) # Create the directory for destfile. dirname = os.path.dirname(joinpath(destdir, destpath)) if not config['dryrun']: if dirname and not isdir(dirname): try: # Try to create directories os.makedirs(dirname) except Exception as error: pass # Copy the file. assistant = classes.GLFileAssistant(config) tmpfile = assistant.tmpfilename(destpath) shutil.copy(lookedup, tmpfile) already_present = True assistant.setOriginal(srcpath) assistant.setRewritten(destpath) if isfile(joinpath(destdir, destpath)): # The file already exists. assistant.update(lookedup, flag, tmpfile, already_present) else: # if not isfile(joinpath(destdir, destpath)) # Install the file. # Don't protest if the file should be there but isn't: it happens # frequently that developers don't put autogenerated files under version # control. assistant.add(lookedup, flag, tmpfile) if isfile(tmpfile): os.remove(tmpfile) else: message = '%s: *** ' % constants.APP['name'] message += 'no mode specified' message += '\n%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) if __name__ == '__main__': try: # Try to execute main() except classes.GLError as error: errmode = 0 # gnulib-style errors errno = error.errno errinfo = error.errinfo if errmode == 0: message = '%s: *** ' % constants.APP['name'] if errinfo == None: errinfo = string() if errno == 1: message += 'file %s not found' % errinfo elif errno == 2: message += 'patch file %s didn\'t apply cleanly' % errinfo elif errno == 3: message += 'cannot find %s - make sure ' % errinfo message += 'you run gnulib-tool from within your package\'s directory' elif errno == 4: message += 'minimum supported autoconf version is 2.59. Try adding' message += 'AC_PREREQ([%s])' % constants.DEFAULT_AUTOCONF_MINVERSION message += ' to your configure.ac.' elif errno == 5: "%s is expected to contain gl_M4_BASE([%s])" % \ (repr(os.path.join(errinfo, 'gnulib-comp.m4')), repr(errinfo)) elif errno == 6: message += 'missing --source-base option' elif errno == 7: message += 'missing --doc-base option. --doc-base has been introduced ' message += 'on 2006-07-11; if your last invocation of \'gnulib-tool ' message += '--import\' is before that date, you need to run' message += '\'gnulib-tool --import\' once, with a --doc-base option.' elif errno == 8: message += 'missing --tests-base option' elif errno == 9: message += 'missing --lib option' elif errno == 10: message = 'gnulib-tool: option --conditional-dependencies is not ' message += 'supported with --with-tests\n' elif errno == 11: incompatibilities = string() message += 'incompatible license on modules:%s' % constants.NL for pair in errinfo: incompatibilities += pair[0] incompatibilities += ' %s' % pair[1] incompatibilities += constants.NL tempname = mktemp() with codecs.open(tempname, 'wb', 'UTF-8') as file: file.write(incompatibilities) sed_table = 's,^\\([^ ]*\\) ,\\1' + ' ' * 51 + ',\n' sed_table += 's,^\\(' + '.' * 49 + \ '[^ ]*\) *,' + ' ' * 17 + '\\1 ,' args = ['sed', '-e', sed_table, tempname] incompatibilities = sp.check_output( args).decode(ENCS['default']) message += incompatibilities os.remove(tempname) elif errno == 12: message += 'refusing to do nothing' elif errno in [13, 14, 15, 16, 17]: message += 'failed' elif errno == 19: message += 'could not create destination directory: %s' % errinfo if errno != 10: message += '\n%s: *** Exit.\n' % constants.APP['name'] sys.stderr.write(message) sys.exit(1) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/gnulib-tool.py.TODO���������������������������������������������������������0000664�0000000�0000000�00000054224�14110572173�0017657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ================================================================================ Have gnulib-tool.py generate the same files and the same output as gnulib-tool. Test cases: 1) In a checkout of https://gitlab.com/gnuwget/wget2.git : $ git checkout e8ca510eda2cfc75f4c4a4e8e83e19b90af0309c $ $GNULIB_SRCDIR/gnulib-tool.py --no-changelog --aux-dir=build-aux --doc-base=doc --lib=libgnu --m4-base=m4/ --source-base=lib/ --tests-base=lib/tests --local-dir=gl --makefile-name=gnulib.mk --libtool --import accept access arpa_inet atoll bind c-strcase c-strcasestr c-ctype calloc-posix canonicalize-lgpl clock-time close closedir cond connect crypto/md2 crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dirname dup dup2 errno fclose fcntl fdopen fflush flock fnmatch-gnu fopen freopen fstat fsync ftruncate futimens getaddrinfo getpass getsockname gettext-h gettime gitlog-to-changelog glob iconv inet_pton inline inttypes ioctl isatty lib-symbol-visibility limits-h link listen lock maintainer-makefile malloc-posix memchr mkdir mkstemp msvc-nothrow nanosleep netdb netinet_in nl_langinfo open opendir pclose pipe-posix progname popen poll posix_spawn pwrite qsort_r random_r read readdir realloc-posix recv recvfrom regex rename safe-read safe-write select send sendto servent setlocale setsockopt socket sockets socklen spawn-pipe stdarg stdbool stddef stdint stat strcase strchrnul strdup-posix strerror strndup strpbrk strstr strtoll sys_file sys_socket sys_stat sys_time sys_types sys_uio thread time_r unistd unlink update-copyright warnings wcwidth write xgethostname ================================================================================ The following commits to gnulib-tool have not yet been reflected in {gnulib-tool.py,pygnulib/*.py}. -------------------------------------------------------------------------------- commit baec1bac1602ba8534320c295e120f7b658400f4 Author: Bruno Haible <bruno@clisp.org> Date: Sat Feb 22 15:15:01 2020 +0100 gnulib-tool: Ensure copied files are writable. Reported by Benno Fünfstück <benno.fuenfstueck@gmail.com> in <https://lists.gnu.org/archive/html/bug-gnulib/2020-02/msg00101.html>. * gnulib-tool (func_ensure_writable): New function. (func_ln_s, func_hardlink, func_lookup_file, func_import, func_create_testdir, copy-file): Invoke it after copying a file. -------------------------------------------------------------------------------- commit 0d41dbc7c88b10d16751466ec91efa75951426bb Author: Bruno Haible <bruno@clisp.org> Date: Mon Nov 18 13:32:46 2019 +0100 gnulib-tool: Fix build error on macOS with --conditional-dependencies. * gnulib-tool (func_modules_add_dummy): Ignore modules that are conditionally enabled. -------------------------------------------------------------------------------- commit dc135c4fd14cdc219d316c61f344e64090cb33fd Author: Bruno Haible <bruno@clisp.org> Date: Fri Feb 15 21:27:44 2019 +0100 gnulib-tool: Support --import with just a few tests, not --with-tests. * gnulib-tool (func_import): New variable 'gentests'. Use it instead of 'inctests' when generating files; use 'inctests' only for computing the transitive closure. -------------------------------------------------------------------------------- commit 425ee42259b04956aae20afc5204775ae6e79744 Author: Bruno Haible <bruno@clisp.org> Date: Wed Jan 23 05:11:54 2019 +0100 gnulib-tool: Support running testdirs on Android. * build-aux/test-driver.diff: New file. * gnulib-tool (func_create_testdir, func_create_megatestdir): Patch build-aux/test-driver after running automake. -------------------------------------------------------------------------------- commit ce8a5edbc49dea0cb859207c2d063dbd3be0f96c Author: Bruno Haible <bruno@clisp.org> Date: Fri Jan 4 19:34:19 2019 +0100 gnulib-tool: New option --extract-recursive-link-directive. * gnulib-tool (func_usage): Document the new options --extract-recursive-dependencies, --extract-recursive-link-directive. (func_verify_module): Document output variables. (func_get_dependencies_recursively): New function. (func_get_link_directive_recursively): New function. Use them to implement the new options --extract-recursive-dependencies, --extract-recursive-link-directive. * doc/gnulib-tool.texi (Link-time requirements): New section. -------------------------------------------------------------------------------- commit 97eae14a5b2506457a72f89d5897a20730ab6eee Author: Bruno Haible <bruno@clisp.org> Date: Tue Oct 23 00:06:46 2018 +0200 Assume Automake >= 1.11. * m4/configmake.m4: Update comments. * m4/lib-link.m4 (AC_LIB_RPATH): Assume AC_REQUIRE_AUX_FILE exists. * m4/po.m4 (AM_PO_SUBDIRS, AM_POSTPROCESS_PO_MAKEFILE): Eliminate uses of 'eval'. * gnulib-tool (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am, func_create_testdir, func_create_megatestdir): Emit a Makefile.am that requires Automake >= 1.11. -------------------------------------------------------------------------------- commit 98993f9d1b2ed03007be9dbcdc6bd9fe2d49777b Author: Bruno Haible <bruno@clisp.org> Date: Mon Oct 22 20:32:41 2018 +0200 Fix failure of 'gnulib-tool --create-testdir' with all modules. * gnulib-tool (func_create_testdir): Exclude 'timevar' module. -------------------------------------------------------------------------------- commit 8b1d4a63e34f3893036d82f39c5680e845de5ddf Author: Bruno Haible <bruno@clisp.org> Date: Mon Sep 3 21:19:16 2018 +0200 gnulib-tool: Fix build order when $testsbase is a subdir of $sourcebase. Reported by Antoine Luong <antoine.luong@c-s.fr> in <https://lists.gnu.org/archive/html/bug-gnulib/2018-09/msg00008.html>. * gnulib-tool (func_import): For the tests, set a dotfirst flag. (func_emit_lib_Makefile_am): Consider the dotfirst flag. (func_emit_tests_Makefile_am): Don't consider the dotfirst flag. -------------------------------------------------------------------------------- commit a1276e5bf2286afec7b0445040be05cad858cdd1 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Tue Jul 17 15:20:39 2018 -0700 gnulib-tool: limit line length for git send-email * gnulib-tool (func_import): Break actioncmd log line into multiple lines. -------------------------------------------------------------------------------- commit 589e96475f8f2d21a83405ab0672ce95091b80e5 Author: Bruno Haible <bruno@clisp.org> Date: Fri Dec 29 00:29:23 2017 +0100 gnulib-tool: Make --conditional-dependencies work better. Reported by Dmitry Selyutin <ghostman.sd@gmail.com>. * gnulib-tool (Options): Don't reject the combination of --conditional-dependencies with --with-tests. (func_emit_autoconf_snippets): Add argument referenceable_modules. Don't reference $modules. (func_import, func_create_testdir): Pass it. -------------------------------------------------------------------------------- commit cd58dba367a3b8ffbebb23f2099a820106197fae Author: Bruno Haible <bruno@clisp.org> Date: Sun Oct 29 16:57:32 2017 +0100 gnulib-tool: Avoid unnecessary config.h.in remaking in testdirs. * gnulib-tool (func_create_testdir): Use workaround against 'autoheader' bug reported at <https://savannah.gnu.org/support/index.php?109406>. -------------------------------------------------------------------------------- commit 87d14d357f694338acdb8745cea7304ff623ce47 Author: Bruno Haible <bruno@clisp.org> Date: Mon Jun 12 01:38:57 2017 +0200 gnulib-tool: Clean up after autotools. * gnulib-tool (func_create_testdir, func_create_megatestdir): Remove useless directory left over by the Autotools. -------------------------------------------------------------------------------- commit 30459fe101541698ec704acb224946d73676750e Author: Bruno Haible <bruno@clisp.org> Date: Thu Jun 8 15:09:31 2017 +0200 gnulib-tool: Fix bug in func_symlink_if_changed, from 2006-11-13. * gnulib-tool (func_symlink_target): New function, extracted from func_symlink. (func_symlink, func_symlink_if_changed): Use it. -------------------------------------------------------------------------------- commit 306be564ba47ec412ca158f66ffa90a058f5253b Author: Bruno Haible <bruno@clisp.org> Date: Mon May 22 01:39:59 2017 +0200 gnulib-tool: Add options to create hard links. * gnulib-tool (func_usage): Document options --hardlink, --local-hardlink, --more-hardlinks. (func_symlink): Renamed from func_ln. (func_symlink_if_changed): Renamed from func_ln_if_changed. (func_hardlink): New function. (copymode, lcopymode): New variables. (symbolic, lsymbolic): Remove variables. (Options): Implement options --hardlink, --local-hardlink, --more-hardlinks. (func_should_link): Renamed from func_should_symlink. Set copyaction. (func_add_file, func_update_file): Update invocation of func_should_link. Invoke func_hardlink when appropriate. (func_import): Update comments. (func_create_testdir): Update invocation of func_should_link. Invoke func_hardlink when appropriate. Finally, invoke 'git update-index --refresh' to mitigate the effects of the hard links on git. -------------------------------------------------------------------------------- commit f5142421c62024efa22cd4429100c4d9c1cc2ac4 Author: Bruno Haible <bruno@clisp.org> Date: Sat May 20 13:24:37 2017 +0200 gnulib-tool: Don't create hard links between gnulib and its testdirs. * gnulib-tool (func_create_testdir): Don't invoke 'ln'. -------------------------------------------------------------------------------- commit 0414a24cf57f1569b0b4f2a0f22898a0943dfc14 Author: Bruno Haible <bruno@clisp.org> Date: Mon May 15 23:13:57 2017 +0200 gnulib-tool: Fix generated code when libtests contains module 'alloca'. * gnulib-tool (func_emit_tests_Makefile_am): For libtests.a, use @ALLOCA@, not @LTALLOCA@. -------------------------------------------------------------------------------- commit a7bd2403d2d3e49a8698495e74cdbe6a5261128a Author: Bruno Haible <bruno@clisp.org> Date: Thu Apr 20 21:27:40 2017 +0200 verify tests: Fix spurious failure with parallel make. * gnulib-tool (func_emit_tests_Makefile_am): Emit initialization of EXTRA_PROGRAMS. * tests/test-verify.sh: Build test-verify-try.o, not test-verify.o. * tests/test-verify-try.c: New file. * modules/verify-tests (Files): Add it. (EXTRA_PROGRAMS): Add test-verify-try. (MOSTLYCLEANFILES): Update accordingly. Reported by Adam James Stewart <ajstewart@anl.gov>. -------------------------------------------------------------------------------- commit 363135016c25696d7a173094715e7f3f2dda3596 Author: Bruno Haible <bruno@clisp.org> Date: Wed Mar 15 23:24:03 2017 +0100 gnulib-tool: Don't produce a tests directory with only snippet .h files. * gnulib-tool (func_modules_transitive_closure_separately): If testsrelated_modules ends up with no "real" modules, aside from modules with applicability 'all', set it to empty. -------------------------------------------------------------------------------- commit f30205c5d59bab2c035165158e7d5d65b07b8363 Author: Mathieu Lirzin <mthl@gnu.org> Date: Tue Mar 14 12:19:40 2017 +0100 gnulib-tool: don't automatically distribute files from top/ * gnulib-tool (func_get_automake_snippet_unconditional): To be able to not distribute top/README-release by default, don't distribute files from top/ unconditionally. * modules/gnumakefile (Makefile.am): Distribute top/GNUmakefile. * modules/maintainer-makefile (Makefile.am): Distribute top/maint.mk. -------------------------------------------------------------------------------- commit 60e8b9303d8ce312bb2322d4801ed08678f93d1e Author: Paul Eggert <eggert@cs.ucla.edu> Date: Wed Jul 4 20:42:07 2018 -0700 gnulib-tool: minor tweaks for --gnu-make * gnulib-tool: Do not allow --gnu-make in test modes, since they all require automake. (func_emit_lib_Makefile_am): Don’t emit automake comment if --gnu-make. commit 8224d65142d7b8cea2b8721a7d09c2cd60d2d312 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Mon May 15 07:41:10 2017 -0700 gnulib-tool: improve GNU Make debugging * gnulib-tool (func_emit_lib_Makefile_am): Omit unnecessary echo. Report autoconf diagnostics when it fails, in the output makefile. commit fb8289f44a58c9462434eba8eaffd58c3f417c42 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Tue Mar 14 08:39:27 2017 -0700 gnulib-tool: fix typo in comment output * gnulib-tool (func_import): Fix typo with previous change. commit d6088547633af472625ab815452004c22fda6d58 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Mon Mar 13 15:50:44 2017 -0700 gnulib-tool: minor --gnu-make fixups * gnulib-tool (func_emit_lib_Makefile_am): Remove useless code that was a blind alley during implementation. Problem reported by Thien-Thi Nguyen in: http://lists.gnu.org/archive/html/bug-gnulib/2017-03/msg00029.html (func_import): Note the "--gnu-make" option in the output comment. commit dfbe4c0276701e42ffaed13a1c7a79003dc8fb30 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Sun Mar 12 19:18:53 2017 -0700 gnulib-tool: new option --gnu-make This is for applications like GNU Emacs that use GNU Make features instead of Automake. * doc/gnulib-tool.texi (Initial import): Mention --gnu-make. * doc/gnulib.texi (Unit test modules, Build robot for gnulib): Do not assume Automake. * gnulib-tool (func_determine_path_separator) (func_modules_transitive_closure, func_update_file) (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am) (func_import): Add support for --gnu-make. -------------------------------------------------------------------------------- commit f42ee040afd2e142951a9809b1d14550c29330e8 Author: Bruno Haible <bruno@clisp.org> Date: Sun Feb 19 15:15:11 2017 +0100 gnulib-tool: Avoid conflict of havelib-tests with --single-configure. * gnulib_tool (func_create_testdir): Avoid havelib-tests when --with-tests --single-configure is specified. -------------------------------------------------------------------------------- commit 31a08abd323ebffea3d4fb2d5a66f801fe8b3031 Author: Daiki Ueno <ueno@gnu.org> Date: Fri Dec 2 17:16:50 2016 +0100 gnulib-tool: fix the previous change * gnulib-tool (func_import): Relax the regex used for "LGPLv3+ or GPLv2" rewriting. commit 27d1d32a202b6b2115d5c2e287e3f5f1090032e5 Author: Daiki Ueno <ueno@gnu.org> Date: Fri Dec 2 16:56:11 2016 +0100 gnulib-tool: fix the previous change * gnulib-tool (func_import): Relax the regex for the end marker of original license text. commit 1aa6e23bd2487a7c3bd07cf693e6d968f74d951a Author: Nikos Mavrogiannopoulos <nmav@gnutls.org> Date: Mon Nov 21 21:15:25 2016 +0100 gnulib-tool: properly list the LGPL3orGPLv2 license * gnulib-tool (func_import): Adhere to the license guideline when rewriting the license text to "LGPLv3+ or GPLv2": https://www.gnu.org/prep/maintain/maintain.html#Licensing-of-GNU-Packages commit 567bbf7b7b14b31385801b1fee47acfc5b6d2b01 Author: Bruno Haible <bruno@clisp.org> Date: Sun Nov 13 04:12:26 2016 +0100 gnulib-tool: Support for the dual "LGPLv3+ or GPLv2" license. * gnulib-tool (--lgpl): Accept value 3orGPLv2. (func_import): Extend determination of license_incompatibilities. (func_create_testdir): Extend table of license compatibility. Handle also the licenses GPLv3+, GPL, LGPLv3+. -------------------------------------------------------------------------------- commit ff9debcf75301805b1db925cdcdfb248541c576d Author: Bruno Haible <bruno@clisp.org> Date: Sat Oct 15 15:51:20 2016 +0200 Avoid gnulib-tool warnings about the dependencies of 'parse-datetime'. * gnulib-tool (func_get_license): Special-case the 'parse-datetime' module. -------------------------------------------------------------------------------- commit 932a1ae7ba56a9a3da52287ac028017323269d44 Author: Bruno Haible <bruno@clisp.org> Date: Sun Oct 16 14:11:18 2016 +0200 gnulib-tool: Make --create-testdir on all modules work again. * gnulib-tool (func_create_testdir): Don't include the non-recursive-gnulib-prefix-hack module. -------------------------------------------------------------------------------- commit c09c24932066ecee81756adf2fca840b7c146e9d Author: Bruno Haible <bruno@clisp.org> Date: Thu Jun 8 14:45:39 2017 +0200 gnulib-tool: Fix bug in func_ln_s, from 2016-01-15. * gnulib-tool (func_ln_s): Determine cp_src correctly. commit d9958eb1eb951f950f9b321419965001b1368a38 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Sun Jan 24 14:24:35 2016 -0800 gnulib-tool: don't give up on ln -s so easily * gnulib-tool (func_ln_s): Don't give up on a later ln -s merely because an earlier one failed. The targets could be on different file systems. Problem reported by KO Myung-Hun in: http://lists.gnu.org/archive/html/bug-gnulib/2016-01/msg00081.html commit 350f2c6fb569f42f0a8ff47fd5b7442f24f0e658 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Fri Jan 15 10:12:41 2016 -0800 * gnulib-tool: fix stray debug line in previous patch commit 0e50dd0071be89825810dbf4c2310663dcb77767 Author: Paul Eggert <eggert@cs.ucla.edu> Date: Wed May 1 13:39:22 2013 +0900 gnulib-tool: don't assume ln -s works * gnulib-tool (func_ln_s): New function. (func_ln): Use it. -------------------------------------------------------------------------------- commit 49137e3bc6a2b3fd83c502a514e4a3b89fc1571c Author: Bruno Haible <bruno@clisp.org> Date: Thu Feb 14 20:50:57 2019 +0100 gnulib-tool: Improve handling of multiple --local-dir options. * doc/gnulib.texi (Extending Gnulib): Explain how multiple --local-dir options work. * gnulib-tool (func_path_prepend): Remove function. (func_path_foreach): Make IFS handling more robust. (local_gnulib_path): Collect --local-dir values using func_path_append, not func_path_prepend. (func_determine_path_separator): Make IFS handling more robust. (func_lookup_file_cb): New function. (func_lookup_file): Rewritten to use func_lookup_file_cb instead of func_lookup_local_file. Apply the patches in the reverse order of their origin in $local_gnulib_path. (func_count_relative_local_gnulib_path): Make IFS handling more robust. * NEWS: Mention that the first --local-dir option is the one with highest priority. commit 55c6f22b8043843aa7cf6843326eb4abed4de75c Author: Pavel Raiskup <praiskup@redhat.com> Date: Sat Nov 21 14:09:15 2015 +0100 gnulib-tool: allow multiple --local-dir usage * gnulib-tool: Use --local-dir to construct compound $local_gnulib_path path instead of $local_gnulib_dir. Determine PATH_SEPARATOR early. (local_gnulib_dir): Rename into $local_gnulib_path everywhere. (func_gnulib_dir): Cut out PATH_SEPARATOR detection code into func_determine_path_separator because that needs to be detected earlier now. (func_determine_path_separator): New function. (func_path_foreach, func_path_foreach_inner): New functions. (func_path_prepend, func_path_append): Likewise. (func_lookup_local_file, func_lookup_local_file_cb): Likewise. (func_lookup_file, func_all_modules): Use new functions to work with local_gnulib_path. (func_modules_in_dir, func_exists_module): New callbacks for func_path_foreach. (func_exists_module, func_get_tests_module): Likewise. (func_is_local_file, func_should_symlink): New helper methods. (func_add_file, func_update_file): Use new func_should_symlink instead, DRY. (func_reconstruct_cached_local_gnulib_path): New helper. (func_reconstruct_cached_dir): New callback. (func_import): The cached_local_gnulib_dir renamed to cached_local_gnulib_path similarly to local_gnulib_dir. Use new func_reconstruct_cached_local_gnulib_path. (func_count_relative_local_gnulib_path): New sub-method. (func_create_testdir): Use func_should_symlink, DRY. (func_create_megatestdir): Use new functions to work with local_gnulib_path correctly. (func_append_local_dir): New helper. -------------------------------------------------------------------------------- commit 63ce1a2103dd4452f7bd5bc873a982e03ed52427 Author: Pavel Raiskup <praiskup@redhat.com> Date: Tue Oct 6 13:20:05 2015 +0200 gnulib-tool: fix tests of 'extensions' module This complements f8fe25fab60e3c687a124 commit. * gnulib-tool (func_emit_pre_early_macros): New function, it wraps emitting of initial gl_EARLY macros. (func_import, func_create_testdir): All dumps of gl_PROG_AR_RANLIB replaced with func_emit_pre_early_macros call. commit f8fe25fab60e3c687a12446984bb475342956bb8 Author: Pavel Raiskup <praiskup@redhat.com> Date: Fri Sep 25 11:25:03 2015 -0700 gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash The gl_PROG_AR_RANLIB (it is always called by gl_EARLY) sets AR and ARFLAGS variables. Doing this unconditionally could break later Automake's AM_PROG_AR invocation (at least it's AC_CHECK_TOOLS call to detect correct 'ar' binary). Original purpose of the gl_PROG_AR_RANLIB was only to handle the Amsterdam Compiler Kit, so make the previous code to have effects only on ACK, and rather automatically call the Automake's AM_PROG_AR as soon as possible to decide other cases. References: http://lists.gnu.org/archive/html/bug-gnulib/2015-07/msg00001.html * m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): AC_BEFORE AM_PROG_AR. Set the AR/ARFLAGS to ACK defaults OR call AM_PROG_AR. If neither is possible, keep setting AR/ARFLAGS to reasonable defaults. * gnulib-tool (func_import): Put the gl_USE_SYSTEM_EXTENSIONS right before gl_PROG_AR_RANLIB into gnulib-comp.m4 (if the 'extensions' module is used. * modules/extensions (configure.ac-early): Remove as this snippet is added to gnulib-comp.m4 earlier anyway. commit 9bdf6c8a0cdeb13c12e4b65dee9538c5468dbe1d Author: Bruno Haible <bruno@clisp.org> Date: Sun Aug 19 14:06:50 2012 +0200 gnulib-tool: Remove old file names from .cvsignore, .gitignore. * gnulib-tool (func_update_ignorelist): Don't use 'join -v 1' command on the list of removed files. -------------------------------------------------------------------------------- ================================================================================ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0015045�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/.cppi-disable�����������������������������������������������������������0000664�0000000�0000000�00000000710�14110572173�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������alloca.in.h error.h exit.h fnmatch.in.h fts.c fts_.h getaddrinfo.h getdelim.h getline.h getndelim2.h getopt.c getopt.h getopt1.c getopt.in.h getopt_int.h getpagesize.h getpass.c gettext.h localcharset.h malloca.h mbchar.h mbuiter.h md5.h obstack.h printf-args.h printf-parse.h regcomp.c regex.c regex.h regex_internal.c regex_internal.h stat-time.h stdbool.in.h stdint.in.h strnlen1.h strtoul.c sys_socket.in.h time_r.h utimecmp.h vasnprintf.h vasprintf.h ��������������������������������������������������������gnulib-20210822~d383792/lib/.cvsignore��������������������������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile alloca.h fnmatch.h fts.h getdate.c getdate.tab.c getopt.h lstat.c poll.h ref-add.sed ref-del.sed search.h stat.c stdbool.h stdint.h sysexit.h t-fpending unlocked-io.h ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/Makefile����������������������������������������������������������������0000664�0000000�0000000�00000000216�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Run "make check" to ensure that the code passes some simple tests, # usually (always?) not involving compilation. all: check: ./t-idcache ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/README������������������������������������������������������������������0000664�0000000�0000000�00000000236�14110572173�0015726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The files in this directory are used in many GNU packages, including coreutils, diffutils, and tar. The autoconf tests required for these files are in ../m4. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/_Exit.c�����������������������������������������������������������������0000664�0000000�0000000�00000001525�14110572173�0016264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <unistd.h> void _Exit (int status) { _exit (status); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/_Noreturn.h�������������������������������������������������������������0000664�0000000�0000000�00000004146�14110572173�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that a function does not return. Copyright (C) 2011-2021 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 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/>. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/accept.c����������������������������������������������������������������0000664�0000000�0000000�00000002562�14110572173�0016455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* accept.c --- wrappers for Windows accept function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef accept int rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { SOCKET fh = accept (sock, addr, addrlen); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/accept4.c���������������������������������������������������������������0000664�0000000�0000000�00000010117�14110572173�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Accept a connection on a socket, with specific opening flags. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <sys/socket.h> #include <errno.h> #include <fcntl.h> #include "binary-io.h" #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #ifndef SOCK_CLOEXEC # define SOCK_CLOEXEC 0 #endif #ifndef SOCK_NONBLOCK # define SOCK_NONBLOCK 0 #endif int accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags) { int fd; #if HAVE_DECL_ACCEPT4 # undef accept4 /* Try the system call first, if it exists. (We may be running with a glibc that has the function but with an older kernel that lacks it.) */ { /* Cache the information whether the system call really exists. */ static int have_accept4_really; /* 0 = unknown, 1 = yes, -1 = no */ if (have_accept4_really >= 0) { int result = accept4 (sockfd, addr, addrlen, flags); if (!(result < 0 && errno == ENOSYS)) { have_accept4_really = 1; return result; } have_accept4_really = -1; } } #endif /* Check the supported flags. */ if ((flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK | O_TEXT | O_BINARY)) != 0) { errno = EINVAL; return -1; } fd = accept (sockfd, addr, addrlen); if (fd < 0) return -1; #if SOCK_CLOEXEC # if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ if (flags & SOCK_CLOEXEC) { HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (fd); HANDLE new_handle; int nfd; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ FALSE, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { close (fd); errno = EBADF; /* arbitrary */ return -1; } /* Closing fd before allocating the new fd ensures that the new fd will have the minimum possible value. */ close (fd); nfd = _open_osfhandle ((intptr_t) new_handle, O_NOINHERIT | (flags & (O_TEXT | O_BINARY))); if (nfd < 0) { CloseHandle (new_handle); return -1; } return nfd; } # else /* Unix API. */ if (flags & SOCK_CLOEXEC) { int fcntl_flags; if ((fcntl_flags = fcntl (fd, F_GETFD, 0)) < 0 || fcntl (fd, F_SETFD, fcntl_flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } # endif #endif #if SOCK_NONBLOCK if (flags & SOCK_NONBLOCK) { int fcntl_flags; if ((fcntl_flags = fcntl (fd, F_GETFL, 0)) < 0 || fcntl (fd, F_SETFL, fcntl_flags | O_NONBLOCK) == -1) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } #endif #if O_BINARY if (flags & O_BINARY) set_binary_mode (fd, O_BINARY); else if (flags & O_TEXT) set_binary_mode (fd, O_TEXT); #endif return fd; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/access.c����������������������������������������������������������������0000664�0000000�0000000�00000001744�14110572173�0016460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the access rights of a file. Copyright (C) 2019-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <fcntl.h> #include <io.h> int access (const char *file, int mode) { if ((mode & X_OK) != 0) mode = (mode & ~X_OK) | R_OK; return _access (file, mode); } ����������������������������gnulib-20210822~d383792/lib/acl-errno-valid.c�������������������������������������������������������0000664�0000000�0000000�00000003131�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether ACLs are well supported on this system. Copyright 2013-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <acl.h> #include <errno.h> /* Return true if errno value ERRNUM indicates that ACLs are well supported on this system. ERRNUM should be an errno value obtained after an ACL-related system call fails. */ bool acl_errno_valid (int errnum) { /* Recognize some common errors such as from an NFS mount that does not support ACLs, even when local drives do. */ switch (errnum) { case EBUSY: return false; case EINVAL: return false; #if defined __APPLE__ && defined __MACH__ case ENOENT: return false; #endif case ENOSYS: return false; #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP # if ENOTSUP != ENOSYS /* Needed for the MS-Windows port of GNU Emacs. */ case ENOTSUP: return false; # endif #endif case EOPNOTSUPP: return false; default: return true; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acl-internal.c����������������������������������������������������������0000664�0000000�0000000�00000036235�14110572173�0017573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file has a nontrivial ACL. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" #if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial. */ int acl_extended_nontrivial (acl_t acl) { /* acl is non-trivial if it is non-empty. */ return (acl_entries (acl) > 0); } # else /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ int acl_access_nontrivial (acl_t acl) { /* acl is non-trivial if it has some entries other than for "user::", "group::", and "other::". Normally these three should be present at least, allowing us to write return (3 < acl_entries (acl)); but the following code is more robust. */ # if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Cygwin >= 2.5 */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one > 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) { acl_tag_t tag; if (acl_get_tag_type (ace, &tag) < 0) return -1; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) return 1; } return got_one; # elif HAVE_ACL_TO_SHORT_TEXT /* IRIX */ /* Don't use acl_get_entry: it is undocumented. */ int count = acl->acl_cnt; int i; for (i = 0; i < count; i++) { acl_entry_t ace = &acl->acl_entry[i]; acl_tag_t tag = ace->ae_tag; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER_OBJ)) return 1; } return 0; # elif HAVE_ACL_FREE_TEXT /* Tru64 */ /* Don't use acl_get_entry: it takes only one argument and does not work. */ int count = acl->acl_num; acl_entry_t ace; for (ace = acl->acl_first; count > 0; ace = ace->next, count--) { acl_tag_t tag; acl_perm_t perm; tag = ace->entry->acl_type; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) return 1; perm = ace->entry->acl_perm; /* On Tru64, perm can also contain non-standard bits such as PERM_INSERT, PERM_DELETE, PERM_MODIFY, PERM_LOOKUP, ... */ if ((perm & ~(ACL_READ | ACL_WRITE | ACL_EXECUTE)) != 0) return 1; } return 0; # else errno = ENOSYS; return -1; # endif } int acl_default_nontrivial (acl_t acl) { /* acl is non-trivial if it is non-empty. */ return (acl_entries (acl) > 0); } # endif #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ /* Test an ACL retrieved with GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, aclent_t *entries) { int i; for (i = 0; i < count; i++) { aclent_t *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ || ace->a_type == GROUP_OBJ || ace->a_type == OTHER_OBJ /* Note: Cygwin does not return a CLASS_OBJ ("mask:") entry sometimes. */ || ace->a_type == CLASS_OBJ)) return 1; } return 0; } # ifdef ACE_GETACL /* A shortcut for a bitmask. */ # define NEW_ACE_WRITEA_DATA (NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA) /* Test an ACL retrieved with ACE_GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_ace_nontrivial (int count, ace_t *entries) { int i; /* The flags in the ace_t structure changed in a binary incompatible way when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. How to distinguish the two conventions at runtime? In the old convention, usually three ACEs have a_flags = ACE_OWNER / ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. In the new convention, these values are not used. */ int old_convention = 0; for (i = 0; i < count; i++) if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) { old_convention = 1; break; } if (old_convention) /* Running on Solaris 10. */ for (i = 0; i < count; i++) { ace_t *ace = &entries[i]; /* Note: If ace->a_flags = ACE_OWNER, ace->a_who is the st_uid from stat(). If ace->a_flags = ACE_GROUP, ace->a_who is the st_gid from stat(). We don't need to check ace->a_who in these cases. */ if (!(ace->a_type == OLD_ALLOW && (ace->a_flags == OLD_ACE_OWNER || ace->a_flags == OLD_ACE_GROUP || ace->a_flags == OLD_ACE_OTHER))) return 1; } else { /* Running on Solaris 10 (newer version) or Solaris 11. */ unsigned int access_masks[6] = { 0, /* owner@ deny */ 0, /* owner@ allow */ 0, /* group@ deny */ 0, /* group@ allow */ 0, /* everyone@ deny */ 0 /* everyone@ allow */ }; for (i = 0; i < count; i++) { ace_t *ace = &entries[i]; unsigned int index1; unsigned int index2; if (ace->a_type == NEW_ACE_ACCESS_ALLOWED_ACE_TYPE) index1 = 1; else if (ace->a_type == NEW_ACE_ACCESS_DENIED_ACE_TYPE) index1 = 0; else return 1; if (ace->a_flags == NEW_ACE_OWNER) index2 = 0; else if (ace->a_flags == (NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP)) index2 = 2; else if (ace->a_flags == NEW_ACE_EVERYONE) index2 = 4; else return 1; access_masks[index1 + index2] |= ace->a_access_mask; } /* The same bit shouldn't be both allowed and denied. */ if (access_masks[0] & access_masks[1]) return 1; if (access_masks[2] & access_masks[3]) return 1; if (access_masks[4] & access_masks[5]) return 1; /* Check minimum masks. */ if ((NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER) & ~ access_masks[1]) return 1; access_masks[1] &= ~(NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER); if ((NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE) & ~ access_masks[5]) return 1; access_masks[5] &= ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE); /* Check the allowed or denied bits. */ switch ((access_masks[0] | access_masks[1]) & ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } switch ((access_masks[2] | access_masks[3]) & ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } switch ((access_masks[4] | access_masks[5]) & ~(NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } /* Check that the NEW_ACE_WRITE_DATA and NEW_ACE_APPEND_DATA bits are either both allowed or both denied. */ if (((access_masks[0] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[0] & NEW_ACE_APPEND_DATA) != 0)) return 1; if (((access_masks[2] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[2] & NEW_ACE_APPEND_DATA) != 0)) return 1; if (((access_masks[4] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[4] & NEW_ACE_APPEND_DATA) != 0)) return 1; } return 0; } # endif #elif USE_ACL && HAVE_GETACL /* HP-UX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, struct acl_entry *entries) { int i; if (count > 3) return 1; for (i = 0; i < count; i++) { struct acl_entry *ace = &entries[i]; if (ace->uid != ACL_NSUSER && ace->gid != ACL_NSGROUP) return 1; } return 0; } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int aclv_nontrivial (int count, struct acl *entries) { int i; for (i = 0; i < count; i++) { struct acl *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ || ace->a_type == CLASS_OBJ || ace->a_type == OTHER_OBJ)) return 1; } return 0; } # endif #elif USE_ACL && (HAVE_ACLX_GET || HAVE_STATACL) /* AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (struct acl *a) { /* The normal way to iterate through an ACL is like this: struct acl_entry *ace; for (ace = a->acl_ext; ace != acl_last (a); ace = acl_nxt (ace)) { struct ace_id *aei; switch (ace->ace_type) { case ACC_PERMIT: case ACC_DENY: case ACC_SPECIFY: ...; } for (aei = ace->ace_id; aei != id_last (ace); aei = id_nxt (aei)) ... } */ return (acl_last (a) != a->acl_ext ? 1 : 0); } # if HAVE_ACLX_GET && defined ACL_AIX_WIP /* newer AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nfs4_nontrivial (nfs4_acl_int_t *a) { # if 1 /* let's try this first */ return (a->aclEntryN > 0 ? 1 : 0); # else int count = a->aclEntryN; int i; for (i = 0; i < count; i++) { nfs4_ace_int_t *ace = &a->aclEntry[i]; if (!((ace->flags & ACE4_ID_SPECIAL) != 0 && (ace->aceWho.special_whoid == ACE4_WHO_OWNER || ace->aceWho.special_whoid == ACE4_WHO_GROUP || ace->aceWho.special_whoid == ACE4_WHO_EVERYONE) && ace->aceType == ACE4_ACCESS_ALLOWED_ACE_TYPE && ace->aceFlags == 0 && (ace->aceMask & ~(ACE4_READ_DATA | ACE4_LIST_DIRECTORY | ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_EXECUTE)) == 0)) return 1; } return 0; # endif } # endif #elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ /* Test an ACL retrieved with ACL_GET. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, struct acl *entries) { int i; for (i = 0; i < count; i++) { struct acl *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ || ace->a_type == CLASS_OBJ || ace->a_type == OTHER_OBJ)) return 1; } return 0; } #endif void free_permission_context (struct permission_context *ctx) { #if USE_ACL # if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ if (ctx->acl) acl_free (ctx->acl); # if !HAVE_ACL_TYPE_EXTENDED if (ctx->default_acl) acl_free (ctx->default_acl); # endif # elif defined GETACL /* Solaris, Cygwin < 2.5 */ free (ctx->entries); # ifdef ACE_GETACL free (ctx->ace_entries); # endif # elif HAVE_GETACL /* HP-UX */ # if HAVE_ACLV_H # endif # elif HAVE_STATACL /* older AIX */ # elif HAVE_ACLSORT /* NonStop Kernel */ # endif #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acl-internal.h����������������������������������������������������������0000664�0000000�0000000�00000021604�14110572173�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal implementation of access control lists. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include "acl.h" #include <stdbool.h> #include <stdlib.h> /* All systems define the ACL related API in <sys/acl.h>. */ #if HAVE_SYS_ACL_H # include <sys/acl.h> #endif #if defined HAVE_FACL && ! defined GETACLCNT && defined ACL_CNT # define GETACLCNT ACL_CNT #endif /* On Linux and Cygwin >= 2.5, additional ACL related API is available in <acl/libacl.h>. */ #ifdef HAVE_ACL_LIBACL_H # include <acl/libacl.h> #endif /* On HP-UX >= 11.11, additional ACL API is available in <aclv.h>. */ #if HAVE_ACLV_H # include <sys/types.h> # include <aclv.h> /* HP-UX 11.11 lacks these declarations. */ extern int acl (char *, int, int, struct acl *); extern int aclsort (int, int, struct acl *); #endif #include <errno.h> #include <limits.h> #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false # define fchmod(fd, mode) (-1) #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef ACL_INTERNAL_INLINE # define ACL_INTERNAL_INLINE _GL_INLINE #endif #if USE_ACL # if HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # ifndef MIN_ACL_ENTRIES # define MIN_ACL_ENTRIES 4 # endif /* POSIX 1003.1e (draft 17) */ # ifdef HAVE_ACL_GET_FD /* Most platforms have a 1-argument acl_get_fd, only OSF/1 has a 2-argument macro(!). */ # if HAVE_ACL_FREE_TEXT /* OSF/1 */ ACL_INTERNAL_INLINE acl_t rpl_acl_get_fd (int fd) { return acl_get_fd (fd, ACL_TYPE_ACCESS); } # undef acl_get_fd # define acl_get_fd rpl_acl_get_fd # endif # else # define HAVE_ACL_GET_FD false # undef acl_get_fd # define acl_get_fd(fd) (NULL) # endif /* POSIX 1003.1e (draft 17) */ # ifdef HAVE_ACL_SET_FD /* Most platforms have a 2-argument acl_set_fd, only OSF/1 has a 3-argument macro(!). */ # if HAVE_ACL_FREE_TEXT /* OSF/1 */ ACL_INTERNAL_INLINE int rpl_acl_set_fd (int fd, acl_t acl) { return acl_set_fd (fd, ACL_TYPE_ACCESS, acl); } # undef acl_set_fd # define acl_set_fd rpl_acl_set_fd # endif # else # define HAVE_ACL_SET_FD false # undef acl_set_fd # define acl_set_fd(fd, acl) (-1) # endif /* POSIX 1003.1e (draft 13) */ # if ! HAVE_ACL_FREE_TEXT # define acl_free_text(buf) acl_free (buf) # endif /* Linux-specific */ /* Cygwin >= 2.5 implements this function, but it returns 1 for all directories, thus is unusable. */ # if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__ # undef HAVE_ACL_EXTENDED_FILE # define HAVE_ACL_EXTENDED_FILE false # define acl_extended_file(name) (-1) # endif # if ! defined HAVE_ACL_FROM_MODE && ! defined HAVE_ACL_FROM_TEXT # define acl_from_mode (NULL) # endif /* Set to 0 if a file's mode is stored independently from the ACL. */ # if (HAVE_ACL_COPY_EXT_NATIVE && HAVE_ACL_CREATE_ENTRY_NP) || defined __sgi /* Mac OS X, IRIX */ # define MODE_INSIDE_ACL 0 # endif /* Return the number of entries in ACL. Return -1 and set errno upon failure to determine it. */ /* Define a replacement for acl_entries if needed. (Only Linux has it.) */ # if !HAVE_ACL_ENTRIES # define acl_entries rpl_acl_entries extern int acl_entries (acl_t); # endif # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial. */ extern int acl_extended_nontrivial (acl_t); # else /* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ extern int acl_access_nontrivial (acl_t); /* ACL is an ACL, from a file, stored as type ACL_TYPE_DEFAULT. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ extern int acl_default_nontrivial (acl_t); # endif # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ /* Set to 0 if a file's mode is stored independently from the ACL. */ # if defined __CYGWIN__ /* Cygwin */ # define MODE_INSIDE_ACL 0 # endif /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, aclent_t *entries) _GL_ATTRIBUTE_PURE; # ifdef ACE_GETACL /* Solaris 10 */ /* Test an ACL retrieved with ACE_GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE; /* Definitions for when the built executable is executed on Solaris 10 (newer version) or Solaris 11. */ /* For a_type. */ # define OLD_ALLOW 0 # define OLD_DENY 1 # define NEW_ACE_ACCESS_ALLOWED_ACE_TYPE 0 /* replaces ALLOW */ # define NEW_ACE_ACCESS_DENIED_ACE_TYPE 1 /* replaces DENY */ /* For a_flags. */ # define OLD_ACE_OWNER 0x0100 # define OLD_ACE_GROUP 0x0200 # define OLD_ACE_OTHER 0x0400 # define NEW_ACE_OWNER 0x1000 # define NEW_ACE_GROUP 0x2000 # define NEW_ACE_IDENTIFIER_GROUP 0x0040 # define NEW_ACE_EVERYONE 0x4000 /* For a_access_mask. */ # define NEW_ACE_READ_DATA 0x001 /* corresponds to 'r' */ # define NEW_ACE_WRITE_DATA 0x002 /* corresponds to 'w' */ # define NEW_ACE_APPEND_DATA 0x004 # define NEW_ACE_READ_NAMED_ATTRS 0x008 # define NEW_ACE_WRITE_NAMED_ATTRS 0x010 # define NEW_ACE_EXECUTE 0x020 # define NEW_ACE_DELETE_CHILD 0x040 # define NEW_ACE_READ_ATTRIBUTES 0x080 # define NEW_ACE_WRITE_ATTRIBUTES 0x100 # define NEW_ACE_DELETE 0x10000 # define NEW_ACE_READ_ACL 0x20000 # define NEW_ACE_WRITE_ACL 0x40000 # define NEW_ACE_WRITE_OWNER 0x80000 # define NEW_ACE_SYNCHRONIZE 0x100000 # endif # elif HAVE_GETACL /* HP-UX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, struct acl_entry *entries); # if HAVE_ACLV_H /* HP-UX >= 11.11 */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int aclv_nontrivial (int count, struct acl *entries); # endif # elif HAVE_ACLX_GET && 0 /* AIX */ /* TODO */ # elif HAVE_STATACL /* older AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (struct acl *a); # elif HAVE_ACLSORT /* NonStop Kernel */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, struct acl *entries); # endif /* Set to 1 if a file's mode is implicit by the ACL. */ # ifndef MODE_INSIDE_ACL # define MODE_INSIDE_ACL 1 # endif #endif struct permission_context { mode_t mode; #if USE_ACL # if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ acl_t acl; # if !HAVE_ACL_TYPE_EXTENDED acl_t default_acl; # endif bool acls_not_supported; # elif defined GETACL /* Solaris, Cygwin < 2.5 */ int count; aclent_t *entries; # ifdef ACE_GETACL int ace_count; ace_t *ace_entries; # endif # elif HAVE_GETACL /* HP-UX */ struct acl_entry entries[NACLENTRIES]; int count; # if HAVE_ACLV_H struct acl aclv_entries[NACLVENTRIES]; int aclv_count; # endif # elif HAVE_STATACL /* older AIX */ union { struct acl a; char room[4096]; } u; bool have_u; # elif HAVE_ACLSORT /* NonStop Kernel */ struct acl entries[NACLENTRIES]; int count; # endif #endif }; int get_permissions (const char *, int, mode_t, struct permission_context *); int set_permissions (struct permission_context *, const char *, int); void free_permission_context (struct permission_context *); _GL_INLINE_HEADER_END ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acl.h�������������������������������������������������������������������0000664�0000000�0000000�00000002335�14110572173�0015760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* acl.c - access control lists Copyright (C) 2002, 2008-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef _GL_ACL_H #define _GL_ACL_H 1 #include <stdbool.h> #include <sys/types.h> #include <sys/stat.h> bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST; int file_has_acl (char const *, struct stat const *); int qset_acl (char const *, int, mode_t); int set_acl (char const *, int, mode_t); int qcopy_acl (char const *, int, char const *, int, mode_t); int copy_acl (char const *, int, char const *, int, mode_t); int chmod_or_fchmod (char const *, int, mode_t); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acl_entries.c�����������������������������������������������������������0000664�0000000�0000000�00000004452�14110572173�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the number of entries in an ACL. Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Andreas Gruenbacher. */ #include <config.h> #include "acl-internal.h" /* This file assumes POSIX-draft like ACLs (Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */ /* Return the number of entries in ACL. Return -1 and set errno upon failure to determine it. */ int acl_entries (acl_t acl) { int count = 0; if (acl != NULL) { #if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* acl_get_entry returns 0 when it successfully fetches an entry, and -1/EINVAL at the end. */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one >= 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) count++; # else /* Linux, FreeBSD, Cygwin >= 2.5 */ /* acl_get_entry returns 1 when it successfully fetches an entry, and 0 at the end. */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one > 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) count++; if (got_one < 0) return -1; # endif #else /* IRIX, Tru64 */ # if HAVE_ACL_TO_SHORT_TEXT /* IRIX */ /* Don't use acl_get_entry: it is undocumented. */ count = acl->acl_cnt; # endif # if HAVE_ACL_FREE_TEXT /* Tru64 */ /* Don't use acl_get_entry: it takes only one argument and does not work. */ count = acl->acl_num; # endif #endif } return count; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acosf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0016307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse cosine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float acosf (float x) { return (float) acos ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/acosl.c�����������������������������������������������������������������0000664�0000000�0000000�00000020320�14110572173�0016307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arccos (inverse cosine) function with 'long double' argument. Copyright (C) 2003-2021 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/>. */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double acosl (long double x) { return acos (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/e_asinl.c and glibc/sysdeps/ieee754/ldbl-128/e_acosl.c. */ /* Long double expansions contributed by Stephen L. Moshier <moshier@na-net.ornl.gov> */ /* asin(x) * Method : * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... * we approximate asin(x) on [0,0.5] by * asin(x) = x + x*x^2*R(x^2) * Between .5 and .625 the approximation is * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) * For x in [0.625,1] * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) * * Special cases: * if x is NaN, return x itself; * if |x|>1, return NaN with invalid signal. * */ static const long double one = 1.0L, huge = 1.0e+4932L, pi = 3.1415926535897932384626433832795028841972L, pio2_hi = 1.5707963267948966192313216916397514420986L, pio2_lo = 4.3359050650618905123985220130216759843812E-35L, pio4_hi = 7.8539816339744830961566084581987569936977E-1L, /* coefficient for R(x^2) */ /* asin(x) = x + x^3 pS(x^2) / qS(x^2) 0 <= x <= 0.5 peak relative error 1.9e-35 */ pS0 = -8.358099012470680544198472400254596543711E2L, pS1 = 3.674973957689619490312782828051860366493E3L, pS2 = -6.730729094812979665807581609853656623219E3L, pS3 = 6.643843795209060298375552684423454077633E3L, pS4 = -3.817341990928606692235481812252049415993E3L, pS5 = 1.284635388402653715636722822195716476156E3L, pS6 = -2.410736125231549204856567737329112037867E2L, pS7 = 2.219191969382402856557594215833622156220E1L, pS8 = -7.249056260830627156600112195061001036533E-1L, pS9 = 1.055923570937755300061509030361395604448E-3L, qS0 = -5.014859407482408326519083440151745519205E3L, qS1 = 2.430653047950480068881028451580393430537E4L, qS2 = -4.997904737193653607449250593976069726962E4L, qS3 = 5.675712336110456923807959930107347511086E4L, qS4 = -3.881523118339661268482937768522572588022E4L, qS5 = 1.634202194895541569749717032234510811216E4L, qS6 = -4.151452662440709301601820849901296953752E3L, qS7 = 5.956050864057192019085175976175695342168E2L, qS8 = -4.175375777334867025769346564600396877176E1L, /* 1.000000000000000000000000000000000000000E0 */ /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) -0.0625 <= x <= 0.0625 peak relative error 3.3e-35 */ rS0 = -5.619049346208901520945464704848780243887E0L, rS1 = 4.460504162777731472539175700169871920352E1L, rS2 = -1.317669505315409261479577040530751477488E2L, rS3 = 1.626532582423661989632442410808596009227E2L, rS4 = -3.144806644195158614904369445440583873264E1L, rS5 = -9.806674443470740708765165604769099559553E1L, rS6 = 5.708468492052010816555762842394927806920E1L, rS7 = 1.396540499232262112248553357962639431922E1L, rS8 = -1.126243289311910363001762058295832610344E1L, rS9 = -4.956179821329901954211277873774472383512E-1L, rS10 = 3.313227657082367169241333738391762525780E-1L, sS0 = -4.645814742084009935700221277307007679325E0L, sS1 = 3.879074822457694323970438316317961918430E1L, sS2 = -1.221986588013474694623973554726201001066E2L, sS3 = 1.658821150347718105012079876756201905822E2L, sS4 = -4.804379630977558197953176474426239748977E1L, sS5 = -1.004296417397316948114344573811562952793E2L, sS6 = 7.530281592861320234941101403870010111138E1L, sS7 = 1.270735595411673647119592092304357226607E1L, sS8 = -1.815144839646376500705105967064792930282E1L, sS9 = -7.821597334910963922204235247786840828217E-2L, /* 1.000000000000000000000000000000000000000E0 */ asinr5625 = 5.9740641664535021430381036628424864397707E-1L; long double acosl (long double x) { long double t, p, q; if (x < 0.0L) { t = pi - acosl (-x); if (huge + x > one) /* return with inexact */ return t; } if (x >= 1.0L) /* |x|>= 1 */ { if (x == 1.0L) return 0.0L; /* return zero */ return (x - x) / (x - x); /* asin(|x|>1) is NaN */ } else if (x < 0.5L) /* |x| < 0.5 */ { if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* |x| < 2**-57 */ /* acos(0)=+-pi/2 with inexact */ return x * pio2_hi + x * pio2_lo; t = x * x; p = (((((((((pS9 * t + pS8) * t + pS7) * t + pS6) * t + pS5) * t + pS4) * t + pS3) * t + pS2) * t + pS1) * t + pS0) * t; q = (((((((( t + qS8) * t + qS7) * t + qS6) * t + qS5) * t + qS4) * t + qS3) * t + qS2) * t + qS1) * t + qS0; return pio2_hi - (x + x * (p / q) - pio2_lo); } else if (x < 0.625) /* 0.625 */ { t = x - 0.5625; p = ((((((((((rS10 * t + rS9) * t + rS8) * t + rS7) * t + rS6) * t + rS5) * t + rS4) * t + rS3) * t + rS2) * t + rS1) * t + rS0) * t; q = ((((((((( t + sS9) * t + sS8) * t + sS7) * t + sS6) * t + sS5) * t + sS4) * t + sS3) * t + sS2) * t + sS1) * t + sS0; return (pio2_hi - asinr5625) - (p / q - pio2_lo); } else return 2 * asinl (sqrtl ((1 - x) / 2)); } #endif #if 0 int main (void) { printf ("%.18Lg %.18Lg\n", acosl (1.0L), 1.5707963267948966192313216916397514420984L - 1.5707963267948966192313216916397514420984L); printf ("%.18Lg %.18Lg\n", acosl (0.7071067811865475244008443621048490392848L), 1.5707963267948966192313216916397514420984L - 0.7853981633974483096156608458198757210492L); printf ("%.18Lg %.18Lg\n", acosl (0.5L), 1.5707963267948966192313216916397514420984L - 0.5235987755982988730771072305465838140328L); printf ("%.18Lg %.18Lg\n", acosl (0.3090169943749474241022934171828190588600L), 1.5707963267948966192313216916397514420984L - 0.3141592653589793238462643383279502884196L); printf ("%.18Lg %.18Lg\n", acosl (-1.0L), 1.5707963267948966192313216916397514420984L - -1.5707963267948966192313216916397514420984L); printf ("%.18Lg %.18Lg\n", acosl (-0.7071067811865475244008443621048490392848L), 1.5707963267948966192313216916397514420984L - -0.7853981633974483096156608458198757210492L); printf ("%.18Lg %.18Lg\n", acosl (-0.5L), 1.5707963267948966192313216916397514420984L - -0.5235987755982988730771072305465838140328L); printf ("%.18Lg %.18Lg\n", acosl (-0.3090169943749474241022934171828190588600L), 1.5707963267948966192313216916397514420984L - -0.3141592653589793238462643383279502884196L); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/af_alg.c����������������������������������������������������������������0000664�0000000�0000000�00000015276�14110572173�0016435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* af_alg.c - Compute message digests from file streams and buffers. Copyright (C) 2018-2021 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 Matteo Croce <mcroce@redhat.com>, 2018. */ #include <config.h> #include "af_alg.h" #if USE_LINUX_CRYPTO_API #include <unistd.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <linux/if_alg.h> #include <sys/stat.h> #include <sys/sendfile.h> #include <sys/socket.h> #include "sys-limits.h" #define BLOCKSIZE 32768 /* Return a newly created socket for ALG. On error, return a negative error number. */ static int alg_socket (char const *alg) { struct sockaddr_alg salg = { .salg_family = AF_ALG, .salg_type = "hash", }; /* Copy alg into salg.salg_name, without calling strcpy nor strlen. */ for (size_t i = 0; (salg.salg_name[i] = alg[i]) != '\0'; i++) if (i == sizeof salg.salg_name - 1) /* alg is too long. */ return -EINVAL; int cfd = socket (AF_ALG, SOCK_SEQPACKET | SOCK_CLOEXEC, 0); if (cfd < 0) return -EAFNOSUPPORT; int ofd = (bind (cfd, (struct sockaddr *) &salg, sizeof salg) == 0 ? accept4 (cfd, NULL, 0, SOCK_CLOEXEC) : -1); close (cfd); return ofd < 0 ? -EAFNOSUPPORT : ofd; } int afalg_buffer (const char *buffer, size_t len, const char *alg, void *resblock, ssize_t hashlen) { /* On Linux < 4.9, the value for an empty stream is wrong (all zeroes). See <https://patchwork.kernel.org/patch/9308641/>. This was not fixed properly until November 2016, see <https://patchwork.kernel.org/patch/9434741/>. */ if (len == 0) return -EAFNOSUPPORT; int ofd = alg_socket (alg); if (ofd < 0) return ofd; int result; for (;;) { ssize_t size = (len > BLOCKSIZE ? BLOCKSIZE : len); if (send (ofd, buffer, size, MSG_MORE) != size) { result = -EAFNOSUPPORT; break; } buffer += size; len -= size; if (len == 0) { result = read (ofd, resblock, hashlen) == hashlen ? 0 : -EAFNOSUPPORT; break; } } close (ofd); return result; } int afalg_stream (FILE *stream, const char *alg, void *resblock, ssize_t hashlen) { int ofd = alg_socket (alg); if (ofd < 0) return ofd; /* If STREAM's size is known and nonzero and not too large, attempt sendfile to pipe the data. The nonzero restriction avoids issues with /proc files that pretend to be empty, and lets the classic read-write loop work around an empty-input bug noted below. */ int fd = fileno (stream); int result; struct stat st; off_t off = ftello (stream); if (0 <= off && fstat (fd, &st) == 0 && (S_ISREG (st.st_mode) || S_TYPEISSHM (&st) || S_TYPEISTMO (&st)) && off < st.st_size && st.st_size - off < SYS_BUFSIZE_MAX) { /* Make sure the offset of fileno (stream) reflects how many bytes have been read from stream before this function got invoked. Note: fflush on an input stream after ungetc does not work as expected on some platforms. Therefore this situation is not supported here. */ if (fflush (stream)) result = -EIO; else { off_t nbytes = st.st_size - off; if (sendfile (ofd, fd, &off, nbytes) == nbytes) { if (read (ofd, resblock, hashlen) == hashlen) { /* The input buffers of stream are no longer valid. */ if (lseek (fd, off, SEEK_SET) != (off_t)-1) result = 0; else /* The file position of fd has not changed. */ result = -EAFNOSUPPORT; } else /* The file position of fd has not changed. */ result = -EAFNOSUPPORT; } else /* The file position of fd has not changed. */ result = -EAFNOSUPPORT; } } else { /* sendfile not possible, do a classic read-write loop. */ /* Number of bytes to seek (backwards) in case of error. */ off_t nseek = 0; for (;;) { char buf[BLOCKSIZE]; /* When the stream is not seekable, start with a single-byte block, so that we can use ungetc() in the case that send() fails. */ size_t blocksize = (nseek == 0 && off < 0 ? 1 : BLOCKSIZE); ssize_t size = fread (buf, 1, blocksize, stream); if (size == 0) { /* On Linux < 4.9, the value for an empty stream is wrong (all 0). See <https://patchwork.kernel.org/patch/9308641/>. This was not fixed properly until November 2016, see <https://patchwork.kernel.org/patch/9434741/>. */ result = ferror (stream) ? -EIO : nseek == 0 ? -EAFNOSUPPORT : 0; break; } nseek -= size; if (send (ofd, buf, size, MSG_MORE) != size) { if (nseek == -1) { /* 1 byte of pushback buffer is guaranteed on stream, even if stream is not seekable. */ ungetc ((unsigned char) buf[0], stream); result = -EAFNOSUPPORT; } else if (fseeko (stream, nseek, SEEK_CUR) == 0) /* The position of stream has been restored. */ result = -EAFNOSUPPORT; else result = -EIO; break; } /* Don't assume that EOF is sticky. See: <https://sourceware.org/bugzilla/show_bug.cgi?id=19476>. */ if (feof (stream)) { result = 0; break; } } if (result == 0 && read (ofd, resblock, hashlen) != hashlen) { if (nseek == 0 || fseeko (stream, nseek, SEEK_CUR) == 0) /* The position of stream has been restored. */ result = -EAFNOSUPPORT; else result = -EIO; } } close (ofd); return result; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/af_alg.h����������������������������������������������������������������0000664�0000000�0000000�00000006704�14110572173�0016436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* af_alg.h - Compute message digests from file streams and buffers. Copyright (C) 2018-2021 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 Matteo Croce <mcroce@redhat.com>, 2018. Documentation by Bruno Haible <bruno@clisp.org>, 2018. */ /* Declare specific functions for computing message digests using the Linux kernel crypto API, if available. This kernel API gives access to specialized crypto instructions (that would also be available in user space) or to crypto devices (not directly available in user space). For a more complete set of facilities that use the Linux kernel crypto API, look at libkcapi. */ #ifndef AF_ALG_H # define AF_ALG_H 1 # include <stdio.h> # include <errno.h> # ifdef __cplusplus extern "C" { # endif # if USE_LINUX_CRYPTO_API /* Compute a message digest of a memory region. The memory region starts at BUFFER and is LEN bytes long. ALG is the message digest algorithm; see the file /proc/crypto. RESBLOCK points to a block of HASHLEN bytes, for the result. HASHLEN must be the length of the message digest, in bytes, in particular: alg | hashlen -------+-------- md5 | 16 sha1 | 20 sha224 | 28 sha256 | 32 sha384 | 48 sha512 | 64 If successful, fill RESBLOCK and return 0. Upon failure, return a negated error number. */ int afalg_buffer (const char *buffer, size_t len, const char *alg, void *resblock, ssize_t hashlen); /* Compute a message digest of data read from STREAM. STREAM is an open file stream. The last operation on STREAM should not be 'ungetc', and if STREAM is also open for writing it should have been fflushed since its last write. Read from the current position to the end of STREAM. Handle regular files efficiently. ALG is the message digest algorithm; see the file /proc/crypto. RESBLOCK points to a block of HASHLEN bytes, for the result. HASHLEN must be the length of the message digest, in bytes, in particular: alg | hashlen -------+-------- md5 | 16 sha1 | 20 sha224 | 28 sha256 | 32 sha384 | 48 sha512 | 64 If successful, fill RESBLOCK and return 0. Upon failure, return a negated error number. Unless returning 0 or -EIO, restore STREAM's file position so that the caller can fall back on some other method. */ int afalg_stream (FILE *stream, const char *alg, void *resblock, ssize_t hashlen); # else static inline int afalg_buffer (const char *buffer, size_t len, const char *alg, void *resblock, ssize_t hashlen) { return -EAFNOSUPPORT; } static inline int afalg_stream (FILE *stream, const char *alg, void *resblock, ssize_t hashlen) { return -EAFNOSUPPORT; } # endif # ifdef __cplusplus } # endif #endif /* AF_ALG_H */ ������������������������������������������������������������gnulib-20210822~d383792/lib/aligned-malloc.h��������������������������������������������������������0000664�0000000�0000000�00000012116�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Allocate memory with indefinite extent and specified alignment. Copyright (C) 2020-2021 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. */ /* Before including this file, you need to define the following macro: ALIGNMENT A constant expression that evaluates to the desired alignment (a power of 2). And you also need to #include <stdint.h> and <stdlib.h>. */ /* aligned_malloc allocates a block of memory of SIZE bytes, aligned on a boundary of ALIGNMENT bytes. The block can be freed through aligned_free(), NOT through free(). Upon failure, it returns NULL. */ /* This module exists instead of a posix_memalign(), aligned_alloc(), or memalign() emulation, because we can't reasonably emulate posix_memalign(), aligned_alloc(), or memalign(): If malloc() returned p, only free (p) is allowed, not free (p + 1), free (p + 2), free (p + 4), free (p + 8), or similar. We can use posix_memalign(), a POSIX function. We can also use aligned_alloc(), an ISO C11 and POSIX function. But it's a bit more awkward to use. On older systems, we can alternatively use memalign() instead. In the Solaris documentation of memalign() it is not specified how a memory block returned by memalign() can be freed, but it actually can be freed with free(). */ #if !defined ALIGNMENT # error "ALIGNMENT is not defined" #endif #if !((ALIGNMENT) > 0 && ((ALIGNMENT) & ((ALIGNMENT) - 1)) == 0) # error "ALIGNMENT is not a power of 2" #endif #if ((ALIGNMENT) <= MALLOC_ALIGNMENT) || HAVE_POSIX_MEMALIGN || HAVE_ALIGNED_ALLOC || HAVE_MEMALIGN # if defined aligned_free || __GNUC__ >= 11 /* The caller wants an inline function, not a macro, or we can use GCC's -Wmismatched-dealloc warning. */ static inline void aligned_free (void *q) { free (q); } # else # define aligned_free free # endif # if (ALIGNMENT) <= MALLOC_ALIGNMENT /* Simply use malloc. */ # if defined aligned_malloc || __GNUC__ >= 11 /* The caller wants an inline function, not a macro, or GCC's -Wmismatched-dealloc warning might be in effect. */ static inline /*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ void * aligned_malloc (size_t size) { return malloc (size); } # else # define aligned_malloc malloc # endif # elif HAVE_POSIX_MEMALIGN /* Use posix_memalign. This is OK since ALIGNMENT > MALLOC_ALIGNMENT >= sizeof (void *). */ static inline /*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ void * aligned_malloc (size_t size) { void *p; int ret = posix_memalign (&p, (ALIGNMENT), size); if (ret == 0) return p; else return NULL; } # elif HAVE_ALIGNED_ALLOC /* Use aligned_alloc. */ static inline /*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ void * aligned_malloc (size_t size) { /* Round up SIZE to the next multiple of ALIGNMENT, namely (SIZE + ALIGNMENT - 1) & ~(ALIGNMENT - 1). */ size += (ALIGNMENT) - 1; if (size >= (ALIGNMENT) - 1) /* no overflow? */ { size &= ~(size_t)((ALIGNMENT) - 1); return aligned_alloc ((ALIGNMENT), size); } return NULL; } # elif HAVE_MEMALIGN /* HP-UX, IRIX, Solaris <= 10 */ /* Use memalign. */ static inline /*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ void * aligned_malloc (size_t size) { return memalign ((ALIGNMENT), size); } # endif #else /* Use malloc and waste a bit of memory. */ static inline void aligned_free (void *q) { if (q != NULL) { if ((uintptr_t) q & ((ALIGNMENT) - 1)) /* Argument not aligned as expected. */ abort (); else { void *p = ((void **) q)[-1]; if (!((uintptr_t) p <= (uintptr_t) q && (uintptr_t) q - (uintptr_t) p >= MALLOC_ALIGNMENT && (uintptr_t) q - (uintptr_t) p <= (ALIGNMENT))) abort (); free (p); } } } static inline /*_GL_ATTRIBUTE_DEALLOC (aligned_free, 1)*/ void * aligned_malloc (size_t size) { size += (ALIGNMENT); if (size >= (ALIGNMENT)) /* no overflow? */ { void *p = malloc (size); if (p != NULL) { /* Go to the next multiple of ALIGNMENT. */ void *q = (void *) (((uintptr_t) p + (ALIGNMENT)) & -(intptr_t)(ALIGNMENT)); /* Now q - p <= ALIGNMENT and q - p >= MALLOC_ALIGNMENT >= sizeof (void *). This is enough to store a back pointer to p. */ ((void **) q)[-1] = p; return q; } } return NULL; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/aligned_alloc.c���������������������������������������������������������0000664�0000000�0000000�00000002023�14110572173�0017763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An aligned_alloc() function that works around platform bugs. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> void * aligned_alloc (size_t alignment, size_t size) #undef aligned_alloc { if (alignment >= sizeof (void *)) return aligned_alloc (alignment, size); else return malloc (size); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/alignof.h���������������������������������������������������������������0000664�0000000�0000000�00000004370�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine alignment of types. Copyright (C) 2003-2004, 2006, 2009-2021 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/>. */ #ifndef _ALIGNOF_H #define _ALIGNOF_H #include <stddef.h> /* alignof_slot (TYPE) Determine the alignment of a structure slot (field) of a given type, at compile time. Note that the result depends on the ABI. This is the same as alignof (TYPE) and _Alignof (TYPE), defined in <stdalign.h> if __alignof_is_defined is 1. Note: The result cannot be used as a value for an 'enum' constant, due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ #if defined __cplusplus template <class type> struct alignof_helper { char __slot1; type __slot2; }; # define alignof_slot(type) offsetof (alignof_helper<type>, __slot2) #else # define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif /* alignof_type (TYPE) Determine the good alignment of an object of the given type at compile time. Note that this is not necessarily the same as alignof_slot(type). For example, with GNU C on x86 platforms and with clang on Linux/x86: alignof_type(long long) = 8, but alignof_slot(long long) = 4. And alignof_type(double) = 8, but - when -malign-double is not specified: alignof_slot(double) = 4, - when -malign-double is specified: alignof_slot(double) = 8. Note: The result cannot be used as a value for an 'enum' constant, due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define alignof_type __alignof__ #else # define alignof_type alignof_slot #endif #endif /* _ALIGNOF_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/alloca.c����������������������������������������������������������������0000664�0000000�0000000�00000013035�14110572173�0016446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* alloca.c -- allocate automatically reclaimed memory This file is in the public domain. */ /* (Mostly) portable implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant <jot@cray.com> contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #include <config.h> #include <alloca.h> #include <string.h> #include <stdlib.h> #ifdef emacs # include "lisp.h" # include "blockinput.h" # ifdef EMACS_FREE # undef free # define free EMACS_FREE # endif #else # define memory_full() abort () #endif /* If compiling with GCC or clang, this file is not needed. */ #if !(defined __GNUC__ || defined __clang__) /* If someone has defined alloca as a macro, there must be some other way alloca is supposed to work. */ # ifndef alloca # ifdef emacs # ifdef static /* actually, only want this if static is defined as "" -- this is for usg, in which emacs must undefine static in order to make unexec workable */ # ifndef STACK_DIRECTION you lose -- must know STACK_DIRECTION at compile-time /* Using #error here is not wise since this file should work for old and obscure compilers. */ # endif /* STACK_DIRECTION undefined */ # endif /* static */ # endif /* emacs */ /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ # ifndef STACK_DIRECTION # define STACK_DIRECTION 0 /* Direction unknown. */ # endif # if STACK_DIRECTION != 0 # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ # define STACK_DIR stack_dir static int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } # endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ # ifndef ALIGN_SIZE # define ALIGN_SIZE sizeof(double) # endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ void * alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = &probe; # if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); # endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ # ifdef emacs BLOCK_INPUT; # endif for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free (hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ # ifdef emacs UNBLOCK_INPUT; # endif } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { /* Address of header. */ register header *new; size_t combined_size = sizeof (header) + size; if (combined_size < sizeof (header)) memory_full (); new = malloc (combined_size); if (! new) memory_full (); new->h.next = last_alloca_header; new->h.deep = depth; last_alloca_header = new; /* User storage begins just after header. */ return (void *) (new + 1); } } # endif /* no alloca */ #endif /* not GCC || clang */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/alloca.in.h�������������������������������������������������������������0000664�0000000�0000000�00000004674�14110572173�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2021 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/>. */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca /* Some version of mingw have an <alloca.h> that causes trouble when included after 'alloca' gets defined as a macro. As a workaround, include this <alloca.h> first and define 'alloca' as a macro afterwards if needed. */ # if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ # include_next <alloca.h> # endif #endif #ifndef alloca # if defined __GNUC__ || (__clang_major__ >= 4) # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include <stdlib.h> # else # include <stddef.h> # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ��������������������������������������������������������������������gnulib-20210822~d383792/lib/allocator.c�������������������������������������������������������������0000664�0000000�0000000�00000001650�14110572173�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocators such as malloc+free. Copyright (C) 2011-2021 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/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include "allocator.h" #include <stdlib.h> struct allocator const stdlib_allocator = { malloc, realloc, free, NULL }; ����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/allocator.h�������������������������������������������������������������0000664�0000000�0000000�00000004244�14110572173�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocators such as malloc+free. Copyright (C) 2011-2021 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. */ #ifndef _GL_ALLOCATOR_H #define _GL_ALLOCATOR_H #include <stddef.h> /* An object describing a memory allocator family. */ struct allocator { /* Do not use GCC attributes such as __attribute__ ((malloc)) with the function types pointed at by these members, because these attributes do not work with pointers to functions. See <https://lists.gnu.org/r/bug-gnulib/2011-04/msg00007.html>. */ /* Call ALLOCATE to allocate memory, like 'malloc'. On failure ALLOCATE should return NULL, though not necessarily set errno. When given a zero size it may return NULL even if successful. */ void *(*allocate) (size_t); /* If nonnull, call REALLOCATE to reallocate memory, like 'realloc'. On failure REALLOCATE should return NULL, though not necessarily set errno. When given a zero size it may return NULL even if successful. */ void *(*reallocate) (void *, size_t); /* Call FREE to free memory, like 'free'. */ void (*free) (void *); /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (..., SIZE) fails. DIE should not return. SIZE should equal SIZE_MAX if size_t overflow was detected while calculating sizes to be passed to MALLOC or REALLOC. */ void (*die) (size_t); }; /* An allocator using the stdlib functions and a null DIE function. */ extern struct allocator const stdlib_allocator; #endif /* _GL_ALLOCATOR_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/alphasort.c�������������������������������������������������������������0000664�0000000�0000000�00000002473�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1997-1998, 2009-2021 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 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/>. */ #include <config.h> #include <dirent.h> #include <string.h> int #ifndef __KLIBC__ alphasort (const struct dirent **a, const struct dirent **b) { return strcoll ((*a)->d_name, (*b)->d_name); } #else /* On OS/2 kLIBC, the compare function declaration of scandir() is different from POSIX. See <https://trac.netlabs.org/libc/browser/branches/libc-0.6/src/emx/include/dirent.h#L141>. */ alphasort (const void *a, const void *b) { return strcoll ((*(const struct dirent **)a)->d_name, (*(const struct dirent **)b)->d_name); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/amemxfrm.c��������������������������������������������������������������0000664�0000000�0000000�00000011727�14110572173�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent memory area transformation for comparison. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "amemxfrm.h" #include <errno.h> #include <stdlib.h> #include <string.h> char * amemxfrm (char *s, size_t n, char *resultbuf, size_t *lengthp) { /* Result accumulator. */ char *result; size_t length; size_t allocated; char orig_sentinel; /* Initial memory allocation. */ if (resultbuf != NULL && *lengthp > 0) { result = resultbuf; allocated = *lengthp; } else { allocated = (n > 0 ? n : 1); result = (char *) malloc (allocated); if (result == NULL) goto out_of_memory_2; } length = 0; /* Add sentinel.byte. */ orig_sentinel = s[n]; s[n] = '\0'; /* Iterate through S, transforming each NUL terminated segment. Accumulate the resulting transformed segments in result, separated by NULs. */ { const char *p_end = s + n + 1; const char *p; p = s; for (;;) { /* Search next NUL byte. */ size_t l = strlen (p); for (;;) { size_t k; /* A call to strxfrm costs about 20 times more than a call to strdup of the result. Therefore it is worth to try to avoid calling strxfrm more than once on a given string, by making enough room before calling strxfrm. The size of the strxfrm result, k, is likely to be between l and 3 * l. */ if (3 * l >= allocated - length) { /* Grow the result buffer. */ size_t new_allocated; char *new_result; new_allocated = length + 3 * l + 1; if (new_allocated < 2 * allocated) new_allocated = 2 * allocated; if (new_allocated < 64) new_allocated = 64; if (result == resultbuf) new_result = (char *) malloc (new_allocated); else new_result = (char *) realloc (result, new_allocated); if (new_result != NULL) { allocated = new_allocated; result = new_result; } } errno = 0; k = strxfrm (result + length, p, allocated - length); if (errno != 0) goto fail; if (k >= allocated - length) { /* Grow the result buffer. */ size_t new_allocated; char *new_result; new_allocated = length + k + 1; if (new_allocated < 2 * allocated) new_allocated = 2 * allocated; if (new_allocated < 64) new_allocated = 64; if (result == resultbuf) new_result = (char *) malloc (new_allocated); else new_result = (char *) realloc (result, new_allocated); if (new_result == NULL) goto out_of_memory_1; allocated = new_allocated; result = new_result; } else { length += k; break; } } p = p + l + 1; if (p == p_end) break; result[length] = '\0'; length++; } } /* Shrink the allocated memory if possible. It is not worth calling realloc when length + 1 == allocated; it would save just one byte. */ if (result != resultbuf && length + 1 < allocated) { if ((length > 0 ? length : 1) <= *lengthp) { memcpy (resultbuf, result, length); free (result); result = resultbuf; } else { char *memory = (char *) realloc (result, length > 0 ? length : 1); if (memory != NULL) result = memory; } } s[n] = orig_sentinel; *lengthp = length; return result; fail: if (result != resultbuf) free (result); s[n] = orig_sentinel; return NULL; out_of_memory_1: if (result != resultbuf) free (result); s[n] = orig_sentinel; out_of_memory_2: errno = ENOMEM; return NULL; } �����������������������������������������gnulib-20210822~d383792/lib/amemxfrm.h��������������������������������������������������������������0000664�0000000�0000000�00000003516�14110572173�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent memory area transformation for comparison. Copyright (C) 2009-2021 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/>. */ #ifndef AMEMXFRM_H #define AMEMXFRM_H #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Generalization of strxfrm() to strings with embedded NUL bytes. */ /* Transform the memory area [S..S+N-1] to a memory area, in such a way that comparing (S1,N1) and (S2,N2) with memcoll() is equivalent to comparing amemxfrm(S1,N1) and amemxfrm(S2,N2) with memcmp2(). The byte S[N] may be temporarily overwritten by this function, but will be restored before this function returns. The result of this function depends on the LC_COLLATE category of the current locale. If successful: If resultbuf is not NULL and the result fits into *lengthp bytes, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length of the returned string. Upon failure, return NULL, with errno set. */ extern char * amemxfrm (char *restrict s, size_t n, char *restrict resultbuf, size_t *lengthp); #ifdef __cplusplus } #endif #endif /* AMEMXFRM_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/anytostr.c��������������������������������������������������������������0000664�0000000�0000000�00000003162�14110572173�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* anytostr.c -- convert integers to printable strings Copyright (C) 2001, 2006, 2008-2021 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 */ /* Tell gcc not to warn about the (i < 0) test, below. */ #if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wtype-limits" #elif defined __clang__ # pragma clang diagnostic ignored "-Wtautological-compare" #endif #include <config.h> #include "inttostr.h" /* Convert I to a printable string in BUF, which must be at least INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the printable string, which need not start at BUF. */ _GL_ATTRIBUTE_NODISCARD char * anytostr (inttype i, char *buf) { char *p = buf + INT_STRLEN_BOUND (inttype); *p = 0; if (i < 0) { do *--p = '0' - i % 10; while ((i /= 10) != 0); *--p = '-'; } else { do *--p = '0' + i % 10; while ((i /= 10) != 0); } return p; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/arcfour.c���������������������������������������������������������������0000664�0000000�0000000�00000003765�14110572173�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arcfour.c --- The arcfour stream cipher * Copyright (C) 2000-2003, 2005-2006, 2009-2021 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/>. * */ /* Code from Libgcrypt adapted for gnulib by Simon Josefsson. */ /* * For a description of the algorithm, see: * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. * ISBN 0-471-11709-9. Pages 397 ff. */ #include <config.h> #include "arcfour.h" void arcfour_stream (arcfour_context * context, const char *inbuf, char *outbuf, size_t length) { uint8_t i = context->idx_i; uint8_t j = context->idx_j; char *sbox = context->sbox; for (; length > 0; length--) { char t; i++; j += sbox[i]; t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; *outbuf++ = (*inbuf++ ^ sbox[(0U + sbox[i] + sbox[j]) % ARCFOUR_SBOX_SIZE]); } context->idx_i = i; context->idx_j = j; } void arcfour_setkey (arcfour_context * context, const char *key, size_t keylen) { size_t i, j, k; char *sbox = context->sbox; context->idx_i = context->idx_j = 0; for (i = 0; i < ARCFOUR_SBOX_SIZE; i++) sbox[i] = i; for (i = j = k = 0; i < ARCFOUR_SBOX_SIZE; i++) { char t; j = (j + sbox[i] + key[k]) % ARCFOUR_SBOX_SIZE; t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; if (++k == keylen) k = 0; } } �����������gnulib-20210822~d383792/lib/arcfour.h���������������������������������������������������������������0000664�0000000�0000000�00000003124�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arcfour.h --- The arcfour stream cipher * Copyright (C) 2000-2005, 2009-2021 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/>. * */ /* Code from Libgcrypt adapted for gnulib by Simon Josefsson. */ #ifndef ARCFOUR_H # define ARCFOUR_H # include <stddef.h> # include <stdint.h> #define ARCFOUR_SBOX_SIZE 256 typedef struct { char sbox[ARCFOUR_SBOX_SIZE]; uint8_t idx_i, idx_j; } arcfour_context; /* Apply ARCFOUR stream to INBUF placing the result in OUTBUF, both of LENGTH size. CONTEXT must be initialized with arcfour_setkey before this function is called. */ extern void arcfour_stream (arcfour_context * context, const char *inbuf, char *restrict outbuf, size_t length); /* Initialize CONTEXT using encryption KEY of KEYLEN bytes. KEY should be 40 bits (5 bytes) or longer. The KEY cannot be zero length. */ extern void arcfour_setkey (arcfour_context * context, const char *key, size_t keylen); #endif /* ARCFOUR_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/arctwo.c����������������������������������������������������������������0000664�0000000�0000000�00000016210�14110572173�0016510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arctwo.c --- The RC2 cipher as described in RFC 2268. * Copyright (C) 2003-2006, 2008-2021 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/>. */ /* Code from GnuTLS/Libgcrypt adapted for gnulib by Simon Josefsson. */ /* This implementation was written by Nikos Mavroyanopoulos for GNUTLS * as a Libgcrypt module (gnutls/lib/x509/rc2.c) and later adapted for * direct use by Libgcrypt by Werner Koch. This implementation is * only useful for pkcs#12 decryption. * * The implementation here is based on Peter Gutmann's RRC.2 paper. */ #include <config.h> #include "arctwo.h" #include "bitrotate.h" static const uint8_t arctwo_sbox[] = { 217, 120, 249, 196, 25, 221, 181, 237, 40, 233, 253, 121, 74, 160, 216, 157, 198, 126, 55, 131, 43, 118, 83, 142, 98, 76, 100, 136, 68, 139, 251, 162, 23, 154, 89, 245, 135, 179, 79, 19, 97, 69, 109, 141, 9, 129, 125, 50, 189, 143, 64, 235, 134, 183, 123, 11, 240, 149, 33, 34, 92, 107, 78, 130, 84, 214, 101, 147, 206, 96, 178, 28, 115, 86, 192, 20, 167, 140, 241, 220, 18, 117, 202, 31, 59, 190, 228, 209, 66, 61, 212, 48, 163, 60, 182, 38, 111, 191, 14, 218, 70, 105, 7, 87, 39, 242, 29, 155, 188, 148, 67, 3, 248, 17, 199, 246, 144, 239, 62, 231, 6, 195, 213, 47, 200, 102, 30, 215, 8, 232, 234, 222, 128, 82, 238, 247, 132, 170, 114, 172, 53, 77, 106, 42, 150, 26, 210, 113, 90, 21, 73, 116, 75, 159, 208, 94, 4, 24, 164, 236, 194, 224, 65, 110, 15, 81, 203, 204, 36, 145, 175, 80, 161, 244, 112, 57, 153, 124, 58, 133, 35, 184, 180, 122, 252, 2, 54, 91, 37, 85, 151, 49, 45, 93, 250, 152, 227, 138, 146, 174, 5, 223, 41, 16, 103, 108, 186, 201, 211, 0, 230, 207, 225, 158, 168, 44, 99, 22, 1, 63, 88, 226, 137, 169, 13, 56, 52, 27, 171, 51, 255, 176, 187, 72, 12, 95, 185, 177, 205, 46, 197, 243, 219, 71, 229, 165, 156, 119, 10, 166, 32, 104, 254, 127, 193, 173 }; /* C89 compliant way to cast 'char' to 'unsigned char'. */ static unsigned char to_uchar (char ch) { return ch; } void arctwo_encrypt (arctwo_context *context, const char *inbuf, char *outbuf, size_t length) { for (; length >= ARCTWO_BLOCK_SIZE; length -= ARCTWO_BLOCK_SIZE, inbuf += ARCTWO_BLOCK_SIZE, outbuf += ARCTWO_BLOCK_SIZE) { size_t i, j; uint16_t word0 = 0, word1 = 0, word2 = 0, word3 = 0; word0 = (word0 << 8) | to_uchar (inbuf[1]); word0 = (word0 << 8) | to_uchar (inbuf[0]); word1 = (word1 << 8) | to_uchar (inbuf[3]); word1 = (word1 << 8) | to_uchar (inbuf[2]); word2 = (word2 << 8) | to_uchar (inbuf[5]); word2 = (word2 << 8) | to_uchar (inbuf[4]); word3 = (word3 << 8) | to_uchar (inbuf[7]); word3 = (word3 << 8) | to_uchar (inbuf[6]); for (i = 0; i < 16; i++) { j = i * 4; /* For some reason I cannot combine those steps. */ word0 += (word1 & ~word3) + (word2 & word3) + context->S[j]; word0 = rotl16 (word0, 1); word1 += (word2 & ~word0) + (word3 & word0) + context->S[j + 1]; word1 = rotl16 (word1, 2); word2 += (word3 & ~word1) + (word0 & word1) + context->S[j + 2]; word2 = rotl16 (word2, 3); word3 += (word0 & ~word2) + (word1 & word2) + context->S[j + 3]; word3 = rotl16 (word3, 5); if (i == 4 || i == 10) { word0 += context->S[word3 & 63]; word1 += context->S[word0 & 63]; word2 += context->S[word1 & 63]; word3 += context->S[word2 & 63]; } } outbuf[0] = word0 & 255; outbuf[1] = word0 >> 8; outbuf[2] = word1 & 255; outbuf[3] = word1 >> 8; outbuf[4] = word2 & 255; outbuf[5] = word2 >> 8; outbuf[6] = word3 & 255; outbuf[7] = word3 >> 8; } } void arctwo_decrypt (arctwo_context *context, const char *inbuf, char *outbuf, size_t length) { for (; length >= ARCTWO_BLOCK_SIZE; length -= ARCTWO_BLOCK_SIZE, inbuf += ARCTWO_BLOCK_SIZE, outbuf += ARCTWO_BLOCK_SIZE) { size_t i, j; uint16_t word0 = 0, word1 = 0, word2 = 0, word3 = 0; word0 = (word0 << 8) | to_uchar (inbuf[1]); word0 = (word0 << 8) | to_uchar (inbuf[0]); word1 = (word1 << 8) | to_uchar (inbuf[3]); word1 = (word1 << 8) | to_uchar (inbuf[2]); word2 = (word2 << 8) | to_uchar (inbuf[5]); word2 = (word2 << 8) | to_uchar (inbuf[4]); word3 = (word3 << 8) | to_uchar (inbuf[7]); word3 = (word3 << 8) | to_uchar (inbuf[6]); for (i = 16; i > 0; i--) { j = (i - 1) * 4; word3 = rotr16 (word3, 5); word3 -= (word0 & ~word2) + (word1 & word2) + context->S[j + 3]; word2 = rotr16 (word2, 3); word2 -= (word3 & ~word1) + (word0 & word1) + context->S[j + 2]; word1 = rotr16 (word1, 2); word1 -= (word2 & ~word0) + (word3 & word0) + context->S[j + 1]; word0 = rotr16 (word0, 1); word0 -= (word1 & ~word3) + (word2 & word3) + context->S[j]; if (i == 6 || i == 12) { word3 = word3 - context->S[word2 & 63]; word2 = word2 - context->S[word1 & 63]; word1 = word1 - context->S[word0 & 63]; word0 = word0 - context->S[word3 & 63]; } } outbuf[0] = word0 & 255; outbuf[1] = word0 >> 8; outbuf[2] = word1 & 255; outbuf[3] = word1 >> 8; outbuf[4] = word2 & 255; outbuf[5] = word2 >> 8; outbuf[6] = word3 & 255; outbuf[7] = word3 >> 8; } } void arctwo_setkey_ekb (arctwo_context *context, size_t keylen, const char *key, size_t effective_keylen) { size_t i; uint8_t *S, x; if (keylen < 40 / 8 || effective_keylen > 1024) return; S = (uint8_t *) context->S; for (i = 0; i < keylen; i++) S[i] = (uint8_t) key[i]; for (i = keylen; i < 128; i++) S[i] = arctwo_sbox[(S[i - keylen] + S[i - 1]) & 255]; S[0] = arctwo_sbox[S[0]]; /* Phase 2 - reduce effective key size to "bits". This was not * discussed in Gutmann's paper. I've copied that from the public * domain code posted in sci.crypt. */ if (effective_keylen) { size_t len = (effective_keylen + 7) >> 3; i = 128 - len; x = arctwo_sbox[S[i] & (255 >> (7 & -effective_keylen))]; S[i] = x; while (i--) { x = arctwo_sbox[x ^ S[i + len]]; S[i] = x; } } /* Make the expanded key, endian independent. */ for (i = 0; i < 64; i++) context->S[i] = ((uint16_t) S[i * 2] | (((uint16_t) S[i * 2 + 1]) << 8)); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/arctwo.h����������������������������������������������������������������0000664�0000000�0000000�00000004224�14110572173�0016517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arctwo.h --- The arctwo block cipher * Copyright (C) 2000-2003, 2005, 2009-2021 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/>. * */ /* Code from Libgcrypt adapted for gnulib by Simon Josefsson. */ #ifndef ARCTWO_H # define ARCTWO_H # include <stddef.h> # include <stdint.h> typedef struct { uint16_t S[64]; } arctwo_context; #define ARCTWO_BLOCK_SIZE 8 /* Initialize CONTEXT using KEY of KEYLEN length. If EFFECTIVE_KEYLEN, truncate the key (using a special algorithm) to only be of EFFECTIVE_KEYLEN bits. Normally, you use EFFECTIVE_KEYLEN of 0, but see RFC 2268 for more information. */ void arctwo_setkey_ekb (arctwo_context *context, size_t keylen, const char *key, size_t effective_keylen); #define arctwo_setkey(context,keylen,key) \ arctwo_setkey_ekb (context, keylen, key, 8 * (keylen)) /* Encrypt INBUF of size LENGTH into OUTBUF. LENGTH must be a multiple of ARCTWO_BLOCK_SIZE. CONTEXT hold the encryption key, and must have been initialized with arctwo_setkey or arctwo_setkey_ekb. */ extern void arctwo_encrypt (arctwo_context *context, const char *inbuf, char *restrict outbuf, size_t length); /* Decrypt INBUF of size LENGTH into OUTBUF. LENGTH must be a multiple of ARCTWO_BLOCK_SIZE. CONTEXT hold the decryption key, and must have been initialized with arctwo_setkey or arctwo_setkey_ekb. */ extern void arctwo_decrypt (arctwo_context *context, const char *inbuf, char *restrict outbuf, size_t length); #endif /* ARCTWO_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/areadlink-with-size.c���������������������������������������������������0000664�0000000�0000000�00000007434�14110572173�0021074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readlink wrapper to return the link name in malloc'd storage. Unlike xreadlink and xreadlink_with_size, don't ever call exit. Copyright (C) 2001, 2003-2007, 2009-2021 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 Jim Meyering <jim@meyering.net> */ #include <config.h> #include "areadlink.h" #include <errno.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif /* SYMLINK_MAX is used only for an initial memory-allocation sanity check, so it's OK to guess too small on hosts where there is no arbitrary limit to symbolic link length. */ #ifndef SYMLINK_MAX # define SYMLINK_MAX 1024 #endif #define MAXSIZE (SIZE_MAX < SSIZE_MAX ? SIZE_MAX : SSIZE_MAX) /* Call readlink to get the symbolic link value of FILE. SIZE is a hint as to how long the link is expected to be; typically it is taken from st_size. It need not be correct. Return a pointer to that NUL-terminated string in malloc'd storage. If readlink fails, malloc fails, or if the link value is longer than SSIZE_MAX, return NULL (caller may use errno to diagnose). */ char * areadlink_with_size (char const *file, size_t size) { /* Some buggy file systems report garbage in st_size. Defend against them by ignoring outlandish st_size values in the initial memory allocation. */ size_t symlink_max = SYMLINK_MAX; size_t INITIAL_LIMIT_BOUND = 8 * 1024; size_t initial_limit = (symlink_max < INITIAL_LIMIT_BOUND ? symlink_max + 1 : INITIAL_LIMIT_BOUND); enum { stackbuf_size = 128 }; /* The initial buffer size for the link value. */ size_t buf_size = (size == 0 ? stackbuf_size : size < initial_limit ? size + 1 : initial_limit); while (1) { ssize_t r; size_t link_length; char stackbuf[stackbuf_size]; char *buf = stackbuf; char *buffer = NULL; if (! (size == 0 && buf_size == stackbuf_size)) { buf = buffer = malloc (buf_size); if (!buffer) { errno = ENOMEM; return NULL; } } r = readlink (file, buf, buf_size); link_length = r; if (r < 0) { free (buffer); return NULL; } if (link_length < buf_size) { buf[link_length] = 0; if (!buffer) { buffer = malloc (link_length + 1); if (buffer) return memcpy (buffer, buf, link_length + 1); } else if (link_length + 1 < buf_size) { /* Shrink BUFFER before returning it. */ char *shrinked_buffer = realloc (buffer, link_length + 1); if (shrinked_buffer != NULL) buffer = shrinked_buffer; } return buffer; } free (buffer); if (buf_size <= MAXSIZE / 2) buf_size *= 2; else if (buf_size < MAXSIZE) buf_size = MAXSIZE; else { errno = ENOMEM; return NULL; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/areadlink.c�������������������������������������������������������������0000664�0000000�0000000�00000003746�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* areadlink.c -- readlink wrapper to return the link name in malloc'd storage Unlike xreadlink and xreadlink_with_size, don't ever call exit. Copyright (C) 2001, 2003-2007, 2009-2021 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 Jim Meyering <jim@meyering.net> and Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "areadlink.h" #include "careadlinkat.h" #include <stdlib.h> #include <unistd.h> /* Get the symbolic link value of FILENAME and put it into BUFFER, with size BUFFER_SIZE. This function acts like readlink but has readlinkat's signature. */ static ssize_t careadlinkatcwd (int fd, char const *filename, char *buffer, size_t buffer_size) { /* FD must be AT_FDCWD here, otherwise the caller is using this function in contexts it was not meant for. */ if (fd != AT_FDCWD) abort (); return readlink (filename, buffer, buffer_size); } /* Call readlink to get the symbolic link value of FILENAME. Return a pointer to that NUL-terminated string in malloc'd storage. If readlink fails, return NULL and set errno. If allocation fails, or if the link value is longer than SIZE_MAX :-), return NULL and set errno to ENOMEM. */ char * areadlink (char const *filename) { return careadlinkat (AT_FDCWD, filename, NULL, 0, NULL, careadlinkatcwd); } ��������������������������gnulib-20210822~d383792/lib/areadlink.h�������������������������������������������������������������0000664�0000000�0000000�00000002517�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read symbolic links without size limitation. Copyright (C) 2001, 2003-2004, 2007, 2009-2021 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 Jim Meyering <jim@meyering.net> */ #include <stdlib.h> extern char *areadlink (char const *filename) _GL_ATTRIBUTE_DEALLOC_FREE; extern char *areadlink_with_size (char const *filename, size_t size_hint) _GL_ATTRIBUTE_DEALLOC_FREE; #if GNULIB_AREADLINKAT extern char *areadlinkat (int fd, char const *filename) _GL_ATTRIBUTE_DEALLOC_FREE; #endif #if GNULIB_AREADLINKAT_WITH_SIZE extern char *areadlinkat_with_size (int fd, char const *filename, size_t size_hint) _GL_ATTRIBUTE_DEALLOC_FREE; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/areadlinkat-with-size.c�������������������������������������������������0000664�0000000�0000000�00000011237�14110572173�0021415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readlinkat wrapper to return the link name in malloc'd storage. Unlike xreadlinkat, only call exit on failure to change directory. Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering <jim@meyering.net> and Eric Blake <ebb9@byu.net>. */ #include <config.h> #include "areadlink.h" #include <errno.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if HAVE_READLINKAT # ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) # endif /* SYMLINK_MAX is used only for an initial memory-allocation sanity check, so it's OK to guess too small on hosts where there is no arbitrary limit to symbolic link length. */ # ifndef SYMLINK_MAX # define SYMLINK_MAX 1024 # endif # define MAXSIZE (SIZE_MAX < SSIZE_MAX ? SIZE_MAX : SSIZE_MAX) /* Call readlinkat to get the symbolic link value of FILE, relative to FD. SIZE is a hint as to how long the link is expected to be; typically it is taken from st_size. It need not be correct. Return a pointer to that NUL-terminated string in malloc'd storage. If readlinkat fails, malloc fails, or if the link value is longer than SSIZE_MAX, return NULL (caller may use errno to diagnose). However, failure to change directory during readlinkat will issue a diagnostic and exit. */ char * areadlinkat_with_size (int fd, char const *file, size_t size) { /* Some buggy file systems report garbage in st_size. Defend against them by ignoring outlandish st_size values in the initial memory allocation. */ size_t symlink_max = SYMLINK_MAX; size_t INITIAL_LIMIT_BOUND = 8 * 1024; size_t initial_limit = (symlink_max < INITIAL_LIMIT_BOUND ? symlink_max + 1 : INITIAL_LIMIT_BOUND); enum { stackbuf_size = 128 }; /* The initial buffer size for the link value. */ size_t buf_size = (size == 0 ? stackbuf_size : size < initial_limit ? size + 1 : initial_limit); while (1) { ssize_t r; size_t link_length; char stackbuf[stackbuf_size]; char *buf = stackbuf; char *buffer = NULL; if (! (size == 0 && buf_size == stackbuf_size)) { buf = buffer = malloc (buf_size); if (!buffer) /* We can assume errno == ENOMEM here, since all platforms that have readlinkat() have a POSIX compliant malloc(). */ return NULL; } r = readlinkat (fd, file, buf, buf_size); link_length = r; if (r < 0) { free (buffer); return NULL; } if (link_length < buf_size) { buf[link_length] = 0; if (!buffer) { buffer = malloc (link_length + 1); if (buffer) return memcpy (buffer, buf, link_length + 1); } else if (link_length + 1 < buf_size) { /* Shrink BUFFER before returning it. */ char *shrinked_buffer = realloc (buffer, link_length + 1); if (shrinked_buffer != NULL) buffer = shrinked_buffer; } return buffer; } free (buffer); if (buf_size <= MAXSIZE / 2) buf_size *= 2; else if (buf_size < MAXSIZE) buf_size = MAXSIZE; else { errno = ENOMEM; return NULL; } } } #else /* !HAVE_READLINKAT */ /* It is more efficient to change directories only once and call areadlink_with_size, rather than repeatedly call the replacement readlinkat. */ # define AT_FUNC_NAME areadlinkat_with_size # define AT_FUNC_F1 areadlink_with_size # define AT_FUNC_POST_FILE_PARAM_DECLS , size_t size # define AT_FUNC_POST_FILE_ARGS , size # define AT_FUNC_RESULT char * # define AT_FUNC_FAIL NULL # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # undef AT_FUNC_RESULT # undef AT_FUNC_FAIL #endif /* !HAVE_READLINKAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/areadlinkat.c�����������������������������������������������������������0000664�0000000�0000000�00000004301�14110572173�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* areadlinkat.c -- readlinkat wrapper to return malloc'd link name Unlike xreadlinkat, only call exit on failure to change directory. Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering <jim@meyering.net>, and Bruno Haible <bruno@clisp.org>, and Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include "areadlink.h" #include <stdlib.h> #include "careadlinkat.h" #if HAVE_READLINKAT /* Call readlinkat to get the symbolic link value of FILENAME relative to FD. Return a pointer to that NUL-terminated string in malloc'd storage. If readlinkat fails, return NULL and set errno (although failure to change directory will issue a diagnostic and exit). If allocation fails, or if the link value is longer than SIZE_MAX :-), return NULL and set errno to ENOMEM. */ char * areadlinkat (int fd, char const *filename) { return careadlinkat (fd, filename, NULL, 0, NULL, readlinkat); } #else /* !HAVE_READLINKAT */ /* It is more efficient to change directories only once and call areadlink, rather than repeatedly call the replacement readlinkat. */ # define AT_FUNC_NAME areadlinkat # define AT_FUNC_F1 areadlink # define AT_FUNC_POST_FILE_PARAM_DECLS /* empty */ # define AT_FUNC_POST_FILE_ARGS /* empty */ # define AT_FUNC_RESULT char * # define AT_FUNC_FAIL NULL # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # undef AT_FUNC_RESULT # undef AT_FUNC_FAIL #endif /* !HAVE_READLINKAT */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/arg-nonnull.h�����������������������������������������������������������0000664�0000000�0000000�00000002353�14110572173�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2021 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 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/>. */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argmatch.c��������������������������������������������������������������0000664�0000000�0000000�00000017260�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* argmatch.c -- find a match for a string in an array Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@ai.mit.edu> Modified by Akim Demaille <demaille@inf.enst.fr> */ #include <config.h> /* Specification. */ #include "argmatch.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define _(msgid) gettext (msgid) #include "error.h" #include "quotearg.h" #include "getprogname.h" #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* When reporting an invalid argument, show nonprinting characters by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use literal_quoting_style. */ #ifndef ARGMATCH_QUOTING_STYLE # define ARGMATCH_QUOTING_STYLE locale_quoting_style #endif /* Non failing version of argmatch call this function after failing. */ #ifndef ARGMATCH_DIE # include "exitfail.h" # define ARGMATCH_DIE exit (exit_failure) #endif #ifdef ARGMATCH_DIE_DECL ARGMATCH_DIE_DECL; #endif static void __argmatch_die (void) { ARGMATCH_DIE; } /* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h. Default to __argmatch_die, but allow caller to change this at run-time. */ argmatch_exit_fn argmatch_die = __argmatch_die; /* If ARG is an unambiguous match for an element of the NULL-terminated array ARGLIST, return the index in ARGLIST of the matched element, else -1 if it does not match any element or -2 if it is ambiguous (is a prefix of more than one element). If VALLIST is none null, use it to resolve ambiguities limited to synonyms, i.e., for "yes", "yop" -> 0 "no", "nope" -> 1 "y" is a valid argument, for 0, and "n" for 1. */ ptrdiff_t argmatch (const char *arg, const char *const *arglist, const void *vallist, size_t valsize) { size_t i; /* Temporary index in ARGLIST. */ size_t arglen; /* Length of ARG. */ ptrdiff_t matchind = -1; /* Index of first nonexact match. */ bool ambiguous = false; /* If true, multiple nonexact match(es). */ arglen = strlen (arg); /* Test all elements for either exact match or abbreviated matches. */ for (i = 0; arglist[i]; i++) { if (!strncmp (arglist[i], arg, arglen)) { if (strlen (arglist[i]) == arglen) /* Exact match found. */ return i; else if (matchind == -1) /* First nonexact match found. */ matchind = i; else { /* Second nonexact match found. */ if (vallist == NULL || memcmp ((char const *) vallist + valsize * matchind, (char const *) vallist + valsize * i, valsize)) { /* There is a real ambiguity, or we could not disambiguate. */ ambiguous = true; } } } } if (ambiguous) return -2; else return matchind; } /* Error reporting for argmatch. CONTEXT is a description of the type of entity that was being matched. VALUE is the invalid value that was given. PROBLEM is the return value from argmatch. */ void argmatch_invalid (const char *context, const char *value, ptrdiff_t problem) { char const *format = (problem == -1 ? _("invalid argument %s for %s") : _("ambiguous argument %s for %s")); error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value), quote_n (1, context)); } /* List the valid arguments for argmatch. ARGLIST is the same as in argmatch. VALLIST is a pointer to an array of values. VALSIZE is the size of the elements of VALLIST */ void argmatch_valid (const char *const *arglist, const void *vallist, size_t valsize) { size_t i; const char *last_val = NULL; /* We try to put synonyms on the same line. The assumption is that synonyms follow each other */ fputs (_("Valid arguments are:"), stderr); for (i = 0; arglist[i]; i++) if ((i == 0) || memcmp (last_val, (char const *) vallist + valsize * i, valsize)) { fprintf (stderr, "\n - %s", quote (arglist[i])); last_val = (char const *) vallist + valsize * i; } else { fprintf (stderr, ", %s", quote (arglist[i])); } putc ('\n', stderr); } /* Never failing versions of the previous functions. CONTEXT is the context for which argmatch is called (e.g., "--version-control", or "$VERSION_CONTROL" etc.). Upon failure, calls the (supposed never to return) function EXIT_FN. */ ptrdiff_t __xargmatch_internal (const char *context, const char *arg, const char *const *arglist, const void *vallist, size_t valsize, argmatch_exit_fn exit_fn) { ptrdiff_t res = argmatch (arg, arglist, vallist, valsize); if (res >= 0) /* Success. */ return res; /* We failed. Explain why. */ argmatch_invalid (context, arg, res); argmatch_valid (arglist, vallist, valsize); (*exit_fn) (); return -1; /* To please the compilers. */ } /* Look for VALUE in VALLIST, an array of objects of size VALSIZE and return the first corresponding argument in ARGLIST */ const char * argmatch_to_argument (const void *value, const char *const *arglist, const void *vallist, size_t valsize) { size_t i; for (i = 0; arglist[i]; i++) if (!memcmp (value, (char const *) vallist + valsize * i, valsize)) return arglist[i]; return NULL; } #ifdef TEST /* * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu> */ /* When to make backup files. */ enum backup_type { /* Never make backups. */ no_backups, /* Make simple backups of every file. */ simple_backups, /* Make numbered backups of files that already have numbered backups, and simple backups of the others. */ numbered_existing_backups, /* Make numbered backups of every file. */ numbered_backups }; /* Two tables describing arguments (keys) and their corresponding values */ static const char *const backup_args[] = { "no", "none", "off", "simple", "never", "existing", "nil", "numbered", "t", 0 }; static const enum backup_type backup_vals[] = { no_backups, no_backups, no_backups, simple_backups, simple_backups, numbered_existing_backups, numbered_existing_backups, numbered_backups, numbered_backups }; int main (int argc, const char *const *argv) { const char *cp; enum backup_type backup_type = no_backups; if (argc > 2) { fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", getprogname ()); exit (1); } if ((cp = getenv ("VERSION_CONTROL"))) backup_type = XARGMATCH ("$VERSION_CONTROL", cp, backup_args, backup_vals); if (argc == 2) backup_type = XARGMATCH (getprogname (), argv[1], backup_args, backup_vals); printf ("The version control is '%s'\n", ARGMATCH_TO_ARGUMENT (&backup_type, backup_args, backup_vals)); return 0; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argmatch.h��������������������������������������������������������������0000664�0000000�0000000�00000046645�14110572173�0017023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* argmatch.h -- definitions and prototypes for argmatch.c Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@ai.mit.edu> Modified by Akim Demaille <demaille@inf.enst.fr> */ #ifndef ARGMATCH_H_ # define ARGMATCH_H_ 1 # include <limits.h> # include <stdbool.h> # include <stddef.h> # include <stdio.h> # include <string.h> /* memcmp */ # include "gettext.h" # include "quote.h" # include "verify.h" # ifdef __cplusplus extern "C" { # endif # define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) /* Assert there are as many real arguments as there are values (argument list ends with a NULL guard). */ # define ARGMATCH_VERIFY(Arglist, Vallist) \ verify (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1) /* Return the index of the element of ARGLIST (NULL terminated) that matches with ARG. If VALLIST is not NULL, then use it to resolve false ambiguities (i.e., different matches of ARG but corresponding to the same values in VALLIST). */ ptrdiff_t argmatch (char const *arg, char const *const *arglist, void const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE; # define ARGMATCH(Arg, Arglist, Vallist) \ argmatch (Arg, Arglist, (void const *) (Vallist), sizeof *(Vallist)) /* xargmatch calls this function when it fails. This function should not return. By default, this is a function that calls ARGMATCH_DIE which in turn defaults to 'exit (exit_failure)'. */ typedef void (*argmatch_exit_fn) (void); extern argmatch_exit_fn argmatch_die; /* Report on stderr why argmatch failed. Report correct values. */ void argmatch_invalid (char const *context, char const *value, ptrdiff_t problem); /* Left for compatibility with the old name invalid_arg */ # define invalid_arg(Context, Value, Problem) \ argmatch_invalid (Context, Value, Problem) /* Report on stderr the list of possible arguments. */ void argmatch_valid (char const *const *arglist, void const *vallist, size_t valsize); # define ARGMATCH_VALID(Arglist, Vallist) \ argmatch_valid (Arglist, (void const *) (Vallist), sizeof *(Vallist)) /* Same as argmatch, but upon failure, report an explanation of the failure, and exit using the function EXIT_FN. */ ptrdiff_t __xargmatch_internal (char const *context, char const *arg, char const *const *arglist, void const *vallist, size_t valsize, argmatch_exit_fn exit_fn); /* Programmer friendly interface to __xargmatch_internal. */ # define XARGMATCH(Context, Arg, Arglist, Vallist) \ ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ (void const *) (Vallist), \ sizeof *(Vallist), \ argmatch_die)]) /* Convert a value into a corresponding argument. */ char const *argmatch_to_argument (void const *value, char const *const *arglist, void const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE; # define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ argmatch_to_argument (Value, Arglist, \ (void const *) (Vallist), sizeof *(Vallist)) # define ARGMATCH_DEFINE_GROUP(Name, Type) \ /* The type of the values of this group. */ \ typedef Type argmatch_##Name##_type; \ \ /* The size of the type of the values of this group. */ \ enum argmatch_##Name##_size_enum \ { \ argmatch_##Name##_size = sizeof (argmatch_##Name##_type) \ }; \ \ /* Argument mapping of this group. */ \ typedef struct \ { \ /* Argument (e.g., "simple"). */ \ const char *arg; \ /* Value (e.g., simple_backups). */ \ const argmatch_##Name##_type val; \ } argmatch_##Name##_arg; \ \ /* Documentation of this group. */ \ typedef struct \ { \ /* Argument (e.g., "simple"). */ \ const char *arg; \ /* Documentation (e.g., N_("always make simple backups")). */ \ const char *doc; \ } argmatch_##Name##_doc; \ \ /* All the features of an argmatch group. */ \ typedef struct \ { \ const argmatch_##Name##_arg* args; \ const argmatch_##Name##_doc* docs; \ \ /* Printed before the usage message. */ \ const char *doc_pre; \ /* Printed after the usage message. */ \ const char *doc_post; \ } argmatch_##Name##_group_type; \ \ /* The structure the user must build. */ \ extern const argmatch_##Name##_group_type argmatch_##Name##_group; \ \ /* Print the documentation of this group. */ \ void argmatch_##Name##_usage (FILE *out); \ \ /* If nonnegative, the index I of ARG in ARGS, i.e, \ ARGS[I] == ARG. \ Return -1 for invalid argument, -2 for ambiguous argument. */ \ ptrdiff_t argmatch_##Name##_choice (const char *arg); \ \ /* A pointer to the corresponding value if it exists, or \ report an error and exit with failure if the argument was \ not recognized. */ \ const argmatch_##Name##_type* \ argmatch_##Name##_value (const char *context, const char *arg); \ \ /* The first argument in ARGS that matches this value, or NULL. */ \ const char * \ argmatch_##Name##_argument (const argmatch_##Name##_type *val); \ \ ptrdiff_t \ argmatch_##Name##_choice (const char *arg) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ size_t size = argmatch_##Name##_size; \ ptrdiff_t res = -1; /* Index of first nonexact match. */ \ bool ambiguous = false; /* Whether multiple nonexact match(es). */ \ size_t arglen = strlen (arg); \ \ /* Test all elements for either exact match or abbreviated \ matches. */ \ for (size_t i = 0; g->args[i].arg; i++) \ if (!strncmp (g->args[i].arg, arg, arglen)) \ { \ if (strlen (g->args[i].arg) == arglen) \ /* Exact match found. */ \ return i; \ else if (res == -1) \ /* First nonexact match found. */ \ res = i; \ else if (memcmp (&g->args[res].val, &g->args[i].val, size)) \ /* Second nonexact match found. */ \ /* There is a real ambiguity, or we could not \ disambiguate. */ \ ambiguous = true; \ } \ return ambiguous ? -2 : res; \ } \ \ const char * \ argmatch_##Name##_argument (const argmatch_##Name##_type *val) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ size_t size = argmatch_##Name##_size; \ for (size_t i = 0; g->args[i].arg; i++) \ if (!memcmp (val, &g->args[i].val, size)) \ return g->args[i].arg; \ return NULL; \ } \ \ /* List the valid values of this group. */ \ static void \ argmatch_##Name##_valid (FILE *out) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ size_t size = argmatch_##Name##_size; \ \ /* Try to put synonyms on the same line. Synonyms are expected \ to follow each other. */ \ fputs (gettext ("Valid arguments are:"), out); \ for (int i = 0; g->args[i].arg; i++) \ if (i == 0 \ || memcmp (&g->args[i-1].val, &g->args[i].val, size)) \ fprintf (out, "\n - %s", quote (g->args[i].arg)); \ else \ fprintf (out, ", %s", quote (g->args[i].arg)); \ putc ('\n', out); \ } \ \ const argmatch_##Name##_type* \ argmatch_##Name##_value (const char *context, const char *arg) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ ptrdiff_t res = argmatch_##Name##_choice (arg); \ if (res < 0) \ { \ argmatch_invalid (context, arg, res); \ argmatch_##Name##_valid (stderr); \ argmatch_die (); \ } \ return &g->args[res].val; \ } \ \ /* The column in which the documentation is displayed. \ The leftmost possible, but no more than 20. */ \ static int \ argmatch_##Name##_doc_col (void) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ size_t size = argmatch_##Name##_size; \ int res = 0; \ for (int i = 0; g->docs[i].arg; ++i) \ { \ int col = 4; \ int ival = argmatch_##Name##_choice (g->docs[i].arg); \ if (ival < 0) \ /* Pseudo argument, display it. */ \ col += strlen (g->docs[i].arg); \ else \ /* Genuine argument, display it with its synonyms. */ \ for (int j = 0; g->args[j].arg; ++j) \ if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \ col += (col == 4 ? 0 : 2) + strlen (g->args[j].arg); \ if (res <= col) \ res = col <= 20 ? col : 20; \ } \ return res ? res : 20; \ } \ \ void \ argmatch_##Name##_usage (FILE *out) \ { \ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \ size_t size = argmatch_##Name##_size; \ /* Width of the screen. Help2man does not seem to support \ arguments on several lines, so in that case pretend a very \ large width. */ \ const int screen_width = getenv ("HELP2MAN") ? INT_MAX : 80; \ if (g->doc_pre) \ fprintf (out, "%s\n", gettext (g->doc_pre)); \ int doc_col = argmatch_##Name##_doc_col (); \ for (int i = 0; g->docs[i].arg; ++i) \ { \ int col = 0; \ bool first = true; \ int ival = argmatch_##Name##_choice (g->docs[i].arg); \ if (ival < 0) \ /* Pseudo argument, display it. */ \ col += fprintf (out, " %s", g->docs[i].arg); \ else \ /* Genuine argument, display it with its synonyms. */ \ for (int j = 0; g->args[j].arg; ++j) \ if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \ { \ if (!first \ && screen_width < col + 2 + strlen (g->args[j].arg)) \ { \ fprintf (out, ",\n"); \ col = 0; \ first = true; \ } \ if (first) \ { \ col += fprintf (out, " "); \ first = false; \ } \ else \ col += fprintf (out, ","); \ col += fprintf (out, " %s", g->args[j].arg); \ } \ /* The doc. Separated by at least two spaces. */ \ if (doc_col < col + 2) \ { \ fprintf (out, "\n"); \ col = 0; \ } \ fprintf (out, "%*s%s\n", \ doc_col - col, "", gettext (g->docs[i].doc)); \ } \ if (g->doc_post) \ fprintf (out, "%s\n", gettext (g->doc_post)); \ } # ifdef __cplusplus } # endif #endif /* ARGMATCH_H_ */ �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-ba.c���������������������������������������������������������������0000664�0000000�0000000�00000003076�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ /* If set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ const char *argp_program_bug_address /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html> <https://lists.gnu.org/r/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-eexst.c������������������������������������������������������������0000664�0000000�0000000�00000002226�14110572173�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_ERR_EXIT_STATUS Copyright (C) 1997, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sysexits.h> #include "argp.h" /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from <sysexits.h>. */ error_t argp_err_exit_status = EX_USAGE; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-fmtstream.c��������������������������������������������������������0000664�0000000�0000000�00000031703�14110572173�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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 package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdarg.h> #include <ctype.h> #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef ARGP_FMTSTREAM_USE_LINEWRAP #ifndef isblank #define isblank(ch) ((ch)==' ' || (ch)=='\t') #endif #ifdef _LIBC # include <wchar.h> # include <libio/libioP.h> # define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a) #endif #define INIT_BUF_SIZE 200 #define PRINTF_SIZE_GUESS 150 /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ argp_fmtstream_t __argp_make_fmtstream (FILE *stream, size_t lmargin, size_t rmargin, ssize_t wmargin) { argp_fmtstream_t fs; fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream)); if (fs != NULL) { fs->stream = stream; fs->lmargin = lmargin; fs->rmargin = rmargin; fs->wmargin = wmargin; fs->point_col = 0; fs->point_offs = 0; fs->buf = (char *) malloc (INIT_BUF_SIZE); if (! fs->buf) { free (fs); fs = 0; } else { fs->p = fs->buf; fs->end = fs->buf + INIT_BUF_SIZE; } } return fs; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_make_fmtstream, argp_make_fmtstream) #endif #endif /* Flush FS to its stream, and free it (but don't close the stream). */ void __argp_fmtstream_free (argp_fmtstream_t fs) { __argp_fmtstream_update (fs); if (fs->p > fs->buf) { #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); #else fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif } free (fs->buf); free (fs); } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_free, argp_fmtstream_free) #endif #endif /* Process FS's buffer so that line wrapping is done from POINT_OFFS to the end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ void __argp_fmtstream_update (argp_fmtstream_t fs) { char *buf, *nl; size_t len; /* Scan the buffer for newlines. */ buf = fs->buf + fs->point_offs; while (buf < fs->p) { size_t r; if (fs->point_col == 0 && fs->lmargin != 0) { /* We are starting a new line. Print spaces to the left margin. */ const size_t pad = fs->lmargin; if (fs->p + pad < fs->end) { /* We can fit in them in the buffer by moving the buffer text up and filling in the beginning. */ memmove (buf + pad, buf, fs->p - buf); fs->p += pad; /* Compensate for bigger buffer. */ memset (buf, ' ', pad); /* Fill in the spaces. */ buf += pad; /* Don't bother searching them. */ } else { /* No buffer space for spaces. Must flush. */ size_t i; for (i = 0; i < pad; i++) { #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); } } fs->point_col = pad; } len = fs->p - buf; nl = memchr (buf, '\n', len); if (fs->point_col < 0) fs->point_col = 0; if (!nl) { /* The buffer ends in a partial line. */ if (fs->point_col + len < fs->rmargin) { /* The remaining buffer text is a partial line and fits within the maximum line width. Advance point for the characters to be written and stop scanning. */ fs->point_col += len; break; } else /* Set the end-of-line pointer for the code below to the end of the buffer. */ nl = fs->p; } else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin) { /* The buffer contains a full line that fits within the maximum line width. Reset point and scan the next line. */ fs->point_col = 0; buf = nl + 1; continue; } /* This line is too long. */ r = fs->rmargin - 1; if (fs->wmargin < 0) { /* Truncate the line by overwriting the excess with the newline and anything after it in the buffer. */ if (nl < fs->p) { memmove (buf + (r - fs->point_col), nl, fs->p - nl); fs->p -= buf + (r - fs->point_col) - nl; /* Reset point for the next line and start scanning it. */ fs->point_col = 0; buf += r + 1; /* Skip full line plus \n. */ } else { /* The buffer ends with a partial line that is beyond the maximum line width. Advance point for the characters written, and discard those past the max from the buffer. */ fs->point_col += len; fs->p -= fs->point_col - r; break; } } else { /* Do word wrap. Go to the column just past the maximum line width and scan back for the beginning of the word there. Then insert a line break. */ char *p, *nextline; int i; p = buf + (r + 1 - fs->point_col); while (p >= buf && !isblank ((unsigned char) *p)) --p; nextline = p + 1; /* This will begin the next line. */ if (nextline > buf) { /* Swallow separating blanks. */ if (p >= buf) do --p; while (p >= buf && isblank ((unsigned char) *p)); nl = p + 1; /* The newline will replace the first blank. */ } else { /* A single word that is greater than the maximum line width. Oh well. Put it on an overlong line by itself. */ p = buf + (r + 1 - fs->point_col); /* Find the end of the long word. */ if (p < nl) do ++p; while (p < nl && !isblank ((unsigned char) *p)); if (p == nl) { /* It already ends a line. No fussing required. */ fs->point_col = 0; buf = nl + 1; continue; } /* We will move the newline to replace the first blank. */ nl = p; /* Swallow separating blanks. */ do ++p; while (isblank ((unsigned char) *p)); /* The next line will start here. */ nextline = p; } /* Note: There are a bunch of tests below for NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall at the end of the buffer, and NEXTLINE is in fact empty (and so we need not be careful to maintain its contents). */ if ((nextline == buf + len + 1 ? fs->end - nl < fs->wmargin + 1 : nextline - (nl + 1) < fs->wmargin) && fs->p > nextline) { /* The margin needs more blanks than we removed. */ if (fs->end - fs->p > fs->wmargin + 1) /* Make some space for them. */ { size_t mv = fs->p - nextline; memmove (nl + 1 + fs->wmargin, nextline, mv); nextline = nl + 1 + fs->wmargin; len = nextline + mv - buf; *nl++ = '\n'; } else /* Output the first line so we can use the space. */ { #ifdef _LIBC __fxprintf (fs->stream, "%.*s\n", (int) (nl - fs->buf), fs->buf); #else if (nl > fs->buf) fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream); putc_unlocked ('\n', fs->stream); #endif len += buf - fs->buf; nl = buf = fs->buf; } } else /* We can fit the newline and blanks in before the next word. */ *nl++ = '\n'; if (nextline - nl >= fs->wmargin || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin)) /* Add blanks up to the wrap margin column. */ for (i = 0; i < fs->wmargin; ++i) *nl++ = ' '; else for (i = 0; i < fs->wmargin; ++i) #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); /* Copy the tail of the original buffer into the current buffer position. */ if (nl < nextline) memmove (nl, nextline, buf + len - nextline); len -= nextline - buf; /* Continue the scan on the remaining lines in the buffer. */ buf = nl; /* Restore bufp to include all the remaining text. */ fs->p = nl + len; /* Reset the counter of what has been output this line. If wmargin is 0, we want to avoid the lmargin getting added, so we set point_col to a magic value of -1 in that case. */ fs->point_col = fs->wmargin ? fs->wmargin : -1; } } /* Remember that we've scanned as far as the end of the buffer. */ fs->point_offs = fs->p - fs->buf; } /* Ensure that FS has space for AMOUNT more bytes in its buffer, either by growing the buffer, or by flushing it. True is returned iff we succeed. */ int __argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount) { if ((size_t) (fs->end - fs->p) < amount) { ssize_t wrote; /* Flush FS's buffer. */ __argp_fmtstream_update (fs); #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); wrote = fs->p - fs->buf; #else wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif if (wrote == fs->p - fs->buf) { fs->p = fs->buf; fs->point_offs = 0; } else { fs->p -= wrote; fs->point_offs -= wrote; memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf); return 0; } if ((size_t) (fs->end - fs->buf) < amount) /* Gotta grow the buffer. */ { size_t old_size = fs->end - fs->buf; size_t new_size = old_size + amount; char *new_buf; if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size))) { __set_errno (ENOMEM); return 0; } fs->buf = new_buf; fs->end = new_buf + new_size; fs->p = fs->buf; } } return 1; } ssize_t __argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...) { int out; size_t avail; size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */ do { va_list args; if (! __argp_fmtstream_ensure (fs, size_guess)) return -1; va_start (args, fmt); avail = fs->end - fs->p; out = __vsnprintf (fs->p, avail, fmt, args); va_end (args); if ((size_t) out >= avail) size_guess = out + 1; } while ((size_t) out >= avail); fs->p += out; return out; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) #endif #endif #endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ �������������������������������������������������������������gnulib-20210822~d383792/lib/argp-fmtstream.h��������������������������������������������������������0000664�0000000�0000000�00000025663�14110572173�0020163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams. Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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 package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. If the system does have it, it is just a wrapper for that. This header file is only used internally while compiling argp, and shouldn't be installed. */ #ifndef _ARGP_FMTSTREAM_H #define _ARGP_FMTSTREAM_H #include <stdio.h> #include <string.h> #include <unistd.h> #if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H) /* line_wrap_stream is available, so use that. */ #define ARGP_FMTSTREAM_USE_LINEWRAP #endif #ifdef ARGP_FMTSTREAM_USE_LINEWRAP /* Just be a simple wrapper for line_wrap_stream; the semantics are *slightly* different, as line_wrap_stream doesn't actually make a new object, it just modifies the given stream (reversibly) to do line-wrapping. Since we control who uses this code, it doesn't matter. */ #include <linewrap.h> typedef FILE *argp_fmtstream_t; #define argp_make_fmtstream line_wrap_stream #define __argp_make_fmtstream line_wrap_stream #define argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_putc(fs,ch) putc(ch,fs) #define argp_fmtstream_putc(fs,ch) putc(ch,fs) #define __argp_fmtstream_puts(fs,str) fputs(str,fs) #define argp_fmtstream_puts(fs,str) fputs(str,fs) #define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define __argp_fmtstream_printf fprintf #define argp_fmtstream_printf fprintf #define __argp_fmtstream_lmargin line_wrap_lmargin #define argp_fmtstream_lmargin line_wrap_lmargin #define __argp_fmtstream_set_lmargin line_wrap_set_lmargin #define argp_fmtstream_set_lmargin line_wrap_set_lmargin #define __argp_fmtstream_rmargin line_wrap_rmargin #define argp_fmtstream_rmargin line_wrap_rmargin #define __argp_fmtstream_set_rmargin line_wrap_set_rmargin #define argp_fmtstream_set_rmargin line_wrap_set_rmargin #define __argp_fmtstream_wmargin line_wrap_wmargin #define argp_fmtstream_wmargin line_wrap_wmargin #define __argp_fmtstream_set_wmargin line_wrap_set_wmargin #define argp_fmtstream_set_wmargin line_wrap_set_wmargin #define __argp_fmtstream_point line_wrap_point #define argp_fmtstream_point line_wrap_point #else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ /* Guess we have to define our own version. */ struct argp_fmtstream { FILE *stream; /* The stream we're outputting to. */ size_t lmargin, rmargin; /* Left and right margins. */ ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ /* Point in buffer to which we've processed for wrapping, but not output. */ size_t point_offs; /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ ssize_t point_col; char *buf; /* Output buffer. */ char *p; /* Current end of text in BUF. */ char *end; /* Absolute end of BUF. */ }; typedef struct argp_fmtstream *argp_fmtstream_t; /* Flush __FS to its stream, and free it (but don't close the stream). */ extern void __argp_fmtstream_free (argp_fmtstream_t __fs); extern void argp_fmtstream_free (argp_fmtstream_t __fs); /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin) _GL_ATTRIBUTE_DEALLOC (__argp_fmtstream_free, 1); extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin) _GL_ATTRIBUTE_DEALLOC (argp_fmtstream_free, 1); extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); #if _LIBC extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); #endif /* Access macros for various bits of state. */ #define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) #define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) #define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin #if _LIBC /* Set __FS's left margin to LMARGIN and return the old value. */ extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); /* Set __FS's right margin to __RMARGIN and return the old value. */ extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); /* Set __FS's wrap margin to __WMARGIN and return the old value. */ extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); /* Return the column number of the current output point in __FS. */ extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); #endif /* Internal routines. */ extern void _argp_fmtstream_update (argp_fmtstream_t __fs); extern void __argp_fmtstream_update (argp_fmtstream_t __fs); extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); #if !_LIBC || defined __OPTIMIZE__ /* Inline versions of above routines. */ #if !_LIBC #define __argp_fmtstream_putc argp_fmtstream_putc #define __argp_fmtstream_puts argp_fmtstream_puts #define __argp_fmtstream_write argp_fmtstream_write #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #define __argp_fmtstream_point argp_fmtstream_point #define __argp_fmtstream_update _argp_fmtstream_update #define __argp_fmtstream_ensure _argp_fmtstream_ensure #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef ARGP_FS_EI # define ARGP_FS_EI _GL_INLINE #endif #endif #ifndef ARGP_FS_EI #define ARGP_FS_EI extern inline #endif ARGP_FS_EI size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len) { if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) { memcpy (__fs->p, __str, __len); __fs->p += __len; return __len; } else return 0; } ARGP_FS_EI int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) { size_t __len = strlen (__str); if (__len) { size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); return __wrote == __len ? 0 : -1; } else return 0; } ARGP_FS_EI int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) { if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) return *__fs->p++ = __ch; else return EOF; } /* Set __FS's left margin to __LMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->lmargin; __fs->lmargin = __lmargin; return __old; } /* Set __FS's right margin to __RMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->rmargin; __fs->rmargin = __rmargin; return __old; } /* Set FS's wrap margin to __WMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->wmargin; __fs->wmargin = __wmargin; return __old; } /* Return the column number of the current output point in __FS. */ ARGP_FS_EI size_t __argp_fmtstream_point (argp_fmtstream_t __fs) { if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); return __fs->point_col >= 0 ? __fs->point_col : 0; } #if !_LIBC #undef __argp_fmtstream_putc #undef __argp_fmtstream_puts #undef __argp_fmtstream_write #undef __argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #undef __argp_fmtstream_update #undef __argp_fmtstream_ensure _GL_INLINE_HEADER_END #endif #endif /* !_LIBC || __OPTIMIZE__ */ #endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ #endif /* argp-fmtstream.h */ �����������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-fs-xinl.c����������������������������������������������������������0000664�0000000�0000000�00000003213�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp-fmtstream.h Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef _LIBC # define ARGP_FS_EI #else # define ARGP_FS_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp-fmtstream.h" #if 0 /* Not exported. */ /* Add weak aliases. */ #if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias) weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc) weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts) weak_alias (__argp_fmtstream_write, argp_fmtstream_write) weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin) weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin) weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin) weak_alias (__argp_fmtstream_point, argp_fmtstream_point) #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-help.c�������������������������������������������������������������0000664�0000000�0000000�00000201100�14110572173�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing help output Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <alloca.h> #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <assert.h> #include <stdarg.h> #include <ctype.h> #include <limits.h> #ifdef _LIBC # include <../libio/libioP.h> # include <wchar.h> #endif #ifdef _LIBC # include <libintl.h> # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #include "argp.h" #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif /* ========================================================================== */ /* User-selectable (using an environment variable) formatting parameters. These may be specified in an environment variable called 'ARGP_HELP_FMT', with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2 Where VALn must be a positive integer. The list of variables is in the UPARAM_NAMES vector, below. */ /* Default parameters. */ #define DUP_ARGS 0 /* True if option argument can be duplicated. */ #define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */ #define SHORT_OPT_COL 2 /* column in which short options start */ #define LONG_OPT_COL 6 /* column in which long options start */ #define DOC_OPT_COL 2 /* column in which doc options start */ #define OPT_DOC_COL 29 /* column in which option text starts */ #define HEADER_COL 1 /* column in which group headers are printed */ #define USAGE_INDENT 12 /* indentation of wrapped usage lines */ #define RMARGIN 79 /* right margin used for wrapping */ /* User-selectable (using an environment variable) formatting parameters. They must all be of type 'int' for the parsing code to work. */ struct uparams { /* If true, arguments for an option are shown with both short and long options, even when a given option has both, e.g. '-x ARG, --longx=ARG'. If false, then if an option has both, the argument is only shown with the long one, e.g., '-x, --longx=ARG', and a message indicating that this really means both is printed below the options. */ int dup_args; /* This is true if when DUP_ARGS is false, and some duplicate arguments have been suppressed, an explanatory message should be printed. */ int dup_args_note; /* Various output columns. */ int short_opt_col; /* column in which short options start */ int long_opt_col; /* column in which long options start */ int doc_opt_col; /* column in which doc options start */ int opt_doc_col; /* column in which option text starts */ int header_col; /* column in which group headers are printed */ int usage_indent; /* indentation of wrapped usage lines */ int rmargin; /* right margin used for wrapping */ int valid; /* True when the values in here are valid. */ }; /* This is a global variable, as user options are only ever read once. */ static struct uparams uparams = { DUP_ARGS, DUP_ARGS_NOTE, SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL, USAGE_INDENT, RMARGIN }; /* A particular uparam, and what the user name is. */ struct uparam_name { const char name[14]; /* User name. */ bool is_bool; /* Whether it's 'boolean'. */ unsigned char uparams_offs; /* Location of the (int) field in UPARAMS. */ }; /* The name-field mappings we know about. */ static const struct uparam_name uparam_names[] = { { "dup-args", true, offsetof (struct uparams, dup_args) }, { "dup-args-note", true, offsetof (struct uparams, dup_args_note) }, { "short-opt-col", false, offsetof (struct uparams, short_opt_col) }, { "long-opt-col", false, offsetof (struct uparams, long_opt_col) }, { "doc-opt-col", false, offsetof (struct uparams, doc_opt_col) }, { "opt-doc-col", false, offsetof (struct uparams, opt_doc_col) }, { "header-col", false, offsetof (struct uparams, header_col) }, { "usage-indent", false, offsetof (struct uparams, usage_indent) }, { "rmargin", false, offsetof (struct uparams, rmargin) } }; #define nuparam_names (sizeof (uparam_names) / sizeof (uparam_names[0])) static void validate_uparams (const struct argp_state *state, struct uparams *upptr) { const struct uparam_name *up; for (up = uparam_names; up < uparam_names + nuparam_names; up++) { if (up->is_bool || up->uparams_offs == offsetof (struct uparams, rmargin)) continue; if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) { __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ ARGP_HELP_FMT: %s value is less than or equal to %s"), "rmargin", up->name); return; } } uparams = *upptr; uparams.valid = 1; } /* Read user options from the environment, and fill in UPARAMS appropriately. */ static void fill_in_uparams (const struct argp_state *state) { const char *var = getenv ("ARGP_HELP_FMT"); struct uparams new_params = uparams; #define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0); if (var) { /* Parse var. */ while (*var) { SKIPWS (var); if (isalpha ((unsigned char) *var)) { size_t var_len; const struct uparam_name *un; int unspec = 0, val = 0; const char *arg = var; while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') arg++; var_len = arg - var; SKIPWS (arg); if (*arg == '\0' || *arg == ',') unspec = 1; else if (*arg == '=') { arg++; SKIPWS (arg); } if (unspec) { if (var[0] == 'n' && var[1] == 'o' && var[2] == '-') { val = 0; var += 3; var_len -= 3; } else val = 1; } else if (isdigit ((unsigned char) *arg)) { val = atoi (arg); while (isdigit ((unsigned char) *arg)) arg++; SKIPWS (arg); } for (un = uparam_names; un < uparam_names + nuparam_names; un++) if (strlen (un->name) == var_len && strncmp (var, un->name, var_len) == 0) { if (unspec && !un->is_bool) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: ARGP_HELP_FMT parameter requires a value"), (int) var_len, var); else *(int *)((char *)&new_params + un->uparams_offs) = val; break; } if (un == uparam_names + nuparam_names) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: Unknown ARGP_HELP_FMT parameter"), (int) var_len, var); var = arg; if (*var == ',') var++; } else if (*var) { __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "Garbage in ARGP_HELP_FMT: %s"), var); break; } } validate_uparams (state, &new_params); } } /* ========================================================================== */ /* Returns true if OPT hasn't been marked invisible. Visibility only affects whether OPT is displayed or used in sorting, not option shadowing. */ #define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN)) /* Returns true if OPT is an alias for an earlier option. */ #define oalias(opt) ((opt)->flags & OPTION_ALIAS) /* Returns true if OPT is a documentation-only entry. */ #define odoc(opt) ((opt)->flags & OPTION_DOC) /* Returns true if OPT should not be translated */ #define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS) /* Returns true if OPT is the end-of-list marker for a list of options. */ #define oend(opt) __option_is_end (opt) /* Returns true if OPT has a short option. */ #define oshort(opt) __option_is_short (opt) /* The help format for a particular option is like: -xARG, -yARG, --long1=ARG, --long2=ARG Documentation... Where ARG will be omitted if there's no argument, for this option, or will be surrounded by "[" and "]" appropriately if the argument is optional. The documentation string is word-wrapped appropriately, and if the list of options is long enough, it will be started on a separate line. If there are no short options for a given option, the first long option is indented slightly in a way that's supposed to make most long options appear to be in a separate column. For example, the following output (from ps): -p PID, --pid=PID List the process PID --pgrp=PGRP List processes in the process group PGRP -P, -x, --no-parent Include processes without parents -Q, --all-fields Don't elide unusable fields (normally if there's some reason ps can't print a field for any process, it's removed from the output entirely) -r, --reverse, --gratuitously-long-reverse-option Reverse the order of any sort --session[=SID] Add the processes from the session SID (which defaults to the sid of the current process) Here are some more options: -f ZOT, --foonly=ZOT Glork a foonly -z, --zaza Snit a zar -?, --help Give this help list --usage Give a short usage message -V, --version Print program version The struct argp_option array for the above could look like: { {"pid", 'p', "PID", 0, "List the process PID"}, {"pgrp", OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"}, {"no-parent", 'P', 0, 0, "Include processes without parents"}, {0, 'x', 0, OPTION_ALIAS}, {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" " if there's some reason ps can't" " print a field for any process, it's" " removed from the output entirely)" }, {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, {"session", OPT_SESS, "SID", OPTION_ARG_OPTIONAL, "Add the processes from the session" " SID (which defaults to the sid of" " the current process)" }, {0,0,0,0, "Here are some more options:"}, {"foonly", 'f', "ZOT", 0, "Glork a foonly"}, {"zaza", 'z', 0, 0, "Snit a zar"}, {0} } Note that the last three options are automatically supplied by argp_parse, unless you tell it not to with ARGP_NO_HELP. */ /* Returns true if CH occurs between BEG and END. */ static int find_char (char ch, char *beg, char *end) { while (beg < end) if (*beg == ch) return 1; else beg++; return 0; } /* -------------------------------------------------------------------------- */ /* Data structure: HOL = Help Option List */ struct hol_cluster; /* fwd decl */ struct hol_entry { /* First option. */ const struct argp_option *opt; /* Number of options (including aliases). */ unsigned num; /* A pointers into the HOL's short_options field, to the first short option letter for this entry. The order of the characters following this point corresponds to the order of options pointed to by OPT, and there are at most NUM. A short option recorded in an option following OPT is only valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's probably been shadowed by some other entry). */ char *short_options; /* Entries are sorted by their group first, in the order: 0, 1, 2, ..., n, -m, ..., -2, -1 and then alphabetically within each group. The default is 0. */ int group; /* The cluster of options this entry belongs to, or NULL if none. */ struct hol_cluster *cluster; /* The argp from which this option came. */ const struct argp *argp; /* Position in the array */ unsigned ord; }; /* A cluster of entries to reflect the argp tree structure. */ struct hol_cluster { /* A descriptive header printed before options in this cluster. */ const char *header; /* Used to order clusters within the same group with the same parent, according to the order in which they occurred in the parent argp's child list. */ int index; /* How to sort this cluster with respect to options and other clusters at the same depth (clusters always follow options in the same group). */ int group; /* The cluster to which this cluster belongs, or NULL if it's at the base level. */ struct hol_cluster *parent; /* The argp from which this cluster is (eventually) derived. */ const struct argp *argp; /* The distance this cluster is from the root. */ int depth; /* Clusters in a given hol are kept in a linked list, to make freeing them possible. */ struct hol_cluster *next; }; /* A list of options for help. */ struct hol { /* An array of hol_entry's. */ struct hol_entry *entries; /* The number of entries in this hol. If this field is zero, the others are undefined. */ unsigned num_entries; /* A string containing all short options in this HOL. Each entry contains pointers into this string, so the order can't be messed with blindly. */ char *short_options; /* Clusters of entries in this hol. */ struct hol_cluster *clusters; }; /* Create a struct hol from the options in ARGP. CLUSTER is the hol_cluster in which these entries occur, or NULL if at the root. */ static struct hol * make_hol (const struct argp *argp, struct hol_cluster *cluster) { char *so; const struct argp_option *o; const struct argp_option *opts = argp->options; struct hol_entry *entry; unsigned num_short_options = 0; struct hol *hol = malloc (sizeof (struct hol)); assert (hol); hol->num_entries = 0; hol->clusters = 0; if (opts) { int cur_group = 0; /* The first option must not be an alias. */ assert (! oalias (opts)); /* Calculate the space needed. */ for (o = opts; ! oend (o); o++) { if (! oalias (o)) hol->num_entries++; if (oshort (o)) num_short_options++; /* This is an upper bound. */ } hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); hol->short_options = malloc (num_short_options + 1); assert (hol->entries && hol->short_options); if (SIZE_MAX <= UINT_MAX) assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); /* Fill in the entries. */ so = hol->short_options; for (o = opts, entry = hol->entries; ! oend (o); entry++) { entry->opt = o; entry->num = 0; entry->short_options = so; entry->group = cur_group = o->group ? o->group : ((!o->name && !o->key) ? cur_group + 1 : cur_group); entry->cluster = cluster; entry->argp = argp; do { entry->num++; if (oshort (o) && ! find_char (o->key, hol->short_options, so)) /* O has a valid short option which hasn't already been used.*/ *so++ = o->key; o++; } while (! oend (o) && oalias (o)); } *so = '\0'; /* null terminated so we can find the length */ } return hol; } /* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the associated argp child list entry), INDEX, and PARENT, and return a pointer to it. ARGP is the argp that this cluster results from. */ static struct hol_cluster * hol_add_cluster (struct hol *hol, int group, const char *header, int index, struct hol_cluster *parent, const struct argp *argp) { struct hol_cluster *cl = malloc (sizeof (struct hol_cluster)); if (cl) { cl->group = group; cl->header = header; cl->index = index; cl->parent = parent; cl->argp = argp; cl->depth = parent ? parent->depth + 1 : 0; cl->next = hol->clusters; hol->clusters = cl; } return cl; } /* Free HOL and any resources it uses. */ static void hol_free (struct hol *hol) { struct hol_cluster *cl = hol->clusters; while (cl) { struct hol_cluster *next = cl->next; free (cl); cl = next; } if (hol->num_entries > 0) { free (hol->entries); free (hol->short_options); } free (hol); } /* Iterate across the short_options of the given ENTRY. Call FUNC for each. Stop when such a call returns a non-zero value, and return this value. If all FUNC invocations returned 0, return 0. */ static int hol_entry_short_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; char *so = entry->short_options; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (oshort (opt) && *so == opt->key) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); so++; } return val; } /* Iterate across the long options of the given ENTRY. Call FUNC for each. Stop when such a call returns a non-zero value, and return this value. If all FUNC invocations returned 0, return 0. */ static inline int #if (__GNUC__ >= 3) || (__clang_major__ >= 4) __attribute__ ((always_inline)) #endif hol_entry_long_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (opt->name) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); } return val; } /* A filter that returns true for the first short option of a given ENTRY. */ static int until_short (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { return oshort (opt) ? opt->key : 0; } /* Returns the first valid short option in ENTRY, or 0 if there is none. */ static char hol_entry_first_short (const struct hol_entry *entry) { return hol_entry_short_iterate (entry, until_short, entry->argp->argp_domain, 0); } /* Returns the first valid long option in ENTRY, or NULL if there is none. */ static const char * hol_entry_first_long (const struct hol_entry *entry) { const struct argp_option *opt; unsigned num; for (opt = entry->opt, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) return opt->name; return 0; } /* Returns the entry in HOL with the long option name NAME, or NULL if there is none. */ static struct hol_entry * hol_find_entry (struct hol *hol, const char *name) { struct hol_entry *entry = hol->entries; unsigned num_entries = hol->num_entries; while (num_entries-- > 0) { const struct argp_option *opt = entry->opt; unsigned num_opts = entry->num; while (num_opts-- > 0) if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0) return entry; else opt++; entry++; } return 0; } /* If an entry with the long option NAME occurs in HOL, set its special sort position to GROUP. */ static void hol_set_group (struct hol *hol, const char *name, int group) { struct hol_entry *entry = hol_find_entry (hol, name); if (entry) entry->group = group; } /* -------------------------------------------------------------------------- */ /* Sorting the entries in a HOL. */ /* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. */ static int group_cmp (int group1, int group2) { if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) return group1 - group2; else /* Return > 0 if group1 < 0 <= group2. Return < 0 if group2 < 0 <= group1. */ return group2 - group1; } /* Compare clusters CL1 and CL2 by the order that they should appear in output. Assume CL1 and CL2 have the same parent. */ static int hol_sibling_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { /* Compare by group first. */ int cmp = group_cmp (cl1->group, cl2->group); if (cmp != 0) return cmp; /* Within a group, compare by index within the group. */ return cl2->index - cl1->index; } /* Compare clusters CL1 and CL2 by the order that they should appear in output. Assume CL1 and CL2 are at the same depth. */ static int hol_cousin_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { if (cl1->parent == cl2->parent) return hol_sibling_cluster_cmp (cl1, cl2); else { /* Compare the parent clusters first. */ int cmp = hol_cousin_cluster_cmp (cl1->parent, cl2->parent); if (cmp != 0) return cmp; /* Next, compare by group. */ cmp = group_cmp (cl1->group, cl2->group); if (cmp != 0) return cmp; /* Next, within a group, compare by index within the group. */ return cl2->index - cl1->index; } } /* Compare clusters CL1 and CL2 by the order that they should appear in output. */ static int hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { /* If one cluster is deeper than the other, use its ancestor at the same level. Then, go by the rule that entries that are not in a sub-cluster come before entries in a sub-cluster. */ if (cl1->depth > cl2->depth) { do cl1 = cl1->parent; while (cl1->depth > cl2->depth); int cmp = hol_cousin_cluster_cmp (cl1, cl2); if (cmp != 0) return cmp; return 1; } else if (cl1->depth < cl2->depth) { do cl2 = cl2->parent; while (cl1->depth < cl2->depth); int cmp = hol_cousin_cluster_cmp (cl1, cl2); if (cmp != 0) return cmp; return -1; } else return hol_cousin_cluster_cmp (cl1, cl2); } /* Return the ancestor of CL that's just below the root (i.e., has a parent of 0). */ static struct hol_cluster * hol_cluster_base (struct hol_cluster *cl) { while (cl->parent) cl = cl->parent; return cl; } /* Given the name of an OPTION_DOC option, modifies *NAME to start at the tail that should be used for comparisons, and returns true iff it should be treated as a non-option. */ static int canon_doc_option (const char **name) { int non_opt; /* Skip initial whitespace. */ while (isspace ((unsigned char) **name)) (*name)++; /* Decide whether this looks like an option (leading '-') or not. */ non_opt = (**name != '-'); /* Skip until part of name used for sorting. */ while (**name && !isalnum ((unsigned char) **name)) (*name)++; return non_opt; } /* Order ENTRY1 and ENTRY2 by the order which they should appear in a help listing. This function implements a total order, that is: - if cmp (entry1, entry2) < 0 and cmp (entry2, entry3) < 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) < 0 and cmp (entry2, entry3) == 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) == 0 and cmp (entry2, entry3) < 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) == 0 and cmp (entry2, entry3) == 0, then cmp (entry1, entry3) == 0. */ static int hol_entry_cmp (const struct hol_entry *entry1, const struct hol_entry *entry2) { /* First, compare the group numbers. For entries within a cluster, what matters is the group number of the base cluster in which the entry resides. */ int group1 = (entry1->cluster ? hol_cluster_base (entry1->cluster)->group : entry1->group); int group2 = (entry2->cluster ? hol_cluster_base (entry2->cluster)->group : entry2->group); int cmp = group_cmp (group1, group2); if (cmp != 0) return cmp; /* The group numbers are the same. */ /* Entries that are not in a cluster come before entries in a cluster. */ cmp = (entry1->cluster != NULL) - (entry2->cluster != NULL); if (cmp != 0) return cmp; /* Compare the clusters. */ if (entry1->cluster != NULL) { cmp = hol_cluster_cmp (entry1->cluster, entry2->cluster); if (cmp != 0) return cmp; } /* For entries in the same cluster, compare also the group numbers within the cluster. */ cmp = group_cmp (entry1->group, entry2->group); if (cmp != 0) return cmp; /* The entries are both in the same group and the same cluster. */ /* 'documentation' options always follow normal options (or documentation options that *look* like normal options). */ const char *long1 = hol_entry_first_long (entry1); const char *long2 = hol_entry_first_long (entry2); int doc1 = (odoc (entry1->opt) ? long1 != NULL && canon_doc_option (&long1) : 0); int doc2 = (odoc (entry2->opt) ? long2 != NULL && canon_doc_option (&long2) : 0); cmp = doc1 - doc2; if (cmp != 0) return cmp; /* Compare the entries alphabetically. */ /* First, compare the first character of the options. Put entries without *any* valid options (such as options with OPTION_HIDDEN set) first. But as they're not displayed, it doesn't matter where they are. */ int short1 = hol_entry_first_short (entry1); int short2 = hol_entry_first_short (entry2); unsigned char first1 = short1 ? short1 : long1 != NULL ? *long1 : 0; unsigned char first2 = short2 ? short2 : long2 != NULL ? *long2 : 0; /* Compare ignoring case. */ /* Use tolower, not _tolower, since the latter has undefined behaviour for characters that are not uppercase letters. */ cmp = tolower (first1) - tolower (first2); if (cmp != 0) return cmp; /* When the options start with the same letter (ignoring case), lower-case comes first. */ cmp = first2 - first1; if (cmp != 0) return cmp; /* The first character of the options agree. */ /* Put entries with a short option before entries without a short option. */ cmp = (short1 != 0) - (short2 != 0); if (cmp != 0) return cmp; /* Compare entries without a short option by comparing the long option. */ if (short1 == 0) { cmp = (long1 != NULL) - (long2 != NULL); if (cmp != 0) return cmp; if (long1 != NULL) { cmp = __strcasecmp (long1, long2); if (cmp != 0) return cmp; } } /* We're out of comparison criteria. At this point, if ENTRY1 != ENTRY2, the order of these entries will be unpredictable. */ return 0; } /* Variant of hol_entry_cmp with correct signature for qsort. */ static int hol_entry_qcmp (const void *entry1_v, const void *entry2_v) { return hol_entry_cmp (entry1_v, entry2_v); } /* Sort HOL by group and alphabetically by option name (with short options taking precedence over long). Since the sorting is for display purposes only, the shadowing of options isn't effected. */ static void hol_sort (struct hol *hol) { if (hol->num_entries > 0) { unsigned i; struct hol_entry *e; for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++) e->ord = i; qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry), hol_entry_qcmp); } } /* -------------------------------------------------------------------------- */ /* Constructing the HOL. */ /* Append MORE to HOL, destroying MORE in the process. Options in HOL shadow any in MORE with the same name. */ static void hol_append (struct hol *hol, struct hol *more) { struct hol_cluster **cl_end = &hol->clusters; /* Steal MORE's cluster list, and add it to the end of HOL's. */ while (*cl_end) cl_end = &(*cl_end)->next; *cl_end = more->clusters; more->clusters = 0; /* Merge entries. */ if (more->num_entries > 0) { if (hol->num_entries == 0) { hol->num_entries = more->num_entries; hol->entries = more->entries; hol->short_options = more->short_options; more->num_entries = 0; /* Mark MORE's fields as invalid. */ } else /* Append the entries in MORE to those in HOL, taking care to only add non-shadowed SHORT_OPTIONS values. */ { unsigned left; char *so, *more_so; struct hol_entry *e; unsigned num_entries = hol->num_entries + more->num_entries; struct hol_entry *entries = malloc (num_entries * sizeof (struct hol_entry)); unsigned hol_so_len = strlen (hol->short_options); char *short_options = malloc (hol_so_len + strlen (more->short_options) + 1); assert (entries && short_options); if (SIZE_MAX <= UINT_MAX) assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry)); __mempcpy (__mempcpy (entries, hol->entries, hol->num_entries * sizeof (struct hol_entry)), more->entries, more->num_entries * sizeof (struct hol_entry)); __mempcpy (short_options, hol->short_options, hol_so_len); /* Fix up the short options pointers from HOL. */ for (e = entries, left = hol->num_entries; left > 0; e++, left--) e->short_options = short_options + (e->short_options - hol->short_options); /* Now add the short options from MORE, fixing up its entries too. */ so = short_options + hol_so_len; more_so = more->short_options; for (left = more->num_entries; left > 0; e++, left--) { int opts_left; const struct argp_option *opt; e->short_options = so; for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--) { int ch = *more_so; if (oshort (opt) && ch == opt->key) /* The next short option in MORE_SO, CH, is from OPT. */ { if (! find_char (ch, short_options, short_options + hol_so_len)) /* The short option CH isn't shadowed by HOL's options, so add it to the sum. */ *so++ = ch; more_so++; } } } *so = '\0'; free (hol->entries); free (hol->short_options); hol->entries = entries; hol->num_entries = num_entries; hol->short_options = short_options; } } hol_free (more); } /* Make a HOL containing all levels of options in ARGP. CLUSTER is the cluster in which ARGP's entries should be clustered, or NULL. */ static struct hol * argp_hol (const struct argp *argp, struct hol_cluster *cluster) { const struct argp_child *child = argp->children; struct hol *hol = make_hol (argp, cluster); if (child) while (child->argp) { struct hol_cluster *child_cluster = ((child->group || child->header) /* Put CHILD->argp within its own cluster. */ ? hol_add_cluster (hol, child->group, child->header, child - argp->children, cluster, argp) /* Just merge it into the parent's cluster. */ : cluster); hol_append (hol, argp_hol (child->argp, child_cluster)) ; child++; } return hol; } /* -------------------------------------------------------------------------- */ /* Printing the HOL. */ /* Inserts enough spaces to make sure STREAM is at column COL. */ static void indent_to (argp_fmtstream_t stream, unsigned col) { int needed = col - __argp_fmtstream_point (stream); while (needed-- > 0) __argp_fmtstream_putc (stream, ' '); } /* Output to STREAM either a space, or a newline if there isn't room for at least ENSURE characters before the right margin. */ static void space (argp_fmtstream_t stream, size_t ensure) { if (__argp_fmtstream_point (stream) + ensure >= __argp_fmtstream_rmargin (stream)) __argp_fmtstream_putc (stream, '\n'); else __argp_fmtstream_putc (stream, ' '); } /* If the option REAL has an argument, we print it in using the printf format REQ_FMT or OPT_FMT depending on whether it's a required or optional argument. */ static void arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt, const char *domain, argp_fmtstream_t stream) { if (real->arg) { if (real->flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, opt_fmt, dgettext (domain, real->arg)); else __argp_fmtstream_printf (stream, req_fmt, dgettext (domain, real->arg)); } } /* Helper functions for hol_entry_help. */ /* State used during the execution of hol_help. */ struct hol_help_state { /* PREV_ENTRY should contain the previous entry printed, or NULL. */ struct hol_entry *prev_entry; /* If an entry is in a different group from the previous one, and SEP_GROUPS is true, then a blank line will be printed before any output. */ int sep_groups; /* True if a duplicate option argument was suppressed (only ever set if UPARAMS.dup_args is false). */ int suppressed_dup_arg; }; /* Some state used while printing a help entry (used to communicate with helper functions). See the doc for hol_entry_help for more info, as most of the fields are copied from its arguments. */ struct pentry_state { const struct hol_entry *entry; argp_fmtstream_t stream; struct hol_help_state *hhstate; /* True if nothing's been printed so far. */ int first; /* If non-zero, the state that was used to print this help. */ const struct argp_state *state; }; /* If a user doc filter should be applied to DOC, do so. */ static const char * filter_doc (const char *doc, int key, const struct argp *argp, const struct argp_state *state) { if (argp && argp->help_filter) /* We must apply a user filter to this output. */ { void *input = __argp_input (argp, state); return (*argp->help_filter) (key, doc, input); } else /* No filter. */ return doc; } /* Prints STR as a header line, with the margin lines set appropriately, and notes the fact that groups should be separated with a blank line. ARGP is the argp that should dictate any user doc filtering to take place. Note that the previous wrap margin isn't restored, but the left margin is reset to 0. */ static void print_header (const char *str, const struct argp *argp, struct pentry_state *pest) { const char *tstr = str ? dgettext (argp->argp_domain, str) : NULL; const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state); if (fstr) { if (*fstr) { if (pest->hhstate->prev_entry) /* Precede with a blank line. */ __argp_fmtstream_putc (pest->stream, '\n'); indent_to (pest->stream, uparams.header_col); __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col); __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col); __argp_fmtstream_puts (pest->stream, fstr); __argp_fmtstream_set_lmargin (pest->stream, 0); __argp_fmtstream_putc (pest->stream, '\n'); } pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */ } if (fstr != tstr) free ((char *) fstr); } /* Return true if CL1 is a child of CL2. */ static int hol_cluster_is_child (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { while (cl1 && cl1 != cl2) cl1 = cl1->parent; return cl1 == cl2; } /* Inserts a comma if this isn't the first item on the line, and then makes sure we're at least to column COL. If this *is* the first item on a line, prints any pending whitespace/headers that should precede this line. Also clears FIRST. */ static void comma (unsigned col, struct pentry_state *pest) { if (pest->first) { const struct hol_entry *pe = pest->hhstate->prev_entry; const struct hol_cluster *cl = pest->entry->cluster; if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group) __argp_fmtstream_putc (pest->stream, '\n'); if (cl && cl->header && *cl->header && (!pe || (pe->cluster != cl && !hol_cluster_is_child (pe->cluster, cl)))) /* If we're changing clusters, then this must be the start of the ENTRY's cluster unless that is an ancestor of the previous one (in which case we had just popped into a sub-cluster for a bit). If so, then print the cluster's header line. */ { int old_wm = __argp_fmtstream_wmargin (pest->stream); print_header (cl->header, cl->argp, pest); __argp_fmtstream_set_wmargin (pest->stream, old_wm); } pest->first = 0; } else __argp_fmtstream_puts (pest->stream, ", "); indent_to (pest->stream, col); } /* Print help for ENTRY to STREAM. */ static void hol_entry_help (struct hol_entry *entry, const struct argp_state *state, argp_fmtstream_t stream, struct hol_help_state *hhstate) { unsigned num; const struct argp_option *real = entry->opt, *opt; char *so = entry->short_options; int have_long_opt = 0; /* We have any long options. */ /* Saved margins. */ int old_lm = __argp_fmtstream_set_lmargin (stream, 0); int old_wm = __argp_fmtstream_wmargin (stream); /* PEST is a state block holding some of our variables that we'd like to share with helper functions. */ struct pentry_state pest = { entry, stream, hhstate, 1, state }; if (! odoc (real)) for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { have_long_opt = 1; break; } /* First emit short options. */ __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */ for (opt = real, num = entry->num; num > 0; opt++, num--) if (oshort (opt) && opt->key == *so) /* OPT has a valid (non shadowed) short option. */ { if (ovisible (opt)) { comma (uparams.short_opt_col, &pest); __argp_fmtstream_putc (stream, '-'); __argp_fmtstream_putc (stream, *so); if (!have_long_opt || uparams.dup_args) arg (real, " %s", "[%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); else if (real->arg) hhstate->suppressed_dup_arg = 1; } so++; } /* Now, long options. */ if (odoc (real)) /* A "documentation" option. */ { __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.doc_opt_col, &pest); /* Calling dgettext here isn't quite right, since sorting will have been done on the original; but documentation options should be pretty rare anyway... */ __argp_fmtstream_puts (stream, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, opt->name)); } } else /* A real long option. */ { __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.long_opt_col, &pest); __argp_fmtstream_printf (stream, "--%s", opt->name); arg (real, "=%s", "[=%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); } } /* Next, documentation strings. */ __argp_fmtstream_set_lmargin (stream, 0); if (pest.first) { /* Didn't print any switches, what's up? */ if (!oshort (real) && !real->name) /* This is a group header, print it nicely. */ print_header (real->doc, entry->argp, &pest); else /* Just a totally shadowed option or null header; print nothing. */ goto cleanup; /* Just return, after cleaning up. */ } else { const char *tstr = real->doc ? dgettext (state == NULL ? NULL : state->root_argp->argp_domain, real->doc) : 0; const char *fstr = filter_doc (tstr, real->key, entry->argp, state); if (fstr && *fstr) { unsigned int col = __argp_fmtstream_point (stream); __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col); __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col); if (col > (unsigned int) (uparams.opt_doc_col + 3)) __argp_fmtstream_putc (stream, '\n'); else if (col >= (unsigned int) uparams.opt_doc_col) __argp_fmtstream_puts (stream, " "); else indent_to (stream, uparams.opt_doc_col); __argp_fmtstream_puts (stream, fstr); } if (fstr && fstr != tstr) free ((char *) fstr); /* Reset the left margin. */ __argp_fmtstream_set_lmargin (stream, 0); __argp_fmtstream_putc (stream, '\n'); } hhstate->prev_entry = entry; cleanup: __argp_fmtstream_set_lmargin (stream, old_lm); __argp_fmtstream_set_wmargin (stream, old_wm); } /* Output a long help message about the options in HOL to STREAM. */ static void hol_help (struct hol *hol, const struct argp_state *state, argp_fmtstream_t stream) { unsigned num; struct hol_entry *entry; struct hol_help_state hhstate = { 0, 0, 0 }; for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--) hol_entry_help (entry, state, stream, &hhstate); if (hhstate.suppressed_dup_arg && uparams.dup_args_note) { const char *tstr = dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ Mandatory or optional arguments to long options are also mandatory or \ optional for any corresponding short options."); const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE, state ? state->root_argp : 0, state); if (fstr && *fstr) { __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, fstr); __argp_fmtstream_putc (stream, '\n'); } if (fstr && fstr != tstr) free ((char *) fstr); } } /* Helper functions for hol_usage. */ /* If OPT is a short option without an arg, append its key to the string pointer pointer to by COOKIE, and advance the pointer. */ static int add_argless_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { char **snao_end = cookie; if (!(opt->arg || real->arg) && !((opt->flags | real->flags) & OPTION_NO_USAGE)) *(*snao_end)++ = opt->key; return 0; } /* If OPT is a short option with an arg, output a usage entry for it to the stream pointed at by COOKIE. */ static int usage_argful_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (arg && !(flags & OPTION_NO_USAGE)) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg); else { /* Manually do line wrapping so that it (probably) won't get wrapped at the embedded space. */ space (stream, 6 + strlen (arg)); __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg); } } return 0; } /* Output a usage entry for the long option opt to the stream pointed at by COOKIE. */ static int usage_long_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (! (flags & OPTION_NO_USAGE)) { if (arg) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg); else __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg); } else __argp_fmtstream_printf (stream, " [--%s]", opt->name); } return 0; } /* Print a short usage description for the arguments in HOL to STREAM. */ static void hol_usage (struct hol *hol, argp_fmtstream_t stream) { if (hol->num_entries > 0) { unsigned nentries; struct hol_entry *entry; char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1); char *snao_end = short_no_arg_opts; /* First we put a list of short options without arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, add_argless_short_opt, entry->argp->argp_domain, &snao_end); if (snao_end > short_no_arg_opts) { *snao_end++ = 0; __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts); } /* Now a list of short options *with* arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, usage_argful_short_opt, entry->argp->argp_domain, stream); /* Finally, a list of long options (whew!). */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_long_iterate (entry, usage_long_opt, entry->argp->argp_domain, stream); } } /* Calculate how many different levels with alternative args strings exist in ARGP. */ static size_t argp_args_levels (const struct argp *argp) { size_t levels = 0; const struct argp_child *child = argp->children; if (argp->args_doc && strchr (argp->args_doc, '\n')) levels++; if (child) while (child->argp) levels += argp_args_levels ((child++)->argp); return levels; } /* Print all the non-option args documented in ARGP to STREAM. Any output is preceded by a space. LEVELS is a pointer to a byte vector the length returned by argp_args_levels; it should be initialized to zero, and updated by this routine for the next call if ADVANCE is true. True is returned as long as there are more patterns to output. */ static int argp_args_usage (const struct argp *argp, const struct argp_state *state, char **levels, int advance, argp_fmtstream_t stream) { char *our_level = *levels; int multiple = 0; const struct argp_child *child = argp->children; const char *tdoc = argp->args_doc ? dgettext (argp->argp_domain, argp->args_doc) : NULL; const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); const char *nl = NULL; if (fdoc) { const char *cp = fdoc; nl = __strchrnul (cp, '\n'); if (*nl != '\0') /* This is a 'multi-level' args doc; advance to the correct position as determined by our state in LEVELS, and update LEVELS. */ { int i; multiple = 1; for (i = 0; i < *our_level; i++) cp = nl + 1, nl = __strchrnul (cp, '\n'); (*levels)++; } /* Manually do line wrapping so that it (probably) won't get wrapped at any embedded spaces. */ space (stream, 1 + nl - cp); __argp_fmtstream_write (stream, cp, nl - cp); } if (fdoc && fdoc != tdoc) free ((char *)fdoc); /* Free user's modified doc string. */ if (child) while (child->argp) advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream); if (advance && multiple) { /* Need to increment our level. */ if (*nl) /* There's more we can do here. */ { (*our_level)++; advance = 0; /* Our parent shouldn't advance also. */ } else if (*our_level > 0) /* We had multiple levels, but used them up; reset to zero. */ *our_level = 0; } return !advance; } /* Print the documentation for ARGP to STREAM; if POST is false, then everything preceding a '\v' character in the documentation strings (or the whole string, for those with none) is printed, otherwise, everything following the '\v' character (nothing for strings without). Each separate bit of documentation is separated a blank line, and if PRE_BLANK is true, then the first is as well. If FIRST_ONLY is true, only the first occurrence is output. Returns true if anything was output. */ static int argp_doc (const struct argp *argp, const struct argp_state *state, int post, int pre_blank, int first_only, argp_fmtstream_t stream) { const char *text; const char *inp_text; void *input = 0; int anything = 0; size_t inp_text_limit = 0; const char *doc = argp->doc ? dgettext (argp->argp_domain, argp->doc) : NULL; const struct argp_child *child = argp->children; if (doc) { char *vt = strchr (doc, '\v'); inp_text = post ? (vt ? vt + 1 : 0) : doc; inp_text_limit = (!post && vt) ? (vt - doc) : 0; } else inp_text = 0; if (argp->help_filter) /* We have to filter the doc strings. */ { if (inp_text_limit) /* Copy INP_TEXT so that it's nul-terminated. */ inp_text = __strndup (inp_text, inp_text_limit); input = __argp_input (argp, state); text = (*argp->help_filter) (post ? ARGP_KEY_HELP_POST_DOC : ARGP_KEY_HELP_PRE_DOC, inp_text, input); } else text = (const char *) inp_text; if (text) { if (pre_blank) __argp_fmtstream_putc (stream, '\n'); if (text == inp_text && inp_text_limit) __argp_fmtstream_write (stream, inp_text, inp_text_limit); else __argp_fmtstream_puts (stream, text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } if (text && text != inp_text) free ((char *) text); /* Free TEXT returned from the help filter. */ if (inp_text && inp_text_limit && argp->help_filter) free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ if (post && argp->help_filter) /* Now see if we have to output a ARGP_KEY_HELP_EXTRA text. */ { text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input); if (text) { if (anything || pre_blank) __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, text); free ((char *) text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } } if (child) while (child->argp && !(first_only && anything)) anything |= argp_doc ((child++)->argp, state, post, anything || pre_blank, first_only, stream); return anything; } /* Output a usage message for ARGP to STREAM. If called from argp_state_help, STATE is the relevant parsing state. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ static void _help (const struct argp *argp, const struct argp_state *state, FILE *stream, unsigned flags, char *name) { int anything = 0; /* Whether we've output anything. */ struct hol *hol = 0; argp_fmtstream_t fs; if (! stream) return; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif if (! uparams.valid) fill_in_uparams (state); fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0); if (! fs) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif return; } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG)) { hol = argp_hol (argp, 0); /* If present, these options always come last. */ hol_set_group (hol, "help", -1); hol_set_group (hol, "version", -1); hol_sort (hol); } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE)) /* Print a short "Usage:" message. */ { int first_pattern = 1, more_patterns; size_t num_pattern_levels = argp_args_levels (argp); char *pattern_levels = alloca (num_pattern_levels); memset (pattern_levels, 0, num_pattern_levels); do { int old_lm; int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent); char *levels = pattern_levels; if (first_pattern) __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, "Usage:"), name); else __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, " or: "), name); /* We set the lmargin as well as the wmargin, because hol_usage manually wraps options with newline to avoid annoying breaks. */ old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent); if (flags & ARGP_HELP_SHORT_USAGE) /* Just show where the options go. */ { if (hol->num_entries > 0) __argp_fmtstream_puts (fs, dgettext (argp->argp_domain, " [OPTION...]")); } else /* Actually print the options. */ { hol_usage (hol, fs); flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once. */ } more_patterns = argp_args_usage (argp, state, &levels, 1, fs); __argp_fmtstream_set_wmargin (fs, old_wm); __argp_fmtstream_set_lmargin (fs, old_lm); __argp_fmtstream_putc (fs, '\n'); anything = 1; first_pattern = 0; } while (more_patterns); } if (flags & ARGP_HELP_PRE_DOC) anything |= argp_doc (argp, state, 0, 0, 1, fs); if (flags & ARGP_HELP_SEE) { __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\ Try '%s --help' or '%s --usage' for more information.\n"), name, name); anything = 1; } if (flags & ARGP_HELP_LONG) /* Print a long, detailed help message. */ { /* Print info about all the options. */ if (hol->num_entries > 0) { if (anything) __argp_fmtstream_putc (fs, '\n'); hol_help (hol, state, fs); anything = 1; } } if (flags & ARGP_HELP_POST_DOC) /* Print any documentation strings at the end. */ anything |= argp_doc (argp, state, 1, anything, 0, fs); if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address) { if (anything) __argp_fmtstream_putc (fs, '\n'); __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "Report bugs to %s.\n"), argp_program_bug_address); anything = 1; } #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (hol) hol_free (hol); __argp_fmtstream_free (fs); } /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ void __argp_help (const struct argp *argp, FILE *stream, unsigned flags, char *name) { _help (argp, 0, stream, flags, name); } #ifdef weak_alias weak_alias (__argp_help, argp_help) #endif #if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) char * __argp_short_program_name (void) { # if HAVE_DECL_PROGRAM_INVOCATION_NAME char *name = strrchr (program_invocation_name, '/'); return name ? name + 1 : program_invocation_name; # else /* FIXME: What now? Miles suggests that it is better to use NULL, but currently the value is passed on directly to fputs_unlocked, so that requires more changes. */ # if __GNUC__ || (__clang_major__ >= 4) # warning No reasonable value to return # endif /* __GNUC__ */ return ""; # endif } #endif /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ void __argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags) { if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream) { if (state && (state->flags & ARGP_LONG_ONLY)) flags |= ARGP_HELP_LONG_ONLY; _help (state ? state->root_argp : 0, state, stream, flags, state ? state->name : __argp_short_program_name ()); if (!state || ! (state->flags & ARGP_NO_EXIT)) { if (flags & ARGP_HELP_EXIT_ERR) exit (argp_err_exit_status); if (flags & ARGP_HELP_EXIT_OK) exit (0); } } } #ifdef weak_alias weak_alias (__argp_state_help, argp_state_help) #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ void __argp_error (const struct argp_state *state, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { va_list ap; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, "%s: %s\n", state ? state->name : __argp_short_program_name (), buf); free (buf); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); putc_unlocked ('\n', stream); #endif __argp_state_help (state, stream, ARGP_HELP_STD_ERR); va_end (ap); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif } } } #ifdef weak_alias weak_alias (__argp_error, argp_error) #endif /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ void __argp_failure (const struct argp_state *state, int status, int errnum, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif #ifdef _LIBC __fxprintf (stream, "%s", state ? state->name : __argp_short_program_name ()); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); #endif if (fmt) { va_list ap; va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, ": %s", buf); free (buf); #else putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); #endif va_end (ap); } if (errnum) { char buf[200]; #ifdef _LIBC __fxprintf (stream, ": %s", __strerror_r (errnum, buf, sizeof (buf))); #else char const *s = NULL; putc_unlocked (':', stream); putc_unlocked (' ', stream); # if GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R # if !GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P s = __strerror_r (errnum, buf, sizeof buf); # else if (__strerror_r (errnum, buf, sizeof buf) == 0) s = buf; # endif # endif if (! s && ! (s = strerror (errnum))) s = dgettext (state->root_argp->argp_domain, "Unknown system error"); fputs_unlocked (s, stream); #endif } #if _LIBC if (_IO_fwide (stream, 0) > 0) putwc_unlocked (L'\n', stream); else #endif putc_unlocked ('\n', stream); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (status && (!state || !(state->flags & ARGP_NO_EXIT))) exit (status); } } } #ifdef weak_alias weak_alias (__argp_failure, argp_failure) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-namefrob.h���������������������������������������������������������0000664�0000000�0000000�00000013477�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Name frobnication for compiling argp outside of glibc Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #if !_LIBC /* This code is written for inclusion in gnu-libc, and uses names in the namespace reserved for libc. If we're not compiling in libc, define those names to be the normal ones instead. */ /* argp-parse functions */ #undef __argp_parse #define __argp_parse argp_parse #undef __option_is_end #define __option_is_end _option_is_end #undef __option_is_short #define __option_is_short _option_is_short #undef __argp_input #define __argp_input _argp_input /* argp-help functions */ #undef __argp_help #define __argp_help argp_help #undef __argp_error #define __argp_error argp_error #undef __argp_failure #define __argp_failure argp_failure #undef __argp_state_help #define __argp_state_help argp_state_help #undef __argp_usage #define __argp_usage argp_usage /* argp-fmtstream functions */ #undef __argp_make_fmtstream #define __argp_make_fmtstream argp_make_fmtstream #undef __argp_fmtstream_free #define __argp_fmtstream_free argp_fmtstream_free #undef __argp_fmtstream_putc #define __argp_fmtstream_putc argp_fmtstream_putc #undef __argp_fmtstream_puts #define __argp_fmtstream_puts argp_fmtstream_puts #undef __argp_fmtstream_write #define __argp_fmtstream_write argp_fmtstream_write #undef __argp_fmtstream_printf #define __argp_fmtstream_printf argp_fmtstream_printf #undef __argp_fmtstream_set_lmargin #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #define __argp_fmtstream_point argp_fmtstream_point #undef __argp_fmtstream_update #define __argp_fmtstream_update _argp_fmtstream_update #undef __argp_fmtstream_ensure #define __argp_fmtstream_ensure _argp_fmtstream_ensure #undef __argp_fmtstream_lmargin #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #undef __argp_fmtstream_rmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #undef __argp_fmtstream_wmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin /* normal libc functions we call */ #undef __flockfile #define __flockfile flockfile #undef __funlockfile #define __funlockfile funlockfile #undef __mempcpy #define __mempcpy mempcpy #undef __sleep #define __sleep sleep #undef __strcasecmp #define __strcasecmp strcasecmp #undef __strchrnul #define __strchrnul strchrnul #undef __strerror_r #define __strerror_r strerror_r #undef __strndup #define __strndup strndup #undef __vsnprintf #define __vsnprintf vsnprintf #if (defined HAVE_DECL_CLEARERR_UNLOCKED && !HAVE_DECL_CLEARERR_UNLOCKED \ && !defined clearerr_unlocked) # define clearerr_unlocked(x) clearerr (x) #endif #if (defined HAVE_DECL_FEOF_UNLOCKED && !HAVE_DECL_FEOF_UNLOCKED \ && !defined feof_unlocked) # define feof_unlocked(x) feof (x) #endif #if (defined HAVE_DECL_FERROR_UNLOCKED && !HAVE_DECL_FERROR_UNLOCKED \ && !defined ferror_unlocked) # define ferror_unlocked(x) ferror (x) #endif #if (defined HAVE_DECL_FFLUSH_UNLOCKED && !HAVE_DECL_FFLUSH_UNLOCKED \ && !defined fflush_unlocked) # define fflush_unlocked(x) fflush (x) #endif #if (defined HAVE_DECL_FGETS_UNLOCKED && !HAVE_DECL_FGETS_UNLOCKED \ && !defined fgets_unlocked) # define fgets_unlocked(x,y,z) fgets (x,y,z) #endif #if (defined HAVE_DECL_FPUTC_UNLOCKED && !HAVE_DECL_FPUTC_UNLOCKED \ && !defined fputc_unlocked) # define fputc_unlocked(x,y) fputc (x,y) #endif #if (defined HAVE_DECL_FPUTS_UNLOCKED && !HAVE_DECL_FPUTS_UNLOCKED \ && !defined fputs_unlocked) # define fputs_unlocked(x,y) fputs (x,y) #endif #if (defined HAVE_DECL_FREAD_UNLOCKED && !HAVE_DECL_FREAD_UNLOCKED \ && !defined fread_unlocked) # define fread_unlocked(w,x,y,z) fread (w,x,y,z) #endif #if (defined HAVE_DECL_FWRITE_UNLOCKED && !HAVE_DECL_FWRITE_UNLOCKED \ && !defined fwrite_unlocked) # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) #endif #if (defined HAVE_DECL_GETC_UNLOCKED && !HAVE_DECL_GETC_UNLOCKED \ && !defined getc_unlocked) # define getc_unlocked(x) getc (x) #endif #if (defined HAVE_DECL_GETCHAR_UNLOCKED && !HAVE_DECL_GETCHAR_UNLOCKED \ && !defined getchar_unlocked) # define getchar_unlocked() getchar () #endif #if (defined HAVE_DECL_PUTC_UNLOCKED && !HAVE_DECL_PUTC_UNLOCKED \ && !defined putc_unlocked) # define putc_unlocked(x,y) putc (x,y) #endif #if (defined HAVE_DECL_PUTCHAR_UNLOCKED && !HAVE_DECL_PUTCHAR_UNLOCKED \ && !defined putchar_unlocked) # define putchar_unlocked(x) putchar (x) #endif #endif /* !_LIBC */ #ifndef __set_errno #define __set_errno(e) (errno = (e)) #endif #if defined GNULIB_ARGP_DISABLE_DIRNAME # define __argp_base_name(arg) arg #elif defined GNULIB_ARGP_EXTERN_BASENAME extern char *__argp_base_name (const char *arg); #else # include "basename-lgpl.h" # define __argp_base_name last_component #endif #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define __argp_short_program_name() (program_invocation_short_name) #else extern char *__argp_short_program_name (void); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-parse.c������������������������������������������������������������0000664�0000000�0000000�00000076012�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing, layered over getopt Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <alloca.h> #include <stdalign.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <limits.h> #include <getopt.h> #include <getopt_int.h> #ifdef _LIBC # include <libintl.h> # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #define N_(msgid) msgid #include "argp.h" #include "argp-namefrob.h" #define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d)) /* Getopt return values. */ #define KEY_END (-1) /* The end of the options. */ #define KEY_ARG 1 /* A non-option argument. */ #define KEY_ERR '?' /* An error parsing the options. */ /* The meta-argument used to prevent any further arguments being interpreted as options. */ #define QUOTE "--" /* The number of bits we steal in a long-option value for our own use. */ #define GROUP_BITS CHAR_BIT /* The number of bits available for the user value. */ #define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS) #define USER_MASK ((1 << USER_BITS) - 1) /* EZ alias for ARGP_ERR_UNKNOWN. */ #define EBADKEY ARGP_ERR_UNKNOWN /* Default options. */ /* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep for one second intervals, decrementing _ARGP_HANG until it's zero. Thus you can force the program to continue by attaching a debugger and setting it to 0 yourself. */ static volatile int _argp_hang; #define OPT_PROGNAME -2 #define OPT_USAGE -3 #define OPT_HANG -4 static const struct argp_option argp_default_options[] = { {"help", '?', 0, 0, N_("give this help list"), -1}, {"usage", OPT_USAGE, 0, 0, N_("give a short usage message"), 0}, {"program-name",OPT_PROGNAME, N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0}, {"HANG", OPT_HANG, N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN, N_("hang for SECS seconds (default 3600)"), 0}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_default_parser (int key, char *arg, struct argp_state *state) { switch (key) { case '?': __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); break; case OPT_USAGE: __argp_state_help (state, state->out_stream, ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); break; case OPT_PROGNAME: /* Set the program name. */ #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = arg; #endif /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined to be that, so we have to be a bit careful here.] */ /* Update what we use for messages. */ state->name = __argp_base_name (arg); #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = state->name; #endif if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS)) == ARGP_PARSE_ARGV0) /* Update what getopt uses too. */ state->argv[0] = arg; break; case OPT_HANG: _argp_hang = atoi (arg ? arg : "3600"); while (_argp_hang-- > 0) __sleep (1); break; default: return EBADKEY; } return 0; } static const struct argp argp_default_argp = {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"}; static const struct argp_option argp_version_options[] = { {"version", 'V', 0, 0, N_("print program version"), -1}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_version_parser (int key, char *arg, struct argp_state *state) { switch (key) { case 'V': if (argp_program_version_hook) (*argp_program_version_hook) (state->out_stream, state); else if (argp_program_version) fprintf (state->out_stream, "%s\n", argp_program_version); else __argp_error (state, "%s", dgettext (state->root_argp->argp_domain, "(PROGRAM ERROR) No version known!?")); if (! (state->flags & ARGP_NO_EXIT)) exit (0); break; default: return EBADKEY; } return 0; } static const struct argp argp_version_argp = {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"}; /* Returns the offset into the getopt long options array LONG_OPTIONS of a long option with called NAME, or -1 if none is found. Passing NULL as NAME will return the number of options. */ static int find_long_option (struct option *long_options, const char *name) { struct option *l = long_options; while (l->name != NULL) if (name != NULL && strcmp (l->name, name) == 0) return l - long_options; else l++; if (name == NULL) return l - long_options; else return -1; } /* The state of a "group" during parsing. Each group corresponds to a particular argp structure from the tree of such descending from the top level argp passed to argp_parse. */ struct group { /* This group's parsing function. */ argp_parser_t parser; /* Which argp this group is from. */ const struct argp *argp; /* Points to the point in SHORT_OPTS corresponding to the end of the short options for this group. We use it to determine from which group a particular short options is from. */ char *short_end; /* The number of non-option args successfully handled by this parser. */ unsigned args_processed; /* This group's parser's parent's group. */ struct group *parent; unsigned parent_index; /* And the our position in the parent. */ /* These fields are swapped into and out of the state structure when calling this group's parser. */ void *input, **child_inputs; void *hook; }; /* Call GROUP's parser with KEY and ARG, swapping any group-specific info from STATE before calling, and back into state afterwards. If GROUP has no parser, EBADKEY is returned. */ static error_t group_parse (struct group *group, struct argp_state *state, int key, char *arg) { if (group->parser) { error_t err; state->hook = group->hook; state->input = group->input; state->child_inputs = group->child_inputs; state->arg_num = group->args_processed; err = (*group->parser)(key, arg, state); group->hook = state->hook; return err; } else return EBADKEY; } struct parser { const struct argp *argp; /* SHORT_OPTS is the getopt short options string for the union of all the groups of options. */ char *short_opts; /* LONG_OPTS is the array of getop long option structures for the union of all the groups of options. */ struct option *long_opts; /* OPT_DATA is the getopt data used for the re-entrant getopt. */ struct _getopt_data opt_data; /* States of the various parsing groups. */ struct group *groups; /* The end of the GROUPS array. */ struct group *egroup; /* A vector containing storage for the CHILD_INPUTS field in all groups. */ void **child_inputs; /* True if we think using getopt is still useful; if false, then remaining arguments are just passed verbatim with ARGP_KEY_ARG. This is cleared whenever getopt returns KEY_END, but may be set again if the user moves the next argument pointer backwards. */ int try_getopt; /* State block supplied to parsing routines. */ struct argp_state state; /* Memory used by this parser. */ void *storage; }; /* The next usable entries in the various parser tables being filled in by convert_options. */ struct parser_convert_state { struct parser *parser; char *short_end; struct option *long_end; void **child_inputs_end; }; /* Converts all options in ARGP (which is put in GROUP) and ancestors into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and CVT->LONG_END are the points at which new options are added. Returns the next unused group entry. CVT holds state used during the conversion. */ static struct group * convert_options (const struct argp *argp, struct group *parent, unsigned parent_index, struct group *group, struct parser_convert_state *cvt) { /* REAL is the most recent non-alias value of OPT. */ const struct argp_option *real = argp->options; const struct argp_child *children = argp->children; if (real || argp->parser) { const struct argp_option *opt; if (real) for (opt = real; !__option_is_end (opt); opt++) { if (! (opt->flags & OPTION_ALIAS)) /* OPT isn't an alias, so we can use values from it. */ real = opt; if (! (real->flags & OPTION_DOC)) /* A real option (not just documentation). */ { if (__option_is_short (opt)) /* OPT can be used as a short option. */ { *cvt->short_end++ = opt->key; if (real->arg) { *cvt->short_end++ = ':'; if (real->flags & OPTION_ARG_OPTIONAL) *cvt->short_end++ = ':'; } *cvt->short_end = '\0'; /* keep 0 terminated */ } if (opt->name && find_long_option (cvt->parser->long_opts, opt->name) < 0) /* OPT can be used as a long option. */ { cvt->long_end->name = opt->name; cvt->long_end->has_arg = (real->arg ? (real->flags & OPTION_ARG_OPTIONAL ? optional_argument : required_argument) : no_argument); cvt->long_end->flag = 0; /* we add a disambiguating code to all the user's values (which is removed before we actually call the function to parse the value); this means that the user loses use of the high 8 bits in all his values (the sign of the lower bits is preserved however)... */ cvt->long_end->val = ((opt->key ? opt->key : real->key) & USER_MASK) + (((group - cvt->parser->groups) + 1) << USER_BITS); /* Keep the LONG_OPTS list terminated. */ (++cvt->long_end)->name = NULL; } } } group->parser = argp->parser; group->argp = argp; group->short_end = cvt->short_end; group->args_processed = 0; group->parent = parent; group->parent_index = parent_index; group->input = 0; group->hook = 0; group->child_inputs = 0; if (children) /* Assign GROUP's CHILD_INPUTS field some space from CVT->child_inputs_end.*/ { unsigned num_children = 0; while (children[num_children].argp) num_children++; group->child_inputs = cvt->child_inputs_end; cvt->child_inputs_end += num_children; } parent = group++; } else parent = 0; if (children) { unsigned index = 0; while (children->argp) group = convert_options (children++->argp, parent, index++, group, cvt); } return group; } /* Find the merged set of getopt options, with keys appropriately prefixed. */ static void parser_convert (struct parser *parser, const struct argp *argp, int flags) { struct parser_convert_state cvt; cvt.parser = parser; cvt.short_end = parser->short_opts; cvt.long_end = parser->long_opts; cvt.child_inputs_end = parser->child_inputs; if (flags & ARGP_IN_ORDER) *cvt.short_end++ = '-'; else if (flags & ARGP_NO_ARGS) *cvt.short_end++ = '+'; *cvt.short_end = '\0'; cvt.long_end->name = NULL; parser->argp = argp; if (argp) parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt); else parser->egroup = parser->groups; /* No parsers at all! */ } /* Lengths of various parser fields which we will allocated. */ struct parser_sizes { size_t short_len; /* Getopt short options string. */ size_t long_len; /* Getopt long options vector. */ size_t num_groups; /* Group structures we allocate. */ size_t num_child_inputs; /* Child input slots. */ }; /* For ARGP, increments the NUM_GROUPS field in SZS by the total number of argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by the maximum lengths of the resulting merged getopt short options string and long-options array, respectively. */ static void calc_sizes (const struct argp *argp, struct parser_sizes *szs) { const struct argp_child *child = argp->children; const struct argp_option *opt = argp->options; if (opt || argp->parser) { szs->num_groups++; if (opt) { int num_opts = 0; while (!__option_is_end (opt++)) num_opts++; szs->short_len += num_opts * 3; /* opt + up to 2 ':'s */ szs->long_len += num_opts; } } if (child) while (child->argp) { calc_sizes ((child++)->argp, szs); szs->num_child_inputs++; } } /* Initializes PARSER to parse ARGP in a manner described by FLAGS. */ static error_t parser_init (struct parser *parser, const struct argp *argp, int argc, char **argv, int flags, void *input) { error_t err = 0; struct group *group; struct parser_sizes szs; struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER; char *storage; size_t glen, gsum; size_t clen, csum; size_t llen, lsum; size_t slen, ssum; szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1; szs.long_len = 0; szs.num_groups = 0; szs.num_child_inputs = 0; if (argp) calc_sizes (argp, &szs); /* Lengths of the various bits of storage used by PARSER. */ glen = (szs.num_groups + 1) * sizeof (struct group); clen = szs.num_child_inputs * sizeof (void *); llen = (szs.long_len + 1) * sizeof (struct option); slen = szs.short_len + 1; /* Sums of previous lengths, properly aligned. There's no need to align gsum, since struct group is aligned at least as strictly as void * (since it contains a void * member). And there's no need to align lsum, since struct option is aligned at least as strictly as char. */ gsum = glen; csum = alignto (gsum + clen, alignof (struct option)); lsum = csum + llen; ssum = lsum + slen; parser->storage = malloc (ssum); if (! parser->storage) return ENOMEM; storage = parser->storage; parser->groups = parser->storage; parser->child_inputs = (void **) (storage + gsum); parser->long_opts = (struct option *) (storage + csum); parser->short_opts = storage + lsum; parser->opt_data = opt_data; memset (parser->child_inputs, 0, clen); parser_convert (parser, argp, flags); memset (&parser->state, 0, sizeof (struct argp_state)); parser->state.root_argp = parser->argp; parser->state.argc = argc; parser->state.argv = argv; parser->state.flags = flags; parser->state.err_stream = stderr; parser->state.out_stream = stdout; parser->state.next = 0; /* Tell getopt to initialize. */ parser->state.pstate = parser; parser->try_getopt = 1; /* Call each parser for the first time, giving it a chance to propagate values to child parsers. */ if (parser->groups < parser->egroup) parser->groups->input = input; for (group = parser->groups; group < parser->egroup && (!err || err == EBADKEY); group++) { if (group->parent) /* If a child parser, get the initial input value from the parent. */ group->input = group->parent->child_inputs[group->parent_index]; if (!group->parser && group->argp->children && group->argp->children->argp) /* For the special case where no parsing function is supplied for an argp, propagate its input to its first child, if any (this just makes very simple wrapper argps more convenient). */ group->child_inputs[0] = group->input; err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0); } if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ if (err) return err; if (parser->state.flags & ARGP_NO_ERRS) { parser->opt_data.opterr = 0; if (parser->state.flags & ARGP_PARSE_ARGV0) /* getopt always skips ARGV[0], so we have to fake it out. As long as OPTERR is 0, then it shouldn't actually try to access it. */ parser->state.argv--, parser->state.argc++; } else parser->opt_data.opterr = 1; /* Print error messages. */ if (parser->state.argv == argv && argv[0]) /* There's an argv[0]; use it for messages. */ parser->state.name = __argp_base_name (argv[0]); else parser->state.name = __argp_short_program_name (); return 0; } /* Free any storage consumed by PARSER (but not PARSER itself). */ static error_t parser_finalize (struct parser *parser, error_t err, int arg_ebadkey, int *end_index) { struct group *group; if (err == EBADKEY && arg_ebadkey) /* Suppress errors generated by unparsed arguments. */ err = 0; if (! err) { if (parser->state.next == parser->state.argc) /* We successfully parsed all arguments! Call all the parsers again, just a few more times... */ { for (group = parser->groups; group < parser->egroup && (!err || err==EBADKEY); group++) if (group->args_processed == 0) err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0); for (group = parser->egroup - 1; group >= parser->groups && (!err || err==EBADKEY); group--) err = group_parse (group, &parser->state, ARGP_KEY_END, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ /* Tell the user that all arguments are parsed. */ if (end_index) *end_index = parser->state.next; } else if (end_index) /* Return any remaining arguments to the user. */ *end_index = parser->state.next; else /* No way to return the remaining arguments, they must be bogus. */ { if (!(parser->state.flags & ARGP_NO_ERRS) && parser->state.err_stream) fprintf (parser->state.err_stream, dgettext (parser->argp->argp_domain, "%s: Too many arguments\n"), parser->state.name); err = EBADKEY; } } /* Okay, we're all done, with either an error or success; call the parsers to indicate which one. */ if (err) { /* Maybe print an error message. */ if (err == EBADKEY) /* An appropriate message describing what the error was should have been printed earlier. */ __argp_state_help (&parser->state, parser->state.err_stream, ARGP_HELP_STD_ERR); /* Since we didn't exit, give each parser an error indication. */ for (group = parser->groups; group < parser->egroup; group++) group_parse (group, &parser->state, ARGP_KEY_ERROR, 0); } else /* Notify parsers of success, and propagate back values from parsers. */ { /* We pass over the groups in reverse order so that child groups are given a chance to do there processing before passing back a value to the parent. */ for (group = parser->egroup - 1 ; group >= parser->groups && (!err || err == EBADKEY) ; group--) err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ } /* Call parsers once more, to do any final cleanup. Errors are ignored. */ for (group = parser->egroup - 1; group >= parser->groups; group--) group_parse (group, &parser->state, ARGP_KEY_FINI, 0); if (err == EBADKEY) err = EINVAL; free (parser->storage); return err; } /* Call the user parsers to parse the non-option argument VAL, at the current position, returning any error. The state NEXT pointer is assumed to have been adjusted (by getopt) to point after this argument; this function will adjust it correctly to reflect however many args actually end up being consumed. */ static error_t parser_parse_arg (struct parser *parser, char *val) { /* Save the starting value of NEXT, first adjusting it so that the arg we're parsing is again the front of the arg vector. */ int index = --parser->state.next; error_t err = EBADKEY; struct group *group; int key = 0; /* Which of ARGP_KEY_ARG[S] we used. */ /* Try to parse the argument in each parser. */ for (group = parser->groups ; group < parser->egroup && err == EBADKEY ; group++) { parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */ key = ARGP_KEY_ARG; err = group_parse (group, &parser->state, key, val); if (err == EBADKEY) /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */ { parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */ key = ARGP_KEY_ARGS; err = group_parse (group, &parser->state, key, 0); } } if (! err) { if (key == ARGP_KEY_ARGS) /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't changed by the user, *all* arguments should be considered consumed. */ parser->state.next = parser->state.argc; if (parser->state.next > index) /* Remember that we successfully processed a non-option argument -- but only if the user hasn't gotten tricky and set the clock back. */ (--group)->args_processed += (parser->state.next - index); else /* The user wants to reparse some args, give getopt another try. */ parser->try_getopt = 1; } return err; } /* Call the user parsers to parse the option OPT, with argument VAL, at the current position, returning any error. */ static error_t parser_parse_opt (struct parser *parser, int opt, char *val) { /* The group key encoded in the high bits; 0 for short opts or group_number + 1 for long opts. */ int group_key = opt >> USER_BITS; error_t err = EBADKEY; if (group_key == 0) /* A short option. By comparing OPT's position in SHORT_OPTS to the various starting positions in each group's SHORT_END field, we can determine which group OPT came from. */ { struct group *group; char *short_index = strchr (parser->short_opts, opt); if (short_index) for (group = parser->groups; group < parser->egroup; group++) if (group->short_end > short_index) { err = group_parse (group, &parser->state, opt, parser->opt_data.optarg); break; } } else /* A long option. Preserve the sign in the user key, without invoking undefined behavior. Assume two's complement. */ { int user_key = ((opt & (1 << (USER_BITS - 1))) ? ~USER_MASK : 0) | (opt & USER_MASK); err = group_parse (&parser->groups[group_key - 1], &parser->state, user_key, parser->opt_data.optarg); } if (err == EBADKEY) /* At least currently, an option not recognized is an error in the parser, because we pre-compute which parser is supposed to deal with each option. */ { static const char bad_key_err[] = N_("(PROGRAM ERROR) Option should have been recognized!?"); if (group_key == 0) __argp_error (&parser->state, "-%c: %s", opt, dgettext (parser->argp->argp_domain, bad_key_err)); else { struct option *long_opt = parser->long_opts; while (long_opt->val != opt && long_opt->name) long_opt++; __argp_error (&parser->state, "--%s: %s", long_opt->name ? long_opt->name : "???", dgettext (parser->argp->argp_domain, bad_key_err)); } } return err; } /* Parse the next argument in PARSER (as indicated by PARSER->state.next). Any error from the parsers is returned, and *ARGP_EBADKEY indicates whether a value of EBADKEY is due to an unrecognized argument (which is generally not fatal). */ static error_t parser_parse_next (struct parser *parser, int *arg_ebadkey) { int opt; error_t err = 0; if (parser->state.quoted && parser->state.next < parser->state.quoted) /* The next argument pointer has been moved to before the quoted region, so pretend we never saw the quoting "--", and give getopt another chance. If the user hasn't removed it, getopt will just process it again. */ parser->state.quoted = 0; if (parser->try_getopt && !parser->state.quoted) /* Give getopt a chance to parse this. */ { /* Put it back in OPTIND for getopt. */ parser->opt_data.optind = parser->state.next; /* Distinguish KEY_ERR from a real option. */ parser->opt_data.optopt = KEY_END; if (parser->state.flags & ARGP_LONG_ONLY) opt = _getopt_long_only_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); else opt = _getopt_long_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); /* And see what getopt did. */ parser->state.next = parser->opt_data.optind; if (opt == KEY_END) /* Getopt says there are no more options, so stop using getopt; we'll continue if necessary on our own. */ { parser->try_getopt = 0; if (parser->state.next > 1 && strcmp (parser->state.argv[parser->state.next - 1], QUOTE) == 0) /* Not only is this the end of the options, but it's a "quoted" region, which may have args that *look* like options, so we definitely shouldn't try to use getopt past here, whatever happens. */ parser->state.quoted = parser->state.next; } else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END) /* KEY_ERR can have the same value as a valid user short option, but in the case of a real error, getopt sets OPTOPT to the offending character, which can never be KEY_END. */ { *arg_ebadkey = 0; return EBADKEY; } } else opt = KEY_END; if (opt == KEY_END) { /* We're past what getopt considers the options. */ if (parser->state.next >= parser->state.argc || (parser->state.flags & ARGP_NO_ARGS)) /* Indicate that we're done. */ { *arg_ebadkey = 1; return EBADKEY; } else /* A non-option arg; simulate what getopt might have done. */ { opt = KEY_ARG; parser->opt_data.optarg = parser->state.argv[parser->state.next++]; } } if (opt == KEY_ARG) /* A non-option argument; try each parser in turn. */ err = parser_parse_arg (parser, parser->opt_data.optarg); else err = parser_parse_opt (parser, opt, parser->opt_data.optarg); if (err == EBADKEY) *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG); return err; } /* Parse the options strings in ARGC & ARGV according to the argp in ARGP. FLAGS is one of the ARGP_ flags above. If END_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, EINVAL is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. */ error_t __argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, int *end_index, void *input) { error_t err; struct parser parser; /* If true, then err == EBADKEY is a result of a non-option argument failing to be parsed (which in some cases isn't actually an error). */ int arg_ebadkey = 0; #ifndef _LIBC if (!(flags & ARGP_PARSE_ARGV0)) { #if HAVE_DECL_PROGRAM_INVOCATION_NAME if (!program_invocation_name) program_invocation_name = argv[0]; #endif #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME if (!program_invocation_short_name) program_invocation_short_name = __argp_base_name (argv[0]); #endif } #endif if (! (flags & ARGP_NO_HELP)) /* Add our own options. */ { struct argp_child *child = alloca (4 * sizeof (struct argp_child)); struct argp *top_argp = alloca (sizeof (struct argp)); /* TOP_ARGP has no options, it just serves to group the user & default argps. */ memset (top_argp, 0, sizeof (*top_argp)); top_argp->children = child; memset (child, 0, 4 * sizeof (struct argp_child)); if (argp) (child++)->argp = argp; (child++)->argp = &argp_default_argp; if (argp_program_version || argp_program_version_hook) (child++)->argp = &argp_version_argp; child->argp = 0; argp = top_argp; } /* Construct a parser for these arguments. */ err = parser_init (&parser, argp, argc, argv, flags, input); if (! err) /* Parse! */ { while (! err) err = parser_parse_next (&parser, &arg_ebadkey); err = parser_finalize (&parser, err, arg_ebadkey, end_index); } return err; } #ifdef weak_alias weak_alias (__argp_parse, argp_parse) #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ void * __argp_input (const struct argp *argp, const struct argp_state *state) { if (state) { struct group *group; struct parser *parser = state->pstate; for (group = parser->groups; group < parser->egroup; group++) if (group->argp == argp) return group->input; } return 0; } #ifdef weak_alias weak_alias (__argp_input, _argp_input) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-pin.c��������������������������������������������������������������0000664�0000000�0000000�00000002301�14110572173�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Full and short program names for argp module Copyright (C) 2005, 2009-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME char *program_invocation_short_name = 0; #endif #ifndef HAVE_PROGRAM_INVOCATION_NAME char *program_invocation_name = 0; #endif #if (defined HAVE_PROGRAM_INVOCATION_SHORT_NAME \ && defined HAVE_PROGRAM_INVOCATION_NAME) /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-pv.c���������������������������������������������������������������0000664�0000000�0000000�00000003035�14110572173�0016566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION. Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ const char *argp_program_version /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html> <https://lists.gnu.org/r/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-pvh.c��������������������������������������������������������������0000664�0000000�0000000�00000002555�14110572173�0016744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION_HOOK. Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "argp.h" /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL; ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-version-etc.c������������������������������������������������������0000664�0000000�0000000�00000002405�14110572173�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Version hook for Argp. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <version-etc.h> #include <argp.h> #include <argp-version-etc.h> static const char *program_canonical_name; static const char * const *program_authors; static void version_etc_hook (FILE *stream, struct argp_state *state) { version_etc_ar (stream, program_canonical_name, PACKAGE_NAME, VERSION, program_authors); } void argp_version_setup (const char *name, const char * const *authors) { argp_program_version_hook = version_etc_hook; program_canonical_name = name; program_authors = authors; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-version-etc.h������������������������������������������������������0000664�0000000�0000000�00000002543�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Version hook for Argp. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 _ARGP_VERSION_ETC_H #define _ARGP_VERSION_ETC_H #ifdef __cplusplus extern "C" { #endif /* Setup standard display of the version information for the '--version' option. NAME is the canonical program name, and AUTHORS is a NULL- terminated array of author names. At least one author name must be given. If NAME is NULL, the package name (as given by the PACKAGE macro) is assumed to be the name of the program. This function is intended to be called before argp_parse(). */ extern void argp_version_setup (const char *name, const char * const *authors); #ifdef __cplusplus } #endif #endif /* _ARGP_VERSION_ETC_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp-xinl.c�������������������������������������������������������������0000664�0000000�0000000�00000002605�14110572173�0017115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp.h Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #if defined _LIBC || defined HAVE_FEATURES_H # include <features.h> #endif #ifndef __USE_EXTERN_INLINES # define __USE_EXTERN_INLINES 1 #endif #ifdef _LIBC # define ARGP_EI #else # define ARGP_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp.h" /* Add weak aliases. */ #if _LIBC - 0 && defined (weak_alias) weak_alias (__argp_usage, argp_usage) weak_alias (__option_is_short, _option_is_short) weak_alias (__option_is_end, _option_is_end) #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argp.h������������������������������������������������������������������0000664�0000000�0000000�00000067717�14110572173�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing, layered over getopt. Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. 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/>. */ #ifndef _ARGP_H #define _ARGP_H #include <stdio.h> #include <ctype.h> #include <getopt.h> #include <limits.h> #define __need_error_t #include <errno.h> #ifndef __THROW # define __THROW #endif #ifndef __NTH # define __NTH(fct) fct __THROW #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words. */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) # if 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif #ifndef __error_t_defined typedef int error_t; # define __error_t_defined #endif #ifdef __cplusplus extern "C" { #endif /* Glibc documentation: https://www.gnu.org/software/libc/manual/html_node/Argp.html */ /* A description of a particular option. A pointer to an array of these is passed in the OPTIONS field of an argp structure. Each option entry can correspond to one long option and/or one short option; more names for the same option can be added by following an entry in an option array with options having the OPTION_ALIAS flag set. */ struct argp_option { /* The long option name. For more than one name for the same option, you can use following options with the OPTION_ALIAS flag set. */ const char *name; /* What key is returned for this option. If > 0 and printable, then it's also accepted as a short option. */ int key; /* If non-NULL, this is the name of the argument associated with this option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ const char *arg; /* OPTION_ flags. */ int flags; /* The doc string for this option. If both NAME and KEY are 0, This string will be printed outdented from the normal option column, making it useful as a group header (it will be the first thing printed in its group); in this usage, it's conventional to end the string with a ':'. Write the initial value as N_("TEXT") if you want xgettext to collect it into a POT file. */ const char *doc; /* The group this option is in. In a long help message, options are sorted alphabetically within each group, and the groups presented in the order 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with if this field 0 will inherit the group number of the previous entry, or zero if it's the first one, unless its a group header (NAME and KEY both 0), in which case, the previous entry + 1 is the default. Automagic options such as --help are put into group -1. */ int group; }; /* The argument associated with this option is optional. */ #define OPTION_ARG_OPTIONAL 0x1 /* This option isn't displayed in any help messages. */ #define OPTION_HIDDEN 0x2 /* This option is an alias for the closest previous non-alias option. This means that it will be displayed in the same help entry, and will inherit fields other than NAME and KEY from the aliased option. */ #define OPTION_ALIAS 0x4 /* This option isn't actually an option (and so should be ignored by the actual option parser), but rather an arbitrary piece of documentation that should be displayed in much the same manner as the options. If this flag is set, then the option NAME field is displayed unmodified (e.g., no '--' prefix is added) at the left-margin (where a *short* option would normally be displayed), and the documentation string in the normal place. The NAME field will be translated using gettext, unless OPTION_NO_TRANS is set (see below). For purposes of sorting, any leading whitespace and punctuation is ignored, except that if the first non-whitespace character is not '-', this entry is displayed after all options (and OPTION_DOC entries with a leading '-') in the same group. */ #define OPTION_DOC 0x8 /* This option shouldn't be included in "long" usage messages (but is still included in help messages). This is mainly intended for options that are completely documented in an argp's ARGS_DOC field, in which case including the option in the generic usage list would be redundant. For instance, if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to distinguish these two cases, -x should probably be marked OPTION_NO_USAGE. */ #define OPTION_NO_USAGE 0x10 /* Valid only in conjunction with OPTION_DOC. This option disables translation of option name. */ #define OPTION_NO_TRANS 0x20 struct argp; /* fwd declare this type */ struct argp_state; /* " */ struct argp_child; /* " */ /* The type of a pointer to an argp parsing function. */ typedef error_t (*argp_parser_t) (int __key, char *__arg, struct argp_state *__state); /* What to return for unrecognized keys. For special ARGP_KEY_ keys, such returns will simply be ignored. For user keys, this error will be turned into EINVAL (if the call to argp_parse is such that errors are propagated back to the user instead of exiting); returning EINVAL itself would result in an immediate stop to parsing in *all* cases. */ #define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ /* Special values for the KEY argument to an argument parsing function. ARGP_ERR_UNKNOWN should be returned if they aren't understood. The sequence of keys to a parsing function is either (where each uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized The third case is where every parser returned ARGP_KEY_UNKNOWN for an argument, in which case parsing stops at that argument (returning the unparsed arguments to the caller of argp_parse if requested, or stopping with an error message if not). If an error occurs (either detected by argp, or because the parsing function returned an error value), then the parser is called with ARGP_KEY_ERROR, and no further calls are made. */ /* This is not an option at all, but rather a command line argument. If a parser receiving this key returns success, the fact is recorded, and the ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the argument, a parser function decrements the NEXT field of the state it's passed, the option won't be considered processed; this is to allow you to actually modify the argument (perhaps into an option), and have it processed again. */ #define ARGP_KEY_ARG 0 /* There are remaining arguments not parsed by any parser, which may be found starting at (STATE->argv + STATE->next). If success is returned, but STATE->next left untouched, it's assumed that all arguments were consume, otherwise, the parser should adjust STATE->next to reflect any arguments consumed. */ #define ARGP_KEY_ARGS 0x1000006 /* There are no more command line arguments at all. */ #define ARGP_KEY_END 0x1000001 /* Because it's common to want to do some special processing if there aren't any non-option args, user parsers are called with this key if they didn't successfully process any non-option arguments. Called just before ARGP_KEY_END (where more general validity checks on previously parsed arguments can take place). */ #define ARGP_KEY_NO_ARGS 0x1000002 /* Passed in before any parsing is done. Afterwards, the values of each element of the CHILD_INPUT field, if any, in the state structure is copied to each child's state to be the initial value of the INPUT field. */ #define ARGP_KEY_INIT 0x1000003 /* Use after all other keys, including SUCCESS & END. */ #define ARGP_KEY_FINI 0x1000007 /* Passed in when parsing has successfully been completed (even if there are still arguments remaining). */ #define ARGP_KEY_SUCCESS 0x1000004 /* Passed in if an error occurs. */ #define ARGP_KEY_ERROR 0x1000005 /* An argp structure contains a set of options declarations, a function to deal with parsing one, documentation string, a possible vector of child argp's, and perhaps a function to filter help output. When actually parsing options, getopt is called with the union of all the argp structures chained together through their CHILD pointers, with conflicts being resolved in favor of the first occurrence in the chain. */ struct argp { /* An array of argp_option structures, terminated by an entry with both NAME and KEY having a value of 0. */ const struct argp_option *options; /* What to do with an option from this structure. KEY is the key associated with the option, and ARG is any associated argument (NULL if none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then parsing is stopped immediately, and that value is returned from argp_parse(). For special (non-user-supplied) values of KEY, see the ARGP_KEY_ definitions below. */ argp_parser_t parser; /* If non-NULL, a string describing what other arguments are wanted by this program. It is only used by argp_usage to print the "Usage:" message. If it contains newlines, the strings separated by them are considered alternative usage patterns, and printed on separate lines (lines after the first are prefix by " or: " instead of "Usage:"). */ const char *args_doc; /* If non-NULL, a string containing extra text to be printed before and after the options in a long help message (separated by a vertical tab '\v' character). Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if you want xgettext to collect the two pieces of text into a POT file. */ const char *doc; /* A vector of argp_children structures, terminated by a member with a 0 argp field, pointing to child argps should be parsed with this one. Any conflicts are resolved in favor of this argp, or early argps in the CHILDREN list. This field is useful if you use libraries that supply their own argp structure, which you want to use in conjunction with your own. */ const struct argp_child *children; /* If non-zero, this should be a function to filter the output of help messages. KEY is either a key from an option, in which case TEXT is that option's help text, or a special key from the ARGP_KEY_HELP_ defines, below, describing which other help text TEXT is. The function should return either TEXT, if it should be used as-is, a replacement string, which should be malloced, and will be freed by argp, or NULL, meaning "print nothing". The value for TEXT is *after* any translation has been done, so if any of the replacement text also needs translation, that should be done by the filter function. INPUT is either the input supplied to argp_parse, or NULL, if argp_help was called directly. */ char *(*help_filter) (int __key, const char *__text, void *__input); /* If non-zero the strings used in the argp library are translated using the domain described by this string. Otherwise the currently installed default domain is used. */ const char *argp_domain; }; /* Possible KEY arguments to a help filter function. */ #define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ #define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ #define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ #define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; TEXT is NULL for this key. */ /* Explanatory note emitted when duplicate option arguments have been suppressed. */ #define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 #define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ /* When an argp has a non-zero CHILDREN field, it should point to a vector of argp_child structures, each of which describes a subsidiary argp. */ struct argp_child { /* The child parser. */ const struct argp *argp; /* Flags for this child. */ int flags; /* If non-zero, an optional header to be printed in help output before the child options. As a side-effect, a non-zero value forces the child options to be grouped together; to achieve this effect without actually printing a header string, use a value of "". */ const char *header; /* Where to group the child options relative to the other ("consolidated") options in the parent argp; the values are the same as the GROUP field in argp_option structs, but all child-groupings follow parent options at a particular group level. If both this field and HEADER are zero, then they aren't grouped at all, but rather merged with the parent options (merging the child's grouping levels with the parents). */ int group; }; /* Parsing state. This is provided to parsing functions called by argp, which may examine and, as noted, modify fields. */ struct argp_state { /* The top level ARGP being parsed. */ const struct argp *root_argp; /* The argument vector being parsed. May be modified. */ int argc; char **argv; /* The index in ARGV of the next arg that to be parsed. May be modified. */ int next; /* The flags supplied to argp_parse. May be modified. */ unsigned flags; /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the number of the current arg, starting at zero, and incremented after each such call returns. At all other times, this is the number of such arguments that have been processed. */ unsigned arg_num; /* If non-zero, the index in ARGV of the first argument following a special '--' argument (which prevents anything following being interpreted as an option). Only set once argument parsing has proceeded past this point. */ int quoted; /* An arbitrary pointer passed in from the user. */ void *input; /* Values to pass to child parsers. This vector will be the same length as the number of children for the current parser. */ void **child_inputs; /* For the parser's use. Initialized to 0. */ void *hook; /* The name used when printing messages. This is initialized to ARGV[0], or PROGRAM_INVOCATION_NAME if that is unavailable. */ char *name; /* Streams used when argp prints something. */ FILE *err_stream; /* For errors; initialized to stderr. */ FILE *out_stream; /* For information; initialized to stdout. */ void *pstate; /* Private, for use by argp. */ }; /* Flags for argp_parse (note that the defaults are those that are convenient for program command line parsing): */ /* Don't ignore the first element of ARGV. Normally (and always unless ARGP_NO_ERRS is set) the first element of the argument vector is skipped for option parsing purposes, as it corresponds to the program name in a command line. */ #define ARGP_PARSE_ARGV0 0x01 /* Don't print error messages for unknown options to stderr; unless this flag is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program name in the error messages. This flag implies ARGP_NO_EXIT (on the assumption that silent exiting upon errors is bad behaviour). */ #define ARGP_NO_ERRS 0x02 /* Don't parse any non-option args. Normally non-option args are parsed by calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg as the value. Since it's impossible to know which parse function wants to handle it, each one is called in turn, until one returns 0 or an error other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the argp_parse returns prematurely (but with a return value of 0). If all args have been parsed without error, all parsing functions are called one last time with a key of ARGP_KEY_END. This flag needn't normally be set, as the normal behavior is to stop parsing as soon as some argument can't be handled. */ #define ARGP_NO_ARGS 0x04 /* Parse options and arguments in the same order they occur on the command line -- normally they're rearranged so that all options come first. */ #define ARGP_IN_ORDER 0x08 /* Don't provide the standard long option --help, which causes usage and option help information to be output to stdout, and exit (0) called. */ #define ARGP_NO_HELP 0x10 /* Don't exit on errors (they may still result in error messages). */ #define ARGP_NO_EXIT 0x20 /* Use the gnu getopt "long-only" rules for parsing arguments. */ #define ARGP_LONG_ONLY 0x40 /* Turns off any message-printing/exiting options. */ #define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) /* Parse the options strings in ARGC & ARGV according to the options in ARGP. FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. This function may also call exit unless the ARGP_NO_HELP flag is set. INPUT is a pointer to a value to be passed in to the parser. */ extern error_t argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); extern error_t __argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); /* Global variables. */ /* GNULIB makes sure both program_invocation_name and program_invocation_short_name are available */ #ifdef GNULIB_PROGRAM_INVOCATION_NAME extern char *program_invocation_name; # undef HAVE_DECL_PROGRAM_INVOCATION_NAME # define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 #endif #ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME extern char *program_invocation_short_name; # undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 #endif /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ extern const char *argp_program_version; /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ extern void (*argp_program_version_hook) (FILE *__restrict __stream, struct argp_state *__restrict __state); /* If defined or set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ extern const char *argp_program_bug_address; /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from <sysexits.h>. */ extern error_t argp_err_exit_status; /* Flags for argp_help. */ #define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ #define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ #define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ #define ARGP_HELP_LONG 0x08 /* a long help message. */ #define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ #define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ #define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) #define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ #define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to reflect ARGP_LONG_ONLY mode. */ /* These ARGP_HELP flags are only understood by argp_state_help. */ #define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ #define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ /* The standard thing to do after a program command line parsing error, if an error message has already been printed. */ #define ARGP_HELP_STD_ERR \ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do after a program command line parsing error, if no more specific error message has been printed. */ #define ARGP_HELP_STD_USAGE \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do in response to a --help option. */ #define ARGP_HELP_STD_HELP \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__restrict __name); extern void __argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__name); /* The following routines are intended to be called from within an argp parsing routine (thus taking an argp_state structure as the first argument). They may or may not print an error message and exit, depending on the flags in STATE -- in any case, the caller should be prepared for them *not* to exit, and should return an appropriate error after calling them. [argp_usage & argp_error should probably be called argp_state_..., but they're used often enough that they should be short] */ /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); extern void __argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); #if _LIBC /* Possibly output the standard usage message for ARGP to stderr and exit. */ extern void argp_usage (const struct argp_state *__state); extern void __argp_usage (const struct argp_state *__state); #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ extern void argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) #endif ; extern void __argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) #endif ; /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ extern void argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) #endif ; extern void __argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) #endif ; #if _LIBC /* Returns true if the option OPT is a valid short option. */ extern int _option_is_short (const struct argp_option *__opt) __THROW; extern int __option_is_short (const struct argp_option *__opt) __THROW; /* Returns true if the option OPT is in fact the last (unused) entry in an options array. */ extern int _option_is_end (const struct argp_option *__opt) __THROW; extern int __option_is_end (const struct argp_option *__opt) __THROW; #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ extern void *_argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; extern void *__argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; #if !_LIBC || defined __USE_EXTERN_INLINES # if !_LIBC # define __argp_usage argp_usage # define __argp_state_help argp_state_help # define __option_is_short _option_is_short # define __option_is_end _option_is_end #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN # ifndef ARGP_EI # define ARGP_EI _GL_INLINE # endif # endif # ifndef ARGP_EI # define ARGP_EI __extern_inline # endif ARGP_EI void __argp_usage (const struct argp_state *__state) { __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); } ARGP_EI int __NTH (__option_is_short (const struct argp_option *__opt)) { if (__opt->flags & OPTION_DOC) return 0; else { int __key = __opt->key; return __key > 0 && __key <= UCHAR_MAX && isprint (__key); } } ARGP_EI int __NTH (__option_is_end (const struct argp_option *__opt)) { return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; } # if !_LIBC # undef __argp_usage # undef __argp_state_help # undef __option_is_short # undef __option_is_end _GL_INLINE_HEADER_END # endif #endif /* Use extern inlines. */ #ifdef __cplusplus } #endif #endif /* argp.h */ �������������������������������������������������gnulib-20210822~d383792/lib/argv-iter.c�������������������������������������������������������������0000664�0000000�0000000�00000004724�14110572173�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over arguments from argv or --files0-from=FILE Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "argv-iter.h" #include <stdlib.h> #include <string.h> struct argv_iterator { /* Test FP to determine whether in read-mode or argv-mode. */ /* file-mode: fp records position */ FILE *fp; size_t item_idx; char *tok; size_t buf_len; /* argv-mode: record just argv and current pointer */ char **arg_list; char **p; }; struct argv_iterator * argv_iter_init_argv (char **argv) { struct argv_iterator *ai = malloc (sizeof *ai); if (!ai) return NULL; ai->fp = NULL; ai->arg_list = argv; ai->p = argv; return ai; } /* Initialize to read from the stream, FP. The input is expected to contain a list of NUL-delimited tokens. */ struct argv_iterator * argv_iter_init_stream (FILE *fp) { struct argv_iterator *ai = malloc (sizeof *ai); if (!ai) return NULL; ai->fp = fp; ai->tok = NULL; ai->buf_len = 0; ai->item_idx = 0; ai->arg_list = NULL; return ai; } char * argv_iter (struct argv_iterator *ai, enum argv_iter_err *err) { if (ai->fp) { ssize_t len = getdelim (&ai->tok, &ai->buf_len, '\0', ai->fp); if (len < 0) { *err = feof (ai->fp) ? AI_ERR_EOF : AI_ERR_READ; return NULL; } *err = AI_ERR_OK; ai->item_idx++; return ai->tok; } else { if (*(ai->p) == NULL) { *err = AI_ERR_EOF; return NULL; } else { *err = AI_ERR_OK; return *(ai->p++); } } } size_t argv_iter_n_args (struct argv_iterator const *ai) { return ai->fp ? ai->item_idx : ai->p - ai->arg_list; } void argv_iter_free (struct argv_iterator *ai) { if (ai->fp) free (ai->tok); free (ai); } ��������������������������������������������gnulib-20210822~d383792/lib/argv-iter.h�������������������������������������������������������������0000664�0000000�0000000�00000002713�14110572173�0017121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over arguments from argv or --files0-from=FILE Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <stdbool.h> /* Definition of _GL_ARG_NONNULL. */ #include "arg-nonnull.h" struct argv_iterator; enum argv_iter_err { AI_ERR_OK = 1, AI_ERR_EOF, AI_ERR_MEM, AI_ERR_READ }; void argv_iter_free (struct argv_iterator *) _GL_ARG_NONNULL ((1)); struct argv_iterator *argv_iter_init_argv (char **argv) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_DEALLOC (argv_iter_free, 1); struct argv_iterator *argv_iter_init_stream (FILE *fp) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_DEALLOC (argv_iter_free, 1); char *argv_iter (struct argv_iterator *, enum argv_iter_err *) _GL_ARG_NONNULL ((1, 2)); size_t argv_iter_n_args (struct argv_iterator const *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); �����������������������������������������������������gnulib-20210822~d383792/lib/argz.c������������������������������������������������������������������0000664�0000000�0000000�00000023553�14110572173�0016164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions for dealing with '\0' separated arg vectors. Copyright (C) 1995-1998, 2000-2002, 2006, 2008-2021 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/>. */ #include <config.h> #include <argz.h> #include <errno.h> #include <stdlib.h> #include <string.h> /* Add BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ error_t argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len) { size_t new_argz_len = *argz_len + buf_len; char *new_argz = realloc (*argz, new_argz_len); if (new_argz) { memcpy (new_argz + *argz_len, buf, buf_len); *argz = new_argz; *argz_len = new_argz_len; return 0; } else return ENOMEM; } /* Add STR to the argz vector in ARGZ & ARGZ_LEN. This should be moved into argz.c in libshouldbelibc. */ error_t argz_add (char **argz, size_t *argz_len, const char *str) { return argz_append (argz, argz_len, str, strlen (str) + 1); } error_t argz_add_sep (char **argz, size_t *argz_len, const char *string, int delim) { size_t nlen = strlen (string) + 1; if (nlen > 1) { const char *rp; char *wp; *argz = (char *) realloc (*argz, *argz_len + nlen); if (*argz == NULL) return ENOMEM; wp = *argz + *argz_len; rp = string; do if (*rp == delim) { if (wp > *argz && wp[-1] != '\0') *wp++ = '\0'; else --nlen; } else *wp++ = *rp; while (*rp++ != '\0'); *argz_len += nlen; } return 0; } error_t argz_create_sep (const char *string, int delim, char **argz, size_t *len) { size_t nlen = strlen (string) + 1; if (nlen > 1) { const char *rp; char *wp; *argz = (char *) malloc (nlen); if (*argz == NULL) return ENOMEM; rp = string; wp = *argz; do if (*rp == delim) { if (wp > *argz && wp[-1] != '\0') *wp++ = '\0'; else --nlen; } else *wp++ = *rp; while (*rp++ != '\0'); if (nlen == 0) { free (*argz); *argz = NULL; *len = 0; } *len = nlen; } else { *argz = NULL; *len = 0; } return 0; } /* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not in ARGZ, EINVAL is returned, else if memory can't be allocated for the new ARGZ, ENOMEM is returned, else 0. */ error_t argz_insert (char **argz, size_t *argz_len, char *before, const char *entry) { if (! before) return argz_add (argz, argz_len, entry); if (before < *argz || before >= *argz + *argz_len) return EINVAL; if (before > *argz) /* Make sure before is actually the beginning of an entry. */ while (before[-1]) before--; { size_t after_before = *argz_len - (before - *argz); size_t entry_len = strlen (entry) + 1; size_t new_argz_len = *argz_len + entry_len; char *new_argz = realloc (*argz, new_argz_len); if (new_argz) { before = new_argz + (before - *argz); memmove (before + entry_len, before, after_before); memmove (before, entry, entry_len); *argz = new_argz; *argz_len = new_argz_len; return 0; } else return ENOMEM; } } char * argz_next (const char *argz, size_t argz_len, const char *entry) { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return (char *) argz; else return NULL; } /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ void argz_stringify (char *argz, size_t len, int sep) { if (len > 0) while (1) { size_t part_len = strnlen (argz, len); argz += part_len; len -= part_len; if (len-- <= 1) /* includes final '\0' we want to stop at */ break; *argz++ = sep; } } /* Returns the number of strings in ARGZ. */ size_t argz_count (const char *argz, size_t len) { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } /* Puts pointers to each string in ARGZ, plus a terminating 0 element, into ARGV, which must be large enough to hold them all. */ void argz_extract (const char *argz, size_t len, char **argv) { while (len > 0) { size_t part_len = strlen (argz); *argv++ = (char *) argz; argz += part_len + 1; len -= part_len + 1; } *argv = 0; } /* Make a '\0' separated arg vector from a unix argv vector, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. */ error_t argz_create (char *const argv[], char **argz, size_t *len) { int argc; size_t tlen = 0; char *const *ap; char *p; for (argc = 0; argv[argc] != NULL; ++argc) tlen += strlen (argv[argc]) + 1; if (tlen == 0) *argz = NULL; else { *argz = malloc (tlen); if (*argz == NULL) return ENOMEM; for (p = *argz, ap = argv; *ap; ++ap, ++p) p = stpcpy (p, *ap); } *len = tlen; return 0; } /* Delete ENTRY from ARGZ & ARGZ_LEN, if any. */ void argz_delete (char **argz, size_t *argz_len, char *entry) { if (entry) /* Get rid of the old value for NAME. */ { size_t entry_len = strlen (entry) + 1; *argz_len -= entry_len; memmove (entry, entry + entry_len, *argz_len - (entry - *argz)); if (*argz_len == 0) { free (*argz); *argz = 0; } } } /* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and updating *TO & *TO_LEN appropriately. If an allocation error occurs, *TO's old value is freed, and *TO is set to 0. */ static void str_append (char **to, size_t *to_len, const char *buf, const size_t buf_len) { size_t new_len = *to_len + buf_len; char *new_to = realloc (*to, new_len + 1); if (new_to) { *((char *) mempcpy (new_to + *to_len, buf, buf_len)) = '\0'; *to = new_to; *to_len = new_len; } else { free (*to); *to = 0; } } /* Replace any occurrences of the string STR in ARGZ with WITH, reallocating ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be incremented by number of replacements performed. */ error_t argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count) { error_t err = 0; if (str && *str) { char *arg = 0; char *src = *argz; size_t src_len = *argz_len; char *dst = 0; size_t dst_len = 0; int delayed_copy = 1; /* True while we've avoided copying anything. */ size_t str_len = strlen (str), with_len = strlen (with); while (!err && (arg = argz_next (src, src_len, arg))) { char *match = strstr (arg, str); if (match) { char *from = match + str_len; size_t to_len = match - arg; char *to = strndup (arg, to_len); while (to && from) { str_append (&to, &to_len, with, with_len); if (to) { match = strstr (from, str); if (match) { str_append (&to, &to_len, from, match - from); from = match + str_len; } else { str_append (&to, &to_len, from, strlen (from)); from = 0; } } } if (to) { if (delayed_copy) /* We avoided copying SRC to DST until we found a match; now that we've done so, copy everything from the start of SRC. */ { if (arg > src) err = argz_append (&dst, &dst_len, src, (arg - src)); delayed_copy = 0; } if (! err) err = argz_add (&dst, &dst_len, to); free (to); } else err = ENOMEM; if (replace_count) (*replace_count)++; } else if (! delayed_copy) err = argz_add (&dst, &dst_len, arg); } if (! err) { if (! delayed_copy) /* We never found any instances of str. */ { free (src); *argz = dst; *argz_len = dst_len; } } else if (dst_len > 0) free (dst); } return err; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/argz.in.h���������������������������������������������������������������0000664�0000000�0000000�00000012000�14110572173�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Routines for dealing with '\0' separated arg vectors. Copyright (C) 1995-2000, 2004, 2007, 2009-2021 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 _ARGZ_H #define _ARGZ_H 1 #define __need_error_t #include <errno.h> #include <string.h> /* Need size_t. */ #ifndef __error_t_defined typedef int error_t; #endif /* Make a '\0' separated arg vector from a unix argv vector, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ extern error_t argz_create (char *const /*argv*/[], char **restrict /*argz*/, size_t *restrict /*len*/); /* Make a '\0' separated arg vector from a SEP separated list in STRING, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ extern error_t argz_create_sep (const char *restrict /*string*/, int /*sep*/, char **restrict /*argz*/, size_t *restrict /*len*/); /* Returns the number of strings in ARGZ. */ extern size_t argz_count (const char * /*argz*/, size_t /*len*/); /* Puts pointers to each string in ARGZ into ARGV, which must be large enough to hold them all. */ extern void argz_extract (const char *restrict /*argz*/, size_t /*len*/, char **restrict /*argv*/); /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ extern void argz_stringify (char * /*argz*/, size_t /*len*/, int /*sep*/); /* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ extern error_t argz_append (char **restrict /*argz*/, size_t *restrict /*argz_len*/, const char *restrict /*buf*/, size_t /*buf_len*/); /* Append STR to the argz vector in ARGZ & ARGZ_LEN. */ extern error_t argz_add (char **restrict /*argz*/, size_t *restrict /*argz_len*/, const char *restrict str); /* Append SEP separated list in STRING to the argz vector in ARGZ & ARGZ_LEN. */ extern error_t argz_add_sep (char **restrict /*argz*/, size_t *restrict /*argz_len*/, const char *restrict /*string*/, int /*delim*/); /* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */ extern void argz_delete (char **restrict /*argz*/, size_t *restrict /*argz_len*/, char *restrict /*entry*/); /* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not in ARGZ, EINVAL is returned, else if memory can't be allocated for the new ARGZ, ENOMEM is returned, else 0. */ extern error_t argz_insert (char **restrict /*argz*/, size_t *restrict /*argz_len*/, char *restrict /*before*/, const char *restrict /*entry*/); /* Replace any occurrences of the string STR in ARGZ with WITH, reallocating ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be incremented by number of replacements performed. */ extern error_t argz_replace (char **restrict /*argz*/, size_t *restrict /*argz_len*/, const char *restrict /*str*/, const char *restrict /*with*/, unsigned int *restrict /*replace_count*/); /* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there are no more. If entry is NULL, then the first entry is returned. This behavior allows two convenient iteration styles: char *entry = 0; while ((entry = argz_next (argz, argz_len, entry))) ...; or char *entry; for (entry = argz; entry; entry = argz_next (argz, argz_len, entry)) ...; */ extern char *argz_next (const char *restrict /*argz*/, size_t /*argz_len*/, const char *restrict /*entry*/); #endif /* argz.h */ gnulib-20210822~d383792/lib/arpa_inet.in.h����������������������������������������������������������0000664�0000000�0000000�00000012131�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <arpa/inet.h>. Copyright (C) 2005-2006, 2008-2021 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/>. */ #ifndef _@GUARD_PREFIX@_ARPA_INET_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* Gnulib's sys/socket.h is responsible for defining socklen_t (used below) and for pulling in winsock2.h etc. under MinGW. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <sys/socket.h> #endif /* On NonStop Kernel, inet_ntop and inet_pton are declared in <netdb.h>. But avoid namespace pollution on glibc systems. */ #if defined __TANDEM && !defined __GLIBC__ # include <netdb.h> #endif #if @HAVE_ARPA_INET_H@ /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_ARPA_INET_H@ #endif #ifndef _@GUARD_PREFIX@_ARPA_INET_H #define _@GUARD_PREFIX@_ARPA_INET_H /* Get all possible declarations of inet_ntop() and inet_pton(). */ #if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \ && @HAVE_WS2TCPIP_H@ # include <ws2tcpip.h> #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. */ #if @GNULIB_INET_NTOP@ /* Converts an internet address from internal format to a printable, presentable format. AF is an internet address family, such as AF_INET or AF_INET6. SRC points to a 'struct in_addr' (for AF_INET) or 'struct in6_addr' (for AF_INET6). DST points to a buffer having room for CNT bytes. The printable representation of the address (in numeric form, not surrounded by [...], no reverse DNS is done) is placed in DST, and DST is returned. If an error occurs, the return value is NULL and errno is set. If CNT bytes are not sufficient to hold the result, the return value is NULL and errno is set to ENOSPC. A good value for CNT is 46. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntop.html>. */ # if @REPLACE_INET_NTOP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_ntop # define inet_ntop rpl_inet_ntop # endif _GL_FUNCDECL_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # else # if !@HAVE_DECL_INET_NTOP@ _GL_FUNCDECL_SYS (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); # endif /* Need to cast, because on NonStop Kernel, the fourth parameter is size_t cnt. */ _GL_CXXALIAS_SYS_CAST (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_ntop); # endif #elif defined GNULIB_POSIXCHECK # undef inet_ntop # if HAVE_RAW_DECL_INET_NTOP _GL_WARN_ON_USE (inet_ntop, "inet_ntop is unportable - " "use gnulib module inet_ntop for portability"); # endif #endif #if @GNULIB_INET_PTON@ # if @REPLACE_INET_PTON@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_pton # define inet_pton rpl_inet_pton # endif _GL_FUNCDECL_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # else # if !@HAVE_DECL_INET_PTON@ _GL_FUNCDECL_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_pton); # endif #elif defined GNULIB_POSIXCHECK # undef inet_pton # if HAVE_RAW_DECL_INET_PTON _GL_WARN_ON_USE (inet_pton, "inet_pton is unportable - " "use gnulib module inet_pton for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/array-mergesort.h�������������������������������������������������������0000664�0000000�0000000�00000017401�14110572173�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stable-sorting of an array using mergesort. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ /* This file implements stable sorting of an array, using the mergesort algorithm. Worst-case running time for an array of length N is O(N log N). Unlike the mpsort module, the algorithm here attempts to minimize not only the number of comparisons, but also the number of copying operations. Before including this file, you need to define ELEMENT The type of every array element. COMPARE A two-argument macro that takes two 'const ELEMENT *' pointers and returns a negative, zero, or positive 'int' value if the element pointed to by the first argument is, respectively, less, equal, or greater than the element pointed to by the second argument. STATIC The storage class of the functions being defined. STATIC_FROMTO (Optional.) Overrides STATIC for the 'merge_sort_fromto' function. Before including this file, you also need to include: #include <stddef.h> */ /* Merge the sorted arrays src1[0..n1-1] and src2[0..n2-1] into dst[0..n1+n2-1]. In case of ambiguity, put the elements of src1 before the elements of src2. n1 and n2 must be > 0. The arrays src1 and src2 must not overlap the dst array, except that src1 may be dst[n2..n1+n2-1], or src2 may be dst[n1..n1+n2-1]. */ static void merge (const ELEMENT *src1, size_t n1, const ELEMENT *src2, size_t n2, ELEMENT *dst) { for (;;) /* while (n1 > 0 && n2 > 0) */ { if (COMPARE (src1, src2) <= 0) { *dst++ = *src1++; n1--; if (n1 == 0) break; } else { *dst++ = *src2++; n2--; if (n2 == 0) break; } } /* Here n1 == 0 || n2 == 0 but also n1 > 0 || n2 > 0. */ if (n1 > 0) { if (dst != src1) do { *dst++ = *src1++; n1--; } while (n1 > 0); } else /* n2 > 0 */ { if (dst != src2) do { *dst++ = *src2++; n2--; } while (n2 > 0); } } /* Sort src[0..n-1] into dst[0..n-1], using tmp[0..n/2-1] as temporary (scratch) storage. The arrays src, dst, tmp must not overlap. */ #ifdef STATIC_FROMTO STATIC_FROMTO #else STATIC #endif void merge_sort_fromto (const ELEMENT *src, ELEMENT *dst, size_t n, ELEMENT *tmp) { switch (n) { case 0: return; case 1: /* Nothing to do. */ dst[0] = src[0]; return; case 2: /* Trivial case. */ if (COMPARE (&src[0], &src[1]) <= 0) { /* src[0] <= src[1] */ dst[0] = src[0]; dst[1] = src[1]; } else { dst[0] = src[1]; dst[1] = src[0]; } break; case 3: /* Simple case. */ if (COMPARE (&src[0], &src[1]) <= 0) { if (COMPARE (&src[1], &src[2]) <= 0) { /* src[0] <= src[1] <= src[2] */ dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; } else if (COMPARE (&src[0], &src[2]) <= 0) { /* src[0] <= src[2] < src[1] */ dst[0] = src[0]; dst[1] = src[2]; dst[2] = src[1]; } else { /* src[2] < src[0] <= src[1] */ dst[0] = src[2]; dst[1] = src[0]; dst[2] = src[1]; } } else { if (COMPARE (&src[0], &src[2]) <= 0) { /* src[1] < src[0] <= src[2] */ dst[0] = src[1]; dst[1] = src[0]; dst[2] = src[2]; } else if (COMPARE (&src[1], &src[2]) <= 0) { /* src[1] <= src[2] < src[0] */ dst[0] = src[1]; dst[1] = src[2]; dst[2] = src[0]; } else { /* src[2] < src[1] < src[0] */ dst[0] = src[2]; dst[1] = src[1]; dst[2] = src[0]; } } break; default: { size_t n1 = n / 2; size_t n2 = (n + 1) / 2; /* Note: n1 + n2 = n, n1 <= n2. */ /* Sort src[n1..n-1] into dst[n1..n-1], scratching tmp[0..n2/2-1]. */ merge_sort_fromto (src + n1, dst + n1, n2, tmp); /* Sort src[0..n1-1] into tmp[0..n1-1], scratching dst[0..n1-1]. */ merge_sort_fromto (src, tmp, n1, dst); /* Merge the two half results. */ merge (tmp, n1, dst + n1, n2, dst); } break; } } /* Sort src[0..n-1], using tmp[0..n-1] as temporary (scratch) storage. The arrays src, tmp must not overlap. */ STATIC void merge_sort_inplace (ELEMENT *src, size_t n, ELEMENT *tmp) { switch (n) { case 0: case 1: /* Nothing to do. */ return; case 2: /* Trivial case. */ if (COMPARE (&src[0], &src[1]) <= 0) { /* src[0] <= src[1] */ } else { ELEMENT t = src[0]; src[0] = src[1]; src[1] = t; } break; case 3: /* Simple case. */ if (COMPARE (&src[0], &src[1]) <= 0) { if (COMPARE (&src[1], &src[2]) <= 0) { /* src[0] <= src[1] <= src[2] */ } else if (COMPARE (&src[0], &src[2]) <= 0) { /* src[0] <= src[2] < src[1] */ ELEMENT t = src[1]; src[1] = src[2]; src[2] = t; } else { /* src[2] < src[0] <= src[1] */ ELEMENT t = src[0]; src[0] = src[2]; src[2] = src[1]; src[1] = t; } } else { if (COMPARE (&src[0], &src[2]) <= 0) { /* src[1] < src[0] <= src[2] */ ELEMENT t = src[0]; src[0] = src[1]; src[1] = t; } else if (COMPARE (&src[1], &src[2]) <= 0) { /* src[1] <= src[2] < src[0] */ ELEMENT t = src[0]; src[0] = src[1]; src[1] = src[2]; src[2] = t; } else { /* src[2] < src[1] < src[0] */ ELEMENT t = src[0]; src[0] = src[2]; src[2] = t; } } break; default: { size_t n1 = n / 2; size_t n2 = (n + 1) / 2; /* Note: n1 + n2 = n, n1 <= n2. */ /* Sort src[n1..n-1], scratching tmp[0..n2-1]. */ merge_sort_inplace (src + n1, n2, tmp); /* Sort src[0..n1-1] into tmp[0..n1-1], scratching tmp[n1..2*n1-1]. */ merge_sort_fromto (src, tmp, n1, tmp + n1); /* Merge the two half results. */ merge (tmp, n1, src + n1, n2, src); } break; } } #undef ELEMENT #undef COMPARE #undef STATIC ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asinf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001550�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse sine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float asinf (float x) { return (float) asin ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asinl.c�����������������������������������������������������������������0000664�0000000�0000000�00000017246�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arcsin (inverse sine) function with 'long double' argument. Copyright (C) 2003-2021 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/>. */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double asinl (long double x) { return asin (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/e_asinl.c. */ /* Long double expansions contributed by Stephen L. Moshier <moshier@na-net.ornl.gov> */ /* asin(x) * Method : * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... * we approximate asin(x) on [0,0.5] by * asin(x) = x + x*x^2*R(x^2) * Between .5 and .625 the approximation is * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) * For x in [0.625,1] * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) * * Special cases: * if x is NaN, return x itself; * if |x|>1, return NaN with invalid signal. * */ static const long double one = 1.0L, huge = 1.0e+4932L, pio2_hi = 1.5707963267948966192313216916397514420986L, pio2_lo = 4.3359050650618905123985220130216759843812E-35L, pio4_hi = 7.8539816339744830961566084581987569936977E-1L, /* coefficient for R(x^2) */ /* asin(x) = x + x^3 pS(x^2) / qS(x^2) 0 <= x <= 0.5 peak relative error 1.9e-35 */ pS0 = -8.358099012470680544198472400254596543711E2L, pS1 = 3.674973957689619490312782828051860366493E3L, pS2 = -6.730729094812979665807581609853656623219E3L, pS3 = 6.643843795209060298375552684423454077633E3L, pS4 = -3.817341990928606692235481812252049415993E3L, pS5 = 1.284635388402653715636722822195716476156E3L, pS6 = -2.410736125231549204856567737329112037867E2L, pS7 = 2.219191969382402856557594215833622156220E1L, pS8 = -7.249056260830627156600112195061001036533E-1L, pS9 = 1.055923570937755300061509030361395604448E-3L, qS0 = -5.014859407482408326519083440151745519205E3L, qS1 = 2.430653047950480068881028451580393430537E4L, qS2 = -4.997904737193653607449250593976069726962E4L, qS3 = 5.675712336110456923807959930107347511086E4L, qS4 = -3.881523118339661268482937768522572588022E4L, qS5 = 1.634202194895541569749717032234510811216E4L, qS6 = -4.151452662440709301601820849901296953752E3L, qS7 = 5.956050864057192019085175976175695342168E2L, qS8 = -4.175375777334867025769346564600396877176E1L, /* 1.000000000000000000000000000000000000000E0 */ /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) -0.0625 <= x <= 0.0625 peak relative error 3.3e-35 */ rS0 = -5.619049346208901520945464704848780243887E0L, rS1 = 4.460504162777731472539175700169871920352E1L, rS2 = -1.317669505315409261479577040530751477488E2L, rS3 = 1.626532582423661989632442410808596009227E2L, rS4 = -3.144806644195158614904369445440583873264E1L, rS5 = -9.806674443470740708765165604769099559553E1L, rS6 = 5.708468492052010816555762842394927806920E1L, rS7 = 1.396540499232262112248553357962639431922E1L, rS8 = -1.126243289311910363001762058295832610344E1L, rS9 = -4.956179821329901954211277873774472383512E-1L, rS10 = 3.313227657082367169241333738391762525780E-1L, sS0 = -4.645814742084009935700221277307007679325E0L, sS1 = 3.879074822457694323970438316317961918430E1L, sS2 = -1.221986588013474694623973554726201001066E2L, sS3 = 1.658821150347718105012079876756201905822E2L, sS4 = -4.804379630977558197953176474426239748977E1L, sS5 = -1.004296417397316948114344573811562952793E2L, sS6 = 7.530281592861320234941101403870010111138E1L, sS7 = 1.270735595411673647119592092304357226607E1L, sS8 = -1.815144839646376500705105967064792930282E1L, sS9 = -7.821597334910963922204235247786840828217E-2L, /* 1.000000000000000000000000000000000000000E0 */ asinr5625 = 5.9740641664535021430381036628424864397707E-1L; long double asinl (long double x) { long double y, t, p, q; int sign; sign = 1; y = x; if (x < 0.0L) { sign = -1; y = -x; } if (y >= 1.0L) /* |x|>= 1 */ { if (y == 1.0L) /* asin(1)=+-pi/2 with inexact */ return x * pio2_hi + x * pio2_lo; return (x - x) / (x - x); /* asin(|x|>1) is NaN */ } else if (y < 0.5L) /* |x| < 0.5 */ { if (y < 0.000000000000000006938893903907228377647697925567626953125L) /* |x| < 2**-57 */ if (huge + y > one) return y; /* return x with inexact if x!=0 */ t = x * x; p = (((((((((pS9 * t + pS8) * t + pS7) * t + pS6) * t + pS5) * t + pS4) * t + pS3) * t + pS2) * t + pS1) * t + pS0) * t; q = (((((((( t + qS8) * t + qS7) * t + qS6) * t + qS5) * t + qS4) * t + qS3) * t + qS2) * t + qS1) * t + qS0; return x + x * (p / q); } else if (y < 0.625) /* 0.625 */ { t = y - 0.5625; p = ((((((((((rS10 * t + rS9) * t + rS8) * t + rS7) * t + rS6) * t + rS5) * t + rS4) * t + rS3) * t + rS2) * t + rS1) * t + rS0) * t; q = ((((((((( t + sS9) * t + sS8) * t + sS7) * t + sS6) * t + sS5) * t + sS4) * t + sS3) * t + sS2) * t + sS1) * t + sS0; t = asinr5625 + p / q; } else t = pio2_hi + pio2_lo - 2 * asinl (sqrtl ((1 - y) / 2)); return t * sign; } #endif #if 0 int main (void) { printf ("%.18Lg %.18Lg\n", asinl (1.0L), 1.5707963267948966192313216916397514420984L); printf ("%.18Lg %.18Lg\n", asinl (0.7071067811865475244008443621048490392848L), 0.7853981633974483096156608458198757210492L); printf ("%.18Lg %.18Lg\n", asinl (0.5L), 0.5235987755982988730771072305465838140328L); printf ("%.18Lg %.18Lg\n", asinl (0.3090169943749474241022934171828190588600L), 0.3141592653589793238462643383279502884196L); printf ("%.18Lg %.18Lg\n", asinl (-1.0L), -1.5707963267948966192313216916397514420984L); printf ("%.18Lg %.18Lg\n", asinl (-0.7071067811865475244008443621048490392848L), -0.7853981633974483096156608458198757210492L); printf ("%.18Lg %.18Lg\n", asinl (-0.5L), -0.5235987755982988730771072305465838140328L); printf ("%.18Lg %.18Lg\n", asinl (-0.3090169943749474241022934171828190588600L), -0.3141592653589793238462643383279502884196L); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asnprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000002110�14110572173�0017207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "vasnprintf.h" #include <stdarg.h> char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *result; va_start (args, format); result = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000002143�14110572173�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include <stdio.h> #endif #include <stdarg.h> int asprintf (char **resultp, const char *format, ...) { va_list args; int result; va_start (args, format); result = vasprintf (resultp, format, args); va_end (args); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/assert.in.h�������������������������������������������������������������0000664�0000000�0000000�00000002025�14110572173�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <assert.h> Copyright (C) 2011-2021 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/>. */ /* Do not guard the include, since <assert.h> is supposed to define the assert macro each time it is included. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #@INCLUDE_NEXT@ @NEXT_ASSERT_H@ /* The definition of static_assert is copied here. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/assure.h����������������������������������������������������������������0000664�0000000�0000000�00000003621�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Run-time assert-like macros. Copyright (C) 2014-2021 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. */ #ifndef _GL_ASSURE_H #define _GL_ASSURE_H #include <assert.h> #include "verify.h" /* Evaluate an assertion E that is guaranteed to be true. If NDEBUG is not defined, abort the program if E is false. If NDEBUG is defined, the compiler can assume E and behavior is undefined if E is false, fails to evaluate, or has side effects. Unlike standard 'assert', this macro evaluates E even when NDEBUG is defined, so as to catch typos, avoid some GCC warnings, and improve performance when E is simple enough. Also see the documentation for 'assume' in verify.h. */ #ifdef NDEBUG # define affirm(E) assume (E) #else # define affirm(E) assert (E) #endif /* Check E's value at runtime, and report an error and abort if not. However, do nothing if NDEBUG is defined. Unlike standard 'assert', this macro compiles E even when NDEBUG is defined, so as to catch typos and avoid some GCC warnings. Unlike 'affirm', it is OK for E to use hard-to-optimize features, since E is not executed if NDEBUG is defined. */ #ifdef NDEBUG # define assure(E) ((void) (0 && (E))) #else # define assure(E) assert (E) #endif #endif ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/astrxfrm.c��������������������������������������������������������������0000664�0000000�0000000�00000011203�14110572173�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent string transformation for comparison. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2010. 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 "astrxfrm.h" #include <errno.h> #include <stdlib.h> #include <string.h> char * astrxfrm (const char *s, char *resultbuf, size_t *lengthp) { char tmpbuf[4000]; char *result; /* either == resultbuf or == tmpbuf or freshly allocated or NULL. */ size_t allocated; /* number of bytes allocated at result */ size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } { size_t l = strlen (s); size_t k; /* A call to strxfrm costs about 20 times more than a call to strdup of the result. Therefore it is worth to try to avoid calling strxfrm more than once on a given string, by making enough room before calling strxfrm. The size of the strxfrm result, k, is likely to be between l and 3 * l. */ if (3 * l + 1 > allocated) { /* Grow the result buffer. */ if (3 * l + 1 <= sizeof (tmpbuf)) { result = tmpbuf; allocated = sizeof (tmpbuf); } else { size_t new_allocated; char *new_result; new_allocated = 3 * l + 1; if (new_allocated < 2 * allocated) new_allocated = 2 * allocated; new_result = (char *) malloc (new_allocated); if (new_result != NULL) { allocated = new_allocated; result = new_result; } } } errno = 0; k = strxfrm (result, s, allocated); if (errno != 0) goto fail; if (k >= allocated) { /* Grow the result buffer. */ if (result != resultbuf && result != tmpbuf) free (result); if (k + 1 <= sizeof (tmpbuf)) { result = tmpbuf; allocated = sizeof (tmpbuf); } else { size_t new_allocated; char *new_result; new_allocated = k + 1; new_result = (char *) malloc (new_allocated); if (new_result == NULL) goto out_of_memory; allocated = new_allocated; result = new_result; } /* Here k < allocated. */ /* Try again. */ errno = 0; if (strxfrm (result, s, allocated) != k) /* strxfrm() is not producing reproducible results. */ abort (); if (errno != 0) goto fail; } /* Verify that strxfrm() has NUL-terminated the result. */ if (result[k] != '\0') abort (); length = k + 1; } /* Here length > 0. */ if (result == tmpbuf) { if (resultbuf != NULL && length <= *lengthp) { memcpy (resultbuf, result, length); result = resultbuf; } else { char *memory = (char *) malloc (length); if (memory == NULL) goto out_of_memory; memcpy (memory, result, length); result = memory; } } else { /* Shrink the allocated memory if possible. */ if (result != resultbuf && length < allocated) { if (length <= *lengthp) { memcpy (resultbuf, result, length); free (result); result = resultbuf; } else { char *memory = (char *) realloc (result, length); if (memory != NULL) { memcpy (memory, result, length); result = memory; } } } } *lengthp = length; return result; fail: if (result != resultbuf && result != tmpbuf) free (result); return NULL; out_of_memory: errno = ENOMEM; return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/astrxfrm.h��������������������������������������������������������������0000664�0000000�0000000�00000003314�14110572173�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent string transformation for comparison. Copyright (C) 2010-2021 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 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/>. */ #ifndef ASTRXFRM_H #define ASTRXFRM_H #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Variant of strxfrm() with a calling convention that reduces the number of strxfrm calls. */ /* Transform the string starting at S to a string, in such a way that comparing S1 and S2 with strcoll() is equivalent to comparing astrxfrm(S1) and astrxfrm(S2) with strcmp(). The result of this function depends on the LC_COLLATE category of the current locale. If successful: If resultbuf is not NULL and the result fits into *lengthp bytes, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length of the returned string. Upon failure, return NULL, with errno set. */ extern char * astrxfrm (const char *s, char *restrict resultbuf, size_t *lengthp); #ifdef __cplusplus } #endif #endif /* ASTRXFRM_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asyncsafe-spin.c��������������������������������������������������������0000664�0000000�0000000�00000020520�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Spin locks for communication between threads and signal handlers. Copyright (C) 2020-2021 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 "asyncsafe-spin.h" #include <stdbool.h> #include <stdlib.h> #if defined _AIX # include <sys/atomic_op.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { glwthread_spin_init (lock); } static inline void do_lock (asyncsafe_spinlock_t *lock) { glwthread_spin_lock (lock); } static inline void do_unlock (asyncsafe_spinlock_t *lock) { if (glwthread_spin_unlock (lock)) abort (); } void asyncsafe_spin_destroy (asyncsafe_spinlock_t *lock) { glwthread_spin_destroy (lock); } #else # if HAVE_PTHREAD_H /* Use POSIX threads. */ /* We don't use semaphores (although sem_post() is allowed in signal handlers), because it would require to link with -lrt on HP-UX 11, OSF/1, Solaris 10, and also because on macOS only named semaphores work. We don't use the C11 <stdatomic.h> (available in GCC >= 4.9) because it would require to link with -latomic. */ # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ || __clang_major > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ && !defined __ibmxl__ /* Use GCC built-ins (available in GCC >= 4.7 and clang >= 3.1) that operate on the first byte of the lock. Documentation: <https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/_005f_005fatomic-Builtins.html> */ # if 1 /* An implementation that verifies the unlocks. */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { __atomic_store_n (lock, 0, __ATOMIC_SEQ_CST); } static inline void do_lock (asyncsafe_spinlock_t *lock) { /* Wait until *lock becomes 0, then replace it with 1. */ asyncsafe_spinlock_t zero; while (!(zero = 0, __atomic_compare_exchange_n (lock, &zero, 1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))) ; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { /* If *lock is 1, then replace it with 0. */ asyncsafe_spinlock_t one = 1; if (!__atomic_compare_exchange_n (lock, &one, 0, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) abort (); } # else /* An implementation that is a little bit more optimized, but does not verify the unlocks. */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { __atomic_clear (lock, __ATOMIC_SEQ_CST); } static inline void do_lock (asyncsafe_spinlock_t *lock) { while (__atomic_test_and_set (lock, __ATOMIC_SEQ_CST)) ; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { __atomic_clear (lock, __ATOMIC_SEQ_CST); } # endif # elif (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ && !defined __sparc__) \ || __clang_major__ >= 3) \ && !defined __ibmxl__ /* Use GCC built-ins (available in GCC >= 4.1, except on SPARC, and clang >= 3.0). Documentation: <https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html> */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; *vp = 0; __sync_synchronize (); } static inline void do_lock (asyncsafe_spinlock_t *lock) { /* Wait until *lock becomes 0, then replace it with 1. */ while (__sync_val_compare_and_swap (lock, 0, 1) != 0) ; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { /* If *lock is 1, then replace it with 0. */ if (__sync_val_compare_and_swap (lock, 1, 0) != 1) abort (); } # elif defined _AIX /* AIX */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { atomic_p vp = (int *) lock; _clear_lock (vp, 0); } static inline void do_lock (asyncsafe_spinlock_t *lock) { atomic_p vp = (int *) lock; while (_check_lock (vp, 0, 1)) ; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { atomic_p vp = (int *) lock; if (_check_lock (vp, 1, 0)) abort (); } # elif ((defined __GNUC__ || defined __clang__ || defined __SUNPRO_C) && (defined __sparc || defined __i386 || defined __x86_64__)) || (defined __TINYC__ && (defined __i386 || defined __x86_64__)) /* For older versions of GCC or clang, use inline assembly. GCC, clang, and the Oracle Studio C 12 compiler understand GCC's extended asm syntax, but the plain Oracle Studio C 11 compiler understands only simple asm. */ /* An implementation that verifies the unlocks. */ static void memory_barrier (void) { # if defined __GNUC__ || defined __clang__ || __SUNPRO_C >= 0x590 || defined __TINYC__ # if defined __i386 || defined __x86_64__ # if defined __TINYC__ && defined __i386 /* Cannot use the SSE instruction "mfence" with this compiler. */ asm volatile ("lock orl $0,(%esp)"); # else asm volatile ("mfence"); # endif # endif # if defined __sparc asm volatile ("membar 2"); # endif # else # if defined __i386 || defined __x86_64__ asm ("mfence"); # endif # if defined __sparc asm ("membar 2"); # endif # endif } /* Store NEWVAL in *VP if the old value *VP is == CMP. Return the old value. */ static unsigned int atomic_compare_and_swap (volatile unsigned int *vp, unsigned int cmp, unsigned int newval) { # if defined __GNUC__ || defined __clang__ || __SUNPRO_C >= 0x590 || defined __TINYC__ unsigned int oldval; # if defined __i386 || defined __x86_64__ asm volatile (" lock\n cmpxchgl %3,(%1)" : "=a" (oldval) : "r" (vp), "a" (cmp), "r" (newval) : "memory"); # endif # if defined __sparc asm volatile (" cas [%1],%2,%3\n" " mov %3,%0" : "=r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "memory"); # endif return oldval; # else /* __SUNPRO_C */ # if defined __x86_64__ asm (" movl %esi,%eax\n" " lock\n cmpxchgl %edx,(%rdi)"); # elif defined __i386 asm (" movl 16(%ebp),%ecx\n" " movl 12(%ebp),%eax\n" " movl 8(%ebp),%edx\n" " lock\n cmpxchgl %ecx,(%edx)"); # endif # if defined __sparc asm (" cas [%i0],%i1,%i2\n" " mov %i2,%i0"); # endif # endif } void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; *vp = 0; memory_barrier (); } static inline void do_lock (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; while (atomic_compare_and_swap (vp, 0, 1) != 0) ; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; if (atomic_compare_and_swap (vp, 1, 0) != 1) abort (); } # else /* Fallback code. It has some race conditions. */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; *vp = 0; } static inline void do_lock (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; while (*vp) ; *vp = 1; } static inline void do_unlock (asyncsafe_spinlock_t *lock) { volatile unsigned int *vp = lock; *vp = 0; } # endif # else /* Provide a dummy implementation for single-threaded applications. */ void asyncsafe_spin_init (asyncsafe_spinlock_t *lock) { } static inline void do_lock (asyncsafe_spinlock_t *lock) { } static inline void do_unlock (asyncsafe_spinlock_t *lock) { } # endif void asyncsafe_spin_destroy (asyncsafe_spinlock_t *lock) { } #endif void asyncsafe_spin_lock (asyncsafe_spinlock_t *lock, const sigset_t *mask, sigset_t *saved_mask) { sigprocmask (SIG_BLOCK, mask, saved_mask); /* equivalent to pthread_sigmask */ do_lock (lock); } void asyncsafe_spin_unlock (asyncsafe_spinlock_t *lock, const sigset_t *saved_mask) { do_unlock (lock); sigprocmask (SIG_SETMASK, saved_mask, NULL); /* equivalent to pthread_sigmask */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/asyncsafe-spin.h��������������������������������������������������������0000664�0000000�0000000�00000005076�14110572173�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Spin locks for communication between threads and signal handlers. Copyright (C) 2020-2021 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. */ #ifndef _ASYNCSAFE_SPIN_H #define _ASYNCSAFE_SPIN_H /* Usual spin locks are not allowed for communication between threads and signal handlers, because the pthread_spin_* functions are not async-safe; see <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html> section 2.4.3 Signal Actions. This module provides spin locks with a similar API. It can be used like this, both in regular multithreaded code and in signal handlers: sigset_t saved_mask; asyncsafe_spin_lock (&lock, &mask, &saved_mask); do_something_contentious (); asyncsafe_spin_unlock (&lock, &saved_mask); The mask you specify here is the set of signals whose handlers might want to take the same lock. asyncsafe_spin_lock/unlock use pthread_sigmask, to ensure that while a thread is executing such code, no signal handler will start such code for the same lock *in the same thread* (because if this happened, the signal handler would hang!). */ #include <signal.h> #if defined _WIN32 && ! defined __CYGWIN__ # include "windows-spin.h" typedef glwthread_spinlock_t asyncsafe_spinlock_t; # define ASYNCSAFE_SPIN_INIT GLWTHREAD_SPIN_INIT #else typedef unsigned int asyncsafe_spinlock_t; # define ASYNCSAFE_SPIN_INIT 0 #endif #ifdef __cplusplus extern "C" { #endif extern void asyncsafe_spin_init (asyncsafe_spinlock_t *lock); extern void asyncsafe_spin_lock (asyncsafe_spinlock_t *lock, const sigset_t *mask, sigset_t *saved_mask); extern void asyncsafe_spin_unlock (asyncsafe_spinlock_t *lock, const sigset_t *saved_mask); extern void asyncsafe_spin_destroy (asyncsafe_spinlock_t *lock); #ifdef __cplusplus } #endif #endif /* _ASYNCSAFE_SPIN_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/at-func.c���������������������������������������������������������������0000664�0000000�0000000�00000010470�14110572173�0016550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define at-style functions like fstatat, unlinkat, fchownat, etc. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD # include <errno.h> # ifndef ENOTSUP # define ENOTSUP EINVAL # endif #else # include "openat.h" # include "openat-priv.h" # include "save-cwd.h" #endif #ifdef AT_FUNC_USE_F1_COND # define CALL_FUNC(F) \ (flag == AT_FUNC_USE_F1_COND \ ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS) \ : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) \ if (flag & ~AT_FUNC_USE_F1_COND) \ { \ errno = EINVAL; \ return FUNC_FAIL; \ } #else # define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) /* empty */ #endif #ifdef AT_FUNC_RESULT # define FUNC_RESULT AT_FUNC_RESULT #else # define FUNC_RESULT int #endif #ifdef AT_FUNC_FAIL # define FUNC_FAIL AT_FUNC_FAIL #else # define FUNC_FAIL -1 #endif /* Call AT_FUNC_F1 to operate on FILE, which is in the directory open on descriptor FD. If AT_FUNC_USE_F1_COND is defined to a value, AT_FUNC_POST_FILE_PARAM_DECLS must include a parameter named flag; call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than AT_FUNC_USE_F1_COND. Return int and fail with -1 unless AT_FUNC_RESULT or AT_FUNC_FAIL are defined. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ FUNC_RESULT AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) { VALIDATE_FLAG (flag); if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return CALL_FUNC (file); #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD errno = ENOTSUP; return FUNC_FAIL; #else { /* Be careful to choose names unlikely to conflict with AT_FUNC_POST_FILE_PARAM_DECLS. */ struct saved_cwd saved_cwd; int saved_errno; FUNC_RESULT err; { char proc_buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (proc_buf, fd, file); if (proc_file) { FUNC_RESULT proc_result = CALL_FUNC (proc_file); int proc_errno = errno; if (proc_file != proc_buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (FUNC_FAIL != proc_result) return proc_result; if (! EXPECTED_ERRNO (proc_errno)) { errno = proc_errno; return proc_result; } } } if (save_cwd (&saved_cwd) != 0) openat_save_fail (errno); if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return FUNC_FAIL; } if (fchdir (fd) != 0) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return FUNC_FAIL; } err = CALL_FUNC (file); saved_errno = (err == FUNC_FAIL ? errno : 0); if (restore_cwd (&saved_cwd) != 0) openat_restore_fail (errno); free_cwd (&saved_cwd); if (saved_errno) errno = saved_errno; return err; } #endif } #undef CALL_FUNC #undef FUNC_RESULT #undef FUNC_FAIL ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/at-func2.c��������������������������������������������������������������0000664�0000000�0000000�00000021677�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define 2-FD at-style functions like linkat or renameat. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering and Eric Blake */ #include <config.h> #include "openat-priv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #include "filenamecat.h" #include "openat.h" #include "same-inode.h" #include "save-cwd.h" /* Call FUNC to operate on a pair of files, where FILE1 is relative to FD1, and FILE2 is relative to FD2. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, FUNC, restore_cwd (up to two times). If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ int at_func2 (int fd1, char const *file1, int fd2, char const *file2, int (*func) (char const *file1, char const *file2)) { struct saved_cwd saved_cwd; int saved_errno; int err; char *file1_alt; char *file2_alt; struct stat st1; struct stat st2; /* There are 16 possible scenarios, based on whether an fd is AT_FDCWD or real, and whether a file is absolute or relative: fd1 file1 fd2 file2 action 0 cwd abs cwd abs direct call 1 cwd abs cwd rel direct call 2 cwd abs fd abs direct call 3 cwd abs fd rel chdir to fd2 4 cwd rel cwd abs direct call 5 cwd rel cwd rel direct call 6 cwd rel fd abs direct call 7 cwd rel fd rel convert file1 to abs, then case 3 8 fd abs cwd abs direct call 9 fd abs cwd rel direct call 10 fd abs fd abs direct call 11 fd abs fd rel chdir to fd2 12 fd rel cwd abs chdir to fd1 13 fd rel cwd rel convert file2 to abs, then case 12 14 fd rel fd abs chdir to fd1 15a fd1 rel fd1 rel chdir to fd1 15b fd1 rel fd2 rel chdir to fd1, then case 7 Try some optimizations to reduce fd to AT_FDCWD, or to at least avoid converting an absolute name or doing a double chdir. */ if ((fd1 == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file1)) && (fd2 == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file2))) return func (file1, file2); /* Case 0-2, 4-6, 8-10. */ /* If /proc/self/fd works, we don't need any stat or chdir. */ { char proc_buf1[OPENAT_BUFFER_SIZE]; char *proc_file1 = ((fd1 == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file1)) ? (char *) file1 : openat_proc_name (proc_buf1, fd1, file1)); if (proc_file1) { char proc_buf2[OPENAT_BUFFER_SIZE]; char *proc_file2 = ((fd2 == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file2)) ? (char *) file2 : openat_proc_name (proc_buf2, fd2, file2)); if (proc_file2) { int proc_result = func (proc_file1, proc_file2); int proc_errno = errno; if (proc_file1 != proc_buf1 && proc_file1 != file1) free (proc_file1); if (proc_file2 != proc_buf2 && proc_file2 != file2) free (proc_file2); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (0 <= proc_result) return proc_result; if (! EXPECTED_ERRNO (proc_errno)) { errno = proc_errno; return proc_result; } } else if (proc_file1 != proc_buf1 && proc_file1 != file1) free (proc_file1); } } /* Cases 3, 7, 11-15 remain. Time to normalize directory fds, if possible. */ if (IS_ABSOLUTE_FILE_NAME (file1)) fd1 = AT_FDCWD; /* Case 11 reduced to 3. */ else if (IS_ABSOLUTE_FILE_NAME (file2)) fd2 = AT_FDCWD; /* Case 14 reduced to 12. */ /* Cases 3, 7, 12, 13, 15 remain. */ if (fd1 == AT_FDCWD) /* Cases 3, 7. */ { if (stat (".", &st1) == -1 || fstat (fd2, &st2) == -1) return -1; if (!S_ISDIR (st2.st_mode)) { errno = ENOTDIR; return -1; } if (SAME_INODE (st1, st2)) /* Reduced to cases 1, 5. */ return func (file1, file2); } else if (fd2 == AT_FDCWD) /* Cases 12, 13. */ { if (stat (".", &st2) == -1 || fstat (fd1, &st1) == -1) return -1; if (!S_ISDIR (st1.st_mode)) { errno = ENOTDIR; return -1; } if (SAME_INODE (st1, st2)) /* Reduced to cases 4, 5. */ return func (file1, file2); } else if (fd1 != fd2) /* Case 15b. */ { if (fstat (fd1, &st1) == -1 || fstat (fd2, &st2) == -1) return -1; if (!S_ISDIR (st1.st_mode) || !S_ISDIR (st2.st_mode)) { errno = ENOTDIR; return -1; } if (SAME_INODE (st1, st2)) /* Reduced to case 15a. */ { fd2 = fd1; if (stat (".", &st1) == 0 && SAME_INODE (st1, st2)) return func (file1, file2); /* Further reduced to case 5. */ } } else /* Case 15a. */ { if (fstat (fd1, &st1) == -1) return -1; if (!S_ISDIR (st1.st_mode)) { errno = ENOTDIR; return -1; } if (stat (".", &st2) == 0 && SAME_INODE (st1, st2)) return func (file1, file2); /* Reduced to case 5. */ } /* Catch invalid arguments before changing directories. */ if (file1[0] == '\0' || file2[0] == '\0') { errno = ENOENT; return -1; } /* Cases 3, 7, 12, 13, 15a, 15b remain. With all reductions in place, it is time to start changing directories. */ if (save_cwd (&saved_cwd) != 0) openat_save_fail (errno); if (fd1 != AT_FDCWD && fd2 != AT_FDCWD && fd1 != fd2) /* Case 15b. */ { if (fchdir (fd1) != 0) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return -1; } fd1 = AT_FDCWD; /* Reduced to case 7. */ } /* Cases 3, 7, 12, 13, 15a remain. Convert one relative name to absolute, if necessary. */ file1_alt = (char *) file1; file2_alt = (char *) file2; if (fd1 == AT_FDCWD && !IS_ABSOLUTE_FILE_NAME (file1)) /* Case 7. */ { /* It would be nicer to use: file1_alt = file_name_concat (xgetcwd (), file1, NULL); but libraries should not call xalloc_die. */ char *cwd = getcwd (NULL, 0); if (!cwd) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return -1; } file1_alt = mfile_name_concat (cwd, file1, NULL); if (!file1_alt) { saved_errno = errno; free (cwd); free_cwd (&saved_cwd); errno = saved_errno; return -1; } free (cwd); /* Reduced to case 3. */ } else if (fd2 == AT_FDCWD && !IS_ABSOLUTE_FILE_NAME (file2)) /* Case 13. */ { char *cwd = getcwd (NULL, 0); if (!cwd) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return -1; } file2_alt = mfile_name_concat (cwd, file2, NULL); if (!file2_alt) { saved_errno = errno; free (cwd); free_cwd (&saved_cwd); errno = saved_errno; return -1; } free (cwd); /* Reduced to case 12. */ } /* Cases 3, 12, 15a remain. Change to the correct directory. */ if (fchdir (fd1 == AT_FDCWD ? fd2 : fd1) != 0) { saved_errno = errno; free_cwd (&saved_cwd); if (file1 != file1_alt) free (file1_alt); else if (file2 != file2_alt) free (file2_alt); errno = saved_errno; return -1; } /* Finally safe to perform the user's function, then clean up. */ err = func (file1_alt, file2_alt); saved_errno = (err < 0 ? errno : 0); if (file1 != file1_alt) free (file1_alt); else if (file2 != file2_alt) free (file2_alt); if (restore_cwd (&saved_cwd) != 0) openat_restore_fail (errno); free_cwd (&saved_cwd); if (saved_errno) errno = saved_errno; return err; } #undef CALL_FUNC #undef FUNC_RESULT �����������������������������������������������������������������gnulib-20210822~d383792/lib/atan2f.c����������������������������������������������������������������0000664�0000000�0000000�00000001607�14110572173�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Angle of a point in the plane. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float atan2f (float y, float x) { return (float) atan2 ((double) y, (double) x); } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/atanf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001553�14110572173�0016306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse tangent function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float atanf (float x) { return (float) atan ((double) x); } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/atanl.c�����������������������������������������������������������������0000664�0000000�0000000�00000017472�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov> 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double atanl (long double x) { return atan (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/s_atanl.c. */ /* s_atanl.c * * Inverse circular tangent for 128-bit long double precision * (arctangent) * * * * SYNOPSIS: * * long double x, y, atanl(); * * y = atanl( x ); * * * * DESCRIPTION: * * Returns radian angle between -pi/2 and +pi/2 whose tangent is x. * * The function uses a rational approximation of the form * t + t^3 P(t^2)/Q(t^2), optimized for |t| < 0.09375. * * The argument is reduced using the identity * arctan x - arctan u = arctan ((x-u)/(1 + ux)) * and an 83-entry lookup table for arctan u, with u = 0, 1/8, ..., 10.25. * Use of the table improves the execution speed of the routine. * * * * ACCURACY: * * Relative error: * arithmetic domain # trials peak rms * IEEE -19, 19 4e5 1.7e-34 5.4e-35 * * * WARNING: * * This program uses integer operations on bit fields of floating-point * numbers. It does not work with data structures other than the * structure assumed. * */ /* arctan(k/8), k = 0, ..., 82 */ static const long double atantbl[84] = { 0.0000000000000000000000000000000000000000E0L, 1.2435499454676143503135484916387102557317E-1L, /* arctan(0.125) */ 2.4497866312686415417208248121127581091414E-1L, 3.5877067027057222039592006392646049977698E-1L, 4.6364760900080611621425623146121440202854E-1L, 5.5859931534356243597150821640166127034645E-1L, 6.4350110879328438680280922871732263804151E-1L, 7.1882999962162450541701415152590465395142E-1L, 7.8539816339744830961566084581987572104929E-1L, 8.4415398611317100251784414827164750652594E-1L, 8.9605538457134395617480071802993782702458E-1L, 9.4200004037946366473793717053459358607166E-1L, 9.8279372324732906798571061101466601449688E-1L, 1.0191413442663497346383429170230636487744E0L, 1.0516502125483736674598673120862998296302E0L, 1.0808390005411683108871567292171998202703E0L, 1.1071487177940905030170654601785370400700E0L, 1.1309537439791604464709335155363278047493E0L, 1.1525719972156675180401498626127513797495E0L, 1.1722738811284763866005949441337046149712E0L, 1.1902899496825317329277337748293183376012E0L, 1.2068173702852525303955115800565576303133E0L, 1.2220253232109896370417417439225704908830E0L, 1.2360594894780819419094519711090786987027E0L, 1.2490457723982544258299170772810901230778E0L, 1.2610933822524404193139408812473357720101E0L, 1.2722973952087173412961937498224804940684E0L, 1.2827408797442707473628852511364955306249E0L, 1.2924966677897852679030914214070816845853E0L, 1.3016288340091961438047858503666855921414E0L, 1.3101939350475556342564376891719053122733E0L, 1.3182420510168370498593302023271362531155E0L, 1.3258176636680324650592392104284756311844E0L, 1.3329603993374458675538498697331558093700E0L, 1.3397056595989995393283037525895557411039E0L, 1.3460851583802539310489409282517796256512E0L, 1.3521273809209546571891479413898128509842E0L, 1.3578579772154994751124898859640585287459E0L, 1.3633001003596939542892985278250991189943E0L, 1.3684746984165928776366381936948529556191E0L, 1.3734007669450158608612719264449611486510E0L, 1.3780955681325110444536609641291551522494E0L, 1.3825748214901258580599674177685685125566E0L, 1.3868528702577214543289381097042486034883E0L, 1.3909428270024183486427686943836432060856E0L, 1.3948567013423687823948122092044222644895E0L, 1.3986055122719575950126700816114282335732E0L, 1.4021993871854670105330304794336492676944E0L, 1.4056476493802697809521934019958079881002E0L, 1.4089588955564736949699075250792569287156E0L, 1.4121410646084952153676136718584891599630E0L, 1.4152014988178669079462550975833894394929E0L, 1.4181469983996314594038603039700989523716E0L, 1.4209838702219992566633046424614466661176E0L, 1.4237179714064941189018190466107297503086E0L, 1.4263547484202526397918060597281265695725E0L, 1.4288992721907326964184700745371983590908E0L, 1.4313562697035588982240194668401779312122E0L, 1.4337301524847089866404719096698873648610E0L, 1.4360250423171655234964275337155008780675E0L, 1.4382447944982225979614042479354815855386E0L, 1.4403930189057632173997301031392126865694E0L, 1.4424730991091018200252920599377292525125E0L, 1.4444882097316563655148453598508037025938E0L, 1.4464413322481351841999668424758804165254E0L, 1.4483352693775551917970437843145232637695E0L, 1.4501726582147939000905940595923466567576E0L, 1.4519559822271314199339700039142990228105E0L, 1.4536875822280323362423034480994649820285E0L, 1.4553696664279718992423082296859928222270E0L, 1.4570043196511885530074841089245667532358E0L, 1.4585935117976422128825857356750737658039E0L, 1.4601391056210009726721818194296893361233E0L, 1.4616428638860188872060496086383008594310E0L, 1.4631064559620759326975975316301202111560E0L, 1.4645314639038178118428450961503371619177E0L, 1.4659193880646627234129855241049975398470E0L, 1.4672716522843522691530527207287398276197E0L, 1.4685896086876430842559640450619880951144E0L, 1.4698745421276027686510391411132998919794E0L, 1.4711276743037345918528755717617308518553E0L, 1.4723501675822635384916444186631899205983E0L, 1.4735431285433308455179928682541563973416E0L, /* arctan(10.25) */ 1.5707963267948966192313216916397514420986E0L /* pi/2 */ }; /* arctan t = t + t^3 p(t^2) / q(t^2) |t| <= 0.09375 peak relative error 5.3e-37 */ static const long double p0 = -4.283708356338736809269381409828726405572E1L, p1 = -8.636132499244548540964557273544599863825E1L, p2 = -5.713554848244551350855604111031839613216E1L, p3 = -1.371405711877433266573835355036413750118E1L, p4 = -8.638214309119210906997318946650189640184E-1L, q0 = 1.285112506901621042780814422948906537959E2L, q1 = 3.361907253914337187957855834229672347089E2L, q2 = 3.180448303864130128268191635189365331680E2L, q3 = 1.307244136980865800160844625025280344686E2L, q4 = 2.173623741810414221251136181221172551416E1L; /* q5 = 1.000000000000000000000000000000000000000E0 */ long double atanl (long double x) { int k, sign; long double t, u, p, q; /* Check for zero or NaN. */ if (isnanl (x) || x == 0.0) return x + x; sign = x < 0.0; if (x + x == x) { /* Infinity. */ if (sign) return -atantbl[83]; else return atantbl[83]; } if (sign) x = -x; if (x >= 10.25) { k = 83; t = -1.0/x; } else { /* Index of nearest table element. Roundoff to integer is asymmetrical to avoid cancellation when t < 0 (cf. fdlibm). */ k = 8.0 * x + 0.25; u = 0.125 * k; /* Small arctan argument. */ t = (x - u) / (1.0 + x * u); } /* Arctan of small argument t. */ u = t * t; p = ((((p4 * u) + p3) * u + p2) * u + p1) * u + p0; q = ((((u + q4) * u + q3) * u + q2) * u + q1) * u + q0; u = t * u * p / q + t; /* arctan x = arctan u + arctan t */ u = atantbl[k] + u; if (sign) return (-u); else return u; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/atexit.c����������������������������������������������������������������0000664�0000000�0000000�00000000520�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */ /* This file is in the public domain. */ /* Written by Mike Stump. */ #include <config.h> int atexit (void (*f) (void)) { /* If the system doesn't provide a definition for atexit, use on_exit if the system provides that. */ on_exit (f, 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/atoll.c�����������������������������������������������������������������0000664�0000000�0000000�00000002006�14110572173�0016322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1997-1998, 2008-2021 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 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/>. */ #if !_LIBC # include <config.h> #endif /* Specification. */ #include <stdlib.h> #if _LIBC # undef atoll #endif /* Convert a string to a long long int. */ long long int atoll (const char *nptr) { return strtoll (nptr, (char **) NULL, 10); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/attribute.h�������������������������������������������������������������0000664�0000000�0000000�00000020427�14110572173�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers Copyright 2020-2021 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. */ /* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* macros used within Gnulib. */ /* These attributes can be placed in two ways: - At the start of a declaration (i.e. even before storage-class specifiers!); then they apply to all entities that are declared by the declaration. - Immediately after the name of an entity being declared by the declaration; then they apply to that entity only. */ #ifndef _GL_ATTRIBUTE_H #define _GL_ATTRIBUTE_H /* This file defines two types of attributes: * C2x standard attributes. These have macro names that do not begin with 'ATTRIBUTE_'. * Selected GCC attributes; see: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html These names begin with 'ATTRIBUTE_' to avoid name clashes. */ /* =============== Attributes for specific kinds of functions =============== */ /* Attributes for functions that should not be used. */ /* Warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #define DEPRECATED _GL_ATTRIBUTE_DEPRECATED /* If a function call is not optimized way, warn with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) /* If a function call is not optimized way, report an error with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) /* Attributes for memory-allocating functions. */ /* The function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC /* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function is the size of the returned memory block. ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments to determine the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) /* Attributes for variadic functions. */ /* The variadic function expects a trailing NULL argument. ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) /* ================== Attributes for compiler diagnostics ================== */ /* Attributes that help the compiler diagnose programmer mistakes. Some of them may also help for some compiler optimizations. */ /* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - The STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) /* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ /* Applies to: functions. */ #define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) /* The function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL /* Warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #define NODISCARD _GL_ATTRIBUTE_NODISCARD /* Attributes that disable false alarms when the compiler diagnoses programmer "mistakes". */ /* Do not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ #define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* The contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING /* Do not warn if control flow falls through to the immediately following 'case' or 'default' label. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ #define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH /* ================== Attributes for debugging information ================== */ /* Attributes regarding debugging information emitted by the compiler. */ /* Omit the function from stack traces when debugging. */ /* Applies to: function. */ #define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL /* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE /* ========== Attributes that mainly direct compiler optimizations ========== */ /* The function does not throw exceptions. */ /* Applies to: functions. */ #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW /* Do not inline the function. */ /* Applies to: functions. */ #define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE /* Always inline the function, and report an error if the compiler cannot inline. */ /* Applies to: function. */ #define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE /* It is OK for a compiler to omit duplicate calls with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST /* It is OK for a compiler to omit duplicate calls with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE /* The function is rarely executed. */ /* Applies to: functions. */ #define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD /* If called from some other compilation unit, the function executes code from that unit only by return or by exception handling, letting the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF /* For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED /* ================ Attributes that make invalid code valid ================ */ /* Attributes that prevent fatal compiler optimizations for code that is not fully ISO C compliant. */ /* Pointers to the type may point to the same storage as pointers to other types, thus disabling strict aliasing optimization. */ /* Applies to: types. */ #define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/backup-find.c�����������������������������������������������������������0000664�0000000�0000000�00000005634�14110572173�0017404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* backupfile.c -- make Emacs style backup file names Copyright 2017-2021 Free Software Foundation, Inc. This 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 "backup-internal.h" #include "argmatch.h" #include "xalloc.h" #include <stdlib.h> /* Relative to DIR_FD, return the name of a backup file for the existing file FILE, allocated with malloc. Report an error and exit if out of memory. Do not call this function if backup_type == no_backups. */ char * find_backup_file_name (int dir_fd, char const *file, enum backup_type backup_type) { char *result = backupfile_internal (dir_fd, file, backup_type, false); if (!result) xalloc_die (); return result; } static char const *const backup_args[] = { /* In a series of synonyms, present the most meaningful first, so that argmatch_valid be more readable. */ "none", "off", "simple", "never", "existing", "nil", "numbered", "t", NULL }; static const enum backup_type backup_types[] = { no_backups, no_backups, simple_backups, simple_backups, numbered_existing_backups, numbered_existing_backups, numbered_backups, numbered_backups }; /* Ensure that these two vectors have the same number of elements, not counting the final NULL in the first one. */ ARGMATCH_VERIFY (backup_args, backup_types); /* Return the type of backup specified by VERSION. If VERSION is NULL or the empty string, return numbered_existing_backups. If VERSION is invalid or ambiguous, fail with a diagnostic appropriate for the specified CONTEXT. Unambiguous abbreviations are accepted. */ enum backup_type get_version (char const *context, char const *version) { if (version == 0 || *version == 0) return numbered_existing_backups; else return XARGMATCH (context, version, backup_args, backup_types); } /* Return the type of backup specified by VERSION. If VERSION is NULL, use the value of the envvar VERSION_CONTROL. If the specified string is invalid or ambiguous, fail with a diagnostic appropriate for the specified CONTEXT. Unambiguous abbreviations are accepted. */ enum backup_type xget_version (char const *context, char const *version) { if (version && *version) return get_version (context, version); else return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL")); } ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/backup-internal.h�������������������������������������������������������0000664�0000000�0000000�00000001621�14110572173�0020275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Backup files. Copyright (C) 2017-2021 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 "backupfile.h" #include <stdbool.h> #include <stdlib.h> extern char *backupfile_internal (int, char const *, enum backup_type, bool) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/backup-rename.c���������������������������������������������������������0000664�0000000�0000000�00000002261�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rename a file to a backup name, Emacs style. Copyright 2017-2021 Free Software Foundation, Inc. This 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 "backup-internal.h" /* Relative to DIR_FD, rename the existing file FILE to a backup name, allocated with malloc, and return the backup name. On failure return a null pointer, setting errno. Do not call this function if backup_type == no_backups. */ char * backup_file_rename (int dir_fd, char const *file, enum backup_type backup_type) { return backupfile_internal (dir_fd, file, backup_type, true); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/backupfile.c������������������������������������������������������������0000664�0000000�0000000�00000027420�14110572173�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* backupfile.c -- make Emacs style backup file names Copyright (C) 1990-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and David MacKenzie. Some algorithms adapted from GNU Emacs. */ #include <config.h> #include "backup-internal.h" #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "attribute.h" #include "basename-lgpl.h" #include "idx.h" #include "intprops.h" #include "opendirat.h" #include "renameatu.h" #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #if ! (HAVE_PATHCONF && defined _PC_NAME_MAX) # define pathconf(file, option) (errno = -1) # define fpathconf(fd, option) (errno = -1) #endif #ifndef _POSIX_NAME_MAX # define _POSIX_NAME_MAX 14 #endif #if defined _XOPEN_NAME_MAX # define NAME_MAX_MINIMUM _XOPEN_NAME_MAX #else # define NAME_MAX_MINIMUM _POSIX_NAME_MAX #endif #ifndef HAVE_DOS_FILE_NAMES # define HAVE_DOS_FILE_NAMES 0 #endif #ifndef HAVE_LONG_FILE_NAMES # define HAVE_LONG_FILE_NAMES 0 #endif /* ISDIGIT differs from isdigit, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char or EOF. - It's typically faster. POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT unless it's important to use the locale's definition of "digit" even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* The extension added to file names to produce a simple (as opposed to numbered) backup file name. */ char const *simple_backup_suffix = NULL; /* Set SIMPLE_BACKUP_SUFFIX to S, or to a default specified by the environment if S is null. If S or the environment does not specify a valid backup suffix, use "~". */ void set_simple_backup_suffix (char const *s) { if (!s) s = getenv ("SIMPLE_BACKUP_SUFFIX"); simple_backup_suffix = s && *s && s == last_component (s) ? s : "~"; } /* If FILE (which was of length FILELEN before an extension was appended to it) is too long, replace the extension with the single char E. If the result is still too long, remove the char just before E. If DIR_FD is nonnegative, it is a file descriptor for FILE's parent. *NAME_MAX is either 0, or the cached result of a previous call for FILE's parent's _PC_NAME_MAX. */ static void check_extension (char *file, size_t filelen, char e, int dir_fd, size_t *base_max) { char *base = last_component (file); size_t baselen = base_len (base); size_t baselen_max = HAVE_LONG_FILE_NAMES ? 255 : NAME_MAX_MINIMUM; if (HAVE_DOS_FILE_NAMES || NAME_MAX_MINIMUM < baselen) { /* The new base name is long enough to require a pathconf check. */ if (*base_max == 0) { long name_max; if (dir_fd < 0) { /* Temporarily modify the buffer into its parent directory name, invoke pathconf on the directory, and then restore the buffer. */ char tmp[sizeof "."]; memcpy (tmp, base, sizeof "."); strcpy (base, "."); errno = 0; name_max = pathconf (file, _PC_NAME_MAX); name_max -= !errno; memcpy (base, tmp, sizeof "."); } else { errno = 0; name_max = fpathconf (dir_fd, _PC_NAME_MAX); name_max -= !errno; } *base_max = (0 <= name_max && name_max <= SIZE_MAX ? name_max : name_max < -1 ? NAME_MAX_MINIMUM : SIZE_MAX); } baselen_max = *base_max; } if (HAVE_DOS_FILE_NAMES && baselen_max <= 12) { /* Live within DOS's 8.3 limit. */ char *dot = strchr (base, '.'); if (!dot) baselen_max = 8; else { char const *second_dot = strchr (dot + 1, '.'); baselen_max = (second_dot ? second_dot - base : dot + 1 - base + 3); } } if (baselen_max < baselen) { baselen = file + filelen - base; if (baselen_max <= baselen) baselen = baselen_max - 1; base[baselen] = e; base[baselen + 1] = '\0'; } } /* Returned values for NUMBERED_BACKUP. */ enum numbered_backup_result { /* The new backup name is the same length as an existing backup name, so it's valid for that directory. */ BACKUP_IS_SAME_LENGTH, /* Some backup names already exist, but the returned name is longer than any of them, and its length should be checked. */ BACKUP_IS_LONGER, /* There are no existing backup names. The new name's length should be checked. */ BACKUP_IS_NEW, /* Memory allocation failure. */ BACKUP_NOMEM }; /* Relative to DIR_FD, *BUFFER contains a file name. Store into *BUFFER the next backup name for the named file, with a version number greater than all the existing numbered backups. Reallocate *BUFFER as necessary; its initial allocated size is BUFFER_SIZE, which must be at least 4 bytes longer than the file name to make room for the initially appended ".~1". FILELEN is the length of the original file name. BASE_OFFSET is the offset of the basename in *BUFFER. The returned value indicates what kind of backup was found. If an I/O or other read error occurs, use the highest backup number that was found. *DIRPP is the destination directory. If *DIRPP is null, open the destination directory and store the resulting stream into *DIRPP and its file descriptor into *PNEW_FD without closing the stream. */ static enum numbered_backup_result numbered_backup (int dir_fd, char **buffer, size_t buffer_size, size_t filelen, idx_t base_offset, DIR **dirpp, int *pnew_fd) { enum numbered_backup_result result = BACKUP_IS_NEW; DIR *dirp = *dirpp; struct dirent *dp; char *buf = *buffer; size_t versionlenmax = 1; char *base = buf + base_offset; size_t baselen = base_len (base); if (dirp) rewinddir (dirp); else { /* Temporarily modify the buffer into its parent directory name, open the directory, and then restore the buffer. */ char tmp[sizeof "."]; memcpy (tmp, base, sizeof "."); strcpy (base, "."); dirp = opendirat (dir_fd, buf, 0, pnew_fd); if (!dirp && errno == ENOMEM) result = BACKUP_NOMEM; memcpy (base, tmp, sizeof "."); strcpy (base + baselen, ".~1~"); if (!dirp) return result; *dirpp = dirp; } while ((dp = readdir (dirp)) != NULL) { char const *p; char *q; bool all_9s; size_t versionlen; if (_D_EXACT_NAMLEN (dp) < baselen + 4) continue; if (memcmp (buf + base_offset, dp->d_name, baselen + 2) != 0) continue; p = dp->d_name + baselen + 2; /* Check whether this file has a version number and if so, whether it is larger. Use string operations rather than integer arithmetic, to avoid problems with integer overflow. */ if (! ('1' <= *p && *p <= '9')) continue; all_9s = (*p == '9'); for (versionlen = 1; ISDIGIT (p[versionlen]); versionlen++) all_9s &= (p[versionlen] == '9'); if (! (p[versionlen] == '~' && !p[versionlen + 1] && (versionlenmax < versionlen || (versionlenmax == versionlen && memcmp (buf + filelen + 2, p, versionlen) <= 0)))) continue; /* This entry has the largest version number seen so far. Append this highest numbered extension to the file name, prepending '0' to the number if it is all 9s. */ versionlenmax = all_9s + versionlen; result = (all_9s ? BACKUP_IS_LONGER : BACKUP_IS_SAME_LENGTH); size_t new_buffer_size = filelen + 2 + versionlenmax + 2; if (buffer_size < new_buffer_size) { size_t grown; if (! INT_ADD_WRAPV (new_buffer_size, new_buffer_size >> 1, &grown)) new_buffer_size = grown; char *new_buf = realloc (buf, new_buffer_size); if (!new_buf) { *buffer = buf; return BACKUP_NOMEM; } buf = new_buf; buffer_size = new_buffer_size; } q = buf + filelen; *q++ = '.'; *q++ = '~'; *q = '0'; q += all_9s; memcpy (q, p, versionlen + 2); /* Add 1 to the version number. */ q += versionlen; while (*--q == '9') *q = '0'; ++*q; } *buffer = buf; return result; } /* Relative to DIR_FD, return the name of the new backup file for the existing file FILE, allocated with malloc. If RENAME, also rename FILE to the new name. On failure, return NULL and set errno. Do not call this function if backup_type == no_backups. */ char * backupfile_internal (int dir_fd, char const *file, enum backup_type backup_type, bool rename) { idx_t base_offset = last_component (file) - file; size_t filelen = base_offset + strlen (file + base_offset); if (! simple_backup_suffix) set_simple_backup_suffix (NULL); /* Allow room for simple or ".~N~" backups. The guess must be at least sizeof ".~1~", but otherwise will be adjusted as needed. */ size_t simple_backup_suffix_size = strlen (simple_backup_suffix) + 1; size_t backup_suffix_size_guess = simple_backup_suffix_size; enum { GUESS = sizeof ".~12345~" }; if (backup_suffix_size_guess < GUESS) backup_suffix_size_guess = GUESS; ssize_t ssize = filelen + backup_suffix_size_guess + 1; char *s = malloc (ssize); if (!s) return s; DIR *dirp = NULL; int sdir = -1; size_t base_max = 0; while (true) { memcpy (s, file, filelen + 1); if (backup_type == simple_backups) memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size); else switch (numbered_backup (dir_fd, &s, ssize, filelen, base_offset, &dirp, &sdir)) { case BACKUP_IS_SAME_LENGTH: break; case BACKUP_IS_NEW: if (backup_type == numbered_existing_backups) { backup_type = simple_backups; memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size); } FALLTHROUGH; case BACKUP_IS_LONGER: check_extension (s, filelen, '~', sdir, &base_max); break; case BACKUP_NOMEM: if (dirp) closedir (dirp); free (s); errno = ENOMEM; return NULL; } if (! rename) break; if (sdir < 0) { sdir = AT_FDCWD; base_offset = 0; } unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE; if (renameatu (AT_FDCWD, file, sdir, s + base_offset, flags) == 0) break; int e = errno; if (e != EEXIST) { if (dirp) closedir (dirp); free (s); errno = e; return NULL; } } if (dirp) closedir (dirp); return s; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/backupfile.h������������������������������������������������������������0000664�0000000�0000000�00000003726�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* backupfile.h -- declarations for making Emacs style backup file names Copyright (C) 1990-1992, 1997-1999, 2003-2004, 2009-2021 Free Software Foundation, Inc. This 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 BACKUPFILE_H_ #define BACKUPFILE_H_ /* Get AT_FDCWD, as a convenience for users of this file. */ #include <fcntl.h> #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* When to make backup files. */ enum backup_type { /* Never make backups. */ no_backups, /* Make simple backups of every file. */ simple_backups, /* Make numbered backups of files that already have numbered backups, and simple backups of the others. */ numbered_existing_backups, /* Make numbered backups of every file. */ numbered_backups }; #define VALID_BACKUP_TYPE(Type) \ ((unsigned int) (Type) <= numbered_backups) extern char const *simple_backup_suffix; void set_simple_backup_suffix (char const *); char *backup_file_rename (int, char const *, enum backup_type) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; char *find_backup_file_name (int, char const *, enum backup_type) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; enum backup_type get_version (char const *context, char const *arg); enum backup_type xget_version (char const *context, char const *arg); #ifdef __cplusplus } #endif #endif /* ! BACKUPFILE_H_ */ ������������������������������������������gnulib-20210822~d383792/lib/base32.c����������������������������������������������������������������0000664�0000000�0000000�00000044704�14110572173�0016301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base32.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 2009-2021 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/>. */ /* Adapted from Simon Josefsson's base64 code by Gijs van Tulder. * * See also RFC 4648 <https://www.ietf.org/rfc/rfc4648.txt>. * * Be careful with error checking. Here is how you would typically * use these functions: * * bool ok = base32_decode_alloc (in, inlen, &out, &outlen); * if (!ok) * FAIL: input was not valid base32 * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN * * size_t outlen = base32_encode_alloc (in, inlen, &out); * if (out == NULL && outlen == 0 && inlen != 0) * FAIL: input too long * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN. * */ #include <config.h> /* Get prototype. */ #include "base32.h" /* Get malloc. */ #include <stdlib.h> /* Get UCHAR_MAX. */ #include <limits.h> #include <string.h> /* C89 compliant way to cast 'char' to 'unsigned char'. */ static unsigned char to_uchar (char ch) { return ch; } /* Base32 encode IN array of size INLEN into OUT array of size OUTLEN. If OUTLEN is less than BASE32_LENGTH(INLEN), write as many bytes as possible. If OUTLEN is larger than BASE32_LENGTH(INLEN), also zero terminate the output buffer. */ void base32_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen) { static const char b32str[32] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; while (inlen && outlen) { *out++ = b32str[(to_uchar (in[0]) >> 3) & 0x1f]; if (!--outlen) break; *out++ = b32str[((to_uchar (in[0]) << 2) + (--inlen ? to_uchar (in[1]) >> 6 : 0)) & 0x1f]; if (!--outlen) break; *out++ = (inlen ? b32str[(to_uchar (in[1]) >> 1) & 0x1f] : '='); if (!--outlen) break; *out++ = (inlen ? b32str[((to_uchar (in[1]) << 4) + (--inlen ? to_uchar (in[2]) >> 4 : 0)) & 0x1f] : '='); if (!--outlen) break; *out++ = (inlen ? b32str[((to_uchar (in[2]) << 1) + (--inlen ? to_uchar (in[3]) >> 7 : 0)) & 0x1f] : '='); if (!--outlen) break; *out++ = (inlen ? b32str[(to_uchar (in[3]) >> 2) & 0x1f] : '='); if (!--outlen) break; *out++ = (inlen ? b32str[((to_uchar (in[3]) << 3) + (--inlen ? to_uchar (in[4]) >> 5 : 0)) & 0x1f] : '='); if (!--outlen) break; *out++ = inlen ? b32str[to_uchar (in[4]) & 0x1f] : '='; if (!--outlen) break; if (inlen) inlen--; if (inlen) in += 5; } if (outlen) *out = '\0'; } /* Allocate a buffer and store zero terminated base32 encoded data from array IN of size INLEN, returning BASE32_LENGTH(INLEN), i.e., the length of the encoded data, excluding the terminating zero. On return, the OUT variable will hold a pointer to newly allocated memory that must be deallocated by the caller. If output string length would overflow, 0 is returned and OUT is set to NULL. If memory allocation failed, OUT is set to NULL, and the return value indicates length of the requested memory block, i.e., BASE32_LENGTH(inlen) + 1. */ size_t base32_encode_alloc (const char *in, size_t inlen, char **out) { size_t outlen = 1 + BASE32_LENGTH (inlen); /* Check for overflow in outlen computation. * * If there is no overflow, outlen >= inlen. * * TODO Is this a sufficient check? (See the notes in base64.c.) */ if (inlen > outlen) { *out = NULL; return 0; } *out = malloc (outlen); if (!*out) return outlen; base32_encode (in, inlen, *out, outlen); return outlen - 1; } /* With this approach this file works independent of the charset used (think EBCDIC). However, it does assume that the characters in the Base32 alphabet (A-Z2-7) are encoded in 0..255. POSIX 1003.1-2001 require that char and unsigned char are 8-bit quantities, though, taking care of that problem. But this may be a potential problem on non-POSIX C99 platforms. IBM C V6 for AIX mishandles "#define B32(x) ...'x'...", so use "_" as the formal parameter rather than "x". */ #define B32(_) \ ((_) == 'A' ? 0 \ : (_) == 'B' ? 1 \ : (_) == 'C' ? 2 \ : (_) == 'D' ? 3 \ : (_) == 'E' ? 4 \ : (_) == 'F' ? 5 \ : (_) == 'G' ? 6 \ : (_) == 'H' ? 7 \ : (_) == 'I' ? 8 \ : (_) == 'J' ? 9 \ : (_) == 'K' ? 10 \ : (_) == 'L' ? 11 \ : (_) == 'M' ? 12 \ : (_) == 'N' ? 13 \ : (_) == 'O' ? 14 \ : (_) == 'P' ? 15 \ : (_) == 'Q' ? 16 \ : (_) == 'R' ? 17 \ : (_) == 'S' ? 18 \ : (_) == 'T' ? 19 \ : (_) == 'U' ? 20 \ : (_) == 'V' ? 21 \ : (_) == 'W' ? 22 \ : (_) == 'X' ? 23 \ : (_) == 'Y' ? 24 \ : (_) == 'Z' ? 25 \ : (_) == '2' ? 26 \ : (_) == '3' ? 27 \ : (_) == '4' ? 28 \ : (_) == '5' ? 29 \ : (_) == '6' ? 30 \ : (_) == '7' ? 31 \ : -1) static const signed char b32[0x100] = { B32 (0), B32 (1), B32 (2), B32 (3), B32 (4), B32 (5), B32 (6), B32 (7), B32 (8), B32 (9), B32 (10), B32 (11), B32 (12), B32 (13), B32 (14), B32 (15), B32 (16), B32 (17), B32 (18), B32 (19), B32 (20), B32 (21), B32 (22), B32 (23), B32 (24), B32 (25), B32 (26), B32 (27), B32 (28), B32 (29), B32 (30), B32 (31), B32 (32), B32 (33), B32 (34), B32 (35), B32 (36), B32 (37), B32 (38), B32 (39), B32 (40), B32 (41), B32 (42), B32 (43), B32 (44), B32 (45), B32 (46), B32 (47), B32 (48), B32 (49), B32 (50), B32 (51), B32 (52), B32 (53), B32 (54), B32 (55), B32 (56), B32 (57), B32 (58), B32 (59), B32 (60), B32 (61), B32 (62), B32 (63), B32 (32), B32 (65), B32 (66), B32 (67), B32 (68), B32 (69), B32 (70), B32 (71), B32 (72), B32 (73), B32 (74), B32 (75), B32 (76), B32 (77), B32 (78), B32 (79), B32 (80), B32 (81), B32 (82), B32 (83), B32 (84), B32 (85), B32 (86), B32 (87), B32 (88), B32 (89), B32 (90), B32 (91), B32 (92), B32 (93), B32 (94), B32 (95), B32 (96), B32 (97), B32 (98), B32 (99), B32 (100), B32 (101), B32 (102), B32 (103), B32 (104), B32 (105), B32 (106), B32 (107), B32 (108), B32 (109), B32 (110), B32 (111), B32 (112), B32 (113), B32 (114), B32 (115), B32 (116), B32 (117), B32 (118), B32 (119), B32 (120), B32 (121), B32 (122), B32 (123), B32 (124), B32 (125), B32 (126), B32 (127), B32 (128), B32 (129), B32 (130), B32 (131), B32 (132), B32 (133), B32 (134), B32 (135), B32 (136), B32 (137), B32 (138), B32 (139), B32 (140), B32 (141), B32 (142), B32 (143), B32 (144), B32 (145), B32 (146), B32 (147), B32 (148), B32 (149), B32 (150), B32 (151), B32 (152), B32 (153), B32 (154), B32 (155), B32 (156), B32 (157), B32 (158), B32 (159), B32 (160), B32 (161), B32 (162), B32 (163), B32 (132), B32 (165), B32 (166), B32 (167), B32 (168), B32 (169), B32 (170), B32 (171), B32 (172), B32 (173), B32 (174), B32 (175), B32 (176), B32 (177), B32 (178), B32 (179), B32 (180), B32 (181), B32 (182), B32 (183), B32 (184), B32 (185), B32 (186), B32 (187), B32 (188), B32 (189), B32 (190), B32 (191), B32 (192), B32 (193), B32 (194), B32 (195), B32 (196), B32 (197), B32 (198), B32 (199), B32 (200), B32 (201), B32 (202), B32 (203), B32 (204), B32 (205), B32 (206), B32 (207), B32 (208), B32 (209), B32 (210), B32 (211), B32 (212), B32 (213), B32 (214), B32 (215), B32 (216), B32 (217), B32 (218), B32 (219), B32 (220), B32 (221), B32 (222), B32 (223), B32 (224), B32 (225), B32 (226), B32 (227), B32 (228), B32 (229), B32 (230), B32 (231), B32 (232), B32 (233), B32 (234), B32 (235), B32 (236), B32 (237), B32 (238), B32 (239), B32 (240), B32 (241), B32 (242), B32 (243), B32 (244), B32 (245), B32 (246), B32 (247), B32 (248), B32 (249), B32 (250), B32 (251), B32 (252), B32 (253), B32 (254), B32 (255) }; #if UCHAR_MAX == 255 # define uchar_in_range(c) true #else # define uchar_in_range(c) ((c) <= 255) #endif /* Return true if CH is a character from the Base32 alphabet, and false otherwise. Note that '=' is padding and not considered to be part of the alphabet. */ bool isbase32 (char ch) { return uchar_in_range (to_uchar (ch)) && 0 <= b32[to_uchar (ch)]; } /* Initialize decode-context buffer, CTX. */ void base32_decode_ctx_init (struct base32_decode_context *ctx) { ctx->i = 0; } /* If CTX->i is 0 or 8, there are eight or more bytes in [*IN..IN_END), and none of those eight is a newline, then return *IN. Otherwise, copy up to 4 - CTX->i non-newline bytes from that range into CTX->buf, starting at index CTX->i and setting CTX->i to reflect the number of bytes copied, and return CTX->buf. In either case, advance *IN to point to the byte after the last one processed, and set *N_NON_NEWLINE to the number of verified non-newline bytes accessible through the returned pointer. */ static char * get_8 (struct base32_decode_context *ctx, char const *restrict *in, char const *restrict in_end, size_t *n_non_newline) { if (ctx->i == 8) ctx->i = 0; if (ctx->i == 0) { char const *t = *in; if (8 <= in_end - *in && memchr (t, '\n', 8) == NULL) { /* This is the common case: no newline. */ *in += 8; *n_non_newline = 8; return (char *) t; } } { /* Copy non-newline bytes into BUF. */ char const *p = *in; while (p < in_end) { char c = *p++; if (c != '\n') { ctx->buf[ctx->i++] = c; if (ctx->i == 8) break; } } *in = p; *n_non_newline = ctx->i; return ctx->buf; } } #define return_false \ do \ { \ *outp = out; \ return false; \ } \ while (false) /* Decode eight bytes of base32-encoded data, IN, of length INLEN into the output buffer, *OUT, of size *OUTLEN bytes. Return true if decoding is successful, false otherwise. If *OUTLEN is too small, as many bytes as possible are written to *OUT. On return, advance *OUT to point to the byte after the last one written, and decrement *OUTLEN to reflect the number of bytes remaining in *OUT. */ static bool decode_8 (char const *restrict in, size_t inlen, char *restrict *outp, size_t *outleft) { char *out = *outp; if (inlen < 8) return false; if (!isbase32 (in[0]) || !isbase32 (in[1]) ) return false; if (*outleft) { *out++ = ((b32[to_uchar (in[0])] << 3) | (b32[to_uchar (in[1])] >> 2)); --*outleft; } if (in[2] == '=') { if (in[3] != '=' || in[4] != '=' || in[5] != '=' || in[6] != '=' || in[7] != '=') return_false; } else { if (!isbase32 (in[2]) || !isbase32 (in[3])) return_false; if (*outleft) { *out++ = ((b32[to_uchar (in[1])] << 6) | (b32[to_uchar (in[2])] << 1) | (b32[to_uchar (in[3])] >> 4)); --*outleft; } if (in[4] == '=') { if (in[5] != '=' || in[6] != '=' || in[7] != '=') return_false; } else { if (!isbase32 (in[4])) return_false; if (*outleft) { *out++ = ((b32[to_uchar (in[3])] << 4) | (b32[to_uchar (in[4])] >> 1)); --*outleft; } if (in[5] == '=') { if (in[6] != '=' || in[7] != '=') return_false; } else { if (!isbase32 (in[5]) || !isbase32 (in[6])) return_false; if (*outleft) { *out++ = ((b32[to_uchar (in[4])] << 7) | (b32[to_uchar (in[5])] << 2) | (b32[to_uchar (in[6])] >> 3)); --*outleft; } if (in[7] != '=') { if (!isbase32 (in[7])) return_false; if (*outleft) { *out++ = ((b32[to_uchar (in[6])] << 5) | (b32[to_uchar (in[7])])); --*outleft; } } } } } *outp = out; return true; } /* Decode base32-encoded input array IN of length INLEN to output array OUT that can hold *OUTLEN bytes. The input data may be interspersed with newlines. Return true if decoding was successful, i.e. if the input was valid base32 data, false otherwise. If *OUTLEN is too small, as many bytes as possible will be written to OUT. On return, *OUTLEN holds the length of decoded bytes in OUT. Note that as soon as any non-alphabet, non-newline character is encountered, decoding is stopped and false is returned. If INLEN is zero, then process only whatever data is stored in CTX. Initially, CTX must have been initialized via base32_decode_ctx_init. Subsequent calls to this function must reuse whatever state is recorded in that buffer. It is necessary for when a octuple of base32 input bytes spans two input buffers. If CTX is NULL then newlines are treated as garbage and the input buffer is processed as a unit. */ bool base32_decode_ctx (struct base32_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen) { size_t outleft = *outlen; bool ignore_newlines = ctx != NULL; bool flush_ctx = false; unsigned int ctx_i = 0; if (ignore_newlines) { ctx_i = ctx->i; flush_ctx = inlen == 0; } while (true) { size_t outleft_save = outleft; if (ctx_i == 0 && !flush_ctx) { while (true) { /* Save a copy of outleft, in case we need to re-parse this block of four bytes. */ outleft_save = outleft; if (!decode_8 (in, inlen, &out, &outleft)) break; in += 8; inlen -= 8; } } if (inlen == 0 && !flush_ctx) break; /* Handle the common case of 72-byte wrapped lines. This also handles any other multiple-of-8-byte wrapping. */ if (inlen && *in == '\n' && ignore_newlines) { ++in; --inlen; continue; } /* Restore OUT and OUTLEFT. */ out -= outleft_save - outleft; outleft = outleft_save; { char const *in_end = in + inlen; char const *non_nl; if (ignore_newlines) non_nl = get_8 (ctx, &in, in_end, &inlen); else non_nl = in; /* Might have nl in this case. */ /* If the input is empty or consists solely of newlines (0 non-newlines), then we're done. Likewise if there are fewer than 8 bytes when not flushing context and not treating newlines as garbage. */ if (inlen == 0 || (inlen < 8 && !flush_ctx && ignore_newlines)) { inlen = 0; break; } if (!decode_8 (non_nl, inlen, &out, &outleft)) break; inlen = in_end - in; } } *outlen -= outleft; return inlen == 0; } /* Allocate an output buffer in *OUT, and decode the base32 encoded data stored in IN of size INLEN to the *OUT buffer. On return, the size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL, if the caller is not interested in the decoded length. *OUT may be NULL to indicate an out of memory error, in which case *OUTLEN contains the size of the memory block needed. The function returns true on successful decoding and memory allocation errors. (Use the *OUT and *OUTLEN parameters to differentiate between successful decoding and memory error.) The function returns false if the input was invalid, in which case *OUT is NULL and *OUTLEN is undefined. */ bool base32_decode_alloc_ctx (struct base32_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen) { /* This may allocate a few bytes too many, depending on input, but it's not worth the extra CPU time to compute the exact size. The exact size is 5 * inlen / 8, minus one or more bytes if the input is padded with one or more "=". Dividing before multiplying avoids the possibility of overflow. */ size_t needlen = 5 * (inlen / 8) + 5; *out = malloc (needlen); if (!*out) return true; if (!base32_decode_ctx (ctx, in, inlen, *out, &needlen)) { free (*out); *out = NULL; return false; } if (outlen) *outlen = needlen; return true; } ������������������������������������������������������������gnulib-20210822~d383792/lib/base32.h����������������������������������������������������������������0000664�0000000�0000000�00000004240�14110572173�0016275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base32.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2021 Free Software Foundation, Inc. Adapted from Simon Josefsson's base64 code by Gijs van Tulder. 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 BASE32_H # define BASE32_H /* Get size_t. */ # include <stddef.h> /* Get bool. */ # include <stdbool.h> /* This uses that the expression (n+(k-1))/k means the smallest integer >= n/k, i.e., the ceiling of n/k. */ # define BASE32_LENGTH(inlen) ((((inlen) + 4) / 5) * 8) struct base32_decode_context { unsigned int i; char buf[8]; }; extern bool isbase32 (char ch) _GL_ATTRIBUTE_CONST; extern void base32_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen); extern size_t base32_encode_alloc (const char *in, size_t inlen, char **out); extern void base32_decode_ctx_init (struct base32_decode_context *ctx); extern bool base32_decode_ctx (struct base32_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen); extern bool base32_decode_alloc_ctx (struct base32_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen); #define base32_decode(in, inlen, out, outlen) \ base32_decode_ctx (NULL, in, inlen, out, outlen) #define base32_decode_alloc(in, inlen, out, outlen) \ base32_decode_alloc_ctx (NULL, in, inlen, out, outlen) #endif /* BASE32_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/base64.c����������������������������������������������������������������0000664�0000000�0000000�00000047705�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 2009-2021 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 Simon Josefsson. Partially adapted from GNU MailUtils * (mailbox/filter_trans.c, as of 2004-11-28). Improved by review * from Paul Eggert, Bruno Haible, and Stepan Kasal. * * See also RFC 4648 <https://www.ietf.org/rfc/rfc4648.txt>. * * Be careful with error checking. Here is how you would typically * use these functions: * * bool ok = base64_decode_alloc (in, inlen, &out, &outlen); * if (!ok) * FAIL: input was not valid base64 * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN * * size_t outlen = base64_encode_alloc (in, inlen, &out); * if (out == NULL && outlen == 0 && inlen != 0) * FAIL: input too long * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN. * */ #include <config.h> /* Get prototype. */ #include "base64.h" /* Get malloc. */ #include <stdlib.h> /* Get UCHAR_MAX. */ #include <limits.h> #include <string.h> /* C89 compliant way to cast 'char' to 'unsigned char'. */ static unsigned char to_uchar (char ch) { return ch; } static const char b64c[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* Base64 encode IN array of size INLEN into OUT array. OUT needs to be of length >= BASE64_LENGTH(INLEN), and INLEN needs to be a multiple of 3. */ static void base64_encode_fast (const char *restrict in, size_t inlen, char *restrict out) { while (inlen) { *out++ = b64c[(to_uchar (in[0]) >> 2) & 0x3f]; *out++ = b64c[((to_uchar (in[0]) << 4) + (to_uchar (in[1]) >> 4)) & 0x3f]; *out++ = b64c[((to_uchar (in[1]) << 2) + (to_uchar (in[2]) >> 6)) & 0x3f]; *out++ = b64c[to_uchar (in[2]) & 0x3f]; inlen -= 3; in += 3; } } /* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero terminate the output buffer. */ void base64_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen) { /* Note this outlen constraint can be enforced at compile time. I.E. that the output buffer is exactly large enough to hold the encoded inlen bytes. The inlen constraints (of corresponding to outlen, and being a multiple of 3) can change at runtime at the end of input. However the common case when reading large inputs is to have both constraints satisfied, so we depend on both in base_encode_fast(). */ if (outlen % 4 == 0 && inlen == outlen / 4 * 3) { base64_encode_fast (in, inlen, out); return; } while (inlen && outlen) { *out++ = b64c[(to_uchar (in[0]) >> 2) & 0x3f]; if (!--outlen) break; *out++ = b64c[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f]; if (!--outlen) break; *out++ = (inlen ? b64c[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '='); if (!--outlen) break; *out++ = inlen ? b64c[to_uchar (in[2]) & 0x3f] : '='; if (!--outlen) break; if (inlen) inlen--; if (inlen) in += 3; } if (outlen) *out = '\0'; } /* Allocate a buffer and store zero terminated base64 encoded data from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e., the length of the encoded data, excluding the terminating zero. On return, the OUT variable will hold a pointer to newly allocated memory that must be deallocated by the caller. If output string length would overflow, 0 is returned and OUT is set to NULL. If memory allocation failed, OUT is set to NULL, and the return value indicates length of the requested memory block, i.e., BASE64_LENGTH(inlen) + 1. */ size_t base64_encode_alloc (const char *in, size_t inlen, char **out) { size_t outlen = 1 + BASE64_LENGTH (inlen); /* Check for overflow in outlen computation. * * If there is no overflow, outlen >= inlen. * * If the operation (inlen + 2) overflows then it yields at most +1, so * outlen is 0. * * If the multiplication overflows, we lose at least half of the * correct value, so the result is < ((inlen + 2) / 3) * 2, which is * less than (inlen + 2) * 0.66667, which is less than inlen as soon as * (inlen > 4). */ if (inlen > outlen) { *out = NULL; return 0; } *out = malloc (outlen); if (!*out) return outlen; base64_encode (in, inlen, *out, outlen); return outlen - 1; } /* With this approach this file works independent of the charset used (think EBCDIC). However, it does assume that the characters in the Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255. POSIX 1003.1-2001 require that char and unsigned char are 8-bit quantities, though, taking care of that problem. But this may be a potential problem on non-POSIX C99 platforms. IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_" as the formal parameter rather than "x". */ #define B64(_) \ ((_) == 'A' ? 0 \ : (_) == 'B' ? 1 \ : (_) == 'C' ? 2 \ : (_) == 'D' ? 3 \ : (_) == 'E' ? 4 \ : (_) == 'F' ? 5 \ : (_) == 'G' ? 6 \ : (_) == 'H' ? 7 \ : (_) == 'I' ? 8 \ : (_) == 'J' ? 9 \ : (_) == 'K' ? 10 \ : (_) == 'L' ? 11 \ : (_) == 'M' ? 12 \ : (_) == 'N' ? 13 \ : (_) == 'O' ? 14 \ : (_) == 'P' ? 15 \ : (_) == 'Q' ? 16 \ : (_) == 'R' ? 17 \ : (_) == 'S' ? 18 \ : (_) == 'T' ? 19 \ : (_) == 'U' ? 20 \ : (_) == 'V' ? 21 \ : (_) == 'W' ? 22 \ : (_) == 'X' ? 23 \ : (_) == 'Y' ? 24 \ : (_) == 'Z' ? 25 \ : (_) == 'a' ? 26 \ : (_) == 'b' ? 27 \ : (_) == 'c' ? 28 \ : (_) == 'd' ? 29 \ : (_) == 'e' ? 30 \ : (_) == 'f' ? 31 \ : (_) == 'g' ? 32 \ : (_) == 'h' ? 33 \ : (_) == 'i' ? 34 \ : (_) == 'j' ? 35 \ : (_) == 'k' ? 36 \ : (_) == 'l' ? 37 \ : (_) == 'm' ? 38 \ : (_) == 'n' ? 39 \ : (_) == 'o' ? 40 \ : (_) == 'p' ? 41 \ : (_) == 'q' ? 42 \ : (_) == 'r' ? 43 \ : (_) == 's' ? 44 \ : (_) == 't' ? 45 \ : (_) == 'u' ? 46 \ : (_) == 'v' ? 47 \ : (_) == 'w' ? 48 \ : (_) == 'x' ? 49 \ : (_) == 'y' ? 50 \ : (_) == 'z' ? 51 \ : (_) == '0' ? 52 \ : (_) == '1' ? 53 \ : (_) == '2' ? 54 \ : (_) == '3' ? 55 \ : (_) == '4' ? 56 \ : (_) == '5' ? 57 \ : (_) == '6' ? 58 \ : (_) == '7' ? 59 \ : (_) == '8' ? 60 \ : (_) == '9' ? 61 \ : (_) == '+' ? 62 \ : (_) == '/' ? 63 \ : -1) static const signed char b64[0x100] = { B64 (0), B64 (1), B64 (2), B64 (3), B64 (4), B64 (5), B64 (6), B64 (7), B64 (8), B64 (9), B64 (10), B64 (11), B64 (12), B64 (13), B64 (14), B64 (15), B64 (16), B64 (17), B64 (18), B64 (19), B64 (20), B64 (21), B64 (22), B64 (23), B64 (24), B64 (25), B64 (26), B64 (27), B64 (28), B64 (29), B64 (30), B64 (31), B64 (32), B64 (33), B64 (34), B64 (35), B64 (36), B64 (37), B64 (38), B64 (39), B64 (40), B64 (41), B64 (42), B64 (43), B64 (44), B64 (45), B64 (46), B64 (47), B64 (48), B64 (49), B64 (50), B64 (51), B64 (52), B64 (53), B64 (54), B64 (55), B64 (56), B64 (57), B64 (58), B64 (59), B64 (60), B64 (61), B64 (62), B64 (63), B64 (64), B64 (65), B64 (66), B64 (67), B64 (68), B64 (69), B64 (70), B64 (71), B64 (72), B64 (73), B64 (74), B64 (75), B64 (76), B64 (77), B64 (78), B64 (79), B64 (80), B64 (81), B64 (82), B64 (83), B64 (84), B64 (85), B64 (86), B64 (87), B64 (88), B64 (89), B64 (90), B64 (91), B64 (92), B64 (93), B64 (94), B64 (95), B64 (96), B64 (97), B64 (98), B64 (99), B64 (100), B64 (101), B64 (102), B64 (103), B64 (104), B64 (105), B64 (106), B64 (107), B64 (108), B64 (109), B64 (110), B64 (111), B64 (112), B64 (113), B64 (114), B64 (115), B64 (116), B64 (117), B64 (118), B64 (119), B64 (120), B64 (121), B64 (122), B64 (123), B64 (124), B64 (125), B64 (126), B64 (127), B64 (128), B64 (129), B64 (130), B64 (131), B64 (132), B64 (133), B64 (134), B64 (135), B64 (136), B64 (137), B64 (138), B64 (139), B64 (140), B64 (141), B64 (142), B64 (143), B64 (144), B64 (145), B64 (146), B64 (147), B64 (148), B64 (149), B64 (150), B64 (151), B64 (152), B64 (153), B64 (154), B64 (155), B64 (156), B64 (157), B64 (158), B64 (159), B64 (160), B64 (161), B64 (162), B64 (163), B64 (164), B64 (165), B64 (166), B64 (167), B64 (168), B64 (169), B64 (170), B64 (171), B64 (172), B64 (173), B64 (174), B64 (175), B64 (176), B64 (177), B64 (178), B64 (179), B64 (180), B64 (181), B64 (182), B64 (183), B64 (184), B64 (185), B64 (186), B64 (187), B64 (188), B64 (189), B64 (190), B64 (191), B64 (192), B64 (193), B64 (194), B64 (195), B64 (196), B64 (197), B64 (198), B64 (199), B64 (200), B64 (201), B64 (202), B64 (203), B64 (204), B64 (205), B64 (206), B64 (207), B64 (208), B64 (209), B64 (210), B64 (211), B64 (212), B64 (213), B64 (214), B64 (215), B64 (216), B64 (217), B64 (218), B64 (219), B64 (220), B64 (221), B64 (222), B64 (223), B64 (224), B64 (225), B64 (226), B64 (227), B64 (228), B64 (229), B64 (230), B64 (231), B64 (232), B64 (233), B64 (234), B64 (235), B64 (236), B64 (237), B64 (238), B64 (239), B64 (240), B64 (241), B64 (242), B64 (243), B64 (244), B64 (245), B64 (246), B64 (247), B64 (248), B64 (249), B64 (250), B64 (251), B64 (252), B64 (253), B64 (254), B64 (255) }; #if UCHAR_MAX == 255 # define uchar_in_range(c) true #else # define uchar_in_range(c) ((c) <= 255) #endif /* Return true if CH is a character from the Base64 alphabet, and false otherwise. Note that '=' is padding and not considered to be part of the alphabet. */ bool isbase64 (char ch) { return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)]; } /* Initialize decode-context buffer, CTX. */ void base64_decode_ctx_init (struct base64_decode_context *ctx) { ctx->i = 0; } /* If CTX->i is 0 or 4, there are four or more bytes in [*IN..IN_END), and none of those four is a newline, then return *IN. Otherwise, copy up to 4 - CTX->i non-newline bytes from that range into CTX->buf, starting at index CTX->i and setting CTX->i to reflect the number of bytes copied, and return CTX->buf. In either case, advance *IN to point to the byte after the last one processed, and set *N_NON_NEWLINE to the number of verified non-newline bytes accessible through the returned pointer. */ static char * get_4 (struct base64_decode_context *ctx, char const *restrict *in, char const *restrict in_end, size_t *n_non_newline) { if (ctx->i == 4) ctx->i = 0; if (ctx->i == 0) { char const *t = *in; if (4 <= in_end - *in && memchr (t, '\n', 4) == NULL) { /* This is the common case: no newline. */ *in += 4; *n_non_newline = 4; return (char *) t; } } { /* Copy non-newline bytes into BUF. */ char const *p = *in; while (p < in_end) { char c = *p++; if (c != '\n') { ctx->buf[ctx->i++] = c; if (ctx->i == 4) break; } } *in = p; *n_non_newline = ctx->i; return ctx->buf; } } #define return_false \ do \ { \ *outp = out; \ return false; \ } \ while (false) /* Decode up to four bytes of base64-encoded data, IN, of length INLEN into the output buffer, *OUT, of size *OUTLEN bytes. Return true if decoding is successful, false otherwise. If *OUTLEN is too small, as many bytes as possible are written to *OUT. On return, advance *OUT to point to the byte after the last one written, and decrement *OUTLEN to reflect the number of bytes remaining in *OUT. */ static bool decode_4 (char const *restrict in, size_t inlen, char *restrict *outp, size_t *outleft) { char *out = *outp; if (inlen < 2) return false; if (!isbase64 (in[0]) || !isbase64 (in[1])) return false; if (*outleft) { *out++ = ((b64[to_uchar (in[0])] << 2) | (b64[to_uchar (in[1])] >> 4)); --*outleft; } if (inlen == 2) return_false; if (in[2] == '=') { if (inlen != 4) return_false; if (in[3] != '=') return_false; } else { if (!isbase64 (in[2])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0) | (b64[to_uchar (in[2])] >> 2)); --*outleft; } if (inlen == 3) return_false; if (in[3] == '=') { if (inlen != 4) return_false; } else { if (!isbase64 (in[3])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0) | b64[to_uchar (in[3])]); --*outleft; } } } *outp = out; return true; } /* Decode base64-encoded input array IN of length INLEN to output array OUT that can hold *OUTLEN bytes. The input data may be interspersed with newlines. Return true if decoding was successful, i.e. if the input was valid base64 data, false otherwise. If *OUTLEN is too small, as many bytes as possible will be written to OUT. On return, *OUTLEN holds the length of decoded bytes in OUT. Note that as soon as any non-alphabet, non-newline character is encountered, decoding is stopped and false is returned. If INLEN is zero, then process only whatever data is stored in CTX. Initially, CTX must have been initialized via base64_decode_ctx_init. Subsequent calls to this function must reuse whatever state is recorded in that buffer. It is necessary for when a quadruple of base64 input bytes spans two input buffers. If CTX is NULL then newlines are treated as garbage and the input buffer is processed as a unit. */ bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen) { size_t outleft = *outlen; bool ignore_newlines = ctx != NULL; bool flush_ctx = false; unsigned int ctx_i = 0; if (ignore_newlines) { ctx_i = ctx->i; flush_ctx = inlen == 0; } while (true) { size_t outleft_save = outleft; if (ctx_i == 0 && !flush_ctx) { while (true) { /* Save a copy of outleft, in case we need to re-parse this block of four bytes. */ outleft_save = outleft; if (!decode_4 (in, inlen, &out, &outleft)) break; in += 4; inlen -= 4; } } if (inlen == 0 && !flush_ctx) break; /* Handle the common case of 72-byte wrapped lines. This also handles any other multiple-of-4-byte wrapping. */ if (inlen && *in == '\n' && ignore_newlines) { ++in; --inlen; continue; } /* Restore OUT and OUTLEFT. */ out -= outleft_save - outleft; outleft = outleft_save; { char const *in_end = in + inlen; char const *non_nl; if (ignore_newlines) non_nl = get_4 (ctx, &in, in_end, &inlen); else non_nl = in; /* Might have nl in this case. */ /* If the input is empty or consists solely of newlines (0 non-newlines), then we're done. Likewise if there are fewer than 4 bytes when not flushing context and not treating newlines as garbage. */ if (inlen == 0 || (inlen < 4 && !flush_ctx && ignore_newlines)) { inlen = 0; break; } if (!decode_4 (non_nl, inlen, &out, &outleft)) break; inlen = in_end - in; } } *outlen -= outleft; return inlen == 0; } /* Allocate an output buffer in *OUT, and decode the base64 encoded data stored in IN of size INLEN to the *OUT buffer. On return, the size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL, if the caller is not interested in the decoded length. *OUT may be NULL to indicate an out of memory error, in which case *OUTLEN contains the size of the memory block needed. The function returns true on successful decoding and memory allocation errors. (Use the *OUT and *OUTLEN parameters to differentiate between successful decoding and memory error.) The function returns false if the input was invalid, in which case *OUT is NULL and *OUTLEN is undefined. */ bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen) { /* This may allocate a few bytes too many, depending on input, but it's not worth the extra CPU time to compute the exact size. The exact size is 3 * (inlen + (ctx ? ctx->i : 0)) / 4, minus 1 if the input ends with "=" and minus another 1 if the input ends with "==". Dividing before multiplying avoids the possibility of overflow. */ size_t needlen = 3 * (inlen / 4) + 3; *out = malloc (needlen); if (!*out) return true; if (!base64_decode_ctx (ctx, in, inlen, *out, &needlen)) { free (*out); *out = NULL; return false; } if (outlen) *outlen = needlen; return true; } �����������������������������������������������������������gnulib-20210822~d383792/lib/base64.h����������������������������������������������������������������0000664�0000000�0000000�00000004306�14110572173�0016305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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 BASE64_H # define BASE64_H /* Get size_t. */ # include <stddef.h> /* Get bool. */ # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif /* This uses that the expression (n+(k-1))/k means the smallest integer >= n/k, i.e., the ceiling of n/k. */ # define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4) struct base64_decode_context { unsigned int i; char buf[4]; }; extern bool isbase64 (char ch) _GL_ATTRIBUTE_CONST; extern void base64_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen); extern size_t base64_encode_alloc (const char *in, size_t inlen, char **out); extern void base64_decode_ctx_init (struct base64_decode_context *ctx); extern bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen); extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen); #define base64_decode(in, inlen, out, outlen) \ base64_decode_ctx (NULL, in, inlen, out, outlen) #define base64_decode_alloc(in, inlen, out, outlen) \ base64_decode_alloc_ctx (NULL, in, inlen, out, outlen) # ifdef __cplusplus } # endif #endif /* BASE64_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/basename-lgpl.c���������������������������������������������������������0000664�0000000�0000000�00000003465�14110572173�0017730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "basename-lgpl.h" #include <stdbool.h> #include <string.h> #include "filename.h" char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool last_was_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) last_was_slash = true; else if (last_was_slash) { base = p; last_was_slash = false; } } return (char *) base; } size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/basename-lgpl.h���������������������������������������������������������0000664�0000000�0000000�00000005324�14110572173�0017731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extract the last component (base name) of a file name. Copyright (C) 1998, 2001, 2003-2006, 2009-2021 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/>. */ #ifndef _BASENAME_LGPL_H #define _BASENAME_LGPL_H #include <stddef.h> #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #ifdef __cplusplus extern "C" { #endif /* Return the address of the last file name component of FILENAME. If FILENAME has some trailing slash(es), they are considered to be part of the last component. If FILENAME has no relative file name components because it is a file system root, return the empty string. Examples: FILENAME RESULT "foo.c" "foo.c" "foo/bar.c" "bar.c" "/foo/bar.c" "bar.c" "foo/bar/" "bar/" "foo/bar//" "bar//" "/" "" "//" "" "" "" The return value is a tail of the given FILENAME; do NOT free() it! */ /* This function was traditionally called 'basename', but we avoid this function name because * Various platforms have different functions in their libc. In particular, the glibc basename(), defined in <string.h>, does not consider trailing slashes to be part of the component: FILENAME RESULT "foo/bar/" "" "foo/bar//" "" * The 'basename' command eliminates trailing slashes and for a root produces a non-empty result: FILENAME RESULT "foo/bar/" "bar" "foo/bar//" "bar" "/" "/" "//" "/" */ extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; /* Return the length of the basename FILENAME. Typically FILENAME is the value returned by base_name or last_component. Act like strlen (FILENAME), except omit all trailing slashes. */ extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _BASENAME_LGPL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/basename.c��������������������������������������������������������������0000664�0000000�0000000�00000003525�14110572173�0016771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 "dirname.h" #include <string.h> #include "xalloc.h" char * base_name (char const *name) { char const *base = last_component (name); idx_t length; int dotslash_len; if (*base) { length = base_len (base); /* Collapse a sequence of trailing slashes into one. */ length += ISSLASH (base[length]); /* On systems with drive letters, "a/b:c" must return "./b:c" rather than "b:c" to avoid confusion with a drive letter. On systems with pure POSIX semantics, this is not an issue. */ dotslash_len = FILE_SYSTEM_PREFIX_LEN (base) != 0 ? 2 : 0; } else { /* There is no last component, so NAME is a file system root or the empty string. */ base = name; length = base_len (base); dotslash_len = 0; } char *p = ximalloc (dotslash_len + length + 1); if (dotslash_len) { p[0] = '.'; p[1] = '/'; } /* Finally, copy the basename. */ memcpy (p + dotslash_len, base, length); p[dotslash_len + length] = '\0'; return p; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bcopy.c�����������������������������������������������������������������0000664�0000000�0000000�00000002462�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bcopy.c -- copy memory. Copyright (C) 1992-2021 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/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include <stddef.h> /* Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. */ void bcopy (void const *source0, void *dest0, size_t length) { char const *source = source0; char *dest = dest0; if (source < dest) /* Moving from low mem to hi mem; start at end. */ for (source += length, dest += length; length; --length) *--dest = *--source; else if (source != dest) /* Moving from hi mem to low mem; start at beginning. */ for (; length; --length) *dest++ = *source++; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/binary-io.c�������������������������������������������������������������0000664�0000000�0000000�00000002500�14110572173�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright 2017-2021 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/>. */ #include <config.h> #define BINARY_IO_INLINE _GL_EXTERN_INLINE #include "binary-io.h" #if defined __DJGPP__ || defined __EMX__ # include <unistd.h> int set_binary_mode (int fd, int mode) { if (isatty (fd)) /* If FD refers to a console (not a pipe, not a regular file), O_TEXT is the only reasonable mode, both on input and on output. Silently ignore the request. If we were to return -1 here, all programs that use xset_binary_mode would fail when run with console input or console output. */ return O_TEXT; else return __gl_setmode (fd, mode); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/binary-io.h�������������������������������������������������������������0000664�0000000�0000000�00000004620�14110572173�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright (C) 2001, 2003, 2005, 2008-2021 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/>. */ #ifndef _BINARY_H #define _BINARY_H /* For systems that distinguish between text and binary I/O. O_BINARY is guaranteed by the gnulib <fcntl.h>. */ #include <fcntl.h> /* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...', 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 #endif #if O_BINARY # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ # include <io.h> /* declares setmode() */ # define __gl_setmode setmode # else # define __gl_setmode _setmode # undef fileno # define fileno _fileno # endif #else /* On reasonable systems, binary I/O is the only choice. */ /* Use a function rather than a macro, to avoid gcc warnings "warning: statement with no effect". */ BINARY_IO_INLINE int __gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return O_BINARY; } #endif /* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. Return the old mode if successful, -1 (setting errno) on failure. Ordinarily this function would be called 'setmode', since that is its old name on MS-Windows, but it is called 'set_binary_mode' here to avoid colliding with a BSD function of another name. */ #if defined __DJGPP__ || defined __EMX__ extern int set_binary_mode (int fd, int mode); #else BINARY_IO_INLINE int set_binary_mode (int fd, int mode) { return __gl_setmode (fd, mode); } #endif /* This macro is obsolescent. */ #define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) _GL_INLINE_HEADER_END #endif /* _BINARY_H */ ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bind.c������������������������������������������������������������������0000664�0000000�0000000�00000002423�14110572173�0016126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bind.c --- wrappers for Windows bind function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef bind int rpl_bind (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = bind (sock, sockaddr, len); if (r < 0) set_winsock_errno (); return r; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitrotate.c�������������������������������������������������������������0000664�0000000�0000000�00000001510�14110572173�0017203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rotate bits in integers. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define BITROTATE_INLINE _GL_EXTERN_INLINE #include "bitrotate.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitrotate.h�������������������������������������������������������������0000664�0000000�0000000�00000011030�14110572173�0017206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bitrotate.h - Rotate bits in integers Copyright (C) 2008-2021 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #ifndef _GL_BITROTATE_H #define _GL_BITROTATE_H #include <limits.h> #include <stdint.h> #include <sys/types.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef BITROTATE_INLINE # define BITROTATE_INLINE _GL_INLINE #endif #ifdef UINT64_MAX /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 63 inclusive. */ BITROTATE_INLINE uint64_t rotl64 (uint64_t x, int n) { return ((x << n) | (x >> (64 - n))) & UINT64_MAX; } /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 63 inclusive.*/ BITROTATE_INLINE uint64_t rotr64 (uint64_t x, int n) { return ((x >> n) | (x << (64 - n))) & UINT64_MAX; } #endif /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 31 inclusive. */ BITROTATE_INLINE uint32_t rotl32 (uint32_t x, int n) { return ((x << n) | (x >> (32 - n))) & UINT32_MAX; } /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 31 inclusive.*/ BITROTATE_INLINE uint32_t rotr32 (uint32_t x, int n) { return ((x >> n) | (x << (32 - n))) & UINT32_MAX; } /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ BITROTATE_INLINE size_t rotl_sz (size_t x, int n) { return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; } /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ BITROTATE_INLINE size_t rotr_sz (size_t x, int n) { return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; } /* Given an unsigned 16-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 to 15 inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint16_t rotl16 (uint16_t x, int n) { return (((unsigned int) x << n) | ((unsigned int) x >> (16 - n))) & UINT16_MAX; } /* Given an unsigned 16-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be in 1 to 15 inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint16_t rotr16 (uint16_t x, int n) { return (((unsigned int) x >> n) | ((unsigned int) x << (16 - n))) & UINT16_MAX; } /* Given an unsigned 8-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 to 7 inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint8_t rotl8 (uint8_t x, int n) { return (((unsigned int) x << n) | ((unsigned int) x >> (8 - n))) & UINT8_MAX; } /* Given an unsigned 8-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be in 1 to 7 inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint8_t rotr8 (uint8_t x, int n) { return (((unsigned int) x >> n) | ((unsigned int) x << (8 - n))) & UINT8_MAX; } _GL_INLINE_HEADER_END #endif /* _GL_BITROTATE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset.c����������������������������������������������������������������0000664�0000000�0000000�00000024103�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* General bitsets. Copyright (C) 2002-2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 "bitset.h" #include <stdlib.h> #include <string.h> #include "obstack.h" #include "bitset/array.h" #include "bitset/list.h" #include "bitset/stats.h" #include "bitset/table.h" #include "bitset/vector.h" const char * const bitset_type_names[] = BITSET_TYPE_NAMES; /* Return number of bytes required to create a N_BIT bitset of TYPE. The bitset may grow to require more bytes than this. */ size_t bitset_bytes (enum bitset_type type, bitset_bindex n_bits) { if (bitset_stats_enabled) return bitset_stats_bytes (); switch (type) { default: abort (); case BITSET_ARRAY: return abitset_bytes (n_bits); case BITSET_LIST: return lbitset_bytes (n_bits); case BITSET_TABLE: return tbitset_bytes (n_bits); case BITSET_VECTOR: return vbitset_bytes (n_bits); } } /* Initialise bitset BSET of TYPE for N_BITS. */ bitset bitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type) { if (bitset_stats_enabled) return bitset_stats_init (bset, n_bits, type); switch (type) { default: abort (); case BITSET_ARRAY: return abitset_init (bset, n_bits); case BITSET_LIST: return lbitset_init (bset, n_bits); case BITSET_TABLE: return tbitset_init (bset, n_bits); case BITSET_VECTOR: return vbitset_init (bset, n_bits); } } /* Select a bitset type for a set of N_BITS and with attribute hints specified by ATTR. For variable size bitsets, N_BITS is only a hint and may be zero. */ enum bitset_type bitset_type_choose (MAYBE_UNUSED bitset_bindex n_bits, unsigned attr) { /* Check attributes. */ if (attr & BITSET_FIXED && attr & BITSET_VARIABLE) abort (); if (attr & BITSET_SPARSE && attr & BITSET_DENSE) abort (); /* Choose the type of bitset. Note that sometimes we will be asked for a zero length fixed size bitset. */ /* If no attributes selected, choose a good compromise. */ if (!attr) return BITSET_VECTOR; if (attr & BITSET_SPARSE) return BITSET_LIST; if (attr & BITSET_FIXED) return BITSET_ARRAY; if (attr & BITSET_GREEDY) return BITSET_TABLE; return BITSET_VECTOR; } /* Create a bitset of N_BITS of type TYPE. */ bitset bitset_alloc (bitset_bindex n_bits, enum bitset_type type) { size_t bytes = bitset_bytes (type, n_bits); bitset bset = xzalloc (bytes); /* The cache is disabled until some elements are allocated. If we have variable length arrays, then we may need to allocate a dummy element. */ return bitset_init (bset, n_bits, type); } /* Create a bitset of N_BITS of type TYPE. */ bitset bitset_obstack_alloc (struct obstack *bobstack, bitset_bindex n_bits, enum bitset_type type) { size_t bytes = bitset_bytes (type, n_bits); bitset bset = obstack_alloc (bobstack, bytes); memset (bset, 0, bytes); return bitset_init (bset, n_bits, type); } /* Create a bitset of N_BITS and with attribute hints specified by ATTR. */ bitset bitset_create (bitset_bindex n_bits, unsigned attr) { enum bitset_type type = bitset_type_choose (n_bits, attr); return bitset_alloc (n_bits, type); } /* Free bitset BSET. */ void bitset_free (bitset bset) { if (bset) { BITSET_FREE_ (bset); free (bset); } } /* Free bitset BSET allocated on obstack. */ void bitset_obstack_free (bitset bset) { if (bset) BITSET_FREE_ (bset); } /* Return bitset type. */ enum bitset_type bitset_type_get (bitset bset) { enum bitset_type type = BITSET_TYPE_ (bset); if (type != BITSET_STATS) return type; return bitset_stats_type_get (bset); } /* Return name of bitset type. */ const char * bitset_type_name_get (bitset bset) { enum bitset_type type = bitset_type_get (bset); return bitset_type_names[type]; } bitset_bindex bitset_next (bitset src, bitset_bindex bitno) { bitset_bindex next = bitno; bitset_bindex val; if (!bitset_list (src, &val, 1, &next)) return BITSET_BINDEX_MAX; return val; } /* Return true if both bitsets are of the same type and size. */ extern bool bitset_compatible_p (bitset bset1, bitset bset2) { return BITSET_COMPATIBLE_ (bset1, bset2); } bitset_bindex bitset_prev (bitset src, bitset_bindex bitno) { bitset_bindex next = bitno; bitset_bindex val; if (!bitset_list_reverse (src, &val, 1, &next)) return BITSET_BINDEX_MAX; return val; } /* Find first set bit. */ bitset_bindex bitset_first (bitset src) { return bitset_next (src, 0); } /* Find last set bit. */ bitset_bindex bitset_last (bitset src) { return bitset_prev (src, 0); } /* Is BITNO in SRC the only set bit? */ bool bitset_only_set_p (bitset src, bitset_bindex bitno) { bitset_bindex val[2]; bitset_bindex next = 0; if (bitset_list (src, val, 2, &next) != 1) return false; return val[0] == bitno; } /* Print contents of bitset BSET to FILE. */ static void bitset_print (FILE *file, bitset bset, bool verbose) { if (verbose) fprintf (file, "%s{n_bits = %lu, set = {", bitset_type_name_get (bset), (unsigned long) bitset_size (bset)); unsigned pos = 30; bitset_bindex i; bitset_iterator iter; BITSET_FOR_EACH (iter, bset, i, 0) { if (pos > 70) { fprintf (file, "\n"); pos = 0; } fprintf (file, "%lu ", (unsigned long) i); pos += 1 + (i >= 10) + (i >= 100); } if (verbose) fprintf (file, "}}\n"); } /* Dump bitset BSET to FILE. */ void bitset_dump (FILE *file, bitset bset) { bitset_print (file, bset, false); } /* Release memory associated with bitsets. */ void bitset_release_memory (void) { lbitset_release_memory (); tbitset_release_memory (); } /* Toggle bit BITNO in bitset BSET and the new value of the bit. */ bool bitset_toggle_ (bitset bset, bitset_bindex bitno) { /* This routine is for completeness. It could be optimized if required. */ if (bitset_test (bset, bitno)) { bitset_reset (bset, bitno); return false; } else { bitset_set (bset, bitno); return true; } } /* Return number of bits in bitset SRC. */ bitset_bindex bitset_size_ (bitset src) { return BITSET_NBITS_ (src); } /* Return number of bits set in bitset SRC. */ bitset_bindex bitset_count_ (bitset src) { bitset_bindex list[BITSET_LIST_SIZE]; bitset_bindex count = 0; /* This could be greatly sped up by adding a count method for each bitset implementation that uses a direct technique (based on masks) for counting the number of bits set in a word. */ { bitset_bindex next = 0; bitset_bindex num; while ((num = bitset_list (src, list, BITSET_LIST_SIZE, &next))) count += num; } return count; } /* DST = SRC. Return true if DST != SRC. This is a fallback for the case where SRC and DST are different bitset types. */ bool bitset_copy_ (bitset dst, bitset src) { bitset_bindex i; bitset_iterator iter; /* Convert bitset types. We assume that the DST bitset is large enough to hold the SRC bitset. */ bitset_zero (dst); BITSET_FOR_EACH (iter, src, i, 0) bitset_set (dst, i); return true; } /* This is a fallback for implementations that do not support four operand operations. */ static inline bool bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3, enum bitset_ops op) { bool changed = false; /* Create temporary bitset. */ bool stats_enabled_save = bitset_stats_enabled; bitset_stats_enabled = false; bitset tmp = bitset_alloc (0, bitset_type_get (dst)); bitset_stats_enabled = stats_enabled_save; switch (op) { default: abort (); case BITSET_OP_OR_AND: bitset_or (tmp, src1, src2); changed = bitset_and_cmp (dst, src3, tmp); break; case BITSET_OP_AND_OR: bitset_and (tmp, src1, src2); changed = bitset_or_cmp (dst, src3, tmp); break; case BITSET_OP_ANDN_OR: bitset_andn (tmp, src1, src2); changed = bitset_or_cmp (dst, src3, tmp); break; } bitset_free (tmp); return changed; } /* DST = (SRC1 & SRC2) | SRC3. */ void bitset_and_or_ (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_and_or_cmp_ (dst, src1, src2, src3); } /* DST = (SRC1 & SRC2) | SRC3. Return non-zero if DST != (SRC1 & SRC2) | SRC3. */ bool bitset_and_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) { return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_AND_OR); } /* DST = (SRC1 & ~SRC2) | SRC3. */ void bitset_andn_or_ (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_andn_or_cmp_ (dst, src1, src2, src3); } /* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if DST != (SRC1 & ~SRC2) | SRC3. */ bool bitset_andn_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) { return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_ANDN_OR); } /* DST = (SRC1 | SRC2) & SRC3. */ void bitset_or_and_ (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_or_and_cmp_ (dst, src1, src2, src3); } /* DST = (SRC1 | SRC2) & SRC3. Return non-zero if DST != (SRC1 | SRC2) & SRC3. */ bool bitset_or_and_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) { return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND); } /* Function to be called from debugger to print bitset. */ void debug_bitset (bitset bset) { if (bset) bitset_print (stderr, bset, true); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset.h����������������������������������������������������������������0000664�0000000�0000000�00000031574�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generic bitsets. Copyright (C) 2002-2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _GL_BITSET_H #define _GL_BITSET_H /* This file is the public interface to the bitset abstract data type. Only use the functions and macros defined in this file. */ #include <stdio.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include "bitset/base.h" #include "obstack.h" /* Attributes used to select a bitset implementation. */ enum bitset_attr {BITSET_FIXED = 1, /* Bitset size fixed. */ BITSET_VARIABLE = 2, /* Bitset size variable. */ BITSET_DENSE = 4, /* Bitset dense. */ BITSET_SPARSE = 8, /* Bitset sparse. */ BITSET_FRUGAL = 16, /* Prefer most compact. */ BITSET_GREEDY = 32}; /* Prefer fastest at memory expense. */ typedef unsigned bitset_attrs; /* The contents of the union should be considered to be private. While I would like to make this union opaque, it needs to be visible for the inline bit set/test functions, and for delegation to the proper implementation. */ union bitset_union { /* This must be the first member of every other structure that is a member of this union. */ struct bbitset_struct b; /* Base bitset data. */ struct abitset_struct { struct bbitset_struct b; bitset_word words[1]; /* The array of bits. */ } a; struct tbitset_struct { struct bbitset_struct b; bitset_windex size; /* Number of elements. */ struct tbitset_elt_struct **elts; /* Expanding array of ptrs to elts. */ } e; struct lbitset_struct { struct bbitset_struct b; struct lbitset_elt_struct *head; /* First element in linked list. */ struct lbitset_elt_struct *tail; /* Last element in linked list. */ } l; struct bitset_stats_struct { struct bbitset_struct b; bitset bset; } s; struct vbitset_struct { struct bbitset_struct b; bitset_windex size; /* Allocated size of array. */ } v; }; /* The contents of this structure should be considered private. It is used for iterating over set bits. */ typedef struct { bitset_bindex list[BITSET_LIST_SIZE]; bitset_bindex next; bitset_bindex num; bitset_bindex i; } bitset_iterator; /* Free bitset. Do nothing if NULL. */ void bitset_free (bitset); /* Return bytes required for bitset of desired type and size. */ size_t bitset_bytes (enum bitset_type, bitset_bindex); /* Initialise a bitset with desired type and size. */ bitset bitset_init (bitset, bitset_bindex, enum bitset_type); /* Select an implementation type based on the desired bitset size and attributes. */ enum bitset_type bitset_type_choose (bitset_bindex, bitset_attrs); /* Create a bitset of desired type and size. The bitset is zeroed. */ bitset bitset_alloc (bitset_bindex, enum bitset_type) _GL_ATTRIBUTE_DEALLOC (bitset_free, 1); /* Free bitset allocated on obstack. Do nothing if NULL. */ void bitset_obstack_free (bitset); /* Create a bitset of desired type and size using an obstack. The bitset is zeroed. */ bitset bitset_obstack_alloc (struct obstack *bobstack, bitset_bindex, enum bitset_type) _GL_ATTRIBUTE_DEALLOC (bitset_obstack_free, 1); /* Create a bitset of desired size and attributes. The bitset is zeroed. */ bitset bitset_create (bitset_bindex, bitset_attrs) _GL_ATTRIBUTE_DEALLOC (bitset_free, 1); /* Return bitset type. */ enum bitset_type bitset_type_get (bitset); /* Return bitset type name. */ const char *bitset_type_name_get (bitset); /* Set bit BITNO in bitset BSET. */ static inline void bitset_set (bitset bset, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; bitset_windex offset = windex - bset->b.cindex; if (offset < bset->b.csize) bset->b.cdata[offset] |= ((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); else BITSET_SET_ (bset, bitno); } /* Reset bit BITNO in bitset BSET. */ static inline void bitset_reset (bitset bset, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; bitset_windex offset = windex - bset->b.cindex; if (offset < bset->b.csize) bset->b.cdata[offset] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); else BITSET_RESET_ (bset, bitno); } /* Test bit BITNO in bitset BSET. */ static inline bool bitset_test (bitset bset, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; bitset_windex offset = windex - bset->b.cindex; if (offset < bset->b.csize) return (bset->b.cdata[offset] >> (bitno % BITSET_WORD_BITS)) & 1; else return BITSET_TEST_ (bset, bitno); } /* Toggle bit BITNO in bitset BSET and return non-zero if now set. */ #define bitset_toggle(bset, bitno) BITSET_TOGGLE_ (bset, bitno) /* Return size in bits of bitset SRC. */ #define bitset_size(SRC) BITSET_SIZE_ (SRC) /* Change size in bits of bitset. New bits are zeroed. Return SIZE. */ #define bitset_resize(DST, SIZE) BITSET_RESIZE_ (DST, SIZE) /* Return number of bits set in bitset SRC. */ #define bitset_count(SRC) BITSET_COUNT_ (SRC) /* Return SRC == 0. */ #define bitset_empty_p(SRC) BITSET_EMPTY_P_ (SRC) /* DST = ~0. */ #define bitset_ones(DST) BITSET_ONES_ (DST) /* DST = 0. */ #define bitset_zero(DST) BITSET_ZERO_ (DST) /* DST = SRC. */ #define bitset_copy(DST, SRC) BITSET_COPY_ (DST, SRC) /* Return DST & SRC == 0. */ #define bitset_disjoint_p(DST, SRC) BITSET_DISJOINT_P_ (DST, SRC) /* Return DST == SRC. */ #define bitset_equal_p(DST, SRC) BITSET_EQUAL_P_ (DST, SRC) /* DST = ~SRC. */ #define bitset_not(DST, SRC) BITSET_NOT_ (DST, SRC) /* Return DST == DST | SRC. */ #define bitset_subset_p(DST, SRC) BITSET_SUBSET_P_ (DST, SRC) /* DST = SRC1 & SRC2. */ #define bitset_and(DST, SRC1, SRC2) BITSET_AND_ (DST, SRC1, SRC2) /* DST = SRC1 & SRC2. Return non-zero if DST != SRC1 & SRC2. */ #define bitset_and_cmp(DST, SRC1, SRC2) BITSET_AND_CMP_ (DST, SRC1, SRC2) /* DST = SRC1 & ~SRC2. */ #define bitset_andn(DST, SRC1, SRC2) BITSET_ANDN_ (DST, SRC1, SRC2) /* DST = SRC1 & ~SRC2. Return non-zero if DST != SRC1 & ~SRC2. */ #define bitset_andn_cmp(DST, SRC1, SRC2) BITSET_ANDN_CMP_ (DST, SRC1, SRC2) /* DST = SRC1 | SRC2. */ #define bitset_or(DST, SRC1, SRC2) BITSET_OR_ (DST, SRC1, SRC2) /* DST = SRC1 | SRC2. Return non-zero if DST != SRC1 | SRC2. */ #define bitset_or_cmp(DST, SRC1, SRC2) BITSET_OR_CMP_ (DST, SRC1, SRC2) /* DST = SRC1 ^ SRC2. */ #define bitset_xor(DST, SRC1, SRC2) BITSET_XOR_ (DST, SRC1, SRC2) /* DST = SRC1 ^ SRC2. Return non-zero if DST != SRC1 ^ SRC2. */ #define bitset_xor_cmp(DST, SRC1, SRC2) BITSET_XOR_CMP_ (DST, SRC1, SRC2) /* DST = (SRC1 & SRC2) | SRC3. */ #define bitset_and_or(DST, SRC1, SRC2, SRC3) \ BITSET_AND_OR_ (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 & SRC2) | SRC3. Return non-zero if DST != (SRC1 & SRC2) | SRC3. */ #define bitset_and_or_cmp(DST, SRC1, SRC2, SRC3) \ BITSET_AND_OR_CMP_ (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 & ~SRC2) | SRC3. */ #define bitset_andn_or(DST, SRC1, SRC2, SRC3) \ BITSET_ANDN_OR_ (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if DST != (SRC1 & ~SRC2) | SRC3. */ #define bitset_andn_or_cmp(DST, SRC1, SRC2, SRC3) \ BITSET_ANDN_OR_CMP_ (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 | SRC2) & SRC3. */ #define bitset_or_and(DST, SRC1, SRC2, SRC3)\ BITSET_OR_AND_ (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 | SRC2) & SRC3. Return non-zero if DST != (SRC1 | SRC2) & SRC3. */ #define bitset_or_and_cmp(DST, SRC1, SRC2, SRC3)\ BITSET_OR_AND_CMP_ (DST, SRC1, SRC2, SRC3) /* Find list of up to NUM bits set in BSET starting from and including *NEXT. Return with actual number of bits found and with *NEXT indicating where search stopped. */ #define bitset_list(BSET, LIST, NUM, NEXT) \ BITSET_LIST_ (BSET, LIST, NUM, NEXT) /* Find reverse list of up to NUM bits set in BSET starting from and including NEXT. Return with actual number of bits found and with *NEXT indicating where search stopped. */ #define bitset_list_reverse(BSET, LIST, NUM, NEXT) \ BITSET_LIST_REVERSE_ (BSET, LIST, NUM, NEXT) /* Return true if both bitsets are of the same type and size. */ bool bitset_compatible_p (bitset bset1, bitset bset2); /* Find next bit set in SRC starting from and including BITNO. Return BITSET_BINDEX_MAX if SRC empty. */ bitset_bindex bitset_next (bitset src, bitset_bindex bitno); /* Find previous bit set in SRC starting from and including BITNO. Return BITSET_BINDEX_MAX if SRC empty. */ bitset_bindex bitset_prev (bitset src, bitset_bindex bitno); /* Find first set bit. Return BITSET_BINDEX_MAX if SRC empty. */ bitset_bindex bitset_first (bitset src); /* Find last set bit. Return BITSET_BINDEX_MAX if SRC empty. */ bitset_bindex bitset_last (bitset src); /* Return nonzero if this is the only set bit. */ bool bitset_only_set_p (bitset, bitset_bindex); /* Dump bitset. */ void bitset_dump (FILE *, bitset); /* Loop over all elements of BSET, starting with MIN, setting INDEX to the index of each set bit. For example, the following will print the bits set in a bitset: bitset_bindex i; bitset_iterator iter; BITSET_FOR_EACH (iter, src, i, 0) printf ("%lu ", (unsigned long) i); */ #define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN) \ for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ (ITER.num == BITSET_LIST_SIZE) \ && (ITER.num = bitset_list (BSET, ITER.list, \ BITSET_LIST_SIZE, &ITER.next));) \ for (ITER.i = 0; \ ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ ITER.i++) /* Loop over all elements of BSET, in reverse order starting with MIN, setting INDEX to the index of each set bit. For example, the following will print the bits set in a bitset in reverse order: bitset_bindex i; bitset_iterator iter; BITSET_FOR_EACH_REVERSE (iter, src, i, 0) printf ("%lu ", (unsigned long) i); */ #define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN) \ for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE; \ (ITER.num == BITSET_LIST_SIZE) \ && (ITER.num = bitset_list_reverse (BSET, ITER.list, \ BITSET_LIST_SIZE, &ITER.next));) \ for (ITER.i = 0; \ ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1); \ ITER.i++) /* Define set operations in terms of logical operations. */ #define bitset_diff(DST, SRC1, SRC2) bitset_andn (DST, SRC1, SRC2) #define bitset_diff_cmp(DST, SRC1, SRC2) bitset_andn_cmp (DST, SRC1, SRC2) #define bitset_intersection(DST, SRC1, SRC2) bitset_and (DST, SRC1, SRC2) #define bitset_intersection_cmp(DST, SRC1, SRC2) bitset_and_cmp (DST, SRC1, SRC2) #define bitset_union(DST, SRC1, SRC2) bitset_or (DST, SRC1, SRC2) #define bitset_union_cmp(DST, SRC1, SRC2) bitset_or_cmp (DST, SRC1, SRC2) /* Symmetrical difference. */ #define bitset_symdiff(DST, SRC1, SRC2) bitset_xor (DST, SRC1, SRC2) #define bitset_symdiff_cmp(DST, SRC1, SRC2) bitset_xor_cmp (DST, SRC1, SRC2) /* Union of difference. */ #define bitset_diff_union(DST, SRC1, SRC2, SRC3) \ bitset_andn_or (DST, SRC1, SRC2, SRC3) #define bitset_diff_union_cmp(DST, SRC1, SRC2, SRC3) \ bitset_andn_or_cmp (DST, SRC1, SRC2, SRC3) /* Release any memory tied up with bitsets. */ void bitset_release_memory (void); /* Enable bitset stats gathering. */ void bitset_stats_enable (void); /* Disable bitset stats gathering. */ void bitset_stats_disable (void); /* Read bitset stats file of accummulated stats. */ void bitset_stats_read (const char *file_name); /* Write bitset stats file of accummulated stats. */ void bitset_stats_write (const char *file_name); /* Dump bitset stats. */ void bitset_stats_dump (FILE *); /* Function to debug bitset from debugger. */ void debug_bitset (bitset); /* Function to debug bitset stats from debugger. */ void debug_bitset_stats (void); #endif /* _GL_BITSET_H */ ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016337�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/array.c����������������������������������������������������������0000664�0000000�0000000�00000043250�14110572173�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Array bitsets. Copyright (C) 2002-2003, 2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 "bitset/array.h" #include <stddef.h> #include <stdlib.h> #include <string.h> /* This file implements fixed size bitsets stored as an array of words. Any unused bits in the last word must be zero. */ #define ABITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) #define ABITSET_WORDS(X) ((X)->a.words) static bitset_bindex abitset_resize (bitset src, bitset_bindex size) { /* These bitsets have a fixed size. */ if (BITSET_SIZE_ (src) != size) abort (); return size; } /* Find list of up to NUM bits set in SRC starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex abitset_small_list (bitset src, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { bitset_word word = ABITSET_WORDS (src)[0]; /* Short circuit common case. */ if (!word) return 0; bitset_windex size = BITSET_SIZE_ (src); bitset_bindex bitno = *next; if (bitno >= size) return 0; word >>= bitno; bitset_bindex count = 0; /* Is there enough room to avoid checking in each iteration? */ if (num >= BITSET_WORD_BITS) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; else BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } *next = bitno + BITSET_WORD_BITS; return count; } /* Set bit BITNO in bitset DST. */ static void abitset_set (MAYBE_UNUSED bitset dst, MAYBE_UNUSED bitset_bindex bitno) { /* This should never occur for abitsets since we should always hit the cache. It is likely someone is trying to access outside the bounds of the bitset. */ abort (); } /* Reset bit BITNO in bitset DST. */ static void abitset_reset (MAYBE_UNUSED bitset dst, MAYBE_UNUSED bitset_bindex bitno) { /* This should never occur for abitsets since we should always hit the cache. It is likely someone is trying to access outside the bounds of the bitset. Since the bit is zero anyway, let it pass. */ } /* Test bit BITNO in bitset SRC. */ static bool abitset_test (MAYBE_UNUSED bitset src, MAYBE_UNUSED bitset_bindex bitno) { /* This should never occur for abitsets since we should always hit the cache. */ return false; } /* Find list of up to NUM bits set in SRC in reverse order, starting from and including NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex abitset_list_reverse (bitset src, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { bitset_bindex rbitno = *next; bitset_word *srcp = ABITSET_WORDS (src); bitset_bindex n_bits = BITSET_SIZE_ (src); /* If num is 1, we could speed things up with a binary search of the word of interest. */ if (rbitno >= n_bits) return 0; bitset_bindex count = 0; bitset_bindex bitno = n_bits - (rbitno + 1); bitset_windex windex = bitno / BITSET_WORD_BITS; unsigned bitcnt = bitno % BITSET_WORD_BITS; bitset_bindex bitoff = windex * BITSET_WORD_BITS; do { bitset_word word = srcp[windex]; if (bitcnt + 1 < BITSET_WORD_BITS) /* We're starting in the middle of a word: smash bits to ignore. */ word &= ((bitset_word) 1 << (bitcnt + 1)) - 1; BITSET_FOR_EACH_BIT_REVERSE(pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = n_bits - (bitoff + pos); return count; } } bitoff -= BITSET_WORD_BITS; bitcnt = BITSET_WORD_BITS - 1; } while (windex--); *next = n_bits - (bitoff + 1); return count; } /* Find list of up to NUM bits set in SRC starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex abitset_list (bitset src, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { bitset_windex windex; bitset_bindex bitoff; bitset_windex size = src->b.csize; bitset_word *srcp = ABITSET_WORDS (src); bitset_bindex bitno = *next; bitset_bindex count = 0; if (!bitno) { /* Many bitsets are zero, so make this common case fast. */ for (windex = 0; windex < size && !srcp[windex]; windex++) continue; if (windex >= size) return 0; bitoff = windex * BITSET_WORD_BITS; } else { if (bitno >= BITSET_SIZE_ (src)) return 0; windex = bitno / BITSET_WORD_BITS; bitno = bitno % BITSET_WORD_BITS; if (bitno) { /* Handle the case where we start within a word. Most often, this is executed with large bitsets with many set bits where we filled the array on the previous call to this function. */ bitoff = windex * BITSET_WORD_BITS; bitset_word word = srcp[windex] >> bitno; bitno = bitoff + bitno; BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } windex++; } bitoff = windex * BITSET_WORD_BITS; } for (; windex < size; windex++, bitoff += BITSET_WORD_BITS) { bitset_word word = srcp[windex]; if (!word) continue; /* Is there enough room to avoid checking in each iteration? */ if ((count + BITSET_WORD_BITS) < num) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitoff + pos; else BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = bitoff + pos + 1; return count; } } } *next = bitoff; return count; } /* Ensure that any unused bits within the last word are clear. */ static inline void abitset_unused_clear (bitset dst) { unsigned last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS; if (last_bit) ABITSET_WORDS (dst)[dst->b.csize - 1] &= ((bitset_word) 1 << last_bit) - 1; } static void abitset_ones (bitset dst) { bitset_word *dstp = ABITSET_WORDS (dst); size_t bytes = sizeof (bitset_word) * dst->b.csize; memset (dstp, -1, bytes); abitset_unused_clear (dst); } static void abitset_zero (bitset dst) { bitset_word *dstp = ABITSET_WORDS (dst); size_t bytes = sizeof (bitset_word) * dst->b.csize; memset (dstp, 0, bytes); } static bool abitset_empty_p (bitset dst) { bitset_word *dstp = ABITSET_WORDS (dst); for (bitset_windex i = 0; i < dst->b.csize; i++) if (dstp[i]) return false; return true; } static void abitset_copy1 (bitset dst, bitset src) { bitset_word *srcp = ABITSET_WORDS (src); bitset_word *dstp = ABITSET_WORDS (dst); if (srcp == dstp) return; bitset_windex size = dst->b.csize; memcpy (dstp, srcp, sizeof (bitset_word) * size); } static void abitset_not (bitset dst, bitset src) { bitset_word *srcp = ABITSET_WORDS (src); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = ~(*srcp++); abitset_unused_clear (dst); } static bool abitset_equal_p (bitset dst, bitset src) { bitset_word *srcp = ABITSET_WORDS (src); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) if (*srcp++ != *dstp++) return false; return true; } static bool abitset_subset_p (bitset dst, bitset src) { bitset_word *srcp = ABITSET_WORDS (src); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++, srcp++) if (*dstp != (*srcp | *dstp)) return false; return true; } static bool abitset_disjoint_p (bitset dst, bitset src) { bitset_word *srcp = ABITSET_WORDS (src); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) if (*srcp++ & *dstp++) return false; return true; } static void abitset_and (bitset dst, bitset src1, bitset src2) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = *src1p++ & *src2p++; } static bool abitset_and_cmp (bitset dst, bitset src1, bitset src2) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = *src1p++ & *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_andn (bitset dst, bitset src1, bitset src2) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = *src1p++ & ~(*src2p++); } static bool abitset_andn_cmp (bitset dst, bitset src1, bitset src2) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = *src1p++ & ~(*src2p++); if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_or (bitset dst, bitset src1, bitset src2) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = *src1p++ | *src2p++; } static bool abitset_or_cmp (bitset dst, bitset src1, bitset src2) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = *src1p++ | *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_xor (bitset dst, bitset src1, bitset src2) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = *src1p++ ^ *src2p++; } static bool abitset_xor_cmp (bitset dst, bitset src1, bitset src2) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = *src1p++ ^ *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = (*src1p++ & *src2p++) | *src3p++; } static bool abitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ & *src2p++) | *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++; } static bool abitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3) { bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++) *dstp++ = (*src1p++ | *src2p++) & *src3p++; } static bool abitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { bool changed = false; bitset_word *src1p = ABITSET_WORDS (src1); bitset_word *src2p = ABITSET_WORDS (src2); bitset_word *src3p = ABITSET_WORDS (src3); bitset_word *dstp = ABITSET_WORDS (dst); bitset_windex size = dst->b.csize; for (bitset_windex i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ | *src2p++) & *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void abitset_copy (bitset dst, bitset src) { if (BITSET_COMPATIBLE_ (dst, src)) abitset_copy1 (dst, src); else bitset_copy_ (dst, src); } /* Vector of operations for single word bitsets. */ struct bitset_vtable abitset_small_vtable = { abitset_set, abitset_reset, bitset_toggle_, abitset_test, abitset_resize, bitset_size_, bitset_count_, abitset_empty_p, abitset_ones, abitset_zero, abitset_copy, abitset_disjoint_p, abitset_equal_p, abitset_not, abitset_subset_p, abitset_and, abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or, abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or, abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp, abitset_or_and, abitset_or_and_cmp, abitset_small_list, abitset_list_reverse, NULL, BITSET_ARRAY }; /* Vector of operations for multiple word bitsets. */ struct bitset_vtable abitset_vtable = { abitset_set, abitset_reset, bitset_toggle_, abitset_test, abitset_resize, bitset_size_, bitset_count_, abitset_empty_p, abitset_ones, abitset_zero, abitset_copy, abitset_disjoint_p, abitset_equal_p, abitset_not, abitset_subset_p, abitset_and, abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or, abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or, abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp, abitset_or_and, abitset_or_and_cmp, abitset_list, abitset_list_reverse, NULL, BITSET_ARRAY }; size_t abitset_bytes (bitset_bindex n_bits) { size_t header_size = offsetof (union bitset_union, a.words); struct bitset_align_struct { char a; union bitset_union b; }; size_t bitset_alignment = offsetof (struct bitset_align_struct, b); bitset_windex size = ABITSET_N_WORDS (n_bits); size_t bytes = header_size + size * sizeof (bitset_word); /* Align the size properly for a vector of abitset objects. */ if (header_size % bitset_alignment != 0 || sizeof (bitset_word) % bitset_alignment != 0) { bytes += bitset_alignment - 1; bytes -= bytes % bitset_alignment; } return bytes; } bitset abitset_init (bitset bset, bitset_bindex n_bits) { bitset_windex size = ABITSET_N_WORDS (n_bits); BITSET_NBITS_ (bset) = n_bits; /* Use optimized routines if bitset fits within a single word. There is probably little merit if using caching since the small bitset will always fit in the cache. */ bset->b.vtable = size == 1 ? &abitset_small_vtable : &abitset_vtable; bset->b.cindex = 0; bset->b.csize = size; bset->b.cdata = ABITSET_WORDS (bset); return bset; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/array.h����������������������������������������������������������0000664�0000000�0000000�00000001744�14110572173�0017634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support abitsets. Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_ARRAY_H #define _BITSET_ARRAY_H #include "bitset.h" size_t abitset_bytes (bitset_bindex); bitset abitset_init (bitset, bitset_bindex); #endif ����������������������������gnulib-20210822~d383792/lib/bitset/base.h�����������������������������������������������������������0000664�0000000�0000000�00000027671�14110572173�0017437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base bitset stuff. Copyright (C) 2002-2004, 2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_BASE_H #define _BITSET_BASE_H #include <limits.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ #include <string.h> /* ffsl */ #include "attribute.h" #include "integer_length.h" #include "xalloc.h" /* Currently we support five flavours of bitsets: BITSET_ARRAY: Array of bits (fixed size, fast for dense bitsets). Memory for bit array and bitset structure allocated contiguously. BITSET_LIST: Linked list of arrays of bits (variable size, least storage for large very sparse sets). BITSET_TABLE: Expandable table of pointers to arrays of bits (variable size, less storage for large sparse sets). Faster than BITSET_LIST for random access. BITSET_VECTOR: Variable array of bits (variable size, fast for dense bitsets). BITSET_STATS: Wrapper bitset for internal use only. Used for gathering statistics and/or better run-time checking. */ enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_VECTOR, BITSET_TYPE_NUM, BITSET_STATS}; #define BITSET_TYPE_NAMES {"abitset", "lbitset", "tbitset", "vbitset"} extern const char * const bitset_type_names[]; /* Data type used to store a word of bits. */ typedef unsigned long bitset_word; #define BITSET_WORD_BITS ((unsigned) (CHAR_BIT * sizeof (bitset_word))) /* Bit index. In theory we might need a type wider than size_t, but in practice we lose at most a factor of CHAR_BIT by going with size_t, and that is good enough. If this type is changed to be wider than size_t, the code needs to be modified to check for overflow when converting bit counts to byte or word counts. The bit and word index types must be unsigned. */ typedef size_t bitset_bindex; /* Word index. */ typedef size_t bitset_windex; /* Maximum values for commonly-used unsigned types. BITSET_SIZE_MAX always equals SIZE_MAX, but some older systems lack SIZE_MAX. */ #define BITSET_BINDEX_MAX ((bitset_bindex) -1) /* Limit max word index to the maximum value of a signed integer to simplify cache disabling. */ #define BITSET_WINDEX_MAX (((bitset_windex) -1) >> 1) #define BITSET_SIZE_MAX ((size_t) -1) #define BITSET_MSB ((bitset_word) 1 << (BITSET_WORD_BITS - 1)) #define BITSET_LIST_SIZE 1024 enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES, BITSET_OP_COPY, BITSET_OP_NOT, BITSET_OP_EMPTY_P, BITSET_OP_EQUAL_P, BITSET_OP_SUBSET_P, BITSET_OP_DISJOINT_P, BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN, BITSET_OP_OR_AND, BITSET_OP_AND_OR, BITSET_OP_ANDN_OR}; struct bbitset_struct { const struct bitset_vtable *vtable; bitset_windex cindex; /* Cache word index. */ bitset_windex csize; /* Cache size in words. */ bitset_word *cdata; /* Cache data pointer. */ bitset_bindex n_bits; /* Number of bits. */ /* Perhaps we could sacrifice another word to indicate that the bitset is known to be zero, that a bit has been set in the cache, and that a bit has been cleared in the cache. This would speed up some of the searches but slightly slow down bit set/reset operations of cached bits. */ }; typedef union bitset_union *bitset; /* Private accessor macros to bitset structure. */ #define BITSET_VTABLE_(SRC) (SRC)->b.vtable #define BITSET_CINDEX_(SRC) (SRC)->b.cindex #define BITSET_CDATA_(SRC) (SRC)->b.cdata #define BITSET_CSIZE_(SRC) (SRC)->b.csize #define BITSET_NBITS_(SRC) (SRC)->b.n_bits /* The contents of this structure should be considered private. */ struct bitset_vtable { void (*set) (bitset, bitset_bindex); void (*reset) (bitset, bitset_bindex); bool (*toggle) (bitset, bitset_bindex); bool (*test) (bitset, bitset_bindex); bitset_bindex (*resize) (bitset, bitset_bindex); bitset_bindex (*size) (bitset); bitset_bindex (*count) (bitset); bool (*empty_p) (bitset); void (*ones) (bitset); void (*zero) (bitset); void (*copy) (bitset, bitset); bool (*disjoint_p) (bitset, bitset); bool (*equal_p) (bitset, bitset); void (*not_) (bitset, bitset); bool (*subset_p) (bitset, bitset); void (*and_) (bitset, bitset, bitset); bool (*and_cmp) (bitset, bitset, bitset); void (*andn) (bitset, bitset, bitset); bool (*andn_cmp) (bitset, bitset, bitset); void (*or_) (bitset, bitset, bitset); bool (*or_cmp) (bitset, bitset, bitset); void (*xor_) (bitset, bitset, bitset); bool (*xor_cmp) (bitset, bitset, bitset); void (*and_or) (bitset, bitset, bitset, bitset); bool (*and_or_cmp) (bitset, bitset, bitset, bitset); void (*andn_or) (bitset, bitset, bitset, bitset); bool (*andn_or_cmp) (bitset, bitset, bitset, bitset); void (*or_and) (bitset, bitset, bitset, bitset); bool (*or_and_cmp) (bitset, bitset, bitset, bitset); bitset_bindex (*list) (bitset, bitset_bindex *, bitset_bindex, bitset_bindex *); bitset_bindex (*list_reverse) (bitset, bitset_bindex *, bitset_bindex, bitset_bindex *); void (*free) (bitset); enum bitset_type type; }; #define BITSET_COMPATIBLE_(BSET1, BSET2) \ ((BSET1)->b.vtable == (BSET2)->b.vtable) #define BITSET_CHECK2_(DST, SRC) \ if (!BITSET_COMPATIBLE_ (DST, SRC)) abort (); #define BITSET_CHECK3_(DST, SRC1, SRC2) \ if (!BITSET_COMPATIBLE_ (DST, SRC1) \ || !BITSET_COMPATIBLE_ (DST, SRC2)) abort (); #define BITSET_CHECK4_(DST, SRC1, SRC2, SRC3) \ if (!BITSET_COMPATIBLE_ (DST, SRC1) || !BITSET_COMPATIBLE_ (DST, SRC2) \ || !BITSET_COMPATIBLE_ (DST, SRC3)) abort (); /* Redefine number of bits in bitset DST. */ #define BITSET_RESIZE_(DST, SIZE) (DST)->b.vtable->resize (DST, SIZE) /* Return size in bits of bitset SRC. */ #define BITSET_SIZE_(SRC) (SRC)->b.vtable->size (SRC) /* Return number of bits set in bitset SRC. */ #define BITSET_COUNT_(SRC) (SRC)->b.vtable->count (SRC) /* Return type of bitset SRC. */ #define BITSET_TYPE_(DST) (DST)->b.vtable->type /* Set bit BITNO in bitset DST. */ #define BITSET_SET_(DST, BITNO) (DST)->b.vtable->set (DST, BITNO) /* Reset bit BITNO in bitset DST. */ #define BITSET_RESET_(DST, BITNO) (DST)->b.vtable->reset (DST, BITNO) /* Toggle bit BITNO in bitset DST. */ #define BITSET_TOGGLE_(DST, BITNO) (DST)->b.vtable->toggle (DST, BITNO) /* Return non-zero if bit BITNO in bitset SRC is set. */ #define BITSET_TEST_(SRC, BITNO) (SRC)->b.vtable->test (SRC, BITNO) /* Free bitset SRC. */ #define BITSET_FREE_(SRC)\ ((SRC)->b.vtable->free ? (SRC)->b.vtable->free (SRC) :(void)0) /* Return SRC == 0. */ #define BITSET_EMPTY_P_(SRC) (SRC)->b.vtable->empty_p (SRC) /* DST = ~0. */ #define BITSET_ONES_(DST) (DST)->b.vtable->ones (DST) /* DST = 0. */ #define BITSET_ZERO_(DST) (DST)->b.vtable->zero (DST) /* DST = SRC. */ #define BITSET_COPY_(DST, SRC) (SRC)->b.vtable->copy (DST, SRC) /* Return DST & SRC == 0. */ #define BITSET_DISJOINT_P_(DST, SRC) (SRC)->b.vtable->disjoint_p (DST, SRC) /* Return DST == SRC. */ #define BITSET_EQUAL_P_(DST, SRC) (SRC)->b.vtable->equal_p (DST, SRC) /* DST = ~SRC. */ #define BITSET_NOT_(DST, SRC) (SRC)->b.vtable->not_ (DST, SRC) /* Return DST == DST | SRC. */ #define BITSET_SUBSET_P_(DST, SRC) (SRC)->b.vtable->subset_p (DST, SRC) /* DST = SRC1 & SRC2. */ #define BITSET_AND_(DST, SRC1, SRC2) (SRC1)->b.vtable->and_ (DST, SRC1, SRC2) #define BITSET_AND_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->and_cmp (DST, SRC1, SRC2) /* DST = SRC1 & ~SRC2. */ #define BITSET_ANDN_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn (DST, SRC1, SRC2) #define BITSET_ANDN_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->andn_cmp (DST, SRC1, SRC2) /* DST = SRC1 | SRC2. */ #define BITSET_OR_(DST, SRC1, SRC2) (SRC1)->b.vtable->or_ (DST, SRC1, SRC2) #define BITSET_OR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->or_cmp (DST, SRC1, SRC2) /* DST = SRC1 ^ SRC2. */ #define BITSET_XOR_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor_ (DST, SRC1, SRC2) #define BITSET_XOR_CMP_(DST, SRC1, SRC2) (SRC1)->b.vtable->xor_cmp (DST, SRC1, SRC2) /* DST = (SRC1 & SRC2) | SRC3. Return non-zero if DST != (SRC1 & SRC2) | SRC3. */ #define BITSET_AND_OR_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->and_or (DST, SRC1, SRC2, SRC3) #define BITSET_AND_OR_CMP_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->and_or_cmp (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if DST != (SRC1 & ~SRC2) | SRC3. */ #define BITSET_ANDN_OR_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->andn_or (DST, SRC1, SRC2, SRC3) #define BITSET_ANDN_OR_CMP_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->andn_or_cmp (DST, SRC1, SRC2, SRC3) /* DST = (SRC1 | SRC2) & SRC3. Return non-zero if DST != (SRC1 | SRC2) & SRC3. */ #define BITSET_OR_AND_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->or_and (DST, SRC1, SRC2, SRC3) #define BITSET_OR_AND_CMP_(DST, SRC1, SRC2, SRC3) \ (SRC1)->b.vtable->or_and_cmp (DST, SRC1, SRC2, SRC3) /* Find list of up to NUM bits set in BSET starting from and including *NEXT. Return with actual number of bits found and with *NEXT indicating where search stopped. */ #define BITSET_LIST_(BSET, LIST, NUM, NEXT) \ (BSET)->b.vtable->list (BSET, LIST, NUM, NEXT) /* Find reverse list of up to NUM bits set in BSET starting from and including NEXT. Return with actual number of bits found and with *NEXT indicating where search stopped. */ #define BITSET_LIST_REVERSE_(BSET, LIST, NUM, NEXT) \ (BSET)->b.vtable->list_reverse (BSET, LIST, NUM, NEXT) /* Iterate left to right over each set bit of WORD. Each iteration sets POS to the 0-based index of the next set bit in WORD. Repeatedly resets bits in WORD in place until it's null. */ #define BITSET_FOR_EACH_BIT(Pos, Word) \ for (int Pos = bitset_ffs_ (Word); \ 0 <= Pos; \ Word ^= 1UL << Pos, Pos = bitset_ffs_ (Word)) /* Iterate right to left over each set bit of WORD. Each iteration sets POS to the 0-based index of the next set bit in WORD. Repeatedly resets bits in WORD in place until it's null. */ #define BITSET_FOR_EACH_BIT_REVERSE(Pos, Word) \ for (int Pos = bitset_fls_ (Word); \ 0 <= Pos; \ Word ^= 1UL << Pos, Pos = bitset_fls_ (Word)) /* Private functions for bitset implementations. */ bool bitset_toggle_ (bitset, bitset_bindex); bitset_bindex bitset_count_ (bitset); bitset_bindex bitset_size_ (bitset); bool bitset_copy_ (bitset, bitset); void bitset_and_or_ (bitset, bitset, bitset, bitset); bool bitset_and_or_cmp_ (bitset, bitset, bitset, bitset); void bitset_andn_or_ (bitset, bitset, bitset, bitset); bool bitset_andn_or_cmp_ (bitset, bitset, bitset, bitset); void bitset_or_and_ (bitset, bitset, bitset, bitset); bool bitset_or_and_cmp_ (bitset, bitset, bitset, bitset); /* First set bit in WORD. Indexes start at 0, return -1 if WORD is null. */ static inline int bitset_ffs_ (bitset_word word) { return ffsl ((long) word) - 1; } /* Last set bit in WORD. Indexes start at 0, return -1 if WORD is null. */ static inline int bitset_fls_ (bitset_word word) { return integer_length_l (word) - 1; } #endif /* _BBITSET_H */ �����������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/list.c�����������������������������������������������������������0000664�0000000�0000000�00000074432�14110572173�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support link list bitsets. Copyright (C) 2002-2004, 2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 "bitset/list.h" #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "obstack.h" /* This file implements linked-list bitsets. These bitsets can be of arbitrary length and are more efficient than arrays of bits for large sparse sets. Usually if all the bits in an element are zero we remove the element from the list. However, a side effect of the bit caching is that we do not always notice when an element becomes zero. Hence the lbitset_weed function which removes zero elements. */ /* Number of words to use for each element. The larger the value the greater the size of the cache and the shorter the time to find a given bit but the more memory wasted for sparse bitsets and the longer the time to search for set bits. The routines that dominate timing profiles are lbitset_elt_find and lbitset_elt_link, especially when accessing the bits randomly. */ #define LBITSET_ELT_WORDS 2 typedef bitset_word lbitset_word; #define LBITSET_WORD_BITS BITSET_WORD_BITS /* Number of bits stored in each element. */ #define LBITSET_ELT_BITS \ ((unsigned) (LBITSET_ELT_WORDS * LBITSET_WORD_BITS)) /* Lbitset element. We use an array of bits for each element. These are linked together in a doubly-linked list. */ typedef struct lbitset_elt_struct { struct lbitset_elt_struct *next; /* Next element. */ struct lbitset_elt_struct *prev; /* Previous element. */ bitset_windex index; /* bitno / BITSET_WORD_BITS. */ bitset_word words[LBITSET_ELT_WORDS]; /* Bits that are set. */ } lbitset_elt; enum lbitset_find_mode { LBITSET_FIND, LBITSET_CREATE, LBITSET_SUBST }; static lbitset_elt lbitset_zero_elts[3]; /* Elements of all zero bits. */ /* Obstack to allocate bitset elements from. */ static struct obstack lbitset_obstack; static bool lbitset_obstack_init = false; static lbitset_elt *lbitset_free_list; /* Free list of bitset elements. */ extern void debug_lbitset (bitset); #define LBITSET_CURRENT1(X) \ ((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words))) #define LBITSET_CURRENT(X) LBITSET_CURRENT1((X)->b.cdata) #define LBITSET_HEAD(X) ((X)->l.head) #define LBITSET_TAIL(X) ((X)->l.tail) /* Allocate a lbitset element. The bits are not cleared. */ static inline lbitset_elt * lbitset_elt_alloc (void) { lbitset_elt *elt; if (lbitset_free_list != 0) { elt = lbitset_free_list; lbitset_free_list = elt->next; } else { if (!lbitset_obstack_init) { lbitset_obstack_init = true; /* Let particular systems override the size of a chunk. */ #ifndef OBSTACK_CHUNK_SIZE # define OBSTACK_CHUNK_SIZE 0 #endif /* Let them override the alloc and free routines too. */ #ifndef OBSTACK_CHUNK_ALLOC # define OBSTACK_CHUNK_ALLOC xmalloc #endif #ifndef OBSTACK_CHUNK_FREE # define OBSTACK_CHUNK_FREE free #endif #if !(defined __GNUC__ || defined __clang__) # define __alignof__(type) 0 #endif obstack_specify_allocation (&lbitset_obstack, OBSTACK_CHUNK_SIZE, __alignof__ (lbitset_elt), OBSTACK_CHUNK_ALLOC, OBSTACK_CHUNK_FREE); } /* Perhaps we should add a number of new elements to the free list. */ elt = (lbitset_elt *) obstack_alloc (&lbitset_obstack, sizeof (lbitset_elt)); } return elt; } /* Allocate a lbitset element. The bits are cleared. */ static inline lbitset_elt * lbitset_elt_calloc (void) { lbitset_elt *elt = lbitset_elt_alloc (); memset (elt->words, 0, sizeof (elt->words)); return elt; } static inline void lbitset_elt_free (lbitset_elt *elt) { elt->next = lbitset_free_list; lbitset_free_list = elt; } /* Unlink element ELT from bitset BSET. */ static inline void lbitset_elt_unlink (bitset bset, lbitset_elt *elt) { lbitset_elt *next = elt->next; lbitset_elt *prev = elt->prev; if (prev) prev->next = next; if (next) next->prev = prev; if (LBITSET_HEAD (bset) == elt) LBITSET_HEAD (bset) = next; if (LBITSET_TAIL (bset) == elt) LBITSET_TAIL (bset) = prev; /* Update cache pointer. Since the first thing we try is to insert before current, make current the next entry in preference to the previous. */ if (LBITSET_CURRENT (bset) == elt) { if (next) { bset->b.cdata = next->words; bset->b.cindex = next->index; } else if (prev) { bset->b.cdata = prev->words; bset->b.cindex = prev->index; } else { bset->b.csize = 0; bset->b.cdata = 0; } } lbitset_elt_free (elt); } /* Cut the chain of bitset BSET before element ELT and free the elements. */ static inline void lbitset_prune (bitset bset, lbitset_elt *elt) { if (!elt) return; if (elt->prev) { LBITSET_TAIL (bset) = elt->prev; bset->b.cdata = elt->prev->words; bset->b.cindex = elt->prev->index; elt->prev->next = 0; } else { LBITSET_HEAD (bset) = 0; LBITSET_TAIL (bset) = 0; bset->b.cdata = 0; bset->b.csize = 0; } lbitset_elt *next; for (; elt; elt = next) { next = elt->next; lbitset_elt_free (elt); } } /* Are all bits in an element zero? */ static inline bool lbitset_elt_zero_p (lbitset_elt *elt) { for (int i = 0; i < LBITSET_ELT_WORDS; i++) if (elt->words[i]) return false; return true; } /* Link the bitset element into the current bitset linked list. */ static inline void lbitset_elt_link (bitset bset, lbitset_elt *elt) { bitset_windex windex = elt->index; lbitset_elt *current = bset->b.csize ? LBITSET_CURRENT (bset) : LBITSET_HEAD (bset); /* If this is the first and only element, add it in. */ if (LBITSET_HEAD (bset) == 0) { elt->next = elt->prev = 0; LBITSET_HEAD (bset) = elt; LBITSET_TAIL (bset) = elt; } /* If this index is less than that of the current element, it goes somewhere before the current element. */ else if (windex < bset->b.cindex) { lbitset_elt *ptr; for (ptr = current; ptr->prev && ptr->prev->index > windex; ptr = ptr->prev) continue; if (ptr->prev) ptr->prev->next = elt; else LBITSET_HEAD (bset) = elt; elt->prev = ptr->prev; elt->next = ptr; ptr->prev = elt; } /* Otherwise, it must go somewhere after the current element. */ else { lbitset_elt *ptr; for (ptr = current; ptr->next && ptr->next->index < windex; ptr = ptr->next) continue; if (ptr->next) ptr->next->prev = elt; else LBITSET_TAIL (bset) = elt; elt->next = ptr->next; elt->prev = ptr; ptr->next = elt; } /* Set up so this is the first element searched. */ bset->b.cindex = windex; bset->b.csize = LBITSET_ELT_WORDS; bset->b.cdata = elt->words; } static lbitset_elt * lbitset_elt_find (bitset bset, bitset_windex windex, enum lbitset_find_mode mode) { lbitset_elt *current; if (bset->b.csize) { current = LBITSET_CURRENT (bset); /* Check if element is the cached element. */ if ((windex - bset->b.cindex) < bset->b.csize) return current; } else { current = LBITSET_HEAD (bset); } if (current) { lbitset_elt *elt; if (windex < bset->b.cindex) { for (elt = current; elt->prev && elt->index > windex; elt = elt->prev) continue; } else { for (elt = current; elt->next && (elt->index + LBITSET_ELT_WORDS - 1) < windex; elt = elt->next) continue; } /* ELT is the nearest to the one we want. If it's not the one we want, the one we want does not exist. */ if (windex - elt->index < LBITSET_ELT_WORDS) { bset->b.cindex = elt->index; bset->b.csize = LBITSET_ELT_WORDS; bset->b.cdata = elt->words; return elt; } } switch (mode) { default: abort (); case LBITSET_FIND: return 0; case LBITSET_CREATE: windex -= windex % LBITSET_ELT_WORDS; lbitset_elt *elt = lbitset_elt_calloc (); elt->index = windex; lbitset_elt_link (bset, elt); return elt; case LBITSET_SUBST: return &lbitset_zero_elts[0]; } } /* Weed out the zero elements from the list. */ static inline void lbitset_weed (bitset bset) { lbitset_elt *next; for (lbitset_elt *elt = LBITSET_HEAD (bset); elt; elt = next) { next = elt->next; if (lbitset_elt_zero_p (elt)) lbitset_elt_unlink (bset, elt); } } /* Set all bits in the bitset to zero. */ static void lbitset_zero (bitset bset) { lbitset_elt *head = LBITSET_HEAD (bset); if (!head) return; /* Clear a bitset by freeing the linked list at the head element. */ lbitset_prune (bset, head); } /* Is DST == SRC? */ static inline bool lbitset_equal_p (bitset dst, bitset src) { if (src == dst) return true; lbitset_weed (src); lbitset_weed (dst); lbitset_elt *selt; lbitset_elt *delt; for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst); selt && delt; selt = selt->next, delt = delt->next) { if (selt->index != delt->index) return false; for (int j = 0; j < LBITSET_ELT_WORDS; j++) if (delt->words[j] != selt->words[j]) return false; } return !selt && !delt; } /* Copy bits from bitset SRC to bitset DST. */ static inline void lbitset_copy_ (bitset dst, bitset src) { if (src == dst) return; lbitset_zero (dst); lbitset_elt *head = LBITSET_HEAD (src); if (!head) return; lbitset_elt *prev = 0; lbitset_elt *tmp; for (lbitset_elt *elt = head; elt; elt = elt->next) { tmp = lbitset_elt_alloc (); tmp->index = elt->index; tmp->prev = prev; tmp->next = 0; if (prev) prev->next = tmp; else LBITSET_HEAD (dst) = tmp; prev = tmp; memcpy (tmp->words, elt->words, sizeof (elt->words)); } LBITSET_TAIL (dst) = tmp; dst->b.csize = LBITSET_ELT_WORDS; dst->b.cdata = LBITSET_HEAD (dst)->words; dst->b.cindex = LBITSET_HEAD (dst)->index; } static void lbitset_copy (bitset dst, bitset src) { if (BITSET_COMPATIBLE_ (dst, src)) lbitset_copy_ (dst, src); else bitset_copy_ (dst, src); } /* Copy bits from bitset SRC to bitset DST. Return true if bitsets different. */ static inline bool lbitset_copy_cmp (bitset dst, bitset src) { if (src == dst) return false; if (!LBITSET_HEAD (dst)) { lbitset_copy (dst, src); return LBITSET_HEAD (src) != 0; } if (lbitset_equal_p (dst, src)) return false; lbitset_copy (dst, src); return true; } static bitset_bindex lbitset_resize (bitset src, bitset_bindex size) { BITSET_NBITS_ (src) = size; /* Need to prune any excess bits. FIXME. */ return size; } /* Set bit BITNO in bitset DST. */ static void lbitset_set (bitset dst, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; lbitset_elt_find (dst, windex, LBITSET_CREATE); dst->b.cdata[windex - dst->b.cindex] |= (bitset_word) 1 << (bitno % BITSET_WORD_BITS); } /* Reset bit BITNO in bitset DST. */ static void lbitset_reset (bitset dst, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; if (!lbitset_elt_find (dst, windex, LBITSET_FIND)) return; dst->b.cdata[windex - dst->b.cindex] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); /* If all the data is zero, perhaps we should unlink it now... */ } /* Test bit BITNO in bitset SRC. */ static bool lbitset_test (bitset src, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; return (lbitset_elt_find (src, windex, LBITSET_FIND) && ((src->b.cdata[windex - src->b.cindex] >> (bitno % BITSET_WORD_BITS)) & 1)); } static void lbitset_free (bitset bset) { lbitset_zero (bset); } /* Find list of up to NUM bits set in BSET starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex lbitset_list_reverse (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { lbitset_elt *elt = LBITSET_TAIL (bset); if (!elt) return 0; bitset_bindex n_bits = (elt->index + LBITSET_ELT_WORDS) * BITSET_WORD_BITS; bitset_bindex rbitno = *next; if (rbitno >= n_bits) return 0; bitset_bindex bitno = n_bits - (rbitno + 1); bitset_windex windex = bitno / BITSET_WORD_BITS; /* Skip back to starting element. */ for (; elt && elt->index > windex; elt = elt->prev) continue; if (!elt) return 0; unsigned bitcnt; if (windex >= elt->index + LBITSET_ELT_WORDS) { /* We are trying to start in no-mans land so start at end of current elt. */ bitcnt = BITSET_WORD_BITS - 1; windex = elt->index + LBITSET_ELT_WORDS - 1; } else { bitcnt = bitno % BITSET_WORD_BITS; } bitset_bindex count = 0; bitset_bindex bitoff = windex * BITSET_WORD_BITS; /* If num is 1, we could speed things up with a binary search of the word of interest. */ while (elt) { bitset_word *srcp = elt->words; for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex--) { bitset_word word = srcp[windex - elt->index]; if (bitcnt + 1 < BITSET_WORD_BITS) /* We're starting in the middle of a word: smash bits to ignore. */ word &= ((bitset_word) 1 << (bitcnt + 1)) - 1; BITSET_FOR_EACH_BIT_REVERSE(pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = n_bits - (bitoff + pos); return count; } } bitoff -= BITSET_WORD_BITS; bitcnt = BITSET_WORD_BITS - 1; } elt = elt->prev; if (elt) { windex = elt->index + LBITSET_ELT_WORDS - 1; bitoff = windex * BITSET_WORD_BITS; } } *next = n_bits - (bitoff + 1); return count; } /* Find list of up to NUM bits set in BSET starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex lbitset_list (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { lbitset_elt *head = LBITSET_HEAD (bset); if (!head) return 0; bitset_windex windex; lbitset_elt *elt; bitset_bindex bitno = *next; bitset_bindex count = 0; if (!bitno) { /* This is the most common case. */ /* Start with the first element. */ elt = head; windex = elt->index; bitno = windex * BITSET_WORD_BITS; } else { windex = bitno / BITSET_WORD_BITS; /* Skip to starting element. */ for (elt = head; elt && (elt->index + LBITSET_ELT_WORDS - 1) < windex; elt = elt->next) continue; if (!elt) return 0; if (windex < elt->index) { windex = elt->index; bitno = windex * BITSET_WORD_BITS; } else { bitset_word *srcp = elt->words; /* We are starting within an element. */ for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++) { bitset_word word = srcp[windex - elt->index] >> (bitno % BITSET_WORD_BITS); BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } bitno = (windex + 1) * BITSET_WORD_BITS; } elt = elt->next; if (elt) { windex = elt->index; bitno = windex * BITSET_WORD_BITS; } } } while (elt) { bitset_word *srcp = elt->words; /* Is there enough room to avoid checking in each iteration? */ if ((count + LBITSET_ELT_BITS) < num) { /* The coast is clear, plant boot! */ #if LBITSET_ELT_WORDS == 2 bitset_word word = srcp[0]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; windex++; bitno = windex * BITSET_WORD_BITS; word = srcp[1]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; windex++; bitno = windex * BITSET_WORD_BITS; #else for (int i = 0; i < LBITSET_ELT_WORDS; i++) { bitset_word word = srcp[i]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; windex++; bitno = windex * BITSET_WORD_BITS; } #endif } else { /* Tread more carefully since we need to check if array overflows. */ for (int i = 0; i < LBITSET_ELT_WORDS; i++) { bitset_word word = srcp[i]; if (word) BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } windex++; bitno = windex * BITSET_WORD_BITS; } } elt = elt->next; if (elt) { windex = elt->index; bitno = windex * BITSET_WORD_BITS; } } *next = bitno; return count; } static bool lbitset_empty_p (bitset dst) { lbitset_elt *elt; lbitset_elt *next; for (elt = LBITSET_HEAD (dst); elt; elt = next) { next = elt->next; if (!lbitset_elt_zero_p (elt)) return false; /* Weed as we go. */ lbitset_elt_unlink (dst, elt); } return true; } /* Ensure that any unused bits within the last element are clear. */ static inline void lbitset_unused_clear (bitset dst) { bitset_bindex n_bits = BITSET_SIZE_ (dst); unsigned last_bit = n_bits % LBITSET_ELT_BITS; if (last_bit) { lbitset_elt *elt = LBITSET_TAIL (dst); bitset_word *srcp = elt->words; bitset_windex windex = n_bits / BITSET_WORD_BITS; srcp[windex - elt->index] &= ((bitset_word) 1 << (last_bit % BITSET_WORD_BITS)) - 1; windex++; for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++) srcp[windex - elt->index] = 0; } } static void lbitset_ones (bitset dst) { /* This is a decidedly unfriendly operation for a linked list bitset! It makes a sparse bitset become dense. An alternative is to have a flag that indicates that the bitset stores the complement of what it indicates. */ bitset_windex windex = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS; for (bitset_windex i = 0; i < windex; i += LBITSET_ELT_WORDS) { /* Create new elements if they cannot be found. */ lbitset_elt *elt = lbitset_elt_find (dst, i, LBITSET_CREATE); memset (elt->words, -1, sizeof (elt->words)); } lbitset_unused_clear (dst); } static void lbitset_not (bitset dst, bitset src) { bitset_windex windex = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS; for (bitset_windex i = 0; i < windex; i += LBITSET_ELT_WORDS) { /* Create new elements for dst if they cannot be found or substitute zero elements if src elements not found. */ lbitset_elt *selt = lbitset_elt_find (src, i, LBITSET_SUBST); lbitset_elt *delt = lbitset_elt_find (dst, i, LBITSET_CREATE); for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++) delt->words[j] = ~selt->words[j]; } lbitset_unused_clear (dst); lbitset_weed (dst); } /* Is DST == DST | SRC? */ static bool lbitset_subset_p (bitset dst, bitset src) { for (lbitset_elt *selt = LBITSET_HEAD (src), *delt = LBITSET_HEAD (dst); selt || delt; selt = selt->next, delt = delt->next) { if (!selt) selt = &lbitset_zero_elts[0]; else if (!delt) delt = &lbitset_zero_elts[0]; else if (selt->index != delt->index) { if (selt->index < delt->index) { lbitset_zero_elts[2].next = delt; delt = &lbitset_zero_elts[2]; } else { lbitset_zero_elts[1].next = selt; selt = &lbitset_zero_elts[1]; } } for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++) if (delt->words[j] != (selt->words[j] | delt->words[j])) return false; } return true; } /* Is DST & SRC == 0? */ static bool lbitset_disjoint_p (bitset dst, bitset src) { for (lbitset_elt *selt = LBITSET_HEAD (src), *delt = LBITSET_HEAD (dst); selt && delt; selt = selt->next, delt = delt->next) { if (selt->index != delt->index) { if (selt->index < delt->index) { lbitset_zero_elts[2].next = delt; delt = &lbitset_zero_elts[2]; } else { lbitset_zero_elts[1].next = selt; selt = &lbitset_zero_elts[1]; } /* Since the elements are different, there is no intersection of these elements. */ continue; } for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++) if (selt->words[j] & delt->words[j]) return false; } return true; } static bool lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op) { lbitset_elt *selt1 = LBITSET_HEAD (src1); lbitset_elt *selt2 = LBITSET_HEAD (src2); lbitset_elt *delt = LBITSET_HEAD (dst); bool changed = false; LBITSET_HEAD (dst) = 0; dst->b.csize = 0; bitset_windex windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX; bitset_windex windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX; while (selt1 || selt2) { bitset_windex windex; lbitset_elt *stmp1; lbitset_elt *stmp2; /* Figure out whether we need to substitute zero elements for missing links. */ if (windex1 == windex2) { windex = windex1; stmp1 = selt1; stmp2 = selt2; selt1 = selt1->next; windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX; selt2 = selt2->next; windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX; } else if (windex1 < windex2) { windex = windex1; stmp1 = selt1; stmp2 = &lbitset_zero_elts[0]; selt1 = selt1->next; windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX; } else { windex = windex2; stmp1 = &lbitset_zero_elts[0]; stmp2 = selt2; selt2 = selt2->next; windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX; } /* Find the appropriate element from DST. Begin by discarding elements that we've skipped. */ lbitset_elt *dtmp; while (delt && delt->index < windex) { changed = true; dtmp = delt; delt = delt->next; lbitset_elt_free (dtmp); } if (delt && delt->index == windex) { dtmp = delt; delt = delt->next; } else dtmp = lbitset_elt_calloc (); /* Do the operation, and if any bits are set, link it into the linked list. */ bitset_word *srcp1 = stmp1->words; bitset_word *srcp2 = stmp2->words; bitset_word *dstp = dtmp->words; switch (op) { default: abort (); case BITSET_OP_OR: for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ | *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_AND: for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ & *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_XOR: for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ ^ *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_ANDN: for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ & ~(*srcp2++); if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; } if (!lbitset_elt_zero_p (dtmp)) { dtmp->index = windex; /* Perhaps this could be optimised... */ lbitset_elt_link (dst, dtmp); } else { lbitset_elt_free (dtmp); } } /* If we have elements of DST left over, free them all. */ if (delt) { changed = true; lbitset_prune (dst, delt); } return changed; } static bool lbitset_and_cmp (bitset dst, bitset src1, bitset src2) { lbitset_elt *selt1 = LBITSET_HEAD (src1); lbitset_elt *selt2 = LBITSET_HEAD (src2); if (!selt2) { lbitset_weed (dst); bool changed = !LBITSET_HEAD (dst); lbitset_zero (dst); return changed; } else if (!selt1) { lbitset_weed (dst); bool changed = !LBITSET_HEAD (dst); lbitset_zero (dst); return changed; } else return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND); } static void lbitset_and (bitset dst, bitset src1, bitset src2) { lbitset_and_cmp (dst, src1, src2); } static bool lbitset_andn_cmp (bitset dst, bitset src1, bitset src2) { lbitset_elt *selt1 = LBITSET_HEAD (src1); lbitset_elt *selt2 = LBITSET_HEAD (src2); if (!selt2) { return lbitset_copy_cmp (dst, src1); } else if (!selt1) { lbitset_weed (dst); bool changed = !LBITSET_HEAD (dst); lbitset_zero (dst); return changed; } else return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN); } static void lbitset_andn (bitset dst, bitset src1, bitset src2) { lbitset_andn_cmp (dst, src1, src2); } static bool lbitset_or_cmp (bitset dst, bitset src1, bitset src2) { lbitset_elt *selt1 = LBITSET_HEAD (src1); lbitset_elt *selt2 = LBITSET_HEAD (src2); if (!selt2) return lbitset_copy_cmp (dst, src1); else if (!selt1) return lbitset_copy_cmp (dst, src2); else return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR); } static void lbitset_or (bitset dst, bitset src1, bitset src2) { lbitset_or_cmp (dst, src1, src2); } static bool lbitset_xor_cmp (bitset dst, bitset src1, bitset src2) { lbitset_elt *selt1 = LBITSET_HEAD (src1); lbitset_elt *selt2 = LBITSET_HEAD (src2); if (!selt2) return lbitset_copy_cmp (dst, src1); else if (!selt1) return lbitset_copy_cmp (dst, src2); else return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR); } static void lbitset_xor (bitset dst, bitset src1, bitset src2) { lbitset_xor_cmp (dst, src1, src2); } /* Vector of operations for linked-list bitsets. */ struct bitset_vtable lbitset_vtable = { lbitset_set, lbitset_reset, bitset_toggle_, lbitset_test, lbitset_resize, bitset_size_, bitset_count_, lbitset_empty_p, lbitset_ones, lbitset_zero, lbitset_copy, lbitset_disjoint_p, lbitset_equal_p, lbitset_not, lbitset_subset_p, lbitset_and, lbitset_and_cmp, lbitset_andn, lbitset_andn_cmp, lbitset_or, lbitset_or_cmp, lbitset_xor, lbitset_xor_cmp, bitset_and_or_, bitset_and_or_cmp_, bitset_andn_or_, bitset_andn_or_cmp_, bitset_or_and_, bitset_or_and_cmp_, lbitset_list, lbitset_list_reverse, lbitset_free, BITSET_LIST }; /* Return size of initial structure. */ size_t lbitset_bytes (MAYBE_UNUSED bitset_bindex n_bits) { return sizeof (struct lbitset_struct); } /* Initialize a bitset. */ bitset lbitset_init (bitset bset, MAYBE_UNUSED bitset_bindex n_bits) { BITSET_NBITS_ (bset) = n_bits; bset->b.vtable = &lbitset_vtable; return bset; } void lbitset_release_memory (void) { lbitset_free_list = 0; if (lbitset_obstack_init) { lbitset_obstack_init = false; obstack_free (&lbitset_obstack, NULL); } } /* Function to be called from debugger to debug lbitset. */ void debug_lbitset (bitset bset) { if (!bset) return; for (lbitset_elt *elt = LBITSET_HEAD (bset); elt; elt = elt->next) { fprintf (stderr, "Elt %lu\n", (unsigned long) elt->index); for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++) { bitset_word word = elt->words[i]; fprintf (stderr, " Word %u:", i); for (unsigned j = 0; j < LBITSET_WORD_BITS; j++) if ((word & ((bitset_word) 1 << j))) fprintf (stderr, " %u", j); fprintf (stderr, "\n"); } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/list.h�����������������������������������������������������������0000664�0000000�0000000�00000002007�14110572173�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support lbitsets. Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_LIST_H #define _BITSET_LIST_H #include "bitset.h" size_t lbitset_bytes (bitset_bindex); bitset lbitset_init (bitset, bitset_bindex); void lbitset_release_memory (void); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/stats.c����������������������������������������������������������0000664�0000000�0000000�00000043535�14110572173�0017653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bitset statistics. Copyright (C) 2002-2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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/>. */ /* This file is a wrapper bitset implementation for the other bitset implementations. It provides bitset compatibility checking and statistics gathering without having to instrument the bitset implementations. When statistics gathering is enabled, the bitset operations get vectored through here and we then call the appropriate routines. */ #include <config.h> #include "bitset/stats.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "gettext.h" #define _(Msgid) gettext (Msgid) #include "bitset/array.h" #include "bitset/base.h" #include "bitset/list.h" #include "bitset/table.h" #include "bitset/vector.h" /* Configuration macros. */ #define BITSET_STATS_FILE "bitset.dat" #define BITSET_LOG_COUNT_BINS 10 #define BITSET_LOG_SIZE_BINS 16 #define BITSET_DENSITY_BINS 20 /* Accessor macros. */ #define BITSET_STATS_ALLOCS_INC(TYPE) \ bitset_stats_info->types[(TYPE)].allocs++ #define BITSET_STATS_FREES_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++ #define BITSET_STATS_SETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++ #define BITSET_STATS_CACHE_SETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++ #define BITSET_STATS_RESETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++ #define BITSET_STATS_CACHE_RESETS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++ #define BITSET_STATS_TESTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++ #define BITSET_STATS_CACHE_TESTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++ #define BITSET_STATS_LISTS_INC(BSET) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++ #define BITSET_STATS_LIST_COUNTS_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++ #define BITSET_STATS_LIST_SIZES_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++ #define BITSET_STATS_LIST_DENSITY_INC(BSET, I) \ bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++ struct bitset_type_info_struct { unsigned allocs; unsigned frees; unsigned lists; unsigned sets; unsigned cache_sets; unsigned resets; unsigned cache_resets; unsigned tests; unsigned cache_tests; unsigned list_counts[BITSET_LOG_COUNT_BINS]; unsigned list_sizes[BITSET_LOG_SIZE_BINS]; unsigned list_density[BITSET_DENSITY_BINS]; }; struct bitset_stats_info_struct { unsigned runs; struct bitset_type_info_struct types[BITSET_TYPE_NUM]; }; struct bitset_stats_info_struct bitset_stats_info_data; struct bitset_stats_info_struct *bitset_stats_info; bool bitset_stats_enabled = false; /* Print a percentage histogram with message MSG to FILE. */ static void bitset_percent_histogram_print (FILE *file, const char *name, const char *msg, unsigned n_bins, unsigned *bins) { unsigned total = 0; for (unsigned i = 0; i < n_bins; i++) total += bins[i]; if (!total) return; fprintf (file, "%s %s", name, msg); for (unsigned i = 0; i < n_bins; i++) fprintf (file, "%.0f-%.0f%%\t%8u (%5.1f%%)\n", i * 100.0 / n_bins, (i + 1) * 100.0 / n_bins, bins[i], (100.0 * bins[i]) / total); } /* Print a log histogram with message MSG to FILE. */ static void bitset_log_histogram_print (FILE *file, const char *name, const char *msg, unsigned n_bins, unsigned *bins) { unsigned total = 0; for (unsigned i = 0; i < n_bins; i++) total += bins[i]; if (!total) return; /* Determine number of useful bins. */ { unsigned i; for (i = n_bins; i > 3 && ! bins[i - 1]; i--) continue; n_bins = i; } /* 2 * ceil (log10 (2) * (N - 1)) + 1. */ unsigned max_width = 2 * (unsigned) (0.30103 * (n_bins - 1) + 0.9999) + 1; fprintf (file, "%s %s", name, msg); { unsigned i; for (i = 0; i < 2; i++) fprintf (file, "%*d\t%8u (%5.1f%%)\n", max_width, i, bins[i], 100.0 * bins[i] / total); for (; i < n_bins - 1; i++) fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n", max_width - ((unsigned) (0.30103 * (i) + 0.9999) + 1), 1UL << (i - 1), (1UL << i) - 1, bins[i], (100.0 * bins[i]) / total); fprintf (file, "%*lu-...\t%8u (%5.1f%%)\n", max_width - ((unsigned) (0.30103 * (i) + 0.9999) + 1), 1UL << (i - 1), bins[i], (100.0 * bins[i]) / total); } } /* Print bitset statistics to FILE. */ static void bitset_stats_print_1 (FILE *file, const char *name, struct bitset_type_info_struct *stats) { if (!stats) return; fprintf (file, "%s:\n", name); fprintf (file, _("%u bitset_allocs, %u freed (%.2f%%).\n"), stats->allocs, stats->frees, stats->allocs ? 100.0 * stats->frees / stats->allocs : 0); fprintf (file, _("%u bitset_sets, %u cached (%.2f%%)\n"), stats->sets, stats->cache_sets, stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0); fprintf (file, _("%u bitset_resets, %u cached (%.2f%%)\n"), stats->resets, stats->cache_resets, stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0); fprintf (file, _("%u bitset_tests, %u cached (%.2f%%)\n"), stats->tests, stats->cache_tests, stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0); fprintf (file, _("%u bitset_lists\n"), stats->lists); bitset_log_histogram_print (file, name, _("count log histogram\n"), BITSET_LOG_COUNT_BINS, stats->list_counts); bitset_log_histogram_print (file, name, _("size log histogram\n"), BITSET_LOG_SIZE_BINS, stats->list_sizes); bitset_percent_histogram_print (file, name, _("density histogram\n"), BITSET_DENSITY_BINS, stats->list_density); } /* Print all bitset statistics to FILE. */ static void bitset_stats_print (FILE *file, MAYBE_UNUSED bool verbose) { if (!bitset_stats_info) return; fprintf (file, _("Bitset statistics:\n\n")); if (bitset_stats_info->runs > 1) fprintf (file, _("Accumulated runs = %u\n"), bitset_stats_info->runs); for (int i = 0; i < BITSET_TYPE_NUM; i++) bitset_stats_print_1 (file, bitset_type_names[i], &bitset_stats_info->types[i]); } /* Initialise bitset statistics logging. */ void bitset_stats_enable (void) { if (!bitset_stats_info) bitset_stats_info = &bitset_stats_info_data; bitset_stats_enabled = true; } void bitset_stats_disable (void) { bitset_stats_enabled = false; } /* Read bitset statistics file. */ void bitset_stats_read (const char *file_name) { if (!bitset_stats_info) return; if (!file_name) file_name = BITSET_STATS_FILE; FILE *file = fopen (file_name, "re"); if (file) { if (fread (&bitset_stats_info_data, sizeof (bitset_stats_info_data), 1, file) != 1) { if (ferror (file)) perror (_("cannot read stats file")); else fprintf (stderr, _("bad stats file size\n")); } if (fclose (file) != 0) perror (_("cannot read stats file")); } bitset_stats_info_data.runs++; } /* Write bitset statistics file. */ void bitset_stats_write (const char *file_name) { if (!bitset_stats_info) return; if (!file_name) file_name = BITSET_STATS_FILE; FILE *file = fopen (file_name, "we"); if (file) { if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data), 1, file) != 1) perror (_("cannot write stats file")); if (fclose (file) != 0) perror (_("cannot write stats file")); } else perror (_("cannot open stats file for writing")); } /* Dump bitset statistics to FILE. */ void bitset_stats_dump (FILE *file) { bitset_stats_print (file, false); } /* Function to be called from debugger to print bitset stats. */ void debug_bitset_stats (void) { bitset_stats_print (stderr, true); } static void bitset_stats_set (bitset dst, bitset_bindex bitno) { bitset bset = dst->s.bset; bitset_windex wordno = bitno / BITSET_WORD_BITS; bitset_windex offset = wordno - bset->b.cindex; BITSET_STATS_SETS_INC (bset); if (offset < bset->b.csize) { bset->b.cdata[offset] |= (bitset_word) 1 << (bitno % BITSET_WORD_BITS); BITSET_STATS_CACHE_SETS_INC (bset); } else BITSET_SET_ (bset, bitno); } static void bitset_stats_reset (bitset dst, bitset_bindex bitno) { bitset bset = dst->s.bset; bitset_windex wordno = bitno / BITSET_WORD_BITS; bitset_windex offset = wordno - bset->b.cindex; BITSET_STATS_RESETS_INC (bset); if (offset < bset->b.csize) { bset->b.cdata[offset] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); BITSET_STATS_CACHE_RESETS_INC (bset); } else BITSET_RESET_ (bset, bitno); } static bool bitset_stats_toggle (bitset src, bitset_bindex bitno) { return BITSET_TOGGLE_ (src->s.bset, bitno); } static bool bitset_stats_test (bitset src, bitset_bindex bitno) { bitset bset = src->s.bset; bitset_windex wordno = bitno / BITSET_WORD_BITS; bitset_windex offset = wordno - bset->b.cindex; BITSET_STATS_TESTS_INC (bset); if (offset < bset->b.csize) { BITSET_STATS_CACHE_TESTS_INC (bset); return (bset->b.cdata[offset] >> (bitno % BITSET_WORD_BITS)) & 1; } else return BITSET_TEST_ (bset, bitno); } static bitset_bindex bitset_stats_resize (bitset src, bitset_bindex size) { return BITSET_RESIZE_ (src->s.bset, size); } static bitset_bindex bitset_stats_size (bitset src) { return BITSET_SIZE_ (src->s.bset); } static bitset_bindex bitset_stats_count (bitset src) { return BITSET_COUNT_ (src->s.bset); } static bool bitset_stats_empty_p (bitset dst) { return BITSET_EMPTY_P_ (dst->s.bset); } static void bitset_stats_ones (bitset dst) { BITSET_ONES_ (dst->s.bset); } static void bitset_stats_zero (bitset dst) { BITSET_ZERO_ (dst->s.bset); } static void bitset_stats_copy (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); BITSET_COPY_ (dst->s.bset, src->s.bset); } static bool bitset_stats_disjoint_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); return BITSET_DISJOINT_P_ (dst->s.bset, src->s.bset); } static bool bitset_stats_equal_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); return BITSET_EQUAL_P_ (dst->s.bset, src->s.bset); } static void bitset_stats_not (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); BITSET_NOT_ (dst->s.bset, src->s.bset); } static bool bitset_stats_subset_p (bitset dst, bitset src) { BITSET_CHECK2_ (dst, src); return BITSET_SUBSET_P_ (dst->s.bset, src->s.bset); } static void bitset_stats_and (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); BITSET_AND_ (dst->s.bset, src1->s.bset, src2->s.bset); } static bool bitset_stats_and_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); return BITSET_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); } static void bitset_stats_andn (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); BITSET_ANDN_ (dst->s.bset, src1->s.bset, src2->s.bset); } static bool bitset_stats_andn_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); return BITSET_ANDN_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); } static void bitset_stats_or (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); BITSET_OR_ (dst->s.bset, src1->s.bset, src2->s.bset); } static bool bitset_stats_or_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); return BITSET_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); } static void bitset_stats_xor (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); BITSET_XOR_ (dst->s.bset, src1->s.bset, src2->s.bset); } static bool bitset_stats_xor_cmp (bitset dst, bitset src1, bitset src2) { BITSET_CHECK3_ (dst, src1, src2); return BITSET_XOR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); } static void bitset_stats_and_or (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); BITSET_AND_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static bool bitset_stats_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); return BITSET_AND_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static void bitset_stats_andn_or (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); BITSET_ANDN_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static bool bitset_stats_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); return BITSET_ANDN_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static void bitset_stats_or_and (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); BITSET_OR_AND_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static bool bitset_stats_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { BITSET_CHECK4_ (dst, src1, src2, src3); return BITSET_OR_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); } static bitset_bindex bitset_stats_list (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { bitset_bindex count = BITSET_LIST_ (bset->s.bset, list, num, next); BITSET_STATS_LISTS_INC (bset->s.bset); /* Log histogram of number of set bits. */ { bitset_bindex i; bitset_bindex tmp; for (i = 0, tmp = count; tmp; tmp >>= 1, i++) continue; if (i >= BITSET_LOG_COUNT_BINS) i = BITSET_LOG_COUNT_BINS - 1; BITSET_STATS_LIST_COUNTS_INC (bset->s.bset, i); } /* Log histogram of number of bits in set. */ bitset_bindex size = BITSET_SIZE_ (bset->s.bset); { bitset_bindex i; bitset_bindex tmp; for (i = 0, tmp = size; tmp; tmp >>= 1, i++) continue; if (i >= BITSET_LOG_SIZE_BINS) i = BITSET_LOG_SIZE_BINS - 1; BITSET_STATS_LIST_SIZES_INC (bset->s.bset, i); } /* Histogram of fraction of bits set. */ { bitset_bindex i = size ? (count * BITSET_DENSITY_BINS) / size : 0; if (i >= BITSET_DENSITY_BINS) i = BITSET_DENSITY_BINS - 1; BITSET_STATS_LIST_DENSITY_INC (bset->s.bset, i); } return count; } static bitset_bindex bitset_stats_list_reverse (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { return BITSET_LIST_REVERSE_ (bset->s.bset, list, num, next); } static void bitset_stats_free (bitset bset) { BITSET_STATS_FREES_INC (bset->s.bset); BITSET_FREE_ (bset->s.bset); } struct bitset_vtable bitset_stats_vtable = { bitset_stats_set, bitset_stats_reset, bitset_stats_toggle, bitset_stats_test, bitset_stats_resize, bitset_stats_size, bitset_stats_count, bitset_stats_empty_p, bitset_stats_ones, bitset_stats_zero, bitset_stats_copy, bitset_stats_disjoint_p, bitset_stats_equal_p, bitset_stats_not, bitset_stats_subset_p, bitset_stats_and, bitset_stats_and_cmp, bitset_stats_andn, bitset_stats_andn_cmp, bitset_stats_or, bitset_stats_or_cmp, bitset_stats_xor, bitset_stats_xor_cmp, bitset_stats_and_or, bitset_stats_and_or_cmp, bitset_stats_andn_or, bitset_stats_andn_or_cmp, bitset_stats_or_and, bitset_stats_or_and_cmp, bitset_stats_list, bitset_stats_list_reverse, bitset_stats_free, BITSET_STATS }; /* Return enclosed bitset type. */ enum bitset_type bitset_stats_type_get (bitset bset) { return BITSET_TYPE_ (bset->s.bset); } size_t bitset_stats_bytes (void) { return sizeof (struct bitset_stats_struct); } bitset bitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type) { bset->b.vtable = &bitset_stats_vtable; /* Disable cache. */ bset->b.cindex = 0; bset->b.csize = 0; bset->b.cdata = 0; BITSET_NBITS_ (bset) = n_bits; /* Set up the actual bitset implementation that we are a wrapper over. */ switch (type) { default: abort (); case BITSET_ARRAY: { size_t bytes = abitset_bytes (n_bits); bset->s.bset = xzalloc (bytes); abitset_init (bset->s.bset, n_bits); } break; case BITSET_LIST: { size_t bytes = lbitset_bytes (n_bits); bset->s.bset = xzalloc (bytes); lbitset_init (bset->s.bset, n_bits); } break; case BITSET_TABLE: { size_t bytes = tbitset_bytes (n_bits); bset->s.bset = xzalloc (bytes); tbitset_init (bset->s.bset, n_bits); } break; case BITSET_VECTOR: { size_t bytes = vbitset_bytes (n_bits); bset->s.bset = xzalloc (bytes); vbitset_init (bset->s.bset, n_bits); } break; } BITSET_STATS_ALLOCS_INC (type); return bset; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/stats.h����������������������������������������������������������0000664�0000000�0000000�00000002126�14110572173�0017647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support bitset statistics. Copyright (C) 2002-2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_STATS_H #define _BITSET_STATS_H #include "bitset/base.h" extern bool bitset_stats_enabled; enum bitset_type bitset_stats_type_get (bitset); size_t bitset_stats_bytes (void); bitset bitset_stats_init (bitset, bitset_bindex, enum bitset_type); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/table.c����������������������������������������������������������0000664�0000000�0000000�00000071024�14110572173�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support expandable bitsets. Copyright (C) 2002-2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 "bitset/table.h" #include <stdlib.h> #include <string.h> #include "obstack.h" #include "xalloc.h" /* This file implements expandable bitsets. These bitsets can be of arbitrary length and are more efficient than arrays of bits for large sparse sets. Empty elements are represented by a NULL pointer in the table of element pointers. An alternative is to point to a special zero element. Similarly, we could represent an all 1's element with another special ones element pointer. Bitsets are commonly empty so we need to ensure that this special case is fast. A zero bitset is indicated when cdata is 0. This is conservative since cdata may be non zero and the bitset may still be zero. The bitset cache can be disabled either by setting cindex to BITSET_WINDEX_MAX or by setting csize to 0. Here we use the former approach since cindex needs to be updated whenever cdata is changed. */ /* Number of words to use for each element. */ #define TBITSET_ELT_WORDS 2 /* Number of bits stored in each element. */ #define TBITSET_ELT_BITS \ ((unsigned) (TBITSET_ELT_WORDS * BITSET_WORD_BITS)) /* Tbitset element. We use an array of bits. */ typedef struct tbitset_elt_struct { union { bitset_word words[TBITSET_ELT_WORDS]; /* Bits that are set. */ struct tbitset_elt_struct *next; } u; } tbitset_elt; typedef tbitset_elt *tbitset_elts; /* Number of elements to initially allocate. */ #ifndef TBITSET_INITIAL_SIZE # define TBITSET_INITIAL_SIZE 2 #endif enum tbitset_find_mode { TBITSET_FIND, TBITSET_CREATE, TBITSET_SUBST }; static tbitset_elt tbitset_zero_elts[1]; /* Elements of all zero bits. */ /* Obstack to allocate bitset elements from. */ static struct obstack tbitset_obstack; static bool tbitset_obstack_init = false; static tbitset_elt *tbitset_free_list; /* Free list of bitset elements. */ #define TBITSET_N_ELTS(N) (((N) + TBITSET_ELT_BITS - 1) / TBITSET_ELT_BITS) #define TBITSET_ELTS(BSET) ((BSET)->e.elts) #define TBITSET_SIZE(BSET) TBITSET_N_ELTS (BITSET_NBITS_ (BSET)) #define TBITSET_ASIZE(BSET) ((BSET)->e.size) #define TBITSET_NEXT(ELT) ((ELT)->u.next) #define TBITSET_WORDS(ELT) ((ELT)->u.words) /* Disable bitset cache and mark BSET as being zero. */ #define TBITSET_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX, \ (BSET)->b.cdata = 0) #define TBITSET_CACHE_DISABLE(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX) /* Disable bitset cache and mark BSET as being possibly non-zero. */ #define TBITSET_NONZERO_SET(BSET) \ (TBITSET_CACHE_DISABLE (BSET), (BSET)->b.cdata = (bitset_word *)~0) /* A conservative estimate of whether the bitset is zero. This is non-zero only if we know for sure that the bitset is zero. */ #define TBITSET_ZERO_P(BSET) ((BSET)->b.cdata == 0) /* Enable cache to point to element with table index EINDEX. The element must exist. */ #define TBITSET_CACHE_SET(BSET, EINDEX) \ ((BSET)->b.cindex = (EINDEX) * TBITSET_ELT_WORDS, \ (BSET)->b.cdata = TBITSET_WORDS (TBITSET_ELTS (BSET) [EINDEX])) #undef min #undef max #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b)) static bitset_bindex tbitset_resize (bitset src, bitset_bindex n_bits) { if (n_bits == BITSET_NBITS_ (src)) return n_bits; bitset_windex oldsize = TBITSET_SIZE (src); bitset_windex newsize = TBITSET_N_ELTS (n_bits); if (oldsize < newsize) { /* The bitset needs to grow. If we already have enough memory allocated, then just zero what we need. */ if (newsize > TBITSET_ASIZE (src)) { /* We need to allocate more memory. When oldsize is non-zero this means that we are changing the size, so grow the bitset 25% larger than requested to reduce number of reallocations. */ bitset_windex size = oldsize == 0 ? newsize : newsize + newsize / 4; TBITSET_ELTS (src) = xrealloc (TBITSET_ELTS (src), size * sizeof (tbitset_elt *)); TBITSET_ASIZE (src) = size; } memset (TBITSET_ELTS (src) + oldsize, 0, (newsize - oldsize) * sizeof (tbitset_elt *)); } else { /* The bitset needs to shrink. There's no point deallocating the memory unless it is shrinking by a reasonable amount. */ if ((oldsize - newsize) >= oldsize / 2) { void *p = realloc (TBITSET_ELTS (src), newsize * sizeof (tbitset_elt *)); if (p) { TBITSET_ELTS (src) = p; TBITSET_ASIZE (src) = newsize; } } /* Need to prune any excess bits. FIXME. */ } BITSET_NBITS_ (src) = n_bits; return n_bits; } /* Allocate a tbitset element. The bits are not cleared. */ static inline tbitset_elt * tbitset_elt_alloc (void) { tbitset_elt *elt; if (tbitset_free_list != 0) { elt = tbitset_free_list; tbitset_free_list = TBITSET_NEXT (elt); } else { if (!tbitset_obstack_init) { tbitset_obstack_init = true; /* Let particular systems override the size of a chunk. */ #ifndef OBSTACK_CHUNK_SIZE # define OBSTACK_CHUNK_SIZE 0 #endif /* Let them override the alloc and free routines too. */ #ifndef OBSTACK_CHUNK_ALLOC # define OBSTACK_CHUNK_ALLOC xmalloc #endif #ifndef OBSTACK_CHUNK_FREE # define OBSTACK_CHUNK_FREE free #endif #if !(defined __GNUC__ || defined __clang__) # define __alignof__(type) 0 #endif obstack_specify_allocation (&tbitset_obstack, OBSTACK_CHUNK_SIZE, __alignof__ (tbitset_elt), OBSTACK_CHUNK_ALLOC, OBSTACK_CHUNK_FREE); } /* Perhaps we should add a number of new elements to the free list. */ elt = (tbitset_elt *) obstack_alloc (&tbitset_obstack, sizeof (tbitset_elt)); } return elt; } /* Allocate a tbitset element. The bits are cleared. */ static inline tbitset_elt * tbitset_elt_calloc (void) { tbitset_elt *elt = tbitset_elt_alloc (); memset (TBITSET_WORDS (elt), 0, sizeof (TBITSET_WORDS (elt))); return elt; } static inline void tbitset_elt_free (tbitset_elt *elt) { TBITSET_NEXT (elt) = tbitset_free_list; tbitset_free_list = elt; } /* Remove element with index EINDEX from bitset BSET. */ static inline void tbitset_elt_remove (bitset bset, bitset_windex eindex) { tbitset_elts *elts = TBITSET_ELTS (bset); tbitset_elt *elt = elts[eindex]; elts[eindex] = 0; tbitset_elt_free (elt); } /* Add ELT into elts at index EINDEX of bitset BSET. */ static inline void tbitset_elt_add (bitset bset, tbitset_elt *elt, bitset_windex eindex) { tbitset_elts *elts = TBITSET_ELTS (bset); /* Assume that the elts entry not allocated. */ elts[eindex] = elt; } /* Are all bits in an element zero? */ static inline bool tbitset_elt_zero_p (tbitset_elt *elt) { for (int i = 0; i < TBITSET_ELT_WORDS; i++) if (TBITSET_WORDS (elt)[i]) return false; return true; } static tbitset_elt * tbitset_elt_find (bitset bset, bitset_bindex bindex, enum tbitset_find_mode mode) { bitset_windex eindex = bindex / TBITSET_ELT_BITS; tbitset_elts *elts = TBITSET_ELTS (bset); bitset_windex size = TBITSET_SIZE (bset); if (eindex < size) { tbitset_elt *elt = elts[eindex]; if (elt) { if (TBITSET_WORDS (elt) != bset->b.cdata) TBITSET_CACHE_SET (bset, eindex); return elt; } } /* The element could not be found. */ switch (mode) { default: abort (); case TBITSET_FIND: return NULL; case TBITSET_CREATE: if (eindex >= size) tbitset_resize (bset, bindex); /* Create a new element. */ { tbitset_elt *elt = tbitset_elt_calloc (); tbitset_elt_add (bset, elt, eindex); TBITSET_CACHE_SET (bset, eindex); return elt; } case TBITSET_SUBST: return &tbitset_zero_elts[0]; } } /* Weed out the zero elements from the elts. */ static inline bitset_windex tbitset_weed (bitset bset) { if (TBITSET_ZERO_P (bset)) return 0; tbitset_elts *elts = TBITSET_ELTS (bset); bitset_windex count = 0; bitset_windex j; for (j = 0; j < TBITSET_SIZE (bset); j++) { tbitset_elt *elt = elts[j]; if (elt) { if (tbitset_elt_zero_p (elt)) { tbitset_elt_remove (bset, j); count++; } } else count++; } count = j - count; if (!count) { /* All the bits are zero. We could shrink the elts. For now just mark BSET as known to be zero. */ TBITSET_ZERO_SET (bset); } else TBITSET_NONZERO_SET (bset); return count; } /* Set all bits in the bitset to zero. */ static inline void tbitset_zero (bitset bset) { if (TBITSET_ZERO_P (bset)) return; tbitset_elts *elts = TBITSET_ELTS (bset); for (bitset_windex j = 0; j < TBITSET_SIZE (bset); j++) { tbitset_elt *elt = elts[j]; if (elt) tbitset_elt_remove (bset, j); } /* All the bits are zero. We could shrink the elts. For now just mark BSET as known to be zero. */ TBITSET_ZERO_SET (bset); } static inline bool tbitset_equal_p (bitset dst, bitset src) { if (src == dst) return true; tbitset_weed (dst); tbitset_weed (src); if (TBITSET_SIZE (src) != TBITSET_SIZE (dst)) return false; tbitset_elts *selts = TBITSET_ELTS (src); tbitset_elts *delts = TBITSET_ELTS (dst); for (bitset_windex j = 0; j < TBITSET_SIZE (src); j++) { tbitset_elt *selt = selts[j]; tbitset_elt *delt = delts[j]; if (!selt && !delt) continue; if ((selt && !delt) || (!selt && delt)) return false; for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++) if (TBITSET_WORDS (selt)[i] != TBITSET_WORDS (delt)[i]) return false; } return true; } /* Copy bits from bitset SRC to bitset DST. */ static inline void tbitset_copy_ (bitset dst, bitset src) { if (src == dst) return; tbitset_zero (dst); if (BITSET_NBITS_ (dst) != BITSET_NBITS_ (src)) tbitset_resize (dst, BITSET_NBITS_ (src)); tbitset_elts *selts = TBITSET_ELTS (src); tbitset_elts *delts = TBITSET_ELTS (dst); for (bitset_windex j = 0; j < TBITSET_SIZE (src); j++) { tbitset_elt *selt = selts[j]; if (selt) { tbitset_elt *tmp = tbitset_elt_alloc (); delts[j] = tmp; memcpy (TBITSET_WORDS (tmp), TBITSET_WORDS (selt), sizeof (TBITSET_WORDS (selt))); } } TBITSET_NONZERO_SET (dst); } /* Copy bits from bitset SRC to bitset DST. Return true if bitsets different. */ static inline bool tbitset_copy_cmp (bitset dst, bitset src) { if (src == dst) return false; if (TBITSET_ZERO_P (dst)) { tbitset_copy_ (dst, src); return !TBITSET_ZERO_P (src); } if (tbitset_equal_p (dst, src)) return false; tbitset_copy_ (dst, src); return true; } /* Set bit BITNO in bitset DST. */ static void tbitset_set (bitset dst, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; tbitset_elt_find (dst, bitno, TBITSET_CREATE); dst->b.cdata[windex - dst->b.cindex] |= (bitset_word) 1 << (bitno % BITSET_WORD_BITS); } /* Reset bit BITNO in bitset DST. */ static void tbitset_reset (bitset dst, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; if (!tbitset_elt_find (dst, bitno, TBITSET_FIND)) return; dst->b.cdata[windex - dst->b.cindex] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); /* If all the data is zero, perhaps we should remove it now... However, there is a good chance that the element will be needed again soon. */ } /* Test bit BITNO in bitset SRC. */ static bool tbitset_test (bitset src, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; return (tbitset_elt_find (src, bitno, TBITSET_FIND) && ((src->b.cdata[windex - src->b.cindex] >> (bitno % BITSET_WORD_BITS)) & 1)); } static void tbitset_free (bitset bset) { tbitset_zero (bset); free (TBITSET_ELTS (bset)); } /* Find list of up to NUM bits set in BSET starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex tbitset_list_reverse (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { if (TBITSET_ZERO_P (bset)) return 0; bitset_windex size = TBITSET_SIZE (bset); bitset_bindex n_bits = size * TBITSET_ELT_BITS; bitset_bindex rbitno = *next; if (rbitno >= n_bits) return 0; tbitset_elts *elts = TBITSET_ELTS (bset); bitset_bindex bitno = n_bits - (rbitno + 1); bitset_windex windex = bitno / BITSET_WORD_BITS; bitset_windex eindex = bitno / TBITSET_ELT_BITS; bitset_windex woffset = windex - eindex * TBITSET_ELT_WORDS; /* If num is 1, we could speed things up with a binary search of the word of interest. */ bitset_bindex count = 0; unsigned bitcnt = bitno % BITSET_WORD_BITS; bitset_bindex bitoff = windex * BITSET_WORD_BITS; do { tbitset_elt *elt = elts[eindex]; if (elt) { bitset_word *srcp = TBITSET_WORDS (elt); do { bitset_word word = srcp[woffset]; if (bitcnt + 1 < BITSET_WORD_BITS) /* We're starting in the middle of a word: smash bits to ignore. */ word &= ((bitset_word) 1 << (bitcnt + 1)) - 1; BITSET_FOR_EACH_BIT_REVERSE(pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = n_bits - (bitoff + pos); return count; } } bitoff -= BITSET_WORD_BITS; bitcnt = BITSET_WORD_BITS - 1; } while (woffset--); } woffset = TBITSET_ELT_WORDS - 1; bitoff = eindex * TBITSET_ELT_BITS - BITSET_WORD_BITS; } while (eindex--); *next = n_bits - (bitoff + 1); return count; } /* Find list of up to NUM bits set in BSET starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex tbitset_list (bitset bset, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { if (TBITSET_ZERO_P (bset)) return 0; bitset_bindex bitno = *next; bitset_bindex count = 0; tbitset_elts *elts = TBITSET_ELTS (bset); bitset_windex size = TBITSET_SIZE (bset); bitset_windex eindex = bitno / TBITSET_ELT_BITS; if (bitno % TBITSET_ELT_BITS) { /* We need to start within an element. This is not very common. */ tbitset_elt *elt = elts[eindex]; if (elt) { bitset_word *srcp = TBITSET_WORDS (elt); bitset_windex woffset = eindex * TBITSET_ELT_WORDS; for (bitset_windex windex = bitno / BITSET_WORD_BITS; (windex - woffset) < TBITSET_ELT_WORDS; windex++) { bitset_word word = srcp[windex - woffset] >> (bitno % BITSET_WORD_BITS); BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } bitno = (windex + 1) * BITSET_WORD_BITS; } } /* Skip to next element. */ eindex++; } /* If num is 1, we could speed things up with a binary search of the word of interest. */ for (; eindex < size; eindex++) { tbitset_elt *elt = elts[eindex]; if (!elt) continue; bitset_word *srcp = TBITSET_WORDS (elt); bitset_windex windex = eindex * TBITSET_ELT_WORDS; bitno = windex * BITSET_WORD_BITS; /* Is there enough room to avoid checking in each iteration? */ if ((count + TBITSET_ELT_BITS) < num) { /* The coast is clear, plant boot! */ #if TBITSET_ELT_WORDS == 2 bitset_word word = srcp[0]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; windex++; bitno = windex * BITSET_WORD_BITS; word = srcp[1]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; windex++; bitno = windex * BITSET_WORD_BITS; #else for (int i = 0; i < TBITSET_ELT_WORDS; i++, windex++) { bitset_word word = srcp[i]; if (word) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitno + pos; bitno = windex * BITSET_WORD_BITS; } #endif } else { /* Tread more carefully since we need to check if array overflows. */ for (int i = 0; i < TBITSET_ELT_WORDS; i++) { bitset_word word = srcp[i]; if (word) BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } windex++; bitno = windex * BITSET_WORD_BITS; } } } *next = bitno; return count; } /* Ensure that any unused bits within the last element are clear. */ static inline void tbitset_unused_clear (bitset dst) { bitset_bindex n_bits = BITSET_NBITS_ (dst); unsigned last_bit = n_bits % TBITSET_ELT_BITS; if (last_bit) { tbitset_elts *elts = TBITSET_ELTS (dst); bitset_windex eindex = n_bits / TBITSET_ELT_BITS; tbitset_elt *elt = elts[eindex]; if (elt) { bitset_word *srcp = TBITSET_WORDS (elt); bitset_windex windex = n_bits / BITSET_WORD_BITS; bitset_windex woffset = eindex * TBITSET_ELT_WORDS; srcp[windex - woffset] &= ((bitset_word) 1 << (last_bit % BITSET_WORD_BITS)) - 1; windex++; for (; (windex - woffset) < TBITSET_ELT_WORDS; windex++) srcp[windex - woffset] = 0; } } } static void tbitset_ones (bitset dst) { for (bitset_windex j = 0; j < TBITSET_SIZE (dst); j++) { /* Create new elements if they cannot be found. Perhaps we should just add pointers to a ones element? */ tbitset_elt *elt = tbitset_elt_find (dst, j * TBITSET_ELT_BITS, TBITSET_CREATE); memset (TBITSET_WORDS (elt), -1, sizeof (TBITSET_WORDS (elt))); } TBITSET_NONZERO_SET (dst); tbitset_unused_clear (dst); } static bool tbitset_empty_p (bitset dst) { if (TBITSET_ZERO_P (dst)) return true; tbitset_elts *elts = TBITSET_ELTS (dst); for (bitset_windex j = 0; j < TBITSET_SIZE (dst); j++) { tbitset_elt *elt = elts[j]; if (elt) { if (!tbitset_elt_zero_p (elt)) return false; /* Do some weeding as we go. */ tbitset_elt_remove (dst, j); } } /* All the bits are zero. We could shrink the elts. For now just mark DST as known to be zero. */ TBITSET_ZERO_SET (dst); return true; } static void tbitset_not (bitset dst, bitset src) { tbitset_resize (dst, BITSET_NBITS_ (src)); for (bitset_windex j = 0; j < TBITSET_SIZE (src); j++) { /* Create new elements for dst if they cannot be found or substitute zero elements if src elements not found. */ tbitset_elt *selt = tbitset_elt_find (src, j * TBITSET_ELT_BITS, TBITSET_SUBST); tbitset_elt *delt = tbitset_elt_find (dst, j * TBITSET_ELT_BITS, TBITSET_CREATE); for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++) TBITSET_WORDS (delt)[i] = ~TBITSET_WORDS (selt)[i]; } TBITSET_NONZERO_SET (dst); tbitset_unused_clear (dst); } /* Is DST == DST | SRC? */ static bool tbitset_subset_p (bitset dst, bitset src) { tbitset_elts *selts = TBITSET_ELTS (src); tbitset_elts *delts = TBITSET_ELTS (dst); bitset_windex ssize = TBITSET_SIZE (src); bitset_windex dsize = TBITSET_SIZE (dst); for (bitset_windex j = 0; j < ssize; j++) { tbitset_elt *selt = j < ssize ? selts[j] : 0; tbitset_elt *delt = j < dsize ? delts[j] : 0; if (!selt && !delt) continue; if (!selt) selt = &tbitset_zero_elts[0]; if (!delt) delt = &tbitset_zero_elts[0]; for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++) if (TBITSET_WORDS (delt)[i] != (TBITSET_WORDS (selt)[i] | TBITSET_WORDS (delt)[i])) return false; } return true; } /* Is DST & SRC == 0? */ static bool tbitset_disjoint_p (bitset dst, bitset src) { tbitset_elts *selts = TBITSET_ELTS (src); tbitset_elts *delts = TBITSET_ELTS (dst); bitset_windex ssize = TBITSET_SIZE (src); bitset_windex dsize = TBITSET_SIZE (dst); for (bitset_windex j = 0; j < ssize; j++) { tbitset_elt *selt = j < ssize ? selts[j] : 0; tbitset_elt *delt = j < dsize ? delts[j] : 0; if (!selt || !delt) continue; for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++) if ((TBITSET_WORDS (selt)[i] & TBITSET_WORDS (delt)[i])) return false; } return true; } static bool tbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op) { bool changed = false; tbitset_resize (dst, max (BITSET_NBITS_ (src1), BITSET_NBITS_ (src2))); bitset_windex ssize1 = TBITSET_SIZE (src1); bitset_windex ssize2 = TBITSET_SIZE (src2); bitset_windex dsize = TBITSET_SIZE (dst); bitset_windex size = ssize1; if (size < ssize2) size = ssize2; tbitset_elts *selts1 = TBITSET_ELTS (src1); tbitset_elts *selts2 = TBITSET_ELTS (src2); tbitset_elts *delts = TBITSET_ELTS (dst); bitset_windex j = 0; for (j = 0; j < size; j++) { tbitset_elt *selt1 = j < ssize1 ? selts1[j] : 0; tbitset_elt *selt2 = j < ssize2 ? selts2[j] : 0; tbitset_elt *delt = j < dsize ? delts[j] : 0; if (!selt1 && !selt2) { if (delt) { changed = true; tbitset_elt_remove (dst, j); } continue; } if (!selt1) selt1 = &tbitset_zero_elts[0]; if (!selt2) selt2 = &tbitset_zero_elts[0]; if (!delt) delt = tbitset_elt_calloc (); else delts[j] = 0; bitset_word *srcp1 = TBITSET_WORDS (selt1); bitset_word *srcp2 = TBITSET_WORDS (selt2); bitset_word *dstp = TBITSET_WORDS (delt); switch (op) { default: abort (); case BITSET_OP_OR: for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ | *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_AND: for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ & *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_XOR: for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ ^ *srcp2++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; case BITSET_OP_ANDN: for (unsigned i = 0; i < TBITSET_ELT_WORDS; i++, dstp++) { bitset_word tmp = *srcp1++ & ~(*srcp2++); if (*dstp != tmp) { changed = true; *dstp = tmp; } } break; } if (!tbitset_elt_zero_p (delt)) tbitset_elt_add (dst, delt, j); else tbitset_elt_free (delt); } /* If we have elements of DST left over, free them all. */ for (; j < dsize; j++) { changed = true; tbitset_elt *delt = delts[j]; if (delt) tbitset_elt_remove (dst, j); } TBITSET_NONZERO_SET (dst); return changed; } static bool tbitset_and_cmp (bitset dst, bitset src1, bitset src2) { if (TBITSET_ZERO_P (src2)) { tbitset_weed (dst); bool changed = TBITSET_ZERO_P (dst); tbitset_zero (dst); return changed; } else if (TBITSET_ZERO_P (src1)) { tbitset_weed (dst); bool changed = TBITSET_ZERO_P (dst); tbitset_zero (dst); return changed; } else return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND); } static void tbitset_and (bitset dst, bitset src1, bitset src2) { tbitset_and_cmp (dst, src1, src2); } static bool tbitset_andn_cmp (bitset dst, bitset src1, bitset src2) { if (TBITSET_ZERO_P (src2)) return tbitset_copy_cmp (dst, src1); else if (TBITSET_ZERO_P (src1)) { tbitset_weed (dst); bool changed = TBITSET_ZERO_P (dst); tbitset_zero (dst); return changed; } else return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN); } static void tbitset_andn (bitset dst, bitset src1, bitset src2) { tbitset_andn_cmp (dst, src1, src2); } static bool tbitset_or_cmp (bitset dst, bitset src1, bitset src2) { if (TBITSET_ZERO_P (src2)) return tbitset_copy_cmp (dst, src1); else if (TBITSET_ZERO_P (src1)) return tbitset_copy_cmp (dst, src2); else return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR); } static void tbitset_or (bitset dst, bitset src1, bitset src2) { tbitset_or_cmp (dst, src1, src2); } static bool tbitset_xor_cmp (bitset dst, bitset src1, bitset src2) { if (TBITSET_ZERO_P (src2)) return tbitset_copy_cmp (dst, src1); else if (TBITSET_ZERO_P (src1)) return tbitset_copy_cmp (dst, src2); else return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR); } static void tbitset_xor (bitset dst, bitset src1, bitset src2) { tbitset_xor_cmp (dst, src1, src2); } static void tbitset_copy (bitset dst, bitset src) { if (BITSET_COMPATIBLE_ (dst, src)) tbitset_copy_ (dst, src); else bitset_copy_ (dst, src); } /* Vector of operations for linked-list bitsets. */ struct bitset_vtable tbitset_vtable = { tbitset_set, tbitset_reset, bitset_toggle_, tbitset_test, tbitset_resize, bitset_size_, bitset_count_, tbitset_empty_p, tbitset_ones, tbitset_zero, tbitset_copy, tbitset_disjoint_p, tbitset_equal_p, tbitset_not, tbitset_subset_p, tbitset_and, tbitset_and_cmp, tbitset_andn, tbitset_andn_cmp, tbitset_or, tbitset_or_cmp, tbitset_xor, tbitset_xor_cmp, bitset_and_or_, bitset_and_or_cmp_, bitset_andn_or_, bitset_andn_or_cmp_, bitset_or_and_, bitset_or_and_cmp_, tbitset_list, tbitset_list_reverse, tbitset_free, BITSET_TABLE }; /* Return size of initial structure. */ size_t tbitset_bytes (MAYBE_UNUSED bitset_bindex n_bits) { return sizeof (struct tbitset_struct); } /* Initialize a bitset. */ bitset tbitset_init (bitset bset, bitset_bindex n_bits) { bset->b.vtable = &tbitset_vtable; bset->b.csize = TBITSET_ELT_WORDS; TBITSET_ZERO_SET (bset); TBITSET_ASIZE (bset) = 0; TBITSET_ELTS (bset) = 0; tbitset_resize (bset, n_bits); return bset; } void tbitset_release_memory (void) { tbitset_free_list = 0; if (tbitset_obstack_init) { tbitset_obstack_init = false; obstack_free (&tbitset_obstack, NULL); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/table.h����������������������������������������������������������0000664�0000000�0000000�00000002011�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support tbitsets. Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_TABLE_H #define _BITSET_TABLE_H #include "bitset.h" size_t tbitset_bytes (bitset_bindex); bitset tbitset_init (bitset, bitset_bindex); void tbitset_release_memory (void); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/vector.c���������������������������������������������������������0000664�0000000�0000000�00000057065�14110572173�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable array bitsets. Copyright (C) 2002-2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 "bitset/vector.h" #include <stdlib.h> #include <string.h> #include "xalloc.h" /* This file implements variable size bitsets stored as a variable length array of words. Any unused bits in the last word must be zero. Note that binary or ternary operations assume that each bitset operand has the same size. */ static void vbitset_unused_clear (bitset); static void vbitset_set (bitset, bitset_bindex); static void vbitset_reset (bitset, bitset_bindex); static bool vbitset_test (bitset, bitset_bindex); static bitset_bindex vbitset_list (bitset, bitset_bindex *, bitset_bindex, bitset_bindex *); static bitset_bindex vbitset_list_reverse (bitset, bitset_bindex *, bitset_bindex, bitset_bindex *); #define VBITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) #define VBITSET_WORDS(X) ((X)->b.cdata) #define VBITSET_SIZE(X) ((X)->b.csize) #define VBITSET_ASIZE(X) ((X)->v.size) #undef min #undef max #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b)) static bitset_bindex vbitset_resize (bitset src, bitset_bindex n_bits) { if (n_bits == BITSET_NBITS_ (src)) return n_bits; bitset_windex oldsize = VBITSET_SIZE (src); bitset_windex newsize = VBITSET_N_WORDS (n_bits); if (oldsize < newsize) { /* The bitset needs to grow. If we already have enough memory allocated, then just zero what we need. */ if (newsize > VBITSET_ASIZE (src)) { /* We need to allocate more memory. When oldsize is non-zero this means that we are changing the size, so grow the bitset 25% larger than requested to reduce number of reallocations. */ bitset_windex size = oldsize == 0 ? newsize : newsize + newsize / 4; VBITSET_WORDS (src) = xrealloc (VBITSET_WORDS (src), size * sizeof (bitset_word)); VBITSET_ASIZE (src) = size; } memset (VBITSET_WORDS (src) + oldsize, 0, (newsize - oldsize) * sizeof (bitset_word)); } else { /* The bitset needs to shrink. There's no point deallocating the memory unless it is shrinking by a reasonable amount. */ if ((oldsize - newsize) >= oldsize / 2) { void *p = realloc (VBITSET_WORDS (src), newsize * sizeof (bitset_word)); if (p) { VBITSET_WORDS (src) = p; VBITSET_ASIZE (src) = newsize; } } /* Need to prune any excess bits. FIXME. */ } VBITSET_SIZE (src) = newsize; BITSET_NBITS_ (src) = n_bits; return n_bits; } /* Set bit BITNO in bitset DST. */ static void vbitset_set (bitset dst, bitset_bindex bitno) { bitset_windex windex = bitno / BITSET_WORD_BITS; /* Perhaps we should abort. The user should explicitly call bitset_resize since this will not catch the case when we set a bit larger than the current size but smaller than the allocated size. */ vbitset_resize (dst, bitno); dst->b.cdata[windex - dst->b.cindex] |= (bitset_word) 1 << (bitno % BITSET_WORD_BITS); } /* Reset bit BITNO in bitset DST. */ static void vbitset_reset (MAYBE_UNUSED bitset dst, MAYBE_UNUSED bitset_bindex bitno) { /* We must be accessing outside the cache so the bit is zero anyway. */ } /* Test bit BITNO in bitset SRC. */ static bool vbitset_test (MAYBE_UNUSED bitset src, MAYBE_UNUSED bitset_bindex bitno) { /* We must be accessing outside the cache so the bit is zero anyway. */ return false; } /* Find list of up to NUM bits set in BSET in reverse order, starting from and including NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex vbitset_list_reverse (bitset src, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { /* FIXME: almost a duplicate of abitset_list_reverse. Factor? */ bitset_bindex rbitno = *next; bitset_word *srcp = VBITSET_WORDS (src); bitset_bindex n_bits = BITSET_SIZE_ (src); /* If num is 1, we could speed things up with a binary search of the word of interest. */ if (rbitno >= n_bits) return 0; bitset_bindex count = 0; bitset_bindex bitno = n_bits - (rbitno + 1); bitset_windex windex = bitno / BITSET_WORD_BITS; unsigned bitcnt = bitno % BITSET_WORD_BITS; bitset_bindex bitoff = windex * BITSET_WORD_BITS; do { bitset_word word = srcp[windex]; if (bitcnt + 1 < BITSET_WORD_BITS) /* We're starting in the middle of a word: smash bits to ignore. */ word &= ((bitset_word) 1 << (bitcnt + 1)) - 1; BITSET_FOR_EACH_BIT_REVERSE(pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = n_bits - (bitoff + pos); return count; } } bitoff -= BITSET_WORD_BITS; bitcnt = BITSET_WORD_BITS - 1; } while (windex--); *next = n_bits - (bitoff + 1); return count; } /* Find list of up to NUM bits set in BSET starting from and including *NEXT and store in array LIST. Return with actual number of bits found and with *NEXT indicating where search stopped. */ static bitset_bindex vbitset_list (bitset src, bitset_bindex *list, bitset_bindex num, bitset_bindex *next) { /* FIXME: almost a duplicate of abitset_list. Factor? */ bitset_windex size = VBITSET_SIZE (src); bitset_word *srcp = VBITSET_WORDS (src); bitset_bindex bitno = *next; bitset_bindex count = 0; bitset_windex windex; bitset_bindex bitoff; if (!bitno) { /* Many bitsets are zero, so make this common case fast. */ for (windex = 0; windex < size && !srcp[windex]; windex++) continue; if (windex >= size) return 0; /* If num is 1, we could speed things up with a binary search of the current word. */ bitoff = windex * BITSET_WORD_BITS; } else { if (bitno >= BITSET_SIZE_ (src)) return 0; windex = bitno / BITSET_WORD_BITS; bitno = bitno % BITSET_WORD_BITS; if (bitno) { /* Handle the case where we start within a word. Most often, this is executed with large bitsets with many set bits where we filled the array on the previous call to this function. */ bitoff = windex * BITSET_WORD_BITS; bitset_word word = srcp[windex] >> bitno; bitno = bitoff + bitno; BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitno + pos; if (count >= num) { *next = bitno + pos + 1; return count; } } windex++; } bitoff = windex * BITSET_WORD_BITS; } for (; windex < size; windex++, bitoff += BITSET_WORD_BITS) { bitset_word word = srcp[windex]; if (!word) continue; /* Is there enough room to avoid checking in each iteration? */ if ((count + BITSET_WORD_BITS) < num) BITSET_FOR_EACH_BIT (pos, word) list[count++] = bitoff + pos; else BITSET_FOR_EACH_BIT (pos, word) { list[count++] = bitoff + pos; if (count >= num) { *next = bitoff + pos + 1; return count; } } } *next = bitoff; return count; } /* Ensure that any unused bits within the last word are clear. */ static inline void vbitset_unused_clear (bitset dst) { unsigned last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS; if (last_bit) VBITSET_WORDS (dst)[VBITSET_SIZE (dst) - 1] &= ((bitset_word) 1 << last_bit) - 1; } static void vbitset_ones (bitset dst) { bitset_word *dstp = VBITSET_WORDS (dst); unsigned bytes = sizeof (bitset_word) * VBITSET_SIZE (dst); memset (dstp, -1, bytes); vbitset_unused_clear (dst); } static void vbitset_zero (bitset dst) { bitset_word *dstp = VBITSET_WORDS (dst); unsigned bytes = sizeof (bitset_word) * VBITSET_SIZE (dst); memset (dstp, 0, bytes); } static bool vbitset_empty_p (bitset dst) { bitset_word *dstp = VBITSET_WORDS (dst); for (unsigned i = 0; i < VBITSET_SIZE (dst); i++) if (dstp[i]) return false; return true; } static void vbitset_copy1 (bitset dst, bitset src) { if (src == dst) return; vbitset_resize (dst, BITSET_SIZE_ (src)); bitset_word *srcp = VBITSET_WORDS (src); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex ssize = VBITSET_SIZE (src); bitset_windex dsize = VBITSET_SIZE (dst); memcpy (dstp, srcp, sizeof (bitset_word) * ssize); memset (dstp + sizeof (bitset_word) * ssize, 0, sizeof (bitset_word) * (dsize - ssize)); } static void vbitset_not (bitset dst, bitset src) { vbitset_resize (dst, BITSET_SIZE_ (src)); bitset_word *srcp = VBITSET_WORDS (src); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex ssize = VBITSET_SIZE (src); bitset_windex dsize = VBITSET_SIZE (dst); for (unsigned i = 0; i < ssize; i++) *dstp++ = ~(*srcp++); vbitset_unused_clear (dst); memset (dstp + sizeof (bitset_word) * ssize, 0, sizeof (bitset_word) * (dsize - ssize)); } static bool vbitset_equal_p (bitset dst, bitset src) { bitset_word *srcp = VBITSET_WORDS (src); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex ssize = VBITSET_SIZE (src); bitset_windex dsize = VBITSET_SIZE (dst); unsigned i; for (i = 0; i < min (ssize, dsize); i++) if (*srcp++ != *dstp++) return false; if (ssize > dsize) { for (; i < ssize; i++) if (*srcp++) return false; } else { for (; i < dsize; i++) if (*dstp++) return false; } return true; } static bool vbitset_subset_p (bitset dst, bitset src) { bitset_word *srcp = VBITSET_WORDS (src); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex ssize = VBITSET_SIZE (src); bitset_windex dsize = VBITSET_SIZE (dst); unsigned i; for (i = 0; i < min (ssize, dsize); i++, dstp++, srcp++) if (*dstp != (*srcp | *dstp)) return false; if (ssize > dsize) for (; i < ssize; i++) if (*srcp++) return false; return true; } static bool vbitset_disjoint_p (bitset dst, bitset src) { bitset_word *srcp = VBITSET_WORDS (src); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex ssize = VBITSET_SIZE (src); bitset_windex dsize = VBITSET_SIZE (dst); for (unsigned i = 0; i < min (ssize, dsize); i++) if (*srcp++ & *dstp++) return false; return true; } static void vbitset_and (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); for (unsigned i = 0; i < min (ssize1, ssize2); i++) *dstp++ = *src1p++ & *src2p++; memset (dstp, 0, sizeof (bitset_word) * (dsize - min (ssize1, ssize2))); } static bool vbitset_and_cmp (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bool changed = false; unsigned i; for (i = 0; i < min (ssize1, ssize2); i++, dstp++) { bitset_word tmp = *src1p++ & *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } if (ssize2 > ssize1) { src1p = src2p; ssize1 = ssize2; } for (; i < ssize1; i++, dstp++) { if (*dstp != 0) { changed = true; *dstp = 0; } } memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); return changed; } static void vbitset_andn (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); unsigned i; for (i = 0; i < min (ssize1, ssize2); i++) *dstp++ = *src1p++ & ~(*src2p++); if (ssize2 > ssize1) { for (; i < ssize2; i++) *dstp++ = 0; memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2)); } else { for (; i < ssize1; i++) *dstp++ = *src1p++; memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); } } static bool vbitset_andn_cmp (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bool changed = false; unsigned i; for (i = 0; i < min (ssize1, ssize2); i++, dstp++) { bitset_word tmp = *src1p++ & ~(*src2p++); if (*dstp != tmp) { changed = true; *dstp = tmp; } } if (ssize2 > ssize1) { for (; i < ssize2; i++, dstp++) { if (*dstp != 0) { changed = true; *dstp = 0; } } memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2)); } else { for (; i < ssize1; i++, dstp++) { bitset_word tmp = *src1p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); } return changed; } static void vbitset_or (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); unsigned i; for (i = 0; i < min (ssize1, ssize2); i++) *dstp++ = *src1p++ | *src2p++; if (ssize2 > ssize1) { src1p = src2p; ssize1 = ssize2; } for (; i < ssize1; i++) *dstp++ = *src1p++; memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); } static bool vbitset_or_cmp (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bool changed = false; unsigned i; for (i = 0; i < min (ssize1, ssize2); i++, dstp++) { bitset_word tmp = *src1p++ | *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } if (ssize2 > ssize1) { src1p = src2p; ssize1 = ssize2; } for (; i < ssize1; i++, dstp++) { bitset_word tmp = *src1p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); return changed; } static void vbitset_xor (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); unsigned i; for (i = 0; i < min (ssize1, ssize2); i++) *dstp++ = *src1p++ ^ *src2p++; if (ssize2 > ssize1) { src1p = src2p; ssize1 = ssize2; } for (; i < ssize1; i++) *dstp++ = *src1p++; memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); } static bool vbitset_xor_cmp (bitset dst, bitset src1, bitset src2) { vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2))); bitset_windex dsize = VBITSET_SIZE (dst); bitset_windex ssize1 = VBITSET_SIZE (src1); bitset_windex ssize2 = VBITSET_SIZE (src2); bitset_word *dstp = VBITSET_WORDS (dst); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bool changed = false; unsigned i; for (i = 0; i < min (ssize1, ssize2); i++, dstp++) { bitset_word tmp = *src1p++ ^ *src2p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } if (ssize2 > ssize1) { src1p = src2p; ssize1 = ssize2; } for (; i < ssize1; i++, dstp++) { bitset_word tmp = *src1p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1)); return changed; } /* FIXME, these operations need fixing for different size bitsets. */ static void vbitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) { bitset_and_or_ (dst, src1, src2, src3); return; } vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); for (unsigned i = 0; i < size; i++) *dstp++ = (*src1p++ & *src2p++) | *src3p++; } static bool vbitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) return bitset_and_or_cmp_ (dst, src1, src2, src3); vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); bool changed = false; for (unsigned i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ & *src2p++) | *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void vbitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) { bitset_andn_or_ (dst, src1, src2, src3); return; } vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); for (unsigned i = 0; i < size; i++) *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++; } static bool vbitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) return bitset_andn_or_cmp_ (dst, src1, src2, src3); vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); bool changed = false; for (unsigned i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void vbitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) { bitset_or_and_ (dst, src1, src2, src3); return; } vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); for (unsigned i = 0; i < size; i++) *dstp++ = (*src1p++ | *src2p++) & *src3p++; } static bool vbitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3) { if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2) || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3)) return bitset_or_and_cmp_ (dst, src1, src2, src3); vbitset_resize (dst, BITSET_NBITS_ (src1)); bitset_word *src1p = VBITSET_WORDS (src1); bitset_word *src2p = VBITSET_WORDS (src2); bitset_word *src3p = VBITSET_WORDS (src3); bitset_word *dstp = VBITSET_WORDS (dst); bitset_windex size = VBITSET_SIZE (dst); bool changed = false; unsigned i; for (i = 0; i < size; i++, dstp++) { bitset_word tmp = (*src1p++ | *src2p++) & *src3p++; if (*dstp != tmp) { changed = true; *dstp = tmp; } } return changed; } static void vbitset_copy (bitset dst, bitset src) { if (BITSET_COMPATIBLE_ (dst, src)) vbitset_copy1 (dst, src); else bitset_copy_ (dst, src); } static void vbitset_free (bitset bset) { free (VBITSET_WORDS (bset)); } /* Vector of operations for multiple word bitsets. */ struct bitset_vtable vbitset_vtable = { vbitset_set, vbitset_reset, bitset_toggle_, vbitset_test, vbitset_resize, bitset_size_, bitset_count_, vbitset_empty_p, vbitset_ones, vbitset_zero, vbitset_copy, vbitset_disjoint_p, vbitset_equal_p, vbitset_not, vbitset_subset_p, vbitset_and, vbitset_and_cmp, vbitset_andn, vbitset_andn_cmp, vbitset_or, vbitset_or_cmp, vbitset_xor, vbitset_xor_cmp, vbitset_and_or, vbitset_and_or_cmp, vbitset_andn_or, vbitset_andn_or_cmp, vbitset_or_and, vbitset_or_and_cmp, vbitset_list, vbitset_list_reverse, vbitset_free, BITSET_VECTOR }; size_t vbitset_bytes (MAYBE_UNUSED bitset_bindex n_bits) { return sizeof (struct vbitset_struct); } bitset vbitset_init (bitset bset, bitset_bindex n_bits) { bset->b.vtable = &vbitset_vtable; bset->b.cindex = 0; VBITSET_SIZE (bset) = 0; vbitset_resize (bset, n_bits); return bset; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitset/vector.h���������������������������������������������������������0000664�0000000�0000000�00000001746�14110572173�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to support vbitsets. Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSET_VECTOR_H #define _BITSET_VECTOR_H #include "bitset.h" size_t vbitset_bytes (bitset_bindex); bitset vbitset_init (bitset, bitset_bindex); #endif ��������������������������gnulib-20210822~d383792/lib/bitsetv.c���������������������������������������������������������������0000664�0000000�0000000�00000012002�14110572173�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bitset vectors. Copyright (C) 2001-2002, 2004-2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. This 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 "bitsetv.h" #include <stdlib.h> #include "xalloc.h" /* Create a vector of N_VECS bitsets, each of N_BITS, and of type TYPE. */ bitset * bitsetv_alloc (bitset_bindex n_vecs, bitset_bindex n_bits, enum bitset_type type) { /* Determine number of bytes for each set. */ size_t bytes = bitset_bytes (type, n_bits); /* If size calculation overflows, memory is exhausted. */ if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs) xalloc_die (); /* Allocate vector table at head of bitset array. */ size_t vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1; vector_bytes -= vector_bytes % bytes; bitset *bsetv = xzalloc (vector_bytes + bytes * n_vecs); bitset_bindex i = 0; for (i = 0; i < n_vecs; i++) { bsetv[i] = (bitset) (void *) ((char *) bsetv + vector_bytes + i * bytes); bitset_init (bsetv[i], n_bits, type); } /* Null terminate table. */ bsetv[i] = 0; return bsetv; } /* Create a vector of N_VECS bitsets, each of N_BITS, and with attribute hints specified by ATTR. */ bitset * bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned attr) { enum bitset_type type = bitset_type_choose (n_bits, attr); return bitsetv_alloc (n_vecs, n_bits, type); } /* Free bitset vector BSETV. */ void bitsetv_free (bitsetv bsetv) { if (bsetv) { for (bitset_bindex i = 0; bsetv[i]; i++) BITSET_FREE_ (bsetv[i]); free (bsetv); } } /* Zero a vector of bitsets. */ void bitsetv_zero (bitsetv bsetv) { for (bitset_bindex i = 0; bsetv[i]; i++) bitset_zero (bsetv[i]); } /* Set a vector of bitsets to ones. */ void bitsetv_ones (bitsetv bsetv) { for (bitset_bindex i = 0; bsetv[i]; i++) bitset_ones (bsetv[i]); } /* Given a vector BSETV of N bitsets of size N, modify its contents to be the transitive closure of what was given. */ void bitsetv_transitive_closure (bitsetv bsetv) { for (bitset_bindex i = 0; bsetv[i]; i++) for (bitset_bindex j = 0; bsetv[j]; j++) if (bitset_test (bsetv[j], i)) bitset_or (bsetv[j], bsetv[j], bsetv[i]); } /* Given a vector BSETV of N bitsets of size N, modify its contents to be the reflexive transitive closure of what was given. This is the same as transitive closure but with all bits on the diagonal of the bit matrix set. */ void bitsetv_reflexive_transitive_closure (bitsetv bsetv) { bitsetv_transitive_closure (bsetv); for (bitset_bindex i = 0; bsetv[i]; i++) bitset_set (bsetv[i], i); } /* Dump the contents of a bitset vector BSETV with N_VECS elements to FILE. */ void bitsetv_dump (FILE *file, char const *title, char const *subtitle, bitsetv bsetv) { fprintf (file, "%s\n", title); for (bitset_windex i = 0; bsetv[i]; i++) { fprintf (file, "%s %lu\n", subtitle, (unsigned long) i); bitset_dump (file, bsetv[i]); } fprintf (file, "\n"); } void debug_bitsetv (bitsetv bsetv) { for (bitset_windex i = 0; bsetv[i]; i++) { fprintf (stderr, "%lu: ", (unsigned long) i); debug_bitset (bsetv[i]); } fprintf (stderr, "\n"); } /*--------------------------------------------------------. | Display the MATRIX array of SIZE bitsets of size SIZE. | `--------------------------------------------------------*/ void bitsetv_matrix_dump (FILE *out, const char *title, bitsetv bset) { bitset_bindex hsize = bitset_size (bset[0]); /* Title. */ fprintf (out, "%s BEGIN\n", title); /* Column numbers. */ fputs (" ", out); for (bitset_bindex i = 0; i < hsize; ++i) putc (i / 10 ? '0' + i / 10 : ' ', out); putc ('\n', out); fputs (" ", out); for (bitset_bindex i = 0; i < hsize; ++i) fprintf (out, "%d", (int) (i % 10)); putc ('\n', out); /* Bar. */ fputs (" .", out); for (bitset_bindex i = 0; i < hsize; ++i) putc ('-', out); fputs (".\n", out); /* Contents. */ for (bitset_bindex i = 0; bset[i]; ++i) { fprintf (out, "%2lu|", (unsigned long) i); for (bitset_bindex j = 0; j < hsize; ++j) fputs (bitset_test (bset[i], j) ? "1" : " ", out); fputs ("|\n", out); } /* Bar. */ fputs (" `", out); for (bitset_bindex i = 0; i < hsize; ++i) putc ('-', out); fputs ("'\n", out); /* End title. */ fprintf (out, "%s END\n\n", title); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/bitsetv.h���������������������������������������������������������������0000664�0000000�0000000�00000004357�14110572173�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bitset vectors. Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). This 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 _BITSETV_H #define _BITSETV_H #include "bitset.h" typedef bitset * bitsetv; /* Free vector of bitsets. Do nothing if NULL. */ void bitsetv_free (bitsetv); /* Create a vector of N_VECS bitsets, each of N_BITS, and of type TYPE. */ bitsetv bitsetv_alloc (bitset_bindex, bitset_bindex, enum bitset_type) _GL_ATTRIBUTE_DEALLOC (bitsetv_free, 1); /* Create a vector of N_VECS bitsets, each of N_BITS, and with attribute hints specified by ATTR. */ bitsetv bitsetv_create (bitset_bindex, bitset_bindex, unsigned) _GL_ATTRIBUTE_DEALLOC (bitsetv_free, 1); /* Zero vector of bitsets. */ void bitsetv_zero (bitsetv); /* Set vector of bitsets. */ void bitsetv_ones (bitsetv); /* Given a vector BSETV of N bitsets of size N, modify its contents to be the transitive closure of what was given. */ void bitsetv_transitive_closure (bitsetv); /* Given a vector BSETV of N bitsets of size N, modify its contents to be the reflexive transitive closure of what was given. This is the same as transitive closure but with all bits on the diagonal of the bit matrix set. */ void bitsetv_reflexive_transitive_closure (bitsetv); /* Dump vector of bitsets. */ void bitsetv_dump (FILE *, const char *, const char *, bitsetv); /* Function to debug vector of bitsets from debugger. */ void debug_bitsetv (bitsetv); /* Dump vector of bitsets as a matrix. */ void bitsetv_matrix_dump (FILE *, const char *, bitsetv); #endif /* _BITSETV_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/btoc32.c����������������������������������������������������������������0000664�0000000�0000000�00000002741�14110572173�0016311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to 32-bit wide character. Copyright (C) 2020-2021 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 <stdio.h> #include <string.h> wint_t btoc32 (int c) { #if HAVE_WORKING_MBRTOC32 && !defined __GLIBC__ /* 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; memset (&state, '\0', sizeof (mbstate_t)); 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. */ return btowc (c); #endif } �������������������������������gnulib-20210822~d383792/lib/btowc.c�����������������������������������������������������������������0000664�0000000�0000000�00000002131�14110572173�0016324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> wint_t btowc (int c) { if (c != EOF) { char buf[1]; wchar_t wc; buf[0] = c; if (mbtowc (&wc, buf, 1) >= 0) return wc; } return WEOF; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/byteswap.in.h�����������������������������������������������������������0000664�0000000�0000000�00000003745�14110572173�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* byteswap.h - Byte swapping Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. Written by Oskar Liljeblad <oskar@osk.mine.nu>, 2005. 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 _GL_BYTESWAP_H #define _GL_BYTESWAP_H /* Given an unsigned 16-bit argument X, return the value corresponding to X with reversed byte order. */ #define bswap_16(x) ((((x) & 0x00FF) << 8) | \ (((x) & 0xFF00) >> 8)) /* Given an unsigned 32-bit argument X, return the value corresponding to X with reversed byte order. */ #define bswap_32(x) ((((x) & 0x000000FF) << 24) | \ (((x) & 0x0000FF00) << 8) | \ (((x) & 0x00FF0000) >> 8) | \ (((x) & 0xFF000000) >> 24)) /* Given an unsigned 64-bit argument X, return the value corresponding to X with reversed byte order. */ #define bswap_64(x) ((((x) & 0x00000000000000FFULL) << 56) | \ (((x) & 0x000000000000FF00ULL) << 40) | \ (((x) & 0x0000000000FF0000ULL) << 24) | \ (((x) & 0x00000000FF000000ULL) << 8) | \ (((x) & 0x000000FF00000000ULL) >> 8) | \ (((x) & 0x0000FF0000000000ULL) >> 24) | \ (((x) & 0x00FF000000000000ULL) >> 40) | \ (((x) & 0xFF00000000000000ULL) >> 56)) #endif /* _GL_BYTESWAP_H */ ���������������������������gnulib-20210822~d383792/lib/c++defs.h���������������������������������������������������������������0000664�0000000�0000000�00000035577�14110572173�0016451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* C++ compatible function declaration macros. Copyright (C) 2010-2021 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 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/>. */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA (func, rettype, parameters); is to be used when func is a Microsoft deprecated alias, on native Windows. It declares a C++ alias called GNULIB_NAMESPACE::func that redirects to _func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_MDA(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); is like _GL_CXXALIAS_MDA (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-asprintf.c������������������������������������������������������������0000664�0000000�0000000�00000002046�14110572173�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings in C locale. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 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 <config.h> /* Specification. */ #include "c-vasprintf.h" #include <stdarg.h> int c_asprintf (char **resultp, const char *format, ...) { va_list args; int result; va_start (args, format); result = c_vasprintf (resultp, format, args); va_end (args); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-ctype.c���������������������������������������������������������������0000664�0000000�0000000�00000001513�14110572173�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. Copyright (C) 2003-2021 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/>. */ #include <config.h> #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-ctype.h���������������������������������������������������������������0000664�0000000�0000000�00000022467�14110572173�0016575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. These functions work like the corresponding functions in <ctype.h>, except that they have the C (POSIX) locale hardwired, whereas the <ctype.h> functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2021 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/>. */ #ifndef C_CTYPE_H #define C_CTYPE_H #include <stdbool.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ 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 '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in <ctype.h>, which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a <ctype.h> function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-dtoastr.c�������������������������������������������������������������0000664�0000000�0000000�00000001453�14110572173�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'double' to accurate string in C locale. Copyright (C) 2020-2021 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/>. */ #define LENGTH 2 #define C_LOCALE 1 #include "ftoastr.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-ldtoastr.c������������������������������������������������������������0000664�0000000�0000000�00000001460�14110572173�0017266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'long double' to accurate string in C locale. Copyright (C) 2020-2021 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/>. */ #define LENGTH 3 #define C_LOCALE 1 #include "ftoastr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-snprintf.c������������������������������������������������������������0000664�0000000�0000000�00000004022�14110572173�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings in C locale. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. Written by Simon Josefsson and Paul Eggert. Modified for C locale by Ben Pfaff. This 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, 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> /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "c-vasnprintf.h" /* Print formatted output to string STR. Similar to sprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. Formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ int c_snprintf (char *str, size_t size, const char *format, ...) { char *output; size_t len; size_t lenbuf = size; va_list args; va_start (args, format); output = c_vasnprintf (str, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (INT_MAX < len) { errno = EOVERFLOW; return -1; } return len; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-snprintf.h������������������������������������������������������������0000664�0000000�0000000�00000002167�14110572173�0017307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* snprintf in C locale. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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, 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 _C_SNPRINTF_H #define _C_SNPRINTF_H /* Get size_t. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif extern int c_snprintf (char *restrict str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); #ifdef __cplusplus } #endif #endif /* _C_SNPRINTF_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-stack.c���������������������������������������������������������������0000664�0000000�0000000�00000015200�14110572173�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stack overflow handling. Copyright (C) 2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* NOTES: A program that uses alloca, dynamic arrays, or large local variables may extend the stack by more than a page at a time. If so, when the stack overflows the operating system may not detect the overflow until the program uses the array, and this module may incorrectly report a program error instead of a stack overflow. To avoid this problem, allocate only small objects on the stack; a program should be OK if it limits single allocations to a page or less. Allocate larger arrays in static storage, or on the heap (e.g., with malloc). Yes, this is a pain, but we don't know of any better solution that is portable. No attempt has been made to deal with multithreaded applications. */ #include <config.h> #include "c-stack.h" #include <errno.h> #include <inttypes.h> #include <signal.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if DEBUG # include <stdio.h> #endif #include <sigsegv.h> #include "exitfail.h" #include "getprogname.h" #include "idx.h" #include "ignore-value.h" #include "gettext.h" #define _(msgid) gettext (msgid) #if HAVE_STACK_OVERFLOW_RECOVERY /* Storage for the alternate signal stack. 64 KiB is not too large for Gnulib-using apps, and is large enough for all known platforms. Smaller sizes may run into trouble. For example, libsigsegv 2.6 through 2.8 have a bug where some architectures use more than the Linux default of an 8 KiB alternate stack when deciding if a fault was caused by stack overflow. */ static max_align_t alternate_signal_stack[(64 * 1024 + sizeof (max_align_t) - 1) / sizeof (max_align_t)]; /* The user-specified action to take when a SEGV-related program error or stack overflow occurs. */ static _GL_ASYNC_SAFE void (* volatile segv_action) (int); /* Translated messages for program errors and stack overflow. Do not translate them in the signal handler, since gettext is not async-signal-safe. */ static char const * volatile program_error_message; static char const * volatile stack_overflow_message; /* Output an error message, then exit with status EXIT_FAILURE if it appears to have been a stack overflow, or with a core dump otherwise. This function is async-signal-safe. */ static char const * volatile progname; static _GL_ASYNC_SAFE _Noreturn void die (int signo) { segv_action (signo); char const *message = signo ? program_error_message : stack_overflow_message; /* If the message is short, write it all at once to avoid interleaving with other messages. Avoid writev as it is not documented to be async-signal-safe. */ size_t prognamelen = strlen (progname); size_t messagelen = strlen (message); static char const separator[] = {':', ' '}; char buf[sizeof alternate_signal_stack / 16 + sizeof separator]; idx_t buflen; if (prognamelen + messagelen < sizeof buf - sizeof separator) { char *p = mempcpy (buf, progname, prognamelen); p = mempcpy (p, separator, sizeof separator); p = mempcpy (p, message, messagelen); *p++ = '\n'; buflen = p - buf; } else { ignore_value (write (STDERR_FILENO, progname, prognamelen)); ignore_value (write (STDERR_FILENO, separator, sizeof separator)); ignore_value (write (STDERR_FILENO, message, messagelen)); buf[0] = '\n'; buflen = 1; } ignore_value (write (STDERR_FILENO, buf, buflen)); if (! signo) _exit (exit_failure); raise (signo); abort (); } static _GL_ASYNC_SAFE void null_action (_GL_UNUSED int signo) { } /* Pacify GCC 9.3.1, which otherwise would complain about segv_handler. */ # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # endif /* Nonzero if general segv handler could not be installed. */ static volatile int segv_handler_missing; /* Handle a segmentation violation and exit if it cannot be stack overflow. This function is async-signal-safe. */ static _GL_ASYNC_SAFE int segv_handler (_GL_UNUSED void *address, int serious) { # if DEBUG { char buf[1024]; int saved_errno = errno; ignore_value (write (STDERR_FILENO, buf, sprintf (buf, "segv_handler serious=%d\n", serious))); errno = saved_errno; } # endif /* If this fault is not serious, return 0 to let the stack overflow handler take a shot at it. */ if (!serious) return 0; die (SIGSEGV); } /* Handle a segmentation violation that is likely to be a stack overflow and exit. This function is async-signal-safe. */ static _GL_ASYNC_SAFE _Noreturn void overflow_handler (int emergency, _GL_UNUSED stackoverflow_context_t context) { # if DEBUG { char buf[1024]; ignore_value (write (STDERR_FILENO, buf, sprintf (buf, ("overflow_handler emergency=%d" " segv_handler_missing=%d\n"), emergency, segv_handler_missing))); } # endif die ((!emergency || segv_handler_missing) ? 0 : SIGSEGV); } int c_stack_action (_GL_ASYNC_SAFE void (*action) (int)) { segv_action = action ? action : null_action; program_error_message = _("program error"); stack_overflow_message = _("stack overflow"); progname = getprogname (); /* Always install the overflow handler. */ if (stackoverflow_install_handler (overflow_handler, alternate_signal_stack, sizeof alternate_signal_stack)) { errno = ENOTSUP; return -1; } /* Try installing a general handler; if it fails, then treat all segv as stack overflow. */ segv_handler_missing = sigsegv_install_handler (segv_handler); return 0; } #else /* !HAVE_STACK_OVERFLOW_RECOVERY */ int c_stack_action (_GL_ASYNC_SAFE void (*action) (_GL_UNUSED int) ) { errno = ENOTSUP; return -1; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-stack.h���������������������������������������������������������������0000664�0000000�0000000�00000004340�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stack overflow handling. Copyright (C) 2002, 2004, 2008-2021 Free Software Foundation, Inc. This 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/>. */ /* Set up ACTION so that it is invoked on C stack overflow and on other, stack-unrelated, segmentation violation. Return -1 (setting errno) if this cannot be done. When a stack overflow or segmentation violation occurs: 1) ACTION is called. It is passed an argument equal to - 0, for a stack overflow, - SIGSEGV, for a segmentation violation that does not appear related to stack overflow. On many platforms the two cases are hard to distinguish; when in doubt, zero is passed. 2) If ACTION returns, a message is written to standard error, and the program is terminated: in the case of stack overflow, with exit code exit_failure (see "exitfail.h"), otherwise through a signal SIGSEGV. A null ACTION acts like an action that does nothing. Restrictions: - ACTION must be async-signal-safe. - ACTION together with its callees must not require more than 64 KiB of stack space. - ACTION must not create and then invoke nested functions <https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html>, because this implementation does not guarantee an executable stack. - ACTION should not call longjmp, because this implementation does not guarantee that it is safe to return to the original stack. This function may install a handler for the SIGSEGV signal or for the SIGBUS signal or exercise other system dependent exception handling APIs. */ extern int c_stack_action (_GL_ASYNC_SAFE void (* /*action*/) (int)); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strcase.h�������������������������������������������������������������0000664�0000000�0000000�00000004056�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison functions in C locale. Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2021 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/>. */ #ifndef C_STRCASE_H #define C_STRCASE_H #include <stddef.h> /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. More precisely, one of the string arguments must be an ASCII string; the other one can also contain non-ASCII characters (but then the comparison result will be nonzero). */ #ifdef __cplusplus extern "C" { #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; /* Compare no more than N characters of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* C_STRCASE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strcasecmp.c����������������������������������������������������������0000664�0000000�0000000�00000003066�14110572173�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strcasecmp (const char *s1, const char *s2) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strcaseeq.h�����������������������������������������������������������0000664�0000000�0000000�00000010526�14110572173�0017434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized case-insensitive string comparison in C locale. Copyright (C) 2001-2002, 2007, 2009-2021 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>. */ #include "c-strcase.h" #include "c-ctype.h" /* STRCASEEQ allows to optimize string comparison with a small literal string. STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0) is semantically equivalent to c_strcasecmp (s, "UTF-8") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ /* Case insensitive comparison of ASCII characters. */ # if C_CTYPE_ASCII # define CASEEQ(other,upper) \ (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) # else # define CASEEQ(other,upper) \ (c_toupper (other) == (upper)) # endif static inline int strcaseeq9 (const char *s1, const char *s2) { return c_strcasecmp (s1 + 9, s2 + 9) == 0; } static inline int strcaseeq8 (const char *s1, const char *s2, char s28) { if (CASEEQ (s1[8], s28)) { if (s28 == 0) return 1; else return strcaseeq9 (s1, s2); } else return 0; } static inline int strcaseeq7 (const char *s1, const char *s2, char s27, char s28) { if (CASEEQ (s1[7], s27)) { if (s27 == 0) return 1; else return strcaseeq8 (s1, s2, s28); } else return 0; } static inline int strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (CASEEQ (s1[6], s26)) { if (s26 == 0) return 1; else return strcaseeq7 (s1, s2, s27, s28); } else return 0; } static inline int strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[5], s25)) { if (s25 == 0) return 1; else return strcaseeq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[4], s24)) { if (s24 == 0) return 1; else return strcaseeq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[3], s23)) { if (s23 == 0) return 1; else return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[2], s22)) { if (s22 == 0) return 1; else return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[1], s21)) { if (s21 == 0) return 1; else return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[0], s20)) { if (s20 == 0) return 1; else return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (c_strcasecmp (s1, s2) == 0) #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strcasestr.c����������������������������������������������������������0000664�0000000�0000000�00000005705�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasestr.c -- case insensitive substring search in C locale Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. 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/>. */ #include <config.h> /* Specification. */ #include "c-strcasestr.h" #include <stdbool.h> #include <string.h> #include "c-ctype.h" #include "c-strcase.h" /* Two-Way algorithm. */ #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ && ((h_l) = (j) + (n_l))) #define CANON_ELEMENT c_tolower #define CMP_FUNC(p1, p2, l) \ c_strncasecmp ((const char *) (p1), (const char *) (p2), l) #include "str-two-way.h" /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison from the C locale, regardless of the current locale. */ char * c_strcasestr (const char *haystack_start, const char *needle_start) { const char *haystack = haystack_start; const char *needle = needle_start; size_t needle_len; /* Length of NEEDLE. */ size_t haystack_len; /* Known minimum length of HAYSTACK. */ bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ /* Determine length of NEEDLE, and in the process, make sure HAYSTACK is at least as long (no point processing all of a long NEEDLE if HAYSTACK is too short). */ while (*haystack && *needle) ok &= (c_tolower ((unsigned char) *haystack++) == c_tolower ((unsigned char) *needle++)); if (*needle) return NULL; if (ok) return (char *) haystack_start; needle_len = needle - needle_start; haystack = haystack_start + 1; haystack_len = needle_len - 1; /* Perform the search. Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ if (needle_len < LONG_NEEDLE_THRESHOLD) return two_way_short_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); return two_way_long_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); } #undef LONG_NEEDLE_THRESHOLD �����������������������������������������������������������gnulib-20210822~d383792/lib/c-strcasestr.h����������������������������������������������������������0000664�0000000�0000000�00000002112�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string in C locale. Copyright (C) 2005, 2009-2021 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/>. */ #ifndef C_STRCASESTR_H #define C_STRCASESTR_H #ifdef __cplusplus extern "C" { #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ extern char *c_strcasestr (const char *haystack, const char *needle); #ifdef __cplusplus } #endif #endif /* C_STRCASESTR_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strncasecmp.c���������������������������������������������������������0000664�0000000�0000000�00000003130�14110572173�0017750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strncasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strstr.c��������������������������������������������������������������0000664�0000000�0000000�00000002257�14110572173�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strstr.c -- substring search in C locale Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, 2007. 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/>. */ #include <config.h> /* Specification. */ #include "c-strstr.h" #include <string.h> /* Find the first occurrence of NEEDLE in HAYSTACK. */ char * c_strstr (const char *haystack, const char *needle) { /* POSIX says that strstr() interprets the strings as byte sequences, not as character sequences in the current locale. */ return strstr (haystack, needle); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strstr.h��������������������������������������������������������������0000664�0000000�0000000�00000003524�14110572173�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2001-2003, 2006, 2009-2021 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/>. */ /* The functions defined in this file assume a nearly ASCII compatible character set. */ #ifdef __cplusplus extern "C" { #endif /* Find the first occurrence of NEEDLE in HAYSTACK. This function is safe to be called, even in a multibyte locale, if NEEDLE 1. consists solely of printable ASCII characters excluding '\\' and '~' [this restriction is needed because of Shift_JIS and JOHAB] or of the control ASCII characters '\a' '\b' '\f' '\n' '\r' '\t' '\v' [this restriction is needed because of VISCII], and 2. has at least length 2 [this restriction is needed because of BIG5, BIG5-HKSCS, GBK, GB18030, Shift_JIS, JOHAB], and 3. does not consist entirely of decimal digits, or has at least length 4 [this restriction is needed because of GB18030]. This function is also safe to be called, even in a multibyte locale, if HAYSTACK and NEEDLE are known to both consist solely of printable ASCII characters excluding '\\' and '~'. */ extern char *c_strstr (const char *haystack, const char *needle); #ifdef __cplusplus } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strtod.c��������������������������������������������������������������0000664�0000000�0000000�00000006316�14110572173�0016756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to double, using the C locale. Copyright (C) 2003-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "c-strtod.h" #include <errno.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if LONG # define C_STRTOD c_strtold # define DOUBLE long double # define STRTOD_L strtold_l # define HAVE_GOOD_STRTOD_L (HAVE_STRTOLD_L && !GNULIB_defined_strtold_function) # define STRTOD strtold #else # define C_STRTOD c_strtod # define DOUBLE double # define STRTOD_L strtod_l # define HAVE_GOOD_STRTOD_L (HAVE_STRTOD_L && !GNULIB_defined_strtod_function) # define STRTOD strtod #endif #if defined LC_ALL_MASK \ && ((LONG ? HAVE_GOOD_STRTOLD_L : HAVE_GOOD_STRTOD_L) \ || HAVE_WORKING_USELOCALE) /* Cache for the C locale object. Marked volatile so that different threads see the same value (avoids locking). */ static volatile locale_t c_locale_cache; /* Return the C locale object, or (locale_t) 0 with errno set if it cannot be created. */ static locale_t c_locale (void) { if (!c_locale_cache) c_locale_cache = newlocale (LC_ALL_MASK, "C", (locale_t) 0); return c_locale_cache; } #endif DOUBLE C_STRTOD (char const *nptr, char **endptr) { DOUBLE r; #if defined LC_ALL_MASK \ && ((LONG ? HAVE_GOOD_STRTOLD_L : HAVE_GOOD_STRTOD_L) \ || HAVE_WORKING_USELOCALE) locale_t locale = c_locale (); if (!locale) { if (endptr) *endptr = (char *) nptr; return 0; /* errno is set here */ } # if (LONG ? HAVE_GOOD_STRTOLD_L : HAVE_GOOD_STRTOD_L) r = STRTOD_L (nptr, endptr, locale); # else /* HAVE_WORKING_USELOCALE */ locale_t old_locale = uselocale (locale); if (old_locale == (locale_t)0) { if (endptr) *endptr = (char *) nptr; return 0; /* errno is set here */ } r = STRTOD (nptr, endptr); int saved_errno = errno; if (uselocale (old_locale) == (locale_t)0) /* We can't switch back to the old locale. The thread is hosed. */ abort (); errno = saved_errno; # endif #else char *saved_locale = setlocale (LC_NUMERIC, NULL); if (saved_locale) { saved_locale = strdup (saved_locale); if (saved_locale == NULL) { if (endptr) *endptr = (char *) nptr; return 0; /* errno is set here */ } setlocale (LC_NUMERIC, "C"); } r = STRTOD (nptr, endptr); if (saved_locale) { int saved_errno = errno; setlocale (LC_NUMERIC, saved_locale); free (saved_locale); errno = saved_errno; } #endif return r; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strtod.h��������������������������������������������������������������0000664�0000000�0000000�00000003643�14110572173�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to double, using the C locale. -*- coding: utf-8 -*- Copyright (C) 2003-2004, 2009-2021 Free Software Foundation, Inc. This 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/>. */ #ifdef __cplusplus extern "C" { #endif /* Parse the initial portion of the string pointed to by NPTR as a floating- point number (in decimal or hexadecimal notation), like in the C locale: accepting only the ASCII digits '0'..'9', and only '.' as decimal point character. If ENDPTR is not NULL, set *ENDPTR to point to the first byte beyond the parsed number or to NPTR if the string does not start with a parsable number. Return value: - If successful, return the value as a double or 'long double', respectively, and don't modify errno. - In case of overflow, return ±HUGE_VAL or ±HUGE_VALL, respectively, and set errno to ERANGE. - In case of underflow, return a value very near to 0 and set errno to ERANGE. - If the string does not start with a number at all, return 0 (and recall that if ENDPTR != NULL, *ENDPTR is set to NPTR), and maybe set errno to EINVAL. - In case of other error, return 0 and set errno, for example to ENOMEM. */ extern double c_strtod (char const *nptr, char **endptr); extern long double c_strtold (char const *nptr, char **endptr); #ifdef __cplusplus } #endif ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-strtold.c�������������������������������������������������������������0000664�0000000�0000000�00000001423�14110572173�0017124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'long double' in C locale. Copyright (C) 2004-2021 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/>. */ #define LONG 1 #include "c-strtod.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vasnprintf.c����������������������������������������������������������0000664�0000000�0000000�00000002372�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings in C locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <string.h> #include "printf-parse.h" #define VASNPRINTF c_vasnprintf #define FCHAR_T char #define DCHAR_T char #define DIRECTIVE char_directive #define DIRECTIVES char_directives #define PRINTF_PARSE printf_parse #define DCHAR_CPY memcpy #define DCHAR_SET memset #define DCHAR_IS_TCHAR 1 #define TCHAR_T char #define NEED_PRINTF_DOUBLE 1 #define NEED_PRINTF_LONG_DOUBLE 1 #define decimal_point_char_defined 1 static char decimal_point_char (void) { return '.'; } #include "vasnprintf.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vasnprintf.h����������������������������������������������������������0000664�0000000�0000000�00000004560�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation in C locale. Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc. This 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, 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 _C_VASNPRINTF_H #define _C_VASNPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get size_t. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } Formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ extern char *c_vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } #endif #endif /* _C_VASNPRINTF_H */ ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vasprintf.c�����������������������������������������������������������0000664�0000000�0000000�00000002441�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings in C locale. Copyright (C) 1999, 2002, 2006-2021 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 <config.h> /* Specification. */ #include "c-vasprintf.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #include "c-vasnprintf.h" int c_vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = c_vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; /* Return the number of resulting bytes, excluding the trailing NUL. */ return length; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vasprintf.h�����������������������������������������������������������0000664�0000000�0000000�00000002656�14110572173�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf, in C locale. Copyright (C) 2002-2004, 2006-2021 Free Software Foundation, Inc. This 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 _C_VASPRINTF_H #define _C_VASPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* asprintf() and vasprintf(), but formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ int c_asprintf (char **resultp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)); int c_vasprintf (char **resultp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)); #ifdef __cplusplus } #endif #endif /* _C_VASPRINTF_H */ ����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vsnprintf.c�����������������������������������������������������������0000664�0000000�0000000�00000004051�14110572173�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings in C locale. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. Modified for C locale by Ben Pfaff. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "c-vasnprintf.h" /* Print formatted output to string STR. Similar to vsprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. Formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ int c_vsnprintf (char *str, size_t size, const char *format, va_list args) { char *output; size_t len; size_t lenbuf = size; output = c_vasnprintf (str, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-vsnprintf.h�����������������������������������������������������������0000664�0000000�0000000�00000002256�14110572173�0017474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsnprintf in C locale. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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, 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 _C_VSNPRINTF_H #define _C_VSNPRINTF_H /* Get size_t. */ #include <stddef.h> /* Get va_list. */ #include <stdarg.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif extern int c_vsnprintf (char *restrict str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } #endif #endif /* _C_VSNPRINTF_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-xasprintf.c�����������������������������������������������������������0000664�0000000�0000000�00000002036�14110572173�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking in C locale. Copyright (C) 1999, 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "c-xvasprintf.h" char * c_xasprintf (const char *format, ...) { va_list args; char *result; va_start (args, format); result = c_xvasprintf (format, args); va_end (args); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-xvasprintf.c����������������������������������������������������������0000664�0000000�0000000�00000002203�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf with out-of-memory checking in C locale. Copyright (C) 1999, 2002-2004, 2006-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "c-xvasprintf.h" #include <errno.h> #include <stdio.h> #include "c-vasprintf.h" #include "xalloc.h" char * c_xvasprintf (const char *format, va_list args) { char *result; if (c_vasprintf (&result, format, args) < 0) { if (errno == ENOMEM) xalloc_die (); return NULL; } return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c-xvasprintf.h����������������������������������������������������������0000664�0000000�0000000�00000003667�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf, with out-of-memory checking, in C locale. Copyright (C) 2002-2004, 2006-2021 Free Software Foundation, Inc. This 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 _C_XVASPRINTF_H #define _C_XVASPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(), and return it. Upon [ENOMEM] memory allocation error, call xalloc_die. On some other error - [EOVERFLOW] resulting string length is > INT_MAX, - [EINVAL] invalid format string, - [EILSEQ] error during conversion between wide and multibyte characters, return NULL. Formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ extern char *c_xasprintf (const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; extern char *c_xvasprintf (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #ifdef __cplusplus } #endif #endif /* _C_XVASPRINTF_H */ �������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32is-impl.h������������������������������������������������������������0000664�0000000�0000000�00000006551�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a 32-bit wide character belongs to a specific character class. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>, 2020. */ #include <wchar.h> #include <wctype.h> #ifdef __CYGWIN__ # include <cygwin/version.h> #endif #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" #endif #include "unictype.h" #include "verify.h" int FUNC (wint_t wc) { /* The char32_t encoding of a multibyte character is defined by the way mbrtoc32() is defined. */ #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ if (wc != WEOF) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return UCS_FUNC (wc); else return WCHAR_FUNC (wc); } else return 0; #elif HAVE_WORKING_MBRTOC32 /* glibc */ /* mbrtoc32() is essentially defined by the system libc. */ # if defined __GLIBC__ /* The char32_t encoding of a multibyte character is known to be the same as the wchar_t encoding. */ return WCHAR_FUNC (wc); # else /* The char32_t encoding of a multibyte character is known to be UCS-4, different from the the wchar_t encoding. */ if (wc != WEOF) return UCS_FUNC (wc); else return 0; # endif #elif _GL_LARGE_CHAR32_T /* Cygwin, mingw, MSVC */ /* The wchar_t encoding is UTF-16. The char32_t encoding is UCS-4. */ # if defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007 /* As an extension to POSIX, the iswalnum() function of Cygwin >= 1.7 supports also wc arguments outside the Unicode BMP, that is, outside the 'wchar_t' range. See <https://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00019.html> = <https://cygwin.com/ml/cygwin/2011-02/msg00044.html>. */ return WCHAR_FUNC (wc); # else if (wc == WEOF || wc == (wchar_t) wc) /* wc is in the range for the isw* functions. */ return WCHAR_FUNC (wc); else return UCS_FUNC (wc); # endif #else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ /* char32_t and wchar_t are equivalent. */ verify (sizeof (char32_t) == sizeof (wchar_t)); return WCHAR_FUNC (wc); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isalnum.c������������������������������������������������������������0000664�0000000�0000000�00000002470�14110572173�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being alphanumeric. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isalnum #define WCHAR_FUNC iswalnum #define UCS_FUNC uc_is_alnum #include "c32is-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isalpha.c������������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0017152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being alphabetic. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isalpha #define WCHAR_FUNC iswalpha #define UCS_FUNC uc_is_alpha #include "c32is-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isblank.c������������������������������������������������������������0000664�0000000�0000000�00000002461�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being blank. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isblank #define WCHAR_FUNC iswblank #define UCS_FUNC uc_is_blank #include "c32is-impl.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32iscntrl.c������������������������������������������������������������0000664�0000000�0000000�00000002477�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a control character. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32iscntrl #define WCHAR_FUNC iswcntrl #define UCS_FUNC uc_is_cntrl #include "c32is-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isdigit.c������������������������������������������������������������0000664�0000000�0000000�00000002463�14110572173�0017162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a digit. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isdigit #define WCHAR_FUNC iswdigit #define UCS_FUNC uc_is_digit #include "c32is-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isgraph.c������������������������������������������������������������0000664�0000000�0000000�00000002463�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being graphic. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isgraph #define WCHAR_FUNC iswgraph #define UCS_FUNC uc_is_graph #include "c32is-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32islower.c������������������������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being lowercase. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32islower #define WCHAR_FUNC iswlower #define UCS_FUNC uc_is_lower #include "c32is-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isprint.c������������������������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being printable. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isprint #define WCHAR_FUNC iswprint #define UCS_FUNC uc_is_print #include "c32is-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32ispunct.c������������������������������������������������������������0000664�0000000�0000000�00000002515�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a punctuation or symbol character. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32ispunct #define WCHAR_FUNC iswpunct #define UCS_FUNC uc_is_punct #include "c32is-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isspace.c������������������������������������������������������������0000664�0000000�0000000�00000002467�14110572173�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being white-space. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isspace #define WCHAR_FUNC iswspace #define UCS_FUNC uc_is_space #include "c32is-impl.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isupper.c������������������������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being uppercase. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isupper #define WCHAR_FUNC iswupper #define UCS_FUNC uc_is_upper #include "c32is-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32isxdigit.c�����������������������������������������������������������0000664�0000000�0000000�00000002502�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a hexadecimal digit. Copyright (C) 2020-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #define FUNC c32isxdigit #define WCHAR_FUNC iswxdigit #define UCS_FUNC uc_is_xdigit #include "c32is-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32rtomb.c��������������������������������������������������������������0000664�0000000�0000000�00000006404�14110572173�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide character to multibyte character. Copyright (C) 2020-2021 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" 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_LARGE_CHAR32_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. */ return wcrtomb (s, (wchar_t) wc, ps); #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32snrtombs.c�����������������������������������������������������������0000664�0000000�0000000�00000003223�14110572173�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide string to string. Copyright (C) 2020-2021 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> /* Specification. */ #include <uchar.h> #include <wchar.h> #if (HAVE_WORKING_MBRTOC32 && !defined __GLIBC__) || _GL_LARGE_CHAR32_T /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding, or char32_t is wider than wchar_t. */ # include <errno.h> # include <stdlib.h> # include <string.h> extern mbstate_t _gl_c32srtombs_state; # define FUNC c32snrtombs # define SCHAR_T char32_t # define INTERNAL_STATE _gl_c32srtombs_state # define WCRTOMB c32rtomb # include "wcsnrtombs-impl.h" #else /* char32_t and wchar_t are equivalent. */ # include "verify.h" verify (sizeof (char32_t) == sizeof (wchar_t)); size_t c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps) { return wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32srtombs-state.c������������������������������������������������������0000664�0000000�0000000�00000003144�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> #include <wchar.h> /* Internal state used by the functions c32srtombs() and c32snrtombs(). */ mbstate_t _gl_c32srtombs_state /* The state must initially be in the "initial state"; so, zero-initialize it. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html>. When it needs an initializer, use 0 or {0} as initializer? 0 only works when mbstate_t is a scalar type (such as when gnulib defines it, or on AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else /* Use braces, to be on the safe side. */ = { 0 } #endif ; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32srtombs.c������������������������������������������������������������0000664�0000000�0000000�00000003153�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide string to string. Copyright (C) 2020-2021 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> /* Specification. */ #include <uchar.h> #include <wchar.h> #if (HAVE_WORKING_MBRTOC32 && !defined __GLIBC__) || _GL_LARGE_CHAR32_T /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding, or char32_t is wider than wchar_t. */ # include <errno.h> # include <stdlib.h> # include <string.h> extern mbstate_t _gl_c32srtombs_state; # define FUNC c32srtombs # define SCHAR_T char32_t # define INTERNAL_STATE _gl_c32srtombs_state # define WCRTOMB c32rtomb # include "wcsrtombs-impl.h" #else /* char32_t and wchar_t are equivalent. */ # include "verify.h" verify (sizeof (char32_t) == sizeof (wchar_t)); size_t c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps) { return wcsrtombs (dest, (const wchar_t **) srcp, len, ps); } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32stombs.c�������������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide string to string. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #include <string.h> #include <wchar.h> size_t c32stombs (char *dest, const char32_t *src, size_t len) { mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); return c32srtombs (dest, &src, len, &state); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/c32tob.c����������������������������������������������������������������0000664�0000000�0000000�00000003110�14110572173�0016300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide character to unibyte character. Copyright (C) 2020-2021 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> /* Specification. */ #include <uchar.h> #include <stdio.h> #include <string.h> #include <wchar.h> int c32tob (wint_t wc) { #if HAVE_WORKING_MBRTOC32 && !defined __GLIBC__ /* 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]; memset (&state, '\0', sizeof (mbstate_t)); if (c32rtomb (buf, wc, &state) == 1) return (unsigned char) buf[0]; } return EOF; #elif _GL_LARGE_CHAR32_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 return wctob (wc); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/calloc.c����������������������������������������������������������������0000664�0000000�0000000�00000002672�14110572173�0016455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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-2021 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 Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's calloc below. */ #undef calloc /* Allocate and zero-fill an NxS-byte block of memory from the heap, even if N or S is zero. */ void * rpl_calloc (size_t n, size_t s) { if (n == 0 || s == 0) n = s = 1; if (xalloc_oversized (n, s)) { errno = ENOMEM; return NULL; } void *result = calloc (n, s); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������gnulib-20210822~d383792/lib/canon-host.c������������������������������������������������������������0000664�0000000�0000000�00000006352�14110572173�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Host name canonicalization Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.com>. 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/>. */ #include <config.h> #include "canon-host.h" #include <string.h> #include <netdb.h> /* Store the last error for the single-threaded version of this function. */ static int last_cherror; /* Single-threaded of wrapper for canon_host_r. After a NULL return, error messages may be retrieved via ch_strerror(). */ char * canon_host (const char *host) { return canon_host_r (host, &last_cherror); } /* Return a malloc'd string containing the canonical hostname associated with HOST, or NULL if a canonical name cannot be determined. On NULL return, if CHERROR is not NULL, set *CHERROR to an error code as returned by getaddrinfo(). Use ch_strerror_r() or gai_strerror() to convert a *CHERROR value to a string suitable for error messages. WARNINGS HOST must be a string representation of a resolvable name for this host. Strings containing an IP address in dotted decimal notation will be returned as-is, without further resolution. The use of the word "canonical" in this context is unfortunate but entrenched. The value returned by this function will be the end result of the resolution of any CNAME chains in the DNS. There may only be one such value for any given hostname, though the actual IP address referenced by this value and the device using that IP address may each actually have any number of such "canonical" hostnames. See the POSIX getaddrinfo spec <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html>, RFC 1034 <https://www.ietf.org/rfc/rfc1034.txt>, & RFC 2181 <https://www.ietf.org/rfc/rfc2181.txt> for more on what this confusing term really refers to. */ char * canon_host_r (char const *host, int *cherror) { char *retval = NULL; static struct addrinfo hints; struct addrinfo *res = NULL; int status; hints.ai_flags = AI_CANONNAME; status = getaddrinfo (host, NULL, &hints, &res); if (!status) { /* https://lists.gnu.org/r/bug-coreutils/2006-09/msg00300.html says Darwin 7.9.0 getaddrinfo returns 0 but sets res->ai_canonname to NULL. */ retval = strdup (res->ai_canonname ? res->ai_canonname : host); if (!retval && cherror) *cherror = EAI_MEMORY; freeaddrinfo (res); } else if (cherror) *cherror = status; return retval; } /* Return a string describing the last error encountered by canon_host. */ const char * ch_strerror (void) { return gai_strerror (last_cherror); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/canon-host.h������������������������������������������������������������0000664�0000000�0000000�00000002235�14110572173�0017271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Host name canonicalization Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.com> 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/>. */ #ifndef CANON_HOST_H # define CANON_HOST_H 1 # include <stdlib.h> char *canon_host (char const *host) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; char *canon_host_r (char const *host, int *cherror) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; const char *ch_strerror (void); # define ch_strerror_r(cherror) gai_strerror (cherror); #endif /* !CANON_HOST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/canonicalize-lgpl.c�����������������������������������������������������0000664�0000000�0000000�00000035502�14110572173�0020611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2021 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 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 _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # include <libc-config.h> #endif /* Specification. */ #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include <eloop-threshold.h> #include <filename.h> #include <idx.h> #include <intprops.h> #include <scratch_buffer.h> #ifdef _LIBC # include <shlib-compat.h> # define GCC_LINT 1 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define __canonicalize_file_name canonicalize_file_name # define __realpath realpath # include "pathmax.h" # define __faccessat faccessat # if defined _WIN32 && !defined __CYGWIN__ # define __getcwd _getcwd # elif HAVE_GETCWD # if IN_RELOCWRAPPER /* When building the relocatable program wrapper, use the system's getcwd function, not the gnulib override, otherwise we would get a link error. */ # undef getcwd # endif # if defined VMS && !defined getcwd /* We want the directory in Unix syntax, not in VMS syntax. The gnulib override of 'getcwd' takes 2 arguments; the original VMS 'getcwd' takes 3 arguments. */ # define __getcwd(buf, max) getcwd (buf, max, 0) # else # define __getcwd getcwd # endif # else # define __getcwd(buf, max) getwd (buf) # endif # define __mempcpy mempcpy # define __pathconf pathconf # define __rawmemchr rawmemchr # define __readlink readlink # if IN_RELOCWRAPPER /* When building the relocatable program wrapper, use the system's memmove function, not the gnulib override, otherwise we would get a link error. */ # undef memmove # endif #endif /* Suppress bogus GCC -Wmaybe-uninitialized warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT false #endif #if defined _LIBC || !FUNC_REALPATH_WORKS /* Return true if FILE's existence can be shown, false (setting errno) otherwise. Follow symbolic links. */ static bool file_accessible (char const *file) { # if defined _LIBC || HAVE_FACCESSAT return __faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0; # else struct stat st; return stat (file, &st) == 0 || errno == EOVERFLOW; # endif } /* True if concatenating END as a suffix to a file name means that the code needs to check that the file name is that of a searchable directory, since the canonicalize_filename_mode_stk code won't check this later anyway when it checks an ordinary file name component within END. END must either be empty, or start with a slash. */ static bool _GL_ATTRIBUTE_PURE suffix_requires_dir_check (char const *end) { /* If END does not start with a slash, the suffix is OK. */ while (ISSLASH (*end)) { /* Two or more slashes act like a single slash. */ do end++; while (ISSLASH (*end)); switch (*end++) { default: return false; /* An ordinary file name component is OK. */ case '\0': return true; /* Trailing "/" is trouble. */ case '.': break; /* Possibly "." or "..". */ } /* Trailing "/.", or "/.." even if not trailing, is trouble. */ if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1])))) return true; } return false; } /* Append this to a file name to test whether it is a searchable directory. On POSIX platforms "/" suffices, but "/./" is sometimes needed on macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on platforms like AIX 7.2 that need at least "/.". */ # if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK static char const dir_suffix[] = "/"; # else static char const dir_suffix[] = "/./"; # endif /* Return true if DIR is a searchable dir, false (setting errno) otherwise. DIREND points to the NUL byte at the end of the DIR string. Store garbage into DIREND[0 .. strlen (dir_suffix)]. */ static bool dir_check (char *dir, char *dirend) { strcpy (dirend, dir_suffix); return file_accessible (dir); } static idx_t get_path_max (void) { # ifdef PATH_MAX long int path_max = PATH_MAX; # else /* The caller invoked realpath with a null RESOLVED, even though PATH_MAX is not defined as a constant. The glibc manual says programs should not do this, and POSIX says the behavior is undefined. Historically, glibc here used the result of pathconf, or 1024 if that failed; stay consistent with this (dubious) historical practice. */ int err = errno; long int path_max = __pathconf ("/", _PC_PATH_MAX); __set_errno (err); # endif return path_max < 0 ? 1024 : path_max <= IDX_MAX ? path_max : IDX_MAX; } /* Act like __realpath (see below), with an additional argument rname_buf that can be used as temporary storage. If GCC_LINT is defined, do not inline this function with GCC 10.1 and later, to avoid creating a pointer to the stack that GCC -Wreturn-local-addr incorrectly complains about. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 Although the noinline attribute can hurt performance a bit, no better way to pacify GCC is known; even an explicit #pragma does not pacify GCC. When the GCC bug is fixed this workaround should be limited to the broken GCC versions. */ # if __GNUC_PREREQ (10, 1) # if defined GCC_LINT || defined lint __attribute__ ((__noinline__)) # elif __OPTIMIZE__ && !__NO_INLINE__ # define GCC_BOGUS_WRETURN_LOCAL_ADDR # endif # endif static char * realpath_stk (const char *name, char *resolved, struct scratch_buffer *rname_buf) { char *dest; char const *start; char const *end; int num_links = 0; if (name == NULL) { /* As per Single Unix Specification V2 we must return an error if either parameter is a null pointer. We extend this to allow the RESOLVED parameter to be NULL in case the we are expected to allocate the room for the return value. */ __set_errno (EINVAL); return NULL; } if (name[0] == '\0') { /* As per Single Unix Specification V2 we must return an error if the name argument points to an empty string. */ __set_errno (ENOENT); return NULL; } struct scratch_buffer extra_buffer, link_buffer; scratch_buffer_init (&extra_buffer); scratch_buffer_init (&link_buffer); scratch_buffer_init (rname_buf); char *rname_on_stack = rname_buf->data; char *rname = rname_on_stack; bool end_in_extra_buffer = false; bool failed = true; /* This is always zero for Posix hosts, but can be 2 for MS-Windows and MS-DOS X:/foo/bar file names. */ idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); if (!IS_ABSOLUTE_FILE_NAME (name)) { while (!__getcwd (rname, rname_buf->length)) { if (errno != ERANGE) { dest = rname; goto error; } if (!scratch_buffer_grow (rname_buf)) goto error_nomem; rname = rname_buf->data; } dest = __rawmemchr (rname, '\0'); start = name; prefix_len = FILE_SYSTEM_PREFIX_LEN (rname); } else { dest = __mempcpy (rname, name, prefix_len); *dest++ = '/'; if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (prefix_len == 0 /* implies ISSLASH (name[0]) */ && ISSLASH (name[1]) && !ISSLASH (name[2])) *dest++ = '/'; *dest = '\0'; } start = name + prefix_len; } for ( ; *start; start = end) { /* Skip sequence of multiple file name separators. */ while (ISSLASH (*start)) ++start; /* Find end of component. */ for (end = start; *end && !ISSLASH (*end); ++end) /* Nothing. */; /* Length of this file name component; it can be zero if a file name ends in '/'. */ idx_t startlen = end - start; if (startlen == 0) break; else if (startlen == 1 && start[0] == '.') /* nothing */; else if (startlen == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; } else { if (!ISSLASH (dest[-1])) *dest++ = '/'; while (rname + rname_buf->length - dest < startlen + sizeof dir_suffix) { idx_t dest_offset = dest - rname; if (!scratch_buffer_grow_preserve (rname_buf)) goto error_nomem; rname = rname_buf->data; dest = rname + dest_offset; } dest = __mempcpy (dest, start, startlen); *dest = '\0'; char *buf; ssize_t n; while (true) { buf = link_buffer.data; idx_t bufsize = link_buffer.length; n = __readlink (rname, buf, bufsize - 1); if (n < bufsize - 1) break; if (!scratch_buffer_grow (&link_buffer)) goto error_nomem; } if (0 <= n) { if (++num_links > __eloop_threshold ()) { __set_errno (ELOOP); goto error; } buf[n] = '\0'; char *extra_buf = extra_buffer.data; idx_t end_idx IF_LINT (= 0); if (end_in_extra_buffer) end_idx = end - extra_buf; size_t len = strlen (end); if (INT_ADD_OVERFLOW (len, n)) { __set_errno (ENOMEM); goto error_nomem; } while (extra_buffer.length <= len + n) { if (!scratch_buffer_grow_preserve (&extra_buffer)) goto error_nomem; extra_buf = extra_buffer.data; } if (end_in_extra_buffer) end = extra_buf + end_idx; /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); end_in_extra_buffer = true; if (IS_ABSOLUTE_FILE_NAME (buf)) { idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); dest = __mempcpy (rname, buf, pfxlen); *dest++ = '/'; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) *dest++ = '/'; *dest = '\0'; } /* Install the new prefix to be in effect hereafter. */ prefix_len = pfxlen; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) dest++; } } else if (! (suffix_requires_dir_check (end) ? dir_check (rname, dest) : errno == EINVAL)) goto error; } } if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1])) --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; failed = false; error: *dest++ = '\0'; if (resolved != NULL && dest - rname <= get_path_max ()) rname = strcpy (resolved, rname); error_nomem: scratch_buffer_free (&extra_buffer); scratch_buffer_free (&link_buffer); if (failed || rname == resolved) { scratch_buffer_free (rname_buf); return failed ? NULL : resolved; } return scratch_buffer_dupfree (rname_buf, dest - rname); } /* Return the canonical absolute name of file NAME. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or symlinks. All file name components must exist. If RESOLVED is null, the result is malloc'd; otherwise, if the canonical name is PATH_MAX chars or more, returns null with 'errno' set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, returns the name in RESOLVED. If the name cannot be resolved and RESOLVED is non-NULL, it contains the name of the first component that cannot be resolved. If the name can be resolved, RESOLVED holds the same value as the value returned. */ char * __realpath (const char *name, char *resolved) { #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR #warning "GCC might issue a bogus -Wreturn-local-addr warning here." #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>." #endif struct scratch_buffer rname_buffer; return realpath_stk (name, resolved, &rname_buffer); } libc_hidden_def (__realpath) versioned_symbol (libc, __realpath, realpath, GLIBC_2_3); #endif /* defined _LIBC || !FUNC_REALPATH_WORKS */ #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3) char * attribute_compat_text_section __old_realpath (const char *name, char *resolved) { if (resolved == NULL) { __set_errno (EINVAL); return NULL; } return __realpath (name, resolved); } compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0); #endif char * __canonicalize_file_name (const char *name) { return __realpath (name, NULL); } weak_alias (__canonicalize_file_name, canonicalize_file_name) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/canonicalize.c����������������������������������������������������������0000664�0000000�0000000�00000036631�14110572173�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2021 Free Software Foundation, Inc. This 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 "canonicalize.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include <filename.h> #include <idx.h> #include <intprops.h> #include <scratch_buffer.h> #include "attribute.h" #include "file-set.h" #include "hash-triple.h" #include "xalloc.h" /* Suppress bogus GCC -Wmaybe-uninitialized warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT false #endif #if ISSLASH ('\\') # define SLASHES "/\\" #else # define SLASHES "/" #endif /* Return true if FILE's existence can be shown, false (setting errno) otherwise. Follow symbolic links. */ static bool file_accessible (char const *file) { # if HAVE_FACCESSAT return faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0; # else struct stat st; return stat (file, &st) == 0 || errno == EOVERFLOW; # endif } /* True if concatenating END as a suffix to a file name means that the code needs to check that the file name is that of a searchable directory, since the canonicalize_filename_mode_stk code won't check this later anyway when it checks an ordinary file name component within END. END must either be empty, or start with a slash. */ static bool _GL_ATTRIBUTE_PURE suffix_requires_dir_check (char const *end) { /* If END does not start with a slash, the suffix is OK. */ while (ISSLASH (*end)) { /* Two or more slashes act like a single slash. */ do end++; while (ISSLASH (*end)); switch (*end++) { default: return false; /* An ordinary file name component is OK. */ case '\0': return true; /* Trailing "/" is trouble. */ case '.': break; /* Possibly "." or "..". */ } /* Trailing "/.", or "/.." even if not trailing, is trouble. */ if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1])))) return true; } return false; } /* Append this to a file name to test whether it is a searchable directory. On POSIX platforms "/" suffices, but "/./" is sometimes needed on macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on platforms like AIX 7.2 that need at least "/.". */ #ifdef LSTAT_FOLLOWS_SLASHED_SYMLINK static char const dir_suffix[] = "/"; #else static char const dir_suffix[] = "/./"; #endif /* Return true if DIR is a searchable dir, false (setting errno) otherwise. DIREND points to the NUL byte at the end of the DIR string. Store garbage into DIREND[0 .. strlen (dir_suffix)]. */ static bool dir_check (char *dir, char *dirend) { strcpy (dirend, dir_suffix); return file_accessible (dir); } #if !((HAVE_CANONICALIZE_FILE_NAME && FUNC_REALPATH_WORKS) \ || GNULIB_CANONICALIZE_LGPL) /* Return the canonical absolute name of file NAME. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or symlinks. All components must exist. The result is malloc'd. */ char * canonicalize_file_name (const char *name) { return canonicalize_filename_mode (name, CAN_EXISTING); } #endif /* !HAVE_CANONICALIZE_FILE_NAME */ static bool multiple_bits_set (canonicalize_mode_t i) { return (i & (i - 1)) != 0; } /* Return true if we've already seen the triple, <FILENAME, dev, ino>. If *HT is not initialized, initialize it. */ static bool seen_triple (Hash_table **ht, char const *filename, struct stat const *st) { if (*ht == NULL) { idx_t initial_capacity = 7; *ht = hash_initialize (initial_capacity, NULL, triple_hash, triple_compare_ino_str, triple_free); if (*ht == NULL) xalloc_die (); } if (seen_file (*ht, filename, st)) return true; record_file (*ht, filename, st); return false; } /* Act like canonicalize_filename_mode (see below), with an additional argument rname_buf that can be used as temporary storage. If GCC_LINT is defined, do not inline this function with GCC 10.1 and later, to avoid creating a pointer to the stack that GCC -Wreturn-local-addr incorrectly complains about. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 Although the noinline attribute can hurt performance a bit, no better way to pacify GCC is known; even an explicit #pragma does not pacify GCC. When the GCC bug is fixed this workaround should be limited to the broken GCC versions. */ #if _GL_GNUC_PREREQ (10, 1) # if defined GCC_LINT || defined lint __attribute__ ((__noinline__)) # elif __OPTIMIZE__ && !__NO_INLINE__ # define GCC_BOGUS_WRETURN_LOCAL_ADDR # endif #endif static char * canonicalize_filename_mode_stk (const char *name, canonicalize_mode_t can_mode, struct scratch_buffer *rname_buf) { char *dest; char const *start; char const *end; Hash_table *ht = NULL; bool logical = (can_mode & CAN_NOLINKS) != 0; int num_links = 0; canonicalize_mode_t can_exist = can_mode & CAN_MODE_MASK; if (multiple_bits_set (can_exist)) { errno = EINVAL; return NULL; } if (name == NULL) { errno = EINVAL; return NULL; } if (name[0] == '\0') { errno = ENOENT; return NULL; } struct scratch_buffer extra_buffer, link_buffer; scratch_buffer_init (&extra_buffer); scratch_buffer_init (&link_buffer); scratch_buffer_init (rname_buf); char *rname_on_stack = rname_buf->data; char *rname = rname_on_stack; bool end_in_extra_buffer = false; bool failed = true; /* This is always zero for Posix hosts, but can be 2 for MS-Windows and MS-DOS X:/foo/bar file names. */ idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); if (!IS_ABSOLUTE_FILE_NAME (name)) { while (!getcwd (rname, rname_buf->length)) { switch (errno) { case ERANGE: if (scratch_buffer_grow (rname_buf)) break; FALLTHROUGH; case ENOMEM: xalloc_die (); default: dest = rname; goto error; } rname = rname_buf->data; } dest = rawmemchr (rname, '\0'); start = name; prefix_len = FILE_SYSTEM_PREFIX_LEN (rname); } else { dest = mempcpy (rname, name, prefix_len); *dest++ = '/'; if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (prefix_len == 0 /* implies ISSLASH (name[0]) */ && ISSLASH (name[1]) && !ISSLASH (name[2])) { *dest++ = '/'; #if defined _WIN32 && !defined __CYGWIN__ /* For UNC file names '\\server\path\to\file', extend the prefix to include the server: '\\server\'. */ { idx_t i; for (i = 2; name[i] != '\0' && !ISSLASH (name[i]); ) i++; if (name[i] != '\0' /* implies ISSLASH (name[i]) */ && i + 1 < rname_buf->length) { prefix_len = i; memcpy (dest, name + 2, i - 2 + 1); dest += i - 2 + 1; } else { /* Either name = '\\server'; this is an invalid file name. Or name = '\\server\...' and server is more than rname_buf->length - 4 bytes long. In either case, stop the UNC processing. */ } } #endif } *dest = '\0'; } start = name + prefix_len; } for ( ; *start; start = end) { /* Skip sequence of multiple file name separators. */ while (ISSLASH (*start)) ++start; /* Find end of component. */ for (end = start; *end && !ISSLASH (*end); ++end) /* Nothing. */; /* Length of this file name component; it can be zero if a file name ends in '/'. */ idx_t startlen = end - start; if (startlen == 0) break; else if (startlen == 1 && start[0] == '.') /* nothing */; else if (startlen == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; } else { if (!ISSLASH (dest[-1])) *dest++ = '/'; while (rname + rname_buf->length - dest < startlen + sizeof dir_suffix) { idx_t dest_offset = dest - rname; if (!scratch_buffer_grow_preserve (rname_buf)) xalloc_die (); rname = rname_buf->data; dest = rname + dest_offset; } dest = mempcpy (dest, start, startlen); *dest = '\0'; char *buf; ssize_t n = -1; if (!logical) { while (true) { buf = link_buffer.data; idx_t bufsize = link_buffer.length; n = readlink (rname, buf, bufsize - 1); if (n < bufsize - 1) break; if (!scratch_buffer_grow (&link_buffer)) xalloc_die (); } } if (0 <= n) { /* A physical traversal and RNAME is a symbolic link. */ if (num_links < 20) num_links++; else if (*start) { /* Enough symlinks have been seen that it is time to worry about being in a symlink cycle. Get the device and inode of the parent directory, as pre-2017 POSIX says this info is not reliable for symlinks. */ struct stat st; dest[- startlen] = '\0'; if (stat (*rname ? rname : ".", &st) != 0) goto error; dest[- startlen] = *start; /* Detect loops. We cannot use the cycle-check module here, since it's possible to encounter the same parent directory more than once in a given traversal. However, encountering the same (parentdir, START) pair twice does indicate a loop. */ if (seen_triple (&ht, start, &st)) { if (can_exist == CAN_MISSING) continue; errno = ELOOP; goto error; } } buf[n] = '\0'; char *extra_buf = extra_buffer.data; idx_t end_idx IF_LINT (= 0); if (end_in_extra_buffer) end_idx = end - extra_buf; size_t len = strlen (end); if (INT_ADD_OVERFLOW (len, n)) xalloc_die (); while (extra_buffer.length <= len + n) { if (!scratch_buffer_grow_preserve (&extra_buffer)) xalloc_die (); extra_buf = extra_buffer.data; } if (end_in_extra_buffer) end = extra_buf + end_idx; /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); end_in_extra_buffer = true; if (IS_ABSOLUTE_FILE_NAME (buf)) { idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); dest = mempcpy (rname, buf, pfxlen); *dest++ = '/'; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) *dest++ = '/'; *dest = '\0'; } /* Install the new prefix to be in effect hereafter. */ prefix_len = pfxlen; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) dest++; } } else if (! (can_exist == CAN_MISSING || (suffix_requires_dir_check (end) ? dir_check (rname, dest) : !logical ? errno == EINVAL : *end || file_accessible (rname)) || (can_exist == CAN_ALL_BUT_LAST && errno == ENOENT && !end[strspn (end, SLASHES)]))) goto error; } } if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1])) --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; failed = false; error: if (ht) hash_free (ht); scratch_buffer_free (&extra_buffer); scratch_buffer_free (&link_buffer); if (failed) { scratch_buffer_free (rname_buf); return NULL; } *dest++ = '\0'; char *result = scratch_buffer_dupfree (rname_buf, dest - rname); if (!result) xalloc_die (); return result; } /* Return the canonical absolute name of file NAME, while treating missing elements according to CAN_MODE. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or, depending on other CAN_MODE flags, symlinks. Whether components must exist or not depends on canonicalize mode. The result is malloc'd. */ char * canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) { #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR #warning "GCC might issue a bogus -Wreturn-local-addr warning here." #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>." #endif struct scratch_buffer rname_buffer; return canonicalize_filename_mode_stk (name, can_mode, &rname_buffer); } �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/canonicalize.h����������������������������������������������������������0000664�0000000�0000000�00000003631�14110572173�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc. This 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 CANONICALIZE_H_ # define CANONICALIZE_H_ #include <stdlib.h> /* for canonicalize_file_name */ #define CAN_MODE_MASK (CAN_EXISTING | CAN_ALL_BUT_LAST | CAN_MISSING) #ifdef __cplusplus extern "C" { #endif enum canonicalize_mode_t { /* All components must exist. */ CAN_EXISTING = 0, /* All components excluding last one must exist. */ CAN_ALL_BUT_LAST = 1, /* No requirements on components existence. */ CAN_MISSING = 2, /* Don't expand symlinks. */ CAN_NOLINKS = 4 }; typedef enum canonicalize_mode_t canonicalize_mode_t; /* Return the canonical absolute name of file NAME, while treating missing elements according to CAN_MODE. A canonical name does not contain any `.', `..' components nor any repeated file name separators ('/') or, depending on other CAN_MODE flags, symlinks. Whether components must exist or not depends on canonicalize mode. The result is malloc'd. Upon failure, return NULL with errno set. */ char *canonicalize_filename_mode (const char *, canonicalize_mode_t) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* !CANONICALIZE_H_ */ �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/careadlinkat.c����������������������������������������������������������0000664�0000000�0000000�00000013253�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read symbolic links into a buffer without size limitation, relative to fd. Copyright (C) 2001, 2003-2004, 2007, 2009-2021 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, Bruno Haible, and Jim Meyering. */ #include <config.h> #include "careadlinkat.h" #include "idx.h" #include "minmax.h" #include <errno.h> #include <limits.h> #include <string.h> #include <unistd.h> /* Define this independently so that stdint.h is not a prerequisite. */ #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #include "allocator.h" enum { STACK_BUF_SIZE = 1024 }; /* Act like careadlinkat (see below), with an additional argument STACK_BUF that can be used as temporary storage. If GCC_LINT is defined, do not inline this function with GCC 10.1 and later, to avoid creating a pointer to the stack that GCC -Wreturn-local-addr incorrectly complains about. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 Although the noinline attribute can hurt performance a bit, no better way to pacify GCC is known; even an explicit #pragma does not pacify GCC. When the GCC bug is fixed this workaround should be limited to the broken GCC versions. */ #if _GL_GNUC_PREREQ (10, 1) # if defined GCC_LINT || defined lint __attribute__ ((__noinline__)) # elif __OPTIMIZE__ && !__NO_INLINE__ # define GCC_BOGUS_WRETURN_LOCAL_ADDR # endif #endif static char * readlink_stk (int fd, char const *filename, char *buffer, size_t buffer_size, struct allocator const *alloc, ssize_t (*preadlinkat) (int, char const *, char *, size_t), char stack_buf[STACK_BUF_SIZE]) { if (! alloc) alloc = &stdlib_allocator; if (!buffer) { buffer = stack_buf; buffer_size = STACK_BUF_SIZE; } char *buf = buffer; idx_t buf_size_max = MIN (IDX_MAX, MIN (SSIZE_MAX, SIZE_MAX)); idx_t buf_size = MIN (buffer_size, buf_size_max); while (buf) { /* Attempt to read the link into the current buffer. */ idx_t link_length = preadlinkat (fd, filename, buf, buf_size); if (link_length < 0) { if (buf != buffer) { int readlinkat_errno = errno; alloc->free (buf); errno = readlinkat_errno; } return NULL; } idx_t link_size = link_length; if (link_size < buf_size) { buf[link_size++] = '\0'; if (buf == stack_buf) { char *b = alloc->allocate (link_size); buf_size = link_size; if (! b) break; return memcpy (b, buf, link_size); } if (link_size < buf_size && buf != buffer && alloc->reallocate) { /* Shrink BUF before returning it. */ char *b = alloc->reallocate (buf, link_size); if (b) return b; } return buf; } if (buf != buffer) alloc->free (buf); if (buf_size_max / 2 <= buf_size) { errno = ENAMETOOLONG; return NULL; } buf_size = 2 * buf_size + 1; buf = alloc->allocate (buf_size); } if (alloc->die) alloc->die (buf_size); errno = ENOMEM; return NULL; } /* Assuming the current directory is FD, get the symbolic link value of FILENAME as a null-terminated string and put it into a buffer. If FD is AT_FDCWD, FILENAME is interpreted relative to the current working directory, as in openat. If the link is small enough to fit into BUFFER put it there. BUFFER's size is BUFFER_SIZE, and BUFFER can be null if BUFFER_SIZE is zero. If the link is not small, put it into a dynamically allocated buffer managed by ALLOC. It is the caller's responsibility to free the returned value if it is nonnull and is not BUFFER. A null ALLOC stands for the standard allocator. The PREADLINKAT function specifies how to read links. It operates like POSIX readlinkat() <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html> but can assume that its first argument is the same as FD. If successful, return the buffer address; otherwise return NULL and set errno. */ char * careadlinkat (int fd, char const *filename, char *buffer, size_t buffer_size, struct allocator const *alloc, ssize_t (*preadlinkat) (int, char const *, char *, size_t)) { /* Allocate the initial buffer on the stack. This way, in the common case of a symlink of small size, we get away with a single small malloc instead of a big malloc followed by a shrinking realloc. */ #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR #warning "GCC might issue a bogus -Wreturn-local-addr warning here." #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>." #endif char stack_buf[STACK_BUF_SIZE]; return readlink_stk (fd, filename, buffer, buffer_size, alloc, preadlinkat, stack_buf); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/careadlinkat.h����������������������������������������������������������0000664�0000000�0000000�00000005010�14110572173�0017634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read symbolic links into a buffer without size limitation, relative to fd. Copyright (C) 2011-2021 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, Bruno Haible, and Jim Meyering. */ #ifndef _GL_CAREADLINKAT_H #define _GL_CAREADLINKAT_H #include <fcntl.h> #include <unistd.h> struct allocator; /* Assuming the current directory is FD, get the symbolic link value of FILENAME as a null-terminated string and put it into a buffer. If FD is AT_FDCWD, FILENAME is interpreted relative to the current working directory, as in openat. If the link is small enough to fit into BUFFER put it there. BUFFER's size is BUFFER_SIZE, and BUFFER can be null if BUFFER_SIZE is zero. If the link is not small, put it into a dynamically allocated buffer managed by ALLOC. It is the caller's responsibility to free the returned value if it is nonnull and is not BUFFER. The PREADLINKAT function specifies how to read links. It operates like POSIX readlinkat() <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html> but can assume that its first argument is the same as FD. If successful, return the buffer address; otherwise return NULL and set errno. */ char *careadlinkat (int fd, char const *filename, char *restrict buffer, size_t buffer_size, struct allocator const *alloc, ssize_t (*preadlinkat) (int, char const *, char *, size_t)); /* Suitable value for careadlinkat's FD argument. */ #if HAVE_READLINKAT /* AT_FDCWD is declared in <fcntl.h>. */ #else /* Define AT_FDCWD independently, so that the careadlinkat module does not depend on the fcntl-h module. We might as well use the same value as fcntl-h. */ # ifndef AT_FDCWD # define AT_FDCWD (-3041965) # endif #endif #endif /* _GL_CAREADLINKAT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cbrt.c������������������������������������������������������������������0000664�0000000�0000000�00000004276�14110572173�0016154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compute cubic root of double value. Copyright (C) 1997, 2012-2021 Free Software Foundation, Inc. Contributed by Dirk Alboth <dirka@uni-paderborn.de> and Ulrich Drepper <drepper@cygnus.com>, 1997. 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/>. */ #include <config.h> /* Specification. */ #include <math.h> /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* Code based on glibc/sysdeps/ieee754/dbl-64/s_cbrt.c. */ #define CBRT2 1.2599210498948731648 /* 2^(1/3) */ #define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ static const double factor[5] = { 1.0 / SQR_CBRT2, 1.0 / CBRT2, 1.0, CBRT2, SQR_CBRT2 }; double cbrt (double x) { if (isfinite (x) && x != 0.0) { double xm, ym, u, t2; int xe; /* Reduce X. XM now is an range 1.0 to 0.5. */ xm = frexp (fabs (x), &xe); u = (0.354895765043919860 + ((1.50819193781584896 + ((-2.11499494167371287 + ((2.44693122563534430 + ((-1.83469277483613086 + (0.784932344976639262 - 0.145263899385486377 * xm) * xm) * xm)) * xm)) * xm)) * xm)); t2 = u * u * u; ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; return ldexp (x > 0.0 ? ym : -ym, xe / 3); } else return x + x; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cbrtf.c�����������������������������������������������������������������0000664�0000000�0000000�00000003601�14110572173�0016311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compute cubic root of float value. Copyright (C) 1997, 2012-2021 Free Software Foundation, Inc. Contributed by Dirk Alboth <dirka@uni-paderborn.de> and Ulrich Drepper <drepper@cygnus.com>, 1997. 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/>. */ #include <config.h> /* Specification. */ #include <math.h> /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* Code based on glibc/sysdeps/ieee754/flt-32/s_cbrtf.c. */ #define CBRT2 1.2599210498948731648 /* 2^(1/3) */ #define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ static const double factor[5] = { 1.0 / SQR_CBRT2, 1.0 / CBRT2, 1.0, CBRT2, SQR_CBRT2 }; float cbrtf (float x) { if (isfinite (x) && x != 0.0f) { float xm, ym, u, t2; int xe; /* Reduce X. XM now is an range 1.0 to 0.5. */ xm = frexpf (fabsf (x), &xe); u = (0.492659620528969547 + (0.697570460207922770 - 0.191502161678719066 * xm) * xm); t2 = u * u * u; ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; return ldexpf (x > 0.0 ? ym : -ym, xe / 3); } else return x + x; } �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cbrtl.c�����������������������������������������������������������������0000664�0000000�0000000�00000007733�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compute cubic root of long double value. Copyright (C) 2012-2021 Free Software Foundation, Inc. Cephes Math Library Release 2.2: January, 1991 Copyright 1984, 1991 by Stephen L. Moshier Adapted for glibc October, 2001. 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double cbrtl (long double x) { return cbrt (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/s_cbrtl.c. */ /* cbrtl.c * * Cube root, long double precision * * * * SYNOPSIS: * * long double x, y, cbrtl(); * * y = cbrtl( x ); * * * * DESCRIPTION: * * Returns the cube root of the argument, which may be negative. * * Range reduction involves determining the power of 2 of * the argument. A polynomial of degree 2 applied to the * mantissa, and multiplication by the cube root of 1, 2, or 4 * approximates the root to within about 0.1%. Then Newton's * iteration is used three times to converge to an accurate * result. * * * * ACCURACY: * * Relative error: * arithmetic domain # trials peak rms * IEEE -8,8 100000 1.3e-34 3.9e-35 * IEEE exp(+-707) 100000 1.3e-34 4.3e-35 * */ static const long double CBRT2 = 1.259921049894873164767210607278228350570251L; static const long double CBRT4 = 1.587401051968199474751705639272308260391493L; static const long double CBRT2I = 0.7937005259840997373758528196361541301957467L; static const long double CBRT4I = 0.6299605249474365823836053036391141752851257L; long double cbrtl (long double x) { if (isfinite (x) && x != 0.0L) { int e, rem, sign; long double z; if (x > 0) sign = 1; else { sign = -1; x = -x; } z = x; /* extract power of 2, leaving mantissa between 0.5 and 1 */ x = frexpl (x, &e); /* Approximate cube root of number between .5 and 1, peak relative error = 1.2e-6 */ x = ((((1.3584464340920900529734e-1L * x - 6.3986917220457538402318e-1L) * x + 1.2875551670318751538055e0L) * x - 1.4897083391357284957891e0L) * x + 1.3304961236013647092521e0L) * x + 3.7568280825958912391243e-1L; /* exponent divided by 3 */ if (e >= 0) { rem = e; e /= 3; rem -= 3 * e; if (rem == 1) x *= CBRT2; else if (rem == 2) x *= CBRT4; } else { /* argument less than 1 */ e = -e; rem = e; e /= 3; rem -= 3 * e; if (rem == 1) x *= CBRT2I; else if (rem == 2) x *= CBRT4I; e = -e; } /* multiply by power of 2 */ x = ldexpl (x, e); /* Newton iteration */ x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; x -= (x - (z / (x * x))) * 0.3333333333333333333333333333333333333333L; if (sign < 0) x = -x; return x; } else { # ifdef __sgi /* so that when x == -0.0L, the result is -0.0L not +0.0L */ return x; # else return x + x; # endif } } #endif �������������������������������������gnulib-20210822~d383792/lib/cdefs.h�����������������������������������������������������������������0000664�0000000�0000000�00000055635�14110572173�0016320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2021 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 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__ \ || 3 < __clang_major__ + (5 <= __clang_minor__))) # 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 /* 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) # 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 #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 /* 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)) # if __GNUC_PREREQ (11, 0) # define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) # else # define __attr_access_none(argno) # endif #else # 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 */ ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ceil.c������������������������������������������������������������������0000664�0000000�0000000�00000007064�14110572173�0016134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. Copyright (C) 2007, 2010-2021 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>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #undef MIN #ifdef USE_LONG_DOUBLE # define FUNC ceill # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define MIN LDBL_MIN # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC ceil # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define MIN DBL_MIN # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC ceilf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define MIN FLT_MIN # define L_(literal) literal##f #endif /* -0.0. See minus-zero.h. */ #if defined __hpux || defined __sgi || defined __ICC # define MINUS_ZERO (-MIN * MIN) #else # define MINUS_ZERO L_(-0.0) #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE FUNC (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ceilf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001531�14110572173�0016273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. Copyright (C) 2007, 2009-2021 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>, 2007. */ #define USE_FLOAT #include "ceil.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ceill.c�����������������������������������������������������������������0000664�0000000�0000000�00000002016�14110572173�0016300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. Copyright (C) 2007, 2009-2021 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>, 2007. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double ceill (long double x) { return ceil (x); } #else # define USE_LONG_DOUBLE # include "ceil.c" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/chdir-long.c������������������������������������������������������������0000664�0000000�0000000�00000015266�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include "chdir-long.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stdio.h> #include "assure.h" #ifndef PATH_MAX # error "compile this file only if your system defines PATH_MAX" #endif /* The results of openat() in this file are not leaked to any single-threaded code that could use stdio. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use openat_safer. */ struct cd_buf { int fd; }; static void cdb_init (struct cd_buf *cdb) { cdb->fd = AT_FDCWD; } static int cdb_fchdir (struct cd_buf const *cdb) { return fchdir (cdb->fd); } static void cdb_free (struct cd_buf const *cdb) { if (0 <= cdb->fd) { bool close_fail = close (cdb->fd); assure (! close_fail); } } /* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd, try to open the CDB->fd-relative directory, DIR. If the open succeeds, update CDB->fd with the resulting descriptor, close the incoming file descriptor, and return zero. Upon failure, return -1 and set errno. */ static int cdb_advance_fd (struct cd_buf *cdb, char const *dir) { int new_fd = openat (cdb->fd, dir, O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); if (new_fd < 0) return -1; cdb_free (cdb); cdb->fd = new_fd; return 0; } /* Return a pointer to the first non-slash in S. */ static char * _GL_ATTRIBUTE_PURE find_non_slash (char const *s) { size_t n_slash = strspn (s, "/"); return (char *) s + n_slash; } /* This is a function much like chdir, but without the PATH_MAX limitation on the length of the directory name. A significant difference is that it must be able to modify (albeit only temporarily) the directory name. It handles an arbitrarily long directory name by operating on manageable portions of the name. On systems without the openat syscall, this means changing the working directory to more and more "distant" points along the long directory name and then restoring the working directory. If any of those attempts to save or restore the working directory fails, this function exits nonzero. Note that this function may still fail with errno == ENAMETOOLONG, but only if the specified directory name contains a component that is long enough to provoke such a failure all by itself (e.g. if the component has length PATH_MAX or greater on systems that define PATH_MAX). */ int chdir_long (char *dir) { int e = chdir (dir); if (e == 0 || errno != ENAMETOOLONG) return e; { size_t len = strlen (dir); char *dir_end = dir + len; struct cd_buf cdb; size_t n_leading_slash; cdb_init (&cdb); /* If DIR is the empty string, then the chdir above must have failed and set errno to ENOENT. */ assure (0 < len); assure (PATH_MAX <= len); /* Count leading slashes. */ n_leading_slash = strspn (dir, "/"); /* Handle any leading slashes as well as any name that matches the regular expression, m!^//hostname[/]*! . Handling this prefix separately usually results in a single additional cdb_advance_fd call, but it's worthwhile, since it makes the code in the following loop cleaner. */ if (n_leading_slash == 2) { int err; /* Find next slash. We already know that dir[2] is neither a slash nor '\0'. */ char *slash = memchr (dir + 3, '/', dir_end - (dir + 3)); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } else if (n_leading_slash) { if (cdb_advance_fd (&cdb, "/") != 0) goto Fail; dir += n_leading_slash; } assure (*dir != '/'); assure (dir <= dir_end); while (PATH_MAX <= dir_end - dir) { int err; /* Find a slash that is PATH_MAX or fewer bytes away from dir. I.e. see if there is a slash that will give us a name of length PATH_MAX-1 or less. */ char *slash = memrchr (dir, '/', PATH_MAX); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; assure (slash - dir < PATH_MAX); err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } if (dir < dir_end) { if (cdb_advance_fd (&cdb, dir) != 0) goto Fail; } if (cdb_fchdir (&cdb) != 0) goto Fail; cdb_free (&cdb); return 0; Fail: { int saved_errno = errno; cdb_free (&cdb); errno = saved_errno; return -1; } } } #if TEST_CHDIR # include "closeout.h" # include "error.h" int main (int argc, char *argv[]) { char *line = NULL; size_t n = 0; int len; atexit (close_stdout); len = getline (&line, &n, stdin); if (len < 0) { int saved_errno = errno; if (feof (stdin)) exit (0); error (EXIT_FAILURE, saved_errno, "reading standard input"); } else if (len == 0) exit (0); if (line[len-1] == '\n') line[len-1] = '\0'; if (chdir_long (line) != 0) error (EXIT_FAILURE, errno, "chdir_long failed: %s", line); if (argc <= 1) { /* Using 'pwd' here makes sense only if it is a robust implementation, like the one in coreutils after the 2004-04-19 changes. */ char const *cmd = "pwd"; execlp (cmd, (char *) NULL); error (EXIT_FAILURE, errno, "%s", cmd); } fclose (stdin); fclose (stderr); exit (EXIT_SUCCESS); } #endif /* Local Variables: compile-command: "gcc -DTEST_CHDIR=1 -g -O -W -Wall chdir-long.c libcoreutils.a" End: */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/chdir-long.h������������������������������������������������������������0000664�0000000�0000000�00000002070�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <unistd.h> #include <limits.h> #include "pathmax.h" /* On systems without PATH_MAX, presume that chdir accepts arbitrarily long directory names. */ #ifndef PATH_MAX # define chdir_long(Dir) chdir (Dir) #else int chdir_long (char *dir); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/check-version.c���������������������������������������������������������0000664�0000000�0000000�00000003111�14110572173�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* check-version.h --- Check version string compatibility. Copyright (C) 1998-2006, 2008-2021 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 Simon Josefsson. This interface is influenced by gcry_check_version from Werner Koch's Libgcrypt. Paul Eggert suggested the use of strverscmp to simplify implementation. */ #include <config.h> #include <stddef.h> #include <string.h> /* Get specification. */ #include "check-version.h" /* Check that the version of the library (i.e., the CPP symbol VERSION) * is at minimum the requested one in REQ_VERSION (typically found in * a header file) and return the version string. Return NULL if the * condition is not satisfied. If a NULL is passed to this function, * no check is done, but the version string is simply returned. */ const char * check_version (const char *req_version) { if (!req_version || strverscmp (req_version, VERSION) <= 0) return VERSION; return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/check-version.h���������������������������������������������������������0000664�0000000�0000000�00000001705�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* check-version.h --- Check version string compatibility. Copyright (C) 2005, 2009-2021 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 Simon Josefsson. */ #ifndef CHECK_VERSION_H # define CHECK_VERSION_H extern const char * check_version (const char *req_version); #endif /* CHECK_VERSION_H */ �����������������������������������������������������������gnulib-20210822~d383792/lib/chmodat.c���������������������������������������������������������������0000664�0000000�0000000�00000001507�14110572173�0016633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change access permissions of a file at a directory. Copyright (C) 2012-2021 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 <config.h> #define CHMODAT_INLINE _GL_EXTERN_INLINE #include "openat.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/chown.c�����������������������������������������������������������������0000664�0000000�0000000�00000010457�14110572173�0016336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide consistent interface to chown for systems that don't interpret an ID of -1 as meaning "don't change the corresponding ID". Copyright (C) 1997, 2004-2007, 2009-2021 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #if !HAVE_CHOWN /* Simple stub that always fails with ENOSYS, for mingw. */ int chown (_GL_UNUSED const char *file, _GL_UNUSED uid_t uid, _GL_UNUSED gid_t gid) { errno = ENOSYS; return -1; } #else /* HAVE_CHOWN */ /* Below we refer to the system's chown(). */ # undef chown /* Provide a more-closely POSIX-conforming version of chown on systems with one or both of the following problems: - chown doesn't treat an ID of -1 as meaning "don't change the corresponding ID". - chown doesn't dereference symlinks. */ int rpl_chown (const char *file, uid_t uid, gid_t gid) { struct stat st; bool stat_valid = false; int result; # if CHOWN_CHANGE_TIME_BUG if (gid != (gid_t) -1 || uid != (uid_t) -1) { if (stat (file, &st)) return -1; stat_valid = true; } # endif # if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE if (gid == (gid_t) -1 || uid == (uid_t) -1) { /* Stat file to get id(s) that should remain unchanged. */ if (!stat_valid && stat (file, &st)) return -1; if (gid == (gid_t) -1) gid = st.st_gid; if (uid == (uid_t) -1) uid = st.st_uid; } # endif # if CHOWN_MODIFIES_SYMLINK { /* Handle the case in which the system-supplied chown function does *not* follow symlinks. Instead, it changes permissions on the symlink itself. To work around that, we open the file (but this can fail due to lack of read or write permission) and use fchown on the resulting descriptor. */ int open_flags = O_NONBLOCK | O_NOCTTY | O_CLOEXEC; int fd = open (file, O_RDONLY | open_flags); if (0 <= fd || (errno == EACCES && 0 <= (fd = open (file, O_WRONLY | open_flags)))) { int saved_errno; bool fchown_socket_failure; result = fchown (fd, uid, gid); saved_errno = errno; /* POSIX says fchown can fail with errno == EINVAL on sockets and pipes, so fall back on chown in that case. */ fchown_socket_failure = (result != 0 && saved_errno == EINVAL && fstat (fd, &st) == 0 && (S_ISFIFO (st.st_mode) || S_ISSOCK (st.st_mode))); close (fd); if (! fchown_socket_failure) { errno = saved_errno; return result; } } else if (errno != EACCES) return -1; } # endif # if CHOWN_TRAILING_SLASH_BUG if (!stat_valid) { size_t len = strlen (file); if (len && file[len - 1] == '/' && stat (file, &st)) return -1; } # endif result = chown (file, uid, gid); # if CHOWN_CHANGE_TIME_BUG if (result == 0 && stat_valid && (uid == st.st_uid || uid == (uid_t) -1) && (gid == st.st_gid || gid == (gid_t) -1)) { /* No change in ownership, but at least one argument was not -1, so we are required to update ctime. Since chown succeeded, we assume that chmod will do likewise. Fortunately, on all known systems where a 'no-op' chown skips the ctime update, a 'no-op' chmod still does the trick. */ result = chmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX)); } # endif return result; } #endif /* HAVE_CHOWN */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/chownat.c���������������������������������������������������������������0000664�0000000�0000000�00000001472�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change owner of a file at a directory. Copyright (C) 2012-2021 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 <config.h> #define CHOWNAT_INLINE _GL_EXTERN_INLINE #include "openat.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/classpath.c�������������������������������������������������������������0000664�0000000�0000000�00000006665�14110572173�0017210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Java CLASSPATH handling. Copyright (C) 2001-2003, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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/>. */ /* If CLASSPATHVAR is defined, this file is being #included, and config.h is therefore already included. */ #if !defined CLASSPATHVAR # include <config.h> #endif /* Specification. */ #include "classpath.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "xsetenv.h" #include "xalloc.h" /* Name of environment variable. */ #ifndef CLASSPATHVAR # define CLASSPATHVAR "CLASSPATH" #endif /* Separator in PATH like lists of pathnames. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Return the new CLASSPATH value. The given classpaths are prepended to the current CLASSPATH value. If use_minimal_classpath, the current CLASSPATH is ignored. */ char * new_classpath (const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath) { const char *old_classpath; unsigned int length; unsigned int i; char *result; char *p; old_classpath = (use_minimal_classpath ? NULL : getenv (CLASSPATHVAR)); if (old_classpath == NULL) old_classpath = ""; length = 0; for (i = 0; i < classpaths_count; i++) length += strlen (classpaths[i]) + 1; length += strlen (old_classpath); if (classpaths_count > 0 && old_classpath[0] == '\0') length--; result = XNMALLOC (length + 1, char); p = result; for (i = 0; i < classpaths_count; i++) { memcpy (p, classpaths[i], strlen (classpaths[i])); p += strlen (classpaths[i]); *p++ = PATH_SEPARATOR; } if (old_classpath[0] != '\0') { memcpy (p, old_classpath, strlen (old_classpath)); p += strlen (old_classpath); } else { if (classpaths_count > 0) p--; } *p = '\0'; return result; } /* Set CLASSPATH and returns a safe copy of its old value. */ char * set_classpath (const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath, bool verbose) { const char *old_CLASSPATH = getenv (CLASSPATHVAR); char *result = (old_CLASSPATH != NULL ? xstrdup (old_CLASSPATH) : NULL); char *new_CLASSPATH = new_classpath (classpaths, classpaths_count, use_minimal_classpath); if (verbose) printf (CLASSPATHVAR "=%s ", new_CLASSPATH); xsetenv (CLASSPATHVAR, new_CLASSPATH, 1); free (new_CLASSPATH); return result; } /* Restore CLASSPATH to its previous value. */ void reset_classpath (char *old_classpath) { if (old_classpath != NULL) { xsetenv (CLASSPATHVAR, old_classpath, 1); free (old_classpath); } else unsetenv (CLASSPATHVAR); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/classpath.h�������������������������������������������������������������0000664�0000000�0000000�00000002774�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Java CLASSPATH handling. Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2003. This 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 <stdbool.h> /* Return the new CLASSPATH value. The given classpaths are prepended to the current CLASSPATH value. If use_minimal_classpath, the current CLASSPATH is ignored. */ extern char * new_classpath (const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath); /* Set CLASSPATH and returns a safe copy of its old value. */ extern char * set_classpath (const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath, bool verbose); /* Restore CLASSPATH to its previous value. */ extern void reset_classpath (char *old_classpath); ����gnulib-20210822~d383792/lib/clean-temp-private.h����������������������������������������������������0000664�0000000�0000000�00000006125�14110572173�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Private interface between modules 'clean-temp-simple' and 'clean-temp'. Copyright (C) 2006-2021 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/>. */ #ifndef _CLEAN_TEMP_PRIVATE_H #define _CLEAN_TEMP_PRIVATE_H #include <stdbool.h> #include <stddef.h> #include "gl_list.h" #include "asyncsafe-spin.h" /* The use of 'volatile' in the types below (and ISO C 99 section 5.1.2.3.(5)) ensure that while constructing or modifying the data structures, the field values are written to memory in the order of the C statements. So the signal handler can rely on these field values to be up to date. */ /* Registry for a single temporary directory. 'struct temp_dir' from the public header file overlaps with this. */ struct tempdir { /* The absolute pathname of the directory. */ char * volatile dirname; /* Whether errors during explicit cleanup are reported to standard error. */ bool cleanup_verbose; /* Absolute pathnames of subdirectories. */ gl_list_t /* <char *> */ volatile subdirs; /* Absolute pathnames of files. */ gl_list_t /* <char *> */ volatile files; }; /* List of all temporary directories. */ struct all_tempdirs { struct tempdir * volatile * volatile tempdir_list; size_t volatile tempdir_count; size_t tempdir_allocated; }; #define dir_cleanup_list clean_temp_dir_cleanup_list extern struct all_tempdirs dir_cleanup_list; /* A file descriptor to be closed. In multithreaded programs, it is forbidden to close the same fd twice, because you never know what unrelated open() calls are being executed in other threads. So, the 'close (fd)' must be guarded by a once-only guard. */ struct closeable_fd { /* The file descriptor to close. */ int volatile fd; /* Set to true when it has been closed. */ bool volatile closed; /* Lock that protects the fd from being closed twice. */ asyncsafe_spinlock_t lock; /* Tells whether this list element has been done and can be freed. */ bool volatile done; }; #define descriptors clean_temp_descriptors extern gl_list_t /* <closeable_fd *> */ volatile descriptors; extern bool clean_temp_string_equals (const void *x1, const void *x2); extern size_t clean_temp_string_hash (const void *x); extern _GL_ASYNC_SAFE int clean_temp_asyncsafe_close (struct closeable_fd *element); extern void clean_temp_init_asyncsafe_close (void); extern int clean_temp_init (void); extern int clean_temp_unlink (const char *absolute_file_name, bool cleanup_verbose); #endif /* _CLEAN_TEMP_PRIVATE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/clean-temp-simple.c�����������������������������������������������������0000664�0000000�0000000�00000027206�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary files with automatic cleanup. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "clean-temp-simple.h" #include "clean-temp-private.h" #include <errno.h> #include <limits.h> #include <signal.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "error.h" #include "fatal-signal.h" #include "asyncsafe-spin.h" #include "glthread/lock.h" #include "thread-optim.h" #include "gl_list.h" #include "gl_linkedhash_list.h" #include "gettext.h" #define _(str) gettext (str) /* Lock that protects the file_cleanup_list from concurrent modification in different threads. */ gl_lock_define_initialized (static, file_cleanup_list_lock) /* List of all temporary files without temporary directories. */ static gl_list_t /* <char *> */ volatile file_cleanup_list; /* List of all temporary directories. */ struct all_tempdirs dir_cleanup_list /* = { NULL, 0, 0 } */; /* List of all open file descriptors to temporary files. */ gl_list_t /* <closeable_fd *> */ volatile descriptors; /* For the subdirs and for the files, we use a gl_list_t of type LINKEDHASH. Why? We need a data structure that 1) Can contain an arbitrary number of 'char *' values. The strings are compared via strcmp, not pointer comparison. 2) Has insertion and deletion operations that are fast: ideally O(1), or possibly O(log n). This is important for GNU sort, which may create a large number of temporary files. 3) Allows iteration through all elements from within a signal handler. 4) May or may not allow duplicates. It doesn't matter here, since any file or subdir can only be removed once. Criterion 1) would allow any gl_list_t or gl_oset_t implementation. Criterion 2) leaves only GL_LINKEDHASH_LIST, GL_TREEHASH_LIST, or GL_TREE_OSET. Criterion 3) puts at disadvantage GL_TREEHASH_LIST and GL_TREE_OSET. Namely, iteration through the elements of a binary tree requires access to many ->left, ->right, ->parent pointers. However, the rebalancing code for insertion and deletion in an AVL or red-black tree is so complicated that we cannot assume that >left, ->right, ->parent pointers are in a consistent state throughout these operations. Therefore, to avoid a crash in the signal handler, all destructive operations to the lists would have to be protected by a block_fatal_signals (); ... unblock_fatal_signals (); pair. Which causes extra system calls. Criterion 3) would also discourage GL_ARRAY_LIST and GL_CARRAY_LIST, if they were not already excluded. Namely, these implementations use xrealloc(), leaving a time window in which in the list->elements pointer points to already deallocated memory. To avoid a crash in the signal handler at such a moment, all destructive operations would have to protected by block/unblock_fatal_signals (), in this case too. A list of type GL_LINKEDHASH_LIST without duplicates fulfills all requirements: 2) Insertion and deletion are O(1) on average. 3) The gl_list_iterator, gl_list_iterator_next implementations do not trigger memory allocations, nor other system calls, and are therefore safe to be called from a signal handler. Furthermore, since SIGNAL_SAFE_LIST is defined, the implementation of the destructive functions ensures that the list structure is safe to be traversed at any moment, even when interrupted by an asynchronous signal. */ /* String equality and hash code functions used by the lists. */ bool clean_temp_string_equals (const void *x1, const void *x2) { const char *s1 = (const char *) x1; const char *s2 = (const char *) x2; return strcmp (s1, s2) == 0; } #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ size_t clean_temp_string_hash (const void *x) { const char *s = (const char *) x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } /* The set of fatal signal handlers. Cached here because we are not allowed to call get_fatal_signal_set () from a signal handler. */ static const sigset_t *fatal_signal_set /* = NULL */; static void init_fatal_signal_set (void) { if (fatal_signal_set == NULL) fatal_signal_set = get_fatal_signal_set (); } /* Close a file descriptor. Avoids race conditions with normal thread code or signal-handler code that might want to close the same file descriptor. */ _GL_ASYNC_SAFE int clean_temp_asyncsafe_close (struct closeable_fd *element) { sigset_t saved_mask; int ret; int saved_errno; asyncsafe_spin_lock (&element->lock, fatal_signal_set, &saved_mask); if (!element->closed) { ret = close (element->fd); saved_errno = errno; element->closed = true; } else { ret = 0; saved_errno = 0; } asyncsafe_spin_unlock (&element->lock, &saved_mask); element->done = true; errno = saved_errno; return ret; } /* Initializations for use of this function. */ void clean_temp_init_asyncsafe_close (void) { init_fatal_signal_set (); } /* The signal handler. It gets called asynchronously. */ static _GL_ASYNC_SAFE void cleanup_action (_GL_UNUSED int sig) { size_t i; /* First close all file descriptors to temporary files. */ { gl_list_t fds = descriptors; if (fds != NULL) { gl_list_iterator_t iter; const void *element; iter = gl_list_iterator (fds); while (gl_list_iterator_next (&iter, &element, NULL)) { clean_temp_asyncsafe_close ((struct closeable_fd *) element); } gl_list_iterator_free (&iter); } } { gl_list_t files = file_cleanup_list; if (files != NULL) { gl_list_iterator_t iter; const void *element; iter = gl_list_iterator (files); while (gl_list_iterator_next (&iter, &element, NULL)) { const char *file = (const char *) element; unlink (file); } gl_list_iterator_free (&iter); } } for (i = 0; i < dir_cleanup_list.tempdir_count; i++) { struct tempdir *dir = dir_cleanup_list.tempdir_list[i]; if (dir != NULL) { gl_list_iterator_t iter; const void *element; /* First cleanup the files in the subdirectories. */ iter = gl_list_iterator (dir->files); while (gl_list_iterator_next (&iter, &element, NULL)) { const char *file = (const char *) element; unlink (file); } gl_list_iterator_free (&iter); /* Then cleanup the subdirectories. */ iter = gl_list_iterator (dir->subdirs); while (gl_list_iterator_next (&iter, &element, NULL)) { const char *subdir = (const char *) element; rmdir (subdir); } gl_list_iterator_free (&iter); /* Then cleanup the temporary directory itself. */ rmdir (dir->dirname); } } } /* Set to -1 if initialization of this facility failed. */ static int volatile init_failed /* = 0 */; /* Initializes this facility. */ static void do_clean_temp_init (void) { /* Initialize the data used by the cleanup handler. */ init_fatal_signal_set (); /* Register the cleanup handler. */ if (at_fatal_signal (&cleanup_action) < 0) init_failed = -1; } /* Ensure that do_clean_temp_init is called once only. */ gl_once_define(static, clean_temp_once) /* Initializes this facility upon first use. Return 0 upon success, or -1 if there was a memory allocation problem. */ int clean_temp_init (void) { gl_once (clean_temp_once, do_clean_temp_init); return init_failed; } /* Remove a file, with optional error message. Return 0 upon success, or -1 if there was some problem. */ int clean_temp_unlink (const char *absolute_file_name, bool cleanup_verbose) { if (unlink (absolute_file_name) < 0 && cleanup_verbose && errno != ENOENT) { error (0, errno, _("cannot remove temporary file %s"), absolute_file_name); return -1; } return 0; } /* ============= Temporary files without temporary directories ============= */ /* Register the given ABSOLUTE_FILE_NAME as being a file that needs to be removed. Should be called before the file ABSOLUTE_FILE_NAME is created. Return 0 upon success, or -1 if there was a memory allocation problem. */ int register_temporary_file (const char *absolute_file_name) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (file_cleanup_list_lock); int ret = 0; /* Make sure that this facility and the file_cleanup_list are initialized. */ if (file_cleanup_list == NULL) { if (clean_temp_init () < 0) { ret = -1; goto done; } file_cleanup_list = gl_list_nx_create_empty (GL_LINKEDHASH_LIST, clean_temp_string_equals, clean_temp_string_hash, NULL, false); if (file_cleanup_list == NULL) { ret = -1; goto done; } } /* Add absolute_file_name to file_cleanup_list, without duplicates. */ if (gl_list_search (file_cleanup_list, absolute_file_name) == NULL) { char *absolute_file_name_copy = strdup (absolute_file_name); if (absolute_file_name_copy == NULL) { ret = -1; goto done; } if (gl_list_nx_add_first (file_cleanup_list, absolute_file_name_copy) == NULL) { free (absolute_file_name_copy); ret = -1; goto done; } } done: if (mt) gl_lock_unlock (file_cleanup_list_lock); return ret; } /* Unregister the given ABSOLUTE_FILE_NAME as being a file that needs to be removed. Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ void unregister_temporary_file (const char *absolute_file_name) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (file_cleanup_list_lock); gl_list_t list = file_cleanup_list; if (list != NULL) { gl_list_node_t node = gl_list_search (list, absolute_file_name); if (node != NULL) { char *old_string = (char *) gl_list_node_value (list, node); gl_list_remove_node (list, node); free (old_string); } } if (mt) gl_lock_unlock (file_cleanup_list_lock); } /* Remove the given ABSOLUTE_FILE_NAME and unregister it. CLEANUP_VERBOSE determines whether errors are reported to standard error. Return 0 upon success, or -1 if there was some problem. */ int cleanup_temporary_file (const char *absolute_file_name, bool cleanup_verbose) { int err; err = clean_temp_unlink (absolute_file_name, cleanup_verbose); unregister_temporary_file (absolute_file_name); return err; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/clean-temp-simple.h�����������������������������������������������������0000664�0000000�0000000�00000003620�14110572173�0020533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary files with automatic cleanup. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _CLEAN_TEMP_SIMPLE_H #define _CLEAN_TEMP_SIMPLE_H #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* See clean-temp.h for a general discussion of this module. */ /* Register the given ABSOLUTE_FILE_NAME as being a file that needs to be removed. Should be called before the file ABSOLUTE_FILE_NAME is created. Return 0 upon success, or -1 if there was a memory allocation problem. */ extern int register_temporary_file (const char *absolute_file_name); /* Unregister the given ABSOLUTE_FILE_NAME as being a file that needs to be removed. Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ extern void unregister_temporary_file (const char *absolute_file_name); /* Remove the given ABSOLUTE_FILE_NAME and unregister it. CLEANUP_VERBOSE determines whether errors are reported to standard error. Return 0 upon success, or -1 if there was some problem. */ extern int cleanup_temporary_file (const char *absolute_file_name, bool cleanup_verbose); #ifdef __cplusplus } #endif #endif /* _CLEAN_TEMP_SIMPLE_H */ ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/clean-temp.c������������������������������������������������������������0000664�0000000�0000000�00000060733�14110572173�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary directories and temporary files with automatic cleanup. Copyright (C) 2001, 2003, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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> /* Specification. */ #include "clean-temp.h" #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #include "clean-temp-simple.h" #include "clean-temp-private.h" #include "error.h" #include "fatal-signal.h" #include "asyncsafe-spin.h" #include "pathmax.h" #include "tmpdir.h" #include "xalloc.h" #include "xmalloca.h" #include "glthread/lock.h" #include "thread-optim.h" #include "gl_xlist.h" #include "gl_linkedhash_list.h" #include "gl_linked_list.h" #include "gettext.h" #if GNULIB_TEMPNAME # include "tempname.h" #endif #if GNULIB_FWRITEERROR # include "fwriteerror.h" #endif #if GNULIB_CLOSE_STREAM # include "close-stream.h" #endif #if GNULIB_FCNTL_SAFER # include "fcntl--.h" #endif #if GNULIB_FOPEN_SAFER # include "stdio--.h" #endif #define _(str) gettext (str) /* GNU Hurd doesn't have PATH_MAX. Use a fallback. Temporary directory names are usually not that long. */ #ifndef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef OSVERSIONINFO # define OSVERSIONINFO OSVERSIONINFOA # undef GetVersionEx # define GetVersionEx GetVersionExA #endif /* Lock that protects the dir_cleanup_list from concurrent modification in different threads. */ gl_lock_define_initialized (static, dir_cleanup_list_lock) /* Lock that protects the descriptors list from concurrent modification in different threads. */ gl_lock_define_initialized (static, descriptors_lock) /* Close a file descriptor and the stream that contains it. Avoids race conditions with signal-handler code that might want to close the same file descriptor. */ static int asyncsafe_fclose_variant (struct closeable_fd *element, FILE *fp, int (*fclose_variant) (FILE *)) { if (fileno (fp) != element->fd) abort (); /* Flush buffered data first, to minimize the duration of the spin lock. */ fflush (fp); sigset_t saved_mask; int ret; int saved_errno; asyncsafe_spin_lock (&element->lock, get_fatal_signal_set (), &saved_mask); if (!element->closed) { ret = fclose_variant (fp); /* invokes close (element->fd) */ saved_errno = errno; element->closed = true; } else { ret = 0; saved_errno = 0; } asyncsafe_spin_unlock (&element->lock, &saved_mask); element->done = true; errno = saved_errno; return ret; } /* ========= Temporary directories and temporary files inside them ========= */ /* Create a temporary directory. PREFIX is used as a prefix for the name of the temporary directory. It should be short and still give an indication about the program. PARENTDIR can be used to specify the parent directory; if NULL, a default parent directory is used (either $TMPDIR or /tmp or similar). CLEANUP_VERBOSE determines whether errors during explicit cleanup are reported to standard error. Return a fresh 'struct temp_dir' on success. Upon error, an error message is shown and NULL is returned. */ struct temp_dir * create_temp_dir (const char *prefix, const char *parentdir, bool cleanup_verbose) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); struct tempdir * volatile *tmpdirp = NULL; struct tempdir *tmpdir; size_t i; char *xtemplate; char *tmpdirname; /* See whether it can take the slot of an earlier temporary directory already cleaned up. */ for (i = 0; i < dir_cleanup_list.tempdir_count; i++) if (dir_cleanup_list.tempdir_list[i] == NULL) { tmpdirp = &dir_cleanup_list.tempdir_list[i]; break; } if (tmpdirp == NULL) { /* See whether the array needs to be extended. */ if (dir_cleanup_list.tempdir_count == dir_cleanup_list.tempdir_allocated) { /* Note that we cannot use xrealloc(), because then the cleanup() function could access an already deallocated array. */ struct tempdir * volatile *old_array = dir_cleanup_list.tempdir_list; size_t old_allocated = dir_cleanup_list.tempdir_allocated; size_t new_allocated = 2 * dir_cleanup_list.tempdir_allocated + 1; struct tempdir * volatile *new_array = XNMALLOC (new_allocated, struct tempdir * volatile); if (old_allocated == 0) { /* First use of this facility. */ if (clean_temp_init () < 0) xalloc_die (); } else { /* Don't use memcpy() here, because memcpy takes non-volatile arguments and is therefore not guaranteed to complete all memory stores before the next statement. */ size_t k; for (k = 0; k < old_allocated; k++) new_array[k] = old_array[k]; } dir_cleanup_list.tempdir_list = new_array; dir_cleanup_list.tempdir_allocated = new_allocated; /* Now we can free the old array. */ /* No, we can't do that. If cleanup_action is running in a different thread and has already fetched the tempdir_list pointer (getting old_array) but not yet accessed its i-th element, that thread may crash when accessing an element of the already freed old_array array. */ #if 0 if (old_array != NULL) free ((struct tempdir **) old_array); #endif } tmpdirp = &dir_cleanup_list.tempdir_list[dir_cleanup_list.tempdir_count]; /* Initialize *tmpdirp before incrementing tempdir_count, so that cleanup() will skip this entry before it is fully initialized. */ *tmpdirp = NULL; dir_cleanup_list.tempdir_count++; } /* Initialize a 'struct tempdir'. */ tmpdir = XMALLOC (struct tempdir); tmpdir->dirname = NULL; tmpdir->cleanup_verbose = cleanup_verbose; tmpdir->subdirs = gl_list_create_empty (GL_LINKEDHASH_LIST, clean_temp_string_equals, clean_temp_string_hash, NULL, false); tmpdir->files = gl_list_create_empty (GL_LINKEDHASH_LIST, clean_temp_string_equals, clean_temp_string_hash, NULL, false); /* Create the temporary directory. */ xtemplate = (char *) xmalloca (PATH_MAX); if (path_search (xtemplate, PATH_MAX, parentdir, prefix, parentdir == NULL)) { error (0, errno, _("cannot find a temporary directory, try setting $TMPDIR")); goto quit; } block_fatal_signals (); tmpdirname = mkdtemp (xtemplate); int saved_errno = errno; if (tmpdirname != NULL) { tmpdir->dirname = tmpdirname; *tmpdirp = tmpdir; } unblock_fatal_signals (); if (tmpdirname == NULL) { error (0, saved_errno, _("cannot create a temporary directory using template \"%s\""), xtemplate); goto quit; } /* Replace tmpdir->dirname with a copy that has indefinite extent. We cannot do this inside the block_fatal_signals/unblock_fatal_signals block because then the cleanup handler would not remove the directory if xstrdup fails. */ tmpdir->dirname = xstrdup (tmpdirname); if (mt) gl_lock_unlock (dir_cleanup_list_lock); freea (xtemplate); return (struct temp_dir *) tmpdir; quit: if (mt) gl_lock_unlock (dir_cleanup_list_lock); freea (xtemplate); return NULL; } /* Register the given ABSOLUTE_FILE_NAME as being a file inside DIR, that needs to be removed before DIR can be removed. Should be called before the file ABSOLUTE_FILE_NAME is created. */ void register_temp_file (struct temp_dir *dir, const char *absolute_file_name) { struct tempdir *tmpdir = (struct tempdir *)dir; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); /* Add absolute_file_name to tmpdir->files, without duplicates. */ if (gl_list_search (tmpdir->files, absolute_file_name) == NULL) gl_list_add_first (tmpdir->files, xstrdup (absolute_file_name)); if (mt) gl_lock_unlock (dir_cleanup_list_lock); } /* Unregister the given ABSOLUTE_FILE_NAME as being a file inside DIR, that needs to be removed before DIR can be removed. Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ void unregister_temp_file (struct temp_dir *dir, const char *absolute_file_name) { struct tempdir *tmpdir = (struct tempdir *)dir; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); gl_list_t list = tmpdir->files; gl_list_node_t node; node = gl_list_search (list, absolute_file_name); if (node != NULL) { char *old_string = (char *) gl_list_node_value (list, node); gl_list_remove_node (list, node); free (old_string); } if (mt) gl_lock_unlock (dir_cleanup_list_lock); } /* Register the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, that needs to be removed before DIR can be removed. Should be called before the subdirectory ABSOLUTE_DIR_NAME is created. */ void register_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name) { struct tempdir *tmpdir = (struct tempdir *)dir; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); /* Add absolute_dir_name to tmpdir->subdirs, without duplicates. */ if (gl_list_search (tmpdir->subdirs, absolute_dir_name) == NULL) gl_list_add_first (tmpdir->subdirs, xstrdup (absolute_dir_name)); if (mt) gl_lock_unlock (dir_cleanup_list_lock); } /* Unregister the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, that needs to be removed before DIR can be removed. Should be called when the subdirectory ABSOLUTE_DIR_NAME could not be created. */ void unregister_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name) { struct tempdir *tmpdir = (struct tempdir *)dir; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); gl_list_t list = tmpdir->subdirs; gl_list_node_t node; node = gl_list_search (list, absolute_dir_name); if (node != NULL) { char *old_string = (char *) gl_list_node_value (list, node); gl_list_remove_node (list, node); free (old_string); } if (mt) gl_lock_unlock (dir_cleanup_list_lock); } /* Remove a directory, with optional error message. Return 0 upon success, or -1 if there was some problem. */ static int do_rmdir (const char *absolute_dir_name, bool cleanup_verbose) { if (rmdir (absolute_dir_name) < 0 && cleanup_verbose && errno != ENOENT) { error (0, errno, _("cannot remove temporary directory %s"), absolute_dir_name); return -1; } return 0; } /* Remove the given ABSOLUTE_FILE_NAME and unregister it. Return 0 upon success, or -1 if there was some problem. */ int cleanup_temp_file (struct temp_dir *dir, const char *absolute_file_name) { int err; err = clean_temp_unlink (absolute_file_name, dir->cleanup_verbose); unregister_temp_file (dir, absolute_file_name); return err; } /* Remove the given ABSOLUTE_DIR_NAME and unregister it. Return 0 upon success, or -1 if there was some problem. */ int cleanup_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name) { int err; err = do_rmdir (absolute_dir_name, dir->cleanup_verbose); unregister_temp_subdir (dir, absolute_dir_name); return err; } /* Remove all registered files and subdirectories inside DIR. Only to be called with dir_cleanup_list_lock locked. Return 0 upon success, or -1 if there was some problem. */ int cleanup_temp_dir_contents (struct temp_dir *dir) { struct tempdir *tmpdir = (struct tempdir *)dir; int err = 0; gl_list_t list; gl_list_iterator_t iter; const void *element; gl_list_node_t node; /* First cleanup the files in the subdirectories. */ list = tmpdir->files; iter = gl_list_iterator (list); while (gl_list_iterator_next (&iter, &element, &node)) { char *file = (char *) element; err |= clean_temp_unlink (file, dir->cleanup_verbose); gl_list_remove_node (list, node); /* Now only we can free file. */ free (file); } gl_list_iterator_free (&iter); /* Then cleanup the subdirectories. */ list = tmpdir->subdirs; iter = gl_list_iterator (list); while (gl_list_iterator_next (&iter, &element, &node)) { char *subdir = (char *) element; err |= do_rmdir (subdir, dir->cleanup_verbose); gl_list_remove_node (list, node); /* Now only we can free subdir. */ free (subdir); } gl_list_iterator_free (&iter); return err; } /* Remove all registered files and subdirectories inside DIR and DIR itself. DIR cannot be used any more after this call. Return 0 upon success, or -1 if there was some problem. */ int cleanup_temp_dir (struct temp_dir *dir) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (dir_cleanup_list_lock); struct tempdir *tmpdir = (struct tempdir *)dir; int err = 0; size_t i; err |= cleanup_temp_dir_contents (dir); err |= do_rmdir (tmpdir->dirname, dir->cleanup_verbose); for (i = 0; i < dir_cleanup_list.tempdir_count; i++) if (dir_cleanup_list.tempdir_list[i] == tmpdir) { /* Remove dir_cleanup_list.tempdir_list[i]. */ if (i + 1 == dir_cleanup_list.tempdir_count) { while (i > 0 && dir_cleanup_list.tempdir_list[i - 1] == NULL) i--; dir_cleanup_list.tempdir_count = i; } else dir_cleanup_list.tempdir_list[i] = NULL; /* Now only we can free the tmpdir->dirname, tmpdir->subdirs, tmpdir->files, and tmpdir itself. */ gl_list_free (tmpdir->files); gl_list_free (tmpdir->subdirs); free (tmpdir->dirname); free (tmpdir); if (mt) gl_lock_unlock (dir_cleanup_list_lock); return err; } /* The user passed an invalid DIR argument. */ abort (); } /* ================== Opening and closing temporary files ================== */ #if defined _WIN32 && ! defined __CYGWIN__ /* On Windows, opening a file with _O_TEMPORARY has the effect of passing the FILE_FLAG_DELETE_ON_CLOSE flag to CreateFile(), which has the effect of deleting the file when it is closed - even when the program crashes. But (according to the Cygwin sources) it works only on Windows NT or newer. So we cache the info whether we are running on Windows NT or newer. */ static bool supports_delete_on_close () { static int known; /* 1 = yes, -1 = no, 0 = unknown */ if (!known) { OSVERSIONINFO v; /* According to <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getversionexa> this structure must be initialized as follows: */ v.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (GetVersionEx (&v)) known = (v.dwPlatformId == VER_PLATFORM_WIN32_NT ? 1 : -1); else known = -1; } return (known > 0); } #endif /* Register a file descriptor to be closed. */ static void register_fd (int fd) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (descriptors_lock); if (descriptors == NULL) descriptors = gl_list_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, false); struct closeable_fd *element = XMALLOC (struct closeable_fd); element->fd = fd; element->closed = false; asyncsafe_spin_init (&element->lock); element->done = false; gl_list_add_first (descriptors, element); if (mt) gl_lock_unlock (descriptors_lock); } /* Open a temporary file in a temporary directory. FILE_NAME must already have been passed to register_temp_file. Registers the resulting file descriptor to be closed. DELETE_ON_CLOSE indicates whether the file can be deleted when the resulting file descriptor or stream is closed. */ int open_temp (const char *file_name, int flags, mode_t mode, bool delete_on_close) { int fd; int saved_errno; block_fatal_signals (); /* Note: 'open' here is actually open() or open_safer(). */ #if defined _WIN32 && ! defined __CYGWIN__ /* Use _O_TEMPORARY when possible, to increase the chances that the temporary file is removed when the process crashes. */ if (delete_on_close && supports_delete_on_close ()) fd = open (file_name, flags | _O_TEMPORARY, mode); else #endif fd = open (file_name, flags, mode); saved_errno = errno; if (fd >= 0) register_fd (fd); unblock_fatal_signals (); errno = saved_errno; return fd; } /* Open a temporary file in a temporary directory. FILE_NAME must already have been passed to register_temp_file. Registers the resulting file descriptor to be closed. DELETE_ON_CLOSE indicates whether the file can be deleted when the resulting file descriptor or stream is closed. */ FILE * fopen_temp (const char *file_name, const char *mode, bool delete_on_close) { FILE *fp; int saved_errno; block_fatal_signals (); /* Note: 'fopen' here is actually fopen() or fopen_safer(). */ #if defined _WIN32 && ! defined __CYGWIN__ /* Use _O_TEMPORARY when possible, to increase the chances that the temporary file is removed when the process crashes. */ if (delete_on_close && supports_delete_on_close ()) { size_t mode_len = strlen (mode); char *augmented_mode = (char *) xmalloca (mode_len + 2); memcpy (augmented_mode, mode, mode_len); memcpy (augmented_mode + mode_len, "D", 2); fp = fopen (file_name, augmented_mode); saved_errno = errno; freea (augmented_mode); } else #endif { fp = fopen (file_name, mode); saved_errno = errno; } if (fp != NULL) { /* It is sufficient to register fileno (fp) instead of the entire fp, because at cleanup time there is no need to do an fflush (fp); a close (fileno (fp)) will be enough. */ int fd = fileno (fp); if (!(fd >= 0)) abort (); register_fd (fd); } unblock_fatal_signals (); errno = saved_errno; return fp; } #if GNULIB_TEMPNAME struct try_create_file_params { int flags; mode_t mode; }; static int try_create_file (char *file_name_tmpl, void *params_) { struct try_create_file_params *params = params_; return open (file_name_tmpl, (params->flags & ~O_ACCMODE) | O_RDWR | O_CREAT | O_EXCL, params->mode); } /* Open a temporary file, generating its name based on FILE_NAME_TMPL. FILE_NAME_TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). The name constructed does not exist at the time of the call. FILE_NAME_TMPL is overwritten with the result. A safe choice for MODE is S_IRUSR | S_IWUSR, a.k.a. 0600. Registers the file for deletion. Opens the file, with the given FLAGS and mode MODE. Registers the resulting file descriptor to be closed. */ int gen_register_open_temp (char *file_name_tmpl, int suffixlen, int flags, mode_t mode) { block_fatal_signals (); struct try_create_file_params params; params.flags = flags; params.mode = mode; int fd = try_tempname (file_name_tmpl, suffixlen, ¶ms, try_create_file); int saved_errno = errno; if (fd >= 0) { if (clean_temp_init () < 0) xalloc_die (); register_fd (fd); if (register_temporary_file (file_name_tmpl) < 0) xalloc_die (); } unblock_fatal_signals (); errno = saved_errno; return fd; } #endif /* Close a temporary file. FD must have been returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ int close_temp (int fd) { if (fd < 0) return close (fd); clean_temp_init_asyncsafe_close (); int result = 0; int saved_errno = 0; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (descriptors_lock); gl_list_t list = descriptors; if (list == NULL) /* descriptors should already contain fd. */ abort (); /* Search through the list, and clean it up on the fly. */ bool found = false; gl_list_iterator_t iter = gl_list_iterator (list); const void *elt; gl_list_node_t node; if (gl_list_iterator_next (&iter, &elt, &node)) for (;;) { struct closeable_fd *element = (struct closeable_fd *) elt; /* Close the file descriptor, avoiding races with the signal handler. */ if (element->fd == fd) { found = true; result = clean_temp_asyncsafe_close (element); saved_errno = errno; } bool free_this_node = element->done; struct closeable_fd *element_to_free = element; gl_list_node_t node_to_free = node; bool have_next = gl_list_iterator_next (&iter, &elt, &node); if (free_this_node) { free (element_to_free); gl_list_remove_node (list, node_to_free); } if (!have_next) break; } gl_list_iterator_free (&iter); if (!found) /* descriptors should already contain fd. */ abort (); if (mt) gl_lock_unlock (descriptors_lock); errno = saved_errno; return result; } static int fclose_variant_temp (FILE *fp, int (*fclose_variant) (FILE *)) { int fd = fileno (fp); int result = 0; int saved_errno = 0; bool mt = gl_multithreaded (); if (mt) gl_lock_lock (descriptors_lock); gl_list_t list = descriptors; if (list == NULL) /* descriptors should already contain fd. */ abort (); /* Search through the list, and clean it up on the fly. */ bool found = false; gl_list_iterator_t iter = gl_list_iterator (list); const void *elt; gl_list_node_t node; if (gl_list_iterator_next (&iter, &elt, &node)) for (;;) { struct closeable_fd *element = (struct closeable_fd *) elt; /* Close the file descriptor and the stream, avoiding races with the signal handler. */ if (element->fd == fd) { found = true; result = asyncsafe_fclose_variant (element, fp, fclose_variant); saved_errno = errno; } bool free_this_node = element->done; struct closeable_fd *element_to_free = element; gl_list_node_t node_to_free = node; bool have_next = gl_list_iterator_next (&iter, &elt, &node); if (free_this_node) { free (element_to_free); gl_list_remove_node (list, node_to_free); } if (!have_next) break; } gl_list_iterator_free (&iter); if (!found) /* descriptors should have contained fd. */ abort (); if (mt) gl_lock_unlock (descriptors_lock); errno = saved_errno; return result; } /* Close a temporary file. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ int fclose_temp (FILE *fp) { return fclose_variant_temp (fp, fclose); } #if GNULIB_FWRITEERROR /* Like fwriteerror. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ int fwriteerror_temp (FILE *fp) { return fclose_variant_temp (fp, fwriteerror); } #endif #if GNULIB_CLOSE_STREAM /* Like close_stream. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ int close_stream_temp (FILE *fp) { return fclose_variant_temp (fp, close_stream); } #endif �������������������������������������gnulib-20210822~d383792/lib/clean-temp.h������������������������������������������������������������0000664�0000000�0000000�00000020671�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary directories and temporary files with automatic cleanup. Copyright (C) 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _CLEAN_TEMP_H #define _CLEAN_TEMP_H #include <stdbool.h> #include <stdio.h> #include <sys/types.h> #ifdef __cplusplus extern "C" { #endif /* Temporary directories and temporary files should be automatically removed when the program exits either normally or through a fatal signal. We can't rely on the "unlink before close" idiom, because it works only on Unix and also - if no signal blocking is used - leaves a time window where a fatal signal would not clean up the temporary file. Also, open file descriptors need to be closed before the temporary files and the temporary directories can be removed, because only on Unix (excluding Cygwin) can one remove directories containing open files. There are two modules: - 'clean-temp' provides support for temporary directories and temporary files inside these temporary directories, - 'clean-temp-simple' provides support for temporary files without temporary directories. The temporary directories and files are automatically cleaned up (at the latest) when the program exits or dies from a fatal signal such as SIGINT, SIGTERM, SIGHUP, but not if it dies from a fatal signal such as SIGQUIT, SIGKILL, or SIGABRT, SIGSEGV, SIGBUS, SIGILL, SIGFPE. For the cleanup in the normal case, programs that use this module need to call 'cleanup_temp_dir' for each successful return of 'create_temp_dir'. The cleanup in the case of a fatal signal such as SIGINT, SIGTERM, SIGHUP, is done entirely automatically by the functions of this module. Limitations: Files or directories can still be left over if - the program is dies from a fatal signal such as SIGQUIT, SIGKILL, or SIGABRT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, or - in a multithreaded program, the fatal signal handler is already running while another thread of the program creates a new temporary directory or temporary file, or - on native Windows, some temporary files are used by a subprocess while the fatal signal interrupts the program. */ /* ============= Temporary files without temporary directories ============= */ #include "clean-temp-simple.h" /* ========= Temporary directories and temporary files inside them ========= */ struct temp_dir { /* The absolute pathname of the directory. */ const char * const dir_name; /* Whether errors during explicit cleanup are reported to standard error. */ bool cleanup_verbose; /* More fields are present here, but not public. */ }; /* Remove all registered files and subdirectories inside DIR and DIR itself. DIR cannot be used any more after this call. Return 0 upon success, or -1 if there was some problem. */ extern int cleanup_temp_dir (struct temp_dir *dir); /* Create a temporary directory. PREFIX is used as a prefix for the name of the temporary directory. It should be short and still give an indication about the program. PARENTDIR can be used to specify the parent directory; if NULL, a default parent directory is used (either $TMPDIR or /tmp or similar). CLEANUP_VERBOSE determines whether errors during explicit cleanup are reported to standard error. Return a fresh 'struct temp_dir' on success. Upon error, an error message is shown and NULL is returned. */ extern struct temp_dir * create_temp_dir (const char *prefix, const char *parentdir, bool cleanup_verbose) _GL_ATTRIBUTE_DEALLOC (cleanup_temp_dir, 1); /* Register the given ABSOLUTE_FILE_NAME as being a file inside DIR, that needs to be removed before DIR can be removed. Should be called before the file ABSOLUTE_FILE_NAME is created. */ extern void register_temp_file (struct temp_dir *dir, const char *absolute_file_name); /* Unregister the given ABSOLUTE_FILE_NAME as being a file inside DIR, that needs to be removed before DIR can be removed. Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ extern void unregister_temp_file (struct temp_dir *dir, const char *absolute_file_name); /* Register the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, that needs to be removed before DIR can be removed. Should be called before the subdirectory ABSOLUTE_DIR_NAME is created. */ extern void register_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name); /* Unregister the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, that needs to be removed before DIR can be removed. Should be called when the subdirectory ABSOLUTE_DIR_NAME could not be created. */ extern void unregister_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name); /* Remove the given ABSOLUTE_FILE_NAME and unregister it. Return 0 upon success, or -1 if there was some problem. */ extern int cleanup_temp_file (struct temp_dir *dir, const char *absolute_file_name); /* Remove the given ABSOLUTE_DIR_NAME and unregister it. Return 0 upon success, or -1 if there was some problem. */ extern int cleanup_temp_subdir (struct temp_dir *dir, const char *absolute_dir_name); /* Remove all registered files and subdirectories inside DIR. Return 0 upon success, or -1 if there was some problem. */ extern int cleanup_temp_dir_contents (struct temp_dir *dir); /* ================== Opening and closing temporary files ================== */ /* Open a temporary file in a temporary directory. FILE_NAME must already have been passed to register_temp_file. Registers the resulting file descriptor to be closed. DELETE_ON_CLOSE indicates whether the file can be deleted when the resulting file descriptor or stream is closed. */ extern int open_temp (const char *file_name, int flags, mode_t mode, bool delete_on_close); extern FILE * fopen_temp (const char *file_name, const char *mode, bool delete_on_close); /* Open a temporary file, generating its name based on FILE_NAME_TMPL. FILE_NAME_TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). The name constructed does not exist at the time of the call. FILE_NAME_TMPL is overwritten with the result. A safe choice for MODE is S_IRUSR | S_IWUSR, a.k.a. 0600. Registers the file for deletion. Opens the file, with the given FLAGS and mode MODE. Registers the resulting file descriptor to be closed. */ extern int gen_register_open_temp (char *file_name_tmpl, int suffixlen, int flags, mode_t mode); /* Close a temporary file. FD must have been returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ extern int close_temp (int fd); /* Close a temporary file. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ extern int fclose_temp (FILE *fp); /* Like fwriteerror. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ extern int fwriteerror_temp (FILE *fp); /* Like close_stream. FP must have been returned by fopen_temp, or by fdopen on a file descriptor returned by open_temp or gen_register_open_temp. Unregisters the previously registered file descriptor. */ extern int close_stream_temp (FILE *fp); #ifdef __cplusplus } #endif #endif /* _CLEAN_TEMP_H */ �����������������������������������������������������������������������gnulib-20210822~d383792/lib/cloexec.c���������������������������������������������������������������0000664�0000000�0000000�00000004454�14110572173�0016642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 2009-2021 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/>. */ /* The code is taken from glibc/manual/llio.texi */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value) { #ifdef F_SETFD int flags = fcntl (desc, F_GETFD, 0); if (0 <= flags) { int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); if (flags == newflags || fcntl (desc, F_SETFD, newflags) != -1) return 0; } return -1; #else /* !F_SETFD */ /* Use dup2 to reject invalid file descriptors; the cloexec flag will be unaffected. */ if (desc < 0) { errno = EBADF; return -1; } if (dup2 (desc, desc) < 0) /* errno is EBADF here. */ return -1; /* There is nothing we can do on this kind of platform. Punt. */ return 0; #endif /* !F_SETFD */ } /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd) { return fcntl (fd, F_DUPFD_CLOEXEC, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cloexec.h���������������������������������������������������������������0000664�0000000�0000000�00000002755�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 2009-2021 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/>. */ #include <stdbool.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value); /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd); �������������������gnulib-20210822~d383792/lib/close-stream.c����������������������������������������������������������0000664�0000000�0000000�00000005747�14110572173�0017624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream, with nicer error checking than fclose's. Copyright (C) 1998-2002, 2004, 2006-2021 Free Software Foundation, Inc. This 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 "close-stream.h" #include <errno.h> #include <stdbool.h> #include "fpending.h" #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* Close STREAM. Return 0 if successful, EOF (setting errno) otherwise. A failure might set errno to 0 if the error number cannot be determined. A failure with errno set to EPIPE may or may not indicate an error situation worth signaling to the user. See the documentation of the close_stdout_set_ignore_EPIPE function for details. If a program writes *anything* to STREAM, that program should close STREAM and make sure that it succeeds before exiting. Otherwise, suppose that you go to the extreme of checking the return status of every function that does an explicit write to STREAM. The last printf can succeed in writing to the internal stream buffer, and yet the fclose(STREAM) could still fail (due e.g., to a disk full error) when it tries to write out that buffered data. Thus, you would be left with an incomplete output file and the offending program would exit successfully. Even calling fflush is not always sufficient, since some file systems (NFS and CODA) buffer written/flushed data until an actual close call. Besides, it's wasteful to check the return value from every call that writes to STREAM -- just let the internal stream state record the failure. That's what the ferror test is checking below. */ int close_stream (FILE *stream) { const bool some_pending = (__fpending (stream) != 0); const bool prev_fail = (ferror (stream) != 0); const bool fclose_fail = (fclose (stream) != 0); /* Return an error indication if there was a previous failure or if fclose failed, with one exception: ignore an fclose failure if there was no previous error, no data remains to be flushed, and fclose failed with EBADF. That can happen when a program like cp is invoked like this 'cp a b >&-' (i.e., with standard output closed) and doesn't generate any output (hence no previous error and nothing to be flushed). */ if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) { if (! fclose_fail) errno = 0; return EOF; } return 0; } �������������������������gnulib-20210822~d383792/lib/close-stream.h����������������������������������������������������������0000664�0000000�0000000�00000001457�14110572173�0017623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream, with nicer error checking than fclose's. Copyright (C) 2006-2021 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 <stdio.h> int close_stream (FILE *stream); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/close.c�����������������������������������������������������������������0000664�0000000�0000000�00000003143�14110572173�0016317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* close replacement. Copyright (C) 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define close_nothrow _close # endif #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/closedir.c��������������������������������������������������������������0000664�0000000�0000000�00000003017�14110572173�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stop reading the entries of a directory. Copyright (C) 2006-2021 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/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #if REPLACE_FCHDIR # include <unistd.h> #endif #if HAVE_CLOSEDIR /* Override closedir(), to keep track of the open file descriptors. Needed because there is a function dirfd(). */ #else # include <stdlib.h> # include "dirent-private.h" #endif int closedir (DIR *dirp) { # if REPLACE_FCHDIR || REPLACE_DIRFD int fd = dirfd (dirp); # endif int retval; #if HAVE_CLOSEDIR # undef closedir retval = closedir (dirp); # ifdef __KLIBC__ if (!retval) _gl_unregister_dirp_fd (fd); # endif #else if (dirp->current != INVALID_HANDLE_VALUE) FindClose (dirp->current); free (dirp); retval = 0; #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/closein.c���������������������������������������������������������������0000664�0000000�0000000�00000007501�14110572173�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard input, rewinding seekable stdin if necessary. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 "closein.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "gettext.h" #define _(msgid) gettext (msgid) #include "close-stream.h" #include "closeout.h" #include "error.h" #include "exitfail.h" #include "freadahead.h" #include "quotearg.h" static const char *file_name; /* Set the file name to be reported in the event an error is detected on stdin by close_stdin. See also close_stdout_set_file_name, if an error is detected when closing stdout. */ void close_stdin_set_file_name (const char *file) { file_name = file; } /* Close standard input, rewinding any unused input if stdin is seekable. On error, issue a diagnostic and _exit with status 'exit_failure'. Then call close_stdout. Most programs can get by with close_stdout. close_stdin is only needed when a program wants to guarantee that partially read input from seekable stdin is not consumed, for any subsequent clients. For example, POSIX requires that these two commands behave alike: (sed -ne 1q; cat) < file tail -n +2 file Since close_stdin is commonly registered via 'atexit', POSIX and the C standard both say that it should not call 'exit', because the behavior is undefined if 'exit' is called more than once. So it calls '_exit' instead of 'exit'. If close_stdin is registered via atexit before other functions are registered, the other functions can act before this _exit is invoked. Applications that use close_stdout should flush any streams other than stdin, stdout, and stderr before exiting, since the call to _exit will bypass other buffer flushing. Applications should be flushing and closing other streams anyway, to check for I/O errors. Also, applications should not use tmpfile, since _exit can bypass the removal of these files. It's important to detect such failures and exit nonzero because many tools (most notably 'make' and other build-management systems) depend on being able to detect failure in other tools via their exit status. */ void close_stdin (void) { bool fail = false; /* There is no need to flush stdin if we can determine quickly that stdin's input buffer is empty; in this case we know that if stdin is seekable, (fseeko (stdin, 0, SEEK_CUR), ftello (stdin)) == lseek (0, 0, SEEK_CUR). */ if (freadahead (stdin) > 0) { /* Only attempt flush if stdin is seekable, as fflush is entitled to fail on non-seekable streams. */ if (fseeko (stdin, 0, SEEK_CUR) == 0 && fflush (stdin) != 0) fail = true; } if (close_stream (stdin) != 0) fail = true; if (fail) { /* Report failure, but defer exit until after closing stdout, since the failure report should still be flushed. */ char const *close_error = _("error closing file"); if (file_name) error (0, errno, "%s: %s", quotearg_colon (file_name), close_error); else error (0, errno, "%s", close_error); } close_stdout (); if (fail) _exit (exit_failure); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/closein.h���������������������������������������������������������������0000664�0000000�0000000�00000001727�14110572173�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard input, rewinding seekable stdin if necessary. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 _GL_CLOSEIN_H # define _GL_CLOSEIN_H 1 # ifdef __cplusplus extern "C" { # endif void close_stdin_set_file_name (const char *file); void close_stdin (void); # ifdef __cplusplus } # endif #endif �����������������������������������������gnulib-20210822~d383792/lib/closeout.c��������������������������������������������������������������0000664�0000000�0000000�00000011417�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard output and standard error, exiting with a diagnostic on error. Copyright (C) 1998-2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. This 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 "closeout.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "gettext.h" #define _(msgid) gettext (msgid) #include "close-stream.h" #include "error.h" #include "exitfail.h" #include "quotearg.h" #ifndef __has_feature # define __has_feature(a) false #endif #if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer) enum { SANITIZE_ADDRESS = true }; #else enum { SANITIZE_ADDRESS = false }; #endif static const char *file_name; /* Set the file name to be reported in the event an error is detected by close_stdout. */ void close_stdout_set_file_name (const char *file) { file_name = file; } static bool ignore_EPIPE /* = false */; /* Specify the reaction to an EPIPE error during the closing of stdout: - If ignore = true, it shall be ignored. - If ignore = false, it shall evoke a diagnostic, along with a nonzero exit status. The default is ignore = false. This setting matters only if the SIGPIPE signal is ignored (i.e. its handler set to SIG_IGN) or blocked. Only particular programs need to temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because it was ignored or blocked in the parent process when it created the child process, it usually is a bug in the parent process: It is bad practice to have SIGPIPE ignored or blocked while creating a child process. EPIPE occurs when writing to a pipe or socket that has no readers now, when SIGPIPE is ignored or blocked. The ignore = false setting is suitable for a scenario where it is normally guaranteed that the pipe writer terminates before the pipe reader. In this case, an EPIPE is an indication of a premature termination of the pipe reader and should lead to a diagnostic and a nonzero exit status. The ignore = true setting is suitable for a scenario where you don't know ahead of time whether the pipe writer or the pipe reader will terminate first. In this case, an EPIPE is an indication that the pipe writer can stop doing useless write() calls; this is what close_stdout does anyway. EPIPE is part of the normal pipe/socket shutdown protocol in this case, and should not lead to a diagnostic message. */ void close_stdout_set_ignore_EPIPE (bool ignore) { ignore_EPIPE = ignore; } /* Close standard output. On error, issue a diagnostic and _exit with status 'exit_failure'. Also close standard error. On error, _exit with status 'exit_failure'. Since close_stdout is commonly registered via 'atexit', POSIX and the C standard both say that it should not call 'exit', because the behavior is undefined if 'exit' is called more than once. So it calls '_exit' instead of 'exit'. If close_stdout is registered via atexit before other functions are registered, the other functions can act before this _exit is invoked. Applications that use close_stdout should flush any streams other than stdout and stderr before exiting, since the call to _exit will bypass other buffer flushing. Applications should be flushing and closing other streams anyway, to check for I/O errors. Also, applications should not use tmpfile, since _exit can bypass the removal of these files. It's important to detect such failures and exit nonzero because many tools (most notably 'make' and other build-management systems) depend on being able to detect failure in other tools via their exit status. */ void close_stdout (void) { if (close_stream (stdout) != 0 && !(ignore_EPIPE && errno == EPIPE)) { char const *write_error = _("write error"); if (file_name) error (0, errno, "%s: %s", quotearg_colon (file_name), write_error); else error (0, errno, "%s", write_error); _exit (exit_failure); } /* Close stderr only if not sanitizing, as sanitizers may report to stderr after this function returns. */ if (!SANITIZE_ADDRESS && close_stream (stderr) != 0) _exit (exit_failure); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/closeout.h��������������������������������������������������������������0000664�0000000�0000000�00000002043�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard output and standard error. Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc. This 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 CLOSEOUT_H # define CLOSEOUT_H 1 # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif void close_stdout_set_file_name (const char *file); void close_stdout_set_ignore_EPIPE (bool ignore); void close_stdout (void); # ifdef __cplusplus } # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cnd.c�������������������������������������������������������������������0000664�0000000�0000000�00000010716�14110572173�0015762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C 11 condition variables for multithreading. Copyright (C) 2008-2021 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 Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008, and Bruno Haible <bruno@clisp.org>, 2008, 2019. */ #include <config.h> #include <threads.h> #include <errno.h> #include <stdlib.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-mutex.h" # include "windows-recmutex.h" # include "windows-timedmutex.h" # include "windows-timedrecmutex.h" #else /* Use POSIX threads. */ # include <pthread.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ int cnd_init (cnd_t *cond) { int err = glwthread_cond_init (cond); return (err == 0 ? thrd_success : err == ENOMEM ? thrd_nomem : thrd_error); } static int mutex_lock (mtx_t *mutex) { switch (mutex->type) { case mtx_plain: return glwthread_mutex_lock (&mutex->u.u_mutex); case mtx_plain | mtx_recursive: return glwthread_recmutex_lock (&mutex->u.u_recmutex); case mtx_timed: return glwthread_timedmutex_lock (&mutex->u.u_timedmutex); case mtx_timed | mtx_recursive: return glwthread_timedrecmutex_lock (&mutex->u.u_timedrecmutex); default: abort (); } } static int mutex_unlock (mtx_t *mutex) { switch (mutex->type) { case mtx_plain: return glwthread_mutex_unlock (&mutex->u.u_mutex); case mtx_plain | mtx_recursive: return glwthread_recmutex_unlock (&mutex->u.u_recmutex); case mtx_timed: return glwthread_timedmutex_unlock (&mutex->u.u_timedmutex); case mtx_timed | mtx_recursive: return glwthread_timedrecmutex_unlock (&mutex->u.u_timedrecmutex); default: abort (); } } int cnd_wait (cnd_t *cond, mtx_t *mutex) { int err = glwthread_cond_wait (cond, mutex, (int (*) (void *)) mutex_lock, (int (*) (void *)) mutex_unlock); return (err == 0 ? thrd_success : thrd_error); } int cnd_timedwait (cnd_t *cond, mtx_t *mutex, const struct timespec *abstime) { int err = glwthread_cond_timedwait (cond, mutex, (int (*) (void *)) mutex_lock, (int (*) (void *)) mutex_unlock, abstime); return (err == 0 ? thrd_success : err == ETIMEDOUT ? thrd_timedout : thrd_error); } int cnd_signal (cnd_t *cond) { int err = glwthread_cond_signal (cond); return (err == 0 ? thrd_success : err == ENOMEM ? thrd_nomem : thrd_error); } int cnd_broadcast (cnd_t *cond) { int err = glwthread_cond_broadcast (cond); return (err == 0 ? thrd_success : thrd_error); } void cnd_destroy (cnd_t *cond) { glwthread_cond_destroy (cond); } #else /* Use POSIX threads. */ int cnd_init (cnd_t *cond) { int err = pthread_cond_init (cond, NULL); return (err == 0 ? thrd_success : err == ENOMEM ? thrd_nomem : thrd_error); } int cnd_wait (cnd_t *cond, mtx_t *mutex) { int err = pthread_cond_wait (cond, mutex); return (err == 0 ? thrd_success : thrd_error); } int cnd_timedwait (cnd_t *cond, mtx_t *mutex, const struct timespec *abstime) { int err = pthread_cond_timedwait (cond, mutex, abstime); return (err == 0 ? thrd_success : err == ETIMEDOUT ? thrd_timedout : thrd_error); } int cnd_signal (cnd_t *cond) { int err = pthread_cond_signal (cond); return (err == 0 ? thrd_success : err == ENOMEM ? thrd_nomem : thrd_error); } int cnd_broadcast (cnd_t *cond) { int err = pthread_cond_broadcast (cond); return (err == 0 ? thrd_success : thrd_error); } void cnd_destroy (cnd_t *cond) { pthread_cond_destroy (cond); } #endif ��������������������������������������������������gnulib-20210822~d383792/lib/concat-filename.c�������������������������������������������������������0000664�0000000�0000000�00000004774�14110572173�0020252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-2021 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 <haible@clisp.cons.org>. */ #include <config.h> /* Specification. */ #include "concat-filename.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "filename.h" /* Concatenate a directory filename, a relative filename and an optional suffix. The directory may end with the directory separator. The second argument may not start with the directory separator (it is relative). Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ char * concatenated_filename (const char *directory, const char *filename, const char *suffix) { char *result; char *p; if (strcmp (directory, ".") == 0) { /* No need to prepend the directory. */ result = (char *) malloc (strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ p = result; } else { size_t directory_len = strlen (directory); int need_slash = (directory_len > FILE_SYSTEM_PREFIX_LEN (directory) && !ISSLASH (directory[directory_len - 1])); result = (char *) malloc (directory_len + need_slash + strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ memcpy (result, directory, directory_len); p = result + directory_len; if (need_slash) *p++ = '/'; } p = stpcpy (p, filename); if (suffix != NULL) stpcpy (p, suffix); return result; } ����gnulib-20210822~d383792/lib/concat-filename.h�������������������������������������������������������0000664�0000000�0000000�00000003257�14110572173�0020252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2007-2021 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/>. */ #ifndef _CONCAT_FILENAME_H #define _CONCAT_FILENAME_H #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ extern char *concatenated_filename (const char *directory, const char *filename, const char *suffix) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. */ extern char *xconcatenated_filename (const char *directory, const char *filename, const char *suffix) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #ifdef __cplusplus } #endif #endif /* _CONCAT_FILENAME_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/connect.c���������������������������������������������������������������0000664�0000000�0000000�00000003037�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* connect.c --- wrappers for Windows connect function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef connect int rpl_connect (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = connect (sock, sockaddr, len); if (r < 0) { /* EINPROGRESS is not returned by WinSock 2.0; for backwards compatibility, connect(2) uses EWOULDBLOCK. */ if (WSAGetLastError () == WSAEWOULDBLOCK) WSASetLastError (WSAEINPROGRESS); set_winsock_errno (); } return r; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copy-acl.c��������������������������������������������������������������0000664�0000000�0000000�00000003674�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy access control list from one file to file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include <errno.h> #include "quote.h" #include "error.h" #include "gettext.h" #define _(msgid) gettext (msgid) /* Copy access control lists from one file to another. If SOURCE_DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on SRC_NAME. Likewise for DEST_DESC and DST_NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful, otherwise output a diagnostic and return a negative error code. */ int copy_acl (const char *src_name, int source_desc, const char *dst_name, int dest_desc, mode_t mode) { int ret = qcopy_acl (src_name, source_desc, dst_name, dest_desc, mode); switch (ret) { case -2: error (0, errno, "%s", quote (src_name)); break; case -1: error (0, errno, _("preserving permissions for %s"), quote (dst_name)); break; default: break; } return ret; } ��������������������������������������������������������������������gnulib-20210822~d383792/lib/copy-file-range.c�������������������������������������������������������0000664�0000000�0000000�00000002200�14110572173�0020164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for copy_file_range Copyright 2019-2021 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/>. */ #include <config.h> #include <unistd.h> #include <errno.h> ssize_t copy_file_range (int infd, off_t *pinoff, int outfd, off_t *poutoff, size_t length, unsigned int flags) { /* There is little need to emulate copy_file_range with read+write, since programs that use copy_file_range must fall back on read+write anyway. */ errno = ENOSYS; return -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copy-file.c�������������������������������������������������������������0000664�0000000�0000000�00000013024�14110572173�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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> /* Specification. */ #include "copy-file.h" #include <errno.h> #include <fcntl.h> #include <stddef.h> #include <stdlib.h> #include <sys/stat.h> #include <unistd.h> #include "error.h" #include "ignore-value.h" #include "safe-read.h" #include "full-write.h" #include "stat-time.h" #include "utimens.h" #include "acl.h" #include "binary-io.h" #include "quote.h" #include "gettext.h" #define _(str) gettext (str) enum { IO_SIZE = 32 * 1024 }; int qcopy_file_preserving (const char *src_filename, const char *dest_filename) { int err = 0; int src_fd; struct stat statbuf; int mode; int dest_fd; src_fd = open (src_filename, O_RDONLY | O_BINARY | O_CLOEXEC); if (src_fd < 0) return GL_COPY_ERR_OPEN_READ; if (fstat (src_fd, &statbuf) < 0) { err = GL_COPY_ERR_OPEN_READ; goto error_src; } mode = statbuf.st_mode & 07777; off_t inbytes = S_ISREG (statbuf.st_mode) ? statbuf.st_size : -1; bool empty_regular_file = inbytes == 0; dest_fd = open (dest_filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_CLOEXEC, 0600); if (dest_fd < 0) { err = GL_COPY_ERR_OPEN_BACKUP_WRITE; goto error_src; } /* Copy the file contents. FIXME: Do not copy holes. */ while (0 < inbytes) { size_t copy_max = -1; copy_max -= copy_max % IO_SIZE; size_t len = inbytes < copy_max ? inbytes : copy_max; ssize_t copied = copy_file_range (src_fd, NULL, dest_fd, NULL, len, 0); if (copied <= 0) break; inbytes -= copied; } /* Finish up with read/write, in case the file was not a regular file, or the file shrank or had I/O errors (in which case find whether it was a read or write error). Read empty regular files since they might be in /proc with their true sizes unknown until they are read. */ if (inbytes != 0 || empty_regular_file) { char smallbuf[1024]; int bufsize = IO_SIZE; char *buf = malloc (bufsize); if (!buf) buf = smallbuf, bufsize = sizeof smallbuf; while (true) { size_t n_read = safe_read (src_fd, buf, bufsize); if (n_read == 0) break; if (n_read == SAFE_READ_ERROR) { err = GL_COPY_ERR_READ; break; } if (full_write (dest_fd, buf, n_read) < n_read) { err = GL_COPY_ERR_WRITE; break; } } if (buf != smallbuf) free (buf); if (err) goto error_src_dest; } #if !USE_ACL if (close (dest_fd) < 0) { err = GL_COPY_ERR_WRITE; goto error_src; } if (close (src_fd) < 0) return GL_COPY_ERR_AFTER_READ; #endif /* Preserve the access and modification times. */ { struct timespec ts[2]; ts[0] = get_stat_atime (&statbuf); ts[1] = get_stat_mtime (&statbuf); utimens (dest_filename, ts); } #if HAVE_CHOWN /* Preserve the owner and group. */ ignore_value (chown (dest_filename, statbuf.st_uid, statbuf.st_gid)); #endif /* Preserve the access permissions. */ #if USE_ACL switch (qcopy_acl (src_filename, src_fd, dest_filename, dest_fd, mode)) { case -2: err = GL_COPY_ERR_GET_ACL; goto error_src_dest; case -1: err = GL_COPY_ERR_SET_ACL; goto error_src_dest; } #else chmod (dest_filename, mode); #endif #if USE_ACL if (close (dest_fd) < 0) { err = GL_COPY_ERR_WRITE; goto error_src; } if (close (src_fd) < 0) return GL_COPY_ERR_AFTER_READ; #endif return 0; error_src_dest: close (dest_fd); error_src: close (src_fd); return err; } void copy_file_preserving (const char *src_filename, const char *dest_filename) { switch (qcopy_file_preserving (src_filename, dest_filename)) { case 0: return; case GL_COPY_ERR_OPEN_READ: error (EXIT_FAILURE, errno, _("error while opening %s for reading"), quote (src_filename)); case GL_COPY_ERR_OPEN_BACKUP_WRITE: error (EXIT_FAILURE, errno, _("cannot open backup file %s for writing"), quote (dest_filename)); case GL_COPY_ERR_READ: error (EXIT_FAILURE, errno, _("error reading %s"), quote (src_filename)); case GL_COPY_ERR_WRITE: error (EXIT_FAILURE, errno, _("error writing %s"), quote (dest_filename)); case GL_COPY_ERR_AFTER_READ: error (EXIT_FAILURE, errno, _("error after reading %s"), quote (src_filename)); case GL_COPY_ERR_GET_ACL: error (EXIT_FAILURE, errno, "%s", quote (src_filename)); case GL_COPY_ERR_SET_ACL: error (EXIT_FAILURE, errno, _("preserving permissions for %s"), quote (dest_filename)); default: abort (); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copy-file.h�������������������������������������������������������������0000664�0000000�0000000�00000003505�14110572173�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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/>. */ #ifdef __cplusplus extern "C" { #endif /* Error codes returned by qcopy_file_preserving. */ enum { GL_COPY_ERR_OPEN_READ = -1, GL_COPY_ERR_OPEN_BACKUP_WRITE = -2, GL_COPY_ERR_READ = -3, GL_COPY_ERR_WRITE = -4, GL_COPY_ERR_AFTER_READ = -5, GL_COPY_ERR_GET_ACL = -6, GL_COPY_ERR_SET_ACL = -7 }; /* Copy a regular file: from src_filename to dest_filename. The destination file is assumed to be a backup file. Modification times, owner, group and access permissions are preserved as far as possible. Return 0 if successful, otherwise set errno and return one of the error codes above. */ extern int qcopy_file_preserving (const char *src_filename, const char *dest_filename); /* Copy a regular file: from src_filename to dest_filename. The destination file is assumed to be a backup file. Modification times, owner, group and access permissions are preserved as far as possible. Exit upon failure. */ extern void copy_file_preserving (const char *src_filename, const char *dest_filename); #ifdef __cplusplus } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copysign.c��������������������������������������������������������������0000664�0000000�0000000�00000001625�14110572173�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'double' number. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> double copysign (double x, double y) { return (signbit (x) != signbit (y) ? - x : x); } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copysignf.c�������������������������������������������������������������0000664�0000000�0000000�00000001622�14110572173�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'float' number. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float copysignf (float x, float y) { return (signbit (x) != signbit (y) ? - x : x); } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/copysignl.c�������������������������������������������������������������0000664�0000000�0000000�00000003406�14110572173�0017223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'long double' number. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double copysignl (long double x, long double y) { return copysign (x, y); } #else # if defined __hpux && !defined __GNUC__ # include <float.h> /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. */ static long double compute_minus_zerol (void) { return -LDBL_MIN * LDBL_MIN; } # define minus_zerol compute_minus_zerol () /* HP cc on HP-UX 11 has a bug: When x is a positive zero, - x comes out as a positive zero, rather than as a minus zero. Work around it. */ static long double unary_minus (long double x) { if (x == 0.0L) { if (signbit (x)) return 0.0L; else return minus_zerol; } else return - x; } # endif long double copysignl (long double x, long double y) { # if defined __hpux && !defined __GNUC__ return (signbit (x) != signbit (y) ? unary_minus (x) : x); # else return (signbit (x) != signbit (y) ? - x : x); # endif } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cosf.c������������������������������������������������������������������0000664�0000000�0000000�00000001540�14110572173�0016143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Cosine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float cosf (float x) { return (float) cos ((double) x); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/coshf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001555�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic cosine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float coshf (float x) { return (float) cosh ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cosl.c������������������������������������������������������������������0000664�0000000�0000000�00000007724�14110572173�0016163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cos (cosine) function with 'long double' argument. Copyright (C) 2003-2021 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/>. */ /* s_cosl.c -- long double version of s_sin.c. * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double cosl (long double x) { return cos (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/s_cosl.c. */ /* cosl(x) * Return cosine function of x. * * kernel function: * __kernel_sinl ... sine function on [-pi/4,pi/4] * __kernel_cosl ... cosine function on [-pi/4,pi/4] * __ieee754_rem_pio2l ... argument reduction routine * * Method. * Let S,C and T denote the sin, cos and tan respectively on * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 * in [-pi/4 , +pi/4], and let n = k mod 4. * We have * * n sin(x) cos(x) tan(x) * ---------------------------------------------------------- * 0 S C T * 1 C -S -1/T * 2 -S -C T * 3 -C S -1/T * ---------------------------------------------------------- * * Special cases: * Let trig be any of sin, cos, or tan. * trig(+-INF) is NaN, with signals; * trig(NaN) is that NaN; * * Accuracy: * TRIG(x) returns trig(x) nearly rounded */ # include "trigl.h" long double cosl (long double x) { long double y[2],z=0.0L; int n; /* cosl(NaN) is NaN */ if (isnanl (x)) return x; /* |x| ~< pi/4 */ if (x >= -0.7853981633974483096156608458198757210492 && x <= 0.7853981633974483096156608458198757210492) return kernel_cosl(x, z); /* cosl(Inf) is NaN, cosl(0) is 1 */ else if (x + x == x && x != 0.0) return x - x; /* NaN */ /* argument reduction needed */ else { n = ieee754_rem_pio2l (x, y); switch (n & 3) { case 0: return kernel_cosl (y[0], y[1]); case 1: return -kernel_sinl (y[0], y[1], 1); case 2: return -kernel_cosl (y[0], y[1]); default: return kernel_sinl (y[0], y[1], 1); } } } #endif #if 0 int main (void) { printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *29)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *2)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *30)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *4)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *32)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *2/3)); printf ("%.16Lg\n", cosl (0.7853981633974483096156608458198757210492 *4/3)); } #endif ��������������������������������������������gnulib-20210822~d383792/lib/count-leading-zeros.c���������������������������������������������������0000664�0000000�0000000�00000001561�14110572173�0021105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count the number of leading 0 bits in a word. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define COUNT_LEADING_ZEROS_INLINE _GL_EXTERN_INLINE #include "count-leading-zeros.h" �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/count-leading-zeros.h���������������������������������������������������0000664�0000000�0000000�00000011061�14110572173�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* count-leading-zeros.h -- counts the number of leading 0 bits in a word. Copyright (C) 2012-2021 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 Eric Blake. */ #ifndef COUNT_LEADING_ZEROS_H #define COUNT_LEADING_ZEROS_H 1 #include <limits.h> #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef COUNT_LEADING_ZEROS_INLINE # define COUNT_LEADING_ZEROS_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* Assuming the GCC builtin is BUILTIN and the MSC builtin is MSC_BUILTIN, expand to code that computes the number of leading zeros of the local variable 'x' of type TYPE (an unsigned integer type) and return it from the current function. */ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) # define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ return x ? BUILTIN (x) : CHAR_BIT * sizeof x; #elif _MSC_VER # pragma intrinsic _BitScanReverse # pragma intrinsic _BitScanReverse64 # define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ do \ { \ unsigned long result; \ return MSC_BUILTIN (&result, x) ? result : CHAR_BIT * sizeof x; \ } \ while (0) #else # define COUNT_LEADING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ do \ { \ int count; \ unsigned int leading_32; \ if (! x) \ return CHAR_BIT * sizeof x; \ for (count = 0; \ (leading_32 = ((x >> (sizeof (TYPE) * CHAR_BIT - 32)) \ & 0xffffffffU), \ count < CHAR_BIT * sizeof x - 32 && !leading_32); \ count += 32) \ x = x << 31 << 1; \ return count + count_leading_zeros_32 (leading_32); \ } \ while (0) /* Compute and return the number of leading zeros in X, where 0 < X < 2**32. */ COUNT_LEADING_ZEROS_INLINE int count_leading_zeros_32 (unsigned int x) { /* <https://github.com/gibsjose/BitHacks> <https://www.fit.vutbr.cz/~ibarina/pub/bithacks.pdf> */ static const char de_Bruijn_lookup[32] = { 31, 22, 30, 21, 18, 10, 29, 2, 20, 17, 15, 13, 9, 6, 28, 1, 23, 19, 11, 3, 16, 14, 7, 24, 12, 4, 8, 25, 5, 26, 27, 0 }; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return de_Bruijn_lookup[((x * 0x07c4acddU) & 0xffffffffU) >> 27]; } #endif /* Compute and return the number of leading zeros in X. */ COUNT_LEADING_ZEROS_INLINE int count_leading_zeros (unsigned int x) { COUNT_LEADING_ZEROS (__builtin_clz, _BitScanReverse, unsigned int); } /* Compute and return the number of leading zeros in X. */ COUNT_LEADING_ZEROS_INLINE int count_leading_zeros_l (unsigned long int x) { COUNT_LEADING_ZEROS (__builtin_clzl, _BitScanReverse, unsigned long int); } /* Compute and return the number of leading zeros in X. */ COUNT_LEADING_ZEROS_INLINE int count_leading_zeros_ll (unsigned long long int x) { COUNT_LEADING_ZEROS (__builtin_clzll, _BitScanReverse64, unsigned long long int); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* COUNT_LEADING_ZEROS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/count-one-bits.c��������������������������������������������������������0000664�0000000�0000000�00000001676�14110572173�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count the number of 1-bits in a word. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define COUNT_ONE_BITS_INLINE _GL_EXTERN_INLINE #include "count-one-bits.h" #if 1500 <= _MSC_VER && (defined _M_IX86 || defined _M_X64) int popcount_support = -1; #endif ������������������������������������������������������������������gnulib-20210822~d383792/lib/count-one-bits.h��������������������������������������������������������0000664�0000000�0000000�00000012461�14110572173�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* count-one-bits.h -- counts the number of 1-bits in a word. Copyright (C) 2007-2021 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 Ben Pfaff. */ #ifndef COUNT_ONE_BITS_H #define COUNT_ONE_BITS_H 1 #include <limits.h> #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef COUNT_ONE_BITS_INLINE # define COUNT_ONE_BITS_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* Assuming the GCC builtin is GCC_BUILTIN and the MSC builtin is MSC_BUILTIN, expand to code that computes the number of 1-bits of the local variable 'x' of type TYPE (an unsigned integer type) and return it from the current function. */ #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) \ || (__clang_major__ >= 4) # define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ return GCC_BUILTIN (x) #else /* Compute and return the number of 1-bits set in the least significant 32 bits of X. */ COUNT_ONE_BITS_INLINE int count_one_bits_32 (unsigned int x) { x = ((x & 0xaaaaaaaaU) >> 1) + (x & 0x55555555U); x = ((x & 0xccccccccU) >> 2) + (x & 0x33333333U); x = (x >> 16) + (x & 0xffff); x = ((x & 0xf0f0) >> 4) + (x & 0x0f0f); return (x >> 8) + (x & 0x00ff); } /* Expand to code that computes the number of 1-bits of the local variable 'x' of type TYPE (an unsigned integer type) and return it from the current function. */ # define COUNT_ONE_BITS_GENERIC(TYPE) \ do \ { \ int count = 0; \ int bits; \ for (bits = 0; bits < sizeof (TYPE) * CHAR_BIT; bits += 32) \ { \ count += count_one_bits_32 (x); \ x = x >> 31 >> 1; \ } \ return count; \ } \ while (0) # if 1500 <= _MSC_VER && (defined _M_IX86 || defined _M_X64) /* While gcc falls back to its own generic code if the machine on which it's running doesn't support popcount, with Microsoft's compiler we need to detect and fallback ourselves. */ # if 0 # include <intrin.h> # else /* Don't pollute the namespace with too many MSVC intrinsics. */ # pragma intrinsic (__cpuid) # pragma intrinsic (__popcnt) # if defined _M_X64 # pragma intrinsic (__popcnt64) # endif # endif # if !defined _M_X64 static inline __popcnt64 (unsigned long long x) { return __popcnt ((unsigned int) (x >> 32)) + __popcnt ((unsigned int) x); } # endif /* Return nonzero if popcount is supported. */ /* 1 if supported, 0 if not supported, -1 if unknown. */ extern int popcount_support; COUNT_ONE_BITS_INLINE int popcount_supported (void) { if (popcount_support < 0) { /* Do as described in <https://docs.microsoft.com/en-us/cpp/intrinsics/popcnt16-popcnt-popcnt64> */ int cpu_info[4]; __cpuid (cpu_info, 1); popcount_support = (cpu_info[2] >> 23) & 1; } return popcount_support; } # define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ do \ { \ if (popcount_supported ()) \ return MSC_BUILTIN (x); \ else \ COUNT_ONE_BITS_GENERIC (TYPE); \ } \ while (0) # else # define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ COUNT_ONE_BITS_GENERIC (TYPE) # endif #endif /* Compute and return the number of 1-bits set in X. */ COUNT_ONE_BITS_INLINE int count_one_bits (unsigned int x) { COUNT_ONE_BITS (__builtin_popcount, __popcnt, unsigned int); } /* Compute and return the number of 1-bits set in X. */ COUNT_ONE_BITS_INLINE int count_one_bits_l (unsigned long int x) { COUNT_ONE_BITS (__builtin_popcountl, __popcnt, unsigned long int); } /* Compute and return the number of 1-bits set in X. */ COUNT_ONE_BITS_INLINE int count_one_bits_ll (unsigned long long int x) { COUNT_ONE_BITS (__builtin_popcountll, __popcnt64, unsigned long long int); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* COUNT_ONE_BITS_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/count-trailing-zeros.c��������������������������������������������������0000664�0000000�0000000�00000001560�14110572173�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count the number of trailing 0 bits in a word. Copyright 2013-2021 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/>. */ #include <config.h> #define COUNT_TRAILING_ZEROS_INLINE _GL_EXTERN_INLINE #include "count-trailing-zeros.h" ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/count-trailing-zeros.h��������������������������������������������������0000664�0000000�0000000�00000010577�14110572173�0021327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* count-trailing-zeros.h -- counts the number of trailing 0 bits in a word. Copyright 2013-2021 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. */ #ifndef COUNT_TRAILING_ZEROS_H #define COUNT_TRAILING_ZEROS_H 1 #include <limits.h> #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef COUNT_TRAILING_ZEROS_INLINE # define COUNT_TRAILING_ZEROS_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* Assuming the GCC builtin is BUILTIN and the MSC builtin is MSC_BUILTIN, expand to code that computes the number of trailing zeros of the local variable 'x' of type TYPE (an unsigned integer type) and return it from the current function. */ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) # define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ return x ? BUILTIN (x) : CHAR_BIT * sizeof x; #elif _MSC_VER # pragma intrinsic _BitScanForward # pragma intrinsic _BitScanForward64 # define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ do \ { \ unsigned long result; \ return MSC_BUILTIN (&result, x) ? result : CHAR_BIT * sizeof x; \ } \ while (0) #else # define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE) \ do \ { \ int count = 0; \ if (! x) \ return CHAR_BIT * sizeof x; \ for (count = 0; \ (count < CHAR_BIT * sizeof x - 32 \ && ! (x & 0xffffffffU)); \ count += 32) \ x = x >> 31 >> 1; \ return count + count_trailing_zeros_32 (x); \ } \ while (0) /* Compute and return the number of trailing zeros in the least significant 32 bits of X. One of these bits must be nonzero. */ COUNT_TRAILING_ZEROS_INLINE int count_trailing_zeros_32 (unsigned int x) { /* <https://github.com/gibsjose/BitHacks> <https://www.fit.vutbr.cz/~ibarina/pub/bithacks.pdf> */ static const char de_Bruijn_lookup[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; return de_Bruijn_lookup[(((x & -x) * 0x077cb531U) & 0xffffffffU) >> 27]; } #endif /* Compute and return the number of trailing zeros in X. */ COUNT_TRAILING_ZEROS_INLINE int count_trailing_zeros (unsigned int x) { COUNT_TRAILING_ZEROS (__builtin_ctz, _BitScanForward, unsigned int); } /* Compute and return the number of trailing zeros in X. */ COUNT_TRAILING_ZEROS_INLINE int count_trailing_zeros_l (unsigned long int x) { COUNT_TRAILING_ZEROS (__builtin_ctzl, _BitScanForward, unsigned long int); } /* Compute and return the number of trailing zeros in X. */ COUNT_TRAILING_ZEROS_INLINE int count_trailing_zeros_ll (unsigned long long int x) { COUNT_TRAILING_ZEROS (__builtin_ctzll, _BitScanForward64, unsigned long long int); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/crc.c�������������������������������������������������������������������0000664�0000000�0000000�00000011441�14110572173�0015761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.c -- cyclic redundancy checks Copyright (C) 2005-2006, 2009-2021 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 Simon Josefsson. */ #include <config.h> #include "crc.h" /* Table of CRCs of all 8-bit messages. Generated by running code from RFC 1952 modified to print out the table. */ static const uint32_t crc32_table[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; /* * The following function was extracted from RFC 1952 by Simon * Josefsson. It was modified to avoid initial and final XOR, to use * size_t for the buffer length, and to use the const keyword. */ uint32_t crc32_update_no_xor (uint32_t crc, const char *buf, size_t len) { size_t n; for (n = 0; n < len; n++) crc = crc32_table[(crc ^ buf[n]) & 0xff] ^ (crc >> 8); return crc; } uint32_t crc32_no_xor (const char *buf, size_t len) { return crc32_update_no_xor (0L, buf, len); } uint32_t crc32_update (uint32_t crc, const char *buf, size_t len) { return crc32_update_no_xor (crc ^ 0xffffffff, buf, len) ^ 0xffffffff; } uint32_t crc32 (const char *buf, size_t len) { return crc32_update (0L, buf, len); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/crc.h�������������������������������������������������������������������0000664�0000000�0000000�00000003667�14110572173�0016001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.h -- cyclic redundancy checks Copyright (C) 2005, 2009-2021 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 Simon Josefsson. */ #ifndef CRC_H # define CRC_H 1 #include <stddef.h> #include <stdint.h> /* Compute CRC-32 value of LEN bytes long BUF, and return it. */ extern uint32_t crc32 (const char *buf, size_t len); /* Incrementally update CRC-32 value CRC using LEN bytes long BUF. In the first call, use 0 as the value for CRC. Return the updated CRC-32 value. */ extern uint32_t crc32_update (uint32_t crc, const char *buf, size_t len); /* Compute modified-CRC-32 value of LEN bytes long BUF, and return it. The "modification" is to avoid the initial and final XOR operation. Due to historic implementation errors, this variant is sometimes used (i.e., in RFC 3961). */ extern uint32_t crc32_no_xor (const char *buf, size_t len); /* Incrementally update modified-CRC-32 value CRC using LEN bytes long BUF. In the first call, use 0 as the value for CRC. Return the updated modified-CRC-32 value. The "modification" is to avoid the initial and final XOR operation. Due to historic implementation errors, this variant is sometimes used (i.e., in RFC 3961). */ extern uint32_t crc32_update_no_xor (uint32_t crc, const char *buf, size_t len); #endif /* CRC_H */ �������������������������������������������������������������������������gnulib-20210822~d383792/lib/creat-safer.c�����������������������������������������������������������0000664�0000000�0000000�00000001723�14110572173�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke creat, but avoid some glitches. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "fcntl-safer.h" #include <fcntl.h> #include "unistd-safer.h" int creat_safer (char const *file, mode_t mode) { return fd_safer (creat (file, mode)); } ���������������������������������������������gnulib-20210822~d383792/lib/creat.c�����������������������������������������������������������������0000664�0000000�0000000�00000005357�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a file. Copyright (C) 2007-2021 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/>. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_creat doesn't recurse to rpl_creat. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of creat. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_creat (const char *filename, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _creat (filename, mode); #else return creat (filename, mode); #endif } /* Specification. */ /* 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 <errno.h> #include <string.h> #include <sys/types.h> int creat (const char *filename, mode_t mode) { #if OPEN_TRAILING_SLASH_BUG /* Fail if the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" creat() is defined as being equivalent to open() with flags O_CREAT | O_TRUNC | O_WRONLY. Therefore: If the named file already exists as a directory, then creat() must fail with errno = EISDIR. If the named file does not exist or does not name a directory, then creat() must fail since creat() cannot create directories. */ { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif #if defined _WIN32 && !defined __CYGWIN__ /* Remap the 'x' bits to the 'r' bits. */ mode = (mode & ~0111) | ((mode & 0111) << 2); #endif return orig_creat (filename, mode); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/csharpcomp.c������������������������������������������������������������0000664�0000000�0000000�00000034255�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a C# program. Copyright (C) 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 <alloca.h> /* Specification. */ #include "csharpcomp.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "execute.h" #include "spawn-pipe.h" #include "wait-process.h" #include "sh-quote.h" #include "safe-read.h" #include "xmalloca.h" #include "error.h" #include "gettext.h" #define _(str) gettext (str) /* Survey of C# compilers. Program from mcs mono csc sscli We try the CIL interpreters in the following order: 1. "mcs", because it is a free system but doesn't integrate so well with Unix. (Command line options start with / instead of -. Errors go to stdout instead of stderr. Source references are printed as "file(lineno)" instead of "file:lineno:".) 2. "csc", although it is not free, because it is a kind of "reference implementation" of C#. But the order can be changed through the --enable-csharp configuration option. */ static int compile_csharp_using_mono (const char * const *sources, unsigned int sources_count, const char * const *libdirs, unsigned int libdirs_count, const char * const *libraries, unsigned int libraries_count, const char *output_file, bool output_is_library, bool optimize, bool debug, bool verbose) { static bool mcs_tested; static bool mcs_present; if (!mcs_tested) { /* Test for presence of mcs: "mcs --version >/dev/null 2>/dev/null" and (to exclude an unrelated 'mcs' program on QNX 6) "mcs --version 2>/dev/null | grep Mono >/dev/null" */ const char *argv[3]; pid_t child; int fd[1]; int exitstatus; argv[0] = "mcs"; argv[1] = "--version"; argv[2] = NULL; child = create_pipe_in ("mcs", "mcs", argv, NULL, DEV_NULL, true, true, false, fd); mcs_present = false; if (child != -1) { /* Read the subprocess output, and test whether it contains the string "Mono". */ char c[4]; size_t count = 0; while (safe_read (fd[0], &c[count], 1) > 0) { count++; if (count == 4) { if (memcmp (c, "Mono", 4) == 0) mcs_present = true; c[0] = c[1]; c[1] = c[2]; c[2] = c[3]; count--; } } close (fd[0]); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, "mcs", false, true, true, false, NULL); if (exitstatus != 0) mcs_present = false; } mcs_tested = true; } if (mcs_present) { unsigned int argc; const char **argv; const char **argp; pid_t child; int fd[1]; FILE *fp; char *line[2]; size_t linesize[2]; size_t linelen[2]; unsigned int l; int exitstatus; unsigned int i; argc = 1 + (output_is_library ? 1 : 0) + 1 + libdirs_count + libraries_count + (debug ? 1 : 0) + sources_count; argv = (const char **) xmalloca ((argc + 1) * sizeof (const char *)); argp = argv; *argp++ = "mcs"; if (output_is_library) *argp++ = "-target:library"; { char *option = (char *) xmalloca (5 + strlen (output_file) + 1); memcpy (option, "-out:", 5); strcpy (option + 5, output_file); *argp++ = option; } for (i = 0; i < libdirs_count; i++) { char *option = (char *) xmalloca (5 + strlen (libdirs[i]) + 1); memcpy (option, "-lib:", 5); strcpy (option + 5, libdirs[i]); *argp++ = option; } for (i = 0; i < libraries_count; i++) { char *option = (char *) xmalloca (11 + strlen (libraries[i]) + 4 + 1); memcpy (option, "-reference:", 11); memcpy (option + 11, libraries[i], strlen (libraries[i])); strcpy (option + 11 + strlen (libraries[i]), ".dll"); *argp++ = option; } if (debug) *argp++ = "-debug"; for (i = 0; i < sources_count; i++) { const char *source_file = sources[i]; if (strlen (source_file) >= 10 && memcmp (source_file + strlen (source_file) - 10, ".resources", 10) == 0) { char *option = (char *) xmalloca (10 + strlen (source_file) + 1); memcpy (option, "-resource:", 10); strcpy (option + 10, source_file); *argp++ = option; } else *argp++ = source_file; } *argp = NULL; /* Ensure argv length was correctly calculated. */ if (argp - argv != argc) abort (); if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } child = create_pipe_in ("mcs", "mcs", argv, NULL, NULL, false, true, true, fd); /* Read the subprocess output, copying it to stderr. Drop the last line if it starts with "Compilation succeeded". */ fp = fdopen (fd[0], "r"); if (fp == NULL) error (EXIT_FAILURE, errno, _("fdopen() failed")); line[0] = NULL; linesize[0] = 0; line[1] = NULL; linesize[1] = 0; l = 0; for (;;) { linelen[l] = getline (&line[l], &linesize[l], fp); if (linelen[l] == (size_t)(-1)) break; l = (l + 1) % 2; if (line[l] != NULL) fwrite (line[l], 1, linelen[l], stderr); } l = (l + 1) % 2; if (line[l] != NULL && !(linelen[l] >= 21 && memcmp (line[l], "Compilation succeeded", 21) == 0)) fwrite (line[l], 1, linelen[l], stderr); if (line[0] != NULL) free (line[0]); if (line[1] != NULL) free (line[1]); fclose (fp); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, "mcs", false, false, true, true, NULL); for (i = 1 + (output_is_library ? 1 : 0); i < 1 + (output_is_library ? 1 : 0) + 1 + libdirs_count + libraries_count; i++) freea ((char *) argv[i]); for (i = 0; i < sources_count; i++) if (argv[argc - sources_count + i] != sources[i]) freea ((char *) argv[argc - sources_count + i]); freea (argv); return (exitstatus != 0); } else return -1; } static int compile_csharp_using_sscli (const char * const *sources, unsigned int sources_count, const char * const *libdirs, unsigned int libdirs_count, const char * const *libraries, unsigned int libraries_count, const char *output_file, bool output_is_library, bool optimize, bool debug, bool verbose) { static bool csc_tested; static bool csc_present; if (!csc_tested) { /* Test for presence of csc: "csc -help >/dev/null 2>/dev/null \ && ! { csc -help 2>/dev/null | grep -i chicken > /dev/null; }" */ const char *argv[3]; pid_t child; int fd[1]; int exitstatus; argv[0] = "csc"; argv[1] = "-help"; argv[2] = NULL; child = create_pipe_in ("csc", "csc", argv, NULL, DEV_NULL, true, true, false, fd); csc_present = false; if (child != -1) { /* Read the subprocess output, and test whether it contains the string "chicken". */ char c[7]; size_t count = 0; csc_present = true; while (safe_read (fd[0], &c[count], 1) > 0) { if (c[count] >= 'A' && c[count] <= 'Z') c[count] += 'a' - 'A'; count++; if (count == 7) { if (memcmp (c, "chicken", 7) == 0) csc_present = false; c[0] = c[1]; c[1] = c[2]; c[2] = c[3]; c[3] = c[4]; c[4] = c[5]; c[5] = c[6]; count--; } } close (fd[0]); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, "csc", false, true, true, false, NULL); if (exitstatus != 0) csc_present = false; } csc_tested = true; } if (csc_present) { unsigned int argc; const char **argv; const char **argp; int exitstatus; unsigned int i; argc = 1 + 1 + 1 + libdirs_count + libraries_count + (optimize ? 1 : 0) + (debug ? 1 : 0) + sources_count; argv = (const char **) xmalloca ((argc + 1) * sizeof (const char *)); argp = argv; *argp++ = "csc"; *argp++ = (output_is_library ? "-target:library" : "-target:exe"); { char *option = (char *) xmalloca (5 + strlen (output_file) + 1); memcpy (option, "-out:", 5); strcpy (option + 5, output_file); *argp++ = option; } for (i = 0; i < libdirs_count; i++) { char *option = (char *) xmalloca (5 + strlen (libdirs[i]) + 1); memcpy (option, "-lib:", 5); strcpy (option + 5, libdirs[i]); *argp++ = option; } for (i = 0; i < libraries_count; i++) { char *option = (char *) xmalloca (11 + strlen (libraries[i]) + 4 + 1); memcpy (option, "-reference:", 11); memcpy (option + 11, libraries[i], strlen (libraries[i])); strcpy (option + 11 + strlen (libraries[i]), ".dll"); *argp++ = option; } if (optimize) *argp++ = "-optimize+"; if (debug) *argp++ = "-debug+"; for (i = 0; i < sources_count; i++) { const char *source_file = sources[i]; if (strlen (source_file) >= 10 && memcmp (source_file + strlen (source_file) - 10, ".resources", 10) == 0) { char *option = (char *) xmalloca (10 + strlen (source_file) + 1); memcpy (option, "-resource:", 10); strcpy (option + 10, source_file); *argp++ = option; } else *argp++ = source_file; } *argp = NULL; /* Ensure argv length was correctly calculated. */ if (argp - argv != argc) abort (); if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } exitstatus = execute ("csc", "csc", argv, NULL, false, false, false, false, true, true, NULL); for (i = 2; i < 3 + libdirs_count + libraries_count; i++) freea ((char *) argv[i]); for (i = 0; i < sources_count; i++) if (argv[argc - sources_count + i] != sources[i]) freea ((char *) argv[argc - sources_count + i]); freea (argv); return (exitstatus != 0); } else return -1; } bool compile_csharp_class (const char * const *sources, unsigned int sources_count, const char * const *libdirs, unsigned int libdirs_count, const char * const *libraries, unsigned int libraries_count, const char *output_file, bool optimize, bool debug, bool verbose) { bool output_is_library = (strlen (output_file) >= 4 && memcmp (output_file + strlen (output_file) - 4, ".dll", 4) == 0); int result; /* First try the C# implementation specified through --enable-csharp. */ #if CSHARP_CHOICE_MONO result = compile_csharp_using_mono (sources, sources_count, libdirs, libdirs_count, libraries, libraries_count, output_file, output_is_library, optimize, debug, verbose); if (result >= 0) return (bool) result; #endif /* Then try the remaining C# implementations in our standard order. */ #if !CSHARP_CHOICE_MONO result = compile_csharp_using_mono (sources, sources_count, libdirs, libdirs_count, libraries, libraries_count, output_file, output_is_library, optimize, debug, verbose); if (result >= 0) return (bool) result; #endif result = compile_csharp_using_sscli (sources, sources_count, libdirs, libdirs_count, libraries, libraries_count, output_file, output_is_library, optimize, debug, verbose); if (result >= 0) return (bool) result; error (0, 0, _("C# compiler not found, try installing mono")); return true; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/csharpcomp.h������������������������������������������������������������0000664�0000000�0000000�00000003510�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a C# program. Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 _CSHARPCOMP_H #define _CSHARPCOMP_H #include <stdbool.h> /* Compile a set of C# source files to bytecode. sources is an array of source file names, including resource files. libdirs is a list of directories to be searched for libraries. libraries is a list of libraries on which the program depends. output_file is the name of the output file; it should end in .exe or .dll. If verbose, the command to be executed will be printed. Return false if OK, true on error. */ extern bool compile_csharp_class (const char * const *sources, unsigned int sources_count, const char * const *libdirs, unsigned int libdirs_count, const char * const *libraries, unsigned int libraries_count, const char *output_file, bool optimize, bool debug, bool verbose); #endif /* _CSHARPCOMP_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/csharpexec.c������������������������������������������������������������0000664�0000000�0000000�00000016462�14110572173�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a C# program. Copyright (C) 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 <alloca.h> /* Specification. */ #include "csharpexec.h" #include <stdio.h> #include <stdlib.h> #include "execute.h" #include "sh-quote.h" #include "xmalloca.h" #include "error.h" #include "gettext.h" /* Handling of MONO_PATH is just like Java CLASSPATH. */ #define CLASSPATHVAR "MONO_PATH" #define new_classpath new_monopath #define set_classpath set_monopath #define reset_classpath reset_monopath #include "classpath.h" #include "classpath.c" #undef reset_classpath #undef set_classpath #undef new_classpath #undef CLASSPATHVAR /* Handling of clix' PATH variable is just like Java CLASSPATH. */ #if defined _WIN32 || defined __CYGWIN__ /* Native Windows, Cygwin */ #define CLASSPATHVAR "PATH" #elif defined __APPLE__ && defined __MACH__ /* Mac OS X */ #define CLASSPATHVAR "DYLD_LIBRARY_PATH" #else /* Normal Unix */ #define CLASSPATHVAR "LD_LIBRARY_PATH" #endif #define new_classpath new_clixpath #define set_classpath set_clixpath #define reset_classpath reset_clixpath #include "classpath.h" #include "classpath.c" #undef reset_classpath #undef set_classpath #undef new_classpath #undef CLASSPATHVAR #define _(str) gettext (str) /* Survey of CIL interpreters. Program from mono mono clix sscli With Mono, the MONO_PATH is a colon separated list of pathnames. (On Windows: semicolon separated list of pathnames.) We try the CIL interpreters in the following order: 1. "mono", because it is a partially free system but doesn't integrate well with Unix. 2. "clix", although it is not free, because it is a kind of "reference implementation" of C#. But the order can be changed through the --enable-csharp configuration option. */ static int execute_csharp_using_mono (const char *assembly_path, const char * const *libdirs, unsigned int libdirs_count, const char * const *args, unsigned int nargs, bool verbose, bool quiet, execute_fn *executer, void *private_data) { static bool mono_tested; static bool mono_present; if (!mono_tested) { /* Test for presence of mono: "mono --version >/dev/null 2>/dev/null" */ const char *argv[3]; int exitstatus; argv[0] = "mono"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("mono", "mono", argv, NULL, false, false, true, true, true, false, NULL); mono_present = (exitstatus == 0); mono_tested = true; } if (mono_present) { char *old_monopath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; bool err; /* Set MONO_PATH. */ old_monopath = set_monopath (libdirs, libdirs_count, false, verbose); argv[0] = "mono"; argv[1] = assembly_path; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("mono", "mono", argv, private_data); /* Reset MONO_PATH. */ reset_monopath (old_monopath); freea (argv); return err; } else return -1; } static int execute_csharp_using_sscli (const char *assembly_path, const char * const *libdirs, unsigned int libdirs_count, const char * const *args, unsigned int nargs, bool verbose, bool quiet, execute_fn *executer, void *private_data) { static bool clix_tested; static bool clix_present; if (!clix_tested) { /* Test for presence of clix: "clix >/dev/null 2>/dev/null ; test $? = 1" */ const char *argv[2]; int exitstatus; argv[0] = "clix"; argv[1] = NULL; exitstatus = execute ("clix", "clix", argv, NULL, false, false, true, true, true, false, NULL); clix_present = (exitstatus == 0 || exitstatus == 1); clix_tested = true; } if (clix_present) { char *old_clixpath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; bool err; /* Set clix' PATH variable. */ old_clixpath = set_clixpath (libdirs, libdirs_count, false, verbose); argv[0] = "clix"; argv[1] = assembly_path; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("clix", "clix", argv, private_data); /* Reset clix' PATH variable. */ reset_clixpath (old_clixpath); freea (argv); return err; } else return -1; } bool execute_csharp_program (const char *assembly_path, const char * const *libdirs, unsigned int libdirs_count, const char * const *args, bool verbose, bool quiet, execute_fn *executer, void *private_data) { unsigned int nargs; int result; /* Count args. */ { const char * const *arg; for (nargs = 0, arg = args; *arg != NULL; nargs++, arg++) ; } /* First try the C# implementation specified through --enable-csharp. */ #if CSHARP_CHOICE_MONO result = execute_csharp_using_mono (assembly_path, libdirs, libdirs_count, args, nargs, verbose, quiet, executer, private_data); if (result >= 0) return (bool) result; #endif /* Then try the remaining C# implementations in our standard order. */ #if !CSHARP_CHOICE_MONO result = execute_csharp_using_mono (assembly_path, libdirs, libdirs_count, args, nargs, verbose, quiet, executer, private_data); if (result >= 0) return (bool) result; #endif result = execute_csharp_using_sscli (assembly_path, libdirs, libdirs_count, args, nargs, verbose, quiet, executer, private_data); if (result >= 0) return (bool) result; if (!quiet) error (0, 0, _("C# virtual machine not found, try installing mono")); return true; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/csharpexec.h������������������������������������������������������������0000664�0000000�0000000�00000003707�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a C# program. Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 _CSHARPEXEC_H #define _CSHARPEXEC_H #include <stdbool.h> typedef bool execute_fn (const char *progname, const char *prog_path, const char * const *prog_argv, void *private_data); /* Execute a C# program. assembly_path is the assembly's pathname (= program name with .exe). libdirs is a list of directories to be searched for libraries. args is a NULL terminated list of arguments to be passed to the program. If verbose, the command to be executed will be printed. Then the command is passed to the execute function together with the private_data argument. This function returns false if OK, true on error. Return false if OK, true on error. If quiet, error messages will not be printed. */ extern bool execute_csharp_program (const char *assembly_path, const char * const *libdirs, unsigned int libdirs_count, const char * const *args, bool verbose, bool quiet, execute_fn *executer, void *private_data); #endif /* _CSHARPEXEC_H */ ���������������������������������������������������������gnulib-20210822~d383792/lib/ctime.c�����������������������������������������������������������������0000664�0000000�0000000�00000004730�14110572173�0016316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in ctime. Copyright (C) 2017-2021 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/>. */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> #undef ctime char * rpl_ctime (const time_t *tp) { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); #endif return ctime (tp); } ����������������������������������������gnulib-20210822~d383792/lib/ctype.in.h��������������������������������������������������������������0000664�0000000�0000000�00000003465�14110572173�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. Copyright (C) 2009-2021 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. */ /* * ISO C 99 <ctype.h> for platforms on which it is incomplete. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ctype.h.html> */ #ifndef _@GUARD_PREFIX@_CTYPE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <ctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_CTYPE_H@ #ifndef _@GUARD_PREFIX@_CTYPE_H #define _@GUARD_PREFIX@_CTYPE_H /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Return non-zero if c is a blank, i.e. a space or tab character. */ #if @GNULIB_ISBLANK@ # if !@HAVE_ISBLANK@ _GL_EXTERN_C int isblank (int c); # endif #elif defined GNULIB_POSIXCHECK # undef isblank # if HAVE_RAW_DECL_ISBLANK _GL_WARN_ON_USE (isblank, "isblank is unportable - " "use gnulib module isblank for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_CTYPE_H */ #endif /* _@GUARD_PREFIX@_CTYPE_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cycle-check.c�����������������������������������������������������������0000664�0000000�0000000�00000005201�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* help detect directory cycles efficiently Copyright (C) 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include "cycle-check.h" #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include "assure.h" #define CC_MAGIC 9827862 /* Return true if I is a power of 2, or is zero. */ static bool is_zero_or_power_of_two (uintmax_t i) { return (i & (i - 1)) == 0; } void cycle_check_init (struct cycle_check_state *state) { state->chdir_counter = 0; state->magic = CC_MAGIC; } /* In traversing a directory hierarchy, call this function once for each descending chdir call, with SB corresponding to the chdir operand. If SB corresponds to a directory that has already been seen, return true to indicate that there is a directory cycle. Note that this is done "lazily", which means that some of the directories in the cycle may be processed twice before the cycle is detected. */ bool cycle_check (struct cycle_check_state *state, struct stat const *sb) { assure (state->magic == CC_MAGIC); /* If the current directory ever happens to be the same as the one we last recorded for the cycle detection, then it's obviously part of a cycle. */ if (state->chdir_counter && SAME_INODE (*sb, state->dev_ino)) return true; /* If the number of "descending" chdir calls is a power of two, record the dev/ino of the current directory. */ if (is_zero_or_power_of_two (++(state->chdir_counter))) { /* On all architectures that we know about, if the counter overflows then there is a directory cycle here somewhere, even if we haven't detected it yet. Typically this happens only after the counter is incremented 2**64 times, so it's a fairly theoretical point. */ if (state->chdir_counter == 0) return true; state->dev_ino.st_dev = sb->st_dev; state->dev_ino.st_ino = sb->st_ino; } return false; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/cycle-check.h�����������������������������������������������������������0000664�0000000�0000000�00000003713�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* help detect directory cycles efficiently Copyright (C) 2003-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #ifndef CYCLE_CHECK_H # define CYCLE_CHECK_H 1 # include <stdint.h> # include <stdbool.h> # include "dev-ino.h" # include "same-inode.h" struct cycle_check_state { struct dev_ino dev_ino; uintmax_t chdir_counter; int magic; }; void cycle_check_init (struct cycle_check_state *state); bool cycle_check (struct cycle_check_state *state, struct stat const *sb); # define CYCLE_CHECK_REFLECT_CHDIR_UP(State, SB_dir, SB_subdir) \ do \ { \ /* You must call cycle_check at least once before using this macro. */ \ if ((State)->chdir_counter == 0) \ abort (); \ if (SAME_INODE ((State)->dev_ino, SB_subdir)) \ { \ (State)->dev_ino.st_dev = (SB_dir).st_dev; \ (State)->dev_ino.st_ino = (SB_dir).st_ino; \ } \ } \ while (0) #endif �����������������������������������������������������gnulib-20210822~d383792/lib/des.c�������������������������������������������������������������������0000664�0000000�0000000�00000070117�14110572173�0015772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* des.c --- DES and Triple-DES encryption/decryption Algorithm * Copyright (C) 1998-1999, 2001-2007, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ /* * For a description of triple encryption, see: * Bruce Schneier: Applied Cryptography. Second Edition. * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff. * This implementation is according to the definition of DES in FIPS * PUB 46-2 from December 1993. * * Written by Michael Roth <mroth@nessie.de>, September 1998 */ /* * U S A G E * =========== * * For DES or Triple-DES encryption/decryption you must initialize a proper * encryption context with a key. * * A DES key is 64bit wide but only 56bits of the key are used. The remaining * bits are parity bits and they will _not_ checked in this implementation, but * simply ignored. * * For Triple-DES you could use either two 64bit keys or three 64bit keys. * The parity bits will _not_ checked, too. * * After initializing a context with a key you could use this context to * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode. * * DES Example * ----------- * unsigned char key[8]; * unsigned char plaintext[8]; * unsigned char ciphertext[8]; * unsigned char recoverd[8]; * gl_des_ctx context; * * // Fill 'key' and 'plaintext' with some data * .... * * // Set up the DES encryption context * gl_des_setkey(&context, key); * * // Encrypt the plaintext * des_ecb_encrypt(&context, plaintext, ciphertext); * * // To recover the original plaintext from ciphertext use: * des_ecb_decrypt(&context, ciphertext, recoverd); * * * Triple-DES Example * ------------------ * unsigned char key1[8]; * unsigned char key2[8]; * unsigned char key3[8]; * unsigned char plaintext[8]; * unsigned char ciphertext[8]; * unsigned char recoverd[8]; * gl_3des_ctx context; * * // If you would like to use two 64bit keys, fill 'key1' and'key2' * // then setup the encryption context: * gl_3des_set2keys(&context, key1, key2); * * // To use three 64bit keys with Triple-DES use: * gl_3des_set3keys(&context, key1, key2, key3); * * // Encrypting plaintext with Triple-DES * gl_3des_ecb_encrypt(&context, plaintext, ciphertext); * * // Decrypting ciphertext to recover the plaintext with Triple-DES * gl_3des_ecb_decrypt(&context, ciphertext, recoverd); */ #include <config.h> #include "des.h" #include <stdio.h> #include <string.h> /* memcpy, memcmp */ /* * The s-box values are permuted according to the 'primitive function P' * and are rotated one bit to the left. */ static const uint32_t sbox1[64] = { 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004 }; static const uint32_t sbox2[64] = { 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000 }; static const uint32_t sbox3[64] = { 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200 }; static const uint32_t sbox4[64] = { 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080 }; static const uint32_t sbox5[64] = { 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100 }; static const uint32_t sbox6[64] = { 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010 }; static const uint32_t sbox7[64] = { 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002 }; static const uint32_t sbox8[64] = { 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000 }; /* * These two tables are part of the 'permuted choice 1' function. * In this implementation several speed improvements are done. */ static const uint32_t leftkey_swap[16] = { 0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101, 0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101 }; static const uint32_t rightkey_swap[16] = { 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, 0x01010101, }; /* * Numbers of left shifts per round for encryption subkeys. To * calculate the decryption subkeys we just reverse the ordering of * the calculated encryption subkeys, so there is no need for a * decryption rotate tab. */ static const unsigned char encrypt_rotate_tab[16] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }; /* * Table with weak DES keys sorted in ascending order. In DES there * are 64 known keys which are weak. They are weak because they * produce only one, two or four different subkeys in the subkey * scheduling process. The keys in this table have all their parity * bits cleared. */ static const unsigned char weak_keys[64][8] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*w */ {0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e}, {0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0}, {0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe}, {0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e}, /*sw */ {0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00}, {0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe}, {0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0}, {0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0}, /*sw */ {0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe}, {0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00}, {0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e}, {0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe}, /*sw */ {0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0}, {0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e}, {0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00}, {0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e}, {0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00}, /*sw */ {0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe}, {0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0}, {0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00}, {0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e}, /*w */ {0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0}, {0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe}, {0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe}, {0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0}, /*sw */ {0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e}, {0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00}, {0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0}, {0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe}, /*sw */ {0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00}, {0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e}, {0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0}, {0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe}, {0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00}, /*sw */ {0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e}, {0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe}, {0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0}, {0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e}, /*sw */ {0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00}, {0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00}, {0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e}, {0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0}, /*w */ {0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe}, {0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e}, {0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00}, {0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe}, /*sw */ {0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0}, {0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe}, {0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0}, {0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e}, {0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00}, /*sw */ {0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0}, {0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe}, {0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00}, {0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e}, /*sw */ {0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e}, {0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00}, {0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe}, {0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0}, /*sw */ {0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00}, {0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e}, {0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0}, {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe} /*w */ }; bool gl_des_is_weak_key (const char * key) { char work[8]; int i, left, right, middle, cmp_result; /* clear parity bits */ for (i = 0; i < 8; ++i) work[i] = ((unsigned char)key[i]) & 0xfe; /* binary search in the weak key table */ left = 0; right = 63; while (left <= right) { middle = (left + right) / 2; if (!(cmp_result = memcmp (work, weak_keys[middle], 8))) return -1; if (cmp_result > 0) left = middle + 1; else right = middle - 1; } return 0; } /* * Macro to swap bits across two words. */ #define DO_PERMUTATION(a, temp, b, offset, mask) \ temp = ((a>>offset) ^ b) & mask; \ b ^= temp; \ a ^= temp<<offset; /* * This performs the 'initial permutation' of the data to be encrypted * or decrypted. Additionally the resulting two words are rotated one bit * to the left. */ #define INITIAL_PERMUTATION(left, temp, right) \ DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \ DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ right = (right << 1) | (right >> 31); \ temp = (left ^ right) & 0xaaaaaaaa; \ right ^= temp; \ left ^= temp; \ left = (left << 1) | (left >> 31); /* * The 'inverse initial permutation'. */ #define FINAL_PERMUTATION(left, temp, right) \ left = (left << 31) | (left >> 1); \ temp = (left ^ right) & 0xaaaaaaaa; \ left ^= temp; \ right ^= temp; \ right = (right << 31) | (right >> 1); \ DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) /* * A full DES round including 'expansion function', 'sbox substitution' * and 'primitive function P' but without swapping the left and right word. * Please note: The data in 'from' and 'to' is already rotated one bit to * the left, done in the initial permutation. */ #define DES_ROUND(from, to, work, subkey) \ work = from ^ *subkey++; \ to ^= sbox8[ work & 0x3f ]; \ to ^= sbox6[ (work>>8) & 0x3f ]; \ to ^= sbox4[ (work>>16) & 0x3f ]; \ to ^= sbox2[ (work>>24) & 0x3f ]; \ work = ((from << 28) | (from >> 4)) ^ *subkey++; \ to ^= sbox7[ work & 0x3f ]; \ to ^= sbox5[ (work>>8) & 0x3f ]; \ to ^= sbox3[ (work>>16) & 0x3f ]; \ to ^= sbox1[ (work>>24) & 0x3f ]; /* * Macros to convert 8 bytes from/to 32bit words. */ #define READ_64BIT_DATA(data, left, right) \ left = ((uint32_t) data[0] << 24) \ | ((uint32_t) data[1] << 16) \ | ((uint32_t) data[2] << 8) \ | (uint32_t) data[3]; \ right = ((uint32_t) data[4] << 24) \ | ((uint32_t) data[5] << 16) \ | ((uint32_t) data[6] << 8) \ | (uint32_t) data[7]; #define WRITE_64BIT_DATA(data, left, right) \ data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ data[6] = (right >> 8) &0xff; data[7] = right &0xff; /* * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for * 16 encryption rounds. * To calculate subkeys for decryption the caller * have to reorder the generated subkeys. * * rawkey: 8 Bytes of key data * subkey: Array of at least 32 uint32_ts. Will be filled * with calculated subkeys. * */ static void des_key_schedule (const char * _rawkey, uint32_t * subkey) { const unsigned char *rawkey = (const unsigned char *) _rawkey; uint32_t left, right, work; int round; READ_64BIT_DATA (rawkey, left, right) DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) DO_PERMUTATION (right, work, left, 0, 0x10101010) left = ((leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2) | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf]) | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6) | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4)); left &= 0x0fffffff; right = ((rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2) | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf]) | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6) | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4)); right &= 0x0fffffff; for (round = 0; round < 16; ++round) { left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; *subkey++ = (((left << 4) & 0x24000000) | ((left << 28) & 0x10000000) | ((left << 14) & 0x08000000) | ((left << 18) & 0x02080000) | ((left << 6) & 0x01000000) | ((left << 9) & 0x00200000) | ((left >> 1) & 0x00100000) | ((left << 10) & 0x00040000) | ((left << 2) & 0x00020000) | ((left >> 10) & 0x00010000) | ((right >> 13) & 0x00002000) | ((right >> 4) & 0x00001000) | ((right << 6) & 0x00000800) | ((right >> 1) & 0x00000400) | ((right >> 14) & 0x00000200) | (right & 0x00000100) | ((right >> 5) & 0x00000020) | ((right >> 10) & 0x00000010) | ((right >> 3) & 0x00000008) | ((right >> 18) & 0x00000004) | ((right >> 26) & 0x00000002) | ((right >> 24) & 0x00000001)); *subkey++ = (((left << 15) & 0x20000000) | ((left << 17) & 0x10000000) | ((left << 10) & 0x08000000) | ((left << 22) & 0x04000000) | ((left >> 2) & 0x02000000) | ((left << 1) & 0x01000000) | ((left << 16) & 0x00200000) | ((left << 11) & 0x00100000) | ((left << 3) & 0x00080000) | ((left >> 6) & 0x00040000) | ((left << 15) & 0x00020000) | ((left >> 4) & 0x00010000) | ((right >> 2) & 0x00002000) | ((right << 8) & 0x00001000) | ((right >> 14) & 0x00000808) | ((right >> 9) & 0x00000400) | ((right) & 0x00000200) | ((right << 7) & 0x00000100) | ((right >> 7) & 0x00000020) | ((right >> 3) & 0x00000011) | ((right << 2) & 0x00000004) | ((right >> 21) & 0x00000002)); } } void gl_des_setkey (gl_des_ctx *ctx, const char * key) { int i; des_key_schedule (key, ctx->encrypt_subkeys); for (i = 0; i < 32; i += 2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30 - i]; ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[31 - i]; } } bool gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen) { if (keylen != 8) return false; gl_des_setkey (ctx, key); return !gl_des_is_weak_key (key); } void gl_des_ecb_crypt (gl_des_ctx *ctx, const char * _from, char * _to, int mode) { const unsigned char *from = (const unsigned char *) _from; unsigned char *to = (unsigned char *) _to; uint32_t left, right, work; uint32_t *keys; keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; READ_64BIT_DATA (from, left, right) INITIAL_PERMUTATION (left, work, right) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) FINAL_PERMUTATION (right, work, left) WRITE_64BIT_DATA (to, right, left) } void gl_3des_set2keys (gl_3des_ctx *ctx, const char * key1, const char * key2) { int i; des_key_schedule (key1, ctx->encrypt_subkeys); des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); for (i = 0; i < 32; i += 2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30 - i]; ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[31 - i]; ctx->encrypt_subkeys[i + 32] = ctx->decrypt_subkeys[62 - i]; ctx->encrypt_subkeys[i + 33] = ctx->decrypt_subkeys[63 - i]; ctx->encrypt_subkeys[i + 64] = ctx->encrypt_subkeys[i]; ctx->encrypt_subkeys[i + 65] = ctx->encrypt_subkeys[i + 1]; ctx->decrypt_subkeys[i + 64] = ctx->decrypt_subkeys[i]; ctx->decrypt_subkeys[i + 65] = ctx->decrypt_subkeys[i + 1]; } } void gl_3des_set3keys (gl_3des_ctx *ctx, const char * key1, const char * key2, const char * key3) { int i; des_key_schedule (key1, ctx->encrypt_subkeys); des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); des_key_schedule (key3, &(ctx->encrypt_subkeys[64])); for (i = 0; i < 32; i += 2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94 - i]; ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[95 - i]; ctx->encrypt_subkeys[i + 32] = ctx->decrypt_subkeys[62 - i]; ctx->encrypt_subkeys[i + 33] = ctx->decrypt_subkeys[63 - i]; ctx->decrypt_subkeys[i + 64] = ctx->encrypt_subkeys[30 - i]; ctx->decrypt_subkeys[i + 65] = ctx->encrypt_subkeys[31 - i]; } } void gl_3des_ecb_crypt (gl_3des_ctx *ctx, const char * _from, char * _to, int mode) { const unsigned char *from = (const unsigned char *) _from; unsigned char *to = (unsigned char *) _to; uint32_t left, right, work; uint32_t *keys; keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; READ_64BIT_DATA (from, left, right) INITIAL_PERMUTATION (left, work, right) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) FINAL_PERMUTATION (right, work, left) WRITE_64BIT_DATA (to, right, left) } bool gl_3des_makekey (gl_3des_ctx *ctx, const char * key, size_t keylen) { if (keylen != 24) return false; gl_3des_set3keys (ctx, key, key + 8, key + 16); return !(gl_des_is_weak_key (key) || gl_des_is_weak_key (key + 8) || gl_des_is_weak_key (key + 16)); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/des.h�������������������������������������������������������������������0000664�0000000�0000000�00000007271�14110572173�0016000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* des.h --- DES cipher implementation. * Copyright (C) 2005, 2007, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ #ifndef DES_H # define DES_H #include <stddef.h> #include <stdint.h> #include <stdbool.h> /* * Encryption/Decryption context of DES */ typedef struct { uint32_t encrypt_subkeys[32]; uint32_t decrypt_subkeys[32]; } gl_des_ctx; /* * Encryption/Decryption context of Triple-DES */ typedef struct { uint32_t encrypt_subkeys[96]; uint32_t decrypt_subkeys[96]; } gl_3des_ctx; /* Check whether the 8 byte key is weak. Does not check the parity * bits of the key but simple ignore them. */ extern bool gl_des_is_weak_key (const char * key); /* * DES * --- */ /* Fill a DES context CTX with subkeys calculated from 64bit KEY. * Does not check parity bits, but simply ignore them. Does not check * for weak keys. */ extern void gl_des_setkey (gl_des_ctx *ctx, const char * key); /* Fill a DES context CTX with subkeys calculated from 64bit KEY, with * weak key checking. Does not check parity bits, but simply ignore * them. */ extern bool gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen); /* Electronic Codebook Mode DES encryption/decryption of data * according to 'mode'. */ extern void gl_des_ecb_crypt (gl_des_ctx *ctx, const char * from, char * to, int mode); #define gl_des_ecb_encrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 0) #define gl_des_ecb_decrypt(ctx, from, to) gl_des_ecb_crypt(ctx, from, to, 1) /* Triple-DES * ---------- */ /* Fill a Triple-DES context CTX with subkeys calculated from two * 64bit keys in KEY1 and KEY2. Does not check the parity bits of the * keys, but simply ignore them. Does not check for weak keys. */ extern void gl_3des_set2keys (gl_3des_ctx *ctx, const char * key1, const char * key2); /* * Fill a Triple-DES context CTX with subkeys calculated from three * 64bit keys in KEY1, KEY2 and KEY3. Does not check the parity bits * of the keys, but simply ignore them. Does not check for weak * keys. */ extern void gl_3des_set3keys (gl_3des_ctx *ctx, const char * key1, const char * key2, const char * key3); /* Fill a Triple-DES context CTX with subkeys calculated from three * concatenated 64bit keys in KEY, with weak key checking. Does not * check the parity bits of the keys, but simply ignore them. */ extern bool gl_3des_makekey (gl_3des_ctx *ctx, const char * key, size_t keylen); /* Electronic Codebook Mode Triple-DES encryption/decryption of data * according to 'mode'. Sometimes this mode is named 'EDE' mode * (Encryption-Decryption-Encryption). */ extern void gl_3des_ecb_crypt (gl_3des_ctx *ctx, const char * from, char * to, int mode); #define gl_3des_ecb_encrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,0) #define gl_3des_ecb_decrypt(ctx, from, to) gl_3des_ecb_crypt(ctx,from,to,1) #endif /* DES_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dev-ino.h���������������������������������������������������������������0000664�0000000�0000000�00000001642�14110572173�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A simple (device, inode) struct. Copyright (C) 2003-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2003. */ #ifndef DEV_INO_H # define DEV_INO_H 1 # include <sys/types.h> # include <sys/stat.h> struct dev_ino { ino_t st_ino; dev_t st_dev; }; #endif ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dfa.c�������������������������������������������������������������������0000664�0000000�0000000�00000412455�14110572173�0015756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dfa.c - deterministic extended regexp routines for GNU Copyright (C) 1988, 1998, 2000, 2002, 2004-2005, 2007-2021 Free Software Foundation, Inc. This 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, 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, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA */ /* Written June, 1988 by Mike Haertel Modified July, 1988 by Arthur David Olson to assist BMG speedups */ #include <config.h> #include "dfa.h" #include "flexmember.h" #include "idx.h" #include "verify.h" #include <assert.h> #include <ctype.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> /* Pacify gcc -Wanalyzer-null-dereference in areas where GCC understandably cannot deduce that the input comes from a well-formed regular expression. There's little point to the runtime overhead of 'assert' instead of 'assume_nonnull' when the MMU will check anyway. */ #define assume_nonnull(x) assume ((x) != NULL) static bool streq (char const *a, char const *b) { return strcmp (a, b) == 0; } static bool isasciidigit (char c) { return '0' <= c && c <= '9'; } #include "gettext.h" #define _(str) gettext (str) #include <wchar.h> #include "xalloc.h" #include "localeinfo.h" #ifndef FALLTHROUGH # if 201710L < __STDC_VERSION__ # define FALLTHROUGH [[__fallthrough__]] # elif (__GNUC__ >= 7) || (__clang_major__ >= 10) # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif /* HPUX defines these as macros in sys/param.h. */ #ifdef setbit # undef setbit #endif #ifdef clrbit # undef clrbit #endif /* For code that does not use Gnulib’s isblank module. */ #if !defined isblank && !defined HAVE_ISBLANK && !defined GNULIB_ISBLANK # define isblank dfa_isblank static int isblank (int c) { return c == ' ' || c == '\t'; } #endif /* First integer value that is greater than any character code. */ enum { NOTCHAR = 1 << CHAR_BIT }; #ifdef UINT_LEAST64_MAX /* Number of bits used in a charclass word. */ enum { CHARCLASS_WORD_BITS = 64 }; /* This represents part of a character class. It must be unsigned and at least CHARCLASS_WORD_BITS wide. Any excess bits are zero. */ typedef uint_least64_t charclass_word; /* Part of a charclass initializer that represents 64 bits' worth of a charclass, where LO and HI are the low and high-order 32 bits of the 64-bit quantity. */ # define CHARCLASS_PAIR(lo, hi) (((charclass_word) (hi) << 32) + (lo)) #else /* Fallbacks for pre-C99 hosts that lack 64-bit integers. */ enum { CHARCLASS_WORD_BITS = 32 }; typedef unsigned long charclass_word; # define CHARCLASS_PAIR(lo, hi) lo, hi #endif /* An initializer for a charclass whose 32-bit words are A through H. */ #define CHARCLASS_INIT(a, b, c, d, e, f, g, h) \ {{ \ CHARCLASS_PAIR (a, b), CHARCLASS_PAIR (c, d), \ CHARCLASS_PAIR (e, f), CHARCLASS_PAIR (g, h) \ }} /* The maximum useful value of a charclass_word; all used bits are 1. */ static charclass_word const CHARCLASS_WORD_MASK = ((charclass_word) 1 << (CHARCLASS_WORD_BITS - 1) << 1) - 1; /* Number of words required to hold a bit for every character. */ enum { CHARCLASS_WORDS = (NOTCHAR + CHARCLASS_WORD_BITS - 1) / CHARCLASS_WORD_BITS }; /* Sets of unsigned characters are stored as bit vectors in arrays of ints. */ typedef struct { charclass_word w[CHARCLASS_WORDS]; } charclass; /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static unsigned char to_uchar (char ch) { return ch; } /* Contexts tell us whether a character is a newline or a word constituent. Word-constituent characters are those that satisfy iswalnum, plus '_'. Each character has a single CTX_* value; bitmasks of CTX_* values denote a particular character class. A state also stores a context value, which is a bitmask of CTX_* values. A state's context represents a set of characters that the state's predecessors must match. For example, a state whose context does not include CTX_LETTER will never have transitions where the previous character is a word constituent. A state whose context is CTX_ANY might have transitions from any character. */ enum { CTX_NONE = 1, CTX_LETTER = 2, CTX_NEWLINE = 4, CTX_ANY = 7 }; /* Sometimes characters can only be matched depending on the surrounding context. Such context decisions depend on what the previous character was, and the value of the current (lookahead) character. Context dependent constraints are encoded as 9-bit integers. Each bit that is set indicates that the constraint succeeds in the corresponding context. bit 6-8 - valid contexts when next character is CTX_NEWLINE bit 3-5 - valid contexts when next character is CTX_LETTER bit 0-2 - valid contexts when next character is CTX_NONE succeeds_in_context determines whether a given constraint succeeds in a particular context. Prev is a bitmask of possible context values for the previous character, curr is the (single-bit) context value for the lookahead character. */ static int newline_constraint (int constraint) { return (constraint >> 6) & 7; } static int letter_constraint (int constraint) { return (constraint >> 3) & 7; } static int other_constraint (int constraint) { return constraint & 7; } static bool succeeds_in_context (int constraint, int prev, int curr) { return !! (((curr & CTX_NONE ? other_constraint (constraint) : 0) \ | (curr & CTX_LETTER ? letter_constraint (constraint) : 0) \ | (curr & CTX_NEWLINE ? newline_constraint (constraint) : 0)) \ & prev); } /* The following describe what a constraint depends on. */ static bool prev_newline_dependent (int constraint) { return ((constraint ^ constraint >> 2) & 0111) != 0; } static bool prev_letter_dependent (int constraint) { return ((constraint ^ constraint >> 1) & 0111) != 0; } /* Tokens that match the empty string subject to some constraint actually work by applying that constraint to determine what may follow them, taking into account what has gone before. The following values are the constraints corresponding to the special tokens previously defined. */ enum { NO_CONSTRAINT = 0777, BEGLINE_CONSTRAINT = 0444, ENDLINE_CONSTRAINT = 0700, BEGWORD_CONSTRAINT = 0050, ENDWORD_CONSTRAINT = 0202, LIMWORD_CONSTRAINT = 0252, NOTLIMWORD_CONSTRAINT = 0525 }; /* The regexp is parsed into an array of tokens in postfix form. Some tokens are operators and others are terminal symbols. Most (but not all) of these codes are returned by the lexical analyzer. */ typedef ptrdiff_t token; static token const TOKEN_MAX = PTRDIFF_MAX; /* States are indexed by state_num values. These are normally nonnegative but -1 is used as a special value. */ typedef ptrdiff_t state_num; /* Predefined token values. */ enum { END = -1, /* END is a terminal symbol that matches the end of input; any value of END or less in the parse tree is such a symbol. Accepting states of the DFA are those that would have a transition on END. This is -1, not some more-negative value, to tweak the speed of comparisons to END. */ /* Ordinary character values are terminal symbols that match themselves. */ /* CSET must come last in the following list of special tokens. Otherwise, the list order matters only for performance. Related special tokens should have nearby values so that code like (t == ANYCHAR || t == MBCSET || CSET <= t) can be done with a single machine-level comparison. */ EMPTY = NOTCHAR, /* EMPTY is a terminal symbol that matches the empty string. */ QMARK, /* QMARK is an operator of one argument that matches zero or one occurrences of its argument. */ STAR, /* STAR is an operator of one argument that matches the Kleene closure (zero or more occurrences) of its argument. */ PLUS, /* PLUS is an operator of one argument that matches the positive closure (one or more occurrences) of its argument. */ REPMN, /* REPMN is a lexical token corresponding to the {m,n} construct. REPMN never appears in the compiled token vector. */ CAT, /* CAT is an operator of two arguments that matches the concatenation of its arguments. CAT is never returned by the lexical analyzer. */ OR, /* OR is an operator of two arguments that matches either of its arguments. */ LPAREN, /* LPAREN never appears in the parse tree, it is only a lexeme. */ RPAREN, /* RPAREN never appears in the parse tree. */ WCHAR, /* Only returned by lex. wctok contains the wide character representation. */ ANYCHAR, /* ANYCHAR is a terminal symbol that matches a valid multibyte (or single byte) character. It is used only if MB_CUR_MAX > 1. */ BEG, /* BEG is an initial symbol that matches the beginning of input. */ BEGLINE, /* BEGLINE is a terminal symbol that matches the empty string at the beginning of a line. */ ENDLINE, /* ENDLINE is a terminal symbol that matches the empty string at the end of a line. */ BEGWORD, /* BEGWORD is a terminal symbol that matches the empty string at the beginning of a word. */ ENDWORD, /* ENDWORD is a terminal symbol that matches the empty string at the end of a word. */ LIMWORD, /* LIMWORD is a terminal symbol that matches the empty string at the beginning or the end of a word. */ NOTLIMWORD, /* NOTLIMWORD is a terminal symbol that matches the empty string not at the beginning or end of a word. */ BACKREF, /* BACKREF is generated by \<digit> or by any other construct that is not completely handled. If the scanner detects a transition on backref, it returns a kind of "semi-success" indicating that the match will have to be verified with a backtracking matcher. */ MBCSET, /* MBCSET is similar to CSET, but for multibyte characters. */ CSET /* CSET and (and any value greater) is a terminal symbol that matches any of a class of characters. */ }; /* States of the recognizer correspond to sets of positions in the parse tree, together with the constraints under which they may be matched. So a position is encoded as an index into the parse tree together with a constraint. */ typedef struct { idx_t index; /* Index into the parse array. */ unsigned int constraint; /* Constraint for matching this position. */ } position; /* Sets of positions are stored as arrays. */ typedef struct { position *elems; /* Elements of this position set. */ idx_t nelem; /* Number of elements in this set. */ idx_t alloc; /* Number of elements allocated in ELEMS. */ } position_set; /* A state of the dfa consists of a set of positions, some flags, and the token value of the lowest-numbered position of the state that contains an END token. */ typedef struct { size_t hash; /* Hash of the positions of this state. */ position_set elems; /* Positions this state could match. */ unsigned char context; /* Context from previous state. */ unsigned short constraint; /* Constraint for this state to accept. */ position_set mbps; /* Positions which can match multibyte characters or the follows, e.g., period. Used only if MB_CUR_MAX > 1. */ state_num mb_trindex; /* Index of this state in MB_TRANS, or negative if the state does not have ANYCHAR. */ } dfa_state; /* Maximum for any transition table count. This should be at least 3, for the initial state setup. */ enum { MAX_TRCOUNT = 1024 }; /* A bracket operator. e.g., [a-c], [[:alpha:]], etc. */ struct mb_char_classes { ptrdiff_t cset; bool invert; wchar_t *chars; /* Normal characters. */ idx_t nchars; idx_t nchars_alloc; }; struct regex_syntax { /* Syntax bits controlling the behavior of the lexical analyzer. */ reg_syntax_t syntax_bits; bool syntax_bits_set; /* Flag for case-folding letters into sets. */ bool case_fold; /* True if ^ and $ match only the start and end of data, and do not match end-of-line within data. */ bool anchor; /* End-of-line byte in data. */ unsigned char eolbyte; /* Cache of char-context values. */ char sbit[NOTCHAR]; /* If never_trail[B], the byte B cannot be a non-initial byte in a multibyte character. */ bool never_trail[NOTCHAR]; /* Set of characters considered letters. */ charclass letters; /* Set of characters that are newline. */ charclass newline; }; /* Lexical analyzer. All the dross that deals with the obnoxious GNU Regex syntax bits is located here. The poor, suffering reader is referred to the GNU Regex documentation for the meaning of the @#%!@#%^!@ syntax bits. */ struct lexer_state { char const *ptr; /* Pointer to next input character. */ idx_t left; /* Number of characters remaining. */ token lasttok; /* Previous token returned; initially END. */ idx_t parens; /* Count of outstanding left parens. */ int minrep, maxrep; /* Repeat counts for {m,n}. */ /* Wide character representation of the current multibyte character, or WEOF if there was an encoding error. Used only if MB_CUR_MAX > 1. */ wint_t wctok; /* The most recently analyzed multibyte bracket expression. */ struct mb_char_classes brack; /* We're separated from beginning or (, | only by zero-width characters. */ bool laststart; }; /* Recursive descent parser for regular expressions. */ struct parser_state { token tok; /* Lookahead token. */ idx_t depth; /* Current depth of a hypothetical stack holding deferred productions. This is used to determine the depth that will be required of the real stack later on in dfaanalyze. */ }; /* A compiled regular expression. */ struct dfa { /* Fields filled by the scanner. */ charclass *charclasses; /* Array of character sets for CSET tokens. */ idx_t cindex; /* Index for adding new charclasses. */ idx_t calloc; /* Number of charclasses allocated. */ ptrdiff_t canychar; /* Index of anychar class, or -1. */ /* Scanner state */ struct lexer_state lex; /* Parser state */ struct parser_state parse; /* Fields filled by the parser. */ token *tokens; /* Postfix parse array. */ idx_t tindex; /* Index for adding new tokens. */ idx_t talloc; /* Number of tokens currently allocated. */ idx_t depth; /* Depth required of an evaluation stack used for depth-first traversal of the parse tree. */ idx_t nleaves; /* Number of non-EMPTY leaves in the parse tree. */ idx_t nregexps; /* Count of parallel regexps being built with dfaparse. */ bool fast; /* The DFA is fast. */ bool epsilon; /* Does a token match only the empty string? */ token utf8_anychar_classes[9]; /* To lower ANYCHAR in UTF-8 locales. */ mbstate_t mbs; /* Multibyte conversion state. */ /* The following are valid only if MB_CUR_MAX > 1. */ /* The value of multibyte_prop[i] is defined by following rule. if tokens[i] < NOTCHAR bit 0 : tokens[i] is the first byte of a character, including single-byte characters. bit 1 : tokens[i] is the last byte of a character, including single-byte characters. e.g. tokens = 'single_byte_a', 'multi_byte_A', single_byte_b' = 'sb_a', 'mb_A(1st byte)', 'mb_A(2nd byte)', 'mb_A(3rd byte)', 'sb_b' multibyte_prop = 3 , 1 , 0 , 2 , 3 */ char *multibyte_prop; /* Fields filled by the superset. */ struct dfa *superset; /* Hint of the dfa. */ /* Fields filled by the state builder. */ dfa_state *states; /* States of the dfa. */ state_num sindex; /* Index for adding new states. */ idx_t salloc; /* Number of states currently allocated. */ /* Fields filled by the parse tree->NFA conversion. */ position_set *follows; /* Array of follow sets, indexed by position index. The follow of a position is the set of positions containing characters that could conceivably follow a character matching the given position in a string matching the regexp. Allocated to the maximum possible position index. */ bool searchflag; /* We are supposed to build a searching as opposed to an exact matcher. A searching matcher finds the first and shortest string matching a regexp anywhere in the buffer, whereas an exact matcher finds the longest string matching, but anchored to the beginning of the buffer. */ /* Fields filled by dfaanalyze. */ int *constraints; /* Array of union of accepting constraints in the follow of a position. */ int *separates; /* Array of contexts on follow of a position. */ /* Fields filled by dfaexec. */ state_num tralloc; /* Number of transition tables that have slots so far, not counting trans[-1] and trans[-2]. */ int trcount; /* Number of transition tables that have been built, other than for initial states. */ int min_trcount; /* Number of initial states. Equivalently, the minimum state number for which trcount counts transitions. */ state_num **trans; /* Transition tables for states that can never accept. If the transitions for a state have not yet been computed, or the state could possibly accept, its entry in this table is NULL. This points to two past the start of the allocated array, and trans[-1] and trans[-2] are always NULL. */ state_num **fails; /* Transition tables after failing to accept on a state that potentially could do so. If trans[i] is non-null, fails[i] must be null. */ char *success; /* Table of acceptance conditions used in dfaexec and computed in build_state. */ state_num *newlines; /* Transitions on newlines. The entry for a newline in any transition table is always -1 so we can count lines without wasting too many cycles. The transition for a newline is stored separately and handled as a special case. Newline is also used as a sentinel at the end of the buffer. */ state_num initstate_notbol; /* Initial state for CTX_LETTER and CTX_NONE context in multibyte locales, in which we do not distinguish between their contexts, as not supported word. */ position_set mb_follows; /* Follow set added by ANYCHAR on demand. */ state_num **mb_trans; /* Transition tables for states with ANYCHAR. */ state_num mb_trcount; /* Number of transition tables for states with ANYCHAR that have actually been built. */ /* Syntax configuration. This is near the end so that dfacopysyntax can memset up to here. */ struct regex_syntax syntax; /* Information derived from the locale. This is at the end so that a quick memset need not clear it specially. */ /* dfaexec implementation. */ char *(*dfaexec) (struct dfa *, char const *, char *, bool, ptrdiff_t *, bool *); /* Other cached information derived from the locale. */ struct localeinfo localeinfo; }; /* User access to dfa internals. */ /* S could possibly be an accepting state of R. */ static bool accepting (state_num s, struct dfa const *r) { return r->states[s].constraint != 0; } /* STATE accepts in the specified context. */ static bool accepts_in_context (int prev, int curr, state_num state, struct dfa const *dfa) { return succeeds_in_context (dfa->states[state].constraint, prev, curr); } static void regexp (struct dfa *dfa); /* Store into *PWC the result of converting the leading bytes of the multibyte buffer S of length N bytes, using D->localeinfo.sbctowc and updating the conversion state in *D. On conversion error, convert just a single byte, to WEOF. Return the number of bytes converted. This differs from mbrtowc (PWC, S, N, &D->mbs) as follows: * PWC points to wint_t, not to wchar_t. * The last arg is a dfa *D instead of merely a multibyte conversion state D->mbs. * N is idx_t not size_t, and must be at least 1. * S[N - 1] must be a sentinel byte. * Shift encodings are not supported. * The return value is always in the range 1..N. * D->mbs is always valid afterwards. * *PWC is always set to something. */ static int mbs_to_wchar (wint_t *pwc, char const *s, idx_t n, struct dfa *d) { unsigned char uc = s[0]; wint_t wc = d->localeinfo.sbctowc[uc]; if (wc == WEOF) { wchar_t wch; size_t nbytes = mbrtowc (&wch, s, n, &d->mbs); if (0 < nbytes && nbytes < (size_t) -2) { *pwc = wch; return nbytes; } memset (&d->mbs, 0, sizeof d->mbs); } *pwc = wc; return 1; } #ifdef DEBUG static void prtok (token t) { if (t <= END) fprintf (stderr, "END"); else if (0 <= t && t < NOTCHAR) { unsigned int ch = t; fprintf (stderr, "0x%02x", ch); } else { char const *s; switch (t) { case BEG: s = "BEG"; break; case EMPTY: s = "EMPTY"; break; case BACKREF: s = "BACKREF"; break; case BEGLINE: s = "BEGLINE"; break; case ENDLINE: s = "ENDLINE"; break; case BEGWORD: s = "BEGWORD"; break; case ENDWORD: s = "ENDWORD"; break; case LIMWORD: s = "LIMWORD"; break; case NOTLIMWORD: s = "NOTLIMWORD"; break; case QMARK: s = "QMARK"; break; case STAR: s = "STAR"; break; case PLUS: s = "PLUS"; break; case CAT: s = "CAT"; break; case OR: s = "OR"; break; case LPAREN: s = "LPAREN"; break; case RPAREN: s = "RPAREN"; break; case ANYCHAR: s = "ANYCHAR"; break; case MBCSET: s = "MBCSET"; break; default: s = "CSET"; break; } fprintf (stderr, "%s", s); } } #endif /* DEBUG */ /* Stuff pertaining to charclasses. */ static bool tstbit (unsigned int b, charclass const *c) { return c->w[b / CHARCLASS_WORD_BITS] >> b % CHARCLASS_WORD_BITS & 1; } static void setbit (unsigned int b, charclass *c) { charclass_word one = 1; c->w[b / CHARCLASS_WORD_BITS] |= one << b % CHARCLASS_WORD_BITS; } static void clrbit (unsigned int b, charclass *c) { charclass_word one = 1; c->w[b / CHARCLASS_WORD_BITS] &= ~(one << b % CHARCLASS_WORD_BITS); } static void zeroset (charclass *s) { memset (s, 0, sizeof *s); } static void fillset (charclass *s) { for (int i = 0; i < CHARCLASS_WORDS; i++) s->w[i] = CHARCLASS_WORD_MASK; } static void notset (charclass *s) { for (int i = 0; i < CHARCLASS_WORDS; ++i) s->w[i] = CHARCLASS_WORD_MASK & ~s->w[i]; } static bool equal (charclass const *s1, charclass const *s2) { charclass_word w = 0; for (int i = 0; i < CHARCLASS_WORDS; i++) w |= s1->w[i] ^ s2->w[i]; return w == 0; } static bool emptyset (charclass const *s) { charclass_word w = 0; for (int i = 0; i < CHARCLASS_WORDS; i++) w |= s->w[i]; return w == 0; } /* Ensure that the array addressed by PA holds at least I + 1 items. Either return PA, or reallocate the array and return its new address. Although PA may be null, the returned value is never null. The array holds *NITEMS items, where 0 <= I <= *NITEMS; *NITEMS is updated on reallocation. If PA is null, *NITEMS must be zero. Do not allocate more than NITEMS_MAX items total; -1 means no limit. ITEM_SIZE is the size of one item; it must be positive. Avoid O(N**2) behavior on arrays growing linearly. */ static void * maybe_realloc (void *pa, idx_t i, idx_t *nitems, ptrdiff_t nitems_max, idx_t item_size) { if (i < *nitems) return pa; return xpalloc (pa, nitems, 1, nitems_max, item_size); } /* In DFA D, find the index of charclass S, or allocate a new one. */ static idx_t charclass_index (struct dfa *d, charclass const *s) { idx_t i; for (i = 0; i < d->cindex; ++i) if (equal (s, &d->charclasses[i])) return i; d->charclasses = maybe_realloc (d->charclasses, d->cindex, &d->calloc, TOKEN_MAX - CSET, sizeof *d->charclasses); ++d->cindex; d->charclasses[i] = *s; return i; } static bool unibyte_word_constituent (struct dfa const *dfa, unsigned char c) { return dfa->localeinfo.sbctowc[c] != WEOF && (isalnum (c) || (c) == '_'); } static int char_context (struct dfa const *dfa, unsigned char c) { if (c == dfa->syntax.eolbyte && !dfa->syntax.anchor) return CTX_NEWLINE; if (unibyte_word_constituent (dfa, c)) return CTX_LETTER; return CTX_NONE; } /* Set a bit in the charclass for the given wchar_t. Do nothing if WC is represented by a multi-byte sequence. Even for MB_CUR_MAX == 1, this may happen when folding case in weird Turkish locales where dotless i/dotted I are not included in the chosen character set. Return whether a bit was set in the charclass. */ static bool setbit_wc (wint_t wc, charclass *c) { int b = wctob (wc); if (b < 0) return false; setbit (b, c); return true; } /* Set a bit for B and its case variants in the charclass C. MB_CUR_MAX must be 1. */ static void setbit_case_fold_c (int b, charclass *c) { int ub = toupper (b); for (int i = 0; i < NOTCHAR; i++) if (toupper (i) == ub) setbit (i, c); } /* Fetch the next lexical input character from the pattern. There must at least one byte of pattern input. Set DFA->lex.wctok to the value of the character or to WEOF depending on whether the input is a valid multibyte character (possibly of length 1). Then return the next input byte value, except return EOF if the input is a multibyte character of length greater than 1. */ static int fetch_wc (struct dfa *dfa) { int nbytes = mbs_to_wchar (&dfa->lex.wctok, dfa->lex.ptr, dfa->lex.left, dfa); int c = nbytes == 1 ? to_uchar (dfa->lex.ptr[0]) : EOF; dfa->lex.ptr += nbytes; dfa->lex.left -= nbytes; return c; } /* If there is no more input, report an error about unbalanced brackets. Otherwise, behave as with fetch_wc (DFA). */ static int bracket_fetch_wc (struct dfa *dfa) { if (! dfa->lex.left) dfaerror (_("unbalanced [")); return fetch_wc (dfa); } typedef int predicate (int); /* The following list maps the names of the Posix named character classes to predicate functions that determine whether a given character is in the class. The leading [ has already been eaten by the lexical analyzer. */ struct dfa_ctype { const char *name; predicate *func; bool single_byte_only; }; static const struct dfa_ctype prednames[] = { {"alpha", isalpha, false}, {"upper", isupper, false}, {"lower", islower, false}, {"digit", isdigit, true}, {"xdigit", isxdigit, false}, {"space", isspace, false}, {"punct", ispunct, false}, {"alnum", isalnum, false}, {"print", isprint, false}, {"graph", isgraph, false}, {"cntrl", iscntrl, false}, {"blank", isblank, false}, {NULL, NULL, false} }; static const struct dfa_ctype *_GL_ATTRIBUTE_PURE find_pred (const char *str) { for (int i = 0; prednames[i].name; i++) if (streq (str, prednames[i].name)) return &prednames[i]; return NULL; } /* Parse a bracket expression, which possibly includes multibyte characters. */ static token parse_bracket_exp (struct dfa *dfa) { /* This is a bracket expression that dfaexec is known to process correctly. */ bool known_bracket_exp = true; /* Used to warn about [:space:]. Bit 0 = first character is a colon. Bit 1 = last character is a colon. Bit 2 = includes any other character but a colon. Bit 3 = includes ranges, char/equiv classes or collation elements. */ int colon_warning_state; dfa->lex.brack.nchars = 0; charclass ccl; zeroset (&ccl); int c = bracket_fetch_wc (dfa); bool invert = c == '^'; if (invert) { c = bracket_fetch_wc (dfa); known_bracket_exp = dfa->localeinfo.simple; } wint_t wc = dfa->lex.wctok; int c1; wint_t wc1; colon_warning_state = (c == ':'); do { c1 = NOTCHAR; /* Mark c1 as not initialized. */ colon_warning_state &= ~2; /* Note that if we're looking at some other [:...:] construct, we just treat it as a bunch of ordinary characters. We can do this because we assume regex has checked for syntax errors before dfa is ever called. */ if (c == '[') { c1 = bracket_fetch_wc (dfa); wc1 = dfa->lex.wctok; if ((c1 == ':' && (dfa->syntax.syntax_bits & RE_CHAR_CLASSES)) || c1 == '.' || c1 == '=') { enum { MAX_BRACKET_STRING_LEN = 32 }; char str[MAX_BRACKET_STRING_LEN + 1]; int len = 0; for (;;) { c = bracket_fetch_wc (dfa); if (dfa->lex.left == 0 || (c == c1 && dfa->lex.ptr[0] == ']')) break; if (len < MAX_BRACKET_STRING_LEN) str[len++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[len] = '\0'; /* Fetch bracket. */ c = bracket_fetch_wc (dfa); wc = dfa->lex.wctok; if (c1 == ':') /* Build character class. POSIX allows character classes to match multicharacter collating elements, but the regex code does not support that, so do not worry about that possibility. */ { char const *class = (dfa->syntax.case_fold && (streq (str, "upper") || streq (str, "lower")) ? "alpha" : str); const struct dfa_ctype *pred = find_pred (class); if (!pred) dfaerror (_("invalid character class")); if (dfa->localeinfo.multibyte && !pred->single_byte_only) known_bracket_exp = false; else for (int c2 = 0; c2 < NOTCHAR; ++c2) if (pred->func (c2)) setbit (c2, &ccl); } else known_bracket_exp = false; colon_warning_state |= 8; /* Fetch new lookahead character. */ c1 = bracket_fetch_wc (dfa); wc1 = dfa->lex.wctok; continue; } /* We treat '[' as a normal character here. c/c1/wc/wc1 are already set up. */ } if (c == '\\' && (dfa->syntax.syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) { c = bracket_fetch_wc (dfa); wc = dfa->lex.wctok; } if (c1 == NOTCHAR) { c1 = bracket_fetch_wc (dfa); wc1 = dfa->lex.wctok; } if (c1 == '-') /* build range characters. */ { int c2 = bracket_fetch_wc (dfa); wint_t wc2 = dfa->lex.wctok; /* A bracket expression like [a-[.aa.]] matches an unknown set. Treat it like [-a[.aa.]] while parsing it, and remember that the set is unknown. */ if (c2 == '[' && dfa->lex.ptr[0] == '.') { known_bracket_exp = false; c2 = ']'; } if (c2 == ']') { /* In the case [x-], the - is an ordinary hyphen, which is left in c1, the lookahead character. */ dfa->lex.ptr--; dfa->lex.left++; } else { if (c2 == '\\' && (dfa->syntax.syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) { c2 = bracket_fetch_wc (dfa); wc2 = dfa->lex.wctok; } colon_warning_state |= 8; c1 = bracket_fetch_wc (dfa); wc1 = dfa->lex.wctok; /* Treat [x-y] as a range if x != y. */ if (wc != wc2 || wc == WEOF) { if (dfa->localeinfo.simple || (isasciidigit (c) & isasciidigit (c2))) { for (int ci = c; ci <= c2; ci++) if (dfa->syntax.case_fold && isalpha (ci)) setbit_case_fold_c (ci, &ccl); else setbit (ci, &ccl); } else known_bracket_exp = false; continue; } } } colon_warning_state |= (c == ':') ? 2 : 4; if (!dfa->localeinfo.multibyte) { if (dfa->syntax.case_fold && isalpha (c)) setbit_case_fold_c (c, &ccl); else setbit (c, &ccl); continue; } if (wc == WEOF) known_bracket_exp = false; else { wchar_t folded[CASE_FOLDED_BUFSIZE + 1]; int n = (dfa->syntax.case_fold ? case_folded_counterparts (wc, folded + 1) + 1 : 1); folded[0] = wc; for (int i = 0; i < n; i++) if (!setbit_wc (folded[i], &ccl)) { dfa->lex.brack.chars = maybe_realloc (dfa->lex.brack.chars, dfa->lex.brack.nchars, &dfa->lex.brack.nchars_alloc, -1, sizeof *dfa->lex.brack.chars); dfa->lex.brack.chars[dfa->lex.brack.nchars++] = folded[i]; } } } while ((wc = wc1, (c = c1) != ']')); if (colon_warning_state == 7) dfawarn (_("character class syntax is [[:space:]], not [:space:]")); if (! known_bracket_exp) return BACKREF; if (dfa->localeinfo.multibyte && (invert || dfa->lex.brack.nchars != 0)) { dfa->lex.brack.invert = invert; dfa->lex.brack.cset = emptyset (&ccl) ? -1 : charclass_index (dfa, &ccl); return MBCSET; } if (invert) { notset (&ccl); if (dfa->syntax.syntax_bits & RE_HAT_LISTS_NOT_NEWLINE) clrbit ('\n', &ccl); } return CSET + charclass_index (dfa, &ccl); } struct lexptr { char const *ptr; idx_t left; }; static void push_lex_state (struct dfa *dfa, struct lexptr *ls, char const *s) { ls->ptr = dfa->lex.ptr; ls->left = dfa->lex.left; dfa->lex.ptr = s; dfa->lex.left = strlen (s); } static void pop_lex_state (struct dfa *dfa, struct lexptr const *ls) { dfa->lex.ptr = ls->ptr; dfa->lex.left = ls->left; } static token lex (struct dfa *dfa) { bool backslash = false; /* Basic plan: We fetch a character. If it's a backslash, we set the backslash flag and go through the loop again. On the plus side, this avoids having a duplicate of the main switch inside the backslash case. On the minus side, it means that just about every case begins with "if (backslash) ...". */ for (int i = 0; i < 2; ++i) { if (! dfa->lex.left) return dfa->lex.lasttok = END; int c = fetch_wc (dfa); switch (c) { case '\\': if (backslash) goto normal_char; if (dfa->lex.left == 0) dfaerror (_("unfinished \\ escape")); backslash = true; break; case '^': if (backslash) goto normal_char; if (dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_ANCHORS || dfa->lex.lasttok == END || dfa->lex.lasttok == LPAREN || dfa->lex.lasttok == OR) return dfa->lex.lasttok = BEGLINE; goto normal_char; case '$': if (backslash) goto normal_char; if (dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_ANCHORS || dfa->lex.left == 0 || ((dfa->lex.left > !(dfa->syntax.syntax_bits & RE_NO_BK_PARENS)) && (dfa->lex.ptr[!(dfa->syntax.syntax_bits & RE_NO_BK_PARENS) & (dfa->lex.ptr[0] == '\\')] == ')')) || ((dfa->lex.left > !(dfa->syntax.syntax_bits & RE_NO_BK_VBAR)) && (dfa->lex.ptr[!(dfa->syntax.syntax_bits & RE_NO_BK_VBAR) & (dfa->lex.ptr[0] == '\\')] == '|')) || ((dfa->syntax.syntax_bits & RE_NEWLINE_ALT) && dfa->lex.left > 0 && dfa->lex.ptr[0] == '\n')) return dfa->lex.lasttok = ENDLINE; goto normal_char; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_BK_REFS)) { dfa->lex.laststart = false; return dfa->lex.lasttok = BACKREF; } goto normal_char; case '`': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) { /* FIXME: should be beginning of string */ return dfa->lex.lasttok = BEGLINE; } goto normal_char; case '\'': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) { /* FIXME: should be end of string */ return dfa->lex.lasttok = ENDLINE; } goto normal_char; case '<': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) return dfa->lex.lasttok = BEGWORD; goto normal_char; case '>': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) return dfa->lex.lasttok = ENDWORD; goto normal_char; case 'b': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) return dfa->lex.lasttok = LIMWORD; goto normal_char; case 'B': if (backslash && !(dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) return dfa->lex.lasttok = NOTLIMWORD; goto normal_char; case '?': if (dfa->syntax.syntax_bits & RE_LIMITED_OPS) goto normal_char; if (backslash != ((dfa->syntax.syntax_bits & RE_BK_PLUS_QM) != 0)) goto normal_char; if (!(dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_OPS) && dfa->lex.laststart) goto normal_char; return dfa->lex.lasttok = QMARK; case '*': if (backslash) goto normal_char; if (!(dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_OPS) && dfa->lex.laststart) goto normal_char; return dfa->lex.lasttok = STAR; case '+': if (dfa->syntax.syntax_bits & RE_LIMITED_OPS) goto normal_char; if (backslash != ((dfa->syntax.syntax_bits & RE_BK_PLUS_QM) != 0)) goto normal_char; if (!(dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_OPS) && dfa->lex.laststart) goto normal_char; return dfa->lex.lasttok = PLUS; case '{': if (!(dfa->syntax.syntax_bits & RE_INTERVALS)) goto normal_char; if (backslash != ((dfa->syntax.syntax_bits & RE_NO_BK_BRACES) == 0)) goto normal_char; if (!(dfa->syntax.syntax_bits & RE_CONTEXT_INDEP_OPS) && dfa->lex.laststart) goto normal_char; /* Cases: {M} - exact count {M,} - minimum count, maximum is infinity {,N} - 0 through N {,} - 0 to infinity (same as '*') {M,N} - M through N */ { char const *p = dfa->lex.ptr; char const *lim = p + dfa->lex.left; dfa->lex.minrep = dfa->lex.maxrep = -1; for (; p != lim && isasciidigit (*p); p++) dfa->lex.minrep = (dfa->lex.minrep < 0 ? *p - '0' : MIN (RE_DUP_MAX + 1, dfa->lex.minrep * 10 + *p - '0')); if (p != lim) { if (*p != ',') dfa->lex.maxrep = dfa->lex.minrep; else { if (dfa->lex.minrep < 0) dfa->lex.minrep = 0; while (++p != lim && isasciidigit (*p)) dfa->lex.maxrep = (dfa->lex.maxrep < 0 ? *p - '0' : MIN (RE_DUP_MAX + 1, dfa->lex.maxrep * 10 + *p - '0')); } } if (! ((! backslash || (p != lim && *p++ == '\\')) && p != lim && *p++ == '}' && 0 <= dfa->lex.minrep && (dfa->lex.maxrep < 0 || dfa->lex.minrep <= dfa->lex.maxrep))) { if (dfa->syntax.syntax_bits & RE_INVALID_INTERVAL_ORD) goto normal_char; dfaerror (_("invalid content of \\{\\}")); } if (RE_DUP_MAX < dfa->lex.maxrep) dfaerror (_("regular expression too big")); dfa->lex.ptr = p; dfa->lex.left = lim - p; } dfa->lex.laststart = false; return dfa->lex.lasttok = REPMN; case '|': if (dfa->syntax.syntax_bits & RE_LIMITED_OPS) goto normal_char; if (backslash != ((dfa->syntax.syntax_bits & RE_NO_BK_VBAR) == 0)) goto normal_char; dfa->lex.laststart = true; return dfa->lex.lasttok = OR; case '\n': if (dfa->syntax.syntax_bits & RE_LIMITED_OPS || backslash || !(dfa->syntax.syntax_bits & RE_NEWLINE_ALT)) goto normal_char; dfa->lex.laststart = true; return dfa->lex.lasttok = OR; case '(': if (backslash != ((dfa->syntax.syntax_bits & RE_NO_BK_PARENS) == 0)) goto normal_char; dfa->lex.parens++; dfa->lex.laststart = true; return dfa->lex.lasttok = LPAREN; case ')': if (backslash != ((dfa->syntax.syntax_bits & RE_NO_BK_PARENS) == 0)) goto normal_char; if (dfa->lex.parens == 0 && dfa->syntax.syntax_bits & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_char; dfa->lex.parens--; dfa->lex.laststart = false; return dfa->lex.lasttok = RPAREN; case '.': if (backslash) goto normal_char; if (dfa->canychar < 0) { charclass ccl; fillset (&ccl); if (!(dfa->syntax.syntax_bits & RE_DOT_NEWLINE)) clrbit ('\n', &ccl); if (dfa->syntax.syntax_bits & RE_DOT_NOT_NULL) clrbit ('\0', &ccl); if (dfa->localeinfo.multibyte) for (int c2 = 0; c2 < NOTCHAR; c2++) if (dfa->localeinfo.sbctowc[c2] == WEOF) clrbit (c2, &ccl); dfa->canychar = charclass_index (dfa, &ccl); } dfa->lex.laststart = false; return dfa->lex.lasttok = (dfa->localeinfo.multibyte ? ANYCHAR : CSET + dfa->canychar); case 's': case 'S': if (!backslash || (dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) goto normal_char; if (!dfa->localeinfo.multibyte) { charclass ccl; zeroset (&ccl); for (int c2 = 0; c2 < NOTCHAR; ++c2) if (isspace (c2)) setbit (c2, &ccl); if (c == 'S') notset (&ccl); dfa->lex.laststart = false; return dfa->lex.lasttok = CSET + charclass_index (dfa, &ccl); } /* FIXME: see if optimizing this, as is done with ANYCHAR and add_utf8_anychar, makes sense. */ /* \s and \S are documented to be equivalent to [[:space:]] and [^[:space:]] respectively, so tell the lexer to process those strings, each minus its "already processed" '['. */ { struct lexptr ls; push_lex_state (dfa, &ls, &"^[:space:]]"[c == 's']); dfa->lex.lasttok = parse_bracket_exp (dfa); pop_lex_state (dfa, &ls); } dfa->lex.laststart = false; return dfa->lex.lasttok; case 'w': case 'W': if (!backslash || (dfa->syntax.syntax_bits & RE_NO_GNU_OPS)) goto normal_char; if (!dfa->localeinfo.multibyte) { charclass ccl; zeroset (&ccl); for (int c2 = 0; c2 < NOTCHAR; ++c2) if (dfa->syntax.sbit[c2] == CTX_LETTER) setbit (c2, &ccl); if (c == 'W') notset (&ccl); dfa->lex.laststart = false; return dfa->lex.lasttok = CSET + charclass_index (dfa, &ccl); } /* FIXME: see if optimizing this, as is done with ANYCHAR and add_utf8_anychar, makes sense. */ /* \w and \W are documented to be equivalent to [_[:alnum:]] and [^_[:alnum:]] respectively, so tell the lexer to process those strings, each minus its "already processed" '['. */ { struct lexptr ls; push_lex_state (dfa, &ls, &"^_[:alnum:]]"[c == 'w']); dfa->lex.lasttok = parse_bracket_exp (dfa); pop_lex_state (dfa, &ls); } dfa->lex.laststart = false; return dfa->lex.lasttok; case '[': if (backslash) goto normal_char; dfa->lex.laststart = false; return dfa->lex.lasttok = parse_bracket_exp (dfa); default: normal_char: dfa->lex.laststart = false; /* For multibyte character sets, folding is done in atom. Always return WCHAR. */ if (dfa->localeinfo.multibyte) return dfa->lex.lasttok = WCHAR; if (dfa->syntax.case_fold && isalpha (c)) { charclass ccl; zeroset (&ccl); setbit_case_fold_c (c, &ccl); return dfa->lex.lasttok = CSET + charclass_index (dfa, &ccl); } return dfa->lex.lasttok = c; } } /* The above loop should consume at most a backslash and some other character. */ abort (); return END; /* keeps pedantic compilers happy. */ } static void addtok_mb (struct dfa *dfa, token t, char mbprop) { if (dfa->talloc == dfa->tindex) { dfa->tokens = xpalloc (dfa->tokens, &dfa->talloc, 1, -1, sizeof *dfa->tokens); if (dfa->localeinfo.multibyte) dfa->multibyte_prop = xreallocarray (dfa->multibyte_prop, dfa->talloc, sizeof *dfa->multibyte_prop); } if (dfa->localeinfo.multibyte) dfa->multibyte_prop[dfa->tindex] = mbprop; dfa->tokens[dfa->tindex++] = t; switch (t) { case QMARK: case STAR: case PLUS: break; case CAT: case OR: dfa->parse.depth--; break; case EMPTY: dfa->epsilon = true; goto increment_depth; case BACKREF: dfa->fast = false; goto increment_nleaves; case BEGLINE: case ENDLINE: case BEGWORD: case ENDWORD: case LIMWORD: case NOTLIMWORD: dfa->epsilon = true; FALLTHROUGH; default: increment_nleaves: dfa->nleaves++; increment_depth: dfa->parse.depth++; if (dfa->depth < dfa->parse.depth) dfa->depth = dfa->parse.depth; break; } } static void addtok_wc (struct dfa *dfa, wint_t wc); /* Add the given token to the parse tree, maintaining the depth count and updating the maximum depth if necessary. */ static void addtok (struct dfa *dfa, token t) { if (dfa->localeinfo.multibyte && t == MBCSET) { bool need_or = false; /* Extract wide characters into alternations for better performance. This does not require UTF-8. */ for (idx_t i = 0; i < dfa->lex.brack.nchars; i++) { addtok_wc (dfa, dfa->lex.brack.chars[i]); if (need_or) addtok (dfa, OR); need_or = true; } dfa->lex.brack.nchars = 0; /* Wide characters have been handled above, so it is possible that the set is empty now. Do nothing in that case. */ if (dfa->lex.brack.cset != -1) { addtok (dfa, CSET + dfa->lex.brack.cset); if (need_or) addtok (dfa, OR); } } else { addtok_mb (dfa, t, 3); } } /* We treat a multibyte character as a single atom, so that DFA can treat a multibyte character as a single expression. e.g., we construct the following tree from "<mb1><mb2>". <mb1(1st-byte)><mb1(2nd-byte)><CAT><mb1(3rd-byte)><CAT> <mb2(1st-byte)><mb2(2nd-byte)><CAT><mb2(3rd-byte)><CAT><CAT> */ static void addtok_wc (struct dfa *dfa, wint_t wc) { unsigned char buf[MB_LEN_MAX]; mbstate_t s = { 0 }; size_t stored_bytes = wcrtomb ((char *) buf, wc, &s); int buflen; if (stored_bytes != (size_t) -1) buflen = stored_bytes; else { /* This is merely stop-gap. buf[0] is undefined, yet skipping the addtok_mb call altogether can corrupt the heap. */ buflen = 1; buf[0] = 0; } addtok_mb (dfa, buf[0], buflen == 1 ? 3 : 1); for (int i = 1; i < buflen; i++) { addtok_mb (dfa, buf[i], i == buflen - 1 ? 2 : 0); addtok (dfa, CAT); } } static void add_utf8_anychar (struct dfa *dfa) { /* Since the Unicode Standard Version 4.0.0 (2003), a well-formed UTF-8 byte sequence has been defined as follows: ([\x00-\x7f] |[\xc2-\xdf][\x80-\xbf] |[\xe0][\xa0-\xbf][\x80-\xbf] |[\xe1-\xec\xee-\xef][\x80-\xbf][\x80-\xbf] |[\xed][\x80-\x9f][\x80-\xbf] |[\xf0][\x90-\xbf][\x80-\xbf][\x80-\xbf]) |[\xf1-\xf3][\x80-\xbf][\x80-\xbf][\x80-\xbf] |[\xf4][\x80-\x8f][\x80-\xbf][\x80-\xbf]) which I'll write more concisely "A|BC|DEC|FCC|GHC|IJCC|KCCC|LMCC", where A = [\x00-\x7f], B = [\xc2-\xdf], C = [\x80-\xbf], D = [\xe0], E = [\xa0-\xbf], F = [\xe1-\xec\xee-\xef], G = [\xed], H = [\x80-\x9f], I = [\xf0], J = [\x90-\xbf], K = [\xf1-\xf3], L = [\xf4], M = [\x80-\x8f]. This can be refactored to "A|(B|DE|GH|(F|IJ|LM|KC)C)C". */ /* Mnemonics for classes containing two or more bytes. */ enum { A, B, C, E, F, H, J, K, M }; /* Mnemonics for single-byte tokens. */ enum { D_token = 0xe0, G_token = 0xed, I_token = 0xf0, L_token = 0xf4 }; static charclass const utf8_classes[] = { /* A. 00-7f: 1-byte sequence. */ CHARCLASS_INIT (0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0, 0, 0, 0), /* B. c2-df: 1st byte of a 2-byte sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0, 0, 0xfffffffc, 0), /* C. 80-bf: non-leading bytes. */ CHARCLASS_INIT (0, 0, 0, 0, 0xffffffff, 0xffffffff, 0, 0), /* D. e0 (just a token). */ /* E. a0-bf: 2nd byte of a "DEC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0, 0xffffffff, 0, 0), /* F. e1-ec + ee-ef: 1st byte of an "FCC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0, 0, 0, 0xdffe), /* G. ed (just a token). */ /* H. 80-9f: 2nd byte of a "GHC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0xffff, 0, 0, 0), /* I. f0 (just a token). */ /* J. 90-bf: 2nd byte of an "IJCC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0xffff0000, 0xffffffff, 0, 0), /* K. f1-f3: 1st byte of a "KCCC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0, 0, 0, 0xe0000), /* L. f4 (just a token). */ /* M. 80-8f: 2nd byte of a "LMCC" sequence. */ CHARCLASS_INIT (0, 0, 0, 0, 0xff, 0, 0, 0), }; /* Define the character classes that are needed below. */ if (dfa->utf8_anychar_classes[0] == 0) { charclass c = utf8_classes[0]; if (! (dfa->syntax.syntax_bits & RE_DOT_NEWLINE)) clrbit ('\n', &c); if (dfa->syntax.syntax_bits & RE_DOT_NOT_NULL) clrbit ('\0', &c); dfa->utf8_anychar_classes[0] = CSET + charclass_index (dfa, &c); for (int i = 1; i < sizeof utf8_classes / sizeof *utf8_classes; i++) dfa->utf8_anychar_classes[i] = CSET + charclass_index (dfa, &utf8_classes[i]); } /* Implement the "A|(B|DE|GH|(F|IJ|LM|KC)C)C" pattern mentioned above. The token buffer is in reverse Polish order, so we get "A B D E CAT OR G H CAT OR F I J CAT OR L M CAT OR K C CAT OR C CAT OR C CAT OR". */ addtok (dfa, dfa->utf8_anychar_classes[A]); addtok (dfa, dfa->utf8_anychar_classes[B]); addtok (dfa, D_token); addtok (dfa, dfa->utf8_anychar_classes[E]); addtok (dfa, CAT); addtok (dfa, OR); addtok (dfa, G_token); addtok (dfa, dfa->utf8_anychar_classes[H]); addtok (dfa, CAT); addtok (dfa, OR); addtok (dfa, dfa->utf8_anychar_classes[F]); addtok (dfa, I_token); addtok (dfa, dfa->utf8_anychar_classes[J]); addtok (dfa, CAT); addtok (dfa, OR); addtok (dfa, L_token); addtok (dfa, dfa->utf8_anychar_classes[M]); addtok (dfa, CAT); addtok (dfa, OR); addtok (dfa, dfa->utf8_anychar_classes[K]); for (int i = 0; i < 3; i++) { addtok (dfa, dfa->utf8_anychar_classes[C]); addtok (dfa, CAT); addtok (dfa, OR); } } /* The grammar understood by the parser is as follows. regexp: regexp OR branch branch branch: branch closure closure closure: closure QMARK closure STAR closure PLUS closure REPMN atom atom: <normal character> <multibyte character> ANYCHAR MBCSET CSET BACKREF BEGLINE ENDLINE BEGWORD ENDWORD LIMWORD NOTLIMWORD LPAREN regexp RPAREN <empty> The parser builds a parse tree in postfix form in an array of tokens. */ static void atom (struct dfa *dfa) { if ((0 <= dfa->parse.tok && dfa->parse.tok < NOTCHAR) || dfa->parse.tok >= CSET || dfa->parse.tok == BEG || dfa->parse.tok == BACKREF || dfa->parse.tok == BEGLINE || dfa->parse.tok == ENDLINE || dfa->parse.tok == BEGWORD || dfa->parse.tok == ENDWORD || dfa->parse.tok == LIMWORD || dfa->parse.tok == NOTLIMWORD || dfa->parse.tok == ANYCHAR || dfa->parse.tok == MBCSET) { if (dfa->parse.tok == ANYCHAR && dfa->localeinfo.using_utf8) { /* For UTF-8 expand the period to a series of CSETs that define a valid UTF-8 character. This avoids using the slow multibyte path. I'm pretty sure it would be both profitable and correct to do it for any encoding; however, the optimization must be done manually as it is done above in add_utf8_anychar. So, let's start with UTF-8: it is the most used, and the structure of the encoding makes the correctness more obvious. */ add_utf8_anychar (dfa); } else addtok (dfa, dfa->parse.tok); dfa->parse.tok = lex (dfa); } else if (dfa->parse.tok == WCHAR) { if (dfa->lex.wctok == WEOF) addtok (dfa, BACKREF); else { addtok_wc (dfa, dfa->lex.wctok); if (dfa->syntax.case_fold) { wchar_t folded[CASE_FOLDED_BUFSIZE]; int n = case_folded_counterparts (dfa->lex.wctok, folded); for (int i = 0; i < n; i++) { addtok_wc (dfa, folded[i]); addtok (dfa, OR); } } } dfa->parse.tok = lex (dfa); } else if (dfa->parse.tok == LPAREN) { dfa->parse.tok = lex (dfa); regexp (dfa); if (dfa->parse.tok != RPAREN) dfaerror (_("unbalanced (")); dfa->parse.tok = lex (dfa); } else addtok (dfa, EMPTY); } /* Return the number of tokens in the given subexpression. */ static idx_t _GL_ATTRIBUTE_PURE nsubtoks (struct dfa const *dfa, idx_t tindex) { switch (dfa->tokens[tindex - 1]) { default: return 1; case QMARK: case STAR: case PLUS: return 1 + nsubtoks (dfa, tindex - 1); case CAT: case OR: { idx_t ntoks1 = nsubtoks (dfa, tindex - 1); return 1 + ntoks1 + nsubtoks (dfa, tindex - 1 - ntoks1); } } } /* Copy the given subexpression to the top of the tree. */ static void copytoks (struct dfa *dfa, idx_t tindex, idx_t ntokens) { if (dfa->localeinfo.multibyte) for (idx_t i = 0; i < ntokens; i++) addtok_mb (dfa, dfa->tokens[tindex + i], dfa->multibyte_prop[tindex + i]); else for (idx_t i = 0; i < ntokens; i++) addtok_mb (dfa, dfa->tokens[tindex + i], 3); } static void closure (struct dfa *dfa) { atom (dfa); while (dfa->parse.tok == QMARK || dfa->parse.tok == STAR || dfa->parse.tok == PLUS || dfa->parse.tok == REPMN) if (dfa->parse.tok == REPMN && (dfa->lex.minrep || dfa->lex.maxrep)) { idx_t ntokens = nsubtoks (dfa, dfa->tindex); idx_t tindex = dfa->tindex - ntokens; if (dfa->lex.maxrep < 0) addtok (dfa, PLUS); if (dfa->lex.minrep == 0) addtok (dfa, QMARK); int i; for (i = 1; i < dfa->lex.minrep; i++) { copytoks (dfa, tindex, ntokens); addtok (dfa, CAT); } for (; i < dfa->lex.maxrep; i++) { copytoks (dfa, tindex, ntokens); addtok (dfa, QMARK); addtok (dfa, CAT); } dfa->parse.tok = lex (dfa); } else if (dfa->parse.tok == REPMN) { dfa->tindex -= nsubtoks (dfa, dfa->tindex); dfa->parse.tok = lex (dfa); closure (dfa); } else { addtok (dfa, dfa->parse.tok); dfa->parse.tok = lex (dfa); } } static void branch (struct dfa* dfa) { closure (dfa); while (dfa->parse.tok != RPAREN && dfa->parse.tok != OR && dfa->parse.tok >= 0) { closure (dfa); addtok (dfa, CAT); } } static void regexp (struct dfa *dfa) { branch (dfa); while (dfa->parse.tok == OR) { dfa->parse.tok = lex (dfa); branch (dfa); addtok (dfa, OR); } } /* Parse a string S of length LEN into D. S can include NUL characters. This is the main entry point for the parser. */ void dfaparse (char const *s, idx_t len, struct dfa *d) { d->lex.ptr = s; d->lex.left = len; d->lex.lasttok = END; d->lex.laststart = true; if (!d->syntax.syntax_bits_set) dfaerror (_("no syntax specified")); if (!d->nregexps) addtok (d, BEG); d->parse.tok = lex (d); d->parse.depth = d->depth; regexp (d); if (d->parse.tok != END) dfaerror (_("unbalanced )")); addtok (d, END - d->nregexps); addtok (d, CAT); if (d->nregexps) addtok (d, OR); ++d->nregexps; } /* Some primitives for operating on sets of positions. */ /* Copy one set to another. */ static void copy (position_set const *src, position_set *dst) { if (dst->alloc < src->nelem) { free (dst->elems); dst->elems = xpalloc (NULL, &dst->alloc, src->nelem - dst->alloc, -1, sizeof *dst->elems); } dst->nelem = src->nelem; if (src->nelem != 0) memcpy (dst->elems, src->elems, src->nelem * sizeof *dst->elems); } static void alloc_position_set (position_set *s, idx_t size) { s->elems = xnmalloc (size, sizeof *s->elems); s->alloc = size; s->nelem = 0; } /* Insert position P in set S. S is maintained in sorted order on decreasing index. If there is already an entry in S with P.index then merge (logically-OR) P's constraints into the one in S. S->elems must point to an array large enough to hold the resulting set. */ static void insert (position p, position_set *s) { idx_t count = s->nelem; idx_t lo = 0, hi = count; while (lo < hi) { idx_t mid = (lo + hi) >> 1; if (s->elems[mid].index < p.index) lo = mid + 1; else if (s->elems[mid].index == p.index) { s->elems[mid].constraint |= p.constraint; return; } else hi = mid; } s->elems = maybe_realloc (s->elems, count, &s->alloc, -1, sizeof *s->elems); for (idx_t i = count; i > lo; i--) s->elems[i] = s->elems[i - 1]; s->elems[lo] = p; ++s->nelem; } static void append (position p, position_set *s) { idx_t count = s->nelem; s->elems = maybe_realloc (s->elems, count, &s->alloc, -1, sizeof *s->elems); s->elems[s->nelem++] = p; } /* Merge S1 and S2 (with the additional constraint C2) into M. The result is as if the positions of S1, and of S2 with the additional constraint C2, were inserted into an initially empty set. */ static void merge_constrained (position_set const *s1, position_set const *s2, unsigned int c2, position_set *m) { idx_t i = 0, j = 0; if (m->alloc - s1->nelem < s2->nelem) { free (m->elems); m->alloc = s1->nelem; m->elems = xpalloc (NULL, &m->alloc, s2->nelem, -1, sizeof *m->elems); } m->nelem = 0; while (i < s1->nelem || j < s2->nelem) if (! (j < s2->nelem) || (i < s1->nelem && s1->elems[i].index <= s2->elems[j].index)) { unsigned int c = ((i < s1->nelem && j < s2->nelem && s1->elems[i].index == s2->elems[j].index) ? s2->elems[j++].constraint & c2 : 0); m->elems[m->nelem].index = s1->elems[i].index; m->elems[m->nelem++].constraint = s1->elems[i++].constraint | c; } else { if (s2->elems[j].constraint & c2) { m->elems[m->nelem].index = s2->elems[j].index; m->elems[m->nelem++].constraint = s2->elems[j].constraint & c2; } j++; } } /* Merge two sets of positions into a third. The result is exactly as if the positions of both sets were inserted into an initially empty set. */ static void merge (position_set const *s1, position_set const *s2, position_set *m) { merge_constrained (s1, s2, -1, m); } /* Merge into DST all the elements of SRC, possibly destroying the contents of the temporary M. */ static void merge2 (position_set *dst, position_set const *src, position_set *m) { if (src->nelem < 4) { for (idx_t i = 0; i < src->nelem; i++) insert (src->elems[i], dst); } else { merge (src, dst, m); copy (m, dst); } } /* Delete a position from a set. Return the nonzero constraint of the deleted position, or zero if there was no such position. */ static unsigned int delete (idx_t del, position_set *s) { idx_t count = s->nelem; idx_t lo = 0, hi = count; while (lo < hi) { idx_t mid = (lo + hi) >> 1; if (s->elems[mid].index < del) lo = mid + 1; else if (s->elems[mid].index == del) { unsigned int c = s->elems[mid].constraint; idx_t i; for (i = mid; i + 1 < count; i++) s->elems[i] = s->elems[i + 1]; s->nelem = i; return c; } else hi = mid; } return 0; } /* Replace a position with the followed set. */ static void replace (position_set *dst, idx_t del, position_set *add, unsigned int constraint, position_set *tmp) { unsigned int c = delete (del, dst) & constraint; if (c) { copy (dst, tmp); merge_constrained (tmp, add, c, dst); } } /* Find the index of the state corresponding to the given position set with the given preceding context, or create a new state if there is no such state. Context tells whether we got here on a newline or letter. */ static state_num state_index (struct dfa *d, position_set const *s, int context) { size_t hash = 0; int constraint = 0; state_num i; for (i = 0; i < s->nelem; ++i) { idx_t ind = s->elems[i].index; hash ^= ind + s->elems[i].constraint; } /* Try to find a state that exactly matches the proposed one. */ for (i = 0; i < d->sindex; ++i) { if (hash != d->states[i].hash || s->nelem != d->states[i].elems.nelem || context != d->states[i].context) continue; state_num j; for (j = 0; j < s->nelem; ++j) if (s->elems[j].constraint != d->states[i].elems.elems[j].constraint || s->elems[j].index != d->states[i].elems.elems[j].index) break; if (j == s->nelem) return i; } #ifdef DEBUG fprintf (stderr, "new state %td\n nextpos:", i); for (state_num j = 0; j < s->nelem; j++) { fprintf (stderr, " %td:", s->elems[j].index); prtok (d->tokens[s->elems[j].index]); } fprintf (stderr, "\n context:"); if (context ^ CTX_ANY) { if (context & CTX_NONE) fprintf (stderr, " CTX_NONE"); if (context & CTX_LETTER) fprintf (stderr, " CTX_LETTER"); if (context & CTX_NEWLINE) fprintf (stderr, " CTX_NEWLINE"); } else fprintf (stderr, " CTX_ANY"); fprintf (stderr, "\n"); #endif for (state_num j = 0; j < s->nelem; j++) { int c = d->constraints[s->elems[j].index]; if (c != 0) { if (succeeds_in_context (c, context, CTX_ANY)) constraint |= c; } else if (d->tokens[s->elems[j].index] == BACKREF) constraint = NO_CONSTRAINT; } /* Create a new state. */ d->states = maybe_realloc (d->states, d->sindex, &d->salloc, -1, sizeof *d->states); d->states[i].hash = hash; alloc_position_set (&d->states[i].elems, s->nelem); copy (s, &d->states[i].elems); d->states[i].context = context; d->states[i].constraint = constraint; d->states[i].mbps.nelem = 0; d->states[i].mbps.elems = NULL; d->states[i].mb_trindex = -1; ++d->sindex; return i; } /* Find the epsilon closure of D's set of positions. If any position of the set contains a symbol that matches the empty string in some context, replace that position with the elements of its follow labeled with an appropriate constraint. Repeat exhaustively until no funny positions are left. S->elems must be large enough to hold the result. BACKWARD is D's backward set; use and update it too. */ static void epsclosure (struct dfa const *d, position_set *backward) { position_set tmp; alloc_position_set (&tmp, d->nleaves); for (idx_t i = 0; i < d->tindex; i++) if (0 < d->follows[i].nelem) { unsigned int constraint; switch (d->tokens[i]) { default: continue; case BEGLINE: constraint = BEGLINE_CONSTRAINT; break; case ENDLINE: constraint = ENDLINE_CONSTRAINT; break; case BEGWORD: constraint = BEGWORD_CONSTRAINT; break; case ENDWORD: constraint = ENDWORD_CONSTRAINT; break; case LIMWORD: constraint = LIMWORD_CONSTRAINT; break; case NOTLIMWORD: constraint = NOTLIMWORD_CONSTRAINT; break; case EMPTY: constraint = NO_CONSTRAINT; break; } delete (i, &d->follows[i]); for (idx_t j = 0; j < backward[i].nelem; j++) replace (&d->follows[backward[i].elems[j].index], i, &d->follows[i], constraint, &tmp); for (idx_t j = 0; j < d->follows[i].nelem; j++) replace (&backward[d->follows[i].elems[j].index], i, &backward[i], NO_CONSTRAINT, &tmp); } free (tmp.elems); } /* Returns the set of contexts for which there is at least one character included in C. */ static int charclass_context (struct dfa const *dfa, charclass const *c) { int context = 0; for (int j = 0; j < CHARCLASS_WORDS; j++) { if (c->w[j] & dfa->syntax.newline.w[j]) context |= CTX_NEWLINE; if (c->w[j] & dfa->syntax.letters.w[j]) context |= CTX_LETTER; if (c->w[j] & ~(dfa->syntax.letters.w[j] | dfa->syntax.newline.w[j])) context |= CTX_NONE; } return context; } /* Returns the contexts on which the position set S depends. Each context in the set of returned contexts (let's call it SC) may have a different follow set than other contexts in SC, and also different from the follow set of the complement set (sc ^ CTX_ANY). However, all contexts in the complement set will have the same follow set. */ static int _GL_ATTRIBUTE_PURE state_separate_contexts (struct dfa *d, position_set const *s) { int separate_contexts = 0; for (idx_t j = 0; j < s->nelem; j++) separate_contexts |= d->separates[s->elems[j].index]; return separate_contexts; } enum { /* Single token is repeated. It is distinguished from non-repeated. */ OPT_REPEAT = (1 << 0), /* Multiple tokens are repeated. This flag is on at head of tokens. The node is not merged. */ OPT_LPAREN = (1 << 1), /* Multiple branches are joined. The node is not merged. */ OPT_RPAREN = (1 << 2), /* The node is walked. If the node is found in walking again, OPT_RPAREN flag is turned on. */ OPT_WALKED = (1 << 3), /* The node is queued. The node is not queued again. */ OPT_QUEUED = (1 << 4) }; static void merge_nfa_state (struct dfa *d, idx_t tindex, char *flags, position_set *merged) { position_set *follows = d->follows; idx_t nelem = 0; for (idx_t i = 0; i < follows[tindex].nelem; i++) { idx_t sindex = follows[tindex].elems[i].index; /* Skip the node as pruned in future. */ unsigned int iconstraint = follows[tindex].elems[i].constraint; if (iconstraint == 0) continue; if (d->tokens[follows[tindex].elems[i].index] <= END) { d->constraints[tindex] |= follows[tindex].elems[i].constraint; continue; } if (sindex != tindex && !(flags[sindex] & (OPT_LPAREN | OPT_RPAREN))) { idx_t j; for (j = 0; j < nelem; j++) { idx_t dindex = follows[tindex].elems[j].index; if (dindex == tindex) continue; if (follows[tindex].elems[j].constraint != iconstraint) continue; if (flags[dindex] & (OPT_LPAREN | OPT_RPAREN)) continue; if (d->tokens[sindex] != d->tokens[dindex]) continue; if ((flags[sindex] ^ flags[dindex]) & OPT_REPEAT) continue; if (flags[sindex] & OPT_REPEAT) delete (sindex, &follows[sindex]); merge2 (&follows[dindex], &follows[sindex], merged); break; } if (j < nelem) continue; } follows[tindex].elems[nelem++] = follows[tindex].elems[i]; flags[sindex] |= OPT_QUEUED; } follows[tindex].nelem = nelem; } static int compare (const void *a, const void *b) { position const *p = a, *q = b; return (p->index > q->index) - (p->index < q->index); } static void reorder_tokens (struct dfa *d) { idx_t nleaves = 0; ptrdiff_t *map = xnmalloc (d->tindex, sizeof *map); map[0] = nleaves++; for (idx_t i = 1; i < d->tindex; i++) map[i] = -1; token *tokens = xnmalloc (d->nleaves, sizeof *tokens); position_set *follows = xnmalloc (d->nleaves, sizeof *follows); int *constraints = xnmalloc (d->nleaves, sizeof *constraints); char *multibyte_prop = (d->localeinfo.multibyte ? xnmalloc (d->nleaves, sizeof *multibyte_prop) : NULL); for (idx_t i = 0; i < d->tindex; i++) { if (map[i] < 0) { free (d->follows[i].elems); d->follows[i].elems = NULL; d->follows[i].nelem = 0; continue; } tokens[map[i]] = d->tokens[i]; follows[map[i]] = d->follows[i]; constraints[map[i]] = d->constraints[i]; if (multibyte_prop != NULL) multibyte_prop[map[i]] = d->multibyte_prop[i]; for (idx_t j = 0; j < d->follows[i].nelem; j++) { if (map[d->follows[i].elems[j].index] == -1) map[d->follows[i].elems[j].index] = nleaves++; d->follows[i].elems[j].index = map[d->follows[i].elems[j].index]; } qsort (d->follows[i].elems, d->follows[i].nelem, sizeof *d->follows[i].elems, compare); } for (idx_t i = 0; i < nleaves; i++) { d->tokens[i] = tokens[i]; d->follows[i] = follows[i]; d->constraints[i] = constraints[i]; if (multibyte_prop != NULL) d->multibyte_prop[i] = multibyte_prop[i]; } d->tindex = d->nleaves = nleaves; free (tokens); free (follows); free (constraints); free (multibyte_prop); free (map); } static void dfaoptimize (struct dfa *d) { char *flags = xizalloc (d->tindex); for (idx_t i = 0; i < d->tindex; i++) { for (idx_t j = 0; j < d->follows[i].nelem; j++) { if (d->follows[i].elems[j].index == i) flags[d->follows[i].elems[j].index] |= OPT_REPEAT; else if (d->follows[i].elems[j].index < i) flags[d->follows[i].elems[j].index] |= OPT_LPAREN; else if (flags[d->follows[i].elems[j].index] &= OPT_WALKED) flags[d->follows[i].elems[j].index] |= OPT_RPAREN; else flags[d->follows[i].elems[j].index] |= OPT_WALKED; } } flags[0] |= OPT_QUEUED; position_set merged0; position_set *merged = &merged0; alloc_position_set (merged, d->nleaves); d->constraints = xicalloc (d->tindex, sizeof *d->constraints); for (idx_t i = 0; i < d->tindex; i++) if (flags[i] & OPT_QUEUED) merge_nfa_state (d, i, flags, merged); reorder_tokens (d); free (merged->elems); free (flags); } /* Perform bottom-up analysis on the parse tree, computing various functions. Note that at this point, we're pretending constructs like \< are real characters rather than constraints on what can follow them. Nullable: A node is nullable if it is at the root of a regexp that can match the empty string. * EMPTY leaves are nullable. * No other leaf is nullable. * A QMARK or STAR node is nullable. * A PLUS node is nullable if its argument is nullable. * A CAT node is nullable if both its arguments are nullable. * An OR node is nullable if either argument is nullable. Firstpos: The firstpos of a node is the set of positions (nonempty leaves) that could correspond to the first character of a string matching the regexp rooted at the given node. * EMPTY leaves have empty firstpos. * The firstpos of a nonempty leaf is that leaf itself. * The firstpos of a QMARK, STAR, or PLUS node is the firstpos of its argument. * The firstpos of a CAT node is the firstpos of the left argument, union the firstpos of the right if the left argument is nullable. * The firstpos of an OR node is the union of firstpos of each argument. Lastpos: The lastpos of a node is the set of positions that could correspond to the last character of a string matching the regexp at the given node. * EMPTY leaves have empty lastpos. * The lastpos of a nonempty leaf is that leaf itself. * The lastpos of a QMARK, STAR, or PLUS node is the lastpos of its argument. * The lastpos of a CAT node is the lastpos of its right argument, union the lastpos of the left if the right argument is nullable. * The lastpos of an OR node is the union of the lastpos of each argument. Follow: The follow of a position is the set of positions that could correspond to the character following a character matching the node in a string matching the regexp. At this point we consider special symbols that match the empty string in some context to be just normal characters. Later, if we find that a special symbol is in a follow set, we will replace it with the elements of its follow, labeled with an appropriate constraint. * Every node in the firstpos of the argument of a STAR or PLUS node is in the follow of every node in the lastpos. * Every node in the firstpos of the second argument of a CAT node is in the follow of every node in the lastpos of the first argument. Because of the postfix representation of the parse tree, the depth-first analysis is conveniently done by a linear scan with the aid of a stack. Sets are stored as arrays of the elements, obeying a stack-like allocation scheme; the number of elements in each set deeper in the stack can be used to determine the address of a particular set's array. */ static void dfaanalyze (struct dfa *d, bool searchflag) { /* Array allocated to hold position sets. */ position *posalloc = xnmalloc (d->nleaves, 2 * sizeof *posalloc); /* Firstpos and lastpos elements. */ position *firstpos = posalloc; position *lastpos = firstpos + d->nleaves; position pos; position_set tmp; /* Stack for element counts and nullable flags. */ struct { /* Whether the entry is nullable. */ bool nullable; /* Counts of firstpos and lastpos sets. */ idx_t nfirstpos; idx_t nlastpos; } *stkalloc = xnmalloc (d->depth, sizeof *stkalloc), *stk = stkalloc; position_set merged; /* Result of merging sets. */ addtok (d, CAT); idx_t tindex = d->tindex; #ifdef DEBUG fprintf (stderr, "dfaanalyze:\n"); for (idx_t i = 0; i < tindex; i++) { fprintf (stderr, " %td:", i); prtok (d->tokens[i]); } putc ('\n', stderr); #endif d->searchflag = searchflag; alloc_position_set (&merged, d->nleaves); d->follows = xicalloc (tindex, sizeof *d->follows); position_set *backward = d->epsilon ? xicalloc (tindex, sizeof *backward) : NULL; for (idx_t i = 0; i < tindex; i++) { switch (d->tokens[i]) { case EMPTY: /* The empty set is nullable. */ stk->nullable = true; /* The firstpos and lastpos of the empty leaf are both empty. */ stk->nfirstpos = stk->nlastpos = 0; stk++; break; case STAR: case PLUS: /* Every element in the lastpos of the argument is in the backward set of every element in the firstpos. */ if (d->epsilon) { tmp.elems = lastpos - stk[-1].nlastpos; tmp.nelem = stk[-1].nlastpos; for (position *p = firstpos - stk[-1].nfirstpos; p < firstpos; p++) merge2 (&backward[p->index], &tmp, &merged); } /* Every element in the firstpos of the argument is in the follow of every element in the lastpos. */ { tmp.elems = firstpos - stk[-1].nfirstpos; tmp.nelem = stk[-1].nfirstpos; for (position *p = lastpos - stk[-1].nlastpos; p < lastpos; p++) merge2 (&d->follows[p->index], &tmp, &merged); } FALLTHROUGH; case QMARK: /* A QMARK or STAR node is automatically nullable. */ if (d->tokens[i] != PLUS) stk[-1].nullable = true; break; case CAT: /* Every element in the lastpos of the first argument is in the backward set of every element in the firstpos of the second argument. */ if (backward) { tmp.nelem = stk[-2].nlastpos; tmp.elems = lastpos - stk[-1].nlastpos - stk[-2].nlastpos; for (position *p = firstpos - stk[-1].nfirstpos; p < firstpos; p++) merge2 (&backward[p->index], &tmp, &merged); } /* Every element in the firstpos of the second argument is in the follow of every element in the lastpos of the first argument. */ { tmp.nelem = stk[-1].nfirstpos; tmp.elems = firstpos - stk[-1].nfirstpos; for (position *plim = lastpos - stk[-1].nlastpos, *p = plim - stk[-2].nlastpos; p < plim; p++) merge2 (&d->follows[p->index], &tmp, &merged); } /* The firstpos of a CAT node is the firstpos of the first argument, union that of the second argument if the first is nullable. */ if (stk[-2].nullable) stk[-2].nfirstpos += stk[-1].nfirstpos; else firstpos -= stk[-1].nfirstpos; /* The lastpos of a CAT node is the lastpos of the second argument, union that of the first argument if the second is nullable. */ if (stk[-1].nullable) stk[-2].nlastpos += stk[-1].nlastpos; else { position *p = lastpos - stk[-1].nlastpos - stk[-2].nlastpos; for (idx_t j = 0; j < stk[-1].nlastpos; j++) p[j] = p[j + stk[-2].nlastpos]; lastpos -= stk[-2].nlastpos; stk[-2].nlastpos = stk[-1].nlastpos; } /* A CAT node is nullable if both arguments are nullable. */ stk[-2].nullable &= stk[-1].nullable; stk--; break; case OR: /* The firstpos is the union of the firstpos of each argument. */ stk[-2].nfirstpos += stk[-1].nfirstpos; /* The lastpos is the union of the lastpos of each argument. */ stk[-2].nlastpos += stk[-1].nlastpos; /* An OR node is nullable if either argument is nullable. */ stk[-2].nullable |= stk[-1].nullable; stk--; break; default: /* Anything else is a nonempty position. (Note that special constructs like \< are treated as nonempty strings here; an "epsilon closure" effectively makes them nullable later. Backreferences have to get a real position so we can detect transitions on them later. But they are nullable. */ stk->nullable = d->tokens[i] == BACKREF; /* This position is in its own firstpos and lastpos. */ stk->nfirstpos = stk->nlastpos = 1; stk++; firstpos->index = lastpos->index = i; firstpos->constraint = lastpos->constraint = NO_CONSTRAINT; firstpos++, lastpos++; break; } #ifdef DEBUG /* ... balance the above nonsyntactic #ifdef goo... */ fprintf (stderr, "node %td:", i); prtok (d->tokens[i]); putc ('\n', stderr); fprintf (stderr, stk[-1].nullable ? " nullable: yes\n" : " nullable: no\n"); fprintf (stderr, " firstpos:"); for (idx_t j = 0; j < stk[-1].nfirstpos; j++) { fprintf (stderr, " %td:", firstpos[j - stk[-1].nfirstpos].index); prtok (d->tokens[firstpos[j - stk[-1].nfirstpos].index]); } fprintf (stderr, "\n lastpos:"); for (idx_t j = 0; j < stk[-1].nlastpos; j++) { fprintf (stderr, " %td:", lastpos[j - stk[-1].nlastpos].index); prtok (d->tokens[lastpos[j - stk[-1].nlastpos].index]); } putc ('\n', stderr); #endif } if (backward) { /* For each follow set that is the follow set of a real position, replace it with its epsilon closure. */ epsclosure (d, backward); for (idx_t i = 0; i < tindex; i++) free (backward[i].elems); free (backward); } dfaoptimize (d); #ifdef DEBUG for (idx_t i = 0; i < tindex; i++) if (d->tokens[i] == BEG || d->tokens[i] < NOTCHAR || d->tokens[i] == BACKREF || d->tokens[i] == ANYCHAR || d->tokens[i] == MBCSET || d->tokens[i] >= CSET) { fprintf (stderr, "follows(%td:", i); prtok (d->tokens[i]); fprintf (stderr, "):"); for (idx_t j = 0; j < d->follows[i].nelem; j++) { fprintf (stderr, " %td:", d->follows[i].elems[j].index); prtok (d->tokens[d->follows[i].elems[j].index]); } putc ('\n', stderr); } #endif pos.index = 0; pos.constraint = NO_CONSTRAINT; alloc_position_set (&tmp, 1); append (pos, &tmp); d->separates = xicalloc (tindex, sizeof *d->separates); for (idx_t i = 0; i < tindex; i++) { if (prev_newline_dependent (d->constraints[i])) d->separates[i] |= CTX_NEWLINE; if (prev_letter_dependent (d->constraints[i])) d->separates[i] |= CTX_LETTER; for (idx_t j = 0; j < d->follows[i].nelem; j++) { if (prev_newline_dependent (d->follows[i].elems[j].constraint)) d->separates[i] |= CTX_NEWLINE; if (prev_letter_dependent (d->follows[i].elems[j].constraint)) d->separates[i] |= CTX_LETTER; } } /* Context wanted by some position. */ int separate_contexts = state_separate_contexts (d, &tmp); /* Build the initial state. */ if (separate_contexts & CTX_NEWLINE) state_index (d, &tmp, CTX_NEWLINE); d->initstate_notbol = d->min_trcount = state_index (d, &tmp, separate_contexts ^ CTX_ANY); if (separate_contexts & CTX_LETTER) d->min_trcount = state_index (d, &tmp, CTX_LETTER); d->min_trcount++; d->trcount = 0; free (posalloc); free (stkalloc); free (merged.elems); free (tmp.elems); } /* Make sure D's state arrays are large enough to hold NEW_STATE. */ static void realloc_trans_if_necessary (struct dfa *d) { state_num oldalloc = d->tralloc; if (oldalloc < d->sindex) { state_num **realtrans = d->trans ? d->trans - 2 : NULL; idx_t newalloc1 = realtrans ? d->tralloc + 2 : 0; realtrans = xpalloc (realtrans, &newalloc1, d->sindex - oldalloc, -1, sizeof *realtrans); realtrans[0] = realtrans[1] = NULL; d->trans = realtrans + 2; idx_t newalloc = d->tralloc = newalloc1 - 2; d->fails = xreallocarray (d->fails, newalloc, sizeof *d->fails); d->success = xreallocarray (d->success, newalloc, sizeof *d->success); d->newlines = xreallocarray (d->newlines, newalloc, sizeof *d->newlines); if (d->localeinfo.multibyte) { realtrans = d->mb_trans ? d->mb_trans - 2 : NULL; realtrans = xreallocarray (realtrans, newalloc1, sizeof *realtrans); if (oldalloc == 0) realtrans[0] = realtrans[1] = NULL; d->mb_trans = realtrans + 2; } for (; oldalloc < newalloc; oldalloc++) { d->trans[oldalloc] = NULL; d->fails[oldalloc] = NULL; if (d->localeinfo.multibyte) d->mb_trans[oldalloc] = NULL; } } } /* Calculate the transition table for a new state derived from state s for a compiled dfa d after input character uc, and return the new state number. Do not worry about all possible input characters; calculate just the group of positions that match uc. Label it with the set of characters that every position in the group matches (taking into account, if necessary, preceding context information of s). Then find the union of these positions' follows, i.e., the set of positions of the new state. For each character in the group's label, set the transition on this character to be to a state corresponding to the set's positions, and its associated backward context information, if necessary. When building a searching matcher, include the positions of state 0 in every state. The group is constructed by building an equivalence-class partition of the positions of s. For each position, find the set of characters C that it matches. Eliminate any characters from C that fail on grounds of backward context. Check whether the group's label L has nonempty intersection with C. If L - C is nonempty, create a new group labeled L - C and having the same positions as the current group, and set L to the intersection of L and C. Insert the position in the group, set C = C - L, and resume scanning. If after comparing with every group there are characters remaining in C, create a new group labeled with the characters of C and insert this position in that group. */ static state_num build_state (state_num s, struct dfa *d, unsigned char uc) { position_set follows; /* Union of the follows for each position of the current state. */ position_set group; /* Positions that match the input char. */ position_set tmp; /* Temporary space for merging sets. */ state_num state; /* New state. */ state_num state_newline; /* New state on a newline transition. */ state_num state_letter; /* New state on a letter transition. */ #ifdef DEBUG fprintf (stderr, "build state %td\n", s); #endif /* A pointer to the new transition table, and the table itself. */ state_num **ptrans = (accepting (s, d) ? d->fails : d->trans) + s; state_num *trans = *ptrans; if (!trans) { /* MAX_TRCOUNT is an arbitrary upper limit on the number of transition tables that can exist at once, other than for initial states. Often-used transition tables are quickly rebuilt, whereas rarely-used ones are cleared away. */ if (MAX_TRCOUNT <= d->trcount) { for (state_num i = d->min_trcount; i < d->tralloc; i++) { free (d->trans[i]); free (d->fails[i]); d->trans[i] = d->fails[i] = NULL; } d->trcount = 0; } d->trcount++; *ptrans = trans = xmalloc (NOTCHAR * sizeof *trans); /* Fill transition table with a default value which means that the transited state has not been calculated yet. */ for (int i = 0; i < NOTCHAR; i++) trans[i] = -2; } /* Set up the success bits for this state. */ d->success[s] = 0; if (accepts_in_context (d->states[s].context, CTX_NEWLINE, s, d)) d->success[s] |= CTX_NEWLINE; if (accepts_in_context (d->states[s].context, CTX_LETTER, s, d)) d->success[s] |= CTX_LETTER; if (accepts_in_context (d->states[s].context, CTX_NONE, s, d)) d->success[s] |= CTX_NONE; alloc_position_set (&follows, d->nleaves); /* Find the union of the follows of the positions of the group. This is a hideously inefficient loop. Fix it someday. */ for (idx_t j = 0; j < d->states[s].elems.nelem; j++) for (idx_t k = 0; k < d->follows[d->states[s].elems.elems[j].index].nelem; ++k) insert (d->follows[d->states[s].elems.elems[j].index].elems[k], &follows); /* Positions that match the input char. */ alloc_position_set (&group, d->nleaves); /* The group's label. */ charclass label; fillset (&label); for (idx_t i = 0; i < follows.nelem; i++) { charclass matches; /* Set of matching characters. */ position pos = follows.elems[i]; bool matched = false; if (d->tokens[pos.index] >= 0 && d->tokens[pos.index] < NOTCHAR) { zeroset (&matches); setbit (d->tokens[pos.index], &matches); if (d->tokens[pos.index] == uc) matched = true; } else if (d->tokens[pos.index] >= CSET) { matches = d->charclasses[d->tokens[pos.index] - CSET]; if (tstbit (uc, &matches)) matched = true; } else if (d->tokens[pos.index] == ANYCHAR) { matches = d->charclasses[d->canychar]; if (tstbit (uc, &matches)) matched = true; /* ANYCHAR must match with a single character, so we must put it to D->states[s].mbps which contains the positions which can match with a single character not a byte. If all positions which has ANYCHAR does not depend on context of next character, we put the follows instead of it to D->states[s].mbps to optimize. */ if (succeeds_in_context (pos.constraint, d->states[s].context, CTX_NONE)) { if (d->states[s].mbps.nelem == 0) alloc_position_set (&d->states[s].mbps, 1); insert (pos, &d->states[s].mbps); } } else continue; /* Some characters may need to be eliminated from matches because they fail in the current context. */ if (pos.constraint != NO_CONSTRAINT) { if (!succeeds_in_context (pos.constraint, d->states[s].context, CTX_NEWLINE)) for (int j = 0; j < CHARCLASS_WORDS; j++) matches.w[j] &= ~d->syntax.newline.w[j]; if (!succeeds_in_context (pos.constraint, d->states[s].context, CTX_LETTER)) for (int j = 0; j < CHARCLASS_WORDS; ++j) matches.w[j] &= ~d->syntax.letters.w[j]; if (!succeeds_in_context (pos.constraint, d->states[s].context, CTX_NONE)) for (int j = 0; j < CHARCLASS_WORDS; ++j) matches.w[j] &= d->syntax.letters.w[j] | d->syntax.newline.w[j]; /* If there are no characters left, there's no point in going on. */ if (emptyset (&matches)) continue; /* If we have reset the bit that made us declare "matched", reset that indicator, too. This is required to avoid an infinite loop with this command: echo cx | LC_ALL=C grep -E 'c\b[x ]' */ if (!tstbit (uc, &matches)) matched = false; } #ifdef DEBUG fprintf (stderr, " nextpos %td:", pos.index); prtok (d->tokens[pos.index]); fprintf (stderr, " of"); for (unsigned j = 0; j < NOTCHAR; j++) if (tstbit (j, &matches)) fprintf (stderr, " 0x%02x", j); fprintf (stderr, "\n"); #endif if (matched) { for (int k = 0; k < CHARCLASS_WORDS; ++k) label.w[k] &= matches.w[k]; append (pos, &group); } else { for (int k = 0; k < CHARCLASS_WORDS; ++k) label.w[k] &= ~matches.w[k]; } } alloc_position_set (&tmp, d->nleaves); if (group.nelem > 0) { /* If we are building a searching matcher, throw in the positions of state 0 as well, if possible. */ if (d->searchflag) { /* If a token in follows.elems is not 1st byte of a multibyte character, or the states of follows must accept the bytes which are not 1st byte of the multibyte character. Then, if a state of follows encounters a byte, it must not be a 1st byte of a multibyte character nor a single byte character. In this case, do not add state[0].follows to next state, because state[0] must accept 1st-byte. For example, suppose <sb a> is a certain single byte character, <mb A> is a certain multibyte character, and the codepoint of <sb a> equals the 2nd byte of the codepoint of <mb A>. When state[0] accepts <sb a>, state[i] transits to state[i+1] by accepting the 1st byte of <mb A>, and state[i+1] accepts the 2nd byte of <mb A>, if state[i+1] encounters the codepoint of <sb a>, it must not be <sb a> but the 2nd byte of <mb A>, so do not add state[0]. */ bool mergeit = !d->localeinfo.multibyte; if (!mergeit) { mergeit = true; for (idx_t j = 0; mergeit && j < group.nelem; j++) mergeit &= d->multibyte_prop[group.elems[j].index]; } if (mergeit) merge2 (&group, &d->states[0].elems, &tmp); } /* Find out if the new state will want any context information, by calculating possible contexts that the group can match, and separate contexts that the new state wants to know. */ int possible_contexts = charclass_context (d, &label); int separate_contexts = state_separate_contexts (d, &group); /* Find the state(s) corresponding to the union of the follows. */ if (possible_contexts & ~separate_contexts) state = state_index (d, &group, separate_contexts ^ CTX_ANY); else state = -1; if (separate_contexts & possible_contexts & CTX_NEWLINE) state_newline = state_index (d, &group, CTX_NEWLINE); else state_newline = state; if (separate_contexts & possible_contexts & CTX_LETTER) state_letter = state_index (d, &group, CTX_LETTER); else state_letter = state; /* Reallocate now, to reallocate any newline transition properly. */ realloc_trans_if_necessary (d); } /* If we are a searching matcher, the default transition is to a state containing the positions of state 0, otherwise the default transition is to fail miserably. */ else if (d->searchflag) { state_newline = 0; state_letter = d->min_trcount - 1; state = d->initstate_notbol; } else { state_newline = -1; state_letter = -1; state = -1; } /* Set the transitions for each character in the label. */ for (int i = 0; i < NOTCHAR; i++) if (tstbit (i, &label)) switch (d->syntax.sbit[i]) { case CTX_NEWLINE: trans[i] = state_newline; break; case CTX_LETTER: trans[i] = state_letter; break; default: trans[i] = state; break; } #ifdef DEBUG fprintf (stderr, "trans table %td", s); for (int i = 0; i < NOTCHAR; ++i) { if (!(i & 0xf)) fprintf (stderr, "\n"); fprintf (stderr, " %2td", trans[i]); } fprintf (stderr, "\n"); #endif free (group.elems); free (follows.elems); free (tmp.elems); /* Keep the newline transition in a special place so we can use it as a sentinel. */ if (tstbit (d->syntax.eolbyte, &label)) { d->newlines[s] = trans[d->syntax.eolbyte]; trans[d->syntax.eolbyte] = -1; } return trans[uc]; } /* Multibyte character handling sub-routines for dfaexec. */ /* Consume a single byte and transit state from 's' to '*next_state'. This function is almost same as the state transition routin in dfaexec. But state transition is done just once, otherwise matching succeed or reach the end of the buffer. */ static state_num transit_state_singlebyte (struct dfa *d, state_num s, unsigned char const **pp) { state_num *t; if (d->trans[s]) t = d->trans[s]; else if (d->fails[s]) t = d->fails[s]; else { build_state (s, d, **pp); if (d->trans[s]) t = d->trans[s]; else { t = d->fails[s]; assert (t); } } if (t[**pp] == -2) build_state (s, d, **pp); return t[*(*pp)++]; } /* Transit state from s, then return new state and update the pointer of the buffer. This function is for a period operator which can match a multi-byte character. */ static state_num transit_state (struct dfa *d, state_num s, unsigned char const **pp, unsigned char const *end) { wint_t wc; int mbclen = mbs_to_wchar (&wc, (char const *) *pp, end - *pp, d); /* This state has some operators which can match a multibyte character. */ d->mb_follows.nelem = 0; /* Calculate the state which can be reached from the state 's' by consuming 'mbclen' single bytes from the buffer. */ state_num s1 = s; int mbci; for (mbci = 0; mbci < mbclen && (mbci == 0 || d->min_trcount <= s); mbci++) s = transit_state_singlebyte (d, s, pp); *pp += mbclen - mbci; if (wc == WEOF) { /* It is an invalid character, so ANYCHAR is not accepted. */ return s; } /* If all positions which have ANYCHAR do not depend on the context of the next character, calculate the next state with pre-calculated follows and cache the result. */ if (d->states[s1].mb_trindex < 0) { if (MAX_TRCOUNT <= d->mb_trcount) { state_num s3; for (s3 = -1; s3 < d->tralloc; s3++) { free (d->mb_trans[s3]); d->mb_trans[s3] = NULL; } for (state_num i = 0; i < d->sindex; i++) d->states[i].mb_trindex = -1; d->mb_trcount = 0; } d->states[s1].mb_trindex = d->mb_trcount++; } if (! d->mb_trans[s]) { enum { TRANSPTR_SIZE = sizeof *d->mb_trans[s] }; enum { TRANSALLOC_SIZE = MAX_TRCOUNT * TRANSPTR_SIZE }; d->mb_trans[s] = xmalloc (TRANSALLOC_SIZE); for (int i = 0; i < MAX_TRCOUNT; i++) d->mb_trans[s][i] = -1; } else if (d->mb_trans[s][d->states[s1].mb_trindex] >= 0) return d->mb_trans[s][d->states[s1].mb_trindex]; if (s == -1) copy (&d->states[s1].mbps, &d->mb_follows); else merge (&d->states[s1].mbps, &d->states[s].elems, &d->mb_follows); int separate_contexts = state_separate_contexts (d, &d->mb_follows); state_num s2 = state_index (d, &d->mb_follows, separate_contexts ^ CTX_ANY); realloc_trans_if_necessary (d); d->mb_trans[s][d->states[s1].mb_trindex] = s2; return s2; } /* The initial state may encounter a byte which is not a single byte character nor the first byte of a multibyte character. But it is incorrect for the initial state to accept such a byte. For example, in Shift JIS the regular expression "\\" accepts the codepoint 0x5c, but should not accept the second byte of the codepoint 0x815c. Then the initial state must skip the bytes that are not a single byte character nor the first byte of a multibyte character. Given DFA state d, use mbs_to_wchar to advance MBP until it reaches or exceeds P, and return the advanced MBP. If WCP is non-NULL and the result is greater than P, set *WCP to the final wide character processed, or to WEOF if no wide character is processed. Otherwise, if WCP is non-NULL, *WCP may or may not be updated. Both P and MBP must be no larger than END. */ static unsigned char const * skip_remains_mb (struct dfa *d, unsigned char const *p, unsigned char const *mbp, char const *end) { if (d->syntax.never_trail[*p]) return p; while (mbp < p) { wint_t wc; mbp += mbs_to_wchar (&wc, (char const *) mbp, end - (char const *) mbp, d); } return mbp; } /* Search through a buffer looking for a match to the struct dfa *D. Find the first occurrence of a string matching the regexp in the buffer, and the shortest possible version thereof. Return a pointer to the first character after the match, or NULL if none is found. BEGIN points to the beginning of the buffer, and END points to the first byte after its end. Note however that we store a sentinel byte (usually newline) in *END, so the actual buffer must be one byte longer. When ALLOW_NL, newlines may appear in the matching string. If COUNT is non-NULL, increment *COUNT once for each newline processed. If MULTIBYTE, the input consists of multibyte characters and/or encoding-error bytes. Otherwise, it consists of single-byte characters. Here is the list of features that make this DFA matcher punt: - [M-N] range in non-simple locale: regex is up to 25% faster on [a-z] - [^...] in non-simple locale - [[=foo=]] or [[.foo.]] - [[:alpha:]] etc. in multibyte locale (except [[:digit:]] works OK) - back-reference: (.)\1 - word-delimiter in multibyte locale: \<, \>, \b, \B See struct localeinfo.simple for the definition of "simple locale". */ static inline char * dfaexec_main (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool multibyte) { if (MAX_TRCOUNT <= d->sindex) { for (state_num s = d->min_trcount; s < d->sindex; s++) { free (d->states[s].elems.elems); free (d->states[s].mbps.elems); } d->sindex = d->min_trcount; if (d->trans) { for (state_num s = 0; s < d->tralloc; s++) { free (d->trans[s]); free (d->fails[s]); d->trans[s] = d->fails[s] = NULL; } d->trcount = 0; } if (d->localeinfo.multibyte && d->mb_trans) { for (state_num s = -1; s < d->tralloc; s++) { free (d->mb_trans[s]); d->mb_trans[s] = NULL; } for (state_num s = 0; s < d->min_trcount; s++) d->states[s].mb_trindex = -1; d->mb_trcount = 0; } } if (!d->tralloc) realloc_trans_if_necessary (d); /* Current state. */ state_num s = 0, s1 = 0; /* Current input character. */ unsigned char const *p = (unsigned char const *) begin; unsigned char const *mbp = p; /* Copy of d->trans so it can be optimized into a register. */ state_num **trans = d->trans; unsigned char eol = d->syntax.eolbyte; /* Likewise for eolbyte. */ unsigned char saved_end = *(unsigned char *) end; *end = eol; if (multibyte) { memset (&d->mbs, 0, sizeof d->mbs); if (d->mb_follows.alloc == 0) alloc_position_set (&d->mb_follows, d->nleaves); } idx_t nlcount = 0; for (;;) { state_num *t; while ((t = trans[s]) != NULL) { if (s < d->min_trcount) { if (!multibyte || d->states[s].mbps.nelem == 0) { while (t[*p] == s) p++; } if (multibyte) p = mbp = skip_remains_mb (d, p, mbp, end); } if (multibyte) { s1 = s; if (d->states[s].mbps.nelem == 0 || d->localeinfo.sbctowc[*p] != WEOF || (char *) p >= end) { /* If an input character does not match ANYCHAR, do it like a single-byte character. */ s = t[*p++]; } else { s = transit_state (d, s, &p, (unsigned char *) end); mbp = p; trans = d->trans; } } else { s1 = t[*p++]; t = trans[s1]; if (! t) { state_num tmp = s; s = s1; s1 = tmp; /* swap */ break; } if (s < d->min_trcount) { while (t[*p] == s1) p++; } s = t[*p++]; } } if (s < 0) { if (s == -2) { s = build_state (s1, d, p[-1]); trans = d->trans; } else if ((char *) p <= end && p[-1] == eol && 0 <= d->newlines[s1]) { /* The previous character was a newline. Count it, and skip checking of multibyte character boundary until here. */ nlcount++; mbp = p; s = (allow_nl ? d->newlines[s1] : d->syntax.sbit[eol] == CTX_NEWLINE ? 0 : d->syntax.sbit[eol] == CTX_LETTER ? d->min_trcount - 1 : d->initstate_notbol); } else { p = NULL; goto done; } } else if (d->fails[s]) { if ((d->success[s] & d->syntax.sbit[*p]) || ((char *) p == end && accepts_in_context (d->states[s].context, CTX_NEWLINE, s, d))) goto done; if (multibyte && s < d->min_trcount) p = mbp = skip_remains_mb (d, p, mbp, end); s1 = s; if (!multibyte || d->states[s].mbps.nelem == 0 || d->localeinfo.sbctowc[*p] != WEOF || (char *) p >= end) { /* If a input character does not match ANYCHAR, do it like a single-byte character. */ s = d->fails[s][*p++]; } else { s = transit_state (d, s, &p, (unsigned char *) end); mbp = p; trans = d->trans; } } else { build_state (s, d, p[0]); trans = d->trans; } } done: if (count) *count += nlcount; *end = saved_end; return (char *) p; } /* Specialized versions of dfaexec for multibyte and single-byte cases. This is for performance, as dfaexec_main is an inline function. */ static char * dfaexec_mb (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool *backref) { return dfaexec_main (d, begin, end, allow_nl, count, true); } static char * dfaexec_sb (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool *backref) { return dfaexec_main (d, begin, end, allow_nl, count, false); } /* Always set *BACKREF and return BEGIN. Use this wrapper for any regexp that uses a construct not supported by this code. */ static char * dfaexec_noop (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool *backref) { *backref = true; return (char *) begin; } /* Like dfaexec_main (D, BEGIN, END, ALLOW_NL, COUNT, D->localeinfo.multibyte), but faster and set *BACKREF if the DFA code does not support this regexp usage. */ char * dfaexec (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool *backref) { return d->dfaexec (d, begin, end, allow_nl, count, backref); } struct dfa * dfasuperset (struct dfa const *d) { return d->superset; } bool dfaisfast (struct dfa const *d) { return d->fast; } static void free_mbdata (struct dfa *d) { free (d->multibyte_prop); free (d->lex.brack.chars); free (d->mb_follows.elems); if (d->mb_trans) { state_num s; for (s = -1; s < d->tralloc; s++) free (d->mb_trans[s]); free (d->mb_trans - 2); } } /* Return true if every construct in D is supported by this DFA matcher. */ bool dfasupported (struct dfa const *d) { for (idx_t i = 0; i < d->tindex; i++) { switch (d->tokens[i]) { case BEGWORD: case ENDWORD: case LIMWORD: case NOTLIMWORD: if (!d->localeinfo.multibyte) continue; FALLTHROUGH; case BACKREF: case MBCSET: return false; } } return true; } /* Disable use of the superset DFA if it is not likely to help performance. */ static void maybe_disable_superset_dfa (struct dfa *d) { if (!d->localeinfo.using_utf8) return; bool have_backref = false; for (idx_t i = 0; i < d->tindex; i++) { switch (d->tokens[i]) { case ANYCHAR: /* Lowered. */ abort (); case BACKREF: have_backref = true; break; case MBCSET: /* Requires multi-byte algorithm. */ return; default: break; } } if (!have_backref && d->superset) { /* The superset DFA is not likely to be much faster, so remove it. */ dfafree (d->superset); free (d->superset); d->superset = NULL; } free_mbdata (d); d->localeinfo.multibyte = false; d->dfaexec = dfaexec_sb; d->fast = true; } static void dfassbuild (struct dfa *d) { struct dfa *sup = dfaalloc (); *sup = *d; sup->localeinfo.multibyte = false; sup->dfaexec = dfaexec_sb; sup->multibyte_prop = NULL; sup->superset = NULL; sup->states = NULL; sup->sindex = 0; sup->constraints = NULL; sup->separates = NULL; sup->follows = NULL; sup->tralloc = 0; sup->trans = NULL; sup->fails = NULL; sup->success = NULL; sup->newlines = NULL; sup->charclasses = xnmalloc (sup->calloc, sizeof *sup->charclasses); if (d->cindex) { memcpy (sup->charclasses, d->charclasses, d->cindex * sizeof *sup->charclasses); } sup->tokens = xnmalloc (d->tindex, 2 * sizeof *sup->tokens); sup->talloc = d->tindex * 2; bool have_achar = false; bool have_nchar = false; idx_t j; for (idx_t i = j = 0; i < d->tindex; i++) { switch (d->tokens[i]) { case ANYCHAR: case MBCSET: case BACKREF: { charclass ccl; fillset (&ccl); sup->tokens[j++] = CSET + charclass_index (sup, &ccl); sup->tokens[j++] = STAR; if (d->tokens[i + 1] == QMARK || d->tokens[i + 1] == STAR || d->tokens[i + 1] == PLUS) i++; have_achar = true; } break; case BEGWORD: case ENDWORD: case LIMWORD: case NOTLIMWORD: if (d->localeinfo.multibyte) { /* These constraints aren't supported in a multibyte locale. Ignore them in the superset DFA. */ sup->tokens[j++] = EMPTY; break; } FALLTHROUGH; default: sup->tokens[j++] = d->tokens[i]; if ((0 <= d->tokens[i] && d->tokens[i] < NOTCHAR) || d->tokens[i] >= CSET) have_nchar = true; break; } } sup->tindex = j; if (have_nchar && (have_achar || d->localeinfo.multibyte)) d->superset = sup; else { dfafree (sup); free (sup); } } /* Parse a string S of length LEN into D (but skip this step if S is null). Then analyze D and build a matcher for it. SEARCHFLAG says whether to build a searching or an exact matcher. */ void dfacomp (char const *s, idx_t len, struct dfa *d, bool searchflag) { if (s != NULL) dfaparse (s, len, d); dfassbuild (d); if (dfasupported (d)) { maybe_disable_superset_dfa (d); dfaanalyze (d, searchflag); } else { d->dfaexec = dfaexec_noop; } if (d->superset) { d->fast = true; dfaanalyze (d->superset, searchflag); } } /* Free the storage held by the components of a dfa. */ void dfafree (struct dfa *d) { free (d->charclasses); free (d->tokens); if (d->localeinfo.multibyte) free_mbdata (d); free (d->constraints); free (d->separates); for (idx_t i = 0; i < d->sindex; i++) { free (d->states[i].elems.elems); free (d->states[i].mbps.elems); } free (d->states); if (d->follows) { for (idx_t i = 0; i < d->tindex; i++) free (d->follows[i].elems); free (d->follows); } if (d->trans) { for (idx_t i = 0; i < d->tralloc; i++) { free (d->trans[i]); free (d->fails[i]); } free (d->trans - 2); free (d->fails); free (d->newlines); free (d->success); } if (d->superset) { dfafree (d->superset); free (d->superset); } } /* Having found the postfix representation of the regular expression, try to find a long sequence of characters that must appear in any line containing the r.e. Finding a "longest" sequence is beyond the scope here; we take an easy way out and hope for the best. (Take "(ab|a)b"--please.) We do a bottom-up calculation of sequences of characters that must appear in matches of r.e.'s represented by trees rooted at the nodes of the postfix representation: sequences that must appear at the left of the match ("left") sequences that must appear at the right of the match ("right") lists of sequences that must appear somewhere in the match ("in") sequences that must constitute the match ("is") When we get to the root of the tree, we use one of the longest of its calculated "in" sequences as our answer. The sequences calculated for the various types of node (in pseudo ANSI c) are shown below. "p" is the operand of unary operators (and the left-hand operand of binary operators); "q" is the right-hand operand of binary operators. "ZERO" means "a zero-length sequence" below. Type left right is in ---- ---- ----- -- -- char c # c # c # c # c ANYCHAR ZERO ZERO ZERO ZERO MBCSET ZERO ZERO ZERO ZERO CSET ZERO ZERO ZERO ZERO STAR ZERO ZERO ZERO ZERO QMARK ZERO ZERO ZERO ZERO PLUS p->left p->right ZERO p->in CAT (p->is==ZERO)? (q->is==ZERO)? (p->is!=ZERO && p->in plus p->left : q->right : q->is!=ZERO) ? q->in plus p->is##q->left p->right##q->is p->is##q->is : p->right##q->left ZERO OR longest common longest common (do p->is and substrings common leading trailing to q->is have same p->in and (sub)sequence (sub)sequence q->in length and content) ? of p->left of p->right and q->left and q->right p->is : NULL If there's anything else we recognize in the tree, all four sequences get set to zero-length sequences. If there's something we don't recognize in the tree, we just return a zero-length sequence. Break ties in favor of infrequent letters (choosing 'zzz' in preference to 'aaa')? And ... is it here or someplace that we might ponder "optimizations" such as egrep 'psi|epsilon' -> egrep 'psi' egrep 'pepsi|epsilon' -> egrep 'epsi' (Yes, we now find "epsi" as a "string that must occur", but we might also simplify the *entire* r.e. being sought) grep '[c]' -> grep 'c' grep '(ab|a)b' -> grep 'ab' grep 'ab*' -> grep 'a' grep 'a*b' -> grep 'b' There are several issues: Is optimization easy (enough)? Does optimization actually accomplish anything, or is the automaton you get from "psi|epsilon" (for example) the same as the one you get from "psi" (for example)? Are optimizable r.e.'s likely to be used in real-life situations (something like 'ab*' is probably unlikely; something like is 'psi|epsilon' is likelier)? */ static char * icatalloc (char *old, char const *new) { idx_t newsize = strlen (new); if (newsize == 0) return old; idx_t oldsize = strlen (old); char *result = xirealloc (old, oldsize + newsize + 1); memcpy (result + oldsize, new, newsize + 1); return result; } static void freelist (char **cpp) { while (*cpp) free (*cpp++); } static char ** enlistnew (char **cpp, char *new) { /* Is there already something in the list that's new (or longer)? */ idx_t i; for (i = 0; cpp[i] != NULL; i++) if (strstr (cpp[i], new) != NULL) { free (new); return cpp; } /* Eliminate any obsoleted strings. */ for (idx_t j = 0; cpp[j] != NULL; ) if (strstr (new, cpp[j]) == NULL) ++j; else { free (cpp[j]); if (--i == j) break; cpp[j] = cpp[i]; cpp[i] = NULL; } /* Add the new string. */ cpp = xreallocarray (cpp, i + 2, sizeof *cpp); cpp[i] = new; cpp[i + 1] = NULL; return cpp; } static char ** enlist (char **cpp, char const *str, idx_t len) { return enlistnew (cpp, ximemdup0 (str, len)); } /* Given pointers to two strings, return a pointer to an allocated list of their distinct common substrings. */ static char ** comsubs (char *left, char const *right) { char **cpp = xzalloc (sizeof *cpp); for (char *lcp = left; *lcp != '\0'; lcp++) { idx_t len = 0; char *rcp = strchr (right, *lcp); while (rcp != NULL) { idx_t i; for (i = 1; lcp[i] != '\0' && lcp[i] == rcp[i]; ++i) continue; if (i > len) len = i; rcp = strchr (rcp + 1, *lcp); } if (len != 0) cpp = enlist (cpp, lcp, len); } return cpp; } static char ** addlists (char **old, char **new) { for (; *new; new++) old = enlistnew (old, xstrdup (*new)); return old; } /* Given two lists of substrings, return a new list giving substrings common to both. */ static char ** inboth (char **left, char **right) { char **both = xzalloc (sizeof *both); for (idx_t lnum = 0; left[lnum] != NULL; lnum++) { for (idx_t rnum = 0; right[rnum] != NULL; rnum++) { char **temp = comsubs (left[lnum], right[rnum]); both = addlists (both, temp); freelist (temp); free (temp); } } return both; } typedef struct must must; struct must { char **in; char *left; char *right; char *is; bool begline; bool endline; must *prev; }; static must * allocmust (must *mp, idx_t size) { must *new_mp = xmalloc (sizeof *new_mp); new_mp->in = xzalloc (sizeof *new_mp->in); new_mp->left = xizalloc (size); new_mp->right = xizalloc (size); new_mp->is = xizalloc (size); new_mp->begline = false; new_mp->endline = false; new_mp->prev = mp; return new_mp; } static void resetmust (must *mp) { freelist (mp->in); mp->in[0] = NULL; mp->left[0] = mp->right[0] = mp->is[0] = '\0'; mp->begline = false; mp->endline = false; } static void freemust (must *mp) { freelist (mp->in); free (mp->in); free (mp->left); free (mp->right); free (mp->is); free (mp); } struct dfamust * dfamust (struct dfa const *d) { must *mp = NULL; char const *result = ""; bool exact = false; bool begline = false; bool endline = false; bool need_begline = false; bool need_endline = false; bool case_fold_unibyte = d->syntax.case_fold & !d->localeinfo.multibyte; for (idx_t ri = 1; ri + 1 < d->tindex; ri++) { token t = d->tokens[ri]; switch (t) { case BEGLINE: mp = allocmust (mp, 2); mp->begline = true; need_begline = true; break; case ENDLINE: mp = allocmust (mp, 2); mp->endline = true; need_endline = true; break; case LPAREN: case RPAREN: assert (!"neither LPAREN nor RPAREN may appear here"); case EMPTY: case BEGWORD: case ENDWORD: case LIMWORD: case NOTLIMWORD: case BACKREF: case ANYCHAR: case MBCSET: mp = allocmust (mp, 2); break; case STAR: case QMARK: assume_nonnull (mp); resetmust (mp); break; case OR: { char **new; must *rmp = mp; assume_nonnull (rmp); must *lmp = mp = mp->prev; assume_nonnull (lmp); idx_t j, ln, rn, n; /* Guaranteed to be. Unlikely, but ... */ if (streq (lmp->is, rmp->is)) { lmp->begline &= rmp->begline; lmp->endline &= rmp->endline; } else { lmp->is[0] = '\0'; lmp->begline = false; lmp->endline = false; } /* Left side--easy */ idx_t i = 0; while (lmp->left[i] != '\0' && lmp->left[i] == rmp->left[i]) ++i; lmp->left[i] = '\0'; /* Right side */ ln = strlen (lmp->right); rn = strlen (rmp->right); n = ln; if (n > rn) n = rn; for (i = 0; i < n; ++i) if (lmp->right[ln - i - 1] != rmp->right[rn - i - 1]) break; for (j = 0; j < i; ++j) lmp->right[j] = lmp->right[(ln - i) + j]; lmp->right[j] = '\0'; new = inboth (lmp->in, rmp->in); freelist (lmp->in); free (lmp->in); lmp->in = new; freemust (rmp); } break; case PLUS: assume_nonnull (mp); mp->is[0] = '\0'; break; case END: assume_nonnull (mp); assert (!mp->prev); for (idx_t i = 0; mp->in[i] != NULL; i++) if (strlen (mp->in[i]) > strlen (result)) result = mp->in[i]; if (streq (result, mp->is)) { if ((!need_begline || mp->begline) && (!need_endline || mp->endline)) exact = true; begline = mp->begline; endline = mp->endline; } goto done; case CAT: { must *rmp = mp; assume_nonnull (rmp); must *lmp = mp = mp->prev; assume_nonnull (lmp); /* In. Everything in left, plus everything in right, plus concatenation of left's right and right's left. */ lmp->in = addlists (lmp->in, rmp->in); if (lmp->right[0] != '\0' && rmp->left[0] != '\0') { idx_t lrlen = strlen (lmp->right); idx_t rllen = strlen (rmp->left); char *tp = ximalloc (lrlen + rllen + 1); memcpy (tp + lrlen, rmp->left, rllen + 1); memcpy (tp, lmp->right, lrlen); lmp->in = enlistnew (lmp->in, tp); } /* Left-hand */ if (lmp->is[0] != '\0') lmp->left = icatalloc (lmp->left, rmp->left); /* Right-hand */ if (rmp->is[0] == '\0') lmp->right[0] = '\0'; lmp->right = icatalloc (lmp->right, rmp->right); /* Guaranteed to be */ if ((lmp->is[0] != '\0' || lmp->begline) && (rmp->is[0] != '\0' || rmp->endline)) { lmp->is = icatalloc (lmp->is, rmp->is); lmp->endline = rmp->endline; } else { lmp->is[0] = '\0'; lmp->begline = false; lmp->endline = false; } freemust (rmp); } break; case '\0': /* Not on *my* shift. */ goto done; default: if (CSET <= t) { /* If T is a singleton, or if case-folding in a unibyte locale and T's members all case-fold to the same char, convert T to one of its members. Otherwise, do nothing further with T. */ charclass *ccl = &d->charclasses[t - CSET]; int j; for (j = 0; j < NOTCHAR; j++) if (tstbit (j, ccl)) break; if (! (j < NOTCHAR)) { mp = allocmust (mp, 2); break; } t = j; while (++j < NOTCHAR) if (tstbit (j, ccl) && ! (case_fold_unibyte && toupper (j) == toupper (t))) break; if (j < NOTCHAR) { mp = allocmust (mp, 2); break; } } idx_t rj = ri + 2; if (d->tokens[ri + 1] == CAT) { for (; rj < d->tindex - 1; rj += 2) { if ((rj != ri && (d->tokens[rj] <= 0 || NOTCHAR <= d->tokens[rj])) || d->tokens[rj + 1] != CAT) break; } } mp = allocmust (mp, ((rj - ri) >> 1) + 1); mp->is[0] = mp->left[0] = mp->right[0] = case_fold_unibyte ? toupper (t) : t; idx_t i; for (i = 1; ri + 2 < rj; i++) { ri += 2; t = d->tokens[ri]; mp->is[i] = mp->left[i] = mp->right[i] = case_fold_unibyte ? toupper (t) : t; } mp->is[i] = mp->left[i] = mp->right[i] = '\0'; mp->in = enlist (mp->in, mp->is, i); break; } } done:; struct dfamust *dm = NULL; if (*result) { dm = xmalloc (FLEXSIZEOF (struct dfamust, must, strlen (result) + 1)); dm->exact = exact; dm->begline = begline; dm->endline = endline; strcpy (dm->must, result); } while (mp) { must *prev = mp->prev; freemust (mp); mp = prev; } return dm; } void dfamustfree (struct dfamust *dm) { free (dm); } struct dfa * dfaalloc (void) { return xmalloc (sizeof (struct dfa)); } /* Initialize DFA. */ void dfasyntax (struct dfa *dfa, struct localeinfo const *linfo, reg_syntax_t bits, int dfaopts) { memset (dfa, 0, offsetof (struct dfa, dfaexec)); dfa->dfaexec = linfo->multibyte ? dfaexec_mb : dfaexec_sb; dfa->localeinfo = *linfo; dfa->fast = !dfa->localeinfo.multibyte; dfa->canychar = -1; dfa->syntax.syntax_bits_set = true; dfa->syntax.case_fold = (bits & RE_ICASE) != 0; dfa->syntax.anchor = (dfaopts & DFA_ANCHOR) != 0; dfa->syntax.eolbyte = dfaopts & DFA_EOL_NUL ? '\0' : '\n'; dfa->syntax.syntax_bits = bits; for (int i = CHAR_MIN; i <= CHAR_MAX; ++i) { unsigned char uc = i; dfa->syntax.sbit[uc] = char_context (dfa, uc); switch (dfa->syntax.sbit[uc]) { case CTX_LETTER: setbit (uc, &dfa->syntax.letters); break; case CTX_NEWLINE: setbit (uc, &dfa->syntax.newline); break; } /* POSIX requires that the five bytes in "\n\r./" (including the terminating NUL) cannot occur inside a multibyte character. */ dfa->syntax.never_trail[uc] = (dfa->localeinfo.using_utf8 ? (uc & 0xc0) != 0x80 : strchr ("\n\r./", uc) != NULL); } } /* Initialize TO by copying FROM's syntax settings. */ void dfacopysyntax (struct dfa *to, struct dfa const *from) { memset (to, 0, offsetof (struct dfa, syntax)); to->canychar = -1; to->fast = from->fast; to->syntax = from->syntax; to->dfaexec = from->dfaexec; to->localeinfo = from->localeinfo; } /* vim:set shiftwidth=2: */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dfa.h�������������������������������������������������������������������0000664�0000000�0000000�00000013314�14110572173�0015752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dfa.h - declarations for GNU deterministic regexp compiler Copyright (C) 1988, 1998, 2007, 2009-2021 Free Software Foundation, Inc. This 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, 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, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA */ /* Written June, 1988 by Mike Haertel */ #ifndef DFA_H_ #define DFA_H_ #include <regex.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif struct localeinfo; /* See localeinfo.h. */ /* Element of a list of strings, at least one of which is known to appear in any R.E. matching the DFA. */ struct dfamust { bool exact; bool begline; bool endline; char must[FLEXIBLE_ARRAY_MEMBER]; }; /* The dfa structure. It is completely opaque. */ struct dfa; /* Needed when Gnulib is not used. */ #ifndef _GL_ATTRIBUTE_MALLOC # define _GL_ATTRIBUTE_MALLOC # define _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_RETURNS_NONNULL #endif /* Entry points. */ /* Allocate a struct dfa. The struct dfa is completely opaque. It should be initialized via dfasyntax or dfacopysyntax before other use. The returned pointer should be passed directly to free() after calling dfafree() on it. */ extern struct dfa *dfaalloc (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* DFA options that can be ORed together, for dfasyntax's 4th arg. */ enum { /* ^ and $ match only the start and end of data, and do not match end-of-line within data. This is always false for grep, but possibly true for other apps. */ DFA_ANCHOR = 1 << 0, /* '\0' in data is end-of-line, instead of the traditional '\n'. */ DFA_EOL_NUL = 1 << 1 }; /* Initialize or reinitialize a DFA. The arguments are: 1. The DFA to operate on. 2. Information about the current locale. 3. Syntax bits described in regex.h. 4. Additional DFA options described above. */ extern void dfasyntax (struct dfa *, struct localeinfo const *, reg_syntax_t, int); /* Initialize or reinitialize a DFA from an already-initialized DFA. */ extern void dfacopysyntax (struct dfa *, struct dfa const *); /* Parse the given string of given length into the given struct dfa. */ extern void dfaparse (char const *, ptrdiff_t, struct dfa *); struct dfamust; /* Free the storage held by the components of a struct dfamust. */ extern void dfamustfree (struct dfamust *); /* Allocate and return a struct dfamust from a struct dfa that was initialized by dfaparse and not yet given to dfacomp. */ extern struct dfamust *dfamust (struct dfa const *) _GL_ATTRIBUTE_DEALLOC (dfamustfree, 1); /* Compile the given string of the given length into the given struct dfa. The last argument says whether to build a searching or an exact matcher. A null first argument means the struct dfa has already been initialized by dfaparse; the second argument is ignored. */ extern void dfacomp (char const *, ptrdiff_t, struct dfa *, bool); /* Search through a buffer looking for a match to the given struct dfa. Find the first occurrence of a string matching the regexp in the buffer, and the shortest possible version thereof. Return a pointer to the first character after the match, or NULL if none is found. BEGIN points to the beginning of the buffer, and END points to the first byte after its end. Note however that we store a sentinel byte (usually newline) in *END, so the actual buffer must be one byte longer. When ALLOW_NL is true, newlines may appear in the matching string. If COUNT is non-NULL, increment *COUNT once for each newline processed. Finally, if BACKREF is non-NULL set *BACKREF to indicate whether we encountered a back-reference. The caller can use this to decide whether to fall back on a backtracking matcher. */ extern char *dfaexec (struct dfa *d, char const *begin, char *end, bool allow_nl, ptrdiff_t *count, bool *backref); /* Return a superset for D. The superset matches everything that D matches, along with some other strings (though the latter should be rare, for efficiency reasons). Return a null pointer if no useful superset is available. */ extern struct dfa *dfasuperset (struct dfa const *d) _GL_ATTRIBUTE_PURE; /* The DFA is likely to be fast. */ extern bool dfaisfast (struct dfa const *) _GL_ATTRIBUTE_PURE; /* Return true if every construct in D is supported by this DFA matcher. */ extern bool dfasupported (struct dfa const *) _GL_ATTRIBUTE_PURE; /* Free the storage held by the components of a struct dfa. */ extern void dfafree (struct dfa *); /* Error handling. */ /* dfawarn() is called by the regexp routines whenever a regex is compiled that likely doesn't do what the user wanted. It takes a single argument, a NUL-terminated string describing the situation. The user must supply a dfawarn. */ extern void dfawarn (const char *); /* dfaerror() is called by the regexp routines whenever an error occurs. It takes a single argument, a NUL-terminated string describing the error. The user must supply a dfaerror. */ extern _Noreturn void dfaerror (const char *); #ifdef __cplusplus } #endif #endif /* dfa.h */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/di-set.c����������������������������������������������������������������0000664�0000000�0000000�00000016340�14110572173�0016402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set operations for device-inode pairs stored in a space-efficient manner. Copyright 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering */ #include <config.h> #include "di-set.h" #include "hash.h" #include "ino-map.h" #include <limits.h> #include <stdlib.h> /* The hash package hashes "void *", but this package wants to hash integers. Use integers that are as large as possible, but no larger than void *, so that they can be cast to void * and back without losing information. */ typedef size_t hashint; #define HASHINT_MAX ((hashint) -1) /* Integers represent inode numbers. Integers in the range 1..(LARGE_INO_MIN-1) represent inode numbers directly. (The hash package does not work with null pointers, so inode 0 cannot be used as a key.) To find the representations of other inode numbers, map them through INO_MAP. */ #define LARGE_INO_MIN (HASHINT_MAX / 2) /* Set operations for device-inode pairs stored in a space-efficient manner. Use a two-level hash table. The top level hashes by device number, as there are typically a small number of devices. The lower level hashes by mapped inode numbers. In the typical case where the inode number is positive and small, the inode number maps to itself, masquerading as a void * value; otherwise, its value is the result of hashing the inode value through INO_MAP. */ /* A pair that maps a device number to a set of inode numbers. */ struct di_ent { dev_t dev; struct hash_table *ino_set; }; /* A two-level hash table that manages and indexes these pairs. */ struct di_set { /* Map device numbers to sets of inode number representatives. */ struct hash_table *dev_map; /* If nonnull, map large inode numbers to their small representatives. If null, there are no large inode numbers in this set. */ struct ino_map *ino_map; /* Cache of the most recently allocated and otherwise-unused storage for probing this table. */ struct di_ent *probe; }; /* Hash a device-inode-set entry. */ static size_t di_ent_hash (void const *x, size_t table_size) { struct di_ent const *p = x; dev_t dev = p->dev; /* When DEV is wider than size_t, exclusive-OR the words of DEV into H. This avoids loss of info, without applying % to the wider type, which could be quite slow on some systems. */ size_t h = dev; unsigned int i; unsigned int n_words = sizeof dev / sizeof h + (sizeof dev % sizeof h != 0); for (i = 1; i < n_words; i++) h ^= dev >> CHAR_BIT * sizeof h * i; return h % table_size; } /* Return true if two device-inode-set entries are the same. */ static bool di_ent_compare (void const *x, void const *y) { struct di_ent const *a = x; struct di_ent const *b = y; return a->dev == b->dev; } /* Free a device-inode-set entry. */ static void di_ent_free (void *v) { struct di_ent *a = v; hash_free (a->ino_set); free (a); } /* Create a set of device-inode pairs. Return NULL on allocation failure. */ struct di_set * di_set_alloc (void) { struct di_set *dis = malloc (sizeof *dis); if (dis) { enum { INITIAL_DEV_MAP_SIZE = 11 }; dis->dev_map = hash_initialize (INITIAL_DEV_MAP_SIZE, NULL, di_ent_hash, di_ent_compare, di_ent_free); if (! dis->dev_map) { free (dis); return NULL; } dis->ino_map = NULL; dis->probe = NULL; } return dis; } /* Free a set of device-inode pairs. */ void di_set_free (struct di_set *dis) { hash_free (dis->dev_map); if (dis->ino_map) ino_map_free (dis->ino_map); free (dis->probe); free (dis); } /* Hash an encoded inode number I. */ static size_t di_ino_hash (void const *i, size_t table_size) { return (hashint) i % table_size; } /* Using the DIS table, map a device to a hash table that represents a set of inode numbers. Return NULL on error. */ static struct hash_table * map_device (struct di_set *dis, dev_t dev) { /* Find space for the probe, reusing the cache if available. */ struct di_ent *ent; struct di_ent *probe = dis->probe; if (probe) { /* If repeating a recent query, return the cached result. */ if (probe->dev == dev) return probe->ino_set; } else { dis->probe = probe = malloc (sizeof *probe); if (! probe) return NULL; } /* Probe for the device. */ probe->dev = dev; ent = hash_insert (dis->dev_map, probe); if (! ent) return NULL; if (ent != probe) { /* Use the existing entry. */ probe->ino_set = ent->ino_set; } else { enum { INITIAL_INO_SET_SIZE = 1021 }; /* Prepare to allocate a new probe next time; this one is in use. */ dis->probe = NULL; /* DEV is new; allocate an inode set for it. */ probe->ino_set = hash_initialize (INITIAL_INO_SET_SIZE, NULL, di_ino_hash, NULL, NULL); } return probe->ino_set; } /* Using the DIS table, map an inode number to a mapped value. Return INO_MAP_INSERT_FAILURE on error. */ static hashint map_inode_number (struct di_set *dis, ino_t ino) { if (0 < ino && ino < LARGE_INO_MIN) return ino; if (! dis->ino_map) { dis->ino_map = ino_map_alloc (LARGE_INO_MIN); if (! dis->ino_map) return INO_MAP_INSERT_FAILURE; } return ino_map_insert (dis->ino_map, ino); } /* Attempt to insert the DEV,INO pair into the set DIS. If it matches a pair already in DIS, keep that pair and return 0. Otherwise, if insertion is successful, return 1. Upon any failure return -1. */ int di_set_insert (struct di_set *dis, dev_t dev, ino_t ino) { hashint i; /* Map the device number to a set of inodes. */ struct hash_table *ino_set = map_device (dis, dev); if (! ino_set) return -1; /* Map the inode number to a small representative I. */ i = map_inode_number (dis, ino); if (i == INO_MAP_INSERT_FAILURE) return -1; /* Put I into the inode set. */ return hash_insert_if_absent (ino_set, (void const *) i, NULL); } /* Look up the DEV,INO pair in the set DIS. If found, return 1; if not found, return 0. Upon any failure return -1. */ int di_set_lookup (struct di_set *dis, dev_t dev, ino_t ino) { hashint i; /* Map the device number to a set of inodes. */ struct hash_table *ino_set = map_device (dis, dev); if (! ino_set) return -1; /* Map the inode number to a small representative I. */ i = map_inode_number (dis, ino); if (i == INO_MAP_INSERT_FAILURE) return -1; /* Perform the look-up. */ return !!hash_lookup (ino_set, (void const *) i); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/di-set.h����������������������������������������������������������������0000664�0000000�0000000�00000002315�14110572173�0016404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manipulate sets of device-inode pairs efficiently. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2010. */ #ifndef _GL_DI_SET_H # define _GL_DI_SET_H # include <sys/types.h> struct di_set; void di_set_free (struct di_set *) _GL_ATTRIBUTE_NONNULL ((1)); struct di_set *di_set_alloc (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (di_set_free, 1); int di_set_insert (struct di_set *, dev_t, ino_t) _GL_ATTRIBUTE_NONNULL ((1)); int di_set_lookup (struct di_set *dis, dev_t dev, ino_t ino) _GL_ATTRIBUTE_NONNULL ((1)); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/diffseq.h���������������������������������������������������������������0000664�0000000�0000000�00000044454�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Analyze differences between two vectors. Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2021 Free Software Foundation, Inc. This 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/>. */ /* The basic idea is to consider two vectors as similar if, when transforming the first vector into the second vector through a sequence of edits (inserts and deletes of one element each), this sequence is short - or equivalently, if the ordered list of elements that are untouched by these edits is long. For a good introduction to the subject, read about the "Levenshtein distance" in Wikipedia. The basic algorithm is described in: "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers, Algorithmica Vol. 1, 1986, pp. 251-266, <https://doi.org/10.1007/BF01840446>. See especially section 4.2, which describes the variation used below. The basic algorithm was independently discovered as described in: "Algorithms for Approximate String Matching", Esko Ukkonen, Information and Control Vol. 64, 1985, pp. 100-118, <https://doi.org/10.1016/S0019-9958(85)80046-2>. Unless the 'find_minimal' flag is set, this code uses the TOO_EXPENSIVE heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N) at the price of producing suboptimal output for large inputs with many differences. */ /* Before including this file, you need to define: ELEMENT The element type of the vectors being compared. EQUAL A two-argument macro that tests two elements for equality. OFFSET A signed integer type sufficient to hold the difference between two indices. Usually something like ptrdiff_t. EXTRA_CONTEXT_FIELDS Declarations of fields for 'struct context'. NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff]. NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff]. NOTE_ORDERED (Optional) A boolean expression saying that NOTE_DELETE and NOTE_INSERT calls must be issued in offset order. EARLY_ABORT(ctxt) (Optional) A boolean expression that triggers an early abort of the computation. USE_HEURISTIC (Optional) Define if you want to support the heuristic for large vectors. It is also possible to use this file with abstract arrays. In this case, xvec and yvec are not represented in memory. They only exist conceptually. In this case, the list of defines above is amended as follows: ELEMENT Undefined. EQUAL Undefined. XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff) A three-argument macro: References xvec[xoff] and yvec[yoff] and tests these elements for equality. Before including this file, you also need to include: #include <limits.h> #include <stdbool.h> #include "minmax.h" */ /* Maximum value of type OFFSET. */ #define OFFSET_MAX \ ((((OFFSET)1 << (sizeof (OFFSET) * CHAR_BIT - 2)) - 1) * 2 + 1) /* Default to no early abort. */ #ifndef EARLY_ABORT # define EARLY_ABORT(ctxt) false #endif #ifndef NOTE_ORDERED # define NOTE_ORDERED false #endif /* Use this to suppress gcc's "...may be used before initialized" warnings. Beware: The Code argument must not contain commas. */ #ifndef IF_LINT # if defined GCC_LINT || defined lint # define IF_LINT(Code) Code # else # define IF_LINT(Code) /* empty */ # endif #endif /* * Context of comparison operation. */ struct context { #ifdef ELEMENT /* Vectors being compared. */ ELEMENT const *xvec; ELEMENT const *yvec; #endif /* Extra fields. */ EXTRA_CONTEXT_FIELDS /* Vector, indexed by diagonal, containing 1 + the X coordinate of the point furthest along the given diagonal in the forward search of the edit matrix. */ OFFSET *fdiag; /* Vector, indexed by diagonal, containing the X coordinate of the point furthest along the given diagonal in the backward search of the edit matrix. */ OFFSET *bdiag; #ifdef USE_HEURISTIC /* This corresponds to the diff --speed-large-files flag. With this heuristic, for vectors with a constant small density of changes, the algorithm is linear in the vector size. */ bool heuristic; #endif /* Edit scripts longer than this are too expensive to compute. */ OFFSET too_expensive; /* Snakes bigger than this are considered "big". */ #define SNAKE_LIMIT 20 }; struct partition { /* Midpoints of this partition. */ OFFSET xmid; OFFSET ymid; /* True if low half will be analyzed minimally. */ bool lo_minimal; /* Likewise for high half. */ bool hi_minimal; }; /* Find the midpoint of the shortest edit script for a specified portion of the two vectors. Scan from the beginnings of the vectors, and simultaneously from the ends, doing a breadth-first search through the space of edit-sequence. When the two searches meet, we have found the midpoint of the shortest edit sequence. If FIND_MINIMAL is true, find the minimal edit script regardless of expense. Otherwise, if the search is too expensive, use heuristics to stop the search and report a suboptimal answer. Set PART->(xmid,ymid) to the midpoint (XMID,YMID). The diagonal number XMID - YMID equals the number of inserted elements minus the number of deleted elements (counting only elements before the midpoint). Set PART->lo_minimal to true iff the minimal edit script for the left half of the partition is known; similarly for PART->hi_minimal. This function assumes that the first elements of the specified portions of the two vectors do not match, and likewise that the last elements do not match. The caller must trim matching elements from the beginning and end of the portions it is going to specify. If we return the "wrong" partitions, the worst this can do is cause suboptimal diff output. It cannot cause incorrect diff output. */ static void diag (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, bool find_minimal, struct partition *part, struct context *ctxt) { OFFSET *const fd = ctxt->fdiag; /* Give the compiler a chance. */ OFFSET *const bd = ctxt->bdiag; /* Additional help for the compiler. */ #ifdef ELEMENT ELEMENT const *const xv = ctxt->xvec; /* Still more help for the compiler. */ ELEMENT const *const yv = ctxt->yvec; /* And more and more . . . */ #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) #else #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) #endif const OFFSET dmin = xoff - ylim; /* Minimum valid diagonal. */ const OFFSET dmax = xlim - yoff; /* Maximum valid diagonal. */ const OFFSET fmid = xoff - yoff; /* Center diagonal of top-down search. */ const OFFSET bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ OFFSET fmin = fmid; OFFSET fmax = fmid; /* Limits of top-down search. */ OFFSET bmin = bmid; OFFSET bmax = bmid; /* Limits of bottom-up search. */ OFFSET c; /* Cost. */ bool odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd diagonal with respect to the northwest. */ fd[fmid] = xoff; bd[bmid] = xlim; for (c = 1;; ++c) { OFFSET d; /* Active diagonal. */ bool big_snake = false; /* Extend the top-down search by an edit step in each diagonal. */ if (fmin > dmin) fd[--fmin - 1] = -1; else ++fmin; if (fmax < dmax) fd[++fmax + 1] = -1; else --fmax; for (d = fmax; d >= fmin; d -= 2) { OFFSET x; OFFSET y; OFFSET tlo = fd[d - 1]; OFFSET thi = fd[d + 1]; OFFSET x0 = tlo < thi ? thi : tlo + 1; for (x = x0, y = x0 - d; x < xlim && y < ylim && XREF_YREF_EQUAL (x, y); x++, y++) continue; if (x - x0 > SNAKE_LIMIT) big_snake = true; fd[d] = x; if (odd && bmin <= d && d <= bmax && bd[d] <= x) { part->xmid = x; part->ymid = y; part->lo_minimal = part->hi_minimal = true; return; } } /* Similarly extend the bottom-up search. */ if (bmin > dmin) bd[--bmin - 1] = OFFSET_MAX; else ++bmin; if (bmax < dmax) bd[++bmax + 1] = OFFSET_MAX; else --bmax; for (d = bmax; d >= bmin; d -= 2) { OFFSET x; OFFSET y; OFFSET tlo = bd[d - 1]; OFFSET thi = bd[d + 1]; OFFSET x0 = tlo < thi ? tlo : thi - 1; for (x = x0, y = x0 - d; xoff < x && yoff < y && XREF_YREF_EQUAL (x - 1, y - 1); x--, y--) continue; if (x0 - x > SNAKE_LIMIT) big_snake = true; bd[d] = x; if (!odd && fmin <= d && d <= fmax && x <= fd[d]) { part->xmid = x; part->ymid = y; part->lo_minimal = part->hi_minimal = true; return; } } if (find_minimal) continue; #ifdef USE_HEURISTIC bool heuristic = ctxt->heuristic; #else bool heuristic = false; #endif /* Heuristic: check occasionally for a diagonal that has made lots of progress compared with the edit distance. If we have any such, find the one that has made the most progress and return it as if it had succeeded. With this heuristic, for vectors with a constant small density of changes, the algorithm is linear in the vector size. */ if (200 < c && big_snake && heuristic) { { OFFSET best = 0; for (d = fmax; d >= fmin; d -= 2) { OFFSET dd = d - fmid; OFFSET x = fd[d]; OFFSET y = x - d; OFFSET v = (x - xoff) * 2 - dd; if (v > 12 * (c + (dd < 0 ? -dd : dd))) { if (v > best && xoff + SNAKE_LIMIT <= x && x < xlim && yoff + SNAKE_LIMIT <= y && y < ylim) { /* We have a good enough best diagonal; now insist that it end with a significant snake. */ int k; for (k = 1; XREF_YREF_EQUAL (x - k, y - k); k++) if (k == SNAKE_LIMIT) { best = v; part->xmid = x; part->ymid = y; break; } } } } if (best > 0) { part->lo_minimal = true; part->hi_minimal = false; return; } } { OFFSET best = 0; for (d = bmax; d >= bmin; d -= 2) { OFFSET dd = d - bmid; OFFSET x = bd[d]; OFFSET y = x - d; OFFSET v = (xlim - x) * 2 + dd; if (v > 12 * (c + (dd < 0 ? -dd : dd))) { if (v > best && xoff < x && x <= xlim - SNAKE_LIMIT && yoff < y && y <= ylim - SNAKE_LIMIT) { /* We have a good enough best diagonal; now insist that it end with a significant snake. */ int k; for (k = 0; XREF_YREF_EQUAL (x + k, y + k); k++) if (k == SNAKE_LIMIT - 1) { best = v; part->xmid = x; part->ymid = y; break; } } } } if (best > 0) { part->lo_minimal = false; part->hi_minimal = true; return; } } } /* Heuristic: if we've gone well beyond the call of duty, give up and report halfway between our best results so far. */ if (c >= ctxt->too_expensive) { OFFSET fxybest; OFFSET fxbest IF_LINT (= 0); OFFSET bxybest; OFFSET bxbest IF_LINT (= 0); /* Find forward diagonal that maximizes X + Y. */ fxybest = -1; for (d = fmax; d >= fmin; d -= 2) { OFFSET x = MIN (fd[d], xlim); OFFSET y = x - d; if (ylim < y) { x = ylim + d; y = ylim; } if (fxybest < x + y) { fxybest = x + y; fxbest = x; } } /* Find backward diagonal that minimizes X + Y. */ bxybest = OFFSET_MAX; for (d = bmax; d >= bmin; d -= 2) { OFFSET x = MAX (xoff, bd[d]); OFFSET y = x - d; if (y < yoff) { x = yoff + d; y = yoff; } if (x + y < bxybest) { bxybest = x + y; bxbest = x; } } /* Use the better of the two diagonals. */ if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) { part->xmid = fxbest; part->ymid = fxybest - fxbest; part->lo_minimal = true; part->hi_minimal = false; } else { part->xmid = bxbest; part->ymid = bxybest - bxbest; part->lo_minimal = false; part->hi_minimal = true; } return; } } #undef XREF_YREF_EQUAL } /* Compare in detail contiguous subsequences of the two vectors which are known, as a whole, to match each other. The subsequence of vector 0 is [XOFF, XLIM) and likewise for vector 1. Note that XLIM, YLIM are exclusive bounds. All indices into the vectors are origin-0. If FIND_MINIMAL, find a minimal difference no matter how expensive it is. The results are recorded by invoking NOTE_DELETE and NOTE_INSERT. Return false if terminated normally, or true if terminated through early abort. */ static bool compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, bool find_minimal, struct context *ctxt) { #ifdef ELEMENT ELEMENT const *xv = ctxt->xvec; /* Help the compiler. */ ELEMENT const *yv = ctxt->yvec; #define XREF_YREF_EQUAL(x,y) EQUAL (xv[x], yv[y]) #else #define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y) #endif while (true) { /* Slide down the bottom initial diagonal. */ while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff)) { xoff++; yoff++; } /* Slide up the top initial diagonal. */ while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1)) { xlim--; ylim--; } /* Handle simple cases. */ if (xoff == xlim) { while (yoff < ylim) { NOTE_INSERT (ctxt, yoff); if (EARLY_ABORT (ctxt)) return true; yoff++; } break; } if (yoff == ylim) { while (xoff < xlim) { NOTE_DELETE (ctxt, xoff); if (EARLY_ABORT (ctxt)) return true; xoff++; } break; } struct partition part; /* Find a point of correspondence in the middle of the vectors. */ diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt); /* Use the partitions to split this problem into subproblems. */ OFFSET xoff1, xlim1, yoff1, ylim1, xoff2, xlim2, yoff2, ylim2; bool find_minimal1, find_minimal2; if (!NOTE_ORDERED && ((xlim + ylim) - (part.xmid + part.ymid) < (part.xmid + part.ymid) - (xoff + yoff))) { /* The second problem is smaller and the caller doesn't care about order, so do the second problem first to lessen recursion. */ xoff1 = part.xmid; xlim1 = xlim; yoff1 = part.ymid; ylim1 = ylim; find_minimal1 = part.hi_minimal; xoff2 = xoff; xlim2 = part.xmid; yoff2 = yoff; ylim2 = part.ymid; find_minimal2 = part.lo_minimal; } else { xoff1 = xoff; xlim1 = part.xmid; yoff1 = yoff; ylim1 = part.ymid; find_minimal1 = part.lo_minimal; xoff2 = part.xmid; xlim2 = xlim; yoff2 = part.ymid; ylim2 = ylim; find_minimal2 = part.hi_minimal; } /* Recurse to do one subproblem. */ bool early = compareseq (xoff1, xlim1, yoff1, ylim1, find_minimal1, ctxt); if (early) return early; /* Iterate to do the other subproblem. */ xoff = xoff2; xlim = xlim2; yoff = yoff2; ylim = ylim2; find_minimal = find_minimal2; } return false; #undef XREF_YREF_EQUAL } #undef ELEMENT #undef EQUAL #undef OFFSET #undef EXTRA_CONTEXT_FIELDS #undef NOTE_DELETE #undef NOTE_INSERT #undef EARLY_ABORT #undef USE_HEURISTIC #undef XVECREF_YVECREF_EQUAL #undef OFFSET_MAX ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirchownmod.c�����������������������������������������������������������0000664�0000000�0000000�00000011464�14110572173�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change the ownership and mode bits of a directory. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "dirchownmod.h" #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include "stat-macros.h" #ifndef HAVE_FCHMOD # define HAVE_FCHMOD 0 # undef fchmod # define fchmod(fd, mode) (-1) #endif /* Change the ownership and mode bits of a directory. If FD is nonnegative, it should be a file descriptor associated with the directory; close it before returning. DIR is the name of the directory. If MKDIR_MODE is not (mode_t) -1, mkdir (DIR, MKDIR_MODE) has just been executed successfully with umask zero, so DIR should be a directory (not a symbolic link). First, set the file's owner to OWNER and group to GROUP, but leave the owner alone if OWNER is (uid_t) -1, and similarly for GROUP. Then, set the file's mode bits to MODE, except preserve any of the bits that correspond to zero bits in MODE_BITS. In other words, MODE_BITS is a mask that specifies which of the file's mode bits should be set or cleared. MODE should be a subset of MODE_BITS, which in turn should be a subset of CHMOD_MODE_BITS. This implementation assumes the current umask is zero. Return 0 if successful, -1 (setting errno) otherwise. Unsuccessful calls may do the chown but not the chmod. */ int dirchownmod (int fd, char const *dir, mode_t mkdir_mode, uid_t owner, gid_t group, mode_t mode, mode_t mode_bits) { struct stat st; int result = (fd < 0 ? stat (dir, &st) : fstat (fd, &st)); if (result == 0) { mode_t dir_mode = st.st_mode; /* Check whether DIR is a directory. If FD is nonnegative, this check avoids changing the ownership and mode bits of the wrong file in many cases. This doesn't fix all the race conditions, but it is better than nothing. */ if (! S_ISDIR (dir_mode)) { errno = ENOTDIR; result = -1; } else { /* If at least one of the S_IXUGO bits are set, chown might clear the S_ISUID and S_SGID bits. Keep track of any file mode bits whose values are indeterminate due to this issue. */ mode_t indeterminate = 0; /* On some systems, chown clears S_ISUID and S_ISGID, so do chown before chmod. On older System V hosts, ordinary users can give their files away via chown; don't worry about that here, since users shouldn't do that. */ if ((owner != (uid_t) -1 && owner != st.st_uid) || (group != (gid_t) -1 && group != st.st_gid)) { result = (0 <= fd ? fchown (fd, owner, group) : mkdir_mode != (mode_t) -1 ? lchown (dir, owner, group) : chown (dir, owner, group)); /* Either the user cares about an indeterminate bit and it'll be set properly by chmod below, or the user doesn't care and it's OK to use the bit's pre-chown value. So there's no need to re-stat DIR here. */ if (result == 0 && (dir_mode & S_IXUGO)) indeterminate = dir_mode & (S_ISUID | S_ISGID); } /* If the file mode bits might not be right, use chmod to change them. Don't change bits the user doesn't care about. */ if (result == 0 && (((dir_mode ^ mode) | indeterminate) & mode_bits)) { mode_t chmod_mode = mode | (dir_mode & CHMOD_MODE_BITS & ~mode_bits); result = (HAVE_FCHMOD && 0 <= fd ? fchmod (fd, chmod_mode) : mkdir_mode != (mode_t) -1 ? lchmod (dir, chmod_mode) : chmod (dir, chmod_mode)); } } } if (0 <= fd) { if (result == 0) result = close (fd); else { int e = errno; close (fd); errno = e; } } return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirchownmod.h�����������������������������������������������������������0000664�0000000�0000000�00000001527�14110572173�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change the ownership and mode bits of a directory. Copyright (C) 2006-2021 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 <sys/types.h> int dirchownmod (int, char const *, mode_t, uid_t, gid_t, mode_t, mode_t); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirent--.h��������������������������������������������������������������0000664�0000000�0000000�00000001611�14110572173�0016634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like dirent.h, but redefine some names to avoid glitches. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include "dirent-safer.h" #undef opendir #define opendir opendir_safer #define GNULIB_defined_opendir 1 �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirent-private.h��������������������������������������������������������0000664�0000000�0000000�00000003161�14110572173�0020154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Private details of the DIR type. Copyright (C) 2011-2021 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/>. */ #ifndef _DIRENT_PRIVATE_H #define _DIRENT_PRIVATE_H 1 #define WIN32_LEAN_AND_MEAN #include <windows.h> /* Don't assume that UNICODE is not defined. */ #undef WIN32_FIND_DATA #define WIN32_FIND_DATA WIN32_FIND_DATAA struct gl_directory { /* Status, or error code to produce in next readdir() call. -2 means the end of the directory is already reached, -1 means the entry was already filled by FindFirstFile, 0 means the entry needs to be filled using FindNextFile. A positive value is an error code. */ int status; /* Handle, reading the directory, at current position. */ HANDLE current; /* Found directory entry. */ WIN32_FIND_DATA entry; /* Argument to pass to FindFirstFile. It consists of the absolutized directory name, followed by a directory separator and the wildcards. */ char dir_name_mask[1]; }; #endif /* _DIRENT_PRIVATE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirent-safer.h����������������������������������������������������������0000664�0000000�0000000�00000001704�14110572173�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dirent-like functions, but avoid some glitches. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <dirent.h> #ifdef __cplusplus extern "C" { #endif DIR *opendir_safer (const char *name) _GL_ATTRIBUTE_DEALLOC (closedir, 1); #ifdef __cplusplus } #endif ������������������������������������������������������������gnulib-20210822~d383792/lib/dirent.in.h�������������������������������������������������������������0000664�0000000�0000000�00000025222�14110572173�0017113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <dirent.h>. Copyright (C) 2006-2021 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/>. */ #ifndef _@GUARD_PREFIX@_DIRENT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_DIRENT_H@ # @INCLUDE_NEXT@ @NEXT_DIRENT_H@ #endif #ifndef _@GUARD_PREFIX@_DIRENT_H #define _@GUARD_PREFIX@_DIRENT_H /* Get ino_t. Needed on some systems, including glibc 2.8. */ #include <sys/types.h> #if !@HAVE_DIRENT_H@ /* Define types DIR and 'struct dirent'. */ # if !GNULIB_defined_struct_dirent struct dirent { char d_type; char d_name[1]; }; /* Possible values for 'd_type'. */ # define DT_UNKNOWN 0 # define DT_FIFO 1 /* FIFO */ # define DT_CHR 2 /* character device */ # define DT_DIR 4 /* directory */ # define DT_BLK 6 /* block device */ # define DT_REG 8 /* regular file */ # define DT_LNK 10 /* symbolic link */ # define DT_SOCK 12 /* socket */ # define DT_WHT 14 /* whiteout */ typedef struct gl_directory DIR; # define GNULIB_defined_struct_dirent 1 # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # 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. */ /* Declare overridden functions. */ #if @GNULIB_CLOSEDIR@ # if @REPLACE_CLOSEDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef closedir # define closedir rpl_closedir # define GNULIB_defined_closedir 1 # endif _GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (closedir, int, (DIR *dirp)); # else # if !@HAVE_CLOSEDIR@ _GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (closedir, int, (DIR *dirp)); # endif _GL_CXXALIASWARN (closedir); #elif defined GNULIB_POSIXCHECK # undef closedir # if HAVE_RAW_DECL_CLOSEDIR _GL_WARN_ON_USE (closedir, "closedir is not portable - " "use gnulib module closedir for portability"); # endif #endif #if @GNULIB_OPENDIR@ # if @REPLACE_OPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef opendir # define opendir rpl_opendir # define GNULIB_defined_opendir 1 # endif _GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); # else # if !@HAVE_OPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name)); # endif _GL_CXXALIASWARN (opendir); #else # if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined opendir /* For -Wmismatched-dealloc: Associate opendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef opendir # if HAVE_RAW_DECL_OPENDIR _GL_WARN_ON_USE (opendir, "opendir is not portable - " "use gnulib module opendir for portability"); # endif # endif #endif #if @GNULIB_READDIR@ # if !@HAVE_READDIR@ _GL_FUNCDECL_SYS (readdir, struct dirent *, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (readdir, struct dirent *, (DIR *dirp)); _GL_CXXALIASWARN (readdir); #elif defined GNULIB_POSIXCHECK # undef readdir # if HAVE_RAW_DECL_READDIR _GL_WARN_ON_USE (readdir, "readdir is not portable - " "use gnulib module readdir for portability"); # endif #endif #if @GNULIB_REWINDDIR@ # if !@HAVE_REWINDDIR@ _GL_FUNCDECL_SYS (rewinddir, void, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rewinddir, void, (DIR *dirp)); _GL_CXXALIASWARN (rewinddir); #elif defined GNULIB_POSIXCHECK # undef rewinddir # if HAVE_RAW_DECL_REWINDDIR _GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - " "use gnulib module rewinddir for portability"); # endif #endif #if @GNULIB_DIRFD@ /* Return the file descriptor associated with the given directory stream, or -1 if none exists. */ # if @REPLACE_DIRFD@ /* On kLIBC, dirfd() is a macro that does not work. Undefine it. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) || defined dirfd # undef dirfd # define dirfd rpl_dirfd # endif _GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (dirfd, int, (DIR *)); # ifdef __KLIBC__ /* Gnulib internal hooks needed to maintain the dirfd metadata. */ _GL_EXTERN_C int _gl_register_dirp_fd (int fd, DIR *dirp) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_dirp_fd (int fd); # endif # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined dirfd /* dirfd is defined as a macro and not as a function. Turn it into a function and get rid of the macro. */ static inline int (dirfd) (DIR *dp) { return dirfd (dp); } # undef dirfd # endif # if !(@HAVE_DECL_DIRFD@ || defined dirfd) _GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (dirfd, int, (DIR *)); # endif _GL_CXXALIASWARN (dirfd); #elif defined GNULIB_POSIXCHECK # undef dirfd # if HAVE_RAW_DECL_DIRFD _GL_WARN_ON_USE (dirfd, "dirfd is unportable - " "use gnulib module dirfd for portability"); # endif #endif #if @GNULIB_FDOPENDIR@ /* Open a directory stream visiting the given directory file descriptor. Return NULL and set errno if fd is not visiting a directory. On success, this function consumes fd (it will be implicitly closed either by this function or by a subsequent closedir). */ # if @REPLACE_FDOPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopendir # define fdopendir rpl_fdopendir # endif _GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd)); # else # if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd)); # endif _GL_CXXALIASWARN (fdopendir); #else # if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined fdopendir /* For -Wmismatched-dealloc: Associate fdopendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fdopendir # if HAVE_RAW_DECL_FDOPENDIR _GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - " "use gnulib module fdopendir for portability"); # endif # endif #endif #if @GNULIB_SCANDIR@ /* Scan the directory DIR, calling FILTER on each directory entry. Entries for which FILTER returns nonzero are individually malloc'd, sorted using qsort with CMP, and collected in a malloc'd array in *NAMELIST. Returns the number of entries selected, or -1 on error. */ # if !@HAVE_SCANDIR@ _GL_FUNCDECL_SYS (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **)) _GL_ARG_NONNULL ((1, 2, 4))); # endif /* Need to cast, because on glibc systems, the fourth parameter is int (*cmp) (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **))); _GL_CXXALIASWARN (scandir); #elif defined GNULIB_POSIXCHECK # undef scandir # if HAVE_RAW_DECL_SCANDIR _GL_WARN_ON_USE (scandir, "scandir is unportable - " "use gnulib module scandir for portability"); # endif #endif #if @GNULIB_ALPHASORT@ /* Compare two 'struct dirent' entries alphabetically. */ # if !@HAVE_ALPHASORT@ _GL_FUNCDECL_SYS (alphasort, int, (const struct dirent **, const struct dirent **) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on glibc systems, the parameters are (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (alphasort, int, (const struct dirent **, const struct dirent **)); _GL_CXXALIASWARN (alphasort); #elif defined GNULIB_POSIXCHECK # undef alphasort # if HAVE_RAW_DECL_ALPHASORT _GL_WARN_ON_USE (alphasort, "alphasort is unportable - " "use gnulib module alphasort for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_DIRENT_H */ #endif /* _@GUARD_PREFIX@_DIRENT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirfd.c�����������������������������������������������������������������0000664�0000000�0000000�00000004447�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirfd.c -- return the file descriptor associated with an open DIR* Copyright (C) 2001, 2006, 2008-2021 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 Jim Meyering. */ #include <config.h> #include <dirent.h> #include <errno.h> #ifdef __KLIBC__ # include <stdlib.h> # include <io.h> static struct dirp_fd_list { DIR *dirp; int fd; struct dirp_fd_list *next; } *dirp_fd_start = NULL; /* Register fd associated with dirp to dirp_fd_list. */ int _gl_register_dirp_fd (int fd, DIR *dirp) { struct dirp_fd_list *new_dirp_fd = malloc (sizeof *new_dirp_fd); if (!new_dirp_fd) return -1; new_dirp_fd->dirp = dirp; new_dirp_fd->fd = fd; new_dirp_fd->next = dirp_fd_start; dirp_fd_start = new_dirp_fd; return 0; } /* Unregister fd from dirp_fd_list with closing it */ void _gl_unregister_dirp_fd (int fd) { struct dirp_fd_list *dirp_fd; struct dirp_fd_list *dirp_fd_prev; for (dirp_fd_prev = NULL, dirp_fd = dirp_fd_start; dirp_fd; dirp_fd_prev = dirp_fd, dirp_fd = dirp_fd->next) { if (dirp_fd->fd == fd) { if (dirp_fd_prev) dirp_fd_prev->next = dirp_fd->next; else /* dirp_fd == dirp_fd_start */ dirp_fd_start = dirp_fd_start->next; close (fd); free (dirp_fd); break; } } } #endif int dirfd (DIR *dir_p) { int fd = DIR_TO_FD (dir_p); if (fd == -1) #ifndef __KLIBC__ errno = ENOTSUP; #else { struct dirp_fd_list *dirp_fd; for (dirp_fd = dirp_fd_start; dirp_fd; dirp_fd = dirp_fd->next) if (dirp_fd->dirp == dir_p) return dirp_fd->fd; errno = EINVAL; } #endif return fd; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirname-lgpl.c����������������������������������������������������������0000664�0000000�0000000�00000006142�14110572173�0017567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2021 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/>. */ #include <config.h> #include "dirname.h" #include <stdlib.h> #include <string.h> /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirname.c���������������������������������������������������������������0000664�0000000�0000000�00000002264�14110572173�0016634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 "dirname.h" #include <stdlib.h> #include <string.h> #include "xalloc.h" /* Just like mdir_name (dirname-lgpl.c), except, rather than returning NULL upon malloc failure, here, we report the "memory exhausted" condition and exit. */ char * dir_name (char const *file) { char *result = mdir_name (file); if (!result) xalloc_die (); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dirname.h���������������������������������������������������������������0000664�0000000�0000000�00000003052�14110572173�0016635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-2021 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/>. */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include <stdbool.h> # include <stdlib.h> # include "filename.h" # include "basename-lgpl.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *dir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; # endif char *mdir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dosname.h���������������������������������������������������������������0000664�0000000�0000000�00000001452�14110572173�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* File names on MS-DOS/Windows systems. Copyright (C) 2000-2001, 2004-2006, 2009-2021 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/>. */ #include "filename.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000002767�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a file descriptor. Copyright (C) 2009-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "full-write.h" #include "vasnprintf.h" int dprintf (int fd, const char *format, ...) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); va_list args; va_start (args, format); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) return -1; if (full_write (fd, output, len) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ���������gnulib-20210822~d383792/lib/dtoastr.c���������������������������������������������������������������0000664�0000000�0000000�00000001414�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'double' to accurate string. Copyright (C) 2010-2021 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/>. */ #define LENGTH 2 #include "ftoastr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dtotimespec.c�����������������������������������������������������������0000664�0000000�0000000�00000002772�14110572173�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert double to timespec. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Paul Eggert */ /* Convert the double value SEC to a struct timespec. Round toward positive infinity. On overflow, return an extremal value. */ #include <config.h> #include "timespec.h" #include "intprops.h" struct timespec dtotimespec (double sec) { if (! (TYPE_MINIMUM (time_t) < sec)) return make_timespec (TYPE_MINIMUM (time_t), 0); else if (! (sec < 1.0 + TYPE_MAXIMUM (time_t))) return make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_HZ - 1); else { time_t s = sec; double frac = TIMESPEC_HZ * (sec - s); long ns = frac; ns += ns < frac; s += ns / TIMESPEC_HZ; ns %= TIMESPEC_HZ; if (ns < 0) { s--; ns += TIMESPEC_HZ; } return make_timespec (s, ns); } } ������gnulib-20210822~d383792/lib/dummy.c�����������������������������������������������������������������0000664�0000000�0000000�00000002120�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 2007, 2009-2021 Free Software Foundation, Inc. This file is in the public domain. */ /* Some systems, reportedly OpenBSD and Mac OS X, refuse to create libraries without any object files. You might get an error like: > ar cru .libs/libgl.a > ar: no archive members specified Compiling this file, and adding its object file to the library, will prevent the library from being empty. */ /* Some systems, such as Solaris with cc 5.0, refuse to work with libraries that don't export any symbol. You might get an error like: > cc ... libgnu.a > ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a Compiling this file, and adding its object file to the library, will prevent the library from exporting no symbols. */ #ifdef __sun /* This declaration ensures that the library will export at least 1 symbol. */ int gl_dummy_symbol; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dup-safer-flag.c��������������������������������������������������������0000664�0000000�0000000�00000002444�14110572173�0020012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a file descriptor result, avoiding clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2001, 2004-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. If FLAG contains O_CLOEXEC, behave like fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD). */ int dup_safer_flag (int fd, int flag) { return fcntl (fd, (flag & O_CLOEXEC) ? F_DUPFD_CLOEXEC : F_DUPFD, STDERR_FILENO + 1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dup-safer.c�������������������������������������������������������������0000664�0000000�0000000�00000002027�14110572173�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dup, but avoid some glitches. Copyright (C) 2001, 2004-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int dup_safer (int fd) { return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dup.c�������������������������������������������������������������������0000664�0000000�0000000�00000003637�14110572173�0016012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef dup #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _dup (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define dup_nothrow _dup # endif #elif defined __KLIBC__ # include <fcntl.h> # include <sys/stat.h> # include <InnoTekLIBC/backend.h> static int dup_nothrow (int fd) { int dupfd; struct stat sbuf; dupfd = dup (fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { char path[_MAX_PATH]; /* Get a path from fd */ if (!__libc_Back_ioFHToPath (fd, path, sizeof (path))) dupfd = open (path, O_RDONLY); } return dupfd; } #else # define dup_nothrow dup #endif int rpl_dup (int fd) { int result = dup_nothrow (fd); #if REPLACE_FCHDIR if (result >= 0) result = _gl_register_dup (fd, result); #endif return result; } �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dup2.c������������������������������������������������������������������0000664�0000000�0000000�00000007742�14110572173�0016075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2021 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 */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #undef dup2 #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = _dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow _dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 #elif defined __KLIBC__ # include <InnoTekLIBC/backend.h> static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 #endif int rpl_dup2 (int fd, int desired_fd) { int result; #ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; #endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; #if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); #endif return result; } ������������������������������gnulib-20210822~d383792/lib/dup3.c������������������������������������������������������������������0000664�0000000�0000000�00000005256�14110572173�0016074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a file descriptor, applying specific flags. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include "binary-io.h" int dup3 (int oldfd, int newfd, int flags) { #if HAVE_DUP3 # undef dup3 # if HAVE_SETDTABLESIZE /* Avoid a cygwin crasher. */ setdtablesize (newfd + 1); # endif /* Try the system call first, if it exists. (We may be running with a glibc that has the function but with an older kernel that lacks it.) */ { /* Cache the information whether the system call really exists. */ static int have_dup3_really; /* 0 = unknown, 1 = yes, -1 = no */ if (have_dup3_really >= 0) { int result = dup3 (oldfd, newfd, flags); if (!(result < 0 && errno == ENOSYS)) { have_dup3_really = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, newfd); # endif return result; } have_dup3_really = -1; } } #endif if (newfd < 0 || newfd >= getdtablesize () || fcntl (oldfd, F_GETFD) == -1) { errno = EBADF; return -1; } if (newfd == oldfd) { errno = EINVAL; return -1; } /* Check the supported flags. Note that O_NONBLOCK is not supported, because setting it on newfd would implicitly also set it on oldfd. */ if ((flags & ~(O_CLOEXEC | O_BINARY | O_TEXT)) != 0) { errno = EINVAL; return -1; } if (flags & O_CLOEXEC) { int result; close (newfd); result = fcntl (oldfd, F_DUPFD_CLOEXEC, newfd); if (newfd < result) { close (result); errno = EIO; result = -1; } if (result < 0) return -1; } else if (dup2 (oldfd, newfd) < 0) return -1; #if O_BINARY if (flags & O_BINARY) set_binary_mode (newfd, O_BINARY); else if (flags & O_TEXT) set_binary_mode (newfd, O_TEXT); #endif return newfd; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/duplocale.c�������������������������������������������������������������0000664�0000000�0000000�00000007167�14110572173�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a locale object. Copyright (C) 2009-2021 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>, 2007. */ #include <config.h> /* Specification. */ #include <locale.h> #include <errno.h> #include <string.h> #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) #undef duplocale locale_t rpl_duplocale (locale_t locale) { /* Work around crash in the duplocale function in glibc < 2.12. See <https://sourceware.org/bugzilla/show_bug.cgi?id=10969>. Also, on AIX 7.1, duplocale(LC_GLOBAL_LOCALE) returns (locale_t)0 with errno set to EINVAL. Also, on NetBSD 7.0, duplocale(LC_GLOBAL_LOCALE) returns a locale that corresponds to the C locale. */ if (locale == LC_GLOBAL_LOCALE) { /* Create a copy of the locale by fetching the name of each locale category, starting with LC_CTYPE. */ static struct { int cat; int mask; } const categories[] = { { LC_NUMERIC, LC_NUMERIC_MASK }, { LC_TIME, LC_TIME_MASK }, { LC_COLLATE, LC_COLLATE_MASK }, { LC_MONETARY, LC_MONETARY_MASK }, { LC_MESSAGES, LC_MESSAGES_MASK } #ifdef LC_PAPER , { LC_PAPER, LC_PAPER_MASK } #endif #ifdef LC_NAME , { LC_NAME, LC_NAME_MASK } #endif #ifdef LC_ADDRESS , { LC_ADDRESS, LC_ADDRESS_MASK } #endif #ifdef LC_TELEPHONE , { LC_TELEPHONE, LC_TELEPHONE_MASK } #endif #ifdef LC_MEASUREMENT , { LC_MEASUREMENT, LC_MEASUREMENT_MASK } #endif #ifdef LC_IDENTIFICATION , { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK } #endif }; char base_name[SETLOCALE_NULL_MAX]; int err; locale_t base_copy; unsigned int i; err = setlocale_null_r (LC_CTYPE, base_name, sizeof (base_name)); if (err) { errno = err; return NULL; } base_copy = newlocale (LC_ALL_MASK, base_name, NULL); if (base_copy == NULL) return NULL; for (i = 0; i < SIZEOF (categories); i++) { int category = categories[i].cat; int category_mask = categories[i].mask; char name[SETLOCALE_NULL_MAX]; err = setlocale_null_r (category, name, sizeof (name)); if (err) { errno = err; return NULL; } if (strcmp (name, base_name) != 0) { locale_t copy = newlocale (category_mask, name, base_copy); if (copy == NULL) { int saved_errno = errno; freelocale (base_copy); errno = saved_errno; return NULL; } /* No need to call freelocale (base_copy) if copy != base_copy; the newlocale function already takes care of doing it. */ base_copy = copy; } } return base_copy; } return duplocale (locale); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/dynarray.h��������������������������������������������������������������0000664�0000000�0000000�00000022302�14110572173�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright 2021 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, 2021. */ #ifndef _GL_DYNARRAY_H #define _GL_DYNARRAY_H /* Before including this file, you need to define: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: */ /* Initialize a dynamic array object. This must be called before any use of the object. */ #if 0 static void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list); #endif /* Deallocate the dynamic array and its elements. */ #if 0 static void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list); #endif /* Return true if the dynamic array is in an error state. */ #if 0 static bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list); #endif /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ #if 0 static void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list); #endif /* Return the number of elements which have been added to the dynamic array. */ #if 0 static size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index); #endif /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ #if 0 static void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item); #endif /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list); #endif /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ #if 0 static bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size); #endif /* Remove the last element of LIST if it is present. */ #if 0 static void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list); #endif /* Remove all elements from the list. The elements are freed, but the list itself is not. */ #if 0 static void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list); #endif #if defined DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ #if 0 static bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result); #endif #else /* !defined DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, size_t *lengthp); #endif #endif /* A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> */ /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_dynarray_at_failure gl_dynarray_at_failure #define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge #define __libc_dynarray_finalize gl_dynarray_finalize #define __libc_dynarray_resize_clear gl_dynarray_resize_clear #define __libc_dynarray_resize gl_dynarray_resize #if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX # ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) # endif /* Define auxiliary structs and declare auxiliary functions, common to all instantiations of dynarray. */ # include <malloc/dynarray.gl.h> /* Define the instantiation, specified through DYNARRAY_STRUCT DYNARRAY_ELEMENT DYNARRAY_PREFIX etc. */ # include <malloc/dynarray-skeleton.gl.h> #else /* This file is being included from one of the malloc/dynarray_*.c files. */ # include <malloc/dynarray.h> #endif #endif /* _GL_DYNARRAY_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/eealloc.c���������������������������������������������������������������0000664�0000000�0000000�00000001510�14110572173�0016612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation with expensive empty allocations. Copyright (C) 2012-2021 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 <config.h> #define EEALLOC_INLINE _GL_EXTERN_INLINE #include "eealloc.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/eealloc.h���������������������������������������������������������������0000664�0000000�0000000�00000005371�14110572173�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation with expensive empty allocations. Copyright (C) 2003, 2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003, based on prior work by Jim Meyering. This 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 _EEALLOC_H #define _EEALLOC_H /* malloc() and realloc() are allowed to return NULL when asked to allocate a memory block of 0 bytes; this is not an out-of-memory condition. (See ISO C 99 section 7.20.3.) In some places, this is not welcome, because it requires extra checking (so as not to confuse a zero-sized allocation with an out-of-memory condition). This file provides malloc()/realloc() workalikes which return non-NULL pointers for succeeding zero-sized allocations. GNU libc already defines malloc() and realloc() this way; on such platforms the workalikes are aliased to the original malloc()/realloc() functions. */ #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef EEALLOC_INLINE # define EEALLOC_INLINE _GL_INLINE #endif #if MALLOC_0_IS_NONNULL # define eemalloc malloc #else EEALLOC_INLINE void *eemalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_DEALLOC_FREE; EEALLOC_INLINE void * eemalloc (size_t n) { /* If n is zero, allocate a 1-byte block. */ if (n == 0) n = 1; return malloc (n); } #endif #if REALLOC_0_IS_NONNULL # define eerealloc realloc #else EEALLOC_INLINE void *eerealloc (void *p, size_t n) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); EEALLOC_INLINE void * eerealloc (void *p, size_t n) { /* If n is zero, allocate or keep a 1-byte block. */ if (n == 0) n = 1; return realloc (p, n); } #endif /* Maybe we should also define variants eenmalloc (size_t n, size_t s) - behaves like eemalloc (n * s) eezalloc (size_t n) - like eemalloc followed by memset 0 eecalloc (size_t n, size_t s) - like eemalloc (n * s) followed by memset 0 eenrealloc (void *p, size_t n, size_t s) - like eerealloc (p, n * s) If this would be useful in your application. please speak up. */ _GL_INLINE_HEADER_END #endif /* _EEALLOC_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/eloop-threshold.h�������������������������������������������������������0000664�0000000�0000000�00000006334�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Threshold at which to diagnose ELOOP. Generic version. Copyright (C) 2012-2021 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 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 _ELOOP_THRESHOLD_H #define _ELOOP_THRESHOLD_H 1 #include <limits.h> #ifdef _LIBC # include <sys/param.h> # define _GL_ATTRIBUTE_CONST __attribute__ ((const)) #else # include <unistd.h> # include "minmax.h" # define __sysconf sysconf # if (!defined SYMLOOP_MAX \ && ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX)) # define SYMLOOP_MAX 8 # endif #endif /* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic links that can be reliably traversed in the resolution of a pathname in the absence of a loop." This makes it a minimum that we should certainly accept. But it leaves open the possibility that more might sometimes work--just not "reliably". For example, Linux implements a complex policy whereby there is a small limit on the number of direct symlink traversals (a symlink to a symlink to a symlink), but larger limit on the total number of symlink traversals overall. Hence the SYMLOOP_MAX number should be the small one, but the limit library functions enforce on users should be the larger one. So, we use the larger of the reported SYMLOOP_MAX (if any) and our own constant MIN_ELOOP_THRESHOLD, below. This constant should be large enough that it never rules out a file name and directory tree that the underlying system (i.e. calls to 'open' et al) would resolve successfully. It should be small enough that actual loops are detected without a huge number of iterations. */ #ifndef MIN_ELOOP_THRESHOLD # define MIN_ELOOP_THRESHOLD 40 #endif /* Return the maximum number of symlink traversals to permit before diagnosing ELOOP. */ static inline unsigned int _GL_ATTRIBUTE_CONST __eloop_threshold (void) { #ifdef SYMLOOP_MAX const int symloop_max = SYMLOOP_MAX; #else /* The function is marked 'const' even though we use memory and call a function, because sysconf is required to return the same value in every call and so it must always be safe to call __eloop_threshold exactly once and reuse the value. */ static long int sysconf_symloop_max; if (sysconf_symloop_max == 0) sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX); const unsigned int symloop_max = (sysconf_symloop_max <= 0 ? _POSIX_SYMLOOP_MAX : sysconf_symloop_max); #endif return MAX (symloop_max, MIN_ELOOP_THRESHOLD); } #endif /* eloop-threshold.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/errno.in.h��������������������������������������������������������������0000664�0000000�0000000�00000016447�14110572173�0016764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-2021 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/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in <winsock2.h>. */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/error.c�����������������������������������������������������������������0000664�0000000�0000000�00000024751�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2021 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/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #if !_LIBC # include <config.h> #endif #include "error.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include <libintl.h> # include <stdbool.h> # include <stdint.h> # include <wchar.h> # define mbsrtowcs __mbsrtowcs # 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 # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #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. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include <errno.h> # include <limits.h> # include <libio/libioP.h> /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include <libio/iolibio.h> # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif # define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif �����������������������gnulib-20210822~d383792/lib/error.h�����������������������������������������������������������������0000664�0000000�0000000�00000004460�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2021 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 */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/euidaccess.c������������������������������������������������������������0000664�0000000�0000000�00000014157�14110572173�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* euidaccess -- check if effective user id can access file Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2021 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/>. */ /* Written by David MacKenzie and Torbjorn Granlund. Adapted for GNU C library by Roland McGrath. */ #ifndef _LIBC # include <config.h> #endif #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> #else # include "root-uid.h" #endif #if HAVE_LIBGEN_H # include <libgen.h> #endif #include <errno.h> #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #if defined EACCES && !defined EACCESS # define EACCESS EACCES #endif #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif #ifdef _LIBC # define access __access # define getuid __getuid # define getgid __getgid # define geteuid __geteuid # define getegid __getegid # define group_member __group_member # define euidaccess __euidaccess # undef stat # define stat stat64 #endif /* Return 0 if the user has permission of type MODE on FILE; otherwise, return -1 and set 'errno'. Like access, except that it uses the effective user and group id's instead of the real ones, and it does not always check for read-only file system, text busy, etc. */ int euidaccess (const char *file, int mode) { #if HAVE_FACCESSAT /* glibc, AIX 7, Solaris 11, Cygwin 1.7 */ return faccessat (AT_FDCWD, file, mode, AT_EACCESS); #elif defined EFF_ONLY_OK /* IRIX, OSF/1, Interix */ return access (file, mode | EFF_ONLY_OK); #elif defined ACC_SELF /* AIX */ return accessx (file, mode, ACC_SELF); #elif HAVE_EACCESS /* FreeBSD */ return eaccess (file, mode); #elif defined _WIN32 && ! defined __CYGWIN__ /* mingw */ return _access (file, mode); #else /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS */ uid_t uid = getuid (); gid_t gid = getgid (); uid_t euid = geteuid (); gid_t egid = getegid (); struct stat stats; # if HAVE_DECL_SETREGID && PREFER_NONREENTRANT_EUIDACCESS /* Define PREFER_NONREENTRANT_EUIDACCESS if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe. */ if (mode == F_OK) { int result = stat (file, &stats); return result != 0 && errno == EOVERFLOW ? 0 : result; } else { int result; int saved_errno; if (uid != euid) setreuid (euid, uid); if (gid != egid) setregid (egid, gid); result = access (file, mode); saved_errno = errno; /* Restore them. */ if (uid != euid) setreuid (uid, euid); if (gid != egid) setregid (gid, egid); errno = saved_errno; return result; } # else /* The following code assumes the traditional Unix model, and is not correct on systems that have ACLs or the like. However, it's better than nothing, and it is reentrant. */ unsigned int granted; if (uid == euid && gid == egid) /* If we are not set-uid or set-gid, access does the same. */ return access (file, mode); if (stat (file, &stats) == -1) return mode == F_OK && errno == EOVERFLOW ? 0 : -1; /* The super-user can read and write any file, and execute any file that anyone can execute. */ if (euid == ROOT_UID && ((mode & X_OK) == 0 || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) return 0; /* Convert the mode to traditional form, clearing any bogus bits. */ if (R_OK == 4 && W_OK == 2 && X_OK == 1 && F_OK == 0) mode &= 7; else mode = ((mode & R_OK ? 4 : 0) + (mode & W_OK ? 2 : 0) + (mode & X_OK ? 1 : 0)); if (mode == 0) return 0; /* The file exists. */ /* Convert the file's permission bits to traditional form. */ if (S_IRUSR == (4 << 6) && S_IWUSR == (2 << 6) && S_IXUSR == (1 << 6) && S_IRGRP == (4 << 3) && S_IWGRP == (2 << 3) && S_IXGRP == (1 << 3) && S_IROTH == (4 << 0) && S_IWOTH == (2 << 0) && S_IXOTH == (1 << 0)) granted = stats.st_mode; else granted = ((stats.st_mode & S_IRUSR ? 4 << 6 : 0) + (stats.st_mode & S_IWUSR ? 2 << 6 : 0) + (stats.st_mode & S_IXUSR ? 1 << 6 : 0) + (stats.st_mode & S_IRGRP ? 4 << 3 : 0) + (stats.st_mode & S_IWGRP ? 2 << 3 : 0) + (stats.st_mode & S_IXGRP ? 1 << 3 : 0) + (stats.st_mode & S_IROTH ? 4 << 0 : 0) + (stats.st_mode & S_IWOTH ? 2 << 0 : 0) + (stats.st_mode & S_IXOTH ? 1 << 0 : 0)); if (euid == stats.st_uid) granted >>= 6; else if (egid == stats.st_gid || group_member (stats.st_gid)) granted >>= 3; if ((mode & ~granted) == 0) return 0; __set_errno (EACCESS); return -1; # endif #endif } #undef euidaccess #ifdef weak_alias weak_alias (__euidaccess, euidaccess) #endif #ifdef TEST # include <error.h> # include <stdio.h> # include <stdlib.h> int main (int argc, char **argv) { char *file; int mode; int err; if (argc < 3) abort (); file = argv[1]; mode = atoi (argv[2]); err = euidaccess (file, mode); printf ("%d\n", err); if (err != 0) error (0, errno, "%s", file); exit (0); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exclude.c���������������������������������������������������������������0000664�0000000�0000000�00000042175�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exclude.c -- exclude file names Copyright (C) 1992-1994, 1997, 1999-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert <eggert@twinsun.com> and Sergey Poznyakoff <gray@gnu.org>. Thanks to Phil Proudman <phil@proudman51.freeserve.co.uk> for improvement suggestions. */ #include <config.h> #include <stdbool.h> #include <ctype.h> #include <errno.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wctype.h> #include <regex.h> #include "exclude.h" #include "hash.h" #include "mbuiter.h" #include "fnmatch.h" #include "xalloc.h" #include "verify.h" #include "filename.h" #if GNULIB_EXCLUDE_SINGLE_THREAD # include "unlocked-io.h" #endif /* Non-GNU systems lack these options, so we don't need to check them. */ #ifndef FNM_CASEFOLD # define FNM_CASEFOLD 0 #endif #ifndef FNM_EXTMATCH # define FNM_EXTMATCH 0 #endif #ifndef FNM_LEADING_DIR # define FNM_LEADING_DIR 0 #endif verify (((EXCLUDE_ANCHORED | EXCLUDE_INCLUDE | EXCLUDE_WILDCARDS) & (FNM_PATHNAME | FNM_NOESCAPE | FNM_PERIOD | FNM_LEADING_DIR | FNM_CASEFOLD | FNM_EXTMATCH)) == 0); /* Exclusion patterns are grouped into a singly-linked list of "exclusion segments". Each segment represents a set of patterns that can be matches using the same algorithm. Non-wildcard patterns are kept in hash tables, to speed up searches. Wildcard patterns are stored as arrays of patterns. */ /* An exclude pattern-options pair. The options are fnmatch options ORed with EXCLUDE_* options. */ struct patopts { int options; union { char const *pattern; regex_t re; } v; }; /* An array of pattern-options pairs. */ struct exclude_pattern { struct patopts *exclude; idx_t exclude_alloc; idx_t exclude_count; }; enum exclude_type { exclude_hash, /* a hash table of excluded names */ exclude_pattern /* an array of exclude patterns */ }; struct exclude_segment { struct exclude_segment *next; /* next segment in list */ enum exclude_type type; /* type of this segment */ int options; /* common options for this segment */ union { Hash_table *table; /* for type == exclude_hash */ struct exclude_pattern pat; /* for type == exclude_pattern */ } v; }; struct pattern_buffer { struct pattern_buffer *next; char *base; }; /* The exclude structure keeps a singly-linked list of exclude segments, maintained in reverse order. */ struct exclude { struct exclude_segment *head; struct pattern_buffer *patbuf; }; /* Register BUF in the pattern buffer list of EX. ADD_FUNC (see add_exclude_file and add_exclude_fp below) can use this function if it modifies the pattern, to ensure the allocated memory will be properly reclaimed upon calling free_exclude. */ void exclude_add_pattern_buffer (struct exclude *ex, char *buf) { struct pattern_buffer *pbuf = xmalloc (sizeof *pbuf); pbuf->base = buf; pbuf->next = ex->patbuf; ex->patbuf = pbuf; } /* Return true if STR has or may have wildcards, when matched with OPTIONS. Return false if STR definitely does not have wildcards. */ bool fnmatch_pattern_has_wildcards (const char *str, int options) { while (1) { switch (*str++) { case '.': case '{': case '}': case '(': case ')': if (options & EXCLUDE_REGEX) return true; break; case '\\': if (options & EXCLUDE_REGEX) continue; else str += ! (options & FNM_NOESCAPE) && *str; break; case '+': case '@': case '!': if (options & FNM_EXTMATCH && *str == '(') return true; break; case '?': case '*': case '[': return true; case '\0': return false; } } } static void unescape_pattern (char *str) { char const *q = str; do q += *q == '\\' && q[1]; while ((*str++ = *q++)); } /* Return a newly allocated and empty exclude list. */ struct exclude * new_exclude (void) { return xzalloc (sizeof *new_exclude ()); } /* Calculate the hash of string. */ static size_t string_hasher (void const *data, size_t n_buckets) { char const *p = data; return hash_string (p, n_buckets); } /* Ditto, for case-insensitive hashes */ static size_t string_hasher_ci (void const *data, size_t n_buckets) { char const *p = data; mbui_iterator_t iter; size_t value = 0; for (mbui_init (iter, p); mbui_avail (iter); mbui_advance (iter)) { mbchar_t m = mbui_cur (iter); wchar_t wc; if (m.wc_valid) wc = towlower (m.wc); else wc = *m.ptr; value = value * 31 + wc; } return value % n_buckets; } /* compare two strings for equality */ static bool string_compare (void const *data1, void const *data2) { char const *p1 = data1; char const *p2 = data2; return strcmp (p1, p2) == 0; } /* compare two strings for equality, case-insensitive */ static bool string_compare_ci (void const *data1, void const *data2) { char const *p1 = data1; char const *p2 = data2; return mbscasecmp (p1, p2) == 0; } static void string_free (void *data) { free (data); } /* Create new exclude segment of given TYPE and OPTIONS, and attach it to the head of EX. */ static void new_exclude_segment (struct exclude *ex, enum exclude_type type, int options) { struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment)); sp->type = type; sp->options = options; switch (type) { case exclude_pattern: break; case exclude_hash: sp->v.table = hash_initialize (0, NULL, (options & FNM_CASEFOLD) ? string_hasher_ci : string_hasher, (options & FNM_CASEFOLD) ? string_compare_ci : string_compare, string_free); break; } sp->next = ex->head; ex->head = sp; } /* Free a single exclude segment */ static void free_exclude_segment (struct exclude_segment *seg) { switch (seg->type) { case exclude_pattern: for (idx_t i = 0; i < seg->v.pat.exclude_count; i++) { if (seg->v.pat.exclude[i].options & EXCLUDE_REGEX) regfree (&seg->v.pat.exclude[i].v.re); } free (seg->v.pat.exclude); break; case exclude_hash: hash_free (seg->v.table); break; } free (seg); } /* Free the storage associated with an exclude list. */ void free_exclude (struct exclude *ex) { struct exclude_segment *seg; struct pattern_buffer *pbuf; for (seg = ex->head; seg; ) { struct exclude_segment *next = seg->next; free_exclude_segment (seg); seg = next; } for (pbuf = ex->patbuf; pbuf; ) { struct pattern_buffer *next = pbuf->next; free (pbuf->base); free (pbuf); pbuf = next; } free (ex); } /* Return zero if PATTERN matches F, obeying OPTIONS, except that (unlike fnmatch) wildcards are disabled in PATTERN. */ static int fnmatch_no_wildcards (char const *pattern, char const *f, int options) { if (! (options & FNM_LEADING_DIR)) return ((options & FNM_CASEFOLD) ? mbscasecmp (pattern, f) : strcmp (pattern, f)); else if (! (options & FNM_CASEFOLD)) { size_t patlen = strlen (pattern); int r = strncmp (pattern, f, patlen); if (! r) { r = f[patlen]; if (r == '/') r = 0; } return r; } else { /* Walk through a copy of F, seeing whether P matches any prefix of F. FIXME: This is an O(N**2) algorithm; it should be O(N). Also, the copy should not be necessary. However, fixing this will probably involve a change to the mbs* API. */ char *fcopy = xstrdup (f); char *p; int r; for (p = fcopy; ; *p++ = '/') { p = strchr (p, '/'); if (p) *p = '\0'; r = mbscasecmp (pattern, fcopy); if (!p || r <= 0) break; } free (fcopy); return r; } } bool exclude_fnmatch (char const *pattern, char const *f, int options) { int (*matcher) (char const *, char const *, int) = (options & EXCLUDE_WILDCARDS ? fnmatch : fnmatch_no_wildcards); bool matched = ((*matcher) (pattern, f, options) == 0); char const *p; if (! (options & EXCLUDE_ANCHORED)) for (p = f; *p && ! matched; p++) if (*p == '/' && p[1] != '/') matched = ((*matcher) (pattern, p + 1, options) == 0); return matched; } static bool exclude_patopts (struct patopts const *opts, char const *f) { int options = opts->options; return (options & EXCLUDE_REGEX) ? regexec (&opts->v.re, f, 0, NULL, 0) == 0 : exclude_fnmatch (opts->v.pattern, f, options); } /* Return true if the exclude_pattern segment SEG matches F. */ static bool file_pattern_matches (struct exclude_segment const *seg, char const *f) { idx_t exclude_count = seg->v.pat.exclude_count; struct patopts const *exclude = seg->v.pat.exclude; for (idx_t i = 0; i < exclude_count; i++) { if (exclude_patopts (exclude + i, f)) return true; } return false; } /* Return true if the exclude_hash segment SEG matches F. BUFFER is an auxiliary storage of the same length as F (with nul terminator included) */ static bool file_name_matches (struct exclude_segment const *seg, char const *f, char *buffer) { int options = seg->options; Hash_table *table = seg->v.table; do { /* initialize the pattern */ strcpy (buffer, f); while (1) { if (hash_lookup (table, buffer)) return true; if (options & FNM_LEADING_DIR) { char *p = strrchr (buffer, '/'); if (p) { *p = 0; continue; } } break; } if (!(options & EXCLUDE_ANCHORED)) { f = strchr (f, '/'); if (f) f++; } else break; } while (f); return false; } /* Return true if EX excludes F. */ bool excluded_file_name (struct exclude const *ex, char const *f) { struct exclude_segment *seg; bool invert = false; char *filename = NULL; /* If no patterns are given, the default is to include. */ if (!ex->head) return false; /* Scan through the segments, reporting the status of the first match. The segments are in reverse order, so this reports the status of the last match in the original option list. */ for (seg = ex->head; ; seg = seg->next) { if (seg->type == exclude_hash) { if (!filename) filename = xmalloc (strlen (f) + 1); if (file_name_matches (seg, f, filename)) break; } else { if (file_pattern_matches (seg, f)) break; } if (! seg->next) { /* If patterns are given but none match, the default is the opposite of the last segment (i.e., the first in the original option list). For example, in the command 'grep -r --exclude="a*" --include="*b" pat dir', the first option is --exclude so any file name matching neither a* nor *b is included. */ invert = true; break; } } free (filename); return invert ^ ! (seg->options & EXCLUDE_INCLUDE); } /* Append to EX the exclusion PATTERN with OPTIONS. */ void add_exclude (struct exclude *ex, char const *pattern, int options) { struct exclude_segment *seg; struct exclude_pattern *pat; struct patopts *patopts; if ((options & (EXCLUDE_REGEX|EXCLUDE_WILDCARDS)) && fnmatch_pattern_has_wildcards (pattern, options)) { if (! (ex->head && ex->head->type == exclude_pattern && ((ex->head->options & EXCLUDE_INCLUDE) == (options & EXCLUDE_INCLUDE)))) new_exclude_segment (ex, exclude_pattern, options); seg = ex->head; pat = &seg->v.pat; if (pat->exclude_count == pat->exclude_alloc) pat->exclude = xpalloc (pat->exclude, &pat->exclude_alloc, 1, -1, sizeof *pat->exclude); patopts = &pat->exclude[pat->exclude_count++]; patopts->options = options; if (options & EXCLUDE_REGEX) { int rc; int cflags = REG_NOSUB|REG_EXTENDED| ((options & FNM_CASEFOLD) ? REG_ICASE : 0); if (options & FNM_LEADING_DIR) { char *tmp; idx_t len = strlen (pattern); while (len > 0 && ISSLASH (pattern[len-1])) --len; if (len == 0) rc = 1; else { tmp = ximalloc (len + 7); memcpy (tmp, pattern, len); strcpy (tmp + len, "(/.*)?"); rc = regcomp (&patopts->v.re, tmp, cflags); free (tmp); } } else rc = regcomp (&patopts->v.re, pattern, cflags); if (rc) { pat->exclude_count--; return; } } else { if (options & EXCLUDE_ALLOC) { pattern = xstrdup (pattern); exclude_add_pattern_buffer (ex, (char*) pattern); } patopts->v.pattern = pattern; } } else { char *str, *p; int exclude_hash_flags = (EXCLUDE_INCLUDE | EXCLUDE_ANCHORED | FNM_LEADING_DIR | FNM_CASEFOLD); if (! (ex->head && ex->head->type == exclude_hash && ((ex->head->options & exclude_hash_flags) == (options & exclude_hash_flags)))) new_exclude_segment (ex, exclude_hash, options); seg = ex->head; str = xstrdup (pattern); if ((options & (EXCLUDE_WILDCARDS | FNM_NOESCAPE)) == EXCLUDE_WILDCARDS) unescape_pattern (str); p = hash_insert (seg->v.table, str); if (p != str) free (str); } } /* Use ADD_FUNC to append to EX the patterns in FILE_NAME, each with OPTIONS. LINE_END terminates each pattern in the file. If LINE_END is a space character, ignore trailing spaces and empty lines in FP. Return -1 on failure, 0 on success. */ int add_exclude_fp (void (*add_func) (struct exclude *, char const *, int, void *), struct exclude *ex, FILE *fp, int options, char line_end, void *data) { char *buf = NULL; char *p; char *pattern; char const *lim; idx_t buf_alloc = 0; idx_t buf_count = 0; int c; int e = 0; while ((c = getc (fp)) != EOF) { if (buf_count == buf_alloc) buf = xpalloc (buf, &buf_alloc, 1, -1, 1); buf[buf_count++] = c; } if (ferror (fp)) e = errno; buf = xirealloc (buf, buf_count + 1); buf[buf_count] = line_end; lim = buf + buf_count + ! (buf_count == 0 || buf[buf_count - 1] == line_end); exclude_add_pattern_buffer (ex, buf); pattern = buf; for (p = buf; p < lim; p++) if (*p == line_end) { char *pattern_end = p; if (isspace ((unsigned char) line_end)) { for (; ; pattern_end--) if (pattern_end == pattern) goto next_pattern; else if (! isspace ((unsigned char) pattern_end[-1])) break; } *pattern_end = '\0'; (*add_func) (ex, pattern, options, data); next_pattern: pattern = p + 1; } errno = e; return e ? -1 : 0; } static void call_addfn (struct exclude *ex, char const *pattern, int options, void *data) { void (**addfnptr) (struct exclude *, char const *, int) = data; (*addfnptr) (ex, pattern, options); } int add_exclude_file (void (*add_func) (struct exclude *, char const *, int), struct exclude *ex, char const *file_name, int options, char line_end) { bool use_stdin = file_name[0] == '-' && !file_name[1]; FILE *in; int rc = 0; if (use_stdin) in = stdin; else if (! (in = fopen (file_name, "re"))) return -1; rc = add_exclude_fp (call_addfn, ex, in, options, line_end, &add_func); if (!use_stdin && fclose (in) != 0) rc = -1; return rc; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exclude.h���������������������������������������������������������������0000664�0000000�0000000�00000004604�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exclude.h -- declarations for excluding file names Copyright (C) 1992-1994, 1997, 1999, 2001-2003, 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 _GL_EXCLUDE_H #define _GL_EXCLUDE_H 1 #include <stdbool.h> #include <stdio.h> /* Written by Paul Eggert <eggert@twinsun.com> and Sergey Poznyakoff <gray@gnu.org> */ /* Exclude options, which can be ORed with fnmatch options. */ /* Patterns must match the start of file names, instead of matching anywhere after a '/'. */ #define EXCLUDE_ANCHORED (1 << 30) /* Include instead of exclude. */ #define EXCLUDE_INCLUDE (1 << 29) /* '?', '*', '[', and '\\' are special in patterns. Without this option, these characters are ordinary and fnmatch is not used. */ #define EXCLUDE_WILDCARDS (1 << 28) /* Patterns are POSIX extended regular expressions */ #define EXCLUDE_REGEX (1 << 27) /* Allocate storage for the pattern */ #define EXCLUDE_ALLOC (1 << 26) struct exclude; bool fnmatch_pattern_has_wildcards (const char *, int) _GL_ATTRIBUTE_PURE; void free_exclude (struct exclude *) _GL_ATTRIBUTE_NONNULL ((1)); struct exclude *new_exclude (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_DEALLOC (free_exclude, 1); void add_exclude (struct exclude *, char const *, int); int add_exclude_file (void (*) (struct exclude *, char const *, int), struct exclude *, char const *, int, char); int add_exclude_fp (void (*) (struct exclude *, char const *, int, void *), struct exclude *, FILE *, int, char, void *); bool excluded_file_name (struct exclude const *, char const *); void exclude_add_pattern_buffer (struct exclude *ex, char *buf); bool exclude_fnmatch (char const *, char const *, int); #endif /* _GL_EXCLUDE_H */ ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execinfo.c��������������������������������������������������������������0000664�0000000�0000000�00000001520�14110572173�0017007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Information about executables. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_EXECINFO_INLINE _GL_EXTERN_INLINE #include "execinfo.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execinfo.in.h�����������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0017425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Information about executables. Copyright (C) 2012-2021 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. */ #ifndef _GL_EXECINFO_H #define _GL_EXECINFO_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_EXECINFO_INLINE # define _GL_EXECINFO_INLINE _GL_INLINE #endif _GL_EXECINFO_INLINE int backtrace (void **buffer, int size) { (void) buffer; (void) size; return 0; } _GL_EXECINFO_INLINE char ** backtrace_symbols (void *const *buffer, int size) { (void) buffer; (void) size; return 0; } _GL_EXECINFO_INLINE void backtrace_symbols_fd (void *const *buffer, int size, int fd) { (void) buffer; (void) size; (void) fd; } _GL_INLINE_HEADER_END #endif ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execl.c�����������������������������������������������������������������0000664�0000000�0000000�00000004176�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execl() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may optimize away the arg0 == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdarg.h> #include "malloca.h" int execl (const char *program, const char *arg0, ...) { va_list args; /* The callee is not expecting a NULL argv[0]. */ if (arg0 == NULL) { errno = EINVAL; return -1; } /* Count the number of arguments (including arg0 and the trailing NULL). */ size_t count = 1; va_start (args, arg0); for (;;) { count++; if (va_arg (args, const char *) == NULL) break; } va_end (args); /* Allocate the argument vector. */ const char **argv = (const char **) malloca (count * sizeof (const char *)); if (argv == NULL) { errno = ENOMEM; return -1; } /* Copy the arguments into the argument vector. */ { size_t i = 0; argv[i++] = arg0; va_start (args, arg0); for (; i < count;) argv[i++] = va_arg (args, const char *); va_end (args); } /* Invoke execv. */ execv (program, argv); /* If execv returned, it must have failed. */ int saved_errno = errno; freea (argv); errno = saved_errno; return -1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execle.c����������������������������������������������������������������0000664�0000000�0000000�00000004273�14110572173�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execle() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may optimize away the arg0 == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdarg.h> #include "malloca.h" int execle (const char *program, const char *arg0, ...) { va_list args; /* The callee is not expecting a NULL argv[0]. */ if (arg0 == NULL) { errno = EINVAL; return -1; } /* Count the number of arguments (including arg0 and the trailing NULL). */ size_t count = 1; va_start (args, arg0); for (;;) { count++; if (va_arg (args, const char *) == NULL) break; } va_end (args); /* Allocate the argument vector. */ const char **argv = (const char **) malloca (count * sizeof (const char *)); if (argv == NULL) { errno = ENOMEM; return -1; } /* Copy the arguments into the argument vector. */ { size_t i = 0; argv[i++] = arg0; va_start (args, arg0); for (; i < count;) argv[i++] = va_arg (args, const char *); } char * const *env = va_arg (args, char * const *); va_end (args); /* Invoke execve. */ execve (program, argv, env); /* If execve returned, it must have failed. */ int saved_errno = errno; freea (argv); errno = saved_errno; return -1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execlp.c����������������������������������������������������������������0000664�0000000�0000000�00000004203�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execlp() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may optimize away the arg0 == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdarg.h> #include "malloca.h" int execlp (const char *program, const char *arg0, ...) { va_list args; /* The callee is not expecting a NULL argv[0]. */ if (arg0 == NULL) { errno = EINVAL; return -1; } /* Count the number of arguments (including arg0 and the trailing NULL). */ size_t count = 1; va_start (args, arg0); for (;;) { count++; if (va_arg (args, const char *) == NULL) break; } va_end (args); /* Allocate the argument vector. */ const char **argv = (const char **) malloca (count * sizeof (const char *)); if (argv == NULL) { errno = ENOMEM; return -1; } /* Copy the arguments into the argument vector. */ { size_t i = 0; argv[i++] = arg0; va_start (args, arg0); for (; i < count;) argv[i++] = va_arg (args, const char *); va_end (args); } /* Invoke execvp. */ execvp (program, argv); /* If execvp returned, it must have failed. */ int saved_errno = errno; freea (argv); errno = saved_errno; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execute.c���������������������������������������������������������������0000664�0000000�0000000�00000027162�14110572173�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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> /* Specification. */ #include "execute.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "canonicalize.h" #include "error.h" #include "fatal-signal.h" #include "filename.h" #include "findprog.h" #include "wait-process.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) /* Choice of implementation for native Windows. - Define to 0 to use the posix_spawn facility (modules 'posix_spawn' and 'posix_spawnp'), that is based on the module 'windows-spawn'. - Define to 1 to use the older code, that uses the module 'windows-spawn' directly. You can set this macro from a Makefile or at configure time, from the CPPFLAGS. */ #ifndef EXECUTE_IMPL_AVOID_POSIX_SPAWN # define EXECUTE_IMPL_AVOID_POSIX_SPAWN 0 #endif #if (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* Native Windows API. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include <process.h> # include "windows-spawn.h" #else /* Unix API. */ # include <spawn.h> #endif #if defined EINTR && (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* EINTR handling for close(), open(). These functions can return -1/EINTR even though we don't have any signal handlers set up, namely when we get interrupted via SIGSTOP. */ static int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #undef close /* avoid warning related to gnulib module unistd */ #define close nonintr_close static int nonintr_open (const char *pathname, int oflag, mode_t mode) { int retval; do retval = open (pathname, oflag, mode); while (retval < 0 && errno == EINTR); return retval; } #undef open /* avoid warning on VMS */ #define open nonintr_open #endif int execute (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool ignore_sigpipe, bool null_stdin, bool null_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp) { int saved_errno; char *prog_path_to_free = NULL; if (directory != NULL) { /* If a change of directory is requested, make sure PROG_PATH is absolute before we do so. This is needed because - posix_spawn and posix_spawnp are required to resolve a relative PROG_PATH *after* changing the directory. See <https://www.austingroupbugs.net/view.php?id=1208>: "if this pathname does not start with a <slash> it shall be interpreted relative to the working directory of the child process _after_ all file_actions have been performed." But this would be a surprising application behaviour, possibly even security relevant. - For the Windows CreateProcess() function, it is unspecified whether a relative file name is interpreted to the parent's current directory or to the specified directory. See <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { const char *resolved_prog = find_in_given_path (prog_path, getenv ("PATH"), NULL, false); if (resolved_prog == NULL) goto fail_with_errno; if (resolved_prog != prog_path) prog_path_to_free = (char *) resolved_prog; prog_path = resolved_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { char *absolute_prog = canonicalize_filename_mode (prog_path, CAN_MISSING | CAN_NOLINKS); if (absolute_prog == NULL) { free (prog_path_to_free); goto fail_with_errno; } free (prog_path_to_free); prog_path_to_free = absolute_prog; prog_path = absolute_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) abort (); } } } #if (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* Native Windows API. */ char *argv_mem_to_free; const char **argv = prepare_spawn (prog_argv, &argv_mem_to_free); if (argv == NULL) xalloc_die (); int exitcode = -1; /* Create standard file handles of child process. */ int nullinfd = -1; int nulloutfd = -1; if ((!null_stdin || (nullinfd = open ("NUL", O_RDONLY, 0)) >= 0) && (!(null_stdout || null_stderr) || (nulloutfd = open ("NUL", O_RDWR, 0)) >= 0)) /* Pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, processes have two environments, one in the "environment block" of the process and managed through SetEnvironmentVariable(), and one inside the process, in the location retrieved by the 'environ' macro. If we were to pass NULL, the child process would inherit a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ { HANDLE stdin_handle = (HANDLE) _get_osfhandle (null_stdin ? nullinfd : STDIN_FILENO); HANDLE stdout_handle = (HANDLE) _get_osfhandle (null_stdout ? nulloutfd : STDOUT_FILENO); HANDLE stderr_handle = (HANDLE) _get_osfhandle (null_stderr ? nulloutfd : STDERR_FILENO); exitcode = spawnpvech (P_WAIT, prog_path, argv + 1, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); # if 0 /* Executing arbitrary files as shell scripts is unsecure. */ if (exitcode == -1 && errno == ENOEXEC) { /* prog is not a native executable. Try to execute it as a shell script. Note that prepare_spawn() has already prepended a hidden element "sh.exe" to argv. */ argv[1] = prog_path; exitcode = spawnpvech (P_WAIT, argv[0], argv, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); } # endif } if (exitcode == -1) saved_errno = errno; if (nulloutfd >= 0) close (nulloutfd); if (nullinfd >= 0) close (nullinfd); free (argv); free (argv_mem_to_free); free (prog_path_to_free); /* Treat failure and signalled child processes like wait_subprocess() does. */ if (termsigp != NULL) *termsigp = 0; if (exitcode == -1) goto fail_with_saved_errno; if (WIFSIGNALED (exitcode)) { if (termsigp != NULL) *termsigp = WTERMSIG (exitcode); saved_errno = 0; goto fail_with_saved_errno; } return exitcode; #else /* Unix API. */ /* Note about 127: Some errors during posix_spawnp() cause the function posix_spawnp() to return an error code; some other errors cause the subprocess to exit with return code 127. It is implementation dependent which error is reported which way. We treat both cases as equivalent. */ sigset_t blocked_signals; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; if (slave_process) { sigprocmask (SIG_SETMASK, NULL, &blocked_signals); block_fatal_signals (); } actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (null_stdin && (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0) || (null_stdout && (err = posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, "/dev/null", O_RDWR, 0)) != 0) || (null_stderr && (err = posix_spawn_file_actions_addopen (&actions, STDERR_FILENO, "/dev/null", O_RDWR, 0)) != 0) || (directory != NULL && (err = posix_spawn_file_actions_addchdir (&actions, directory))) # if !(defined _WIN32 && !defined __CYGWIN__) || (slave_process && ((err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0))) # endif || (err = (directory != NULL ? posix_spawn (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ) : posix_spawnp (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ))) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) unblock_fatal_signals (); free (prog_path_to_free); if (termsigp != NULL) *termsigp = 0; saved_errno = err; goto fail_with_saved_errno; } posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) { register_slave_subprocess (child); unblock_fatal_signals (); } free (prog_path_to_free); return wait_subprocess (child, progname, ignore_sigpipe, null_stderr, slave_process, exit_on_error, termsigp); #endif fail_with_errno: saved_errno = errno; fail_with_saved_errno: if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, saved_errno, _("%s subprocess failed"), progname); return 127; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execute.h���������������������������������������������������������������0000664�0000000�0000000�00000005412�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2003, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _EXECUTE_H #define _EXECUTE_H #include <stdbool.h> /* Execute a command, optionally redirecting any of the three standard file descriptors to /dev/null. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. progname is the name of the program to be executed by the subprocess, used for error messages. prog_path is the file name of the program to be executed by the subprocess. If it contains no slashes, a search is conducted in $PATH. An operating system dependent suffix is added, if necessary. prog_argv is the array of strings that the subprocess shall receive in argv[]. It is a NULL-terminated array. prog_argv[0] should normally be identical to prog_path. If directory is not NULL, the command is executed in that directory. If prog_path is a relative file name, it resolved before changing to that directory. The current directory of the current process remains unchanged. If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE as equivalent to a success. This is suitable for processes whose only purpose is to write to standard output. If slave_process is true, the child process will be terminated when its creator receives a catchable fatal signal. If termsigp is not NULL, *termsig will be set to the signal that terminated the subprocess (if supported by the platform: not on native Windows platforms), otherwise 0. It is recommended that no signal is blocked or ignored while execute() is called. See spawn-pipe.h for the reason. */ extern int execute (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool ignore_sigpipe, bool null_stdin, bool null_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp); #endif /* _EXECUTE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execv.c�����������������������������������������������������������������0000664�0000000�0000000�00000003001�14110572173�0016315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execv() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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 <unistd.h> int execv (const char *program, char * const *argv) { /* Pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, processes have two environments, one in the "environment block" of the process and managed through SetEnvironmentVariable(), and one inside the process, in the location retrieved by the 'environ' macro. If we were to pass NULL, the child process would inherit a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ return execve (program, argv, environ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execve.c����������������������������������������������������������������0000664�0000000�0000000�00000004640�14110572173�0016474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execve() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may optimize away the program == NULL and argv == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && !defined __CYGWIN__ # include <errno.h> # include <stdio.h> # include <spawn.h> # include <sys/types.h> # include <sys/wait.h> int execve (const char *program, char * const *argv, char * const *env) { if (program == NULL || argv == NULL /* The callee is not expecting a NULL argv[0]. */ || argv[0] == NULL || env == NULL) { errno = EINVAL; return -1; } pid_t child; int err = posix_spawn (&child, program, NULL, NULL, argv, env); if (err == 0) { /* Close all file descriptors, so that - for opened files, the child may close and unlink() the file, - for pipe handles, the pipe's reader or writer does not get stuck. Ideally we would also suspend all other threads and close all other HANDLEs (not associated with file descriptors) and SOCKETs, but we can't do so since we have no way to enumerate them. */ { unsigned int fdmax = _getmaxstdio (); unsigned int fd; for (fd = 0; fd < fdmax; fd++) close (fd); } /* Wait until the child process is terminated. */ int status = 127; waitpid (child, &status, 0); int exitcode = status; /* Pass its exit code to the parent process. */ _exit (exitcode); } errno = err; return -1; } #endif ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execvp.c����������������������������������������������������������������0000664�0000000�0000000�00000003004�14110572173�0016500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execvp() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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 <unistd.h> int execvp (const char *program, char * const *argv) { /* Pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, processes have two environments, one in the "environment block" of the process and managed through SetEnvironmentVariable(), and one inside the process, in the location retrieved by the 'environ' macro. If we were to pass NULL, the child process would inherit a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ return execvpe (program, argv, environ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/execvpe.c���������������������������������������������������������������0000664�0000000�0000000�00000003431�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* execvpe() function: Execute a program, replacing the current process. Copyright (C) 2020-2021 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may optimize away the program == NULL and argv == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "findprog.h" int execvpe (const char *program, char * const *argv, char * const *env) { if (program == NULL || argv == NULL /* The callee is not expecting a NULL argv[0]. */ || argv[0] == NULL || env == NULL) { errno = EINVAL; return -1; } const char *resolved_progname = find_in_given_path (program, getenv ("PATH"), NULL, true); if (resolved_progname == NULL) return -1; /* Invoke execve. */ execve (resolved_progname, argv, env); /* If execve returned, it must have failed. */ if (resolved_progname != program) free ((char *) resolved_progname); return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exitfail.c��������������������������������������������������������������0000664�0000000�0000000�00000001555�14110572173�0017024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002-2003, 2005-2007, 2009-2021 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/>. */ #include <config.h> #include "exitfail.h" #include <stdlib.h> int volatile exit_failure = EXIT_FAILURE; ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exitfail.h��������������������������������������������������������������0000664�0000000�0000000�00000001424�14110572173�0017024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002, 2009-2021 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/>. */ extern int volatile exit_failure; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exp2.c������������������������������������������������������������������0000664�0000000�0000000�00000042177�14110572173�0016102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential base 2 function. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <float.h> /* Best possible approximation of log(2) as a 'double'. */ #define LOG2 0.693147180559945309417232121458176568075 /* Best possible approximation of 1/log(2) as a 'double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743 /* Best possible approximation of log(2)/256 as a 'double'. */ #define LOG2_BY_256 0.00270760617406228636491106297444600221904 /* Best possible approximation of 256/log(2) as a 'double'. */ #define LOG2_BY_256_INVERSE 369.329930467574632284140718336484387181 double exp2 (double x) { /* exp2(x) = exp(x*log(2)). If we would compute it like this, there would be rounding errors for integer or near-integer values of x. To avoid these, we inline the algorithm for exp(), and the multiplication with log(2) cancels a division by log(2). */ if (isnand (x)) return x; if (x > (double) DBL_MAX_EXP) /* x > DBL_MAX_EXP hence exp2(x) > 2^DBL_MAX_EXP, overflows to Infinity. */ return HUGE_VAL; if (x < (double) (DBL_MIN_EXP - 1 - DBL_MANT_DIG)) /* x < (DBL_MIN_EXP - 1 - DBL_MANT_DIG) hence exp2(x) < 2^(DBL_MIN_EXP-1-DBL_MANT_DIG), underflows to zero. */ return 0.0; /* Decompose x into x = n + m/256 + y/log(2) where n is an integer, m is an integer, -128 <= m <= 128, y is a number, |y| <= log(2)/512 + epsilon = 0.00135... Then exp2(x) = 2^n * exp(m * log(2)/256) * exp(y) The first factor is an ldexpl() call. The second factor is a table lookup. The third factor is computed - either as sinh(y) + cosh(y) where sinh(y) is computed through the power series: sinh(y) = y + y^3/3! + y^5/5! + ... and cosh(y) is computed as hypot(1, sinh(y)), - or as exp(2*z) = (1 + tanh(z)) / (1 - tanh(z)) where z = y/2 and tanh(z) is computed through its power series: tanh(z) = z - 1/3 * z^3 + 2/15 * z^5 - 17/315 * z^7 + 62/2835 * z^9 - 1382/155925 * z^11 + 21844/6081075 * z^13 - 929569/638512875 * z^15 + ... Since |z| <= log(2)/1024 < 0.0007, the relative contribution of the z^7 term is < 0.0007^6 < 2^-60 <= 2^-DBL_MANT_DIG, therefore we can truncate the series after the z^5 term. */ { double nm = round (x * 256.0); /* = 256 * n + m */ double z = (x * 256.0 - nm) * (LOG2_BY_256 * 0.5); /* Coefficients of the power series for tanh(z). */ #define TANH_COEFF_1 1.0 #define TANH_COEFF_3 -0.333333333333333333333333333333333333334 #define TANH_COEFF_5 0.133333333333333333333333333333333333334 #define TANH_COEFF_7 -0.053968253968253968253968253968253968254 #define TANH_COEFF_9 0.0218694885361552028218694885361552028218 #define TANH_COEFF_11 -0.00886323552990219656886323552990219656886 #define TANH_COEFF_13 0.00359212803657248101692546136990581435026 #define TANH_COEFF_15 -0.00145583438705131826824948518070211191904 double z2 = z * z; double tanh_z = ((TANH_COEFF_5 * z2 + TANH_COEFF_3) * z2 + TANH_COEFF_1) * z; double exp_y = (1.0 + tanh_z) / (1.0 - tanh_z); int n = (int) round (nm * (1.0 / 256.0)); int m = (int) nm - 256 * n; /* exp_table[i] = exp((i - 128) * log(2)/256). Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 257) (format t " ~D,~%" (float (exp (* (/ (- i 128) 256) (log 2L0))) a))) */ static const double exp_table[257] = { 0.707106781186547524400844362104849039284, 0.709023942160207598920563322257676190836, 0.710946301084582779904674297352120049962, 0.71287387205274715340350157671438300618, 0.714806669195985005617532889137569953044, 0.71674470668389442125974978427737336719, 0.71868799872449116280161304224785251353, 0.720636559564312831364255957304947586072, 0.72259040348852331001850312073583545284, 0.724549544821017490259402705487111270714, 0.726513997924526282423036245842287293786, 0.728483777200721910815451524818606761737, 0.730458897090323494325651445155310766577, 0.732439372073202913296664682112279175616, 0.734425216668490963430822513132890712652, 0.736416445434683797507470506133110286942, 0.738413072969749655693453740187024961962, 0.740415113911235885228829945155951253966, 0.742422582936376250272386395864403155277, 0.744435494762198532693663597314273242753, 0.746453864145632424600321765743336770838, 0.748477705883617713391824861712720862423, 0.750507034813212760132561481529764324813, 0.752541865811703272039672277899716132493, 0.75458221379671136988300977551659676571, 0.756628093726304951096818488157633113612, 0.75867952059910734940489114658718937343, 0.760736509454407291763130627098242426467, 0.762799075372269153425626844758470477304, 0.76486723347364351194254345936342587308, 0.766940998920478000900300751753859329456, 0.769020386915828464216738479594307884331, 0.771105412703970411806145931045367420652, 0.773196091570510777431255778146135325272, 0.77529243884249997956151370535341912283, 0.777394469888544286059157168801667390437, 0.779502200118918483516864044737428940745, 0.781615644985678852072965367573877941354, 0.783734819982776446532455855478222575498, 0.78585974064617068462428149076570281356, 0.787990422553943243227635080090952504452, 0.790126881326412263402248482007960521995, 0.79226913262624686505993407346567890838, 0.794417192158581972116898048814333564685, 0.796571075671133448968624321559534367934, 0.798730798954313549131410147104316569576, 0.800896377841346676896923120795476813684, 0.803067828208385462848443946517563571584, 0.805245165974627154089760333678700291728, 0.807428407102430320039984581575729114268, 0.809617567597431874649880866726368203972, 0.81181266350866441589760797777344082227, 0.814013710928673883424109261007007338614, 0.816220725993637535170713864466769240053, 0.818433724883482243883852017078007231025, 0.82065272382200311435413206848451310067, 0.822877739076982422259378362362911222833, 0.825108786960308875483586738272485101678, 0.827345883828097198786118571797909120834, 0.829589046080808042697824787210781231927, 0.831838290163368217523168228488195222638, 0.834093632565291253329796170708536192903, 0.836355089820798286809404612069230711295, 0.83862267850893927589613232455870870518, 0.84089641525371454303112547623321489504, 0.84317631672419664796432298771385230143, 0.84546239963465259098692866759361830709, 0.84775468074466634749045860363936420312, 0.850053176859261734750681286748751167545, 0.852357904829025611837203530384718316326, 0.854668881550231413551897437515331498025, 0.856986123964963019301812477839166009452, 0.859309649061238957814672188228156252257, 0.861639473873136948607517116872358729753, 0.863975615480918781121524414614366207052, 0.866318091011155532438509953514163469652, 0.868666917636853124497101040936083380124, 0.871022112577578221729056715595464682243, 0.873383693099584470038708278290226842228, 0.875751676515939078050995142767930296012, 0.878126080186649741556080309687656610647, 0.880506921518791912081045787323636256171, 0.882894217966636410521691124969260937028, 0.885287987031777386769987907431242017412, 0.88768824626326062627527960009966160388, 0.89009501325771220447985955243623523504, 0.892508305659467490072110281986409916153, 0.8949281411607004980029443898876582985, 0.897354537501553593213851621063890907178, 0.899787512470267546027427696662514569756, 0.902227083903311940153838631655504844215, 0.904673269685515934269259325789226871994, 0.907126087750199378124917300181170171233, 0.909585556079304284147971563828178746372, 0.91205169270352665549806275316460097744, 0.914524515702448671545983912696158354092, 0.91700404320467123174354159479414442804, 0.919490293387946858856304371174663918816, 0.921983284479312962533570386670938449637, 0.92448303475522546419252726694739603678, 0.92698956254169278419622653516884831976, 0.929502886214410192307650717745572682403, 0.932023024198894522404814545597236289343, 0.934549994970619252444512104439799143264, 0.93708381705514995066499947497722326722, 0.93962450902828008902058735120448448827, 0.942172089516167224843810351983745154882, 0.944726577195469551733539267378681531548, 0.947287990793482820670109326713462307376, 0.949856349088277632361251759806996099924, 0.952431670908837101825337466217860725517, 0.955013975135194896221170529572799135168, 0.957603280698573646936305635147915443924, 0.960199606581523736948607188887070611744, 0.962802971818062464478519115091191368377, 0.965413395493813583952272948264534783197, 0.968030896746147225299027952283345762418, 0.970655494764320192607710617437589705184, 0.973287208789616643172102023321302921373, 0.97592605811548914795551023340047499377, 0.978572062087700134509161125813435745597, 0.981225240104463713381244885057070325016, 0.983885611616587889056366801238014683926, 0.98655319612761715646797006813220671315, 0.989228013193975484129124959065583667775, 0.99191008242510968492991311132615581644, 0.994599423483633175652477686222166314457, 0.997296056085470126257659913847922601123, 1.0, 1.00271127505020248543074558845036204047, 1.0054299011128028213513839559347998147, 1.008155898118417515783094890817201039276, 1.01088928605170046002040979056186052439, 1.013630084951489438840258929063939929597, 1.01637831491095303794049311378629406276, 1.0191339960777379496848780958207928794, 1.02189714865411667823448013478329943978, 1.02466779289713564514828907627081492763, 1.0274459491187636965388611939222137815, 1.030231637686041012871707902453904567093, 1.033024879021228422500108283970460918086, 1.035825693601957120029983209018081371844, 1.03863410196137879061243669795463973258, 1.04145012468831614126454607901189312648, 1.044273782427413840321966478739929008784, 1.04710509587928986612990725022711224056, 1.04994408580068726608203812651590790906, 1.05279077300462632711989120298074630319, 1.05564517836055715880834132515293865216, 1.058507322794512690105772109683716645074, 1.061377227289262080950567678003883726294, 1.06425491288446454978861125700158022068, 1.06714040067682361816952112099280916261, 1.0700337118202417735424119367576235685, 1.072934867525975551385035450873827585343, 1.075843889062791037803228648476057074063, 1.07876079775711979374068003743848295849, 1.081685614993215201942115594422531125643, 1.08461836221330923781610517190661434161, 1.087559060917769665346797830944039707867, 1.09050773266525765920701065576070797899, 1.09346439907288585422822014625044716208, 1.096429081816376823386138295859248481766, 1.09940180263022198546369696823882990404, 1.10238258330784094355641420942564685751, 1.10537144570174125558827469625695031104, 1.108368411723678638009423649426619850137, 1.111373503344817603850149254228916637444, 1.1143867425958925363088129569196030678, 1.11740815156736919905457996308578026665, 1.12043775240960668442900387986631301277, 1.123475567333019800733729739775321431954, 1.12652161860824189979479864378703477763, 1.129575928566288145997264988840249825907, 1.13263851959871922798707372367762308438, 1.13570941415780551424039033067611701343, 1.13878863475669165370383028384151125472, 1.14187620396956162271229760828788093894, 1.14497214443180421939441388822291589579, 1.14807647884017900677879966269734268003, 1.15118922995298270581775963520198253612, 1.154310420590216039548221528724806960684, 1.157440073633751029613085766293796821106, 1.16057821202749874636945947257609098625, 1.16372485877757751381357359909218531234, 1.166880036952481570555516298414089287834, 1.170043769683250188080259035792738573, 1.17321608016363724753480435451324538889, 1.176396991650281276284645728483848641054, 1.17958652746287594548610056676944051898, 1.182784710984341029924457204693850757966, 1.18599156566099383137126564953421556374, 1.18920711500272106671749997056047591529, 1.19243138258315122214272755814543101148, 1.195664392039827374583837049865451975705, 1.19890616707438048177030255797630020695, 1.202156731452703142096396957497765876003, 1.205416109005123825604211432558411335666, 1.208684323626581577354792255889216998484, 1.21196139927680119446816891773249304545, 1.215247359980468878116520251338798457624, 1.218542229827408361758207148117394510724, 1.221846032972757516903891841911570785836, 1.225158793637145437709464594384845353707, 1.22848053610687000569400895779278184036, 1.2318112847340759358845566532127948166, 1.235151063936933305692912507415415760294, 1.238499898199816567833368865859612431545, 1.24185781207348404859367746872659560551, 1.24522483017525793277520496748615267417, 1.24860097718920473662176609730249554519, 1.25198627786631627006020603178920359732, 1.255380757024691089579390657442301194595, 1.25878443954971644307786044181516261876, 1.26219735039425070801401025851841645967, 1.265619514578806324196273999873453036296, 1.26905095719173322255441908103233800472, 1.27249170338940275123669204418460217677, 1.27594177839639210038120243475928938891, 1.27940120750566922691358797002785254596, 1.28287001607877828072666978102151405111, 1.286348229546025533601482208069738348355, 1.28983587340666581223274729549155218968, 1.293332973229089436725559789048704304684, 1.296839554651009665933754117792451159835, 1.30035564337965065101414056707091779129, 1.30388126519193589857452364895199736833, 1.30741644593467724479715157747196172848, 1.310961211524764341922991786330755849366, 1.314515587949354658485983613383997794965, 1.318079601266063994690185647066116617664, 1.32165327760315751432651181233060922616, 1.32523664315974129462953709549872167411, 1.32882972420595439547865089632866510792, 1.33243254708316144935164337949073577407, 1.33604513820414577344262790437186975929, 1.33966752405330300536003066972435257602, 1.34329973118683526382421714618163087542, 1.346941786232945835788173713229537282075, 1.35059371589203439140852219606013396004, 1.35425554693689272829801474014070280434, 1.357927306212901046494536695671766697446, 1.36160902063822475558553593883194147464, 1.36530071720401181543069836033754285543, 1.36900242297459061192960113298219283217, 1.37271416508766836928499785714471721579, 1.37643597075453010021632280551868696026, 1.380167867260238095581945274358283464697, 1.383909881963831954872659527265192818, 1.387662042298529159042861017950775988896, 1.39142437577192618714983552956624344668, 1.395196909966200178275574599249220994716, 1.398979672538311140209528136715194969206, 1.40277269122020470637471352433337881711, 1.40657599381901544248361973255451684411, 1.410389608217270704414375128268675481145, 1.41421356237309504880168872420969807857 }; return ldexp (exp_table[128 + m] * exp_y, n); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exp2f.c�����������������������������������������������������������������0000664�0000000�0000000�00000001556�14110572173�0016244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential base 2 function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float exp2f (float x) { return (float) exp2 ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/exp2l.c�����������������������������������������������������������������0000664�0000000�0000000�00000011014�14110572173�0016240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential base 2 function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double exp2l (long double x) { return exp2 (x); } #else # include <float.h> /* gl_expl_table[i] = exp((i - 128) * log(2)/256). */ extern const long double gl_expl_table[257]; /* Best possible approximation of log(2) as a 'long double'. */ #define LOG2 0.693147180559945309417232121458176568075L /* Best possible approximation of 1/log(2) as a 'long double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743L /* Best possible approximation of log(2)/256 as a 'long double'. */ #define LOG2_BY_256 0.00270760617406228636491106297444600221904L /* Best possible approximation of 256/log(2) as a 'long double'. */ #define LOG2_BY_256_INVERSE 369.329930467574632284140718336484387181L long double exp2l (long double x) { /* exp2(x) = exp(x*log(2)). If we would compute it like this, there would be rounding errors for integer or near-integer values of x. To avoid these, we inline the algorithm for exp(), and the multiplication with log(2) cancels a division by log(2). */ if (isnanl (x)) return x; if (x > (long double) LDBL_MAX_EXP) /* x > LDBL_MAX_EXP hence exp2(x) > 2^LDBL_MAX_EXP, overflows to Infinity. */ return HUGE_VALL; if (x < (long double) (LDBL_MIN_EXP - 1 - LDBL_MANT_DIG)) /* x < (LDBL_MIN_EXP - 1 - LDBL_MANT_DIG) hence exp2(x) < 2^(LDBL_MIN_EXP-1-LDBL_MANT_DIG), underflows to zero. */ return 0.0L; /* Decompose x into x = n + m/256 + y/log(2) where n is an integer, m is an integer, -128 <= m <= 128, y is a number, |y| <= log(2)/512 + epsilon = 0.00135... Then exp2(x) = 2^n * exp(m * log(2)/256) * exp(y) The first factor is an ldexpl() call. The second factor is a table lookup. The third factor is computed - either as sinh(y) + cosh(y) where sinh(y) is computed through the power series: sinh(y) = y + y^3/3! + y^5/5! + ... and cosh(y) is computed as hypot(1, sinh(y)), - or as exp(2*z) = (1 + tanh(z)) / (1 - tanh(z)) where z = y/2 and tanh(z) is computed through its power series: tanh(z) = z - 1/3 * z^3 + 2/15 * z^5 - 17/315 * z^7 + 62/2835 * z^9 - 1382/155925 * z^11 + 21844/6081075 * z^13 - 929569/638512875 * z^15 + ... Since |z| <= log(2)/1024 < 0.0007, the relative contribution of the z^13 term is < 0.0007^12 < 2^-120 <= 2^-LDBL_MANT_DIG, therefore we can truncate the series after the z^11 term. */ { long double nm = roundl (x * 256.0L); /* = 256 * n + m */ long double z = (x * 256.0L - nm) * (LOG2_BY_256 * 0.5L); /* Coefficients of the power series for tanh(z). */ #define TANH_COEFF_1 1.0L #define TANH_COEFF_3 -0.333333333333333333333333333333333333334L #define TANH_COEFF_5 0.133333333333333333333333333333333333334L #define TANH_COEFF_7 -0.053968253968253968253968253968253968254L #define TANH_COEFF_9 0.0218694885361552028218694885361552028218L #define TANH_COEFF_11 -0.00886323552990219656886323552990219656886L #define TANH_COEFF_13 0.00359212803657248101692546136990581435026L #define TANH_COEFF_15 -0.00145583438705131826824948518070211191904L long double z2 = z * z; long double tanh_z = (((((TANH_COEFF_11 * z2 + TANH_COEFF_9) * z2 + TANH_COEFF_7) * z2 + TANH_COEFF_5) * z2 + TANH_COEFF_3) * z2 + TANH_COEFF_1) * z; long double exp_y = (1.0L + tanh_z) / (1.0L - tanh_z); int n = (int) roundl (nm * (1.0L / 256.0L)); int m = (int) nm - 256 * n; return ldexpl (gl_expl_table[128 + m] * exp_y, n); } } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/expf.c������������������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0016160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float expf (float x) { return (float) exp ((double) x); } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/expl-table.c������������������������������������������������������������0000664�0000000�0000000�00000031746�14110572173�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* gl_expl_table[i] = exp((i - 128) * log(2)/256). Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 257) (format t " ~D,~%" (float (exp (* (/ (- i 128) 256) (log 2L0))) a))) */ const long double gl_expl_table[257] = { 0.707106781186547524400844362104849039284L, 0.709023942160207598920563322257676190836L, 0.710946301084582779904674297352120049962L, 0.71287387205274715340350157671438300618L, 0.714806669195985005617532889137569953044L, 0.71674470668389442125974978427737336719L, 0.71868799872449116280161304224785251353L, 0.720636559564312831364255957304947586072L, 0.72259040348852331001850312073583545284L, 0.724549544821017490259402705487111270714L, 0.726513997924526282423036245842287293786L, 0.728483777200721910815451524818606761737L, 0.730458897090323494325651445155310766577L, 0.732439372073202913296664682112279175616L, 0.734425216668490963430822513132890712652L, 0.736416445434683797507470506133110286942L, 0.738413072969749655693453740187024961962L, 0.740415113911235885228829945155951253966L, 0.742422582936376250272386395864403155277L, 0.744435494762198532693663597314273242753L, 0.746453864145632424600321765743336770838L, 0.748477705883617713391824861712720862423L, 0.750507034813212760132561481529764324813L, 0.752541865811703272039672277899716132493L, 0.75458221379671136988300977551659676571L, 0.756628093726304951096818488157633113612L, 0.75867952059910734940489114658718937343L, 0.760736509454407291763130627098242426467L, 0.762799075372269153425626844758470477304L, 0.76486723347364351194254345936342587308L, 0.766940998920478000900300751753859329456L, 0.769020386915828464216738479594307884331L, 0.771105412703970411806145931045367420652L, 0.773196091570510777431255778146135325272L, 0.77529243884249997956151370535341912283L, 0.777394469888544286059157168801667390437L, 0.779502200118918483516864044737428940745L, 0.781615644985678852072965367573877941354L, 0.783734819982776446532455855478222575498L, 0.78585974064617068462428149076570281356L, 0.787990422553943243227635080090952504452L, 0.790126881326412263402248482007960521995L, 0.79226913262624686505993407346567890838L, 0.794417192158581972116898048814333564685L, 0.796571075671133448968624321559534367934L, 0.798730798954313549131410147104316569576L, 0.800896377841346676896923120795476813684L, 0.803067828208385462848443946517563571584L, 0.805245165974627154089760333678700291728L, 0.807428407102430320039984581575729114268L, 0.809617567597431874649880866726368203972L, 0.81181266350866441589760797777344082227L, 0.814013710928673883424109261007007338614L, 0.816220725993637535170713864466769240053L, 0.818433724883482243883852017078007231025L, 0.82065272382200311435413206848451310067L, 0.822877739076982422259378362362911222833L, 0.825108786960308875483586738272485101678L, 0.827345883828097198786118571797909120834L, 0.829589046080808042697824787210781231927L, 0.831838290163368217523168228488195222638L, 0.834093632565291253329796170708536192903L, 0.836355089820798286809404612069230711295L, 0.83862267850893927589613232455870870518L, 0.84089641525371454303112547623321489504L, 0.84317631672419664796432298771385230143L, 0.84546239963465259098692866759361830709L, 0.84775468074466634749045860363936420312L, 0.850053176859261734750681286748751167545L, 0.852357904829025611837203530384718316326L, 0.854668881550231413551897437515331498025L, 0.856986123964963019301812477839166009452L, 0.859309649061238957814672188228156252257L, 0.861639473873136948607517116872358729753L, 0.863975615480918781121524414614366207052L, 0.866318091011155532438509953514163469652L, 0.868666917636853124497101040936083380124L, 0.871022112577578221729056715595464682243L, 0.873383693099584470038708278290226842228L, 0.875751676515939078050995142767930296012L, 0.878126080186649741556080309687656610647L, 0.880506921518791912081045787323636256171L, 0.882894217966636410521691124969260937028L, 0.885287987031777386769987907431242017412L, 0.88768824626326062627527960009966160388L, 0.89009501325771220447985955243623523504L, 0.892508305659467490072110281986409916153L, 0.8949281411607004980029443898876582985L, 0.897354537501553593213851621063890907178L, 0.899787512470267546027427696662514569756L, 0.902227083903311940153838631655504844215L, 0.904673269685515934269259325789226871994L, 0.907126087750199378124917300181170171233L, 0.909585556079304284147971563828178746372L, 0.91205169270352665549806275316460097744L, 0.914524515702448671545983912696158354092L, 0.91700404320467123174354159479414442804L, 0.919490293387946858856304371174663918816L, 0.921983284479312962533570386670938449637L, 0.92448303475522546419252726694739603678L, 0.92698956254169278419622653516884831976L, 0.929502886214410192307650717745572682403L, 0.932023024198894522404814545597236289343L, 0.934549994970619252444512104439799143264L, 0.93708381705514995066499947497722326722L, 0.93962450902828008902058735120448448827L, 0.942172089516167224843810351983745154882L, 0.944726577195469551733539267378681531548L, 0.947287990793482820670109326713462307376L, 0.949856349088277632361251759806996099924L, 0.952431670908837101825337466217860725517L, 0.955013975135194896221170529572799135168L, 0.957603280698573646936305635147915443924L, 0.960199606581523736948607188887070611744L, 0.962802971818062464478519115091191368377L, 0.965413395493813583952272948264534783197L, 0.968030896746147225299027952283345762418L, 0.970655494764320192607710617437589705184L, 0.973287208789616643172102023321302921373L, 0.97592605811548914795551023340047499377L, 0.978572062087700134509161125813435745597L, 0.981225240104463713381244885057070325016L, 0.983885611616587889056366801238014683926L, 0.98655319612761715646797006813220671315L, 0.989228013193975484129124959065583667775L, 0.99191008242510968492991311132615581644L, 0.994599423483633175652477686222166314457L, 0.997296056085470126257659913847922601123L, 1.0L, 1.00271127505020248543074558845036204047L, 1.0054299011128028213513839559347998147L, 1.008155898118417515783094890817201039276L, 1.01088928605170046002040979056186052439L, 1.013630084951489438840258929063939929597L, 1.01637831491095303794049311378629406276L, 1.0191339960777379496848780958207928794L, 1.02189714865411667823448013478329943978L, 1.02466779289713564514828907627081492763L, 1.0274459491187636965388611939222137815L, 1.030231637686041012871707902453904567093L, 1.033024879021228422500108283970460918086L, 1.035825693601957120029983209018081371844L, 1.03863410196137879061243669795463973258L, 1.04145012468831614126454607901189312648L, 1.044273782427413840321966478739929008784L, 1.04710509587928986612990725022711224056L, 1.04994408580068726608203812651590790906L, 1.05279077300462632711989120298074630319L, 1.05564517836055715880834132515293865216L, 1.058507322794512690105772109683716645074L, 1.061377227289262080950567678003883726294L, 1.06425491288446454978861125700158022068L, 1.06714040067682361816952112099280916261L, 1.0700337118202417735424119367576235685L, 1.072934867525975551385035450873827585343L, 1.075843889062791037803228648476057074063L, 1.07876079775711979374068003743848295849L, 1.081685614993215201942115594422531125643L, 1.08461836221330923781610517190661434161L, 1.087559060917769665346797830944039707867L, 1.09050773266525765920701065576070797899L, 1.09346439907288585422822014625044716208L, 1.096429081816376823386138295859248481766L, 1.09940180263022198546369696823882990404L, 1.10238258330784094355641420942564685751L, 1.10537144570174125558827469625695031104L, 1.108368411723678638009423649426619850137L, 1.111373503344817603850149254228916637444L, 1.1143867425958925363088129569196030678L, 1.11740815156736919905457996308578026665L, 1.12043775240960668442900387986631301277L, 1.123475567333019800733729739775321431954L, 1.12652161860824189979479864378703477763L, 1.129575928566288145997264988840249825907L, 1.13263851959871922798707372367762308438L, 1.13570941415780551424039033067611701343L, 1.13878863475669165370383028384151125472L, 1.14187620396956162271229760828788093894L, 1.14497214443180421939441388822291589579L, 1.14807647884017900677879966269734268003L, 1.15118922995298270581775963520198253612L, 1.154310420590216039548221528724806960684L, 1.157440073633751029613085766293796821106L, 1.16057821202749874636945947257609098625L, 1.16372485877757751381357359909218531234L, 1.166880036952481570555516298414089287834L, 1.170043769683250188080259035792738573L, 1.17321608016363724753480435451324538889L, 1.176396991650281276284645728483848641054L, 1.17958652746287594548610056676944051898L, 1.182784710984341029924457204693850757966L, 1.18599156566099383137126564953421556374L, 1.18920711500272106671749997056047591529L, 1.19243138258315122214272755814543101148L, 1.195664392039827374583837049865451975705L, 1.19890616707438048177030255797630020695L, 1.202156731452703142096396957497765876003L, 1.205416109005123825604211432558411335666L, 1.208684323626581577354792255889216998484L, 1.21196139927680119446816891773249304545L, 1.215247359980468878116520251338798457624L, 1.218542229827408361758207148117394510724L, 1.221846032972757516903891841911570785836L, 1.225158793637145437709464594384845353707L, 1.22848053610687000569400895779278184036L, 1.2318112847340759358845566532127948166L, 1.235151063936933305692912507415415760294L, 1.238499898199816567833368865859612431545L, 1.24185781207348404859367746872659560551L, 1.24522483017525793277520496748615267417L, 1.24860097718920473662176609730249554519L, 1.25198627786631627006020603178920359732L, 1.255380757024691089579390657442301194595L, 1.25878443954971644307786044181516261876L, 1.26219735039425070801401025851841645967L, 1.265619514578806324196273999873453036296L, 1.26905095719173322255441908103233800472L, 1.27249170338940275123669204418460217677L, 1.27594177839639210038120243475928938891L, 1.27940120750566922691358797002785254596L, 1.28287001607877828072666978102151405111L, 1.286348229546025533601482208069738348355L, 1.28983587340666581223274729549155218968L, 1.293332973229089436725559789048704304684L, 1.296839554651009665933754117792451159835L, 1.30035564337965065101414056707091779129L, 1.30388126519193589857452364895199736833L, 1.30741644593467724479715157747196172848L, 1.310961211524764341922991786330755849366L, 1.314515587949354658485983613383997794965L, 1.318079601266063994690185647066116617664L, 1.32165327760315751432651181233060922616L, 1.32523664315974129462953709549872167411L, 1.32882972420595439547865089632866510792L, 1.33243254708316144935164337949073577407L, 1.33604513820414577344262790437186975929L, 1.33966752405330300536003066972435257602L, 1.34329973118683526382421714618163087542L, 1.346941786232945835788173713229537282075L, 1.35059371589203439140852219606013396004L, 1.35425554693689272829801474014070280434L, 1.357927306212901046494536695671766697446L, 1.36160902063822475558553593883194147464L, 1.36530071720401181543069836033754285543L, 1.36900242297459061192960113298219283217L, 1.37271416508766836928499785714471721579L, 1.37643597075453010021632280551868696026L, 1.380167867260238095581945274358283464697L, 1.383909881963831954872659527265192818L, 1.387662042298529159042861017950775988896L, 1.39142437577192618714983552956624344668L, 1.395196909966200178275574599249220994716L, 1.398979672538311140209528136715194969206L, 1.40277269122020470637471352433337881711L, 1.40657599381901544248361973255451684411L, 1.410389608217270704414375128268675481145L, 1.41421356237309504880168872420969807857L }; ��������������������������gnulib-20210822~d383792/lib/expl.c������������������������������������������������������������������0000664�0000000�0000000�00000012374�14110572173�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double expl (long double x) { return exp (x); } #else # include <float.h> /* gl_expl_table[i] = exp((i - 128) * log(2)/256). */ extern const long double gl_expl_table[257]; /* A value slightly larger than log(2). */ #define LOG2_PLUS_EPSILON 0.6931471805599454L /* Best possible approximation of log(2) as a 'long double'. */ #define LOG2 0.693147180559945309417232121458176568075L /* Best possible approximation of 1/log(2) as a 'long double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743L /* Best possible approximation of log(2)/256 as a 'long double'. */ #define LOG2_BY_256 0.00270760617406228636491106297444600221904L /* Best possible approximation of 256/log(2) as a 'long double'. */ #define LOG2_BY_256_INVERSE 369.329930467574632284140718336484387181L /* The upper 32 bits of log(2)/256. */ #define LOG2_BY_256_HI_PART 0.0027076061733168899081647396087646484375L /* log(2)/256 - LOG2_HI_PART. */ #define LOG2_BY_256_LO_PART \ 0.000000000000745396456746323365681353781544922399845L long double expl (long double x) { if (isnanl (x)) return x; if (x >= (long double) LDBL_MAX_EXP * LOG2_PLUS_EPSILON) /* x > LDBL_MAX_EXP * log(2) hence exp(x) > 2^LDBL_MAX_EXP, overflows to Infinity. */ return HUGE_VALL; if (x <= (long double) (LDBL_MIN_EXP - 1 - LDBL_MANT_DIG) * LOG2_PLUS_EPSILON) /* x < (LDBL_MIN_EXP - 1 - LDBL_MANT_DIG) * log(2) hence exp(x) < 2^(LDBL_MIN_EXP-1-LDBL_MANT_DIG), underflows to zero. */ return 0.0L; /* Decompose x into x = n * log(2) + m * log(2)/256 + y where n is an integer, m is an integer, -128 <= m <= 128, y is a number, |y| <= log(2)/512 + epsilon = 0.00135... Then exp(x) = 2^n * exp(m * log(2)/256) * exp(y) The first factor is an ldexpl() call. The second factor is a table lookup. The third factor is computed - either as sinh(y) + cosh(y) where sinh(y) is computed through the power series: sinh(y) = y + y^3/3! + y^5/5! + ... and cosh(y) is computed as hypot(1, sinh(y)), - or as exp(2*z) = (1 + tanh(z)) / (1 - tanh(z)) where z = y/2 and tanh(z) is computed through its power series: tanh(z) = z - 1/3 * z^3 + 2/15 * z^5 - 17/315 * z^7 + 62/2835 * z^9 - 1382/155925 * z^11 + 21844/6081075 * z^13 - 929569/638512875 * z^15 + ... Since |z| <= log(2)/1024 < 0.0007, the relative contribution of the z^13 term is < 0.0007^12 < 2^-120 <= 2^-LDBL_MANT_DIG, therefore we can truncate the series after the z^11 term. Given the usual bounds LDBL_MAX_EXP <= 16384, LDBL_MIN_EXP >= -16381, LDBL_MANT_DIG <= 120, we can estimate x: -11440 <= x <= 11357. This means, when dividing x by log(2), where we want x mod log(2) to be precise to LDBL_MANT_DIG bits, we have to use an approximation to log(2) that has 14+LDBL_MANT_DIG bits. */ { long double nm = roundl (x * LOG2_BY_256_INVERSE); /* = 256 * n + m */ /* n has at most 15 bits, nm therefore has at most 23 bits, therefore n * LOG2_HI_PART is computed exactly, and n * LOG2_LO_PART is computed with an absolute error < 2^15 * 2e-10 * 2^-LDBL_MANT_DIG. */ long double y_tmp = x - nm * LOG2_BY_256_HI_PART; long double y = y_tmp - nm * LOG2_BY_256_LO_PART; long double z = 0.5L * y; /* Coefficients of the power series for tanh(z). */ #define TANH_COEFF_1 1.0L #define TANH_COEFF_3 -0.333333333333333333333333333333333333334L #define TANH_COEFF_5 0.133333333333333333333333333333333333334L #define TANH_COEFF_7 -0.053968253968253968253968253968253968254L #define TANH_COEFF_9 0.0218694885361552028218694885361552028218L #define TANH_COEFF_11 -0.00886323552990219656886323552990219656886L #define TANH_COEFF_13 0.00359212803657248101692546136990581435026L #define TANH_COEFF_15 -0.00145583438705131826824948518070211191904L long double z2 = z * z; long double tanh_z = (((((TANH_COEFF_11 * z2 + TANH_COEFF_9) * z2 + TANH_COEFF_7) * z2 + TANH_COEFF_5) * z2 + TANH_COEFF_3) * z2 + TANH_COEFF_1) * z; long double exp_y = (1.0L + tanh_z) / (1.0L - tanh_z); int n = (int) roundl (nm * (1.0L / 256.0L)); int m = (int) nm - 256 * n; return ldexpl (gl_expl_table[128 + m] * exp_y, n); } } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/explicit_bzero.c��������������������������������������������������������0000664�0000000�0000000�00000004744�14110572173�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Erasure of sensitive data, generic implementation. Copyright (C) 2016-2021 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 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/>. */ /* An assembler implementation of explicit_bzero can be created as an assembler alias of an optimized bzero implementation. Architecture-specific implementations also need to define __explicit_bzero_chk. */ #if !_LIBC # include <config.h> #endif /* memset_s need this define */ #if HAVE_MEMSET_S # define __STDC_WANT_LIB_EXT1__ 1 #endif #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if _LIBC /* glibc-internal users use __explicit_bzero_chk, and explicit_bzero redirects to that. */ # undef explicit_bzero #endif /* Set LEN bytes of S to 0. The compiler will not delete a call to this function, even if S is dead after the call. */ void explicit_bzero (void *s, size_t len) { #if defined _WIN32 && !defined __CYGWIN__ (void) SecureZeroMemory (s, len); #elif HAVE_EXPLICIT_MEMSET explicit_memset (s, '\0', len); #elif HAVE_MEMSET_S (void) memset_s (s, len, '\0', len); #elif defined __GNUC__ && !defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ asm volatile ("" ::: "memory"); #elif defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ /* With asm ("" ::: "memory") LLVM analyzes uses of 's' and finds that the whole thing is dead and eliminates it. Use 'g' to work around this problem. See <https://bugs.llvm.org/show_bug.cgi?id=15495#c11>. */ __asm__ volatile ("" : : "g"(s) : "memory"); #else /* Invoke memset through a volatile function pointer. This defeats compiler optimizations. */ void * (* const volatile volatile_memset) (void *, int, size_t) = memset; (void) volatile_memset (s, '\0', len); #endif } ����������������������������gnulib-20210822~d383792/lib/expm1.c�����������������������������������������������������������������0000664�0000000�0000000�00000045464�14110572173�0016260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function minus one. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <float.h> /* A value slightly larger than log(2). */ #define LOG2_PLUS_EPSILON 0.6931471805599454 /* Best possible approximation of log(2) as a 'double'. */ #define LOG2 0.693147180559945309417232121458176568075 /* Best possible approximation of 1/log(2) as a 'double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743 /* Best possible approximation of log(2)/256 as a 'double'. */ #define LOG2_BY_256 0.00270760617406228636491106297444600221904 /* Best possible approximation of 256/log(2) as a 'double'. */ #define LOG2_BY_256_INVERSE 369.329930467574632284140718336484387181 /* The upper 32 bits of log(2)/256. */ #define LOG2_BY_256_HI_PART 0.0027076061733168899081647396087646484375 /* log(2)/256 - LOG2_HI_PART. */ #define LOG2_BY_256_LO_PART \ 0.000000000000745396456746323365681353781544922399845 double expm1 (double x) { if (isnand (x)) return x; if (x >= (double) DBL_MAX_EXP * LOG2_PLUS_EPSILON) /* x > DBL_MAX_EXP * log(2) hence exp(x) > 2^DBL_MAX_EXP, overflows to Infinity. */ return HUGE_VAL; if (x <= (double) (- DBL_MANT_DIG) * LOG2_PLUS_EPSILON) /* x < (- DBL_MANT_DIG) * log(2) hence 0 < exp(x) < 2^-DBL_MANT_DIG, hence -1 < exp(x)-1 < -1 + 2^-DBL_MANT_DIG rounds to -1. */ return -1.0; if (x <= - LOG2_PLUS_EPSILON) /* 0 < exp(x) < 1/2. Just compute exp(x), then subtract 1. */ return exp (x) - 1.0; if (x == 0.0) /* Return a zero with the same sign as x. */ return x; /* Decompose x into x = n * log(2) + m * log(2)/256 + y where n is an integer, n >= -1, m is an integer, -128 <= m <= 128, y is a number, |y| <= log(2)/512 + epsilon = 0.00135... Then exp(x) = 2^n * exp(m * log(2)/256) * exp(y) Compute each factor minus one, then combine them through the formula (1+a)*(1+b) = 1 + (a+b*(1+a)), that is (1+a)*(1+b) - 1 = a + b*(1+a). The first factor is an ldexpl() call. The second factor is a table lookup. The third factor minus one is computed - either as sinh(y) + sinh(y)^2 / (cosh(y) + 1) where sinh(y) is computed through the power series: sinh(y) = y + y^3/3! + y^5/5! + ... and cosh(y) is computed as hypot(1, sinh(y)), - or as exp(2*z) - 1 = 2 * tanh(z) / (1 - tanh(z)) where z = y/2 and tanh(z) is computed through its power series: tanh(z) = z - 1/3 * z^3 + 2/15 * z^5 - 17/315 * z^7 + 62/2835 * z^9 - 1382/155925 * z^11 + 21844/6081075 * z^13 - 929569/638512875 * z^15 + ... Since |z| <= log(2)/1024 < 0.0007, the relative contribution of the z^7 term is < 0.0007^6 < 2^-60 <= 2^-DBL_MANT_DIG, therefore we can truncate the series after the z^5 term. Given the usual bounds DBL_MAX_EXP <= 16384, DBL_MANT_DIG <= 120, we can estimate x: -84 <= x <= 11357. This means, when dividing x by log(2), where we want x mod log(2) to be precise to DBL_MANT_DIG bits, we have to use an approximation to log(2) that has 14+DBL_MANT_DIG bits. */ { double nm = round (x * LOG2_BY_256_INVERSE); /* = 256 * n + m */ /* n has at most 15 bits, nm therefore has at most 23 bits, therefore n * LOG2_HI_PART is computed exactly, and n * LOG2_LO_PART is computed with an absolute error < 2^15 * 2e-10 * 2^-DBL_MANT_DIG. */ double y_tmp = x - nm * LOG2_BY_256_HI_PART; double y = y_tmp - nm * LOG2_BY_256_LO_PART; double z = 0.5L * y; /* Coefficients of the power series for tanh(z). */ #define TANH_COEFF_1 1.0 #define TANH_COEFF_3 -0.333333333333333333333333333333333333334 #define TANH_COEFF_5 0.133333333333333333333333333333333333334 #define TANH_COEFF_7 -0.053968253968253968253968253968253968254 #define TANH_COEFF_9 0.0218694885361552028218694885361552028218 #define TANH_COEFF_11 -0.00886323552990219656886323552990219656886 #define TANH_COEFF_13 0.00359212803657248101692546136990581435026 #define TANH_COEFF_15 -0.00145583438705131826824948518070211191904 double z2 = z * z; double tanh_z = ((TANH_COEFF_5 * z2 + TANH_COEFF_3) * z2 + TANH_COEFF_1) * z; double exp_y_minus_1 = 2.0 * tanh_z / (1.0 - tanh_z); int n = (int) round (nm * (1.0 / 256.0)); int m = (int) nm - 256 * n; /* expm1_table[i] = exp((i - 128) * log(2)/256) - 1. Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 257) (format t " ~D,~%" (float (- (exp (* (/ (- i 128) 256) (log 2L0))) 1) a))) */ static const double expm1_table[257] = { -0.292893218813452475599155637895150960716, -0.290976057839792401079436677742323809165, -0.289053698915417220095325702647879950038, -0.287126127947252846596498423285616993819, -0.285193330804014994382467110862430046956, -0.283255293316105578740250215722626632811, -0.281312001275508837198386957752147486471, -0.279363440435687168635744042695052413926, -0.277409596511476689981496879264164547161, -0.275450455178982509740597294512888729286, -0.273486002075473717576963754157712706214, -0.271516222799278089184548475181393238264, -0.269541102909676505674348554844689233423, -0.267560627926797086703335317887720824384, -0.265574783331509036569177486867109287348, -0.263583554565316202492529493866889713058, -0.261586927030250344306546259812975038038, -0.259584886088764114771170054844048746036, -0.257577417063623749727613604135596844722, -0.255564505237801467306336402685726757248, -0.253546135854367575399678234256663229163, -0.251522294116382286608175138287279137577, -0.2494929651867872398674385184702356751864, -0.247458134188296727960327722100283867508, -0.24541778620328863011699022448340323429, -0.243371906273695048903181511842366886387, -0.24132047940089265059510885341281062657, -0.239263490545592708236869372901757573532, -0.237200924627730846574373155241529522695, -0.23513276652635648805745654063657412692, -0.233059001079521999099699248246140670544, -0.230979613084171535783261520405692115669, -0.228894587296029588193854068954632579346, -0.226803908429489222568744221853864674729, -0.224707561157500020438486294646580877171, -0.222605530111455713940842831198332609562, -0.2204977998810815164831359552625710592544, -0.218384355014321147927034632426122058645, -0.2162651800172235534675441445217774245016, -0.214140259353829315375718509234297186439, -0.212009577446056756772364919909047495547, -0.209873118673587736597751517992039478005, -0.2077308673737531349400659265343210916196, -0.205582807841418027883101951185666435317, -0.2034289243288665510313756784404656320656, -0.201269201045686450868589852895683430425, -0.199103622158653323103076879204523186316, -0.196932171791614537151556053482436428417, -0.19475483402537284591023966632129970827, -0.192571592897569679960015418424270885733, -0.190382432402568125350119133273631796029, -0.188187336491335584102392022226559177731, -0.185986289071326116575890738992992661386, -0.183779274006362464829286135533230759947, -0.181566275116517756116147982921992768975, -0.17934727617799688564586793151548689933, -0.1771222609230175777406216376370887771665, -0.1748912130396911245164132617275148983224, -0.1726541161719028012138814282020908791644, -0.170410953919191957302175212789218768074, -0.168161709836631782476831771511804777363, -0.165906367434708746670203829291463807099, -0.1636449101792017131905953879307692887046, -0.161377321491060724103867675441291294819, -0.15910358474628545696887452376678510496, -0.15682368327580335203567701228614769857, -0.154537600365347409013071332406381692911, -0.152245319255333652509541396360635796882, -0.149946823140738265249318713251248832456, -0.147642095170974388162796469615281683674, -0.145331118449768586448102562484668501975, -0.143013876035036980698187522160833990549, -0.140690350938761042185327811771843747742, -0.138360526126863051392482883127641270248, -0.136024384519081218878475585385633792948, -0.133681908988844467561490046485836530346, -0.131333082363146875502898959063916619876, -0.128977887422421778270943284404535317759, -0.126616306900415529961291721709773157771, -0.1242483234840609219490048572320697039866, -0.121873919813350258443919690312343389353, -0.1194930784812080879189542126763637438278, -0.11710578203336358947830887503073906297, -0.1147120129682226132300120925687579825894, -0.1123117537367393737247203999003383961205, -0.1099049867422877955201404475637647649574, -0.1074916943405325099278897180135900838485, -0.1050718588392995019970556101123417014993, -0.102645462498446406786148378936109092823, -0.1002124875297324539725723033374854302454, -0.097772916096688059846161368344495155786, -0.0953267303144840657307406742107731280055, -0.092873912249800621875082699818829828767, -0.0904144439206957158520284361718212536293, -0.0879483072964733445019372468353990225585, -0.0854754842975513284540160873038416459095, -0.0829959567953287682564584052058555719614, -0.080509706612053141143695628825336081184, -0.078016715520687037466429613329061550362, -0.075516965244774535807472733052603963221, -0.073010437458307215803773464831151680239, -0.070497113785589807692349282254427317595, -0.067976975801105477595185454402763710658, -0.0654500050293807475554878955602008567352, -0.06291618294485004933500052502277673278, -0.0603754909717199109794126487955155117284, -0.0578279104838327751561896480162548451191, -0.055273422804530448266460732621318468453, -0.0527120092065171793298906732865376926237, -0.0501436509117223676387482401930039000769, -0.0475683290911628981746625337821392744829, -0.044986024864805103778829470427200864833, -0.0423967193014263530636943648520845560749, -0.0398003934184762630513928111129293882558, -0.0371970281819375355214808849088086316225, -0.0345866045061864160477270517354652168038, -0.0319691032538527747009720477166542375817, -0.0293445052356798073922893825624102948152, -0.0267127912103833568278979766786970786276, -0.0240739418845108520444897665995250062307, -0.0214279379122998654908388741865642544049, -0.018774759895536286618755114942929674984, -0.016114388383412110943633198761985316073, -0.01344680387238284353202993186779328685225, -0.0107719868060245158708750409344163322253, -0.00808991757489031507008688867384418356197, -0.00540057651636682434752231377783368554176, -0.00270394391452987374234008615207739887604, 0.0, 0.00271127505020248543074558845036204047301, 0.0054299011128028213513839559347998147001, 0.00815589811841751578309489081720103927357, 0.0108892860517004600204097905618605243881, 0.01363008495148943884025892906393992959584, 0.0163783149109530379404931137862940627635, 0.0191339960777379496848780958207928793998, 0.0218971486541166782344801347832994397821, 0.0246677928971356451482890762708149276281, 0.0274459491187636965388611939222137814994, 0.0302316376860410128717079024539045670944, 0.0330248790212284225001082839704609180866, 0.0358256936019571200299832090180813718441, 0.0386341019613787906124366979546397325796, 0.0414501246883161412645460790118931264803, 0.0442737824274138403219664787399290087847, 0.0471050958792898661299072502271122405627, 0.049944085800687266082038126515907909062, 0.0527907730046263271198912029807463031904, 0.05564517836055715880834132515293865216, 0.0585073227945126901057721096837166450754, 0.0613772272892620809505676780038837262945, 0.0642549128844645497886112570015802206798, 0.0671404006768236181695211209928091626068, 0.070033711820241773542411936757623568504, 0.0729348675259755513850354508738275853402, 0.0758438890627910378032286484760570740623, 0.0787607977571197937406800374384829584908, 0.081685614993215201942115594422531125645, 0.0846183622133092378161051719066143416095, 0.0875590609177696653467978309440397078697, 0.090507732665257659207010655760707978993, 0.0934643990728858542282201462504471620805, 0.096429081816376823386138295859248481766, 0.099401802630221985463696968238829904039, 0.1023825833078409435564142094256468575113, 0.1053714457017412555882746962569503110404, 0.1083684117236786380094236494266198501387, 0.111373503344817603850149254228916637444, 0.1143867425958925363088129569196030678004, 0.1174081515673691990545799630857802666544, 0.120437752409606684429003879866313012766, 0.1234755673330198007337297397753214319548, 0.1265216186082418997947986437870347776336, 0.12957592856628814599726498884024982591, 0.1326385195987192279870737236776230843835, 0.135709414157805514240390330676117013429, 0.1387886347566916537038302838415112547204, 0.14187620396956162271229760828788093894, 0.144972144431804219394413888222915895793, 0.148076478840179006778799662697342680031, 0.15118922995298270581775963520198253612, 0.154310420590216039548221528724806960684, 0.157440073633751029613085766293796821108, 0.160578212027498746369459472576090986253, 0.163724858777577513813573599092185312343, 0.166880036952481570555516298414089287832, 0.1700437696832501880802590357927385730016, 0.1732160801636372475348043545132453888896, 0.176396991650281276284645728483848641053, 0.1795865274628759454861005667694405189764, 0.182784710984341029924457204693850757963, 0.185991565660993831371265649534215563735, 0.189207115002721066717499970560475915293, 0.192431382583151222142727558145431011481, 0.1956643920398273745838370498654519757025, 0.1989061670743804817703025579763002069494, 0.202156731452703142096396957497765876, 0.205416109005123825604211432558411335666, 0.208684323626581577354792255889216998483, 0.211961399276801194468168917732493045449, 0.2152473599804688781165202513387984576236, 0.218542229827408361758207148117394510722, 0.221846032972757516903891841911570785834, 0.225158793637145437709464594384845353705, 0.2284805361068700056940089577927818403626, 0.231811284734075935884556653212794816605, 0.235151063936933305692912507415415760296, 0.238499898199816567833368865859612431546, 0.241857812073484048593677468726595605511, 0.245224830175257932775204967486152674173, 0.248600977189204736621766097302495545187, 0.251986277866316270060206031789203597321, 0.255380757024691089579390657442301194598, 0.258784439549716443077860441815162618762, 0.262197350394250708014010258518416459672, 0.265619514578806324196273999873453036297, 0.269050957191733222554419081032338004715, 0.272491703389402751236692044184602176772, 0.27594177839639210038120243475928938891, 0.279401207505669226913587970027852545961, 0.282870016078778280726669781021514051111, 0.286348229546025533601482208069738348358, 0.289835873406665812232747295491552189677, 0.293332973229089436725559789048704304684, 0.296839554651009665933754117792451159835, 0.300355643379650651014140567070917791291, 0.303881265191935898574523648951997368331, 0.30741644593467724479715157747196172848, 0.310961211524764341922991786330755849366, 0.314515587949354658485983613383997794966, 0.318079601266063994690185647066116617661, 0.321653277603157514326511812330609226158, 0.325236643159741294629537095498721674113, 0.32882972420595439547865089632866510792, 0.33243254708316144935164337949073577407, 0.336045138204145773442627904371869759286, 0.339667524053303005360030669724352576023, 0.343299731186835263824217146181630875424, 0.346941786232945835788173713229537282073, 0.350593715892034391408522196060133960038, 0.354255546936892728298014740140702804344, 0.357927306212901046494536695671766697444, 0.361609020638224755585535938831941474643, 0.365300717204011815430698360337542855432, 0.369002422974590611929601132982192832168, 0.372714165087668369284997857144717215791, 0.376435970754530100216322805518686960261, 0.380167867260238095581945274358283464698, 0.383909881963831954872659527265192818003, 0.387662042298529159042861017950775988895, 0.391424375771926187149835529566243446678, 0.395196909966200178275574599249220994717, 0.398979672538311140209528136715194969206, 0.402772691220204706374713524333378817108, 0.40657599381901544248361973255451684411, 0.410389608217270704414375128268675481146, 0.414213562373095048801688724209698078569 }; double t = expm1_table[128 + m]; /* (1+t) * (1+exp_y_minus_1) - 1 = t + (1+t)*exp_y_minus_1 */ double p_minus_1 = t + (1.0 + t) * exp_y_minus_1; double s = ldexp (1.0, n) - 1.0; /* (1+s) * (1+p_minus_1) - 1 = s + (1+s)*p_minus_1 */ return s + (1.0 + s) * p_minus_1; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/expm1f.c����������������������������������������������������������������0000664�0000000�0000000�00000001563�14110572173�0016416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function minus one. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float expm1f (float x) { return (float) expm1 ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/expm1l.c����������������������������������������������������������������0000664�0000000�0000000�00000046632�14110572173�0016432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function minus one. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double expm1l (long double x) { return expm1 (x); } #else # include <float.h> /* A value slightly larger than log(2). */ #define LOG2_PLUS_EPSILON 0.6931471805599454L /* Best possible approximation of log(2) as a 'long double'. */ #define LOG2 0.693147180559945309417232121458176568075L /* Best possible approximation of 1/log(2) as a 'long double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743L /* Best possible approximation of log(2)/256 as a 'long double'. */ #define LOG2_BY_256 0.00270760617406228636491106297444600221904L /* Best possible approximation of 256/log(2) as a 'long double'. */ #define LOG2_BY_256_INVERSE 369.329930467574632284140718336484387181L /* The upper 32 bits of log(2)/256. */ #define LOG2_BY_256_HI_PART 0.0027076061733168899081647396087646484375L /* log(2)/256 - LOG2_HI_PART. */ #define LOG2_BY_256_LO_PART \ 0.000000000000745396456746323365681353781544922399845L long double expm1l (long double x) { if (isnanl (x)) return x; if (x >= (long double) LDBL_MAX_EXP * LOG2_PLUS_EPSILON) /* x > LDBL_MAX_EXP * log(2) hence exp(x) > 2^LDBL_MAX_EXP, overflows to Infinity. */ return HUGE_VALL; if (x <= (long double) (- LDBL_MANT_DIG) * LOG2_PLUS_EPSILON) /* x < (- LDBL_MANT_DIG) * log(2) hence 0 < exp(x) < 2^-LDBL_MANT_DIG, hence -1 < exp(x)-1 < -1 + 2^-LDBL_MANT_DIG rounds to -1. */ return -1.0L; if (x <= - LOG2_PLUS_EPSILON) /* 0 < exp(x) < 1/2. Just compute exp(x), then subtract 1. */ return expl (x) - 1.0L; if (x == 0.0L) /* Return a zero with the same sign as x. */ return x; /* Decompose x into x = n * log(2) + m * log(2)/256 + y where n is an integer, n >= -1, m is an integer, -128 <= m <= 128, y is a number, |y| <= log(2)/512 + epsilon = 0.00135... Then exp(x) = 2^n * exp(m * log(2)/256) * exp(y) Compute each factor minus one, then combine them through the formula (1+a)*(1+b) = 1 + (a+b*(1+a)), that is (1+a)*(1+b) - 1 = a + b*(1+a). The first factor is an ldexpl() call. The second factor is a table lookup. The third factor minus one is computed - either as sinh(y) + sinh(y)^2 / (cosh(y) + 1) where sinh(y) is computed through the power series: sinh(y) = y + y^3/3! + y^5/5! + ... and cosh(y) is computed as hypot(1, sinh(y)), - or as exp(2*z) - 1 = 2 * tanh(z) / (1 - tanh(z)) where z = y/2 and tanh(z) is computed through its power series: tanh(z) = z - 1/3 * z^3 + 2/15 * z^5 - 17/315 * z^7 + 62/2835 * z^9 - 1382/155925 * z^11 + 21844/6081075 * z^13 - 929569/638512875 * z^15 + ... Since |z| <= log(2)/1024 < 0.0007, the relative contribution of the z^13 term is < 0.0007^12 < 2^-120 <= 2^-LDBL_MANT_DIG, therefore we can truncate the series after the z^11 term. Given the usual bounds LDBL_MAX_EXP <= 16384, LDBL_MANT_DIG <= 120, we can estimate x: -84 <= x <= 11357. This means, when dividing x by log(2), where we want x mod log(2) to be precise to LDBL_MANT_DIG bits, we have to use an approximation to log(2) that has 14+LDBL_MANT_DIG bits. */ { long double nm = roundl (x * LOG2_BY_256_INVERSE); /* = 256 * n + m */ /* n has at most 15 bits, nm therefore has at most 23 bits, therefore n * LOG2_HI_PART is computed exactly, and n * LOG2_LO_PART is computed with an absolute error < 2^15 * 2e-10 * 2^-LDBL_MANT_DIG. */ long double y_tmp = x - nm * LOG2_BY_256_HI_PART; long double y = y_tmp - nm * LOG2_BY_256_LO_PART; long double z = 0.5L * y; /* Coefficients of the power series for tanh(z). */ #define TANH_COEFF_1 1.0L #define TANH_COEFF_3 -0.333333333333333333333333333333333333334L #define TANH_COEFF_5 0.133333333333333333333333333333333333334L #define TANH_COEFF_7 -0.053968253968253968253968253968253968254L #define TANH_COEFF_9 0.0218694885361552028218694885361552028218L #define TANH_COEFF_11 -0.00886323552990219656886323552990219656886L #define TANH_COEFF_13 0.00359212803657248101692546136990581435026L #define TANH_COEFF_15 -0.00145583438705131826824948518070211191904L long double z2 = z * z; long double tanh_z = (((((TANH_COEFF_11 * z2 + TANH_COEFF_9) * z2 + TANH_COEFF_7) * z2 + TANH_COEFF_5) * z2 + TANH_COEFF_3) * z2 + TANH_COEFF_1) * z; long double exp_y_minus_1 = 2.0L * tanh_z / (1.0L - tanh_z); int n = (int) roundl (nm * (1.0L / 256.0L)); int m = (int) nm - 256 * n; /* expm1l_table[i] = exp((i - 128) * log(2)/256) - 1. Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 257) (format t " ~D,~%" (float (- (exp (* (/ (- i 128) 256) (log 2L0))) 1) a))) */ static const long double expm1l_table[257] = { -0.292893218813452475599155637895150960716L, -0.290976057839792401079436677742323809165L, -0.289053698915417220095325702647879950038L, -0.287126127947252846596498423285616993819L, -0.285193330804014994382467110862430046956L, -0.283255293316105578740250215722626632811L, -0.281312001275508837198386957752147486471L, -0.279363440435687168635744042695052413926L, -0.277409596511476689981496879264164547161L, -0.275450455178982509740597294512888729286L, -0.273486002075473717576963754157712706214L, -0.271516222799278089184548475181393238264L, -0.269541102909676505674348554844689233423L, -0.267560627926797086703335317887720824384L, -0.265574783331509036569177486867109287348L, -0.263583554565316202492529493866889713058L, -0.261586927030250344306546259812975038038L, -0.259584886088764114771170054844048746036L, -0.257577417063623749727613604135596844722L, -0.255564505237801467306336402685726757248L, -0.253546135854367575399678234256663229163L, -0.251522294116382286608175138287279137577L, -0.2494929651867872398674385184702356751864L, -0.247458134188296727960327722100283867508L, -0.24541778620328863011699022448340323429L, -0.243371906273695048903181511842366886387L, -0.24132047940089265059510885341281062657L, -0.239263490545592708236869372901757573532L, -0.237200924627730846574373155241529522695L, -0.23513276652635648805745654063657412692L, -0.233059001079521999099699248246140670544L, -0.230979613084171535783261520405692115669L, -0.228894587296029588193854068954632579346L, -0.226803908429489222568744221853864674729L, -0.224707561157500020438486294646580877171L, -0.222605530111455713940842831198332609562L, -0.2204977998810815164831359552625710592544L, -0.218384355014321147927034632426122058645L, -0.2162651800172235534675441445217774245016L, -0.214140259353829315375718509234297186439L, -0.212009577446056756772364919909047495547L, -0.209873118673587736597751517992039478005L, -0.2077308673737531349400659265343210916196L, -0.205582807841418027883101951185666435317L, -0.2034289243288665510313756784404656320656L, -0.201269201045686450868589852895683430425L, -0.199103622158653323103076879204523186316L, -0.196932171791614537151556053482436428417L, -0.19475483402537284591023966632129970827L, -0.192571592897569679960015418424270885733L, -0.190382432402568125350119133273631796029L, -0.188187336491335584102392022226559177731L, -0.185986289071326116575890738992992661386L, -0.183779274006362464829286135533230759947L, -0.181566275116517756116147982921992768975L, -0.17934727617799688564586793151548689933L, -0.1771222609230175777406216376370887771665L, -0.1748912130396911245164132617275148983224L, -0.1726541161719028012138814282020908791644L, -0.170410953919191957302175212789218768074L, -0.168161709836631782476831771511804777363L, -0.165906367434708746670203829291463807099L, -0.1636449101792017131905953879307692887046L, -0.161377321491060724103867675441291294819L, -0.15910358474628545696887452376678510496L, -0.15682368327580335203567701228614769857L, -0.154537600365347409013071332406381692911L, -0.152245319255333652509541396360635796882L, -0.149946823140738265249318713251248832456L, -0.147642095170974388162796469615281683674L, -0.145331118449768586448102562484668501975L, -0.143013876035036980698187522160833990549L, -0.140690350938761042185327811771843747742L, -0.138360526126863051392482883127641270248L, -0.136024384519081218878475585385633792948L, -0.133681908988844467561490046485836530346L, -0.131333082363146875502898959063916619876L, -0.128977887422421778270943284404535317759L, -0.126616306900415529961291721709773157771L, -0.1242483234840609219490048572320697039866L, -0.121873919813350258443919690312343389353L, -0.1194930784812080879189542126763637438278L, -0.11710578203336358947830887503073906297L, -0.1147120129682226132300120925687579825894L, -0.1123117537367393737247203999003383961205L, -0.1099049867422877955201404475637647649574L, -0.1074916943405325099278897180135900838485L, -0.1050718588392995019970556101123417014993L, -0.102645462498446406786148378936109092823L, -0.1002124875297324539725723033374854302454L, -0.097772916096688059846161368344495155786L, -0.0953267303144840657307406742107731280055L, -0.092873912249800621875082699818829828767L, -0.0904144439206957158520284361718212536293L, -0.0879483072964733445019372468353990225585L, -0.0854754842975513284540160873038416459095L, -0.0829959567953287682564584052058555719614L, -0.080509706612053141143695628825336081184L, -0.078016715520687037466429613329061550362L, -0.075516965244774535807472733052603963221L, -0.073010437458307215803773464831151680239L, -0.070497113785589807692349282254427317595L, -0.067976975801105477595185454402763710658L, -0.0654500050293807475554878955602008567352L, -0.06291618294485004933500052502277673278L, -0.0603754909717199109794126487955155117284L, -0.0578279104838327751561896480162548451191L, -0.055273422804530448266460732621318468453L, -0.0527120092065171793298906732865376926237L, -0.0501436509117223676387482401930039000769L, -0.0475683290911628981746625337821392744829L, -0.044986024864805103778829470427200864833L, -0.0423967193014263530636943648520845560749L, -0.0398003934184762630513928111129293882558L, -0.0371970281819375355214808849088086316225L, -0.0345866045061864160477270517354652168038L, -0.0319691032538527747009720477166542375817L, -0.0293445052356798073922893825624102948152L, -0.0267127912103833568278979766786970786276L, -0.0240739418845108520444897665995250062307L, -0.0214279379122998654908388741865642544049L, -0.018774759895536286618755114942929674984L, -0.016114388383412110943633198761985316073L, -0.01344680387238284353202993186779328685225L, -0.0107719868060245158708750409344163322253L, -0.00808991757489031507008688867384418356197L, -0.00540057651636682434752231377783368554176L, -0.00270394391452987374234008615207739887604L, 0.0L, 0.00271127505020248543074558845036204047301L, 0.0054299011128028213513839559347998147001L, 0.00815589811841751578309489081720103927357L, 0.0108892860517004600204097905618605243881L, 0.01363008495148943884025892906393992959584L, 0.0163783149109530379404931137862940627635L, 0.0191339960777379496848780958207928793998L, 0.0218971486541166782344801347832994397821L, 0.0246677928971356451482890762708149276281L, 0.0274459491187636965388611939222137814994L, 0.0302316376860410128717079024539045670944L, 0.0330248790212284225001082839704609180866L, 0.0358256936019571200299832090180813718441L, 0.0386341019613787906124366979546397325796L, 0.0414501246883161412645460790118931264803L, 0.0442737824274138403219664787399290087847L, 0.0471050958792898661299072502271122405627L, 0.049944085800687266082038126515907909062L, 0.0527907730046263271198912029807463031904L, 0.05564517836055715880834132515293865216L, 0.0585073227945126901057721096837166450754L, 0.0613772272892620809505676780038837262945L, 0.0642549128844645497886112570015802206798L, 0.0671404006768236181695211209928091626068L, 0.070033711820241773542411936757623568504L, 0.0729348675259755513850354508738275853402L, 0.0758438890627910378032286484760570740623L, 0.0787607977571197937406800374384829584908L, 0.081685614993215201942115594422531125645L, 0.0846183622133092378161051719066143416095L, 0.0875590609177696653467978309440397078697L, 0.090507732665257659207010655760707978993L, 0.0934643990728858542282201462504471620805L, 0.096429081816376823386138295859248481766L, 0.099401802630221985463696968238829904039L, 0.1023825833078409435564142094256468575113L, 0.1053714457017412555882746962569503110404L, 0.1083684117236786380094236494266198501387L, 0.111373503344817603850149254228916637444L, 0.1143867425958925363088129569196030678004L, 0.1174081515673691990545799630857802666544L, 0.120437752409606684429003879866313012766L, 0.1234755673330198007337297397753214319548L, 0.1265216186082418997947986437870347776336L, 0.12957592856628814599726498884024982591L, 0.1326385195987192279870737236776230843835L, 0.135709414157805514240390330676117013429L, 0.1387886347566916537038302838415112547204L, 0.14187620396956162271229760828788093894L, 0.144972144431804219394413888222915895793L, 0.148076478840179006778799662697342680031L, 0.15118922995298270581775963520198253612L, 0.154310420590216039548221528724806960684L, 0.157440073633751029613085766293796821108L, 0.160578212027498746369459472576090986253L, 0.163724858777577513813573599092185312343L, 0.166880036952481570555516298414089287832L, 0.1700437696832501880802590357927385730016L, 0.1732160801636372475348043545132453888896L, 0.176396991650281276284645728483848641053L, 0.1795865274628759454861005667694405189764L, 0.182784710984341029924457204693850757963L, 0.185991565660993831371265649534215563735L, 0.189207115002721066717499970560475915293L, 0.192431382583151222142727558145431011481L, 0.1956643920398273745838370498654519757025L, 0.1989061670743804817703025579763002069494L, 0.202156731452703142096396957497765876L, 0.205416109005123825604211432558411335666L, 0.208684323626581577354792255889216998483L, 0.211961399276801194468168917732493045449L, 0.2152473599804688781165202513387984576236L, 0.218542229827408361758207148117394510722L, 0.221846032972757516903891841911570785834L, 0.225158793637145437709464594384845353705L, 0.2284805361068700056940089577927818403626L, 0.231811284734075935884556653212794816605L, 0.235151063936933305692912507415415760296L, 0.238499898199816567833368865859612431546L, 0.241857812073484048593677468726595605511L, 0.245224830175257932775204967486152674173L, 0.248600977189204736621766097302495545187L, 0.251986277866316270060206031789203597321L, 0.255380757024691089579390657442301194598L, 0.258784439549716443077860441815162618762L, 0.262197350394250708014010258518416459672L, 0.265619514578806324196273999873453036297L, 0.269050957191733222554419081032338004715L, 0.272491703389402751236692044184602176772L, 0.27594177839639210038120243475928938891L, 0.279401207505669226913587970027852545961L, 0.282870016078778280726669781021514051111L, 0.286348229546025533601482208069738348358L, 0.289835873406665812232747295491552189677L, 0.293332973229089436725559789048704304684L, 0.296839554651009665933754117792451159835L, 0.300355643379650651014140567070917791291L, 0.303881265191935898574523648951997368331L, 0.30741644593467724479715157747196172848L, 0.310961211524764341922991786330755849366L, 0.314515587949354658485983613383997794966L, 0.318079601266063994690185647066116617661L, 0.321653277603157514326511812330609226158L, 0.325236643159741294629537095498721674113L, 0.32882972420595439547865089632866510792L, 0.33243254708316144935164337949073577407L, 0.336045138204145773442627904371869759286L, 0.339667524053303005360030669724352576023L, 0.343299731186835263824217146181630875424L, 0.346941786232945835788173713229537282073L, 0.350593715892034391408522196060133960038L, 0.354255546936892728298014740140702804344L, 0.357927306212901046494536695671766697444L, 0.361609020638224755585535938831941474643L, 0.365300717204011815430698360337542855432L, 0.369002422974590611929601132982192832168L, 0.372714165087668369284997857144717215791L, 0.376435970754530100216322805518686960261L, 0.380167867260238095581945274358283464698L, 0.383909881963831954872659527265192818003L, 0.387662042298529159042861017950775988895L, 0.391424375771926187149835529566243446678L, 0.395196909966200178275574599249220994717L, 0.398979672538311140209528136715194969206L, 0.402772691220204706374713524333378817108L, 0.40657599381901544248361973255451684411L, 0.410389608217270704414375128268675481146L, 0.414213562373095048801688724209698078569L }; long double t = expm1l_table[128 + m]; /* (1+t) * (1+exp_y_minus_1) - 1 = t + (1+t)*exp_y_minus_1 */ long double p_minus_1 = t + (1.0L + t) * exp_y_minus_1; long double s = ldexpl (1.0L, n) - 1.0L; /* (1+s) * (1+p_minus_1) - 1 = s + (1+s)*p_minus_1 */ return s + (1.0L + s) * p_minus_1; } } #endif ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fabsf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0016273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Absolute value. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float fabsf (float x) { return (float) fabs ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fabsl.c�����������������������������������������������������������������0000664�0000000�0000000�00000002104�14110572173�0016275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Absolute value. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> /* fabsl (x) can be defined as copysignl (x, 1.0L). Or, more directly, as (signbit (x) ? - x : x). */ #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double fabsl (long double x) { return fabs (x); } #else long double fabsl (long double x) { return (signbit (x) ? - x : x); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/faccessat.c�������������������������������������������������������������0000664�0000000�0000000�00000005527�14110572173�0017156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check the access rights of a file relative to an open directory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ /* If the user's config.h happens to include <unistd.h>, let it include only the system's <unistd.h> here, so that orig_faccessat doesn't recurse to rpl_faccessat. */ #define _GL_INCLUDING_UNISTD_H #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #undef _GL_INCLUDING_UNISTD_H #if HAVE_FACCESSAT static int orig_faccessat (int fd, char const *name, int mode, int flag) { return faccessat (fd, name, mode, flag); } #endif /* Write "unistd.h" here, not <unistd.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <unistd.h> above. */ #include "unistd.h" #ifndef HAVE_ACCESS /* Mingw lacks access, but it also lacks real vs. effective ids, so the gnulib euidaccess module is good enough. */ # undef access # define access euidaccess #endif #if HAVE_FACCESSAT int rpl_faccessat (int fd, char const *file, int mode, int flag) { int result = orig_faccessat (fd, file, mode, flag); if (result == 0 && file[strlen (file) - 1] == '/') { struct stat st; result = fstatat (fd, file, &st, 0); if (result == 0 && !S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } return result; } #else /* !HAVE_FACCESSAT */ /* Invoke access or euidaccess on file, FILE, using mode MODE, in the directory open on descriptor FD. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then (access|euidaccess)/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. Note that this implementation only supports AT_EACCESS, although some native versions also support AT_SYMLINK_NOFOLLOW. */ # define AT_FUNC_NAME faccessat # define AT_FUNC_F1 euidaccess # define AT_FUNC_F2 access # define AT_FUNC_USE_F1_COND AT_EACCESS # define AT_FUNC_POST_FILE_PARAM_DECLS , int mode, int flag # define AT_FUNC_POST_FILE_ARGS , mode # include "at-func.c" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fatal-signal.c����������������������������������������������������������0000664�0000000�0000000�00000023677�14110572173�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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/>. */ #include <config.h> /* Specification. */ #include "fatal-signal.h" #include <stdbool.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include "glthread/lock.h" #include "thread-optim.h" #include "sig-handler.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* ========================================================================= */ /* The list of fatal signals. These are those signals whose default action is to terminate the process without a core dump, except SIGKILL - because it cannot be caught, SIGALRM SIGUSR1 SIGUSR2 SIGPOLL SIGIO SIGLOST - because applications often use them for their own purpose, SIGPROF SIGVTALRM - because they are used for profiling, SIGSTKFLT - because it is more similar to SIGFPE, SIGSEGV, SIGBUS, SIGSYS - because it is more similar to SIGABRT, SIGSEGV, SIGPWR - because it of too special use, SIGRTMIN...SIGRTMAX - because they are reserved for application use. plus SIGXCPU, SIGXFSZ - because they are quite similar to SIGTERM. */ static int fatal_signals[] = { /* ISO C 99 signals. */ #ifdef SIGINT SIGINT, #endif #ifdef SIGTERM SIGTERM, #endif /* POSIX:2001 signals. */ #ifdef SIGHUP SIGHUP, #endif #ifdef SIGPIPE SIGPIPE, #endif /* BSD signals. */ #ifdef SIGXCPU SIGXCPU, #endif #ifdef SIGXFSZ SIGXFSZ, #endif /* Native Windows signals. */ #ifdef SIGBREAK SIGBREAK, #endif 0 }; #define num_fatal_signals (SIZEOF (fatal_signals) - 1) /* Eliminate signals whose signal handler is SIG_IGN. */ static void init_fatal_signals (void) { /* This function is multithread-safe even without synchronization, because if two threads execute it simultaneously, the fatal_signals[] array will not change any more after the first of the threads has completed this function. */ static bool fatal_signals_initialized = false; if (!fatal_signals_initialized) { size_t i; for (i = 0; i < num_fatal_signals; i++) { struct sigaction action; if (sigaction (fatal_signals[i], NULL, &action) >= 0 && get_handler (&action) == SIG_IGN) fatal_signals[i] = -1; } fatal_signals_initialized = true; } } /* ========================================================================= */ typedef _GL_ASYNC_SAFE void (*action_t) (int sig); /* Type of an entry in the actions array. The 'action' field is accessed from within the fatal_signal_handler(), therefore we mark it as 'volatile'. */ typedef struct { volatile action_t action; } actions_entry_t; /* The registered cleanup actions. */ static actions_entry_t static_actions[32]; static actions_entry_t * volatile actions = static_actions; static sig_atomic_t volatile actions_count = 0; static size_t actions_allocated = SIZEOF (static_actions); /* The saved signal handlers. Size 32 would not be sufficient: On HP-UX, SIGXCPU = 33, SIGXFSZ = 34. */ static struct sigaction saved_sigactions[64]; /* Uninstall the handlers. */ static _GL_ASYNC_SAFE void uninstall_handlers (void) { size_t i; for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) { int sig = fatal_signals[i]; if (saved_sigactions[sig].sa_handler == SIG_IGN) saved_sigactions[sig].sa_handler = SIG_DFL; sigaction (sig, &saved_sigactions[sig], NULL); } } /* The signal handler. It gets called asynchronously. */ static _GL_ASYNC_SAFE void fatal_signal_handler (int sig) { for (;;) { /* Get the last registered cleanup action, in a reentrant way. */ action_t action; size_t n = actions_count; if (n == 0) break; n--; actions_count = n; action = actions[n].action; /* Execute the action. */ action (sig); } /* Now execute the signal's default action. If the signal being delivered was blocked, the re-raised signal would be delivered when this handler returns. But the way we install this handler, no signal is blocked, and the re-raised signal is delivered already during raise(). */ uninstall_handlers (); raise (sig); } /* Install the handlers. */ static void install_handlers (void) { size_t i; struct sigaction action; action.sa_handler = &fatal_signal_handler; /* If we get a fatal signal while executing fatal_signal_handler, enter fatal_signal_handler recursively, since it is reentrant. Hence no SA_RESETHAND. */ action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) { int sig = fatal_signals[i]; if (!(sig < sizeof (saved_sigactions) / sizeof (saved_sigactions[0]))) abort (); sigaction (sig, &action, &saved_sigactions[sig]); } } /* Lock that makes at_fatal_signal multi-thread safe. */ gl_lock_define_initialized (static, at_fatal_signal_lock) /* Register a cleanup function to be executed when a catchable fatal signal occurs. */ int at_fatal_signal (action_t action) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (at_fatal_signal_lock); static bool cleanup_initialized = false; if (!cleanup_initialized) { init_fatal_signals (); install_handlers (); cleanup_initialized = true; } int ret = 0; if (actions_count == actions_allocated) { /* Extend the actions array. Note that we cannot use xrealloc(), because then the cleanup() function could access an already deallocated array. */ actions_entry_t *old_actions = actions; size_t old_actions_allocated = actions_allocated; size_t new_actions_allocated = 2 * actions_allocated; actions_entry_t *new_actions = (actions_entry_t *) malloc (new_actions_allocated * sizeof (actions_entry_t)); if (new_actions == NULL) { ret = -1; goto done; } size_t k; /* Don't use memcpy() here, because memcpy takes non-volatile arguments and is therefore not guaranteed to complete all memory stores before the next statement. */ for (k = 0; k < old_actions_allocated; k++) new_actions[k] = old_actions[k]; actions = new_actions; actions_allocated = new_actions_allocated; /* Now we can free the old actions array. */ /* No, we can't do that. If fatal_signal_handler is running in a different thread and has already fetched the actions pointer (getting old_actions) but not yet accessed its n-th element, that thread may crash when accessing an element of the already freed old_actions array. */ #if 0 if (old_actions != static_actions) free (old_actions); #endif } /* The two uses of 'volatile' in the types above (and ISO C 99 section 5.1.2.3.(5)) ensure that we increment the actions_count only after the new action has been written to the memory location actions[actions_count]. */ actions[actions_count].action = action; actions_count++; done: if (mt) gl_lock_unlock (at_fatal_signal_lock); return ret; } /* ========================================================================= */ static sigset_t fatal_signal_set; static void do_init_fatal_signal_set (void) { size_t i; init_fatal_signals (); sigemptyset (&fatal_signal_set); for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) sigaddset (&fatal_signal_set, fatal_signals[i]); } /* Ensure that do_init_fatal_signal_set is called once only. */ gl_once_define(static, fatal_signal_set_once) static void init_fatal_signal_set (void) { gl_once (fatal_signal_set_once, do_init_fatal_signal_set); } /* Lock and counter that allow block_fatal_signals/unblock_fatal_signals pairs to occur in different threads and even overlap in time. */ gl_lock_define_initialized (static, fatal_signals_block_lock) static unsigned int fatal_signals_block_counter = 0; /* Temporarily delay the catchable fatal signals. */ void block_fatal_signals (void) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (fatal_signals_block_lock); if (fatal_signals_block_counter++ == 0) { init_fatal_signal_set (); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); } if (mt) gl_lock_unlock (fatal_signals_block_lock); } /* Stop delaying the catchable fatal signals. */ void unblock_fatal_signals (void) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (fatal_signals_block_lock); if (fatal_signals_block_counter == 0) /* There are more calls to unblock_fatal_signals() than to block_fatal_signals(). */ abort (); if (--fatal_signals_block_counter == 0) { init_fatal_signal_set (); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); } if (mt) gl_lock_unlock (fatal_signals_block_lock); } unsigned int get_fatal_signals (int signals[64]) { init_fatal_signal_set (); { int *p = signals; size_t i; for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) *p++ = fatal_signals[i]; return p - signals; } } const sigset_t * get_fatal_signal_set (void) { init_fatal_signal_set (); return &fatal_signal_set; } �����������������������������������������������������������������gnulib-20210822~d383792/lib/fatal-signal.h����������������������������������������������������������0000664�0000000�0000000�00000007572�14110572173�0017573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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 _FATAL_SIGNAL_H #define _FATAL_SIGNAL_H #include <signal.h> #ifdef __cplusplus extern "C" { #endif /* It is often useful to do some cleanup action when a usually fatal signal terminates the process, like removing a temporary file or killing a subprocess that may be stuck waiting for a device, pipe or network input. Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others. The limitation of this facility is that it cannot work for SIGKILL. Signals with a SIG_IGN handler are considered to be non-fatal. The functions in this file assume that when a SIG_IGN handler is installed for a signal, it was installed before any functions in this file were called and it stays so for the whole lifetime of the process. */ /* Register a cleanup function to be executed when a catchable fatal signal occurs. Restrictions for the cleanup function: - The cleanup function can do all kinds of system calls. It may also modify (clobber) errno. - It can also access application dependent memory locations and data structures provided they are in a consistent state. One way to ensure this is through block_fatal_signals()/unblock_fatal_signals(), see below. Another - more tricky - way to ensure this is the careful use of 'volatile'. However, - malloc() and similarly complex facilities are not safe to be called because they are not guaranteed to be in a consistent state. - Also, the cleanup function must not block the catchable fatal signals and leave them blocked upon return. The cleanup function is executed asynchronously. It is unspecified whether during its execution the catchable fatal signals are blocked or not. Return 0 upon success, or -1 if there was a memory allocation problem. */ extern int at_fatal_signal (_GL_ASYNC_SAFE void (*function) (int sig)); /* Sometimes it is necessary to block the usually fatal signals while the data structures being accessed by the cleanup action are being built or reorganized. This is the case, for example, when a temporary file or directory is created through mkstemp() or mkdtemp(), because these functions create the temporary file or directory _before_ returning its name to the application. */ /* Temporarily delay the catchable fatal signals. The signals will be blocked (= delayed) until the next call to unblock_fatal_signals(). If the signals are already blocked, a further call to block_fatal_signals() has no effect. */ extern void block_fatal_signals (void); /* Stop delaying the catchable fatal signals. */ extern void unblock_fatal_signals (void); /* Return the list of signals that block_fatal_signals/unblock_fatal_signals would block or unblock. Fills signals[0..count-1] and returns count. */ extern unsigned int get_fatal_signals (int signals[64]); /* Return the list of signals that block_fatal_signals/unblock_fatal_signals would block or unblock. */ extern const sigset_t * get_fatal_signal_set (void); #ifdef __cplusplus } #endif #endif /* _FATAL_SIGNAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fbufmode.c��������������������������������������������������������������0000664�0000000�0000000�00000006451�14110572173�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "fbufmode.h" #if HAVE___FLBF # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif #endif #include "stdio-impl.h" int fbufmode (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ # if HAVE___FLBF /* glibc >= 2.2 */ if (__flbf (fp)) return _IOLBF; # else if (fp->_flags & _IO_LINE_BUF) return _IOLBF; # endif if (fp->_flags & _IO_UNBUFFERED) return _IONBF; return _IOFBF; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if (fp_->_flags & __SLBF) return _IOLBF; if (fp_->_flags & __SNBF) return _IONBF; return _IOFBF; #elif defined __EMX__ /* emx+gcc */ return fp->_flags & (_IOLBF | _IONBF | _IOFBF); #elif defined __minix /* Minix */ return fp->_flags & (_IOLBF | _IONBF | _IOFBF); #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ # if defined WINDOWS_OPAQUE_FILE if (fp_->_flag & 0x100) return _IOFBF; /* Impossible to distinguish _IOFBF and _IOLBF. */ else return _IONBF; # else # if HAVE___FLBF /* Solaris >= 7 */ if (__flbf (fp)) return _IOLBF; # else if (fp_->_flag & _IOLBF) return _IOLBF; # endif if (fp_->_flag & _IONBF) return _IONBF; return _IOFBF; # endif #elif defined __UCLIBC__ /* uClibc */ if (fp->__modeflags & __FLAG_LBF) return _IOLBF; if (fp->__modeflags & __FLAG_NBF) return _IONBF; return _IOFBF; #elif defined __QNX__ /* QNX */ if (fp->_Mode & 0x400 /* _MLBF */) return _IOLBF; if (fp->_Mode & 0x800 /* _MNBF */) return _IONBF; return _IOFBF; #elif defined __MINT__ /* Atari FreeMiNT */ if (fp->__linebuf) return _IOLBF; return (fp->__bufsize > 0 ? _IOFBF : _IONBF); #elif HAVE___FLBF && HAVE___FBUFSIZE /* musl libc */ if (__flbf (fp)) return _IOLBF; return (__fbufsize (fp) > 0 ? _IOFBF : _IONBF); #elif defined EPLAN9 /* Plan9 */ if (fp->flags & 2 /* LINEBUF */) return _IOLBF; if (fp->bufl) return _IOFBF; return _IONBF; #else # error "Please port gnulib fbufmode.c to your platform! Look at the setvbuf implementation." #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fbufmode.h��������������������������������������������������������������0000664�0000000�0000000�00000002132�14110572173�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007, 2009-2021 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/>. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Return the buffering mode of the stream STREAM. Result means ------ ------- _IONBF unbuffered _IOLBF line buffered _IOFBF fully buffered STREAM must not be wide-character oriented. */ extern int fbufmode (FILE *stream); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fchdir.c����������������������������������������������������������������0000664�0000000�0000000�00000013412�14110572173�0016451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fchdir replacement. Copyright (C) 2006-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include "assure.h" #include "filename.h" #include "filenamecat.h" #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif /* This replacement assumes that a directory is not renamed while opened through a file descriptor. FIXME: On mingw, this would be possible to enforce if we were to also open a HANDLE to each directory currently visited by a file descriptor, since mingw refuses to rename any in-use file system object. */ /* Array of file descriptors opened. If REPLACE_OPEN_DIRECTORY or if it points to a directory, it stores info about this directory. */ typedef struct { char *name; /* Absolute name of the directory, or NULL. */ /* FIXME - add a DIR* member to make dirfd possible on mingw? */ } dir_info_t; static dir_info_t *dirs; static size_t dirs_allocated; /* Try to ensure dirs has enough room for a slot at index fd; free any contents already in that slot. Return false and set errno to ENOMEM on allocation failure. */ static bool ensure_dirs_slot (size_t fd) { if (fd < dirs_allocated) free (dirs[fd].name); else { size_t new_allocated; dir_info_t *new_dirs; new_allocated = 2 * dirs_allocated + 1; if (new_allocated <= fd) new_allocated = fd + 1; new_dirs = (dirs != NULL ? (dir_info_t *) realloc (dirs, new_allocated * sizeof *dirs) : (dir_info_t *) malloc (new_allocated * sizeof *dirs)); if (new_dirs == NULL) return false; memset (new_dirs + dirs_allocated, 0, (new_allocated - dirs_allocated) * sizeof *dirs); dirs = new_dirs; dirs_allocated = new_allocated; } return true; } /* Return an absolute name of DIR in malloc'd storage. Upon failure, return NULL with errno set. */ static char * get_name (char const *dir) { char *cwd; char *result; if (IS_ABSOLUTE_FILE_NAME (dir)) return strdup (dir); /* We often encounter "."; treat it as a special case. */ cwd = getcwd (NULL, 0); if (!cwd || (dir[0] == '.' && dir[1] == '\0')) return cwd; result = mfile_name_concat (cwd, dir, NULL); free (cwd); return result; } /* Hook into the gnulib replacements for open() and close() to keep track of the open file descriptors. */ /* Close FD, cleaning up any fd to name mapping if fd was visiting a directory. */ void _gl_unregister_fd (int fd) { if (fd >= 0 && fd < dirs_allocated) { free (dirs[fd].name); dirs[fd].name = NULL; } } /* Mark FD as visiting FILENAME. FD must be non-negative, and refer to an open file descriptor. If REPLACE_OPEN_DIRECTORY is non-zero, this should only be called if FD is visiting a directory. Close FD and return -1 with errno set if there is insufficient memory to track the directory name; otherwise return FD. */ int _gl_register_fd (int fd, const char *filename) { struct stat statbuf; assure (0 <= fd); if (REPLACE_OPEN_DIRECTORY || (fstat (fd, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))) { if (!ensure_dirs_slot (fd) || (dirs[fd].name = get_name (filename)) == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } return fd; } /* Mark NEWFD as a duplicate of OLDFD; useful from dup, dup2, dup3, and fcntl. Both arguments must be valid and distinct file descriptors. Close NEWFD and return -1 if OLDFD is tracking a directory, but there is insufficient memory to track the same directory in NEWFD; otherwise return NEWFD. */ int _gl_register_dup (int oldfd, int newfd) { assure (0 <= oldfd && 0 <= newfd && oldfd != newfd); if (oldfd < dirs_allocated && dirs[oldfd].name) { /* Duplicated a directory; must ensure newfd is allocated. */ if (!ensure_dirs_slot (newfd) || (dirs[newfd].name = strdup (dirs[oldfd].name)) == NULL) { int saved_errno = errno; close (newfd); errno = saved_errno; newfd = -1; } } else if (newfd < dirs_allocated) { /* Duplicated a non-directory; ensure newfd is cleared. */ free (dirs[newfd].name); dirs[newfd].name = NULL; } return newfd; } /* If FD is currently visiting a directory, then return the name of that directory. Otherwise, return NULL and set errno. */ const char * _gl_directory_name (int fd) { if (0 <= fd && fd < dirs_allocated && dirs[fd].name != NULL) return dirs[fd].name; /* At this point, fd is either invalid, or open but not a directory. If dup2 fails, errno is correctly EBADF. */ if (0 <= fd) { if (dup2 (fd, fd) == fd) errno = ENOTDIR; } else errno = EBADF; return NULL; } /* Implement fchdir() in terms of chdir(). */ int fchdir (int fd) { const char *name = _gl_directory_name (fd); return name ? chdir (name) : -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fchmodat.c��������������������������������������������������������������0000664�0000000�0000000�00000012050�14110572173�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change the protections of file relative to an open directory. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering and Paul Eggert */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fchmodat doesn't recurse to rpl_fchmodat. */ #define __need_system_sys_stat_h #include <config.h> /* Specification. */ #include <sys/stat.h> #undef __need_system_sys_stat_h #if HAVE_FCHMODAT static int orig_fchmodat (int dir, char const *file, mode_t mode, int flags) { return fchmodat (dir, file, mode, flags); } #endif #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include <intprops.h> /* Invoke chmod or lchmod on FILE, using mode MODE, in the directory open on descriptor FD. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then (chmod|lchmod)/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. Note that an attempt to use a FLAG value of AT_SYMLINK_NOFOLLOW on a system without lchmod support causes this function to fail. */ #if HAVE_FCHMODAT int fchmodat (int dir, char const *file, mode_t mode, int flags) { # if HAVE_NEARLY_WORKING_FCHMODAT /* Correct the trailing slash handling. */ size_t len = strlen (file); if (len && file[len - 1] == '/') { struct stat st; if (fstatat (dir, file, &st, flags & AT_SYMLINK_NOFOLLOW) < 0) return -1; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } # endif # if NEED_FCHMODAT_NONSYMLINK_FIX if (flags == AT_SYMLINK_NOFOLLOW) { struct stat st; # if defined O_PATH && defined AT_EMPTY_PATH /* Open a file descriptor with O_NOFOLLOW, to make sure we don't follow symbolic links, if /proc is mounted. O_PATH is used to avoid a failure if the file is not readable. Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=14578> */ int fd = openat (dir, file, O_PATH | O_NOFOLLOW | O_CLOEXEC); if (fd < 0) return fd; /* Up to Linux 5.3 at least, when FILE refers to a symbolic link, the chmod call below will change the permissions of the symbolic link - which is undesired - and on many file systems (ext4, btrfs, jfs, xfs, ..., but not reiserfs) fail with error EOPNOTSUPP - which is misleading. Therefore test for a symbolic link explicitly. Use fstatat because fstat does not work on O_PATH descriptors before Linux 3.6. */ if (fstatat (fd, "", &st, AT_EMPTY_PATH) != 0) { int stat_errno = errno; close (fd); errno = stat_errno; return -1; } if (S_ISLNK (st.st_mode)) { close (fd); errno = EOPNOTSUPP; return -1; } # if defined __linux__ || defined __ANDROID__ || defined __CYGWIN__ static char const fmt[] = "/proc/self/fd/%d"; char buf[sizeof fmt - sizeof "%d" + INT_BUFSIZE_BOUND (int)]; sprintf (buf, fmt, fd); int chmod_result = chmod (buf, mode); int chmod_errno = errno; close (fd); if (chmod_result == 0) return chmod_result; if (chmod_errno != ENOENT) { errno = chmod_errno; return chmod_result; } # endif /* /proc is not mounted or would not work as in GNU/Linux. */ # else int fstatat_result = fstatat (dir, file, &st, AT_SYMLINK_NOFOLLOW); if (fstatat_result != 0) return fstatat_result; if (S_ISLNK (st.st_mode)) { errno = EOPNOTSUPP; return -1; } # endif /* Fall back on orig_fchmodat with no flags, despite a possible race. */ flags = 0; } # endif return orig_fchmodat (dir, file, mode, flags); } #else # define AT_FUNC_NAME fchmodat # define AT_FUNC_F1 lchmod # define AT_FUNC_F2 chmod # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode, int flag # define AT_FUNC_POST_FILE_ARGS , mode # include "at-func.c" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fchown-stub.c�����������������������������������������������������������0000664�0000000�0000000�00000002116�14110572173�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change ownership of a file. Copyright (C) 2004-2021 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, 2004. */ #include <config.h> #include <sys/types.h> #include <errno.h> /* A trivial substitute for 'fchown'. DJGPP 2.03 and earlier (and perhaps later) don't have 'fchown', so we pretend no-one has permission for this operation. */ int fchown (int fd, uid_t uid, gid_t gid) { errno = EPERM; return -1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fchownat.c��������������������������������������������������������������0000664�0000000�0000000�00000007120�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This function serves as replacement for a missing fchownat function, as well as a work around for the fchownat bug in glibc-2.4: <https://lists.ubuntu.com/archives/ubuntu-users/2006-September/093218.html> when the buggy fchownat-with-AT_SYMLINK_NOFOLLOW operates on a symlink, it mistakenly affects the symlink referent, rather than the symlink itself. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "openat.h" #if !HAVE_FCHOWNAT /* Replacement for Solaris' function by the same name. Invoke chown or lchown on file, FILE, using OWNER and GROUP, in the directory open on descriptor FD. If FLAG is AT_SYMLINK_NOFOLLOW, then use lchown, otherwise, use chown. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then (chown|lchown)/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ # define AT_FUNC_NAME fchownat # define AT_FUNC_F1 lchown # define AT_FUNC_F2 chown # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , uid_t owner, gid_t group, int flag # define AT_FUNC_POST_FILE_ARGS , owner, group # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #else /* HAVE_FCHOWNAT */ # undef fchownat # if FCHOWNAT_NOFOLLOW_BUG /* Failure to handle AT_SYMLINK_NOFOLLOW requires the /proc/self/fd or fchdir workaround to call lchown for lchownat, but there is no need to penalize chownat. */ static int local_lchownat (int fd, char const *file, uid_t owner, gid_t group); # define AT_FUNC_NAME local_lchownat # define AT_FUNC_F1 lchown # define AT_FUNC_POST_FILE_PARAM_DECLS , uid_t owner, gid_t group # define AT_FUNC_POST_FILE_ARGS , owner, group # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # endif /* Work around bugs with trailing slash, using the same workarounds as chown and lchown. */ int rpl_fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag) { # if FCHOWNAT_NOFOLLOW_BUG if (flag == AT_SYMLINK_NOFOLLOW) return local_lchownat (fd, file, owner, group); # endif # if FCHOWNAT_EMPTY_FILENAME_BUG if (file[0] == '\0') { errno = ENOENT; return -1; } # endif # if CHOWN_TRAILING_SLASH_BUG { size_t len = strlen (file); struct stat st; if (len && file[len - 1] == '/') { if (statat (fd, file, &st)) return -1; if (flag == AT_SYMLINK_NOFOLLOW) return fchownat (fd, file, owner, group, 0); } } # endif return fchownat (fd, file, owner, group, flag); } #endif /* HAVE_FCHOWNAT */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fclose.c����������������������������������������������������������������0000664�0000000�0000000�00000005614�14110572173�0016472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fclose replacement. Copyright (C) 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <unistd.h> #include "freading.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef fclose #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int fclose_nothrow (FILE *fp) { int result; TRY_MSVC_INVAL { result = fclose (fp); } CATCH_MSVC_INVAL { result = EOF; errno = EBADF; } DONE_MSVC_INVAL; return result; } #else # define fclose_nothrow fclose #endif /* Override fclose() to call the overridden fflush() or close(). */ int rpl_fclose (FILE *fp) { int saved_errno = 0; int fd; int result = 0; /* Don't change behavior on memstreams. */ fd = fileno (fp); if (fd < 0) return fclose_nothrow (fp); /* We only need to flush the file if it is not reading or if it is seekable. This only guarantees the file position of input files if the fflush module is also in use. */ if ((!freading (fp) || lseek (fileno (fp), 0, SEEK_CUR) != -1) && fflush (fp)) saved_errno = errno; /* fclose() calls close(), but we need to also invoke all hooks that our overridden close() function invokes. See lib/close.c. */ #if WINDOWS_SOCKETS /* Call the overridden close(), then the original fclose(). Note about multithread-safety: There is a race condition where some other thread could open fd between our close and fclose. */ if (close (fd) < 0 && saved_errno == 0) saved_errno = errno; fclose_nothrow (fp); /* will fail with errno = EBADF, if we did not lose a race */ #else /* !WINDOWS_SOCKETS */ /* Call fclose() and invoke all hooks of the overridden close(). */ # if REPLACE_FCHDIR /* Note about multithread-safety: There is a race condition here as well. Some other thread could open fd between our calls to fclose and _gl_unregister_fd. */ result = fclose_nothrow (fp); if (result == 0) _gl_unregister_fd (fd); # else /* No race condition here. */ result = fclose_nothrow (fp); # endif #endif /* !WINDOWS_SOCKETS */ if (saved_errno != 0) { errno = saved_errno; result = EOF; } return result; } ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fcntl--.h���������������������������������������������������������������0000664�0000000�0000000�00000001753�14110572173�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like fcntl.h, but redefine some names to avoid glitches. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <fcntl.h> #include "fcntl-safer.h" #undef open #define open open_safer #undef creat #define creat creat_safer #if GNULIB_OPENAT_SAFER # undef openat # define openat openat_safer #endif ���������������������gnulib-20210822~d383792/lib/fcntl-safer.h�����������������������������������������������������������0000664�0000000�0000000�00000001734�14110572173�0017427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke fcntl-like functions, but avoid some glitches. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <sys/types.h> int open_safer (char const *, int, ...); int creat_safer (char const *, mode_t); #if GNULIB_OPENAT_SAFER int openat_safer (int, char const *, int, ...); #endif ������������������������������������gnulib-20210822~d383792/lib/fcntl.c�����������������������������������������������������������������0000664�0000000�0000000�00000044621�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide file descriptor control. Copyright (C) 2009-2021 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 Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <unistd.h> #ifdef __KLIBC__ # define INCL_DOS # include <os2.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = _setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } _setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ /* Forward declarations, because we '#undef fcntl' in the middle of this compilation unit. */ /* Our implementation of fcntl (fd, F_DUPFD, target). */ static int rpl_fcntl_DUPFD (int fd, int target); /* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ /* Adds support for fcntl on directories. */ static int klibc_fcntl (int fd, int action, /* arg */...); #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int fcntl (int fd, int action, /* arg */...) #undef fcntl #ifdef __KLIBC__ # define fcntl klibc_fcntl #endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { case F_DUPFD: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD (fd, target); break; } case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; } #if !HAVE_FCNTL case F_GETFD: { # if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL switch (action) { #ifdef F_BARRIERFSYNC /* macOS */ case F_BARRIERFSYNC: #endif #ifdef F_CHKCLEAN /* macOS */ case F_CHKCLEAN: #endif #ifdef F_CLOSEM /* NetBSD, HP-UX */ case F_CLOSEM: #endif #ifdef F_FLUSH_DATA /* macOS */ case F_FLUSH_DATA: #endif #ifdef F_FREEZE_FS /* macOS */ case F_FREEZE_FS: #endif #ifdef F_FULLFSYNC /* macOS */ case F_FULLFSYNC: #endif #ifdef F_GETCONFINED /* macOS */ case F_GETCONFINED: #endif #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ case F_GETDEFAULTPROTLEVEL: #endif #ifdef F_GETFD /* POSIX */ case F_GETFD: #endif #ifdef F_GETFL /* POSIX */ case F_GETFL: #endif #ifdef F_GETLEASE /* Linux */ case F_GETLEASE: #endif #ifdef F_GETNOSIGPIPE /* macOS */ case F_GETNOSIGPIPE: #endif #ifdef F_GETOWN /* POSIX */ case F_GETOWN: #endif #ifdef F_GETPIPE_SZ /* Linux */ case F_GETPIPE_SZ: #endif #ifdef F_GETPROTECTIONCLASS /* macOS */ case F_GETPROTECTIONCLASS: #endif #ifdef F_GETPROTECTIONLEVEL /* macOS */ case F_GETPROTECTIONLEVEL: #endif #ifdef F_GET_SEALS /* Linux */ case F_GET_SEALS: #endif #ifdef F_GETSIG /* Linux */ case F_GETSIG: #endif #ifdef F_MAXFD /* NetBSD */ case F_MAXFD: #endif #ifdef F_RECYCLE /* macOS */ case F_RECYCLE: #endif #ifdef F_SETFIFOENH /* HP-UX */ case F_SETFIFOENH: #endif #ifdef F_THAW_FS /* macOS */ case F_THAW_FS: #endif /* These actions take no argument. */ result = fcntl (fd, action); break; #ifdef F_ADD_SEALS /* Linux */ case F_ADD_SEALS: #endif #ifdef F_BADFD /* Solaris */ case F_BADFD: #endif #ifdef F_CHECK_OPENEVT /* macOS */ case F_CHECK_OPENEVT: #endif #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ case F_DUP2FD: #endif #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ case F_DUP2FD_CLOEXEC: #endif #ifdef F_DUP2FD_CLOFORK /* Solaris */ case F_DUP2FD_CLOFORK: #endif #ifdef F_DUPFD /* POSIX */ case F_DUPFD: #endif #ifdef F_DUPFD_CLOEXEC /* POSIX */ case F_DUPFD_CLOEXEC: #endif #ifdef F_DUPFD_CLOFORK /* Solaris */ case F_DUPFD_CLOFORK: #endif #ifdef F_GETXFL /* Solaris */ case F_GETXFL: #endif #ifdef F_GLOBAL_NOCACHE /* macOS */ case F_GLOBAL_NOCACHE: #endif #ifdef F_MAKECOMPRESSED /* macOS */ case F_MAKECOMPRESSED: #endif #ifdef F_MOVEDATAEXTENTS /* macOS */ case F_MOVEDATAEXTENTS: #endif #ifdef F_NOCACHE /* macOS */ case F_NOCACHE: #endif #ifdef F_NODIRECT /* macOS */ case F_NODIRECT: #endif #ifdef F_NOTIFY /* Linux */ case F_NOTIFY: #endif #ifdef F_OPLKACK /* IRIX */ case F_OPLKACK: #endif #ifdef F_OPLKREG /* IRIX */ case F_OPLKREG: #endif #ifdef F_RDAHEAD /* macOS */ case F_RDAHEAD: #endif #ifdef F_SETBACKINGSTORE /* macOS */ case F_SETBACKINGSTORE: #endif #ifdef F_SETCONFINED /* macOS */ case F_SETCONFINED: #endif #ifdef F_SETFD /* POSIX */ case F_SETFD: #endif #ifdef F_SETFL /* POSIX */ case F_SETFL: #endif #ifdef F_SETLEASE /* Linux */ case F_SETLEASE: #endif #ifdef F_SETNOSIGPIPE /* macOS */ case F_SETNOSIGPIPE: #endif #ifdef F_SETOWN /* POSIX */ case F_SETOWN: #endif #ifdef F_SETPIPE_SZ /* Linux */ case F_SETPIPE_SZ: #endif #ifdef F_SETPROTECTIONCLASS /* macOS */ case F_SETPROTECTIONCLASS: #endif #ifdef F_SETSIG /* Linux */ case F_SETSIG: #endif #ifdef F_SINGLE_WRITER /* macOS */ case F_SINGLE_WRITER: #endif /* These actions take an 'int' argument. */ { int x = va_arg (arg, int); result = fcntl (fd, action, x); } break; default: /* Other actions take a pointer argument. */ { void *p = va_arg (arg, void *); result = fcntl (fd, action, p); } break; } #else errno = EINVAL; #endif break; } } va_end (arg); return result; } static int rpl_fcntl_DUPFD (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, 0); #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) { result = -1; errno = EINVAL; } else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) result = -1; else { result = fcntl (fd, F_DUPFD, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } } #else result = fcntl (fd, F_DUPFD, target); #endif return result; } static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); #else /* HAVE_FCNTL */ # if defined __NetBSD__ || defined __HAIKU__ /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target) has only the same effect as fcntl (fd, F_DUPFD, target). */ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets the FD_CLOEXEC flag on fd, not on target. Therefore avoid the system fcntl in this case. */ # define have_dupfd_cloexec -1 # else /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, F_DUPFD_CLOEXEC, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl_DUPFD (fd, target); if (result >= 0) have_dupfd_cloexec = -1; } } else # endif result = rpl_fcntl_DUPFD (fd, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } #endif /* HAVE_FCNTL */ return result; } #undef fcntl #ifdef __KLIBC__ static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default: errno = EINVAL; break; } } va_end (arg_ptr); return result; } #endif ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fcntl.in.h��������������������������������������������������������������0000664�0000000�0000000�00000031165�14110572173�0016737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like <fcntl.h>, but with non-working flags defined to 0. Copyright (C) 2006-2021 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 */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include <unistd.h> #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. */ /* Declare overridden functions. */ #if @GNULIB_CREAT@ # if @REPLACE_CREAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat rpl_creat # endif _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif _GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #elif defined GNULIB_POSIXCHECK # undef creat /* Assume creat is always declared. */ _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " "use gnulib module creat for portability"); #elif @GNULIB_MDA_CREAT@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::creat always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #endif #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_rpl_fcntl # define GNULIB_defined_rpl_fcntl 1 # endif # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_fcntl # define GNULIB_defined_fcntl 1 # endif # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #elif @GNULIB_MDA_OPEN@ /* On native Windows, map 'open' to '_open', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::open always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif # if !defined __hpux _GL_CXXALIASWARN (open); # endif #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include <limits.h> # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fd-hook.c���������������������������������������������������������������0000664�0000000�0000000�00000007025�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "fd-hook.h" #include <stdlib.h> /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fd-hook.h���������������������������������������������������������������0000664�0000000�0000000�00000011364�14110572173�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2021 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/>. */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fd-safer-flag.c���������������������������������������������������������0000664�0000000�0000000�00000003352�14110572173�0017612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Adjust a file descriptor result so that it avoids clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. If FLAG contains O_CLOEXEC, the returned FD will have close-on-exec semantics. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag). */ int fd_safer_flag (int fd, int flag) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer_flag (fd, flag); int e = errno; close (fd); errno = e; fd = f; } return fd; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fd-safer.c��������������������������������������������������������������0000664�0000000�0000000�00000003003�14110572173�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a safer copy of a file descriptor. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer (open ("file", O_RDONLY)). */ int fd_safer (int fd) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer (fd); int e = errno; close (fd); errno = e; fd = f; } return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fdatasync.c�������������������������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate fdatasync on platforms that lack it. Copyright (C) 2011-2021 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/>. */ #include <config.h> #include <unistd.h> int fdatasync (int fd) { /* This does more work than strictly necessary, but is the best we can do portably. */ return fsync (fd); } �������������������������������������������������������������������gnulib-20210822~d383792/lib/fdopen.c����������������������������������������������������������������0000664�0000000�0000000�00000003105�14110572173�0016463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream with a given file descriptor. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef fdopen #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static FILE * fdopen_nothrow (int fd, const char *mode) { FILE *result; TRY_MSVC_INVAL { result = _fdopen (fd, mode); } CATCH_MSVC_INVAL { result = NULL; } DONE_MSVC_INVAL; return result; } # else # define fdopen_nothrow _fdopen # endif #else # define fdopen_nothrow fdopen #endif FILE * rpl_fdopen (int fd, const char *mode) { int saved_errno = errno; FILE *fp; errno = 0; fp = fdopen_nothrow (fd, mode); if (fp == NULL) { if (errno == 0) errno = EBADF; } else errno = saved_errno; return fp; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fdopendir.c�������������������������������������������������������������0000664�0000000�0000000�00000015035�14110572173�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement fdopendir function Copyright (C) 2004-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include <dirent.h> #include <stdlib.h> #include <unistd.h> #if !HAVE_FDOPENDIR # include "openat.h" # include "openat-priv.h" # include "save-cwd.h" # if GNULIB_DIRENT_SAFER # include "dirent--.h" # endif # ifndef REPLACE_FCHDIR # define REPLACE_FCHDIR 0 # endif static DIR *fdopendir_with_dup (int, int, struct saved_cwd const *); static DIR *fd_clone_opendir (int, struct saved_cwd const *); /* Replacement for POSIX fdopendir. First, try to simulate it via opendir ("/proc/self/fd/..."). Failing that, simulate it by using fchdir metadata, or by doing save_cwd/fchdir/opendir(".")/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. If successful, the resulting stream is based on FD in implementations where streams are based on file descriptors and in applications where no other thread or signal handler allocates or frees file descriptors. In other cases, consult dirfd on the result to find out whether FD is still being used. Otherwise, this function works just like POSIX fdopendir. W A R N I N G: Unlike other fd-related functions, this one places constraints on FD. If this function returns successfully, FD is under control of the dirent.h system, and the caller should not close or modify the state of FD other than by the dirent.h functions. */ # ifdef __KLIBC__ # include <InnoTekLIBC/backend.h> DIR * fdopendir (int fd) { char path[_MAX_PATH]; DIR *dirp; /* Get a path from fd */ if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return NULL; dirp = opendir (path); if (!dirp) return NULL; /* Unregister fd registered by opendir() */ _gl_unregister_dirp_fd (dirfd (dirp)); /* Register our fd */ if (_gl_register_dirp_fd (fd, dirp)) { int saved_errno = errno; closedir (dirp); errno = saved_errno; dirp = NULL; } return dirp; } # else DIR * fdopendir (int fd) { DIR *dir = fdopendir_with_dup (fd, -1, NULL); if (! REPLACE_FCHDIR && ! dir) { int saved_errno = errno; if (EXPECTED_ERRNO (saved_errno)) { struct saved_cwd cwd; if (save_cwd (&cwd) != 0) openat_save_fail (errno); dir = fdopendir_with_dup (fd, -1, &cwd); saved_errno = errno; free_cwd (&cwd); errno = saved_errno; } } return dir; } # endif /* Like fdopendir, except that if OLDER_DUPFD is not -1, it is known to be a dup of FD which is less than FD - 1 and which will be closed by the caller and not otherwise used by the caller. This function makes sure that FD is closed and all file descriptors less than FD are open, and then calls fd_clone_opendir on a dup of FD. That way, barring race conditions, fd_clone_opendir returns a stream whose file descriptor is FD. If REPLACE_FCHDIR or CWD is null, use opendir ("/proc/self/fd/...", falling back on fchdir metadata. Otherwise, CWD is a saved version of the working directory; use fchdir/opendir(".")/restore_cwd(CWD). */ static DIR * fdopendir_with_dup (int fd, int older_dupfd, struct saved_cwd const *cwd) { int dupfd = dup (fd); if (dupfd < 0 && errno == EMFILE) dupfd = older_dupfd; if (dupfd < 0) return NULL; else { DIR *dir; int saved_errno; if (dupfd < fd - 1 && dupfd != older_dupfd) { dir = fdopendir_with_dup (fd, dupfd, cwd); saved_errno = errno; } else { close (fd); dir = fd_clone_opendir (dupfd, cwd); saved_errno = errno; if (! dir) { int fd1 = dup (dupfd); if (fd1 != fd) openat_save_fail (fd1 < 0 ? errno : EBADF); } } if (dupfd != older_dupfd) close (dupfd); errno = saved_errno; return dir; } } /* Like fdopendir, except the result controls a clone of FD. It is the caller's responsibility both to close FD and (if the result is not null) to closedir the result. */ static DIR * fd_clone_opendir (int fd, struct saved_cwd const *cwd) { if (REPLACE_FCHDIR || ! cwd) { DIR *dir = NULL; int saved_errno = EOPNOTSUPP; char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) { dir = opendir (proc_file); saved_errno = errno; if (proc_file != buf) free (proc_file); } # if REPLACE_FCHDIR if (! dir && EXPECTED_ERRNO (saved_errno)) { char const *name = _gl_directory_name (fd); DIR *dp = name ? opendir (name) : NULL; /* The caller has done an elaborate dance to arrange for opendir to consume just the right file descriptor. If dirfd returns -1, though, we're on a system like mingw where opendir does not consume a file descriptor. Consume it via 'dup' instead. */ if (dp && dirfd (dp) < 0) dup (fd); return dp; } # endif errno = saved_errno; return dir; } else { if (fchdir (fd) != 0) return NULL; else { DIR *dir = opendir ("."); int saved_errno = errno; if (restore_cwd (cwd) != 0) openat_restore_fail (errno); errno = saved_errno; return dir; } } } #else /* HAVE_FDOPENDIR */ # include <errno.h> # include <sys/stat.h> # undef fdopendir /* Like fdopendir, but work around GNU/Hurd bug by validating FD. */ DIR * rpl_fdopendir (int fd) { struct stat st; if (fstat (fd, &st)) return NULL; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return NULL; } return fdopendir (fd); } #endif /* HAVE_FDOPENDIR */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fdutimensat.c�����������������������������������������������������������0000664�0000000�0000000�00000003707�14110572173�0017543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 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 Eric Blake. */ /* derived from a function in utimens.c */ #include <config.h> #include "utimens.h" #include <errno.h> #include <fcntl.h> #include <sys/stat.h> /* Set the access and modification timestamps of FD (a.k.a. FILE) to be TIMESPEC[0] and TIMESPEC[1], respectively; relative to directory DIR. FD must be either negative -- in which case it is ignored -- or a file descriptor that is open on FILE. If FD is nonnegative, then FILE can be NULL, which means use just futimes (or equivalent) instead of utimes (or equivalent), and fail if on an old system without futimes (or equivalent). If TIMESPEC is null, set the timestamps to the current time. ATFLAG is passed to utimensat if FD is negative or futimens was unsupported, which can allow operation on FILE as a symlink. Return 0 on success, -1 (setting errno) on failure. */ int fdutimensat (int fd, int dir, char const *file, struct timespec const ts[2], int atflag) { int result = 1; if (0 <= fd) result = futimens (fd, ts); if (file && (fd < 0 || (result == -1 && errno == ENOSYS))) result = utimensat (dir, file, ts, atflag); if (result == 1) { errno = EBADF; result = -1; } return result; } ���������������������������������������������������������gnulib-20210822~d383792/lib/fflush.c����������������������������������������������������������������0000664�0000000�0000000�00000017300�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fflush.c -- allow flushing input streams Copyright (C) 2007-2021 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 Eric Blake. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <unistd.h> #include "freading.h" #include "stdio-impl.h" #undef fflush #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ static void clear_ungetc_buffer_preserving_position (FILE *fp) { if (fp->_flags & _IO_IN_BACKUP) /* _IO_free_backup_area is a bit complicated. Simply call fseek. */ fseeko (fp, 0, SEEK_CUR); } #else /* Clear the stream's ungetc buffer. May modify the value of ftello (fp). */ static void clear_ungetc_buffer (FILE *fp) { # if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if (HASUB (fp)) { fp_->_p += fp_->_r; fp_->_r = 0; } # elif defined __EMX__ /* emx+gcc */ if (fp->_ungetc_count > 0) { fp->_ungetc_count = 0; fp->_rcount = - fp->_rcount; } # elif defined _IOERR /* Minix, AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ /* Nothing to do. */ # else /* other implementations */ fseeko (fp, 0, SEEK_CUR); # endif } #endif #if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1) /* GNU libc, BeOS, Haiku, Linux libc5 */ # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ static int disable_seek_optimization (FILE *fp) { int saved_flags = fp_->_flags & (__SOPT | __SNPT); fp_->_flags = (fp_->_flags & ~__SOPT) | __SNPT; return saved_flags; } static void restore_seek_optimization (FILE *fp, int saved_flags) { fp_->_flags = (fp_->_flags & ~(__SOPT | __SNPT)) | saved_flags; } # else static void update_fpos_cache (_GL_ATTRIBUTE_MAYBE_UNUSED FILE *fp, _GL_ATTRIBUTE_MAYBE_UNUSED off_t pos) { # if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __CYGWIN__ /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; # else /* fp_->_offset is an fpos_t. */ /* Use a union, since on NetBSD, the compilation flags determine whether fpos_t is typedef'd to off_t or a struct containing a single off_t member. */ union { fpos_t f; off_t o; } u; u.o = pos; fp_->_offset = u.f; # endif fp_->_flags |= __SOFF; # endif } # endif #endif /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. */ int rpl_fflush (FILE *stream) { /* When stream is NULL, POSIX and C99 only require flushing of "output streams and update streams in which the most recent operation was not input", and all implementations do this. When stream is "an output stream or an update stream in which the most recent operation was not input", POSIX and C99 requires that fflush writes out any buffered data, and all implementations do this. When stream is, however, an input stream or an update stream in which the most recent operation was input, C99 specifies nothing, and POSIX only specifies behavior if the stream is seekable. mingw, in particular, drops the input buffer, leaving the file descriptor positioned at the end of the input buffer. I.e. ftell (stream) is lost. We don't want to call the implementation's fflush in this case. We test ! freading (stream) here, rather than fwriting (stream), because what we need to know is whether the stream holds a "read buffer", and on mingw this is indicated by _IOREAD, regardless of _IOWRT. */ if (stream == NULL || ! freading (stream)) return fflush (stream); #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ clear_ungetc_buffer_preserving_position (stream); return fflush (stream); #else { /* What POSIX says: 1) About the file-position indicator (-> fseeko, ftello): The file position indicator is incremented by fgetc() and decremented by ungetc(): <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetc.html> "... the fgetc() function shall ... advance the associated file position indicator for the stream ..." <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ungetc.html> "The file-position indicator is decremented by each successful call to ungetc()..." 2) fflush discards bytes pushed back by ungetc: <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html> "...any characters pushed back onto the stream by ungetc() or ungetwc() that have not subsequently been read from the stream shall be discarded..." This implies implicitly: fflush does not change the file position indicator. 3) Effects on the file descriptor, if the file descriptor is capable of seeking: <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html> "...the file offset of the underlying open file description shall be set to the file position of the stream..." */ /* POSIX does not specify fflush behavior for non-seekable input streams. Some implementations purge unread data, some return EBADF, some do nothing. */ off_t pos = ftello (stream); if (pos == -1) { errno = EBADF; return EOF; } /* Clear the ungetc buffer. */ clear_ungetc_buffer (stream); /* To get here, we must be flushing a seekable input stream, so the semantics of fpurge are now appropriate to clear the buffer. To avoid losing data, the lseek is also necessary. */ { int result = fpurge (stream); if (result != 0) return result; } # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ { /* Disable seek optimization for the next fseeko call. This tells the following fseeko call to seek to the desired position directly, rather than to seek to a block-aligned boundary. */ int saved_flags = disable_seek_optimization (stream); int result = fseeko (stream, pos, SEEK_SET); restore_seek_optimization (stream, saved_flags); return result; } # else pos = lseek (fileno (stream), pos, SEEK_SET); if (pos == -1) return EOF; /* After a successful lseek, update the file descriptor's position cache in the stream. */ update_fpos_cache (stream, pos); return 0; # endif } #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ffs.c�������������������������������������������������������������������0000664�0000000�0000000�00000004143�14110572173�0015771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ffs.c -- find the first set bit in a word. Copyright (C) 2011-2021 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 Eric Blake. */ #include <config.h> /* Specification. */ #include <strings.h> #include <limits.h> #if defined _MSC_VER && !(__clang_major__ >= 4) # include <intrin.h> #endif int ffs (int i) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__clang_major__ >= 4) return __builtin_ffs (i); #elif defined _MSC_VER /* _BitScanForward <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanforward-bitscanforward64> */ unsigned long bit; if (_BitScanForward (&bit, i)) return bit + 1; else return 0; #else /* <https://github.com/gibsjose/BitHacks> gives this deBruijn constant for a branch-less computation, although that table counted trailing zeros rather than bit position. This requires 32-bit int, we fall back to a naive algorithm on the rare platforms where that assumption is not true. */ if (CHAR_BIT * sizeof i == 32) { static unsigned int table[] = { 1, 2, 29, 3, 30, 15, 25, 4, 31, 23, 21, 16, 26, 18, 5, 9, 32, 28, 14, 24, 22, 20, 17, 8, 27, 13, 19, 7, 12, 6, 11, 10 }; unsigned int u = i; unsigned int bit = u & -u; return table[(bit * 0x077cb531U) >> 27] - !i; } else { unsigned int j; for (j = 0; j < CHAR_BIT * sizeof i; j++) if (i & (1U << j)) return j + 1; return 0; } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ffsl.c������������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0016143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the first set bit in a 'long' word. Copyright (C) 2011-2021 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/>. */ #define FUNC ffsl #define TYPE long int #define GCC_BUILTIN __builtin_ffsl #define MSVC_BUILTIN _BitScanForward #include "ffsl.h" �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ffsl.h������������������������������������������������������������������0000664�0000000�0000000�00000005504�14110572173�0016154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ffsl.h -- find the first set bit in a word. Copyright (C) 2011-2021 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 Eric Blake. */ /* This file is meant to be included by ffsl.c and ffsll.c, after they have defined FUNC and TYPE. */ #include <config.h> /* Specification. */ #include <string.h> #include <limits.h> #include <strings.h> #if defined _MSC_VER && !(__clang_major__ >= 4) # include <intrin.h> /* Copied from ffs.c. */ static inline int ffs (int i) { /* _BitScanForward <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanforward-bitscanforward64> */ unsigned long bit; if (_BitScanForward (&bit, i)) return bit + 1; else return 0; } #endif #if !defined FUNC || !defined TYPE # error #endif int FUNC (TYPE i) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) return GCC_BUILTIN (i); #elif defined _MSC_VER && defined MSVC_BUILTIN /* _BitScanForward, _BitScanForward64 <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanforward-bitscanforward64> */ unsigned long bit; if (MSVC_BUILTIN (&bit, i)) return bit + 1; else return 0; #else unsigned TYPE j = i; /* Split j into chunks, and look at one chunk after the other. */ enum { chunk_bits = CHAR_BIT * sizeof (unsigned int) }; /* The number of chunks is ceil (sizeof (TYPE) / sizeof (unsigned int)) = (sizeof (TYPE) - 1) / sizeof (unsigned int) + 1. */ enum { chunk_count = (sizeof (TYPE) - 1) / sizeof (unsigned int) + 1 }; if (chunk_count > 1) { size_t k; /* It is tempting to write if (!j) here, but if we do this, Solaris 10/x86 "cc -O" miscompiles the code. */ if (!i) return 0; /* Unroll the first loop round. k = 0. */ if ((unsigned int) j) return ffs ((unsigned int) j); /* Generic loop. */ for (k = 1; k < chunk_count - 1; k++) if ((unsigned int) (j >> (k * chunk_bits)) != 0) return k * chunk_bits + ffs ((unsigned int) (j >> (k * chunk_bits))); } /* Last loop round. k = chunk_count - 1. */ return (chunk_count - 1) * chunk_bits + ffs ((unsigned int) (j >> ((chunk_count - 1) * chunk_bits))); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ffsll.c�����������������������������������������������������������������0000664�0000000�0000000�00000001647�14110572173�0016327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the first set bit in a 'long long' word. Copyright (C) 2011-2021 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/>. */ #define FUNC ffsll #define TYPE long long int #define GCC_BUILTIN __builtin_ffsll #ifdef _WIN64 # define MSVC_BUILTIN _BitScanForward64 #endif #include "ffsl.h" �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/file-has-acl.c����������������������������������������������������������0000664�0000000�0000000�00000035411�14110572173�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file has a nontrivial ACL. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ /* Without this pragma, gcc 4.7.0 20120126 may suggest that the file_has_acl function might be candidate for attribute 'const' */ #if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=const" #endif #include <config.h> #include "acl.h" #include "acl-internal.h" #if GETXATTR_WITH_POSIX_ACLS # include <sys/xattr.h> # include <linux/xattr.h> #endif /* Return 1 if NAME has a nontrivial access control list, 0 if ACLs are not supported, or if NAME has no or only a base ACL, and -1 (setting errno) on error. Note callers can determine if ACLs are not supported as errno is set in that case also. SB must be set to the stat buffer of NAME, obtained through stat() or lstat(). */ int file_has_acl (char const *name, struct stat const *sb) { #if USE_ACL if (! S_ISLNK (sb->st_mode)) { # if GETXATTR_WITH_POSIX_ACLS ssize_t ret; ret = getxattr (name, XATTR_NAME_POSIX_ACL_ACCESS, NULL, 0); if (ret < 0 && errno == ENODATA) ret = 0; else if (ret > 0) return 1; if (ret == 0 && S_ISDIR (sb->st_mode)) { ret = getxattr (name, XATTR_NAME_POSIX_ACL_DEFAULT, NULL, 0); if (ret < 0 && errno == ENODATA) ret = 0; else if (ret > 0) return 1; } if (ret < 0) return - acl_errno_valid (errno); return ret; # elif HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ int ret; if (HAVE_ACL_EXTENDED_FILE) /* Linux */ { /* On Linux, acl_extended_file is an optimized function: It only makes two calls to getxattr(), one for ACL_TYPE_ACCESS, one for ACL_TYPE_DEFAULT. */ ret = acl_extended_file (name); } else /* FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ { # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) always return NULL / EINVAL. There is no point in making these two useless calls. The real ACL is retrieved through acl_get_file (name, ACL_TYPE_EXTENDED). */ acl_t acl = acl_get_file (name, ACL_TYPE_EXTENDED); if (acl) { ret = acl_extended_nontrivial (acl); acl_free (acl); } else ret = -1; # else /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ acl_t acl = acl_get_file (name, ACL_TYPE_ACCESS); if (acl) { int saved_errno; ret = acl_access_nontrivial (acl); saved_errno = errno; acl_free (acl); errno = saved_errno; # if HAVE_ACL_FREE_TEXT /* Tru64 */ /* On OSF/1, acl_get_file (name, ACL_TYPE_DEFAULT) always returns NULL with errno not set. There is no point in making this call. */ # else /* FreeBSD, IRIX, Cygwin >= 2.5 */ /* On Linux, FreeBSD, IRIX, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) on a directory either both succeed or both fail; it depends on the file system. Therefore there is no point in making the second call if the first one already failed. */ if (ret == 0 && S_ISDIR (sb->st_mode)) { acl = acl_get_file (name, ACL_TYPE_DEFAULT); if (acl) { # ifdef __CYGWIN__ /* Cygwin >= 2.5 */ ret = acl_access_nontrivial (acl); saved_errno = errno; acl_free (acl); errno = saved_errno; # else ret = (0 < acl_entries (acl)); acl_free (acl); # endif } else ret = -1; } # endif } else ret = -1; # endif } if (ret < 0) return - acl_errno_valid (errno); return ret; # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ # if defined ACL_NO_TRIVIAL /* Solaris 10 (newer version), which has additional API declared in <sys/acl.h> (acl_t) and implemented in libsec (acl_set, acl_trivial, acl_fromtext, ...). */ return acl_trivial (name); # else /* Solaris, Cygwin, general case */ /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions of Unixware. The acl() call returns the access and default ACL both at once. */ { /* Initially, try to read the entries into a stack-allocated buffer. Use malloc if it does not fit. */ enum { alloc_init = 4000 / sizeof (aclent_t), /* >= 3 */ alloc_max = MIN (INT_MAX, SIZE_MAX / sizeof (aclent_t)) }; aclent_t buf[alloc_init]; size_t alloc = alloc_init; aclent_t *entries = buf; aclent_t *malloced = NULL; int count; for (;;) { count = acl (name, GETACL, alloc, entries); if (count < 0 && errno == ENOSPC) { /* Increase the size of the buffer. */ free (malloced); if (alloc > alloc_max / 2) { errno = ENOMEM; return -1; } alloc = 2 * alloc; /* <= alloc_max */ entries = malloced = (aclent_t *) malloc (alloc * sizeof (aclent_t)); if (entries == NULL) { errno = ENOMEM; return -1; } continue; } break; } if (count < 0) { if (errno == ENOSYS || errno == ENOTSUP) ; else { free (malloced); return -1; } } else if (count == 0) ; else { /* Don't use MIN_ACL_ENTRIES: It's set to 4 on Cygwin, but Cygwin returns only 3 entries for files with no ACL. But this is safe: If there are more than 4 entries, there cannot be only the "user::", "group::", "other:", and "mask:" entries. */ if (count > 4) { free (malloced); return 1; } if (acl_nontrivial (count, entries)) { free (malloced); return 1; } } free (malloced); } # ifdef ACE_GETACL /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 file systems (whereas the other ones are used in UFS file systems). */ { /* Initially, try to read the entries into a stack-allocated buffer. Use malloc if it does not fit. */ enum { alloc_init = 4000 / sizeof (ace_t), /* >= 3 */ alloc_max = MIN (INT_MAX, SIZE_MAX / sizeof (ace_t)) }; ace_t buf[alloc_init]; size_t alloc = alloc_init; ace_t *entries = buf; ace_t *malloced = NULL; int count; for (;;) { count = acl (name, ACE_GETACL, alloc, entries); if (count < 0 && errno == ENOSPC) { /* Increase the size of the buffer. */ free (malloced); if (alloc > alloc_max / 2) { errno = ENOMEM; return -1; } alloc = 2 * alloc; /* <= alloc_max */ entries = malloced = (ace_t *) malloc (alloc * sizeof (ace_t)); if (entries == NULL) { errno = ENOMEM; return -1; } continue; } break; } if (count < 0) { if (errno == ENOSYS || errno == EINVAL) ; else { free (malloced); return -1; } } else if (count == 0) ; else { /* In the old (original Solaris 10) convention: If there are more than 3 entries, there cannot be only the ACE_OWNER, ACE_GROUP, ACE_OTHER entries. In the newer Solaris 10 and Solaris 11 convention: If there are more than 6 entries, there cannot be only the ACE_OWNER, ACE_GROUP, ACE_EVERYONE entries, each once with NEW_ACE_ACCESS_ALLOWED_ACE_TYPE and once with NEW_ACE_ACCESS_DENIED_ACE_TYPE. */ if (count > 6) { free (malloced); return 1; } if (acl_ace_nontrivial (count, entries)) { free (malloced); return 1; } } free (malloced); } # endif return 0; # endif # elif HAVE_GETACL /* HP-UX */ { struct acl_entry entries[NACLENTRIES]; int count; count = getacl (name, NACLENTRIES, entries); if (count < 0) { /* ENOSYS is seen on newer HP-UX versions. EOPNOTSUPP is typically seen on NFS mounts. ENOTSUP was seen on Quantum StorNext file systems (cvfs). */ if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) ; else return -1; } else if (count == 0) return 0; else /* count > 0 */ { if (count > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); /* If there are more than 3 entries, there cannot be only the (uid,%), (%,gid), (%,%) entries. */ if (count > 3) return 1; { struct stat statbuf; if (stat (name, &statbuf) == -1 && errno != EOVERFLOW) return -1; return acl_nontrivial (count, entries); } } } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ { struct acl entries[NACLVENTRIES]; int count; count = acl ((char *) name, ACL_GET, NACLVENTRIES, entries); if (count < 0) { /* EOPNOTSUPP is seen on NFS in HP-UX 11.11, 11.23. EINVAL is seen on NFS in HP-UX 11.31. */ if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) ; else return -1; } else if (count == 0) return 0; else /* count > 0 */ { if (count > NACLVENTRIES) /* If NACLVENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); /* If there are more than 4 entries, there cannot be only the four base ACL entries. */ if (count > 4) return 1; return aclv_nontrivial (count, entries); } } # endif # elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */ acl_type_t type; char aclbuf[1024]; void *acl = aclbuf; size_t aclsize = sizeof (aclbuf); mode_t mode; for (;;) { /* The docs say that type being 0 is equivalent to ACL_ANY, but it is not true, in AIX 5.3. */ type.u64 = ACL_ANY; if (aclx_get (name, 0, &type, aclbuf, &aclsize, &mode) >= 0) break; if (errno == ENOSYS) return 0; if (errno != ENOSPC) { if (acl != aclbuf) free (acl); return -1; } aclsize = 2 * aclsize; if (acl != aclbuf) free (acl); acl = malloc (aclsize); if (acl == NULL) { errno = ENOMEM; return -1; } } if (type.u64 == ACL_AIXC) { int result = acl_nontrivial ((struct acl *) acl); if (acl != aclbuf) free (acl); return result; } else if (type.u64 == ACL_NFS4) { int result = acl_nfs4_nontrivial ((nfs4_acl_int_t *) acl); if (acl != aclbuf) free (acl); return result; } else { /* A newer type of ACL has been introduced in the system. We should better support it. */ if (acl != aclbuf) free (acl); errno = EINVAL; return -1; } # elif HAVE_STATACL /* older AIX */ union { struct acl a; char room[4096]; } u; if (statacl ((char *) name, STX_NORMAL, &u.a, sizeof (u)) < 0) return -1; return acl_nontrivial (&u.a); # elif HAVE_ACLSORT /* NonStop Kernel */ { struct acl entries[NACLENTRIES]; int count; count = acl ((char *) name, ACL_GET, NACLENTRIES, entries); if (count < 0) { if (errno == ENOSYS || errno == ENOTSUP) ; else return -1; } else if (count == 0) return 0; else /* count > 0 */ { if (count > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); /* If there are more than 4 entries, there cannot be only the four base ACL entries. */ if (count > 4) return 1; return acl_nontrivial (count, entries); } } # endif } #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/file-set.c��������������������������������������������������������������0000664�0000000�0000000�00000004062�14110572173�0016723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Specialized functions to manipulate a set of files. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include "file-set.h" #include "hash-triple.h" #include "xalloc.h" /* Record file, FILE, and dev/ino from *STATS, in the hash table, HT. If HT is NULL, return immediately. If memory allocation fails, exit immediately. */ void record_file (Hash_table *ht, char const *file, struct stat const *stats) { struct F_triple *ent; if (ht == NULL) return; ent = xmalloc (sizeof *ent); ent->name = xstrdup (file); ent->st_ino = stats->st_ino; ent->st_dev = stats->st_dev; { struct F_triple *ent_from_table = hash_insert (ht, ent); if (ent_from_table == NULL) { /* Insertion failed due to lack of memory. */ xalloc_die (); } if (ent_from_table != ent) { /* There was already a matching entry in the table, so ENT was not inserted. Free it. */ triple_free (ent); } } } /* Return true if there is an entry in hash table, HT, for the file described by FILE and STATS. */ bool seen_file (Hash_table const *ht, char const *file, struct stat const *stats) { struct F_triple new_ent; if (ht == NULL) return false; new_ent.name = (char *) file; new_ent.st_ino = stats->st_ino; new_ent.st_dev = stats->st_dev; return !!hash_lookup (ht, &new_ent); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/file-set.h��������������������������������������������������������������0000664�0000000�0000000�00000002307�14110572173�0016730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Very specialized set-of-files code. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2007. */ #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> #include "hash.h" extern void record_file (Hash_table *ht, char const *file, struct stat const *stats) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ __attribute__ ((__nonnull__ (2, 3))) #endif ; extern bool seen_file (Hash_table const *ht, char const *file, struct stat const *stats); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/file-type.c�������������������������������������������������������������0000664�0000000�0000000�00000005471�14110572173�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a string describing the type of a file. Copyright (C) 1993-1994, 2001-2002, 2004-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "file-type.h" #include <gettext.h> #define _(text) gettext (text) char const * file_type (struct stat const *st) { /* See POSIX 1003.1-2001 XCU Table 4-8 lines 17093-17107 for some of these formats. To keep diagnostics grammatical in English, the returned string must start with a consonant. */ /* Do these three first, as they're the most common. */ if (S_ISREG (st->st_mode)) return st->st_size == 0 ? _("regular empty file") : _("regular file"); if (S_ISDIR (st->st_mode)) return _("directory"); if (S_ISLNK (st->st_mode)) return _("symbolic link"); /* Do the S_TYPEIS* macros next, as they may be implemented in terms of S_ISNAM, and we want the more-specialized interpretation. */ if (S_TYPEISMQ (st)) return _("message queue"); if (S_TYPEISSEM (st)) return _("semaphore"); if (S_TYPEISSHM (st)) return _("shared memory object"); if (S_TYPEISTMO (st)) return _("typed memory object"); /* The remaining are in alphabetical order. */ if (S_ISBLK (st->st_mode)) return _("block special file"); if (S_ISCHR (st->st_mode)) return _("character special file"); if (S_ISCTG (st->st_mode)) return _("contiguous data"); if (S_ISFIFO (st->st_mode)) return _("fifo"); if (S_ISDOOR (st->st_mode)) return _("door"); if (S_ISMPB (st->st_mode)) return _("multiplexed block special file"); if (S_ISMPC (st->st_mode)) return _("multiplexed character special file"); if (S_ISMPX (st->st_mode)) return _("multiplexed file"); if (S_ISNAM (st->st_mode)) return _("named file"); if (S_ISNWK (st->st_mode)) return _("network special file"); if (S_ISOFD (st->st_mode)) return _("migrated file with data"); if (S_ISOFL (st->st_mode)) return _("migrated file without data"); if (S_ISPORT (st->st_mode)) return _("port"); if (S_ISSOCK (st->st_mode)) return _("socket"); if (S_ISWHT (st->st_mode)) return _("whiteout"); return _("weird file"); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/file-type.h�������������������������������������������������������������0000664�0000000�0000000�00000002001�14110572173�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a string describing the type of a file. Copyright (C) 1993-1994, 2001-2002, 2004-2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering. */ #ifndef FILE_TYPE_H # define FILE_TYPE_H 1 # include <sys/types.h> # include <sys/stat.h> char const *file_type (struct stat const *) _GL_ATTRIBUTE_PURE; #endif /* FILE_TYPE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fileblocks.c������������������������������������������������������������0000664�0000000�0000000�00000004035�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert file size to number of blocks on System V-like machines. Copyright (C) 1990, 1997-1999, 2004-2006, 2009-2021 Free Software Foundation, Inc. This 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 Brian L. Matthews, blm@6sceng.UUCP. */ #include <config.h> #include <sys/types.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if !HAVE_STRUCT_STAT_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE # include <unistd.h> # ifndef NINDIR # if defined __DJGPP__ typedef long daddr_t; /* for disk address */ # endif /* Some SysV's, like Irix, seem to lack this. Hope it's correct. */ /* Number of inode pointers per indirect block. */ # define NINDIR (BSIZE / sizeof (daddr_t)) # endif /* !NINDIR */ /* Number of direct block addresses in an inode. */ # define NDIR 10 /* Return the number of 512-byte blocks in a file of SIZE bytes. */ off_t st_blocks (off_t size) { off_t datablks = size / 512 + (size % 512 != 0); off_t indrblks = 0; if (datablks > NDIR) { indrblks = (datablks - NDIR - 1) / NINDIR + 1; if (datablks > NDIR + NINDIR) { indrblks += (datablks - NDIR - NINDIR - 1) / (NINDIR * NINDIR) + 1; if (datablks > NDIR + NINDIR + NINDIR * NINDIR) indrblks++; } } return datablks + indrblks; } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int textutils_fileblocks_unused; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filemode.c��������������������������������������������������������������0000664�0000000�0000000�00000011050�14110572173�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* filemode.c -- make a string describing file modes Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 "filemode.h" #if ! HAVE_DECL_STRMODE /* Return a character indicating the type of file described by file mode BITS: '-' regular file 'b' block special file 'c' character special file 'C' high performance ("contiguous data") file 'd' directory 'D' door 'l' symbolic link 'm' multiplexed file (7th edition Unix; obsolete) 'n' network special file (HP-UX) 'p' fifo (named pipe) 'P' port 's' socket 'w' whiteout (4.4BSD) '?' some other file type */ static char ftypelet (mode_t bits) { /* These are the most common, so test for them first. */ if (S_ISREG (bits)) return '-'; if (S_ISDIR (bits)) return 'd'; /* Other letters standardized by POSIX 1003.1-2004. */ if (S_ISBLK (bits)) return 'b'; if (S_ISCHR (bits)) return 'c'; if (S_ISLNK (bits)) return 'l'; if (S_ISFIFO (bits)) return 'p'; /* Other file types (though not letters) standardized by POSIX. */ if (S_ISSOCK (bits)) return 's'; /* Nonstandard file types. */ if (S_ISCTG (bits)) return 'C'; if (S_ISDOOR (bits)) return 'D'; if (S_ISMPB (bits) || S_ISMPC (bits) || S_ISMPX (bits)) return 'm'; if (S_ISNWK (bits)) return 'n'; if (S_ISPORT (bits)) return 'P'; if (S_ISWHT (bits)) return 'w'; return '?'; } /* Like filemodestring, but rely only on MODE. */ void strmode (mode_t mode, char *str) { str[0] = ftypelet (mode); str[1] = mode & S_IRUSR ? 'r' : '-'; str[2] = mode & S_IWUSR ? 'w' : '-'; str[3] = (mode & S_ISUID ? (mode & S_IXUSR ? 's' : 'S') : (mode & S_IXUSR ? 'x' : '-')); str[4] = mode & S_IRGRP ? 'r' : '-'; str[5] = mode & S_IWGRP ? 'w' : '-'; str[6] = (mode & S_ISGID ? (mode & S_IXGRP ? 's' : 'S') : (mode & S_IXGRP ? 'x' : '-')); str[7] = mode & S_IROTH ? 'r' : '-'; str[8] = mode & S_IWOTH ? 'w' : '-'; str[9] = (mode & S_ISVTX ? (mode & S_IXOTH ? 't' : 'T') : (mode & S_IXOTH ? 'x' : '-')); str[10] = ' '; str[11] = '\0'; } #endif /* ! HAVE_DECL_STRMODE */ /* filemodestring - fill in string STR with an ls-style ASCII representation of the st_mode field of file stats block STATP. 12 characters are stored in STR. The characters stored in STR are: 0 File type, as in ftypelet above, except that other letters are used for files whose type cannot be determined solely from st_mode: 'F' semaphore 'Q' message queue 'S' shared memory object 'T' typed memory object 1 'r' if the owner may read, '-' otherwise. 2 'w' if the owner may write, '-' otherwise. 3 'x' if the owner may execute, 's' if the file is set-user-id, '-' otherwise. 'S' if the file is set-user-id, but the execute bit isn't set. 4 'r' if group members may read, '-' otherwise. 5 'w' if group members may write, '-' otherwise. 6 'x' if group members may execute, 's' if the file is set-group-id, '-' otherwise. 'S' if it is set-group-id but not executable. 7 'r' if any user may read, '-' otherwise. 8 'w' if any user may write, '-' otherwise. 9 'x' if any user may execute, 't' if the file is "sticky" (will be retained in swap space after execution), '-' otherwise. 'T' if the file is sticky but not executable. 10 ' ' for compatibility with 4.4BSD strmode, since this interface does not support ACLs. 11 '\0'. */ void filemodestring (struct stat const *statp, char *str) { strmode (statp->st_mode, str); if (S_TYPEISSEM (statp)) str[0] = 'F'; else if (S_TYPEISMQ (statp)) str[0] = 'Q'; else if (S_TYPEISSHM (statp)) str[0] = 'S'; else if (S_TYPEISTMO (statp)) str[0] = 'T'; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filemode.h��������������������������������������������������������������0000664�0000000�0000000�00000002316�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make a string describing file modes. Copyright (C) 1998-1999, 2003, 2006, 2009-2021 Free Software Foundation, Inc. This 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 FILEMODE_H_ # include <sys/types.h> # include <sys/stat.h> /* Get the declaration of strmode. */ # if HAVE_DECL_STRMODE # include <string.h> /* Mac OS X, FreeBSD, OpenBSD */ # include <unistd.h> /* NetBSD */ # endif # ifdef __cplusplus extern "C" { # endif # if !HAVE_DECL_STRMODE extern void strmode (mode_t mode, char *str); # endif extern void filemodestring (struct stat const *statp, char *str); # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filename.h��������������������������������������������������������������0000664�0000000�0000000�00000011121�14110572173�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Basic filename support macros. Copyright (C) 2001-2004, 2007-2021 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 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/>. */ /* From Paul Eggert and Jim Meyering. */ #ifndef _FILENAME_H #define _FILENAME_H #include <string.h> #ifdef __cplusplus extern "C" { #endif /* Filename support. ISSLASH(C) tests whether C is a directory separator character. HAS_DEVICE(Filename) tests whether Filename contains a device specification. FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification at the beginning of Filename, index of the part consisting of alternating components and slashes. FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 when a non-empty device specification can be followed by an empty or relative part, 0 when a non-empty device specification must be followed by a slash, 0 when device specification don't exist. IS_ABSOLUTE_FILE_NAME(Filename) tests whether Filename is independent of any notion of "current directory". IS_RELATIVE_FILE_NAME(Filename) tests whether Filename may be concatenated to a directory filename. Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a relative file name! IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device or directory specification. */ #if defined _WIN32 || defined __CYGWIN__ \ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') /* Internal macro: Tests whether a character is a drive letter. */ # define _IS_DRIVE_LETTER(C) \ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) /* Help the compiler optimizing it. This assumes ASCII. */ # undef _IS_DRIVE_LETTER # define _IS_DRIVE_LETTER(C) \ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') # define HAS_DEVICE(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') # define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) # ifdef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # else /* On native Windows, OS/2, DOS, the system has the notion of a "current directory" on each drive. */ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(Filename) \ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) # else # define IS_ABSOLUTE_FILE_NAME(Filename) \ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) # endif # define IS_RELATIVE_FILE_NAME(Filename) \ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) # define IS_FILE_NAME_WITH_DIR(Filename) \ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ || HAS_DEVICE (Filename)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define HAS_DEVICE(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) # define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) # define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) #endif /* Deprecated macros. For backward compatibility with old users of the 'filename' module. */ #define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME #define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filenamecat-lgpl.c������������������������������������������������������0000664�0000000�0000000�00000005411�14110572173�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-2007, 2009-2021 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "filenamecat.h" #include <stdlib.h> #include <string.h> #include "basename-lgpl.h" #include "filename.h" #if ! HAVE_MEMPCPY && ! defined mempcpy # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) #endif /* Concatenate two file name components, DIR and BASE, in newly-allocated storage and return the result. The resulting file name F is such that the commands "ls F" and "(cd DIR; ls ./BASE)" refer to the same file. If necessary, put a separator between DIR and BASE in the result. Typically this separator is "/", but in rare cases it might be ".". In any case, if BASE_IN_RESULT is non-NULL, set *BASE_IN_RESULT to point to the copy of BASE at the end of the returned concatenation. If malloc fails, return NULL with errno set. */ char * mfile_name_concat (char const *dir, char const *base, char **base_in_result) { char const *dirbase = last_component (dir); size_t dirbaselen = base_len (dirbase); size_t dirlen = dirbase - dir + dirbaselen; size_t baselen = strlen (base); char sep = '\0'; if (dirbaselen) { /* DIR is not a file system root, so separate with / if needed. */ if (! ISSLASH (dir[dirlen - 1]) && ! ISSLASH (*base)) sep = '/'; } else if (ISSLASH (*base)) { /* DIR is a file system root and BASE begins with a slash, so separate with ".". For example, if DIR is "/" and BASE is "/foo" then return "/./foo", as "//foo" would be wrong on some POSIX systems. A fancier algorithm could omit "." in some cases but is not worth the trouble. */ sep = '.'; } char *p_concat = malloc (dirlen + (sep != '\0') + baselen + 1); if (p_concat == NULL) return NULL; { char *p; p = mempcpy (p_concat, dir, dirlen); *p = sep; p += sep != '\0'; if (base_in_result) *base_in_result = p; p = mempcpy (p, base, baselen); *p = '\0'; } return p_concat; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filenamecat.c�����������������������������������������������������������0000664�0000000�0000000�00000002421�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "filenamecat.h" #include <stdlib.h> #include <string.h> #include "xalloc.h" /* Just like mfile_name_concat (filenamecat-lgpl.c), except, rather than returning NULL upon malloc failure, here, we report the "memory exhausted" condition and exit. */ char * file_name_concat (char const *dir, char const *base, char **base_in_result) { char *p = mfile_name_concat (dir, base, base_in_result); if (p == NULL) xalloc_die (); return p; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filenamecat.h�����������������������������������������������������������0000664�0000000�0000000�00000002317�14110572173�0017471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2021 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 Jim Meyering. */ #include <stdlib.h> #if GNULIB_FILENAMECAT char *file_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #endif char *mfile_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filevercmp.c������������������������������������������������������������0000664�0000000�0000000�00000011642�14110572173�0017351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk> Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au> Copyright (C) 2008-2021 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/>. */ #include <config.h> #include "filevercmp.h" #include <sys/types.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <c-ctype.h> #include <limits.h> /* Match a file suffix defined by this regular expression: /(\.[A-Za-z~][A-Za-z0-9~]*)*$/ Scan the string *STR and return a pointer to the matching suffix, or NULL if not found. Upon return, *STR points to terminating NUL. */ static const char * match_suffix (const char **str) { const char *match = NULL; bool read_alpha = false; while (**str) { if (read_alpha) { read_alpha = false; if (!c_isalpha (**str) && '~' != **str) match = NULL; } else if ('.' == **str) { read_alpha = true; if (!match) match = *str; } else if (!c_isalnum (**str) && '~' != **str) match = NULL; (*str)++; } return match; } /* verrevcmp helper function */ static int order (unsigned char c) { if (c_isdigit (c)) return 0; else if (c_isalpha (c)) return c; else if (c == '~') return -1; else return (int) c + UCHAR_MAX + 1; } /* slightly modified verrevcmp function from dpkg S1, S2 - compared string S1_LEN, S2_LEN - length of strings to be scanned This implements the algorithm for comparison of version strings specified by Debian and now widely adopted. The detailed specification can be found in the Debian Policy Manual in the section on the 'Version' control field. This version of the code implements that from s5.6.12 of Debian Policy v3.8.0.1 https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version */ static int _GL_ATTRIBUTE_PURE verrevcmp (const char *s1, size_t s1_len, const char *s2, size_t s2_len) { size_t s1_pos = 0; size_t s2_pos = 0; while (s1_pos < s1_len || s2_pos < s2_len) { int first_diff = 0; while ((s1_pos < s1_len && !c_isdigit (s1[s1_pos])) || (s2_pos < s2_len && !c_isdigit (s2[s2_pos]))) { int s1_c = (s1_pos == s1_len) ? 0 : order (s1[s1_pos]); int s2_c = (s2_pos == s2_len) ? 0 : order (s2[s2_pos]); if (s1_c != s2_c) return s1_c - s2_c; s1_pos++; s2_pos++; } while (s1[s1_pos] == '0') s1_pos++; while (s2[s2_pos] == '0') s2_pos++; while (c_isdigit (s1[s1_pos]) && c_isdigit (s2[s2_pos])) { if (!first_diff) first_diff = s1[s1_pos] - s2[s2_pos]; s1_pos++; s2_pos++; } if (c_isdigit (s1[s1_pos])) return 1; if (c_isdigit (s2[s2_pos])) return -1; if (first_diff) return first_diff; } return 0; } /* Compare version strings S1 and S2. See filevercmp.h for function description. */ int filevercmp (const char *s1, const char *s2) { const char *s1_pos; const char *s2_pos; const char *s1_suffix, *s2_suffix; size_t s1_len, s2_len; int result; /* easy comparison to see if strings are identical */ int simple_cmp = strcmp (s1, s2); if (simple_cmp == 0) return 0; /* special handle for "", "." and ".." */ if (!*s1) return -1; if (!*s2) return 1; if (0 == strcmp (".", s1)) return -1; if (0 == strcmp (".", s2)) return 1; if (0 == strcmp ("..", s1)) return -1; if (0 == strcmp ("..", s2)) return 1; /* special handle for other hidden files */ if (*s1 == '.' && *s2 != '.') return -1; if (*s1 != '.' && *s2 == '.') return 1; if (*s1 == '.' && *s2 == '.') { s1++; s2++; } /* "cut" file suffixes */ s1_pos = s1; s2_pos = s2; s1_suffix = match_suffix (&s1_pos); s2_suffix = match_suffix (&s2_pos); s1_len = (s1_suffix ? s1_suffix : s1_pos) - s1; s2_len = (s2_suffix ? s2_suffix : s2_pos) - s2; /* restore file suffixes if strings are identical after "cut" */ if ((s1_suffix || s2_suffix) && (s1_len == s2_len) && 0 == strncmp (s1, s2, s1_len)) { s1_len = s1_pos - s1; s2_len = s2_pos - s2; } result = verrevcmp (s1, s1_len, s2, s2_len); return result == 0 ? simple_cmp : result; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/filevercmp.h������������������������������������������������������������0000664�0000000�0000000�00000003425�14110572173�0017356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk> Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au> Copyright (C) 2008-2021 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/>. */ #ifndef FILEVERCMP_H #define FILEVERCMP_H /* Compare version strings: This function compares strings S1 and S2: 1) By PREFIX in the same way as strcmp. 2) Then by VERSION (most similarly to version compare of Debian's dpkg). Leading zeros in version numbers are ignored. 3) If both (PREFIX and VERSION) are equal, strcmp function is used for comparison. So this function can return 0 if (and only if) strings S1 and S2 are identical. It returns number >0 for S1 > S2, 0 for S1 == S2 and number <0 for S1 < S2. This function compares strings, in a way that if VER1 and VER2 are version numbers and PREFIX and SUFFIX (SUFFIX defined as (\.[A-Za-z~][A-Za-z0-9~]*)*) are strings then VER1 < VER2 implies filevercmp (PREFIX VER1 SUFFIX, PREFIX VER2 SUFFIX) < 0. This function is intended to be a replacement for strverscmp. */ int filevercmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; #endif /* FILEVERCMP_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/findprog-in.c�����������������������������������������������������������0000664�0000000�0000000�00000032524�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in a given path. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001, 2019. 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/>. */ #include <config.h> /* Specification. */ #include "findprog.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "filename.h" #include "concat-filename.h" #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define NATIVE_SLASH '\\' #else /* Unix */ # define NATIVE_SLASH '/' #endif /* Separator in PATH like lists of pathnames. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* The list of suffixes that the execlp/execvp function tries when searching for the program. */ static const char * const suffixes[] = { #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ "", ".com", ".exe", ".bat", ".cmd" /* Note: Files without any suffix are not considered executable. */ /* Note: The cmd.exe program does a different lookup: It searches according to the PATHEXT environment variable. See <https://stackoverflow.com/questions/7839150/>. Also, it executes files ending in .bat and .cmd directly without letting the kernel interpret the program file. */ #elif defined __CYGWIN__ "", ".exe", ".com" #elif defined __EMX__ "", ".exe" #elif defined __DJGPP__ "", ".com", ".exe", ".bat" #else /* Unix */ "" #endif }; const char * find_in_given_path (const char *progname, const char *path, const char *directory, bool optimize_for_exec) { { bool has_slash = false; { const char *p; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) { has_slash = true; break; } } if (has_slash) { /* If progname contains a slash, it is either absolute or relative to the current directory. PATH is not used. */ if (optimize_for_exec) /* The execl/execv/execlp/execvp functions will try the various suffixes anyway and fail if no executable is found. */ return progname; else { /* Try the various suffixes and see whether one of the files with such a suffix is actually executable. */ int failure_errno; size_t i; const char *directory_as_prefix = (directory != NULL && IS_RELATIVE_FILE_NAME (progname) ? directory : ""); #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ const char *progbasename; { const char *p; progbasename = progname; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) progbasename = p + 1; } bool progbasename_has_dot = (strchr (progbasename, '.') != NULL); #endif /* Try all platform-dependent suffixes. */ failure_errno = ENOENT; for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != progbasename_has_dot) #endif { /* Concatenate directory_as_prefix, progname, suffix. */ char *progpathname = concatenated_filename (directory_as_prefix, progname, suffix); if (progpathname == NULL) return NULL; /* errno is set here */ /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Check that the progpathname does not point to a directory. */ struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); return progname; } else return progpathname; } errno = EACCES; } } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ if (failure_errno == ENOENT && !progbasename_has_dot) { /* In the loop above, we skipped suffix = "". Do this loop round now, merely to provide a better errno than ENOENT. */ char *progpathname = concatenated_filename (directory_as_prefix, progname, ""); if (progpathname == NULL) return NULL; /* errno is set here */ if (eaccess (progpathname, X_OK) == 0) { struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) errno = ENOEXEC; else errno = EACCES; } } failure_errno = errno; free (progpathname); } #endif errno = failure_errno; return NULL; } } } if (path == NULL) /* If PATH is not set, the default search path is implementation dependent. In practice, it is treated like an empty PATH. */ path = ""; { /* Make a copy, to prepare for destructive modifications. */ char *path_copy = strdup (path); if (path_copy == NULL) return NULL; /* errno is set here */ int failure_errno; char *path_rest; char *cp; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ bool progname_has_dot = (strchr (progname, '.') != NULL); #endif failure_errno = ENOENT; for (path_rest = path_copy; ; path_rest = cp + 1) { const char *dir; bool last; char *dir_as_prefix_to_free; const char *dir_as_prefix; size_t i; /* Extract next directory in PATH. */ dir = path_rest; for (cp = path_rest; *cp != '\0' && *cp != PATH_SEPARATOR; cp++) ; last = (*cp == '\0'); *cp = '\0'; /* Empty PATH components designate the current directory. */ if (dir == cp) dir = "."; /* Concatenate directory and dir. */ if (directory != NULL && IS_RELATIVE_FILE_NAME (dir)) { dir_as_prefix_to_free = concatenated_filename (directory, dir, NULL); if (dir_as_prefix_to_free == NULL) { /* errno is set here. */ failure_errno = errno; goto failed; } dir_as_prefix = dir_as_prefix_to_free; } else { dir_as_prefix_to_free = NULL; dir_as_prefix = dir; } /* Try all platform-dependent suffixes. */ for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != progname_has_dot) #endif { /* Concatenate dir_as_prefix, progname, and suffix. */ char *progpathname = concatenated_filename (dir_as_prefix, progname, suffix); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Check that the progpathname does not point to a directory. */ struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); /* Add the "./" prefix for real, that concatenated_filename() optimized away. This avoids a second PATH search when the caller uses execl/execv/execlp/execvp. */ progpathname = (char *) malloc (2 + strlen (progname) + 1); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } progpathname[0] = '.'; progpathname[1] = NATIVE_SLASH; memcpy (progpathname + 2, progname, strlen (progname) + 1); } free (dir_as_prefix_to_free); free (path_copy); return progpathname; } errno = EACCES; } } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ if (failure_errno == ENOENT && !progname_has_dot) { /* In the loop above, we skipped suffix = "". Do this loop round now, merely to provide a better errno than ENOENT. */ char *progpathname = concatenated_filename (dir_as_prefix, progname, ""); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } if (eaccess (progpathname, X_OK) == 0) { struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) errno = ENOEXEC; else errno = EACCES; } } failure_errno = errno; free (progpathname); } #endif free (dir_as_prefix_to_free); if (last) break; } failed: /* Not found in PATH. */ free (path_copy); errno = failure_errno; return NULL; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/findprog-lgpl.c���������������������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2008. 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/>. */ #define IN_FINDPROG_LGPL 1 #include "findprog.c" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/findprog.c��������������������������������������������������������������0000664�0000000�0000000�00000011167�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. 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/>. */ #include <config.h> /* Specification. */ #include "findprog.h" #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if !(defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__) # include <sys/stat.h> #endif /* Avoid collision between findprog.c and findprog-lgpl.c. */ #if IN_FINDPROG_LGPL || ! GNULIB_FINDPROG_LGPL #if !IN_FINDPROG_LGPL # include "xalloc.h" #endif #include "concat-filename.h" const char * find_in_path (const char *progname) { #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ /* The searching rules with .COM, .EXE, .BAT, .CMD etc. suffixes are too complicated. Leave it to the OS. */ return progname; #else /* Unix */ char *path; char *path_rest; char *cp; if (strchr (progname, '/') != NULL) /* If progname contains a slash, it is either absolute or relative to the current directory. PATH is not used. */ return progname; path = getenv ("PATH"); if (path == NULL || *path == '\0') /* If PATH is not set, the default search path is implementation dependent. */ return progname; /* Make a copy, to prepare for destructive modifications. */ # if !IN_FINDPROG_LGPL path = xstrdup (path); # else path = strdup (path); if (path == NULL) /* Out of memory. */ return progname; # endif for (path_rest = path; ; path_rest = cp + 1) { const char *dir; bool last; char *progpathname; /* Extract next directory in PATH. */ dir = path_rest; for (cp = path_rest; *cp != '\0' && *cp != ':'; cp++) ; last = (*cp == '\0'); *cp = '\0'; /* Empty PATH components designate the current directory. */ if (dir == cp) dir = "."; /* Concatenate dir and progname. */ # if !IN_FINDPROG_LGPL progpathname = xconcatenated_filename (dir, progname, NULL); # else progpathname = concatenated_filename (dir, progname, NULL); if (progpathname == NULL) { /* Out of memory. */ free (path); return progname; } # endif /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Check that the progpathname does not point to a directory. */ struct stat statbuf; if (stat (progpathname, &statbuf) >= 0 && ! S_ISDIR (statbuf.st_mode)) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); /* Add the "./" prefix for real, that xconcatenated_filename() optimized away. This avoids a second PATH search when the caller uses execlp/execvp. */ # if !IN_FINDPROG_LGPL progpathname = XNMALLOC (2 + strlen (progname) + 1, char); # else progpathname = (char *) malloc (2 + strlen (progname) + 1); if (progpathname == NULL) { /* Out of memory. */ free (path); return progname; } # endif progpathname[0] = '.'; progpathname[1] = '/'; memcpy (progpathname + 2, progname, strlen (progname) + 1); } free (path); return progpathname; } } free (progpathname); if (last) break; } /* Not found in PATH. An error will be signalled at the first call. */ free (path); return progname; #endif } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/findprog.h��������������������������������������������������������������0000664�0000000�0000000�00000006343�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. 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 _FINDPROG_H #define _FINDPROG_H #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* Looks up a program in the PATH. Attempts to determine the pathname that would be called by execlp/execvp of PROGNAME. If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). Otherwise, it returns PROGNAME unmodified. Because of the latter case, callers should use execlp/execvp, not execl/execv on the returned pathname. The returned string is freshly malloc()ed if it is != PROGNAME. */ extern const char *find_in_path (const char *progname); /* Looks up a program in the given PATH-like string. The PATH argument consists of a list of directories, separated by ':' or (on native Windows) by ';'. An empty PATH element designates the current directory. A null PATH is equivalent to an empty PATH, that is, to the singleton list that contains only the current directory. If DIRECTORY is not NULL, all relative filenames (i.e. PROGNAME when it contains a slash, and the PATH elements) are considered relative to DIRECTORY instead of relative to the current directory of this process. Determines the pathname that would be called by execlp/execvp of PROGNAME. - If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). The returned string can be used with either execl/execv or execlp/execvp. It is freshly malloc()ed if it is != PROGNAME. - Otherwise, it sets errno and returns NULL. Specific errno values include: - ENOENT: means that the program's file was not found. - EACCES: means that the program's file cannot be accessed (due to some issue with one of the ancestor directories) or lacks the execute permissions. - ENOMEM: means out of memory. If OPTIMIZE_FOR_EXEC is true, the function saves some work, under the assumption that the resulting pathname will not be accessed directly, only through execl/execv or execlp/execvp. Here, a "slash" means: - On POSIX systems excluding Cygwin: a '/', - On Windows, OS/2, DOS platforms: a '/' or '\'. */ extern const char *find_in_given_path (const char *progname, const char *path, const char *directory, bool optimize_for_exec); #ifdef __cplusplus } #endif #endif /* _FINDPROG_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/flexmember.h������������������������������������������������������������0000664�0000000�0000000�00000005065�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sizes of structs with flexible array members. Copyright 2016-2021 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 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/>. Written by Paul Eggert. */ #include <stddef.h> /* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. On older platforms without _Alignof, use a pessimistic bound that is safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. On newer platforms, use _Alignof to get a tighter bound. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) #else # define FLEXALIGNOF(type) _Alignof (type) #endif /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that is followed by N bytes of other data. The result is suitable as an argument to malloc. For example: struct s { int n; char d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size that causes malloc to yield a pointer that is not properly aligned for TYPE; for example, if sizeof (int) == alignof (int) == 4, malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent to malloc (7) and might yield a pointer that is not a multiple of 4 (which means the pointer is not properly aligned for struct s), whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is equivalent to malloc (8) and must yield a pointer that is a multiple of 4. Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ & ~ (FLEXALIGNOF (type) - 1)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/float+.h����������������������������������������������������������������0000664�0000000�0000000�00000013007�14110572173�0016377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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 _FLOATPLUS_H #define _FLOATPLUS_H #include <float.h> #include <limits.h> /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/float.c�����������������������������������������������������������������0000664�0000000�0000000�00000002526�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary definitions for <float.h>. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <float.h> #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; #elif defined __i386__ const union gl_long_double_union gl_LDBL_MAX = { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/float.in.h��������������������������������������������������������������0000664�0000000�0000000�00000017310�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A correct <float.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_FLOAT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ #ifndef _@GUARD_PREFIX@_FLOAT_H #define _@GUARD_PREFIX@_FLOAT_H /* 'long double' properties. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.0842021724855044340E-19L /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L /* Maximum representable finite number. */ # undef LDBL_MAX # define LDBL_MAX 1.1897314953572317650E+4932L /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. */ #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. But the largest literal that GCC allows us to write is 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. So, define it like this through a reference to an external variable const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; extern const long double LDBL_MAX; Unfortunately, this is not a constant expression. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are wrong. On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ #endif #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MAX /* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. It is not easy to define: #define LDBL_MAX 1.79769313486231580793728971405302307166e308L is too small, whereas #define LDBL_MAX 1.79769313486231580793728971405302307167e308L is too large. Apparently a bug in GCC decimal-to-binary conversion. Also, I can't get values larger than #define LDBL63 ((long double) (1ULL << 63)) #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. So, define it like this through a reference to an external variable const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; extern const long double LDBL_MAX; or through a pointer cast #define LDBL_MAX \ (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) Unfortunately, this is not a constant expression, and the latter expression does not work well when GCC is optimizing.. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) #endif /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON are wrong. */ #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ # undef LDBL_EPSILON # define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ # endif #endif #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ extern # ifdef __cplusplus "C" # endif void _Qp_itoq (long double *, int); static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; #endif #endif /* _@GUARD_PREFIX@_FLOAT_H */ #endif /* _@GUARD_PREFIX@_FLOAT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/flock.c�����������������������������������������������������������������0000664�0000000�0000000�00000011606�14110572173�0016313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate flock on platforms that lack it, primarily Windows and MinGW. This is derived from sqlite3 sources. https://www.sqlite.org/src/finfo?name=src/os_win.c https://www.sqlite.org/copyright.html Written by Richard W.M. Jones <rjones.at.redhat.com> Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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. This 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 this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/file.h> #if defined _WIN32 && ! defined __CYGWIN__ /* LockFileEx */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <errno.h> /* _get_osfhandle */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Determine the current size of a file. Because the other braindead * APIs we'll call need lower/upper 32 bit pairs, keep the file size * like that too. */ static BOOL file_size (HANDLE h, DWORD * lower, DWORD * upper) { *lower = GetFileSize (h, upper); return 1; } /* LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. */ # ifndef LOCKFILE_FAIL_IMMEDIATELY # define LOCKFILE_FAIL_IMMEDIATELY 1 # endif /* Acquire a lock. */ static BOOL do_lock (HANDLE h, int non_blocking, int exclusive) { BOOL res; DWORD size_lower, size_upper; OVERLAPPED ovlp; int flags = 0; /* We're going to lock the whole file, so get the file size. */ res = file_size (h, &size_lower, &size_upper); if (!res) return 0; /* Start offset is 0, and also zero the remaining members of this struct. */ memset (&ovlp, 0, sizeof ovlp); if (non_blocking) flags |= LOCKFILE_FAIL_IMMEDIATELY; if (exclusive) flags |= LOCKFILE_EXCLUSIVE_LOCK; return LockFileEx (h, flags, 0, size_lower, size_upper, &ovlp); } /* Unlock reader or exclusive lock. */ static BOOL do_unlock (HANDLE h) { int res; DWORD size_lower, size_upper; res = file_size (h, &size_lower, &size_upper); if (!res) return 0; return UnlockFile (h, 0, 0, size_lower, size_upper); } /* Now our BSD-like flock operation. */ int flock (int fd, int operation) { HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD res; int non_blocking; if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } non_blocking = operation & LOCK_NB; operation &= ~LOCK_NB; switch (operation) { case LOCK_SH: res = do_lock (h, non_blocking, 0); break; case LOCK_EX: res = do_lock (h, non_blocking, 1); break; case LOCK_UN: res = do_unlock (h); break; default: errno = EINVAL; return -1; } /* Map Windows errors into Unix errnos. As usual MSDN fails to * document the permissible error codes. */ if (!res) { DWORD err = GetLastError (); switch (err) { /* This means someone else is holding a lock. */ case ERROR_LOCK_VIOLATION: errno = EAGAIN; break; /* Out of memory. */ case ERROR_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case ERROR_BAD_COMMAND: errno = EINVAL; break; /* Unlikely to be other errors, but at least don't lose the * error code. */ default: errno = err; } return -1; } return 0; } #else /* !Windows */ # ifdef HAVE_STRUCT_FLOCK_L_TYPE /* We know how to implement flock in terms of fcntl. */ # include <fcntl.h> # ifdef HAVE_UNISTD_H # include <unistd.h> # endif # include <errno.h> # include <string.h> int flock (int fd, int operation) { int cmd, r; struct flock fl; if (operation & LOCK_NB) cmd = F_SETLK; else cmd = F_SETLKW; operation &= ~LOCK_NB; memset (&fl, 0, sizeof fl); fl.l_whence = SEEK_SET; /* l_start & l_len are 0, which as a special case means "whole file". */ switch (operation) { case LOCK_SH: fl.l_type = F_RDLCK; break; case LOCK_EX: fl.l_type = F_WRLCK; break; case LOCK_UN: fl.l_type = F_UNLCK; break; default: errno = EINVAL; return -1; } r = fcntl (fd, cmd, &fl); if (r == -1 && errno == EACCES) errno = EAGAIN; return r; } # else /* !HAVE_STRUCT_FLOCK_L_TYPE */ # error "This platform lacks flock function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." # endif /* !HAVE_STRUCT_FLOCK_L_TYPE */ #endif /* !Windows */ ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/floor.c�����������������������������������������������������������������0000664�0000000�0000000�00000006522�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. Copyright (C) 2007, 2010-2021 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>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #ifdef USE_LONG_DOUBLE # define FUNC floorl # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC floor # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC floorf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define L_(literal) literal##f #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE FUNC (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } return z; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/floorf.c����������������������������������������������������������������0000664�0000000�0000000�00000001532�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. Copyright (C) 2007, 2009-2021 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>, 2007. */ #define USE_FLOAT #include "floor.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/floorl.c����������������������������������������������������������������0000664�0000000�0000000�00000002021�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. Copyright (C) 2007, 2009-2021 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>, 2007. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double floorl (long double x) { return floor (x); } #else # define USE_LONG_DOUBLE # include "floor.c" #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fma.c�������������������������������������������������������������������0000664�0000000�0000000�00000103235�14110572173�0015760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. Copyright (C) 2007, 2009, 2011-2021 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>, 2011. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <limits.h> #include <stdbool.h> #include <stdlib.h> #if HAVE_FEGETROUND # include <fenv.h> #endif #include "float+.h" #include "integer_length.h" #include "verify.h" #ifdef USE_LONG_DOUBLE # define FUNC fmal # define DOUBLE long double # define FREXP frexpl # define LDEXP ldexpl # define MIN_EXP LDBL_MIN_EXP # define MANT_BIT LDBL_MANT_BIT # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC fma # define DOUBLE double # define FREXP frexp # define LDEXP ldexp # define MIN_EXP DBL_MIN_EXP # define MANT_BIT DBL_MANT_BIT # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC fmaf # define DOUBLE float # define FREXP frexpf # define LDEXP ldexpf # define MIN_EXP FLT_MIN_EXP # define MANT_BIT FLT_MANT_BIT # define L_(literal) literal##f #endif #undef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #undef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* Work around GCC 4.2.1 bug on OpenBSD 5.1/SPARC64. */ #if defined __GNUC__ && defined __sparc__ # define VOLATILE volatile #else # define VOLATILE #endif /* It is possible to write an implementation of fused multiply-add with floating-point operations alone. See Sylvie Boldo, Guillaume Melquiond: Emulation of FMA and correctly-rounded sums: proved algorithms using rounding to odd. <https://www.lri.fr/~melquion/doc/08-tc.pdf> But is it complicated. Here we take the simpler (and probably slower) approach of doing multi-precision arithmetic. */ /* We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; #define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; #define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Number of limbs needed for a single DOUBLE. */ #define NLIMBS1 ((MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS) /* Number of limbs needed for the accumulator. */ #define NLIMBS3 (3 * NLIMBS1 + 1) /* Assuming 0.5 <= x < 1.0: Convert the mantissa (x * 2^DBL_MANT_BIT) to a sequence of limbs. */ static void decode (DOUBLE x, mp_limb_t limbs[NLIMBS1]) { /* I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^31 (to 'unsigned int' or 'int', doesn't matter). So, we split the MANT_BIT bits of x into a number of chunks of at most 31 bits. */ enum { chunk_count = (MANT_BIT - 1) / 31 + 1 }; /* Variables used for storing the bits limb after limb. */ mp_limb_t *p = limbs + NLIMBS1 - 1; mp_limb_t accu = 0; unsigned int bits_needed = MANT_BIT - (NLIMBS1 - 1) * GMP_LIMB_BITS; /* The bits bits_needed-1...0 need to be ORed into the accu. 1 <= bits_needed <= GMP_LIMB_BITS. */ /* Unroll the first 4 loop rounds. */ if (chunk_count > 0) { /* Here we still have MANT_BIT-0*31 bits to extract from x. */ enum { chunk_bits = MIN (31, MANT_BIT - 0 * 31) }; /* > 0, <= 31 */ mp_limb_t d; x *= (mp_limb_t) 1 << chunk_bits; d = (int) x; /* 0 <= d < 2^chunk_bits. */ x -= d; if (!(x >= L_(0.0) && x < L_(1.0))) abort (); if (bits_needed < chunk_bits) { /* store bits_needed bits */ accu |= d >> (chunk_bits - bits_needed); *p = accu; if (p == limbs) goto done; p--; /* hold (chunk_bits - bits_needed) bits */ accu = d << (GMP_LIMB_BITS - (chunk_bits - bits_needed)); bits_needed = GMP_LIMB_BITS - (chunk_bits - bits_needed); } else { /* store chunk_bits bits */ accu |= d << (bits_needed - chunk_bits); bits_needed -= chunk_bits; if (bits_needed == 0) { *p = accu; if (p == limbs) goto done; p--; accu = 0; bits_needed = GMP_LIMB_BITS; } } } if (chunk_count > 1) { /* Here we still have MANT_BIT-1*31 bits to extract from x. */ enum { chunk_bits = MIN (31, MAX (MANT_BIT - 1 * 31, 0)) }; /* > 0, <= 31 */ mp_limb_t d; x *= (mp_limb_t) 1 << chunk_bits; d = (int) x; /* 0 <= d < 2^chunk_bits. */ x -= d; if (!(x >= L_(0.0) && x < L_(1.0))) abort (); if (bits_needed < chunk_bits) { /* store bits_needed bits */ accu |= d >> (chunk_bits - bits_needed); *p = accu; if (p == limbs) goto done; p--; /* hold (chunk_bits - bits_needed) bits */ accu = d << (GMP_LIMB_BITS - (chunk_bits - bits_needed)); bits_needed = GMP_LIMB_BITS - (chunk_bits - bits_needed); } else { /* store chunk_bits bits */ accu |= d << (bits_needed - chunk_bits); bits_needed -= chunk_bits; if (bits_needed == 0) { *p = accu; if (p == limbs) goto done; p--; accu = 0; bits_needed = GMP_LIMB_BITS; } } } if (chunk_count > 2) { /* Here we still have MANT_BIT-2*31 bits to extract from x. */ enum { chunk_bits = MIN (31, MAX (MANT_BIT - 2 * 31, 0)) }; /* > 0, <= 31 */ mp_limb_t d; x *= (mp_limb_t) 1 << chunk_bits; d = (int) x; /* 0 <= d < 2^chunk_bits. */ x -= d; if (!(x >= L_(0.0) && x < L_(1.0))) abort (); if (bits_needed < chunk_bits) { /* store bits_needed bits */ accu |= d >> (chunk_bits - bits_needed); *p = accu; if (p == limbs) goto done; p--; /* hold (chunk_bits - bits_needed) bits */ accu = d << (GMP_LIMB_BITS - (chunk_bits - bits_needed)); bits_needed = GMP_LIMB_BITS - (chunk_bits - bits_needed); } else { /* store chunk_bits bits */ accu |= d << (bits_needed - chunk_bits); bits_needed -= chunk_bits; if (bits_needed == 0) { *p = accu; if (p == limbs) goto done; p--; accu = 0; bits_needed = GMP_LIMB_BITS; } } } if (chunk_count > 3) { /* Here we still have MANT_BIT-3*31 bits to extract from x. */ enum { chunk_bits = MIN (31, MAX (MANT_BIT - 3 * 31, 0)) }; /* > 0, <= 31 */ mp_limb_t d; x *= (mp_limb_t) 1 << chunk_bits; d = (int) x; /* 0 <= d < 2^chunk_bits. */ x -= d; if (!(x >= L_(0.0) && x < L_(1.0))) abort (); if (bits_needed < chunk_bits) { /* store bits_needed bits */ accu |= d >> (chunk_bits - bits_needed); *p = accu; if (p == limbs) goto done; p--; /* hold (chunk_bits - bits_needed) bits */ accu = d << (GMP_LIMB_BITS - (chunk_bits - bits_needed)); bits_needed = GMP_LIMB_BITS - (chunk_bits - bits_needed); } else { /* store chunk_bits bits */ accu |= d << (bits_needed - chunk_bits); bits_needed -= chunk_bits; if (bits_needed == 0) { *p = accu; if (p == limbs) goto done; p--; accu = 0; bits_needed = GMP_LIMB_BITS; } } } if (chunk_count > 4) { /* Here we still have MANT_BIT-4*31 bits to extract from x. */ /* Generic loop. */ size_t k; for (k = 4; k < chunk_count; k++) { size_t chunk_bits = MIN (31, MANT_BIT - k * 31); /* > 0, <= 31 */ mp_limb_t d; x *= (mp_limb_t) 1 << chunk_bits; d = (int) x; /* 0 <= d < 2^chunk_bits. */ x -= d; if (!(x >= L_(0.0) && x < L_(1.0))) abort (); if (bits_needed < chunk_bits) { /* store bits_needed bits */ accu |= d >> (chunk_bits - bits_needed); *p = accu; if (p == limbs) goto done; p--; /* hold (chunk_bits - bits_needed) bits */ accu = d << (GMP_LIMB_BITS - (chunk_bits - bits_needed)); bits_needed = GMP_LIMB_BITS - (chunk_bits - bits_needed); } else { /* store chunk_bits bits */ accu |= d << (bits_needed - chunk_bits); bits_needed -= chunk_bits; if (bits_needed == 0) { *p = accu; if (p == limbs) goto done; p--; accu = 0; bits_needed = GMP_LIMB_BITS; } } } } /* We shouldn't get here. */ abort (); done: ; #ifndef USE_LONG_DOUBLE /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(x == L_(0.0))) abort (); #endif } /* Multiply two sequences of limbs. */ static void multiply (mp_limb_t xlimbs[NLIMBS1], mp_limb_t ylimbs[NLIMBS1], mp_limb_t prod_limbs[2 * NLIMBS1]) { size_t k, i, j; enum { len1 = NLIMBS1 }; enum { len2 = NLIMBS1 }; for (k = len2; k > 0; ) prod_limbs[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = xlimbs[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = ylimbs[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += prod_limbs[i + j]; prod_limbs[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } prod_limbs[i + len2] = (mp_limb_t) carry; } } DOUBLE FUNC (DOUBLE x, DOUBLE y, DOUBLE z) { if (isfinite (x) && isfinite (y)) { if (isfinite (z)) { /* x, y, z are all finite. */ if (x == L_(0.0) || y == L_(0.0)) return z; if (z == L_(0.0)) return x * y; /* x, y, z are all non-zero. The result is x * y + z. */ { int e; /* exponent of x * y + z */ int sign; mp_limb_t sum[NLIMBS3]; size_t sum_len; { int xys; /* sign of x * y */ int zs; /* sign of z */ int xye; /* sum of exponents of x and y */ int ze; /* exponent of z */ mp_limb_t summand1[NLIMBS3]; size_t summand1_len; mp_limb_t summand2[NLIMBS3]; size_t summand2_len; { mp_limb_t zlimbs[NLIMBS1]; mp_limb_t xylimbs[2 * NLIMBS1]; { DOUBLE xn; /* normalized part of x */ DOUBLE yn; /* normalized part of y */ DOUBLE zn; /* normalized part of z */ int xe; /* exponent of x */ int ye; /* exponent of y */ mp_limb_t xlimbs[NLIMBS1]; mp_limb_t ylimbs[NLIMBS1]; xys = 0; xn = x; if (x < 0) { xys = 1; xn = - x; } yn = y; if (y < 0) { xys = 1 - xys; yn = - y; } zs = 0; zn = z; if (z < 0) { zs = 1; zn = - z; } /* xn, yn, zn are all positive. The result is (-1)^xys * xn * yn + (-1)^zs * zn. */ xn = FREXP (xn, &xe); yn = FREXP (yn, &ye); zn = FREXP (zn, &ze); xye = xe + ye; /* xn, yn, zn are all < 1.0 and >= 0.5. The result is (-1)^xys * 2^xye * xn * yn + (-1)^zs * 2^ze * zn. */ if (xye < ze - MANT_BIT) { /* 2^xye * xn * yn < 2^xye <= 2^(ze-MANT_BIT-1) */ return z; } if (xye - 2 * MANT_BIT > ze) { /* 2^ze * zn < 2^ze <= 2^(xye-2*MANT_BIT-1). We cannot simply do return x * y; because it would round differently: A round-to-even in the multiplication can be a round-up or round-down here, due to z. So replace z with a value that doesn't require the use of long bignums but that rounds the same way. */ zn = L_(0.5); ze = xye - 2 * MANT_BIT - 1; } /* Convert mantissas of xn, yn, zn to limb sequences: xlimbs = 2^MANT_BIT * xn ylimbs = 2^MANT_BIT * yn zlimbs = 2^MANT_BIT * zn */ decode (xn, xlimbs); decode (yn, ylimbs); decode (zn, zlimbs); /* Multiply the mantissas of xn and yn: xylimbs = xlimbs * ylimbs */ multiply (xlimbs, ylimbs, xylimbs); } /* The result is (-1)^xys * 2^(xye-2*MANT_BIT) * xylimbs + (-1)^zs * 2^(ze-MANT_BIT) * zlimbs. Compute e = min (xye-2*MANT_BIT, ze-MANT_BIT) then summand1 = 2^(xye-2*MANT_BIT-e) * xylimbs summand2 = 2^(ze-MANT_BIT-e) * zlimbs */ e = MIN (xye - 2 * MANT_BIT, ze - MANT_BIT); if (e == xye - 2 * MANT_BIT) { /* Simply copy the limbs of xylimbs. */ size_t i; for (i = 0; i < 2 * NLIMBS1; i++) summand1[i] = xylimbs[i]; summand1_len = 2 * NLIMBS1; } else { size_t ediff = xye - 2 * MANT_BIT - e; /* Left shift the limbs of xylimbs by ediff bits. */ size_t ldiff = ediff / GMP_LIMB_BITS; size_t shift = ediff % GMP_LIMB_BITS; size_t i; for (i = 0; i < ldiff; i++) summand1[i] = 0; if (shift > 0) { mp_limb_t carry = 0; for (i = 0; i < 2 * NLIMBS1; i++) { summand1[ldiff + i] = (xylimbs[i] << shift) | carry; carry = xylimbs[i] >> (GMP_LIMB_BITS - shift); } summand1[ldiff + 2 * NLIMBS1] = carry; summand1_len = ldiff + 2 * NLIMBS1 + 1; } else { for (i = 0; i < 2 * NLIMBS1; i++) summand1[ldiff + i] = xylimbs[i]; summand1_len = ldiff + 2 * NLIMBS1; } /* Estimation of needed array size: ediff = (xye - 2 * MANT_BIT) - (ze - MANT_BIT) <= MANT_BIT + 1 therefore summand1_len = (ediff + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS + 2 * NLIMBS1 <= (MANT_BIT + GMP_LIMB_BITS) / GMP_LIMB_BITS + 2 * NLIMBS1 <= 3 * NLIMBS1 + 1 = NLIMBS3 */ if (!(summand1_len <= NLIMBS3)) abort (); } if (e == ze - MANT_BIT) { /* Simply copy the limbs of zlimbs. */ size_t i; for (i = 0; i < NLIMBS1; i++) summand2[i] = zlimbs[i]; summand2_len = NLIMBS1; } else { size_t ediff = ze - MANT_BIT - e; /* Left shift the limbs of zlimbs by ediff bits. */ size_t ldiff = ediff / GMP_LIMB_BITS; size_t shift = ediff % GMP_LIMB_BITS; size_t i; for (i = 0; i < ldiff; i++) summand2[i] = 0; if (shift > 0) { mp_limb_t carry = 0; for (i = 0; i < NLIMBS1; i++) { summand2[ldiff + i] = (zlimbs[i] << shift) | carry; carry = zlimbs[i] >> (GMP_LIMB_BITS - shift); } summand2[ldiff + NLIMBS1] = carry; summand2_len = ldiff + NLIMBS1 + 1; } else { for (i = 0; i < NLIMBS1; i++) summand2[ldiff + i] = zlimbs[i]; summand2_len = ldiff + NLIMBS1; } /* Estimation of needed array size: ediff = (ze - MANT_BIT) - (xye - 2 * MANT_BIT) <= 2 * MANT_BIT therefore summand2_len = (ediff + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS + NLIMBS1 <= (2 * MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS + NLIMBS1 <= 3 * NLIMBS1 + 1 = NLIMBS3 */ if (!(summand2_len <= NLIMBS3)) abort (); } } /* The result is (-1)^xys * 2^e * summand1 + (-1)^zs * 2^e * summand2. */ if (xys == zs) { /* Perform an addition. */ size_t i; mp_limb_t carry; sign = xys; carry = 0; for (i = 0; i < MIN (summand1_len, summand2_len); i++) { mp_limb_t digit1 = summand1[i]; mp_limb_t digit2 = summand2[i]; sum[i] = digit1 + digit2 + carry; carry = (carry ? digit1 >= (mp_limb_t)-1 - digit2 : digit1 > (mp_limb_t)-1 - digit2); } if (summand1_len > summand2_len) for (; i < summand1_len; i++) { mp_limb_t digit1 = summand1[i]; sum[i] = carry + digit1; carry = carry && digit1 == (mp_limb_t)-1; } else for (; i < summand2_len; i++) { mp_limb_t digit2 = summand2[i]; sum[i] = carry + digit2; carry = carry && digit2 == (mp_limb_t)-1; } if (carry) sum[i++] = carry; sum_len = i; } else { /* Perform a subtraction. */ /* Compare summand1 and summand2 by magnitude. */ while (summand1[summand1_len - 1] == 0) summand1_len--; while (summand2[summand2_len - 1] == 0) summand2_len--; if (summand1_len > summand2_len) sign = xys; else if (summand1_len < summand2_len) sign = zs; else { size_t i = summand1_len; for (;;) { --i; if (summand1[i] > summand2[i]) { sign = xys; break; } if (summand1[i] < summand2[i]) { sign = zs; break; } if (i == 0) /* summand1 and summand2 are equal. */ return L_(0.0); } } if (sign == xys) { /* Compute summand1 - summand2. */ size_t i; mp_limb_t carry; carry = 0; for (i = 0; i < summand2_len; i++) { mp_limb_t digit1 = summand1[i]; mp_limb_t digit2 = summand2[i]; sum[i] = digit1 - digit2 - carry; carry = (carry ? digit1 <= digit2 : digit1 < digit2); } for (; i < summand1_len; i++) { mp_limb_t digit1 = summand1[i]; sum[i] = digit1 - carry; carry = carry && digit1 == 0; } if (carry) abort (); sum_len = summand1_len; } else { /* Compute summand2 - summand1. */ size_t i; mp_limb_t carry; carry = 0; for (i = 0; i < summand1_len; i++) { mp_limb_t digit1 = summand1[i]; mp_limb_t digit2 = summand2[i]; sum[i] = digit2 - digit1 - carry; carry = (carry ? digit2 <= digit1 : digit2 < digit1); } for (; i < summand2_len; i++) { mp_limb_t digit2 = summand2[i]; sum[i] = digit2 - carry; carry = carry && digit2 == 0; } if (carry) abort (); sum_len = summand2_len; } } } /* The result is (-1)^sign * 2^e * sum. */ /* Now perform the rounding to MANT_BIT mantissa bits. */ while (sum[sum_len - 1] == 0) sum_len--; /* Here we know that the most significant limb, sum[sum_len - 1], is non-zero. */ { /* How many bits the sum has. */ unsigned int sum_bits = integer_length (sum[sum_len - 1]) + (sum_len - 1) * GMP_LIMB_BITS; /* How many bits to keep when rounding. */ unsigned int keep_bits; /* How many bits to round off. */ unsigned int roundoff_bits; if (e + (int) sum_bits >= MIN_EXP) /* 2^e * sum >= 2^(MIN_EXP-1). result will be a normalized number. */ keep_bits = MANT_BIT; else if (e + (int) sum_bits >= MIN_EXP - MANT_BIT) /* 2^e * sum >= 2^(MIN_EXP-MANT_BIT-1). result will be a denormalized number or rounded to zero. */ keep_bits = e + (int) sum_bits - (MIN_EXP + MANT_BIT); else /* 2^e * sum < 2^(MIN_EXP-MANT_BIT-1). Round to zero. */ return L_(0.0); /* Note: 0 <= keep_bits <= MANT_BIT. */ if (sum_bits <= keep_bits) { /* Nothing to do. */ roundoff_bits = 0; keep_bits = sum_bits; } else { int round_up; roundoff_bits = sum_bits - keep_bits; /* > 0, <= sum_bits */ { #if HAVE_FEGETROUND && defined FE_TOWARDZERO /* Cf. <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fegetround.html> */ int rounding_mode = fegetround (); if (rounding_mode == FE_TOWARDZERO) round_up = 0; else if (rounding_mode == FE_DOWNWARD) round_up = sign; else if (rounding_mode == FE_UPWARD) round_up = !sign; #else /* Cf. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html> */ int rounding_mode = FLT_ROUNDS; if (rounding_mode == 0) /* toward zero */ round_up = 0; else if (rounding_mode == 3) /* toward negative infinity */ round_up = sign; else if (rounding_mode == 2) /* toward positive infinity */ round_up = !sign; #endif else { /* Round to nearest. */ round_up = 0; /* Test bit (roundoff_bits-1). */ if ((sum[(roundoff_bits - 1) / GMP_LIMB_BITS] >> ((roundoff_bits - 1) % GMP_LIMB_BITS)) & 1) { /* Test bits roundoff_bits-1 .. 0. */ bool halfway = ((sum[(roundoff_bits - 1) / GMP_LIMB_BITS] & (((mp_limb_t) 1 << ((roundoff_bits - 1) % GMP_LIMB_BITS)) - 1)) == 0); if (halfway) { int i; for (i = (roundoff_bits - 1) / GMP_LIMB_BITS - 1; i >= 0; i--) if (sum[i] != 0) { halfway = false; break; } } if (halfway) /* Round to even. Test bit roundoff_bits. */ round_up = ((sum[roundoff_bits / GMP_LIMB_BITS] >> (roundoff_bits % GMP_LIMB_BITS)) & 1); else /* Round up. */ round_up = 1; } } } /* Perform the rounding. */ { size_t i = roundoff_bits / GMP_LIMB_BITS; { size_t j = i; while (j > 0) sum[--j] = 0; } if (round_up) { /* Round up. */ sum[i] = (sum[i] | (((mp_limb_t) 1 << (roundoff_bits % GMP_LIMB_BITS)) - 1)) + 1; if (sum[i] == 0) { /* Propagate carry. */ while (i < sum_len - 1) { ++i; sum[i] += 1; if (sum[i] != 0) break; } } /* sum[i] is the most significant limb that was incremented. */ if (i == sum_len - 1 && (sum[i] & (sum[i] - 1)) == 0) { /* Through the carry, one more bit is needed. */ if (sum[i] != 0) sum_bits += 1; else { /* Instead of requiring one more limb of memory, perform a shift by one bit, and adjust the exponent. */ sum[i] = (mp_limb_t) 1 << (GMP_LIMB_BITS - 1); e += 1; } /* The bit sequence has the form 1000...000. */ keep_bits = 1; } } else { /* Round down. */ sum[i] &= ((mp_limb_t) -1 << (roundoff_bits % GMP_LIMB_BITS)); if (i == sum_len - 1 && sum[i] == 0) /* The entire sum has become zero. */ return L_(0.0); } } } /* The result is (-1)^sign * 2^e * sum and here we know that 2^(sum_bits-1) <= sum < 2^sum_bits, and sum is a multiple of 2^(sum_bits-keep_bits), where 0 < keep_bits <= MANT_BIT and keep_bits <= sum_bits. (If keep_bits was initially 0, the rounding either returned zero or produced a bit sequence of the form 1000...000, setting keep_bits to 1.) */ { /* Split the keep_bits bits into chunks of at most 32 bits. */ unsigned int chunk_count = (keep_bits - 1) / GMP_LIMB_BITS + 1; /* 1 <= chunk_count <= ceil (sum_bits / GMP_LIMB_BITS) = sum_len. */ static const DOUBLE chunk_multiplier = /* 2^-GMP_LIMB_BITS */ L_(1.0) / ((DOUBLE) (1 << (GMP_LIMB_BITS / 2)) * (DOUBLE) (1 << ((GMP_LIMB_BITS + 1) / 2))); unsigned int shift = sum_bits % GMP_LIMB_BITS; DOUBLE fsum; if (MANT_BIT <= GMP_LIMB_BITS) { /* Since keep_bits <= MANT_BIT <= GMP_LIMB_BITS, chunk_count is 1. No need for a loop. */ if (shift == 0) fsum = (DOUBLE) sum[sum_len - 1]; else fsum = (DOUBLE) ((sum[sum_len - 1] << (GMP_LIMB_BITS - shift)) | (sum_len >= 2 ? sum[sum_len - 2] >> shift : 0)); } else { int k; k = chunk_count - 1; if (shift == 0) { /* First loop round. */ fsum = (DOUBLE) sum[sum_len - k - 1]; /* General loop. */ while (--k >= 0) { fsum *= chunk_multiplier; fsum += (DOUBLE) sum[sum_len - k - 1]; } } else { /* First loop round. */ { VOLATILE mp_limb_t chunk = (sum[sum_len - k - 1] << (GMP_LIMB_BITS - shift)) | (sum_len >= k + 2 ? sum[sum_len - k - 2] >> shift : 0); fsum = (DOUBLE) chunk; } /* General loop. */ while (--k >= 0) { fsum *= chunk_multiplier; { VOLATILE mp_limb_t chunk = (sum[sum_len - k - 1] << (GMP_LIMB_BITS - shift)) | (sum[sum_len - k - 2] >> shift); fsum += (DOUBLE) chunk; } } } } fsum = LDEXP (fsum, e + (int) sum_bits - GMP_LIMB_BITS); return (sign ? - fsum : fsum); } } } } else return z; } else return (x * y) + z; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fmaf.c������������������������������������������������������������������0000664�0000000�0000000�00000001505�14110572173�0016123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. Copyright (C) 2011-2021 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>, 2011. */ #define USE_FLOAT #include "fma.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fmal.c������������������������������������������������������������������0000664�0000000�0000000�00000002034�14110572173�0016127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. Copyright (C) 2011-2021 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>, 2011. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double fmal (long double x, long double y, long double z) { return fma (x, y, z); } #else # define USE_LONG_DOUBLE # include "fma.c" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fmod.c������������������������������������������������������������������0000664�0000000�0000000�00000030373�14110572173�0016144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2011-2021 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/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #include <stdlib.h> #ifdef USE_LONG_DOUBLE # define FMOD fmodl # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define L_(literal) literal##L # define FREXP frexpl # define LDEXP ldexpl # define FABS fabsl # define TRUNC truncl # define ISNAN isnanl #else # define FMOD fmod # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define L_(literal) literal # define FREXP frexp # define LDEXP ldexp # define FABS fabs # define TRUNC trunc # define ISNAN isnand #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif #undef NAN #if defined _MSC_VER static DOUBLE zero; # define NAN (zero / zero) #else # define NAN (L_(0.0) / L_(0.0)) #endif /* To avoid rounding errors during the computation of x - q * y, there are three possibilities: - Use fma (- q, y, x). - Have q be a single bit at a time, and compute x - q * y through a subtraction. - Have q be at most MANT_DIG/2 bits at a time, and compute x - q * y by splitting y into two halves: y = y1 * 2^(MANT_DIG/2) + y0 x - q * y = (x - q * y1 * 2^MANT_DIG/2) - q * y0. The latter is probably the most efficient. */ /* Number of bits in a limb. */ #define LIMB_BITS (MANT_DIG / 2) /* 2^LIMB_BITS. */ static const DOUBLE TWO_LIMB_BITS = /* Assume LIMB_BITS <= 3 * 31. Use the identity n = floor(n/3) + floor((n+1)/3) + floor((n+2)/3). */ (DOUBLE) (1U << (LIMB_BITS / 3)) * (DOUBLE) (1U << ((LIMB_BITS + 1) / 3)) * (DOUBLE) (1U << ((LIMB_BITS + 2) / 3)); /* 2^-LIMB_BITS. */ static const DOUBLE TWO_LIMB_BITS_INVERSE = /* Assume LIMB_BITS <= 3 * 31. Use the identity n = floor(n/3) + floor((n+1)/3) + floor((n+2)/3). */ L_(1.0) / ((DOUBLE) (1U << (LIMB_BITS / 3)) * (DOUBLE) (1U << ((LIMB_BITS + 1) / 3)) * (DOUBLE) (1U << ((LIMB_BITS + 2) / 3))); DOUBLE FMOD (DOUBLE x, DOUBLE y) { if (isfinite (x) && isfinite (y) && y != L_(0.0)) { if (x == L_(0.0)) /* Return x, regardless of the sign of y. */ return x; { int negate = ((!signbit (x)) ^ (!signbit (y))); /* Take the absolute value of x and y. */ x = FABS (x); y = FABS (y); /* Trivial case that requires no computation. */ if (x < y) return (negate ? - x : x); { int yexp; DOUBLE ym; DOUBLE y1; DOUBLE y0; int k; DOUBLE x2; DOUBLE x1; DOUBLE x0; /* Write y = 2^yexp * (y1 * 2^-LIMB_BITS + y0 * 2^-(2*LIMB_BITS)) where y1 is an integer, 2^(LIMB_BITS-1) <= y1 < 2^LIMB_BITS, y1 has at most LIMB_BITS bits, 0 <= y0 < 2^LIMB_BITS, y0 has at most (MANT_DIG + 1) / 2 bits. */ ym = FREXP (y, &yexp); ym = ym * TWO_LIMB_BITS; y1 = TRUNC (ym); y0 = (ym - y1) * TWO_LIMB_BITS; /* Write x = 2^(yexp+(k-3)*LIMB_BITS) * (x2 * 2^(2*LIMB_BITS) + x1 * 2^LIMB_BITS + x0) where x2, x1, x0 are each integers >= 0, < 2^LIMB_BITS. */ { int xexp; DOUBLE xm = FREXP (x, &xexp); /* Since we know x >= y, we know xexp >= yexp. */ xexp -= yexp; /* Compute k = ceil(xexp / LIMB_BITS). */ k = (xexp + LIMB_BITS - 1) / LIMB_BITS; /* Note: (k - 1) * LIMB_BITS + 1 <= xexp <= k * LIMB_BITS. */ /* Note: 0.5 <= xm < 1.0. */ xm = LDEXP (xm, xexp - (k - 1) * LIMB_BITS); /* Note: Now xm < 2^(xexp - (k - 1) * LIMB_BITS) <= 2^LIMB_BITS and xm >= 0.5 * 2^(xexp - (k - 1) * LIMB_BITS) >= 1.0 and xm has at most MANT_DIG <= 2*LIMB_BITS+1 bits. */ x2 = TRUNC (xm); x1 = (xm - x2) * TWO_LIMB_BITS; /* Split off x0 from x1 later. */ } /* Test whether [x2,x1,0] >= 2^LIMB_BITS * [y1,y0]. */ if (x2 > y1 || (x2 == y1 && x1 >= y0)) { /* Subtract 2^LIMB_BITS * [y1,y0] from [x2,x1,0]. */ x2 -= y1; x1 -= y0; if (x1 < L_(0.0)) { if (!(x2 >= L_(1.0))) abort (); x2 -= L_(1.0); x1 += TWO_LIMB_BITS; } } /* Split off x0 from x1. */ { DOUBLE x1int = TRUNC (x1); x0 = TRUNC ((x1 - x1int) * TWO_LIMB_BITS); x1 = x1int; } for (; k > 0; k--) { /* Multiprecision division of the limb sequence [x2,x1,x0] by [y1,y0]. */ /* Here [x2,x1,x0] < 2^LIMB_BITS * [y1,y0]. */ /* The first guess takes into account only [x2,x1] and [y1]. By Knuth's theorem, we know that q* = min (floor ([x2,x1] / [y1]), 2^LIMB_BITS - 1) and q = floor ([x2,x1,x0] / [y1,y0]) are not far away: q* - 2 <= q <= q* + 1. Proof: a) q* * y1 <= floor ([x2,x1] / [y1]) * y1 <= [x2,x1]. Hence [x2,x1,x0] - q* * [y1,y0] = 2^LIMB_BITS * ([x2,x1] - q* * [y1]) + x0 - q* * y0 >= x0 - q* * y0 >= - q* * y0 > - 2^(2*LIMB_BITS) >= - 2 * [y1,y0] So [x2,x1,x0] > (q* - 2) * [y1,y0]. b) If q* = floor ([x2,x1] / [y1]), then [x2,x1] < (q* + 1) * y1 Hence [x2,x1,x0] - q* * [y1,y0] = 2^LIMB_BITS * ([x2,x1] - q* * [y1]) + x0 - q* * y0 <= 2^LIMB_BITS * (y1 - 1) + x0 - q* * y0 <= 2^LIMB_BITS * (2^LIMB_BITS-2) + (2^LIMB_BITS-1) - 0 < 2^(2*LIMB_BITS) <= 2 * [y1,y0] So [x2,x1,x0] < (q* + 2) * [y1,y0]. and so q < q* + 2 which implies q <= q* + 1. In the other case, q* = 2^LIMB_BITS - 1. Then trivially q < 2^LIMB_BITS = q* + 1. We know that floor ([x2,x1] / [y1]) >= 2^LIMB_BITS if and only if x2 >= y1. */ DOUBLE q = (x2 >= y1 ? TWO_LIMB_BITS - L_(1.0) : TRUNC ((x2 * TWO_LIMB_BITS + x1) / y1)); if (q > L_(0.0)) { /* Compute [x2,x1,x0] - q* * [y1,y0] = 2^LIMB_BITS * ([x2,x1] - q* * [y1]) + x0 - q* * y0. */ DOUBLE q_y1 = q * y1; /* exact, at most 2*LIMB_BITS bits */ DOUBLE q_y1_1 = TRUNC (q_y1 * TWO_LIMB_BITS_INVERSE); DOUBLE q_y1_0 = q_y1 - q_y1_1 * TWO_LIMB_BITS; DOUBLE q_y0 = q * y0; /* exact, at most MANT_DIG bits */ DOUBLE q_y0_1 = TRUNC (q_y0 * TWO_LIMB_BITS_INVERSE); DOUBLE q_y0_0 = q_y0 - q_y0_1 * TWO_LIMB_BITS; x2 -= q_y1_1; x1 -= q_y1_0; x1 -= q_y0_1; x0 -= q_y0_0; /* Move negative carry from x0 to x1 and from x1 to x2. */ if (x0 < L_(0.0)) { x0 += TWO_LIMB_BITS; x1 -= L_(1.0); } if (x1 < L_(0.0)) { x1 += TWO_LIMB_BITS; x2 -= L_(1.0); if (x1 < L_(0.0)) /* not sure this can happen */ { x1 += TWO_LIMB_BITS; x2 -= L_(1.0); } } if (x2 < L_(0.0)) { /* Reduce q by 1. */ x1 += y1; x0 += y0; /* Move overflow from x0 to x1 and from x1 to x0. */ if (x0 >= TWO_LIMB_BITS) { x0 -= TWO_LIMB_BITS; x1 += L_(1.0); } if (x1 >= TWO_LIMB_BITS) { x1 -= TWO_LIMB_BITS; x2 += L_(1.0); } if (x2 < L_(0.0)) { /* Reduce q by 1 again. */ x1 += y1; x0 += y0; /* Move overflow from x0 to x1 and from x1 to x0. */ if (x0 >= TWO_LIMB_BITS) { x0 -= TWO_LIMB_BITS; x1 += L_(1.0); } if (x1 >= TWO_LIMB_BITS) { x1 -= TWO_LIMB_BITS; x2 += L_(1.0); } if (x2 < L_(0.0)) /* Shouldn't happen, because we proved that q >= q* - 2. */ abort (); } } } if (x2 > L_(0.0) || x1 > y1 || (x1 == y1 && x0 >= y0)) { /* Increase q by 1. */ x1 -= y1; x0 -= y0; /* Move negative carry from x0 to x1 and from x1 to x2. */ if (x0 < L_(0.0)) { x0 += TWO_LIMB_BITS; x1 -= L_(1.0); } if (x1 < L_(0.0)) { x1 += TWO_LIMB_BITS; x2 -= L_(1.0); } if (x2 < L_(0.0)) abort (); if (x2 > L_(0.0) || x1 > y1 || (x1 == y1 && x0 >= y0)) /* Shouldn't happen, because we proved that q <= q* + 1. */ abort (); } /* Here [x2,x1,x0] < [y1,y0]. */ /* Next round. */ x2 = x1; #if (MANT_DIG + 1) / 2 > LIMB_BITS /* y0 can have a fractional bit */ x1 = TRUNC (x0); x0 = (x0 - x1) * TWO_LIMB_BITS; #else x1 = x0; x0 = L_(0.0); #endif /* Here [x2,x1,x0] < 2^LIMB_BITS * [y1,y0]. */ } /* Here k = 0. The result is 2^(yexp-3*LIMB_BITS) * (x2 * 2^(2*LIMB_BITS) + x1 * 2^LIMB_BITS + x0). */ { DOUBLE r = LDEXP ((x2 * TWO_LIMB_BITS + x1) * TWO_LIMB_BITS + x0, yexp - 3 * LIMB_BITS); return (negate ? - r : r); } } } } else { if (ISNAN (x) || ISNAN (y)) return x + y; /* NaN */ else if (isinf (y)) return x; else /* x infinite or y zero */ return NAN; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fmodf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001561�14110572173�0016307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float fmodf (float x, float y) { return (float) fmod ((double) x, (double) y); } �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fmodl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0016313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double fmodl (long double x, long double y) { return fmod (x, y); } #else # define USE_LONG_DOUBLE # include "fmod.c" #endif ������������������������������������������������������gnulib-20210822~d383792/lib/fnmatch.c���������������������������������������������������������������0000664�0000000�0000000�00000026043�14110572173�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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 _LIBC # include <libc-config.h> #endif /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <fnmatch.h> #include <assert.h> #include <errno.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #if defined _LIBC || HAVE_ALLOCA # include <alloca.h> #endif #include <wchar.h> #include <wctype.h> #include <stddef.h> #include <stdbool.h> /* We need some of the locale data (the collation sequence information) but there is no interface to get this information in general. Therefore we support a correct implementation only in glibc. */ #ifdef _LIBC # include "../locale/localeinfo.h" # include "../locale/coll-lookup.h" # include <shlib-compat.h> # define CONCAT(a,b) __CONCAT(a,b) # define btowc __btowc # define iswctype __iswctype # define mbsrtowcs __mbsrtowcs # define mempcpy __mempcpy # define strnlen __strnlen # define towlower __towlower # define wcscat __wcscat # define wcslen __wcslen # define wctype __wctype # define wmemchr __wmemchr # define wmempcpy __wmempcpy # define fnmatch __fnmatch extern int fnmatch (const char *pattern, const char *string, int flags); #endif #ifdef _LIBC # if __GNUC__ >= 7 # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #else # include "attribute.h" #endif #include <intprops.h> #include <flexmember.h> #ifdef _LIBC typedef ptrdiff_t idx_t; #else # include "idx.h" #endif /* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ #define NO_LEADING_PERIOD(flags) \ ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) #ifndef _LIBC # if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. */ # define __libc_use_alloca(n) ((n) < 4032) # else /* Just use malloc. */ # define __libc_use_alloca(n) false # undef alloca # define alloca(n) malloc (n) # endif # define alloca_account(size, avar) ((avar) += (size), alloca (size)) #endif /* Provide support for user-defined character classes, based on the functions from ISO C 90 amendment 1. */ #ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX #else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ # define CHAR_CLASS_MAX_LENGTH 256 #endif #define IS_CHAR_CLASS(string) wctype (string) /* Avoid depending on library functions or files whose names are inconsistent. */ /* Global variable. */ static int posixly_correct; /* Note that this evaluates C many times. */ #define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) #define CHAR char #define UCHAR unsigned char #define INT int #define FCT internal_fnmatch #define EXT ext_match #define END end_pattern #define STRUCT fnmatch_struct #define L_(CS) CS #define BTOWC(C) btowc (C) #define STRLEN(S) strlen (S) #define STRCAT(D, S) strcat (D, S) #define MEMPCPY(D, S, N) mempcpy (D, S, N) #define MEMCHR(S, C, N) memchr (S, C, N) #define WIDE_CHAR_VERSION 0 #ifdef _LIBC # include <locale/weight.h> # define FINDIDX findidx #endif #include "fnmatch_loop.c" #define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) #define CHAR wchar_t #define UCHAR wint_t #define INT wint_t #define FCT internal_fnwmatch #define EXT ext_wmatch #define END end_wpattern #define L_(CS) L##CS #define BTOWC(C) (C) #define STRLEN(S) wcslen (S) #define STRCAT(D, S) wcscat (D, S) #define MEMPCPY(D, S, N) wmempcpy (D, S, N) #define MEMCHR(S, C, N) wmemchr (S, C, N) #define WIDE_CHAR_VERSION 1 #ifdef _LIBC /* Change the name the header defines so it doesn't conflict with the <locale/weight.h> version included above. */ # define findidx findidxwc # include <locale/weightwc.h> # undef findidx # define FINDIDX findidxwc #endif #undef IS_CHAR_CLASS /* We have to convert the wide character string in a multibyte string. But we know that the character class names consist of alphanumeric characters from the portable character set, and since the wide character encoding for a member of the portable character set is the same code point as its single-byte encoding, we can use a simplified method to convert the string to a multibyte character string. */ static wctype_t is_char_class (const wchar_t *wcs) { char s[CHAR_CLASS_MAX_LENGTH + 1]; char *cp = s; do { /* Test for a printable character from the portable character set. */ #ifdef _LIBC if (*wcs < 0x20 || *wcs > 0x7e || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) return (wctype_t) 0; #else switch (*wcs) { case L' ': case L'!': case L'"': case L'#': case L'%': case L'&': case L'\'': case L'(': case L')': case L'*': case L'+': case L',': case L'-': case L'.': case L'/': case L'0': case L'1': case L'2': case L'3': case L'4': case L'5': case L'6': case L'7': case L'8': case L'9': case L':': case L';': case L'<': case L'=': case L'>': case L'?': case L'A': case L'B': case L'C': case L'D': case L'E': case L'F': case L'G': case L'H': case L'I': case L'J': case L'K': case L'L': case L'M': case L'N': case L'O': case L'P': case L'Q': case L'R': case L'S': case L'T': case L'U': case L'V': case L'W': case L'X': case L'Y': case L'Z': case L'[': case L'\\': case L']': case L'^': case L'_': case L'a': case L'b': case L'c': case L'd': case L'e': case L'f': case L'g': case L'h': case L'i': case L'j': case L'k': case L'l': case L'm': case L'n': case L'o': case L'p': case L'q': case L'r': case L's': case L't': case L'u': case L'v': case L'w': case L'x': case L'y': case L'z': case L'{': case L'|': case L'}': case L'~': break; default: return (wctype_t) 0; } #endif /* Avoid overrunning the buffer. */ if (cp == s + CHAR_CLASS_MAX_LENGTH) return (wctype_t) 0; *cp++ = (char) *wcs++; } while (*wcs != L'\0'); *cp = '\0'; return wctype (s); } #define IS_CHAR_CLASS(string) is_char_class (string) #include "fnmatch_loop.c" int fnmatch (const char *pattern, const char *string, int flags) { if (__glibc_unlikely (MB_CUR_MAX != 1)) { mbstate_t ps; size_t n; const char *p; wchar_t *wpattern_malloc = NULL; wchar_t *wpattern; wchar_t *wstring_malloc = NULL; wchar_t *wstring; size_t alloca_used = 0; /* Convert the strings into wide characters. */ memset (&ps, '\0', sizeof (ps)); p = pattern; n = strnlen (pattern, 1024); if (__glibc_likely (n < 1024)) { wpattern = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), alloca_used); n = mbsrtowcs (wpattern, &p, n + 1, &ps); if (__glibc_unlikely (n == (size_t) -1)) /* Something wrong. XXX Do we have to set 'errno' to something which mbsrtows hasn't already done? */ return -1; if (p) { memset (&ps, '\0', sizeof (ps)); goto prepare_wpattern; } } else { prepare_wpattern: n = mbsrtowcs (NULL, &pattern, 0, &ps); if (__glibc_unlikely (n == (size_t) -1)) /* Something wrong. XXX Do we have to set 'errno' to something which mbsrtows hasn't already done? */ return -1; if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t))) { __set_errno (ENOMEM); return -2; } wpattern_malloc = wpattern = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); assert (mbsinit (&ps)); if (wpattern == NULL) return -2; (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); } assert (mbsinit (&ps)); n = strnlen (string, 1024); p = string; if (__glibc_likely (n < 1024)) { wstring = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), alloca_used); n = mbsrtowcs (wstring, &p, n + 1, &ps); if (__glibc_unlikely (n == (size_t) -1)) { /* Something wrong. XXX Do we have to set 'errno' to something which mbsrtows hasn't already done? */ free_return: free (wpattern_malloc); return -1; } if (p) { memset (&ps, '\0', sizeof (ps)); goto prepare_wstring; } } else { prepare_wstring: n = mbsrtowcs (NULL, &string, 0, &ps); if (__glibc_unlikely (n == (size_t) -1)) /* Something wrong. XXX Do we have to set 'errno' to something which mbsrtows hasn't already done? */ goto free_return; if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t))) { free (wpattern_malloc); __set_errno (ENOMEM); return -2; } wstring_malloc = wstring = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); if (wstring == NULL) { free (wpattern_malloc); return -2; } assert (mbsinit (&ps)); (void) mbsrtowcs (wstring, &string, n + 1, &ps); } int res = internal_fnwmatch (wpattern, wstring, wstring + n, flags & FNM_PERIOD, flags, NULL, alloca_used); free (wstring_malloc); free (wpattern_malloc); return res; } return internal_fnmatch (pattern, string, string + strlen (string), flags & FNM_PERIOD, flags, NULL, 0); } #undef fnmatch versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) strong_alias (__fnmatch, __fnmatch_old) compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); #endif libc_hidden_ver (__fnmatch, fnmatch) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fnmatch.in.h������������������������������������������������������������0000664�0000000�0000000�00000007504�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <fnmatch.h>. Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2021 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@_FNMATCH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_FNMATCH_H@ && !@REPLACE_FNMATCH@ # @INCLUDE_NEXT@ @NEXT_FNMATCH_H@ #endif #ifndef _@GUARD_PREFIX@_FNMATCH_H #define _@GUARD_PREFIX@_FNMATCH_H /* 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. */ #if !@HAVE_FNMATCH_H@ || @REPLACE_FNMATCH@ /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in <unistd.h>. */ #undef FNM_PATHNAME #undef FNM_NOESCAPE #undef FNM_PERIOD /* Bits set in the FLAGS argument to 'fnmatch'. */ #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match '/'. */ #define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ #define FNM_PERIOD (1 << 2) /* Leading '.' is matched only explicitly. */ #if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE # define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ # define FNM_LEADING_DIR (1 << 3) /* Ignore '/...' after a match. */ # define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ # define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ #endif /* Value returned by 'fnmatch' if STRING does not match PATTERN. */ #define FNM_NOMATCH 1 /* This value is returned if the implementation does not support 'fnmatch'. Since this is not the case here it will never be returned but the conformance test suites still require the symbol to be defined. */ #ifdef _XOPEN_SOURCE # define FNM_NOSYS (-1) #endif #endif #if @GNULIB_FNMATCH@ /* Match NAME against the file name pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ # if @REPLACE_FNMATCH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fnmatch rpl_fnmatch # endif _GL_FUNCDECL_RPL (fnmatch, int, (const char *pattern, const char *name, int flags) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fnmatch, int, (const char *pattern, const char *name, int flags)); # else # if !@HAVE_FNMATCH@ _GL_FUNCDECL_SYS (fnmatch, int, (const char *pattern, const char *name, int flags) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (fnmatch, int, (const char *pattern, const char *name, int flags)); # endif # if !GNULIB_FNMATCH_GNU && __GLIBC__ >= 2 _GL_CXXALIASWARN (fnmatch); # endif #elif defined GNULIB_POSIXCHECK # undef fnmatch # if HAVE_RAW_DECL_FNMATCH _GL_WARN_ON_USE (fnmatch, "fnmatch does not portably work - " "use gnulib module fnmatch for portability or gnulib module fnmatch-gnu for a glibc compatible implementation"); # endif #endif #endif /* _@GUARD_PREFIX@_FNMATCH_H */ #endif /* _@GUARD_PREFIX@_FNMATCH_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fnmatch_loop.c����������������������������������������������������������0000664�0000000�0000000�00000131260�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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/>. */ #ifdef _LIBC # include <stdint.h> #endif struct STRUCT { const CHAR *pattern; const CHAR *string; bool no_leading_period; }; /* Match STRING against the file name pattern PATTERN, returning zero if it matches, nonzero if not. */ static int FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags, struct STRUCT *ends, size_t alloca_used); static int EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags, size_t alloca_used); static const CHAR *END (const CHAR *patternp); static int FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags, struct STRUCT *ends, size_t alloca_used) { const CHAR *p = pattern, *n = string; UCHAR c; #ifdef _LIBC # if WIDE_CHAR_VERSION const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); # else const UCHAR *collseq = (const UCHAR *) _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB); # endif #endif while ((c = *p++) != L_('\0')) { bool new_no_leading_period = false; c = FOLD (c); switch (c) { case L_('?'): if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { int res = EXT (c, p, n, string_end, no_leading_period, flags, alloca_used); if (res != -1) return res; } if (n == string_end) return FNM_NOMATCH; else if (*n == L_('/') && (flags & FNM_FILE_NAME)) return FNM_NOMATCH; else if (*n == L_('.') && no_leading_period) return FNM_NOMATCH; break; case L_('\\'): if (!(flags & FNM_NOESCAPE)) { c = *p++; if (c == L_('\0')) /* Trailing \ loses. */ return FNM_NOMATCH; c = FOLD (c); } if (n == string_end || FOLD ((UCHAR) *n) != c) return FNM_NOMATCH; break; case L_('*'): if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { int res = EXT (c, p, n, string_end, no_leading_period, flags, alloca_used); if (res != -1) return res; } else if (ends != NULL) { ends->pattern = p - 1; ends->string = n; ends->no_leading_period = no_leading_period; return 0; } if (n != string_end && *n == L_('.') && no_leading_period) return FNM_NOMATCH; for (c = *p++; c == L_('?') || c == L_('*'); c = *p++) { if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0) { const CHAR *endp = END (p); if (endp != p) { /* This is a pattern. Skip over it. */ p = endp; continue; } } if (c == L_('?')) { /* A ? needs to match one character. */ if (n == string_end) /* There isn't another character; no match. */ return FNM_NOMATCH; else if (*n == L_('/') && __glibc_unlikely (flags & FNM_FILE_NAME)) /* A slash does not match a wildcard under FNM_FILE_NAME. */ return FNM_NOMATCH; else /* One character of the string is consumed in matching this ? wildcard, so *??? won't match if there are less than three characters. */ ++n; } } if (c == L_('\0')) /* The wildcard(s) is/are the last element of the pattern. If the name is a file name and contains another slash this means it cannot match, unless the FNM_LEADING_DIR flag is set. */ { int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH; if (flags & FNM_FILE_NAME) { if (flags & FNM_LEADING_DIR) result = 0; else { if (MEMCHR (n, L_('/'), string_end - n) == NULL) result = 0; } } return result; } else { const CHAR *endp; struct STRUCT end; end.pattern = NULL; endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'), string_end - n); if (endp == NULL) endp = string_end; if (c == L_('[') || (__glibc_unlikely (flags & FNM_EXTMATCH) && (c == L_('@') || c == L_('+') || c == L_('!')) && *p == L_('('))) { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); for (--p; n < endp; ++n, no_leading_period = false) if (FCT (p, n, string_end, no_leading_period, flags2, &end, alloca_used) == 0) goto found; } else if (c == L_('/') && (flags & FNM_FILE_NAME)) { while (n < string_end && *n != L_('/')) ++n; if (n < string_end && *n == L_('/') && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags, NULL, alloca_used) == 0)) return 0; } else { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); if (c == L_('\\') && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); for (--p; n < endp; ++n, no_leading_period = false) if (FOLD ((UCHAR) *n) == c && (FCT (p, n, string_end, no_leading_period, flags2, &end, alloca_used) == 0)) { found: if (end.pattern == NULL) return 0; break; } if (end.pattern != NULL) { p = end.pattern; n = end.string; no_leading_period = end.no_leading_period; continue; } } } /* If we come here no match is possible with the wildcard. */ return FNM_NOMATCH; case L_('['): { /* Nonzero if the sense of the character class is inverted. */ const CHAR *p_init = p; const CHAR *n_init = n; bool not; CHAR cold; UCHAR fn; if (posixly_correct == 0) posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; if (n == string_end) return FNM_NOMATCH; if (*n == L_('.') && no_leading_period) return FNM_NOMATCH; if (*n == L_('/') && (flags & FNM_FILE_NAME)) /* '/' cannot be matched. */ return FNM_NOMATCH; not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^'))); if (not) ++p; fn = FOLD ((UCHAR) *n); c = *p++; for (;;) { if (!(flags & FNM_NOESCAPE) && c == L_('\\')) { if (*p == L_('\0')) return FNM_NOMATCH; c = FOLD ((UCHAR) *p); ++p; goto normal_bracket; } else if (c == L_('[') && *p == L_(':')) { /* Leave room for the null. */ CHAR str[CHAR_CLASS_MAX_LENGTH + 1]; size_t c1 = 0; wctype_t wt; const CHAR *startp = p; for (;;) { if (c1 == CHAR_CLASS_MAX_LENGTH) /* The name is too long and therefore the pattern is ill-formed. */ return FNM_NOMATCH; c = *++p; if (c == L_(':') && p[1] == L_(']')) { p += 2; break; } if (c < L_('a') || c >= L_('z')) { /* This cannot possibly be a character class name. Match it as a normal range. */ p = startp; c = L_('['); goto normal_bracket; } str[c1++] = c; } str[c1] = L_('\0'); wt = IS_CHAR_CLASS (str); if (wt == 0) /* Invalid character class name. */ return FNM_NOMATCH; #if defined _LIBC && ! WIDE_CHAR_VERSION /* The following code is glibc specific but does there a good job in speeding up the code since we can avoid the btowc() call. */ if (_ISCTYPE ((UCHAR) *n, wt)) goto matched; #else if (iswctype (BTOWC ((UCHAR) *n), wt)) goto matched; #endif c = *p++; } #ifdef _LIBC else if (c == L_('[') && *p == L_('=')) { /* It's important that STR be a scalar variable rather than a one-element array, because GCC (at least 4.9.2 -O2 on x86-64) can be confused by the array and diagnose a "used initialized" in a dead branch in the findidx function. */ UCHAR str; uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); const CHAR *startp = p; c = *++p; if (c == L_('\0')) { p = startp; c = L_('['); goto normal_bracket; } str = c; c = *++p; if (c != L_('=') || p[1] != L_(']')) { p = startp; c = L_('['); goto normal_bracket; } p += 2; if (nrules == 0) { if ((UCHAR) *n == str) goto matched; } else { const int32_t *table; # if WIDE_CHAR_VERSION const int32_t *weights; const wint_t *extra; # else const unsigned char *weights; const unsigned char *extra; # endif const int32_t *indirect; int32_t idx; const UCHAR *cp = (const UCHAR *) &str; # if WIDE_CHAR_VERSION table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); weights = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); extra = (const wint_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); # else table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); # endif idx = FINDIDX (table, indirect, extra, &cp, 1); if (idx != 0) { /* We found a table entry. Now see whether the character we are currently at has the same equivalence class value. */ int len = weights[idx & 0xffffff]; int32_t idx2; const UCHAR *np = (const UCHAR *) n; idx2 = FINDIDX (table, indirect, extra, &np, string_end - n); if (idx2 != 0 && (idx >> 24) == (idx2 >> 24) && len == weights[idx2 & 0xffffff]) { int cnt = 0; idx &= 0xffffff; idx2 &= 0xffffff; while (cnt < len && (weights[idx + 1 + cnt] == weights[idx2 + 1 + cnt])) ++cnt; if (cnt == len) goto matched; } } } c = *p++; } #endif else if (c == L_('\0')) { /* [ unterminated, treat as normal character. */ p = p_init; n = n_init; c = L_('['); goto normal_match; } else { bool is_range = false; #ifdef _LIBC bool is_seqval = false; if (c == L_('[') && *p == L_('.')) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); const CHAR *startp = p; size_t c1 = 0; while (1) { c = *++p; if (c == L_('.') && p[1] == L_(']')) { p += 2; break; } if (c == '\0') return FNM_NOMATCH; ++c1; } /* We have to handling the symbols differently in ranges since then the collation sequence is important. */ is_range = *p == L_('-') && p[1] != L_('\0'); if (nrules == 0) { /* There are no names defined in the collation data. Therefore we only accept the trivial names consisting of the character itself. */ if (c1 != 1) return FNM_NOMATCH; if (!is_range && *n == startp[1]) goto matched; cold = startp[1]; c = *p++; } else { int32_t table_size; const int32_t *symb_table; const unsigned char *extra; int32_t idx; int32_t elem; # if WIDE_CHAR_VERSION CHAR *wextra; # endif table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { idx = symb_table[2 * elem + 1]; /* Skip the name of collating element. */ idx += 1 + extra[idx]; # if WIDE_CHAR_VERSION /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; wextra = (CHAR *) &extra[idx + 4]; if (/* Compare the length of the sequence. */ c1 == wextra[0] /* Compare the wide char sequence. */ && (__wmemcmp (startp + 1, &wextra[1], c1) == 0)) /* Yep, this is the entry. */ break; # else if (/* Compare the length of the sequence. */ c1 == extra[idx] /* Compare the byte sequence. */ && memcmp (startp + 1, &extra[idx + 1], c1) == 0) /* Yep, this is the entry. */ break; # endif } if (elem < table_size) { /* Compare the byte sequence but only if this is not part of a range. */ if (! is_range # if WIDE_CHAR_VERSION && __wmemcmp (n, &wextra[1], c1) == 0 # else && memcmp (n, &extra[idx + 1], c1) == 0 # endif ) { n += c1 - 1; goto matched; } /* Get the collation sequence value. */ is_seqval = true; # if WIDE_CHAR_VERSION cold = wextra[1 + wextra[0]]; # else idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; cold = *((int32_t *) &extra[idx]); # endif c = *p++; } else if (c1 == 1) { /* No valid character. Match it as a single byte. */ if (!is_range && *n == startp[1]) goto matched; cold = startp[1]; c = *p++; } else return FNM_NOMATCH; } } else #endif { c = FOLD (c); normal_bracket: /* We have to handling the symbols differently in ranges since then the collation sequence is important. */ is_range = (*p == L_('-') && p[1] != L_('\0') && p[1] != L_(']')); if (!is_range && c == fn) goto matched; #if _LIBC /* This is needed if we goto normal_bracket; from outside of is_seqval's scope. */ is_seqval = false; #endif cold = c; c = *p++; } if (c == L_('-') && *p != L_(']')) { #if _LIBC /* We have to find the collation sequence value for C. Collation sequence is nothing we can regularly access. The sequence value is defined by the order in which the definitions of the collation values for the various characters appear in the source file. A strange concept, nowhere documented. */ uint32_t fcollseq; uint32_t lcollseq; UCHAR cend = *p++; # if WIDE_CHAR_VERSION /* Search in the 'names' array for the characters. */ fcollseq = __collseq_table_lookup (collseq, fn); if (fcollseq == ~((uint32_t) 0)) /* XXX We don't know anything about the character we are supposed to match. This means we are failing. */ goto range_not_matched; if (is_seqval) lcollseq = cold; else lcollseq = __collseq_table_lookup (collseq, cold); # else fcollseq = collseq[fn]; lcollseq = is_seqval ? cold : collseq[(UCHAR) cold]; # endif is_seqval = false; if (cend == L_('[') && *p == L_('.')) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); const CHAR *startp = p; size_t c1 = 0; while (1) { c = *++p; if (c == L_('.') && p[1] == L_(']')) { p += 2; break; } if (c == '\0') return FNM_NOMATCH; ++c1; } if (nrules == 0) { /* There are no names defined in the collation data. Therefore we only accept the trivial names consisting of the character itself. */ if (c1 != 1) return FNM_NOMATCH; cend = startp[1]; } else { int32_t table_size; const int32_t *symb_table; const unsigned char *extra; int32_t idx; int32_t elem; # if WIDE_CHAR_VERSION CHAR *wextra; # endif table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { idx = symb_table[2 * elem + 1]; /* Skip the name of collating element. */ idx += 1 + extra[idx]; # if WIDE_CHAR_VERSION /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; wextra = (CHAR *) &extra[idx + 4]; if (/* Compare the length of the sequence. */ c1 == wextra[0] /* Compare the wide char sequence. */ && (__wmemcmp (startp + 1, &wextra[1], c1) == 0)) /* Yep, this is the entry. */ break; # else if (/* Compare the length of the sequence. */ c1 == extra[idx] /* Compare the byte sequence. */ && memcmp (startp + 1, &extra[idx + 1], c1) == 0) /* Yep, this is the entry. */ break; # endif } if (elem < table_size) { /* Get the collation sequence value. */ is_seqval = true; # if WIDE_CHAR_VERSION cend = wextra[1 + wextra[0]]; # else idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; cend = *((int32_t *) &extra[idx]); # endif } else if (c1 == 1) { cend = startp[1]; c = *p++; } else return FNM_NOMATCH; } } else { if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) cend = *p++; if (cend == L_('\0')) return FNM_NOMATCH; cend = FOLD (cend); } /* XXX It is not entirely clear to me how to handle characters which are not mentioned in the collation specification. */ if ( # if WIDE_CHAR_VERSION lcollseq == 0xffffffff || # endif lcollseq <= fcollseq) { /* We have to look at the upper bound. */ uint32_t hcollseq; if (is_seqval) hcollseq = cend; else { # if WIDE_CHAR_VERSION hcollseq = __collseq_table_lookup (collseq, cend); if (hcollseq == ~((uint32_t) 0)) { /* Hum, no information about the upper bound. The matching succeeds if the lower bound is matched exactly. */ if (lcollseq != fcollseq) goto range_not_matched; goto matched; } # else hcollseq = collseq[cend]; # endif } if (lcollseq <= hcollseq && fcollseq <= hcollseq) goto matched; } # if WIDE_CHAR_VERSION range_not_matched: # endif #else /* We use a boring value comparison of the character values. This is better than comparing using 'strcoll' since the latter would have surprising and sometimes fatal consequences. */ UCHAR cend = *p++; if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) cend = *p++; if (cend == L_('\0')) return FNM_NOMATCH; /* It is a range. */ if ((UCHAR) cold <= fn && fn <= cend) goto matched; #endif c = *p++; } } if (c == L_(']')) break; } if (!not) return FNM_NOMATCH; break; matched: /* Skip the rest of the [...] that already matched. */ while ((c = *p++) != L_(']')) { if (c == L_('\0')) /* [... (unterminated) loses. */ return FNM_NOMATCH; if (!(flags & FNM_NOESCAPE) && c == L_('\\')) { if (*p == L_('\0')) return FNM_NOMATCH; /* XXX 1003.2d11 is unclear if this is right. */ ++p; } else if (c == L_('[') && *p == L_(':')) { int c1 = 0; const CHAR *startp = p; while (1) { c = *++p; if (++c1 == CHAR_CLASS_MAX_LENGTH) return FNM_NOMATCH; if (*p == L_(':') && p[1] == L_(']')) break; if (c < L_('a') || c >= L_('z')) { p = startp - 2; break; } } p += 2; } else if (c == L_('[') && *p == L_('=')) { c = *++p; if (c == L_('\0')) return FNM_NOMATCH; c = *++p; if (c != L_('=') || p[1] != L_(']')) return FNM_NOMATCH; p += 2; } else if (c == L_('[') && *p == L_('.')) { while (1) { c = *++p; if (c == L_('\0')) return FNM_NOMATCH; if (c == L_('.') && p[1] == L_(']')) break; } p += 2; } } if (not) return FNM_NOMATCH; } break; case L_('+'): case L_('@'): case L_('!'): if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { int res = EXT (c, p, n, string_end, no_leading_period, flags, alloca_used); if (res != -1) return res; } goto normal_match; case L_('/'): if (NO_LEADING_PERIOD (flags)) { if (n == string_end || c != (UCHAR) *n) return FNM_NOMATCH; new_no_leading_period = true; break; } FALLTHROUGH; default: normal_match: if (n == string_end || c != FOLD ((UCHAR) *n)) return FNM_NOMATCH; } no_leading_period = new_no_leading_period; ++n; } if (n == string_end) return 0; if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/')) /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ return 0; return FNM_NOMATCH; } static const CHAR * END (const CHAR *pattern) { const CHAR *p = pattern; while (1) if (*++p == L_('\0')) /* This is an invalid pattern. */ return pattern; else if (*p == L_('[')) { /* Handle brackets special. */ if (posixly_correct == 0) posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; /* Skip the not sign. We have to recognize it because of a possibly following ']'. */ if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) ++p; /* A leading ']' is recognized as such. */ if (*p == L_(']')) ++p; /* Skip over all characters of the list. */ while (*p != L_(']')) if (*p++ == L_('\0')) /* This is no valid pattern. */ return pattern; } else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') || *p == L_('!')) && p[1] == L_('(')) { p = END (p + 1); if (*p == L_('\0')) /* This is an invalid pattern. */ return pattern; } else if (*p == L_(')')) break; return p + 1; } static int EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags, size_t alloca_used) { const CHAR *startp; ptrdiff_t level; struct patternlist { struct patternlist *next; CHAR malloced; CHAR str __flexarr; } *list = NULL; struct patternlist **lastp = &list; size_t pattern_len = STRLEN (pattern); bool any_malloced = false; const CHAR *p; const CHAR *rs; int retval = 0; /* Parse the pattern. Store the individual parts in the list. */ level = 0; for (startp = p = pattern + 1; level >= 0; ++p) if (*p == L_('\0')) { /* This is an invalid pattern. */ retval = -1; goto out; } else if (*p == L_('[')) { /* Handle brackets special. */ if (posixly_correct == 0) posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; /* Skip the not sign. We have to recognize it because of a possibly following ']'. */ if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) ++p; /* A leading ']' is recognized as such. */ if (*p == L_(']')) ++p; /* Skip over all characters of the list. */ while (*p != L_(']')) if (*p++ == L_('\0')) { /* This is no valid pattern. */ retval = -1; goto out; } } else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') || *p == L_('!')) && p[1] == L_('(')) /* Remember the nesting level. */ ++level; else if (*p == L_(')')) { if (level-- == 0) { /* This means we found the end of the pattern. */ #define NEW_PATTERN \ struct patternlist *newp; \ size_t plen = (opt == L_('?') || opt == L_('@') \ ? pattern_len : (p - startp + 1UL)); \ idx_t slen = FLEXSIZEOF (struct patternlist, str, 0); \ idx_t new_used = alloca_used + slen; \ idx_t plensize; \ if (INT_MULTIPLY_WRAPV (plen, sizeof (CHAR), &plensize) \ || INT_ADD_WRAPV (new_used, plensize, &new_used)) \ { \ retval = -2; \ goto out; \ } \ slen += plensize; \ bool malloced = ! __libc_use_alloca (new_used); \ if (__glibc_unlikely (malloced)) \ { \ newp = malloc (slen); \ if (newp == NULL) \ { \ retval = -2; \ goto out; \ } \ any_malloced = true; \ } \ else \ newp = alloca_account (slen, alloca_used); \ newp->next = NULL; \ newp->malloced = malloced; \ *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ *lastp = newp; \ lastp = &newp->next NEW_PATTERN; } } else if (*p == L_('|')) { if (level == 0) { NEW_PATTERN; startp = p + 1; } } assert (list != NULL); assert (p[-1] == L_(')')); #undef NEW_PATTERN switch (opt) { case L_('*'): if (FCT (p, string, string_end, no_leading_period, flags, NULL, alloca_used) == 0) goto success; FALLTHROUGH; case L_('+'): do { for (rs = string; rs <= string_end; ++rs) /* First match the prefix with the current pattern with the current pattern. */ if (FCT (list->str, string, rs, no_leading_period, flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0 /* This was successful. Now match the rest with the rest of the pattern. */ && (FCT (p, rs, string_end, rs == string ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0 /* This didn't work. Try the whole pattern. */ || (rs != string && FCT (pattern - 1, rs, string_end, rs == string ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0))) /* It worked. Signal success. */ goto success; } while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ retval = FNM_NOMATCH; break; case L_('?'): if (FCT (p, string, string_end, no_leading_period, flags, NULL, alloca_used) == 0) goto success; FALLTHROUGH; case L_('@'): do /* I cannot believe it but 'strcat' is actually acceptable here. Match the entire string with the prefix from the pattern list and the rest of the pattern following the pattern list. */ if (FCT (STRCAT (list->str, p), string, string_end, no_leading_period, flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0) /* It worked. Signal success. */ goto success; while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ retval = FNM_NOMATCH; break; case L_('!'): for (rs = string; rs <= string_end; ++rs) { struct patternlist *runp; for (runp = list; runp != NULL; runp = runp->next) if (FCT (runp->str, string, rs, no_leading_period, flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0) break; /* If none of the patterns matched see whether the rest does. */ if (runp == NULL && (FCT (p, rs, string_end, rs == string ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0)) /* This is successful. */ goto success; } /* None of the patterns together with the rest of the pattern lead to a match. */ retval = FNM_NOMATCH; break; default: assert (! "Invalid extended matching operator"); retval = -1; break; } success: out: if (any_malloced) while (list != NULL) { struct patternlist *old = list; list = list->next; if (old->malloced) free (old); } return retval; } #undef FOLD #undef CHAR #undef UCHAR #undef INT #undef FCT #undef EXT #undef END #undef STRUCT #undef MEMPCPY #undef MEMCHR #undef STRLEN #undef STRCAT #undef L_ #undef BTOWC #undef WIDE_CHAR_VERSION #undef FINDIDX ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fopen-safer.c�����������������������������������������������������������0000664�0000000�0000000�00000003077�14110572173�0017425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke fopen, but avoid some glitches. Copyright (C) 2001, 2004-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "stdio-safer.h" #include <errno.h> #include <unistd.h> #include "unistd-safer.h" /* Like fopen, but do not return stdin, stdout, or stderr. */ FILE * fopen_safer (char const *file, char const *mode) { FILE *fp = fopen (file, mode); if (fp) { int fd = fileno (fp); if (0 <= fd && fd <= STDERR_FILENO) { int f = dup_safer (fd); if (f < 0) { int e = errno; fclose (fp); errno = e; return NULL; } if (fclose (fp) != 0 || ! (fp = fdopen (f, mode))) { int e = errno; close (f); errno = e; return NULL; } } } return fp; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fopen.c�����������������������������������������������������������������0000664�0000000�0000000�00000014544�14110572173�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a file. Copyright (C) 2007-2021 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>, 2007. */ /* If the user's config.h happens to include <stdio.h>, let it include only the system's <stdio.h> here, so that orig_fopen doesn't recurse to rpl_fopen. */ #define _GL_ALREADY_INCLUDING_STDIO_H #include <config.h> /* Get the original definition of fopen. It might be defined as a macro. */ #include <stdio.h> #undef _GL_ALREADY_INCLUDING_STDIO_H static FILE * orig_fopen (const char *filename, const char *mode) { return fopen (filename, mode); } /* Specification. */ /* Write "stdio.h" here, not <stdio.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <stdio.h> above. */ #include "stdio.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> FILE * rpl_fopen (const char *filename, const char *mode) { int open_direction; int open_flags; #if GNULIB_FOPEN_GNU bool open_flags_gnu; # define BUF_SIZE 80 char fdopen_mode_buf[BUF_SIZE + 1]; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif /* Parse the mode. */ open_direction = 0; open_flags = 0; #if GNULIB_FOPEN_GNU open_flags_gnu = false; #endif { const char *p = mode; #if GNULIB_FOPEN_GNU char *q = fdopen_mode_buf; #endif for (; *p != '\0'; p++) { switch (*p) { case 'r': open_direction = O_RDONLY; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'w': open_direction = O_WRONLY; open_flags |= O_CREAT | O_TRUNC; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'a': open_direction = O_WRONLY; open_flags |= O_CREAT | O_APPEND; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'b': /* While it is non-standard, O_BINARY is guaranteed by gnulib <fcntl.h>. We can also assume that orig_fopen supports the 'b' flag. */ open_flags |= O_BINARY; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case '+': open_direction = O_RDWR; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; #if GNULIB_FOPEN_GNU case 'x': open_flags |= O_EXCL; open_flags_gnu = true; continue; case 'e': open_flags |= O_CLOEXEC; open_flags_gnu = true; continue; #endif default: break; } #if GNULIB_FOPEN_GNU /* The rest of the mode string can be a platform-dependent extension. Copy it unmodified. */ { size_t len = strlen (p); if (len > fdopen_mode_buf + BUF_SIZE - q) len = fdopen_mode_buf + BUF_SIZE - q; memcpy (q, p, len); q += len; } #endif break; } #if GNULIB_FOPEN_GNU *q = '\0'; #endif } #if FOPEN_TRAILING_SLASH_BUG /* Fail if the mode requires write access and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then if a mode that requires write access is specified, fopen() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then fopen() must fail since the file does not contain a '.' directory. */ { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { int fd; struct stat statbuf; FILE *fp; if (open_direction != O_RDONLY) { errno = EISDIR; return NULL; } fd = open (filename, open_direction | open_flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd < 0) return NULL; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return NULL; } # if GNULIB_FOPEN_GNU fp = fdopen (fd, fdopen_mode_buf); # else fp = fdopen (fd, mode); # endif if (fp == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } } #endif #if GNULIB_FOPEN_GNU if (open_flags_gnu) { int fd; FILE *fp; fd = open (filename, open_direction | open_flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd < 0) return NULL; fp = fdopen (fd, fdopen_mode_buf); if (fp == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } #endif return orig_fopen (filename, mode); } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/forkpty.c���������������������������������������������������������������0000664�0000000�0000000�00000003604�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fork a child process attached to the slave of a pseudo-terminal. Copyright (C) 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <pty.h> #if HAVE_FORKPTY /* Provide a wrapper with the prototype of glibc-2.8 and newer. */ # undef forkpty int rpl_forkpty (int *amaster, char *name, struct termios const *termp, struct winsize const *winp) { /* Cast away const, for implementations with weaker prototypes. */ return forkpty (amaster, name, (struct termios *) termp, (struct winsize *) winp); } #else /* AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, mingw */ # include <pty.h> # include <unistd.h> extern int login_tty (int slave_fd); int forkpty (int *amaster, char *name, const struct termios *termp, const struct winsize *winp) { int master, slave, pid; if (openpty (&master, &slave, name, termp, winp) == -1) return -1; switch (pid = fork ()) { case -1: close (master); close (slave); return -1; case 0: /* Child. */ close (master); if (login_tty (slave)) _exit (1); return 0; default: /* Parent. */ *amaster = master; close (slave); return pid; } } #endif ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fpending.c��������������������������������������������������������������0000664�0000000�0000000�00000005126�14110572173�0017007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fpending.c -- return the number of pending output bytes on a stream Copyright (C) 2000, 2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "fpending.h" #include "stdio-impl.h" /* This file is not used on systems that already have the __fpending function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23. */ /* Return the number of pending (aka buffered, unflushed) bytes on the stream, FP, that is open for writing. */ size_t __fpending (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return fp->_IO_write_ptr - fp->_IO_write_base; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return fp->_p - fp->_bf._base; #elif defined __EMX__ /* emx+gcc */ return fp->_ptr - fp->_buffer; #elif defined __minix /* Minix */ return fp_->_ptr - fp_->_buf; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0); #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0); #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0); #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__bufp - fp->__buffer; #elif defined EPLAN9 /* Plan9 */ return fp->wp - fp->buf; #else # error "Please port gnulib fpending.c to your platform!" return 1; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fpending.h��������������������������������������������������������������0000664�0000000�0000000�00000001676�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declare __fpending. Copyright (C) 2000, 2003, 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <stddef.h> #include <stdio.h> #if HAVE_STDIO_EXT_H # include <stdio_ext.h> #endif #if !HAVE_DECL___FPENDING size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE; #endif ������������������������������������������������������������������gnulib-20210822~d383792/lib/fprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000003254�14110572173�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "fseterr.h" #include "vasnprintf.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int fprintf (FILE *fp, const char *format, ...) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); va_list args; va_start (args, format); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fprintftime.c�����������������������������������������������������������0000664�0000000�0000000�00000001434�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate time strings directly to the output. Copyright (C) 2005-2021 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/>. */ #define FPRINTFTIME 1 #include "nstrftime.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fprintftime.h�����������������������������������������������������������0000664�0000000�0000000�00000002357�14110572173�0017554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate time strings directly to the output. */ /* Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <time.h> /* A cross between fprintf and nstrftime, that prints directly to the output stream, without the need for the potentially large buffer that nstrftime would require. Output to stream FP the result of formatting (according to the nstrftime format string, FMT) the time data, *TM, and the ZONE and NANOSECONDS values. */ size_t fprintftime (FILE *fp, char const *fmt, struct tm const *tm, timezone_t zone, int nanoseconds); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fpucw.h�����������������������������������������������������������������0000664�0000000�0000000�00000011365�14110572173�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manipulating the FPU control word. -*- coding: utf-8 -*- Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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 _FPUCW_H #define _FPUCW_H /* The i386 floating point hardware (the 387 compatible FPU, not the modern SSE/SSE2 hardware) has a controllable rounding precision. It is specified through the 'PC' bits in the FPU control word ('fctrl' register). (See the GNU libc i386 <fpu_control.h> header for details.) On some platforms, such as Linux or Solaris, the default precision setting is set to "extended precision". This means that 'long double' instructions operate correctly, but 'double' computations often produce slightly different results as on strictly IEEE 754 conforming systems. On some platforms, such as NetBSD, the default precision is set to "double precision". This means that 'long double' instructions will operate only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at least for the division of 'long double' numbers. The FPU control word is under control of the application, i.e. it is not required to be set either way by the ABI. (In fact, the i386 ABI https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 is not clear about it. But in any case, gcc treats the control word like a "preserved" register: it emits code that assumes that the control word is preserved across calls, and it restores the control word at the end of functions that modify it.) See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html for a good explanation. See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html some argumentation which setting should be the default. */ /* This header file provides the following facilities: fpucw_t integral type holding the value of 'fctrl' FPU_PC_MASK bit mask denoting the precision control FPU_PC_DOUBLE precision control for 53 bits mantissa FPU_PC_EXTENDED precision control for 64 bits mantissa GET_FPUCW () yields the current FPU control word SET_FPUCW (word) sets the FPU control word DECL_LONG_DOUBLE_ROUNDING variable declaration for BEGIN/END_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with 'long double' safe operation precision END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with 'long double' safe operation precision */ /* Inline assembler like this works only with GNU C and clang. */ #if (defined __i386__ || defined __x86_64__) && (defined __GNUC__ || defined __clang__) typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ # define FPU_PC_MASK 0x0300 # define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ # define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ # define GET_FPUCW() __extension__ \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) # define SET_FPUCW(word) __extension__ \ (void)({ fpucw_t _ncw = (word); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ }) # define DECL_LONG_DOUBLE_ROUNDING \ fpucw_t oldcw; # define BEGIN_LONG_DOUBLE_ROUNDING() \ (void)(oldcw = GET_FPUCW (), \ SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) # define END_LONG_DOUBLE_ROUNDING() \ SET_FPUCW (oldcw) #else typedef unsigned int fpucw_t; # define FPU_PC_MASK 0 # define FPU_PC_DOUBLE 0 # define FPU_PC_EXTENDED 0 # define GET_FPUCW() 0 # define SET_FPUCW(word) (void)(word) # define DECL_LONG_DOUBLE_ROUNDING # define BEGIN_LONG_DOUBLE_ROUNDING() # define END_LONG_DOUBLE_ROUNDING() #endif #endif /* _FPUCW_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fpurge.c����������������������������������������������������������������0000664�0000000�0000000�00000012130�14110572173�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Flushing buffers of a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif #endif #include <stdlib.h> #include "stdio-impl.h" int fpurge (FILE *fp) { #if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */ __fpurge (fp); /* The __fpurge function does not have a return value. */ return 0; #elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin >= 1.7 */ /* Call the system's fpurge function. */ # undef fpurge # if !HAVE_DECL_FPURGE extern int fpurge (FILE *); # endif int result = fpurge (fp); # if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if (result == 0) /* Correct the invariants that fpurge broke. <stdio.h> on BSD systems says: "The following always hold: if _flags & __SRD, _w is 0." If this invariant is not fulfilled and the stream is read-write but currently reading, subsequent putc or fputc calls will write directly into the buffer, although they shouldn't be allowed to. */ if ((fp_->_flags & __SRD) != 0) fp_->_w = 0; # endif return result; #else /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ # if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_IO_read_end = fp->_IO_read_ptr; fp->_IO_write_ptr = fp->_IO_write_base; /* Avoid memory leak when there is an active ungetc buffer. */ if (fp->_IO_save_base != NULL) { free (fp->_IO_save_base); fp->_IO_save_base = NULL; } return 0; # elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_p = fp_->_bf._base; fp_->_r = 0; fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ ? fp_->_bf._size : 0); /* Avoid memory leak when there is an active ungetc buffer. */ if (fp_ub._base != NULL) { if (fp_ub._base != fp_->_ubuf) free (fp_ub._base); fp_ub._base = NULL; } return 0; # elif defined __EMX__ /* emx+gcc */ fp->_ptr = fp->_buffer; fp->_rcount = 0; fp->_wcount = 0; fp->_ungetc_count = 0; return 0; # elif defined __minix /* Minix */ fp->_ptr = fp->_buf; if (fp->_ptr != NULL) fp->_count = 0; return 0; # elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_ptr = fp_->_base; if (fp_->_ptr != NULL) fp_->_cnt = 0; return 0; # elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS if (fp->__modeflags & __FLAG_WRITING) fp->__bufpos = fp->__bufstart; else if (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) fp->__bufpos = fp->__bufread; # endif return 0; # elif defined __QNX__ /* QNX */ fp->_Rback = fp->_Back + sizeof (fp->_Back); fp->_Rsave = NULL; if (fp->_Mode & 0x2000 /* _MWRITE */) /* fp->_Buf <= fp->_Next <= fp->_Wend */ fp->_Next = fp->_Buf; else /* fp->_Buf <= fp->_Next <= fp->_Rend */ fp->_Rend = fp->_Next; return 0; # elif defined __MINT__ /* Atari FreeMiNT */ if (fp->__pushed_back) { fp->__bufp = fp->__pushback_bufp; fp->__pushed_back = 0; } /* Preserve the current file position. */ if (fp->__target != -1) fp->__target += fp->__bufp - fp->__buffer; fp->__bufp = fp->__buffer; /* Nothing in the buffer, next getc is nontrivial. */ fp->__get_limit = fp->__bufp; /* Nothing in the buffer, next putc is nontrivial. */ fp->__put_limit = fp->__buffer; return 0; # elif defined EPLAN9 /* Plan9 */ fp->rp = fp->wp = fp->lp = fp->buf; return 0; # else # error "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib." # endif #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadable.c�������������������������������������������������������������0000664�0000000�0000000�00000005167�14110572173�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "freadable.h" #include "stdio-impl.h" #if defined EPLAN9 /* Plan9 */ # include <fcntl.h> #endif /* This file is not used on systems that have the __freadable function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc. */ bool freadable (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & _IO_NO_READS) == 0; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & (__SRW | __SRD)) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOREAD)) != 0; #elif defined __minix /* Minix */ return (fp->_flags & _IOREAD) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_flag & (_IORW | _IOREAD)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x1 /* _MOPENR */) != 0; #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__mode.__read; #elif defined EPLAN9 /* Plan9 */ int fd = fp->fd; if (fd >= 0) { int flags = fcntl (fd, F_GETFL, NULL); if (flags >= 0) { flags &= O_ACCMODE; return (flags == O_RDONLY || flags == O_RDWR); } } return 0; #else # error "Please port gnulib freadable.c to your platform! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadable.h�������������������������������������������������������������0000664�0000000�0000000�00000002663�14110572173�0017132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007, 2009-2021 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/>. */ #include <stdbool.h> #include <stdio.h> /* Return true if the stream STREAM supports reading, false if it supports only writing, i.e. if it was opened write-only or append-only. STREAM must not be wide-character oriented. The result doesn't change until the stream is closed or re-opened. */ #if HAVE___FREADABLE /* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # define freadable(stream) (__freadable (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool freadable (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif �����������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadahead.c������������������������������������������������������������0000664�0000000�0000000�00000007302�14110572173�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "freadahead.h" #include <stdlib.h> #include "stdio-impl.h" #if defined __DragonFly__ /* Defined in libc, but not declared in <stdio.h>. */ extern size_t __sreadahead (FILE *); #endif /* This file is not used on systems that have the __freadahead function, namely musl libc. */ size_t freadahead (FILE *fp) { #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ if (fp->_IO_write_ptr > fp->_IO_write_base) return 0; return (fp->_IO_read_end - fp->_IO_read_ptr) + (fp->_flags & _IO_IN_BACKUP ? fp->_IO_save_end - fp->_IO_save_base : 0); #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) return 0; # if defined __DragonFly__ return __sreadahead (fp); # else return fp_->_r + (HASUB (fp) ? fp_->_ur : 0); # endif #elif defined __EMX__ /* emx+gcc */ if ((fp->_flags & _IOWRT) != 0) return 0; /* Note: fp->_ungetc_count > 0 implies fp->_rcount <= 0, fp->_ungetc_count = 0 implies fp->_rcount >= 0. */ /* equivalent to (fp->_ungetc_count == 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount) */ return (fp->_rcount > 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount); #elif defined __minix /* Minix */ if ((fp_->_flags & _IOWRITING) != 0) return 0; return fp_->_count; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ if ((fp_->_flag & _IOWRT) != 0) return 0; return fp_->_cnt; #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS if (fp->__modeflags & __FLAG_WRITING) return 0; return (fp->__bufread - fp->__bufpos) + (fp->__modeflags & __FLAG_UNGOT ? 1 : 0); # else return 0; # endif #elif defined __QNX__ /* QNX */ if ((fp->_Mode & 0x2000 /* _MWRITE */) != 0) return 0; /* fp->_Buf <= fp->_Next <= fp->_Rend, and fp->_Rend may be overridden by fp->_Rsave. */ return ((fp->_Rsave ? fp->_Rsave : fp->_Rend) - fp->_Next) + (fp->_Mode & 0x4000 /* _MBYTE */ ? (fp->_Back + sizeof (fp->_Back)) - fp->_Rback : 0); #elif defined __MINT__ /* Atari FreeMiNT */ if (!fp->__mode.__read) return 0; return (fp->__pushed_back ? fp->__get_limit - fp->__pushback_bufp + 1 : fp->__get_limit - fp->__bufp); #elif defined EPLAN9 /* Plan9 */ if (fp->state == 4 /* WR */ || fp->rp >= fp->wp) return 0; return fp->wp - fp->rp; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ abort (); return 0; #else #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib." #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadahead.h������������������������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <stddef.h> #include <stdio.h> /* Assuming the stream STREAM is open for reading: Return the number of bytes waiting in the input buffer of STREAM. This includes both the bytes that have been read from the underlying input source and the bytes that have been pushed back through 'ungetc'. If this number is 0 and the stream is not currently writing, fflush (STREAM) is known to be a no-op. STREAM must not be wide-character oriented. */ #if HAVE___FREADAHEAD /* musl libc */ # include <stdio_ext.h> # define freadahead(stream) __freadahead (stream) #else # ifdef __cplusplus extern "C" { # endif extern size_t freadahead (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif �������������������������������������gnulib-20210822~d383792/lib/freading.c��������������������������������������������������������������0000664�0000000�0000000�00000006163�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "freading.h" #include "stdio-impl.h" /* Don't use glibc's __freading function in glibc < 2.7, see <https://sourceware.org/bugzilla/show_bug.cgi?id=4359> */ #if !(HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))) bool freading (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ # if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return ((fp->_flags & _IO_NO_WRITES) != 0 || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 && fp->_IO_read_base != NULL)); # elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & __SRD) != 0; # elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOREAD) != 0; # elif defined __minix /* Minix */ return (fp->_flags & _IOREADING) != 0; # elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ # if defined __sun /* Solaris */ return (fp_->_flag & _IOREAD) != 0 && (fp_->_flag & _IOWRT) == 0; # else return (fp_->_flag & _IOREAD) != 0; # endif # elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) != 0; # elif defined __QNX__ /* QNX */ return ((fp->_Mode & 0x2 /* _MOPENW */) == 0 || (fp->_Mode & 0x1000 /* _MREAD */) != 0); # elif defined __MINT__ /* Atari FreeMiNT */ if (!fp->__mode.__write) return 1; if (!fp->__mode.__read) return 0; # ifdef _IO_CURRENTLY_GETTING /* Flag added on 2009-02-28 */ return (fp->__flags & _IO_CURRENTLY_GETTING) != 0; # else return (fp->__buffer < fp->__get_limit /*|| fp->__bufp == fp->__put_limit ??*/); # endif # elif defined EPLAN9 /* Plan9 */ if (fp->state == 0 /* CLOSED */ || fp->state == 4 /* WR */) return 0; return (fp->state == 3 /* RD */ && (fp->bufl == 0 || fp->rp < fp->wp)); # else # error "Please port gnulib freading.c to your platform!" # endif } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freading.h��������������������������������������������������������������0000664�0000000�0000000�00000004016�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <stdbool.h> #include <stdio.h> /* Return true if the stream STREAM is opened read-only, or if the last operation on the stream was a read operation. Return false if the stream is opened write-only or append-only, or if it supports writing and there is no current read operation (such as fgetc). freading and fwriting will never both be true. If STREAM supports both reads and writes, then: - both freading and fwriting might be false when the stream is first opened, after read encounters EOF, or after fflush, - freading might be false or true and fwriting might be false after repositioning (such as fseek, fsetpos, or rewind), depending on the underlying implementation. STREAM must not be wide-character oriented. */ #if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) /* Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, not glibc >= 2.2, but glibc >= 2.7, or musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # define freading(stream) (__freading (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool freading (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadptr.c��������������������������������������������������������������0000664�0000000�0000000�00000007564�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "freadptr.h" #include <stdlib.h> #include "stdio-impl.h" /* This file is not used on systems that have the __freadptr function, namely musl libc. */ const char * freadptr (FILE *fp, size_t *sizep) { size_t size; /* Keep this code in sync with freadahead! */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ if (fp->_IO_write_ptr > fp->_IO_write_base) return NULL; size = fp->_IO_read_end - fp->_IO_read_ptr; if (size == 0) return NULL; *sizep = size; return (const char *) fp->_IO_read_ptr; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) return NULL; size = fp_->_r; if (size == 0) return NULL; *sizep = size; return (const char *) fp_->_p; #elif defined __EMX__ /* emx+gcc */ if ((fp->_flags & _IOWRT) != 0) return NULL; /* Note: fp->_ungetc_count > 0 implies fp->_rcount <= 0, fp->_ungetc_count = 0 implies fp->_rcount >= 0. */ if (fp->_rcount <= 0) return NULL; if (!(fp->_ungetc_count == 0)) abort (); *sizep = fp->_rcount; return fp->_ptr; #elif defined __minix /* Minix */ if ((fp_->_flags & _IOWRITING) != 0) return NULL; size = fp_->_count; if (size == 0) return NULL; *sizep = size; return (const char *) fp_->_ptr; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ if ((fp_->_flag & _IOWRT) != 0) return NULL; size = fp_->_cnt; if (size == 0) return NULL; *sizep = size; return (const char *) fp_->_ptr; #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS if (fp->__modeflags & __FLAG_WRITING) return NULL; if (fp->__modeflags & __FLAG_UNGOT) return NULL; size = fp->__bufread - fp->__bufpos; if (size == 0) return NULL; *sizep = size; return (const char *) fp->__bufpos; # else return NULL; # endif #elif defined __QNX__ /* QNX */ if ((fp->_Mode & 0x2000 /* _MWRITE */) != 0) return NULL; /* fp->_Buf <= fp->_Next <= fp->_Rend */ size = fp->_Rend - fp->_Next; if (size == 0) return NULL; *sizep = size; return (const char *) fp->_Next; #elif defined __MINT__ /* Atari FreeMiNT */ if (!fp->__mode.__read) return NULL; size = fp->__get_limit - fp->__bufp; if (size == 0) return NULL; *sizep = size; return fp->__bufp; #elif defined EPLAN9 /* Plan9 */ if (fp->state == 4 /* WR */) return NULL; if (fp->rp >= fp->wp) return NULL; *sizep = fp->wp - fp->rp; return fp->rp; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ /* This implementation is correct on any ANSI C platform. It is just awfully slow. */ return NULL; #else #error "Please port gnulib freadptr.c to your platform! Look at the definition of fflush, fread, getc, getc_unlocked on your system, then report this to bug-gnulib." #endif } ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadptr.h��������������������������������������������������������������0000664�0000000�0000000�00000003024�14110572173�0017024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <stddef.h> #include <stdio.h> /* Assuming the stream STREAM is open for reading: Return a pointer to the input buffer of STREAM, or NULL. If the returned pointer is non-NULL, *SIZEP is set to the (positive) size of the input buffer. If the returned pointer is NULL, you should use getc (STREAM), fgetc (STREAM), or fread (..., STREAM) to access the input from STREAM. The resulting pointer becomes invalid upon any operation on STREAM. STREAM must not be wide-character oriented. */ #if HAVE___FREADPTR /* musl libc */ # include <stdio_ext.h> # define freadptr(stream,sizep) __freadptr (stream, sizep) #else # ifdef __cplusplus extern "C" { # endif extern const char * freadptr (FILE *stream, size_t *sizep); # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadseek.c�������������������������������������������������������������0000664�0000000�0000000�00000010655�14110572173�0017151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Skipping input from a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "freadseek.h" #include <stdlib.h> #include <unistd.h> #include "freadahead.h" #include "freadptr.h" #include "stdio-impl.h" /* Increment the in-memory pointer. INCREMENT must be at most the buffer size returned by freadptr(). This is very cheap (no system calls). */ static void freadptrinc (FILE *fp, size_t increment) { /* Keep this code in sync with freadptr! */ #if HAVE___FREADPTRINC /* musl libc */ __freadptrinc (fp, increment); #elif defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_IO_read_ptr += increment; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_p += increment; fp_->_r -= increment; #elif defined __EMX__ /* emx+gcc */ fp->_ptr += increment; fp->_rcount -= increment; #elif defined __minix /* Minix */ fp_->_ptr += increment; fp_->_count -= increment; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_ptr += increment; fp_->_cnt -= increment; #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS fp->__bufpos += increment; # else abort (); # endif #elif defined __QNX__ /* QNX */ fp->_Next += increment; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__bufp += increment; #elif defined EPLAN9 /* Plan9 */ fp->rp += increment; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ #else #error "Please port gnulib freadseek.c to your platform! Look at the definition of getc, getc_unlocked on your system, then report this to bug-gnulib." #endif } int freadseek (FILE *fp, size_t offset) { size_t total_buffered; int fd; if (offset == 0) return 0; /* Seek over the already read and buffered input as quickly as possible, without doing any system calls. */ total_buffered = freadahead (fp); /* This loop is usually executed at most twice: once for ungetc buffer (if present) and once for the main buffer. */ while (total_buffered > 0) { size_t buffered; if (freadptr (fp, &buffered) != NULL && buffered > 0) { size_t increment = (buffered < offset ? buffered : offset); freadptrinc (fp, increment); offset -= increment; if (offset == 0) return 0; total_buffered -= increment; if (total_buffered == 0) break; } /* Read one byte. If we were reading from the ungetc buffer, this switches the stream back to the main buffer. */ if (fgetc (fp) == EOF) goto eof; offset--; if (offset == 0) return 0; total_buffered--; } /* Test whether the stream is seekable or not. */ fd = fileno (fp); if (fd >= 0 && lseek (fd, 0, SEEK_CUR) >= 0) { /* FP refers to a regular file. fseek is most efficient in this case. */ return fseeko (fp, offset, SEEK_CUR); } else { /* FP is a non-seekable stream, possibly not even referring to a file descriptor. Read OFFSET bytes explicitly and discard them. */ char buf[4096]; do { size_t count = (sizeof (buf) < offset ? sizeof (buf) : offset); if (fread (buf, 1, count, fp) < count) goto eof; offset -= count; } while (offset > 0); return 0; } eof: /* EOF, or error before or while reading. */ if (ferror (fp)) return EOF; else /* Encountered EOF. */ return 0; } �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freadseek.h�������������������������������������������������������������0000664�0000000�0000000�00000002572�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Skipping input from a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <stddef.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Assuming the stream STREAM is open for reading: Read and discard OFFSET bytes from STREAM. freadseek (STREAM, OFFSET) is the same as fseek (STREAM, OFFSET, SEEK_CUR), except that the latter does not work on non-seekable input streams (such as pipes). Upon success, return 0. Upon premature end of stream, return 0 (like fseek does). Upon error, set the error indicator in the stream and return EOF. STREAM must not be wide-character oriented. */ extern int freadseek (FILE *stream, size_t offset); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/free.c������������������������������������������������������������������0000664�0000000�0000000�00000002772�14110572173�0016142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make free() preserve errno. Copyright (C) 2003, 2006, 2009-2021 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 */ #include <config.h> /* Specification. */ #include <stdlib.h> /* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ #if !HAVE_FREE_POSIX # include <errno.h> void rpl_free (void *p) # undef free { # if defined __GNUC__ && !defined __clang__ /* An invalid GCC optimization <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396> would optimize away the assignments in the code below, when link-time optimization (LTO) is enabled. Make the code more complicated, so that GCC does not grok how to optimize it. */ int err[2]; err[0] = errno; err[1] = errno; errno = 0; free (p); errno = err[errno == 0]; # else int err = errno; free (p); errno = err; # endif } #endif ������gnulib-20210822~d383792/lib/freopen-safer.c���������������������������������������������������������0000664�0000000�0000000�00000006234�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke freopen, but avoid some glitches. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> #include "stdio-safer.h" #include "attribute.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <unistd.h> /* Guarantee that FD is open; all smaller FDs must already be open. Return true if successful. */ static bool protect_fd (int fd) { int value = open ("/dev/null", O_RDONLY); if (value != fd) { if (0 <= value) { close (value); errno = EBADF; /* Unexpected; this is as good as anything else. */ } return false; } return true; } /* Like freopen, but guarantee that reopening stdin, stdout, or stderr preserves the invariant that STDxxx_FILENO==fileno(stdxxx), and that no other stream will interfere with the standard streams. This is necessary because most freopen implementations will change the associated fd of a stream to the lowest available slot. */ FILE * freopen_safer (char const *name, char const *mode, FILE *f) { /* Unfortunately, we cannot use the fopen_safer approach of using fdopen (dup_safer (fileno (freopen (cmd, mode, f)))), because we need to return f itself. The implementation of freopen(NULL,m,f) is system-dependent, so the best we can do is guarantee that all lower-valued standard fds are open prior to the freopen call, even though this puts more pressure on open fds. */ bool protect_in = false; bool protect_out = false; bool protect_err = false; int saved_errno; switch (fileno (f)) { default: /* -1 or not a standard stream. */ if (dup2 (STDERR_FILENO, STDERR_FILENO) != STDERR_FILENO) protect_err = true; FALLTHROUGH; case STDERR_FILENO: if (dup2 (STDOUT_FILENO, STDOUT_FILENO) != STDOUT_FILENO) protect_out = true; FALLTHROUGH; case STDOUT_FILENO: if (dup2 (STDIN_FILENO, STDIN_FILENO) != STDIN_FILENO) protect_in = true; FALLTHROUGH; case STDIN_FILENO: /* Nothing left to protect. */ break; } if (protect_in && !protect_fd (STDIN_FILENO)) f = NULL; else if (protect_out && !protect_fd (STDOUT_FILENO)) f = NULL; else if (protect_err && !protect_fd (STDERR_FILENO)) f = NULL; else f = freopen (name, mode, f); saved_errno = errno; if (protect_err) close (STDERR_FILENO); if (protect_out) close (STDOUT_FILENO); if (protect_in) close (STDIN_FILENO); if (!f) errno = saved_errno; return f; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/freopen.c���������������������������������������������������������������0000664�0000000�0000000�00000005135�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a file. Copyright (C) 2007-2021 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>, 2007. */ /* If the user's config.h happens to include <stdio.h>, let it include only the system's <stdio.h> here, so that orig_freopen doesn't recurse to rpl_freopen. */ #define _GL_ALREADY_INCLUDING_STDIO_H #include <config.h> /* Get the original definition of freopen. It might be defined as a macro. */ #include <stdio.h> #undef _GL_ALREADY_INCLUDING_STDIO_H #include <errno.h> static FILE * orig_freopen (const char *filename, const char *mode, FILE *stream) { return freopen (filename, mode, stream); } /* Specification. */ /* Write "stdio.h" here, not <stdio.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <stdio.h> above. */ #include "stdio.h" #include <fcntl.h> #include <string.h> #include <unistd.h> FILE * rpl_freopen (const char *filename, const char *mode, FILE *stream) { FILE *result; #if defined _WIN32 && ! defined __CYGWIN__ char const *null_device = "NUL"; if (filename && strcmp (filename, "/dev/null") == 0) filename = null_device; #else char const *null_device = "/dev/null"; #endif #ifdef __KLIBC__ errno = 0; #endif result = orig_freopen (filename, mode, stream); if (!result) { #ifdef __KLIBC__ /* On OS/2 kLIBC, freopen returns NULL even if it is successful if filename is NULL. */ if (!filename && !errno) result = stream; #endif } else if (filename) { int fd = fileno (result); if (dup2 (fd, fd) < 0 && errno == EBADF) { int nullfd = open (null_device, O_RDONLY | O_CLOEXEC); int err = 0; if (nullfd != fd) { if (dup2 (nullfd, fd) < 0) err = 1; close (nullfd); } if (!err) result = orig_freopen (filename, mode, result); } } return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/frexp.c�����������������������������������������������������������������0000664�0000000�0000000�00000010403�14110572173�0016333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa. Copyright (C) 2007-2021 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 Paolo Bonzini <bonzini@gnu.org>, 2003, and Bruno Haible <bruno@clisp.org>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #ifdef USE_LONG_DOUBLE # include "isnanl-nolibm.h" # include "fpucw.h" #else # include "isnand-nolibm.h" #endif /* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater than 2, or not even a power of 2, some rounding errors can occur, so that then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ #ifdef USE_LONG_DOUBLE # define FUNC frexpl # define DOUBLE long double # define ISNAN isnanl # define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING # define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () # define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () # define L_(literal) literal##L #else # define FUNC frexp # define DOUBLE double # define ISNAN isnand # define DECL_ROUNDING # define BEGIN_ROUNDING() # define END_ROUNDING() # define L_(literal) literal #endif DOUBLE FUNC (DOUBLE x, int *expptr) { int sign; int exponent; DECL_ROUNDING /* Test for NaN, infinity, and zero. */ if (ISNAN (x) || x + x == x) { *expptr = 0; return x; } sign = 0; if (x < 0) { x = - x; sign = -1; } BEGIN_ROUNDING (); { /* Since the exponent is an 'int', it fits in 64 bits. Therefore the loops are executed no more than 64 times. */ DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ DOUBLE powh[64]; /* powh[i] = 2^-2^i */ int i; exponent = 0; if (x >= L_(1.0)) { /* A positive exponent. */ DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x >= 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x >= pow2_i) { exponent += (1 << i); x *= powh_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } /* Avoid making x too small, as it could become a denormalized number and thus lose precision. */ while (i > 0 && x < pow2[i - 1]) { i--; powh_i = powh[i]; } exponent += (1 << i); x *= powh_i; /* Here 2^-2^i <= x < 1.0. */ } else { /* A negative or zero exponent. */ DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x < 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x < powh_i) { exponent -= (1 << i); x *= pow2_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } /* Here 2^-2^i <= x < 1.0. */ } /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ while (i > 0) { i--; if (x < powh[i]) { exponent -= (1 << i); x *= pow2[i]; } } /* Here 0.5 <= x < 1.0. */ } if (sign < 0) x = - x; END_ROUNDING (); *expptr = exponent; return x; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/frexpf.c����������������������������������������������������������������0000664�0000000�0000000�00000001622�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a float into fraction and mantissa. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float frexpf (float x, int *expptr) { return (float) frexp ((double) x, expptr); } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/frexpl.c����������������������������������������������������������������0000664�0000000�0000000�00000002000�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double frexpl (long double x, int *expptr) { return frexp (x, expptr); } #else # define USE_LONG_DOUBLE # include "frexp.c" #endif gnulib-20210822~d383792/lib/fseek.c�����������������������������������������������������������������0000664�0000000�0000000�00000002057�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseek() function that, together with fflush(), is POSIX compliant. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Get off_t. */ #include <unistd.h> int fseek (FILE *fp, long offset, int whence) { /* Use the replacement fseeko function with all its workarounds. */ return fseeko (fp, (off_t)offset, whence); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fseeko.c����������������������������������������������������������������0000664�0000000�0000000�00000014060�14110572173�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseeko() function that, together with fflush(), is POSIX compliant. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Get off_t, lseek, _POSIX_VERSION. */ #include <unistd.h> #include "stdio-impl.h" int fseeko (FILE *fp, off_t offset, int whence) #undef fseeko #if !HAVE_FSEEKO # undef fseek # define fseeko fseek #endif #if _GL_WINDOWS_64_BIT_OFF_T # undef fseeko # if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */ # define fseeko _fseeki64 # else /* mingw before msvcrt8.0 */ # define fseeko fseeko64 # endif #endif { #if LSEEK_PIPE_BROKEN /* mingw gives bogus answers rather than failure on non-seekable files. */ if (lseek (fileno (fp), 0, SEEK_CUR) == -1) return EOF; #endif /* These tests are based on fpurge.c. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ if (fp->_IO_read_end == fp->_IO_read_ptr && fp->_IO_write_ptr == fp->_IO_write_base && fp->_IO_save_base == NULL) #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit mode; but has an fseeko that requires 64-bit mode. */ FILE *tmp = fopen ("/dev/null", "r"); if (!tmp) return -1; fp->_flags |= __SL64; fp->_seek64 = tmp->_seek64; fclose (tmp); } # endif if (fp_->_p == fp_->_bf._base && fp_->_r == 0 && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ ? fp_->_bf._size : 0) && fp_ub._base == NULL) #elif defined __EMX__ /* emx+gcc */ if (fp->_ptr == fp->_buffer && fp->_rcount == 0 && fp->_wcount == 0 && fp->_ungetc_count == 0) #elif defined __minix /* Minix */ if (fp_->_ptr == fp_->_buf && (fp_->_ptr == NULL || fp_->_count == 0)) #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ if (fp_->_ptr == fp_->_base && (fp_->_ptr == NULL || fp_->_cnt == 0)) #elif defined __UCLIBC__ /* uClibc */ if (((fp->__modeflags & __FLAG_WRITING) == 0 || fp->__bufpos == fp->__bufstart) && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 || fp->__bufpos == fp->__bufread)) #elif defined __QNX__ /* QNX */ if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) && fp->_Rback == fp->_Back + sizeof (fp->_Back) && fp->_Rsave == NULL) #elif defined __MINT__ /* Atari FreeMiNT */ if (fp->__bufp == fp->__buffer && fp->__get_limit == fp->__bufp && fp->__put_limit == fp->__bufp && !fp->__pushed_back) #elif defined EPLAN9 /* Plan9 */ if (fp->rp == fp->buf && fp->wp == fp->buf) #elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION /* Cross-compiling to some other system advertising conformance to POSIX.1-2008 or later. Assume fseeko and fflush work as advertised. If this assumption is incorrect, please report the bug to bug-gnulib. */ if (0) #else #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib." #endif { /* We get here when an fflush() call immediately preceded this one (or if ftell() has created buffers but no I/O has occurred on a newly-opened stream). We know there are no buffers. */ off_t pos = lseek (fileno (fp), offset, whence); if (pos == -1) { #if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags &= ~__SOFF; #endif return -1; } #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags &= ~_IO_EOF_SEEN; fp->_offset = pos; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; # else /* fp_->_offset is an fpos_t. */ { /* Use a union, since on NetBSD, the compilation flags determine whether fpos_t is typedef'd to off_t or a struct containing a single off_t member. */ union { fpos_t f; off_t o; } u; u.o = pos; fp_->_offset = u.f; } # endif fp_->_flags |= __SOFF; fp_->_flags &= ~__SEOF; #elif defined __EMX__ /* emx+gcc */ fp->_flags &= ~_IOEOF; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_flag &= ~_IOEOF; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__offset = pos; fp->__eof = 0; #endif return 0; } return fseeko (fp, offset, whence); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fseterr.c���������������������������������������������������������������0000664�0000000�0000000�00000006026�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "fseterr.h" #include <errno.h> #include "stdio-impl.h" /* This file is not used on systems that have the __fseterr function, namely musl libc. */ void fseterr (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags |= _IO_ERR_SEEN; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags |= __SERR; #elif defined __EMX__ /* emx+gcc */ fp->_flags |= _IOERR; #elif defined __minix /* Minix */ fp->_flags |= _IOERR; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_flag |= _IOERR; #elif defined __UCLIBC__ /* uClibc */ fp->__modeflags |= __FLAG_ERROR; #elif defined __QNX__ /* QNX */ fp->_Mode |= 0x200 /* _MERR */; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__error = 1; #elif defined EPLAN9 /* Plan9 */ if (fp->state != 0 /* CLOSED */) fp->state = 5 /* ERR */; #elif 0 /* unknown */ /* Portable fallback, based on an idea by Rich Felker. Wow! 6 system calls for something that is just a bit operation! Not activated on any system, because there is no way to repair FP when the sequence of system calls fails, and library code should not call abort(). */ int saved_errno; int fd; int fd2; saved_errno = errno; fflush (fp); fd = fileno (fp); fd2 = dup (fd); if (fd2 >= 0) { close (fd); fputc ('\0', fp); /* This should set the error indicator. */ fflush (fp); /* Or this. */ if (dup2 (fd2, fd) < 0) /* Whee... we botched the stream and now cannot restore it! */ abort (); close (fd2); } errno = saved_errno; #else #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib." #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fseterr.h���������������������������������������������������������������0000664�0000000�0000000�00000002374�14110572173�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. Copyright (C) 2007, 2009-2021 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/>. */ #ifndef _FSETERR_H #define _FSETERR_H #include <stdio.h> /* Set the error indicator of the stream FP. The "error indicator" is set when an I/O operation on the stream fails, and is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ #if HAVE___FSETERR /* musl libc */ # include <stdio_ext.h> # define fseterr(fp) __fseterr (fp) #else # ifdef __cplusplus extern "C" { # endif extern void fseterr (FILE *fp); # ifdef __cplusplus } # endif #endif #endif /* _FSETERR_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fstat.c�����������������������������������������������������������������0000664�0000000�0000000�00000005153�14110572173�0016336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fstat() replacement. Copyright (C) 2011-2021 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/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to rpl_fstat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <unistd.h> #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include "stat-w32.h" #endif int rpl_fstat (int fd, struct stat *buf) { #if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY /* Handle the case when rpl_open() used a dummy file descriptor to work around an open() that can't normally visit directories. */ const char *name = _gl_directory_name (fd); if (name != NULL) return stat (name, buf); #endif #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original fstat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return _gl_fstat_by_handle (h, NULL, buf); #else return stat_time_normalize (orig_fstat (fd, buf), buf); #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fstatat.c���������������������������������������������������������������0000664�0000000�0000000�00000011215�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around an fstatat bug on Solaris 9. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstatat doesn't recurse to rpl_fstatat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstatat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG static int orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) { return fstatat (fd, filename, buf, flags); } #endif #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG # ifndef LSTAT_FOLLOWS_SLASHED_SYMLINK # define LSTAT_FOLLOWS_SLASHED_SYMLINK 0 # endif static int normal_fstatat (int fd, char const *file, struct stat *st, int flag) { return stat_time_normalize (orig_fstatat (fd, file, st, flag), st); } /* fstatat should always follow symbolic links that end in /, but on Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified. Likewise, trailing slash on a non-directory should be an error. These are the same problems that lstat.c and stat.c address, so solve it in a similar way. AIX 7.1 fstatat (AT_FDCWD, ..., 0) always fails, which is a bug. Work around this bug if FSTATAT_AT_FDCWD_0_BROKEN is nonzero. */ int rpl_fstatat (int fd, char const *file, struct stat *st, int flag) { int result = normal_fstatat (fd, file, st, flag); size_t len; if (LSTAT_FOLLOWS_SLASHED_SYMLINK || result != 0) return result; len = strlen (file); if (flag & AT_SYMLINK_NOFOLLOW) { /* Fix lstat behavior. */ if (file[len - 1] != '/' || S_ISDIR (st->st_mode)) return 0; if (!S_ISLNK (st->st_mode)) { errno = ENOTDIR; return -1; } result = normal_fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW); } /* Fix stat behavior. */ if (result == 0 && !S_ISDIR (st->st_mode) && file[len - 1] == '/') { errno = ENOTDIR; return -1; } return result; } #else /* ! (HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG) */ /* On mingw, the gnulib <sys/stat.h> defines 'stat' as a function-like macro; but using it in AT_FUNC_F2 causes compilation failure because the preprocessor sees a use of a macro that requires two arguments but is only given one. Hence, we need an inline forwarder to get past the preprocessor. */ static int stat_func (char const *name, struct stat *st) { return stat (name, st); } /* Likewise, if there is no native 'lstat', then the gnulib <sys/stat.h> defined it as stat, which also needs adjustment. */ # if !HAVE_LSTAT # undef lstat # define lstat stat_func # endif /* Replacement for Solaris' function by the same name. <https://www.google.com/search?q=fstatat+site:docs.oracle.com> First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE"). Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, this function works just like Solaris' fstatat. */ # define AT_FUNC_NAME fstatat # define AT_FUNC_F1 lstat # define AT_FUNC_F2 stat_func # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag # define AT_FUNC_POST_FILE_ARGS , st # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #endif /* !HAVE_FSTATAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fstrcmp.c���������������������������������������������������������������0000664�0000000�0000000�00000022510�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to make fuzzy comparisons between strings Copyright (C) 1988-1989, 1992-1993, 1995, 2001-2003, 2006, 2008-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "fstrcmp.h" #include <string.h> #include <stdbool.h> #include <stddef.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <limits.h> #include "glthread/lock.h" #include "glthread/tls.h" #include "minmax.h" #include "xalloc.h" #define ELEMENT char #define EQUAL(x,y) ((x) == (y)) #define OFFSET ptrdiff_t #define EXTRA_CONTEXT_FIELDS \ /* The number of edits beyond which the computation can be aborted. */ \ ptrdiff_t edit_count_limit; \ /* The number of edits (= number of elements inserted, plus the number of \ elements deleted), temporarily minus edit_count_limit. */ \ ptrdiff_t edit_count; #define NOTE_DELETE(ctxt, xoff) ctxt->edit_count++ #define NOTE_INSERT(ctxt, yoff) ctxt->edit_count++ #define NOTE_ORDERED false #define EARLY_ABORT(ctxt) ctxt->edit_count > 0 /* We don't need USE_HEURISTIC, since it is unlikely in typical uses of fstrcmp(). */ #include "diffseq.h" /* Because fstrcmp is typically called multiple times, attempt to minimize the number of memory allocations performed. Thus, let a call reuse the memory already allocated by the previous call, if it is sufficient. To make it multithread-safe, without need for a lock that protects the already allocated memory, store the allocated memory per thread. Free it only when the thread exits. */ static gl_tls_key_t buffer_key; /* TLS key for a 'ptrdiff_t *' */ static gl_tls_key_t bufmax_key; /* TLS key for a 'uintptr_t' */ static void keys_init (void) { gl_tls_key_init (buffer_key, free); gl_tls_key_init (bufmax_key, NULL); /* The per-thread initial values are NULL and 0, respectively. */ } /* Ensure that keys_init is called once only. */ gl_once_define(static, keys_init_once) void fstrcmp_free_resources (void) { ptrdiff_t *buffer; gl_once (keys_init_once, keys_init); buffer = gl_tls_get (buffer_key); if (buffer != NULL) { gl_tls_set (buffer_key, NULL); gl_tls_set (bufmax_key, (void *) (uintptr_t) 0); free (buffer); } } /* In the code below, branch probabilities were measured by Ralf Wildenhues, by running "msgmerge LL.po coreutils.pot" with msgmerge 0.18 for many values of LL. The probability indicates that the condition evaluates to true; whether that leads to a branch or a non-branch in the code, depends on the compiler's reordering of basic blocks. */ double fstrcmp_bounded (const char *string1, const char *string2, double lower_bound) { struct context ctxt; size_t xvec_length = strlen (string1); size_t yvec_length = strlen (string2); size_t length_sum = xvec_length + yvec_length; ptrdiff_t i; ptrdiff_t fdiag_len; ptrdiff_t *buffer; uintptr_t bufmax; /* short-circuit obvious comparisons */ if (xvec_length == 0 || yvec_length == 0) /* Prob: 1% */ return length_sum == 0; if (! (xvec_length <= length_sum && length_sum <= MIN (UINTPTR_MAX, PTRDIFF_MAX) - 3)) xalloc_die (); if (lower_bound > 0) { /* Compute a quick upper bound. Each edit is an insertion or deletion of an element, hence modifies the length of the sequence by at most 1. Therefore, when starting from a sequence X and ending at a sequence Y, with N edits, | yvec_length - xvec_length | <= N. (Proof by induction over N.) So, at the end, we will have edit_count >= | xvec_length - yvec_length |. and hence result = (xvec_length + yvec_length - edit_count) / (xvec_length + yvec_length) <= (xvec_length + yvec_length - | yvec_length - xvec_length |) / (xvec_length + yvec_length) = 2 * min (xvec_length, yvec_length) / (xvec_length + yvec_length). */ ptrdiff_t length_min = MIN (xvec_length, yvec_length); volatile double upper_bound = 2.0 * length_min / length_sum; if (upper_bound < lower_bound) /* Prob: 74% */ /* Return an arbitrary value < LOWER_BOUND. */ return 0.0; #if CHAR_BIT <= 8 /* When X and Y are both small, avoid the overhead of setting up an array of size 256. */ if (length_sum >= 20) /* Prob: 99% */ { /* Compute a less quick upper bound. Each edit is an insertion or deletion of a character, hence modifies the occurrence count of a character by 1 and leaves the other occurrence counts unchanged. Therefore, when starting from a sequence X and ending at a sequence Y, and denoting the occurrence count of C in X with OCC (X, C), with N edits, sum_C | OCC (X, C) - OCC (Y, C) | <= N. (Proof by induction over N.) So, at the end, we will have edit_count >= sum_C | OCC (X, C) - OCC (Y, C) |, and hence result = (xvec_length + yvec_length - edit_count) / (xvec_length + yvec_length) <= (xvec_length + yvec_length - sum_C | OCC(X,C) - OCC(Y,C) |) / (xvec_length + yvec_length). */ ptrdiff_t occ_diff[UCHAR_MAX + 1]; /* array C -> OCC(X,C) - OCC(Y,C) */ ptrdiff_t sum; double dsum; /* Determine the occurrence counts in X. */ memset (occ_diff, 0, sizeof (occ_diff)); for (i = xvec_length - 1; i >= 0; i--) occ_diff[(unsigned char) string1[i]]++; /* Subtract the occurrence counts in Y. */ for (i = yvec_length - 1; i >= 0; i--) occ_diff[(unsigned char) string2[i]]--; /* Sum up the absolute values. */ sum = 0; for (i = 0; i <= UCHAR_MAX; i++) { ptrdiff_t d = occ_diff[i]; sum += (d >= 0 ? d : -d); } dsum = sum; upper_bound = 1.0 - dsum / length_sum; if (upper_bound < lower_bound) /* Prob: 66% */ /* Return an arbitrary value < LOWER_BOUND. */ return 0.0; } #endif } /* set the info for each string. */ ctxt.xvec = string1; ctxt.yvec = string2; /* Set TOO_EXPENSIVE to be approximate square root of input size, bounded below by 4096. */ ctxt.too_expensive = 1; for (i = xvec_length + yvec_length; i != 0; i >>= 2) ctxt.too_expensive <<= 1; if (ctxt.too_expensive < 4096) ctxt.too_expensive = 4096; /* Allocate memory for fdiag and bdiag from a thread-local pool. */ fdiag_len = length_sum + 3; gl_once (keys_init_once, keys_init); buffer = gl_tls_get (buffer_key); bufmax = (uintptr_t) gl_tls_get (bufmax_key); if (fdiag_len > bufmax) { /* Need more memory. */ bufmax = 2 * bufmax; if (fdiag_len > bufmax) bufmax = fdiag_len; /* Calling xrealloc would be a waste: buffer's contents does not need to be preserved. */ free (buffer); buffer = xnmalloc (bufmax, 2 * sizeof *buffer); gl_tls_set (buffer_key, buffer); gl_tls_set (bufmax_key, (void *) (uintptr_t) bufmax); } ctxt.fdiag = buffer + yvec_length + 1; ctxt.bdiag = ctxt.fdiag + fdiag_len; /* The edit_count is only ever increased. The computation can be aborted when (xvec_length + yvec_length - edit_count) / (xvec_length + yvec_length) < lower_bound, or equivalently edit_count > (xvec_length + yvec_length) * (1 - lower_bound) or equivalently edit_count > floor((xvec_length + yvec_length) * (1 - lower_bound)). We need to add an epsilon inside the floor(...) argument, to neutralize rounding errors. */ ctxt.edit_count_limit = (lower_bound < 1.0 ? (ptrdiff_t) (length_sum * (1.0 - lower_bound + 0.000001)) : 0); /* Now do the main comparison algorithm */ ctxt.edit_count = - ctxt.edit_count_limit; if (compareseq (0, xvec_length, 0, yvec_length, 0, &ctxt)) /* Prob: 98% */ /* The edit_count passed the limit. Hence the result would be < lower_bound. We can return any value < lower_bound instead. */ return 0.0; ctxt.edit_count += ctxt.edit_count_limit; /* The result is ((number of chars in common) / (average length of the strings)). The numerator is = xvec_length - (number of calls to NOTE_DELETE) = yvec_length - (number of calls to NOTE_INSERT) = 1/2 * (xvec_length + yvec_length - (number of edits)). This is admittedly biased towards finding that the strings are similar, however it does produce meaningful results. */ return ((double) (xvec_length + yvec_length - ctxt.edit_count) / (xvec_length + yvec_length)); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fstrcmp.h���������������������������������������������������������������0000664�0000000�0000000�00000004021�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fuzzy string comparison. Copyright (C) 1995, 2000, 2002-2003, 2006, 2008-2021 Free Software Foundation, Inc. This file was written by Peter Miller <pmiller@agso.gov.au> This 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 _FSTRCMP_H #define _FSTRCMP_H #ifdef __cplusplus extern "C" { #endif /* Fuzzy compare of S1 and S2. Return a measure for the similarity of S1 and S1. The higher the result, the more similar the strings are. The result is bounded between 0 (meaning very dissimilar strings) and 1 (meaning identical strings). */ extern double fstrcmp (const char *s1, const char *s2); /* Like fstrcmp (S1, S2), except that if the result is < LOWER_BOUND, an arbitrary other value < LOWER_BOUND can be returned. */ extern double fstrcmp_bounded (const char *s1, const char *s2, double lower_bound); /* A shortcut for fstrcmp. Avoids a function call. */ #define fstrcmp(s1,s2) fstrcmp_bounded (s1, s2, 0.0) /* Frees the per-thread resources allocated by this module for the current thread. You don't need to call this function in threads other than the main thread, because per-thread resources are reclaimed automatically when the thread exits. However, per-thread resources allocated by the main thread are comparable to static allocations; calling this function can be useful to avoid an error report from valgrind. */ extern void fstrcmp_free_resources (void); #ifdef __cplusplus } #endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fsusage.c���������������������������������������������������������������0000664�0000000�0000000�00000017121�14110572173�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fsusage.c -- return space usage of mounted file systems Copyright (C) 1991-1992, 1996, 1998-1999, 2002-2006, 2009-2021 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/>. */ #include <config.h> #include "fsusage.h" #include <limits.h> #include <sys/types.h> #if STAT_STATVFS || STAT_STATVFS64 /* POSIX 1003.1-2001 (and later) with XSI */ # include <sys/statvfs.h> #else /* Don't include backward-compatibility files unless they're needed. Eventually we'd like to remove all this cruft. */ # include <fcntl.h> # include <unistd.h> # include <sys/stat.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if HAVE_SYS_MOUNT_H # include <sys/mount.h> #endif #if HAVE_SYS_VFS_H # include <sys/vfs.h> #endif # if HAVE_SYS_FS_S5PARAM_H /* Fujitsu UXP/V */ # include <sys/fs/s5param.h> # endif # if HAVE_SYS_STATFS_H # include <sys/statfs.h> # endif #endif /* Many space usage primitives use all 1 bits to denote a value that is not applicable or unknown. Propagate this information by returning a uintmax_t value that is all 1 bits if X is all 1 bits, even if X is unsigned and narrower than uintmax_t. */ #define PROPAGATE_ALL_ONES(x) \ ((sizeof (x) < sizeof (uintmax_t) \ && (~ (x) == (sizeof (x) < sizeof (int) \ ? - (1 << (sizeof (x) * CHAR_BIT)) \ : 0))) \ ? UINTMAX_MAX : (uintmax_t) (x)) /* Extract the top bit of X as an uintmax_t value. */ #define EXTRACT_TOP_BIT(x) ((x) \ & ((uintmax_t) 1 << (sizeof (x) * CHAR_BIT - 1))) /* If a value is negative, many space usage primitives store it into an integer variable by assignment, even if the variable's type is unsigned. So, if a space usage variable X's top bit is set, convert X to the uintmax_t value V such that (- (uintmax_t) V) is the negative of the original value. If X's top bit is clear, just yield X. Use PROPAGATE_TOP_BIT if the original value might be negative; otherwise, use PROPAGATE_ALL_ONES. */ #define PROPAGATE_TOP_BIT(x) ((x) | ~ (EXTRACT_TOP_BIT (x) - 1)) #ifdef STAT_STATVFS /* Return true if statvfs works. This is false for statvfs on systems with GNU libc on Linux kernels before 2.6.36, which stats all preceding entries in /proc/mounts; that makes df hang if even one of the corresponding file systems is hard-mounted but not available. */ # if ! (__linux__ && (__GLIBC__ || __UCLIBC__)) /* The FRSIZE fallback is not required in this case. */ # undef STAT_STATFS2_FRSIZE static int statvfs_works (void) { return 1; } # else # include <string.h> /* for strverscmp */ # include <sys/utsname.h> # include <sys/statfs.h> # define STAT_STATFS2_BSIZE 1 static int statvfs_works (void) { static int statvfs_works_cache = -1; struct utsname name; if (statvfs_works_cache < 0) statvfs_works_cache = (uname (&name) == 0 && 0 <= strverscmp (name.release, "2.6.36")); return statvfs_works_cache; } # endif #endif /* Fill in the fields of FSP with information about space usage for the file system on which FILE resides. DISK is the device on which FILE is mounted, for space-getting methods that need to know it. Return 0 if successful, -1 if not. When returning -1, ensure that ERRNO is either a system error value, or zero if DISK is NULL on a system that requires a non-NULL value. */ int get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp) { #ifdef STAT_STATVFS /* POSIX, except pre-2.6.36 glibc/Linux */ if (statvfs_works ()) { struct statvfs vfsd; if (statvfs (file, &vfsd) < 0) return -1; /* f_frsize isn't guaranteed to be supported. */ fsp->fsu_blocksize = (vfsd.f_frsize ? PROPAGATE_ALL_ONES (vfsd.f_frsize) : PROPAGATE_ALL_ONES (vfsd.f_bsize)); fsp->fsu_blocks = PROPAGATE_ALL_ONES (vfsd.f_blocks); fsp->fsu_bfree = PROPAGATE_ALL_ONES (vfsd.f_bfree); fsp->fsu_bavail = PROPAGATE_TOP_BIT (vfsd.f_bavail); fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (vfsd.f_bavail) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (vfsd.f_files); fsp->fsu_ffree = PROPAGATE_ALL_ONES (vfsd.f_ffree); return 0; } #endif #if defined STAT_STATVFS64 /* AIX */ struct statvfs64 fsd; if (statvfs64 (file, &fsd) < 0) return -1; /* f_frsize isn't guaranteed to be supported. */ fsp->fsu_blocksize = (fsd.f_frsize ? PROPAGATE_ALL_ONES (fsd.f_frsize) : PROPAGATE_ALL_ONES (fsd.f_bsize)); #elif defined STAT_STATFS3_OSF1 /* OSF/1 */ struct statfs fsd; if (statfs (file, &fsd, sizeof (struct statfs)) != 0) return -1; fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_fsize); #elif defined STAT_STATFS2_FRSIZE /* 2.6 < glibc/Linux < 2.6.36 */ struct statfs fsd; if (statfs (file, &fsd) < 0) return -1; fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_frsize); #elif defined STAT_STATFS2_BSIZE /* glibc/Linux < 2.6, 4.3BSD, SunOS 4, \ Mac OS X < 10.4, FreeBSD < 5.0, \ NetBSD < 3.0, OpenBSD < 4.4 */ struct statfs fsd; if (statfs (file, &fsd) < 0) return -1; fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_bsize); # ifdef STATFS_TRUNCATES_BLOCK_COUNTS /* In SunOS 4.1.2, 4.1.3, and 4.1.3_U1, the block counts in the struct statfs are truncated to 2GB. These conditions detect that truncation, presumably without botching the 4.1.1 case, in which the values are not truncated. The correct counts are stored in undocumented spare fields. */ if (fsd.f_blocks == 0x7fffffff / fsd.f_bsize && fsd.f_spare[0] > 0) { fsd.f_blocks = fsd.f_spare[0]; fsd.f_bfree = fsd.f_spare[1]; fsd.f_bavail = fsd.f_spare[2]; } # endif /* STATFS_TRUNCATES_BLOCK_COUNTS */ #elif defined STAT_STATFS2_FSIZE /* 4.4BSD and older NetBSD */ struct statfs fsd; if (statfs (file, &fsd) < 0) return -1; fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_fsize); #elif defined STAT_STATFS4 /* SVR3, old Irix */ struct statfs fsd; if (statfs (file, &fsd, sizeof fsd, 0) < 0) return -1; /* Empirically, the block counts on most SVR3 and SVR3-derived systems seem to always be in terms of 512-byte blocks, no matter what value f_bsize has. */ fsp->fsu_blocksize = 512; #endif #if (defined STAT_STATVFS64 || defined STAT_STATFS3_OSF1 \ || defined STAT_STATFS2_FRSIZE || defined STAT_STATFS2_BSIZE \ || defined STAT_STATFS2_FSIZE || defined STAT_STATFS4) fsp->fsu_blocks = PROPAGATE_ALL_ONES (fsd.f_blocks); fsp->fsu_bfree = PROPAGATE_ALL_ONES (fsd.f_bfree); fsp->fsu_bavail = PROPAGATE_TOP_BIT (fsd.f_bavail); fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.f_bavail) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.f_files); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.f_ffree); #endif (void) disk; /* avoid argument-unused warning */ return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fsusage.h���������������������������������������������������������������0000664�0000000�0000000�00000002775�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fsusage.h -- declarations for file system space usage info Copyright (C) 1991-1992, 1997, 2003-2006, 2009-2021 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/>. */ /* Space usage statistics for a file system. Blocks are 512-byte. */ #if !defined FSUSAGE_H_ # define FSUSAGE_H_ # include <stdint.h> # include <stdbool.h> struct fs_usage { uintmax_t fsu_blocksize; /* Size of a block. */ uintmax_t fsu_blocks; /* Total blocks. */ uintmax_t fsu_bfree; /* Free blocks available to superuser. */ uintmax_t fsu_bavail; /* Free blocks available to non-superuser. */ bool fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */ uintmax_t fsu_files; /* Total file nodes. */ uintmax_t fsu_ffree; /* Free file nodes. */ }; int get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp); #endif ���gnulib-20210822~d383792/lib/fsync.c�����������������������������������������������������������������0000664�0000000�0000000�00000004422�14110572173�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate fsync on platforms that lack it, primarily Windows and cross-compilers like MinGW. This is derived from sqlite3 sources. https://www.sqlite.org/src/finfo?name=src/os_win.c https://www.sqlite.org/copyright.html Written by Richard W.M. Jones <rjones.at.redhat.com> Copyright (C) 2008-2021 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/>. */ #include <config.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* FlushFileBuffers */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <errno.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif int fsync (int fd) { HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD err; if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (!FlushFileBuffers (h)) { /* Translate some Windows errors into rough approximations of Unix * errors. MSDN is useless as usual - in this case it doesn't * document the full range of errors. */ err = GetLastError (); switch (err) { case ERROR_ACCESS_DENIED: /* For a read-only handle, fsync should succeed, even though we have no way to sync the access-time changes. */ return 0; /* eg. Trying to fsync a tty. */ case ERROR_INVALID_HANDLE: errno = EINVAL; break; default: errno = EIO; } return -1; } return 0; } #else /* !Windows */ # error "This platform lacks fsync function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." #endif /* !Windows */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ftell.c�����������������������������������������������������������������0000664�0000000�0000000�00000002177�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftell() function that works around platform bugs. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> long ftell (FILE *fp) { /* Use the replacement ftello function with all its workarounds. */ off_t offset = ftello (fp); if (LONG_MIN <= offset && offset <= LONG_MAX) return /* (long) */ offset; else { errno = EOVERFLOW; return -1; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ftello.c����������������������������������������������������������������0000664�0000000�0000000�00000010114�14110572173�0016473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftello() function that works around platform bugs. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include "intprops.h" /* Get lseek. */ #include <unistd.h> #include "stdio-impl.h" off_t ftello (FILE *fp) #undef ftello #if !HAVE_FTELLO # undef ftell # define ftello ftell #endif #if _GL_WINDOWS_64_BIT_OFF_T # undef ftello # if HAVE__FTELLI64 /* msvc, mingw64 */ # define ftello _ftelli64 # else /* mingw */ # define ftello ftello64 # endif #endif { #if FTELLO_BROKEN_AFTER_UNGETC /* macOS >= 10.15 */ /* The system's ftello() is completely broken, because it calls __sflush, which makes side effects on the stream. */ /* Handle non-seekable files first. */ if (fp->_file < 0 || fp->_seek == NULL) { errno = ESPIPE; return -1; } /* Determine the current offset, ignoring buffered and pushed-back bytes. */ off_t pos; if (fp->_flags & __SOFF) pos = fp->_offset; else { pos = fp->_seek (fp->_cookie, 0, SEEK_CUR); if (pos < 0) return -1; if (fp->_flags & __SOPT) { fp->_offset = pos; fp->_flags |= __SOFF; } } if (fp->_flags & __SRD) { /* Now consider buffered and pushed-back bytes from ungetc. */ if (fp->_ub._base != NULL) /* Considering the buffered bytes, we are at position pos - fp->_ur. Considering also the pushed-back bytes, we are at position pos - fp->_ur - fp->_r. */ pos = pos - fp->_ur - fp->_r; else /* Considering the buffered bytes, we are at position pos - fp->_r. */ pos = pos - fp->_r; if (pos < 0) { errno = EIO; return -1; } } else if ((fp->_flags & __SWR) && fp->_p != NULL) { /* Consider the buffered bytes. */ off_t buffered = fp->_p - fp->_bf._base; /* Compute pos + buffered, with overflow check. */ off_t sum; if (! INT_ADD_OK (pos, buffered, &sum)) { errno = EOVERFLOW; return -1; } pos = sum; } return pos; #else # if LSEEK_PIPE_BROKEN /* mingw gives bogus answers rather than failure on non-seekable files. */ if (lseek (fileno (fp), 0, SEEK_CUR) == -1) return -1; # endif # if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */ /* The Solaris stdio leaves the _IOREAD flag set after reading from a file reaches EOF and the program then starts writing to the file. ftello gets confused by this. */ if (fp_->_flag & _IOWRT) { off_t pos; /* Call ftello nevertheless, for the side effects that it does on fp. */ ftello (fp); /* Compute the file position ourselves. */ pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR); if (pos >= 0) { if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL) pos += fp_->_ptr - fp_->_base; } return pos; } # endif # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit mode; but has an ftello that requires 64-bit mode. */ FILE *tmp = fopen ("/dev/null", "r"); if (!tmp) return -1; fp->_flags |= __SL64; fp->_seek64 = tmp->_seek64; fclose (tmp); } # endif return ftello (fp); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ftoastr.c���������������������������������������������������������������0000664�0000000�0000000�00000010750�14110572173�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* floating point to accurate string Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* This code can misbehave on some buggy or older platforms, when operating on arguments on floating types other than 'double', or when given unusual combinations of options. Gnulib's snprintf-posix module works around many of these problems. This code relies on sprintf, strtod, etc. operating accurately; otherwise, the resulting strings could be inaccurate or too long. */ #include <config.h> #include "ftoastr.h" #include <float.h> #include <stdio.h> #include <stdlib.h> #ifdef C_LOCALE # include "c-snprintf.h" # include "c-strtod.h" # define PREFIX(name) c_ ## name #else # define PREFIX(name) name #endif #if LENGTH == 3 # define FLOAT long double # define FLOAT_DIG LDBL_DIG # define FLOAT_MIN LDBL_MIN # define FLOAT_PREC_BOUND _GL_LDBL_PREC_BOUND # define FTOASTR PREFIX (ldtoastr) # define PROMOTED_FLOAT long double # define STRTOF PREFIX (strtold) #elif LENGTH == 2 # define FLOAT double # define FLOAT_DIG DBL_DIG # define FLOAT_MIN DBL_MIN # define FLOAT_PREC_BOUND _GL_DBL_PREC_BOUND # define FTOASTR PREFIX (dtoastr) # define PROMOTED_FLOAT double #else # define LENGTH 1 # define FLOAT float # define FLOAT_DIG FLT_DIG # define FLOAT_MIN FLT_MIN # define FLOAT_PREC_BOUND _GL_FLT_PREC_BOUND # define FTOASTR PREFIX (ftoastr) # define PROMOTED_FLOAT double # if HAVE_STRTOF # define STRTOF strtof # endif #endif /* On pre-C99 hosts, approximate strtof with strtod. This may generate one or two extra digits, but that's better than not working at all. */ #ifndef STRTOF # define STRTOF PREFIX (strtod) #endif /* On hosts where it's not known that snprintf works, use sprintf to implement the subset needed here. Typically BUFSIZE is big enough and there's little or no performance hit. */ #ifdef C_LOCALE # undef snprintf # define snprintf c_snprintf #elif ! GNULIB_SNPRINTF # undef snprintf # define snprintf ftoastr_snprintf static int ftoastr_snprintf (char *buf, size_t bufsize, char const *format, int width, int prec, FLOAT x) { PROMOTED_FLOAT promoted_x = x; char width_0_buffer[LENGTH == 1 ? FLT_BUFSIZE_BOUND : LENGTH == 2 ? DBL_BUFSIZE_BOUND : LDBL_BUFSIZE_BOUND]; int n = width; if (bufsize < sizeof width_0_buffer) { n = sprintf (width_0_buffer, format, 0, prec, promoted_x); if (n < 0) return n; if (n < width) n = width; } if (n < bufsize) n = sprintf (buf, format, width, prec, promoted_x); return n; } #endif int FTOASTR (char *buf, size_t bufsize, int flags, int width, FLOAT x) { /* The following method is simple but slow. For ideas about speeding things up, please see: Andrysco M, Jhala R, Lerner S. Printing floating-point numbers: a faster, always correct method. ACM SIGPLAN notices - POPL '16. 2016;51(1):555-67 <https://doi.org/10.1145/2914770.2837654>; draft at <https://cseweb.ucsd.edu/~lerner/papers/fp-printing-popl16.pdf>. */ PROMOTED_FLOAT promoted_x = x; char format[sizeof "%-+ 0*.*Lg"]; FLOAT abs_x = x < 0 ? -x : x; int prec; char *p = format; *p++ = '%'; /* Support flags that generate output parsable by strtof. */ *p = '-'; p += (flags & FTOASTR_LEFT_JUSTIFY ) != 0; *p = '+'; p += (flags & FTOASTR_ALWAYS_SIGNED ) != 0; *p = ' '; p += (flags & FTOASTR_SPACE_POSITIVE) != 0; *p = '0'; p += (flags & FTOASTR_ZERO_PAD ) != 0; *p++ = '*'; *p++ = '.'; *p++ = '*'; *p = 'L'; p += 2 < LENGTH; *p++ = flags & FTOASTR_UPPER_E ? 'G' : 'g'; *p = '\0'; for (prec = abs_x < FLOAT_MIN ? 1 : FLOAT_DIG; ; prec++) { int n = snprintf (buf, bufsize, format, width, prec, promoted_x); if (n < 0 || FLOAT_PREC_BOUND <= prec || (n < bufsize && STRTOF (buf, NULL) == x)) return n; } } ������������������������gnulib-20210822~d383792/lib/ftoastr.h���������������������������������������������������������������0000664�0000000�0000000�00000014574�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* floating point to accurate string Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef _GL_FTOASTR_H #define _GL_FTOASTR_H #include "intprops.h" #include <float.h> #include <stddef.h> /* Store into BUF (of size BUFSIZE) an accurate minimal-precision string representation of a floating point number. FLAGS affect the formatting of the number. Pad the output string with spaces as necessary to width WIDTH bytes, in the style of printf. WIDTH must be nonnegative. X is the floating-point number to be converted. Return the number of bytes stored into BUF, not counting the terminating null. However, do not overrun BUF: if BUF is too small, return a fairly tight (but not necessarily exact) upper bound on the value that would have been returned if BUF had been big enough. If SIZE is zero, BUF may be a null pointer. On error (e.g., returned value would exceed INT_MAX), return -1 and set errno. Example: char buf[DBL_BUFSIZE_BOUND]; int r = dtoastr (buf, sizeof buf, 0, 0, 0.1); In the C locale, this sets R to 3 and stores "0.1" into BUF. */ int ftoastr (char *buf, size_t bufsize, int flags, int width, float x); int dtoastr (char *buf, size_t bufsize, int flags, int width, double x); int ldtoastr (char *buf, size_t bufsize, int flags, int width, long double x); /* The last two functions except that the formatting takes place in the C locale. */ int c_dtoastr (char *buf, size_t bufsize, int flags, int width, double x); int c_ldtoastr (char *buf, size_t bufsize, int flags, int width, long double x); /* Flag values for ftoastr etc. These can be ORed together. */ enum { /* Left justify within the width; the default is right justification. */ FTOASTR_LEFT_JUSTIFY = 1, /* Output "+" before positive numbers; the default outputs nothing. */ FTOASTR_ALWAYS_SIGNED = 2, /* Output " " before positive numbers; ignored if FTOASTR_ALWAYS_SIGNED is also given. */ FTOASTR_SPACE_POSITIVE = 4, /* Pad with zeros instead of spaces; ignored if FTOASTR_LEFT_JUSTIFY is also given. */ FTOASTR_ZERO_PAD = 8, /* Use 'E' instead of 'e' before the exponent. */ FTOASTR_UPPER_E = 16 }; /* _GL_FLT_PREC_BOUND is an upper bound on the precision needed to represent a float value without losing information. Likewise for _GL_DBL_PREC_BOUND and double, and _GL_LDBL_PREC_BOUND and long double. These are macros, not enums, to work around a bug in IBM xlc 12.1. */ #if FLT_RADIX == 10 /* decimal floating point */ # define _GL_FLT_PREC_BOUND FLT_MANT_DIG # define _GL_DBL_PREC_BOUND DBL_MANT_DIG # define _GL_LDBL_PREC_BOUND LDBL_MANT_DIG #else /* An upper bound on the number of bits needed to represent a single digit in a floating-point fraction. */ # if FLT_RADIX == 2 /* IEEE 754 floating point, VAX floating point, etc. */ # define _GL_FLOAT_DIG_BITS_BOUND 1 # elif FLT_RADIX <= 16 /* IBM hex floating point has FLT_RADIX == 16. */ # define _GL_FLOAT_DIG_BITS_BOUND 4 # else /* no machine is this bad, but let's be complete */ # define _GL_FLOAT_DIG_BITS_BOUND ((int) TYPE_WIDTH (int) - 1) # endif /* An upper bound on the number of decimal digits needed to represent a floating point number accurately, assuming a fraction contains DIG digits. For why the "+ 1" is needed, see "Binary to Decimal Conversion" in David Goldberg's paper "What Every Computer Scientist Should Know About Floating-Point Arithmetic" <https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html>. */ # define _GL_FLOAT_PREC_BOUND(dig) \ (INT_BITS_STRLEN_BOUND ((dig) * _GL_FLOAT_DIG_BITS_BOUND) + 1) # define _GL_FLT_PREC_BOUND _GL_FLOAT_PREC_BOUND ( FLT_MANT_DIG) # define _GL_DBL_PREC_BOUND _GL_FLOAT_PREC_BOUND ( DBL_MANT_DIG) # define _GL_LDBL_PREC_BOUND _GL_FLOAT_PREC_BOUND (LDBL_MANT_DIG) #endif /* Bound on the number of bytes printed for an exponent in the range MIN..MAX, where MIN < 0 < MAX; printf always prints a sign and at least 2 digits. Although the maximum known exponent is 4932 for IEEE 754 binary128, support tight bounds for exponents up to a million, just in case. */ #define _GL_FLOAT_EXPONENT_STRLEN_BOUND(min, max) \ ( -100 < (min) && (max) < 100 ? 3 \ : -1000 < (min) && (max) < 1000 ? 4 \ : -10000 < (min) && (max) < 10000 ? 5 \ : -100000 < (min) && (max) < 100000 ? 6 \ : -1000000 < (min) && (max) < 1000000 ? 7 \ : INT_STRLEN_BOUND (int) /* not a tight bound */) /* A reasonably tight bound on the length of a type-T floating value formatted with ftoastr etc. Room is needed for sign, fraction digits, decimal point, "e", and exponent. POINTLEN should be a reasonably tight bound on the string length of the decimal point. */ #define _GL_FLOAT_STRLEN_BOUND_L(t, pointlen) \ (1 + _GL_##t##_PREC_BOUND + pointlen + 1 \ + _GL_FLOAT_EXPONENT_STRLEN_BOUND (t##_MIN_10_EXP, t##_MAX_10_EXP)) #define FLT_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L ( FLT, pointlen) #define DBL_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L ( DBL, pointlen) #define LDBL_STRLEN_BOUND_L(pointlen) _GL_FLOAT_STRLEN_BOUND_L (LDBL, pointlen) /* Looser bounds that are locale-independent and are integral constant expressions. */ #define FLT_STRLEN_BOUND FLT_STRLEN_BOUND_L (MB_LEN_MAX) #define DBL_STRLEN_BOUND DBL_STRLEN_BOUND_L (MB_LEN_MAX) #define LDBL_STRLEN_BOUND LDBL_STRLEN_BOUND_L (MB_LEN_MAX) /* Looser, locale-independent bounds that include the trailing null byte. */ #define FLT_BUFSIZE_BOUND ( FLT_STRLEN_BOUND + 1) #define DBL_BUFSIZE_BOUND ( DBL_STRLEN_BOUND + 1) #define LDBL_BUFSIZE_BOUND (LDBL_STRLEN_BOUND + 1) #endif /* _GL_FTOASTR_H */ ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ftruncate.c�������������������������������������������������������������0000664�0000000�0000000�00000011740�14110572173�0017207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ftruncate emulations for native Windows. Copyright (C) 1992-2021 Free Software Foundation, Inc. This 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, 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> /* Specification. */ #include <unistd.h> #if HAVE__CHSIZE /* A native Windows platform. */ # include <errno.h> # if _GL_WINDOWS_64_BIT_OFF_T /* Large File Support: off_t is 64-bit, but _chsize() takes only a 32-bit argument. So, define a 64-bit safe SetFileSize function ourselves. */ /* Ensure that <windows.h> declares GetFileSizeEx. */ # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN2K) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN2K # endif /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static BOOL SetFileSize (HANDLE h, LONGLONG size) { LARGE_INTEGER old_size; if (!GetFileSizeEx (h, &old_size)) return FALSE; if (size != old_size.QuadPart) { /* Duplicate the handle, so we are free to modify its file position. */ HANDLE curr_process = GetCurrentProcess (); HANDLE tmph; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ h, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &tmph, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ FALSE, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ return FALSE; if (size < old_size.QuadPart) { /* Reduce the size. */ LONG size_hi = (LONG) (size >> 32); if (SetFilePointer (tmph, (LONG) size, &size_hi, FILE_BEGIN) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } if (!SetEndOfFile (tmph)) { CloseHandle (tmph); return FALSE; } } else { /* Increase the size by adding zero bytes at the end. */ static char zero_bytes[1024]; LONG pos_hi = 0; LONG pos_lo = SetFilePointer (tmph, (LONG) 0, &pos_hi, FILE_END); LONGLONG pos; if (pos_lo == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } pos = ((LONGLONG) pos_hi << 32) | (ULONGLONG) (ULONG) pos_lo; while (pos < size) { DWORD written; LONGLONG count = size - pos; if (count > sizeof (zero_bytes)) count = sizeof (zero_bytes); if (!WriteFile (tmph, zero_bytes, (DWORD) count, &written, NULL) || written == 0) { CloseHandle (tmph); return FALSE; } pos += (ULONGLONG) (ULONG) written; } } /* Close the handle. */ CloseHandle (tmph); } return TRUE; } int ftruncate (int fd, off_t length) { HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (length < 0) { errno = EINVAL; return -1; } if (!SetFileSize (handle, length)) { switch (GetLastError ()) { case ERROR_ACCESS_DENIED: errno = EACCES; break; case ERROR_HANDLE_DISK_FULL: case ERROR_DISK_FULL: case ERROR_DISK_TOO_FRAGMENTED: errno = ENOSPC; break; default: errno = EIO; break; } return -1; } return 0; } # else # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" static int chsize_nothrow (int fd, long length) { int result; TRY_MSVC_INVAL { result = _chsize (fd, length); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define chsize_nothrow _chsize # endif int ftruncate (int fd, off_t length) { return chsize_nothrow (fd, length); } # endif #endif ��������������������������������gnulib-20210822~d383792/lib/fts-cycle.c�������������������������������������������������������������0000664�0000000�0000000�00000010266�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect cycles in file tree walks. Copyright (C) 2003-2006, 2009-2021 Free Software Foundation, Inc. Written by Jim Meyering. This 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 "cycle-check.h" #include "hash.h" /* Use each of these to map a device/inode pair to an FTSENT. */ struct Active_dir { dev_t dev; ino_t ino; FTSENT *fts_ent; }; static bool AD_compare (void const *x, void const *y) { struct Active_dir const *ax = x; struct Active_dir const *ay = y; return ax->ino == ay->ino && ax->dev == ay->dev; } static size_t AD_hash (void const *x, size_t table_size) { struct Active_dir const *ax = x; return (uintmax_t) ax->ino % table_size; } /* Set up the cycle-detection machinery. */ static bool setup_dir (FTS *fts) { if (fts->fts_options & (FTS_TIGHT_CYCLE_CHECK | FTS_LOGICAL)) { enum { HT_INITIAL_SIZE = 31 }; fts->fts_cycle.ht = hash_initialize (HT_INITIAL_SIZE, NULL, AD_hash, AD_compare, free); if (! fts->fts_cycle.ht) return false; } else { fts->fts_cycle.state = malloc (sizeof *fts->fts_cycle.state); if (! fts->fts_cycle.state) return false; cycle_check_init (fts->fts_cycle.state); } return true; } /* Enter a directory during a file tree walk. */ static bool enter_dir (FTS *fts, FTSENT *ent) { if (fts->fts_options & (FTS_TIGHT_CYCLE_CHECK | FTS_LOGICAL)) { struct stat const *st = ent->fts_statp; struct Active_dir *ad = malloc (sizeof *ad); struct Active_dir *ad_from_table; if (!ad) return false; ad->dev = st->st_dev; ad->ino = st->st_ino; ad->fts_ent = ent; /* See if we've already encountered this directory. This can happen when following symlinks as well as with a corrupted directory hierarchy. */ ad_from_table = hash_insert (fts->fts_cycle.ht, ad); if (ad_from_table != ad) { free (ad); if (!ad_from_table) return false; /* There was an entry with matching dev/inode already in the table. Record the fact that we've found a cycle. */ ent->fts_cycle = ad_from_table->fts_ent; ent->fts_info = FTS_DC; } } else { if (cycle_check (fts->fts_cycle.state, ent->fts_statp)) { /* FIXME: setting fts_cycle like this isn't proper. To do what the documentation requires, we'd have to go around the cycle again and find the right entry. But no callers in coreutils use the fts_cycle member. */ ent->fts_cycle = ent; ent->fts_info = FTS_DC; } } return true; } /* Leave a directory during a file tree walk. */ static void leave_dir (FTS *fts, FTSENT *ent) { struct stat const *st = ent->fts_statp; if (fts->fts_options & (FTS_TIGHT_CYCLE_CHECK | FTS_LOGICAL)) { struct Active_dir obj; void *found; obj.dev = st->st_dev; obj.ino = st->st_ino; found = hash_remove (fts->fts_cycle.ht, &obj); if (!found) abort (); free (found); } else { FTSENT *parent = ent->fts_parent; if (parent != NULL && 0 <= parent->fts_level) CYCLE_CHECK_REFLECT_CHDIR_UP (fts->fts_cycle.state, *(parent->fts_statp), *st); } } /* Free any memory used for cycle detection. */ static void free_dir (FTS *sp) { if (sp->fts_options & (FTS_TIGHT_CYCLE_CHECK | FTS_LOGICAL)) { if (sp->fts_cycle.ht) hash_free (sp->fts_cycle.ht); } else free (sp->fts_cycle.state); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fts.c�������������������������������������������������������������������0000664�0000000�0000000�00000217404�14110572173�0016015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Traverse a file hierarchy. Copyright (C) 2004-2021 Free Software Foundation, Inc. This 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/>. */ /*- * Copyright (c) 1990, 1993, 1994 * The 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. */ #include <config.h> #if defined LIBC_SCCS && !defined GCC_LINT && !defined lint static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; #endif #include "fts_.h" #if HAVE_SYS_PARAM_H || defined _LIBC # include <sys/param.h> #endif #ifdef _LIBC # include <include/sys/stat.h> #else # include <sys/stat.h> #endif #include <fcntl.h> #include <errno.h> #include <stdalign.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if ! _LIBC # include "attribute.h" # include "fcntl--.h" # include "flexmember.h" # include "openat.h" # include "opendirat.h" # include "same-inode.h" #endif #include <dirent.h> #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name) #endif #if HAVE_STRUCT_DIRENT_D_TYPE /* True if the type of the directory entry D is known. */ # define DT_IS_KNOWN(d) ((d)->d_type != DT_UNKNOWN) /* True if the type of the directory entry D must be T. */ # define DT_MUST_BE(d, t) ((d)->d_type == (t)) # define D_TYPE(d) ((d)->d_type) #else # define DT_IS_KNOWN(d) false # define DT_MUST_BE(d, t) false # define D_TYPE(d) DT_UNKNOWN # undef DT_UNKNOWN # define DT_UNKNOWN 0 /* Any nonzero values will do here, so long as they're distinct. Undef any existing macros out of the way. */ # undef DT_BLK # undef DT_CHR # undef DT_DIR # undef DT_FIFO # undef DT_LNK # undef DT_REG # undef DT_SOCK # define DT_BLK 1 # define DT_CHR 2 # define DT_DIR 3 # define DT_FIFO 4 # define DT_LNK 5 # define DT_REG 6 # define DT_SOCK 7 #endif #ifndef S_IFLNK # define S_IFLNK 0 #endif #ifndef S_IFSOCK # define S_IFSOCK 0 #endif enum { NOT_AN_INODE_NUMBER = 0 }; #ifdef D_INO_IN_DIRENT # define D_INO(dp) (dp)->d_ino #else /* Some systems don't have inodes, so fake them to avoid lots of ifdefs. */ # define D_INO(dp) NOT_AN_INODE_NUMBER #endif /* If possible (see max_entries, below), read no more than this many directory entries at a time. Without this limit (i.e., when using non-NULL fts_compar), processing a directory with 4,000,000 entries requires ~1GiB of memory, and handling 64M entries would require 16GiB of memory. */ #ifndef FTS_MAX_READDIR_ENTRIES # define FTS_MAX_READDIR_ENTRIES 100000 #endif /* If there are more than this many entries in a directory, and the conditions mentioned below are satisfied, then sort the entries on inode number before any further processing. */ #ifndef FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD # define FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD 10000 #endif enum { _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD = FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD }; enum Fts_stat { FTS_NO_STAT_REQUIRED = 1, FTS_STAT_REQUIRED = 2 }; #ifdef _LIBC # undef close # define close __close # undef closedir # define closedir __closedir # undef fchdir # define fchdir __fchdir # undef open # define open __open # undef readdir # define readdir __readdir #else # undef internal_function # define internal_function /* empty */ #endif #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif /* If this host provides the openat function, then we can avoid attempting to open "." in some initialization code below. */ #ifdef HAVE_OPENAT # define HAVE_OPENAT_SUPPORT 1 #else # define HAVE_OPENAT_SUPPORT 0 #endif #ifdef NDEBUG # define fts_assert(expr) ((void) (0 && (expr))) #else # define fts_assert(expr) \ do \ { \ if (!(expr)) \ abort (); \ } \ while (false) #endif #ifdef _LIBC # if __GNUC__ >= 7 # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #endif static FTSENT *fts_alloc (FTS *, const char *, size_t) internal_function; static FTSENT *fts_build (FTS *, int) internal_function; static void fts_lfree (FTSENT *) internal_function; static void fts_load (FTS *, FTSENT *) internal_function; static size_t fts_maxarglen (char * const *) internal_function; static void fts_padjust (FTS *, FTSENT *) internal_function; static bool fts_palloc (FTS *, size_t) internal_function; static FTSENT *fts_sort (FTS *, FTSENT *, size_t) internal_function; static unsigned short int fts_stat (FTS *, FTSENT *, bool) internal_function; static int fts_safe_changedir (FTS *, FTSENT *, int, const char *) internal_function; #include "fts-cycle.c" #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) #define STREQ(a, b) (strcmp (a, b) == 0) #define CLR(opt) (sp->fts_options &= ~(opt)) #define ISSET(opt) (sp->fts_options & (opt)) #define SET(opt) (sp->fts_options |= (opt)) /* FIXME: FTS_NOCHDIR is now misnamed. Call it FTS_USE_FULL_RELATIVE_FILE_NAMES instead. */ #define FCHDIR(sp, fd) \ (!ISSET(FTS_NOCHDIR) && (ISSET(FTS_CWDFD) \ ? (cwd_advance_fd ((sp), (fd), true), 0) \ : fchdir (fd))) /* fts_build flags */ /* FIXME: make this an enum */ #define BCHILD 1 /* fts_children */ #define BNAMES 2 /* fts_children, names only */ #define BREAD 3 /* fts_read */ #if FTS_DEBUG # include <inttypes.h> # include <stdint.h> # include <stdio.h> # include "getcwdat.h" bool fts_debug = false; # define Dprintf(x) do { if (fts_debug) printf x; } while (false) #else # define Dprintf(x) # define fd_ring_check(x) # define fd_ring_print(a, b, c) #endif #define LEAVE_DIR(Fts, Ent, Tag) \ do \ { \ Dprintf ((" %s-leaving: %s\n", Tag, (Ent)->fts_path)); \ leave_dir (Fts, Ent); \ fd_ring_check (Fts); \ } \ while (false) static void fd_ring_clear (I_ring *fd_ring) { while ( ! i_ring_empty (fd_ring)) { int fd = i_ring_pop (fd_ring); if (0 <= fd) close (fd); } } /* Overload the fts_statp->st_size member (otherwise unused, when fts_info is FTS_NSOK) to indicate whether fts_read should stat this entry or not. */ static void fts_set_stat_required (FTSENT *p, bool required) { fts_assert (p->fts_info == FTS_NSOK); p->fts_statp->st_size = (required ? FTS_STAT_REQUIRED : FTS_NO_STAT_REQUIRED); } /* Virtual fchdir. Advance SP's working directory file descriptor, SP->fts_cwd_fd, to FD, and push the previous value onto the fd_ring. CHDIR_DOWN_ONE is true if FD corresponds to an entry in the directory open on sp->fts_cwd_fd; i.e., to move the working directory one level down. */ static void internal_function cwd_advance_fd (FTS *sp, int fd, bool chdir_down_one) { int old = sp->fts_cwd_fd; fts_assert (old != fd || old == AT_FDCWD); if (chdir_down_one) { /* Push "old" onto the ring. If the displaced file descriptor is non-negative, close it. */ int prev_fd_in_slot = i_ring_push (&sp->fts_fd_ring, old); fd_ring_print (sp, stderr, "post-push"); if (0 <= prev_fd_in_slot) close (prev_fd_in_slot); /* ignore any close failure */ } else if ( ! ISSET (FTS_NOCHDIR)) { if (0 <= old) close (old); /* ignore any close failure */ } sp->fts_cwd_fd = fd; } /* Restore the initial, pre-traversal, "working directory". In FTS_CWDFD mode, we merely call cwd_advance_fd, otherwise, we may actually change the working directory. Return 0 upon success. Upon failure, set errno and return nonzero. */ static int restore_initial_cwd (FTS *sp) { int fail = FCHDIR (sp, ISSET (FTS_CWDFD) ? AT_FDCWD : sp->fts_rfd); fd_ring_clear (&(sp->fts_fd_ring)); return fail; } /* Open the directory DIR if possible, and return a file descriptor. Return -1 and set errno on failure. It doesn't matter whether the file descriptor has read or write access. */ static int internal_function diropen (FTS const *sp, char const *dir) { int open_flags = (O_SEARCH | O_CLOEXEC | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0)); int fd = (ISSET (FTS_CWDFD) ? openat (sp->fts_cwd_fd, dir, open_flags) : open (dir, open_flags)); return fd; } FTS * fts_open (char * const *argv, register int options, int (*compar) (FTSENT const **, FTSENT const **)) { register FTS *sp; register FTSENT *p, *root; register size_t nitems; FTSENT *parent = NULL; FTSENT *tmp = NULL; /* pacify gcc */ bool defer_stat; /* Options check. */ if (options & ~FTS_OPTIONMASK) { __set_errno (EINVAL); return (NULL); } if ((options & FTS_NOCHDIR) && (options & FTS_CWDFD)) { __set_errno (EINVAL); return (NULL); } if ( ! (options & (FTS_LOGICAL | FTS_PHYSICAL))) { __set_errno (EINVAL); return (NULL); } /* Allocate/initialize the stream */ sp = calloc (1, sizeof *sp); if (sp == NULL) return (NULL); sp->fts_compar = compar; sp->fts_options = options; /* Logical walks turn on NOCHDIR; symbolic links are too hard. */ if (ISSET(FTS_LOGICAL)) { SET(FTS_NOCHDIR); CLR(FTS_CWDFD); } /* Initialize fts_cwd_fd. */ sp->fts_cwd_fd = AT_FDCWD; if ( ISSET(FTS_CWDFD) && ! HAVE_OPENAT_SUPPORT) { /* While it isn't technically necessary to open "." this early, doing it here saves us the trouble of ensuring later (where it'd be messier) that "." can in fact be opened. If not, revert to FTS_NOCHDIR mode. */ int fd = open (".", O_SEARCH | O_CLOEXEC); if (fd < 0) { /* Even if "." is unreadable, don't revert to FTS_NOCHDIR mode on systems like Linux+PROC_FS, where our openat emulation is good enough. Note: on a system that emulates openat via /proc, this technique can still fail, but only in extreme conditions, e.g., when the working directory cannot be saved (i.e. save_cwd fails) -- and that happens on Linux only when "." is unreadable and the CWD would be longer than PATH_MAX. FIXME: once Linux kernel openat support is well established, replace the above open call and this entire if/else block with the body of the if-block below. */ if ( openat_needs_fchdir ()) { SET(FTS_NOCHDIR); CLR(FTS_CWDFD); } } else { close (fd); } } /* * Start out with 1K of file name space, and enough, in any case, * to hold the user's file names. */ #ifndef MAXPATHLEN # define MAXPATHLEN 1024 #endif { size_t maxarglen = fts_maxarglen(argv); if (! fts_palloc(sp, MAX(maxarglen, MAXPATHLEN))) goto mem1; } /* Allocate/initialize root's parent. */ if (*argv != NULL) { if ((parent = fts_alloc(sp, "", 0)) == NULL) goto mem2; parent->fts_level = FTS_ROOTPARENTLEVEL; } /* The classic fts implementation would call fts_stat with a new entry for each iteration of the loop below. If the comparison function is not specified or if the FTS_DEFER_STAT option is in effect, don't stat any entry in this loop. This is an attempt to minimize the interval between the initial stat/lstat/fstatat and the point at which a directory argument is first opened. This matters for any directory command line argument that resides on a file system without genuine i-nodes. If you specify FTS_DEFER_STAT along with a comparison function, that function must not access any data via the fts_statp pointer. */ defer_stat = (compar == NULL || ISSET(FTS_DEFER_STAT)); /* Allocate/initialize root(s). */ for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { /* *Do* allow zero-length file names. */ size_t len = strlen(*argv); if ( ! (options & FTS_VERBATIM)) { /* If there are two or more trailing slashes, trim all but one, but don't change "//" to "/", and do map "///" to "/". */ char const *v = *argv; if (2 < len && v[len - 1] == '/') while (1 < len && v[len - 2] == '/') --len; } if ((p = fts_alloc(sp, *argv, len)) == NULL) goto mem3; p->fts_level = FTS_ROOTLEVEL; p->fts_parent = parent; p->fts_accpath = p->fts_name; /* Even when defer_stat is true, be sure to stat the first command line argument, since fts_read (at least with FTS_XDEV) requires that. */ if (defer_stat && root != NULL) { p->fts_info = FTS_NSOK; fts_set_stat_required(p, true); } else { p->fts_info = fts_stat(sp, p, false); } /* * If comparison routine supplied, traverse in sorted * order; otherwise traverse in the order specified. */ if (compar) { p->fts_link = root; root = p; } else { p->fts_link = NULL; if (root == NULL) tmp = root = p; else { tmp->fts_link = p; tmp = p; } } } if (compar && nitems > 1) root = fts_sort(sp, root, nitems); /* * Allocate a dummy pointer and make fts_read think that we've just * finished the node before the root(s); set p->fts_info to FTS_INIT * so that everything about the "current" node is ignored. */ if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL) goto mem3; sp->fts_cur->fts_link = root; sp->fts_cur->fts_info = FTS_INIT; sp->fts_cur->fts_level = 1; if (! setup_dir (sp)) goto mem3; /* * If using chdir(2), grab a file descriptor pointing to dot to ensure * that we can get back here; this could be avoided for some file names, * but almost certainly not worth the effort. Slashes, symbolic links, * and ".." are all fairly nasty problems. Note, if we can't get the * descriptor we run anyway, just more slowly. */ if (!ISSET(FTS_NOCHDIR) && !ISSET(FTS_CWDFD) && (sp->fts_rfd = diropen (sp, ".")) < 0) SET(FTS_NOCHDIR); i_ring_init (&sp->fts_fd_ring, -1); return (sp); mem3: fts_lfree(root); free(parent); mem2: free(sp->fts_path); mem1: free(sp); return (NULL); } static void internal_function fts_load (FTS *sp, register FTSENT *p) { register size_t len; register char *cp; /* * Load the stream structure for the next traversal. Since we don't * actually enter the directory until after the preorder visit, set * the fts_accpath field specially so the chdir gets done to the right * place and the user can access the first node. From fts_open it's * known that the file name will fit. */ len = p->fts_pathlen = p->fts_namelen; memmove(sp->fts_path, p->fts_name, len + 1); if ((cp = strrchr(p->fts_name, '/')) && (cp != p->fts_name || cp[1])) { len = strlen(++cp); memmove(p->fts_name, cp, len + 1); p->fts_namelen = len; } p->fts_accpath = p->fts_path = sp->fts_path; } int fts_close (FTS *sp) { register FTSENT *freep, *p; int saved_errno = 0; /* * This still works if we haven't read anything -- the dummy structure * points to the root list, so we step through to the end of the root * list which has a valid parent pointer. */ if (sp->fts_cur) { for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) { freep = p; p = p->fts_link != NULL ? p->fts_link : p->fts_parent; free(freep); } free(p); } /* Free up child linked list, sort array, file name buffer. */ if (sp->fts_child) fts_lfree(sp->fts_child); free(sp->fts_array); free(sp->fts_path); if (ISSET(FTS_CWDFD)) { if (0 <= sp->fts_cwd_fd) if (close (sp->fts_cwd_fd)) saved_errno = errno; } else if (!ISSET(FTS_NOCHDIR)) { /* Return to original directory, save errno if necessary. */ if (fchdir(sp->fts_rfd)) saved_errno = errno; /* If close fails, record errno only if saved_errno is zero, so that we report the probably-more-meaningful fchdir errno. */ if (close (sp->fts_rfd)) if (saved_errno == 0) saved_errno = errno; } fd_ring_clear (&sp->fts_fd_ring); if (sp->fts_leaf_optimization_works_ht) hash_free (sp->fts_leaf_optimization_works_ht); free_dir (sp); /* Free up the stream pointer. */ free(sp); /* Set errno and return. */ if (saved_errno) { __set_errno (saved_errno); return (-1); } return (0); } /* Minimum link count of a traditional Unix directory. When leaf optimization is OK and a directory's st_nlink == MIN_DIR_NLINK, then the directory has no subdirectories. */ enum { MIN_DIR_NLINK = 2 }; /* Whether leaf optimization is OK for a directory. */ enum leaf_optimization { /* st_nlink is not reliable for this directory's subdirectories. */ NO_LEAF_OPTIMIZATION, /* st_nlink == 2 means the directory lacks subdirectories. */ OK_LEAF_OPTIMIZATION }; #if (defined __linux__ || defined __ANDROID__) \ && HAVE_SYS_VFS_H && HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE # include <sys/vfs.h> /* Linux-specific constants from coreutils' src/fs.h */ # define S_MAGIC_AFS 0x5346414F # define S_MAGIC_CIFS 0xFF534D42 # define S_MAGIC_NFS 0x6969 # define S_MAGIC_PROC 0x9FA0 # define S_MAGIC_TMPFS 0x1021994 # ifdef HAVE___FSWORD_T typedef __fsword_t fsword; # else typedef long int fsword; # endif /* Map a stat.st_dev number to a file system type number f_ftype. */ struct dev_type { dev_t st_dev; fsword f_type; }; /* Use a tiny initial size. If a traversal encounters more than a few devices, the cost of growing/rehashing this table will be rendered negligible by the number of inodes processed. */ enum { DEV_TYPE_HT_INITIAL_SIZE = 13 }; static size_t dev_type_hash (void const *x, size_t table_size) { struct dev_type const *ax = x; uintmax_t dev = ax->st_dev; return dev % table_size; } static bool dev_type_compare (void const *x, void const *y) { struct dev_type const *ax = x; struct dev_type const *ay = y; return ax->st_dev == ay->st_dev; } /* Return the file system type of P with file descriptor FD, or 0 if not known. If FD is negative, P's file descriptor is unavailable. Try to cache known values. */ static fsword filesystem_type (FTSENT const *p, int fd) { FTS *sp = p->fts_fts; Hash_table *h = sp->fts_leaf_optimization_works_ht; struct dev_type *ent; struct statfs fs_buf; /* If we're not in CWDFD mode, don't bother with this optimization, since the caller is not serious about performance. */ if (!ISSET (FTS_CWDFD)) return 0; if (! h) h = sp->fts_leaf_optimization_works_ht = hash_initialize (DEV_TYPE_HT_INITIAL_SIZE, NULL, dev_type_hash, dev_type_compare, free); if (h) { struct dev_type tmp; tmp.st_dev = p->fts_statp->st_dev; ent = hash_lookup (h, &tmp); if (ent) return ent->f_type; } /* Look-up failed. Query directly and cache the result. */ if (fd < 0 || fstatfs (fd, &fs_buf) != 0) return 0; if (h) { struct dev_type *t2 = malloc (sizeof *t2); if (t2) { t2->st_dev = p->fts_statp->st_dev; t2->f_type = fs_buf.f_type; ent = hash_insert (h, t2); if (ent) fts_assert (ent == t2); else free (t2); } } return fs_buf.f_type; } /* Return true if sorting dirents on inode numbers is known to improve traversal performance for the directory P with descriptor DIR_FD. Return false otherwise. When in doubt, return true. DIR_FD is negative if unavailable. */ static bool dirent_inode_sort_may_be_useful (FTSENT const *p, int dir_fd) { /* Skip the sort only if we can determine efficiently that skipping it is the right thing to do. The cost of performing an unnecessary sort is negligible, while the cost of *not* performing it can be O(N^2) with a very large constant. */ switch (filesystem_type (p, dir_fd)) { case S_MAGIC_CIFS: case S_MAGIC_NFS: case S_MAGIC_TMPFS: /* On a file system of any of these types, sorting is unnecessary, and hence wasteful. */ return false; default: return true; } } /* Given an FTS entry P for a directory with descriptor DIR_FD, return whether it is valid to apply leaf optimization. The optimization is valid if a directory's st_nlink value equal to MIN_DIR_NLINK means the directory has no subdirectories. DIR_FD is negative if unavailable. */ static enum leaf_optimization leaf_optimization (FTSENT const *p, int dir_fd) { switch (filesystem_type (p, dir_fd)) { case 0: /* Leaf optimization is unsafe if the file system type is unknown. */ FALLTHROUGH; case S_MAGIC_AFS: /* Although AFS mount points are not counted in st_nlink, they act like directories. See <https://bugs.debian.org/143111>. */ FALLTHROUGH; case S_MAGIC_CIFS: /* Leaf optimization causes 'find' to abort. See <https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html>. */ FALLTHROUGH; case S_MAGIC_NFS: /* NFS provides usable dirent.d_type but not necessarily for all entries of large directories, so as per <https://bugzilla.redhat.com/1252549> NFS should return true. However st_nlink values are not accurate on all implementations as per <https://bugzilla.redhat.com/1299169>. */ FALLTHROUGH; case S_MAGIC_PROC: /* Per <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=143111> /proc may have bogus stat.st_nlink values. */ return NO_LEAF_OPTIMIZATION; default: return OK_LEAF_OPTIMIZATION; } } #else static bool dirent_inode_sort_may_be_useful (_GL_UNUSED FTSENT const *p, _GL_UNUSED int dir_fd) { return true; } static enum leaf_optimization leaf_optimization (_GL_UNUSED FTSENT const *p, _GL_UNUSED int dir_fd) { return NO_LEAF_OPTIMIZATION; } #endif /* * Special case of "/" at the end of the file name so that slashes aren't * appended which would cause file names to be written as "....//foo". */ #define NAPPEND(p) \ (p->fts_path[p->fts_pathlen - 1] == '/' \ ? p->fts_pathlen - 1 : p->fts_pathlen) FTSENT * fts_read (register FTS *sp) { register FTSENT *p, *tmp; register unsigned short int instr; register char *t; /* If finished or unrecoverable error, return NULL. */ if (sp->fts_cur == NULL || ISSET(FTS_STOP)) return (NULL); /* Set current node pointer. */ p = sp->fts_cur; /* Save and zero out user instructions. */ instr = p->fts_instr; p->fts_instr = FTS_NOINSTR; /* Any type of file may be re-visited; re-stat and re-turn. */ if (instr == FTS_AGAIN) { p->fts_info = fts_stat(sp, p, false); return (p); } Dprintf (("fts_read: p=%s\n", p->fts_info == FTS_INIT ? "" : p->fts_path)); /* * Following a symlink -- SLNONE test allows application to see * SLNONE and recover. If indirecting through a symlink, have * keep a pointer to current location. If unable to get that * pointer, follow fails. */ if (instr == FTS_FOLLOW && (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { p->fts_info = fts_stat(sp, p, true); if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { if ((p->fts_symfd = diropen (sp, ".")) < 0) { p->fts_errno = errno; p->fts_info = FTS_ERR; } else p->fts_flags |= FTS_SYMFOLLOW; } goto check_for_dir; } /* Directory in pre-order. */ if (p->fts_info == FTS_D) { /* If skipped or crossed mount point, do post-order visit. */ if (instr == FTS_SKIP || (ISSET(FTS_XDEV) && p->fts_statp->st_dev != sp->fts_dev)) { if (p->fts_flags & FTS_SYMFOLLOW) (void)close(p->fts_symfd); if (sp->fts_child) { fts_lfree(sp->fts_child); sp->fts_child = NULL; } p->fts_info = FTS_DP; LEAVE_DIR (sp, p, "1"); return (p); } /* Rebuild if only read the names and now traversing. */ if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) { CLR(FTS_NAMEONLY); fts_lfree(sp->fts_child); sp->fts_child = NULL; } /* * Cd to the subdirectory. * * If have already read and now fail to chdir, whack the list * to make the names come out right, and set the parent errno * so the application will eventually get an error condition. * Set the FTS_DONTCHDIR flag so that when we logically change * directories back to the parent we don't do a chdir. * * If haven't read do so. If the read fails, fts_build sets * FTS_STOP or the fts_info field of the node. */ if (sp->fts_child != NULL) { if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) { p->fts_errno = errno; p->fts_flags |= FTS_DONTCHDIR; for (p = sp->fts_child; p != NULL; p = p->fts_link) p->fts_accpath = p->fts_parent->fts_accpath; } } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) { if (ISSET(FTS_STOP)) return (NULL); /* If fts_build's call to fts_safe_changedir failed because it was not able to fchdir into a subdirectory, tell the caller. */ if (p->fts_errno && p->fts_info != FTS_DNR) p->fts_info = FTS_ERR; LEAVE_DIR (sp, p, "2"); return (p); } p = sp->fts_child; sp->fts_child = NULL; goto name; } /* Move to the next node on this level. */ next: tmp = p; /* If we have so many directory entries that we're reading them in batches, and we've reached the end of the current batch, read in a new batch. */ if (p->fts_link == NULL && p->fts_parent->fts_dirp) { p = tmp->fts_parent; sp->fts_cur = p; sp->fts_path[p->fts_pathlen] = '\0'; if ((p = fts_build (sp, BREAD)) == NULL) { if (ISSET(FTS_STOP)) return NULL; goto cd_dot_dot; } free(tmp); goto name; } if ((p = p->fts_link) != NULL) { sp->fts_cur = p; free(tmp); /* * If reached the top, return to the original directory (or * the root of the tree), and load the file names for the next * root. */ if (p->fts_level == FTS_ROOTLEVEL) { if (restore_initial_cwd(sp)) { SET(FTS_STOP); return (NULL); } free_dir(sp); fts_load(sp, p); setup_dir(sp); goto check_for_dir; } /* * User may have called fts_set on the node. If skipped, * ignore. If followed, get a file descriptor so we can * get back if necessary. */ if (p->fts_instr == FTS_SKIP) goto next; if (p->fts_instr == FTS_FOLLOW) { p->fts_info = fts_stat(sp, p, true); if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { if ((p->fts_symfd = diropen (sp, ".")) < 0) { p->fts_errno = errno; p->fts_info = FTS_ERR; } else p->fts_flags |= FTS_SYMFOLLOW; } p->fts_instr = FTS_NOINSTR; } name: t = sp->fts_path + NAPPEND(p->fts_parent); *t++ = '/'; memmove(t, p->fts_name, p->fts_namelen + 1); check_for_dir: sp->fts_cur = p; if (p->fts_info == FTS_NSOK) { if (p->fts_statp->st_size == FTS_STAT_REQUIRED) p->fts_info = fts_stat(sp, p, false); else fts_assert (p->fts_statp->st_size == FTS_NO_STAT_REQUIRED); } if (p->fts_info == FTS_D) { /* Now that P->fts_statp is guaranteed to be valid, if this is a command-line directory, record its device number, to be used for FTS_XDEV. */ if (p->fts_level == FTS_ROOTLEVEL) sp->fts_dev = p->fts_statp->st_dev; Dprintf ((" entering: %s\n", p->fts_path)); if (! enter_dir (sp, p)) { __set_errno (ENOMEM); return NULL; } } return p; } cd_dot_dot: /* Move up to the parent node. */ p = tmp->fts_parent; sp->fts_cur = p; free(tmp); if (p->fts_level == FTS_ROOTPARENTLEVEL) { /* * Done; free everything up and set errno to 0 so the user * can distinguish between error and EOF. */ free(p); __set_errno (0); return (sp->fts_cur = NULL); } fts_assert (p->fts_info != FTS_NSOK); /* NUL terminate the file name. */ sp->fts_path[p->fts_pathlen] = '\0'; /* * Return to the parent directory. If at a root node, restore * the initial working directory. If we came through a symlink, * go back through the file descriptor. Otherwise, move up * one level, via "..". */ if (p->fts_level == FTS_ROOTLEVEL) { if (restore_initial_cwd(sp)) { p->fts_errno = errno; SET(FTS_STOP); } } else if (p->fts_flags & FTS_SYMFOLLOW) { if (FCHDIR(sp, p->fts_symfd)) { p->fts_errno = errno; SET(FTS_STOP); } (void)close(p->fts_symfd); } else if (!(p->fts_flags & FTS_DONTCHDIR) && fts_safe_changedir(sp, p->fts_parent, -1, "..")) { p->fts_errno = errno; SET(FTS_STOP); } /* If the directory causes a cycle, preserve the FTS_DC flag and keep the corresponding dev/ino pair in the hash table. It is going to be removed when leaving the original directory. */ if (p->fts_info != FTS_DC) { p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP; if (p->fts_errno == 0) LEAVE_DIR (sp, p, "3"); } return ISSET(FTS_STOP) ? NULL : p; } /* * Fts_set takes the stream as an argument although it's not used in this * implementation; it would be necessary if anyone wanted to add global * semantics to fts using fts_set. An error return is allowed for similar * reasons. */ /* ARGSUSED */ int fts_set(_GL_UNUSED FTS *sp, FTSENT *p, int instr) { if (instr != 0 && instr != FTS_AGAIN && instr != FTS_FOLLOW && instr != FTS_NOINSTR && instr != FTS_SKIP) { __set_errno (EINVAL); return (1); } p->fts_instr = instr; return (0); } FTSENT * fts_children (register FTS *sp, int instr) { register FTSENT *p; int fd; if (instr != 0 && instr != FTS_NAMEONLY) { __set_errno (EINVAL); return (NULL); } /* Set current node pointer. */ p = sp->fts_cur; /* * Errno set to 0 so user can distinguish empty directory from * an error. */ __set_errno (0); /* Fatal errors stop here. */ if (ISSET(FTS_STOP)) return (NULL); /* Return logical hierarchy of user's arguments. */ if (p->fts_info == FTS_INIT) return (p->fts_link); /* * If not a directory being visited in pre-order, stop here. Could * allow FTS_DNR, assuming the user has fixed the problem, but the * same effect is available with FTS_AGAIN. */ if (p->fts_info != FTS_D /* && p->fts_info != FTS_DNR */) return (NULL); /* Free up any previous child list. */ if (sp->fts_child != NULL) fts_lfree(sp->fts_child); if (instr == FTS_NAMEONLY) { SET(FTS_NAMEONLY); instr = BNAMES; } else instr = BCHILD; /* * If using chdir on a relative file name and called BEFORE fts_read * does its chdir to the root of a traversal, we can lose -- we need to * chdir into the subdirectory, and we don't know where the current * directory is, so we can't get back so that the upcoming chdir by * fts_read will work. */ if (p->fts_level != FTS_ROOTLEVEL || p->fts_accpath[0] == '/' || ISSET(FTS_NOCHDIR)) return (sp->fts_child = fts_build(sp, instr)); if ((fd = diropen (sp, ".")) < 0) return (sp->fts_child = NULL); sp->fts_child = fts_build(sp, instr); if (ISSET(FTS_CWDFD)) { cwd_advance_fd (sp, fd, true); } else { if (fchdir(fd)) { int saved_errno = errno; close (fd); __set_errno (saved_errno); return NULL; } close (fd); } return (sp->fts_child); } /* A comparison function to sort on increasing inode number. For some file system types, sorting either way makes a huge performance difference for a directory with very many entries, but sorting on increasing values is slightly better than sorting on decreasing values. The difference is in the 5% range. */ static int fts_compare_ino (struct _ftsent const **a, struct _ftsent const **b) { return _GL_CMP (a[0]->fts_statp->st_ino, b[0]->fts_statp->st_ino); } /* Map the dirent.d_type value, DTYPE, to the corresponding stat.st_mode S_IF* bit and set ST.st_mode, thus clearing all other bits in that field. */ static void set_stat_type (struct stat *st, unsigned int dtype) { mode_t type; switch (dtype) { case DT_BLK: type = S_IFBLK; break; case DT_CHR: type = S_IFCHR; break; case DT_DIR: type = S_IFDIR; break; case DT_FIFO: type = S_IFIFO; break; case DT_LNK: type = S_IFLNK; break; case DT_REG: type = S_IFREG; break; case DT_SOCK: type = S_IFSOCK; break; default: type = 0; } st->st_mode = type; } #define closedir_and_clear(dirp) \ do \ { \ closedir (dirp); \ dirp = NULL; \ } \ while (0) #define fts_opendir(file, Pdir_fd) \ opendirat((! ISSET(FTS_NOCHDIR) && ISSET(FTS_CWDFD) \ ? sp->fts_cwd_fd : AT_FDCWD), \ file, \ (((ISSET(FTS_PHYSICAL) \ && ! (ISSET(FTS_COMFOLLOW) \ && cur->fts_level == FTS_ROOTLEVEL)) \ ? O_NOFOLLOW : 0)), \ Pdir_fd) /* * This is the tricky part -- do not casually change *anything* in here. The * idea is to build the linked list of entries that are used by fts_children * and fts_read. There are lots of special cases. * * The real slowdown in walking the tree is the stat calls. If FTS_NOSTAT is * set and it's a physical walk (so that symbolic links can't be directories), * we can do things quickly. First, if it's a 4.4BSD file system, the type * of the file is in the directory entry. Otherwise, we assume that the number * of subdirectories in a node is equal to the number of links to the parent. * The former skips all stat calls. The latter skips stat calls in any leaf * directories and for any files after the subdirectories in the directory have * been found, cutting the stat calls by about 2/3. */ static FTSENT * internal_function fts_build (register FTS *sp, int type) { register FTSENT *p, *head; register size_t nitems; FTSENT *tail; void *oldaddr; int saved_errno; bool descend; bool doadjust; ptrdiff_t level; size_t len, maxlen, new_len; char *cp; int dir_fd; FTSENT *cur = sp->fts_cur; bool continue_readdir = !!cur->fts_dirp; bool sort_by_inode = false; size_t max_entries; /* When cur->fts_dirp is non-NULL, that means we should continue calling readdir on that existing DIR* pointer rather than opening a new one. */ if (continue_readdir) { DIR *dp = cur->fts_dirp; dir_fd = dirfd (dp); if (dir_fd < 0) { closedir_and_clear (cur->fts_dirp); if (type == BREAD) { cur->fts_info = FTS_DNR; cur->fts_errno = errno; } return NULL; } } else { /* Open the directory for reading. If this fails, we're done. If being called from fts_read, set the fts_info field. */ if ((cur->fts_dirp = fts_opendir(cur->fts_accpath, &dir_fd)) == NULL) { if (type == BREAD) { cur->fts_info = FTS_DNR; cur->fts_errno = errno; } return NULL; } /* Rather than calling fts_stat for each and every entry encountered in the readdir loop (below), stat each directory only right after opening it. */ if (cur->fts_info == FTS_NSOK) cur->fts_info = fts_stat(sp, cur, false); else if (sp->fts_options & FTS_TIGHT_CYCLE_CHECK) { /* Now read the stat info again after opening a directory to reveal eventual changes caused by a submount triggered by the traversal. But do it only for utilities which use FTS_TIGHT_CYCLE_CHECK. Therefore, only find and du benefit/suffer from this feature for now. */ LEAVE_DIR (sp, cur, "4"); fts_stat (sp, cur, false); if (! enter_dir (sp, cur)) { __set_errno (ENOMEM); return NULL; } } } /* Maximum number of readdir entries to read at one time. This limitation is to avoid reading millions of entries into memory at once. When an fts_compar function is specified, we have no choice: we must read all entries into memory before calling that function. But when no such function is specified, we can read entries in batches that are large enough to help us with inode- sorting, yet not so large that we risk exhausting memory. */ max_entries = sp->fts_compar ? SIZE_MAX : FTS_MAX_READDIR_ENTRIES; /* * If we're going to need to stat anything or we want to descend * and stay in the directory, chdir. If this fails we keep going, * but set a flag so we don't chdir after the post-order visit. * We won't be able to stat anything, but we can still return the * names themselves. Note, that since fts_read won't be able to * chdir into the directory, it will have to return different file * names than before, i.e. "a/b" instead of "b". Since the node * has already been visited in pre-order, have to wait until the * post-order visit to return the error. There is a special case * here, if there was nothing to stat then it's not an error to * not be able to stat. This is all fairly nasty. If a program * needed sorted entries or stat information, they had better be * checking FTS_NS on the returned nodes. */ if (continue_readdir) { /* When resuming a short readdir run, we already have the required dirp and dir_fd. */ descend = true; } else { /* Try to descend unless it is a names-only fts_children, or the directory is known to lack subdirectories. */ descend = (type != BNAMES && ! (ISSET (FTS_NOSTAT) && ISSET (FTS_PHYSICAL) && ! ISSET (FTS_SEEDOT) && cur->fts_statp->st_nlink == MIN_DIR_NLINK && (leaf_optimization (cur, dir_fd) != NO_LEAF_OPTIMIZATION))); if (descend || type == BREAD) { if (ISSET(FTS_CWDFD)) dir_fd = fcntl (dir_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) { if (descend && type == BREAD) cur->fts_errno = errno; cur->fts_flags |= FTS_DONTCHDIR; descend = false; closedir_and_clear(cur->fts_dirp); if (ISSET(FTS_CWDFD) && 0 <= dir_fd) close (dir_fd); cur->fts_dirp = NULL; } else descend = true; } } /* * Figure out the max file name length that can be stored in the * current buffer -- the inner loop allocates more space as necessary. * We really wouldn't have to do the maxlen calculations here, we * could do them in fts_read before returning the name, but it's a * lot easier here since the length is part of the dirent structure. * * If not changing directories set a pointer so that can just append * each new component into the file name. */ len = NAPPEND(cur); if (ISSET(FTS_NOCHDIR)) { cp = sp->fts_path + len; *cp++ = '/'; } else { /* GCC, you're too verbose. */ cp = NULL; } len++; maxlen = sp->fts_pathlen - len; level = cur->fts_level + 1; /* Read the directory, attaching each entry to the "link" pointer. */ doadjust = false; head = NULL; tail = NULL; nitems = 0; while (cur->fts_dirp) { size_t d_namelen; __set_errno (0); struct dirent *dp = readdir(cur->fts_dirp); if (dp == NULL) { if (errno) { cur->fts_errno = errno; /* If we've not read any items yet, treat the error as if we can't access the dir. */ cur->fts_info = (continue_readdir || nitems) ? FTS_ERR : FTS_DNR; } break; } if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) continue; d_namelen = _D_EXACT_NAMLEN (dp); p = fts_alloc (sp, dp->d_name, d_namelen); if (!p) goto mem1; if (d_namelen >= maxlen) { /* include space for NUL */ oldaddr = sp->fts_path; if (! fts_palloc(sp, d_namelen + len + 1)) { /* * No more memory. Save * errno, free up the current structure and the * structures already allocated. */ mem1: saved_errno = errno; free(p); fts_lfree(head); closedir_and_clear(cur->fts_dirp); cur->fts_info = FTS_ERR; SET(FTS_STOP); __set_errno (saved_errno); return (NULL); } /* Did realloc() change the pointer? */ if (oldaddr != sp->fts_path) { doadjust = true; if (ISSET(FTS_NOCHDIR)) cp = sp->fts_path + len; } maxlen = sp->fts_pathlen - len; } new_len = len + d_namelen; if (new_len < len) { /* * In the unlikely event that we would end up * with a file name longer than SIZE_MAX, free up * the current structure and the structures already * allocated, then error out with ENAMETOOLONG. */ free(p); fts_lfree(head); closedir_and_clear(cur->fts_dirp); cur->fts_info = FTS_ERR; SET(FTS_STOP); __set_errno (ENAMETOOLONG); return (NULL); } p->fts_level = level; p->fts_parent = sp->fts_cur; p->fts_pathlen = new_len; /* Store dirent.d_ino, in case we need to sort entries before processing them. */ p->fts_statp->st_ino = D_INO (dp); /* Build a file name for fts_stat to stat. */ if (ISSET(FTS_NOCHDIR)) { p->fts_accpath = p->fts_path; memmove(cp, p->fts_name, p->fts_namelen + 1); } else p->fts_accpath = p->fts_name; if (sp->fts_compar == NULL || ISSET(FTS_DEFER_STAT)) { /* Record what fts_read will have to do with this entry. In many cases, it will simply fts_stat it, but we can take advantage of any d_type information to optimize away the unnecessary stat calls. I.e., if FTS_NOSTAT is in effect and we're not following symlinks (FTS_PHYSICAL) and d_type indicates this is *not* a directory, then we won't have to stat it at all. If it *is* a directory, then (currently) we stat it regardless, in order to get device and inode numbers. Some day we might optimize that away, too, for directories where d_ino is known to be valid. */ bool skip_stat = (ISSET(FTS_NOSTAT) && DT_IS_KNOWN(dp) && ! DT_MUST_BE(dp, DT_DIR) && (ISSET(FTS_PHYSICAL) || ! DT_MUST_BE(dp, DT_LNK))); p->fts_info = FTS_NSOK; /* Propagate dirent.d_type information back to caller, when possible. */ set_stat_type (p->fts_statp, D_TYPE (dp)); fts_set_stat_required(p, !skip_stat); } else { p->fts_info = fts_stat(sp, p, false); } /* We walk in directory order so "ls -f" doesn't get upset. */ p->fts_link = NULL; if (head == NULL) head = tail = p; else { tail->fts_link = p; tail = p; } /* If there are many entries, no sorting function has been specified, and this file system is of a type that may be slow with a large number of entries, arrange to sort the directory entries on increasing inode numbers. The NITEMS comparison uses ==, not >, because the test needs to be tried at most once once, and NITEMS will exceed the threshold after it is incremented below. */ if (nitems == _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD && !sp->fts_compar) sort_by_inode = dirent_inode_sort_may_be_useful (cur, dir_fd); ++nitems; if (max_entries <= nitems) { /* When there are too many dir entries, leave fts_dirp open, so that a subsequent fts_read can take up where we leave off. */ goto break_without_closedir; } } if (cur->fts_dirp) closedir_and_clear(cur->fts_dirp); break_without_closedir: /* * If realloc() changed the address of the file name, adjust the * addresses for the rest of the tree and the dir list. */ if (doadjust) fts_padjust(sp, head); /* * If not changing directories, reset the file name back to original * state. */ if (ISSET(FTS_NOCHDIR)) { if (len == sp->fts_pathlen || nitems == 0) --cp; *cp = '\0'; } /* * If descended after called from fts_children or after called from * fts_read and nothing found, get back. At the root level we use * the saved fd; if one of fts_open()'s arguments is a relative name * to an empty directory, we wind up here with no other way back. If * can't get back, we're done. */ if (!continue_readdir && descend && (type == BCHILD || !nitems) && (cur->fts_level == FTS_ROOTLEVEL ? restore_initial_cwd(sp) : fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) { cur->fts_info = FTS_ERR; SET(FTS_STOP); fts_lfree(head); return (NULL); } /* If didn't find anything, return NULL. */ if (!nitems) { if (type == BREAD && cur->fts_info != FTS_DNR && cur->fts_info != FTS_ERR) cur->fts_info = FTS_DP; fts_lfree(head); return (NULL); } if (sort_by_inode) { sp->fts_compar = fts_compare_ino; head = fts_sort (sp, head, nitems); sp->fts_compar = NULL; } /* Sort the entries. */ if (sp->fts_compar && nitems > 1) head = fts_sort(sp, head, nitems); return (head); } #if FTS_DEBUG /* Walk ->fts_parent links starting at E_CURR, until the root of the current hierarchy. There should be a directory with dev/inode matching those of AD. If not, print a lot of diagnostics. */ static void find_matching_ancestor (FTSENT const *e_curr, struct Active_dir const *ad) { FTSENT const *ent; for (ent = e_curr; ent->fts_level >= FTS_ROOTLEVEL; ent = ent->fts_parent) { if (ad->ino == ent->fts_statp->st_ino && ad->dev == ent->fts_statp->st_dev) return; } printf ("ERROR: tree dir, %s, not active\n", ad->fts_ent->fts_accpath); printf ("active dirs:\n"); for (ent = e_curr; ent->fts_level >= FTS_ROOTLEVEL; ent = ent->fts_parent) printf (" %s(%"PRIuMAX"/%"PRIuMAX") to %s(%"PRIuMAX"/%"PRIuMAX")...\n", ad->fts_ent->fts_accpath, (uintmax_t) ad->dev, (uintmax_t) ad->ino, ent->fts_accpath, (uintmax_t) ent->fts_statp->st_dev, (uintmax_t) ent->fts_statp->st_ino); } void fts_cross_check (FTS const *sp) { FTSENT const *ent = sp->fts_cur; FTSENT const *t; if ( ! ISSET (FTS_TIGHT_CYCLE_CHECK)) return; Dprintf (("fts-cross-check cur=%s\n", ent->fts_path)); /* Make sure every parent dir is in the tree. */ for (t = ent->fts_parent; t->fts_level >= FTS_ROOTLEVEL; t = t->fts_parent) { struct Active_dir ad; ad.ino = t->fts_statp->st_ino; ad.dev = t->fts_statp->st_dev; if ( ! hash_lookup (sp->fts_cycle.ht, &ad)) printf ("ERROR: active dir, %s, not in tree\n", t->fts_path); } /* Make sure every dir in the tree is an active dir. But ENT is not necessarily a directory. If so, just skip this part. */ if (ent->fts_parent->fts_level >= FTS_ROOTLEVEL && (ent->fts_info == FTS_DP || ent->fts_info == FTS_D)) { struct Active_dir *ad; for (ad = hash_get_first (sp->fts_cycle.ht); ad != NULL; ad = hash_get_next (sp->fts_cycle.ht, ad)) { find_matching_ancestor (ent, ad); } } } static bool same_fd (int fd1, int fd2) { struct stat sb1, sb2; return (fstat (fd1, &sb1) == 0 && fstat (fd2, &sb2) == 0 && SAME_INODE (sb1, sb2)); } static void fd_ring_print (FTS const *sp, FILE *stream, char const *msg) { I_ring const *fd_ring = &sp->fts_fd_ring; unsigned int i = fd_ring->fts_front; char *cwd = getcwdat (sp->fts_cwd_fd, NULL, 0); fprintf (stream, "=== %s ========== %s\n", msg, cwd); free (cwd); if (i_ring_empty (fd_ring)) return; while (true) { int fd = fd_ring->fts_fd_ring[i]; if (fd < 0) fprintf (stream, "%d: %d:\n", i, fd); else { char *wd = getcwdat (fd, NULL, 0); fprintf (stream, "%d: %d: %s\n", i, fd, wd); free (wd); } if (i == fd_ring->fts_back) break; i = (i + I_RING_SIZE - 1) % I_RING_SIZE; } } /* Ensure that each file descriptor on the fd_ring matches a parent, grandparent, etc. of the current working directory. */ static void fd_ring_check (FTS const *sp) { if (!fts_debug) return; /* Make a writable copy. */ I_ring fd_w = sp->fts_fd_ring; int cwd_fd = sp->fts_cwd_fd; cwd_fd = fcntl (cwd_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); char *dot = getcwdat (cwd_fd, NULL, 0); error (0, 0, "===== check ===== cwd: %s", dot); free (dot); while ( ! i_ring_empty (&fd_w)) { int fd = i_ring_pop (&fd_w); if (0 <= fd) { int open_flags = O_SEARCH | O_CLOEXEC; int parent_fd = openat (cwd_fd, "..", open_flags); if (parent_fd < 0) { // Warn? break; } if (!same_fd (fd, parent_fd)) { char *cwd = getcwdat (fd, NULL, 0); error (0, errno, "ring : %s", cwd); char *c2 = getcwdat (parent_fd, NULL, 0); error (0, errno, "parent: %s", c2); free (cwd); free (c2); fts_assert (0); } close (cwd_fd); cwd_fd = parent_fd; } } close (cwd_fd); } #endif static unsigned short int internal_function fts_stat(FTS *sp, register FTSENT *p, bool follow) { struct stat *sbp = p->fts_statp; if (p->fts_level == FTS_ROOTLEVEL && ISSET(FTS_COMFOLLOW)) follow = true; /* * If doing a logical walk, or application requested FTS_FOLLOW, do * a stat(2). If that fails, check for a non-existent symlink. If * fail, set the errno from the stat call. */ if (ISSET(FTS_LOGICAL) || follow) { if (stat(p->fts_accpath, sbp)) { if (errno == ENOENT && lstat(p->fts_accpath, sbp) == 0) { __set_errno (0); return (FTS_SLNONE); } p->fts_errno = errno; goto err; } } else if (fstatat(sp->fts_cwd_fd, p->fts_accpath, sbp, AT_SYMLINK_NOFOLLOW)) { p->fts_errno = errno; err: memset(sbp, 0, sizeof(struct stat)); return (FTS_NS); } if (S_ISDIR(sbp->st_mode)) { if (ISDOT(p->fts_name)) { /* Command-line "." and ".." are real directories. */ return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT); } return (FTS_D); } if (S_ISLNK(sbp->st_mode)) return (FTS_SL); if (S_ISREG(sbp->st_mode)) return (FTS_F); return (FTS_DEFAULT); } static int fts_compar (void const *a, void const *b) { /* Convert A and B to the correct types, to pacify the compiler, and for portability to bizarre hosts where "void const *" and "FTSENT const **" differ in runtime representation. The comparison function cannot modify *a and *b, but there is no compile-time check for this. */ FTSENT const **pa = (FTSENT const **) a; FTSENT const **pb = (FTSENT const **) b; return pa[0]->fts_fts->fts_compar (pa, pb); } static FTSENT * internal_function fts_sort (FTS *sp, FTSENT *head, register size_t nitems) { register FTSENT **ap, *p; /* On most modern hosts, void * and FTSENT ** have the same run-time representation, and one can convert sp->fts_compar to the type qsort expects without problem. Use the heuristic that this is OK if the two pointer types are the same size, and if converting FTSENT ** to long int is the same as converting FTSENT ** to void * and then to long int. This heuristic isn't valid in general but we don't know of any counterexamples. */ FTSENT *dummy; int (*compare) (void const *, void const *) = ((sizeof &dummy == sizeof (void *) && (long int) &dummy == (long int) (void *) &dummy) ? (int (*) (void const *, void const *)) sp->fts_compar : fts_compar); /* * Construct an array of pointers to the structures and call qsort(3). * Reassemble the array in the order returned by qsort. If unable to * sort for memory reasons, return the directory entries in their * current order. Allocate enough space for the current needs plus * 40 so don't realloc one entry at a time. */ if (nitems > sp->fts_nitems) { FTSENT **a; sp->fts_nitems = nitems + 40; if (SIZE_MAX / sizeof *a < sp->fts_nitems || ! (a = realloc (sp->fts_array, sp->fts_nitems * sizeof *a))) { free(sp->fts_array); sp->fts_array = NULL; sp->fts_nitems = 0; return (head); } sp->fts_array = a; } for (ap = sp->fts_array, p = head; p; p = p->fts_link) *ap++ = p; qsort((void *)sp->fts_array, nitems, sizeof(FTSENT *), compare); for (head = *(ap = sp->fts_array); --nitems; ++ap) ap[0]->fts_link = ap[1]; ap[0]->fts_link = NULL; return (head); } static FTSENT * internal_function fts_alloc (FTS *sp, const char *name, register size_t namelen) { register FTSENT *p; size_t len; /* * The file name is a variable length array. Allocate the FTSENT * structure and the file name in one chunk. */ len = FLEXSIZEOF(FTSENT, fts_name, namelen + 1); if ((p = malloc(len)) == NULL) return (NULL); /* Copy the name and guarantee NUL termination. */ memcpy(p->fts_name, name, namelen); p->fts_name[namelen] = '\0'; p->fts_namelen = namelen; p->fts_fts = sp; p->fts_path = sp->fts_path; p->fts_errno = 0; p->fts_dirp = NULL; p->fts_flags = 0; p->fts_instr = FTS_NOINSTR; p->fts_number = 0; p->fts_pointer = NULL; return (p); } static void internal_function fts_lfree (register FTSENT *head) { register FTSENT *p; /* Free a linked list of structures. */ while ((p = head)) { head = head->fts_link; if (p->fts_dirp) closedir (p->fts_dirp); free(p); } } /* * Allow essentially unlimited file name lengths; find, rm, ls should * all work on any tree. Most systems will allow creation of file * names much longer than MAXPATHLEN, even though the kernel won't * resolve them. Add the size (not just what's needed) plus 256 bytes * so don't realloc the file name 2 bytes at a time. */ static bool internal_function fts_palloc (FTS *sp, size_t more) { char *p; size_t new_len = sp->fts_pathlen + more + 256; /* * See if fts_pathlen would overflow. */ if (new_len < sp->fts_pathlen) { free(sp->fts_path); sp->fts_path = NULL; __set_errno (ENAMETOOLONG); return false; } sp->fts_pathlen = new_len; p = realloc(sp->fts_path, sp->fts_pathlen); if (p == NULL) { free(sp->fts_path); sp->fts_path = NULL; return false; } sp->fts_path = p; return true; } /* * When the file name is realloc'd, have to fix all of the pointers in * structures already returned. */ static void internal_function fts_padjust (FTS *sp, FTSENT *head) { FTSENT *p; char *addr = sp->fts_path; #define ADJUST(p) do { \ if ((p)->fts_accpath != (p)->fts_name) { \ (p)->fts_accpath = \ (char *)addr + ((p)->fts_accpath - (p)->fts_path); \ } \ (p)->fts_path = addr; \ } while (0) /* Adjust the current set of children. */ for (p = sp->fts_child; p; p = p->fts_link) ADJUST(p); /* Adjust the rest of the tree, including the current level. */ for (p = head; p->fts_level >= FTS_ROOTLEVEL;) { ADJUST(p); p = p->fts_link ? p->fts_link : p->fts_parent; } } static size_t internal_function _GL_ATTRIBUTE_PURE fts_maxarglen (char * const *argv) { size_t len, max; for (max = 0; *argv; ++argv) if ((len = strlen(*argv)) > max) max = len; return (max + 1); } /* * Change to dir specified by fd or file name without getting * tricked by someone changing the world out from underneath us. * Assumes p->fts_statp->st_dev and p->fts_statp->st_ino are filled in. * If FD is non-negative, expect it to be used after this function returns, * and to be closed eventually. So don't pass e.g., 'dirfd(dirp)' and then * do closedir(dirp), because that would invalidate the saved FD. * Upon failure, close FD immediately and return nonzero. */ static int internal_function fts_safe_changedir (FTS *sp, FTSENT *p, int fd, char const *dir) { int ret; bool is_dotdot = dir && STREQ (dir, ".."); int newfd; /* This clause handles the unusual case in which FTS_NOCHDIR is specified, along with FTS_CWDFD. In that case, there is no need to change even the virtual cwd file descriptor. However, if FD is non-negative, we do close it here. */ if (ISSET (FTS_NOCHDIR)) { if (ISSET (FTS_CWDFD) && 0 <= fd) close (fd); return 0; } if (fd < 0 && is_dotdot && ISSET (FTS_CWDFD)) { /* When possible, skip the diropen and subsequent fstat+dev/ino comparison. I.e., when changing to parent directory (chdir ("..")), use a file descriptor from the ring and save the overhead of diropen+fstat, as well as avoiding failure when we lack "x" access to the virtual cwd. */ if ( ! i_ring_empty (&sp->fts_fd_ring)) { int parent_fd; fd_ring_print (sp, stderr, "pre-pop"); parent_fd = i_ring_pop (&sp->fts_fd_ring); if (0 <= parent_fd) { fd = parent_fd; dir = NULL; } } } newfd = fd; if (fd < 0 && (newfd = diropen (sp, dir)) < 0) return -1; /* The following dev/inode check is necessary if we're doing a "logical" traversal (through symlinks, a la chown -L), if the system lacks O_NOFOLLOW support, or if we're changing to ".." (but not via a popped file descriptor). When changing to the name "..", O_NOFOLLOW can't help. In general, when the target is not "..", diropen's use of O_NOFOLLOW ensures we don't mistakenly follow a symlink, so we can avoid the expense of this fstat. */ if (ISSET(FTS_LOGICAL) || ! HAVE_WORKING_O_NOFOLLOW || (dir && STREQ (dir, ".."))) { struct stat sb; if (fstat(newfd, &sb)) { ret = -1; goto bail; } if (p->fts_statp->st_dev != sb.st_dev || p->fts_statp->st_ino != sb.st_ino) { __set_errno (ENOENT); /* disinformation */ ret = -1; goto bail; } } if (ISSET(FTS_CWDFD)) { cwd_advance_fd (sp, newfd, ! is_dotdot); return 0; } ret = fchdir(newfd); bail: if (fd < 0) { int oerrno = errno; (void)close(newfd); __set_errno (oerrno); } return ret; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fts_.h������������������������������������������������������������������0000664�0000000�0000000�00000030771�14110572173�0016161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Traverse a file hierarchy. Copyright (C) 2004-2021 Free Software Foundation, Inc. This 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/>. */ /* * Copyright (c) 1989, 1993 * The 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. * * @(#)fts.h 8.3 (Berkeley) 8/14/94 */ #ifndef _FTS_H # define _FTS_H 1 # ifdef _LIBC # include <features.h> # if __STDC_VERSION__ < 199901L # define __FLEXIBLE_ARRAY_MEMBER 1 # else # define __FLEXIBLE_ARRAY_MEMBER # endif # else # define __FLEXIBLE_ARRAY_MEMBER FLEXIBLE_ARRAY_MEMBER # undef __THROW # define __THROW # undef __BEGIN_DECLS # undef __END_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } # else # define __BEGIN_DECLS # define __END_DECLS # endif # endif # include <stddef.h> # include <sys/types.h> # include <dirent.h> # include <sys/stat.h> # include "i-ring.h" typedef struct { struct _ftsent *fts_cur; /* current node */ struct _ftsent *fts_child; /* linked list of children */ struct _ftsent **fts_array; /* sort array */ dev_t fts_dev; /* starting device # */ char *fts_path; /* file name for this descent */ int fts_rfd; /* fd for root */ int fts_cwd_fd; /* the file descriptor on which the virtual cwd is open, or AT_FDCWD */ size_t fts_pathlen; /* sizeof(path) */ size_t fts_nitems; /* elements in the sort array */ int (*fts_compar) (struct _ftsent const **, struct _ftsent const **); /* compare fn */ # define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ # define FTS_LOGICAL 0x0002 /* logical walk */ # define FTS_NOCHDIR 0x0004 /* don't change directories */ # define FTS_NOSTAT 0x0008 /* don't get stat info */ # define FTS_PHYSICAL 0x0010 /* physical walk */ # define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ # define FTS_XDEV 0x0040 /* don't cross devices */ # define FTS_WHITEOUT 0x0080 /* return whiteout information */ /* There are two ways to detect cycles. The lazy way (which works only with FTS_PHYSICAL), with which one may process a directory that is a part of the cycle several times before detecting the cycle. The "tight" way, whereby fts uses more memory (proportional to number of "active" directories, aka distance from root of current tree to current directory -- see active_dir_ht) to detect any cycle right away. For example, du must use this option to avoid counting disk space in a cycle multiple times, but chown -R need not. The default is to use the constant-memory lazy way, when possible (see below). However, with FTS_LOGICAL (when following symlinks, e.g., chown -L) using lazy cycle detection is inadequate. For example, traversing a directory containing a symbolic link to a peer directory, it is possible to encounter the same directory twice even though there is no cycle: dir ... slink -> dir So, when FTS_LOGICAL is selected, we have to use a different mode of cycle detection: FTS_TIGHT_CYCLE_CHECK. */ # define FTS_TIGHT_CYCLE_CHECK 0x0100 /* Use this flag to enable semantics with which the parent application may be made both more efficient and more robust. Whereas the default is to visit each directory in a recursive traversal (via chdir), using this flag makes it so the initial working directory is never changed. Instead, these functions perform the traversal via a virtual working directory, maintained through the file descriptor member, fts_cwd_fd. */ # define FTS_CWDFD 0x0200 /* Historically, for each directory that fts initially encounters, it would open it, read all entries, and stat each entry, storing the results, and then it would process the first entry. But that behavior is bad for locality of reference, and also causes trouble with inode-simulating file systems like FAT, CIFS, FUSE-based ones, etc., when entries from their name/inode cache are flushed too early. Use this flag to make fts_open and fts_read defer the stat/lstat/fststat of each entry until it is actually processed. However, note that if you use this option and also specify a comparison function, that function may not examine any data via fts_statp. However, when fts_statp->st_mode is nonzero, the S_IFMT type bits are valid, with mapped dirent.d_type data. Of course, that happens only on file systems that provide useful dirent.d_type data. */ # define FTS_DEFER_STAT 0x0400 /* Use this flag to disable stripping of trailing slashes from input path names during fts_open initialization. */ # define FTS_VERBATIM 0x0800 # define FTS_OPTIONMASK 0x0fff /* valid user option mask */ # define FTS_NAMEONLY 0x1000 /* (private) child names only */ # define FTS_STOP 0x2000 /* (private) unrecoverable error */ int fts_options; /* fts_open options, global flags */ /* Map a directory's device number to a boolean. The boolean is true if for that file system (type determined by a single fstatfs call per FS) st_nlink can be used to calculate the number of sub-directory entries in a directory. Using this table is an optimization that permits us to look up file system type on a per-inode basis at the minimal cost of calling fstatfs only once per traversed device. */ struct hash_table *fts_leaf_optimization_works_ht; union { /* This data structure is used if FTS_TIGHT_CYCLE_CHECK is specified. It records the directories between a starting point and the current directory. I.e., a directory is recorded here IFF we have visited it once, but we have not yet completed processing of all its entries. Every time we visit a new directory, we add that directory to this set. When we finish with a directory (usually by visiting it a second time), we remove it from this set. Each entry in this data structure is a device/inode pair. This data structure is used to detect directory cycles efficiently and promptly even when the depth of a hierarchy is in the tens of thousands. */ struct hash_table *ht; /* FIXME: rename these two members to have the fts_ prefix */ /* This data structure uses a lazy cycle-detection algorithm, as done by rm via cycle-check.c. It's the default, but it's not appropriate for programs like du. */ struct cycle_check_state *state; } fts_cycle; /* A stack of the file descriptors corresponding to the most-recently traversed parent directories. Currently used only in FTS_CWDFD mode. */ I_ring fts_fd_ring; } FTS; typedef struct _ftsent { struct _ftsent *fts_cycle; /* cycle node */ struct _ftsent *fts_parent; /* parent directory */ struct _ftsent *fts_link; /* next file in directory */ DIR *fts_dirp; /* Dir pointer for any directory containing more entries than we read at one time. */ long fts_number; /* local numeric value */ void *fts_pointer; /* local address value */ char *fts_accpath; /* access file name */ char *fts_path; /* root name; == fts_fts->fts_path */ int fts_errno; /* errno for this node */ int fts_symfd; /* fd for symlink */ size_t fts_pathlen; /* strlen(fts_path) */ FTS *fts_fts; /* the file hierarchy itself */ # define FTS_ROOTPARENTLEVEL (-1) # define FTS_ROOTLEVEL 0 ptrdiff_t fts_level; /* depth (-1 to N) */ size_t fts_namelen; /* strlen(fts_name) */ # define FTS_D 1 /* preorder directory */ # define FTS_DC 2 /* directory that causes cycles */ # define FTS_DEFAULT 3 /* none of the above */ # define FTS_DNR 4 /* unreadable directory */ # define FTS_DOT 5 /* dot or dot-dot */ # define FTS_DP 6 /* postorder directory */ # define FTS_ERR 7 /* error; errno is set */ # define FTS_F 8 /* regular file */ # define FTS_INIT 9 /* initialized only */ # define FTS_NS 10 /* stat(2) failed */ # define FTS_NSOK 11 /* no stat(2) requested */ # define FTS_SL 12 /* symbolic link */ # define FTS_SLNONE 13 /* symbolic link without target */ # define FTS_W 14 /* whiteout object */ unsigned short int fts_info; /* user flags for FTSENT structure */ # define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ # define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ unsigned short int fts_flags; /* private flags for FTSENT structure */ # define FTS_AGAIN 1 /* read node again */ # define FTS_FOLLOW 2 /* follow symbolic link */ # define FTS_NOINSTR 3 /* no instructions */ # define FTS_SKIP 4 /* discard node */ unsigned short int fts_instr; /* fts_set() instructions */ struct stat fts_statp[1]; /* stat(2) information */ char fts_name[__FLEXIBLE_ARRAY_MEMBER]; /* file name */ } FTSENT; __BEGIN_DECLS _GL_ATTRIBUTE_NODISCARD FTSENT *fts_children (FTS *, int) __THROW; _GL_ATTRIBUTE_NODISCARD int fts_close (FTS *) __THROW; _GL_ATTRIBUTE_NODISCARD FTS *fts_open (char * const *, int, int (*)(const FTSENT **, const FTSENT **)) _GL_ATTRIBUTE_DEALLOC (fts_close, 1) __THROW; _GL_ATTRIBUTE_NODISCARD FTSENT *fts_read (FTS *) __THROW; int fts_set (FTS *, FTSENT *, int) __THROW; __END_DECLS #endif /* fts.h */ �������gnulib-20210822~d383792/lib/full-read.c�������������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read that retries after partial reads and interrupts. Copyright (C) 2002-2003, 2009-2021 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/>. */ #define FULL_READ #include "full-write.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/full-read.h�������������������������������������������������������������0000664�0000000�0000000�00000002102�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read() that reads all it is asked to read. Copyright (C) 2002, 2009-2021 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/>. */ #include <stddef.h> /* Read COUNT bytes at BUF to descriptor FD, retrying if interrupted or if partial reads occur. Return the number of bytes successfully read, setting errno if that is less than COUNT. errno = 0 means EOF. */ extern size_t full_read (int fd, void *buf, size_t count); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/full-write.c������������������������������������������������������������0000664�0000000�0000000�00000004403�14110572173�0017304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read and write that retries (if necessary) until complete. Copyright (C) 1993-1994, 1997-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #ifdef FULL_READ # include "full-read.h" #else # include "full-write.h" #endif #include <errno.h> #ifdef FULL_READ # include "safe-read.h" # define safe_rw safe_read # define full_rw full_read # undef const # define const /* empty */ #else # include "safe-write.h" # define safe_rw safe_write # define full_rw full_write #endif #ifdef FULL_READ /* Set errno to zero upon EOF. */ # define ZERO_BYTE_TRANSFER_ERRNO 0 #else /* Some buggy drivers return 0 when one tries to write beyond a device's end. (Example: Linux 1.2.13 on /dev/fd0.) Set errno to ENOSPC so they get a sensible diagnostic. */ # define ZERO_BYTE_TRANSFER_ERRNO ENOSPC #endif /* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if interrupted or if a partial write(read) occurs. Return the number of bytes transferred. When writing, set errno if fewer than COUNT bytes are written. When reading, if fewer than COUNT bytes are read, you must examine errno to distinguish failure from EOF (errno == 0). */ size_t full_rw (int fd, const void *buf, size_t count) { size_t total = 0; const char *ptr = (const char *) buf; while (count > 0) { size_t n_rw = safe_rw (fd, ptr, count); if (n_rw == (size_t) -1) break; if (n_rw == 0) { errno = ZERO_BYTE_TRANSFER_ERRNO; break; } total += n_rw; ptr += n_rw; count -= n_rw; } return total; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/full-write.h������������������������������������������������������������0000664�0000000�0000000�00000002210�14110572173�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that writes all it is asked to write. Copyright (C) 2002-2003, 2009-2021 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/>. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted or if partial writes occur. Return the number of bytes successfully written, setting errno if that is less than COUNT. */ extern size_t full_write (int fd, const void *buf, size_t count); #ifdef __cplusplus } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/futimens.c��������������������������������������������������������������0000664�0000000�0000000�00000002623�14110572173�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the access and modification time of an open fd. Copyright (C) 2009-2021 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 Eric Blake */ #include <config.h> #include <sys/stat.h> #include "utimens.h" /* Set the access and modification timestamps of FD to be TIMESPEC[0] and TIMESPEC[1], respectively. Fail with ENOSYS on systems without futimes (or equivalent). If TIMESPEC is null, set the timestamps to the current time. Return 0 on success, -1 (setting errno) on failure. */ int futimens (int fd, struct timespec const times[2]) { /* fdutimens also works around bugs in native futimens, when running with glibc compiled against newer headers but on a Linux kernel older than 2.6.32. */ return fdutimens (fd, NULL, times); } �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwritable.c�������������������������������������������������������������0000664�0000000�0000000�00000005170�14110572173�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "fwritable.h" #include "stdio-impl.h" #if defined EPLAN9 /* Plan9 */ # include <fcntl.h> #endif /* This file is not used on systems that have the __fwritable function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc. */ bool fwritable (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & _IO_NO_WRITES) == 0; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & (__SRW | __SWR)) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOWRT)) != 0; #elif defined __minix /* Minix */ return (fp->_flags & _IOWRITE) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_flag & (_IORW | _IOWRT)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x2 /* _MOPENW */) != 0; #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__mode.__write; #elif defined EPLAN9 /* Plan9 */ int fd = fp->fd; if (fd >= 0) { int flags = fcntl (fd, F_GETFL, NULL); if (flags >= 0) { flags &= O_ACCMODE; return (flags == O_WRONLY || flags == O_RDWR); } } return 0; #else # error "Please port gnulib fwritable.c to your platform! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwritable.h�������������������������������������������������������������0000664�0000000�0000000�00000002602�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007, 2009-2021 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/>. */ #include <stdbool.h> #include <stdio.h> /* Return true if the stream STREAM supports writing, false if it supports only reading. STREAM must not be wide-character oriented. The result doesn't change until the stream is closed or re-opened. */ #if HAVE___FWRITABLE /* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23, musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # define fwritable(stream) (__fwritable (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool fwritable (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwriteerror.c�����������������������������������������������������������0000664�0000000�0000000�00000012165�14110572173�0017570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect write error on a stream. Copyright (C) 2003-2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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> /* Specification. */ #include "fwriteerror.h" #include <errno.h> #include <stdbool.h> static int do_fwriteerror (FILE *fp, bool ignore_ebadf) { /* State to allow multiple calls to fwriteerror (stdout). */ static bool stdout_closed = false; if (fp == stdout) { if (stdout_closed) return 0; /* If we are closing stdout, don't attempt to do it later again. */ stdout_closed = true; } /* This function returns an error indication if there was a previous failure or if fclose failed, with two exceptions: - Ignore an fclose failure if there was no previous error, no data remains to be flushed, and fclose failed with EBADF. That can happen when a program like cp is invoked like this 'cp a b >&-' (i.e., with standard output closed) and doesn't generate any output (hence no previous error and nothing to be flushed). - Ignore an fclose failure due to EPIPE. That can happen when a program blocks or ignores SIGPIPE, and the output pipe or socket has no readers now. The EPIPE tells us that we should stop writing to this output. That's what we are doing anyway here. Need to 1. test the error indicator of the stream, 2. flush the buffers both in userland and in the kernel, through fclose, testing for error again. */ /* Clear errno, so that on non-POSIX systems the caller doesn't see a wrong value of errno when we return -1. */ errno = 0; if (ferror (fp)) { if (fflush (fp)) goto close_preserving_errno; /* errno is set here */ /* The stream had an error earlier, but its errno was lost. If the error was not temporary, we can get the same errno by writing and flushing one more byte. We can do so because at this point the stream's contents is garbage anyway. */ if (fputc ('\0', fp) == EOF) goto close_preserving_errno; /* errno is set here */ if (fflush (fp)) goto close_preserving_errno; /* errno is set here */ /* Give up on errno. */ errno = 0; goto close_preserving_errno; } if (ignore_ebadf) { /* We need an explicit fflush to tell whether some output was already done on FP. */ if (fflush (fp)) goto close_preserving_errno; /* errno is set here */ if (fclose (fp) && errno != EBADF) goto got_errno; /* errno is set here */ } else { if (fclose (fp)) goto got_errno; /* errno is set here */ } return 0; close_preserving_errno: /* There's an error. Nevertheless call fclose(fp), for consistency with the other cases. */ { int saved_errno = errno; fclose (fp); errno = saved_errno; } got_errno: /* There's an error. Ignore EPIPE. */ if (errno == EPIPE) return 0; else return -1; } int fwriteerror (FILE *fp) { return do_fwriteerror (fp, false); } int fwriteerror_no_ebadf (FILE *fp) { return do_fwriteerror (fp, true); } #if TEST /* Name of a file on which writing fails. On systems without /dev/full, you can choose a filename on a full file system. */ #define UNWRITABLE_FILE "/dev/full" int main () { static int sizes[] = { 511, 512, 513, 1023, 1024, 1025, 2047, 2048, 2049, 4095, 4096, 4097, 8191, 8192, 8193 }; static char dummy[8193]; unsigned int i, j; for (i = 0; i < sizeof (sizes) / sizeof (sizes[0]); i++) { size_t size = sizes[i]; for (j = 0; j < 2; j++) { /* Run a test depending on i and j: Write size bytes and then calls fflush if j==1. */ FILE *stream = fopen (UNWRITABLE_FILE, "w"); if (stream == NULL) { fprintf (stderr, "Test %u:%u: could not open file\n", i, j); continue; } fwrite (dummy, 347, 1, stream); fwrite (dummy, size - 347, 1, stream); if (j) fflush (stream); if (fwriteerror (stream) == -1) { if (errno != ENOSPC) fprintf (stderr, "Test %u:%u: fwriteerror ok, errno = %d\n", i, j, errno); } else fprintf (stderr, "Test %u:%u: fwriteerror found no error!\n", i, j); } } return 0; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwriteerror.h�����������������������������������������������������������0000664�0000000�0000000�00000005063�14110572173�0017574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect write error on a stream. Copyright (C) 2003, 2005-2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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/>. */ /* There are two approaches for detecting a write error on a stream opened for writing: (a) Test the return value of every fwrite() or fprintf() call, and react immediately. (b) Just before fclose(), test the error indicator in the stream and the return value of the final fclose() call. The benefit of (a) is that non file related errors (such that ENOMEM during fprintf) and temporary error conditions can be diagnosed accurately. A theoretical benefit of (a) is also that, on POSIX systems, in the case of an ENOSPC error, errno is set and can be used by error() to provide a more accurate error message. But in practice, this benefit is not big because users can easily figure out by themselves why a file cannot be written to, and furthermore the function fwriteerror() can provide errno as well. The big drawback of (a) is extensive error checking code: Every function which does stream output must return an error indicator. This file provides support for (b). */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Write out the not yet written buffered contents of the stream FP, close the stream FP, and test whether some error occurred on the stream FP. FP must be a stream opened for writing. Return 0 if no error occurred and fclose (fp) succeeded. Return -1 and set errno if there was an error. The errno value will be 0 if the cause of the error cannot be determined. For any given stream FP other than stdout, fwriteerror (FP) may only be called once. */ extern int fwriteerror (FILE *fp); /* Likewise, but don't consider it an error if FP has an invalid file descriptor and no output was done to FP. */ extern int fwriteerror_no_ebadf (FILE *fp); #ifdef __cplusplus } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwriting.c��������������������������������������������������������������0000664�0000000�0000000�00000005435�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include "fwriting.h" #include "stdio-impl.h" /* This file is not used on systems that have the __fwriting function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, musl libc. */ bool fwriting (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & __SWR) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOWRT) != 0; #elif defined __minix /* Minix */ return (fp->_flags & _IOWRITING) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_flag & _IOWRT) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING) != 0; #elif defined __QNX__ /* QNX */ return ((fp->_Mode & 0x1 /* _MOPENR */) == 0 || (fp->_Mode & 0x2000 /* _MWRITE */) != 0); #elif defined __MINT__ /* Atari FreeMiNT */ if (!fp->__mode.__read) return 1; if (!fp->__mode.__write) return 0; # ifdef _IO_CURRENTLY_PUTTING /* Flag added on 2009-02-28 */ return (fp->__flags & _IO_CURRENTLY_PUTTING) != 0; # else return (fp->__buffer < fp->__put_limit /*|| fp->__bufp == fp->__get_limit ??*/); # endif #elif defined EPLAN9 /* Plan9 */ if (fp->state == 0 /* CLOSED */ || fp->state == 3 /* RD */) return 0; return (fp->state == 4 /* WR */ && (fp->bufl == 0 || fp->wp < fp->rp)); #else # error "Please port gnulib fwriting.c to your platform!" #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/fwriting.h��������������������������������������������������������������0000664�0000000�0000000�00000003622�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007, 2009-2021 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/>. */ #include <stdbool.h> #include <stdio.h> /* Return true if the stream STREAM is opened write-only or append-only, or if the last operation on the stream was a write operation. Return false if the stream is opened read-only, or if it supports reading and there is no current write operation (such as fputc). freading and fwriting will never both be true. If STREAM supports both reads and writes, then: - both freading and fwriting might be false when the stream is first opened, after read encounters EOF, or after fflush, - freading might be false or true and fwriting might be false after repositioning (such as fseek, fsetpos, or rewind), depending on the underlying implementation. STREAM must not be wide-character oriented. */ #if HAVE___FWRITING /* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # define fwriting(stream) (__fwriting (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool fwriting (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gai_strerror.c����������������������������������������������������������0000664�0000000�0000000�00000005305�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1997, 2001-2002, 2004-2006, 2008-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Philip Blundell <pjb27@cam.ac.uk>, 1997. 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 _LIBC # include <config.h> #endif #include <stdio.h> #include <netdb.h> #ifdef _LIBC # include <libintl.h> #else # include "gettext.h" # define _(String) gettext (String) # define N_(String) String #endif #if HAVE_DECL_GAI_STRERROR # include <sys/socket.h> # undef gai_strerror # if HAVE_DECL_GAI_STRERRORA # define gai_strerror gai_strerrorA # endif const char * rpl_gai_strerror (int code) { return gai_strerror (code); } #else /* !HAVE_DECL_GAI_STRERROR */ static struct { int code; const char *msg; } values[] = { { EAI_ADDRFAMILY, N_("Address family for hostname not supported") }, { EAI_AGAIN, N_("Temporary failure in name resolution") }, { EAI_BADFLAGS, N_("Bad value for ai_flags") }, { EAI_FAIL, N_("Non-recoverable failure in name resolution") }, { EAI_FAMILY, N_("ai_family not supported") }, { EAI_MEMORY, N_("Memory allocation failure") }, { EAI_NODATA, N_("No address associated with hostname") }, { EAI_NONAME, N_("Name or service not known") }, { EAI_SERVICE, N_("Servname not supported for ai_socktype") }, { EAI_SOCKTYPE, N_("ai_socktype not supported") }, { EAI_SYSTEM, N_("System error") }, { EAI_OVERFLOW, N_("Argument buffer too small") }, #ifdef EAI_INPROGRESS { EAI_INPROGRESS, N_("Processing request in progress") }, { EAI_CANCELED, N_("Request canceled") }, { EAI_NOTCANCELED, N_("Request not canceled") }, { EAI_ALLDONE, N_("All requests done") }, { EAI_INTR, N_("Interrupted by a signal") }, { EAI_IDN_ENCODE, N_("Parameter string not correctly encoded") } #endif }; const char * gai_strerror (int code) { size_t i; for (i = 0; i < sizeof (values) / sizeof (values[0]); ++i) if (values[i].code == code) return _(values[i].msg); return _("Unknown error"); } # ifdef _LIBC libc_hidden_def (gai_strerror) # endif #endif /* !HAVE_DECL_GAI_STRERROR */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gc-gnulib.c�������������������������������������������������������������0000664�0000000�0000000�00000043731�14110572173�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-gnulib.c --- Common gnulib internal crypto interface functions * Copyright (C) 2002-2021 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/>. * */ /* Note: This file is only built if GC uses internal functions. */ #include <config.h> /* Get prototype. */ #include "gc.h" #include <stdlib.h> #include <string.h> /* For randomize. */ #if GNULIB_GC_RANDOM #include <unistd.h> #include <errno.h> #include <sys/random.h> #endif /* Hashes. */ #if GNULIB_GC_MD2 # include "md2.h" #endif #if GNULIB_GC_MD4 # include "md4.h" #endif #if GNULIB_GC_MD5 # include "md5.h" #endif #if GNULIB_GC_SHA1 # include "sha1.h" #endif #if GNULIB_GC_SHA256 # include "sha256.h" #endif #if GNULIB_GC_SHA512 # include "sha512.h" #endif #if GNULIB_GC_SM3 # include "sm3.h" #endif #if GNULIB_GC_HMAC_MD5 || GNULIB_GC_HMAC_SHA1 || GNULIB_GC_HMAC_SHA256 || GNULIB_GC_HMAC_SHA512 # include "hmac.h" #endif /* Ciphers. */ #if GNULIB_GC_ARCFOUR # include "arcfour.h" #endif #if GNULIB_GC_ARCTWO # include "arctwo.h" #endif #if GNULIB_GC_DES # include "des.h" #endif #if GNULIB_GC_RIJNDAEL # include "rijndael-api-fst.h" #endif Gc_rc gc_init (void) { return GC_OK; } void gc_done (void) { return; } #if GNULIB_GC_RANDOM /* Overwrite BUFFER with random data, under the control of getrandom FLAGS. BUFFER contains LENGTH bytes. Inspired by getentropy, however LENGTH is not restricted to 256. Return 0 on success, -1 (setting errno) on failure. */ static int randomize (void *buffer, size_t length, unsigned int flags) { char *buf = buffer; for (;;) { ssize_t bytes; if (length == 0) return GC_OK; while ((bytes = getrandom (buf, length, flags)) < 0) if (errno != EINTR) return GC_RANDOM_ERROR; if (bytes == 0) break; buf += bytes; length -= bytes; } return GC_RANDOM_ERROR; } Gc_rc gc_nonce (char *data, size_t datalen) { return randomize (data, datalen, 0); } Gc_rc gc_pseudo_random (char *data, size_t datalen) { return randomize (data, datalen, 0); } Gc_rc gc_random (char *data, size_t datalen) { return randomize (data, datalen, GRND_RANDOM); } #endif /* Memory allocation. */ void gc_set_allocators (gc_malloc_t func_malloc, gc_malloc_t secure_malloc, gc_secure_check_t secure_check, gc_realloc_t func_realloc, gc_free_t func_free) { return; } /* Ciphers. */ typedef struct _gc_cipher_ctx { Gc_cipher alg; Gc_cipher_mode mode; #if GNULIB_GC_ARCTWO arctwo_context arctwoContext; char arctwoIV[ARCTWO_BLOCK_SIZE]; #endif #if GNULIB_GC_ARCFOUR arcfour_context arcfourContext; #endif #if GNULIB_GC_DES gl_des_ctx desContext; #endif #if GNULIB_GC_RIJNDAEL rijndaelKeyInstance aesEncKey; rijndaelKeyInstance aesDecKey; rijndaelCipherInstance aesContext; #endif } _gc_cipher_ctx; Gc_rc gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode, gc_cipher_handle * outhandle) { _gc_cipher_ctx *ctx; Gc_rc rc = GC_OK; ctx = calloc (sizeof (*ctx), 1); if (!ctx) return GC_MALLOC_ERROR; ctx->alg = alg; ctx->mode = mode; switch (alg) { #if GNULIB_GC_ARCTWO case GC_ARCTWO40: switch (mode) { case GC_ECB: case GC_CBC: break; default: rc = GC_INVALID_CIPHER; } break; #endif #if GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: switch (mode) { case GC_STREAM: break; default: rc = GC_INVALID_CIPHER; } break; #endif #if GNULIB_GC_DES case GC_DES: switch (mode) { case GC_ECB: break; default: rc = GC_INVALID_CIPHER; } break; #endif #if GNULIB_GC_RIJNDAEL case GC_AES128: case GC_AES192: case GC_AES256: switch (mode) { case GC_ECB: case GC_CBC: break; default: rc = GC_INVALID_CIPHER; } break; #endif default: rc = GC_INVALID_CIPHER; } if (rc == GC_OK) *outhandle = ctx; else free (ctx); return rc; } Gc_rc gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key) { _gc_cipher_ctx *ctx = handle; switch (ctx->alg) { #if GNULIB_GC_ARCTWO case GC_ARCTWO40: arctwo_setkey (&ctx->arctwoContext, keylen, key); break; #endif #if GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_setkey (&ctx->arcfourContext, key, keylen); break; #endif #if GNULIB_GC_DES case GC_DES: if (keylen != 8) return GC_INVALID_CIPHER; gl_des_setkey (&ctx->desContext, key); break; #endif #if GNULIB_GC_RIJNDAEL case GC_AES128: case GC_AES192: case GC_AES256: { rijndael_rc rc; size_t i; char keyMaterial[RIJNDAEL_MAX_KEY_SIZE + 1]; for (i = 0; i < keylen; i++) sprintf (&keyMaterial[2 * i], "%02x", key[i] & 0xFF); rc = rijndaelMakeKey (&ctx->aesEncKey, RIJNDAEL_DIR_ENCRYPT, keylen * 8, keyMaterial); if (rc < 0) return GC_INVALID_CIPHER; rc = rijndaelMakeKey (&ctx->aesDecKey, RIJNDAEL_DIR_DECRYPT, keylen * 8, keyMaterial); if (rc < 0) return GC_INVALID_CIPHER; rc = rijndaelCipherInit (&ctx->aesContext, RIJNDAEL_MODE_ECB, NULL); if (rc < 0) return GC_INVALID_CIPHER; } break; #endif default: return GC_INVALID_CIPHER; } return GC_OK; } Gc_rc gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv) { _gc_cipher_ctx *ctx = handle; switch (ctx->alg) { #if GNULIB_GC_ARCTWO case GC_ARCTWO40: if (ivlen != ARCTWO_BLOCK_SIZE) return GC_INVALID_CIPHER; memcpy (ctx->arctwoIV, iv, ivlen); break; #endif #if GNULIB_GC_RIJNDAEL case GC_AES128: case GC_AES192: case GC_AES256: switch (ctx->mode) { case GC_ECB: /* Doesn't use IV. */ break; case GC_CBC: { rijndael_rc rc; size_t i; char ivMaterial[2 * RIJNDAEL_MAX_IV_SIZE + 1]; for (i = 0; i < ivlen; i++) sprintf (&ivMaterial[2 * i], "%02x", iv[i] & 0xFF); rc = rijndaelCipherInit (&ctx->aesContext, RIJNDAEL_MODE_CBC, ivMaterial); if (rc < 0) return GC_INVALID_CIPHER; } break; default: return GC_INVALID_CIPHER; } break; #endif default: return GC_INVALID_CIPHER; } return GC_OK; } Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data) { _gc_cipher_ctx *ctx = handle; switch (ctx->alg) { #if GNULIB_GC_ARCTWO case GC_ARCTWO40: switch (ctx->mode) { case GC_ECB: arctwo_encrypt (&ctx->arctwoContext, data, data, len); break; case GC_CBC: for (; len >= ARCTWO_BLOCK_SIZE; len -= ARCTWO_BLOCK_SIZE, data += ARCTWO_BLOCK_SIZE) { size_t i; for (i = 0; i < ARCTWO_BLOCK_SIZE; i++) data[i] ^= ctx->arctwoIV[i]; arctwo_encrypt (&ctx->arctwoContext, data, data, ARCTWO_BLOCK_SIZE); memcpy (ctx->arctwoIV, data, ARCTWO_BLOCK_SIZE); } break; default: return GC_INVALID_CIPHER; } break; #endif #if GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_stream (&ctx->arcfourContext, data, data, len); break; #endif #if GNULIB_GC_DES case GC_DES: for (; len >= 8; len -= 8, data += 8) gl_des_ecb_encrypt (&ctx->desContext, data, data); break; #endif #if GNULIB_GC_RIJNDAEL case GC_AES128: case GC_AES192: case GC_AES256: { int nblocks; nblocks = rijndaelBlockEncrypt (&ctx->aesContext, &ctx->aesEncKey, data, 8 * len, data); if (nblocks < 0) return GC_INVALID_CIPHER; } break; #endif default: return GC_INVALID_CIPHER; } return GC_OK; } Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data) { _gc_cipher_ctx *ctx = handle; switch (ctx->alg) { #if GNULIB_GC_ARCTWO case GC_ARCTWO40: switch (ctx->mode) { case GC_ECB: arctwo_decrypt (&ctx->arctwoContext, data, data, len); break; case GC_CBC: for (; len >= ARCTWO_BLOCK_SIZE; len -= ARCTWO_BLOCK_SIZE, data += ARCTWO_BLOCK_SIZE) { char tmpIV[ARCTWO_BLOCK_SIZE]; size_t i; memcpy (tmpIV, data, ARCTWO_BLOCK_SIZE); arctwo_decrypt (&ctx->arctwoContext, data, data, ARCTWO_BLOCK_SIZE); for (i = 0; i < ARCTWO_BLOCK_SIZE; i++) data[i] ^= ctx->arctwoIV[i]; memcpy (ctx->arctwoIV, tmpIV, ARCTWO_BLOCK_SIZE); } break; default: return GC_INVALID_CIPHER; } break; #endif #if GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_stream (&ctx->arcfourContext, data, data, len); break; #endif #if GNULIB_GC_DES case GC_DES: for (; len >= 8; len -= 8, data += 8) gl_des_ecb_decrypt (&ctx->desContext, data, data); break; #endif #if GNULIB_GC_RIJNDAEL case GC_AES128: case GC_AES192: case GC_AES256: { int nblocks; nblocks = rijndaelBlockDecrypt (&ctx->aesContext, &ctx->aesDecKey, data, 8 * len, data); if (nblocks < 0) return GC_INVALID_CIPHER; } break; #endif default: return GC_INVALID_CIPHER; } return GC_OK; } Gc_rc gc_cipher_close (gc_cipher_handle handle) { _gc_cipher_ctx *ctx = handle; free (ctx); return GC_OK; } /* Hashes. */ #define MAX_DIGEST_SIZE 64 typedef struct _gc_hash_ctx { Gc_hash alg; Gc_hash_mode mode; char hash[MAX_DIGEST_SIZE]; #if GNULIB_GC_MD2 struct md2_ctx md2Context; #endif #if GNULIB_GC_MD4 struct md4_ctx md4Context; #endif #if GNULIB_GC_MD5 struct md5_ctx md5Context; #endif #if GNULIB_GC_SHA1 struct sha1_ctx sha1Context; #endif #if GNULIB_GC_SHA256 struct sha256_ctx sha256Context; #endif #if GNULIB_GC_SHA512 struct sha512_ctx sha512Context; #endif #if GNULIB_GC_SM3 struct sm3_ctx sm3Context; #endif } _gc_hash_ctx; Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) { _gc_hash_ctx *ctx; Gc_rc rc = GC_OK; if (mode != 0) return GC_INVALID_HASH; ctx = calloc (sizeof (*ctx), 1); if (!ctx) return GC_MALLOC_ERROR; ctx->alg = hash; ctx->mode = mode; switch (hash) { #if GNULIB_GC_MD2 case GC_MD2: /* Not needed, because ctx is already zero-initialized. */ /*md2_init_ctx (&ctx->md2Context);*/ break; #endif #if GNULIB_GC_MD4 case GC_MD4: md4_init_ctx (&ctx->md4Context); break; #endif #if GNULIB_GC_MD5 case GC_MD5: md5_init_ctx (&ctx->md5Context); break; #endif #if GNULIB_GC_SHA1 case GC_SHA1: sha1_init_ctx (&ctx->sha1Context); break; #endif #if GNULIB_GC_SHA256 case GC_SHA256: sha256_init_ctx (&ctx->sha256Context); break; #endif #if GNULIB_GC_SHA512 case GC_SHA512: sha512_init_ctx (&ctx->sha512Context); break; #endif #if GNULIB_GC_SM3 case GC_SM3: sm3_init_ctx (&ctx->sm3Context); break; #endif default: rc = GC_INVALID_HASH; break; } if (rc == GC_OK) *outhandle = ctx; else free (ctx); return rc; } Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle * outhandle) { _gc_hash_ctx *in = handle; _gc_hash_ctx *out; *outhandle = out = calloc (sizeof (*out), 1); if (!out) return GC_MALLOC_ERROR; memcpy (out, in, sizeof (*out)); return GC_OK; } size_t gc_hash_digest_length (Gc_hash hash) { size_t len; switch (hash) { case GC_MD2: len = GC_MD2_DIGEST_SIZE; break; case GC_MD4: len = GC_MD4_DIGEST_SIZE; break; case GC_MD5: len = GC_MD5_DIGEST_SIZE; break; case GC_RMD160: len = GC_RMD160_DIGEST_SIZE; break; case GC_SHA1: len = GC_SHA1_DIGEST_SIZE; break; case GC_SHA256: len = GC_SHA256_DIGEST_SIZE; break; case GC_SHA512: len = GC_SHA512_DIGEST_SIZE; break; case GC_SM3: len = GC_SM3_DIGEST_SIZE; break; default: return 0; } return len; } void gc_hash_write (gc_hash_handle handle, size_t len, const char *data) { _gc_hash_ctx *ctx = handle; switch (ctx->alg) { #if GNULIB_GC_MD2 case GC_MD2: md2_process_bytes (data, len, &ctx->md2Context); break; #endif #if GNULIB_GC_MD4 case GC_MD4: md4_process_bytes (data, len, &ctx->md4Context); break; #endif #if GNULIB_GC_MD5 case GC_MD5: md5_process_bytes (data, len, &ctx->md5Context); break; #endif #if GNULIB_GC_SHA1 case GC_SHA1: sha1_process_bytes (data, len, &ctx->sha1Context); break; #endif #if GNULIB_GC_SHA256 case GC_SHA256: sha256_process_bytes (data, len, &ctx->sha256Context); break; #endif #if GNULIB_GC_SHA512 case GC_SHA512: sha512_process_bytes (data, len, &ctx->sha512Context); break; #endif #if GNULIB_GC_SM3 case GC_SM3: sm3_process_bytes (data, len, &ctx->sm3Context); break; #endif default: break; } } const char * gc_hash_read (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; const char *ret = NULL; switch (ctx->alg) { #if GNULIB_GC_MD2 case GC_MD2: md2_finish_ctx (&ctx->md2Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_MD4 case GC_MD4: md4_finish_ctx (&ctx->md4Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_MD5 case GC_MD5: md5_finish_ctx (&ctx->md5Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_SHA1 case GC_SHA1: sha1_finish_ctx (&ctx->sha1Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_SHA256 case GC_SHA256: sha256_finish_ctx (&ctx->sha256Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_SHA512 case GC_SHA512: sha512_finish_ctx (&ctx->sha512Context, ctx->hash); ret = ctx->hash; break; #endif #if GNULIB_GC_SM3 case GC_SM3: sm3_finish_ctx (&ctx->sm3Context, ctx->hash); ret = ctx->hash; break; #endif default: return NULL; } return ret; } void gc_hash_close (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; free (ctx); } Gc_rc gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) { switch (hash) { #if GNULIB_GC_MD2 case GC_MD2: md2_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_MD4 case GC_MD4: md4_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_MD5 case GC_MD5: md5_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_SHA1 case GC_SHA1: sha1_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_SHA256 case GC_SHA256: sha256_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_SHA512 case GC_SHA512: sha512_buffer (in, inlen, resbuf); break; #endif #if GNULIB_GC_SM3 case GC_SM3: sm3_buffer (in, inlen, resbuf); break; #endif default: return GC_INVALID_HASH; } return GC_OK; } #if GNULIB_GC_MD2 Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf) { md2_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_MD4 Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf) { md4_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_MD5 Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf) { md5_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_SHA1 Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf) { sha1_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_SHA256 Gc_rc gc_sha256 (const void *in, size_t inlen, void *resbuf) { sha256_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_SHA512 Gc_rc gc_sha512 (const void *in, size_t inlen, void *resbuf) { sha512_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_SM3 Gc_rc gc_sm3 (const void *in, size_t inlen, void *resbuf) { sm3_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_HMAC_MD5 Gc_rc gc_hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { hmac_md5 (key, keylen, in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA1 Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { hmac_sha1 (key, keylen, in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA256 Gc_rc gc_hmac_sha256 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { hmac_sha256 (key, keylen, in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA512 Gc_rc gc_hmac_sha512 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { hmac_sha512 (key, keylen, in, inlen, resbuf); return GC_OK; } #endif ���������������������������������������gnulib-20210822~d383792/lib/gc-libgcrypt.c����������������������������������������������������������0000664�0000000�0000000�00000043605�14110572173�0017607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC. * Copyright (C) 2002-2021 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/>. * */ /* Note: This file is only built if GC uses Libgcrypt. */ #include <config.h> /* Get prototype. */ #include "gc.h" #include <stdlib.h> #include <string.h> /* Get libgcrypt API. */ #include <gcrypt.h> #if GNULIB_GC_MD2 /* libgcrypt declares GCRY_MD_MD2 but does not actually implement the MD2 algorithm. Therefore take the implementation from gnulib. */ # include "md2.h" #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 # include "sm3.h" #endif #include <assert.h> #ifndef MIN_GCRYPT_VERSION # define MIN_GCRYPT_VERSION "1.4.4" #endif /* Initialization. */ Gc_rc gc_init (void) { gcry_error_t err; err = gcry_control (GCRYCTL_ANY_INITIALIZATION_P); if (err == GPG_ERR_NO_ERROR) { if (gcry_control (GCRYCTL_DISABLE_SECMEM, NULL, 0)) return GC_INIT_ERROR; if (gcry_check_version (MIN_GCRYPT_VERSION) == NULL) return GC_INIT_ERROR; err = gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL, 0); if (err != GPG_ERR_NO_ERROR) return GC_INIT_ERROR; } return GC_OK; } void gc_done (void) { return; } #if GNULIB_GC_RANDOM /* Randomness. */ Gc_rc gc_nonce (char *data, size_t datalen) { gcry_create_nonce ((unsigned char *) data, datalen); return GC_OK; } Gc_rc gc_pseudo_random (char *data, size_t datalen) { gcry_randomize ((unsigned char *) data, datalen, GCRY_STRONG_RANDOM); return GC_OK; } Gc_rc gc_random (char *data, size_t datalen) { gcry_randomize ((unsigned char *) data, datalen, GCRY_VERY_STRONG_RANDOM); return GC_OK; } #endif /* Memory allocation. */ void gc_set_allocators (gc_malloc_t func_malloc, gc_malloc_t secure_malloc, gc_secure_check_t secure_check, gc_realloc_t func_realloc, gc_free_t func_free) { gcry_set_allocation_handler (func_malloc, secure_malloc, secure_check, func_realloc, func_free); } /* Ciphers. */ Gc_rc gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode, gc_cipher_handle * outhandle) { int gcryalg, gcrymode; gcry_error_t err; switch (alg) { case GC_AES128: gcryalg = GCRY_CIPHER_RIJNDAEL; break; case GC_AES192: gcryalg = GCRY_CIPHER_RIJNDAEL; break; case GC_AES256: gcryalg = GCRY_CIPHER_RIJNDAEL256; break; case GC_3DES: gcryalg = GCRY_CIPHER_3DES; break; case GC_DES: gcryalg = GCRY_CIPHER_DES; break; case GC_ARCFOUR128: case GC_ARCFOUR40: gcryalg = GCRY_CIPHER_ARCFOUR; break; case GC_ARCTWO40: gcryalg = GCRY_CIPHER_RFC2268_40; break; #ifdef HAVE_CAMELLIA case GC_CAMELLIA128: gcryalg = GCRY_CIPHER_CAMELLIA128; break; case GC_CAMELLIA256: gcryalg = GCRY_CIPHER_CAMELLIA256; break; #endif default: return GC_INVALID_CIPHER; } switch (mode) { case GC_ECB: gcrymode = GCRY_CIPHER_MODE_ECB; break; case GC_CBC: gcrymode = GCRY_CIPHER_MODE_CBC; break; case GC_STREAM: gcrymode = GCRY_CIPHER_MODE_STREAM; break; default: return GC_INVALID_CIPHER; } err = gcry_cipher_open ((gcry_cipher_hd_t *) outhandle, gcryalg, gcrymode, 0); if (gcry_err_code (err)) return GC_INVALID_CIPHER; return GC_OK; } Gc_rc gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key) { gcry_error_t err; err = gcry_cipher_setkey ((gcry_cipher_hd_t) handle, key, keylen); if (gcry_err_code (err)) return GC_INVALID_CIPHER; return GC_OK; } Gc_rc gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv) { gcry_error_t err; err = gcry_cipher_setiv ((gcry_cipher_hd_t) handle, iv, ivlen); if (gcry_err_code (err)) return GC_INVALID_CIPHER; return GC_OK; } Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data) { if (gcry_cipher_encrypt ((gcry_cipher_hd_t) handle, data, len, NULL, len) != 0) return GC_INVALID_CIPHER; return GC_OK; } Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data) { if (gcry_cipher_decrypt ((gcry_cipher_hd_t) handle, data, len, NULL, len) != 0) return GC_INVALID_CIPHER; return GC_OK; } Gc_rc gc_cipher_close (gc_cipher_handle handle) { gcry_cipher_close (handle); return GC_OK; } /* Hashes. */ /* Maximum of GC_MD2_DIGEST_SIZE and GC_SM3_DIGEST_SIZE. */ #define MAX_DIGEST_SIZE 32 typedef struct _gc_hash_ctx { Gc_hash alg; Gc_hash_mode mode; gcry_md_hd_t gch; #if GNULIB_GC_MD2 || (GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3) char hash[MAX_DIGEST_SIZE]; #endif #if GNULIB_GC_MD2 struct md2_ctx md2Context; #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 struct sm3_ctx sm3Context; #endif } _gc_hash_ctx; Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) { _gc_hash_ctx *ctx; int gcryalg = 0, gcrymode = 0; gcry_error_t err; Gc_rc rc = GC_OK; ctx = calloc (sizeof (*ctx), 1); if (!ctx) return GC_MALLOC_ERROR; ctx->alg = hash; ctx->mode = mode; switch (hash) { #if GNULIB_GC_MD2 case GC_MD2: /* Not needed, because ctx is already zero-initialized. */ /*md2_init_ctx (&ctx->md2Context);*/ gcryalg = GCRY_MD_NONE; break; #endif case GC_MD4: gcryalg = GCRY_MD_MD4; break; case GC_MD5: gcryalg = GCRY_MD_MD5; break; case GC_SHA1: gcryalg = GCRY_MD_SHA1; break; case GC_SHA256: gcryalg = GCRY_MD_SHA256; break; case GC_SHA384: gcryalg = GCRY_MD_SHA384; break; case GC_SHA512: gcryalg = GCRY_MD_SHA512; break; case GC_SHA224: gcryalg = GCRY_MD_SHA224; break; case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; #if GNULIB_GC_SM3 case GC_SM3: # if LIBGCRYPT_HAS_MD_SM3 gcryalg = GCRY_MD_SM3; # else sm3_init_ctx (&ctx->sm3Context); gcryalg = GCRY_MD_NONE; # endif break; #endif default: rc = GC_INVALID_HASH; } switch (mode) { case GC_NULL: gcrymode = 0; break; case GC_HMAC: gcrymode = GCRY_MD_FLAG_HMAC; break; default: rc = GC_INVALID_HASH; } if (rc == GC_OK && gcryalg != GCRY_MD_NONE) { err = gcry_md_open (&ctx->gch, gcryalg, gcrymode); if (gcry_err_code (err)) rc = GC_INVALID_HASH; } if (rc == GC_OK) *outhandle = ctx; else free (ctx); return rc; } Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle * outhandle) { _gc_hash_ctx *in = handle; _gc_hash_ctx *out; int err; *outhandle = out = calloc (sizeof (*out), 1); if (!out) return GC_MALLOC_ERROR; memcpy (out, in, sizeof (*out)); err = gcry_md_copy (&out->gch, in->gch); if (err) { free (out); return GC_INVALID_HASH; } return GC_OK; } size_t gc_hash_digest_length (Gc_hash hash) { size_t len; switch (hash) { case GC_MD2: len = GC_MD2_DIGEST_SIZE; break; case GC_MD4: len = GC_MD4_DIGEST_SIZE; break; case GC_MD5: len = GC_MD5_DIGEST_SIZE; break; case GC_RMD160: len = GC_RMD160_DIGEST_SIZE; break; case GC_SHA1: len = GC_SHA1_DIGEST_SIZE; break; case GC_SHA256: len = GC_SHA256_DIGEST_SIZE; break; case GC_SHA384: len = GC_SHA384_DIGEST_SIZE; break; case GC_SHA512: len = GC_SHA512_DIGEST_SIZE; break; case GC_SHA224: len = GC_SHA224_DIGEST_SIZE; break; case GC_SM3: len = GC_SM3_DIGEST_SIZE; break; default: return 0; } return len; } void gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key) { _gc_hash_ctx *ctx = handle; #if GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 if (ctx->alg != GC_SM3) #endif gcry_md_setkey (ctx->gch, key, len); } void gc_hash_write (gc_hash_handle handle, size_t len, const char *data) { _gc_hash_ctx *ctx = handle; #if GNULIB_GC_MD2 if (ctx->alg == GC_MD2) md2_process_bytes (data, len, &ctx->md2Context); else #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 if (ctx->alg == GC_SM3) sm3_process_bytes (data, len, &ctx->sm3Context); else #endif gcry_md_write (ctx->gch, data, len); } const char * gc_hash_read (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; const char *digest; #if GNULIB_GC_MD2 if (ctx->alg == GC_MD2) { md2_finish_ctx (&ctx->md2Context, ctx->hash); digest = ctx->hash; } else #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 if (ctx->alg == GC_SM3) { sm3_finish_ctx (&ctx->sm3Context, ctx->hash); digest = ctx->hash; } else #endif { gcry_md_final (ctx->gch); digest = (const char *) gcry_md_read (ctx->gch, 0); } return digest; } void gc_hash_close (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; #if GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #endif #if GNULIB_GC_SM3 && !LIBGCRYPT_HAS_MD_SM3 if (ctx->alg != GC_SM3) #endif gcry_md_close (ctx->gch); free (ctx); } Gc_rc gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) { int gcryalg; switch (hash) { #if GNULIB_GC_MD2 case GC_MD2: md2_buffer (in, inlen, resbuf); return GC_OK; #endif #if GNULIB_GC_MD4 case GC_MD4: gcryalg = GCRY_MD_MD4; break; #endif #if GNULIB_GC_MD5 case GC_MD5: gcryalg = GCRY_MD_MD5; break; #endif #if GNULIB_GC_SHA1 case GC_SHA1: gcryalg = GCRY_MD_SHA1; break; #endif #if GNULIB_GC_SHA256 case GC_SHA256: gcryalg = GCRY_MD_SHA256; break; #endif #if GNULIB_GC_SHA384 case GC_SHA384: gcryalg = GCRY_MD_SHA384; break; #endif #if GNULIB_GC_SHA512 case GC_SHA512: gcryalg = GCRY_MD_SHA512; break; #endif #if GNULIB_GC_SHA224 case GC_SHA224: gcryalg = GCRY_MD_SHA224; break; #endif #if GNULIB_GC_RMD160 case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; #endif #if GNULIB_GC_SM3 case GC_SM3: # if !LIBGCRYPT_HAS_MD_SM3 sm3_buffer (in, inlen, resbuf); return GC_OK; # else gcryalg = GCRY_MD_SM3; break; # endif #endif default: return GC_INVALID_HASH; } gcry_md_hash_buffer (gcryalg, resbuf, in, inlen); return GC_OK; } /* One-call interface. */ #if GNULIB_GC_MD2 Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf) { md2_buffer (in, inlen, resbuf); return GC_OK; } #endif #if GNULIB_GC_MD4 Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf) { size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_MD4); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_MD4_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_MD4, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_MD4); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; } #endif #if GNULIB_GC_MD5 Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf) { size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_MD5); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_MD5_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_MD5, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_MD5); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; } #endif #if GNULIB_GC_SHA1 Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf) { size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_SHA1_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_SHA1, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_SHA1); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; } #endif #if GNULIB_GC_SHA256 Gc_rc gc_sha256 (const void *in, size_t inlen, void *resbuf) { size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA256); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_SHA256_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_SHA256, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_SHA256); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; } #endif #if GNULIB_GC_SHA512 Gc_rc gc_sha512 (const void *in, size_t inlen, void *resbuf) { size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA512); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_SHA512_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_SHA512, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_SHA512); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; } #endif #if GNULIB_GC_SM3 Gc_rc gc_sm3 (const void *in, size_t inlen, void *resbuf) { # if !LIBGCRYPT_HAS_MD_SM3 sm3_buffer (in, inlen, resbuf); return GC_OK; # else size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SM3); gcry_md_hd_t hd; gpg_error_t err; unsigned char *p; assert (outlen == GC_SM3_DIGEST_SIZE); err = gcry_md_open (&hd, GCRY_MD_SM3, 0); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; gcry_md_write (hd, in, inlen); p = gcry_md_read (hd, GCRY_MD_SM3); if (p == NULL) { gcry_md_close (hd); return GC_INVALID_HASH; } memcpy (resbuf, p, outlen); gcry_md_close (hd); return GC_OK; # endif } #endif #if GNULIB_GC_HMAC_MD5 Gc_rc gc_hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_MD5); gcry_md_hd_t mdh; unsigned char *hash; gpg_error_t err; assert (hlen == GC_MD5_DIGEST_SIZE); err = gcry_md_open (&mdh, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; err = gcry_md_setkey (mdh, key, keylen); if (err != GPG_ERR_NO_ERROR) { gcry_md_close (mdh); return GC_INVALID_HASH; } gcry_md_write (mdh, in, inlen); hash = gcry_md_read (mdh, GCRY_MD_MD5); if (hash == NULL) { gcry_md_close (mdh); return GC_INVALID_HASH; } memcpy (resbuf, hash, hlen); gcry_md_close (mdh); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA1 Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); gcry_md_hd_t mdh; unsigned char *hash; gpg_error_t err; assert (hlen == GC_SHA1_DIGEST_SIZE); err = gcry_md_open (&mdh, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; err = gcry_md_setkey (mdh, key, keylen); if (err != GPG_ERR_NO_ERROR) { gcry_md_close (mdh); return GC_INVALID_HASH; } gcry_md_write (mdh, in, inlen); hash = gcry_md_read (mdh, GCRY_MD_SHA1); if (hash == NULL) { gcry_md_close (mdh); return GC_INVALID_HASH; } memcpy (resbuf, hash, hlen); gcry_md_close (mdh); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA256 Gc_rc gc_hmac_sha256 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA256); gcry_md_hd_t mdh; unsigned char *hash; gpg_error_t err; assert (hlen == GC_SHA256_DIGEST_SIZE); err = gcry_md_open (&mdh, GCRY_MD_SHA256, GCRY_MD_FLAG_HMAC); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; err = gcry_md_setkey (mdh, key, keylen); if (err != GPG_ERR_NO_ERROR) { gcry_md_close (mdh); return GC_INVALID_HASH; } gcry_md_write (mdh, in, inlen); hash = gcry_md_read (mdh, GCRY_MD_SHA256); if (hash == NULL) { gcry_md_close (mdh); return GC_INVALID_HASH; } memcpy (resbuf, hash, hlen); gcry_md_close (mdh); return GC_OK; } #endif #if GNULIB_GC_HMAC_SHA512 Gc_rc gc_hmac_sha512 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA512); gcry_md_hd_t mdh; unsigned char *hash; gpg_error_t err; assert (hlen == GC_SHA512_DIGEST_SIZE); err = gcry_md_open (&mdh, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC); if (err != GPG_ERR_NO_ERROR) return GC_INVALID_HASH; err = gcry_md_setkey (mdh, key, keylen); if (err != GPG_ERR_NO_ERROR) { gcry_md_close (mdh); return GC_INVALID_HASH; } gcry_md_write (mdh, in, inlen); hash = gcry_md_read (mdh, GCRY_MD_SHA512); if (hash == NULL) { gcry_md_close (mdh); return GC_INVALID_HASH; } memcpy (resbuf, hash, hlen); gcry_md_close (mdh); return GC_OK; } #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gc-pbkdf2-sha1.c��������������������������������������������������������0000664�0000000�0000000�00000002211�14110572173�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-pbkdf2-sha1.c --- Password-Based Key Derivation Function a'la PKCS#5 Copyright (C) 2002-2006, 2009-2021 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 Simon Josefsson. */ #include <config.h> #include "gc.h" #include <stdlib.h> #include <string.h> Gc_rc gc_pbkdf2_sha1 (const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *DK, size_t dkLen) { return gc_pbkdf2_hmac (GC_SHA1, P, Plen, S, Slen, c, DK, dkLen); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gc-pbkdf2.c�������������������������������������������������������������0000664�0000000�0000000�00000006407�14110572173�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-pbkdf2.c --- Password-Based Key Derivation Function a'la PKCS#5 Copyright (C) 2002-2006, 2009-2021 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 Simon Josefsson. */ #include <config.h> #include "gc.h" #include <stdlib.h> #include <string.h> typedef Gc_rc (*gc_prf_func) (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); static Gc_rc gc_pbkdf2_prf (gc_prf_func prf, size_t hLen, const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *DK, size_t dkLen) { char U[GC_MAX_DIGEST_SIZE]; char T[GC_MAX_DIGEST_SIZE]; unsigned int u; unsigned int l; unsigned int r; unsigned int i; unsigned int k; int rc; char *tmp; size_t tmplen = Slen + 4; if (c == 0) return GC_PKCS5_INVALID_ITERATION_COUNT; if (dkLen == 0) return GC_PKCS5_INVALID_DERIVED_KEY_LENGTH; if (dkLen > 4294967295U) return GC_PKCS5_DERIVED_KEY_TOO_LONG; l = ((dkLen - 1) / hLen) + 1; r = dkLen - (l - 1) * hLen; tmp = malloc (tmplen); if (tmp == NULL) return GC_MALLOC_ERROR; memcpy (tmp, S, Slen); for (i = 1; i <= l; i++) { memset (T, 0, hLen); for (u = 1; u <= c; u++) { if (u == 1) { tmp[Slen + 0] = (i & 0xff000000) >> 24; tmp[Slen + 1] = (i & 0x00ff0000) >> 16; tmp[Slen + 2] = (i & 0x0000ff00) >> 8; tmp[Slen + 3] = (i & 0x000000ff) >> 0; rc = prf (P, Plen, tmp, tmplen, U); } else rc = prf (P, Plen, U, hLen, U); if (rc != GC_OK) { free (tmp); return rc; } for (k = 0; k < hLen; k++) T[k] ^= U[k]; } memcpy (DK + (i - 1) * hLen, T, i == l ? r : hLen); } free (tmp); return GC_OK; } Gc_rc gc_pbkdf2_hmac (Gc_hash hash, const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *DK, size_t dkLen) { gc_prf_func prf; size_t hLen; switch (hash) { #if GNULIB_GC_HMAC_SHA1 case GC_SHA1: prf = gc_hmac_sha1; hLen = GC_SHA1_DIGEST_SIZE; break; #endif #if GNULIB_GC_HMAC_SHA256 case GC_SHA256: prf = gc_hmac_sha256; hLen = GC_SHA256_DIGEST_SIZE; break; #endif #if GNULIB_GC_HMAC_SHA512 case GC_SHA512: prf = gc_hmac_sha512; hLen = GC_SHA512_DIGEST_SIZE; break; #endif default: return GC_INVALID_HASH; } return gc_pbkdf2_prf (prf, hLen, P, Plen, S, Slen, c, DK, dkLen); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gc.h��������������������������������������������������������������������0000664�0000000�0000000�00000031320�14110572173�0015606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc.h --- Header file for implementation agnostic crypto wrapper API. * Copyright (C) 2002-2005, 2007-2008, 2011-2021 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/>. * */ #ifndef _GL_GC_H # define _GL_GC_H /* Get size_t. */ # include <stddef.h> enum Gc_rc { GC_OK = 0, GC_MALLOC_ERROR, GC_INIT_ERROR, GC_RANDOM_ERROR, GC_INVALID_CIPHER, GC_INVALID_HASH, GC_PKCS5_INVALID_ITERATION_COUNT, GC_PKCS5_INVALID_DERIVED_KEY_LENGTH, GC_PKCS5_DERIVED_KEY_TOO_LONG }; typedef enum Gc_rc Gc_rc; /* Hash types. */ enum Gc_hash { GC_MD4, GC_MD5, GC_SHA1, GC_MD2, GC_RMD160, GC_SHA256, GC_SHA384, GC_SHA512, GC_SHA224, GC_SM3 }; typedef enum Gc_hash Gc_hash; enum Gc_hash_mode { GC_NULL, GC_HMAC }; typedef enum Gc_hash_mode Gc_hash_mode; typedef void *gc_hash_handle; #define GC_MD2_DIGEST_SIZE 16 #define GC_MD4_DIGEST_SIZE 16 #define GC_MD5_DIGEST_SIZE 16 #define GC_RMD160_DIGEST_SIZE 20 #define GC_SHA1_DIGEST_SIZE 20 #define GC_SHA256_DIGEST_SIZE 32 #define GC_SHA384_DIGEST_SIZE 48 #define GC_SHA512_DIGEST_SIZE 64 #define GC_SHA224_DIGEST_SIZE 24 #define GC_SM3_DIGEST_SIZE 32 #define GC_MAX_DIGEST_SIZE 64 /* Cipher types. */ enum Gc_cipher { GC_AES128, GC_AES192, GC_AES256, GC_3DES, GC_DES, GC_ARCFOUR128, GC_ARCFOUR40, GC_ARCTWO40, GC_CAMELLIA128, GC_CAMELLIA256 }; typedef enum Gc_cipher Gc_cipher; enum Gc_cipher_mode { GC_ECB, GC_CBC, GC_STREAM }; typedef enum Gc_cipher_mode Gc_cipher_mode; typedef void *gc_cipher_handle; /* Call before respectively after any other functions. */ extern Gc_rc gc_init (void); extern void gc_done (void); /* Memory allocation (avoid). */ typedef void *(*gc_malloc_t) (size_t n); typedef int (*gc_secure_check_t) (const void *); typedef void *(*gc_realloc_t) (void *p, size_t n); typedef void (*gc_free_t) (void *); extern void gc_set_allocators (gc_malloc_t func_malloc, gc_malloc_t secure_malloc, gc_secure_check_t secure_check, gc_realloc_t func_realloc, gc_free_t func_free); /* Randomness. */ extern Gc_rc gc_nonce (char *data, size_t datalen); extern Gc_rc gc_pseudo_random (char *data, size_t datalen); extern Gc_rc gc_random (char *data, size_t datalen); /* Ciphers. */ extern Gc_rc gc_cipher_open (Gc_cipher cipher, Gc_cipher_mode mode, gc_cipher_handle *outhandle); extern Gc_rc gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char *key); extern Gc_rc gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv); extern Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data); extern Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data); extern Gc_rc gc_cipher_close (gc_cipher_handle handle); /* Hashes. */ extern Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle *outhandle); extern Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle *outhandle); extern size_t gc_hash_digest_length (Gc_hash hash) _GL_ATTRIBUTE_CONST; extern void gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key); extern void gc_hash_write (gc_hash_handle handle, size_t len, const char *data); extern const char *gc_hash_read (gc_hash_handle handle); extern void gc_hash_close (gc_hash_handle handle); /* Compute a hash value over buffer IN of INLEN bytes size using the algorithm HASH, placing the result in the pre-allocated buffer OUT. The required size of OUT depends on HASH, and is generally GC_<HASH>_DIGEST_SIZE. For example, for GC_MD5 the output buffer must be 16 bytes. The return value is 0 (GC_OK) on success, or another Gc_rc error code. */ extern Gc_rc gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *out); /* One-call interface. */ extern Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_sha256 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_sha512 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_sm3 (const void *in, size_t inlen, void *resbuf); extern Gc_rc gc_hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); extern Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); extern Gc_rc gc_hmac_sha256 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); extern Gc_rc gc_hmac_sha512 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); /* Derive cryptographic keys using PKCS#5 PBKDF2 (RFC 2898) from a password P of length PLEN, with salt S of length SLEN, placing the result in pre-allocated buffer DK of length DKLEN. The PRF is hard coded to be HMAC with HASH. An iteration count is specified in C (> 0), where a larger value means this function take more time (typical iteration counts are 1000-20000). This function "stretches" the key to be exactly dkLen bytes long. GC_OK is returned on success, otherwise a Gc_rc error code is returned. */ extern Gc_rc gc_pbkdf2_hmac (Gc_hash hash, const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *restrict DK, size_t dkLen); extern Gc_rc gc_pbkdf2_sha1 (const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *restrict DK, size_t dkLen); /* TODO: From: Simon Josefsson <jas@extundo.com> Subject: Re: generic crypto Newsgroups: gmane.comp.lib.gnulib.bugs Cc: bug-gnulib@gnu.org Date: Fri, 07 Oct 2005 12:50:57 +0200 Mail-Copies-To: nobody Paul Eggert <eggert@CS.UCLA.EDU> writes: > Simon Josefsson <jas@extundo.com> writes: > >> * Perhaps the /dev/?random reading should be separated into a separate >> module? It might be useful outside of the gc layer too. > > Absolutely. I've been meaning to do that for months (for a "shuffle" > program I want to add to coreutils), but hadn't gotten around to it. > It would have to be generalized a bit. I'd like to have the file > descriptor cached, for example. I'll write a separate module for that part. I think we should even add a good PRNG that is re-seeded from /dev/?random frequently. GnuTLS can need a lot of random data on a big server, more than /dev/random can supply. And /dev/urandom might not be strong enough. Further, the security of /dev/?random can also be questionable. >> I'm also not sure about the names of those functions, they suggest >> a more higher-level API than what is really offered (i.e., the >> names "nonce" and "pseudo_random" and "random" imply certain >> cryptographic properties). > > Could you expand a bit more on that? What is the relationship between > nonce/pseudorandom/random and the /dev/ values you are using? There is none, that is the problem. Applications generally need different kind of "random" numbers. Sometimes they just need some random data and doesn't care whether it is possible for an attacker to compute the string (aka a "nonce"). Sometimes they need data that is very difficult to compute (i.e., computing it require inverting SHA1 or similar). Sometimes they need data that is not possible to compute, i.e., it wants real entropy collected over time on the system. Collecting the last kind of random data is very expensive, so it must not be used too often. The second kind of random data ("pseudo random") is typically generated by seeding a good PRNG with a couple of hundred bytes of real entropy from the "real random" data pool. The "nonce" is usually computed using the PRNG as well, because PRNGs are usually fast. Pseudo-random data is typically used for session keys. Strong random data is often used to generate long-term keys (e.g., private RSA keys). Of course, there are many subtleties. There are several different kind of nonce:s. Sometimes a nonce is just an ever-increasing integer, starting from 0. Sometimes it is assumed to be unlikely to be the same as previous nonces, but without a requirement that the nonce is possible to guess. MD5(system clock) would thus suffice, if it isn't called too often. You can guess what the next value will be, but it will always be different. The problem is that /dev/?random doesn't offer any kind of semantic guarantees. But applications need an API that make that promise. I think we should do this in several steps: 1) Write a module that can read from /dev/?random. 2) Add a module for a known-good PRNG suitable for random number generation, that can be continuously re-seeded. 3) Add a high-level module that provide various different randomness functions. One for nonces, perhaps even different kind of nonces, one for pseudo random data, and one for strong random data. It is not clear whether we can hope to achieve the last one in a portable way. Further, it would be useful to allow users to provide their own entropy source as a file, used to seed the PRNG or initialize the strong randomness pool. This is used on embedded platforms that doesn't have enough interrupts to hope to generate good random data. > For example, why not use OpenBSD's /dev/arandom? I don't trust ARC4. For example, recent cryptographic efforts indicate that you must throw away the first 512 bytes generated from the PRNG for it to be secure. I don't know whether OpenBSD do this. Further, I recall some eprint paper on RC4 security that didn't inspire confidence. While I trust the random devices in OpenBSD more than Solaris/AIX/HPUX/etc, I think that since we need something better on Solaris/AIX/HPUX we'd might as well use it on OpenBSD or even Linux too. > Here is one thought. The user could specify a desired quality level > range, and the implementation then would supply random data that is at > least as good as the lower bound of the range. I.e., ihe > implementation refuses to produce any random data if it can't generate > data that is at least as good as the lower end of the range. The > upper bound of the range is advice from the user not to be any more > expensive than that, but the implementation can ignore the advice if > it doesn't have anything cheaper. I'm not sure this is a good idea. Users can't really be expected to understand this. Further, applications need many different kind of random data. Selecting the randomness level for each by the user will be too complicated. I think it is better if the application decide, from its cryptographic requirement, what entropy quality it require, and call the proper API. Meeting the implied semantic properties should be the job for gnulib. >> Perhaps gc_dev_random and gc_dev_urandom? > > To some extent. I'd rather insulate the user from the details of > where the random numbers come from. On the other hand we need to > provide a way for applications to specify a file that contains > random bits, so that people can override the defaults. Agreed. This may require some thinking before it is finalized. Is it ok to install the GC module as-is meanwhile? Then I can continue to add the stuff that GnuTLS need, and then come back to re-working the randomness module. That way, we have two different projects that use the code. GnuTLS includes the same randomness code that was in GNU SASL and that is in the current gc module. I feel much more comfortable working in small steps at a time, rather then working on this for a long time in gnulib and only later integrate the stuff in GnuTLS. Thanks, Simon */ #endif /* _GL_GC_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gcd.c�������������������������������������������������������������������0000664�0000000�0000000�00000004465�14110572173�0015757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arithmetic. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This 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> /* This file can also be used to define gcd functions for other unsigned types, such as 'unsigned long long' or 'uintmax_t'. */ #ifndef WORD_T /* Specification. */ # include "gcd.h" # define WORD_T unsigned long # define GCD gcd #endif #include <stdlib.h> /* Return the greatest common divisor of a > 0 and b > 0. */ WORD_T GCD (WORD_T a, WORD_T b) { /* Why no division, as in Euclid's algorithm? Because in Euclid's algorithm the division result floor(a/b) or floor(b/a) is very often = 1 or = 2, and nearly always < 8. A sequence of a few subtractions and tests is faster than a division. */ /* Why not Euclid's algorithm? Because the two integers can be shifted by 1 bit in a single instruction, and the algorithm uses fewer variables than Euclid's algorithm. */ WORD_T c = a | b; c = c ^ (c - 1); /* c = largest power of 2 that divides a and b. */ if (a & c) { if (b & c) goto odd_odd; else goto odd_even; } else { if (b & c) goto even_odd; else abort (); } for (;;) { odd_odd: /* a/c and b/c both odd */ if (a == b) break; if (a > b) { a = a - b; even_odd: /* a/c even, b/c odd */ do a = a >> 1; while ((a & c) == 0); } else { b = b - a; odd_even: /* a/c odd, b/c even */ do b = b >> 1; while ((b & c) == 0); } } /* a = b */ return a; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gcd.h�������������������������������������������������������������������0000664�0000000�0000000�00000002015�14110572173�0015751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arithmetic. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This 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 _GCD_H #define _GCD_H #ifdef __cplusplus extern "C" { #endif /* Return the greatest common divisor of a > 0 and b > 0. */ extern unsigned long gcd (unsigned long a, unsigned long b); #ifdef __cplusplus } #endif #endif /* _GCD_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gen-uni-tables.c��������������������������������������������������������0000664�0000000�0000000�00001250556�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate Unicode conforming character classification tables and line break properties tables and word break property tables and decomposition/composition and case mapping tables from a UnicodeData file. Copyright (C) 2000-2002, 2004, 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2000-2002. This 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/>. */ /* Usage example: $ gen-uni-tables /usr/local/share/www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/PropList.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/DerivedCoreProperties.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/ArabicShaping.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/Scripts.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/Blocks.txt \ /usr/local/share/www.unicode.org/Public/3.0-Update1/PropList-3.0.1.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/EastAsianWidth.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/LineBreak.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/auxiliary/WordBreakProperty.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/auxiliary/GraphemeBreakProperty.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/CompositionExclusions.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/SpecialCasing.txt \ /usr/local/share/www.unicode.org/Public/9.0.0/ucd/CaseFolding.txt \ 9.0.0 */ #include <assert.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* ========================================================================= */ /* Reading UnicodeData.txt. */ /* See UCD.html. */ /* This structure represents one line in the UnicodeData.txt file. */ struct unicode_attribute { const char *name; /* Character name */ const char *category; /* General category */ const char *combining; /* Canonical combining class */ const char *bidi; /* Bidirectional category */ const char *decomposition; /* Character decomposition mapping */ const char *decdigit; /* Decimal digit value */ const char *digit; /* Digit value */ const char *numeric; /* Numeric value */ bool mirrored; /* mirrored */ const char *oldname; /* Old Unicode 1.0 name */ const char *comment; /* Comment */ unsigned int upper; /* Uppercase mapping */ unsigned int lower; /* Lowercase mapping */ unsigned int title; /* Titlecase mapping */ }; /* Missing fields are represented with "" for strings, and NONE for characters. */ #define NONE (~(unsigned int)0) /* The entire contents of the UnicodeData.txt file. */ struct unicode_attribute unicode_attributes [0x110000]; /* Stores in unicode_attributes[i] the values from the given fields. */ static void fill_attribute (unsigned int i, const char *field1, const char *field2, const char *field3, const char *field4, const char *field5, const char *field6, const char *field7, const char *field8, const char *field9, const char *field10, const char *field11, const char *field12, const char *field13, const char *field14) { struct unicode_attribute * uni; if (i >= 0x110000) { fprintf (stderr, "index too large\n"); exit (1); } if (strcmp (field2, "Cs") == 0) /* Surrogates are UTF-16 artifacts, not real characters. Ignore them. */ return; uni = &unicode_attributes[i]; /* Copy the strings. */ uni->name = strdup (field1); uni->category = (field2[0] == '\0' ? "" : strdup (field2)); uni->combining = (field3[0] == '\0' ? "" : strdup (field3)); uni->bidi = (field4[0] == '\0' ? "" : strdup (field4)); uni->decomposition = (field5[0] == '\0' ? "" : strdup (field5)); uni->decdigit = (field6[0] == '\0' ? "" : strdup (field6)); uni->digit = (field7[0] == '\0' ? "" : strdup (field7)); uni->numeric = (field8[0] == '\0' ? "" : strdup (field8)); uni->mirrored = (field9[0] == 'Y'); uni->oldname = (field10[0] == '\0' ? "" : strdup (field10)); uni->comment = (field11[0] == '\0' ? "" : strdup (field11)); uni->upper = (field12[0] =='\0' ? NONE : strtoul (field12, NULL, 16)); uni->lower = (field13[0] =='\0' ? NONE : strtoul (field13, NULL, 16)); uni->title = (field14[0] =='\0' ? NONE : strtoul (field14, NULL, 16)); } /* Maximum length of a field in the UnicodeData.txt file. */ #define FIELDLEN 160 /* Reads the next field from STREAM. The buffer BUFFER has size FIELDLEN. Reads up to (but excluding) DELIM. Returns 1 when a field was successfully read, otherwise 0. */ static int getfield (FILE *stream, char *buffer, int delim) { int count = 0; int c; for (; (c = getc (stream)), (c != EOF && c != delim); ) { /* The original unicode.org UnicodeData.txt file happens to have CR/LF line terminators. Silently convert to LF. */ if (c == '\r') continue; /* Put c into the buffer. */ if (++count >= FIELDLEN - 1) { fprintf (stderr, "field longer than expected, increase FIELDLEN\n"); exit (1); } *buffer++ = c; } if (c == EOF) return 0; *buffer = '\0'; return 1; } /* Stores in unicode_attributes[] the entire contents of the UnicodeData.txt file. */ static void fill_attributes (const char *unicodedata_filename) { unsigned int i, j; FILE *stream; char field0[FIELDLEN]; char field1[FIELDLEN]; char field2[FIELDLEN]; char field3[FIELDLEN]; char field4[FIELDLEN]; char field5[FIELDLEN]; char field6[FIELDLEN]; char field7[FIELDLEN]; char field8[FIELDLEN]; char field9[FIELDLEN]; char field10[FIELDLEN]; char field11[FIELDLEN]; char field12[FIELDLEN]; char field13[FIELDLEN]; char field14[FIELDLEN]; int lineno = 0; for (i = 0; i < 0x110000; i++) unicode_attributes[i].name = NULL; stream = fopen (unicodedata_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", unicodedata_filename); exit (1); } for (;;) { int n; lineno++; n = getfield (stream, field0, ';'); n += getfield (stream, field1, ';'); n += getfield (stream, field2, ';'); n += getfield (stream, field3, ';'); n += getfield (stream, field4, ';'); n += getfield (stream, field5, ';'); n += getfield (stream, field6, ';'); n += getfield (stream, field7, ';'); n += getfield (stream, field8, ';'); n += getfield (stream, field9, ';'); n += getfield (stream, field10, ';'); n += getfield (stream, field11, ';'); n += getfield (stream, field12, ';'); n += getfield (stream, field13, ';'); n += getfield (stream, field14, '\n'); if (n == 0) break; if (n != 15) { fprintf (stderr, "short line in '%s':%d\n", unicodedata_filename, lineno); exit (1); } i = strtoul (field0, NULL, 16); if (field1[0] == '<' && strlen (field1) >= 9 && strcmp (field1 + strlen (field1) - 8, ", First>") == 0) { /* Deal with a range. */ lineno++; n = getfield (stream, field0, ';'); n += getfield (stream, field1, ';'); n += getfield (stream, field2, ';'); n += getfield (stream, field3, ';'); n += getfield (stream, field4, ';'); n += getfield (stream, field5, ';'); n += getfield (stream, field6, ';'); n += getfield (stream, field7, ';'); n += getfield (stream, field8, ';'); n += getfield (stream, field9, ';'); n += getfield (stream, field10, ';'); n += getfield (stream, field11, ';'); n += getfield (stream, field12, ';'); n += getfield (stream, field13, ';'); n += getfield (stream, field14, '\n'); if (n != 15) { fprintf (stderr, "missing end range in '%s':%d\n", unicodedata_filename, lineno); exit (1); } if (!(field1[0] == '<' && strlen (field1) >= 8 && strcmp (field1 + strlen (field1) - 7, ", Last>") == 0)) { fprintf (stderr, "missing end range in '%s':%d\n", unicodedata_filename, lineno); exit (1); } field1[strlen (field1) - 7] = '\0'; j = strtoul (field0, NULL, 16); for (; i <= j; i++) fill_attribute (i, field1+1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14); } else { /* Single character line */ fill_attribute (i, field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14); } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", unicodedata_filename); exit (1); } } /* ========================================================================= */ /* Output the license notice for a library file. This closes an open C syntax comment. */ static void output_library_license (FILE *stream, bool lgplv2plus) { if (lgplv2plus) { /* These Gnulib modules are under the LGPLv2+ license. */ fprintf (stream, " This file is free software: you can redistribute it and/or modify\n"); fprintf (stream, " it under the terms of the GNU Lesser General Public License as\n"); fprintf (stream, " published by the Free Software Foundation; either version 2.1 of the\n"); fprintf (stream, " License, or (at your option) any later version.\n"); fprintf (stream, "\n"); fprintf (stream, " This file is distributed in the hope that it will be useful,\n"); fprintf (stream, " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); fprintf (stream, " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); fprintf (stream, " GNU Lesser General Public License for more details.\n"); fprintf (stream, "\n"); fprintf (stream, " You should have received a copy of the GNU Lesser General Public License\n"); fprintf (stream, " along with this program. If not, see <https://www.gnu.org/licenses/>. */\n"); } else { /* These Gnulib modules are under the 'LGPLv3+ or GPLv2+' license. */ fprintf (stream, " This program is free software.\n"); fprintf (stream, " It is dual-licensed under \"the GNU LGPLv3+ or the GNU GPLv2+\".\n"); fprintf (stream, " You can redistribute it and/or modify it under either\n"); fprintf (stream, " - the terms of the GNU Lesser General Public License as published\n"); fprintf (stream, " by the Free Software Foundation; either version 3, or (at your\n"); fprintf (stream, " option) any later version, or\n"); fprintf (stream, " - the terms of the GNU General Public License as published by the\n"); fprintf (stream, " Free Software Foundation; either version 2, or (at your option)\n"); fprintf (stream, " any later version, or\n"); fprintf (stream, " - the same dual license \"the GNU LGPLv3+ or the GNU GPLv2+\".\n"); fprintf (stream, "\n"); fprintf (stream, " This program is distributed in the hope that it will be useful,\n"); fprintf (stream, " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); fprintf (stream, " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"); fprintf (stream, " Lesser General Public License and the GNU General Public License\n"); fprintf (stream, " for more details.\n"); fprintf (stream, "\n"); fprintf (stream, " You should have received a copy of the GNU Lesser General Public\n"); fprintf (stream, " License and of the GNU General Public License along with this\n"); fprintf (stream, " program; if not, see <https://www.gnu.org/licenses/>. */\n"); } } /* Output the license notice for a tests file. This closes an open C syntax comment. */ static void output_tests_license (FILE *stream) { /* Gnulib tests modules are under the GPLv3+ license. */ fprintf (stream, " This program is free software: you can redistribute it and/or modify\n"); fprintf (stream, " it under the terms of the GNU General Public License as published by\n"); fprintf (stream, " the Free Software Foundation; either version 3 of the License, or\n"); fprintf (stream, " (at your option) any later version.\n"); fprintf (stream, "\n"); fprintf (stream, " This program is distributed in the hope that it will be useful,\n"); fprintf (stream, " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); fprintf (stream, " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); fprintf (stream, " GNU General Public License for more details.\n"); fprintf (stream, "\n"); fprintf (stream, " You should have received a copy of the GNU General Public License\n"); fprintf (stream, " along with this program. If not, see <https://www.gnu.org/licenses/>. */\n"); } /* ========================================================================= */ /* General category. */ /* See Unicode 3.0 book, section 4.5, UCD.html. */ static bool is_category_L (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L'); } static bool is_category_LC (unsigned int ch) { /* See PropertyValueAliases.txt. */ return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && (unicode_attributes[ch].category[1] == 'u' || unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 't')); } static bool is_category_Lu (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && unicode_attributes[ch].category[1] == 'u'); } static bool is_category_Ll (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && unicode_attributes[ch].category[1] == 'l'); } static bool is_category_Lt (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && unicode_attributes[ch].category[1] == 't'); } static bool is_category_Lm (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && unicode_attributes[ch].category[1] == 'm'); } static bool is_category_Lo (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'L' && unicode_attributes[ch].category[1] == 'o'); } static bool is_category_M (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'M'); } static bool is_category_Mn (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'M' && unicode_attributes[ch].category[1] == 'n'); } static bool is_category_Mc (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'M' && unicode_attributes[ch].category[1] == 'c'); } static bool is_category_Me (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'M' && unicode_attributes[ch].category[1] == 'e'); } static bool is_category_N (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'N'); } static bool is_category_Nd (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'd'); } static bool is_category_Nl (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'l'); } static bool is_category_No (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'o'); } static bool is_category_P (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P'); } static bool is_category_Pc (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'c'); } static bool is_category_Pd (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'd'); } static bool is_category_Ps (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 's'); } static bool is_category_Pe (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'e'); } static bool is_category_Pi (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'i'); } static bool is_category_Pf (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'f'); } static bool is_category_Po (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'o'); } static bool is_category_S (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'S'); } static bool is_category_Sm (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'm'); } static bool is_category_Sc (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'c'); } static bool is_category_Sk (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'k'); } static bool is_category_So (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'o'); } static bool is_category_Z (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z'); } static bool is_category_Zs (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && unicode_attributes[ch].category[1] == 's'); } static bool is_category_Zl (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && unicode_attributes[ch].category[1] == 'l'); } static bool is_category_Zp (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && unicode_attributes[ch].category[1] == 'p'); } static bool is_category_C (unsigned int ch) { return (unicode_attributes[ch].name == NULL || unicode_attributes[ch].category[0] == 'C'); } static bool is_category_Cc (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'C' && unicode_attributes[ch].category[1] == 'c'); } static bool is_category_Cf (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'C' && unicode_attributes[ch].category[1] == 'f'); } static bool is_category_Cs (unsigned int ch) { return (ch >= 0xd800 && ch < 0xe000); } static bool is_category_Co (unsigned int ch) { return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'C' && unicode_attributes[ch].category[1] == 'o'); } static bool is_category_Cn (unsigned int ch) { return (unicode_attributes[ch].name == NULL && !(ch >= 0xd800 && ch < 0xe000)); } /* Output a boolean property in a human readable format. */ static void debug_output_predicate (const char *filename, bool (*predicate) (unsigned int)) { FILE *stream; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } #if 0 /* This yields huge text output. */ for (ch = 0; ch < 0x110000; ch++) if (predicate (ch)) { fprintf (stream, "0x%04X\n", ch); } #else for (ch = 0; ch < 0x110000; ch++) if (predicate (ch)) { unsigned int first = ch; unsigned int last; while (ch + 1 < 0x110000 && predicate (ch + 1)) ch++; last = ch; if (first < last) fprintf (stream, "0x%04X..0x%04X\n", first, last); else fprintf (stream, "0x%04X\n", ch); } #endif if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Output the unit test for a boolean property. */ static void output_predicate_test (const char *filename, bool (*predicate) (unsigned int), const char *expression) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Test the Unicode character type functions.\n"); fprintf (stream, " Copyright (C) 2007 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); fprintf (stream, "#include \"test-predicate-part1.h\"\n"); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) if (predicate (ch)) { unsigned int first = ch; unsigned int last; while (ch + 1 < 0x110000 && predicate (ch + 1)) ch++; last = ch; if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, 0x%04X }", first, last); need_comma = true; } if (need_comma) fprintf (stream, "\n"); fprintf (stream, "\n"); fprintf (stream, "#define PREDICATE(c) %s\n", expression); fprintf (stream, "#include \"test-predicate-part2.h\"\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE predicate_table #define xmalloc malloc #define xrealloc realloc #include "3levelbit.h" /* Output a boolean property in a three-level bitmap. */ static void output_predicate (const char *filename, bool (*predicate) (unsigned int), const char *name, const char *comment, const char *version) { FILE *stream; unsigned int ch, i; struct predicate_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* %s of Unicode characters. */\n", comment); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, strcmp (filename, "unictype/categ_M.h") == 0); fprintf (stream, "\n"); t.p = 4; /* or: 5 */ t.q = 7; /* or: 6 */ predicate_table_init (&t); for (ch = 0; ch < 0x110000; ch++) if (predicate (ch)) predicate_table_add (&t, ch); predicate_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) if (i != 1) fprintf (stream, "#define header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int header[1];\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned int level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "%s =\n", name); fprintf (stream, "{\n"); fprintf (stream, " { %d },\n", ((uint32_t *) t.result)[1]); fprintf (stream, " {"); if (t.level1_size > 1) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 1) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu * sizeof (int) / sizeof (short) + %5zu", 1 + t.level1_size, (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 1) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 1) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 1) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu + %5zu * sizeof (short) / sizeof (int) + %5zu", 1 + t.level1_size, t.level2_size << t.q, (offset - level3_offset) / sizeof (uint32_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 1) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 4) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { if (i > 0 && (i % 4) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%08XU", ((uint32_t *) (t.result + level3_offset))[i]); if (i+1 < t.level3_size << t.p) fprintf (stream, ","); } if (t.level3_size << t.p > 4) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Output all categories. */ static void output_categories (const char *version) { #define CATEGORY(C) \ debug_output_predicate ("unictype/categ_" #C ".txt", is_category_ ## C); \ output_predicate_test ("../tests/unictype/test-categ_" #C ".c", is_category_ ## C, "uc_is_general_category (c, UC_CATEGORY_" #C ")"); \ output_predicate ("unictype/categ_" #C ".h", is_category_ ## C, "u_categ_" #C, "Categories", version); CATEGORY (L) CATEGORY (LC) CATEGORY (Lu) CATEGORY (Ll) CATEGORY (Lt) CATEGORY (Lm) CATEGORY (Lo) CATEGORY (M) CATEGORY (Mn) CATEGORY (Mc) CATEGORY (Me) CATEGORY (N) CATEGORY (Nd) CATEGORY (Nl) CATEGORY (No) CATEGORY (P) CATEGORY (Pc) CATEGORY (Pd) CATEGORY (Ps) CATEGORY (Pe) CATEGORY (Pi) CATEGORY (Pf) CATEGORY (Po) CATEGORY (S) CATEGORY (Sm) CATEGORY (Sc) CATEGORY (Sk) CATEGORY (So) CATEGORY (Z) CATEGORY (Zs) CATEGORY (Zl) CATEGORY (Zp) CATEGORY (C) CATEGORY (Cc) CATEGORY (Cf) CATEGORY (Cs) CATEGORY (Co) CATEGORY (Cn) #undef CATEGORY } enum { UC_CATEGORY_MASK_L = 0x0000001f, UC_CATEGORY_MASK_LC = 0x00000007, UC_CATEGORY_MASK_Lu = 0x00000001, UC_CATEGORY_MASK_Ll = 0x00000002, UC_CATEGORY_MASK_Lt = 0x00000004, UC_CATEGORY_MASK_Lm = 0x00000008, UC_CATEGORY_MASK_Lo = 0x00000010, UC_CATEGORY_MASK_M = 0x000000e0, UC_CATEGORY_MASK_Mn = 0x00000020, UC_CATEGORY_MASK_Mc = 0x00000040, UC_CATEGORY_MASK_Me = 0x00000080, UC_CATEGORY_MASK_N = 0x00000700, UC_CATEGORY_MASK_Nd = 0x00000100, UC_CATEGORY_MASK_Nl = 0x00000200, UC_CATEGORY_MASK_No = 0x00000400, UC_CATEGORY_MASK_P = 0x0003f800, UC_CATEGORY_MASK_Pc = 0x00000800, UC_CATEGORY_MASK_Pd = 0x00001000, UC_CATEGORY_MASK_Ps = 0x00002000, UC_CATEGORY_MASK_Pe = 0x00004000, UC_CATEGORY_MASK_Pi = 0x00008000, UC_CATEGORY_MASK_Pf = 0x00010000, UC_CATEGORY_MASK_Po = 0x00020000, UC_CATEGORY_MASK_S = 0x003c0000, UC_CATEGORY_MASK_Sm = 0x00040000, UC_CATEGORY_MASK_Sc = 0x00080000, UC_CATEGORY_MASK_Sk = 0x00100000, UC_CATEGORY_MASK_So = 0x00200000, UC_CATEGORY_MASK_Z = 0x01c00000, UC_CATEGORY_MASK_Zs = 0x00400000, UC_CATEGORY_MASK_Zl = 0x00800000, UC_CATEGORY_MASK_Zp = 0x01000000, UC_CATEGORY_MASK_C = 0x3e000000, UC_CATEGORY_MASK_Cc = 0x02000000, UC_CATEGORY_MASK_Cf = 0x04000000, UC_CATEGORY_MASK_Cs = 0x08000000, UC_CATEGORY_MASK_Co = 0x10000000, UC_CATEGORY_MASK_Cn = 0x20000000 }; static int general_category_byname (const char *category_name) { if (category_name[0] != '\0' && (category_name[1] == '\0' || category_name[2] == '\0')) switch (category_name[0]) { case 'L': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_L; case 'C': return UC_CATEGORY_MASK_LC; case 'u': return UC_CATEGORY_MASK_Lu; case 'l': return UC_CATEGORY_MASK_Ll; case 't': return UC_CATEGORY_MASK_Lt; case 'm': return UC_CATEGORY_MASK_Lm; case 'o': return UC_CATEGORY_MASK_Lo; } break; case 'M': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_M; case 'n': return UC_CATEGORY_MASK_Mn; case 'c': return UC_CATEGORY_MASK_Mc; case 'e': return UC_CATEGORY_MASK_Me; } break; case 'N': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_N; case 'd': return UC_CATEGORY_MASK_Nd; case 'l': return UC_CATEGORY_MASK_Nl; case 'o': return UC_CATEGORY_MASK_No; } break; case 'P': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_P; case 'c': return UC_CATEGORY_MASK_Pc; case 'd': return UC_CATEGORY_MASK_Pd; case 's': return UC_CATEGORY_MASK_Ps; case 'e': return UC_CATEGORY_MASK_Pe; case 'i': return UC_CATEGORY_MASK_Pi; case 'f': return UC_CATEGORY_MASK_Pf; case 'o': return UC_CATEGORY_MASK_Po; } break; case 'S': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_S; case 'm': return UC_CATEGORY_MASK_Sm; case 'c': return UC_CATEGORY_MASK_Sc; case 'k': return UC_CATEGORY_MASK_Sk; case 'o': return UC_CATEGORY_MASK_So; } break; case 'Z': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_Z; case 's': return UC_CATEGORY_MASK_Zs; case 'l': return UC_CATEGORY_MASK_Zl; case 'p': return UC_CATEGORY_MASK_Zp; } break; case 'C': switch (category_name[1]) { case '\0': return UC_CATEGORY_MASK_C; case 'c': return UC_CATEGORY_MASK_Cc; case 'f': return UC_CATEGORY_MASK_Cf; case 's': return UC_CATEGORY_MASK_Cs; case 'o': return UC_CATEGORY_MASK_Co; case 'n': return UC_CATEGORY_MASK_Cn; } break; } /* Invalid category name. */ abort (); } /* Construction of sparse 3-level tables. */ #define TABLE category_table #define ELEMENT uint8_t #define DEFAULT 29 /* = log2(UC_CATEGORY_MASK_Cn) */ #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the per-character category table. */ static void output_category (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct category_table t; unsigned int level1_offset, level2_offset, level3_offset; uint16_t *level3_packed; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Categories of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); t.p = 7; t.q = 9; category_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value; unsigned int log2_value; if (is_category_Cs (ch)) value = UC_CATEGORY_MASK_Cs; else if (unicode_attributes[ch].name != NULL) value = general_category_byname (unicode_attributes[ch].category); else continue; /* Now value should contain exactly one bit. */ assert (value != 0 && (value & (value - 1)) == 0); for (log2_value = 0; value > 1; value >>= 1, log2_value++); assert (log2_value <= 0x1f); category_table_add (&t, ch, log2_value); } category_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define category_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned short level3[%zu * %d + 1];\n", t.level3_size, (1 << t.p) * 5 / 16); fprintf (stream, " }\n"); fprintf (stream, "u_category =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 5 bits only. Use 16-bit units, not 32-bit units, in order to make the lookup function easier. */ level3_packed = (uint16_t *) calloc ((t.level3_size << t.p) * 5 / 16 + 1, sizeof (uint16_t)); for (i = 0; i < t.level3_size << t.p; i++) { unsigned int j = (i * 5) / 16; unsigned int k = (i * 5) % 16; uint32_t value = ((unsigned char *) (t.result + level3_offset))[i]; value = level3_packed[j] | (level3_packed[j+1] << 16) | (value << k); level3_packed[j] = value & 0xffff; level3_packed[j+1] = value >> 16; } fprintf (stream, " {"); if ((t.level3_size << t.p) * 5 / 16 + 1 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 5 / 16 + 1; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%04x", level3_packed[i]); if (i+1 < (t.level3_size << t.p) * 5 / 16 + 1) fprintf (stream, ","); } if ((t.level3_size << t.p) * 5 / 16 + 1 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); free (level3_packed); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Canonical combining class. */ /* See Unicode 3.0 book, section 4.2, UCD.html. */ /* Construction of sparse 3-level tables. */ #define TABLE combclass_table #define ELEMENT uint8_t #define DEFAULT 0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the per-character combining class table. */ static void output_combclass (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct combclass_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Combining class of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); t.p = 7; t.q = 9; combclass_table_init (&t); for (ch = 0; ch < 0x110000; ch++) if (unicode_attributes[ch].name != NULL) { int value = atoi (unicode_attributes[ch].combining); assert (value >= 0 && value <= 255); combclass_table_add (&t, ch, value); } combclass_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define combclass_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "u_combclass =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " %3d", ((uint8_t *) (t.result + level3_offset))[i]); if (i+1 < t.level3_size << t.p) fprintf (stream, ","); } if (t.level3_size << t.p > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Bidirectional category. */ /* See Unicode 3.0 book, section 4.3, UCD.html. */ enum { UC_BIDI_L, /* Left-to-Right */ UC_BIDI_LRE, /* Left-to-Right Embedding */ UC_BIDI_LRO, /* Left-to-Right Override */ UC_BIDI_R, /* Right-to-Left */ UC_BIDI_AL, /* Right-to-Left Arabic */ UC_BIDI_RLE, /* Right-to-Left Embedding */ UC_BIDI_RLO, /* Right-to-Left Override */ UC_BIDI_PDF, /* Pop Directional Format */ UC_BIDI_EN, /* European Number */ UC_BIDI_ES, /* European Number Separator */ UC_BIDI_ET, /* European Number Terminator */ UC_BIDI_AN, /* Arabic Number */ UC_BIDI_CS, /* Common Number Separator */ UC_BIDI_NSM, /* Non-Spacing Mark */ UC_BIDI_BN, /* Boundary Neutral */ UC_BIDI_B, /* Paragraph Separator */ UC_BIDI_S, /* Segment Separator */ UC_BIDI_WS, /* Whitespace */ UC_BIDI_ON, /* Other Neutral */ UC_BIDI_LRI, /* Left-to-Right Isolate */ UC_BIDI_RLI, /* Right-to-Left Isolate */ UC_BIDI_FSI, /* First Strong Isolate */ UC_BIDI_PDI /* Pop Directional Isolate */ }; static int bidi_category_byname (const char *category_name) { switch (category_name[0]) { case 'A': switch (category_name[1]) { case 'L': if (category_name[2] == '\0') return UC_BIDI_AL; break; case 'N': if (category_name[2] == '\0') return UC_BIDI_AN; break; } break; case 'B': switch (category_name[1]) { case '\0': return UC_BIDI_B; case 'N': if (category_name[2] == '\0') return UC_BIDI_BN; break; } break; case 'C': switch (category_name[1]) { case 'S': if (category_name[2] == '\0') return UC_BIDI_CS; break; } break; case 'E': switch (category_name[1]) { case 'N': if (category_name[2] == '\0') return UC_BIDI_EN; break; case 'S': if (category_name[2] == '\0') return UC_BIDI_ES; break; case 'T': if (category_name[2] == '\0') return UC_BIDI_ET; break; } break; case 'F': switch (category_name[1]) { case 'S': switch (category_name[2]) { case 'I': if (category_name[3] == '\0') return UC_BIDI_FSI; break; } } break; case 'L': switch (category_name[1]) { case '\0': return UC_BIDI_L; case 'R': switch (category_name[2]) { case 'E': if (category_name[3] == '\0') return UC_BIDI_LRE; break; case 'O': if (category_name[3] == '\0') return UC_BIDI_LRO; break; case 'I': if (category_name[3] == '\0') return UC_BIDI_LRI; break; } break; } break; case 'N': switch (category_name[1]) { case 'S': switch (category_name[2]) { case 'M': if (category_name[3] == '\0') return UC_BIDI_NSM; break; } break; } break; case 'O': switch (category_name[1]) { case 'N': if (category_name[2] == '\0') return UC_BIDI_ON; break; } break; case 'P': switch (category_name[1]) { case 'D': switch (category_name[2]) { case 'F': if (category_name[3] == '\0') return UC_BIDI_PDF; break; case 'I': if (category_name[3] == '\0') return UC_BIDI_PDI; break; } break; } break; case 'R': switch (category_name[1]) { case '\0': return UC_BIDI_R; case 'L': switch (category_name[2]) { case 'E': if (category_name[3] == '\0') return UC_BIDI_RLE; break; case 'O': if (category_name[3] == '\0') return UC_BIDI_RLO; break; case 'I': if (category_name[3] == '\0') return UC_BIDI_RLI; break; } break; } break; case 'S': if (category_name[1] == '\0') return UC_BIDI_S; break; case 'W': switch (category_name[1]) { case 'S': if (category_name[2] == '\0') return UC_BIDI_WS; break; } break; } /* Invalid bidi category name. */ abort (); } static int get_bidi_category (unsigned int ch) { if (unicode_attributes[ch].name != NULL) return bidi_category_byname (unicode_attributes[ch].bidi); else { /* The bidi category of unassigned characters depends on the range. See UTR #9 and DerivedBidiClass.txt. */ if ((ch >= 0x0590 && ch <= 0x05FF) || (ch >= 0x07FB && ch <= 0x08FF) || (ch >= 0xFB37 && ch <= 0xFB45) || (ch >= 0x10800 && ch <= 0x10FFF)) return UC_BIDI_R; else if ((ch >= 0x0600 && ch <= 0x07BF) || (ch >= 0x2064 && ch <= 0x2069) || (ch >= 0xFBB2 && ch <= 0xFDCF) || (ch >= 0xFDFE && ch <= 0xFEFE)) return UC_BIDI_AL; else if ((ch >= 0xFDD0 && ch <= 0xFDEF) || (ch >= 0xFFF0 && ch <= 0xFFFF) || (ch & 0xFFFF) == 0xFFFE || (ch & 0xFFFF) == 0xFFFF || (ch >= 0xE0000 && ch <= 0xE0FFF)) return UC_BIDI_BN; else return UC_BIDI_L; } } /* Construction of sparse 3-level tables. */ #define TABLE bidi_category_table #define ELEMENT uint8_t #define DEFAULT UC_BIDI_L #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the per-character bidi category table. */ static void output_bidi_category (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct bidi_category_table t; unsigned int level1_offset, level2_offset, level3_offset; uint16_t *level3_packed; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Bidi categories of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); t.p = 7; t.q = 9; bidi_category_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = get_bidi_category (ch); assert (value <= 0x1f); bidi_category_table_add (&t, ch, value); } bidi_category_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define bidi_category_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned short level3[%zu * %d + 1];\n", t.level3_size, (1 << t.p) * 5 / 16); fprintf (stream, " }\n"); fprintf (stream, "u_bidi_category =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 5 bits only. Use 16-bit units, not 32-bit units, in order to make the lookup function easier. */ level3_packed = (uint16_t *) calloc ((t.level3_size << t.p) * 5 / 16 + 1, sizeof (uint16_t)); for (i = 0; i < t.level3_size << t.p; i++) { unsigned int j = (i * 5) / 16; unsigned int k = (i * 5) % 16; uint32_t value = ((unsigned char *) (t.result + level3_offset))[i]; value = level3_packed[j] | (level3_packed[j+1] << 16) | (value << k); level3_packed[j] = value & 0xffff; level3_packed[j+1] = value >> 16; } fprintf (stream, " {"); if ((t.level3_size << t.p) * 5 / 16 + 1 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 5 / 16 + 1; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%04x", level3_packed[i]); if (i+1 < (t.level3_size << t.p) * 5 / 16 + 1) fprintf (stream, ","); } if ((t.level3_size << t.p) * 5 / 16 + 1 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); free (level3_packed); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Decimal digit value. */ /* See Unicode 3.0 book, section 4.6. */ static int get_decdigit_value (unsigned int ch) { if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].decdigit[0] != '\0') return atoi (unicode_attributes[ch].decdigit); return -1; } /* Construction of sparse 3-level tables. */ #define TABLE decdigit_table #define ELEMENT uint8_t #define DEFAULT 0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the unit test for the per-character decimal digit value table. */ static void output_decimal_digit_test (const char *filename, const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Decimal digit values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = get_decdigit_value (ch); assert (value >= -1 && value < 10); if (value >= 0) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, %d }", ch, value); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Output the per-character decimal digit value table. */ static void output_decimal_digit (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct decdigit_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Decimal digit values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; decdigit_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = 1 + get_decdigit_value (ch); assert (value >= 0 && value <= 10); decdigit_table_add (&t, ch, value); } decdigit_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define decdigit_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p - 1); fprintf (stream, " }\n"); fprintf (stream, "u_decdigit =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 4 bits only. */ fprintf (stream, " {"); if (t.level3_size << (t.p - 1) > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << (t.p - 1); i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%02x", ((uint8_t *) (t.result + level3_offset))[2*i] + (((uint8_t *) (t.result + level3_offset))[2*i+1] << 4)); if (i+1 < t.level3_size << (t.p - 1)) fprintf (stream, ","); } if (t.level3_size << (t.p - 1) > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Digit value. */ /* See Unicode 3.0 book, section 4.6. */ static int get_digit_value (unsigned int ch) { if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].digit[0] != '\0') return atoi (unicode_attributes[ch].digit); return -1; } /* Output the unit test for the per-character digit value table. */ static void output_digit_test (const char *filename, const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Digit values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = get_digit_value (ch); assert (value >= -1 && value < 10); if (value >= 0) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, %d }", ch, value); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Output the per-character digit value table. */ static void output_digit (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct decdigit_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Digit values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; decdigit_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = 1 + get_digit_value (ch); assert (value >= 0 && value <= 10); decdigit_table_add (&t, ch, value); } decdigit_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define digit_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p - 1); fprintf (stream, " }\n"); fprintf (stream, "u_digit =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 4 bits only. */ fprintf (stream, " {"); if (t.level3_size << (t.p - 1) > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << (t.p - 1); i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%02x", ((uint8_t *) (t.result + level3_offset))[2*i] + (((uint8_t *) (t.result + level3_offset))[2*i+1] << 4)); if (i+1 < t.level3_size << (t.p - 1)) fprintf (stream, ","); } if (t.level3_size << (t.p - 1) > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Numeric value. */ /* See Unicode 3.0 book, section 4.6. */ typedef struct { int numerator; int denominator; } uc_fraction_t; static uc_fraction_t get_numeric_value (unsigned int ch) { uc_fraction_t value; if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].numeric[0] != '\0') { const char *str = unicode_attributes[ch].numeric; /* str is of the form "integer" or "integer/posinteger". */ value.numerator = atoi (str); if (strchr (str, '/') != NULL) value.denominator = atoi (strchr (str, '/') + 1); else value.denominator = 1; } else { value.numerator = 0; value.denominator = 0; } return value; } /* Output the unit test for the per-character numeric value table. */ static void output_numeric_test (const char *filename, const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Numeric values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { uc_fraction_t value = get_numeric_value (ch); if (value.numerator != 0 || value.denominator != 0) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, %d, %d }", ch, value.numerator, value.denominator); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE numeric_table #define ELEMENT uint8_t #define DEFAULT 0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the per-character numeric value table. */ static void output_numeric (const char *filename, const char *version) { FILE *stream; uc_fraction_t fractions[160]; unsigned int nfractions; unsigned int ch, i, j; struct numeric_table t; unsigned int level1_offset, level2_offset, level3_offset; uint16_t *level3_packed; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Numeric values of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); /* Create table of occurring fractions. */ nfractions = 0; for (ch = 0; ch < 0x110000; ch++) { uc_fraction_t value = get_numeric_value (ch); for (i = 0; i < nfractions; i++) if (value.numerator == fractions[i].numerator && value.denominator == fractions[i].denominator) break; if (i == nfractions) { assert (nfractions != SIZEOF (fractions)); for (i = 0; i < nfractions; i++) if (value.denominator < fractions[i].denominator || (value.denominator == fractions[i].denominator && value.numerator < fractions[i].numerator)) break; for (j = nfractions; j > i; j--) fractions[j] = fractions[j - 1]; fractions[i] = value; nfractions++; } } fprintf (stream, "static const uc_fraction_t u_numeric_values[%d] =\n", nfractions); fprintf (stream, "{\n"); for (i = 0; i < nfractions; i++) { fprintf (stream, " { %d, %d }", fractions[i].numerator, fractions[i].denominator); if (i+1 < nfractions) fprintf (stream, ","); fprintf (stream, "\n"); } fprintf (stream, "};\n"); t.p = 7; t.q = 9; numeric_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { uc_fraction_t value = get_numeric_value (ch); for (i = 0; i < nfractions; i++) if (value.numerator == fractions[i].numerator && value.denominator == fractions[i].denominator) break; assert (i != nfractions); numeric_table_add (&t, ch, i); } numeric_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define numeric_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned short level3[%zu * %d + 1];\n", t.level3_size, (1 << t.p) * 8 / 16); fprintf (stream, " }\n"); fprintf (stream, "u_numeric =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 8 bits only. Use 16-bit units, not 32-bit units, in order to make the lookup function easier. */ level3_packed = (uint16_t *) calloc ((t.level3_size << t.p) * 8 / 16 + 1, sizeof (uint16_t)); for (i = 0; i < t.level3_size << t.p; i++) { unsigned int j = (i * 8) / 16; unsigned int k = (i * 8) % 16; uint32_t value = ((unsigned char *) (t.result + level3_offset))[i]; value = level3_packed[j] | (level3_packed[j+1] << 16) | (value << k); level3_packed[j] = value & 0xffff; level3_packed[j+1] = value >> 16; } fprintf (stream, " {"); if ((t.level3_size << t.p) * 8 / 16 + 1 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 8 / 16 + 1; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%04x", level3_packed[i]); if (i+1 < (t.level3_size << t.p) * 8 / 16 + 1) fprintf (stream, ","); } if ((t.level3_size << t.p) * 8 / 16 + 1 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); free (level3_packed); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Mirrored. */ /* See Unicode 3.0 book, section 4.7, UAX #9. */ /* List of mirrored character pairs. This is a subset of the characters having the BidiMirrored property. */ static unsigned int mirror_pairs[][2] = { { 0x0028, 0x0029 }, { 0x003C, 0x003E }, { 0x005B, 0x005D }, { 0x007B, 0x007D }, { 0x00AB, 0x00BB }, { 0x2039, 0x203A }, { 0x2045, 0x2046 }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2208, 0x220B }, { 0x220A, 0x220D }, { 0x223C, 0x223D }, { 0x2243, 0x22CD }, { 0x2252, 0x2253 }, { 0x2254, 0x2255 }, { 0x2264, 0x2265 }, { 0x2266, 0x2267 }, { 0x226A, 0x226B }, { 0x2276, 0x2277 }, { 0x2278, 0x2279 }, { 0x227A, 0x227B }, { 0x227C, 0x227D }, { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x228F, 0x2290 }, { 0x2291, 0x2292 }, { 0x22A2, 0x22A3 }, { 0x22B0, 0x22B1 }, { 0x22B2, 0x22B3 }, { 0x22B4, 0x22B5 }, { 0x22B6, 0x22B7 }, { 0x22C9, 0x22CA }, { 0x22CB, 0x22CC }, { 0x22D0, 0x22D1 }, { 0x22D6, 0x22D7 }, { 0x22D8, 0x22D9 }, { 0x22DA, 0x22DB }, { 0x22DC, 0x22DD }, { 0x22DE, 0x22DF }, { 0x22F0, 0x22F1 }, { 0x2308, 0x2309 }, { 0x230A, 0x230B }, { 0x2329, 0x232A }, { 0x3008, 0x3009 }, { 0x300A, 0x300B }, { 0x300C, 0x300D }, { 0x300E, 0x300F }, { 0x3010, 0x3011 }, { 0x3014, 0x3015 }, { 0x3016, 0x3017 }, { 0x3018, 0x3019 }, { 0x301A, 0x301B } }; static int get_mirror_value (unsigned int ch) { bool mirrored; unsigned int mirror_char; unsigned int i; mirrored = (unicode_attributes[ch].name != NULL && unicode_attributes[ch].mirrored); mirror_char = 0xfffd; for (i = 0; i < sizeof (mirror_pairs) / sizeof (mirror_pairs[0]); i++) if (ch == mirror_pairs[i][0]) { mirror_char = mirror_pairs[i][1]; break; } else if (ch == mirror_pairs[i][1]) { mirror_char = mirror_pairs[i][0]; break; } if (mirrored) return (int) mirror_char - (int) ch; else { assert (mirror_char == 0xfffd); return 0; } } /* Construction of sparse 3-level tables. */ #define TABLE mirror_table #define ELEMENT int32_t #define DEFAULT 0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output the per-character mirror table. */ static void output_mirror (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct mirror_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Mirrored Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; mirror_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = get_mirror_value (ch); mirror_table_add (&t, ch, value); } mirror_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define mirror_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " int level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "u_mirror =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (int32_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " %5d", ((int32_t *) (t.result + level3_offset))[i]); if (i+1 < t.level3_size << t.p) fprintf (stream, ","); } if (t.level3_size << t.p > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Particular values of the word break property. */ static bool is_WBP_MIDNUMLET (unsigned int ch) { return (ch == 0x002E || ch == 0x2018 || ch == 0x2019 || ch == 0x2024 || ch == 0xFE52 || ch == 0xFF07 || ch == 0xFF0E); } static bool is_WBP_MIDLETTER (unsigned int ch) { return (ch == 0x00B7 || ch == 0x05F4 || ch == 0x2027 || ch == 0x003A || ch == 0x0387 || ch == 0xFE13 || ch == 0xFE55 || ch == 0xFF1A || ch == 0x02D7); } /* ========================================================================= */ /* Properties. */ /* Reading PropList.txt and DerivedCoreProperties.txt. */ enum { /* PropList.txt */ PROP_WHITE_SPACE, PROP_BIDI_CONTROL, PROP_JOIN_CONTROL, PROP_DASH, PROP_HYPHEN, PROP_QUOTATION_MARK, PROP_TERMINAL_PUNCTUATION, PROP_OTHER_MATH, PROP_HEX_DIGIT, PROP_ASCII_HEX_DIGIT, PROP_OTHER_ALPHABETIC, PROP_IDEOGRAPHIC, PROP_DIACRITIC, PROP_EXTENDER, PROP_OTHER_LOWERCASE, PROP_OTHER_UPPERCASE, PROP_NONCHARACTER_CODE_POINT, PROP_OTHER_GRAPHEME_EXTEND, PROP_IDS_BINARY_OPERATOR, PROP_IDS_TRINARY_OPERATOR, PROP_RADICAL, PROP_UNIFIED_IDEOGRAPH, PROP_OTHER_DEFAULT_IGNORABLE_CODE_POINT, PROP_DEPRECATED, PROP_SOFT_DOTTED, PROP_LOGICAL_ORDER_EXCEPTION, PROP_OTHER_ID_START, PROP_OTHER_ID_CONTINUE, PROP_STERM, PROP_VARIATION_SELECTOR, PROP_PATTERN_WHITE_SPACE, PROP_PATTERN_SYNTAX, PROP_PREPENDED_CONCATENATION_MARK, /* DerivedCoreProperties.txt */ PROP_MATH, PROP_ALPHABETIC, PROP_LOWERCASE, PROP_UPPERCASE, PROP_CASED, PROP_CASE_IGNORABLE, PROP_CHANGES_WHEN_LOWERCASED, PROP_CHANGES_WHEN_UPPERCASED, PROP_CHANGES_WHEN_TITLECASED, PROP_CHANGES_WHEN_CASEFOLDED, PROP_CHANGES_WHEN_CASEMAPPED, PROP_ID_START, PROP_ID_CONTINUE, PROP_XID_START, PROP_XID_CONTINUE, PROP_DEFAULT_IGNORABLE_CODE_POINT, PROP_GRAPHEME_EXTEND, PROP_GRAPHEME_BASE, PROP_GRAPHEME_LINK }; unsigned long long unicode_properties[0x110000]; static void clear_properties (void) { unsigned int i; for (i = 0; i < 0x110000; i++) unicode_properties[i] = 0; } /* Stores in unicode_properties[] the properties from the PropList.txt or DerivedCoreProperties.txt file. */ static void fill_properties (const char *proplist_filename) { unsigned int i; FILE *stream; stream = fopen (proplist_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", proplist_filename); exit (1); } for (;;) { char buf[200+1]; unsigned int i1, i2; char padding[200+1]; char propname[200+1]; unsigned int propvalue; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X..%X%[ ;]%[^ ]", &i1, &i2, padding, propname) != 4) { if (sscanf (buf, "%X%[ ;]%[^ ]", &i1, padding, propname) != 3) { fprintf (stderr, "parse error in '%s'\n", proplist_filename); exit (1); } i2 = i1; } #define PROP(name,value) \ if (strcmp (propname, name) == 0) propvalue = value; else /* PropList.txt */ PROP ("White_Space", PROP_WHITE_SPACE) PROP ("Bidi_Control", PROP_BIDI_CONTROL) PROP ("Join_Control", PROP_JOIN_CONTROL) PROP ("Dash", PROP_DASH) PROP ("Hyphen", PROP_HYPHEN) PROP ("Quotation_Mark", PROP_QUOTATION_MARK) PROP ("Terminal_Punctuation", PROP_TERMINAL_PUNCTUATION) PROP ("Other_Math", PROP_OTHER_MATH) PROP ("Hex_Digit", PROP_HEX_DIGIT) PROP ("ASCII_Hex_Digit", PROP_ASCII_HEX_DIGIT) PROP ("Other_Alphabetic", PROP_OTHER_ALPHABETIC) PROP ("Ideographic", PROP_IDEOGRAPHIC) PROP ("Diacritic", PROP_DIACRITIC) PROP ("Extender", PROP_EXTENDER) PROP ("Other_Lowercase", PROP_OTHER_LOWERCASE) PROP ("Other_Uppercase", PROP_OTHER_UPPERCASE) PROP ("Noncharacter_Code_Point", PROP_NONCHARACTER_CODE_POINT) PROP ("Other_Grapheme_Extend", PROP_OTHER_GRAPHEME_EXTEND) PROP ("IDS_Binary_Operator", PROP_IDS_BINARY_OPERATOR) PROP ("IDS_Trinary_Operator", PROP_IDS_TRINARY_OPERATOR) PROP ("Radical", PROP_RADICAL) PROP ("Unified_Ideograph", PROP_UNIFIED_IDEOGRAPH) PROP ("Other_Default_Ignorable_Code_Point", PROP_OTHER_DEFAULT_IGNORABLE_CODE_POINT) PROP ("Deprecated", PROP_DEPRECATED) PROP ("Soft_Dotted", PROP_SOFT_DOTTED) PROP ("Logical_Order_Exception", PROP_LOGICAL_ORDER_EXCEPTION) PROP ("Other_ID_Start", PROP_OTHER_ID_START) PROP ("Other_ID_Continue", PROP_OTHER_ID_CONTINUE) PROP ("Sentence_Terminal", PROP_STERM) PROP ("Variation_Selector", PROP_VARIATION_SELECTOR) PROP ("Pattern_White_Space", PROP_PATTERN_WHITE_SPACE) PROP ("Pattern_Syntax", PROP_PATTERN_SYNTAX) PROP ("Prepended_Concatenation_Mark", PROP_PREPENDED_CONCATENATION_MARK) /* DerivedCoreProperties.txt */ PROP ("Math", PROP_MATH) PROP ("Alphabetic", PROP_ALPHABETIC) PROP ("Lowercase", PROP_LOWERCASE) PROP ("Uppercase", PROP_UPPERCASE) PROP ("Cased", PROP_CASED) PROP ("Case_Ignorable", PROP_CASE_IGNORABLE) PROP ("Changes_When_Lowercased", PROP_CHANGES_WHEN_LOWERCASED) PROP ("Changes_When_Uppercased", PROP_CHANGES_WHEN_UPPERCASED) PROP ("Changes_When_Titlecased", PROP_CHANGES_WHEN_TITLECASED) PROP ("Changes_When_Casefolded", PROP_CHANGES_WHEN_CASEFOLDED) PROP ("Changes_When_Casemapped", PROP_CHANGES_WHEN_CASEMAPPED) PROP ("ID_Start", PROP_ID_START) PROP ("ID_Continue", PROP_ID_CONTINUE) PROP ("XID_Start", PROP_XID_START) PROP ("XID_Continue", PROP_XID_CONTINUE) PROP ("Default_Ignorable_Code_Point", PROP_DEFAULT_IGNORABLE_CODE_POINT) PROP ("Grapheme_Extend", PROP_GRAPHEME_EXTEND) PROP ("Grapheme_Base", PROP_GRAPHEME_BASE) PROP ("Grapheme_Link", PROP_GRAPHEME_LINK) #undef PROP { fprintf (stderr, "unknown property named '%s' in '%s'\n", propname, proplist_filename); exit (1); } assert (i1 <= i2 && i2 < 0x110000); for (i = i1; i <= i2; i++) unicode_properties[i] |= 1ULL << propvalue; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", proplist_filename); exit (1); } } /* Stores in array the given property from the Unicode 3.0 PropList.txt file. */ static void fill_property30 (char array[0x110000], const char *proplist_filename, const char *property_name) { unsigned int i; FILE *stream; char buf[100+1]; for (i = 0; i < 0x110000; i++) array[i] = 0; stream = fopen (proplist_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", proplist_filename); exit (1); } /* Search for the "Property dump for: ..." line. */ do { if (fscanf (stream, "%100[^\n]\n", buf) < 1) { fprintf (stderr, "no property found in '%s'\n", proplist_filename); exit (1); } } while (strstr (buf, property_name) == NULL); for (;;) { unsigned int i1, i2; if (fscanf (stream, "%100[^\n]\n", buf) < 1) break; if (buf[0] == '*') break; if (strlen (buf) >= 10 && buf[4] == '.' && buf[5] == '.') { if (sscanf (buf, "%4X..%4X", &i1, &i2) < 2) { fprintf (stderr, "parse error in property in '%s'\n", proplist_filename); exit (1); } } else if (strlen (buf) >= 4) { if (sscanf (buf, "%4X", &i1) < 1) { fprintf (stderr, "parse error in property in '%s'\n", proplist_filename); exit (1); } i2 = i1; } else { fprintf (stderr, "parse error in property in '%s'\n", proplist_filename); exit (1); } assert (i1 <= i2 && i2 < 0x110000); for (i = i1; i <= i2; i++) array[i] = 1; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", proplist_filename); exit (1); } } /* Properties from Unicode 3.0 PropList.txt file. */ /* The paired punctuation property from the PropList.txt file. */ char unicode_pairedpunctuation[0x110000]; /* The left of pair property from the PropList.txt file. */ char unicode_leftofpair[0x110000]; static void fill_properties30 (const char *proplist30_filename) { fill_property30 (unicode_pairedpunctuation, proplist30_filename, "(Paired Punctuation)"); fill_property30 (unicode_leftofpair, proplist30_filename, "(Left of Pair)"); } /* ------------------------------------------------------------------------- */ /* See PropList.txt, UCD.html. */ static bool is_property_white_space (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_WHITE_SPACE)) != 0); } /* See Unicode 3.0 book, section 4.10, PropList.txt, UCD.html, DerivedCoreProperties.txt, UCD.html. */ static bool is_property_alphabetic (unsigned int ch) { bool result1 = is_category_L (ch) || ((unicode_properties[ch] & (1ULL << PROP_OTHER_ALPHABETIC)) != 0) /* For some reason, the following are listed as having property Alphabetic but not as having property Other_Alphabetic. */ || (ch >= 0x16EE && ch <= 0x16F0) /* RUNIC SYMBOLS */ || (ch >= 0x2160 && ch <= 0x2182) /* ROMAN NUMERALS */ || (ch >= 0x2185 && ch <= 0x2188) /* ROMAN NUMERALS */ || (ch >= 0x24D0 && ch <= 0x24E9) /* CIRCLED LATIN SMALL LETTER */ || (ch == 0x3007) /* IDEOGRAPHIC NUMBER ZERO */ || (ch >= 0x3021 && ch <= 0x3029) /* HANGZHOU NUMERAL */ || (ch >= 0x3038 && ch <= 0x303A) /* HANGZHOU NUMERAL */ || (ch >= 0xA6E6 && ch <= 0xA6EF) /* BAMUM LETTERS */ || (ch >= 0x10140 && ch <= 0x10174) /* GREEK ACROPHONICS */ || (ch == 0x10341) /* GOTHIC LETTER NINETY */ || (ch == 0x1034A) /* GOTHIC LETTER NINE HUNDRED */ || (ch >= 0x103D1 && ch <= 0x103D5) /* OLD PERSIAN NUMBERS */ || (ch >= 0x12400 && ch <= 0x1246E); /* CUNEIFORM NUMERIC SIGNS */ bool result2 = ((unicode_properties[ch] & (1ULL << PROP_ALPHABETIC)) != 0); assert (result1 == result2); return result1; } /* See PropList.txt, UCD.html. */ static bool is_property_other_alphabetic (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_ALPHABETIC)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_not_a_character (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_NONCHARACTER_CODE_POINT)) != 0); } /* See PropList.txt, UCD.html, DerivedCoreProperties.txt, UCD.html. */ static bool is_property_default_ignorable_code_point (unsigned int ch) { bool result1 = (is_category_Cf (ch) && !(ch >= 0xFFF9 && ch <= 0xFFFB) /* Annotations */ && !((ch >= 0x0600 && ch <= 0x0605) || ch == 0x06DD || ch == 0x070F) /* For some reason, the following are not listed as having property Default_Ignorable_Code_Point. */ && !(ch == 0x110BD) && !(ch == 0x8E2)) || ((unicode_properties[ch] & (1ULL << PROP_OTHER_DEFAULT_IGNORABLE_CODE_POINT)) != 0) || ((unicode_properties[ch] & (1ULL << PROP_VARIATION_SELECTOR)) != 0); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_DEFAULT_IGNORABLE_CODE_POINT)) != 0); assert (result1 == result2); return result1; } /* See PropList.txt, UCD.html. */ static bool is_property_other_default_ignorable_code_point (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_DEFAULT_IGNORABLE_CODE_POINT)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_deprecated (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_DEPRECATED)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_logical_order_exception (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_LOGICAL_ORDER_EXCEPTION)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_variation_selector (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_VARIATION_SELECTOR)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_private_use (unsigned int ch) { /* Determined through "grep 'Private Use,' UnicodeData-3.1.0.txt". */ return (ch >= 0xE000 && ch <= 0xF8FF) || (ch >= 0xF0000 && ch <= 0xFFFFD) || (ch >= 0x100000 && ch <= 0x10FFFD); } /* See PropList-3.0.1.txt. */ static bool is_property_unassigned_code_value (unsigned int ch) { return (is_category_Cn (ch) && !is_property_not_a_character (ch)); } /* See PropList.txt, UCD.html, DerivedCoreProperties.txt, UCD.html. */ static bool is_property_uppercase (unsigned int ch) { bool result1 = is_category_Lu (ch) || ((unicode_properties[ch] & (1ULL << PROP_OTHER_UPPERCASE)) != 0); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_UPPERCASE)) != 0); assert (result1 == result2); return result1; } /* See PropList.txt, UCD.html. */ static bool is_property_other_uppercase (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_UPPERCASE)) != 0); } /* See PropList.txt, UCD.html, DerivedCoreProperties.txt, UCD.html. */ static bool is_property_lowercase (unsigned int ch) { bool result1 = is_category_Ll (ch) || ((unicode_properties[ch] & (1ULL << PROP_OTHER_LOWERCASE)) != 0); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_LOWERCASE)) != 0); assert (result1 == result2); return result1; } /* See PropList.txt, UCD.html. */ static bool is_property_other_lowercase (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_LOWERCASE)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_titlecase (unsigned int ch) { return is_category_Lt (ch); } /* See DerivedCoreProperties.txt. */ static bool is_property_cased (unsigned int ch) { bool result1 = (is_property_lowercase (ch) || is_property_uppercase (ch) || is_category_Lt (ch)); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_CASED)) != 0); assert (result1 == result2); return result1; } /* See DerivedCoreProperties.txt. */ static bool is_property_case_ignorable (unsigned int ch) { bool result1 = (is_WBP_MIDLETTER (ch) || is_WBP_MIDNUMLET (ch) || ch == 0x0027 || is_category_Mn (ch) || is_category_Me (ch) || is_category_Cf (ch) || is_category_Lm (ch) || is_category_Sk (ch)); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_CASE_IGNORABLE)) != 0); assert (result1 == result2); return result1; } /* See DerivedCoreProperties.txt. */ static bool is_property_changes_when_lowercased (unsigned int ch) { bool result1 = ((unicode_properties[ch] & (1ULL << PROP_CHANGES_WHEN_LOWERCASED)) != 0); bool result2 = (unicode_attributes[ch].name != NULL && unicode_attributes[ch].lower != NONE && unicode_attributes[ch].lower != ch); assert (result1 == result2); return result1; } /* See DerivedCoreProperties.txt. */ static bool is_property_changes_when_uppercased (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_CHANGES_WHEN_UPPERCASED)) != 0); } /* See DerivedCoreProperties.txt. */ static bool is_property_changes_when_titlecased (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_CHANGES_WHEN_TITLECASED)) != 0); } /* See DerivedCoreProperties.txt. */ static bool is_property_changes_when_casefolded (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_CHANGES_WHEN_CASEFOLDED)) != 0); } /* See DerivedCoreProperties.txt. */ static bool is_property_changes_when_casemapped (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_CHANGES_WHEN_CASEMAPPED)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_soft_dotted (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_SOFT_DOTTED)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_id_start (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_ID_START)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_other_id_start (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_ID_START)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_id_continue (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_ID_CONTINUE)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_other_id_continue (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_ID_CONTINUE)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_xid_start (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_XID_START)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_xid_continue (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_XID_CONTINUE)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_pattern_white_space (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_PATTERN_WHITE_SPACE)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_pattern_syntax (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_PATTERN_SYNTAX)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_join_control (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_JOIN_CONTROL)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_grapheme_base (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_GRAPHEME_BASE)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_grapheme_extend (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_GRAPHEME_EXTEND)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_other_grapheme_extend (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_GRAPHEME_EXTEND)) != 0); } /* See DerivedCoreProperties.txt, UCD.html. */ static bool is_property_grapheme_link (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_GRAPHEME_LINK)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_bidi_control (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_BIDI_CONTROL)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_left_to_right (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_L); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_hebrew_right_to_left (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_R); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_arabic_right_to_left (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_AL); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_european_digit (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_EN); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_eur_num_separator (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_ES); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_eur_num_terminator (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_ET); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_arabic_digit (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_AN); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_common_separator (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_CS); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_block_separator (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_B); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_segment_separator (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_S); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_whitespace (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_WS); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_non_spacing_mark (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_NSM); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_boundary_neutral (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_BN); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_pdf (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_PDF); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_embedding_or_override (unsigned int ch) { int category = get_bidi_category (ch); return (category == UC_BIDI_LRE || category == UC_BIDI_LRO || category == UC_BIDI_RLE || category == UC_BIDI_RLO); } /* See PropList-3.0.1.txt. */ static bool is_property_bidi_other_neutral (unsigned int ch) { return (get_bidi_category (ch) == UC_BIDI_ON); } /* See PropList.txt, UCD.html. */ static bool is_property_hex_digit (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_HEX_DIGIT)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_ascii_hex_digit (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_ASCII_HEX_DIGIT)) != 0); } /* See Unicode 3.0 book, section 4.10, PropList.txt, UCD.html. */ static bool is_property_ideographic (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_IDEOGRAPHIC)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_unified_ideograph (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_UNIFIED_IDEOGRAPH)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_radical (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_RADICAL)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_ids_binary_operator (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_IDS_BINARY_OPERATOR)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_ids_trinary_operator (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_IDS_TRINARY_OPERATOR)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_zero_width (unsigned int ch) { return is_category_Cf (ch) || (unicode_attributes[ch].name != NULL && strstr (unicode_attributes[ch].name, "ZERO WIDTH") != NULL); } /* See PropList-3.0.1.txt. */ static bool is_property_space (unsigned int ch) { return is_category_Zs (ch); } /* See PropList-3.0.1.txt. */ static bool is_property_non_break (unsigned int ch) { /* This is exactly the set of characters having line breaking property GL. */ return (ch == 0x00A0 /* NO-BREAK SPACE */ || ch == 0x034F /* COMBINING GRAPHEME JOINER */ || ch == 0x035C /* COMBINING DOUBLE BREVE BELOW */ || ch == 0x035D /* COMBINING DOUBLE BREVE */ || ch == 0x035E /* COMBINING DOUBLE MACRON */ || ch == 0x035F /* COMBINING DOUBLE MACRON BELOW */ || ch == 0x0360 /* COMBINING DOUBLE TILDE */ || ch == 0x0361 /* COMBINING DOUBLE INVERTED BREVE */ || ch == 0x0362 /* COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ || ch == 0x0F08 /* TIBETAN MARK SBRUL SHAD */ || ch == 0x0F0C /* TIBETAN MARK DELIMITER TSHEG BSTAR */ || ch == 0x0F12 /* TIBETAN MARK RGYA GRAM SHAD */ || ch == 0x180E /* MONGOLIAN VOWEL SEPARATOR */ || ch == 0x2007 /* FIGURE SPACE */ || ch == 0x2011 /* NON-BREAKING HYPHEN */ || ch == 0x202F /* NARROW NO-BREAK SPACE */); } /* See PropList-3.0.1.txt. */ static bool is_property_iso_control (unsigned int ch) { bool result1 = (unicode_attributes[ch].name != NULL && strcmp (unicode_attributes[ch].name, "<control>") == 0); bool result2 = is_category_Cc (ch); assert (result1 == result2); return result1; } /* See PropList-3.0.1.txt. */ static bool is_property_format_control (unsigned int ch) { return (is_category_Cf (ch) && get_bidi_category (ch) == UC_BIDI_BN && !is_property_join_control (ch) && ch != 0xFEFF); } /* See PropList.txt, UCD.html. */ static bool is_property_dash (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_DASH)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_hyphen (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_HYPHEN)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_punctuation (unsigned int ch) { return is_category_P (ch); } /* See PropList-3.0.1.txt. */ static bool is_property_line_separator (unsigned int ch) { return is_category_Zl (ch); } /* See PropList-3.0.1.txt. */ static bool is_property_paragraph_separator (unsigned int ch) { return is_category_Zp (ch); } /* See PropList.txt, UCD.html. */ static bool is_property_quotation_mark (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_QUOTATION_MARK)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_sentence_terminal (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_STERM)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_terminal_punctuation (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_TERMINAL_PUNCTUATION)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_currency_symbol (unsigned int ch) { return is_category_Sc (ch); } /* See Unicode 3.0 book, section 4.9, PropList.txt, UCD.html, DerivedCoreProperties.txt, UCD.html. */ static bool is_property_math (unsigned int ch) { bool result1 = is_category_Sm (ch) || ((unicode_properties[ch] & (1ULL << PROP_OTHER_MATH)) != 0); bool result2 = ((unicode_properties[ch] & (1ULL << PROP_MATH)) != 0); assert (result1 == result2); return result1; } /* See PropList.txt, UCD.html. */ static bool is_property_other_math (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_OTHER_MATH)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_paired_punctuation (unsigned int ch) { return unicode_pairedpunctuation[ch]; } /* See PropList-3.0.1.txt. */ static bool is_property_left_of_pair (unsigned int ch) { return unicode_leftofpair[ch]; } /* See PropList-3.0.1.txt. */ static bool is_property_combining (unsigned int ch) { return (unicode_attributes[ch].name != NULL && (strcmp (unicode_attributes[ch].combining, "0") != 0 || is_category_Mc (ch) || is_category_Me (ch) || is_category_Mn (ch))); } #if 0 /* same as is_property_bidi_non_spacing_mark */ /* See PropList-3.0.1.txt. */ static bool is_property_non_spacing (unsigned int ch) { return (unicode_attributes[ch].name != NULL && get_bidi_category (ch) == UC_BIDI_NSM); } #endif /* See PropList-3.0.1.txt. */ static bool is_property_composite (unsigned int ch) { /* This definition differs from the one in PropList-3.0.1.txt, but is more logical in some sense. */ if (ch >= 0xAC00 && ch <= 0xD7A4) /* Hangul Syllables */ return true; if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].decomposition != NULL) { /* Test whether the decomposition contains more than one character, and the first is not a space. */ const char *decomp = unicode_attributes[ch].decomposition; if (decomp[0] == '<') { decomp = strchr (decomp, '>') + 1; if (decomp[0] == ' ') decomp++; } return strchr (decomp, ' ') != NULL && strncmp (decomp, "0020 ", 5) != 0; } return false; } /* See PropList-3.0.1.txt. */ static bool is_property_decimal_digit (unsigned int ch) { return is_category_Nd (ch); } /* See PropList-3.0.1.txt. */ static bool is_property_numeric (unsigned int ch) { return ((get_numeric_value (ch)).denominator > 0) || (ch == 0x09F8) /* BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR */ || (ch == 0x2183); /* ROMAN NUMERAL REVERSED ONE HUNDRED */ } /* See PropList.txt, UCD.html. */ static bool is_property_diacritic (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_DIACRITIC)) != 0); } /* See PropList.txt, UCD.html. */ static bool is_property_extender (unsigned int ch) { return ((unicode_properties[ch] & (1ULL << PROP_EXTENDER)) != 0); } /* See PropList-3.0.1.txt. */ static bool is_property_ignorable_control (unsigned int ch) { return ((is_category_Cc (ch) && get_bidi_category (ch) == UC_BIDI_BN) || is_category_Cf (ch)) && ch != 0x0000; } /* ------------------------------------------------------------------------- */ /* Output all properties. */ static void output_properties (const char *version) { #define PROPERTY(P) \ debug_output_predicate ("unictype/pr_" #P ".txt", is_property_ ## P); \ output_predicate_test ("../tests/unictype/test-pr_" #P ".c", is_property_ ## P, "uc_is_property_" #P " (c)"); \ output_predicate ("unictype/pr_" #P ".h", is_property_ ## P, "u_property_" #P, "Properties", version); PROPERTY(white_space) PROPERTY(alphabetic) PROPERTY(other_alphabetic) PROPERTY(not_a_character) PROPERTY(default_ignorable_code_point) PROPERTY(other_default_ignorable_code_point) PROPERTY(deprecated) PROPERTY(logical_order_exception) PROPERTY(variation_selector) PROPERTY(private_use) PROPERTY(unassigned_code_value) PROPERTY(uppercase) PROPERTY(other_uppercase) PROPERTY(lowercase) PROPERTY(other_lowercase) PROPERTY(titlecase) PROPERTY(cased) PROPERTY(case_ignorable) PROPERTY(changes_when_lowercased) PROPERTY(changes_when_uppercased) PROPERTY(changes_when_titlecased) PROPERTY(changes_when_casefolded) PROPERTY(changes_when_casemapped) PROPERTY(soft_dotted) PROPERTY(id_start) PROPERTY(other_id_start) PROPERTY(id_continue) PROPERTY(other_id_continue) PROPERTY(xid_start) PROPERTY(xid_continue) PROPERTY(pattern_white_space) PROPERTY(pattern_syntax) PROPERTY(join_control) PROPERTY(grapheme_base) PROPERTY(grapheme_extend) PROPERTY(other_grapheme_extend) PROPERTY(grapheme_link) PROPERTY(bidi_control) PROPERTY(bidi_left_to_right) PROPERTY(bidi_hebrew_right_to_left) PROPERTY(bidi_arabic_right_to_left) PROPERTY(bidi_european_digit) PROPERTY(bidi_eur_num_separator) PROPERTY(bidi_eur_num_terminator) PROPERTY(bidi_arabic_digit) PROPERTY(bidi_common_separator) PROPERTY(bidi_block_separator) PROPERTY(bidi_segment_separator) PROPERTY(bidi_whitespace) PROPERTY(bidi_non_spacing_mark) PROPERTY(bidi_boundary_neutral) PROPERTY(bidi_pdf) PROPERTY(bidi_embedding_or_override) PROPERTY(bidi_other_neutral) PROPERTY(hex_digit) PROPERTY(ascii_hex_digit) PROPERTY(ideographic) PROPERTY(unified_ideograph) PROPERTY(radical) PROPERTY(ids_binary_operator) PROPERTY(ids_trinary_operator) PROPERTY(zero_width) PROPERTY(space) PROPERTY(non_break) PROPERTY(iso_control) PROPERTY(format_control) PROPERTY(dash) PROPERTY(hyphen) PROPERTY(punctuation) PROPERTY(line_separator) PROPERTY(paragraph_separator) PROPERTY(quotation_mark) PROPERTY(sentence_terminal) PROPERTY(terminal_punctuation) PROPERTY(currency_symbol) PROPERTY(math) PROPERTY(other_math) PROPERTY(paired_punctuation) PROPERTY(left_of_pair) PROPERTY(combining) PROPERTY(composite) PROPERTY(decimal_digit) PROPERTY(numeric) PROPERTY(diacritic) PROPERTY(extender) PROPERTY(ignorable_control) #undef PROPERTY } /* ========================================================================= */ /* Arabic Shaping. */ enum { UC_JOINING_TYPE_U, /* Non_Joining */ UC_JOINING_TYPE_T, /* Transparent */ UC_JOINING_TYPE_C, /* Join_Causing */ UC_JOINING_TYPE_L, /* Left_Joining */ UC_JOINING_TYPE_R, /* Right_Joining */ UC_JOINING_TYPE_D /* Dual_Joining */ }; static uint8_t unicode_joining_type[0x110000]; enum { UC_JOINING_GROUP_NONE, /* No_Joining_Group */ UC_JOINING_GROUP_AIN, /* Ain */ UC_JOINING_GROUP_ALAPH, /* Alaph */ UC_JOINING_GROUP_ALEF, /* Alef */ UC_JOINING_GROUP_BEH, /* Beh */ UC_JOINING_GROUP_BETH, /* Beth */ UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ UC_JOINING_GROUP_DAL, /* Dal */ UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ UC_JOINING_GROUP_E, /* E */ UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ UC_JOINING_GROUP_FE, /* Fe */ UC_JOINING_GROUP_FEH, /* Feh */ UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ UC_JOINING_GROUP_GAF, /* Gaf */ UC_JOINING_GROUP_GAMAL, /* Gamal */ UC_JOINING_GROUP_HAH, /* Hah */ UC_JOINING_GROUP_HE, /* He */ UC_JOINING_GROUP_HEH, /* Heh */ UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ UC_JOINING_GROUP_HETH, /* Heth */ UC_JOINING_GROUP_KAF, /* Kaf */ UC_JOINING_GROUP_KAPH, /* Kaph */ UC_JOINING_GROUP_KHAPH, /* Khaph */ UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ UC_JOINING_GROUP_LAM, /* Lam */ UC_JOINING_GROUP_LAMADH, /* Lamadh */ UC_JOINING_GROUP_MEEM, /* Meem */ UC_JOINING_GROUP_MIM, /* Mim */ UC_JOINING_GROUP_NOON, /* Noon */ UC_JOINING_GROUP_NUN, /* Nun */ UC_JOINING_GROUP_NYA, /* Nya */ UC_JOINING_GROUP_PE, /* Pe */ UC_JOINING_GROUP_QAF, /* Qaf */ UC_JOINING_GROUP_QAPH, /* Qaph */ UC_JOINING_GROUP_REH, /* Reh */ UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ UC_JOINING_GROUP_SAD, /* Sad */ UC_JOINING_GROUP_SADHE, /* Sadhe */ UC_JOINING_GROUP_SEEN, /* Seen */ UC_JOINING_GROUP_SEMKATH, /* Semkath */ UC_JOINING_GROUP_SHIN, /* Shin */ UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ UC_JOINING_GROUP_TAH, /* Tah */ UC_JOINING_GROUP_TAW, /* Taw */ UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ UC_JOINING_GROUP_TETH, /* Teth */ UC_JOINING_GROUP_WAW, /* Waw */ UC_JOINING_GROUP_YEH, /* Yeh */ UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ UC_JOINING_GROUP_YUDH, /* Yudh */ UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ UC_JOINING_GROUP_ZAIN, /* Zain */ UC_JOINING_GROUP_ZHAIN, /* Zhain */ UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ UC_JOINING_GROUP_MANICHAEAN_HUNDRED, /* Manichaean_Hundred */ UC_JOINING_GROUP_AFRICAN_FEH, /* African_Feh */ UC_JOINING_GROUP_AFRICAN_QAF, /* African_Qaf */ UC_JOINING_GROUP_AFRICAN_NOON /* African_Noon */ }; static uint8_t unicode_joining_group[0x110000]; static void fill_arabicshaping (const char *arabicshaping_filename) { FILE *stream; unsigned int i; int lineno; stream = fopen (arabicshaping_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", arabicshaping_filename); exit (1); } for (i = 0; i < 0x110000; i++) { unicode_joining_type[i] = (uint8_t)~(uint8_t)0; unicode_joining_group[i] = UC_JOINING_GROUP_NONE; } lineno = 0; for (;;) { char buf[200+1]; char separator1[200+1]; char schematic_name[200+1]; char separator2[200+1]; char joining_type_name[200+1]; char separator3[200+1]; char joining_group_name[200+1]; int joining_type; int joining_group; lineno++; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X%[; ]%[^;]%[; ]%[^;]%[; ]%100[^\n]", &i, separator1, schematic_name, separator2, joining_type_name, separator3, joining_group_name) != 7) { fprintf (stderr, "parse error in '%s':%d\n", arabicshaping_filename, lineno); exit (1); } assert (i < 0x110000); #define TRY(name) else if (strcmp (joining_type_name, #name + 16) == 0) joining_type = name; if (false) {} TRY(UC_JOINING_TYPE_U) TRY(UC_JOINING_TYPE_T) TRY(UC_JOINING_TYPE_C) TRY(UC_JOINING_TYPE_L) TRY(UC_JOINING_TYPE_R) TRY(UC_JOINING_TYPE_D) #undef TRY else { fprintf (stderr, "unknown joining type value \"%s\" in '%s':%d\n", joining_type_name, arabicshaping_filename, lineno); exit (1); } /* Remove trailing spaces. */ while (joining_group_name[0] != '\0' && joining_group_name[strlen (joining_group_name) - 1] == ' ') joining_group_name[strlen (joining_group_name) - 1] = '\0'; #define TRY(value,name) else if (strcmp (joining_group_name, name) == 0) joining_group = value; if (false) {} TRY(UC_JOINING_GROUP_NONE, "No_Joining_Group") TRY(UC_JOINING_GROUP_AIN, "AIN") TRY(UC_JOINING_GROUP_ALAPH, "ALAPH") TRY(UC_JOINING_GROUP_ALEF, "ALEF") TRY(UC_JOINING_GROUP_BEH, "BEH") TRY(UC_JOINING_GROUP_BETH, "BETH") TRY(UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, "BURUSHASKI YEH BARREE") TRY(UC_JOINING_GROUP_DAL, "DAL") TRY(UC_JOINING_GROUP_DALATH_RISH, "DALATH RISH") TRY(UC_JOINING_GROUP_E, "E") TRY(UC_JOINING_GROUP_FARSI_YEH, "FARSI YEH") TRY(UC_JOINING_GROUP_FE, "FE") TRY(UC_JOINING_GROUP_FEH, "FEH") TRY(UC_JOINING_GROUP_FINAL_SEMKATH, "FINAL SEMKATH") TRY(UC_JOINING_GROUP_GAF, "GAF") TRY(UC_JOINING_GROUP_GAMAL, "GAMAL") TRY(UC_JOINING_GROUP_HAH, "HAH") TRY(UC_JOINING_GROUP_HE, "HE") TRY(UC_JOINING_GROUP_HEH, "HEH") TRY(UC_JOINING_GROUP_HEH_GOAL, "HEH GOAL") TRY(UC_JOINING_GROUP_HETH, "HETH") TRY(UC_JOINING_GROUP_KAF, "KAF") TRY(UC_JOINING_GROUP_KAPH, "KAPH") TRY(UC_JOINING_GROUP_KHAPH, "KHAPH") TRY(UC_JOINING_GROUP_KNOTTED_HEH, "KNOTTED HEH") TRY(UC_JOINING_GROUP_LAM, "LAM") TRY(UC_JOINING_GROUP_LAMADH, "LAMADH") TRY(UC_JOINING_GROUP_MEEM, "MEEM") TRY(UC_JOINING_GROUP_MIM, "MIM") TRY(UC_JOINING_GROUP_NOON, "NOON") TRY(UC_JOINING_GROUP_NUN, "NUN") TRY(UC_JOINING_GROUP_NYA, "NYA") TRY(UC_JOINING_GROUP_PE, "PE") TRY(UC_JOINING_GROUP_QAF, "QAF") TRY(UC_JOINING_GROUP_QAPH, "QAPH") TRY(UC_JOINING_GROUP_REH, "REH") TRY(UC_JOINING_GROUP_REVERSED_PE, "REVERSED PE") TRY(UC_JOINING_GROUP_SAD, "SAD") TRY(UC_JOINING_GROUP_SADHE, "SADHE") TRY(UC_JOINING_GROUP_SEEN, "SEEN") TRY(UC_JOINING_GROUP_SEMKATH, "SEMKATH") TRY(UC_JOINING_GROUP_SHIN, "SHIN") TRY(UC_JOINING_GROUP_SWASH_KAF, "SWASH KAF") TRY(UC_JOINING_GROUP_SYRIAC_WAW, "SYRIAC WAW") TRY(UC_JOINING_GROUP_TAH, "TAH") TRY(UC_JOINING_GROUP_TAW, "TAW") TRY(UC_JOINING_GROUP_TEH_MARBUTA, "TEH MARBUTA") TRY(UC_JOINING_GROUP_TEH_MARBUTA_GOAL, "TEH MARBUTA GOAL") TRY(UC_JOINING_GROUP_TETH, "TETH") TRY(UC_JOINING_GROUP_WAW, "WAW") TRY(UC_JOINING_GROUP_YEH, "YEH") TRY(UC_JOINING_GROUP_YEH_BARREE, "YEH BARREE") TRY(UC_JOINING_GROUP_YEH_WITH_TAIL, "YEH WITH TAIL") TRY(UC_JOINING_GROUP_YUDH, "YUDH") TRY(UC_JOINING_GROUP_YUDH_HE, "YUDH HE") TRY(UC_JOINING_GROUP_ZAIN, "ZAIN") TRY(UC_JOINING_GROUP_ZHAIN, "ZHAIN") TRY(UC_JOINING_GROUP_ROHINGYA_YEH, "ROHINGYA YEH") TRY(UC_JOINING_GROUP_STRAIGHT_WAW, "STRAIGHT WAW") TRY(UC_JOINING_GROUP_MANICHAEAN_ALEPH, "MANICHAEAN ALEPH") TRY(UC_JOINING_GROUP_MANICHAEAN_BETH, "MANICHAEAN BETH") TRY(UC_JOINING_GROUP_MANICHAEAN_GIMEL, "MANICHAEAN GIMEL") TRY(UC_JOINING_GROUP_MANICHAEAN_DALETH, "MANICHAEAN DALETH") TRY(UC_JOINING_GROUP_MANICHAEAN_WAW, "MANICHAEAN WAW") TRY(UC_JOINING_GROUP_MANICHAEAN_ZAYIN, "MANICHAEAN ZAYIN") TRY(UC_JOINING_GROUP_MANICHAEAN_HETH, "MANICHAEAN HETH") TRY(UC_JOINING_GROUP_MANICHAEAN_TETH, "MANICHAEAN TETH") TRY(UC_JOINING_GROUP_MANICHAEAN_YODH, "MANICHAEAN YODH") TRY(UC_JOINING_GROUP_MANICHAEAN_KAPH, "MANICHAEAN KAPH") TRY(UC_JOINING_GROUP_MANICHAEAN_LAMEDH, "MANICHAEAN LAMEDH") TRY(UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, "MANICHAEAN DHAMEDH") TRY(UC_JOINING_GROUP_MANICHAEAN_THAMEDH, "MANICHAEAN THAMEDH") TRY(UC_JOINING_GROUP_MANICHAEAN_MEM, "MANICHAEAN MEM") TRY(UC_JOINING_GROUP_MANICHAEAN_NUN, "MANICHAEAN NUN") TRY(UC_JOINING_GROUP_MANICHAEAN_SAMEKH, "MANICHAEAN SAMEKH") TRY(UC_JOINING_GROUP_MANICHAEAN_AYIN, "MANICHAEAN AYIN") TRY(UC_JOINING_GROUP_MANICHAEAN_PE, "MANICHAEAN PE") TRY(UC_JOINING_GROUP_MANICHAEAN_SADHE, "MANICHAEAN SADHE") TRY(UC_JOINING_GROUP_MANICHAEAN_QOPH, "MANICHAEAN QOPH") TRY(UC_JOINING_GROUP_MANICHAEAN_RESH, "MANICHAEAN RESH") TRY(UC_JOINING_GROUP_MANICHAEAN_TAW, "MANICHAEAN TAW") TRY(UC_JOINING_GROUP_MANICHAEAN_ONE, "MANICHAEAN ONE") TRY(UC_JOINING_GROUP_MANICHAEAN_FIVE, "MANICHAEAN FIVE") TRY(UC_JOINING_GROUP_MANICHAEAN_TEN, "MANICHAEAN TEN") TRY(UC_JOINING_GROUP_MANICHAEAN_TWENTY, "MANICHAEAN TWENTY") TRY(UC_JOINING_GROUP_MANICHAEAN_HUNDRED, "MANICHAEAN HUNDRED") TRY(UC_JOINING_GROUP_AFRICAN_FEH, "AFRICAN FEH") TRY(UC_JOINING_GROUP_AFRICAN_QAF, "AFRICAN QAF") TRY(UC_JOINING_GROUP_AFRICAN_NOON, "AFRICAN NOON") #undef TRY else { fprintf (stderr, "unknown joining group value \"%s\" in '%s':%d\n", joining_group_name, arabicshaping_filename, lineno); exit (1); } unicode_joining_type[i] = joining_type; unicode_joining_group[i] = joining_group; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", arabicshaping_filename); exit (1); } } /* Convert a Joining_Type value to a C identifier. */ static const char * joining_type_as_c_identifier (int joining_type) { #define TRY(value) if (joining_type == value) return #value; TRY(UC_JOINING_TYPE_U) TRY(UC_JOINING_TYPE_T) TRY(UC_JOINING_TYPE_C) TRY(UC_JOINING_TYPE_L) TRY(UC_JOINING_TYPE_R) TRY(UC_JOINING_TYPE_D) #undef TRY abort (); } static void output_joining_type_test (const char *filename, const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Arabic joining type of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = unicode_joining_type[ch]; if (value != (uint8_t)~(uint8_t)0) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, %s }", ch, joining_type_as_c_identifier (value)); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE joining_type_table #define ELEMENT uint8_t #define DEFAULT (uint8_t)~(uint8_t)0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_joining_type (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct joining_type_table t; unsigned int level1_offset, level2_offset, level3_offset; uint8_t *level3_packed; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Arabic joining type of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); t.p = 7; t.q = 9; joining_type_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { uint8_t value = unicode_joining_type[ch]; assert (value == (uint8_t)~(uint8_t)0 || value <= 0x0f); joining_type_table_add (&t, ch, value); } joining_type_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define joining_type_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu * %d];\n", t.level3_size, (1 << t.p) * 4 / 8); fprintf (stream, " }\n"); fprintf (stream, "u_joining_type =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 4 bits only. */ level3_packed = (uint8_t *) calloc ((t.level3_size << t.p) * 4 / 8, sizeof (uint8_t)); for (i = 0; i < t.level3_size << t.p; i++) { unsigned int j = (i * 4) / 8; unsigned int k = (i * 4) % 8; uint32_t value = ((unsigned char *) (t.result + level3_offset))[i] & 0x0f; level3_packed[j] |= (value << k); } fprintf (stream, " {"); if ((t.level3_size << t.p) * 4 / 8 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 4 / 8; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%02x", level3_packed[i]); if (i+1 < (t.level3_size << t.p) * 4 / 8) fprintf (stream, ","); } if ((t.level3_size << t.p) * 4 / 8 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); free (level3_packed); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Convert a Joining_Group value to a C identifier. */ static const char * joining_group_as_c_identifier (int joining_group) { #define TRY(value) if (joining_group == value) return #value; TRY(UC_JOINING_GROUP_NONE) TRY(UC_JOINING_GROUP_AIN) TRY(UC_JOINING_GROUP_ALAPH) TRY(UC_JOINING_GROUP_ALEF) TRY(UC_JOINING_GROUP_BEH) TRY(UC_JOINING_GROUP_BETH) TRY(UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE) TRY(UC_JOINING_GROUP_DAL) TRY(UC_JOINING_GROUP_DALATH_RISH) TRY(UC_JOINING_GROUP_E) TRY(UC_JOINING_GROUP_FARSI_YEH) TRY(UC_JOINING_GROUP_FE) TRY(UC_JOINING_GROUP_FEH) TRY(UC_JOINING_GROUP_FINAL_SEMKATH) TRY(UC_JOINING_GROUP_GAF) TRY(UC_JOINING_GROUP_GAMAL) TRY(UC_JOINING_GROUP_HAH) TRY(UC_JOINING_GROUP_HE) TRY(UC_JOINING_GROUP_HEH) TRY(UC_JOINING_GROUP_HEH_GOAL) TRY(UC_JOINING_GROUP_HETH) TRY(UC_JOINING_GROUP_KAF) TRY(UC_JOINING_GROUP_KAPH) TRY(UC_JOINING_GROUP_KHAPH) TRY(UC_JOINING_GROUP_KNOTTED_HEH) TRY(UC_JOINING_GROUP_LAM) TRY(UC_JOINING_GROUP_LAMADH) TRY(UC_JOINING_GROUP_MEEM) TRY(UC_JOINING_GROUP_MIM) TRY(UC_JOINING_GROUP_NOON) TRY(UC_JOINING_GROUP_NUN) TRY(UC_JOINING_GROUP_NYA) TRY(UC_JOINING_GROUP_PE) TRY(UC_JOINING_GROUP_QAF) TRY(UC_JOINING_GROUP_QAPH) TRY(UC_JOINING_GROUP_REH) TRY(UC_JOINING_GROUP_REVERSED_PE) TRY(UC_JOINING_GROUP_SAD) TRY(UC_JOINING_GROUP_SADHE) TRY(UC_JOINING_GROUP_SEEN) TRY(UC_JOINING_GROUP_SEMKATH) TRY(UC_JOINING_GROUP_SHIN) TRY(UC_JOINING_GROUP_SWASH_KAF) TRY(UC_JOINING_GROUP_SYRIAC_WAW) TRY(UC_JOINING_GROUP_TAH) TRY(UC_JOINING_GROUP_TAW) TRY(UC_JOINING_GROUP_TEH_MARBUTA) TRY(UC_JOINING_GROUP_TEH_MARBUTA_GOAL) TRY(UC_JOINING_GROUP_TETH) TRY(UC_JOINING_GROUP_WAW) TRY(UC_JOINING_GROUP_YEH) TRY(UC_JOINING_GROUP_YEH_BARREE) TRY(UC_JOINING_GROUP_YEH_WITH_TAIL) TRY(UC_JOINING_GROUP_YUDH) TRY(UC_JOINING_GROUP_YUDH_HE) TRY(UC_JOINING_GROUP_ZAIN) TRY(UC_JOINING_GROUP_ZHAIN) TRY(UC_JOINING_GROUP_ROHINGYA_YEH) TRY(UC_JOINING_GROUP_STRAIGHT_WAW) TRY(UC_JOINING_GROUP_MANICHAEAN_ALEPH) TRY(UC_JOINING_GROUP_MANICHAEAN_BETH) TRY(UC_JOINING_GROUP_MANICHAEAN_GIMEL) TRY(UC_JOINING_GROUP_MANICHAEAN_DALETH) TRY(UC_JOINING_GROUP_MANICHAEAN_WAW) TRY(UC_JOINING_GROUP_MANICHAEAN_ZAYIN) TRY(UC_JOINING_GROUP_MANICHAEAN_HETH) TRY(UC_JOINING_GROUP_MANICHAEAN_TETH) TRY(UC_JOINING_GROUP_MANICHAEAN_YODH) TRY(UC_JOINING_GROUP_MANICHAEAN_KAPH) TRY(UC_JOINING_GROUP_MANICHAEAN_LAMEDH) TRY(UC_JOINING_GROUP_MANICHAEAN_DHAMEDH) TRY(UC_JOINING_GROUP_MANICHAEAN_THAMEDH) TRY(UC_JOINING_GROUP_MANICHAEAN_MEM) TRY(UC_JOINING_GROUP_MANICHAEAN_NUN) TRY(UC_JOINING_GROUP_MANICHAEAN_SAMEKH) TRY(UC_JOINING_GROUP_MANICHAEAN_AYIN) TRY(UC_JOINING_GROUP_MANICHAEAN_PE) TRY(UC_JOINING_GROUP_MANICHAEAN_SADHE) TRY(UC_JOINING_GROUP_MANICHAEAN_QOPH) TRY(UC_JOINING_GROUP_MANICHAEAN_RESH) TRY(UC_JOINING_GROUP_MANICHAEAN_TAW) TRY(UC_JOINING_GROUP_MANICHAEAN_ONE) TRY(UC_JOINING_GROUP_MANICHAEAN_FIVE) TRY(UC_JOINING_GROUP_MANICHAEAN_TEN) TRY(UC_JOINING_GROUP_MANICHAEAN_TWENTY) TRY(UC_JOINING_GROUP_MANICHAEAN_HUNDRED) TRY(UC_JOINING_GROUP_AFRICAN_FEH) TRY(UC_JOINING_GROUP_AFRICAN_QAF) TRY(UC_JOINING_GROUP_AFRICAN_NOON) #undef TRY abort (); } static void output_joining_group_test (const char *filename, const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Arabic joining group of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = unicode_joining_group[ch]; if (value != UC_JOINING_GROUP_NONE) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, %s }", ch, joining_group_as_c_identifier (value)); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE joining_group_table #define ELEMENT uint8_t #define DEFAULT UC_JOINING_GROUP_NONE #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_joining_group (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct joining_group_table t; unsigned int level1_offset, level2_offset, level3_offset; uint16_t *level3_packed; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Arabic joining group of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; joining_group_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { uint8_t value = unicode_joining_group[ch]; assert (value <= 0x7f); joining_group_table_add (&t, ch, value); } joining_group_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define joining_group_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned short level3[%zu * %d + 1];\n", t.level3_size, (1 << t.p) * 7 / 16); fprintf (stream, " }\n"); fprintf (stream, "u_joining_group =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 7 bits only. Use 16-bit units, not 32-bit units, in order to make the lookup function easier. */ level3_packed = (uint16_t *) calloc ((t.level3_size << t.p) * 7 / 16 + 1, sizeof (uint16_t)); for (i = 0; i < t.level3_size << t.p; i++) { unsigned int j = (i * 7) / 16; unsigned int k = (i * 7) % 16; uint32_t value = ((unsigned char *) (t.result + level3_offset))[i]; value = level3_packed[j] | (level3_packed[j+1] << 16) | (value << k); level3_packed[j] = value & 0xffff; level3_packed[j+1] = value >> 16; } fprintf (stream, " {"); if ((t.level3_size << t.p) * 7 / 16 + 1 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 7 / 16 + 1; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%04x", level3_packed[i]); if (i+1 < (t.level3_size << t.p) * 7 / 16 + 1) fprintf (stream, ","); } if ((t.level3_size << t.p) * 7 / 16 + 1 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); free (level3_packed); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Scripts. */ static const char *scripts[256]; static unsigned int numscripts; static uint8_t unicode_scripts[0x110000]; static void fill_scripts (const char *scripts_filename) { FILE *stream; unsigned int i; stream = fopen (scripts_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", scripts_filename); exit (1); } numscripts = 0; for (i = 0; i < 0x110000; i++) unicode_scripts[i] = (uint8_t)~(uint8_t)0; for (;;) { char buf[200+1]; unsigned int i1, i2; char padding[200+1]; char scriptname[200+1]; int script; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X..%X%[ ;]%[^ ]", &i1, &i2, padding, scriptname) != 4) { if (sscanf (buf, "%X%[ ;]%[^ ]", &i1, padding, scriptname) != 3) { fprintf (stderr, "parse error in '%s'\n", scripts_filename); exit (1); } i2 = i1; } assert (i2 >= i1); assert (i2 < 0x110000); for (script = numscripts - 1; script >= 0; script--) if (strcmp (scripts[script], scriptname) == 0) break; if (script < 0) { scripts[numscripts] = strdup (scriptname); script = numscripts; numscripts++; assert (numscripts != 256); } for (i = i1; i <= i2; i++) { if (unicode_scripts[i] != (uint8_t)~(uint8_t)0) fprintf (stderr, "0x%04X belongs to multiple scripts\n", i); unicode_scripts[i] = script; } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", scripts_filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE script_table #define ELEMENT uint8_t #define DEFAULT (uint8_t)~(uint8_t)0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_scripts (const char *version) { const char *filename = "unictype/scripts.h"; FILE *stream; unsigned int ch, s, i; struct script_table t; unsigned int level1_offset, level2_offset, level3_offset; typedef struct { const char *lowercase_name; } scriptinfo_t; scriptinfo_t scriptinfo[256]; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Unicode scripts. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); for (s = 0; s < numscripts; s++) { char *lcp = strdup (scripts[s]); char *cp; for (cp = lcp; *cp != '\0'; cp++) if (*cp >= 'A' && *cp <= 'Z') *cp += 'a' - 'A'; scriptinfo[s].lowercase_name = lcp; } for (s = 0; s < numscripts; s++) { fprintf (stream, "static const uc_interval_t script_%s_intervals[] =\n", scriptinfo[s].lowercase_name); fprintf (stream, "{\n"); i = 0; for (ch = 0; ch < 0x110000; ch++) if (unicode_scripts[ch] == s) { unsigned int start; unsigned int end; start = ch; while (ch + 1 < 0x110000 && unicode_scripts[ch + 1] == s) ch++; end = ch; if (i > 0) fprintf (stream, ",\n"); if (start == end) fprintf (stream, " { 0x%04X, 1, 1 }", start); else fprintf (stream, " { 0x%04X, 1, 0 }, { 0x%04X, 0, 1 }", start, end); i++; } fprintf (stream, "\n"); fprintf (stream, "};\n"); } fprintf (stream, "static const uc_script_t scripts[%d] =\n", numscripts); fprintf (stream, "{\n"); for (s = 0; s < numscripts; s++) { fprintf (stream, " {\n"); fprintf (stream, " sizeof (script_%s_intervals) / sizeof (uc_interval_t),\n", scriptinfo[s].lowercase_name); fprintf (stream, " script_%s_intervals,\n", scriptinfo[s].lowercase_name); fprintf (stream, " \"%s\"\n", scripts[s]); fprintf (stream, " }"); if (s+1 < numscripts) fprintf (stream, ","); fprintf (stream, "\n"); } fprintf (stream, "};\n"); t.p = 7; t.q = 9; script_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { unsigned int s = unicode_scripts[ch]; if (s != (uint8_t)~(uint8_t)0) script_table_add (&t, ch, s); } script_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define script_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "u_script =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " %3d", ((uint8_t *) (t.result + level3_offset))[i]); if (i+1 < t.level3_size << t.p) fprintf (stream, ","); } if (t.level3_size << t.p > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } static void output_scripts_byname (const char *version) { const char *filename = "unictype/scripts_byname.gperf"; FILE *stream; unsigned int s; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Unicode scripts. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); fprintf (stream, "struct named_script { int name; unsigned int index; };\n"); fprintf (stream, "%%struct-type\n"); fprintf (stream, "%%language=ANSI-C\n"); fprintf (stream, "%%define hash-function-name scripts_hash\n"); fprintf (stream, "%%define lookup-function-name uc_script_lookup\n"); fprintf (stream, "%%readonly-tables\n"); fprintf (stream, "%%global-table\n"); fprintf (stream, "%%define word-array-name script_names\n"); fprintf (stream, "%%pic\n"); fprintf (stream, "%%define string-pool-name script_stringpool\n"); fprintf (stream, "%%%%\n"); for (s = 0; s < numscripts; s++) fprintf (stream, "%s, %u\n", scripts[s], s); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Blocks. */ typedef struct { unsigned int start; unsigned int end; const char *name; } block_t; static block_t blocks[384]; static unsigned int numblocks; static void fill_blocks (const char *blocks_filename) { FILE *stream; stream = fopen (blocks_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", blocks_filename); exit (1); } for (;;) { char buf[200+1]; unsigned int i1, i2; char padding[200+1]; char blockname[200+1]; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X..%X%[ ;]%[^\r]", &i1, &i2, padding, blockname) != 4) { fprintf (stderr, "parse error in '%s'\n", blocks_filename); exit (1); } blocks[numblocks].start = i1; blocks[numblocks].end = i2; blocks[numblocks].name = strdup (blockname); /* It must be sorted. */ assert (numblocks == 0 || blocks[numblocks-1].end < blocks[numblocks].start); numblocks++; assert (numblocks != SIZEOF (blocks)); } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", blocks_filename); exit (1); } } /* Return the smallest block index among the blocks for characters >= ch. */ static unsigned int block_first_index (unsigned int ch) { /* Binary search. */ unsigned int lo = 0; unsigned int hi = numblocks; /* Invariants: All blocks[i], i < lo, have blocks[i].end < ch, all blocks[i], i >= hi, have blocks[i].end >= ch. */ while (lo < hi) { unsigned int mid = (lo + hi) / 2; /* >= lo, < hi */ if (blocks[mid].end < ch) lo = mid + 1; else hi = mid; } return hi; } /* Return the largest block index among the blocks for characters <= ch, plus 1. */ static unsigned int block_last_index (unsigned int ch) { /* Binary search. */ unsigned int lo = 0; unsigned int hi = numblocks; /* Invariants: All blocks[i], i < lo, have blocks[i].start <= ch, all blocks[i], i >= hi, have blocks[i].start > ch. */ while (lo < hi) { unsigned int mid = (lo + hi) / 2; /* >= lo, < hi */ if (blocks[mid].start <= ch) lo = mid + 1; else hi = mid; } return hi; } static void output_blocks (const char *version) { const char *filename = "unictype/blocks.h"; const unsigned int shift = 8; /* bits to shift away for array access */ const unsigned int threshold = 0x28000; /* cut-off table here to save space */ FILE *stream; unsigned int i; unsigned int i1; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Unicode blocks. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); fprintf (stream, "static const uc_block_t blocks[] =\n"); fprintf (stream, "{\n"); for (i = 0; i < numblocks; i++) { fprintf (stream, " { 0x%04X, 0x%04X, \"%s\" }", blocks[i].start, blocks[i].end, blocks[i].name); if (i+1 < numblocks) fprintf (stream, ","); fprintf (stream, "\n"); } fprintf (stream, "};\n"); fprintf (stream, "#define blocks_level1_shift %d\n", shift); fprintf (stream, "#define blocks_level1_threshold 0x%04X\n", threshold); fprintf (stream, "static const uint16_t blocks_level1[%d * 2] =\n", threshold >> shift); fprintf (stream, "{\n"); for (i1 = 0; i1 < (threshold >> shift); i1++) { unsigned int first_index = block_first_index (i1 << shift); unsigned int last_index = block_last_index (((i1 + 1) << shift) - 1); fprintf (stream, " %3d, %3d", first_index, last_index); if (i1+1 < (threshold >> shift)) fprintf (stream, ","); fprintf (stream, "\n"); } fprintf (stream, "};\n"); fprintf (stream, "#define blocks_upper_first_index %d\n", block_first_index (threshold)); fprintf (stream, "#define blocks_upper_last_index %d\n", block_last_index (0x10FFFF)); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* C and Java syntax. */ enum { UC_IDENTIFIER_START, /* valid as first or subsequent character */ UC_IDENTIFIER_VALID, /* valid as subsequent character only */ UC_IDENTIFIER_INVALID, /* not valid */ UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ }; /* ISO C 99 section 6.4.(3). */ static bool is_c_whitespace (unsigned int ch) { return (ch == ' ' /* space */ || ch == '\t' /* horizontal tab */ || ch == '\n' || ch == '\r' /* new-line */ || ch == '\v' /* vertical tab */ || ch == '\f'); /* form-feed */ } /* ISO C 99 section 6.4.2.1 and appendix D. */ static int c_ident_category (unsigned int ch) { /* Section 6.4.2.1. */ if (ch >= '0' && ch <= '9') return UC_IDENTIFIER_VALID; if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '_') return UC_IDENTIFIER_START; /* Appendix D. */ if (0 /* Latin */ || (ch == 0x00AA) || (ch == 0x00BA) || (ch >= 0x00C0 && ch <= 0x00D6) || (ch >= 0x00D8 && ch <= 0x00F6) || (ch >= 0x00F8 && ch <= 0x01F5) || (ch >= 0x01FA && ch <= 0x0217) || (ch >= 0x0250 && ch <= 0x02A8) || (ch >= 0x1E00 && ch <= 0x1E9B) || (ch >= 0x1EA0 && ch <= 0x1EF9) || (ch == 0x207F) /* Greek */ || (ch == 0x0386) || (ch >= 0x0388 && ch <= 0x038A) || (ch == 0x038C) || (ch >= 0x038E && ch <= 0x03A1) || (ch >= 0x03A3 && ch <= 0x03CE) || (ch >= 0x03D0 && ch <= 0x03D6) || (ch == 0x03DA) || (ch == 0x03DC) || (ch == 0x03DE) || (ch == 0x03E0) || (ch >= 0x03E2 && ch <= 0x03F3) || (ch >= 0x1F00 && ch <= 0x1F15) || (ch >= 0x1F18 && ch <= 0x1F1D) || (ch >= 0x1F20 && ch <= 0x1F45) || (ch >= 0x1F48 && ch <= 0x1F4D) || (ch >= 0x1F50 && ch <= 0x1F57) || (ch == 0x1F59) || (ch == 0x1F5B) || (ch == 0x1F5D) || (ch >= 0x1F5F && ch <= 0x1F7D) || (ch >= 0x1F80 && ch <= 0x1FB4) || (ch >= 0x1FB6 && ch <= 0x1FBC) || (ch >= 0x1FC2 && ch <= 0x1FC4) || (ch >= 0x1FC6 && ch <= 0x1FCC) || (ch >= 0x1FD0 && ch <= 0x1FD3) || (ch >= 0x1FD6 && ch <= 0x1FDB) || (ch >= 0x1FE0 && ch <= 0x1FEC) || (ch >= 0x1FF2 && ch <= 0x1FF4) || (ch >= 0x1FF6 && ch <= 0x1FFC) /* Cyrillic */ || (ch >= 0x0401 && ch <= 0x040C) || (ch >= 0x040E && ch <= 0x044F) || (ch >= 0x0451 && ch <= 0x045C) || (ch >= 0x045E && ch <= 0x0481) || (ch >= 0x0490 && ch <= 0x04C4) || (ch >= 0x04C7 && ch <= 0x04C8) || (ch >= 0x04CB && ch <= 0x04CC) || (ch >= 0x04D0 && ch <= 0x04EB) || (ch >= 0x04EE && ch <= 0x04F5) || (ch >= 0x04F8 && ch <= 0x04F9) /* Armenian */ || (ch >= 0x0531 && ch <= 0x0556) || (ch >= 0x0561 && ch <= 0x0587) /* Hebrew */ || (ch >= 0x05B0 && ch <= 0x05B9) || (ch >= 0x05BB && ch <= 0x05BD) || (ch == 0x05BF) || (ch >= 0x05C1 && ch <= 0x05C2) || (ch >= 0x05D0 && ch <= 0x05EA) || (ch >= 0x05F0 && ch <= 0x05F2) /* Arabic */ || (ch >= 0x0621 && ch <= 0x063A) || (ch >= 0x0640 && ch <= 0x0652) || (ch >= 0x0670 && ch <= 0x06B7) || (ch >= 0x06BA && ch <= 0x06BE) || (ch >= 0x06C0 && ch <= 0x06CE) || (ch >= 0x06D0 && ch <= 0x06DC) || (ch >= 0x06E5 && ch <= 0x06E8) || (ch >= 0x06EA && ch <= 0x06ED) /* Devanagari */ || (ch >= 0x0901 && ch <= 0x0903) || (ch >= 0x0905 && ch <= 0x0939) || (ch >= 0x093E && ch <= 0x094D) || (ch >= 0x0950 && ch <= 0x0952) || (ch >= 0x0958 && ch <= 0x0963) /* Bengali */ || (ch >= 0x0981 && ch <= 0x0983) || (ch >= 0x0985 && ch <= 0x098C) || (ch >= 0x098F && ch <= 0x0990) || (ch >= 0x0993 && ch <= 0x09A8) || (ch >= 0x09AA && ch <= 0x09B0) || (ch == 0x09B2) || (ch >= 0x09B6 && ch <= 0x09B9) || (ch >= 0x09BE && ch <= 0x09C4) || (ch >= 0x09C7 && ch <= 0x09C8) || (ch >= 0x09CB && ch <= 0x09CD) || (ch >= 0x09DC && ch <= 0x09DD) || (ch >= 0x09DF && ch <= 0x09E3) || (ch >= 0x09F0 && ch <= 0x09F1) /* Gurmukhi */ || (ch == 0x0A02) || (ch >= 0x0A05 && ch <= 0x0A0A) || (ch >= 0x0A0F && ch <= 0x0A10) || (ch >= 0x0A13 && ch <= 0x0A28) || (ch >= 0x0A2A && ch <= 0x0A30) || (ch >= 0x0A32 && ch <= 0x0A33) || (ch >= 0x0A35 && ch <= 0x0A36) || (ch >= 0x0A38 && ch <= 0x0A39) || (ch >= 0x0A3E && ch <= 0x0A42) || (ch >= 0x0A47 && ch <= 0x0A48) || (ch >= 0x0A4B && ch <= 0x0A4D) || (ch >= 0x0A59 && ch <= 0x0A5C) || (ch == 0x0A5E) || (ch == 0x0A74) /* Gujarati */ || (ch >= 0x0A81 && ch <= 0x0A83) || (ch >= 0x0A85 && ch <= 0x0A8B) || (ch == 0x0A8D) || (ch >= 0x0A8F && ch <= 0x0A91) || (ch >= 0x0A93 && ch <= 0x0AA8) || (ch >= 0x0AAA && ch <= 0x0AB0) || (ch >= 0x0AB2 && ch <= 0x0AB3) || (ch >= 0x0AB5 && ch <= 0x0AB9) || (ch >= 0x0ABD && ch <= 0x0AC5) || (ch >= 0x0AC7 && ch <= 0x0AC9) || (ch >= 0x0ACB && ch <= 0x0ACD) || (ch == 0x0AD0) || (ch == 0x0AE0) /* Oriya */ || (ch >= 0x0B01 && ch <= 0x0B03) || (ch >= 0x0B05 && ch <= 0x0B0C) || (ch >= 0x0B0F && ch <= 0x0B10) || (ch >= 0x0B13 && ch <= 0x0B28) || (ch >= 0x0B2A && ch <= 0x0B30) || (ch >= 0x0B32 && ch <= 0x0B33) || (ch >= 0x0B36 && ch <= 0x0B39) || (ch >= 0x0B3E && ch <= 0x0B43) || (ch >= 0x0B47 && ch <= 0x0B48) || (ch >= 0x0B4B && ch <= 0x0B4D) || (ch >= 0x0B5C && ch <= 0x0B5D) || (ch >= 0x0B5F && ch <= 0x0B61) /* Tamil */ || (ch >= 0x0B82 && ch <= 0x0B83) || (ch >= 0x0B85 && ch <= 0x0B8A) || (ch >= 0x0B8E && ch <= 0x0B90) || (ch >= 0x0B92 && ch <= 0x0B95) || (ch >= 0x0B99 && ch <= 0x0B9A) || (ch == 0x0B9C) || (ch >= 0x0B9E && ch <= 0x0B9F) || (ch >= 0x0BA3 && ch <= 0x0BA4) || (ch >= 0x0BA8 && ch <= 0x0BAA) || (ch >= 0x0BAE && ch <= 0x0BB5) || (ch >= 0x0BB7 && ch <= 0x0BB9) || (ch >= 0x0BBE && ch <= 0x0BC2) || (ch >= 0x0BC6 && ch <= 0x0BC8) || (ch >= 0x0BCA && ch <= 0x0BCD) /* Telugu */ || (ch >= 0x0C01 && ch <= 0x0C03) || (ch >= 0x0C05 && ch <= 0x0C0C) || (ch >= 0x0C0E && ch <= 0x0C10) || (ch >= 0x0C12 && ch <= 0x0C28) || (ch >= 0x0C2A && ch <= 0x0C33) || (ch >= 0x0C35 && ch <= 0x0C39) || (ch >= 0x0C3E && ch <= 0x0C44) || (ch >= 0x0C46 && ch <= 0x0C48) || (ch >= 0x0C4A && ch <= 0x0C4D) || (ch >= 0x0C60 && ch <= 0x0C61) /* Kannada */ || (ch >= 0x0C82 && ch <= 0x0C83) || (ch >= 0x0C85 && ch <= 0x0C8C) || (ch >= 0x0C8E && ch <= 0x0C90) || (ch >= 0x0C92 && ch <= 0x0CA8) || (ch >= 0x0CAA && ch <= 0x0CB3) || (ch >= 0x0CB5 && ch <= 0x0CB9) || (ch >= 0x0CBE && ch <= 0x0CC4) || (ch >= 0x0CC6 && ch <= 0x0CC8) || (ch >= 0x0CCA && ch <= 0x0CCD) || (ch == 0x0CDE) || (ch >= 0x0CE0 && ch <= 0x0CE1) /* Malayalam */ || (ch >= 0x0D02 && ch <= 0x0D03) || (ch >= 0x0D05 && ch <= 0x0D0C) || (ch >= 0x0D0E && ch <= 0x0D10) || (ch >= 0x0D12 && ch <= 0x0D28) || (ch >= 0x0D2A && ch <= 0x0D39) || (ch >= 0x0D3E && ch <= 0x0D43) || (ch >= 0x0D46 && ch <= 0x0D48) || (ch >= 0x0D4A && ch <= 0x0D4D) || (ch >= 0x0D60 && ch <= 0x0D61) /* Thai */ || (ch >= 0x0E01 && ch <= 0x0E3A) || (ch >= 0x0E40 && ch <= 0x0E5B) /* Lao */ || (ch >= 0x0E81 && ch <= 0x0E82) || (ch == 0x0E84) || (ch >= 0x0E87 && ch <= 0x0E88) || (ch == 0x0E8A) || (ch == 0x0E8D) || (ch >= 0x0E94 && ch <= 0x0E97) || (ch >= 0x0E99 && ch <= 0x0E9F) || (ch >= 0x0EA1 && ch <= 0x0EA3) || (ch == 0x0EA5) || (ch == 0x0EA7) || (ch >= 0x0EAA && ch <= 0x0EAB) || (ch >= 0x0EAD && ch <= 0x0EAE) || (ch >= 0x0EB0 && ch <= 0x0EB9) || (ch >= 0x0EBB && ch <= 0x0EBD) || (ch >= 0x0EC0 && ch <= 0x0EC4) || (ch == 0x0EC6) || (ch >= 0x0EC8 && ch <= 0x0ECD) || (ch >= 0x0EDC && ch <= 0x0EDD) /* Tibetan */ || (ch == 0x0F00) || (ch >= 0x0F18 && ch <= 0x0F19) || (ch == 0x0F35) || (ch == 0x0F37) || (ch == 0x0F39) || (ch >= 0x0F3E && ch <= 0x0F47) || (ch >= 0x0F49 && ch <= 0x0F69) || (ch >= 0x0F71 && ch <= 0x0F84) || (ch >= 0x0F86 && ch <= 0x0F8B) || (ch >= 0x0F90 && ch <= 0x0F95) || (ch == 0x0F97) || (ch >= 0x0F99 && ch <= 0x0FAD) || (ch >= 0x0FB1 && ch <= 0x0FB7) || (ch == 0x0FB9) /* Georgian */ || (ch >= 0x10A0 && ch <= 0x10C5) || (ch >= 0x10D0 && ch <= 0x10F6) /* Hiragana */ || (ch >= 0x3041 && ch <= 0x3093) || (ch >= 0x309B && ch <= 0x309C) /* Katakana */ || (ch >= 0x30A1 && ch <= 0x30F6) || (ch >= 0x30FB && ch <= 0x30FC) /* Bopomofo */ || (ch >= 0x3105 && ch <= 0x312C) /* CJK Unified Ideographs */ || (ch >= 0x4E00 && ch <= 0x9FA5) /* Hangul */ || (ch >= 0xAC00 && ch <= 0xD7A3) /* Digits */ || (ch >= 0x0660 && ch <= 0x0669) || (ch >= 0x06F0 && ch <= 0x06F9) || (ch >= 0x0966 && ch <= 0x096F) || (ch >= 0x09E6 && ch <= 0x09EF) || (ch >= 0x0A66 && ch <= 0x0A6F) || (ch >= 0x0AE6 && ch <= 0x0AEF) || (ch >= 0x0B66 && ch <= 0x0B6F) || (ch >= 0x0BE7 && ch <= 0x0BEF) || (ch >= 0x0C66 && ch <= 0x0C6F) || (ch >= 0x0CE6 && ch <= 0x0CEF) || (ch >= 0x0D66 && ch <= 0x0D6F) || (ch >= 0x0E50 && ch <= 0x0E59) || (ch >= 0x0ED0 && ch <= 0x0ED9) || (ch >= 0x0F20 && ch <= 0x0F33) /* Special characters */ || (ch == 0x00B5) || (ch == 0x00B7) || (ch >= 0x02B0 && ch <= 0x02B8) || (ch == 0x02BB) || (ch >= 0x02BD && ch <= 0x02C1) || (ch >= 0x02D0 && ch <= 0x02D1) || (ch >= 0x02E0 && ch <= 0x02E4) || (ch == 0x037A) || (ch == 0x0559) || (ch == 0x093D) || (ch == 0x0B3D) || (ch == 0x1FBE) || (ch >= 0x203F && ch <= 0x2040) || (ch == 0x2102) || (ch == 0x2107) || (ch >= 0x210A && ch <= 0x2113) || (ch == 0x2115) || (ch >= 0x2118 && ch <= 0x211D) || (ch == 0x2124) || (ch == 0x2126) || (ch == 0x2128) || (ch >= 0x212A && ch <= 0x2131) || (ch >= 0x2133 && ch <= 0x2138) || (ch >= 0x2160 && ch <= 0x2182) || (ch >= 0x3005 && ch <= 0x3007) || (ch >= 0x3021 && ch <= 0x3029) ) return UC_IDENTIFIER_START; return UC_IDENTIFIER_INVALID; } /* The Java Language Specification, 3rd edition, §3.6. https://docs.oracle.com/javase/specs/jls/se6/html/lexical.html#3.6 */ static bool is_java_whitespace (unsigned int ch) { return (ch == ' ' || ch == '\t' || ch == '\f' || ch == '\n' || ch == '\r'); } /* The Java Language Specification, 3rd edition, §3.8. https://docs.oracle.com/javase/specs/jls/se6/html/lexical.html#3.8 and Character.isJavaIdentifierStart and Character.isJavaIdentifierPart */ static int java_ident_category (unsigned int ch) { /* FIXME: Check this against Sun's JDK implementation. */ if (is_category_L (ch) /* = Character.isLetter(ch) */ || is_category_Nl (ch) /* = Character.getType(ch)==LETTER_NUMBER */ || is_category_Sc (ch) /* currency symbol */ || is_category_Pc (ch) /* connector punctuation */ ) return UC_IDENTIFIER_START; if (is_category_Nd (ch) /* digit */ || is_category_Mc (ch) /* combining mark */ || is_category_Mn (ch) /* non-spacing mark */ ) return UC_IDENTIFIER_VALID; if ((ch >= 0x0000 && ch <= 0x0008) || (ch >= 0x000E && ch <= 0x001B) || (ch >= 0x007F && ch <= 0x009F) || is_category_Cf (ch) /* = Character.getType(ch)==FORMAT */ ) return UC_IDENTIFIER_IGNORABLE; return UC_IDENTIFIER_INVALID; } /* Construction of sparse 3-level tables. */ #define TABLE identsyntax_table #define ELEMENT uint8_t #define DEFAULT UC_IDENTIFIER_INVALID #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output an identifier syntax categorization in a three-level bitmap. */ static void output_ident_category (const char *filename, int (*predicate) (unsigned int), const char *name, const char *version) { FILE *stream; unsigned int ch, i; struct identsyntax_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Language syntax properties of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; /* or 8 */ t.q = 5; /* or 4 */ identsyntax_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int syntaxcode = predicate (ch); assert (syntaxcode <= 0x03); if (syntaxcode != UC_IDENTIFIER_INVALID) identsyntax_table_add (&t, ch, syntaxcode); } identsyntax_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define identsyntax_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned short level3[%zu * %d];\n", t.level3_size, (1 << t.p) * 2 / 16); fprintf (stream, " }\n"); fprintf (stream, "%s =\n", name); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); /* Pack the level3 array. Each entry needs 2 bits only. */ fprintf (stream, " {"); if ((t.level3_size << t.p) * 2 / 16 > 8) fprintf (stream, "\n "); for (i = 0; i < (t.level3_size << t.p) * 2 / 16; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%04x", (((uint8_t *) (t.result + level3_offset))[8 * i] << 0) | (((uint8_t *) (t.result + level3_offset))[8 * i + 1] << 2) | (((uint8_t *) (t.result + level3_offset))[8 * i + 2] << 4) | (((uint8_t *) (t.result + level3_offset))[8 * i + 3] << 6) | (((uint8_t *) (t.result + level3_offset))[8 * i + 4] << 8) | (((uint8_t *) (t.result + level3_offset))[8 * i + 5] << 10) | (((uint8_t *) (t.result + level3_offset))[8 * i + 6] << 12) | (((uint8_t *) (t.result + level3_offset))[8 * i + 7] << 14)); if (i+1 < (t.level3_size << t.p) * 2 / 16) fprintf (stream, ","); } if ((t.level3_size << t.p) * 2 / 16 > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } static void output_ident_properties (const char *version) { #define PROPERTY(P) \ debug_output_predicate ("unictype/sy_" #P ".txt", is_ ## P); \ output_predicate_test ("../tests/unictype/test-sy_" #P ".c", is_ ## P, "uc_is_" #P " (c)"); \ output_predicate ("unictype/sy_" #P ".h", is_ ## P, "u_" #P, "Language syntax properties", version); PROPERTY(c_whitespace) PROPERTY(java_whitespace) #undef PROPERTY output_ident_category ("unictype/sy_c_ident.h", c_ident_category, "u_c_ident", version); output_ident_category ("unictype/sy_java_ident.h", java_ident_category, "u_java_ident", version); } /* ========================================================================= */ /* Like ISO C <ctype.h> and <wctype.h>. Compatible to glibc's glibc/localedata/locales/i18n file, generated by glibc/localedata/gen-unicode-ctype.c. */ /* Character mappings. */ static unsigned int to_upper (unsigned int ch) { if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].upper != NONE) return unicode_attributes[ch].upper; else return ch; } static unsigned int to_lower (unsigned int ch) { if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].lower != NONE) return unicode_attributes[ch].lower; else return ch; } static unsigned int to_title (unsigned int ch) { if (unicode_attributes[ch].name != NULL && unicode_attributes[ch].title != NONE) return unicode_attributes[ch].title; else return ch; } /* Character class properties. */ static bool is_upper (unsigned int ch) { return (to_lower (ch) != ch); } static bool is_lower (unsigned int ch) { return (to_upper (ch) != ch) /* <U00DF> is lowercase, but without simple to_upper mapping. */ || (ch == 0x00DF); } static bool is_alpha (unsigned int ch) { return (unicode_attributes[ch].name != NULL && ((unicode_attributes[ch].category[0] == 'L' /* Theppitak Karoonboonyanan <thep@links.nectec.or.th> says <U0E2F>, <U0E46> should belong to is_punct. */ && (ch != 0x0E2F) && (ch != 0x0E46)) /* Theppitak Karoonboonyanan <thep@links.nectec.or.th> says <U0E31>, <U0E34>..<U0E3A>, <U0E47>..<U0E4E> are is_alpha. */ || (ch == 0x0E31) || (ch >= 0x0E34 && ch <= 0x0E3A) || (ch >= 0x0E47 && ch <= 0x0E4E) /* Avoid warning for <U0345>. */ || (ch == 0x0345) /* Avoid warnings for <U2160>..<U217F>. */ || (unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'l') /* Avoid warnings for <U24B6>..<U24E9>. */ || (unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'o' && strstr (unicode_attributes[ch].name, " LETTER ") != NULL) /* Consider all the non-ASCII digits as alphabetic. ISO C 99 forbids us to have them in category "digit", but we want iswalnum to return true on them. */ || (unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'd' && !(ch >= 0x0030 && ch <= 0x0039)))); } static bool is_digit (unsigned int ch) { #if 0 return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'd'); /* Note: U+0BE7..U+0BEF and U+1369..U+1371 are digit systems without a zero. Must add <0> in front of them by hand. */ #else /* SUSV2 gives us some freedom for the "digit" category, but ISO C 99 takes it away: 7.25.2.1.5: The iswdigit function tests for any wide character that corresponds to a decimal-digit character (as defined in 5.2.1). 5.2.1: the 10 decimal digits 0 1 2 3 4 5 6 7 8 9 */ return (ch >= 0x0030 && ch <= 0x0039); #endif } static bool is_alnum (unsigned int ch) { return is_alpha (ch) || is_digit (ch); } static bool is_blank (unsigned int ch) { return (ch == 0x0009 /* '\t' */ /* Category Zs without mention of "<noBreak>" */ || (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && unicode_attributes[ch].category[1] == 's' && !strstr (unicode_attributes[ch].decomposition, "<noBreak>"))); } static bool is_space (unsigned int ch) { /* Don't make U+00A0 a space. Non-breaking space means that all programs should treat it like a punctuation character, not like a space. */ return (ch == 0x0020 /* ' ' */ || ch == 0x000C /* '\f' */ || ch == 0x000A /* '\n' */ || ch == 0x000D /* '\r' */ || ch == 0x0009 /* '\t' */ || ch == 0x000B /* '\v' */ /* Categories Zl, Zp, and Zs without mention of "<noBreak>" */ || (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && (unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 'p' || (unicode_attributes[ch].category[1] == 's' && !strstr (unicode_attributes[ch].decomposition, "<noBreak>"))))); } static bool is_cntrl (unsigned int ch) { return (unicode_attributes[ch].name != NULL && (strcmp (unicode_attributes[ch].name, "<control>") == 0 /* Categories Zl and Zp */ || (unicode_attributes[ch].category[0] == 'Z' && (unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 'p')))); } static bool is_xdigit (unsigned int ch) { #if 0 return is_digit (ch) || (ch >= 0x0041 && ch <= 0x0046) || (ch >= 0x0061 && ch <= 0x0066); #else /* SUSV2 gives us some freedom for the "xdigit" category, but ISO C 99 takes it away: 7.25.2.1.12: The iswxdigit function tests for any wide character that corresponds to a hexadecimal-digit character (as defined in 6.4.4.1). 6.4.4.1: hexadecimal-digit: one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F */ return (ch >= 0x0030 && ch <= 0x0039) || (ch >= 0x0041 && ch <= 0x0046) || (ch >= 0x0061 && ch <= 0x0066); #endif } static bool is_graph (unsigned int ch) { return (unicode_attributes[ch].name != NULL && strcmp (unicode_attributes[ch].name, "<control>") && !is_space (ch)); } static bool is_print (unsigned int ch) { return (unicode_attributes[ch].name != NULL && strcmp (unicode_attributes[ch].name, "<control>") /* Categories Zl and Zp */ && !(unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'Z' && (unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 'p'))); } static bool is_punct (unsigned int ch) { #if 0 return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'P'); #else /* The traditional POSIX definition of punctuation is every graphic, non-alphanumeric character. */ return (is_graph (ch) && !is_alpha (ch) && !is_digit (ch)); #endif } /* Output all properties. */ static void output_old_ctype (const char *version) { #define PROPERTY(P) \ debug_output_predicate ("unictype/ctype_" #P ".txt", is_ ## P); \ output_predicate_test ("../tests/unictype/test-ctype_" #P ".c", is_ ## P, "uc_is_" #P " (c)"); \ output_predicate ("unictype/ctype_" #P ".h", is_ ## P, "u_is_" #P, "ISO C <ctype.h> like properties", version); PROPERTY(alnum) PROPERTY(alpha) PROPERTY(cntrl) PROPERTY(digit) PROPERTY(graph) PROPERTY(lower) PROPERTY(print) PROPERTY(punct) PROPERTY(space) PROPERTY(upper) PROPERTY(xdigit) PROPERTY(blank) #undef PROPERTY } #if 0 static bool is_combining (unsigned int ch) { /* Up to Unicode 3.0.1 we took the Combining property from the PropList.txt file. In 3.0.1 it was identical to the union of the general categories "Mn", "Mc", "Me". In Unicode 3.1 this property has been dropped from the PropList.txt file, so we take the latter definition. */ return (unicode_attributes[ch].name != NULL && unicode_attributes[ch].category[0] == 'M' && (unicode_attributes[ch].category[1] == 'n' || unicode_attributes[ch].category[1] == 'c' || unicode_attributes[ch].category[1] == 'e')); } static bool is_combining_level3 (unsigned int ch) { return is_combining (ch) && !(unicode_attributes[ch].combining[0] != '\0' && unicode_attributes[ch].combining[0] != '0' && strtoul (unicode_attributes[ch].combining, NULL, 10) >= 200); } /* Return the UCS symbol string for a Unicode character. */ static const char * ucs_symbol (unsigned int i) { static char buf[11+1]; sprintf (buf, (i < 0x10000 ? "<U%04X>" : "<U%08X>"), i); return buf; } /* Return the UCS symbol range string for a Unicode characters interval. */ static const char * ucs_symbol_range (unsigned int low, unsigned int high) { static char buf[24+1]; strcpy (buf, ucs_symbol (low)); strcat (buf, ".."); strcat (buf, ucs_symbol (high)); return buf; } /* Output a character class (= property) table. */ static void output_charclass (FILE *stream, const char *classname, bool (*func) (unsigned int)) { char table[0x110000]; unsigned int i; bool need_semicolon; const int max_column = 75; int column; for (i = 0; i < 0x110000; i++) table[i] = (int) func (i); fprintf (stream, "%s ", classname); need_semicolon = false; column = 1000; for (i = 0; i < 0x110000; ) { if (!table[i]) i++; else { unsigned int low, high; char buf[25]; low = i; do i++; while (i < 0x110000 && table[i]); high = i - 1; if (low == high) strcpy (buf, ucs_symbol (low)); else strcpy (buf, ucs_symbol_range (low, high)); if (need_semicolon) { fprintf (stream, ";"); column++; } if (column + strlen (buf) > max_column) { fprintf (stream, "/\n "); column = 3; } fprintf (stream, "%s", buf); column += strlen (buf); need_semicolon = true; } } fprintf (stream, "\n"); } /* Output a character mapping table. */ static void output_charmap (FILE *stream, const char *mapname, unsigned int (*func) (unsigned int)) { char table[0x110000]; unsigned int i; bool need_semicolon; const int max_column = 75; int column; for (i = 0; i < 0x110000; i++) table[i] = (func (i) != i); fprintf (stream, "%s ", mapname); need_semicolon = false; column = 1000; for (i = 0; i < 0x110000; i++) if (table[i]) { char buf[25+1]; strcpy (buf, "("); strcat (buf, ucs_symbol (i)); strcat (buf, ","); strcat (buf, ucs_symbol (func (i))); strcat (buf, ")"); if (need_semicolon) { fprintf (stream, ";"); column++; } if (column + strlen (buf) > max_column) { fprintf (stream, "/\n "); column = 3; } fprintf (stream, "%s", buf); column += strlen (buf); need_semicolon = true; } fprintf (stream, "\n"); } /* Output the width table. */ static void output_widthmap (FILE *stream) { } /* Output the tables to the given file. */ static void output_tables (const char *filename, const char *version) { FILE *stream; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "escape_char /\n"); fprintf (stream, "comment_char %%\n"); fprintf (stream, "\n"); fprintf (stream, "%% Generated automatically by gen-uni-tables.c for Unicode %s.\n", version); fprintf (stream, "\n"); fprintf (stream, "LC_IDENTIFICATION\n"); fprintf (stream, "title \"Unicode %s FDCC-set\"\n", version); fprintf (stream, "source \"UnicodeData.txt, PropList.txt\"\n"); fprintf (stream, "address \"\"\n"); fprintf (stream, "contact \"\"\n"); fprintf (stream, "email \"bug-glibc@gnu.org\"\n"); fprintf (stream, "tel \"\"\n"); fprintf (stream, "fax \"\"\n"); fprintf (stream, "language \"\"\n"); fprintf (stream, "territory \"Earth\"\n"); fprintf (stream, "revision \"%s\"\n", version); { time_t now; char date[11]; now = time (NULL); strftime (date, sizeof (date), "%Y-%m-%d", gmtime (&now)); fprintf (stream, "date \"%s\"\n", date); } fprintf (stream, "category \"unicode:2001\";LC_CTYPE\n"); fprintf (stream, "END LC_IDENTIFICATION\n"); fprintf (stream, "\n"); /* Verification. */ for (ch = 0; ch < 0x110000; ch++) { /* toupper restriction: "Only characters specified for the keywords lower and upper shall be specified. */ if (to_upper (ch) != ch && !(is_lower (ch) || is_upper (ch))) fprintf (stderr, "%s is not upper|lower but toupper(0x%04X) = 0x%04X\n", ucs_symbol (ch), ch, to_upper (ch)); /* tolower restriction: "Only characters specified for the keywords lower and upper shall be specified. */ if (to_lower (ch) != ch && !(is_lower (ch) || is_upper (ch))) fprintf (stderr, "%s is not upper|lower but tolower(0x%04X) = 0x%04X\n", ucs_symbol (ch), ch, to_lower (ch)); /* alpha restriction: "Characters classified as either upper or lower shall automatically belong to this class. */ if ((is_lower (ch) || is_upper (ch)) && !is_alpha (ch)) fprintf (stderr, "%s is upper|lower but not alpha\n", ucs_symbol (ch)); /* alpha restriction: "No character specified for the keywords cntrl, digit, punct or space shall be specified." */ if (is_alpha (ch) && is_cntrl (ch)) fprintf (stderr, "%s is alpha and cntrl\n", ucs_symbol (ch)); if (is_alpha (ch) && is_digit (ch)) fprintf (stderr, "%s is alpha and digit\n", ucs_symbol (ch)); if (is_alpha (ch) && is_punct (ch)) fprintf (stderr, "%s is alpha and punct\n", ucs_symbol (ch)); if (is_alpha (ch) && is_space (ch)) fprintf (stderr, "%s is alpha and space\n", ucs_symbol (ch)); /* space restriction: "No character specified for the keywords upper, lower, alpha, digit, graph or xdigit shall be specified." upper, lower, alpha already checked above. */ if (is_space (ch) && is_digit (ch)) fprintf (stderr, "%s is space and digit\n", ucs_symbol (ch)); if (is_space (ch) && is_graph (ch)) fprintf (stderr, "%s is space and graph\n", ucs_symbol (ch)); if (is_space (ch) && is_xdigit (ch)) fprintf (stderr, "%s is space and xdigit\n", ucs_symbol (ch)); /* cntrl restriction: "No character specified for the keywords upper, lower, alpha, digit, punct, graph, print or xdigit shall be specified." upper, lower, alpha already checked above. */ if (is_cntrl (ch) && is_digit (ch)) fprintf (stderr, "%s is cntrl and digit\n", ucs_symbol (ch)); if (is_cntrl (ch) && is_punct (ch)) fprintf (stderr, "%s is cntrl and punct\n", ucs_symbol (ch)); if (is_cntrl (ch) && is_graph (ch)) fprintf (stderr, "%s is cntrl and graph\n", ucs_symbol (ch)); if (is_cntrl (ch) && is_print (ch)) fprintf (stderr, "%s is cntrl and print\n", ucs_symbol (ch)); if (is_cntrl (ch) && is_xdigit (ch)) fprintf (stderr, "%s is cntrl and xdigit\n", ucs_symbol (ch)); /* punct restriction: "No character specified for the keywords upper, lower, alpha, digit, cntrl, xdigit or as the <space> character shall be specified." upper, lower, alpha, cntrl already checked above. */ if (is_punct (ch) && is_digit (ch)) fprintf (stderr, "%s is punct and digit\n", ucs_symbol (ch)); if (is_punct (ch) && is_xdigit (ch)) fprintf (stderr, "%s is punct and xdigit\n", ucs_symbol (ch)); if (is_punct (ch) && (ch == 0x0020)) fprintf (stderr, "%s is punct\n", ucs_symbol (ch)); /* graph restriction: "No character specified for the keyword cntrl shall be specified." Already checked above. */ /* print restriction: "No character specified for the keyword cntrl shall be specified." Already checked above. */ /* graph - print relation: differ only in the <space> character. How is this possible if there are more than one space character?! I think susv2/xbd/locale.html should speak of "space characters", not "space character". */ if (is_print (ch) && !(is_graph (ch) || /* ch == 0x0020 */ is_space (ch))) fprintf (stderr, "%s is print but not graph|<space>\n", ucs_symbol (ch)); if (!is_print (ch) && (is_graph (ch) || ch == 0x0020)) fprintf (stderr, "%s is graph|<space> but not print\n", ucs_symbol (ch)); } fprintf (stream, "LC_CTYPE\n"); output_charclass (stream, "upper", is_upper); output_charclass (stream, "lower", is_lower); output_charclass (stream, "alpha", is_alpha); output_charclass (stream, "digit", is_digit); output_charclass (stream, "outdigit", is_outdigit); output_charclass (stream, "blank", is_blank); output_charclass (stream, "space", is_space); output_charclass (stream, "cntrl", is_cntrl); output_charclass (stream, "punct", is_punct); output_charclass (stream, "xdigit", is_xdigit); output_charclass (stream, "graph", is_graph); output_charclass (stream, "print", is_print); output_charclass (stream, "class \"combining\";", is_combining); output_charclass (stream, "class \"combining_level3\";", is_combining_level3); output_charmap (stream, "toupper", to_upper); output_charmap (stream, "tolower", to_lower); output_charmap (stream, "map \"totitle\";", to_title); output_widthmap (stream); fprintf (stream, "END LC_CTYPE\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } #endif /* ========================================================================= */ /* The width property from the EastAsianWidth.txt file. Each is NULL (unassigned) or "N", "A", "H", "W", "F", "Na". */ const char * unicode_width[0x110000]; /* Stores in unicode_width[] the width property from the EastAsianWidth.txt file. */ static void fill_width (const char *width_filename) { unsigned int i, j; FILE *stream; char field0[FIELDLEN]; char field1[FIELDLEN]; char field2[FIELDLEN]; int lineno = 0; for (i = 0; i < 0x110000; i++) unicode_width[i] = (unicode_attributes[i].name != NULL ? "N" : NULL); stream = fopen (width_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", width_filename); exit (1); } for (;;) { int n; int c; lineno++; c = getc (stream); if (c == EOF) break; if (c == '#') { do c = getc (stream); while (c != EOF && c != '\n'); continue; } ungetc (c, stream); n = getfield (stream, field0, ';'); n += getfield (stream, field1, ' '); n += getfield (stream, field2, '\n'); if (n == 0) break; if (n != 3) { fprintf (stderr, "short line in '%s':%d\n", width_filename, lineno); exit (1); } i = strtoul (field0, NULL, 16); if (strstr (field0, "..") != NULL) { /* Deal with a range. */ j = strtoul (strstr (field0, "..") + 2, NULL, 16); for (; i <= j; i++) unicode_width[i] = strdup (field1); } else { /* Single character line. */ unicode_width[i] = strdup (field1); } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", width_filename); exit (1); } } /* ========================================================================= */ /* Non-spacing attribute and width. */ /* The non-spacing attribute table consists of: - Non-spacing characters; generated from PropList.txt or "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" - Format control characters; generated from "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" - Zero width characters; generated from "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" */ static bool is_nonspacing (unsigned int ch) { return (unicode_attributes[ch].name != NULL && (get_bidi_category (ch) == UC_BIDI_NSM || is_category_Cc (ch) || is_category_Cf (ch) || strncmp (unicode_attributes[ch].name, "ZERO WIDTH ", 11) == 0)); } static void output_nonspacing_property (const char *filename) { FILE *stream; int ind[0x110000 / 0x200]; unsigned int i; unsigned int i_max; int next_ind; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } next_ind = 0; for (i = 0; i < 0x110000 / 0x200; i++) { bool nontrivial = false; unsigned int ch; if (i != 0xe0000 / 0x200) /* The 0xe0000 block is handled by code. */ for (ch = i * 0x200; ch < (i + 1) * 0x200; ch++) if (is_nonspacing (ch)) { nontrivial = true; break; } if (nontrivial) ind[i] = next_ind++; else ind[i] = -1; } fprintf (stream, "static const unsigned char nonspacing_table_data[%d*64] = {\n", next_ind); i_max = 0; for (i = 0; i < 0x110000 / 0x200; i++) { bool nontrivial = (ind[i] >= 0); if (nontrivial) { unsigned int j; fprintf (stream, " /* 0x%04x-0x%04x */\n", i * 0x200, (i + 1) * 0x200 - 1); for (j = 0; j < 8; j++) { unsigned int k; fprintf (stream, " "); for (k = 0; k < 8; k++) { unsigned int l; unsigned char bits = 0; for (l = 0; l < 8; l++) { unsigned int ch = i * 0x200 + j * 0x40 + k * 8 + l; if (is_nonspacing (ch)) bits |= 1 << l; } fprintf (stream, " 0x%02x%c", bits, ind[i] + 1 == next_ind && j == 8 - 1 && k == 8 - 1 ? ' ' : ','); } fprintf (stream, " /* 0x%04x-0x%04x */\n", i * 0x200 + j * 0x40, i * 0x200 + (j + 1) * 0x40 - 1); } i_max = i; } } fprintf (stream, "};\n"); i_max = ((i_max + 8 - 1) / 8) * 8; fprintf (stream, "static const signed char nonspacing_table_ind[%u] = {\n", i_max); { unsigned int j; for (j = 0; j < i_max / 8; j++) { unsigned int k; fprintf (stream, " "); for (k = 0; k < 8; k++) { i = j * 8 + k; fprintf (stream, " %2d%c", ind[i], j == i_max / 8 - 1 && k == 8 - 1 ? ' ' : ','); } fprintf (stream, " /* 0x%04x-0x%04x */\n", j * 8 * 0x200, (j + 1) * 8 * 0x200 - 1); } } fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Returns the width of ch as one of 0, '0', '1', '2', 'A'. */ static char symbolic_width (unsigned int ch) { /* Test for unassigned character. */ if (is_property_unassigned_code_value (ch)) { /* Unicode TR#11 section "Unassigned and Private-Use Characters". */ if (ch >= 0xE000 && ch <= 0xF8FF) /* Private Use */ return 'A'; if ((ch >= 0x4E00 && ch <= 0x9FFF) /* CJK Unified Ideographs block */ || (ch >= 0x3400 && ch <= 0x4DBF) /* CJK Unified Ideographs Extension A block */ || (ch >= 0xF900 && ch <= 0xFAFF) /* CJK Compatibility Ideographs block */ || (ch >= 0x20000 && ch <= 0x2FFFF) /* Supplementary Ideographic Plane */ || (ch >= 0x30000 && ch <= 0x3FFFF) /* Tertiary Ideographic Plane */) return '2'; return 0; } else { /* Test for non-spacing or control character. */ if (is_category_Cc (ch) && ch < 0x00A0) return 0; if (is_nonspacing (ch)) return '0'; /* Test for double-width character. */ if (unicode_width[ch] != NULL && (strcmp (unicode_width[ch], "W") == 0 || strcmp (unicode_width[ch], "F") == 0)) return '2'; /* Test for half-width character. */ if (unicode_width[ch] != NULL && strcmp (unicode_width[ch], "H") == 0) return '1'; } /* In ancient CJK encodings, Cyrillic and most other characters are double-width as well. */ if (ch >= 0x00A1 && ch < 0x10000) return 'A'; return '1'; } static void output_width_property_test (const char *filename) { FILE *stream; unsigned int interval_start, interval_end, ch; char interval_value; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } interval_value = 0; interval_start = interval_end = 0; /* avoid GCC warning */ for (ch = 0; ch < 0x110000; ch++) { char value = symbolic_width (ch); if (value != 0) /* skip Cc control characters and unassigned characters */ { if (value == interval_value) /* Extend the interval. */ interval_end = ch; else { /* Terminate the interval. */ if (interval_value != 0) { if (interval_end == interval_start) fprintf (stream, "%04X\t\t%c\n", interval_start, interval_value); else fprintf (stream, "%04X..%04X\t%c\n", interval_start, interval_end, interval_value); } /* Start a new interval. */ interval_start = interval_end = ch; interval_value = value; } } } /* Terminate the last interval. */ if (interval_value != 0) { if (interval_end == interval_start) fprintf (stream, "%04X\t\t%c\n", interval_start, interval_value); else fprintf (stream, "%04X..%04X\t%c\n", interval_start, interval_end, interval_value); } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Line breaking classification. Updated for Unicode TR #14 revision 26. */ enum { /* Values >= 30 are resolved at run time. */ LBP_BK = 30, /* mandatory break */ /*LBP_CR, carriage return - not used here because it's a DOSism */ /*LBP_LF, line feed - not used here because it's a DOSism */ LBP_CM = 31, /* attached characters and combining marks */ /*LBP_NL, next line - not used here because it's equivalent to LBP_BK */ /*LBP_SG, surrogates - not used here because they are not characters */ LBP_WJ = 0, /* word joiner */ LBP_ZW = 32, /* zero width space */ LBP_GL = 1, /* non-breaking (glue) */ LBP_SP = 33, /* space */ LBP_B2 = 2, /* break opportunity before and after */ LBP_BA = 3, /* break opportunity after */ LBP_BB = 4, /* break opportunity before */ LBP_HY = 5, /* hyphen */ LBP_CB = 34, /* contingent break opportunity */ LBP_CL = 6, /* closing punctuation */ LBP_CP = 7, /* closing parenthesis */ LBP_EX = 8, /* exclamation/interrogation */ LBP_IN = 9, /* inseparable */ LBP_NS = 10, /* non starter */ LBP_OP = 11, /* opening punctuation */ LBP_QU = 12, /* ambiguous quotation */ LBP_IS = 13, /* infix separator (numeric) */ LBP_NU = 14, /* numeric */ LBP_PO = 15, /* postfix (numeric) */ LBP_PR = 16, /* prefix (numeric) */ LBP_SY = 17, /* symbols allowing breaks */ LBP_AI = 35, /* ambiguous (alphabetic or ideograph) */ LBP_AL = 18, /* ordinary alphabetic and symbol characters */ /*LBP_CJ, conditional Japanese starter, resolved to NS */ LBP_H2 = 19, /* Hangul LV syllable */ LBP_H3 = 20, /* Hangul LVT syllable */ LBP_HL = 25, /* Hebrew letter */ LBP_ID = 21, /* ideographic */ LBP_JL = 22, /* Hangul L Jamo */ LBP_JV = 23, /* Hangul V Jamo */ LBP_JT = 24, /* Hangul T Jamo */ LBP_RI = 26, /* regional indicator */ LBP_SA = 36, /* complex context (South East Asian) */ LBP_ZWJ = 27, /* zero width joiner */ LBP_EB = 28, /* emoji base */ LBP_EM = 29, /* emoji modifier */ LBP_XX = 37 /* unknown */ }; /* Returns the line breaking classification for ch, as a bit mask. */ static int64_t get_lbp (unsigned int ch) { int64_t attr = 0; /* U+20BC..U+20CF are reserved for prefixes. */ if (unicode_attributes[ch].name == NULL && (ch >= 0x20BC && ch <= 0x20CF)) return (int64_t) 1 << LBP_PR; if (unicode_attributes[ch].name != NULL) { /* mandatory break */ if (ch == 0x000A || ch == 0x000D || ch == 0x0085 /* newline */ || ch == 0x000C /* form feed */ || ch == 0x000B /* line tabulation */ || ch == 0x2028 /* LINE SEPARATOR */ || ch == 0x2029 /* PARAGRAPH SEPARATOR */) attr |= (int64_t) 1 << LBP_BK; if (ch == 0x2060 /* WORD JOINER */ || ch == 0xFEFF /* ZERO WIDTH NO-BREAK SPACE */) attr |= (int64_t) 1 << LBP_WJ; /* zero width space */ if (ch == 0x200B /* ZERO WIDTH SPACE */) attr |= (int64_t) 1 << LBP_ZW; /* zero width joiner */ if (ch == 0x200D /* ZERO WIDTH JOINER */) attr |= (int64_t) 1 << LBP_ZWJ; /* emoji base */ if (ch == 0x261D /* WHITE UP POINTING INDEX */ || ch == 0x26F9 /* PERSON WITH BALL */ || (ch >= 0x270A && ch <= 0x270D) /* RAISED FIST..WRITING HAND */ || ch == 0x1F385 /* FATHER CHRISTMAS */ || (ch >= 0x1F3C3 && ch <= 0x1F3C4) /* RUNNER..SURFER */ || (ch >= 0x1F3CA && ch <= 0x1F3CB) /* SWIMMER..WEIGHT LIFTER */ || (ch >= 0x1F442 && ch <= 0x1F443) /* EAR..NOSE */ || (ch >= 0x1F446 && ch <= 0x1F450) /* WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN */ || (ch >= 0x1F466 && ch <= 0x1F469) /* BOY..WOMAN */ || ch == 0x1F46E /* POLICE OFFICER */ || (ch >= 0x1F470 && ch <= 0x1F478) /* BRIDE WITH VEIL..PRINCESS */ || ch == 0x1F47C /* BABY ANGEL */ || (ch >= 0x1F481 && ch <= 0x1F483) /* INFORMATION DESK PERSON..DANCER */ || (ch >= 0x1F485 && ch <= 0x1F487) /* NAIL POLISH..HAIRCUT */ || ch == 0x1F4AA /* FLEXED BICEPS */ || ch == 0x1F575 /* SLEUTH OR SPY */ || ch == 0x1F57A /* MAN DANCING */ || ch == 0x1F590 /* RAISED HAND WITH FINGERS SPLAYED */ || (ch >= 0x1F595 && ch <= 0x1F596) /* REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS */ || (ch >= 0x1F645 && ch <= 0x1F647) /* FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY */ || (ch >= 0x1F64B && ch <= 0x1F64F) /* HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS */ || ch == 0x1F6A3 /* ROWBOAT */ || (ch >= 0x1F6B4 && ch <= 0x1F6B6) /* BICYCLIST..PEDESTRIAN */ || ch == 0x1F6C0 /* BATH */ || (ch >= 0x1F918 && ch <= 0x1F91E) /* SIGN OF THE HORNS..HAND WITH INDEX AND MIDDLE FINGERS CROSSED */ || ch == 0x1F926 /* FACE PALM */ || ch == 0x1F930 /* PREGNANT WOMAN */ || (ch >= 0x1F933 && ch <= 0x1F939) /* SELFIE..JUGGLING */ || (ch >= 0x1F93C && ch <= 0x1F93E) /* WRESTLERS..HANDBALL */) attr |= (int64_t) 1 << LBP_EB; if ((ch >= 0x1F3FB && ch <= 0x1F3FF) /* EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 */) attr |= (int64_t) 1 << LBP_EM; /* non-breaking (glue) */ if (ch == 0x00A0 /* NO-BREAK SPACE */ || ch == 0x202F /* NARROW NO-BREAK SPACE */ || ch == 0x180E /* MONGOLIAN VOWEL SEPARATOR */ || ch == 0x034F /* COMBINING GRAPHEME JOINER */ || ch == 0x2007 /* FIGURE SPACE */ || ch == 0x2011 /* NON-BREAKING HYPHEN */ || ch == 0x0F08 /* TIBETAN MARK SBRUL SHAD */ || ch == 0x0F0C /* TIBETAN MARK DELIMITER TSHEG BSTAR */ || ch == 0x0F12 /* TIBETAN MARK RGYA GRAM SHAD */ || (ch >= 0x035C && ch <= 0x0362) /* COMBINING DOUBLE ... */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x0FD9 /* TIBETAN MARK LEADING MCHAN RTAGS */ || ch == 0x0FDA /* TIBETAN MARK TRAILING MCHAN RTAGS */) attr |= (int64_t) 1 << LBP_GL; /* space */ if (ch == 0x0020 /* SPACE */) attr |= (int64_t) 1 << LBP_SP; /* break opportunity before and after */ if (ch == 0x2014 /* EM DASH */ || ch == 0x2E3A /* TWO-EM DASH */ || ch == 0x2E3B /* THREE-EM DASH */) attr |= (int64_t) 1 << LBP_B2; /* break opportunity after */ if (/* Breaking Spaces */ ch == 0x1680 /* OGHAM SPACE MARK */ || ch == 0x2000 /* EN QUAD */ || ch == 0x2001 /* EM QUAD */ || ch == 0x2002 /* EN SPACE */ || ch == 0x2003 /* EM SPACE */ || ch == 0x2004 /* THREE-PER-EM SPACE */ || ch == 0x2005 /* FOUR-PER-EM SPACE */ || ch == 0x2006 /* SIX-PER-EM SPACE */ || ch == 0x2008 /* PUNCTUATION SPACE */ || ch == 0x2009 /* THIN SPACE */ || ch == 0x200A /* HAIR SPACE */ || ch == 0x205F /* MEDIUM MATHEMATICAL SPACE */ || ch == 0x3000 /* IDEOGRAPHIC SPACE */ /* Tabs */ || ch == 0x0009 /* tab */ /* Conditional Hyphens */ || ch == 0x00AD /* SOFT HYPHEN */ /* Breaking Hyphens */ || ch == 0x058A /* ARMENIAN HYPHEN */ || ch == 0x1400 /* CANADIAN SYLLABICS HYPHEN */ || ch == 0x2010 /* HYPHEN */ || ch == 0x2012 /* FIGURE DASH */ || ch == 0x2013 /* EN DASH */ /* Visible Word Dividers */ || ch == 0x05BE /* HEBREW PUNCTUATION MAQAF */ || ch == 0x0F0B /* TIBETAN MARK INTERSYLLABIC TSHEG */ || ch == 0x1361 /* ETHIOPIC WORDSPACE */ || ch == 0x17D8 /* KHMER SIGN BEYYAL */ || ch == 0x17DA /* KHMER SIGN KOOMUUT */ || ch == 0x2027 /* HYPHENATION POINT */ || ch == 0x007C /* VERTICAL LINE */ /* Historic Word Separators */ || ch == 0x16EB /* RUNIC SINGLE PUNCTUATION */ || ch == 0x16EC /* RUNIC MULTIPLE PUNCTUATION */ || ch == 0x16ED /* RUNIC CROSS PUNCTUATION */ || ch == 0x2056 /* THREE DOT PUNCTUATION */ || ch == 0x2058 /* FOUR DOT PUNCTUATION */ || ch == 0x2059 /* FIVE DOT PUNCTUATION */ || ch == 0x205A /* TWO DOT PUNCTUATION */ || ch == 0x205B /* FOUR DOT MARK */ || ch == 0x205D /* TRICOLON */ || ch == 0x205E /* VERTICAL FOUR DOTS */ || ch == 0x2E19 /* PALM BRANCH */ || ch == 0x2E2A /* TWO DOTS OVER ONE DOT PUNCTUATION */ || ch == 0x2E2B /* ONE DOT OVER TWO DOTS PUNCTUATION */ || ch == 0x2E2C /* SQUARED FOUR DOT PUNCTUATION */ || ch == 0x2E2D /* FIVE DOT PUNCTUATION */ || ch == 0x2E30 /* RING POINT */ || ch == 0x2E31 /* WORD SEPARATOR MIDDLE DOT */ || ch == 0x2E33 /* RAISED DOT */ || ch == 0x2E34 /* RAISED COMMA */ || ch == 0x10100 /* AEGEAN WORD SEPARATOR LINE */ || ch == 0x10101 /* AEGEAN WORD SEPARATOR DOT */ || ch == 0x10102 /* AEGEAN CHECK MARK */ || ch == 0x1039F /* UGARITIC WORD DIVIDER */ || ch == 0x103D0 /* OLD PERSIAN WORD DIVIDER */ || ch == 0x1091F /* PHOENICIAN WORD SEPARATOR */ || ch == 0x12470 /* CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER */ /* Dandas */ || ch == 0x0964 /* DEVANAGARI DANDA */ || ch == 0x0965 /* DEVANAGARI DOUBLE DANDA */ || ch == 0x0E5A /* THAI CHARACTER ANGKHANKHU */ || ch == 0x0E5B /* THAI CHARACTER KHOMUT */ || ch == 0x104A /* MYANMAR SIGN LITTLE SECTION */ || ch == 0x104B /* MYANMAR SIGN SECTION */ || ch == 0x1735 /* PHILIPPINE SINGLE PUNCTUATION */ || ch == 0x1736 /* PHILIPPINE DOUBLE PUNCTUATION */ || ch == 0x17D4 /* KHMER SIGN KHAN */ || ch == 0x17D5 /* KHMER SIGN BARIYOOSAN */ || ch == 0x1B5E /* BALINESE CARIK SIKI */ || ch == 0x1B5F /* BALINESE CARIK PAREREN */ || ch == 0xA8CE /* SAURASHTRA DANDA */ || ch == 0xA8CF /* SAURASHTRA DOUBLE DANDA */ || ch == 0xAA5D /* CHAM PUNCTUATION DANDA */ || ch == 0xAA5E /* CHAM PUNCTUATION DOUBLE DANDA */ || ch == 0xAA5F /* CHAM PUNCTUATION TRIPLE DANDA */ || ch == 0x10A56 /* KHAROSHTHI PUNCTUATION DANDA */ || ch == 0x10A57 /* KHAROSHTHI PUNCTUATION DOUBLE DANDA */ /* Tibetan */ || ch == 0x0F34 /* TIBETAN MARK BSDUS RTAGS */ || ch == 0x0F7F /* TIBETAN SIGN RNAM BCAD */ || ch == 0x0F85 /* TIBETAN MARK PALUTA */ || ch == 0x0FBE /* TIBETAN KU RU KHA */ || ch == 0x0FBF /* TIBETAN KU RU KHA BZHI MIG CAN */ || ch == 0x0FD2 /* TIBETAN MARK NYIS TSHEG */ /* Other Terminating Punctuation */ || ch == 0x1804 /* MONGOLIAN COLON */ || ch == 0x1805 /* MONGOLIAN FOUR DOTS */ || ch == 0x1B5A /* BALINESE PANTI */ || ch == 0x1B5B /* BALINESE PAMADA */ || ch == 0x1B5D /* BALINESE CARIK PAMUNGKAH */ || ch == 0x1B60 /* BALINESE PAMENENG */ || ch == 0x1C3B /* LEPCHA PUNCTUATION TA-ROL */ || ch == 0x1C3C /* LEPCHA PUNCTUATION NYET THYOOM TA-ROL */ || ch == 0x1C3D /* LEPCHA PUNCTUATION CER-WA */ || ch == 0x1C3E /* LEPCHA PUNCTUATION TSHOOK CER-WA */ || ch == 0x1C3F /* LEPCHA PUNCTUATION TSHOOK */ || ch == 0x1C7E /* OL CHIKI PUNCTUATION MUCAAD */ || ch == 0x1C7F /* OL CHIKI PUNCTUATION DOUBLE MUCAAD */ || ch == 0x2CFA /* COPTIC OLD NUBIAN DIRECT QUESTION MARK */ || ch == 0x2CFB /* COPTIC OLD NUBIAN INDIRECT QUESTION MARK */ || ch == 0x2CFC /* COPTIC OLD NUBIAN VERSE DIVIDER */ || ch == 0x2CFF /* COPTIC MORPHOLOGICAL DIVIDER */ || (ch >= 0x2E0E && ch <= 0x2E15) /* EDITORIAL CORONIS .. UPWARDS ANCORA */ || ch == 0x2E17 /* DOUBLE OBLIQUE HYPHEN */ || ch == 0x2E43 /* DASH WITH LEFT UPTURN */ || ch == 0x2E44 /* DOUBLE SUSPENSION MARK */ || ch == 0x2E3C /* STENOGRAPHIC FULL STOP */ || ch == 0x2E3D /* VERTICAL SIX DOTS */ || ch == 0x2E3E /* WIGGLY VERTICAL LINE */ || ch == 0x2E40 /* DOUBLE HYPHEN */ || ch == 0x2E41 /* REVERSED COMMA */ || ch == 0xA60D /* VAI COMMA */ || ch == 0xA60F /* VAI QUESTION MARK */ || ch == 0xA92E /* KAYAH LI SIGN CWI */ || ch == 0xA92F /* KAYAH LI SIGN SHYA */ || ch == 0x10A50 /* KHAROSHTHI PUNCTUATION DOT */ || ch == 0x10A51 /* KHAROSHTHI PUNCTUATION SMALL CIRCLE */ || ch == 0x10A52 /* KHAROSHTHI PUNCTUATION CIRCLE */ || ch == 0x10A53 /* KHAROSHTHI PUNCTUATION CRESCENT BAR */ || ch == 0x10A54 /* KHAROSHTHI PUNCTUATION MANGALAM */ || ch == 0x10A55 /* KHAROSHTHI PUNCTUATION LOTUS */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x2D70 /* TIFINAGH SEPARATOR MARK */ || ch == 0xA4FE /* LISU PUNCTUATION COMMA */ || ch == 0xA4FF /* LISU PUNCTUATION FULL STOP */ || ch == 0xA6F3 /* BAMUM FULL STOP */ || ch == 0xA6F4 /* BAMUM COLON */ || ch == 0xA6F5 /* BAMUM COMMA */ || ch == 0xA6F6 /* BAMUM SEMICOLON */ || ch == 0xA6F7 /* BAMUM QUESTION MARK */ || ch == 0xA9C7 /* JAVANESE PADA PANGKAT */ || ch == 0xA9C8 /* JAVANESE PADA LINGSA */ || ch == 0xA9C9 /* JAVANESE PADA LUNGSI */ || ch == 0xAAF0 /* MEETEI MAYEK CHEIKHAN */ || ch == 0xAAF1 /* MEETEI MAYEK AHANG KHUDAM */ || ch == 0xABEB /* MEETEI MAYEK CHEIKHEI */ || ch == 0x10857 /* IMPERIAL ARAMAIC SECTION SIGN */ || (ch >= 0x10AF0 && ch <= 0x10AF5) /* MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS */ || ch == 0x10B39 /* AVESTAN ABBREVIATION MARK */ || ch == 0x10B3A /* TINY TWO DOTS OVER ONE DOT PUNCTUATION */ || ch == 0x10B3B /* SMALL TWO DOTS OVER ONE DOT PUNCTUATION */ || ch == 0x10B3C /* LARGE TWO DOTS OVER ONE DOT PUNCTUATION */ || ch == 0x10B3D /* LARGE ONE DOT OVER TWO DOTS PUNCTUATION */ || ch == 0x10B3E /* LARGE TWO RINGS OVER ONE RING PUNCTUATION */ || ch == 0x10B3F /* LARGE ONE RING OVER TWO RINGS PUNCTUATION */ || ch == 0x11047 /* BRAHMI DANDA */ || ch == 0x11048 /* BRAHMI DOUBLE DANDA */ || ch == 0x110BE /* KAITHI SECTION MARK */ || ch == 0x110BF /* KAITHI DOUBLE SECTION MARK */ || ch == 0x110C0 /* KAITHI DANDA */ || ch == 0x110C1 /* KAITHI DOUBLE DANDA */ || ch == 0x11140 /* CHAKMA SECTION MARK */ || ch == 0x11141 /* CHAKMA DANDA */ || ch == 0x11142 /* CHAKMA DOUBLE DANDA */ || ch == 0x11143 /* CHAKMA QUESTION MARK */ || ch == 0x111C5 /* SHARADA DANDA */ || ch == 0x111C6 /* SHARADA DOUBLE DANDA */ || ch == 0x111C8 /* SHARADA SEPARATOR */ || (ch >= 0x111DD && ch <= 0x111DF) /* SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 */ || ch == 0x11238 /* KHOJKI DANDA */ || ch == 0x11239 /* KHOJKI DOUBLE DANDA */ || ch == 0x1123B /* KHOJKI SECTION MARK */ || ch == 0x1123C /* KHOJKI DOUBLE SECTION MARK */ || ch == 0x112A9 /* MULTANI SECTION MARK */ || (ch >= 0x1144B && ch <= 0x1144E) /* NEWA DANDA..NEWA GAP FILLER */ || ch == 0x1145B /* NEWA PLACEHOLDER MARK */ || ch == 0x115C2 /* SIDDHAM DANDA */ || ch == 0x115C3 /* SIDDHAM DOUBLE DANDA */ || (ch >= 0x115C9 && ch <= 0x115D7) /* SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES */ || ch == 0x11641 /* MODI DANDA */ || ch == 0x11642 /* MODI DOUBLE DANDA */ || (ch >= 0x1173C && ch <= 0x1173E) /* AHOM SIGN SMALL SECTION..AHOM SIGN RULAI */ || (ch >= 0x11C41 && ch <= 0x11C45) /* BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 */ || ch == 0x12471 /* CUNEIFORM PUNCTUATION SIGN VERTICAL COLON */ || ch == 0x12472 /* CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON */ || ch == 0x12473 /* CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON */ || ch == 0x12474 /* CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON */ || ch == 0x16A6E /* MRO DANDA */ || ch == 0x16A6F /* MRO DOUBLE DANDA */ || ch == 0x16AF5 /* BASSA VAH FULL STOP */ || ch == 0x16B37 /* PAHAWH HMONG SIGN VOS THOM */ || ch == 0x16B38 /* PAHAWH HMONG SIGN VOS TSHAB CEEB */ || ch == 0x16B39 /* PAHAWH HMONG SIGN CIM CHEEM */ || ch == 0x16B44 /* PAHAWH HMONG SIGN XAUS */ || ch == 0x1BC9F /* DUPLOYAN PUNCTUATION CHINOOK FULL STOP */ || (ch >= 0x1DA87 && ch <= 0x1DA8A) /* SIGNWRITING COMMA..SIGNWRITING COLON */) attr |= (int64_t) 1 << LBP_BA; /* break opportunity before */ if (ch == 0x00B4 /* ACUTE ACCENT */ || ch == 0x1FFD /* GREEK OXIA */ || ch == 0x02DF /* MODIFIER LETTER CROSS ACCENT */ || ch == 0x02C8 /* MODIFIER LETTER VERTICAL LINE */ || ch == 0x02CC /* MODIFIER LETTER LOW VERTICAL LINE */ || ch == 0x0F01 /* TIBETAN MARK GTER YIG MGO TRUNCATED A */ || ch == 0x0F02 /* TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA */ || ch == 0x0F03 /* TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA */ || ch == 0x0F04 /* TIBETAN MARK INITIAL YIG MGO MDUN MA */ || ch == 0x0F06 /* TIBETAN MARK CARET YIG MGO PHUR SHAD MA */ || ch == 0x0F07 /* TIBETAN MARK YIG MGO TSHEG SHAD MA */ || ch == 0x0F09 /* TIBETAN MARK BSKUR YIG MGO */ || ch == 0x0F0A /* TIBETAN MARK BKA- SHOG YIG MGO */ || ch == 0x0FD0 /* TIBETAN MARK BSKA- SHOG GI MGO RGYAN */ || ch == 0x0FD1 /* TIBETAN MARK MNYAM YIG GI MGO RGYAN */ || ch == 0x0FD3 /* TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA */ || ch == 0xA874 /* PHAGS-PA SINGLE HEAD MARK */ || ch == 0xA875 /* PHAGS-PA DOUBLE HEAD MARK */ || ch == 0xA8FC /* DEVANAGARI SIGN SIDDHAM */ || ch == 0x1806 /* MONGOLIAN TODO SOFT HYPHEN */ || ch == 0x11175 /* MAHAJANI SECTION MARK */ || ch == 0x111DB /* SHARADA SIGN SIDDHAM */ || ch == 0x115C1 /* SIDDHAM SIGN SIDDHAM */ || (ch >= 0x11660 && ch <= 0x1166C) /* MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT */ || ch == 0x11C70 /* MARCHEN HEAD MARK */) attr |= (int64_t) 1 << LBP_BB; /* hyphen */ if (ch == 0x002D /* HYPHEN-MINUS */) attr |= (int64_t) 1 << LBP_HY; /* contingent break opportunity */ if (ch == 0xFFFC /* OBJECT REPLACEMENT CHARACTER */) attr |= (int64_t) 1 << LBP_CB; /* closing parenthesis */ if (ch == 0x0029 /* RIGHT PARENTHESIS */ || ch == 0x005D /* RIGHT SQUARE BRACKET */) attr |= (int64_t) 1 << LBP_CP; /* closing punctuation */ if ((unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 'e' && !(attr & ((int64_t) 1 << LBP_CP))) || ch == 0x3001 /* IDEOGRAPHIC COMMA */ || ch == 0x3002 /* IDEOGRAPHIC FULL STOP */ || ch == 0xFE11 /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA */ || ch == 0xFE12 /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP */ || ch == 0xFE50 /* SMALL COMMA */ || ch == 0xFE52 /* SMALL FULL STOP */ || ch == 0xFF0C /* FULLWIDTH COMMA */ || ch == 0xFF0E /* FULLWIDTH FULL STOP */ || ch == 0xFF61 /* HALFWIDTH IDEOGRAPHIC FULL STOP */ || ch == 0xFF64 /* HALFWIDTH IDEOGRAPHIC COMMA */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x1325B /* EGYPTIAN HIEROGLYPH O006D */ || ch == 0x1325C /* EGYPTIAN HIEROGLYPH O006E */ || ch == 0x1325D /* EGYPTIAN HIEROGLYPH O006F */ || ch == 0x13282 /* EGYPTIAN HIEROGLYPH O033A */ || ch == 0x13287 /* EGYPTIAN HIEROGLYPH O036B */ || ch == 0x13289 /* EGYPTIAN HIEROGLYPH O036D */ || ch == 0x1337A /* EGYPTIAN HIEROGLYPH V011B */ || ch == 0x1337B /* EGYPTIAN HIEROGLYPH V011C */ || ch == 0x145CF /* ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK */) attr |= (int64_t) 1 << LBP_CL; /* exclamation/interrogation */ if (ch == 0x0021 /* EXCLAMATION MARK */ || ch == 0x003F /* QUESTION MARK */ || ch == 0x05C6 /* HEBREW PUNCTUATION NUN HAFUKHA */ || ch == 0x061B /* ARABIC SEMICOLON */ || ch == 0x061E /* ARABIC TRIPLE DOT PUNCTUATION MARK */ || ch == 0x061F /* ARABIC QUESTION MARK */ || ch == 0x06D4 /* ARABIC FULL STOP */ || ch == 0x07F9 /* NKO EXCLAMATION MARK */ || ch == 0x0F0D /* TIBETAN MARK SHAD */ || ch == 0x0F0E /* TIBETAN MARK NYIS SHAD */ || ch == 0x0F0F /* TIBETAN MARK TSHEG SHAD */ || ch == 0x0F10 /* TIBETAN MARK NYIS TSHEG SHAD */ || ch == 0x0F11 /* TIBETAN MARK RIN CHEN SPUNGS SHAD */ || ch == 0x0F14 /* TIBETAN MARK GTER TSHEG */ || ch == 0x1802 /* MONGOLIAN COMMA */ || ch == 0x1803 /* MONGOLIAN FULL STOP */ || ch == 0x1808 /* MONGOLIAN MANCHU COMMA */ || ch == 0x1809 /* MONGOLIAN MANCHU FULL STOP */ || ch == 0x1944 /* LIMBU EXCLAMATION MARK */ || ch == 0x1945 /* LIMBU QUESTION MARK */ || ch == 0x2762 /* HEAVY EXCLAMATION MARK ORNAMENT */ || ch == 0x2763 /* HEAVY HEART EXCLAMATION MARK ORNAMENT */ || ch == 0x2CF9 /* COPTIC OLD NUBIAN FULL STOP */ || ch == 0x2CFE /* COPTIC FULL STOP */ || ch == 0x2E2E /* REVERSED QUESTION MARK */ || ch == 0xA60E /* VAI FULL STOP */ || ch == 0xA876 /* PHAGS-PA MARK SHAD */ || ch == 0xA877 /* PHAGS-PA MARK DOUBLE SHAD */ || ch == 0xFE15 /* PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */ || ch == 0xFE16 /* PRESENTATION FORM FOR VERTICAL QUESTION MARK */ || ch == 0xFE56 /* SMALL QUESTION MARK */ || ch == 0xFE57 /* SMALL EXCLAMATION MARK */ || ch == 0xFF01 /* FULLWIDTH EXCLAMATION MARK */ || ch == 0xFF1F /* FULLWIDTH QUESTION MARK */ || ch == 0x115C4 /* SIDDHAM SEPARATOR DOT */ || ch == 0x115C5 /* SIDDHAM SEPARATOR BAR */ || ch == 0x11C71 /* MARCHEN MARK SHAD */) attr |= (int64_t) 1 << LBP_EX; /* inseparable */ if (ch == 0x2024 /* ONE DOT LEADER */ || ch == 0x2025 /* TWO DOT LEADER */ || ch == 0x2026 /* HORIZONTAL ELLIPSIS */ || ch == 0x22EF /* MIDLINE HORIZONTAL ELLIPSIS */ || ch == 0xFE19 /* PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */ || ch == 0x10AF6 /* MANICHAEAN PUNCTUATION LINE FILLER */) attr |= (int64_t) 1 << LBP_IN; /* non starter */ if (ch == 0x17D6 /* KHMER SIGN CAMNUC PII KUUH */ || ch == 0x203C /* DOUBLE EXCLAMATION MARK */ || ch == 0x203D /* INTERROBANG */ || ch == 0x2047 /* DOUBLE QUESTION MARK */ || ch == 0x2048 /* QUESTION EXCLAMATION MARK */ || ch == 0x2049 /* EXCLAMATION QUESTION MARK */ || ch == 0x3005 /* IDEOGRAPHIC ITERATION MARK */ || ch == 0x301C /* WAVE DASH */ || ch == 0x303C /* MASU MARK */ || ch == 0x303B /* VERTICAL IDEOGRAPHIC ITERATION MARK */ || ch == 0x309B /* KATAKANA-HIRAGANA VOICED SOUND MARK */ || ch == 0x309C /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ || ch == 0x309D /* HIRAGANA ITERATION MARK */ || ch == 0x309E /* HIRAGANA VOICED ITERATION MARK */ || ch == 0x30A0 /* KATAKANA-HIRAGANA DOUBLE HYPHEN */ || ch == 0x30FB /* KATAKANA MIDDLE DOT */ || ch == 0x30FC /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */ || ch == 0x30FD /* KATAKANA ITERATION MARK */ || ch == 0x30FE /* KATAKANA VOICED ITERATION MARK */ || ch == 0xA015 /* YI SYLLABLE WU */ || ch == 0xFE54 /* SMALL SEMICOLON */ || ch == 0xFE55 /* SMALL COLON */ || ch == 0xFF1A /* FULLWIDTH COLON */ || ch == 0xFF1B /* FULLWIDTH SEMICOLON */ || ch == 0xFF65 /* HALFWIDTH KATAKANA MIDDLE DOT */ || ch == 0xFF70 /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */ || ch == 0xFF9E /* HALFWIDTH KATAKANA VOICED SOUND MARK */ || ch == 0xFF9F /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */ || ch == 0x16FE0 /* TANGUT ITERATION MARK */ || ch == 0x1F679 /* HEAVY INTERROBANG ORNAMENT */ || ch == 0x1F67A /* SANS-SERIF INTERROBANG ORNAMENT */ || ch == 0x1F67B /* HEAVY SANS-SERIF INTERROBANG ORNAMENT */ || strstr (unicode_attributes[ch].name, "HIRAGANA LETTER SMALL ") != NULL || strstr (unicode_attributes[ch].name, "KATAKANA LETTER SMALL ") != NULL) attr |= (int64_t) 1 << LBP_NS; /* opening punctuation */ if ((unicode_attributes[ch].category[0] == 'P' && unicode_attributes[ch].category[1] == 's') || ch == 0x00A1 /* INVERTED EXCLAMATION MARK */ || ch == 0x00BF /* INVERTED QUESTION MARK */ || ch == 0x2E18 /* INVERTED INTERROBANG */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x13258 /* EGYPTIAN HIEROGLYPH O006A */ || ch == 0x13259 /* EGYPTIAN HIEROGLYPH O006B */ || ch == 0x1325A /* EGYPTIAN HIEROGLYPH O006C */ || ch == 0x13286 /* EGYPTIAN HIEROGLYPH O036A */ || ch == 0x13288 /* EGYPTIAN HIEROGLYPH O036C */ || ch == 0x13379 /* EGYPTIAN HIEROGLYPH V011A */ || ch == 0x145CE /* ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK */ || (ch >= 0x1E95E && ch <= 0x1E95F) /* ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK */) attr |= (int64_t) 1 << LBP_OP; /* ambiguous quotation */ if ((unicode_attributes[ch].category[0] == 'P' && (unicode_attributes[ch].category[1] == 'f' || unicode_attributes[ch].category[1] == 'i')) || ch == 0x0022 /* QUOTATION MARK */ || ch == 0x0027 /* APOSTROPHE */ || ch == 0x275B /* HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT */ || ch == 0x275C /* HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT */ || ch == 0x275D /* HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */ || ch == 0x275E /* HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */ || ch == 0x275F /* HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT */ || ch == 0x2760 /* HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT */ || ch == 0x2E00 /* RIGHT ANGLE SUBSTITUTION MARKER */ || ch == 0x2E01 /* RIGHT ANGLE DOTTED SUBSTITUTION MARKER */ || ch == 0x2E06 /* RAISED INTERPOLATION MARKER */ || ch == 0x2E07 /* RAISED DOTTED INTERPOLATION MARKER */ || ch == 0x2E08 /* DOTTED TRANSPOSITION MARKER */ || ch == 0x2E0B /* RAISED SQUARE */ || ch == 0x1F676 /* SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */ || ch == 0x1F677 /* SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */ || ch == 0x1F678 /* SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT */) attr |= (int64_t) 1 << LBP_QU; /* infix separator (numeric) */ if (ch == 0x002C /* COMMA */ || ch == 0x002E /* FULL STOP */ || ch == 0x003A /* COLON */ || ch == 0x003B /* SEMICOLON */ || ch == 0x037E /* GREEK QUESTION MARK */ || ch == 0x0589 /* ARMENIAN FULL STOP */ || ch == 0x060C /* ARABIC COMMA */ || ch == 0x060D /* ARABIC DATE SEPARATOR */ || ch == 0x07F8 /* NKO COMMA */ || ch == 0x2044 /* FRACTION SLASH */ || ch == 0xFE10 /* PRESENTATION FORM FOR VERTICAL COMMA */ || ch == 0xFE13 /* PRESENTATION FORM FOR VERTICAL COLON */ || ch == 0xFE14 /* PRESENTATION FORM FOR VERTICAL SEMICOLON */) attr |= (int64_t) 1 << LBP_IS; /* numeric */ if ((unicode_attributes[ch].category[0] == 'N' && unicode_attributes[ch].category[1] == 'd' && strstr (unicode_attributes[ch].name, "FULLWIDTH") == NULL) || ch == 0x066B /* ARABIC DECIMAL SEPARATOR */ || ch == 0x066C /* ARABIC THOUSANDS SEPARATOR */) attr |= (int64_t) 1 << LBP_NU; /* postfix (numeric) */ if (ch == 0x0025 /* PERCENT SIGN */ || ch == 0x00A2 /* CENT SIGN */ || ch == 0x00B0 /* DEGREE SIGN */ || ch == 0x060B /* AFGHANI SIGN */ || ch == 0x066A /* ARABIC PERCENT SIGN */ || ch == 0x2030 /* PER MILLE SIGN */ || ch == 0x2031 /* PER TEN THOUSAND SIGN */ || ch == 0x2032 /* PRIME */ || ch == 0x2033 /* DOUBLE PRIME */ || ch == 0x2034 /* TRIPLE PRIME */ || ch == 0x2035 /* REVERSED PRIME */ || ch == 0x2036 /* REVERSED DOUBLE PRIME */ || ch == 0x2037 /* REVERSED TRIPLE PRIME */ || ch == 0x20A7 /* PESETA SIGN */ || ch == 0x20BB /* NORDIC MARK SIGN */ || ch == 0x2103 /* DEGREE CELSIUS */ || ch == 0x2109 /* DEGREE FAHRENHEIT */ || ch == 0xFDFC /* RIAL SIGN */ || ch == 0xFE6A /* SMALL PERCENT SIGN */ || ch == 0xFF05 /* FULLWIDTH PERCENT SIGN */ || ch == 0xFFE0 /* FULLWIDTH DIGIT ZERO */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x0609 /* ARABIC-INDIC PER MILLE SIGN */ || ch == 0x060A /* ARABIC-INDIC PER TEN THOUSAND SIGN */ || ch == 0x09F2 /* BENGALI RUPEE MARK */ || ch == 0x09F3 /* BENGALI RUPEE SIGN */ || ch == 0x09F9 /* BENGALI CURRENCY DENOMINATOR SIXTEEN */ || ch == 0x0D79 /* MALAYALAM DATE MARK */ || ch == 0x20B6 /* LIVRE TOURNOIS SIGN */ || ch == 0x20BE /* LARI SIGN */ || ch == 0xA838 /* NORTH INDIC RUPEE MARK */) attr |= (int64_t) 1 << LBP_PO; /* prefix (numeric) */ if ((unicode_attributes[ch].category[0] == 'S' && unicode_attributes[ch].category[1] == 'c') || ch == 0x002B /* PLUS SIGN */ || ch == 0x005C /* REVERSE SOLIDUS */ || ch == 0x00B1 /* PLUS-MINUS SIGN */ || ch == 0x2116 /* NUMERO SIGN */ || ch == 0x2212 /* MINUS SIGN */ || ch == 0x2213 /* MINUS-OR-PLUS SIGN */) if (!(attr & ((int64_t) 1 << LBP_PO))) attr |= (int64_t) 1 << LBP_PR; /* symbols allowing breaks */ if (ch == 0x002F /* SOLIDUS */) attr |= (int64_t) 1 << LBP_SY; if (ch >= 0xAC00 && ch <= 0xD7A3 && ((ch - 0xAC00) % 28) == 0) attr |= (int64_t) 1 << LBP_H2; if (ch >= 0xAC00 && ch <= 0xD7A3 && ((ch - 0xAC00) % 28) != 0) attr |= (int64_t) 1 << LBP_H3; if ((ch >= 0x05D0 && ch <= 0x05F2) || ch == 0xFB1D || (ch >= 0xFB1F && ch <= 0xFB28) || (ch >= 0xFB2A && ch <= 0xFB4F)) attr |= (int64_t) 1 << LBP_HL; if ((ch >= 0x1100 && ch <= 0x115F) || (ch >= 0xA960 && ch <= 0xA97C)) attr |= (int64_t) 1 << LBP_JL; if ((ch >= 0x1160 && ch <= 0x11A7) || (ch >= 0xD7B0 && ch <= 0xD7C6)) attr |= (int64_t) 1 << LBP_JV; if ((ch >= 0x11A8 && ch <= 0x11FF) || (ch >= 0xD7CB && ch <= 0xD7FB)) attr |= (int64_t) 1 << LBP_JT; /* regional indicator */ if (ch >= 0x1F1E6 && ch <= 0x1F1FF) attr |= (int64_t) 1 << LBP_RI; /* complex context (South East Asian) */ if (((unicode_attributes[ch].category[0] == 'C' && unicode_attributes[ch].category[1] == 'f') || (unicode_attributes[ch].category[0] == 'L' && (unicode_attributes[ch].category[1] == 'm' || unicode_attributes[ch].category[1] == 'o')) || (unicode_attributes[ch].category[0] == 'M' && (unicode_attributes[ch].category[1] == 'c' || unicode_attributes[ch].category[1] == 'n') && ch != 0x1A7F /* TAI THAM COMBINING CRYPTOGRAMMIC DOT */) /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x109E /* MYANMAR SYMBOL SHAN ONE */ || ch == 0x109F /* MYANMAR SYMBOL SHAN EXCLAMATION */ || ch == 0x19DA /* NEW TAI LUE THAM DIGIT ONE */ || ch == 0x19DE /* NEW TAI LUE SIGN LAE */ || ch == 0x19DF /* NEW TAI LUE SIGN LAEV */ || (ch >= 0x1AA0 && ch <= 0x1AAD) /* TAI THAM SIGN */ || (ch >= 0xA9E0 && ch <= 0xA9EF) /* Myanmar */ || (ch >= 0xA9FA && ch <= 0xA9FE) /* Myanmar */ || (ch >= 0xAA77 && ch <= 0xAA79) /* MYANMAR SYMBOL AITON */ || (ch >= 0xAADE && ch <= 0xAADF) /* TAI VIET SYMBOL */ || (ch >= 0x1173A && ch <= 0x1173B) /* Ahom */ || ch == 0x1173F /* Ahom */) && ((ch >= 0x0E00 && ch <= 0x0EFF) /* Thai, Lao */ || (ch >= 0x1000 && ch <= 0x109F) /* Myanmar */ || (ch >= 0x1780 && ch <= 0x17FF) /* Khmer */ || (ch >= 0x1950 && ch <= 0x19DF) /* Tai Le, New Tai Lue */ || (ch >= 0x1A20 && ch <= 0x1AAF) /* Tai Tham */ || (ch >= 0xA9E0 && ch <= 0xA9EF) /* Myanmar */ || (ch >= 0xA9FA && ch <= 0xA9FE) /* Myanmar */ || (ch >= 0xAA60 && ch <= 0xAADF) /* Myanmar Extended-A, Tai Viet */ || (ch >= 0x11700 && ch <= 0x11719) /* Ahom */ || (ch >= 0x1171D && ch <= 0x1172B) /* Ahom */ || (ch >= 0x1173A && ch <= 0x1173B) /* Ahom */ || ch == 0x1173F /* Ahom */)) attr |= (int64_t) 1 << LBP_SA; /* attached characters and combining marks */ if ((unicode_attributes[ch].category[0] == 'M' && (unicode_attributes[ch].category[1] == 'c' || unicode_attributes[ch].category[1] == 'e' || unicode_attributes[ch].category[1] == 'n')) || (unicode_attributes[ch].category[0] == 'C' && (unicode_attributes[ch].category[1] == 'c' || unicode_attributes[ch].category[1] == 'f') && ch != 0x110BD /* KAITHI NUMBER SIGN */ && ch != 0x08E2 /* ARABIC DISPUTED END OF AYAH */) || ch == 0x3035 /* VERTICAL KANA REPEAT MARK LOWER HALF */) if (!(attr & (((int64_t) 1 << LBP_BK) | ((int64_t) 1 << LBP_BA) | ((int64_t) 1 << LBP_GL) | ((int64_t) 1 << LBP_SA) | ((int64_t) 1 << LBP_WJ) | ((int64_t) 1 << LBP_ZW) | ((int64_t) 1 << LBP_ZWJ)))) attr |= (int64_t) 1 << LBP_CM; /* ideographic */ if (ch == 0x231A /* WATCH */ || ch == 0x231B /* HOURGLASS */ || ch == 0x23F0 /* ALARM CLOCK */ || ch == 0x23F1 /* STOPWATCH */ || ch == 0x23F2 /* TIMER CLOCK */ || ch == 0x23F3 /* HOURGLASS WITH FLOWING SAND */ || ch == 0x2600 /* BLACK SUN WITH RAYS */ || ch == 0x2601 /* CLOUD */ || ch == 0x2602 /* UMBRELLA */ || ch == 0x2603 /* SNOWMAN */ || ch == 0x2614 /* UMBRELLA WITH RAIN DROPS */ || ch == 0x2615 /* HOT BEVERAGE */ || ch == 0x2618 /* SHAMROCK */ || ch == 0x261A /* BLACK LEFT POINTING INDEX */ || ch == 0x261B /* BLACK RIGHT POINTING INDEX */ || ch == 0x261C /* WHITE LEFT POINTING INDEX */ || ch == 0x261D /* WHITE UP POINTING INDEX */ || ch == 0x261E /* WHITE RIGHT POINTING INDEX */ || ch == 0x261F /* WHITE DOWN POINTING INDEX */ || ch == 0x2639 /* WHITE FROWNING FACE */ || ch == 0x263A /* WHITE SMILING FACE */ || ch == 0x263B /* BLACK SMILING FACE */ || ch == 0x2668 /* HOT SPRINGS */ || ch == 0x267F /* WHEELCHAIR SYMBOL */ || ch == 0x26BD /* SOCCER BALL */ || ch == 0x26BE /* BASEBALL */ || ch == 0x26BF /* SQUARED KEY */ || ch == 0x26C0 /* WHITE DRAUGHTS MAN */ || ch == 0x26C1 /* WHITE DRAUGHTS KING */ || ch == 0x26C2 /* BLACK DRAUGHTS MAN */ || ch == 0x26C3 /* BLACK DRAUGHTS KING */ || ch == 0x26C4 /* SNOWMAN WITHOUT SNOW */ || ch == 0x26C5 /* SUN BEHIND CLOUD */ || ch == 0x26C6 /* RAIN */ || ch == 0x26C7 /* BLACK SNOWMAN */ || ch == 0x26C8 /* THUNDER CLOUD AND RAIN */ || ch == 0x26CD /* DISABLED CAR */ || ch == 0x26CF /* PICK */ || ch == 0x26D0 /* CAR SLIDING */ || ch == 0x26D1 /* HELMET WITH WHITE CROSS */ || ch == 0x26D3 /* CHAINS */ || ch == 0x26D4 /* NO ENTRY */ || ch == 0x26D8 /* BLACK LEFT LANE MERGE */ || ch == 0x26D9 /* WHITE LEFT LANE MERGE */ || ch == 0x26DC /* LEFT CLOSED ENTRY */ || ch == 0x26DF /* BLACK TRUCK */ || ch == 0x26E0 /* RESTRICTED LEFT ENTRY-1 */ || ch == 0x26E1 /* RESTRICTED LEFT ENTRY-2 */ || ch == 0x26EA /* CHURCH */ || ch == 0x26F1 /* UMBRELLA ON GROUND */ || ch == 0x26F2 /* FOUNTAIN */ || ch == 0x26F3 /* FLAG IN HOLE */ || ch == 0x26F4 /* FERRY */ || ch == 0x26F5 /* SAILBOAT */ || ch == 0x26F7 /* SKIER */ || ch == 0x26F8 /* ICE SKATE */ || ch == 0x26F9 /* PERSON WITH BALL */ || ch == 0x26FA /* TENT */ || ch == 0x26FD /* FUEL PUMP */ || ch == 0x26FE /* CUP ON BLACK SQUARE */ || ch == 0x26FF /* WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE */ || ch == 0x2700 /* BLACK SAFETY SCISSORS */ || ch == 0x2701 /* UPPER BLADE SCISSORS */ || ch == 0x2702 /* BLACK SCISSORS */ || ch == 0x2703 /* LOWER BLADE SCISSORS */ || ch == 0x2704 /* WHITE SCISSORS */ || ch == 0x2708 /* AIRPLANE */ || ch == 0x2709 /* ENVELOPE */ || ch == 0x270A /* RAISED FIST */ || ch == 0x270B /* RAISED HAND */ || ch == 0x270C /* VICTORY HAND */ || ch == 0x270D /* WRITING HAND */ || ch == 0x2764 /* HEAVY BLACK HEART */ || (ch >= 0x2E80 && ch <= 0x2FFF) /* CJK RADICAL, KANGXI RADICAL, IDEOGRAPHIC DESCRIPTION */ || (ch >= 0x3040 && ch <= 0x309F) /* HIRAGANA */ || (ch >= 0x30A0 && ch <= 0x30FF) /* KATAKANA */ || (ch >= 0x3400 && ch <= 0x4DBF) /* CJK Ideograph Extension A */ || (ch >= 0x4E00 && ch <= 0x9FFF) /* CJK Ideograph */ || (ch >= 0xF900 && ch <= 0xFAD9) /* CJK COMPATIBILITY IDEOGRAPH */ || (ch >= 0xA000 && ch <= 0xA48F) /* YI SYLLABLE */ || (ch >= 0xA490 && ch <= 0xA4CF) /* YI RADICAL */ || ch == 0xFE62 /* SMALL PLUS SIGN */ || ch == 0xFE63 /* SMALL HYPHEN-MINUS */ || ch == 0xFE64 /* SMALL LESS-THAN SIGN */ || ch == 0xFE65 /* SMALL GREATER-THAN SIGN */ || ch == 0xFE66 /* SMALL EQUALS SIGN */ || (ch >= 0xFF10 && ch <= 0xFF19) /* FULLWIDTH DIGIT */ || (ch >= 0x20000 && ch <= 0x2A6D6) /* CJK Ideograph Extension B */ || (ch >= 0x2F800 && ch <= 0x2FA1D) /* CJK COMPATIBILITY IDEOGRAPH */ || strstr (unicode_attributes[ch].name, "FULLWIDTH LATIN ") != NULL || (ch >= 0x3000 && ch <= 0x33FF && !(attr & (((int64_t) 1 << LBP_BA) | ((int64_t) 1 << LBP_CM) | ((int64_t) 1 << LBP_NS) | ((int64_t) 1 << LBP_OP) | ((int64_t) 1 << LBP_CL) | ((int64_t) 1 << LBP_CP)))) /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0xFE30 /* PRESENTATION FORM FOR VERTICAL TWO DOT LEADER */ || ch == 0xFE31 /* PRESENTATION FORM FOR VERTICAL EM DASH */ || ch == 0xFE32 /* PRESENTATION FORM FOR VERTICAL EN DASH */ || ch == 0xFE33 /* PRESENTATION FORM FOR VERTICAL LOW LINE */ || ch == 0xFE34 /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */ || ch == 0xFE45 /* SESAME DOT */ || ch == 0xFE46 /* WHITE SESAME DOT */ || ch == 0xFE49 /* DASHED OVERLINE */ || ch == 0xFE4A /* CENTRELINE OVERLINE */ || ch == 0xFE4B /* WAVY OVERLINE */ || ch == 0xFE4C /* DOUBLE WAVY OVERLINE */ || ch == 0xFE4D /* DASHED LOW LINE */ || ch == 0xFE4E /* CENTRELINE LOW LINE */ || ch == 0xFE4F /* WAVY LOW LINE */ || ch == 0xFE51 /* SMALL IDEOGRAPHIC COMMA */ || ch == 0xFE58 /* SMALL EM DASH */ || ch == 0xFE5F /* SMALL NUMBER SIGN */ || ch == 0xFE60 /* SMALL AMPERSAND */ || ch == 0xFE61 /* SMALL ASTERISK */ || ch == 0xFE68 /* SMALL REVERSE SOLIDUS */ || ch == 0xFE6B /* SMALL COMMERCIAL AT */ || ch == 0xFF02 /* FULLWIDTH QUOTATION MARK */ || ch == 0xFF03 /* FULLWIDTH NUMBER SIGN */ || ch == 0xFF06 /* FULLWIDTH AMPERSAND */ || ch == 0xFF07 /* FULLWIDTH APOSTROPHE */ || ch == 0xFF0A /* FULLWIDTH ASTERISK */ || ch == 0xFF0B /* FULLWIDTH PLUS SIGN */ || ch == 0xFF0D /* FULLWIDTH HYPHEN-MINUS */ || ch == 0xFF0F /* FULLWIDTH SOLIDUS */ || ch == 0xFF1C /* FULLWIDTH LESS-THAN SIGN */ || ch == 0xFF1D /* FULLWIDTH EQUALS SIGN */ || ch == 0xFF1E /* FULLWIDTH GREATER-THAN SIGN */ || ch == 0xFF20 /* FULLWIDTH COMMERCIAL AT */ || ch == 0xFF3C /* FULLWIDTH REVERSE SOLIDUS */ || ch == 0xFF3E /* FULLWIDTH CIRCUMFLEX ACCENT */ || ch == 0xFF3F /* FULLWIDTH LOW LINE */ || ch == 0xFF40 /* FULLWIDTH GRAVE ACCENT */ || ch == 0xFF5C /* FULLWIDTH VERTICAL LINE */ || ch == 0xFF5E /* FULLWIDTH TILDE */ || ch == 0xFFE2 /* FULLWIDTH NOT SIGN */ || ch == 0xFFE3 /* FULLWIDTH MACRON */ || ch == 0xFFE4 /* FULLWIDTH BROKEN BAR */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0xFF66 /* Halfwidth Katakana */ || (ch >= 0xFF71 && ch <= 0xFF9D) /* Halfwidth Katakana */ || (ch >= 0xFFA0 && ch <= 0xFFBE) /* Halfwidth Hangul */ || (ch >= 0xFFC2 && ch <= 0xFFC7) /* Halfwidth Hangul */ || (ch >= 0xFFCA && ch <= 0xFFCF) /* Halfwidth Hangul */ || (ch >= 0xFFD2 && ch <= 0xFFD7) /* Halfwidth Hangul */ || (ch >= 0xFFDA && ch <= 0xFFDC) /* Halfwidth Hangul */ || (ch >= 0x17000 && ch <= 0x187EC) /* Tangut Ideograph */ || (ch >= 0x18800 && ch <= 0x18AF2) /* Tangut Ideograph */ || (ch >= 0x1B000 && ch <= 0x1B001) /* Kana Supplement */ || (ch >= 0x1F000 && ch <= 0x1F02B) /* Mahjong Tiles */ || (ch >= 0x1F030 && ch <= 0x1F093) /* Domino Tiles */ || (ch >= 0x1F0A0 && ch <= 0x1F0F5) /* Playing Cards */ || (ch >= 0x1F200 && ch <= 0x1F248) /* Enclosed Ideographic Supplement */ || (ch >= 0x1F250 && ch <= 0x1F251) /* Enclosed Ideographic Supplement */ || (ch >= 0x1F300 && ch <= 0x1F5FF /* Miscellaneous Symbols and Pictographs */ && ch != 0x1F3B5 && ch != 0x1F3B6 && ch != 0x1F3BC && ch != 0x1F4A0 && ch != 0x1F4A2 && ch != 0x1F4A4 && ch != 0x1F4AF && ch != 0x1F4B1 && ch != 0x1F4B2 && !(ch >= 0x1F39C && ch <= 0x1F39D) && !(ch >= 0x1F3FB && ch <= 0x1F3FF) && !(ch >= 0x1F500 && ch <= 0x1F506) && !(ch >= 0x1F517 && ch <= 0x1F524) && !(ch >= 0x1F532 && ch <= 0x1F549) && !(ch >= 0x1F5D4 && ch <= 0x1F5DB) && !(ch >= 0x1F5F4 && ch <= 0x1F5F9)) || (ch >= 0x1F600 && ch <= 0x1F64F) /* Emoticons */ || (ch >= 0x1F680 && ch <= 0x1F6DF) /* Transport and Map Symbols */ || (ch >= 0x1F6E0 && ch <= 0x1F6EC) /* Transport and Map Symbols */ || (ch >= 0x1F6F0 && ch <= 0x1F6F6) /* Transport and Map Symbols */ || (ch >= 0x1F900 && ch <= 0x1F9FF) /* Supplemental Symbols and Pictographs */ || (ch >= 0x2A700 && ch <= 0x2B734) /* CJK Ideograph Extension C */ || (ch >= 0x2B740 && ch <= 0x2B81D) /* CJK Ideograph Extension D */ || (ch >= 0x2B820 && ch <= 0x2CEAF) /* CJK Ideograph Extension E */) if (!(attr & (((int64_t) 1 << LBP_NS) | ((int64_t) 1 << LBP_CM) | ((int64_t) 1 << LBP_EB)))) { /* ambiguous (ideograph) ? */ if ((unicode_width[ch] != NULL && unicode_width[ch][0] == 'A' && ch >= 0x2000 && ch != 0x2614 && ch != 0x2615 && ch != 0x261C && ch != 0x261E && ch != 0x2668 && ch != 0x26BE && ch != 0x26BF && !(ch >= 0x26C4 && ch <= 0x26C8) && ch != 0x26CD && ch != 0x26CF && ch != 0x26D0 && ch != 0x26D1 && ch != 0x26D3 && ch != 0x26D4 && ch != 0x26D8 && ch != 0x26D9 && ch != 0x26DC && ch != 0x26DF && ch != 0x26E0 && ch != 0x26E1 && ch != 0x26EA && !(ch >= 0x26F1 && ch <= 0x26F5) && !(ch >= 0x26F7 && ch <= 0x26FA) && !(ch >= 0x26FD && ch <= 0x26FF)) || ch == 0x24EA /* CIRCLED DIGIT ZERO */ || (ch >= 0x2780 && ch <= 0x2793) /* DINGBAT ... CIRCLED DIGIT ... */) attr |= (int64_t) 1 << LBP_AI; else attr |= (int64_t) 1 << LBP_ID; } /* ordinary alphabetic and symbol characters */ if ((unicode_attributes[ch].category[0] == 'L' && (unicode_attributes[ch].category[1] == 'u' || unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 't' || unicode_attributes[ch].category[1] == 'm' || unicode_attributes[ch].category[1] == 'o')) || (unicode_attributes[ch].category[0] == 'S' && (unicode_attributes[ch].category[1] == 'm' || unicode_attributes[ch].category[1] == 'k' || unicode_attributes[ch].category[1] == 'o')) || (unicode_attributes[ch].category[0] == 'N' && (unicode_attributes[ch].category[1] == 'l' || unicode_attributes[ch].category[1] == 'o')) || (unicode_attributes[ch].category[0] == 'P' && (unicode_attributes[ch].category[1] == 'c' || unicode_attributes[ch].category[1] == 'd' || unicode_attributes[ch].category[1] == 'o')) || ch == 0x0600 /* ARABIC NUMBER SIGN */ || ch == 0x0601 /* ARABIC SIGN SANAH */ || ch == 0x0602 /* ARABIC FOOTNOTE MARKER */ || ch == 0x0603 /* ARABIC SIGN SAFHA */ || ch == 0x0604 /* ARABIC SIGN SAMVAT */ || ch == 0x0605 /* ARABIC NUMBER MARK ABOVE */ || ch == 0x06DD /* ARABIC END OF AYAH */ || ch == 0x070F /* SYRIAC ABBREVIATION MARK */ || ch == 0x08E2 /* ARABIC DISPUTED END OF AYAH */ || ch == 0x2061 /* FUNCTION APPLICATION */ || ch == 0x2062 /* INVISIBLE TIMES */ || ch == 0x2063 /* INVISIBLE SEPARATOR */ || ch == 0x2064 /* INVISIBLE PLUS */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x110BD /* KAITHI NUMBER SIGN */) if (!(attr & (((int64_t) 1 << LBP_GL) | ((int64_t) 1 << LBP_B2) | ((int64_t) 1 << LBP_BA) | ((int64_t) 1 << LBP_BB) | ((int64_t) 1 << LBP_HY) | ((int64_t) 1 << LBP_CB) | ((int64_t) 1 << LBP_CL) | ((int64_t) 1 << LBP_CP) | ((int64_t) 1 << LBP_EX) | ((int64_t) 1 << LBP_IN) | ((int64_t) 1 << LBP_NS) | ((int64_t) 1 << LBP_OP) | ((int64_t) 1 << LBP_QU) | ((int64_t) 1 << LBP_IS) | ((int64_t) 1 << LBP_NU) | ((int64_t) 1 << LBP_PO) | ((int64_t) 1 << LBP_PR) | ((int64_t) 1 << LBP_SY) | ((int64_t) 1 << LBP_H2) | ((int64_t) 1 << LBP_H3) | ((int64_t) 1 << LBP_HL) | ((int64_t) 1 << LBP_JL) | ((int64_t) 1 << LBP_JV) | ((int64_t) 1 << LBP_JT) | ((int64_t) 1 << LBP_RI) | ((int64_t) 1 << LBP_SA) | ((int64_t) 1 << LBP_ID) | ((int64_t) 1 << LBP_EB) | ((int64_t) 1 << LBP_EM))) && ch != 0x3035 /* VERTICAL KANA REPEAT MARK LOWER HALF */) { /* ambiguous (alphabetic) ? */ if ((unicode_width[ch] != NULL && unicode_width[ch][0] == 'A' && ch >= 0x2000 /* Extra exceptions for compatibility with Unicode LineBreak.txt. */ && ch != 0x2022 /* BULLET */ && ch != 0x203E /* OVERLINE */ && ch != 0x2126 /* OHM SIGN */ && ch != 0x2153 /* VULGAR FRACTION ONE THIRD */ && ch != 0x215C /* VULGAR FRACTION THREE EIGHTHS */ && ch != 0x215D /* VULGAR FRACTION FIVE EIGHTHS */ && ch != 0x21B8 /* NORTH WEST ARROW TO LONG BAR */ && ch != 0x21B9 /* LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR */ && ch != 0x21E7 /* UPWARDS WHITE ARROW */ && ch != 0x24FF /* NEGATIVE CIRCLED DIGIT ZERO */ && ch != 0x273D /* HEAVY TEARDROP-SPOKED ASTERISK */) || ch == 0x00A7 /* SECTION SIGN */ || ch == 0x00A8 /* DIAERESIS */ || ch == 0x00AA /* FEMININE ORDINAL INDICATOR */ || ch == 0x00B2 /* SUPERSCRIPT TWO */ || ch == 0x00B3 /* SUPERSCRIPT THREE */ || ch == 0x00B6 /* PILCROW SIGN */ || ch == 0x00B7 /* MIDDLE DOT */ || ch == 0x00B8 /* CEDILLA */ || ch == 0x00B9 /* SUPERSCRIPT ONE */ || ch == 0x00BA /* MASCULINE ORDINAL INDICATOR */ || ch == 0x00BC /* VULGAR FRACTION ONE QUARTER */ || ch == 0x00BD /* VULGAR FRACTION ONE HALF */ || ch == 0x00BE /* VULGAR FRACTION THREE QUARTERS */ || ch == 0x00D7 /* MULTIPLICATION SIGN */ || ch == 0x00F7 /* DIVISION SIGN */ || ch == 0x02C7 /* CARON */ || ch == 0x02C9 /* MODIFIER LETTER MACRON */ || ch == 0x02CA /* MODIFIER LETTER ACUTE ACCENT */ || ch == 0x02CB /* MODIFIER LETTER GRAVE ACCENT */ || ch == 0x02CD /* MODIFIER LETTER LOW MACRON */ || ch == 0x02D0 /* MODIFIER LETTER TRIANGULAR COLON */ || ch == 0x02D8 /* BREVE */ || ch == 0x02D9 /* DOT ABOVE */ || ch == 0x02DA /* RING ABOVE */ || ch == 0x02DB /* OGONEK */ || ch == 0x02DD /* DOUBLE ACUTE ACCENT */ || ch == 0x24EA /* CIRCLED DIGIT ZERO */ || (ch >= 0x2780 && ch <= 0x2793) /* DINGBAT ... CIRCLED DIGIT ... */ /* Extra characters for compatibility with Unicode LineBreak.txt. */ || ch == 0x2155 /* VULGAR FRACTION ONE FIFTH */ || ch == 0x2574 /* BOX DRAWINGS LIGHT LEFT */ || ch == 0x2616 /* WHITE SHOGI PIECE */ || ch == 0x2617 /* BLACK SHOGI PIECE */ || ch == 0x2757 /* HEAVY EXCLAMATION MARK SYMBOL */ || ch == 0x2B55 /* HEAVY LARGE CIRCLE */ || ch == 0x1F10B /* DINGBAT CIRCLED SANS-SERIF DIGIT ZERO */ || ch == 0x1F18E /* NEGATIVE SQUARED AB */ || (ch >= 0x1F191 && ch <= 0x1F19A) /* SQUARED CL..SQUARED VS */ || ch == 0x1F10C /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO */) attr |= (int64_t) 1 << LBP_AI; else attr |= (int64_t) 1 << LBP_AL; attr &= ~((int64_t) 1 << LBP_CM); } } else { /* Unassigned character. */ if ((ch >= 0x3400 && ch <= 0x4DBF) /* CJK Unified Ideographs Extension A */ || (ch >= 0x4E00 && ch <= 0x9FFF) /* CJK Unified Ideographs */ || (ch >= 0xF900 && ch <= 0xFAFF) /* CJK Compatibility Ideographs */ || (ch >= 0x1F02C && ch <= 0x1F02F) /* reserved */ || (ch >= 0x1F094 && ch <= 0x1F09F) /* reserved */ || (ch >= 0x1F0AF && ch <= 0x1F0B0) /* reserved */ || ch == 0x1F0C0 /* reserved */ || ch == 0x1F0D0 /* reserved */ || (ch >= 0x1F0F6 && ch <= 0x1F0FF) /* reserved */ || (ch >= 0x1F10D && ch <= 0x1F10F) /* reserved */ || ch == 0x1F12F /* reserved */ || (ch >= 0x1F16C && ch <= 0x1F16F) /* reserved */ || (ch >= 0x1F1AD && ch <= 0x1F1E5) /* reserved */ || (ch >= 0x1F203 && ch <= 0x1F20F) /* reserved */ || (ch >= 0x1F23C && ch <= 0x1F23F) /* reserved */ || (ch >= 0x1F249 && ch <= 0x1F24F) /* reserved */ || (ch >= 0x1F252 && ch <= 0x1F2FF) /* reserved */ || (ch >= 0x1F6D3 && ch <= 0x1F6DF) /* reserved */ || (ch >= 0x1F6ED && ch <= 0x1F6EF) /* reserved */ || (ch >= 0x1F6F7 && ch <= 0x1F6FF) /* reserved */ || (ch >= 0x1F774 && ch <= 0x1F77F) /* reserved */ || (ch >= 0x1F7D5 && ch <= 0x1F7FF) /* reserved */ || (ch >= 0x1F80C && ch <= 0x1F80F) /* reserved */ || (ch >= 0x1F848 && ch <= 0x1F84F) /* reserved */ || (ch >= 0x1F85A && ch <= 0x1F85F) /* reserved */ || (ch >= 0x1F888 && ch <= 0x1F88F) /* reserved */ || (ch >= 0x1F8AE && ch <= 0x1F90F) /* reserved */ || ch == 0x1F91F /* reserved */ || ch == 0x1F93F /* reserved */ || (ch >= 0x1F928 && ch <= 0x1F92F) /* reserved */ || (ch >= 0x1F931 && ch <= 0x1F932) /* reserved */ || (ch >= 0x1F94C && ch <= 0x1F94F) /* reserved */ || (ch >= 0x1F95F && ch <= 0x1F97F) /* reserved */ || (ch >= 0x1F992 && ch <= 0x1F9BF) /* reserved */ || (ch >= 0x1F9C1 && ch <= 0x1FFFD) /* reserved */ || (ch >= 0x20000 && ch <= 0x2A6FF) /* CJK Unified Ideographs Extension B */ || (ch >= 0x2A700 && ch <= 0x2F7FF) /* CJK Unified Ideographs Extension C, Supplementary Ideographic Plane (Plane 2) outside of blocks */ || (ch >= 0x2F800 && ch <= 0x2FFFD) /* CJK Compatibility Ideographs Supplement, Supplementary Ideographic Plane (Plane 2) outside of blocks */ || (ch >= 0x30000 && ch <= 0x3FFFD) /* Tertiary Ideographic Plane (Plane 3) outside of blocks */) attr |= (int64_t) 1 << LBP_ID; } if (attr == 0) /* unknown */ attr |= (int64_t) 1 << LBP_XX; return attr; } /* Output the line breaking properties in a human readable format. */ static void debug_output_lbp (FILE *stream) { unsigned int i; for (i = 0; i < 0x110000; i++) { int64_t attr = get_lbp (i); if (attr != (int64_t) 1 << LBP_XX) { fprintf (stream, "0x%04X", i); #define PRINT_BIT(attr,bit) \ if (attr & ((int64_t) 1 << bit)) fprintf (stream, " " #bit); PRINT_BIT(attr,LBP_BK); PRINT_BIT(attr,LBP_CM); PRINT_BIT(attr,LBP_WJ); PRINT_BIT(attr,LBP_ZW); PRINT_BIT(attr,LBP_GL); PRINT_BIT(attr,LBP_SP); PRINT_BIT(attr,LBP_B2); PRINT_BIT(attr,LBP_BA); PRINT_BIT(attr,LBP_BB); PRINT_BIT(attr,LBP_HY); PRINT_BIT(attr,LBP_CB); PRINT_BIT(attr,LBP_CL); PRINT_BIT(attr,LBP_CP); PRINT_BIT(attr,LBP_EX); PRINT_BIT(attr,LBP_IN); PRINT_BIT(attr,LBP_NS); PRINT_BIT(attr,LBP_OP); PRINT_BIT(attr,LBP_QU); PRINT_BIT(attr,LBP_IS); PRINT_BIT(attr,LBP_NU); PRINT_BIT(attr,LBP_PO); PRINT_BIT(attr,LBP_PR); PRINT_BIT(attr,LBP_SY); PRINT_BIT(attr,LBP_AI); PRINT_BIT(attr,LBP_AL); PRINT_BIT(attr,LBP_H2); PRINT_BIT(attr,LBP_H3); PRINT_BIT(attr,LBP_HL); PRINT_BIT(attr,LBP_ID); PRINT_BIT(attr,LBP_JL); PRINT_BIT(attr,LBP_JV); PRINT_BIT(attr,LBP_JT); PRINT_BIT(attr,LBP_RI); PRINT_BIT(attr,LBP_SA); PRINT_BIT(attr,LBP_ZWJ); PRINT_BIT(attr,LBP_EB); PRINT_BIT(attr,LBP_EM); PRINT_BIT(attr,LBP_XX); #undef PRINT_BIT fprintf (stream, "\n"); } } } static void debug_output_lbrk_tables (const char *filename) { FILE *stream; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } debug_output_lbp (stream); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* The line breaking property from the LineBreak.txt file. */ int unicode_org_lbp[0x110000]; /* Stores in unicode_org_lbp[] the line breaking property from the LineBreak.txt file. */ static void fill_org_lbp (const char *linebreak_filename) { unsigned int i, j; FILE *stream; char field0[FIELDLEN]; char field1[FIELDLEN]; char field2[FIELDLEN]; int lineno = 0; for (i = 0; i < 0x110000; i++) unicode_org_lbp[i] = LBP_XX; stream = fopen (linebreak_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", linebreak_filename); exit (1); } for (;;) { int n; int c; int value; lineno++; c = getc (stream); if (c == EOF) break; if (c == '#') { do c = getc (stream); while (c != EOF && c != '\n'); continue; } ungetc (c, stream); n = getfield (stream, field0, ';'); n += getfield (stream, field1, ' '); n += getfield (stream, field2, '\n'); if (n == 0) break; if (n != 3) { fprintf (stderr, "short line in '%s':%d\n", linebreak_filename, lineno); exit (1); } #define TRY(bit) else if (strcmp (field1, #bit + 4) == 0) value = bit; if (false) {} TRY(LBP_BK) TRY(LBP_CM) TRY(LBP_WJ) TRY(LBP_ZW) TRY(LBP_GL) TRY(LBP_SP) TRY(LBP_B2) TRY(LBP_BA) TRY(LBP_BB) TRY(LBP_HY) TRY(LBP_CB) TRY(LBP_CL) TRY(LBP_CP) TRY(LBP_EX) TRY(LBP_IN) TRY(LBP_NS) TRY(LBP_OP) TRY(LBP_QU) TRY(LBP_IS) TRY(LBP_NU) TRY(LBP_PO) TRY(LBP_PR) TRY(LBP_SY) TRY(LBP_AI) TRY(LBP_AL) TRY(LBP_H2) TRY(LBP_H3) TRY(LBP_HL) TRY(LBP_ID) TRY(LBP_JL) TRY(LBP_JV) TRY(LBP_JT) TRY(LBP_RI) TRY(LBP_SA) TRY(LBP_ZWJ) TRY(LBP_EB) TRY(LBP_EM) TRY(LBP_XX) #undef TRY else if (strcmp (field1, "LF") == 0) value = LBP_BK; else if (strcmp (field1, "CR") == 0) value = LBP_BK; else if (strcmp (field1, "NL") == 0) value = LBP_BK; else if (strcmp (field1, "SG") == 0) value = LBP_XX; else if (strcmp (field1, "CJ") == 0) value = LBP_NS; else { fprintf (stderr, "unknown property value \"%s\" in '%s':%d\n", field1, linebreak_filename, lineno); exit (1); } i = strtoul (field0, NULL, 16); if (strstr (field0, "..") != NULL) { /* Deal with a range. */ j = strtoul (strstr (field0, "..") + 2, NULL, 16); for (; i <= j; i++) unicode_org_lbp[i] = value; } else { /* Single character line. */ unicode_org_lbp[i] = value; } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", linebreak_filename); exit (1); } } /* Output the line breaking properties in a human readable format. */ static void debug_output_org_lbp (FILE *stream) { unsigned int i; for (i = 0; i < 0x110000; i++) { int attr = unicode_org_lbp[i]; if (attr != LBP_XX) { fprintf (stream, "0x%04X", i); #define PRINT_BIT(attr,bit) \ if (attr == bit) fprintf (stream, " " #bit); PRINT_BIT(attr,LBP_BK); PRINT_BIT(attr,LBP_CM); PRINT_BIT(attr,LBP_WJ); PRINT_BIT(attr,LBP_ZW); PRINT_BIT(attr,LBP_GL); PRINT_BIT(attr,LBP_SP); PRINT_BIT(attr,LBP_B2); PRINT_BIT(attr,LBP_BA); PRINT_BIT(attr,LBP_BB); PRINT_BIT(attr,LBP_HY); PRINT_BIT(attr,LBP_CB); PRINT_BIT(attr,LBP_CL); PRINT_BIT(attr,LBP_CP); PRINT_BIT(attr,LBP_EX); PRINT_BIT(attr,LBP_IN); PRINT_BIT(attr,LBP_NS); PRINT_BIT(attr,LBP_OP); PRINT_BIT(attr,LBP_QU); PRINT_BIT(attr,LBP_IS); PRINT_BIT(attr,LBP_NU); PRINT_BIT(attr,LBP_PO); PRINT_BIT(attr,LBP_PR); PRINT_BIT(attr,LBP_SY); PRINT_BIT(attr,LBP_AI); PRINT_BIT(attr,LBP_AL); PRINT_BIT(attr,LBP_H2); PRINT_BIT(attr,LBP_H3); PRINT_BIT(attr,LBP_HL); PRINT_BIT(attr,LBP_ID); PRINT_BIT(attr,LBP_JL); PRINT_BIT(attr,LBP_JV); PRINT_BIT(attr,LBP_JT); PRINT_BIT(attr,LBP_RI); PRINT_BIT(attr,LBP_SA); PRINT_BIT(attr,LBP_ZWJ); PRINT_BIT(attr,LBP_EB); PRINT_BIT(attr,LBP_EM); PRINT_BIT(attr,LBP_XX); #undef PRINT_BIT fprintf (stream, "\n"); } } } static void debug_output_org_lbrk_tables (const char *filename) { FILE *stream; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } debug_output_org_lbp (stream); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE lbp_table #define ELEMENT unsigned char #define DEFAULT LBP_XX #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_lbp (FILE *stream1, FILE *stream2) { unsigned int i; struct lbp_table t; unsigned int level1_offset, level2_offset, level3_offset; t.p = 7; t.q = 9; lbp_table_init (&t); for (i = 0; i < 0x110000; i++) { int64_t attr = get_lbp (i); /* Now attr should contain exactly one bit. */ assert (attr != 0 && (attr & (attr - 1)) == 0); if (attr != (int64_t) 1 << LBP_XX) { unsigned int log2_attr; for (log2_attr = 0; attr > 1; attr >>= 1, log2_attr++); lbp_table_add (&t, i, log2_attr); } } lbp_table_finalize (&t); level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream1, "#define lbrkprop_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream1, "\n"); fprintf (stream1, "typedef struct\n"); fprintf (stream1, " {\n"); fprintf (stream1, " int level1[%zu];\n", t.level1_size); fprintf (stream1, " int level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream1, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream1, " }\n"); fprintf (stream1, "lbrkprop_t;\n"); fprintf (stream1, "extern const lbrkprop_t unilbrkprop;\n"); fprintf (stream2, "const lbrkprop_t unilbrkprop =\n"); fprintf (stream2, "{\n"); fprintf (stream2, " {"); if (t.level1_size > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream2, " %5d", -1); else fprintf (stream2, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream2, ","); } if (t.level1_size > 8) fprintf (stream2, "\n "); fprintf (stream2, " },\n"); fprintf (stream2, " {"); if (t.level2_size << t.q > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream2, " %5d", -1); else fprintf (stream2, " %5zu", (offset - level3_offset) / sizeof (unsigned char)); if (i+1 < t.level2_size << t.q) fprintf (stream2, ","); } if (t.level2_size << t.q > 8) fprintf (stream2, "\n "); fprintf (stream2, " },\n"); fprintf (stream2, " {"); if (t.level3_size << t.p > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { unsigned char value = ((unsigned char *) (t.result + level3_offset))[i]; const char *value_string; switch (value) { #define CASE(x) case x: value_string = #x; break; CASE(LBP_BK); CASE(LBP_CM); CASE(LBP_WJ); CASE(LBP_ZW); CASE(LBP_GL); CASE(LBP_SP); CASE(LBP_B2); CASE(LBP_BA); CASE(LBP_BB); CASE(LBP_HY); CASE(LBP_CB); CASE(LBP_CL); CASE(LBP_CP); CASE(LBP_EX); CASE(LBP_IN); CASE(LBP_NS); CASE(LBP_OP); CASE(LBP_QU); CASE(LBP_IS); CASE(LBP_NU); CASE(LBP_PO); CASE(LBP_PR); CASE(LBP_SY); CASE(LBP_AI); CASE(LBP_AL); CASE(LBP_H2); CASE(LBP_H3); CASE(LBP_HL); CASE(LBP_ID); CASE(LBP_JL); CASE(LBP_JV); CASE(LBP_JT); CASE(LBP_RI); CASE(LBP_SA); CASE(LBP_ZWJ); CASE(LBP_EB); CASE(LBP_EM); CASE(LBP_XX); #undef CASE default: abort (); } if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); fprintf (stream2, " %s%s", value_string, (i+1 < t.level3_size << t.p ? "," : "")); } if (t.level3_size << t.p > 8) fprintf (stream2, "\n "); fprintf (stream2, " }\n"); fprintf (stream2, "};\n"); } static void output_lbrk_tables (const char *filename1, const char *filename2, const char *version) { const char *filenames[2]; FILE *streams[2]; size_t i; filenames[0] = filename1; filenames[1] = filename2; for (i = 0; i < 2; i++) { streams[i] = fopen (filenames[i], "w"); if (streams[i] == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filenames[i]); exit (1); } } for (i = 0; i < 2; i++) { FILE *stream = streams[i]; fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Line breaking properties of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); } output_lbp (streams[0], streams[1]); for (i = 0; i < 2; i++) { if (ferror (streams[i]) || fclose (streams[i])) { fprintf (stderr, "error writing to '%s'\n", filenames[i]); exit (1); } } } /* ========================================================================= */ /* Word break property. Updated for Unicode TR #29 revision 17. */ /* Possible values of the Word_Break property. */ enum { WBP_OTHER = 0, WBP_CR = 11, WBP_LF = 12, WBP_NEWLINE = 10, WBP_EXTEND = 8, WBP_FORMAT = 9, WBP_KATAKANA = 1, WBP_ALETTER = 2, WBP_MIDNUMLET = 3, WBP_MIDLETTER = 4, WBP_MIDNUM = 5, WBP_NUMERIC = 6, WBP_EXTENDNUMLET = 7, WBP_RI = 13, WBP_DQ = 14, WBP_SQ = 15, WBP_HL = 16, WBP_ZWJ = 17, WBP_EB = 18, WBP_EM = 19, WBP_GAZ = 20, WBP_EBG = 21 }; /* Returns the word breaking property for ch, as a bit mask. */ static int get_wbp (unsigned int ch) { int attr = 0; if (unicode_attributes[ch].name != NULL) { if (ch == 0x000D) attr |= 1 << WBP_CR; if (ch == 0x000A) attr |= 1 << WBP_LF; if (ch == 0x000B || ch == 0x000C || ch == 0x0085 || ch == 0x2028 || ch == 0x2029) attr |= 1 << WBP_NEWLINE; if (((unicode_properties[ch] >> PROP_GRAPHEME_EXTEND) & 1) != 0 || ((unicode_properties[ch] >> PROP_OTHER_GRAPHEME_EXTEND) & 1) != 0 || (unicode_attributes[ch].category != NULL && strcmp (unicode_attributes[ch].category, "Mc") == 0)) attr |= 1 << WBP_EXTEND; if (unicode_attributes[ch].category != NULL && strcmp (unicode_attributes[ch].category, "Cf") == 0 && ch != 0x200B && ch != 0x200C && ch != 0x200D && !(ch >= 0xe0020 && ch <= 0xe007f)) attr |= 1 << WBP_FORMAT; if ((unicode_scripts[ch] < numscripts && strcmp (scripts[unicode_scripts[ch]], "Katakana") == 0) || (ch >= 0x3031 && ch <= 0x3035) || ch == 0x309B || ch == 0x309C || ch == 0x30A0 || ch == 0x30FC || ch == 0xFF70) attr |= 1 << WBP_KATAKANA; if ((unicode_scripts[ch] < numscripts && strcmp (scripts[unicode_scripts[ch]], "Hebrew") == 0) && strcmp (unicode_attributes[ch].category, "Lo") == 0) attr |= 1 << WBP_HL; if ((((unicode_properties[ch] >> PROP_ALPHABETIC) & 1) != 0 || ch == 0x05F3) && ((unicode_properties[ch] >> PROP_IDEOGRAPHIC) & 1) == 0 && (attr & (1 << WBP_KATAKANA)) == 0 && ((get_lbp (ch) >> LBP_SA) & 1) == 0 && !(unicode_scripts[ch] < numscripts && strcmp (scripts[unicode_scripts[ch]], "Hiragana") == 0) && (attr & (1 << WBP_EXTEND)) == 0 && (attr & (1 << WBP_HL)) == 0) attr |= 1 << WBP_ALETTER; if (is_WBP_MIDNUMLET (ch)) attr |= 1 << WBP_MIDNUMLET; if (is_WBP_MIDLETTER (ch)) attr |= 1 << WBP_MIDLETTER; if ((((get_lbp (ch) >> LBP_IS) & 1) != 0 || ch == 0x066C || ch == 0xFE50 || ch == 0xFE54 || ch == 0xFF0C || ch == 0xFF1B) && ch != 0x003A && ch != 0xFE13 && ch != 0x002E) attr |= 1 << WBP_MIDNUM; if (((get_lbp (ch) >> LBP_NU) & 1) != 0 && ch != 0x066C) attr |= 1 << WBP_NUMERIC; if ((unicode_attributes[ch].category != NULL && strcmp (unicode_attributes[ch].category, "Pc") == 0) || ch == 0x202F /* NARROW NO-BREAK SPACE */) attr |= 1 << WBP_EXTENDNUMLET; if (((get_lbp (ch) >> LBP_RI) & 1) != 0) attr |= 1 << WBP_RI; if (ch == 0x0022) attr |= 1 << WBP_DQ; if (ch == 0x0027) attr |= 1 << WBP_SQ; if (ch == 0x200D) attr |= 1 << WBP_ZWJ; if (ch >= 0x1F466 && ch <= 0x1F469) attr |= 1 << WBP_EBG; else if (((get_lbp (ch) >> LBP_EB) & 1) != 0) attr |= 1 << WBP_EB; if (((get_lbp (ch) >> LBP_EM) & 1) != 0) attr |= 1 << WBP_EM; if (ch == 0x2764 || ch == 0x1F48B || ch == 0x1F5E8) attr |= 1 << WBP_GAZ; } if (attr == 0) /* other */ attr |= 1 << WBP_OTHER; return attr; } /* Output the word break property in a human readable format. */ static void debug_output_wbp (FILE *stream) { unsigned int i; for (i = 0; i < 0x110000; i++) { int attr = get_wbp (i); if (attr != 1 << WBP_OTHER) { fprintf (stream, "0x%04X", i); if (attr & (1 << WBP_CR)) fprintf (stream, " CR"); if (attr & (1 << WBP_LF)) fprintf (stream, " LF"); if (attr & (1 << WBP_NEWLINE)) fprintf (stream, " Newline"); if (attr & (1 << WBP_EXTEND)) fprintf (stream, " Extend"); if (attr & (1 << WBP_FORMAT)) fprintf (stream, " Format"); if (attr & (1 << WBP_KATAKANA)) fprintf (stream, " Katakana"); if (attr & (1 << WBP_ALETTER)) fprintf (stream, " ALetter"); if (attr & (1 << WBP_MIDNUMLET)) fprintf (stream, " MidNumLet"); if (attr & (1 << WBP_MIDLETTER)) fprintf (stream, " MidLetter"); if (attr & (1 << WBP_MIDNUM)) fprintf (stream, " MidNum"); if (attr & (1 << WBP_NUMERIC)) fprintf (stream, " Numeric"); if (attr & (1 << WBP_EXTENDNUMLET)) fprintf (stream, " ExtendNumLet"); if (attr & (1 << WBP_RI)) fprintf (stream, " Regional_Indicator"); if (attr & (1 << WBP_DQ)) fprintf (stream, " Double_Quote"); if (attr & (1 << WBP_SQ)) fprintf (stream, " Single_Quote"); if (attr & (1 << WBP_HL)) fprintf (stream, " Hebrew_Letter"); if (attr & (1 << WBP_ZWJ)) fprintf (stream, " ZWJ"); if (attr & (1 << WBP_EB)) fprintf (stream, " E_Base"); if (attr & (1 << WBP_EM)) fprintf (stream, " E_Modifier"); if (attr & (1 << WBP_GAZ)) fprintf (stream, " Glue_After_Zwj"); if (attr & (1 << WBP_EBG)) fprintf (stream, " E_Base_GAZ"); fprintf (stream, "\n"); } } } static void debug_output_wbrk_tables (const char *filename) { FILE *stream; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } debug_output_wbp (stream); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* The word break property from the WordBreakProperty.txt file. */ int unicode_org_wbp[0x110000]; /* Stores in unicode_org_wbp[] the word break property from the WordBreakProperty.txt file. */ static void fill_org_wbp (const char *wordbreakproperty_filename) { unsigned int i; FILE *stream; for (i = 0; i < 0x110000; i++) unicode_org_wbp[i] = WBP_OTHER; stream = fopen (wordbreakproperty_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", wordbreakproperty_filename); exit (1); } for (;;) { char buf[200+1]; unsigned int i1, i2; char padding[200+1]; char propname[200+1]; int propvalue; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X..%X%[ ;]%[^ ]", &i1, &i2, padding, propname) != 4) { if (sscanf (buf, "%X%[ ;]%[^ ]", &i1, padding, propname) != 3) { fprintf (stderr, "parse error in '%s'\n", wordbreakproperty_filename); exit (1); } i2 = i1; } #define PROP(name,value) \ if (strcmp (propname, name) == 0) propvalue = value; else PROP ("CR", WBP_CR) PROP ("LF", WBP_LF) PROP ("Newline", WBP_NEWLINE) PROP ("Extend", WBP_EXTEND) PROP ("Format", WBP_FORMAT) PROP ("Katakana", WBP_KATAKANA) PROP ("ALetter", WBP_ALETTER) PROP ("MidNumLet", WBP_MIDNUMLET) PROP ("MidLetter", WBP_MIDLETTER) PROP ("MidNum", WBP_MIDNUM) PROP ("Numeric", WBP_NUMERIC) PROP ("ExtendNumLet", WBP_EXTENDNUMLET) PROP ("Regional_Indicator", WBP_RI) PROP ("Double_Quote", WBP_DQ) PROP ("Single_Quote", WBP_SQ) PROP ("Hebrew_Letter", WBP_HL) PROP ("ZWJ", WBP_ZWJ) PROP ("E_Base", WBP_EB) PROP ("E_Modifier", WBP_EM) PROP ("Glue_After_Zwj", WBP_GAZ) PROP ("E_Base_GAZ", WBP_EBG) #undef PROP { fprintf (stderr, "unknown property value '%s' in '%s'\n", propname, wordbreakproperty_filename); exit (1); } assert (i1 <= i2 && i2 < 0x110000); for (i = i1; i <= i2; i++) unicode_org_wbp[i] = propvalue; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", wordbreakproperty_filename); exit (1); } } /* Output the word break property in a human readable format. */ static void debug_output_org_wbp (FILE *stream) { unsigned int i; for (i = 0; i < 0x110000; i++) { int propvalue = unicode_org_wbp[i]; if (propvalue != WBP_OTHER) { fprintf (stream, "0x%04X", i); #define PROP(name,value) \ if (propvalue == value) fprintf (stream, " " name); else PROP ("CR", WBP_CR) PROP ("LF", WBP_LF) PROP ("Newline", WBP_NEWLINE) PROP ("Extend", WBP_EXTEND) PROP ("Format", WBP_FORMAT) PROP ("Katakana", WBP_KATAKANA) PROP ("ALetter", WBP_ALETTER) PROP ("MidNumLet", WBP_MIDNUMLET) PROP ("MidLetter", WBP_MIDLETTER) PROP ("MidNum", WBP_MIDNUM) PROP ("Numeric", WBP_NUMERIC) PROP ("ExtendNumLet", WBP_EXTENDNUMLET) PROP ("Regional_Indicator", WBP_RI) PROP ("Double_Quote", WBP_DQ) PROP ("Single_Quote", WBP_SQ) PROP ("Hebrew_Letter", WBP_HL) PROP ("ZWJ", WBP_ZWJ) PROP ("E_Base", WBP_EB) PROP ("E_Modifier", WBP_EM) PROP ("Glue_After_Zwj", WBP_GAZ) PROP ("E_Base_GAZ", WBP_EBG) #undef PROP fprintf (stream, " ??"); fprintf (stream, "\n"); } } } static void debug_output_org_wbrk_tables (const char *filename) { FILE *stream; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } debug_output_org_wbp (stream); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE wbp_table #define ELEMENT unsigned char #define DEFAULT WBP_OTHER #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_wbp (FILE *stream) { unsigned int i; struct wbp_table t; unsigned int level1_offset, level2_offset, level3_offset; t.p = 7; t.q = 9; wbp_table_init (&t); for (i = 0; i < 0x110000; i++) { int attr = get_wbp (i); /* Now attr should contain exactly one bit. */ assert (attr != 0 && (attr & (attr - 1)) == 0); if (attr != 1 << WBP_OTHER) { unsigned int log2_attr; for (log2_attr = 0; attr > 1; attr >>= 1, log2_attr++); wbp_table_add (&t, i, log2_attr); } } wbp_table_finalize (&t); level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define wbrkprop_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "\n"); fprintf (stream, "typedef struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " int level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "wbrkprop_t;\n"); fprintf (stream, "static const wbrkprop_t uniwbrkprop =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (unsigned char)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 4) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { unsigned char value = ((unsigned char *) (t.result + level3_offset))[i]; const char *value_string; switch (value) { #define CASE(x) case x: value_string = #x; break; CASE(WBP_OTHER); CASE(WBP_CR); CASE(WBP_LF); CASE(WBP_NEWLINE); CASE(WBP_EXTEND); CASE(WBP_FORMAT); CASE(WBP_KATAKANA); CASE(WBP_ALETTER); CASE(WBP_MIDNUMLET); CASE(WBP_MIDLETTER); CASE(WBP_MIDNUM); CASE(WBP_NUMERIC); CASE(WBP_EXTENDNUMLET); CASE(WBP_RI); CASE(WBP_DQ); CASE(WBP_SQ); CASE(WBP_HL); CASE(WBP_ZWJ); CASE(WBP_EB); CASE(WBP_EM); CASE(WBP_GAZ); CASE(WBP_EBG); #undef CASE default: abort (); } if (i > 0 && (i % 4) == 0) fprintf (stream, "\n "); fprintf (stream, " %s%s", value_string, (i+1 < t.level3_size << t.p ? "," : "")); } if (t.level3_size << t.p > 4) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); } static void output_wbrk_tables (const char *filename, const char *version) { FILE *stream; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Word breaking properties of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2002, 2004, 2007-2009 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); output_wbp (stream); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Grapheme break property. Updated for Unicode TR #29 revision 29. */ /* Possible values of the Grapheme_Cluster_Break property. */ enum { GBP_OTHER = 0, GBP_CR = 1, GBP_LF = 2, GBP_CONTROL = 3, GBP_EXTEND = 4, GBP_PREPEND = 5, GBP_SPACINGMARK = 6, GBP_L = 7, GBP_V = 8, GBP_T = 9, GBP_LV = 10, GBP_LVT = 11, GBP_RI = 12, GBP_ZWJ = 13, GBP_EB = 14, GBP_EM = 15, GBP_GAZ = 16, GBP_EBG = 17 }; /* Construction of sparse 3-level tables. */ #define TABLE gbp_table #define ELEMENT unsigned char #define DEFAULT GBP_OTHER #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* The grapheme break property from the GraphemeBreakProperty.txt file. */ int unicode_org_gbp[0x110000]; /* Output the unit test data for the grapheme break property. */ static void output_gbp_test (const char *filename) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Test the Unicode grapheme break property functions.\n"); fprintf (stream, " Copyright (C) 2010 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int gbp = unicode_org_gbp[ch]; const char *gbp_string; while (ch + 1 < 0x110000 && unicode_org_gbp[ch + 1] == gbp) ch++; switch (gbp) { #define CASE(x) case x: gbp_string = #x; break; CASE (GBP_OTHER) CASE (GBP_CR) CASE (GBP_LF) CASE (GBP_CONTROL) CASE (GBP_EXTEND) CASE (GBP_PREPEND) CASE (GBP_SPACINGMARK) CASE (GBP_L) CASE (GBP_V) CASE (GBP_T) CASE (GBP_LV) CASE (GBP_LVT) CASE (GBP_RI) CASE (GBP_ZWJ) CASE (GBP_EB) CASE (GBP_EM) CASE (GBP_GAZ) CASE (GBP_EBG) #undef CASE default: abort (); } if (need_comma) fprintf (stream, ",\n"); fprintf (stream, "{ 0x%04X, %s }", ch + 1, gbp_string); need_comma = true; } fprintf (stream, "\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Output the per-character grapheme break property table. */ static void output_gbp_table (const char *filename, const char *version) { FILE *stream; unsigned int ch, i; struct gbp_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Grapheme break property of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; gbp_table_init (&t); for (ch = 0; ch < 0x110000; ch++) gbp_table_add (&t, ch, unicode_org_gbp[ch]); gbp_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define gbrkprop_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " unsigned char level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "unigbrkprop =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (uint8_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 4) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { unsigned char value = ((unsigned char *) (t.result + level3_offset))[i]; const char *value_string; switch (value) { #define CASE(x) case x: value_string = #x; break; CASE (GBP_OTHER) CASE (GBP_CR) CASE (GBP_LF) CASE (GBP_CONTROL) CASE (GBP_EXTEND) CASE (GBP_PREPEND) CASE (GBP_SPACINGMARK) CASE (GBP_L) CASE (GBP_V) CASE (GBP_T) CASE (GBP_LV) CASE (GBP_LVT) CASE (GBP_RI) CASE (GBP_ZWJ) CASE (GBP_EB) CASE (GBP_EM) CASE (GBP_GAZ) CASE (GBP_EBG) #undef CASE default: abort (); } if (i > 0 && (i % 4) == 0) fprintf (stream, "\n "); fprintf (stream, " %s%s", value_string, (i+1 < t.level3_size << t.p ? "," : "")); } if (t.level3_size << t.p > 4) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Stores in unicode_org_gbp[] the grapheme breaking property from the GraphemeBreakProperty.txt file. */ static void fill_org_gbp (const char *graphemebreakproperty_filename) { unsigned int i; FILE *stream; int lineno = 0; for (i = 0; i < 0x110000; i++) unicode_org_gbp[i] = GBP_OTHER; stream = fopen (graphemebreakproperty_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", graphemebreakproperty_filename); exit (1); } for (;;) { char buf[200+1]; unsigned int i1, i2; char padding[200+1]; char propname[200+1]; int propvalue; lineno++; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X..%X%[ ;]%[^ ]", &i1, &i2, padding, propname) != 4) { if (sscanf (buf, "%X%[ ;]%[^ ]", &i1, padding, propname) != 3) { fprintf (stderr, "parse error in '%s'\n", graphemebreakproperty_filename); exit (1); } i2 = i1; } #define PROP(name,value) \ if (strcmp (propname, name) == 0) propvalue = value; else PROP ("CR", GBP_CR) PROP ("LF", GBP_LF) PROP ("Control", GBP_CONTROL) PROP ("Extend", GBP_EXTEND) PROP ("Prepend", GBP_PREPEND) PROP ("SpacingMark", GBP_SPACINGMARK) PROP ("L", GBP_L) PROP ("V", GBP_V) PROP ("T", GBP_T) PROP ("LV", GBP_LV) PROP ("LVT", GBP_LVT) PROP ("Regional_Indicator", GBP_RI) PROP ("ZWJ", GBP_ZWJ) PROP ("E_Base", GBP_EB) PROP ("E_Modifier", GBP_EM) PROP ("Glue_After_Zwj", GBP_GAZ) PROP ("E_Base_GAZ", GBP_EBG) #undef PROP { fprintf (stderr, "unknown property value '%s' in %s:%d\n", propname, graphemebreakproperty_filename, lineno); exit (1); } assert (i1 <= i2 && i2 < 0x110000); for (i = i1; i <= i2; i++) unicode_org_gbp[i] = propvalue; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", graphemebreakproperty_filename); exit (1); } } /* ========================================================================= */ /* Composition and decomposition. Updated for Unicode TR #15 revision 33. */ /* Maximum number of characters into which a single Unicode character can be decomposed. */ #define MAX_DECOMP_LENGTH 18 enum { UC_DECOMP_CANONICAL,/* Canonical decomposition. */ UC_DECOMP_FONT, /* <font> A font variant (e.g. a blackletter form). */ UC_DECOMP_NOBREAK, /* <noBreak> A no-break version of a space or hyphen. */ UC_DECOMP_INITIAL, /* <initial> An initial presentation form (Arabic). */ UC_DECOMP_MEDIAL, /* <medial> A medial presentation form (Arabic). */ UC_DECOMP_FINAL, /* <final> A final presentation form (Arabic). */ UC_DECOMP_ISOLATED,/* <isolated> An isolated presentation form (Arabic). */ UC_DECOMP_CIRCLE, /* <circle> An encircled form. */ UC_DECOMP_SUPER, /* <super> A superscript form. */ UC_DECOMP_SUB, /* <sub> A subscript form. */ UC_DECOMP_VERTICAL,/* <vertical> A vertical layout presentation form. */ UC_DECOMP_WIDE, /* <wide> A wide (or zenkaku) compatibility character. */ UC_DECOMP_NARROW, /* <narrow> A narrow (or hankaku) compatibility character. */ UC_DECOMP_SMALL, /* <small> A small variant form (CNS compatibility). */ UC_DECOMP_SQUARE, /* <square> A CJK squared font variant. */ UC_DECOMP_FRACTION,/* <fraction> A vulgar fraction form. */ UC_DECOMP_COMPAT /* <compat> Otherwise unspecified compatibility character. */ }; /* Return the decomposition for a Unicode character (ignoring Hangul Jamo decompositions). Return the type, or -1 for none. */ static int get_decomposition (unsigned int ch, unsigned int *lengthp, unsigned int decomposed[MAX_DECOMP_LENGTH]) { const char *decomposition = unicode_attributes[ch].decomposition; if (decomposition != NULL && decomposition[0] != '\0') { int type = UC_DECOMP_CANONICAL; unsigned int length; char *endptr; if (decomposition[0] == '<') { const char *rangle; size_t typelen; rangle = strchr (decomposition + 1, '>'); assert (rangle != NULL); typelen = rangle + 1 - decomposition; #define TYPE(t1,t2) \ if (typelen == (sizeof (t1) - 1) && memcmp (decomposition, t1, typelen) == 0) \ type = t2; \ else TYPE ("<font>", UC_DECOMP_FONT) TYPE ("<noBreak>", UC_DECOMP_NOBREAK) TYPE ("<initial>", UC_DECOMP_INITIAL) TYPE ("<medial>", UC_DECOMP_MEDIAL) TYPE ("<final>", UC_DECOMP_FINAL) TYPE ("<isolated>", UC_DECOMP_ISOLATED) TYPE ("<circle>", UC_DECOMP_CIRCLE) TYPE ("<super>", UC_DECOMP_SUPER) TYPE ("<sub>", UC_DECOMP_SUB) TYPE ("<vertical>", UC_DECOMP_VERTICAL) TYPE ("<wide>", UC_DECOMP_WIDE) TYPE ("<narrow>", UC_DECOMP_NARROW) TYPE ("<small>", UC_DECOMP_SMALL) TYPE ("<square>", UC_DECOMP_SQUARE) TYPE ("<fraction>", UC_DECOMP_FRACTION) TYPE ("<compat>", UC_DECOMP_COMPAT) { fprintf (stderr, "unknown decomposition type %*s\n", (int)typelen, decomposition); exit (1); } #undef TYPE decomposition = rangle + 1; if (decomposition[0] == ' ') decomposition++; } for (length = 0; length < MAX_DECOMP_LENGTH; length++) { decomposed[length] = strtoul (decomposition, &endptr, 16); if (endptr == decomposition) break; decomposition = endptr; if (decomposition[0] == ' ') decomposition++; } /* Make sure that *DECOMPOSITION is not NULL-terminated. Otherwise MAX_DECOMP_LENGTH is too small. */ assert (*decomposition == '\0'); *lengthp = length; return type; } else return -1; } /* Construction of sparse 3-level tables. */ #define TABLE decomp_table #define ELEMENT uint16_t #define DEFAULT (uint16_t)(-1) #define xmalloc malloc #define xrealloc realloc #include "3level.h" static void output_decomposition (FILE *stream1, FILE *stream2) { struct decomp_table t; unsigned int level1_offset, level2_offset, level3_offset; unsigned int offset; unsigned int ch; unsigned int i; t.p = 5; t.q = 5; decomp_table_init (&t); fprintf (stream1, "extern const unsigned char gl_uninorm_decomp_chars_table[];\n"); fprintf (stream1, "\n"); fprintf (stream2, "const unsigned char gl_uninorm_decomp_chars_table[] =\n{"); offset = 0; for (ch = 0; ch < 0x110000; ch++) { unsigned int length; unsigned int decomposed[MAX_DECOMP_LENGTH]; int type = get_decomposition (ch, &length, decomposed); if (type >= 0) { assert (offset < (1 << 15)); decomp_table_add (&t, ch, ((type == UC_DECOMP_CANONICAL ? 0 : 1) << 15) | offset); /* Produce length 3-bytes entries. */ /* We would need a special representation of zero-length entries. */ assert (length != 0); for (i = 0; i < length; i++) { if (offset > 0) fprintf (stream2, ","); if ((offset % 4) == 0) fprintf (stream2, "\n "); assert (decomposed[i] < (1 << 18)); fprintf (stream2, " 0x%02X, 0x%02X, 0x%02X", (((i+1 < length ? (1 << 23) : 0) | (i == 0 ? (type << 18) : 0) | decomposed[i]) >> 16) & 0xff, (decomposed[i] >> 8) & 0xff, decomposed[i] & 0xff); offset++; } } } fprintf (stream2, "\n};\n"); fprintf (stream2, "\n"); decomp_table_finalize (&t); level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream1, "#define decomp_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream1, "\n"); fprintf (stream1, "typedef struct\n"); fprintf (stream1, " {\n"); fprintf (stream1, " int level1[%zu];\n", t.level1_size); fprintf (stream1, " int level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream1, " unsigned short level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream1, " }\n"); fprintf (stream1, "decomp_index_table_t;\n"); fprintf (stream1, "extern const decomp_index_table_t gl_uninorm_decomp_index_table;\n"); fprintf (stream2, "const decomp_index_table_t gl_uninorm_decomp_index_table =\n"); fprintf (stream2, "{\n"); fprintf (stream2, " {"); if (t.level1_size > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream2, " %5d", -1); else fprintf (stream2, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream2, ","); } if (t.level1_size > 8) fprintf (stream2, "\n "); fprintf (stream2, " },\n"); fprintf (stream2, " {"); if (t.level2_size << t.q > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream2, " %5d", -1); else fprintf (stream2, " %5zu", (offset - level3_offset) / sizeof (uint16_t)); if (i+1 < t.level2_size << t.q) fprintf (stream2, ","); } if (t.level2_size << t.q > 8) fprintf (stream2, "\n "); fprintf (stream2, " },\n"); fprintf (stream2, " {"); if (t.level3_size << t.p > 8) fprintf (stream2, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { uint16_t value = ((uint16_t *) (t.result + level3_offset))[i]; if (i > 0 && (i % 8) == 0) fprintf (stream2, "\n "); fprintf (stream2, " %5d", value == (uint16_t)(-1) ? -1 : value); if (i+1 < t.level3_size << t.p) fprintf (stream2, ","); } if (t.level3_size << t.p > 8) fprintf (stream2, "\n "); fprintf (stream2, " }\n"); fprintf (stream2, "};\n"); } static void output_decomposition_tables (const char *filename1, const char *filename2, const char *version) { const char *filenames[2]; FILE *streams[2]; size_t i; filenames[0] = filename1; filenames[1] = filename2; for (i = 0; i < 2; i++) { streams[i] = fopen (filenames[i], "w"); if (streams[i] == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filenames[i]); exit (1); } } for (i = 0; i < 2; i++) { FILE *stream = streams[i]; fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Decomposition of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); } output_decomposition (streams[0], streams[1]); for (i = 0; i < 2; i++) { if (ferror (streams[i]) || fclose (streams[i])) { fprintf (stderr, "error writing to '%s'\n", filenames[i]); exit (1); } } } /* The "excluded from composition" property from the CompositionExclusions.txt file. */ char unicode_composition_exclusions[0x110000]; static void fill_composition_exclusions (const char *compositionexclusions_filename) { FILE *stream; unsigned int i; stream = fopen (compositionexclusions_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", compositionexclusions_filename); exit (1); } for (i = 0; i < 0x110000; i++) unicode_composition_exclusions[i] = 0; for (;;) { char buf[200+1]; unsigned int i; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X", &i) != 1) { fprintf (stderr, "parse error in '%s'\n", compositionexclusions_filename); exit (1); } assert (i < 0x110000); unicode_composition_exclusions[i] = 1; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", compositionexclusions_filename); exit (1); } } static void debug_output_composition_tables (const char *filename) { FILE *stream; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } for (ch = 0; ch < 0x110000; ch++) { unsigned int length; unsigned int decomposed[MAX_DECOMP_LENGTH]; int type = get_decomposition (ch, &length, decomposed); if (type == UC_DECOMP_CANONICAL /* Consider only binary decompositions. Exclude singleton decompositions. */ && length == 2) { unsigned int code1 = decomposed[0]; unsigned int code2 = decomposed[1]; unsigned int combined = ch; /* Exclude decompositions where the first part is not a starter, i.e. is not of canonical combining class 0. */ if (strcmp (unicode_attributes[code1].combining, "0") == 0 /* Exclude characters listed in CompositionExclusions.txt. */ && !unicode_composition_exclusions[combined]) { /* The combined character must now also be a starter. Verify this. */ assert (strcmp (unicode_attributes[combined].combining, "0") == 0); fprintf (stream, "0x%04X\t0x%04X\t0x%04X\t%s\n", code1, code2, combined, unicode_attributes[code2].combining); } } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } static void output_composition_tables (const char *filename, const char *version) { FILE *stream; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Canonical composition of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2009 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, true); fprintf (stream, "\n"); /* The composition table is a set of mappings (code1, code2) -> combined, with 928 entries, 367 values for code1 (from 0x003C to 0x30FD), 54 values for code2 (from 0x0300 to 0x309A). For a fixed code1, there are from 1 to 19 possible values for code2. For a fixed code2, there are from 1 to 117 possible values for code1. This is a very sparse matrix. We want an O(1) hash lookup. We could implement the hash lookup by mapping (code1, code2) to a linear combination mul1*code1 + mul2*code2, which is then used as an index into a 3-level table. But this leads to a table of size 37 KB. We use gperf to implement the hash lookup, giving it the 928 sets of 4 bytes (code1, code2) as input. gperf generates a hash table of size 1527, which is quite good (60% filled). It requires an auxiliary table lookup in a table of size 0.5 KB. The total tables size is 11 KB. */ fprintf (stream, "struct composition_rule { char codes[6]; };\n"); fprintf (stream, "%%struct-type\n"); fprintf (stream, "%%language=ANSI-C\n"); fprintf (stream, "%%define slot-name codes\n"); fprintf (stream, "%%define hash-function-name gl_uninorm_compose_hash\n"); fprintf (stream, "%%define lookup-function-name gl_uninorm_compose_lookup\n"); fprintf (stream, "%%compare-lengths\n"); fprintf (stream, "%%compare-strncmp\n"); fprintf (stream, "%%readonly-tables\n"); fprintf (stream, "%%omit-struct-type\n"); fprintf (stream, "%%%%\n"); for (ch = 0; ch < 0x110000; ch++) { unsigned int length; unsigned int decomposed[MAX_DECOMP_LENGTH]; int type = get_decomposition (ch, &length, decomposed); if (type == UC_DECOMP_CANONICAL /* Consider only binary decompositions. Exclude singleton decompositions. */ && length == 2) { unsigned int code1 = decomposed[0]; unsigned int code2 = decomposed[1]; unsigned int combined = ch; /* Exclude decompositions where the first part is not a starter, i.e. is not of canonical combining class 0. */ if (strcmp (unicode_attributes[code1].combining, "0") == 0 /* Exclude characters listed in CompositionExclusions.txt. */ && !unicode_composition_exclusions[combined]) { /* The combined character must now also be a starter. Verify this. */ assert (strcmp (unicode_attributes[combined].combining, "0") == 0); fprintf (stream, "\"\\x%02x\\x%02x\\x%02x\\x%02x\\x%02x\\x%02x\", 0x%04x\n", (code1 >> 16) & 0xff, (code1 >> 8) & 0xff, code1 & 0xff, (code2 >> 16) & 0xff, (code2 >> 8) & 0xff, code2 & 0xff, combined); } } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Output the test for a simple character mapping table to the given file. */ static void output_simple_mapping_test (const char *filename, const char *function_name, unsigned int (*func) (unsigned int), const char *version) { FILE *stream; bool need_comma; unsigned int ch; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Test the Unicode character mapping functions.\n"); fprintf (stream, " Copyright (C) 2009 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_tests_license (stream); fprintf (stream, "\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "#include \"test-mapping-part1.h\"\n"); fprintf (stream, "\n"); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { unsigned int value = func (ch); if (value != ch) { if (need_comma) fprintf (stream, ",\n"); fprintf (stream, " { 0x%04X, 0x%04X }", ch, value); need_comma = true; } } if (need_comma) fprintf (stream, "\n"); fprintf (stream, "\n"); fprintf (stream, "#define MAP(c) %s (c)\n", function_name); fprintf (stream, "#include \"test-mapping-part2.h\"\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* Construction of sparse 3-level tables. */ #define TABLE mapping_table #define ELEMENT int32_t #define DEFAULT 0 #define xmalloc malloc #define xrealloc realloc #include "3level.h" /* Output a simple character mapping table to the given file. */ static void output_simple_mapping (const char *filename, unsigned int (*func) (unsigned int), const char *version) { FILE *stream; unsigned int ch, i; struct mapping_table t; unsigned int level1_offset, level2_offset, level3_offset; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Simple character mapping of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); t.p = 7; t.q = 9; mapping_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = (int) func (ch) - (int) ch; mapping_table_add (&t, ch, value); } mapping_table_finalize (&t); /* Offsets in t.result, in memory of this process. */ level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t.level1_size * sizeof (uint32_t) + (t.level2_size << t.q) * sizeof (uint32_t); for (i = 0; i < 5; i++) fprintf (stream, "#define mapping_header_%d %d\n", i, ((uint32_t *) t.result)[i]); fprintf (stream, "static const\n"); fprintf (stream, "struct\n"); fprintf (stream, " {\n"); fprintf (stream, " int level1[%zu];\n", t.level1_size); fprintf (stream, " short level2[%zu << %d];\n", t.level2_size, t.q); fprintf (stream, " int level3[%zu << %d];\n", t.level3_size, t.p); fprintf (stream, " }\n"); fprintf (stream, "u_mapping =\n"); fprintf (stream, "{\n"); fprintf (stream, " {"); if (t.level1_size > 8) fprintf (stream, "\n "); for (i = 0; i < t.level1_size; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level1_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level2_offset) / sizeof (uint32_t)); if (i+1 < t.level1_size) fprintf (stream, ","); } if (t.level1_size > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level2_size << t.q > 8) fprintf (stream, "\n "); for (i = 0; i < t.level2_size << t.q; i++) { uint32_t offset; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); offset = ((uint32_t *) (t.result + level2_offset))[i]; if (offset == 0) fprintf (stream, " %5d", -1); else fprintf (stream, " %5zu", (offset - level3_offset) / sizeof (int32_t)); if (i+1 < t.level2_size << t.q) fprintf (stream, ","); } if (t.level2_size << t.q > 8) fprintf (stream, "\n "); fprintf (stream, " },\n"); fprintf (stream, " {"); if (t.level3_size << t.p > 8) fprintf (stream, "\n "); for (i = 0; i < t.level3_size << t.p; i++) { if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " %5d", ((int32_t *) (t.result + level3_offset))[i]); if (i+1 < t.level3_size << t.p) fprintf (stream, ","); } if (t.level3_size << t.p > 8) fprintf (stream, "\n "); fprintf (stream, " }\n"); fprintf (stream, "};\n"); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* A special casing context. A context is negated through x -> -x. */ enum { SCC_ALWAYS = 0, SCC_FINAL_SIGMA, SCC_AFTER_SOFT_DOTTED, SCC_MORE_ABOVE, SCC_BEFORE_DOT, SCC_AFTER_I }; /* A special casing rule. */ struct special_casing_rule { unsigned int code; unsigned int lower_mapping[3]; unsigned int title_mapping[3]; unsigned int upper_mapping[3]; unsigned int casefold_mapping[3]; const char *language; int context; }; /* The special casing rules. */ struct special_casing_rule **casing_rules; unsigned int num_casing_rules; unsigned int allocated_casing_rules; static void add_casing_rule (struct special_casing_rule *new_rule) { if (num_casing_rules == allocated_casing_rules) { allocated_casing_rules = 2 * allocated_casing_rules; if (allocated_casing_rules < 16) allocated_casing_rules = 16; casing_rules = (struct special_casing_rule **) realloc (casing_rules, allocated_casing_rules * sizeof (struct special_casing_rule *)); } casing_rules[num_casing_rules++] = new_rule; } /* Stores in casing_rules the special casing rules found in specialcasing_filename. */ static void fill_casing_rules (const char *specialcasing_filename) { FILE *stream; stream = fopen (specialcasing_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", specialcasing_filename); exit (1); } casing_rules = NULL; num_casing_rules = 0; allocated_casing_rules = 0; for (;;) { char buf[200+1]; char *scanptr; char *endptr; int i; unsigned int code; unsigned int lower_mapping[3]; unsigned int title_mapping[3]; unsigned int upper_mapping[3]; char *language; int context; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; /* Scan code. */ scanptr = buf; code = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr = endptr; if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr++; /* Scan lower mapping. */ for (i = 0; i < 3; i++) lower_mapping[i] = 0; for (i = 0; i < 3; i++) { while (*scanptr == ' ') scanptr++; if (*scanptr == ';') break; lower_mapping[i] = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr = endptr; } if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr++; /* Scan title mapping. */ for (i = 0; i < 3; i++) title_mapping[i] = 0; for (i = 0; i < 3; i++) { while (*scanptr == ' ') scanptr++; if (*scanptr == ';') break; title_mapping[i] = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr = endptr; } if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr++; /* Scan upper mapping. */ for (i = 0; i < 3; i++) upper_mapping[i] = 0; for (i = 0; i < 3; i++) { while (*scanptr == ' ') scanptr++; if (*scanptr == ';') break; upper_mapping[i] = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr = endptr; } if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } scanptr++; /* Scan language and context. */ language = NULL; context = SCC_ALWAYS; while (*scanptr == ' ') scanptr++; if (*scanptr != '\0' && *scanptr != '#') { const char *word_begin = scanptr; const char *word_end; while (*scanptr != '\0' && *scanptr != '#' && *scanptr != ';' && *scanptr != ' ') scanptr++; word_end = scanptr; while (*scanptr == ' ') scanptr++; if (word_end - word_begin == 2) { language = (char *) malloc ((word_end - word_begin) + 1); memcpy (language, word_begin, 2); language[word_end - word_begin] = '\0'; word_begin = word_end = NULL; if (*scanptr != '\0' && *scanptr != '#' && *scanptr != ';') { word_begin = scanptr; while (*scanptr != '\0' && *scanptr != '#' && *scanptr != ';' && *scanptr != ' ') scanptr++; word_end = scanptr; } } if (word_end > word_begin) { bool negate = false; if (word_end - word_begin >= 4 && memcmp (word_begin, "Not_", 4) == 0) { word_begin += 4; negate = true; } if (word_end - word_begin == 11 && memcmp (word_begin, "Final_Sigma", 11) == 0) context = SCC_FINAL_SIGMA; else if (word_end - word_begin == 17 && memcmp (word_begin, "After_Soft_Dotted", 17) == 0) context = SCC_AFTER_SOFT_DOTTED; else if (word_end - word_begin == 10 && memcmp (word_begin, "More_Above", 10) == 0) context = SCC_MORE_ABOVE; else if (word_end - word_begin == 10 && memcmp (word_begin, "Before_Dot", 10) == 0) context = SCC_BEFORE_DOT; else if (word_end - word_begin == 7 && memcmp (word_begin, "After_I", 7) == 0) context = SCC_AFTER_I; else { fprintf (stderr, "unknown context type in '%s'\n", specialcasing_filename); exit (1); } if (negate) context = - context; } if (*scanptr != '\0' && *scanptr != '#' && *scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", specialcasing_filename); exit (1); } } /* Store the rule. */ { struct special_casing_rule *new_rule = (struct special_casing_rule *) malloc (sizeof (struct special_casing_rule)); new_rule->code = code; new_rule->language = language; new_rule->context = context; memcpy (new_rule->lower_mapping, lower_mapping, sizeof (new_rule->lower_mapping)); memcpy (new_rule->title_mapping, title_mapping, sizeof (new_rule->title_mapping)); memcpy (new_rule->upper_mapping, upper_mapping, sizeof (new_rule->upper_mapping)); add_casing_rule (new_rule); } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", specialcasing_filename); exit (1); } } /* A casefolding rule. */ struct casefold_rule { unsigned int code; unsigned int mapping[3]; const char *language; }; /* The casefolding rules. */ struct casefold_rule **casefolding_rules; unsigned int num_casefolding_rules; unsigned int allocated_casefolding_rules; /* Stores in casefolding_rules the case folding rules found in casefolding_filename. */ static void fill_casefolding_rules (const char *casefolding_filename) { FILE *stream; stream = fopen (casefolding_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", casefolding_filename); exit (1); } casefolding_rules = NULL; num_casefolding_rules = 0; allocated_casefolding_rules = 0; for (;;) { char buf[200+1]; char *scanptr; char *endptr; int i; unsigned int code; char type; unsigned int mapping[3]; if (fscanf (stream, "%200[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; /* Scan code. */ scanptr = buf; code = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr = endptr; if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr++; /* Scan type. */ while (*scanptr == ' ') scanptr++; switch (*scanptr) { case 'C': case 'F': case 'S': case 'T': type = *scanptr; break; default: fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr++; if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr++; /* Scan casefold mapping. */ for (i = 0; i < 3; i++) mapping[i] = 0; for (i = 0; i < 3; i++) { while (*scanptr == ' ') scanptr++; if (*scanptr == ';') break; mapping[i] = strtoul (scanptr, &endptr, 16); if (endptr == scanptr) { fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr = endptr; } if (*scanptr != ';') { fprintf (stderr, "parse error in '%s'\n", casefolding_filename); exit (1); } scanptr++; /* Ignore rules of type 'S'; we use the rules of type 'F' instead. */ if (type != 'S') { const char * const *languages; unsigned int languages_count; /* Type 'T' indicates that the rule is applicable to Turkish languages only. */ if (type == 'T') { static const char * const turkish_languages[] = { "tr", "az" }; languages = turkish_languages; languages_count = 2; } else { static const char * const all_languages[] = { NULL }; languages = all_languages; languages_count = 1; } for (i = 0; i < languages_count; i++) { /* Store a new rule. */ struct casefold_rule *new_rule = (struct casefold_rule *) malloc (sizeof (struct casefold_rule)); new_rule->code = code; memcpy (new_rule->mapping, mapping, sizeof (new_rule->mapping)); new_rule->language = languages[i]; if (num_casefolding_rules == allocated_casefolding_rules) { allocated_casefolding_rules = 2 * allocated_casefolding_rules; if (allocated_casefolding_rules < 16) allocated_casefolding_rules = 16; casefolding_rules = (struct casefold_rule **) realloc (casefolding_rules, allocated_casefolding_rules * sizeof (struct casefold_rule *)); } casefolding_rules[num_casefolding_rules++] = new_rule; } } } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", casefolding_filename); exit (1); } } /* Casefold mapping, when it maps to a single character. */ unsigned int unicode_casefold[0x110000]; static unsigned int to_casefold (unsigned int ch) { return unicode_casefold[ch]; } /* Redistribute the casefolding_rules: - Rules that map to a single character, language independently, are stored in unicode_casefold. - Other rules are merged into casing_rules. */ static void redistribute_casefolding_rules (void) { unsigned int ch, i, j; /* Fill unicode_casefold[]. */ for (ch = 0; ch < 0x110000; ch++) unicode_casefold[ch] = ch; for (i = 0; i < num_casefolding_rules; i++) { struct casefold_rule *cfrule = casefolding_rules[i]; if (cfrule->language == NULL && cfrule->mapping[1] == 0) { ch = cfrule->code; assert (ch < 0x110000); unicode_casefold[ch] = cfrule->mapping[0]; } } /* Extend the special casing rules by filling in their casefold_mapping[] field. */ for (j = 0; j < num_casing_rules; j++) { struct special_casing_rule *rule = casing_rules[j]; unsigned int k; rule->casefold_mapping[0] = to_casefold (rule->code); for (k = 1; k < 3; k++) rule->casefold_mapping[k] = 0; } /* Now merge the other casefolding rules into casing_rules. */ for (i = 0; i < num_casefolding_rules; i++) { struct casefold_rule *cfrule = casefolding_rules[i]; if (!(cfrule->language == NULL && cfrule->mapping[1] == 0)) { /* Find a rule that applies to the same code, same language, and it has context SCC_ALWAYS. At the same time, update all rules that have the same code and same or more specific language. */ struct special_casing_rule *found_rule = NULL; for (j = 0; j < num_casing_rules; j++) { struct special_casing_rule *rule = casing_rules[j]; if (rule->code == cfrule->code && (cfrule->language == NULL || (rule->language != NULL && strcmp (rule->language, cfrule->language) == 0))) { memcpy (rule->casefold_mapping, cfrule->mapping, sizeof (rule->casefold_mapping)); if ((cfrule->language == NULL ? rule->language == NULL : rule->language != NULL && strcmp (rule->language, cfrule->language) == 0) && rule->context == SCC_ALWAYS) { /* Found it. */ found_rule = rule; } } } if (found_rule == NULL) { /* Create a new rule. */ struct special_casing_rule *new_rule = (struct special_casing_rule *) malloc (sizeof (struct special_casing_rule)); /* Try to find a rule that applies to the same code, no language restriction, and with context SCC_ALWAYS. */ for (j = 0; j < num_casing_rules; j++) { struct special_casing_rule *rule = casing_rules[j]; if (rule->code == cfrule->code && rule->context == SCC_ALWAYS && rule->language == NULL) { /* Found it. */ found_rule = rule; break; } } new_rule->code = cfrule->code; new_rule->language = cfrule->language; new_rule->context = SCC_ALWAYS; if (found_rule != NULL) { memcpy (new_rule->lower_mapping, found_rule->lower_mapping, sizeof (new_rule->lower_mapping)); memcpy (new_rule->title_mapping, found_rule->title_mapping, sizeof (new_rule->title_mapping)); memcpy (new_rule->upper_mapping, found_rule->upper_mapping, sizeof (new_rule->upper_mapping)); } else { unsigned int k; new_rule->lower_mapping[0] = to_lower (cfrule->code); for (k = 1; k < 3; k++) new_rule->lower_mapping[k] = 0; new_rule->title_mapping[0] = to_title (cfrule->code); for (k = 1; k < 3; k++) new_rule->title_mapping[k] = 0; new_rule->upper_mapping[0] = to_upper (cfrule->code); for (k = 1; k < 3; k++) new_rule->upper_mapping[k] = 0; } memcpy (new_rule->casefold_mapping, cfrule->mapping, sizeof (new_rule->casefold_mapping)); add_casing_rule (new_rule); } } } } static int compare_casing_rules (const void *a, const void *b) { struct special_casing_rule *a_rule = *(struct special_casing_rule **) a; struct special_casing_rule *b_rule = *(struct special_casing_rule **) b; unsigned int a_code = a_rule->code; unsigned int b_code = b_rule->code; if (a_code < b_code) return -1; if (a_code > b_code) return 1; /* Sort the more specific rules before the more general ones. */ return (- ((a_rule->language != NULL ? 1 : 0) + (a_rule->context != SCC_ALWAYS ? 1 : 0)) + ((b_rule->language != NULL ? 1 : 0) + (b_rule->context != SCC_ALWAYS ? 1 : 0))); } static void sort_casing_rules (void) { /* Sort the rules 1. by code, 2. by specificity. */ if (num_casing_rules > 1) qsort (casing_rules, num_casing_rules, sizeof (struct special_casing_rule *), compare_casing_rules); } /* Output the special casing rules. */ static void output_casing_rules (const char *filename, const char *version) { FILE *stream; unsigned int i, j; unsigned int minor; stream = fopen (filename, "w"); if (stream == NULL) { fprintf (stderr, "cannot open '%s' for writing\n", filename); exit (1); } fprintf (stream, "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */\n"); fprintf (stream, "/* Special casing rules of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); fprintf (stream, "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); output_library_license (stream, false); fprintf (stream, "\n"); fprintf (stream, "struct special_casing_rule { char code[3]; };\n"); fprintf (stream, "%%struct-type\n"); fprintf (stream, "%%language=ANSI-C\n"); fprintf (stream, "%%define slot-name code\n"); fprintf (stream, "%%define hash-function-name gl_unicase_special_hash\n"); fprintf (stream, "%%define lookup-function-name gl_unicase_special_lookup\n"); fprintf (stream, "%%compare-lengths\n"); fprintf (stream, "%%compare-strncmp\n"); fprintf (stream, "%%readonly-tables\n"); fprintf (stream, "%%omit-struct-type\n"); fprintf (stream, "%%%%\n"); minor = 0; for (i = 0; i < num_casing_rules; i++) { struct special_casing_rule *rule = casing_rules[i]; int context; if (i > 0 && rule->code == casing_rules[i - 1]->code) minor += 1; else minor = 0; if (!(rule->code < 0x10000)) { fprintf (stderr, "special rule #%u: code %u out of range\n", i, rule->code); exit (1); } fprintf (stream, "\"\\x%02x\\x%02x\\x%02x\", ", (rule->code >> 8) & 0xff, rule->code & 0xff, minor); fprintf (stream, "%d, ", i + 1 < num_casing_rules && casing_rules[i + 1]->code == rule->code ? 1 : 0); context = rule->context; if (context < 0) { fprintf (stream, "-"); context = - context; } else fprintf (stream, " "); switch (context) { case SCC_ALWAYS: fprintf (stream, "SCC_ALWAYS "); break; case SCC_FINAL_SIGMA: fprintf (stream, "SCC_FINAL_SIGMA "); break; case SCC_AFTER_SOFT_DOTTED: fprintf (stream, "SCC_AFTER_SOFT_DOTTED"); break; case SCC_MORE_ABOVE: fprintf (stream, "SCC_MORE_ABOVE "); break; case SCC_BEFORE_DOT: fprintf (stream, "SCC_BEFORE_DOT "); break; case SCC_AFTER_I: fprintf (stream, "SCC_AFTER_I "); break; default: abort (); } fprintf (stream, ", "); if (rule->language != NULL) { assert (strlen (rule->language) == 2); fprintf (stream, "{ '%c', '%c' }, ", rule->language[0], rule->language[1]); } else fprintf (stream, "{ '\\0', '\\0' }, "); fprintf (stream, "{ "); for (j = 0; j < 3; j++) { if (j > 0) fprintf (stream, ", "); if (!(rule->upper_mapping[j] < 0x10000)) { fprintf (stderr, "special rule #%u: upper mapping of code %u out of range\n", i, rule->code); exit (1); } if (rule->upper_mapping[j] != 0) fprintf (stream, "0x%04X", rule->upper_mapping[j]); else fprintf (stream, " 0"); } fprintf (stream, " }, { "); for (j = 0; j < 3; j++) { if (j > 0) fprintf (stream, ", "); if (!(rule->lower_mapping[j] < 0x10000)) { fprintf (stderr, "special rule #%u: lower mapping of code %u out of range\n", i, rule->code); exit (1); } if (rule->lower_mapping[j] != 0) fprintf (stream, "0x%04X", rule->lower_mapping[j]); else fprintf (stream, " 0"); } fprintf (stream, " }, { "); for (j = 0; j < 3; j++) { if (j > 0) fprintf (stream, ", "); if (!(rule->title_mapping[j] < 0x10000)) { fprintf (stderr, "special rule #%u: title mapping of code %u out of range\n", i, rule->code); exit (1); } if (rule->title_mapping[j] != 0) fprintf (stream, "0x%04X", rule->title_mapping[j]); else fprintf (stream, " 0"); } fprintf (stream, " }, { "); for (j = 0; j < 3; j++) { if (j > 0) fprintf (stream, ", "); if (!(rule->casefold_mapping[j] < 0x10000)) { fprintf (stderr, "special rule #%u: casefold mapping of code %u out of range\n", i, rule->code); exit (1); } if (rule->casefold_mapping[j] != 0) fprintf (stream, "0x%04X", rule->casefold_mapping[j]); else fprintf (stream, " 0"); } fprintf (stream, " }\n"); } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error writing to '%s'\n", filename); exit (1); } } /* ========================================================================= */ /* Quoting the Unicode standard: Definition: A character is defined to be "cased" if it has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter. */ static bool is_cased (unsigned int ch) { return (is_property_lowercase (ch) || is_property_uppercase (ch) || is_category_Lt (ch)); } /* Quoting the Unicode standard: Definition: A character is defined to be "case-ignorable" if it has the value MidLetter {or the value MidNumLet} for the Word_Break property or its General_Category is one of Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk). The text marked in braces was added in Unicode 5.1.0, see <https://www.unicode.org/versions/Unicode5.1.0/> section "Update of Definition of case-ignorable". */ /* Since this predicate is only used for the "Before C" and "After C" conditions of FINAL_SIGMA, we exclude the "cased" characters here. This simplifies the evaluation of the regular expressions \p{cased} (\p{case-ignorable})* C and C (\p{case-ignorable})* \p{cased} */ static bool is_case_ignorable (unsigned int ch) { return (unicode_org_wbp[ch] == WBP_MIDLETTER || unicode_org_wbp[ch] == WBP_MIDNUMLET || is_category_Mn (ch) || is_category_Me (ch) || is_category_Cf (ch) || is_category_Lm (ch) || is_category_Sk (ch)) && !is_cased (ch); } /* ------------------------------------------------------------------------- */ /* Output all case related properties. */ static void output_casing_properties (const char *version) { #define PROPERTY(FN,P) \ debug_output_predicate ("unicase/" #FN ".txt", is_ ## P); \ output_predicate_test ("../tests/unicase/test-" #FN ".c", is_ ## P, "uc_is_" #P " (c)"); \ output_predicate ("unicase/" #FN ".h", is_ ## P, "u_casing_property_" #P, "Casing Properties", version); PROPERTY(cased, cased) PROPERTY(ignorable, case_ignorable) #undef PROPERTY } /* ========================================================================= */ int main (int argc, char * argv[]) { const char *unicodedata_filename; const char *proplist_filename; const char *derivedproplist_filename; const char *arabicshaping_filename; const char *scripts_filename; const char *blocks_filename; const char *proplist30_filename; const char *eastasianwidth_filename; const char *linebreak_filename; const char *wordbreakproperty_filename; const char *graphemebreakproperty_filename; const char *compositionexclusions_filename; const char *specialcasing_filename; const char *casefolding_filename; const char *version; if (argc != 16) { fprintf (stderr, "Usage: %s UnicodeData.txt PropList.txt DerivedCoreProperties.txt ArabicShaping.txt Scripts.txt Blocks.txt PropList-3.0.1.txt EastAsianWidth.txt LineBreak.txt WordBreakProperty.txt GraphemeBreakProperty.txt CompositionExclusions.txt SpecialCasing.txt CaseFolding.txt version\n", argv[0]); exit (1); } unicodedata_filename = argv[1]; proplist_filename = argv[2]; derivedproplist_filename = argv[3]; arabicshaping_filename = argv[4]; scripts_filename = argv[5]; blocks_filename = argv[6]; proplist30_filename = argv[7]; eastasianwidth_filename = argv[8]; linebreak_filename = argv[9]; wordbreakproperty_filename = argv[10]; graphemebreakproperty_filename = argv[11]; compositionexclusions_filename = argv[12]; specialcasing_filename = argv[13]; casefolding_filename = argv[14]; version = argv[15]; fill_attributes (unicodedata_filename); clear_properties (); fill_properties (proplist_filename); fill_properties (derivedproplist_filename); fill_properties30 (proplist30_filename); fill_arabicshaping (arabicshaping_filename); fill_scripts (scripts_filename); fill_blocks (blocks_filename); fill_width (eastasianwidth_filename); fill_org_lbp (linebreak_filename); fill_org_wbp (wordbreakproperty_filename); fill_org_gbp (graphemebreakproperty_filename); fill_composition_exclusions (compositionexclusions_filename); fill_casing_rules (specialcasing_filename); fill_casefolding_rules (casefolding_filename); redistribute_casefolding_rules (); sort_casing_rules (); output_categories (version); output_category ("unictype/categ_of.h", version); output_combclass ("unictype/combiningclass.h", version); output_bidi_category ("unictype/bidi_of.h", version); output_decimal_digit_test ("../tests/unictype/test-decdigit.h", version); output_decimal_digit ("unictype/decdigit.h", version); output_digit_test ("../tests/unictype/test-digit.h", version); output_digit ("unictype/digit.h", version); output_numeric_test ("../tests/unictype/test-numeric.h", version); output_numeric ("unictype/numeric.h", version); output_mirror ("unictype/mirror.h", version); output_properties (version); output_joining_type_test ("../tests/unictype/test-joiningtype_of.h", version); output_joining_type ("unictype/joiningtype_of.h", version); output_joining_group_test ("../tests/unictype/test-joininggroup_of.h", version); output_joining_group ("unictype/joininggroup_of.h", version); output_scripts (version); output_scripts_byname (version); output_blocks (version); output_ident_properties (version); output_nonspacing_property ("uniwidth/width.c.part"); output_width_property_test ("../tests/uniwidth/test-uc_width2.sh.part"); output_old_ctype (version); debug_output_lbrk_tables ("unilbrk/lbrkprop.txt"); debug_output_org_lbrk_tables ("unilbrk/lbrkprop_org.txt"); output_lbrk_tables ("unilbrk/lbrkprop1.h", "unilbrk/lbrkprop2.h", version); debug_output_wbrk_tables ("uniwbrk/wbrkprop.txt"); debug_output_org_wbrk_tables ("uniwbrk/wbrkprop_org.txt"); output_wbrk_tables ("uniwbrk/wbrkprop.h", version); output_gbp_test ("../tests/unigbrk/test-uc-gbrk-prop.h"); output_gbp_table ("unigbrk/gbrkprop.h", version); output_decomposition_tables ("uninorm/decomposition-table1.h", "uninorm/decomposition-table2.h", version); debug_output_composition_tables ("uninorm/composition.txt"); output_composition_tables ("uninorm/composition-table.gperf", version); output_simple_mapping_test ("../tests/unicase/test-uc_toupper.c", "uc_toupper", to_upper, version); output_simple_mapping_test ("../tests/unicase/test-uc_tolower.c", "uc_tolower", to_lower, version); output_simple_mapping_test ("../tests/unicase/test-uc_totitle.c", "uc_totitle", to_title, version); output_simple_mapping ("unicase/toupper.h", to_upper, version); output_simple_mapping ("unicase/tolower.h", to_lower, version); output_simple_mapping ("unicase/totitle.h", to_title, version); output_simple_mapping ("unicase/tocasefold.h", to_casefold, version); output_casing_rules ("unicase/special-casing-table.gperf", version); output_casing_properties (version); return 0; } /* * Local Variables: * coding: utf-8 * compile-command: "\ * gcc -O -Wall gen-uni-tables.c -Iunictype -o gen-uni-tables && \\ * ./gen-uni-tables \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/UnicodeData.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/PropList.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/DerivedCoreProperties.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/ArabicShaping.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/Scripts.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/Blocks.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/3.0.1/PropList-3.0.1.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/EastAsianWidth.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/LineBreak.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/auxiliary/WordBreakProperty.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/auxiliary/GraphemeBreakProperty.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/CompositionExclusions.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/SpecialCasing.txt \\ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/9.0.0/ucd/CaseFolding.txt \\ * 9.0.0 \\ * && diff unilbrk/lbrkprop_org.txt unilbrk/lbrkprop.txt \\ * && diff uniwbrk/wbrkprop_org.txt uniwbrk/wbrkprop.txt" * End: */ ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get-permissions.c�������������������������������������������������������0000664�0000000�0000000�00000020176�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get permissions of a file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include <string.h> #include "acl.h" #include "acl-internal.h" /* Read the permissions of a file into CTX. If DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on NAME. MODE is the file mode obtained from a previous stat call. Return 0 if successful. Return -1 and set errno upon failure. */ int get_permissions (const char *name, int desc, mode_t mode, struct permission_context *ctx) { memset (ctx, 0, sizeof *ctx); ctx->mode = mode; #if USE_ACL && HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ if (HAVE_ACL_GET_FD && desc != -1) ctx->acl = acl_get_fd (desc); else ctx->acl = acl_get_file (name, ACL_TYPE_ACCESS); if (ctx->acl == NULL) return acl_errno_valid (errno) ? -1 : 0; /* With POSIX ACLs, a file cannot have "no" acl; a file without extended permissions has a "minimal" acl which is equivalent to the file mode. */ if (S_ISDIR (mode)) { ctx->default_acl = acl_get_file (name, ACL_TYPE_DEFAULT); if (ctx->default_acl == NULL) return -1; } # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ /* TODO (see set_permissions). */ # endif # else /* HAVE_ACL_TYPE_EXTENDED */ /* Mac OS X */ /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) always return NULL / EINVAL. You have to use acl_get_file (name, ACL_TYPE_EXTENDED) or acl_get_fd (open (name, ...)) to retrieve an ACL. On the other hand, acl_set_file (name, ACL_TYPE_ACCESS, acl) and acl_set_file (name, ACL_TYPE_DEFAULT, acl) have the same effect as acl_set_file (name, ACL_TYPE_EXTENDED, acl): Each of these calls sets the file's ACL. */ if (HAVE_ACL_GET_FD && desc != -1) ctx->acl = acl_get_fd (desc); else ctx->acl = acl_get_file (name, ACL_TYPE_EXTENDED); if (ctx->acl == NULL) return acl_errno_valid (errno) ? -1 : 0; # endif #elif USE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions of Unixware. The acl() call returns the access and default ACL both at once. */ # ifdef ACE_GETACL /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 file systems (whereas the other ones are used in UFS file systems). There is an API pathconf (name, _PC_ACL_ENABLED) fpathconf (desc, _PC_ACL_ENABLED) that allows us to determine which of the two kinds of ACLs is supported for the given file. But some file systems may implement this call incorrectly, so better not use it. When fetching the source ACL, we simply fetch both ACL types. When setting the destination ACL, we try either ACL types, assuming that the kernel will translate the ACL from one form to the other. (See in <https://docs.oracle.com/cd/E86824_01/html/E54765/acl-2.html> the description of ENOTSUP.) */ for (;;) { int ret; if (desc != -1) ret = facl (desc, ACE_GETACLCNT, 0, NULL); else ret = acl (name, ACE_GETACLCNT, 0, NULL); if (ret < 0) { if (errno == ENOSYS || errno == EINVAL) ret = 0; else return -1; } ctx->ace_count = ret; if (ctx->ace_count == 0) break; ctx->ace_entries = (ace_t *) malloc (ctx->ace_count * sizeof (ace_t)); if (ctx->ace_entries == NULL) { errno = ENOMEM; return -1; } if (desc != -1) ret = facl (desc, ACE_GETACL, ctx->ace_count, ctx->ace_entries); else ret = acl (name, ACE_GETACL, ctx->ace_count, ctx->ace_entries); if (ret < 0) { if (errno == ENOSYS || errno == EINVAL) { free (ctx->ace_entries); ctx->ace_entries = NULL; ctx->ace_count = 0; break; } else return -1; } if (ret <= ctx->ace_count) { ctx->ace_count = ret; break; } /* Huh? The number of ACL entries has increased since the last call. Repeat. */ free (ctx->ace_entries); ctx->ace_entries = NULL; } # endif for (;;) { int ret; if (desc != -1) ret = facl (desc, GETACLCNT, 0, NULL); else ret = acl (name, GETACLCNT, 0, NULL); if (ret < 0) { if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) ret = 0; else return -1; } ctx->count = ret; if (ctx->count == 0) break; ctx->entries = (aclent_t *) malloc (ctx->count * sizeof (aclent_t)); if (ctx->entries == NULL) { errno = ENOMEM; return -1; } if (desc != -1) ret = facl (desc, GETACL, ctx->count, ctx->entries); else ret = acl (name, GETACL, ctx->count, ctx->entries); if (ret < 0) { if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) { free (ctx->entries); ctx->entries = NULL; ctx->count = 0; break; } else return -1; } if (ret <= ctx->count) { ctx->count = ret; break; } /* Huh? The number of ACL entries has increased since the last call. Repeat. */ free (ctx->entries); ctx->entries = NULL; } #elif USE_ACL && HAVE_GETACL /* HP-UX */ { int ret; if (desc != -1) ret = fgetacl (desc, NACLENTRIES, ctx->entries); else ret = getacl (name, NACLENTRIES, ctx->entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) ret = 0; else return -1; } else if (ret > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->count = ret; # if HAVE_ACLV_H ret = acl ((char *) name, ACL_GET, NACLVENTRIES, ctx->aclv_entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) ret = 0; else return -2; } else if (ret > NACLVENTRIES) /* If NACLVENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->aclv_count = ret; # endif } #elif USE_ACL && HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ /* TODO (see set_permissions). */ #elif USE_ACL && HAVE_STATACL /* older AIX */ { int ret; if (desc != -1) ret = fstatacl (desc, STX_NORMAL, &ctx->u.a, sizeof ctx->u); else ret = statacl ((char *) name, STX_NORMAL, &ctx->u.a, sizeof ctx->u); if (ret == 0) ctx->have_u = true; } #elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ { int ret = acl ((char *) name, ACL_GET, NACLENTRIES, ctx->entries); if (ret < 0) return -1; else if (ret > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->count = ret; } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get-rusage-as.c���������������������������������������������������������0000664�0000000�0000000�00000031362�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getter for RLIMIT_AS. Copyright (C) 2011-2021 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 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> /* On Android, when targeting Android 4.4 or older with a GCC toolchain, prevent a compilation error "error: call to 'mmap' declared with attribute error: mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21. Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang." The files that we access in this compilation unit are less than 2 GB large. */ #if defined __ANDROID__ # undef _FILE_OFFSET_BITS #endif /* Specification. */ #include "resource-ext.h" /* The "address space size" is defined as the total size of the virtual memory areas of the current process. This includes - areas belonging to the executable and shared libraries, - areas allocated by malloc() or mmap(), - the stack and environment areas, - gaps and guard pages (mappings with PROT_NONE), - other system dependent areas, such as vsyscall or vdso on Linux. There are two ways of retrieving the current address space size: a) by trying setrlimit with various values and observing whether the kernel allows additional mmap calls, b) by using system dependent APIs that allow to iterate over the list of virtual memory areas. We don't use the mincore() based approach here, because it would be very slow when applied to an entire address space, especially on 64-bit platforms. We define two functions get_rusage_as_via_setrlimit(), get_rusage_as_via_iterator(). Discussion per platform: Linux: a) setrlimit with RLIMIT_AS works. b) The /proc/self/maps file contains a list of the virtual memory areas. Both methods agree, except that on x86_64 systems, the value of get_rusage_as_via_iterator() is 4 KB higher than get_rusage_as_via_setrlimit(). Mac OS X: a) setrlimit with RLIMIT_AS succeeds but does not really work: The OS ignores RLIMIT_AS. mmap() of a page always succeeds, therefore get_rusage_as_via_setrlimit() is always 0. b) The Mach based API works. FreeBSD: a) setrlimit with RLIMIT_AS works. b) The /proc/self/maps file contains a list of the virtual memory areas. NetBSD: a) setrlimit with RLIMIT_AS works. b) The /proc/self/maps file contains a list of the virtual memory areas. Both methods agree, OpenBSD: a) setrlimit exists, but RLIMIT_AS is not defined. b) mquery() can be used to find out about the virtual memory areas. AIX: a) setrlimit with RLIMIT_AS succeeds but does not really work: The OS apparently ignores RLIMIT_AS. mmap() of a page always succeeds, therefore get_rusage_as_via_setrlimit() is always 0. b) No VMA iteration API exists. HP-UX: a) setrlimit with RLIMIT_AS works. b) pstat_getprocvm() can be used to find out about the virtual memory areas. Both methods agree, except that the value of get_rusage_as_via_iterator() is slightly larger higher than get_rusage_as_via_setrlimit(), by 4 KB in 32-bit mode and by 40 KB in 64-bit mode. IRIX: a) setrlimit with RLIMIT_AS works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP. Both methods agree, OSF/1: a) setrlimit with RLIMIT_AS works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP. The value returned by get_rusage_as_via_setrlimit() is 64 KB higher than get_rusage_as_via_iterator(). It's not clear why. Solaris: a) setrlimit with RLIMIT_AS works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP, and the /proc/self/maps file contains a list of the virtual memory areas. Both methods agree, Cygwin: a) setrlimit with RLIMIT_AS always fails when the limit is < 0x80000000. get_rusage_as_via_setrlimit() therefore produces a wrong value. b) The /proc/$pid/maps file lists only the memory areas belonging to the executable and shared libraries, not the anonymous memory. But the native Windows API works. mingw: a) There is no setrlimit function. b) The native Windows API works. BeOS, Haiku: a) On BeOS, there is no setrlimit function. On Haiku, setrlimit exists. RLIMIT_AS is defined but setrlimit fails. b) There is a specific BeOS API: get_next_area_info(). */ #include <errno.h> /* errno */ #include <stdlib.h> /* size_t, abort */ #include <fcntl.h> /* open, O_RDONLY */ #include <unistd.h> /* getpagesize, read, close */ /* System support for get_rusage_as_via_setrlimit(). */ #if HAVE_SETRLIMIT # include <sys/time.h> # include <sys/resource.h> /* getrlimit, setrlimit */ #endif /* Test whether mmap() and mprotect() are available. We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an mprotect() function in libgcc.a. */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # include <fcntl.h> # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ /* Define MAP_FILE when it isn't otherwise. */ # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif /* System support for get_rusage_as_via_iterator(). */ #include "vma-iter.h" #if HAVE_SETRLIMIT && defined RLIMIT_AS && HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __HAIKU__ static uintptr_t get_rusage_as_via_setrlimit (void) { uintptr_t result; struct rlimit orig_limit; # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0666); if (fd < 0) return 0; # endif /* Record the original limit. */ if (getrlimit (RLIMIT_AS, &orig_limit) < 0) { result = 0; goto done2; } if (orig_limit.rlim_max != RLIM_INFINITY && (orig_limit.rlim_cur == RLIM_INFINITY || orig_limit.rlim_cur > orig_limit.rlim_max)) /* We may not be able to restore the current rlim_cur value. So bail out. */ { result = 0; goto done2; } { /* The granularity is a single page. */ const size_t pagesize = getpagesize (); uintptr_t low_bound = 0; uintptr_t high_bound; for (;;) { /* Here we know that the address space size is >= low_bound. */ struct rlimit try_limit; uintptr_t try_next = 2 * low_bound + pagesize; if (try_next < low_bound) /* Overflow. */ try_next = ((uintptr_t) (~ 0) / pagesize) * pagesize; /* There's no point in trying a value > orig_limit.rlim_max, as setrlimit would fail anyway. */ if (orig_limit.rlim_max != RLIM_INFINITY && orig_limit.rlim_max < try_next) try_next = orig_limit.rlim_max; /* Avoid endless loop. */ if (try_next == low_bound) { /* try_next could not be increased. */ result = low_bound; goto done1; } try_limit.rlim_max = orig_limit.rlim_max; try_limit.rlim_cur = try_next; if (setrlimit (RLIMIT_AS, &try_limit) == 0) { /* Allocate a page of memory, to compare the current address space size with try_limit.rlim_cur. */ void *new_page = mmap (NULL, pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (new_page != (void *)(-1)) { /* The page could be added successfully. Free it. */ if (munmap (new_page, pagesize) < 0) abort (); /* We know that the address space size is < try_limit.rlim_cur. */ high_bound = try_next; break; } else { /* We know that the address space size is >= try_limit.rlim_cur. */ low_bound = try_next; } } else { /* Here we expect only EINVAL, not EPERM. */ if (errno != EINVAL) abort (); /* We know that the address space size is >= try_limit.rlim_cur. */ low_bound = try_next; } } /* Here we know that the address space size is >= low_bound and < high_bound. */ while (high_bound - low_bound > pagesize) { struct rlimit try_limit; uintptr_t try_next = low_bound + (((high_bound - low_bound) / 2) / pagesize) * pagesize; /* Here low_bound <= try_next < high_bound. */ try_limit.rlim_max = orig_limit.rlim_max; try_limit.rlim_cur = try_next; if (setrlimit (RLIMIT_AS, &try_limit) == 0) { /* Allocate a page of memory, to compare the current address space size with try_limit.rlim_cur. */ void *new_page = mmap (NULL, pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (new_page != (void *)(-1)) { /* The page could be added successfully. Free it. */ if (munmap (new_page, pagesize) < 0) abort (); /* We know that the address space size is < try_limit.rlim_cur. */ high_bound = try_next; } else { /* We know that the address space size is >= try_limit.rlim_cur. */ low_bound = try_next; } } else { /* Here we expect only EINVAL, not EPERM. */ if (errno != EINVAL) abort (); /* We know that the address space size is >= try_limit.rlim_cur. */ low_bound = try_next; } } result = low_bound; } done1: /* Restore the original rlim_cur value. */ if (setrlimit (RLIMIT_AS, &orig_limit) < 0) abort (); done2: # if !HAVE_MAP_ANONYMOUS close (fd); # endif return result; } #else static uintptr_t get_rusage_as_via_setrlimit (void) { return 0; } #endif #if VMA_ITERATE_SUPPORTED static int vma_iterate_callback (void *data, uintptr_t start, uintptr_t end, unsigned int flags) { uintptr_t *totalp = (uintptr_t *) data; *totalp += end - start; return 0; } static uintptr_t get_rusage_as_via_iterator (void) { uintptr_t total = 0; vma_iterate (vma_iterate_callback, &total); return total; } #else static uintptr_t get_rusage_as_via_iterator (void) { return 0; } #endif uintptr_t get_rusage_as (void) { #if (defined __APPLE__ && defined __MACH__) || defined _AIX || defined __CYGWIN__ || defined __MVS__ || defined __SANITIZE_THREAD__ /* Mac OS X, AIX, Cygwin, z/OS, gcc -fsanitize=thread */ /* get_rusage_as_via_setrlimit() does not work. Prefer get_rusage_as_via_iterator(). */ return get_rusage_as_via_iterator (); #elif HAVE_SETRLIMIT && defined RLIMIT_AS && HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __HAIKU__ /* Prefer get_rusage_as_via_setrlimit() if it succeeds, because the caller may want to use the result with setrlimit(). */ uintptr_t result; result = get_rusage_as_via_setrlimit (); if (result == 0) result = get_rusage_as_via_iterator (); return result; #else return get_rusage_as_via_iterator (); #endif } #ifdef TEST #include <stdio.h> int main () { printf ("Initially: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_as_via_setrlimit (), get_rusage_as_via_iterator (), get_rusage_as ()); malloc (0x88); printf ("After small malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_as_via_setrlimit (), get_rusage_as_via_iterator (), get_rusage_as ()); malloc (0x8812); printf ("After medium malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_as_via_setrlimit (), get_rusage_as_via_iterator (), get_rusage_as ()); malloc (0x281237); printf ("After large malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_as_via_setrlimit (), get_rusage_as_via_iterator (), get_rusage_as ()); return 0; } #endif /* TEST */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get-rusage-data.c�������������������������������������������������������0000664�0000000�0000000�00000034147�14110572173�0020174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getter for RLIMIT_DATA. Copyright (C) 2011-2021 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 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> /* Specification. */ #include "resource-ext.h" /* The "data segment size" is defined as the virtual memory area of the current process that contains malloc()ed memory. There are two ways of retrieving the current data segment size: a) by trying setrlimit with various values and observing whether the kernel allows additional sbrk() calls, b) by using system dependent APIs that allow to iterate over the list of virtual memory areas. We define two functions get_rusage_data_via_setrlimit(), get_rusage_data_via_iterator(). The variant a') by trying setrlimit with various values and observing whether additional malloc() calls succeed is not as good as a), because a malloc() call can be served by already allocated memory or through mmap(), and because a malloc() of 1 page may require 2 pages. Discussion per platform: Linux: a) setrlimit with RLIMIT_DATA works. b) The /proc/self/maps file contains a list of the virtual memory areas. get_rusage_data_via_setrlimit() returns the sum of the length of the executable's data segment plus the heap VMA (an anonymous memory area), whereas get_rusage_data_via_iterator() returns only the latter. Note that malloc() falls back on mmap() for large allocations and also for small allocations if there is not enough room in the data segment. Mac OS X: a) setrlimit with RLIMIT_DATA succeeds but does not really work: The OS ignores RLIMIT_DATA. Therefore get_rusage_data_via_setrlimit() is always 0. b) The Mach based API works. Note that malloc() falls back on mmap() for large allocations. FreeBSD: a) setrlimit with RLIMIT_DATA works. b) The /proc/self/maps file contains a list of the virtual memory areas. NetBSD: a) setrlimit with RLIMIT_DATA works. b) The /proc/self/maps file contains a list of the virtual memory areas. Both methods agree. Note that malloc() uses mmap() for large allocations. OpenBSD: a) setrlimit with RLIMIT_DATA works. b) mquery() can be used to find out about the virtual memory areas. get_rusage_data_via_setrlimit() works much better than get_rusage_data_via_iterator(). Note that malloc() appears to use mmap() for both large and small allocations. AIX: a) setrlimit with RLIMIT_DATA works. b) No VMA iteration API exists. HP-UX: a) setrlimit with RLIMIT_DATA works, except on HP-UX 11.00, where it cannot restore the previous limits, and except on HP-UX 11.11, where it sometimes has no effect. b) pstat_getprocvm() can be used to find out about the virtual memory areas. Both methods agree, except that the value of get_rusage_data_via_iterator() is sometimes 4 KB larger than get_rusage_data_via_setrlimit(). IRIX: a) setrlimit with RLIMIT_DATA works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP. get_rusage_data_via_setrlimit() works slightly better than get_rusage_data_via_iterator() before the first malloc() call. OSF/1: a) setrlimit with RLIMIT_DATA works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP. Both methods agree. Solaris: a) setrlimit with RLIMIT_DATA works. b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP, and the /proc/self/maps file contains a list of the virtual memory areas. get_rusage_data_via_setrlimit() ignores the data segment of the executable, whereas get_rusage_data_via_iterator() includes it. Cygwin: a) setrlimit with RLIMIT_DATA always fails. get_rusage_data_via_setrlimit() therefore produces a wrong value. b) The /proc/$pid/maps file lists only the memory areas belonging to the executable and shared libraries, not the anonymous memory. But the native Windows API works. Note that malloc() apparently falls back on mmap() for large allocations. mingw: a) There is no setrlimit function. b) There is no sbrk() function. Note that malloc() falls back on VirtualAlloc() for large allocations. BeOS, Haiku: a) On BeOS, there is no setrlimit function. On Haiku, setrlimit exists. RLIMIT_DATA is defined but setrlimit fails. b) There is a specific BeOS API: get_next_area_info(). */ #include <errno.h> /* errno */ #include <stdlib.h> /* size_t, abort, malloc, free, sbrk */ #include <fcntl.h> /* open, O_RDONLY */ #include <unistd.h> /* getpagesize, read, close */ /* System support for get_rusage_data_via_setrlimit(). */ #if HAVE_SETRLIMIT # include <sys/time.h> # include <sys/resource.h> /* getrlimit, setrlimit */ # include <sys/utsname.h> # include <string.h> /* strlen, strcmp */ #endif /* System support for get_rusage_data_via_iterator(). */ #include "vma-iter.h" #if !(defined __APPLE__ && defined __MACH__) || defined TEST /* Implement get_rusage_data_via_setrlimit(). */ # if HAVE_SETRLIMIT && defined RLIMIT_DATA && HAVE_SBRK && !defined __HAIKU__ # ifdef _AIX # define errno_expected() (errno == EINVAL || errno == EFAULT) # else # define errno_expected() (errno == EINVAL) # endif static uintptr_t get_rusage_data_via_setrlimit (void) { uintptr_t result; struct rlimit orig_limit; # ifdef __hpux /* On HP-UX 11.00, setrlimit() of RLIMIT_DATA does not work: It cannot restore the previous limits. On HP-UX 11.11, setrlimit() of RLIMIT_DATA does not work: It sometimes has no effect on the next sbrk() call. */ { struct utsname buf; if (uname (&buf) == 0 && strlen (buf.release) >= 5 && (strcmp (buf.release + strlen (buf.release) - 5, "11.00") == 0 || strcmp (buf.release + strlen (buf.release) - 5, "11.11") == 0)) return 0; } # endif /* Record the original limit. */ if (getrlimit (RLIMIT_DATA, &orig_limit) < 0) return 0; if (orig_limit.rlim_max != RLIM_INFINITY && (orig_limit.rlim_cur == RLIM_INFINITY || orig_limit.rlim_cur > orig_limit.rlim_max)) /* We may not be able to restore the current rlim_cur value. So bail out. */ return 0; { /* The granularity is a single page. */ const intptr_t pagesize = getpagesize (); uintptr_t low_bound = 0; uintptr_t high_bound; for (;;) { /* Here we know that the data segment size is >= low_bound. */ struct rlimit try_limit; uintptr_t try_next = 2 * low_bound + pagesize; if (try_next < low_bound) /* Overflow. */ try_next = ((uintptr_t) (~ 0) / pagesize) * pagesize; /* There's no point in trying a value > orig_limit.rlim_max, as setrlimit would fail anyway. */ if (orig_limit.rlim_max != RLIM_INFINITY && orig_limit.rlim_max < try_next) try_next = orig_limit.rlim_max; /* Avoid endless loop. */ if (try_next == low_bound) { /* try_next could not be increased. */ result = low_bound; goto done; } try_limit.rlim_max = orig_limit.rlim_max; try_limit.rlim_cur = try_next; if (setrlimit (RLIMIT_DATA, &try_limit) == 0) { /* Allocate a page of memory, to compare the current data segment size with try_limit.rlim_cur. */ void *new_page = sbrk (pagesize); if (new_page != (void *)(-1)) { /* The page could be added successfully. Free it. */ sbrk (- pagesize); /* We know that the data segment size is < try_limit.rlim_cur. */ high_bound = try_next; break; } else { /* We know that the data segment size is >= try_limit.rlim_cur. */ low_bound = try_next; } } else { /* Here we expect only EINVAL or (on AIX) EFAULT, not EPERM. */ if (! errno_expected ()) abort (); /* We know that the data segment size is >= try_limit.rlim_cur. */ low_bound = try_next; } } /* Here we know that the data segment size is >= low_bound and < high_bound. */ while (high_bound - low_bound > pagesize) { struct rlimit try_limit; uintptr_t try_next = low_bound + (((high_bound - low_bound) / 2) / pagesize) * pagesize; /* Here low_bound <= try_next < high_bound. */ try_limit.rlim_max = orig_limit.rlim_max; try_limit.rlim_cur = try_next; if (setrlimit (RLIMIT_DATA, &try_limit) == 0) { /* Allocate a page of memory, to compare the current data segment size with try_limit.rlim_cur. */ void *new_page = sbrk (pagesize); if (new_page != (void *)(-1)) { /* The page could be added successfully. Free it. */ sbrk (- pagesize); /* We know that the data segment size is < try_limit.rlim_cur. */ high_bound = try_next; } else { /* We know that the data segment size is >= try_limit.rlim_cur. */ low_bound = try_next; } } else { /* Here we expect only EINVAL or (on AIX) EFAULT, not EPERM. */ if (! errno_expected ()) abort (); /* We know that the data segment size is >= try_limit.rlim_cur. */ low_bound = try_next; } } result = low_bound; } done: /* Restore the original rlim_cur value. */ if (setrlimit (RLIMIT_DATA, &orig_limit) < 0) abort (); return result; } # else static uintptr_t get_rusage_data_via_setrlimit (void) { return 0; } # endif #endif #if !(defined __APPLE__ && defined __MACH__) || defined TEST /* Implement get_rusage_data_via_iterator(). */ # if VMA_ITERATE_SUPPORTED struct locals { uintptr_t brk_value; uintptr_t data_segment_size; }; static int vma_iterate_callback (void *data, uintptr_t start, uintptr_t end, unsigned int flags) { struct locals *lp = (struct locals *) data; if (start <= lp->brk_value && lp->brk_value - 1 <= end - 1) { lp->data_segment_size = end - start; return 1; } return 0; } static uintptr_t get_rusage_data_via_iterator (void) { # if (defined _WIN32 && !defined __CYGWIN__) || defined __BEOS__ || defined __HAIKU__ /* On native Windows, there is no sbrk() function. On Haiku, sbrk(0) always returns 0. */ static void *brk_value; if (brk_value == NULL) { brk_value = malloc (1); if (brk_value == NULL) return 0; } # else void *brk_value; brk_value = sbrk (0); if (brk_value == (void *)-1) return 0; # endif { struct locals l; l.brk_value = (uintptr_t) brk_value; l.data_segment_size = 0; vma_iterate (vma_iterate_callback, &l); return l.data_segment_size; } } # else static uintptr_t get_rusage_data_via_iterator (void) { return 0; } # endif #endif uintptr_t get_rusage_data (void) { #if (defined __APPLE__ && defined __MACH__) /* Mac OS X */ /* get_rusage_data_via_setrlimit() does not work: it always returns 0. get_rusage_data_via_iterator() does not work: it always returns 0x400000. And sbrk() is deprecated. */ return 0; #elif defined __minix /* Minix */ /* get_rusage_data_via_setrlimit() does not work: it always returns 0. get_rusage_data_via_iterator() does not work: it shrinks upon malloc. */ return 0; #elif defined __CYGWIN__ /* Cygwin */ /* get_rusage_data_via_setrlimit() does not work. Prefer get_rusage_data_via_iterator(). */ return get_rusage_data_via_iterator (); #elif HAVE_SETRLIMIT && defined RLIMIT_DATA && !defined __HAIKU__ # if defined __linux__ || defined __ANDROID__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined _AIX || defined __hpux || defined __sgi || defined __osf__ || defined __sun /* Linux, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris */ /* get_rusage_data_via_setrlimit() works. */ return get_rusage_data_via_setrlimit (); # else /* Prefer get_rusage_data_via_setrlimit() if it succeeds, because the caller may want to use the result with setrlimit(). */ uintptr_t result; result = get_rusage_data_via_setrlimit (); if (result == 0) result = get_rusage_data_via_iterator (); return result; # endif #else return get_rusage_data_via_iterator (); #endif } #ifdef TEST #include <stdio.h> int main () { printf ("Initially: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_data_via_setrlimit (), get_rusage_data_via_iterator (), get_rusage_data ()); malloc (0x88); printf ("After small malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_data_via_setrlimit (), get_rusage_data_via_iterator (), get_rusage_data ()); malloc (0x8812); printf ("After medium malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_data_via_setrlimit (), get_rusage_data_via_iterator (), get_rusage_data ()); malloc (0x281237); printf ("After large malloc: 0x%08lX 0x%08lX 0x%08lX\n", get_rusage_data_via_setrlimit (), get_rusage_data_via_iterator (), get_rusage_data ()); return 0; } #endif /* TEST */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get_ppid_of.c�����������������������������������������������������������0000664�0000000�0000000�00000023222�14110572173�0017471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the parent process of a given process. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. 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/>. */ #include <config.h> /* Specification. */ #include "get_ppid_of.h" #include <stdio.h> #include <string.h> #if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) || defined __GNU__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __minix || defined __sun /* Linux, GNU/kFreeBSD, GNU/Hurd, FreeBSD, NetBSD, Minix, Solaris */ # include <fcntl.h> # include <unistd.h> #endif #if defined __OpenBSD__ /* OpenBSD */ # include <sys/sysctl.h> /* sysctl, struct kinfo_proc */ #endif #if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # include <libproc.h> #endif #if defined _AIX /* AIX */ # include <procinfo.h> #endif #if defined __hpux /* HP-UX */ # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> #endif #if defined __sgi /* IRIX */ # include <unistd.h> # include <fcntl.h> # include <sys/procfs.h> #endif #if defined __CYGWIN__ /* Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* needed to get 'struct external_pinfo' defined */ # include <sys/cygwin.h> #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS, Haiku */ # include <unistd.h> #endif pid_t get_ppid_of (pid_t pid) { #if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) || defined __GNU__ /* Linux, GNU/kFreeBSD, GNU/Hurd */ /* GNU/kFreeBSD mounts /proc as linprocfs, which looks like a Linux /proc file system. */ /* Read the contents of /proc/<pid>/status into memory. */ char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/status", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { char buf[4096 + 1]; ssize_t nread = read (fd, buf, sizeof (buf) - 1); close (fd); if (nread >= 0) { char *bufend = buf + nread; char *p; /* NUL-terminate the buffer. */ *bufend = '\0'; /* Search for a line that starts with "PPid:". */ for (p = buf;;) { if (bufend - p >= 5 && memcmp (p, "PPid:", 5) == 0) { unsigned int ppid = 0; if (sscanf (p + 5, "%u", &ppid) > 0) return ppid; } p = strchr (p, '\n'); if (p != NULL) p++; else break; } } } #endif #if defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ /* FreeBSD, NetBSD */ /* Read the contents of /proc/<pid>/status into memory. */ char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/status", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { char buf[4096 + 1]; ssize_t nread = read (fd, buf, sizeof (buf) - 1); close (fd); if (nread >= 0) { char *p; /* NUL-terminate the buffer. */ buf[nread] = '\0'; /* Search for the third space-separated field. */ p = strchr (buf, ' '); if (p != NULL) { p = strchr (p + 1, ' '); if (p != NULL) { unsigned int ppid = 0; if (sscanf (p + 1, "%u", &ppid) > 0) return ppid; } } } } #endif #if defined __minix /* Minix */ /* Read the contents of /proc/<pid>/psinfo into memory. */ char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/psinfo", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { char buf[4096 + 1]; ssize_t nread = read (fd, buf, sizeof (buf) - 1); close (fd); if (nread >= 0) { char *p; int count; /* NUL-terminate the buffer. */ buf[nread] = '\0'; /* Search for the 16th space-separated field. */ p = strchr (buf, ' '); for (count = 1; p != NULL && count < 15; count++) p = strchr (p + 1, ' '); if (p != NULL) { unsigned int ppid = 0; if (sscanf (p + 1, "%u", &ppid) > 0) return ppid; } } } #endif #if defined __sun /* Solaris */ /* Read the contents of /proc/<pid>/psinfo into memory. Alternatively, we could read the contents of /proc/<pid>/status into memory. But it contains a lot of information that we don't need. */ char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/psinfo", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { /* The contents is a 'struct psinfo'. But since 'struct psinfo' has a different size in a 32-bit and a 64-bit environment, we avoid it. Nevertheless, the size of this contents depends on whether the process that reads it is 32-bit or 64-bit! */ #if defined __LP64__ # define PSINFO_SIZE 416 #else # define PSINFO_SIZE 336 #endif union { char all[PSINFO_SIZE]; unsigned int header[11]; } buf; ssize_t nread = read (fd, buf.all, sizeof (buf.all)); close (fd); if (nread >= (ssize_t) sizeof (buf.header)) return buf.header[3]; } #endif #if defined __OpenBSD__ /* OpenBSD */ /* Documentation: https://man.openbsd.org/sysctl.2 */ int info_path[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid, sizeof (struct kinfo_proc), 1 }; struct kinfo_proc info; size_t len; len = sizeof (info); if (sysctl (info_path, 6, &info, &len, NULL, 0) >= 0 && len == sizeof (info)) return info.p_ppid; #endif #if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # if defined PROC_PIDT_SHORTBSDINFO struct proc_bsdshortinfo info; if (proc_pidinfo (pid, PROC_PIDT_SHORTBSDINFO, 0, &info, sizeof (info)) == sizeof (info)) return info.pbsi_ppid; # else /* Note: The second part of 'struct proc_bsdinfo' differs in size between 32-bit and 64-bit environments, and the kernel of Mac OS X 10.5 knows only about the 32-bit 'struct proc_bsdinfo'. Fortunately all the info we need is in the first part, which is the same in 32-bit and 64-bit. */ struct proc_bsdinfo info; if (proc_pidinfo (pid, PROC_PIDTBSDINFO, 0, &info, 128) == 128) return info.pbi_ppid; # endif #endif #if defined _AIX /* AIX */ /* Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ struct procentry64 procs; if (getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) > 0) return procs.pi_ppid; #endif #if defined __hpux /* HP-UX */ struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) return status.pst_ppid; else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) return *(unsigned long long *)(status64 + 24); # endif } #endif #if defined __sgi /* IRIX */ char filename[12 + 10 + 1]; int fd; sprintf (filename, "/proc/pinfo/%u", pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) return buf.pr_ppid; } #endif #if defined __CYGWIN__ /* Cygwin */ struct external_pinfo *info = (struct external_pinfo *) cygwin_internal (CW_GETPINFO, pid); if (info != NULL) return info->ppid; #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS, Haiku */ if (pid == getpid ()) return getppid (); #endif return 0; } #ifdef TEST #include <stdlib.h> #include <unistd.h> /* Usage: ./a.out or: ./a.out PID */ int main (int argc, char *argv[]) { char *arg = argv[1]; pid_t pid = (arg != NULL ? atoi (arg) : getpid ()); pid_t parent = get_ppid_of (pid); printf ("PID=%lu PPID=%lu\n", (unsigned long) pid, (unsigned long) parent); return 0; } /* * Local Variables: * compile-command: "gcc -ggdb -DTEST -Wall -I.. get_ppid_of.c" * End: */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get_ppid_of.h�����������������������������������������������������������0000664�0000000�0000000�00000002167�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the parent process of a given process. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. 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/>. */ #ifndef _GET_PPID_OF_H #define _GET_PPID_OF_H #include <sys/types.h> #ifdef __cplusplus extern "C" { #endif /* Returns the process id of the parent process of the given process, or 0 if it cannot be determined. */ extern pid_t get_ppid_of (pid_t pid); #ifdef __cplusplus } #endif #endif /* _GET_PPID_OF_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get_progname_of.c�������������������������������������������������������0000664�0000000�0000000�00000036244�14110572173�0020355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the program name of a given process. Copyright (C) 2016-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. 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/>. */ #include <config.h> /* Specification. */ #include "get_progname_of.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) || defined __GNU__ || defined __NetBSD__ || defined __FreeBSD__ /* Linux, GNU/kFreeBSD, GNU/Hurd, NetBSD, FreeBSD */ # include <unistd.h> # if defined __ANDROID__ # include <fcntl.h> # endif #endif #if defined __minix || defined __sun /* Minix, Solaris */ # include <fcntl.h> # include <unistd.h> #endif #if defined __OpenBSD__ /* OpenBSD */ # include <sys/sysctl.h> /* sysctl, struct kinfo_proc */ #endif #if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # include <libproc.h> #endif #if defined _AIX /* AIX */ # include <procinfo.h> #endif #if defined __hpux /* HP-UX */ # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> #endif #if defined __sgi /* IRIX */ # include <unistd.h> # include <fcntl.h> # include <sys/procfs.h> #endif #if defined __CYGWIN__ /* Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* needed to get 'struct external_pinfo' defined */ # include <sys/cygwin.h> #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS, Haiku */ # include <OS.h> #endif char * get_progname_of (pid_t pid) { #if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) || defined __GNU__ || defined __NetBSD__ /* Linux, GNU/kFreeBSD, GNU/Hurd, NetBSD */ /* GNU/kFreeBSD mounts /proc as linprocfs, which looks like a Linux /proc file system. */ /* Read the symlink /proc/<pid>/exe. */ { char filename[6 + 10 + 4 + 1]; char linkbuf[1024 + 1]; ssize_t linklen; sprintf (filename, "/proc/%u/exe", (unsigned int) pid); linklen = readlink (filename, linkbuf, sizeof (linkbuf) - 1); if (linklen > 0) { char *slash; /* NUL-terminate the link. */ linkbuf[linklen] = '\0'; /* Find the portion after the last slash. */ slash = strrchr (linkbuf, '/'); return strdup (slash != NULL ? slash + 1 : linkbuf); } } # if defined __ANDROID__ /* But it may fail with "Permission denied". As a fallback, read the contents of /proc/<pid>/cmdline into memory. */ { char filename[6 + 10 + 8 + 1]; int fd; sprintf (filename, "/proc/%u/cmdline", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { char buf[4096 + 1]; ssize_t nread = read (fd, buf, sizeof (buf) - 1); close (fd); if (nread >= 0) { char *slash; /* NUL-terminate the buffer (just in case it does not have the expected format). */ buf[nread] = '\0'; /* The program name and each argument is followed by a NUL byte. */ /* Find the portion after the last slash. */ slash = strrchr (buf, '/'); return strdup (slash != NULL ? slash + 1 : buf); } } } # endif #endif #if defined __FreeBSD__ /* FreeBSD */ /* Read the symlink /proc/<pid>/file. */ char filename[6 + 10 + 5 + 1]; char linkbuf[1024 + 1]; ssize_t linklen; sprintf (filename, "/proc/%u/file", (unsigned int) pid); linklen = readlink (filename, linkbuf, sizeof (linkbuf) - 1); if (linklen > 0) { char *slash; /* NUL-terminate the link. */ linkbuf[linklen] = '\0'; /* Find the portion after the last slash. */ slash = strrchr (linkbuf, '/'); return strdup (slash != NULL ? slash + 1 : linkbuf); } #endif #if defined __minix /* Minix */ /* Read the contents of /proc/<pid>/psinfo into memory. */ char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/psinfo", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { char buf[4096 + 1]; ssize_t nread = read (fd, buf, sizeof (buf) - 1); close (fd); if (nread >= 0) { char *p; int count; /* NUL-terminate the buffer. */ buf[nread] = '\0'; /* Search for the 4th space-separated field. */ p = strchr (buf, ' '); for (count = 1; p != NULL && count < 3; count++) p = strchr (p + 1, ' '); if (p != NULL) { char *start = p + 1; char *end = strchr (p + 1, ' '); if (end != NULL) { *end = '\0'; return strdup (start); } } } } #endif #if defined __sun /* Solaris */ /* Read the symlink /proc/<pid>/path/a.out. When it succeeds, it doesn't truncate. */ { char filename[6 + 10 + 11 + 1]; char linkbuf[1024 + 1]; ssize_t linklen; sprintf (filename, "/proc/%u/path/a.out", (unsigned int) pid); linklen = readlink (filename, linkbuf, sizeof (linkbuf) - 1); if (linklen > 0) { char *slash; /* NUL-terminate the link. */ linkbuf[linklen] = '\0'; /* Find the portion after the last slash. */ slash = strrchr (linkbuf, '/'); return strdup (slash != NULL ? slash + 1 : linkbuf); } } /* But it may fail with "Permission denied". As a fallback, read the contents of /proc/<pid>/psinfo into memory. Alternatively, we could read the contents of /proc/<pid>/status into memory. But it contains a lot of information that we don't need. */ { char filename[6 + 10 + 7 + 1]; int fd; sprintf (filename, "/proc/%u/psinfo", (unsigned int) pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd >= 0) { /* The contents is a 'struct psinfo'. But since 'struct psinfo' has a different size in a 32-bit and a 64-bit environment, we avoid it. Nevertheless, the size of this contents depends on whether the process that reads it is 32-bit or 64-bit! */ #if defined __LP64__ # define PSINFO_SIZE 416 # define PSINFO_FNAME_OFFSET 136 #else # define PSINFO_SIZE 336 # define PSINFO_FNAME_OFFSET 88 #endif char buf[PSINFO_SIZE]; ssize_t nread = read (fd, buf, sizeof (buf)); close (fd); if (nread >= PSINFO_FNAME_OFFSET + 16) { /* Make sure it's NUL-terminated. */ buf[PSINFO_FNAME_OFFSET + 16] = '\0'; return strdup (&buf[PSINFO_FNAME_OFFSET]); } } } #endif #if defined __OpenBSD__ /* OpenBSD */ /* Documentation: https://man.openbsd.org/sysctl.2 */ int info_path[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid, sizeof (struct kinfo_proc), 1 }; struct kinfo_proc info; size_t len; len = sizeof (info); if (sysctl (info_path, 6, &info, &len, NULL, 0) >= 0 && len == sizeof (info)) return strdup (info.p_comm); #endif #if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # if defined PROC_PIDT_SHORTBSDINFO struct proc_bsdshortinfo info; if (proc_pidinfo (pid, PROC_PIDT_SHORTBSDINFO, 0, &info, sizeof (info)) == sizeof (info)) return strdup (info.pbsi_comm); # else /* Note: The second part of 'struct proc_bsdinfo' differs in size between 32-bit and 64-bit environments, and the kernel of Mac OS X 10.5 knows only about the 32-bit 'struct proc_bsdinfo'. Fortunately all the info we need is in the first part, which is the same in 32-bit and 64-bit. */ struct proc_bsdinfo info; if (proc_pidinfo (pid, PROC_PIDTBSDINFO, 0, &info, 128) == 128) return strdup (info.pbi_comm); # endif #endif #if defined _AIX /* AIX */ /* Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ struct procentry64 procs; if (getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) > 0) return strdup (procs.pi_comm); #endif #if defined __hpux /* HP-UX */ char *p; struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (p != NULL) return strdup (p); #endif #if defined __sgi /* IRIX */ char filename[12 + 10 + 1]; int fd; sprintf (filename, "/proc/pinfo/%u", pid); fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } #endif #if defined __CYGWIN__ /* Cygwin */ struct external_pinfo *info = (struct external_pinfo *) cygwin_internal (CW_GETPINFO, pid); if (info != NULL) { const char *name = info->progname; size_t namesize = sizeof (info->progname); /* It may not be NUL-terminated. */ const char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; /* Find the portion after the last backslash. Cygwin does not have memrchr(). */ { const char *backslash = memchr (name, '\\', namelen); if (backslash != NULL) { const char *name_end = name + namelen; for (;;) { const char *next_backslash = memchr (backslash + 1, '\\', name_end - (backslash + 1)); if (next_backslash == NULL) break; backslash = next_backslash; } name = backslash + 1; namelen = name_end - name; } } { char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS, Haiku */ team_info info; if (_get_team_info (pid, &info, sizeof (info)) == B_OK) { const char *name = info.args; size_t namesize = sizeof (info.args); /* It may not be NUL-terminated. */ const char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; /* Take the portion up to the first space. */ { const char *space = memchr (name, ' ', namelen); if (space != NULL) namelen = space - name; } /* Find the portion after the last slash. */ { const char *slash = memchr (name, '/', namelen); if (slash != NULL) { const char *name_end = name + namelen; for (;;) { const char *next_slash = memchr (slash + 1, '/', name_end - (slash + 1)); if (next_slash == NULL) break; slash = next_slash; } name = slash + 1; namelen = name_end - name; } } { char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } #endif return NULL; } #ifdef TEST #include <stdlib.h> #include <unistd.h> /* Usage: ./a.out or: ./a.out PID */ int main (int argc, char *argv[]) { char *arg = argv[1]; pid_t pid = (arg != NULL ? atoi (arg) : getpid ()); char *progname = get_progname_of (pid); printf ("PID=%lu COMMAND=%s\n", (unsigned long) pid, progname != NULL ? progname : "(null)"); free (progname); return 0; } /* * Local Variables: * compile-command: "gcc -ggdb -DTEST -Wall -I.. get_progname_of.c" * End: */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/get_progname_of.h�������������������������������������������������������0000664�0000000�0000000�00000002407�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the program name of a given process. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. 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/>. */ #ifndef _GET_PROGNAME_OF_H #define _GET_PROGNAME_OF_H #include <stdlib.h> #include <sys/types.h> #ifdef __cplusplus extern "C" { #endif /* Returns the base name of the program that executes the given process, possibly truncated, as a freshly allocated string, or NULL if it cannot be determined. */ extern char *get_progname_of (pid_t pid) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _GET_PROGNAME_OF_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getaddrinfo.c�����������������������������������������������������������0000664�0000000�0000000�00000026425�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get address information (partial implementation). Copyright (C) 1997, 2001-2002, 2004-2021 Free Software Foundation, Inc. Contributed by Simon Josefsson <simon@josefsson.org>. 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/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the sa == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <netdb.h> #if HAVE_NETINET_IN_H # include <netinet/in.h> #endif /* Get inet_ntop. */ #include <arpa/inet.h> /* Get calloc. */ #include <stdlib.h> /* Get memcpy, strdup. */ #include <string.h> /* Get snprintf. */ #include <stdio.h> #include <stdbool.h> #include "gettext.h" #define _(String) gettext (String) #define N_(String) String /* BeOS has AF_INET, but not PF_INET. */ #ifndef PF_INET # define PF_INET AF_INET #endif /* BeOS also lacks PF_UNSPEC. */ #ifndef PF_UNSPEC # define PF_UNSPEC 0 #endif #if HAVE_GETADDRINFO /* Override with cdecl calling convention. */ int getaddrinfo (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res) # undef getaddrinfo { return getaddrinfo (nodename, servname, hints, res); } void freeaddrinfo (struct addrinfo *ai) # undef freeaddrinfo { freeaddrinfo (ai); } #else # if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # endif /* gl_sockets_startup */ # include "sockets.h" # ifdef WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef GetModuleHandle # define GetModuleHandle GetModuleHandleA # if !(_WIN32_WINNT >= _WIN32_WINNT_WINXP) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress typedef int (WSAAPI *getaddrinfo_func) (const char*, const char*, const struct addrinfo*, struct addrinfo**); typedef void (WSAAPI *freeaddrinfo_func) (struct addrinfo*); typedef int (WSAAPI *getnameinfo_func) (const struct sockaddr*, socklen_t, char*, DWORD, char*, DWORD, int); static getaddrinfo_func getaddrinfo_ptr = NULL; static freeaddrinfo_func freeaddrinfo_ptr = NULL; static getnameinfo_func getnameinfo_ptr = NULL; static int use_win32_p (void) { static int done = 0; HMODULE h; if (done) return getaddrinfo_ptr ? 1 : 0; done = 1; h = GetModuleHandle ("ws2_32.dll"); if (h) { getaddrinfo_ptr = (getaddrinfo_func) GetProcAddress (h, "getaddrinfo"); freeaddrinfo_ptr = (freeaddrinfo_func) GetProcAddress (h, "freeaddrinfo"); getnameinfo_ptr = (getnameinfo_func) GetProcAddress (h, "getnameinfo"); } /* If either is missing, something is odd. */ if (!getaddrinfo_ptr || !freeaddrinfo_ptr || !getnameinfo_ptr) { getaddrinfo_ptr = NULL; freeaddrinfo_ptr = NULL; getnameinfo_ptr = NULL; return 0; } gl_sockets_startup (SOCKETS_1_1); return 1; } # else static int use_win32_p (void) { static int done = 0; if (!done) { done = 1; gl_sockets_startup (SOCKETS_1_1); } return 1; } # define getaddrinfo_ptr getaddrinfo # define freeaddrinfo_ptr freeaddrinfo # define getnameinfo_ptr getnameinfo # endif # endif static bool validate_family (int family) { /* FIXME: Support more families. */ # if HAVE_IPV4 if (family == PF_INET) return true; # endif # if HAVE_IPV6 if (family == PF_INET6) return true; # endif if (family == PF_UNSPEC) return true; return false; } /* Translate name of a service location and/or a service name to set of socket addresses. */ int getaddrinfo (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res) #undef getaddrinfo { struct addrinfo *tmp; int port = 0; struct hostent *he; void *storage; size_t size; # if HAVE_IPV6 struct v6_pair { struct addrinfo addrinfo; struct sockaddr_in6 sockaddr_in6; }; # endif # if HAVE_IPV4 struct v4_pair { struct addrinfo addrinfo; struct sockaddr_in sockaddr_in; }; # endif # ifdef WINDOWS_NATIVE if (use_win32_p ()) return getaddrinfo_ptr (nodename, servname, hints, res); # endif if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE))) /* FIXME: Support more flags. */ return EAI_BADFLAGS; if (hints && !validate_family (hints->ai_family)) return EAI_FAMILY; if (hints && hints->ai_socktype != SOCK_STREAM && hints->ai_socktype != SOCK_DGRAM) /* FIXME: Support other socktype. */ return EAI_SOCKTYPE; /* FIXME: Better return code? */ if (!nodename) { if (!(hints->ai_flags & AI_PASSIVE)) return EAI_NONAME; # ifdef HAVE_IPV6 nodename = (hints->ai_family == AF_INET6) ? "::" : "0.0.0.0"; # else nodename = "0.0.0.0"; # endif } if (servname) { struct servent *se = NULL; const char *proto = (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp"; if (hints == NULL || !(hints->ai_flags & AI_NUMERICSERV)) /* FIXME: Use getservbyname_r if available. */ se = getservbyname (servname, proto); if (!se) { char *c; if (!(*servname >= '0' && *servname <= '9')) return EAI_NONAME; port = strtoul (servname, &c, 10); if (*c || port > 0xffff) return EAI_NONAME; port = htons (port); } else port = se->s_port; } /* FIXME: Use gethostbyname_r if available. */ he = gethostbyname (nodename); if (!he || he->h_addr_list[0] == NULL) return EAI_NONAME; switch (he->h_addrtype) { # if HAVE_IPV6 case PF_INET6: size = sizeof (struct v6_pair); break; # endif # if HAVE_IPV4 case PF_INET: size = sizeof (struct v4_pair); break; # endif default: return EAI_NODATA; } storage = calloc (1, size); if (!storage) return EAI_MEMORY; switch (he->h_addrtype) { # if HAVE_IPV6 case PF_INET6: { struct v6_pair *p = storage; struct sockaddr_in6 *sinp = &p->sockaddr_in6; tmp = &p->addrinfo; if (port) sinp->sin6_port = port; if (he->h_length != sizeof (sinp->sin6_addr)) { free (storage); return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */ } memcpy (&sinp->sin6_addr, he->h_addr_list[0], sizeof sinp->sin6_addr); tmp->ai_addr = (struct sockaddr *) sinp; tmp->ai_addrlen = sizeof *sinp; } break; # endif # if HAVE_IPV4 case PF_INET: { struct v4_pair *p = storage; struct sockaddr_in *sinp = &p->sockaddr_in; tmp = &p->addrinfo; if (port) sinp->sin_port = port; if (he->h_length != sizeof (sinp->sin_addr)) { free (storage); return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */ } memcpy (&sinp->sin_addr, he->h_addr_list[0], sizeof sinp->sin_addr); tmp->ai_addr = (struct sockaddr *) sinp; tmp->ai_addrlen = sizeof *sinp; } break; # endif default: free (storage); return EAI_NODATA; } if (hints && hints->ai_flags & AI_CANONNAME) { const char *cn; if (he->h_name) cn = he->h_name; else cn = nodename; tmp->ai_canonname = strdup (cn); if (!tmp->ai_canonname) { free (storage); return EAI_MEMORY; } } tmp->ai_protocol = (hints) ? hints->ai_protocol : 0; tmp->ai_socktype = (hints) ? hints->ai_socktype : 0; tmp->ai_addr->sa_family = he->h_addrtype; tmp->ai_family = he->h_addrtype; # ifdef HAVE_STRUCT_SOCKADDR_SA_LEN switch (he->h_addrtype) { # if HAVE_IPV4 case AF_INET: tmp->ai_addr->sa_len = sizeof (struct sockaddr_in); break; # endif # if HAVE_IPV6 case AF_INET6: tmp->ai_addr->sa_len = sizeof (struct sockaddr_in6); break; # endif } # endif /* FIXME: If more than one address, create linked list of addrinfo's. */ *res = tmp; return 0; } /* Free 'addrinfo' structure AI including associated storage. */ void freeaddrinfo (struct addrinfo *ai) #undef freeaddrinfo { # ifdef WINDOWS_NATIVE if (use_win32_p ()) { freeaddrinfo_ptr (ai); return; } # endif while (ai) { struct addrinfo *cur; cur = ai; ai = ai->ai_next; free (cur->ai_canonname); free (cur); } } int getnameinfo (const struct sockaddr *restrict sa, socklen_t salen, char *restrict node, socklen_t nodelen, char *restrict service, socklen_t servicelen, int flags) #undef getnameinfo { # ifdef WINDOWS_NATIVE if (use_win32_p ()) return getnameinfo_ptr (sa, salen, node, nodelen, service, servicelen, flags); # endif /* FIXME: Support other flags. */ if ((node && nodelen > 0 && !(flags & NI_NUMERICHOST)) || (service && servicelen > 0 && !(flags & NI_NUMERICHOST)) || (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV))) return EAI_BADFLAGS; if (sa == NULL || salen < sizeof (sa->sa_family)) return EAI_FAMILY; switch (sa->sa_family) { # if HAVE_IPV4 case AF_INET: if (salen < sizeof (struct sockaddr_in)) return EAI_FAMILY; break; # endif # if HAVE_IPV6 case AF_INET6: if (salen < sizeof (struct sockaddr_in6)) return EAI_FAMILY; break; # endif default: return EAI_FAMILY; } if (node && nodelen > 0 && flags & NI_NUMERICHOST) { switch (sa->sa_family) { # if HAVE_IPV4 case AF_INET: if (!inet_ntop (AF_INET, &(((const struct sockaddr_in *) sa)->sin_addr), node, nodelen)) return EAI_SYSTEM; break; # endif # if HAVE_IPV6 case AF_INET6: if (!inet_ntop (AF_INET6, &(((const struct sockaddr_in6 *) sa)->sin6_addr), node, nodelen)) return EAI_SYSTEM; break; # endif default: return EAI_FAMILY; } } if (service && servicelen > 0 && flags & NI_NUMERICSERV) switch (sa->sa_family) { # if HAVE_IPV4 case AF_INET: # endif # if HAVE_IPV6 case AF_INET6: # endif { unsigned short int port = ntohs (((const struct sockaddr_in *) sa)->sin_port); if (servicelen <= snprintf (service, servicelen, "%u", port)) return EAI_OVERFLOW; } break; } return 0; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getcwd-lgpl.c�����������������������������������������������������������0000664�0000000�0000000�00000006266�14110572173�0017434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ #include <config.h> /* Specification */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #if GNULIB_GETCWD /* Favor GPL getcwd.c if both getcwd and getcwd-lgpl modules are in use. */ typedef int dummy; #else /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL if the directory couldn't be determined (perhaps because the absolute name was longer than PATH_MAX, or because of missing read/search permissions on parent directories) or SIZE was too small. If successful, returns BUF. If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # undef getcwd # if defined _WIN32 && !defined __CYGWIN__ # define getcwd _getcwd # endif char * rpl_getcwd (char *buf, size_t size) { char *ptr; char *result; /* Handle single size operations. */ if (buf) { if (!size) { errno = EINVAL; return NULL; } return getcwd (buf, size); } if (size) { buf = malloc (size); if (!buf) { errno = ENOMEM; return NULL; } result = getcwd (buf, size); if (!result) free (buf); return result; } /* Flexible sizing requested. Avoid over-allocation for the common case of a name that fits within a 4k page, minus some space for local variables, to be sure we don't skip over a guard page. */ { char tmp[4032]; size = sizeof tmp; ptr = getcwd (tmp, size); if (ptr) { result = strdup (ptr); if (!result) errno = ENOMEM; return result; } if (errno != ERANGE) return NULL; } /* My what a large directory name we have. */ do { size <<= 1; ptr = realloc (buf, size); if (ptr == NULL) { free (buf); errno = ENOMEM; return NULL; } buf = ptr; result = getcwd (buf, size); } while (!result && errno == ERANGE); if (!result) free (buf); else { /* Here result == buf. */ /* Shrink result before returning it. */ size_t actual_size = strlen (result) + 1; if (actual_size < size) { char *shrinked_result = realloc (result, actual_size); if (shrinked_result != NULL) result = shrinked_result; } } return result; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getcwd.c����������������������������������������������������������������0000664�0000000�0000000�00000033135�14110572173�0016473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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/>. */ #if !_LIBC # include <config.h> # include <unistd.h> # include "pathmax.h" #else # define HAVE_OPENAT 1 # define D_INO_IN_DIRENT 1 # define HAVE_MSVC_INVALID_PARAMETER_HANDLER 0 # define HAVE_MINIMALLY_WORKING_GETCWD 0 #endif #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> #include <stddef.h> #include <fcntl.h> /* For AT_FDCWD on Solaris 9. */ /* If this host provides the openat function or if we're using the gnulib replacement function with a native fdopendir, then enable code below to make getcwd more efficient and robust. */ #if defined HAVE_OPENAT || (defined GNULIB_OPENAT && defined HAVE_FDOPENDIR) # define HAVE_OPENAT_SUPPORT 1 #else # define HAVE_OPENAT_SUPPORT 0 #endif #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif #include <dirent.h> #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(d) strlen ((d)->d_name) #endif #ifndef _D_ALLOC_NAMLEN # define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1) #endif #include <unistd.h> #include <stdlib.h> #include <string.h> #if _LIBC # ifndef mempcpy # define mempcpy __mempcpy # endif #endif #ifndef MAX # define MAX(a, b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /* In this file, PATH_MAX only serves as a threshold for choosing among two algorithms. */ #ifndef PATH_MAX # define PATH_MAX 8192 #endif #if D_INO_IN_DIRENT # define MATCHING_INO(dp, ino) ((dp)->d_ino == (ino)) #else # define MATCHING_INO(dp, ino) true #endif #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #if !_LIBC # define GETCWD_RETURN_TYPE char * # define __close_nocancel_nostatus close # define __getcwd_generic rpl_getcwd # undef stat64 # define stat64 stat # define __fstat64 fstat # define __fstatat64 fstatat # define __lstat64 lstat # define __closedir closedir # define __opendir opendir # define __readdir64 readdir # define __fdopendir fdopendir # define __openat openat # define __rewinddir rewinddir # define __openat64 openat # define dirent64 dirent #else # include <not-cancel.h> #endif /* The results of opendir() in this file are not used with dirfd and fchdir, and we do not leak fds to any single-threaded code that could use stdio, therefore save some unnecessary recursion in fchdir.c. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use opendir_safer and openat_safer. */ #ifdef GNULIB_defined_opendir # undef opendir #endif #ifdef GNULIB_defined_closedir # undef closedir #endif #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static char * getcwd_nothrow (char *buf, size_t size) { char *result; TRY_MSVC_INVAL { result = _getcwd (buf, size); } CATCH_MSVC_INVAL { result = NULL; errno = ERANGE; } DONE_MSVC_INVAL; return result; } # else # define getcwd_nothrow _getcwd # endif # define getcwd_system getcwd_nothrow #else # define getcwd_system getcwd #endif /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL with errno set if the directory couldn't be determined or SIZE was too small. If successful, returns BUF. In GNU, if BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ GETCWD_RETURN_TYPE __getcwd_generic (char *buf, size_t size) { /* Lengths of big file name components and entire file names, and a deep level of file name nesting. These numbers are not upper bounds; they are merely large values suitable for initial allocations, designed to be large enough for most real-world uses. */ enum { BIG_FILE_NAME_COMPONENT_LENGTH = 255, BIG_FILE_NAME_LENGTH = MIN (4095, PATH_MAX - 1), DEEP_NESTING = 100 }; #if HAVE_OPENAT_SUPPORT int fd = AT_FDCWD; bool fd_needs_closing = false; #else char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1]; char *dotlist = dots; size_t dotsize = sizeof dots; size_t dotlen = 0; #endif DIR *dirstream = NULL; dev_t rootdev, thisdev; ino_t rootino, thisino; char *dir; register char *dirp; struct stat64 st; size_t allocated = size; size_t used; #if HAVE_MINIMALLY_WORKING_GETCWD /* If AT_FDCWD is not defined, the algorithm below is O(N**2) and this is much slower than the system getcwd (at least on GNU/Linux). So trust the system getcwd's results unless they look suspicious. Use the system getcwd even if we have openat support, since the system getcwd works even when a parent is unreadable, while the openat-based approach does not. But on AIX 5.1..7.1, the system getcwd is not even minimally working: If the current directory name is slightly longer than PATH_MAX, it omits the first directory component and returns this wrong result with errno = 0. */ # undef getcwd dir = getcwd_system (buf, size); if (dir || (size && errno == ERANGE)) return dir; /* Solaris getcwd (NULL, 0) fails with errno == EINVAL, but it has internal magic that lets it work even if an ancestor directory is inaccessible, which is better in many cases. So in this case try again with a buffer that's almost always big enough. */ if (errno == EINVAL && buf == NULL && size == 0) { char big_buffer[BIG_FILE_NAME_LENGTH + 1]; dir = getcwd_system (big_buffer, sizeof big_buffer); if (dir) return strdup (dir); } # if HAVE_PARTLY_WORKING_GETCWD /* The system getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. */ if (errno != ERANGE && errno != ENAMETOOLONG && errno != ENOENT) return NULL; # endif #endif if (size == 0) { if (buf != NULL) { __set_errno (EINVAL); return NULL; } allocated = BIG_FILE_NAME_LENGTH + 1; } if (buf == NULL) { dir = malloc (allocated); if (dir == NULL) return NULL; } else dir = buf; dirp = dir + allocated; *--dirp = '\0'; if (__lstat64 (".", &st) < 0) goto lose; thisdev = st.st_dev; thisino = st.st_ino; if (__lstat64 ("/", &st) < 0) goto lose; rootdev = st.st_dev; rootino = st.st_ino; while (!(thisdev == rootdev && thisino == rootino)) { struct dirent64 *d; dev_t dotdev; ino_t dotino; bool mount_point; int parent_status; size_t dirroom; size_t namlen; bool use_d_ino = true; /* Look at the parent directory. */ #if HAVE_OPENAT_SUPPORT fd = __openat64 (fd, "..", O_RDONLY); if (fd < 0) goto lose; fd_needs_closing = true; parent_status = __fstat64 (fd, &st); #else dotlist[dotlen++] = '.'; dotlist[dotlen++] = '.'; dotlist[dotlen] = '\0'; parent_status = __lstat64 (dotlist, &st); #endif if (parent_status != 0) goto lose; if (dirstream && __closedir (dirstream) != 0) { dirstream = NULL; goto lose; } /* Figure out if this directory is a mount point. */ dotdev = st.st_dev; dotino = st.st_ino; mount_point = dotdev != thisdev; /* Search for the last directory. */ #if HAVE_OPENAT_SUPPORT dirstream = __fdopendir (fd); if (dirstream == NULL) goto lose; fd_needs_closing = false; #else dirstream = __opendir (dotlist); if (dirstream == NULL) goto lose; dotlist[dotlen++] = '/'; #endif for (;;) { /* Clear errno to distinguish EOF from error if readdir returns NULL. */ __set_errno (0); d = __readdir64 (dirstream); /* When we've iterated through all directory entries without finding one with a matching d_ino, rewind the stream and consider each name again, but this time, using lstat. This is necessary in a chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where .., ../.., ../../.., etc. all had the same device number, yet the d_ino values for entries in / did not match those obtained via lstat. */ if (d == NULL && errno == 0 && use_d_ino) { use_d_ino = false; __rewinddir (dirstream); d = __readdir64 (dirstream); } if (d == NULL) { if (errno == 0) /* EOF on dirstream, which can mean e.g., that the current directory has been removed. */ __set_errno (ENOENT); goto lose; } if (d->d_name[0] == '.' && (d->d_name[1] == '\0' || (d->d_name[1] == '.' && d->d_name[2] == '\0'))) continue; if (use_d_ino) { bool match = (MATCHING_INO (d, thisino) || mount_point); if (! match) continue; } { int entry_status; #if HAVE_OPENAT_SUPPORT entry_status = __fstatat64 (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW); #else /* Compute size needed for this file name, or for the file name ".." in the same directory, whichever is larger. Room for ".." might be needed the next time through the outer loop. */ size_t name_alloc = _D_ALLOC_NAMLEN (d); size_t filesize = dotlen + MAX (sizeof "..", name_alloc); if (filesize < dotlen) goto memory_exhausted; if (dotsize < filesize) { /* My, what a deep directory tree you have, Grandma. */ size_t newsize = MAX (filesize, dotsize * 2); size_t i; if (newsize < dotsize) goto memory_exhausted; if (dotlist != dots) free (dotlist); dotlist = malloc (newsize); if (dotlist == NULL) goto lose; dotsize = newsize; i = 0; do { dotlist[i++] = '.'; dotlist[i++] = '.'; dotlist[i++] = '/'; } while (i < dotlen); } memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d)); entry_status = __lstat64 (dotlist, &st); #endif /* We don't fail here if we cannot stat() a directory entry. This can happen when (network) file systems fail. If this entry is in fact the one we are looking for we will find out soon as we reach the end of the directory without having found anything. */ if (entry_status == 0 && S_ISDIR (st.st_mode) && st.st_dev == thisdev && st.st_ino == thisino) break; } } dirroom = dirp - dir; namlen = _D_EXACT_NAMLEN (d); if (dirroom <= namlen) { if (size != 0) { __set_errno (ERANGE); goto lose; } else { char *tmp; size_t oldsize = allocated; allocated += MAX (allocated, namlen); if (allocated < oldsize || ! (tmp = realloc (dir, allocated))) goto memory_exhausted; /* Move current contents up to the end of the buffer. This is guaranteed to be non-overlapping. */ dirp = memcpy (tmp + allocated - (oldsize - dirroom), tmp + dirroom, oldsize - dirroom); dir = tmp; } } dirp -= namlen; memcpy (dirp, d->d_name, namlen); *--dirp = '/'; thisdev = dotdev; thisino = dotino; } if (dirstream && __closedir (dirstream) != 0) { dirstream = NULL; goto lose; } if (dirp == &dir[allocated - 1]) *--dirp = '/'; #if ! HAVE_OPENAT_SUPPORT if (dotlist != dots) free (dotlist); #endif used = dir + allocated - dirp; memmove (dir, dirp, used); if (size == 0) /* Ensure that the buffer is only as large as necessary. */ buf = (used < allocated ? realloc (dir, used) : dir); if (buf == NULL) /* Either buf was NULL all along, or 'realloc' failed but we still have the original string. */ buf = dir; return buf; memory_exhausted: __set_errno (ENOMEM); lose: { int save = errno; if (dirstream) __closedir (dirstream); #if HAVE_OPENAT_SUPPORT if (fd_needs_closing) __close_nocancel_nostatus (fd); #else if (dotlist != dots) free (dotlist); #endif if (buf == NULL) free (dir); __set_errno (save); } return NULL; } #if defined _LIBC && !defined GETCWD_RETURN_TYPE libc_hidden_def (__getcwd) weak_alias (__getcwd, getcwd) #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getdelim.c��������������������������������������������������������������0000664�0000000�0000000�00000007553�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2021 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/>. */ /* Ported from glibc by Simon Josefsson. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdio.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <errno.h> #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" # define getc_maybe_unlocked(fp) getc(fp) #elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile # undef funlockfile # define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) # define getc_maybe_unlocked(fp) getc(fp) #else # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif static void alloc_failed (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* Avoid errno problem without using the realloc module; see: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) { ssize_t result; size_t cur_len = 0; if (lineptr == NULL || n == NULL || fp == NULL) { errno = EINVAL; return -1; } flockfile (fp); if (*lineptr == NULL || *n == 0) { char *new_lineptr; *n = 120; new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; } for (;;) { int i; i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1; break; } /* Make enough space for len+1 (for final NUL) bytes. */ if (cur_len + 1 >= *n) { size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; size_t needed = 2 * *n + 1; /* Be generous. */ char *new_lineptr; if (needed_max < needed) needed = needed_max; if (cur_len + 1 >= needed) { result = -1; errno = EOVERFLOW; goto unlock_return; } new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; *n = needed; } (*lineptr)[cur_len] = i; cur_len++; if (i == delimiter) break; } (*lineptr)[cur_len] = '\0'; result = cur_len ? cur_len : result; unlock_return: funlockfile (fp); /* doesn't set errno */ return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getdomainname.c���������������������������������������������������������0000664�0000000�0000000�00000005261�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdomainname emulation for systems that doesn't have it. Copyright (C) 2003, 2006, 2008, 2010-2021 Free Software Foundation, Inc. This 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 Simon Josefsson. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <limits.h> #include <string.h> #include <errno.h> #if HAVE_SYSINFO && HAVE_SYS_SYSTEMINFO_H /* IRIX, OSF/1, Solaris */ # include <sys/systeminfo.h> #endif /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ int getdomainname (char *name, size_t len) #undef getdomainname { #if HAVE_GETDOMAINNAME /* Mac OS X, FreeBSD, AIX, IRIX, OSF/1 */ extern int getdomainname (char *, int); if (len > INT_MAX) len = INT_MAX; return getdomainname (name, (int) len); #elif HAVE_SYSINFO && HAVE_SYS_SYSTEMINFO_H && defined SI_SRPC_DOMAIN /* Solaris */ int ret; /* The third argument is a 'long', but the return value must fit in an 'int', therefore it's better to avoid arguments > INT_MAX. */ ret = sysinfo (SI_SRPC_DOMAIN, name, len > INT_MAX ? INT_MAX : len); if (ret < 0) /* errno is set here. */ return -1; if (ret > len) { errno = EINVAL; return -1; } return 0; #else /* HP-UX, Cygwin, mingw */ const char *result = ""; /* Hardcode your domain name if you want. */ size_t result_len = strlen (result); if (result_len > len) { errno = EINVAL; return -1; } memcpy (name, result, result_len); if (result_len < len) name[result_len] = '\0'; return 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getdtablesize.c���������������������������������������������������������0000664�0000000�0000000�00000006565�14110572173�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include <limits.h> # include <sys/resource.h> # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getentropy.c������������������������������������������������������������0000664�0000000�0000000�00000002651�14110572173�0017415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill a buffer with random bytes. Copyright 2020-2021 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 Paul Eggert. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <sys/random.h> /* Overwrite BUFFER with random data. BUFFER contains LENGTH bytes. LENGTH must be at most 256. Return 0 on success, -1 (setting errno) on failure. */ int getentropy (void *buffer, size_t length) { char *buf = buffer; if (length <= 256) for (;;) { ssize_t bytes; if (length == 0) return 0; while ((bytes = getrandom (buf, length, 0)) < 0) if (errno != EINTR) return -1; if (bytes == 0) break; buf += bytes; length -= bytes; } errno = EIO; return -1; } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getfilecon.c������������������������������������������������������������0000664�0000000�0000000�00000004564�14110572173�0017341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wrap getfilecon, lgetfilecon, and fgetfilecon Copyright (C) 2009-2021 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 Jim Meyering */ #include <config.h> #include <selinux/selinux.h> #include <sys/types.h> #include <errno.h> #include <string.h> /* FIXME: remove this once there is an errno-gnu module that guarantees the definition of ENODATA. */ #ifndef ENODATA # define ENODATA ENOTSUP #endif #undef getfilecon #undef lgetfilecon #undef fgetfilecon int getfilecon (char const *file, char **con); int lgetfilecon (char const *file, char **con); int fgetfilecon (int fd, char **con); /* getfilecon, lgetfilecon, and fgetfilecon can all misbehave, be it via an old version of libselinux where these would return 0 and set the result context to NULL, or via a modern kernel+lib operating on a file from a disk whose attributes were set by a kernel from around 2006. In that latter case, the functions return a length of 10 for the "unlabeled" context. Map both failures to a return value of -1, and set errno to ENOTSUP in the first case, and ENODATA in the latter. */ static int map_to_failure (int ret, char **con) { if (ret == 0) { errno = ENOTSUP; return -1; } if (ret == 10 && strcmp (*con, "unlabeled") == 0) { freecon (*con); *con = NULL; errno = ENODATA; return -1; } return ret; } int rpl_getfilecon (char const *file, char **con) { int ret = getfilecon (file, con); return map_to_failure (ret, con); } int rpl_lgetfilecon (char const *file, char **con) { int ret = lgetfilecon (file, con); return map_to_failure (ret, con); } int rpl_fgetfilecon (int fd, char**con) { int ret = fgetfilecon (fd, con); return map_to_failure (ret, con); } ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getgroups.c�������������������������������������������������������������0000664�0000000�0000000�00000007070�14110572173�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide consistent interface to getgroups for systems that don't allow N==0 Copyright (C) 1996, 1999, 2003, 2006-2021 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 Jim Meyering */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <stdint.h> #if !HAVE_GETGROUPS /* Provide a stub that fails with ENOSYS, since there is no group information available on mingw. */ int getgroups (_GL_UNUSED int n, _GL_UNUSED GETGROUPS_T *groups) { errno = ENOSYS; return -1; } #else /* HAVE_GETGROUPS */ # undef getgroups # ifndef GETGROUPS_ZERO_BUG # define GETGROUPS_ZERO_BUG 0 # endif /* On OS X 10.6 and later, use the usual getgroups, not the one supplied when _DARWIN_C_SOURCE is defined. _DARWIN_C_SOURCE is normally defined, since it means "conform to POSIX, but add non-POSIX extensions even if that violates the POSIX namespace rules", which is what we normally want. But with getgroups there is an inconsistency, and _DARWIN_C_SOURCE means "change getgroups() so that it no longer works right". The BUGS section of compat(5) says that the behavior is dubious if you compile different sections of a program with different _DARWIN_C_SOURCE settings, so fix only the offending symbol. */ # ifdef __APPLE__ int posix_getgroups (int, gid_t []) __asm ("_getgroups"); # define getgroups posix_getgroups # endif /* On at least NeXTstep 3.2, getgroups (0, NULL) always fails. On other systems, it returns the number of supplemental groups for the process. This function handles that special case and lets the system-provided function handle all others. However, it can fail with ENOMEM if memory is tight. It is unspecified whether the effective group id is included in the list. */ int rpl_getgroups (int n, gid_t *group) { int n_groups; GETGROUPS_T *gbuf; if (n < 0) { errno = EINVAL; return -1; } if (n != 0 || !GETGROUPS_ZERO_BUG) { int result; if (sizeof *group == sizeof *gbuf) return getgroups (n, (GETGROUPS_T *) group); if (SIZE_MAX / sizeof *gbuf <= n) { errno = ENOMEM; return -1; } gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; result = getgroups (n, gbuf); if (0 <= result) { n = result; while (n--) group[n] = gbuf[n]; } free (gbuf); return result; } n = 20; while (1) { /* No need to worry about address arithmetic overflow here, since the ancient systems that we're running on have low limits on the number of secondary groups. */ gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; n_groups = getgroups (n, gbuf); if (n_groups == -1 ? errno != EINVAL : n_groups < n) break; free (gbuf); n *= 2; } free (gbuf); return n_groups; } #endif /* HAVE_GETGROUPS */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gethostname.c�����������������������������������������������������������0000664�0000000�0000000�00000005364�14110572173�0017537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethostname emulation for SysV and POSIX.1. Copyright (C) 1992, 2003, 2006, 2008-2021 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/>. */ /* David MacKenzie <djm@gnu.ai.mit.edu> Windows port by Simon Josefsson <simon@josefsson.org> */ #include <config.h> #if !(defined _WIN32 && !defined __CYGWIN__) /* Unix API. */ /* Specification. */ #include <unistd.h> #ifdef HAVE_UNAME # include <sys/utsname.h> #endif #include <string.h> /* Put up to LEN chars of the host name into NAME. Null terminate it if the name is shorter than LEN. Return 0 if ok, -1 if error. */ #include <stddef.h> int gethostname (char *name, size_t len) { #ifdef HAVE_UNAME struct utsname uts; if (uname (&uts) == -1) return -1; if (len > sizeof (uts.nodename)) { /* More space than we need is available. */ name[sizeof (uts.nodename)] = '\0'; len = sizeof (uts.nodename); } strncpy (name, uts.nodename, len); #else strcpy (name, ""); /* Hardcode your system name if you want. */ #endif return 0; } #else /* Native Windows API. Which primitive to choose? - gethostname() requires linking with -lws2_32. - GetComputerName() does not return the right kind of hostname. - GetComputerNameEx(ComputerNameDnsHostname,...) returns the right hostname, but it is hard to use portably: - It requires defining _WIN32_WINNT to at least 0x0500. - With mingw, it also requires "#define GetComputerNameEx GetComputerNameExA". - With older versions of mingw, none of the declarations are present at all, not even of the enum value ComputerNameDnsHostname. So we use gethostname(). Linking with -lws2_32 is the least evil. */ #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <unistd.h> /* Get INT_MAX. */ #include <limits.h> /* Get set_winsock_errno. */ #include "w32sock.h" #include "sockets.h" #undef gethostname int rpl_gethostname (char *name, size_t len) { int r; if (len > INT_MAX) len = INT_MAX; gl_sockets_startup (SOCKETS_1_1); r = gethostname (name, (int) len); if (r < 0) set_winsock_errno (); return r; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gethrxtime.c������������������������������������������������������������0000664�0000000�0000000�00000003652�14110572173�0017377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethrxtime -- get high resolution real time Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #define GETHRXTIME_INLINE _GL_EXTERN_INLINE #include "gethrxtime.h" #if ! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME) #include <sys/time.h> #include "timespec.h" /* Get the current time, as a count of the number of nanoseconds since an arbitrary epoch (e.g., the system boot time). Prefer a high-resolution clock that is not subject to resetting or drifting. */ xtime_t gethrxtime (void) { # if HAVE_NANOUPTIME { struct timespec ts; nanouptime (&ts); return xtime_make (ts.tv_sec, ts.tv_nsec); } # else # if defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME { struct timespec ts; if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0) return xtime_make (ts.tv_sec, ts.tv_nsec); } # endif # if HAVE_MICROUPTIME { struct timeval tv; microuptime (&tv); return xtime_make (tv.tv_sec, 1000 * tv.tv_usec); } # else /* No monotonically increasing clocks are available; fall back on a clock that might jump backwards, since it's the best we can do. */ { struct timespec ts; gettime (&ts); return xtime_make (ts.tv_sec, ts.tv_nsec); } # endif # endif } #endif ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gethrxtime.h������������������������������������������������������������0000664�0000000�0000000�00000002773�14110572173�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethrxtime -- get high resolution real time Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef GETHRXTIME_H_ #define GETHRXTIME_H_ 1 #include "xtime.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GETHRXTIME_INLINE # define GETHRXTIME_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* Get the current time, as a count of the number of nanoseconds since an arbitrary epoch (e.g., the system boot time). Prefer a high-resolution clock that is not subject to resetting or drifting. */ #if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME # include <time.h> GETHRXTIME_INLINE xtime_t gethrxtime (void) { return gethrtime (); } # else xtime_t gethrxtime (void); #endif _GL_INLINE_HEADER_END #ifdef __cplusplus } #endif #endif �����gnulib-20210822~d383792/lib/getline.c���������������������������������������������������������������0000664�0000000�0000000�00000001730�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-2007, 2009-2021 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 Simon Josefsson. */ #include <config.h> #include <stdio.h> ssize_t getline (char **lineptr, size_t *n, FILE *stream) { return getdelim (lineptr, n, '\n', stream); } ����������������������������������������gnulib-20210822~d383792/lib/getloadavg.c������������������������������������������������������������0000664�0000000�0000000�00000062722�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get the system load averages. Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with gnulib. Bugs can be reported to bug-gnulib@gnu.org. This 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/>. */ /* Compile-time symbols that this file uses: HAVE_PSTAT_GETDYNAMIC Define this if your system has the pstat_getdynamic function. I think it is unique to HPUX9. The best way to get the definition is through the AC_FUNC_GETLOADAVG macro that comes with autoconf 2.13 or newer. If that isn't an option, then just put AC_CHECK_FUNCS(pstat_getdynamic) in your configure.ac file. HAVE_LIBPERFSTAT Define this if your system has the perfstat_cpu_total function in libperfstat (AIX). FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist. KERNEL_FILE Name of the kernel file to nlist. LDAV_CVT() Scale the load average from the kernel. Returns a double. LDAV_SYMBOL Name of kernel symbol giving load average. LOAD_AVE_TYPE Type of the load average array in the kernel. Must be defined unless one of apollo, DGUX, NeXT, or UMAX is defined; or we have libkstat; otherwise, no load average is available. HAVE_NLIST_H nlist.h is available. NLIST_STRUCT defaults to this. NLIST_STRUCT Include nlist.h, not a.out.h. N_NAME_POINTER The nlist n_name element is a pointer, not an array. HAVE_STRUCT_NLIST_N_UN_N_NAME 'n_un.n_name' is member of 'struct nlist'. LINUX_LDAV_FILE [__linux__, __ANDROID__, __CYGWIN__]: File containing load averages. Specific system predefines this file uses, aside from setting default values if not emacs: apollo BSD Real BSD, not just BSD-like. DGUX eunice UNIX emulator under VMS. hpux __MSDOS__ No-op for MSDOS. NeXT sgi UMAX UMAX4_3 VMS _WIN32 Native Windows (possibly also defined on Cygwin) __linux__, __ANDROID__ Linux: assumes /proc file system mounted. Support from Michael K. Johnson. __CYGWIN__ Cygwin emulates linux /proc/loadavg. __NetBSD__ NetBSD: assumes /kern file system mounted. In addition, to avoid nesting many #ifdefs, we internally set LDAV_DONE to indicate that the load average has been computed. We also #define LDAV_PRIVILEGED if a program will require special installation to be able to call getloadavg. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> # include <sys/types.h> # if HAVE_SYS_PARAM_H # include <sys/param.h> # endif # include "intprops.h" # if defined _WIN32 && ! defined __CYGWIN__ && ! defined WINDOWS32 # define WINDOWS32 # endif # ifdef NeXT /* NeXT in the 2.{0,1,2} releases defines BSD in <sys/param.h>, which conflicts with the definition understood in this file, that this really is BSD. */ # undef BSD /* NeXT defines FSCALE in <sys/param.h>. However, we take FSCALE being defined to mean that the nlist method should be used, which is not true. */ # undef FSCALE # endif /* Same issues as for NeXT apply to the HURD-based GNU system. */ # ifdef __GNU__ # undef BSD # undef FSCALE # endif /* __GNU__ */ /* Set values that are different from the defaults, which are set a little farther down with #ifndef. */ /* Some shorthands. */ # if defined (HPUX) && !defined (hpux) # define hpux # endif # if defined (__hpux) && !defined (hpux) # define hpux # endif # if defined (__sun) && !defined (sun) # define sun # endif # if defined (hp300) && !defined (hpux) # define MORE_BSD # endif # if defined (__SVR4) && !defined (SVR4) # define SVR4 # endif # if (defined (sun) && defined (SVR4)) || defined (SOLARIS2) # define SUNOS_5 # endif # if defined (__osf__) && (defined (__alpha) || defined (__alpha__)) # define OSF_ALPHA # include <sys/mbuf.h> # include <sys/socket.h> # include <net/route.h> # include <sys/table.h> /* Tru64 4.0D's table.h redefines sys */ # undef sys # endif # if defined (__osf__) && (defined (mips) || defined (__mips__)) # define OSF_MIPS # include <sys/table.h> # endif /* VAX C can't handle multi-line #ifs, or lines longer than 256 chars. */ # ifndef LOAD_AVE_TYPE # ifdef MORE_BSD # define LOAD_AVE_TYPE long # endif # ifdef sun # define LOAD_AVE_TYPE long # endif # ifdef sgi # define LOAD_AVE_TYPE long # endif # ifdef SVR4 # define LOAD_AVE_TYPE long # endif # ifdef OSF_ALPHA # define LOAD_AVE_TYPE long # endif # if defined _AIX && ! defined HAVE_LIBPERFSTAT # define LOAD_AVE_TYPE long # endif # endif /* No LOAD_AVE_TYPE. */ # ifdef OSF_ALPHA /* <sys/param.h> defines an incorrect value for FSCALE on Alpha OSF/1, according to ghazi@noc.rutgers.edu. */ # undef FSCALE # define FSCALE 1024.0 # endif # ifndef FSCALE /* SunOS and some others define FSCALE in sys/param.h. */ # ifdef MORE_BSD # define FSCALE 2048.0 # endif # if defined (MIPS) || defined (SVR4) # define FSCALE 256 # endif # if defined (sgi) /* Sometimes both MIPS and sgi are defined, so FSCALE was just defined above under #ifdef MIPS. But we want the sgi value. */ # undef FSCALE # define FSCALE 1000.0 # endif # if defined _AIX && !defined HAVE_LIBPERFSTAT # define FSCALE 65536.0 # endif # endif /* Not FSCALE. */ # if !defined (LDAV_CVT) && defined (FSCALE) # define LDAV_CVT(n) (((double) (n)) / FSCALE) # endif # ifndef NLIST_STRUCT # if HAVE_NLIST_H # define NLIST_STRUCT # endif # endif # if defined (sgi) || (defined (mips) && !defined (BSD)) # define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31)) # endif # if !defined (KERNEL_FILE) && defined (hpux) # define KERNEL_FILE "/hp-ux" # endif # if !defined (KERNEL_FILE) && (defined (MIPS) || defined (SVR4) || defined (ISC) || defined (sgi)) # define KERNEL_FILE "/unix" # endif # if !defined (LDAV_SYMBOL) && (defined (hpux) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (_AIX) && !defined(HAVE_LIBPERFSTAT))) # define LDAV_SYMBOL "avenrun" # endif # ifdef HAVE_UNISTD_H # include <unistd.h> # endif /* LOAD_AVE_TYPE should only get defined if we're going to use the nlist method. */ # if !defined (LOAD_AVE_TYPE) && (defined (BSD) || defined (LDAV_CVT) || defined (KERNEL_FILE) || defined (LDAV_SYMBOL)) # define LOAD_AVE_TYPE double # endif # ifdef LOAD_AVE_TYPE # ifndef __VMS # if !(defined __linux__ || defined __ANDROID__) # ifndef NLIST_STRUCT # include <a.out.h> # else /* NLIST_STRUCT */ # include <nlist.h> # endif /* NLIST_STRUCT */ # ifdef SUNOS_5 # include <kvm.h> # include <kstat.h> # endif # if defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) # include <sys/pstat.h> # endif # ifndef KERNEL_FILE # define KERNEL_FILE "/vmunix" # endif /* KERNEL_FILE */ # ifndef LDAV_SYMBOL # define LDAV_SYMBOL "_avenrun" # endif /* LDAV_SYMBOL */ # endif /* __linux__ || __ANDROID__ */ # else /* __VMS */ # ifndef eunice # include <iodef.h> # include <descrip.h> # else /* eunice */ # include <vms/iodef.h> # endif /* eunice */ # endif /* __VMS */ # ifndef LDAV_CVT # define LDAV_CVT(n) ((double) (n)) # endif /* !LDAV_CVT */ # endif /* LOAD_AVE_TYPE */ # if defined HAVE_LIBPERFSTAT # include <sys/protosw.h> # include <libperfstat.h> # include <sys/proc.h> # ifndef SBITS # define SBITS 16 # endif # endif # if defined (__GNU__) && !defined (NeXT) /* Note that NeXT Openstep defines __GNU__ even though it should not. */ /* GNU system acts much like NeXT, for load average purposes, but not exactly. */ # define NeXT # define host_self mach_host_self # endif # ifdef NeXT # ifdef HAVE_MACH_MACH_H # include <mach/mach.h> # else # include <mach.h> # endif # endif /* NeXT */ # ifdef sgi # include <sys/sysmp.h> # endif /* sgi */ # ifdef UMAX # include <signal.h> # include <sys/time.h> # include <sys/wait.h> # include <sys/syscall.h> # ifdef UMAX_43 # include <machine/cpu.h> # include <inq_stats/statistics.h> # include <inq_stats/sysstats.h> # include <inq_stats/cpustats.h> # include <inq_stats/procstats.h> # else /* Not UMAX_43. */ # include <sys/sysdefs.h> # include <sys/statistics.h> # include <sys/sysstats.h> # include <sys/cpudefs.h> # include <sys/cpustats.h> # include <sys/procstats.h> # endif /* Not UMAX_43. */ # endif /* UMAX */ # ifdef DGUX # include <sys/dg_sys_info.h> # endif # if (defined __linux__ || defined __ANDROID__ \ || defined __CYGWIN__ || defined SUNOS_5 \ || (defined LOAD_AVE_TYPE && ! defined __VMS)) # include <fcntl.h> # endif /* Avoid static vars inside a function since in HPUX they dump as pure. */ # ifdef NeXT static processor_set_t default_set; static bool getloadavg_initialized; # endif /* NeXT */ # ifdef UMAX static unsigned int cpus = 0; static unsigned int samples; # endif /* UMAX */ # ifdef DGUX static struct dg_sys_info_load_info load_info; /* what-a-mouthful! */ # endif /* DGUX */ # if !defined (HAVE_LIBKSTAT) && defined (LOAD_AVE_TYPE) /* File descriptor open to /dev/kmem or VMS load ave driver. */ static int channel; /* True if channel is valid. */ static bool getloadavg_initialized; /* Offset in kmem to seek to read load average, or 0 means invalid. */ static long offset; # if ! defined __VMS && ! defined sgi && ! (defined __linux__ || defined __ANDROID__) static struct nlist name_list[2]; # endif # ifdef SUNOS_5 static kvm_t *kd; # endif /* SUNOS_5 */ # endif /* LOAD_AVE_TYPE && !HAVE_LIBKSTAT */ /* Put the 1 minute, 5 minute and 15 minute load averages into the first NELEM elements of LOADAVG. Return the number written (never more than 3, but may be less than NELEM), or -1 (setting errno) if an error occurred. */ int getloadavg (double loadavg[], int nelem) { int elem = 0; /* Return value. */ # ifdef NO_GET_LOAD_AVG # define LDAV_DONE errno = ENOSYS; elem = -1; # endif # if !defined (LDAV_DONE) && defined (HAVE_LIBKSTAT) /* Solaris <= 2.6 */ /* Use libkstat because we don't have to be root. */ # define LDAV_DONE kstat_ctl_t *kc; kstat_t *ksp; kstat_named_t *kn; int saved_errno; kc = kstat_open (); if (kc == NULL) return -1; ksp = kstat_lookup (kc, "unix", 0, "system_misc"); if (ksp == NULL) return -1; if (kstat_read (kc, ksp, 0) == -1) return -1; kn = kstat_data_lookup (ksp, "avenrun_1min"); if (kn == NULL) { /* Return -1 if no load average information is available. */ nelem = 0; elem = -1; } if (nelem >= 1) loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 2) { kn = kstat_data_lookup (ksp, "avenrun_5min"); if (kn != NULL) { loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 3) { kn = kstat_data_lookup (ksp, "avenrun_15min"); if (kn != NULL) loadavg[elem++] = (double) kn->value.ul / FSCALE; } } } saved_errno = errno; kstat_close (kc); errno = saved_errno; # endif /* HAVE_LIBKSTAT */ # if !defined (LDAV_DONE) && defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) /* HP-UX */ /* Use pstat_getdynamic() because we don't have to be root. */ # define LDAV_DONE # undef LOAD_AVE_TYPE struct pst_dynamic dyn_info; if (pstat_getdynamic (&dyn_info, sizeof (dyn_info), 0, 0) < 0) return -1; if (nelem > 0) loadavg[elem++] = dyn_info.psd_avg_1_min; if (nelem > 1) loadavg[elem++] = dyn_info.psd_avg_5_min; if (nelem > 2) loadavg[elem++] = dyn_info.psd_avg_15_min; # endif /* hpux && HAVE_PSTAT_GETDYNAMIC */ # if ! defined LDAV_DONE && defined HAVE_LIBPERFSTAT /* AIX */ # define LDAV_DONE # undef LOAD_AVE_TYPE /* Use perfstat_cpu_total because we don't have to be root. */ { perfstat_cpu_total_t cpu_stats; int result = perfstat_cpu_total (NULL, &cpu_stats, sizeof cpu_stats, 1); if (result == -1) return result; loadavg[0] = cpu_stats.loadavg[0] / (double)(1 << SBITS); loadavg[1] = cpu_stats.loadavg[1] / (double)(1 << SBITS); loadavg[2] = cpu_stats.loadavg[2] / (double)(1 << SBITS); elem = 3; } # endif # if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__ || defined __CYGWIN__) /* Linux without glibc, Android, Cygwin */ # define LDAV_DONE # undef LOAD_AVE_TYPE # ifndef LINUX_LDAV_FILE # define LINUX_LDAV_FILE "/proc/loadavg" # endif char ldavgbuf[3 * (INT_STRLEN_BOUND (int) + sizeof ".00 ")]; char const *ptr = ldavgbuf; int fd, count, saved_errno; fd = open (LINUX_LDAV_FILE, O_RDONLY | O_CLOEXEC); if (fd == -1) return -1; count = read (fd, ldavgbuf, sizeof ldavgbuf - 1); saved_errno = errno; (void) close (fd); errno = saved_errno; if (count <= 0) return -1; ldavgbuf[count] = '\0'; for (elem = 0; elem < nelem; elem++) { double numerator = 0; double denominator = 1; while (*ptr == ' ') ptr++; /* Finish if this number is missing, and report an error if all were missing. */ if (! ('0' <= *ptr && *ptr <= '9')) { if (elem == 0) { errno = ENOTSUP; return -1; } break; } while ('0' <= *ptr && *ptr <= '9') numerator = 10 * numerator + (*ptr++ - '0'); if (*ptr == '.') for (ptr++; '0' <= *ptr && *ptr <= '9'; ptr++) numerator = 10 * numerator + (*ptr - '0'), denominator *= 10; loadavg[elem] = numerator / denominator; } return elem; # endif /* __linux__ || __ANDROID__ || __CYGWIN__ */ # if !defined (LDAV_DONE) && defined (__NetBSD__) /* NetBSD < 0.9 */ # define LDAV_DONE # undef LOAD_AVE_TYPE # ifndef NETBSD_LDAV_FILE # define NETBSD_LDAV_FILE "/kern/loadavg" # endif unsigned long int load_ave[3], scale; int count; char readbuf[4 * INT_BUFSIZE_BOUND (unsigned long int) + 1]; int fd = open (NETBSD_LDAV_FILE, O_RDONLY | O_CLOEXEC); if (fd < 0) return fd; int nread = read (fd, readbuf, sizeof readbuf - 1); int err = errno; close (fd); if (nread < 0) { errno = err; return -1; } readbuf[nread] = '\0'; count = sscanf (readbuf, "%lu %lu %lu %lu\n", &load_ave[0], &load_ave[1], &load_ave[2], &scale); if (count != 4) { errno = ENOTSUP; return -1; } for (elem = 0; elem < nelem; elem++) loadavg[elem] = (double) load_ave[elem] / (double) scale; return elem; # endif /* __NetBSD__ */ # if !defined (LDAV_DONE) && defined (NeXT) /* NeXTStep */ # define LDAV_DONE /* The NeXT code was adapted from iscreen 3.2. */ host_t host; struct processor_set_basic_info info; unsigned int info_count; /* We only know how to get the 1-minute average for this system, so even if the caller asks for more than 1, we only return 1. */ if (!getloadavg_initialized) { if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS) getloadavg_initialized = true; } if (getloadavg_initialized) { info_count = PROCESSOR_SET_BASIC_INFO_COUNT; if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host, (processor_set_info_t) &info, &info_count) != KERN_SUCCESS) getloadavg_initialized = false; else { if (nelem > 0) loadavg[elem++] = (double) info.load_average / LOAD_SCALE; } } if (!getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* NeXT */ # if !defined (LDAV_DONE) && defined (UMAX) # define LDAV_DONE /* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not have a /dev/kmem. Information about the workings of the running kernel can be gathered with inq_stats system calls. We only know how to get the 1-minute average for this system. */ struct proc_summary proc_sum_data; struct stat_descr proc_info; double load; register unsigned int i, j; if (cpus == 0) { register unsigned int c, i; struct cpu_config conf; struct stat_descr desc; desc.sd_next = 0; desc.sd_subsys = SUBSYS_CPU; desc.sd_type = CPUTYPE_CONFIG; desc.sd_addr = (char *) &conf; desc.sd_size = sizeof conf; if (inq_stats (1, &desc)) return -1; c = 0; for (i = 0; i < conf.config_maxclass; ++i) { struct class_stats stats; memset (&stats, 0, sizeof stats); desc.sd_type = CPUTYPE_CLASS; desc.sd_objid = i; desc.sd_addr = (char *) &stats; desc.sd_size = sizeof stats; if (inq_stats (1, &desc)) return -1; c += stats.class_numcpus; } cpus = c; samples = cpus < 2 ? 3 : (2 * cpus / 3); } proc_info.sd_next = 0; proc_info.sd_subsys = SUBSYS_PROC; proc_info.sd_type = PROCTYPE_SUMMARY; proc_info.sd_addr = (char *) &proc_sum_data; proc_info.sd_size = sizeof (struct proc_summary); proc_info.sd_sizeused = 0; if (inq_stats (1, &proc_info) != 0) return -1; load = proc_sum_data.ps_nrunnable; j = 0; for (i = samples - 1; i > 0; --i) { load += proc_sum_data.ps_nrun[j]; if (j++ == PS_NRUNSIZE) j = 0; } if (nelem > 0) loadavg[elem++] = load / samples / cpus; # endif /* UMAX */ # if !defined (LDAV_DONE) && defined (DGUX) # define LDAV_DONE /* This call can return -1 for an error, but with good args it's not supposed to fail. The first argument is for no apparent reason of type 'long int *'. */ dg_sys_info ((long int *) &load_info, DG_SYS_INFO_LOAD_INFO_TYPE, DG_SYS_INFO_LOAD_VERSION_0); if (nelem > 0) loadavg[elem++] = load_info.one_minute; if (nelem > 1) loadavg[elem++] = load_info.five_minute; if (nelem > 2) loadavg[elem++] = load_info.fifteen_minute; # endif /* DGUX */ # if !defined (LDAV_DONE) && defined (apollo) # define LDAV_DONE /* Apollo code from lisch@mentorg.com (Ray Lischner). This system call is not documented. The load average is obtained as three long integers, for the load average over the past minute, five minutes, and fifteen minutes. Each value is a scaled integer, with 16 bits of integer part and 16 bits of fraction part. I'm not sure which operating system first supported this system call, but I know that SR10.2 supports it. */ extern void proc1_$get_loadav (); unsigned long load_ave[3]; proc1_$get_loadav (load_ave); if (nelem > 0) loadavg[elem++] = load_ave[0] / 65536.0; if (nelem > 1) loadavg[elem++] = load_ave[1] / 65536.0; if (nelem > 2) loadavg[elem++] = load_ave[2] / 65536.0; # endif /* apollo */ # if !defined (LDAV_DONE) && defined (OSF_MIPS) # define LDAV_DONE struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); loadavg[elem++] = (load_ave.tl_lscale == 0 ? load_ave.tl_avenrun.d[0] : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); # endif /* OSF_MIPS */ # if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32)) /* DJGPP */ # define LDAV_DONE /* A faithful emulation is going to have to be saved for a rainy day. */ for ( ; elem < nelem; elem++) { loadavg[elem] = 0.0; } # endif /* __MSDOS__ || WINDOWS32 */ # if !defined (LDAV_DONE) && defined (OSF_ALPHA) /* OSF/1 */ # define LDAV_DONE struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); for (elem = 0; elem < nelem; elem++) loadavg[elem] = (load_ave.tl_lscale == 0 ? load_ave.tl_avenrun.d[elem] : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale)); # endif /* OSF_ALPHA */ # if ! defined LDAV_DONE && defined __VMS /* VMS */ /* VMS specific code -- read from the Load Ave driver. */ LOAD_AVE_TYPE load_ave[3]; static bool getloadavg_initialized; # ifdef eunice struct { int dsc$w_length; char *dsc$a_pointer; } descriptor; # endif /* Ensure that there is a channel open to the load ave device. */ if (!getloadavg_initialized) { /* Attempt to open the channel. */ # ifdef eunice descriptor.dsc$w_length = 18; descriptor.dsc$a_pointer = "$$VMS_LOAD_AVERAGE"; # else $DESCRIPTOR (descriptor, "LAV0:"); # endif if (sys$assign (&descriptor, &channel, 0, 0) & 1) getloadavg_initialized = true; } /* Read the load average vector. */ if (getloadavg_initialized && !(sys$qiow (0, channel, IO$_READVBLK, 0, 0, 0, load_ave, 12, 0, 0, 0, 0) & 1)) { sys$dassgn (channel); getloadavg_initialized = false; } if (!getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* ! defined LDAV_DONE && defined __VMS */ # if ! defined LDAV_DONE && defined LOAD_AVE_TYPE && ! defined __VMS /* IRIX, other old systems */ /* UNIX-specific code -- read the average from /dev/kmem. */ # define LDAV_PRIVILEGED /* This code requires special installation. */ LOAD_AVE_TYPE load_ave[3]; /* Get the address of LDAV_SYMBOL. */ if (offset == 0) { # ifndef sgi # if ! defined NLIST_STRUCT || ! defined N_NAME_POINTER strcpy (name_list[0].n_name, LDAV_SYMBOL); strcpy (name_list[1].n_name, ""); # else /* NLIST_STRUCT */ # ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME name_list[0].n_un.n_name = LDAV_SYMBOL; name_list[1].n_un.n_name = 0; # else /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ name_list[0].n_name = LDAV_SYMBOL; name_list[1].n_name = 0; # endif /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ # endif /* NLIST_STRUCT */ # ifndef SUNOS_5 if ( # if !defined (_AIX) nlist (KERNEL_FILE, name_list) # else /* _AIX */ knlist (name_list, 1, sizeof (name_list[0])) # endif >= 0) /* Omit "&& name_list[0].n_type != 0 " -- it breaks on Sun386i. */ { # ifdef FIXUP_KERNEL_SYMBOL_ADDR FIXUP_KERNEL_SYMBOL_ADDR (name_list); # endif offset = name_list[0].n_value; } # endif /* !SUNOS_5 */ # else /* sgi */ ptrdiff_t ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN); if (ldav_off != -1) offset = (long int) ldav_off & 0x7fffffff; # endif /* sgi */ } /* Make sure we have /dev/kmem open. */ if (!getloadavg_initialized) { # ifndef SUNOS_5 int fd = open ("/dev/kmem", O_RDONLY | O_CLOEXEC); if (0 <= fd) { channel = fd; getloadavg_initialized = true; } # else /* SUNOS_5 */ /* We pass 0 for the kernel, corefile, and swapfile names to use the currently running kernel. */ kd = kvm_open (0, 0, 0, O_RDONLY, 0); if (kd != NULL) { /* nlist the currently running kernel. */ kvm_nlist (kd, name_list); offset = name_list[0].n_value; getloadavg_initialized = true; } # endif /* SUNOS_5 */ } /* If we can, get the load average values. */ if (offset && getloadavg_initialized) { /* Try to read the load. */ # ifndef SUNOS_5 if (lseek (channel, offset, 0) == -1L || read (channel, (char *) load_ave, sizeof (load_ave)) != sizeof (load_ave)) { close (channel); getloadavg_initialized = false; } # else /* SUNOS_5 */ if (kvm_read (kd, offset, (char *) load_ave, sizeof (load_ave)) != sizeof (load_ave)) { kvm_close (kd); getloadavg_initialized = false; } # endif /* SUNOS_5 */ } if (offset == 0 || !getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* ! defined LDAV_DONE && defined LOAD_AVE_TYPE && ! defined __VMS */ # if !defined (LDAV_DONE) && defined (LOAD_AVE_TYPE) /* Including VMS. */ if (nelem > 0) loadavg[elem++] = LDAV_CVT (load_ave[0]); if (nelem > 1) loadavg[elem++] = LDAV_CVT (load_ave[1]); if (nelem > 2) loadavg[elem++] = LDAV_CVT (load_ave[2]); # define LDAV_DONE # endif /* !LDAV_DONE && LOAD_AVE_TYPE */ # if !defined LDAV_DONE errno = ENOSYS; elem = -1; # endif return elem; } ����������������������������������������������gnulib-20210822~d383792/lib/getlogin.c��������������������������������������������������������������0000664�0000000�0000000�00000002435�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a working getlogin for systems which lack it. Copyright (C) 2010-2021 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, 2010. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetUserName # define GetUserName GetUserNameA #endif char * getlogin (void) { #if defined _WIN32 && ! defined __CYGWIN__ static char login_name[1024]; DWORD sz = sizeof (login_name); if (GetUserName (login_name, &sz)) return login_name; #endif return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getlogin_r.c������������������������������������������������������������0000664�0000000�0000000�00000006301�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a working getlogin_r for systems which lack it. Copyright (C) 2005-2007, 2010-2021 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, Derek Price, and Bruno Haible. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #include "malloca.h" #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetUserName # define GetUserName GetUserNameA #else # if !HAVE_DECL_GETLOGIN extern char *getlogin (void); # endif #endif /* See unistd.in.h for documentation. */ int getlogin_r (char *name, size_t size) { #undef getlogin_r #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platform. */ DWORD sz; /* When size > 0x7fff, the doc says that GetUserName will fail. Actually, on Windows XP SP3, it succeeds. But let's be safe, for the sake of older Windows versions. */ if (size > 0x7fff) size = 0x7fff; sz = size; if (!GetUserName (name, &sz)) { if (GetLastError () == ERROR_INSUFFICIENT_BUFFER) /* In this case, the doc says that sz contains the required size, but actually, on Windows XP SP3, it contains 2 * the required size. */ return ERANGE; else return ENOENT; } return 0; #elif HAVE_GETLOGIN_R /* Platform with a getlogin_r() function. */ int ret = getlogin_r (name, size); if (ret == 0) { const char *nul = memchr (name, '\0', size); if (nul == NULL) /* name contains a truncated result. */ return ERANGE; if (size > 0 && nul == name + size - 1) { /* strlen(name) == size-1. Determine whether the untruncated result would have had length size-1 or size. */ char *room = (char *) malloca (size + 1); if (room == NULL) return ENOMEM; ret = getlogin_r (room, size + 1); /* The untruncated result should be the same as in the first call. */ if (ret == 0 && memcmp (name, room, size) != 0) /* The untruncated result would have been different. */ ret = ERANGE; freea (room); } } return ret; #else /* Platform with a getlogin() function. */ char *n; size_t nlen; errno = 0; n = getlogin (); if (!n) /* ENOENT is a reasonable errno value if getlogin returns NULL. */ return (errno != 0 ? errno : ENOENT); nlen = strlen (n); if (size <= nlen) return ERANGE; memcpy (name, n, nlen + 1); return 0; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getndelim2.c������������������������������������������������������������0000664�0000000�0000000�00000014063�14110572173�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getndelim2 - Read a line from a stream, stopping at one of 2 delimiters, with bounded memory allocation. Copyright (C) 1993, 1996-1998, 2000, 2003-2004, 2006, 2008-2021 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/>. */ /* Originally written by Jan Brittenson, bson@gnu.ai.mit.edu. */ #include <config.h> #include "getndelim2.h" #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #if !HAVE_FLOCKFILE # undef flockfile # define flockfile(x) ((void) 0) #endif #if !HAVE_FUNLOCKFILE # undef funlockfile # define funlockfile(x) ((void) 0) #endif #include <limits.h> #include <stdint.h> #include "freadptr.h" #include "freadseek.h" #include "memchr2.h" #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif /* Use this to suppress gcc's "...may be used before initialized" warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* The maximum value that getndelim2 can return without suffering from overflow problems, either internally (because of pointer subtraction overflow) or due to the API (because of ssize_t). */ #define GETNDELIM2_MAXIMUM (PTRDIFF_MAX < SSIZE_MAX ? PTRDIFF_MAX : SSIZE_MAX) /* Try to add at least this many bytes when extending the buffer. MIN_CHUNK must be no greater than GETNDELIM2_MAXIMUM. */ #define MIN_CHUNK 64 ssize_t getndelim2 (char **lineptr, size_t *linesize, size_t offset, size_t nmax, int delim1, int delim2, FILE *stream) { size_t nbytes_avail; /* Allocated but unused bytes in *LINEPTR. */ char *read_pos; /* Where we're reading into *LINEPTR. */ ssize_t bytes_stored = -1; char *ptr = *lineptr; size_t size = *linesize; bool found_delimiter; if (!ptr) { size = nmax < MIN_CHUNK ? nmax : MIN_CHUNK; ptr = malloc (size); if (!ptr) return -1; } if (size < offset) goto done; nbytes_avail = size - offset; read_pos = ptr + offset; if (nbytes_avail == 0 && nmax <= size) goto done; /* Normalize delimiters, since memchr2 doesn't handle EOF. */ if (delim1 == EOF) delim1 = delim2; else if (delim2 == EOF) delim2 = delim1; flockfile (stream); found_delimiter = false; do { /* Here always ptr + size == read_pos + nbytes_avail. Also nbytes_avail > 0 || size < nmax. */ int c IF_LINT (= 0); const char *buffer; size_t buffer_len; buffer = freadptr (stream, &buffer_len); if (buffer) { if (delim1 != EOF) { const char *end = memchr2 (buffer, delim1, delim2, buffer_len); if (end) { buffer_len = end - buffer + 1; found_delimiter = true; } } } else { c = getc (stream); if (c == EOF) { /* Return partial line, if any. */ if (read_pos == ptr) goto unlock_done; else break; } if (c == delim1 || c == delim2) found_delimiter = true; buffer_len = 1; } /* We always want at least one byte left in the buffer, since we always (unless we get an error while reading the first byte) NUL-terminate the line buffer. */ if (nbytes_avail < buffer_len + 1 && size < nmax) { /* Grow size proportionally, not linearly, to avoid O(n^2) running time. */ size_t newsize = size < MIN_CHUNK ? size + MIN_CHUNK : 2 * size; char *newptr; /* Increase newsize so that it becomes >= (read_pos - ptr) + buffer_len. */ if (newsize - (read_pos - ptr) < buffer_len + 1) newsize = (read_pos - ptr) + buffer_len + 1; /* Respect nmax. This handles possible integer overflow. */ if (! (size < newsize && newsize <= nmax)) newsize = nmax; if (GETNDELIM2_MAXIMUM < newsize - offset) { size_t newsizemax = offset + GETNDELIM2_MAXIMUM + 1; if (size == newsizemax) goto unlock_done; newsize = newsizemax; } nbytes_avail = newsize - (read_pos - ptr); newptr = realloc (ptr, newsize); if (!newptr) goto unlock_done; ptr = newptr; size = newsize; read_pos = size - nbytes_avail + ptr; } /* Here, if size < nmax, nbytes_avail >= buffer_len + 1. If size == nmax, nbytes_avail > 0. */ if (1 < nbytes_avail) { size_t copy_len = nbytes_avail - 1; if (buffer_len < copy_len) copy_len = buffer_len; if (buffer) memcpy (read_pos, buffer, copy_len); else *read_pos = c; read_pos += copy_len; nbytes_avail -= copy_len; } /* Here still nbytes_avail > 0. */ if (buffer && freadseek (stream, buffer_len)) goto unlock_done; } while (!found_delimiter); /* Done - NUL terminate and return the number of bytes read. At this point we know that nbytes_avail >= 1. */ *read_pos = '\0'; bytes_stored = read_pos - (ptr + offset); unlock_done: funlockfile (stream); done: *lineptr = ptr; *linesize = size; return bytes_stored ? bytes_stored : -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getndelim2.h������������������������������������������������������������0000664�0000000�0000000�00000003532�14110572173�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getndelim2 - Read a line from a stream, stopping at one of 2 delimiters, with bounded memory allocation. Copyright (C) 2003-2004, 2006, 2009-2021 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/>. */ #ifndef GETNDELIM2_H #define GETNDELIM2_H 1 #include <stdio.h> #include <sys/types.h> #define GETNLINE_NO_LIMIT ((size_t) -1) /* Read into a buffer *LINEPTR returned from malloc (or NULL), pointing to *LINESIZE bytes of space. Store the input bytes starting at *LINEPTR + OFFSET, and null-terminate them. Reallocate the buffer as necessary, but if NMAX is not GETNLINE_NO_LIMIT then do not allocate more than NMAX bytes; if the line is longer than that, read and discard the extra bytes. Stop reading after the first occurrence of DELIM1 or DELIM2, whichever comes first; a delimiter equal to EOF stands for no delimiter. Read the input bytes from STREAM. Return the number of bytes read and stored at *LINEPTR + OFFSET (not including the NUL terminator), or -1 on error or EOF. */ extern ssize_t getndelim2 (char **lineptr, size_t *linesize, size_t offset, size_t nmax, int delim1, int delim2, FILE *stream); #endif /* GETNDELIM2_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getnline.c��������������������������������������������������������������0000664�0000000�0000000�00000002301�14110572173�0017012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getnline - Read a line from a stream, with bounded memory allocation. Copyright (C) 2003-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "getnline.h" #include "getndelim2.h" ssize_t getndelim (char **lineptr, size_t *linesize, size_t nmax, int delimiter, FILE *stream) { return getndelim2 (lineptr, linesize, 0, nmax, delimiter, EOF, stream); } ssize_t getnline (char **lineptr, size_t *linesize, size_t nmax, FILE *stream) { return getndelim (lineptr, linesize, nmax, '\n', stream); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getnline.h��������������������������������������������������������������0000664�0000000�0000000�00000004075�14110572173�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getnline - Read a line from a stream, with bounded memory allocation. Copyright (C) 2003-2004, 2009-2021 Free Software Foundation, Inc. This 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 GETNLINE_H #define GETNLINE_H 1 #include <stdio.h> #include <sys/types.h> #define GETNLINE_NO_LIMIT ((size_t) -1) /* Read a line, up to the next newline, from STREAM, and store it in *LINEPTR. *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Reallocation is limited to NMAX bytes; if the line is longer than that, the extra bytes are read but thrown away. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ extern ssize_t getnline (char **lineptr, size_t *linesize, size_t nmax, FILE *stream); /* Read a line, up to the next occurrence of DELIMITER, from STREAM, and store it in *LINEPTR. *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Reallocation is limited to NMAX bytes; if the line is longer than that, the extra bytes are read but thrown away. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ extern ssize_t getndelim (char **lineptr, size_t *linesize, size_t nmax, int delimiter, FILE *stream); #endif /* GETNLINE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt-cdefs.in.h�������������������������������������������������������0000664�0000000�0000000�00000004046�14110572173�0020213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with 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 _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) # define __THROW throw () # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt-core.h�����������������������������������������������������������0000664�0000000�0000000�00000007132�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. 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 _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt-ext.h������������������������������������������������������������0000664�0000000�0000000�00000005753�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. 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 _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ ���������������������gnulib-20210822~d383792/lib/getopt-pfx-core.h�������������������������������������������������������0000664�0000000�0000000�00000005024�14110572173�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with 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 _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* Work around a a problem on macOS, which declares getopt with a trailing __DARWIN_ALIAS(getopt) that would expand to something like __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */ # ifdef __APPLE__ # define _GETOPT # endif /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include <getopt-core.h> #endif /* _GETOPT_PFX_CORE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt-pfx-ext.h��������������������������������������������������������0000664�0000000�0000000�00000005365�14110572173�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with 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 _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include <getopt-ext.h> #endif /* _GETOPT_PFX_EXT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt.c����������������������������������������������������������������0000664�0000000�0000000�00000057111�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getopt for GNU. Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. 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 _LIBC # include <config.h> #endif #include "getopt.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include <libintl.h> # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || (defined _WIN32 && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; int ambig_malloced = 0; int ambig_fallback = 0; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (!ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_fallback = 1; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else if ((ambig_set = malloc (n_options)) == NULL) /* Fall back to simpler error message. */ ambig_fallback = 1; else ambig_malloced = 1; if (ambig_set) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set) ambig_set[option_index] = 1; } } } if (ambig_set || ambig_fallback) { if (print_errors) { if (ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } if (ambig_malloced) free (ambig_set); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (_GL_UNUSED int argc, _GL_UNUSED char **argv, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt.in.h�������������������������������������������������������������0000664�0000000�0000000�00000004121�14110572173�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. 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@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use <getopt.h>; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had <getopt.h>, we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h # include <stdio.h> # include <unistd.h> # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include <getopt-cdefs.h> #include <getopt-pfx-core.h> #include <getopt-pfx-ext.h> #endif /* _@GUARD_PREFIX@_GETOPT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt1.c���������������������������������������������������������������0000664�0000000�0000000�00000007360�14110572173�0016602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. 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 _LIBC # include <config.h> #endif #include "getopt.h" #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getopt_int.h������������������������������������������������������������0000664�0000000�0000000�00000010112�14110572173�0017365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-2021 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. 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 _GETOPT_INT_H #define _GETOPT_INT_H 1 #include <getopt.h> extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getpagesize.c�����������������������������������������������������������0000664�0000000�0000000�00000002267�14110572173�0017527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpagesize emulation for systems where it cannot be done in a C macro. Copyright (C) 2007, 2009-2021 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 and Martin Lambers. */ #include <config.h> /* Specification. */ #include <unistd.h> /* This implementation is only for native Windows systems. */ #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> int getpagesize (void) { SYSTEM_INFO system_info; GetSystemInfo (&system_info); return system_info.dwPageSize; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getpass.c���������������������������������������������������������������0000664�0000000�0000000�00000012523�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2001, 2003-2007, 2009-2021 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 _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc warns for the null checks on 'prompt' below. */ # define _GL_ARG_NONNULL(params) # include <config.h> #endif #include "getpass.h" #include <stdio.h> #if !(defined _WIN32 && !defined __CYGWIN__) # include <stdbool.h> # if HAVE_DECL___FSETLOCKING && HAVE___FSETLOCKING # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # else # define __fsetlocking(stream, type) /* empty */ # endif # if HAVE_TERMIOS_H # include <termios.h> # endif # if USE_UNLOCKED_IO # include "unlocked-io.h" # else # if !HAVE_DECL_FFLUSH_UNLOCKED # undef fflush_unlocked # define fflush_unlocked(x) fflush (x) # endif # if !HAVE_DECL_FLOCKFILE # undef flockfile # define flockfile(x) ((void) 0) # endif # if !HAVE_DECL_FUNLOCKFILE # undef funlockfile # define funlockfile(x) ((void) 0) # endif # if !HAVE_DECL_FPUTS_UNLOCKED # undef fputs_unlocked # define fputs_unlocked(str,stream) fputs (str, stream) # endif # if !HAVE_DECL_PUTC_UNLOCKED # undef putc_unlocked # define putc_unlocked(c,stream) putc (c, stream) # endif # endif /* It is desirable to use this bit on systems that have it. The only bit of terminal state we want to twiddle is echoing, which is done in software; there is no need to change the state of the terminal hardware. */ # ifndef TCSASOFT # define TCSASOFT 0 # endif static void call_fclose (void *arg) { if (arg != NULL) fclose (arg); } char * getpass (const char *prompt) { FILE *tty; FILE *in, *out; # if HAVE_TCGETATTR struct termios s, t; # endif bool tty_changed = false; static char *buf; static size_t bufsize; ssize_t nread; /* Try to write to and read from the terminal if we can. If we can't open the terminal, use stderr and stdin. */ tty = fopen ("/dev/tty", "w+e"); if (tty == NULL) { in = stdin; out = stderr; } else { /* We do the locking ourselves. */ __fsetlocking (tty, FSETLOCKING_BYCALLER); out = in = tty; } flockfile (out); /* Turn echoing off if it is on now. */ # if HAVE_TCGETATTR if (tcgetattr (fileno (in), &t) == 0) { /* Save the old one. */ s = t; /* Tricky, tricky. */ t.c_lflag &= ~(ECHO | ISIG); tty_changed = (tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &t) == 0); } # endif if (prompt) { /* Write the prompt. */ fputs_unlocked (prompt, out); fflush_unlocked (out); } /* Read the password. */ nread = getline (&buf, &bufsize, in); /* According to the C standard, input may not be followed by output on the same stream without an intervening call to a file positioning function. Suppose in == out; then without this fseek call, on Solaris, HP-UX, AIX, OSF/1, the previous input gets echoed, whereas on IRIX, the following newline is not output as it should be. POSIX imposes similar restrictions if fileno (in) == fileno (out). The POSIX restrictions are tricky and change from POSIX version to POSIX version, so play it safe and invoke fseek even if in != out. */ fseeko (out, 0, SEEK_CUR); if (buf != NULL) { if (nread < 0) buf[0] = '\0'; else if (buf[nread - 1] == '\n') { /* Remove the newline. */ buf[nread - 1] = '\0'; if (tty_changed) { /* Write the newline that was not echoed. */ putc_unlocked ('\n', out); } } } /* Restore the original setting. */ # if HAVE_TCSETATTR if (tty_changed) tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &s); # endif funlockfile (out); call_fclose (tty); return buf; } #else /* W32 native */ /* Windows implementation by Martin Lambers <marlam@marlam.de>, improved by Simon Josefsson. */ /* For PASS_MAX. */ # include <limits.h> /* For _getch(). */ # include <conio.h> /* For strdup(). */ # include <string.h> # ifndef PASS_MAX # define PASS_MAX 512 # endif char * getpass (const char *prompt) { char getpassbuf[PASS_MAX + 1]; size_t i = 0; int c; if (prompt) { fputs (prompt, stderr); fflush (stderr); } for (;;) { c = _getch (); if (c == '\r') { getpassbuf[i] = '\0'; break; } else if (i < PASS_MAX) { getpassbuf[i++] = c; } if (i >= PASS_MAX) { getpassbuf[i] = '\0'; break; } } if (prompt) { fputs ("\r\n", stderr); fflush (stderr); } return strdup (getpassbuf); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getpass.h���������������������������������������������������������������0000664�0000000�0000000�00000001554�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read a password from /dec/tty. Copyright (C) 2004-2021 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/>. */ /* Obsolete; consider using unistd.h instead. */ /* Get getpass declaration, if available. */ #include <unistd.h> ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getpeername.c�����������������������������������������������������������0000664�0000000�0000000�00000002461�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpeername.c --- wrappers for Windows getpeername function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef getpeername int rpl_getpeername (int fd, struct sockaddr *addr, socklen_t *addrlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = getpeername (sock, addr, addrlen); if (r < 0) set_winsock_errno (); return r; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getprogname.c�����������������������������������������������������������0000664�0000000�0000000�00000022326�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2021 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/>. */ #include <config.h> /* Specification. */ #include "getprogname.h" #include <errno.h> /* get program_invocation_name declaration */ #include <stdlib.h> /* get __argv declaration */ #ifdef _AIX # include <unistd.h> # include <procinfo.h> # include <string.h> #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include <string.h> # include <sys/ps.h> #endif #ifdef __hpux # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> # include <string.h> #endif #if defined __sgi || defined __osf__ # include <string.h> # include <unistd.h> # include <stdio.h> # include <fcntl.h> # include <sys/procfs.h> #endif #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 */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; # if defined __ANDROID__ return last_component (p); # else return p && p[0] ? p : "?"; # endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) p = s; break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi || defined __osf__ /* IRIX or Tru64 */ char filename[50]; int fd; # if defined __sgi sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); # else sprintf (filename, "/proc/%d", (int) getpid ()); # endif fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } return NULL; # elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ char buf[80]; int fd; sprintf (buf, "/proc/%d/cmdline", getpid()); fd = open (buf, O_RDONLY); if (0 <= fd) { size_t n = read (fd, buf, 79); if (n > 0) { buf[n] = '\0'; /* Guarantee null-termination */ char *progname; progname = strrchr (buf, '/'); if (progname) { progname = progname + 1; /* Skip the '/' */ } else { progname = buf; } char *ret; ret = malloc (strlen (progname) + 1); if (ret) { strcpy (ret, progname); return ret; } } close (fd); } return "?"; # else # error "getprogname module not ported to this OS" # endif } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getprogname.h�����������������������������������������������������������0000664�0000000�0000000�00000002223�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2021 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/>. */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #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 } #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getrandom.c�������������������������������������������������������������0000664�0000000�0000000�00000013212�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Obtain a series of random bytes. Copyright 2020-2021 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. */ #include <config.h> #include <sys/random.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_BCRYPT_H # include <bcrypt.h> # else # define NTSTATUS LONG typedef void * BCRYPT_ALG_HANDLE; # define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 # if HAVE_LIB_BCRYPT extern NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); # endif # endif # if !HAVE_LIB_BCRYPT # include <wincrypt.h> # ifndef CRYPT_VERIFY_CONTEXT # define CRYPT_VERIFY_CONTEXT 0xF0000000 # endif # endif #endif #include "minmax.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef LoadLibrary # define LoadLibrary LoadLibraryA # undef CryptAcquireContext # define CryptAcquireContext CryptAcquireContextA # if !HAVE_LIB_BCRYPT /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* BCryptGenRandom with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works only starting with Windows 7. */ typedef NTSTATUS (WINAPI * BCryptGenRandomFuncType) (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); static BCryptGenRandomFuncType BCryptGenRandomFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE bcrypt = LoadLibrary ("bcrypt.dll"); if (bcrypt != NULL) { BCryptGenRandomFunc = (BCryptGenRandomFuncType) GetProcAddress (bcrypt, "BCryptGenRandom"); } initialized = TRUE; } # else # define BCryptGenRandomFunc BCryptGenRandom # endif #else /* These devices exist on all platforms except native Windows. */ /* Name of a device through which the kernel returns high quality random numbers, from an entropy pool. When the pool is empty, the call blocks until entropy sources have added enough bits of entropy. */ # ifndef NAME_OF_RANDOM_DEVICE # define NAME_OF_RANDOM_DEVICE "/dev/random" # endif /* Name of a device through which the kernel returns random or pseudo-random numbers. It uses an entropy pool, but, in order to avoid blocking, adds bits generated by a pseudo-random number generator, as needed. */ # ifndef NAME_OF_NONCE_DEVICE # define NAME_OF_NONCE_DEVICE "/dev/urandom" # endif #endif /* Set BUFFER (of size LENGTH) to random bytes under the control of FLAGS. Return the number of bytes written (> 0). Upon error, return -1 and set errno. */ ssize_t getrandom (void *buffer, size_t length, unsigned int flags) #undef getrandom { #if defined _WIN32 && ! defined __CYGWIN__ /* BCryptGenRandom, defined in <bcrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom> with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works in Windows 7 and newer. */ static int bcrypt_not_working /* = 0 */; if (!bcrypt_not_working) { # if !HAVE_LIB_BCRYPT if (!initialized) initialize (); # endif if (BCryptGenRandomFunc != NULL && BCryptGenRandomFunc (NULL, buffer, length, BCRYPT_USE_SYSTEM_PREFERRED_RNG) == 0 /*STATUS_SUCCESS*/) return length; bcrypt_not_working = 1; } # if !HAVE_LIB_BCRYPT /* CryptGenRandom, defined in <wincrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom> works in older releases as well, but is now deprecated. CryptAcquireContext, defined in <wincrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta> */ { static int crypt_initialized /* = 0 */; static HCRYPTPROV provider; if (!crypt_initialized) { if (CryptAcquireContext (&provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFY_CONTEXT)) crypt_initialized = 1; else crypt_initialized = -1; } if (crypt_initialized >= 0) { if (!CryptGenRandom (provider, length, buffer)) { errno = EIO; return -1; } return length; } } # endif errno = ENOSYS; return -1; #elif HAVE_GETRANDOM return getrandom (buffer, length, flags); #else static int randfd[2] = { -1, -1 }; bool devrandom = (flags & GRND_RANDOM) != 0; int fd = randfd[devrandom]; if (fd < 0) { static char const randdevice[][MAX (sizeof NAME_OF_NONCE_DEVICE, sizeof NAME_OF_RANDOM_DEVICE)] = { NAME_OF_NONCE_DEVICE, NAME_OF_RANDOM_DEVICE }; int oflags = (O_RDONLY + O_CLOEXEC + (flags & GRND_NONBLOCK ? O_NONBLOCK : 0)); fd = open (randdevice[devrandom], oflags); if (fd < 0) { if (errno == ENOENT || errno == ENOTDIR) errno = ENOSYS; return -1; } randfd[devrandom] = fd; } return read (fd, buffer, length); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getrusage.c�������������������������������������������������������������0000664�0000000�0000000�00000007724�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getrusage replacement for systems which lack it. Copyright (C) 2012-2021 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, 2012. */ #include <config.h> /* Specification. */ #include <sys/resource.h> #include <errno.h> #include <string.h> /* Get uint64_t. */ #include <stdint.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #else # include <sys/times.h> # include <unistd.h> #endif int getrusage (int who, struct rusage *usage_p) { if (who == RUSAGE_SELF || who == RUSAGE_CHILDREN) { /* Clear all unsupported members of 'struct rusage'. */ memset (usage_p, '\0', sizeof (struct rusage)); #if defined _WIN32 && ! defined __CYGWIN__ if (who == RUSAGE_SELF) { /* Fill in the ru_utime and ru_stime members. */ FILETIME creation_time; FILETIME exit_time; FILETIME kernel_time; FILETIME user_time; if (GetProcessTimes (GetCurrentProcess (), &creation_time, &exit_time, &kernel_time, &user_time)) { /* Convert to microseconds, rounding. */ uint64_t kernel_usec = ((((uint64_t) kernel_time.dwHighDateTime << 32) | (uint64_t) kernel_time.dwLowDateTime) + 5) / 10; uint64_t user_usec = ((((uint64_t) user_time.dwHighDateTime << 32) | (uint64_t) user_time.dwLowDateTime) + 5) / 10; usage_p->ru_utime.tv_sec = user_usec / 1000000U; usage_p->ru_utime.tv_usec = user_usec % 1000000U; usage_p->ru_stime.tv_sec = kernel_usec / 1000000U; usage_p->ru_stime.tv_usec = kernel_usec % 1000000U; } } #else /* Fill in the ru_utime and ru_stime members. */ { struct tms time; if (times (&time) != (clock_t) -1) { /* Number of clock ticks per second. */ unsigned int clocks_per_second = sysconf (_SC_CLK_TCK); if (clocks_per_second > 0) { clock_t user_ticks; clock_t system_ticks; uint64_t user_usec; uint64_t system_usec; if (who == RUSAGE_CHILDREN) { user_ticks = time.tms_cutime; system_ticks = time.tms_cstime; } else { user_ticks = time.tms_utime; system_ticks = time.tms_stime; } user_usec = (((uint64_t) user_ticks * (uint64_t) 1000000U) + clocks_per_second / 2) / clocks_per_second; system_usec = (((uint64_t) system_ticks * (uint64_t) 1000000U) + clocks_per_second / 2) / clocks_per_second; usage_p->ru_utime.tv_sec = user_usec / 1000000U; usage_p->ru_utime.tv_usec = user_usec % 1000000U; usage_p->ru_stime.tv_sec = system_usec / 1000000U; usage_p->ru_stime.tv_usec = system_usec % 1000000U; } } } #endif return 0; } else { errno = EINVAL; return -1; } } ��������������������������������������������gnulib-20210822~d383792/lib/getsockname.c�����������������������������������������������������������0000664�0000000�0000000�00000002461�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getsockname.c --- wrappers for Windows getsockname function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef getsockname int rpl_getsockname (int fd, struct sockaddr *addr, socklen_t *addrlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = getsockname (sock, addr, addrlen); if (r < 0) set_winsock_errno (); return r; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getsockopt.c������������������������������������������������������������0000664�0000000�0000000�00000004070�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getsockopt.c --- wrappers for Windows getsockopt function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get struct timeval. */ #include <sys/time.h> /* Get memcpy. */ #include <string.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef getsockopt int rpl_getsockopt (int fd, int level, int optname, void *optval, socklen_t *optlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r; if (level == SOL_SOCKET && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) { int milliseconds; int milliseconds_len = sizeof (int); struct timeval tv; size_t n; r = getsockopt (sock, level, optname, (char *) &milliseconds, &milliseconds_len); tv.tv_sec = milliseconds / 1000; tv.tv_usec = (milliseconds - 1000 * tv.tv_sec) * 1000; n = sizeof (struct timeval); if (n > *optlen) n = *optlen; memcpy (optval, &tv, n); *optlen = n; } else { r = getsockopt (sock, level, optname, optval, optlen); } if (r < 0) set_winsock_errno (); return r; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getsubopt.c�������������������������������������������������������������0000664�0000000�0000000�00000005051�14110572173�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse comma separated list into words. Copyright (C) 1996-1997, 1999, 2004, 2007, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. 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/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #include <string.h> #if !_LIBC /* This code is written for inclusion in gnu-libc, and uses names in the namespace reserved for libc. If we're compiling in gnulib, define those names to be the normal ones instead. */ # undef __strchrnul # define __strchrnul strchrnul #endif /* Parse comma separated suboption from *OPTIONP and match against strings in TOKENS. If found return index and set *VALUEP to optional value introduced by an equal sign. If the suboption is not part of TOKENS return in *VALUEP beginning of unknown suboption. On exit *OPTIONP is set to the beginning of the next token or at the terminating NUL character. */ int getsubopt (char **optionp, char *const *tokens, char **valuep) { char *endp, *vstart; int cnt; if (**optionp == '\0') return -1; /* Find end of next token. */ endp = __strchrnul (*optionp, ','); /* Find start of value. */ vstart = memchr (*optionp, '=', endp - *optionp); if (vstart == NULL) vstart = endp; /* Try to match the characters between *OPTIONP and VSTART against one of the TOKENS. */ for (cnt = 0; tokens[cnt] != NULL; ++cnt) if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0 && tokens[cnt][vstart - *optionp] == '\0') { /* We found the current option in TOKENS. */ *valuep = vstart != endp ? vstart + 1 : NULL; if (*endp != '\0') *endp++ = '\0'; *optionp = endp; return cnt; } /* The current suboption does not match any option. */ *valuep = *optionp; if (*endp != '\0') *endp++ = '\0'; *optionp = endp; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gettext.h���������������������������������������������������������������0000664�0000000�0000000�00000025025�14110572173�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2021 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/>. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include <libintl.h> /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <locale.h> a NOP. We don't include <libintl.h> as well because people using "gettext.h" will not include <libintl.h>, and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> is OK. */ #if defined(__sun) # include <locale.h> #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include <libintl.h>, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <libintl.h> a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include <cstdlib> # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include <libintl.h> # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include <string.h> /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. This relates to the -Wvla and -Wvla-larger-than warnings, enabled in the default GCC many warnings set. This allows programs to disable use of VLAs, which may be unintended, or may be awkward to support portably, or may have security implications due to non-deterministic stack usage. */ #if (!defined GNULIB_NO_VLA \ && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc) || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ )) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include <stdlib.h> #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gettime.c���������������������������������������������������������������0000664�0000000�0000000�00000002447�14110572173�0016656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gettime -- get the system clock Copyright (C) 2002, 2004-2007, 2009-2021 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 Paul Eggert. */ #include <config.h> #include "timespec.h" #include <sys/time.h> /* Get the system time into *TS. */ void gettime (struct timespec *ts) { #if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME clock_gettime (CLOCK_REALTIME, ts); #else struct timeval tv; gettimeofday (&tv, NULL); ts->tv_sec = tv.tv_sec; ts->tv_nsec = tv.tv_usec * 1000; #endif } /* Return the current system time as a struct timespec. */ struct timespec current_timespec (void) { struct timespec ts; gettime (&ts); return ts; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gettimeofday.c����������������������������������������������������������0000664�0000000�0000000�00000011304�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide gettimeofday for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2021 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/time.h> #include <time.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE # include <windows.h> #endif #ifdef WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef LoadLibrary # define LoadLibrary LoadLibraryA # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { GetSystemTimePreciseAsFileTimeFunc = (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); } initialized = TRUE; } # else # define GetSystemTimePreciseAsFileTimeFunc GetSystemTimePreciseAsFileTime # endif #endif /* This is a wrapper for gettimeofday. It is used only on systems that lack this function, or whose implementation of this function causes problems. Work around the bug in some systems whereby gettimeofday clobbers the static buffer that localtime uses for its return value. The gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has this problem. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday #ifdef WINDOWS_NATIVE /* On native Windows, there are two ways to get the current time: GetSystemTimeAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime> or GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. GetSystemTimeAsFileTime produces values that jump by increments of 15.627 milliseconds (!) on average. Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 microseconds. More discussion on this topic: <http://www.windowstimestamp.com/description>. */ FILETIME current_time; # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) if (!initialized) initialize (); # endif if (GetSystemTimePreciseAsFileTimeFunc != NULL) GetSystemTimePreciseAsFileTimeFunc (¤t_time); else GetSystemTimeAsFileTime (¤t_time); /* Convert from FILETIME to 'struct timeval'. */ /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ ULONGLONG since_1601 = ((ULONGLONG) current_time.dwHighDateTime << 32) | (ULONGLONG) current_time.dwLowDateTime; /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ 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; return 0; #else # if HAVE_GETTIMEOFDAY # if defined timeval /* 'struct timeval' overridden by gnulib? */ # undef timeval 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; } # else int result = gettimeofday (tv, (struct timezone *) tz); # endif return result; # else # if !defined OK_TO_USE_1S_CLOCK # 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; return 0; # endif #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getugroups.c������������������������������������������������������������0000664�0000000�0000000�00000006406�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getugroups.c -- return a list of the groups a user is in Copyright (C) 1990-1991, 1998-2000, 2003-2021 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 David MacKenzie. */ #include <config.h> #include "getugroups.h" #include <errno.h> #include <limits.h> #include <stdio.h> /* grp.h on alpha OSF1 V2.0 uses "FILE *". */ #include <string.h> #include <unistd.h> #if !HAVE_GRP_H || defined __ANDROID__ /* Mingw lacks all things related to group management. The best we can do is fail with ENOSYS. Bionic declares e.g. getgrent() in <grp.h> but it isn't actually defined in the library. */ int getugroups (_GL_UNUSED int maxcount, _GL_UNUSED gid_t *grouplist, _GL_UNUSED char const *username, _GL_UNUSED gid_t gid) { errno = ENOSYS; return -1; } #else /* HAVE_GRP_H */ # include <grp.h> # define STREQ(a, b) (strcmp (a, b) == 0) /* Like 'getgroups', but for user USERNAME instead of for the current process. Store at most MAXCOUNT group IDs in the GROUPLIST array. If GID is not -1, store it first (if possible). GID should be the group ID (pw_gid) obtained from getpwuid, in case USERNAME is not listed in /etc/groups. Upon failure, set errno and return -1. Otherwise, return the number of IDs we've written into GROUPLIST. */ int getugroups (int maxcount, gid_t *grouplist, char const *username, gid_t gid) { int count = 0; if (gid != (gid_t) -1) { if (maxcount != 0) grouplist[count] = gid; ++count; } setgrent (); while (1) { char **cp; struct group *grp; errno = 0; grp = getgrent (); if (grp == NULL) break; for (cp = grp->gr_mem; *cp; ++cp) { int n; if ( ! STREQ (username, *cp)) continue; /* See if this group number is already on the list. */ for (n = 0; n < count; ++n) if (grouplist && grouplist[n] == grp->gr_gid) break; /* If it's a new group number, then try to add it to the list. */ if (n == count) { if (maxcount != 0) { if (count >= maxcount) goto done; grouplist[count] = grp->gr_gid; } if (count == INT_MAX) { errno = EOVERFLOW; goto done; } count++; } } } if (errno != 0) count = -1; done: { int saved_errno = errno; endgrent (); errno = saved_errno; } return count; } #endif /* HAVE_GRP_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getugroups.h������������������������������������������������������������0000664�0000000�0000000�00000001623�14110572173�0017424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get a list of group IDs associated with a specified user ID. Copyright (C) 2007, 2009-2021 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/>. */ #include <sys/types.h> int getugroups (int maxcount, gid_t *grouplist, char const *username, gid_t gid); �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getumask.c��������������������������������������������������������������0000664�0000000�0000000�00000010552�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve the umask of the process (multithread-safe). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ /* There are three ways to implement a getumask() function on systems that don't have it: (a) Through system calls on the file system. (b) Through a global variable that the main() function has to set, together with an override of the umask() function. (c) Through { mode_t mask = umask (0); umask (mask); }. Each has its drawbacks: (a) Causes additional system calls. May fail in some rare cases. (b) Causes globally visible code complexity / maintainer effort. (c) Is not multithread-safe: open() calls in other threads may create files with wrong access permissions. Here we implement (a), as the least evil. */ #include <config.h> /* The package may define ASSUME_UMASK_CONSTANT to 1, to indicate that the program does not call umask(). */ /* #define ASSUME_UMASK_CONSTANT 1 */ /* Specification. */ #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "clean-temp.h" #include "tempname.h" mode_t getumask (void) { #if 0 /* This is not multithread-safe! */ mode_t mask = umask (0); umask (mask); return mask; #else # if ASSUME_UMASK_CONSTANT static int cached_umask = -1; if (cached_umask >= 0) return cached_umask; # endif int mask = -1; # if defined __linux__ { /* In Linux >= 4.7, the umask can be retrieved from an "Umask:" line in the /proc/self/status file. */ char buf[4096]; int fd = open ("/proc/self/status", O_RDONLY); if (fd >= 0) { ssize_t n = read (fd, buf, sizeof (buf)); if (n > 0) { const char *p_end = buf + n; const char *p = buf; for (;;) { /* Here we're at the beginning of a line. */ if (p_end - p > 8 && memcmp (p, "Umask:\t0", 8) == 0) { unsigned int value = 0; p += 8; for (; p < p_end && *p >= '0' && *p <= '7'; p++) value = 8 * value + (*p - '0'); if (p < p_end && *p == '\n') mask = value; break; } /* Search the start of the next line. */ for (; p < p_end && *p != '\n'; p++) ; if (p == p_end) break; p++; } } close (fd); } } # endif if (mask < 0) { /* Create a temporary file and inspect its access permissions. */ const char *tmpdir = getenv ("TMPDIR"); if (tmpdir == NULL || *tmpdir == '\0') tmpdir = "/tmp"; size_t tmpdir_length = strlen (tmpdir); char *temp_filename = (char *) malloc (tmpdir_length + 15 + 1); if (temp_filename != NULL) { memcpy (temp_filename, tmpdir, tmpdir_length); strcpy (temp_filename + tmpdir_length, "/gtumask.XXXXXX"); int fd = gen_register_open_temp (temp_filename, 0, O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO); if (fd >= 0) { struct stat statbuf; if (fstat (fd, &statbuf) >= 0) mask = (S_IRWXU|S_IRWXG|S_IRWXO) & ~statbuf.st_mode; close_temp (fd); cleanup_temporary_file (temp_filename, false); } free (temp_filename); } } if (mask < 0) { /* We still don't know! Assume a paranoid user. */ mask = 077; } # if ASSUME_UMASK_CONSTANT cached_umask = mask; # endif return mask; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/getusershell.c����������������������������������������������������������0000664�0000000�0000000�00000010303�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getusershell.c -- Return names of valid user shells. Copyright (C) 1991, 1997, 2000-2001, 2003-2006, 2008-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@gnu.ai.mit.edu> */ #include <config.h> /* Specification. */ #include <unistd.h> #ifndef SHELLS_FILE # ifndef __DJGPP__ /* File containing a list of nonrestricted shells, one per line. */ # define SHELLS_FILE "/etc/shells" # else /* This is a horrible kludge. Isn't there a better way? */ # define SHELLS_FILE "/dev/env/DJDIR/etc/shells" # endif #endif #include <stdlib.h> #include <ctype.h> #include "stdio--.h" #include "xalloc.h" #if GNULIB_GETUSERSHELL_SINGLE_THREAD # include "unlocked-io.h" #endif static idx_t readname (char **, idx_t *, FILE *); #if ! defined ADDITIONAL_DEFAULT_SHELLS && defined __MSDOS__ # define ADDITIONAL_DEFAULT_SHELLS \ "c:/dos/command.com", "c:/windows/command.com", "c:/command.com", #else # define ADDITIONAL_DEFAULT_SHELLS /* empty */ #endif /* List of shells to use if the shells file is missing. */ static char const* const default_shells[] = { ADDITIONAL_DEFAULT_SHELLS "/bin/sh", "/bin/csh", "/usr/bin/sh", "/usr/bin/csh", NULL }; /* Index of the next shell in 'default_shells' to return. 0 means we are not using 'default_shells'. */ static size_t default_index = 0; /* Input stream from the shells file. */ static FILE *shellstream = NULL; /* Line of input from the shells file. */ static char *line = NULL; /* Number of bytes allocated for 'line'. */ static idx_t line_size = 0; /* Return an entry from the shells file, ignoring comment lines. If the file doesn't exist, use the list in DEFAULT_SHELLS (above). In any case, the returned string is in memory allocated through malloc. Return NULL if there are no more entries. */ char * getusershell (void) { if (default_index > 0) { if (default_shells[default_index]) /* Not at the end of the list yet. */ return xstrdup (default_shells[default_index++]); return NULL; } if (shellstream == NULL) { shellstream = fopen (SHELLS_FILE, "r"); if (shellstream == NULL) { /* No shells file. Use the default list. */ default_index = 1; return xstrdup (default_shells[0]); } } while (readname (&line, &line_size, shellstream)) { if (*line != '#') return line; } return NULL; /* End of file. */ } /* Rewind the shells file. */ void setusershell (void) { default_index = 0; if (shellstream) rewind (shellstream); } /* Close the shells file. */ void endusershell (void) { if (shellstream) { fclose (shellstream); shellstream = NULL; } } /* Read a line from STREAM, removing any newline at the end. Place the result in *NAME, which is malloc'd and/or realloc'd as necessary and can start out NULL, and whose size is passed and returned in *SIZE. Return the number of bytes placed in *NAME if some nonempty sequence was found, otherwise 0. */ static idx_t readname (char **name, idx_t *size, FILE *stream) { int c; size_t name_index = 0; /* Skip blank space. */ while ((c = getc (stream)) != EOF && isspace (c)) /* Do nothing. */ ; for (;;) { if (*size <= name_index) *name = xpalloc (*name, size, 1, -1, sizeof **name); if (c == EOF || isspace (c)) break; (*name)[name_index++] = c; c = getc (stream); } (*name)[name_index] = '\0'; return name_index; } #ifdef TEST int main (void) { char *s; while (s = getusershell ()) puts (s); exit (0); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/git-merge-changelog.c���������������������������������������������������0000664�0000000�0000000�00000201744�14110572173�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* git-merge-changelog - git "merge" driver for GNU style ChangeLog files. Copyright (C) 2008-2021 Bruno Haible <bruno@clisp.org> 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/>. */ /* README: The default merge driver of 'git' *always* produces conflicts when pulling public modifications into a privately modified ChangeLog file. This is because ChangeLog files are always modified at the top; the default merge driver has no clue how to deal with this. Furthermore the conflicts are presented with more <<<< ==== >>>> markers than necessary; this is because the default merge driver makes pointless efforts to look at the individual line changes inside a ChangeLog entry. This program serves as a 'git' merge driver that avoids these problems. 1. It produces no conflict when ChangeLog entries have been inserted at the top both in the public and in the private modification. It puts the privately added entries above the publicly added entries. 2. It respects the structure of ChangeLog files: entries are not split into lines but kept together. 3. It also handles the case of small modifications of past ChangeLog entries, or of removed ChangeLog entries: they are merged as one would expect it. 4. Conflicts are presented at the top of the file, rather than where they occurred, so that the user will see them immediately. (Unlike for source code written in some programming language, conflict markers that are located several hundreds lines from the top will not cause any syntax error and therefore would be likely to remain unnoticed.) */ /* Installation: $ gnulib-tool --create-testdir --dir=/tmp/testdir123 git-merge-changelog $ cd /tmp/testdir123 $ ./configure $ make $ make install Additionally, for git users: - Add to .git/config of the checkout (or to your $HOME/.gitconfig) the lines [merge "merge-changelog"] name = GNU-style ChangeLog merge driver driver = /usr/local/bin/git-merge-changelog %O %A %B - In every directory that contains a ChangeLog file, add a file '.gitattributes' with this line: ChangeLog merge=merge-changelog (See "man 5 gitattributes" for more info.) Additionally, for bzr users: - Install the 'extmerge' bzr plug-in listed at <http://doc.bazaar.canonical.com/plugins/en/index.html> <http://wiki.bazaar.canonical.com/BzrPlugins> - Add to your $HOME/.bazaar/bazaar.conf the line external_merge = git-merge-changelog %b %T %o - Then, to merge a conflict in a ChangeLog file, use $ bzr extmerge ChangeLog Additionally, for hg users: - Add to your $HOME/.hgrc the lines [merge-patterns] ChangeLog = git-merge-changelog [merge-tools] git-merge-changelog.executable = /usr/local/bin/git-merge-changelog git-merge-changelog.args = $base $local $other See <https://www.selenic.com/mercurial/hgrc.5.html> section merge-tools for reference. */ /* Use as an alternative to 'diff3': git-merge-changelog performs the same role as "diff3 -m", just with reordered arguments: $ git-merge-changelog %O %A %B is comparable to $ diff3 -m %A %O %B */ /* Calling convention: A merge driver is called with three filename arguments: 1. %O = The common ancestor of %A and %B. 2. %A = The file's contents from the "current branch". 3. %B = The file's contents from the "other branch"; this is the contents being merged in. In case of a "git stash apply" or of an upstream pull (e.g. from a subsystem maintainer to a central maintainer) or of a downstream pull with --rebase: 2. %A = The file's newest pulled contents; modified by other committers. 3. %B = The user's newest copy of the file; modified by the user. In case of a downstream pull (e.g. from a central repository to the user) or of an upstream pull with --rebase: 2. %A = The user's newest copy of the file; modified by the user. 3. %B = The file's newest pulled contents; modified by other committers. It should write its merged output into file %A. It can also echo some remarks to stdout. It should exit with return code 0 if the merge could be resolved cleanly, or with non-zero return code if there were conflicts. */ /* How it works: The structure of a ChangeLog file: It consists of ChangeLog entries. A ChangeLog entry starts at a line following a blank line and that starts with a non-whitespace character, or at the beginning of a file. The merge driver works as follows: It reads the three files into memory and dissects them into ChangeLog entries. It then finds the differences between %O and %B. They are classified as: - removals (some consecutive entries removed), - changes (some consecutive entries removed, some consecutive entries added), - additions (some consecutive entries added). The driver then attempts to apply the changes to %A. To this effect, it first computes a correspondence between the entries in %O and the entries in %A, using fuzzy string matching to still identify changed entries. - Removals are applied one by one. If the entry is present in %A, at any position, it is removed. If not, the removal is marked as a conflict. - Additions at the top of %B are applied at the top of %A. - Additions between entry x and entry y (y may be the file end) in %B are applied between entry x and entry y in %A (if they still exist and are still consecutive in %A), otherwise the additions are marked as a conflict. - Changes are categorized into "simple changes": entry1 ... entryn are mapped to added_entry ... added_entry modified_entry1 ... modified_entryn, where the correspondence between entry_i and modified_entry_i is still clear; and "big changes": these are all the rest. Simple changes at the top of %B are applied by putting the added entries at the top of %A. The changes in simple changes are applied one by one; possibly leading to single-entry conflicts. Big changes are applied en bloc, possibly leading to conflicts spanning multiple entries. - Conflicts are output at the top of the file and cause an exit status of 1. */ #include <config.h> #include <getopt.h> #include <limits.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include "error.h" #include "read-file.h" #include "gl_xlist.h" #include "gl_array_list.h" #include "gl_linkedhash_list.h" #include "gl_rbtreehash_list.h" #include "gl_linked_list.h" #include "xalloc.h" #include "xmalloca.h" #include "fstrcmp.h" #include "minmax.h" #include "c-strstr.h" #include "fwriteerror.h" #include "getprogname.h" #define ASSERT(expr) \ do \ { \ if (!(expr)) \ abort (); \ } \ while (0) #define FSTRCMP_THRESHOLD 0.6 #define FSTRCMP_STRICTER_THRESHOLD 0.8 /* Representation of a ChangeLog entry. The string may contain NUL bytes; therefore it is represented as a plain opaque memory region. */ struct entry { char *string; size_t length; /* Cache for the hash code. */ bool hashcode_cached; size_t hashcode; }; /* Create an entry. The memory region passed by the caller must of indefinite extent. It is *not* copied here. */ static struct entry * entry_create (char *string, size_t length) { struct entry *result = XMALLOC (struct entry); result->string = string; result->length = length; result->hashcode_cached = false; return result; } /* Compare two entries for equality. */ static bool entry_equals (const void *elt1, const void *elt2) { const struct entry *entry1 = (const struct entry *) elt1; const struct entry *entry2 = (const struct entry *) elt2; return entry1->length == entry2->length && memcmp (entry1->string, entry2->string, entry1->length) == 0; } /* Return a hash code of the contents of a ChangeLog entry. */ static size_t entry_hashcode (const void *elt) { struct entry *entry = (struct entry *) elt; if (!entry->hashcode_cached) { /* See https://www.haible.de/bruno/hashfunc.html. */ const char *s; size_t n; size_t h = 0; for (s = entry->string, n = entry->length; n > 0; s++, n--) h = (unsigned char) *s + ((h << 9) | (h >> (sizeof (size_t) * CHAR_BIT - 9))); entry->hashcode = h; entry->hashcode_cached = true; } return entry->hashcode; } /* Perform a fuzzy comparison of two ChangeLog entries. Return a similarity measure of the two entries, a value between 0 and 1. 0 stands for very distinct, 1 for identical. If the result is < LOWER_BOUND, an arbitrary other value < LOWER_BOUND can be returned. */ static double entry_fstrcmp (const struct entry *entry1, const struct entry *entry2, double lower_bound) { /* fstrcmp works only on NUL terminated strings. */ char *memory; double similarity; if (memchr (entry1->string, '\0', entry1->length) != NULL) return 0.0; if (memchr (entry2->string, '\0', entry2->length) != NULL) return 0.0; memory = (char *) xmalloca (entry1->length + 1 + entry2->length + 1); { char *p = memory; memcpy (p, entry1->string, entry1->length); p += entry1->length; *p++ = '\0'; memcpy (p, entry2->string, entry2->length); p += entry2->length; *p++ = '\0'; } similarity = fstrcmp_bounded (memory, memory + entry1->length + 1, lower_bound); freea (memory); return similarity; } /* This structure represents an entire ChangeLog file, after it was read into memory. */ struct changelog_file { /* The entries, as a list. */ gl_list_t /* <struct entry *> */ entries_list; /* The entries, as a list in opposite direction. */ gl_list_t /* <struct entry *> */ entries_reversed; /* The entries, as an array. */ size_t num_entries; struct entry **entries; }; /* Read a ChangeLog file into memory. Return the contents in *RESULT. */ static void read_changelog_file (const char *filename, struct changelog_file *result) { /* Read the file in text mode, otherwise it's hard to recognize empty lines. */ size_t length; char *contents = read_file (filename, 0, &length); if (contents == NULL) { fprintf (stderr, "could not read file '%s'\n", filename); exit (EXIT_FAILURE); } result->entries_list = gl_list_create_empty (GL_LINKEDHASH_LIST, entry_equals, entry_hashcode, NULL, true); result->entries_reversed = gl_list_create_empty (GL_RBTREEHASH_LIST, entry_equals, entry_hashcode, NULL, true); /* A ChangeLog file consists of ChangeLog entries. A ChangeLog entry starts at a line following a blank line and that starts with a non-whitespace character, or at the beginning of a file. Split the file contents into entries. */ { char *contents_end = contents + length; char *start = contents; while (start < contents_end) { /* Search the end of the current entry. */ char *ptr = start; struct entry *curr; while (ptr < contents_end) { ptr = memchr (ptr, '\n', contents_end - ptr); if (ptr == NULL) { ptr = contents_end; break; } ptr++; if (contents_end - ptr >= 2 && ptr[0] == '\n' && !(ptr[1] == '\n' || ptr[1] == '\t' || ptr[1] == ' ')) { ptr++; break; } } curr = entry_create (start, ptr - start); gl_list_add_last (result->entries_list, curr); gl_list_add_first (result->entries_reversed, curr); start = ptr; } } result->num_entries = gl_list_size (result->entries_list); result->entries = XNMALLOC (result->num_entries, struct entry *); { size_t index = 0; gl_list_iterator_t iter = gl_list_iterator (result->entries_list); const void *elt; gl_list_node_t node; while (gl_list_iterator_next (&iter, &elt, &node)) result->entries[index++] = (struct entry *) elt; gl_list_iterator_free (&iter); ASSERT (index == result->num_entries); } } /* A mapping (correspondence) between entries of FILE1 and of FILE2. */ struct entries_mapping { struct changelog_file *file1; struct changelog_file *file2; /* Mapping from indices in FILE1 to indices in FILE2. A value -1 means that the entry from FILE1 is not found in FILE2. A value -2 means that it has not yet been computed. */ ssize_t *index_mapping; /* Mapping from indices in FILE2 to indices in FILE1. A value -1 means that the entry from FILE2 is not found in FILE1. A value -2 means that it has not yet been computed. */ ssize_t *index_mapping_reverse; }; /* Look up (or lazily compute) the mapping of an entry in FILE1. i is the index in FILE1. Return the index in FILE2, or -1 when the entry is not found in FILE2. */ static ssize_t entries_mapping_get (struct entries_mapping *mapping, ssize_t i) { if (mapping->index_mapping[i] < -1) { struct changelog_file *file1 = mapping->file1; struct changelog_file *file2 = mapping->file2; size_t n1 = file1->num_entries; size_t n2 = file2->num_entries; struct entry *entry_i = file1->entries[i]; ssize_t j; /* Search whether it approximately occurs in file2. */ ssize_t best_j = -1; double best_j_similarity = 0.0; for (j = n2 - 1; j >= 0; j--) if (mapping->index_mapping_reverse[j] < 0) { double similarity = entry_fstrcmp (entry_i, file2->entries[j], best_j_similarity); if (similarity > best_j_similarity) { best_j = j; best_j_similarity = similarity; } } if (best_j_similarity >= FSTRCMP_THRESHOLD) { /* Found a similar entry in file2. */ struct entry *entry_j = file2->entries[best_j]; /* Search whether it approximately occurs in file1 at index i. */ ssize_t best_i = -1; double best_i_similarity = 0.0; ssize_t ii; for (ii = n1 - 1; ii >= 0; ii--) if (mapping->index_mapping[ii] < 0) { double similarity = entry_fstrcmp (file1->entries[ii], entry_j, best_i_similarity); if (similarity > best_i_similarity) { best_i = ii; best_i_similarity = similarity; } } if (best_i_similarity >= FSTRCMP_THRESHOLD && best_i == i) { mapping->index_mapping[i] = best_j; mapping->index_mapping_reverse[best_j] = i; } } if (mapping->index_mapping[i] < -1) /* It does not approximately occur in FILE2. Remember it, for next time. */ mapping->index_mapping[i] = -1; } return mapping->index_mapping[i]; } /* Look up (or lazily compute) the mapping of an entry in FILE2. j is the index in FILE2. Return the index in FILE1, or -1 when the entry is not found in FILE1. */ static ssize_t entries_mapping_reverse_get (struct entries_mapping *mapping, ssize_t j) { if (mapping->index_mapping_reverse[j] < -1) { struct changelog_file *file1 = mapping->file1; struct changelog_file *file2 = mapping->file2; size_t n1 = file1->num_entries; size_t n2 = file2->num_entries; struct entry *entry_j = file2->entries[j]; ssize_t i; /* Search whether it approximately occurs in file1. */ ssize_t best_i = -1; double best_i_similarity = 0.0; for (i = n1 - 1; i >= 0; i--) if (mapping->index_mapping[i] < 0) { double similarity = entry_fstrcmp (file1->entries[i], entry_j, best_i_similarity); if (similarity > best_i_similarity) { best_i = i; best_i_similarity = similarity; } } if (best_i_similarity >= FSTRCMP_THRESHOLD) { /* Found a similar entry in file1. */ struct entry *entry_i = file1->entries[best_i]; /* Search whether it approximately occurs in file2 at index j. */ ssize_t best_j = -1; double best_j_similarity = 0.0; ssize_t jj; for (jj = n2 - 1; jj >= 0; jj--) if (mapping->index_mapping_reverse[jj] < 0) { double similarity = entry_fstrcmp (entry_i, file2->entries[jj], best_j_similarity); if (similarity > best_j_similarity) { best_j = jj; best_j_similarity = similarity; } } if (best_j_similarity >= FSTRCMP_THRESHOLD && best_j == j) { mapping->index_mapping_reverse[j] = best_i; mapping->index_mapping[best_i] = j; } } if (mapping->index_mapping_reverse[j] < -1) /* It does not approximately occur in FILE1. Remember it, for next time. */ mapping->index_mapping_reverse[j] = -1; } return mapping->index_mapping_reverse[j]; } /* Compute a mapping (correspondence) between entries of FILE1 and of FILE2. The correspondence also takes into account small modifications; i.e. the indicated relation is not equality of entries but best-match similarity of entries. If FULL is true, the maximum of matching is done up-front. If it is false, it is done in a lazy way through the functions entries_mapping_get and entries_mapping_reverse_get. Return the result in *RESULT. */ static void compute_mapping (struct changelog_file *file1, struct changelog_file *file2, bool full, struct entries_mapping *result) { /* Mapping from indices in file1 to indices in file2. */ ssize_t *index_mapping; /* Mapping from indices in file2 to indices in file1. */ ssize_t *index_mapping_reverse; size_t n1 = file1->num_entries; size_t n2 = file2->num_entries; ssize_t i, j; index_mapping = XNMALLOC (n1, ssize_t); for (i = 0; i < n1; i++) index_mapping[i] = -2; index_mapping_reverse = XNMALLOC (n2, ssize_t); for (j = 0; j < n2; j++) index_mapping_reverse[j] = -2; for (i = n1 - 1; i >= 0; i--) /* Take an entry from file1. */ if (index_mapping[i] < -1) { struct entry *entry = file1->entries[i]; /* Search whether it occurs in file2. */ j = gl_list_indexof (file2->entries_reversed, entry); if (j >= 0) { j = n2 - 1 - j; /* Found an exact correspondence. */ /* If index_mapping_reverse[j] >= 0, we have already seen other copies of this entry, and there were more occurrences of it in file1 than in file2. In this case, do nothing. */ if (index_mapping_reverse[j] < 0) { index_mapping[i] = j; index_mapping_reverse[j] = i; /* Look for more occurrences of the same entry. Match them as long as they pair up. Unpaired occurrences of the same entry are left without mapping. */ { ssize_t curr_i = i; ssize_t curr_j = j; for (;;) { ssize_t next_i; ssize_t next_j; next_i = gl_list_indexof_from (file1->entries_reversed, n1 - curr_i, entry); if (next_i < 0) break; next_j = gl_list_indexof_from (file2->entries_reversed, n2 - curr_j, entry); if (next_j < 0) break; curr_i = n1 - 1 - next_i; curr_j = n2 - 1 - next_j; ASSERT (index_mapping[curr_i] < 0); ASSERT (index_mapping_reverse[curr_j] < 0); index_mapping[curr_i] = curr_j; index_mapping_reverse[curr_j] = curr_i; } } } } } result->file1 = file1; result->file2 = file2; result->index_mapping = index_mapping; result->index_mapping_reverse = index_mapping_reverse; if (full) for (i = n1 - 1; i >= 0; i--) entries_mapping_get (result, i); } /* An "edit" is a textual modification performed by the user, that needs to be applied to the other file. */ enum edit_type { /* Some consecutive entries were added. */ ADDITION, /* Some consecutive entries were removed; some other consecutive entries were added at the same position. (Not necessarily the same number of entries.) */ CHANGE, /* Some consecutive entries were removed. */ REMOVAL }; /* This structure represents an edit. */ struct edit { enum edit_type type; /* Range of indices into the entries of FILE1. */ ssize_t i1, i2; /* first, last index; only used for CHANGE, REMOVAL */ /* Range of indices into the entries of FILE2. */ ssize_t j1, j2; /* first, last index; only used for ADDITION, CHANGE */ }; /* This structure represents the differences from one file, FILE1, to another file, FILE2. */ struct differences { /* An array mapping FILE1 indices to FILE2 indices (or -1 when the entry from FILE1 is not found in FILE2). */ ssize_t *index_mapping; /* An array mapping FILE2 indices to FILE1 indices (or -1 when the entry from FILE2 is not found in FILE1). */ ssize_t *index_mapping_reverse; /* The edits that transform FILE1 into FILE2. */ size_t num_edits; struct edit **edits; }; /* Import the difference detection algorithm from GNU diff. */ #define ELEMENT struct entry * #define EQUAL entry_equals #define OFFSET ssize_t #define EXTRA_CONTEXT_FIELDS \ ssize_t *index_mapping; \ ssize_t *index_mapping_reverse; #define NOTE_DELETE(ctxt, xoff) \ ctxt->index_mapping[xoff] = -1 #define NOTE_INSERT(ctxt, yoff) \ ctxt->index_mapping_reverse[yoff] = -1 #include "diffseq.h" /* Compute the differences between the entries of FILE1 and the entries of FILE2. */ static void compute_differences (struct changelog_file *file1, struct changelog_file *file2, struct differences *result) { /* Unlike compute_mapping, which mostly ignores the order of the entries and therefore works well when some entries are permuted, here we use the order. I think this is needed in order to distinguish changes from additions+removals; I don't know how to say what is a "change" if the files are considered as unordered sets of entries. */ struct context ctxt; size_t n1 = file1->num_entries; size_t n2 = file2->num_entries; ssize_t i; ssize_t j; gl_list_t /* <struct edit *> */ edits; ctxt.xvec = file1->entries; ctxt.yvec = file2->entries; ctxt.index_mapping = XNMALLOC (n1, ssize_t); for (i = 0; i < n1; i++) ctxt.index_mapping[i] = 0; ctxt.index_mapping_reverse = XNMALLOC (n2, ssize_t); for (j = 0; j < n2; j++) ctxt.index_mapping_reverse[j] = 0; ctxt.fdiag = XNMALLOC (2 * (n1 + n2 + 3), ssize_t) + n2 + 1; ctxt.bdiag = ctxt.fdiag + n1 + n2 + 3; ctxt.too_expensive = n1 + n2; /* Store in ctxt.index_mapping and ctxt.index_mapping_reverse a -1 for each removed or added entry. */ compareseq (0, n1, 0, n2, 0, &ctxt); /* Complete the index_mapping and index_mapping_reverse arrays. */ i = 0; j = 0; while (i < n1 || j < n2) { while (i < n1 && ctxt.index_mapping[i] < 0) i++; while (j < n2 && ctxt.index_mapping_reverse[j] < 0) j++; ASSERT ((i < n1) == (j < n2)); if (i == n1 && j == n2) break; ctxt.index_mapping[i] = j; ctxt.index_mapping_reverse[j] = i; i++; j++; } /* Create the edits. */ edits = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true); i = 0; j = 0; while (i < n1 || j < n2) { if (i == n1) { struct edit *e; ASSERT (j < n2); e = XMALLOC (struct edit); e->type = ADDITION; e->j1 = j; e->j2 = n2 - 1; gl_list_add_last (edits, e); break; } if (j == n2) { struct edit *e; ASSERT (i < n1); e = XMALLOC (struct edit); e->type = REMOVAL; e->i1 = i; e->i2 = n1 - 1; gl_list_add_last (edits, e); break; } if (ctxt.index_mapping[i] >= 0) { if (ctxt.index_mapping_reverse[j] >= 0) { ASSERT (ctxt.index_mapping[i] == j); ASSERT (ctxt.index_mapping_reverse[j] == i); i++; j++; } else { struct edit *e; ASSERT (ctxt.index_mapping_reverse[j] < 0); e = XMALLOC (struct edit); e->type = ADDITION; e->j1 = j; do j++; while (j < n2 && ctxt.index_mapping_reverse[j] < 0); e->j2 = j - 1; gl_list_add_last (edits, e); } } else { if (ctxt.index_mapping_reverse[j] >= 0) { struct edit *e; ASSERT (ctxt.index_mapping[i] < 0); e = XMALLOC (struct edit); e->type = REMOVAL; e->i1 = i; do i++; while (i < n1 && ctxt.index_mapping[i] < 0); e->i2 = i - 1; gl_list_add_last (edits, e); } else { struct edit *e; ASSERT (ctxt.index_mapping[i] < 0); ASSERT (ctxt.index_mapping_reverse[j] < 0); e = XMALLOC (struct edit); e->type = CHANGE; e->i1 = i; do i++; while (i < n1 && ctxt.index_mapping[i] < 0); e->i2 = i - 1; e->j1 = j; do j++; while (j < n2 && ctxt.index_mapping_reverse[j] < 0); e->j2 = j - 1; gl_list_add_last (edits, e); } } } result->index_mapping = ctxt.index_mapping; result->index_mapping_reverse = ctxt.index_mapping_reverse; result->num_edits = gl_list_size (edits); result->edits = XNMALLOC (result->num_edits, struct edit *); { size_t index = 0; gl_list_iterator_t iter = gl_list_iterator (edits); const void *elt; gl_list_node_t node; while (gl_list_iterator_next (&iter, &elt, &node)) result->edits[index++] = (struct edit *) elt; gl_list_iterator_free (&iter); ASSERT (index == result->num_edits); } } /* An empty entry. */ static struct entry empty_entry = { NULL, 0 }; /* Return the end a paragraph. ENTRY is an entry. OFFSET is an offset into the entry, OFFSET <= ENTRY->length. Return the offset of the end of paragraph, as an offset <= ENTRY->length; it is the start of a blank line or the end of the entry. */ static size_t find_paragraph_end (const struct entry *entry, size_t offset) { const char *string = entry->string; size_t length = entry->length; for (;;) { const char *nl = memchr (string + offset, '\n', length - offset); if (nl == NULL) return length; offset = (nl - string) + 1; if (offset < length && string[offset] == '\n') return offset; } } /* Split a merged entry. Given an old entry of the form TITLE BODY and a new entry of the form TITLE BODY1 BODY' where the two titles are the same and BODY and BODY' are very similar, this computes two new entries TITLE BODY1 and TITLE BODY' and returns true. If the entries don't have this form, it returns false. */ static bool try_split_merged_entry (const struct entry *old_entry, const struct entry *new_entry, struct entry *new_split[2]) { size_t old_title_len = find_paragraph_end (old_entry, 0); size_t new_title_len = find_paragraph_end (new_entry, 0); struct entry old_body; struct entry new_body; size_t best_split_offset; double best_similarity; size_t split_offset; /* Same title? */ if (!(old_title_len == new_title_len && memcmp (old_entry->string, new_entry->string, old_title_len) == 0)) return false; old_body.string = old_entry->string + old_title_len; old_body.length = old_entry->length - old_title_len; /* Determine where to split the new entry. This is done by maximizing the similarity between BODY and BODY'. */ best_split_offset = split_offset = new_title_len; best_similarity = 0.0; for (;;) { double similarity; new_body.string = new_entry->string + split_offset; new_body.length = new_entry->length - split_offset; similarity = entry_fstrcmp (&old_body, &new_body, best_similarity); if (similarity > best_similarity) { best_split_offset = split_offset; best_similarity = similarity; } if (best_similarity == 1.0) /* It cannot get better. */ break; if (split_offset < new_entry->length) split_offset = find_paragraph_end (new_entry, split_offset + 1); else break; } /* BODY' should not be empty. */ if (best_split_offset == new_entry->length) return false; ASSERT (new_entry->string[best_split_offset] == '\n'); /* A certain similarity between BODY and BODY' is required. */ if (best_similarity < FSTRCMP_STRICTER_THRESHOLD) return false; new_split[0] = entry_create (new_entry->string, best_split_offset + 1); { size_t len1 = new_title_len; size_t len2 = new_entry->length - best_split_offset; char *combined = XNMALLOC (len1 + len2, char); memcpy (combined, new_entry->string, len1); memcpy (combined + len1, new_entry->string + best_split_offset, len2); new_split[1] = entry_create (combined, len1 + len2); } return true; } /* Write the contents of an entry to the output stream FP. */ static void entry_write (FILE *fp, struct entry *entry) { if (entry->length > 0) fwrite (entry->string, 1, entry->length, fp); } /* This structure represents a conflict. A conflict can occur for various reasons. */ struct conflict { /* Parts from the ancestor file. */ size_t num_old_entries; struct entry **old_entries; /* Parts of the modified file. */ size_t num_modified_entries; struct entry **modified_entries; }; /* Write a conflict to the output stream FP, including markers. */ static void conflict_write (FILE *fp, struct conflict *c) { size_t i; /* Use the same syntax as git's default merge driver. Don't indent the contents of the entries (with things like ">" or "-"), otherwise the user needs more textual editing to resolve the conflict. */ fputs ("<<<<<<<\n", fp); for (i = 0; i < c->num_old_entries; i++) entry_write (fp, c->old_entries[i]); fputs ("=======\n", fp); for (i = 0; i < c->num_modified_entries; i++) entry_write (fp, c->modified_entries[i]); fputs (">>>>>>>\n", fp); } /* Long options. */ static const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "split-merged-entry", no_argument, NULL, CHAR_MAX + 1 }, { "version", no_argument, NULL, 'V' }, { NULL, 0, NULL, 0 } }; /* Print a usage message and exit. */ static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, "Try '%s --help' for more information.\n", getprogname ()); else { printf ("Usage: %s [OPTION] O-FILE-NAME A-FILE-NAME B-FILE-NAME\n", getprogname ()); printf ("\n"); printf ("Merges independent modifications of a ChangeLog style file.\n"); printf ("O-FILE-NAME names the original file, the ancestor of the two others.\n"); printf ("A-FILE-NAME names the publicly modified file.\n"); printf ("B-FILE-NAME names the user-modified file.\n"); printf ("Writes the merged file into A-FILE-NAME.\n"); printf ("\n"); #if 0 /* --split-merged-entry is now on by default. */ printf ("Operation modifiers:\n"); printf ("\ --split-merged-entry Possibly split a merged entry between paragraphs.\n\ Use this if you have the habit to merge unrelated\n\ entries into a single one, separated only by a\n\ newline, just because they happened on the same\n\ date.\n"); printf ("\n"); #endif printf ("Informative output:\n"); printf (" -h, --help display this help and exit\n"); printf (" -V, --version output version information and exit\n"); printf ("\n"); fputs ("Report bugs to <bug-gnulib@gnu.org>.\n", stdout); } exit (status); } int main (int argc, char *argv[]) { int optchar; bool do_help; bool do_version; bool split_merged_entry; /* Set default values for variables. */ do_help = false; do_version = false; split_merged_entry = true; /* Parse command line options. */ while ((optchar = getopt_long (argc, argv, "hV", long_options, NULL)) != EOF) switch (optchar) { case '\0': /* Long option. */ break; case 'h': do_help = true; break; case 'V': do_version = true; break; case CHAR_MAX + 1: /* --split-merged-entry */ break; default: usage (EXIT_FAILURE); } if (do_version) { /* Version information is requested. */ printf ("%s\n", getprogname ()); printf ("Copyright (C) %s Free Software Foundation, Inc.\n\ License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law.\n\ ", "2020"); printf ("Written by %s.\n", "Bruno Haible"); exit (EXIT_SUCCESS); } if (do_help) { /* Help is requested. */ usage (EXIT_SUCCESS); } /* Test argument count. */ if (optind + 3 != argc) error (EXIT_FAILURE, 0, "expected three arguments"); { const char *ancestor_file_name; /* O-FILE-NAME */ const char *destination_file_name; /* A-FILE-NAME */ bool downstream; const char *other_file_name; /* B-FILE-NAME */ const char *mainstream_file_name; const char *modified_file_name; struct changelog_file ancestor_file; struct changelog_file mainstream_file; struct changelog_file modified_file; /* Mapping from indices in ancestor_file to indices in mainstream_file. */ struct entries_mapping mapping; struct differences diffs; gl_list_node_t *result_entries_pointers; /* array of pointers into result_entries */ gl_list_t /* <struct entry *> */ result_entries; gl_list_t /* <struct conflict *> */ result_conflicts; ancestor_file_name = argv[optind]; destination_file_name = argv[optind + 1]; other_file_name = argv[optind + 2]; /* Heuristic to determine whether it's a pull in downstream direction (e.g. pull from a centralized server) or a pull in upstream direction (e.g. "git stash apply"). For ChangeLog this distinction is important. The difference between an "upstream" and a "downstream" repository is that more people are looking at the "upstream" repository. They want to be informed about changes and expect them to be shown at the top of the ChangeLog. When a user pulls downstream, on the other hand, he has two options: a) He gets the change entries from the central repository also at the top of his ChangeLog, and his own changes come after them. b) He gets the change entries from the central repository after those he has collected for his branch. His own change entries stay at the top of the ChangeLog file. In the case a) he has to reorder the ChangeLog before he can commit. No one does that. So most people want b). In other words, the order of entries in a ChangeLog should represent the order in which they have flown (or will flow) into the *central* repository. But in git this is fundamentally indistinguishable, because when Linus pulls patches from akpm and akpm pulls patches from Linus, it's not clear which of the two is more "upstream". Also, when you have many branches in a repository and pull from one to another, "git" has no way to know which branch is more "upstream" than the other. The git-tag(1) manual page also says: "One important aspect of git is it is distributed, and being distributed largely means there is no inherent "upstream" or "downstream" in the system." Therefore anyone who attempts to produce a ChangeLog from the merge history will fail. Here we allow the user to specify the pull direction through an environment variable (GIT_UPSTREAM or GIT_DOWNSTREAM). If these two environment variables are not set, we assume a "simple single user" usage pattern: He manages local changes through stashes and uses "git pull" only to pull downstream. How to distinguish these situation? There are several hints: - During a "git stash apply", GIT_REFLOG_ACTION is not set. During a "git pull", it is set to 'pull '. During a "git pull --rebase", it is set to 'pull --rebase'. During a "git cherry-pick", it is set to 'cherry-pick'. - During a "git stash apply", there is an environment variable of the form GITHEAD_<40_hex_digits>='Stashed changes'. */ { const char *var; var = getenv ("GIT_DOWNSTREAM"); if (var != NULL && var[0] != '\0') downstream = true; else { var = getenv ("GIT_UPSTREAM"); if (var != NULL && var[0] != '\0') downstream = false; else { var = getenv ("GIT_REFLOG_ACTION"); #if 0 /* Debugging code */ printf ("GIT_REFLOG_ACTION=|%s|\n", var); #endif if (var != NULL && ((strncmp (var, "pull", 4) == 0 && c_strstr (var, " --rebase") == NULL) || strncmp (var, "merge origin", 12) == 0)) downstream = true; else { /* "git stash apply", "git rebase", "git cherry-pick" and similar. */ downstream = false; } } } } #if 0 /* Debugging code */ { char buf[1000]; printf ("First line of %%A:\n"); sprintf (buf, "head -1 %s", destination_file_name); system (buf); printf ("First line of %%B:\n"); sprintf (buf, "head -1 %s", other_file_name); system (buf); printf ("Guessing calling convention: %s\n", downstream ? "%A = modified by user, %B = upstream" : "%A = upstream, %B = modified by user"); } #endif if (downstream) { mainstream_file_name = other_file_name; modified_file_name = destination_file_name; } else { mainstream_file_name = destination_file_name; modified_file_name = other_file_name; } /* Read the three files into memory. */ read_changelog_file (ancestor_file_name, &ancestor_file); read_changelog_file (mainstream_file_name, &mainstream_file); read_changelog_file (modified_file_name, &modified_file); /* Compute correspondence between the entries of ancestor_file and of mainstream_file. */ compute_mapping (&ancestor_file, &mainstream_file, false, &mapping); (void) entries_mapping_reverse_get; /* avoid gcc "defined but not" warning */ /* Compute differences between the entries of ancestor_file and of modified_file. */ compute_differences (&ancestor_file, &modified_file, &diffs); /* Compute the result. */ result_entries_pointers = XNMALLOC (mainstream_file.num_entries, gl_list_node_t); result_entries = gl_list_create_empty (GL_LINKED_LIST, entry_equals, entry_hashcode, NULL, true); { size_t k; for (k = 0; k < mainstream_file.num_entries; k++) result_entries_pointers[k] = gl_list_add_last (result_entries, mainstream_file.entries[k]); } result_conflicts = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true); { size_t e; for (e = 0; e < diffs.num_edits; e++) { struct edit *edit = diffs.edits[e]; switch (edit->type) { case ADDITION: if (edit->j1 == 0) { /* An addition to the top of modified_file. Apply it to the top of mainstream_file. */ ssize_t j; for (j = edit->j2; j >= edit->j1; j--) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_first (result_entries, added_entry); } } else { ssize_t i_before; ssize_t i_after; ssize_t k_before; ssize_t k_after; i_before = diffs.index_mapping_reverse[edit->j1 - 1]; ASSERT (i_before >= 0); i_after = (edit->j2 + 1 == modified_file.num_entries ? ancestor_file.num_entries : diffs.index_mapping_reverse[edit->j2 + 1]); ASSERT (i_after >= 0); ASSERT (i_after == i_before + 1); /* An addition between ancestor_file.entries[i_before] and ancestor_file.entries[i_after]. See whether these two entries still exist in mainstream_file and are still consecutive. */ k_before = entries_mapping_get (&mapping, i_before); k_after = (i_after == ancestor_file.num_entries ? mainstream_file.num_entries : entries_mapping_get (&mapping, i_after)); if (k_before >= 0 && k_after >= 0 && k_after == k_before + 1) { /* Yes, the entry before and after are still neighbours in mainstream_file. Apply the addition between them. */ if (k_after == mainstream_file.num_entries) { size_t j; for (j = edit->j1; j <= edit->j2; j++) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_last (result_entries, added_entry); } } else { gl_list_node_t node_k_after = result_entries_pointers[k_after]; size_t j; for (j = edit->j1; j <= edit->j2; j++) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_before (result_entries, node_k_after, added_entry); } } } else { /* It's not clear where the additions should be applied. Let the user decide. */ struct conflict *c = XMALLOC (struct conflict); size_t j; c->num_old_entries = 0; c->old_entries = NULL; c->num_modified_entries = edit->j2 - edit->j1 + 1; c->modified_entries = XNMALLOC (c->num_modified_entries, struct entry *); for (j = edit->j1; j <= edit->j2; j++) c->modified_entries[j - edit->j1] = modified_file.entries[j]; gl_list_add_last (result_conflicts, c); } } break; case REMOVAL: { /* Apply the removals one by one. */ size_t i; for (i = edit->i1; i <= edit->i2; i++) { struct entry *removed_entry = ancestor_file.entries[i]; ssize_t k = entries_mapping_get (&mapping, i); if (k >= 0 && entry_equals (removed_entry, mainstream_file.entries[k])) { /* The entry to be removed still exists in mainstream_file. Remove it. */ gl_list_node_set_value (result_entries, result_entries_pointers[k], &empty_entry); } else { /* The entry to be removed was already removed or was modified. This is a conflict. */ struct conflict *c = XMALLOC (struct conflict); c->num_old_entries = 1; c->old_entries = XNMALLOC (c->num_old_entries, struct entry *); c->old_entries[0] = removed_entry; c->num_modified_entries = 0; c->modified_entries = NULL; gl_list_add_last (result_conflicts, c); } } } break; case CHANGE: { bool done = false; /* When the user usually merges entries from the same day, and this edit is at the top of the file: */ if (split_merged_entry && edit->j1 == 0) { /* Test whether the change is "simple merged", i.e. whether it consists of additions, followed by an augmentation of the first changed entry, followed by small changes of the remaining entries: entry_1 entry_2 ... entry_n are mapped to added_entry ... added_entry augmented_entry_1 modified_entry_2 ... modified_entry_n. */ if (edit->i2 - edit->i1 <= edit->j2 - edit->j1) { struct entry *split[2]; bool simple_merged = try_split_merged_entry (ancestor_file.entries[edit->i1], modified_file.entries[edit->i1 + edit->j2 - edit->i2], split); if (simple_merged) { size_t i; for (i = edit->i1 + 1; i <= edit->i2; i++) if (entry_fstrcmp (ancestor_file.entries[i], modified_file.entries[i + edit->j2 - edit->i2], FSTRCMP_THRESHOLD) < FSTRCMP_THRESHOLD) { simple_merged = false; break; } } if (simple_merged) { /* Apply the additions at the top of modified_file. Apply each of the single-entry changes separately. */ size_t num_changed = edit->i2 - edit->i1 + 1; /* > 0 */ size_t num_added = (edit->j2 - edit->j1 + 1) - num_changed; ssize_t j; /* First part of the split modified_file.entries[edit->j2 - edit->i2 + edit->i1]: */ gl_list_add_first (result_entries, split[0]); /* The additions. */ for (j = edit->j1 + num_added - 1; j >= edit->j1; j--) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_first (result_entries, added_entry); } /* Now the single-entry changes. */ for (j = edit->j1 + num_added; j <= edit->j2; j++) { struct entry *changed_entry = (j == edit->j1 + num_added ? split[1] : modified_file.entries[j]); size_t i = j + edit->i2 - edit->j2; ssize_t k = entries_mapping_get (&mapping, i); if (k >= 0 && entry_equals (ancestor_file.entries[i], mainstream_file.entries[k])) { gl_list_node_set_value (result_entries, result_entries_pointers[k], changed_entry); } else if (!entry_equals (ancestor_file.entries[i], changed_entry)) { struct conflict *c = XMALLOC (struct conflict); c->num_old_entries = 1; c->old_entries = XNMALLOC (c->num_old_entries, struct entry *); c->old_entries[0] = ancestor_file.entries[i]; c->num_modified_entries = 1; c->modified_entries = XNMALLOC (c->num_modified_entries, struct entry *); c->modified_entries[0] = changed_entry; gl_list_add_last (result_conflicts, c); } } done = true; } } } if (!done) { bool simple; /* Test whether the change is "simple", i.e. whether it consists of small changes to the old ChangeLog entries and additions before them: entry_1 ... entry_n are mapped to added_entry ... added_entry modified_entry_1 ... modified_entry_n. */ if (edit->i2 - edit->i1 <= edit->j2 - edit->j1) { size_t i; simple = true; for (i = edit->i1; i <= edit->i2; i++) if (entry_fstrcmp (ancestor_file.entries[i], modified_file.entries[i + edit->j2 - edit->i2], FSTRCMP_THRESHOLD) < FSTRCMP_THRESHOLD) { simple = false; break; } } else simple = false; if (simple) { /* Apply the additions and each of the single-entry changes separately. */ size_t num_changed = edit->i2 - edit->i1 + 1; /* > 0 */ size_t num_added = (edit->j2 - edit->j1 + 1) - num_changed; if (edit->j1 == 0) { /* A simple change at the top of modified_file. Apply it to the top of mainstream_file. */ ssize_t j; for (j = edit->j1 + num_added - 1; j >= edit->j1; j--) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_first (result_entries, added_entry); } for (j = edit->j1 + num_added; j <= edit->j2; j++) { struct entry *changed_entry = modified_file.entries[j]; size_t i = j + edit->i2 - edit->j2; ssize_t k = entries_mapping_get (&mapping, i); if (k >= 0 && entry_equals (ancestor_file.entries[i], mainstream_file.entries[k])) { gl_list_node_set_value (result_entries, result_entries_pointers[k], changed_entry); } else { struct conflict *c; ASSERT (!entry_equals (ancestor_file.entries[i], changed_entry)); c = XMALLOC (struct conflict); c->num_old_entries = 1; c->old_entries = XNMALLOC (c->num_old_entries, struct entry *); c->old_entries[0] = ancestor_file.entries[i]; c->num_modified_entries = 1; c->modified_entries = XNMALLOC (c->num_modified_entries, struct entry *); c->modified_entries[0] = changed_entry; gl_list_add_last (result_conflicts, c); } } done = true; } else { ssize_t i_before; ssize_t k_before; bool linear; i_before = diffs.index_mapping_reverse[edit->j1 - 1]; ASSERT (i_before >= 0); /* A simple change after ancestor_file.entries[i_before]. See whether this entry and the following num_changed entries still exist in mainstream_file and are still consecutive. */ k_before = entries_mapping_get (&mapping, i_before); linear = (k_before >= 0); if (linear) { size_t i; for (i = i_before + 1; i <= i_before + num_changed; i++) if (entries_mapping_get (&mapping, i) != k_before + (i - i_before)) { linear = false; break; } } if (linear) { gl_list_node_t node_for_insert = result_entries_pointers[k_before + 1]; ssize_t j; for (j = edit->j1 + num_added - 1; j >= edit->j1; j--) { struct entry *added_entry = modified_file.entries[j]; gl_list_add_before (result_entries, node_for_insert, added_entry); } for (j = edit->j1 + num_added; j <= edit->j2; j++) { struct entry *changed_entry = modified_file.entries[j]; size_t i = j + edit->i2 - edit->j2; ssize_t k = entries_mapping_get (&mapping, i); ASSERT (k >= 0); if (entry_equals (ancestor_file.entries[i], mainstream_file.entries[k])) { gl_list_node_set_value (result_entries, result_entries_pointers[k], changed_entry); } else { struct conflict *c; ASSERT (!entry_equals (ancestor_file.entries[i], changed_entry)); c = XMALLOC (struct conflict); c->num_old_entries = 1; c->old_entries = XNMALLOC (c->num_old_entries, struct entry *); c->old_entries[0] = ancestor_file.entries[i]; c->num_modified_entries = 1; c->modified_entries = XNMALLOC (c->num_modified_entries, struct entry *); c->modified_entries[0] = changed_entry; gl_list_add_last (result_conflicts, c); } } done = true; } } } else { /* A big change. See whether the num_changed entries still exist unchanged in mainstream_file and are still consecutive. */ ssize_t i_first; ssize_t k_first; bool linear_unchanged; i_first = edit->i1; k_first = entries_mapping_get (&mapping, i_first); linear_unchanged = (k_first >= 0 && entry_equals (ancestor_file.entries[i_first], mainstream_file.entries[k_first])); if (linear_unchanged) { size_t i; for (i = i_first + 1; i <= edit->i2; i++) if (!(entries_mapping_get (&mapping, i) == k_first + (i - i_first) && entry_equals (ancestor_file.entries[i], mainstream_file.entries[entries_mapping_get (&mapping, i)]))) { linear_unchanged = false; break; } } if (linear_unchanged) { gl_list_node_t node_for_insert = result_entries_pointers[k_first]; ssize_t j; size_t i; for (j = edit->j2; j >= edit->j1; j--) { struct entry *new_entry = modified_file.entries[j]; gl_list_add_before (result_entries, node_for_insert, new_entry); } for (i = edit->i1; i <= edit->i2; i++) { ssize_t k = entries_mapping_get (&mapping, i); ASSERT (k >= 0); ASSERT (entry_equals (ancestor_file.entries[i], mainstream_file.entries[k])); gl_list_node_set_value (result_entries, result_entries_pointers[k], &empty_entry); } done = true; } } } if (!done) { struct conflict *c = XMALLOC (struct conflict); size_t i, j; c->num_old_entries = edit->i2 - edit->i1 + 1; c->old_entries = XNMALLOC (c->num_old_entries, struct entry *); for (i = edit->i1; i <= edit->i2; i++) c->old_entries[i - edit->i1] = ancestor_file.entries[i]; c->num_modified_entries = edit->j2 - edit->j1 + 1; c->modified_entries = XNMALLOC (c->num_modified_entries, struct entry *); for (j = edit->j1; j <= edit->j2; j++) c->modified_entries[j - edit->j1] = modified_file.entries[j]; gl_list_add_last (result_conflicts, c); } } break; } } } /* Output the result. */ { FILE *fp = fopen (destination_file_name, "w"); if (fp == NULL) { fprintf (stderr, "could not write file '%s'\n", destination_file_name); exit (EXIT_FAILURE); } /* Output the conflicts at the top. */ { size_t n = gl_list_size (result_conflicts); size_t i; for (i = 0; i < n; i++) conflict_write (fp, (struct conflict *) gl_list_get_at (result_conflicts, i)); } /* Output the modified and unmodified entries, in order. */ { gl_list_iterator_t iter = gl_list_iterator (result_entries); const void *elt; gl_list_node_t node; while (gl_list_iterator_next (&iter, &elt, &node)) entry_write (fp, (struct entry *) elt); gl_list_iterator_free (&iter); } if (fwriteerror (fp)) { fprintf (stderr, "error writing to file '%s'\n", destination_file_name); exit (EXIT_FAILURE); } } exit (gl_list_size (result_conflicts) > 0 ? EXIT_FAILURE : EXIT_SUCCESS); } } ����������������������������gnulib-20210822~d383792/lib/gl_anyavltree_list1.h���������������������������������������������������0000664�0000000�0000000�00000006065�14110572173�0021175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_avltree_list.c and gl_avltreehash_list.c. */ /* An AVL tree is a binary tree where 1. The height of each node is calculated as heightof(node) = 1 + max (heightof(node.left), heightof(node.right)). 2. The heights of the subtrees of each node differ by at most 1: | heightof(right) - heightof(left) | <= 1. 3. The index of the elements in the node.left subtree are smaller than the index of node. The index of the elements in the node.right subtree are larger than the index of node. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { #if WITH_HASHTABLE struct gl_hash_entry h; /* hash table entry fields; must be first */ #endif struct gl_list_node_impl *left; /* left branch, or NULL */ struct gl_list_node_impl *right; /* right branch, or NULL */ /* Parent pointer, or NULL. The parent pointer is not needed for most operations. It is needed so that a gl_list_node_t can be returned without memory allocation, on which the functions gl_list_remove_node, gl_list_add_before, gl_list_add_after can be implemented. */ struct gl_list_node_impl *parent; int balance; /* heightof(right) - heightof(left), always = -1 or 0 or 1 */ size_t branch_size; /* number of nodes in this branch, = branchsize(left)+branchsize(right)+1 */ const void *value; }; /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; #if WITH_HASHTABLE /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; #endif struct gl_list_node_impl *root; /* root node or NULL */ }; /* An AVL tree of height h has at least F_(h+2) - 1 [Fibonacci number] and at most 2^h - 1 elements. So, h <= 84 (because a tree of height h >= 85 would have at least F_87 - 1 elements, and because even on 64-bit machines, sizeof (gl_list_node_impl) * (F_87 - 1) > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 83 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyavltree_list2.h���������������������������������������������������0000664�0000000�0000000�00000062514�14110572173�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_avltree_list.c and gl_avltreehash_list.c. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Creates a subtree for count >= 1 elements. Its height is h where 2^(h-1) <= count <= 2^h - 1. Returns NULL upon out-of-memory. */ static gl_list_node_t create_subtree_with_contents (size_t count, const void **contents) { size_t half1 = (count - 1) / 2; size_t half2 = count / 2; /* Note: half1 + half2 = count - 1. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return NULL; if (half1 > 0) { node->left = create_subtree_with_contents (half1, contents); if (node->left == NULL) goto fail1; node->left->parent = node; } else node->left = NULL; node->value = contents[half1]; if (half2 > 0) { node->right = create_subtree_with_contents (half2, contents + half1 + 1); if (node->right == NULL) goto fail2; node->right->parent = node; } else node->right = NULL; /* balance is 0, except when count is a power of two and > 1. Reason: half1 <= half2 <= half1 + 1, and the two branches can have different heights only if half1 = 2^h - 1 and half2 = 2^h; in this case, count = half1 + half2 + 1 = 2^(h+1). */ node->balance = (count > 1 && (count & (count - 1)) == 0 ? 1 : 0); node->branch_size = count; return node; fail2: if (node->left != NULL) free_subtree (node->left); fail1: free (node); return NULL; } static gl_list_t gl_tree_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; #if WITH_HASHTABLE { size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate < 10) estimate = 10; list->table_size = next_prime (estimate); if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) goto fail1; list->table = (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); if (list->table == NULL) goto fail1; } #endif if (count > 0) { list->root = create_subtree_with_contents (count, contents); if (list->root == NULL) goto fail2; list->root->parent = NULL; #if WITH_HASHTABLE /* Now that the tree is built, node_position() works. Now we can add the nodes to the hash table. */ if (add_nodes_to_buckets (list) < 0) goto fail3; #endif } else list->root = NULL; return list; #if WITH_HASHTABLE fail3: free_subtree (list->root); #endif fail2: #if WITH_HASHTABLE free (list->table); fail1: #endif free (list); return NULL; } /* Ensures the tree is balanced, after an insertion or deletion operation. The height of NODE is incremented by HEIGHT_DIFF (1 or -1). PARENT = NODE->parent. (NODE can also be NULL. But PARENT is non-NULL.) Rotation operations are performed starting at PARENT (not NODE itself!). */ static void rebalance (gl_list_t list, gl_list_node_t node, int height_diff, gl_list_node_t parent) { for (;;) { gl_list_node_t child; int previous_balance; int balance_diff; gl_list_node_t nodeleft; gl_list_node_t noderight; child = node; node = parent; previous_balance = node->balance; /* The balance of NODE is incremented by BALANCE_DIFF: +1 if the right branch's height has increased by 1 or the left branch's height has decreased by 1, -1 if the right branch's height has decreased by 1 or the left branch's height has increased by 1, 0 if no height change. */ if (node->left != NULL || node->right != NULL) balance_diff = (child == node->right ? height_diff : -height_diff); else /* Special case where above formula doesn't work, because the caller didn't tell whether node's left or right branch shrunk from height 1 to NULL. */ balance_diff = - previous_balance; node->balance += balance_diff; if (balance_diff == previous_balance) { /* node->balance is outside the range [-1,1]. Must rotate. */ gl_list_node_t *nodep; if (node->parent == NULL) /* node == list->root */ nodep = &list->root; else if (node->parent->left == node) nodep = &node->parent->left; else if (node->parent->right == node) nodep = &node->parent->right; else abort (); nodeleft = node->left; noderight = node->right; if (balance_diff < 0) { /* node->balance = -2. The subtree is heavier on the left side. Rotate from left to right: * / \ h+2 h */ gl_list_node_t nodeleftleft = nodeleft->left; gl_list_node_t nodeleftright = nodeleft->right; if (nodeleft->balance <= 0) { /* * h+2|h+3 / \ / \ h+2 h --> / h+1|h+2 / \ | / \ h+1 h|h+1 h+1 h|h+1 h */ node->left = nodeleftright; nodeleft->right = node; nodeleft->parent = node->parent; node->parent = nodeleft; if (nodeleftright != NULL) nodeleftright->parent = node; nodeleft->balance += 1; node->balance = - nodeleft->balance; node->branch_size = (nodeleftright != NULL ? nodeleftright->branch_size : 0) + 1 + (noderight != NULL ? noderight->branch_size : 0); nodeleft->branch_size = nodeleftleft->branch_size + 1 + node->branch_size; *nodep = nodeleft; height_diff = (height_diff < 0 ? /* noderight's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2|h+3. */ nodeleft->balance - 1 : /* nodeleft's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2|h+3. */ nodeleft->balance); } else { /* * h+2 / \ / \ h+2 h --> h+1 h+1 / \ / \ / \ h h+1 h L R h / \ L R */ gl_list_node_t L = nodeleft->right = nodeleftright->left; gl_list_node_t R = node->left = nodeleftright->right; nodeleftright->left = nodeleft; nodeleftright->right = node; nodeleftright->parent = node->parent; if (L != NULL) L->parent = nodeleft; if (R != NULL) R->parent = node; nodeleft->parent = nodeleftright; node->parent = nodeleftright; nodeleft->balance = (nodeleftright->balance > 0 ? -1 : 0); node->balance = (nodeleftright->balance < 0 ? 1 : 0); nodeleftright->balance = 0; nodeleft->branch_size = (nodeleft->left != NULL ? nodeleft->left->branch_size : 0) + 1 + (nodeleft->right != NULL ? nodeleft->right->branch_size : 0); node->branch_size = (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0); nodeleftright->branch_size = nodeleft->branch_size + 1 + node->branch_size; *nodep = nodeleftright; height_diff = (height_diff < 0 ? /* noderight's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2. */ -1 : /* nodeleft's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2. */ 0); } } else { /* node->balance = 2. The subtree is heavier on the right side. Rotate from right to left: * / \ h h+2 */ gl_list_node_t noderightleft = noderight->left; gl_list_node_t noderightright = noderight->right; if (noderight->balance >= 0) { /* * h+2|h+3 / \ / \ h h+2 --> h+1|h+2 \ / \ / \ | h|h+1 h+1 h h|h+1 h+1 */ node->right = noderightleft; noderight->left = node; noderight->parent = node->parent; node->parent = noderight; if (noderightleft != NULL) noderightleft->parent = node; noderight->balance -= 1; node->balance = - noderight->balance; node->branch_size = (nodeleft != NULL ? nodeleft->branch_size : 0) + 1 + (noderightleft != NULL ? noderightleft->branch_size : 0); noderight->branch_size = node->branch_size + 1 + noderightright->branch_size; *nodep = noderight; height_diff = (height_diff < 0 ? /* nodeleft's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2|h+3. */ - noderight->balance - 1 : /* noderight's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2|h+3. */ - noderight->balance); } else { /* * h+2 / \ / \ h h+2 --> h+1 h+1 / \ / \ / \ h+1 h h L R h / \ L R */ gl_list_node_t L = node->right = noderightleft->left; gl_list_node_t R = noderight->left = noderightleft->right; noderightleft->left = node; noderightleft->right = noderight; noderightleft->parent = node->parent; if (L != NULL) L->parent = node; if (R != NULL) R->parent = noderight; node->parent = noderightleft; noderight->parent = noderightleft; node->balance = (noderightleft->balance > 0 ? -1 : 0); noderight->balance = (noderightleft->balance < 0 ? 1 : 0); noderightleft->balance = 0; node->branch_size = (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0); noderight->branch_size = (noderight->left != NULL ? noderight->left->branch_size : 0) + 1 + (noderight->right != NULL ? noderight->right->branch_size : 0); noderightleft->branch_size = node->branch_size + 1 + noderight->branch_size; *nodep = noderightleft; height_diff = (height_diff < 0 ? /* nodeleft's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2. */ -1 : /* noderight's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2. */ 0); } } node = *nodep; } else { /* No rotation needed. Only propagation of the height change to the next higher level. */ if (height_diff < 0) height_diff = (previous_balance == 0 ? 0 : -1); else height_diff = (node->balance == 0 ? 0 : 1); } if (height_diff == 0) break; parent = node->parent; if (parent == NULL) break; } } static void gl_tree_remove_node_from_tree (gl_list_t list, gl_list_node_t node) { gl_list_node_t parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ gl_list_node_t child = node->right; if (child != NULL) child->parent = parent; if (parent == NULL) list->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = parent; p != NULL; p = p->parent) p->branch_size--; } rebalance (list, child, -1, parent); } } else if (node->right == NULL) { /* It is not absolutely necessary to treat this case. But the more general case below is more complicated, hence slower. */ /* Replace node with node->left. */ gl_list_node_t child = node->left; child->parent = parent; if (parent == NULL) list->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = parent; p != NULL; p = p->parent) p->branch_size--; } rebalance (list, child, -1, parent); } } else { /* Replace node with the rightmost element of the node->left subtree. */ gl_list_node_t subst; gl_list_node_t subst_parent; gl_list_node_t child; for (subst = node->left; subst->right != NULL; ) subst = subst->right; subst_parent = subst->parent; child = subst->left; /* The case subst_parent == node is special: If we do nothing special, we get confusion about node->left, subst->left and child->parent. subst_parent == node <==> The 'for' loop above terminated immediately. <==> subst == subst_parent->left [otherwise subst == subst_parent->right] In this case, we would need to first set child->parent = node; node->left = child; and later - when we copy subst into node's position - again child->parent = subst; subst->left = child; Altogether a no-op. */ if (subst_parent != node) { if (child != NULL) child->parent = subst_parent; subst_parent->right = child; } /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = subst_parent; p != NULL; p = p->parent) p->branch_size--; } /* Copy subst into node's position. (This is safer than to copy subst's value into node, keep node in place, and free subst.) */ if (subst_parent != node) { subst->left = node->left; subst->left->parent = subst; } subst->right = node->right; subst->right->parent = subst; subst->balance = node->balance; subst->branch_size = node->branch_size; subst->parent = parent; if (parent == NULL) list->root = subst; else if (parent->left == node) parent->left = subst; else /* parent->right == node */ parent->right = subst; /* Rebalancing starts at child's parent, that is subst_parent - except when subst_parent == node. In this case, we need to use its replacement, subst. */ rebalance (list, child, -1, subst_parent != node ? subst_parent : subst); } } static gl_list_node_t gl_tree_nx_add_first (gl_list_t list, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (list->root == NULL) { list->root = new_node; new_node->parent = NULL; } else { gl_list_node_t node; for (node = list->root; node->left != NULL; ) node = node->left; node->left = new_node; new_node->parent = node; node->balance--; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Rebalance. */ if (node->right == NULL && node->parent != NULL) rebalance (list, node, 1, node->parent); } #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_last (gl_list_t list, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (list->root == NULL) { list->root = new_node; new_node->parent = NULL; } else { gl_list_node_t node; for (node = list->root; node->right != NULL; ) node = node->right; node->right = new_node; new_node->parent = node; node->balance++; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Rebalance. */ if (node->left == NULL && node->parent != NULL) rebalance (list, node, 1, node->parent); } #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { /* Create new node. */ gl_list_node_t new_node; bool height_inc; new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (node->left == NULL) { node->left = new_node; node->balance--; height_inc = (node->right == NULL); } else { for (node = node->left; node->right != NULL; ) node = node->right; node->right = new_node; node->balance++; height_inc = (node->left == NULL); } new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Rebalance. */ if (height_inc && node->parent != NULL) rebalance (list, node, 1, node->parent); #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { /* Create new node. */ gl_list_node_t new_node; bool height_inc; new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (node->right == NULL) { node->right = new_node; node->balance++; height_inc = (node->left == NULL); } else { for (node = node->right; node->left != NULL; ) node = node->left; node->left = new_node; node->balance--; height_inc = (node->right == NULL); } new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Rebalance. */ if (height_inc && node->parent != NULL) rebalance (list, node, 1, node->parent); #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyhash1.h�����������������������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash table for sequential list, set, and map data type. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c, gl_linkedhash_set.c, gl_hash_set.c, gl_linkedhash_map.c, gl_hash_map.c. */ /* Hash table entry. */ struct gl_hash_entry { struct gl_hash_entry *hash_next; /* chain of entries in same bucket */ size_t hashcode; /* cache of the hash code of - the key (for map data type) or - the value (for list, set data types) */ }; typedef struct gl_hash_entry * gl_hash_entry_t; �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyhash2.h�����������������������������������������������������������0000664�0000000�0000000�00000005173�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash table for sequential list, set, and map data type. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c, gl_linkedhash_set.c, gl_hash_set.c, gl_linkedhash_map.c, gl_hash_map.c. */ #include "gl_anyhash_primes.h" /* Resizes the hash table with a new estimated size. */ static void hash_resize (CONTAINER_T container, size_t estimate) { size_t new_size = next_prime (estimate); if (new_size > container->table_size) { gl_hash_entry_t *old_table = container->table; /* Allocate the new table. */ gl_hash_entry_t *new_table; size_t i; if (size_overflow_p (xtimes (new_size, sizeof (gl_hash_entry_t)))) goto fail; new_table = (gl_hash_entry_t *) calloc (new_size, sizeof (gl_hash_entry_t)); if (new_table == NULL) goto fail; /* Iterate through the entries of the old table. */ for (i = container->table_size; i > 0; ) { gl_hash_entry_t node = old_table[--i]; while (node != NULL) { gl_hash_entry_t next = node->hash_next; /* Add the entry to the new table. */ size_t bucket = node->hashcode % new_size; node->hash_next = new_table[bucket]; new_table[bucket] = node; node = next; } } container->table = new_table; container->table_size = new_size; free (old_table); } return; fail: /* Just continue without resizing the table. */ return; } /* Resizes the hash table if needed, after CONTAINER_COUNT (container) was incremented. */ static void hash_resize_after_add (CONTAINER_T container) { size_t count = CONTAINER_COUNT (container); size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate > container->table_size) hash_resize (container, estimate); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyhash_primes.h�����������������������������������������������������0000664�0000000�0000000�00000011366�14110572173�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Table of primes, for use by hash tables. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Array of primes, approximately in steps of factor 1.2. This table was computed by executing the Common Lisp expression (dotimes (i 244) (format t "nextprime(~D)~%" (ceiling (expt 1.2d0 i)))) and feeding the result to PARI/gp. */ static const size_t primes[] = { 11, 13, 17, 19, 23, 29, 37, 41, 47, 59, 67, 83, 97, 127, 139, 167, 199, 239, 293, 347, 419, 499, 593, 709, 853, 1021, 1229, 1471, 1777, 2129, 2543, 3049, 3659, 4391, 5273, 6323, 7589, 9103, 10937, 13109, 15727, 18899, 22651, 27179, 32609, 39133, 46957, 56359, 67619, 81157, 97369, 116849, 140221, 168253, 201907, 242309, 290761, 348889, 418667, 502409, 602887, 723467, 868151, 1041779, 1250141, 1500181, 1800191, 2160233, 2592277, 3110741, 3732887, 4479463, 5375371, 6450413, 7740517, 9288589, 11146307, 13375573, 16050689, 19260817, 23112977, 27735583, 33282701, 39939233, 47927081, 57512503, 69014987, 82818011, 99381577, 119257891, 143109469, 171731387, 206077643, 247293161, 296751781, 356102141, 427322587, 512787097, 615344489, 738413383, 886096061, 1063315271, 1275978331, 1531174013, 1837408799, 2204890543UL, 2645868653UL, 3175042391UL, 3810050851UL, #if SIZE_MAX > 4294967295UL 4572061027UL, 5486473229UL, 6583767889UL, 7900521449UL, 9480625733UL, 11376750877UL, 13652101063UL, 16382521261UL, 19659025513UL, 23590830631UL, 28308996763UL, 33970796089UL, 40764955463UL, 48917946377UL, 58701535657UL, 70441842749UL, 84530211301UL, 101436253561UL, 121723504277UL, 146068205131UL, 175281846149UL, 210338215379UL, 252405858521UL, 302887030151UL, 363464436191UL, 436157323417UL, 523388788231UL, 628066545713UL, 753679854847UL, 904415825857UL, 1085298991109UL, 1302358789181UL, 1562830547009UL, 1875396656429UL, 2250475987709UL, 2700571185239UL, 3240685422287UL, 3888822506759UL, 4666587008147UL, 5599904409713UL, 6719885291641UL, 8063862349969UL, 9676634819959UL, 11611961783951UL, 13934354140769UL, 16721224968907UL, 20065469962669UL, 24078563955191UL, 28894276746229UL, 34673132095507UL, 41607758514593UL, 49929310217531UL, 59915172260971UL, 71898206713183UL, 86277848055823UL, 103533417666967UL, 124240101200359UL, 149088121440451UL, 178905745728529UL, 214686894874223UL, 257624273849081UL, 309149128618903UL, 370978954342639UL, 445174745211143UL, 534209694253381UL, 641051633104063UL, 769261959724877UL, 923114351670013UL, 1107737222003791UL, 1329284666404567UL, 1595141599685509UL, 1914169919622551UL, 2297003903547091UL, 2756404684256459UL, 3307685621107757UL, 3969222745329323UL, 4763067294395177UL, 5715680753274209UL, 6858816903929113UL, 8230580284714831UL, 9876696341657791UL, 11852035609989371UL, 14222442731987227UL, 17066931278384657UL, 20480317534061597UL, 24576381040873903UL, 29491657249048679UL, 35389988698858471UL, 42467986438630267UL, 50961583726356109UL, 61153900471627387UL, 73384680565952851UL, 88061616679143347UL, 105673940014972061UL, 126808728017966413UL, 152170473621559703UL, 182604568345871671UL, 219125482015045997UL, 262950578418055169UL, 315540694101666193UL, 378648832921999397UL, 454378599506399233UL, 545254319407679131UL, 654305183289214771UL, 785166219947057701UL, 942199463936469157UL, 1130639356723763129UL, 1356767228068515623UL, 1628120673682218619UL, 1953744808418662409UL, 2344493770102394881UL, 2813392524122873857UL, 3376071028947448339UL, 4051285234736937517UL, 4861542281684325481UL, 5833850738021191727UL, 7000620885625427969UL, 8400745062750513217UL, 10080894075300616261UL, 12097072890360739951UL, 14516487468432885797UL, 17419784962119465179UL, #endif SIZE_MAX /* sentinel, to ensure the search terminates */ }; /* Returns a suitable prime >= ESTIMATE. */ static size_t next_prime (size_t estimate) { size_t i; for (i = 0; i < sizeof (primes) / sizeof (primes[0]); i++) if (primes[i] >= estimate) return primes[i]; return SIZE_MAX; /* not a prime, but better than nothing */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anylinked_list1.h����������������������������������������������������0000664�0000000�0000000�00000003372�14110572173�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { #if WITH_HASHTABLE struct gl_hash_entry h; /* hash table entry fields; must be first */ #endif struct gl_list_node_impl *next; struct gl_list_node_impl *prev; const void *value; }; /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; #if WITH_HASHTABLE /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; #endif /* A circular list anchored at root. The first node is = root.next, the last node is = root.prev. The root's value is unused. */ struct gl_list_node_impl root; /* Number of list nodes, excluding the root. */ size_t count; }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anylinked_list2.h����������������������������������������������������0000664�0000000�0000000�00000076600�14110572173�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ /* If the symbol SIGNAL_SAFE_LIST is defined, the code is compiled in such a way that a gl_list_t data structure may be used from within a signal handler. The operations allowed in the signal handler are: gl_list_iterator, gl_list_iterator_next, gl_list_iterator_free. The list and node fields that are therefore accessed from the signal handler are: list->root, node->next, node->value. We are careful to make modifications to these fields only in an order that maintains the consistency of the list data structure at any moment, and we use 'volatile' assignments to prevent the compiler from reordering such assignments. */ #ifdef SIGNAL_SAFE_LIST # define ASYNCSAFE(type) *(type volatile *)& #else # define ASYNCSAFE(type) #endif /* -------------------------- gl_list_t Data Type -------------------------- */ static gl_list_t gl_linked_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; #if WITH_HASHTABLE list->table_size = 11; list->table = (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); if (list->table == NULL) goto fail; #endif list->root.next = &list->root; list->root.prev = &list->root; list->count = 0; return list; #if WITH_HASHTABLE fail: free (list); return NULL; #endif } static gl_list_t gl_linked_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); gl_list_node_t tail; if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; #if WITH_HASHTABLE { size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate < 10) estimate = 10; list->table_size = next_prime (estimate); if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) goto fail1; list->table = (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); if (list->table == NULL) goto fail1; } #endif list->count = count; tail = &list->root; for (; count > 0; contents++, count--) { gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) goto fail2; node->value = *contents; #if WITH_HASHTABLE node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (node->value) : (size_t)(uintptr_t) node->value); /* Add node to the hash table. */ if (add_to_bucket (list, node) < 0) { free (node); goto fail2; } #endif /* Add node to the list. */ node->prev = tail; tail->next = node; tail = node; } tail->next = &list->root; list->root.prev = tail; return list; fail2: { gl_list_node_t node; for (node = tail; node != &list->root; ) { gl_list_node_t prev = node->prev; free (node); node = prev; } } #if WITH_HASHTABLE free (list->table); fail1: #endif free (list); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_linked_size (gl_list_t list) { return list->count; } static const void * _GL_ATTRIBUTE_PURE gl_linked_node_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node) { return node->value; } static int gl_linked_node_nx_set_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node, const void *elt) { #if WITH_HASHTABLE if (elt != node->value) { size_t new_hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); if (new_hashcode != node->h.hashcode) { remove_from_bucket (list, node); node->value = elt; node->h.hashcode = new_hashcode; if (add_to_bucket (list, node) < 0) { /* Out of memory. We removed node from a bucket but cannot add it to another bucket. In order to avoid inconsistencies, we must remove node entirely from the list. */ gl_list_node_t before_removed = node->prev; gl_list_node_t after_removed = node->next; ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed; after_removed->prev = before_removed; list->count--; free (node); return -1; } } else node->value = elt; } #else node->value = elt; #endif return 0; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_next_node (gl_list_t list, gl_list_node_t node) { return (node->next != &list->root ? node->next : NULL); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_previous_node (gl_list_t list, gl_list_node_t node) { return (node->prev != &list->root ? node->prev : NULL); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_first_node (gl_list_t list) { if (list->count > 0) return list->root.next; else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_last_node (gl_list_t list) { if (list->count > 0) return list->root.prev; else return NULL; } static const void * _GL_ATTRIBUTE_PURE gl_linked_get_at (gl_list_t list, size_t position) { size_t count = list->count; gl_list_node_t node; if (!(position < count)) /* Invalid argument. */ abort (); /* Here we know count > 0. */ if (position <= ((count - 1) / 2)) { node = list->root.next; for (; position > 0; position--) node = node->next; } else { position = count - 1 - position; node = list->root.prev; for (; position > 0; position--) node = node->prev; } return node->value; } static gl_list_node_t gl_linked_nx_set_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; gl_list_node_t node; if (!(position < count)) /* Invalid argument. */ abort (); /* Here we know count > 0. */ if (position <= ((count - 1) / 2)) { node = list->root.next; for (; position > 0; position--) node = node->next; } else { position = count - 1 - position; node = list->root.prev; for (; position > 0; position--) node = node->prev; } #if WITH_HASHTABLE if (elt != node->value) { size_t new_hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); if (new_hashcode != node->h.hashcode) { remove_from_bucket (list, node); node->value = elt; node->h.hashcode = new_hashcode; if (add_to_bucket (list, node) < 0) { /* Out of memory. We removed node from a bucket but cannot add it to another bucket. In order to avoid inconsistencies, we must remove node entirely from the list. */ gl_list_node_t before_removed = node->prev; gl_list_node_t after_removed = node->next; ASYNCSAFE(gl_list_node_t) before_removed->next = after_removed; after_removed->prev = before_removed; list->count--; free (node); return NULL; } } else node->value = elt; } #else node->value = elt; #endif return node; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t count = list->count; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); { #if WITH_HASHTABLE size_t hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % list->table_size; gl_listelement_equals_fn equals = list->base.equals_fn; if (!list->base.allow_duplicates) { /* Look for the first match in the hash bucket. */ gl_list_node_t found = NULL; gl_list_node_t node; for (node = (gl_list_node_t) list->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) { found = node; break; } if (start_index > 0) /* Look whether found's index is < start_index. */ for (node = list->root.next; ; node = node->next) { if (node == found) return NULL; if (--start_index == 0) break; } if (end_index < count) /* Look whether found's index is >= end_index. */ { end_index = count - end_index; for (node = list->root.prev; ; node = node->prev) { if (node == found) return NULL; if (--end_index == 0) break; } } return found; } else { /* Look whether there is more than one match in the hash bucket. */ bool multiple_matches = false; gl_list_node_t first_match = NULL; gl_list_node_t node; for (node = (gl_list_node_t) list->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) { if (first_match == NULL) first_match = node; else { multiple_matches = true; break; } } if (multiple_matches) { /* We need the match with the smallest index. But we don't have a fast mapping node -> index. So we have to walk the list. */ end_index -= start_index; node = list->root.next; for (; start_index > 0; start_index--) node = node->next; for (; end_index > 0; node = node->next, end_index--) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return node; /* The matches must have all been at indices < start_index or >= end_index. */ return NULL; } else { if (start_index > 0) /* Look whether first_match's index is < start_index. */ for (node = list->root.next; node != &list->root; node = node->next) { if (node == first_match) return NULL; if (--start_index == 0) break; } if (end_index < list->count) /* Look whether first_match's index is >= end_index. */ { end_index = list->count - end_index; for (node = list->root.prev; ; node = node->prev) { if (node == first_match) return NULL; if (--end_index == 0) break; } } return first_match; } } #else gl_listelement_equals_fn equals = list->base.equals_fn; gl_list_node_t node = list->root.next; end_index -= start_index; for (; start_index > 0; start_index--) node = node->next; if (equals != NULL) { for (; end_index > 0; node = node->next, end_index--) if (equals (elt, node->value)) return node; } else { for (; end_index > 0; node = node->next, end_index--) if (elt == node->value) return node; } return NULL; #endif } } static size_t _GL_ATTRIBUTE_PURE gl_linked_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t count = list->count; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); { #if WITH_HASHTABLE /* Here the hash table doesn't help much. It only allows us to minimize the number of equals() calls, by looking up first the node and then its index. */ size_t hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % list->table_size; gl_listelement_equals_fn equals = list->base.equals_fn; gl_list_node_t node; /* First step: Look up the node. */ if (!list->base.allow_duplicates) { /* Look for the first match in the hash bucket. */ for (node = (gl_list_node_t) list->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) break; } else { /* Look whether there is more than one match in the hash bucket. */ bool multiple_matches = false; gl_list_node_t first_match = NULL; for (node = (gl_list_node_t) list->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) { if (first_match == NULL) first_match = node; else { multiple_matches = true; break; } } if (multiple_matches) { /* We need the match with the smallest index. But we don't have a fast mapping node -> index. So we have to walk the list. */ size_t index; index = start_index; node = list->root.next; for (; start_index > 0; start_index--) node = node->next; for (; index < end_index; node = node->next, index++) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return index; /* The matches must have all been at indices < start_index or >= end_index. */ return (size_t)(-1); } node = first_match; } /* Second step: Look up the index of the node. */ if (node == NULL) return (size_t)(-1); else { size_t index = 0; for (; node->prev != &list->root; node = node->prev) index++; if (index >= start_index && index < end_index) return index; else return (size_t)(-1); } #else gl_listelement_equals_fn equals = list->base.equals_fn; size_t index = start_index; gl_list_node_t node = list->root.next; for (; start_index > 0; start_index--) node = node->next; if (equals != NULL) { for (; index < end_index; node = node->next, index++) if (equals (elt, node->value)) return index; } else { for (; index < end_index; node = node->next, index++) if (elt == node->value) return index; } return (size_t)(-1); #endif } } static gl_list_node_t gl_linked_nx_add_first (gl_list_t list, const void *elt) { gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return NULL; ASYNCSAFE(const void *) node->value = elt; #if WITH_HASHTABLE node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (node->value) : (size_t)(uintptr_t) node->value); /* Add node to the hash table. */ if (add_to_bucket (list, node) < 0) { free (node); return NULL; } #endif /* Add node to the list. */ node->prev = &list->root; ASYNCSAFE(gl_list_node_t) node->next = list->root.next; node->next->prev = node; ASYNCSAFE(gl_list_node_t) list->root.next = node; list->count++; #if WITH_HASHTABLE hash_resize_after_add (list); #endif return node; } static gl_list_node_t gl_linked_nx_add_last (gl_list_t list, const void *elt) { gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return NULL; ASYNCSAFE(const void *) node->value = elt; #if WITH_HASHTABLE node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (node->value) : (size_t)(uintptr_t) node->value); /* Add node to the hash table. */ if (add_to_bucket (list, node) < 0) { free (node); return NULL; } #endif /* Add node to the list. */ ASYNCSAFE(gl_list_node_t) node->next = &list->root; node->prev = list->root.prev; ASYNCSAFE(gl_list_node_t) node->prev->next = node; list->root.prev = node; list->count++; #if WITH_HASHTABLE hash_resize_after_add (list); #endif return node; } static gl_list_node_t gl_linked_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; ASYNCSAFE(const void *) new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); /* Add new_node to the hash table. */ if (add_to_bucket (list, new_node) < 0) { free (new_node); return NULL; } #endif /* Add new_node to the list. */ ASYNCSAFE(gl_list_node_t) new_node->next = node; new_node->prev = node->prev; ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; node->prev = new_node; list->count++; #if WITH_HASHTABLE hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_linked_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; ASYNCSAFE(const void *) new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); /* Add new_node to the hash table. */ if (add_to_bucket (list, new_node) < 0) { free (new_node); return NULL; } #endif /* Add new_node to the list. */ new_node->prev = node; ASYNCSAFE(gl_list_node_t) new_node->next = node->next; new_node->next->prev = new_node; ASYNCSAFE(gl_list_node_t) node->next = new_node; list->count++; #if WITH_HASHTABLE hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_linked_nx_add_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; gl_list_node_t new_node; if (!(position <= count)) /* Invalid argument. */ abort (); new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; ASYNCSAFE(const void *) new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); /* Add new_node to the hash table. */ if (add_to_bucket (list, new_node) < 0) { free (new_node); return NULL; } #endif /* Add new_node to the list. */ if (position <= (count / 2)) { gl_list_node_t node; node = &list->root; for (; position > 0; position--) node = node->next; new_node->prev = node; ASYNCSAFE(gl_list_node_t) new_node->next = node->next; new_node->next->prev = new_node; ASYNCSAFE(gl_list_node_t) node->next = new_node; } else { gl_list_node_t node; position = count - position; node = &list->root; for (; position > 0; position--) node = node->prev; ASYNCSAFE(gl_list_node_t) new_node->next = node; new_node->prev = node->prev; ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; node->prev = new_node; } list->count++; #if WITH_HASHTABLE hash_resize_after_add (list); #endif return new_node; } static bool gl_linked_remove_node (gl_list_t list, gl_list_node_t node) { gl_list_node_t prev; gl_list_node_t next; #if WITH_HASHTABLE /* Remove node from the hash table. */ remove_from_bucket (list, node); #endif /* Remove node from the list. */ prev = node->prev; next = node->next; ASYNCSAFE(gl_list_node_t) prev->next = next; next->prev = prev; list->count--; if (list->base.dispose_fn != NULL) list->base.dispose_fn (node->value); free (node); return true; } static bool gl_linked_remove_at (gl_list_t list, size_t position) { size_t count = list->count; gl_list_node_t removed_node; if (!(position < count)) /* Invalid argument. */ abort (); /* Here we know count > 0. */ if (position <= ((count - 1) / 2)) { gl_list_node_t node; gl_list_node_t after_removed; node = &list->root; for (; position > 0; position--) node = node->next; removed_node = node->next; after_removed = node->next->next; ASYNCSAFE(gl_list_node_t) node->next = after_removed; after_removed->prev = node; } else { gl_list_node_t node; gl_list_node_t before_removed; position = count - 1 - position; node = &list->root; for (; position > 0; position--) node = node->prev; removed_node = node->prev; before_removed = node->prev->prev; node->prev = before_removed; ASYNCSAFE(gl_list_node_t) before_removed->next = node; } #if WITH_HASHTABLE remove_from_bucket (list, removed_node); #endif list->count--; if (list->base.dispose_fn != NULL) list->base.dispose_fn (removed_node->value); free (removed_node); return true; } static bool gl_linked_remove (gl_list_t list, const void *elt) { gl_list_node_t node = gl_linked_search_from_to (list, 0, list->count, elt); if (node != NULL) return gl_linked_remove_node (list, node); else return false; } static void gl_linked_list_free (gl_list_t list) { gl_listelement_dispose_fn dispose = list->base.dispose_fn; gl_list_node_t node; for (node = list->root.next; node != &list->root; ) { gl_list_node_t next = node->next; if (dispose != NULL) dispose (node->value); free (node); node = next; } #if WITH_HASHTABLE free (list->table); #endif free (list); } /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_linked_iterator (gl_list_t list) { gl_list_iterator_t result; result.vtable = list->base.vtable; result.list = list; result.p = list->root.next; result.q = &list->root; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_linked_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { gl_list_iterator_t result; size_t n1, n2, n3; if (!(start_index <= end_index && end_index <= list->count)) /* Invalid arguments. */ abort (); result.vtable = list->base.vtable; result.list = list; n1 = start_index; n2 = end_index - start_index; n3 = list->count - end_index; /* Find the maximum among n1, n2, n3, so as to reduce the number of loop iterations to n1 + n2 + n3 - max(n1,n2,n3). */ if (n1 > n2 && n1 > n3) { /* n1 is the maximum, use n2 and n3. */ gl_list_node_t node; size_t i; node = &list->root; for (i = n3; i > 0; i--) node = node->prev; result.q = node; for (i = n2; i > 0; i--) node = node->prev; result.p = node; } else if (n2 > n3) { /* n2 is the maximum, use n1 and n3. */ gl_list_node_t node; size_t i; node = list->root.next; for (i = n1; i > 0; i--) node = node->next; result.p = node; node = &list->root; for (i = n3; i > 0; i--) node = node->prev; result.q = node; } else { /* n3 is the maximum, use n1 and n2. */ gl_list_node_t node; size_t i; node = list->root.next; for (i = n1; i > 0; i--) node = node->next; result.p = node; for (i = n2; i > 0; i--) node = node->next; result.q = node; } #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static bool gl_linked_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { if (iterator->p != iterator->q) { gl_list_node_t node = (gl_list_node_t) iterator->p; *eltp = node->value; if (nodep != NULL) *nodep = node; iterator->p = node->next; return true; } else return false; } static void gl_linked_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; for (node = list->root.next; node != &list->root; node = node->next) { int cmp = compar (node->value, elt); if (cmp > 0) break; if (cmp == 0) return node; } return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_linked_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t count = list->count; if (!(low <= high && high <= list->count)) /* Invalid arguments. */ abort (); high -= low; if (high > 0) { /* Here we know low < count. */ size_t position = low; gl_list_node_t node; if (position <= ((count - 1) / 2)) { node = list->root.next; for (; position > 0; position--) node = node->next; } else { position = count - 1 - position; node = list->root.prev; for (; position > 0; position--) node = node->prev; } do { int cmp = compar (node->value, elt); if (cmp > 0) break; if (cmp == 0) return node; node = node->next; } while (--high > 0); } return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_linked_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; size_t index; for (node = list->root.next, index = 0; node != &list->root; node = node->next, index++) { int cmp = compar (node->value, elt); if (cmp > 0) break; if (cmp == 0) return index; } return (size_t)(-1); } static size_t _GL_ATTRIBUTE_PURE gl_linked_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t count = list->count; if (!(low <= high && high <= list->count)) /* Invalid arguments. */ abort (); high -= low; if (high > 0) { /* Here we know low < count. */ size_t index = low; size_t position = low; gl_list_node_t node; if (position <= ((count - 1) / 2)) { node = list->root.next; for (; position > 0; position--) node = node->next; } else { position = count - 1 - position; node = list->root.prev; for (; position > 0; position--) node = node->prev; } do { int cmp = compar (node->value, elt); if (cmp > 0) break; if (cmp == 0) return index; node = node->next; index++; } while (--high > 0); } return (size_t)(-1); } static gl_list_node_t gl_linked_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; for (node = list->root.next; node != &list->root; node = node->next) if (compar (node->value, elt) >= 0) return gl_linked_nx_add_before (list, node, elt); return gl_linked_nx_add_last (list, elt); } static bool gl_linked_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; for (node = list->root.next; node != &list->root; node = node->next) { int cmp = compar (node->value, elt); if (cmp > 0) break; if (cmp == 0) return gl_linked_remove_node (list, node); } return false; } ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyrbtree_list1.h����������������������������������������������������0000664�0000000�0000000�00000006335�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */ /* A red-black tree is a binary tree where every node is colored black or red such that 1. The root is black. 2. No red node has a red parent. Or equivalently: No red node has a red child. 3. All paths from the root down to any NULL endpoint contain the same number of black nodes. Let's call this the "black-height" bh of the tree. It follows that every such path contains exactly bh black and between 0 and bh red nodes. (The extreme cases are a path containing only black nodes, and a path colored alternately black-red-black-red-...-black-red.) The height of the tree therefore is >= bh, <= 2*bh. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Color of a node. */ typedef enum color { BLACK, RED } color_t; /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { #if WITH_HASHTABLE struct gl_hash_entry h; /* hash table entry fields; must be first */ #endif struct gl_list_node_impl *left; /* left branch, or NULL */ struct gl_list_node_impl *right; /* right branch, or NULL */ /* Parent pointer, or NULL. The parent pointer is not needed for most operations. It is needed so that a gl_list_node_t can be returned without memory allocation, on which the functions gl_list_remove_node, gl_list_add_before, gl_list_add_after can be implemented. */ struct gl_list_node_impl *parent; color_t color; /* node's color */ size_t branch_size; /* number of nodes in this branch, = branchsize(left)+branchsize(right)+1 */ const void *value; }; /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; #if WITH_HASHTABLE /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; #endif struct gl_list_node_impl *root; /* root node or NULL */ }; /* A red-black tree of height h has a black-height bh >= ceil(h/2) and therefore at least 2^ceil(h/2) - 1 elements. So, h <= 116 (because a tree of height h >= 117 would have at least 2^59 - 1 elements, and because even on 64-bit machines, sizeof (gl_list_node_impl) * (2^59 - 1) > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 116 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anyrbtree_list2.h����������������������������������������������������0000664�0000000�0000000�00000100272�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Creates a subtree for count >= 1 elements. Its black-height bh is passed as argument, with 2^bh - 1 <= count <= 2^(bh+1) - 1. bh == 0 implies count == 1. Its height is h where 2^(h-1) <= count <= 2^h - 1. Return NULL upon out-of-memory. */ static gl_list_node_t create_subtree_with_contents (unsigned int bh, size_t count, const void **contents) { size_t half1 = (count - 1) / 2; size_t half2 = count / 2; /* Note: half1 + half2 = count - 1. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return NULL; if (half1 > 0) { /* half1 > 0 implies count > 1, implies bh >= 1, implies 2^(bh-1) - 1 <= half1 <= 2^bh - 1. */ node->left = create_subtree_with_contents (bh - 1, half1, contents); if (node->left == NULL) goto fail1; node->left->parent = node; } else node->left = NULL; node->value = contents[half1]; if (half2 > 0) { /* half2 > 0 implies count > 1, implies bh >= 1, implies 2^(bh-1) - 1 <= half2 <= 2^bh - 1. */ node->right = create_subtree_with_contents (bh - 1, half2, contents + half1 + 1); if (node->right == NULL) goto fail2; node->right->parent = node; } else node->right = NULL; node->color = (bh == 0 ? RED : BLACK); node->branch_size = count; return node; fail2: if (node->left != NULL) free_subtree (node->left); fail1: free (node); return NULL; } static gl_list_t gl_tree_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; #if WITH_HASHTABLE { size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate < 10) estimate = 10; list->table_size = next_prime (estimate); if (size_overflow_p (xtimes (list->table_size, sizeof (gl_hash_entry_t)))) goto fail1; list->table = (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); if (list->table == NULL) goto fail1; } #endif if (count > 0) { /* Assuming 2^bh - 1 <= count <= 2^(bh+1) - 2, we create a tree whose upper bh levels are black, and only the partially present lowest level is red. */ unsigned int bh; { size_t n; for (n = count + 1, bh = 0; n > 1; n = n >> 1) bh++; } list->root = create_subtree_with_contents (bh, count, contents); if (list->root == NULL) goto fail2; list->root->parent = NULL; #if WITH_HASHTABLE /* Now that the tree is built, node_position() works. Now we can add the nodes to the hash table. */ if (add_nodes_to_buckets (list) < 0) goto fail3; #endif } else list->root = NULL; return list; #if WITH_HASHTABLE fail3: free_subtree (list->root); #endif fail2: #if WITH_HASHTABLE free (list->table); fail1: #endif free (list); return NULL; } /* Rotates left a subtree. B D / \ / \ A D --> B E / \ / \ C E A C Changes the tree structure, updates the branch sizes. The caller must update the colors and register D as child of its parent. */ static gl_list_node_t rotate_left (gl_list_node_t b_node, gl_list_node_t d_node) { gl_list_node_t a_node = b_node->left; gl_list_node_t c_node = d_node->left; gl_list_node_t e_node = d_node->right; b_node->right = c_node; d_node->left = b_node; d_node->parent = b_node->parent; b_node->parent = d_node; if (c_node != NULL) c_node->parent = b_node; b_node->branch_size = (a_node != NULL ? a_node->branch_size : 0) + 1 + (c_node != NULL ? c_node->branch_size : 0); d_node->branch_size = b_node->branch_size + 1 + (e_node != NULL ? e_node->branch_size : 0); return d_node; } /* Rotates right a subtree. D B / \ / \ B E --> A D / \ / \ A C C E Changes the tree structure, updates the branch sizes. The caller must update the colors and register B as child of its parent. */ static gl_list_node_t rotate_right (gl_list_node_t b_node, gl_list_node_t d_node) { gl_list_node_t a_node = b_node->left; gl_list_node_t c_node = b_node->right; gl_list_node_t e_node = d_node->right; d_node->left = c_node; b_node->right = d_node; b_node->parent = d_node->parent; d_node->parent = b_node; if (c_node != NULL) c_node->parent = d_node; d_node->branch_size = (c_node != NULL ? c_node->branch_size : 0) + 1 + (e_node != NULL ? e_node->branch_size : 0); b_node->branch_size = (a_node != NULL ? a_node->branch_size : 0) + 1 + d_node->branch_size; return b_node; } /* Ensures the tree is balanced, after an insertion operation. Also assigns node->color. parent is the given node's parent, known to be non-NULL. */ static void rebalance_after_add (gl_list_t list, gl_list_node_t node, gl_list_node_t parent) { for (;;) { /* At this point, parent = node->parent != NULL. Think of node->color being RED (although node->color is not yet assigned.) */ gl_list_node_t grandparent; gl_list_node_t uncle; if (parent->color == BLACK) { /* A RED color for node is acceptable. */ node->color = RED; return; } grandparent = parent->parent; /* Since parent is RED, we know that grandparent is != NULL and colored BLACK. */ if (grandparent->left == parent) uncle = grandparent->right; else if (grandparent->right == parent) uncle = grandparent->left; else abort (); if (uncle != NULL && uncle->color == RED) { /* Change grandparent from BLACK to RED, and change parent and uncle from RED to BLACK. This makes it acceptable for node to be RED. */ node->color = RED; parent->color = uncle->color = BLACK; node = grandparent; } else { /* grandparent and uncle are BLACK. parent is RED. node wants to be RED too. In this case, recoloring is not sufficient. Need to perform one or two rotations. */ gl_list_node_t *grandparentp; if (grandparent->parent == NULL) grandparentp = &list->root; else if (grandparent->parent->left == grandparent) grandparentp = &grandparent->parent->left; else if (grandparent->parent->right == grandparent) grandparentp = &grandparent->parent->right; else abort (); if (grandparent->left == parent) { if (parent->right == node) { /* Rotation between node and parent. */ grandparent->left = rotate_left (parent, node); node = parent; parent = grandparent->left; } /* grandparent and uncle are BLACK. parent and node want to be RED. parent = grandparent->left. node = parent->left. grandparent parent bh+1 bh+1 / \ / \ parent uncle --> node grandparent bh bh bh bh / \ / \ node C C uncle bh bh bh bh */ *grandparentp = rotate_right (parent, grandparent); parent->color = BLACK; node->color = grandparent->color = RED; } else /* grandparent->right == parent */ { if (parent->left == node) { /* Rotation between node and parent. */ grandparent->right = rotate_right (node, parent); node = parent; parent = grandparent->right; } /* grandparent and uncle are BLACK. parent and node want to be RED. parent = grandparent->right. node = parent->right. grandparent parent bh+1 bh+1 / \ / \ uncle parent --> grandparent node bh bh bh bh / \ / \ C node uncle C bh bh bh bh */ *grandparentp = rotate_left (grandparent, parent); parent->color = BLACK; node->color = grandparent->color = RED; } return; } /* Start again with a new (node, parent) pair. */ parent = node->parent; if (parent == NULL) { /* Change node's color from RED to BLACK. This increases the tree's black-height. */ node->color = BLACK; return; } } } /* Ensures the tree is balanced, after a deletion operation. CHILD was a grandchild of PARENT and is now its child. Between them, a black node was removed. CHILD is also black, or NULL. (CHILD can also be NULL. But PARENT is non-NULL.) */ static void rebalance_after_remove (gl_list_t list, gl_list_node_t child, gl_list_node_t parent) { for (;;) { /* At this point, we reduced the black-height of the CHILD subtree by 1. To make up, either look for a possibility to turn a RED to a BLACK node, or try to reduce the black-height tree of CHILD's sibling subtree as well. */ gl_list_node_t *parentp; if (parent->parent == NULL) parentp = &list->root; else if (parent->parent->left == parent) parentp = &parent->parent->left; else if (parent->parent->right == parent) parentp = &parent->parent->right; else abort (); if (parent->left == child) { gl_list_node_t sibling = parent->right; /* sibling's black-height is >= 1. In particular, sibling != NULL. parent / \ child sibling bh bh+1 */ if (sibling->color == RED) { /* sibling is RED, hence parent is BLACK and sibling's children are non-NULL and BLACK. parent sibling bh+2 bh+2 / \ / \ child sibling --> parent SR bh bh+1 bh+1 bh+1 / \ / \ SL SR child SL bh+1 bh+1 bh bh+1 */ *parentp = rotate_left (parent, sibling); parent->color = RED; sibling->color = BLACK; /* Concentrate on the subtree of parent. The new sibling is one of the old sibling's children, and known to be BLACK. */ parentp = &sibling->left; sibling = parent->right; } /* Now we know that sibling is BLACK. parent / \ child sibling bh bh+1 */ if (sibling->right != NULL && sibling->right->color == RED) { /* parent sibling bh+1|bh+2 bh+1|bh+2 / \ / \ child sibling --> parent SR bh bh+1 bh+1 bh+1 / \ / \ SL SR child SL bh bh bh bh */ *parentp = rotate_left (parent, sibling); sibling->color = parent->color; parent->color = BLACK; sibling->right->color = BLACK; return; } else if (sibling->left != NULL && sibling->left->color == RED) { /* parent parent bh+1|bh+2 bh+1|bh+2 / \ / \ child sibling --> child SL bh bh+1 bh bh+1 / \ / \ SL SR SLL sibling bh bh bh bh / \ / \ SLL SLR SLR SR bh bh bh bh where SLL, SLR, SR are all black. */ parent->right = rotate_right (sibling->left, sibling); /* Change sibling from BLACK to RED and SL from RED to BLACK. */ sibling->color = RED; sibling = parent->right; sibling->color = BLACK; /* Now do as in the previous case. */ *parentp = rotate_left (parent, sibling); sibling->color = parent->color; parent->color = BLACK; sibling->right->color = BLACK; return; } else { if (parent->color == BLACK) { /* Change sibling from BLACK to RED. Then the entire subtree at parent has decreased its black-height. parent parent bh+2 bh+1 / \ / \ child sibling --> child sibling bh bh+1 bh bh */ sibling->color = RED; child = parent; } else { /* Change parent from RED to BLACK, but compensate by changing sibling from BLACK to RED. parent parent bh+1 bh+1 / \ / \ child sibling --> child sibling bh bh+1 bh bh */ parent->color = BLACK; sibling->color = RED; return; } } } else if (parent->right == child) { gl_list_node_t sibling = parent->left; /* sibling's black-height is >= 1. In particular, sibling != NULL. parent / \ sibling child bh+1 bh */ if (sibling->color == RED) { /* sibling is RED, hence parent is BLACK and sibling's children are non-NULL and BLACK. parent sibling bh+2 bh+2 / \ / \ sibling child --> SR parent bh+1 ch bh+1 bh+1 / \ / \ SL SR SL child bh+1 bh+1 bh+1 bh */ *parentp = rotate_right (sibling, parent); parent->color = RED; sibling->color = BLACK; /* Concentrate on the subtree of parent. The new sibling is one of the old sibling's children, and known to be BLACK. */ parentp = &sibling->right; sibling = parent->left; } /* Now we know that sibling is BLACK. parent / \ sibling child bh+1 bh */ if (sibling->left != NULL && sibling->left->color == RED) { /* parent sibling bh+1|bh+2 bh+1|bh+2 / \ / \ sibling child --> SL parent bh+1 bh bh+1 bh+1 / \ / \ SL SR SR child bh bh bh bh */ *parentp = rotate_right (sibling, parent); sibling->color = parent->color; parent->color = BLACK; sibling->left->color = BLACK; return; } else if (sibling->right != NULL && sibling->right->color == RED) { /* parent parent bh+1|bh+2 bh+1|bh+2 / \ / \ sibling child --> SR child bh+1 bh bh+1 bh / \ / \ SL SR sibling SRR bh bh bh bh / \ / \ SRL SRR SL SRL bh bh bh bh where SL, SRL, SRR are all black. */ parent->left = rotate_left (sibling, sibling->right); /* Change sibling from BLACK to RED and SL from RED to BLACK. */ sibling->color = RED; sibling = parent->left; sibling->color = BLACK; /* Now do as in the previous case. */ *parentp = rotate_right (sibling, parent); sibling->color = parent->color; parent->color = BLACK; sibling->left->color = BLACK; return; } else { if (parent->color == BLACK) { /* Change sibling from BLACK to RED. Then the entire subtree at parent has decreased its black-height. parent parent bh+2 bh+1 / \ / \ sibling child --> sibling child bh+1 bh bh bh */ sibling->color = RED; child = parent; } else { /* Change parent from RED to BLACK, but compensate by changing sibling from BLACK to RED. parent parent bh+1 bh+1 / \ / \ sibling child --> sibling child bh+1 bh bh bh */ parent->color = BLACK; sibling->color = RED; return; } } } else abort (); /* Start again with a new (child, parent) pair. */ parent = child->parent; #if 0 /* Already handled. */ if (child != NULL && child->color == RED) { child->color = BLACK; return; } #endif if (parent == NULL) return; } } static void gl_tree_remove_node_from_tree (gl_list_t list, gl_list_node_t node) { gl_list_node_t parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ gl_list_node_t child = node->right; if (child != NULL) { child->parent = parent; /* Since node->left == NULL, child must be RED and of height 1, hence node must have been BLACK. Recolor the child. */ child->color = BLACK; } if (parent == NULL) list->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = parent; p != NULL; p = p->parent) p->branch_size--; } if (child == NULL && node->color == BLACK) rebalance_after_remove (list, child, parent); } } else if (node->right == NULL) { /* It is not absolutely necessary to treat this case. But the more general case below is more complicated, hence slower. */ /* Replace node with node->left. */ gl_list_node_t child = node->left; child->parent = parent; /* Since node->right == NULL, child must be RED and of height 1, hence node must have been BLACK. Recolor the child. */ child->color = BLACK; if (parent == NULL) list->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = parent; p != NULL; p = p->parent) p->branch_size--; } } } else { /* Replace node with the rightmost element of the node->left subtree. */ gl_list_node_t subst; gl_list_node_t subst_parent; gl_list_node_t child; color_t removed_color; for (subst = node->left; subst->right != NULL; ) subst = subst->right; subst_parent = subst->parent; child = subst->left; removed_color = subst->color; /* The case subst_parent == node is special: If we do nothing special, we get confusion about node->left, subst->left and child->parent. subst_parent == node <==> The 'for' loop above terminated immediately. <==> subst == subst_parent->left [otherwise subst == subst_parent->right] In this case, we would need to first set child->parent = node; node->left = child; and later - when we copy subst into node's position - again child->parent = subst; subst->left = child; Altogether a no-op. */ if (subst_parent != node) { if (child != NULL) child->parent = subst_parent; subst_parent->right = child; } /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = subst_parent; p != NULL; p = p->parent) p->branch_size--; } /* Copy subst into node's position. (This is safer than to copy subst's value into node, keep node in place, and free subst.) */ if (subst_parent != node) { subst->left = node->left; subst->left->parent = subst; } subst->right = node->right; subst->right->parent = subst; subst->color = node->color; subst->branch_size = node->branch_size; subst->parent = parent; if (parent == NULL) list->root = subst; else if (parent->left == node) parent->left = subst; else /* parent->right == node */ parent->right = subst; if (removed_color == BLACK) { if (child != NULL && child->color == RED) /* Recolor the child. */ child->color = BLACK; else /* Rebalancing starts at child's parent, that is subst_parent - except when subst_parent == node. In this case, we need to use its replacement, subst. */ rebalance_after_remove (list, child, subst_parent != node ? subst_parent : subst); } } } static gl_list_node_t gl_tree_nx_add_first (gl_list_t list, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (list->root == NULL) { new_node->color = BLACK; list->root = new_node; new_node->parent = NULL; } else { gl_list_node_t node; for (node = list->root; node->left != NULL; ) node = node->left; node->left = new_node; new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Color and rebalance. */ rebalance_after_add (list, new_node, node); } #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_last (gl_list_t list, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (list->root == NULL) { new_node->color = BLACK; list->root = new_node; new_node->parent = NULL; } else { gl_list_node_t node; for (node = list->root; node->right != NULL; ) node = node->right; node->right = new_node; new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Color and rebalance. */ rebalance_after_add (list, new_node, node); } #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (node->left == NULL) node->left = new_node; else { for (node = node->left; node->right != NULL; ) node = node->right; node->right = new_node; } new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Color and rebalance. */ rebalance_after_add (list, new_node, node); #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } static gl_list_node_t gl_tree_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { /* Create new node. */ gl_list_node_t new_node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->branch_size = 1; new_node->value = elt; #if WITH_HASHTABLE new_node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (new_node->value) : (size_t)(uintptr_t) new_node->value); #endif /* Add it to the tree. */ if (node->right == NULL) node->right = new_node; else { for (node = node->right; node->left != NULL; ) node = node->left; node->left = new_node; } new_node->parent = node; /* Update branch_size fields of the parent nodes. */ { gl_list_node_t p; for (p = node; p != NULL; p = p->parent) p->branch_size++; } /* Color and rebalance. */ rebalance_after_add (list, new_node, node); #if WITH_HASHTABLE /* Add node to the hash table. Note that this is only possible _after_ the node has been added to the tree structure, because add_to_bucket() uses node_position(). */ if (add_to_bucket (list, new_node) < 0) { gl_tree_remove_node_from_tree (list, new_node); free (new_node); return NULL; } hash_resize_after_add (list); #endif return new_node; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anytree_list1.h������������������������������������������������������0000664�0000000�0000000�00000002736�14110572173�0020473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_avltree_list.c, gl_rbtree_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c. */ /* An item on the stack used for iterating across the elements. */ typedef struct { gl_list_node_t node; size_t rightp; } iterstack_item_t; /* A stack used for iterating across the elements. */ typedef iterstack_item_t iterstack_t[MAXHEIGHT]; /* Frees a non-empty subtree recursively. This function is recursive and therefore not very fast. */ static void free_subtree (gl_list_node_t node) { if (node->left != NULL) free_subtree (node->left); if (node->right != NULL) free_subtree (node->right); free (node); } ����������������������������������gnulib-20210822~d383792/lib/gl_anytree_list2.h������������������������������������������������������0000664�0000000�0000000�00000066026�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_avltree_list.c, gl_rbtree_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c. */ static gl_list_t gl_tree_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; #if WITH_HASHTABLE list->table_size = 11; list->table = (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t)); if (list->table == NULL) goto fail; #endif list->root = NULL; return list; #if WITH_HASHTABLE fail: free (list); return NULL; #endif } static size_t _GL_ATTRIBUTE_PURE gl_tree_size (gl_list_t list) { return (list->root != NULL ? list->root->branch_size : 0); } static const void * _GL_ATTRIBUTE_PURE gl_tree_node_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node) { return node->value; } static int gl_tree_node_nx_set_value (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node, const void *elt) { #if WITH_HASHTABLE if (elt != node->value) { size_t new_hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); if (new_hashcode != node->h.hashcode) { remove_from_bucket (list, node); node->value = elt; node->h.hashcode = new_hashcode; if (add_to_bucket (list, node) < 0) { /* Out of memory. We removed node from a bucket but cannot add it to another bucket. In order to avoid inconsistencies, we must remove node entirely from the list. */ gl_tree_remove_node_from_tree (list, node); free (node); return -1; } } else node->value = elt; } #else node->value = elt; #endif return 0; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_next_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node) { if (node->right != NULL) { node = node->right; while (node->left != NULL) node = node->left; } else { while (node->parent != NULL && node->parent->right == node) node = node->parent; node = node->parent; } return node; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_previous_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list, gl_list_node_t node) { if (node->left != NULL) { node = node->left; while (node->right != NULL) node = node->right; } else { while (node->parent != NULL && node->parent->left == node) node = node->parent; node = node->parent; } return node; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_first_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list) { gl_list_node_t node = list->root; if (node != NULL) { while (node->left != NULL) node = node->left; } return node; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_last_node (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_t list) { gl_list_node_t node = list->root; if (node != NULL) { while (node->right != NULL) node = node->right; } return node; } /* Returns the node at the given position < gl_tree_size (list). */ static gl_list_node_t _GL_ATTRIBUTE_PURE node_at (gl_list_node_t root, size_t position) { /* Here we know that root != NULL. */ gl_list_node_t node = root; for (;;) { if (node->left != NULL) { if (position < node->left->branch_size) { node = node->left; continue; } position -= node->left->branch_size; } if (position == 0) break; position--; node = node->right; } return node; } static const void * _GL_ATTRIBUTE_PURE gl_tree_get_at (gl_list_t list, size_t position) { gl_list_node_t node = list->root; if (!(node != NULL && position < node->branch_size)) /* Invalid argument. */ abort (); node = node_at (node, position); return node->value; } static gl_list_node_t gl_tree_nx_set_at (gl_list_t list, size_t position, const void *elt) { gl_list_node_t node = list->root; if (!(node != NULL && position < node->branch_size)) /* Invalid argument. */ abort (); node = node_at (node, position); #if WITH_HASHTABLE if (elt != node->value) { size_t new_hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); if (new_hashcode != node->h.hashcode) { remove_from_bucket (list, node); node->value = elt; node->h.hashcode = new_hashcode; if (add_to_bucket (list, node) < 0) { /* Out of memory. We removed node from a bucket but cannot add it to another bucket. In order to avoid inconsistencies, we must remove node entirely from the list. */ gl_tree_remove_node_from_tree (list, node); free (node); return NULL; } } else node->value = elt; } #else node->value = elt; #endif return node; } #if !WITH_HASHTABLE static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { if (!(start_index <= end_index && end_index <= (list->root != NULL ? list->root->branch_size : 0))) /* Invalid arguments. */ abort (); { gl_listelement_equals_fn equals = list->base.equals_fn; /* Iterate across all elements. */ gl_list_node_t node = list->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; size_t index = 0; if (start_index == 0) { /* Consider all elements. */ for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = 0; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) return NULL; stack_ptr--; if (!stack_ptr->rightp) break; } node = stack_ptr->node; /* Test against current element. */ if (equals != NULL ? equals (elt, node->value) : elt == node->value) return node; index++; if (index >= end_index) return NULL; /* Descend on right branch. */ stack_ptr->rightp = 1; node = node->right; stack_ptr++; } } else { /* Consider only elements at indices >= start_index. In this case, rightp contains the difference between the start_index for the parent node and the one for the child node (0 when the child node is the parent's left child, > 0 when the child is the parent's right child). */ for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; if (node->branch_size <= start_index) break; stack_ptr->node = node; stack_ptr->rightp = 0; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) return NULL; stack_ptr--; if (!stack_ptr->rightp) break; start_index += stack_ptr->rightp; } node = stack_ptr->node; { size_t left_branch_size1 = (node->left != NULL ? node->left->branch_size : 0) + 1; if (start_index < left_branch_size1) { /* Test against current element. */ if (equals != NULL ? equals (elt, node->value) : elt == node->value) return node; /* Now that we have considered all indices < left_branch_size1, we can increment start_index. */ start_index = left_branch_size1; } index++; if (index >= end_index) return NULL; /* Descend on right branch. */ start_index -= left_branch_size1; stack_ptr->rightp = left_branch_size1; } node = node->right; stack_ptr++; } } } } static size_t _GL_ATTRIBUTE_PURE gl_tree_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { if (!(start_index <= end_index && end_index <= (list->root != NULL ? list->root->branch_size : 0))) /* Invalid arguments. */ abort (); { gl_listelement_equals_fn equals = list->base.equals_fn; /* Iterate across all elements. */ gl_list_node_t node = list->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; size_t index = 0; if (start_index == 0) { /* Consider all elements. */ for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = 0; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) return (size_t)(-1); stack_ptr--; if (!stack_ptr->rightp) break; } node = stack_ptr->node; /* Test against current element. */ if (equals != NULL ? equals (elt, node->value) : elt == node->value) return index; index++; if (index >= end_index) return (size_t)(-1); /* Descend on right branch. */ stack_ptr->rightp = 1; node = node->right; stack_ptr++; } } else { /* Consider only elements at indices >= start_index. In this case, rightp contains the difference between the start_index for the parent node and the one for the child node (0 when the child node is the parent's left child, > 0 when the child is the parent's right child). */ for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; if (node->branch_size <= start_index) break; stack_ptr->node = node; stack_ptr->rightp = 0; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) return (size_t)(-1); stack_ptr--; if (!stack_ptr->rightp) break; start_index += stack_ptr->rightp; } node = stack_ptr->node; { size_t left_branch_size1 = (node->left != NULL ? node->left->branch_size : 0) + 1; if (start_index < left_branch_size1) { /* Test against current element. */ if (equals != NULL ? equals (elt, node->value) : elt == node->value) return index; /* Now that we have considered all indices < left_branch_size1, we can increment start_index. */ start_index = left_branch_size1; } index++; if (index >= end_index) return (size_t)(-1); /* Descend on right branch. */ start_index -= left_branch_size1; stack_ptr->rightp = left_branch_size1; } node = node->right; stack_ptr++; } } } } #endif static gl_list_node_t gl_tree_nx_add_at (gl_list_t list, size_t position, const void *elt) { size_t count = (list->root != NULL ? list->root->branch_size : 0); if (!(position <= count)) /* Invalid argument. */ abort (); if (position == count) return gl_tree_nx_add_last (list, elt); else return gl_tree_nx_add_before (list, node_at (list->root, position), elt); } static bool gl_tree_remove_node (gl_list_t list, gl_list_node_t node) { #if WITH_HASHTABLE /* Remove node from the hash table. Note that this is only possible _before_ the node is removed from the tree structure, because remove_from_bucket() uses node_position(). */ remove_from_bucket (list, node); #endif gl_tree_remove_node_from_tree (list, node); if (list->base.dispose_fn != NULL) list->base.dispose_fn (node->value); free (node); return true; } static bool gl_tree_remove_at (gl_list_t list, size_t position) { gl_list_node_t node = list->root; if (!(node != NULL && position < node->branch_size)) /* Invalid argument. */ abort (); node = node_at (node, position); return gl_tree_remove_node (list, node); } static bool gl_tree_remove (gl_list_t list, const void *elt) { if (list->root != NULL) { gl_list_node_t node = gl_tree_search_from_to (list, 0, list->root->branch_size, elt); if (node != NULL) return gl_tree_remove_node (list, node); } return false; } #if !WITH_HASHTABLE static void gl_tree_list_free (gl_list_t list) { /* Iterate across all elements in post-order. */ gl_list_node_t node = list->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = false; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto done_iterate; stack_ptr--; node = stack_ptr->node; if (!stack_ptr->rightp) break; /* Free the current node. */ if (list->base.dispose_fn != NULL) list->base.dispose_fn (node->value); free (node); } /* Descend on right branch. */ stack_ptr->rightp = true; node = node->right; stack_ptr++; } done_iterate: free (list); } #endif /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_tree_iterator (gl_list_t list) { gl_list_iterator_t result; gl_list_node_t node; result.vtable = list->base.vtable; result.list = list; /* Start node is the leftmost node. */ node = list->root; if (node != NULL) while (node->left != NULL) node = node->left; result.p = node; /* End point is past the rightmost node. */ result.q = NULL; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_tree_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { size_t count = (list->root != NULL ? list->root->branch_size : 0); gl_list_iterator_t result; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); result.vtable = list->base.vtable; result.list = list; /* Start node is the node at position start_index. */ result.p = (start_index < count ? node_at (list->root, start_index) : NULL); /* End point is the node at position end_index. */ result.q = (end_index < count ? node_at (list->root, end_index) : NULL); #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static bool gl_tree_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { if (iterator->p != iterator->q) { gl_list_node_t node = (gl_list_node_t) iterator->p; *eltp = node->value; if (nodep != NULL) *nodep = node; /* Advance to the next node. */ if (node->right != NULL) { node = node->right; while (node->left != NULL) node = node->left; } else { while (node->parent != NULL && node->parent->right == node) node = node->parent; node = node->parent; } iterator->p = node; return true; } else return false; } static void gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; for (node = list->root; node != NULL; ) { int cmp = compar (node->value, elt); if (cmp < 0) node = node->right; else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have an element equal to ELT. But we need the leftmost such element. */ gl_list_node_t found = node; node = node->left; for (; node != NULL; ) { int cmp2 = compar (node->value, elt); if (cmp2 < 0) node = node->right; else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { found = node; node = node->left; } } return found; } } return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_tree_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { gl_list_node_t node; if (!(low <= high && high <= (list->root != NULL ? list->root->branch_size : 0))) /* Invalid arguments. */ abort (); for (node = list->root; node != NULL; ) { size_t left_branch_size = (node->left != NULL ? node->left->branch_size : 0); if (low > left_branch_size) { low -= left_branch_size + 1; high -= left_branch_size + 1; node = node->right; } else if (high <= left_branch_size) node = node->left; else { /* Here low <= left_branch_size < high. */ int cmp = compar (node->value, elt); if (cmp < 0) { low = 0; high -= left_branch_size + 1; node = node->right; } else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have an element equal to ELT. But we need the leftmost such element. */ gl_list_node_t found = node; node = node->left; for (; node != NULL; ) { size_t left_branch_size2 = (node->left != NULL ? node->left->branch_size : 0); if (low > left_branch_size2) { low -= left_branch_size2 + 1; node = node->right; } else { /* Here low <= left_branch_size2. */ int cmp2 = compar (node->value, elt); if (cmp2 < 0) { low = 0; node = node->right; } else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { found = node; node = node->left; } } } return found; } } } return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_tree_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node; size_t position; for (node = list->root, position = 0; node != NULL; ) { int cmp = compar (node->value, elt); if (cmp < 0) { if (node->left != NULL) position += node->left->branch_size; position++; node = node->right; } else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have an element equal to ELT. But we need the leftmost such element. */ size_t found_position = position + (node->left != NULL ? node->left->branch_size : 0); node = node->left; for (; node != NULL; ) { int cmp2 = compar (node->value, elt); if (cmp2 < 0) { if (node->left != NULL) position += node->left->branch_size; position++; node = node->right; } else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { found_position = position + (node->left != NULL ? node->left->branch_size : 0); node = node->left; } } return found_position; } } return (size_t)(-1); } static size_t _GL_ATTRIBUTE_PURE gl_tree_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { gl_list_node_t node; size_t position; if (!(low <= high && high <= (list->root != NULL ? list->root->branch_size : 0))) /* Invalid arguments. */ abort (); for (node = list->root, position = 0; node != NULL; ) { size_t left_branch_size = (node->left != NULL ? node->left->branch_size : 0); if (low > left_branch_size) { low -= left_branch_size + 1; high -= left_branch_size + 1; position += left_branch_size + 1; node = node->right; } else if (high <= left_branch_size) node = node->left; else { /* Here low <= left_branch_size < high. */ int cmp = compar (node->value, elt); if (cmp < 0) { low = 0; high -= left_branch_size + 1; position += left_branch_size + 1; node = node->right; } else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have an element equal to ELT. But we need the leftmost such element. */ size_t found_position = position + (node->left != NULL ? node->left->branch_size : 0); node = node->left; for (; node != NULL; ) { size_t left_branch_size2 = (node->left != NULL ? node->left->branch_size : 0); if (low > left_branch_size2) { low -= left_branch_size2 + 1; node = node->right; } else { /* Here low <= left_branch_size2. */ int cmp2 = compar (node->value, elt); if (cmp2 < 0) { position += left_branch_size2 + 1; node = node->right; } else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { found_position = position + left_branch_size2; node = node->left; } } } return found_position; } } } return (size_t)(-1); } static gl_list_node_t gl_tree_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node = list->root; if (node == NULL) return gl_tree_nx_add_first (list, elt); for (;;) { int cmp = compar (node->value, elt); if (cmp < 0) { if (node->right == NULL) return gl_tree_nx_add_after (list, node, elt); node = node->right; } else if (cmp > 0) { if (node->left == NULL) return gl_tree_nx_add_before (list, node, elt); node = node->left; } else /* cmp == 0 */ return gl_tree_nx_add_before (list, node, elt); } } static bool gl_tree_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t node = gl_tree_sortedlist_search (list, compar, elt); if (node != NULL) return gl_tree_remove_node (list, node); else return false; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anytree_omap.h�������������������������������������������������������0000664�0000000�0000000�00000017254�14110572173�0020374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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/>. */ /* Common code of gl_avltree_omap.c and gl_rbtree_omap.c. */ /* An item on the stack used for iterating across the elements. */ typedef struct { gl_omap_node_t node; bool rightp; } iterstack_item_t; /* A stack used for iterating across the elements. */ typedef iterstack_item_t iterstack_t[MAXHEIGHT]; static gl_omap_t gl_tree_nx_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { struct gl_omap_impl *map = (struct gl_omap_impl *) malloc (sizeof (struct gl_omap_impl)); if (map == NULL) return NULL; map->base.vtable = implementation; map->base.compar_fn = compar_fn; map->base.kdispose_fn = kdispose_fn; map->base.vdispose_fn = vdispose_fn; map->root = NULL; map->count = 0; return map; } static size_t _GL_ATTRIBUTE_PURE gl_tree_size (gl_omap_t map) { return map->count; } static bool gl_tree_search (gl_omap_t map, const void *key, const void **valuep) { gl_mapkey_compar_fn compar = map->base.compar_fn; gl_omap_node_t node; for (node = map->root; node != NULL; ) { int cmp = (compar != NULL ? compar (node->key, key) : (node->key > key ? 1 : node->key < key ? -1 : 0)); if (cmp < 0) node = node->right; else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have a key equal to KEY. */ *valuep = node->value; return true; } } return false; } static bool gl_tree_search_atleast (gl_omap_t map, gl_mapkey_threshold_fn threshold_fn, const void *threshold, const void **keyp, const void **valuep) { gl_omap_node_t node; for (node = map->root; node != NULL; ) { if (! threshold_fn (node->key, threshold)) node = node->right; else { /* We have a key >= THRESHOLD. But we need the leftmost such element. */ gl_omap_node_t found = node; node = node->left; for (; node != NULL; ) { if (! threshold_fn (node->key, threshold)) node = node->right; else { found = node; node = node->left; } } *keyp = found->key; *valuep = found->value; return true; } } return false; } static int gl_tree_nx_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep) { gl_mapkey_compar_fn compar; gl_omap_node_t node = map->root; if (node == NULL) { if (gl_tree_nx_add_first (map, key, value) == NULL) return -1; return 1; } compar = map->base.compar_fn; for (;;) { int cmp = (compar != NULL ? compar (node->key, key) : (node->key > key ? 1 : node->key < key ? -1 : 0)); if (cmp < 0) { if (node->right == NULL) { if (gl_tree_nx_add_after (map, node, key, value) == NULL) return -1; return 1; } node = node->right; } else if (cmp > 0) { if (node->left == NULL) { if (gl_tree_nx_add_before (map, node, key, value) == NULL) return -1; return 1; } node = node->left; } else /* cmp == 0 */ { *oldvaluep = node->value; node->value = value; return 0; } } } static bool gl_tree_getremove (gl_omap_t map, const void *key, const void **oldvaluep) { gl_mapkey_compar_fn compar = map->base.compar_fn; gl_omap_node_t node; for (node = map->root; node != NULL; ) { int cmp = (compar != NULL ? compar (node->key, key) : (node->key > key ? 1 : node->key < key ? -1 : 0)); if (cmp < 0) node = node->right; else if (cmp > 0) node = node->left; else /* cmp == 0 */ { /* We have a key equal to KEY. */ *oldvaluep = node->value; gl_tree_remove_node (map, node); return true; } } return false; } static void gl_tree_omap_free (gl_omap_t map) { /* Iterate across all elements in post-order. */ gl_omap_node_t node = map->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = false; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto done_iterate; stack_ptr--; node = stack_ptr->node; if (!stack_ptr->rightp) break; /* Free the current node. */ if (map->base.vdispose_fn != NULL) map->base.vdispose_fn (node->value); if (map->base.kdispose_fn != NULL) map->base.kdispose_fn (node->key); free (node); } /* Descend on right branch. */ stack_ptr->rightp = true; node = node->right; stack_ptr++; } done_iterate: free (map); } /* --------------------- gl_omap_iterator_t Data Type --------------------- */ static gl_omap_iterator_t _GL_ATTRIBUTE_PURE gl_tree_iterator (gl_omap_t map) { gl_omap_iterator_t result; gl_omap_node_t node; result.vtable = map->base.vtable; result.map = map; /* Start node is the leftmost node. */ node = map->root; if (node != NULL) while (node->left != NULL) node = node->left; result.p = node; /* End point is past the rightmost node. */ result.q = NULL; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static bool gl_tree_iterator_next (gl_omap_iterator_t *iterator, const void **keyp, const void **valuep) { if (iterator->p != iterator->q) { gl_omap_node_t node = (gl_omap_node_t) iterator->p; *keyp = node->key; *valuep = node->value; /* Advance to the next node. */ if (node->right != NULL) { node = node->right; while (node->left != NULL) node = node->left; } else { while (node->parent != NULL && node->parent->right == node) node = node->parent; node = node->parent; } iterator->p = node; return true; } else return false; } static void gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_omap_iterator_t *iterator) { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anytree_oset.h�������������������������������������������������������0000664�0000000�0000000�00000027046�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* Common code of gl_avltree_oset.c and gl_rbtree_oset.c. */ /* An item on the stack used for iterating across the elements. */ typedef struct { gl_oset_node_t node; bool rightp; } iterstack_item_t; /* A stack used for iterating across the elements. */ typedef iterstack_item_t iterstack_t[MAXHEIGHT]; static gl_oset_t gl_tree_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) { struct gl_oset_impl *set = (struct gl_oset_impl *) malloc (sizeof (struct gl_oset_impl)); if (set == NULL) return NULL; set->base.vtable = implementation; set->base.compar_fn = compar_fn; set->base.dispose_fn = dispose_fn; set->root = NULL; set->count = 0; return set; } static size_t _GL_ATTRIBUTE_PURE gl_tree_size (gl_oset_t set) { return set->count; } /* Returns the next node in the tree, or NULL if there is none. */ static inline gl_oset_node_t _GL_ATTRIBUTE_PURE gl_tree_next_node (gl_oset_node_t node) { if (node->right != NULL) { node = node->right; while (node->left != NULL) node = node->left; } else { while (node->parent != NULL && node->parent->right == node) node = node->parent; node = node->parent; } return node; } /* Returns the previous node in the tree, or NULL if there is none. */ static inline gl_oset_node_t _GL_ATTRIBUTE_PURE gl_tree_prev_node (gl_oset_node_t node) { if (node->left != NULL) { node = node->left; while (node->right != NULL) node = node->right; } else { while (node->parent != NULL && node->parent->left == node) node = node->parent; node = node->parent; } return node; } static bool gl_tree_search (gl_oset_t set, const void *elt) { gl_setelement_compar_fn compar = set->base.compar_fn; gl_oset_node_t node; for (node = set->root; node != NULL; ) { int cmp = (compar != NULL ? compar (node->value, elt) : (node->value > elt ? 1 : node->value < elt ? -1 : 0)); if (cmp < 0) node = node->right; else if (cmp > 0) node = node->left; else /* cmp == 0 */ /* We have an element equal to ELT. */ return true; } return false; } static bool gl_tree_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp) { gl_oset_node_t node; for (node = set->root; node != NULL; ) { if (! threshold_fn (node->value, threshold)) node = node->right; else { /* We have an element >= THRESHOLD. But we need the leftmost such element. */ gl_oset_node_t found = node; node = node->left; for (; node != NULL; ) { if (! threshold_fn (node->value, threshold)) node = node->right; else { found = node; node = node->left; } } *eltp = found->value; return true; } } return false; } static gl_oset_node_t gl_tree_search_node (gl_oset_t set, const void *elt) { gl_setelement_compar_fn compar = set->base.compar_fn; gl_oset_node_t node; for (node = set->root; node != NULL; ) { int cmp = (compar != NULL ? compar (node->value, elt) : (node->value > elt ? 1 : node->value < elt ? -1 : 0)); if (cmp < 0) node = node->right; else if (cmp > 0) node = node->left; else /* cmp == 0 */ /* We have an element equal to ELT. */ return node; } return NULL; } static int gl_tree_nx_add (gl_oset_t set, const void *elt) { gl_setelement_compar_fn compar; gl_oset_node_t node = set->root; if (node == NULL) { if (gl_tree_nx_add_first (set, elt) == NULL) return -1; return true; } compar = set->base.compar_fn; for (;;) { int cmp = (compar != NULL ? compar (node->value, elt) : (node->value > elt ? 1 : node->value < elt ? -1 : 0)); if (cmp < 0) { if (node->right == NULL) { if (gl_tree_nx_add_after (set, node, elt) == NULL) return -1; return true; } node = node->right; } else if (cmp > 0) { if (node->left == NULL) { if (gl_tree_nx_add_before (set, node, elt) == NULL) return -1; return true; } node = node->left; } else /* cmp == 0 */ return false; } } static bool gl_tree_remove (gl_oset_t set, const void *elt) { gl_oset_node_t node = gl_tree_search_node (set, elt); if (node != NULL) return gl_tree_remove_node (set, node); else return false; } static int gl_tree_update (gl_oset_t set, const void *elt, void (*action) (const void * /*elt*/, void * /*action_data*/), void *action_data) { /* Like gl_tree_remove, action (...), gl_tree_nx_add, except that we don't actually remove ELT. */ /* Remember the old node. Don't free it. */ gl_oset_node_t old_node = gl_tree_search_node (set, elt); /* Invoke ACTION. */ action (elt, action_data); /* Determine where to put the node now. */ if (old_node != NULL) { if (set->count > 1) { gl_setelement_compar_fn compar = set->base.compar_fn; gl_oset_node_t prev_node = gl_tree_prev_node (old_node); gl_oset_node_t next_node = gl_tree_next_node (old_node); if (!(compar != NULL ? (prev_node == NULL || compar (prev_node->value, elt) < 0) && (next_node == NULL || compar (next_node->value, elt) > 0) : (prev_node == NULL || prev_node->value < elt) && (next_node == NULL || next_node->value > elt))) { /* old_node needs to move in the tree. */ gl_oset_node_t node; /* Remove the node from the tree. Don't free it. */ gl_tree_remove_node_no_free (set, old_node); node = set->root; for (;;) { int cmp = (compar != NULL ? compar (node->value, elt) : (node->value > elt ? 1 : node->value < elt ? -1 : 0)); if (cmp < 0) { if (node->right == NULL) { gl_tree_add_node_after (set, node, old_node); return true; } node = node->right; } else if (cmp > 0) { if (node->left == NULL) { gl_tree_add_node_before (set, node, old_node); return true; } node = node->left; } else /* cmp == 0 */ { /* Two elements are the same. */ NODE_PAYLOAD_DISPOSE (set, old_node) free (old_node); return -1; } } } } } return 0; } static void gl_tree_oset_free (gl_oset_t set) { /* Iterate across all elements in post-order. */ gl_oset_node_t node = set->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = false; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto done_iterate; stack_ptr--; node = stack_ptr->node; if (!stack_ptr->rightp) break; /* Free the current node. */ if (set->base.dispose_fn != NULL) set->base.dispose_fn (node->value); free (node); } /* Descend on right branch. */ stack_ptr->rightp = true; node = node->right; stack_ptr++; } done_iterate: free (set); } /* --------------------- gl_oset_iterator_t Data Type --------------------- */ static gl_oset_iterator_t _GL_ATTRIBUTE_PURE gl_tree_iterator (gl_oset_t set) { gl_oset_iterator_t result; gl_oset_node_t node; result.vtable = set->base.vtable; result.set = set; /* Start node is the leftmost node. */ node = set->root; if (node != NULL) while (node->left != NULL) node = node->left; result.p = node; /* End point is past the rightmost node. */ result.q = NULL; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static gl_oset_iterator_t gl_tree_iterator_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold) { gl_oset_iterator_t result; gl_oset_node_t node; result.vtable = set->base.vtable; result.set = set; /* End point is past the rightmost node. */ result.q = NULL; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif for (node = set->root; node != NULL; ) { if (! threshold_fn (node->value, threshold)) node = node->right; else { /* We have an element >= THRESHOLD. But we need the leftmost such element. */ gl_oset_node_t found = node; node = node->left; for (; node != NULL; ) { if (! threshold_fn (node->value, threshold)) node = node->right; else { found = node; node = node->left; } } result.p = found; return result; } } result.p = NULL; return result; } static bool gl_tree_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { if (iterator->p != iterator->q) { gl_oset_node_t node = (gl_oset_node_t) iterator->p; *eltp = node->value; /* Advance to the next node. */ node = gl_tree_next_node (node); iterator->p = node; return true; } else return false; } static void gl_tree_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_oset_iterator_t *iterator) { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anytreehash_list1.h��������������������������������������������������0000664�0000000�0000000�00000027477�14110572173�0021350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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/>. */ /* Common code of gl_avltreehash_list.c and gl_rbtreehash_list.c. */ /* Hash table entry representing the same value at more than one position. */ struct gl_multiple_nodes { struct gl_hash_entry h; /* hash table entry fields; must be first */ void *magic; /* used to distinguish from single node */ gl_oset_t nodes; /* set of nodes, sorted by position */ }; /* A value that cannot occur at the corresponding field (->left) in gl_list_node_impl. */ #define MULTIPLE_NODES_MAGIC (void *) -1 /* Returns the position of the given node in the tree. */ static size_t _GL_ATTRIBUTE_PURE node_position (gl_list_node_t node) { size_t position = 0; if (node->left != NULL) position += node->left->branch_size; for (;;) { gl_list_node_t parent = node->parent; if (parent == NULL) return position; /* position is now relative to the subtree of node. */ if (parent->right == node) { position += 1; if (parent->left != NULL) position += parent->left->branch_size; } /* position is now relative to the subtree of parent. */ node = parent; } } /* Compares two nodes by their position in the tree. */ static int _GL_ATTRIBUTE_PURE compare_by_position (const void *x1, const void *x2) { gl_list_node_t node1 = (gl_list_node_t) x1; gl_list_node_t node2 = (gl_list_node_t) x2; size_t position1 = node_position (node1); size_t position2 = node_position (node2); return (position1 > position2 ? 1 : position1 < position2 ? -1 : 0); } /* Compares a node's position in the tree with a given threshold. */ static bool _GL_ATTRIBUTE_PURE compare_position_threshold (const void *x, const void *threshold) { gl_list_node_t node = (gl_list_node_t) x; size_t position = node_position (node); return (position >= (uintptr_t)threshold); } /* Returns the first element of a non-empty ordered set of nodes. */ static gl_list_node_t gl_oset_first (gl_oset_t set) { gl_oset_iterator_t iter = gl_oset_iterator (set); const void *first; if (!gl_oset_iterator_next (&iter, &first)) abort (); gl_oset_iterator_free (&iter); return (gl_list_node_t) first; } /* Adds a node to the hash table structure. If duplicates are allowed, this function performs in average time O((log n)^2): gl_oset_nx_add may need to add an element to an ordered set of size O(n), needing O(log n) comparison function calls. The comparison function is compare_by_position, which is O(log n) worst-case. If duplicates are forbidden, this function is O(1). Return 0 upon success, -1 upon out-of-memory. */ static int add_to_bucket (gl_list_t list, gl_list_node_t new_node) { size_t bucket = new_node->h.hashcode % list->table_size; /* If no duplicates are allowed, multiple nodes are not needed. */ if (list->base.allow_duplicates) { size_t hashcode = new_node->h.hashcode; const void *value = new_node->value; gl_listelement_equals_fn equals = list->base.equals_fn; gl_hash_entry_t *entryp; for (entryp = &list->table[bucket]; *entryp != NULL; entryp = &(*entryp)->hash_next) { gl_hash_entry_t entry = *entryp; if (entry->hashcode == hashcode) { if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) { /* An entry representing multiple nodes. */ gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; /* Only the first node is interesting. */ gl_list_node_t node = gl_oset_first (nodes); if (equals != NULL ? equals (value, node->value) : value == node->value) { /* Found already multiple nodes with the same value. Add the new_node to it. */ return gl_oset_nx_add (nodes, new_node); } } else { /* An entry representing a single node. */ gl_list_node_t node = (struct gl_list_node_impl *) entry; if (equals != NULL ? equals (value, node->value) : value == node->value) { /* Found already a node with the same value. Turn it into an ordered set, and add new_node to it. */ gl_oset_t nodes; struct gl_multiple_nodes *multi_entry; nodes = gl_oset_nx_create_empty (OSET_TREE_FLAVOR, compare_by_position, NULL); if (nodes == NULL) return -1; if (gl_oset_nx_add (nodes, node) < 0) goto fail; if (gl_oset_nx_add (nodes, new_node) < 0) goto fail; multi_entry = (struct gl_multiple_nodes *) malloc (sizeof (struct gl_multiple_nodes)); if (multi_entry == NULL) goto fail; multi_entry->h.hash_next = entry->hash_next; multi_entry->h.hashcode = entry->hashcode; multi_entry->magic = MULTIPLE_NODES_MAGIC; multi_entry->nodes = nodes; *entryp = &multi_entry->h; return 0; fail: gl_oset_free (nodes); return -1; } } } } } /* If no duplicates are allowed, multiple nodes are not needed. */ new_node->h.hash_next = list->table[bucket]; list->table[bucket] = &new_node->h; return 0; } /* Tell GCC that the likely return value is 0. */ #define add_to_bucket(list,node) \ __builtin_expect ((add_to_bucket) (list, node), 0) /* Removes a node from the hash table structure. If duplicates are allowed, this function performs in average time O((log n)^2): gl_oset_remove may need to remove an element from an ordered set of size O(n), needing O(log n) comparison function calls. The comparison function is compare_by_position, which is O(log n) worst-case. If duplicates are forbidden, this function is O(1) on average. */ static void remove_from_bucket (gl_list_t list, gl_list_node_t old_node) { size_t bucket = old_node->h.hashcode % list->table_size; if (list->base.allow_duplicates) { size_t hashcode = old_node->h.hashcode; const void *value = old_node->value; gl_listelement_equals_fn equals = list->base.equals_fn; gl_hash_entry_t *entryp; for (entryp = &list->table[bucket]; ; entryp = &(*entryp)->hash_next) { gl_hash_entry_t entry = *entryp; if (entry == &old_node->h) { /* Found old_node as a single node in the bucket. Remove it. */ *entryp = old_node->h.hash_next; break; } if (entry == NULL) /* node is not in the right bucket. Did the hash codes change inadvertently? */ abort (); if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC && entry->hashcode == hashcode) { /* An entry representing multiple nodes. */ gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; /* Only the first node is interesting. */ gl_list_node_t node = gl_oset_first (nodes); if (equals != NULL ? equals (value, node->value) : value == node->value) { /* Found multiple nodes with the same value. old_node must be one of them. Remove it. */ if (!gl_oset_remove (nodes, old_node)) abort (); if (gl_oset_size (nodes) == 1) { /* Replace a one-element set with a single node. */ node = gl_oset_first (nodes); node->h.hash_next = entry->hash_next; *entryp = &node->h; gl_oset_free (nodes); free (entry); } break; } } } } else { /* If no duplicates are allowed, multiple nodes are not needed. */ gl_hash_entry_t *entryp; for (entryp = &list->table[bucket]; ; entryp = &(*entryp)->hash_next) { if (*entryp == &old_node->h) { *entryp = old_node->h.hash_next; break; } if (*entryp == NULL) /* node is not in the right bucket. Did the hash codes change inadvertently? */ abort (); } } } /* Builds up the hash table during initialization: Stores all the nodes of list->root in the hash table. Returns 0 upon success, -1 upon out-of-memory. */ static int add_nodes_to_buckets (gl_list_t list) { /* Iterate across all nodes. */ gl_list_node_t node = list->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = false; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto done; stack_ptr--; if (!stack_ptr->rightp) break; } node = stack_ptr->node; /* Add the current node to the hash table. */ node->h.hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (node->value) : (size_t)(uintptr_t) node->value); if (add_to_bucket (list, node) < 0) goto fail; /* Descend on right branch. */ stack_ptr->rightp = true; node = node->right; stack_ptr++; } done: return 0; fail: /* Undo everything. */ for (;;) { /* Descend on left branch. */ stack_ptr->rightp = false; node = node->left; stack_ptr++; /* Descend on right branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = true; node = node->right; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto fail_done; stack_ptr--; if (stack_ptr->rightp) break; } node = stack_ptr->node; /* Remove the current node from the hash table. */ remove_from_bucket (list, node); } fail_done: return -1; } /* Tell GCC that the likely return value is 0. */ #if (__GNUC__ >= 3) || (__clang_major__ >= 4) # define add_nodes_to_buckets(list) \ __builtin_expect ((add_nodes_to_buckets) (list), 0) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_anytreehash_list2.h��������������������������������������������������0000664�0000000�0000000�00000016700�14110572173�0021334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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/>. */ /* Common code of gl_avltreehash_list.c and gl_rbtreehash_list.c. */ static gl_list_node_t gl_tree_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { if (!(start_index <= end_index && end_index <= (list->root != NULL ? list->root->branch_size : 0))) /* Invalid arguments. */ abort (); { size_t hashcode = (list->base.hashcode_fn != NULL ? list->base.hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % list->table_size; gl_listelement_equals_fn equals = list->base.equals_fn; gl_hash_entry_t entry; if (list->base.allow_duplicates) { for (entry = list->table[bucket]; entry != NULL; entry = entry->hash_next) if (entry->hashcode == hashcode) { if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) { /* An entry representing multiple nodes. */ gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; /* The first node is interesting. */ gl_list_node_t node = gl_oset_first (nodes); if (equals != NULL ? equals (elt, node->value) : elt == node->value) { /* All nodes in the entry are equal to the given ELT. */ if (start_index == 0) { /* We have to return only the one at the minimal position, and this is the first one in the ordered set. */ if (end_index == list->root->branch_size || node_position (node) < end_index) return node; } else { /* We have to return only the one at the minimal position >= start_index. */ const void *nodes_elt; if (gl_oset_search_atleast (nodes, compare_position_threshold, (void *)(uintptr_t)start_index, &nodes_elt)) { node = (gl_list_node_t) nodes_elt; if (end_index == list->root->branch_size || node_position (node) < end_index) return node; } } break; } } else { /* An entry representing a single node. */ gl_list_node_t node = (struct gl_list_node_impl *) entry; if (equals != NULL ? equals (elt, node->value) : elt == node->value) { bool position_in_bounds; if (start_index == 0 && end_index == list->root->branch_size) position_in_bounds = true; else { size_t position = node_position (node); position_in_bounds = (position >= start_index && position < end_index); } if (position_in_bounds) return node; break; } } } } else { /* If no duplicates are allowed, multiple nodes are not needed. */ for (entry = list->table[bucket]; entry != NULL; entry = entry->hash_next) if (entry->hashcode == hashcode) { gl_list_node_t node = (struct gl_list_node_impl *) entry; if (equals != NULL ? equals (elt, node->value) : elt == node->value) { bool position_in_bounds; if (start_index == 0 && end_index == list->root->branch_size) position_in_bounds = true; else { size_t position = node_position (node); position_in_bounds = (position >= start_index && position < end_index); } if (position_in_bounds) return node; break; } } } return NULL; } } static size_t gl_tree_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { gl_list_node_t node = gl_tree_search_from_to (list, start_index, end_index, elt); if (node != NULL) return node_position (node); else return (size_t)(-1); } static void gl_tree_list_free (gl_list_t list) { if (list->base.allow_duplicates) { /* Free the ordered sets in the hash buckets. */ size_t i; for (i = list->table_size; i > 0; ) { gl_hash_entry_t entry = list->table[--i]; while (entry != NULL) { gl_hash_entry_t next = entry->hash_next; if (((struct gl_multiple_nodes *) entry)->magic == MULTIPLE_NODES_MAGIC) { gl_oset_t nodes = ((struct gl_multiple_nodes *) entry)->nodes; gl_oset_free (nodes); free (entry); } entry = next; } } } /* Iterate across all elements in post-order. */ { gl_list_node_t node = list->root; iterstack_t stack; iterstack_item_t *stack_ptr = &stack[0]; for (;;) { /* Descend on left branch. */ for (;;) { if (node == NULL) break; stack_ptr->node = node; stack_ptr->rightp = false; node = node->left; stack_ptr++; } /* Climb up again. */ for (;;) { if (stack_ptr == &stack[0]) goto done_iterate; stack_ptr--; node = stack_ptr->node; if (!stack_ptr->rightp) break; /* Free the current node. */ if (list->base.dispose_fn != NULL) list->base.dispose_fn (node->value); free (node); } /* Descend on right branch. */ stack_ptr->rightp = true; node = node->right; stack_ptr++; } } done_iterate: free (list->table); free (list); } ����������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_list.c���������������������������������������������������������0000664�0000000�0000000�00000044244�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_array_list.h" #include <stdint.h> #include <stdlib.h> /* Get memcpy. */ #include <string.h> /* Checked size_t computations. */ #include "xsize.h" /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; /* An array of ALLOCATED elements, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ const void **elements; size_t count; size_t allocated; }; /* struct gl_list_node_impl doesn't exist here. The pointers are actually indices + 1. */ #define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) #define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) static gl_list_t gl_array_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; list->elements = NULL; list->count = 0; list->allocated = 0; return list; } static gl_list_t gl_array_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; if (count > 0) { if (size_overflow_p (xtimes (count, sizeof (const void *)))) goto fail; list->elements = (const void **) malloc (count * sizeof (const void *)); if (list->elements == NULL) goto fail; memcpy (list->elements, contents, count * sizeof (const void *)); } else list->elements = NULL; list->count = count; list->allocated = count; return list; fail: free (list); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_array_size (gl_list_t list) { return list->count; } static const void * _GL_ATTRIBUTE_PURE gl_array_node_value (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); return list->elements[index]; } static int gl_array_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); list->elements[index] = elt; return 0; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_next_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); index++; if (index < list->count) return INDEX_TO_NODE (index); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_previous_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); if (index > 0) return INDEX_TO_NODE (index - 1); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_first_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (0); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_last_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (list->count - 1); else return NULL; } static const void * _GL_ATTRIBUTE_PURE gl_array_get_at (gl_list_t list, size_t position) { size_t count = list->count; if (!(position < count)) /* Invalid argument. */ abort (); return list->elements[position]; } static gl_list_node_t gl_array_nx_set_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; if (!(position < count)) /* Invalid argument. */ abort (); list->elements[position] = elt; return INDEX_TO_NODE (position); } static size_t _GL_ATTRIBUTE_PURE gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t count = list->count; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); if (start_index < end_index) { gl_listelement_equals_fn equals = list->base.equals_fn; if (equals != NULL) { size_t i; for (i = start_index;;) { if (equals (elt, list->elements[i])) return i; i++; if (i == end_index) break; } } else { size_t i; for (i = start_index;;) { if (elt == list->elements[i]) return i; i++; if (i == end_index) break; } } } return (size_t)(-1); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt); return INDEX_TO_NODE (index); } /* Ensure that list->allocated > list->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_list_t list) { size_t new_allocated; size_t memory_size; const void **memory; new_allocated = xtimes (list->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (const void *)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (const void **) realloc (list->elements, memory_size); if (memory == NULL) /* Out of memory. */ return -1; list->elements = memory; list->allocated = new_allocated; return 0; } static gl_list_node_t gl_array_nx_add_first (gl_list_t list, const void *elt) { size_t count = list->count; const void **elements; size_t i; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > 0; i--) elements[i] = elements[i - 1]; elements[0] = elt; list->count = count + 1; return INDEX_TO_NODE (0); } static gl_list_node_t gl_array_nx_add_last (gl_list_t list, const void *elt) { size_t count = list->count; if (count == list->allocated) if (grow (list) < 0) return NULL; list->elements[count] = elt; list->count = count + 1; return INDEX_TO_NODE (count); } static gl_list_node_t gl_array_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static gl_list_node_t gl_array_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index + 1; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static gl_list_node_t gl_array_nx_add_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; const void **elements; size_t i; if (!(position <= count)) /* Invalid argument. */ abort (); if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static bool gl_array_remove_node (gl_list_t list, gl_list_node_t node) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index; elements = list->elements; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; list->count = count - 1; return true; } static bool gl_array_remove_at (gl_list_t list, size_t position) { size_t count = list->count; const void **elements; size_t i; if (!(position < count)) /* Invalid argument. */ abort (); elements = list->elements; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; list->count = count - 1; return true; } static bool gl_array_remove (gl_list_t list, const void *elt) { size_t position = gl_array_indexof_from_to (list, 0, list->count, elt); if (position == (size_t)(-1)) return false; else return gl_array_remove_at (list, position); } static void gl_array_list_free (gl_list_t list) { if (list->elements != NULL) { if (list->base.dispose_fn != NULL) { size_t count = list->count; if (count > 0) { gl_listelement_dispose_fn dispose = list->base.dispose_fn; const void **elements = list->elements; do dispose (*elements++); while (--count > 0); } } free (list->elements); } free (list); } /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator (gl_list_t list) { gl_list_iterator_t result; result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.p = list->elements + 0; result.q = list->elements + list->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { gl_list_iterator_t result; if (!(start_index <= end_index && end_index <= list->count)) /* Invalid arguments. */ abort (); result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.p = list->elements + start_index; result.q = list->elements + end_index; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { gl_list_t list = iterator->list; if (iterator->count != list->count) { if (iterator->count != list->count + 1) /* Concurrent modifications were done on the list. */ abort (); /* The last returned element was removed. */ iterator->count--; iterator->p = (const void **) iterator->p - 1; iterator->q = (const void **) iterator->q - 1; } if (iterator->p < iterator->q) { const void **p = (const void **) iterator->p; *eltp = *p; if (nodep != NULL) *nodep = INDEX_TO_NODE (p - list->elements); iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static size_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { if (!(low <= high && high <= list->count)) /* Invalid arguments. */ abort (); if (low < high) { /* At each loop iteration, low < high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = compar (list->elements[mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { /* We have an element equal to ELT at index MID. But we need the minimal such index. */ high = mid; /* At each loop iteration, low <= high and compar (list->elements[high], elt) == 0, and we know that the first occurrence of the element is at low <= position <= high. */ while (low < high) { size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ int cmp2 = compar (list->elements[mid2], elt); if (cmp2 < 0) low = mid2 + 1; else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { if (mid2 == low) break; high = mid2 - 1; } } return low; } } while (low < high); /* Here low == high. */ } return (size_t)(-1); } static size_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t index = gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt); return INDEX_TO_NODE (index); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); return INDEX_TO_NODE (index); } static gl_list_node_t gl_array_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t count = list->count; size_t low = 0; size_t high = count; /* At each loop iteration, low <= high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. */ while (low < high) { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = compar (list->elements[mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { low = mid; break; } } return gl_array_nx_add_at (list, low, elt); } static bool gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_array_sortedlist_indexof (list, compar, elt); if (index == (size_t)(-1)) return false; else return gl_array_remove_at (list, index); } const struct gl_list_implementation gl_array_list_implementation = { gl_array_nx_create_empty, gl_array_nx_create, gl_array_size, gl_array_node_value, gl_array_node_nx_set_value, gl_array_next_node, gl_array_previous_node, gl_array_first_node, gl_array_last_node, gl_array_get_at, gl_array_nx_set_at, gl_array_search_from_to, gl_array_indexof_from_to, gl_array_nx_add_first, gl_array_nx_add_last, gl_array_nx_add_before, gl_array_nx_add_after, gl_array_nx_add_at, gl_array_remove_node, gl_array_remove_at, gl_array_remove, gl_array_list_free, gl_array_iterator, gl_array_iterator_from_to, gl_array_iterator_next, gl_array_iterator_free, gl_array_sortedlist_search, gl_array_sortedlist_search_from_to, gl_array_sortedlist_indexof, gl_array_sortedlist_indexof_from_to, gl_array_sortedlist_nx_add, gl_array_sortedlist_remove }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_list.h���������������������������������������������������������0000664�0000000�0000000�00000002156�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_ARRAY_LIST_H #define _GL_ARRAY_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_array_list_implementation; #define GL_ARRAY_LIST &gl_array_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_LIST_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_map.c����������������������������������������������������������0000664�0000000�0000000�00000016046�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by an array. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_array_map.h" #include <stdint.h> #include <stdlib.h> /* Checked size_t computations. */ #include "xsize.h" /* --------------------------- gl_map_t Data Type --------------------------- */ struct pair { const void *key; const void *value; }; /* Concrete gl_map_impl type, valid for this file only. */ struct gl_map_impl { struct gl_map_impl_base base; /* An array of ALLOCATED pairs, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ struct pair *pairs; size_t count; size_t allocated; }; static gl_map_t gl_array_nx_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { struct gl_map_impl *map = (struct gl_map_impl *) malloc (sizeof (struct gl_map_impl)); if (map == NULL) return NULL; map->base.vtable = implementation; map->base.equals_fn = equals_fn; map->base.kdispose_fn = kdispose_fn; map->base.vdispose_fn = vdispose_fn; map->pairs = NULL; map->count = 0; map->allocated = 0; return map; } static size_t gl_array_size (gl_map_t map) { return map->count; } static size_t gl_array_indexof (gl_map_t map, const void *key) { size_t count = map->count; if (count > 0) { gl_mapkey_equals_fn equals = map->base.equals_fn; if (equals != NULL) { size_t i; for (i = 0; i < count; i++) if (equals (map->pairs[i].key, key)) return i; } else { size_t i; for (i = 0; i < count; i++) if (map->pairs[i].key == key) return i; } } return (size_t)(-1); } static bool gl_array_search (gl_map_t map, const void *key, const void **valuep) { size_t index = gl_array_indexof (map, key); if (index != (size_t)(-1)) { *valuep = map->pairs[index].value; return true; } else return false; } /* Ensure that map->allocated > map->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_map_t map) { size_t new_allocated; size_t memory_size; struct pair *memory; new_allocated = xtimes (map->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (struct pair)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (struct pair *) realloc (map->pairs, memory_size); if (memory == NULL) /* Out of memory. */ return -1; map->pairs = memory; map->allocated = new_allocated; return 0; } static int gl_array_nx_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep) { size_t index = gl_array_indexof (map, key); if (index != (size_t)(-1)) { *oldvaluep = map->pairs[index].value; map->pairs[index].value = value; return 0; } else { size_t count = map->count; struct pair *pairs; if (count == map->allocated) if (grow (map) < 0) return -1; pairs = map->pairs; pairs[count].key = key; pairs[count].value = value; map->count = count + 1; return 1; } } /* Remove the pair at the given position, 0 <= position < gl_map_size (map). */ static void gl_array_remove_at (gl_map_t map, size_t position) { size_t count = map->count; struct pair *pairs; size_t i; pairs = map->pairs; if (map->base.kdispose_fn != NULL) map->base.kdispose_fn (pairs[position].key); for (i = position + 1; i < count; i++) pairs[i - 1] = pairs[i]; map->count = count - 1; } static bool gl_array_getremove (gl_map_t map, const void *key, const void **oldvaluep) { size_t index = gl_array_indexof (map, key); if (index != (size_t)(-1)) { *oldvaluep = map->pairs[index].value; gl_array_remove_at (map, index); return true; } else return false; } static void gl_array_free (gl_map_t map) { if (map->pairs != NULL) { if (map->base.kdispose_fn != NULL || map->base.vdispose_fn != NULL) { size_t count = map->count; if (count > 0) { gl_mapkey_dispose_fn kdispose = map->base.kdispose_fn; gl_mapvalue_dispose_fn vdispose = map->base.vdispose_fn; struct pair *pairs = map->pairs; do { if (vdispose) vdispose (pairs->value); if (kdispose) kdispose (pairs->key); pairs++; } while (--count > 0); } } free (map->pairs); } free (map); } /* ---------------------- gl_map_iterator_t Data Type ---------------------- */ static gl_map_iterator_t gl_array_iterator (gl_map_t map) { gl_map_iterator_t result; result.vtable = map->base.vtable; result.map = map; result.count = map->count; result.p = map->pairs + 0; result.q = map->pairs + map->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_map_iterator_t *iterator, const void **keyp, const void **valuep) { gl_map_t map = iterator->map; if (iterator->count != map->count) { if (iterator->count != map->count + 1) /* Concurrent modifications were done on the map. */ abort (); /* The last returned pair was removed. */ iterator->count--; iterator->p = (struct pair *) iterator->p - 1; iterator->q = (struct pair *) iterator->q - 1; } if (iterator->p < iterator->q) { struct pair *p = (struct pair *) iterator->p; *keyp = p->key; *valuep = p->value; iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (gl_map_iterator_t *iterator) { } const struct gl_map_implementation gl_array_map_implementation = { gl_array_nx_create_empty, gl_array_size, gl_array_search, gl_array_nx_getput, gl_array_getremove, gl_array_free, gl_array_iterator, gl_array_iterator_next, gl_array_iterator_free }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_map.h����������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by an array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_ARRAY_MAP_H #define _GL_ARRAY_MAP_H #include "gl_map.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_map_implementation gl_array_map_implementation; #define GL_ARRAY_MAP &gl_array_map_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_MAP_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_omap.c���������������������������������������������������������0000664�0000000�0000000�00000024753�14110572173�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by an array. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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/>. */ #include <config.h> /* Specification. */ #include "gl_array_omap.h" #include <stdlib.h> /* Checked size_t computations. */ #include "xsize.h" /* -------------------------- gl_omap_t Data Type -------------------------- */ struct pair { const void *key; const void *value; }; /* Concrete gl_omap_impl type, valid for this file only. */ struct gl_omap_impl { struct gl_omap_impl_base base; /* An array of ALLOCATED pairs, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ struct pair *pairs; size_t count; size_t allocated; }; static gl_omap_t gl_array_nx_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { struct gl_omap_impl *map = (struct gl_omap_impl *) malloc (sizeof (struct gl_omap_impl)); if (map == NULL) return NULL; map->base.vtable = implementation; map->base.compar_fn = compar_fn; map->base.kdispose_fn = kdispose_fn; map->base.vdispose_fn = vdispose_fn; map->pairs = NULL; map->count = 0; map->allocated = 0; return map; } static size_t _GL_ATTRIBUTE_PURE gl_array_size (gl_omap_t map) { return map->count; } static size_t _GL_ATTRIBUTE_PURE gl_array_indexof (gl_omap_t map, const void *key) { size_t count = map->count; if (count > 0) { gl_mapkey_compar_fn compar = map->base.compar_fn; size_t low = 0; size_t high = count; /* At each loop iteration, low < high; for indices < low the values are smaller than KEY; for indices >= high the values are greater than KEY. So, if the key occurs in the map, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = (compar != NULL ? compar (map->pairs[mid].key, key) : (map->pairs[mid].key > key ? 1 : map->pairs[mid].key < key ? -1 : 0)); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ /* We have a key equal to KEY at index MID. */ return mid; } while (low < high); } return (size_t)(-1); } static bool _GL_ATTRIBUTE_PURE gl_array_search (gl_omap_t map, const void *key, const void **valuep) { size_t index = gl_array_indexof (map, key); if (index != (size_t)(-1)) { *valuep = map->pairs[index].value; return true; } else return false; } static bool _GL_ATTRIBUTE_PURE gl_array_search_atleast (gl_omap_t map, gl_mapkey_threshold_fn threshold_fn, const void *threshold, const void **keyp, const void **valuep) { size_t count = map->count; if (count > 0) { size_t low = 0; size_t high = count; /* At each loop iteration, low < high; for indices < low the values are smaller than THRESHOLD; for indices >= high the values are nonexistent. So, if a key >= THRESHOLD occurs in the map, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ if (! threshold_fn (map->pairs[mid].key, threshold)) low = mid + 1; else { /* We have a key >= THRESHOLD at index MID. But we need the minimal such index. */ high = mid; /* At each loop iteration, low <= high and compar (map->pairs[high].key, value) >= 0, and we know that the first occurrence of the key is at low <= position <= high. */ while (low < high) { size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ if (! threshold_fn (map->pairs[mid2].key, threshold)) low = mid2 + 1; else high = mid2; } *keyp = map->pairs[low].key; *valuep = map->pairs[low].value; return true; } } while (low < high); } return false; } /* Ensure that map->allocated > map->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_omap_t map) { size_t new_allocated; size_t memory_size; struct pair *memory; new_allocated = xtimes (map->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (struct pair)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (struct pair *) realloc (map->pairs, memory_size); if (memory == NULL) /* Out of memory. */ return -1; map->pairs = memory; map->allocated = new_allocated; return 0; } /* Add the given pair (KEY, VALUE) at the given position, 0 <= position <= gl_omap_size (map). Return 1 upon success, -1 upon out-of-memory. */ static int gl_array_nx_add_at (gl_omap_t map, size_t position, const void *key, const void *value) { size_t count = map->count; struct pair *pairs; size_t i; if (count == map->allocated) if (grow (map) < 0) return -1; pairs = map->pairs; for (i = count; i > position; i--) pairs[i] = pairs[i - 1]; pairs[position].key = key; pairs[position].value = value; map->count = count + 1; return 1; } static int gl_array_nx_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep) { size_t count = map->count; size_t low = 0; if (count > 0) { gl_mapkey_compar_fn compar = map->base.compar_fn; size_t high = count; /* At each loop iteration, low < high; for indices < low the keys are smaller than KEY; for indices >= high the keys are greater than KEY. So, if the key occurs in the map, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = (compar != NULL ? compar (map->pairs[mid].key, key) : (map->pairs[mid].key > key ? 1 : map->pairs[mid].key < key ? -1 : 0)); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { *oldvaluep = map->pairs[mid].value; map->pairs[mid].value = value; return 0; } } while (low < high); } return gl_array_nx_add_at (map, low, key, value); } /* Remove the pair at the given position, 0 <= position < gl_omap_size (map). */ static void gl_array_remove_at (gl_omap_t map, size_t position) { size_t count = map->count; struct pair *pairs; size_t i; pairs = map->pairs; if (map->base.kdispose_fn != NULL) map->base.kdispose_fn (pairs[position].key); for (i = position + 1; i < count; i++) pairs[i - 1] = pairs[i]; map->count = count - 1; } static bool gl_array_getremove (gl_omap_t map, const void *key, const void **oldvaluep) { size_t index = gl_array_indexof (map, key); if (index != (size_t)(-1)) { *oldvaluep = map->pairs[index].value; gl_array_remove_at (map, index); return true; } else return false; } static void gl_array_free (gl_omap_t map) { if (map->pairs != NULL) { if (map->base.kdispose_fn != NULL || map->base.vdispose_fn != NULL) { size_t count = map->count; if (count > 0) { gl_mapkey_dispose_fn kdispose = map->base.kdispose_fn; gl_mapvalue_dispose_fn vdispose = map->base.vdispose_fn; struct pair *pairs = map->pairs; do { if (vdispose) vdispose (pairs->value); if (kdispose) kdispose (pairs->key); pairs++; } while (--count > 0); } } free (map->pairs); } free (map); } /* ---------------------- gl_omap_iterator_t Data Type ---------------------- */ static gl_omap_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator (gl_omap_t map) { gl_omap_iterator_t result; result.vtable = map->base.vtable; result.map = map; result.count = map->count; result.p = map->pairs + 0; result.q = map->pairs + map->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_omap_iterator_t *iterator, const void **keyp, const void **valuep) { gl_omap_t map = iterator->map; if (iterator->count != map->count) { if (iterator->count != map->count + 1) /* Concurrent modifications were done on the map. */ abort (); /* The last returned pair was removed. */ iterator->count--; iterator->p = (struct pair *) iterator->p - 1; iterator->q = (struct pair *) iterator->q - 1; } if (iterator->p < iterator->q) { struct pair *p = (struct pair *) iterator->p; *keyp = p->key; *valuep = p->value; iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_omap_iterator_t *iterator) { } const struct gl_omap_implementation gl_array_omap_implementation = { gl_array_nx_create_empty, gl_array_size, gl_array_search, gl_array_search_atleast, gl_array_nx_getput, gl_array_getremove, gl_array_free, gl_array_iterator, gl_array_iterator_next, gl_array_iterator_free }; ���������������������gnulib-20210822~d383792/lib/gl_array_omap.h���������������������������������������������������������0000664�0000000�0000000�00000002152�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by an array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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 _GL_ARRAY_OMAP_H #define _GL_ARRAY_OMAP_H #include "gl_omap.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_omap_implementation gl_array_omap_implementation; #define GL_ARRAY_OMAP &gl_array_omap_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_OMAP_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_oset.c���������������������������������������������������������0000664�0000000�0000000�00000034266�14110572173�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by an array. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_array_oset.h" #include <stdlib.h> /* Checked size_t computations. */ #include "xsize.h" /* -------------------------- gl_oset_t Data Type -------------------------- */ /* Concrete gl_oset_impl type, valid for this file only. */ struct gl_oset_impl { struct gl_oset_impl_base base; /* An array of ALLOCATED elements, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ const void **elements; size_t count; size_t allocated; }; static gl_oset_t gl_array_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) { struct gl_oset_impl *set = (struct gl_oset_impl *) malloc (sizeof (struct gl_oset_impl)); if (set == NULL) return NULL; set->base.vtable = implementation; set->base.compar_fn = compar_fn; set->base.dispose_fn = dispose_fn; set->elements = NULL; set->count = 0; set->allocated = 0; return set; } static size_t _GL_ATTRIBUTE_PURE gl_array_size (gl_oset_t set) { return set->count; } static size_t _GL_ATTRIBUTE_PURE gl_array_indexof (gl_oset_t set, const void *elt) { size_t count = set->count; if (count > 0) { gl_setelement_compar_fn compar = set->base.compar_fn; size_t low = 0; size_t high = count; /* At each loop iteration, low < high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = (compar != NULL ? compar (set->elements[mid], elt) : (set->elements[mid] > elt ? 1 : set->elements[mid] < elt ? -1 : 0)); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ /* We have an element equal to ELT at index MID. */ return mid; } while (low < high); } return (size_t)(-1); } static bool _GL_ATTRIBUTE_PURE gl_array_search (gl_oset_t set, const void *elt) { return gl_array_indexof (set, elt) != (size_t)(-1); } /* Searches the least element in the ordered set that compares greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. Returns the position at which it was found, or gl_list_size (SET) if not found. */ static size_t _GL_ATTRIBUTE_PURE gl_array_indexof_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold) { size_t count = set->count; if (count > 0) { size_t low = 0; size_t high = count; /* At each loop iteration, low < high; for indices < low the values are smaller than THRESHOLD; for indices >= high the values are nonexistent. So, if an element >= THRESHOLD occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ if (! threshold_fn (set->elements[mid], threshold)) low = mid + 1; else { /* We have an element >= THRESHOLD at index MID. But we need the minimal such index. */ high = mid; /* At each loop iteration, low <= high and compar (set->elements[high], threshold) >= 0, and we know that the first occurrence of the element is at low <= position <= high. */ while (low < high) { size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ if (! threshold_fn (set->elements[mid2], threshold)) low = mid2 + 1; else high = mid2; } return low; } } while (low < high); } return count; } static bool _GL_ATTRIBUTE_PURE gl_array_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp) { size_t index = gl_array_indexof_atleast (set, threshold_fn, threshold); if (index == set->count) return false; else { *eltp = set->elements[index]; return true; } } /* Ensure that set->allocated > set->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_oset_t set) { size_t new_allocated; size_t memory_size; const void **memory; new_allocated = xtimes (set->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (const void *)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (const void **) realloc (set->elements, memory_size); if (memory == NULL) /* Out of memory. */ return -1; set->elements = memory; set->allocated = new_allocated; return 0; } /* Add the given element ELT at the given position, 0 <= position <= gl_oset_size (set). Return 1 upon success, -1 upon out-of-memory. */ static int gl_array_nx_add_at (gl_oset_t set, size_t position, const void *elt) { size_t count = set->count; const void **elements; size_t i; if (count == set->allocated) if (grow (set) < 0) return -1; elements = set->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; set->count = count + 1; return 1; } /* Remove the element at the given position, 0 <= position < gl_oset_size (set). */ static void gl_array_remove_at (gl_oset_t set, size_t position) { size_t count = set->count; const void **elements; size_t i; elements = set->elements; if (set->base.dispose_fn != NULL) set->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; set->count = count - 1; } static int gl_array_nx_add (gl_oset_t set, const void *elt) { size_t count = set->count; size_t low = 0; if (count > 0) { gl_setelement_compar_fn compar = set->base.compar_fn; size_t high = count; /* At each loop iteration, low < high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = (compar != NULL ? compar (set->elements[mid], elt) : (set->elements[mid] > elt ? 1 : set->elements[mid] < elt ? -1 : 0)); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ return false; } while (low < high); } return gl_array_nx_add_at (set, low, elt); } static bool gl_array_remove (gl_oset_t set, const void *elt) { size_t index = gl_array_indexof (set, elt); if (index != (size_t)(-1)) { gl_array_remove_at (set, index); return true; } else return false; } static int gl_array_update (gl_oset_t set, const void *elt, void (*action) (const void * /*elt*/, void * /*action_data*/), void *action_data) { /* Like gl_array_remove, action (...), gl_array_nx_add, except that we don't actually remove ELT. */ /* Remember the old position. */ size_t old_index = gl_array_indexof (set, elt); /* Invoke ACTION. */ action (elt, action_data); /* Determine the new position. */ if (old_index != (size_t)(-1)) { size_t count = set->count; if (count > 1) { gl_setelement_compar_fn compar = set->base.compar_fn; size_t low; size_t high; if (old_index > 0) { size_t mid = old_index - 1; int cmp = (compar != NULL ? compar (set->elements[mid], elt) : (set->elements[mid] > elt ? 1 : set->elements[mid] < elt ? -1 : 0)); if (cmp < 0) { low = old_index + 1; high = count; } else if (cmp > 0) { low = 0; high = mid; } else /* cmp == 0 */ { /* Two adjacent elements are the same. */ gl_array_remove_at (set, old_index); return -1; } } else { low = old_index + 1; high = count; } /* At each loop iteration, low <= high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ while (low < high) { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = (compar != NULL ? compar (set->elements[mid], elt) : (set->elements[mid] > elt ? 1 : set->elements[mid] < elt ? -1 : 0)); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { /* Two elements are the same. */ gl_array_remove_at (set, old_index); return -1; } } if (low < old_index) { /* Move the element from old_index to low. */ size_t new_index = low; const void **elements = set->elements; size_t i; for (i = old_index; i > new_index; i--) elements[i] = elements[i - 1]; elements[new_index] = elt; return true; } else { /* low > old_index. */ /* Move the element from old_index to low - 1. */ size_t new_index = low - 1; if (new_index > old_index) { const void **elements = set->elements; size_t i; for (i = old_index; i < new_index; i++) elements[i] = elements[i + 1]; elements[new_index] = elt; return true; } } } } return false; } static void gl_array_free (gl_oset_t set) { if (set->elements != NULL) { if (set->base.dispose_fn != NULL) { size_t count = set->count; if (count > 0) { gl_setelement_dispose_fn dispose = set->base.dispose_fn; const void **elements = set->elements; do dispose (*elements++); while (--count > 0); } } free (set->elements); } free (set); } /* --------------------- gl_oset_iterator_t Data Type --------------------- */ static gl_oset_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator (gl_oset_t set) { gl_oset_iterator_t result; result.vtable = set->base.vtable; result.set = set; result.count = set->count; result.p = set->elements + 0; result.q = set->elements + set->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static gl_oset_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold) { size_t index = gl_array_indexof_atleast (set, threshold_fn, threshold); gl_oset_iterator_t result; result.vtable = set->base.vtable; result.set = set; result.count = set->count; result.p = set->elements + index; result.q = set->elements + set->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { gl_oset_t set = iterator->set; if (iterator->count != set->count) { if (iterator->count != set->count + 1) /* Concurrent modifications were done on the set. */ abort (); /* The last returned element was removed. */ iterator->count--; iterator->p = (const void **) iterator->p - 1; iterator->q = (const void **) iterator->q - 1; } if (iterator->p < iterator->q) { const void **p = (const void **) iterator->p; *eltp = *p; iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_oset_iterator_t *iterator) { } const struct gl_oset_implementation gl_array_oset_implementation = { gl_array_nx_create_empty, gl_array_size, gl_array_search, gl_array_search_atleast, gl_array_nx_add, gl_array_remove, gl_array_update, gl_array_free, gl_array_iterator, gl_array_iterator_atleast, gl_array_iterator_next, gl_array_iterator_free }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_oset.h���������������������������������������������������������0000664�0000000�0000000�00000002152�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by an array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_ARRAY_OSET_H #define _GL_ARRAY_OSET_H #include "gl_oset.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_oset_implementation gl_array_oset_implementation; #define GL_ARRAY_OSET &gl_array_oset_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_OSET_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_array_set.c����������������������������������������������������������0000664�0000000�0000000�00000014773�14110572173�0017700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by an array. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_array_set.h" #include <stdint.h> #include <stdlib.h> /* Checked size_t computations. */ #include "xsize.h" /* --------------------------- gl_set_t Data Type --------------------------- */ /* Concrete gl_set_impl type, valid for this file only. */ struct gl_set_impl { struct gl_set_impl_base base; /* An array of ALLOCATED elements, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ const void **elements; size_t count; size_t allocated; }; static gl_set_t gl_array_nx_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) { struct gl_set_impl *set = (struct gl_set_impl *) malloc (sizeof (struct gl_set_impl)); if (set == NULL) return NULL; set->base.vtable = implementation; set->base.equals_fn = equals_fn; set->base.dispose_fn = dispose_fn; set->elements = NULL; set->count = 0; set->allocated = 0; return set; } static size_t gl_array_size (gl_set_t set) { return set->count; } static bool gl_array_search (gl_set_t set, const void *elt) { size_t count = set->count; if (count > 0) { gl_setelement_equals_fn equals = set->base.equals_fn; const void **elements = set->elements; if (equals != NULL) { size_t i; for (i = 0; i < count; i++) if (equals (elements[i], elt)) return true; } else { size_t i; for (i = 0; i < count; i++) if (elements[i] == elt) return true; } } return false; } /* Ensure that set->allocated > set->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_set_t set) { size_t new_allocated; size_t memory_size; const void **memory; new_allocated = xtimes (set->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (const void *)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (const void **) realloc (set->elements, memory_size); if (memory == NULL) /* Out of memory. */ return -1; set->elements = memory; set->allocated = new_allocated; return 0; } static int gl_array_nx_add (gl_set_t set, const void *elt) { if (gl_array_search (set, elt)) return 0; else { size_t count = set->count; if (count == set->allocated) if (grow (set) < 0) return -1; set->elements[count] = elt; set->count = count + 1; return 1; } } /* Remove the element at the given position, 0 <= position < gl_set_size (set). */ static void gl_array_remove_at (gl_set_t set, size_t position) { size_t count = set->count; const void **elements = set->elements; size_t i; if (set->base.dispose_fn != NULL) set->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; set->count = count - 1; } static bool gl_array_remove (gl_set_t set, const void *elt) { size_t count = set->count; if (count > 0) { gl_setelement_equals_fn equals = set->base.equals_fn; const void **elements = set->elements; if (equals != NULL) { size_t i; for (i = 0; i < count; i++) if (equals (elements[i], elt)) { gl_array_remove_at (set, i); return true; } } else { size_t i; for (i = 0; i < count; i++) if (elements[i] == elt) { gl_array_remove_at (set, i); return true; } } } return false; } static void gl_array_free (gl_set_t set) { if (set->elements != NULL) { if (set->base.dispose_fn != NULL) { size_t count = set->count; if (count > 0) { gl_setelement_dispose_fn dispose = set->base.dispose_fn; const void **elements = set->elements; do dispose (*elements++); while (--count > 0); } } free (set->elements); } free (set); } /* ---------------------- gl_set_iterator_t Data Type ---------------------- */ static gl_set_iterator_t gl_array_iterator (gl_set_t set) { gl_set_iterator_t result; result.vtable = set->base.vtable; result.set = set; result.count = set->count; result.p = set->elements + 0; result.q = set->elements + set->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_set_iterator_t *iterator, const void **eltp) { gl_set_t set = iterator->set; if (iterator->count != set->count) { if (iterator->count != set->count + 1) /* Concurrent modifications were done on the set. */ abort (); /* The last returned element was removed. */ iterator->count--; iterator->p = (const void **) iterator->p - 1; iterator->q = (const void **) iterator->q - 1; } if (iterator->p < iterator->q) { const void **p = (const void **) iterator->p; *eltp = *p; iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (gl_set_iterator_t *iterator) { } const struct gl_set_implementation gl_array_set_implementation = { gl_array_nx_create_empty, gl_array_size, gl_array_search, gl_array_nx_add, gl_array_remove, gl_array_free, gl_array_iterator, gl_array_iterator_next, gl_array_iterator_free }; �����gnulib-20210822~d383792/lib/gl_array_set.h����������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by an array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_ARRAY_SET_H #define _GL_ARRAY_SET_H #include "gl_set.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_set_implementation gl_array_set_implementation; #define GL_ARRAY_SET &gl_array_set_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_SET_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_list.c�������������������������������������������������������0000664�0000000�0000000�00000006145�14110572173�0020376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_avltree_list.h" #include <stdlib.h> /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic AVL tree code. */ #include "gl_anyavltree_list1.h" /* Generic binary tree code. */ #include "gl_anytree_list1.h" /* Generic AVL tree code. */ #include "gl_anyavltree_list2.h" /* Generic binary tree code. */ #include "gl_anytree_list2.h" /* For debugging. */ extern void gl_avltree_list_check_invariants (gl_list_t list); static unsigned int _GL_ATTRIBUTE_PURE check_invariants (gl_list_node_t node, gl_list_node_t parent) { unsigned int left_height = (node->left != NULL ? check_invariants (node->left, node) : 0); unsigned int right_height = (node->right != NULL ? check_invariants (node->right, node) : 0); int balance = (int)right_height - (int)left_height; if (!(node->parent == parent)) abort (); if (!(node->branch_size == (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0))) abort (); if (!(balance >= -1 && balance <= 1)) abort (); if (!(node->balance == balance)) abort (); return 1 + (left_height > right_height ? left_height : right_height); } void gl_avltree_list_check_invariants (gl_list_t list) { if (list->root != NULL) (void) check_invariants (list->root, NULL); } const struct gl_list_implementation gl_avltree_list_implementation = { gl_tree_nx_create_empty, gl_tree_nx_create, gl_tree_size, gl_tree_node_value, gl_tree_node_nx_set_value, gl_tree_next_node, gl_tree_previous_node, gl_tree_first_node, gl_tree_last_node, gl_tree_get_at, gl_tree_nx_set_at, gl_tree_search_from_to, gl_tree_indexof_from_to, gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before, gl_tree_nx_add_after, gl_tree_nx_add_at, gl_tree_remove_node, gl_tree_remove_at, gl_tree_remove, gl_tree_list_free, gl_tree_iterator, gl_tree_iterator_from_to, gl_tree_iterator_next, gl_tree_iterator_free, gl_tree_sortedlist_search, gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof, gl_tree_sortedlist_indexof_from_to, gl_tree_sortedlist_nx_add, gl_tree_sortedlist_remove }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_list.h�������������������������������������������������������0000664�0000000�0000000�00000002177�14110572173�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_AVLTREE_LIST_H #define _GL_AVLTREE_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_avltree_list_implementation; #define GL_AVLTREE_LIST &gl_avltree_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_AVLTREE_LIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_omap.c�������������������������������������������������������0000664�0000000�0000000�00000004277�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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/>. */ #include <config.h> /* Specification. */ #include "gl_avltree_omap.h" #include <stdlib.h> /* -------------------------- gl_omap_t Data Type -------------------------- */ /* Parameterization of gl_avltree_ordered.h. */ #define CONTAINER_T gl_omap_t #define CONTAINER_IMPL gl_omap_impl #define CONTAINER_IMPL_BASE gl_omap_impl_base #define NODE_IMPL gl_omap_node_impl #define NODE_T gl_omap_node_t #define NODE_PAYLOAD_FIELDS \ const void *key; \ const void *value; #define NODE_PAYLOAD_PARAMS \ const void *key, const void *value #define NODE_PAYLOAD_ASSIGN(node) \ node->key = key; \ node->value = value; #define NODE_PAYLOAD_DISPOSE(container, node) \ if (container->base.kdispose_fn != NULL) \ container->base.kdispose_fn (node->key); #include "gl_avltree_ordered.h" /* Generic binary tree code. */ #include "gl_anytree_omap.h" /* For debugging. */ void gl_avltree_omap_check_invariants (gl_omap_t map) { size_t counter = 0; if (map->root != NULL) check_invariants (map->root, NULL, &counter); if (!(map->count == counter)) abort (); } const struct gl_omap_implementation gl_avltree_omap_implementation = { gl_tree_nx_create_empty, gl_tree_size, gl_tree_search, gl_tree_search_atleast, gl_tree_nx_getput, gl_tree_getremove, gl_tree_omap_free, gl_tree_iterator, gl_tree_iterator_next, gl_tree_iterator_free }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_omap.h�������������������������������������������������������0000664�0000000�0000000�00000002173�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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 _GL_AVLTREE_OMAP_H #define _GL_AVLTREE_OMAP_H #include "gl_omap.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_omap_implementation gl_avltree_omap_implementation; #define GL_AVLTREE_OMAP &gl_avltree_omap_implementation #ifdef __cplusplus } #endif #endif /* _GL_AVLTREE_OMAP_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_ordered.h����������������������������������������������������0000664�0000000�0000000�00000045554�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered {set,map} data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* An AVL tree is a binary tree where 1. The height of each node is calculated as heightof(node) = 1 + max (heightof(node.left), heightof(node.right)). 2. The heights of the subtrees of each node differ by at most 1: | heightof(right) - heightof(left) | <= 1. 3. The index of the elements in the node.left subtree are smaller than the index of node. The index of the elements in the node.right subtree are larger than the index of node. */ /* Tree node implementation, valid for this file only. */ struct NODE_IMPL { struct NODE_IMPL *left; /* left branch, or NULL */ struct NODE_IMPL *right; /* right branch, or NULL */ /* Parent pointer, or NULL. The parent pointer is not needed for most operations. It is needed so that a NODE_T can be returned without memory allocation, on which the functions <container>_remove_node, <container>_add_before, <container>_add_after can be implemented. */ struct NODE_IMPL *parent; int balance; /* heightof(right) - heightof(left), always = -1 or 0 or 1 */ NODE_PAYLOAD_FIELDS }; typedef struct NODE_IMPL * NODE_T; /* Concrete CONTAINER_IMPL type, valid for this file only. */ struct CONTAINER_IMPL { struct CONTAINER_IMPL_BASE base; struct NODE_IMPL *root; /* root node or NULL */ size_t count; /* number of nodes */ }; /* An AVL tree of height h has at least F_(h+2) - 1 [Fibonacci number] and at most 2^h - 1 elements. So, h <= 84 (because a tree of height h >= 85 would have at least F_87 - 1 elements, and because even on 64-bit machines, sizeof (NODE_IMPL) * (F_87 - 1) > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 83 /* Ensures the tree is balanced, after an insertion or deletion operation. The height of NODE is incremented by HEIGHT_DIFF (1 or -1). PARENT = NODE->parent. (NODE can also be NULL. But PARENT is non-NULL.) Rotation operations are performed starting at PARENT (not NODE itself!). */ static void rebalance (CONTAINER_T container, NODE_T node, int height_diff, NODE_T parent) { for (;;) { NODE_T child; int previous_balance; int balance_diff; NODE_T nodeleft; NODE_T noderight; child = node; node = parent; previous_balance = node->balance; /* The balance of NODE is incremented by BALANCE_DIFF: +1 if the right branch's height has increased by 1 or the left branch's height has decreased by 1, -1 if the right branch's height has decreased by 1 or the left branch's height has increased by 1, 0 if no height change. */ if (node->left != NULL || node->right != NULL) balance_diff = (child == node->right ? height_diff : -height_diff); else /* Special case where above formula doesn't work, because the caller didn't tell whether node's left or right branch shrunk from height 1 to NULL. */ balance_diff = - previous_balance; node->balance += balance_diff; if (balance_diff == previous_balance) { /* node->balance is outside the range [-1,1]. Must rotate. */ NODE_T *nodep; if (node->parent == NULL) /* node == container->root */ nodep = &container->root; else if (node->parent->left == node) nodep = &node->parent->left; else if (node->parent->right == node) nodep = &node->parent->right; else abort (); nodeleft = node->left; noderight = node->right; if (balance_diff < 0) { /* node->balance = -2. The subtree is heavier on the left side. Rotate from left to right: * / \ h+2 h */ NODE_T nodeleftright = nodeleft->right; if (nodeleft->balance <= 0) { /* * h+2|h+3 / \ / \ h+2 h --> / h+1|h+2 / \ | / \ h+1 h|h+1 h+1 h|h+1 h */ node->left = nodeleftright; nodeleft->right = node; nodeleft->parent = node->parent; node->parent = nodeleft; if (nodeleftright != NULL) nodeleftright->parent = node; nodeleft->balance += 1; node->balance = - nodeleft->balance; *nodep = nodeleft; height_diff = (height_diff < 0 ? /* noderight's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2|h+3. */ nodeleft->balance - 1 : /* nodeleft's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2|h+3. */ nodeleft->balance); } else { /* * h+2 / \ / \ h+2 h --> h+1 h+1 / \ / \ / \ h h+1 h L R h / \ L R */ NODE_T L = nodeleft->right = nodeleftright->left; NODE_T R = node->left = nodeleftright->right; nodeleftright->left = nodeleft; nodeleftright->right = node; nodeleftright->parent = node->parent; if (L != NULL) L->parent = nodeleft; if (R != NULL) R->parent = node; nodeleft->parent = nodeleftright; node->parent = nodeleftright; nodeleft->balance = (nodeleftright->balance > 0 ? -1 : 0); node->balance = (nodeleftright->balance < 0 ? 1 : 0); nodeleftright->balance = 0; *nodep = nodeleftright; height_diff = (height_diff < 0 ? /* noderight's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2. */ -1 : /* nodeleft's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2. */ 0); } } else { /* node->balance = 2. The subtree is heavier on the right side. Rotate from right to left: * / \ h h+2 */ NODE_T noderightleft = noderight->left; if (noderight->balance >= 0) { /* * h+2|h+3 / \ / \ h h+2 --> h+1|h+2 \ / \ / \ | h|h+1 h+1 h h|h+1 h+1 */ node->right = noderightleft; noderight->left = node; noderight->parent = node->parent; node->parent = noderight; if (noderightleft != NULL) noderightleft->parent = node; noderight->balance -= 1; node->balance = - noderight->balance; *nodep = noderight; height_diff = (height_diff < 0 ? /* nodeleft's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2|h+3. */ - noderight->balance - 1 : /* noderight's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2|h+3. */ - noderight->balance); } else { /* * h+2 / \ / \ h h+2 --> h+1 h+1 / \ / \ / \ h+1 h h L R h / \ L R */ NODE_T L = node->right = noderightleft->left; NODE_T R = noderight->left = noderightleft->right; noderightleft->left = node; noderightleft->right = noderight; noderightleft->parent = node->parent; if (L != NULL) L->parent = node; if (R != NULL) R->parent = noderight; node->parent = noderightleft; noderight->parent = noderightleft; node->balance = (noderightleft->balance > 0 ? -1 : 0); noderight->balance = (noderightleft->balance < 0 ? 1 : 0); noderightleft->balance = 0; *nodep = noderightleft; height_diff = (height_diff < 0 ? /* nodeleft's height had been decremented from h+1 to h. The subtree's height changes from h+3 to h+2. */ -1 : /* noderight's height had been incremented from h+1 to h+2. The subtree's height changes from h+2 to h+2. */ 0); } } node = *nodep; } else { /* No rotation needed. Only propagation of the height change to the next higher level. */ if (height_diff < 0) height_diff = (previous_balance == 0 ? 0 : -1); else height_diff = (node->balance == 0 ? 0 : 1); } if (height_diff == 0) break; parent = node->parent; if (parent == NULL) break; } } static NODE_T gl_tree_nx_add_first (CONTAINER_T container, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; NODE_PAYLOAD_ASSIGN(new_node) /* Add it to the tree. */ if (container->root == NULL) { container->root = new_node; new_node->parent = NULL; } else { NODE_T node; for (node = container->root; node->left != NULL; ) node = node->left; node->left = new_node; new_node->parent = node; node->balance--; /* Rebalance. */ if (node->right == NULL && node->parent != NULL) rebalance (container, node, 1, node->parent); } container->count++; return new_node; } /* Adds the already allocated NEW_NODE to the tree, right before NODE. */ static void gl_tree_add_node_before (CONTAINER_T container, NODE_T node, NODE_T new_node) { bool height_inc; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; /* Add it to the tree. */ if (node->left == NULL) { node->left = new_node; node->balance--; height_inc = (node->right == NULL); } else { for (node = node->left; node->right != NULL; ) node = node->right; node->right = new_node; node->balance++; height_inc = (node->left == NULL); } new_node->parent = node; /* Rebalance. */ if (height_inc && node->parent != NULL) rebalance (container, node, 1, node->parent); container->count++; } static NODE_T gl_tree_nx_add_before (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; NODE_PAYLOAD_ASSIGN(new_node) gl_tree_add_node_before (container, node, new_node); return new_node; } /* Adds the already allocated NEW_NODE to the tree, right after NODE. */ static void gl_tree_add_node_after (CONTAINER_T container, NODE_T node, NODE_T new_node) { bool height_inc; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; /* Add it to the tree. */ if (node->right == NULL) { node->right = new_node; node->balance++; height_inc = (node->left == NULL); } else { for (node = node->right; node->left != NULL; ) node = node->left; node->left = new_node; node->balance--; height_inc = (node->right == NULL); } new_node->parent = node; /* Rebalance. */ if (height_inc && node->parent != NULL) rebalance (container, node, 1, node->parent); container->count++; } static NODE_T gl_tree_nx_add_after (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; NODE_PAYLOAD_ASSIGN(new_node) gl_tree_add_node_after (container, node, new_node); return new_node; } static void gl_tree_remove_node_no_free (CONTAINER_T container, NODE_T node) { NODE_T parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ NODE_T child = node->right; if (child != NULL) child->parent = parent; if (parent == NULL) container->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; rebalance (container, child, -1, parent); } } else if (node->right == NULL) { /* It is not absolutely necessary to treat this case. But the more general case below is more complicated, hence slower. */ /* Replace node with node->left. */ NODE_T child = node->left; child->parent = parent; if (parent == NULL) container->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; rebalance (container, child, -1, parent); } } else { /* Replace node with the rightmost element of the node->left subtree. */ NODE_T subst; NODE_T subst_parent; NODE_T child; for (subst = node->left; subst->right != NULL; ) subst = subst->right; subst_parent = subst->parent; child = subst->left; /* The case subst_parent == node is special: If we do nothing special, we get confusion about node->left, subst->left and child->parent. subst_parent == node <==> The 'for' loop above terminated immediately. <==> subst == subst_parent->left [otherwise subst == subst_parent->right] In this case, we would need to first set child->parent = node; node->left = child; and later - when we copy subst into node's position - again child->parent = subst; subst->left = child; Altogether a no-op. */ if (subst_parent != node) { if (child != NULL) child->parent = subst_parent; subst_parent->right = child; } /* Copy subst into node's position. (This is safer than to copy subst's value into node, keep node in place, and free subst.) */ if (subst_parent != node) { subst->left = node->left; subst->left->parent = subst; } subst->right = node->right; subst->right->parent = subst; subst->balance = node->balance; subst->parent = parent; if (parent == NULL) container->root = subst; else if (parent->left == node) parent->left = subst; else /* parent->right == node */ parent->right = subst; /* Rebalancing starts at child's parent, that is subst_parent - except when subst_parent == node. In this case, we need to use its replacement, subst. */ rebalance (container, child, -1, subst_parent != node ? subst_parent : subst); } container->count--; } static bool gl_tree_remove_node (CONTAINER_T container, NODE_T node) { gl_tree_remove_node_no_free (container, node); NODE_PAYLOAD_DISPOSE (container, node) free (node); return true; } /* For debugging. */ static unsigned int check_invariants (NODE_T node, NODE_T parent, size_t *counterp) { unsigned int left_height = (node->left != NULL ? check_invariants (node->left, node, counterp) : 0); unsigned int right_height = (node->right != NULL ? check_invariants (node->right, node, counterp) : 0); int balance = (int)right_height - (int)left_height; if (!(node->parent == parent)) abort (); if (!(balance >= -1 && balance <= 1)) abort (); if (!(node->balance == balance)) abort (); (*counterp)++; return 1 + (left_height > right_height ? left_height : right_height); } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_oset.c�������������������������������������������������������0000664�0000000�0000000�00000004254�14110572173�0020374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_avltree_oset.h" #include <stdlib.h> /* -------------------------- gl_oset_t Data Type -------------------------- */ /* Parameterization of gl_avltree_ordered.h. */ #define CONTAINER_T gl_oset_t #define CONTAINER_IMPL gl_oset_impl #define CONTAINER_IMPL_BASE gl_oset_impl_base #define NODE_IMPL gl_oset_node_impl #define NODE_T gl_oset_node_t #define NODE_PAYLOAD_FIELDS \ const void *value; #define NODE_PAYLOAD_PARAMS \ const void *elt #define NODE_PAYLOAD_ASSIGN(node) \ node->value = elt; #define NODE_PAYLOAD_DISPOSE(container, node) \ if (container->base.dispose_fn != NULL) \ container->base.dispose_fn (node->value); #include "gl_avltree_ordered.h" /* Generic binary tree code. */ #include "gl_anytree_oset.h" /* For debugging. */ void gl_avltree_oset_check_invariants (gl_oset_t set) { size_t counter = 0; if (set->root != NULL) check_invariants (set->root, NULL, &counter); if (!(set->count == counter)) abort (); } const struct gl_oset_implementation gl_avltree_oset_implementation = { gl_tree_nx_create_empty, gl_tree_size, gl_tree_search, gl_tree_search_atleast, gl_tree_nx_add, gl_tree_remove, gl_tree_update, gl_tree_oset_free, gl_tree_iterator, gl_tree_iterator_atleast, gl_tree_iterator_next, gl_tree_iterator_free }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltree_oset.h�������������������������������������������������������0000664�0000000�0000000�00000002173�14110572173�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_AVLTREE_OSET_H #define _GL_AVLTREE_OSET_H #include "gl_oset.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_oset_implementation gl_avltree_oset_implementation; #define GL_AVLTREE_OSET &gl_avltree_oset_implementation #ifdef __cplusplus } #endif #endif /* _GL_AVLTREE_OSET_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltreehash_list.c���������������������������������������������������0000664�0000000�0000000�00000007512�14110572173�0021241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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> /* Specification. */ #include "gl_avltreehash_list.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "gl_avltree_oset.h" #include "xsize.h" #define WITH_HASHTABLE 1 /* Which kind of binary trees to use for ordered sets. Quite arbitrary. */ #define OSET_TREE_FLAVOR GL_AVLTREE_OSET /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic hash-table code: Type definitions. */ #include "gl_anyhash1.h" /* Generic AVL tree code: Type definitions. */ #include "gl_anyavltree_list1.h" /* Generic hash-table code: Low-level code. */ #define CONTAINER_T gl_list_t #define CONTAINER_COUNT(list) \ ((list)->root != NULL ? (list)->root->branch_size : 0) #include "gl_anyhash2.h" /* Generic binary tree code: Type definitions. */ #include "gl_anytree_list1.h" /* Hash-table with binary tree code: Handling of hash buckets. */ #include "gl_anytreehash_list1.h" /* Generic AVL tree code: Insertion/deletion algorithms. */ #include "gl_anyavltree_list2.h" /* Generic binary tree code: Functions taking advantage of the hash table. */ #include "gl_anytreehash_list2.h" /* Generic binary tree code: All other functions. */ #include "gl_anytree_list2.h" /* For debugging. */ static unsigned int check_invariants (gl_list_node_t node, gl_list_node_t parent) { unsigned int left_height = (node->left != NULL ? check_invariants (node->left, node) : 0); unsigned int right_height = (node->right != NULL ? check_invariants (node->right, node) : 0); int balance = (int)right_height - (int)left_height; if (!(node->parent == parent)) abort (); if (!(node->branch_size == (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0))) abort (); if (!(balance >= -1 && balance <= 1)) abort (); if (!(node->balance == balance)) abort (); return 1 + (left_height > right_height ? left_height : right_height); } void gl_avltreehash_list_check_invariants (gl_list_t list) { if (list->root != NULL) check_invariants (list->root, NULL); } const struct gl_list_implementation gl_avltreehash_list_implementation = { gl_tree_nx_create_empty, gl_tree_nx_create, gl_tree_size, gl_tree_node_value, gl_tree_node_nx_set_value, gl_tree_next_node, gl_tree_previous_node, gl_tree_first_node, gl_tree_last_node, gl_tree_get_at, gl_tree_nx_set_at, gl_tree_search_from_to, gl_tree_indexof_from_to, gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before, gl_tree_nx_add_after, gl_tree_nx_add_at, gl_tree_remove_node, gl_tree_remove_at, gl_tree_remove, gl_tree_list_free, gl_tree_iterator, gl_tree_iterator_from_to, gl_tree_iterator_next, gl_tree_iterator_free, gl_tree_sortedlist_search, gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof, gl_tree_sortedlist_indexof_from_to, gl_tree_sortedlist_nx_add, gl_tree_sortedlist_remove }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_avltreehash_list.h���������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0021236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _GL_AVLTREEHASH_LIST_H #define _GL_AVLTREEHASH_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_avltreehash_list_implementation; #define GL_AVLTREEHASH_LIST &gl_avltreehash_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_AVLTREEHASH_LIST_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_carray_list.c��������������������������������������������������������0000664�0000000�0000000�00000060012�14110572173�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a circular array. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_carray_list.h" #include <stdint.h> #include <stdlib.h> /* Get memcpy. */ #include <string.h> /* Checked size_t computations. */ #include "xsize.h" /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; /* An array of ALLOCATED elements, of which the elements OFFSET, (OFFSET + 1) % ALLOCATED, ..., (OFFSET + COUNT - 1) % ALLOCATED are used. 0 <= COUNT <= ALLOCATED. Either OFFSET = ALLOCATED = 0 or 0 <= OFFSET < ALLOCATED. */ const void **elements; size_t offset; size_t count; size_t allocated; }; /* struct gl_list_node_impl doesn't exist here. The pointers are actually indices + 1. */ #define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) #define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) static gl_list_t gl_carray_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; list->elements = NULL; list->offset = 0; list->count = 0; list->allocated = 0; return list; } static gl_list_t gl_carray_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; if (count > 0) { if (size_overflow_p (xtimes (count, sizeof (const void *)))) goto fail; list->elements = (const void **) malloc (count * sizeof (const void *)); if (list->elements == NULL) goto fail; memcpy (list->elements, contents, count * sizeof (const void *)); } else list->elements = NULL; list->offset = 0; list->count = count; list->allocated = count; return list; fail: free (list); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_carray_size (gl_list_t list) { return list->count; } static const void * _GL_ATTRIBUTE_PURE gl_carray_node_value (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); size_t i; if (!(index < list->count)) /* Invalid argument. */ abort (); i = list->offset + index; if (i >= list->allocated) i -= list->allocated; return list->elements[i]; } static int gl_carray_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { uintptr_t index = NODE_TO_INDEX (node); size_t i; if (!(index < list->count)) /* Invalid argument. */ abort (); i = list->offset + index; if (i >= list->allocated) i -= list->allocated; list->elements[i] = elt; return 0; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_next_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); index++; if (index < list->count) return INDEX_TO_NODE (index); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_previous_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); if (index > 0) return INDEX_TO_NODE (index - 1); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_first_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (0); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_last_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (list->count - 1); else return NULL; } static const void * _GL_ATTRIBUTE_PURE gl_carray_get_at (gl_list_t list, size_t position) { size_t count = list->count; size_t i; if (!(position < count)) /* Invalid argument. */ abort (); i = list->offset + position; if (i >= list->allocated) i -= list->allocated; return list->elements[i]; } static gl_list_node_t gl_carray_nx_set_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; size_t i; if (!(position < count)) /* Invalid argument. */ abort (); i = list->offset + position; if (i >= list->allocated) i -= list->allocated; list->elements[i] = elt; return INDEX_TO_NODE (position); } static size_t _GL_ATTRIBUTE_PURE gl_carray_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t count = list->count; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); if (start_index < end_index) { gl_listelement_equals_fn equals = list->base.equals_fn; size_t allocated = list->allocated; size_t i_end; i_end = list->offset + end_index; if (i_end >= allocated) i_end -= allocated; if (equals != NULL) { size_t i; i = list->offset + start_index; if (i >= allocated) /* can only happen if start_index > 0 */ i -= allocated; for (;;) { if (equals (elt, list->elements[i])) return (i >= list->offset ? i : i + allocated) - list->offset; i++; if (i == allocated) i = 0; if (i == i_end) break; } } else { size_t i; i = list->offset + start_index; if (i >= allocated) /* can only happen if start_index > 0 */ i -= allocated; for (;;) { if (elt == list->elements[i]) return (i >= list->offset ? i : i + allocated) - list->offset; i++; if (i == allocated) i = 0; if (i == i_end) break; } } } return (size_t)(-1); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t index = gl_carray_indexof_from_to (list, start_index, end_index, elt); return INDEX_TO_NODE (index); } /* Ensure that list->allocated > list->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_list_t list) { size_t new_allocated; size_t memory_size; const void **memory; new_allocated = xtimes (list->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (const void *)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; if (list->offset > 0 && list->count > 0) { memory = (const void **) malloc (memory_size); if (memory == NULL) /* Out of memory. */ return -1; if (list->offset + list->count > list->allocated) { memcpy (memory, &list->elements[list->offset], (list->allocated - list->offset) * sizeof (const void *)); memcpy (memory + (list->allocated - list->offset), list->elements, (list->offset + list->count - list->allocated) * sizeof (const void *)); } else memcpy (memory, &list->elements[list->offset], list->count * sizeof (const void *)); if (list->elements != NULL) free (list->elements); } else { memory = (const void **) realloc (list->elements, memory_size); if (memory == NULL) /* Out of memory. */ return -1; } list->elements = memory; list->offset = 0; list->allocated = new_allocated; return 0; } static gl_list_node_t gl_carray_nx_add_first (gl_list_t list, const void *elt) { size_t count = list->count; if (count == list->allocated) if (grow (list) < 0) return NULL; list->offset = (list->offset == 0 ? list->allocated : list->offset) - 1; list->elements[list->offset] = elt; list->count = count + 1; return INDEX_TO_NODE (0); } static gl_list_node_t gl_carray_nx_add_last (gl_list_t list, const void *elt) { size_t count = list->count; size_t i; if (count == list->allocated) if (grow (list) < 0) return NULL; i = list->offset + count; if (i >= list->allocated) i -= list->allocated; list->elements[i] = elt; list->count = count + 1; return INDEX_TO_NODE (count); } static gl_list_node_t gl_carray_nx_add_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; const void **elements; if (!(position <= count)) /* Invalid argument. */ abort (); if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; if (position <= (count / 2)) { /* Shift at most count/2 elements to the left. */ size_t i2, i; list->offset = (list->offset == 0 ? list->allocated : list->offset) - 1; i2 = list->offset + position; if (i2 >= list->allocated) { /* Here we must have list->offset > 0, hence list->allocated > 0. */ size_t i1 = list->allocated - 1; i2 -= list->allocated; for (i = list->offset; i < i1; i++) elements[i] = elements[i + 1]; elements[i1] = elements[0]; for (i = 0; i < i2; i++) elements[i] = elements[i + 1]; } else { for (i = list->offset; i < i2; i++) elements[i] = elements[i + 1]; } elements[i2] = elt; } else { /* Shift at most (count+1)/2 elements to the right. */ size_t i1, i3, i; i1 = list->offset + position; i3 = list->offset + count; if (i1 >= list->allocated) { i1 -= list->allocated; i3 -= list->allocated; for (i = i3; i > i1; i--) elements[i] = elements[i - 1]; } else if (i3 >= list->allocated) { /* Here we must have list->offset > 0, hence list->allocated > 0. */ size_t i2 = list->allocated - 1; i3 -= list->allocated; for (i = i3; i > 0; i--) elements[i] = elements[i - 1]; elements[0] = elements[i2]; for (i = i2; i > i1; i--) elements[i] = elements[i - 1]; } else { for (i = i3; i > i1; i--) elements[i] = elements[i - 1]; } elements[i1] = elt; } list->count = count + 1; return INDEX_TO_NODE (position); } static gl_list_node_t gl_carray_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); if (!(index < count)) /* Invalid argument. */ abort (); return gl_carray_nx_add_at (list, index, elt); } static gl_list_node_t gl_carray_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); if (!(index < count)) /* Invalid argument. */ abort (); return gl_carray_nx_add_at (list, index + 1, elt); } static bool gl_carray_remove_at (gl_list_t list, size_t position) { size_t count = list->count; const void **elements; if (!(position < count)) /* Invalid argument. */ abort (); /* Here we know count > 0. */ elements = list->elements; if (position <= ((count - 1) / 2)) { /* Shift at most (count-1)/2 elements to the right. */ size_t i0, i2, i; i0 = list->offset; i2 = list->offset + position; if (i2 >= list->allocated) { /* Here we must have list->offset > 0, hence list->allocated > 0. */ size_t i1 = list->allocated - 1; i2 -= list->allocated; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[i2]); for (i = i2; i > 0; i--) elements[i] = elements[i - 1]; elements[0] = elements[i1]; for (i = i1; i > i0; i--) elements[i] = elements[i - 1]; } else { if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[i2]); for (i = i2; i > i0; i--) elements[i] = elements[i - 1]; } i0++; list->offset = (i0 == list->allocated ? 0 : i0); } else { /* Shift at most count/2 elements to the left. */ size_t i1, i3, i; i1 = list->offset + position; i3 = list->offset + count - 1; if (i1 >= list->allocated) { i1 -= list->allocated; i3 -= list->allocated; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[i1]); for (i = i1; i < i3; i++) elements[i] = elements[i + 1]; } else if (i3 >= list->allocated) { /* Here we must have list->offset > 0, hence list->allocated > 0. */ size_t i2 = list->allocated - 1; i3 -= list->allocated; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[i1]); for (i = i1; i < i2; i++) elements[i] = elements[i + 1]; elements[i2] = elements[0]; for (i = 0; i < i3; i++) elements[i] = elements[i + 1]; } else { if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[i1]); for (i = i1; i < i3; i++) elements[i] = elements[i + 1]; } } list->count = count - 1; return true; } static bool gl_carray_remove_node (gl_list_t list, gl_list_node_t node) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); if (!(index < count)) /* Invalid argument. */ abort (); return gl_carray_remove_at (list, index); } static bool gl_carray_remove (gl_list_t list, const void *elt) { size_t position = gl_carray_indexof_from_to (list, 0, list->count, elt); if (position == (size_t)(-1)) return false; else return gl_carray_remove_at (list, position); } static void gl_carray_list_free (gl_list_t list) { if (list->elements != NULL) { if (list->base.dispose_fn != NULL) { size_t count = list->count; if (count > 0) { gl_listelement_dispose_fn dispose = list->base.dispose_fn; const void **elements = list->elements; size_t i1 = list->offset; size_t i3 = list->offset + count - 1; if (i3 >= list->allocated) { /* Here we must have list->offset > 0, hence list->allocated > 0. */ size_t i2 = list->allocated - 1; size_t i; i3 -= list->allocated; for (i = i1; i <= i2; i++) dispose (elements[i]); for (i = 0; i <= i3; i++) dispose (elements[i]); } else { size_t i; for (i = i1; i <= i3; i++) dispose (elements[i]); } } } free (list->elements); } free (list); } /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_carray_iterator (gl_list_t list) { gl_list_iterator_t result; result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.i = 0; result.j = list->count; #if defined GCC_LINT || defined lint result.p = 0; result.q = 0; #endif return result; } static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_carray_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { gl_list_iterator_t result; if (!(start_index <= end_index && end_index <= list->count)) /* Invalid arguments. */ abort (); result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.i = start_index; result.j = end_index; #if defined GCC_LINT || defined lint result.p = 0; result.q = 0; #endif return result; } static bool gl_carray_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { gl_list_t list = iterator->list; if (iterator->count != list->count) { if (iterator->count != list->count + 1) /* Concurrent modifications were done on the list. */ abort (); /* The last returned element was removed. */ iterator->count--; iterator->i--; iterator->j--; } if (iterator->i < iterator->j) { size_t i = list->offset + iterator->i; if (i >= list->allocated) i -= list->allocated; *eltp = list->elements[i]; if (nodep != NULL) *nodep = INDEX_TO_NODE (iterator->i); iterator->i++; return true; } else return false; } static void gl_carray_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static size_t _GL_ATTRIBUTE_PURE gl_carray_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { if (!(low <= high && high <= list->count)) /* Invalid arguments. */ abort (); if (low < high) { /* At each loop iteration, low < high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ size_t i_mid; int cmp; i_mid = list->offset + mid; if (i_mid >= list->allocated) i_mid -= list->allocated; cmp = compar (list->elements[i_mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { /* We have an element equal to ELT at index MID. But we need the minimal such index. */ high = mid; /* At each loop iteration, low <= high and compar (list->elements[i_high], elt) == 0, and we know that the first occurrence of the element is at low <= position <= high. */ while (low < high) { size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ size_t i_mid2; int cmp2; i_mid2 = list->offset + mid2; if (i_mid2 >= list->allocated) i_mid2 -= list->allocated; cmp2 = compar (list->elements[i_mid2], elt); if (cmp2 < 0) low = mid2 + 1; else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { if (mid2 == low) break; high = mid2 - 1; } } return low; } } while (low < high); /* Here low == high. */ } return (size_t)(-1); } static size_t _GL_ATTRIBUTE_PURE gl_carray_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return gl_carray_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t index = gl_carray_sortedlist_indexof_from_to (list, compar, low, high, elt); return INDEX_TO_NODE (index); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_carray_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_carray_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); return INDEX_TO_NODE (index); } static gl_list_node_t gl_carray_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t count = list->count; size_t low = 0; size_t high = count; /* At each loop iteration, low <= high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. */ while (low < high) { size_t mid = low + (high - low) / 2; /* low <= mid < high */ size_t i_mid; int cmp; i_mid = list->offset + mid; if (i_mid >= list->allocated) i_mid -= list->allocated; cmp = compar (list->elements[i_mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { low = mid; break; } } return gl_carray_nx_add_at (list, low, elt); } static bool gl_carray_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_carray_sortedlist_indexof (list, compar, elt); if (index == (size_t)(-1)) return false; else return gl_carray_remove_at (list, index); } const struct gl_list_implementation gl_carray_list_implementation = { gl_carray_nx_create_empty, gl_carray_nx_create, gl_carray_size, gl_carray_node_value, gl_carray_node_nx_set_value, gl_carray_next_node, gl_carray_previous_node, gl_carray_first_node, gl_carray_last_node, gl_carray_get_at, gl_carray_nx_set_at, gl_carray_search_from_to, gl_carray_indexof_from_to, gl_carray_nx_add_first, gl_carray_nx_add_last, gl_carray_nx_add_before, gl_carray_nx_add_after, gl_carray_nx_add_at, gl_carray_remove_node, gl_carray_remove_at, gl_carray_remove, gl_carray_list_free, gl_carray_iterator, gl_carray_iterator_from_to, gl_carray_iterator_next, gl_carray_iterator_free, gl_carray_sortedlist_search, gl_carray_sortedlist_search_from_to, gl_carray_sortedlist_indexof, gl_carray_sortedlist_indexof_from_to, gl_carray_sortedlist_nx_add, gl_carray_sortedlist_remove }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_carray_list.h��������������������������������������������������������0000664�0000000�0000000�00000002174�14110572173�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a circular array. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_CARRAY_LIST_H #define _GL_CARRAY_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_carray_list_implementation; #define GL_CARRAY_LIST &gl_carray_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_CARRAY_LIST_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_hash_map.c�����������������������������������������������������������0000664�0000000�0000000�00000021126�14110572173�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by a hash table. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_hash_map.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "xsize.h" /* --------------------------- gl_map_t Data Type --------------------------- */ #include "gl_anyhash1.h" /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { struct gl_hash_entry h; /* hash table entry fields; must be first */ const void *key; const void *value; }; typedef struct gl_list_node_impl * gl_list_node_t; /* Concrete gl_map_impl type, valid for this file only. */ struct gl_map_impl { struct gl_map_impl_base base; gl_mapkey_hashcode_fn hashcode_fn; /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; /* Number of hash table entries. */ size_t count; }; #define CONTAINER_T gl_map_t #define CONTAINER_COUNT(map) (map)->count #include "gl_anyhash2.h" /* --------------------------- gl_map_t Data Type --------------------------- */ static gl_map_t gl_hash_nx_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { struct gl_map_impl *map = (struct gl_map_impl *) malloc (sizeof (struct gl_map_impl)); if (map == NULL) return NULL; map->base.vtable = implementation; map->base.equals_fn = equals_fn; map->base.kdispose_fn = kdispose_fn; map->base.vdispose_fn = vdispose_fn; map->hashcode_fn = hashcode_fn; map->table_size = 11; map->table = (gl_hash_entry_t *) calloc (map->table_size, sizeof (gl_hash_entry_t)); if (map->table == NULL) goto fail; map->count = 0; return map; fail: free (map); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_hash_size (gl_map_t map) { return map->count; } static bool _GL_ATTRIBUTE_PURE gl_hash_search (gl_map_t map, const void *key, const void **valuep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for a match in the hash bucket. */ gl_list_node_t node; for (node = (gl_list_node_t) map->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *valuep = node->value; return true; } return false; } static int gl_hash_nx_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for a match in the hash bucket. */ { gl_list_node_t node; for (node = (gl_list_node_t) map->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *oldvaluep = node->value; node->value = value; return 0; } } /* Allocate a new node. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return -1; node->key = key; node->value = value; node->h.hashcode = hashcode; /* Add node to the hash table. */ node->h.hash_next = map->table[bucket]; map->table[bucket] = &node->h; /* Add node to the map. */ map->count++; hash_resize_after_add (map); return 1; } static bool gl_hash_getremove (gl_map_t map, const void *key, const void **oldvaluep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for the first match in the hash bucket. */ gl_list_node_t *nodep; for (nodep = (gl_list_node_t *) &map->table[bucket]; *nodep != NULL; nodep = (gl_list_node_t *) &(*nodep)->h.hash_next) { gl_list_node_t node = *nodep; if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *oldvaluep = node->value; /* Remove node from the hash table. */ *nodep = (gl_list_node_t) node->h.hash_next; /* Remove node from the map. */ map->count--; if (map->base.kdispose_fn != NULL) map->base.kdispose_fn (node->key); free (node); return true; } } return false; } static void gl_hash_free (gl_map_t map) { if (map->count > 0) { gl_mapkey_dispose_fn kdispose = map->base.kdispose_fn; gl_mapvalue_dispose_fn vdispose = map->base.vdispose_fn; struct gl_hash_entry **table = map->table; size_t i; for (i = map->table_size; i > 0; ) { gl_hash_entry_t node = table[--i]; while (node != NULL) { gl_hash_entry_t next = node->hash_next; /* Free the entry. */ if (vdispose != NULL) vdispose (((gl_list_node_t) node)->value); if (kdispose != NULL) kdispose (((gl_list_node_t) node)->key); free (node); node = next; } } } free (map->table); free (map); } /* ---------------------- gl_map_iterator_t Data Type ---------------------- */ /* Here we iterate through the hash buckets. Therefore the order in which the pairs are returned is unpredictable. */ static gl_map_iterator_t gl_hash_iterator (gl_map_t map) { gl_map_iterator_t result; result.vtable = map->base.vtable; result.map = map; result.p = NULL; /* runs through the nodes of a bucket */ result.i = 0; /* index of the bucket that p points into + 1 */ result.j = map->table_size; #if defined GCC_LINT || defined lint result.q = NULL; result.count = 0; #endif return result; } static bool gl_hash_iterator_next (gl_map_iterator_t *iterator, const void **keyp, const void **valuep) { if (iterator->p != NULL) { /* We're traversing a bucket. */ gl_list_node_t node = (gl_list_node_t) iterator->p; *keyp = node->key; *valuep = node->value; iterator->p = (gl_list_node_t) node->h.hash_next; return true; } else { /* Find the next bucket that is not empty. */ size_t j = iterator->j; size_t i = iterator->i; if (i < j) { gl_hash_entry_t *table = iterator->map->table; do { gl_list_node_t node = (gl_list_node_t) table[i++]; if (node != NULL) { *keyp = node->key; *valuep = node->value; iterator->p = (gl_list_node_t) node->h.hash_next; iterator->i = i; return true; } } while (i < j); } /* Here iterator->p is still NULL, and i == j. */ iterator->i = j; return false; } } static void gl_hash_iterator_free (gl_map_iterator_t *iterator) { } const struct gl_map_implementation gl_hash_map_implementation = { gl_hash_nx_create_empty, gl_hash_size, gl_hash_search, gl_hash_nx_getput, gl_hash_getremove, gl_hash_free, gl_hash_iterator, gl_hash_iterator_next, gl_hash_iterator_free }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_hash_map.h�����������������������������������������������������������0000664�0000000�0000000�00000002107�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by a hash table. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_HASH_MAP_H #define _GL_HASH_MAP_H #include "gl_map.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_map_implementation gl_hash_map_implementation; #define GL_HASH_MAP &gl_hash_map_implementation #ifdef __cplusplus } #endif #endif /* _GL_HASH_MAP_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_hash_set.c�����������������������������������������������������������0000664�0000000�0000000�00000017702�14110572173�0017500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by a hash table. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_hash_set.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "xsize.h" /* --------------------------- gl_set_t Data Type --------------------------- */ #include "gl_anyhash1.h" /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { struct gl_hash_entry h; /* hash table entry fields; must be first */ const void *value; }; typedef struct gl_list_node_impl * gl_list_node_t; /* Concrete gl_set_impl type, valid for this file only. */ struct gl_set_impl { struct gl_set_impl_base base; gl_setelement_hashcode_fn hashcode_fn; /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; /* Number of hash table entries. */ size_t count; }; #define CONTAINER_T gl_set_t #define CONTAINER_COUNT(set) (set)->count #include "gl_anyhash2.h" /* --------------------------- gl_set_t Data Type --------------------------- */ static gl_set_t gl_hash_nx_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) { struct gl_set_impl *set = (struct gl_set_impl *) malloc (sizeof (struct gl_set_impl)); if (set == NULL) return NULL; set->base.vtable = implementation; set->base.equals_fn = equals_fn; set->base.dispose_fn = dispose_fn; set->hashcode_fn = hashcode_fn; set->table_size = 11; set->table = (gl_hash_entry_t *) calloc (set->table_size, sizeof (gl_hash_entry_t)); if (set->table == NULL) goto fail; set->count = 0; return set; fail: free (set); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_hash_size (gl_set_t set) { return set->count; } static bool _GL_ATTRIBUTE_PURE gl_hash_search (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for a match in the hash bucket. */ gl_list_node_t node; for (node = (gl_list_node_t) set->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return true; return false; } static int gl_hash_nx_add (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for a match in the hash bucket. */ { gl_list_node_t node; for (node = (gl_list_node_t) set->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return 0; } /* Allocate a new node. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return -1; node->value = elt; node->h.hashcode = hashcode; /* Add node to the hash table. */ node->h.hash_next = set->table[bucket]; set->table[bucket] = &node->h; /* Add node to the set. */ set->count++; hash_resize_after_add (set); return 1; } static bool gl_hash_remove (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for the first match in the hash bucket. */ gl_list_node_t *nodep; for (nodep = (gl_list_node_t *) &set->table[bucket]; *nodep != NULL; nodep = (gl_list_node_t *) &(*nodep)->h.hash_next) { gl_list_node_t node = *nodep; if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) { /* Remove node from the hash table. */ *nodep = (gl_list_node_t) node->h.hash_next; /* Remove node from the set. */ set->count--; if (set->base.dispose_fn != NULL) set->base.dispose_fn (node->value); free (node); return true; } } return false; } static void gl_hash_free (gl_set_t set) { if (set->count > 0) { gl_setelement_dispose_fn dispose = set->base.dispose_fn; struct gl_hash_entry **table = set->table; size_t i; for (i = set->table_size; i > 0; ) { gl_hash_entry_t node = table[--i]; while (node != NULL) { gl_hash_entry_t next = node->hash_next; /* Free the entry. */ if (dispose != NULL) dispose (((gl_list_node_t) node)->value); free (node); node = next; } } } free (set->table); free (set); } /* ---------------------- gl_set_iterator_t Data Type ---------------------- */ /* Here we iterate through the hash buckets. Therefore the order in which the elements are returned is unpredictable. */ static gl_set_iterator_t gl_hash_iterator (gl_set_t set) { gl_set_iterator_t result; result.vtable = set->base.vtable; result.set = set; result.p = NULL; /* runs through the nodes of a bucket */ result.i = 0; /* index of the bucket that p points into + 1 */ result.j = set->table_size; #if defined GCC_LINT || defined lint result.q = NULL; result.count = 0; #endif return result; } static bool gl_hash_iterator_next (gl_set_iterator_t *iterator, const void **eltp) { if (iterator->p != NULL) { /* We're traversing a bucket. */ gl_list_node_t node = (gl_list_node_t) iterator->p; *eltp = node->value; iterator->p = (gl_list_node_t) node->h.hash_next; return true; } else { /* Find the next bucket that is not empty. */ size_t j = iterator->j; size_t i = iterator->i; if (i < j) { gl_hash_entry_t *table = iterator->set->table; do { gl_list_node_t node = (gl_list_node_t) table[i++]; if (node != NULL) { *eltp = node->value; iterator->p = (gl_list_node_t) node->h.hash_next; iterator->i = i; return true; } } while (i < j); } /* Here iterator->p is still NULL, and i == j. */ iterator->i = j; return false; } } static void gl_hash_iterator_free (gl_set_iterator_t *iterator) { } const struct gl_set_implementation gl_hash_set_implementation = { gl_hash_nx_create_empty, gl_hash_size, gl_hash_search, gl_hash_nx_add, gl_hash_remove, gl_hash_free, gl_hash_iterator, gl_hash_iterator_next, gl_hash_iterator_free }; ��������������������������������������������������������������gnulib-20210822~d383792/lib/gl_hash_set.h�����������������������������������������������������������0000664�0000000�0000000�00000002107�14110572173�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by a hash table. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_HASH_SET_H #define _GL_HASH_SET_H #include "gl_set.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_set_implementation gl_hash_set_implementation; #define GL_HASH_SET &gl_hash_set_implementation #ifdef __cplusplus } #endif #endif /* _GL_HASH_SET_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linked_list.c��������������������������������������������������������0000664�0000000�0000000�00000004070�14110572173�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_linked_list.h" #include <stdlib.h> /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic linked list code. */ #include "gl_anylinked_list1.h" #include "gl_anylinked_list2.h" const struct gl_list_implementation gl_linked_list_implementation = { gl_linked_nx_create_empty, gl_linked_nx_create, gl_linked_size, gl_linked_node_value, gl_linked_node_nx_set_value, gl_linked_next_node, gl_linked_previous_node, gl_linked_first_node, gl_linked_last_node, gl_linked_get_at, gl_linked_nx_set_at, gl_linked_search_from_to, gl_linked_indexof_from_to, gl_linked_nx_add_first, gl_linked_nx_add_last, gl_linked_nx_add_before, gl_linked_nx_add_after, gl_linked_nx_add_at, gl_linked_remove_node, gl_linked_remove_at, gl_linked_remove, gl_linked_list_free, gl_linked_iterator, gl_linked_iterator_from_to, gl_linked_iterator_next, gl_linked_iterator_free, gl_linked_sortedlist_search, gl_linked_sortedlist_search_from_to, gl_linked_sortedlist_indexof, gl_linked_sortedlist_indexof_from_to, gl_linked_sortedlist_nx_add, gl_linked_sortedlist_remove }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linked_list.h��������������������������������������������������������0000664�0000000�0000000�00000002171�14110572173�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_LINKED_LIST_H #define _GL_LINKED_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_linked_list_implementation; #define GL_LINKED_LIST &gl_linked_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_LINKED_LIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_list.c����������������������������������������������������0000664�0000000�0000000�00000006404�14110572173�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a linked list. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_linkedhash_list.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "xsize.h" #define WITH_HASHTABLE 1 /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic hash-table code. */ #include "gl_anyhash1.h" /* Generic linked list code. */ #include "gl_anylinked_list1.h" /* Generic hash-table code. */ #define CONTAINER_T gl_list_t #define CONTAINER_COUNT(list) (list)->count #include "gl_anyhash2.h" /* Add a node to the hash table structure. */ static void add_to_bucket (gl_list_t list, gl_list_node_t node) { size_t bucket = node->h.hashcode % list->table_size; node->h.hash_next = list->table[bucket]; list->table[bucket] = &node->h; } /* Tell all compilers that the return value is 0. */ #define add_to_bucket(list,node) ((add_to_bucket) (list, node), 0) /* Remove a node from the hash table structure. */ static void remove_from_bucket (gl_list_t list, gl_list_node_t node) { size_t bucket = node->h.hashcode % list->table_size; gl_hash_entry_t *p; for (p = &list->table[bucket]; ; p = &(*p)->hash_next) { if (*p == &node->h) { *p = node->h.hash_next; break; } if (*p == NULL) /* node is not in the right bucket. Did the hash codes change inadvertently? */ abort (); } } /* Generic linked list code. */ #include "gl_anylinked_list2.h" const struct gl_list_implementation gl_linkedhash_list_implementation = { gl_linked_nx_create_empty, gl_linked_nx_create, gl_linked_size, gl_linked_node_value, gl_linked_node_nx_set_value, gl_linked_next_node, gl_linked_previous_node, gl_linked_first_node, gl_linked_last_node, gl_linked_get_at, gl_linked_nx_set_at, gl_linked_search_from_to, gl_linked_indexof_from_to, gl_linked_nx_add_first, gl_linked_nx_add_last, gl_linked_nx_add_before, gl_linked_nx_add_after, gl_linked_nx_add_at, gl_linked_remove_node, gl_linked_remove_at, gl_linked_remove, gl_linked_list_free, gl_linked_iterator, gl_linked_iterator_from_to, gl_linked_iterator_next, gl_linked_iterator_free, gl_linked_sortedlist_search, gl_linked_sortedlist_search_from_to, gl_linked_sortedlist_indexof, gl_linked_sortedlist_indexof_from_to, gl_linked_sortedlist_nx_add, gl_linked_sortedlist_remove }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_list.h����������������������������������������������������0000664�0000000�0000000�00000002243�14110572173�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a linked list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_LINKEDHASH_LIST_H #define _GL_LINKEDHASH_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_linkedhash_list_implementation; #define GL_LINKEDHASH_LIST &gl_linkedhash_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_LINKEDHASH_LIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_map.c�����������������������������������������������������0000664�0000000�0000000�00000022062�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by a hash table with a linked list. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_linkedhash_map.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "xsize.h" /* --------------------------- gl_map_t Data Type --------------------------- */ #include "gl_anyhash1.h" /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { struct gl_hash_entry h; /* hash table entry fields; must be first */ struct gl_list_node_impl *next; struct gl_list_node_impl *prev; const void *key; const void *value; }; typedef struct gl_list_node_impl * gl_list_node_t; /* Concrete gl_map_impl type, valid for this file only. */ struct gl_map_impl { struct gl_map_impl_base base; gl_mapkey_hashcode_fn hashcode_fn; /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; /* A circular list anchored at root. The first node is = root.next, the last node is = root.prev. The root's value is unused. */ struct gl_list_node_impl root; /* Number of list nodes, excluding the root. */ size_t count; }; #define CONTAINER_T gl_map_t #define CONTAINER_COUNT(map) (map)->count #include "gl_anyhash2.h" /* If the symbol SIGNAL_SAFE_MAP is defined, the code is compiled in such a way that a gl_map_t data structure may be used from within a signal handler. The operations allowed in the signal handler are: gl_map_iterator, gl_map_iterator_next, gl_map_iterator_free. The map and node fields that are therefore accessed from the signal handler are: map->root, node->next, node->value. We are careful to make modifications to these fields only in an order that maintains the consistency of the list data structure at any moment, and we use 'volatile' assignments to prevent the compiler from reordering such assignments. */ #ifdef SIGNAL_SAFE_MAP # define ASYNCSAFE(type) *(type volatile *)& #else # define ASYNCSAFE(type) #endif /* --------------------------- gl_map_t Data Type --------------------------- */ static gl_map_t gl_linkedhash_nx_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { struct gl_map_impl *map = (struct gl_map_impl *) malloc (sizeof (struct gl_map_impl)); if (map == NULL) return NULL; map->base.vtable = implementation; map->base.equals_fn = equals_fn; map->base.kdispose_fn = kdispose_fn; map->base.vdispose_fn = vdispose_fn; map->hashcode_fn = hashcode_fn; map->table_size = 11; map->table = (gl_hash_entry_t *) calloc (map->table_size, sizeof (gl_hash_entry_t)); if (map->table == NULL) goto fail; map->root.next = &map->root; map->root.prev = &map->root; map->count = 0; return map; fail: free (map); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_linkedhash_size (gl_map_t map) { return map->count; } static bool _GL_ATTRIBUTE_PURE gl_linkedhash_search (gl_map_t map, const void *key, const void **valuep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for a match in the hash bucket. */ gl_list_node_t node; for (node = (gl_list_node_t) map->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *valuep = node->value; return true; } return false; } static int gl_linkedhash_nx_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for a match in the hash bucket. */ { gl_list_node_t node; for (node = (gl_list_node_t) map->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *oldvaluep = node->value; node->value = value; return 0; } } /* Allocate a new node. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return -1; ASYNCSAFE(const void *) node->key = key; ASYNCSAFE(const void *) node->value = value; node->h.hashcode = hashcode; /* Add node to the hash table. */ node->h.hash_next = map->table[bucket]; map->table[bucket] = &node->h; /* Add node to the map. */ ASYNCSAFE(gl_list_node_t) node->next = &map->root; node->prev = map->root.prev; ASYNCSAFE(gl_list_node_t) node->prev->next = node; map->root.prev = node; map->count++; hash_resize_after_add (map); return 1; } static bool gl_linkedhash_getremove (gl_map_t map, const void *key, const void **oldvaluep) { size_t hashcode = (map->hashcode_fn != NULL ? map->hashcode_fn (key) : (size_t)(uintptr_t) key); size_t bucket = hashcode % map->table_size; gl_mapkey_equals_fn equals = map->base.equals_fn; /* Look for the first match in the hash bucket. */ gl_list_node_t *nodep; for (nodep = (gl_list_node_t *) &map->table[bucket]; *nodep != NULL; nodep = (gl_list_node_t *) &(*nodep)->h.hash_next) { gl_list_node_t node = *nodep; if (node->h.hashcode == hashcode && (equals != NULL ? equals (key, node->key) : key == node->key)) { *oldvaluep = node->value; /* Remove node from the hash table. */ *nodep = (gl_list_node_t) node->h.hash_next; /* Remove node from the list. */ { gl_list_node_t prev = node->prev; gl_list_node_t next = node->next; ASYNCSAFE(gl_list_node_t) prev->next = next; next->prev = prev; } map->count--; if (map->base.kdispose_fn != NULL) map->base.kdispose_fn (node->key); free (node); return true; } } return false; } static void gl_linkedhash_free (gl_map_t map) { gl_mapkey_dispose_fn kdispose = map->base.kdispose_fn; gl_mapvalue_dispose_fn vdispose = map->base.vdispose_fn; gl_list_node_t node; for (node = map->root.next; node != &map->root; ) { gl_list_node_t next = node->next; if (vdispose != NULL) vdispose (node->value); if (kdispose != NULL) kdispose (node->key); free (node); node = next; } free (map->table); free (map); } /* ---------------------- gl_map_iterator_t Data Type ---------------------- */ /* Iterate through the list, not through the hash buckets, so that the order in which the pairs are returned is predictable. */ static gl_map_iterator_t gl_linkedhash_iterator (gl_map_t map) { gl_map_iterator_t result; result.vtable = map->base.vtable; result.map = map; result.p = map->root.next; result.q = &map->root; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static bool gl_linkedhash_iterator_next (gl_map_iterator_t *iterator, const void **keyp, const void **valuep) { if (iterator->p != iterator->q) { gl_list_node_t node = (gl_list_node_t) iterator->p; *keyp = node->key; *valuep = node->value; iterator->p = node->next; return true; } else return false; } static void gl_linkedhash_iterator_free (gl_map_iterator_t *iterator) { } const struct gl_map_implementation gl_linkedhash_map_implementation = { gl_linkedhash_nx_create_empty, gl_linkedhash_size, gl_linkedhash_search, gl_linkedhash_nx_getput, gl_linkedhash_getremove, gl_linkedhash_free, gl_linkedhash_iterator, gl_linkedhash_iterator_next, gl_linkedhash_iterator_free }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_map.h�����������������������������������������������������0000664�0000000�0000000�00000002176�14110572173�0020655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map data type implemented by a hash table with a linked list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_LINKEDHASH_MAP_H #define _GL_LINKEDHASH_MAP_H #include "gl_map.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_map_implementation gl_linkedhash_map_implementation; #define GL_LINKEDHASH_MAP &gl_linkedhash_map_implementation #ifdef __cplusplus } #endif #endif /* _GL_LINKEDHASH_MAP_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_set.c�����������������������������������������������������0000664�0000000�0000000�00000020702�14110572173�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by a hash table with a linked list. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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> /* Specification. */ #include "gl_linkedhash_set.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "xsize.h" /* --------------------------- gl_set_t Data Type --------------------------- */ #include "gl_anyhash1.h" /* Concrete list node implementation, valid for this file only. */ struct gl_list_node_impl { struct gl_hash_entry h; /* hash table entry fields; must be first */ struct gl_list_node_impl *next; struct gl_list_node_impl *prev; const void *value; }; typedef struct gl_list_node_impl * gl_list_node_t; /* Concrete gl_set_impl type, valid for this file only. */ struct gl_set_impl { struct gl_set_impl_base base; gl_setelement_hashcode_fn hashcode_fn; /* A hash table: managed as an array of collision lists. */ struct gl_hash_entry **table; size_t table_size; /* A circular list anchored at root. The first node is = root.next, the last node is = root.prev. The root's value is unused. */ struct gl_list_node_impl root; /* Number of list nodes, excluding the root. */ size_t count; }; #define CONTAINER_T gl_set_t #define CONTAINER_COUNT(set) (set)->count #include "gl_anyhash2.h" /* If the symbol SIGNAL_SAFE_SET is defined, the code is compiled in such a way that a gl_set_t data structure may be used from within a signal handler. The operations allowed in the signal handler are: gl_set_iterator, gl_set_iterator_next, gl_set_iterator_free. The set and node fields that are therefore accessed from the signal handler are: set->root, node->next, node->value. We are careful to make modifications to these fields only in an order that maintains the consistency of the list data structure at any moment, and we use 'volatile' assignments to prevent the compiler from reordering such assignments. */ #ifdef SIGNAL_SAFE_SET # define ASYNCSAFE(type) *(type volatile *)& #else # define ASYNCSAFE(type) #endif /* --------------------------- gl_set_t Data Type --------------------------- */ static gl_set_t gl_linkedhash_nx_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) { struct gl_set_impl *set = (struct gl_set_impl *) malloc (sizeof (struct gl_set_impl)); if (set == NULL) return NULL; set->base.vtable = implementation; set->base.equals_fn = equals_fn; set->base.dispose_fn = dispose_fn; set->hashcode_fn = hashcode_fn; set->table_size = 11; set->table = (gl_hash_entry_t *) calloc (set->table_size, sizeof (gl_hash_entry_t)); if (set->table == NULL) goto fail; set->root.next = &set->root; set->root.prev = &set->root; set->count = 0; return set; fail: free (set); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_linkedhash_size (gl_set_t set) { return set->count; } static bool _GL_ATTRIBUTE_PURE gl_linkedhash_search (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for a match in the hash bucket. */ gl_list_node_t node; for (node = (gl_list_node_t) set->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return true; return false; } static int gl_linkedhash_nx_add (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for a match in the hash bucket. */ { gl_list_node_t node; for (node = (gl_list_node_t) set->table[bucket]; node != NULL; node = (gl_list_node_t) node->h.hash_next) if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) return 0; } /* Allocate a new node. */ gl_list_node_t node = (struct gl_list_node_impl *) malloc (sizeof (struct gl_list_node_impl)); if (node == NULL) return -1; ASYNCSAFE(const void *) node->value = elt; node->h.hashcode = hashcode; /* Add node to the hash table. */ node->h.hash_next = set->table[bucket]; set->table[bucket] = &node->h; /* Add node to the set. */ ASYNCSAFE(gl_list_node_t) node->next = &set->root; node->prev = set->root.prev; ASYNCSAFE(gl_list_node_t) node->prev->next = node; set->root.prev = node; set->count++; hash_resize_after_add (set); return 1; } static bool gl_linkedhash_remove (gl_set_t set, const void *elt) { size_t hashcode = (set->hashcode_fn != NULL ? set->hashcode_fn (elt) : (size_t)(uintptr_t) elt); size_t bucket = hashcode % set->table_size; gl_setelement_equals_fn equals = set->base.equals_fn; /* Look for the first match in the hash bucket. */ gl_list_node_t *nodep; for (nodep = (gl_list_node_t *) &set->table[bucket]; *nodep != NULL; nodep = (gl_list_node_t *) &(*nodep)->h.hash_next) { gl_list_node_t node = *nodep; if (node->h.hashcode == hashcode && (equals != NULL ? equals (elt, node->value) : elt == node->value)) { /* Remove node from the hash table. */ *nodep = (gl_list_node_t) node->h.hash_next; /* Remove node from the list. */ { gl_list_node_t prev = node->prev; gl_list_node_t next = node->next; ASYNCSAFE(gl_list_node_t) prev->next = next; next->prev = prev; } set->count--; if (set->base.dispose_fn != NULL) set->base.dispose_fn (node->value); free (node); return true; } } return false; } static void gl_linkedhash_free (gl_set_t set) { gl_setelement_dispose_fn dispose = set->base.dispose_fn; gl_list_node_t node; for (node = set->root.next; node != &set->root; ) { gl_list_node_t next = node->next; if (dispose != NULL) dispose (node->value); free (node); node = next; } free (set->table); free (set); } /* ---------------------- gl_set_iterator_t Data Type ---------------------- */ /* Iterate through the list, not through the hash buckets, so that the order in which the elements are returned is predictable. */ static gl_set_iterator_t gl_linkedhash_iterator (gl_set_t set) { gl_set_iterator_t result; result.vtable = set->base.vtable; result.set = set; result.p = set->root.next; result.q = &set->root; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static bool gl_linkedhash_iterator_next (gl_set_iterator_t *iterator, const void **eltp) { if (iterator->p != iterator->q) { gl_list_node_t node = (gl_list_node_t) iterator->p; *eltp = node->value; iterator->p = node->next; return true; } else return false; } static void gl_linkedhash_iterator_free (gl_set_iterator_t *iterator) { } const struct gl_set_implementation gl_linkedhash_set_implementation = { gl_linkedhash_nx_create_empty, gl_linkedhash_size, gl_linkedhash_search, gl_linkedhash_nx_add, gl_linkedhash_remove, gl_linkedhash_free, gl_linkedhash_iterator, gl_linkedhash_iterator_next, gl_linkedhash_iterator_free }; ��������������������������������������������������������������gnulib-20210822~d383792/lib/gl_linkedhash_set.h�����������������������������������������������������0000664�0000000�0000000�00000002176�14110572173�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set data type implemented by a hash table with a linked list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_LINKEDHASH_SET_H #define _GL_LINKEDHASH_SET_H #include "gl_set.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_set_implementation gl_linkedhash_set_implementation; #define GL_LINKEDHASH_SET &gl_linkedhash_set_implementation #ifdef __cplusplus } #endif #endif /* _GL_LINKEDHASH_SET_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_list.c���������������������������������������������������������������0000664�0000000�0000000�00000001517�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. Copyright (C) 2006-2021 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/>. */ #include <config.h> #define GL_LIST_INLINE _GL_EXTERN_INLINE #include "gl_list.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_list.h���������������������������������������������������������������0000664�0000000�0000000�00000114531�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. -*- coding: utf-8 -*- Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_LIST_H #define _GL_LIST_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_LIST_INLINE # define GL_LIST_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_list is an abstract list data type. It can contain any number of objects ('void *' or 'const void *' pointers) in any given order. Duplicates are allowed, but can optionally be forbidden. There are several implementations of this list datatype, optimized for different operations or for memory. You can start using the simplest list implementation, GL_ARRAY_LIST, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_list_create call. The implementations are: GL_ARRAY_LIST a growable array GL_CARRAY_LIST a growable circular array GL_LINKED_LIST a linked list GL_AVLTREE_LIST a binary tree (AVL tree) GL_RBTREE_LIST a binary tree (red-black tree) GL_LINKEDHASH_LIST a hash table with a linked list GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree) GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree) The memory consumption is asymptotically the same: O(1) for every object in the list. When looking more closely at the average memory consumed for an object, GL_ARRAY_LIST is the most compact representation, and GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory. The guaranteed average performance of the operations is, for a list of n elements: Operation ARRAY LINKED TREE LINKEDHASH TREEHASH CARRAY with|without with|without duplicates duplicates gl_list_size O(1) O(1) O(1) O(1) O(1) gl_list_node_value O(1) O(1) O(1) O(1) O(1) gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1) gl_list_next_node O(1) O(1) O(log n) O(1) O(log n) gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n) gl_list_first_node O(1) O(1) O(log n) O(1) O(log n) gl_list_last_node O(1) O(1) O(log n) O(1) O(log n) gl_list_get_at O(1) O(n) O(log n) O(n) O(log n) gl_list_get_first O(1) O(1) O(log n) O(1) O(log n) gl_list_get_last O(1) O(1) O(log n) O(1) O(log n) gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_set_first O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_set_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1) gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_indexof O(n) O(n) O(n) O(n) O(log n) gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n) gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n) gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_remove_first O(n)/O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_iterator O(1) O(1) O(log n) O(1) O(log n) gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n) gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n) gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Type of function used to compare two elements. NULL denotes pointer comparison. */ typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2); /* Type of function used to compute a hash code. NULL denotes a function that depends only on the pointer itself. */ typedef size_t (*gl_listelement_hashcode_fn) (const void *elt); /* Type of function used to dispose an element once it's removed from a list. NULL denotes a no-op. */ typedef void (*gl_listelement_dispose_fn) (const void *elt); struct gl_list_impl; /* Type representing an entire list. */ typedef struct gl_list_impl * gl_list_t; struct gl_list_node_impl; /* Type representing the position of an element in the list, in a way that is more adapted to the list implementation than a plain index. Note: It is invalidated by insertions and removals! */ typedef struct gl_list_node_impl * gl_list_node_t; struct gl_list_implementation; /* Type representing a list datatype implementation. */ typedef const struct gl_list_implementation * gl_list_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty list. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. */ /* declared in gl_xlist.h */ extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; /* Creates a list with given contents. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. COUNT is the number of initial elements. CONTENTS[0..COUNT-1] is the initial contents. */ /* declared in gl_xlist.h */ extern gl_list_t gl_list_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; /* Returns the current number of elements in a list. */ extern size_t gl_list_size (gl_list_t list); /* Returns the element value represented by a list node. */ extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); /* Replaces the element value represented by a list node. */ /* declared in gl_xlist.h */ extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns 0 upon success, -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt); /* Returns the node immediately after the given node in the list, or NULL if the given node is the last (rightmost) one in the list. */ extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node); /* Returns the node immediately before the given node in the list, or NULL if the given node is the first (leftmost) one in the list. */ extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node); /* Returns the first node in the list, or NULL if the list is empty. This function is useful for iterating through the list like this: gl_list_node_t node; for (node = gl_list_first_node (list); node != NULL; node = gl_list_next_node (node)) ... */ extern gl_list_node_t gl_list_first_node (gl_list_t list); /* Returns the last node in the list, or NULL if the list is empty. This function is useful for iterating through the list in backward order, like this: gl_list_node_t node; for (node = gl_list_last_node (list); node != NULL; node = gl_list_previous_node (node)) ... */ extern gl_list_node_t gl_list_last_node (gl_list_t list); /* Returns the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). */ extern const void * gl_list_get_at (gl_list_t list, size_t position); /* Returns the element at the first position in the list. The list must be non-empty. */ extern const void * gl_list_get_first (gl_list_t list); /* Returns the element at the last position in the list. The list must be non-empty. */ extern const void * gl_list_get_last (gl_list_t list); /* Replaces the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt); /* Replaces the element at the first position in the list. Returns its node. The list must be non-empty. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_first (gl_list_t list, const void *elt); /* Replaces the element at the last position in the list. Returns its node. The list must be non-empty. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_last (gl_list_t list, const void *elt); /* Searches whether an element is already in the list. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt); /* Searches whether an element is already in the list. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof (gl_list_t list, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt); /* Adds an element as the first element of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt); /* Adds an element as the last element of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt); /* Adds an element before a given element node of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt); /* Adds an element after a given element node of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt); /* Adds an element at a given position in the list. POSITION must be >= 0 and <= gl_list_size (list). */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt); /* Removes an element from the list. Returns true. */ extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); /* Removes an element at a given position from the list. POSITION must be >= 0 and < gl_list_size (list). Returns true. */ extern bool gl_list_remove_at (gl_list_t list, size_t position); /* Removes the element at the first position from the list. Returns true if it was found and removed, or false if the list was empty. */ extern bool gl_list_remove_first (gl_list_t list); /* Removes the element at the last position from the list. Returns true if it was found and removed, or false if the list was empty. */ extern bool gl_list_remove_last (gl_list_t list); /* Searches and removes an element from the list. Returns true if it was found and removed. */ extern bool gl_list_remove (gl_list_t list, const void *elt); /* Frees an entire list. (But this call does not free the elements of the list. It only invokes the DISPOSE_FN on each of the elements of the list, and only if the list is not a sublist.) */ extern void gl_list_free (gl_list_t list); #endif /* End of inline and gl_xlist.h-defined functions. */ /* --------------------- gl_list_iterator_t Data Type --------------------- */ /* Functions for iterating through a list. */ /* Type of an iterator that traverses a list. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_list_iterator_next. */ const struct gl_list_implementation *vtable; /* For detecting whether the last returned element was removed. */ gl_list_t list; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_list_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing a list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ extern gl_list_iterator_t gl_list_iterator (gl_list_t list); /* Creates an iterator traversing the element with indices i, start_index <= i < end_index, of a list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index); /* If there is a next element, stores the next element in *ELTP, stores its node in *NODEP if NODEP is non-NULL, advances the iterator and returns true. Otherwise, returns false. */ extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep); /* Frees an iterator. */ extern void gl_list_iterator_free (gl_list_iterator_t *iterator); #endif /* End of inline functions. */ /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ /* The following functions are for lists without duplicates where the order is given by a sort criterion. */ /* Type of function used to compare two elements. Same as for qsort(). NULL denotes pointer comparison. */ typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2); #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ extern gl_list_node_t gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ extern size_t gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ extern size_t gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); /* Adds an element at the appropriate position in the list. The list is assumed to be sorted with COMPAR. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches and removes an element from the list. The list is assumed to be sorted with COMPAR. Returns true if it was found and removed. If the list contains several copies of ELT, only the leftmost one is removed. */ extern bool gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); #endif /* End of inline and gl_xlist.h-defined functions. */ /* ------------------------ Implementation Details ------------------------ */ struct gl_list_implementation { /* gl_list_t functions. */ gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates); gl_list_t (*nx_create) (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents); size_t (*size) (gl_list_t list); const void * (*node_value) (gl_list_t list, gl_list_node_t node); int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node); gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node); gl_list_node_t (*first_node) (gl_list_t list); gl_list_node_t (*last_node) (gl_list_t list); const void * (*get_at) (gl_list_t list, size_t position); gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position, const void *elt); gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index, size_t end_index, const void *elt); size_t (*indexof_from_to) (gl_list_t list, size_t start_index, size_t end_index, const void *elt); gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt); gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt); gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position, const void *elt); bool (*remove_node) (gl_list_t list, gl_list_node_t node); bool (*remove_at) (gl_list_t list, size_t position); bool (*remove_elt) (gl_list_t list, const void *elt); void (*list_free) (gl_list_t list); /* gl_list_iterator_t functions. */ gl_list_iterator_t (*iterator) (gl_list_t list); gl_list_iterator_t (*iterator_from_to) (gl_list_t list, size_t start_index, size_t end_index); bool (*iterator_next) (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep); void (*iterator_free) (gl_list_iterator_t *iterator); /* Sorted gl_list_t functions. */ gl_list_node_t (*sortedlist_search) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); size_t (*sortedlist_indexof) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); size_t (*sortedlist_indexof_from_to) (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); gl_list_node_t (*sortedlist_nx_add) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); bool (*sortedlist_remove) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); }; struct gl_list_impl_base { const struct gl_list_implementation *vtable; gl_listelement_equals_fn equals_fn; gl_listelement_hashcode_fn hashcode_fn; gl_listelement_dispose_fn dispose_fn; bool allow_duplicates; }; /* Define all functions of this file as accesses to the struct gl_list_implementation. */ GL_LIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { return implementation->nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates); } GL_LIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { return implementation->nx_create (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates, count, contents); } GL_LIST_INLINE size_t gl_list_size (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->size (list); } GL_LIST_INLINE const void * gl_list_node_value (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->node_value (list, node); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->node_nx_set_value (list, node, elt); } GL_LIST_INLINE gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->next_node (list, node); } GL_LIST_INLINE gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->previous_node (list, node); } GL_LIST_INLINE gl_list_node_t gl_list_first_node (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->first_node (list); } GL_LIST_INLINE gl_list_node_t gl_list_last_node (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->last_node (list); } GL_LIST_INLINE const void * gl_list_get_at (gl_list_t list, size_t position) { return ((const struct gl_list_impl_base *) list)->vtable ->get_at (list, position); } GL_LIST_INLINE const void * gl_list_get_first (gl_list_t list) { return gl_list_get_at (list, 0); } GL_LIST_INLINE const void * gl_list_get_last (gl_list_t list) { return gl_list_get_at (list, gl_list_size (list) - 1); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_set_at (list, position, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_first (gl_list_t list, const void *elt) { return gl_list_nx_set_at (list, 0, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_last (gl_list_t list, const void *elt) { return gl_list_nx_set_at (list, gl_list_size (list) - 1, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search (gl_list_t list, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, 0, size, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, start_index, size, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, start_index, end_index, elt); } GL_LIST_INLINE size_t gl_list_indexof (gl_list_t list, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, 0, size, elt); } GL_LIST_INLINE size_t gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, start_index, size, elt); } GL_LIST_INLINE size_t gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, start_index, end_index, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_first (list, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_last (list, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_before (list, node, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_after (list, node, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_at (list, position, elt); } GL_LIST_INLINE bool gl_list_remove_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_node (list, node); } GL_LIST_INLINE bool gl_list_remove_at (gl_list_t list, size_t position) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_at (list, position); } GL_LIST_INLINE bool gl_list_remove_first (gl_list_t list) { size_t size = gl_list_size (list); if (size > 0) return gl_list_remove_at (list, 0); else return false; } GL_LIST_INLINE bool gl_list_remove_last (gl_list_t list) { size_t size = gl_list_size (list); if (size > 0) return gl_list_remove_at (list, size - 1); else return false; } GL_LIST_INLINE bool gl_list_remove (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_elt (list, elt); } GL_LIST_INLINE void gl_list_free (gl_list_t list) { ((const struct gl_list_impl_base *) list)->vtable->list_free (list); } GL_LIST_INLINE gl_list_iterator_t gl_list_iterator (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator (list); } GL_LIST_INLINE gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator_from_to (list, start_index, end_index); } GL_LIST_INLINE bool gl_list_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { return iterator->vtable->iterator_next (iterator, eltp, nodep); } GL_LIST_INLINE void gl_list_iterator_free (gl_list_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } GL_LIST_INLINE gl_list_node_t gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_search (list, compar, elt); } GL_LIST_INLINE gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_search_from_to (list, compar, start_index, end_index, elt); } GL_LIST_INLINE size_t gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_indexof (list, compar, elt); } GL_LIST_INLINE size_t gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_indexof_from_to (list, compar, start_index, end_index, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_nx_add (list, compar, elt); } GL_LIST_INLINE bool gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_remove (list, compar, elt); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_LIST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_list.hh��������������������������������������������������������������0000664�0000000�0000000�00000042621�14110572173�0017030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type as a C++ class. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _GL_LIST_HH #define _GL_LIST_HH #include "gl_list.h" #include "gl_xlist.h" #include "gl_sublist.h" #include "gl_xsublist.h" #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ /* gl_List is a C++ wrapper around the gl_list data type. Its element type is 'ELTYPE *'. It is merely a pointer, not a smart pointer. In other words: it does NOT do reference-counting, and the destructor does nothing. */ template <class T> class gl_List; template <class ELTYPE> class gl_List<ELTYPE *> { public: // ------------------------------ Constructors ------------------------------ gl_List () : _ptr (NULL) {} /* Creates an empty list. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. */ gl_List (gl_list_implementation_t implementation, bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), size_t (*hashcode_fn) (ELTYPE *), void (*dispose_fn) (ELTYPE *), bool allow_duplicates) : _ptr (gl_list_create_empty (implementation, reinterpret_cast<gl_listelement_equals_fn>(equals_fn), reinterpret_cast<gl_listelement_hashcode_fn>(hashcode_fn), reinterpret_cast<gl_listelement_dispose_fn>(dispose_fn), allow_duplicates)) {} /* Creates a list with given contents. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. COUNT is the number of initial elements. CONTENTS[0..COUNT-1] is the initial contents. */ gl_List (gl_list_implementation_t implementation, bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), size_t (*hashcode_fn) (ELTYPE *), void (*dispose_fn) (ELTYPE *), bool allow_duplicates, size_t count, ELTYPE **contents) : _ptr (gl_list_create (implementation, reinterpret_cast<gl_listelement_equals_fn>(equals_fn), reinterpret_cast<gl_listelement_hashcode_fn>(hashcode_fn), reinterpret_cast<gl_listelement_dispose_fn>(dispose_fn), allow_duplicates, count, contents)) {} /* Creates a sublist of a given list. This is the list of elements with indices i, start_index <= i < end_index. The sublist is backed by the given list, which means: - Modifications to the sublist affect the whole list. - Modifications to the whole list are immediately visible in the sublist. - The sublist is only valid as long as the whole list is valid. - The sublist must not be passed to the gl_list_sortedlist_add() function. */ gl_List (const gl_List& whole_list, size_t start_index, size_t end_index) : _ptr (gl_sublist_create (whole_list._ptr, start_index, end_index)) {} /* Copy constructor. */ gl_List (const gl_List& x) { _ptr = x._ptr; } /* Assignment operator. */ gl_List& operator= (const gl_List& x) { _ptr = x._ptr; return *this; } // ------------------------------- Destructor ------------------------------- ~gl_List () { _ptr = NULL; } // ----------------------- Read-only member functions ----------------------- /* Returns the current number of elements in the list. */ size_t size () const { return gl_list_size (_ptr); } /* Returns the element value represented by a list node. */ ELTYPE * node_value (gl_list_node_t node) const { return static_cast<ELTYPE *>(gl_list_node_value (_ptr, node)); } /* Returns the node immediately after the given node in the list, or NULL if the given node is the last (rightmost) one in the list. */ gl_list_node_t next_node (gl_list_node_t node) const { return gl_list_next_node (_ptr, node); } /* Returns the node immediately before the given node in the list, or NULL if the given node is the first (leftmost) one in the list. */ gl_list_node_t previous_node (gl_list_node_t node) const { return gl_list_previous_node (_ptr, node); } /* Returns the first node in the list, or NULL if the list is empty. */ gl_list_node_t first_node () const { return gl_list_first_node (_ptr); } /* Returns the last node in the list, or NULL if the list is empty. */ gl_list_node_t last_node () const { return gl_list_last_node (_ptr); } /* Returns the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). */ ELTYPE * get_at (size_t position) const { return static_cast<ELTYPE *>(gl_list_get_at (_ptr, position)); } /* Returns the element at the first position in the list. The list must be non-empty. */ ELTYPE * get_first () const { return static_cast<ELTYPE *>(gl_list_get_first (_ptr)); } /* Returns the element at the last position in the list. The list must be non-empty. */ ELTYPE * get_last () const { return static_cast<ELTYPE *>(gl_list_get_last (_ptr)); } /* Searches whether an element is already in the list. Returns its node if found, or NULL if not present in the list. */ gl_list_node_t search (ELTYPE * elt) const { return gl_list_search (_ptr, elt); } /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its node if found, or NULL if not present in the list. */ gl_list_node_t search_from (size_t start_index, ELTYPE * elt) const { return gl_list_search_from (_ptr, start_index, elt); } /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its node if found, or NULL if not present in the list. */ gl_list_node_t search_from_to (size_t start_index, size_t end_index, ELTYPE * elt) const { return gl_list_search_from_to (_ptr, start_index, end_index, elt); } /* Searches whether an element is already in the list. Returns its position if found, or (size_t)(-1) if not present in the list. */ size_t indexof (ELTYPE * elt) const { return gl_list_indexof (_ptr, elt); } /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ size_t indexof_from (size_t start_index, ELTYPE * elt) const { return gl_list_indexof_from (_ptr, start_index, elt); } /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ size_t indexof_from_to (size_t start_index, size_t end_index, ELTYPE * elt) const { return gl_list_indexof_from_to (_ptr, start_index, end_index, elt); } // ----------------------- Modifying member functions ----------------------- /* Replaces the element value represented by a list node. */ void node_set_value (gl_list_node_t node, ELTYPE * elt) { gl_list_node_set_value (_ptr, node, elt); } /* Replaces the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). Returns its node. */ gl_list_node_t set_at (size_t position, ELTYPE * elt) { return gl_list_set_at (_ptr, position, elt); } /* Replaces the element at the first position in the list. Returns its node. The list must be non-empty. */ gl_list_node_t set_first (ELTYPE * elt) { return gl_list_set_first (_ptr, elt); } /* Replaces the element at the last position in the list. Returns its node. The list must be non-empty. */ gl_list_node_t set_last (ELTYPE * elt) { return gl_list_set_last (_ptr, elt); } /* Adds an element as the first element of the list. Returns its node. */ gl_list_node_t add_first (ELTYPE * elt) { return gl_list_add_first (_ptr, elt); } /* Adds an element as the last element of the list. Returns its node. */ gl_list_node_t add_last (ELTYPE * elt) { return gl_list_add_last (_ptr, elt); } /* Adds an element before a given element node of the list. Returns its node. */ gl_list_node_t add_before (gl_list_node_t node, ELTYPE * elt) { return gl_list_add_before (_ptr, node, elt); } /* Adds an element after a given element node of the list. Return its node. */ gl_list_node_t add_after (gl_list_node_t node, ELTYPE * elt) { return gl_list_add_after (_ptr, node, elt); } /* Adds an element at a given position in the list. POSITION must be >= 0 and <= gl_list_size (list). */ gl_list_node_t add_at (size_t position, ELTYPE * elt) { return gl_list_add_at (_ptr, position, elt); } /* Removes an element from the list. Returns true. */ bool remove_node (gl_list_node_t node) { return gl_list_remove_node (_ptr, node); } /* Removes an element at a given position from the list. POSITION must be >= 0 and < gl_list_size (list). Returns true. */ bool remove_at (size_t position) { return gl_list_remove_at (_ptr, position); } /* Removes the element at the first position from the list. Returns true if it was found and removed, or false if the list was empty. */ bool remove_first () { return gl_list_remove_first (_ptr); } /* Removes the element at the last position from the list. Returns true if it was found and removed, or false if the list was empty. */ bool remove_last () { return gl_list_remove_last (_ptr); } /* Searches and removes an element from the list. Returns true if it was found and removed. */ bool remove (ELTYPE * elt) { return gl_list_remove (_ptr, elt); } /* Frees the entire list. (But this call does not free the elements of the list. It only invokes the DISPOSE_FN on each of the elements of the list, and only if the list is not a sublist.) */ void free () { gl_list_free (_ptr); _ptr = NULL; } // -------------------- Member functions for sorted lists -------------------- /* The following functions are for lists without duplicates where the order is given by a sort criterion. */ /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ gl_list_node_t sortedlist_search (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), ELTYPE * elt) { return gl_sortedlist_search (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), elt); } /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ gl_list_node_t sortedlist_search_from_to (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), size_t start_index, size_t end_index, ELTYPE * elt) { return gl_sortedlist_search_from_to (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), start_index, end_index, elt); } /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ size_t sortedlist_indexof (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), ELTYPE * elt) { return gl_sortedlist_indexof (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), elt); } /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ size_t sortedlist_indexof_from_to (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), size_t start_index, size_t end_index, ELTYPE * elt) { return gl_sortedlist_indexof_from_to (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), start_index, end_index, elt); } /* Adds an element at the appropriate position in the list. The list is assumed to be sorted with COMPAR. Returns its node. */ gl_list_node_t sortedlist_add (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), ELTYPE * elt) { return gl_sortedlist_add (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), elt); } /* Searches and removes an element from the list. The list is assumed to be sorted with COMPAR. Returns true if it was found and removed. If the list contains several copies of ELT, only the leftmost one is removed. */ bool sortedlist_remove (int (*compar) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), ELTYPE * elt) { return gl_sortedlist_remove (_ptr, reinterpret_cast<gl_listelement_compar_fn>(compar), elt); } // ------------------------------ Private stuff ------------------------------ private: gl_list_t _ptr; public: // -------------------------------- Iterators -------------------------------- // Only a forward iterator. // Does not implement the STL operations (++, *, and != .end()), but a simpler // interface that needs only one virtual function call per iteration instead // of three. class iterator { public: /* If there is a next element, stores the next element in ELT, advances the iterator and returns true. Otherwise, returns false. */ bool next (ELTYPE *& elt) { const void *next_elt; bool has_next = gl_list_iterator_next (&_state, &next_elt, NULL); if (has_next) elt = static_cast<ELTYPE *>(next_elt); return has_next; } /* If there is a next element, stores the next element in ELT, stores its node in *NODEP if NODEP is non-NULL, advances the iterator and returns true. Otherwise, returns false. */ bool next (ELTYPE *& elt, gl_list_node_t *nodep) { const void *next_elt; bool has_next = gl_list_iterator_next (&_state, &next_elt, nodep); if (has_next) elt = static_cast<ELTYPE *>(next_elt); return has_next; } ~iterator () { gl_list_iterator_free (&_state); } #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC public: #else private: friend iterator gl_List::begin (); #endif iterator (gl_list_t ptr) : _state (gl_list_iterator (ptr)) {} iterator (gl_list_t ptr, size_t start_index, size_t end_index) : _state (gl_list_iterator_from_to (ptr, start_index, end_index)) {} private: gl_list_iterator_t _state; }; /* Creates an iterator traversing the list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ iterator begin () { return iterator (_ptr); } /* Creates an iterator traversing the element with indices i, start_index <= i < end_index, of a list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ iterator begin (size_t start_index, size_t end_index) { return iterator (_ptr, start_index, end_index); } }; #endif /* _GL_LIST_HH */ ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_map.c����������������������������������������������������������������0000664�0000000�0000000�00000001452�14110572173�0016452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract map data type. Copyright (C) 2018-2021 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 <config.h> #define GL_MAP_INLINE _GL_EXTERN_INLINE #include "gl_map.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_map.h����������������������������������������������������������������0000664�0000000�0000000�00000032607�14110572173�0016465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract map data type. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_MAP_H #define _GL_MAP_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_MAP_INLINE # define GL_MAP_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_map is an abstract map data type. It can contain any number of (key, value) pairs, where - keys and values are objects ('void *' or 'const void *' pointers), - There are no (key, value1) and (key, value2) pairs with the same key (in the sense of a given comparator function). There are several implementations of this map datatype, optimized for different operations or for memory. You can start using the simplest map implementation, GL_ARRAY_MAP, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_map_create call. The implementations are: GL_ARRAY_MAP a growable array GL_LINKEDHASH_MAP a hash table with a linked list GL_HASH_MAP a hash table The memory consumption is asymptotically the same: O(1) for every pair in the map. When looking more closely at the average memory consumed for an object, GL_ARRAY_MAP is the most compact representation, then comes GL_HASH_MAP, and GL_LINKEDHASH_MAP needs the most memory. The guaranteed average performance of the operations is, for a map of n pairs: Operation ARRAY LINKEDHASH HASH gl_map_size O(1) O(1) gl_map_get O(n) O(1) gl_map_put O(n) O(1) gl_map_remove O(n) O(1) gl_map_search O(n) O(1) gl_map_iterator O(1) O(1) gl_map_iterator_next O(1) O(1) */ /* --------------------------- gl_map_t Data Type --------------------------- */ /* Type of function used to compare two keys. NULL denotes pointer comparison. */ typedef bool (*gl_mapkey_equals_fn) (const void *key1, const void *key2); /* Type of function used to compute a hash code. NULL denotes a function that depends only on the pointer itself. */ typedef size_t (*gl_mapkey_hashcode_fn) (const void *key); #ifndef _GL_MAP_DISPOSE_FNS_DEFINED /* Type of function used to dispose a key once a (key, value) pair is removed from a map. NULL denotes a no-op. */ typedef void (*gl_mapkey_dispose_fn) (const void *key); /* Type of function used to dispose a value once a (key, value) pair is removed from a map. NULL denotes a no-op. */ typedef void (*gl_mapvalue_dispose_fn) (const void *value); # define _GL_MAP_DISPOSE_FNS_DEFINED 1 #endif struct gl_map_impl; /* Type representing an entire map. */ typedef struct gl_map_impl * gl_map_t; struct gl_map_implementation; /* Type representing a map datatype implementation. */ typedef const struct gl_map_implementation * gl_map_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty map. IMPLEMENTATION is one of GL_ARRAY_MAP, GL_LINKEDHASH_MAP, GL_HASH_MAP. EQUALS_FN is a key comparison function or NULL. HASHCODE_FN is a key hash code function or NULL. KDISPOSE_FN is a key disposal function or NULL. VDISPOSE_FN is a value disposal function or NULL. */ /* declared in gl_xmap.h */ extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_map_t gl_map_nx_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/; /* Returns the current number of pairs in a map. */ extern size_t gl_map_size (gl_map_t map); /* Searches whether a pair with the given key is already in the map. Returns the value if found, or NULL if not present in the map. */ extern const void * gl_map_get (gl_map_t map, const void *key); /* Searches whether a pair with the given key is already in the map. Returns true and sets *VALUEP to the value if found. Returns false if not present in the map. */ extern bool gl_map_search (gl_map_t map, const void *key, const void **valuep); /* Adds a pair to a map. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false if a pair with the given key was already in the map and only its value was replaced. */ /* declared in gl_xmap.h */ extern bool gl_map_put (gl_map_t map, const void *key, const void *value); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_map_nx_put (gl_map_t map, const void *key, const void *value); /* Adds a pair to a map and retrieves the previous value. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false and sets *OLDVALUEP to the previous value, if a pair with the given key was already in the map and only its value was replaced. */ /* declared in gl_xmap.h */ extern bool gl_map_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_map_nx_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep); /* Removes a pair from a map. Returns true if the key was found and its pair removed. Returns false otherwise. */ extern bool gl_map_remove (gl_map_t map, const void *key); /* Removes a pair from a map and retrieves the previous value. Returns true and sets *OLDVALUEP to the previous value, if the key was found and its pair removed. Returns false otherwise. */ extern bool gl_map_getremove (gl_map_t map, const void *key, const void **oldvaluep); /* Frees an entire map. (But this call does not free the keys and values of the pairs in the map. It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value of the pairs in the map.) */ extern void gl_map_free (gl_map_t map); #endif /* End of inline and gl_xmap.h-defined functions. */ /* ---------------------- gl_map_iterator_t Data Type ---------------------- */ /* Functions for iterating through a map. Note: Iterating through a map of type GL_HASH_MAP returns the pairs in an unpredictable order. If you need a predictable order, use GL_LINKEDHASH_MAP instead of GL_HASH_MAP. */ /* Type of an iterator that traverses a map. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_map_iterator_next. */ const struct gl_map_implementation *vtable; /* For detecting whether the last returned pair was removed. */ gl_map_t map; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_map_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing a map. The map's contents must not be modified while the iterator is in use, except for modifying the value of the last returned key or removing the last returned pair. */ extern gl_map_iterator_t gl_map_iterator (gl_map_t map); /* If there is a next pair, stores the next pair in *KEYP and *VALUEP, advances the iterator, and returns true. Otherwise, returns false. */ extern bool gl_map_iterator_next (gl_map_iterator_t *iterator, const void **keyp, const void **valuep); /* Frees an iterator. */ extern void gl_map_iterator_free (gl_map_iterator_t *iterator); #endif /* End of inline functions. */ /* ------------------------- Implementation Details ------------------------- */ struct gl_map_implementation { /* gl_map_t functions. */ gl_map_t (*nx_create_empty) (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn); size_t (*size) (gl_map_t map); bool (*search) (gl_map_t map, const void *key, const void **valuep); int (*nx_getput) (gl_map_t map, const void *key, const void *value, const void **oldvaluep); bool (*getremove) (gl_map_t map, const void *key, const void **oldvaluep); void (*map_free) (gl_map_t map); /* gl_map_iterator_t functions. */ gl_map_iterator_t (*iterator) (gl_map_t map); bool (*iterator_next) (gl_map_iterator_t *iterator, const void **keyp, const void **valuep); void (*iterator_free) (gl_map_iterator_t *iterator); }; struct gl_map_impl_base { const struct gl_map_implementation *vtable; gl_mapkey_equals_fn equals_fn; gl_mapkey_dispose_fn kdispose_fn; gl_mapvalue_dispose_fn vdispose_fn; }; /* Define most functions of this file as accesses to the struct gl_map_implementation. */ GL_MAP_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ gl_map_t gl_map_nx_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { return implementation->nx_create_empty (implementation, equals_fn, hashcode_fn, kdispose_fn, vdispose_fn); } GL_MAP_INLINE size_t gl_map_size (gl_map_t map) { return ((const struct gl_map_impl_base *) map)->vtable->size (map); } GL_MAP_INLINE bool gl_map_search (gl_map_t map, const void *key, const void **valuep) { return ((const struct gl_map_impl_base *) map)->vtable ->search (map, key, valuep); } _GL_ATTRIBUTE_NODISCARD GL_MAP_INLINE int gl_map_nx_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep) { return ((const struct gl_map_impl_base *) map)->vtable ->nx_getput (map, key, value, oldvaluep); } GL_MAP_INLINE bool gl_map_getremove (gl_map_t map, const void *key, const void **oldvaluep) { return ((const struct gl_map_impl_base *) map)->vtable ->getremove (map, key, oldvaluep); } GL_MAP_INLINE void gl_map_free (gl_map_t map) { ((const struct gl_map_impl_base *) map)->vtable->map_free (map); } GL_MAP_INLINE gl_map_iterator_t gl_map_iterator (gl_map_t map) { return ((const struct gl_map_impl_base *) map)->vtable->iterator (map); } GL_MAP_INLINE bool gl_map_iterator_next (gl_map_iterator_t *iterator, const void **keyp, const void **valuep) { return iterator->vtable->iterator_next (iterator, keyp, valuep); } GL_MAP_INLINE void gl_map_iterator_free (gl_map_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } /* Define the convenience functions, that is, the functions that are independent of the implementation. */ GL_MAP_INLINE const void * gl_map_get (gl_map_t map, const void *key) { const void *value = NULL; gl_map_search (map, key, &value); return value; } _GL_ATTRIBUTE_NODISCARD GL_MAP_INLINE int gl_map_nx_put (gl_map_t map, const void *key, const void *value) { const void *oldvalue; int result = gl_map_nx_getput (map, key, value, &oldvalue); if (result == 0) { gl_mapvalue_dispose_fn vdispose_fn = ((const struct gl_map_impl_base *) map)->vdispose_fn; if (vdispose_fn != NULL) vdispose_fn (oldvalue); } return result; } GL_MAP_INLINE bool gl_map_remove (gl_map_t map, const void *key) { const void *oldvalue; bool result = gl_map_getremove (map, key, &oldvalue); if (result) { gl_mapvalue_dispose_fn vdispose_fn = ((const struct gl_map_impl_base *) map)->vdispose_fn; if (vdispose_fn != NULL) vdispose_fn (oldvalue); } return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_MAP_H */ �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_map.hh���������������������������������������������������������������0000664�0000000�0000000�00000015167�14110572173�0016637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract map data type as a C++ class. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_MAP_HH #define _GL_MAP_HH #include "gl_map.h" #include "gl_xmap.h" #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ /* gl_Map is a C++ wrapper around the gl_map data type. Its key type is 'KEYTYPE *'. Its value type is 'VALUETYPE *'. It is merely a pointer, not a smart pointer. In other words: it does NOT do reference-counting, and the destructor does nothing. */ template <class K, class V> class gl_Map; template <class KEYTYPE, class VALUETYPE> class gl_Map<KEYTYPE *, VALUETYPE *> { public: // ------------------------------ Constructors ------------------------------ gl_Map () : _ptr (NULL) {} /* Creates an empty map. IMPLEMENTATION is one of GL_ARRAY_MAP, GL_LINKEDHASH_MAP, GL_HASH_MAP. EQUALS_FN is a key comparison function or NULL. HASHCODE_FN is a key hash code function or NULL. KDISPOSE_FN is a key disposal function or NULL. VDISPOSE_FN is a value disposal function or NULL. */ gl_Map (gl_map_implementation_t implementation, bool (*equals_fn) (KEYTYPE * /*key1*/, KEYTYPE * /*key2*/), size_t (*hashcode_fn) (KEYTYPE *), void (*kdispose_fn) (KEYTYPE *), void (*vdispose_fn) (VALUETYPE *)) : _ptr (gl_map_create_empty (implementation, reinterpret_cast<gl_mapkey_equals_fn>(equals_fn), reinterpret_cast<gl_mapkey_hashcode_fn>(hashcode_fn), reinterpret_cast<gl_mapkey_dispose_fn>(kdispose_fn), reinterpret_cast<gl_mapvalue_dispose_fn>(vdispose_fn))) {} /* Copy constructor. */ gl_Map (const gl_Map& x) { _ptr = x._ptr; } /* Assignment operator. */ gl_Map& operator= (const gl_Map& x) { _ptr = x._ptr; return *this; } // ------------------------------- Destructor ------------------------------- ~gl_Map () { _ptr = NULL; } // ----------------------- Read-only member functions ----------------------- /* Returns the current number of pairs in the map. */ size_t size () const { return gl_map_size (_ptr); } /* Searches whether a pair with the given key is already in the map. Returns the value if found, or NULL if not present in the map. */ VALUETYPE * get (KEYTYPE * key) const { return static_cast<VALUETYPE *>(gl_map_get (_ptr, key)); } /* Searches whether a pair with the given key is already in the map. Returns true and sets VALUE to the value if found. Returns false if not present in the map. */ bool search (KEYTYPE * key, VALUETYPE *& value) const { return gl_map_search (_ptr, key, &value); } // ----------------------- Modifying member functions ----------------------- /* Adds a pair to the map. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false if a pair with the given key was already in the map and only its value was replaced. */ bool put (KEYTYPE * key, VALUETYPE * value) { return gl_map_put (_ptr, key, value); } /* Adds a pair to the map and retrieves the previous value. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false and sets OLDVALUE to the previous value, if a pair with the given key was already in the map and only its value was replaced. */ bool getput (KEYTYPE * key, VALUETYPE * value, VALUETYPE *& oldvalue) { return gl_map_getput (_ptr, key, value, &oldvalue); } /* Removes a pair from the map. Returns true if the key was found and its pair removed. Returns false otherwise. */ bool remove (KEYTYPE * key) { return gl_map_remove (_ptr, key); } /* Removes a pair from the map and retrieves the previous value. Returns true and sets OLDVALUE to the previous value, if the key was found and its pair removed. Returns false otherwise. */ bool getremove (KEYTYPE * key, VALUETYPE *& oldvalue) { return gl_map_getremove (_ptr, key, &oldvalue); } /* Frees the entire map. (But this call does not free the keys and values of the pairs in the map. It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value of the pairs in the map.) */ void free () { gl_map_free (_ptr); _ptr = NULL; } // ------------------------------ Private stuff ------------------------------ private: gl_map_t _ptr; public: // -------------------------------- Iterators -------------------------------- // Only a forward iterator. // Does not implement the STL operations (++, *, and != .end()), but a simpler // interface that needs only one virtual function call per iteration instead // of three. class iterator { public: /* If there is a next pair, stores the next pair in KEY and VALUE, advance the iterator, and returns true. Otherwise, returns false. */ bool next (KEYTYPE *& key, VALUETYPE *& value) { const void *next_key; const void *next_value; bool has_next = gl_map_iterator_next (&_state, &next_key, &next_value); if (has_next) { key = static_cast<KEYTYPE *>(next_key); value = static_cast<VALUETYPE *>(next_value); } return has_next; } ~iterator () { gl_map_iterator_free (&_state); } #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC public: #else private: friend iterator gl_Map::begin (); #endif iterator (gl_map_t ptr) : _state (gl_map_iterator (ptr)) {} private: gl_map_iterator_t _state; }; /* Creates an iterator traversing the map. The map's contents must not be modified while the iterator is in use, except for modifying the value of the last returned key or removing the last returned pair. */ iterator begin () { return iterator (_ptr); } }; #endif /* _GL_MAP_HH */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_omap.c���������������������������������������������������������������0000664�0000000�0000000�00000001513�14110572173�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered map data type. Copyright (C) 2006-2021 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/>. */ #include <config.h> #define GL_OMAP_INLINE _GL_EXTERN_INLINE #include "gl_omap.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_omap.h���������������������������������������������������������������0000664�0000000�0000000�00000034716�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered map data type. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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 _GL_OMAP_H #define _GL_OMAP_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_OMAP_INLINE # define GL_OMAP_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_omap is an abstract ordered map data type. It can contain any number of (key, value) pairs, where - keys and values are objects ('void *' or 'const void *' pointers), - The (key, value) pairs are ordered by the key, in the order of a given comparator function. - There are no (key, value1) and (key, value2) pairs with the same key (in the sense of the comparator function). There are several implementations of this ordered map datatype, optimized for different operations or for memory. You can start using the simplest ordered map implementation, GL_ARRAY_OMAP, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_omap_create call. The implementations are: GL_ARRAY_OMAP a growable array GL_AVLTREE_OMAP a binary tree (AVL tree) GL_RBTREE_OMAP a binary tree (red-black tree) The memory consumption is asymptotically the same: O(1) for every pair in the map. When looking more closely at the average memory consumed for an pair, GL_ARRAY_OMAP is the most compact representation, and GL_AVLTREE_OMAP, GL_RBTREE_OMAP need more memory. The guaranteed average performance of the operations is, for a map of n pairs: Operation ARRAY TREE gl_omap_size O(1) O(1) gl_omap_get O(log n) O(log n) gl_omap_put O(n) O(log n) gl_omap_remove O(n) O(log n) gl_omap_search O(log n) O(log n) gl_omap_search_atleast O(log n) O(log n) gl_omap_iterator O(1) O(log n) gl_omap_iterator_next O(1) O(log n) */ /* -------------------------- gl_omap_t Data Type -------------------------- */ /* Type of function used to compare two keys. Same as for qsort(). NULL denotes pointer comparison. */ typedef int (*gl_mapkey_compar_fn) (const void *key1, const void *key2); #ifndef _GL_MAP_DISPOSE_FNS_DEFINED /* Type of function used to dispose a key once a (key, value) pair is removed from a map. NULL denotes a no-op. */ typedef void (*gl_mapkey_dispose_fn) (const void *key); /* Type of function used to dispose a value once a (key, value) pair is removed from a map. NULL denotes a no-op. */ typedef void (*gl_mapvalue_dispose_fn) (const void *value); # define _GL_MAP_DISPOSE_FNS_DEFINED 1 #endif /* Type of function used to compare a key with a threshold. Returns true if the key is greater or equal than the threshold. */ typedef bool (*gl_mapkey_threshold_fn) (const void *key, const void *threshold); struct gl_omap_impl; /* Type representing an entire ordered map. */ typedef struct gl_omap_impl * gl_omap_t; struct gl_omap_implementation; /* Type representing a ordered map datatype implementation. */ typedef const struct gl_omap_implementation * gl_omap_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty map. IMPLEMENTATION is one of GL_ARRAY_OMAP, GL_AVLTREE_OMAP, GL_RBTREE_OMAP. COMPAR_FN is a key comparison function or NULL. KDISPOSE_FN is a key disposal function or NULL. VDISPOSE_FN is a value disposal function or NULL. */ /* declared in gl_xomap.h */ extern gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_omap_t gl_omap_nx_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/; /* Returns the current number of pairs in an ordered map. */ extern size_t gl_omap_size (gl_omap_t map); /* Searches whether a pair with the given key is already in the ordered map. Returns the value if found, or NULL if not present in the map. */ extern const void * gl_omap_get (gl_omap_t map, const void *key); /* Searches whether a pair with the given key is already in the ordered map. Returns true and sets *VALUEP to the value if found. Returns false if not present in the map. */ extern bool gl_omap_search (gl_omap_t map, const void *key, const void **valuep); /* Searches the pair with the least key in the ordered map that compares greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. Returns true and stores the found pair in *KEYP and *VALUEP if found. Otherwise returns false. */ extern bool gl_omap_search_atleast (gl_omap_t map, gl_mapkey_threshold_fn threshold_fn, const void *threshold, const void **keyp, const void **valuep); /* Adds a pair to an ordered map. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false if a pair with the given key was already in the map and only its value was replaced. */ /* declared in gl_xomap.h */ extern bool gl_omap_put (gl_omap_t map, const void *key, const void *value); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_omap_nx_put (gl_omap_t map, const void *key, const void *value); /* Adds a pair to an ordered map and retrieves the previous value. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false and sets *OLDVALUEP to the previous value, if a pair with the given key was already in the map and only its value was replaced. */ /* declared in gl_xomap.h */ extern bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_omap_nx_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep); /* Removes a pair from an ordered map. Returns true if the key was found and its pair removed. Returns false otherwise. */ extern bool gl_omap_remove (gl_omap_t map, const void *key); /* Removes a pair from an ordered map and retrieves the previous value. Returns true and sets *OLDVALUEP to the previous value, if the key was found and its pair removed. Returns false otherwise. */ extern bool gl_omap_getremove (gl_omap_t map, const void *key, const void **oldvaluep); /* Frees an entire ordered map. (But this call does not free the keys and values of the pairs in the map. It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value of the pairs in the map.) */ extern void gl_omap_free (gl_omap_t map); #endif /* End of inline and gl_xomap.h-defined functions. */ /* ---------------------- gl_omap_iterator_t Data Type ---------------------- */ /* Functions for iterating through an ordered map. */ /* Type of an iterator that traverses an ordered map. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_omap_iterator_next. */ const struct gl_omap_implementation *vtable; /* For detecting whether the last returned pair was removed. */ gl_omap_t map; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_omap_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing an ordered map. The map's contents must not be modified while the iterator is in use, except for modifying the value of the last returned key or removing the last returned pair. */ extern gl_omap_iterator_t gl_omap_iterator (gl_omap_t map); /* If there is a next pair, stores the next pair in *KEYP and *VALUEP, advances the iterator, and returns true. Otherwise, returns false. */ extern bool gl_omap_iterator_next (gl_omap_iterator_t *iterator, const void **keyp, const void **valuep); /* Frees an iterator. */ extern void gl_omap_iterator_free (gl_omap_iterator_t *iterator); #endif /* End of inline functions. */ /* ------------------------- Implementation Details ------------------------- */ struct gl_omap_implementation { /* gl_omap_t functions. */ gl_omap_t (*nx_create_empty) (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn); size_t (*size) (gl_omap_t map); bool (*search) (gl_omap_t map, const void *key, const void **valuep); bool (*search_atleast) (gl_omap_t map, gl_mapkey_threshold_fn threshold_fn, const void *threshold, const void **keyp, const void **valuep); int (*nx_getput) (gl_omap_t map, const void *key, const void *value, const void **oldvaluep); bool (*getremove) (gl_omap_t map, const void *key, const void **oldvaluep); void (*omap_free) (gl_omap_t map); /* gl_omap_iterator_t functions. */ gl_omap_iterator_t (*iterator) (gl_omap_t map); bool (*iterator_next) (gl_omap_iterator_t *iterator, const void **keyp, const void **valuep); void (*iterator_free) (gl_omap_iterator_t *iterator); }; struct gl_omap_impl_base { const struct gl_omap_implementation *vtable; gl_mapkey_compar_fn compar_fn; gl_mapkey_dispose_fn kdispose_fn; gl_mapvalue_dispose_fn vdispose_fn; }; /* Define most functions of this file as accesses to the struct gl_omap_implementation. */ GL_OMAP_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ gl_omap_t gl_omap_nx_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { return implementation->nx_create_empty (implementation, compar_fn, kdispose_fn, vdispose_fn); } GL_OMAP_INLINE size_t gl_omap_size (gl_omap_t map) { return ((const struct gl_omap_impl_base *) map)->vtable->size (map); } GL_OMAP_INLINE bool gl_omap_search (gl_omap_t map, const void *key, const void **valuep) { return ((const struct gl_omap_impl_base *) map)->vtable ->search (map, key, valuep); } GL_OMAP_INLINE bool gl_omap_search_atleast (gl_omap_t map, gl_mapkey_threshold_fn threshold_fn, const void *threshold, const void **keyp, const void **valuep) { return ((const struct gl_omap_impl_base *) map)->vtable ->search_atleast (map, threshold_fn, threshold, keyp, valuep); } _GL_ATTRIBUTE_NODISCARD GL_OMAP_INLINE int gl_omap_nx_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep) { return ((const struct gl_omap_impl_base *) map)->vtable ->nx_getput (map, key, value, oldvaluep); } GL_OMAP_INLINE bool gl_omap_getremove (gl_omap_t map, const void *key, const void **oldvaluep) { return ((const struct gl_omap_impl_base *) map)->vtable ->getremove (map, key, oldvaluep); } GL_OMAP_INLINE void gl_omap_free (gl_omap_t map) { ((const struct gl_omap_impl_base *) map)->vtable->omap_free (map); } GL_OMAP_INLINE gl_omap_iterator_t gl_omap_iterator (gl_omap_t map) { return ((const struct gl_omap_impl_base *) map)->vtable->iterator (map); } GL_OMAP_INLINE bool gl_omap_iterator_next (gl_omap_iterator_t *iterator, const void **keyp, const void **valuep) { return iterator->vtable->iterator_next (iterator, keyp, valuep); } GL_OMAP_INLINE void gl_omap_iterator_free (gl_omap_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } /* Define the convenience functions, that is, the functions that are independent of the implementation. */ GL_OMAP_INLINE const void * gl_omap_get (gl_omap_t map, const void *key) { const void *value = NULL; gl_omap_search (map, key, &value); return value; } _GL_ATTRIBUTE_NODISCARD GL_OMAP_INLINE int gl_omap_nx_put (gl_omap_t map, const void *key, const void *value) { const void *oldvalue; int result = gl_omap_nx_getput (map, key, value, &oldvalue); if (result == 0) { gl_mapvalue_dispose_fn vdispose_fn = ((const struct gl_omap_impl_base *) map)->vdispose_fn; if (vdispose_fn != NULL) vdispose_fn (oldvalue); } return result; } GL_OMAP_INLINE bool gl_omap_remove (gl_omap_t map, const void *key) { const void *oldvalue; bool result = gl_omap_getremove (map, key, &oldvalue); if (result) { gl_mapvalue_dispose_fn vdispose_fn = ((const struct gl_omap_impl_base *) map)->vdispose_fn; if (vdispose_fn != NULL) vdispose_fn (oldvalue); } return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_OMAP_H */ ��������������������������������������������������gnulib-20210822~d383792/lib/gl_omap.hh��������������������������������������������������������������0000664�0000000�0000000�00000016271�14110572173�0017013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered map data type as a C++ class. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_OMAP_HH #define _GL_OMAP_HH #include "gl_omap.h" #include "gl_xomap.h" #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ /* gl_OMap is a C++ wrapper around the gl_omap data type. Its key type is 'KEYTYPE *'. Its value type is 'VALUETYPE *'. It is merely a pointer, not a smart pointer. In other words: it does NOT do reference-counting, and the destructor does nothing. */ template <class K, class V> class gl_OMap; template <class KEYTYPE, class VALUETYPE> class gl_OMap<KEYTYPE *, VALUETYPE *> { public: // ------------------------------ Constructors ------------------------------ gl_OMap () : _ptr (NULL) {} /* Creates an empty map. IMPLEMENTATION is one of GL_ARRAY_OMAP, GL_AVLTREE_OMAP, GL_RBTREE_OMAP. COMPAR_FN is a key comparison function or NULL. KDISPOSE_FN is a key disposal function or NULL. VDISPOSE_FN is a value disposal function or NULL. */ gl_OMap (gl_omap_implementation_t implementation, int (*compar_fn) (KEYTYPE * /*key1*/, KEYTYPE * /*key2*/), void (*kdispose_fn) (KEYTYPE *), void (*vdispose_fn) (VALUETYPE *)) : _ptr (gl_omap_create_empty (implementation, reinterpret_cast<gl_mapkey_compar_fn>(compar_fn), reinterpret_cast<gl_mapkey_dispose_fn>(kdispose_fn), reinterpret_cast<gl_mapvalue_dispose_fn>(vdispose_fn))) {} /* Copy constructor. */ gl_OMap (const gl_OMap& x) { _ptr = x._ptr; } /* Assignment operator. */ gl_OMap& operator= (const gl_OMap& x) { _ptr = x._ptr; return *this; } // ------------------------------- Destructor ------------------------------- ~gl_OMap () { _ptr = NULL; } // ----------------------- Read-only member functions ----------------------- /* Returns the current number of pairs in the ordered map. */ size_t size () const { return gl_omap_size (_ptr); } /* Searches whether a pair with the given key is already in the ordered map. Returns the value if found, or NULL if not present in the map. */ VALUETYPE * get (KEYTYPE * key) const { return static_cast<VALUETYPE *>(gl_omap_get (_ptr, key)); } /* Searches whether a pair with the given key is already in the ordered map. Returns true and sets VALUE to the value if found. Returns false if not present in the map. */ bool search (KEYTYPE * key, VALUETYPE *& value) const { return gl_omap_search (_ptr, key, &value); } /* Searches the pair with the least key in the ordered map that compares greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. Returns true and stores the found pair in KEY and VALUE if found. Otherwise returns false. */ template <typename THT> bool search_atleast (bool (*threshold_fn) (KEYTYPE * /*key*/, THT * /*threshold*/), THT * threshold, KEYTYPE *& key, VALUETYPE *& value) const { return gl_omap_search_atleast (_ptr, reinterpret_cast<gl_mapkey_threshold_fn>(threshold_fn), threshold, &key, &value); } // ----------------------- Modifying member functions ----------------------- /* Adds a pair to the ordered map. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false if a pair with the given key was already in the map and only its value was replaced. */ bool put (KEYTYPE * key, VALUETYPE * value) { return gl_omap_put (_ptr, key, value); } /* Adds a pair to the ordered map and retrieves the previous value. Returns true if a pair with the given key was not already in the map and so this pair was added. Returns false and sets OLDVALUE to the previous value, if a pair with the given key was already in the map and only its value was replaced. */ bool getput (KEYTYPE * key, VALUETYPE * value, VALUETYPE *& oldvalue) { return gl_omap_getput (_ptr, key, value, &oldvalue); } /* Removes a pair from the ordered map. Returns true if the key was found and its pair removed. Returns false otherwise. */ bool remove (KEYTYPE * key) { return gl_omap_remove (_ptr, key); } /* Removes a pair from the ordered map and retrieves the previous value. Returns true and sets OLDVALUE to the previous value, if the key was found and its pair removed. Returns false otherwise. */ bool getremove (KEYTYPE * key, VALUETYPE *& oldvalue) { return gl_omap_getremove (_ptr, key, &oldvalue); } /* Frees the entire ordered map. (But this call does not free the keys and values of the pairs in the map. It only invokes the KDISPOSE_FN on each key and the VDISPOSE_FN on each value of the pairs in the map.) */ void free () { gl_omap_free (_ptr); _ptr = NULL; } // ------------------------------ Private stuff ------------------------------ private: gl_omap_t _ptr; public: // -------------------------------- Iterators -------------------------------- // Only a forward iterator. // Does not implement the STL operations (++, *, and != .end()), but a simpler // interface that needs only one virtual function call per iteration instead // of three. class iterator { public: /* If there is a next pair, stores the next pair in KEY and VALUE, advances the iterator, and returns true. Otherwise, returns false. */ bool next (KEYTYPE *& key, VALUETYPE *& value) { const void *next_key; const void *next_value; bool has_next = gl_omap_iterator_next (&_state, &next_key, &next_value); if (has_next) { key = static_cast<KEYTYPE *>(next_key); value = static_cast<VALUETYPE *>(next_value); } return has_next; } ~iterator () { gl_omap_iterator_free (&_state); } #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC public: #else private: friend iterator gl_OMap::begin (); #endif iterator (gl_omap_t ptr) : _state (gl_omap_iterator (ptr)) {} private: gl_omap_iterator_t _state; }; /* Creates an iterator traversing the ordered map. The map's contents must not be modified while the iterator is in use, except for modifying the value of the last returned key or removing the last returned pair. */ iterator begin () { return iterator (_ptr); } }; #endif /* _GL_OMAP_HH */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_openssl.h������������������������������������������������������������0000664�0000000�0000000�00000007405�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrap openssl crypto hash routines in gnulib interface. -*- coding: utf-8 -*- Copyright (C) 2013-2021 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 Pádraig Brady */ #ifndef GL_OPENSSL_NAME # error "Please define GL_OPENSSL_NAME to 1,5,256 etc." #endif #ifndef _GL_INLINE_HEADER_BEGIN # error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_OPENSSL_INLINE # define GL_OPENSSL_INLINE _GL_INLINE #endif /* Concatenate two preprocessor tokens. */ #define _GLCRYPTO_CONCAT_(prefix, suffix) prefix##suffix #define _GLCRYPTO_CONCAT(prefix, suffix) _GLCRYPTO_CONCAT_ (prefix, suffix) #if GL_OPENSSL_NAME == 5 # define OPENSSL_ALG md5 #else # define OPENSSL_ALG _GLCRYPTO_CONCAT (sha, GL_OPENSSL_NAME) #endif /* Context type mappings. */ #if BASE_OPENSSL_TYPE != GL_OPENSSL_NAME # undef BASE_OPENSSL_TYPE # if GL_OPENSSL_NAME == 224 # define BASE_OPENSSL_TYPE 256 # elif GL_OPENSSL_NAME == 384 # define BASE_OPENSSL_TYPE 512 # endif # define md5_CTX MD5_CTX # define sha1_CTX SHA_CTX # define sha224_CTX SHA256_CTX # define sha224_ctx sha256_ctx # define sha256_CTX SHA256_CTX # define sha384_CTX SHA512_CTX # define sha384_ctx sha512_ctx # define sha512_CTX SHA512_CTX # undef _gl_CTX # undef _gl_ctx # define _gl_CTX _GLCRYPTO_CONCAT (OPENSSL_ALG, _CTX) /* openssl type. */ # define _gl_ctx _GLCRYPTO_CONCAT (OPENSSL_ALG, _ctx) /* gnulib type. */ struct _gl_ctx { _gl_CTX CTX; }; #endif /* Function name mappings. */ #define md5_prefix MD5 #define sha1_prefix SHA1 #define sha224_prefix SHA224 #define sha256_prefix SHA256 #define sha384_prefix SHA384 #define sha512_prefix SHA512 #define _GLCRYPTO_PREFIX _GLCRYPTO_CONCAT (OPENSSL_ALG, _prefix) #define OPENSSL_FN(suffix) _GLCRYPTO_CONCAT (_GLCRYPTO_PREFIX, suffix) #define GL_CRYPTO_FN(suffix) _GLCRYPTO_CONCAT (OPENSSL_ALG, suffix) GL_OPENSSL_INLINE void GL_CRYPTO_FN (_init_ctx) (struct _gl_ctx *ctx) { (void) OPENSSL_FN (_Init) ((_gl_CTX *) ctx); } /* These were never exposed by gnulib. */ #if ! (GL_OPENSSL_NAME == 224 || GL_OPENSSL_NAME == 384) GL_OPENSSL_INLINE void GL_CRYPTO_FN (_process_bytes) (const void *buf, size_t len, struct _gl_ctx *ctx) { OPENSSL_FN (_Update) ((_gl_CTX *) ctx, buf, len); } GL_OPENSSL_INLINE void GL_CRYPTO_FN (_process_block) (const void *buf, size_t len, struct _gl_ctx *ctx) { GL_CRYPTO_FN (_process_bytes) (buf, len, ctx); } #endif GL_OPENSSL_INLINE void * GL_CRYPTO_FN (_finish_ctx) (struct _gl_ctx *ctx, void *restrict res) { OPENSSL_FN (_Final) ((unsigned char *) res, (_gl_CTX *) ctx); return res; } GL_OPENSSL_INLINE void * GL_CRYPTO_FN (_buffer) (const char *buf, size_t len, void *restrict res) { return OPENSSL_FN () ((const unsigned char *) buf, len, (unsigned char *) res); } GL_OPENSSL_INLINE void * GL_CRYPTO_FN (_read_ctx) (const struct _gl_ctx *ctx, void *restrict res) { /* Assume any unprocessed bytes in ctx are not to be ignored. */ _gl_CTX tmp_ctx = *(_gl_CTX *) ctx; OPENSSL_FN (_Final) ((unsigned char *) res, &tmp_ctx); return res; } /* Undef so we can include multiple times. */ #undef GL_CRYPTO_FN #undef OPENSSL_FN #undef _GLCRYPTO_PREFIX #undef OPENSSL_ALG #undef GL_OPENSSL_NAME _GL_INLINE_HEADER_END �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_oset.c���������������������������������������������������������������0000664�0000000�0000000�00000001513�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type. Copyright (C) 2006-2021 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/>. */ #include <config.h> #define GL_OSET_INLINE _GL_EXTERN_INLINE #include "gl_oset.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_oset.h���������������������������������������������������������������0000664�0000000�0000000�00000031446�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_OSET_H #define _GL_OSET_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_OSET_INLINE # define GL_OSET_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_oset is an abstract ordered set data type. It can contain any number of objects ('void *' or 'const void *' pointers) in the order of a given comparator function. Duplicates (in the sense of the comparator) are forbidden. There are several implementations of this ordered set datatype, optimized for different operations or for memory. You can start using the simplest ordered set implementation, GL_ARRAY_OSET, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_oset_create call. The implementations are: GL_ARRAY_OSET a growable array GL_AVLTREE_OSET a binary tree (AVL tree) GL_RBTREE_OSET a binary tree (red-black tree) The memory consumption is asymptotically the same: O(1) for every object in the set. When looking more closely at the average memory consumed for an object, GL_ARRAY_OSET is the most compact representation, and GL_AVLTREE_OSET, GL_RBTREE_OSET need more memory. The guaranteed average performance of the operations is, for a set of n elements: Operation ARRAY TREE gl_oset_size O(1) O(1) gl_oset_add O(n) O(log n) gl_oset_remove O(n) O(log n) gl_oset_update O(n) O(log n) gl_oset_search O(log n) O(log n) gl_oset_search_atleast O(log n) O(log n) gl_oset_iterator O(1) O(log n) gl_oset_iterator_atleast O(log n) O(log n) gl_oset_iterator_next O(1) O(log n) */ /* -------------------------- gl_oset_t Data Type -------------------------- */ /* Type of function used to compare two elements. Same as for qsort(). NULL denotes pointer comparison. */ typedef int (*gl_setelement_compar_fn) (const void *elt1, const void *elt2); #ifndef _GL_SETELEMENT_DISPOSE_FN_DEFINED /* Type of function used to dispose an element once it's removed from a set. NULL denotes a no-op. */ typedef void (*gl_setelement_dispose_fn) (const void *elt); # define _GL_SETELEMENT_DISPOSE_FN_DEFINED 1 #endif /* Type of function used to compare an element with a threshold. Returns true if the element is greater or equal than the threshold. */ typedef bool (*gl_setelement_threshold_fn) (const void *elt, const void *threshold); struct gl_oset_impl; /* Type representing an entire ordered set. */ typedef struct gl_oset_impl * gl_oset_t; struct gl_oset_implementation; /* Type representing a ordered set datatype implementation. */ typedef const struct gl_oset_implementation * gl_oset_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty set. IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. COMPAR_FN is an element comparison function or NULL. DISPOSE_FN is an element disposal function or NULL. */ /* declared in gl_xoset.h */ extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_oset_t gl_oset_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/; /* Returns the current number of elements in an ordered set. */ extern size_t gl_oset_size (gl_oset_t set); /* Searches whether an element is already in the ordered set. Returns true if found, or false if not present in the set. */ extern bool gl_oset_search (gl_oset_t set, const void *elt); /* Searches the least element in the ordered set that compares greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. Returns true and stores the found element in *ELTP if found, otherwise returns false. */ extern bool gl_oset_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp); /* Adds an element to an ordered set. Returns true if it was not already in the set and added, false otherwise. */ /* declared in gl_xoset.h */ extern bool gl_oset_add (gl_oset_t set, const void *elt); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_oset_nx_add (gl_oset_t set, const void *elt); /* Removes an element from an ordered set. Returns true if it was found and removed. */ extern bool gl_oset_remove (gl_oset_t set, const void *elt); /* Invokes ACTION (ELT, ACTION_DATA) and updates the given ordered set if, during this invocation, the attributes/properties of the element ELT change in a way that influences the comparison function. Warning: During the invocation of ACTION, the ordered set is inconsistent and must not be accessed! Returns 1 if the position of the element in the ordered set has changed as a consequence, 0 if the element stayed at the same position, or -1 if it collided with another element and was therefore removed. */ extern int gl_oset_update (gl_oset_t set, const void *elt, void (*action) (const void *elt, void *action_data), void *action_data); /* Frees an entire ordered set. (But this call does not free the elements of the set. It only invokes the DISPOSE_FN on each of the elements of the set.) */ extern void gl_oset_free (gl_oset_t set); #endif /* End of inline and gl_xoset.h-defined functions. */ /* --------------------- gl_oset_iterator_t Data Type --------------------- */ /* Functions for iterating through an ordered set. */ /* Type of an iterator that traverses an ordered set. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_oset_iterator_next. */ const struct gl_oset_implementation *vtable; /* For detecting whether the last returned element was removed. */ gl_oset_t set; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_oset_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing an ordered set. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ extern gl_oset_iterator_t gl_oset_iterator (gl_oset_t set); /* Creates an iterator traversing the tail of an ordered set, that comprises the elements that compare greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. */ extern gl_oset_iterator_t gl_oset_iterator_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold); /* If there is a next element, stores the next element in *ELTP, advances the iterator and returns true. Otherwise, returns false. */ extern bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp); /* Frees an iterator. */ extern void gl_oset_iterator_free (gl_oset_iterator_t *iterator); #endif /* End of inline functions. */ /* ------------------------ Implementation Details ------------------------ */ struct gl_oset_implementation { /* gl_oset_t functions. */ gl_oset_t (*nx_create_empty) (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn); size_t (*size) (gl_oset_t set); bool (*search) (gl_oset_t set, const void *elt); bool (*search_atleast) (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp); int (*nx_add) (gl_oset_t set, const void *elt); bool (*remove_elt) (gl_oset_t set, const void *elt); int (*update) (gl_oset_t set, const void *elt, void (*action) (const void * /*elt*/, void * /*action_data*/), void *action_data); void (*oset_free) (gl_oset_t set); /* gl_oset_iterator_t functions. */ gl_oset_iterator_t (*iterator) (gl_oset_t set); gl_oset_iterator_t (*iterator_atleast) (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold); bool (*iterator_next) (gl_oset_iterator_t *iterator, const void **eltp); void (*iterator_free) (gl_oset_iterator_t *iterator); }; struct gl_oset_impl_base { const struct gl_oset_implementation *vtable; gl_setelement_compar_fn compar_fn; gl_setelement_dispose_fn dispose_fn; }; /* Define all functions of this file as accesses to the struct gl_oset_implementation. */ GL_OSET_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ gl_oset_t gl_oset_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) { return implementation->nx_create_empty (implementation, compar_fn, dispose_fn); } GL_OSET_INLINE size_t gl_oset_size (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->size (set); } GL_OSET_INLINE bool gl_oset_search (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); } GL_OSET_INLINE bool gl_oset_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp) { return ((const struct gl_oset_impl_base *) set)->vtable ->search_atleast (set, threshold_fn, threshold, eltp); } _GL_ATTRIBUTE_NODISCARD GL_OSET_INLINE int gl_oset_nx_add (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->nx_add (set, elt); } GL_OSET_INLINE bool gl_oset_remove (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable ->remove_elt (set, elt); } GL_OSET_INLINE int gl_oset_update (gl_oset_t set, const void *elt, void (*action) (const void * /*elt*/, void * /*action_data*/), void *action_data) { return ((const struct gl_oset_impl_base *) set)->vtable ->update (set, elt, action, action_data); } GL_OSET_INLINE void gl_oset_free (gl_oset_t set) { ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); } GL_OSET_INLINE gl_oset_iterator_t gl_oset_iterator (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); } GL_OSET_INLINE gl_oset_iterator_t gl_oset_iterator_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold) { return ((const struct gl_oset_impl_base *) set)->vtable ->iterator_atleast (set, threshold_fn, threshold); } GL_OSET_INLINE bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { return iterator->vtable->iterator_next (iterator, eltp); } GL_OSET_INLINE void gl_oset_iterator_free (gl_oset_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_OSET_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_oset.hh��������������������������������������������������������������0000664�0000000�0000000�00000016204�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type as a C++ class. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _GL_OSET_HH #define _GL_OSET_HH #include "gl_oset.h" #include "gl_xoset.h" #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ /* gl_OSet is a C++ wrapper around the gl_oset data type. Its element type is 'ELTYPE *'. It is merely a pointer, not a smart pointer. In other words: it does NOT do reference-counting, and the destructor does nothing. */ template <class T> class gl_OSet; template <class ELTYPE> class gl_OSet<ELTYPE *> { public: // ------------------------------ Constructors ------------------------------ gl_OSet () : _ptr (NULL) {} /* Creates an empty set. IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. COMPAR_FN is an element comparison function or NULL. DISPOSE_FN is an element disposal function or NULL. */ gl_OSet (gl_oset_implementation_t implementation, int (*compar_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), void (*dispose_fn) (ELTYPE *)) : _ptr (gl_oset_create_empty (implementation, reinterpret_cast<gl_setelement_compar_fn>(compar_fn), reinterpret_cast<gl_setelement_dispose_fn>(dispose_fn))) {} /* Copy constructor. */ gl_OSet (const gl_OSet& x) { _ptr = x._ptr; } /* Assignment operator. */ gl_OSet& operator= (const gl_OSet& x) { _ptr = x._ptr; return *this; } // ------------------------------- Destructor ------------------------------- ~gl_OSet () { _ptr = NULL; } // ----------------------- Read-only member functions ----------------------- /* Returns the current number of elements in the ordered set. */ size_t size () const { return gl_oset_size (_ptr); } /* Searches whether an element is already in the ordered set. Returns true if found, or false if not present in the set. */ bool search (ELTYPE * elt) const { return gl_oset_search (_ptr, elt); } /* Searches the least element in the ordered set that compares greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. Returns true and store the found element in ELT if found, otherwise returns false. */ template <typename THT> bool search_atleast (bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), THT * threshold, ELTYPE *& elt) const { return gl_oset_search_atleast (_ptr, reinterpret_cast<gl_setelement_threshold_fn>(threshold_fn), threshold, &elt); } // ----------------------- Modifying member functions ----------------------- /* Adds an element to the ordered set. Returns true if it was not already in the set and added, false otherwise. */ bool add (ELTYPE * elt) { return gl_oset_add (_ptr, elt); } /* Removes an element from the ordered set. Returns true if it was found and removed. */ bool remove (ELTYPE * elt) { return gl_oset_remove (_ptr, elt); } /* Invokes ACTION (ELT, ACTION_DATA) and updates the ordered set if, during this invocation, the attributes/properties of the element ELT change in a way that influences the comparison function. Warning: During the invocation of ACTION, the ordered set is inconsistent and must not be accessed! Returns 1 if the position of the element in the ordered set has changed as a consequence, 0 if the element stayed at the same position, or -1 if it collided with another element and was therefore removed. */ template <typename DT> int update (ELTYPE * elt, void (*action) (ELTYPE * /*elt*/, DT * /*action_data*/), DT *action_data) { return gl_oset_update (_ptr, elt, reinterpret_cast<void (*) (const void *, void *)> (action), action_data); } /* Frees the entire ordered set. (But this call does not free the elements of the set. It only invokes the DISPOSE_FN on each of the elements of the set.) */ void free () { gl_oset_free (_ptr); } // ------------------------------ Private stuff ------------------------------ private: gl_oset_t _ptr; public: // -------------------------------- Iterators -------------------------------- // Only a forward iterator. // Does not implement the STL operations (++, *, and != .end()), but a simpler // interface that needs only one virtual function call per iteration instead // of three. class iterator { public: /* If there is a next element, stores the next element in ELT, advances the iterator and returns true. Otherwise, returns false. */ bool next (ELTYPE *& elt) { const void *next_elt; bool has_next = gl_oset_iterator_next (&_state, &next_elt); if (has_next) elt = static_cast<ELTYPE *>(next_elt); return has_next; } ~iterator () { gl_oset_iterator_free (&_state); } #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC public: #else private: friend iterator gl_OSet::begin (); template <typename THT> friend iterator gl_OSet::begin_atleast (bool (*) (ELTYPE *, THT *), THT *); #endif iterator (gl_oset_t ptr) : _state (gl_oset_iterator (ptr)) {} template <typename THT> iterator (gl_oset_t ptr, bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), THT * threshold) : _state (gl_oset_iterator_atleast (ptr, reinterpret_cast<gl_setelement_threshold_fn>(threshold_fn), threshold)) {} private: gl_oset_iterator_t _state; }; /* Creates an iterator traversing the ordered set. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ iterator begin () { return iterator (_ptr); } /* Creates an iterator traversing the tail of an ordered set, that comprises the elements that compare greater or equal to the given THRESHOLD. The representation of the THRESHOLD is defined by the THRESHOLD_FN. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ template <typename THT> iterator begin_atleast (bool (*threshold_fn) (ELTYPE * /*elt*/, THT * /*threshold*/), THT * threshold) { return iterator (_ptr, threshold_fn, threshold); } }; #endif /* _GL_OSET_HH */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_list.c��������������������������������������������������������0000664�0000000�0000000�00000006171�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_rbtree_list.h" #include <stdlib.h> /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic red-black tree code. */ #include "gl_anyrbtree_list1.h" /* Generic binary tree code. */ #include "gl_anytree_list1.h" /* Generic red-black tree code. */ #include "gl_anyrbtree_list2.h" /* Generic binary tree code. */ #include "gl_anytree_list2.h" /* For debugging. */ extern void gl_rbtree_list_check_invariants (gl_list_t list); static unsigned int check_invariants (gl_list_node_t node, gl_list_node_t parent) { unsigned int left_blackheight = (node->left != NULL ? check_invariants (node->left, node) : 0); unsigned int right_blackheight = (node->right != NULL ? check_invariants (node->right, node) : 0); if (!(node->parent == parent)) abort (); if (!(node->branch_size == (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0))) abort (); if (!(node->color == BLACK || node->color == RED)) abort (); if (parent == NULL && !(node->color == BLACK)) abort (); if (!(left_blackheight == right_blackheight)) abort (); return left_blackheight + (node->color == BLACK ? 1 : 0); } void gl_rbtree_list_check_invariants (gl_list_t list) { if (list->root != NULL) (void) check_invariants (list->root, NULL); } const struct gl_list_implementation gl_rbtree_list_implementation = { gl_tree_nx_create_empty, gl_tree_nx_create, gl_tree_size, gl_tree_node_value, gl_tree_node_nx_set_value, gl_tree_next_node, gl_tree_previous_node, gl_tree_first_node, gl_tree_last_node, gl_tree_get_at, gl_tree_nx_set_at, gl_tree_search_from_to, gl_tree_indexof_from_to, gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before, gl_tree_nx_add_after, gl_tree_nx_add_at, gl_tree_remove_node, gl_tree_remove_at, gl_tree_remove, gl_tree_list_free, gl_tree_iterator, gl_tree_iterator_from_to, gl_tree_iterator_next, gl_tree_iterator_free, gl_tree_sortedlist_search, gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof, gl_tree_sortedlist_indexof_from_to, gl_tree_sortedlist_nx_add, gl_tree_sortedlist_remove }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_list.h��������������������������������������������������������0000664�0000000�0000000�00000002171�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_RBTREE_LIST_H #define _GL_RBTREE_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_rbtree_list_implementation; #define GL_RBTREE_LIST &gl_rbtree_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_RBTREE_LIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_omap.c��������������������������������������������������������0000664�0000000�0000000�00000004272�14110572173�0020177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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/>. */ #include <config.h> /* Specification. */ #include "gl_rbtree_omap.h" #include <stdlib.h> /* -------------------------- gl_omap_t Data Type -------------------------- */ /* Parameterization of gl_rbtree_ordered.h. */ #define CONTAINER_T gl_omap_t #define CONTAINER_IMPL gl_omap_impl #define CONTAINER_IMPL_BASE gl_omap_impl_base #define NODE_IMPL gl_omap_node_impl #define NODE_T gl_omap_node_t #define NODE_PAYLOAD_FIELDS \ const void *key; \ const void *value; #define NODE_PAYLOAD_PARAMS \ const void *key, const void *value #define NODE_PAYLOAD_ASSIGN(node) \ node->key = key; \ node->value = value; #define NODE_PAYLOAD_DISPOSE(container, node) \ if (container->base.kdispose_fn != NULL) \ container->base.kdispose_fn (node->key); #include "gl_rbtree_ordered.h" /* Generic binary tree code. */ #include "gl_anytree_omap.h" /* For debugging. */ void gl_rbtree_omap_check_invariants (gl_omap_t map) { size_t counter = 0; if (map->root != NULL) check_invariants (map->root, NULL, &counter); if (!(map->count == counter)) abort (); } const struct gl_omap_implementation gl_rbtree_omap_implementation = { gl_tree_nx_create_empty, gl_tree_size, gl_tree_search, gl_tree_search_atleast, gl_tree_nx_getput, gl_tree_getremove, gl_tree_omap_free, gl_tree_iterator, gl_tree_iterator_next, gl_tree_iterator_free }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_omap.h��������������������������������������������������������0000664�0000000�0000000�00000002165�14110572173�0020203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered map data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. 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 _GL_RBTREE_OMAP_H #define _GL_RBTREE_OMAP_H #include "gl_omap.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_omap_implementation gl_rbtree_omap_implementation; #define GL_RBTREE_OMAP &gl_rbtree_omap_implementation #ifdef __cplusplus } #endif #endif /* _GL_RBTREE_OMAP_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_ordered.h�����������������������������������������������������0000664�0000000�0000000�00000065225�14110572173�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered {set,map} data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ /* A red-black tree is a binary tree where every node is colored black or red such that 1. The root is black. 2. No red node has a red parent. Or equivalently: No red node has a red child. 3. All paths from the root down to any NULL endpoint contain the same number of black nodes. Let's call this the "black-height" bh of the tree. It follows that every such path contains exactly bh black and between 0 and bh red nodes. (The extreme cases are a path containing only black nodes, and a path colored alternately black-red-black-red-...-black-red.) The height of the tree therefore is >= bh, <= 2*bh. */ /* Color of a node. */ typedef enum color { BLACK, RED } color_t; /* Tree node implementation, valid for this file only. */ struct NODE_IMPL { struct NODE_IMPL *left; /* left branch, or NULL */ struct NODE_IMPL *right; /* right branch, or NULL */ /* Parent pointer, or NULL. The parent pointer is not needed for most operations. It is needed so that a NODE_T can be returned without memory allocation, on which the functions <container>_remove_node, <container>_add_before, <container>_add_after can be implemented. */ struct NODE_IMPL *parent; color_t color; /* node's color */ NODE_PAYLOAD_FIELDS }; typedef struct NODE_IMPL * NODE_T; /* Concrete CONTAINER_IMPL type, valid for this file only. */ struct CONTAINER_IMPL { struct CONTAINER_IMPL_BASE base; struct NODE_IMPL *root; /* root node or NULL */ size_t count; /* number of nodes */ }; /* A red-black tree of height h has a black-height bh >= ceil(h/2) and therefore at least 2^ceil(h/2) - 1 elements. So, h <= 116 (because a tree of height h >= 117 would have at least 2^59 - 1 elements, and because even on 64-bit machines, sizeof (NODE_IMPL) * (2^59 - 1) > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 116 /* Rotates left a subtree. B D / \ / \ A D --> B E / \ / \ C E A C Changes the tree structure, updates the branch sizes. The caller must update the colors and register D as child of its parent. */ static NODE_T rotate_left (NODE_T b_node, NODE_T d_node) { NODE_T c_node = d_node->left; b_node->right = c_node; d_node->left = b_node; d_node->parent = b_node->parent; b_node->parent = d_node; if (c_node != NULL) c_node->parent = b_node; return d_node; } /* Rotates right a subtree. D B / \ / \ B E --> A D / \ / \ A C C E Changes the tree structure, updates the branch sizes. The caller must update the colors and register B as child of its parent. */ static NODE_T rotate_right (NODE_T b_node, NODE_T d_node) { NODE_T c_node = b_node->right; d_node->left = c_node; b_node->right = d_node; b_node->parent = d_node->parent; d_node->parent = b_node; if (c_node != NULL) c_node->parent = d_node; return b_node; } /* Ensures the tree is balanced, after an insertion operation. Also assigns node->color. parent is the given node's parent, known to be non-NULL. */ static void rebalance_after_add (CONTAINER_T container, NODE_T node, NODE_T parent) { for (;;) { /* At this point, parent = node->parent != NULL. Think of node->color being RED (although node->color is not yet assigned.) */ NODE_T grandparent; NODE_T uncle; if (parent->color == BLACK) { /* A RED color for node is acceptable. */ node->color = RED; return; } grandparent = parent->parent; /* Since parent is RED, we know that grandparent is != NULL and colored BLACK. */ if (grandparent->left == parent) uncle = grandparent->right; else if (grandparent->right == parent) uncle = grandparent->left; else abort (); if (uncle != NULL && uncle->color == RED) { /* Change grandparent from BLACK to RED, and change parent and uncle from RED to BLACK. This makes it acceptable for node to be RED. */ node->color = RED; parent->color = uncle->color = BLACK; node = grandparent; } else { /* grandparent and uncle are BLACK. parent is RED. node wants to be RED too. In this case, recoloring is not sufficient. Need to perform one or two rotations. */ NODE_T *grandparentp; if (grandparent->parent == NULL) grandparentp = &container->root; else if (grandparent->parent->left == grandparent) grandparentp = &grandparent->parent->left; else if (grandparent->parent->right == grandparent) grandparentp = &grandparent->parent->right; else abort (); if (grandparent->left == parent) { if (parent->right == node) { /* Rotation between node and parent. */ grandparent->left = rotate_left (parent, node); node = parent; parent = grandparent->left; } /* grandparent and uncle are BLACK. parent and node want to be RED. parent = grandparent->left. node = parent->left. grandparent parent bh+1 bh+1 / \ / \ parent uncle --> node grandparent bh bh bh bh / \ / \ node C C uncle bh bh bh bh */ *grandparentp = rotate_right (parent, grandparent); parent->color = BLACK; node->color = grandparent->color = RED; } else /* grandparent->right == parent */ { if (parent->left == node) { /* Rotation between node and parent. */ grandparent->right = rotate_right (node, parent); node = parent; parent = grandparent->right; } /* grandparent and uncle are BLACK. parent and node want to be RED. parent = grandparent->right. node = parent->right. grandparent parent bh+1 bh+1 / \ / \ uncle parent --> grandparent node bh bh bh bh / \ / \ C node uncle C bh bh bh bh */ *grandparentp = rotate_left (grandparent, parent); parent->color = BLACK; node->color = grandparent->color = RED; } return; } /* Start again with a new (node, parent) pair. */ parent = node->parent; if (parent == NULL) { /* Change node's color from RED to BLACK. This increases the tree's black-height. */ node->color = BLACK; return; } } } /* Ensures the tree is balanced, after a deletion operation. CHILD was a grandchild of PARENT and is now its child. Between them, a black node was removed. CHILD is also black, or NULL. (CHILD can also be NULL. But PARENT is non-NULL.) */ static void rebalance_after_remove (CONTAINER_T container, NODE_T child, NODE_T parent) { for (;;) { /* At this point, we reduced the black-height of the CHILD subtree by 1. To make up, either look for a possibility to turn a RED to a BLACK node, or try to reduce the black-height tree of CHILD's sibling subtree as well. */ NODE_T *parentp; if (parent->parent == NULL) parentp = &container->root; else if (parent->parent->left == parent) parentp = &parent->parent->left; else if (parent->parent->right == parent) parentp = &parent->parent->right; else abort (); if (parent->left == child) { NODE_T sibling = parent->right; /* sibling's black-height is >= 1. In particular, sibling != NULL. parent / \ child sibling bh bh+1 */ if (sibling->color == RED) { /* sibling is RED, hence parent is BLACK and sibling's children are non-NULL and BLACK. parent sibling bh+2 bh+2 / \ / \ child sibling --> parent SR bh bh+1 bh+1 bh+1 / \ / \ SL SR child SL bh+1 bh+1 bh bh+1 */ *parentp = rotate_left (parent, sibling); parent->color = RED; sibling->color = BLACK; /* Concentrate on the subtree of parent. The new sibling is one of the old sibling's children, and known to be BLACK. */ parentp = &sibling->left; sibling = parent->right; } /* Now we know that sibling is BLACK. parent / \ child sibling bh bh+1 */ if (sibling->right != NULL && sibling->right->color == RED) { /* parent sibling bh+1|bh+2 bh+1|bh+2 / \ / \ child sibling --> parent SR bh bh+1 bh+1 bh+1 / \ / \ SL SR child SL bh bh bh bh */ *parentp = rotate_left (parent, sibling); sibling->color = parent->color; parent->color = BLACK; sibling->right->color = BLACK; return; } else if (sibling->left != NULL && sibling->left->color == RED) { /* parent parent bh+1|bh+2 bh+1|bh+2 / \ / \ child sibling --> child SL bh bh+1 bh bh+1 / \ / \ SL SR SLL sibling bh bh bh bh / \ / \ SLL SLR SLR SR bh bh bh bh where SLL, SLR, SR are all black. */ parent->right = rotate_right (sibling->left, sibling); /* Change sibling from BLACK to RED and SL from RED to BLACK. */ sibling->color = RED; sibling = parent->right; sibling->color = BLACK; /* Now do as in the previous case. */ *parentp = rotate_left (parent, sibling); sibling->color = parent->color; parent->color = BLACK; sibling->right->color = BLACK; return; } else { if (parent->color == BLACK) { /* Change sibling from BLACK to RED. Then the entire subtree at parent has decreased its black-height. parent parent bh+2 bh+1 / \ / \ child sibling --> child sibling bh bh+1 bh bh */ sibling->color = RED; child = parent; } else { /* Change parent from RED to BLACK, but compensate by changing sibling from BLACK to RED. parent parent bh+1 bh+1 / \ / \ child sibling --> child sibling bh bh+1 bh bh */ parent->color = BLACK; sibling->color = RED; return; } } } else if (parent->right == child) { NODE_T sibling = parent->left; /* sibling's black-height is >= 1. In particular, sibling != NULL. parent / \ sibling child bh+1 bh */ if (sibling->color == RED) { /* sibling is RED, hence parent is BLACK and sibling's children are non-NULL and BLACK. parent sibling bh+2 bh+2 / \ / \ sibling child --> SR parent bh+1 ch bh+1 bh+1 / \ / \ SL SR SL child bh+1 bh+1 bh+1 bh */ *parentp = rotate_right (sibling, parent); parent->color = RED; sibling->color = BLACK; /* Concentrate on the subtree of parent. The new sibling is one of the old sibling's children, and known to be BLACK. */ parentp = &sibling->right; sibling = parent->left; } /* Now we know that sibling is BLACK. parent / \ sibling child bh+1 bh */ if (sibling->left != NULL && sibling->left->color == RED) { /* parent sibling bh+1|bh+2 bh+1|bh+2 / \ / \ sibling child --> SL parent bh+1 bh bh+1 bh+1 / \ / \ SL SR SR child bh bh bh bh */ *parentp = rotate_right (sibling, parent); sibling->color = parent->color; parent->color = BLACK; sibling->left->color = BLACK; return; } else if (sibling->right != NULL && sibling->right->color == RED) { /* parent parent bh+1|bh+2 bh+1|bh+2 / \ / \ sibling child --> SR child bh+1 bh bh+1 bh / \ / \ SL SR sibling SRR bh bh bh bh / \ / \ SRL SRR SL SRL bh bh bh bh where SL, SRL, SRR are all black. */ parent->left = rotate_left (sibling, sibling->right); /* Change sibling from BLACK to RED and SL from RED to BLACK. */ sibling->color = RED; sibling = parent->left; sibling->color = BLACK; /* Now do as in the previous case. */ *parentp = rotate_right (sibling, parent); sibling->color = parent->color; parent->color = BLACK; sibling->left->color = BLACK; return; } else { if (parent->color == BLACK) { /* Change sibling from BLACK to RED. Then the entire subtree at parent has decreased its black-height. parent parent bh+2 bh+1 / \ / \ sibling child --> sibling child bh+1 bh bh bh */ sibling->color = RED; child = parent; } else { /* Change parent from RED to BLACK, but compensate by changing sibling from BLACK to RED. parent parent bh+1 bh+1 / \ / \ sibling child --> sibling child bh+1 bh bh bh */ parent->color = BLACK; sibling->color = RED; return; } } } else abort (); /* Start again with a new (child, parent) pair. */ parent = child->parent; #if 0 /* Already handled. */ if (child != NULL && child->color == RED) { child->color = BLACK; return; } #endif if (parent == NULL) return; } } static NODE_T gl_tree_nx_add_first (CONTAINER_T container, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; NODE_PAYLOAD_ASSIGN(new_node) /* Add it to the tree. */ if (container->root == NULL) { new_node->color = BLACK; container->root = new_node; new_node->parent = NULL; } else { NODE_T node; for (node = container->root; node->left != NULL; ) node = node->left; node->left = new_node; new_node->parent = node; /* Color and rebalance. */ rebalance_after_add (container, new_node, node); } container->count++; return new_node; } /* Adds the already allocated NEW_NODE to the tree, right before NODE. */ static void gl_tree_add_node_before (CONTAINER_T container, NODE_T node, NODE_T new_node) { new_node->left = NULL; new_node->right = NULL; /* Add it to the tree. */ if (node->left == NULL) node->left = new_node; else { for (node = node->left; node->right != NULL; ) node = node->right; node->right = new_node; } new_node->parent = node; /* Color and rebalance. */ rebalance_after_add (container, new_node, node); container->count++; } static NODE_T gl_tree_nx_add_before (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; NODE_PAYLOAD_ASSIGN(new_node) gl_tree_add_node_before (container, node, new_node); return new_node; } /* Adds the already allocated NEW_NODE to the tree, right after NODE. */ static void gl_tree_add_node_after (CONTAINER_T container, NODE_T node, NODE_T new_node) { new_node->left = NULL; new_node->right = NULL; /* Add it to the tree. */ if (node->right == NULL) node->right = new_node; else { for (node = node->right; node->left != NULL; ) node = node->left; node->left = new_node; } new_node->parent = node; /* Color and rebalance. */ rebalance_after_add (container, new_node, node); container->count++; } static NODE_T gl_tree_nx_add_after (CONTAINER_T container, NODE_T node, NODE_PAYLOAD_PARAMS) { /* Create new node. */ NODE_T new_node = (struct NODE_IMPL *) malloc (sizeof (struct NODE_IMPL)); if (new_node == NULL) return NULL; NODE_PAYLOAD_ASSIGN(new_node) gl_tree_add_node_after (container, node, new_node); return new_node; } static void gl_tree_remove_node_no_free (CONTAINER_T container, NODE_T node) { NODE_T parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ NODE_T child = node->right; if (child != NULL) { child->parent = parent; /* Since node->left == NULL, child must be RED and of height 1, hence node must have been BLACK. Recolor the child. */ child->color = BLACK; } if (parent == NULL) container->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; if (child == NULL && node->color == BLACK) rebalance_after_remove (container, child, parent); } } else if (node->right == NULL) { /* It is not absolutely necessary to treat this case. But the more general case below is more complicated, hence slower. */ /* Replace node with node->left. */ NODE_T child = node->left; child->parent = parent; /* Since node->right == NULL, child must be RED and of height 1, hence node must have been BLACK. Recolor the child. */ child->color = BLACK; if (parent == NULL) container->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; } } else { /* Replace node with the rightmost element of the node->left subtree. */ NODE_T subst; NODE_T subst_parent; NODE_T child; color_t removed_color; for (subst = node->left; subst->right != NULL; ) subst = subst->right; subst_parent = subst->parent; child = subst->left; removed_color = subst->color; /* The case subst_parent == node is special: If we do nothing special, we get confusion about node->left, subst->left and child->parent. subst_parent == node <==> The 'for' loop above terminated immediately. <==> subst == subst_parent->left [otherwise subst == subst_parent->right] In this case, we would need to first set child->parent = node; node->left = child; and later - when we copy subst into node's position - again child->parent = subst; subst->left = child; Altogether a no-op. */ if (subst_parent != node) { if (child != NULL) child->parent = subst_parent; subst_parent->right = child; } /* Copy subst into node's position. (This is safer than to copy subst's value into node, keep node in place, and free subst.) */ if (subst_parent != node) { subst->left = node->left; subst->left->parent = subst; } subst->right = node->right; subst->right->parent = subst; subst->color = node->color; subst->parent = parent; if (parent == NULL) container->root = subst; else if (parent->left == node) parent->left = subst; else /* parent->right == node */ parent->right = subst; if (removed_color == BLACK) { if (child != NULL && child->color == RED) /* Recolor the child. */ child->color = BLACK; else /* Rebalancing starts at child's parent, that is subst_parent - except when subst_parent == node. In this case, we need to use its replacement, subst. */ rebalance_after_remove (container, child, subst_parent != node ? subst_parent : subst); } } container->count--; } static bool gl_tree_remove_node (CONTAINER_T container, NODE_T node) { gl_tree_remove_node_no_free (container, node); NODE_PAYLOAD_DISPOSE (container, node) free (node); return true; } /* For debugging. */ static unsigned int check_invariants (NODE_T node, NODE_T parent, size_t *counterp) { unsigned int left_blackheight = (node->left != NULL ? check_invariants (node->left, node, counterp) : 0); unsigned int right_blackheight = (node->right != NULL ? check_invariants (node->right, node, counterp) : 0); if (!(node->parent == parent)) abort (); if (!(node->color == BLACK || node->color == RED)) abort (); if (parent == NULL && !(node->color == BLACK)) abort (); if (!(left_blackheight == right_blackheight)) abort (); (*counterp)++; return left_blackheight + (node->color == BLACK ? 1 : 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_oset.c��������������������������������������������������������0000664�0000000�0000000�00000004247�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include "gl_rbtree_oset.h" #include <stdlib.h> /* -------------------------- gl_oset_t Data Type -------------------------- */ /* Parameterization of gl_rbtree_ordered.h. */ #define CONTAINER_T gl_oset_t #define CONTAINER_IMPL gl_oset_impl #define CONTAINER_IMPL_BASE gl_oset_impl_base #define NODE_IMPL gl_oset_node_impl #define NODE_T gl_oset_node_t #define NODE_PAYLOAD_FIELDS \ const void *value; #define NODE_PAYLOAD_PARAMS \ const void *elt #define NODE_PAYLOAD_ASSIGN(node) \ node->value = elt; #define NODE_PAYLOAD_DISPOSE(container, node) \ if (container->base.dispose_fn != NULL) \ container->base.dispose_fn (node->value); #include "gl_rbtree_ordered.h" /* Generic binary tree code. */ #include "gl_anytree_oset.h" /* For debugging. */ void gl_rbtree_oset_check_invariants (gl_oset_t set) { size_t counter = 0; if (set->root != NULL) check_invariants (set->root, NULL, &counter); if (!(set->count == counter)) abort (); } const struct gl_oset_implementation gl_rbtree_oset_implementation = { gl_tree_nx_create_empty, gl_tree_size, gl_tree_search, gl_tree_search_atleast, gl_tree_nx_add, gl_tree_remove, gl_tree_update, gl_tree_oset_free, gl_tree_iterator, gl_tree_iterator_atleast, gl_tree_iterator_next, gl_tree_iterator_free }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtree_oset.h��������������������������������������������������������0000664�0000000�0000000�00000002165�14110572173�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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 _GL_RBTREE_OSET_H #define _GL_RBTREE_OSET_H #include "gl_oset.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_oset_implementation gl_rbtree_oset_implementation; #define GL_RBTREE_OSET &gl_rbtree_oset_implementation #ifdef __cplusplus } #endif #endif /* _GL_RBTREE_OSET_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtreehash_list.c����������������������������������������������������0000664�0000000�0000000�00000007560�14110572173�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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> /* Specification. */ #include "gl_rbtreehash_list.h" #include <stdint.h> /* for uintptr_t, SIZE_MAX */ #include <stdlib.h> #include "gl_rbtree_oset.h" #include "xsize.h" #define WITH_HASHTABLE 1 /* Which kind of binary trees to use for ordered sets. Quite arbitrary. */ #define OSET_TREE_FLAVOR GL_RBTREE_OSET /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic hash-table code: Type definitions. */ #include "gl_anyhash1.h" /* Generic red-black tree code: Type definitions. */ #include "gl_anyrbtree_list1.h" /* Generic hash-table code: Low-level code. */ #define CONTAINER_T gl_list_t #define CONTAINER_COUNT(list) \ ((list)->root != NULL ? (list)->root->branch_size : 0) #include "gl_anyhash2.h" /* Generic binary tree code: Type definitions. */ #include "gl_anytree_list1.h" /* Hash-table with binary tree code: Handling of hash buckets. */ #include "gl_anytreehash_list1.h" /* Generic red-black tree code: Insertion/deletion algorithms. */ #include "gl_anyrbtree_list2.h" /* Generic binary tree code: Functions taking advantage of the hash table. */ #include "gl_anytreehash_list2.h" /* Generic binary tree code: All other functions. */ #include "gl_anytree_list2.h" /* For debugging. */ static unsigned int check_invariants (gl_list_node_t node, gl_list_node_t parent) { unsigned int left_blackheight = (node->left != NULL ? check_invariants (node->left, node) : 0); unsigned int right_blackheight = (node->right != NULL ? check_invariants (node->right, node) : 0); if (!(node->parent == parent)) abort (); if (!(node->branch_size == (node->left != NULL ? node->left->branch_size : 0) + 1 + (node->right != NULL ? node->right->branch_size : 0))) abort (); if (!(node->color == BLACK || node->color == RED)) abort (); if (parent == NULL && !(node->color == BLACK)) abort (); if (!(left_blackheight == right_blackheight)) abort (); return left_blackheight + (node->color == BLACK ? 1 : 0); } void gl_rbtreehash_list_check_invariants (gl_list_t list) { if (list->root != NULL) check_invariants (list->root, NULL); } const struct gl_list_implementation gl_rbtreehash_list_implementation = { gl_tree_nx_create_empty, gl_tree_nx_create, gl_tree_size, gl_tree_node_value, gl_tree_node_nx_set_value, gl_tree_next_node, gl_tree_previous_node, gl_tree_first_node, gl_tree_last_node, gl_tree_get_at, gl_tree_nx_set_at, gl_tree_search_from_to, gl_tree_indexof_from_to, gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before, gl_tree_nx_add_after, gl_tree_nx_add_at, gl_tree_remove_node, gl_tree_remove_at, gl_tree_remove, gl_tree_list_free, gl_tree_iterator, gl_tree_iterator_from_to, gl_tree_iterator_next, gl_tree_iterator_free, gl_tree_sortedlist_search, gl_tree_sortedlist_search_from_to, gl_tree_sortedlist_indexof, gl_tree_sortedlist_indexof_from_to, gl_tree_sortedlist_nx_add, gl_tree_sortedlist_remove }; ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_rbtreehash_list.h����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _GL_RBTREEHASH_LIST_H #define _GL_RBTREEHASH_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_rbtreehash_list_implementation; #define GL_RBTREEHASH_LIST &gl_rbtreehash_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_RBTREEHASH_LIST_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_set.c����������������������������������������������������������������0000664�0000000�0000000�00000001452�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract set data type. Copyright (C) 2018-2021 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 <config.h> #define GL_SET_INLINE _GL_EXTERN_INLINE #include "gl_set.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_set.h����������������������������������������������������������������0000664�0000000�0000000�00000023431�14110572173�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract set data type. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_SET_H #define _GL_SET_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_SET_INLINE # define GL_SET_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_set is an abstract set data type. It can contain any number of objects ('void *' or 'const void *' pointers); the order does not matter. Duplicates (in the sense of the comparator) are forbidden. There are several implementations of this set datatype, optimized for different operations or for memory. You can start using the simplest set implementation, GL_ARRAY_SET, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_set_create call. The implementations are: GL_ARRAY_SET a growable array GL_LINKEDHASH_SET a hash table with a linked list GL_HASH_SET a hash table The memory consumption is asymptotically the same: O(1) for every object in the set. When looking more closely at the average memory consumed for an object, GL_ARRAY_SET is the most compact representation, then comes GL_HASH_SET, and GL_LINKEDHASH_SET needs the most memory. The guaranteed average performance of the operations is, for a set of n elements: Operation ARRAY LINKEDHASH HASH gl_set_size O(1) O(1) gl_set_add O(n) O(1) gl_set_remove O(n) O(1) gl_set_search O(n) O(1) gl_set_iterator O(1) O(1) gl_set_iterator_next O(1) O(1) */ /* --------------------------- gl_set_t Data Type --------------------------- */ /* Type of function used to compare two elements. NULL denotes pointer comparison. */ typedef bool (*gl_setelement_equals_fn) (const void *elt1, const void *elt2); /* Type of function used to compute a hash code. NULL denotes a function that depends only on the pointer itself. */ typedef size_t (*gl_setelement_hashcode_fn) (const void *elt); #ifndef _GL_SETELEMENT_DISPOSE_FN_DEFINED /* Type of function used to dispose an element once it's removed from a set. NULL denotes a no-op. */ typedef void (*gl_setelement_dispose_fn) (const void *elt); # define _GL_SETELEMENT_DISPOSE_FN_DEFINED 1 #endif struct gl_set_impl; /* Type representing an entire set. */ typedef struct gl_set_impl * gl_set_t; struct gl_set_implementation; /* Type representing a set datatype implementation. */ typedef const struct gl_set_implementation * gl_set_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty set. IMPLEMENTATION is one of GL_ARRAY_SET, GL_LINKEDHASH_SET, GL_HASH_SET. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. */ /* declared in gl_xset.h */ extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_set_t gl_set_nx_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/; /* Returns the current number of elements in a set. */ extern size_t gl_set_size (gl_set_t set); /* Searches whether an element is already in the set. Returns true if found, or false if not present in the set. */ extern bool gl_set_search (gl_set_t set, const void *elt); /* Adds an element to a set. Returns true if it was not already in the set and added, false otherwise. */ /* declared in gl_xset.h */ extern bool gl_set_add (gl_set_t set, const void *elt); /* Likewise. Returns -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_set_nx_add (gl_set_t set, const void *elt); /* Removes an element from a set. Returns true if it was found and removed. */ extern bool gl_set_remove (gl_set_t set, const void *elt); /* Frees an entire set. (But this call does not free the elements of the set. It only invokes the DISPOSE_FN on each of the elements of the set.) */ extern void gl_set_free (gl_set_t set); #endif /* End of inline and gl_xset.h-defined functions. */ /* ---------------------- gl_set_iterator_t Data Type ---------------------- */ /* Functions for iterating through a set. Note: Iterating through a set of type GL_HASH_SET returns the elements in an unpredictable order. If you need a predictable order, use GL_LINKEDHASH_SET instead of GL_HASH_SET. */ /* Type of an iterator that traverses a set. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_set_iterator_next. */ const struct gl_set_implementation *vtable; /* For detecting whether the last returned element was removed. */ gl_set_t set; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_set_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing a set. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ extern gl_set_iterator_t gl_set_iterator (gl_set_t set); /* If there is a next element, stores the next element in *ELTP, advances the iterator and returns true. Otherwise, returns false. */ extern bool gl_set_iterator_next (gl_set_iterator_t *iterator, const void **eltp); /* Frees an iterator. */ extern void gl_set_iterator_free (gl_set_iterator_t *iterator); #endif /* End of inline functions. */ /* ------------------------ Implementation Details ------------------------ */ struct gl_set_implementation { /* gl_set_t functions. */ gl_set_t (*nx_create_empty) (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn); size_t (*size) (gl_set_t set); bool (*search) (gl_set_t set, const void *elt); int (*nx_add) (gl_set_t set, const void *elt); bool (*remove_elt) (gl_set_t set, const void *elt); void (*set_free) (gl_set_t set); /* gl_set_iterator_t functions. */ gl_set_iterator_t (*iterator) (gl_set_t set); bool (*iterator_next) (gl_set_iterator_t *iterator, const void **eltp); void (*iterator_free) (gl_set_iterator_t *iterator); }; struct gl_set_impl_base { const struct gl_set_implementation *vtable; gl_setelement_equals_fn equals_fn; gl_setelement_dispose_fn dispose_fn; }; /* Define all functions of this file as accesses to the struct gl_set_implementation. */ GL_SET_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ gl_set_t gl_set_nx_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) { return implementation->nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn); } GL_SET_INLINE size_t gl_set_size (gl_set_t set) { return ((const struct gl_set_impl_base *) set)->vtable->size (set); } GL_SET_INLINE bool gl_set_search (gl_set_t set, const void *elt) { return ((const struct gl_set_impl_base *) set)->vtable->search (set, elt); } _GL_ATTRIBUTE_NODISCARD GL_SET_INLINE int gl_set_nx_add (gl_set_t set, const void *elt) { return ((const struct gl_set_impl_base *) set)->vtable->nx_add (set, elt); } GL_SET_INLINE bool gl_set_remove (gl_set_t set, const void *elt) { return ((const struct gl_set_impl_base *) set)->vtable->remove_elt (set, elt); } GL_SET_INLINE void gl_set_free (gl_set_t set) { ((const struct gl_set_impl_base *) set)->vtable->set_free (set); } GL_SET_INLINE gl_set_iterator_t gl_set_iterator (gl_set_t set) { return ((const struct gl_set_impl_base *) set)->vtable->iterator (set); } GL_SET_INLINE bool gl_set_iterator_next (gl_set_iterator_t *iterator, const void **eltp) { return iterator->vtable->iterator_next (iterator, eltp); } GL_SET_INLINE void gl_set_iterator_free (gl_set_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_SET_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_set.hh���������������������������������������������������������������0000664�0000000�0000000�00000011544�14110572173�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract set data type as a C++ class. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_SET_HH #define _GL_SET_HH #include "gl_set.h" #include "gl_xset.h" #include <stdlib.h> /* because Gnulib's <stdlib.h> may '#define free ...' */ /* gl_Set is a C++ wrapper around the gl_set data type. Its element type is 'ELTYPE *'. It is merely a pointer, not a smart pointer. In other words: it does NOT do reference-counting, and the destructor does nothing. */ template <class T> class gl_Set; template <class ELTYPE> class gl_Set<ELTYPE *> { public: // ------------------------------ Constructors ------------------------------ gl_Set () : _ptr (NULL) {} /* Creates an empty set. IMPLEMENTATION is one of GL_ARRAY_SET, GL_LINKEDHASH_SET, GL_HASH_SET. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. */ gl_Set (gl_set_implementation_t implementation, bool (*equals_fn) (ELTYPE * /*elt1*/, ELTYPE * /*elt2*/), size_t (*hashcode_fn) (ELTYPE *), void (*dispose_fn) (ELTYPE *)) : _ptr (gl_set_create_empty (implementation, reinterpret_cast<gl_setelement_equals_fn>(equals_fn), reinterpret_cast<gl_setelement_hashcode_fn>(hashcode_fn), reinterpret_cast<gl_setelement_dispose_fn>(dispose_fn))) {} /* Copy constructor. */ gl_Set (const gl_Set& x) { _ptr = x._ptr; } /* Assignment operator. */ gl_Set& operator= (const gl_Set& x) { _ptr = x._ptr; return *this; } // ------------------------------- Destructor ------------------------------- ~gl_Set () { _ptr = NULL; } // ----------------------- Read-only member functions ----------------------- /* Returns the current number of elements in the set. */ size_t size () const { return gl_set_size (_ptr); } /* Searches whether an element is already in the set. Returns true if found, or false if not present in the set. */ bool search (ELTYPE * elt) const { return gl_set_search (_ptr, elt); } // ----------------------- Modifying member functions ----------------------- /* Adds an element to the set. Returns true if it was not already in the set and added, false otherwise. */ bool add (ELTYPE * elt) { return gl_set_add (_ptr, elt); } /* Removes an element from the set. Returns true if it was found and removed. */ bool remove (ELTYPE * elt) { return gl_set_remove (_ptr, elt); } /* Frees the entire set. (But this call does not free the elements of the set. It only invokes the DISPOSE_FN on each of the elements of the set.) */ void free () { gl_set_free (_ptr); _ptr = NULL; } // ------------------------------ Private stuff ------------------------------ private: gl_set_t _ptr; public: // -------------------------------- Iterators -------------------------------- // Only a forward iterator. // Does not implement the STL operations (++, *, and != .end()), but a simpler // interface that needs only one virtual function call per iteration instead // of three. class iterator { public: /* If there is a next element, stores the next element in ELT, advances the iterator and returns true. Otherwise, returns false. */ bool next (ELTYPE *& elt) { const void *next_elt; bool has_next = gl_set_iterator_next (&_state, &next_elt); if (has_next) elt = static_cast<ELTYPE *>(next_elt); return has_next; } ~iterator () { gl_set_iterator_free (&_state); } #if defined __xlC__ || defined __HP_aCC || defined __SUNPRO_CC public: #else private: friend iterator gl_Set::begin (); #endif iterator (gl_set_t ptr) : _state (gl_set_iterator (ptr)) {} private: gl_set_iterator_t _state; }; /* Creates an iterator traversing the set. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ iterator begin () { return iterator (_ptr); } }; #endif /* _GL_SET_HH */ ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_sublist.c������������������������������������������������������������0000664�0000000�0000000�00000034050�14110572173�0017362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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> /* Specification. */ #include "gl_sublist.h" #include <stdint.h> #include <stdlib.h> /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; /* Reference to the whole list. */ gl_list_t whole; /* Limits of the index range. */ size_t start; size_t end; }; /* struct gl_list_node_impl doesn't exist here. The pointers are actually indices + 1. (We don't use the whole list's gl_list_node_t implementation, because gl_sublist_next_node and gl_sublist_previous_node would not be easy to implement with this choice.) */ #define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) #define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) static gl_list_t gl_sublist_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { /* Shouldn't be called. */ abort (); } static gl_list_t gl_sublist_nx_create_fill (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { /* Shouldn't be called. */ abort (); } static size_t gl_sublist_size (gl_list_t list) { return list->end - list->start; } static const void * gl_sublist_node_value (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->end - list->start)) /* Invalid argument. */ abort (); return gl_list_get_at (list->whole, list->start + index); } static int gl_sublist_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->end - list->start)) /* Invalid argument. */ abort (); if (gl_list_nx_set_at (list->whole, list->start + index, elt) == NULL) return -1; return 0; } static gl_list_node_t gl_sublist_next_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); size_t count = list->end - list->start; if (!(index < count)) /* Invalid argument. */ abort (); index++; if (index < count) return INDEX_TO_NODE (index); else return NULL; } static gl_list_node_t gl_sublist_previous_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->end - list->start)) /* Invalid argument. */ abort (); if (index > 0) return INDEX_TO_NODE (index - 1); else return NULL; } static gl_list_node_t gl_sublist_first_node (gl_list_t list) { if (list->end > list->start) return INDEX_TO_NODE (0); else return NULL; } static gl_list_node_t gl_sublist_last_node (gl_list_t list) { size_t count = list->end - list->start; if (count > 0) return INDEX_TO_NODE (count - 1); else return NULL; } static const void * gl_sublist_get_at (gl_list_t list, size_t position) { if (!(position < list->end - list->start)) /* Invalid argument. */ abort (); return gl_list_get_at (list->whole, list->start + position); } static gl_list_node_t gl_sublist_nx_set_at (gl_list_t list, size_t position, const void *elt) { if (!(position < list->end - list->start)) /* Invalid argument. */ abort (); if (gl_list_nx_set_at (list->whole, list->start + position, elt) == NULL) return NULL; return INDEX_TO_NODE (position); } static gl_list_node_t gl_sublist_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { if (!(start_index <= end_index && end_index <= list->end - list->start)) /* Invalid arguments. */ abort (); { size_t index = gl_list_indexof_from_to (list->whole, list->start + start_index, list->start + end_index, elt); if (index != (size_t)(-1)) return INDEX_TO_NODE (index - list->start); else return NULL; } } static size_t gl_sublist_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { if (!(start_index <= end_index && end_index <= list->end - list->start)) /* Invalid arguments. */ abort (); { size_t index = gl_list_indexof_from_to (list->whole, list->start + start_index, list->start + end_index, elt); if (index != (size_t)(-1)) index -= list->start; return index; } } static gl_list_node_t gl_sublist_nx_add_first (gl_list_t list, const void *elt) { if (gl_list_nx_add_at (list->whole, list->start, elt) == NULL) return NULL; list->end++; return INDEX_TO_NODE (0); } static gl_list_node_t gl_sublist_nx_add_last (gl_list_t list, const void *elt) { if (gl_list_nx_add_at (list->whole, list->end, elt) == NULL) return NULL; list->end++; return INDEX_TO_NODE (list->end - list->start - 1); } static gl_list_node_t gl_sublist_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { size_t position = NODE_TO_INDEX (node); if (!(position < list->end - list->start)) /* Invalid argument. */ abort (); if (gl_list_nx_add_at (list->whole, list->start + position, elt) == NULL) return NULL; list->end++; return INDEX_TO_NODE (position); } static gl_list_node_t gl_sublist_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { size_t position = NODE_TO_INDEX (node); if (!(position < list->end - list->start)) /* Invalid argument. */ abort (); position++; if (gl_list_nx_add_at (list->whole, list->start + position, elt) == NULL) return NULL; list->end++; return INDEX_TO_NODE (position); } static gl_list_node_t gl_sublist_nx_add_at (gl_list_t list, size_t position, const void *elt) { if (!(position <= list->end - list->start)) /* Invalid argument. */ abort (); if (gl_list_nx_add_at (list->whole, list->start + position, elt) == NULL) return NULL; list->end++; return INDEX_TO_NODE (position); } static bool gl_sublist_remove_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->end - list->start)) /* Invalid argument. */ abort (); return gl_list_remove_at (list->whole, list->start + index); } static bool gl_sublist_remove_at (gl_list_t list, size_t position) { if (!(position < list->end - list->start)) /* Invalid argument. */ abort (); return gl_list_remove_at (list->whole, list->start + position); } static bool gl_sublist_remove (gl_list_t list, const void *elt) { size_t position = gl_list_indexof_from_to (list->whole, list->start, list->end, elt); if (position == (size_t)(-1)) return false; else return gl_list_remove_at (list->whole, position); } static void gl_sublist_list_free (gl_list_t list) { free (list); } /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t gl_sublist_iterator (gl_list_t list) { return gl_list_iterator_from_to (list->whole, list->start, list->end); } static gl_list_iterator_t gl_sublist_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { if (!(start_index <= end_index && end_index <= list->end - list->start)) /* Invalid arguments. */ abort (); return gl_list_iterator_from_to (list->whole, list->start + start_index, list->start + end_index); } static bool gl_sublist_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { /* Shouldn't be called. */ abort (); } static void gl_sublist_iterator_free (gl_list_iterator_t *iterator) { /* Shouldn't be called. */ abort (); } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static gl_list_node_t gl_sublist_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_sortedlist_indexof_from_to (list->whole, compar, list->start, list->end, elt); if (index != (size_t)(-1)) return INDEX_TO_NODE (index - list->start); else return NULL; } static gl_list_node_t gl_sublist_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t index; if (!(low <= high && high <= list->end - list->start)) /* Invalid arguments. */ abort (); index = gl_sortedlist_indexof_from_to (list->whole, compar, list->start + low, list->start + high, elt); if (index != (size_t)(-1)) return INDEX_TO_NODE (index - list->start); else return NULL; } static size_t gl_sublist_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_sortedlist_indexof_from_to (list->whole, compar, list->start, list->end, elt); if (index != (size_t)(-1)) index -= list->start; return index; } static size_t gl_sublist_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t index; if (!(low <= high && high <= list->end - list->start)) /* Invalid arguments. */ abort (); index = gl_sortedlist_indexof_from_to (list->whole, compar, list->start + low, list->start + high, elt); if (index != (size_t)(-1)) index -= list->start; return index; } static gl_list_node_t gl_sublist_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { /* It's impossible to implement this method without risking to put the whole list into unsorted order (namely, when the given ELT is smaller or larger than all elements of the sublist). */ abort (); } static bool gl_sublist_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_sublist_sortedlist_indexof (list, compar, elt); if (index == (size_t)(-1)) return false; else return gl_sublist_remove_at (list, index); } static const struct gl_list_implementation gl_sublist_list_implementation = { gl_sublist_nx_create_empty, gl_sublist_nx_create_fill, gl_sublist_size, gl_sublist_node_value, gl_sublist_node_nx_set_value, gl_sublist_next_node, gl_sublist_previous_node, gl_sublist_first_node, gl_sublist_last_node, gl_sublist_get_at, gl_sublist_nx_set_at, gl_sublist_search_from_to, gl_sublist_indexof_from_to, gl_sublist_nx_add_first, gl_sublist_nx_add_last, gl_sublist_nx_add_before, gl_sublist_nx_add_after, gl_sublist_nx_add_at, gl_sublist_remove_node, gl_sublist_remove_at, gl_sublist_remove, gl_sublist_list_free, gl_sublist_iterator, gl_sublist_iterator_from_to, gl_sublist_iterator_next, gl_sublist_iterator_free, gl_sublist_sortedlist_search, gl_sublist_sortedlist_search_from_to, gl_sublist_sortedlist_indexof, gl_sublist_sortedlist_indexof_from_to, gl_sublist_sortedlist_nx_add, gl_sublist_sortedlist_remove }; gl_list_t gl_sublist_nx_create (gl_list_t whole_list, size_t start_index, size_t end_index) { if (!(start_index <= end_index && end_index <= gl_list_size (whole_list))) /* Invalid arguments. */ abort (); { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = &gl_sublist_list_implementation; list->base.equals_fn = whole_list->base.equals_fn; /* actually unused */ list->base.hashcode_fn = whole_list->base.hashcode_fn; /* actually unused */ list->base.dispose_fn = whole_list->base.dispose_fn; /* actually unused */ list->base.allow_duplicates = whole_list->base.allow_duplicates; /* unused */ if (whole_list->base.vtable == &gl_sublist_list_implementation) { /* Optimization of a sublist of a sublist: Collapse the two indirections into a single indirection. */ list->whole = whole_list->whole; list->start = whole_list->start + start_index; list->end = whole_list->start + end_index; } else { list->whole = whole_list; list->start = start_index; list->end = end_index; } return list; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_sublist.h������������������������������������������������������������0000664�0000000�0000000�00000003624�14110572173�0017372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _GL_SUBLIST_H #define _GL_SUBLIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif /* Creates a sublist of a given list. This is the list of elements with indices i, start_index <= i < end_index. The sublist is backed by the given list, which means: - Modifications to the sublist affect the whole list. - Modifications to the whole list are immediately visible in the sublist. - The sublist is only valid as long as the whole list is valid. - The sublist must not be passed to the gl_list_sortedlist_add() function. */ #if 0 /* declared in gl_xsublist.h */ extern gl_list_t gl_sublist_create (gl_list_t whole_list, size_t start_index, size_t end_index) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* Likewise. Returns NULL upon out-of-memory. */ extern gl_list_t gl_sublist_nx_create (gl_list_t whole_list, size_t start_index, size_t end_index) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; #ifdef __cplusplus } #endif #endif /* _GL_SUBLIST_H */ ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xlist.c��������������������������������������������������������������0000664�0000000�0000000�00000001527�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type, with out-of-memory checking. Copyright (C) 2009-2021 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 <config.h> #define GL_XLIST_INLINE _GL_EXTERN_INLINE #include "gl_xlist.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xlist.h��������������������������������������������������������������0000664�0000000�0000000�00000015507�14110572173�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 _GL_XLIST_H #define _GL_XLIST_H #include "gl_list.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XLIST_INLINE # define GL_XLIST_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_list.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ #if 0 /* These are defined inline below. */ extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern gl_list_t gl_list_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt); extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, const void *elt); extern gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt); extern gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt); extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt); extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt); extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, const void *elt); extern gl_list_node_t gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); #endif GL_XLIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { gl_list_t result = gl_list_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_list_t gl_list_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { gl_list_t result = gl_list_nx_create (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates, count, contents); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { int result = gl_list_node_nx_set_value (list, node, elt); if (result < 0) xalloc_die (); } GL_XLIST_INLINE gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, const void *elt) { gl_list_node_t result = gl_list_nx_set_at (list, position, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt) { gl_list_node_t result = gl_list_nx_set_first (list, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt) { gl_list_node_t result = gl_list_nx_set_last (list, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt) { gl_list_node_t result = gl_list_nx_add_first (list, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt) { gl_list_node_t result = gl_list_nx_add_last (list, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { gl_list_node_t result = gl_list_nx_add_before (list, node, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { gl_list_node_t result = gl_list_nx_add_after (list, node, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, const void *elt) { gl_list_node_t result = gl_list_nx_add_at (list, position, elt); if (result == NULL) xalloc_die (); return result; } GL_XLIST_INLINE gl_list_node_t gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { gl_list_node_t result = gl_sortedlist_nx_add (list, compar, elt); if (result == NULL) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XLIST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xmap.c���������������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract map data type, with out-of-memory checking. Copyright (C) 2018-2021 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 <config.h> #define GL_XMAP_INLINE _GL_EXTERN_INLINE #include "gl_xmap.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xmap.h���������������������������������������������������������������0000664�0000000�0000000�00000006032�14110572173�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract map data type, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_XMAP_H #define _GL_XMAP_H #include "gl_map.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XMAP_INLINE # define GL_XMAP_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_map.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ #if 0 /* These are defined inline below. */ extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern bool gl_map_put (gl_map_t map, const void *key, const void *value); extern bool gl_map_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep); #endif GL_XMAP_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_map_t gl_map_create_empty (gl_map_implementation_t implementation, gl_mapkey_equals_fn equals_fn, gl_mapkey_hashcode_fn hashcode_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { gl_map_t result = gl_map_nx_create_empty (implementation, equals_fn, hashcode_fn, kdispose_fn, vdispose_fn); if (result == NULL) xalloc_die (); return result; } GL_XMAP_INLINE bool gl_map_put (gl_map_t map, const void *key, const void *value) { int result = gl_map_nx_put (map, key, value); if (result < 0) xalloc_die (); return result; } GL_XMAP_INLINE bool gl_map_getput (gl_map_t map, const void *key, const void *value, const void **oldvaluep) { int result = gl_map_nx_getput (map, key, value, oldvaluep); if (result < 0) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XMAP_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xomap.c��������������������������������������������������������������0000664�0000000�0000000�00000001523�14110572173�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered map data type, with out-of-memory checking. Copyright (C) 2018-2021 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 <config.h> #define GL_XOMAP_INLINE _GL_EXTERN_INLINE #include "gl_xomap.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xomap.h��������������������������������������������������������������0000664�0000000�0000000�00000005642�14110572173�0017033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered map data type, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 _GL_XOMAP_H #define _GL_XOMAP_H #include "gl_omap.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XOMAP_INLINE # define GL_XOMAP_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_omap.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ #if 0 /* These are defined inline below. */ extern gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern bool gl_omap_put (gl_omap_t map, const void *key, const void *value); extern bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep); #endif GL_XOMAP_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_omap_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, gl_mapkey_compar_fn compar_fn, gl_mapkey_dispose_fn kdispose_fn, gl_mapvalue_dispose_fn vdispose_fn) { gl_omap_t result = gl_omap_nx_create_empty (implementation, compar_fn, kdispose_fn, vdispose_fn); if (result == NULL) xalloc_die (); return result; } GL_XOMAP_INLINE bool gl_omap_put (gl_omap_t map, const void *key, const void *value) { int result = gl_omap_nx_put (map, key, value); if (result < 0) xalloc_die (); return result; } GL_XOMAP_INLINE bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, const void **oldvaluep) { int result = gl_omap_nx_getput (map, key, value, oldvaluep); if (result < 0) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XOMAP_H */ ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xoset.c��������������������������������������������������������������0000664�0000000�0000000�00000001523�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type, with out-of-memory checking. Copyright (C) 2009-2021 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 <config.h> #define GL_XOSET_INLINE _GL_EXTERN_INLINE #include "gl_xoset.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xoset.h��������������������������������������������������������������0000664�0000000�0000000�00000004562�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 _GL_XOSET_H #define _GL_XOSET_H #include "gl_oset.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XOSET_INLINE # define GL_XOSET_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_oset.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ #if 0 /* These are defined inline below. */ extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern bool gl_oset_add (gl_oset_t set, const void *elt); #endif GL_XOSET_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_oset_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) { gl_oset_t result = gl_oset_nx_create_empty (implementation, compar_fn, dispose_fn); if (result == NULL) xalloc_die (); return result; } GL_XOSET_INLINE bool gl_oset_add (gl_oset_t set, const void *elt) { int result = gl_oset_nx_add (set, elt); if (result < 0) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XOSET_H */ ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xset.c���������������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0016654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract set data type, with out-of-memory checking. Copyright (C) 2018-2021 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 <config.h> #define GL_XSET_INLINE _GL_EXTERN_INLINE #include "gl_xset.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xset.h���������������������������������������������������������������0000664�0000000�0000000�00000004741�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract set data type, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 _GL_XSET_H #define _GL_XSET_H #include "gl_set.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XSET_INLINE # define GL_XSET_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_set.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ #if 0 /* These are defined inline below. */ extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; extern bool gl_set_add (gl_set_t set, const void *elt); #endif GL_XSET_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_set_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, gl_setelement_equals_fn equals_fn, gl_setelement_hashcode_fn hashcode_fn, gl_setelement_dispose_fn dispose_fn) { gl_set_t result = gl_set_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn); if (result == NULL) xalloc_die (); return result; } GL_XSET_INLINE bool gl_set_add (gl_set_t set, const void *elt) { int result = gl_set_nx_add (set, elt); if (result < 0) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XSET_H */ �������������������������������gnulib-20210822~d383792/lib/gl_xsublist.c�����������������������������������������������������������0000664�0000000�0000000�00000001556�14110572173�0017557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list, with out-of-memory checking. Copyright (C) 2009-2021 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 <config.h> #define GL_XSUBLIST_INLINE _GL_EXTERN_INLINE #include "gl_xsublist.h" ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/gl_xsublist.h�����������������������������������������������������������0000664�0000000�0000000�00000003345�14110572173�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list, with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 _GL_XSUBLIST_H #define _GL_XSUBLIST_H #include "gl_sublist.h" #include "xalloc.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_XSUBLIST_INLINE # define GL_XSUBLIST_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* These functions are thin wrappers around the corresponding functions with _nx_ infix from gl_sublist.h. Upon out-of-memory, they invoke xalloc_die (), instead of returning an error indicator. */ GL_XSUBLIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL gl_list_t gl_sublist_create (gl_list_t whole_list, size_t start_index, size_t end_index) { gl_list_t result = gl_sublist_nx_create (whole_list, start_index, end_index); if (result == NULL) xalloc_die (); return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_XSUBLIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glob-libc.h�������������������������������������������������������������0000664�0000000�0000000�00000017014�14110572173�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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 _GLOB_H #define _GLOB_H 1 #ifndef __GLOB_GNULIB # include <sys/cdefs.h> #endif __BEGIN_DECLS #define __need_size_t #include <stddef.h> /* Bits set in the FLAGS argument to 'glob'. */ #define GLOB_ERR (1 << 0)/* Return on read errors. */ #define GLOB_MARK (1 << 1)/* Append a slash to each name. */ #define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ #define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ #define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ #define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ #define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ #define GLOB_PERIOD (1 << 7)/* Leading '.' can be matched by metachars. */ #if !defined __USE_POSIX2 || defined __USE_MISC # define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ # define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ # define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ # define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ # define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ # define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error if the user name is not available. */ # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \ |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \ |GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE \ |GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) #else # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS \ |GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND \ |GLOB_PERIOD) #endif /* Error returns from 'glob'. */ #define GLOB_NOSPACE 1 /* Ran out of memory. */ #define GLOB_ABORTED 2 /* Read error. */ #define GLOB_NOMATCH 3 /* No matches found. */ #define GLOB_NOSYS 4 /* Not implemented. */ #ifdef __USE_GNU /* Previous versions of this file defined GLOB_ABEND instead of GLOB_ABORTED. Provide a compatibility definition here. */ # define GLOB_ABEND GLOB_ABORTED #endif /* Structure describing a globbing run. */ #ifdef __USE_GNU struct stat; #endif typedef struct { size_t gl_pathc; /* Count of paths matched by the pattern. */ char **gl_pathv; /* List of matched pathnames. */ size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ /* If the GLOB_ALTDIRFUNC flag is set, the following functions are used instead of the normal file access functions. */ void (*gl_closedir) (void *); #ifdef __USE_GNU struct dirent *(*gl_readdir) (void *); #else void *(*gl_readdir) (void *); #endif void *(*gl_opendir) (const char *); #ifdef __USE_GNU int (*gl_lstat) (const char *__restrict, struct stat *__restrict); int (*gl_stat) (const char *__restrict, struct stat *__restrict); #else int (*gl_lstat) (const char *__restrict, void *__restrict); int (*gl_stat) (const char *__restrict, void *__restrict); #endif } glob_t; #ifdef __USE_LARGEFILE64 # ifdef __USE_GNU struct stat64; # endif typedef struct { size_t gl_pathc; char **gl_pathv; size_t gl_offs; int gl_flags; /* If the GLOB_ALTDIRFUNC flag is set, the following functions are used instead of the normal file access functions. */ void (*gl_closedir) (void *); # ifdef __USE_GNU struct dirent64 *(*gl_readdir) (void *); # else void *(*gl_readdir) (void *); # endif void *(*gl_opendir) (const char *); # ifdef __USE_GNU int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict); int (*gl_stat) (const char *__restrict, struct stat64 *__restrict); # else int (*gl_lstat) (const char *__restrict, void *__restrict); int (*gl_stat) (const char *__restrict, void *__restrict); # endif } glob64_t; #endif /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. If a directory cannot be opened or read and ERRFUNC is not nil, it is called with the pathname that caused the error, and the 'errno' value from the failing call; if it returns non-zero 'glob' returns GLOB_ABEND; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, 'glob' returns zero. */ #if !defined __USE_FILE_OFFSET64 || defined __GLOB_GNULIB extern int glob (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), glob_t *__restrict __pglob) __THROWNL; /* Free storage allocated in PGLOB by a previous 'glob' call. */ extern void globfree (glob_t *__pglob) __THROW; #else # ifdef __USE_TIME_BITS64 extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), glob_t *__restrict __pglob), __glob64_time64); extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), __globfree64_time64); # else extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), glob_t *__restrict __pglob), glob64); extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); # endif #endif #ifdef __USE_LARGEFILE64 # ifdef __USE_TIME_BITS64 extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), glob64_t *__restrict __pglob), __glob64_time64); extern void __REDIRECT_NTH (globfree64, (glob64_t *__pglob), __globfree64_time64); # else extern int glob64 (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), glob64_t *__restrict __pglob) __THROWNL; extern void globfree64 (glob64_t *__pglob) __THROW; # endif #endif #ifdef __USE_GNU /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. This function is not part of the interface specified by POSIX.2 but several programs want to use it. */ extern int glob_pattern_p (const char *__pattern, int __quote) __THROW; #endif __END_DECLS #endif /* glob.h */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glob.c������������������������������������������������������������������0000664�0000000�0000000�00000136161�14110572173�0016144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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 _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the pattern == NULL test below. */ # define _GL_ARG_NONNULL(params) # include <libc-config.h> #endif #include <glob.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <assert.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS32 #endif #ifndef WINDOWS32 # include <pwd.h> #endif #include <errno.h> #include <dirent.h> #include <stdlib.h> #include <string.h> #include <alloca.h> #ifdef _LIBC # undef strdup # define strdup(str) __strdup (str) # define sysconf(id) __sysconf (id) # define closedir(dir) __closedir (dir) # define opendir(name) __opendir (name) # define readdir(str) __readdir64 (str) # define getpwnam_r(name, bufp, buf, len, res) \ __getpwnam_r (name, bufp, buf, len, res) # define FLEXIBLE_ARRAY_MEMBER # ifndef struct_stat # define struct_stat struct stat # endif # ifndef struct_stat64 # define struct_stat64 struct stat64 # endif # ifndef GLOB_LSTAT # define GLOB_LSTAT gl_lstat # endif # ifndef GLOB_STAT64 # define GLOB_STAT64 __stat64 # endif # ifndef GLOB_LSTAT64 # define GLOB_LSTAT64 __lstat64 # endif # include <shlib-compat.h> #else /* !_LIBC */ # define __glob glob # define __getlogin_r(buf, len) getlogin_r (buf, len) # define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag) # ifndef __MVS__ # define __alloca alloca # endif # define __readdir readdir # define COMPILE_GLOB64 # define struct_stat struct stat # define struct_stat64 struct stat # define GLOB_LSTAT gl_lstat # define GLOB_STAT64 stat # define GLOB_LSTAT64 lstat #endif /* _LIBC */ #include <fnmatch.h> #include <flexmember.h> #include <glob_internal.h> #include <scratch_buffer.h> static const char *next_brace_sub (const char *begin, int flags) __THROWNL; /* The type of ((struct dirent *) 0)->d_type is 'unsigned char' on most platforms, but 'unsigned int' in the mingw from mingw.org. */ typedef uint_fast32_t dirent_type; #if !defined _LIBC && !defined HAVE_STRUCT_DIRENT_D_TYPE /* Any distinct values will do here. Undef any existing macros out of the way. */ # undef DT_UNKNOWN # undef DT_DIR # undef DT_LNK # define DT_UNKNOWN 0 # define DT_DIR 1 # define DT_LNK 2 #endif /* A representation of a directory entry which does not depend on the layout of struct dirent, or the size of ino_t. */ struct readdir_result { const char *name; #if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE dirent_type type; #endif }; /* Initialize and return type member of struct readdir_result. */ static dirent_type readdir_result_type (struct readdir_result d) { #if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE # define D_TYPE_TO_RESULT(source) (source)->d_type, return d.type; #else # define D_TYPE_TO_RESULT(source) return DT_UNKNOWN; #endif } /* Construct an initializer for a struct readdir_result object from a struct dirent *. No copy of the name is made. */ #define READDIR_RESULT_INITIALIZER(source) \ { \ source->d_name, \ D_TYPE_TO_RESULT (source) \ } /* Call gl_readdir on STREAM. This macro can be overridden to reduce type safety if an old interface version needs to be supported. */ #ifndef GL_READDIR # define GL_READDIR(pglob, stream) ((pglob)->gl_readdir (stream)) #endif /* Extract name and type from directory entry. No copy of the name is made. If SOURCE is NULL, result name is NULL. Keep in sync with convert_dirent64 below. */ static struct readdir_result convert_dirent (const struct dirent *source) { if (source == NULL) { struct readdir_result result = { NULL, }; return result; } struct readdir_result result = READDIR_RESULT_INITIALIZER (source); return result; } #ifndef COMPILE_GLOB64 /* Like convert_dirent, but works on struct dirent64 instead. Keep in sync with convert_dirent above. */ static struct readdir_result convert_dirent64 (const struct dirent64 *source) { if (source == NULL) { struct readdir_result result = { NULL, }; return result; } struct readdir_result result = READDIR_RESULT_INITIALIZER (source); return result; } #endif #ifndef _LIBC /* The results of opendir() in this file are not used with dirfd and fchdir, and we do not leak fds to any single-threaded code that could use stdio, therefore save some unnecessary recursion in fchdir.c and opendir_safer.c. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use opendir_safer. */ # ifdef GNULIB_defined_opendir # undef opendir # endif # ifdef GNULIB_defined_closedir # undef closedir # endif /* Just use malloc. */ # define __libc_use_alloca(n) false # define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0) # define extend_alloca_account(buf, len, newlen, avar) \ ((void) (buf), (void) (len), (void) (newlen), (void) (avar), (void *) 0) #endif static int glob_lstat (glob_t *pglob, int flags, const char *fullname) { /* Use on glob-lstat-compat.c to provide a compat symbol which does not use lstat / gl_lstat. */ union { struct_stat st; struct_stat64 st64; } ust; return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC) ? pglob->GLOB_LSTAT (fullname, &ust.st) : GLOB_LSTAT64 (fullname, &ust.st64)); } /* Set *R = A + B. Return true if the answer is mathematically incorrect due to overflow; in this case, *R is the low order bits of the correct answer. */ static bool size_add_wrapv (size_t a, size_t b, size_t *r) { #if 7 <= __GNUC__ && !defined __ICC return __builtin_add_overflow (a, b, r); #else *r = a + b; return *r < a; #endif } static bool glob_use_alloca (size_t alloca_used, size_t len) { size_t size; return (!size_add_wrapv (alloca_used, len, &size) && __libc_use_alloca (size)); } static int glob_in_dir (const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob, size_t alloca_used); static int prefix_array (const char *prefix, char **array, size_t n) __THROWNL; static int collated_compare (const void *, const void *) __THROWNL; /* Return true if FILENAME is a directory or a symbolic link to a directory. Use FLAGS and PGLOB to resolve the filename. */ static bool is_dir (char const *filename, int flags, glob_t const *pglob) { struct_stat st; struct_stat64 st64; return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC) ? pglob->gl_stat (filename, &st) == 0 && S_ISDIR (st.st_mode) : GLOB_STAT64 (filename, &st64) == 0 && S_ISDIR (st64.st_mode)); } /* Find the end of the sub-pattern in a brace expression. */ static const char * next_brace_sub (const char *cp, int flags) { size_t depth = 0; while (*cp != '\0') if ((flags & GLOB_NOESCAPE) == 0 && *cp == '\\') { if (*++cp == '\0') break; ++cp; } else { if ((*cp == '}' && depth-- == 0) || (*cp == ',' && depth == 0)) break; if (*cp++ == '{') depth++; } return *cp != '\0' ? cp : NULL; } #ifndef GLOB_ATTRIBUTE # define GLOB_ATTRIBUTE #endif /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. If a directory cannot be opened or read and ERRFUNC is not nil, it is called with the pathname that caused the error, and the 'errno' value from the failing call; if it returns non-zero 'glob' returns GLOB_ABORTED; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, 'glob' returns zero. */ int GLOB_ATTRIBUTE __glob (const char *pattern, int flags, int (*errfunc) (const char *, int), glob_t *pglob) { const char *filename; char *dirname = NULL; size_t dirlen; int status; size_t oldcount; int meta; int dirname_modified; int malloc_dirname = 0; glob_t dirs; int retval = 0; size_t alloca_used = 0; if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) { __set_errno (EINVAL); return -1; } /* POSIX requires all slashes to be matched. This means that with a trailing slash we must match only directories. */ if (pattern[0] && pattern[strlen (pattern) - 1] == '/') flags |= GLOB_ONLYDIR; if (!(flags & GLOB_DOOFFS)) /* Have to do this so 'globfree' knows where to start freeing. It also makes all the code that uses gl_offs simpler. */ pglob->gl_offs = 0; if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; if (!(flags & GLOB_DOOFFS)) pglob->gl_pathv = NULL; else { size_t i; if (pglob->gl_offs >= ~((size_t) 0) / sizeof (char *)) return GLOB_NOSPACE; pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1) * sizeof (char *)); if (pglob->gl_pathv == NULL) return GLOB_NOSPACE; for (i = 0; i <= pglob->gl_offs; ++i) pglob->gl_pathv[i] = NULL; } } if (flags & GLOB_BRACE) { const char *begin; if (flags & GLOB_NOESCAPE) begin = strchr (pattern, '{'); else { begin = pattern; while (1) { if (*begin == '\0') { begin = NULL; break; } if (*begin == '\\' && begin[1] != '\0') ++begin; else if (*begin == '{') break; ++begin; } } if (begin != NULL) { /* Allocate working buffer large enough for our work. Note that we have at least an opening and closing brace. */ size_t firstc; char *alt_start; const char *p; const char *next; const char *rest; size_t rest_len; char *onealt; size_t pattern_len = strlen (pattern) - 1; int alloca_onealt = glob_use_alloca (alloca_used, pattern_len); if (alloca_onealt) onealt = alloca_account (pattern_len, alloca_used); else { onealt = malloc (pattern_len); if (onealt == NULL) return GLOB_NOSPACE; } /* We know the prefix for all sub-patterns. */ alt_start = mempcpy (onealt, pattern, begin - pattern); /* Find the first sub-pattern and at the same time find the rest after the closing brace. */ next = next_brace_sub (begin + 1, flags); if (next == NULL) { /* It is an invalid expression. */ illegal_brace: if (__glibc_unlikely (!alloca_onealt)) free (onealt); flags &= ~GLOB_BRACE; goto no_brace; } /* Now find the end of the whole brace expression. */ rest = next; while (*rest != '}') { rest = next_brace_sub (rest + 1, flags); if (rest == NULL) /* It is an illegal expression. */ goto illegal_brace; } /* Please note that we now can be sure the brace expression is well-formed. */ rest_len = strlen (++rest) + 1; /* We have a brace expression. BEGIN points to the opening {, NEXT points past the terminator of the first element, and END points past the final }. We will accumulate result names from recursive runs for each brace alternative in the buffer using GLOB_APPEND. */ firstc = pglob->gl_pathc; p = begin + 1; while (1) { int result; /* Construct the new glob expression. */ mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len); result = __glob (onealt, ((flags & ~(GLOB_NOCHECK | GLOB_NOMAGIC)) | GLOB_APPEND), errfunc, pglob); /* If we got an error, return it. */ if (result && result != GLOB_NOMATCH) { if (__glibc_unlikely (!alloca_onealt)) free (onealt); if (!(flags & GLOB_APPEND)) { globfree (pglob); pglob->gl_pathc = 0; } return result; } if (*next == '}') /* We saw the last entry. */ break; p = next + 1; next = next_brace_sub (p, flags); assert (next != NULL); } if (__glibc_unlikely (!alloca_onealt)) free (onealt); if (pglob->gl_pathc != firstc) /* We found some entries. */ return 0; else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) return GLOB_NOMATCH; } } no_brace: oldcount = pglob->gl_pathc + pglob->gl_offs; /* Find the filename. */ filename = strrchr (pattern, '/'); #if defined __MSDOS__ || defined WINDOWS32 /* The case of "d:pattern". Since ':' is not allowed in file names, we can safely assume that wherever it happens in pattern, it signals the filename part. This is so we could some day support patterns like "[a-z]:foo". */ if (filename == NULL) filename = strchr (pattern, ':'); #endif /* __MSDOS__ || WINDOWS32 */ dirname_modified = 0; if (filename == NULL) { /* This can mean two things: a simple name or "~name". The latter case is nothing but a notation for a directory. */ if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~') { dirname = (char *) pattern; dirlen = strlen (pattern); /* Set FILENAME to NULL as a special flag. This is ugly but other solutions would require much more code. We test for this special case below. */ filename = NULL; } else { if (__glibc_unlikely (pattern[0] == '\0')) { dirs.gl_pathv = NULL; goto no_matches; } filename = pattern; dirname = (char *) "."; dirlen = 0; } } else if (filename == pattern || (filename == pattern + 1 && pattern[0] == '\\' && (flags & GLOB_NOESCAPE) == 0)) { /* "/pattern" or "\\/pattern". */ dirname = (char *) "/"; dirlen = 1; ++filename; } else { char *newp; dirlen = filename - pattern; #if defined __MSDOS__ || defined WINDOWS32 if (*filename == ':' || (filename > pattern + 1 && filename[-1] == ':')) { char *drive_spec; ++dirlen; drive_spec = __alloca (dirlen + 1); *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0'; /* For now, disallow wildcards in the drive spec, to prevent infinite recursion in glob. */ if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE))) return GLOB_NOMATCH; /* If this is "d:pattern", we need to copy ':' to DIRNAME as well. If it's "d:/pattern", don't remove the slash from "d:/", since "d:" and "d:/" are not the same.*/ } #endif if (glob_use_alloca (alloca_used, dirlen + 1)) newp = alloca_account (dirlen + 1, alloca_used); else { newp = malloc (dirlen + 1); if (newp == NULL) return GLOB_NOSPACE; malloc_dirname = 1; } *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; dirname = newp; ++filename; #if defined __MSDOS__ || defined WINDOWS32 bool drive_root = (dirlen > 1 && (dirname[dirlen - 1] == ':' || (dirlen > 2 && dirname[dirlen - 2] == ':' && dirname[dirlen - 1] == '/'))); #else bool drive_root = false; #endif if (filename[0] == '\0' && dirlen > 1 && !drive_root) /* "pattern/". Expand "pattern", appending slashes. */ { int orig_flags = flags; if (!(flags & GLOB_NOESCAPE) && dirname[dirlen - 1] == '\\') { /* "pattern\\/". Remove the final backslash if it hasn't been quoted. */ char *p = (char *) &dirname[dirlen - 1]; while (p > dirname && p[-1] == '\\') --p; if ((&dirname[dirlen] - p) & 1) { *(char *) &dirname[--dirlen] = '\0'; flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC); } } int val = __glob (dirname, flags | GLOB_MARK, errfunc, pglob); if (val == 0) pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK) | (flags & GLOB_MARK)); else if (val == GLOB_NOMATCH && flags != orig_flags) { /* Make sure globfree (&dirs); is a nop. */ dirs.gl_pathv = NULL; flags = orig_flags; oldcount = pglob->gl_pathc + pglob->gl_offs; goto no_matches; } retval = val; goto out; } } if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~') { if (dirname[1] == '\0' || dirname[1] == '/' || (!(flags & GLOB_NOESCAPE) && dirname[1] == '\\' && (dirname[2] == '\0' || dirname[2] == '/'))) { /* Look up home directory. */ char *home_dir = getenv ("HOME"); int malloc_home_dir = 0; if (home_dir == NULL || home_dir[0] == '\0') { #ifdef WINDOWS32 /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference to HOME, because the user can change HOME. */ const char *home_drive = getenv ("HOMEDRIVE"); const char *home_path = getenv ("HOMEPATH"); if (home_drive != NULL && home_path != NULL) { size_t home_drive_len = strlen (home_drive); size_t home_path_len = strlen (home_path); char *mem = alloca (home_drive_len + home_path_len + 1); memcpy (mem, home_drive, home_drive_len); memcpy (mem + home_drive_len, home_path, home_path_len + 1); home_dir = mem; } else home_dir = "c:/users/default"; /* poor default */ #else int err; struct passwd *p; struct passwd pwbuf; struct scratch_buffer s; scratch_buffer_init (&s); while (true) { p = NULL; err = __getlogin_r (s.data, s.length); if (err == 0) { # if defined HAVE_GETPWNAM_R || defined _LIBC size_t ssize = strlen (s.data) + 1; char *sdata = s.data; err = getpwnam_r (sdata, &pwbuf, sdata + ssize, s.length - ssize, &p); # else p = getpwnam (s.data); if (p == NULL) err = errno; # endif } if (err != ERANGE) break; if (!scratch_buffer_grow (&s)) { retval = GLOB_NOSPACE; goto out; } } if (err == 0) { home_dir = strdup (p->pw_dir); malloc_home_dir = 1; } scratch_buffer_free (&s); if (err == 0 && home_dir == NULL) { retval = GLOB_NOSPACE; goto out; } #endif /* WINDOWS32 */ } if (home_dir == NULL || home_dir[0] == '\0') { if (__glibc_unlikely (malloc_home_dir)) free (home_dir); if (flags & GLOB_TILDE_CHECK) { retval = GLOB_NOMATCH; goto out; } else { home_dir = (char *) "~"; /* No luck. */ malloc_home_dir = 0; } } /* Now construct the full directory. */ if (dirname[1] == '\0') { if (__glibc_unlikely (malloc_dirname)) free (dirname); dirname = home_dir; dirlen = strlen (dirname); malloc_dirname = malloc_home_dir; } else { char *newp; size_t home_len = strlen (home_dir); int use_alloca = glob_use_alloca (alloca_used, home_len + dirlen); if (use_alloca) newp = alloca_account (home_len + dirlen, alloca_used); else { newp = malloc (home_len + dirlen); if (newp == NULL) { if (__glibc_unlikely (malloc_home_dir)) free (home_dir); retval = GLOB_NOSPACE; goto out; } } mempcpy (mempcpy (newp, home_dir, home_len), &dirname[1], dirlen); if (__glibc_unlikely (malloc_dirname)) free (dirname); dirname = newp; dirlen += home_len - 1; malloc_dirname = !use_alloca; if (__glibc_unlikely (malloc_home_dir)) free (home_dir); } dirname_modified = 1; } else { #ifndef WINDOWS32 /* Recognize ~user as a shorthand for the specified user's home directory. */ char *end_name = strchr (dirname, '/'); char *user_name; int malloc_user_name = 0; char *unescape = NULL; if (!(flags & GLOB_NOESCAPE)) { if (end_name == NULL) { unescape = strchr (dirname, '\\'); if (unescape) end_name = strchr (unescape, '\0'); } else unescape = memchr (dirname, '\\', end_name - dirname); } if (end_name == NULL) user_name = dirname + 1; else { char *newp; if (glob_use_alloca (alloca_used, end_name - dirname)) newp = alloca_account (end_name - dirname, alloca_used); else { newp = malloc (end_name - dirname); if (newp == NULL) { retval = GLOB_NOSPACE; goto out; } malloc_user_name = 1; } if (unescape != NULL) { char *p = mempcpy (newp, dirname + 1, unescape - dirname - 1); char *q = unescape; while (q != end_name) { if (*q == '\\') { if (q + 1 == end_name) { /* "~fo\\o\\" unescape to user_name "foo\\", but "~fo\\o\\/" unescape to user_name "foo". */ if (filename == NULL) *p++ = '\\'; break; } ++q; } *p++ = *q++; } *p = '\0'; } else *((char *) mempcpy (newp, dirname + 1, end_name - dirname - 1)) = '\0'; user_name = newp; } /* Look up specific user's home directory. */ { struct passwd *p; struct scratch_buffer pwtmpbuf; scratch_buffer_init (&pwtmpbuf); # if defined HAVE_GETPWNAM_R || defined _LIBC struct passwd pwbuf; while (getpwnam_r (user_name, &pwbuf, pwtmpbuf.data, pwtmpbuf.length, &p) == ERANGE) { if (!scratch_buffer_grow (&pwtmpbuf)) { retval = GLOB_NOSPACE; goto out; } } # else p = getpwnam (user_name); # endif if (__glibc_unlikely (malloc_user_name)) free (user_name); /* If we found a home directory use this. */ if (p != NULL) { size_t home_len = strlen (p->pw_dir); size_t rest_len = end_name == NULL ? 0 : strlen (end_name); /* dirname contains end_name; we can't free it now. */ char *prev_dirname = (__glibc_unlikely (malloc_dirname) ? dirname : NULL); char *d; malloc_dirname = 0; if (glob_use_alloca (alloca_used, home_len + rest_len + 1)) dirname = alloca_account (home_len + rest_len + 1, alloca_used); else { dirname = malloc (home_len + rest_len + 1); if (dirname == NULL) { free (prev_dirname); scratch_buffer_free (&pwtmpbuf); retval = GLOB_NOSPACE; goto out; } malloc_dirname = 1; } d = mempcpy (dirname, p->pw_dir, home_len); if (end_name != NULL) d = mempcpy (d, end_name, rest_len); *d = '\0'; free (prev_dirname); dirlen = home_len + rest_len; dirname_modified = 1; } else { if (flags & GLOB_TILDE_CHECK) { /* We have to regard it as an error if we cannot find the home directory. */ retval = GLOB_NOMATCH; goto out; } } scratch_buffer_free (&pwtmpbuf); } #else /* WINDOWS32 */ /* On native Windows, access to a user's home directory (via GetUserProfileDirectory) or to a user's environment variables (via ExpandEnvironmentStringsForUser) requires the credentials of the user. Therefore we cannot support the ~user syntax on this platform. Handling ~user specially (and treat it like plain ~) if user is getenv ("USERNAME") would not be a good idea, since it would make people think that ~user is supported in general. */ if (flags & GLOB_TILDE_CHECK) { retval = GLOB_NOMATCH; goto out; } #endif /* WINDOWS32 */ } } /* Now test whether we looked for "~" or "~NAME". In this case we can give the answer now. */ if (filename == NULL) { size_t newcount = pglob->gl_pathc + pglob->gl_offs; char **new_gl_pathv; if (newcount > SIZE_MAX / sizeof (char *) - 2) { nospace: free (pglob->gl_pathv); pglob->gl_pathv = NULL; pglob->gl_pathc = 0; retval = GLOB_NOSPACE; goto out; } new_gl_pathv = realloc (pglob->gl_pathv, (newcount + 2) * sizeof (char *)); if (new_gl_pathv == NULL) goto nospace; pglob->gl_pathv = new_gl_pathv; if (flags & GLOB_MARK && is_dir (dirname, flags, pglob)) { char *p; pglob->gl_pathv[newcount] = malloc (dirlen + 2); if (pglob->gl_pathv[newcount] == NULL) goto nospace; p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen); p[0] = '/'; p[1] = '\0'; if (__glibc_unlikely (malloc_dirname)) free (dirname); } else { if (__glibc_unlikely (malloc_dirname)) pglob->gl_pathv[newcount] = dirname; else { pglob->gl_pathv[newcount] = strdup (dirname); if (pglob->gl_pathv[newcount] == NULL) goto nospace; } } pglob->gl_pathv[++newcount] = NULL; ++pglob->gl_pathc; pglob->gl_flags = flags; return 0; } meta = __glob_pattern_type (dirname, !(flags & GLOB_NOESCAPE)); /* meta is 1 if correct glob pattern containing metacharacters. If meta has bit (1 << 2) set, it means there was an unterminated [ which we handle the same, using fnmatch. Broken unterminated pattern bracket expressions ought to be rare enough that it is not worth special casing them, fnmatch will do the right thing. */ if (meta & (GLOBPAT_SPECIAL | GLOBPAT_BRACKET)) { /* The directory name contains metacharacters, so we have to glob for the directory, and then glob for the pattern in each directory found. */ size_t i; if (!(flags & GLOB_NOESCAPE) && dirlen > 0 && dirname[dirlen - 1] == '\\') { /* "foo\\/bar". Remove the final backslash from dirname if it has not been quoted. */ char *p = (char *) &dirname[dirlen - 1]; while (p > dirname && p[-1] == '\\') --p; if ((&dirname[dirlen] - p) & 1) *(char *) &dirname[--dirlen] = '\0'; } if (__glibc_unlikely ((flags & GLOB_ALTDIRFUNC) != 0)) { /* Use the alternative access functions also in the recursive call. */ dirs.gl_opendir = pglob->gl_opendir; dirs.gl_readdir = pglob->gl_readdir; dirs.gl_closedir = pglob->gl_closedir; dirs.gl_stat = pglob->gl_stat; dirs.gl_lstat = pglob->gl_lstat; } status = __glob (dirname, ((flags & (GLOB_ERR | GLOB_NOESCAPE | GLOB_ALTDIRFUNC)) | GLOB_NOSORT | GLOB_ONLYDIR), errfunc, &dirs); if (status != 0) { if ((flags & GLOB_NOCHECK) == 0 || status != GLOB_NOMATCH) { retval = status; goto out; } goto no_matches; } /* We have successfully globbed the preceding directory name. For each name we found, call glob_in_dir on it and FILENAME, appending the results to PGLOB. */ for (i = 0; i < dirs.gl_pathc; ++i) { size_t old_pathc; old_pathc = pglob->gl_pathc; status = glob_in_dir (filename, dirs.gl_pathv[i], ((flags | GLOB_APPEND) & ~(GLOB_NOCHECK | GLOB_NOMAGIC)), errfunc, pglob, alloca_used); if (status == GLOB_NOMATCH) /* No matches in this directory. Try the next. */ continue; if (status != 0) { globfree (&dirs); globfree (pglob); pglob->gl_pathc = 0; retval = status; goto out; } /* Stick the directory on the front of each name. */ if (prefix_array (dirs.gl_pathv[i], &pglob->gl_pathv[old_pathc + pglob->gl_offs], pglob->gl_pathc - old_pathc)) { globfree (&dirs); globfree (pglob); pglob->gl_pathc = 0; retval = GLOB_NOSPACE; goto out; } } flags |= GLOB_MAGCHAR; /* We have ignored the GLOB_NOCHECK flag in the 'glob_in_dir' calls. But if we have not found any matching entry and the GLOB_NOCHECK flag was set we must return the input pattern itself. */ if (pglob->gl_pathc + pglob->gl_offs == oldcount) { no_matches: /* No matches. */ if (flags & GLOB_NOCHECK) { size_t newcount = pglob->gl_pathc + pglob->gl_offs; char **new_gl_pathv; if (newcount > SIZE_MAX / sizeof (char *) - 2) { nospace2: globfree (&dirs); retval = GLOB_NOSPACE; goto out; } new_gl_pathv = realloc (pglob->gl_pathv, (newcount + 2) * sizeof (char *)); if (new_gl_pathv == NULL) goto nospace2; pglob->gl_pathv = new_gl_pathv; pglob->gl_pathv[newcount] = strdup (pattern); if (pglob->gl_pathv[newcount] == NULL) { globfree (&dirs); globfree (pglob); pglob->gl_pathc = 0; retval = GLOB_NOSPACE; goto out; } ++pglob->gl_pathc; ++newcount; pglob->gl_pathv[newcount] = NULL; pglob->gl_flags = flags; } else { globfree (&dirs); retval = GLOB_NOMATCH; goto out; } } globfree (&dirs); } else { size_t old_pathc = pglob->gl_pathc; int orig_flags = flags; if (meta & GLOBPAT_BACKSLASH) { char *p = strchr (dirname, '\\'), *q; /* We need to unescape the dirname string. It is certainly allocated by alloca, as otherwise filename would be NULL or dirname wouldn't contain backslashes. */ q = p; do { if (*p == '\\') { *q = *++p; --dirlen; } else *q = *p; ++q; } while (*p++ != '\0'); dirname_modified = 1; } if (dirname_modified) flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC); status = glob_in_dir (filename, dirname, flags, errfunc, pglob, alloca_used); if (status != 0) { if (status == GLOB_NOMATCH && flags != orig_flags && pglob->gl_pathc + pglob->gl_offs == oldcount) { /* Make sure globfree (&dirs); is a nop. */ dirs.gl_pathv = NULL; flags = orig_flags; goto no_matches; } retval = status; goto out; } if (dirlen > 0) { /* Stick the directory on the front of each name. */ if (prefix_array (dirname, &pglob->gl_pathv[old_pathc + pglob->gl_offs], pglob->gl_pathc - old_pathc)) { globfree (pglob); pglob->gl_pathc = 0; retval = GLOB_NOSPACE; goto out; } } } if (flags & GLOB_MARK) { /* Append slashes to directory names. */ size_t i; for (i = oldcount; i < pglob->gl_pathc + pglob->gl_offs; ++i) if (is_dir (pglob->gl_pathv[i], flags, pglob)) { size_t len = strlen (pglob->gl_pathv[i]) + 2; char *new = realloc (pglob->gl_pathv[i], len); if (new == NULL) { globfree (pglob); pglob->gl_pathc = 0; retval = GLOB_NOSPACE; goto out; } strcpy (&new[len - 2], "/"); pglob->gl_pathv[i] = new; } } if (!(flags & GLOB_NOSORT)) { /* Sort the vector. */ qsort (&pglob->gl_pathv[oldcount], pglob->gl_pathc + pglob->gl_offs - oldcount, sizeof (char *), collated_compare); } out: if (__glibc_unlikely (malloc_dirname)) free (dirname); return retval; } #if defined _LIBC && !defined __glob versioned_symbol (libc, __glob, glob, GLIBC_2_27); libc_hidden_ver (__glob, glob) #endif /* Do a collated comparison of A and B. */ static int collated_compare (const void *a, const void *b) { char *const *ps1 = a; char *s1 = *ps1; char *const *ps2 = b; char *s2 = *ps2; if (s1 == s2) return 0; if (s1 == NULL) return 1; if (s2 == NULL) return -1; return strcoll (s1, s2); } /* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's elements in place. Return nonzero if out of memory, zero if successful. A slash is inserted between DIRNAME and each elt of ARRAY, unless DIRNAME is just "/". Each old element of ARRAY is freed. */ static int prefix_array (const char *dirname, char **array, size_t n) { size_t i; size_t dirlen = strlen (dirname); char dirsep_char = '/'; if (dirlen == 1 && dirname[0] == '/') /* DIRNAME is just "/", so normal prepending would get us "//foo". We want "/foo" instead, so don't prepend any chars from DIRNAME. */ dirlen = 0; #if defined __MSDOS__ || defined WINDOWS32 if (dirlen > 1) { if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':') /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */ --dirlen; else if (dirname[dirlen - 1] == ':') { /* DIRNAME is "d:". Use ':' instead of '/'. */ --dirlen; dirsep_char = ':'; } } #endif for (i = 0; i < n; ++i) { size_t eltlen = strlen (array[i]) + 1; char *new = malloc (dirlen + 1 + eltlen); if (new == NULL) { while (i > 0) free (array[--i]); return 1; } { char *endp = mempcpy (new, dirname, dirlen); *endp++ = dirsep_char; mempcpy (endp, array[i], eltlen); } free (array[i]); array[i] = new; } return 0; } /* Like 'glob', but PATTERN is a final pathname component, and matches are searched for in DIRECTORY. The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done. The GLOB_APPEND flag is assumed to be set (always appends). */ static int glob_in_dir (const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob, size_t alloca_used) { size_t dirlen = strlen (directory); void *stream = NULL; # define GLOBNAMES_MEMBERS(nnames) \ struct globnames *next; size_t count; char *name[nnames]; struct globnames { GLOBNAMES_MEMBERS (FLEXIBLE_ARRAY_MEMBER) }; struct { GLOBNAMES_MEMBERS (64) } init_names_buf; struct globnames *init_names = (struct globnames *) &init_names_buf; struct globnames *names = init_names; struct globnames *names_alloca = init_names; size_t nfound = 0; size_t cur = 0; int meta; int save; int result; alloca_used += sizeof init_names_buf; init_names->next = NULL; init_names->count = ((sizeof init_names_buf - offsetof (struct globnames, name)) / sizeof init_names->name[0]); meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE)); if (meta == GLOBPAT_NONE && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) { /* We need not do any tests. The PATTERN contains no meta characters and we must not return an error therefore the result will always contain exactly one name. */ flags |= GLOB_NOCHECK; } else if (meta == GLOBPAT_NONE) { size_t patlen = strlen (pattern); size_t fullsize; bool alloca_fullname = (! size_add_wrapv (dirlen + 1, patlen + 1, &fullsize) && glob_use_alloca (alloca_used, fullsize)); char *fullname; if (alloca_fullname) fullname = alloca_account (fullsize, alloca_used); else { fullname = malloc (fullsize); if (fullname == NULL) return GLOB_NOSPACE; } mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), "/", 1), pattern, patlen + 1); if (glob_lstat (pglob, flags, fullname) == 0 || errno == EOVERFLOW) /* We found this file to be existing. Now tell the rest of the function to copy this name into the result. */ flags |= GLOB_NOCHECK; if (__glibc_unlikely (!alloca_fullname)) free (fullname); } else { stream = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) ? (*pglob->gl_opendir) (directory) : opendir (directory)); if (stream == NULL) { if (errno != ENOTDIR && ((errfunc != NULL && (*errfunc) (directory, errno)) || (flags & GLOB_ERR))) return GLOB_ABORTED; } else { int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)); flags |= GLOB_MAGCHAR; while (1) { struct readdir_result d; { if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) d = convert_dirent (GL_READDIR (pglob, stream)); else { #ifdef COMPILE_GLOB64 d = convert_dirent (__readdir (stream)); #else d = convert_dirent64 (__readdir64 (stream)); #endif } } if (d.name == NULL) break; /* If we shall match only directories use the information provided by the dirent call if possible. */ if (flags & GLOB_ONLYDIR) switch (readdir_result_type (d)) { case DT_DIR: case DT_LNK: case DT_UNKNOWN: break; default: continue; } if (fnmatch (pattern, d.name, fnm_flags) == 0) { if (cur == names->count) { struct globnames *newnames; size_t count = names->count * 2; size_t nameoff = offsetof (struct globnames, name); size_t size = FLEXSIZEOF (struct globnames, name, count * sizeof (char *)); if ((SIZE_MAX - nameoff) / 2 / sizeof (char *) < names->count) goto memory_error; if (glob_use_alloca (alloca_used, size)) newnames = names_alloca = alloca_account (size, alloca_used); else if ((newnames = malloc (size)) == NULL) goto memory_error; newnames->count = count; newnames->next = names; names = newnames; cur = 0; } names->name[cur] = strdup (d.name); if (names->name[cur] == NULL) goto memory_error; ++cur; ++nfound; if (SIZE_MAX - pglob->gl_offs <= nfound) goto memory_error; } } } } if (nfound == 0 && (flags & GLOB_NOCHECK)) { size_t len = strlen (pattern); nfound = 1; names->name[cur] = malloc (len + 1); if (names->name[cur] == NULL) goto memory_error; *((char *) mempcpy (names->name[cur++], pattern, len)) = '\0'; } result = GLOB_NOMATCH; if (nfound != 0) { char **new_gl_pathv; result = 0; if (SIZE_MAX / sizeof (char *) - pglob->gl_pathc < pglob->gl_offs + nfound + 1) goto memory_error; new_gl_pathv = realloc (pglob->gl_pathv, (pglob->gl_pathc + pglob->gl_offs + nfound + 1) * sizeof (char *)); if (new_gl_pathv == NULL) { memory_error: while (1) { struct globnames *old = names; for (size_t i = 0; i < cur; ++i) free (names->name[i]); names = names->next; /* NB: we will not leak memory here if we exit without freeing the current block assigned to OLD. At least the very first block is always allocated on the stack and this is the block assigned to OLD here. */ if (names == NULL) { assert (old == init_names); break; } cur = names->count; if (old == names_alloca) names_alloca = names; else free (old); } result = GLOB_NOSPACE; } else { while (1) { struct globnames *old = names; for (size_t i = 0; i < cur; ++i) new_gl_pathv[pglob->gl_offs + pglob->gl_pathc++] = names->name[i]; names = names->next; /* NB: we will not leak memory here if we exit without freeing the current block assigned to OLD. At least the very first block is always allocated on the stack and this is the block assigned to OLD here. */ if (names == NULL) { assert (old == init_names); break; } cur = names->count; if (old == names_alloca) names_alloca = names; else free (old); } pglob->gl_pathv = new_gl_pathv; pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; pglob->gl_flags = flags; } } if (stream != NULL) { save = errno; if (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)) (*pglob->gl_closedir) (stream); else closedir (stream); __set_errno (save); } return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glob.in.h���������������������������������������������������������������0000664�0000000�0000000�00000012747�14110572173�0016561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* glob.h -- Find a path matching a pattern. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.EDU> 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@_GLOB_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_GLOB_H@ && !@REPLACE_GLOB@ # @INCLUDE_NEXT@ @NEXT_GLOB_H@ #endif #ifndef _@GUARD_PREFIX@_GLOB_H #define _@GUARD_PREFIX@_GLOB_H /* 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. */ /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif #ifdef __cplusplus extern "C" { #endif typedef int (*_gl_glob_errfunc_fn) (const char *, int); #ifdef __cplusplus } #endif #if !@HAVE_GLOB_H@ || @REPLACE_GLOB@ /* Preparations for including the standard GNU C Library header. */ # include <stddef.h> /* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64". Make sure this definition is seen before glob-libc.h defines types that rely on 'struct stat'. */ # include <sys/stat.h> # if @REPLACE_GLOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define glob rpl_glob # define globfree rpl_globfree # endif # endif # if @REPLACE_GLOB_PATTERN_P@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define glob_pattern_p rpl_glob_pattern_p # endif # endif # define __glob_pattern_p glob_pattern_p # define __GLOB_GNULIB 1 /* Now the standard GNU C Library header should work. */ # include "glob-libc.gl.h" #endif #if @GNULIB_GLOB@ # if @REPLACE_GLOB@ _GL_FUNCDECL_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob)); # else # if !@HAVE_GLOB@ _GL_FUNCDECL_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob)); # endif _GL_CXXALIASWARN (glob); #elif defined GNULIB_POSIXCHECK # undef glob # if HAVE_RAW_DECL_GLOB _GL_WARN_ON_USE (glob, "glob is unportable - " "use gnulib module glob for portability"); # endif #endif #if @GNULIB_GLOB@ # if @REPLACE_GLOB@ _GL_FUNCDECL_RPL (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (globfree, void, (glob_t *__pglob)); # else # if !@HAVE_GLOB@ _GL_FUNCDECL_SYS (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (globfree, void, (glob_t *__pglob)); # endif _GL_CXXALIASWARN (globfree); #elif defined GNULIB_POSIXCHECK # undef globfree # if HAVE_RAW_DECL_GLOBFREE _GL_WARN_ON_USE (globfree, "globfree is unportable - " "use gnulib module glob for portability"); # endif #endif #if @GNULIB_GLOB@ # if @REPLACE_GLOB_PATTERN_P@ _GL_FUNCDECL_RPL (glob_pattern_p, int, (const char *__pattern, int __quote) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (glob_pattern_p, int, (const char *__pattern, int __quote)); # else # if !@HAVE_GLOB_PATTERN_P@ _GL_FUNCDECL_SYS (glob_pattern_p, int, (const char *__pattern, int __quote) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (glob_pattern_p, int, (const char *__pattern, int __quote)); # endif _GL_CXXALIASWARN (glob_pattern_p); #elif defined GNULIB_POSIXCHECK # undef glob_pattern_p # if HAVE_RAW_DECL_GLOB_PATTERN_P _GL_WARN_ON_USE (glob_pattern_p, "glob_pattern_p is unportable - " "use gnulib module glob for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_GLOB_H */ #endif /* _@GUARD_PREFIX@_GLOB_H */ �������������������������gnulib-20210822~d383792/lib/glob_internal.h���������������������������������������������������������0000664�0000000�0000000�00000003124�14110572173�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Shared definition for glob and glob_pattern_p. Copyright (C) 2017-2021 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 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 GLOB_INTERNAL_H # define GLOB_INTERNAL_H enum { GLOBPAT_NONE = 0x0, GLOBPAT_SPECIAL = 0x1, GLOBPAT_BACKSLASH = 0x2, GLOBPAT_BRACKET = 0x4 }; static inline int __glob_pattern_type (const char *pattern, int quote) { const char *p; int ret = GLOBPAT_NONE; for (p = pattern; *p != '\0'; ++p) switch (*p) { case '?': case '*': return GLOBPAT_SPECIAL; case '\\': if (quote) { if (p[1] != '\0') ++p; ret |= GLOBPAT_BACKSLASH; } break; case '[': ret |= GLOBPAT_BRACKET; break; case ']': if (ret & 4) return GLOBPAT_SPECIAL; break; } return ret; } #endif /* GLOB_INTERNAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glob_pattern_p.c��������������������������������������������������������0000664�0000000�0000000�00000002334�14110572173�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return nonzero if PATTERN contains any metacharacters. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <glob.h> #include "glob_internal.h" /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ int __glob_pattern_p (const char *pattern, int quote) { return __glob_pattern_type (pattern, quote) == GLOBPAT_SPECIAL; } weak_alias (__glob_pattern_p, glob_pattern_p) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/globfree.c��������������������������������������������������������������0000664�0000000�0000000�00000002444�14110572173�0017002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Frees the dynamically allocated storage from an earlier call to glob. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <glob.h> #include <stdlib.h> /* Free storage allocated in PGLOB by a previous `glob' call. */ void globfree (glob_t *pglob) { if (pglob->gl_pathv != NULL) { size_t i; for (i = 0; i < pglob->gl_pathc; ++i) free (pglob->gl_pathv[pglob->gl_offs + i]); free (pglob->gl_pathv); pglob->gl_pathv = NULL; } } #ifndef globfree libc_hidden_def (globfree) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016637�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/cond.c���������������������������������������������������������0000664�0000000�0000000�00000006046�14110572173�0017734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables for multithreading. Copyright (C) 2008-2021 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 Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008, and Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #define _GLTHREAD_COND_INLINE _GL_EXTERN_INLINE #include "glthread/cond.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS int glthread_cond_init (gl_cond_t *condition) { if (cnd_init (&condition->condition) != thrd_success) return ENOMEM; condition->init_needed = 0; return 0; } int glthread_cond_wait (gl_cond_t *condition, gl_lock_t *lock) { if (condition->init_needed) call_once (&condition->init_once, condition->init_func); if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (cnd_wait (&condition->condition, &lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_cond_timedwait (gl_cond_t *condition, gl_lock_t *lock, const struct timespec *abstime) { if (condition->init_needed) call_once (&condition->init_once, condition->init_func); if (lock->init_needed) call_once (&lock->init_once, lock->init_func); switch (cnd_timedwait (&condition->condition, &lock->mutex, abstime)) { case thrd_success: break; case thrd_timedout: return ETIMEDOUT; default: return EINVAL; } return 0; } int glthread_cond_signal (gl_cond_t *condition) { if (condition->init_needed) call_once (&condition->init_once, condition->init_func); if (cnd_signal (&condition->condition) != thrd_success) return EINVAL; return 0; } int glthread_cond_broadcast (gl_cond_t *condition) { if (condition->init_needed) call_once (&condition->init_once, condition->init_func); if (cnd_broadcast (&condition->condition) != thrd_success) return EINVAL; return 0; } int glthread_cond_destroy (gl_cond_t *condition) { if (condition->init_needed) call_once (&condition->init_once, condition->init_func); cnd_destroy (&condition->condition); return 0; } #endif /* ========================================================================= */ #if USE_POSIX_THREADS #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/cond.h���������������������������������������������������������0000664�0000000�0000000�00000026267�14110572173�0017750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables for multithreading. Copyright (C) 2005-2021 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 Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008. Based on Bruno Haible <bruno@clisp.org> lock.h */ /* Condition variables can be used for waiting until a condition becomes true. In this respect, they are similar to wait queues. But contrary to wait queues, condition variables have different semantics that allows events to be lost when there is no thread waiting for them. Condition variable: Type: gl_cond_t Declaration: gl_cond_define(extern, name) Initializer: gl_cond_define_initialized(, name) Initialization: gl_cond_init (name); Waiting: gl_cond_wait (name, lock); Timed wait: bool timedout = gl_cond_timedwait (name, lock, abstime); where lock is a gl_lock_t variable (cf. <glthread/lock.h>) Signaling: gl_cond_signal (name); Broadcasting: gl_cond_broadcast (name); De-initialization: gl_cond_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_cond_init (&name); Waiting: err = glthread_cond_wait (&name); Timed wait: err = glthread_cond_timedwait (&name, &lock, abstime); Signaling: err = glthread_cond_signal (&name); Broadcasting: err = glthread_cond_broadcast (&name); De-initialization: err = glthread_cond_destroy (&name); */ #ifndef _GLTHREAD_COND_H #define _GLTHREAD_COND_H #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> #include "glthread/lock.h" #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GLTHREAD_COND_INLINE # define _GLTHREAD_COND_INLINE _GL_INLINE #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_cond_t datatype -------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); cnd_t condition; } gl_cond_t; # define gl_cond_define(STORAGECLASS, NAME) \ STORAGECLASS gl_cond_t NAME; # define gl_cond_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_cond_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_cond_init (&(NAME))) \ abort (); \ } extern int glthread_cond_init (gl_cond_t *condition); extern int glthread_cond_wait (gl_cond_t *condition, gl_lock_t *lock); extern int glthread_cond_timedwait (gl_cond_t *condition, gl_lock_t *lock, const struct timespec *abstime); extern int glthread_cond_signal (gl_cond_t *condition); extern int glthread_cond_broadcast (gl_cond_t *condition); extern int glthread_cond_destroy (gl_cond_t *condition); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_timedwait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_cond_t datatype -------------------------- */ typedef pthread_cond_t gl_cond_t; # define gl_cond_define(STORAGECLASS, NAME) \ STORAGECLASS gl_cond_t NAME; # define gl_cond_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_cond_t NAME = gl_cond_initializer; # define gl_cond_initializer \ PTHREAD_COND_INITIALIZER # define glthread_cond_init(COND) \ (pthread_in_use () ? pthread_cond_init (COND, NULL) : 0) # define glthread_cond_wait(COND, LOCK) \ (pthread_in_use () ? pthread_cond_wait (COND, LOCK) : 0) # define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ (pthread_in_use () ? pthread_cond_timedwait (COND, LOCK, ABSTIME) : 0) # define glthread_cond_signal(COND) \ (pthread_in_use () ? pthread_cond_signal (COND) : 0) # define glthread_cond_broadcast(COND) \ (pthread_in_use () ? pthread_cond_broadcast (COND) : 0) # define glthread_cond_destroy(COND) \ (pthread_in_use () ? pthread_cond_destroy (COND) : 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-cond.h" # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_cond_t datatype -------------------------- */ typedef glwthread_cond_t gl_cond_t; # define gl_cond_define(STORAGECLASS, NAME) \ STORAGECLASS gl_cond_t NAME; # define gl_cond_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_cond_t NAME = gl_cond_initializer; # define gl_cond_initializer \ GLWTHREAD_COND_INIT # define glthread_cond_init(COND) \ glwthread_cond_init (COND) # define glthread_cond_wait(COND, LOCK) \ glwthread_cond_wait (COND, LOCK, \ (int (*) (void *)) glwthread_mutex_lock, \ (int (*) (void *)) glwthread_mutex_unlock) # define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ glwthread_cond_timedwait (COND, LOCK, \ (int (*) (void *)) glwthread_mutex_lock, \ (int (*) (void *)) glwthread_mutex_unlock, \ ABSTIME) # define glthread_cond_signal(COND) \ glwthread_cond_signal (COND) # define glthread_cond_broadcast(COND) \ glwthread_cond_broadcast (COND) # define glthread_cond_destroy(COND) \ glwthread_cond_destroy (COND) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ typedef int gl_cond_t; # define gl_cond_define(STORAGECLASS, NAME) # define gl_cond_define_initialized(STORAGECLASS, NAME) # define glthread_cond_init(COND) 0 # define glthread_cond_wait(COND, LOCK) 0 # define glthread_cond_timedwait(COND, LOCK, ABSTIME) 0 # define glthread_cond_signal(COND) 0 # define glthread_cond_broadcast(COND) 0 # define glthread_cond_destroy(COND) 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ #ifdef __cplusplus extern "C" { #endif #define gl_cond_init(COND) \ do \ { \ if (glthread_cond_init (&COND)) \ abort (); \ } \ while (0) #define gl_cond_wait(COND, LOCK) \ do \ { \ if (glthread_cond_wait (&COND, &LOCK)) \ abort (); \ } \ while (0) #define gl_cond_timedwait(COND, LOCK, ABSTIME) \ gl_cond_timedwait_func (&COND, &LOCK, ABSTIME) _GLTHREAD_COND_INLINE bool gl_cond_timedwait_func (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime) { int err = glthread_cond_timedwait (cond, lock, abstime); if (err == ETIMEDOUT) return true; if (err != 0) abort (); return false; } #define gl_cond_signal(COND) \ do \ { \ if (glthread_cond_signal (&COND)) \ abort (); \ } \ while (0) #define gl_cond_broadcast(COND) \ do \ { \ if (glthread_cond_broadcast (&COND)) \ abort (); \ } \ while (0) #define gl_cond_destroy(COND) \ do \ { \ if (glthread_cond_destroy (&COND)) \ abort (); \ } \ while (0) #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GLTHREAD_COND_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/lock.c���������������������������������������������������������0000664�0000000�0000000�00000044211�14110572173�0017735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h. */ #include <config.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ int glthread_lock_init (gl_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_lock_lock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_lock_unlock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_lock_destroy (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ int glthread_rwlock_init (gl_rwlock_t *lock) { if (mtx_init (&lock->lock, mtx_plain) != thrd_success || cnd_init (&lock->waiting_readers) != thrd_success || cnd_init (&lock->waiting_writers) != thrd_success) return ENOMEM; lock->waiting_writers_count = 0; lock->runcount = 0; lock->init_needed = 0; return 0; } int glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } lock->runcount++; if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success) { lock->waiting_writers_count--; mtx_unlock (&lock->lock); return EINVAL; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_unlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (cnd_signal (&lock->waiting_writers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } else { /* Wake up all waiting readers. */ if (cnd_broadcast (&lock->waiting_readers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } } if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_destroy (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->lock); cnd_destroy (&lock->waiting_readers); cnd_destroy (&lock->waiting_writers); return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } # if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK) int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)) { int err = pthread_once (once_control, init_function); if (err == ENOSYS) { /* This happens on FreeBSD 11: The pthread_once function in libc returns ENOSYS. */ if (glthread_once_singlethreaded (once_control)) init_function (); return 0; } return err; } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/lock.h���������������������������������������������������������0000664�0000000�0000000�00000075466�14110572173�0017762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_lock_init (&(NAME))) \ abort (); \ } extern int glthread_lock_init (gl_lock_t *lock); extern int glthread_lock_lock (gl_lock_t *lock); extern int glthread_lock_unlock (gl_lock_t *lock); extern int glthread_lock_destroy (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t lock; /* protects the remaining fields */ cnd_t waiting_readers; /* waiting readers */ cnd_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_rwlock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_rwlock_init (&(NAME))) \ abort (); \ } extern int glthread_rwlock_init (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); extern int glthread_rwlock_unlock (gl_rwlock_t *lock); extern int glthread_rwlock_destroy (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_recursive_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_recursive_lock_init (&(NAME))) \ abort (); \ } extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef once_flag gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (call_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols can be used to determine whether libpthread is in use. These are: pthread_mutexattr_gettype pthread_rwlockattr_destroy pthread_rwlockattr_init */ # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # if defined PTHREAD_RWLOCK_INITIALIZER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # else # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER_NP # endif # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) # else # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)); # endif extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-mutex.h" # include "windows-rwlock.h" # include "windows-recmutex.h" # include "windows-once.h" # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef glwthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ GLWTHREAD_MUTEX_INIT # define glthread_lock_init(LOCK) \ (glwthread_mutex_init (LOCK), 0) # define glthread_lock_lock(LOCK) \ glwthread_mutex_lock (LOCK) # define glthread_lock_unlock(LOCK) \ glwthread_mutex_unlock (LOCK) # define glthread_lock_destroy(LOCK) \ glwthread_mutex_destroy (LOCK) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef glwthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ GLWTHREAD_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (glwthread_rwlock_init (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glwthread_rwlock_rdlock (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glwthread_rwlock_wrlock (LOCK) # define glthread_rwlock_unlock(LOCK) \ glwthread_rwlock_unlock (LOCK) # define glthread_rwlock_destroy(LOCK) \ glwthread_rwlock_destroy (LOCK) /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef glwthread_recmutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ GLWTHREAD_RECMUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (glwthread_recmutex_init (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glwthread_recmutex_lock (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glwthread_recmutex_unlock (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glwthread_recmutex_destroy (LOCK) /* -------------------------- gl_once_t datatype -------------------------- */ typedef glwthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/thread.c�������������������������������������������������������0000664�0000000�0000000�00000013174�14110572173�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ #include <config.h> /* Specification. */ #include "glthread/thread.h" #include <stdlib.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS struct thrd_with_exitvalue { thrd_t volatile tid; void * volatile exitvalue; }; /* The Thread-Specific Storage (TSS) key that allows to access each thread's 'struct thrd_with_exitvalue *' pointer. */ static tss_t thrd_with_exitvalue_key; /* Initializes thrd_with_exitvalue_key. This function must only be called once. */ static void do_init_thrd_with_exitvalue_key (void) { if (tss_create (&thrd_with_exitvalue_key, NULL) != thrd_success) abort (); } /* Initializes thrd_with_exitvalue_key. */ static void init_thrd_with_exitvalue_key (void) { static once_flag once = ONCE_FLAG_INIT; call_once (&once, do_init_thrd_with_exitvalue_key); } typedef union { struct thrd_with_exitvalue t; struct { thrd_t tid; /* reserve memory for t.tid */ void *(*mainfunc) (void *); void *arg; } a; } main_arg_t; static int thrd_main_func (void *pmarg) { /* Unpack the object that combines mainfunc and arg. */ main_arg_t *main_arg = (main_arg_t *) pmarg; void *(*mainfunc) (void *) = main_arg->a.mainfunc; void *arg = main_arg->a.arg; if (tss_set (thrd_with_exitvalue_key, &main_arg->t) != thrd_success) abort (); /* Execute mainfunc, with arg as argument. */ { void *exitvalue = mainfunc (arg); /* Store the exitvalue, for use by glthread_join(). */ main_arg->t.exitvalue = exitvalue; return 0; } } int glthread_create (gl_thread_t *threadp, void *(*mainfunc) (void *), void *arg) { init_thrd_with_exitvalue_key (); { /* Combine mainfunc and arg in a single object. A stack-allocated object does not work, because it would be out of existence when thrd_create returns before thrd_main_func is entered. So, allocate it in the heap. */ main_arg_t *main_arg = (main_arg_t *) malloc (sizeof (main_arg_t)); if (main_arg == NULL) return ENOMEM; main_arg->a.mainfunc = mainfunc; main_arg->a.arg = arg; switch (thrd_create ((thrd_t *) &main_arg->t.tid, thrd_main_func, main_arg)) { case thrd_success: break; case thrd_nomem: free (main_arg); return ENOMEM; default: free (main_arg); return EAGAIN; } *threadp = &main_arg->t; return 0; } } gl_thread_t gl_thread_self (void) { init_thrd_with_exitvalue_key (); { gl_thread_t thread = (struct thrd_with_exitvalue *) tss_get (thrd_with_exitvalue_key); if (thread == NULL) { /* This happens only in threads that have not been created through glthread_create(), such as the main thread. */ for (;;) { thread = (struct thrd_with_exitvalue *) malloc (sizeof (struct thrd_with_exitvalue)); if (thread != NULL) break; /* 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; thrd_sleep (&ts, NULL); } } thread->tid = thrd_current (); thread->exitvalue = NULL; /* just to be deterministic */ if (tss_set (thrd_with_exitvalue_key, thread) != thrd_success) abort (); } return thread; } } int glthread_join (gl_thread_t thread, void **return_value_ptr) { /* On Solaris 11.4, thrd_join crashes when the second argument we pass is NULL. */ int dummy; if (thread == gl_thread_self ()) return EINVAL; if (thrd_join (thread->tid, &dummy) != thrd_success) return EINVAL; if (return_value_ptr != NULL) *return_value_ptr = thread->exitvalue; free (thread); return 0; } _Noreturn void gl_thread_exit (void *return_value) { gl_thread_t thread = gl_thread_self (); thread->exitvalue = return_value; thrd_exit (0); } #endif /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS #include <pthread.h> #if defined PTW32_VERSION || defined __MVS__ const gl_thread_t gl_null_thread /* = { .p = NULL } */; #endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg) { gl_thread_t thread; int ret; ret = glthread_create (&thread, func, arg); if (ret != 0) abort (); return thread; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/thread.h�������������������������������������������������������0000664�0000000�0000000�00000026120�14110572173�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains primitives for creating and controlling threads. Thread data type: gl_thread_t. Creating a thread: thread = gl_thread_create (func, arg); Or with control of error handling: err = glthread_create (&thread, func, arg); extern int glthread_create (gl_thread_t *result, void *(*func) (void *), void *arg); Querying and changing the signal mask of a thread (not supported on all platforms): gl_thread_sigmask (how, newmask, oldmask); Or with control of error handling: err = glthread_sigmask (how, newmask, oldmask); extern int glthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask); Waiting for termination of another thread: gl_thread_join (thread, &return_value); Or with control of error handling: err = glthread_join (thread, &return_value); extern int glthread_join (gl_thread_t thread, void **return_value_ptr); Getting a reference to the current thread: current = gl_thread_self (); extern gl_thread_t gl_thread_self (void); Getting a reference to the current thread as a pointer, for debugging: ptr = gl_thread_self_pointer (); extern void * gl_thread_self_pointer (void); Terminating the current thread: gl_thread_exit (return_value); extern _Noreturn void gl_thread_exit (void *return_value); Requesting custom code to be executed at fork() time (not supported on all platforms): gl_thread_atfork (prepare_func, parent_func, child_func); Or with control of error handling: err = glthread_atfork (prepare_func, parent_func, child_func); extern int glthread_atfork (void (*prepare_func) (void), void (*parent_func) (void), void (*child_func) (void)); Note that even on platforms where this is supported, use of fork() and threads together is problematic, see <https://lists.gnu.org/r/bug-gnulib/2008-08/msg00062.html> */ #ifndef _GLTHREAD_THREAD_H #define _GLTHREAD_THREAD_H #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef struct thrd_with_exitvalue *gl_thread_t; extern int glthread_create (gl_thread_t *threadp, void *(*func) (void *), void *arg); # define glthread_sigmask(HOW, SET, OSET) \ pthread_sigmask (HOW, SET, OSET) extern int glthread_join (gl_thread_t thread, void **return_value_ptr); extern gl_thread_t gl_thread_self (void); # define gl_thread_self_pointer() \ (void *) gl_thread_self () extern _Noreturn void gl_thread_exit (void *return_value); # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> /* On IRIX, pthread_atfork is declared in <unistd.h>, not in <pthread.h>. */ # if defined __sgi # include <unistd.h> # endif # if USE_POSIX_THREADS_WEAK /* Compilers other than GCC need to see the declaration of pthread_sigmask before the "#pragma weak pthread_sigmask" below. */ # include <signal.h> # endif # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # ifndef pthread_sigmask /* Do not declare rpl_pthread_sigmask weak. */ # pragma weak pthread_sigmask # endif # pragma weak pthread_join # ifndef pthread_self # pragma weak pthread_self # endif # pragma weak pthread_exit # if HAVE_PTHREAD_ATFORK # pragma weak pthread_atfork # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_thread_t datatype -------------------------- */ /* This choice of gl_thread_t assumes that pthread_equal (a, b) is equivalent to ((a) == (b)). This is the case on all platforms in use in 2008. */ typedef pthread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (pthread_in_use () ? pthread_create (THREADP, NULL, FUNC, ARG) : ENOSYS) # define glthread_sigmask(HOW, SET, OSET) \ (pthread_in_use () ? pthread_sigmask (HOW, SET, OSET) : 0) # define glthread_join(THREAD, RETVALP) \ (pthread_in_use () ? pthread_join (THREAD, RETVALP) : 0) # ifdef PTW32_VERSION /* In pthreads-win32, pthread_t is a struct with a pointer field 'p' and other fields. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? pthread_self ().p : NULL) extern const gl_thread_t gl_null_thread; # elif defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? *((void **) pthread_self ().__) : NULL) extern const gl_thread_t gl_null_thread; # else # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : (pthread_t) 0) # define gl_thread_self_pointer() \ (pthread_in_use () ? (void *) pthread_self () : NULL) # endif # define gl_thread_exit(RETVAL) \ (void) (pthread_in_use () ? (pthread_exit (RETVAL), 0) : 0) # if HAVE_PTHREAD_ATFORK # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \ (pthread_in_use () ? pthread_atfork (PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) : 0) # else # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # endif # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-thread.h" # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef glwthread_thread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ glwthread_thread_create (THREADP, 0, FUNC, ARG) # define glthread_sigmask(HOW, SET, OSET) \ /* unsupported */ 0 # define glthread_join(THREAD, RETVALP) \ glwthread_thread_join (THREAD, RETVALP) # define gl_thread_self() \ glwthread_thread_self () # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ glwthread_thread_exit (RETVAL) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ typedef int gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) ENOSYS # define glthread_sigmask(HOW, SET, OSET) 0 # define glthread_join(THREAD, RETVALP) 0 # define gl_thread_self() 0 # define gl_thread_self_pointer() \ ((void *) gl_thread_self ()) # define gl_thread_exit(RETVAL) (void)0 # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ #ifdef __cplusplus extern "C" { #endif extern gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg); #define gl_thread_sigmask(HOW, SET, OSET) \ do \ { \ if (glthread_sigmask (HOW, SET, OSET)) \ abort (); \ } \ while (0) #define gl_thread_join(THREAD, RETVAL) \ do \ { \ if (glthread_join (THREAD, RETVAL)) \ abort (); \ } \ while (0) #define gl_thread_atfork(PREPARE, PARENT, CHILD) \ do \ { \ if (glthread_atfork (PREPARE, PARENT, CHILD)) \ abort (); \ } \ while (0) #ifdef __cplusplus } #endif #endif /* _GLTHREAD_THREAD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/threadlib.c����������������������������������������������������0000664�0000000�0000000�00000005120�14110572173�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithreading primitives. Copyright (C) 2005-2021 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>, 2005. */ #include <config.h> /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <errno.h> # include <pthread.h> # include <stdlib.h> # if PTHREAD_IN_USE_DETECTION_HARD # if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */ /* Test using pthread_key_create. */ int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_key_t key; int err = pthread_key_create (&key, NULL); if (err == ENOSYS) result = 0; else { result = 1; if (err == 0) pthread_key_delete (key); } tested = 1; } return result; } # else /* Solaris, HP-UX */ /* Test using pthread_create. */ /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/tls.c����������������������������������������������������������0000664�0000000�0000000�00000002461�14110572173�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage in multithreaded situations. Copyright (C) 2005-2021 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>, 2005. */ #include <config.h> #include "glthread/tls.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS #endif /* ========================================================================= */ #if USE_POSIX_THREADS #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/tls.h����������������������������������������������������������0000664�0000000�0000000�00000016433�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage in multithreaded situations. Copyright (C) 2005, 2007-2021 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>, 2005. */ /* This file contains thread-local storage primitives for use with a given thread library. It does not contain primitives for creating threads or for other multithreading primitives. Type: gl_tls_key_t Initialization: gl_tls_key_init (name, destructor); Getting per-thread value: gl_tls_get (name) Setting per-thread value: gl_tls_set (name, pointer); De-initialization: gl_tls_key_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_tls_key_init (&name, destructor); Setting per-thread value: err = glthread_tls_set (&name, pointer); De-initialization: err = glthread_tls_key_destroy (&name); A per-thread value is of type 'void *'. A destructor is a function pointer of type 'void (*) (void *)', called when a thread exits, and taking the last per-thread value as argument. It is unspecified whether the destructor function is called when the last per-thread value is NULL. On some platforms, the destructor function is not called at all. */ #ifndef _TLS_H #define _TLS_H #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef tss_t gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ (tss_create (KEY, DESTRUCTOR) != thrd_success ? EAGAIN : 0) # define gl_tls_get(NAME) \ tss_get (NAME) # define glthread_tls_set(KEY, POINTER) \ (tss_set (*(KEY), (POINTER)) != thrd_success ? ENOMEM : 0) # define glthread_tls_key_destroy(KEY) \ (tss_delete (*(KEY)), 0) #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ # pragma weak pthread_key_create # pragma weak pthread_getspecific # pragma weak pthread_setspecific # pragma weak pthread_key_delete # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef union { void *singlethread_value; pthread_key_t key; } gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ (pthread_in_use () \ ? pthread_key_create (&(KEY)->key, DESTRUCTOR) \ : ((KEY)->singlethread_value = NULL, 0)) # define gl_tls_get(NAME) \ (pthread_in_use () \ ? pthread_getspecific ((NAME).key) \ : (NAME).singlethread_value) # define glthread_tls_set(KEY, POINTER) \ (pthread_in_use () \ ? pthread_setspecific ((KEY)->key, (POINTER)) \ : ((KEY)->singlethread_value = (POINTER), 0)) # define glthread_tls_key_destroy(KEY) \ (pthread_in_use () ? pthread_key_delete ((KEY)->key) : 0) #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-tls.h" /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef glwthread_tls_key_t gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ glwthread_tls_key_create (KEY, DESTRUCTOR) # define gl_tls_get(NAME) \ TlsGetValue (NAME) # define glthread_tls_set(KEY, POINTER) \ (!TlsSetValue (*(KEY), POINTER) ? EINVAL : 0) # define glthread_tls_key_destroy(KEY) \ glwthread_tls_key_delete (*(KEY)) #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef struct { void *singlethread_value; } gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ ((KEY)->singlethread_value = NULL, \ (void) (DESTRUCTOR), \ 0) # define gl_tls_get(NAME) \ (NAME).singlethread_value # define glthread_tls_set(KEY, POINTER) \ ((KEY)->singlethread_value = (POINTER), 0) # define glthread_tls_key_destroy(KEY) \ 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* ------------------------- gl_tls_key_t datatype ------------------------- */ #define gl_tls_key_init(NAME, DESTRUCTOR) \ do \ { \ if (glthread_tls_key_init (&NAME, DESTRUCTOR)) \ abort (); \ } \ while (0) #define gl_tls_set(NAME, POINTER) \ do \ { \ if (glthread_tls_set (&NAME, POINTER)) \ abort (); \ } \ while (0) #define gl_tls_key_destroy(NAME) \ do \ { \ if (glthread_tls_key_destroy (&NAME)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _TLS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/glthread/yield.h��������������������������������������������������������0000664�0000000�0000000�00000004402�14110572173�0020116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Yielding the processor to other threads and processes. Copyright (C) 2005-2021 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/>. */ /* This file contains a primitive for yielding the processor to other threads. extern void gl_thread_yield (void); */ #ifndef _GLTHREAD_YIELD_H #define _GLTHREAD_YIELD_H #include <errno.h> /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ thrd_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <sched.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ sched_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ Sleep (0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ # define gl_thread_yield() 0 #endif /* ========================================================================= */ #endif /* _GLTHREAD_YIELD_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/grantpt.c���������������������������������������������������������������0000664�0000000�0000000�00000006211�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Acquire ownership of the slave side of a pseudo-terminal. Copyright (C) 1998-2002, 2009-2021 Free Software Foundation, Inc. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. 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/>. */ #include <config.h> #include <stdlib.h> #include <assert.h> #include <errno.h> #include <string.h> #include <sys/wait.h> #include <unistd.h> #if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #include "configmake.h" #include "pty-private.h" #ifndef _LIBC # define __set_errno(e) errno = (e) # define __dup2 dup2 # define __fork fork # define __setrlimit setrlimit # define __waitpid waitpid #endif int grantpt (int fd) { #if defined __OpenBSD__ || defined _WIN32 /* On OpenBSD, master and slave of a pseudo-terminal are allocated together, through an ioctl on /dev/ptm. On Windows there are no ptys. Therefore in either case there is no need for grantpt(). */ return 0; #else /* This function is most often called from a process without 'root' credentials. Use the helper program. */ int retval = -1; pid_t pid = __fork (); if (pid == -1) goto cleanup; else if (pid == 0) { /* This is executed in the child process. */ # if HAVE_SETRLIMIT && defined RLIMIT_CORE /* Disable core dumps. */ struct rlimit rl = { 0, 0 }; __setrlimit (RLIMIT_CORE, &rl); # endif /* We pass the master pseudo terminal as file descriptor PTY_FILENO. */ if (fd != PTY_FILENO) if (__dup2 (fd, PTY_FILENO) < 0) _exit (FAIL_EBADF); # ifdef CLOSE_ALL_FDS CLOSE_ALL_FDS (); # endif execle (_PATH_PT_CHOWN, strrchr (_PATH_PT_CHOWN, '/') + 1, NULL, NULL); _exit (FAIL_EXEC); } else { int w; if (__waitpid (pid, &w, 0) == -1) goto cleanup; if (!WIFEXITED (w)) __set_errno (ENOEXEC); else switch (WEXITSTATUS (w)) { case 0: retval = 0; break; case FAIL_EBADF: __set_errno (EBADF); break; case FAIL_EINVAL: __set_errno (EINVAL); break; case FAIL_EACCES: __set_errno (EACCES); break; case FAIL_EXEC: __set_errno (ENOEXEC); break; case FAIL_ENOMEM: __set_errno (ENOMEM); break; default: assert(! "getpt: internal error: invalid exit code from pt_chown"); } } cleanup: return retval; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/group-member.c����������������������������������������������������������0000664�0000000�0000000�00000005165�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* group-member.c -- determine whether group id is in calling user's group list Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include "intprops.h" /* Most processes have no more than this many groups, and for these processes we can avoid using malloc. */ enum { GROUPBUF_SIZE = 100 }; struct group_info { gid_t *group; gid_t groupbuf[GROUPBUF_SIZE]; }; static void free_group_info (struct group_info const *g) { if (g->group != g->groupbuf) free (g->group); } static int get_group_info (struct group_info *gi) { int n_groups = getgroups (GROUPBUF_SIZE, gi->groupbuf); gi->group = gi->groupbuf; if (n_groups < 0) { int n_group_slots = getgroups (0, NULL); size_t nbytes; if (! INT_MULTIPLY_WRAPV (n_group_slots, sizeof *gi->group, &nbytes)) { gi->group = malloc (nbytes); if (gi->group) n_groups = getgroups (n_group_slots, gi->group); } } /* In case of error, the user loses. */ return n_groups; } /* Return non-zero if GID is one that we have in our groups list. Note that the groups list is not guaranteed to contain the current or effective group ID, so they should generally be checked separately. */ int group_member (gid_t gid) { int i; int found; struct group_info gi; int n_groups = get_group_info (&gi); /* Search through the list looking for GID. */ found = 0; for (i = 0; i < n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; } #ifdef TEST int main (int argc, char **argv) { int i; for (i = 1; i < argc; i++) { gid_t gid; gid = atoi (argv[i]); printf ("%d: %s\n", gid, group_member (gid) ? "yes" : "no"); } exit (0); } #endif /* TEST */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hamt.c������������������������������������������������������������������0000664�0000000�0000000�00000074171�14110572173�0016154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* (Persistent) hash array mapped tries. Copyright (C) 2021 Free Software Foundation, Inc. This 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 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>, 2021. */ #include <config.h> #define _GL_HAMT_INLINE _GL_EXTERN_INLINE #include "hamt.h" #include <flexmember.h> #include <inttypes.h> #include <stdlib.h> #include "count-one-bits.h" #include "verify.h" #include "xalloc.h" /* Reference counters can be shared between different threads if the entry they belong to is shared between different threads. Operations on them therefore have to be atomic so that no invalid state is observable. A thread must not modify an entry or its children (!) if its reference count implies that the entry is shared by at least two hamts. */ typedef #if GL_HAMT_THREAD_SAFE _Atomic #endif size_t ref_counter; /***************/ /* Entry Types */ /***************/ /* Leaf nodes are of type element. Non-leaf nodes are either subtries or, if at maximal depth, buckets. The entry type is stored in the lower two bits of the reference counter, whereas reference counters for entries are incremented and decremented in multiples of 4. */ enum entry_type { element_entry = 0, subtrie_entry = 1, bucket_entry = 2 }; /* Return the type an entry. */ static enum entry_type entry_type (const Hamt_entry *entry) { return entry->ref_count & 3; } /********************/ /* Reference Counts */ /********************/ /* Initialize the reference counter, storing its type. */ static void init_ref_counter (ref_counter *counter, enum entry_type type) { *counter = 4 + type; } /* Increase the reference counter of an entry. */ static void inc_ref_counter (ref_counter *counter) { *counter += 4; } /* Decrease the entry reference counter. Return false if the entry can be deleted. */ static bool dec_ref_counter (ref_counter *counter) { *counter -= 4; return *counter >= 4; } /**************/ /* Structures */ /**************/ /* Different generations of a hamt share a function table. */ struct function_table { Hamt_hasher *hasher; Hamt_comparator *comparator; Hamt_freer *freer; ref_counter ref_count; }; /* Different generations of a hamt share subtries. A singleton subtrie is modelled as a single element. */ struct subtrie { ref_counter ref_count; /* Nodes carry labels from 0 to 31. The i-th bit in MAP is set if the node labelled i is present. */ uint32_t map; /* The length of the NODES array is the population count of MAP. The order of the nodes corresponds to the order of the 1-bits in MAP. */ Hamt_entry *nodes[FLEXIBLE_ARRAY_MEMBER]; }; /* Buckets are used when different elements have the same hash values. */ struct bucket { ref_counter ref_counter; size_t elt_count; Hamt_entry *elts[FLEXIBLE_ARRAY_MEMBER]; }; /* A hamt consists of its function table and the root entry. */ struct hamt { struct function_table *functions; /* The root entry is NULL for an empty HAMT. */ Hamt_entry *root; }; /*******************/ /* Function Tables */ /*******************/ /* Allocate and initialize a function table. */ static struct function_table * create_function_table (Hamt_hasher *hasher, Hamt_comparator *comparator, Hamt_freer *freer) { struct function_table *functions = XMALLOC (struct function_table); functions->hasher = hasher; functions->comparator = comparator; functions->freer = freer; functions->ref_count = 1; return functions; } /* Increment the reference count and return the function table. */ static struct function_table * copy_function_table (struct function_table *function_table) { ++function_table->ref_count; return function_table; } /* Decrease the reference count and free the function table if the reference count drops to zero. */ static void free_function_table (struct function_table *function_table) { if (--function_table->ref_count) return; free (function_table); } /************/ /* Elements */ /************/ /* Return an element's hash. */ static size_t hash_element (const struct function_table *functions, const Hamt_entry *elt) { return functions->hasher (elt); } /* Compare two elements. */ static bool compare_elements (const struct function_table *functions, const Hamt_entry *elt1, const Hamt_entry *elt2) { return functions->comparator (elt1, elt2); } /* Free an element. */ static void free_element (const struct function_table *functions, Hamt_entry *elt) { if (dec_ref_counter (&elt->ref_count)) return; functions->freer (elt); } /* Return the initialized element. */ static Hamt_entry * init_element (Hamt_entry *elt) { init_ref_counter (&elt->ref_count, element_entry); return elt; } /***********/ /* Buckets */ /***********/ /* Allocate a partially initialized bucket with a given number of elements. */ static struct bucket * alloc_bucket (size_t elt_count) { struct bucket *bucket = xmalloc (FLEXSIZEOF (struct bucket, elts, sizeof (Hamt_entry) * elt_count)); init_ref_counter (&bucket->ref_counter, bucket_entry); bucket->elt_count = elt_count; return bucket; } /***********/ /* Entries */ /***********/ /* Return true if the entry is shared between two or more hamts. Otherwise, return false. This procedure is used for destructive updates. If an entry and all its parents are not shared, it can be updated destructively without effecting other hamts. */ static bool is_shared (const Hamt_entry *entry) { return entry->ref_count >= 8; } /* Calculate and return the number of nodes in a subtrie. */ static int trienode_count (const struct subtrie *subtrie) { return count_one_bits (subtrie->map); /* In Gnulib, we assume that an integer has at least 32 bits. */ } /* Allocate a partially initialized subtrie with a given number of nodes. */ static struct subtrie * alloc_subtrie (int node_count) { struct subtrie *subtrie = xmalloc (FLEXSIZEOF (struct subtrie, nodes, sizeof (Hamt_entry) * node_count)); init_ref_counter (&subtrie->ref_count, subtrie_entry); return subtrie; } /* Return a conceptually copy of an entry. */ static Hamt_entry * copy_entry (Hamt_entry *entry) { inc_ref_counter (&entry->ref_count); return entry; } /* Return a new bucket that has the j-th element replaced. */ static struct bucket * replace_bucket_element (struct bucket *bucket, int j, Hamt_entry *elt) { int n = bucket->elt_count; struct bucket *new_bucket = alloc_bucket (n); for (int k = 0; k < n; ++k) if (k == j) new_bucket->elts[k] = elt; else new_bucket->elts[k] = copy_entry (bucket->elts[k]); return new_bucket; } /* Return a new subtrie that has the j-th node replaced. */ static struct subtrie * replace_entry (struct subtrie *subtrie, int j, Hamt_entry *entry) { int n = trienode_count (subtrie); struct subtrie *new_subtrie = alloc_subtrie (n); new_subtrie->map = subtrie->map; for (int k = 0; k < n; ++k) if (k == j) new_subtrie->nodes[k] = entry; else new_subtrie->nodes[k] = copy_entry (subtrie->nodes[k]); return new_subtrie; } /* Return a new subtrie that has an entry labelled i inserted at the j-th position. */ static struct subtrie * insert_entry (struct subtrie *subtrie, int i, int j, Hamt_entry *entry) { int n = trienode_count (subtrie) + 1; struct subtrie *new_subtrie = alloc_subtrie (n); new_subtrie->map = subtrie->map | (1 << i); for (int k = 0; k < n; ++k) { if (k < j) new_subtrie->nodes[k] = copy_entry (subtrie->nodes[k]); else if (k > j) new_subtrie->nodes[k] = copy_entry (subtrie->nodes[k - 1]); else new_subtrie->nodes[k] = entry; } return new_subtrie; } /* Return a new entry that has the entry labelled i removed from position j. */ static Hamt_entry * remove_subtrie_entry (struct subtrie *subtrie, int i, int j) { int n = trienode_count (subtrie) - 1; if (n == 1) { if (j == 0) return copy_entry (subtrie->nodes[1]); return copy_entry (subtrie->nodes[0]); } struct subtrie *new_subtrie = alloc_subtrie (n); new_subtrie->map = subtrie->map & ~(1 << i); for (int k = 0; k < n; ++k) { if (k < j) new_subtrie->nodes[k] = copy_entry (subtrie->nodes[k]); else if (k >= j) new_subtrie->nodes[k] = copy_entry (subtrie->nodes[k + 1]); } return (Hamt_entry *) new_subtrie; } /* Return a new entry that has the entry at position j removed. */ static Hamt_entry * remove_bucket_entry (struct bucket *bucket, int j) { int n = bucket->elt_count - 1; if (n == 1) { if (j == 0) return copy_entry (bucket->elts[1]); return copy_entry (bucket->elts[0]); } struct bucket *new_bucket = alloc_bucket (n); for (int k = 0; k < n; ++k) { if (k < j) new_bucket->elts[k] = copy_entry (bucket->elts[k]); else if (k >= j) new_bucket->elts[k] = copy_entry (bucket->elts[k + 1]); } return (Hamt_entry *) new_bucket; } /****************************/ /* Creation and Destruction */ /****************************/ /* Create a new, empty hash array mapped trie. */ Hamt * hamt_create (Hamt_hasher *hasher, Hamt_comparator *comparator, Hamt_freer *freer) { struct function_table *functions = create_function_table (hasher, comparator, freer); Hamt *hamt = XMALLOC (Hamt); hamt->functions = functions; hamt->root = NULL; return hamt; } /* Return a copy of the hamt. */ Hamt * hamt_copy (Hamt *hamt) { Hamt *new_hamt = XMALLOC (Hamt); new_hamt->functions = copy_function_table (hamt->functions); new_hamt->root = hamt->root == NULL ? NULL : copy_entry (hamt->root); return new_hamt; } /* Free a bucket. */ static void free_bucket (struct function_table const *functions, struct bucket *bucket) { if (dec_ref_counter (&bucket->ref_counter)) return; size_t elt_count = bucket->elt_count; Hamt_entry *const *elts = bucket->elts; for (size_t i = 0; i < elt_count; ++i) free_element (functions, elts[i]); free (bucket); } /* Forward declaration. */ static void free_subtrie (struct function_table const *functions, struct subtrie *subtrie); /* Free an entry. */ static void free_entry (struct function_table const *functions, Hamt_entry *entry) { switch (entry_type (entry)) { case element_entry: free_element (functions, entry); break; case subtrie_entry: free_subtrie (functions, (struct subtrie *) entry); break; case bucket_entry: free_bucket (functions, (struct bucket *) entry); break; default: assume (0); } } /* Free a trie recursively. */ static void free_subtrie (struct function_table const *functions, struct subtrie *subtrie) { if (dec_ref_counter (&subtrie->ref_count)) return; int n = trienode_count (subtrie); Hamt_entry **node_ptr = subtrie->nodes; for (int j = 0; j < n; ++j) free_entry (functions, *node_ptr++); free (subtrie); } /* Free a hamt. */ void hamt_free (Hamt *hamt) { if (hamt->root != NULL) free_entry (hamt->functions, hamt->root); free_function_table (hamt->functions); free (hamt); } /**********/ /* Lookup */ /**********/ /* Lookup an element in a bucket. */ static Hamt_entry * bucket_lookup (const struct function_table *functions, const struct bucket *bucket, const void *elt) { size_t elt_count = bucket->elt_count; Hamt_entry *const *elts = bucket->elts; for (size_t i = 0; i < elt_count; ++i) { if (compare_elements (functions, elt, elts[i])) return *elts; } return NULL; } /* Forward declaration. */ static Hamt_entry *entry_lookup (const struct function_table *functions, Hamt_entry *entry, const void *elt, size_t hash); /* Lookup an element in a bucket. */ static Hamt_entry * subtrie_lookup (const struct function_table *functions, const struct subtrie *subtrie, const void *elt, size_t hash) { uint32_t map = subtrie->map; int i = hash & 31; if (! (map & (1 << i))) return NULL; int j = i == 0 ? 0 : count_one_bits (map << (32 - i)); return entry_lookup (functions, subtrie->nodes[j], elt, hash >> 5); } /* Lookup an element in an entry. */ static Hamt_entry * entry_lookup (const struct function_table *functions, Hamt_entry *entry, const void *elt, size_t hash) { switch (entry_type (entry)) { case element_entry: if (compare_elements (functions, elt, entry)) return entry; return NULL; case subtrie_entry: return subtrie_lookup (functions, (struct subtrie *) entry, elt, hash); case bucket_entry: return bucket_lookup (functions, (struct bucket *) entry, elt); default: assume (0); } } /* If ELT matches an entry in HAMT, return this entry. Otherwise, return NULL. */ Hamt_entry * hamt_lookup (const Hamt *hamt, const void *elt) { if (hamt->root == NULL) return NULL; return entry_lookup (hamt->functions, hamt->root, elt, hash_element (hamt->functions, elt)); } /**************************/ /* Insertion and Deletion */ /**************************/ /* Create a bucket populated with two elements. */ static struct bucket * create_populated_bucket (Hamt_entry *elt1, Hamt_entry *elt2) { struct bucket *bucket = alloc_bucket (2); bucket->elts[0] = elt1; bucket->elts[1] = elt2; return bucket; } /* Create a chain of subtrie nodes so that the resulting trie is populated with exactly two elements. */ static Hamt_entry * create_populated_subtrie (Hamt_entry *elt1, Hamt_entry *elt2, size_t hash1, size_t hash2, int depth) { if (depth >= _GL_HAMT_MAX_DEPTH) return (Hamt_entry *) create_populated_bucket (elt1, elt2); struct subtrie *subtrie; int i1 = hash1 & 31; int i2 = hash2 & 31; if (i1 != i2) { subtrie = alloc_subtrie (2); subtrie->map = (1 << i1) | (1 << i2); if (i1 < i2) { subtrie->nodes[0] = elt1; subtrie->nodes[1] = elt2; } else { subtrie->nodes[0] = elt2; subtrie->nodes[1] = elt1; } } else { subtrie = alloc_subtrie (1); subtrie->map = 1 << i1; subtrie->nodes[0] = create_populated_subtrie (elt1, elt2, hash1 >> 5, hash2 >> 5, depth + 1); } return (Hamt_entry *) subtrie; } /* Insert or replace an element in a bucket. */ static struct bucket * bucket_insert (const struct function_table *functions, struct bucket *bucket, Hamt_entry **elt_ptr, bool replace, bool shared) { size_t elt_count = bucket->elt_count; Hamt_entry **elts = bucket->elts; for (size_t i = 0; i < elt_count; ++i) { if (compare_elements (functions, *elt_ptr, elts[i])) { if (replace) { if (shared) { struct bucket *new_bucket = replace_bucket_element (bucket, i, copy_entry (*elt_ptr)); *elt_ptr = elts[i]; return new_bucket; } free_element (functions, elts[i]); elts[i] = copy_entry (*elt_ptr); return bucket; } *elt_ptr = *elt_ptr == elts[i] ? NULL : elts[i]; return bucket; } } struct bucket *new_bucket = alloc_bucket (elt_count + 1); new_bucket->elts[0] = copy_entry (*elt_ptr); for (size_t i = 0; i < elt_count; ++i) { new_bucket->elts[i + 1] = copy_entry (bucket->elts[i]); } if (replace) *elt_ptr = NULL; return new_bucket; } /* Forward declaration. */ static Hamt_entry *entry_insert (const struct function_table *functions, Hamt_entry *subtrie, Hamt_entry **elt_ptr, size_t hash, int depth, bool replace, bool shared); /* Insert or replace an element in a subtrie. */ static struct subtrie * subtrie_insert (const struct function_table *functions, struct subtrie *subtrie, Hamt_entry **elt_ptr, size_t hash, int depth, bool replace, bool shared) { uint32_t map = subtrie->map; int i = hash & 31; int j = i == 0 ? 0 : count_one_bits (map << (32 - i)); if (map & (1 << i)) { Hamt_entry *entry = subtrie->nodes[j]; Hamt_entry *new_entry = entry_insert (functions, entry, elt_ptr, hash >> 5, depth + 1, replace, shared); if (new_entry != entry) { if (shared) return replace_entry (subtrie, j, new_entry); free_entry (functions, entry); subtrie->nodes[j] = new_entry; } return subtrie; } Hamt_entry *entry = copy_entry (*elt_ptr); if (replace) *elt_ptr = NULL; return insert_entry (subtrie, i, j, entry); } /* Insert or replace an element in an entry. REPLACE is true if we want replace instead of insert semantics. SHARED is false if a destructive update has been requested and none of the parent nodes are shared. If an entry cannot be inserted because the same entry with respect to pointer equality is already present, *ELT_PTR is set to NULL to mark this special case. */ static Hamt_entry * entry_insert (const struct function_table *functions, Hamt_entry *entry, Hamt_entry **elt_ptr, size_t hash, int depth, bool replace, bool shared) { shared |= is_shared (entry); switch (entry_type (entry)) { case element_entry: if (compare_elements (functions, *elt_ptr, entry)) { if (replace) { if (shared) { Hamt_entry *new_entry = copy_entry (*elt_ptr); *elt_ptr = entry; return new_entry; } return copy_entry (*elt_ptr); } *elt_ptr = *elt_ptr == entry ? NULL : entry; return entry; } Hamt_entry *new_entry = copy_entry (*elt_ptr); if (replace) *elt_ptr = NULL; return create_populated_subtrie (new_entry, copy_entry (entry), hash, (hash_element (functions, entry) >> (5 * depth)), depth); case subtrie_entry: return (Hamt_entry *) subtrie_insert (functions, (struct subtrie *) entry, elt_ptr, hash, depth, replace, shared); case bucket_entry: return (Hamt_entry *) bucket_insert (functions, (struct bucket *) entry, elt_ptr, replace, shared); default: assume (0); } } /* Insert or replace an element in the root. */ static Hamt_entry * root_insert (const struct function_table *functions, Hamt_entry *root, Hamt_entry **elt_ptr, bool replace, bool shared) { if (root == NULL) return copy_entry (*elt_ptr); return entry_insert (functions, root, elt_ptr, hash_element (functions, *elt_ptr), 0, replace, shared); } /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the element from the table and return HAMT. Otherwise, insert *ELT_PTR into a copy of the HAMT and return the copy. */ Hamt * hamt_insert (Hamt *hamt, Hamt_entry **elt_ptr) { Hamt_entry *elt = *elt_ptr; Hamt_entry *new_entry = root_insert (hamt->functions, hamt->root, elt_ptr, false, true); if (*elt_ptr == NULL) *elt_ptr = elt; if (new_entry == hamt->root) return hamt; Hamt *new_hamt = XMALLOC (Hamt); new_hamt->functions = copy_function_table (hamt->functions); new_hamt->root = new_entry; return new_hamt; } /* Insert *ELT_PTR into a copy of HAMT and return the copy. If an existing element was replaced, set *ELT_PTR to this element, and to NULL otherwise. */ Hamt * hamt_replace (Hamt *hamt, Hamt_entry **elt_ptr) { Hamt *new_hamt = XMALLOC (Hamt); new_hamt->functions = copy_function_table (hamt->functions); new_hamt->root = root_insert (hamt->functions, hamt->root, elt_ptr, true, true); return new_hamt; } /* Remove an element in a bucket if found. */ static Hamt_entry * bucket_remove (const struct function_table *functions, struct bucket *bucket, Hamt_entry **elt_ptr) { size_t elt_count = bucket->elt_count; Hamt_entry *const *elts = bucket->elts; for (size_t i = 0; i < elt_count; ++i) { if (compare_elements (functions, *elt_ptr, elts[i])) { *elt_ptr = elts[i]; return remove_bucket_entry (bucket, i); } } *elt_ptr = NULL; return (Hamt_entry *) bucket; } /* Forward declaration. */ static Hamt_entry *entry_remove (const struct function_table *functions, Hamt_entry *entry, Hamt_entry **elt_ptr, size_t hash, int depth, bool shared); /* Remove an element in a subtrie if found. */ static Hamt_entry * subtrie_remove (const struct function_table *functions, struct subtrie *subtrie, Hamt_entry **elt_ptr, size_t hash, int depth, bool shared) { uint32_t map = subtrie->map; int i = hash & 31; int j = i == 0 ? 0 : count_one_bits (map << (32 - i)); if (map & (1 << i)) { Hamt_entry *entry = subtrie->nodes[j]; Hamt_entry *new_entry = entry_remove (functions, entry, elt_ptr, hash >> 5, depth + 1, shared); if (new_entry == NULL) return remove_subtrie_entry (subtrie, i, j); if (new_entry != entry) { if (shared) return (Hamt_entry *) replace_entry (subtrie, j, new_entry); free_entry (functions, entry); subtrie->nodes[j] = new_entry; } return (Hamt_entry *) subtrie; } *elt_ptr = NULL; return (Hamt_entry *) subtrie; } /* Remove an element in an entry if found. SHARED is false if a destructive update has been requested and none of the parent nodes are shared. If an entry cannot be removed, *ELT_PTR is set to NULL. */ static Hamt_entry * entry_remove (const struct function_table *functions, Hamt_entry *entry, Hamt_entry **elt_ptr, size_t hash, int depth, bool shared) { shared |= is_shared (entry); switch (entry_type (entry)) { case element_entry: if (compare_elements (functions, *elt_ptr, entry)) { *elt_ptr = entry; return NULL; } *elt_ptr = NULL; return entry; case subtrie_entry: return subtrie_remove (functions, (struct subtrie *) entry, elt_ptr, hash, depth, shared); case bucket_entry: return bucket_remove (functions, (struct bucket *) entry, elt_ptr); default: assume (0); } } /* Remove an element in the root. */ static Hamt_entry * root_remove (const struct function_table *functions, Hamt_entry *root, Hamt_entry **elt_ptr, bool shared) { if (root == NULL) return NULL; return entry_remove (functions, root, elt_ptr, hash_element (functions, *elt_ptr), 0, shared); } /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the element from the table, remove the element from a copy of the hamt and return the copy. Otherwise, return HAMT. */ Hamt * hamt_remove (Hamt *hamt, Hamt_entry **elt_ptr) { Hamt_entry *elt = *elt_ptr; Hamt_entry *new_entry = root_remove (hamt->functions, hamt->root, elt_ptr, true); if (*elt_ptr == NULL) *elt_ptr = elt; if (new_entry == hamt->root) return hamt; Hamt *new_hamt = XMALLOC (Hamt); new_hamt->functions = copy_function_table (hamt->functions); new_hamt->root = new_entry; return new_hamt; } /*************/ /* Iteration */ /*************/ /* Walk a bucket. */ static size_t bucket_do_while (const struct bucket *bucket, Hamt_processor *proc, void *data, bool *success) { size_t cnt = 0; size_t elt_count = bucket->elt_count; Hamt_entry *const *elts = bucket->elts; for (size_t i = 0; i < elt_count; ++i) { *success = proc (elts[i], data); if (*success == false) return cnt; ++cnt; } return cnt; } /* Forward declaration. */ static size_t entry_do_while (Hamt_entry *entry, Hamt_processor *proc, void *data, bool *success); /* Walk a subtrie. */ static size_t subtrie_do_while (const struct subtrie *subtrie, Hamt_processor *proc, void *data, bool *success) { size_t cnt = 0; int n = trienode_count (subtrie); Hamt_entry *const *node_ptr = subtrie->nodes; for (int j = 0; j < n; ++j) { cnt += entry_do_while (*node_ptr++, proc, data, success); if (!success) return cnt; } return cnt; } /* Walk an entry. */ static size_t entry_do_while (Hamt_entry *entry, Hamt_processor *proc, void *data, bool *success) { switch (entry_type (entry)) { case element_entry: *success = proc (entry, data); return *success ? 1 : 0; case subtrie_entry: return subtrie_do_while ((struct subtrie *) entry, proc, data, success); case bucket_entry: return bucket_do_while ((struct bucket *) entry, proc, data, success); default: assume (0); } } /* Call PROC for every entry of the hamt until it returns false. The first argument of PROC is the entry, the second argument is the value of DATA as received. Return the number of calls that returned true. */ size_t hamt_do_while (const Hamt *hamt, Hamt_processor *proc, void *data) { if (hamt->root == NULL) return 0; bool success = true; return entry_do_while (hamt->root, proc, data, &success); } /* Create an iterator with a copy of the hamt. For a valid iterator state the following is true: If DEPTH is negative, the iterator is exhausted. Otherwise, ENTRY[DEPTH] is either the element that is produced next, or a bucket such that the element at POSITION of the bucket is produced next. */ Hamt_iterator hamt_iterator (Hamt *hamt) { Hamt_iterator iter; iter.hamt = hamt_copy (hamt); Hamt_entry *entry = hamt->root; iter.path = 0; iter.position = 0; if (entry == NULL) { iter.depth = -1; return iter; } iter.depth = 0; while (iter.entry[iter.depth] = entry, entry_type (entry) == subtrie_entry) { const struct subtrie *subtrie = (const struct subtrie *) entry; ++iter.depth; entry = subtrie->nodes[0]; } return iter; } /* Free the iterator and the associated hamt copy. */ void hamt_iterator_free (Hamt_iterator *iter) { hamt_free (iter->hamt); } /* Create a copy of the complete iterator state, including the hamt. */ Hamt_iterator hamt_iterator_copy (Hamt_iterator *iter) { Hamt_iterator new_iter = *iter; new_iter.hamt = hamt_copy (iter->hamt); return new_iter; } /* Return the number of significant bits at DEPTH. */ static int bit_width (int depth) { if (depth < _GL_HAMT_MAX_DEPTH - 1) return 5; return SIZE_WIDTH - 5 * (_GL_HAMT_MAX_DEPTH - 1); } /* The actual iteration. */ bool hamt_iterator_next (Hamt_iterator *iter, Hamt_entry **elt_ptr) { int depth = iter->depth; if (depth < 0) return false; Hamt_entry *entry = iter->entry[depth]; if (entry_type (entry) == bucket_entry) { struct bucket *bucket = (struct bucket *) entry; *elt_ptr = bucket->elts[iter->position]; if (++iter->position < bucket->elt_count) return true; } else *elt_ptr = entry; struct subtrie *subtrie; while (iter->depth-- > 0) { int width = bit_width (iter->depth); int j = (iter->path & ((1 << width) - 1)) + 1; subtrie = (struct subtrie *) iter->entry[iter->depth]; if (j < trienode_count (subtrie)) { ++iter->path; while (iter->entry[++iter->depth] = subtrie->nodes[j], entry_type (iter->entry[iter->depth]) == subtrie_entry) { width = bit_width (iter->depth); iter->path <<= width; j = 0; subtrie = (struct subtrie *) iter->entry[iter->depth]; } iter->position = 0; break; } iter->path >>= width; } return true; } /***********************/ /* Destructive Updates */ /***********************/ /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the element from the table and return false. Otherwise, insert *ELT_PTR destructively into the hamt and return true. */ bool hamt_insert_x (Hamt *hamt, Hamt_entry **elt_ptr) { Hamt_entry *elt = *elt_ptr; Hamt_entry *old_root = hamt->root; hamt->root = root_insert (hamt->functions, old_root, elt_ptr, false, false); if (old_root != hamt->root && old_root != NULL) free_entry (hamt->functions, old_root); if (*elt_ptr == NULL) { *elt_ptr = elt; return false; } return *elt_ptr == elt; } /* Insert ELT destructively into HAMT. If an existing element was replaced, return true. Otherwise, return false. */ bool hamt_replace_x (Hamt *hamt, Hamt_entry *elt) { Hamt_entry *old_root = hamt->root; hamt->root = root_insert (hamt->functions, old_root, &elt, true, false); if (old_root != hamt->root && old_root != NULL) free_entry (hamt->functions, old_root); return elt != NULL; } /* If ELT matches an element already in HAMT, remove the element destructively from the hamt and return true. Otherwise, return false. */ bool hamt_remove_x (Hamt *hamt, Hamt_entry *elt) { Hamt_entry *old_root = hamt->root; hamt->root = root_remove (hamt->functions, old_root, &elt, false); if (old_root != hamt->root) free_entry (hamt->functions, old_root); return elt != NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hamt.h������������������������������������������������������������������0000664�0000000�0000000�00000022343�14110572173�0016153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* (Persistent) hash array mapped tries. Copyright (C) 2021 Free Software Foundation, Inc. This 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 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>, 2021. */ /* This module provides a persistent version of hash array mapped tries (hamts) that can be used in place of hash tables when pure (functional) operations are needed. A hash function and an equivalence predicate has to be provided for the elements that can be inserted, replaced and removed in a hamt. A hamt cannot contain duplicates that compare equal. Each non-destructive updating operation returns a new hamt, which shares structure with the original one. Destructive updates only effect the hamt, on which the destructive operation is applied. For example, given a hamt HAMT1, any non-destructive update operation (e.g. hamt_insert) will result in a new hamt HAMT2. Whatever further operations (destructive or not, including freeing a hamt) are applied to HAMT1 won't change HAMT2 and vice versa. To free all the memory, hash_free has therefore to be applied to both HAMT1 and HAMT2. If persistence is not needed, transient hash tables are probably faster. See also: Phil Bagwell (2000). Ideal Hash Trees (Report). Infoscience Department, École Polytechnique Fédérale de Lausanne. http://infoscience.epfl.ch/record/64398/files/idealhashtrees.pdf */ #ifndef _GL_HAMT_H #define _GL_HAMT_H #ifndef _GL_INLINE_HEADER_BEGIN # error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_HAMT_INLINE # define _GL_HAMT_INLINE _GL_INLINE #endif /* The GL_HAMT_THREAD_SAFE flag is set if the implementation of hamts is thread-safe as long as two threads do not simultaneously access the same hamt. This is non-trivial as different hamts may share some structure. */ #if (__STDC_VERSION__ < 201112 || defined __STD_NO_ATOMICS__) \ && __GNUC__ + (__GNUC_MINOR >= 9) <= 4 # define GL_HAMT_THREAD_SAFE 0 #else # define GL_HAMT_THREAD_SAFE 1 #endif #include <stdbool.h> #include <stddef.h> #include <stdint.h> /* Hash values are of type size_t. For each level of the trie, we use 5 bits (corresponding to lg2 of the width of a 32-bit word. */ #define _GL_HAMT_MAX_DEPTH ((SIZE_WIDTH + 4) / 5) /************/ /* Elements */ /************/ /* A hamt stores pointers to elements. Each element has to be a struct whose initial member is of the type Hamt_entry. You need to define this struct yourself. It will typically contain an Hamt_entry, a key, and, optionally, a value. An element is conceptually owned by a hamt as soon as it is inserted. It will be automatically freed as soon as the last hamt containing it is freed. */ typedef struct { #if GL_HAMT_THREAD_SAFE _Atomic #endif size_t ref_count; } Hamt_entry; /* Initialize *ELT, which has to point to a structure as described above and return ELT type-cast. Before an element is inserted into any hamt, whether once or multiple times, it has to be initialized exactly once. */ _GL_HAMT_INLINE Hamt_entry * hamt_element (void *elt) { Hamt_entry *entry = elt; entry->ref_count = 0; /* This assumes that element_entry == 0. */ return entry; } /*************************/ /* Opaque Hamt Structure */ /*************************/ /* In user-code, hamts are accessed through pointers to the opaque Hamt type. Two hamts are said to be the same if and only if their pointers are equal. */ typedef struct hamt Hamt; /*************/ /* Interface */ /*************/ /* A hash function has to be pure, and two elements that compare equal have to have the same hash value. For a hash function to be a good one, it is important that it uses all SIZE_WIDTH bits in size_t. */ typedef size_t (Hamt_hasher) (const void *elt); /* A comparison function has to be pure, and two elements that have equal pointers have to compare equal. */ typedef bool (Hamt_comparator) (const void *elt1, const void *elt2); /* A user-defined function that is called when the last hamt containing a particular element is freed. */ typedef void (Hamt_freer) (Hamt_entry *elt); /****************************/ /* Creation and Destruction */ /****************************/ /* Free the resources solely allocated by HAMT and all elements solely contained in it. */ extern void hamt_free (Hamt *hamt); /* Create and return a new and empty hash array mapped trie. */ _GL_ATTRIBUTE_NODISCARD extern Hamt *hamt_create (Hamt_hasher *hasher, Hamt_comparator *comparator, Hamt_freer *freer) _GL_ATTRIBUTE_DEALLOC (hamt_free, 1); /* Return a copy of HAMT, which is not the same in the sense above. This procedure can be used, for example, so that two threads can access the same data independently. */ _GL_ATTRIBUTE_NODISCARD extern Hamt *hamt_copy (Hamt *hamt) _GL_ATTRIBUTE_DEALLOC (hamt_free, 1); /**********/ /* Lookup */ /**********/ /* If ELT matches an entry in HAMT, return this entry. Otherwise, return NULL. */ extern Hamt_entry *hamt_lookup (const Hamt *hamt, const void *elt); /**************************/ /* Insertion and Deletion */ /**************************/ /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the existing element and return the original hamt. Otherwise, insert *ELT_PTR into a copy of the hamt and return the copy. */ _GL_ATTRIBUTE_NODISCARD extern Hamt *hamt_insert (Hamt *hamt, Hamt_entry **elt_ptr); /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the existing element, remove the element from a copy of the hamt and return the copy. Otherwise, return the original hamt. */ _GL_ATTRIBUTE_NODISCARD extern Hamt *hamt_remove (Hamt *hamt, Hamt_entry **elt_ptr); /* Insert *ELT_PTR into a copy of HAMT and return the copy. If an existing element was replaced, set *ELT_PTR to this element, and to NULL otherwise. */ _GL_ATTRIBUTE_NODISCARD extern Hamt *hamt_replace (Hamt *hamt, Hamt_entry **elt_ptr); /*************/ /* Iteration */ /*************/ /* A processor function is called during walking of a hamt, which returns true to continue the walking. */ typedef bool (Hamt_processor) (Hamt_entry *elt, void *data); /* Call PROC for every entry of the hamt until it returns false. The first argument to the processor is the entry, the second argument is the value of DATA as received. Return the number of calls that returned true. During processing, the hamt mustn't be modified. */ extern size_t hamt_do_while (const Hamt *hamt, Hamt_processor *proc, void *data); /* An alternative interface to iterating through the entry of a hamt that does not make use of a higher-order function like hamt_do_while uses the Hamt_iterator type, which can be allocated through automatic variables on the stack. As a hamt iterator operates on a copy of a hamt, the original hamt can modified (including freeing it) without affecting the iterator. */ struct hamt_iterator { Hamt* hamt; int depth; size_t path; size_t position; Hamt_entry *entry[_GL_HAMT_MAX_DEPTH + 1]; }; typedef struct hamt_iterator Hamt_iterator; /* Create of copy of HAMT and return an initialized ITER on the copy. */ extern Hamt_iterator hamt_iterator (Hamt *hamt); /* Free the resources allocated for ITER, including the hamt copy associated with it. */ extern void hamt_iterator_free (Hamt_iterator *iter); /* Return an independent copy of ITER that is initially in the same state. Any operation on the original iterator (including freeing it) doesn't affect the iterator copy and vice versa. */ extern Hamt_iterator hamt_iterator_copy (Hamt_iterator *iter); /* Return true if ITER is not at the end, place the current element in *ELT_PTR and move the iterator forward. Otherwise, return false. */ extern bool hamt_iterator_next (Hamt_iterator *iter, Hamt_entry **elt_ptr); /***********************/ /* Destructive Updates */ /***********************/ /* If *ELT_PTR matches an element already in HAMT, set *ELT_PTR to the element from the table and return false. Otherwise, insert *ELT_PTR destructively into the hamt and return true. */ extern bool hamt_insert_x (Hamt *hamt, Hamt_entry **elt_ptr); /* Insert ELT destructively into HAMT. If an existing element was replaced, return true. Otherwise, return false. */ extern bool hamt_replace_x (Hamt *hamt, Hamt_entry *elt); /* If ELT matches an element already in HAMT, remove the element destructively from the hamt and return true. Otherwise, return false. */ extern bool hamt_remove_x (Hamt *hamt, Hamt_entry *elt); _GL_INLINE_HEADER_END #endif /* _GL_HAMT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hard-locale.c�����������������������������������������������������������0000664�0000000�0000000�00000002150�14110572173�0017362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2021 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/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <string.h> bool hard_locale (int category) { char locale[SETLOCALE_NULL_MAX]; if (setlocale_null_r (category, locale, sizeof (locale))) return false; return !(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hard-locale.h�����������������������������������������������������������0000664�0000000�0000000�00000002153�14110572173�0017372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 2009-2021 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/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 # include <stdbool.h> /* Return true if the specified CATEGORY of the current locale is hard, i.e. different from the C or POSIX locale that has a fixed behavior. CATEGORY must be one of the LC_* values, but not LC_ALL. */ extern bool hard_locale (int category); #endif /* HARD_LOCALE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-pjw-bare.c���������������������������������������������������������0000664�0000000�0000000�00000002544�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw-bare.c -- compute a hash value from a provided buffer. Copyright (C) 2012-2021 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/>. */ #include <config.h> #include "hash-pjw-bare.h" #include <limits.h> #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* Return a hash of the N bytes of X using the method described by Bruno Haible in https://www.haible.de/bruno/hashfunc.html. Note that while many hash functions reduce their result via modulo to a 0..table_size-1 range, this function does not do that. */ size_t hash_pjw_bare (const void *x, size_t n) { const unsigned char *s = x; size_t h = 0; unsigned i; for (i = 0; i < n; i++) h = s[i] + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-pjw-bare.h���������������������������������������������������������0000664�0000000�0000000�00000002163�14110572173�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw-bare.h -- declaration for a simple hash function Copyright (C) 2012-2021 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/>. */ #include <stddef.h> /* Compute a hash code for a buffer starting at X and of size N, and return the hash code. Note that unlike hash_pjw(), it does not return it modulo a table size. The result is platform dependent: it depends on the size of the 'size_t' type. */ extern size_t hash_pjw_bare (const void *x, size_t n) _GL_ATTRIBUTE_PURE; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-pjw.c��������������������������������������������������������������0000664�0000000�0000000�00000002360�14110572173�0016733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.c -- compute a hash value from a NUL-terminated string. Copyright (C) 2001, 2003, 2006, 2009-2021 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/>. */ #include <config.h> #include "hash-pjw.h" #include <limits.h> #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ size_t hash_pjw (const void *x, size_t tablesize) { const char *s; size_t h = 0; for (s = x; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h % tablesize; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-pjw.h��������������������������������������������������������������0000664�0000000�0000000�00000002154�14110572173�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.h -- declaration for a simple hash function Copyright (C) 2001, 2003, 2009-2021 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/>. */ #include <stddef.h> /* Compute a hash code for a NUL-terminated string starting at X, and return the hash code modulo TABLESIZE. The result is platform dependent: it depends on the size of the 'size_t' type and on the signedness of the 'char' type. */ extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-triple-simple.c����������������������������������������������������0000664�0000000�0000000�00000003167�14110572173�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related triples: name, device, inode. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> /* Specification. */ #include "hash-triple.h" #include <stdlib.h> #include <string.h> #include "hash-pjw.h" #include "same-inode.h" #define STREQ(a, b) (strcmp (a, b) == 0) /* Hash an F_triple, and *do* consider the file name. */ size_t triple_hash (void const *x, size_t table_size) { struct F_triple const *p = x; size_t tmp = hash_pjw (p->name, table_size); /* Ignoring the device number here should be fine. */ return (tmp ^ p->st_ino) % table_size; } /* Compare two F_triple structs. */ bool triple_compare_ino_str (void const *x, void const *y) { struct F_triple const *a = x; struct F_triple const *b = y; return (SAME_INODE (*a, *b) && STREQ (a->name, b->name)) ? true : false; } /* Free an F_triple. */ void triple_free (void *x) { struct F_triple *a = x; free (a->name); free (a); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-triple.c�����������������������������������������������������������0000664�0000000�0000000�00000002576�14110572173�0017443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related triples: name, device, inode. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> /* Specification. */ #include "hash-triple.h" #include "same.h" #include "same-inode.h" /* Hash an F_triple, without considering the file name. */ size_t triple_hash_no_name (void const *x, size_t table_size) { struct F_triple const *p = x; /* Ignoring the device number here should be fine. */ return p->st_ino % table_size; } /* Compare two F_triple structs. */ bool triple_compare (void const *x, void const *y) { struct F_triple const *a = x; struct F_triple const *b = y; return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false; } ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash-triple.h�����������������������������������������������������������0000664�0000000�0000000�00000002744�14110572173�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related (name, device, inode) triples. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2007. */ #ifndef HASH_TRIPLE_H #define HASH_TRIPLE_H #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> /* Describe a just-created or just-renamed destination file. */ struct F_triple { char *name; ino_t st_ino; dev_t st_dev; }; /* Defined in module 'hash-triple-simple'. */ extern size_t triple_hash (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; extern bool triple_compare_ino_str (void const *x, void const *y) _GL_ATTRIBUTE_PURE; extern void triple_free (void *x); /* Defined in module 'hash-triple'. */ extern size_t triple_hash_no_name (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; extern bool triple_compare (void const *x, void const *y); #endif ����������������������������gnulib-20210822~d383792/lib/hash.c������������������������������������������������������������������0000664�0000000�0000000�00000100127�14110572173�0016135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Jim Meyering, 1992. 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/>. */ /* A generic hash table package. */ /* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead of malloc. If you change USE_OBSTACK, you have to recompile! */ #include <config.h> #include "hash.h" #include "bitrotate.h" #include "xalloc-oversized.h" #include <stdint.h> #include <stdio.h> #include <stdlib.h> #if USE_OBSTACK # include "obstack.h" # ifndef obstack_chunk_alloc # define obstack_chunk_alloc malloc # endif # ifndef obstack_chunk_free # define obstack_chunk_free free # endif #endif struct hash_entry { void *data; struct hash_entry *next; }; struct hash_table { /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1, for a possibility of N_BUCKETS. Among those, N_BUCKETS_USED buckets are not empty, there are N_ENTRIES active entries in the table. */ struct hash_entry *bucket; struct hash_entry const *bucket_limit; size_t n_buckets; size_t n_buckets_used; size_t n_entries; /* Tuning arguments, kept in a physically separate structure. */ const Hash_tuning *tuning; /* Three functions are given to 'hash_initialize', see the documentation block for this function. In a word, HASHER randomizes a user entry into a number up from 0 up to some maximum minus 1; COMPARATOR returns true if two user entries compare equally; and DATA_FREER is the cleanup function for a user entry. */ Hash_hasher hasher; Hash_comparator comparator; Hash_data_freer data_freer; /* A linked list of freed struct hash_entry structs. */ struct hash_entry *free_entry_list; #if USE_OBSTACK /* Whenever obstacks are used, it is possible to allocate all overflowed entries into a single stack, so they all can be freed in a single operation. It is not clear if the speedup is worth the trouble. */ struct obstack entry_stack; #endif }; /* A hash table contains many internal entries, each holding a pointer to some user-provided data (also called a user entry). An entry indistinctly refers to both the internal entry and its associated user entry. A user entry contents may be hashed by a randomization function (the hashing function, or just "hasher" for short) into a number (or "slot") between 0 and the current table size. At each slot position in the hash table, starts a linked chain of entries for which the user data all hash to this slot. A bucket is the collection of all entries hashing to the same slot. A good "hasher" function will distribute entries rather evenly in buckets. In the ideal case, the length of each bucket is roughly the number of entries divided by the table size. Finding the slot for a data is usually done in constant time by the "hasher", and the later finding of a precise entry is linear in time with the size of the bucket. Consequently, a larger hash table size (that is, a larger number of buckets) is prone to yielding shorter chains, *given* the "hasher" function behaves properly. Long buckets slow down the lookup algorithm. One might use big hash table sizes in hope to reduce the average length of buckets, but this might become inordinate, as unused slots in the hash table take some space. The best bet is to make sure you are using a good "hasher" function (beware that those are not that easy to write! :-), and to use a table size larger than the actual number of entries. */ /* If an insertion makes the ratio of nonempty buckets to table size larger than the growth threshold (a number between 0.0 and 1.0), then increase the table size by multiplying by the growth factor (a number greater than 1.0). The growth threshold defaults to 0.8, and the growth factor defaults to 1.414, meaning that the table will have doubled its size every second time 80% of the buckets get used. */ #define DEFAULT_GROWTH_THRESHOLD 0.8f #define DEFAULT_GROWTH_FACTOR 1.414f /* If a deletion empties a bucket and causes the ratio of used buckets to table size to become smaller than the shrink threshold (a number between 0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a number greater than the shrink threshold but smaller than 1.0). The shrink threshold and factor default to 0.0 and 1.0, meaning that the table never shrinks. */ #define DEFAULT_SHRINK_THRESHOLD 0.0f #define DEFAULT_SHRINK_FACTOR 1.0f /* Use this to initialize or reset a TUNING structure to some sensible values. */ static const Hash_tuning default_tuning = { DEFAULT_SHRINK_THRESHOLD, DEFAULT_SHRINK_FACTOR, DEFAULT_GROWTH_THRESHOLD, DEFAULT_GROWTH_FACTOR, false }; /* Information and lookup. */ size_t hash_get_n_buckets (const Hash_table *table) { return table->n_buckets; } size_t hash_get_n_buckets_used (const Hash_table *table) { return table->n_buckets_used; } size_t hash_get_n_entries (const Hash_table *table) { return table->n_entries; } size_t hash_get_max_bucket_length (const Hash_table *table) { struct hash_entry const *bucket; size_t max_bucket_length = 0; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry const *cursor = bucket; size_t bucket_length = 1; while (cursor = cursor->next, cursor) bucket_length++; if (bucket_length > max_bucket_length) max_bucket_length = bucket_length; } } return max_bucket_length; } bool hash_table_ok (const Hash_table *table) { struct hash_entry const *bucket; size_t n_buckets_used = 0; size_t n_entries = 0; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry const *cursor = bucket; /* Count bucket head. */ n_buckets_used++; n_entries++; /* Count bucket overflow. */ while (cursor = cursor->next, cursor) n_entries++; } } if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries) return true; return false; } void hash_print_statistics (const Hash_table *table, FILE *stream) { size_t n_entries = hash_get_n_entries (table); size_t n_buckets = hash_get_n_buckets (table); size_t n_buckets_used = hash_get_n_buckets_used (table); size_t max_bucket_length = hash_get_max_bucket_length (table); fprintf (stream, "# entries: %lu\n", (unsigned long int) n_entries); fprintf (stream, "# buckets: %lu\n", (unsigned long int) n_buckets); fprintf (stream, "# buckets used: %lu (%.2f%%)\n", (unsigned long int) n_buckets_used, (100.0 * n_buckets_used) / n_buckets); fprintf (stream, "max bucket length: %lu\n", (unsigned long int) max_bucket_length); } /* Hash KEY and return a pointer to the selected bucket. If TABLE->hasher misbehaves, abort. */ static struct hash_entry * safe_hasher (const Hash_table *table, const void *key) { size_t n = table->hasher (key, table->n_buckets); if (! (n < table->n_buckets)) abort (); return table->bucket + n; } void * hash_lookup (const Hash_table *table, const void *entry) { struct hash_entry const *bucket = safe_hasher (table, entry); struct hash_entry const *cursor; if (bucket->data == NULL) return NULL; for (cursor = bucket; cursor; cursor = cursor->next) if (entry == cursor->data || table->comparator (entry, cursor->data)) return cursor->data; return NULL; } /* Walking. */ void * hash_get_first (const Hash_table *table) { struct hash_entry const *bucket; if (table->n_entries == 0) return NULL; for (bucket = table->bucket; ; bucket++) if (! (bucket < table->bucket_limit)) abort (); else if (bucket->data) return bucket->data; } void * hash_get_next (const Hash_table *table, const void *entry) { struct hash_entry const *bucket = safe_hasher (table, entry); struct hash_entry const *cursor; /* Find next entry in the same bucket. */ cursor = bucket; do { if (cursor->data == entry && cursor->next) return cursor->next->data; cursor = cursor->next; } while (cursor != NULL); /* Find first entry in any subsequent bucket. */ while (++bucket < table->bucket_limit) if (bucket->data) return bucket->data; /* None found. */ return NULL; } size_t hash_get_entries (const Hash_table *table, void **buffer, size_t buffer_size) { size_t counter = 0; struct hash_entry const *bucket; struct hash_entry const *cursor; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) { if (counter >= buffer_size) return counter; buffer[counter++] = cursor->data; } } } return counter; } size_t hash_do_for_each (const Hash_table *table, Hash_processor processor, void *processor_data) { size_t counter = 0; struct hash_entry const *bucket; struct hash_entry const *cursor; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) { if (! processor (cursor->data, processor_data)) return counter; counter++; } } } return counter; } /* Allocation and clean-up. */ #if USE_DIFF_HASH /* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm, Software--practice & experience 20, 2 (Feb 1990), 209-224. Good hash algorithms tend to be domain-specific, so what's good for [diffutils'] io.c may not be good for your application." */ size_t hash_string (const char *string, size_t n_buckets) { # define HASH_ONE_CHAR(Value, Byte) \ ((Byte) + rotl_sz (Value, 7)) size_t value = 0; unsigned char ch; for (; (ch = *string); string++) value = HASH_ONE_CHAR (value, ch); return value % n_buckets; # undef HASH_ONE_CHAR } #else /* not USE_DIFF_HASH */ /* This one comes from 'recode', and performs a bit better than the above as per a few experiments. It is inspired from a hashing routine found in the very old Cyber 'snoop', itself written in typical Greg Mansfield style. (By the way, what happened to this excellent man? Is he still alive?) */ size_t hash_string (const char *string, size_t n_buckets) { size_t value = 0; unsigned char ch; for (; (ch = *string); string++) value = (value * 31 + ch) % n_buckets; return value; } #endif /* not USE_DIFF_HASH */ /* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd number at least equal to 11. */ static bool _GL_ATTRIBUTE_CONST is_prime (size_t candidate) { size_t divisor = 3; size_t square = divisor * divisor; while (square < candidate && (candidate % divisor)) { divisor++; square += 4 * divisor; divisor++; } return (candidate % divisor ? true : false); } /* Round a given CANDIDATE number up to the nearest prime, and return that prime. Primes lower than 10 are merely skipped. */ static size_t _GL_ATTRIBUTE_CONST next_prime (size_t candidate) { /* Skip small primes. */ if (candidate < 10) candidate = 10; /* Make it definitely odd. */ candidate |= 1; while (SIZE_MAX != candidate && !is_prime (candidate)) candidate += 2; return candidate; } void hash_reset_tuning (Hash_tuning *tuning) { *tuning = default_tuning; } /* If the user passes a NULL hasher, we hash the raw pointer. */ static size_t raw_hasher (const void *data, size_t n) { /* When hashing unique pointers, it is often the case that they were generated by malloc and thus have the property that the low-order bits are 0. As this tends to give poorer performance with small tables, we rotate the pointer value before performing division, in an attempt to improve hash quality. */ size_t val = rotr_sz ((size_t) data, 3); return val % n; } /* If the user passes a NULL comparator, we use pointer comparison. */ static bool raw_comparator (const void *a, const void *b) { return a == b; } /* For the given hash TABLE, check the user supplied tuning structure for reasonable values, and return true if there is no gross error with it. Otherwise, definitively reset the TUNING field to some acceptable default in the hash table (that is, the user loses the right of further modifying tuning arguments), and return false. */ static bool check_tuning (Hash_table *table) { const Hash_tuning *tuning = table->tuning; float epsilon; if (tuning == &default_tuning) return true; /* Be a bit stricter than mathematics would require, so that rounding errors in size calculations do not cause allocations to fail to grow or shrink as they should. The smallest allocation is 11 (due to next_prime's algorithm), so an epsilon of 0.1 should be good enough. */ epsilon = 0.1f; if (epsilon < tuning->growth_threshold && tuning->growth_threshold < 1 - epsilon && 1 + epsilon < tuning->growth_factor && 0 <= tuning->shrink_threshold && tuning->shrink_threshold + epsilon < tuning->shrink_factor && tuning->shrink_factor <= 1 && tuning->shrink_threshold + epsilon < tuning->growth_threshold) return true; table->tuning = &default_tuning; return false; } /* Compute the size of the bucket array for the given CANDIDATE and TUNING, or return 0 if there is no possible way to allocate that many entries. */ static size_t _GL_ATTRIBUTE_PURE compute_bucket_size (size_t candidate, const Hash_tuning *tuning) { if (!tuning->is_n_buckets) { float new_candidate = candidate / tuning->growth_threshold; if ((float) SIZE_MAX <= new_candidate) return 0; candidate = new_candidate; } candidate = next_prime (candidate); if (xalloc_oversized (candidate, sizeof (struct hash_entry *))) return 0; return candidate; } Hash_table * hash_initialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) { Hash_table *table; if (hasher == NULL) hasher = raw_hasher; if (comparator == NULL) comparator = raw_comparator; table = malloc (sizeof *table); if (table == NULL) return NULL; if (!tuning) tuning = &default_tuning; table->tuning = tuning; if (!check_tuning (table)) { /* Fail if the tuning options are invalid. This is the only occasion when the user gets some feedback about it. Once the table is created, if the user provides invalid tuning options, we silently revert to using the defaults, and ignore further request to change the tuning options. */ goto fail; } table->n_buckets = compute_bucket_size (candidate, tuning); if (!table->n_buckets) goto fail; table->bucket = calloc (table->n_buckets, sizeof *table->bucket); if (table->bucket == NULL) goto fail; table->bucket_limit = table->bucket + table->n_buckets; table->n_buckets_used = 0; table->n_entries = 0; table->hasher = hasher; table->comparator = comparator; table->data_freer = data_freer; table->free_entry_list = NULL; #if USE_OBSTACK obstack_init (&table->entry_stack); #endif return table; fail: free (table); return NULL; } void hash_clear (Hash_table *table) { struct hash_entry *bucket; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry *cursor; struct hash_entry *next; /* Free the bucket overflow. */ for (cursor = bucket->next; cursor; cursor = next) { if (table->data_freer) table->data_freer (cursor->data); cursor->data = NULL; next = cursor->next; /* Relinking is done one entry at a time, as it is to be expected that overflows are either rare or short. */ cursor->next = table->free_entry_list; table->free_entry_list = cursor; } /* Free the bucket head. */ if (table->data_freer) table->data_freer (bucket->data); bucket->data = NULL; bucket->next = NULL; } } table->n_buckets_used = 0; table->n_entries = 0; } void hash_free (Hash_table *table) { struct hash_entry *bucket; struct hash_entry *cursor; struct hash_entry *next; /* Call the user data_freer function. */ if (table->data_freer && table->n_entries) { for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) table->data_freer (cursor->data); } } } #if USE_OBSTACK obstack_free (&table->entry_stack, NULL); #else /* Free all bucket overflowed entries. */ for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { for (cursor = bucket->next; cursor; cursor = next) { next = cursor->next; free (cursor); } } /* Also reclaim the internal list of previously freed entries. */ for (cursor = table->free_entry_list; cursor; cursor = next) { next = cursor->next; free (cursor); } #endif /* Free the remainder of the hash table structure. */ free (table->bucket); free (table); } /* Insertion and deletion. */ /* Get a new hash entry for a bucket overflow, possibly by recycling a previously freed one. If this is not possible, allocate a new one. */ static struct hash_entry * allocate_entry (Hash_table *table) { struct hash_entry *new; if (table->free_entry_list) { new = table->free_entry_list; table->free_entry_list = new->next; } else { #if USE_OBSTACK new = obstack_alloc (&table->entry_stack, sizeof *new); #else new = malloc (sizeof *new); #endif } return new; } /* Free a hash entry which was part of some bucket overflow, saving it for later recycling. */ static void free_entry (Hash_table *table, struct hash_entry *entry) { entry->data = NULL; entry->next = table->free_entry_list; table->free_entry_list = entry; } /* This private function is used to help with insertion and deletion. When ENTRY matches an entry in the table, return a pointer to the corresponding user data and set *BUCKET_HEAD to the head of the selected bucket. Otherwise, return NULL. When DELETE is true and ENTRY matches an entry in the table, unlink the matching entry. */ static void * hash_find_entry (Hash_table *table, const void *entry, struct hash_entry **bucket_head, bool delete) { struct hash_entry *bucket = safe_hasher (table, entry); struct hash_entry *cursor; *bucket_head = bucket; /* Test for empty bucket. */ if (bucket->data == NULL) return NULL; /* See if the entry is the first in the bucket. */ if (entry == bucket->data || table->comparator (entry, bucket->data)) { void *data = bucket->data; if (delete) { if (bucket->next) { struct hash_entry *next = bucket->next; /* Bump the first overflow entry into the bucket head, then save the previous first overflow entry for later recycling. */ *bucket = *next; free_entry (table, next); } else { bucket->data = NULL; } } return data; } /* Scan the bucket overflow. */ for (cursor = bucket; cursor->next; cursor = cursor->next) { if (entry == cursor->next->data || table->comparator (entry, cursor->next->data)) { void *data = cursor->next->data; if (delete) { struct hash_entry *next = cursor->next; /* Unlink the entry to delete, then save the freed entry for later recycling. */ cursor->next = next->next; free_entry (table, next); } return data; } } /* No entry found. */ return NULL; } /* Internal helper, to move entries from SRC to DST. Both tables must share the same free entry list. If SAFE, only move overflow entries, saving bucket heads for later, so that no allocations will occur. Return false if the free entry list is exhausted and an allocation fails. */ static bool transfer_entries (Hash_table *dst, Hash_table *src, bool safe) { struct hash_entry *bucket; struct hash_entry *cursor; struct hash_entry *next; for (bucket = src->bucket; bucket < src->bucket_limit; bucket++) if (bucket->data) { void *data; struct hash_entry *new_bucket; /* Within each bucket, transfer overflow entries first and then the bucket head, to minimize memory pressure. After all, the only time we might allocate is when moving the bucket head, but moving overflow entries first may create free entries that can be recycled by the time we finally get to the bucket head. */ for (cursor = bucket->next; cursor; cursor = next) { data = cursor->data; new_bucket = safe_hasher (dst, data); next = cursor->next; if (new_bucket->data) { /* Merely relink an existing entry, when moving from a bucket overflow into a bucket overflow. */ cursor->next = new_bucket->next; new_bucket->next = cursor; } else { /* Free an existing entry, when moving from a bucket overflow into a bucket header. */ new_bucket->data = data; dst->n_buckets_used++; free_entry (dst, cursor); } } /* Now move the bucket head. Be sure that if we fail due to allocation failure that the src table is in a consistent state. */ data = bucket->data; bucket->next = NULL; if (safe) continue; new_bucket = safe_hasher (dst, data); if (new_bucket->data) { /* Allocate or recycle an entry, when moving from a bucket header into a bucket overflow. */ struct hash_entry *new_entry = allocate_entry (dst); if (new_entry == NULL) return false; new_entry->data = data; new_entry->next = new_bucket->next; new_bucket->next = new_entry; } else { /* Move from one bucket header to another. */ new_bucket->data = data; dst->n_buckets_used++; } bucket->data = NULL; src->n_buckets_used--; } return true; } bool hash_rehash (Hash_table *table, size_t candidate) { Hash_table storage; Hash_table *new_table; size_t new_size = compute_bucket_size (candidate, table->tuning); if (!new_size) return false; if (new_size == table->n_buckets) return true; new_table = &storage; new_table->bucket = calloc (new_size, sizeof *new_table->bucket); if (new_table->bucket == NULL) return false; new_table->n_buckets = new_size; new_table->bucket_limit = new_table->bucket + new_size; new_table->n_buckets_used = 0; new_table->n_entries = 0; new_table->tuning = table->tuning; new_table->hasher = table->hasher; new_table->comparator = table->comparator; new_table->data_freer = table->data_freer; /* In order for the transfer to successfully complete, we need additional overflow entries when distinct buckets in the old table collide into a common bucket in the new table. The worst case possible is a hasher that gives a good spread with the old size, but returns a constant with the new size; if we were to guarantee table->n_buckets_used-1 free entries in advance, then the transfer would be guaranteed to not allocate memory. However, for large tables, a guarantee of no further allocation introduces a lot of extra memory pressure, all for an unlikely corner case (most rehashes reduce, rather than increase, the number of overflow entries needed). So, we instead ensure that the transfer process can be reversed if we hit a memory allocation failure mid-transfer. */ /* Merely reuse the extra old space into the new table. */ #if USE_OBSTACK new_table->entry_stack = table->entry_stack; #endif new_table->free_entry_list = table->free_entry_list; if (transfer_entries (new_table, table, false)) { /* Entries transferred successfully; tie up the loose ends. */ free (table->bucket); table->bucket = new_table->bucket; table->bucket_limit = new_table->bucket_limit; table->n_buckets = new_table->n_buckets; table->n_buckets_used = new_table->n_buckets_used; table->free_entry_list = new_table->free_entry_list; /* table->n_entries and table->entry_stack already hold their value. */ return true; } /* We've allocated new_table->bucket (and possibly some entries), exhausted the free list, and moved some but not all entries into new_table. We must undo the partial move before returning failure. The only way to get into this situation is if new_table uses fewer buckets than the old table, so we will reclaim some free entries as overflows in the new table are put back into distinct buckets in the old table. There are some pathological cases where a single pass through the table requires more intermediate overflow entries than using two passes. Two passes give worse cache performance and takes longer, but at this point, we're already out of memory, so slow and safe is better than failure. */ table->free_entry_list = new_table->free_entry_list; if (! (transfer_entries (table, new_table, true) && transfer_entries (table, new_table, false))) abort (); /* table->n_entries already holds its value. */ free (new_table->bucket); return false; } int hash_insert_if_absent (Hash_table *table, void const *entry, void const **matched_ent) { void *data; struct hash_entry *bucket; /* The caller cannot insert a NULL entry, since hash_lookup returns NULL to indicate "not found", and hash_find_entry uses "bucket->data == NULL" to indicate an empty bucket. */ if (! entry) abort (); /* If there's a matching entry already in the table, return that. */ if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL) { if (matched_ent) *matched_ent = data; return 0; } /* If the growth threshold of the buckets in use has been reached, increase the table size and rehash. There's no point in checking the number of entries: if the hashing function is ill-conditioned, rehashing is not likely to improve it. */ if (table->n_buckets_used > table->tuning->growth_threshold * table->n_buckets) { /* Check more fully, before starting real work. If tuning arguments became invalid, the second check will rely on proper defaults. */ check_tuning (table); if (table->n_buckets_used > table->tuning->growth_threshold * table->n_buckets) { const Hash_tuning *tuning = table->tuning; float candidate = (tuning->is_n_buckets ? (table->n_buckets * tuning->growth_factor) : (table->n_buckets * tuning->growth_factor * tuning->growth_threshold)); if ((float) SIZE_MAX <= candidate) return -1; /* If the rehash fails, arrange to return NULL. */ if (!hash_rehash (table, candidate)) return -1; /* Update the bucket we are interested in. */ if (hash_find_entry (table, entry, &bucket, false) != NULL) abort (); } } /* ENTRY is not matched, it should be inserted. */ if (bucket->data) { struct hash_entry *new_entry = allocate_entry (table); if (new_entry == NULL) return -1; /* Add ENTRY in the overflow of the bucket. */ new_entry->data = (void *) entry; new_entry->next = bucket->next; bucket->next = new_entry; table->n_entries++; return 1; } /* Add ENTRY right in the bucket head. */ bucket->data = (void *) entry; table->n_entries++; table->n_buckets_used++; return 1; } void * hash_insert (Hash_table *table, void const *entry) { void const *matched_ent; int err = hash_insert_if_absent (table, entry, &matched_ent); return (err == -1 ? NULL : (void *) (err == 0 ? matched_ent : entry)); } void * hash_remove (Hash_table *table, const void *entry) { void *data; struct hash_entry *bucket; data = hash_find_entry (table, entry, &bucket, true); if (!data) return NULL; table->n_entries--; if (!bucket->data) { table->n_buckets_used--; /* If the shrink threshold of the buckets in use has been reached, rehash into a smaller table. */ if (table->n_buckets_used < table->tuning->shrink_threshold * table->n_buckets) { /* Check more fully, before starting real work. If tuning arguments became invalid, the second check will rely on proper defaults. */ check_tuning (table); if (table->n_buckets_used < table->tuning->shrink_threshold * table->n_buckets) { const Hash_tuning *tuning = table->tuning; size_t candidate = (tuning->is_n_buckets ? table->n_buckets * tuning->shrink_factor : (table->n_buckets * tuning->shrink_factor * tuning->growth_threshold)); if (!hash_rehash (table, candidate)) { /* Failure to allocate memory in an attempt to shrink the table is not fatal. But since memory is low, we can at least be kind and free any spare entries, rather than keeping them tied up in the free entry list. */ #if ! USE_OBSTACK struct hash_entry *cursor = table->free_entry_list; struct hash_entry *next; while (cursor) { next = cursor->next; free (cursor); cursor = next; } table->free_entry_list = NULL; #endif } } } } return data; } void * hash_delete (Hash_table *table, const void *entry) { return hash_remove (table, entry); } /* Testing. */ #if TESTING void hash_print (const Hash_table *table) { struct hash_entry *bucket = (struct hash_entry *) table->bucket; for ( ; bucket < table->bucket_limit; bucket++) { struct hash_entry *cursor; if (bucket) printf ("%lu:\n", (unsigned long int) (bucket - table->bucket)); for (cursor = bucket; cursor; cursor = cursor->next) { char const *s = cursor->data; /* FIXME */ if (s) printf (" %s\n", s); } } } #endif /* TESTING */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hash.h������������������������������������������������������������������0000664�0000000�0000000�00000026773�14110572173�0016160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-1999, 2001, 2003, 2009-2021 Free Software Foundation, Inc. Written by Jim Meyering <meyering@ascend.com>, 1998. 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/>. */ /* A generic hash table package. */ /* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use obstacks instead of malloc, and recompile 'hash.c' with same setting. */ #ifndef HASH_H_ # define HASH_H_ # include <stdio.h> # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif struct hash_tuning { /* This structure is mainly used for 'hash_initialize', see the block documentation of 'hash_reset_tuning' for more complete comments. */ float shrink_threshold; /* ratio of used buckets to trigger a shrink */ float shrink_factor; /* ratio of new smaller size to original size */ float growth_threshold; /* ratio of used buckets to trigger a growth */ float growth_factor; /* ratio of new bigger size to original size */ bool is_n_buckets; /* if CANDIDATE really means table size */ }; typedef struct hash_tuning Hash_tuning; struct hash_table; typedef struct hash_table Hash_table; /* * Information and lookup. */ /* The following few functions provide information about the overall hash table organization: the number of entries, number of buckets and maximum length of buckets. */ /* Return the number of buckets in the hash table. The table size, the total number of buckets (used plus unused), or the maximum number of slots, are the same quantity. */ extern size_t hash_get_n_buckets (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the number of slots in use (non-empty buckets). */ extern size_t hash_get_n_buckets_used (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the number of active entries. */ extern size_t hash_get_n_entries (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the length of the longest chain (bucket). */ extern size_t hash_get_max_bucket_length (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Do a mild validation of a hash table, by traversing it and checking two statistics. */ extern bool hash_table_ok (const Hash_table *table) _GL_ATTRIBUTE_PURE; extern void hash_print_statistics (const Hash_table *table, FILE *stream); /* If ENTRY matches an entry already in the hash table, return the entry from the table. Otherwise, return NULL. */ extern void *hash_lookup (const Hash_table *table, const void *entry); /* * Walking. */ /* The functions in this page traverse the hash table and process the contained entries. For the traversal to work properly, the hash table should not be resized nor modified while any particular entry is being processed. In particular, entries should not be added, and an entry may be removed only if there is no shrink threshold and the entry being removed has already been passed to hash_get_next. */ /* Return the first data in the table, or NULL if the table is empty. */ extern void *hash_get_first (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the user data for the entry following ENTRY, where ENTRY has been returned by a previous call to either 'hash_get_first' or 'hash_get_next'. Return NULL if there are no more entries. */ extern void *hash_get_next (const Hash_table *table, const void *entry); /* Fill BUFFER with pointers to active user entries in the hash table, then return the number of pointers copied. Do not copy more than BUFFER_SIZE pointers. */ extern size_t hash_get_entries (const Hash_table *table, void **buffer, size_t buffer_size); typedef bool (*Hash_processor) (void *entry, void *processor_data); /* Call a PROCESSOR function for each entry of a hash table, and return the number of entries for which the processor function returned success. A pointer to some PROCESSOR_DATA which will be made available to each call to the processor function. The PROCESSOR accepts two arguments: the first is the user entry being walked into, the second is the value of PROCESSOR_DATA as received. The walking continue for as long as the PROCESSOR function returns nonzero. When it returns zero, the walking is interrupted. */ extern size_t hash_do_for_each (const Hash_table *table, Hash_processor processor, void *processor_data); /* * Allocation and clean-up. */ /* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1. This is a convenience routine for constructing other hashing functions. */ extern size_t hash_string (const char *string, size_t n_buckets) _GL_ATTRIBUTE_PURE; extern void hash_reset_tuning (Hash_tuning *tuning); typedef size_t (*Hash_hasher) (const void *entry, size_t table_size); typedef bool (*Hash_comparator) (const void *entry1, const void *entry2); typedef void (*Hash_data_freer) (void *entry); /* Reclaim all storage associated with a hash table. If a data_freer function has been supplied by the user when the hash table was created, this function applies it to the data of each entry before freeing that entry. */ extern void hash_free (Hash_table *table); /* Allocate and return a new hash table, or NULL upon failure. The initial number of buckets is automatically selected so as to _guarantee_ that you may insert at least CANDIDATE different user entries before any growth of the hash table size occurs. So, if have a reasonably tight a-priori upper bound on the number of entries you intend to insert in the hash table, you may save some table memory and insertion time, by specifying it here. If the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE argument has its meaning changed to the wanted number of buckets. TUNING points to a structure of user-supplied values, in case some fine tuning is wanted over the default behavior of the hasher. If TUNING is NULL, the default tuning parameters are used instead. If TUNING is provided but the values requested are out of bounds or might cause rounding errors, return NULL. The user-supplied HASHER function, when not NULL, accepts two arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a slot number for that entry which should be in the range 0..TABLE_SIZE-1. This slot number is then returned. The user-supplied COMPARATOR function, when not NULL, accepts two arguments pointing to user data, it then returns true for a pair of entries that compare equal, or false otherwise. This function is internally called on entries which are already known to hash to the same bucket index, but which are distinct pointers. The user-supplied DATA_FREER function, when not NULL, may be later called with the user data as an argument, just before the entry containing the data gets freed. This happens from within 'hash_free' or 'hash_clear'. You should specify this function only if you want these functions to free all of your 'data' data. This is typically the case when your data is simply an auxiliary struct that you have malloc'd to aggregate several values. */ _GL_ATTRIBUTE_NODISCARD extern Hash_table *hash_initialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1); /* Same as hash_initialize, but invokes xalloc_die on memory exhaustion. */ /* This function is defined by module 'xhash'. */ _GL_ATTRIBUTE_NODISCARD extern Hash_table *hash_xinitialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1) _GL_ATTRIBUTE_RETURNS_NONNULL; /* Make all buckets empty, placing any chained entries on the free list. Apply the user-specified function data_freer (if any) to the datas of any affected entries. */ extern void hash_clear (Hash_table *table); /* * Insertion and deletion. */ /* For an already existing hash table, change the number of buckets through specifying CANDIDATE. The contents of the hash table are preserved. The new number of buckets is automatically selected so as to _guarantee_ that the table may receive at least CANDIDATE different user entries, including those already in the table, before any other growth of the hash table size occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the exact number of buckets desired. Return true iff the rehash succeeded. */ _GL_ATTRIBUTE_NODISCARD extern bool hash_rehash (Hash_table *table, size_t candidate); /* If ENTRY matches an entry already in the hash table, return the pointer to the entry from the table. Otherwise, insert ENTRY and return ENTRY. Return NULL if the storage required for insertion cannot be allocated. This implementation does not support duplicate entries or insertion of NULL. */ _GL_ATTRIBUTE_NODISCARD extern void *hash_insert (Hash_table *table, const void *entry); /* Same as hash_insert, but invokes xalloc_die on memory exhaustion. */ /* This function is defined by module 'xhash'. */ extern void *hash_xinsert (Hash_table *table, const void *entry); /* Insert ENTRY into hash TABLE if there is not already a matching entry. Return -1 upon memory allocation failure. Return 1 if insertion succeeded. Return 0 if there is already a matching entry in the table, and in that case, if MATCHED_ENT is non-NULL, set *MATCHED_ENT to that entry. This interface is easier to use than hash_insert when you must distinguish between the latter two cases. More importantly, hash_insert is unusable for some types of ENTRY values. When using hash_insert, the only way to distinguish those cases is to compare the return value and ENTRY. That works only when you can have two different ENTRY values that point to data that compares "equal". Thus, when the ENTRY value is a simple scalar, you must use hash_insert_if_absent. ENTRY must not be NULL. */ extern int hash_insert_if_absent (Hash_table *table, const void *entry, const void **matched_ent); /* If ENTRY is already in the table, remove it and return the just-deleted data (the user may want to deallocate its storage). If ENTRY is not in the table, don't modify the table and return NULL. */ extern void *hash_remove (Hash_table *table, const void *entry); /* Same as hash_remove. This interface is deprecated. FIXME: Remove in 2022. */ _GL_ATTRIBUTE_DEPRECATED extern void *hash_delete (Hash_table *table, const void *entry); # ifdef __cplusplus } # endif #endif �����gnulib-20210822~d383792/lib/hmac-md5.c��������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0016612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-md5.c -- hashed message authentication codes Copyright (C) 2018-2021 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/>. */ #include <config.h> #include "hmac.h" #include "md5.h" #define GL_HMAC_NAME 5 #define GL_HMAC_BLOCKSIZE 64 #define GL_HMAC_HASHSIZE 16 #include "hmac.c" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hmac-sha1.c�������������������������������������������������������������0000664�0000000�0000000�00000001647�14110572173�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-sha1.c -- hashed message authentication codes Copyright (C) 2018-2021 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/>. */ #include <config.h> #include "hmac.h" #include "sha1.h" #define GL_HMAC_NAME 1 #define GL_HMAC_BLOCKSIZE 64 #define GL_HMAC_HASHSIZE 20 #include "hmac.c" �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hmac-sha256.c�����������������������������������������������������������0000664�0000000�0000000�00000001655�14110572173�0017136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-sha256.c -- hashed message authentication codes Copyright (C) 2018-2021 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/>. */ #include <config.h> #include "hmac.h" #include "sha256.h" #define GL_HMAC_NAME 256 #define GL_HMAC_BLOCKSIZE 64 #define GL_HMAC_HASHSIZE 32 #include "hmac.c" �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hmac-sha512.c�����������������������������������������������������������0000664�0000000�0000000�00000001656�14110572173�0017132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-sha512.c -- hashed message authentication codes Copyright (C) 2018-2021 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/>. */ #include <config.h> #include "hmac.h" #include "sha512.h" #define GL_HMAC_NAME 512 #define GL_HMAC_BLOCKSIZE 128 #define GL_HMAC_HASHSIZE 64 #include "hmac.c" ����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hmac.c������������������������������������������������������������������0000664�0000000�0000000�00000005277�14110572173�0016134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac.c -- hashed message authentication codes Copyright (C) 2005-2006, 2009-2021 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/>. */ #include <string.h> #include "memxor.h" #define IPAD 0x36 #define OPAD 0x5c /* Concatenate two preprocessor tokens. */ #define _GLHMAC_CONCAT_(prefix, suffix) prefix##suffix #define _GLHMAC_CONCAT(prefix, suffix) _GLHMAC_CONCAT_ (prefix, suffix) #if GL_HMAC_NAME == 5 # define HMAC_ALG md5 #else # define HMAC_ALG _GLHMAC_CONCAT (sha, GL_HMAC_NAME) #endif #define GL_HMAC_CTX _GLHMAC_CONCAT (HMAC_ALG, _ctx) #define GL_HMAC_FN _GLHMAC_CONCAT (hmac_, HMAC_ALG) #define GL_HMAC_FN_INIT _GLHMAC_CONCAT (HMAC_ALG, _init_ctx) #define GL_HMAC_FN_BLOC _GLHMAC_CONCAT (HMAC_ALG, _process_block) #define GL_HMAC_FN_PROC _GLHMAC_CONCAT (HMAC_ALG, _process_bytes) #define GL_HMAC_FN_FINI _GLHMAC_CONCAT (HMAC_ALG, _finish_ctx) static void hmac_hash (const void *key, size_t keylen, const void *in, size_t inlen, int pad, void *resbuf) { struct GL_HMAC_CTX hmac_ctx; char block[GL_HMAC_BLOCKSIZE]; memset (block, pad, sizeof block); memxor (block, key, keylen); GL_HMAC_FN_INIT (&hmac_ctx); GL_HMAC_FN_BLOC (block, sizeof block, &hmac_ctx); GL_HMAC_FN_PROC (in, inlen, &hmac_ctx); GL_HMAC_FN_FINI (&hmac_ctx, resbuf); } int GL_HMAC_FN (const void *key, size_t keylen, const void *in, size_t inlen, void *resbuf) { char optkeybuf[GL_HMAC_HASHSIZE]; char innerhash[GL_HMAC_HASHSIZE]; /* Ensure key size is <= block size. */ if (keylen > GL_HMAC_BLOCKSIZE) { struct GL_HMAC_CTX keyhash; GL_HMAC_FN_INIT (&keyhash); GL_HMAC_FN_PROC (key, keylen, &keyhash); GL_HMAC_FN_FINI (&keyhash, optkeybuf); key = optkeybuf; /* zero padding of the key to the block size is implicit in the memxor. */ keylen = sizeof optkeybuf; } /* Compute INNERHASH from KEY and IN. */ hmac_hash (key, keylen, in, inlen, IPAD, innerhash); /* Compute result from KEY and INNERHASH. */ hmac_hash (key, keylen, innerhash, sizeof innerhash, OPAD, resbuf); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hmac.h������������������������������������������������������������������0000664�0000000�0000000�00000004345�14110572173�0016134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac.h -- hashed message authentication codes Copyright (C) 2005, 2009-2021 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 Simon Josefsson. */ #ifndef HMAC_H # define HMAC_H 1 #include <stddef.h> /* Compute Hashed Message Authentication Code with MD5, as described in RFC 2104, over BUFFER data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the output to pre-allocated 16 byte minimum RESBUF buffer. Return 0 on success. */ int hmac_md5 (const void *key, size_t keylen, const void *buffer, size_t buflen, void *restrict resbuf); /* Compute Hashed Message Authentication Code with SHA-1, over BUFFER data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the output to pre-allocated 20 byte minimum RESBUF buffer. Return 0 on success. */ int hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, void *restrict resbuf); /* Compute Hashed Message Authentication Code with SHA-256, over BUFFER data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the output to pre-allocated 32 byte minimum RESBUF buffer. Return 0 on success. */ int hmac_sha256 (const void *key, size_t keylen, const void *in, size_t inlen, void *restrict resbuf); /* Compute Hashed Message Authentication Code with SHA-512, over BUFFER data of BUFLEN bytes using the KEY of KEYLEN bytes, writing the output to pre-allocated 64 byte minimum RESBUF buffer. Return 0 on success. */ int hmac_sha512 (const void *key, size_t keylen, const void *in, size_t inlen, void *restrict resbuf); #endif /* HMAC_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/human.c�����������������������������������������������������������������0000664�0000000�0000000�00000032460�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* human.c -- print human readable file size Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Larry McVoy. */ #include <config.h> #include "human.h" #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <argmatch.h> #include <error.h> #include <intprops.h> /* The maximum length of a suffix like "KiB". */ #define HUMAN_READABLE_SUFFIX_LENGTH_MAX 3 static const char power_letter[] = { 0, /* not used */ 'K', /* kibi ('k' for kilo is a special case) */ 'M', /* mega or mebi */ 'G', /* giga or gibi */ 'T', /* tera or tebi */ 'P', /* peta or pebi */ 'E', /* exa or exbi */ 'Z', /* zetta or 2**70 */ 'Y' /* yotta or 2**80 */ }; /* If INEXACT_STYLE is not human_round_to_nearest, and if easily possible, adjust VALUE according to the style. */ static long double adjust_value (int inexact_style, long double value) { /* Do not use the floorl or ceill functions, as that would mean checking for their presence and possibly linking with the standard math library, which is a porting pain. So leave the value alone if it is too large to easily round. */ if (inexact_style != human_round_to_nearest && value < UINTMAX_MAX) { uintmax_t u = value; value = u + (inexact_style == human_ceiling && u != value); } return value; } /* Group the digits of NUMBER according to the grouping rules of the current locale. NUMBER contains NUMBERLEN digits. Modify the bytes pointed to by NUMBER in place, subtracting 1 from NUMBER for each byte inserted. Return the starting address of the modified number. To group the digits, use GROUPING and THOUSANDS_SEP as in 'struct lconv' from <locale.h>. */ static char * group_number (char *number, size_t numberlen, char const *grouping, char const *thousands_sep) { register char *d; size_t grouplen = SIZE_MAX; size_t thousands_seplen = strlen (thousands_sep); size_t i = numberlen; /* The maximum possible value for NUMBERLEN is the number of digits in the square of the largest uintmax_t, so double the size needed. */ char buf[2 * INT_STRLEN_BOUND (uintmax_t) + 1]; memcpy (buf, number, numberlen); d = number + numberlen; for (;;) { unsigned char g = *grouping; if (g) { grouplen = g < CHAR_MAX ? g : i; grouping++; } if (i < grouplen) grouplen = i; d -= grouplen; i -= grouplen; memcpy (d, buf + i, grouplen); if (i == 0) return d; d -= thousands_seplen; memcpy (d, thousands_sep, thousands_seplen); } } /* Convert N to a human readable format in BUF, using the options OPTS. N is expressed in units of FROM_BLOCK_SIZE. FROM_BLOCK_SIZE must be nonnegative. Use units of TO_BLOCK_SIZE in the output number. TO_BLOCK_SIZE must be positive. Use (OPTS & (human_round_to_nearest | human_floor | human_ceiling)) to determine whether to take the ceiling or floor of any result that cannot be expressed exactly. If (OPTS & human_group_digits), group the thousands digits according to the locale, e.g., "1,000,000" in an American English locale. If (OPTS & human_autoscale), deduce the output block size automatically; TO_BLOCK_SIZE must be 1 but it has no effect on the output. Use powers of 1024 if (OPTS & human_base_1024), and powers of 1000 otherwise. For example, assuming powers of 1024, 8500 would be converted to 8.3, 133456345 to 127, 56990456345 to 53, and so on. Numbers smaller than the power aren't modified. human_autoscale is normally used together with human_SI. If (OPTS & human_space_before_unit), use a space to separate the number from any suffix that is appended as described below. If (OPTS & human_SI), append an SI prefix indicating which power is being used. If in addition (OPTS & human_B), append "B" (if base 1000) or "iB" (if base 1024) to the SI prefix. When ((OPTS & human_SI) && ! (OPTS & human_autoscale)), TO_BLOCK_SIZE must be a power of 1024 or of 1000, depending on (OPTS & human_base_1024). */ char * human_readable (uintmax_t n, char *buf, int opts, uintmax_t from_block_size, uintmax_t to_block_size) { int inexact_style = opts & (human_round_to_nearest | human_floor | human_ceiling); unsigned int base = opts & human_base_1024 ? 1024 : 1000; uintmax_t amt; int tenths; int exponent = -1; int exponent_max = sizeof power_letter - 1; char *p; char *psuffix; char const *integerlim; /* 0 means adjusted N == AMT.TENTHS; 1 means AMT.TENTHS < adjusted N < AMT.TENTHS + 0.05; 2 means adjusted N == AMT.TENTHS + 0.05; 3 means AMT.TENTHS + 0.05 < adjusted N < AMT.TENTHS + 0.1. */ int rounding; char const *decimal_point = "."; size_t decimal_pointlen = 1; char const *grouping = ""; char const *thousands_sep = ""; struct lconv const *l = localeconv (); size_t pointlen = strlen (l->decimal_point); if (0 < pointlen && pointlen <= MB_LEN_MAX) { decimal_point = l->decimal_point; decimal_pointlen = pointlen; } grouping = l->grouping; if (strlen (l->thousands_sep) <= MB_LEN_MAX) thousands_sep = l->thousands_sep; /* Leave room for a trailing space and following suffix. */ psuffix = buf + LONGEST_HUMAN_READABLE - 1 - HUMAN_READABLE_SUFFIX_LENGTH_MAX; p = psuffix; /* Adjust AMT out of FROM_BLOCK_SIZE units and into TO_BLOCK_SIZE units. If this can be done exactly with integer arithmetic, do not use floating point operations. */ if (to_block_size <= from_block_size) { if (from_block_size % to_block_size == 0) { uintmax_t multiplier = from_block_size / to_block_size; amt = n * multiplier; if (amt / multiplier == n) { tenths = 0; rounding = 0; goto use_integer_arithmetic; } } } else if (from_block_size != 0 && to_block_size % from_block_size == 0) { uintmax_t divisor = to_block_size / from_block_size; uintmax_t r10 = (n % divisor) * 10; uintmax_t r2 = (r10 % divisor) * 2; amt = n / divisor; tenths = r10 / divisor; rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2); goto use_integer_arithmetic; } { /* Either the result cannot be computed easily using uintmax_t, or from_block_size is zero. Fall back on floating point. FIXME: This can yield answers that are slightly off. */ long double dto_block_size = to_block_size; long double damt = n * (from_block_size / dto_block_size); size_t buflen; size_t nonintegerlen; if (! (opts & human_autoscale)) { sprintf (buf, "%.0Lf", adjust_value (inexact_style, damt)); buflen = strlen (buf); nonintegerlen = 0; } else { long double e = 1; exponent = 0; do { e *= base; exponent++; } while (e * base <= damt && exponent < exponent_max); damt /= e; sprintf (buf, "%.1Lf", adjust_value (inexact_style, damt)); buflen = strlen (buf); nonintegerlen = decimal_pointlen + 1; if (1 + nonintegerlen + ! (opts & human_base_1024) < buflen || ((opts & human_suppress_point_zero) && buf[buflen - 1] == '0')) { sprintf (buf, "%.0Lf", adjust_value (inexact_style, damt * 10) / 10); buflen = strlen (buf); nonintegerlen = 0; } } p = psuffix - buflen; memmove (p, buf, buflen); integerlim = p + buflen - nonintegerlen; } goto do_grouping; use_integer_arithmetic: { /* The computation can be done exactly, with integer arithmetic. Use power of BASE notation if requested and if adjusted AMT is large enough. */ if (opts & human_autoscale) { exponent = 0; if (base <= amt) { do { unsigned int r10 = (amt % base) * 10 + tenths; unsigned int r2 = (r10 % base) * 2 + (rounding >> 1); amt /= base; tenths = r10 / base; rounding = (r2 < base ? (r2 + rounding) != 0 : 2 + (base < r2 + rounding)); exponent++; } while (base <= amt && exponent < exponent_max); if (amt < 10) { if (inexact_style == human_round_to_nearest ? 2 < rounding + (tenths & 1) : inexact_style == human_ceiling && 0 < rounding) { tenths++; rounding = 0; if (tenths == 10) { amt++; tenths = 0; } } if (amt < 10 && (tenths || ! (opts & human_suppress_point_zero))) { *--p = '0' + tenths; p -= decimal_pointlen; memcpy (p, decimal_point, decimal_pointlen); tenths = rounding = 0; } } } } if (inexact_style == human_round_to_nearest ? 5 < tenths + (0 < rounding + (amt & 1)) : inexact_style == human_ceiling && 0 < tenths + rounding) { amt++; if ((opts & human_autoscale) && amt == base && exponent < exponent_max) { exponent++; if (! (opts & human_suppress_point_zero)) { *--p = '0'; p -= decimal_pointlen; memcpy (p, decimal_point, decimal_pointlen); } amt = 1; } } integerlim = p; do { int digit = amt % 10; *--p = digit + '0'; } while ((amt /= 10) != 0); } do_grouping: if (opts & human_group_digits) p = group_number (p, integerlim - p, grouping, thousands_sep); if (opts & human_SI) { if (exponent < 0) { uintmax_t power; exponent = 0; for (power = 1; power < to_block_size; power *= base) if (++exponent == exponent_max) break; } if ((exponent | (opts & human_B)) && (opts & human_space_before_unit)) *psuffix++ = ' '; if (exponent) *psuffix++ = (! (opts & human_base_1024) && exponent == 1 ? 'k' : power_letter[exponent]); if (opts & human_B) { if ((opts & human_base_1024) && exponent) *psuffix++ = 'i'; *psuffix++ = 'B'; } } *psuffix = '\0'; return p; } /* The default block size used for output. This number may change in the future as disks get larger. */ #ifndef DEFAULT_BLOCK_SIZE # define DEFAULT_BLOCK_SIZE 1024 #endif static char const *const block_size_args[] = { "human-readable", "si", 0 }; static int const block_size_opts[] = { human_autoscale + human_SI + human_base_1024, human_autoscale + human_SI }; static uintmax_t default_block_size (void) { return getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE; } static strtol_error humblock (char const *spec, uintmax_t *block_size, int *options) { int i; int opts = 0; if (! spec && ! (spec = getenv ("BLOCK_SIZE")) && ! (spec = getenv ("BLOCKSIZE"))) *block_size = default_block_size (); else { if (*spec == '\'') { opts |= human_group_digits; spec++; } if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_opts))) { opts |= block_size_opts[i]; *block_size = 1; } else { char *ptr; strtol_error e = xstrtoumax (spec, &ptr, 0, block_size, "eEgGkKmMpPtTyYzZ0"); if (e != LONGINT_OK) { *options = 0; return e; } for (; ! ('0' <= *spec && *spec <= '9'); spec++) if (spec == ptr) { opts |= human_SI; if (ptr[-1] == 'B') opts |= human_B; if (ptr[-1] != 'B' || ptr[-2] == 'i') opts |= human_base_1024; break; } } } *options = opts; return LONGINT_OK; } enum strtol_error human_options (char const *spec, int *opts, uintmax_t *block_size) { strtol_error e = humblock (spec, block_size, opts); if (*block_size == 0) { *block_size = default_block_size (); e = LONGINT_INVALID; } return e; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/human.h�����������������������������������������������������������������0000664�0000000�0000000�00000005373�14110572173�0016336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* human.h -- print human readable file size Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Larry McVoy. */ #ifndef HUMAN_H_ # define HUMAN_H_ 1 # include <limits.h> # include <stdbool.h> # include <stdint.h> # include <unistd.h> # include <xstrtol.h> /* A conservative bound on the maximum length of a human-readable string. The output can be the square of the largest uintmax_t, so double its size before converting to a bound. log10 (2.0) < 146/485. Add 1 for integer division truncation. Also, the output can have a thousands separator between every digit, so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX. Append 1 for a space before the suffix. Finally, append 3, the maximum length of a suffix. */ # define LONGEST_HUMAN_READABLE \ ((2 * sizeof (uintmax_t) * CHAR_BIT * 146 / 485 + 1) * (MB_LEN_MAX + 1) \ - MB_LEN_MAX + 1 + 3) /* Options for human_readable. */ enum { /* Unless otherwise specified these options may be ORed together. */ /* The following three options are mutually exclusive. */ /* Round to plus infinity (default). */ human_ceiling = 0, /* Round to nearest, ties to even. */ human_round_to_nearest = 1, /* Round to minus infinity. */ human_floor = 2, /* Group digits together, e.g. "1,000,000". This uses the locale-defined grouping; the traditional C locale does not group, so this has effect only if some other locale is in use. */ human_group_digits = 4, /* When autoscaling, suppress ".0" at end. */ human_suppress_point_zero = 8, /* Scale output and use SI-style units, ignoring the output block size. */ human_autoscale = 16, /* Prefer base 1024 to base 1000. */ human_base_1024 = 32, /* Prepend " " before unit symbol. */ human_space_before_unit = 64, /* Append SI prefix, e.g. "k" or "M". */ human_SI = 128, /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix. */ human_B = 256 }; char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t); enum strtol_error human_options (char const *, int *, uintmax_t *); #endif /* HUMAN_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hypot.c�����������������������������������������������������������������0000664�0000000�0000000�00000003726�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hypotenuse of a right-angled triangle. Copyright (C) 2012-2021 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>, 2012. */ #include <config.h> /* Specification. */ #include <math.h> double hypot (double x, double y) { if (isfinite (x) && isfinite (y)) { /* Determine absolute values. */ x = fabs (x); y = fabs (y); { /* Find the bigger and the smaller one. */ double a; double b; if (x >= y) { a = x; b = y; } else { a = y; b = x; } /* Now 0 <= b <= a. */ { int e; double an; double bn; /* Write a = an * 2^e, b = bn * 2^e with 0 <= bn <= an < 1. */ an = frexp (a, &e); bn = ldexp (b, - e); { double cn; /* Through the normalization, no unneeded overflow or underflow will occur here. */ cn = sqrt (an * an + bn * bn); return ldexp (cn, e); } } } } else { if (isinf (x) || isinf (y)) /* x or y is infinite. Return +Infinity. */ return HUGE_VAL; else /* x or y is NaN. Return NaN. */ return x + y; } } ������������������������������������������gnulib-20210822~d383792/lib/hypotf.c����������������������������������������������������������������0000664�0000000�0000000�00000001617�14110572173�0016527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hypotenuse of a right-angled triangle. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float hypotf (float x, float y) { return (float) hypot ((double) x, (double) y); } �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/hypotl.c����������������������������������������������������������������0000664�0000000�0000000�00000004210�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hypotenuse of a right-angled triangle. Copyright (C) 2012-2021 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>, 2012. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double hypotl (long double x, long double y) { return hypot (x, y); } #else long double hypotl (long double x, long double y) { if (isfinite (x) && isfinite (y)) { /* Determine absolute values. */ x = fabsl (x); y = fabsl (y); { /* Find the bigger and the smaller one. */ long double a; long double b; if (x >= y) { a = x; b = y; } else { a = y; b = x; } /* Now 0 <= b <= a. */ { int e; long double an; long double bn; /* Write a = an * 2^e, b = bn * 2^e with 0 <= bn <= an < 1. */ an = frexpl (a, &e); bn = ldexpl (b, - e); { long double cn; /* Through the normalization, no unneeded overflow or underflow will occur here. */ cn = sqrtl (an * an + bn * bn); return ldexpl (cn, e); } } } } else { if (isinf (x) || isinf (y)) /* x or y is infinite. Return +Infinity. */ return HUGE_VALL; else /* x or y is NaN. Return NaN. */ return x + y; } } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/i-ring.c����������������������������������������������������������������0000664�0000000�0000000�00000003430�14110572173�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* a simple ring buffer Copyright (C) 2006, 2009-2021 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 Jim Meyering */ #include <config.h> #include "i-ring.h" #include <stdlib.h> void i_ring_init (I_ring *ir, int default_val) { int i; ir->ir_empty = true; ir->ir_front = 0; ir->ir_back = 0; for (i = 0; i < I_RING_SIZE; i++) ir->ir_data[i] = default_val; ir->ir_default_val = default_val; } bool i_ring_empty (I_ring const *ir) { return ir->ir_empty; } int i_ring_push (I_ring *ir, int val) { unsigned int dest_idx = (ir->ir_front + !ir->ir_empty) % I_RING_SIZE; int old_val = ir->ir_data[dest_idx]; ir->ir_data[dest_idx] = val; ir->ir_front = dest_idx; if (dest_idx == ir->ir_back) ir->ir_back = (ir->ir_back + !ir->ir_empty) % I_RING_SIZE; ir->ir_empty = false; return old_val; } int i_ring_pop (I_ring *ir) { int top_val; if (i_ring_empty (ir)) abort (); top_val = ir->ir_data[ir->ir_front]; ir->ir_data[ir->ir_front] = ir->ir_default_val; if (ir->ir_front == ir->ir_back) ir->ir_empty = true; else ir->ir_front = ((ir->ir_front + I_RING_SIZE - 1) % I_RING_SIZE); return top_val; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/i-ring.h����������������������������������������������������������������0000664�0000000�0000000�00000003213�14110572173�0016402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* definitions for a simple ring buffer Copyright (C) 2006, 2009-2021 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/>. */ #include <stdbool.h> #include "verify.h" enum { I_RING_SIZE = 4 }; verify (1 <= I_RING_SIZE); /* When ir_empty is true, the ring is empty. Otherwise, ir_data[B..F] are defined, where B..F is the contiguous range of indices, modulo I_RING_SIZE, from back to front, inclusive. Undefined elements of ir_data are always set to ir_default_val. Popping from an empty ring aborts. Pushing onto a full ring returns the displaced value. An empty ring has F==B and ir_empty == true. A ring with one entry still has F==B, but now ir_empty == false. */ struct I_ring { int ir_data[I_RING_SIZE]; int ir_default_val; unsigned int ir_front; unsigned int ir_back; bool ir_empty; }; typedef struct I_ring I_ring; void i_ring_init (I_ring *ir, int ir_default_val); int i_ring_push (I_ring *ir, int val); int i_ring_pop (I_ring *ir); bool i_ring_empty (I_ring const *ir) _GL_ATTRIBUTE_PURE; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ialloc.c����������������������������������������������������������������0000664�0000000�0000000�00000001503�14110572173�0016453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc with idx_t rather than size_t Copyright 2021 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/>. */ #include <config.h> #define IALLOC_INLINE _GL_EXTERN_INLINE #include "ialloc.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ialloc.h����������������������������������������������������������������0000664�0000000�0000000�00000004454�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ialloc.h -- malloc with idx_t rather than size_t Copyright 2021 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/>. */ #ifndef IALLOC_H_ #define IALLOC_H_ #include "idx.h" #include <errno.h> #include <stdint.h> #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef IALLOC_INLINE # define IALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif IALLOC_INLINE void * _GL_ATTRIBUTE_COLD _gl_alloc_nomem (void) { errno = ENOMEM; return NULL; } IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * imalloc (idx_t s) { return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); } 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 (); } IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * icalloc (idx_t n, idx_t s) { if (SIZE_MAX < n) { if (s != 0) return _gl_alloc_nomem (); n = 0; } if (SIZE_MAX < s) { if (n != 0) return _gl_alloc_nomem (); s = 0; } return calloc (n, s); } 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 ()); } #ifdef __cplusplus } #endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv.c�����������������������������������������������������������������0000664�0000000�0000000�00000026242�14110572173�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 1999-2001, 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <iconv.h> #include <stddef.h> #if REPLACE_ICONV_UTF # include <errno.h> # include <stdint.h> # include <stdlib.h> # include "unistr.h" #endif #if REPLACE_ICONV_UTF /* UTF-{16,32}{BE,LE} converters taken from GNU libiconv 1.11. */ /* Return code if invalid. (xxx_mbtowc) */ # define RET_ILSEQ -1 /* Return code if no bytes were read. (xxx_mbtowc) */ # define RET_TOOFEW -2 /* Return code if invalid. (xxx_wctomb) */ # define RET_ILUNI -1 /* Return code if output buffer is too small. (xxx_wctomb, xxx_reset) */ # define RET_TOOSMALL -2 /* * UTF-16BE */ /* Specification: RFC 2781 */ static int utf16be_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n) { if (n >= 2) { ucs4_t wc = (s[0] << 8) + s[1]; if (wc >= 0xd800 && wc < 0xdc00) { if (n >= 4) { ucs4_t wc2 = (s[2] << 8) + s[3]; if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) return RET_ILSEQ; *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); return 4; } } else if (wc >= 0xdc00 && wc < 0xe000) { return RET_ILSEQ; } else { *pwc = wc; return 2; } } return RET_TOOFEW; } static int utf16be_wctomb (unsigned char *r, ucs4_t wc, size_t n) { if (!(wc >= 0xd800 && wc < 0xe000)) { if (wc < 0x10000) { if (n >= 2) { r[0] = (unsigned char) (wc >> 8); r[1] = (unsigned char) wc; return 2; } else return RET_TOOSMALL; } else if (wc < 0x110000) { if (n >= 4) { ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); r[0] = (unsigned char) (wc1 >> 8); r[1] = (unsigned char) wc1; r[2] = (unsigned char) (wc2 >> 8); r[3] = (unsigned char) wc2; return 4; } else return RET_TOOSMALL; } } return RET_ILUNI; } /* * UTF-16LE */ /* Specification: RFC 2781 */ static int utf16le_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n) { if (n >= 2) { ucs4_t wc = s[0] + (s[1] << 8); if (wc >= 0xd800 && wc < 0xdc00) { if (n >= 4) { ucs4_t wc2 = s[2] + (s[3] << 8); if (!(wc2 >= 0xdc00 && wc2 < 0xe000)) return RET_ILSEQ; *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00); return 4; } } else if (wc >= 0xdc00 && wc < 0xe000) { return RET_ILSEQ; } else { *pwc = wc; return 2; } } return RET_TOOFEW; } static int utf16le_wctomb (unsigned char *r, ucs4_t wc, size_t n) { if (!(wc >= 0xd800 && wc < 0xe000)) { if (wc < 0x10000) { if (n >= 2) { r[0] = (unsigned char) wc; r[1] = (unsigned char) (wc >> 8); return 2; } else return RET_TOOSMALL; } else if (wc < 0x110000) { if (n >= 4) { ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10); ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff); r[0] = (unsigned char) wc1; r[1] = (unsigned char) (wc1 >> 8); r[2] = (unsigned char) wc2; r[3] = (unsigned char) (wc2 >> 8); return 4; } else return RET_TOOSMALL; } } return RET_ILUNI; } /* * UTF-32BE */ /* Specification: Unicode 3.1 Standard Annex #19 */ static int utf32be_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n) { if (n >= 4) { ucs4_t wc = (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3]; if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { *pwc = wc; return 4; } else return RET_ILSEQ; } return RET_TOOFEW; } static int utf32be_wctomb (unsigned char *r, ucs4_t wc, size_t n) { if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { if (n >= 4) { r[0] = 0; r[1] = (unsigned char) (wc >> 16); r[2] = (unsigned char) (wc >> 8); r[3] = (unsigned char) wc; return 4; } else return RET_TOOSMALL; } return RET_ILUNI; } /* * UTF-32LE */ /* Specification: Unicode 3.1 Standard Annex #19 */ static int utf32le_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n) { if (n >= 4) { ucs4_t wc = s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24); if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { *pwc = wc; return 4; } else return RET_ILSEQ; } return RET_TOOFEW; } static int utf32le_wctomb (unsigned char *r, ucs4_t wc, size_t n) { if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000)) { if (n >= 4) { r[0] = (unsigned char) wc; r[1] = (unsigned char) (wc >> 8); r[2] = (unsigned char) (wc >> 16); r[3] = 0; return 4; } else return RET_TOOSMALL; } return RET_ILUNI; } #endif size_t rpl_iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) #undef iconv { #if REPLACE_ICONV_UTF switch ((uintptr_t) cd) { { int (*xxx_wctomb) (unsigned char *, ucs4_t, size_t); case (uintptr_t) _ICONV_UTF8_UTF16BE: xxx_wctomb = utf16be_wctomb; goto loop_from_utf8; case (uintptr_t) _ICONV_UTF8_UTF16LE: xxx_wctomb = utf16le_wctomb; goto loop_from_utf8; case (uintptr_t) _ICONV_UTF8_UTF32BE: xxx_wctomb = utf32be_wctomb; goto loop_from_utf8; case (uintptr_t) _ICONV_UTF8_UTF32LE: xxx_wctomb = utf32le_wctomb; goto loop_from_utf8; loop_from_utf8: if (inbuf == NULL || *inbuf == NULL) return 0; { ICONV_CONST char *inptr = *inbuf; size_t inleft = *inbytesleft; char *outptr = *outbuf; size_t outleft = *outbytesleft; size_t res = 0; while (inleft > 0) { ucs4_t uc; int m = u8_mbtoucr (&uc, (const uint8_t *) inptr, inleft); if (m <= 0) { if (m == -1) { errno = EILSEQ; res = (size_t)(-1); break; } if (m == -2) { errno = EINVAL; res = (size_t)(-1); break; } abort (); } else { int n = xxx_wctomb ((uint8_t *) outptr, uc, outleft); if (n < 0) { if (n == RET_ILUNI) { errno = EILSEQ; res = (size_t)(-1); break; } if (n == RET_TOOSMALL) { errno = E2BIG; res = (size_t)(-1); break; } abort (); } else { inptr += m; inleft -= m; outptr += n; outleft -= n; } } } *inbuf = inptr; *inbytesleft = inleft; *outbuf = outptr; *outbytesleft = outleft; return res; } } { int (*xxx_mbtowc) (ucs4_t *, const unsigned char *, size_t); case (uintptr_t) _ICONV_UTF16BE_UTF8: xxx_mbtowc = utf16be_mbtowc; goto loop_to_utf8; case (uintptr_t) _ICONV_UTF16LE_UTF8: xxx_mbtowc = utf16le_mbtowc; goto loop_to_utf8; case (uintptr_t) _ICONV_UTF32BE_UTF8: xxx_mbtowc = utf32be_mbtowc; goto loop_to_utf8; case (uintptr_t) _ICONV_UTF32LE_UTF8: xxx_mbtowc = utf32le_mbtowc; goto loop_to_utf8; loop_to_utf8: if (inbuf == NULL || *inbuf == NULL) return 0; { ICONV_CONST char *inptr = *inbuf; size_t inleft = *inbytesleft; char *outptr = *outbuf; size_t outleft = *outbytesleft; size_t res = 0; while (inleft > 0) { ucs4_t uc; int m = xxx_mbtowc (&uc, (const uint8_t *) inptr, inleft); if (m <= 0) { if (m == RET_ILSEQ) { errno = EILSEQ; res = (size_t)(-1); break; } if (m == RET_TOOFEW) { errno = EINVAL; res = (size_t)(-1); break; } abort (); } else { int n = u8_uctomb ((uint8_t *) outptr, uc, outleft); if (n < 0) { if (n == -1) { errno = EILSEQ; res = (size_t)(-1); break; } if (n == -2) { errno = E2BIG; res = (size_t)(-1); break; } abort (); } else { inptr += m; inleft -= m; outptr += n; outleft -= n; } } } *inbuf = inptr; *inbytesleft = inleft; *outbuf = outptr; *outbytesleft = outleft; return res; } } } #endif return iconv (cd, inbuf, inbytesleft, outbuf, outbytesleft); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv.in.h��������������������������������������������������������������0000664�0000000�0000000�00000010356�14110572173�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <iconv.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_ICONV_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ICONV_H@ #ifndef _@GUARD_PREFIX@_ICONV_H #define _@GUARD_PREFIX@_ICONV_H /* 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. */ #if @GNULIB_ICONV@ # if @REPLACE_ICONV_OPEN@ /* An iconv_open wrapper that supports the IANA standardized encoding names ("ISO-8859-1" etc.) as far as possible. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iconv_open rpl_iconv_open # endif _GL_FUNCDECL_RPL (iconv_open, iconv_t, (const char *tocode, const char *fromcode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (iconv_open, iconv_t, (const char *tocode, const char *fromcode)); # else _GL_CXXALIAS_SYS (iconv_open, iconv_t, (const char *tocode, const char *fromcode)); # endif _GL_CXXALIASWARN (iconv_open); #elif defined GNULIB_POSIXCHECK # undef iconv_open # if HAVE_RAW_DECL_ICONV_OPEN _GL_WARN_ON_USE (iconv_open, "iconv_open is not working correctly everywhere - " "use gnulib module iconv for portability"); # endif #endif #if @REPLACE_ICONV_UTF@ /* Special constants for supporting UTF-{16,32}{BE,LE} encodings. Not public. */ # define _ICONV_UTF8_UTF16BE (iconv_t)(-161) # define _ICONV_UTF8_UTF16LE (iconv_t)(-162) # define _ICONV_UTF8_UTF32BE (iconv_t)(-163) # define _ICONV_UTF8_UTF32LE (iconv_t)(-164) # define _ICONV_UTF16BE_UTF8 (iconv_t)(-165) # define _ICONV_UTF16LE_UTF8 (iconv_t)(-166) # define _ICONV_UTF32BE_UTF8 (iconv_t)(-167) # define _ICONV_UTF32LE_UTF8 (iconv_t)(-168) #endif #if @GNULIB_ICONV@ # if @REPLACE_ICONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iconv rpl_iconv # endif _GL_FUNCDECL_RPL (iconv, size_t, (iconv_t cd, @ICONV_CONST@ char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft)); _GL_CXXALIAS_RPL (iconv, size_t, (iconv_t cd, @ICONV_CONST@ char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft)); # else /* Need to cast, because on some versions of Solaris, ICONV_CONST does not have the right value for C++. */ _GL_CXXALIAS_SYS_CAST (iconv, size_t, (iconv_t cd, @ICONV_CONST@ char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft)); # endif _GL_CXXALIASWARN (iconv); # ifndef ICONV_CONST # define ICONV_CONST @ICONV_CONST@ # endif #elif defined GNULIB_POSIXCHECK # undef iconv # if HAVE_RAW_DECL_ICONV _GL_WARN_ON_USE (iconv, "iconv is not working correctly everywhere - " "use gnulib module iconv for portability"); # endif #endif #if @GNULIB_ICONV@ # if @REPLACE_ICONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iconv_close rpl_iconv_close # endif _GL_FUNCDECL_RPL (iconv_close, int, (iconv_t cd)); _GL_CXXALIAS_RPL (iconv_close, int, (iconv_t cd)); # else _GL_CXXALIAS_SYS (iconv_close, int, (iconv_t cd)); # endif _GL_CXXALIASWARN (iconv_close); #endif #endif /* _@GUARD_PREFIX@_ICONV_H */ #endif /* _@GUARD_PREFIX@_ICONV_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_close.c�����������������������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <iconv.h> #include <stdint.h> int rpl_iconv_close (iconv_t cd) #undef iconv_close { #if REPLACE_ICONV_UTF switch ((uintptr_t) cd) { case (uintptr_t) _ICONV_UTF8_UTF16BE: case (uintptr_t) _ICONV_UTF8_UTF16LE: case (uintptr_t) _ICONV_UTF8_UTF32BE: case (uintptr_t) _ICONV_UTF8_UTF32LE: case (uintptr_t) _ICONV_UTF16BE_UTF8: case (uintptr_t) _ICONV_UTF16LE_UTF8: case (uintptr_t) _ICONV_UTF32BE_UTF8: case (uintptr_t) _ICONV_UTF32LE_UTF8: return 0; } #endif return iconv_close (cd); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open-aix.gperf����������������������������������������������������0000664�0000000�0000000�00000003313�14110572173�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2020-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[10 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% # On AIX 5.1, look in /usr/lib/nls/loc/uconvTable. ISO-8859-1, "ISO8859-1" ISO-8859-2, "ISO8859-2" ISO-8859-3, "ISO8859-3" ISO-8859-4, "ISO8859-4" ISO-8859-5, "ISO8859-5" ISO-8859-6, "ISO8859-6" ISO-8859-7, "ISO8859-7" ISO-8859-8, "ISO8859-8" ISO-8859-9, "ISO8859-9" ISO-8859-15, "ISO8859-15" CP437, "IBM-437" CP850, "IBM-850" CP852, "IBM-852" CP856, "IBM-856" CP857, "IBM-857" CP861, "IBM-861" CP865, "IBM-865" CP869, "IBM-869" ISO-8859-13, "IBM-921" CP922, "IBM-922" CP932, "IBM-932" CP943, "IBM-943" CP1046, "IBM-1046" CP1124, "IBM-1124" CP1125, "IBM-1125" CP1129, "IBM-1129" CP1252, "IBM-1252" GB2312, "IBM-eucCN" EUC-JP, "IBM-eucJP" EUC-KR, "IBM-eucKR" EUC-TW, "IBM-eucTW" BIG5, "big5" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open-hpux.gperf���������������������������������������������������0000664�0000000�0000000�00000003531�14110572173�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2020-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[9 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% # On HP-UX 11.11, look in /usr/lib/nls/iconv. ISO-8859-1, "iso88591" ISO-8859-2, "iso88592" ISO-8859-5, "iso88595" ISO-8859-6, "iso88596" ISO-8859-7, "iso88597" ISO-8859-8, "iso88598" ISO-8859-9, "iso88599" ISO-8859-15, "iso885915" CP437, "cp437" CP775, "cp775" CP850, "cp850" CP852, "cp852" CP855, "cp855" CP857, "cp857" CP861, "cp861" CP862, "cp862" CP864, "cp864" CP865, "cp865" CP866, "cp866" CP869, "cp869" CP874, "cp874" CP1250, "cp1250" CP1251, "cp1251" CP1252, "cp1252" CP1253, "cp1253" CP1254, "cp1254" CP1255, "cp1255" CP1256, "cp1256" CP1257, "cp1257" CP1258, "cp1258" HP-ROMAN8, "roman8" HP-ARABIC8, "arabic8" HP-GREEK8, "greek8" HP-HEBREW8, "hebrew8" HP-TURKISH8, "turkish8" HP-KANA8, "kana8" TIS-620, "tis620" GB2312, "hp15CN" EUC-JP, "eucJP" EUC-KR, "eucKR" EUC-TW, "eucTW" BIG5, "big5" SHIFT_JIS, "sjis" UTF-8, "utf8" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open-irix.gperf���������������������������������������������������0000664�0000000�0000000�00000002753�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2020-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[10 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% # On IRIX 6.5, look in /usr/lib/iconv and /usr/lib/international/encodings. ISO-8859-1, "ISO8859-1" ISO-8859-2, "ISO8859-2" ISO-8859-3, "ISO8859-3" ISO-8859-4, "ISO8859-4" ISO-8859-5, "ISO8859-5" ISO-8859-6, "ISO8859-6" ISO-8859-7, "ISO8859-7" ISO-8859-8, "ISO8859-8" ISO-8859-9, "ISO8859-9" ISO-8859-15, "ISO8859-15" KOI8-R, "KOI8" CP855, "DOS855" CP1251, "WIN1251" GB2312, "eucCN" EUC-JP, "eucJP" EUC-KR, "eucKR" EUC-TW, "eucTW" SHIFT_JIS, "sjis" TIS-620, "TIS620" ���������������������gnulib-20210822~d383792/lib/iconv_open-osf.gperf����������������������������������������������������0000664�0000000�0000000�00000003371�14110572173�0021022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2020-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[10 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% # On OSF/1 5.1, look in /usr/lib/nls/loc/iconv. ISO-8859-1, "ISO8859-1" ISO-8859-2, "ISO8859-2" ISO-8859-3, "ISO8859-3" ISO-8859-4, "ISO8859-4" ISO-8859-5, "ISO8859-5" ISO-8859-6, "ISO8859-6" ISO-8859-7, "ISO8859-7" ISO-8859-8, "ISO8859-8" ISO-8859-9, "ISO8859-9" ISO-8859-15, "ISO8859-15" CP437, "cp437" CP775, "cp775" CP850, "cp850" CP852, "cp852" CP855, "cp855" CP857, "cp857" CP861, "cp861" CP862, "cp862" CP865, "cp865" CP866, "cp866" CP869, "cp869" CP874, "cp874" CP949, "KSC5601" CP1250, "cp1250" CP1251, "cp1251" CP1252, "cp1252" CP1253, "cp1253" CP1254, "cp1254" CP1255, "cp1255" CP1256, "cp1256" CP1257, "cp1257" CP1258, "cp1258" EUC-JP, "eucJP" EUC-KR, "eucKR" EUC-TW, "eucTW" BIG5, "big5" SHIFT_JIS, "SJIS" TIS-620, "TACTIS" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open-solaris.gperf������������������������������������������������0000664�0000000�0000000�00000003140�14110572173�0021701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2009, 2020-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[10 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% # On Solaris 10, look in the "iconv -l" output. Some aliases are advertised but # not actually supported by the iconv() function and by the 'iconv' program. # For example: # $ echo abc | iconv -f 646 -t ISO-8859-1 # Not supported 646 to ISO-8859-1 # $ echo abc | iconv -f 646 -t ISO8859-1 $ abc ASCII, "646" ISO-8859-1, "ISO8859-1" ISO-8859-2, "ISO8859-2" ISO-8859-3, "ISO8859-3" ISO-8859-4, "ISO8859-4" ISO-8859-5, "ISO8859-5" ISO-8859-6, "ISO8859-6" ISO-8859-7, "ISO8859-7" ISO-8859-8, "ISO8859-8" ISO-8859-9, "ISO8859-9" ISO-8859-15, "ISO8859-15" CP1251, "ansi-1251" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open-zos.gperf����������������������������������������������������0000664�0000000�0000000�00000003634�14110572173�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2019-2021 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/>. */ struct mapping { int standard_name; const char vendor_name[10 + 1]; }; %struct-type %language=ANSI-C %define slot-name standard_name %define hash-function-name mapping_hash %define lookup-function-name mapping_lookup %readonly-tables %global-table %define word-array-name mappings %pic %% ASCII, "00367" ISO-8859-1, "ISO8859-1" ISO-8859-2, "ISO8859-2" ISO-8859-3, "00913" ISO-8859-4, "ISO8859-4" ISO-8859-5, "ISO8859-5" ISO-8859-6, "ISO8859-6" ISO-8859-7, "ISO8859-7" ISO-8859-8, "05012" ISO-8859-9, "ISO8859-9" ISO-8859-13, "ISO8859-13" ISO-8859-15, "ISO8859-15" KOI8-R, "00878" KOI8-U, "01168" CP437, "IBM-437" CP775, "00775" CP850, "09042" CP852, "IBM-852" CP855, "13143" CP856, "IBM-856" CP857, "00857" CP861, "IBM-861" CP862, "IBM-862" CP864, "IBM-864" CP865, "00865" CP866, "04962" CP869, "IBM-869" CP874, "TIS-620" CP922, "IBM-922" CP932, "IBM-943" CP943, "IBM-943" CP949, "IBM-1363" CP1046, "IBM-1046" CP1124, "IBM-1124" CP1125, "IBM-1125" CP1129, "01129" CP1131, "01131" CP1250, "IBM-5346" CP1251, "IBM-5347" CP1252, "IBM-5348" CP1253, "IBM-5349" CP1254, "IBM-5350" CP1255, "09447" CP1256, "09448" CP1257, "09449" GB2312, "IBM-eucCN" EUC-JP, "01350" EUC-KR, "IBM-eucKR" GBK, "IBM-1386" ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconv_open.c������������������������������������������������������������0000664�0000000�0000000�00000013014�14110572173�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <iconv.h> #include <errno.h> #include <string.h> #include "c-ctype.h" #include "c-strcase.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* Namespace cleanliness. */ #define mapping_lookup rpl_iconv_open_mapping_lookup /* The macro ICONV_FLAVOR is defined to one of these or undefined. */ #define ICONV_FLAVOR_AIX "iconv_open-aix.h" #define ICONV_FLAVOR_HPUX "iconv_open-hpux.h" #define ICONV_FLAVOR_IRIX "iconv_open-irix.h" #define ICONV_FLAVOR_OSF "iconv_open-osf.h" #define ICONV_FLAVOR_SOLARIS "iconv_open-solaris.h" #define ICONV_FLAVOR_ZOS "iconv_open-zos.h" #ifdef ICONV_FLAVOR # include ICONV_FLAVOR #endif iconv_t rpl_iconv_open (const char *tocode, const char *fromcode) #undef iconv_open { char fromcode_upper[32]; char tocode_upper[32]; char *fromcode_upper_end; char *tocode_upper_end; #if REPLACE_ICONV_UTF /* Special handling of conversion between UTF-8 and UTF-{16,32}{BE,LE}. Do this here, before calling the real iconv_open(), because OSF/1 5.1 iconv() to these encoding inserts a BOM, which is wrong. We do not need to handle conversion between arbitrary encodings and UTF-{16,32}{BE,LE}, because the 'striconveh' module implements two-step conversion through UTF-8. The _ICONV_* constants are chosen to be disjoint from any iconv_t returned by the system's iconv_open() functions. Recall that iconv_t is a scalar type. */ if (c_toupper (fromcode[0]) == 'U' && c_toupper (fromcode[1]) == 'T' && c_toupper (fromcode[2]) == 'F' && fromcode[3] == '-') { if (c_toupper (tocode[0]) == 'U' && c_toupper (tocode[1]) == 'T' && c_toupper (tocode[2]) == 'F' && tocode[3] == '-') { if (strcmp (fromcode + 4, "8") == 0) { if (c_strcasecmp (tocode + 4, "16BE") == 0) return _ICONV_UTF8_UTF16BE; if (c_strcasecmp (tocode + 4, "16LE") == 0) return _ICONV_UTF8_UTF16LE; if (c_strcasecmp (tocode + 4, "32BE") == 0) return _ICONV_UTF8_UTF32BE; if (c_strcasecmp (tocode + 4, "32LE") == 0) return _ICONV_UTF8_UTF32LE; } else if (strcmp (tocode + 4, "8") == 0) { if (c_strcasecmp (fromcode + 4, "16BE") == 0) return _ICONV_UTF16BE_UTF8; if (c_strcasecmp (fromcode + 4, "16LE") == 0) return _ICONV_UTF16LE_UTF8; if (c_strcasecmp (fromcode + 4, "32BE") == 0) return _ICONV_UTF32BE_UTF8; if (c_strcasecmp (fromcode + 4, "32LE") == 0) return _ICONV_UTF32LE_UTF8; } } } #endif /* Do *not* add special support for 8-bit encodings like ASCII or ISO-8859-1 here. This would lead to programs that work in some locales (such as the "C" or "en_US" locales) but do not work in East Asian locales. It is better if programmers make their programs depend on GNU libiconv (except on glibc systems), e.g. by using the AM_ICONV macro and documenting the dependency in an INSTALL or DEPENDENCIES file. */ /* Try with the original names first. This covers the case when fromcode or tocode is a lowercase encoding name that is understood by the system's iconv_open but not listed in our mappings table. */ { iconv_t cd = iconv_open (tocode, fromcode); if (cd != (iconv_t)(-1)) return cd; } /* Convert the encodings to upper case, because 1. in the arguments of iconv_open() on AIX, HP-UX, and OSF/1 the case matters, 2. it makes searching in the table faster. */ { const char *p = fromcode; char *q = fromcode_upper; while ((*q = c_toupper (*p)) != '\0') { p++; q++; if (q == &fromcode_upper[SIZEOF (fromcode_upper)]) { errno = EINVAL; return (iconv_t)(-1); } } fromcode_upper_end = q; } { const char *p = tocode; char *q = tocode_upper; while ((*q = c_toupper (*p)) != '\0') { p++; q++; if (q == &tocode_upper[SIZEOF (tocode_upper)]) { errno = EINVAL; return (iconv_t)(-1); } } tocode_upper_end = q; } #ifdef ICONV_FLAVOR /* Apply the mappings. */ { const struct mapping *m = mapping_lookup (fromcode_upper, fromcode_upper_end - fromcode_upper); fromcode = (m != NULL ? m->vendor_name : fromcode_upper); } { const struct mapping *m = mapping_lookup (tocode_upper, tocode_upper_end - tocode_upper); tocode = (m != NULL ? m->vendor_name : tocode_upper); } #else fromcode = fromcode_upper; tocode = tocode_upper; #endif return iconv_open (tocode, fromcode); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iconveh.h���������������������������������������������������������������0000664�0000000�0000000�00000002332�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion handler type. Copyright (C) 2001-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible. 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 _ICONVEH_H #define _ICONVEH_H #ifdef __cplusplus extern "C" { #endif /* Handling of unconvertible characters. */ enum iconv_ilseq_handler { iconveh_error, /* return and set errno = EILSEQ */ iconveh_question_mark, /* use one '?' per unconvertible character */ iconveh_escape_sequence /* use escape sequence \uxxxx or \Uxxxxxxxx */ }; #ifdef __cplusplus } #endif #endif /* _ICONVEH_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idcache.c���������������������������������������������������������������0000664�0000000�0000000�00000013647�14110572173�0016604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* idcache.c -- map user and group IDs, cached for speed Copyright (C) 1985, 1988-1990, 1997-1998, 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 "idcache.h" #include <stddef.h> #include <stdio.h> #include <string.h> #include <pwd.h> #include <grp.h> #include <unistd.h> #include "flexmember.h" #include "xalloc.h" #ifdef __DJGPP__ static char digits[] = "0123456789"; #endif struct userid { union { uid_t u; gid_t g; } id; struct userid *next; char name[FLEXIBLE_ARRAY_MEMBER]; }; /* FIXME: provide a function to free any malloc'd storage and reset lists, so that an application can use code like this just before exiting: #if defined GCC_LINT || defined lint idcache_clear (); #endif */ static struct userid *user_alist; /* Each entry on list is a user name for which the first lookup failed. */ static struct userid *nouser_alist; /* Use the same struct as for userids. */ static struct userid *group_alist; /* Each entry on list is a group name for which the first lookup failed. */ static struct userid *nogroup_alist; /* Translate UID to a login name, with cache, or NULL if unresolved. */ char * getuser (uid_t uid) { struct userid *tail; struct userid *match = NULL; for (tail = user_alist; tail; tail = tail->next) { if (tail->id.u == uid) { match = tail; break; } } if (match == NULL) { struct passwd *pwent = getpwuid (uid); char const *name = pwent ? pwent->pw_name : ""; match = xmalloc (FLEXSIZEOF (struct userid, name, strlen (name) + 1)); match->id.u = uid; strcpy (match->name, name); /* Add to the head of the list, so most recently used is first. */ match->next = user_alist; user_alist = match; } return match->name[0] ? match->name : NULL; } /* Translate USER to a UID, with cache. Return NULL if there is no such user. (We also cache which user names have no passwd entry, so we don't keep looking them up.) */ uid_t * getuidbyname (const char *user) { struct userid *tail; struct passwd *pwent; for (tail = user_alist; tail; tail = tail->next) /* Avoid a function call for the most common case. */ if (*tail->name == *user && !strcmp (tail->name, user)) return &tail->id.u; for (tail = nouser_alist; tail; tail = tail->next) /* Avoid a function call for the most common case. */ if (*tail->name == *user && !strcmp (tail->name, user)) return NULL; pwent = getpwnam (user); #ifdef __DJGPP__ /* We need to pretend to be the user USER, to make pwd functions know about an arbitrary user name. */ if (!pwent && strspn (user, digits) < strlen (user)) { setenv ("USER", user, 1); pwent = getpwnam (user); /* now it will succeed */ } #endif tail = xmalloc (FLEXSIZEOF (struct userid, name, strlen (user) + 1)); strcpy (tail->name, user); /* Add to the head of the list, so most recently used is first. */ if (pwent) { tail->id.u = pwent->pw_uid; tail->next = user_alist; user_alist = tail; return &tail->id.u; } tail->next = nouser_alist; nouser_alist = tail; return NULL; } /* Translate GID to a group name, with cache, or NULL if unresolved. */ char * getgroup (gid_t gid) { struct userid *tail; struct userid *match = NULL; for (tail = group_alist; tail; tail = tail->next) { if (tail->id.g == gid) { match = tail; break; } } if (match == NULL) { struct group *grent = getgrgid (gid); char const *name = grent ? grent->gr_name : ""; match = xmalloc (FLEXSIZEOF (struct userid, name, strlen (name) + 1)); match->id.g = gid; strcpy (match->name, name); /* Add to the head of the list, so most recently used is first. */ match->next = group_alist; group_alist = match; } return match->name[0] ? match->name : NULL; } /* Translate GROUP to a GID, with cache. Return NULL if there is no such group. (We also cache which group names have no group entry, so we don't keep looking them up.) */ gid_t * getgidbyname (const char *group) { struct userid *tail; struct group *grent; for (tail = group_alist; tail; tail = tail->next) /* Avoid a function call for the most common case. */ if (*tail->name == *group && !strcmp (tail->name, group)) return &tail->id.g; for (tail = nogroup_alist; tail; tail = tail->next) /* Avoid a function call for the most common case. */ if (*tail->name == *group && !strcmp (tail->name, group)) return NULL; grent = getgrnam (group); #ifdef __DJGPP__ /* We need to pretend to belong to group GROUP, to make grp functions know about an arbitrary group name. */ if (!grent && strspn (group, digits) < strlen (group)) { setenv ("GROUP", group, 1); grent = getgrnam (group); /* now it will succeed */ } #endif tail = xmalloc (FLEXSIZEOF (struct userid, name, strlen (group) + 1)); strcpy (tail->name, group); /* Add to the head of the list, so most recently used is first. */ if (grent) { tail->id.g = grent->gr_gid; tail->next = group_alist; group_alist = tail; return &tail->id.g; } tail->next = nogroup_alist; nogroup_alist = tail; return NULL; } �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idcache.h���������������������������������������������������������������0000664�0000000�0000000�00000002046�14110572173�0016600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Username <--> uid and groupname <--> gid conversions, with cache for speed. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2007. */ #ifndef IDCACHE_H # define IDCACHE_H 1 # include <sys/types.h> extern char *getuser (uid_t uid); extern char *getgroup (gid_t gid); extern uid_t *getuidbyname (const char *user); extern gid_t *getgidbyname (const char *group); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idpriv-drop.c�����������������������������������������������������������0000664�0000000�0000000�00000010424�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process permanently. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "idpriv.h" #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int idpriv_drop (void) { #if HAVE_GETUID int uid = getuid (); #endif #if HAVE_GETGID int gid = getgid (); #endif /* Drop the gid privilege first, because in some cases the gid privilege cannot be dropped after the uid privilege has been dropped. */ /* This is for executables that have the setgid bit set. */ #if HAVE_SETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ /* This code is needed: In particular, on HP-UX 11.11, setregid (gid, gid) may leave the saved gid as 0. See also the comment below regarding setresuid. */ if (setresgid (gid, gid, gid) < 0) return -1; #elif HAVE_SETREGID /* Mac OS X, NetBSD, AIX, IRIX, Solaris, OSF/1, Cygwin */ if (setregid (gid, gid) < 0) return -1; #elif HAVE_SETEGID /* Solaris 2.4 */ if (setegid (gid) < 0) return -1; #endif /* This is for executables that have the setuid bit set. */ #if HAVE_SETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ /* On systems which have setresuid(), we use it instead of setreuid(), because Hao Chen, David Wagner, Drew Dean: Setuid Demystified <https://www.usenix.org/legacy/publications/library/proceedings/sec02/full_papers/chen/chen.pdf> says about setreuid(): "The rule by which the saved uid id is modified is complicated." Similarly, <https://unixpapa.com/incnote/setuid.html> says about setreuid(): "What exactly happens to the saved UID when this is used seems to vary a lot." */ if (setresuid (uid, uid, uid) < 0) return -1; #elif HAVE_SETREUID /* Mac OS X, NetBSD, AIX, IRIX, Solaris, OSF/1, Cygwin */ if (setreuid (uid, uid) < 0) return -1; #elif HAVE_SETEUID /* Solaris 2.4 */ if (seteuid (uid) < 0) return -1; #endif /* Verify that the privileges have really been dropped. This verification is here for security reasons. Doesn't matter if it takes a couple of system calls. On Solaris (which has saved uids and gids but no getresuid, getresgid functions), we could read /proc/<pid>/cred and verify the saved uid and gid found there. But it's not clear to me when to interpret the file as a 'prcred_t' and when as a 'prcred32_t'. Hao Chen, David Wagner, Drew Dean: Setuid Demystified <https://www.usenix.org/legacy/publications/library/proceedings/sec02/full_papers/chen/chen.pdf> section 8.1.3 also recommends to use a setreuid call as a probe, but this call would unexpectedly succeed (and the verification thus fail) on Linux if the process has the CAP_SETUID capability. When the verification fails, it indicates that we need to use different API in the code above. Therefore 'abort ()', not 'return -1'. */ #if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresuid (&real, &effective, &saved) < 0 || real != uid || effective != uid || saved != uid) abort (); } #else # if HAVE_GETEUID if (geteuid () != uid) abort (); # endif # if HAVE_GETUID if (getuid () != uid) abort (); # endif #endif #if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ { gid_t real; gid_t effective; gid_t saved; if (getresgid (&real, &effective, &saved) < 0 || real != gid || effective != gid || saved != gid) abort (); } #else # if HAVE_GETEGID if (getegid () != gid) abort (); # endif # if HAVE_GETGID if (getgid () != gid) abort (); # endif #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idpriv-droptemp.c�������������������������������������������������������0000664�0000000�0000000�00000013507�14110572173�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process temporarily. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "idpriv.h" #include <errno.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> /* The privileged uid and gid that the process had earlier. */ #if HAVE_GETUID static int saved_uid = -1; #endif #if HAVE_GETGID static int saved_gid = -1; #endif int idpriv_temp_drop (void) { #if HAVE_GETEUID && HAVE_GETEGID && (HAVE_SETRESUID || HAVE_SETREUID) && (HAVE_SETRESGID || HAVE_SETREGID) int uid = getuid (); int gid = getgid (); /* Find out about the privileged uid and gid at the first call. */ if (saved_uid == -1) saved_uid = geteuid (); if (saved_gid == -1) saved_gid = getegid (); /* Drop the gid privilege first, because in some cases the gid privilege cannot be dropped after the uid privilege has been dropped. */ /* This is for executables that have the setgid bit set. */ # if HAVE_SETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ if (setresgid (-1, gid, saved_gid) < 0) return -1; # else /* Mac OS X, NetBSD, AIX, IRIX, Solaris >= 2.5, OSF/1, Cygwin */ if (setregid (-1, gid) < 0) return -1; # endif /* This is for executables that have the setuid bit set. */ # if HAVE_SETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ /* See Hao Chen, David Wagner, Drew Dean: Setuid Demystified <https://www.usenix.org/legacy/publications/library/proceedings/sec02/full_papers/chen/chen.pdf> figure 14. */ if (setresuid (-1, uid, saved_uid) < 0) return -1; # else /* Mac OS X, NetBSD, AIX, IRIX, Solaris >= 2.5, OSF/1, Cygwin */ if (setreuid (-1, uid) < 0) return -1; # endif /* Verify that the privileges have really been dropped. This verification is here for security reasons. Doesn't matter if it takes a couple of system calls. When the verification fails, it indicates that we need to use different API in the code above. Therefore 'abort ()', not 'return -1'. */ # if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresuid (&real, &effective, &saved) < 0 || real != uid || effective != uid || saved != saved_uid) abort (); } # else # if HAVE_GETEUID if (geteuid () != uid) abort (); # endif if (getuid () != uid) abort (); # endif # if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresgid (&real, &effective, &saved) < 0 || real != gid || effective != gid || saved != saved_gid) abort (); } # else # if HAVE_GETEGID if (getegid () != gid) abort (); # endif if (getgid () != gid) abort (); # endif return 0; #else errno = ENOSYS; return -1; #endif } int idpriv_temp_restore (void) { #if HAVE_GETEUID && HAVE_GETEGID && (HAVE_SETRESUID || HAVE_SETREUID) && (HAVE_SETRESGID || HAVE_SETREGID) int uid = getuid (); int gid = getgid (); if (saved_uid == -1 || saved_gid == -1) /* Caller error: idpriv_temp_drop was never invoked. */ abort (); /* Acquire the gid privilege last, because in some cases the gid privilege cannot be acquired before the uid privilege has been acquired. */ /* This is for executables that have the setuid bit set. */ # if HAVE_SETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ /* See Hao Chen, David Wagner, Drew Dean: Setuid Demystified <https://www.usenix.org/legacy/publications/library/proceedings/sec02/full_papers/chen/chen.pdf> figure 14. */ if (setresuid (-1, saved_uid, -1) < 0) return -1; # else /* Mac OS X, NetBSD, AIX, IRIX, Solaris >= 2.5, OSF/1, Cygwin */ if (setreuid (-1, saved_uid) < 0) return -1; # endif /* This is for executables that have the setgid bit set. */ # if HAVE_SETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ if (setresgid (-1, saved_gid, -1) < 0) return -1; # else /* Mac OS X, NetBSD, AIX, IRIX, Solaris >= 2.5, OSF/1, Cygwin */ if (setregid (-1, saved_gid) < 0) return -1; # endif /* Verify that the privileges have really been acquired. This verification is here for security reasons. Doesn't matter if it takes a couple of system calls. When the verification fails, it indicates that we need to use different API in the code above. Therefore 'abort ()', not 'return -1'. */ # if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresuid (&real, &effective, &saved) < 0 || real != uid || effective != saved_uid || saved != saved_uid) abort (); } # else # if HAVE_GETEUID if (geteuid () != saved_uid) abort (); # endif if (getuid () != uid) abort (); # endif # if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresgid (&real, &effective, &saved) < 0 || real != gid || effective != saved_gid || saved != saved_gid) abort (); } # else # if HAVE_GETEGID if (getegid () != saved_gid) abort (); # endif if (getgid () != gid) abort (); # endif return 0; #else errno = ENOSYS; return -1; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idpriv.h����������������������������������������������������������������0000664�0000000�0000000�00000012037�14110572173�0016516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 _IDPRIV_H #define _IDPRIV_H #ifdef __cplusplus extern "C" { #endif /* This module allows programs which are installed with setuid or setgid bit (and which therefore initially run with an effective user id or group id different from the one of the current user) to drop their uid or gid privilege, either permanently or temporarily. It is absolutely necessary to minimize the amount of code that is running with escalated privileges (e.g. with effective uid = root). The reason is that any bug or exploit in a part of a program that is running with escalated privileges is a security vulnerability that - upon discovery - puts the users in danger and requires immediate fixing. Then consider that there's a bug every 10 or 20 lines of code on average... For programs that temporarily drop privileges but have the ability to restore them later, there are additionally the dangers that - Any bug in the non-privileged part of the program may be used to create invalid data structures that will trigger security vulnerabilities in the privileged part of the program. - Code execution exploits in the non-privileged part of the program may be used to invoke the function that restores high privileges and then execute additional arbitrary code. 1) The usual, and reasonably safe, way to minimize the amount of code running with privileges is to create a separate executable, with setuid or setgid bit, that contains only code for the tasks that require privileges (and,of course, strict checking of the arguments, so that the program cannot be abused). The main program is installed without setuid or setgid bit. 2) A less safe way is to do some privileged tasks at the beginning of the program's run, and drop privileges permanently as soon as possible. Note: There may still be security issues if the privileged task puts sensitive data into the process memory or opens communication channels to restricted facilities. 3) The most unsafe way is to drop privileges temporarily for most of the main program but to re-enable them for the duration of privileged tasks. As explained above, this approach has uncontrollable dangers for security. This approach is normally not usable in multithreaded programs, because you cannot know what kind of system calls the other threads could be doing during the time the privileges are enabled. With approach 1, you don't need gnulib modules. With approach 2, you need the gnulib module 'idpriv-drop'. With approach 3, you need the gnulib module 'idpriv-droptemp'. But really, you should better stay away from this approach. */ /* For more in-depth discussion of these topics, see the papers/articles * Hao Chen, David Wagner, Drew Dean: Setuid Demystified <https://www.usenix.org/legacy/publications/library/proceedings/sec02/full_papers/chen/chen.pdf> * Dan Tsafrir, Dilma da Silva, David Wagner: The Murky Issue of Changing Process Identity: Revising "Setuid Demystified" <https://people.eecs.berkeley.edu/~daw/papers/setuid-login08b.pdf> <https://code.google.com/archive/p/change-process-identity/> * Dhruv Mohindra: Observe correct revocation order while relinquishing privileges <https://www.securecoding.cert.org/confluence/display/seccode/POS36-C.+Observe+correct+revocation+order+while+relinquishing+privileges> */ /* For approach 2. */ /* Drop the uid and gid privileges of the current process. Return 0 if successful, or -1 with errno set upon failure. The recommended handling of failure is to terminate the process. */ extern int idpriv_drop (void); /* For approach 3. */ /* Drop the uid and gid privileges of the current process in a way that allows them to be restored later. Return 0 if successful, or -1 with errno set upon failure. The recommended handling of failure is to terminate the process. */ extern int idpriv_temp_drop (void); /* Restore the uid and gid privileges of the current process. Return 0 if successful, or -1 with errno set upon failure. The recommended handling of failure is to not perform the actions that require the escalated privileges. */ extern int idpriv_temp_restore (void); #ifdef __cplusplus } #endif #endif /* _IDPRIV_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/idx.h�������������������������������������������������������������������0000664�0000000�0000000�00000010253�14110572173�0016003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A type for indices and sizes. Copyright (C) 2020-2021 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 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 _IDX_H #define _IDX_H /* Get ptrdiff_t. */ #include <stddef.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* The type 'idx_t' holds an (array) index or an (object) size. Its implementation promotes to a signed integer type, which can hold the values 0..2^63-1 (on 64-bit platforms) or 0..2^31-1 (on 32-bit platforms). Why a signed integer type? * Security: Signed types can be checked for overflow via '-fsanitize=undefined', but unsigned types cannot. * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few surprising results for comparisons, such as (int) -3 < (unsigned long) 7 => false (int) -3 < (unsigned int) 7 => false and on 32-bit machines: (long) -3 < (unsigned int) 7 => false This is surprising because the natural comparison order is by value in the realm of infinite-precision signed integers (ℤ). The best way to get rid of such surprises is to use signed types for numerical integer values, and use unsigned types only for bit masks and enums. Why not use 'size_t' directly? * Because 'size_t' is an unsigned type, and a signed type is better. See above. Why not use 'ptrdiff_t' directly? * Maintainability: When reading and modifying code, it helps to know that a certain variable cannot have negative values. For example, when you have a loop int n = ...; for (int i = 0; i < n; i++) ... or ptrdiff_t n = ...; for (ptrdiff_t i = 0; i < n; i++) ... you have to ask yourself "what if n < 0?". Whereas in idx_t n = ...; for (idx_t i = 0; i < n; i++) ... you know that this case cannot happen. Similarly, when a programmer writes idx_t = ptr2 - ptr1; there is an implied assertion that ptr1 and ptr2 point into the same object and that ptr1 <= ptr2. * Being future-proof: In the future, range types (integers which are constrained to a certain range of values) may be added to C compilers or to the C standard. Several programming languages (Ada, Haskell, Common Lisp, Pascal) already have range types. Such range types may help producing good code and good warnings. The type 'idx_t' could then be typedef'ed to a range type that is signed after promotion. */ /* In the future, idx_t could be typedef'ed to a signed range type. The clang "extended integer types", supported in Clang 11 or newer <https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>, are a special case of range types. However, these types don't support binary operators with plain integer types (e.g. expressions such as x > 1). Therefore, they don't behave like signed types (and not like unsigned types either). So, we cannot use them here. */ /* Use the signed type 'ptrdiff_t'. */ /* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same size, but it is so on all platforms we have seen since 1990. */ typedef ptrdiff_t idx_t; /* IDX_MAX is the maximum value of an idx_t. */ #define IDX_MAX PTRDIFF_MAX /* So far no need has been found for an IDX_WIDTH macro. Perhaps there should be another macro IDX_VALUE_BITS that does not count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ #endif /* _IDX_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ieee754.in.h������������������������������������������������������������0000664�0000000�0000000�00000012500�14110572173�0016770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2021 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 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 _IEEE754_H #define _IEEE754_H 1 #ifndef _GL_GNULIB_HEADER /* Ordinary glibc usage. */ # include <features.h> # include <endian.h> #else /* Gnulib usage. */ # ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } # else # define __BEGIN_DECLS # define __END_DECLS # endif # endif # ifndef __FLOAT_WORD_ORDER # define __LITTLE_ENDIAN 1234 # define __BIG_ENDIAN 4321 # ifdef WORDS_BIGENDIAN # define __BYTE_ORDER __BIG_ENDIAN # else # define __BYTE_ORDER __LITTLE_ENDIAN # endif # define __FLOAT_WORD_ORDER __BYTE_ORDER # endif #endif __BEGIN_DECLS union ieee754_float { float f; /* This is the IEEE 754 single-precision format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:8; unsigned int mantissa:23; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int mantissa:23; unsigned int exponent:8; unsigned int negative:1; #endif /* Little endian. */ } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:8; unsigned int quiet_nan:1; unsigned int mantissa:22; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int mantissa:22; unsigned int quiet_nan:1; unsigned int exponent:8; unsigned int negative:1; #endif /* Little endian. */ } ieee_nan; }; #define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ union ieee754_double { double d; /* This is the IEEE 754 double-precision format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:11; /* Together these comprise the mantissa. */ unsigned int mantissa0:20; unsigned int mantissa1:32; #endif /* Big endian. */ #if __BYTE_ORDER == __LITTLE_ENDIAN # if __FLOAT_WORD_ORDER == __BIG_ENDIAN unsigned int mantissa0:20; unsigned int exponent:11; unsigned int negative:1; unsigned int mantissa1:32; # else /* Together these comprise the mantissa. */ unsigned int mantissa1:32; unsigned int mantissa0:20; unsigned int exponent:11; unsigned int negative:1; # endif #endif /* Little endian. */ } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:11; unsigned int quiet_nan:1; /* Together these comprise the mantissa. */ unsigned int mantissa0:19; unsigned int mantissa1:32; #else # if __FLOAT_WORD_ORDER == __BIG_ENDIAN unsigned int mantissa0:19; unsigned int quiet_nan:1; unsigned int exponent:11; unsigned int negative:1; unsigned int mantissa1:32; # else /* Together these comprise the mantissa. */ unsigned int mantissa1:32; unsigned int mantissa0:19; unsigned int quiet_nan:1; unsigned int exponent:11; unsigned int negative:1; # endif #endif } ieee_nan; }; #define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ union ieee854_long_double { long double d; /* This is the IEEE 854 double-extended-precision format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:15; unsigned int empty:16; unsigned int mantissa0:32; unsigned int mantissa1:32; #endif #if __BYTE_ORDER == __LITTLE_ENDIAN # if __FLOAT_WORD_ORDER == __BIG_ENDIAN unsigned int exponent:15; unsigned int negative:1; unsigned int empty:16; unsigned int mantissa0:32; unsigned int mantissa1:32; # else unsigned int mantissa1:32; unsigned int mantissa0:32; unsigned int exponent:15; unsigned int negative:1; unsigned int empty:16; # endif #endif } ieee; /* This is for NaNs in the IEEE 854 double-extended-precision format. */ struct { #if __BYTE_ORDER == __BIG_ENDIAN unsigned int negative:1; unsigned int exponent:15; unsigned int empty:16; unsigned int one:1; unsigned int quiet_nan:1; unsigned int mantissa0:30; unsigned int mantissa1:32; #endif #if __BYTE_ORDER == __LITTLE_ENDIAN # if __FLOAT_WORD_ORDER == __BIG_ENDIAN unsigned int exponent:15; unsigned int negative:1; unsigned int empty:16; unsigned int mantissa0:30; unsigned int quiet_nan:1; unsigned int one:1; unsigned int mantissa1:32; # else unsigned int mantissa1:32; unsigned int mantissa0:30; unsigned int quiet_nan:1; unsigned int one:1; unsigned int exponent:15; unsigned int negative:1; unsigned int empty:16; # endif #endif } ieee_nan; }; #define IEEE854_LONG_DOUBLE_BIAS 0x3fff __END_DECLS #endif /* ieee754.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ignore-value.h����������������������������������������������������������0000664�0000000�0000000�00000004362�14110572173�0017620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ignore a function return without a compiler warning. -*- coding: utf-8 -*- Copyright (C) 2008-2021 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 Jim Meyering, Eric Blake and Pádraig Brady. */ /* Use "ignore_value" to avoid a warning when using a function declared with gcc's warn_unused_result attribute, but for which you really do want to ignore the result. Traditionally, people have used a "(void)" cast to indicate that a function's return value is deliberately unused. However, if the function is declared with __attribute__((warn_unused_result)), gcc issues a warning even with the cast. Caution: most of the time, you really should heed gcc's warning, and check the return value. However, in those exceptional cases in which you're sure you know what you're doing, use this function. For the record, here's one of the ignorable warnings: "copy.c:233: warning: ignoring return value of 'fchown', declared with attribute warn_unused_result". */ #ifndef _GL_IGNORE_VALUE_H #define _GL_IGNORE_VALUE_H /* Normally casting an expression to void discards its value, but GCC versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) which may cause unwanted diagnostics in that case. Use __typeof__ and __extension__ to work around the problem, if the workaround is known to be needed. The workaround is not needed with clang. */ #if (3 < __GNUC__ + (4 <= __GNUC_MINOR__)) && !defined __clang__ # define ignore_value(x) \ (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) #else # define ignore_value(x) ((void) (x)) #endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ilogb.c�����������������������������������������������������������������0000664�0000000�0000000�00000003172�14110572173�0016310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #if ! (defined USE_LONG_DOUBLE || defined USE_FLOAT) # include <config.h> #endif /* Specification. */ #include <math.h> #include <limits.h> #ifdef USE_LONG_DOUBLE # define ILOGB ilogbl # define DOUBLE long double # define L_(literal) literal##L # define FREXP frexpl # define ISNAN isnanl #elif ! defined USE_FLOAT # define ILOGB ilogb # define DOUBLE double # define L_(literal) literal # define FREXP frexp # define ISNAN isnand #else /* defined USE_FLOAT */ # define ILOGB ilogbf # define DOUBLE float # define L_(literal) literal##f # define FREXP frexpf # define ISNAN isnanf #endif int ILOGB (DOUBLE x) { if (isfinite (x)) { if (x == L_(0.0)) return FP_ILOGB0; else { int e; (void) FREXP (x, &e); return e - 1; } } else { if (ISNAN (x)) return FP_ILOGBNAN; else return INT_MAX; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ilogbf.c����������������������������������������������������������������0000664�0000000�0000000�00000001521�14110572173�0016452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #define USE_FLOAT #include "ilogb.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ilogbl.c����������������������������������������������������������������0000664�0000000�0000000�00000001701�14110572173�0016460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE int ilogbl (long double x) { return ilogb (x); } #else # define USE_LONG_DOUBLE # include "ilogb.c" #endif ���������������������������������������������������������������gnulib-20210822~d383792/lib/imaxabs.c���������������������������������������������������������������0000664�0000000�0000000�00000001616�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* imaxabs() function: absolute value of 'intmax_t'. Copyright (C) 2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <inttypes.h> intmax_t imaxabs (intmax_t x) { return (x >= 0 ? x : - x); } ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/imaxdiv.c���������������������������������������������������������������0000664�0000000�0000000�00000004411�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* imaxdiv() function: division of 'intmax_t'. Copyright (C) 2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <inttypes.h> #include <stdlib.h> imaxdiv_t imaxdiv (intmax_t numer, intmax_t denom) { imaxdiv_t result; result.quot = numer / denom; result.rem = numer % denom; /* Verify the requirements of ISO C 99 section 6.5.5 paragraph 6: "When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded. (This is often called "truncation toward zero".) If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a." */ if (!(denom == 0 || (INTMAX_MIN + INTMAX_MAX < 0 && denom == -1 && numer < - INTMAX_MAX))) { if (!(result.quot * denom + result.rem == numer)) /* The compiler's implementation of / and % is broken. */ abort (); if (!(numer >= 0 ? result.rem >= 0 && (denom >= 0 ? result.rem < denom : /* Don't write result.rem < - denom, as it gives integer overflow if denom == INTMAX_MIN. */ - result.rem > denom) : result.rem <= 0 && (denom >= 0 ? result.rem > - denom : result.rem > denom))) /* The compiler's implementation of / and % may be ok according to C89, but not to C99. Please report this to <bug-gnulib@ngu.org>. This might be a big portability problem. */ abort (); } return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/imaxtostr.c�������������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'intmax_t' integer to printable string. Copyright (C) 2004-2021 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/>. */ #define anytostr imaxtostr #define inttype intmax_t #include "anytostr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/immutable.c�������������������������������������������������������������0000664�0000000�0000000�00000021302�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Immutable data. Copyright (C) 2021 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>, 2021. */ #include <config.h> /* Specification. */ #include "immutable.h" #include <errno.h> #include <stdlib.h> #include <string.h> #if IMMUTABLE_EFFECTIVE /* Real implementation. */ /* Get CHAR_BIT. */ # include <limits.h> /* Get intptr_t, uintptr_t. */ # include <stdint.h> # include <stdio.h> # if defined _WIN32 && !defined __CYGWIN__ /* Declare VirtualAlloc(), GetSystemInfo. */ # define WIN32_LEAN_AND_MEAN # define WIN32_EXTRA_LEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef CreateFileMapping # define CreateFileMapping CreateFileMappingA # else /* Declare getpagesize(). */ # include <unistd.h> /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # ifdef __hpux extern # ifdef __cplusplus "C" # endif int getpagesize (void); # endif /* Declare mmap(), mprotect(). */ # include <sys/types.h> # include <sys/mman.h> /* Declare open(). */ # include <unistd.h> # include <fcntl.h> # include "glthread/lock.h" # endif /* ================= Back end of the malloc implementation ================= */ /* The memory page size. Once it is initialized, a power of 2. Typically 4096 or 8192. */ static uintptr_t pagesize; /* Initializes pagesize. */ static void init_pagesize (void) { /* Simultaneous execution of this initialization in multiple threads is OK. */ # if defined _WIN32 && !defined __CYGWIN__ /* GetSystemInfo <https://msdn.microsoft.com/en-us/library/ms724381.aspx> <https://msdn.microsoft.com/en-us/library/ms724958.aspx> */ SYSTEM_INFO info; GetSystemInfo (&info); pagesize = info.dwPageSize; # else pagesize = getpagesize (); # endif } # if defined _WIN32 && !defined __CYGWIN__ static inline void init_mmap_file (void) { } # else /* Variables needed for obtaining memory pages via mmap(). */ static int file_fd; static long file_length; /* Initialization of these variables. */ static void do_init_mmap_file (void) { char filename[100]; sprintf (filename, "%s/glimmdata-%d-%ld", "/tmp", getpid (), random ()); file_fd = open (filename, O_CREAT | O_TRUNC | O_RDWR | O_CLOEXEC, 0700); if (file_fd < 0) { fprintf (stderr, "glimm: Cannot open %s!\n", filename); abort (); } /* Remove the file from the file system as soon as possible, to make sure there is no leftover after this process terminates or crashes. */ unlink (filename); file_length = 0; } /* Once-only initializer for these variables. */ gl_once_define (static, for_mmap_once) static inline void init_mmap_file (void) { /* Use a once-only initializer here, since simultaneous execution of do_init_mmap_file() in multiple threads must be avoided. */ gl_once (for_mmap_once, do_init_mmap_file); } # endif /* Size of the (page-aligned) header that links the writable mapping and the read-only mapping together. */ # define SHARED_LINK_HEADER_SIZE \ (INTPTR_WIDTH / CHAR_BIT) /* = sizeof (void *) */ /* Allocates a contiguous set of pages of memory. size > 0, must be a multiple of pagesize. Returns a multiple of PAGESIZE, or 0 upon failure. */ static uintptr_t alloc_pages (size_t size) { # if defined _WIN32 && !defined __CYGWIN__ /* Allocate pages from the system paging file. CreateFileMapping <https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga> */ HANDLE h = CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, size >> 16 >> 16, size & 0xFFFFFFFFU, NULL); if (h == NULL) { fprintf (stderr, "glimm: Cannot allocate file mapping. GetLastError() = 0x%08X\n", (unsigned int) GetLastError ()); return 0; } /* MapViewOfFile <https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffile> */ char *mem_w = (char *) MapViewOfFile (h, FILE_MAP_WRITE, 0, 0, size); char *mem_r = (char *) MapViewOfFile (h, FILE_MAP_READ, 0, 0, size); if (mem_w == NULL || mem_r == NULL) { /* UnmapViewOfFile <https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-unmapviewoffile> */ if (mem_w != NULL) UnmapViewOfFile (mem_w); if (mem_r != NULL) UnmapViewOfFile (mem_r); return 0; } /* It is OK to call CloseHandle before UnmapViewOfFile. The file mapping object gets really closed only once all its views are unmapped. */ if (!CloseHandle (h)) { UnmapViewOfFile (mem_w); UnmapViewOfFile (mem_r); CloseHandle (h); return 0; } # else /* Extend the file by size/pagesize pages. */ long new_file_length = file_length + size; if (ftruncate (file_fd, new_file_length) < 0) { fprintf (stderr, "glimm: Cannot extend backing file!\n"); return 0; } /* Create separate writable mapping and read-only mapping. */ char *mem_w = (char *) mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, file_fd, file_length); char *mem_r = (char *) mmap (NULL, size, PROT_READ, MAP_SHARED, file_fd, file_length); if (mem_w == (char *)(-1) || mem_r == (char *)(-1)) { if (mem_w != (char *)(-1)) munmap (mem_w, size); if (mem_r != (char *)(-1)) munmap (mem_r, size); return 0; } file_length = new_file_length; # endif /* Link the two memory areas together. */ ((intptr_t *) mem_w)[0] = mem_r - mem_w; return (uintptr_t) mem_w; } /* Frees a contiguous set of pages of memory, returned by alloc_pages. size > 0, must be a multiple of pagesize. */ static void free_pages (uintptr_t pages, size_t size) { pages -= SHARED_LINK_HEADER_SIZE; if ((pages & (pagesize - 1)) != 0) abort (); char *mem_w = (char *) pages; char *mem_r = mem_w + ((intptr_t *) mem_w)[0]; # if defined _WIN32 && !defined __CYGWIN__ if (!UnmapViewOfFile (mem_w)) abort (); if (!UnmapViewOfFile (mem_r)) abort (); # else if (munmap (mem_w, size) < 0) abort (); if (munmap (mem_r, size) < 0) abort (); # endif } /* Cygwin defines PAGESIZE in <limits.h>. */ # undef PAGESIZE /* ======================= Instantiate the front end ======================= */ # define PAGESIZE pagesize /* On Cygwin and Linux/PowerPC, PAGESIZE is 65536. On macOS 11, it is 16384. On all other platforms, it is either 4096 or 8192. */ # if defined __CYGWIN__ || (defined __linux__ && defined __powerpc__) # define PAGESIZE_MAX 65536 # else # define PAGESIZE_MAX 16384 # endif # define ALLOC_PAGES alloc_pages # define FREE_PAGES free_pages # define ALIGNMENT sizeof (void *) # define PAGE_RESERVED_HEADER_SIZE SHARED_LINK_HEADER_SIZE # include "ssfmalloc.h" void * immmalloc (size_t size) { /* Initializations. */ if (!pagesize) { init_mmap_file (); init_pagesize (); } void *writable_pointer = (void *) allocate_block (size); if (writable_pointer == NULL) errno = ENOMEM; return writable_pointer; } const void * immfreeze (void *writable_pointer) { uintptr_t mem_w = (uintptr_t) writable_pointer & -(intptr_t)pagesize; return (void *) ((uintptr_t) writable_pointer + ((intptr_t *) mem_w)[0]); } void immfree (const void *readonly_pointer) { uintptr_t mem_r = (uintptr_t) readonly_pointer & -(intptr_t)pagesize; free_block ((uintptr_t) readonly_pointer - ((intptr_t *) mem_r)[0]); } #else /* Dummy implementation. */ void * immmalloc (size_t size) { void *p = malloc (size); if (p == NULL) errno = ENOMEM; return p; } const void * immfreeze (void *writable_pointer) { return writable_pointer; } void immfree (const void *readonly_pointer) { void *writable_pointer = (void *) readonly_pointer; free (writable_pointer); } #endif const char * immstrdup (const char *string) { size_t size = strlen (string) + 1; void *wp = immmalloc (size); if (wp == NULL) return NULL; memcpy (wp, string, size); return (const char *) immfreeze (wp); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/immutable.h�������������������������������������������������������������0000664�0000000�0000000�00000006551�14110572173�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Immutable data. Copyright (C) 2021 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>, 2021. */ #ifndef _IMMUTABLE_H #define _IMMUTABLE_H /* This file provide a facility to allocate and free immutable data objects. An immutable data object is allocated in three steps: 1. You allocate an immutable memory region. DATA *wp = immmalloc (sizeof (*wp)); The pointer wp is actually a writable view to the memory region. 2. You fill the memory region, through the pointer wp: wp->x = ...; wp->y = ...; ... 3. You declare the memory region as frozen. This means that you relinquish write access. DATA const *p = immfreeze (wp); You can now let wp get out-of-scope. Then the pointer p can be used only in read-only ways. That is, if you cast away the 'const' and attempt to write to the memory region, it will crash at runtime (through a SIGSEGV signal). p->x = ...; // rejected by the compiler ((DATA *) p)->x = ...; // crashes at runtime Finally, you can free the immutable data object: immfree (p); */ /* If you compile this module with the C macro NO_IMMUTABLE set to 1, or on a platform that lacks support for read-only and writeable memory areas, the functions work alike, except that the "read-only" pointers are actually writable. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* This macro tells whether the implementation effectively rejects writes to immutable data. */ #if !NO_IMMUTABLE && ((defined _WIN32 && !defined __CYGWIN__) || HAVE_WORKING_MPROTECT) # define IMMUTABLE_EFFECTIVE 1 #else # define IMMUTABLE_EFFECTIVE 0 #endif /* Allocates an immutable memory region. SIZE if the number of bytes; should be > 0. Returns a writeable pointer to the memory region. Upon memory allocation failure, returns NULL with errno set to ENOMEM. */ extern void * immmalloc (size_t size); /* Freezes an immutable memory region. WRITABLE_POINTER is a non-NULL return value from immmalloc(). Returns a read-only pointer to the same memory region. */ extern const void * immfreeze (void *writable_pointer); /* Frees an immutable memory region. READONLY_POINTER is a return value from immfreeze(). */ extern void immfree (const void *readonly_pointer); /* The following is just an application to some data types. */ /* Allocates an immutable memory region that contains a copy of the given string. Returns a read-only pointer to this duplicated string. Upon memory allocation failure, returns NULL with errno set to ENOMEM. */ extern const char * immstrdup (const char *string); #ifdef __cplusplus } #endif #endif /* _IMMUTABLE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/inet_ntop.c�������������������������������������������������������������0000664�0000000�0000000�00000015410�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form Copyright (C) 2005-2006, 2008-2021 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/>. */ /* * Copyright (c) 1996-1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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 THIS * SOFTWARE. */ #include <config.h> /* Specification. */ #include <arpa/inet.h> /* Use this to suppress gcc's "...may be used before initialized" warnings. Beware: The Code argument must not contain commas. */ #ifndef IF_LINT # if defined GCC_LINT || defined lint # define IF_LINT(Code) Code # else # define IF_LINT(Code) /* empty */ # endif #endif #if HAVE_DECL_INET_NTOP # undef inet_ntop const char * rpl_inet_ntop (int af, const void *restrict src, char *restrict dst, socklen_t cnt) { return inet_ntop (af, src, dst, cnt); } #else # include <stdio.h> # include <string.h> # include <errno.h> # define NS_IN6ADDRSZ 16 # define NS_INT16SZ 2 /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. */ typedef int verify_int_size[4 <= sizeof (int) ? 1 : -1]; static const char *inet_ntop4 (const unsigned char *src, char *dst, socklen_t size); # if HAVE_IPV6 static const char *inet_ntop6 (const unsigned char *src, char *dst, socklen_t size); # endif /* char * * inet_ntop(af, src, dst, size) * convert a network format address to presentation format. * return: * pointer to presentation format address ('dst'), or NULL (see errno). * author: * Paul Vixie, 1996. */ const char * inet_ntop (int af, const void *restrict src, char *restrict dst, socklen_t cnt) { switch (af) { # if HAVE_IPV4 case AF_INET: return (inet_ntop4 (src, dst, cnt)); # endif # if HAVE_IPV6 case AF_INET6: return (inet_ntop6 (src, dst, cnt)); # endif default: errno = EAFNOSUPPORT; return (NULL); } /* NOTREACHED */ } /* const char * * inet_ntop4(src, dst, size) * format an IPv4 address * return: * 'dst' (as a const) * notes: * (1) uses no statics * (2) takes a u_char* not an in_addr as input * author: * Paul Vixie, 1996. */ static const char * inet_ntop4 (const unsigned char *src, char *dst, socklen_t size) { char tmp[sizeof "255.255.255.255"]; int len; len = sprintf (tmp, "%u.%u.%u.%u", src[0], src[1], src[2], src[3]); if (len < 0) return NULL; if (len > size) { errno = ENOSPC; return NULL; } return strcpy (dst, tmp); } # if HAVE_IPV6 /* const char * * inet_ntop6(src, dst, size) * convert IPv6 binary address into presentation (printable) format * author: * Paul Vixie, 1996. */ static const char * inet_ntop6 (const unsigned char *src, char *dst, socklen_t size) { /* * Note that int32_t and int16_t need only be "at least" large enough * to contain a value of the specified size. On some systems, like * Crays, there is no such thing as an integer variable with 16 bits. * Keep this in mind if you think this function should have been coded * to use pointer overlays. All the world's not a VAX. */ char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; struct { int base, len; } best, cur; unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; int i; /* * Preprocess: * Copy the input (bytewise) array into a wordwise array. * Find the longest run of 0x00's in src[] for :: shorthanding. */ memset (words, '\0', sizeof words); for (i = 0; i < NS_IN6ADDRSZ; i += 2) words[i / 2] = (src[i] << 8) | src[i + 1]; best.base = -1; cur.base = -1; IF_LINT(best.len = 0); IF_LINT(cur.len = 0); for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { if (words[i] == 0) { if (cur.base == -1) cur.base = i, cur.len = 1; else cur.len++; } else { if (cur.base != -1) { if (best.base == -1 || cur.len > best.len) best = cur; cur.base = -1; } } } if (cur.base != -1) { if (best.base == -1 || cur.len > best.len) best = cur; } if (best.base != -1 && best.len < 2) best.base = -1; /* * Format the result. */ tp = tmp; for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { /* Are we inside the best run of 0x00's? */ if (best.base != -1 && i >= best.base && i < (best.base + best.len)) { if (i == best.base) *tp++ = ':'; continue; } /* Are we following an initial run of 0x00s or any real hex? */ if (i != 0) *tp++ = ':'; /* Is this address an encapsulated IPv4? */ if (i == 6 && best.base == 0 && (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp))) return (NULL); tp += strlen (tp); break; } { int len = sprintf (tp, "%x", words[i]); if (len < 0) return NULL; tp += len; } } /* Was it a trailing run of 0x00's? */ if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) *tp++ = ':'; *tp++ = '\0'; /* * Check for overflow, copy, and we're done. */ if ((socklen_t) (tp - tmp) > size) { errno = ENOSPC; return NULL; } return strcpy (dst, tmp); } # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/inet_pton.c�������������������������������������������������������������0000664�0000000�0000000�00000015414�14110572173�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form Copyright (C) 2006, 2008-2021 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/>. */ /* * Copyright (c) 1996,1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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 THIS * SOFTWARE. */ #include <config.h> /* Specification. */ #include <arpa/inet.h> #if HAVE_DECL_INET_PTON # undef inet_pton int rpl_inet_pton (int af, const char *restrict src, void *restrict dst) { return inet_pton (af, src, dst); } #else # include <c-ctype.h> # include <string.h> # include <errno.h> # define NS_INADDRSZ 4 # define NS_IN6ADDRSZ 16 # define NS_INT16SZ 2 /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. */ static int inet_pton4 (const char *src, unsigned char *dst); # if HAVE_IPV6 static int inet_pton6 (const char *src, unsigned char *dst); # endif /* int * inet_pton(af, src, dst) * convert from presentation format (which usually means ASCII printable) * to network format (which is usually some kind of binary format). * return: * 1 if the address was valid for the specified address family * 0 if the address wasn't valid ('dst' is untouched in this case) * -1 if some other error occurred ('dst' is untouched in this case, too) * author: * Paul Vixie, 1996. */ int inet_pton (int af, const char *restrict src, void *restrict dst) { switch (af) { case AF_INET: return (inet_pton4 (src, dst)); # if HAVE_IPV6 case AF_INET6: return (inet_pton6 (src, dst)); # endif default: errno = EAFNOSUPPORT; return (-1); } /* NOTREACHED */ } /* int * inet_pton4(src, dst) * like inet_aton() but without all the hexadecimal, octal (with the * exception of 0) and shorthand. * return: * 1 if 'src' is a valid dotted quad, else 0. * notice: * does not touch 'dst' unless it's returning 1. * author: * Paul Vixie, 1996. */ static int inet_pton4 (const char *restrict src, unsigned char *restrict dst) { int saw_digit, octets, ch; unsigned char tmp[NS_INADDRSZ], *tp; saw_digit = 0; octets = 0; *(tp = tmp) = 0; while ((ch = *src++) != '\0') { if (ch >= '0' && ch <= '9') { unsigned new = *tp * 10 + (ch - '0'); if (saw_digit && *tp == 0) return (0); if (new > 255) return (0); *tp = new; if (!saw_digit) { if (++octets > 4) return (0); saw_digit = 1; } } else if (ch == '.' && saw_digit) { if (octets == 4) return (0); *++tp = 0; saw_digit = 0; } else return (0); } if (octets < 4) return (0); memcpy (dst, tmp, NS_INADDRSZ); return (1); } # if HAVE_IPV6 /* int * inet_pton6(src, dst) * convert presentation level address to network order binary form. * return: * 1 if 'src' is a valid [RFC1884 2.2] address, else 0. * notice: * (1) does not touch 'dst' unless it's returning 1. * (2) :: in a full address is silently ignored. * credit: * inspired by Mark Andrews. * author: * Paul Vixie, 1996. */ static int inet_pton6 (const char *restrict src, unsigned char *restrict dst) { static const char xdigits[] = "0123456789abcdef"; unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; const char *curtok; int ch, saw_xdigit; unsigned val; tp = memset (tmp, '\0', NS_IN6ADDRSZ); endp = tp + NS_IN6ADDRSZ; colonp = NULL; /* Leading :: requires some special handling. */ if (*src == ':') if (*++src != ':') return (0); curtok = src; saw_xdigit = 0; val = 0; while ((ch = c_tolower (*src++)) != '\0') { const char *pch; pch = strchr (xdigits, ch); if (pch != NULL) { val <<= 4; val |= (pch - xdigits); if (val > 0xffff) return (0); saw_xdigit = 1; continue; } if (ch == ':') { curtok = src; if (!saw_xdigit) { if (colonp) return (0); colonp = tp; continue; } else if (*src == '\0') { return (0); } if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; saw_xdigit = 0; val = 0; continue; } if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && inet_pton4 (curtok, tp) > 0) { tp += NS_INADDRSZ; saw_xdigit = 0; break; /* '\0' was seen by inet_pton4(). */ } return (0); } if (saw_xdigit) { if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; } if (colonp != NULL) { /* * Since some memmove()'s erroneously fail to handle * overlapping regions, we'll do the shift by hand. */ const int n = tp - colonp; int i; if (tp == endp) return (0); for (i = 1; i <= n; i++) { endp[-i] = colonp[n - i]; colonp[n - i] = 0; } tp = endp; } if (tp != endp) return (0); memcpy (dst, tmp, NS_IN6ADDRSZ); return (1); } # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ino-map.c���������������������������������������������������������������0000664�0000000�0000000�00000010676�14110572173�0016563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map an ino_t inode number to a small integer. Copyright 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering */ #include <config.h> #include "ino-map.h" #include "hash.h" #include "verify.h" #include <limits.h> #include <stdlib.h> /* A pair that maps an inode number to a mapped inode number; the latter is a small unique ID for the former. */ struct ino_map_ent { ino_t ino; size_t mapped_ino; }; /* A table that manages and indexes these pairs. */ struct ino_map { /* A table of KEY,VAL pairs, where KEY is the raw ino_t value and VAL is the small number that it maps to. */ struct hash_table *map; /* The next mapped inode number to hand out. */ size_t next_mapped_ino; /* Cache of the most recently allocated and otherwise-unused storage for probing the table. */ struct ino_map_ent *probe; }; /* Hash an inode map entry. */ static size_t ino_hash (void const *x, size_t table_size) { struct ino_map_ent const *p = x; ino_t ino = p->ino; /* When INO is wider than size_t, exclusive-OR the words of INO into H. This avoids loss of info, without applying % to the wider type, which could be quite slow on some systems. */ size_t h = ino; unsigned int i; unsigned int n_words = sizeof ino / sizeof h + (sizeof ino % sizeof h != 0); for (i = 1; i < n_words; i++) h ^= ino >> CHAR_BIT * sizeof h * i; return h % table_size; } /* Return true if two inode map entries are the same. */ static bool ino_compare (void const *x, void const *y) { struct ino_map_ent const *a = x; struct ino_map_ent const *b = y; return a->ino == b->ino; } /* Allocate an inode map that will hand out integers starting with NEXT_MAPPED_INO. Return NULL if memory is exhausted. */ struct ino_map * ino_map_alloc (size_t next_mapped_ino) { struct ino_map *im = malloc (sizeof *im); if (im) { enum { INITIAL_INO_MAP_TABLE_SIZE = 1021 }; im->map = hash_initialize (INITIAL_INO_MAP_TABLE_SIZE, NULL, ino_hash, ino_compare, free); if (! im->map) { free (im); return NULL; } im->next_mapped_ino = next_mapped_ino; im->probe = NULL; } return im; } /* Free an inode map. */ void ino_map_free (struct ino_map *map) { hash_free (map->map); free (map->probe); free (map); } /* Insert into MAP the inode number INO if it's not there already, and return its nonnegative mapped inode number. If INO is already in MAP, return the existing mapped inode number. Return INO_MAP_INSERT_FAILURE on memory or counter exhaustion. */ size_t ino_map_insert (struct ino_map *im, ino_t ino) { struct ino_map_ent *ent; /* Find space for the probe, reusing the cache if available. */ struct ino_map_ent *probe = im->probe; if (probe) { /* If repeating a recent query, return the cached result. */ if (probe->ino == ino) return probe->mapped_ino; } else { im->probe = probe = malloc (sizeof *probe); if (! probe) return INO_MAP_INSERT_FAILURE; } probe->ino = ino; ent = hash_insert (im->map, probe); if (! ent) return INO_MAP_INSERT_FAILURE; if (ent != probe) { /* Use the existing entry. */ probe->mapped_ino = ent->mapped_ino; } else { /* If adding 1 to map->next_mapped_ino would cause it to overflow to zero, then it must equal INO_MAP_INSERT_FAILURE, which is the value that should be returned in that case. Verify that this works. */ verify (INO_MAP_INSERT_FAILURE + 1 == 0); /* Prepare to allocate a new probe next time; this one is in use. */ im->probe = NULL; /* INO is new; allocate a mapped inode number for it. */ probe->mapped_ino = im->next_mapped_ino++; } return probe->mapped_ino; } ������������������������������������������������������������������gnulib-20210822~d383792/lib/ino-map.h���������������������������������������������������������������0000664�0000000�0000000�00000002252�14110572173�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Maintain a mapping of ino_t numbers to small integers. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paul Eggert, 2010. */ #ifndef _GL_INO_MAP_H # define _GL_INO_MAP_H # include <sys/types.h> # define INO_MAP_INSERT_FAILURE ((size_t) -1) struct ino_map; void ino_map_free (struct ino_map *) _GL_ATTRIBUTE_NONNULL ((1)); struct ino_map *ino_map_alloc (size_t) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (ino_map_free, 1); size_t ino_map_insert (struct ino_map *, ino_t) _GL_ATTRIBUTE_NONNULL ((1)); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/integer_length.c��������������������������������������������������������0000664�0000000�0000000�00000010535�14110572173�0020213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length - find most significant bit in an 'unsigned int'. Copyright (C) 2011-2021 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>, 2011. */ #include <config.h> /* Specification. */ #include "integer_length.h" #include <limits.h> #include "float+.h" #if defined _MSC_VER && !(__clang_major__ >= 4) # include <intrin.h> #endif #define NBITS (sizeof (unsigned int) * CHAR_BIT) int integer_length (unsigned int x) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__clang_major__ >= 4) if (x == 0) return 0; else return NBITS - __builtin_clz (x); #elif defined _MSC_VER /* _BitScanReverse <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64> */ unsigned long bit; if (_BitScanReverse (&bit, x)) return bit + 1; else return 0; #else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (NBITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; if (x == 0) return 0; else { memory_double m; unsigned int exponent; if (1) { /* Use a single integer to floating-point conversion. */ m.value = x; } else { /* Use a single floating-point subtraction. */ /* 2^(DBL_MANT_DIG-1). */ static const double TWO_DBL_MANT_DIG = /* Assume DBL_MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (double) (1U << ((DBL_MANT_DIG - 1) / 5)) * (double) (1U << ((DBL_MANT_DIG - 1 + 1) / 5)) * (double) (1U << ((DBL_MANT_DIG - 1 + 2) / 5)) * (double) (1U << ((DBL_MANT_DIG - 1 + 3) / 5)) * (double) (1U << ((DBL_MANT_DIG - 1 + 4) / 5)); /* Construct 2^(DBL_MANT_DIG-1) + x by hand. */ m.word[DBL_EXPBIT0_WORD] = (DBL_MANT_DIG + DBL_EXP_BIAS) << DBL_EXPBIT0_BIT; m.word[1 - DBL_EXPBIT0_WORD] = x; /* Subtract 2^(DBL_MANT_DIG-1). */ m.value = m.value - TWO_DBL_MANT_DIG; } exponent = (m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK; return exponent - DBL_EXP_BIAS; } } else # endif if (NBITS == 32) { /* 6 comparisons. */ if (x != 0) { int result = 1; if (x >= 0x10000) { x = x >> 16; result += 16; } if (x >= 0x100) { x = x >> 8; result += 8; } if (x >= 0x10) { x = x >> 4; result += 4; } if (x >= 0x4) { x = x >> 2; result += 2; } if (x >= 0x2) { x = x >> 1; result += 1; } return result; } else return 0; } else { /* Naive loop. Works for any value of NBITS. */ int j; for (j = NBITS - 1; j >= 0; j--) if (x & (1U << j)) return j + 1; return 0; } #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/integer_length.h��������������������������������������������������������0000664�0000000�0000000�00000003230�14110572173�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length - find most significant bit in an unsigned integer. Copyright (C) 2011-2021 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>, 2011. */ #ifndef _INTEGER_LENGTH_H #define _INTEGER_LENGTH_H #ifdef __cplusplus extern "C" { #endif /* These functions return the minimum number of bits required to represent the given unsigned integer. For non-zero values, this is the position of the most significant bit that is set, plus one. For zero, it is 0. */ /* Returns the integer length of x. The result is >= 0, <= sizeof (unsigned int) * CHAR_BIT. */ extern int integer_length (unsigned int x); /* Returns the integer length of x. The result is >= 0, <= sizeof (unsigned long) * CHAR_BIT. */ extern int integer_length_l (unsigned long x); /* Returns the integer length of x. The result is >= 0, <= sizeof (unsigned long long) * CHAR_BIT. */ extern int integer_length_ll (unsigned long long x); #ifdef __cplusplus } #endif #endif /* _INTEGER_LENGTH_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/integer_length_l.c������������������������������������������������������0000664�0000000�0000000�00000006147�14110572173�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length_l - find most significant bit in an 'unsigned long'. Copyright (C) 2011-2021 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>, 2011. */ #include <config.h> /* Specification. */ #include "integer_length.h" #include <limits.h> #include <stddef.h> #undef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #ifdef USE_LONG_LONG # define FUNC integer_length_ll # define TYPE unsigned long long # define GCC_BUILTIN __builtin_clzll # ifdef _WIN64 # define MSVC_BUILTIN _BitScanReverse64 # endif #else # define FUNC integer_length_l # define TYPE unsigned long # define GCC_BUILTIN __builtin_clzl # define MSVC_BUILTIN _BitScanReverse #endif #if defined _MSC_VER && !(__clang_major__ >= 4) # include <intrin.h> /* Copied from integer_length.c. */ static inline int integer_length (unsigned int x) { /* _BitScanReverse <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64> */ unsigned long bit; if (_BitScanReverse (&bit, x)) return bit + 1; else return 0; } #endif #define NBITS (sizeof (TYPE) * CHAR_BIT) /* Modify shift count to be in bounds, even in dead code, otherwise GCC emits warnings "right shift count >= width of type". */ #define MSC(i) MIN (i, NBITS - 1) int FUNC (TYPE x) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__clang_major__ >= 4) if (x == 0) return 0; else return NBITS - GCC_BUILTIN (x); #elif defined _MSC_VER && defined MSVC_BUILTIN /* _BitScanReverse, _BitScanReverse64 <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64> */ unsigned long bit; if (MSVC_BUILTIN (&bit, x)) return bit + 1; else return 0; #else /* Split x into chunks, and look at one chunk after the other. */ if (sizeof (TYPE) > 2 * sizeof (unsigned int)) { /* Generic loop. */ size_t i; for (i = (sizeof (TYPE) - 1) / sizeof (unsigned int); i >= 2; i--) { unsigned int y = x >> (i * sizeof (unsigned int) * CHAR_BIT); if (y != 0) return i * sizeof (unsigned int) * CHAR_BIT + integer_length (y); } } /* Unrolled the last 2 loop rounds. */ /* i = 1 */ if (sizeof (TYPE) > 1 * sizeof (unsigned int)) { unsigned int y = x >> MSC (1 * sizeof (unsigned int) * CHAR_BIT); if (y != 0) return 1 * sizeof (unsigned int) * CHAR_BIT + integer_length (y); } /* i = 0 */ return integer_length ((unsigned int) x); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/integer_length_ll.c�����������������������������������������������������0000664�0000000�0000000�00000001616�14110572173�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length_ll - find most significant bit in an 'unsigned long long'. Copyright (C) 2011-2021 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>, 2011. */ #define USE_LONG_LONG #include "integer_length_l.c" ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/intprops.h��������������������������������������������������������������0000664�0000000�0000000�00000070717�14110572173�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2021 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. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include <limits.h> /* 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)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (4 <= __clang_major__) \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. T must not be a bit-field expression. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. T must not be a bit-field expression. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. T must not be a bit-field expression. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are harder to use and may be less efficient than the INT_<op>_WRAPV, INT_<op>_OK, and INT_<op>_OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. Because all arguments are subject to integer promotions, these macros typically do not work on types narrower than 'int'. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */ #if 7 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) #else # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif /* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ #ifdef __clang__ /* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #else # define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ #if defined __clang__ || defined __ICC /* Clang 11 lacks __builtin_mul_overflow_p, and even if it did it would presumably run afoul of Clang bug 16404. ICC 2021.1's __builtin_add_overflow_p etc. are not treated as integral constant expressions even when all arguments are. */ # define _GL_HAS_BUILTIN_OVERFLOW_P 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) #else # define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) #endif /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT_<op>_WRAPV macros compute the low-order bits of the sum, difference, and product of two C integers, and return 1 if these low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. Because the WRAPV macros convert the result, they report overflow in different circumstances than the OVERFLOW macros do. For example, in the typical case with 16-bit 'short' and 32-bit 'int', if A, B and R are all of type 'short' then INT_ADD_OVERFLOW (A, B) returns false because the addition cannot overflow after A and B are converted to 'int', whereas INT_ADD_WRAPV (A, B, &R) returns true or false depending on whether the sum fits into 'short'. These macros are tuned for their last input argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A <op> B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_ADD_OVERFLOW # define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) # define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) #else # define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) # define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) #endif #if _GL_HAS_BUILTIN_MUL_OVERFLOW # if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ && !defined __ICC) # define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) # else /* Work around GCC bug 91450. */ # define INT_MULTIPLY_WRAPV(a, b, r) \ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ ? ((void) __builtin_mul_overflow (a, b, r), 1) \ : __builtin_mul_overflow (a, b, r)) # endif #else # define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) #endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for compilers that lack relevant builtins. */ #if __GNUC__ || defined __clang__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ unsigned char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned char, 0, UCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ unsigned short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ unsigned int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ unsigned long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX), \ unsigned long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) #else /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. If *R is signed, its type is ST with bounds SMIN..SMAX; otherwise its type is UT with bounds U..UMAX. ST and UT are narrower than int. Return 1 if the result overflows. See above for restrictions. */ # if _GL_HAVE___TYPEOF__ # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (TYPE_SIGNED (__typeof__ (*(r))) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) # else # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (overflow (a, b, smin, smax) \ ? (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ : (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) # endif # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ signed char, SCHAR_MIN, SCHAR_MAX, \ unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ short int, SHRT_MIN, SHRT_MAX, \ unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) \ : (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A <op> B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (overflow (a, b, tmin, tmax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A <op> B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) /* Return true if the numeric values A + B, A - B, A * B fall outside the range TMIN..TMAX. Arguments should be integer expressions without side effects. TMIN should be signed and nonpositive. TMAX should be positive, and should be signed unless TMIN is zero. */ #define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ && (a) < (tmin) - (b)) \ : (a) <= -1 - (b)) \ || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ : (a) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ && (b) < (tmin) - (a)) \ : (b) <= -1 - (a)) \ || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ && (tmax) < (a) + (b))) \ : (tmax) < (b) || (tmax) - (b) < (a)) #define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ (((a) < 0) == ((b) < 0) \ ? ((a) < (b) \ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ : (tmax) < (a) - (b)) \ : (a) < 0 \ ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ || (a) - (tmin) < (b)) \ : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ && (tmax) <= -1 - (b)) \ || (tmax) + (b) < (a))) #define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? ((a) < 0 \ ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ ? (a) < (tmax) / (b) \ : ((INT_NEGATE_OVERFLOW (b) \ ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \ : (tmax) / -(b)) \ <= -1 - (a))) \ : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ ? (EXPR_SIGNED (a) \ ? 0 < (a) + (tmin) \ : 0 < (a) && -1 - (tmin) < (a) - 1) \ : (tmin) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ : (tmin) / (a) < (b)) \ : (tmax) / (b) < (a))) /* The following macros compute A + B, A - B, and A * B, respectively. If no overflow occurs, they set *R to the result and return 1; otherwise, they return 0 and may modify *R. Example usage: long int result; if (INT_ADD_OK (a, b, &result)) printf ("result is %ld\n", result); else printf ("overflow\n"); A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. These macros are not constant expressions. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for B being a constant. */ #define INT_ADD_OK(a, b, r) ! INT_ADD_WRAPV (a, b, r) #define INT_SUBTRACT_OK(a, b, r) ! INT_SUBTRACT_WRAPV (a, b, r) #define INT_MULTIPLY_OK(a, b, r) ! INT_MULTIPLY_WRAPV (a, b, r) #endif /* _GL_INTPROPS_H */ �������������������������������������������������gnulib-20210822~d383792/lib/inttostr.c��������������������������������������������������������������0000664�0000000�0000000�00000001507�14110572173�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'int' integer to printable string. Copyright (C) 2004-2021 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/>. */ #define anytostr inttostr #define inttype int #include "anytostr.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/inttostr.h��������������������������������������������������������������0000664�0000000�0000000�00000002237�14110572173�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inttostr.h -- convert integers to printable strings Copyright (C) 2001-2006, 2009-2021 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 */ #include <stdint.h> #include <sys/types.h> #include "intprops.h" _GL_ATTRIBUTE_NODISCARD char *imaxtostr (intmax_t, char *); _GL_ATTRIBUTE_NODISCARD char *inttostr (int, char *); _GL_ATTRIBUTE_NODISCARD char *offtostr (off_t, char *); _GL_ATTRIBUTE_NODISCARD char *uinttostr (unsigned int, char *); _GL_ATTRIBUTE_NODISCARD char *umaxtostr (uintmax_t, char *); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/inttypes.in.h�����������������������������������������������������������0000664�0000000�0000000�00000051232�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. 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/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <inttypes.h> if it exists, and if this file has not been included yet or if this file includes gnulib stdint.h which in turn includes this file. The include_next requires a split double-inclusion guard. */ #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H # if @HAVE_INTTYPES_H@ /* Some pre-C++11 <stdint.h> implementations need this. */ # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ # define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H # endif #endif #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H #define INTTYPES_H /* Include <stdint.h> or the gnulib replacement. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stdint.h> #endif /* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ #include <limits.h> /* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> #endif #if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) # error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>." #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. */ /* 7.8.1 Macros for format specifiers */ #if defined _TNS_R_TARGET /* Tandem NonStop R series and compatible platforms released before July 2005 support %Ld but not %lld. */ # define _LONG_LONG_FORMAT_PREFIX "L" #else # define _LONG_LONG_FORMAT_PREFIX "ll" #endif #if !defined PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif #endif #if !defined PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif #endif #if !defined PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif #endif #if !defined PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif #endif #if !defined PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif #endif #if !defined PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif #endif #if !defined PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif #endif #if !defined PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif #endif #if !defined PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif #endif #if !defined PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif #endif #if !defined PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif #endif #if !defined PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif #endif #if !defined PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif #endif #if !defined PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif #endif #if !defined PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif #endif #if !defined PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif #endif #if !defined PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif #endif #if !defined PRIX32 # ifdef UINT32_MAX # define PRIX32 "X" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 # define PRIi64 _PRI64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif #endif #if !defined PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 # define PRIXLEAST32 "X" #endif #ifdef INT64_MAX # if !defined PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif #endif #if !defined PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif #endif #if !defined PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif #endif #if !defined PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif #endif #if !defined PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif #endif #if !defined PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif #endif #if !defined PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif #endif #if !defined PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif #endif #if !defined PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif #endif #if !defined PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif #endif #if !defined PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif #endif #if !defined PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif #endif #if !defined PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif #endif #if !defined PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif #endif #if !defined PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif #endif #if !defined PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif #endif #if !defined PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif #endif #if !defined PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif #endif #if !defined PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif #endif #ifdef INT64_MAX # if !defined PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 # define PRIiFAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 # define PRIXFAST64 PRIX64 # endif #endif #if !defined PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif #endif #if !defined PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif #endif #if !defined PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif #endif #if !defined PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif #endif #if !defined PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif #endif #if !defined PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif #endif #if !defined PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif #endif #if !defined PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif #endif #if !defined SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif #endif #if !defined SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif #endif #if !defined SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif #endif #if !defined SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif #endif #if !defined SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif #endif #if !defined SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif #endif #if !defined SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif #endif #if !defined SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif #endif #if !defined SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif #endif #if !defined SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif #endif #if !defined SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif #endif #if !defined SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif #endif #if !defined SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif #endif #if !defined SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif #endif #if !defined SCNx32 # ifdef UINT32_MAX # define SCNx32 "x" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 # define SCNi64 _SCN64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif #endif #if !defined SCNdLEAST8 # define SCNdLEAST8 "hhd" #endif #if !defined SCNiLEAST8 # define SCNiLEAST8 "hhi" #endif #if !defined SCNoLEAST8 # define SCNoLEAST8 "hho" #endif #if !defined SCNuLEAST8 # define SCNuLEAST8 "hhu" #endif #if !defined SCNxLEAST8 # define SCNxLEAST8 "hhx" #endif #if !defined SCNdLEAST16 # define SCNdLEAST16 "hd" #endif #if !defined SCNiLEAST16 # define SCNiLEAST16 "hi" #endif #if !defined SCNoLEAST16 # define SCNoLEAST16 "ho" #endif #if !defined SCNuLEAST16 # define SCNuLEAST16 "hu" #endif #if !defined SCNxLEAST16 # define SCNxLEAST16 "hx" #endif #if !defined SCNdLEAST32 # define SCNdLEAST32 "d" #endif #if !defined SCNiLEAST32 # define SCNiLEAST32 "i" #endif #if !defined SCNoLEAST32 # define SCNoLEAST32 "o" #endif #if !defined SCNuLEAST32 # define SCNuLEAST32 "u" #endif #if !defined SCNxLEAST32 # define SCNxLEAST32 "x" #endif #ifdef INT64_MAX # if !defined SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif #endif #if !defined SCNdFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNdFAST8 SCNd64 # elif INT_FAST8_MAX == 0x7fff # define SCNdFAST8 "hd" # elif INT_FAST8_MAX == 0x7f # define SCNdFAST8 "hhd" # else # define SCNdFAST8 "d" # endif #endif #if !defined SCNiFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNiFAST8 SCNi64 # elif INT_FAST8_MAX == 0x7fff # define SCNiFAST8 "hi" # elif INT_FAST8_MAX == 0x7f # define SCNiFAST8 "hhi" # else # define SCNiFAST8 "i" # endif #endif #if !defined SCNoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNoFAST8 SCNo64 # elif UINT_FAST8_MAX == 0xffff # define SCNoFAST8 "ho" # elif UINT_FAST8_MAX == 0xff # define SCNoFAST8 "hho" # else # define SCNoFAST8 "o" # endif #endif #if !defined SCNuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNuFAST8 SCNu64 # elif UINT_FAST8_MAX == 0xffff # define SCNuFAST8 "hu" # elif UINT_FAST8_MAX == 0xff # define SCNuFAST8 "hhu" # else # define SCNuFAST8 "u" # endif #endif #if !defined SCNxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNxFAST8 SCNx64 # elif UINT_FAST8_MAX == 0xffff # define SCNxFAST8 "hx" # elif UINT_FAST8_MAX == 0xff # define SCNxFAST8 "hhx" # else # define SCNxFAST8 "x" # endif #endif #if !defined SCNdFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNdFAST16 SCNd64 # elif INT_FAST16_MAX == 0x7fff # define SCNdFAST16 "hd" # else # define SCNdFAST16 "d" # endif #endif #if !defined SCNiFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNiFAST16 SCNi64 # elif INT_FAST16_MAX == 0x7fff # define SCNiFAST16 "hi" # else # define SCNiFAST16 "i" # endif #endif #if !defined SCNoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNoFAST16 SCNo64 # elif UINT_FAST16_MAX == 0xffff # define SCNoFAST16 "ho" # else # define SCNoFAST16 "o" # endif #endif #if !defined SCNuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNuFAST16 SCNu64 # elif UINT_FAST16_MAX == 0xffff # define SCNuFAST16 "hu" # else # define SCNuFAST16 "u" # endif #endif #if !defined SCNxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNxFAST16 SCNx64 # elif UINT_FAST16_MAX == 0xffff # define SCNxFAST16 "hx" # else # define SCNxFAST16 "x" # endif #endif #if !defined SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif #endif #if !defined SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif #endif #if !defined SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif #endif #if !defined SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif #endif #if !defined SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif #endif #ifdef INT64_MAX # if !defined SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 # define SCNiFAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 # define SCNxFAST64 SCNx64 # endif #endif #if !defined SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif #endif #if !defined SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif #endif #if !defined SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif #endif #if !defined SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif #endif #if !defined SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif #endif #if !defined SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif #endif /* 7.8.2 Functions for greatest-width integer types */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_IMAXABS@ # if !@HAVE_DECL_IMAXABS@ extern intmax_t imaxabs (intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxabs # if HAVE_RAW_DECL_IMAXABS _GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " "use gnulib module imaxabs for portability"); # endif #endif #if @GNULIB_IMAXDIV@ # if !@HAVE_IMAXDIV_T@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif # endif # if !@HAVE_DECL_IMAXDIV@ extern imaxdiv_t imaxdiv (intmax_t, intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxdiv # if HAVE_RAW_DECL_IMAXDIV _GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " "use gnulib module imaxdiv for portability"); # endif #endif #if @GNULIB_STRTOIMAX@ # if @REPLACE_STRTOIMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoimax # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK # undef strtoimax # if HAVE_RAW_DECL_STRTOIMAX _GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " "use gnulib module strtoimax for portability"); # endif #endif #if @GNULIB_STRTOUMAX@ # if @REPLACE_STRTOUMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoumax # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK # undef strtoumax # if HAVE_RAW_DECL_STRTOUMAX _GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " "use gnulib module strtoumax for portability"); # endif #endif /* Don't bother defining or declaring wcstoimax and wcstoumax, since wide-character functions like this are hardly ever useful. */ #ifdef __cplusplus } #endif #endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ioctl.c�����������������������������������������������������������������0000664�0000000�0000000�00000004374�14110572173�0016333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ioctl.c --- wrappers for Windows ioctl function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #include <sys/ioctl.h> #include <stdarg.h> #if HAVE_IOCTL /* Provide a wrapper with the POSIX prototype. */ # undef ioctl int rpl_ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *buf; va_list args; va_start (args, request); buf = va_arg (args, void *); va_end (args); /* Cast 'request' so that when the system's ioctl function takes a 64-bit request argument, the value gets zero-extended, not sign-extended. */ return ioctl (fd, (unsigned int) request, buf); } #else /* mingw */ # include <errno.h> /* Get HANDLE. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "fd-hook.h" /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static int primary_ioctl (int fd, int request, void *arg) { /* We don't support FIONBIO on pipes here. If you want to make pipe fds non-blocking, use the gnulib 'nonblocking' module, until gnulib implements fcntl F_GETFL / F_SETFL with O_NONBLOCK. */ if ((HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE) errno = ENOSYS; else errno = EBADF; return -1; } int ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *arg; va_list args; va_start (args, request); arg = va_arg (args, void *); va_end (args); # if WINDOWS_SOCKETS return execute_all_ioctl_hooks (primary_ioctl, fd, request, arg); # else return primary_ioctl (fd, request, arg); # endif } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isapipe.c���������������������������������������������������������������0000664�0000000�0000000�00000006642�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file descriptor is a pipe. Copyright (C) 2006, 2008-2021 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 Paul Eggert. */ #include <config.h> #include "isapipe.h" #include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Windows platforms. */ /* Get GetFileType. */ # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif int isapipe (int fd) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return (GetFileType (h) == FILE_TYPE_PIPE); } #else /* Unix platforms. */ # include <stdbool.h> # include <sys/types.h> # include <sys/stat.h> # include <unistd.h> /* The maximum link count for pipes; (nlink_t) -1 if not known. */ # ifndef PIPE_LINK_COUNT_MAX # define PIPE_LINK_COUNT_MAX ((nlink_t) (-1)) # endif /* Return 1 if FD is a pipe, 0 if not, -1 (setting errno) on error. Test fairly strictly whether FD is a pipe. lseek and checking for ESPIPE does not suffice, since many non-pipe files cause lseek to fail with errno == ESPIPE. */ int isapipe (int fd) { nlink_t pipe_link_count_max = PIPE_LINK_COUNT_MAX; bool check_for_fifo = (HAVE_FIFO_PIPES == 1); struct stat st; int fstat_result = fstat (fd, &st); if (fstat_result != 0) return fstat_result; /* We want something that succeeds only for pipes, but on POSIX-conforming hosts S_ISFIFO succeeds for both FIFOs and pipes and we know of no portable, reliable way to distinguish them in general. However, in practice pipes always have a link count <= PIPE_LINK_COUNT_MAX (unless someone attaches them to the file system name space using fattach, in which case they're not really pipes any more), so test for that as well. On Darwin 7.7, pipes are sockets, so check for those instead. */ if (! ((HAVE_FIFO_PIPES == 0 || HAVE_FIFO_PIPES == 1) && PIPE_LINK_COUNT_MAX != (nlink_t) -1) && (S_ISFIFO (st.st_mode) | S_ISSOCK (st.st_mode))) { int fd_pair[2]; int pipe_result = pipe (fd_pair); if (pipe_result != 0) return pipe_result; else { struct stat pipe_st; int fstat_pipe_result = fstat (fd_pair[0], &pipe_st); int fstat_pipe_errno = errno; close (fd_pair[0]); close (fd_pair[1]); if (fstat_pipe_result != 0) { errno = fstat_pipe_errno; return fstat_pipe_result; } check_for_fifo = (S_ISFIFO (pipe_st.st_mode) != 0); pipe_link_count_max = pipe_st.st_nlink; } } return (st.st_nlink <= pipe_link_count_max && (check_for_fifo ? S_ISFIFO (st.st_mode) : S_ISSOCK (st.st_mode))); } #endif ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isapipe.h���������������������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file descriptor is a pipe. Copyright (C) 2006-2021 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/>. */ /* Whether pipes are FIFOs; -1 if not known. */ #ifndef HAVE_FIFO_PIPES # define HAVE_FIFO_PIPES (-1) #endif int isapipe (int fd); ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isatty.c����������������������������������������������������������������0000664�0000000�0000000�00000013514�14110572173�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* isatty() replacement. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> /* This replacement is enabled on native Windows. */ #include <errno.h> #include <string.h> /* Get declarations of the Win32 API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif /* Don't assume that UNICODE is not defined. */ #undef LoadLibrary #define LoadLibrary LoadLibraryA #undef QueryFullProcessImageName #define QueryFullProcessImageName QueryFullProcessImageNameA #if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* GetNamedPipeClientProcessId was introduced only in Windows Vista. */ typedef BOOL (WINAPI * GetNamedPipeClientProcessIdFuncType) (HANDLE hPipe, PULONG pClientProcessId); static GetNamedPipeClientProcessIdFuncType GetNamedPipeClientProcessIdFunc = NULL; /* QueryFullProcessImageName was introduced only in Windows Vista. */ typedef BOOL (WINAPI * QueryFullProcessImageNameFuncType) (HANDLE hProcess, DWORD dwFlags, LPSTR lpExeName, PDWORD pdwSize); static QueryFullProcessImageNameFuncType QueryFullProcessImageNameFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { GetNamedPipeClientProcessIdFunc = (GetNamedPipeClientProcessIdFuncType) GetProcAddress (kernel32, "GetNamedPipeClientProcessId"); QueryFullProcessImageNameFunc = (QueryFullProcessImageNameFuncType) GetProcAddress (kernel32, "QueryFullProcessImageNameA"); } initialized = TRUE; } #else # define GetNamedPipeClientProcessIdFunc GetNamedPipeClientProcessId # define QueryFullProcessImageNameFunc QueryFullProcessImageName #endif static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; /* GetConsoleMode <https://docs.microsoft.com/en-us/windows/console/getconsolemode> */ return GetConsoleMode (h, &mode) != 0; } static BOOL IsCygwinConsoleHandle (HANDLE h) { /* A handle to a Cygwin console is in fact a named pipe whose client process and server process is <CYGWIN_INSTALL_DIR>\bin\mintty.exe. */ BOOL result = FALSE; ULONG processId; #if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) if (!initialized) initialize (); #endif /* GetNamedPipeClientProcessId <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getnamedpipeclientprocessid> It requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (GetNamedPipeClientProcessIdFunc && QueryFullProcessImageNameFunc && GetNamedPipeClientProcessIdFunc (h, &processId)) { /* OpenProcess <https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-openprocess> */ HANDLE processHandle = OpenProcess (PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processId); if (processHandle != NULL) { char buf[1024]; DWORD bufsize = sizeof (buf); /* The file name can be determined through GetProcessImageFileName <https://docs.microsoft.com/en-us/windows/desktop/api/psapi/nf-psapi-getprocessimagefilenamea> or QueryFullProcessImageName <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-queryfullprocessimagenamea> The former returns a file name in non-standard notation (it starts with '\Device\') and may require linking with psapi.dll. The latter is better, but requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (QueryFullProcessImageNameFunc (processHandle, 0, buf, &bufsize)) { if (strlen (buf) >= 11 && strcmp (buf + strlen (buf) - 11, "\\mintty.exe") == 0) result = TRUE; } CloseHandle (processHandle); } } return result; } #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _isatty_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _isatty (fd); } CATCH_MSVC_INVAL { result = 0; } DONE_MSVC_INVAL; return result; } #else # define _isatty_nothrow _isatty #endif /* Determine whether FD refers to a console device. Return 1 if yes. Return 0 and set errno if no. (ptsname_r relies on the errno value.) */ int isatty (int fd) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return 0; } /* _isatty (fd) tests whether GetFileType of the handle is FILE_TYPE_CHAR. But it does not set errno when it returns 0. */ if (_isatty_nothrow (fd)) { if (IsConsoleHandle (h)) return 1; } if (IsCygwinConsoleHandle (h)) return 1; errno = ENOTTY; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isblank.c���������������������������������������������������������������0000664�0000000�0000000�00000002510�14110572173�0016632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a character is a blank. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <ctype.h> int isblank (int c) { /* On all known platforms, in all predefined locales, isblank(c) is likely equivalent with (c == ' ' || c == '\t'). Look at the glibc definition (in glibc/localedata/locales/i18n): The "blank" characters are '\t', ' ', U+1680, U+180E, U+2000..U+2006, U+2008..U+200A, U+205F, U+3000, and none except the first two is present in a common 8-bit encoding. Therefore the substitute for other platforms is not more complicated than this. */ return (c == ' ' || c == '\t'); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isdir.c�����������������������������������������������������������������0000664�0000000�0000000�00000002071�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* isdir.c -- determine whether a directory exists Copyright (C) 1990, 1998, 2006, 2009-2021 Free Software Foundation, Inc. This 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 "isdir.h" #include <sys/types.h> #include <sys/stat.h> /* If PATH is an existing directory or symbolic link to a directory, return nonzero, else 0. */ int isdir (const char *path) { struct stat stats; return stat (path, &stats) == 0 && S_ISDIR (stats.st_mode); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isdir.h�����������������������������������������������������������������0000664�0000000�0000000�00000001405�14110572173�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a directory exists. Copyright (C) 2009-2021 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/>. */ int isdir (const char *path); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isfinite.c��������������������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for finite value (zero, subnormal, or normal, and not infinite or NaN). Copyright (C) 2007-2021 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 Ben Pfaff <blp@gnu.org>, 2007. */ #include <config.h> #include "isnanf-nolibm.h" #include "isnand-nolibm.h" #include "isnanl-nolibm.h" /* The "cc" compiler on HP-UX 11.11, when optimizing, simplifies the test x - y == 0.0 to x == y, a simplification which is invalid when x and y are Infinity. Disable this optimization. */ #if defined __hpux && !defined __GNUC__ static float zerof; static double zerod; static long double zerol; #else # define zerof 0.f # define zerod 0. # define zerol 0.L #endif int gl_isfinitef (float x) { return !isnanf (x) && x - x == zerof; } int gl_isfinited (double x) { return !isnand (x) && x - x == zerod; } int gl_isfinitel (long double x) { return !isnanl (x) && x - x == zerol; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isinf.c�����������������������������������������������������������������0000664�0000000�0000000�00000002050�14110572173�0016316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for positive or negative infinity. Copyright (C) 2007-2021 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 Ben Pfaff <blp@gnu.org>, 2008. */ #include <config.h> #include <float.h> int gl_isinff (float x) { return x < -FLT_MAX || x > FLT_MAX; } int gl_isinfd (double x) { return x < -DBL_MAX || x > DBL_MAX; } int gl_isinfl (long double x) { return x < -LDBL_MAX || x > LDBL_MAX; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnan.c�����������������������������������������������������������������0000664�0000000�0000000�00000015627�14110572173�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2021 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>, 2007. */ #include <config.h> /* Specification. */ #ifdef USE_LONG_DOUBLE /* Specification found in math.h or isnanl-nolibm.h. */ extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; #elif ! defined USE_FLOAT /* Specification found in math.h or isnand-nolibm.h. */ extern int rpl_isnand (double x); #else /* defined USE_FLOAT */ /* Specification found in math.h or isnanf-nolibm.h. */ extern int rpl_isnanf (float x); #endif #include <float.h> #include <string.h> #include "float+.h" #ifdef USE_LONG_DOUBLE # define FUNC rpl_isnanl # define DOUBLE long double # define MAX_EXP LDBL_MAX_EXP # define MIN_EXP LDBL_MIN_EXP # if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD LDBL_EXPBIT0_WORD # define EXPBIT0_BIT LDBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_LDBL # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC rpl_isnand # define DOUBLE double # define MAX_EXP DBL_MAX_EXP # define MIN_EXP DBL_MIN_EXP # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD DBL_EXPBIT0_WORD # define EXPBIT0_BIT DBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_DBL # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC rpl_isnanf # define DOUBLE float # define MAX_EXP FLT_MAX_EXP # define MIN_EXP FLT_MIN_EXP # if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD FLT_EXPBIT0_WORD # define EXPBIT0_BIT FLT_EXPBIT0_BIT # endif # define SIZE SIZEOF_FLT # define L_(literal) literal##f #endif #define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) #define NWORDS \ ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; /* Most hosts nowadays use IEEE floating point, so they use IEC 60559 representations, have infinities and NaNs, and do not trap on exceptions. Define IEEE_FLOATING_POINT if this host is one of the typical ones. The C11 macro __STDC_IEC_559__ is close to what is wanted here, but is not quite right because this file does not require all the features of C11 Annex F (and does not require C11 at all, for that matter). */ #define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) int FUNC (DOUBLE x) { #if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT # if defined USE_LONG_DOUBLE && ((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 /* Special CPU dependent code is needed to treat bit patterns outside the IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. These bit patterns are: - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, - exponent = 0x0000, mantissa bit 63 = 1. The NaN bit pattern is: - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ memory_double m; unsigned int exponent; m.value = x; exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; # ifdef WORDS_BIGENDIAN /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ if (exponent == 0) return 1 & (m.word[0] >> 15); else if (exponent == EXP_MASK) return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; else return 1 & ~(m.word[0] >> 15); # else /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ if (exponent == 0) return (m.word[1] >> 31); else if (exponent == EXP_MASK) return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; else return (m.word[1] >> 31) ^ 1; # endif # else /* Be careful to not do any floating-point operation on x, such as x == x, because x may be a signaling NaN. */ # if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ || defined __DECC || defined __TINYC__ \ || (defined __sgi && !defined __GNUC__) /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) 6.4, and TinyCC compilers don't recognize the initializers as constant expressions. The Compaq compiler also fails when constant-folding 0.0 / 0.0 even when constant-folding is not required. The Microsoft Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even when constant-folding is not required. The SGI MIPSpro C compiler complains about "floating-point operation result is out of range". */ static DOUBLE zero = L_(0.0); memory_double nan; DOUBLE plus_inf = L_(1.0) / zero; DOUBLE minus_inf = -L_(1.0) / zero; nan.value = zero / zero; # else static memory_double nan = { L_(0.0) / L_(0.0) }; static DOUBLE plus_inf = L_(1.0) / L_(0.0); static DOUBLE minus_inf = -L_(1.0) / L_(0.0); # endif { memory_double m; /* A NaN can be recognized through its exponent. But exclude +Infinity and -Infinity, which have the same exponent. */ m.value = x; if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) & (EXP_MASK << EXPBIT0_BIT)) == 0) return (memcmp (&m.value, &plus_inf, SIZE) != 0 && memcmp (&m.value, &minus_inf, SIZE) != 0); else return 0; } # endif #else /* The configuration did not find sufficient information, or does not use IEEE floating point. Give up about the signaling NaNs; handle only the quiet NaNs. */ if (x == x) { # if defined USE_LONG_DOUBLE && ((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 /* Detect any special bit patterns that pass ==; see comment above. */ memory_double m1; memory_double m2; memset (&m1.value, 0, SIZE); memset (&m2.value, 0, SIZE); m1.value = x; m2.value = x + (x ? 0.0L : -0.0L); if (memcmp (&m1.value, &m2.value, SIZE) != 0) return 1; # endif return 0; } else return 1; #endif } ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnand-nolibm.h���������������������������������������������������������0000664�0000000�0000000�00000002306�14110572173�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2021 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/>. */ #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand extern int isnand (double x); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnand.c����������������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0016463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2008-2021 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>, 2008. */ #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnanf-nolibm.h���������������������������������������������������������0000664�0000000�0000000�00000003074�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2021 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/>. */ #if HAVE_ISNANF_IN_LIBC /* Get declaration of isnan macro or (older) isnanf function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # else /* Get declaration of isnanf(), if not declared in <math.h>. */ # if defined __sgi /* We can't include <ieeefp.h>, because it conflicts with our definition of isnand. Therefore declare isnanf separately. */ extern int isnanf (float x); # endif # endif #else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf extern int isnanf (float x); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnanf.c����������������������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2021 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>, 2007. */ #define USE_FLOAT #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnanl-nolibm.h���������������������������������������������������������0000664�0000000�0000000�00000002502�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2021 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/>. */ #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl extern int isnanl (long double x); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/isnanl.c����������������������������������������������������������������0000664�0000000�0000000�00000001547�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2021 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>, 2007. */ #define USE_LONG_DOUBLE #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iswblank.c��������������������������������������������������������������0000664�0000000�0000000�00000001573�14110572173�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being blank. Copyright (C) 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswblank (wint_t wc) { return wc == ' ' || wc == '\t'; } �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iswctype-impl.h���������������������������������������������������������0000664�0000000�0000000�00000001622�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ int iswctype (wint_t wc, wctype_t desc) { return ((int (*) (wint_t)) desc) (wc); } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iswctype.c��������������������������������������������������������������0000664�0000000�0000000�00000002104�14110572173�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #if GNULIB_defined_wint_t int iswctype (wint_t wc, wctype_t desc) # undef iswctype { return ((wchar_t) wc == wc ? iswctype ((wchar_t) wc, desc) : 0); } #else # include "iswctype-impl.h" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iswdigit.c��������������������������������������������������������������0000664�0000000�0000000�00000001574�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being a digit. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswdigit (wint_t wc) { return wc >= '0' && wc <= '9'; } ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/iswxdigit.c�������������������������������������������������������������0000664�0000000�0000000�00000002154�14110572173�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being a hexadecimal digit. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswxdigit (wint_t wc) { return ((wc >= '0' && wc <= '9') #if 'A' == 0x41 && 'a' == 0x61 /* Optimization, assuming ASCII */ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') #else || (wc >= 'A' && wc <= 'F') || (wc >= 'a' && wc <= 'f') #endif ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/itold.c�����������������������������������������������������������������0000664�0000000�0000000�00000002032�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement for 'int' to 'long double' conversion routine. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <float.h> void _Qp_itoq (long double *result, int a) { /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ *result = (double) a; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javacomp.c��������������������������������������������������������������0000664�0000000�0000000�00000245625�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a Java program. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 <alloca.h> /* Specification. */ #include "javacomp.h" #include <errno.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include "javaversion.h" #include "execute.h" #include "spawn-pipe.h" #include "wait-process.h" #include "classpath.h" #include "xsetenv.h" #include "sh-quote.h" #include "binary-io.h" #include "safe-read.h" #include "xalloc.h" #include "xmalloca.h" #include "concat-filename.h" #include "fwriteerror.h" #include "clean-temp.h" #include "error.h" #include "xvasprintf.h" #include "c-strstr.h" #include "gettext.h" #define _(str) gettext (str) /* Survey of Java compilers. A = does it work without CLASSPATH being set C = option to set CLASSPATH, other than setting it in the environment O = option for optimizing g = option for debugging T = test for presence Program from A C O g T $JAVAC unknown N n/a -O -g true gcj -C GCC 3.2 Y --classpath=P -O -g gcj --version | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null javac JDK 1.1.8 Y -classpath P -O -g javac 2>/dev/null; test $? = 1 javac JDK 1.3.0 Y -classpath P -O -g javac 2>/dev/null; test $? -le 2 jikes Jikes 1.14 N -classpath P -O -g jikes 2>/dev/null; test $? = 1 All compilers support the option "-d DIRECTORY" for the base directory of the classes to be written. The CLASSPATH is a colon separated list of pathnames. (On Windows: a semicolon separated list of pathnames.) We try the Java compilers in the following order: 1. getenv ("JAVAC"), because the user must be able to override our preferences, 2. "gcj -C", because it is a completely free compiler, 3. "javac", because it is a standard compiler, 4. "jikes", comes last because it has some deviating interpretation of the Java Language Specification and because it requires a CLASSPATH environment variable. We unset the JAVA_HOME environment variable, because a wrong setting of this variable can confuse the JDK's javac. */ /* Return the default target_version. */ static const char * default_target_version (void) { /* Use a cache. Assumes that the PATH environment variable doesn't change during the lifetime of the program. */ static const char *java_version_cache; if (java_version_cache == NULL) { /* Determine the version from the found JVM. */ java_version_cache = javaexec_version (); if (java_version_cache == NULL) java_version_cache = "1.1"; else if ((java_version_cache[0] == '1' && java_version_cache[1] == '.' && java_version_cache[2] >= '1' && java_version_cache[2] <= '8' && java_version_cache[3] == '\0') || (java_version_cache[0] == '9' && java_version_cache[1] == '\0') || (java_version_cache[0] == '1' && (java_version_cache[1] >= '0' && java_version_cache[1] <= '1') && java_version_cache[2] == '\0')) /* It's one of the valid target version values. */ ; else if (java_version_cache[0] == '1' && (java_version_cache[1] >= '2' && java_version_cache[1] <= '7') && java_version_cache[2] == '\0') /* Assume that these (not yet released) Java versions will behave like the preceding ones. */ java_version_cache = "11"; else java_version_cache = "1.1"; } return java_version_cache; } /* ======================= Source version dependent ======================= */ /* Convert a source version to an index. */ #define SOURCE_VERSION_BOUND 8 /* exclusive upper bound */ static unsigned int source_version_index (const char *source_version) { if (source_version[0] == '1' && source_version[1] == '.') { if ((source_version[2] >= '3' && source_version[2] <= '5') && source_version[3] == '\0') return source_version[2] - '3'; if ((source_version[2] >= '7' && source_version[2] <= '8') && source_version[3] == '\0') return source_version[2] - '4'; } else if (source_version[0] == '9' && source_version[1] == '\0') return 5; else if (source_version[0] == '1' && (source_version[1] >= '0' && source_version[1] <= '1') && source_version[2] == '\0') return source_version[1] - '0' + 6; error (EXIT_FAILURE, 0, _("invalid source_version argument to compile_java_class")); return 0; } /* Return a snippet of code that should compile in the given source version. */ static const char * get_goodcode_snippet (const char *source_version) { if (strcmp (source_version, "1.3") == 0) return "class conftest {}\n"; if (strcmp (source_version, "1.4") == 0) return "class conftest { static { assert(true); } }\n"; if (strcmp (source_version, "1.5") == 0) return "class conftest<T> { T foo() { return null; } }\n"; if (strcmp (source_version, "1.7") == 0) return "class conftest { void foo () { switch (\"A\") {} } }\n"; if (strcmp (source_version, "1.8") == 0) return "class conftest { void foo () { Runnable r = () -> {}; } }\n"; if (strcmp (source_version, "9") == 0) return "interface conftest { private void foo () {} }\n"; if (strcmp (source_version, "10") == 0) return "class conftest { public void m() { var i = new Integer(0); } }\n"; if (strcmp (source_version, "11") == 0) return "class conftest { Readable r = (var b) -> 0; }\n"; error (EXIT_FAILURE, 0, _("invalid source_version argument to compile_java_class")); return NULL; } /* Return a snippet of code that should fail to compile in the given source version, or NULL (standing for a snippet that would fail to compile with any compiler). */ static const char * get_failcode_snippet (const char *source_version) { if (strcmp (source_version, "1.3") == 0) return "class conftestfail { static { assert(true); } }\n"; if (strcmp (source_version, "1.4") == 0) return "class conftestfail<T> { T foo() { return null; } }\n"; if (strcmp (source_version, "1.5") == 0) return "class conftestfail { void foo () { switch (\"A\") {} } }\n"; if (strcmp (source_version, "1.7") == 0) return "class conftestfail { void foo () { Runnable r = () -> {}; } }\n"; if (strcmp (source_version, "1.8") == 0) return "interface conftestfail { private void foo () {} }\n"; if (strcmp (source_version, "9") == 0) return "class conftestfail { public void m() { var i = new Integer(0); } }\n"; if (strcmp (source_version, "10") == 0) return "class conftestfail { Readable r = (var b) -> 0; }\n"; if (strcmp (source_version, "11") == 0) return NULL; error (EXIT_FAILURE, 0, _("invalid source_version argument to compile_java_class")); return NULL; } /* ======================= Target version dependent ======================= */ /* Convert a target version to an index. */ #define TARGET_VERSION_BOUND 11 /* exclusive upper bound */ static unsigned int target_version_index (const char *target_version) { if (target_version[0] == '1' && target_version[1] == '.' && (target_version[2] >= '1' && target_version[2] <= '8') && target_version[3] == '\0') return target_version[2] - '1'; else if (target_version[0] == '9' && target_version[1] == '\0') return 8; else if (target_version[0] == '1' && (target_version[1] >= '0' && target_version[1] <= '1') && target_version[2] == '\0') return target_version[1] - '0' + 9; error (EXIT_FAILURE, 0, _("invalid target_version argument to compile_java_class")); return 0; } /* Return the class file version number corresponding to a given target version. */ static int corresponding_classfile_version (const char *target_version) { if (strcmp (target_version, "1.1") == 0) return 45; if (strcmp (target_version, "1.2") == 0) return 46; if (strcmp (target_version, "1.3") == 0) return 47; if (strcmp (target_version, "1.4") == 0) return 48; if (strcmp (target_version, "1.5") == 0) return 49; if (strcmp (target_version, "1.6") == 0) return 50; if (strcmp (target_version, "1.7") == 0) return 51; if (strcmp (target_version, "1.8") == 0) return 52; if (strcmp (target_version, "9") == 0) return 53; if (strcmp (target_version, "10") == 0) return 54; if (strcmp (target_version, "11") == 0) return 55; error (EXIT_FAILURE, 0, _("invalid target_version argument to compile_java_class")); return 0; } /* Return the source version to pass to javac. */ static const char * get_source_version_for_javac (const char *source_version, const char *target_version) { /* The javac option '-source 1.5' has the same meaning as '-source 1.6', but since Java 9 supports only the latter, prefer the latter if a target_version >= 1.6 is requested. */ if (strcmp (source_version, "1.5") == 0 && !(target_version[0] == '1' && target_version[1] == '.' && (target_version[2] >= '1' && target_version[2] <= '5') && target_version[3] == '\0')) return "1.6"; return source_version; } /* ======================== Compilation subroutines ======================== */ /* Try to compile a set of Java sources with $JAVAC. Return a failure indicator (true upon error). */ static bool compile_using_envjavac (const char *javac, const char * const *java_sources, unsigned int java_sources_count, const char *directory, bool optimize, bool debug, bool verbose, bool null_stderr) { /* Because $JAVAC may consist of a command and options, we use the shell. Because $JAVAC has been set by the user, we leave all environment variables in place, including JAVA_HOME, and we don't erase the user's CLASSPATH. */ bool err; unsigned int command_length; char *command; const char *argv[4]; int exitstatus; unsigned int i; char *p; command_length = strlen (javac); if (optimize) command_length += 3; if (debug) command_length += 3; if (directory != NULL) command_length += 4 + shell_quote_length (directory); for (i = 0; i < java_sources_count; i++) command_length += 1 + shell_quote_length (java_sources[i]); command_length += 1; command = (char *) xmalloca (command_length); p = command; /* Don't shell_quote $JAVAC, because it may consist of a command and options. */ memcpy (p, javac, strlen (javac)); p += strlen (javac); if (optimize) { memcpy (p, " -O", 3); p += 3; } if (debug) { memcpy (p, " -g", 3); p += 3; } if (directory != NULL) { memcpy (p, " -d ", 4); p += 4; p = shell_quote_copy (p, directory); } for (i = 0; i < java_sources_count; i++) { *p++ = ' '; p = shell_quote_copy (p, java_sources[i]); } *p++ = '\0'; /* Ensure command_length was correctly calculated. */ if (p - command > command_length) abort (); if (verbose) printf ("%s\n", command); argv[0] = BOURNE_SHELL; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; exitstatus = execute (javac, BOURNE_SHELL, argv, NULL, false, false, false, null_stderr, true, true, NULL); err = (exitstatus != 0); freea (command); return err; } /* Try to compile a set of Java sources with gcj. Return a failure indicator (true upon error). */ static bool compile_using_gcj (const char * const *java_sources, unsigned int java_sources_count, bool no_assert_option, bool fsource_option, const char *source_version, bool ftarget_option, const char *target_version, const char *directory, bool optimize, bool debug, bool verbose, bool null_stderr) { bool err; unsigned int argc; const char **argv; const char **argp; char *fsource_arg; char *ftarget_arg; int exitstatus; unsigned int i; argc = 2 + (no_assert_option ? 1 : 0) + (fsource_option ? 1 : 0) + (ftarget_option ? 1 : 0) + (optimize ? 1 : 0) + (debug ? 1 : 0) + (directory != NULL ? 2 : 0) + java_sources_count; argv = (const char **) xmalloca ((argc + 1) * sizeof (const char *)); argp = argv; *argp++ = "gcj"; *argp++ = "-C"; if (no_assert_option) *argp++ = "-fno-assert"; if (fsource_option) { fsource_arg = (char *) xmalloca (9 + strlen (source_version) + 1); memcpy (fsource_arg, "-fsource=", 9); strcpy (fsource_arg + 9, source_version); *argp++ = fsource_arg; } else fsource_arg = NULL; if (ftarget_option) { ftarget_arg = (char *) xmalloca (9 + strlen (target_version) + 1); memcpy (ftarget_arg, "-ftarget=", 9); strcpy (ftarget_arg + 9, target_version); *argp++ = ftarget_arg; } else ftarget_arg = NULL; if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; if (directory != NULL) { *argp++ = "-d"; *argp++ = directory; } for (i = 0; i < java_sources_count; i++) *argp++ = java_sources[i]; *argp = NULL; /* Ensure argv length was correctly calculated. */ if (argp - argv != argc) abort (); if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } exitstatus = execute ("gcj", "gcj", argv, NULL, false, false, false, null_stderr, true, true, NULL); err = (exitstatus != 0); if (ftarget_arg != NULL) freea (ftarget_arg); if (fsource_arg != NULL) freea (fsource_arg); freea (argv); return err; } /* Try to compile a set of Java sources with javac. Return a failure indicator (true upon error). */ static bool compile_using_javac (const char * const *java_sources, unsigned int java_sources_count, bool source_option, const char *source_version, bool target_option, const char *target_version, const char *directory, bool optimize, bool debug, bool verbose, bool null_stderr) { bool err; unsigned int argc; const char **argv; const char **argp; int exitstatus; unsigned int i; argc = 1 + (source_option ? 2 : 0) + (target_option ? 2 : 0) + (optimize ? 1 : 0) + (debug ? 1 : 0) + (directory != NULL ? 2 : 0) + java_sources_count; argv = (const char **) xmalloca ((argc + 1) * sizeof (const char *)); argp = argv; *argp++ = "javac"; if (source_option) { *argp++ = "-source"; *argp++ = source_version; } if (target_option) { *argp++ = "-target"; *argp++ = target_version; } if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; if (directory != NULL) { *argp++ = "-d"; *argp++ = directory; } for (i = 0; i < java_sources_count; i++) *argp++ = java_sources[i]; *argp = NULL; /* Ensure argv length was correctly calculated. */ if (argp - argv != argc) abort (); if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } exitstatus = execute ("javac", "javac", argv, NULL, false, false, false, null_stderr, true, true, NULL); err = (exitstatus != 0); freea (argv); return err; } /* Try to compile a set of Java sources with jikes. Return a failure indicator (true upon error). */ static bool compile_using_jikes (const char * const *java_sources, unsigned int java_sources_count, const char *directory, bool optimize, bool debug, bool verbose, bool null_stderr) { bool err; unsigned int argc; const char **argv; const char **argp; int exitstatus; unsigned int i; argc = 1 + (optimize ? 1 : 0) + (debug ? 1 : 0) + (directory != NULL ? 2 : 0) + java_sources_count; argv = (const char **) xmalloca ((argc + 1) * sizeof (const char *)); argp = argv; *argp++ = "jikes"; if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; if (directory != NULL) { *argp++ = "-d"; *argp++ = directory; } for (i = 0; i < java_sources_count; i++) *argp++ = java_sources[i]; *argp = NULL; /* Ensure argv length was correctly calculated. */ if (argp - argv != argc) abort (); if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } exitstatus = execute ("jikes", "jikes", argv, NULL, false, false, false, null_stderr, true, true, NULL); err = (exitstatus != 0); freea (argv); return err; } /* ====================== Usability test subroutines ====================== */ /* Write a given contents to a temporary file. FILE_NAME is the name of a file inside TMPDIR that is known not to exist yet. Return a failure indicator (true upon error). */ static bool write_temp_file (struct temp_dir *tmpdir, const char *file_name, const char *contents) { FILE *fp; register_temp_file (tmpdir, file_name); fp = fopen_temp (file_name, "we", false); if (fp == NULL) { error (0, errno, _("failed to create \"%s\""), file_name); unregister_temp_file (tmpdir, file_name); return true; } fputs (contents, fp); if (fwriteerror_temp (fp)) { error (0, errno, _("error while writing \"%s\" file"), file_name); return true; } return false; } /* Return the class file version number of a class file on disk. */ static int get_classfile_version (const char *compiled_file_name) { unsigned char header[8]; int fd; /* Open the class file. */ fd = open (compiled_file_name, O_RDONLY | O_BINARY | O_CLOEXEC, 0); if (fd >= 0) { /* Read its first 8 bytes. */ if (safe_read (fd, header, 8) == 8) { /* Verify the class file signature. */ if (header[0] == 0xCA && header[1] == 0xFE && header[2] == 0xBA && header[3] == 0xBE) { close (fd); return header[7]; } } close (fd); } /* Could not get the class file version. Return a very large one. */ return INT_MAX; } /* Return true if $JAVAC is a version of gcj. */ static bool is_envjavac_gcj (const char *javac) { static bool envjavac_tested; static bool envjavac_gcj; if (!envjavac_tested) { /* Test whether $JAVAC is gcj: "$JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null" */ unsigned int command_length; char *command; const char *argv[4]; pid_t child; int fd[1]; FILE *fp; char *line; size_t linesize; size_t linelen; int exitstatus; char *p; /* Setup the command "$JAVAC --version". */ command_length = strlen (javac) + 1 + 9 + 1; command = (char *) xmalloca (command_length); p = command; /* Don't shell_quote $JAVAC, because it may consist of a command and options. */ memcpy (p, javac, strlen (javac)); p += strlen (javac); memcpy (p, " --version", 1 + 9 + 1); p += 1 + 9 + 1; /* Ensure command_length was correctly calculated. */ if (p - command > command_length) abort (); /* Call $JAVAC --version 2>/dev/null. */ argv[0] = BOURNE_SHELL; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; child = create_pipe_in (javac, BOURNE_SHELL, argv, NULL, DEV_NULL, true, true, false, fd); if (child == -1) goto failed; /* Retrieve its result. */ fp = fdopen (fd[0], "r"); if (fp == NULL) goto failed; line = NULL; linesize = 0; linelen = getline (&line, &linesize, fp); if (linelen == (size_t)(-1)) { fclose (fp); goto failed; } /* It is safe to call c_strstr() instead of strstr() here; see the comments in c-strstr.h. */ envjavac_gcj = (c_strstr (line, "gcj") != NULL); fclose (fp); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, javac, true, true, true, false, NULL); if (exitstatus != 0) envjavac_gcj = false; failed: freea (command); envjavac_tested = true; } return envjavac_gcj; } /* Return true if $JAVAC, known to be a version of gcj, is a version >= 4.3 of gcj. */ static bool is_envjavac_gcj43 (const char *javac) { static bool envjavac_tested; static bool envjavac_gcj43; if (!envjavac_tested) { /* Test whether $JAVAC is gcj: "$JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q \ | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null" */ unsigned int command_length; char *command; const char *argv[4]; pid_t child; int fd[1]; FILE *fp; char *line; size_t linesize; size_t linelen; int exitstatus; char *p; /* Setup the command "$JAVAC --version". */ command_length = strlen (javac) + 1 + 9 + 1; command = (char *) xmalloca (command_length); p = command; /* Don't shell_quote $JAVAC, because it may consist of a command and options. */ memcpy (p, javac, strlen (javac)); p += strlen (javac); memcpy (p, " --version", 1 + 9 + 1); p += 1 + 9 + 1; /* Ensure command_length was correctly calculated. */ if (p - command > command_length) abort (); /* Call $JAVAC --version 2>/dev/null. */ argv[0] = BOURNE_SHELL; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; child = create_pipe_in (javac, BOURNE_SHELL, argv, NULL, DEV_NULL, true, true, false, fd); if (child == -1) goto failed; /* Retrieve its result. */ fp = fdopen (fd[0], "r"); if (fp == NULL) goto failed; line = NULL; linesize = 0; linelen = getline (&line, &linesize, fp); if (linelen == (size_t)(-1)) { fclose (fp); goto failed; } p = line; while (*p != '\0' && !(*p >= '0' && *p <= '9')) p++; envjavac_gcj43 = !(*p == '4' && p[1] == '.' && p[2] >= '0' && p[2] <= '2') && (*p >= '4' && *p <= '9'); fclose (fp); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, javac, true, true, true, false, NULL); if (exitstatus != 0) envjavac_gcj43 = false; failed: freea (command); envjavac_tested = true; } return envjavac_gcj43; } /* Test whether $JAVAC, known to be a version of gcj >= 4.3, can be used, and whether it needs a -fsource and/or -ftarget option. Return a failure indicator (true upon error). */ static bool is_envjavac_gcj43_usable (const char *javac, const char *source_version, const char *target_version, bool *usablep, bool *fsource_option_p, bool *ftarget_option_p) { /* The cache depends on the source_version and target_version. */ struct result_t { bool tested; bool usable; bool fsource_option; bool ftarget_option; }; static struct result_t result_cache[SOURCE_VERSION_BOUND][TARGET_VERSION_BOUND]; struct result_t *resultp; resultp = &result_cache[source_version_index (source_version)] [target_version_index (target_version)]; if (!resultp->tested) { /* Try $JAVAC. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet (source_version))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* $JAVAC compiled conftest.java successfully. */ /* Try adding -fsource option if it is useful. */ char *javac_source = xasprintf ("%s -fsource=%s", javac, source_version); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_source, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); free (javac_source); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_envjavac (javac_source, java_sources, 1, tmpdir->dir_name, false, false, false, true)) /* $JAVAC compiled conftestfail.java successfully, and "$JAVAC -fsource=$source_version" rejects it. So the -fsource option is useful. */ resultp->fsource_option = true; } } } free (javac_source); resultp->usable = true; } else { /* Try with -fsource and -ftarget options. */ char *javac_target = xasprintf ("%s -fsource=%s -ftarget=%s", javac, source_version, target_version); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_target, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "$JAVAC -fsource $source_version -ftarget $target_version" compiled conftest.java successfully. */ resultp->fsource_option = true; resultp->ftarget_option = true; resultp->usable = true; } free (javac_target); } free (compiled_file_name); free (conftest_file_name); resultp->tested = true; } *usablep = resultp->usable; *fsource_option_p = resultp->fsource_option; *ftarget_option_p = resultp->ftarget_option; return false; } /* Test whether $JAVAC, known to be a version of gcj < 4.3, can be used for compiling with target_version = 1.4 and source_version = 1.4. Return a failure indicator (true upon error). */ static bool is_envjavac_oldgcj_14_14_usable (const char *javac, bool *usablep) { static bool envjavac_tested; static bool envjavac_usable; if (!envjavac_tested) { /* Try $JAVAC. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet ("1.4"))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ envjavac_usable = true; free (compiled_file_name); free (conftest_file_name); cleanup_temp_dir (tmpdir); envjavac_tested = true; } *usablep = envjavac_usable; return false; } /* Test whether $JAVAC, known to be a version of gcj < 4.3, can be used for compiling with target_version = 1.4 and source_version = 1.3. Return a failure indicator (true upon error). */ static bool is_envjavac_oldgcj_14_13_usable (const char *javac, bool *usablep, bool *need_no_assert_option_p) { static bool envjavac_tested; static bool envjavac_usable; static bool envjavac_need_no_assert_option; if (!envjavac_tested) { /* Try $JAVAC and "$JAVAC -fno-assert". But add -fno-assert only if it makes a difference. (It could already be part of $JAVAC.) */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; bool javac_works; char *javac_noassert; bool javac_noassert_works; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet ("1.3"))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ javac_works = true; else javac_works = false; unlink (compiled_file_name); javac_noassert = xasprintf ("%s -fno-assert", javac); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_noassert, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ javac_noassert_works = true; else javac_noassert_works = false; free (compiled_file_name); free (conftest_file_name); if (javac_works && javac_noassert_works) { conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_failcode_snippet ("1.3"))) { free (conftest_file_name); free (javac_noassert); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { /* Compilation succeeded. */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!(!compile_using_envjavac (javac_noassert, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0)) /* Compilation failed. */ /* "$JAVAC -fno-assert" works better than $JAVAC. */ javac_works = true; } free (compiled_file_name); free (conftest_file_name); } cleanup_temp_dir (tmpdir); if (javac_works) { envjavac_usable = true; envjavac_need_no_assert_option = false; } else if (javac_noassert_works) { envjavac_usable = true; envjavac_need_no_assert_option = true; } envjavac_tested = true; } *usablep = envjavac_usable; *need_no_assert_option_p = envjavac_need_no_assert_option; return false; } /* Test whether $JAVAC, known to be not a version of gcj, can be used, and whether it needs a -source and/or -target option. Return a failure indicator (true upon error). */ static bool is_envjavac_nongcj_usable (const char *javac, const char *source_version, const char *source_version_for_javac, const char *target_version, bool *usablep, bool *source_option_p, bool *target_option_p) { /* The cache depends on the source_version and target_version. */ struct result_t { bool tested; bool usable; bool source_option; bool target_option; }; static struct result_t result_cache[SOURCE_VERSION_BOUND][TARGET_VERSION_BOUND]; struct result_t *resultp; resultp = &result_cache[source_version_index (source_version)] [target_version_index (target_version)]; if (!resultp->tested) { /* Try $JAVAC. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet (source_version))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* $JAVAC compiled conftest.java successfully. */ /* Try adding -source option if it is useful. */ char *javac_source = xasprintf ("%s -source %s", javac, source_version_for_javac); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_source, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); free (javac_source); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_envjavac (javac_source, java_sources, 1, tmpdir->dir_name, false, false, false, true)) /* $JAVAC compiled conftestfail.java successfully, and "$JAVAC -source $source_version_for_javac" rejects it. So the -source option is useful. */ resultp->source_option = true; } } } free (javac_source); resultp->usable = true; } else { /* Try with -target option alone. (Sun javac 1.3.1 has the -target option but no -source option.) */ char *javac_target = xasprintf ("%s -target %s", javac, target_version); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_target, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "$JAVAC -target $target_version" compiled conftest.java successfully. */ /* Try adding -source option if it is useful. */ char *javac_target_source = xasprintf ("%s -source %s", javac_target, source_version_for_javac); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_target_source, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); free (javac_target_source); free (javac_target); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_target, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_envjavac (javac_target_source, java_sources, 1, tmpdir->dir_name, false, false, false, true)) /* "$JAVAC -target $target_version" compiled conftestfail.java successfully, and "$JAVAC -target $target_version -source $source_version_for_javac" rejects it. So the -source option is useful. */ resultp->source_option = true; } } } free (javac_target_source); resultp->target_option = true; resultp->usable = true; } else { /* Maybe this -target option requires a -source option? Try with -target and -source options. (Supported by Sun javac 1.4 and higher.) */ char *javac_target_source = xasprintf ("%s -source %s", javac_target, source_version_for_javac); unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_envjavac (javac_target_source, java_sources, 1, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "$JAVAC -target $target_version -source $source_version_for_javac" compiled conftest.java successfully. */ resultp->source_option = true; resultp->target_option = true; resultp->usable = true; } free (javac_target_source); } free (javac_target); } free (compiled_file_name); free (conftest_file_name); resultp->tested = true; } *usablep = resultp->usable; *source_option_p = resultp->source_option; *target_option_p = resultp->target_option; return false; } static bool is_gcj_present (void) { static bool gcj_tested; static bool gcj_present; if (!gcj_tested) { /* Test for presence of gcj: "gcj --version 2> /dev/null | \ sed -e 's,^[^0-9]*,,' -e 1q | \ sed -e '/^3\.[01]/d' | grep '^[3-9]' > /dev/null" */ const char *argv[3]; pid_t child; int fd[1]; int exitstatus; argv[0] = "gcj"; argv[1] = "--version"; argv[2] = NULL; child = create_pipe_in ("gcj", "gcj", argv, NULL, DEV_NULL, true, true, false, fd); gcj_present = false; if (child != -1) { /* Read the subprocess output, drop all lines except the first, drop all characters before the first digit, and test whether the remaining string starts with a digit >= 3, but not with "3.0" or "3.1". */ char c[3]; size_t count = 0; while (safe_read (fd[0], &c[count], 1) > 0) { if (c[count] == '\n') break; if (count == 0) { if (!(c[0] >= '0' && c[0] <= '9')) continue; gcj_present = (c[0] >= '3'); } count++; if (count == 3) { if (c[0] == '3' && c[1] == '.' && (c[2] == '0' || c[2] == '1')) gcj_present = false; break; } } while (safe_read (fd[0], &c[0], 1) > 0) ; close (fd[0]); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, "gcj", false, true, true, false, NULL); if (exitstatus != 0) gcj_present = false; } if (gcj_present) { /* See if libgcj.jar is well installed. */ struct temp_dir *tmpdir; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) gcj_present = false; else { char *conftest_file_name; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestlib.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, "public class conftestlib {\n" " public static void main (String[] args) {\n" " }\n" "}\n")) gcj_present = false; else { char *compiled_file_name; const char *java_sources[1]; compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestlib.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_gcj (java_sources, 1, false, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true)) gcj_present = false; free (compiled_file_name); } free (conftest_file_name); } cleanup_temp_dir (tmpdir); } gcj_tested = true; } return gcj_present; } static bool is_gcj_43 (void) { static bool gcj_tested; static bool gcj_43; if (!gcj_tested) { /* Test for presence of gcj: "gcj --version 2> /dev/null | \ sed -e 's,^[^0-9]*,,' -e 1q | \ sed -e '/^4\.[012]/d' | grep '^[4-9]'" */ const char *argv[3]; pid_t child; int fd[1]; int exitstatus; argv[0] = "gcj"; argv[1] = "--version"; argv[2] = NULL; child = create_pipe_in ("gcj", "gcj", argv, NULL, DEV_NULL, true, true, false, fd); gcj_43 = false; if (child != -1) { /* Read the subprocess output, drop all lines except the first, drop all characters before the first digit, and test whether the remaining string starts with a digit >= 4, but not with "4.0" or "4.1" or "4.2". */ char c[3]; size_t count = 0; while (safe_read (fd[0], &c[count], 1) > 0) { if (c[count] == '\n') break; if (count == 0) { if (!(c[0] >= '0' && c[0] <= '9')) continue; gcj_43 = (c[0] >= '4'); } count++; if (count == 3) { if (c[0] == '4' && c[1] == '.' && c[2] >= '0' && c[2] <= '2') gcj_43 = false; break; } } while (safe_read (fd[0], &c[0], 1) > 0) ; close (fd[0]); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, "gcj", false, true, true, false, NULL); if (exitstatus != 0) gcj_43 = false; } gcj_tested = true; } return gcj_43; } /* Test whether gcj >= 4.3 can be used, and whether it needs a -fsource and/or -ftarget option. Return a failure indicator (true upon error). */ static bool is_gcj43_usable (const char *source_version, const char *target_version, bool *usablep, bool *fsource_option_p, bool *ftarget_option_p) { /* The cache depends on the source_version and target_version. */ struct result_t { bool tested; bool usable; bool fsource_option; bool ftarget_option; }; static struct result_t result_cache[SOURCE_VERSION_BOUND][TARGET_VERSION_BOUND]; struct result_t *resultp; resultp = &result_cache[source_version_index (source_version)] [target_version_index (target_version)]; if (!resultp->tested) { /* Try gcj. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet (source_version))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* gcj compiled conftest.java successfully. */ /* Try adding -fsource option if it is useful. */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, true, source_version, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_gcj (java_sources, 1, false, true, source_version, false, NULL, tmpdir->dir_name, false, false, false, true)) /* gcj compiled conftestfail.java successfully, and "gcj -fsource=$source_version" rejects it. So the -fsource option is useful. */ resultp->fsource_option = true; } } } resultp->usable = true; } else { /* Try with -fsource and -ftarget options. */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, true, source_version, true, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "gcj -fsource $source_version -ftarget $target_version" compiled conftest.java successfully. */ resultp->fsource_option = true; resultp->ftarget_option = true; resultp->usable = true; } } free (compiled_file_name); free (conftest_file_name); resultp->tested = true; } *usablep = resultp->usable; *fsource_option_p = resultp->fsource_option; *ftarget_option_p = resultp->ftarget_option; return false; } /* Test whether gcj < 4.3 can be used for compiling with target_version = 1.4 and source_version = 1.4. Return a failure indicator (true upon error). */ static bool is_oldgcj_14_14_usable (bool *usablep) { static bool gcj_tested; static bool gcj_usable; if (!gcj_tested) { /* Try gcj. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet ("1.4"))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ gcj_usable = true; free (compiled_file_name); free (conftest_file_name); cleanup_temp_dir (tmpdir); gcj_tested = true; } *usablep = gcj_usable; return false; } /* Test whether gcj < 4.3 can be used for compiling with target_version = 1.4 and source_version = 1.3. Return a failure indicator (true upon error). */ static bool is_oldgcj_14_13_usable (bool *usablep, bool *need_no_assert_option_p) { static bool gcj_tested; static bool gcj_usable; static bool gcj_need_no_assert_option; if (!gcj_tested) { /* Try gcj and "gcj -fno-assert". But add -fno-assert only if it works (not gcj < 3.3). */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet ("1.3"))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, true, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ { gcj_usable = true; gcj_need_no_assert_option = true; } else { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_gcj (java_sources, 1, false, false, NULL, false, NULL, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) /* Compilation succeeded. */ { gcj_usable = true; gcj_need_no_assert_option = false; } } free (compiled_file_name); free (conftest_file_name); cleanup_temp_dir (tmpdir); gcj_tested = true; } *usablep = gcj_usable; *need_no_assert_option_p = gcj_need_no_assert_option; return false; } static bool is_javac_present (void) { static bool javac_tested; static bool javac_present; if (!javac_tested) { /* Test for presence of javac: "javac 2> /dev/null ; test $? -le 2" */ const char *argv[2]; int exitstatus; argv[0] = "javac"; argv[1] = NULL; exitstatus = execute ("javac", "javac", argv, NULL, false, false, true, true, true, false, NULL); javac_present = (exitstatus == 0 || exitstatus == 1 || exitstatus == 2); javac_tested = true; } return javac_present; } /* Test whether javac can be used and whether it needs a -source and/or -target option. Return a failure indicator (true upon error). */ static bool is_javac_usable (const char *source_version, const char *source_version_for_javac, const char *target_version, bool *usablep, bool *source_option_p, bool *target_option_p) { /* The cache depends on the source_version and target_version. */ struct result_t { bool tested; bool usable; bool source_option; bool target_option; }; static struct result_t result_cache[SOURCE_VERSION_BOUND][TARGET_VERSION_BOUND]; struct result_t *resultp; resultp = &result_cache[source_version_index (source_version)] [target_version_index (target_version)]; if (!resultp->tested) { /* Try javac. */ struct temp_dir *tmpdir; char *conftest_file_name; char *compiled_file_name; const char *java_sources[1]; struct stat statbuf; tmpdir = create_temp_dir ("java", NULL, false); if (tmpdir == NULL) return true; conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, get_goodcode_snippet (source_version))) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftest.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, false, source_version_for_javac, false, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* javac compiled conftest.java successfully. */ /* Try adding -source option if it is useful. */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, true, source_version_for_javac, false, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, false, source_version_for_javac, false, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_javac (java_sources, 1, true, source_version_for_javac, false, target_version, tmpdir->dir_name, false, false, false, true)) /* javac compiled conftestfail.java successfully, and "javac -source $source_version_for_javac" rejects it. So the -source option is useful. */ resultp->source_option = true; } } } resultp->usable = true; } else { /* Try with -target option alone. (Sun javac 1.3.1 has the -target option but no -source option.) */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, false, source_version_for_javac, true, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "javac -target $target_version" compiled conftest.java successfully. */ /* Try adding -source option if it is useful. */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, true, source_version_for_javac, true, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { const char *failcode = get_failcode_snippet (source_version); if (failcode != NULL) { free (compiled_file_name); free (conftest_file_name); conftest_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.java", NULL); if (write_temp_file (tmpdir, conftest_file_name, failcode)) { free (conftest_file_name); cleanup_temp_dir (tmpdir); return true; } compiled_file_name = xconcatenated_filename (tmpdir->dir_name, "conftestfail.class", NULL); register_temp_file (tmpdir, compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, false, source_version_for_javac, true, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0) { unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (compile_using_javac (java_sources, 1, true, source_version_for_javac, true, target_version, tmpdir->dir_name, false, false, false, true)) /* "javac -target $target_version" compiled conftestfail.java successfully, and "javac -target $target_version -source $source_version_for_javac" rejects it. So the -source option is useful. */ resultp->source_option = true; } } } resultp->target_option = true; resultp->usable = true; } else { /* Maybe this -target option requires a -source option? Try with -target and -source options. (Supported by Sun javac 1.4 and higher.) */ unlink (compiled_file_name); java_sources[0] = conftest_file_name; if (!compile_using_javac (java_sources, 1, true, source_version_for_javac, true, target_version, tmpdir->dir_name, false, false, false, true) && stat (compiled_file_name, &statbuf) >= 0 && get_classfile_version (compiled_file_name) <= corresponding_classfile_version (target_version)) { /* "javac -target $target_version -source $source_version_for_javac" compiled conftest.java successfully. */ resultp->source_option = true; resultp->target_option = true; resultp->usable = true; } } } free (compiled_file_name); free (conftest_file_name); resultp->tested = true; } *usablep = resultp->usable; *source_option_p = resultp->source_option; *target_option_p = resultp->target_option; return false; } static bool is_jikes_present (void) { static bool jikes_tested; static bool jikes_present; if (!jikes_tested) { /* Test for presence of jikes: "jikes 2> /dev/null ; test $? = 1" */ const char *argv[2]; int exitstatus; argv[0] = "jikes"; argv[1] = NULL; exitstatus = execute ("jikes", "jikes", argv, NULL, false, false, true, true, true, false, NULL); jikes_present = (exitstatus == 0 || exitstatus == 1); jikes_tested = true; } return jikes_present; } /* ============================= Main function ============================= */ bool compile_java_class (const char * const *java_sources, unsigned int java_sources_count, const char * const *classpaths, unsigned int classpaths_count, const char *source_version, const char *target_version, const char *directory, bool optimize, bool debug, bool use_minimal_classpath, bool verbose) { bool err = false; char *old_JAVA_HOME; { const char *javac = getenv ("JAVAC"); if (javac != NULL && javac[0] != '\0') { bool usable = false; bool no_assert_option = false; bool source_option = false; bool target_option = false; bool fsource_option = false; bool ftarget_option = false; const char *source_version_for_javac; if (target_version == NULL) target_version = default_target_version (); source_version_for_javac = get_source_version_for_javac (source_version, target_version); if (is_envjavac_gcj (javac)) { /* It's a version of gcj. */ if (is_envjavac_gcj43 (javac)) { /* It's a version of gcj >= 4.3. Assume the classfile versions are correct. */ if (is_envjavac_gcj43_usable (javac, source_version, target_version, &usable, &fsource_option, &ftarget_option)) { err = true; goto done1; } } else { /* It's a version of gcj < 4.3. Ignore the version of the class files that it creates. */ if (strcmp (target_version, "1.4") == 0 && strcmp (source_version, "1.4") == 0) { if (is_envjavac_oldgcj_14_14_usable (javac, &usable)) { err = true; goto done1; } } else if (strcmp (target_version, "1.4") == 0 && strcmp (source_version, "1.3") == 0) { if (is_envjavac_oldgcj_14_13_usable (javac, &usable, &no_assert_option)) { err = true; goto done1; } } } } else { /* It's not gcj. Assume the classfile versions are correct. */ if (is_envjavac_nongcj_usable (javac, source_version, source_version_for_javac, target_version, &usable, &source_option, &target_option)) { err = true; goto done1; } } if (usable) { char *old_classpath; char *javac_with_options; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, false, verbose); javac_with_options = (no_assert_option ? xasprintf ("%s -fno-assert", javac) : xasprintf ("%s%s%s%s%s%s%s%s%s", javac, source_option ? " -source " : "", source_option ? source_version_for_javac : "", target_option ? " -target " : "", target_option ? target_version : "", fsource_option ? " -fsource=" : "", fsource_option ? source_version : "", ftarget_option ? " -ftarget=" : "", ftarget_option ? target_version : "")); err = compile_using_envjavac (javac_with_options, java_sources, java_sources_count, directory, optimize, debug, verbose, false); free (javac_with_options); /* Reset CLASSPATH. */ reset_classpath (old_classpath); goto done1; } } } /* Unset the JAVA_HOME environment variable. */ old_JAVA_HOME = getenv ("JAVA_HOME"); if (old_JAVA_HOME != NULL) { old_JAVA_HOME = xstrdup (old_JAVA_HOME); unsetenv ("JAVA_HOME"); } if (is_gcj_present ()) { /* It's a version of gcj. */ bool usable = false; bool no_assert_option = false; bool fsource_option = false; bool ftarget_option = false; if (target_version == NULL) target_version = default_target_version (); if (is_gcj_43 ()) { /* It's a version of gcj >= 4.3. Assume the classfile versions are correct. */ if (is_gcj43_usable (source_version, target_version, &usable, &fsource_option, &ftarget_option)) { err = true; goto done1; } } else { /* It's a version of gcj < 4.3. Ignore the version of the class files that it creates. Test whether it supports the desired target-version and source-version. */ if (strcmp (target_version, "1.4") == 0 && strcmp (source_version, "1.4") == 0) { if (is_oldgcj_14_14_usable (&usable)) { err = true; goto done1; } } else if (strcmp (target_version, "1.4") == 0 && strcmp (source_version, "1.3") == 0) { if (is_oldgcj_14_13_usable (&usable, &no_assert_option)) { err = true; goto done1; } } } if (usable) { char *old_classpath; /* Set CLASSPATH. We could also use the --CLASSPATH=... option of gcj. Note that --classpath=... option is different: its argument should also contain gcj's libgcj.jar, but we don't know its location. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); err = compile_using_gcj (java_sources, java_sources_count, no_assert_option, fsource_option, source_version, ftarget_option, target_version, directory, optimize, debug, verbose, false); /* Reset CLASSPATH. */ reset_classpath (old_classpath); goto done2; } } if (is_javac_present ()) { bool usable = false; bool source_option = false; bool target_option = false; const char *source_version_for_javac; if (target_version == NULL) target_version = default_target_version (); source_version_for_javac = get_source_version_for_javac (source_version, target_version); if (is_javac_usable (source_version, source_version_for_javac, target_version, &usable, &source_option, &target_option)) { err = true; goto done1; } if (usable) { char *old_classpath; /* Set CLASSPATH. We don't use the "-classpath ..." option because in JDK 1.1.x its argument should also contain the JDK's classes.zip, but we don't know its location. (In JDK 1.3.0 it would work.) */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); err = compile_using_javac (java_sources, java_sources_count, source_option, source_version_for_javac, target_option, target_version, directory, optimize, debug, verbose, false); /* Reset CLASSPATH. */ reset_classpath (old_classpath); goto done2; } } if (is_jikes_present ()) { /* Test whether it supports the desired target-version and source-version. */ bool usable = (strcmp (source_version, "1.3") == 0); if (usable) { char *old_classpath; /* Set CLASSPATH. We could also use the "-classpath ..." option. Since jikes doesn't come with its own standard library, it needs a classes.zip or rt.jar or libgcj.jar in the CLASSPATH. To increase the chance of success, we reuse the current CLASSPATH if the user has set it. */ old_classpath = set_classpath (classpaths, classpaths_count, false, verbose); err = compile_using_jikes (java_sources, java_sources_count, directory, optimize, debug, verbose, false); /* Reset CLASSPATH. */ reset_classpath (old_classpath); goto done2; } } error (0, 0, _("Java compiler not found, try installing gcj or set $JAVAC")); err = true; done2: if (old_JAVA_HOME != NULL) { xsetenv ("JAVA_HOME", old_JAVA_HOME, 1); free (old_JAVA_HOME); } done1: return err; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javacomp.h��������������������������������������������������������������0000664�0000000�0000000�00000010600�14110572173�0017013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a Java program. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _JAVACOMP_H #define _JAVACOMP_H #include <stdbool.h> /* Compile a Java source file to bytecode. java_sources is an array of source file names. classpaths is a list of pathnames to be prepended to the CLASSPATH. source_version can be: support for 1.3 inner classes 1.4 assert keyword 1.5 generic classes and methods 1.6 (not supported) 1.7 switch(string) 1.8 lambdas 9 private interface methods 10 type inference for local variables 11 'var' in parameters of lambda expressions target_version can be: classfile version: 1.1 45.3 1.2 46.0 1.3 47.0 1.4 48.0 1.5 49.0 1.6 50.0 1.7 51.0 1.8 52.0 9 53.0 10 54.0 11 55.0 target_version can also be given as NULL. In this case, the required target_version is determined from the found JVM (see javaversion.h). Specifying target_version is useful when building a library (.jar) that is useful outside the given package. Passing target_version = NULL is useful when building an application. It is unreasonable to ask for: - target_version < 1.4 with source_version >= 1.4, or - target_version < 1.5 with source_version >= 1.5, or - target_version < 1.6 with source_version >= 1.6, or - target_version < 1.7 with source_version >= 1.7, or - target_version < 1.8 with source_version >= 1.8, or - target_version < 9 with source_version >= 9, or - target_version < 10 with source_version >= 10, or - target_version < 11 with source_version >= 11, because even Sun's/Oracle's javac doesn't support these combinations. It is redundant to ask for a target_version > source_version, since the smaller target_version = source_version will also always work and newer JVMs support the older target_versions too. Except for the cases - target_version = 1.4, source_version = 1.3, which allows gcj versions 3.0 to 3.2 to be used, - target-version = 1.6, source-version = 1.5, which allows gcj versions >= 4.3 to be used. directory is the target directory. The .class file for class X.Y.Z is written at directory/X/Y/Z.class. If directory is NULL, the .class file is written in the source's directory. use_minimal_classpath = true means to ignore the user's CLASSPATH and use a minimal one. This is likely to reduce possible problems if the user's CLASSPATH contains garbage or a classes.zip file of the wrong Java version. If verbose, the command to be executed will be printed. Return false if OK, true on error. */ extern bool compile_java_class (const char * const *java_sources, unsigned int java_sources_count, const char * const *classpaths, unsigned int classpaths_count, const char *source_version, const char *target_version, const char *directory, bool optimize, bool debug, bool use_minimal_classpath, bool verbose); #endif /* _JAVACOMP_H */ ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javaexec.c��������������������������������������������������������������0000664�0000000�0000000�00000030153�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a Java program. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 <alloca.h> /* Specification. */ #include "javaexec.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "execute.h" #include "classpath.h" #include "xsetenv.h" #include "sh-quote.h" #include "concat-filename.h" #include "xalloc.h" #include "xmalloca.h" #include "error.h" #include "gettext.h" #define _(str) gettext (str) /* Survey of Java virtual machines. A = does it work without CLASSPATH being set B = does it work with CLASSPATH being set to empty C = option to set CLASSPATH, other than setting it in the environment T = test for presence Program from A B C T $JAVA unknown N Y n/a true gij GCC 3.0 Y Y n/a gij --version >/dev/null java JDK 1.1.8 Y Y -classpath P java -version 2>/dev/null jre JDK 1.1.8 N Y -classpath P jre 2>/dev/null; test $? = 1 java JDK 1.3.0 Y Y -classpath P java -version 2>/dev/null jview MS IE Y Y -cp P jview -? >nul; %errorlevel% = 1 The CLASSPATH is a colon separated list of pathnames. (On Windows: a semicolon separated list of pathnames.) We try the Java virtual machines in the following order: 1. getenv ("JAVA"), because the user must be able to override our preferences, 2. "gij", because it is a completely free JVM, 3. "java", because it is a standard JVM, 4. "jre", comes last because it requires a CLASSPATH environment variable, 5. "jview", on Windows only, because it is frequently installed. We unset the JAVA_HOME environment variable, because a wrong setting of this variable can confuse the JDK's javac. */ bool execute_java_class (const char *class_name, const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath, const char *exe_dir, const char * const *args, bool verbose, bool quiet, execute_fn *executer, void *private_data) { bool err = false; unsigned int nargs; char *old_JAVA_HOME; /* Count args. */ { const char * const *arg; for (nargs = 0, arg = args; *arg != NULL; nargs++, arg++) ; } /* First, try a class compiled to a native code executable. */ if (exe_dir != NULL) { char *exe_pathname = xconcatenated_filename (exe_dir, class_name, EXEEXT); char *old_classpath; const char **argv = (const char **) xmalloca ((1 + nargs + 1) * sizeof (const char *)); unsigned int i; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = exe_pathname; for (i = 0; i <= nargs; i++) argv[1 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer (class_name, exe_pathname, argv, private_data); /* Reset CLASSPATH. */ reset_classpath (old_classpath); freea (argv); goto done1; } { const char *java = getenv ("JAVA"); if (java != NULL && java[0] != '\0') { /* Because $JAVA may consist of a command and options, we use the shell. Because $JAVA has been set by the user, we leave all all environment variables in place, including JAVA_HOME, and we don't erase the user's CLASSPATH. */ char *old_classpath; unsigned int command_length; char *command; const char *argv[4]; const char * const *arg; char *p; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, false, verbose); command_length = strlen (java); command_length += 1 + shell_quote_length (class_name); for (arg = args; *arg != NULL; arg++) command_length += 1 + shell_quote_length (*arg); command_length += 1; command = (char *) xmalloca (command_length); p = command; /* Don't shell_quote $JAVA, because it may consist of a command and options. */ memcpy (p, java, strlen (java)); p += strlen (java); *p++ = ' '; p = shell_quote_copy (p, class_name); for (arg = args; *arg != NULL; arg++) { *p++ = ' '; p = shell_quote_copy (p, *arg); } *p++ = '\0'; /* Ensure command_length was correctly calculated. */ if (p - command > command_length) abort (); if (verbose) printf ("%s\n", command); argv[0] = BOURNE_SHELL; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; err = executer (java, BOURNE_SHELL, argv, private_data); freea (command); /* Reset CLASSPATH. */ reset_classpath (old_classpath); goto done1; } } /* Unset the JAVA_HOME environment variable. */ old_JAVA_HOME = getenv ("JAVA_HOME"); if (old_JAVA_HOME != NULL) { old_JAVA_HOME = xstrdup (old_JAVA_HOME); unsetenv ("JAVA_HOME"); } { static bool gij_tested; static bool gij_present; if (!gij_tested) { /* Test for presence of gij: "gij --version > /dev/null" */ const char *argv[3]; int exitstatus; argv[0] = "gij"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("gij", "gij", argv, NULL, false, false, true, true, true, false, NULL); gij_present = (exitstatus == 0); gij_tested = true; } if (gij_present) { char *old_classpath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "gij"; argv[1] = class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("gij", "gij", argv, private_data); /* Reset CLASSPATH. */ reset_classpath (old_classpath); freea (argv); goto done2; } } { static bool java_tested; static bool java_present; if (!java_tested) { /* Test for presence of java: "java -version 2> /dev/null" */ const char *argv[3]; int exitstatus; argv[0] = "java"; argv[1] = "-version"; argv[2] = NULL; exitstatus = execute ("java", "java", argv, NULL, false, false, true, true, true, false, NULL); java_present = (exitstatus == 0); java_tested = true; } if (java_present) { char *old_classpath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; /* Set CLASSPATH. We don't use the "-classpath ..." option because in JDK 1.1.x its argument should also contain the JDK's classes.zip, but we don't know its location. (In JDK 1.3.0 it would work.) */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "java"; argv[1] = class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("java", "java", argv, private_data); /* Reset CLASSPATH. */ reset_classpath (old_classpath); freea (argv); goto done2; } } { static bool jre_tested; static bool jre_present; if (!jre_tested) { /* Test for presence of jre: "jre 2> /dev/null ; test $? = 1" */ const char *argv[2]; int exitstatus; argv[0] = "jre"; argv[1] = NULL; exitstatus = execute ("jre", "jre", argv, NULL, false, false, true, true, true, false, NULL); jre_present = (exitstatus == 0 || exitstatus == 1); jre_tested = true; } if (jre_present) { char *old_classpath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; /* Set CLASSPATH. We don't use the "-classpath ..." option because in JDK 1.1.x its argument should also contain the JDK's classes.zip, but we don't know its location. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "jre"; argv[1] = class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("jre", "jre", argv, private_data); /* Reset CLASSPATH. */ reset_classpath (old_classpath); freea (argv); goto done2; } } #if defined _WIN32 || defined __CYGWIN__ /* Native Windows, Cygwin */ { static bool jview_tested; static bool jview_present; if (!jview_tested) { /* Test for presence of jview: "jview -? >nul ; test $? = 1" */ const char *argv[3]; int exitstatus; argv[0] = "jview"; argv[1] = "-?"; argv[2] = NULL; exitstatus = execute ("jview", "jview", argv, NULL, false, false, true, true, true, false, NULL); jview_present = (exitstatus == 0 || exitstatus == 1); jview_tested = true; } if (jview_present) { char *old_classpath; const char **argv = (const char **) xmalloca ((2 + nargs + 1) * sizeof (const char *)); unsigned int i; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "jview"; argv[1] = class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = args[i]; if (verbose) { char *command = shell_quote_argv (argv); printf ("%s\n", command); free (command); } err = executer ("jview", "jview", argv, private_data); /* Reset CLASSPATH. */ reset_classpath (old_classpath); freea (argv); goto done2; } } #endif if (!quiet) error (0, 0, _("Java virtual machine not found, try installing gij or set $JAVA")); err = true; done2: if (old_JAVA_HOME != NULL) { xsetenv ("JAVA_HOME", old_JAVA_HOME, 1); free (old_JAVA_HOME); } done1: return err; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javaexec.h��������������������������������������������������������������0000664�0000000�0000000�00000004524�14110572173�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a Java program. Copyright (C) 2001-2002, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _JAVAEXEC_H #define _JAVAEXEC_H #include <stdbool.h> typedef bool execute_fn (const char *progname, const char *prog_path, const char * const *prog_argv, void *private_data); /* Execute a Java class. class_name is the Java class name to be executed. classpaths is a list of pathnames to be prepended to the CLASSPATH. use_minimal_classpath = true means to ignore the user's CLASSPATH and use a minimal one. This is likely to reduce possible problems if the user's CLASSPATH contains garbage or a classes.zip file of the wrong Java version. exe_dir is a directory that may contain a native executable for the class. args is a NULL terminated list of arguments to be passed to the program. If verbose, the command to be executed will be printed. Then the command is passed to the execute function together with the private_data argument. This function returns false if OK, true on error. Return false if OK, true on error. If quiet, error messages will not be printed. */ extern bool execute_java_class (const char *class_name, const char * const *classpaths, unsigned int classpaths_count, bool use_minimal_classpath, const char *exe_dir, const char * const *args, bool verbose, bool quiet, execute_fn *executer, void *private_data); #endif /* _JAVAEXEC_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javaversion.c�����������������������������������������������������������0000664�0000000�0000000�00000006016�14110572173�0017543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the Java version supported by javaexec. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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> /* Specification. */ #include "javaversion.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) # define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) #endif #include "javaexec.h" #include "spawn-pipe.h" #include "wait-process.h" #include "error.h" #include "gettext.h" #define _(str) gettext (str) /* Get PKGDATADIR. */ #include "configmake.h" struct locals { /* OUT */ char *line; }; static bool execute_and_read_line (const char *progname, const char *prog_path, const char * const *prog_argv, void *private_data) { struct locals *l = (struct locals *) private_data; pid_t child; int fd[1]; FILE *fp; char *line; size_t linesize; size_t linelen; int exitstatus; /* Open a pipe to the JVM. */ child = create_pipe_in (progname, prog_path, prog_argv, NULL, DEV_NULL, false, true, false, fd); if (child == -1) return false; /* Retrieve its result. */ fp = fdopen (fd[0], "r"); if (fp == NULL) { error (0, errno, _("fdopen() failed")); return false; } line = NULL; linesize = 0; linelen = getline (&line, &linesize, fp); if (linelen == (size_t)(-1)) { error (0, 0, _("%s subprocess I/O error"), progname); return false; } if (linelen > 0 && line[linelen - 1] == '\n') line[linelen - 1] = '\0'; fclose (fp); /* Remove zombie process from process list, and retrieve exit status. */ exitstatus = wait_subprocess (child, progname, true, false, true, false, NULL); if (exitstatus != 0) { free (line); return false; } l->line = line; return false; } char * javaexec_version (void) { const char *class_name = "javaversion"; char *malloc_pkgdatadir; const char *pkgdatadir = relocate2 (PKGDATADIR, &malloc_pkgdatadir); const char *args[1]; struct locals locals; args[0] = NULL; locals.line = NULL; execute_java_class (class_name, &pkgdatadir, 1, true, NULL, args, false, false, execute_and_read_line, &locals); free (malloc_pkgdatadir); return locals.line; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javaversion.class�������������������������������������������������������0000664�0000000�0000000�00000000776�14110572173�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000��������������������������������������������������������������������������������������������������������������������������������������������������������������������������-�! �� ��� �� �����<init>�()V�Code�LineNumberTable�main�([Ljava/lang/String;)V� SourceFile�javaversion.java �� � ���java.specification.version ��� �� � javaversion�java/lang/Object�java/lang/System�out�Ljava/io/PrintStream;� getProperty�&(Ljava/lang/String;)Ljava/lang/String;�java/io/PrintStream�println�(Ljava/lang/String;)V�!���������� �� ��������*����� �������� � � �� ���(����� ������� ��� ����� ���������gnulib-20210822~d383792/lib/javaversion.h�����������������������������������������������������������0000664�0000000�0000000�00000002527�14110572173�0017553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the Java version supported by javaexec. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 _JAVAVERSION_H #define _JAVAVERSION_H #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Return information about the Java version used by execute_java_class(). This is the value of System.getProperty("java.specification.version"). Some possible values are: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 9, 10, 11. Return NULL if the Java version cannot be determined. */ extern char * javaexec_version (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _JAVAVERSION_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/javaversion.java��������������������������������������������������������0000664�0000000�0000000�00000002155�14110572173�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Show the Java version. * Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. * * This 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/>. */ /** * This program shows the Java version. * * This program _must_ be compiled with * javac -d . -target 1.1 javaversion.java * since its purpose is to show the version of _any_ Java implementation. * * @author Bruno Haible */ public class javaversion { public static void main (String[] args) { System.out.println(System.getProperty("java.specification.version")); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/langinfo.in.h�����������������������������������������������������������0000664�0000000�0000000�00000015124�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <langinfo.h>. Copyright (C) 2009-2021 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/>. */ /* * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> */ #ifndef _@GUARD_PREFIX@_LANGINFO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_LANGINFO_H@ # @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ #endif #ifndef _@GUARD_PREFIX@_LANGINFO_H #define _@GUARD_PREFIX@_LANGINFO_H #if !@HAVE_LANGINFO_H@ /* A platform that lacks <langinfo.h>. */ /* Assume that it also lacks <nl_types.h> and the nl_item type. */ # if !GNULIB_defined_nl_item typedef int nl_item; # define GNULIB_defined_nl_item 1 # endif /* nl_langinfo items of the LC_CTYPE category */ # define CODESET 10000 /* nl_langinfo items of the LC_NUMERIC category */ # define RADIXCHAR 10001 # define DECIMAL_POINT RADIXCHAR # define THOUSEP 10002 # define THOUSANDS_SEP THOUSEP # define GROUPING 10114 /* nl_langinfo items of the LC_TIME category */ # define D_T_FMT 10003 # define D_FMT 10004 # define T_FMT 10005 # define T_FMT_AMPM 10006 # define AM_STR 10007 # define PM_STR 10008 # define DAY_1 10009 # define DAY_2 (DAY_1 + 1) # define DAY_3 (DAY_1 + 2) # define DAY_4 (DAY_1 + 3) # define DAY_5 (DAY_1 + 4) # define DAY_6 (DAY_1 + 5) # define DAY_7 (DAY_1 + 6) # define ABDAY_1 10016 # define ABDAY_2 (ABDAY_1 + 1) # define ABDAY_3 (ABDAY_1 + 2) # define ABDAY_4 (ABDAY_1 + 3) # define ABDAY_5 (ABDAY_1 + 4) # define ABDAY_6 (ABDAY_1 + 5) # define ABDAY_7 (ABDAY_1 + 6) # define MON_1 10023 # define MON_2 (MON_1 + 1) # define MON_3 (MON_1 + 2) # define MON_4 (MON_1 + 3) # define MON_5 (MON_1 + 4) # define MON_6 (MON_1 + 5) # define MON_7 (MON_1 + 6) # define MON_8 (MON_1 + 7) # define MON_9 (MON_1 + 8) # define MON_10 (MON_1 + 9) # define MON_11 (MON_1 + 10) # define MON_12 (MON_1 + 11) # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define ABMON_1 10035 # define ABMON_2 (ABMON_1 + 1) # define ABMON_3 (ABMON_1 + 2) # define ABMON_4 (ABMON_1 + 3) # define ABMON_5 (ABMON_1 + 4) # define ABMON_6 (ABMON_1 + 5) # define ABMON_7 (ABMON_1 + 6) # define ABMON_8 (ABMON_1 + 7) # define ABMON_9 (ABMON_1 + 8) # define ABMON_10 (ABMON_1 + 9) # define ABMON_11 (ABMON_1 + 10) # define ABMON_12 (ABMON_1 + 11) # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 /* nl_langinfo items of the LC_MONETARY category */ # define CRNCYSTR 10052 # define CURRENCY_SYMBOL CRNCYSTR # define INT_CURR_SYMBOL 10100 # define MON_DECIMAL_POINT 10101 # define MON_THOUSANDS_SEP 10102 # define MON_GROUPING 10103 # define POSITIVE_SIGN 10104 # define NEGATIVE_SIGN 10105 # define FRAC_DIGITS 10106 # define INT_FRAC_DIGITS 10107 # define P_CS_PRECEDES 10108 # define N_CS_PRECEDES 10109 # define P_SEP_BY_SPACE 10110 # define N_SEP_BY_SPACE 10111 # define P_SIGN_POSN 10112 # define N_SIGN_POSN 10113 /* nl_langinfo items of the LC_MESSAGES category */ # define YESEXPR 10053 # define NOEXPR 10054 #else /* A platform that has <langinfo.h>. */ # if !@HAVE_LANGINFO_CODESET@ # define CODESET 10000 # define GNULIB_defined_CODESET 1 # endif # if !@HAVE_LANGINFO_T_FMT_AMPM@ # define T_FMT_AMPM 10006 # define GNULIB_defined_T_FMT_AMPM 1 # endif # if !@HAVE_LANGINFO_ALTMON@ # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define GNULIB_defined_ALTMON 1 # endif # if !@HAVE_LANGINFO_ERA@ # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 # define GNULIB_defined_ERA 1 # endif # if !@HAVE_LANGINFO_YESEXPR@ # define YESEXPR 10053 # define NOEXPR 10054 # define GNULIB_defined_YESEXPR 1 # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ /* Return a piece of locale dependent information. Note: The difference between nl_langinfo (CODESET) and locale_charset () is that the latter normalizes the encoding names to GNU conventions. */ #if @GNULIB_NL_LANGINFO@ # if @REPLACE_NL_LANGINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef nl_langinfo # define nl_langinfo rpl_nl_langinfo # endif _GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); _GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); # else # if !@HAVE_NL_LANGINFO@ _GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIASWARN (nl_langinfo); #elif defined GNULIB_POSIXCHECK # undef nl_langinfo # if HAVE_RAW_DECL_NL_LANGINFO _GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " "use gnulib module nl_langinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LANGINFO_H */ #endif /* _@GUARD_PREFIX@_LANGINFO_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lc-charset-dispatch.c���������������������������������������������������0000664�0000000�0000000�00000005220�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2021 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>, 2018. */ #include <config.h> /* Specification. */ #include "lc-charset-dispatch.h" #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" # if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of locale_encoding_classification. */ # define locale_encoding_classification_cached locale_encoding_classification # else /* By default, don't make assumptions, hence no caching. */ # define locale_encoding_classification_uncached locale_encoding_classification # endif # if GNULIB_WCHAR_SINGLE_LOCALE static inline # endif enc_t locale_encoding_classification_uncached (void) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return enc_utf8; if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) return enc_eucjp; if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) return enc_94; if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) return enc_euctw; if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) return enc_gb18030; if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) return enc_sjis; return enc_other; } # if GNULIB_WCHAR_SINGLE_LOCALE static int cached_locale_enc = -1; enc_t locale_encoding_classification_cached (void) { if (cached_locale_enc < 0) cached_locale_enc = locale_encoding_classification_uncached (); return cached_locale_enc; } # endif #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lc-charset-dispatch.h���������������������������������������������������0000664�0000000�0000000�00000002572�14110572173�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2021 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>, 2018. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* A classification of special values of the encoding of the current locale. */ typedef enum { enc_other, /* other */ enc_utf8, /* UTF-8 */ enc_eucjp, /* EUC-JP */ enc_94, /* EUC-KR, GB2312, BIG5 */ enc_euctw, /* EUC-TW */ enc_gb18030, /* GB18030 */ enc_sjis /* SJIS */ } enc_t; /* Returns a classification of special values of the encoding of the current locale. */ extern enc_t locale_encoding_classification (void); #endif ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lchmod.c����������������������������������������������������������������0000664�0000000�0000000�00000006441�14110572173�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implement lchmod on platforms where it does not work correctly. Copyright 2020-2021 Free Software Foundation, Inc. This 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 Paul Eggert */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include <intprops.h> /* Work like chmod, except when FILE is a symbolic link. In that case, on systems where permissions on symbolic links are unsupported (such as Linux), set errno to EOPNOTSUPP and return -1. */ int lchmod (char const *file, mode_t mode) { #if defined O_PATH && defined AT_EMPTY_PATH /* Open a file descriptor with O_NOFOLLOW, to make sure we don't follow symbolic links, if /proc is mounted. O_PATH is used to avoid a failure if the file is not readable. Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=14578> */ int fd = open (file, O_PATH | O_NOFOLLOW | O_CLOEXEC); if (fd < 0) return fd; /* Up to Linux 5.3 at least, when FILE refers to a symbolic link, the chmod call below will change the permissions of the symbolic link - which is undesired - and on many file systems (ext4, btrfs, jfs, xfs, ..., but not reiserfs) fail with error EOPNOTSUPP - which is misleading. Therefore test for a symbolic link explicitly. Use fstatat because fstat does not work on O_PATH descriptors before Linux 3.6. */ struct stat st; if (fstatat (fd, "", &st, AT_EMPTY_PATH) != 0) { int stat_errno = errno; close (fd); errno = stat_errno; return -1; } if (S_ISLNK (st.st_mode)) { close (fd); errno = EOPNOTSUPP; return -1; } # if defined __linux__ || defined __ANDROID__ || defined __CYGWIN__ static char const fmt[] = "/proc/self/fd/%d"; char buf[sizeof fmt - sizeof "%d" + INT_BUFSIZE_BOUND (int)]; sprintf (buf, fmt, fd); int chmod_result = chmod (buf, mode); int chmod_errno = errno; close (fd); if (chmod_result == 0) return chmod_result; if (chmod_errno != ENOENT) { errno = chmod_errno; return chmod_result; } # endif /* /proc is not mounted or would not work as in GNU/Linux. */ #elif HAVE_LSTAT struct stat st; int lstat_result = lstat (file, &st); if (lstat_result != 0) return lstat_result; if (S_ISLNK (st.st_mode)) { errno = EOPNOTSUPP; return -1; } #endif /* Fall back on chmod, despite a possible race. */ return chmod (file, mode); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lchown.c����������������������������������������������������������������0000664�0000000�0000000�00000006000�14110572173�0016477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a stub lchown function for systems that lack it. Copyright (C) 1998-1999, 2002, 2004, 2006-2007, 2009-2021 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 Jim Meyering */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #if !HAVE_LCHOWN /* If the system chown does not follow symlinks, we don't want it replaced by gnulib's chown, which does follow symlinks. */ # if CHOWN_MODIFIES_SYMLINK # undef chown # endif /* Work just like chown, except when FILE is a symbolic link. In that case, set errno to EOPNOTSUPP and return -1. But if autoconf tests determined that chown modifies symlinks, then just call chown. */ int lchown (const char *file, uid_t uid, gid_t gid) { # if HAVE_CHOWN # if ! CHOWN_MODIFIES_SYMLINK struct stat stats; if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode)) { errno = EOPNOTSUPP; return -1; } # endif return chown (file, uid, gid); # else /* !HAVE_CHOWN */ errno = ENOSYS; return -1; # endif } #else /* HAVE_LCHOWN */ # undef lchown /* Work around trailing slash bugs in lchown. */ int rpl_lchown (const char *file, uid_t uid, gid_t gid) { bool stat_valid = false; int result; # if CHOWN_CHANGE_TIME_BUG struct stat st; if (gid != (gid_t) -1 || uid != (uid_t) -1) { if (lstat (file, &st)) return -1; stat_valid = true; if (!S_ISLNK (st.st_mode)) return chown (file, uid, gid); } # endif # if CHOWN_TRAILING_SLASH_BUG if (!stat_valid) { size_t len = strlen (file); if (len && file[len - 1] == '/') return chown (file, uid, gid); } # endif result = lchown (file, uid, gid); # if CHOWN_CHANGE_TIME_BUG && HAVE_LCHMOD if (result == 0 && stat_valid && (uid == st.st_uid || uid == (uid_t) -1) && (gid == st.st_gid || gid == (gid_t) -1)) { /* No change in ownership, but at least one argument was not -1, so we are required to update ctime. Since lchown succeeded, we assume that lchmod will do likewise. But if the system lacks lchmod and lutimes, we are out of luck. Oh well. */ result = lchmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX)); } # endif return result; } #endif /* HAVE_LCHOWN */ gnulib-20210822~d383792/lib/ldexpf.c����������������������������������������������������������������0000664�0000000�0000000�00000002003�14110572173�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multiply a 'float' by a power of 2. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() function. */ #undef exp #define exp exponent float ldexpf (float x, int exp) { return (float) ldexp ((double) x, exp); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ldexpl.c����������������������������������������������������������������0000664�0000000�0000000�00000003655�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for ldexpl. Contributed by Paolo Bonzini Copyright 2002-2003, 2007-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double ldexpl (long double x, int exp) { return ldexp (x, exp); } #else # include <float.h> # include "fpucw.h" long double ldexpl (long double x, int exp) { long double factor; int bit; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Check for zero, nan and infinity. */ if (!(isnanl (x) || x + x == x)) { if (exp < 0) { exp = -exp; factor = 0.5L; } else factor = 2.0L; if (exp > 0) for (bit = 1;;) { /* Invariant: Here bit = 2^i, factor = 2^-2^i or = 2^2^i, and bit <= exp. */ if (exp & bit) x *= factor; bit <<= 1; if (bit > exp) break; factor = factor * factor; } } END_LONG_DOUBLE_ROUNDING (); return x; } #endif #if 0 int main (void) { long double x; int y; for (y = 0; y < 29; y++) printf ("%5d %.16Lg %.16Lg\n", y, ldexpl (0.8L, y), ldexpl (0.8L, -y) * ldexpl (0.8L, y)); } #endif �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ldtoastr.c��������������������������������������������������������������0000664�0000000�0000000�00000001421�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'long double' to accurate string. Copyright (C) 2010-2021 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/>. */ #define LENGTH 3 #include "ftoastr.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/libc-config.h�����������������������������������������������������������0000664�0000000�0000000�00000013400�14110572173�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System definitions for code taken from the GNU C Library Copyright 2017-2021 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_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_noinline__ # undef __attribute_nonstring__ # undef __attribute_pure__ # undef __attribute_returns_twice__ # undef __attribute_used__ # undef __attribute_warn_unused_result__ # undef __bos # undef __bos0 # undef __errordecl # undef __extension__ # undef __extern_always_inline # undef __extern_inline # undef __flexarr # undef __fortify_function # undef __glibc_c99_flexarr_available # undef __glibc_has_attribute # undef __glibc_has_builtin # undef __glibc_has_extension # undef __glibc_macro_warning # undef __glibc_macro_warning1 # undef __glibc_objsize # undef __glibc_objsize0 # undef __glibc_unlikely # undef __inline # undef __ptr_t # undef __restrict # undef __restrict_arr # undef __va_arg_pack # undef __va_arg_pack_len # undef __warnattr /* 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/libunistring.valgrind���������������������������������������������������0000664�0000000�0000000�00000002516�14110572173�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress valgrind messages in an installed libunistring. # Copyright (C) 2010-2021 Free Software Foundation, Inc. # # This file is free software. # It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". # You can redistribute it and/or modify it under either # - the terms of the GNU Lesser General Public License as published # by the Free Software Foundation; either version 3, or (at your # option) any later version, or # - the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) # any later version, or # - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". # # 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 and the GNU General Public License # for more details. # # You should have received a copy of the GNU Lesser General Public # License and of the GNU General Public License along with this # program. If not, see <https://www.gnu.org/licenses/>. # Suppress a valgrind message about use of uninitialized memory in freea(). # This use is OK because it provides only a speedup. { libunistring_freea Memcheck:Cond fun:libunistring_freea } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/limits.in.h�������������������������������������������������������������0000664�0000000�0000000�00000010725�14110572173�0017131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <limits.h>. Copyright 2016-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_LIMITS_H /* Special invocation convention: On Haiku/x86_64, we have a sequence of nested includes <limits.h> -> <syslimits.h> -> <limits.h>. In this situation, LONG_MAX and INT_MAX are not yet defined, therefore we should not attempt to define LONG_BIT. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LIMITS_H # define _GL_ALREADY_INCLUDING_LIMITS_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_LIMITS_H@ # undef _GL_ALREADY_INCLUDING_LIMITS_H #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Macros specified by C2x and by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* Macros specified by C2x. */ #if (! defined BOOL_WIDTH \ && (defined _GNU_SOURCE \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define BOOL_MAX 1 # define BOOL_WIDTH 1 #endif #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif �������������������������������������������gnulib-20210822~d383792/lib/linebuffer.c������������������������������������������������������������0000664�0000000�0000000�00000005645�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* linebuffer.c -- read arbitrarily long lines Copyright (C) 1986, 1991, 1998-1999, 2001, 2003-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Richard Stallman. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include "linebuffer.h" #include "xalloc.h" #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* Initialize linebuffer LINEBUFFER for use. */ void initbuffer (struct linebuffer *linebuffer) { memset (linebuffer, 0, sizeof *linebuffer); } struct linebuffer * readlinebuffer (struct linebuffer *linebuffer, FILE *stream) { return readlinebuffer_delim (linebuffer, stream, '\n'); } /* Read an arbitrarily long line of text from STREAM into LINEBUFFER. Consider lines to be terminated by DELIMITER. Keep the delimiter; append DELIMITER if it's the last line of a file that ends in a character other than DELIMITER. Do not NUL-terminate. Therefore the stream can contain NUL bytes, and the length (including the delimiter) is returned in linebuffer->length. Return NULL when stream is empty. Return NULL and set errno upon error; callers can distinguish this case from the empty case by invoking ferror (stream). Otherwise, return LINEBUFFER. */ struct linebuffer * readlinebuffer_delim (struct linebuffer *linebuffer, FILE *stream, char delimiter) { int c; char *buffer = linebuffer->buffer; char *p = linebuffer->buffer; char *end = buffer + linebuffer->size; /* Sentinel. */ if (feof (stream)) return NULL; do { c = getc (stream); if (c == EOF) { if (p == buffer || ferror (stream)) return NULL; if (p[-1] == delimiter) break; c = delimiter; } if (p == end) { idx_t oldsize = linebuffer->size; buffer = xpalloc (buffer, &linebuffer->size, 1, -1, 1); p = buffer + oldsize; linebuffer->buffer = buffer; end = buffer + linebuffer->size; } *p++ = c; } while (c != delimiter); linebuffer->length = p - buffer; return linebuffer; } /* Free the buffer that was allocated for linebuffer LINEBUFFER. */ void freebuffer (struct linebuffer *linebuffer) { free (linebuffer->buffer); } �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/linebuffer.h������������������������������������������������������������0000664�0000000�0000000�00000004116�14110572173�0017341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* linebuffer.h -- declarations for reading arbitrarily long lines Copyright (C) 1986, 1991, 1998-1999, 2002-2003, 2007, 2009-2021 Free Software Foundation, Inc. This 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/>. */ #if !defined LINEBUFFER_H # define LINEBUFFER_H # include "idx.h" # include <stdio.h> /* A 'struct linebuffer' holds a line of text. */ struct linebuffer { idx_t size; /* Allocated. */ idx_t length; /* Used. */ char *buffer; }; /* Initialize linebuffer LINEBUFFER for use. */ void initbuffer (struct linebuffer *linebuffer); /* Read an arbitrarily long line of text from STREAM into LINEBUFFER. Consider lines to be terminated by DELIMITER. Keep the delimiter; append DELIMITER if we reach EOF and it wasn't the last character in the file. Do not NUL-terminate. Return LINEBUFFER, except at end of file return NULL. */ struct linebuffer *readlinebuffer_delim (struct linebuffer *linebuffer, FILE *stream, char delimiter); /* Read an arbitrarily long line of text from STREAM into LINEBUFFER. Keep the newline; append a newline if it's the last line of a file that ends in a non-newline character. Do not NUL-terminate. Return LINEBUFFER, except at end of file return NULL. */ struct linebuffer *readlinebuffer (struct linebuffer *linebuffer, FILE *stream); /* Free linebuffer LINEBUFFER and its data, all allocated with malloc. */ void freebuffer (struct linebuffer *); #endif /* LINEBUFFER_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/link.c������������������������������������������������������������������0000664�0000000�0000000�00000014314�14110572173�0016151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate link on platforms that lack it, namely native Windows platforms. Copyright (C) 2009-2021 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/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #if !HAVE_LINK # if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetModuleHandle # define GetModuleHandle GetModuleHandleA # undef CreateHardLink # define CreateHardLink CreateHardLinkA # if !(_WIN32_WINNT >= _WIN32_WINNT_WINXP) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* CreateHardLink was introduced only in Windows 2000. */ typedef BOOL (WINAPI * CreateHardLinkFuncType) (LPCSTR lpFileName, LPCSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); static CreateHardLinkFuncType CreateHardLinkFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = GetModuleHandle ("kernel32.dll"); if (kernel32 != NULL) { CreateHardLinkFunc = (CreateHardLinkFuncType) GetProcAddress (kernel32, "CreateHardLinkA"); } initialized = TRUE; } # else # define CreateHardLinkFunc CreateHardLink # endif int link (const char *file1, const char *file2) { char *dir; size_t len1 = strlen (file1); size_t len2 = strlen (file2); # if !(_WIN32_WINNT >= _WIN32_WINNT_WINXP) if (!initialized) initialize (); # endif if (CreateHardLinkFunc == NULL) { /* System does not support hard links. */ errno = EPERM; return -1; } /* Reject trailing slashes on non-directories; native Windows does not support hard-linking directories. */ if ((len1 && (file1[len1 - 1] == '/' || file1[len1 - 1] == '\\')) || (len2 && (file2[len2 - 1] == '/' || file2[len2 - 1] == '\\'))) { /* If stat() fails, then link() should fail for the same reason. */ struct stat st; if (stat (file1, &st)) { if (errno == EOVERFLOW) /* It's surely a file, not a directory (see stat-w32.c). */ errno = ENOTDIR; return -1; } if (!S_ISDIR (st.st_mode)) errno = ENOTDIR; else errno = EPERM; return -1; } /* CreateHardLink("b/.","a",NULL) creates file "b", so we must check that dirname(file2) exists. */ dir = strdup (file2); if (!dir) return -1; { struct stat st; char *p = strchr (dir, '\0'); while (dir < p && (*--p != '/' && *p != '\\')); *p = '\0'; if (p != dir && stat (dir, &st) != 0 && errno != EOVERFLOW) { free (dir); return -1; } free (dir); } /* Now create the link. */ if (CreateHardLinkFunc (file2, file1, NULL) == 0) { /* It is not documented which errors CreateHardLink() can produce. * The following conversions are based on tests on a Windows XP SP2 * system. */ DWORD err = GetLastError (); switch (err) { case ERROR_ACCESS_DENIED: errno = EACCES; break; case ERROR_INVALID_FUNCTION: /* fs does not support hard links */ errno = EPERM; break; case ERROR_NOT_SAME_DEVICE: errno = EXDEV; break; case ERROR_PATH_NOT_FOUND: case ERROR_FILE_NOT_FOUND: errno = ENOENT; break; case ERROR_INVALID_PARAMETER: errno = ENAMETOOLONG; break; case ERROR_TOO_MANY_LINKS: errno = EMLINK; break; case ERROR_ALREADY_EXISTS: errno = EEXIST; break; default: errno = EIO; } return -1; } return 0; } # else /* !Windows */ # error "This platform lacks a link function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." # endif /* !Windows */ #else /* HAVE_LINK */ # undef link /* Create a hard link from FILE1 to FILE2, working around platform bugs. */ int rpl_link (char const *file1, char const *file2) { size_t len1; size_t len2; struct stat st; /* Don't allow IRIX to dereference dangling file2 symlink. */ if (lstat (file2, &st) == 0 || errno == EOVERFLOW) { errno = EEXIST; return -1; } /* Reject trailing slashes on non-directories. */ len1 = strlen (file1); len2 = strlen (file2); if ((len1 && file1[len1 - 1] == '/') || (len2 && file2[len2 - 1] == '/')) { /* Let link() decide whether hard-linking directories is legal. If stat() fails, then link() should fail for the same reason (although on Solaris 9, link("file/","oops") mistakenly succeeds); if stat() succeeds, require a directory. */ if (stat (file1, &st)) return -1; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } else { /* Fix Cygwin 1.5.x bug where link("a","b/.") creates file "b". */ char *dir = strdup (file2); char *p; if (!dir) return -1; /* We already know file2 does not end in slash. Strip off the basename, then check that the dirname exists. */ p = strrchr (dir, '/'); if (p) { *p = '\0'; if (stat (dir, &st) != 0 && errno != EOVERFLOW) { free (dir); return -1; } } free (dir); } return link (file1, file2); } #endif /* HAVE_LINK */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/linkat.c����������������������������������������������������������������0000664�0000000�0000000�00000021063�14110572173�0016475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a hard link relative to open directories. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "areadlink.h" #include "dirname.h" #include "eloop-threshold.h" #include "filenamecat.h" #include "openat-priv.h" #if !HAVE_LINKAT || LINKAT_SYMLINK_NOTSUP /* Create a link. If FILE1 is a symlink, either create a hardlink to that symlink, or fake it by creating an identical symlink. */ # if LINK_FOLLOWS_SYMLINKS == 0 # define link_immediate link # else static int link_immediate (char const *file1, char const *file2) { char *target = areadlink (file1); if (target) { /* A symlink cannot be modified in-place. Therefore, creating an identical symlink behaves like a hard link to a symlink, except for incorrect st_ino and st_nlink. However, we must be careful of EXDEV. */ struct stat st1; struct stat st2; char *dir = mdir_name (file2); if (!dir) { free (target); errno = ENOMEM; return -1; } if (lstat (file1, &st1) == 0 && stat (dir, &st2) == 0) { if (st1.st_dev == st2.st_dev) { int result = symlink (target, file2); free (target); free (dir); return result; } free (target); free (dir); errno = EXDEV; return -1; } free (target); free (dir); } if (errno == ENOMEM) return -1; return link (file1, file2); } # endif /* LINK_FOLLOWS_SYMLINKS == 0 */ /* Create a link. If FILE1 is a symlink, create a hardlink to the canonicalized file. */ # if 0 < LINK_FOLLOWS_SYMLINKS # define link_follow link # else static int link_follow (char const *file1, char const *file2) { char *name = (char *) file1; char *target; int result; int i = __eloop_threshold (); /* Using realpath or canonicalize_file_name is too heavy-handed: we don't need an absolute name, and we don't need to resolve intermediate symlinks, just the basename of each iteration. */ while (i-- && (target = areadlink (name))) { if (IS_ABSOLUTE_FILE_NAME (target)) { if (name != file1) free (name); name = target; } else { char *dir = mdir_name (name); if (name != file1) free (name); if (!dir) { free (target); errno = ENOMEM; return -1; } name = mfile_name_concat (dir, target, NULL); free (dir); free (target); if (!name) { errno = ENOMEM; return -1; } } } if (i < 0) { target = NULL; errno = ELOOP; } if (!target && errno != EINVAL) { if (name != file1) free (name); return -1; } result = link (name, file2); if (name != file1) free (name); return result; } # endif /* 0 < LINK_FOLLOWS_SYMLINKS */ /* On Solaris, link() doesn't follow symlinks by default, but does so as soon as a library or executable takes part in the program that has been compiled with "c99" or "cc -xc99=all" or "cc ... /usr/lib/values-xpg4.o ...". */ # if LINK_FOLLOWS_SYMLINKS == -1 /* Reduce the penalty of link_immediate and link_follow by incorporating the knowledge that link()'s behaviour depends on the __xpg4 variable. */ extern int __xpg4; static int solaris_optimized_link_immediate (char const *file1, char const *file2) { if (__xpg4 == 0) return link (file1, file2); return link_immediate (file1, file2); } static int solaris_optimized_link_follow (char const *file1, char const *file2) { if (__xpg4 != 0) return link (file1, file2); return link_follow (file1, file2); } # define link_immediate solaris_optimized_link_immediate # define link_follow solaris_optimized_link_follow # endif #endif /* !HAVE_LINKAT || LINKAT_SYMLINK_NOTSUP */ #if !HAVE_LINKAT /* Create a link to FILE1, in the directory open on descriptor FD1, to FILE2, in the directory open on descriptor FD2. If FILE1 is a symlink, FLAG controls whether to dereference FILE1 first. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then rename/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ int linkat (int fd1, char const *file1, int fd2, char const *file2, int flag) { if (flag & ~AT_SYMLINK_FOLLOW) { errno = EINVAL; return -1; } return at_func2 (fd1, file1, fd2, file2, flag ? link_follow : link_immediate); } #else /* HAVE_LINKAT */ # undef linkat /* Create a link. If FILE1 is a symlink, create a hardlink to the canonicalized file. */ static int linkat_follow (int fd1, char const *file1, int fd2, char const *file2) { char *name = (char *) file1; char *target; int result; int i = __eloop_threshold (); /* There is no realpathat. */ while (i-- && (target = areadlinkat (fd1, name))) { if (IS_ABSOLUTE_FILE_NAME (target)) { if (name != file1) free (name); name = target; } else { char *dir = mdir_name (name); if (name != file1) free (name); if (!dir) { free (target); errno = ENOMEM; return -1; } name = mfile_name_concat (dir, target, NULL); free (dir); free (target); if (!name) { errno = ENOMEM; return -1; } } } if (i < 0) { target = NULL; errno = ELOOP; } if (!target && errno != EINVAL) { if (name != file1) free (name); return -1; } result = linkat (fd1, name, fd2, file2, 0); if (name != file1) free (name); return result; } /* Like linkat, but guarantee that AT_SYMLINK_FOLLOW works even on older Linux kernels. */ int rpl_linkat (int fd1, char const *file1, int fd2, char const *file2, int flag) { if (flag & ~AT_SYMLINK_FOLLOW) { errno = EINVAL; return -1; } # if LINKAT_TRAILING_SLASH_BUG /* Reject trailing slashes on non-directories. */ { size_t len1 = strlen (file1); size_t len2 = strlen (file2); if ((len1 && file1[len1 - 1] == '/') || (len2 && file2[len2 - 1] == '/')) { /* Let linkat() decide whether hard-linking directories is legal. If fstatat() fails, then linkat() should fail for the same reason; if fstatat() succeeds, require a directory. */ struct stat st; if (fstatat (fd1, file1, &st, flag ? 0 : AT_SYMLINK_NOFOLLOW)) return -1; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } } # endif if (!flag) { int result = linkat (fd1, file1, fd2, file2, flag); # if LINKAT_SYMLINK_NOTSUP /* OS X 10.10 has linkat() but it doesn't support hardlinks to symlinks. Fallback to our emulation in that case. */ if (result == -1 && (errno == ENOTSUP || errno == EOPNOTSUPP)) return at_func2 (fd1, file1, fd2, file2, link_immediate); # endif return result; } /* Cache the information on whether the system call really works. */ { static int have_follow_really; /* 0 = unknown, 1 = yes, -1 = no */ if (0 <= have_follow_really) { int result = linkat (fd1, file1, fd2, file2, flag); if (!(result == -1 && errno == EINVAL)) { have_follow_really = 1; return result; } have_follow_really = -1; } } return linkat_follow (fd1, file1, fd2, file2); } #endif /* HAVE_LINKAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/listen.c����������������������������������������������������������������0000664�0000000�0000000�00000002364�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* listen.c --- wrappers for Windows listen function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef listen int rpl_listen (int fd, int backlog) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = listen (sock, backlog); if (r < 0) set_winsock_errno (); return r; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/localcharset.c����������������������������������������������������������0000664�0000000�0000000�00000115722�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2021 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>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <stddef.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include <locale.h> #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> /* For the use of setlocale() below, the Gnulib override in setlocale.c is not needed; see the platform lists in setlocale_null.m4. */ # undef setlocale #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include <xlocale.h> #endif #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 /* On these platforms, we use a mapping from non-canonical encoding name to GNU canonical encoding name. */ /* With glibc-2.1 or newer, we don't need any canonicalization, because glibc has iconv and both glibc and libiconv support all GNU canonical names directly. */ # if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) struct table_entry { const char alias[11+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry alias_table[] = { # if defined __FreeBSD__ /* FreeBSD */ /*{ "ARMSCII-8", "ARMSCII-8" },*/ { "Big5", "BIG5" }, { "C", "ASCII" }, /*{ "CP1131", "CP1131" },*/ /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ /*{ "GBK", "GBK" },*/ /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ { "SJIS", "SHIFT_JIS" }, { "US-ASCII", "ASCII" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined __NetBSD__ /* NetBSD */ { "646", "ASCII" }, /*{ "ARMSCII-8", "ARMSCII-8" },*/ /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ /*{ "PT154", "PT154" },*/ { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __OpenBSD__ /* OpenBSD */ { "646", "ASCII" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "US-ASCII", "ASCII" } # define alias_table_defined # endif # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is useless: - It returns the empty string when LANG is set to a locale of the form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 LC_CTYPE file. - The environment variables LANG, LC_CTYPE, LC_ALL are not set by the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. - The documentation says: "... all code that calls BSD system routines should ensure that the const *char parameters of these routines are in UTF-8 encoding. All BSD system functions expect their string parameters to be in UTF-8 encoding and nothing else." It also says "An additional caveat is that string parameters for files, paths, and other file-system entities must be in canonical UTF-8. In a canonical UTF-8 Unicode string, all decomposable characters are decomposed ..." but this is not true: You can pass non-decomposed UTF-8 strings to file system functions, and it is the OS which will convert them to decomposed UTF-8 before accessing the file system. - The Apple Terminal application displays UTF-8 by default. - However, other applications are free to use different encodings: - xterm uses ISO-8859-1 by default. - TextEdit uses MacRoman by default. We prefer UTF-8 over decomposed UTF-8-MAC because one should minimize the use of decomposed Unicode. Unfortunately, through the Darwin file system, decomposed UTF-8 strings are leaked into user space nevertheless. Then there are also the locales with encodings other than US-ASCII and UTF-8. These locales can be occasionally useful to users (e.g. when grepping through ISO-8859-1 encoded text files), when all their file names are in US-ASCII. */ { "ARMSCII-8", "ARMSCII-8" }, { "Big5", "BIG5" }, { "Big5HKSCS", "BIG5-HKSCS" }, { "CP1131", "CP1131" }, { "CP1251", "CP1251" }, { "CP866", "CP866" }, { "CP949", "CP949" }, { "GB18030", "GB18030" }, { "GB2312", "GB2312" }, { "GBK", "GBK" }, /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "KOI8-R", "KOI8-R" }, { "KOI8-U", "KOI8-U" }, { "PT154", "PT154" }, { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined _AIX /* AIX */ /*{ "GBK", "GBK" },*/ { "IBM-1046", "CP1046" }, { "IBM-1124", "CP1124" }, { "IBM-1129", "CP1129" }, { "IBM-1252", "CP1252" }, { "IBM-850", "CP850" }, { "IBM-856", "CP856" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-932", "CP932" }, { "IBM-943", "CP943" }, { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "TIS-620", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" } # define alias_table_defined # endif # if defined __hpux /* HP-UX */ { "SJIS", "SHIFT_JIS" }, { "arabic8", "HP-ARABIC8" }, { "big5", "BIG5" }, { "cp1251", "CP1251" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "gb18030", "GB18030" }, { "greek8", "HP-GREEK8" }, { "hebrew8", "HP-HEBREW8" }, { "hkbig5", "BIG5-HKSCS" }, { "hp15CN", "GB2312" }, { "iso88591", "ISO-8859-1" }, { "iso885913", "ISO-8859-13" }, { "iso885915", "ISO-8859-15" }, { "iso88592", "ISO-8859-2" }, { "iso88594", "ISO-8859-4" }, { "iso88595", "ISO-8859-5" }, { "iso88596", "ISO-8859-6" }, { "iso88597", "ISO-8859-7" }, { "iso88598", "ISO-8859-8" }, { "iso88599", "ISO-8859-9" }, { "kana8", "HP-KANA8" }, { "koi8r", "KOI8-R" }, { "roman8", "HP-ROMAN8" }, { "tis620", "TIS-620" }, { "turkish8", "HP-TURKISH8" }, { "utf8", "UTF-8" } # define alias_table_defined # endif # if defined __sgi /* IRIX */ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __osf__ /* OSF/1 */ /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "KSC5601", "CP949" }, { "SJIS", "SHIFT_JIS" }, { "TACTIS", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" }, { "cp850", "CP850" }, { "dechanyu", "DEC-HANYU" }, { "dechanzi", "GB2312" }, { "deckanji", "DEC-KANJI" }, { "deckorean", "EUC-KR" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "sdeckanji", "EUC-JP" } # define alias_table_defined # endif # if defined __sun /* Solaris */ { "5601", "EUC-KR" }, { "646", "ASCII" }, /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, { "GB18030", "GB18030" }, /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-11", "TIS-620" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "PCK", "SHIFT_JIS" }, { "TIS620.2533", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "ansi-1251", "CP1251" }, { "cns11643", "EUC-TW" }, { "eucJP", "EUC-JP" }, { "gb2312", "GB2312" }, { "koi8-r", "KOI8-R" } # define alias_table_defined # endif # if defined __minix /* Minix */ { "646", "ASCII" } # define alias_table_defined # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ { "CP1361", "JOHAB" }, { "CP20127", "ASCII" }, { "CP20866", "KOI8-R" }, { "CP20936", "GB2312" }, { "CP21866", "KOI8-RU" }, { "CP28591", "ISO-8859-1" }, { "CP28592", "ISO-8859-2" }, { "CP28593", "ISO-8859-3" }, { "CP28594", "ISO-8859-4" }, { "CP28595", "ISO-8859-5" }, { "CP28596", "ISO-8859-6" }, { "CP28597", "ISO-8859-7" }, { "CP28598", "ISO-8859-8" }, { "CP28599", "ISO-8859-9" }, { "CP28605", "ISO-8859-15" }, { "CP38598", "ISO-8859-8" }, { "CP51932", "EUC-JP" }, { "CP51936", "GB2312" }, { "CP51949", "EUC-KR" }, { "CP51950", "EUC-TW" }, { "CP54936", "GB18030" }, { "CP65001", "UTF-8" }, { "CP936", "GBK" } # define alias_table_defined # endif # if defined OS2 /* OS/2 */ /* The list of encodings is taken from "List of OS/2 Codepages" by Alex Taylor: <http://altsan.org/os2/toolkits/uls/index.html#codepages>. See also "__convcp() of kLIBC": <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ { "CP1004", "CP1252" }, /*{ "CP1041", "CP943" },*/ /*{ "CP1088", "CP949" },*/ { "CP1089", "ISO-8859-6" }, /*{ "CP1114", "CP950" },*/ /*{ "CP1115", "GB2312" },*/ { "CP1208", "UTF-8" }, /*{ "CP1380", "GB2312" },*/ { "CP1381", "GB2312" }, { "CP1383", "GB2312" }, { "CP1386", "GBK" }, /*{ "CP301", "CP943" },*/ { "CP3372", "EUC-JP" }, { "CP4946", "CP850" }, /*{ "CP5048", "JIS_X0208-1990" },*/ /*{ "CP5049", "JIS_X0212-1990" },*/ /*{ "CP5067", "KS_C_5601-1987" },*/ { "CP813", "ISO-8859-7" }, { "CP819", "ISO-8859-1" }, { "CP878", "KOI8-R" }, /*{ "CP897", "CP943" },*/ { "CP912", "ISO-8859-2" }, { "CP913", "ISO-8859-3" }, { "CP914", "ISO-8859-4" }, { "CP915", "ISO-8859-5" }, { "CP916", "ISO-8859-8" }, { "CP920", "ISO-8859-9" }, { "CP921", "ISO-8859-13" }, { "CP923", "ISO-8859-15" }, /*{ "CP941", "CP943" },*/ /*{ "CP947", "CP950" },*/ /*{ "CP951", "CP949" },*/ /*{ "CP952", "JIS_X0208-1990" },*/ /*{ "CP953", "JIS_X0212-1990" },*/ { "CP954", "EUC-JP" }, { "CP964", "EUC-TW" }, { "CP970", "EUC-KR" }, /*{ "CP971", "KS_C_5601-1987" },*/ { "IBM-1004", "CP1252" }, /*{ "IBM-1006", "?" },*/ /*{ "IBM-1008", "?" },*/ /*{ "IBM-1041", "CP943" },*/ /*{ "IBM-1051", "?" },*/ /*{ "IBM-1088", "CP949" },*/ { "IBM-1089", "ISO-8859-6" }, /*{ "IBM-1098", "?" },*/ /*{ "IBM-1114", "CP950" },*/ /*{ "IBM-1115", "GB2312" },*/ /*{ "IBM-1116", "?" },*/ /*{ "IBM-1117", "?" },*/ /*{ "IBM-1118", "?" },*/ /*{ "IBM-1119", "?" },*/ { "IBM-1124", "CP1124" }, { "IBM-1125", "CP1125" }, { "IBM-1131", "CP1131" }, { "IBM-1208", "UTF-8" }, { "IBM-1250", "CP1250" }, { "IBM-1251", "CP1251" }, { "IBM-1252", "CP1252" }, { "IBM-1253", "CP1253" }, { "IBM-1254", "CP1254" }, { "IBM-1255", "CP1255" }, { "IBM-1256", "CP1256" }, { "IBM-1257", "CP1257" }, /*{ "IBM-1275", "?" },*/ /*{ "IBM-1276", "?" },*/ /*{ "IBM-1277", "?" },*/ /*{ "IBM-1280", "?" },*/ /*{ "IBM-1281", "?" },*/ /*{ "IBM-1282", "?" },*/ /*{ "IBM-1283", "?" },*/ /*{ "IBM-1380", "GB2312" },*/ { "IBM-1381", "GB2312" }, { "IBM-1383", "GB2312" }, { "IBM-1386", "GBK" }, /*{ "IBM-301", "CP943" },*/ { "IBM-3372", "EUC-JP" }, { "IBM-367", "ASCII" }, { "IBM-437", "CP437" }, { "IBM-4946", "CP850" }, /*{ "IBM-5048", "JIS_X0208-1990" },*/ /*{ "IBM-5049", "JIS_X0212-1990" },*/ /*{ "IBM-5067", "KS_C_5601-1987" },*/ { "IBM-813", "ISO-8859-7" }, { "IBM-819", "ISO-8859-1" }, { "IBM-850", "CP850" }, /*{ "IBM-851", "?" },*/ { "IBM-852", "CP852" }, { "IBM-855", "CP855" }, { "IBM-856", "CP856" }, { "IBM-857", "CP857" }, /*{ "IBM-859", "?" },*/ { "IBM-860", "CP860" }, { "IBM-861", "CP861" }, { "IBM-862", "CP862" }, { "IBM-863", "CP863" }, { "IBM-864", "CP864" }, { "IBM-865", "CP865" }, { "IBM-866", "CP866" }, /*{ "IBM-868", "?" },*/ { "IBM-869", "CP869" }, { "IBM-874", "CP874" }, { "IBM-878", "KOI8-R" }, /*{ "IBM-895", "?" },*/ /*{ "IBM-897", "CP943" },*/ /*{ "IBM-907", "?" },*/ /*{ "IBM-909", "?" },*/ { "IBM-912", "ISO-8859-2" }, { "IBM-913", "ISO-8859-3" }, { "IBM-914", "ISO-8859-4" }, { "IBM-915", "ISO-8859-5" }, { "IBM-916", "ISO-8859-8" }, { "IBM-920", "ISO-8859-9" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-923", "ISO-8859-15" }, { "IBM-932", "CP932" }, /*{ "IBM-941", "CP943" },*/ /*{ "IBM-942", "?" },*/ { "IBM-943", "CP943" }, /*{ "IBM-947", "CP950" },*/ { "IBM-949", "CP949" }, { "IBM-950", "CP950" }, /*{ "IBM-951", "CP949" },*/ /*{ "IBM-952", "JIS_X0208-1990" },*/ /*{ "IBM-953", "JIS_X0212-1990" },*/ { "IBM-954", "EUC-JP" }, /*{ "IBM-955", "?" },*/ { "IBM-964", "EUC-TW" }, { "IBM-970", "EUC-KR" }, /*{ "IBM-971", "KS_C_5601-1987" },*/ { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "IBM33722", "EUC-JP" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "JISX0201-1976", "JISX0201-1976" },*/ /*{ "JISX0208-1978", "?" },*/ /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ { "SJIS-1", "CP943" }, { "SJIS-2", "CP943" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW-1993", "EUC-TW" } # define alias_table_defined # endif # if defined VMS /* OpenVMS */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ { "DECHANYU", "DEC-HANYU" }, { "DECHANZI", "GB2312" }, { "DECKANJI", "DEC-KANJI" }, { "DECKOREAN", "EUC-KR" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "SDECKANJI", "EUC-JP" }, { "SJIS", "SHIFT_JIS" }, { "eucJP", "EUC-JP" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # ifndef alias_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; # endif #else /* On these platforms, we use a mapping from locale name to GNU canonical encoding name. */ struct table_entry { const char locale[17+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry locale_table[] = { # if defined __FreeBSD__ /* FreeBSD 4.2 */ { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, { "da_DK.DIS_8859-15", "ISO-8859-15" }, { "da_DK.ISO_8859-1", "ISO-8859-1" }, { "de_AT.DIS_8859-15", "ISO-8859-15" }, { "de_AT.ISO_8859-1", "ISO-8859-1" }, { "de_CH.DIS_8859-15", "ISO-8859-15" }, { "de_CH.ISO_8859-1", "ISO-8859-1" }, { "de_DE.DIS_8859-15", "ISO-8859-15" }, { "de_DE.ISO_8859-1", "ISO-8859-1" }, { "en_AU.DIS_8859-15", "ISO-8859-15" }, { "en_AU.ISO_8859-1", "ISO-8859-1" }, { "en_CA.DIS_8859-15", "ISO-8859-15" }, { "en_CA.ISO_8859-1", "ISO-8859-1" }, { "en_GB.DIS_8859-15", "ISO-8859-15" }, { "en_GB.ISO_8859-1", "ISO-8859-1" }, { "en_US.DIS_8859-15", "ISO-8859-15" }, { "en_US.ISO_8859-1", "ISO-8859-1" }, { "es_ES.DIS_8859-15", "ISO-8859-15" }, { "es_ES.ISO_8859-1", "ISO-8859-1" }, { "fi_FI.DIS_8859-15", "ISO-8859-15" }, { "fi_FI.ISO_8859-1", "ISO-8859-1" }, { "fr_BE.DIS_8859-15", "ISO-8859-15" }, { "fr_BE.ISO_8859-1", "ISO-8859-1" }, { "fr_CA.DIS_8859-15", "ISO-8859-15" }, { "fr_CA.ISO_8859-1", "ISO-8859-1" }, { "fr_CH.DIS_8859-15", "ISO-8859-15" }, { "fr_CH.ISO_8859-1", "ISO-8859-1" }, { "fr_FR.DIS_8859-15", "ISO-8859-15" }, { "fr_FR.ISO_8859-1", "ISO-8859-1" }, { "hr_HR.ISO_8859-2", "ISO-8859-2" }, { "hu_HU.ISO_8859-2", "ISO-8859-2" }, { "is_IS.DIS_8859-15", "ISO-8859-15" }, { "is_IS.ISO_8859-1", "ISO-8859-1" }, { "it_CH.DIS_8859-15", "ISO-8859-15" }, { "it_CH.ISO_8859-1", "ISO-8859-1" }, { "it_IT.DIS_8859-15", "ISO-8859-15" }, { "it_IT.ISO_8859-1", "ISO-8859-1" }, { "ja_JP.EUC", "EUC-JP" }, { "ja_JP.SJIS", "SHIFT_JIS" }, { "ja_JP.Shift_JIS", "SHIFT_JIS" }, { "ko_KR.EUC", "EUC-KR" }, { "la_LN.ASCII", "ASCII" }, { "la_LN.DIS_8859-15", "ISO-8859-15" }, { "la_LN.ISO_8859-1", "ISO-8859-1" }, { "la_LN.ISO_8859-2", "ISO-8859-2" }, { "la_LN.ISO_8859-4", "ISO-8859-4" }, { "lt_LN.ASCII", "ASCII" }, { "lt_LN.DIS_8859-15", "ISO-8859-15" }, { "lt_LN.ISO_8859-1", "ISO-8859-1" }, { "lt_LN.ISO_8859-2", "ISO-8859-2" }, { "lt_LT.ISO_8859-4", "ISO-8859-4" }, { "nl_BE.DIS_8859-15", "ISO-8859-15" }, { "nl_BE.ISO_8859-1", "ISO-8859-1" }, { "nl_NL.DIS_8859-15", "ISO-8859-15" }, { "nl_NL.ISO_8859-1", "ISO-8859-1" }, { "no_NO.DIS_8859-15", "ISO-8859-15" }, { "no_NO.ISO_8859-1", "ISO-8859-1" }, { "pl_PL.ISO_8859-2", "ISO-8859-2" }, { "pt_PT.DIS_8859-15", "ISO-8859-15" }, { "pt_PT.ISO_8859-1", "ISO-8859-1" }, { "ru_RU.CP866", "CP866" }, { "ru_RU.ISO_8859-5", "ISO-8859-5" }, { "ru_RU.KOI8-R", "KOI8-R" }, { "ru_SU.CP866", "CP866" }, { "ru_SU.ISO_8859-5", "ISO-8859-5" }, { "ru_SU.KOI8-R", "KOI8-R" }, { "sl_SI.ISO_8859-2", "ISO-8859-2" }, { "sv_SE.DIS_8859-15", "ISO-8859-15" }, { "sv_SE.ISO_8859-1", "ISO-8859-1" }, { "uk_UA.KOI8-U", "KOI8-U" }, { "zh_CN.EUC", "GB2312" }, { "zh_TW.BIG5", "BIG5" }, { "zh_TW.Big5", "BIG5" } # define locale_table_defined # endif # if defined __DJGPP__ /* DOS / DJGPP 2.03 */ /* The encodings given here may not all be correct. If you find that the encoding given for your language and country is not the one your DOS machine actually uses, just correct it in this file, and send a mail to Juan Manuel Guerrero <juan.guerrero@gmx.de> and <bug-gnulib@gnu.org>. */ { "C", "ASCII" }, { "ar", "CP864" }, { "ar_AE", "CP864" }, { "ar_DZ", "CP864" }, { "ar_EG", "CP864" }, { "ar_IQ", "CP864" }, { "ar_IR", "CP864" }, { "ar_JO", "CP864" }, { "ar_KW", "CP864" }, { "ar_MA", "CP864" }, { "ar_OM", "CP864" }, { "ar_QA", "CP864" }, { "ar_SA", "CP864" }, { "ar_SY", "CP864" }, { "be", "CP866" }, { "be_BE", "CP866" }, { "bg", "CP866" }, /* not CP855 ?? */ { "bg_BG", "CP866" }, /* not CP855 ?? */ { "ca", "CP850" }, { "ca_ES", "CP850" }, { "cs", "CP852" }, { "cs_CZ", "CP852" }, { "da", "CP865" }, /* not CP850 ?? */ { "da_DK", "CP865" }, /* not CP850 ?? */ { "de", "CP850" }, { "de_AT", "CP850" }, { "de_CH", "CP850" }, { "de_DE", "CP850" }, { "el", "CP869" }, { "el_GR", "CP869" }, { "en", "CP850" }, { "en_AU", "CP850" }, /* not CP437 ?? */ { "en_CA", "CP850" }, { "en_GB", "CP850" }, { "en_NZ", "CP437" }, { "en_US", "CP437" }, { "en_ZA", "CP850" }, /* not CP437 ?? */ { "eo", "CP850" }, { "eo_EO", "CP850" }, { "es", "CP850" }, { "es_AR", "CP850" }, { "es_BO", "CP850" }, { "es_CL", "CP850" }, { "es_CO", "CP850" }, { "es_CR", "CP850" }, { "es_CU", "CP850" }, { "es_DO", "CP850" }, { "es_EC", "CP850" }, { "es_ES", "CP850" }, { "es_GT", "CP850" }, { "es_HN", "CP850" }, { "es_MX", "CP850" }, { "es_NI", "CP850" }, { "es_PA", "CP850" }, { "es_PE", "CP850" }, { "es_PY", "CP850" }, { "es_SV", "CP850" }, { "es_UY", "CP850" }, { "es_VE", "CP850" }, { "et", "CP850" }, { "et_EE", "CP850" }, { "eu", "CP850" }, { "eu_ES", "CP850" }, { "fi", "CP850" }, { "fi_FI", "CP850" }, { "fr", "CP850" }, { "fr_BE", "CP850" }, { "fr_CA", "CP850" }, { "fr_CH", "CP850" }, { "fr_FR", "CP850" }, { "ga", "CP850" }, { "ga_IE", "CP850" }, { "gd", "CP850" }, { "gd_GB", "CP850" }, { "gl", "CP850" }, { "gl_ES", "CP850" }, { "he", "CP862" }, { "he_IL", "CP862" }, { "hr", "CP852" }, { "hr_HR", "CP852" }, { "hu", "CP852" }, { "hu_HU", "CP852" }, { "id", "CP850" }, /* not CP437 ?? */ { "id_ID", "CP850" }, /* not CP437 ?? */ { "is", "CP861" }, /* not CP850 ?? */ { "is_IS", "CP861" }, /* not CP850 ?? */ { "it", "CP850" }, { "it_CH", "CP850" }, { "it_IT", "CP850" }, { "ja", "CP932" }, { "ja_JP", "CP932" }, { "kr", "CP949" }, /* not CP934 ?? */ { "kr_KR", "CP949" }, /* not CP934 ?? */ { "lt", "CP775" }, { "lt_LT", "CP775" }, { "lv", "CP775" }, { "lv_LV", "CP775" }, { "mk", "CP866" }, /* not CP855 ?? */ { "mk_MK", "CP866" }, /* not CP855 ?? */ { "mt", "CP850" }, { "mt_MT", "CP850" }, { "nb", "CP865" }, /* not CP850 ?? */ { "nb_NO", "CP865" }, /* not CP850 ?? */ { "nl", "CP850" }, { "nl_BE", "CP850" }, { "nl_NL", "CP850" }, { "nn", "CP865" }, /* not CP850 ?? */ { "nn_NO", "CP865" }, /* not CP850 ?? */ { "no", "CP865" }, /* not CP850 ?? */ { "no_NO", "CP865" }, /* not CP850 ?? */ { "pl", "CP852" }, { "pl_PL", "CP852" }, { "pt", "CP850" }, { "pt_BR", "CP850" }, { "pt_PT", "CP850" }, { "ro", "CP852" }, { "ro_RO", "CP852" }, { "ru", "CP866" }, { "ru_RU", "CP866" }, { "sk", "CP852" }, { "sk_SK", "CP852" }, { "sl", "CP852" }, { "sl_SI", "CP852" }, { "sq", "CP852" }, { "sq_AL", "CP852" }, { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sv", "CP850" }, { "sv_SE", "CP850" }, { "th", "CP874" }, { "th_TH", "CP874" }, { "tr", "CP857" }, { "tr_TR", "CP857" }, { "uk", "CP1125" }, { "uk_UA", "CP1125" }, { "zh_CN", "GBK" }, { "zh_TW", "CP950" } /* not CP938 ?? */ # define locale_table_defined # endif # ifndef locale_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; /* This function must be multithread-safe. To achieve this without using thread-local storage, we use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char resultbuf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", GetACP ()); strcpy (resultbuf, buf); codeset = resultbuf; } } # endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; # elif defined WINDOWS_NATIVE char buf[2 + 10 + 1]; static char resultbuf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_CTYPE, NULL); char *pdot = strrchr (current_locale, '.'); if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) codeset = "UTF-8"; else { strcpy (resultbuf, buf); codeset = resultbuf; } # elif defined OS2 const char *locale; static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; codeset = NULL; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } /* For the POSIX locale, don't use the system's codepage. */ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) codeset = ""; } if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", cp[0]); strcpy (resultbuf, buf); codeset = resultbuf; } } # else # error "Add code for other platforms here." # endif /* Resolve alias. */ { # ifdef alias_table_defined /* On some platforms, UTF-8 locales are the most frequently used ones. Speed up the common case and slow down the less common cases by testing for this case first. */ # if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ if (strcmp (codeset, "UTF-8") == 0) goto done_table_lookup; else # endif { const struct table_entry * const table = alias_table; size_t const table_size = sizeof (alias_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].alias, codeset) < 0, for i >= hi, strcmp (table[i].alias, codeset) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].alias, codeset); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].alias, codeset) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; # endif } } #else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); if (locale == NULL) locale = ""; } } /* Map locale name to canonical encoding name. */ { # ifdef locale_table_defined const struct table_entry * const table = locale_table; size_t const table_size = sizeof (locale_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].locale, locale) < 0, for i >= hi, strcmp (table[i].locale, locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].locale, locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].locale, locale) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* The canonical name cannot be determined. */ /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ codeset = "ASCII"; # endif } } #endif #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } ����������������������������������������������gnulib-20210822~d383792/lib/localcharset.h����������������������������������������������������������0000664�0000000�0000000�00000014316�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU CHARSET 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 _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); /* About GNU canonical names for character encodings: Every canonical name must be supported by GNU libiconv. Support by GNU libc is also desirable. The name is case insensitive. Usually an upper case MIME charset name is preferred. The current list of these GNU canonical names is: name MIME? used by which systems (darwin = Mac OS X, windows = native Windows) ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-3 Y glibc solaris cygwin ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-6 Y glibc aix hpux solaris cygwin ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin ISO-8859-14 glibc cygwin ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin KOI8-T glibc CP437 dos CP775 dos CP850 aix osf dos CP852 dos CP855 dos CP856 aix CP857 dos CP861 dos CP862 dos CP864 dos CP865 dos CP866 freebsd netbsd openbsd darwin dos CP869 dos CP874 windows dos CP922 aix CP932 aix cygwin windows dos CP943 aix zos CP949 osf darwin windows dos CP950 windows dos CP1046 aix CP1124 aix CP1125 dos CP1129 aix CP1131 freebsd darwin CP1250 windows CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows CP1252 aix windows CP1253 windows CP1254 windows CP1255 glibc windows CP1256 windows CP1257 windows GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos EUC-TW glibc aix hpux irix osf solaris netbsd BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos BIG5-HKSCS glibc hpux solaris netbsd darwin GBK glibc aix osf solaris freebsd darwin cygwin windows dos GB18030 glibc hpux solaris freebsd netbsd darwin SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin JOHAB glibc solaris windows TIS-620 glibc aix hpux osf solaris cygwin zos VISCII Y glibc TCVN5712-1 glibc ARMSCII-8 glibc freebsd netbsd darwin GEORGIAN-PS glibc cygwin PT154 glibc netbsd cygwin HP-ROMAN8 hpux HP-ARABIC8 hpux HP-GREEK8 hpux HP-HEBREW8 hpux HP-TURKISH8 hpux HP-KANA8 hpux DEC-KANJI osf DEC-HANYU osf UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos Note: Names which are not marked as being a MIME name should not be used in Internet protocols for information interchange (mail, news, etc.). Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications must understand both names and treat them as equivalent. */ #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/locale.in.h�������������������������������������������������������������0000664�0000000�0000000�00000023703�14110572173�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX <locale.h>. Copyright (C) 2007-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ || defined _GL_ALREADY_INCLUDING_LOCALE_H /* Special invocation convention: - Inside mingw header files, - To handle Solaris header files (through Solaris 10) when combined with gettext's libintl.h. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _GL_ALREADY_INCLUDING_LOCALE_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #undef _GL_ALREADY_INCLUDING_LOCALE_H #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ #if @HAVE_XLOCALE_H@ # include <xlocale.h> #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. */ /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. On systems that don't define it, use the same value as GNU libintl. */ #if !defined LC_MESSAGES # define LC_MESSAGES 1729 #endif /* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and int_n_*. Instead of overriding 'struct lconv', merely define these member names as macros. This avoids trouble in C++ mode. */ #if defined _MSC_VER # define int_p_cs_precedes p_cs_precedes # define int_p_sign_posn p_sign_posn # define int_p_sep_by_space p_sep_by_space # define int_n_cs_precedes n_cs_precedes # define int_n_sign_posn n_sign_posn # define int_n_sep_by_space n_sep_by_space #endif /* Bionic libc's 'struct lconv' is just a dummy. */ #if @REPLACE_STRUCT_LCONV@ # define lconv rpl_lconv struct lconv { /* All 'char *' are actually 'const char *'. */ /* Members that depend on the LC_NUMERIC category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ /* Symbol used as decimal point. */ char *decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *grouping; /* Members that depend on the LC_MONETARY category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ /* Symbol used as decimal point. */ char *mon_decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *mon_thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *mon_grouping; /* Sign used to indicate a value >= 0. */ char *positive_sign; /* Sign used to indicate a value < 0. */ char *negative_sign; /* For formatting local currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *currency_symbol; /* Number of digits after the decimal point. */ char frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char p_cs_precedes; /* For values >= 0: Position of the sign. */ char p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char n_cs_precedes; /* For values < 0: Position of the sign. */ char n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char n_sep_by_space; /* For formatting international currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *int_curr_symbol; /* Number of digits after the decimal point. */ char int_frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_p_cs_precedes; /* For values >= 0: Position of the sign. */ char int_p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char int_p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_n_cs_precedes; /* For values < 0: Position of the sign. */ char int_n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char int_n_sep_by_space; }; #endif #if @GNULIB_LOCALECONV@ # if @REPLACE_LOCALECONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localeconv # define localeconv rpl_localeconv # endif _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); # else _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localeconv); # endif #elif @REPLACE_STRUCT_LCONV@ # undef localeconv # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv #elif defined GNULIB_POSIXCHECK # undef localeconv # if HAVE_RAW_DECL_LOCALECONV _GL_WARN_ON_USE (localeconv, "localeconv returns too few information on some platforms - " "use gnulib module localeconv for portability"); # endif #endif #if @GNULIB_SETLOCALE@ # if @REPLACE_SETLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setlocale # define setlocale rpl_setlocale # define GNULIB_defined_setlocale 1 # endif _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); # else _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setlocale); # endif #elif defined GNULIB_POSIXCHECK # undef setlocale # if HAVE_RAW_DECL_SETLOCALE _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " "use gnulib module setlocale for portability"); # endif #endif #if @GNULIB_SETLOCALE_NULL@ /* Included here for convenience. */ # include "setlocale_null.h" #endif #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@) # if @REPLACE_NEWLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef newlocale # define newlocale rpl_newlocale # define GNULIB_defined_newlocale 1 # endif _GL_FUNCDECL_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # else # if @HAVE_NEWLOCALE@ _GL_CXXALIAS_SYS (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # endif # endif # if @HAVE_NEWLOCALE@ _GL_CXXALIASWARN (newlocale); # endif # if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@ # ifndef HAVE_WORKING_NEWLOCALE # define HAVE_WORKING_NEWLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef newlocale # if HAVE_RAW_DECL_NEWLOCALE _GL_WARN_ON_USE (newlocale, "newlocale is not portable"); # endif #endif #if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@) # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # define GNULIB_defined_duplocale 1 # endif _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); # else # if @HAVE_DUPLOCALE@ _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); # endif # endif # if @HAVE_DUPLOCALE@ _GL_CXXALIASWARN (duplocale); # endif # if @HAVE_DUPLOCALE@ || @REPLACE_DUPLOCALE@ # ifndef HAVE_WORKING_DUPLOCALE # define HAVE_WORKING_DUPLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef duplocale # if HAVE_RAW_DECL_DUPLOCALE _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " "use gnulib module duplocale for portability"); # endif #endif #if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@) # if @REPLACE_FREELOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freelocale # define freelocale rpl_freelocale # define GNULIB_defined_freelocale 1 # endif _GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); # else # if @HAVE_FREELOCALE@ /* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is int. */ _GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); # endif # endif # if @HAVE_FREELOCALE@ _GL_CXXALIASWARN (freelocale); # endif #elif defined GNULIB_POSIXCHECK # undef freelocale # if HAVE_RAW_DECL_FREELOCALE _GL_WARN_ON_USE (freelocale, "freelocale is not portable"); # endif #endif #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ �������������������������������������������������������������gnulib-20210822~d383792/lib/localeconv.c������������������������������������������������������������0000664�0000000�0000000�00000006604�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query locale dependent information for formatting numbers. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <locale.h> #if HAVE_STRUCT_LCONV_DECIMAL_POINT /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* members. */ struct lconv * localeconv (void) { static struct lconv result; # undef lconv # undef localeconv struct lconv *sys_result = localeconv (); result.decimal_point = sys_result->decimal_point; result.thousands_sep = sys_result->thousands_sep; result.grouping = sys_result->grouping; result.mon_decimal_point = sys_result->mon_decimal_point; result.mon_thousands_sep = sys_result->mon_thousands_sep; result.mon_grouping = sys_result->mon_grouping; result.positive_sign = sys_result->positive_sign; result.negative_sign = sys_result->negative_sign; result.currency_symbol = sys_result->currency_symbol; result.frac_digits = sys_result->frac_digits; result.p_cs_precedes = sys_result->p_cs_precedes; result.p_sign_posn = sys_result->p_sign_posn; result.p_sep_by_space = sys_result->p_sep_by_space; result.n_cs_precedes = sys_result->n_cs_precedes; result.n_sign_posn = sys_result->n_sign_posn; result.n_sep_by_space = sys_result->n_sep_by_space; result.int_curr_symbol = sys_result->int_curr_symbol; result.int_frac_digits = sys_result->int_frac_digits; result.int_p_cs_precedes = sys_result->p_cs_precedes; result.int_p_sign_posn = sys_result->p_sign_posn; result.int_p_sep_by_space = sys_result->p_sep_by_space; result.int_n_cs_precedes = sys_result->n_cs_precedes; result.int_n_sign_posn = sys_result->n_sign_posn; result.int_n_sep_by_space = sys_result->n_sep_by_space; return &result; } #else /* Override for platforms where 'struct lconv' is a dummy. */ # include <limits.h> struct lconv * localeconv (void) { static /*const*/ struct lconv result = { /* decimal_point */ ".", /* thousands_sep */ "", /* grouping */ "", /* mon_decimal_point */ "", /* mon_thousands_sep */ "", /* mon_grouping */ "", /* positive_sign */ "", /* negative_sign */ "", /* currency_symbol */ "", /* frac_digits */ CHAR_MAX, /* p_cs_precedes */ CHAR_MAX, /* p_sign_posn */ CHAR_MAX, /* p_sep_by_space */ CHAR_MAX, /* n_cs_precedes */ CHAR_MAX, /* n_sign_posn */ CHAR_MAX, /* n_sep_by_space */ CHAR_MAX, /* int_curr_symbol */ "", /* int_frac_digits */ CHAR_MAX, /* int_p_cs_precedes */ CHAR_MAX, /* int_p_sign_posn */ CHAR_MAX, /* int_p_sep_by_space */ CHAR_MAX, /* int_n_cs_precedes */ CHAR_MAX, /* int_n_sign_posn */ CHAR_MAX, /* int_n_sep_by_space */ CHAR_MAX }; return &result; } #endif ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/localeinfo.c������������������������������������������������������������0000664�0000000�0000000�00000012061�14110572173�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* locale information Copyright 2016-2021 Free Software Foundation, Inc. This 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, 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, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert. */ #include <config.h> #include <localeinfo.h> #include <verify.h> #include <limits.h> #include <locale.h> #include <stdlib.h> #include <string.h> #include <wctype.h> /* The sbclen implementation relies on this. */ verify (MB_LEN_MAX <= SCHAR_MAX); /* Return true if the locale uses UTF-8. */ static bool is_using_utf8 (void) { wchar_t wc; mbstate_t mbs = {0}; return mbrtowc (&wc, "\xc4\x80", 2, &mbs) == 2 && wc == 0x100; } /* Return true if the locale is compatible enough with the C locale so that the locale is single-byte, bytes are in collating-sequence order, and there are no multi-character collating elements. */ static bool using_simple_locale (bool multibyte) { /* The native character set is known to be compatible with the C locale. The following test isn't perfect, but it's good enough in practice, as only ASCII and EBCDIC are in common use and this test correctly accepts ASCII and rejects EBCDIC. */ enum { native_c_charset = ('\b' == 8 && '\t' == 9 && '\n' == 10 && '\v' == 11 && '\f' == 12 && '\r' == 13 && ' ' == 32 && '!' == 33 && '"' == 34 && '#' == 35 && '%' == 37 && '&' == 38 && '\'' == 39 && '(' == 40 && ')' == 41 && '*' == 42 && '+' == 43 && ',' == 44 && '-' == 45 && '.' == 46 && '/' == 47 && '0' == 48 && '9' == 57 && ':' == 58 && ';' == 59 && '<' == 60 && '=' == 61 && '>' == 62 && '?' == 63 && 'A' == 65 && 'Z' == 90 && '[' == 91 && '\\' == 92 && ']' == 93 && '^' == 94 && '_' == 95 && 'a' == 97 && 'z' == 122 && '{' == 123 && '|' == 124 && '}' == 125 && '~' == 126) }; if (!native_c_charset || multibyte) return false; /* As a heuristic, use strcoll to compare native character order. If this agrees with byte order the locale should be simple. This heuristic should work for all known practical locales, although it would be invalid for artificially-constructed locales where the native order is the collating-sequence order but there are multi-character collating elements. */ for (int i = 0; i < UCHAR_MAX; i++) if (0 <= strcoll (((char []) {i, 0}), ((char []) {i + 1, 0}))) return false; return true; } /* Initialize *LOCALEINFO from the current locale. */ void init_localeinfo (struct localeinfo *localeinfo) { localeinfo->multibyte = MB_CUR_MAX > 1; localeinfo->simple = using_simple_locale (localeinfo->multibyte); localeinfo->using_utf8 = is_using_utf8 (); for (int i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; unsigned char uc = i; mbstate_t s = {0}; wchar_t wc; size_t len = mbrtowc (&wc, &c, 1, &s); localeinfo->sbclen[uc] = len <= 1 ? 1 : - (int) - len; localeinfo->sbctowc[uc] = len <= 1 ? wc : WEOF; } } /* The set of wchar_t values C such that there's a useful locale somewhere where C != towupper (C) && C != towlower (towupper (C)). For example, 0x00B5 (U+00B5 MICRO SIGN) is in this table, because towupper (0x00B5) == 0x039C (U+039C GREEK CAPITAL LETTER MU), and towlower (0x039C) == 0x03BC (U+03BC GREEK SMALL LETTER MU). */ static short const lonesome_lower[] = { 0x00B5, 0x0131, 0x017F, 0x01C5, 0x01C8, 0x01CB, 0x01F2, 0x0345, 0x03C2, 0x03D0, 0x03D1, 0x03D5, 0x03D6, 0x03F0, 0x03F1, /* U+03F2 GREEK LUNATE SIGMA SYMBOL lacks a specific uppercase counterpart in locales predating Unicode 4.0.0 (April 2003). */ 0x03F2, 0x03F5, 0x1E9B, 0x1FBE, }; /* Verify that the worst case fits. This is 1 for towupper, 1 for towlower, and 1 for each entry in LONESOME_LOWER. */ verify (1 + 1 + sizeof lonesome_lower / sizeof *lonesome_lower <= CASE_FOLDED_BUFSIZE); /* Find the characters equal to C after case-folding, other than C itself, and store them into FOLDED. Return the number of characters stored; this is zero if C is WEOF. */ int case_folded_counterparts (wint_t c, wchar_t folded[CASE_FOLDED_BUFSIZE]) { int i; int n = 0; wint_t uc = towupper (c); wint_t lc = towlower (uc); if (uc != c) folded[n++] = uc; if (lc != uc && lc != c && towupper (lc) == uc) folded[n++] = lc; for (i = 0; i < sizeof lonesome_lower / sizeof *lonesome_lower; i++) { wint_t li = lonesome_lower[i]; if (li != lc && li != uc && li != c && towupper (li) == uc) folded[n++] = li; } return n; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/localeinfo.h������������������������������������������������������������0000664�0000000�0000000�00000004127�14110572173�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* locale information Copyright 2016-2021 Free Software Foundation, Inc. This 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, 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, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert. */ #include <limits.h> #include <stdbool.h> #include <wchar.h> struct localeinfo { /* MB_CUR_MAX > 1. */ bool multibyte; /* The locale is simple, like the C locale. These locales can be processed more efficiently, as they are single-byte, their native character set is in collating-sequence order, and they do not have multi-character collating elements. */ bool simple; /* The locale uses UTF-8. */ bool using_utf8; /* An array indexed by byte values B that contains 1 if B is a single-byte character, -1 if B is an encoding error, and -2 if B is the leading byte of a multibyte character that contains more than one byte. */ signed char sbclen[UCHAR_MAX + 1]; /* An array indexed by byte values B that contains the corresponding wide character (if any) for B if sbclen[B] == 1. WEOF means the byte is not a valid single-byte character, i.e., sbclen[B] == -1 or -2. */ wint_t sbctowc[UCHAR_MAX + 1]; }; extern void init_localeinfo (struct localeinfo *); /* Maximum number of characters that can be the case-folded counterparts of a single character, not counting the character itself. This is a generous upper bound. */ enum { CASE_FOLDED_BUFSIZE = 32 }; extern int case_folded_counterparts (wint_t, wchar_t[CASE_FOLDED_BUFSIZE]); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/localename-table.c������������������������������������������������������0000664�0000000�0000000�00000002726�14110572173�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Table that maps a locale object to the names of the locale categories. Copyright (C) 2018-2021 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 Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> #if HAVE_WORKING_USELOCALE && HAVE_NAMELESS_LOCALES /* Specification. */ #include "localename-table.h" #include <stdint.h> /* A hash function for pointers. */ size_t _GL_ATTRIBUTE_CONST locale_hash_function (locale_t x) { uintptr_t p = (uintptr_t) x; size_t h = ((p % 4177) << 12) + ((p % 79) << 6) + (p % 61); return h; } struct locale_hash_node * locale_hash_table[LOCALE_HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; gl_rwlock_define_initialized(, locale_lock) #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ������������������������������������������gnulib-20210822~d383792/lib/localename-table.h������������������������������������������������������0000664�0000000�0000000�00000005476�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Table that maps a locale object to the names of the locale categories. Copyright (C) 2018-2021 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 Bruno Haible <bruno@clisp.org>, 2018. */ #if HAVE_WORKING_USELOCALE && HAVE_NAMELESS_LOCALES # include <stddef.h> # include <locale.h> # include "glthread/lock.h" struct locale_categories_names { /* Locale category -> name (allocated with indefinite extent). */ const char *category_name[6]; }; /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it or remove from it at the same time. This hash table has global scope, so that when an application uses both GNU libintl and gnulib, the application sees only one hash table. (When linking statically with libintl, the fact that localename-table.c is a separate compilation unit resolves the duplicate symbol conflict. When linking with libintl as a shared library, we rely on ELF and the symbol conflict resolution implemented in the ELF dynamic loader here.) Both the libintl overrides and the gnulib overrides of the functions newlocale, duplocale, freelocale see the same hash table (and the same lock). For this reason, the internal layout of the hash table and the hash function MUST NEVER CHANGE. If you need to change the internal layout or the hash function, introduce versioning by appending a version suffix to the symbols at the linker level. */ # define locale_hash_function libintl_locale_hash_function # define locale_hash_table libintl_locale_hash_table # define locale_lock libintl_locale_lock extern size_t _GL_ATTRIBUTE_CONST locale_hash_function (locale_t x); /* A node in a hash bucket collision list. */ struct locale_hash_node { struct locale_hash_node *next; locale_t locale; struct locale_categories_names names; }; # define LOCALE_HASH_TABLE_SIZE 101 extern struct locale_hash_node * locale_hash_table[LOCALE_HASH_TABLE_SIZE]; /* This lock protects the locale_hash_table against multiple simultaneous accesses (except that multiple simultaneous read accesses are allowed). */ gl_rwlock_define(extern, locale_lock) #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/localename.c������������������������������������������������������������0000664�0000000�0000000�00000304760�14110572173�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. Copyright (C) 1995-2021 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 Ulrich Drepper <drepper@gnu.org>, 1995. */ /* Native Windows code written by Tor Lillqvist <tml@iki.fi>. */ /* Mac OS X code written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localename.h" #include <limits.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <locale.h> #include <string.h> #include "flexmember.h" #include "setlocale_null.h" #include "thread-optim.h" #if HAVE_GOOD_USELOCALE /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ # if defined __APPLE__ && defined __MACH__ # include <xlocale.h> # endif # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || (defined __linux__ && HAVE_LANGINFO_H) || defined __CYGWIN__ # include <langinfo.h> # endif # include "glthread/lock.h" # if defined __sun # if HAVE_GETLOCALENAME_L /* Solaris >= 12. */ extern char * getlocalename_l(int, locale_t); # elif HAVE_SOLARIS114_LOCALES # include <sys/localedef.h> # endif # endif # if HAVE_NAMELESS_LOCALES # include "localename-table.h" # endif #endif #if HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFString.h> # include <CoreFoundation/CFPreferences.h> #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include "glthread/lock.h" #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <winnls.h> /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_ROMANSH 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x6d LANG_BASHKIR 0x6e LANG_LUXEMBOURGISH 0x6f LANG_GREENLANDIC 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU 0x7a LANG_MAPUDUNGUN 0x7c LANG_MOHAWK 0x7e LANG_BRETON 0x82 LANG_OCCITAN 0x83 LANG_CORSICAN 0x84 LANG_ALSATIAN 0x85 LANG_YAKUT 0x86 LANG_KICHE 0x87 LANG_KINYARWANDA 0x88 LANG_WOLOF 0x8c LANG_DARI 0x91 LANG_SCOTTISH_GAELIC */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_ALSATIAN # define LANG_ALSATIAN 0x84 # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASHKIR # define LANG_BASHKIR 0x6d # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BRETON # define LANG_BRETON 0x7e # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_CORSICAN # define LANG_CORSICAN 0x83 # endif # ifndef LANG_DARI # define LANG_DARI 0x8c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GREENLANDIC # define LANG_GREENLANDIC 0x6f # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KICHE # define LANG_KICHE 0x86 # endif # ifndef LANG_KINYARWANDA # define LANG_KINYARWANDA 0x87 # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_LUXEMBOURGISH # define LANG_LUXEMBOURGISH 0x6e # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MAORI # define LANG_MAORI 0x81 # endif # ifndef LANG_MAPUDUNGUN # define LANG_MAPUDUNGUN 0x7a # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MOHAWK # define LANG_MOHAWK 0x7c # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_OCCITAN # define LANG_OCCITAN 0x82 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_QUECHUA # define LANG_QUECHUA 0x6b # endif # ifndef LANG_ROMANSH # define LANG_ROMANSH 0x17 # endif # ifndef LANG_SAMI # define LANG_SAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SCOTTISH_GAELIC # define LANG_SCOTTISH_GAELIC 0x91 # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SOTHO # define LANG_SOTHO 0x6c # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UIGHUR # define LANG_UIGHUR 0x80 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_WOLOF # define LANG_WOLOF 0x88 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YAKUT # define LANG_YAKUT 0x85 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA # define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_ALBANIAN_ALBANIA # define SUBLANG_ALBANIAN_ALBANIA 0x01 # endif # ifndef SUBLANG_ALSATIAN_FRANCE # define SUBLANG_ALSATIAN_FRANCE 0x01 # endif # ifndef SUBLANG_AMHARIC_ETHIOPIA # define SUBLANG_AMHARIC_ETHIOPIA 0x01 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_ARMENIAN_ARMENIA # define SUBLANG_ARMENIAN_ARMENIA 0x01 # endif # ifndef SUBLANG_ASSAMESE_INDIA # define SUBLANG_ASSAMESE_INDIA 0x01 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BASHKIR_RUSSIA # define SUBLANG_BASHKIR_RUSSIA 0x01 # endif # ifndef SUBLANG_BASQUE_BASQUE # define SUBLANG_BASQUE_BASQUE 0x01 # endif # ifndef SUBLANG_BELARUSIAN_BELARUS # define SUBLANG_BELARUSIAN_BELARUS 0x01 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x01 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x02 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 # endif # ifndef SUBLANG_BRETON_FRANCE # define SUBLANG_BRETON_FRANCE 0x01 # endif # ifndef SUBLANG_BULGARIAN_BULGARIA # define SUBLANG_BULGARIAN_BULGARIA 0x01 # endif # ifndef SUBLANG_CAMBODIAN_CAMBODIA # define SUBLANG_CAMBODIAN_CAMBODIA 0x01 # endif # ifndef SUBLANG_CATALAN_SPAIN # define SUBLANG_CATALAN_SPAIN 0x01 # endif # ifndef SUBLANG_CORSICAN_FRANCE # define SUBLANG_CORSICAN_FRANCE 0x01 # endif # ifndef SUBLANG_CROATIAN_CROATIA # define SUBLANG_CROATIAN_CROATIA 0x01 # endif # ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_CZECH_CZECH_REPUBLIC # define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 # endif # ifndef SUBLANG_DANISH_DENMARK # define SUBLANG_DANISH_DENMARK 0x01 # endif # ifndef SUBLANG_DARI_AFGHANISTAN # define SUBLANG_DARI_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_DIVEHI_MALDIVES # define SUBLANG_DIVEHI_MALDIVES 0x01 # endif # ifndef SUBLANG_DUTCH_SURINAM # define SUBLANG_DUTCH_SURINAM 0x03 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_ESTONIAN_ESTONIA # define SUBLANG_ESTONIAN_ESTONIA 0x01 # endif # ifndef SUBLANG_FAEROESE_FAROE_ISLANDS # define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 # endif # ifndef SUBLANG_FARSI_IRAN # define SUBLANG_FARSI_IRAN 0x01 # endif # ifndef SUBLANG_FINNISH_FINLAND # define SUBLANG_FINNISH_FINLAND 0x01 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_FRISIAN_NETHERLANDS # define SUBLANG_FRISIAN_NETHERLANDS 0x01 # endif # ifndef SUBLANG_GALICIAN_SPAIN # define SUBLANG_GALICIAN_SPAIN 0x01 # endif # ifndef SUBLANG_GEORGIAN_GEORGIA # define SUBLANG_GEORGIAN_GEORGIA 0x01 # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_GREEK_GREECE # define SUBLANG_GREEK_GREECE 0x01 # endif # ifndef SUBLANG_GREENLANDIC_GREENLAND # define SUBLANG_GREENLANDIC_GREENLAND 0x01 # endif # ifndef SUBLANG_GUJARATI_INDIA # define SUBLANG_GUJARATI_INDIA 0x01 # endif # ifndef SUBLANG_HAUSA_NIGERIA_LATIN # define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 # endif # ifndef SUBLANG_HEBREW_ISRAEL # define SUBLANG_HEBREW_ISRAEL 0x01 # endif # ifndef SUBLANG_HINDI_INDIA # define SUBLANG_HINDI_INDIA 0x01 # endif # ifndef SUBLANG_HUNGARIAN_HUNGARY # define SUBLANG_HUNGARIAN_HUNGARY 0x01 # endif # ifndef SUBLANG_ICELANDIC_ICELAND # define SUBLANG_ICELANDIC_ICELAND 0x01 # endif # ifndef SUBLANG_IGBO_NIGERIA # define SUBLANG_IGBO_NIGERIA 0x01 # endif # ifndef SUBLANG_INDONESIAN_INDONESIA # define SUBLANG_INDONESIAN_INDONESIA 0x01 # endif # ifndef SUBLANG_INUKTITUT_CANADA # define SUBLANG_INUKTITUT_CANADA 0x01 # endif # undef SUBLANG_INUKTITUT_CANADA_LATIN # define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 # undef SUBLANG_IRISH_IRELAND # define SUBLANG_IRISH_IRELAND 0x02 # ifndef SUBLANG_JAPANESE_JAPAN # define SUBLANG_JAPANESE_JAPAN 0x01 # endif # ifndef SUBLANG_KANNADA_INDIA # define SUBLANG_KANNADA_INDIA 0x01 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_KAZAK_KAZAKHSTAN # define SUBLANG_KAZAK_KAZAKHSTAN 0x01 # endif # ifndef SUBLANG_KICHE_GUATEMALA # define SUBLANG_KICHE_GUATEMALA 0x01 # endif # ifndef SUBLANG_KINYARWANDA_RWANDA # define SUBLANG_KINYARWANDA_RWANDA 0x01 # endif # ifndef SUBLANG_KONKANI_INDIA # define SUBLANG_KONKANI_INDIA 0x01 # endif # ifndef SUBLANG_KYRGYZ_KYRGYZSTAN # define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 # endif # ifndef SUBLANG_LAO_LAOS # define SUBLANG_LAO_LAOS 0x01 # endif # ifndef SUBLANG_LATVIAN_LATVIA # define SUBLANG_LATVIAN_LATVIA 0x01 # endif # ifndef SUBLANG_LITHUANIAN_LITHUANIA # define SUBLANG_LITHUANIAN_LITHUANIA 0x01 # endif # undef SUBLANG_LOWER_SORBIAN_GERMANY # define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 # ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG # define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 # endif # ifndef SUBLANG_MACEDONIAN_MACEDONIA # define SUBLANG_MACEDONIAN_MACEDONIA 0x01 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_MALAYALAM_INDIA # define SUBLANG_MALAYALAM_INDIA 0x01 # endif # ifndef SUBLANG_MALTESE_MALTA # define SUBLANG_MALTESE_MALTA 0x01 # endif # ifndef SUBLANG_MAORI_NEW_ZEALAND # define SUBLANG_MAORI_NEW_ZEALAND 0x01 # endif # ifndef SUBLANG_MAPUDUNGUN_CHILE # define SUBLANG_MAPUDUNGUN_CHILE 0x01 # endif # ifndef SUBLANG_MARATHI_INDIA # define SUBLANG_MARATHI_INDIA 0x01 # endif # ifndef SUBLANG_MOHAWK_CANADA # define SUBLANG_MOHAWK_CANADA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA # define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_PRC # define SUBLANG_MONGOLIAN_PRC 0x02 # endif # ifndef SUBLANG_NEPALI_NEPAL # define SUBLANG_NEPALI_NEPAL 0x01 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_OCCITAN_FRANCE # define SUBLANG_OCCITAN_FRANCE 0x01 # endif # ifndef SUBLANG_ORIYA_INDIA # define SUBLANG_ORIYA_INDIA 0x01 # endif # ifndef SUBLANG_PASHTO_AFGHANISTAN # define SUBLANG_PASHTO_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_POLISH_POLAND # define SUBLANG_POLISH_POLAND 0x01 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x01 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x02 # endif # ifndef SUBLANG_QUECHUA_BOLIVIA # define SUBLANG_QUECHUA_BOLIVIA 0x01 # endif # ifndef SUBLANG_QUECHUA_ECUADOR # define SUBLANG_QUECHUA_ECUADOR 0x02 # endif # ifndef SUBLANG_QUECHUA_PERU # define SUBLANG_QUECHUA_PERU 0x03 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x01 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x02 # endif # ifndef SUBLANG_ROMANSH_SWITZERLAND # define SUBLANG_ROMANSH_SWITZERLAND 0x01 # endif # ifndef SUBLANG_RUSSIAN_RUSSIA # define SUBLANG_RUSSIAN_RUSSIA 0x01 # endif # ifndef SUBLANG_RUSSIAN_MOLDAVIA # define SUBLANG_RUSSIAN_MOLDAVIA 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_NORWAY # define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 # endif # ifndef SUBLANG_SAMI_NORTHERN_SWEDEN # define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_FINLAND # define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 # endif # ifndef SUBLANG_SAMI_LULE_NORWAY # define SUBLANG_SAMI_LULE_NORWAY 0x04 # endif # ifndef SUBLANG_SAMI_LULE_SWEDEN # define SUBLANG_SAMI_LULE_SWEDEN 0x05 # endif # ifndef SUBLANG_SAMI_SOUTHERN_NORWAY # define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 # endif # ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN # define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 # endif # undef SUBLANG_SAMI_SKOLT_FINLAND # define SUBLANG_SAMI_SKOLT_FINLAND 0x08 # undef SUBLANG_SAMI_INARI_FINLAND # define SUBLANG_SAMI_INARI_FINLAND 0x09 # ifndef SUBLANG_SANSKRIT_INDIA # define SUBLANG_SANSKRIT_INDIA 0x01 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_INDIA # define SUBLANG_SINDHI_INDIA 0x01 # endif # undef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x02 # ifndef SUBLANG_SINDHI_AFGHANISTAN # define SUBLANG_SINDHI_AFGHANISTAN 0x02 # endif # ifndef SUBLANG_SINHALESE_SRI_LANKA # define SUBLANG_SINHALESE_SRI_LANKA 0x01 # endif # ifndef SUBLANG_SLOVAK_SLOVAKIA # define SUBLANG_SLOVAK_SLOVAKIA 0x01 # endif # ifndef SUBLANG_SLOVENIAN_SLOVENIA # define SUBLANG_SLOVENIAN_SLOVENIA 0x01 # endif # ifndef SUBLANG_SOTHO_SOUTH_AFRICA # define SUBLANG_SOTHO_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SPANISH_US # define SUBLANG_SPANISH_US 0x15 # endif # ifndef SUBLANG_SWAHILI_KENYA # define SUBLANG_SWAHILI_KENYA 0x01 # endif # ifndef SUBLANG_SWEDISH_SWEDEN # define SUBLANG_SWEDISH_SWEDEN 0x01 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_SYRIAC_SYRIA # define SUBLANG_SYRIAC_SYRIA 0x01 # endif # ifndef SUBLANG_TAGALOG_PHILIPPINES # define SUBLANG_TAGALOG_PHILIPPINES 0x01 # endif # ifndef SUBLANG_TAJIK_TAJIKISTAN # define SUBLANG_TAJIK_TAJIKISTAN 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN # define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 # endif # ifndef SUBLANG_TAMIL_INDIA # define SUBLANG_TAMIL_INDIA 0x01 # endif # ifndef SUBLANG_TATAR_RUSSIA # define SUBLANG_TATAR_RUSSIA 0x01 # endif # ifndef SUBLANG_TELUGU_INDIA # define SUBLANG_TELUGU_INDIA 0x01 # endif # ifndef SUBLANG_THAI_THAILAND # define SUBLANG_THAI_THAILAND 0x01 # endif # ifndef SUBLANG_TIBETAN_PRC # define SUBLANG_TIBETAN_PRC 0x01 # endif # undef SUBLANG_TIBETAN_BHUTAN # define SUBLANG_TIBETAN_BHUTAN 0x02 # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x01 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x02 # endif # ifndef SUBLANG_TSWANA_SOUTH_AFRICA # define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_TURKISH_TURKEY # define SUBLANG_TURKISH_TURKEY 0x01 # endif # ifndef SUBLANG_TURKMEN_TURKMENISTAN # define SUBLANG_TURKMEN_TURKMENISTAN 0x01 # endif # ifndef SUBLANG_UIGHUR_PRC # define SUBLANG_UIGHUR_PRC 0x01 # endif # ifndef SUBLANG_UKRAINIAN_UKRAINE # define SUBLANG_UKRAINIAN_UKRAINE 0x01 # endif # ifndef SUBLANG_UPPER_SORBIAN_GERMANY # define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif # ifndef SUBLANG_VIETNAMESE_VIETNAM # define SUBLANG_VIETNAMESE_VIETNAM 0x01 # endif # ifndef SUBLANG_WELSH_UNITED_KINGDOM # define SUBLANG_WELSH_UNITED_KINGDOM 0x01 # endif # ifndef SUBLANG_WOLOF_SENEGAL # define SUBLANG_WOLOF_SENEGAL 0x01 # endif # ifndef SUBLANG_XHOSA_SOUTH_AFRICA # define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_YAKUT_RUSSIA # define SUBLANG_YAKUT_RUSSIA 0x01 # endif # ifndef SUBLANG_YI_PRC # define SUBLANG_YI_PRC 0x01 # endif # ifndef SUBLANG_YORUBA_NIGERIA # define SUBLANG_YORUBA_NIGERIA 0x01 # endif # ifndef SUBLANG_ZULU_SOUTH_AFRICA # define SUBLANG_ZULU_SOUTH_AFRICA 0x01 # endif /* GetLocaleInfoA operations. */ # ifndef LOCALE_SNAME # define LOCALE_SNAME 0x5c # endif # ifndef LOCALE_NAME_MAX_LENGTH # define LOCALE_NAME_MAX_LENGTH 85 # endif /* Don't assume that UNICODE is not defined. */ # undef GetLocaleInfo # define GetLocaleInfo GetLocaleInfoA # undef EnumSystemLocales # define EnumSystemLocales EnumSystemLocalesA #endif /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale #if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ /* Canonicalize a Mac OS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Mac OS X locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* This conversion is based on a posting by Deborah GoldSmith <goldsmit@apple.com> on 2005-03-08, https://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and ISO 3166) names. Prior to Mac OS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the Mac OS X 10.3.8 function CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ typedef struct { const char legacy[21+1]; const char unixy[5+1]; } legacy_entry; static const legacy_entry legacy_table[] = { { "Afrikaans", "af" }, { "Albanian", "sq" }, { "Amharic", "am" }, { "Arabic", "ar" }, { "Armenian", "hy" }, { "Assamese", "as" }, { "Aymara", "ay" }, { "Azerbaijani", "az" }, { "Basque", "eu" }, { "Belarusian", "be" }, { "Belorussian", "be" }, { "Bengali", "bn" }, { "Brazilian Portugese", "pt_BR" }, { "Brazilian Portuguese", "pt_BR" }, { "Breton", "br" }, { "Bulgarian", "bg" }, { "Burmese", "my" }, { "Byelorussian", "be" }, { "Catalan", "ca" }, { "Chewa", "ny" }, { "Chichewa", "ny" }, { "Chinese", "zh" }, { "Chinese, Simplified", "zh_CN" }, { "Chinese, Traditional", "zh_TW" }, { "Chinese, Tradtional", "zh_TW" }, { "Croatian", "hr" }, { "Czech", "cs" }, { "Danish", "da" }, { "Dutch", "nl" }, { "Dzongkha", "dz" }, { "English", "en" }, { "Esperanto", "eo" }, { "Estonian", "et" }, { "Faroese", "fo" }, { "Farsi", "fa" }, { "Finnish", "fi" }, { "Flemish", "nl_BE" }, { "French", "fr" }, { "Galician", "gl" }, { "Gallegan", "gl" }, { "Georgian", "ka" }, { "German", "de" }, { "Greek", "el" }, { "Greenlandic", "kl" }, { "Guarani", "gn" }, { "Gujarati", "gu" }, { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ { "Hebrew", "he" }, { "Hindi", "hi" }, { "Hungarian", "hu" }, { "Icelandic", "is" }, { "Indonesian", "id" }, { "Inuktitut", "iu" }, { "Irish", "ga" }, { "Italian", "it" }, { "Japanese", "ja" }, { "Javanese", "jv" }, { "Kalaallisut", "kl" }, { "Kannada", "kn" }, { "Kashmiri", "ks" }, { "Kazakh", "kk" }, { "Khmer", "km" }, { "Kinyarwanda", "rw" }, { "Kirghiz", "ky" }, { "Korean", "ko" }, { "Kurdish", "ku" }, { "Latin", "la" }, { "Latvian", "lv" }, { "Lithuanian", "lt" }, { "Macedonian", "mk" }, { "Malagasy", "mg" }, { "Malay", "ms" }, { "Malayalam", "ml" }, { "Maltese", "mt" }, { "Manx", "gv" }, { "Marathi", "mr" }, { "Moldavian", "mo" }, { "Mongolian", "mn" }, { "Nepali", "ne" }, { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ { "Nyanja", "ny" }, { "Nynorsk", "nn" }, { "Oriya", "or" }, { "Oromo", "om" }, { "Panjabi", "pa" }, { "Pashto", "ps" }, { "Persian", "fa" }, { "Polish", "pl" }, { "Portuguese", "pt" }, { "Portuguese, Brazilian", "pt_BR" }, { "Punjabi", "pa" }, { "Pushto", "ps" }, { "Quechua", "qu" }, { "Romanian", "ro" }, { "Ruanda", "rw" }, { "Rundi", "rn" }, { "Russian", "ru" }, { "Sami", "se_NO" }, /* Not just "se". */ { "Sanskrit", "sa" }, { "Scottish", "gd" }, { "Serbian", "sr" }, { "Simplified Chinese", "zh_CN" }, { "Sindhi", "sd" }, { "Sinhalese", "si" }, { "Slovak", "sk" }, { "Slovenian", "sl" }, { "Somali", "so" }, { "Spanish", "es" }, { "Sundanese", "su" }, { "Swahili", "sw" }, { "Swedish", "sv" }, { "Tagalog", "tl" }, { "Tajik", "tg" }, { "Tajiki", "tg" }, { "Tamil", "ta" }, { "Tatar", "tt" }, { "Telugu", "te" }, { "Thai", "th" }, { "Tibetan", "bo" }, { "Tigrinya", "ti" }, { "Tongan", "to" }, { "Traditional Chinese", "zh_TW" }, { "Turkish", "tr" }, { "Turkmen", "tk" }, { "Uighur", "ug" }, { "Ukrainian", "uk" }, { "Urdu", "ur" }, { "Uzbek", "uz" }, { "Vietnamese", "vi" }, { "Welsh", "cy" }, { "Yiddish", "yi" } }; /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) to Unix (ISO 639 and ISO 3166) names. */ typedef struct { const char langtag[7+1]; const char unixy[12+1]; } langtag_entry; static const langtag_entry langtag_table[] = { /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* Mac OS X has "bs-Cyrl", "bs-Latn". The default script for bs on Unix is Latin. */ { "bs-Latn", "bs" }, /* Mac OS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* Mac OS X has "kk-Cyrl". The default script for kk on Unix is Cyrillic. */ { "kk-Cyrl", "kk" }, /* Mac OS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* Mac OS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* Mac OS X has "pa-Arab", "pa-Guru". Country codes are used to distinguish these on Unix. */ { "pa-Arab", "pa_PK" }, { "pa-Guru", "pa_IN" }, /* Mac OS X has "shi-Latn", "shi-Tfng". Does not yet exist on Unix. */ /* Mac OS X has "sr-Cyrl", "sr-Latn". The default script for sr on Unix is Cyrillic. */ { "sr-Cyrl", "sr" }, /* Mac OS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* Mac OS X has "tk-Cyrl". The default script for tk on Unix is Cyrillic. */ { "tk-Cyrl", "tk" }, /* Mac OS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* Mac OS X has "uz-Arab", "uz-Cyrl", "uz-Latn". The default script for uz on Unix is Latin. */ { "uz-Latn", "uz" }, /* Mac OS X has "vai-Latn", "vai-Vaii". Does not yet exist on Unix. */ /* Mac OS X has "yue-Hans", "yue-Hant". The default script for yue on Unix is Simplified Han. */ { "yue-Hans", "yue" }, /* Mac OS X has "zh-Hans", "zh-Hant". Country codes are used to distinguish these on Unix. */ { "zh-Hans", "zh_CN" }, { "zh-Hant", "zh_TW" } }; /* Convert script names (ISO 15924) to Unix conventions. See https://www.unicode.org/iso15924/iso15924-codes.html */ typedef struct { const char script[4+1]; const char unixy[9+1]; } script_entry; static const script_entry script_table[] = { { "Arab", "arabic" }, { "Cyrl", "cyrillic" }, { "Latn", "latin" }, { "Mong", "mongolian" } }; /* Step 1: Convert using legacy_table. */ if (name[0] >= 'A' && name[0] <= 'Z') { unsigned int i1, i2; i1 = 0; i2 = sizeof (legacy_table) / sizeof (legacy_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in legacy_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const legacy_entry *p = &legacy_table[i]; if (strcmp (name, p->legacy) < 0) i2 = i; else i1 = i; } if (strcmp (name, legacy_table[i1].legacy) == 0) { strcpy (name, legacy_table[i1].unixy); return; } } /* Step 2: Convert using langtag_table and script_table. */ if (strlen (name) == 7 && name[2] == '-') { unsigned int i1, i2; i1 = 0; i2 = sizeof (langtag_table) / sizeof (langtag_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in langtag_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const langtag_entry *p = &langtag_table[i]; if (strcmp (name, p->langtag) < 0) i2 = i; else i1 = i; } if (strcmp (name, langtag_table[i1].langtag) == 0) { strcpy (name, langtag_table[i1].unixy); return; } i1 = 0; i2 = sizeof (script_table) / sizeof (script_entry); while (i2 - i1 > 1) { /* At this point we know that if (name + 3) occurs in script_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const script_entry *p = &script_table[i]; if (strcmp (name + 3, p->script) < 0) i2 = i; else i1 = i; } if (strcmp (name + 3, script_table[i1].script) == 0) { name[2] = '@'; strcpy (name + 3, script_table[i1].unixy); return; } } /* Step 3: Convert new-style dash to Unix underscore. */ { char *p; for (p = name; *p != '\0'; p++) if (*p == '-') *p = '_'; } } #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ /* Canonicalize a Windows native locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Windows locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and "zh-Hant". */ char *p; for (p = name; *p != '\0'; p++) if (*p == '-') { *p = '_'; p++; for (; *p != '\0'; p++) { if (*p >= 'a' && *p <= 'z') *p += 'A' - 'a'; if (*p == '-') { *p = '\0'; return; } } return; } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LANGID (LANGID langid) { /* Activate the new code only when the GETTEXT_MUI environment variable is set, for the time being, since the new code is not well tested. */ if (getenv ("GETTEXT_MUI") != NULL) { static char namebuf[256]; /* Query the system's notion of locale name. On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. But we don't need to support systems that are so old. */ if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, namebuf, sizeof (namebuf) - 1)) { /* Convert it to a Unix locale name. */ gl_locale_name_canonicalize (namebuf); return namebuf; } } /* Internet Explorer has an LCID to RFC3066 name mapping stored in HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that since IE's i18n subsystem is known to be inconsistent with the native Windows base (e.g. they have different character conversion facilities that produce different results). */ /* Use our own table. */ { int primary, sub; /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also https://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see https://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: switch (sub) { case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA"; } return "af"; case LANG_ALBANIAN: switch (sub) { case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL"; } return "sq"; case LANG_ALSATIAN: switch (sub) { case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR"; } return "gsw"; case LANG_AMHARIC: switch (sub) { case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET"; } return "am"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: switch (sub) { case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM"; } return "hy"; case LANG_ASSAMESE: switch (sub) { case SUBLANG_ASSAMESE_INDIA: return "as_IN"; } return "as"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case 0x1e: return "az@latin"; case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case 0x1d: return "az@cyrillic"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASHKIR: switch (sub) { case SUBLANG_BASHKIR_RUSSIA: return "ba_RU"; } return "ba"; case LANG_BASQUE: switch (sub) { case SUBLANG_BASQUE_BASQUE: return "eu_ES"; } return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: switch (sub) { case SUBLANG_BELARUSIAN_BELARUS: return "be_BY"; } return "be"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BRETON: switch (sub) { case SUBLANG_BRETON_FRANCE: return "br_FR"; } return "br"; case LANG_BULGARIAN: switch (sub) { case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG"; } return "bg"; case LANG_BURMESE: switch (sub) { case SUBLANG_DEFAULT: return "my_MM"; } return "my"; case LANG_CAMBODIAN: switch (sub) { case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH"; } return "km"; case LANG_CATALAN: switch (sub) { case SUBLANG_CATALAN_SPAIN: return "ca_ES"; } return "ca"; case LANG_CHEROKEE: switch (sub) { case SUBLANG_DEFAULT: return "chr_US"; } return "chr"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */ case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */ } return "zh"; case LANG_CORSICAN: switch (sub) { case SUBLANG_CORSICAN_FRANCE: return "co_FR"; } return "co"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { /* Croatian */ case 0x00: return "hr"; case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; /* Serbian */ case 0x1f: return "sr"; case 0x1c: return "sr"; /* latin */ case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */ case 0x09: return "sr_RS"; /* latin */ case 0x0b: return "sr_ME"; /* latin */ case 0x06: return "sr_BA"; /* latin */ case 0x1b: return "sr@cyrillic"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; case 0x0a: return "sr_RS@cyrillic"; case 0x0c: return "sr_ME@cyrillic"; case 0x07: return "sr_BA@cyrillic"; /* Bosnian */ case 0x1e: return "bs"; case 0x1a: return "bs"; /* latin */ case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */ case 0x19: return "bs@cyrillic"; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; } return "hr"; case LANG_CZECH: switch (sub) { case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ"; } return "cs"; case LANG_DANISH: switch (sub) { case SUBLANG_DANISH_DENMARK: return "da_DK"; } return "da"; case LANG_DARI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DARI_AFGHANISTAN: return "prs_AF"; } return "prs"; case LANG_DIVEHI: switch (sub) { case SUBLANG_DIVEHI_MALDIVES: return "dv_MV"; } return "dv"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; case SUBLANG_DUTCH_SURINAM: return "nl_SR"; } return "nl"; case LANG_EDO: switch (sub) { case SUBLANG_DEFAULT: return "bin_NG"; } return "bin"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: switch (sub) { case SUBLANG_ESTONIAN_ESTONIA: return "et_EE"; } return "et"; case LANG_FAEROESE: switch (sub) { case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO"; } return "fo"; case LANG_FARSI: switch (sub) { case SUBLANG_FARSI_IRAN: return "fa_IR"; } return "fa"; case LANG_FINNISH: switch (sub) { case SUBLANG_FINNISH_FINLAND: return "fi_FI"; } return "fi"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: switch (sub) { case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL"; } return "fy"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ switch (sub) { case SUBLANG_DEFAULT: return "ff_NG"; } return "ff"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ /* old, superseded by LANG_SCOTTISH_GAELIC */ return "gd_GB"; case SUBLANG_IRISH_IRELAND: return "ga_IE"; } return "ga"; case LANG_GALICIAN: switch (sub) { case SUBLANG_GALICIAN_SPAIN: return "gl_ES"; } return "gl"; case LANG_GEORGIAN: switch (sub) { case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE"; } return "ka"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: switch (sub) { case SUBLANG_GREEK_GREECE: return "el_GR"; } return "el"; case LANG_GREENLANDIC: switch (sub) { case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL"; } return "kl"; case LANG_GUARANI: switch (sub) { case SUBLANG_DEFAULT: return "gn_PY"; } return "gn"; case LANG_GUJARATI: switch (sub) { case SUBLANG_GUJARATI_INDIA: return "gu_IN"; } return "gu"; case LANG_HAUSA: switch (sub) { case 0x1f: return "ha"; case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG"; } return "ha"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ switch (sub) { case SUBLANG_DEFAULT: return "cpe_US"; } return "cpe"; case LANG_HEBREW: switch (sub) { case SUBLANG_HEBREW_ISRAEL: return "he_IL"; } return "he"; case LANG_HINDI: switch (sub) { case SUBLANG_HINDI_INDIA: return "hi_IN"; } return "hi"; case LANG_HUNGARIAN: switch (sub) { case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU"; } return "hu"; case LANG_IBIBIO: switch (sub) { case SUBLANG_DEFAULT: return "nic_NG"; } return "nic"; case LANG_ICELANDIC: switch (sub) { case SUBLANG_ICELANDIC_ICELAND: return "is_IS"; } return "is"; case LANG_IGBO: switch (sub) { case SUBLANG_IGBO_NIGERIA: return "ig_NG"; } return "ig"; case LANG_INDONESIAN: switch (sub) { case SUBLANG_INDONESIAN_INDONESIA: return "id_ID"; } return "id"; case LANG_INUKTITUT: switch (sub) { case 0x1e: return "iu"; /* syllabic */ case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */ case 0x1f: return "iu@latin"; case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin"; } return "iu"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: switch (sub) { case SUBLANG_JAPANESE_JAPAN: return "ja_JP"; } return "ja"; case LANG_KANNADA: switch (sub) { case SUBLANG_KANNADA_INDIA: return "kn_IN"; } return "kn"; case LANG_KANURI: switch (sub) { case SUBLANG_DEFAULT: return "kr_NG"; } return "kr"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: switch (sub) { case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ"; } return "kk"; case LANG_KICHE: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KICHE_GUATEMALA: return "qut_GT"; } return "qut"; case LANG_KINYARWANDA: switch (sub) { case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW"; } return "rw"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KONKANI_INDIA: return "kok_IN"; } return "kok"; case LANG_KOREAN: switch (sub) { case SUBLANG_DEFAULT: return "ko_KR"; } return "ko"; case LANG_KYRGYZ: switch (sub) { case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG"; } return "ky"; case LANG_LAO: switch (sub) { case SUBLANG_LAO_LAOS: return "lo_LA"; } return "lo"; case LANG_LATIN: switch (sub) { case SUBLANG_DEFAULT: return "la_VA"; } return "la"; case LANG_LATVIAN: switch (sub) { case SUBLANG_LATVIAN_LATVIA: return "lv_LV"; } return "lv"; case LANG_LITHUANIAN: switch (sub) { case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT"; } return "lt"; case LANG_LUXEMBOURGISH: switch (sub) { case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU"; } return "lb"; case LANG_MACEDONIAN: switch (sub) { case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK"; } return "mk"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: switch (sub) { case SUBLANG_MALAYALAM_INDIA: return "ml_IN"; } return "ml"; case LANG_MALTESE: switch (sub) { case SUBLANG_MALTESE_MALTA: return "mt_MT"; } return "mt"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DEFAULT: return "mni_IN"; } return "mni"; case LANG_MAORI: switch (sub) { case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ"; } return "mi"; case LANG_MAPUDUNGUN: switch (sub) { case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL"; } return "arn"; case LANG_MARATHI: switch (sub) { case SUBLANG_MARATHI_INDIA: return "mr_IN"; } return "mr"; case LANG_MOHAWK: switch (sub) { case SUBLANG_MOHAWK_CANADA: return "moh_CA"; } return "moh"; case LANG_MONGOLIAN: switch (sub) { case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN"; case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN"; } return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_NEPALI_NEPAL: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case 0x1f: return "nb"; case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; case 0x1e: return "nn"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_OCCITAN: switch (sub) { case SUBLANG_OCCITAN_FRANCE: return "oc_FR"; } return "oc"; case LANG_ORIYA: switch (sub) { case SUBLANG_ORIYA_INDIA: return "or_IN"; } return "or"; case LANG_OROMO: switch (sub) { case SUBLANG_DEFAULT: return "om_ET"; } return "om"; case LANG_PAPIAMENTU: switch (sub) { case SUBLANG_DEFAULT: return "pap_AN"; } return "pap"; case LANG_PASHTO: switch (sub) { case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF"; } return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: switch (sub) { case SUBLANG_POLISH_POLAND: return "pl_PL"; } return "pl"; case LANG_PORTUGUESE: switch (sub) { /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; case SUBLANG_PORTUGUESE: return "pt_PT"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_QUECHUA: /* Note: Microsoft uses the non-ISO language code "quz". */ switch (sub) { case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; case SUBLANG_QUECHUA_PERU: return "qu_PE"; } return "qu"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_ROMANSH: switch (sub) { case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH"; } return "rm"; case LANG_RUSSIAN: switch (sub) { case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; } return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAMI: switch (sub) { /* Northern Sami */ case 0x00: return "se"; case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO"; case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE"; case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI"; /* Lule Sami */ case 0x1f: return "smj"; case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO"; case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE"; /* Southern Sami */ case 0x1e: return "sma"; case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO"; case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE"; /* Skolt Sami */ case 0x1d: return "sms"; case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI"; /* Inari Sami */ case 0x1c: return "smn"; case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI"; } return "se"; /* or "smi"? */ case LANG_SANSKRIT: switch (sub) { case SUBLANG_SANSKRIT_INDIA: return "sa_IN"; } return "sa"; case LANG_SCOTTISH_GAELIC: switch (sub) { case SUBLANG_DEFAULT: return "gd_GB"; } return "gd"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_INDIA: return "sd_IN"; case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ } return "sd"; case LANG_SINHALESE: switch (sub) { case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK"; } return "si"; case LANG_SLOVAK: switch (sub) { case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK"; } return "sk"; case LANG_SLOVENIAN: switch (sub) { case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI"; } return "sl"; case LANG_SOMALI: switch (sub) { case SUBLANG_DEFAULT: return "so_SO"; } return "so"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { /* Upper Sorbian */ case 0x00: return "hsb"; case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE"; /* Lower Sorbian */ case 0x1f: return "dsb"; case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE"; } return "wen"; case LANG_SOTHO: /* <https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings> calls it "Sesotho sa Leboa"; according to <https://www.ethnologue.com/show_language.asp?code=nso> <https://www.ethnologue.com/show_language.asp?code=sot> it's the same as Northern Sotho. */ switch (sub) { case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA"; } return "nso"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; case SUBLANG_SPANISH_US: return "es_US"; } return "es"; case LANG_SUTU: switch (sub) { case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ } return "bnt"; case LANG_SWAHILI: switch (sub) { case SUBLANG_SWAHILI_KENYA: return "sw_KE"; } return "sw"; case LANG_SWEDISH: switch (sub) { case SUBLANG_SWEDISH_SWEDEN: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: switch (sub) { case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language. */ } return "syr"; case LANG_TAGALOG: switch (sub) { case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */ } return "tl"; /* or "fil"? */ case LANG_TAJIK: switch (sub) { case 0x1f: return "tg"; case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ"; } return "tg"; case LANG_TAMAZIGHT: /* Note: Microsoft uses the non-ISO language code "tmz". */ switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case 0x1f: return "ber@latin"; case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; } return "ber"; case LANG_TAMIL: switch (sub) { case SUBLANG_TAMIL_INDIA: return "ta_IN"; } return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: switch (sub) { case SUBLANG_TATAR_RUSSIA: return "tt_RU"; } return "tt"; case LANG_TELUGU: switch (sub) { case SUBLANG_TELUGU_INDIA: return "te_IN"; } return "te"; case LANG_THAI: switch (sub) { case SUBLANG_THAI_THAILAND: return "th_TH"; } return "th"; case LANG_TIBETAN: switch (sub) { case SUBLANG_TIBETAN_PRC: /* Most Tibetans would not like "bo_CN". But Tibet does not yet have a country code of its own. */ return "bo"; case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; } return "bo"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: switch (sub) { case SUBLANG_DEFAULT: return "ts_ZA"; } return "ts"; case LANG_TSWANA: /* Spoken in South Africa, Botswana. */ switch (sub) { case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA"; } return "tn"; case LANG_TURKISH: switch (sub) { case SUBLANG_TURKISH_TURKEY: return "tr_TR"; } return "tr"; case LANG_TURKMEN: switch (sub) { case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM"; } return "tk"; case LANG_UIGHUR: switch (sub) { case SUBLANG_UIGHUR_PRC: return "ug_CN"; } return "ug"; case LANG_UKRAINIAN: switch (sub) { case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA"; } return "uk"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case 0x1f: return "uz"; case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case 0x1e: return "uz@cyrillic"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: switch (sub) { case SUBLANG_DEFAULT: return "ve_ZA"; } return "ve"; case LANG_VIETNAMESE: switch (sub) { case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN"; } return "vi"; case LANG_WELSH: switch (sub) { case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB"; } return "cy"; case LANG_WOLOF: switch (sub) { case SUBLANG_WOLOF_SENEGAL: return "wo_SN"; } return "wo"; case LANG_XHOSA: switch (sub) { case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA"; } return "xh"; case LANG_YAKUT: switch (sub) { case SUBLANG_YAKUT_RUSSIA: return "sah_RU"; } return "sah"; case LANG_YI: switch (sub) { case SUBLANG_YI_PRC: return "ii_CN"; } return "ii"; case LANG_YIDDISH: switch (sub) { case SUBLANG_DEFAULT: return "yi_IL"; } return "yi"; case LANG_YORUBA: switch (sub) { case SUBLANG_YORUBA_NIGERIA: return "yo_NG"; } return "yo"; case LANG_ZULU: switch (sub) { case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA"; } return "zu"; default: return "C"; } } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LCID (LCID lcid) { LANGID langid; /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); return gl_locale_name_from_win32_LANGID (langid); } # ifdef WINDOWS_NATIVE /* Two variables to interface between get_lcid and the EnumLocales callback function below. */ static LCID found_lcid; static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1]; /* Callback function for EnumLocales. */ static BOOL CALLBACK enum_locales_fn (LPSTR locale_num_str) { char *endp; char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1]; LCID try_lcid = strtoul (locale_num_str, &endp, 16); if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE, locval, LOCALE_NAME_MAX_LENGTH)) { strcat (locval, "_"); if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY, locval + strlen (locval), LOCALE_NAME_MAX_LENGTH)) { size_t locval_len = strlen (locval); if (strncmp (locval, lname, locval_len) == 0 && (lname[locval_len] == '.' || lname[locval_len] == '\0')) { found_lcid = try_lcid; return FALSE; } } } return TRUE; } /* This lock protects the get_lcid against multiple simultaneous calls. */ gl_lock_define_initialized(static, get_lcid_lock) /* Return the Locale ID (LCID) number given the locale's name, a string, in LOCALE_NAME. This works by enumerating all the locales supported by the system, until we find one whose name matches LOCALE_NAME. */ static LCID get_lcid (const char *locale_name) { /* A simple cache. */ static LCID last_lcid; static char last_locale[1000]; /* Lock while looking for an LCID, to protect access to static variables: last_lcid, last_locale, found_lcid, and lname. */ gl_lock_lock (get_lcid_lock); if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0) { gl_lock_unlock (get_lcid_lock); return last_lcid; } strncpy (lname, locale_name, sizeof (lname) - 1); lname[sizeof (lname) - 1] = '\0'; found_lcid = 0; EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED); if (found_lcid > 0) { last_lcid = found_lcid; strcpy (last_locale, locale_name); } gl_lock_unlock (get_lcid_lock); return found_lcid; } # endif #endif #if HAVE_GOOD_USELOCALE /* glibc, Mac OS X, FreeBSD >= 9.1, Cygwin >= 2.6, Solaris 11 OpenIndiana, or Solaris >= 11.4 */ /* Simple hash set of strings. We don't want to drag in lots of hash table code here. */ # define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t _GL_ATTRIBUTE_PURE string_hash (const void *x) { const char *s = (const char *) x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it at the same time. */ /* A node in a hash bucket collision list. */ struct struniq_hash_node { struct struniq_hash_node * volatile next; char contents[FLEXIBLE_ARRAY_MEMBER]; }; # define STRUNIQ_HASH_TABLE_SIZE 257 static struct struniq_hash_node * volatile struniq_hash_table[STRUNIQ_HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; /* This lock protects the struniq_hash_table against multiple simultaneous insertions. */ gl_lock_define_initialized(static, struniq_lock) /* Store a copy of the given string in a string pool with indefinite extent. Return a pointer to this copy. */ static const char * struniq (const char *string) { size_t hashcode = string_hash (string); size_t slot = hashcode % STRUNIQ_HASH_TABLE_SIZE; size_t size; struct struniq_hash_node *new_node; struct struniq_hash_node *p; for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) return p->contents; size = strlen (string) + 1; new_node = (struct struniq_hash_node *) malloc (FLEXSIZEOF (struct struniq_hash_node, contents, size)); if (new_node == NULL) /* Out of memory. Return a statically allocated string. */ return "C"; memcpy (new_node->contents, string, size); { bool mt = gl_multithreaded (); /* Lock while inserting new_node. */ if (mt) gl_lock_lock (struniq_lock); /* Check whether another thread already added the string while we were waiting on the lock. */ for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) { free (new_node); new_node = p; goto done; } /* Really insert new_node into the hash table. Fill new_node entirely first, because other threads may be iterating over the linked list. */ new_node->next = struniq_hash_table[slot]; struniq_hash_table[slot] = new_node; done: /* Unlock after new_node is inserted. */ if (mt) gl_lock_unlock (struniq_lock); } return new_node->contents; } #endif #if LOCALENAME_ENHANCE_LOCALE_FUNCS /* The 'locale_t' object does not contain the names of the locale categories. We have to associate them with the object through a hash table. The hash table is defined in localename-table.[hc]. */ /* Returns the name of a given locale category in a given locale_t object, allocated as a string with indefinite extent. */ static const char * get_locale_t_name (int category, locale_t locale) { if (locale == LC_GLOBAL_LOCALE) { /* Query the global locale. */ const char *name = setlocale_null (category); if (name != NULL) return struniq (name); else /* Should normally not happen. */ return ""; } else { /* Look up the names in the hash table. */ size_t hashcode = locale_hash_function (locale); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; /* If the locale was not found in the table, return "". This can happen if the application uses the original newlocale()/duplocale() functions instead of the overridden ones. */ const char *name = ""; struct locale_hash_node *p; /* Lock while looking up the hash node. */ gl_rwlock_rdlock (locale_lock); for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == locale) { name = p->names.category_name[category]; break; } gl_rwlock_unlock (locale_lock); return name; } } # if !(defined newlocale && defined duplocale && defined freelocale) # error "newlocale, duplocale, freelocale not being replaced as expected!" # endif /* newlocale() override. */ locale_t newlocale (int category_mask, const char *name, locale_t base) #undef newlocale { struct locale_categories_names names; struct locale_hash_node *node; locale_t result; /* Make sure name has indefinite extent. */ if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK | LC_MONETARY_MASK | LC_MESSAGES_MASK) & category_mask) != 0) name = struniq (name); /* Determine the category names of the result. */ if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK | LC_MONETARY_MASK | LC_MESSAGES_MASK) & ~category_mask) == 0) { /* Use name, ignore base. */ int category; name = struniq (name); for (category = 0; category < 6; category++) names.category_name[category] = name; } else { /* Use base, possibly also name. */ if (base == NULL) { int category; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : "C"); } } else if (base == LC_GLOBAL_LOCALE) { int category; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : get_locale_t_name (category, LC_GLOBAL_LOCALE)); } } else { /* Look up the names of base in the hash table. Like multiple calls of get_locale_t_name, but locking only once. */ struct locale_hash_node *p; int category; /* Lock while looking up the hash node. */ gl_rwlock_rdlock (locale_lock); for (p = locale_hash_table[locale_hash_function (base) % LOCALE_HASH_TABLE_SIZE]; p != NULL; p = p->next) if (p->locale == base) break; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : (p != NULL ? p->names.category_name[category] : "")); } gl_rwlock_unlock (locale_lock); } } node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); if (node == NULL) /* errno is set to ENOMEM. */ return NULL; result = newlocale (category_mask, name, base); if (result == NULL) { free (node); return NULL; } /* Fill the hash node. */ node->locale = result; node->names = names; /* Insert it in the hash table. */ { size_t hashcode = locale_hash_function (result); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *p; /* Lock while inserting the new node. */ gl_rwlock_wrlock (locale_lock); for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == result) { /* This can happen if the application uses the original freelocale() function instead of the overridden one. */ p->names = node->names; break; } if (p == NULL) { node->next = locale_hash_table[slot]; locale_hash_table[slot] = node; } gl_rwlock_unlock (locale_lock); if (p != NULL) free (node); } return result; } /* duplocale() override. */ locale_t duplocale (locale_t locale) #undef duplocale { struct locale_hash_node *node; locale_t result; if (locale == NULL) /* Invalid argument. */ abort (); node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); if (node == NULL) /* errno is set to ENOMEM. */ return NULL; result = duplocale (locale); if (result == NULL) { free (node); return NULL; } /* Fill the hash node. */ node->locale = result; if (locale == LC_GLOBAL_LOCALE) { int category; for (category = 0; category < 6; category++) node->names.category_name[category] = get_locale_t_name (category, LC_GLOBAL_LOCALE); /* Lock before inserting the new node. */ gl_rwlock_wrlock (locale_lock); } else { struct locale_hash_node *p; /* Lock once, for the lookup and the insertion. */ gl_rwlock_wrlock (locale_lock); for (p = locale_hash_table[locale_hash_function (locale) % LOCALE_HASH_TABLE_SIZE]; p != NULL; p = p->next) if (p->locale == locale) break; if (p != NULL) node->names = p->names; else { /* This can happen if the application uses the original newlocale()/duplocale() functions instead of the overridden ones. */ int category; for (category = 0; category < 6; category++) node->names.category_name[category] = ""; } } /* Insert it in the hash table. */ { size_t hashcode = locale_hash_function (result); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *p; for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == result) { /* This can happen if the application uses the original freelocale() function instead of the overridden one. */ p->names = node->names; break; } if (p == NULL) { node->next = locale_hash_table[slot]; locale_hash_table[slot] = node; } gl_rwlock_unlock (locale_lock); if (p != NULL) free (node); } return result; } /* freelocale() override. */ void freelocale (locale_t locale) #undef freelocale { if (locale == NULL || locale == LC_GLOBAL_LOCALE) /* Invalid argument. */ abort (); { size_t hashcode = locale_hash_function (locale); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *found; struct locale_hash_node **p; found = NULL; /* Lock while removing the hash node. */ gl_rwlock_wrlock (locale_lock); for (p = &locale_hash_table[slot]; *p != NULL; p = &(*p)->next) if ((*p)->locale == locale) { found = *p; *p = (*p)->next; break; } gl_rwlock_unlock (locale_lock); free (found); } freelocale (locale); } #endif #if defined IN_LIBINTL || HAVE_GOOD_USELOCALE /* Like gl_locale_name_thread, except that the result is not in storage of indefinite extent. */ # if !defined IN_LIBINTL static # endif const char * gl_locale_name_thread_unsafe (int category, _GL_UNUSED const char *categoryname) { # if HAVE_GOOD_USELOCALE { locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { # if __GLIBC__ >= 2 && !defined __UCLIBC__ /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in glibc < 2.12. See <https://sourceware.org/bugzilla/show_bug.cgi?id=10968>. */ const char *name = nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); if (name[0] == '\0') /* Fallback code for glibc < 2.4, which did not implement nl_langinfo (_NL_LOCALE_NAME (category)). */ name = thread_locale->__names[category]; return name; # elif defined __linux__ && HAVE_LANGINFO_H && defined NL_LOCALE_NAME /* musl libc */ return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); # elif (defined __FreeBSD__ || defined __DragonFly__) || (defined __APPLE__ && defined __MACH__) /* FreeBSD, Mac OS X */ int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: /* We shouldn't get here. */ return ""; } return querylocale (mask, thread_locale); # elif defined __sun # if HAVE_GETLOCALENAME_L /* Solaris >= 12. */ return getlocalename_l (category, thread_locale); # elif HAVE_SOLARIS114_LOCALES /* Solaris >= 11.4. */ void *lcp = (*thread_locale)->core.data->lcp; if (lcp != NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: return ((const char * const *) lcp)[category]; default: /* We shouldn't get here. */ return ""; } # elif HAVE_NAMELESS_LOCALES return get_locale_t_name (category, thread_locale); # else /* Solaris 11 OpenIndiana. For the internal structure of locale objects, see https://github.com/OpenIndiana/illumos-gate/blob/master/usr/src/lib/libc/port/locale/localeimpl.h */ switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: return ((const char * const *) thread_locale)[category]; default: /* We shouldn't get here. */ return ""; } # endif # elif defined _AIX && HAVE_NAMELESS_LOCALES return get_locale_t_name (category, thread_locale); # elif defined __CYGWIN__ /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether. Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside an opaque struct. */ # ifdef NL_LOCALE_NAME return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); # else /* FIXME: Remove when we can assume new-enough Cygwin. */ struct __locale_t { char categories[7][32]; }; return ((struct __locale_t *) thread_locale)->categories[category]; # endif # elif defined __ANDROID__ return MB_CUR_MAX == 4 ? "C.UTF-8" : "C"; # endif } } # endif return NULL; } #endif const char * gl_locale_name_thread (int category, _GL_UNUSED const char *categoryname) { #if HAVE_GOOD_USELOCALE const char *name = gl_locale_name_thread_unsafe (category, categoryname); if (name != NULL) return struniq (name); #endif /* On WINDOWS_NATIVE, don't use GetThreadLocale() here, because when SetThreadLocale has not been called - which is a very frequent case - the value of GetThreadLocale() ignores past calls to 'setlocale'. */ return NULL; } /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__) # define HAVE_LOCALE_NULL #endif const char * gl_locale_name_posix (int category, _GL_UNUSED const char *categoryname) { #if defined WINDOWS_NATIVE if (LC_MIN <= category && category <= LC_MAX) { const char *locname = /* setlocale_null (category) is identical to setlocale (category, NULL) on this platform. */ setlocale (category, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ LCID lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif { const char *locname; /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL locname = setlocale_null (category); #else /* On other systems we ignore what setlocale reports and instead look at the environment variables directly. This is necessary 1. on systems which have a facility for customizing the default locale (Mac OS X, native Windows, Cygwin) and where the system's setlocale() function ignores this default locale (Mac OS X, Cygwin), in two cases: a. when the user missed to use the setlocale() override from libintl (for example by not including <libintl.h>), b. when setlocale supports only the "C" locale, such as on Cygwin 1.5.x. In this case even the override from libintl cannot help. 2. on all systems where setlocale supports only the "C" locale. */ /* Strictly speaking, it is a POSIX violation to look at the environment variables regardless whether setlocale has been called or not. POSIX says: "For C-language programs, the POSIX locale shall be the default locale when the setlocale() function is not called." But we assume that all programs that use internationalized APIs call setlocale (LC_ALL, ""). */ locname = gl_locale_name_environ (category, categoryname); #endif /* Convert the locale name from the format returned by setlocale() or found in the environment variables to the XPG syntax. */ #if defined WINDOWS_NATIVE if (locname != NULL) { /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ LCID lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif return locname; } } const char * gl_locale_name_environ (_GL_UNUSED int category, const char *categoryname) { const char *retval; /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') { #if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer. Ignore invalid LANG value set by the Terminal application. */ if (strcmp (retval, "UTF-8") != 0) #endif #if defined __CYGWIN__ /* Cygwin. Ignore dummy LANG value set by ~/.profile. */ if (strcmp (retval, "C.UTF-8") != 0) #endif return retval; } return NULL; } const char * gl_locale_name_default (void) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the POSIX locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. POSIX:2001 does not require such a facility. The systems with such a facility are Mac OS X and Windows: They provide a GUI that allows the user to choose a locale. - On Mac OS X, by default, none of LC_* or LANG are set. Starting with Mac OS X 10.4 or 10.5, LANG is set for processes launched by the 'Terminal' application (but sometimes to an incorrect value "UTF-8"). When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On native Windows, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the locale chosen by the user. - On Cygwin 1.5.x, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default ~/.profile is executed. When no environment variable is set, setlocale (LC_ALL, "") uses the "C.UTF-8" locale, which operates in the same way as the "C" locale. */ #if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__) /* The system does not have a way of setting the locale, other than the POSIX specified environment variables. We use C as default locale. */ return "C"; #else /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ # if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ /* Don't use the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, because in macOS 10.13.4 it has the following behaviour: When two or more languages are specified in the "System Preferences > Language & Region > Preferred Languages" panel, it returns en_CC where CC is the territory (even when English is not among the preferred languages!). What we want instead is what CFLocaleCopyCurrent returned in earlier macOS releases and what CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the first among the preferred languages and CC is the territory. */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) { CFStringRef name = (CFStringRef)value; if (CFStringGetCString (name, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } } if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ { LCID lcid; /* Use native Windows API locale ID. */ lcid = GetThreadLocale (); return gl_locale_name_from_win32_LCID (lcid); } # endif #endif } /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * gl_locale_name (int category, const char *categoryname) { const char *retval; retval = gl_locale_name_thread (category, categoryname); if (retval != NULL) return retval; retval = gl_locale_name_posix (category, categoryname); if (retval != NULL) return retval; return gl_locale_name_default (); } ����������������gnulib-20210822~d383792/lib/localename.h������������������������������������������������������������0000664�0000000�0000000�00000010766�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. Copyright (C) 2007, 2009-2021 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/>. */ #ifndef _GL_LOCALENAME_H #define _GL_LOCALENAME_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's name. It considers both the POSIX notion of locale name (see functions gl_locale_name_thread and gl_locale_name_posix) and the system notion of locale name (see function gl_locale_name_default). CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name (int category, const char *categoryname); /* Determine the current per-thread locale's name, as specified by uselocale() calls. CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified for the current thread. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_thread (int category, const char *categoryname); /* Determine the thread-independent current locale's name, as specified by setlocale() calls or by environment variables. CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified to setlocale() or by environment variables. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_posix (int category, const char *categoryname); /* Determine the default locale's name, as specified by environment variables. Return the locale category's name, or NULL if no locale has been specified by environment variables. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_environ (int category, const char *categoryname); /* Determine the default locale's name. This is the current locale's name, if not specified by uselocale() calls, by setlocale() calls, or by environment variables. This locale name is usually determined by systems settings that the user can manipulate through a GUI. Quoting POSIX:2001: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the C locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. IEEE Std 1003.1-2001 does not require such a facility." The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_default (void) #if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined _WIN32 || defined __CYGWIN__) _GL_ATTRIBUTE_CONST #endif ; #ifdef __cplusplus } #endif #endif /* _GL_LOCALENAME_H */ ����������gnulib-20210822~d383792/lib/localtime.c�������������������������������������������������������������0000664�0000000�0000000�00000004755�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in localtime. Copyright (C) 2017-2021 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/>. */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> #undef localtime struct tm * rpl_localtime (const time_t *tp) { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); #endif return localtime (tp); } �������������������gnulib-20210822~d383792/lib/log.c�������������������������������������������������������������������0000664�0000000�0000000�00000002166�14110572173�0015777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Logarithm. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> double log (double x) #undef log { if (x <= 0.0) { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0) /* Return -Infinity. */ return -1.0 / 0.0; /* Work around the NetBSD 5.1, Solaris 11.0 bug. */ else /* x < 0.0 */ /* Return NaN. */ return 0.0 / 0.0; } return log (x); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log10.c�����������������������������������������������������������������0000664�0000000�0000000�00000002217�14110572173�0016135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 10 logarithmic function. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> double log10 (double x) #undef log10 { if (x <= 0.0) { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0) /* Return -Infinity. */ return -1.0 / 0.0; /* Work around the NetBSD 5.1, Solaris 11.0 bug. */ else /* x < 0.0 */ /* Return NaN. */ return 0.0 / 0.0; } return log10 (x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log10f.c����������������������������������������������������������������0000664�0000000�0000000�00000002312�14110572173�0016277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 10 logarithmic function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float log10f (float x) #undef log10f { #if HAVE_LOG10F if (x <= 0.0f) { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0f) /* Return -Infinity. */ return -1.0f / 0.0f; /* Work around the NetBSD 5.1 bug. */ else /* x < 0.0 */ /* Return NaN. */ return 0.0f / 0.0f; } return log10f (x); #else return (float) log10 ((double) x); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log10l.c����������������������������������������������������������������0000664�0000000�0000000�00000002761�14110572173�0016315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 10 logarithmic function. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double log10l (long double x) { return log10 (x); } #elif 0 /* was: HAVE_LOG10L */ # include <float.h> long double log10l (long double x) # undef log10l { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0L) /* Return -Infinity. */ return -1.0L / 0.0L; { long double y = log10l (x); # ifdef __sgi /* Normalize the +Infinity value. */ if (y > LDBL_MAX) y = 1.0L / 0.0L; # endif return y; } } #else /* 1 / log(10) */ static const long double inv_log10 = 0.43429448190325182765112891891660508229439700580366656611445378316586464920887L; long double log10l (long double x) { return logl (x) * inv_log10; } #endif ���������������gnulib-20210822~d383792/lib/log1p.c�����������������������������������������������������������������0000664�0000000�0000000�00000056526�14110572173�0016251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Natural logarithm of 1 plus argument. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> double log1p (double x) { if (isnand (x)) return x; if (x <= -1.0) { if (x == -1.0) /* Return -Infinity. */ return - HUGE_VAL; else { /* Return NaN. */ #if defined _MSC_VER || (defined __sgi && !defined __GNUC__) static double zero; return zero / zero; #else return 0.0 / 0.0; #endif } } if (x < -0.5 || x > 1.0) return log (1.0 + x); /* Here -0.5 <= x <= 1.0. */ if (x == 0.0) /* Return a zero with the same sign as x. */ return x; /* Decompose x into 1 + x = (1 + m/256) * (1 + y) where m is an integer, -128 <= m <= 256, y is a number, |y| <= 1/256. y is computed as y = (256 * x - m) / (256 + m). Then log(1+x) = log(m/256) + log(1+y) The first summand is a table lookup. The second summand is computed - either through the power series log(1+y) = y - 1/2 * y^2 + 1/3 * y^3 - 1/4 * y^4 + 1/5 * y^5 - 1/6 * y^6 + 1/7 * y^7 - 1/8 * y^8 + 1/9 * y^9 - 1/10 * y^10 + 1/11 * y^11 - 1/12 * y^12 + 1/13 * y^13 - 1/14 * y^14 + 1/15 * y^15 - ... - or as log(1+y) = log((1+z)/(1-z)) = 2 * atanh(z) where z = y/(2+y) and atanh(z) is computed through its power series: atanh(z) = z + 1/3 * z^3 + 1/5 * z^5 + 1/7 * z^7 + 1/9 * z^9 + 1/11 * z^11 + 1/13 * z^13 + 1/15 * z^15 + ... Since |z| <= 1/511 < 0.002, the relative contribution of the z^9 term is < 1/9*0.002^8 < 2^-60 <= 2^-DBL_MANT_DIG, therefore we can truncate the series after the z^7 term. */ { double m = round (x * 256.0); double y = ((x * 256.0) - m) / (m + 256.0); double z = y / (2.0 + y); /* Coefficients of the power series for atanh(z). */ #define ATANH_COEFF_1 1.0 #define ATANH_COEFF_3 0.333333333333333333333333333333333333334 #define ATANH_COEFF_5 0.2 #define ATANH_COEFF_7 0.142857142857142857142857142857142857143 #define ATANH_COEFF_9 0.1111111111111111111111111111111111111113 #define ATANH_COEFF_11 0.090909090909090909090909090909090909091 #define ATANH_COEFF_13 0.076923076923076923076923076923076923077 #define ATANH_COEFF_15 0.066666666666666666666666666666666666667 double z2 = z * z; double atanh_z = (((ATANH_COEFF_7 * z2 + ATANH_COEFF_5) * z2 + ATANH_COEFF_3) * z2 + ATANH_COEFF_1) * z; /* log_table[i] = log((i + 128) / 256). Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 385) (format t " ~D,~%" (float (log (* (/ (+ i 128) 256) 1L0)) a))) */ static const double log_table[385] = { -0.693147180559945309417232121458176568075, -0.6853650401178903604697692213970398044, -0.677642994023980055266378075415729732197, -0.669980121278410931188432960495886651496, -0.662375521893191621046203913861404403985, -0.65482831625780871022347679633437927773, -0.647337644528651106250552853843513225963, -0.639902666041133026551361927671647791137, -0.632522558743510466836625989417756304788, -0.625196518651437560022666843685547154042, -0.617923759322357783718626781474514153438, -0.61070351134887071814907205278986876216, -0.60353502187025817679728065207969203929, -0.59641755410139419712166106497071313106, -0.58935038687830174459117031769420187977, -0.582332814219655195222425952134964639978, -0.575364144903561854878438011987654863008, -0.568443702058988073553825606077313299585, -0.561570822771226036828515992768693405624, -0.554744857700826173731906247856527380683, -0.547965170715447412135297057717612244552, -0.541231138534103334345428696561292056747, -0.534542150383306725323860946832334992828, -0.527897607664638146541620672180936254347, -0.52129692363328608707713317540302930314, -0.514739523087127012297831879947234599722, -0.50822484206593331675332852879892694707, -0.50175232756031585480793331389686769463, -0.495321437230025429054660050261215099, -0.488931639131254417913411735261937295862, -0.482582411452595671747679308725825054355, -0.476273242259330949798142595713829069596, -0.470003629245735553650937031148342064701, -0.463773079495099479425751396412036696525, -0.457581109247178400339643902517133157939, -0.451427243672800141272924605544662667972, -0.445311016655364052636629355711651820077, -0.43923197057898186527990882355156990061, -0.4331896561230192424451526269158655235, -0.427183632062807368078106194920633178807, -0.421213465076303550585562626925177406092, -0.415278729556489003230882088534775334993, -0.409379007429300711070330899107921801414, -0.403513887976902632538339065932507598071, -0.397682967666109433030550215403212372894, -0.391885849981783528404356583224421075418, -0.386122145265033447342107580922798666387, -0.380391470556048421030985561769857535915, -0.374693449441410693606984907867576972481, -0.369027711905733333326561361023189215893, -0.363393894187477327602809309537386757124, -0.357791638638807479160052541644010369001, -0.352220593589352099112142921677820359633, -0.346680413213736728498769933032403617363, -0.341170757402767124761784665198737642087, -0.33569129163814153519122263131727209364, -0.330241686870576856279407775480686721935, -0.324821619401237656369001967407777741178, -0.31943077076636122859621528874235306143, -0.314068827624975851026378775827156709194, -0.308735481649613269682442058976885699557, -0.303430429419920096046768517454655701024, -0.298153372319076331310838085093194799765, -0.292904016432932602487907019463045397996, -0.287682072451780927439219005993827431504, -0.282487255574676923482925918282353780414, -0.277319285416234343803903228503274262719, -0.272177885915815673288364959951380595626, -0.267062785249045246292687241862699949179, -0.261973715741573968558059642502581569596, -0.256910413785027239068190798397055267412, -0.251872619755070079927735679796875342712, -0.2468600779315257978846419408385075613265, -0.24187253642048672427253973837916408939, -0.2369097470783577150364265832942468196375, -0.2319714654377751430492321958603212094726, -0.2270574506353460848586128739534071682175, -0.222167465341154296870334265401817316702, -0.2173012756899813951520225351537951559, -0.212458651214193401740613666010165016867, -0.2076393647782445016154410442673876674964, -0.202843192514751471266885961812429707545, -0.1980699137620937948192675366153429027185, -0.193319311003495979595900706211132426563, -0.188591169807550022358923589720001638093, -0.183885278770137362613157202229852743197, -0.179201429457710992616226033183958974965, -0.174539416351899677264255125093377869519, -0.169899036795397472900424896523305726435, -0.165280090939102924303339903679875604517, -0.160682381690473465543308397998034325468, -0.156105714663061654850502877304344269052, -0.1515498981272009378406898175577424691056, -0.1470147429618096590348349122269674042104, -0.142500062607283030157283942253263107981, -0.1380056730194437167017517619422725179055, -0.1335313926245226231463436209313499745895, -0.129077042275142343345847831367985856258, -0.124642445207276597338493356591214304499, -0.1202274269981598003244753948319154994493, -0.115831815525121705099120059938680166568, -0.1114554409253228268966213677328042273655, -0.1070981355563671005131126851708522185606, -0.1027597339577689347753154133345778104976, -0.098440072813252519902888574928971234883, -0.094138990913861910035632096996525066015, -0.0898563291218610470766469347968659624282, -0.0855919303354035139161469686670511961825, -0.0813456394539524058873423550293617843895, -0.077117303344431289769666193261475917783, -0.072906770808087780565737488890929711303, -0.0687138925480518083746933774035034481663, -0.064538521137571171672923915683992928129, -0.0603805109889074798714456529545968095868, -0.0562397183228760777967376942769773768851, -0.0521160011390140183616307870527840213665, -0.0480092191863606077520036253234446621373, -0.0439192339348354905263921515528654458042, -0.0398459085471996706586162402473026835046, -0.0357891078515852792753420982122404025613, -0.0317486983145803011569962827485256299276, -0.0277245480148548604671395114515163869272, -0.0237165266173160421183468505286730579517, -0.0197245053477785891192717326571593033246, -0.015748356968139168607549511460828269521, -0.0117879557520422404691605618900871263399, -0.0078431774610258928731840424909435816546, -0.00391389932113632909231778364357266484272, 0.0, 0.00389864041565732301393734309584290701073, 0.00778214044205494894746290006113676367813, 0.01165061721997527413559144280921434893315, 0.0155041865359652541508540460424468358779, 0.01934296284313093463590553454155047018545, 0.0231670592815343782287991609622899165794, 0.0269765876982020757480692925396595457815, 0.0307716586667536883710282075967721640917, 0.0345523815066597334073715005898328652816, 0.038318864302136599193755325123797290346, 0.042071213920687054375203805926962379448, 0.045809536031294203166679267614663342114, 0.049533935122276630882096208829824573267, 0.0532445145188122828658701937865287769396, 0.0569413764001384247590131015404494943015, 0.0606246218164348425806061320404202632862, 0.0642943507053972572162284502656114944857, 0.0679506619085077493945652777726294140346, 0.071593653187008817925605272752092034269, 0.075223421237587525698605339983662414637, 0.078840061707776024531540577859198294559, 0.082443669211074591268160068668307805914, 0.086034337341803153381797826721996075141, 0.0896121586896871326199514693784845287854, 0.093177224854183289768781353027759396216, 0.096729626458551112295571056487463437015, 0.1002694531636751493081301751297276601964, 0.1037967936816435648260618037639746883066, 0.1073117357890880506671750303711543368066, 0.1108143663402901141948061693232119280986, 0.1143047712800586336342591448151747734094, 0.1177830356563834545387941094705217050686, 0.1212492436328696851612122640808405265723, 0.1247034785009572358634065153808632684918, 0.128145822691930038174109886961074873852, 0.1315763577887192725887161286894831624516, 0.134995164537504830601983291147085645626, 0.138402322859119135685325873601649187393, 0.1417979118602573498789527352804727189846, 0.1451820098444978972819350637405643235226, 0.1485546943231371429098223170672938691604, 0.151916042025841975071803424896884511328, 0.1552661289111239515223833017101021786436, 0.1586050301766385840933711746258415752456, 0.161932820269313253240338285123614220592, 0.165249572895307162875611449277240313729, 0.1685553610298066669415865321701023169345, 0.171850256926659222340098946055147264935, 0.1751343321278491480142914649863898412374, 0.1784076574728182971194002415109419683545, 0.181670303107634678260605595617079739242, 0.184922338494011992663903592659249621006, 0.1881638324181829868259905803105539806714, 0.191394852999629454609298807561308873447, 0.194615467699671658858138593767269731516, 0.1978257433299198803625720711969614690756, 0.201025746060590741340908337591797808969, 0.204215541428690891503820386196239272214, 0.2073951943460705871587455788490062338536, 0.210564769107349637669552812732351513721, 0.2137243293977181388619051976331987647734, 0.216873938300614359619089525744347498479, 0.220013658305282095907358638661628360712, 0.2231435513142097557662950903098345033745, 0.226263678650453389361787082280390161607, 0.229374101064845829991480725046139871551, 0.232474878743094064920705078095567528222, 0.235566071312766909077588218941043410137, 0.2386477378501750099171491363522813392526, 0.241719936887145168144307515913513900104, 0.244782726417690916434704717466314811104, 0.247836163904581256780602765746524747999, 0.25088030628580941658844644154994089393, 0.253915209980963444137323297906606667466, 0.256940930897500425446759867911224262093, 0.259957524436926066972079494542311044577, 0.26296504550088135182072917321108602859, 0.265963548497137941339125926537543389269, 0.268953087345503958932974357924497845489, 0.271933715483641758831669494532999161983, 0.274905485872799249167009582983018668293, 0.277868451003456306186350032923401233082, 0.280822662900887784639519758873134832073, 0.28376817313064459834690122235025476666, 0.286705032803954314653250930842073965668, 0.289633292583042676878893055525668970004, 0.292553002686377439978201258664126644308, 0.295464212893835876386681906054964195182, 0.298366972551797281464900430293496918012, 0.301261330578161781012875538233755492657, 0.304147335467296717015819874720446989991, 0.30702503529491186207512454053537790169, 0.309894477722864687861624550833227164546, 0.31275571000389688838624655968831903216, 0.315608778986303334901366180667483174144, 0.318453731118534615810247213590599595595, 0.321290612453734292057863145522557457887, 0.324119468654211976090670760434987352183, 0.326940344995853320592356894073809191681, 0.329753286372467981814422811920789810952, 0.332558337300076601412275626573419425269, 0.335355541921137830257179579814166199074, 0.338144944008716397710235913939267433111, 0.340926586970593210305089199780356208443, 0.34370051385331844468019789211029452987, 0.346466767346208580918462188425772950712, 0.349225389785288304181275421187371759687, 0.35197642315717818465544745625943892599, 0.354719909102929028355011218999317665826, 0.357455888921803774226009490140904474434, 0.360184403575007796281574967493016620926, 0.362905493689368453137824345977489846141, 0.365619199560964711319396875217046453067, 0.368325561158707653048230154050398826898, 0.371024618127872663911964910806824955394, 0.373716409793584080821016832715823506644, 0.376400975164253065997877633436251593315, 0.379078352934969458390853345631019858882, 0.38174858149084833985966626493567607862, 0.384411698910332039734790062481290868519, 0.387067742968448287898902502261817665695, 0.38971675114002521337046360400352086705, 0.392358760602863872479379611988215363485, 0.39499380824086897810639403636498176831, 0.397621930647138489104829072973405554918, 0.40024316412701270692932510199513117008, 0.402857544701083514655197565487057707577, 0.405465108108164381978013115464349136572, 0.408065889808221748430198682969084124381, 0.410659924985268385934306203175822787661, 0.41324724855021933092547601552548590025, 0.415827895143710965613328892954902305356, 0.418401899138883817510763261966760106515, 0.42096929464412963612886716150679597245, 0.423530115505803295718430478017910109426, 0.426084395310900063124544879595476618897, 0.428632167389698760206812276426639053152, 0.43117346481837134085917247895559499848, 0.433708320421559393435847903042186017095, 0.436236766774918070349041323061121300663, 0.438758836207627937745575058511446738878, 0.441274560804875229489496441661301225362, 0.443783972410300981171768440588146426918, 0.446287102628419511532590180619669006749, 0.448783982827006710512822115683937186274, 0.451274644139458585144692383079012478686, 0.453759117467120506644794794442263270651, 0.456237433481587594380805538163929748437, 0.458709622626976664843883309250877913511, 0.461175715122170166367999925597855358603, 0.463635740963032513092182277331163919118, 0.466089729924599224558619247504769399859, 0.468537711563239270375665237462973542708, 0.470979715218791012546897856056359251373, 0.473415770016672131372578393236978550606, 0.475845904869963914265209586304381412175, 0.478270148481470280383546145497464809096, 0.480688529345751907676618455448011551209, 0.48310107575113582273837458485214554795, 0.485507815781700807801791077190788900579, 0.487908777319238973246173184132656942487, 0.490303988045193838150346159645746860531, 0.492693475442575255695076950020077845328, 0.495077266797851514597964584842833665358, 0.497455389202818942250859256731684928918, 0.499827869556449329821331415247044141512, 0.502194734566715494273584171951812573586, 0.504556010752395287058308531738174929982, 0.506911724444854354113196312660089270034, 0.509261901789807946804074919228323824878, 0.51160656874906207851888487520338193135, 0.51394575110223431680100608827421759311, 0.51627947444845449617281928478756106467, 0.518607764208045632152976996364798698556, 0.520930645624185312409809834659637709188, 0.52324814376454783651680722493487084164, 0.525560283522927371382427602307131424923, 0.527867089620842385113892217778300963557, 0.530168586609121617841419630845212405063, 0.532464798869471843873923723460142242606, 0.534755750616027675477923292032637111077, 0.537041465896883654566729244153832299024, 0.539321968595608874655355158077341155752, 0.54159728243274437157654230390043409897, 0.543867430967283517663338989065998323965, 0.546132437598135650382397209231209163864, 0.548392325565573162748150286179863158565, 0.550647117952662279259948179204913460093, 0.552896837686677737580717902230624314327, 0.55514150754050159271548035951590405017, 0.557381150134006357049816540361233647898, 0.559615787935422686270888500526826593487, 0.561845443262691817915664819160697456814, 0.564070138284802966071384290090190711817, 0.566289895023115872590849979337124343595, 0.568504735352668712078738764866962263577, 0.5707146810034715448536245647415894503, 0.572919753561785509092756726626261068625, 0.575119974471387940421742546569273429365, 0.577315365034823604318112061519496401506, 0.579505946414642223855274409488070989814, 0.58169173963462248252061075372537234071, 0.583872765580982679097413356975291104927, 0.586049045003578208904119436287324349516, 0.588220598517086043034868221609113995052, 0.590387446602176374641916708123598757576, 0.59254960960667159874199020959329739696, 0.594707107746692789514343546529205333192, 0.59685996110779383658731192302565801002, 0.59900818964608339938160002446165150206, 0.601151813189334836191674317068856441547, 0.603290851438084262340585186661310605647, 0.6054253239667168894375677681414899356, 0.607555250224541795501085152791125371894, 0.609680649536855273481833501660588408785, 0.611801541105992903529889766428814783686, 0.613917944012370492196929119645563790777, 0.616029877215514019647565928196700650293, 0.618137359555078733872689126674816271683, 0.620240409751857528851494632567246856773, 0.62233904640877874159710264120869663505, 0.62443328801189350104253874405467311991, 0.626523152931352759778820859734204069282, 0.628608659422374137744308205774183639946, 0.6306898256261987050837261409313532241, 0.63276666957103782954578646850357975849, 0.634839209173010211969493840510489008123, 0.63690746223706923162049442718119919119, 0.63897144645792072137962398326473680873, 0.64103117942093129105560133440539254671, 0.643086678603027315392053859585132960477, 0.645137961373584701665228496134731905937, 0.647185044995309550122320631377863036675, 0.64922794662510981889083996990531112227, 0.651266683314958103396333353349672108398, 0.653301272012745638758615881210873884572, 0.65533172956312763209494967856962559648, 0.657358072708360030141890023245936165513, 0.659380318089127826115336413370955804038, 0.661398482245365008260235838709650938148, 0.66341258161706625109695030429080128179, 0.665422632545090448950092610006660181147, 0.667428651271956189947234166318980478403, 0.669430653942629267298885270929503510123, 0.67142865660530232331713904200189252584, 0.67342267521216672029796038880101726475, 0.67541272562017673108090414397019748722, 0.677398823591806140809682609997348298556, 0.67938098479579735014710062847376425181, 0.681359224807903068948071559568089441735, 0.683333559111620688164363148387750369654, 0.68530400309891941654404807896723298642, 0.687270572070960267497006884394346103924, 0.689233281238808980324914337814603903233, 0.691192145724141958859604629216309755938, 0.693147180559945309417232121458176568075 }; return log_table[128 + (int)m] + 2.0 * atanh_z; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log1pf.c����������������������������������������������������������������0000664�0000000�0000000�00000001571�14110572173�0016405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Natural logarithm of 1 plus argument. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float log1pf (float x) { return (float) log1p ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log1pl.c����������������������������������������������������������������0000664�0000000�0000000�00000057776�14110572173�0016435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Natural logarithm of 1 plus argument. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double log1pl (long double x) { return log1p (x); } #else long double log1pl (long double x) { if (isnanl (x)) return x; if (x <= -1.0L) { if (x == -1.0L) /* Return -Infinity. */ return - HUGE_VALL; else { /* Return NaN. */ #if defined _MSC_VER || (defined __sgi && !defined __GNUC__) static long double zero; return zero / zero; #else return 0.0L / 0.0L; #endif } } if (x < -0.5L || x > 1.0L) return logl (1.0L + x); /* Here -0.5 <= x <= 1.0. */ if (x == 0.0L) /* Return a zero with the same sign as x. */ return x; /* Decompose x into 1 + x = (1 + m/256) * (1 + y) where m is an integer, -128 <= m <= 256, y is a number, |y| <= 1/256. y is computed as y = (256 * x - m) / (256 + m). Then log(1+x) = log(m/256) + log(1+y) The first summand is a table lookup. The second summand is computed - either through the power series log(1+y) = y - 1/2 * y^2 + 1/3 * y^3 - 1/4 * y^4 + 1/5 * y^5 - 1/6 * y^6 + 1/7 * y^7 - 1/8 * y^8 + 1/9 * y^9 - 1/10 * y^10 + 1/11 * y^11 - 1/12 * y^12 + 1/13 * y^13 - 1/14 * y^14 + 1/15 * y^15 - ... - or as log(1+y) = log((1+z)/(1-z)) = 2 * atanh(z) where z = y/(2+y) and atanh(z) is computed through its power series: atanh(z) = z + 1/3 * z^3 + 1/5 * z^5 + 1/7 * z^7 + 1/9 * z^9 + 1/11 * z^11 + 1/13 * z^13 + 1/15 * z^15 + ... Since |z| <= 1/511 < 0.002, the relative contribution of the z^15 term is < 1/15*0.002^14 < 2^-120 <= 2^-LDBL_MANT_DIG, therefore we can truncate the series after the z^13 term. */ { long double m = roundl (x * 256.0L); long double y = ((x * 256.0L) - m) / (m + 256.0L); long double z = y / (2.0L + y); /* Coefficients of the power series for atanh(z). */ #define ATANH_COEFF_1 1.0L #define ATANH_COEFF_3 0.333333333333333333333333333333333333334L #define ATANH_COEFF_5 0.2L #define ATANH_COEFF_7 0.142857142857142857142857142857142857143L #define ATANH_COEFF_9 0.1111111111111111111111111111111111111113L #define ATANH_COEFF_11 0.090909090909090909090909090909090909091L #define ATANH_COEFF_13 0.076923076923076923076923076923076923077L #define ATANH_COEFF_15 0.066666666666666666666666666666666666667L long double z2 = z * z; long double atanh_z = ((((((ATANH_COEFF_13 * z2 + ATANH_COEFF_11) * z2 + ATANH_COEFF_9) * z2 + ATANH_COEFF_7) * z2 + ATANH_COEFF_5) * z2 + ATANH_COEFF_3) * z2 + ATANH_COEFF_1) * z; /* logl_table[i] = log((i + 128) / 256). Computed in GNU clisp through (setf (long-float-digits) 128) (setq a 0L0) (setf (long-float-digits) 256) (dotimes (i 385) (format t " ~D,~%" (float (log (* (/ (+ i 128) 256) 1L0)) a))) */ static const long double logl_table[385] = { -0.693147180559945309417232121458176568075L, -0.6853650401178903604697692213970398044L, -0.677642994023980055266378075415729732197L, -0.669980121278410931188432960495886651496L, -0.662375521893191621046203913861404403985L, -0.65482831625780871022347679633437927773L, -0.647337644528651106250552853843513225963L, -0.639902666041133026551361927671647791137L, -0.632522558743510466836625989417756304788L, -0.625196518651437560022666843685547154042L, -0.617923759322357783718626781474514153438L, -0.61070351134887071814907205278986876216L, -0.60353502187025817679728065207969203929L, -0.59641755410139419712166106497071313106L, -0.58935038687830174459117031769420187977L, -0.582332814219655195222425952134964639978L, -0.575364144903561854878438011987654863008L, -0.568443702058988073553825606077313299585L, -0.561570822771226036828515992768693405624L, -0.554744857700826173731906247856527380683L, -0.547965170715447412135297057717612244552L, -0.541231138534103334345428696561292056747L, -0.534542150383306725323860946832334992828L, -0.527897607664638146541620672180936254347L, -0.52129692363328608707713317540302930314L, -0.514739523087127012297831879947234599722L, -0.50822484206593331675332852879892694707L, -0.50175232756031585480793331389686769463L, -0.495321437230025429054660050261215099L, -0.488931639131254417913411735261937295862L, -0.482582411452595671747679308725825054355L, -0.476273242259330949798142595713829069596L, -0.470003629245735553650937031148342064701L, -0.463773079495099479425751396412036696525L, -0.457581109247178400339643902517133157939L, -0.451427243672800141272924605544662667972L, -0.445311016655364052636629355711651820077L, -0.43923197057898186527990882355156990061L, -0.4331896561230192424451526269158655235L, -0.427183632062807368078106194920633178807L, -0.421213465076303550585562626925177406092L, -0.415278729556489003230882088534775334993L, -0.409379007429300711070330899107921801414L, -0.403513887976902632538339065932507598071L, -0.397682967666109433030550215403212372894L, -0.391885849981783528404356583224421075418L, -0.386122145265033447342107580922798666387L, -0.380391470556048421030985561769857535915L, -0.374693449441410693606984907867576972481L, -0.369027711905733333326561361023189215893L, -0.363393894187477327602809309537386757124L, -0.357791638638807479160052541644010369001L, -0.352220593589352099112142921677820359633L, -0.346680413213736728498769933032403617363L, -0.341170757402767124761784665198737642087L, -0.33569129163814153519122263131727209364L, -0.330241686870576856279407775480686721935L, -0.324821619401237656369001967407777741178L, -0.31943077076636122859621528874235306143L, -0.314068827624975851026378775827156709194L, -0.308735481649613269682442058976885699557L, -0.303430429419920096046768517454655701024L, -0.298153372319076331310838085093194799765L, -0.292904016432932602487907019463045397996L, -0.287682072451780927439219005993827431504L, -0.282487255574676923482925918282353780414L, -0.277319285416234343803903228503274262719L, -0.272177885915815673288364959951380595626L, -0.267062785249045246292687241862699949179L, -0.261973715741573968558059642502581569596L, -0.256910413785027239068190798397055267412L, -0.251872619755070079927735679796875342712L, -0.2468600779315257978846419408385075613265L, -0.24187253642048672427253973837916408939L, -0.2369097470783577150364265832942468196375L, -0.2319714654377751430492321958603212094726L, -0.2270574506353460848586128739534071682175L, -0.222167465341154296870334265401817316702L, -0.2173012756899813951520225351537951559L, -0.212458651214193401740613666010165016867L, -0.2076393647782445016154410442673876674964L, -0.202843192514751471266885961812429707545L, -0.1980699137620937948192675366153429027185L, -0.193319311003495979595900706211132426563L, -0.188591169807550022358923589720001638093L, -0.183885278770137362613157202229852743197L, -0.179201429457710992616226033183958974965L, -0.174539416351899677264255125093377869519L, -0.169899036795397472900424896523305726435L, -0.165280090939102924303339903679875604517L, -0.160682381690473465543308397998034325468L, -0.156105714663061654850502877304344269052L, -0.1515498981272009378406898175577424691056L, -0.1470147429618096590348349122269674042104L, -0.142500062607283030157283942253263107981L, -0.1380056730194437167017517619422725179055L, -0.1335313926245226231463436209313499745895L, -0.129077042275142343345847831367985856258L, -0.124642445207276597338493356591214304499L, -0.1202274269981598003244753948319154994493L, -0.115831815525121705099120059938680166568L, -0.1114554409253228268966213677328042273655L, -0.1070981355563671005131126851708522185606L, -0.1027597339577689347753154133345778104976L, -0.098440072813252519902888574928971234883L, -0.094138990913861910035632096996525066015L, -0.0898563291218610470766469347968659624282L, -0.0855919303354035139161469686670511961825L, -0.0813456394539524058873423550293617843895L, -0.077117303344431289769666193261475917783L, -0.072906770808087780565737488890929711303L, -0.0687138925480518083746933774035034481663L, -0.064538521137571171672923915683992928129L, -0.0603805109889074798714456529545968095868L, -0.0562397183228760777967376942769773768851L, -0.0521160011390140183616307870527840213665L, -0.0480092191863606077520036253234446621373L, -0.0439192339348354905263921515528654458042L, -0.0398459085471996706586162402473026835046L, -0.0357891078515852792753420982122404025613L, -0.0317486983145803011569962827485256299276L, -0.0277245480148548604671395114515163869272L, -0.0237165266173160421183468505286730579517L, -0.0197245053477785891192717326571593033246L, -0.015748356968139168607549511460828269521L, -0.0117879557520422404691605618900871263399L, -0.0078431774610258928731840424909435816546L, -0.00391389932113632909231778364357266484272L, 0.0L, 0.00389864041565732301393734309584290701073L, 0.00778214044205494894746290006113676367813L, 0.01165061721997527413559144280921434893315L, 0.0155041865359652541508540460424468358779L, 0.01934296284313093463590553454155047018545L, 0.0231670592815343782287991609622899165794L, 0.0269765876982020757480692925396595457815L, 0.0307716586667536883710282075967721640917L, 0.0345523815066597334073715005898328652816L, 0.038318864302136599193755325123797290346L, 0.042071213920687054375203805926962379448L, 0.045809536031294203166679267614663342114L, 0.049533935122276630882096208829824573267L, 0.0532445145188122828658701937865287769396L, 0.0569413764001384247590131015404494943015L, 0.0606246218164348425806061320404202632862L, 0.0642943507053972572162284502656114944857L, 0.0679506619085077493945652777726294140346L, 0.071593653187008817925605272752092034269L, 0.075223421237587525698605339983662414637L, 0.078840061707776024531540577859198294559L, 0.082443669211074591268160068668307805914L, 0.086034337341803153381797826721996075141L, 0.0896121586896871326199514693784845287854L, 0.093177224854183289768781353027759396216L, 0.096729626458551112295571056487463437015L, 0.1002694531636751493081301751297276601964L, 0.1037967936816435648260618037639746883066L, 0.1073117357890880506671750303711543368066L, 0.1108143663402901141948061693232119280986L, 0.1143047712800586336342591448151747734094L, 0.1177830356563834545387941094705217050686L, 0.1212492436328696851612122640808405265723L, 0.1247034785009572358634065153808632684918L, 0.128145822691930038174109886961074873852L, 0.1315763577887192725887161286894831624516L, 0.134995164537504830601983291147085645626L, 0.138402322859119135685325873601649187393L, 0.1417979118602573498789527352804727189846L, 0.1451820098444978972819350637405643235226L, 0.1485546943231371429098223170672938691604L, 0.151916042025841975071803424896884511328L, 0.1552661289111239515223833017101021786436L, 0.1586050301766385840933711746258415752456L, 0.161932820269313253240338285123614220592L, 0.165249572895307162875611449277240313729L, 0.1685553610298066669415865321701023169345L, 0.171850256926659222340098946055147264935L, 0.1751343321278491480142914649863898412374L, 0.1784076574728182971194002415109419683545L, 0.181670303107634678260605595617079739242L, 0.184922338494011992663903592659249621006L, 0.1881638324181829868259905803105539806714L, 0.191394852999629454609298807561308873447L, 0.194615467699671658858138593767269731516L, 0.1978257433299198803625720711969614690756L, 0.201025746060590741340908337591797808969L, 0.204215541428690891503820386196239272214L, 0.2073951943460705871587455788490062338536L, 0.210564769107349637669552812732351513721L, 0.2137243293977181388619051976331987647734L, 0.216873938300614359619089525744347498479L, 0.220013658305282095907358638661628360712L, 0.2231435513142097557662950903098345033745L, 0.226263678650453389361787082280390161607L, 0.229374101064845829991480725046139871551L, 0.232474878743094064920705078095567528222L, 0.235566071312766909077588218941043410137L, 0.2386477378501750099171491363522813392526L, 0.241719936887145168144307515913513900104L, 0.244782726417690916434704717466314811104L, 0.247836163904581256780602765746524747999L, 0.25088030628580941658844644154994089393L, 0.253915209980963444137323297906606667466L, 0.256940930897500425446759867911224262093L, 0.259957524436926066972079494542311044577L, 0.26296504550088135182072917321108602859L, 0.265963548497137941339125926537543389269L, 0.268953087345503958932974357924497845489L, 0.271933715483641758831669494532999161983L, 0.274905485872799249167009582983018668293L, 0.277868451003456306186350032923401233082L, 0.280822662900887784639519758873134832073L, 0.28376817313064459834690122235025476666L, 0.286705032803954314653250930842073965668L, 0.289633292583042676878893055525668970004L, 0.292553002686377439978201258664126644308L, 0.295464212893835876386681906054964195182L, 0.298366972551797281464900430293496918012L, 0.301261330578161781012875538233755492657L, 0.304147335467296717015819874720446989991L, 0.30702503529491186207512454053537790169L, 0.309894477722864687861624550833227164546L, 0.31275571000389688838624655968831903216L, 0.315608778986303334901366180667483174144L, 0.318453731118534615810247213590599595595L, 0.321290612453734292057863145522557457887L, 0.324119468654211976090670760434987352183L, 0.326940344995853320592356894073809191681L, 0.329753286372467981814422811920789810952L, 0.332558337300076601412275626573419425269L, 0.335355541921137830257179579814166199074L, 0.338144944008716397710235913939267433111L, 0.340926586970593210305089199780356208443L, 0.34370051385331844468019789211029452987L, 0.346466767346208580918462188425772950712L, 0.349225389785288304181275421187371759687L, 0.35197642315717818465544745625943892599L, 0.354719909102929028355011218999317665826L, 0.357455888921803774226009490140904474434L, 0.360184403575007796281574967493016620926L, 0.362905493689368453137824345977489846141L, 0.365619199560964711319396875217046453067L, 0.368325561158707653048230154050398826898L, 0.371024618127872663911964910806824955394L, 0.373716409793584080821016832715823506644L, 0.376400975164253065997877633436251593315L, 0.379078352934969458390853345631019858882L, 0.38174858149084833985966626493567607862L, 0.384411698910332039734790062481290868519L, 0.387067742968448287898902502261817665695L, 0.38971675114002521337046360400352086705L, 0.392358760602863872479379611988215363485L, 0.39499380824086897810639403636498176831L, 0.397621930647138489104829072973405554918L, 0.40024316412701270692932510199513117008L, 0.402857544701083514655197565487057707577L, 0.405465108108164381978013115464349136572L, 0.408065889808221748430198682969084124381L, 0.410659924985268385934306203175822787661L, 0.41324724855021933092547601552548590025L, 0.415827895143710965613328892954902305356L, 0.418401899138883817510763261966760106515L, 0.42096929464412963612886716150679597245L, 0.423530115505803295718430478017910109426L, 0.426084395310900063124544879595476618897L, 0.428632167389698760206812276426639053152L, 0.43117346481837134085917247895559499848L, 0.433708320421559393435847903042186017095L, 0.436236766774918070349041323061121300663L, 0.438758836207627937745575058511446738878L, 0.441274560804875229489496441661301225362L, 0.443783972410300981171768440588146426918L, 0.446287102628419511532590180619669006749L, 0.448783982827006710512822115683937186274L, 0.451274644139458585144692383079012478686L, 0.453759117467120506644794794442263270651L, 0.456237433481587594380805538163929748437L, 0.458709622626976664843883309250877913511L, 0.461175715122170166367999925597855358603L, 0.463635740963032513092182277331163919118L, 0.466089729924599224558619247504769399859L, 0.468537711563239270375665237462973542708L, 0.470979715218791012546897856056359251373L, 0.473415770016672131372578393236978550606L, 0.475845904869963914265209586304381412175L, 0.478270148481470280383546145497464809096L, 0.480688529345751907676618455448011551209L, 0.48310107575113582273837458485214554795L, 0.485507815781700807801791077190788900579L, 0.487908777319238973246173184132656942487L, 0.490303988045193838150346159645746860531L, 0.492693475442575255695076950020077845328L, 0.495077266797851514597964584842833665358L, 0.497455389202818942250859256731684928918L, 0.499827869556449329821331415247044141512L, 0.502194734566715494273584171951812573586L, 0.504556010752395287058308531738174929982L, 0.506911724444854354113196312660089270034L, 0.509261901789807946804074919228323824878L, 0.51160656874906207851888487520338193135L, 0.51394575110223431680100608827421759311L, 0.51627947444845449617281928478756106467L, 0.518607764208045632152976996364798698556L, 0.520930645624185312409809834659637709188L, 0.52324814376454783651680722493487084164L, 0.525560283522927371382427602307131424923L, 0.527867089620842385113892217778300963557L, 0.530168586609121617841419630845212405063L, 0.532464798869471843873923723460142242606L, 0.534755750616027675477923292032637111077L, 0.537041465896883654566729244153832299024L, 0.539321968595608874655355158077341155752L, 0.54159728243274437157654230390043409897L, 0.543867430967283517663338989065998323965L, 0.546132437598135650382397209231209163864L, 0.548392325565573162748150286179863158565L, 0.550647117952662279259948179204913460093L, 0.552896837686677737580717902230624314327L, 0.55514150754050159271548035951590405017L, 0.557381150134006357049816540361233647898L, 0.559615787935422686270888500526826593487L, 0.561845443262691817915664819160697456814L, 0.564070138284802966071384290090190711817L, 0.566289895023115872590849979337124343595L, 0.568504735352668712078738764866962263577L, 0.5707146810034715448536245647415894503L, 0.572919753561785509092756726626261068625L, 0.575119974471387940421742546569273429365L, 0.577315365034823604318112061519496401506L, 0.579505946414642223855274409488070989814L, 0.58169173963462248252061075372537234071L, 0.583872765580982679097413356975291104927L, 0.586049045003578208904119436287324349516L, 0.588220598517086043034868221609113995052L, 0.590387446602176374641916708123598757576L, 0.59254960960667159874199020959329739696L, 0.594707107746692789514343546529205333192L, 0.59685996110779383658731192302565801002L, 0.59900818964608339938160002446165150206L, 0.601151813189334836191674317068856441547L, 0.603290851438084262340585186661310605647L, 0.6054253239667168894375677681414899356L, 0.607555250224541795501085152791125371894L, 0.609680649536855273481833501660588408785L, 0.611801541105992903529889766428814783686L, 0.613917944012370492196929119645563790777L, 0.616029877215514019647565928196700650293L, 0.618137359555078733872689126674816271683L, 0.620240409751857528851494632567246856773L, 0.62233904640877874159710264120869663505L, 0.62443328801189350104253874405467311991L, 0.626523152931352759778820859734204069282L, 0.628608659422374137744308205774183639946L, 0.6306898256261987050837261409313532241L, 0.63276666957103782954578646850357975849L, 0.634839209173010211969493840510489008123L, 0.63690746223706923162049442718119919119L, 0.63897144645792072137962398326473680873L, 0.64103117942093129105560133440539254671L, 0.643086678603027315392053859585132960477L, 0.645137961373584701665228496134731905937L, 0.647185044995309550122320631377863036675L, 0.64922794662510981889083996990531112227L, 0.651266683314958103396333353349672108398L, 0.653301272012745638758615881210873884572L, 0.65533172956312763209494967856962559648L, 0.657358072708360030141890023245936165513L, 0.659380318089127826115336413370955804038L, 0.661398482245365008260235838709650938148L, 0.66341258161706625109695030429080128179L, 0.665422632545090448950092610006660181147L, 0.667428651271956189947234166318980478403L, 0.669430653942629267298885270929503510123L, 0.67142865660530232331713904200189252584L, 0.67342267521216672029796038880101726475L, 0.67541272562017673108090414397019748722L, 0.677398823591806140809682609997348298556L, 0.67938098479579735014710062847376425181L, 0.681359224807903068948071559568089441735L, 0.683333559111620688164363148387750369654L, 0.68530400309891941654404807896723298642L, 0.687270572070960267497006884394346103924L, 0.689233281238808980324914337814603903233L, 0.691192145724141958859604629216309755938L, 0.693147180559945309417232121458176568075L }; return logl_table[128 + (int)m] + 2.0L * atanh_z; } } #endif ��gnulib-20210822~d383792/lib/log2.c������������������������������������������������������������������0000664�0000000�0000000�00000003476�14110572173�0016066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 2 logarithm. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> /* Best possible approximation of log(2) as a 'double'. */ #define LOG2 0.693147180559945309417232121458176568075 /* Best possible approximation of 1/log(2) as a 'double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743 /* sqrt(0.5). */ #define SQRT_HALF 0.707106781186547524400844362104849039284 double log2 (double x) { if (isnand (x)) return x; if (x <= 0.0) { if (x == 0.0) /* Return -Infinity. */ return - HUGE_VAL; else { /* Return NaN. */ #if defined _MSC_VER || (defined __sgi && !defined __GNUC__) static double zero; return zero / zero; #else return 0.0 / 0.0; #endif } } /* Decompose x into x = 2^e * y where e is an integer, 1/2 < y < 2. Then log2(x) = e + log2(y) = e + log(y)/log(2). */ { int e; double y; y = frexp (x, &e); if (y < SQRT_HALF) { y = 2.0 * y; e = e - 1; } return (double) e + log (y) * LOG2_INVERSE; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log2f.c�����������������������������������������������������������������0000664�0000000�0000000�00000003570�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 2 logarithm. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_LOG2 float log2f (float x) { return (float) log2 ((double) x); } #else /* Best possible approximation of log(2) as a 'float'. */ #define LOG2 0.693147180559945309417232121458176568075f /* Best possible approximation of 1/log(2) as a 'float'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743f /* sqrt(0.5). */ #define SQRT_HALF 0.707106781186547524400844362104849039284f float log2f (float x) { if (isnanf (x)) return x; if (x <= 0.0f) { if (x == 0.0f) /* Return -Infinity. */ return - HUGE_VALF; else { /* Return NaN. */ #if defined _MSC_VER static float zero; return zero / zero; #else return 0.0f / 0.0f; #endif } } /* Decompose x into x = 2^e * y where e is an integer, 1/2 < y < 2. Then log2(x) = e + log2(y) = e + log(y)/log(2). */ { int e; float y; y = frexpf (x, &e); if (y < SQRT_HALF) { y = 2.0f * y; e = e - 1; } return (float) e + logf (y) * LOG2_INVERSE; } } #endif ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/log2l.c�����������������������������������������������������������������0000664�0000000�0000000�00000003763�14110572173�0016241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 2 logarithm. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double log2l (long double x) { return log2 (x); } #else /* Best possible approximation of log(2) as a 'long double'. */ #define LOG2 0.693147180559945309417232121458176568075L /* Best possible approximation of 1/log(2) as a 'long double'. */ #define LOG2_INVERSE 1.44269504088896340735992468100189213743L /* sqrt(0.5). */ #define SQRT_HALF 0.707106781186547524400844362104849039284L long double log2l (long double x) { if (isnanl (x)) return x; if (x <= 0.0L) { if (x == 0.0L) /* Return -Infinity. */ return - HUGE_VALL; else { /* Return NaN. */ #if (defined _MSC_VER && !defined __clang__) || (defined __sgi && !defined __GNUC__) static long double zero; return zero / zero; #else return 0.0L / 0.0L; #endif } } /* Decompose x into x = 2^e * y where e is an integer, 1/2 < y < 2. Then log2(x) = e + log2(y) = e + log(y)/log(2). */ { int e; long double y; y = frexpl (x, &e); if (y < SQRT_HALF) { y = 2.0L * y; e = e - 1; } return (long double) e + logl (y) * LOG2_INVERSE; } } #endif �������������gnulib-20210822~d383792/lib/logb.c������������������������������������������������������������������0000664�0000000�0000000�00000003376�14110572173�0016145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #if ! (defined USE_LONG_DOUBLE || defined USE_FLOAT) # include <config.h> #endif /* Specification. */ #include <math.h> #ifdef USE_LONG_DOUBLE # define LOGB logbl # define DOUBLE long double # define L_(literal) literal##L # define HUGEVAL HUGE_VALL # define FREXP frexpl # define ISNAN isnanl #elif ! defined USE_FLOAT # define LOGB logb # define DOUBLE double # define L_(literal) literal # define HUGEVAL HUGE_VAL # define FREXP frexp # define ISNAN isnand #else /* defined USE_FLOAT */ # define LOGB logbf # define DOUBLE float # define L_(literal) literal##f # define HUGEVAL HUGE_VALF # define FREXP frexpf # define ISNAN isnanf #endif DOUBLE LOGB (DOUBLE x) { if (isfinite (x)) { if (x == L_(0.0)) /* Return -Infinity. */ return - HUGEVAL; else { int e; (void) FREXP (x, &e); return (DOUBLE) (e - 1); } } else { if (ISNAN (x)) return x; /* NaN */ else /* Return +Infinity. */ return HUGEVAL; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/logbf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001520�14110572173�0016300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #define USE_FLOAT #include "logb.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/logbl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001706�14110572173�0016314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Floating-point exponent. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double logbl (long double x) { return logb (x); } #else # define USE_LONG_DOUBLE # include "logb.c" #endif ����������������������������������������������������������gnulib-20210822~d383792/lib/logf.c������������������������������������������������������������������0000664�0000000�0000000�00000002300�14110572173�0016133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Natural logarithmic function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float logf (float x) #undef logf { #if HAVE_LOGF if (x <= 0.0f) { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0f) /* Return -Infinity. */ return -1.0f / 0.0f; /* Work around the NetBSD 5.1 bug. */ else /* x < 0.0 */ /* Return NaN. */ return 0.0f / 0.0f; } return logf (x); #else return (float) log ((double) x); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/login_tty.c�������������������������������������������������������������0000664�0000000�0000000�00000004337�14110572173�0017230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Assign a given terminal as controlling terminal and as standard input, standard output, standard error of the current process. Copyright (C) 2010-2021 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/>. */ #include <config.h> /* Currently no specification header. */ #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> int login_tty (int slave_fd) { int i; /* Create a new session. */ setsid (); /* Make fd the controlling terminal for the current process. On BSD and OSF/1: There is ioctl TIOCSCTTY for this purpose. On Solaris: A terminal becomes the controlling terminal of a session if it is being open()ed, at a moment when 1. it is not already the controlling terminal of some session, and 2. the process that open()s it is a session leader that does not have a controlling terminal. We assume condition 1, try to ensure condition 2, and then open() it. */ for (i = 0; i < 3; i++) if (i != slave_fd) close (i); #ifdef TIOCSCTTY if (ioctl (slave_fd, TIOCSCTTY, NULL) < 0) return -1; #else { char *slave_name; int dummy_fd; slave_name = ttyname (slave_fd); if (slave_name == NULL) return -1; dummy_fd = open (slave_name, O_RDWR | O_CLOEXEC); if (dummy_fd < 0) return -1; close (dummy_fd); } #endif /* Assign fd to the standard input, standard output, and standard error of the current process. */ for (i = 0; i < 3; i++) if (slave_fd != i) if (dup2 (slave_fd, i) < 0) return -1; if (slave_fd >= 3) close (slave_fd); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/logl.c������������������������������������������������������������������0000664�0000000�0000000�00000022161�14110572173�0016150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov> 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double logl (long double x) { return log (x); } #elif 0 /* was: HAVE_LOGL */ long double logl (long double x) # undef logl { /* Work around the OSF/1 5.1 bug. */ if (x == 0.0L) /* Return -Infinity. */ return -1.0L / 0.0L; return logl (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/e_logl.c. */ /* logll.c * * Natural logarithm for 128-bit long double precision. * * * * SYNOPSIS: * * long double x, y, logl(); * * y = logl( x ); * * * * DESCRIPTION: * * Returns the base e (2.718...) logarithm of x. * * The argument is separated into its exponent and fractional * parts. Use of a lookup table increases the speed of the routine. * The program uses logarithms tabulated at intervals of 1/128 to * cover the domain from approximately 0.7 to 1.4. * * On the interval [-1/128, +1/128] the logarithm of 1+x is approximated by * log(1+x) = x - 0.5 x^2 + x^3 P(x) . * * * * ACCURACY: * * Relative error: * arithmetic domain # trials peak rms * IEEE 0.875, 1.125 100000 1.2e-34 4.1e-35 * IEEE 0.125, 8 100000 1.2e-34 4.1e-35 * * * WARNING: * * This program uses integer operations on bit fields of floating-point * numbers. It does not work with data structures other than the * structure assumed. * */ /* log(1+x) = x - .5 x^2 + x^3 l(x) -.0078125 <= x <= +.0078125 peak relative error 1.2e-37 */ static const long double l3 = 3.333333333333333333333333333333336096926E-1L, l4 = -2.499999999999999999999999999486853077002E-1L, l5 = 1.999999999999999999999999998515277861905E-1L, l6 = -1.666666666666666666666798448356171665678E-1L, l7 = 1.428571428571428571428808945895490721564E-1L, l8 = -1.249999999999999987884655626377588149000E-1L, l9 = 1.111111111111111093947834982832456459186E-1L, l10 = -1.000000000000532974938900317952530453248E-1L, l11 = 9.090909090915566247008015301349979892689E-2L, l12 = -8.333333211818065121250921925397567745734E-2L, l13 = 7.692307559897661630807048686258659316091E-2L, l14 = -7.144242754190814657241902218399056829264E-2L, l15 = 6.668057591071739754844678883223432347481E-2L; /* Lookup table of ln(t) - (t-1) t = 0.5 + (k+26)/128) k = 0, ..., 91 */ static const long double logtbl[92] = { -5.5345593589352099112142921677820359632418E-2L, -5.2108257402767124761784665198737642086148E-2L, -4.8991686870576856279407775480686721935120E-2L, -4.5993270766361228596215288742353061431071E-2L, -4.3110481649613269682442058976885699556950E-2L, -4.0340872319076331310838085093194799765520E-2L, -3.7682072451780927439219005993827431503510E-2L, -3.5131785416234343803903228503274262719586E-2L, -3.2687785249045246292687241862699949178831E-2L, -3.0347913785027239068190798397055267411813E-2L, -2.8110077931525797884641940838507561326298E-2L, -2.5972247078357715036426583294246819637618E-2L, -2.3932450635346084858612873953407168217307E-2L, -2.1988775689981395152022535153795155900240E-2L, -2.0139364778244501615441044267387667496733E-2L, -1.8382413762093794819267536615342902718324E-2L, -1.6716169807550022358923589720001638093023E-2L, -1.5138929457710992616226033183958974965355E-2L, -1.3649036795397472900424896523305726435029E-2L, -1.2244881690473465543308397998034325468152E-2L, -1.0924898127200937840689817557742469105693E-2L, -9.6875626072830301572839422532631079809328E-3L, -8.5313926245226231463436209313499745894157E-3L, -7.4549452072765973384933565912143044991706E-3L, -6.4568155251217050991200599386801665681310E-3L, -5.5356355563671005131126851708522185605193E-3L, -4.6900728132525199028885749289712348829878E-3L, -3.9188291218610470766469347968659624282519E-3L, -3.2206394539524058873423550293617843896540E-3L, -2.5942708080877805657374888909297113032132E-3L, -2.0385211375711716729239156839929281289086E-3L, -1.5522183228760777967376942769773768850872E-3L, -1.1342191863606077520036253234446621373191E-3L, -7.8340854719967065861624024730268350459991E-4L, -4.9869831458030115699628274852562992756174E-4L, -2.7902661731604211834685052867305795169688E-4L, -1.2335696813916860754951146082826952093496E-4L, -3.0677461025892873184042490943581654591817E-5L, # define ZERO logtbl[38] 0.0000000000000000000000000000000000000000E0L, -3.0359557945051052537099938863236321874198E-5L, -1.2081346403474584914595395755316412213151E-4L, -2.7044071846562177120083903771008342059094E-4L, -4.7834133324631162897179240322783590830326E-4L, -7.4363569786340080624467487620270965403695E-4L, -1.0654639687057968333207323853366578860679E-3L, -1.4429854811877171341298062134712230604279E-3L, -1.8753781835651574193938679595797367137975E-3L, -2.3618380914922506054347222273705859653658E-3L, -2.9015787624124743013946600163375853631299E-3L, -3.4938307889254087318399313316921940859043E-3L, -4.1378413103128673800485306215154712148146E-3L, -4.8328735414488877044289435125365629849599E-3L, -5.5782063183564351739381962360253116934243E-3L, -6.3731336597098858051938306767880719015261E-3L, -7.2169643436165454612058905294782949315193E-3L, -8.1090214990427641365934846191367315083867E-3L, -9.0486422112807274112838713105168375482480E-3L, -1.0035177140880864314674126398350812606841E-2L, -1.1067990155502102718064936259435676477423E-2L, -1.2146457974158024928196575103115488672416E-2L, -1.3269969823361415906628825374158424754308E-2L, -1.4437927104692837124388550722759686270765E-2L, -1.5649743073340777659901053944852735064621E-2L, -1.6904842527181702880599758489058031645317E-2L, -1.8202661505988007336096407340750378994209E-2L, -1.9542647000370545390701192438691126552961E-2L, -2.0924256670080119637427928803038530924742E-2L, -2.2346958571309108496179613803760727786257E-2L, -2.3810230892650362330447187267648486279460E-2L, -2.5313561699385640380910474255652501521033E-2L, -2.6856448685790244233704909690165496625399E-2L, -2.8438398935154170008519274953860128449036E-2L, -3.0058928687233090922411781058956589863039E-2L, -3.1717563112854831855692484086486099896614E-2L, -3.3413836095418743219397234253475252001090E-2L, -3.5147290019036555862676702093393332533702E-2L, -3.6917475563073933027920505457688955423688E-2L, -3.8723951502862058660874073462456610731178E-2L, -4.0566284516358241168330505467000838017425E-2L, -4.2444048996543693813649967076598766917965E-2L, -4.4356826869355401653098777649745233339196E-2L, -4.6304207416957323121106944474331029996141E-2L, -4.8285787106164123613318093945035804818364E-2L, -5.0301169421838218987124461766244507342648E-2L, -5.2349964705088137924875459464622098310997E-2L, -5.4431789996103111613753440311680967840214E-2L, -5.6546268881465384189752786409400404404794E-2L, -5.8693031345788023909329239565012647817664E-2L, -6.0871713627532018185577188079210189048340E-2L, -6.3081958078862169742820420185833800925568E-2L, -6.5323413029406789694910800219643791556918E-2L, -6.7595732653791419081537811574227049288168E-2L }; /* ln(2) = ln2a + ln2b with extended precision. */ static const long double ln2a = 6.93145751953125e-1L, ln2b = 1.4286068203094172321214581765680755001344E-6L; long double logl (long double x) { long double z, y, w; long double t; int k, e; /* Check for IEEE special cases. */ /* log(NaN) = NaN. */ if (isnanl (x)) { return x; } /* log(0) = -infinity. */ if (x == 0.0L) { return -0.5L / ZERO; } /* log ( x < 0 ) = NaN */ if (x < 0.0L) { return (x - x) / ZERO; } /* log (infinity) */ if (x + x == x) { return x + x; } /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625 */ x = frexpl (x, &e); if (x < 0.703125L) { x += x; e--; } /* On this interval the table is not used due to cancellation error. */ if ((x <= 1.0078125L) && (x >= 0.9921875L)) { z = x - 1.0L; k = 64; t = 1.0L; } else { k = floorl ((x - 0.5L) * 128.0L); t = 0.5L + k / 128.0L; z = (x - t) / t; } /* Series expansion of log(1+z). */ w = z * z; y = ((((((((((((l15 * z + l14) * z + l13) * z + l12) * z + l11) * z + l10) * z + l9) * z + l8) * z + l7) * z + l6) * z + l5) * z + l4) * z + l3) * z * w; y -= 0.5 * w; y += e * ln2b; /* Base 2 exponent offset times ln(2). */ y += z; y += logtbl[k-26]; /* log(t) - (t-1) */ y += (t - 1.0L); y += e * ln2a; return y; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/long-options.c����������������������������������������������������������0000664�0000000�0000000�00000007656�14110572173�0017657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Utility to accept --help and --version options as unobtrusively as possible. Copyright (C) 1993-1994, 1998-2000, 2002-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "long-options.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <getopt.h> #include "version-etc.h" #include "exitfail.h" static struct option const long_options[] = { {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'v'}, {NULL, 0, NULL, 0} }; /* Process long options --help and --version, but only if argc == 2. Be careful not to gobble up "--". */ void parse_long_options (int argc, char **argv, const char *command_name, const char *package, const char *version, void (*usage_func) (int), /* const char *author1, ...*/ ...) { int c; int saved_opterr; saved_opterr = opterr; /* Don't print an error message for unrecognized options. */ opterr = 0; if (argc == 2 && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1) { switch (c) { case 'h': (*usage_func) (EXIT_SUCCESS); break; case 'v': { va_list authors; va_start (authors, usage_func); version_etc_va (stdout, command_name, package, version, authors); exit (EXIT_SUCCESS); } default: /* Don't process any other long-named options. */ break; } } /* Restore previous value. */ opterr = saved_opterr; /* Reset this to zero so that getopt internals get initialized from the probably-new parameters when/if getopt is called later. */ optind = 0; } /* Process the GNU default long options --help and --version (see also https://gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html), and fail for any other unknown long or short option. Use with SCAN_ALL=true to scan until "--", or with SCAN_ALL=false to stop at the first non-option argument (or "--", whichever comes first). */ void parse_gnu_standard_options_only (int argc, char **argv, const char *command_name, const char *package, const char *version, bool scan_all, void (*usage_func) (int), /* const char *author1, ...*/ ...) { int c; int saved_opterr = opterr; /* Print an error message for unrecognized options. */ opterr = 1; const char *optstring = scan_all ? "" : "+"; if ((c = getopt_long (argc, argv, optstring, long_options, NULL)) != -1) { switch (c) { case 'h': (*usage_func) (EXIT_SUCCESS); break; case 'v': { va_list authors; va_start (authors, usage_func); version_etc_va (stdout, command_name, package, version, authors); exit (EXIT_SUCCESS); } default: (*usage_func) (exit_failure); break; } } /* Restore previous value. */ opterr = saved_opterr; } ����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/long-options.h����������������������������������������������������������0000664�0000000�0000000�00000003334�14110572173�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* long-options.h -- declaration for --help- and --version-handling function. Copyright (C) 1993-1994, 1998-1999, 2003, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef LONG_OPTIONS_H_ # define LONG_OPTIONS_H_ 1 # include <stdbool.h> void parse_long_options (int _argc, char **_argv, const char *_command_name, const char *_package, const char *_version, void (*_usage) (int), /* const char *author1, ...*/ ...); void parse_gnu_standard_options_only (int argc, char **argv, const char *command_name, const char *package, const char *version, bool scan_all, void (*usage_func) (int), /* const char *author1, ...*/ ...); #endif /* LONG_OPTIONS_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lseek.c�����������������������������������������������������������������0000664�0000000�0000000�00000003635�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An lseek() function that detects pipes. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Windows platforms. */ /* Get GetFileType. */ # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #else # include <sys/stat.h> #endif #include <errno.h> #undef lseek off_t rpl_lseek (int fd, off_t offset, int whence) { #if defined _WIN32 && ! defined __CYGWIN__ /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (GetFileType (h) != FILE_TYPE_DISK) { errno = ESPIPE; return -1; } #else /* BeOS lseek mistakenly succeeds on pipes... */ struct stat statbuf; if (fstat (fd, &statbuf) < 0) return -1; if (!S_ISREG (statbuf.st_mode)) { errno = ESPIPE; return -1; } #endif #if _GL_WINDOWS_64_BIT_OFF_T || (defined __MINGW32__ && defined _FILE_OFFSET_BITS && (_FILE_OFFSET_BITS == 64)) return _lseeki64 (fd, offset, whence); #else return lseek (fd, offset, whence); #endif } ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/lstat.c�����������������������������������������������������������������0000664�0000000�0000000�00000007236�14110572173�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around a bug of lstat on some systems Copyright (C) 1997-2006, 2008-2021 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 Jim Meyering */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to rpl_lstat. */ #define __need_system_sys_stat_h #include <config.h> #if !HAVE_LSTAT /* On systems that lack symlinks, our replacement <sys/stat.h> already defined lstat as stat, so there is nothing further to do other than avoid an empty file. */ typedef int dummy; #else /* HAVE_LSTAT */ /* Get the original definition of lstat. It might be defined as a macro. */ # include <sys/types.h> # include <sys/stat.h> # undef __need_system_sys_stat_h static int orig_lstat (const char *filename, struct stat *buf) { return lstat (filename, buf); } /* Specification. */ # ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" # else # include <sys/stat.h> # endif # include "stat-time.h" # include <string.h> # include <errno.h> /* lstat works differently on Linux and Solaris systems. POSIX (see "pathname resolution" in the glossary) requires that programs like 'ls' take into consideration the fact that FILE has a trailing slash when FILE is a symbolic link. On Linux and Solaris 10 systems, the lstat function already has the desired semantics (in treating 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', but on Solaris 9 and earlier it does not. If FILE has a trailing slash and specifies a symbolic link, then use stat() to get more info on the referent of FILE. If the referent is a non-directory, then set errno to ENOTDIR and return -1. Otherwise, return stat's result. */ int rpl_lstat (const char *file, struct stat *sbuf) { int result = orig_lstat (file, sbuf); /* This replacement file can blindly check against '/' rather than using the ISSLASH macro, because all platforms with '\\' either lack symlinks (mingw) or have working lstat (cygwin) and thus do not compile this file. 0 len should have already been filtered out above, with a failure return of ENOENT. */ if (result == 0) { if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') result = stat_time_normalize (result, sbuf); else { /* At this point, a trailing slash is permitted only on symlink-to-dir; but it should have found information on the directory, not the symlink. Call 'stat' to get info about the link's referent. Our replacement stat guarantees valid results, even if the symlink is not pointing to a directory. */ if (!S_ISLNK (sbuf->st_mode)) { errno = ENOTDIR; return -1; } result = stat (file, sbuf); } } return result; } #endif /* HAVE_LSTAT */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc.c����������������������������������������������������������������0000664�0000000�0000000�00000002430�14110572173�0016457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2021 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 Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Allocate an N-byte block of memory from the heap, even if N is 0. */ void * rpl_malloc (size_t n) { if (n == 0) n = 1; if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc.in.h�������������������������������������������������������������0000664�0000000�0000000�00000005207�14110572173�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <malloc.h>. Copyright (C) 2020-2021 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/>. */ #ifndef _@GUARD_PREFIX@_MALLOC_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_MALLOC_H@ # @INCLUDE_NEXT@ @NEXT_MALLOC_H@ #endif #ifndef _@GUARD_PREFIX@_MALLOC_H #define _@GUARD_PREFIX@_MALLOC_H /* Solaris declares memalign() in <stdlib.h>, not in <malloc.h>. Also get size_t and free(). */ #include <stdlib.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_MEMALIGN@ # if @REPLACE_MEMALIGN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memalign # define memalign rpl_memalign # endif _GL_FUNCDECL_RPL (memalign, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (memalign, void *, (size_t alignment, size_t size)); # else # if @HAVE_MEMALIGN@ # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate memalign with free or rpl_free. */ _GL_FUNCDECL_SYS (memalign, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (memalign, void *, (size_t alignment, size_t size)); # endif # endif # if @HAVE_MEMALIGN@ _GL_CXXALIASWARN (memalign); # endif #else # if __GNUC__ >= 11 && !defined memalign /* For -Wmismatched-dealloc: Associate memalign with free or rpl_free. */ _GL_FUNCDECL_SYS (memalign, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef memalign # if HAVE_RAW_DECL_MEMALIGN _GL_WARN_ON_USE (memalign, "memalign is not portable - " "use gnulib module memalign for portability"); # endif # endif #endif #endif /* _@GUARD_PREFIX@_MALLOC_H */ #endif /* _@GUARD_PREFIX@_MALLOC_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016314�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray-skeleton.c����������������������������������������������0000664�0000000�0000000�00000043551�14110572173�0022143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright (C) 2017-2021 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 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/>. */ /* Pre-processor macros which act as parameters: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); The following functions are provided are provided if the prerequisites are met: bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, DYNARRAY_FINAL_TYPE *); (if DYNARRAY_FINAL_TYPE is defined) DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, size_t *); (if DYNARRAY_FINAL_TYPE is not defined) */ #include <malloc/dynarray.h> #include <errno.h> #include <stdlib.h> #include <string.h> #ifndef DYNARRAY_STRUCT # error "DYNARRAY_STRUCT must be defined" #endif #ifndef DYNARRAY_ELEMENT # error "DYNARRAY_ELEMENT must be defined" #endif #ifndef DYNARRAY_PREFIX # error "DYNARRAY_PREFIX must be defined" #endif #ifdef DYNARRAY_INITIAL_SIZE # if DYNARRAY_INITIAL_SIZE < 0 # error "DYNARRAY_INITIAL_SIZE must be non-negative" # endif # if DYNARRAY_INITIAL_SIZE > 0 # define DYNARRAY_HAVE_SCRATCH 1 # else # define DYNARRAY_HAVE_SCRATCH 0 # endif #else /* Provide a reasonable default which limits the size of DYNARRAY_STRUCT. */ # define DYNARRAY_INITIAL_SIZE \ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) # define DYNARRAY_HAVE_SCRATCH 1 #endif /* Public type definitions. */ /* All fields of this struct are private to the implementation. */ struct DYNARRAY_STRUCT { union { struct dynarray_header dynarray_abstract; struct { /* These fields must match struct dynarray_header. */ size_t used; size_t allocated; DYNARRAY_ELEMENT *array; } dynarray_header; } u; #if DYNARRAY_HAVE_SCRATCH /* Initial inline allocation. */ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; #endif }; /* Internal use only: Helper macros. */ /* Ensure macro-expansion of DYNARRAY_PREFIX. */ #define DYNARRAY_CONCAT0(prefix, name) prefix##name #define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) #define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) /* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), so that Gnulib does not change 'free' to 'rpl_free'. */ #define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) /* Address of the scratch buffer if any. */ #if DYNARRAY_HAVE_SCRATCH # define DYNARRAY_SCRATCH(list) (list)->scratch #else # define DYNARRAY_SCRATCH(list) NULL #endif /* Internal use only: Helper functions. */ /* Internal function. Call DYNARRAY_ELEMENT_FREE with the array elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE macro expansion. */ static inline void DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, size_t __dynarray_used) { #ifdef DYNARRAY_ELEMENT_FREE for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); #endif /* DYNARRAY_ELEMENT_FREE */ } /* Internal function. Free the non-scratch array allocation. */ static inline void DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) { #if DYNARRAY_HAVE_SCRATCH if (list->u.dynarray_header.array != list->scratch) free (list->u.dynarray_header.array); #else free (list->u.dynarray_header.array); #endif } /* Public functions. */ /* Initialize a dynamic array object. This must be called before any use of the object. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) { list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); } /* Deallocate the dynamic array and its elements. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); DYNARRAY_NAME (init) (list); } /* Return true if the dynamic array is in an error state. */ __attribute_nonnull__ ((1)) static inline bool DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.allocated == __dynarray_error_marker (); } /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = __dynarray_error_marker (); } /* Return the number of elements which have been added to the dynamic array. */ __attribute_nonnull__ ((1)) static inline size_t DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.used; } /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) { if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list))) __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); return list->u.dynarray_header.array + index; } /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array; } /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array + list->u.dynarray_header.used; } /* Internal function. Slow path for the add function below. */ static void DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ __attribute_nonnull__ ((1)) static inline void DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) { DYNARRAY_NAME (add__) (list, item); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Internal function. Building block for the emplace functions below. Assumes space for one more element in *LIST. */ static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) { DYNARRAY_ELEMENT *result = &list->u.dynarray_header.array[list->u.dynarray_header.used]; ++list->u.dynarray_header.used; #if defined (DYNARRAY_ELEMENT_INIT) DYNARRAY_ELEMENT_INIT (result); #elif defined (DYNARRAY_ELEMENT_FREE) memset (result, 0, sizeof (*result)); #endif return result; } /* Internal function. Slow path for the emplace function below. */ static DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return NULL; } return DYNARRAY_NAME (emplace__tail__) (list); } /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static /* Avoid inlining with the larger initialization code. */ #if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) inline #endif DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return NULL; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) return (DYNARRAY_NAME (emplace__) (list)); return DYNARRAY_NAME (emplace__tail__) (list); } /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static bool DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) { if (size > list->u.dynarray_header.used) { bool ok; #if defined (DYNARRAY_ELEMENT_INIT) /* The new elements have to be initialized. */ size_t old_size = list->u.dynarray_header.used; ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); if (ok) for (size_t i = old_size; i < size; ++i) { DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); } #elif defined (DYNARRAY_ELEMENT_FREE) /* Zero initialization is needed so that the elements can be safely freed. */ ok = __libc_dynarray_resize_clear (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #else ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #endif if (__glibc_unlikely (!ok)) DYNARRAY_NAME (mark_failed) (list); return ok; } else { /* The list has shrunk in size. Free the removed elements. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array + size, list->u.dynarray_header.used - size); list->u.dynarray_header.used = size; return true; } } /* Remove the last element of LIST if it is present. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) { /* used > 0 implies that the array is the non-failed state. */ if (list->u.dynarray_header.used > 0) { size_t new_length = list->u.dynarray_header.used - 1; #ifdef DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); #endif list->u.dynarray_header.used = new_length; } } /* Remove all elements from the list. The elements are freed, but the list itself is not. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) { /* free__elements__ does nothing if the list is in the failed state. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); list->u.dynarray_header.used = 0; } #ifdef DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1, 2)) static bool DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; return true; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return false; } } #else /* !DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static DYNARRAY_ELEMENT * DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); if (lengthp != NULL) *lengthp = res.length; return res.array; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return NULL; } } #endif /* !DYNARRAY_FINAL_TYPE */ /* Undo macro definitions. */ #undef DYNARRAY_CONCAT0 #undef DYNARRAY_CONCAT1 #undef DYNARRAY_NAME #undef DYNARRAY_SCRATCH #undef DYNARRAY_HAVE_SCRATCH #undef DYNARRAY_STRUCT #undef DYNARRAY_ELEMENT #undef DYNARRAY_PREFIX #undef DYNARRAY_ELEMENT_FREE #undef DYNARRAY_ELEMENT_INIT #undef DYNARRAY_INITIAL_SIZE #undef DYNARRAY_FINAL_TYPE �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray.h�������������������������������������������������������0000664�0000000�0000000�00000014244�14110572173�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Shared definitions. Copyright (C) 2017-2021 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 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/>. */ /* To use the dynarray facility, you need to include <malloc/dynarray-skeleton.c> and define the parameter macros documented in that file. A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> Compared to scratch buffers, dynamic arrays have the following features: - They have an element type, and are not just an untyped buffer of bytes. - When growing, previously stored elements are preserved. (It is expected that scratch_buffer_grow_preserve and scratch_buffer_set_array_size eventually go away because all current users are moved to dynamic arrays.) - Scratch buffers have a more aggressive growth policy because growing them typically means a retry of an operation (across an NSS service module boundary), which is expensive. - For the same reason, scratch buffers have a much larger initial stack allocation. */ #ifndef _DYNARRAY_H #define _DYNARRAY_H #include <stdbool.h> #include <stddef.h> #include <string.h> struct dynarray_header { size_t used; size_t allocated; void *array; }; /* Marker used in the allocated member to indicate that an error was encountered. */ static inline size_t __dynarray_error_marker (void) { return -1; } /* Internal function. See the has_failed function in dynarray-skeleton.c. */ static inline bool __dynarray_error (struct dynarray_header *list) { return list->allocated == __dynarray_error_marker (); } /* Internal function. Enlarge the dynamically allocated area of the array to make room for one more element. SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, void *scratch, size_t element_size); /* Internal function. Enlarge the dynamically allocated area of the array to make room for at least SIZE elements (which must be larger than the existing used part of the dynamic array). SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_resize (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal function. Like __libc_dynarray_resize, but clear the new part of the dynamic array. */ bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal type. */ struct dynarray_finalize_result { void *array; size_t length; }; /* Internal function. Copy the dynamically-allocated area to an explicitly-sized heap allocation. SCRATCH is a pointer to the embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the element type. On success, true is returned, and pointer and length are written to *RESULT. On failure, false is returned. The caller has to take care of some of the memory management; this function is expected to be called from dynarray-skeleton.c. */ bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result); /* Internal function. Terminate the process after an index error. SIZE is the number of elements of the dynamic array. INDEX is the lookup index which triggered the failure. */ _Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); #ifndef _ISOMAC libc_hidden_proto (__libc_dynarray_emplace_enlarge) libc_hidden_proto (__libc_dynarray_resize) libc_hidden_proto (__libc_dynarray_resize_clear) libc_hidden_proto (__libc_dynarray_finalize) libc_hidden_proto (__libc_dynarray_at_failure) #endif #endif /* _DYNARRAY_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray_at_failure.c��������������������������������������������0000664�0000000�0000000�00000002415�14110572173�0022506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report an dynamic array index out of bounds condition. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> # include <stdlib.h> #endif #include <dynarray.h> #include <stdio.h> void __libc_dynarray_at_failure (size_t size, size_t index) { #ifdef _LIBC char buf[200]; __snprintf (buf, sizeof (buf), "Fatal glibc error: " "array index %zu not less than array length %zu\n", index, size); __libc_fatal (buf); #else abort (); #endif } libc_hidden_def (__libc_dynarray_at_failure) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray_emplace_enlarge.c���������������������������������������0000664�0000000�0000000�00000004521�14110572173�0023476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array in preparation of an emplace operation. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <intprops.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_emplace_enlarge (struct dynarray_header *list, void *scratch, size_t element_size) { size_t new_allocated; if (list->allocated == 0) { /* No scratch buffer provided. Choose a reasonable default size. */ if (element_size < 4) new_allocated = 16; else if (element_size < 8) new_allocated = 8; else new_allocated = 4; } else /* Increase the allocated size, using an exponential growth policy. */ { new_allocated = list->allocated + list->allocated / 2 + 1; if (new_allocated <= list->allocated) { /* Overflow. */ __set_errno (ENOMEM); return false; } } size_t new_size; if (INT_MULTIPLY_WRAPV (new_allocated, element_size, &new_size)) return false; void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size); if (new_array == NULL) return false; list->array = new_array; list->allocated = new_allocated; return true; } libc_hidden_def (__libc_dynarray_emplace_enlarge) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray_finalize.c����������������������������������������������0000664�0000000�0000000�00000004230�14110572173�0022171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy the dynamically-allocated area to an explicitly-sized heap allocation. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result) { if (__dynarray_error (list)) /* The caller will reported the deferred error. */ return false; size_t used = list->used; /* Empty list. */ if (used == 0) { /* An empty list could still be backed by a heap-allocated array. Free it if necessary. */ if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { NULL, 0 }; return true; } size_t allocation_size = used * element_size; void *heap_array = malloc (allocation_size); if (heap_array != NULL) { /* The new array takes ownership of the strings. */ if (list->array != NULL) memcpy (heap_array, list->array, allocation_size); if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { .array = heap_array, .length = used }; return true; } else /* The caller will perform the freeing operation. */ return false; } libc_hidden_def (__libc_dynarray_finalize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray_resize.c������������������������������������������������0000664�0000000�0000000�00000004112�14110572173�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <intprops.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_resize (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { /* The existing allocation provides sufficient room. */ if (size <= list->allocated) { list->used = size; return true; } /* Otherwise, use size as the new allocation size. The caller is expected to provide the final size of the array, so there is no over-allocation here. */ size_t new_size_bytes; if (INT_MULTIPLY_WRAPV (size, element_size, &new_size_bytes)) { /* Overflow. */ __set_errno (ENOMEM); return false; } void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size_bytes); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size_bytes); if (new_array == NULL) return false; list->array = new_array; list->allocated = size; list->used = size; return true; } libc_hidden_def (__libc_dynarray_resize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/dynarray_resize_clear.c������������������������������������������0000664�0000000�0000000�00000002660�14110572173�0023044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array and clear the new part. Copyright (C) 2017-2021 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 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 _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <string.h> bool __libc_dynarray_resize_clear (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { size_t old_size = list->used; if (!__libc_dynarray_resize (list, size, scratch, element_size)) return false; /* __libc_dynarray_resize already checked for overflow. */ char *array = list->array; memset (array + (old_size * element_size), 0, (size - old_size) * element_size); return true; } libc_hidden_def (__libc_dynarray_resize_clear) ��������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/scratch_buffer.h�������������������������������������������������0000664�0000000�0000000�00000013145�14110572173�0021451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2021 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 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 _SCRATCH_BUFFER_H #define _SCRATCH_BUFFER_H /* Scratch buffers with a default stack allocation and fallback to heap allocation. It is expected that this function is used in this way: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) return -1; scratch_buffer_free (&tmpbuf); return 0; The allocation functions (scratch_buffer_grow, scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make sure that the heap allocation, if any, is freed, so that the code above does not have a memory leak. The buffer still remains in a state that can be deallocated using scratch_buffer_free, so a loop like this is valid as well: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) break; scratch_buffer_free (&tmpbuf); scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed to grow the buffer by at least 512 bytes. This means that when using the scratch buffer as a backing store for a non-character array whose element size, in bytes, is 512 or smaller, the scratch buffer only has to grow once to make room for at least one more element. */ #include <stdbool.h> #include <stddef.h> #include <stdlib.h> /* Scratch buffer. Must be initialized with scratch_buffer_init before its use. */ struct scratch_buffer { void *data; /* Pointer to the beginning of the scratch area. */ size_t length; /* Allocated space at the data pointer, in bytes. */ union { max_align_t __align; char __c[1024]; } __space; }; /* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space and BUFFER->length reflects the available space. */ static inline void scratch_buffer_init (struct scratch_buffer *buffer) { buffer->data = buffer->__space.__c; buffer->length = sizeof (buffer->__space); } /* Deallocates *BUFFER (if it was heap-allocated). */ static inline void scratch_buffer_free (struct scratch_buffer *buffer) { if (buffer->data != buffer->__space.__c) free (buffer->data); } /* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT preserved. Return true on success, false on allocation failure (in which case the old buffer is freed). On success, the new buffer is larger than the previous size. On failure, *BUFFER is deallocated, but remains in a free-able state, and errno is set. */ bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); libc_hidden_proto (__libc_scratch_buffer_grow) /* Alias for __libc_scratch_buffer_grow. */ static __always_inline bool scratch_buffer_grow (struct scratch_buffer *buffer) { return __glibc_likely (__libc_scratch_buffer_grow (buffer)); } /* Like __libc_scratch_buffer_grow, but preserve the old buffer contents on success, as a prefix of the new buffer. */ bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); libc_hidden_proto (__libc_scratch_buffer_grow_preserve) /* Alias for __libc_scratch_buffer_grow_preserve. */ static __always_inline bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer) { return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer)); } /* Grow *BUFFER so that it can store at least NELEM elements of SIZE bytes. The buffer contents are NOT preserved. Both NELEM and SIZE can be zero. Return true on success, false on allocation failure (in which case the old buffer is freed, but *BUFFER remains in a free-able state, and errno is set). It is unspecified whether this function can reduce the array size. */ bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size); libc_hidden_proto (__libc_scratch_buffer_set_array_size) /* Alias for __libc_scratch_set_array_size. */ static __always_inline bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size) { return __glibc_likely (__libc_scratch_buffer_set_array_size (buffer, nelem, size)); } /* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, deallocating *BUFFER if it was heap-allocated. SIZE must be at most *BUFFER's size. Return NULL (setting errno) on memory exhaustion. */ void *__libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size); libc_hidden_proto (__libc_scratch_buffer_dupfree) /* Alias for __libc_scratch_dupfree. */ static __always_inline void * scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) { void *r = __libc_scratch_buffer_dupfree (buffer, size); return __glibc_likely (r != NULL) ? r : NULL; } #endif /* _SCRATCH_BUFFER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/scratch_buffer_dupfree.c�����������������������������������������0000664�0000000�0000000�00000002511�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2020-2021 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 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 _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <string.h> void * __libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) { void *data = buffer->data; if (data == buffer->__space.__c) { void *copy = malloc (size); return copy != NULL ? memcpy (copy, data, size) : NULL; } else { void *copy = realloc (data, size); return copy != NULL ? copy : data; } } libc_hidden_def (__libc_scratch_buffer_dupfree) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/scratch_buffer_grow.c��������������������������������������������0000664�0000000�0000000�00000003145�14110572173�0022501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2021 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 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 _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer) { void *new_ptr; size_t new_length = buffer->length * 2; /* Discard old buffer. */ scratch_buffer_free (buffer); /* Check for overflow. */ if (__glibc_likely (new_length >= buffer->length)) new_ptr = malloc (new_length); else { __set_errno (ENOMEM); new_ptr = NULL; } if (__glibc_unlikely (new_ptr == NULL)) { /* Buffer must remain valid to free. */ scratch_buffer_init (buffer); return false; } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_grow) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloc/scratch_buffer_grow_preserve.c�����������������������������������0000664�0000000�0000000�00000003754�14110572173�0024422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2021 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 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 _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> #include <string.h> bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer) { size_t new_length = 2 * buffer->length; void *new_ptr; if (buffer->data == buffer->__space.__c) { /* Move buffer to the heap. No overflow is possible because buffer->length describes a small buffer on the stack. */ new_ptr = malloc (new_length); if (new_ptr == NULL) return false; memcpy (new_ptr, buffer->__space.__c, buffer->length); } else { /* Buffer was already on the heap. Check for overflow. */ if (__glibc_likely (new_length >= buffer->length)) new_ptr = realloc (buffer->data, new_length); else { __set_errno (ENOMEM); new_ptr = NULL; } if (__glibc_unlikely (new_ptr == NULL)) { /* Deallocate, but buffer must remain valid to free. */ free (buffer->data); scratch_buffer_init (buffer); return false; } } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_grow_preserve) ��������������������gnulib-20210822~d383792/lib/malloc/scratch_buffer_set_array_size.c����������������������������������0000664�0000000�0000000�00000003653�14110572173�0024552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2021 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 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 _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> #include <limits.h> bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size) { size_t new_length = nelem * size; /* Avoid overflow check if both values are small. */ if ((nelem | size) >> (sizeof (size_t) * CHAR_BIT / 2) != 0 && nelem != 0 && size != new_length / nelem) { /* Overflow. Discard the old buffer, but it must remain valid to free. */ scratch_buffer_free (buffer); scratch_buffer_init (buffer); __set_errno (ENOMEM); return false; } if (new_length <= buffer->length) return true; /* Discard old buffer. */ scratch_buffer_free (buffer); char *new_ptr = malloc (new_length); if (new_ptr == NULL) { /* Buffer must remain valid to free. */ scratch_buffer_init (buffer); return false; } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_set_array_size) �������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloca.c���������������������������������������������������������������0000664�0000000�0000000�00000007253�14110572173�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. 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/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "malloca.h" #include "idx.h" #include "intprops.h" #include "verify.h" /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they are only invoked for big memory sizes. Here we use a bit in the address as an indicator, an idea by Ondřej Bílka. malloca() can return three types of pointers: - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap allocation. - NULL comes from a failed heap allocation. */ /* Type for holding very small pointer differences. */ typedef unsigned char small_t; /* Verify that it is wide enough. */ verify (2 * sa_alignment_max - 1 <= (small_t) -1); void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, used to determine the address to pass to freea(), and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1; int plus = sizeof (small_t) + alignment2_mask; idx_t nplus; if (!INT_ADD_WRAPV (n, plus, &nplus) && !xalloc_oversized (nplus, 1)) { char *mem = (char *) malloc (nplus); if (mem != NULL) { uintptr_t umem = (uintptr_t)mem, umemplus; /* The INT_ADD_WRAPV avoids signed integer overflow on theoretical platforms where UINTPTR_MAX <= INT_MAX. */ INT_ADD_WRAPV (umem, sizeof (small_t) + sa_alignment_max - 1, &umemplus); idx_t offset = ((umemplus & ~alignment2_mask) + sa_alignment_max - umem); void *vp = mem + offset; small_t *p = vp; /* Here p >= mem + sizeof (small_t), and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 hence p + n <= mem + nplus. So, the memory range [p, p+n) lies in the allocated memory range [mem, mem + nplus). */ p[-1] = offset; /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ return p; } } /* Out of memory. */ return NULL; #else # if !MALLOC_0_IS_NONNULL if (n == 0) n = 1; # endif return malloc (n); #endif } #if HAVE_ALLOCA void freea (void *p) { /* Check argument. */ if ((uintptr_t) p & (sa_alignment_max - 1)) { /* p was not the result of a malloca() call. Invalid argument. */ abort (); } /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ if ((uintptr_t) p & sa_alignment_max) { void *mem = (char *) p - ((small_t *) p)[-1]; free (mem); } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/malloca.h���������������������������������������������������������������0000664�0000000�0000000�00000010773�14110572173�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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 _MALLOCA_H #define _MALLOCA_H #include <alloca.h> #include <stddef.h> #include <stdlib.h> #include <stdint.h> #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* safe_alloca(N) is equivalent to alloca(N) when it is safe to call alloca(N); otherwise it returns NULL. It either returns N bytes of memory allocated on the stack, that lasts until the function returns, or NULL. Use of safe_alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns. */ #if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. This must be a macro, not a function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #endif /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* malloca(N) is a safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # define malloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : mmalloca (N)) #else # define malloca(N) \ mmalloca (N) #endif extern void *mmalloca (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)); /* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. N and S should be nonnegative and free of side effects. The array must be freed using freea() before the function returns. */ #define nmalloca(n, s) \ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define sa_alignof __alignof__ #elif defined __cplusplus template <class type> struct sa_alignof_helper { char __slot1; type __slot2; }; # define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2) #elif defined __hpux /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #elif defined _AIX /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #else # define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif enum { /* The desired alignment of memory allocations is the maximum alignment among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), sa_alignment_longlong = sa_alignof (long long), sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) | (sa_alignment_longlong - 1) | (sa_alignment_longdouble - 1) ) + 1 }; #endif /* _MALLOCA_H */ �����gnulib-20210822~d383792/lib/math.c������������������������������������������������������������������0000664�0000000�0000000�00000001533�14110572173�0016144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <math.h>. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_MATH_INLINE _GL_EXTERN_INLINE #include "math.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/math.in.h���������������������������������������������������������������0000664�0000000�0000000�00000231046�14110572173�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <math.h>. Copyright (C) 2002-2003, 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_MATH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_INCLUDING_MATH_H /* Special invocation convention: - On FreeBSD 12.2 we have a sequence of nested includes <math.h> -> <stdlib.h> -> <sys/wait.h> -> <sys/types.h> -> <sys/select.h> -> <signal.h> -> <pthread.h> -> <stdlib.h> -> <math.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #define _GL_INCLUDING_MATH_H #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #undef _GL_INCLUDING_MATH_H #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_H /* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ #if defined __VMS && ! defined NAN # include <fp.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_MATH_INLINE # define _GL_MATH_INLINE _GL_INLINE #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __const__ was added in gcc 2.95. */ #ifndef _GL_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST /* empty */ # 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. */ #ifdef __cplusplus /* Helper macros to define type-generic function FUNC as overloaded functions, rather than as macros like in C. POSIX declares these with an argument of real-floating (that is, one of float, double, or long double). */ # define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ static inline int \ _gl_cxx_ ## func ## f (float f) \ { \ return func (f); \ } \ static inline int \ _gl_cxx_ ## func ## d (double d) \ { \ return func (d); \ } \ static inline int \ _gl_cxx_ ## func ## l (long double l) \ { \ return func (l); \ } # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \ _GL_BEGIN_NAMESPACE \ inline rettype \ rpl_func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ inline rettype \ rpl_func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ inline rettype \ rpl_func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } \ _GL_END_NAMESPACE #endif /* Helper macros to define a portability warning for the classification macro FUNC called with VALUE. POSIX declares the classification macros with an argument of real-floating (that is, one of float, double, or long double). */ #define _GL_WARN_REAL_FLOATING_DECL(func) \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## f (float f) \ { \ return func (f); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## d (double d) \ { \ return func (d); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## l (long double l) \ { \ return func (l); \ } #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ : rpl_ ## func ## l (value)) #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ _GL_EXTERN_C void _Qp_itoq (long double *, int); static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; #endif /* POSIX allows platforms that don't support NAN. But all major machines in the past 15 years have supported something close to IEEE NaN, so we define this unconditionally. We also must define it on platforms like Solaris 10, where NAN is present but defined as a function pointer rather than a floating point constant. */ #if !defined NAN || @REPLACE_NAN@ # if !GNULIB_defined_NAN # undef NAN /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. */ # if defined __DECC || defined _MSC_VER _GL_MATH_INLINE float _NaN () { static float zero = 0.0f; return zero / zero; } # define NAN (_NaN()) # else # define NAN (0.0f / 0.0f) # endif # define GNULIB_defined_NAN 1 # endif #endif /* Solaris 10 defines HUGE_VAL, but as a function pointer rather than a floating point constant. */ #if @REPLACE_HUGE_VAL@ # undef HUGE_VALF # define HUGE_VALF (1.0f / 0.0f) # undef HUGE_VAL # define HUGE_VAL (1.0 / 0.0) # undef HUGE_VALL # define HUGE_VALL (1.0L / 0.0L) #endif /* HUGE_VALF is a 'float' Infinity. */ #ifndef HUGE_VALF # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ # define HUGE_VALF (1e25f * 1e25f) # else # define HUGE_VALF (1.0f / 0.0f) # endif #endif /* HUGE_VAL is a 'double' Infinity. */ #ifndef HUGE_VAL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ # define HUGE_VAL (1e250 * 1e250) # else # define HUGE_VAL (1.0 / 0.0) # endif #endif /* HUGE_VALL is a 'long double' Infinity. */ #ifndef HUGE_VALL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ # define HUGE_VALL (1e250L * 1e250L) # else # define HUGE_VALL (1.0L / 0.0L) # endif #endif #if defined FP_ILOGB0 && defined FP_ILOGBNAN /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # elif defined _AIX /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # elif defined __sun /* Solaris 9: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # else /* Gnulib defined values. */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #endif #if @GNULIB_ACOSF@ # if @REPLACE_ACOSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef acosf # define acosf rpl_acosf # endif _GL_FUNCDECL_RPL (acosf, float, (float x)); _GL_CXXALIAS_RPL (acosf, float, (float x)); # else # if !@HAVE_ACOSF@ # undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); # endif _GL_CXXALIAS_SYS (acosf, float, (float x)); # endif _GL_CXXALIASWARN (acosf); #elif defined GNULIB_POSIXCHECK # undef acosf # if HAVE_RAW_DECL_ACOSF _GL_WARN_ON_USE (acosf, "acosf is unportable - " "use gnulib module acosf for portability"); # endif #endif #if @GNULIB_ACOSL@ # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ # undef acosl _GL_FUNCDECL_SYS (acosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (acosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (acosl); # endif #elif defined GNULIB_POSIXCHECK # undef acosl # if HAVE_RAW_DECL_ACOSL _GL_WARN_ON_USE (acosl, "acosl is unportable - " "use gnulib module acosl for portability"); # endif #endif #if @GNULIB_ASINF@ # if @REPLACE_ASINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef asinf # define asinf rpl_asinf # endif _GL_FUNCDECL_RPL (asinf, float, (float x)); _GL_CXXALIAS_RPL (asinf, float, (float x)); # else # if !@HAVE_ASINF@ # undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); # endif _GL_CXXALIAS_SYS (asinf, float, (float x)); # endif _GL_CXXALIASWARN (asinf); #elif defined GNULIB_POSIXCHECK # undef asinf # if HAVE_RAW_DECL_ASINF _GL_WARN_ON_USE (asinf, "asinf is unportable - " "use gnulib module asinf for portability"); # endif #endif #if @GNULIB_ASINL@ # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ # undef asinl _GL_FUNCDECL_SYS (asinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (asinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (asinl); # endif #elif defined GNULIB_POSIXCHECK # undef asinl # if HAVE_RAW_DECL_ASINL _GL_WARN_ON_USE (asinl, "asinl is unportable - " "use gnulib module asinl for portability"); # endif #endif #if @GNULIB_ATANF@ # if @REPLACE_ATANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atanf # define atanf rpl_atanf # endif _GL_FUNCDECL_RPL (atanf, float, (float x)); _GL_CXXALIAS_RPL (atanf, float, (float x)); # else # if !@HAVE_ATANF@ # undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); # endif _GL_CXXALIAS_SYS (atanf, float, (float x)); # endif _GL_CXXALIASWARN (atanf); #elif defined GNULIB_POSIXCHECK # undef atanf # if HAVE_RAW_DECL_ATANF _GL_WARN_ON_USE (atanf, "atanf is unportable - " "use gnulib module atanf for portability"); # endif #endif #if @GNULIB_ATANL@ # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ # undef atanl _GL_FUNCDECL_SYS (atanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (atanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (atanl); # endif #elif defined GNULIB_POSIXCHECK # undef atanl # if HAVE_RAW_DECL_ATANL _GL_WARN_ON_USE (atanl, "atanl is unportable - " "use gnulib module atanl for portability"); # endif #endif #if @GNULIB_ATAN2F@ # if @REPLACE_ATAN2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atan2f # define atan2f rpl_atan2f # endif _GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); _GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); # else # if !@HAVE_ATAN2F@ # undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIASWARN (atan2f); #elif defined GNULIB_POSIXCHECK # undef atan2f # if HAVE_RAW_DECL_ATAN2F _GL_WARN_ON_USE (atan2f, "atan2f is unportable - " "use gnulib module atan2f for portability"); # endif #endif #if @GNULIB_CBRTF@ # if @REPLACE_CBRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtf # define cbrtf rpl_cbrtf # endif _GL_FUNCDECL_RPL (cbrtf, float, (float x)); _GL_CXXALIAS_RPL (cbrtf, float, (float x)); # else # if !@HAVE_DECL_CBRTF@ _GL_FUNCDECL_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIASWARN (cbrtf); #elif defined GNULIB_POSIXCHECK # undef cbrtf # if HAVE_RAW_DECL_CBRTF _GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " "use gnulib module cbrtf for portability"); # endif #endif #if @GNULIB_CBRT@ # if !@HAVE_CBRT@ _GL_FUNCDECL_SYS (cbrt, double, (double x)); # endif _GL_CXXALIAS_SYS (cbrt, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (cbrt, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef cbrt # if HAVE_RAW_DECL_CBRT _GL_WARN_ON_USE (cbrt, "cbrt is unportable - " "use gnulib module cbrt for portability"); # endif #endif #if @GNULIB_CBRTL@ # if @REPLACE_CBRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtl # define cbrtl rpl_cbrtl # endif _GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); _GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); # else # if !@HAVE_DECL_CBRTL@ _GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIASWARN (cbrtl); #elif defined GNULIB_POSIXCHECK # undef cbrtl # if HAVE_RAW_DECL_CBRTL _GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " "use gnulib module cbrtl for portability"); # endif #endif #if @GNULIB_CEILF@ # if @REPLACE_CEILF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceilf # define ceilf rpl_ceilf # endif _GL_FUNCDECL_RPL (ceilf, float, (float x)); _GL_CXXALIAS_RPL (ceilf, float, (float x)); # else # if !@HAVE_DECL_CEILF@ # undef ceilf _GL_FUNCDECL_SYS (ceilf, float, (float x)); # endif _GL_CXXALIAS_SYS (ceilf, float, (float x)); # endif _GL_CXXALIASWARN (ceilf); #elif defined GNULIB_POSIXCHECK # undef ceilf # if HAVE_RAW_DECL_CEILF _GL_WARN_ON_USE (ceilf, "ceilf is unportable - " "use gnulib module ceilf for portability"); # endif #endif #if @GNULIB_CEIL@ # if @REPLACE_CEIL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceil # define ceil rpl_ceil # endif _GL_FUNCDECL_RPL (ceil, double, (double x)); _GL_CXXALIAS_RPL (ceil, double, (double x)); # else _GL_CXXALIAS_SYS (ceil, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ceil, double, (double x)); # endif #endif #if @GNULIB_CEILL@ # if @REPLACE_CEILL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceill # define ceill rpl_ceill # endif _GL_FUNCDECL_RPL (ceill, long double, (long double x)); _GL_CXXALIAS_RPL (ceill, long double, (long double x)); # else # if !@HAVE_DECL_CEILL@ # undef ceill _GL_FUNCDECL_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIAS_SYS (ceill, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ceill); # endif #elif defined GNULIB_POSIXCHECK # undef ceill # if HAVE_RAW_DECL_CEILL _GL_WARN_ON_USE (ceill, "ceill is unportable - " "use gnulib module ceill for portability"); # endif #endif #if @GNULIB_COPYSIGNF@ # if !@HAVE_DECL_COPYSIGNF@ # undef copysignf _GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); _GL_CXXALIASWARN (copysignf); #elif defined GNULIB_POSIXCHECK # undef copysignf # if HAVE_RAW_DECL_COPYSIGNF _GL_WARN_ON_USE (copysignf, "copysignf is unportable - " "use gnulib module copysignf for portability"); # endif #endif #if @GNULIB_COPYSIGN@ # if !@HAVE_COPYSIGN@ _GL_FUNCDECL_SYS (copysign, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (copysign, double, (double x, double y)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (copysign, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef copysign # if HAVE_RAW_DECL_COPYSIGN _GL_WARN_ON_USE (copysign, "copysign is unportable - " "use gnulib module copysign for portability"); # endif #endif #if @GNULIB_COPYSIGNL@ # if !@HAVE_COPYSIGNL@ _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); _GL_CXXALIASWARN (copysignl); #elif defined GNULIB_POSIXCHECK # undef copysignl # if HAVE_RAW_DECL_COPYSIGNL _GL_WARN_ON_USE (copysign, "copysignl is unportable - " "use gnulib module copysignl for portability"); # endif #endif #if @GNULIB_COSF@ # if @REPLACE_COSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cosf # define cosf rpl_cosf # endif _GL_FUNCDECL_RPL (cosf, float, (float x)); _GL_CXXALIAS_RPL (cosf, float, (float x)); # else # if !@HAVE_COSF@ # undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); # endif _GL_CXXALIAS_SYS (cosf, float, (float x)); # endif _GL_CXXALIASWARN (cosf); #elif defined GNULIB_POSIXCHECK # undef cosf # if HAVE_RAW_DECL_COSF _GL_WARN_ON_USE (cosf, "cosf is unportable - " "use gnulib module cosf for portability"); # endif #endif #if @GNULIB_COSL@ # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ # undef cosl _GL_FUNCDECL_SYS (cosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (cosl); # endif #elif defined GNULIB_POSIXCHECK # undef cosl # if HAVE_RAW_DECL_COSL _GL_WARN_ON_USE (cosl, "cosl is unportable - " "use gnulib module cosl for portability"); # endif #endif #if @GNULIB_COSHF@ # if @REPLACE_COSHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef coshf # define coshf rpl_coshf # endif _GL_FUNCDECL_RPL (coshf, float, (float x)); _GL_CXXALIAS_RPL (coshf, float, (float x)); # else # if !@HAVE_COSHF@ # undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); # endif _GL_CXXALIAS_SYS (coshf, float, (float x)); # endif _GL_CXXALIASWARN (coshf); #elif defined GNULIB_POSIXCHECK # undef coshf # if HAVE_RAW_DECL_COSHF _GL_WARN_ON_USE (coshf, "coshf is unportable - " "use gnulib module coshf for portability"); # endif #endif #if @GNULIB_EXPF@ # if @REPLACE_EXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expf # define expf rpl_expf # endif _GL_FUNCDECL_RPL (expf, float, (float x)); _GL_CXXALIAS_RPL (expf, float, (float x)); # else # if !@HAVE_EXPF@ # undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); # endif _GL_CXXALIAS_SYS (expf, float, (float x)); # endif _GL_CXXALIASWARN (expf); #elif defined GNULIB_POSIXCHECK # undef expf # if HAVE_RAW_DECL_EXPF _GL_WARN_ON_USE (expf, "expf is unportable - " "use gnulib module expf for portability"); # endif #endif #if @GNULIB_EXPL@ # if @REPLACE_EXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expl # define expl rpl_expl # endif _GL_FUNCDECL_RPL (expl, long double, (long double x)); _GL_CXXALIAS_RPL (expl, long double, (long double x)); # else # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ # undef expl _GL_FUNCDECL_SYS (expl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (expl); # endif #elif defined GNULIB_POSIXCHECK # undef expl # if HAVE_RAW_DECL_EXPL _GL_WARN_ON_USE (expl, "expl is unportable - " "use gnulib module expl for portability"); # endif #endif #if @GNULIB_EXP2F@ # if !@HAVE_DECL_EXP2F@ _GL_FUNCDECL_SYS (exp2f, float, (float x)); # endif _GL_CXXALIAS_SYS (exp2f, float, (float x)); _GL_CXXALIASWARN (exp2f); #elif defined GNULIB_POSIXCHECK # undef exp2f # if HAVE_RAW_DECL_EXP2F _GL_WARN_ON_USE (exp2f, "exp2f is unportable - " "use gnulib module exp2f for portability"); # endif #endif #if @GNULIB_EXP2@ # if @REPLACE_EXP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2 # define exp2 rpl_exp2 # endif _GL_FUNCDECL_RPL (exp2, double, (double x)); _GL_CXXALIAS_RPL (exp2, double, (double x)); # else # if !@HAVE_DECL_EXP2@ _GL_FUNCDECL_SYS (exp2, double, (double x)); # endif _GL_CXXALIAS_SYS (exp2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (exp2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef exp2 # if HAVE_RAW_DECL_EXP2 _GL_WARN_ON_USE (exp2, "exp2 is unportable - " "use gnulib module exp2 for portability"); # endif #endif #if @GNULIB_EXP2L@ # if @REPLACE_EXP2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2l # define exp2l rpl_exp2l # endif _GL_FUNCDECL_RPL (exp2l, long double, (long double x)); _GL_CXXALIAS_RPL (exp2l, long double, (long double x)); # else # if !@HAVE_DECL_EXP2L@ # undef exp2l _GL_FUNCDECL_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIASWARN (exp2l); #elif defined GNULIB_POSIXCHECK # undef exp2l # if HAVE_RAW_DECL_EXP2L _GL_WARN_ON_USE (exp2l, "exp2l is unportable - " "use gnulib module exp2l for portability"); # endif #endif #if @GNULIB_EXPM1F@ # if @REPLACE_EXPM1F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1f # define expm1f rpl_expm1f # endif _GL_FUNCDECL_RPL (expm1f, float, (float x)); _GL_CXXALIAS_RPL (expm1f, float, (float x)); # else # if !@HAVE_EXPM1F@ _GL_FUNCDECL_SYS (expm1f, float, (float x)); # endif _GL_CXXALIAS_SYS (expm1f, float, (float x)); # endif _GL_CXXALIASWARN (expm1f); #elif defined GNULIB_POSIXCHECK # undef expm1f # if HAVE_RAW_DECL_EXPM1F _GL_WARN_ON_USE (expm1f, "expm1f is unportable - " "use gnulib module expm1f for portability"); # endif #endif #if @GNULIB_EXPM1@ # if @REPLACE_EXPM1@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1 # define expm1 rpl_expm1 # endif _GL_FUNCDECL_RPL (expm1, double, (double x)); _GL_CXXALIAS_RPL (expm1, double, (double x)); # else # if !@HAVE_EXPM1@ _GL_FUNCDECL_SYS (expm1, double, (double x)); # endif _GL_CXXALIAS_SYS (expm1, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (expm1, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef expm1 # if HAVE_RAW_DECL_EXPM1 _GL_WARN_ON_USE (expm1, "expm1 is unportable - " "use gnulib module expm1 for portability"); # endif #endif #if @GNULIB_EXPM1L@ # if @REPLACE_EXPM1L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1l # define expm1l rpl_expm1l # endif _GL_FUNCDECL_RPL (expm1l, long double, (long double x)); _GL_CXXALIAS_RPL (expm1l, long double, (long double x)); # else # if !@HAVE_DECL_EXPM1L@ # undef expm1l # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (expm1l, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (expm1l, long double, (long double x)); # endif _GL_CXXALIASWARN (expm1l); #elif defined GNULIB_POSIXCHECK # undef expm1l # if HAVE_RAW_DECL_EXPM1L _GL_WARN_ON_USE (expm1l, "expm1l is unportable - " "use gnulib module expm1l for portability"); # endif #endif #if @GNULIB_FABSF@ # if !@HAVE_FABSF@ # undef fabsf _GL_FUNCDECL_SYS (fabsf, float, (float x)); # endif _GL_CXXALIAS_SYS (fabsf, float, (float x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsf); # endif #elif defined GNULIB_POSIXCHECK # undef fabsf # if HAVE_RAW_DECL_FABSF _GL_WARN_ON_USE (fabsf, "fabsf is unportable - " "use gnulib module fabsf for portability"); # endif #endif #if @GNULIB_FABSL@ # if @REPLACE_FABSL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fabsl # define fabsl rpl_fabsl # endif _GL_FUNCDECL_RPL (fabsl, long double, (long double x)); _GL_CXXALIAS_RPL (fabsl, long double, (long double x)); # else # if !@HAVE_FABSL@ # undef fabsl _GL_FUNCDECL_SYS (fabsl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (fabsl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsl); # endif #elif defined GNULIB_POSIXCHECK # undef fabsl # if HAVE_RAW_DECL_FABSL _GL_WARN_ON_USE (fabsl, "fabsl is unportable - " "use gnulib module fabsl for portability"); # endif #endif #if @GNULIB_FLOORF@ # if @REPLACE_FLOORF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorf # define floorf rpl_floorf # endif _GL_FUNCDECL_RPL (floorf, float, (float x)); _GL_CXXALIAS_RPL (floorf, float, (float x)); # else # if !@HAVE_DECL_FLOORF@ # undef floorf _GL_FUNCDECL_SYS (floorf, float, (float x)); # endif _GL_CXXALIAS_SYS (floorf, float, (float x)); # endif _GL_CXXALIASWARN (floorf); #elif defined GNULIB_POSIXCHECK # undef floorf # if HAVE_RAW_DECL_FLOORF _GL_WARN_ON_USE (floorf, "floorf is unportable - " "use gnulib module floorf for portability"); # endif #endif #if @GNULIB_FLOOR@ # if @REPLACE_FLOOR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floor # define floor rpl_floor # endif _GL_FUNCDECL_RPL (floor, double, (double x)); _GL_CXXALIAS_RPL (floor, double, (double x)); # else _GL_CXXALIAS_SYS (floor, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (floor, double, (double x)); # endif #endif #if @GNULIB_FLOORL@ # if @REPLACE_FLOORL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorl # define floorl rpl_floorl # endif _GL_FUNCDECL_RPL (floorl, long double, (long double x)); _GL_CXXALIAS_RPL (floorl, long double, (long double x)); # else # if !@HAVE_DECL_FLOORL@ # undef floorl _GL_FUNCDECL_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (floorl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (floorl); # endif #elif defined GNULIB_POSIXCHECK # undef floorl # if HAVE_RAW_DECL_FLOORL _GL_WARN_ON_USE (floorl, "floorl is unportable - " "use gnulib module floorl for portability"); # endif #endif #if @GNULIB_FMAF@ # if @REPLACE_FMAF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmaf # define fmaf rpl_fmaf # endif _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); # else # if !@HAVE_FMAF@ # undef fmaf _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIASWARN (fmaf); #elif defined GNULIB_POSIXCHECK # undef fmaf # if HAVE_RAW_DECL_FMAF _GL_WARN_ON_USE (fmaf, "fmaf is unportable - " "use gnulib module fmaf for portability"); # endif #endif #if @GNULIB_FMA@ # if @REPLACE_FMA@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fma # define fma rpl_fma # endif _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); # else # if !@HAVE_FMA@ # undef fma _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fma, double, (double x, double y, double z)); # endif #elif defined GNULIB_POSIXCHECK # undef fma # if HAVE_RAW_DECL_FMA _GL_WARN_ON_USE (fma, "fma is unportable - " "use gnulib module fma for portability"); # endif #endif #if @GNULIB_FMAL@ # if @REPLACE_FMAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmal # define fmal rpl_fmal # endif _GL_FUNCDECL_RPL (fmal, long double, (long double x, long double y, long double z)); _GL_CXXALIAS_RPL (fmal, long double, (long double x, long double y, long double z)); # else # if !@HAVE_FMAL@ # undef fmal # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); # endif # endif _GL_CXXALIAS_SYS (fmal, long double, (long double x, long double y, long double z)); # endif _GL_CXXALIASWARN (fmal); #elif defined GNULIB_POSIXCHECK # undef fmal # if HAVE_RAW_DECL_FMAL _GL_WARN_ON_USE (fmal, "fmal is unportable - " "use gnulib module fmal for portability"); # endif #endif #if @GNULIB_FMODF@ # if @REPLACE_FMODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodf # define fmodf rpl_fmodf # endif _GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); _GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); # else # if !@HAVE_FMODF@ # undef fmodf _GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIASWARN (fmodf); #elif defined GNULIB_POSIXCHECK # undef fmodf # if HAVE_RAW_DECL_FMODF _GL_WARN_ON_USE (fmodf, "fmodf is unportable - " "use gnulib module fmodf for portability"); # endif #endif #if @GNULIB_FMOD@ # if @REPLACE_FMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmod # define fmod rpl_fmod # endif _GL_FUNCDECL_RPL (fmod, double, (double x, double y)); _GL_CXXALIAS_RPL (fmod, double, (double x, double y)); # else _GL_CXXALIAS_SYS (fmod, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fmod, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef fmod # if HAVE_RAW_DECL_FMOD _GL_WARN_ON_USE (fmod, "fmod has portability problems - " "use gnulib module fmod for portability"); # endif #endif #if @GNULIB_FMODL@ # if @REPLACE_FMODL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodl # define fmodl rpl_fmodl # endif _GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); # else # if !@HAVE_FMODL@ # undef fmodl _GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fmodl); # endif #elif defined GNULIB_POSIXCHECK # undef fmodl # if HAVE_RAW_DECL_FMODL _GL_WARN_ON_USE (fmodl, "fmodl is unportable - " "use gnulib module fmodl for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPF@ # if @REPLACE_FREXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpf # define frexpf rpl_frexpf # endif _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); # else # if !@HAVE_FREXPF@ # undef frexpf _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpf); # endif #elif defined GNULIB_POSIXCHECK # undef frexpf # if HAVE_RAW_DECL_FREXPF _GL_WARN_ON_USE (frexpf, "frexpf is unportable - " "use gnulib module frexpf for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXP@ # if @REPLACE_FREXP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexp # define frexp rpl_frexp # endif _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); # else _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); # endif #elif defined GNULIB_POSIXCHECK # undef frexp /* Assume frexp is always declared. */ _GL_WARN_ON_USE (frexp, "frexp is unportable - " "use gnulib module frexp for portability"); #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpl # define frexpl rpl_frexpl # endif _GL_FUNCDECL_RPL (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); #else # if !@HAVE_DECL_FREXPL@ _GL_FUNCDECL_SYS (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); # endif # if @GNULIB_FREXPL@ _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); # endif #endif #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpl); # endif #endif #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK # undef frexpl # if HAVE_RAW_DECL_FREXPL _GL_WARN_ON_USE (frexpl, "frexpl is unportable - " "use gnulib module frexpl for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTF@ # if @REPLACE_HYPOTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotf # define hypotf rpl_hypotf # endif _GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); _GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); # else # if !@HAVE_HYPOTF@ _GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotf); # endif #elif defined GNULIB_POSIXCHECK # undef hypotf # if HAVE_RAW_DECL_HYPOTF _GL_WARN_ON_USE (hypotf, "hypotf is unportable - " "use gnulib module hypotf for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOT@ # if @REPLACE_HYPOT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypot # define hypot rpl_hypot # endif _GL_FUNCDECL_RPL (hypot, double, (double x, double y)); _GL_CXXALIAS_RPL (hypot, double, (double x, double y)); # else _GL_CXXALIAS_SYS (hypot, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (hypot, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef hypot # if HAVE_RAW_DECL_HYPOT _GL_WARN_ON_USE (hypotf, "hypot has portability problems - " "use gnulib module hypot for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTL@ # if @REPLACE_HYPOTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotl # define hypotl rpl_hypotl # endif _GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); # else # if !@HAVE_HYPOTL@ _GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotl); # endif #elif defined GNULIB_POSIXCHECK # undef hypotl # if HAVE_RAW_DECL_HYPOTL _GL_WARN_ON_USE (hypotl, "hypotl is unportable - " "use gnulib module hypotl for portability"); # endif #endif #if @GNULIB_ILOGBF@ # if @REPLACE_ILOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbf # define ilogbf rpl_ilogbf # endif _GL_FUNCDECL_RPL (ilogbf, int, (float x)); _GL_CXXALIAS_RPL (ilogbf, int, (float x)); # else # if !@HAVE_ILOGBF@ _GL_FUNCDECL_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIAS_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIASWARN (ilogbf); #elif defined GNULIB_POSIXCHECK # undef ilogbf # if HAVE_RAW_DECL_ILOGBF _GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " "use gnulib module ilogbf for portability"); # endif #endif #if @GNULIB_ILOGB@ # if @REPLACE_ILOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogb # define ilogb rpl_ilogb # endif _GL_FUNCDECL_RPL (ilogb, int, (double x)); _GL_CXXALIAS_RPL (ilogb, int, (double x)); # else # if !@HAVE_ILOGB@ _GL_FUNCDECL_SYS (ilogb, int, (double x)); # endif _GL_CXXALIAS_SYS (ilogb, int, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ilogb, int, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef ilogb # if HAVE_RAW_DECL_ILOGB _GL_WARN_ON_USE (ilogb, "ilogb is unportable - " "use gnulib module ilogb for portability"); # endif #endif #if @GNULIB_ILOGBL@ # if @REPLACE_ILOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbl # define ilogbl rpl_ilogbl # endif _GL_FUNCDECL_RPL (ilogbl, int, (long double x)); _GL_CXXALIAS_RPL (ilogbl, int, (long double x)); # else # if !@HAVE_ILOGBL@ # undef ilogbl _GL_FUNCDECL_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIAS_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIASWARN (ilogbl); #elif defined GNULIB_POSIXCHECK # undef ilogbl # if HAVE_RAW_DECL_ILOGBL _GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " "use gnulib module ilogbl for portability"); # endif #endif #if @GNULIB_MDA_J0@ /* On native Windows, map 'j0' to '_j0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j0 # define j0 _j0 # endif _GL_CXXALIAS_MDA (j0, double, (double x)); # else _GL_CXXALIAS_SYS (j0, double, (double x)); # endif _GL_CXXALIASWARN (j0); #endif #if @GNULIB_MDA_J1@ /* On native Windows, map 'j1' to '_j1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j1 # define j1 _j1 # endif _GL_CXXALIAS_MDA (j1, double, (double x)); # else _GL_CXXALIAS_SYS (j1, double, (double x)); # endif _GL_CXXALIASWARN (j1); #endif #if @GNULIB_MDA_JN@ /* On native Windows, map 'jn' to '_jn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::jn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef jn # define jn _jn # endif _GL_CXXALIAS_MDA (jn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (jn, double, (int n, double x)); # endif _GL_CXXALIASWARN (jn); #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPF@ # if !@HAVE_LDEXPF@ # undef ldexpf _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); # endif _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpf); # endif #elif defined GNULIB_POSIXCHECK # undef ldexpf # if HAVE_RAW_DECL_LDEXPF _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " "use gnulib module ldexpf for portability"); # endif #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ldexpl # define ldexpl rpl_ldexpl # endif _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); #else # if !@HAVE_DECL_LDEXPL@ _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); # endif # if @GNULIB_LDEXPL@ _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); # endif #endif #if @GNULIB_LDEXPL@ # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpl); # endif #endif #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK # undef ldexpl # if HAVE_RAW_DECL_LDEXPL _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " "use gnulib module ldexpl for portability"); # endif #endif #if @GNULIB_LOGF@ # if @REPLACE_LOGF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logf # define logf rpl_logf # endif _GL_FUNCDECL_RPL (logf, float, (float x)); _GL_CXXALIAS_RPL (logf, float, (float x)); # else # if !@HAVE_LOGF@ # undef logf _GL_FUNCDECL_SYS (logf, float, (float x)); # endif _GL_CXXALIAS_SYS (logf, float, (float x)); # endif _GL_CXXALIASWARN (logf); #elif defined GNULIB_POSIXCHECK # undef logf # if HAVE_RAW_DECL_LOGF _GL_WARN_ON_USE (logf, "logf is unportable - " "use gnulib module logf for portability"); # endif #endif #if @GNULIB_LOG@ # if @REPLACE_LOG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log # define log rpl_log # endif _GL_FUNCDECL_RPL (log, double, (double x)); _GL_CXXALIAS_RPL (log, double, (double x)); # else _GL_CXXALIAS_SYS (log, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log # if HAVE_RAW_DECL_LOG _GL_WARN_ON_USE (log, "log has portability problems - " "use gnulib module log for portability"); # endif #endif #if @GNULIB_LOGL@ # if @REPLACE_LOGL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logl # define logl rpl_logl # endif _GL_FUNCDECL_RPL (logl, long double, (long double x)); _GL_CXXALIAS_RPL (logl, long double, (long double x)); # else # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ # undef logl _GL_FUNCDECL_SYS (logl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (logl); # endif #elif defined GNULIB_POSIXCHECK # undef logl # if HAVE_RAW_DECL_LOGL _GL_WARN_ON_USE (logl, "logl is unportable - " "use gnulib module logl for portability"); # endif #endif #if @GNULIB_LOG10F@ # if @REPLACE_LOG10F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10f # define log10f rpl_log10f # endif _GL_FUNCDECL_RPL (log10f, float, (float x)); _GL_CXXALIAS_RPL (log10f, float, (float x)); # else # if !@HAVE_LOG10F@ # undef log10f _GL_FUNCDECL_SYS (log10f, float, (float x)); # endif _GL_CXXALIAS_SYS (log10f, float, (float x)); # endif _GL_CXXALIASWARN (log10f); #elif defined GNULIB_POSIXCHECK # undef log10f # if HAVE_RAW_DECL_LOG10F _GL_WARN_ON_USE (log10f, "log10f is unportable - " "use gnulib module log10f for portability"); # endif #endif #if @GNULIB_LOG10@ # if @REPLACE_LOG10@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10 # define log10 rpl_log10 # endif _GL_FUNCDECL_RPL (log10, double, (double x)); _GL_CXXALIAS_RPL (log10, double, (double x)); # else _GL_CXXALIAS_SYS (log10, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log10, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log10 # if HAVE_RAW_DECL_LOG10 _GL_WARN_ON_USE (log10, "log10 has portability problems - " "use gnulib module log10 for portability"); # endif #endif #if @GNULIB_LOG10L@ # if @REPLACE_LOG10L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10l # define log10l rpl_log10l # endif _GL_FUNCDECL_RPL (log10l, long double, (long double x)); _GL_CXXALIAS_RPL (log10l, long double, (long double x)); # else # if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ # undef log10l _GL_FUNCDECL_SYS (log10l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log10l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log10l); # endif #elif defined GNULIB_POSIXCHECK # undef log10l # if HAVE_RAW_DECL_LOG10L _GL_WARN_ON_USE (log10l, "log10l is unportable - " "use gnulib module log10l for portability"); # endif #endif #if @GNULIB_LOG1PF@ # if @REPLACE_LOG1PF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pf # define log1pf rpl_log1pf # endif _GL_FUNCDECL_RPL (log1pf, float, (float x)); _GL_CXXALIAS_RPL (log1pf, float, (float x)); # else # if !@HAVE_LOG1PF@ _GL_FUNCDECL_SYS (log1pf, float, (float x)); # endif _GL_CXXALIAS_SYS (log1pf, float, (float x)); # endif _GL_CXXALIASWARN (log1pf); #elif defined GNULIB_POSIXCHECK # undef log1pf # if HAVE_RAW_DECL_LOG1PF _GL_WARN_ON_USE (log1pf, "log1pf is unportable - " "use gnulib module log1pf for portability"); # endif #endif #if @GNULIB_LOG1P@ # if @REPLACE_LOG1P@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1p # define log1p rpl_log1p # endif _GL_FUNCDECL_RPL (log1p, double, (double x)); _GL_CXXALIAS_RPL (log1p, double, (double x)); # else # if !@HAVE_LOG1P@ _GL_FUNCDECL_SYS (log1p, double, (double x)); # endif _GL_CXXALIAS_SYS (log1p, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log1p, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log1p # if HAVE_RAW_DECL_LOG1P _GL_WARN_ON_USE (log1p, "log1p has portability problems - " "use gnulib module log1p for portability"); # endif #endif #if @GNULIB_LOG1PL@ # if @REPLACE_LOG1PL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pl # define log1pl rpl_log1pl # endif _GL_FUNCDECL_RPL (log1pl, long double, (long double x)); _GL_CXXALIAS_RPL (log1pl, long double, (long double x)); # else # if !@HAVE_LOG1PL@ _GL_FUNCDECL_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIASWARN (log1pl); #elif defined GNULIB_POSIXCHECK # undef log1pl # if HAVE_RAW_DECL_LOG1PL _GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " "use gnulib module log1pl for portability"); # endif #endif #if @GNULIB_LOG2F@ # if @REPLACE_LOG2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2f # define log2f rpl_log2f # endif _GL_FUNCDECL_RPL (log2f, float, (float x)); _GL_CXXALIAS_RPL (log2f, float, (float x)); # else # if !@HAVE_DECL_LOG2F@ # undef log2f _GL_FUNCDECL_SYS (log2f, float, (float x)); # endif _GL_CXXALIAS_SYS (log2f, float, (float x)); # endif _GL_CXXALIASWARN (log2f); #elif defined GNULIB_POSIXCHECK # undef log2f # if HAVE_RAW_DECL_LOG2F _GL_WARN_ON_USE (log2f, "log2f is unportable - " "use gnulib module log2f for portability"); # endif #endif #if @GNULIB_LOG2@ # if @REPLACE_LOG2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2 # define log2 rpl_log2 # endif _GL_FUNCDECL_RPL (log2, double, (double x)); _GL_CXXALIAS_RPL (log2, double, (double x)); # else # if !@HAVE_DECL_LOG2@ # undef log2 _GL_FUNCDECL_SYS (log2, double, (double x)); # endif _GL_CXXALIAS_SYS (log2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log2 # if HAVE_RAW_DECL_LOG2 _GL_WARN_ON_USE (log2, "log2 is unportable - " "use gnulib module log2 for portability"); # endif #endif #if @GNULIB_LOG2L@ # if @REPLACE_LOG2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2l # define log2l rpl_log2l # endif _GL_FUNCDECL_RPL (log2l, long double, (long double x)); _GL_CXXALIAS_RPL (log2l, long double, (long double x)); # else # if !@HAVE_DECL_LOG2L@ _GL_FUNCDECL_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIASWARN (log2l); #elif defined GNULIB_POSIXCHECK # undef log2l # if HAVE_RAW_DECL_LOG2L _GL_WARN_ON_USE (log2l, "log2l is unportable - " "use gnulib module log2l for portability"); # endif #endif #if @GNULIB_LOGBF@ # if @REPLACE_LOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbf # define logbf rpl_logbf # endif _GL_FUNCDECL_RPL (logbf, float, (float x)); _GL_CXXALIAS_RPL (logbf, float, (float x)); # else # if !@HAVE_LOGBF@ _GL_FUNCDECL_SYS (logbf, float, (float x)); # endif _GL_CXXALIAS_SYS (logbf, float, (float x)); # endif _GL_CXXALIASWARN (logbf); #elif defined GNULIB_POSIXCHECK # undef logbf # if HAVE_RAW_DECL_LOGBF _GL_WARN_ON_USE (logbf, "logbf is unportable - " "use gnulib module logbf for portability"); # endif #endif #if @GNULIB_LOGB@ # if @REPLACE_LOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logb # define logb rpl_logb # endif _GL_FUNCDECL_RPL (logb, double, (double x)); _GL_CXXALIAS_RPL (logb, double, (double x)); # else # if !@HAVE_DECL_LOGB@ _GL_FUNCDECL_SYS (logb, double, (double x)); # endif _GL_CXXALIAS_SYS (logb, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (logb, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef logb # if HAVE_RAW_DECL_LOGB _GL_WARN_ON_USE (logb, "logb is unportable - " "use gnulib module logb for portability"); # endif #endif #if @GNULIB_LOGBL@ # if @REPLACE_LOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbl # define logbl rpl_logbl # endif _GL_FUNCDECL_RPL (logbl, long double, (long double x)); _GL_CXXALIAS_RPL (logbl, long double, (long double x)); # else # if !@HAVE_LOGBL@ _GL_FUNCDECL_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIASWARN (logbl); #elif defined GNULIB_POSIXCHECK # undef logbl # if HAVE_RAW_DECL_LOGBL _GL_WARN_ON_USE (logbl, "logbl is unportable - " "use gnulib module logbl for portability"); # endif #endif #if @GNULIB_MODFF@ # if @REPLACE_MODFF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modff # define modff rpl_modff # endif _GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); # else # if !@HAVE_MODFF@ # undef modff _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); # endif _GL_CXXALIASWARN (modff); #elif defined GNULIB_POSIXCHECK # undef modff # if HAVE_RAW_DECL_MODFF _GL_WARN_ON_USE (modff, "modff is unportable - " "use gnulib module modff for portability"); # endif #endif #if @GNULIB_MODF@ # if @REPLACE_MODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modf # define modf rpl_modf # endif _GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); # else _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (modf, double, (double x, double *iptr)); # endif #elif defined GNULIB_POSIXCHECK # undef modf # if HAVE_RAW_DECL_MODF _GL_WARN_ON_USE (modf, "modf has portability problems - " "use gnulib module modf for portability"); # endif #endif #if @GNULIB_MODFL@ # if @REPLACE_MODFL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modfl # define modfl rpl_modfl # endif _GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); # else # if !@HAVE_MODFL@ # undef modfl _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (modfl); # endif #elif defined GNULIB_POSIXCHECK # undef modfl # if HAVE_RAW_DECL_MODFL _GL_WARN_ON_USE (modfl, "modfl is unportable - " "use gnulib module modfl for portability"); # endif #endif #if @GNULIB_POWF@ # if !@HAVE_POWF@ # undef powf _GL_FUNCDECL_SYS (powf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (powf, float, (float x, float y)); _GL_CXXALIASWARN (powf); #elif defined GNULIB_POSIXCHECK # undef powf # if HAVE_RAW_DECL_POWF _GL_WARN_ON_USE (powf, "powf is unportable - " "use gnulib module powf for portability"); # endif #endif #if @GNULIB_REMAINDERF@ # if @REPLACE_REMAINDERF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderf # define remainderf rpl_remainderf # endif _GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); _GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); # else # if !@HAVE_REMAINDERF@ _GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIASWARN (remainderf); #elif defined GNULIB_POSIXCHECK # undef remainderf # if HAVE_RAW_DECL_REMAINDERF _GL_WARN_ON_USE (remainderf, "remainderf is unportable - " "use gnulib module remainderf for portability"); # endif #endif #if @GNULIB_REMAINDER@ # if @REPLACE_REMAINDER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainder # define remainder rpl_remainder # endif _GL_FUNCDECL_RPL (remainder, double, (double x, double y)); _GL_CXXALIAS_RPL (remainder, double, (double x, double y)); # else # if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ _GL_FUNCDECL_SYS (remainder, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (remainder, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (remainder, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef remainder # if HAVE_RAW_DECL_REMAINDER _GL_WARN_ON_USE (remainder, "remainder is unportable - " "use gnulib module remainder for portability"); # endif #endif #if @GNULIB_REMAINDERL@ # if @REPLACE_REMAINDERL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderl # define remainderl rpl_remainderl # endif _GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); # else # if !@HAVE_DECL_REMAINDERL@ # undef remainderl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); # endif # endif _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); # endif _GL_CXXALIASWARN (remainderl); #elif defined GNULIB_POSIXCHECK # undef remainderl # if HAVE_RAW_DECL_REMAINDERL _GL_WARN_ON_USE (remainderl, "remainderl is unportable - " "use gnulib module remainderl for portability"); # endif #endif #if @GNULIB_RINTF@ # if !@HAVE_DECL_RINTF@ _GL_FUNCDECL_SYS (rintf, float, (float x)); # endif _GL_CXXALIAS_SYS (rintf, float, (float x)); _GL_CXXALIASWARN (rintf); #elif defined GNULIB_POSIXCHECK # undef rintf # if HAVE_RAW_DECL_RINTF _GL_WARN_ON_USE (rintf, "rintf is unportable - " "use gnulib module rintf for portability"); # endif #endif #if @GNULIB_RINT@ # if !@HAVE_RINT@ _GL_FUNCDECL_SYS (rint, double, (double x)); # endif _GL_CXXALIAS_SYS (rint, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (rint, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef rint # if HAVE_RAW_DECL_RINT _GL_WARN_ON_USE (rint, "rint is unportable - " "use gnulib module rint for portability"); # endif #endif #if @GNULIB_RINTL@ # if @REPLACE_RINTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rintl # define rintl rpl_rintl # endif _GL_FUNCDECL_RPL (rintl, long double, (long double x)); _GL_CXXALIAS_RPL (rintl, long double, (long double x)); # else # if !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIASWARN (rintl); #elif defined GNULIB_POSIXCHECK # undef rintl # if HAVE_RAW_DECL_RINTL _GL_WARN_ON_USE (rintl, "rintl is unportable - " "use gnulib module rintl for portability"); # endif #endif #if @GNULIB_ROUNDF@ # if @REPLACE_ROUNDF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundf # define roundf rpl_roundf # endif _GL_FUNCDECL_RPL (roundf, float, (float x)); _GL_CXXALIAS_RPL (roundf, float, (float x)); # else # if !@HAVE_DECL_ROUNDF@ _GL_FUNCDECL_SYS (roundf, float, (float x)); # endif _GL_CXXALIAS_SYS (roundf, float, (float x)); # endif _GL_CXXALIASWARN (roundf); #elif defined GNULIB_POSIXCHECK # undef roundf # if HAVE_RAW_DECL_ROUNDF _GL_WARN_ON_USE (roundf, "roundf is unportable - " "use gnulib module roundf for portability"); # endif #endif #if @GNULIB_ROUND@ # if @REPLACE_ROUND@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef round # define round rpl_round # endif _GL_FUNCDECL_RPL (round, double, (double x)); _GL_CXXALIAS_RPL (round, double, (double x)); # else # if !@HAVE_DECL_ROUND@ _GL_FUNCDECL_SYS (round, double, (double x)); # endif _GL_CXXALIAS_SYS (round, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (round, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef round # if HAVE_RAW_DECL_ROUND _GL_WARN_ON_USE (round, "round is unportable - " "use gnulib module round for portability"); # endif #endif #if @GNULIB_ROUNDL@ # if @REPLACE_ROUNDL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundl # define roundl rpl_roundl # endif _GL_FUNCDECL_RPL (roundl, long double, (long double x)); _GL_CXXALIAS_RPL (roundl, long double, (long double x)); # else # if !@HAVE_DECL_ROUNDL@ # undef roundl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (roundl, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (roundl, long double, (long double x)); # endif _GL_CXXALIASWARN (roundl); #elif defined GNULIB_POSIXCHECK # undef roundl # if HAVE_RAW_DECL_ROUNDL _GL_WARN_ON_USE (roundl, "roundl is unportable - " "use gnulib module roundl for portability"); # endif #endif #if @GNULIB_SINF@ # if @REPLACE_SINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinf # define sinf rpl_sinf # endif _GL_FUNCDECL_RPL (sinf, float, (float x)); _GL_CXXALIAS_RPL (sinf, float, (float x)); # else # if !@HAVE_SINF@ # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinf, float, (float x)); # endif _GL_CXXALIASWARN (sinf); #elif defined GNULIB_POSIXCHECK # undef sinf # if HAVE_RAW_DECL_SINF _GL_WARN_ON_USE (sinf, "sinf is unportable - " "use gnulib module sinf for portability"); # endif #endif #if @GNULIB_SINL@ # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ # undef sinl _GL_FUNCDECL_SYS (sinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sinl); # endif #elif defined GNULIB_POSIXCHECK # undef sinl # if HAVE_RAW_DECL_SINL _GL_WARN_ON_USE (sinl, "sinl is unportable - " "use gnulib module sinl for portability"); # endif #endif #if @GNULIB_SINHF@ # if @REPLACE_SINHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinhf # define sinhf rpl_sinhf # endif _GL_FUNCDECL_RPL (sinhf, float, (float x)); _GL_CXXALIAS_RPL (sinhf, float, (float x)); # else # if !@HAVE_SINHF@ # undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); # endif _GL_CXXALIASWARN (sinhf); #elif defined GNULIB_POSIXCHECK # undef sinhf # if HAVE_RAW_DECL_SINHF _GL_WARN_ON_USE (sinhf, "sinhf is unportable - " "use gnulib module sinhf for portability"); # endif #endif #if @GNULIB_SQRTF@ # if @REPLACE_SQRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtf # define sqrtf rpl_sqrtf # endif _GL_FUNCDECL_RPL (sqrtf, float, (float x)); _GL_CXXALIAS_RPL (sqrtf, float, (float x)); # else # if !@HAVE_SQRTF@ # undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIASWARN (sqrtf); #elif defined GNULIB_POSIXCHECK # undef sqrtf # if HAVE_RAW_DECL_SQRTF _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " "use gnulib module sqrtf for portability"); # endif #endif #if @GNULIB_SQRTL@ # if @REPLACE_SQRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtl # define sqrtl rpl_sqrtl # endif _GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); _GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); # else # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ # undef sqrtl _GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sqrtl); # endif #elif defined GNULIB_POSIXCHECK # undef sqrtl # if HAVE_RAW_DECL_SQRTL _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " "use gnulib module sqrtl for portability"); # endif #endif #if @GNULIB_TANF@ # if @REPLACE_TANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanf # define tanf rpl_tanf # endif _GL_FUNCDECL_RPL (tanf, float, (float x)); _GL_CXXALIAS_RPL (tanf, float, (float x)); # else # if !@HAVE_TANF@ # undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanf, float, (float x)); # endif _GL_CXXALIASWARN (tanf); #elif defined GNULIB_POSIXCHECK # undef tanf # if HAVE_RAW_DECL_TANF _GL_WARN_ON_USE (tanf, "tanf is unportable - " "use gnulib module tanf for portability"); # endif #endif #if @GNULIB_TANL@ # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ # undef tanl _GL_FUNCDECL_SYS (tanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (tanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tanl); # endif #elif defined GNULIB_POSIXCHECK # undef tanl # if HAVE_RAW_DECL_TANL _GL_WARN_ON_USE (tanl, "tanl is unportable - " "use gnulib module tanl for portability"); # endif #endif #if @GNULIB_TANHF@ # if @REPLACE_TANHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanhf # define tanhf rpl_tanhf # endif _GL_FUNCDECL_RPL (tanhf, float, (float x)); _GL_CXXALIAS_RPL (tanhf, float, (float x)); # else # if !@HAVE_TANHF@ # undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); # endif _GL_CXXALIASWARN (tanhf); #elif defined GNULIB_POSIXCHECK # undef tanhf # if HAVE_RAW_DECL_TANHF _GL_WARN_ON_USE (tanhf, "tanhf is unportable - " "use gnulib module tanhf for portability"); # endif #endif #if @GNULIB_TRUNCF@ # if @REPLACE_TRUNCF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncf # define truncf rpl_truncf # endif _GL_FUNCDECL_RPL (truncf, float, (float x)); _GL_CXXALIAS_RPL (truncf, float, (float x)); # else # if !@HAVE_DECL_TRUNCF@ _GL_FUNCDECL_SYS (truncf, float, (float x)); # endif _GL_CXXALIAS_SYS (truncf, float, (float x)); # endif _GL_CXXALIASWARN (truncf); #elif defined GNULIB_POSIXCHECK # undef truncf # if HAVE_RAW_DECL_TRUNCF _GL_WARN_ON_USE (truncf, "truncf is unportable - " "use gnulib module truncf for portability"); # endif #endif #if @GNULIB_TRUNC@ # if @REPLACE_TRUNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef trunc # define trunc rpl_trunc # endif _GL_FUNCDECL_RPL (trunc, double, (double x)); _GL_CXXALIAS_RPL (trunc, double, (double x)); # else # if !@HAVE_DECL_TRUNC@ _GL_FUNCDECL_SYS (trunc, double, (double x)); # endif _GL_CXXALIAS_SYS (trunc, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (trunc, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef trunc # if HAVE_RAW_DECL_TRUNC _GL_WARN_ON_USE (trunc, "trunc is unportable - " "use gnulib module trunc for portability"); # endif #endif #if @GNULIB_TRUNCL@ # if @REPLACE_TRUNCL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncl # define truncl rpl_truncl # endif _GL_FUNCDECL_RPL (truncl, long double, (long double x)); _GL_CXXALIAS_RPL (truncl, long double, (long double x)); # else # if !@HAVE_DECL_TRUNCL@ _GL_FUNCDECL_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIASWARN (truncl); #elif defined GNULIB_POSIXCHECK # undef truncl # if HAVE_RAW_DECL_TRUNCL _GL_WARN_ON_USE (truncl, "truncl is unportable - " "use gnulib module truncl for portability"); # endif #endif #if @GNULIB_MDA_Y0@ /* On native Windows, map 'y0' to '_y0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y0 # define y0 _y0 # endif _GL_CXXALIAS_MDA (y0, double, (double x)); # else _GL_CXXALIAS_SYS (y0, double, (double x)); # endif _GL_CXXALIASWARN (y0); #endif #if @GNULIB_MDA_Y1@ /* On native Windows, map 'y1' to '_y1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y1 # define y1 _y1 # endif _GL_CXXALIAS_MDA (y1, double, (double x)); # else _GL_CXXALIAS_SYS (y1, double, (double x)); # endif _GL_CXXALIASWARN (y1); #endif #if @GNULIB_MDA_YN@ /* On native Windows, map 'yn' to '_yn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::yn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef yn # define yn _yn # endif _GL_CXXALIAS_MDA (yn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (yn, double, (int n, double x)); # endif _GL_CXXALIASWARN (yn); #endif /* Definitions of function-like macros come here, after the function declarations. */ #if @GNULIB_ISFINITE@ # if @REPLACE_ISFINITE@ _GL_EXTERN_C int gl_isfinitef (float x); _GL_EXTERN_C int gl_isfinited (double x); _GL_EXTERN_C int gl_isfinitel (long double x); # undef isfinite # define isfinite(x) \ (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ gl_isfinitef (x)) # endif # ifdef __cplusplus # if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isfinite through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) # define isfinite rpl_isfinite # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isfinite _GL_WARN_REAL_FLOATING_DECL (isfinite); # undef isfinite # define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) # endif #endif #if @GNULIB_ISINF@ # if @REPLACE_ISINF@ _GL_EXTERN_C int gl_isinff (float x); _GL_EXTERN_C int gl_isinfd (double x); _GL_EXTERN_C int gl_isinfl (long double x); # undef isinf # define isinf(x) \ (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ gl_isinff (x)) # endif # ifdef __cplusplus # if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isinf through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) # define isinf rpl_isinf # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isinf _GL_WARN_REAL_FLOATING_DECL (isinf); # undef isinf # define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) # endif #endif #if @GNULIB_ISNANF@ /* Test for NaN for 'float' numbers. */ # if @HAVE_ISNANF@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanf function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf _GL_EXTERN_C int isnanf (float x); # endif #endif #if @GNULIB_ISNAND@ /* Test for NaN for 'double' numbers. This function is a gnulib extension, unlike isnan() which applied only to 'double' numbers earlier but now is a type-generic macro. */ # if @HAVE_ISNAND@ /* The original <math.h> included above provides a declaration of isnan macro. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand _GL_EXTERN_C int isnand (double x); # endif #endif #if @GNULIB_ISNANL@ /* Test for NaN for 'long double' numbers. */ # if @HAVE_ISNANL@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; # endif #endif /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ #if @GNULIB_ISNAN@ # if @REPLACE_ISNAN@ /* We can't just use the isnanf macro (e.g.) as exposed by isnanf.h (e.g.) here, because those may end up being macros that recursively expand back to isnan. So use the gnulib replacements for them directly. */ # if @HAVE_ISNANF@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_f(x) __builtin_isnan ((float)(x)) # else _GL_EXTERN_C int rpl_isnanf (float x); # define gl_isnan_f(x) rpl_isnanf (x) # endif # if @HAVE_ISNAND@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_d(x) __builtin_isnan ((double)(x)) # else _GL_EXTERN_C int rpl_isnand (double x); # define gl_isnan_d(x) rpl_isnand (x) # endif # if @HAVE_ISNANL@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_l(x) __builtin_isnan ((long double)(x)) # else _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; # define gl_isnan_l(x) rpl_isnanl (x) # endif # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ gl_isnan_f (x)) # elif (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnan ((long double)(x)) : \ sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ __builtin_isnan ((float)(x))) # endif # ifdef __cplusplus # if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__ && __clang_major__ < 12) || (defined __FreeBSD__ && __clang_major__ < 7) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isnan through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) # define isnan rpl_isnan # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) # endif # endif # else /* Ensure isnan is a macro. */ # ifndef isnan # define isnan isnan # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isnan _GL_WARN_REAL_FLOATING_DECL (isnan); # undef isnan # define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) # endif #endif #if @GNULIB_SIGNBIT@ # if (@REPLACE_SIGNBIT_USING_BUILTINS@ \ && (!defined __cplusplus || __cplusplus < 201103)) # undef signbit /* GCC >= 4.0 and clang provide three built-ins for signbit. */ # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) # endif # if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit # undef signbit _GL_EXTERN_C int gl_signbitf (float arg); _GL_EXTERN_C int gl_signbitd (double arg); _GL_EXTERN_C int gl_signbitl (long double arg); # if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ # define _GL_NUM_UINT_WORDS(type) \ ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf # define gl_signbitf_OPTIMIZED_MACRO # define gl_signbitf(arg) \ ({ union { float _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ } _m; \ _m._value = (arg); \ (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ }) # endif # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd # define gl_signbitd_OPTIMIZED_MACRO # define gl_signbitd(arg) \ ({ union { double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ } _m; \ _m._value = (arg); \ (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ }) # endif # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl # define gl_signbitl_OPTIMIZED_MACRO # define gl_signbitl(arg) \ ({ union { long double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ } _m; \ _m._value = (arg); \ (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ }) # endif # endif # define signbit(x) \ (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ gl_signbitf (x)) # define GNULIB_defined_signbit 1 # endif # ifdef __cplusplus # if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines signbit through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) # define signbit rpl_signbit # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined signbit _GL_WARN_REAL_FLOATING_DECL (signbit); # undef signbit # define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_MATH_H */ #endif /* _GL_INCLUDING_MATH_H */ #endif /* _@GUARD_PREFIX@_MATH_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbchar.c����������������������������������������������������������������0000664�0000000�0000000�00000002362�14110572173�0016450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001, 2006, 2009-2021 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/>. */ #include <config.h> #define MBCHAR_INLINE _GL_EXTERN_INLINE #include <limits.h> #include "mbchar.h" #if IS_BASIC_ASCII /* Bit table of characters in the ISO C "basic character set". */ const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] = { 0x00001a00, /* '\t' '\v' '\f' */ 0xffffffef, /* ' '...'#' '%'...'?' */ 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */ 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */ /* The remaining bits are 0. */ }; #endif /* IS_BASIC_ASCII */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbchar.h����������������������������������������������������������������0000664�0000000�0000000�00000033113�14110572173�0016453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character data type. Copyright (C) 2001, 2005-2007, 2009-2021 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>. */ /* A multibyte character is a short subsequence of a char* string, representing a single wide character. We use multibyte characters instead of wide characters because of the following goals: 1) correct multibyte handling, i.e. operate according to the LC_CTYPE locale, 2) ease of maintenance, i.e. the maintainer needs not know all details of the ISO C 99 standard, 3) don't fail grossly if the input is not in the encoding set by the locale, because often different encodings are in use in the same countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), 4) fast in the case of ASCII characters, 5) portability, i.e. don't make unportable assumptions about wchar_t. Multibyte characters are only accessed through the mb* macros. mb_ptr (mbc) return a pointer to the beginning of the multibyte sequence. mb_len (mbc) returns the number of bytes occupied by the multibyte sequence. Always > 0. mb_iseq (mbc, sc) returns true if mbc is the standard ASCII character sc. mb_isnul (mbc) returns true if mbc is the nul character. mb_cmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2. mb_casecmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2, modulo upper/lowercase conversion. mb_equal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal. mb_caseequal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. mb_isalnum (mbc) returns true if mbc is alphanumeric. mb_isalpha (mbc) returns true if mbc is alphabetic. mb_isascii(mbc) returns true if mbc is plain ASCII. mb_isblank (mbc) returns true if mbc is a blank. mb_iscntrl (mbc) returns true if mbc is a control character. mb_isdigit (mbc) returns true if mbc is a decimal digit. mb_isgraph (mbc) returns true if mbc is a graphic character. mb_islower (mbc) returns true if mbc is lowercase. mb_isprint (mbc) returns true if mbc is a printable character. mb_ispunct (mbc) returns true if mbc is a punctuation character. mb_isspace (mbc) returns true if mbc is a space character. mb_isupper (mbc) returns true if mbc is uppercase. mb_isxdigit (mbc) returns true if mbc is a hexadecimal digit. mb_width (mbc) returns the number of columns on the output device occupied by mbc. Always >= 0. mb_putc (mbc, stream) outputs mbc on stream, a byte oriented FILE stream opened for output. mb_setascii (&mbc, sc) assigns the standard ASCII character sc to mbc. mb_copy (&destmbc, &srcmbc) copies srcmbc to destmbc. Here are the function prototypes of the macros. extern const char * mb_ptr (const mbchar_t mbc); extern size_t mb_len (const mbchar_t mbc); extern bool mb_iseq (const mbchar_t mbc, char sc); extern bool mb_isnul (const mbchar_t mbc); extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_isalnum (const mbchar_t mbc); extern bool mb_isalpha (const mbchar_t mbc); extern bool mb_isascii (const mbchar_t mbc); extern bool mb_isblank (const mbchar_t mbc); extern bool mb_iscntrl (const mbchar_t mbc); extern bool mb_isdigit (const mbchar_t mbc); extern bool mb_isgraph (const mbchar_t mbc); extern bool mb_islower (const mbchar_t mbc); extern bool mb_isprint (const mbchar_t mbc); extern bool mb_ispunct (const mbchar_t mbc); extern bool mb_isspace (const mbchar_t mbc); extern bool mb_isupper (const mbchar_t mbc); extern bool mb_isxdigit (const mbchar_t mbc); extern int mb_width (const mbchar_t mbc); extern void mb_putc (const mbchar_t mbc, FILE *stream); extern void mb_setascii (mbchar_t *new, char sc); extern void mb_copy (mbchar_t *new, const mbchar_t *old); */ #ifndef _MBCHAR_H #define _MBCHAR_H 1 #include <stdbool.h> #include <string.h> #include <wchar.h> #include <wctype.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBCHAR_INLINE # define MBCHAR_INLINE _GL_INLINE #endif #define MBCHAR_BUF_SIZE 24 struct mbchar { const char *ptr; /* pointer to current character */ size_t bytes; /* number of bytes of current character, > 0 */ bool wc_valid; /* true if wc is a valid wide character */ wchar_t wc; /* if wc_valid: the current character */ char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ }; /* EOF (not a real character) is represented with bytes = 0 and wc_valid = false. */ typedef struct mbchar mbchar_t; /* Access the current character. */ #define mb_ptr(mbc) ((mbc).ptr) #define mb_len(mbc) ((mbc).bytes) /* Comparison of characters. */ #define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) #define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) #define mb_cmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? (int) (mbc1).wc - (int) (mbc2).wc \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_casecmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_equal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? (mbc1).wc == (mbc2).wc \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) #define mb_caseequal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) /* <ctype.h>, <wctype.h> classification. */ #define mb_isascii(mbc) \ ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) #define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc)) #define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc)) #define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc)) #define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc)) #define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc)) #define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc)) #define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc)) #define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc)) #define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc)) #define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc)) #define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc)) #define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc)) /* Extra <wchar.h> function. */ /* Unprintable characters appear as a small box of width 1. */ #define MB_UNPRINTABLE_WIDTH 1 MBCHAR_INLINE int mb_width_aux (wint_t wc) { int w = wcwidth (wc); /* For unprintable characters, arbitrarily return 0 for control characters and MB_UNPRINTABLE_WIDTH otherwise. */ return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); } #define mb_width(mbc) \ ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) /* Output. */ #define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) /* Assignment. */ #define mb_setascii(mbc, sc) \ ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ (mbc)->wc = (mbc)->buf[0] = (sc)) /* Copying a character. */ MBCHAR_INLINE void mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) { if (old_mbc->ptr == &old_mbc->buf[0]) { memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); new_mbc->ptr = &new_mbc->buf[0]; } else new_mbc->ptr = old_mbc->ptr; new_mbc->bytes = old_mbc->bytes; if ((new_mbc->wc_valid = old_mbc->wc_valid)) new_mbc->wc = old_mbc->wc; } /* is_basic(c) tests whether the single-byte character c is in the ISO C "basic character set". This is a convenience function, and is in this file only to share code between mbiter_multi.h and mbfile_multi.h. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ISO-646, not EBCDIC. */ # define IS_BASIC_ASCII 1 extern const unsigned int is_basic_table[]; MBCHAR_INLINE bool is_basic (char c) { return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) & 1; } #else MBCHAR_INLINE bool is_basic (char 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 '~': return 1; default: return 0; } } #endif _GL_INLINE_HEADER_END #endif /* _MBCHAR_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbfile.c����������������������������������������������������������������0000664�0000000�0000000�00000001540�14110572173�0016447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character I/O: macros for multi-byte encodings. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define MBFILE_INLINE _GL_EXTERN_INLINE #include "mbfile.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbfile.h����������������������������������������������������������������0000664�0000000�0000000�00000016313�14110572173�0016460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character I/O: macros for multi-byte encodings. Copyright (C) 2001, 2005, 2009-2021 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 Mitsuru Chinen <mchinen@yamato.ibm.com> and Bruno Haible <bruno@clisp.org>. */ /* The macros in this file implement multi-byte character input from a stream. mb_file_t is the type for multibyte character input stream, usable for variable declarations. mbf_char_t is the type for multibyte character or EOF, usable for variable declarations. mbf_init (mbf, stream) initializes the MB_FILE for reading from stream. mbf_getc (mbc, mbf) reads the next multibyte character from mbf and stores it in mbc. mb_iseof (mbc) returns true if mbc represents the EOF value. Here are the function prototypes of the macros. extern void mbf_init (mb_file_t mbf, FILE *stream); extern void mbf_getc (mbf_char_t mbc, mb_file_t mbf); extern bool mb_iseof (const mbf_char_t mbc); */ #ifndef _MBFILE_H #define _MBFILE_H 1 #include <assert.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <wchar.h> #include "mbchar.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBFILE_INLINE # define MBFILE_INLINE _GL_INLINE #endif struct mbfile_multi { FILE *fp; bool eof_seen; bool have_pushback; mbstate_t state; unsigned int bufcount; char buf[MBCHAR_BUF_SIZE]; struct mbchar pushback; }; MBFILE_INLINE void mbfile_multi_getc (struct mbchar *mbc, struct mbfile_multi *mbf) { size_t bytes; /* If EOF has already been seen, don't use getc. This matters if mbf->fp is connected to an interactive tty. */ if (mbf->eof_seen) goto eof; /* Return character pushed back, if there is one. */ if (mbf->have_pushback) { mb_copy (mbc, &mbf->pushback); mbf->have_pushback = false; return; } /* Before using mbrtowc, we need at least one byte. */ if (mbf->bufcount == 0) { int c = getc (mbf->fp); if (c == EOF) { mbf->eof_seen = true; goto eof; } mbf->buf[0] = (unsigned char) c; mbf->bufcount++; } /* Handle most ASCII characters quickly, without calling mbrtowc(). */ if (mbf->bufcount == 1 && mbsinit (&mbf->state) && is_basic (mbf->buf[0])) { /* These characters are part of the basic character set. ISO C 99 guarantees that their wide character code is identical to their char code. */ mbc->wc = mbc->buf[0] = mbf->buf[0]; mbc->wc_valid = true; mbc->ptr = &mbc->buf[0]; mbc->bytes = 1; mbf->bufcount = 0; return; } /* Use mbrtowc on an increasing number of bytes. Read only as many bytes from mbf->fp as needed. This is needed to give reasonable interactive behaviour when mbf->fp is connected to an interactive tty. */ for (;;) { /* We don't know whether the 'mbrtowc' function updates the state when it returns -2, - this is the ISO C 99 and glibc-2.2 behaviour - or not - amended ANSI C, glibc-2.1 and Solaris 2.7 behaviour. We don't have an autoconf test for this, yet. The new behaviour would allow us to feed the bytes one by one into mbrtowc. But the old behaviour forces us to feed all bytes since the end of the last character into mbrtowc. Since we want to retry with more bytes when mbrtowc returns -2, we must backup the state before calling mbrtowc, because implementations with the new behaviour will clobber it. */ mbstate_t backup_state = mbf->state; bytes = mbrtowc (&mbc->wc, &mbf->buf[0], mbf->bufcount, &mbf->state); if (bytes == (size_t) -1) { /* An invalid multibyte sequence was encountered. */ /* Return a single byte. */ bytes = 1; mbc->wc_valid = false; break; } else if (bytes == (size_t) -2) { /* An incomplete multibyte character. */ mbf->state = backup_state; if (mbf->bufcount == MBCHAR_BUF_SIZE) { /* An overlong incomplete multibyte sequence was encountered. */ /* Return a single byte. */ bytes = 1; mbc->wc_valid = false; break; } else { /* Read one more byte and retry mbrtowc. */ int c = getc (mbf->fp); if (c == EOF) { /* An incomplete multibyte character at the end. */ mbf->eof_seen = true; bytes = mbf->bufcount; mbc->wc_valid = false; break; } mbf->buf[mbf->bufcount] = (unsigned char) c; mbf->bufcount++; } } else { if (bytes == 0) { /* A null wide character was encountered. */ bytes = 1; assert (mbf->buf[0] == '\0'); assert (mbc->wc == 0); } mbc->wc_valid = true; break; } } /* Return the multibyte sequence mbf->buf[0..bytes-1]. */ mbc->ptr = &mbc->buf[0]; memcpy (&mbc->buf[0], &mbf->buf[0], bytes); mbc->bytes = bytes; mbf->bufcount -= bytes; if (mbf->bufcount > 0) { /* It's not worth calling memmove() for so few bytes. */ unsigned int count = mbf->bufcount; char *p = &mbf->buf[0]; do { *p = *(p + bytes); p++; } while (--count > 0); } return; eof: /* An mbchar_t with bytes == 0 is used to indicate EOF. */ mbc->ptr = NULL; mbc->bytes = 0; mbc->wc_valid = false; return; } MBFILE_INLINE void mbfile_multi_ungetc (const struct mbchar *mbc, struct mbfile_multi *mbf) { mb_copy (&mbf->pushback, mbc); mbf->have_pushback = true; } typedef struct mbfile_multi mb_file_t; typedef mbchar_t mbf_char_t; #define mbf_init(mbf, stream) \ ((mbf).fp = (stream), \ (mbf).eof_seen = false, \ (mbf).have_pushback = false, \ memset (&(mbf).state, '\0', sizeof (mbstate_t)), \ (mbf).bufcount = 0) #define mbf_getc(mbc, mbf) mbfile_multi_getc (&(mbc), &(mbf)) #define mbf_ungetc(mbc, mbf) mbfile_multi_ungetc (&(mbc), &(mbf)) #define mb_iseof(mbc) ((mbc).bytes == 0) _GL_INLINE_HEADER_END #endif /* _MBFILE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbiter.c����������������������������������������������������������������0000664�0000000�0000000�00000001557�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define MBITER_INLINE _GL_EXTERN_INLINE #include "mbiter.h" �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbiter.h����������������������������������������������������������������0000664�0000000�0000000�00000016442�14110572173�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2001, 2005, 2007, 2009-2021 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>. */ /* The macros in this file implement forward iteration through a multi-byte string. With these macros, an iteration loop that looks like char *iter; for (iter = buf; iter < buf + buflen; iter++) { do_something (*iter); } becomes mbi_iterator_t iter; for (mbi_init (iter, buf, buflen); mbi_avail (iter); mbi_advance (iter)) { do_something (mbi_cur_ptr (iter), mb_len (mbi_cur (iter))); } The benefit of these macros over plain use of mbrtowc is: - Handling of invalid multibyte sequences is possible without making the code more complicated, while still preserving the invalid multibyte sequences. mbi_iterator_t is a type usable for variable declarations. mbi_init (iter, startptr, length) initializes the iterator, starting at startptr and crossing length bytes. mbi_avail (iter) returns true if there are more multibyte characters available before the end of string is reached. In this case, mbi_cur (iter) is initialized to the next multibyte character. mbi_advance (iter) advances the iterator by one multibyte character. mbi_cur (iter) returns the current multibyte character, of type mbchar_t. All the macros defined in mbchar.h can be used on it. mbi_cur_ptr (iter) return a pointer to the beginning of the current multibyte character. mbi_reloc (iter, ptrdiff) relocates iterator when the string is moved by ptrdiff bytes. mbi_copy (&destiter, &srciter) copies srciter to destiter. Here are the function prototypes of the macros. extern void mbi_init (mbi_iterator_t iter, const char *startptr, size_t length); extern bool mbi_avail (mbi_iterator_t iter); extern void mbi_advance (mbi_iterator_t iter); extern mbchar_t mbi_cur (mbi_iterator_t iter); extern const char * mbi_cur_ptr (mbi_iterator_t iter); extern void mbi_reloc (mbi_iterator_t iter, ptrdiff_t ptrdiff); extern void mbi_copy (mbi_iterator_t *new, const mbi_iterator_t *old); */ #ifndef _MBITER_H #define _MBITER_H 1 #include <assert.h> #include <stdbool.h> #include <stddef.h> #include <string.h> #include <wchar.h> #include "mbchar.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBITER_INLINE # define MBITER_INLINE _GL_INLINE #endif struct mbiter_multi { const char *limit; /* pointer to end of string */ bool in_shift; /* true if next byte may not be interpreted as ASCII */ mbstate_t state; /* if in_shift: current shift state */ bool next_done; /* true if mbi_avail has already filled the following */ struct mbchar cur; /* the current character: const char *cur.ptr pointer to current character The following are only valid after mbi_avail. size_t cur.bytes number of bytes of current character bool cur.wc_valid true if wc is a valid wide character wchar_t cur.wc if wc_valid: the current character */ }; MBITER_INLINE void mbiter_multi_next (struct mbiter_multi *iter) { if (iter->next_done) return; if (iter->in_shift) goto with_shift; /* Handle most ASCII characters quickly, without calling mbrtowc(). */ if (is_basic (*iter->cur.ptr)) { /* These characters are part of the basic character set. ISO C 99 guarantees that their wide character code is identical to their char code. */ iter->cur.bytes = 1; iter->cur.wc = *iter->cur.ptr; iter->cur.wc_valid = true; } else { assert (mbsinit (&iter->state)); iter->in_shift = true; with_shift: iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, iter->limit - iter->cur.ptr, &iter->state); if (iter->cur.bytes == (size_t) -1) { /* An invalid multibyte sequence was encountered. */ iter->cur.bytes = 1; iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not very important; the string is bogus anyway. */ } else if (iter->cur.bytes == (size_t) -2) { /* An incomplete multibyte character at the end. */ iter->cur.bytes = iter->limit - iter->cur.ptr; iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not important; the string end is reached anyway. */ } else { if (iter->cur.bytes == 0) { /* A null wide character was encountered. */ iter->cur.bytes = 1; assert (*iter->cur.ptr == '\0'); assert (iter->cur.wc == 0); } iter->cur.wc_valid = true; /* When in the initial state, we can go back treating ASCII characters more quickly. */ if (mbsinit (&iter->state)) iter->in_shift = false; } } iter->next_done = true; } MBITER_INLINE void mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) { iter->cur.ptr += ptrdiff; iter->limit += ptrdiff; } MBITER_INLINE void mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter) { new_iter->limit = old_iter->limit; if ((new_iter->in_shift = old_iter->in_shift)) memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); else memset (&new_iter->state, 0, sizeof (mbstate_t)); new_iter->next_done = old_iter->next_done; mb_copy (&new_iter->cur, &old_iter->cur); } /* Iteration macros. */ typedef struct mbiter_multi mbi_iterator_t; #define mbi_init(iter, startptr, length) \ ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \ (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ (iter).next_done = false) #define mbi_avail(iter) \ ((iter).cur.ptr < (iter).limit && (mbiter_multi_next (&(iter)), true)) #define mbi_advance(iter) \ ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) /* Access to the current character. */ #define mbi_cur(iter) (iter).cur #define mbi_cur_ptr(iter) (iter).cur.ptr /* Relocation. */ #define mbi_reloc(iter, ptrdiff) mbiter_multi_reloc (&iter, ptrdiff) /* Copying an iterator. */ #define mbi_copy mbiter_multi_copy _GL_INLINE_HEADER_END #endif /* _MBITER_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbmemcasecmp.c����������������������������������������������������������0000664�0000000�0000000�00000005471�14110572173�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths, case-insensitive. Copyright (C) 1998-1999, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009, based on earlier glibc code. 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/>. */ #include <config.h> /* Specification. */ #include "mbmemcasecmp.h" #include <ctype.h> #include <limits.h> #include <stdlib.h> #include "mbiter.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) int mbmemcasecmp (const char *s1, size_t n1, const char *s2, size_t n2) { if (s1 == s2) return _GL_CMP (n1, n2); if (MB_CUR_MAX > 1) { mbi_iterator_t iter1; mbi_iterator_t iter2; mbi_init (iter1, s1, n1); mbi_init (iter2, s2, n2); while (mbi_avail (iter1) && mbi_avail (iter2)) { int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2)); if (cmp != 0) return cmp; mbi_advance (iter1); mbi_advance (iter2); } if (mbi_avail (iter1)) /* s2 terminated before s1. */ return 1; if (mbi_avail (iter2)) /* s1 terminated before s2. */ return -1; return 0; } else { const unsigned char *s1_end = (const unsigned char *) (s1 + n1); const unsigned char *s2_end = (const unsigned char *) (s2 + n2); const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; while (p1 < s1_end && p2 < s2_end) { unsigned char c1 = TOLOWER (*p1); unsigned char c2 = TOLOWER (*p2); if (c1 != c2) { if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ++p1; ++p2; } if (p1 < s1_end) /* s2 terminated before s1. */ return 1; if (p2 < s2_end) /* s1 terminated before s2. */ return -1; return 0; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbmemcasecmp.h����������������������������������������������������������0000664�0000000�0000000�00000003275�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths, case-insensitive. Copyright (C) 2009-2021 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 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/>. */ #ifndef MBMEMCASECMP_H #define MBMEMCASECMP_H #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Compare the memory regions S1 = [s1..s1+N1-1], S2 = [s2..s2+n2-1], that contain character sequences, lexicographically, ignoring case. This function's result is locale dependent. Unlike memcasecmp(), it works correctly in multibyte locales and also handles Turkish i / dotless i. Unlike ulc_casecmp(), it does not handle the German sharp s and the Greek final sigma. Unlike memcoll() and ulc_casecoll(), it ignores collation order. Return a negative number if S1 < S2, a positive number if S1 > S2, or 0 if S1 and S2 have the same contents. Note: This function may, in multibyte locales, return 0 for strings of different lengths! */ extern int mbmemcasecmp (const char *s1, size_t n1, const char *s2, size_t n2); #ifdef __cplusplus } #endif #endif /* MBMEMCASECMP_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbmemcasecoll.c���������������������������������������������������������0000664�0000000�0000000�00000011144�14110572173�0020015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific case-ignoring memory comparison. Copyright (C) 2001, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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 <config.h> /* Specification. */ #include "mbmemcasecoll.h" #include <errno.h> #include <stdlib.h> #include <string.h> /* Get tolower(). */ #include <ctype.h> /* Get mbstate_t, mbrtowc(), wcrtomb(). */ #include <wchar.h> /* Get towlower(). */ #include <wctype.h> #include "malloca.h" #include "memcmp2.h" #include "memcoll.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Apply towlower() to the multibyte character sequence in INBUF, storing the result as a multibyte character sequence in OUTBUF. */ static size_t apply_towlower (const char *inbuf, size_t inbufsize, char *outbuf, size_t outbufsize) { char *outbuf_orig = outbuf; size_t remaining; remaining = inbufsize; while (remaining > 0) { wchar_t wc1; size_t n1; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); n1 = mbrtowc (&wc1, inbuf, remaining, &state); if (n1 == (size_t)(-2)) break; if (n1 != (size_t)(-1)) { wint_t wc2; if (n1 == 0) /* NUL character? */ n1 = 1; wc2 = towlower (wc1); if (wc2 != wc1) { size_t n2; memset (&state, '\0', sizeof (mbstate_t)); n2 = wcrtomb (outbuf, wc2, &state); if (n2 != (size_t)(-1)) { /* Store the translated multibyte character. */ inbuf += n1; remaining -= n1; outbuf += n2; continue; } } /* Nothing to translate. */ memcpy (outbuf, inbuf, n1); inbuf += n1; remaining -= n1; outbuf += n1; continue; } /* Invalid multibyte character on input. Copy one byte without modification. */ *outbuf++ = *inbuf++; remaining -= 1; } /* Incomplete multibyte sequence on input. Pass it through unmodified. */ while (remaining > 0) { *outbuf++ = *inbuf++; remaining -= 1; } /* Verify the output buffer was large enough. */ if (outbuf - outbuf_orig > outbufsize) abort (); /* Return the number of written output bytes. */ return outbuf - outbuf_orig; } /* Apply tolower() to the unibyte character sequence in INBUF, storing the result as a unibyte character sequence in OUTBUF. */ static void apply_tolower (const char *inbuf, char *outbuf, size_t bufsize) { for (; bufsize > 0; bufsize--) { *outbuf = TOLOWER ((unsigned char) *inbuf); inbuf++; outbuf++; } } int mbmemcasecoll (const char *s1, size_t s1len, const char *s2, size_t s2len, bool hard_LC_COLLATE) { char *t1; size_t t1len; char *t2; size_t t2len; char *memory; int cmp; if (MB_CUR_MAX > 1) { /* Application of towlower grows each character by a factor 2 at most. */ t1len = 2 * s1len; t2len = 2 * s2len; } else { /* Application of tolower doesn't change the size. */ t1len = s1len; t2len = s2len; } /* Allocate memory for t1 and t2. */ memory = (char *) malloca (t1len + 1 + t2len + 1); if (memory == NULL) { errno = ENOMEM; return 0; } t1 = memory; t2 = memory + t1len + 1; /* Csae-fold the two argument strings. */ if (MB_CUR_MAX > 1) { t1len = apply_towlower (s1, s1len, t1, t1len); t2len = apply_towlower (s2, s2len, t2, t2len); } else { apply_tolower (s1, t1, s1len); apply_tolower (s2, t2, s2len); } /* Compare the two case-folded strings. */ if (hard_LC_COLLATE) cmp = memcoll (t1, t1len, t2, t2len); else { cmp = memcmp2 (t1, t1len, t2, t2len); errno = 0; } { int saved_errno = errno; freea (memory); errno = saved_errno; } return cmp; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbmemcasecoll.h���������������������������������������������������������0000664�0000000�0000000�00000004064�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific case-ignoring memory comparison. Copyright (C) 2001, 2009-2021 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/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2001. */ #ifndef MBMEMCASECOLL_H #define MBMEMCASECOLL_H #include <stdbool.h> #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Compare the memory regions S1 = [s1..s1+s1len-1], S2 = [s2..s2+s2len-1], that contain character sequences, using the rules of the current locale, ignoring case. HARD_LC_COLLATE is false if the LC_COLLATE category of the current locale is equivalent to the "C" locale. This function's result is locale dependent. Unlike memcasecmp(), it works correctly in multibyte locales and also handles Turkish i / dotless i. Unlike ulc_casecmp(), it does not handle the German sharp s and the Greek final sigma. Like memcoll() and ulc_casecoll(), it uses collation order. Return a negative number if S1 < S2, a positive number if S1 > S2, 0 if S1 and S2 have the same contents, or an unspecified value if there is an error. Set errno to an error number if there is an error, and to zero otherwise. Note: This function may, in multibyte locales, return 0 for strings of different lengths! */ extern int mbmemcasecoll (const char *s1, size_t s1len, const char *s2, size_t s2len, bool hard_LC_COLLATE); #ifdef __cplusplus } #endif #endif /* MBMEMCASECOLL_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbrlen.c����������������������������������������������������������������0000664�0000000�0000000�00000002037�14110572173�0016472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Recognize multibyte character. Copyright (C) 1999-2000, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> static mbstate_t internal_state; size_t mbrlen (const char *s, size_t n, mbstate_t *ps) { if (ps == NULL) ps = &internal_state; return mbrtowc (NULL, s, n, ps); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbrtoc32.c��������������������������������������������������������������0000664�0000000�0000000�00000013615�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to 32-bit wide character. Copyright (C) 2020-2021 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 "attribute.h" #include <errno.h> #include <stdlib.h> #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* Implement mbrtoc32() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "verify.h" # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" verify (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) 1 # include "mbrtowc-impl.h" } #else /* glibc, macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, mingw, MSVC, Minix, Android */ /* Implement mbrtoc32() based on the original mbrtoc32() or on mbrtowc(). */ # include <wchar.h> # include "localcharset.h" # include "streq.h" # if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif static mbstate_t internal_state; size_t mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) # undef mbrtoc32 { /* It's simpler to handle the case s == NULL upfront, than to worry about this case later, before every test of pwc and n. */ if (s == NULL) { pwc = NULL; s = ""; n = 1; } # if MBRTOC32_EMPTY_INPUT_BUG || _GL_LARGE_CHAR32_T if (n == 0) return (size_t) -2; # endif if (ps == NULL) ps = &internal_state; # if HAVE_WORKING_MBRTOC32 /* mbrtoc32() may produce different values for wc than mbrtowc(). Therefore use mbrtoc32(). */ # if defined _WIN32 && !defined __CYGWIN__ char32_t wc; size_t ret = mbrtoc32 (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else size_t ret = mbrtoc32 (pwc, s, n, ps); # endif # if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { if (pwc != NULL) *pwc = (unsigned char) *s; return 1; } # endif return ret; # elif _GL_LARGE_CHAR32_T /* 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. */ /* Here n > 0. */ char *pstate = (char *)ps; size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ { # define FITS_IN_CHAR_TYPE(wc) 1 # include "mbrtowc-impl-utf8.h" } success: if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; /* Set *ps to the initial state. */ # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ *(unsigned int *)pstate = 0; # elif defined __CYGWIN__ /* Cygwin defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. */ ps->__count = 0; # else pstate[0] = 0; # endif return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } else { wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; return ret; } # else /* char32_t and wchar_t are equivalent. Use mbrtowc(). */ wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; return ret; # endif } #endif �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbrtowc-impl-utf8.h�����������������������������������������������������0000664�0000000�0000000�00000012255�14110572173�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2021 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>, 2008. */ /* This file contains the part of the body of the mbrtowc and mbrtoc32 functions that handles the special case of the UTF-8 encoding. */ /* Cf. unistr/u8-mbtouc.c. */ unsigned char c = (unsigned char) p[0]; if (c < 0x80) { if (pwc != NULL) *pwc = c; res = (c == 0 ? 0 : 1); goto success; } if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; else /* m >= 2 */ { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40) { if (pwc != NULL) *pwc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (c2 ^ 0x80); res = 2; goto success; } } } else if (c < 0xf0) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) { if (m == 2) goto incomplete; else /* m >= 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (c2 ^ 0x80) << 6) | (unsigned int) (c3 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 3; goto success; } } } } } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xf1 || c2 >= 0x90) && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90))) { if (m == 2) goto incomplete; else { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { if (m == 3) goto incomplete; else /* m >= 4 */ { unsigned char c4 = (unsigned char) p[3]; if ((c4 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x07) << 18) | ((unsigned int) (c2 ^ 0x80) << 12) | ((unsigned int) (c3 ^ 0x80) << 6) | (unsigned int) (c4 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 4; goto success; } } } } } } } } } goto invalid; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbrtowc-impl.h����������������������������������������������������������0000664�0000000�0000000�00000016240�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2021 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>, 2008. */ /* This file contains the body of the mbrtowc and mbrtoc32 functions, when GNULIB_defined_mbstate_t is defined. */ char *pstate = (char *)ps; if (s == NULL) { pwc = NULL; s = ""; n = 1; } if (n == 0) return (size_t)(-2); /* Here n > 0. */ if (pstate == NULL) pstate = internal_state; { size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; enc_t enc; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ enc = locale_encoding_classification (); if (enc == enc_utf8) /* UTF-8 */ { /* Achieve - multi-thread safety and - the ability to produce wide character values > WCHAR_MAX by not calling mbtowc() at all. */ #include "mbrtowc-impl-utf8.h" } else { /* The hidden internal state of mbtowc would make this function not multi-thread safe. Achieve multi-thread safety through a lock. */ wchar_t wc; res = mbtowc_with_lock (&wc, p, m); if (res >= 0) { if ((wc == 0) != (res == 0)) abort (); if (pwc != NULL) *pwc = wc; goto success; } /* mbtowc does not distinguish between invalid and incomplete multibyte sequences. But mbrtowc needs to make this distinction. There are two possible approaches: - Use iconv() and its return value. - Use built-in knowledge about the possible encodings. Given the low quality of implementation of iconv() on the systems that lack mbrtowc(), we use the second approach. The possible encodings are: - 8-bit encodings, - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - UTF-8 (already handled above). Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ switch (enc) { /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ case enc_eucjp: /* EUC-JP */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) goto incomplete; } if (m == 2) { unsigned char c = (unsigned char) p[0]; if (c == 0x8f) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0xa1 && c2 < 0xff) goto incomplete; } } goto invalid; } case enc_94: /* EUC-KR, GB2312, BIG5 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } case enc_euctw: /* EUC-TW */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c == 0x8e) goto incomplete; } goto invalid; } case enc_gb18030: /* GB18030 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c >= 0x90 && c <= 0xe3) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0x30 && c2 <= 0x39) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if (c3 >= 0x81 && c3 <= 0xfe) goto incomplete; } } } } goto invalid; } case enc_sjis: /* SJIS */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) || (c >= 0xf0 && c <= 0xf9)) goto incomplete; } goto invalid; } default: /* An unknown multibyte encoding. */ goto incomplete; } } success: /* res >= 0 is the corrected return value of mbtowc_with_lock (&wc, p, m). */ if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbrtowc.c���������������������������������������������������������������0000664�0000000�0000000�00000007165�14110572173�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ # include <errno.h> # include <stdint.h> # include <stdlib.h> # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "attribute.h" # include "verify.h" # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" verify (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) # include "mbrtowc-impl.h" } #else /* Override the system's mbrtowc() function. */ # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { size_t ret; wchar_t wc; # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # if MBRTOWC_EMPTY_INPUT_BUG if (n == 0) return (size_t) -2; # endif if (! pwc) pwc = &wc; # if MBRTOWC_RETVAL_BUG { static mbstate_t internal_state; /* Override mbrtowc's internal state. We cannot call mbsinit() on the hidden internal state, but we can call it on our variable. */ if (ps == NULL) ps = &internal_state; if (!mbsinit (ps)) { /* Parse the rest of the multibyte character byte for byte. */ size_t count = 0; for (; n > 0; s++, n--) { ret = mbrtowc (&wc, s, 1, ps); if (ret == (size_t)(-1)) return (size_t)(-1); count++; if (ret != (size_t)(-2)) { /* The multibyte character has been completed. */ *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif # if MBRTOWC_STORES_INCOMPLETE_BUG ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else ret = mbrtowc (pwc, s, n, ps); # endif # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; *pwc = uc; return 1; } # endif return ret; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbscasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000005504�14110572173�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, based on earlier glibc code. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #include "mbuiter.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! */ int mbscasecmp (const char *s1, const char *s2) { if (s1 == s2) return 0; /* Be careful not to look at the entire extent of s1 or s2 until needed. This is useful because when two strings differ, the difference is most often already in the very few first characters. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter1; mbui_iterator_t iter2; mbui_init (iter1, s1); mbui_init (iter2, s2); while (mbui_avail (iter1) && mbui_avail (iter2)) { int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2)); if (cmp != 0) return cmp; mbui_advance (iter1); mbui_advance (iter2); } if (mbui_avail (iter1)) /* s2 terminated before s1. */ return 1; if (mbui_avail (iter2)) /* s1 terminated before s2. */ return -1; return 0; } else { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbscasestr.c������������������������������������������������������������0000664�0000000�0000000�00000035616�14110572173�0017372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string. -*- coding: utf-8 -*- Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <stdbool.h> #include <stddef.h> /* for NULL, in case a nonstandard string.h lacks it */ #include <stdlib.h> #include "malloca.h" #include "mbuiter.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Knuth-Morris-Pratt algorithm. */ #define UNIT unsigned char #define CANON_ELEMENT(c) TOLOWER (c) #include "str-kmp.h" /* Knuth-Morris-Pratt algorithm. See https://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm Return a boolean indicating success: Return true and set *RESULTP if the search was completed. Return false if it was aborted because not enough memory was available. */ static bool knuth_morris_pratt_multibyte (const char *haystack, const char *needle, const char **resultp) { size_t m = mbslen (needle); mbchar_t *needle_mbchars; size_t *table; /* Allocate room for needle_mbchars and the table. */ char *memory = (char *) nmalloca (m, sizeof (mbchar_t) + sizeof (size_t)); if (memory == NULL) return false; needle_mbchars = (mbchar_t *) memory; table = (size_t *) (memory + m * sizeof (mbchar_t)); /* Fill needle_mbchars. */ { mbui_iterator_t iter; size_t j; j = 0; for (mbui_init (iter, needle); mbui_avail (iter); mbui_advance (iter), j++) { mb_copy (&needle_mbchars[j], &mbui_cur (iter)); if (needle_mbchars[j].wc_valid) needle_mbchars[j].wc = towlower (needle_mbchars[j].wc); } } /* Fill the table. For 0 < i < m: 0 < table[i] <= i is defined such that forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], and table[i] is as large as possible with this property. This implies: 1) For 0 < i < m: If table[i] < i, needle[table[i]..i-1] = needle[0..i-1-table[i]]. 2) For 0 < i < m: rhaystack[0..i-1] == needle[0..i-1] and exists h, i <= h < m: rhaystack[h] != needle[h] implies forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. table[0] remains uninitialized. */ { size_t i, j; /* i = 1: Nothing to verify for x = 0. */ table[1] = 1; j = 0; for (i = 2; i < m; i++) { /* Here: j = i-1 - table[i-1]. The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < table[i-1], by induction. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ mbchar_t *b = &needle_mbchars[i - 1]; for (;;) { /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < i-1-j. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ if (mb_equal (*b, needle_mbchars[j])) { /* Set table[i] := i-1-j. */ table[i] = i - ++j; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for x = i-1-j, because needle[i-1] != needle[j] = needle[i-1-x]. */ if (j == 0) { /* The inequality holds for all possible x. */ table[i] = i; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for i-1-j < x < i-1-j+table[j], because for these x: needle[x..i-2] = needle[x-(i-1-j)..j-1] != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) = needle[0..i-2-x], hence needle[x..i-1] != needle[0..i-1-x]. Furthermore needle[i-1-j+table[j]..i-2] = needle[table[j]..j-1] = needle[0..j-1-table[j]] (by definition of table[j]). */ j = j - table[j]; } /* Here: j = i - table[i]. */ } } /* Search, using the table to accelerate the processing. */ { size_t j; mbui_iterator_t rhaystack; mbui_iterator_t phaystack; *resultp = NULL; j = 0; mbui_init (rhaystack, haystack); mbui_init (phaystack, haystack); /* Invariant: phaystack = rhaystack + j. */ while (mbui_avail (phaystack)) { mbchar_t c; mb_copy (&c, &mbui_cur (phaystack)); if (c.wc_valid) c.wc = towlower (c.wc); if (mb_equal (needle_mbchars[j], c)) { j++; mbui_advance (phaystack); if (j == m) { /* The entire needle has been found. */ *resultp = mbui_cur_ptr (rhaystack); break; } } else if (j > 0) { /* Found a match of needle[0..j-1], mismatch at needle[j]. */ size_t count = table[j]; j -= count; for (; count > 0; count--) { if (!mbui_avail (rhaystack)) abort (); mbui_advance (rhaystack); } } else { /* Found a mismatch at needle[0] already. */ if (!mbui_avail (rhaystack)) abort (); mbui_advance (rhaystack); mbui_advance (phaystack); } } } freea (memory); return true; } /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! */ char * mbscasestr (const char *haystack, const char *needle) { /* Be careful not to look at the entire extent of haystack or needle until needed. This is useful because of these two cases: - haystack may be very long, and a match of needle found early, - needle may be very long, and not even a short initial segment of needle may be found in haystack. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter_needle; mbui_init (iter_needle, needle); if (mbui_avail (iter_needle)) { /* Minimizing the worst-case complexity: Let n = mbslen(haystack), m = mbslen(needle). The naïve algorithm is O(n*m) worst-case. The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a memory allocation. To achieve linear complexity and yet amortize the cost of the memory allocation, we activate the Knuth-Morris-Pratt algorithm only once the naïve algorithm has already run for some time; more precisely, when - the outer loop count is >= 10, - the average number of comparisons per outer loop is >= 5, - the total number of comparisons is >= m. But we try it only once. If the memory allocation attempt failed, we don't retry it. */ bool try_kmp = true; size_t outer_loop_count = 0; size_t comparison_count = 0; size_t last_ccount = 0; /* last comparison count */ mbui_iterator_t iter_needle_last_ccount; /* = needle + last_ccount */ mbchar_t b; mbui_iterator_t iter_haystack; mbui_init (iter_needle_last_ccount, needle); mb_copy (&b, &mbui_cur (iter_needle)); if (b.wc_valid) b.wc = towlower (b.wc); mbui_init (iter_haystack, haystack); for (;; mbui_advance (iter_haystack)) { mbchar_t c; if (!mbui_avail (iter_haystack)) /* No match. */ return NULL; /* See whether it's advisable to use an asymptotically faster algorithm. */ if (try_kmp && outer_loop_count >= 10 && comparison_count >= 5 * outer_loop_count) { /* See if needle + comparison_count now reaches the end of needle. */ size_t count = comparison_count - last_ccount; for (; count > 0 && mbui_avail (iter_needle_last_ccount); count--) mbui_advance (iter_needle_last_ccount); last_ccount = comparison_count; if (!mbui_avail (iter_needle_last_ccount)) { /* Try the Knuth-Morris-Pratt algorithm. */ const char *result; bool success = knuth_morris_pratt_multibyte (haystack, needle, &result); if (success) return (char *) result; try_kmp = false; } } outer_loop_count++; comparison_count++; mb_copy (&c, &mbui_cur (iter_haystack)); if (c.wc_valid) c.wc = towlower (c.wc); if (mb_equal (c, b)) /* The first character matches. */ { mbui_iterator_t rhaystack; mbui_iterator_t rneedle; memcpy (&rhaystack, &iter_haystack, sizeof (mbui_iterator_t)); mbui_advance (rhaystack); mbui_init (rneedle, needle); if (!mbui_avail (rneedle)) abort (); mbui_advance (rneedle); for (;; mbui_advance (rhaystack), mbui_advance (rneedle)) { if (!mbui_avail (rneedle)) /* Found a match. */ return (char *) mbui_cur_ptr (iter_haystack); if (!mbui_avail (rhaystack)) /* No match. */ return NULL; comparison_count++; if (!mb_caseequal (mbui_cur (rhaystack), mbui_cur (rneedle))) /* Nothing in this round. */ break; } } } } else return (char *) haystack; } else { if (*needle != '\0') { /* Minimizing the worst-case complexity: Let n = strlen(haystack), m = strlen(needle). The naïve algorithm is O(n*m) worst-case. The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a memory allocation. To achieve linear complexity and yet amortize the cost of the memory allocation, we activate the Knuth-Morris-Pratt algorithm only once the naïve algorithm has already run for some time; more precisely, when - the outer loop count is >= 10, - the average number of comparisons per outer loop is >= 5, - the total number of comparisons is >= m. But we try it only once. If the memory allocation attempt failed, we don't retry it. */ bool try_kmp = true; size_t outer_loop_count = 0; size_t comparison_count = 0; size_t last_ccount = 0; /* last comparison count */ const char *needle_last_ccount = needle; /* = needle + last_ccount */ /* Speed up the following searches of needle by caching its first character. */ unsigned char b = TOLOWER ((unsigned char) *needle); needle++; for (;; haystack++) { if (*haystack == '\0') /* No match. */ return NULL; /* See whether it's advisable to use an asymptotically faster algorithm. */ if (try_kmp && outer_loop_count >= 10 && comparison_count >= 5 * outer_loop_count) { /* See if needle + comparison_count now reaches the end of needle. */ if (needle_last_ccount != NULL) { needle_last_ccount += strnlen (needle_last_ccount, comparison_count - last_ccount); if (*needle_last_ccount == '\0') needle_last_ccount = NULL; last_ccount = comparison_count; } if (needle_last_ccount == NULL) { /* Try the Knuth-Morris-Pratt algorithm. */ const unsigned char *result; bool success = knuth_morris_pratt ((const unsigned char *) haystack, (const unsigned char *) (needle - 1), strlen (needle - 1), &result); if (success) return (char *) result; try_kmp = false; } } outer_loop_count++; comparison_count++; if (TOLOWER ((unsigned char) *haystack) == b) /* The first character matches. */ { const char *rhaystack = haystack + 1; const char *rneedle = needle; for (;; rhaystack++, rneedle++) { if (*rneedle == '\0') /* Found a match. */ return (char *) haystack; if (*rhaystack == '\0') /* No match. */ return NULL; comparison_count++; if (TOLOWER ((unsigned char) *rhaystack) != TOLOWER ((unsigned char) *rneedle)) /* Nothing in this round. */ break; } } } } else return (char *) haystack; } } ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbschr.c����������������������������������������������������������������0000664�0000000�0000000�00000003403�14110572173�0016467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character. Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. */ char * mbschr (const char *string, int c) { if (MB_CUR_MAX > 1 /* Optimization: We know that ASCII characters < 0x30 don't occur as part of multibyte characters longer than 1 byte. Hence, if c < 0x30, the faster unibyte loop can be used. */ && (unsigned char) c >= 0x30) { mbui_iterator_t iter; for (mbui_init (iter, string);; mbui_advance (iter)) { if (!mbui_avail (iter)) goto notfound; if (mb_len (mbui_cur (iter)) == 1 && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c) break; } return (char *) mbui_cur_ptr (iter); notfound: return NULL; } else return strchr (string, c); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbscspn.c���������������������������������������������������������������0000664�0000000�0000000�00000004262�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. */ size_t mbscspn (const char *string, const char *accept) { /* Optimize two cases. */ if (accept[0] == '\0') return strlen (string); if (accept[1] == '\0') { const char *ptr = mbschr (string, accept[0]); return (ptr != NULL ? ptr - string : strlen (string)); } /* General case. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1) { if (mbschr (accept, * mbui_cur_ptr (iter))) goto found; } else { mbui_iterator_t aiter; for (mbui_init (aiter, accept); mbui_avail (aiter); mbui_advance (aiter)) if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) goto found; } } found: return mbui_cur_ptr (iter) - string; } else return strcspn (string, accept); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsinit.c���������������������������������������������������������������0000664�0000000�0000000�00000004547�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for initial conversion state. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "verify.h" #if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). We assume that - sizeof (mbstate_t) >= 4, - only stateless encodings are supported (such as UTF-8 and EUC-JP, but not ISO-2022 variants), - for each encoding, the number of bytes for a wide character is <= 4. (This maximum is attained for UTF-8, GB18030, EUC-TW.) We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in the initial state. */ verify (sizeof (mbstate_t) >= 4); int mbsinit (const mbstate_t *ps) { const char *pstate = (const char *)ps; return pstate == NULL || pstate[0] == 0; } #else int mbsinit (const mbstate_t *ps) { # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ return ps == NULL || *(const unsigned int *)ps == 0; # else /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ /* Maybe this definition works, maybe not... */ return ps == NULL || *(const char *)ps == 0; # endif } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbslen.c����������������������������������������������������������������0000664�0000000�0000000�00000002425�14110572173�0016474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Counting the multibyte characters in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #include "mbuiter.h" /* Return the number of multibyte characters in the character string STRING. */ size_t mbslen (const char *string) { if (MB_CUR_MAX > 1) { size_t count; mbui_iterator_t iter; count = 0; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) count++; return count; } else return strlen (string); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsncasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000006113�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, based on earlier glibc code. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #include "mbuiter.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! */ int mbsncasecmp (const char *s1, const char *s2, size_t n) { if (s1 == s2 || n == 0) return 0; /* Be careful not to look at the entire extent of s1 or s2 until needed. This is useful because when two strings differ, the difference is most often already in the very few first characters. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter1; mbui_iterator_t iter2; mbui_init (iter1, s1); mbui_init (iter2, s2); while (mbui_avail (iter1) && mbui_avail (iter2)) { int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2)); if (cmp != 0) return cmp; if (--n == 0) return 0; mbui_advance (iter1); mbui_advance (iter2); } if (mbui_avail (iter1)) /* s2 terminated before s1 and n. */ return 1; if (mbui_avail (iter2)) /* s1 terminated before s2 and n. */ return -1; return 0; } else { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; for (; ; p1++, p2++) { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (--n == 0 || c1 == '\0' || c1 != c2) break; } if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsnlen.c���������������������������������������������������������������0000664�0000000�0000000�00000002502�14110572173�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Counting the multibyte characters in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #include "mbiter.h" /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ size_t mbsnlen (const char *string, size_t len) { if (MB_CUR_MAX > 1) { size_t count; mbi_iterator_t iter; count = 0; for (mbi_init (iter, string, len); mbi_avail (iter); mbi_advance (iter)) count++; return count; } else return len; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsnrtoc32s.c�����������������������������������������������������������0000664�0000000�0000000�00000004012�14110572173�0017365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 32-bit wide string. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #include <wchar.h> #if (HAVE_WORKING_MBRTOC32 && !defined __GLIBC__) || _GL_LARGE_CHAR32_T /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding, or char32_t is wider than wchar_t. */ /* For Cygwin >= 1.7 it would be possible to speed this up a bit by cutting the source into chunks, calling mbsnrtowcs on a chunk, then u16_to_u32 on the result, then proceed with the next chunk, and so on. But speed is not critical here so far. */ /* Reuse the implementation of mbsnrtowcs with a different parameterization. */ # include <errno.h> # include <limits.h> # include <stdlib.h> # include "minmax.h" # include "strnlen1.h" extern mbstate_t _gl_mbsrtoc32s_state; # define FUNC mbsnrtoc32s # define DCHAR_T char32_t # define INTERNAL_STATE _gl_mbsrtoc32s_state # define MBRTOWC mbrtoc32 # include "mbsnrtowcs-impl.h" #else /* char32_t and wchar_t are equivalent. */ # include "verify.h" verify (sizeof (char32_t) == sizeof (wchar_t)); size_t mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) { return mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsnrtowcs-impl.h�������������������������������������������������������0000664�0000000�0000000�00000007557�14110572173�0020374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ size_t FUNC (DCHAR_T *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &INTERNAL_STATE; { const char *src = *srcp; if (dest != NULL) { DCHAR_T *destptr = dest; for (; srclen > 0 && len > 0; destptr++, len--) { size_t src_avail; size_t ret; /* An optimized variant of src_avail = strnlen1 (src, MIN (srclen, MB_LEN_MAX)); */ if (srclen == 1 || src[0] == '\0') src_avail = 1; else if (srclen == 2 || src[1] == '\0') src_avail = 2; else if (srclen == 3 || src[2] == '\0') src_avail = 3; else if (MB_LEN_MAX <= 4 || srclen == 4 || src[3] == '\0') src_avail = 4; else src_avail = 4 + strnlen1 (src + 4, MIN (srclen, MB_LEN_MAX) - 4); /* Parse the next multibyte character. */ ret = MBRTOWC (destptr, src, src_avail, ps); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte or that is longer than MB_LEN_MAX bytes. Cannot happen. */ abort (); if (ret == (size_t)(-1)) goto bad_input; if (ret == 0) { src = NULL; /* Here mbsinit (ps). */ break; } src += ret; srclen -= ret; } *srcp = src; return destptr - dest; } else { /* Ignore dest and len, don't store *srcp at the end, and don't clobber *ps. */ mbstate_t state = *ps; size_t totalcount = 0; for (; srclen > 0; totalcount++) { size_t src_avail; size_t ret; /* An optimized variant of src_avail = strnlen1 (src, MIN (srclen, MB_LEN_MAX)); */ if (srclen == 1 || src[0] == '\0') src_avail = 1; else if (srclen == 2 || src[1] == '\0') src_avail = 2; else if (srclen == 3 || src[2] == '\0') src_avail = 3; else if (MB_LEN_MAX <= 4 || srclen == 4 || src[3] == '\0') src_avail = 4; else src_avail = 4 + strnlen1 (src + 4, MIN (srclen, MB_LEN_MAX) - 4); /* Parse the next multibyte character. */ ret = MBRTOWC (NULL, src, src_avail, &state); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte or that is longer than MB_LEN_MAX bytes. Cannot happen. */ abort (); if (ret == (size_t)(-1)) goto bad_input2; if (ret == 0) { /* Here mbsinit (&state). */ break; } src += ret; srclen -= ret; } return totalcount; } bad_input: *srcp = src; bad_input2: errno = EILSEQ; return (size_t)(-1); } } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsnrtowcs.c������������������������������������������������������������0000664�0000000�0000000�00000002206�14110572173�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <limits.h> #include <stdlib.h> #include "minmax.h" #include "strnlen1.h" extern mbstate_t _gl_mbsrtowcs_state; #define FUNC mbsnrtowcs #define DCHAR_T wchar_t #define INTERNAL_STATE _gl_mbsrtowcs_state #define MBRTOWC mbrtowc #include "mbsnrtowcs-impl.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbspbrk.c���������������������������������������������������������������0000664�0000000�0000000�00000004022�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. */ char * mbspbrk (const char *string, const char *accept) { /* Optimize two cases. */ if (accept[0] == '\0') return NULL; if (accept[1] == '\0') return mbschr (string, accept[0]); /* General case. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1) { if (mbschr (accept, * mbui_cur_ptr (iter))) return (char *) mbui_cur_ptr (iter); } else { mbui_iterator_t aiter; for (mbui_init (aiter, accept); mbui_avail (aiter); mbui_advance (aiter)) if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) return (char *) mbui_cur_ptr (iter); } } return NULL; } else return strpbrk (string, accept); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbspcasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000005776�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include "mbuiter.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! */ char * mbspcasecmp (const char *string, const char *prefix) { /* This is essentially the same as mbsncasecmp (string, prefix, mbslen (prefix)) just with small optimizations. */ if (string == prefix) return (char *) (string + strlen (string)); /* Be careful not to look at the entire extent of STRING or PREFIX until needed. This is useful because when two strings differ, the difference is most often already in the very few first characters. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter1; mbui_iterator_t iter2; mbui_init (iter1, string); mbui_init (iter2, prefix); while (mbui_avail (iter1) && mbui_avail (iter2)) { int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2)); if (cmp != 0) return NULL; mbui_advance (iter1); mbui_advance (iter2); } if (!mbui_avail (iter2)) /* PREFIX equals STRING or is terminated before STRING. */ return (char *) mbui_cur_ptr (iter1); else /* STRING terminated before PREFIX. */ return NULL; } else { const unsigned char *p1 = (const unsigned char *) string; const unsigned char *p2 = (const unsigned char *) prefix; unsigned char c1, c2; for (; ; p1++, p2++) { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (c2 == '\0' || c1 != c2) break; } if (c2 == '\0') /* PREFIX equals STRING or is terminated before STRING. */ return (char *) p1; else /* STRING terminated before PREFIX. */ return NULL; } } ��gnulib-20210822~d383792/lib/mbsrchr.c���������������������������������������������������������������0000664�0000000�0000000�00000003371�14110572173�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for the last occurrence of a character. Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. */ char * mbsrchr (const char *string, int c) { if (MB_CUR_MAX > 1 /* Optimization: We know that ASCII characters < 0x30 don't occur as part of multibyte characters longer than 1 byte. Hence, if c < 0x30, the faster unibyte loop can be used. */ && (unsigned char) c >= 0x30) { const char *result = NULL; mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1 && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c) result = mbui_cur_ptr (iter); } return (char *) result; } else return strrchr (string, c); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsrtoc32s-state.c������������������������������������������������������0000664�0000000�0000000�00000003146�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 32-bit wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> #include <wchar.h> /* Internal state used by the functions mbsrtoc32s() and mbsnrtoc32s(). */ mbstate_t _gl_mbsrtoc32s_state /* The state must initially be in the "initial state"; so, zero-initialize it. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html>. When it needs an initializer, use 0 or {0} as initializer? 0 only works when mbstate_t is a scalar type (such as when gnulib defines it, or on AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else /* Use braces, to be on the safe side. */ = { 0 } #endif ; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsrtoc32s.c������������������������������������������������������������0000664�0000000�0000000�00000003171�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 32-bit wide string. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #include <wchar.h> #if (HAVE_WORKING_MBRTOC32 && !defined __GLIBC__) || _GL_LARGE_CHAR32_T /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding, or char32_t is wider than wchar_t. */ # include <errno.h> # include <limits.h> # include <stdlib.h> # include "strnlen1.h" extern mbstate_t _gl_mbsrtoc32s_state; # define FUNC mbsrtoc32s # define DCHAR_T char32_t # define INTERNAL_STATE _gl_mbsrtoc32s_state # define MBRTOWC mbrtoc32 # include "mbsrtowcs-impl.h" #else /* char32_t and wchar_t are equivalent. */ # include "verify.h" verify (sizeof (char32_t) == sizeof (wchar_t)); size_t mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) { return mbsrtowcs ((wchar_t *) dest, srcp, len, ps); } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsrtowcs-impl.h��������������������������������������������������������0000664�0000000�0000000�00000007143�14110572173�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ size_t FUNC (DCHAR_T *dest, const char **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &INTERNAL_STATE; { const char *src = *srcp; if (dest != NULL) { DCHAR_T *destptr = dest; for (; len > 0; destptr++, len--) { size_t src_avail; size_t ret; /* An optimized variant of src_avail = strnlen1 (src, MB_LEN_MAX); */ if (src[0] == '\0') src_avail = 1; else if (src[1] == '\0') src_avail = 2; else if (src[2] == '\0') src_avail = 3; else if (MB_LEN_MAX <= 4 || src[3] == '\0') src_avail = 4; else src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); /* Parse the next multibyte character. */ ret = MBRTOWC (destptr, src, src_avail, ps); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte or that is longer than MB_LEN_MAX bytes. Cannot happen. */ abort (); if (ret == (size_t)(-1)) goto bad_input; if (ret == 0) { src = NULL; /* Here mbsinit (ps). */ break; } src += ret; } *srcp = src; return destptr - dest; } else { /* Ignore dest and len, don't store *srcp at the end, and don't clobber *ps. */ mbstate_t state = *ps; size_t totalcount = 0; for (;; totalcount++) { size_t src_avail; size_t ret; /* An optimized variant of src_avail = strnlen1 (src, MB_LEN_MAX); */ if (src[0] == '\0') src_avail = 1; else if (src[1] == '\0') src_avail = 2; else if (src[2] == '\0') src_avail = 3; else if (MB_LEN_MAX <= 4 || src[3] == '\0') src_avail = 4; else src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); /* Parse the next multibyte character. */ ret = MBRTOWC (NULL, src, src_avail, &state); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte or that is longer than MB_LEN_MAX bytes. Cannot happen. */ abort (); if (ret == (size_t)(-1)) goto bad_input2; if (ret == 0) { /* Here mbsinit (&state). */ break; } src += ret; } return totalcount; } bad_input: *srcp = src; bad_input2: errno = EILSEQ; return (size_t)(-1); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsrtowcs-state.c�������������������������������������������������������0000664�0000000�0000000�00000003134�14110572173�0020353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> #include <wchar.h> /* Internal state used by the functions mbsrtowcs() and mbsnrtowcs(). */ mbstate_t _gl_mbsrtowcs_state /* The state must initially be in the "initial state"; so, zero-initialize it. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html>. When it needs an initializer, use 0 or {0} as initializer? 0 only works when mbstate_t is a scalar type (such as when gnulib defines it, or on AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else /* Use braces, to be on the safe side. */ = { 0 } #endif ; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsrtowcs.c�������������������������������������������������������������0000664�0000000�0000000�00000002162�14110572173�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <limits.h> #include <stdlib.h> #include "strnlen1.h" extern mbstate_t _gl_mbsrtowcs_state; #define FUNC mbsrtowcs #define DCHAR_T wchar_t #define INTERNAL_STATE _gl_mbsrtowcs_state #define MBRTOWC mbrtowc #include "mbsrtowcs-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbssep.c����������������������������������������������������������������0000664�0000000�0000000�00000003203�14110572173�0016500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenizing a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #include "mbuiter.h" char * mbssep (char **stringp, const char *delim) { if (MB_CUR_MAX > 1) { char *start = *stringp; char *ptr; if (start == NULL) return NULL; /* No need to optimize the cases of 0 or 1 delimiters specially, since mbspbrk already optimizes them. */ ptr = mbspbrk (start, delim); if (ptr == NULL) { *stringp = NULL; return start; } else { mbui_iterator_t iter; mbui_init (iter, ptr); if (!mbui_avail (iter)) abort (); mbui_advance (iter); *ptr = '\0'; *stringp = (char *) mbui_cur_ptr (iter); return start; } } else return strsep (stringp, delim); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsspn.c����������������������������������������������������������������0000664�0000000�0000000�00000005315�14110572173�0016517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character outside a given set of characters. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. */ size_t mbsspn (const char *string, const char *reject) { /* Optimize two cases. */ if (reject[0] == '\0') return 0; if (reject[1] == '\0') { unsigned char uc = (unsigned char) reject[0]; if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) if (!(mb_len (mbui_cur (iter)) == 1 && (unsigned char) * mbui_cur_ptr (iter) == uc)) break; return mbui_cur_ptr (iter) - string; } else { const char *ptr; for (ptr = string; *ptr != '\0'; ptr++) if ((unsigned char) *ptr != uc) break; return ptr - string; } } /* General case. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1) { if (mbschr (reject, * mbui_cur_ptr (iter)) == NULL) goto found; } else { mbui_iterator_t aiter; for (mbui_init (aiter, reject);; mbui_advance (aiter)) { if (!mbui_avail (aiter)) goto found; if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) break; } } } found: return mbui_cur_ptr (iter) - string; } else return strspn (string, reject); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbsstr.c����������������������������������������������������������������0000664�0000000�0000000�00000033724�14110572173�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. -*- coding: utf-8 -*- Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdbool.h> #include <stddef.h> /* for NULL, in case a nonstandard string.h lacks it */ #include <stdlib.h> #include "malloca.h" #include "mbuiter.h" /* Knuth-Morris-Pratt algorithm. */ #define UNIT unsigned char #define CANON_ELEMENT(c) c #include "str-kmp.h" /* Knuth-Morris-Pratt algorithm. See https://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm Return a boolean indicating success: Return true and set *RESULTP if the search was completed. Return false if it was aborted because not enough memory was available. */ static bool knuth_morris_pratt_multibyte (const char *haystack, const char *needle, const char **resultp) { size_t m = mbslen (needle); mbchar_t *needle_mbchars; size_t *table; /* Allocate room for needle_mbchars and the table. */ void *memory = nmalloca (m, sizeof (mbchar_t) + sizeof (size_t)); void *table_memory; if (memory == NULL) return false; needle_mbchars = memory; table_memory = needle_mbchars + m; table = table_memory; /* Fill needle_mbchars. */ { mbui_iterator_t iter; size_t j; j = 0; for (mbui_init (iter, needle); mbui_avail (iter); mbui_advance (iter), j++) mb_copy (&needle_mbchars[j], &mbui_cur (iter)); } /* Fill the table. For 0 < i < m: 0 < table[i] <= i is defined such that forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], and table[i] is as large as possible with this property. This implies: 1) For 0 < i < m: If table[i] < i, needle[table[i]..i-1] = needle[0..i-1-table[i]]. 2) For 0 < i < m: rhaystack[0..i-1] == needle[0..i-1] and exists h, i <= h < m: rhaystack[h] != needle[h] implies forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. table[0] remains uninitialized. */ { size_t i, j; /* i = 1: Nothing to verify for x = 0. */ table[1] = 1; j = 0; for (i = 2; i < m; i++) { /* Here: j = i-1 - table[i-1]. The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < table[i-1], by induction. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ mbchar_t *b = &needle_mbchars[i - 1]; for (;;) { /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < i-1-j. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ if (mb_equal (*b, needle_mbchars[j])) { /* Set table[i] := i-1-j. */ table[i] = i - ++j; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for x = i-1-j, because needle[i-1] != needle[j] = needle[i-1-x]. */ if (j == 0) { /* The inequality holds for all possible x. */ table[i] = i; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for i-1-j < x < i-1-j+table[j], because for these x: needle[x..i-2] = needle[x-(i-1-j)..j-1] != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) = needle[0..i-2-x], hence needle[x..i-1] != needle[0..i-1-x]. Furthermore needle[i-1-j+table[j]..i-2] = needle[table[j]..j-1] = needle[0..j-1-table[j]] (by definition of table[j]). */ j = j - table[j]; } /* Here: j = i - table[i]. */ } } /* Search, using the table to accelerate the processing. */ { size_t j; mbui_iterator_t rhaystack; mbui_iterator_t phaystack; *resultp = NULL; j = 0; mbui_init (rhaystack, haystack); mbui_init (phaystack, haystack); /* Invariant: phaystack = rhaystack + j. */ while (mbui_avail (phaystack)) if (mb_equal (needle_mbchars[j], mbui_cur (phaystack))) { j++; mbui_advance (phaystack); if (j == m) { /* The entire needle has been found. */ *resultp = mbui_cur_ptr (rhaystack); break; } } else if (j > 0) { /* Found a match of needle[0..j-1], mismatch at needle[j]. */ size_t count = table[j]; j -= count; for (; count > 0; count--) { if (!mbui_avail (rhaystack)) abort (); mbui_advance (rhaystack); } } else { /* Found a mismatch at needle[0] already. */ if (!mbui_avail (rhaystack)) abort (); mbui_advance (rhaystack); mbui_advance (phaystack); } } freea (memory); return true; } /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. */ char * mbsstr (const char *haystack, const char *needle) { /* Be careful not to look at the entire extent of haystack or needle until needed. This is useful because of these two cases: - haystack may be very long, and a match of needle found early, - needle may be very long, and not even a short initial segment of needle may be found in haystack. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter_needle; mbui_init (iter_needle, needle); if (mbui_avail (iter_needle)) { /* Minimizing the worst-case complexity: Let n = mbslen(haystack), m = mbslen(needle). The naïve algorithm is O(n*m) worst-case. The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a memory allocation. To achieve linear complexity and yet amortize the cost of the memory allocation, we activate the Knuth-Morris-Pratt algorithm only once the naïve algorithm has already run for some time; more precisely, when - the outer loop count is >= 10, - the average number of comparisons per outer loop is >= 5, - the total number of comparisons is >= m. But we try it only once. If the memory allocation attempt failed, we don't retry it. */ bool try_kmp = true; size_t outer_loop_count = 0; size_t comparison_count = 0; size_t last_ccount = 0; /* last comparison count */ mbui_iterator_t iter_needle_last_ccount; /* = needle + last_ccount */ mbui_iterator_t iter_haystack; mbui_init (iter_needle_last_ccount, needle); mbui_init (iter_haystack, haystack); for (;; mbui_advance (iter_haystack)) { if (!mbui_avail (iter_haystack)) /* No match. */ return NULL; /* See whether it's advisable to use an asymptotically faster algorithm. */ if (try_kmp && outer_loop_count >= 10 && comparison_count >= 5 * outer_loop_count) { /* See if needle + comparison_count now reaches the end of needle. */ size_t count = comparison_count - last_ccount; for (; count > 0 && mbui_avail (iter_needle_last_ccount); count--) mbui_advance (iter_needle_last_ccount); last_ccount = comparison_count; if (!mbui_avail (iter_needle_last_ccount)) { /* Try the Knuth-Morris-Pratt algorithm. */ const char *result; bool success = knuth_morris_pratt_multibyte (haystack, needle, &result); if (success) return (char *) result; try_kmp = false; } } outer_loop_count++; comparison_count++; if (mb_equal (mbui_cur (iter_haystack), mbui_cur (iter_needle))) /* The first character matches. */ { mbui_iterator_t rhaystack; mbui_iterator_t rneedle; memcpy (&rhaystack, &iter_haystack, sizeof (mbui_iterator_t)); mbui_advance (rhaystack); mbui_init (rneedle, needle); if (!mbui_avail (rneedle)) abort (); mbui_advance (rneedle); for (;; mbui_advance (rhaystack), mbui_advance (rneedle)) { if (!mbui_avail (rneedle)) /* Found a match. */ return (char *) mbui_cur_ptr (iter_haystack); if (!mbui_avail (rhaystack)) /* No match. */ return NULL; comparison_count++; if (!mb_equal (mbui_cur (rhaystack), mbui_cur (rneedle))) /* Nothing in this round. */ break; } } } } else return (char *) haystack; } else { if (*needle != '\0') { /* Minimizing the worst-case complexity: Let n = strlen(haystack), m = strlen(needle). The naïve algorithm is O(n*m) worst-case. The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a memory allocation. To achieve linear complexity and yet amortize the cost of the memory allocation, we activate the Knuth-Morris-Pratt algorithm only once the naïve algorithm has already run for some time; more precisely, when - the outer loop count is >= 10, - the average number of comparisons per outer loop is >= 5, - the total number of comparisons is >= m. But we try it only once. If the memory allocation attempt failed, we don't retry it. */ bool try_kmp = true; size_t outer_loop_count = 0; size_t comparison_count = 0; size_t last_ccount = 0; /* last comparison count */ const char *needle_last_ccount = needle; /* = needle + last_ccount */ /* Speed up the following searches of needle by caching its first character. */ char b = *needle++; for (;; haystack++) { if (*haystack == '\0') /* No match. */ return NULL; /* See whether it's advisable to use an asymptotically faster algorithm. */ if (try_kmp && outer_loop_count >= 10 && comparison_count >= 5 * outer_loop_count) { /* See if needle + comparison_count now reaches the end of needle. */ if (needle_last_ccount != NULL) { needle_last_ccount += strnlen (needle_last_ccount, comparison_count - last_ccount); if (*needle_last_ccount == '\0') needle_last_ccount = NULL; last_ccount = comparison_count; } if (needle_last_ccount == NULL) { /* Try the Knuth-Morris-Pratt algorithm. */ const unsigned char *result; bool success = knuth_morris_pratt ((const unsigned char *) haystack, (const unsigned char *) (needle - 1), strlen (needle - 1), &result); if (success) return (char *) result; try_kmp = false; } } outer_loop_count++; comparison_count++; if (*haystack == b) /* The first character matches. */ { const char *rhaystack = haystack + 1; const char *rneedle = needle; for (;; rhaystack++, rneedle++) { if (*rneedle == '\0') /* Found a match. */ return (char *) haystack; if (*rhaystack == '\0') /* No match. */ return NULL; comparison_count++; if (*rhaystack != *rneedle) /* Nothing in this round. */ break; } } } } else return (char *) haystack; } } ��������������������������������������������gnulib-20210822~d383792/lib/mbstoc32s.c�������������������������������������������������������������0000664�0000000�0000000�00000002113�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 32-bit wide string. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. 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/>. */ #include <config.h> /* Specification. */ #include <uchar.h> #include <string.h> #include <wchar.h> size_t mbstoc32s (char32_t *dest, const char *src, size_t len) { mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); return mbsrtoc32s (dest, &src, len, &state); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbstok_r.c��������������������������������������������������������������0000664�0000000�0000000�00000003426�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenizing a string. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include "mbuiter.h" char * mbstok_r (char *string, const char *delim, char **save_ptr) { if (MB_CUR_MAX > 1) { if (string == NULL) { string = *save_ptr; if (string == NULL) return NULL; /* reminder that end of token sequence has been reached */ } /* Skip leading delimiters. */ string += mbsspn (string, delim); /* Found a token? */ if (*string == '\0') { *save_ptr = NULL; return NULL; } /* Move past the token. */ { char *token_end = mbspbrk (string, delim); if (token_end != NULL) { /* NUL-terminate the token. */ *token_end = '\0'; *save_ptr = token_end + 1; } else *save_ptr = NULL; } return string; } else return strtok_r (string, delim, save_ptr); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbswidth.c��������������������������������������������������������������0000664�0000000�0000000�00000014251�14110572173�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a string. Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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 <haible@clisp.cons.org>. */ #include <config.h> /* Specification. */ #include "mbswidth.h" /* Get MB_CUR_MAX. */ #include <stdlib.h> #include <string.h> /* Get isprint(). */ #include <ctype.h> /* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */ #include <wchar.h> /* Get iswcntrl(). */ #include <wctype.h> /* Get INT_MAX. */ #include <limits.h> /* Returns the number of columns needed to represent the multibyte character string pointed to by STRING. If a non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned. With flags = MBSW_REJECT_INVALID | MBSW_REJECT_UNPRINTABLE, this is the multibyte analogue of the wcswidth function. */ int mbswidth (const char *string, int flags) { return mbsnwidth (string, strlen (string), flags); } /* Returns the number of columns needed to represent the multibyte character string pointed to by STRING of length NBYTES. If a non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned. */ int mbsnwidth (const char *string, size_t nbytes, int flags) { const char *p = string; const char *plimit = p + nbytes; int width; width = 0; if (MB_CUR_MAX > 1) { while (p < plimit) switch (*p) { 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 '~': /* These characters are printable ASCII characters. */ p++; width++; break; default: /* If we have a multibyte sequence, scan it up to its end. */ { mbstate_t mbstate; memset (&mbstate, 0, sizeof mbstate); do { wchar_t wc; size_t bytes; int w; bytes = mbrtowc (&wc, p, plimit - p, &mbstate); if (bytes == (size_t) -1) /* An invalid multibyte sequence was encountered. */ { if (!(flags & MBSW_REJECT_INVALID)) { p++; width++; break; } else return -1; } if (bytes == (size_t) -2) /* An incomplete multibyte character at the end. */ { if (!(flags & MBSW_REJECT_INVALID)) { p = plimit; width++; break; } else return -1; } if (bytes == 0) /* A null wide character was encountered. */ bytes = 1; w = wcwidth (wc); if (w >= 0) /* A printable multibyte character. */ { if (w > INT_MAX - width) goto overflow; width += w; } else /* An unprintable multibyte character. */ if (!(flags & MBSW_REJECT_UNPRINTABLE)) { if (!iswcntrl (wc)) { if (width == INT_MAX) goto overflow; width++; } } else return -1; p += bytes; } while (! mbsinit (&mbstate)); } break; } return width; } while (p < plimit) { unsigned char c = (unsigned char) *p++; if (isprint (c)) { if (width == INT_MAX) goto overflow; width++; } else if (!(flags & MBSW_REJECT_UNPRINTABLE)) { if (!iscntrl (c)) { if (width == INT_MAX) goto overflow; width++; } } else return -1; } return width; overflow: return INT_MAX; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbswidth.h��������������������������������������������������������������0000664�0000000�0000000�00000003575�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a string. Copyright (C) 2000-2004, 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stddef.h> /* Avoid a clash of our mbswidth() with a function of the same name defined in UnixWare 7.1.1 <wchar.h>. We need this #include before the #define below. */ #if HAVE_DECL_MBSWIDTH_IN_WCHAR_H # include <wchar.h> #endif #ifdef __cplusplus extern "C" { #endif /* Optional flags to influence mbswidth/mbsnwidth behavior. */ /* If this bit is set, return -1 upon finding an invalid or incomplete character. Otherwise, assume invalid characters have width 1. */ #define MBSW_REJECT_INVALID 1 /* If this bit is set, return -1 upon finding a non-printable character. Otherwise, assume unprintable characters have width 0 if they are control characters and 1 otherwise. */ #define MBSW_REJECT_UNPRINTABLE 2 /* Returns the number of screen columns needed for STRING. */ #define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */ extern int mbswidth (const char *string, int flags); /* Returns the number of screen columns needed for the NBYTES bytes starting at BUF. */ extern int mbsnwidth (const char *buf, size_t nbytes, int flags); #ifdef __cplusplus } #endif �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbtowc-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002650�14110572173�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ /* We don't need a static internal state, because the encoding is not state dependent, and when mbrtowc returns (size_t)(-2). we throw the result away. */ int mbtowc (wchar_t *pwc, const char *s, size_t n) { if (s == NULL) return 0; else { mbstate_t state; wchar_t wc; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { errno = EILSEQ; return -1; } if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : result); } } ����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbtowc-lock.c�����������������������������������������������������������0000664�0000000�0000000�00000010446�14110572173�0017437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2021 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>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_mbtowc_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_MBTOWC_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by mbrtowc and mbrtoc32. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_mbtowc_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by mbrtowc and mbrtoc32. */ CRITICAL_SECTION * gl_get_mbtowc_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ pthread_mutex_t * gl_get_mbtowc_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ mtx_t * gl_get_mbtowc_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock; # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbtowc-lock.h�����������������������������������������������������������0000664�0000000�0000000�00000006304�14110572173�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Use the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2021 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>, 2019-2020. */ /* Use a lock, so that no two threads can invoke mbtowc at the same time. */ static inline int mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) { /* Put the hidden internal state of mbtowc into its initial state. This is needed at least with glibc, uClibc, and MSVC CRT. See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */ mbtowc (NULL, NULL, 0); return mbtowc (pwc, p, m); } /* Prohibit renaming this symbol. */ #undef gl_get_mbtowc_lock #if GNULIB_MBRTOWC_SINGLE_THREAD /* All uses of this function are in a single thread. No locking needed. */ static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { return mbtowc_unlocked (pwc, p, m); } #elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); int ret; EnterCriticalSection (lock); ret = mbtowc_unlocked (pwc, p, m); LeaveCriticalSection (lock); return ret; } #elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_mbtowc_lock (void); # if HAVE_WEAK_SYMBOLS /* IRIX */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_mbtowc_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = mbtowc_unlocked (pwc, p, m); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return mbtowc_unlocked (pwc, p, m); } #elif HAVE_THREADS_H extern mtx_t *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { mtx_t *lock = gl_get_mbtowc_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = mbtowc_unlocked (pwc, p, m); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbtowc.c����������������������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0016510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <wchar.h> #include "mbtowc-impl.h" ������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbuiter.c���������������������������������������������������������������0000664�0000000�0000000�00000001556�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define MBUITER_INLINE _GL_EXTERN_INLINE #include "mbuiter.h" ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mbuiter.h���������������������������������������������������������������0000664�0000000�0000000�00000017210�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2001, 2005, 2007, 2009-2021 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>. */ /* The macros in this file implement forward iteration through a multi-byte string, without knowing its length a-priori. With these macros, an iteration loop that looks like char *iter; for (iter = buf; *iter != '\0'; iter++) { do_something (*iter); } becomes mbui_iterator_t iter; for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter)) { do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); } The benefit of these macros over plain use of mbrtowc is: - Handling of invalid multibyte sequences is possible without making the code more complicated, while still preserving the invalid multibyte sequences. Compared to mbiter.h, the macros here don't need to know the string's length a-priori. The downside is that at each step, the look-ahead that guards against overrunning the terminating '\0' is more expensive. The mbui_* macros are therefore suitable when there is a high probability that only the first few multibyte characters need to be inspected. Whereas the mbi_* macros are better if usually the iteration runs through the entire string. mbui_iterator_t is a type usable for variable declarations. mbui_init (iter, startptr) initializes the iterator, starting at startptr. mbui_avail (iter) returns true if there are more multibyte characters available before the end of string is reached. In this case, mbui_cur (iter) is initialized to the next multibyte character. mbui_advance (iter) advances the iterator by one multibyte character. mbui_cur (iter) returns the current multibyte character, of type mbchar_t. All the macros defined in mbchar.h can be used on it. mbui_cur_ptr (iter) return a pointer to the beginning of the current multibyte character. mbui_reloc (iter, ptrdiff) relocates iterator when the string is moved by ptrdiff bytes. mbui_copy (&destiter, &srciter) copies srciter to destiter. Here are the function prototypes of the macros. extern void mbui_init (mbui_iterator_t iter, const char *startptr); extern bool mbui_avail (mbui_iterator_t iter); extern void mbui_advance (mbui_iterator_t iter); extern mbchar_t mbui_cur (mbui_iterator_t iter); extern const char * mbui_cur_ptr (mbui_iterator_t iter); extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff); extern void mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old); */ #ifndef _MBUITER_H #define _MBUITER_H 1 #include <assert.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "mbchar.h" #include "strnlen1.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBUITER_INLINE # define MBUITER_INLINE _GL_INLINE #endif struct mbuiter_multi { bool in_shift; /* true if next byte may not be interpreted as ASCII */ mbstate_t state; /* if in_shift: current shift state */ bool next_done; /* true if mbui_avail has already filled the following */ struct mbchar cur; /* the current character: const char *cur.ptr pointer to current character The following are only valid after mbui_avail. size_t cur.bytes number of bytes of current character bool cur.wc_valid true if wc is a valid wide character wchar_t cur.wc if wc_valid: the current character */ }; MBUITER_INLINE void mbuiter_multi_next (struct mbuiter_multi *iter) { if (iter->next_done) return; if (iter->in_shift) goto with_shift; /* Handle most ASCII characters quickly, without calling mbrtowc(). */ if (is_basic (*iter->cur.ptr)) { /* These characters are part of the basic character set. ISO C 99 guarantees that their wide character code is identical to their char code. */ iter->cur.bytes = 1; iter->cur.wc = *iter->cur.ptr; iter->cur.wc_valid = true; } else { assert (mbsinit (&iter->state)); iter->in_shift = true; with_shift: iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, strnlen1 (iter->cur.ptr, MB_CUR_MAX), &iter->state); if (iter->cur.bytes == (size_t) -1) { /* An invalid multibyte sequence was encountered. */ iter->cur.bytes = 1; iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not very important; the string is bogus anyway. */ } else if (iter->cur.bytes == (size_t) -2) { /* An incomplete multibyte character at the end. */ iter->cur.bytes = strlen (iter->cur.ptr); iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not important; the string end is reached anyway. */ } else { if (iter->cur.bytes == 0) { /* A null wide character was encountered. */ iter->cur.bytes = 1; assert (*iter->cur.ptr == '\0'); assert (iter->cur.wc == 0); } iter->cur.wc_valid = true; /* When in the initial state, we can go back treating ASCII characters more quickly. */ if (mbsinit (&iter->state)) iter->in_shift = false; } } iter->next_done = true; } MBUITER_INLINE void mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) { iter->cur.ptr += ptrdiff; } MBUITER_INLINE void mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter) { if ((new_iter->in_shift = old_iter->in_shift)) memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); else memset (&new_iter->state, 0, sizeof (mbstate_t)); new_iter->next_done = old_iter->next_done; mb_copy (&new_iter->cur, &old_iter->cur); } /* Iteration macros. */ typedef struct mbuiter_multi mbui_iterator_t; #define mbui_init(iter, startptr) \ ((iter).cur.ptr = (startptr), \ (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ (iter).next_done = false) #define mbui_avail(iter) \ (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) #define mbui_advance(iter) \ ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) /* Access to the current character. */ #define mbui_cur(iter) (iter).cur #define mbui_cur_ptr(iter) (iter).cur.ptr /* Relocation. */ #define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff) /* Copying an iterator. */ #define mbui_copy mbuiter_multi_copy _GL_INLINE_HEADER_END #endif /* _MBUITER_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/md2.c�������������������������������������������������������������������0000664�0000000�0000000�00000017127�14110572173�0015703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to compute MD2 message digest of files or memory blocks. according to the definition of MD2 in RFC 1319 from April 1992. Copyright (C) 1995-1997, 1999-2003, 2005-2006, 2008-2021 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/>. */ /* Adapted by Simon Josefsson from public domain Libtomcrypt 1.06 by Tom St Denis. */ #include <config.h> #include "md2.h" #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <minmax.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif static void md2_update_chksum (struct md2_ctx *md); static void md2_compress (struct md2_ctx *md); /* Initialize structure containing state of computation. (RFC 1319, 3.3: Step 3) */ void md2_init_ctx (struct md2_ctx *ctx) { memset (ctx->X, 0, sizeof (ctx->X)); memset (ctx->chksum, 0, sizeof (ctx->chksum)); memset (ctx->buf, 0, sizeof (ctx->buf)); ctx->curlen = 0; } /* Put result from CTX in first 16 bytes following RESBUF. The result must be in little endian byte order. */ void * md2_read_ctx (const struct md2_ctx *ctx, void *resbuf) { memcpy (resbuf, ctx->X, 16); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ void * md2_finish_ctx (struct md2_ctx *ctx, void *resbuf) { unsigned long i, k; /* pad the message */ k = 16 - ctx->curlen; for (i = ctx->curlen; i < 16; i++) { ctx->buf[i] = (unsigned char) k; } /* hash and update */ md2_compress (ctx); md2_update_chksum (ctx); /* hash checksum */ memcpy (ctx->buf, ctx->chksum, 16); md2_compress (ctx); return md2_read_ctx (ctx, resbuf); } /* Compute MD2 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int md2_stream (FILE *stream, void *resblock) { struct md2_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ md2_init_ctx (&ctx); /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } /* We've read at least one byte, so ignore errors. But always check for EOF, since feof may be true even though N > 0. Otherwise, we could end up calling fread after EOF. */ if (feof (stream)) goto process_partial_block; } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ md2_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) md2_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ md2_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * md2_buffer (const char *buffer, size_t len, void *resblock) { struct md2_ctx ctx; /* Initialize the computation context. */ md2_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ md2_process_block (buffer, len, &ctx); /* Put result in desired memory area. */ return md2_finish_ctx (&ctx, resblock); } void md2_process_bytes (const void *buffer, size_t len, struct md2_ctx *ctx) { const char *in = buffer; unsigned long n; while (len > 0) { n = MIN (len, (16 - ctx->curlen)); memcpy (ctx->buf + ctx->curlen, in, (size_t) n); ctx->curlen += n; in += n; len -= n; /* is 16 bytes full? */ if (ctx->curlen == 16) { md2_compress (ctx); md2_update_chksum (ctx); ctx->curlen = 0; } } } static const unsigned char PI_SUBST[256] = { 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 }; /* adds 16 bytes to the checksum */ static void md2_update_chksum (struct md2_ctx *ctx) { int j; unsigned char L; L = ctx->chksum[15]; for (j = 0; j < 16; j++) { /* caution, the RFC says its "C[j] = S[M[i*16+j] xor L]" but the reference source code [and test vectors] say otherwise. */ L = (ctx->chksum[j] ^= PI_SUBST[(int) (ctx->buf[j] ^ L)] & 255); } } static void md2_compress (struct md2_ctx *ctx) { size_t j, k; unsigned char t; /* copy block */ for (j = 0; j < 16; j++) { ctx->X[16 + j] = ctx->buf[j]; ctx->X[32 + j] = ctx->X[j] ^ ctx->X[16 + j]; } t = (unsigned char) 0; /* do 18 rounds */ for (j = 0; j < 18; j++) { for (k = 0; k < 48; k++) { t = (ctx->X[k] ^= PI_SUBST[(int) (t & 255)]); } t = (t + (unsigned char) j) & 255; } } /* Process LEN bytes of BUFFER, accumulating context into CTX. */ void md2_process_block (const void *buffer, size_t len, struct md2_ctx *ctx) { md2_process_bytes (buffer, len, ctx); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/md2.h�������������������������������������������������������������������0000664�0000000�0000000�00000006064�14110572173�0015706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for MD2 sum library functions. Copyright (C) 2000-2001, 2003, 2005, 2008-2021 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/>. */ #ifndef MD2_H # define MD2_H 1 # include <stdio.h> # include <stddef.h> # ifdef __cplusplus extern "C" { # endif # define MD2_DIGEST_SIZE 16 /* Structure to save state of computation between the single steps. */ struct md2_ctx { unsigned char chksum[16], X[48], buf[16]; size_t curlen; }; /* Initialize structure containing state of computation. */ extern void md2_init_ctx (struct md2_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void md2_process_block (const void *buffer, size_t len, struct md2_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void md2_process_bytes (const void *buffer, size_t len, struct md2_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md2_finish_ctx (struct md2_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md2_read_ctx (const struct md2_ctx *ctx, void *restrict resbuf); /* Compute MD2 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int md2_stream (FILE *stream, void *resblock); /* Compute MD2 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md2_buffer (const char *buffer, size_t len, void *restrict resblock); # ifdef __cplusplus } # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/md4.c�������������������������������������������������������������������0000664�0000000�0000000�00000025263�14110572173�0015705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to compute MD4 message digest of files or memory blocks. according to the definition of MD4 in RFC 1320 from April 1992. Copyright (C) 1995-1997, 1999-2003, 2005-2006, 2008-2021 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/>. */ /* Adapted by Simon Josefsson from gnulib md5.? and Libgcrypt cipher/md4.c . */ #include <config.h> #include "md4.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) bswap_32 (n) #else # define SWAP(n) (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1320, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Initialize structure containing state of computation. (RFC 1320, 3.3: Step 3) */ void md4_init_ctx (struct md4_ctx *ctx) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the 4 byte value from v into the memory location pointed to by *cp, If your architecture allows unaligned access this is equivalent to * (uint32_t *) cp = v */ static void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 16 bytes following RESBUF. The result must be in little endian byte order. */ void * md4_read_ctx (const struct md4_ctx *ctx, void *resbuf) { char *r = resbuf; set_uint32 (r + 0 * sizeof ctx->A, SWAP (ctx->A)); set_uint32 (r + 1 * sizeof ctx->B, SWAP (ctx->B)); set_uint32 (r + 2 * sizeof ctx->C, SWAP (ctx->C)); set_uint32 (r + 3 * sizeof ctx->D, SWAP (ctx->D)); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ void * md4_finish_ctx (struct md4_ctx *ctx, void *resbuf) { /* Take yet unprocessed bytes into account. */ uint32_t bytes = ctx->buflen; size_t pad; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; memcpy (&((char*)ctx->buffer)[bytes], fillbuf, pad); /* Put the 64-bit file length in *bits* at the end of the buffer. */ ctx->buffer[(bytes + pad) / 4] = SWAP (ctx->total[0] << 3); ctx->buffer[(bytes + pad) / 4 + 1] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); /* Process last bytes. */ md4_process_block (ctx->buffer, bytes + pad + 8, ctx); return md4_read_ctx (ctx, resbuf); } /* Compute MD4 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int md4_stream (FILE * stream, void *resblock) { struct md4_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ md4_init_ctx (&ctx); /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } /* We've read at least one byte, so ignore errors. But always check for EOF, since feof may be true even though N > 0. Otherwise, we could end up calling fread after EOF. */ if (feof (stream)) goto process_partial_block; } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ md4_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) md4_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ md4_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* Compute MD4 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * md4_buffer (const char *buffer, size_t len, void *resblock) { struct md4_ctx ctx; /* Initialize the computation context. */ md4_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ md4_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return md4_finish_ctx (&ctx, resblock); } void md4_process_bytes (const void *buffer, size_t len, struct md4_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char*)ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { md4_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap. */ memcpy (ctx->buffer, &((char*)ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { md4_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { md4_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char*)ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { md4_process_block (ctx->buffer, 64, ctx); left_over -= 64; memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between md5.c and md4.c --- */ /* MD4 round constants */ #define K1 0x5a827999 #define K2 0x6ed9eba1 /* Round functions. */ #define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) #define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) #define R1(a,b,c,d,k,s) a=rol(a+F(b,c,d)+x[k],s); #define R2(a,b,c,d,k,s) a=rol(a+G(b,c,d)+x[k]+K1,s); #define R3(a,b,c,d,k,s) a=rol(a+H(b,c,d)+x[k]+K2,s); /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. */ void md4_process_block (const void *buffer, size_t len, struct md4_ctx *ctx) { const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t x[16]; uint32_t A = ctx->A; uint32_t B = ctx->B; uint32_t C = ctx->C; uint32_t D = ctx->D; uint32_t lolen = len; /* First increment the byte count. RFC 1320 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += lolen; ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); /* Process all bytes in the buffer with 64 bytes in each round of the loop. */ while (words < endp) { int t; for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } /* Round 1. */ R1 (A, B, C, D, 0, 3); R1 (D, A, B, C, 1, 7); R1 (C, D, A, B, 2, 11); R1 (B, C, D, A, 3, 19); R1 (A, B, C, D, 4, 3); R1 (D, A, B, C, 5, 7); R1 (C, D, A, B, 6, 11); R1 (B, C, D, A, 7, 19); R1 (A, B, C, D, 8, 3); R1 (D, A, B, C, 9, 7); R1 (C, D, A, B, 10, 11); R1 (B, C, D, A, 11, 19); R1 (A, B, C, D, 12, 3); R1 (D, A, B, C, 13, 7); R1 (C, D, A, B, 14, 11); R1 (B, C, D, A, 15, 19); /* Round 2. */ R2 (A, B, C, D, 0, 3); R2 (D, A, B, C, 4, 5); R2 (C, D, A, B, 8, 9); R2 (B, C, D, A, 12, 13); R2 (A, B, C, D, 1, 3); R2 (D, A, B, C, 5, 5); R2 (C, D, A, B, 9, 9); R2 (B, C, D, A, 13, 13); R2 (A, B, C, D, 2, 3); R2 (D, A, B, C, 6, 5); R2 (C, D, A, B, 10, 9); R2 (B, C, D, A, 14, 13); R2 (A, B, C, D, 3, 3); R2 (D, A, B, C, 7, 5); R2 (C, D, A, B, 11, 9); R2 (B, C, D, A, 15, 13); /* Round 3. */ R3 (A, B, C, D, 0, 3); R3 (D, A, B, C, 8, 9); R3 (C, D, A, B, 4, 11); R3 (B, C, D, A, 12, 15); R3 (A, B, C, D, 2, 3); R3 (D, A, B, C, 10, 9); R3 (C, D, A, B, 6, 11); R3 (B, C, D, A, 14, 15); R3 (A, B, C, D, 1, 3); R3 (D, A, B, C, 9, 9); R3 (C, D, A, B, 5, 11); R3 (B, C, D, A, 13, 15); R3 (A, B, C, D, 3, 3); R3 (D, A, B, C, 11, 9); R3 (C, D, A, B, 7, 11); R3 (B, C, D, A, 15, 15); A = ctx->A += A; B = ctx->B += B; C = ctx->C += C; D = ctx->D += D; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/md4.h�������������������������������������������������������������������0000664�0000000�0000000�00000006156�14110572173�0015712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for MD4 sum library functions. Copyright (C) 2000-2001, 2003, 2005, 2008-2021 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/>. */ #ifndef MD4_H # define MD4_H 1 # include <stdio.h> # include <stdint.h> # ifdef __cplusplus extern "C" { # endif # define MD4_DIGEST_SIZE 16 /* Structure to save state of computation between the single steps. */ struct md4_ctx { uint32_t A; uint32_t B; uint32_t C; uint32_t D; uint32_t total[2]; uint32_t buflen; uint32_t buffer[32]; }; /* Initialize structure containing state of computation. */ extern void md4_init_ctx (struct md4_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void md4_process_block (const void *buffer, size_t len, struct md4_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void md4_process_bytes (const void *buffer, size_t len, struct md4_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md4_finish_ctx (struct md4_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md4_read_ctx (const struct md4_ctx *ctx, void *restrict resbuf); /* Compute MD4 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int md4_stream (FILE * stream, void *resblock); /* Compute MD4 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md4_buffer (const char *buffer, size_t len, void *restrict resblock); # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/md5.c�������������������������������������������������������������������0000664�0000000�0000000�00000036740�14110572173�0015710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to compute MD5 message digest of files or memory blocks. according to the definition of MD5 in RFC 1321 from April 1992. Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2021 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/>. */ /* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */ #include <config.h> #if HAVE_OPENSSL_MD5 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif #include "md5.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifdef _LIBC # include <endian.h> # if __BYTE_ORDER == __BIG_ENDIAN # define WORDS_BIGENDIAN 1 # endif /* We need to keep the namespace clean so define the MD5 function protected using leading __ . */ # define md5_init_ctx __md5_init_ctx # define md5_process_block __md5_process_block # define md5_process_bytes __md5_process_bytes # define md5_finish_ctx __md5_finish_ctx # define md5_read_ctx __md5_read_ctx # define md5_stream __md5_stream # define md5_buffer __md5_buffer #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) bswap_32 (n) #else # define SWAP(n) (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif #if ! HAVE_OPENSSL_MD5 /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ void md5_init_ctx (struct md5_ctx *ctx) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the 4 byte value from v into the memory location pointed to by *cp, If your architecture allows unaligned access this is equivalent to * (uint32_t *) cp = v */ static void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 16 bytes following RESBUF. The result must be in little endian byte order. */ void * md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) { char *r = resbuf; set_uint32 (r + 0 * sizeof ctx->A, SWAP (ctx->A)); set_uint32 (r + 1 * sizeof ctx->B, SWAP (ctx->B)); set_uint32 (r + 2 * sizeof ctx->C, SWAP (ctx->C)); set_uint32 (r + 3 * sizeof ctx->D, SWAP (ctx->D)); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ void * md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) { /* Take yet unprocessed bytes into account. */ uint32_t bytes = ctx->buflen; size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; /* Put the 64-bit file length in *bits* at the end of the buffer. */ ctx->buffer[size - 2] = SWAP (ctx->total[0] << 3); ctx->buffer[size - 1] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes); /* Process last bytes. */ md5_process_block (ctx->buffer, size * 4, ctx); return md5_read_ctx (ctx, resbuf); } #endif #if defined _LIBC || defined GL_COMPILE_CRYPTO_STREAM #include "af_alg.h" /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int md5_stream (FILE *stream, void *resblock) { switch (afalg_stream (stream, "md5", resblock, MD5_DIGEST_SIZE)) { case 0: return 0; case -EIO: return 1; } char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; struct md5_ctx ctx; md5_init_ctx (&ctx); size_t sum; /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { /* Either process a partial fread() from this loop, or the fread() in afalg_stream may have gotten EOF. We need to avoid a subsequent fread() as EOF may not be sticky. For details of such systems, see: https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */ if (feof (stream)) goto process_partial_block; n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ md5_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block: /* Process any remaining bytes. */ if (sum > 0) md5_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ md5_finish_ctx (&ctx, resblock); free (buffer); return 0; } #endif #if ! HAVE_OPENSSL_MD5 /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * md5_buffer (const char *buffer, size_t len, void *resblock) { struct md5_ctx ctx; /* Initialize the computation context. */ md5_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ md5_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return md5_finish_ctx (&ctx, resblock); } void md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { md5_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap, because ctx->buflen < 64 ≤ (left_over + add) & ~63. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { md5_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { md5_process_block (ctx->buffer, 64, ctx); left_over -= 64; /* The regions in the following copy operation cannot overlap, because left_over ≤ 64. */ memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* These are the four functions used in the four steps of the MD5 algorithm and defined in the RFC 1321. The first function is a little bit optimized (as found in Colin Plumbs public domain implementation). */ /* #define FF(b, c, d) ((b & c) | (~b & d)) */ #define FF(b, c, d) (d ^ (b & (c ^ d))) #define FG(b, c, d) FF (d, b, c) #define FH(b, c, d) (b ^ c ^ d) #define FI(b, c, d) (c ^ (b | ~d)) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. */ void md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) { uint32_t correct_words[16]; const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t A = ctx->A; uint32_t B = ctx->B; uint32_t C = ctx->C; uint32_t D = ctx->D; uint32_t lolen = len; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += lolen; ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); /* Process all bytes in the buffer with 64 bytes in each round of the loop. */ while (words < endp) { uint32_t *cwp = correct_words; uint32_t A_save = A; uint32_t B_save = B; uint32_t C_save = C; uint32_t D_save = D; /* First round: using the given function, the context and a constant the next context is computed. Because the algorithms processing unit is a 32-bit word and it is determined to work on words in little endian byte order we perhaps have to change the byte order before the computation. To reduce the work for the next steps we store the swapped words in the array CORRECT_WORDS. */ #define OP(a, b, c, d, s, T) \ do \ { \ a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \ ++words; \ CYCLIC (a, s); \ a += b; \ } \ while (0) /* It is unfortunate that C does not provide an operator for cyclic rotation. Hope the C compiler is smart enough. */ #define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) /* Before we start, one word to the strange constants. They are defined in RFC 1321 as T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 Here is an equivalent invocation using Perl: perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}' */ /* Round 1. */ OP (A, B, C, D, 7, 0xd76aa478); OP (D, A, B, C, 12, 0xe8c7b756); OP (C, D, A, B, 17, 0x242070db); OP (B, C, D, A, 22, 0xc1bdceee); OP (A, B, C, D, 7, 0xf57c0faf); OP (D, A, B, C, 12, 0x4787c62a); OP (C, D, A, B, 17, 0xa8304613); OP (B, C, D, A, 22, 0xfd469501); OP (A, B, C, D, 7, 0x698098d8); OP (D, A, B, C, 12, 0x8b44f7af); OP (C, D, A, B, 17, 0xffff5bb1); OP (B, C, D, A, 22, 0x895cd7be); OP (A, B, C, D, 7, 0x6b901122); OP (D, A, B, C, 12, 0xfd987193); OP (C, D, A, B, 17, 0xa679438e); OP (B, C, D, A, 22, 0x49b40821); /* For the second to fourth round we have the possibly swapped words in CORRECT_WORDS. Redefine the macro to take an additional first argument specifying the function to use. */ #undef OP #define OP(f, a, b, c, d, k, s, T) \ do \ { \ a += f (b, c, d) + correct_words[k] + T; \ CYCLIC (a, s); \ a += b; \ } \ while (0) /* Round 2. */ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); OP (FG, D, A, B, C, 6, 9, 0xc040b340); OP (FG, C, D, A, B, 11, 14, 0x265e5a51); OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); OP (FG, A, B, C, D, 5, 5, 0xd62f105d); OP (FG, D, A, B, C, 10, 9, 0x02441453); OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); OP (FG, D, A, B, C, 14, 9, 0xc33707d6); OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); OP (FG, B, C, D, A, 8, 20, 0x455a14ed); OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); OP (FG, C, D, A, B, 7, 14, 0x676f02d9); OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); /* Round 3. */ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); OP (FH, D, A, B, C, 8, 11, 0x8771f681); OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); OP (FH, B, C, D, A, 14, 23, 0xfde5380c); OP (FH, A, B, C, D, 1, 4, 0xa4beea44); OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); OP (FH, B, C, D, A, 6, 23, 0x04881d05); OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); /* Round 4. */ OP (FI, A, B, C, D, 0, 6, 0xf4292244); OP (FI, D, A, B, C, 7, 10, 0x432aff97); OP (FI, C, D, A, B, 14, 15, 0xab9423a7); OP (FI, B, C, D, A, 5, 21, 0xfc93a039); OP (FI, A, B, C, D, 12, 6, 0x655b59c3); OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); OP (FI, C, D, A, B, 10, 15, 0xffeff47d); OP (FI, B, C, D, A, 1, 21, 0x85845dd1); OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); OP (FI, C, D, A, B, 6, 15, 0xa3014314); OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); OP (FI, A, B, C, D, 4, 6, 0xf7537e82); OP (FI, D, A, B, C, 11, 10, 0xbd3af235); OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); OP (FI, B, C, D, A, 9, 21, 0xeb86d391); /* Add the starting values of the context. */ A += A_save; B += B_save; C += C_save; D += D_save; } /* Put checksum in context given as argument. */ ctx->A = A; ctx->B = B; ctx->C = C; ctx->D = D; } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ��������������������������������gnulib-20210822~d383792/lib/md5.h�������������������������������������������������������������������0000664�0000000�0000000�00000011243�14110572173�0015704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration of functions and data types used for MD5 sum computing library functions. Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2021 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 _MD5_H #define _MD5_H 1 #include <stdio.h> #include <stdint.h> # if HAVE_OPENSSL_MD5 # include <openssl/md5.h> # endif #define MD5_DIGEST_SIZE 16 #define MD5_BLOCK_SIZE 64 #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) # define __THROW throw () # else # define __THROW # endif #endif #ifndef _LIBC # define __md5_buffer md5_buffer # define __md5_finish_ctx md5_finish_ctx # define __md5_init_ctx md5_init_ctx # define __md5_process_block md5_process_block # define __md5_process_bytes md5_process_bytes # define __md5_read_ctx md5_read_ctx # define __md5_stream md5_stream #endif # ifdef __cplusplus extern "C" { # endif # if HAVE_OPENSSL_MD5 # define GL_OPENSSL_NAME 5 # include "gl_openssl.h" # else /* Structure to save state of computation between the single steps. */ struct md5_ctx { uint32_t A; uint32_t B; uint32_t C; uint32_t D; uint32_t total[2]; uint32_t buflen; /* ≥ 0, ≤ 128 */ uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ }; /* * The following three functions are build up the low level used in * the functions 'md5_stream' and 'md5_buffer'. */ /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ extern void __md5_init_ctx (struct md5_ctx *ctx) __THROW; /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void __md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) __THROW; /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void __md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx) __THROW; /* Process the remaining bytes in the buffer and put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *__md5_finish_ctx (struct md5_ctx *ctx, void *restrict resbuf) __THROW; /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *__md5_read_ctx (const struct md5_ctx *ctx, void *restrict resbuf) __THROW; /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *__md5_buffer (const char *buffer, size_t len, void *restrict resblock) __THROW; # endif /* Compute MD5 message digest for bytes read from STREAM. STREAM is an open file stream. Regular files are handled more efficiently. The contents of STREAM from its current position to its end will be read. The case that the last operation on STREAM was an 'ungetc' is not supported. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int __md5_stream (FILE *stream, void *resblock) __THROW; # ifdef __cplusplus } # endif #endif /* md5.h */ /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memalign.c��������������������������������������������������������������0000664�0000000�0000000�00000002252�14110572173�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Allocate memory with indefinite extent and specified alignment. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <malloc.h> #include <stdlib.h> void * memalign (size_t alignment, size_t size) #undef memalign { if (alignment < 4) /* The malloc() result has an alignment of at least 4 on all platforms. On platforms where memalign() exists, malloc() sets errno upon failure. */ return malloc (size); return memalign (alignment, size); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000002646�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive buffer comparator. Copyright (C) 1996-1997, 2000, 2003, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "memcasecmp.h" #include <ctype.h> #include <limits.h> /* Like memcmp, but ignore differences in case. Convert to upper case (not lower) before comparing so that join -i works with sort -f. */ int memcasecmp (const void *vs1, const void *vs2, size_t n) { size_t i; char const *s1 = vs1; char const *s2 = vs2; for (i = 0; i < n; i++) { unsigned char u1 = s1[i]; unsigned char u2 = s2[i]; int U1 = toupper (u1); int U2 = toupper (u2); int diff = (UCHAR_MAX <= INT_MAX ? U1 - U2 : _GL_CMP (U1, U2)); if (diff) return diff; } return 0; } ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcasecmp.h������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive buffer comparator. Copyright (C) 1996, 1998, 2003, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <stddef.h> int memcasecmp (const void *vs1, const void *vs2, size_t n) _GL_ATTRIBUTE_PURE; �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memchr.c����������������������������������������������������������������0000664�0000000�0000000�00000013455�14110572173�0016474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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 _LIBC # include <config.h> #endif #include <string.h> #include <stddef.h> #if defined _LIBC # include <memcopy.h> #else # define reg_char char #endif #include <limits.h> #if HAVE_BP_SYM_H || defined _LIBC # include <bp-sym.h> #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memchr.valgrind���������������������������������������������������������0000664�0000000�0000000�00000002163�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr(). # Copyright (C) 2009-2021 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/>. # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memchr2.c���������������������������������������������������������������0000664�0000000�0000000�00000014571�14110572173�0016556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented in glibc by Roland McGrath (roland@ai.mit.edu). Extension to memchr2 implemented by Eric Blake (ebb9@byu.net). 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/>. */ #include <config.h> #include "memchr2.h" #include <limits.h> #include <stdint.h> #include <string.h> /* Return the first address of either C1 or C2 (treated as unsigned char) that occurs within N bytes of the memory region S. If neither byte appears, return NULL. */ void * memchr2 (void const *s, int c1_in, int c2_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; void const *void_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c1; longword repeated_c2; unsigned char c1; unsigned char c2; c1 = (unsigned char) c1_in; c2 = (unsigned char) c2_in; if (c1 == c2) return memchr (s, c1, n); /* Handle the first few bytes by reading one byte at a time. Do this until VOID_PTR is aligned on a longword boundary. */ for (void_ptr = s; n > 0 && (uintptr_t) void_ptr % sizeof (longword) != 0; --n) { char_ptr = void_ptr; if (*char_ptr == c1 || *char_ptr == c2) return (void *) void_ptr; void_ptr = char_ptr + 1; } longword_ptr = void_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c1 has c1 in every byte. repeated_c2 has c2 in every byte. */ repeated_one = 0x01010101; repeated_c1 = c1 | (c1 << 8); repeated_c2 = c2 | (c2 << 8); repeated_c1 |= repeated_c1 << 16; repeated_c2 |= repeated_c2 << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c1 |= repeated_c1 << 31 << 1; repeated_c2 |= repeated_c2 << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c1 |= repeated_c1 << i; repeated_c2 |= repeated_c2 << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c1 or c2. We first use an xor with repeated_c1 and repeated_c2, respectively. This reduces the task to testing whether *any of the four* bytes in longword1 or longword2 is zero. Let's consider longword1. We compute tmp1 = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp1 is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. Similarly, we compute tmp2 = ((longword2 - repeated_one) & ~longword2) & (repeated_one << 7). The test whether any byte in longword1 or longword2 is zero is equivalent to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine this into a single test, whether (tmp1 | tmp2) is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c1; longword longword2 = *longword_ptr ^ repeated_c2; if (((((longword1 - repeated_one) & ~longword1) | ((longword2 - repeated_one) & ~longword2)) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c1 or == c2. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the (tmp1 | tmp2) result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c1 || *char_ptr == c2) return (void *) char_ptr; } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memchr2.h���������������������������������������������������������������0000664�0000000�0000000�00000002135�14110572173�0016554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Scan memory for the first of two bytes. Copyright (C) 2008-2021 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/>. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Return the first address of either C1 or C2 (treated as unsigned char) that occurs within N bytes of the memory region S. If neither byte appears, return NULL. */ extern void *memchr2 (void const *s, int c1, int c2, size_t n) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memchr2.valgrind��������������������������������������������������������0000664�0000000�0000000�00000002144�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr2(). # Copyright (C) 2009-2021 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/>. # Like memchr, it is safe to overestimate the length when the terminator # is guaranteed to be found. In this case, we may end up reading a word # that is partially uninitialized, but this use is OK for a speedup. { memchr2-value4 Memcheck:Value4 fun:memchr2 } { memchr2-value8 Memcheck:Value8 fun:memchr2 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcmp.c����������������������������������������������������������������0000664�0000000�0000000�00000021430�14110572173�0016467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1995, 1997-1998, 2003, 2006, 2009-2021 Free Software Foundation, Inc. Contributed by Torbjorn Granlund (tege@sics.se). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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 _LIBC # include <config.h> #endif #include <string.h> #include <stdint.h> #ifdef _LIBC # undef memcmp # include <memcopy.h> # include <endian.h> # if __BYTE_ORDER == __BIG_ENDIAN # define WORDS_BIGENDIAN # endif #else /* Not in the GNU C library. */ # include <sys/types.h> /* Type to use for aligned memory operations. This should normally be the biggest type supported by a single load and store. Must be an unsigned type. */ # define op_t unsigned long int # define OPSIZ (sizeof(op_t)) /* Threshold value for when to enter the unrolled loops. */ # define OP_T_THRES 16 /* Type to use for unaligned operations. */ typedef unsigned char byte; # ifndef WORDS_BIGENDIAN # define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2))) # else # define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2))) # endif #endif /* In the GNU C library. */ #ifdef WORDS_BIGENDIAN # define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1) #else # define CMP_LT_OR_GT(a, b) memcmp_bytes (a, b) #endif /* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */ /* The strategy of this memcmp is: 1. Compare bytes until one of the block pointers is aligned. 2. Compare using memcmp_common_alignment or memcmp_not_common_alignment, regarding the alignment of the other block after the initial byte operations. The maximum number of full words (of type op_t) are compared in this way. 3. Compare the few remaining bytes. */ #ifndef WORDS_BIGENDIAN /* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine. A and B are known to be different. This is needed only on little-endian machines. */ # ifdef __GNUC__ __inline # endif static int memcmp_bytes (op_t a, op_t b) { const byte *srcp1 = (const byte *) &a; const byte *srcp2 = (const byte *) &b; op_t a0, b0; do { a0 = srcp1[0]; b0 = srcp2[0]; srcp1 += 1; srcp2 += 1; } while (a0 == b0); return a0 - b0; } #endif /* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN 'op_t' objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for memory operations on 'op_t's. */ #ifdef __GNUC__ __inline #endif static int memcmp_common_alignment (uintptr_t srcp1, uintptr_t srcp2, size_t len) { op_t a0, a1; op_t b0, b1; switch (len % 4) { default: /* Avoid warning about uninitialized local variables. */ case 2: a0 = ((op_t *) srcp1)[0]; b0 = ((op_t *) srcp2)[0]; srcp1 -= 2 * OPSIZ; srcp2 -= 2 * OPSIZ; len += 2; goto do1; case 3: a1 = ((op_t *) srcp1)[0]; b1 = ((op_t *) srcp2)[0]; srcp1 -= OPSIZ; srcp2 -= OPSIZ; len += 1; goto do2; case 0: if (OP_T_THRES <= 3 * OPSIZ && len == 0) return 0; a0 = ((op_t *) srcp1)[0]; b0 = ((op_t *) srcp2)[0]; goto do3; case 1: a1 = ((op_t *) srcp1)[0]; b1 = ((op_t *) srcp2)[0]; srcp1 += OPSIZ; srcp2 += OPSIZ; len -= 1; if (OP_T_THRES <= 3 * OPSIZ && len == 0) goto do0; /* Fall through. */ } do { a0 = ((op_t *) srcp1)[0]; b0 = ((op_t *) srcp2)[0]; if (a1 != b1) return CMP_LT_OR_GT (a1, b1); do3: a1 = ((op_t *) srcp1)[1]; b1 = ((op_t *) srcp2)[1]; if (a0 != b0) return CMP_LT_OR_GT (a0, b0); do2: a0 = ((op_t *) srcp1)[2]; b0 = ((op_t *) srcp2)[2]; if (a1 != b1) return CMP_LT_OR_GT (a1, b1); do1: a1 = ((op_t *) srcp1)[3]; b1 = ((op_t *) srcp2)[3]; if (a0 != b0) return CMP_LT_OR_GT (a0, b0); srcp1 += 4 * OPSIZ; srcp2 += 4 * OPSIZ; len -= 4; } while (len != 0); /* This is the right position for do0. Please don't move it into the loop. */ do0: if (a1 != b1) return CMP_LT_OR_GT (a1, b1); return 0; } /* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN 'op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory operations on 'op_t', but SRCP1 *should be unaligned*. */ #ifdef __GNUC__ __inline #endif static int memcmp_not_common_alignment (uintptr_t srcp1, uintptr_t srcp2, size_t len) { op_t a0, a1, a2, a3; op_t b0, b1, b2, b3; op_t x; int shl, shr; /* Calculate how to shift a word read at the memory operation aligned srcp1 to make it aligned for comparison. */ shl = 8 * (srcp1 % OPSIZ); shr = 8 * OPSIZ - shl; /* Make SRCP1 aligned by rounding it down to the beginning of the 'op_t' it points in the middle of. */ srcp1 &= -OPSIZ; switch (len % 4) { default: /* Avoid warning about uninitialized local variables. */ case 2: a1 = ((op_t *) srcp1)[0]; a2 = ((op_t *) srcp1)[1]; b2 = ((op_t *) srcp2)[0]; srcp1 -= 1 * OPSIZ; srcp2 -= 2 * OPSIZ; len += 2; goto do1; case 3: a0 = ((op_t *) srcp1)[0]; a1 = ((op_t *) srcp1)[1]; b1 = ((op_t *) srcp2)[0]; srcp2 -= 1 * OPSIZ; len += 1; goto do2; case 0: if (OP_T_THRES <= 3 * OPSIZ && len == 0) return 0; a3 = ((op_t *) srcp1)[0]; a0 = ((op_t *) srcp1)[1]; b0 = ((op_t *) srcp2)[0]; srcp1 += 1 * OPSIZ; goto do3; case 1: a2 = ((op_t *) srcp1)[0]; a3 = ((op_t *) srcp1)[1]; b3 = ((op_t *) srcp2)[0]; srcp1 += 2 * OPSIZ; srcp2 += 1 * OPSIZ; len -= 1; if (OP_T_THRES <= 3 * OPSIZ && len == 0) goto do0; /* Fall through. */ } do { a0 = ((op_t *) srcp1)[0]; b0 = ((op_t *) srcp2)[0]; x = MERGE (a2, shl, a3, shr); if (x != b3) return CMP_LT_OR_GT (x, b3); do3: a1 = ((op_t *) srcp1)[1]; b1 = ((op_t *) srcp2)[1]; x = MERGE (a3, shl, a0, shr); if (x != b0) return CMP_LT_OR_GT (x, b0); do2: a2 = ((op_t *) srcp1)[2]; b2 = ((op_t *) srcp2)[2]; x = MERGE (a0, shl, a1, shr); if (x != b1) return CMP_LT_OR_GT (x, b1); do1: a3 = ((op_t *) srcp1)[3]; b3 = ((op_t *) srcp2)[3]; x = MERGE (a1, shl, a2, shr); if (x != b2) return CMP_LT_OR_GT (x, b2); srcp1 += 4 * OPSIZ; srcp2 += 4 * OPSIZ; len -= 4; } while (len != 0); /* This is the right position for do0. Please don't move it into the loop. */ do0: x = MERGE (a2, shl, a3, shr); if (x != b3) return CMP_LT_OR_GT (x, b3); return 0; } int rpl_memcmp (const void *s1, const void *s2, size_t len) { op_t a0; op_t b0; uintptr_t srcp1 = (uintptr_t) s1; uintptr_t srcp2 = (uintptr_t) s2; op_t res; if (len >= OP_T_THRES) { /* There are at least some bytes to compare. No need to test for LEN == 0 in this alignment loop. */ while (srcp2 % OPSIZ != 0) { a0 = ((byte *) srcp1)[0]; b0 = ((byte *) srcp2)[0]; srcp1 += 1; srcp2 += 1; res = a0 - b0; if (res != 0) return res; len -= 1; } /* SRCP2 is now aligned for memory operations on 'op_t'. SRCP1 alignment determines if we can do a simple, aligned compare or need to shuffle bits. */ if (srcp1 % OPSIZ == 0) res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ); else res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ); if (res != 0) return res; /* Number of bytes remaining in the interval [0..OPSIZ-1]. */ srcp1 += len & -OPSIZ; srcp2 += len & -OPSIZ; len %= OPSIZ; } /* There are just a few bytes to compare. Use byte memory operations. */ while (len != 0) { a0 = ((byte *) srcp1)[0]; b0 = ((byte *) srcp2)[0]; srcp1 += 1; srcp2 += 1; res = a0 - b0; if (res != 0) return res; len -= 1; } return 0; } #ifdef weak_alias # undef bcmp weak_alias (memcmp, bcmp) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcmp2.c���������������������������������������������������������������0000664�0000000�0000000�00000002031�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "memcmp2.h" #include <string.h> int memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2) { int cmp = memcmp (s1, s2, n1 <= n2 ? n1 : n2); if (cmp == 0) cmp = _GL_CMP (n1, n2); return cmp; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcmp2.h���������������������������������������������������������������0000664�0000000�0000000�00000002442�14110572173�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths. Copyright (C) 2009-2021 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/>. */ #ifndef MEMCMP2_H #define MEMCMP2_H #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Compare the memory regions S1 = [s1..s1+N1-1], S2 = [s2..s2+n2-1], lexicographically. This function's result is locale independent, unlike memcoll()'s. Return a negative number if S1 < S2, a positive number if S1 > S2, or 0 if S1 and S2 have the same contents. */ extern int memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* MEMCMP2_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcoll.c���������������������������������������������������������������0000664�0000000�0000000�00000006421�14110572173�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 1999, 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* Contributed by Paul Eggert <eggert@twinsun.com>. */ #include <config.h> #include "memcoll.h" #include <errno.h> #include <stdlib.h> #include <string.h> /* Compare S1 (with size S1SIZE) and S2 (with length S2SIZE) according to the LC_COLLATE locale. S1 and S2 are both blocks of memory with nonzero sizes, and the last byte in each block must be a null byte. Set errno to an error number if there is an error, and to zero otherwise. */ static int strcoll_loop (char const *s1, size_t s1size, char const *s2, size_t s2size) { int diff; while (! (errno = 0, (diff = strcoll (s1, s2)) || errno)) { /* strcoll found no difference, but perhaps it was fooled by NUL characters in the data. Work around this problem by advancing past the NUL chars. */ size_t size1 = strlen (s1) + 1; size_t size2 = strlen (s2) + 1; s1 += size1; s2 += size2; s1size -= size1; s2size -= size2; if (s1size == 0) return - (s2size != 0); if (s2size == 0) return 1; } return diff; } /* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according to the LC_COLLATE locale. S1 and S2 do not overlap, and are not adjacent. Perhaps temporarily modify the bytes after S1 and S2, but restore their original contents before returning. Set errno to an error number if there is an error, and to zero otherwise. */ int memcoll (char *s1, size_t s1len, char *s2, size_t s2len) { int diff; /* strcoll is slow on many platforms, so check for the common case where the arguments are bytewise equal. Otherwise, walk through the buffers using strcoll on each substring. */ if (s1len == s2len && memcmp (s1, s2, s1len) == 0) { errno = 0; diff = 0; } else { char n1 = s1[s1len]; char n2 = s2[s2len]; s1[s1len] = '\0'; s2[s2len] = '\0'; diff = strcoll_loop (s1, s1len + 1, s2, s2len + 1); s1[s1len] = n1; s2[s2len] = n2; } return diff; } /* Compare S1 (a memory block of size S1SIZE, with a NUL as last byte) and S2 (a memory block of size S2SIZE, with a NUL as last byte) according to the LC_COLLATE locale. S1SIZE and S2SIZE must be > 0. Set errno to an error number if there is an error, and to zero otherwise. */ int memcoll0 (char const *s1, size_t s1size, char const *s2, size_t s2size) { if (s1size == s2size && memcmp (s1, s2, s1size) == 0) { errno = 0; return 0; } else return strcoll_loop (s1, s1size, s2, s2size); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcoll.h���������������������������������������������������������������0000664�0000000�0000000�00000002001�14110572173�0016637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 1999, 2003, 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* Contributed by Paul Eggert <eggert@twinsun.com>. */ #ifndef MEMCOLL_H_ # define MEMCOLL_H_ 1 # include <stddef.h> int memcoll (char *restrict, size_t, char *restrict, size_t); int memcoll0 (char const *, size_t, char const *, size_t); #endif /* MEMCOLL_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memcpy.c����������������������������������������������������������������0000664�0000000�0000000�00000002217�14110572173�0016505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995, 1997, 2000, 2003, 2006, 2009-2021 Free Software * Foundation, Inc. This 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 Jim Meyering <meyering@na-net.ornl.gov>. */ #include <config.h> #include <stddef.h> /* Copy LEN bytes starting at SRCADDR to DESTADDR. Result undefined if the source overlaps with the destination. Return DESTADDR. */ void * memcpy (void *destaddr, void const *srcaddr, size_t len) { char *dest = destaddr; char const *src = srcaddr; while (len-- > 0) *dest++ = *src++; return destaddr; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memmem.c����������������������������������������������������������������0000664�0000000�0000000�00000005302�14110572173�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2021 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/>. */ /* This particular implementation was written by Eric Blake, 2008. */ #ifndef _LIBC # include <config.h> #endif /* Specification of memmem. */ #include <string.h> #define RETURN_TYPE void * #define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) #include "str-two-way.h" /* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in HAYSTACK. */ void * memmem (const void *haystack_start, size_t haystack_len, const void *needle_start, size_t needle_len) { /* Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ const unsigned char *haystack = (const unsigned char *) haystack_start; const unsigned char *needle = (const unsigned char *) needle_start; if (needle_len == 0) /* The first occurrence of the empty string is deemed to occur at the beginning of the string. */ return (void *) haystack; /* Sanity check, otherwise the loop might search through the whole memory. */ if (__builtin_expect (haystack_len < needle_len, 0)) return NULL; /* Use optimizations in memchr when possible, to reduce the search size of haystack using a linear algorithm with a smaller coefficient. However, avoid memchr for long needles, since we can often achieve sublinear performance. */ if (needle_len < LONG_NEEDLE_THRESHOLD) { haystack = memchr (haystack, *needle, haystack_len); if (!haystack || __builtin_expect (needle_len == 1, 0)) return (void *) haystack; haystack_len -= haystack - (const unsigned char *) haystack_start; if (haystack_len < needle_len) return NULL; return two_way_short_needle (haystack, haystack_len, needle, needle_len); } else return two_way_long_needle (haystack, haystack_len, needle, needle_len); } #undef LONG_NEEDLE_THRESHOLD ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memmove.c���������������������������������������������������������������0000664�0000000�0000000�00000001307�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memmove.c -- copy memory. This file is in the public domain. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include <stddef.h> /* Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. */ void * memmove (void *dest0, void const *source0, size_t length) { char *dest = dest0; char const *source = source0; if (source < dest) /* Moving from low mem to hi mem; start at end. */ for (source += length, dest += length; length; --length) *--dest = *--source; else if (source != dest) { /* Moving from hi mem to low mem; start at beginning. */ for (; length; --length) *dest++ = *source++; } return dest0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mempcpy.c���������������������������������������������������������������0000664�0000000�0000000�00000002213�14110572173�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy memory area and return pointer after last written byte. Copyright (C) 2003, 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is only needed if HAVE_MEMPCPY is not defined. */ #if !HAVE_MEMPCPY /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ void * mempcpy (void *dest, const void *src, size_t n) { return (char *) memcpy (dest, src, n) + n; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memrchr.c���������������������������������������������������������������0000664�0000000�0000000�00000013115�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memrchr -- find the last occurrence of a byte in a memory block Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2021 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). 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/>. */ #if defined _LIBC # include <memcopy.h> #else # include <config.h> # define reg_char char #endif #include <string.h> #include <limits.h> #undef __memrchr #ifdef _LIBC # undef memrchr #endif #ifndef weak_alias # define __memrchr memrchr #endif /* Search no more than N bytes of S for C. */ void * __memrchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the last few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s + n; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n) if (*--char_ptr == c) return (void *) char_ptr; longword_ptr = (const void *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *--longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) { longword_ptr++; break; } n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ while (n-- > 0) { if (*--char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memrchr, memrchr) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memset.c����������������������������������������������������������������0000664�0000000�0000000�00000001676�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memset.c -- set an area of memory to a given value Copyright (C) 1991, 2003, 2009-2021 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/>. */ #include <config.h> #include <stddef.h> void * memset (void *str, int c, size_t len) { register char *st = str; while (len-- > 0) *st++ = c; return str; } ������������������������������������������������������������������gnulib-20210822~d383792/lib/memxor.c����������������������������������������������������������������0000664�0000000�0000000�00000002153�14110572173�0016521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary exclusive OR operation of two memory blocks. -*- coding: utf-8 -*- Copyright (C) 2005-2006, 2009-2021 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 Simon Josefsson. The interface was inspired by memxor in Niels Möller's Nettle. */ #include <config.h> #include "memxor.h" void * memxor (void *restrict dest, const void *restrict src, size_t n) { char const *s = src; char *d = dest; for (; n > 0; n--) *d++ ^= *s++; return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/memxor.h����������������������������������������������������������������0000664�0000000�0000000�00000002364�14110572173�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memxor.h -- perform binary exclusive OR operation on memory blocks. Copyright (C) 2005, 2009-2021 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 Simon Josefsson. The interface was inspired by memxor in Niels Möller's Nettle. */ #ifndef MEMXOR_H # define MEMXOR_H #include <stddef.h> /* Compute binary exclusive OR of memory areas DEST and SRC, putting the result in DEST, of length N bytes. Returns a pointer to DEST. */ void *memxor (void *restrict dest, const void *restrict src, size_t n); #endif /* MEMXOR_H */ /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mgetgroups.c������������������������������������������������������������0000664�0000000�0000000�00000014233�14110572173�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mgetgroups.c -- return a list of the groups a user or current process is in Copyright (C) 2007-2021 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/>. */ /* Extracted from coreutils' src/id.c. */ #include <config.h> #include "mgetgroups.h" #include <stdlib.h> #include <unistd.h> #include <stdint.h> #include <string.h> #include <errno.h> #if HAVE_GETGROUPLIST # include <grp.h> #endif #include "getugroups.h" #include "xalloc-oversized.h" /* Work around an incompatibility of OS X 10.11: getgrouplist accepts int *, not gid_t *, and int and gid_t differ in sign. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) || defined __clang__ # pragma GCC diagnostic ignored "-Wpointer-sign" #endif static gid_t * realloc_groupbuf (gid_t *g, size_t num) { if (xalloc_oversized (num, sizeof *g)) { errno = ENOMEM; return NULL; } return realloc (g, num * sizeof *g); } /* Like getugroups, but store the result in malloc'd storage. Set *GROUPS to the malloc'd list of all group IDs of which USERNAME is a member. If GID is not -1, store it first. GID should be the group ID (pw_gid) obtained from getpwuid, in case USERNAME is not listed in the groups database (e.g., /etc/groups). If USERNAME is NULL, store the supplementary groups of the current process, and GID should be -1 or the effective group ID (getegid). Upon failure, don't modify *GROUPS, set errno, and return -1. Otherwise, return the number of groups. The resulting list may contain duplicates, but adjacent members will be distinct. */ int mgetgroups (char const *username, gid_t gid, gid_t **groups) { int max_n_groups; int ng; gid_t *g; #if HAVE_GETGROUPLIST /* We prefer to use getgrouplist if available, because it has better performance characteristics. In glibc 2.3.2, getgrouplist is buggy. If you pass a zero as the length of the output buffer, getgrouplist will still write to the buffer. Contrary to what some versions of the getgrouplist manpage say, this doesn't happen with nonzero buffer sizes. Therefore our usage here just avoids a zero sized buffer. */ if (username) { enum { N_GROUPS_INIT = 10 }; max_n_groups = N_GROUPS_INIT; g = realloc_groupbuf (NULL, max_n_groups); if (g == NULL) return -1; while (1) { gid_t *h; int last_n_groups = max_n_groups; /* getgrouplist updates max_n_groups to num required. */ ng = getgrouplist (username, gid, g, &max_n_groups); /* Some systems (like Darwin) have a bug where they never increase max_n_groups. */ if (ng < 0 && last_n_groups == max_n_groups) max_n_groups *= 2; if ((h = realloc_groupbuf (g, max_n_groups)) == NULL) { free (g); return -1; } g = h; if (0 <= ng) { *groups = g; /* On success some systems just return 0 from getgrouplist, so return max_n_groups rather than ng. */ return max_n_groups; } } } /* else no username, so fall through and use getgroups. */ #endif max_n_groups = (username ? getugroups (0, NULL, username, gid) : getgroups (0, NULL)); /* If we failed to count groups because there is no supplemental group support, then return an array containing just GID. Otherwise, we fail for the same reason. */ if (max_n_groups < 0) { if (errno == ENOSYS && (g = realloc_groupbuf (NULL, 1))) { *groups = g; *g = gid; return gid != (gid_t) -1; } return -1; } if (max_n_groups == 0 || (!username && gid != (gid_t) -1)) max_n_groups++; g = realloc_groupbuf (NULL, max_n_groups); if (g == NULL) return -1; ng = (username ? getugroups (max_n_groups, g, username, gid) : getgroups (max_n_groups - (gid != (gid_t) -1), g + (gid != (gid_t) -1))); if (ng < 0) { /* Failure is unexpected, but handle it anyway. */ free (g); return -1; } if (!username && gid != (gid_t) -1) { *g = gid; ng++; } *groups = g; /* Reduce the number of duplicates. On some systems, getgroups returns the effective gid twice: once as the first element, and once in its position within the supplementary groups. On other systems, getgroups does not return the effective gid at all, which is why we provide a GID argument. Meanwhile, the GID argument, if provided, is typically any member of the supplementary groups, and not necessarily the effective gid. So, the most likely duplicates are the first element with an arbitrary other element, or pair-wise duplication between the first and second elements returned by getgroups. It is possible that this O(n) pass will not remove all duplicates, but it is not worth the effort to slow down to an O(n log n) algorithm that sorts the array in place, nor the extra memory needed for duplicate removal via an O(n) hash-table. Hence, this function is only documented as guaranteeing no pair-wise duplicates, rather than returning the minimal set. */ if (1 < ng) { gid_t first = *g; gid_t *next; gid_t *groups_end = g + ng; for (next = g + 1; next < groups_end; next++) { if (*next == first || *next == *g) ng--; else *++g = *next; } } return ng; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mgetgroups.h������������������������������������������������������������0000664�0000000�0000000�00000001727�14110572173�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get a list of all group IDs associated with a specified user ID. Copyright (C) 2007, 2009-2021 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/>. */ #include <sys/types.h> int mgetgroups (const char *username, gid_t gid, gid_t **groups); #if GNULIB_XGETGROUPS int xgetgroups (const char *username, gid_t gid, gid_t **groups); #endif �����������������������������������������gnulib-20210822~d383792/lib/mini-gmp-gnulib.c�������������������������������������������������������0000664�0000000�0000000�00000003364�14110572173�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tailor mini-gmp.c for Gnulib-using applications. Copyright 2018-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stddef.h> #include <stdio.h> #include "mini-gmp.h" /* Pacify GCC -Wsuggest-attribute=const, pure, malloc. */ #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wsuggest-attribute=const" # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" #endif #if 8 <= __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=malloc" #endif /* Pacify GCC -Wunused-variable for variables used only in 'assert' calls. */ #if defined NDEBUG && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wunused-variable" #endif #include "mini-gmp.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mini-gmp.c��������������������������������������������������������������0000664�0000000�0000000�00000261137�14110572173�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mini-gmp, a minimalistic implementation of a GNU GMP subset. Contributed to the GNU project by Niels Möller Copyright 1991-1997, 1999-2021 Free Software Foundation, Inc. This file is part of the GNU MP Library. The GNU MP Library is free software; you can redistribute it and/or modify it under the terms of either: * 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. or * the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. or both in parallel, as here. The GNU MP 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 General Public License for more details. You should have received copies of the GNU General Public License and the GNU Lesser General Public License along with the GNU MP Library. If not, see https://www.gnu.org/licenses/. */ /* NOTE: All functions in this file which are not declared in mini-gmp.h are internal, and are not intended to be compatible with GMP or with future versions of mini-gmp. */ /* Much of the material copied from GMP files, including: gmp-impl.h, longlong.h, mpn/generic/add_n.c, mpn/generic/addmul_1.c, mpn/generic/lshift.c, mpn/generic/mul_1.c, mpn/generic/mul_basecase.c, mpn/generic/rshift.c, mpn/generic/sbpi1_div_qr.c, mpn/generic/sub_n.c, mpn/generic/submul_1.c. */ #include <assert.h> #include <ctype.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "mini-gmp.h" #if !defined(MINI_GMP_DONT_USE_FLOAT_H) #include <float.h> #endif /* Macros */ #define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT) #define GMP_LIMB_MAX ((mp_limb_t) ~ (mp_limb_t) 0) #define GMP_LIMB_HIGHBIT ((mp_limb_t) 1 << (GMP_LIMB_BITS - 1)) #define GMP_HLIMB_BIT ((mp_limb_t) 1 << (GMP_LIMB_BITS / 2)) #define GMP_LLIMB_MASK (GMP_HLIMB_BIT - 1) #define GMP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT) #define GMP_ULONG_HIGHBIT ((unsigned long) 1 << (GMP_ULONG_BITS - 1)) #define GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) #define GMP_NEG_CAST(T,x) (-((T)((x) + 1) - 1)) #define GMP_MIN(a, b) ((a) < (b) ? (a) : (b)) #define GMP_MAX(a, b) ((a) > (b) ? (a) : (b)) #define GMP_CMP(a,b) (((a) > (b)) - ((a) < (b))) #if defined(DBL_MANT_DIG) && FLT_RADIX == 2 #define GMP_DBL_MANT_BITS DBL_MANT_DIG #else #define GMP_DBL_MANT_BITS (53) #endif /* Return non-zero if xp,xsize and yp,ysize overlap. If xp+xsize<=yp there's no overlap, or if yp+ysize<=xp there's no overlap. If both these are false, there's an overlap. */ #define GMP_MPN_OVERLAP_P(xp, xsize, yp, ysize) \ ((xp) + (xsize) > (yp) && (yp) + (ysize) > (xp)) #define gmp_assert_nocarry(x) do { \ mp_limb_t __cy = (x); \ assert (__cy == 0); \ } while (0) #define gmp_clz(count, x) do { \ mp_limb_t __clz_x = (x); \ unsigned __clz_c = 0; \ int LOCAL_SHIFT_BITS = 8; \ if (GMP_LIMB_BITS > LOCAL_SHIFT_BITS) \ for (; \ (__clz_x & ((mp_limb_t) 0xff << (GMP_LIMB_BITS - 8))) == 0; \ __clz_c += 8) \ { __clz_x <<= LOCAL_SHIFT_BITS; } \ for (; (__clz_x & GMP_LIMB_HIGHBIT) == 0; __clz_c++) \ __clz_x <<= 1; \ (count) = __clz_c; \ } while (0) #define gmp_ctz(count, x) do { \ mp_limb_t __ctz_x = (x); \ unsigned __ctz_c = 0; \ gmp_clz (__ctz_c, __ctz_x & - __ctz_x); \ (count) = GMP_LIMB_BITS - 1 - __ctz_c; \ } while (0) #define gmp_add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ mp_limb_t __x; \ __x = (al) + (bl); \ (sh) = (ah) + (bh) + (__x < (al)); \ (sl) = __x; \ } while (0) #define gmp_sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ mp_limb_t __x; \ __x = (al) - (bl); \ (sh) = (ah) - (bh) - ((al) < (bl)); \ (sl) = __x; \ } while (0) #define gmp_umul_ppmm(w1, w0, u, v) \ do { \ int LOCAL_GMP_LIMB_BITS = GMP_LIMB_BITS; \ if (sizeof(unsigned int) * CHAR_BIT >= 2 * GMP_LIMB_BITS) \ { \ unsigned int __ww = (unsigned int) (u) * (v); \ w0 = (mp_limb_t) __ww; \ w1 = (mp_limb_t) (__ww >> LOCAL_GMP_LIMB_BITS); \ } \ else if (GMP_ULONG_BITS >= 2 * GMP_LIMB_BITS) \ { \ unsigned long int __ww = (unsigned long int) (u) * (v); \ w0 = (mp_limb_t) __ww; \ w1 = (mp_limb_t) (__ww >> LOCAL_GMP_LIMB_BITS); \ } \ else { \ mp_limb_t __x0, __x1, __x2, __x3; \ unsigned __ul, __vl, __uh, __vh; \ mp_limb_t __u = (u), __v = (v); \ \ __ul = __u & GMP_LLIMB_MASK; \ __uh = __u >> (GMP_LIMB_BITS / 2); \ __vl = __v & GMP_LLIMB_MASK; \ __vh = __v >> (GMP_LIMB_BITS / 2); \ \ __x0 = (mp_limb_t) __ul * __vl; \ __x1 = (mp_limb_t) __ul * __vh; \ __x2 = (mp_limb_t) __uh * __vl; \ __x3 = (mp_limb_t) __uh * __vh; \ \ __x1 += __x0 >> (GMP_LIMB_BITS / 2);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ __x3 += GMP_HLIMB_BIT; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + (__x1 >> (GMP_LIMB_BITS / 2)); \ (w0) = (__x1 << (GMP_LIMB_BITS / 2)) + (__x0 & GMP_LLIMB_MASK); \ } \ } while (0) #define gmp_udiv_qrnnd_preinv(q, r, nh, nl, d, di) \ do { \ mp_limb_t _qh, _ql, _r, _mask; \ gmp_umul_ppmm (_qh, _ql, (nh), (di)); \ gmp_add_ssaaaa (_qh, _ql, _qh, _ql, (nh) + 1, (nl)); \ _r = (nl) - _qh * (d); \ _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ _qh += _mask; \ _r += _mask & (d); \ if (_r >= (d)) \ { \ _r -= (d); \ _qh++; \ } \ \ (r) = _r; \ (q) = _qh; \ } while (0) #define gmp_udiv_qr_3by2(q, r1, r0, n2, n1, n0, d1, d0, dinv) \ do { \ mp_limb_t _q0, _t1, _t0, _mask; \ gmp_umul_ppmm ((q), _q0, (n2), (dinv)); \ gmp_add_ssaaaa ((q), _q0, (q), _q0, (n2), (n1)); \ \ /* Compute the two most significant limbs of n - q'd */ \ (r1) = (n1) - (d1) * (q); \ gmp_sub_ddmmss ((r1), (r0), (r1), (n0), (d1), (d0)); \ gmp_umul_ppmm (_t1, _t0, (d0), (q)); \ gmp_sub_ddmmss ((r1), (r0), (r1), (r0), _t1, _t0); \ (q)++; \ \ /* Conditionally adjust q and the remainders */ \ _mask = - (mp_limb_t) ((r1) >= _q0); \ (q) += _mask; \ gmp_add_ssaaaa ((r1), (r0), (r1), (r0), _mask & (d1), _mask & (d0)); \ if ((r1) >= (d1)) \ { \ if ((r1) > (d1) || (r0) >= (d0)) \ { \ (q)++; \ gmp_sub_ddmmss ((r1), (r0), (r1), (r0), (d1), (d0)); \ } \ } \ } while (0) /* Swap macros. */ #define MP_LIMB_T_SWAP(x, y) \ do { \ mp_limb_t __mp_limb_t_swap__tmp = (x); \ (x) = (y); \ (y) = __mp_limb_t_swap__tmp; \ } while (0) #define MP_SIZE_T_SWAP(x, y) \ do { \ mp_size_t __mp_size_t_swap__tmp = (x); \ (x) = (y); \ (y) = __mp_size_t_swap__tmp; \ } while (0) #define MP_BITCNT_T_SWAP(x,y) \ do { \ mp_bitcnt_t __mp_bitcnt_t_swap__tmp = (x); \ (x) = (y); \ (y) = __mp_bitcnt_t_swap__tmp; \ } while (0) #define MP_PTR_SWAP(x, y) \ do { \ mp_ptr __mp_ptr_swap__tmp = (x); \ (x) = (y); \ (y) = __mp_ptr_swap__tmp; \ } while (0) #define MP_SRCPTR_SWAP(x, y) \ do { \ mp_srcptr __mp_srcptr_swap__tmp = (x); \ (x) = (y); \ (y) = __mp_srcptr_swap__tmp; \ } while (0) #define MPN_PTR_SWAP(xp,xs, yp,ys) \ do { \ MP_PTR_SWAP (xp, yp); \ MP_SIZE_T_SWAP (xs, ys); \ } while(0) #define MPN_SRCPTR_SWAP(xp,xs, yp,ys) \ do { \ MP_SRCPTR_SWAP (xp, yp); \ MP_SIZE_T_SWAP (xs, ys); \ } while(0) #define MPZ_PTR_SWAP(x, y) \ do { \ mpz_ptr __mpz_ptr_swap__tmp = (x); \ (x) = (y); \ (y) = __mpz_ptr_swap__tmp; \ } while (0) #define MPZ_SRCPTR_SWAP(x, y) \ do { \ mpz_srcptr __mpz_srcptr_swap__tmp = (x); \ (x) = (y); \ (y) = __mpz_srcptr_swap__tmp; \ } while (0) const int mp_bits_per_limb = GMP_LIMB_BITS; /* Memory allocation and other helper functions. */ static void gmp_die (const char *msg) { fprintf (stderr, "%s\n", msg); abort(); } static void * gmp_default_alloc (size_t size) { void *p; assert (size > 0); p = malloc (size); if (!p) gmp_die("gmp_default_alloc: Virtual memory exhausted."); return p; } static void * gmp_default_realloc (void *old, size_t unused_old_size, size_t new_size) { void * p; p = realloc (old, new_size); if (!p) gmp_die("gmp_default_realloc: Virtual memory exhausted."); return p; } static void gmp_default_free (void *p, size_t unused_size) { free (p); } static void * (*gmp_allocate_func) (size_t) = gmp_default_alloc; static void * (*gmp_reallocate_func) (void *, size_t, size_t) = gmp_default_realloc; static void (*gmp_free_func) (void *, size_t) = gmp_default_free; void mp_get_memory_functions (void *(**alloc_func) (size_t), void *(**realloc_func) (void *, size_t, size_t), void (**free_func) (void *, size_t)) { if (alloc_func) *alloc_func = gmp_allocate_func; if (realloc_func) *realloc_func = gmp_reallocate_func; if (free_func) *free_func = gmp_free_func; } void mp_set_memory_functions (void *(*alloc_func) (size_t), void *(*realloc_func) (void *, size_t, size_t), void (*free_func) (void *, size_t)) { if (!alloc_func) alloc_func = gmp_default_alloc; if (!realloc_func) realloc_func = gmp_default_realloc; if (!free_func) free_func = gmp_default_free; gmp_allocate_func = alloc_func; gmp_reallocate_func = realloc_func; gmp_free_func = free_func; } #define gmp_alloc(size) ((*gmp_allocate_func)((size))) #define gmp_free(p, size) ((*gmp_free_func) ((p), (size))) #define gmp_realloc(ptr, old_size, size) ((*gmp_reallocate_func)(ptr, old_size, size)) static mp_ptr gmp_alloc_limbs (mp_size_t size) { return (mp_ptr) gmp_alloc (size * sizeof (mp_limb_t)); } static mp_ptr gmp_realloc_limbs (mp_ptr old, mp_size_t old_size, mp_size_t size) { assert (size > 0); return (mp_ptr) gmp_realloc (old, old_size * sizeof (mp_limb_t), size * sizeof (mp_limb_t)); } static void gmp_free_limbs (mp_ptr old, mp_size_t size) { gmp_free (old, size * sizeof (mp_limb_t)); } /* MPN interface */ void mpn_copyi (mp_ptr d, mp_srcptr s, mp_size_t n) { mp_size_t i; for (i = 0; i < n; i++) d[i] = s[i]; } void mpn_copyd (mp_ptr d, mp_srcptr s, mp_size_t n) { while (--n >= 0) d[n] = s[n]; } int mpn_cmp (mp_srcptr ap, mp_srcptr bp, mp_size_t n) { while (--n >= 0) { if (ap[n] != bp[n]) return ap[n] > bp[n] ? 1 : -1; } return 0; } static int mpn_cmp4 (mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) { if (an != bn) return an < bn ? -1 : 1; else return mpn_cmp (ap, bp, an); } static mp_size_t mpn_normalized_size (mp_srcptr xp, mp_size_t n) { while (n > 0 && xp[n-1] == 0) --n; return n; } int mpn_zero_p(mp_srcptr rp, mp_size_t n) { return mpn_normalized_size (rp, n) == 0; } void mpn_zero (mp_ptr rp, mp_size_t n) { while (--n >= 0) rp[n] = 0; } mp_limb_t mpn_add_1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t b) { mp_size_t i; assert (n > 0); i = 0; do { mp_limb_t r = ap[i] + b; /* Carry out */ b = (r < b); rp[i] = r; } while (++i < n); return b; } mp_limb_t mpn_add_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) { mp_size_t i; mp_limb_t cy; for (i = 0, cy = 0; i < n; i++) { mp_limb_t a, b, r; a = ap[i]; b = bp[i]; r = a + cy; cy = (r < cy); r += b; cy += (r < b); rp[i] = r; } return cy; } mp_limb_t mpn_add (mp_ptr rp, mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) { mp_limb_t cy; assert (an >= bn); cy = mpn_add_n (rp, ap, bp, bn); if (an > bn) cy = mpn_add_1 (rp + bn, ap + bn, an - bn, cy); return cy; } mp_limb_t mpn_sub_1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t b) { mp_size_t i; assert (n > 0); i = 0; do { mp_limb_t a = ap[i]; /* Carry out */ mp_limb_t cy = a < b; rp[i] = a - b; b = cy; } while (++i < n); return b; } mp_limb_t mpn_sub_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) { mp_size_t i; mp_limb_t cy; for (i = 0, cy = 0; i < n; i++) { mp_limb_t a, b; a = ap[i]; b = bp[i]; b += cy; cy = (b < cy); cy += (a < b); rp[i] = a - b; } return cy; } mp_limb_t mpn_sub (mp_ptr rp, mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) { mp_limb_t cy; assert (an >= bn); cy = mpn_sub_n (rp, ap, bp, bn); if (an > bn) cy = mpn_sub_1 (rp + bn, ap + bn, an - bn, cy); return cy; } mp_limb_t mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) { mp_limb_t ul, cl, hpl, lpl; assert (n >= 1); cl = 0; do { ul = *up++; gmp_umul_ppmm (hpl, lpl, ul, vl); lpl += cl; cl = (lpl < cl) + hpl; *rp++ = lpl; } while (--n != 0); return cl; } mp_limb_t mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) { mp_limb_t ul, cl, hpl, lpl, rl; assert (n >= 1); cl = 0; do { ul = *up++; gmp_umul_ppmm (hpl, lpl, ul, vl); lpl += cl; cl = (lpl < cl) + hpl; rl = *rp; lpl = rl + lpl; cl += lpl < rl; *rp++ = lpl; } while (--n != 0); return cl; } mp_limb_t mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) { mp_limb_t ul, cl, hpl, lpl, rl; assert (n >= 1); cl = 0; do { ul = *up++; gmp_umul_ppmm (hpl, lpl, ul, vl); lpl += cl; cl = (lpl < cl) + hpl; rl = *rp; lpl = rl - lpl; cl += lpl > rl; *rp++ = lpl; } while (--n != 0); return cl; } mp_limb_t mpn_mul (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_srcptr vp, mp_size_t vn) { assert (un >= vn); assert (vn >= 1); assert (!GMP_MPN_OVERLAP_P(rp, un + vn, up, un)); assert (!GMP_MPN_OVERLAP_P(rp, un + vn, vp, vn)); /* We first multiply by the low order limb. This result can be stored, not added, to rp. We also avoid a loop for zeroing this way. */ rp[un] = mpn_mul_1 (rp, up, un, vp[0]); /* Now accumulate the product of up[] and the next higher limb from vp[]. */ while (--vn >= 1) { rp += 1, vp += 1; rp[un] = mpn_addmul_1 (rp, up, un, vp[0]); } return rp[un]; } void mpn_mul_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) { mpn_mul (rp, ap, n, bp, n); } void mpn_sqr (mp_ptr rp, mp_srcptr ap, mp_size_t n) { mpn_mul (rp, ap, n, ap, n); } mp_limb_t mpn_lshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) { mp_limb_t high_limb, low_limb; unsigned int tnc; mp_limb_t retval; assert (n >= 1); assert (cnt >= 1); assert (cnt < GMP_LIMB_BITS); up += n; rp += n; tnc = GMP_LIMB_BITS - cnt; low_limb = *--up; retval = low_limb >> tnc; high_limb = (low_limb << cnt); while (--n != 0) { low_limb = *--up; *--rp = high_limb | (low_limb >> tnc); high_limb = (low_limb << cnt); } *--rp = high_limb; return retval; } mp_limb_t mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) { mp_limb_t high_limb, low_limb; unsigned int tnc; mp_limb_t retval; assert (n >= 1); assert (cnt >= 1); assert (cnt < GMP_LIMB_BITS); tnc = GMP_LIMB_BITS - cnt; high_limb = *up++; retval = (high_limb << tnc); low_limb = high_limb >> cnt; while (--n != 0) { high_limb = *up++; *rp++ = low_limb | (high_limb << tnc); low_limb = high_limb >> cnt; } *rp = low_limb; return retval; } static mp_bitcnt_t mpn_common_scan (mp_limb_t limb, mp_size_t i, mp_srcptr up, mp_size_t un, mp_limb_t ux) { unsigned cnt; assert (ux == 0 || ux == GMP_LIMB_MAX); assert (0 <= i && i <= un ); while (limb == 0) { i++; if (i == un) return (ux == 0 ? ~(mp_bitcnt_t) 0 : un * GMP_LIMB_BITS); limb = ux ^ up[i]; } gmp_ctz (cnt, limb); return (mp_bitcnt_t) i * GMP_LIMB_BITS + cnt; } mp_bitcnt_t mpn_scan1 (mp_srcptr ptr, mp_bitcnt_t bit) { mp_size_t i; i = bit / GMP_LIMB_BITS; return mpn_common_scan ( ptr[i] & (GMP_LIMB_MAX << (bit % GMP_LIMB_BITS)), i, ptr, i, 0); } mp_bitcnt_t mpn_scan0 (mp_srcptr ptr, mp_bitcnt_t bit) { mp_size_t i; i = bit / GMP_LIMB_BITS; return mpn_common_scan (~ptr[i] & (GMP_LIMB_MAX << (bit % GMP_LIMB_BITS)), i, ptr, i, GMP_LIMB_MAX); } void mpn_com (mp_ptr rp, mp_srcptr up, mp_size_t n) { while (--n >= 0) *rp++ = ~ *up++; } mp_limb_t mpn_neg (mp_ptr rp, mp_srcptr up, mp_size_t n) { while (*up == 0) { *rp = 0; if (!--n) return 0; ++up; ++rp; } *rp = - *up; mpn_com (++rp, ++up, --n); return 1; } /* MPN division interface. */ /* The 3/2 inverse is defined as m = floor( (B^3-1) / (B u1 + u0)) - B */ mp_limb_t mpn_invert_3by2 (mp_limb_t u1, mp_limb_t u0) { mp_limb_t r, m; { mp_limb_t p, ql; unsigned ul, uh, qh; /* For notation, let b denote the half-limb base, so that B = b^2. Split u1 = b uh + ul. */ ul = u1 & GMP_LLIMB_MASK; uh = u1 >> (GMP_LIMB_BITS / 2); /* Approximation of the high half of quotient. Differs from the 2/1 inverse of the half limb uh, since we have already subtracted u0. */ qh = (u1 ^ GMP_LIMB_MAX) / uh; /* Adjust to get a half-limb 3/2 inverse, i.e., we want qh' = floor( (b^3 - 1) / u) - b = floor ((b^3 - b u - 1) / u = floor( (b (~u) + b-1) / u), and the remainder r = b (~u) + b-1 - qh (b uh + ul) = b (~u - qh uh) + b-1 - qh ul Subtraction of qh ul may underflow, which implies adjustments. But by normalization, 2 u >= B > qh ul, so we need to adjust by at most 2. */ r = ((~u1 - (mp_limb_t) qh * uh) << (GMP_LIMB_BITS / 2)) | GMP_LLIMB_MASK; p = (mp_limb_t) qh * ul; /* Adjustment steps taken from udiv_qrnnd_c */ if (r < p) { qh--; r += u1; if (r >= u1) /* i.e. we didn't get carry when adding to r */ if (r < p) { qh--; r += u1; } } r -= p; /* Low half of the quotient is ql = floor ( (b r + b-1) / u1). This is a 3/2 division (on half-limbs), for which qh is a suitable inverse. */ p = (r >> (GMP_LIMB_BITS / 2)) * qh + r; /* Unlike full-limb 3/2, we can add 1 without overflow. For this to work, it is essential that ql is a full mp_limb_t. */ ql = (p >> (GMP_LIMB_BITS / 2)) + 1; /* By the 3/2 trick, we don't need the high half limb. */ r = (r << (GMP_LIMB_BITS / 2)) + GMP_LLIMB_MASK - ql * u1; if (r >= (GMP_LIMB_MAX & (p << (GMP_LIMB_BITS / 2)))) { ql--; r += u1; } m = ((mp_limb_t) qh << (GMP_LIMB_BITS / 2)) + ql; if (r >= u1) { m++; r -= u1; } } /* Now m is the 2/1 inverse of u1. If u0 > 0, adjust it to become a 3/2 inverse. */ if (u0 > 0) { mp_limb_t th, tl; r = ~r; r += u0; if (r < u0) { m--; if (r >= u1) { m--; r -= u1; } r -= u1; } gmp_umul_ppmm (th, tl, u0, m); r += th; if (r < th) { m--; m -= ((r > u1) | ((r == u1) & (tl > u0))); } } return m; } struct gmp_div_inverse { /* Normalization shift count. */ unsigned shift; /* Normalized divisor (d0 unused for mpn_div_qr_1) */ mp_limb_t d1, d0; /* Inverse, for 2/1 or 3/2. */ mp_limb_t di; }; static void mpn_div_qr_1_invert (struct gmp_div_inverse *inv, mp_limb_t d) { unsigned shift; assert (d > 0); gmp_clz (shift, d); inv->shift = shift; inv->d1 = d << shift; inv->di = mpn_invert_limb (inv->d1); } static void mpn_div_qr_2_invert (struct gmp_div_inverse *inv, mp_limb_t d1, mp_limb_t d0) { unsigned shift; assert (d1 > 0); gmp_clz (shift, d1); inv->shift = shift; if (shift > 0) { d1 = (d1 << shift) | (d0 >> (GMP_LIMB_BITS - shift)); d0 <<= shift; } inv->d1 = d1; inv->d0 = d0; inv->di = mpn_invert_3by2 (d1, d0); } static void mpn_div_qr_invert (struct gmp_div_inverse *inv, mp_srcptr dp, mp_size_t dn) { assert (dn > 0); if (dn == 1) mpn_div_qr_1_invert (inv, dp[0]); else if (dn == 2) mpn_div_qr_2_invert (inv, dp[1], dp[0]); else { unsigned shift; mp_limb_t d1, d0; d1 = dp[dn-1]; d0 = dp[dn-2]; assert (d1 > 0); gmp_clz (shift, d1); inv->shift = shift; if (shift > 0) { d1 = (d1 << shift) | (d0 >> (GMP_LIMB_BITS - shift)); d0 = (d0 << shift) | (dp[dn-3] >> (GMP_LIMB_BITS - shift)); } inv->d1 = d1; inv->d0 = d0; inv->di = mpn_invert_3by2 (d1, d0); } } /* Not matching current public gmp interface, rather corresponding to the sbpi1_div_* functions. */ static mp_limb_t mpn_div_qr_1_preinv (mp_ptr qp, mp_srcptr np, mp_size_t nn, const struct gmp_div_inverse *inv) { mp_limb_t d, di; mp_limb_t r; mp_ptr tp = NULL; mp_size_t tn = 0; if (inv->shift > 0) { /* Shift, reusing qp area if possible. In-place shift if qp == np. */ tp = qp; if (!tp) { tn = nn; tp = gmp_alloc_limbs (tn); } r = mpn_lshift (tp, np, nn, inv->shift); np = tp; } else r = 0; d = inv->d1; di = inv->di; while (--nn >= 0) { mp_limb_t q; gmp_udiv_qrnnd_preinv (q, r, r, np[nn], d, di); if (qp) qp[nn] = q; } if (tn) gmp_free_limbs (tp, tn); return r >> inv->shift; } static void mpn_div_qr_2_preinv (mp_ptr qp, mp_ptr np, mp_size_t nn, const struct gmp_div_inverse *inv) { unsigned shift; mp_size_t i; mp_limb_t d1, d0, di, r1, r0; assert (nn >= 2); shift = inv->shift; d1 = inv->d1; d0 = inv->d0; di = inv->di; if (shift > 0) r1 = mpn_lshift (np, np, nn, shift); else r1 = 0; r0 = np[nn - 1]; i = nn - 2; do { mp_limb_t n0, q; n0 = np[i]; gmp_udiv_qr_3by2 (q, r1, r0, r1, r0, n0, d1, d0, di); if (qp) qp[i] = q; } while (--i >= 0); if (shift > 0) { assert ((r0 & (GMP_LIMB_MAX >> (GMP_LIMB_BITS - shift))) == 0); r0 = (r0 >> shift) | (r1 << (GMP_LIMB_BITS - shift)); r1 >>= shift; } np[1] = r1; np[0] = r0; } static void mpn_div_qr_pi1 (mp_ptr qp, mp_ptr np, mp_size_t nn, mp_limb_t n1, mp_srcptr dp, mp_size_t dn, mp_limb_t dinv) { mp_size_t i; mp_limb_t d1, d0; mp_limb_t cy, cy1; mp_limb_t q; assert (dn > 2); assert (nn >= dn); d1 = dp[dn - 1]; d0 = dp[dn - 2]; assert ((d1 & GMP_LIMB_HIGHBIT) != 0); /* Iteration variable is the index of the q limb. * * We divide <n1, np[dn-1+i], np[dn-2+i], np[dn-3+i],..., np[i]> * by <d1, d0, dp[dn-3], ..., dp[0] > */ i = nn - dn; do { mp_limb_t n0 = np[dn-1+i]; if (n1 == d1 && n0 == d0) { q = GMP_LIMB_MAX; mpn_submul_1 (np+i, dp, dn, q); n1 = np[dn-1+i]; /* update n1, last loop's value will now be invalid */ } else { gmp_udiv_qr_3by2 (q, n1, n0, n1, n0, np[dn-2+i], d1, d0, dinv); cy = mpn_submul_1 (np + i, dp, dn-2, q); cy1 = n0 < cy; n0 = n0 - cy; cy = n1 < cy1; n1 = n1 - cy1; np[dn-2+i] = n0; if (cy != 0) { n1 += d1 + mpn_add_n (np + i, np + i, dp, dn - 1); q--; } } if (qp) qp[i] = q; } while (--i >= 0); np[dn - 1] = n1; } static void mpn_div_qr_preinv (mp_ptr qp, mp_ptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn, const struct gmp_div_inverse *inv) { assert (dn > 0); assert (nn >= dn); if (dn == 1) np[0] = mpn_div_qr_1_preinv (qp, np, nn, inv); else if (dn == 2) mpn_div_qr_2_preinv (qp, np, nn, inv); else { mp_limb_t nh; unsigned shift; assert (inv->d1 == dp[dn-1]); assert (inv->d0 == dp[dn-2]); assert ((inv->d1 & GMP_LIMB_HIGHBIT) != 0); shift = inv->shift; if (shift > 0) nh = mpn_lshift (np, np, nn, shift); else nh = 0; mpn_div_qr_pi1 (qp, np, nn, nh, dp, dn, inv->di); if (shift > 0) gmp_assert_nocarry (mpn_rshift (np, np, dn, shift)); } } static void mpn_div_qr (mp_ptr qp, mp_ptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn) { struct gmp_div_inverse inv; mp_ptr tp = NULL; assert (dn > 0); assert (nn >= dn); mpn_div_qr_invert (&inv, dp, dn); if (dn > 2 && inv.shift > 0) { tp = gmp_alloc_limbs (dn); gmp_assert_nocarry (mpn_lshift (tp, dp, dn, inv.shift)); dp = tp; } mpn_div_qr_preinv (qp, np, nn, dp, dn, &inv); if (tp) gmp_free_limbs (tp, dn); } /* MPN base conversion. */ static unsigned mpn_base_power_of_two_p (unsigned b) { switch (b) { case 2: return 1; case 4: return 2; case 8: return 3; case 16: return 4; case 32: return 5; case 64: return 6; case 128: return 7; case 256: return 8; default: return 0; } } struct mpn_base_info { /* bb is the largest power of the base which fits in one limb, and exp is the corresponding exponent. */ unsigned exp; mp_limb_t bb; }; static void mpn_get_base_info (struct mpn_base_info *info, mp_limb_t b) { mp_limb_t m; mp_limb_t p; unsigned exp; m = GMP_LIMB_MAX / b; for (exp = 1, p = b; p <= m; exp++) p *= b; info->exp = exp; info->bb = p; } static mp_bitcnt_t mpn_limb_size_in_base_2 (mp_limb_t u) { unsigned shift; assert (u > 0); gmp_clz (shift, u); return GMP_LIMB_BITS - shift; } static size_t mpn_get_str_bits (unsigned char *sp, unsigned bits, mp_srcptr up, mp_size_t un) { unsigned char mask; size_t sn, j; mp_size_t i; unsigned shift; sn = ((un - 1) * GMP_LIMB_BITS + mpn_limb_size_in_base_2 (up[un-1]) + bits - 1) / bits; mask = (1U << bits) - 1; for (i = 0, j = sn, shift = 0; j-- > 0;) { unsigned char digit = up[i] >> shift; shift += bits; if (shift >= GMP_LIMB_BITS && ++i < un) { shift -= GMP_LIMB_BITS; digit |= up[i] << (bits - shift); } sp[j] = digit & mask; } return sn; } /* We generate digits from the least significant end, and reverse at the end. */ static size_t mpn_limb_get_str (unsigned char *sp, mp_limb_t w, const struct gmp_div_inverse *binv) { mp_size_t i; for (i = 0; w > 0; i++) { mp_limb_t h, l, r; h = w >> (GMP_LIMB_BITS - binv->shift); l = w << binv->shift; gmp_udiv_qrnnd_preinv (w, r, h, l, binv->d1, binv->di); assert ((r & (GMP_LIMB_MAX >> (GMP_LIMB_BITS - binv->shift))) == 0); r >>= binv->shift; sp[i] = r; } return i; } static size_t mpn_get_str_other (unsigned char *sp, int base, const struct mpn_base_info *info, mp_ptr up, mp_size_t un) { struct gmp_div_inverse binv; size_t sn; size_t i; mpn_div_qr_1_invert (&binv, base); sn = 0; if (un > 1) { struct gmp_div_inverse bbinv; mpn_div_qr_1_invert (&bbinv, info->bb); do { mp_limb_t w; size_t done; w = mpn_div_qr_1_preinv (up, up, un, &bbinv); un -= (up[un-1] == 0); done = mpn_limb_get_str (sp + sn, w, &binv); for (sn += done; done < info->exp; done++) sp[sn++] = 0; } while (un > 1); } sn += mpn_limb_get_str (sp + sn, up[0], &binv); /* Reverse order */ for (i = 0; 2*i + 1 < sn; i++) { unsigned char t = sp[i]; sp[i] = sp[sn - i - 1]; sp[sn - i - 1] = t; } return sn; } size_t mpn_get_str (unsigned char *sp, int base, mp_ptr up, mp_size_t un) { unsigned bits; assert (un > 0); assert (up[un-1] > 0); bits = mpn_base_power_of_two_p (base); if (bits) return mpn_get_str_bits (sp, bits, up, un); else { struct mpn_base_info info; mpn_get_base_info (&info, base); return mpn_get_str_other (sp, base, &info, up, un); } } static mp_size_t mpn_set_str_bits (mp_ptr rp, const unsigned char *sp, size_t sn, unsigned bits) { mp_size_t rn; mp_limb_t limb; unsigned shift; for (limb = 0, rn = 0, shift = 0; sn-- > 0; ) { limb |= (mp_limb_t) sp[sn] << shift; shift += bits; if (shift >= GMP_LIMB_BITS) { shift -= GMP_LIMB_BITS; rp[rn++] = limb; /* Next line is correct also if shift == 0, bits == 8, and mp_limb_t == unsigned char. */ limb = (unsigned int) sp[sn] >> (bits - shift); } } if (limb != 0) rp[rn++] = limb; else rn = mpn_normalized_size (rp, rn); return rn; } /* Result is usually normalized, except for all-zero input, in which case a single zero limb is written at *RP, and 1 is returned. */ static mp_size_t mpn_set_str_other (mp_ptr rp, const unsigned char *sp, size_t sn, mp_limb_t b, const struct mpn_base_info *info) { mp_size_t rn; mp_limb_t w; unsigned k; size_t j; assert (sn > 0); k = 1 + (sn - 1) % info->exp; j = 0; w = sp[j++]; while (--k != 0) w = w * b + sp[j++]; rp[0] = w; for (rn = 1; j < sn;) { mp_limb_t cy; w = sp[j++]; for (k = 1; k < info->exp; k++) w = w * b + sp[j++]; cy = mpn_mul_1 (rp, rp, rn, info->bb); cy += mpn_add_1 (rp, rp, rn, w); if (cy > 0) rp[rn++] = cy; } assert (j == sn); return rn; } mp_size_t mpn_set_str (mp_ptr rp, const unsigned char *sp, size_t sn, int base) { unsigned bits; if (sn == 0) return 0; bits = mpn_base_power_of_two_p (base); if (bits) return mpn_set_str_bits (rp, sp, sn, bits); else { struct mpn_base_info info; mpn_get_base_info (&info, base); return mpn_set_str_other (rp, sp, sn, base, &info); } } /* MPZ interface */ void mpz_init (mpz_t r) { static const mp_limb_t dummy_limb = GMP_LIMB_MAX & 0xc1a0; r->_mp_alloc = 0; r->_mp_size = 0; r->_mp_d = (mp_ptr) &dummy_limb; } /* The utility of this function is a bit limited, since many functions assigns the result variable using mpz_swap. */ void mpz_init2 (mpz_t r, mp_bitcnt_t bits) { mp_size_t rn; bits -= (bits != 0); /* Round down, except if 0 */ rn = 1 + bits / GMP_LIMB_BITS; r->_mp_alloc = rn; r->_mp_size = 0; r->_mp_d = gmp_alloc_limbs (rn); } void mpz_clear (mpz_t r) { if (r->_mp_alloc) gmp_free_limbs (r->_mp_d, r->_mp_alloc); } static mp_ptr mpz_realloc (mpz_t r, mp_size_t size) { size = GMP_MAX (size, 1); if (r->_mp_alloc) r->_mp_d = gmp_realloc_limbs (r->_mp_d, r->_mp_alloc, size); else r->_mp_d = gmp_alloc_limbs (size); r->_mp_alloc = size; if (GMP_ABS (r->_mp_size) > size) r->_mp_size = 0; return r->_mp_d; } /* Realloc for an mpz_t WHAT if it has less than NEEDED limbs. */ #define MPZ_REALLOC(z,n) ((n) > (z)->_mp_alloc \ ? mpz_realloc(z,n) \ : (z)->_mp_d) /* MPZ assignment and basic conversions. */ void mpz_set_si (mpz_t r, signed long int x) { if (x >= 0) mpz_set_ui (r, x); else /* (x < 0) */ if (GMP_LIMB_BITS < GMP_ULONG_BITS) { mpz_set_ui (r, GMP_NEG_CAST (unsigned long int, x)); mpz_neg (r, r); } else { r->_mp_size = -1; MPZ_REALLOC (r, 1)[0] = GMP_NEG_CAST (unsigned long int, x); } } void mpz_set_ui (mpz_t r, unsigned long int x) { if (x > 0) { r->_mp_size = 1; MPZ_REALLOC (r, 1)[0] = x; if (GMP_LIMB_BITS < GMP_ULONG_BITS) { int LOCAL_GMP_LIMB_BITS = GMP_LIMB_BITS; while (x >>= LOCAL_GMP_LIMB_BITS) { ++ r->_mp_size; MPZ_REALLOC (r, r->_mp_size)[r->_mp_size - 1] = x; } } } else r->_mp_size = 0; } void mpz_set (mpz_t r, const mpz_t x) { /* Allow the NOP r == x */ if (r != x) { mp_size_t n; mp_ptr rp; n = GMP_ABS (x->_mp_size); rp = MPZ_REALLOC (r, n); mpn_copyi (rp, x->_mp_d, n); r->_mp_size = x->_mp_size; } } void mpz_init_set_si (mpz_t r, signed long int x) { mpz_init (r); mpz_set_si (r, x); } void mpz_init_set_ui (mpz_t r, unsigned long int x) { mpz_init (r); mpz_set_ui (r, x); } void mpz_init_set (mpz_t r, const mpz_t x) { mpz_init (r); mpz_set (r, x); } int mpz_fits_slong_p (const mpz_t u) { return mpz_cmp_si (u, LONG_MAX) <= 0 && mpz_cmp_si (u, LONG_MIN) >= 0; } static int mpn_absfits_ulong_p (mp_srcptr up, mp_size_t un) { int ulongsize = GMP_ULONG_BITS / GMP_LIMB_BITS; mp_limb_t ulongrem = 0; if (GMP_ULONG_BITS % GMP_LIMB_BITS != 0) ulongrem = (mp_limb_t) (ULONG_MAX >> GMP_LIMB_BITS * ulongsize) + 1; return un <= ulongsize || (up[ulongsize] < ulongrem && un == ulongsize + 1); } int mpz_fits_ulong_p (const mpz_t u) { mp_size_t us = u->_mp_size; return us >= 0 && mpn_absfits_ulong_p (u->_mp_d, us); } int mpz_fits_sint_p (const mpz_t u) { return mpz_cmp_si (u, INT_MAX) <= 0 && mpz_cmp_si (u, INT_MIN) >= 0; } int mpz_fits_uint_p (const mpz_t u) { return u->_mp_size >= 0 && mpz_cmpabs_ui (u, UINT_MAX) <= 0; } int mpz_fits_sshort_p (const mpz_t u) { return mpz_cmp_si (u, SHRT_MAX) <= 0 && mpz_cmp_si (u, SHRT_MIN) >= 0; } int mpz_fits_ushort_p (const mpz_t u) { return u->_mp_size >= 0 && mpz_cmpabs_ui (u, USHRT_MAX) <= 0; } long int mpz_get_si (const mpz_t u) { unsigned long r = mpz_get_ui (u); unsigned long c = -LONG_MAX - LONG_MIN; if (u->_mp_size < 0) /* This expression is necessary to properly handle -LONG_MIN */ return -(long) c - (long) ((r - c) & LONG_MAX); else return (long) (r & LONG_MAX); } unsigned long int mpz_get_ui (const mpz_t u) { if (GMP_LIMB_BITS < GMP_ULONG_BITS) { int LOCAL_GMP_LIMB_BITS = GMP_LIMB_BITS; unsigned long r = 0; mp_size_t n = GMP_ABS (u->_mp_size); n = GMP_MIN (n, 1 + (mp_size_t) (GMP_ULONG_BITS - 1) / GMP_LIMB_BITS); while (--n >= 0) r = (r << LOCAL_GMP_LIMB_BITS) + u->_mp_d[n]; return r; } return u->_mp_size == 0 ? 0 : u->_mp_d[0]; } size_t mpz_size (const mpz_t u) { return GMP_ABS (u->_mp_size); } mp_limb_t mpz_getlimbn (const mpz_t u, mp_size_t n) { if (n >= 0 && n < GMP_ABS (u->_mp_size)) return u->_mp_d[n]; else return 0; } void mpz_realloc2 (mpz_t x, mp_bitcnt_t n) { mpz_realloc (x, 1 + (n - (n != 0)) / GMP_LIMB_BITS); } mp_srcptr mpz_limbs_read (mpz_srcptr x) { return x->_mp_d; } mp_ptr mpz_limbs_modify (mpz_t x, mp_size_t n) { assert (n > 0); return MPZ_REALLOC (x, n); } mp_ptr mpz_limbs_write (mpz_t x, mp_size_t n) { return mpz_limbs_modify (x, n); } void mpz_limbs_finish (mpz_t x, mp_size_t xs) { mp_size_t xn; xn = mpn_normalized_size (x->_mp_d, GMP_ABS (xs)); x->_mp_size = xs < 0 ? -xn : xn; } static mpz_srcptr mpz_roinit_normal_n (mpz_t x, mp_srcptr xp, mp_size_t xs) { x->_mp_alloc = 0; x->_mp_d = (mp_ptr) xp; x->_mp_size = xs; return x; } mpz_srcptr mpz_roinit_n (mpz_t x, mp_srcptr xp, mp_size_t xs) { mpz_roinit_normal_n (x, xp, xs); mpz_limbs_finish (x, xs); return x; } /* Conversions and comparison to double. */ void mpz_set_d (mpz_t r, double x) { int sign; mp_ptr rp; mp_size_t rn, i; double B; double Bi; mp_limb_t f; /* x != x is true when x is a NaN, and x == x * 0.5 is true when x is zero or infinity. */ if (x != x || x == x * 0.5) { r->_mp_size = 0; return; } sign = x < 0.0 ; if (sign) x = - x; if (x < 1.0) { r->_mp_size = 0; return; } B = 4.0 * (double) (GMP_LIMB_HIGHBIT >> 1); Bi = 1.0 / B; for (rn = 1; x >= B; rn++) x *= Bi; rp = MPZ_REALLOC (r, rn); f = (mp_limb_t) x; x -= f; assert (x < 1.0); i = rn-1; rp[i] = f; while (--i >= 0) { x = B * x; f = (mp_limb_t) x; x -= f; assert (x < 1.0); rp[i] = f; } r->_mp_size = sign ? - rn : rn; } void mpz_init_set_d (mpz_t r, double x) { mpz_init (r); mpz_set_d (r, x); } double mpz_get_d (const mpz_t u) { int m; mp_limb_t l; mp_size_t un; double x; double B = 4.0 * (double) (GMP_LIMB_HIGHBIT >> 1); un = GMP_ABS (u->_mp_size); if (un == 0) return 0.0; l = u->_mp_d[--un]; gmp_clz (m, l); m = m + GMP_DBL_MANT_BITS - GMP_LIMB_BITS; if (m < 0) l &= GMP_LIMB_MAX << -m; for (x = l; --un >= 0;) { x = B*x; if (m > 0) { l = u->_mp_d[un]; m -= GMP_LIMB_BITS; if (m < 0) l &= GMP_LIMB_MAX << -m; x += l; } } if (u->_mp_size < 0) x = -x; return x; } int mpz_cmpabs_d (const mpz_t x, double d) { mp_size_t xn; double B, Bi; mp_size_t i; xn = x->_mp_size; d = GMP_ABS (d); if (xn != 0) { xn = GMP_ABS (xn); B = 4.0 * (double) (GMP_LIMB_HIGHBIT >> 1); Bi = 1.0 / B; /* Scale d so it can be compared with the top limb. */ for (i = 1; i < xn; i++) d *= Bi; if (d >= B) return -1; /* Compare floor(d) to top limb, subtract and cancel when equal. */ for (i = xn; i-- > 0;) { mp_limb_t f, xl; f = (mp_limb_t) d; xl = x->_mp_d[i]; if (xl > f) return 1; else if (xl < f) return -1; d = B * (d - f); } } return - (d > 0.0); } int mpz_cmp_d (const mpz_t x, double d) { if (x->_mp_size < 0) { if (d >= 0.0) return -1; else return -mpz_cmpabs_d (x, d); } else { if (d < 0.0) return 1; else return mpz_cmpabs_d (x, d); } } /* MPZ comparisons and the like. */ int mpz_sgn (const mpz_t u) { return GMP_CMP (u->_mp_size, 0); } int mpz_cmp_si (const mpz_t u, long v) { mp_size_t usize = u->_mp_size; if (v >= 0) return mpz_cmp_ui (u, v); else if (usize >= 0) return 1; else return - mpz_cmpabs_ui (u, GMP_NEG_CAST (unsigned long int, v)); } int mpz_cmp_ui (const mpz_t u, unsigned long v) { mp_size_t usize = u->_mp_size; if (usize < 0) return -1; else return mpz_cmpabs_ui (u, v); } int mpz_cmp (const mpz_t a, const mpz_t b) { mp_size_t asize = a->_mp_size; mp_size_t bsize = b->_mp_size; if (asize != bsize) return (asize < bsize) ? -1 : 1; else if (asize >= 0) return mpn_cmp (a->_mp_d, b->_mp_d, asize); else return mpn_cmp (b->_mp_d, a->_mp_d, -asize); } int mpz_cmpabs_ui (const mpz_t u, unsigned long v) { mp_size_t un = GMP_ABS (u->_mp_size); if (! mpn_absfits_ulong_p (u->_mp_d, un)) return 1; else { unsigned long uu = mpz_get_ui (u); return GMP_CMP(uu, v); } } int mpz_cmpabs (const mpz_t u, const mpz_t v) { return mpn_cmp4 (u->_mp_d, GMP_ABS (u->_mp_size), v->_mp_d, GMP_ABS (v->_mp_size)); } void mpz_abs (mpz_t r, const mpz_t u) { mpz_set (r, u); r->_mp_size = GMP_ABS (r->_mp_size); } void mpz_neg (mpz_t r, const mpz_t u) { mpz_set (r, u); r->_mp_size = -r->_mp_size; } void mpz_swap (mpz_t u, mpz_t v) { MP_SIZE_T_SWAP (u->_mp_size, v->_mp_size); MP_SIZE_T_SWAP (u->_mp_alloc, v->_mp_alloc); MP_PTR_SWAP (u->_mp_d, v->_mp_d); } /* MPZ addition and subtraction */ void mpz_add_ui (mpz_t r, const mpz_t a, unsigned long b) { mpz_t bb; mpz_init_set_ui (bb, b); mpz_add (r, a, bb); mpz_clear (bb); } void mpz_sub_ui (mpz_t r, const mpz_t a, unsigned long b) { mpz_ui_sub (r, b, a); mpz_neg (r, r); } void mpz_ui_sub (mpz_t r, unsigned long a, const mpz_t b) { mpz_neg (r, b); mpz_add_ui (r, r, a); } static mp_size_t mpz_abs_add (mpz_t r, const mpz_t a, const mpz_t b) { mp_size_t an = GMP_ABS (a->_mp_size); mp_size_t bn = GMP_ABS (b->_mp_size); mp_ptr rp; mp_limb_t cy; if (an < bn) { MPZ_SRCPTR_SWAP (a, b); MP_SIZE_T_SWAP (an, bn); } rp = MPZ_REALLOC (r, an + 1); cy = mpn_add (rp, a->_mp_d, an, b->_mp_d, bn); rp[an] = cy; return an + cy; } static mp_size_t mpz_abs_sub (mpz_t r, const mpz_t a, const mpz_t b) { mp_size_t an = GMP_ABS (a->_mp_size); mp_size_t bn = GMP_ABS (b->_mp_size); int cmp; mp_ptr rp; cmp = mpn_cmp4 (a->_mp_d, an, b->_mp_d, bn); if (cmp > 0) { rp = MPZ_REALLOC (r, an); gmp_assert_nocarry (mpn_sub (rp, a->_mp_d, an, b->_mp_d, bn)); return mpn_normalized_size (rp, an); } else if (cmp < 0) { rp = MPZ_REALLOC (r, bn); gmp_assert_nocarry (mpn_sub (rp, b->_mp_d, bn, a->_mp_d, an)); return -mpn_normalized_size (rp, bn); } else return 0; } void mpz_add (mpz_t r, const mpz_t a, const mpz_t b) { mp_size_t rn; if ( (a->_mp_size ^ b->_mp_size) >= 0) rn = mpz_abs_add (r, a, b); else rn = mpz_abs_sub (r, a, b); r->_mp_size = a->_mp_size >= 0 ? rn : - rn; } void mpz_sub (mpz_t r, const mpz_t a, const mpz_t b) { mp_size_t rn; if ( (a->_mp_size ^ b->_mp_size) >= 0) rn = mpz_abs_sub (r, a, b); else rn = mpz_abs_add (r, a, b); r->_mp_size = a->_mp_size >= 0 ? rn : - rn; } /* MPZ multiplication */ void mpz_mul_si (mpz_t r, const mpz_t u, long int v) { if (v < 0) { mpz_mul_ui (r, u, GMP_NEG_CAST (unsigned long int, v)); mpz_neg (r, r); } else mpz_mul_ui (r, u, v); } void mpz_mul_ui (mpz_t r, const mpz_t u, unsigned long int v) { mpz_t vv; mpz_init_set_ui (vv, v); mpz_mul (r, u, vv); mpz_clear (vv); return; } void mpz_mul (mpz_t r, const mpz_t u, const mpz_t v) { int sign; mp_size_t un, vn, rn; mpz_t t; mp_ptr tp; un = u->_mp_size; vn = v->_mp_size; if (un == 0 || vn == 0) { r->_mp_size = 0; return; } sign = (un ^ vn) < 0; un = GMP_ABS (un); vn = GMP_ABS (vn); mpz_init2 (t, (un + vn) * GMP_LIMB_BITS); tp = t->_mp_d; if (un >= vn) mpn_mul (tp, u->_mp_d, un, v->_mp_d, vn); else mpn_mul (tp, v->_mp_d, vn, u->_mp_d, un); rn = un + vn; rn -= tp[rn-1] == 0; t->_mp_size = sign ? - rn : rn; mpz_swap (r, t); mpz_clear (t); } void mpz_mul_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t bits) { mp_size_t un, rn; mp_size_t limbs; unsigned shift; mp_ptr rp; un = GMP_ABS (u->_mp_size); if (un == 0) { r->_mp_size = 0; return; } limbs = bits / GMP_LIMB_BITS; shift = bits % GMP_LIMB_BITS; rn = un + limbs + (shift > 0); rp = MPZ_REALLOC (r, rn); if (shift > 0) { mp_limb_t cy = mpn_lshift (rp + limbs, u->_mp_d, un, shift); rp[rn-1] = cy; rn -= (cy == 0); } else mpn_copyd (rp + limbs, u->_mp_d, un); mpn_zero (rp, limbs); r->_mp_size = (u->_mp_size < 0) ? - rn : rn; } void mpz_addmul_ui (mpz_t r, const mpz_t u, unsigned long int v) { mpz_t t; mpz_init_set_ui (t, v); mpz_mul (t, u, t); mpz_add (r, r, t); mpz_clear (t); } void mpz_submul_ui (mpz_t r, const mpz_t u, unsigned long int v) { mpz_t t; mpz_init_set_ui (t, v); mpz_mul (t, u, t); mpz_sub (r, r, t); mpz_clear (t); } void mpz_addmul (mpz_t r, const mpz_t u, const mpz_t v) { mpz_t t; mpz_init (t); mpz_mul (t, u, v); mpz_add (r, r, t); mpz_clear (t); } void mpz_submul (mpz_t r, const mpz_t u, const mpz_t v) { mpz_t t; mpz_init (t); mpz_mul (t, u, v); mpz_sub (r, r, t); mpz_clear (t); } /* MPZ division */ enum mpz_div_round_mode { GMP_DIV_FLOOR, GMP_DIV_CEIL, GMP_DIV_TRUNC }; /* Allows q or r to be zero. Returns 1 iff remainder is non-zero. */ static int mpz_div_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d, enum mpz_div_round_mode mode) { mp_size_t ns, ds, nn, dn, qs; ns = n->_mp_size; ds = d->_mp_size; if (ds == 0) gmp_die("mpz_div_qr: Divide by zero."); if (ns == 0) { if (q) q->_mp_size = 0; if (r) r->_mp_size = 0; return 0; } nn = GMP_ABS (ns); dn = GMP_ABS (ds); qs = ds ^ ns; if (nn < dn) { if (mode == GMP_DIV_CEIL && qs >= 0) { /* q = 1, r = n - d */ if (r) mpz_sub (r, n, d); if (q) mpz_set_ui (q, 1); } else if (mode == GMP_DIV_FLOOR && qs < 0) { /* q = -1, r = n + d */ if (r) mpz_add (r, n, d); if (q) mpz_set_si (q, -1); } else { /* q = 0, r = d */ if (r) mpz_set (r, n); if (q) q->_mp_size = 0; } return 1; } else { mp_ptr np, qp; mp_size_t qn, rn; mpz_t tq, tr; mpz_init_set (tr, n); np = tr->_mp_d; qn = nn - dn + 1; if (q) { mpz_init2 (tq, qn * GMP_LIMB_BITS); qp = tq->_mp_d; } else qp = NULL; mpn_div_qr (qp, np, nn, d->_mp_d, dn); if (qp) { qn -= (qp[qn-1] == 0); tq->_mp_size = qs < 0 ? -qn : qn; } rn = mpn_normalized_size (np, dn); tr->_mp_size = ns < 0 ? - rn : rn; if (mode == GMP_DIV_FLOOR && qs < 0 && rn != 0) { if (q) mpz_sub_ui (tq, tq, 1); if (r) mpz_add (tr, tr, d); } else if (mode == GMP_DIV_CEIL && qs >= 0 && rn != 0) { if (q) mpz_add_ui (tq, tq, 1); if (r) mpz_sub (tr, tr, d); } if (q) { mpz_swap (tq, q); mpz_clear (tq); } if (r) mpz_swap (tr, r); mpz_clear (tr); return rn != 0; } } void mpz_cdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (q, r, n, d, GMP_DIV_CEIL); } void mpz_fdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (q, r, n, d, GMP_DIV_FLOOR); } void mpz_tdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (q, r, n, d, GMP_DIV_TRUNC); } void mpz_cdiv_q (mpz_t q, const mpz_t n, const mpz_t d) { mpz_div_qr (q, NULL, n, d, GMP_DIV_CEIL); } void mpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d) { mpz_div_qr (q, NULL, n, d, GMP_DIV_FLOOR); } void mpz_tdiv_q (mpz_t q, const mpz_t n, const mpz_t d) { mpz_div_qr (q, NULL, n, d, GMP_DIV_TRUNC); } void mpz_cdiv_r (mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (NULL, r, n, d, GMP_DIV_CEIL); } void mpz_fdiv_r (mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (NULL, r, n, d, GMP_DIV_FLOOR); } void mpz_tdiv_r (mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (NULL, r, n, d, GMP_DIV_TRUNC); } void mpz_mod (mpz_t r, const mpz_t n, const mpz_t d) { mpz_div_qr (NULL, r, n, d, d->_mp_size >= 0 ? GMP_DIV_FLOOR : GMP_DIV_CEIL); } static void mpz_div_q_2exp (mpz_t q, const mpz_t u, mp_bitcnt_t bit_index, enum mpz_div_round_mode mode) { mp_size_t un, qn; mp_size_t limb_cnt; mp_ptr qp; int adjust; un = u->_mp_size; if (un == 0) { q->_mp_size = 0; return; } limb_cnt = bit_index / GMP_LIMB_BITS; qn = GMP_ABS (un) - limb_cnt; bit_index %= GMP_LIMB_BITS; if (mode == ((un > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* un != 0 here. */ /* Note: Below, the final indexing at limb_cnt is valid because at that point we have qn > 0. */ adjust = (qn <= 0 || !mpn_zero_p (u->_mp_d, limb_cnt) || (u->_mp_d[limb_cnt] & (((mp_limb_t) 1 << bit_index) - 1))); else adjust = 0; if (qn <= 0) qn = 0; else { qp = MPZ_REALLOC (q, qn); if (bit_index != 0) { mpn_rshift (qp, u->_mp_d + limb_cnt, qn, bit_index); qn -= qp[qn - 1] == 0; } else { mpn_copyi (qp, u->_mp_d + limb_cnt, qn); } } q->_mp_size = qn; if (adjust) mpz_add_ui (q, q, 1); if (un < 0) mpz_neg (q, q); } static void mpz_div_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t bit_index, enum mpz_div_round_mode mode) { mp_size_t us, un, rn; mp_ptr rp; mp_limb_t mask; us = u->_mp_size; if (us == 0 || bit_index == 0) { r->_mp_size = 0; return; } rn = (bit_index + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; assert (rn > 0); rp = MPZ_REALLOC (r, rn); un = GMP_ABS (us); mask = GMP_LIMB_MAX >> (rn * GMP_LIMB_BITS - bit_index); if (rn > un) { /* Quotient (with truncation) is zero, and remainder is non-zero */ if (mode == ((us > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* us != 0 here. */ { /* Have to negate and sign extend. */ mp_size_t i; gmp_assert_nocarry (! mpn_neg (rp, u->_mp_d, un)); for (i = un; i < rn - 1; i++) rp[i] = GMP_LIMB_MAX; rp[rn-1] = mask; us = -us; } else { /* Just copy */ if (r != u) mpn_copyi (rp, u->_mp_d, un); rn = un; } } else { if (r != u) mpn_copyi (rp, u->_mp_d, rn - 1); rp[rn-1] = u->_mp_d[rn-1] & mask; if (mode == ((us > 0) ? GMP_DIV_CEIL : GMP_DIV_FLOOR)) /* us != 0 here. */ { /* If r != 0, compute 2^{bit_count} - r. */ mpn_neg (rp, rp, rn); rp[rn-1] &= mask; /* us is not used for anything else, so we can modify it here to indicate flipped sign. */ us = -us; } } rn = mpn_normalized_size (rp, rn); r->_mp_size = us < 0 ? -rn : rn; } void mpz_cdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_q_2exp (r, u, cnt, GMP_DIV_CEIL); } void mpz_fdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_q_2exp (r, u, cnt, GMP_DIV_FLOOR); } void mpz_tdiv_q_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_q_2exp (r, u, cnt, GMP_DIV_TRUNC); } void mpz_cdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_r_2exp (r, u, cnt, GMP_DIV_CEIL); } void mpz_fdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_r_2exp (r, u, cnt, GMP_DIV_FLOOR); } void mpz_tdiv_r_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t cnt) { mpz_div_r_2exp (r, u, cnt, GMP_DIV_TRUNC); } void mpz_divexact (mpz_t q, const mpz_t n, const mpz_t d) { gmp_assert_nocarry (mpz_div_qr (q, NULL, n, d, GMP_DIV_TRUNC)); } int mpz_divisible_p (const mpz_t n, const mpz_t d) { return mpz_div_qr (NULL, NULL, n, d, GMP_DIV_TRUNC) == 0; } int mpz_congruent_p (const mpz_t a, const mpz_t b, const mpz_t m) { mpz_t t; int res; /* a == b (mod 0) iff a == b */ if (mpz_sgn (m) == 0) return (mpz_cmp (a, b) == 0); mpz_init (t); mpz_sub (t, a, b); res = mpz_divisible_p (t, m); mpz_clear (t); return res; } static unsigned long mpz_div_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d, enum mpz_div_round_mode mode) { unsigned long ret; mpz_t rr, dd; mpz_init (rr); mpz_init_set_ui (dd, d); mpz_div_qr (q, rr, n, dd, mode); mpz_clear (dd); ret = mpz_get_ui (rr); if (r) mpz_swap (r, rr); mpz_clear (rr); return ret; } unsigned long mpz_cdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, r, n, d, GMP_DIV_CEIL); } unsigned long mpz_fdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, r, n, d, GMP_DIV_FLOOR); } unsigned long mpz_tdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, r, n, d, GMP_DIV_TRUNC); } unsigned long mpz_cdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_CEIL); } unsigned long mpz_fdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_FLOOR); } unsigned long mpz_tdiv_q_ui (mpz_t q, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_TRUNC); } unsigned long mpz_cdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_CEIL); } unsigned long mpz_fdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_FLOOR); } unsigned long mpz_tdiv_r_ui (mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_TRUNC); } unsigned long mpz_cdiv_ui (const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_CEIL); } unsigned long mpz_fdiv_ui (const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_FLOOR); } unsigned long mpz_tdiv_ui (const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_TRUNC); } unsigned long mpz_mod_ui (mpz_t r, const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, r, n, d, GMP_DIV_FLOOR); } void mpz_divexact_ui (mpz_t q, const mpz_t n, unsigned long d) { gmp_assert_nocarry (mpz_div_qr_ui (q, NULL, n, d, GMP_DIV_TRUNC)); } int mpz_divisible_ui_p (const mpz_t n, unsigned long d) { return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_TRUNC) == 0; } /* GCD */ static mp_limb_t mpn_gcd_11 (mp_limb_t u, mp_limb_t v) { unsigned shift; assert ( (u | v) > 0); if (u == 0) return v; else if (v == 0) return u; gmp_ctz (shift, u | v); u >>= shift; v >>= shift; if ( (u & 1) == 0) MP_LIMB_T_SWAP (u, v); while ( (v & 1) == 0) v >>= 1; while (u != v) { if (u > v) { u -= v; do u >>= 1; while ( (u & 1) == 0); } else { v -= u; do v >>= 1; while ( (v & 1) == 0); } } return u << shift; } unsigned long mpz_gcd_ui (mpz_t g, const mpz_t u, unsigned long v) { mpz_t t; mpz_init_set_ui(t, v); mpz_gcd (t, u, t); if (v > 0) v = mpz_get_ui (t); if (g) mpz_swap (t, g); mpz_clear (t); return v; } static mp_bitcnt_t mpz_make_odd (mpz_t r) { mp_bitcnt_t shift; assert (r->_mp_size > 0); /* Count trailing zeros, equivalent to mpn_scan1, because we know that there is a 1 */ shift = mpn_scan1 (r->_mp_d, 0); mpz_tdiv_q_2exp (r, r, shift); return shift; } void mpz_gcd (mpz_t g, const mpz_t u, const mpz_t v) { mpz_t tu, tv; mp_bitcnt_t uz, vz, gz; if (u->_mp_size == 0) { mpz_abs (g, v); return; } if (v->_mp_size == 0) { mpz_abs (g, u); return; } mpz_init (tu); mpz_init (tv); mpz_abs (tu, u); uz = mpz_make_odd (tu); mpz_abs (tv, v); vz = mpz_make_odd (tv); gz = GMP_MIN (uz, vz); if (tu->_mp_size < tv->_mp_size) mpz_swap (tu, tv); mpz_tdiv_r (tu, tu, tv); if (tu->_mp_size == 0) { mpz_swap (g, tv); } else for (;;) { int c; mpz_make_odd (tu); c = mpz_cmp (tu, tv); if (c == 0) { mpz_swap (g, tu); break; } if (c < 0) mpz_swap (tu, tv); if (tv->_mp_size == 1) { mp_limb_t *gp; mpz_tdiv_r (tu, tu, tv); gp = MPZ_REALLOC (g, 1); /* gp = mpz_limbs_modify (g, 1); */ *gp = mpn_gcd_11 (tu->_mp_d[0], tv->_mp_d[0]); g->_mp_size = *gp != 0; /* mpz_limbs_finish (g, 1); */ break; } mpz_sub (tu, tu, tv); } mpz_clear (tu); mpz_clear (tv); mpz_mul_2exp (g, g, gz); } void mpz_gcdext (mpz_t g, mpz_t s, mpz_t t, const mpz_t u, const mpz_t v) { mpz_t tu, tv, s0, s1, t0, t1; mp_bitcnt_t uz, vz, gz; mp_bitcnt_t power; if (u->_mp_size == 0) { /* g = 0 u + sgn(v) v */ signed long sign = mpz_sgn (v); mpz_abs (g, v); if (s) s->_mp_size = 0; if (t) mpz_set_si (t, sign); return; } if (v->_mp_size == 0) { /* g = sgn(u) u + 0 v */ signed long sign = mpz_sgn (u); mpz_abs (g, u); if (s) mpz_set_si (s, sign); if (t) t->_mp_size = 0; return; } mpz_init (tu); mpz_init (tv); mpz_init (s0); mpz_init (s1); mpz_init (t0); mpz_init (t1); mpz_abs (tu, u); uz = mpz_make_odd (tu); mpz_abs (tv, v); vz = mpz_make_odd (tv); gz = GMP_MIN (uz, vz); uz -= gz; vz -= gz; /* Cofactors corresponding to odd gcd. gz handled later. */ if (tu->_mp_size < tv->_mp_size) { mpz_swap (tu, tv); MPZ_SRCPTR_SWAP (u, v); MPZ_PTR_SWAP (s, t); MP_BITCNT_T_SWAP (uz, vz); } /* Maintain * * u = t0 tu + t1 tv * v = s0 tu + s1 tv * * where u and v denote the inputs with common factors of two * eliminated, and det (s0, t0; s1, t1) = 2^p. Then * * 2^p tu = s1 u - t1 v * 2^p tv = -s0 u + t0 v */ /* After initial division, tu = q tv + tu', we have * * u = 2^uz (tu' + q tv) * v = 2^vz tv * * or * * t0 = 2^uz, t1 = 2^uz q * s0 = 0, s1 = 2^vz */ mpz_tdiv_qr (t1, tu, tu, tv); mpz_mul_2exp (t1, t1, uz); mpz_setbit (s1, vz); power = uz + vz; if (tu->_mp_size > 0) { mp_bitcnt_t shift; shift = mpz_make_odd (tu); mpz_setbit (t0, uz + shift); power += shift; for (;;) { int c; c = mpz_cmp (tu, tv); if (c == 0) break; if (c < 0) { /* tv = tv' + tu * * u = t0 tu + t1 (tv' + tu) = (t0 + t1) tu + t1 tv' * v = s0 tu + s1 (tv' + tu) = (s0 + s1) tu + s1 tv' */ mpz_sub (tv, tv, tu); mpz_add (t0, t0, t1); mpz_add (s0, s0, s1); shift = mpz_make_odd (tv); mpz_mul_2exp (t1, t1, shift); mpz_mul_2exp (s1, s1, shift); } else { mpz_sub (tu, tu, tv); mpz_add (t1, t0, t1); mpz_add (s1, s0, s1); shift = mpz_make_odd (tu); mpz_mul_2exp (t0, t0, shift); mpz_mul_2exp (s0, s0, shift); } power += shift; } } else mpz_setbit (t0, uz); /* Now tv = odd part of gcd, and -s0 and t0 are corresponding cofactors. */ mpz_mul_2exp (tv, tv, gz); mpz_neg (s0, s0); /* 2^p g = s0 u + t0 v. Eliminate one factor of two at a time. To adjust cofactors, we need u / g and v / g */ mpz_divexact (s1, v, tv); mpz_abs (s1, s1); mpz_divexact (t1, u, tv); mpz_abs (t1, t1); while (power-- > 0) { /* s0 u + t0 v = (s0 - v/g) u - (t0 + u/g) v */ if (mpz_odd_p (s0) || mpz_odd_p (t0)) { mpz_sub (s0, s0, s1); mpz_add (t0, t0, t1); } assert (mpz_even_p (t0) && mpz_even_p (s0)); mpz_tdiv_q_2exp (s0, s0, 1); mpz_tdiv_q_2exp (t0, t0, 1); } /* Arrange so that |s| < |u| / 2g */ mpz_add (s1, s0, s1); if (mpz_cmpabs (s0, s1) > 0) { mpz_swap (s0, s1); mpz_sub (t0, t0, t1); } if (u->_mp_size < 0) mpz_neg (s0, s0); if (v->_mp_size < 0) mpz_neg (t0, t0); mpz_swap (g, tv); if (s) mpz_swap (s, s0); if (t) mpz_swap (t, t0); mpz_clear (tu); mpz_clear (tv); mpz_clear (s0); mpz_clear (s1); mpz_clear (t0); mpz_clear (t1); } void mpz_lcm (mpz_t r, const mpz_t u, const mpz_t v) { mpz_t g; if (u->_mp_size == 0 || v->_mp_size == 0) { r->_mp_size = 0; return; } mpz_init (g); mpz_gcd (g, u, v); mpz_divexact (g, u, g); mpz_mul (r, g, v); mpz_clear (g); mpz_abs (r, r); } void mpz_lcm_ui (mpz_t r, const mpz_t u, unsigned long v) { if (v == 0 || u->_mp_size == 0) { r->_mp_size = 0; return; } v /= mpz_gcd_ui (NULL, u, v); mpz_mul_ui (r, u, v); mpz_abs (r, r); } int mpz_invert (mpz_t r, const mpz_t u, const mpz_t m) { mpz_t g, tr; int invertible; if (u->_mp_size == 0 || mpz_cmpabs_ui (m, 1) <= 0) return 0; mpz_init (g); mpz_init (tr); mpz_gcdext (g, tr, NULL, u, m); invertible = (mpz_cmp_ui (g, 1) == 0); if (invertible) { if (tr->_mp_size < 0) { if (m->_mp_size >= 0) mpz_add (tr, tr, m); else mpz_sub (tr, tr, m); } mpz_swap (r, tr); } mpz_clear (g); mpz_clear (tr); return invertible; } /* Higher level operations (sqrt, pow and root) */ void mpz_pow_ui (mpz_t r, const mpz_t b, unsigned long e) { unsigned long bit; mpz_t tr; mpz_init_set_ui (tr, 1); bit = GMP_ULONG_HIGHBIT; do { mpz_mul (tr, tr, tr); if (e & bit) mpz_mul (tr, tr, b); bit >>= 1; } while (bit > 0); mpz_swap (r, tr); mpz_clear (tr); } void mpz_ui_pow_ui (mpz_t r, unsigned long blimb, unsigned long e) { mpz_t b; mpz_init_set_ui (b, blimb); mpz_pow_ui (r, b, e); mpz_clear (b); } void mpz_powm (mpz_t r, const mpz_t b, const mpz_t e, const mpz_t m) { mpz_t tr; mpz_t base; mp_size_t en, mn; mp_srcptr mp; struct gmp_div_inverse minv; unsigned shift; mp_ptr tp = NULL; en = GMP_ABS (e->_mp_size); mn = GMP_ABS (m->_mp_size); if (mn == 0) gmp_die ("mpz_powm: Zero modulo."); if (en == 0) { mpz_set_ui (r, 1); return; } mp = m->_mp_d; mpn_div_qr_invert (&minv, mp, mn); shift = minv.shift; if (shift > 0) { /* To avoid shifts, we do all our reductions, except the final one, using a *normalized* m. */ minv.shift = 0; tp = gmp_alloc_limbs (mn); gmp_assert_nocarry (mpn_lshift (tp, mp, mn, shift)); mp = tp; } mpz_init (base); if (e->_mp_size < 0) { if (!mpz_invert (base, b, m)) gmp_die ("mpz_powm: Negative exponent and non-invertible base."); } else { mp_size_t bn; mpz_abs (base, b); bn = base->_mp_size; if (bn >= mn) { mpn_div_qr_preinv (NULL, base->_mp_d, base->_mp_size, mp, mn, &minv); bn = mn; } /* We have reduced the absolute value. Now take care of the sign. Note that we get zero represented non-canonically as m. */ if (b->_mp_size < 0) { mp_ptr bp = MPZ_REALLOC (base, mn); gmp_assert_nocarry (mpn_sub (bp, mp, mn, bp, bn)); bn = mn; } base->_mp_size = mpn_normalized_size (base->_mp_d, bn); } mpz_init_set_ui (tr, 1); while (--en >= 0) { mp_limb_t w = e->_mp_d[en]; mp_limb_t bit; bit = GMP_LIMB_HIGHBIT; do { mpz_mul (tr, tr, tr); if (w & bit) mpz_mul (tr, tr, base); if (tr->_mp_size > mn) { mpn_div_qr_preinv (NULL, tr->_mp_d, tr->_mp_size, mp, mn, &minv); tr->_mp_size = mpn_normalized_size (tr->_mp_d, mn); } bit >>= 1; } while (bit > 0); } /* Final reduction */ if (tr->_mp_size >= mn) { minv.shift = shift; mpn_div_qr_preinv (NULL, tr->_mp_d, tr->_mp_size, mp, mn, &minv); tr->_mp_size = mpn_normalized_size (tr->_mp_d, mn); } if (tp) gmp_free_limbs (tp, mn); mpz_swap (r, tr); mpz_clear (tr); mpz_clear (base); } void mpz_powm_ui (mpz_t r, const mpz_t b, unsigned long elimb, const mpz_t m) { mpz_t e; mpz_init_set_ui (e, elimb); mpz_powm (r, b, e, m); mpz_clear (e); } /* x=trunc(y^(1/z)), r=y-x^z */ void mpz_rootrem (mpz_t x, mpz_t r, const mpz_t y, unsigned long z) { int sgn; mp_bitcnt_t bc; mpz_t t, u; sgn = y->_mp_size < 0; if ((~z & sgn) != 0) gmp_die ("mpz_rootrem: Negative argument, with even root."); if (z == 0) gmp_die ("mpz_rootrem: Zeroth root."); if (mpz_cmpabs_ui (y, 1) <= 0) { if (x) mpz_set (x, y); if (r) r->_mp_size = 0; return; } mpz_init (u); mpz_init (t); bc = (mpz_sizeinbase (y, 2) - 1) / z + 1; mpz_setbit (t, bc); if (z == 2) /* simplify sqrt loop: z-1 == 1 */ do { mpz_swap (u, t); /* u = x */ mpz_tdiv_q (t, y, u); /* t = y/x */ mpz_add (t, t, u); /* t = y/x + x */ mpz_tdiv_q_2exp (t, t, 1); /* x'= (y/x + x)/2 */ } while (mpz_cmpabs (t, u) < 0); /* |x'| < |x| */ else /* z != 2 */ { mpz_t v; mpz_init (v); if (sgn) mpz_neg (t, t); do { mpz_swap (u, t); /* u = x */ mpz_pow_ui (t, u, z - 1); /* t = x^(z-1) */ mpz_tdiv_q (t, y, t); /* t = y/x^(z-1) */ mpz_mul_ui (v, u, z - 1); /* v = x*(z-1) */ mpz_add (t, t, v); /* t = y/x^(z-1) + x*(z-1) */ mpz_tdiv_q_ui (t, t, z); /* x'=(y/x^(z-1) + x*(z-1))/z */ } while (mpz_cmpabs (t, u) < 0); /* |x'| < |x| */ mpz_clear (v); } if (r) { mpz_pow_ui (t, u, z); mpz_sub (r, y, t); } if (x) mpz_swap (x, u); mpz_clear (u); mpz_clear (t); } int mpz_root (mpz_t x, const mpz_t y, unsigned long z) { int res; mpz_t r; mpz_init (r); mpz_rootrem (x, r, y, z); res = r->_mp_size == 0; mpz_clear (r); return res; } /* Compute s = floor(sqrt(u)) and r = u - s^2. Allows r == NULL */ void mpz_sqrtrem (mpz_t s, mpz_t r, const mpz_t u) { mpz_rootrem (s, r, u, 2); } void mpz_sqrt (mpz_t s, const mpz_t u) { mpz_rootrem (s, NULL, u, 2); } int mpz_perfect_square_p (const mpz_t u) { if (u->_mp_size <= 0) return (u->_mp_size == 0); else return mpz_root (NULL, u, 2); } int mpn_perfect_square_p (mp_srcptr p, mp_size_t n) { mpz_t t; assert (n > 0); assert (p [n-1] != 0); return mpz_root (NULL, mpz_roinit_normal_n (t, p, n), 2); } mp_size_t mpn_sqrtrem (mp_ptr sp, mp_ptr rp, mp_srcptr p, mp_size_t n) { mpz_t s, r, u; mp_size_t res; assert (n > 0); assert (p [n-1] != 0); mpz_init (r); mpz_init (s); mpz_rootrem (s, r, mpz_roinit_normal_n (u, p, n), 2); assert (s->_mp_size == (n+1)/2); mpn_copyd (sp, s->_mp_d, s->_mp_size); mpz_clear (s); res = r->_mp_size; if (rp) mpn_copyd (rp, r->_mp_d, res); mpz_clear (r); return res; } /* Combinatorics */ void mpz_mfac_uiui (mpz_t x, unsigned long n, unsigned long m) { mpz_set_ui (x, n + (n == 0)); if (m + 1 < 2) return; while (n > m + 1) mpz_mul_ui (x, x, n -= m); } void mpz_2fac_ui (mpz_t x, unsigned long n) { mpz_mfac_uiui (x, n, 2); } void mpz_fac_ui (mpz_t x, unsigned long n) { mpz_mfac_uiui (x, n, 1); } void mpz_bin_uiui (mpz_t r, unsigned long n, unsigned long k) { mpz_t t; mpz_set_ui (r, k <= n); if (k > (n >> 1)) k = (k <= n) ? n - k : 0; mpz_init (t); mpz_fac_ui (t, k); for (; k > 0; --k) mpz_mul_ui (r, r, n--); mpz_divexact (r, r, t); mpz_clear (t); } /* Primality testing */ /* Computes Kronecker (a/b) with odd b, a!=0 and GCD(a,b) = 1 */ /* Adapted from JACOBI_BASE_METHOD==4 in mpn/generic/jacbase.c */ static int gmp_jacobi_coprime (mp_limb_t a, mp_limb_t b) { int c, bit = 0; assert (b & 1); assert (a != 0); /* assert (mpn_gcd_11 (a, b) == 1); */ /* Below, we represent a and b shifted right so that the least significant one bit is implicit. */ b >>= 1; gmp_ctz(c, a); a >>= 1; for (;;) { a >>= c; /* (2/b) = -1 if b = 3 or 5 mod 8 */ bit ^= c & (b ^ (b >> 1)); if (a < b) { if (a == 0) return bit & 1 ? -1 : 1; bit ^= a & b; a = b - a; b -= a; } else { a -= b; assert (a != 0); } gmp_ctz(c, a); ++c; } } static void gmp_lucas_step_k_2k (mpz_t V, mpz_t Qk, const mpz_t n) { mpz_mod (Qk, Qk, n); /* V_{2k} <- V_k ^ 2 - 2Q^k */ mpz_mul (V, V, V); mpz_submul_ui (V, Qk, 2); mpz_tdiv_r (V, V, n); /* Q^{2k} = (Q^k)^2 */ mpz_mul (Qk, Qk, Qk); } /* Computes V_k, Q^k (mod n) for the Lucas' sequence */ /* with P=1, Q=Q; k = (n>>b0)|1. */ /* Requires an odd n > 4; b0 > 0; -2*Q must not overflow a long */ /* Returns (U_k == 0) and sets V=V_k and Qk=Q^k. */ static int gmp_lucas_mod (mpz_t V, mpz_t Qk, long Q, mp_bitcnt_t b0, const mpz_t n) { mp_bitcnt_t bs; mpz_t U; int res; assert (b0 > 0); assert (Q <= - (LONG_MIN / 2)); assert (Q >= - (LONG_MAX / 2)); assert (mpz_cmp_ui (n, 4) > 0); assert (mpz_odd_p (n)); mpz_init_set_ui (U, 1); /* U1 = 1 */ mpz_set_ui (V, 1); /* V1 = 1 */ mpz_set_si (Qk, Q); for (bs = mpz_sizeinbase (n, 2) - 1; --bs >= b0;) { /* U_{2k} <- U_k * V_k */ mpz_mul (U, U, V); /* V_{2k} <- V_k ^ 2 - 2Q^k */ /* Q^{2k} = (Q^k)^2 */ gmp_lucas_step_k_2k (V, Qk, n); /* A step k->k+1 is performed if the bit in $n$ is 1 */ /* mpz_tstbit(n,bs) or the bit is 0 in $n$ but */ /* should be 1 in $n+1$ (bs == b0) */ if (b0 == bs || mpz_tstbit (n, bs)) { /* Q^{k+1} <- Q^k * Q */ mpz_mul_si (Qk, Qk, Q); /* U_{k+1} <- (U_k + V_k) / 2 */ mpz_swap (U, V); /* Keep in V the old value of U_k */ mpz_add (U, U, V); /* We have to compute U/2, so we need an even value, */ /* equivalent (mod n) */ if (mpz_odd_p (U)) mpz_add (U, U, n); mpz_tdiv_q_2exp (U, U, 1); /* V_{k+1} <-(D*U_k + V_k) / 2 = U_{k+1} + (D-1)/2*U_k = U_{k+1} - 2Q*U_k */ mpz_mul_si (V, V, -2*Q); mpz_add (V, U, V); mpz_tdiv_r (V, V, n); } mpz_tdiv_r (U, U, n); } res = U->_mp_size == 0; mpz_clear (U); return res; } /* Performs strong Lucas' test on x, with parameters suggested */ /* for the BPSW test. Qk is only passed to recycle a variable. */ /* Requires GCD (x,6) = 1.*/ static int gmp_stronglucas (const mpz_t x, mpz_t Qk) { mp_bitcnt_t b0; mpz_t V, n; mp_limb_t maxD, D; /* The absolute value is stored. */ long Q; mp_limb_t tl; /* Test on the absolute value. */ mpz_roinit_normal_n (n, x->_mp_d, GMP_ABS (x->_mp_size)); assert (mpz_odd_p (n)); /* assert (mpz_gcd_ui (NULL, n, 6) == 1); */ if (mpz_root (Qk, n, 2)) return 0; /* A square is composite. */ /* Check Ds up to square root (in case, n is prime) or avoid overflows */ maxD = (Qk->_mp_size == 1) ? Qk->_mp_d [0] - 1 : GMP_LIMB_MAX; D = 3; /* Search a D such that (D/n) = -1 in the sequence 5,-7,9,-11,.. */ /* For those Ds we have (D/n) = (n/|D|) */ do { if (D >= maxD) return 1 + (D != GMP_LIMB_MAX); /* (1 + ! ~ D) */ D += 2; tl = mpz_tdiv_ui (n, D); if (tl == 0) return 0; } while (gmp_jacobi_coprime (tl, D) == 1); mpz_init (V); /* n-(D/n) = n+1 = d*2^{b0}, with d = (n>>b0) | 1 */ b0 = mpn_common_scan (~ n->_mp_d[0], 0, n->_mp_d, n->_mp_size, GMP_LIMB_MAX); /* b0 = mpz_scan0 (n, 0); */ /* D= P^2 - 4Q; P = 1; Q = (1-D)/4 */ Q = (D & 2) ? (long) (D >> 2) + 1 : -(long) (D >> 2); if (! gmp_lucas_mod (V, Qk, Q, b0, n)) /* If Ud != 0 */ while (V->_mp_size != 0 && --b0 != 0) /* while Vk != 0 */ /* V <- V ^ 2 - 2Q^k */ /* Q^{2k} = (Q^k)^2 */ gmp_lucas_step_k_2k (V, Qk, n); mpz_clear (V); return (b0 != 0); } static int gmp_millerrabin (const mpz_t n, const mpz_t nm1, mpz_t y, const mpz_t q, mp_bitcnt_t k) { assert (k > 0); /* Caller must initialize y to the base. */ mpz_powm (y, y, q, n); if (mpz_cmp_ui (y, 1) == 0 || mpz_cmp (y, nm1) == 0) return 1; while (--k > 0) { mpz_powm_ui (y, y, 2, n); if (mpz_cmp (y, nm1) == 0) return 1; } return 0; } /* This product is 0xc0cfd797, and fits in 32 bits. */ #define GMP_PRIME_PRODUCT \ (3UL*5UL*7UL*11UL*13UL*17UL*19UL*23UL*29UL) /* Bit (p+1)/2 is set, for each odd prime <= 61 */ #define GMP_PRIME_MASK 0xc96996dcUL int mpz_probab_prime_p (const mpz_t n, int reps) { mpz_t nm1; mpz_t q; mpz_t y; mp_bitcnt_t k; int is_prime; int j; /* Note that we use the absolute value of n only, for compatibility with the real GMP. */ if (mpz_even_p (n)) return (mpz_cmpabs_ui (n, 2) == 0) ? 2 : 0; /* Above test excludes n == 0 */ assert (n->_mp_size != 0); if (mpz_cmpabs_ui (n, 64) < 0) return (GMP_PRIME_MASK >> (n->_mp_d[0] >> 1)) & 2; if (mpz_gcd_ui (NULL, n, GMP_PRIME_PRODUCT) != 1) return 0; /* All prime factors are >= 31. */ if (mpz_cmpabs_ui (n, 31*31) < 0) return 2; mpz_init (nm1); mpz_init (q); /* Find q and k, where q is odd and n = 1 + 2**k * q. */ mpz_abs (nm1, n); nm1->_mp_d[0] -= 1; /* Count trailing zeros, equivalent to mpn_scan1, because we know that there is a 1 */ k = mpn_scan1 (nm1->_mp_d, 0); mpz_tdiv_q_2exp (q, nm1, k); /* BPSW test */ mpz_init_set_ui (y, 2); is_prime = gmp_millerrabin (n, nm1, y, q, k) && gmp_stronglucas (n, y); reps -= 24; /* skip the first 24 repetitions */ /* Use Miller-Rabin, with a deterministic sequence of bases, a[j] = j^2 + j + 41 using Euler's polynomial. We potentially stop early, if a[j] >= n - 1. Since n >= 31*31, this can happen only if reps > 30 (a[30] == 971 > 31*31 == 961). */ for (j = 0; is_prime & (j < reps); j++) { mpz_set_ui (y, (unsigned long) j*j+j+41); if (mpz_cmp (y, nm1) >= 0) { /* Don't try any further bases. This "early" break does not affect the result for any reasonable reps value (<=5000 was tested) */ assert (j >= 30); break; } is_prime = gmp_millerrabin (n, nm1, y, q, k); } mpz_clear (nm1); mpz_clear (q); mpz_clear (y); return is_prime; } /* Logical operations and bit manipulation. */ /* Numbers are treated as if represented in two's complement (and infinitely sign extended). For a negative values we get the two's complement from -x = ~x + 1, where ~ is bitwise complement. Negation transforms xxxx10...0 into yyyy10...0 where yyyy is the bitwise complement of xxxx. So least significant bits, up to and including the first one bit, are unchanged, and the more significant bits are all complemented. To change a bit from zero to one in a negative number, subtract the corresponding power of two from the absolute value. This can never underflow. To change a bit from one to zero, add the corresponding power of two, and this might overflow. E.g., if x = -001111, the two's complement is 110001. Clearing the least significant bit, we get two's complement 110000, and -010000. */ int mpz_tstbit (const mpz_t d, mp_bitcnt_t bit_index) { mp_size_t limb_index; unsigned shift; mp_size_t ds; mp_size_t dn; mp_limb_t w; int bit; ds = d->_mp_size; dn = GMP_ABS (ds); limb_index = bit_index / GMP_LIMB_BITS; if (limb_index >= dn) return ds < 0; shift = bit_index % GMP_LIMB_BITS; w = d->_mp_d[limb_index]; bit = (w >> shift) & 1; if (ds < 0) { /* d < 0. Check if any of the bits below is set: If so, our bit must be complemented. */ if (shift > 0 && (mp_limb_t) (w << (GMP_LIMB_BITS - shift)) > 0) return bit ^ 1; while (--limb_index >= 0) if (d->_mp_d[limb_index] > 0) return bit ^ 1; } return bit; } static void mpz_abs_add_bit (mpz_t d, mp_bitcnt_t bit_index) { mp_size_t dn, limb_index; mp_limb_t bit; mp_ptr dp; dn = GMP_ABS (d->_mp_size); limb_index = bit_index / GMP_LIMB_BITS; bit = (mp_limb_t) 1 << (bit_index % GMP_LIMB_BITS); if (limb_index >= dn) { mp_size_t i; /* The bit should be set outside of the end of the number. We have to increase the size of the number. */ dp = MPZ_REALLOC (d, limb_index + 1); dp[limb_index] = bit; for (i = dn; i < limb_index; i++) dp[i] = 0; dn = limb_index + 1; } else { mp_limb_t cy; dp = d->_mp_d; cy = mpn_add_1 (dp + limb_index, dp + limb_index, dn - limb_index, bit); if (cy > 0) { dp = MPZ_REALLOC (d, dn + 1); dp[dn++] = cy; } } d->_mp_size = (d->_mp_size < 0) ? - dn : dn; } static void mpz_abs_sub_bit (mpz_t d, mp_bitcnt_t bit_index) { mp_size_t dn, limb_index; mp_ptr dp; mp_limb_t bit; dn = GMP_ABS (d->_mp_size); dp = d->_mp_d; limb_index = bit_index / GMP_LIMB_BITS; bit = (mp_limb_t) 1 << (bit_index % GMP_LIMB_BITS); assert (limb_index < dn); gmp_assert_nocarry (mpn_sub_1 (dp + limb_index, dp + limb_index, dn - limb_index, bit)); dn = mpn_normalized_size (dp, dn); d->_mp_size = (d->_mp_size < 0) ? - dn : dn; } void mpz_setbit (mpz_t d, mp_bitcnt_t bit_index) { if (!mpz_tstbit (d, bit_index)) { if (d->_mp_size >= 0) mpz_abs_add_bit (d, bit_index); else mpz_abs_sub_bit (d, bit_index); } } void mpz_clrbit (mpz_t d, mp_bitcnt_t bit_index) { if (mpz_tstbit (d, bit_index)) { if (d->_mp_size >= 0) mpz_abs_sub_bit (d, bit_index); else mpz_abs_add_bit (d, bit_index); } } void mpz_combit (mpz_t d, mp_bitcnt_t bit_index) { if (mpz_tstbit (d, bit_index) ^ (d->_mp_size < 0)) mpz_abs_sub_bit (d, bit_index); else mpz_abs_add_bit (d, bit_index); } void mpz_com (mpz_t r, const mpz_t u) { mpz_add_ui (r, u, 1); mpz_neg (r, r); } void mpz_and (mpz_t r, const mpz_t u, const mpz_t v) { mp_size_t un, vn, rn, i; mp_ptr up, vp, rp; mp_limb_t ux, vx, rx; mp_limb_t uc, vc, rc; mp_limb_t ul, vl, rl; un = GMP_ABS (u->_mp_size); vn = GMP_ABS (v->_mp_size); if (un < vn) { MPZ_SRCPTR_SWAP (u, v); MP_SIZE_T_SWAP (un, vn); } if (vn == 0) { r->_mp_size = 0; return; } uc = u->_mp_size < 0; vc = v->_mp_size < 0; rc = uc & vc; ux = -uc; vx = -vc; rx = -rc; /* If the smaller input is positive, higher limbs don't matter. */ rn = vx ? un : vn; rp = MPZ_REALLOC (r, rn + (mp_size_t) rc); up = u->_mp_d; vp = v->_mp_d; i = 0; do { ul = (up[i] ^ ux) + uc; uc = ul < uc; vl = (vp[i] ^ vx) + vc; vc = vl < vc; rl = ( (ul & vl) ^ rx) + rc; rc = rl < rc; rp[i] = rl; } while (++i < vn); assert (vc == 0); for (; i < rn; i++) { ul = (up[i] ^ ux) + uc; uc = ul < uc; rl = ( (ul & vx) ^ rx) + rc; rc = rl < rc; rp[i] = rl; } if (rc) rp[rn++] = rc; else rn = mpn_normalized_size (rp, rn); r->_mp_size = rx ? -rn : rn; } void mpz_ior (mpz_t r, const mpz_t u, const mpz_t v) { mp_size_t un, vn, rn, i; mp_ptr up, vp, rp; mp_limb_t ux, vx, rx; mp_limb_t uc, vc, rc; mp_limb_t ul, vl, rl; un = GMP_ABS (u->_mp_size); vn = GMP_ABS (v->_mp_size); if (un < vn) { MPZ_SRCPTR_SWAP (u, v); MP_SIZE_T_SWAP (un, vn); } if (vn == 0) { mpz_set (r, u); return; } uc = u->_mp_size < 0; vc = v->_mp_size < 0; rc = uc | vc; ux = -uc; vx = -vc; rx = -rc; /* If the smaller input is negative, by sign extension higher limbs don't matter. */ rn = vx ? vn : un; rp = MPZ_REALLOC (r, rn + (mp_size_t) rc); up = u->_mp_d; vp = v->_mp_d; i = 0; do { ul = (up[i] ^ ux) + uc; uc = ul < uc; vl = (vp[i] ^ vx) + vc; vc = vl < vc; rl = ( (ul | vl) ^ rx) + rc; rc = rl < rc; rp[i] = rl; } while (++i < vn); assert (vc == 0); for (; i < rn; i++) { ul = (up[i] ^ ux) + uc; uc = ul < uc; rl = ( (ul | vx) ^ rx) + rc; rc = rl < rc; rp[i] = rl; } if (rc) rp[rn++] = rc; else rn = mpn_normalized_size (rp, rn); r->_mp_size = rx ? -rn : rn; } void mpz_xor (mpz_t r, const mpz_t u, const mpz_t v) { mp_size_t un, vn, i; mp_ptr up, vp, rp; mp_limb_t ux, vx, rx; mp_limb_t uc, vc, rc; mp_limb_t ul, vl, rl; un = GMP_ABS (u->_mp_size); vn = GMP_ABS (v->_mp_size); if (un < vn) { MPZ_SRCPTR_SWAP (u, v); MP_SIZE_T_SWAP (un, vn); } if (vn == 0) { mpz_set (r, u); return; } uc = u->_mp_size < 0; vc = v->_mp_size < 0; rc = uc ^ vc; ux = -uc; vx = -vc; rx = -rc; rp = MPZ_REALLOC (r, un + (mp_size_t) rc); up = u->_mp_d; vp = v->_mp_d; i = 0; do { ul = (up[i] ^ ux) + uc; uc = ul < uc; vl = (vp[i] ^ vx) + vc; vc = vl < vc; rl = (ul ^ vl ^ rx) + rc; rc = rl < rc; rp[i] = rl; } while (++i < vn); assert (vc == 0); for (; i < un; i++) { ul = (up[i] ^ ux) + uc; uc = ul < uc; rl = (ul ^ ux) + rc; rc = rl < rc; rp[i] = rl; } if (rc) rp[un++] = rc; else un = mpn_normalized_size (rp, un); r->_mp_size = rx ? -un : un; } static unsigned gmp_popcount_limb (mp_limb_t x) { unsigned c; /* Do 16 bits at a time, to avoid limb-sized constants. */ int LOCAL_SHIFT_BITS = 16; for (c = 0; x > 0;) { unsigned w = x - ((x >> 1) & 0x5555); w = ((w >> 2) & 0x3333) + (w & 0x3333); w = (w >> 4) + w; w = ((w >> 8) & 0x000f) + (w & 0x000f); c += w; if (GMP_LIMB_BITS > LOCAL_SHIFT_BITS) x >>= LOCAL_SHIFT_BITS; else x = 0; } return c; } mp_bitcnt_t mpn_popcount (mp_srcptr p, mp_size_t n) { mp_size_t i; mp_bitcnt_t c; for (c = 0, i = 0; i < n; i++) c += gmp_popcount_limb (p[i]); return c; } mp_bitcnt_t mpz_popcount (const mpz_t u) { mp_size_t un; un = u->_mp_size; if (un < 0) return ~(mp_bitcnt_t) 0; return mpn_popcount (u->_mp_d, un); } mp_bitcnt_t mpz_hamdist (const mpz_t u, const mpz_t v) { mp_size_t un, vn, i; mp_limb_t uc, vc, ul, vl, comp; mp_srcptr up, vp; mp_bitcnt_t c; un = u->_mp_size; vn = v->_mp_size; if ( (un ^ vn) < 0) return ~(mp_bitcnt_t) 0; comp = - (uc = vc = (un < 0)); if (uc) { assert (vn < 0); un = -un; vn = -vn; } up = u->_mp_d; vp = v->_mp_d; if (un < vn) MPN_SRCPTR_SWAP (up, un, vp, vn); for (i = 0, c = 0; i < vn; i++) { ul = (up[i] ^ comp) + uc; uc = ul < uc; vl = (vp[i] ^ comp) + vc; vc = vl < vc; c += gmp_popcount_limb (ul ^ vl); } assert (vc == 0); for (; i < un; i++) { ul = (up[i] ^ comp) + uc; uc = ul < uc; c += gmp_popcount_limb (ul ^ comp); } return c; } mp_bitcnt_t mpz_scan1 (const mpz_t u, mp_bitcnt_t starting_bit) { mp_ptr up; mp_size_t us, un, i; mp_limb_t limb, ux; us = u->_mp_size; un = GMP_ABS (us); i = starting_bit / GMP_LIMB_BITS; /* Past the end there's no 1 bits for u>=0, or an immediate 1 bit for u<0. Notice this test picks up any u==0 too. */ if (i >= un) return (us >= 0 ? ~(mp_bitcnt_t) 0 : starting_bit); up = u->_mp_d; ux = 0; limb = up[i]; if (starting_bit != 0) { if (us < 0) { ux = mpn_zero_p (up, i); limb = ~ limb + ux; ux = - (mp_limb_t) (limb >= ux); } /* Mask to 0 all bits before starting_bit, thus ignoring them. */ limb &= GMP_LIMB_MAX << (starting_bit % GMP_LIMB_BITS); } return mpn_common_scan (limb, i, up, un, ux); } mp_bitcnt_t mpz_scan0 (const mpz_t u, mp_bitcnt_t starting_bit) { mp_ptr up; mp_size_t us, un, i; mp_limb_t limb, ux; us = u->_mp_size; ux = - (mp_limb_t) (us >= 0); un = GMP_ABS (us); i = starting_bit / GMP_LIMB_BITS; /* When past end, there's an immediate 0 bit for u>=0, or no 0 bits for u<0. Notice this test picks up all cases of u==0 too. */ if (i >= un) return (ux ? starting_bit : ~(mp_bitcnt_t) 0); up = u->_mp_d; limb = up[i] ^ ux; if (ux == 0) limb -= mpn_zero_p (up, i); /* limb = ~(~limb + zero_p) */ /* Mask all bits before starting_bit, thus ignoring them. */ limb &= GMP_LIMB_MAX << (starting_bit % GMP_LIMB_BITS); return mpn_common_scan (limb, i, up, un, ux); } /* MPZ base conversion. */ size_t mpz_sizeinbase (const mpz_t u, int base) { mp_size_t un, tn; mp_srcptr up; mp_ptr tp; mp_bitcnt_t bits; struct gmp_div_inverse bi; size_t ndigits; assert (base >= 2); assert (base <= 62); un = GMP_ABS (u->_mp_size); if (un == 0) return 1; up = u->_mp_d; bits = (un - 1) * GMP_LIMB_BITS + mpn_limb_size_in_base_2 (up[un-1]); switch (base) { case 2: return bits; case 4: return (bits + 1) / 2; case 8: return (bits + 2) / 3; case 16: return (bits + 3) / 4; case 32: return (bits + 4) / 5; /* FIXME: Do something more clever for the common case of base 10. */ } tp = gmp_alloc_limbs (un); mpn_copyi (tp, up, un); mpn_div_qr_1_invert (&bi, base); tn = un; ndigits = 0; do { ndigits++; mpn_div_qr_1_preinv (tp, tp, tn, &bi); tn -= (tp[tn-1] == 0); } while (tn > 0); gmp_free_limbs (tp, un); return ndigits; } char * mpz_get_str (char *sp, int base, const mpz_t u) { unsigned bits; const char *digits; mp_size_t un; size_t i, sn, osn; digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; if (base > 1) { if (base <= 36) digits = "0123456789abcdefghijklmnopqrstuvwxyz"; else if (base > 62) return NULL; } else if (base >= -1) base = 10; else { base = -base; if (base > 36) return NULL; } sn = 1 + mpz_sizeinbase (u, base); if (!sp) { osn = 1 + sn; sp = (char *) gmp_alloc (osn); } else osn = 0; un = GMP_ABS (u->_mp_size); if (un == 0) { sp[0] = '0'; sn = 1; goto ret; } i = 0; if (u->_mp_size < 0) sp[i++] = '-'; bits = mpn_base_power_of_two_p (base); if (bits) /* Not modified in this case. */ sn = i + mpn_get_str_bits ((unsigned char *) sp + i, bits, u->_mp_d, un); else { struct mpn_base_info info; mp_ptr tp; mpn_get_base_info (&info, base); tp = gmp_alloc_limbs (un); mpn_copyi (tp, u->_mp_d, un); sn = i + mpn_get_str_other ((unsigned char *) sp + i, base, &info, tp, un); gmp_free_limbs (tp, un); } for (; i < sn; i++) sp[i] = digits[(unsigned char) sp[i]]; ret: sp[sn] = '\0'; if (osn && osn != sn + 1) sp = (char*) gmp_realloc (sp, osn, sn + 1); return sp; } int mpz_set_str (mpz_t r, const char *sp, int base) { unsigned bits, value_of_a; mp_size_t rn, alloc; mp_ptr rp; size_t dn, sn; int sign; unsigned char *dp; assert (base == 0 || (base >= 2 && base <= 62)); while (isspace( (unsigned char) *sp)) sp++; sign = (*sp == '-'); sp += sign; if (base == 0) { if (sp[0] == '0') { if (sp[1] == 'x' || sp[1] == 'X') { base = 16; sp += 2; } else if (sp[1] == 'b' || sp[1] == 'B') { base = 2; sp += 2; } else base = 8; } else base = 10; } if (!*sp) { r->_mp_size = 0; return -1; } sn = strlen(sp); dp = (unsigned char *) gmp_alloc (sn); value_of_a = (base > 36) ? 36 : 10; for (dn = 0; *sp; sp++) { unsigned digit; if (isspace ((unsigned char) *sp)) continue; else if (*sp >= '0' && *sp <= '9') digit = *sp - '0'; else if (*sp >= 'a' && *sp <= 'z') digit = *sp - 'a' + value_of_a; else if (*sp >= 'A' && *sp <= 'Z') digit = *sp - 'A' + 10; else digit = base; /* fail */ if (digit >= (unsigned) base) { gmp_free (dp, sn); r->_mp_size = 0; return -1; } dp[dn++] = digit; } if (!dn) { gmp_free (dp, sn); r->_mp_size = 0; return -1; } bits = mpn_base_power_of_two_p (base); if (bits > 0) { alloc = (dn * bits + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; rp = MPZ_REALLOC (r, alloc); rn = mpn_set_str_bits (rp, dp, dn, bits); } else { struct mpn_base_info info; mpn_get_base_info (&info, base); alloc = (dn + info.exp - 1) / info.exp; rp = MPZ_REALLOC (r, alloc); rn = mpn_set_str_other (rp, dp, dn, base, &info); /* Normalization, needed for all-zero input. */ assert (rn > 0); rn -= rp[rn-1] == 0; } assert (rn <= alloc); gmp_free (dp, sn); r->_mp_size = sign ? - rn : rn; return 0; } int mpz_init_set_str (mpz_t r, const char *sp, int base) { mpz_init (r); return mpz_set_str (r, sp, base); } size_t mpz_out_str (FILE *stream, int base, const mpz_t x) { char *str; size_t len, n; str = mpz_get_str (NULL, base, x); if (!str) return 0; len = strlen (str); n = fwrite (str, 1, len, stream); gmp_free (str, len + 1); return n; } static int gmp_detect_endian (void) { static const int i = 2; const unsigned char *p = (const unsigned char *) &i; return 1 - *p; } /* Import and export. Does not support nails. */ void mpz_import (mpz_t r, size_t count, int order, size_t size, int endian, size_t nails, const void *src) { const unsigned char *p; ptrdiff_t word_step; mp_ptr rp; mp_size_t rn; /* The current (partial) limb. */ mp_limb_t limb; /* The number of bytes already copied to this limb (starting from the low end). */ size_t bytes; /* The index where the limb should be stored, when completed. */ mp_size_t i; if (nails != 0) gmp_die ("mpz_import: Nails not supported."); assert (order == 1 || order == -1); assert (endian >= -1 && endian <= 1); if (endian == 0) endian = gmp_detect_endian (); p = (unsigned char *) src; word_step = (order != endian) ? 2 * size : 0; /* Process bytes from the least significant end, so point p at the least significant word. */ if (order == 1) { p += size * (count - 1); word_step = - word_step; } /* And at least significant byte of that word. */ if (endian == 1) p += (size - 1); rn = (size * count + sizeof(mp_limb_t) - 1) / sizeof(mp_limb_t); rp = MPZ_REALLOC (r, rn); for (limb = 0, bytes = 0, i = 0; count > 0; count--, p += word_step) { size_t j; for (j = 0; j < size; j++, p -= (ptrdiff_t) endian) { limb |= (mp_limb_t) *p << (bytes++ * CHAR_BIT); if (bytes == sizeof(mp_limb_t)) { rp[i++] = limb; bytes = 0; limb = 0; } } } assert (i + (bytes > 0) == rn); if (limb != 0) rp[i++] = limb; else i = mpn_normalized_size (rp, i); r->_mp_size = i; } void * mpz_export (void *r, size_t *countp, int order, size_t size, int endian, size_t nails, const mpz_t u) { size_t count; mp_size_t un; if (nails != 0) gmp_die ("mpz_export: Nails not supported."); assert (order == 1 || order == -1); assert (endian >= -1 && endian <= 1); assert (size > 0 || u->_mp_size == 0); un = u->_mp_size; count = 0; if (un != 0) { size_t k; unsigned char *p; ptrdiff_t word_step; /* The current (partial) limb. */ mp_limb_t limb; /* The number of bytes left to do in this limb. */ size_t bytes; /* The index where the limb was read. */ mp_size_t i; un = GMP_ABS (un); /* Count bytes in top limb. */ limb = u->_mp_d[un-1]; assert (limb != 0); k = (GMP_LIMB_BITS <= CHAR_BIT); if (!k) { do { int LOCAL_CHAR_BIT = CHAR_BIT; k++; limb >>= LOCAL_CHAR_BIT; } while (limb != 0); } /* else limb = 0; */ count = (k + (un-1) * sizeof (mp_limb_t) + size - 1) / size; if (!r) r = gmp_alloc (count * size); if (endian == 0) endian = gmp_detect_endian (); p = (unsigned char *) r; word_step = (order != endian) ? 2 * size : 0; /* Process bytes from the least significant end, so point p at the least significant word. */ if (order == 1) { p += size * (count - 1); word_step = - word_step; } /* And at least significant byte of that word. */ if (endian == 1) p += (size - 1); for (bytes = 0, i = 0, k = 0; k < count; k++, p += word_step) { size_t j; for (j = 0; j < size; ++j, p -= (ptrdiff_t) endian) { if (sizeof (mp_limb_t) == 1) { if (i < un) *p = u->_mp_d[i++]; else *p = 0; } else { int LOCAL_CHAR_BIT = CHAR_BIT; if (bytes == 0) { if (i < un) limb = u->_mp_d[i++]; bytes = sizeof (mp_limb_t); } *p = limb; limb >>= LOCAL_CHAR_BIT; bytes--; } } } assert (i == un); assert (k == count); } if (countp) *countp = count; return r; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mini-gmp.h��������������������������������������������������������������0000664�0000000�0000000�00000026756�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mini-gmp, a minimalistic implementation of a GNU GMP subset. Copyright 2011-2015, 2017, 2019-2021 Free Software Foundation, Inc. This file is part of the GNU MP Library. The GNU MP Library is free software; you can redistribute it and/or modify it under the terms of either: * 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. or * the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. or both in parallel, as here. The GNU MP 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 General Public License for more details. You should have received copies of the GNU General Public License and the GNU Lesser General Public License along with the GNU MP Library. If not, see https://www.gnu.org/licenses/. */ /* About mini-gmp: This is a minimal implementation of a subset of the GMP interface. It is intended for inclusion into applications which have modest bignums needs, as a fallback when the real GMP library is not installed. This file defines the public interface. */ #ifndef __MINI_GMP_H__ #define __MINI_GMP_H__ /* For size_t */ #include <stddef.h> #if defined (__cplusplus) extern "C" { #endif void mp_set_memory_functions (void *(*) (size_t), void *(*) (void *, size_t, size_t), void (*) (void *, size_t)); void mp_get_memory_functions (void *(**) (size_t), void *(**) (void *, size_t, size_t), void (**) (void *, size_t)); #ifndef MINI_GMP_LIMB_TYPE #define MINI_GMP_LIMB_TYPE long #endif typedef unsigned MINI_GMP_LIMB_TYPE mp_limb_t; typedef long mp_size_t; typedef unsigned long mp_bitcnt_t; typedef mp_limb_t *mp_ptr; typedef const mp_limb_t *mp_srcptr; typedef struct { int _mp_alloc; /* Number of *limbs* allocated and pointed to by the _mp_d field. */ int _mp_size; /* abs(_mp_size) is the number of limbs the last field points to. If _mp_size is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; typedef __mpz_struct mpz_t[1]; typedef __mpz_struct *mpz_ptr; typedef const __mpz_struct *mpz_srcptr; extern const int mp_bits_per_limb; void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); void mpn_zero (mp_ptr, mp_size_t); int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t); int mpn_zero_p (mp_srcptr, mp_size_t); mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t); int mpn_perfect_square_p (mp_srcptr, mp_size_t); mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t); mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t); void mpn_com (mp_ptr, mp_srcptr, mp_size_t); mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t); mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t); mp_limb_t mpn_invert_3by2 (mp_limb_t, mp_limb_t); #define mpn_invert_limb(x) mpn_invert_3by2 ((x), 0) size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int); void mpz_init (mpz_t); void mpz_init2 (mpz_t, mp_bitcnt_t); void mpz_clear (mpz_t); #define mpz_odd_p(z) (((z)->_mp_size != 0) & (int) (z)->_mp_d[0]) #define mpz_even_p(z) (! mpz_odd_p (z)) int mpz_sgn (const mpz_t); int mpz_cmp_si (const mpz_t, long); int mpz_cmp_ui (const mpz_t, unsigned long); int mpz_cmp (const mpz_t, const mpz_t); int mpz_cmpabs_ui (const mpz_t, unsigned long); int mpz_cmpabs (const mpz_t, const mpz_t); int mpz_cmp_d (const mpz_t, double); int mpz_cmpabs_d (const mpz_t, double); void mpz_abs (mpz_t, const mpz_t); void mpz_neg (mpz_t, const mpz_t); void mpz_swap (mpz_t, mpz_t); void mpz_add_ui (mpz_t, const mpz_t, unsigned long); void mpz_add (mpz_t, const mpz_t, const mpz_t); void mpz_sub_ui (mpz_t, const mpz_t, unsigned long); void mpz_ui_sub (mpz_t, unsigned long, const mpz_t); void mpz_sub (mpz_t, const mpz_t, const mpz_t); void mpz_mul_si (mpz_t, const mpz_t, long int); void mpz_mul_ui (mpz_t, const mpz_t, unsigned long int); void mpz_mul (mpz_t, const mpz_t, const mpz_t); void mpz_mul_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_addmul_ui (mpz_t, const mpz_t, unsigned long int); void mpz_addmul (mpz_t, const mpz_t, const mpz_t); void mpz_submul_ui (mpz_t, const mpz_t, unsigned long int); void mpz_submul (mpz_t, const mpz_t, const mpz_t); void mpz_cdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); void mpz_fdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); void mpz_tdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t); void mpz_cdiv_q (mpz_t, const mpz_t, const mpz_t); void mpz_fdiv_q (mpz_t, const mpz_t, const mpz_t); void mpz_tdiv_q (mpz_t, const mpz_t, const mpz_t); void mpz_cdiv_r (mpz_t, const mpz_t, const mpz_t); void mpz_fdiv_r (mpz_t, const mpz_t, const mpz_t); void mpz_tdiv_r (mpz_t, const mpz_t, const mpz_t); void mpz_cdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_fdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_tdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_cdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_fdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_tdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t); void mpz_mod (mpz_t, const mpz_t, const mpz_t); void mpz_divexact (mpz_t, const mpz_t, const mpz_t); int mpz_divisible_p (const mpz_t, const mpz_t); int mpz_congruent_p (const mpz_t, const mpz_t, const mpz_t); unsigned long mpz_cdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); unsigned long mpz_fdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); unsigned long mpz_tdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long); unsigned long mpz_cdiv_q_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_fdiv_q_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_tdiv_q_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_cdiv_r_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_fdiv_r_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_tdiv_r_ui (mpz_t, const mpz_t, unsigned long); unsigned long mpz_cdiv_ui (const mpz_t, unsigned long); unsigned long mpz_fdiv_ui (const mpz_t, unsigned long); unsigned long mpz_tdiv_ui (const mpz_t, unsigned long); unsigned long mpz_mod_ui (mpz_t, const mpz_t, unsigned long); void mpz_divexact_ui (mpz_t, const mpz_t, unsigned long); int mpz_divisible_ui_p (const mpz_t, unsigned long); unsigned long mpz_gcd_ui (mpz_t, const mpz_t, unsigned long); void mpz_gcd (mpz_t, const mpz_t, const mpz_t); void mpz_gcdext (mpz_t, mpz_t, mpz_t, const mpz_t, const mpz_t); void mpz_lcm_ui (mpz_t, const mpz_t, unsigned long); void mpz_lcm (mpz_t, const mpz_t, const mpz_t); int mpz_invert (mpz_t, const mpz_t, const mpz_t); void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t); void mpz_sqrt (mpz_t, const mpz_t); int mpz_perfect_square_p (const mpz_t); void mpz_pow_ui (mpz_t, const mpz_t, unsigned long); void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long); void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t); void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t); void mpz_rootrem (mpz_t, mpz_t, const mpz_t, unsigned long); int mpz_root (mpz_t, const mpz_t, unsigned long); void mpz_fac_ui (mpz_t, unsigned long); void mpz_2fac_ui (mpz_t, unsigned long); void mpz_mfac_uiui (mpz_t, unsigned long, unsigned long); void mpz_bin_uiui (mpz_t, unsigned long, unsigned long); int mpz_probab_prime_p (const mpz_t, int); int mpz_tstbit (const mpz_t, mp_bitcnt_t); void mpz_setbit (mpz_t, mp_bitcnt_t); void mpz_clrbit (mpz_t, mp_bitcnt_t); void mpz_combit (mpz_t, mp_bitcnt_t); void mpz_com (mpz_t, const mpz_t); void mpz_and (mpz_t, const mpz_t, const mpz_t); void mpz_ior (mpz_t, const mpz_t, const mpz_t); void mpz_xor (mpz_t, const mpz_t, const mpz_t); mp_bitcnt_t mpz_popcount (const mpz_t); mp_bitcnt_t mpz_hamdist (const mpz_t, const mpz_t); mp_bitcnt_t mpz_scan0 (const mpz_t, mp_bitcnt_t); mp_bitcnt_t mpz_scan1 (const mpz_t, mp_bitcnt_t); int mpz_fits_slong_p (const mpz_t); int mpz_fits_ulong_p (const mpz_t); int mpz_fits_sint_p (const mpz_t); int mpz_fits_uint_p (const mpz_t); int mpz_fits_sshort_p (const mpz_t); int mpz_fits_ushort_p (const mpz_t); long int mpz_get_si (const mpz_t); unsigned long int mpz_get_ui (const mpz_t); double mpz_get_d (const mpz_t); size_t mpz_size (const mpz_t); mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t); void mpz_realloc2 (mpz_t, mp_bitcnt_t); mp_srcptr mpz_limbs_read (mpz_srcptr); mp_ptr mpz_limbs_modify (mpz_t, mp_size_t); mp_ptr mpz_limbs_write (mpz_t, mp_size_t); void mpz_limbs_finish (mpz_t, mp_size_t); mpz_srcptr mpz_roinit_n (mpz_t, mp_srcptr, mp_size_t); #define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }} void mpz_set_si (mpz_t, signed long int); void mpz_set_ui (mpz_t, unsigned long int); void mpz_set (mpz_t, const mpz_t); void mpz_set_d (mpz_t, double); void mpz_init_set_si (mpz_t, signed long int); void mpz_init_set_ui (mpz_t, unsigned long int); void mpz_init_set (mpz_t, const mpz_t); void mpz_init_set_d (mpz_t, double); size_t mpz_sizeinbase (const mpz_t, int); char *mpz_get_str (char *, int, const mpz_t); int mpz_set_str (mpz_t, const char *, int); int mpz_init_set_str (mpz_t, const char *, int); /* This long list taken from gmp.h. */ /* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, <iostream> defines EOF but not FILE. */ #if defined (FILE) \ || defined (H_STDIO) \ || defined (_H_STDIO) /* AIX */ \ || defined (_STDIO_H) /* glibc, Sun, SCO */ \ || defined (_STDIO_H_) /* BSD, OSF */ \ || defined (__STDIO_H) /* Borland */ \ || defined (__STDIO_H__) /* IRIX */ \ || defined (_STDIO_INCLUDED) /* HPUX */ \ || defined (__dj_include_stdio_h_) /* DJGPP */ \ || defined (_FILE_DEFINED) /* Microsoft */ \ || defined (__STDIO__) /* Apple MPW MrC */ \ || defined (_MSL_STDIO_H) /* Metrowerks */ \ || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ || defined (__STDIO_LOADED) /* VMS */ \ || defined (_STDIO) /* HPE NonStop */ \ || defined (__DEFINED_FILE) /* musl */ size_t mpz_out_str (FILE *, int, const mpz_t); #endif void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *); void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t); #if defined (__cplusplus) } #endif #endif /* __MINI_GMP_H__ */ ������������������gnulib-20210822~d383792/lib/minmax.h����������������������������������������������������������������0000664�0000000�0000000�00000004532�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2021 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/>. */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in <sys/param.h> on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* Before we define the following symbols we get the <limits.h> file since otherwise we get redefinitions on some systems if <limits.h> is included after this file. Likewise for <sys/param.h>. If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include <limits.h> #elif HAVE_MINMAX_IN_SYS_PARAM_H # include <sys/param.h> #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkancesdirs.c�����������������������������������������������������������0000664�0000000�0000000�00000011657�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make a file's ancestor directories. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "mkancesdirs.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include "filename.h" #include "savewd.h" /* Ensure that the ancestor directories of FILE exist, using an algorithm that should work even if two processes execute this function in parallel. Modify FILE as necessary to access the ancestor directories, but restore FILE to an equivalent value if successful. WD points to the working directory, using the conventions of savewd. Create any ancestor directories that don't already exist, by invoking MAKE_DIR (FILE, COMPONENT, MAKE_DIR_ARG). This function should return 0 if successful, -1 (setting errno) otherwise. If COMPONENT is relative, it is relative to the temporary working directory, which may differ from *WD. Ordinarily MAKE_DIR is executed with the working directory changed to reflect the already-made prefix, and mkancesdirs returns with the working directory changed a prefix of FILE. However, if the initial working directory cannot be saved in a file descriptor, MAKE_DIR is invoked in a subprocess and this function returns in both the parent and child process, so the caller should not assume any changed state survives other than the EXITMAX component of WD, and the caller should take care that the parent does not attempt to do the work that the child is doing. If successful and if this process can go ahead and create FILE, return the length of the prefix of FILE that has already been made. If successful so far but a child process is doing the actual work, return -2. If unsuccessful, return -1 and set errno. */ ptrdiff_t mkancesdirs (char *file, struct savewd *wd, int (*make_dir) (char const *, char const *, void *), void *make_dir_arg) { /* Address of the previous directory separator that follows an ordinary byte in a file name in the left-to-right scan, or NULL if no such separator precedes the current location P. */ char *sep = NULL; /* Address of the leftmost file name component that has not yet been processed. */ char *component = file; char *p = file + FILE_SYSTEM_PREFIX_LEN (file); char c; bool made_dir = false; /* Scan forward through FILE, creating and chdiring into directories along the way. Try MAKE_DIR before chdir, so that the procedure works even when two or more processes are executing it in parallel. Isolate each file name component by having COMPONENT point to its start and SEP point just after its end. */ while ((c = *p++)) if (ISSLASH (*p)) { if (! ISSLASH (c)) sep = p; } else if (ISSLASH (c) && *p && sep) { /* Don't bother to make or test for "." since it does not affect the algorithm. */ if (! (sep - component == 1 && component[0] == '.')) { int make_dir_errno = 0; int savewd_chdir_options = 0; int chdir_result; /* Temporarily modify FILE to isolate this file name component. */ *sep = '\0'; /* Invoke MAKE_DIR on this component, except don't bother with ".." since it must exist if its "parent" does. */ if (sep - component == 2 && component[0] == '.' && component[1] == '.') made_dir = false; else if (make_dir (file, component, make_dir_arg) < 0) make_dir_errno = errno; else made_dir = true; if (made_dir) savewd_chdir_options |= SAVEWD_CHDIR_NOFOLLOW; chdir_result = savewd_chdir (wd, component, savewd_chdir_options, NULL); /* Undo the temporary modification to FILE, unless there was a failure. */ if (chdir_result != -1) *sep = '/'; if (chdir_result != 0) { if (make_dir_errno != 0 && errno == ENOENT) errno = make_dir_errno; return chdir_result; } } component = p; } return component - file; } ���������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkancesdirs.h�����������������������������������������������������������0000664�0000000�0000000�00000002017�14110572173�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ensure the existence of the ancestor directories of a file. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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 Paul Eggert, 2006. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif struct savewd; ptrdiff_t mkancesdirs (char *, struct savewd *, int (*) (char const *, char const *, void *), void *); #ifdef __cplusplus } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkdir-p.c���������������������������������������������������������������0000664�0000000�0000000�00000016526�14110572173�0016566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mkdir-p.c -- Ensure that a directory and its parents exist. Copyright (C) 1990, 1997-2000, 2002-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert, David MacKenzie, and Jim Meyering. */ #include <config.h> #include "mkdir-p.h" #include <errno.h> #include <sys/stat.h> #include <unistd.h> #include "gettext.h" #define _(msgid) gettext (msgid) #include "dirchownmod.h" #include "dirname.h" #include "error.h" #include "quote.h" #include "mkancesdirs.h" #include "savewd.h" #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false #endif /* Ensure that the directory DIR exists. WD is the working directory, as in savewd.c. If MAKE_ANCESTOR is not null, create any ancestor directories that don't already exist, by invoking MAKE_ANCESTOR (DIR, ANCESTOR, OPTIONS). This function should return zero if successful, -1 (setting errno) otherwise. In this case, DIR may be modified by storing '\0' bytes into it, to access the ancestor directories, and this modification is retained on return if the ancestor directories could not be created. Create DIR as a new directory, using mkdir with permissions MODE; here, MODE is affected by the umask in the usual way. It is also OK if MAKE_ANCESTOR is not null and a directory DIR already exists. Call ANNOUNCE (DIR, OPTIONS) just after successfully making DIR, even if some of the following actions fail. Set DIR's owner to OWNER and group to GROUP, but leave the owner alone if OWNER is (uid_t) -1, and similarly for GROUP. Set DIR's mode bits to MODE, except preserve any of the bits that correspond to zero bits in MODE_BITS. In other words, MODE_BITS is a mask that specifies which of DIR's mode bits should be set or cleared. Changing the mode in this way is necessary if DIR already existed, if MODE and MODE_BITS specify non-permissions bits like S_ISUID, or if MODE and MODE_BITS specify permissions bits that are masked out by the umask. MODE_BITS should be a subset of CHMOD_MODE_BITS. However, if PRESERVE_EXISTING is true and DIR already exists, do not attempt to set DIR's ownership and file mode bits. Return true if DIR exists as a directory with the proper ownership and file mode bits when done, or if a child process has been dispatched to do the real work (though the child process may not have finished yet -- it is the caller's responsibility to handle this). Report a diagnostic and return false on failure, storing '\0' into *DIR if an ancestor directory had problems. */ bool make_dir_parents (char *dir, struct savewd *wd, int (*make_ancestor) (char const *, char const *, void *), void *options, mode_t mode, void (*announce) (char const *, void *), mode_t mode_bits, uid_t owner, gid_t group, bool preserve_existing) { int mkdir_errno = (IS_ABSOLUTE_FILE_NAME (dir) ? 0 : savewd_errno (wd)); if (mkdir_errno == 0) { ptrdiff_t prefix_len = 0; int savewd_chdir_options = (HAVE_FCHMOD ? SAVEWD_CHDIR_SKIP_READABLE : 0); if (make_ancestor) { prefix_len = mkancesdirs (dir, wd, make_ancestor, options); if (prefix_len < 0) { if (prefix_len < -1) return true; mkdir_errno = errno; } } if (0 <= prefix_len) { /* If the ownership might change, or if the directory will be writable to other users and its special mode bits may change after the directory is created, create it with more restrictive permissions at first, so unauthorized users cannot nip in before the directory is ready. */ bool keep_owner = owner == (uid_t) -1 && group == (gid_t) -1; bool keep_special_mode_bits = ((mode_bits & (S_ISUID | S_ISGID)) | (mode & S_ISVTX)) == 0; mode_t mkdir_mode = mode; if (! keep_owner) mkdir_mode &= ~ (S_IRWXG | S_IRWXO); else if (! keep_special_mode_bits) mkdir_mode &= ~ (S_IWGRP | S_IWOTH); if (mkdir (dir + prefix_len, mkdir_mode) == 0) { /* True if the caller does not care about the umask's effect on the permissions. */ bool umask_must_be_ok = (mode & mode_bits & S_IRWXUGO) == 0; announce (dir, options); preserve_existing = (keep_owner & keep_special_mode_bits & umask_must_be_ok); savewd_chdir_options |= SAVEWD_CHDIR_NOFOLLOW; } else { mkdir_errno = errno; mkdir_mode = -1; } if (preserve_existing) { if (mkdir_errno == 0) return true; if (mkdir_errno != ENOENT && make_ancestor) { struct stat st; if (stat (dir + prefix_len, &st) == 0) { if (S_ISDIR (st.st_mode)) return true; } else if (mkdir_errno == EEXIST && errno != ENOENT && errno != ENOTDIR) { error (0, errno, _("cannot stat %s"), quote (dir)); return false; } } } else { int open_result[2]; int chdir_result = savewd_chdir (wd, dir + prefix_len, savewd_chdir_options, open_result); if (chdir_result < -1) return true; else { bool chdir_ok = (chdir_result == 0); char const *subdir = (chdir_ok ? "." : dir + prefix_len); if (dirchownmod (open_result[0], subdir, mkdir_mode, owner, group, mode, mode_bits) == 0) return true; if (mkdir_errno == 0 || (mkdir_errno != ENOENT && make_ancestor && errno != ENOTDIR)) { error (0, errno, _(keep_owner ? "cannot change permissions of %s" : "cannot change owner and permissions of %s"), quote (dir)); return false; } } } } } error (0, mkdir_errno, _("cannot create directory %s"), quote (dir)); return false; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkdir-p.h���������������������������������������������������������������0000664�0000000�0000000�00000002627�14110572173�0016570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mkdir-p.h -- Ensure that a directory and its parents exist. Copyright (C) 1994-1997, 2000, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert, David MacKenzie, and Jim Meyering. */ #include <stdbool.h> #include <sys/types.h> struct savewd; bool make_dir_parents (char *dir, struct savewd *wd, int (*make_ancestor) (char const *, char const *, void *), void *options, mode_t mode, void (*announce) (char const *, void *), mode_t mode_bits, uid_t owner, gid_t group, bool preserve_existing); ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkdir.c�����������������������������������������������������������������0000664�0000000�0000000�00000005237�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. On those systems, this wrapper removes the trailing slash. Copyright (C) 2001, 2003, 2006, 2008-2021 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "dirname.h" /* Disable the definition of mkdir to rpl_mkdir (from the <sys/stat.h> substitute) in this file. Otherwise, we'd get an endless recursion. */ #undef mkdir /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included in the <sys/stat.h> override. */ #if defined _WIN32 && ! defined __CYGWIN__ # define mkdir(name,mode) _mkdir (name) # define maybe_unused _GL_UNUSED #else # define maybe_unused /* empty */ #endif /* This function is required at least for NetBSD 1.5.2. */ int rpl_mkdir (char const *dir, maybe_unused mode_t mode) { int ret_val; char *tmp_dir; size_t len = strlen (dir); if (len && dir[len - 1] == '/') { tmp_dir = strdup (dir); if (!tmp_dir) { /* Rather than rely on strdup-posix, we set errno ourselves. */ errno = ENOMEM; return -1; } strip_trailing_slashes (tmp_dir); } else { tmp_dir = (char *) dir; } #if FUNC_MKDIR_DOT_BUG /* Additionally, cygwin 1.5 mistakenly creates a directory "d/./". */ { char *last = last_component (tmp_dir); if (*last == '.' && (last[1] == '\0' || (last[1] == '.' && last[2] == '\0'))) { struct stat st; if (stat (tmp_dir, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } } #endif /* FUNC_MKDIR_DOT_BUG */ ret_val = mkdir (tmp_dir, mode); if (tmp_dir != dir) free (tmp_dir); return ret_val; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkdirat.c���������������������������������������������������������������0000664�0000000�0000000�00000002607�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fd-relative mkdir Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <stdlib.h> #include <unistd.h> /* Solaris 10 has no function like this. Create a subdirectory, FILE, with mode MODE, in the directory open on descriptor FD. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then mkdir/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ #define AT_FUNC_NAME mkdirat #define AT_FUNC_F1 mkdir #define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode #define AT_FUNC_POST_FILE_ARGS , mode #include "at-func.c" �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkdtemp.c���������������������������������������������������������������0000664�0000000�0000000�00000002476�14110572173�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2021 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/>. */ /* Extracted from misc/mkdtemp.c. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include "tempname.h" /* Generate a unique temporary directory from XTEMPLATE. The last six characters of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the filename unique. The directory is created, mode 700, and its name is returned. (This function comes from OpenBSD.) */ char * mkdtemp (char *xtemplate) { if (gen_tempname (xtemplate, 0, 0, GT_DIR)) return NULL; else return xtemplate; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkfifo.c����������������������������������������������������������������0000664�0000000�0000000�00000002750�14110572173�0016470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a named fifo. Copyright (C) 2009-2021 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 Eric Blake */ #include <config.h> #include <sys/stat.h> #include <errno.h> #include <string.h> #if !HAVE_MKFIFO /* Mingw lacks mkfifo; always fail with ENOSYS. */ int mkfifo (_GL_UNUSED char const *name, _GL_UNUSED mode_t mode) { errno = ENOSYS; return -1; } #else /* HAVE_MKFIFO */ # undef mkfifo /* Create a named fifo FILE, with access permissions in MODE. Work around trailing slash bugs. */ int rpl_mkfifo (char const *name, mode_t mode) { # if MKFIFO_TRAILING_SLASH_BUG size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (stat (name, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } # endif return mkfifo (name, mode); } #endif /* HAVE_MKFIFO */ ������������������������gnulib-20210822~d383792/lib/mkfifoat.c��������������������������������������������������������������0000664�0000000�0000000�00000005012�14110572173�0017007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a named fifo relative to an open directory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <stdlib.h> #if HAVE_MKFIFOAT # include <errno.h> # include <fcntl.h> # include <string.h> int rpl_mkfifoat (int fd, char const *file, mode_t mode) #undef mkfifoat { /* Use the original mkfifoat(), but correct the trailing slash handling. */ size_t len = strlen (file); if (len && file[len - 1] == '/') { struct stat st; if (fstatat (fd, file, &st, AT_SYMLINK_NOFOLLOW) < 0) { if (errno == EOVERFLOW) /* It's surely a file, not a directory. */ errno = ENOTDIR; } else { /* It's a directory, otherwise fstatat() would have reported an error ENOTDIR. */ errno = EEXIST; } return -1; } return mkfifoat (fd, file, mode); } #else # if !HAVE_MKFIFO # include <errno.h> /* Mingw lacks mkfifo, so this wrapper is trivial. */ int mkfifoat (_GL_UNUSED int fd, _GL_UNUSED char const *path, _GL_UNUSED mode_t mode) { errno = ENOSYS; return -1; } # else /* HAVE_MKFIFO */ /* Create a named fifo FILE relative to directory FD, with access permissions in MODE. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then mkfifo/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ # define AT_FUNC_NAME mkfifoat # define AT_FUNC_F1 mkfifo # define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode # define AT_FUNC_POST_FILE_ARGS , mode # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # endif /* HAVE_MKFIFO */ #endif /* HAVE_MKFIFOAT */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mknod.c�����������������������������������������������������������������0000664�0000000�0000000�00000004200�14110572173�0016315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a device inode. Copyright (C) 2009-2021 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 Eric Blake */ #include <config.h> #include <sys/stat.h> #include <errno.h> #include <string.h> #if !HAVE_MKNOD /* Mingw lacks mknod; always fail with ENOSYS. */ int mknod (_GL_UNUSED char const *name, _GL_UNUSED mode_t mode, _GL_UNUSED dev_t dev) { errno = ENOSYS; return -1; } #else /* HAVE_MKNOD */ # undef mknod /* Create a file system node FILE, with access permissions and file type in MODE, and device type in DEV. Usually, non-root applications can only create named fifos (mode includes S_IFIFO), with DEV set to 0. Also work around trailing slash bugs. */ int rpl_mknod (char const *name, mode_t mode, dev_t dev) { # if MKFIFO_TRAILING_SLASH_BUG /* Trailing slash only makes sense for directories. Of course, using mknod to create a directory is not very portable, so it may still fail later on. */ if (!S_ISDIR (mode)) { size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (stat (name, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } } # endif # if MKNOD_FIFO_BUG /* POSIX requires mknod to create fifos for non-privileged processes, but BSD implementations fail with EPERM. */ if (S_ISFIFO (mode) && dev == 0) return mkfifo (name, mode & ~S_IFIFO); # endif return mknod (name, mode, dev); } #endif /* HAVE_MKNOD */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mknodat.c���������������������������������������������������������������0000664�0000000�0000000�00000005203�14110572173�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create an inode relative to an open directory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <stdlib.h> #if HAVE_MKNODAT # include <errno.h> # include <fcntl.h> # include <string.h> int rpl_mknodat (int fd, char const *file, mode_t mode, dev_t dev) #undef mknodat { /* Use the original mknodat(), but correct the trailing slash handling. */ size_t len = strlen (file); if (len && file[len - 1] == '/') { struct stat st; if (fstatat (fd, file, &st, AT_SYMLINK_NOFOLLOW) < 0) { if (errno == EOVERFLOW) /* It's surely a file, not a directory. */ errno = ENOTDIR; } else { /* It's a directory, otherwise fstatat() would have reported an error ENOTDIR. */ errno = EEXIST; } return -1; } return mknodat (fd, file, mode, dev); } #else # if !HAVE_MKNOD # include <errno.h> /* Mingw lacks mknod, so this wrapper is trivial. */ int mknodat (_GL_UNUSED int fd, _GL_UNUSED char const *path, _GL_UNUSED mode_t mode, _GL_UNUSED dev_t dev) { errno = ENOSYS; return -1; } # else /* Create a file system node FILE relative to directory FD, with access permissions and file type in MODE, and device type in DEV. Usually, non-root applications can only create named fifos, with DEV set to 0. If possible, create the node without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then mknod/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ # define AT_FUNC_NAME mknodat # define AT_FUNC_F1 mknod # define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode, dev_t dev # define AT_FUNC_POST_FILE_ARGS , mode, dev # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkostemp.c��������������������������������������������������������������0000664�0000000�0000000�00000002574�14110572173�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is derived from the one in 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/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GTFILE # define __GT_FILE GT_FILE # endif #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. Then open the file and return a fd. */ int mkostemp (char *xtemplate, int flags) { return __gen_tempname (xtemplate, 0, flags, __GT_FILE); } ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkostemps.c�������������������������������������������������������������0000664�0000000�0000000�00000003100�14110572173�0017225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is derived from the one in 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/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include <errno.h> # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GT_FILE # define __GT_FILE GT_FILE # endif # define __set_errno(x) errno = x; #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters before a suffix of length SUFFIXLEN of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the filename unique. Then open the file and return a fd. */ int mkostemps (char *xtemplate, int suffixlen, int flags) { if (suffixlen < 0) { __set_errno (EINVAL); return -1; } return __gen_tempname (xtemplate, suffixlen, flags, __GT_FILE); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkstemp-safer.c���������������������������������������������������������0000664�0000000�0000000�00000003324�14110572173�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke mkstemp, but avoid some glitches. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "stdlib-safer.h" #include <stdlib.h> #include "unistd-safer.h" /* Like mkstemp, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int mkstemp_safer (char *templ) { return fd_safer (mkstemp (templ)); } #if GNULIB_MKOSTEMP /* Like mkostemp, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int mkostemp_safer (char *templ, int flags) { return fd_safer_flag (mkostemp (templ, flags), flags); } #endif #if GNULIB_MKOSTEMPS /* Like mkostemps, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int mkostemps_safer (char *templ, int suffixlen, int flags) { return fd_safer_flag (mkostemps (templ, suffixlen, flags), flags); } #endif #if GNULIB_MKSTEMPS /* Like mkstemps, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int mkstemps_safer (char *templ, int suffixlen) { return fd_safer (mkstemps (templ, suffixlen)); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkstemp.c���������������������������������������������������������������0000664�0000000�0000000�00000003027�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is derived from the one in 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/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GT_FILE # define __GT_FILE GT_FILE # endif #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. Then open the file and return a fd. If you are creating temporary files which will later be removed, consider using the clean-temp module, which avoids several pitfalls of using mkstemp directly. */ int mkstemp (char *xtemplate) { return __gen_tempname (xtemplate, 0, 0, __GT_FILE); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mkstemps.c��������������������������������������������������������������0000664�0000000�0000000�00000003060�14110572173�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is derived from the one in 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/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include <errno.h> # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GT_FILE # define __GT_FILE GT_FILE # endif # define __set_errno(x) errno = x; #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters before a suffix of length SUFFIXLEN of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the filename unique. Then open the file and return a fd. */ int mkstemps (char *xtemplate, int suffixlen) { if (suffixlen < 0) { __set_errno (EINVAL); return -1; } return __gen_tempname (xtemplate, suffixlen, 0, __GT_FILE); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mktime-internal.h�������������������������������������������������������0000664�0000000�0000000�00000006061�14110572173�0020321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals of mktime and related functions Copyright 2016-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@cs.ucla.edu>. 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 _LIBC # include <time.h> #endif /* mktime_offset_t is a signed type wide enough to hold a UTC offset in seconds, and used as part of the type of the offset-guess argument to mktime_internal. In Glibc, it is always long int. When in Gnulib, use time_t on platforms where time_t is signed, to be compatible with platforms like BeOS that export this implementation detail of mktime. On platforms where time_t is unsigned, GNU and POSIX code can assume 'int' is at least 32 bits which is wide enough for a UTC offset. */ #ifdef _LIBC typedef long int mktime_offset_t; #elif defined TIME_T_IS_SIGNED typedef time_t mktime_offset_t; #else typedef int mktime_offset_t; #endif /* The source code uses identifiers like __time64_t for glibc timestamps that can contain 64-bit values even when time_t is only 32 bits. These are just macros for the ordinary identifiers unless compiling within glibc when time_t is 32 bits. */ #if ! (defined _LIBC && __TIMESIZE != 64) # undef __time64_t # define __time64_t time_t # define __gmtime64_r __gmtime_r # define __localtime64_r __localtime_r # define __mktime64 mktime # define __timegm64 timegm #endif #ifndef _LIBC /* Although glibc source code uses leading underscores, Gnulib wants ordinary names. Portable standalone applications should supply a <time.h> that declares a POSIX-compliant localtime_r, for the benefit of older implementations that lack localtime_r or have a nonstandard one. Similarly for gmtime_r. See the gnulib time_r module for one way to implement this. */ # undef __gmtime_r # undef __localtime_r # define __gmtime_r gmtime_r # define __localtime_r localtime_r # define __mktime_internal mktime_internal #endif /* Subroutine of mktime. Return the time_t representation of TP and normalize TP, given that a struct tm * maps to a time_t as performed by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */ extern __time64_t __mktime_internal (struct tm *tp, struct tm *(*func) (__time64_t const *, struct tm *), mktime_offset_t *offset) attribute_hidden; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mktime.c����������������������������������������������������������������0000664�0000000�0000000�00000044245�14110572173�0016510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a 'struct tm' to a time_t value. Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.com>. 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/>. */ /* The following macros influence what gets defined when this file is compiled: Macro/expression Which gnulib module This compilation unit should define _LIBC (glibc proper) mktime NEED_MKTIME_WORKING mktime rpl_mktime || NEED_MKTIME_WINDOWS NEED_MKTIME_INTERNAL mktime-internal mktime_internal */ #ifndef _LIBC # include <libc-config.h> #endif /* Assume that leap seconds are possible, unless told otherwise. If the host has a 'zic' command with a '-L leapsecondfilename' option, then it supports leap seconds; otherwise it probably doesn't. */ #ifndef LEAP_SECONDS_POSSIBLE # define LEAP_SECONDS_POSSIBLE 1 #endif #include <time.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <intprops.h> #include <verify.h> #ifndef NEED_MKTIME_INTERNAL # define NEED_MKTIME_INTERNAL 0 #endif #ifndef NEED_MKTIME_WINDOWS # define NEED_MKTIME_WINDOWS 0 #endif #ifndef NEED_MKTIME_WORKING # define NEED_MKTIME_WORKING 0 #endif #include "mktime-internal.h" #if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS) static void my_tzset (void) { # if NEED_MKTIME_WINDOWS /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); # else tzset (); # endif } # undef __tzset # define __tzset() my_tzset () #endif #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL /* A signed type that can represent an integer number of years multiplied by four times the number of seconds in a year. It is needed when converting a tm_year value times the number of seconds in a year. The factor of four comes because these products need to be subtracted from each other, and sometimes with an offset added to them, and then with another timestamp added, without worrying about overflow. Much of the code uses long_int to represent __time64_t values, to lessen the hassle of dealing with platforms where __time64_t is unsigned, and because long_int should suffice to represent all __time64_t values that mktime can generate even on platforms where __time64_t is wider than the int components of struct tm. */ #if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60 typedef long int long_int; #else typedef long long int long_int; #endif verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60); /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. B should be in the range 0 <= B <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful bits in a long_int. LONG_INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ static long_int shr (long_int a, int b) { long_int one = 1; return (-one >> 1 == -1 ? a >> b : (a + (a < 0)) / (one << b) - (a < 0)); } /* Bounds for the intersection of __time64_t and long_int. */ static long_int const mktime_min = ((TYPE_SIGNED (__time64_t) && TYPE_MINIMUM (__time64_t) < TYPE_MINIMUM (long_int)) ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (__time64_t)); static long_int const mktime_max = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t) ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t)); #define EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 verify (TM_YEAR_BASE % 100 == 0); /* Is YEAR + TM_YEAR_BASE a leap year? */ static bool leapyear (long_int year) { /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. Also, work even if YEAR is negative. */ return ((year & 3) == 0 && (year % 100 != 0 || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); } /* How many days come before each month (0-12). */ #ifndef _LIBC static #endif const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /* Do the values A and B differ according to the rules for tm_isdst? A and B differ if one is zero and the other positive. */ static bool isdst_differ (int a, int b) { return (!a != !b) && (0 <= a) && (0 <= b); } /* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks were not adjusted between the timestamps. The YEAR values uses the same numbering as TP->tm_year. Values need not be in the usual range. However, YEAR1 - YEAR0 must not overflow even when multiplied by three times the number of seconds in a year, and likewise for YDAY1 - YDAY0 and three times the number of seconds in a day. */ static long_int ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, int year0, int yday0, int hour0, int min0, int sec0) { verify (-1 / 2 == 0); /* Compute intervening leap days correctly even if year is negative. Take care to avoid integer overflow here. */ int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = shr (a100, 2); int b400 = shr (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); /* Compute the desired time without overflowing. */ long_int years = year1 - year0; long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; long_int hours = 24 * days + hour1 - hour0; long_int minutes = 60 * hours + min1 - min0; long_int seconds = 60 * minutes + sec1 - sec0; return seconds; } /* Return the average of A and B, even if A + B would overflow. Round toward positive infinity. */ static long_int long_int_avg (long_int a, long_int b) { return shr (a, 1) + shr (b, 1) + ((a | b) & 1); } /* Return a long_int value corresponding to (YEAR-YDAY HOUR:MIN:SEC) minus *TP seconds, assuming no clock adjustments occurred between the two timestamps. YEAR and YDAY must not be so large that multiplying them by three times the number of seconds in a year (or day, respectively) would overflow long_int. *TP should be in the usual range. */ static long_int tm_diff (long_int year, long_int yday, int hour, int min, int sec, struct tm const *tp) { return ydhms_diff (year, yday, hour, min, sec, tp->tm_year, tp->tm_yday, tp->tm_hour, tp->tm_min, tp->tm_sec); } /* Use CONVERT to convert T to a struct tm value in *TM. T must be in range for __time64_t. Return TM if successful, NULL (setting errno) on failure. */ static struct tm * convert_time (struct tm *(*convert) (const __time64_t *, struct tm *), long_int t, struct tm *tm) { __time64_t x = t; return convert (&x, tm); } /* Use CONVERT to convert *T to a broken down time in *TP. If *T is out of range for conversion, adjust it so that it is the nearest in-range value and then convert that. A value is in range if it fits in both __time64_t and long_int. Return TP on success, NULL (setting errno) on failure. */ static struct tm * ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *), long_int *t, struct tm *tp) { long_int t1 = (*t < mktime_min ? mktime_min : *t <= mktime_max ? *t : mktime_max); struct tm *r = convert_time (convert, t1, tp); if (r) { *t = t1; return r; } if (errno != EOVERFLOW) return NULL; long_int bad = t1; long_int ok = 0; struct tm oktm; oktm.tm_sec = -1; /* BAD is a known out-of-range value, and OK is a known in-range one. Use binary search to narrow the range between BAD and OK until they differ by 1. */ while (true) { long_int mid = long_int_avg (ok, bad); if (mid == ok || mid == bad) break; if (convert_time (convert, mid, tp)) ok = mid, oktm = *tp; else if (errno != EOVERFLOW) return NULL; else bad = mid; } if (oktm.tm_sec < 0) return NULL; *t = ok; *tp = oktm; return tp; } /* Convert *TP to a __time64_t value, inverting the monotonic and mostly-unit-linear conversion function CONVERT. Use *OFFSET to keep track of a guess at the offset of the result, compared to what the result would be for UTC without leap seconds. If *OFFSET's guess is correct, only one CONVERT call is needed. If successful, set *TP to the canonicalized struct tm; otherwise leave *TP alone, return ((time_t) -1) and set errno. This function is external because it is used also by timegm.c. */ __time64_t __mktime_internal (struct tm *tp, struct tm *(*convert) (const __time64_t *, struct tm *), mktime_offset_t *offset) { struct tm tm; /* The maximum number of probes (calls to CONVERT) should be enough to handle any combinations of time zone rule changes, solar time, leap seconds, and oscillations around a spring-forward gap. POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ int remaining_probes = 6; /* Time requested. Copy it in case CONVERT modifies *TP; this can occur if TP is localtime's returned value and CONVERT is localtime. */ int sec = tp->tm_sec; int min = tp->tm_min; int hour = tp->tm_hour; int mday = tp->tm_mday; int mon = tp->tm_mon; int year_requested = tp->tm_year; int isdst = tp->tm_isdst; /* 1 if the previous probe was DST. */ int dst2 = 0; /* Ensure that mon is in range, and set year accordingly. */ int mon_remainder = mon % 12; int negative_mon_remainder = mon_remainder < 0; int mon_years = mon / 12 - negative_mon_remainder; long_int lyear_requested = year_requested; long_int year = lyear_requested + mon_years; /* The other values need not be in range: the remaining code handles overflows correctly. */ /* Calculate day of year from year, month, and day of month. The result need not be in range. */ int mon_yday = ((__mon_yday[leapyear (year)] [mon_remainder + 12 * negative_mon_remainder]) - 1); long_int lmday = mday; long_int yday = mon_yday + lmday; mktime_offset_t off = *offset; int negative_offset_guess; int sec_requested = sec; if (LEAP_SECONDS_POSSIBLE) { /* Handle out-of-range seconds specially, since ydhms_diff assumes every minute has 60 seconds. */ if (sec < 0) sec = 0; if (59 < sec) sec = 59; } /* Invert CONVERT by probing. First assume the same offset as last time. */ INT_SUBTRACT_WRAPV (0, off, &negative_offset_guess); long_int t0 = ydhms_diff (year, yday, hour, min, sec, EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess); long_int t = t0, t1 = t0, t2 = t0; /* Repeatedly use the error to improve the guess. */ while (true) { if (! ranged_convert (convert, &t, &tm)) return -1; long_int dt = tm_diff (year, yday, hour, min, sec, &tm); if (dt == 0) break; if (t == t1 && t != t2 && (tm.tm_isdst < 0 || (isdst < 0 ? dst2 <= (tm.tm_isdst != 0) : (isdst != 0) != (tm.tm_isdst != 0)))) /* We can't possibly find a match, as we are oscillating between two values. The requested time probably falls within a spring-forward gap of size DT. Follow the common practice in this case, which is to return a time that is DT away from the requested time, preferring a time whose tm_isdst differs from the requested value. (If no tm_isdst was requested and only one of the two values has a nonzero tm_isdst, prefer that value.) In practice, this is more useful than returning -1. */ goto offset_found; remaining_probes--; if (remaining_probes == 0) { __set_errno (EOVERFLOW); return -1; } t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0; } /* We have a match. Check whether tm.tm_isdst has the requested value, if any. */ if (isdst_differ (isdst, tm.tm_isdst)) { /* tm.tm_isdst has the wrong value. Look for a neighboring time with the right value, and use its UTC offset. Heuristic: probe the adjacent timestamps in both directions, looking for the desired isdst. This should work for all real time zone histories in the tz database. */ /* Distance between probes when looking for a DST boundary. In tzdata2003a, the shortest period of DST is 601200 seconds (e.g., America/Recife starting 2000-10-08 01:00), and the shortest period of non-DST surrounded by DST is 694800 seconds (Africa/Tunis starting 1943-04-17 01:00). Use the minimum of these two values, so we don't miss these short periods when probing. */ int stride = 601200; /* The longest period of DST in tzdata2003a is 536454000 seconds (e.g., America/Jujuy starting 1946-10-01 01:00). The longest period of non-DST is much longer, but it makes no real sense to search for more than a year of non-DST, so use the DST max. */ int duration_max = 536454000; /* Search in both directions, so the maximum distance is half the duration; add the stride to avoid off-by-1 problems. */ int delta_bound = duration_max / 2 + stride; int delta, direction; for (delta = stride; delta < delta_bound; delta += stride) for (direction = -1; direction <= 1; direction += 2) { long_int ot; if (! INT_ADD_WRAPV (t, delta * direction, &ot)) { struct tm otm; if (! ranged_convert (convert, &ot, &otm)) return -1; if (! isdst_differ (isdst, otm.tm_isdst)) { /* We found the desired tm_isdst. Extrapolate back to the desired time. */ long_int gt = ot + tm_diff (year, yday, hour, min, sec, &otm); if (mktime_min <= gt && gt <= mktime_max) { if (convert_time (convert, gt, &tm)) { t = gt; goto offset_found; } if (errno != EOVERFLOW) return -1; } } } } __set_errno (EOVERFLOW); return -1; } offset_found: /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. This is just a heuristic to speed up the next mktime call, and correctness is unaffected if integer overflow occurs here. */ INT_SUBTRACT_WRAPV (t, t0, offset); INT_SUBTRACT_WRAPV (*offset, negative_offset_guess, offset); if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) { /* Adjust time to reflect the tm_sec requested, not the normalized value. Also, repair any damage from a false match due to a leap second. */ long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; sec_adjustment -= sec; sec_adjustment += sec_requested; if (INT_ADD_WRAPV (t, sec_adjustment, &t) || ! (mktime_min <= t && t <= mktime_max)) { __set_errno (EOVERFLOW); return -1; } if (! convert_time (convert, t, &tm)) return -1; } *tp = tm; return t; } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL */ #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS /* Convert *TP to a __time64_t value. */ __time64_t __mktime64 (struct tm *tp) { /* POSIX.1 8.1.1 requires that whenever mktime() is called, the time zone names contained in the external variable 'tzname' shall be set as if the tzset() function had been called. */ __tzset (); # if defined _LIBC || NEED_MKTIME_WORKING static mktime_offset_t localtime_offset; return __mktime_internal (tp, __localtime64_r, &localtime_offset); # else # undef mktime return mktime (tp); # endif } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */ #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__mktime64) time_t mktime (struct tm *tp) { struct tm tm = *tp; __time64_t t = __mktime64 (&tm); if (in_time_t_range (t)) { *tp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif weak_alias (mktime, timelocal) libc_hidden_def (mktime) libc_hidden_weak (timelocal) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/modechange.c������������������������������������������������������������0000664�0000000�0000000�00000031435�14110572173�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* modechange.c -- file mode manipulation Copyright (C) 1989-1990, 1997-1999, 2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@ai.mit.edu> */ /* The ASCII mode string is compiled into an array of 'struct modechange', which can then be applied to each file to be changed. We do this instead of re-parsing the ASCII string for each file because the compiled form requires less computation to use; when changing the mode of many files, this probably results in a performance gain. */ #include <config.h> #include "modechange.h" #include <sys/stat.h> #include "stat-macros.h" #include "xalloc.h" #include <stdlib.h> /* The traditional octal values corresponding to each mode bit. */ #define SUID 04000 #define SGID 02000 #define SVTX 01000 #define RUSR 00400 #define WUSR 00200 #define XUSR 00100 #define RGRP 00040 #define WGRP 00020 #define XGRP 00010 #define ROTH 00004 #define WOTH 00002 #define XOTH 00001 #define ALLM 07777 /* all octal mode bits */ /* Convert OCTAL, which uses one of the traditional octal values, to an internal mode_t value. */ static mode_t octal_to_mode (unsigned int octal) { /* Help the compiler optimize the usual case where mode_t uses the traditional octal representation. */ return ((S_ISUID == SUID && S_ISGID == SGID && S_ISVTX == SVTX && S_IRUSR == RUSR && S_IWUSR == WUSR && S_IXUSR == XUSR && S_IRGRP == RGRP && S_IWGRP == WGRP && S_IXGRP == XGRP && S_IROTH == ROTH && S_IWOTH == WOTH && S_IXOTH == XOTH) ? octal : (mode_t) ((octal & SUID ? S_ISUID : 0) | (octal & SGID ? S_ISGID : 0) | (octal & SVTX ? S_ISVTX : 0) | (octal & RUSR ? S_IRUSR : 0) | (octal & WUSR ? S_IWUSR : 0) | (octal & XUSR ? S_IXUSR : 0) | (octal & RGRP ? S_IRGRP : 0) | (octal & WGRP ? S_IWGRP : 0) | (octal & XGRP ? S_IXGRP : 0) | (octal & ROTH ? S_IROTH : 0) | (octal & WOTH ? S_IWOTH : 0) | (octal & XOTH ? S_IXOTH : 0))); } /* Special operations flags. */ enum { /* For the sentinel at the end of the mode changes array. */ MODE_DONE, /* The typical case. */ MODE_ORDINARY_CHANGE, /* In addition to the typical case, affect the execute bits if at least one execute bit is set already, or if the file is a directory. */ MODE_X_IF_ANY_X, /* Instead of the typical case, copy some existing permissions for u, g, or o onto the other two. Which of u, g, or o is copied is determined by which bits are set in the 'value' field. */ MODE_COPY_EXISTING }; /* Description of a mode change. */ struct mode_change { char op; /* One of "=+-". */ char flag; /* Special operations flag. */ mode_t affected; /* Set for u, g, o, or a. */ mode_t value; /* Bits to add/remove. */ mode_t mentioned; /* Bits explicitly mentioned. */ }; /* Return a mode_change array with the specified "=ddd"-style mode change operation, where NEW_MODE is "ddd" and MENTIONED contains the bits explicitly mentioned in the mode are MENTIONED. */ static struct mode_change * make_node_op_equals (mode_t new_mode, mode_t mentioned) { struct mode_change *p = xmalloc (2 * sizeof *p); p->op = '='; p->flag = MODE_ORDINARY_CHANGE; p->affected = CHMOD_MODE_BITS; p->value = new_mode; p->mentioned = mentioned; p[1].flag = MODE_DONE; return p; } /* Return a pointer to an array of file mode change operations created from MODE_STRING, an ASCII string that contains either an octal number specifying an absolute mode, or symbolic mode change operations with the form: [ugoa...][[+-=][rwxXstugo...]...][,...] Return NULL if 'mode_string' does not contain a valid representation of file mode change operations. */ struct mode_change * mode_compile (char const *mode_string) { /* The array of mode-change directives to be returned. */ struct mode_change *mc; size_t used = 0; char const *p; if ('0' <= *mode_string && *mode_string < '8') { unsigned int octal_mode = 0; mode_t mode; mode_t mentioned; p = mode_string; do { octal_mode = 8 * octal_mode + *p++ - '0'; if (ALLM < octal_mode) return NULL; } while ('0' <= *p && *p < '8'); if (*p) return NULL; mode = octal_to_mode (octal_mode); mentioned = (p - mode_string < 5 ? (mode & (S_ISUID | S_ISGID)) | S_ISVTX | S_IRWXUGO : CHMOD_MODE_BITS); return make_node_op_equals (mode, mentioned); } /* Allocate enough space to hold the result. */ { size_t needed = 1; for (p = mode_string; *p; p++) needed += (*p == '=' || *p == '+' || *p == '-'); mc = xnmalloc (needed, sizeof *mc); } /* One loop iteration for each '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'. */ for (p = mode_string; ; p++) { /* Which bits in the mode are operated on. */ mode_t affected = 0; /* Turn on all the bits in 'affected' for each group given. */ for (;; p++) switch (*p) { default: goto invalid; case 'u': affected |= S_ISUID | S_IRWXU; break; case 'g': affected |= S_ISGID | S_IRWXG; break; case 'o': affected |= S_ISVTX | S_IRWXO; break; case 'a': affected |= CHMOD_MODE_BITS; break; case '=': case '+': case '-': goto no_more_affected; } no_more_affected:; do { char op = *p++; mode_t value; mode_t mentioned = 0; char flag = MODE_COPY_EXISTING; struct mode_change *change; switch (*p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': { unsigned int octal_mode = 0; do { octal_mode = 8 * octal_mode + *p++ - '0'; if (ALLM < octal_mode) goto invalid; } while ('0' <= *p && *p < '8'); if (affected || (*p && *p != ',')) goto invalid; affected = mentioned = CHMOD_MODE_BITS; value = octal_to_mode (octal_mode); flag = MODE_ORDINARY_CHANGE; break; } case 'u': /* Set the affected bits to the value of the "u" bits on the same file. */ value = S_IRWXU; p++; break; case 'g': /* Set the affected bits to the value of the "g" bits on the same file. */ value = S_IRWXG; p++; break; case 'o': /* Set the affected bits to the value of the "o" bits on the same file. */ value = S_IRWXO; p++; break; default: value = 0; flag = MODE_ORDINARY_CHANGE; for (;; p++) switch (*p) { case 'r': value |= S_IRUSR | S_IRGRP | S_IROTH; break; case 'w': value |= S_IWUSR | S_IWGRP | S_IWOTH; break; case 'x': value |= S_IXUSR | S_IXGRP | S_IXOTH; break; case 'X': flag = MODE_X_IF_ANY_X; break; case 's': /* Set the setuid/gid bits if 'u' or 'g' is selected. */ value |= S_ISUID | S_ISGID; break; case 't': /* Set the "save text image" bit if 'o' is selected. */ value |= S_ISVTX; break; default: goto no_more_values; } no_more_values:; } change = &mc[used++]; change->op = op; change->flag = flag; change->affected = affected; change->value = value; change->mentioned = (mentioned ? mentioned : affected ? affected & value : value); } while (*p == '=' || *p == '+' || *p == '-'); if (*p != ',') break; } if (*p == 0) { mc[used].flag = MODE_DONE; return mc; } invalid: free (mc); return NULL; } /* Return a file mode change operation that sets permissions to match those of REF_FILE. Return NULL (setting errno) if REF_FILE can't be accessed. */ struct mode_change * mode_create_from_ref (const char *ref_file) { struct stat ref_stats; if (stat (ref_file, &ref_stats) != 0) return NULL; return make_node_op_equals (ref_stats.st_mode, CHMOD_MODE_BITS); } /* Return the file mode bits of OLDMODE (which is the mode of a directory if DIR), assuming the umask is UMASK_VALUE, adjusted as indicated by the list of change operations CHANGES. If DIR, the type 'X' change affects the returned value even if no execute bits were set in OLDMODE, and set user and group ID bits are preserved unless CHANGES mentioned them. If PMODE_BITS is not null, store into *PMODE_BITS a mask denoting file mode bits that are affected by CHANGES. The returned value and *PMODE_BITS contain only file mode bits. For example, they have the S_IFMT bits cleared on a standard Unix-like host. */ mode_t mode_adjust (mode_t oldmode, bool dir, mode_t umask_value, struct mode_change const *changes, mode_t *pmode_bits) { /* The adjusted mode. */ mode_t newmode = oldmode & CHMOD_MODE_BITS; /* File mode bits that CHANGES cares about. */ mode_t mode_bits = 0; for (; changes->flag != MODE_DONE; changes++) { mode_t affected = changes->affected; mode_t omit_change = (dir ? S_ISUID | S_ISGID : 0) & ~ changes->mentioned; mode_t value = changes->value; switch (changes->flag) { case MODE_ORDINARY_CHANGE: break; case MODE_COPY_EXISTING: /* Isolate in 'value' the bits in 'newmode' to copy. */ value &= newmode; /* Copy the isolated bits to the other two parts. */ value |= ((value & (S_IRUSR | S_IRGRP | S_IROTH) ? S_IRUSR | S_IRGRP | S_IROTH : 0) | (value & (S_IWUSR | S_IWGRP | S_IWOTH) ? S_IWUSR | S_IWGRP | S_IWOTH : 0) | (value & (S_IXUSR | S_IXGRP | S_IXOTH) ? S_IXUSR | S_IXGRP | S_IXOTH : 0)); break; case MODE_X_IF_ANY_X: /* Affect the execute bits if execute bits are already set or if the file is a directory. */ if ((newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) | dir) value |= S_IXUSR | S_IXGRP | S_IXOTH; break; } /* If WHO was specified, limit the change to the affected bits. Otherwise, apply the umask. Either way, omit changes as requested. */ value &= (affected ? affected : ~umask_value) & ~ omit_change; switch (changes->op) { case '=': /* If WHO was specified, preserve the previous values of bits that are not affected by this change operation. Otherwise, clear all the bits. */ { mode_t preserved = (affected ? ~affected : 0) | omit_change; mode_bits |= CHMOD_MODE_BITS & ~preserved; newmode = (newmode & preserved) | value; break; } case '+': mode_bits |= value; newmode |= value; break; case '-': mode_bits |= value; newmode &= ~value; break; } } if (pmode_bits) *pmode_bits = mode_bits; return newmode; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/modechange.h������������������������������������������������������������0000664�0000000�0000000�00000002320�14110572173�0017305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* modechange.h -- definitions for file mode manipulation Copyright (C) 1989-1990, 1997, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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/>. */ #if ! defined MODECHANGE_H_ # define MODECHANGE_H_ # include <stdbool.h> # include <stdlib.h> # include <sys/types.h> struct mode_change *mode_compile (const char *) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; struct mode_change *mode_create_from_ref (const char *) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; mode_t mode_adjust (mode_t, bool, mode_t, struct mode_change const *, mode_t *); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/modf.c������������������������������������������������������������������0000664�0000000�0000000�00000002306�14110572173�0016137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get signed integer and fractional parts of a floating-point number. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> double modf (double x, double *iptr) { if (isfinite (x)) { double integer_part = trunc (x); *iptr = integer_part; return x - integer_part; } else { if (isinf (x)) { *iptr = x; return 1.0 / x; } else /* isnand (x) */ { *iptr = x; return x; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/modff.c�����������������������������������������������������������������0000664�0000000�0000000�00000001735�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get signed integer and fractional parts of a floating-point number. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float modff (float x, float *iptr) { double i; double frac = modf ((double) x, &i); *iptr = (float) i; return (float) frac; } �����������������������������������gnulib-20210822~d383792/lib/modfl.c�����������������������������������������������������������������0000664�0000000�0000000�00000002710�14110572173�0016312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get signed integer and fractional parts of a floating-point number. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double modfl (long double x, long double *iptr) { double integer_part; double fractional_part = modf (x, &integer_part); *iptr = integer_part; return fractional_part; } #else long double modfl (long double x, long double *iptr) { if (isfinite (x)) { long double integer_part = truncl (x); *iptr = integer_part; return x - integer_part; } else { if (isinf (x)) { *iptr = x; return 1.0L / x; } else /* isnanl (x) */ { *iptr = x; return x; } } } #endif ��������������������������������������������������������gnulib-20210822~d383792/lib/monetary.in.h�����������������������������������������������������������0000664�0000000�0000000�00000007312�14110572173�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrapper around <monetary.h>. Copyright (C) 2017-2021 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/>. */ #ifndef _@GUARD_PREFIX@_MONETARY_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_MONETARY_H@ # @INCLUDE_NEXT@ @NEXT_MONETARY_H@ #endif #ifndef _@GUARD_PREFIX@_MONETARY_H #define _@GUARD_PREFIX@_MONETARY_H #if @GNULIB_STRFMON_L@ # if @HAVE_XLOCALE_H@ /* Get locale_t on Mac OS X 10.12. */ # include <xlocale.h> # endif /* Get locale_t on glibc 2.5. */ # include <locale.h> #endif /* Like in <stdio.h>. */ #ifndef _GL_ATTRIBUTE_FORMAT # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ # endif #endif /* _GL_ATTRIBUTE_FORMAT_STRFMON indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_STRFMON(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_strfmon__, formatstring_parameter, first_argument)) #elif __GNUC__ >= 3 # define _GL_ATTRIBUTE_FORMAT_STRFMON(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__strfmon__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_STRFMON(formatstring_parameter, first_argument) /* empty */ #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. */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_STRFMON_L@ /* Converts a monetary value to a string. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strfmon_l.html. */ # if @REPLACE_STRFMON_L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strfmon_l rpl_strfmon_l # endif _GL_FUNCDECL_RPL (strfmon_l, ssize_t, (char *restrict s, size_t maxsize, locale_t locale, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_STRFMON (4, 5) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (strfmon_l, ssize_t, (char *restrict s, size_t maxsize, locale_t locale, const char *restrict format, ...)); # else # if @HAVE_STRFMON_L@ _GL_CXXALIAS_SYS (strfmon_l, ssize_t, (char *restrict s, size_t maxsize, locale_t locale, const char *restrict format, ...)); # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strfmon_l); # endif #elif defined GNULIB_POSIXCHECK # undef strfmon_l # if HAVE_RAW_DECL_STRFMON_L _GL_WARN_ON_USE (strfmon_l, "strfmon_l is buggy on older glibc systems - " "use gnulib module chown for portability"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_MONETARY_H */ #endif /* _@GUARD_PREFIX@_MONETARY_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mountlist.c�������������������������������������������������������������0000664�0000000�0000000�00000076440�14110572173�0017262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mountlist.c -- return a list of mounted file systems Copyright (C) 1991-1992, 1997-2021 Free Software Foundation, Inc. This 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 "mountlist.h" #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include "xalloc.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if MAJOR_IN_MKDEV # include <sys/mkdev.h> #elif MAJOR_IN_SYSMACROS # include <sys/sysmacros.h> #endif #if defined MOUNTED_GETFSSTAT /* OSF/1, also (obsolete) Apple Darwin 1.3 */ # if HAVE_SYS_UCRED_H # include <grp.h> /* needed on OSF V4.0 for definition of NGROUPS, NGROUPS is used as an array dimension in ucred.h */ # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */ # endif # if HAVE_SYS_MOUNT_H # include <sys/mount.h> # endif # if HAVE_SYS_FS_TYPES_H # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */ # endif # if HAVE_STRUCT_FSSTAT_F_FSTYPENAME # define FS_TYPE(Ent) ((Ent).f_fstypename) # else # define FS_TYPE(Ent) mnt_names[(Ent).f_type] # endif #endif /* MOUNTED_GETFSSTAT */ #ifdef MOUNTED_GETMNTENT1 /* glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS */ # include <mntent.h> # include <sys/types.h> # if defined __ANDROID__ /* Android */ /* Bionic versions from between 2014-01-09 and 2015-01-08 define MOUNTED to an incorrect value; older Bionic versions don't define it at all. */ # undef MOUNTED # define MOUNTED "/proc/mounts" # elif !defined MOUNTED # if defined _PATH_MOUNTED /* GNU libc */ # define MOUNTED _PATH_MOUNTED # endif # if defined MNT_MNTTAB /* HP-UX. */ # define MOUNTED MNT_MNTTAB # endif # endif #endif #ifdef MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */ # include <sys/mount.h> #endif #ifdef MOUNTED_GETMNTINFO2 /* NetBSD, Minix */ # include <sys/statvfs.h> #endif #ifdef MOUNTED_FS_STAT_DEV /* Haiku, also (obsolete) BeOS */ # include <fs_info.h> # include <dirent.h> #endif #ifdef MOUNTED_FREAD_FSTYP /* (obsolete) SVR3 */ # include <mnttab.h> # include <sys/fstyp.h> # include <sys/statfs.h> #endif #ifdef MOUNTED_GETEXTMNTENT /* Solaris >= 8 */ # include <sys/mnttab.h> #endif #ifdef MOUNTED_GETMNTENT2 /* Solaris < 8, also (obsolete) SVR4 */ # include <sys/mnttab.h> #endif #ifdef MOUNTED_VMOUNT /* AIX */ # include <fshelp.h> # include <sys/vfs.h> #endif #ifdef MOUNTED_INTERIX_STATVFS /* Interix */ # include <sys/statvfs.h> # include <dirent.h> #endif #if HAVE_SYS_MNTENT_H /* This is to get MNTOPT_IGNORE on e.g. SVR4. */ # include <sys/mntent.h> #endif #ifdef MOUNTED_GETMNTENT1 # if !HAVE_SETMNTENT /* Android <= 4.4 */ # define setmntent(fp,mode) fopen (fp, mode "e") # endif # if !HAVE_ENDMNTENT /* Android <= 4.4 */ # define endmntent(fp) fclose (fp) # endif #endif #ifndef HAVE_HASMNTOPT # define hasmntopt(mnt, opt) ((char *) 0) #endif #undef MNT_IGNORE #ifdef MNTOPT_IGNORE # if defined __sun && defined __SVR4 /* Solaris defines hasmntopt(struct mnttab *, char *) while it is otherwise hasmntopt(struct mnttab *, const char *). */ # define MNT_IGNORE(M) hasmntopt (M, (char *) MNTOPT_IGNORE) # else # define MNT_IGNORE(M) hasmntopt (M, MNTOPT_IGNORE) # endif #else # define MNT_IGNORE(M) 0 #endif /* Each of the FILE streams in this file is only used in a single thread. */ #include "unlocked-io.h" /* The results of opendir() in this file are not used with dirfd and fchdir, therefore save some unnecessary work in fchdir.c. */ #ifdef GNULIB_defined_opendir # undef opendir #endif #ifdef GNULIB_defined_closedir # undef closedir #endif #define ME_DUMMY_0(Fs_name, Fs_type) \ (strcmp (Fs_type, "autofs") == 0 \ || strcmp (Fs_type, "proc") == 0 \ || strcmp (Fs_type, "subfs") == 0 \ /* for Linux 2.6/3.x */ \ || strcmp (Fs_type, "debugfs") == 0 \ || strcmp (Fs_type, "devpts") == 0 \ || strcmp (Fs_type, "fusectl") == 0 \ || strcmp (Fs_type, "fuse.portal") == 0 \ || strcmp (Fs_type, "mqueue") == 0 \ || strcmp (Fs_type, "rpc_pipefs") == 0 \ || strcmp (Fs_type, "sysfs") == 0 \ /* FreeBSD, Linux 2.4 */ \ || strcmp (Fs_type, "devfs") == 0 \ /* for NetBSD 3.0 */ \ || strcmp (Fs_type, "kernfs") == 0 \ /* for Irix 6.5 */ \ || strcmp (Fs_type, "ignore") == 0) /* Historically, we have marked as "dummy" any file system of type "none", but now that programs like du need to know about bind-mounted directories, we grant an exception to any with "bind" in its list of mount options. I.e., those are *not* dummy entries. */ #ifdef MOUNTED_GETMNTENT1 # define ME_DUMMY(Fs_name, Fs_type, Bind) \ (ME_DUMMY_0 (Fs_name, Fs_type) \ || (strcmp (Fs_type, "none") == 0 && !Bind)) #else # define ME_DUMMY(Fs_name, Fs_type) \ (ME_DUMMY_0 (Fs_name, Fs_type) || strcmp (Fs_type, "none") == 0) #endif #ifdef __CYGWIN__ # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetDriveType # define GetDriveType GetDriveTypeA # define ME_REMOTE me_remote /* All cygwin mount points include ':' or start with '//'; so it requires a native Windows call to determine remote disks. */ static bool me_remote (char const *fs_name, _GL_UNUSED char const *fs_type) { if (fs_name[0] && fs_name[1] == ':') { char drive[4]; sprintf (drive, "%c:\\", fs_name[0]); switch (GetDriveType (drive)) { case DRIVE_REMOVABLE: case DRIVE_FIXED: case DRIVE_CDROM: case DRIVE_RAMDISK: return false; } } return true; } #endif #ifndef ME_REMOTE /* A file system is "remote" if its Fs_name contains a ':' or if (it is of type (smbfs or cifs) and its Fs_name starts with '//') or if it is of any other of the listed types or Fs_name is equal to "-hosts" (used by autofs to mount remote fs). "VM" file systems like prl_fs or vboxsf are not considered remote here. */ # define ME_REMOTE(Fs_name, Fs_type) \ (strchr (Fs_name, ':') != NULL \ || ((Fs_name)[0] == '/' \ && (Fs_name)[1] == '/' \ && (strcmp (Fs_type, "smbfs") == 0 \ || strcmp (Fs_type, "smb3") == 0 \ || strcmp (Fs_type, "cifs") == 0)) \ || strcmp (Fs_type, "acfs") == 0 \ || strcmp (Fs_type, "afs") == 0 \ || strcmp (Fs_type, "coda") == 0 \ || strcmp (Fs_type, "auristorfs") == 0 \ || strcmp (Fs_type, "fhgfs") == 0 \ || strcmp (Fs_type, "gpfs") == 0 \ || strcmp (Fs_type, "ibrix") == 0 \ || strcmp (Fs_type, "ocfs2") == 0 \ || strcmp (Fs_type, "vxfs") == 0 \ || strcmp ("-hosts", Fs_name) == 0) #endif #if MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */ # if ! HAVE_STRUCT_STATFS_F_FSTYPENAME static char * fstype_to_string (short int t) { switch (t) { # ifdef MOUNT_PC case MOUNT_PC: return "pc"; # endif # ifdef MOUNT_MFS case MOUNT_MFS: return "mfs"; # endif # ifdef MOUNT_LO case MOUNT_LO: return "lo"; # endif # ifdef MOUNT_TFS case MOUNT_TFS: return "tfs"; # endif # ifdef MOUNT_TMP case MOUNT_TMP: return "tmp"; # endif # ifdef MOUNT_UFS case MOUNT_UFS: return "ufs" ; # endif # ifdef MOUNT_NFS case MOUNT_NFS: return "nfs" ; # endif # ifdef MOUNT_MSDOS case MOUNT_MSDOS: return "msdos" ; # endif # ifdef MOUNT_LFS case MOUNT_LFS: return "lfs" ; # endif # ifdef MOUNT_LOFS case MOUNT_LOFS: return "lofs" ; # endif # ifdef MOUNT_FDESC case MOUNT_FDESC: return "fdesc" ; # endif # ifdef MOUNT_PORTAL case MOUNT_PORTAL: return "portal" ; # endif # ifdef MOUNT_NULL case MOUNT_NULL: return "null" ; # endif # ifdef MOUNT_UMAP case MOUNT_UMAP: return "umap" ; # endif # ifdef MOUNT_KERNFS case MOUNT_KERNFS: return "kernfs" ; # endif # ifdef MOUNT_PROCFS case MOUNT_PROCFS: return "procfs" ; # endif # ifdef MOUNT_AFS case MOUNT_AFS: return "afs" ; # endif # ifdef MOUNT_CD9660 case MOUNT_CD9660: return "cd9660" ; # endif # ifdef MOUNT_UNION case MOUNT_UNION: return "union" ; # endif # ifdef MOUNT_DEVFS case MOUNT_DEVFS: return "devfs" ; # endif # ifdef MOUNT_EXT2FS case MOUNT_EXT2FS: return "ext2fs" ; # endif default: return "?"; } } # endif static char * fsp_to_string (const struct statfs *fsp) { # if HAVE_STRUCT_STATFS_F_FSTYPENAME return (char *) (fsp->f_fstypename); # else return fstype_to_string (fsp->f_type); # endif } #endif /* MOUNTED_GETMNTINFO */ #ifdef MOUNTED_VMOUNT /* AIX */ static char * fstype_to_string (int t) { struct vfs_ent *e; e = getvfsbytype (t); if (!e || !e->vfsent_name) return "none"; else return e->vfsent_name; } #endif /* MOUNTED_VMOUNT */ #if defined MOUNTED_GETMNTENT1 || defined MOUNTED_GETMNTENT2 /* Return the device number from MOUNT_OPTIONS, if possible. Otherwise return (dev_t) -1. */ static dev_t dev_from_mount_options (char const *mount_options) { /* GNU/Linux allows file system implementations to define their own meaning for "dev=" mount options, so don't trust the meaning here. */ # ifndef __linux__ static char const dev_pattern[] = ",dev="; char const *devopt = strstr (mount_options, dev_pattern); if (devopt) { char const *optval = devopt + sizeof dev_pattern - 1; char *optvalend; unsigned long int dev; errno = 0; dev = strtoul (optval, &optvalend, 16); if (optval != optvalend && (*optvalend == '\0' || *optvalend == ',') && ! (dev == ULONG_MAX && errno == ERANGE) && dev == (dev_t) dev) return dev; } # endif (void) mount_options; return -1; } #endif #if defined MOUNTED_GETMNTENT1 && (defined __linux__ || defined __ANDROID__) /* GNU/Linux, Android */ /* Unescape the paths in mount tables. STR is updated in place. */ static void unescape_tab (char *str) { size_t i, j = 0; size_t len = strlen (str) + 1; for (i = 0; i < len; i++) { if (str[i] == '\\' && (i + 4 < len) && str[i + 1] >= '0' && str[i + 1] <= '3' && str[i + 2] >= '0' && str[i + 2] <= '7' && str[i + 3] >= '0' && str[i + 3] <= '7') { str[j++] = (str[i + 1] - '0') * 64 + (str[i + 2] - '0') * 8 + (str[i + 3] - '0'); i += 3; } else str[j++] = str[i]; } } /* Find the next space in STR, terminate the string there in place, and return that position. Otherwise return NULL. */ static char * terminate_at_blank (char *str) { char *s = strchr (str, ' '); if (s) *s = '\0'; return s; } #endif /* Return a list of the currently mounted file systems, or NULL on error. Add each entry to the tail of the list so that they stay in order. If NEED_FS_TYPE is true, ensure that the file system type fields in the returned list are valid. Otherwise, they might not be. */ struct mount_entry * read_file_system_list (bool need_fs_type) { struct mount_entry *mount_list; struct mount_entry *me; struct mount_entry **mtail = &mount_list; (void) need_fs_type; #ifdef MOUNTED_GETMNTENT1 /* glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS */ { FILE *fp; # if defined __linux__ || defined __ANDROID__ /* Try parsing mountinfo first, as that make device IDs available. Note we could use libmount routines to simplify this parsing a little (and that code is in previous versions of this function), however libmount depends on libselinux which pulls in many dependencies. */ char const *mountinfo = "/proc/self/mountinfo"; fp = fopen (mountinfo, "re"); if (fp != NULL) { char *line = NULL; size_t buf_size = 0; while (getline (&line, &buf_size, fp) != -1) { unsigned int devmaj, devmin; int rc, mntroot_s; rc = sscanf(line, "%*u " /* id - discarded */ "%*u " /* parent - discarded */ "%u:%u " /* dev major:minor */ "%n", /* mountroot (start) */ &devmaj, &devmin, &mntroot_s); if (rc != 2 && rc != 3) /* 3 if %n included in count. */ continue; /* find end of MNTROOT. */ char *mntroot = line + mntroot_s; char *blank = terminate_at_blank (mntroot); if (! blank) continue; /* find end of TARGET. */ char *target = blank + 1; blank = terminate_at_blank (target); if (! blank) continue; /* skip optional fields, terminated by " - " */ char *dash = strstr (blank + 1, " - "); if (! dash) continue; /* advance past the " - " separator. */ char *fstype = dash + 3; blank = terminate_at_blank (fstype); if (! blank) continue; /* find end of SOURCE. */ char *source = blank + 1; if (! terminate_at_blank (source)) continue; /* manipulate the sub-strings in place. */ unescape_tab (source); unescape_tab (target); unescape_tab (mntroot); unescape_tab (fstype); me = xmalloc (sizeof *me); me->me_devname = xstrdup (source); me->me_mountdir = xstrdup (target); me->me_mntroot = xstrdup (mntroot); me->me_type = xstrdup (fstype); me->me_type_malloced = 1; me->me_dev = makedev (devmaj, devmin); /* we pass "false" for the "Bind" option as that's only significant when the Fs_type is "none" which will not be the case when parsing "/proc/self/mountinfo", and only applies for static /etc/mtab files. */ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, false); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } free (line); if (ferror (fp)) { int saved_errno = errno; fclose (fp); errno = saved_errno; goto free_then_fail; } if (fclose (fp) == EOF) goto free_then_fail; } else /* fallback to /proc/self/mounts (/etc/mtab). */ # endif /* __linux __ || __ANDROID__ */ { struct mntent *mnt; char const *table = MOUNTED; fp = setmntent (table, "r"); if (fp == NULL) return NULL; while ((mnt = getmntent (fp))) { bool bind = hasmntopt (mnt, "bind"); me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt->mnt_fsname); me->me_mountdir = xstrdup (mnt->mnt_dir); me->me_mntroot = NULL; me->me_type = xstrdup (mnt->mnt_type); me->me_type_malloced = 1; me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, bind); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = dev_from_mount_options (mnt->mnt_opts); /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } if (endmntent (fp) == 0) goto free_then_fail; } } #endif /* MOUNTED_GETMNTENT1. */ #ifdef MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */ { struct statfs *fsp; int entries; entries = getmntinfo (&fsp, MNT_NOWAIT); if (entries < 0) return NULL; for (; entries-- > 0; fsp++) { char *fs_type = fsp_to_string (fsp); me = xmalloc (sizeof *me); me->me_devname = xstrdup (fsp->f_mntfromname); me->me_mountdir = xstrdup (fsp->f_mntonname); me->me_mntroot = NULL; me->me_type = fs_type; me->me_type_malloced = 0; me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } } #endif /* MOUNTED_GETMNTINFO */ #ifdef MOUNTED_GETMNTINFO2 /* NetBSD, Minix */ { struct statvfs *fsp; int entries; entries = getmntinfo (&fsp, MNT_NOWAIT); if (entries < 0) return NULL; for (; entries-- > 0; fsp++) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (fsp->f_mntfromname); me->me_mountdir = xstrdup (fsp->f_mntonname); me->me_mntroot = NULL; me->me_type = xstrdup (fsp->f_fstypename); me->me_type_malloced = 1; me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } } #endif /* MOUNTED_GETMNTINFO2 */ #if defined MOUNTED_FS_STAT_DEV /* Haiku, also (obsolete) BeOS */ { /* The next_dev() and fs_stat_dev() system calls give the list of all file systems, including the information returned by statvfs() (fs type, total blocks, free blocks etc.), but without the mount point. But on BeOS all file systems except / are mounted in the rootfs, directly under /. The directory name of the mount point is often, but not always, identical to the volume name of the device. We therefore get the list of subdirectories of /, and the list of all file systems, and match the two lists. */ DIR *dirp; struct rootdir_entry { char *name; dev_t dev; ino_t ino; struct rootdir_entry *next; }; struct rootdir_entry *rootdir_list; struct rootdir_entry **rootdir_tail; int32 pos; dev_t dev; fs_info fi; /* All volumes are mounted in the rootfs, directly under /. */ rootdir_list = NULL; rootdir_tail = &rootdir_list; dirp = opendir ("/"); if (dirp) { struct dirent *d; while ((d = readdir (dirp)) != NULL) { char *name; struct stat statbuf; if (strcmp (d->d_name, "..") == 0) continue; if (strcmp (d->d_name, ".") == 0) name = xstrdup ("/"); else { name = xmalloc (1 + strlen (d->d_name) + 1); name[0] = '/'; strcpy (name + 1, d->d_name); } if (lstat (name, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode)) { struct rootdir_entry *re = xmalloc (sizeof *re); re->name = name; re->dev = statbuf.st_dev; re->ino = statbuf.st_ino; /* Add to the linked list. */ *rootdir_tail = re; rootdir_tail = &re->next; } else free (name); } closedir (dirp); } *rootdir_tail = NULL; for (pos = 0; (dev = next_dev (&pos)) >= 0; ) if (fs_stat_dev (dev, &fi) >= 0) { /* Note: fi.dev == dev. */ struct rootdir_entry *re; for (re = rootdir_list; re; re = re->next) if (re->dev == fi.dev && re->ino == fi.root) break; me = xmalloc (sizeof *me); me->me_devname = xstrdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name); me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name); me->me_mntroot = NULL; me->me_type = xstrdup (fi.fsh_name); me->me_type_malloced = 1; me->me_dev = fi.dev; me->me_dummy = 0; me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0; /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } *mtail = NULL; while (rootdir_list != NULL) { struct rootdir_entry *re = rootdir_list; rootdir_list = re->next; free (re->name); free (re); } } #endif /* MOUNTED_FS_STAT_DEV */ #if defined MOUNTED_GETFSSTAT /* OSF/1, also (obsolete) Apple Darwin 1.3 */ { int numsys, counter; size_t bufsize; struct statfs *stats; numsys = getfsstat (NULL, 0L, MNT_NOWAIT); if (numsys < 0) return NULL; if (SIZE_MAX / sizeof *stats <= numsys) xalloc_die (); bufsize = (1 + numsys) * sizeof *stats; stats = xmalloc (bufsize); numsys = getfsstat (stats, bufsize, MNT_NOWAIT); if (numsys < 0) { free (stats); return NULL; } for (counter = 0; counter < numsys; counter++) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (stats[counter].f_mntfromname); me->me_mountdir = xstrdup (stats[counter].f_mntonname); me->me_mntroot = NULL; me->me_type = xstrdup (FS_TYPE (stats[counter])); me->me_type_malloced = 1; me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } free (stats); } #endif /* MOUNTED_GETFSSTAT */ #if defined MOUNTED_FREAD_FSTYP /* (obsolete) SVR3 */ { struct mnttab mnt; char *table = "/etc/mnttab"; FILE *fp; fp = fopen (table, "re"); if (fp == NULL) return NULL; while (fread (&mnt, sizeof mnt, 1, fp) > 0) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt.mt_dev); me->me_mountdir = xstrdup (mnt.mt_filsys); me->me_mntroot = NULL; me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ me->me_type = ""; me->me_type_malloced = 0; if (need_fs_type) { struct statfs fsd; char typebuf[FSTYPSZ]; if (statfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1 && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) { me->me_type = xstrdup (typebuf); me->me_type_malloced = 1; } } me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } if (ferror (fp)) { /* The last fread() call must have failed. */ int saved_errno = errno; fclose (fp); errno = saved_errno; goto free_then_fail; } if (fclose (fp) == EOF) goto free_then_fail; } #endif /* MOUNTED_FREAD_FSTYP. */ #ifdef MOUNTED_GETEXTMNTENT /* Solaris >= 8 */ { struct extmnttab mnt; const char *table = MNTTAB; FILE *fp; int ret; /* No locking is needed, because the contents of /etc/mnttab is generated by the kernel. */ errno = 0; fp = fopen (table, "re"); if (fp == NULL) ret = errno; else { while ((ret = getextmntent (fp, &mnt, 1)) == 0) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt.mnt_special); me->me_mountdir = xstrdup (mnt.mnt_mountp); me->me_mntroot = NULL; me->me_type = xstrdup (mnt.mnt_fstype); me->me_type_malloced = 1; me->me_dummy = MNT_IGNORE (&mnt) != 0; me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = makedev (mnt.mnt_major, mnt.mnt_minor); /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } ret = fclose (fp) == EOF ? errno : 0 < ret ? 0 : -1; /* Here ret = -1 means success, ret >= 0 means failure. */ } if (0 <= ret) { errno = ret; goto free_then_fail; } } #endif /* MOUNTED_GETEXTMNTENT */ #ifdef MOUNTED_GETMNTENT2 /* Solaris < 8, also (obsolete) SVR4 */ { struct mnttab mnt; const char *table = MNTTAB; FILE *fp; int ret; int lockfd = -1; # if defined F_RDLCK && defined F_SETLKW /* MNTTAB_LOCK is a macro name of our own invention; it's not present in e.g. Solaris 2.6. If the SVR4 folks ever define a macro for this file name, we should use their macro name instead. (Why not just lock MNTTAB directly? We don't know.) */ # ifndef MNTTAB_LOCK # define MNTTAB_LOCK "/etc/.mnttab.lock" # endif lockfd = open (MNTTAB_LOCK, O_RDONLY | O_CLOEXEC); if (0 <= lockfd) { struct flock flock; flock.l_type = F_RDLCK; flock.l_whence = SEEK_SET; flock.l_start = 0; flock.l_len = 0; while (fcntl (lockfd, F_SETLKW, &flock) == -1) if (errno != EINTR) { int saved_errno = errno; close (lockfd); errno = saved_errno; return NULL; } } else if (errno != ENOENT) return NULL; # endif errno = 0; fp = fopen (table, "re"); if (fp == NULL) ret = errno; else { while ((ret = getmntent (fp, &mnt)) == 0) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt.mnt_special); me->me_mountdir = xstrdup (mnt.mnt_mountp); me->me_mntroot = NULL; me->me_type = xstrdup (mnt.mnt_fstype); me->me_type_malloced = 1; me->me_dummy = MNT_IGNORE (&mnt) != 0; me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = dev_from_mount_options (mnt.mnt_mntopts); /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } ret = fclose (fp) == EOF ? errno : 0 < ret ? 0 : -1; /* Here ret = -1 means success, ret >= 0 means failure. */ } if (0 <= lockfd && close (lockfd) != 0) ret = errno; if (0 <= ret) { errno = ret; goto free_then_fail; } } #endif /* MOUNTED_GETMNTENT2. */ #ifdef MOUNTED_VMOUNT /* AIX */ { int bufsize; void *entries; char *thisent; struct vmount *vmp; int n_entries; int i; /* Ask how many bytes to allocate for the mounted file system info. */ entries = &bufsize; if (mntctl (MCTL_QUERY, sizeof bufsize, entries) != 0) return NULL; entries = xmalloc (bufsize); /* Get the list of mounted file systems. */ n_entries = mntctl (MCTL_QUERY, bufsize, entries); if (n_entries < 0) { free (entries); return NULL; } for (i = 0, thisent = entries; i < n_entries; i++, thisent += vmp->vmt_length) { char *options, *ignore; vmp = (struct vmount *) thisent; me = xmalloc (sizeof *me); if (vmp->vmt_flags & MNT_REMOTE) { char *host, *dir; me->me_remote = 1; /* Prepend the remote dirname. */ host = thisent + vmp->vmt_data[VMT_HOSTNAME].vmt_off; dir = thisent + vmp->vmt_data[VMT_OBJECT].vmt_off; me->me_devname = xmalloc (strlen (host) + strlen (dir) + 2); strcpy (me->me_devname, host); strcat (me->me_devname, ":"); strcat (me->me_devname, dir); } else { me->me_remote = 0; me->me_devname = xstrdup (thisent + vmp->vmt_data[VMT_OBJECT].vmt_off); } me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off); me->me_mntroot = NULL; me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype)); me->me_type_malloced = 1; options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off; ignore = strstr (options, "ignore"); me->me_dummy = (ignore && (ignore == options || ignore[-1] == ',') && (ignore[sizeof "ignore" - 1] == ',' || ignore[sizeof "ignore" - 1] == '\0')); me->me_dev = (dev_t) -1; /* vmt_fsid might be the info we want. */ /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } free (entries); } #endif /* MOUNTED_VMOUNT. */ #ifdef MOUNTED_INTERIX_STATVFS /* Interix */ { DIR *dirp = opendir ("/dev/fs"); char node[9 + NAME_MAX]; if (!dirp) goto free_then_fail; while (1) { struct statvfs dev; struct dirent entry; struct dirent *result; /* FIXME: readdir_r is planned to be withdrawn from POSIX and marked obsolescent in glibc. Use readdir instead. */ if (readdir_r (dirp, &entry, &result) || result == NULL) break; strcpy (node, "/dev/fs/"); strcat (node, entry.d_name); if (statvfs (node, &dev) == 0) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (dev.f_mntfromname); me->me_mountdir = xstrdup (dev.f_mntonname); me->me_mntroot = NULL; me->me_type = xstrdup (dev.f_fstypename); me->me_type_malloced = 1; me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); me->me_remote = ME_REMOTE (me->me_devname, me->me_type); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } } closedir (dirp); } #endif /* MOUNTED_INTERIX_STATVFS */ *mtail = NULL; return mount_list; free_then_fail: _GL_UNUSED_LABEL; { int saved_errno = errno; *mtail = NULL; while (mount_list) { me = mount_list->me_next; free_mount_entry (mount_list); mount_list = me; } errno = saved_errno; return NULL; } } /* Free a mount entry as returned from read_file_system_list (). */ void free_mount_entry (struct mount_entry *me) { free (me->me_devname); free (me->me_mountdir); free (me->me_mntroot); if (me->me_type_malloced) free (me->me_type); free (me); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mountlist.h�������������������������������������������������������������0000664�0000000�0000000�00000003326�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mountlist.h -- declarations for list of mounted file systems Copyright (C) 1991-1992, 1998, 2000-2005, 2009-2021 Free Software Foundation, Inc. This 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 MOUNTLIST_H_ # define MOUNTLIST_H_ # include <stdbool.h> # include <sys/types.h> /* A mount table entry. */ struct mount_entry { char *me_devname; /* Device node name, including "/dev/". */ char *me_mountdir; /* Mount point directory name. */ char *me_mntroot; /* Directory on filesystem of device used */ /* as root for the (bind) mount. */ char *me_type; /* "nfs", "4.2", etc. */ dev_t me_dev; /* Device number of me_mountdir. */ unsigned int me_dummy : 1; /* Nonzero for dummy file systems. */ unsigned int me_remote : 1; /* Nonzero for remote file systems. */ unsigned int me_type_malloced : 1; /* Nonzero if me_type was malloced. */ struct mount_entry *me_next; }; struct mount_entry *read_file_system_list (bool need_fs_type) _GL_ATTRIBUTE_MALLOC; void free_mount_entry (struct mount_entry *entry); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mpsort.c����������������������������������������������������������������0000664�0000000�0000000�00000007352�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sort a vector of pointers to data. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "mpsort.h" #include <string.h> /* The type of qsort-style comparison functions. */ typedef int (*comparison_function) (void const *, void const *); static void mpsort_with_tmp (void const **restrict, size_t, void const **restrict, comparison_function); /* Sort a vector BASE containing N pointers, placing the sorted array into TMP. Compare pointers with CMP. N must be at least 2. */ static void mpsort_into_tmp (void const **restrict base, size_t n, void const **restrict tmp, comparison_function cmp) { size_t n1 = n / 2; size_t n2 = n - n1; size_t a = 0; size_t alim = n1; size_t b = n1; size_t blim = n; void const *ba; void const *bb; mpsort_with_tmp (base + n1, n2, tmp, cmp); mpsort_with_tmp (base, n1, tmp, cmp); ba = base[a]; bb = base[b]; for (;;) if (cmp (ba, bb) <= 0) { *tmp++ = ba; a++; if (a == alim) { a = b; alim = blim; break; } ba = base[a]; } else { *tmp++ = bb; b++; if (b == blim) break; bb = base[b]; } memcpy (tmp, base + a, (alim - a) * sizeof *base); } /* Sort a vector BASE containing N pointers, in place. Use TMP (containing N / 2 pointers) for temporary storage. Compare pointers with CMP. */ static void mpsort_with_tmp (void const **restrict base, size_t n, void const **restrict tmp, comparison_function cmp) { if (n <= 2) { if (n == 2) { void const *p0 = base[0]; void const *p1 = base[1]; if (! (cmp (p0, p1) <= 0)) { base[0] = p1; base[1] = p0; } } } else { size_t n1 = n / 2; size_t n2 = n - n1; size_t i; size_t t = 0; size_t tlim = n1; size_t b = n1; size_t blim = n; void const *bb; void const *tt; mpsort_with_tmp (base + n1, n2, tmp, cmp); if (n1 < 2) tmp[0] = base[0]; else mpsort_into_tmp (base, n1, tmp, cmp); tt = tmp[t]; bb = base[b]; for (i = 0; ; ) if (cmp (tt, bb) <= 0) { base[i++] = tt; t++; if (t == tlim) break; tt = tmp[t]; } else { base[i++] = bb; b++; if (b == blim) { memcpy (base + i, tmp + t, (tlim - t) * sizeof *base); break; } bb = base[b]; } } } /* Sort a vector BASE containing N pointers, in place. BASE must contain enough storage to hold N + N / 2 vectors; the trailing vectors are used for temporaries. Compare pointers with CMP. */ void mpsort (void const **base, size_t n, comparison_function cmp) { mpsort_with_tmp (base, n, base + n, cmp); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mpsort.h����������������������������������������������������������������0000664�0000000�0000000�00000001504�14110572173�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sort a vector of pointers to data. Copyright (C) 2007-2021 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 <stddef.h> void mpsort (void const **, size_t, int (*) (void const *, void const *)); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/msvc-inval.c������������������������������������������������������������0000664�0000000�0000000�00000007553�14110572173�0017302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include <stdlib.h> # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/msvc-inval.h������������������������������������������������������������0000664�0000000�0000000�00000021226�14110572173�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2021 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/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { <Code that can trigger an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } CATCH_MSVC_INVAL { <Code that handles an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include <excpt.h> /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include <setjmp.h> # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/msvc-nothrow.c����������������������������������������������������������0000664�0000000�0000000�00000002556�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/msvc-nothrow.h����������������������������������������������������������0000664�0000000�0000000�00000003023�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2021 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/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/mtx.c�������������������������������������������������������������������0000664�0000000�0000000�00000015015�14110572173�0016023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C 11 locking in multithreaded situations. Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ #include <config.h> #include <threads.h> #include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdlib.h> #else /* Use POSIX threads. */ # include <pthread.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ int mtx_init (mtx_t *mutex, int type) { switch (type) { case mtx_plain: glwthread_mutex_init (&mutex->u.u_mutex); break; case mtx_plain | mtx_recursive: glwthread_recmutex_init (&mutex->u.u_recmutex); break; case mtx_timed: if (glwthread_timedmutex_init (&mutex->u.u_timedmutex) != 0) return thrd_error; break; case mtx_timed | mtx_recursive: if (glwthread_timedrecmutex_init (&mutex->u.u_timedrecmutex) != 0) return thrd_error; break; default: return thrd_error; } mutex->type = type; return thrd_success; } int mtx_lock (mtx_t *mutex) { int err; switch (mutex->type) { case mtx_plain: err = glwthread_mutex_lock (&mutex->u.u_mutex); break; case mtx_plain | mtx_recursive: err = glwthread_recmutex_lock (&mutex->u.u_recmutex); break; case mtx_timed: err = glwthread_timedmutex_lock (&mutex->u.u_timedmutex); break; case mtx_timed | mtx_recursive: err = glwthread_timedrecmutex_lock (&mutex->u.u_timedrecmutex); break; default: abort (); } return (err == 0 ? thrd_success : thrd_error); } int mtx_trylock (mtx_t *mutex) { int err; switch (mutex->type) { case mtx_plain: err = glwthread_mutex_trylock (&mutex->u.u_mutex); break; case mtx_plain | mtx_recursive: err = glwthread_recmutex_trylock (&mutex->u.u_recmutex); break; case mtx_timed: err = glwthread_timedmutex_trylock (&mutex->u.u_timedmutex); break; case mtx_timed | mtx_recursive: err = glwthread_timedrecmutex_trylock (&mutex->u.u_timedrecmutex); break; default: abort (); } return (err == 0 ? thrd_success : err == EBUSY ? thrd_busy : thrd_error); } int mtx_timedlock (mtx_t *mutex, const struct timespec *abstime) { int err; switch (mutex->type) { case mtx_plain: case mtx_plain | mtx_recursive: return thrd_error; case mtx_timed: err = glwthread_timedmutex_timedlock (&mutex->u.u_timedmutex, abstime); break; case mtx_timed | mtx_recursive: err = glwthread_timedrecmutex_timedlock (&mutex->u.u_timedrecmutex, abstime); break; default: abort (); } return (err == 0 ? thrd_success : err == EBUSY ? thrd_busy : thrd_error); } int mtx_unlock (mtx_t *mutex) { int err; switch (mutex->type) { case mtx_plain: err = glwthread_mutex_unlock (&mutex->u.u_mutex); break; case mtx_plain | mtx_recursive: err = glwthread_recmutex_unlock (&mutex->u.u_recmutex); break; case mtx_timed: err = glwthread_timedmutex_unlock (&mutex->u.u_timedmutex); break; case mtx_timed | mtx_recursive: err = glwthread_timedrecmutex_unlock (&mutex->u.u_timedrecmutex); break; default: abort (); } return (err == 0 ? thrd_success : thrd_error); } void mtx_destroy (mtx_t *mutex) { switch (mutex->type) { case mtx_plain: glwthread_mutex_destroy (&mutex->u.u_mutex); break; case mtx_plain | mtx_recursive: glwthread_recmutex_destroy (&mutex->u.u_recmutex); break; case mtx_timed: glwthread_timedmutex_destroy (&mutex->u.u_timedmutex); break; case mtx_timed | mtx_recursive: glwthread_timedrecmutex_destroy (&mutex->u.u_timedrecmutex); break; default: abort (); } } void call_once (once_flag *flagp, void (*func) (void)) { glwthread_once (flagp, func); } #else /* Use POSIX threads. */ int mtx_init (mtx_t *mutex, int type) { switch (type) { case mtx_plain: case mtx_timed: case mtx_plain | mtx_recursive: case mtx_timed | mtx_recursive: break; default: return thrd_error; } if ((type & mtx_recursive) != 0) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return thrd_error; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return thrd_error; } err = pthread_mutex_init (mutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return thrd_error; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return thrd_error; } else { int err = pthread_mutex_init (mutex, NULL); if (err != 0) return thrd_error; } return thrd_success; } int mtx_lock (mtx_t *mutex) { int err = pthread_mutex_lock (mutex); return (err == 0 ? thrd_success : thrd_error); } int mtx_trylock (mtx_t *mutex) { int err = pthread_mutex_trylock (mutex); return (err == 0 ? thrd_success : err == EBUSY ? thrd_busy : thrd_error); } int mtx_timedlock (mtx_t *mutex, const struct timespec *abstime) { int err = pthread_mutex_timedlock (mutex, abstime); return (err == 0 ? thrd_success : err == ETIMEDOUT ? thrd_timedout : thrd_error); } int mtx_unlock (mtx_t *mutex) { int err = pthread_mutex_unlock (mutex); return (err == 0 ? thrd_success : thrd_error); } void mtx_destroy (mtx_t *mutex) { pthread_mutex_destroy (mutex); } void call_once (once_flag *flagp, void (*func) (void)) { pthread_once (flagp, func); } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nanosleep.c�������������������������������������������������������������0000664�0000000�0000000�00000020017�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a replacement for the POSIX nanosleep function. Copyright (C) 1999-2000, 2002, 2004-2021 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 Jim Meyering and Bruno Haible for the native Windows part */ #include <config.h> #include <time.h> #include "intprops.h" #include "sig-handler.h" #include "verify.h" #include <stdbool.h> #include <stdio.h> #include <sys/types.h> #include <sys/select.h> #include <signal.h> #include <sys/time.h> #include <errno.h> #include <unistd.h> enum { BILLION = 1000 * 1000 * 1000 }; #if HAVE_BUG_BIG_NANOSLEEP int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) # undef nanosleep { /* nanosleep mishandles large sleeps due to internal overflow problems. The worst known case of this is Linux 2.6.9 with glibc 2.3.4, which can't sleep more than 24.85 days (2^31 milliseconds). Similarly, cygwin 1.5.x, which can't sleep more than 49.7 days (2^32 milliseconds). Solve this by breaking the sleep up into smaller chunks. */ if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } { /* Verify that time_t is large enough. */ verify (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; while (limit < seconds) { int result; intermediate.tv_sec = limit; result = nanosleep (&intermediate, remaining_delay); seconds -= limit; if (result) { if (remaining_delay) remaining_delay->tv_sec += seconds; return result; } intermediate.tv_nsec = 0; } intermediate.tv_sec = seconds; return nanosleep (&intermediate, remaining_delay); } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* The Windows API function Sleep() has a resolution of about 15 ms and takes at least 5 ms to execute. We use this function for longer time periods. Additionally, we use busy-looping over short time periods, to get a resolution of about 0.01 ms. In order to measure such short timespans, we use the QueryPerformanceCounter() function. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { static bool initialized; /* Number of performance counter increments per nanosecond, or zero if it could not be determined. */ static double ticks_per_nanosecond; if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } /* For requested delays of one second or more, 15ms resolution is sufficient. */ if (requested_delay->tv_sec == 0) { if (!initialized) { /* Initialize ticks_per_nanosecond. */ LARGE_INTEGER ticks_per_second; if (QueryPerformanceFrequency (&ticks_per_second)) ticks_per_nanosecond = (double) ticks_per_second.QuadPart / 1000000000.0; initialized = true; } if (ticks_per_nanosecond) { /* QueryPerformanceFrequency worked. We can use QueryPerformanceCounter. Use a combination of Sleep and busy-looping. */ /* Number of milliseconds to pass to the Sleep function. Since Sleep can take up to 8 ms less or 8 ms more than requested (or maybe more if the system is loaded), we subtract 10 ms. */ int sleep_millis = (int) requested_delay->tv_nsec / 1000000 - 10; /* Determine how many ticks to delay. */ LONGLONG wait_ticks = requested_delay->tv_nsec * ticks_per_nanosecond; /* Start. */ LARGE_INTEGER counter_before; if (QueryPerformanceCounter (&counter_before)) { /* Wait until the performance counter has reached this value. We don't need to worry about overflow, because the performance counter is reset at reboot, and with a frequency of 3.6E6 ticks per second 63 bits suffice for over 80000 years. */ LONGLONG wait_until = counter_before.QuadPart + wait_ticks; /* Use Sleep for the longest part. */ if (sleep_millis > 0) Sleep (sleep_millis); /* Busy-loop for the rest. */ for (;;) { LARGE_INTEGER counter_after; if (!QueryPerformanceCounter (&counter_after)) /* QueryPerformanceCounter failed, but succeeded earlier. Should not happen. */ break; if (counter_after.QuadPart >= wait_until) /* The requested time has elapsed. */ break; } goto done; } } } /* Implementation for long delays and as fallback. */ Sleep (requested_delay->tv_sec * 1000 + requested_delay->tv_nsec / 1000000); done: /* Sleep is not interruptible. So there is no remaining delay. */ if (remaining_delay != NULL) { remaining_delay->tv_sec = 0; remaining_delay->tv_nsec = 0; } return 0; } #else /* Unix platforms lacking nanosleep. */ /* Some systems (MSDOS) don't have SIGCONT. Using SIGTERM here turns the signal-handling code below into a no-op on such systems. */ # ifndef SIGCONT # define SIGCONT SIGTERM # endif static sig_atomic_t volatile suspended; /* Handle SIGCONT. */ static _GL_ASYNC_SAFE void sighandler (int sig) { suspended = 1; } /* Suspend execution for at least *TS_DELAY seconds. */ static int my_usleep (const struct timespec *ts_delay) { struct timeval tv_delay; tv_delay.tv_sec = ts_delay->tv_sec; tv_delay.tv_usec = (ts_delay->tv_nsec + 999) / 1000; if (tv_delay.tv_usec == 1000000) { if (tv_delay.tv_sec == TYPE_MAXIMUM (time_t)) tv_delay.tv_usec = 1000000 - 1; /* close enough */ else { tv_delay.tv_sec++; tv_delay.tv_usec = 0; } } return select (0, NULL, NULL, NULL, &tv_delay); } /* Suspend execution for at least *REQUESTED_DELAY seconds. The *REMAINING_DELAY part isn't implemented yet. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { static bool initialized; if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } /* set up sig handler */ if (! initialized) { struct sigaction oldact; sigaction (SIGCONT, NULL, &oldact); if (get_handler (&oldact) != SIG_IGN) { struct sigaction newact; newact.sa_handler = sighandler; sigemptyset (&newact.sa_mask); newact.sa_flags = 0; sigaction (SIGCONT, &newact, NULL); } initialized = true; } suspended = 0; if (my_usleep (requested_delay) == -1) { if (suspended) { /* Calculate time remaining. */ /* FIXME: the code in sleep doesn't use this, so there's no rush to implement it. */ errno = EINTR; } return -1; } /* FIXME: Restore sig handler? */ return 0; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/net_if.in.h�������������������������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <net/if.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_NET_IF_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_NET_IF_H@ /* On some platforms, <net/if.h> assumes prior inclusion of <sys/socket.h>. */ # include <sys/socket.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_NET_IF_H@ #endif #ifndef _@GUARD_PREFIX@_NET_IF_H #define _@GUARD_PREFIX@_NET_IF_H #if !@HAVE_NET_IF_H@ /* A platform that lacks <net/if.h>. */ struct if_nameindex { unsigned if_index; char *if_name; }; # define IF_NAMESIZE 1 /* Without if_* functions, this supports only "". */ #endif #endif /* _@GUARD_PREFIX@_NET_IF_H */ #endif /* _@GUARD_PREFIX@_NET_IF_H */ �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/netdb.in.h��������������������������������������������������������������0000664�0000000�0000000�00000025117�14110572173�0016725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a netdb.h header file for systems lacking it (read: MinGW). Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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/>. */ /* This file is supposed to be used on platforms that lack <netdb.h>. It is intended to provide definitions and prototypes needed by an application. */ #ifndef _@GUARD_PREFIX@_NETDB_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_NETDB_H@ /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_NETDB_H@ #endif #ifndef _@GUARD_PREFIX@_NETDB_H #define _@GUARD_PREFIX@_NETDB_H /* Get <netdb.h> definitions such as 'socklen_t' on IRIX 6.5 and OSF/1 4.0 and 'struct hostent' on MinGW. */ #include <sys/socket.h> /* 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. */ /* Declarations for a platform that lacks <netdb.h>, or where it is incomplete. */ #if @GNULIB_GETADDRINFO@ # if !@HAVE_STRUCT_ADDRINFO@ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_addrinfo /* Structure to contain information about address of a service provider. */ struct addrinfo { int ai_flags; /* Input flags. */ int ai_family; /* Protocol family for socket. */ int ai_socktype; /* Socket type. */ int ai_protocol; /* Protocol for socket. */ socklen_t ai_addrlen; /* Length of socket address. */ struct sockaddr *ai_addr; /* Socket address for socket. */ char *ai_canonname; /* Canonical name for service location. */ struct addrinfo *ai_next; /* Pointer to next in list. */ }; # define GNULIB_defined_struct_addrinfo 1 # endif # ifdef __cplusplus } # endif # endif /* Possible values for 'ai_flags' field in 'addrinfo' structure. */ # ifndef AI_PASSIVE # define AI_PASSIVE 0x0001 /* Socket address is intended for 'bind'. */ # endif # ifndef AI_CANONNAME # define AI_CANONNAME 0x0002 /* Request for canonical name. */ # endif # ifndef AI_NUMERICSERV # define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */ # endif # if 0 # define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */ # endif /* These symbolic constants are required to be present by POSIX, but our getaddrinfo replacement doesn't use them (yet). Setting them to 0 on systems that doesn't have them avoids causing problems for system getaddrinfo implementations that would be confused by unknown values. */ # ifndef AI_V4MAPPED # define AI_V4MAPPED 0 /* 0x0008: IPv4 mapped addresses are acceptable. */ # endif # ifndef AI_ALL # define AI_ALL 0 /* 0x0010: Return IPv4 mapped and IPv6 addresses. */ # endif # ifndef AI_ADDRCONFIG # define AI_ADDRCONFIG 0 /* 0x0020: Use configuration of this host to choose returned address type. */ # endif /* Error values for 'getaddrinfo' function. */ # ifndef EAI_BADFLAGS # define EAI_BADFLAGS -1 /* Invalid value for 'ai_flags' field. */ # define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ # define EAI_AGAIN -3 /* Temporary failure in name resolution. */ # define EAI_FAIL -4 /* Non-recoverable failure in name res. */ # define EAI_NODATA -5 /* No address associated with NAME. */ # define EAI_FAMILY -6 /* 'ai_family' not supported. */ # define EAI_SOCKTYPE -7 /* 'ai_socktype' not supported. */ # define EAI_SERVICE -8 /* SERVICE not supported for 'ai_socktype'. */ # define EAI_MEMORY -10 /* Memory allocation failure. */ # endif /* Since EAI_NODATA is deprecated by RFC3493, some systems (at least FreeBSD, which does define EAI_BADFLAGS) have removed the definition in favor of EAI_NONAME. */ # if !defined EAI_NODATA && defined EAI_NONAME # define EAI_NODATA EAI_NONAME # endif # ifndef EAI_OVERFLOW /* Not defined on mingw32 and Haiku. */ # define EAI_OVERFLOW -12 /* Argument buffer overflow. */ # endif # ifndef EAI_ADDRFAMILY /* Not defined on mingw32. */ # define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ # endif # ifndef EAI_SYSTEM /* Not defined on mingw32. */ # define EAI_SYSTEM -11 /* System error returned in 'errno'. */ # endif # if 0 /* The commented out definitions below are not yet implemented in the GNULIB getaddrinfo() replacement, so are not yet needed. If they are restored, be sure to protect the definitions with #ifndef. */ # ifndef EAI_INPROGRESS # define EAI_INPROGRESS -100 /* Processing request in progress. */ # define EAI_CANCELED -101 /* Request canceled. */ # define EAI_NOTCANCELED -102 /* Request not canceled. */ # define EAI_ALLDONE -103 /* All requests done. */ # define EAI_INTR -104 /* Interrupted by a signal. */ # define EAI_IDN_ENCODE -105 /* IDN encoding failed. */ # endif # endif /* Translate name of a service location and/or a service name to set of socket addresses. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html>. */ # if @REPLACE_GETADDRINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getaddrinfo # define getaddrinfo rpl_getaddrinfo # endif _GL_FUNCDECL_RPL (getaddrinfo, int, (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (getaddrinfo, int, (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res)); # else # if !@HAVE_DECL_GETADDRINFO@ _GL_FUNCDECL_SYS (getaddrinfo, int, (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res) _GL_ARG_NONNULL ((4))); # endif _GL_CXXALIAS_SYS (getaddrinfo, int, (const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res)); # endif _GL_CXXALIASWARN (getaddrinfo); /* Free 'addrinfo' structure AI including associated storage. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html>. */ # if @REPLACE_GETADDRINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freeaddrinfo # define freeaddrinfo rpl_freeaddrinfo # endif _GL_FUNCDECL_RPL (freeaddrinfo, void, (struct addrinfo *ai) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (freeaddrinfo, void, (struct addrinfo *ai)); # else # if !@HAVE_DECL_FREEADDRINFO@ _GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai)); # endif _GL_CXXALIASWARN (freeaddrinfo); # if @REPLACE_GAI_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gai_strerror # define gai_strerror rpl_gai_strerror # endif _GL_FUNCDECL_RPL (gai_strerror, const char *, (int ecode)); _GL_CXXALIAS_RPL (gai_strerror, const char *, (int ecode)); # else # if !@HAVE_DECL_GAI_STRERROR@ /* Convert error return from getaddrinfo() to a string. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gai_strerror.html>. */ _GL_FUNCDECL_SYS (gai_strerror, const char *, (int ecode)); # endif _GL_CXXALIAS_SYS (gai_strerror, const char *, (int ecode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (gai_strerror); # endif # if !@HAVE_DECL_GETNAMEINFO@ /* Convert socket address to printable node and service names. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnameinfo.html>. */ _GL_FUNCDECL_SYS (getnameinfo, int, (const struct sockaddr *restrict sa, socklen_t salen, char *restrict node, socklen_t nodelen, char *restrict service, socklen_t servicelen, int flags) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on glibc systems, the seventh parameter is unsigned int flags. */ _GL_CXXALIAS_SYS_CAST (getnameinfo, int, (const struct sockaddr *restrict sa, socklen_t salen, char *restrict node, socklen_t nodelen, char *restrict service, socklen_t servicelen, int flags)); _GL_CXXALIASWARN (getnameinfo); /* Possible flags for getnameinfo. */ # ifndef NI_NUMERICHOST # define NI_NUMERICHOST 1 # endif # ifndef NI_NUMERICSERV # define NI_NUMERICSERV 2 # endif #elif defined GNULIB_POSIXCHECK # undef getaddrinfo # if HAVE_RAW_DECL_GETADDRINFO _GL_WARN_ON_USE (getaddrinfo, "getaddrinfo is unportable - " "use gnulib module getaddrinfo for portability"); # endif # undef freeaddrinfo # if HAVE_RAW_DECL_FREEADDRINFO _GL_WARN_ON_USE (freeaddrinfo, "freeaddrinfo is unportable - " "use gnulib module getaddrinfo for portability"); # endif # undef gai_strerror # if HAVE_RAW_DECL_GAI_STRERROR _GL_WARN_ON_USE (gai_strerror, "gai_strerror is unportable - " "use gnulib module getaddrinfo for portability"); # endif # undef getnameinfo # if HAVE_RAW_DECL_GETNAMEINFO _GL_WARN_ON_USE (getnameinfo, "getnameinfo is unportable - " "use gnulib module getaddrinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_NETDB_H */ #endif /* _@GUARD_PREFIX@_NETDB_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/netinet_in.in.h���������������������������������������������������������0000664�0000000�0000000�00000002536�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <netinet/in.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_NETINET_IN_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_NETINET_IN_H@ /* On many platforms, <netinet/in.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ #endif #ifndef _@GUARD_PREFIX@_NETINET_IN_H #define _@GUARD_PREFIX@_NETINET_IN_H #if !@HAVE_NETINET_IN_H@ /* A platform that lacks <netinet/in.h>. */ # include <sys/socket.h> #endif #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nl_langinfo-lock.c������������������������������������������������������0000664�0000000�0000000�00000010445�14110572173�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by nl_langinfo. Copyright (C) 2019-2021 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>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_nl_langinfo_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_NL_LANGINFO_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by nl_langinfo. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by nl_langinfo. */ CRITICAL_SECTION * gl_get_nl_langinfo_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ pthread_mutex_t * gl_get_nl_langinfo_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ mtx_t * gl_get_nl_langinfo_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in nl_langinfo.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_nl_langinfo_lock) = &gl_get_nl_langinfo_lock; # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nl_langinfo.c�����������������������������������������������������������0000664�0000000�0000000�00000036544�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* nl_langinfo() replacement: query locale dependent information. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdio.h> #endif #if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* nl_langinfo() must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible argument. So that different threads can call nl_langinfo with different arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET /* Return the codeset of the current locale, if this is easily deducible. Otherwise, return "". */ static char * ctype_codeset (void) { static char result[2 + 10 + 1]; char buf[2 + 10 + 1]; char locale[SETLOCALE_NULL_MAX]; char *codeset; size_t codesetlen; if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale))) locale[0] = '\0'; codeset = buf; codeset[0] = '\0'; if (locale[0]) { /* If the locale name contains an encoding after the dot, return it. */ char *dot = strchr (locale, '.'); if (dot) { /* Look for the possible @... trailer and remove it, if any. */ char *codeset_start = dot + 1; char const *modifier = strchr (codeset_start, '@'); if (! modifier) codeset = codeset_start; else { codesetlen = modifier - codeset_start; if (codesetlen < sizeof buf) { codeset = memcpy (buf, codeset_start, codesetlen); codeset[codesetlen] = '\0'; } } } } # if defined _WIN32 && ! defined __CYGWIN__ /* If setlocale is successful, it returns the number of the codepage, as a string. Otherwise, fall back on Windows API GetACP, which returns the locale's codepage as a number (although this doesn't change according to what the 'setlocale' call specified). Either way, prepend "CP" to make it a valid codeset name. */ codesetlen = strlen (codeset); if (0 < codesetlen && codesetlen < sizeof buf - 2) memmove (buf + 2, codeset, codesetlen + 1); else sprintf (buf + 2, "%u", GetACP ()); /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) return (char *) "UTF-8"; else { memcpy (buf, "CP", 2); strcpy (result, buf); return result; } # else strcpy (result, codeset); return result; #endif } #endif #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # undef nl_langinfo /* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message "thread5 disturbed by threadN!", even when threadN invokes only nl_langinfo (CODESET); nl_langinfo (CRNCYSTR); Similarly on Solaris 10. */ # if !NL_LANGINFO_MTSAFE /* Solaris */ # define ITEMS (MAXSTRMSG + 1) # define MAX_RESULT_LEN 80 static char * nl_langinfo_unlocked (nl_item item) { static char result[ITEMS][MAX_RESULT_LEN]; /* The result of nl_langinfo is in storage that can be overwritten by other calls to nl_langinfo. */ char *tmp = nl_langinfo (item); if (item >= 0 && item < ITEMS && tmp != NULL) { size_t tmp_len = strlen (tmp); if (tmp_len < MAX_RESULT_LEN) strcpy (result[item], tmp); else { /* Produce a truncated result. Oh well... */ result[item][MAX_RESULT_LEN - 1] = '\0'; memcpy (result[item], tmp, MAX_RESULT_LEN - 1); } return result[item]; } else return tmp; } /* Use a lock, so that no two threads can invoke nl_langinfo_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock (); char *ret; EnterCriticalSection (lock); ret = nl_langinfo_unlocked (item); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_nl_langinfo_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static char * nl_langinfo_with_lock (nl_item item) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (pthread_mutex_lock (lock)) abort (); ret = nl_langinfo_unlocked (item); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return nl_langinfo_unlocked (item); } # elif HAVE_THREADS_H extern mtx_t *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { mtx_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (mtx_lock (lock) != thrd_success) abort (); ret = nl_langinfo_unlocked (item); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif # else /* On other platforms, no lock is needed. */ # define nl_langinfo_with_lock nl_langinfo # endif char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: return ctype_codeset (); # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; # endif # if GNULIB_defined_ALTMON case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: /* We don't ship the appropriate localizations with gnulib. Therefore, treat ALTMON_i like MON_i. */ item = item - ALTMON_1 + MON_1; break; # endif # if GNULIB_defined_ERA case ERA: /* The format is not standardized. In glibc it is a sequence of strings of the form "direction:offset:start_date:end_date:era_name:era_format" with an empty string at the end. */ return (char *) ""; case ERA_D_FMT: /* The %Ex conversion in strftime behaves like %x if the locale does not have an alternative time format. */ item = D_FMT; break; case ERA_D_T_FMT: /* The %Ec conversion in strftime behaves like %c if the locale does not have an alternative time format. */ item = D_T_FMT; break; case ERA_T_FMT: /* The %EX conversion in strftime behaves like %X if the locale does not have an alternative time format. */ item = T_FMT; break; case ALT_DIGITS: /* The format is not standardized. In glibc it is a sequence of 10 strings, appended in memory. */ return (char *) "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; # endif default: break; } return nl_langinfo_with_lock (item); } #else /* Provide nl_langinfo from scratch, either for native MS-Windows, or for old Unix platforms without locales, such as Linux libc5 or BeOS. */ # include <time.h> char * nl_langinfo (nl_item item) { char buf[100]; struct tm tmm = { 0 }; switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: { char *codeset = ctype_codeset (); if (*codeset) return codeset; } # ifdef __BEOS__ return (char *) "UTF-8"; # else return (char *) "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; # ifdef GROUPING case GROUPING: return localeconv () ->grouping; # endif /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return (char *) "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return (char *) "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return (char *) "%H:%M:%S"; case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; case AM_STR: { static char result[80]; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "AM"; strcpy (result, buf); return result; } case PM_STR: { static char result[80]; tmm.tm_hour = 12; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "PM"; strcpy (result, buf); return result; } case DAY_1: case DAY_2: case DAY_3: case DAY_4: case DAY_5: case DAY_6: case DAY_7: { static char result[7][50]; static char const days[][sizeof "Wednesday"] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; tmm.tm_wday = item - DAY_1; if (!strftime (buf, sizeof result[0], "%A", &tmm)) return (char *) days[item - DAY_1]; strcpy (result[item - DAY_1], buf); return result[item - DAY_1]; } case ABDAY_1: case ABDAY_2: case ABDAY_3: case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7: { static char result[7][30]; static char const abdays[][sizeof "Sun"] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; tmm.tm_wday = item - ABDAY_1; if (!strftime (buf, sizeof result[0], "%a", &tmm)) return (char *) abdays[item - ABDAY_1]; strcpy (result[item - ABDAY_1], buf); return result[item - ABDAY_1]; } { static char const months[][sizeof "September"] = { "January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December" }; case MON_1: case MON_2: case MON_3: case MON_4: case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: { static char result[12][50]; tmm.tm_mon = item - MON_1; if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - MON_1]; strcpy (result[item - MON_1], buf); return result[item - MON_1]; } case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: { static char result[12][50]; tmm.tm_mon = item - ALTMON_1; /* The platforms without nl_langinfo() don't support strftime with %OB. We don't even need to try. */ #if 0 if (!strftime (buf, sizeof result[0], "%OB", &tmm)) #endif if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - ALTMON_1]; strcpy (result[item - ALTMON_1], buf); return result[item - ALTMON_1]; } } case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4: case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8: case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12: { static char result[12][30]; static char const abmonths[][sizeof "Jan"] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Sep", "Oct", "Nov", "Dec" }; tmm.tm_mon = item - ABMON_1; if (!strftime (buf, sizeof result[0], "%b", &tmm)) return (char *) abmonths[item - ABMON_1]; strcpy (result[item - ABMON_1], buf); return result[item - ABMON_1]; } case ERA: return (char *) ""; case ALT_DIGITS: return (char *) "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category. */ case CRNCYSTR: return localeconv () ->currency_symbol; # ifdef INT_CURR_SYMBOL case INT_CURR_SYMBOL: return localeconv () ->int_curr_symbol; case MON_DECIMAL_POINT: return localeconv () ->mon_decimal_point; case MON_THOUSANDS_SEP: return localeconv () ->mon_thousands_sep; case MON_GROUPING: return localeconv () ->mon_grouping; case POSITIVE_SIGN: return localeconv () ->positive_sign; case NEGATIVE_SIGN: return localeconv () ->negative_sign; case FRAC_DIGITS: return & localeconv () ->frac_digits; case INT_FRAC_DIGITS: return & localeconv () ->int_frac_digits; case P_CS_PRECEDES: return & localeconv () ->p_cs_precedes; case N_CS_PRECEDES: return & localeconv () ->n_cs_precedes; case P_SEP_BY_SPACE: return & localeconv () ->p_sep_by_space; case N_SEP_BY_SPACE: return & localeconv () ->n_sep_by_space; case P_SIGN_POSN: return & localeconv () ->p_sign_posn; case N_SIGN_POSN: return & localeconv () ->n_sign_posn; # endif /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; default: return (char *) ""; } } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nonblocking.c�����������������������������������������������������������0000664�0000000�0000000�00000007427�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Non-blocking I/O for pipe or socket descriptors. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include "nonblocking.h" #include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # include <sys/ioctl.h> # include <sys/socket.h> # include <unistd.h> /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA int get_nonblocking_flag (int desc) { HANDLE h = (HANDLE) _get_osfhandle (desc); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0)) /* h is a pipe. */ return (state & PIPE_NOWAIT) != 0; else /* h is a socket. */ errno = ENOSYS; return -1; } else /* The native Windows API does not support non-blocking on regular files. */ return 0; } int set_nonblocking_flag (int desc, bool value) { HANDLE h = (HANDLE) _get_osfhandle (desc); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0)) { /* h is a pipe. */ if ((state & PIPE_NOWAIT) != 0) { if (value) return 0; state &= ~PIPE_NOWAIT; } else { if (!value) return 0; state |= PIPE_NOWAIT; } if (SetNamedPipeHandleState (h, &state, NULL, NULL)) return 0; errno = EINVAL; return -1; } else { /* h is a socket. */ int v = value; return ioctl (desc, FIONBIO, &v); } } else { /* The native Windows API does not support non-blocking on regular files. */ if (!value) return 0; errno = ENOTSUP; return -1; } } #else /* Unix API. */ # include <fcntl.h> # if GNULIB_defined_O_NONBLOCK # error Please port nonblocking to your platform # endif /* We don't need the gnulib replacement of fcntl() here. */ # undef fcntl int get_nonblocking_flag (int desc) { int fcntl_flags; fcntl_flags = fcntl (desc, F_GETFL, 0); if (fcntl_flags < 0) return -1; return (fcntl_flags & O_NONBLOCK) != 0; } int set_nonblocking_flag (int desc, bool value) { int fcntl_flags; fcntl_flags = fcntl (desc, F_GETFL, 0); if (fcntl_flags < 0) return -1; if (((fcntl_flags & O_NONBLOCK) != 0) == value) return 0; if (value) fcntl_flags |= O_NONBLOCK; else fcntl_flags &= ~O_NONBLOCK; return fcntl (desc, F_SETFL, fcntl_flags); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nonblocking.h�����������������������������������������������������������0000664�0000000�0000000�00000004502�14110572173�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Non-blocking I/O for pipe or socket descriptors. Copyright (C) 2011-2021 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/>. */ #ifndef _NONBLOCKING_H #define _NONBLOCKING_H #include <stdbool.h> /* Non-blocking I/O is an I/O mode by which read(), write() calls avoid blocking the current thread. When non-blocking is enabled: - A read() call returns -1 with errno set to EAGAIN when no data or EOF information is immediately available. - A write() call returns -1 with errno set to EAGAIN when it cannot transport the requested amount of data (but at most one pipe buffer) without blocking. Non-blocking I/O is most useful for character devices, pipes, and sockets. Whether it also works on regular files and block devices is platform dependent. There are three modern alternatives to non-blocking I/O: - use select() or poll() followed by read() or write() if the descriptor is ready, - call read() or write() in separate threads, - use <aio.h> interfaces. */ #ifdef __cplusplus extern "C" { #endif /* Return 1 if I/O to the descriptor DESC is currently non-blocking, 0 it is blocking, or -1 with errno set if fd is invalid or blocking status cannot be determined (such as with sockets on mingw). */ extern int get_nonblocking_flag (int desc); /* Specify the non-blocking flag for the descriptor DESC. Return 0 upon success, or -1 with errno set upon failure. The default depends on the presence of the O_NONBLOCK flag for files or pipes opened with open() or on the presence of the SOCK_NONBLOCK flag for sockets. */ extern int set_nonblocking_flag (int desc, bool value); #ifdef __cplusplus } #endif #endif /* _NONBLOCKING_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/noreturn.h��������������������������������������������������������������0000664�0000000�0000000�00000011114�14110572173�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for declaring functions as non-returning. Copyright (C) 2017-2021 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 _NORETURN_H #define _NORETURN_H 1 /* A "non-returning" function is a function which cannot return normally. It can transfer control only through longjmp(), throw (in C++), or similar mechanisms. This file defines two macros _GL_NORETURN_FUNC and _GL_NORETURN_FUNCPTR, that declare a function to be non-returning. _GL_NORETURN_FUNC is for use in function declarations and function definitions. _GL_NORETURN_FUNCPTR is for use on function pointers. Comparison of this file with <stdnoreturn.h>: <stdnoreturn.h> defines a macro (or keyword) _Noreturn that declares a function to be non-returning. _Noreturn is only for use in function declarations and function definitions. Therefore, if the non-returning functions you have to declare are unlikely to be accessed through function pointers, and if the efficiency with C++ compilers other than g++, clang, MSVC++ is not an issue to you, you can use module 'stdnoreturn' instead of this one, and _Noreturn instead of _GL_NORETURN_FUNC. */ /* Declares that a function is nonreturning. Use in C only code: _GL_NORETURN_FUNC extern void func (void); extern _GL_NORETURN_FUNC void func (void); extern void _GL_NORETURN_FUNC func (void); Use in C++ only code for a function with C linkage: extern "C" { _GL_NORETURN_FUNC void func (void); } Use in C++ only code for a function with C++ linkage: _GL_NORETURN_FUNC extern void func (void); Use in C & C++ code for a function with C linkage: #ifdef __cplusplus extern "C" { #endif _GL_NORETURN_FUNC void func (void); #ifdef __cplusplus } #endif Use in C & C++ code for a function with current language linkage: _GL_NORETURN_FUNC extern void func (void); */ #if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) \ || defined __clang__ \ || (0x5110 <= __SUNPRO_C) /* For compatibility with _GL_NORETURN_FUNCPTR on clang, use __attribute__((__noreturn__)), not _Noreturn. */ # define _GL_NORETURN_FUNC __attribute__ ((__noreturn__)) #elif 1200 <= _MSC_VER /* Use MSVC specific syntax. */ # define _GL_NORETURN_FUNC __declspec (noreturn) #elif defined __cplusplus /* Use ISO C++11 syntax when the compiler supports it. */ # if (__cplusplus >= 201103 && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (_MSC_VER >= 1900) # define _GL_NORETURN_FUNC [[noreturn]] /* clang++ supports the _Noreturn keyword, but g++ doesn't. */ # elif defined __clang__ # define _GL_NORETURN_FUNC _Noreturn # else # define _GL_NORETURN_FUNC /* empty */ # endif #else /* Use ISO C11 syntax when the compiler supports it. */ # if __STDC_VERSION__ >= 201112 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) # define _GL_NORETURN_FUNC _Noreturn # else # define _GL_NORETURN_FUNC /* empty */ # endif #endif /* Declares that a function is nonreturning. Use in types and declarations that involve function pointers: _GL_NORETURN_FUNCPTR void (*funcptr) (void); */ #if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__)) \ || defined __clang__ \ || (0x5110 <= __SUNPRO_C) # define _GL_NORETURN_FUNCPTR __attribute__ ((__noreturn__)) #else # define _GL_NORETURN_FUNCPTR /* empty */ #endif /* Comments about the compiler dependent language features: - '_Noreturn' - standardized by ISO C11, available in C only (not in C++), and not applicable to pointers. - '[[noreturn]]' - standardized by ISO C++11, available in C++ only, and not applicable to pointers. - '__attribute__((__noreturn__))' - available in GCC and clang only, both in C and C++. - '__declspec(noreturn)' - available in MSVC only, both in C and C++, not applicable to pointers. */ #endif /* _NORETURN_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nproc.c�����������������������������������������������������������������0000664�0000000�0000000�00000025460�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 2009-2021 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 Glen Lenker and Bruno Haible. */ #include <config.h> #include "nproc.h" #include <limits.h> #include <stdlib.h> #include <unistd.h> #if HAVE_PTHREAD_GETAFFINITY_NP && 0 # include <pthread.h> # include <sched.h> #endif #if HAVE_SCHED_GETAFFINITY_LIKE_GLIBC || HAVE_SCHED_GETAFFINITY_NP # include <sched.h> #endif #include <sys/types.h> #if HAVE_SYS_PSTAT_H # include <sys/pstat.h> #endif #if HAVE_SYS_SYSMP_H # include <sys/sysmp.h> #endif #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if HAVE_SYS_SYSCTL_H && ! defined __GLIBC__ # include <sys/sysctl.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #include "c-ctype.h" #include "minmax.h" #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) /* Return the number of processors available to the current process, based on a modern system call that returns the "affinity" between the current process and each CPU. Return 0 if unknown or if such a system call does not exist. */ static unsigned long num_processors_via_affinity_mask (void) { /* glibc >= 2.3.3 with NPTL and NetBSD 5 have pthread_getaffinity_np, but with different APIs. Also it requires linking with -lpthread. Therefore this code is not enabled. glibc >= 2.3.4 has sched_getaffinity whereas NetBSD 5 has sched_getaffinity_np. */ #if HAVE_PTHREAD_GETAFFINITY_NP && defined __GLIBC__ && 0 { cpu_set_t set; if (pthread_getaffinity_np (pthread_self (), sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_PTHREAD_GETAFFINITY_NP && defined __NetBSD__ && 0 { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (pthread_getaffinity_np (pthread_self (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* glibc >= 2.3.4 */ { cpu_set_t set; if (sched_getaffinity (0, sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_NP /* NetBSD >= 5 */ { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (sched_getaffinity_np (getpid (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #endif #if defined _WIN32 && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ DWORD_PTR process_mask; DWORD_PTR system_mask; if (GetProcessAffinityMask (GetCurrentProcess (), &process_mask, &system_mask)) { DWORD_PTR mask = process_mask; unsigned long count = 0; for (; mask != 0; mask = mask >> 1) if (mask & 1) count++; if (count > 0) return count; } } #endif return 0; } /* Return the total number of processors. Here QUERY must be one of NPROC_ALL, NPROC_CURRENT. The result is guaranteed to be at least 1. */ static unsigned long int num_processors_ignoring_omp (enum nproc_query query) { /* On systems with a modern affinity mask system call, we have sysconf (_SC_NPROCESSORS_CONF) >= sysconf (_SC_NPROCESSORS_ONLN) >= num_processors_via_affinity_mask () The first number is the number of CPUs configured in the system. The second number is the number of CPUs available to the scheduler. The third number is the number of CPUs available to the current process. Note! On Linux systems with glibc, the first and second number come from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1 or 2 (<https://sourceware.org/bugzilla/show_bug.cgi?id=21542>), which does not reflect the reality. */ if (query == NPROC_CURRENT) { /* Try the modern affinity mask system call. */ { unsigned long nprocs = num_processors_via_affinity_mask (); if (nprocs > 0) return nprocs; } #if defined _SC_NPROCESSORS_ONLN { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_ONLN); if (nprocs > 0) return nprocs; } #endif } else /* query == NPROC_ALL */ { #if defined _SC_NPROCESSORS_CONF { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_CONF); # if __GLIBC__ >= 2 && defined __linux__ /* On Linux systems with glibc, this information comes from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1 or 2. But we wish to guarantee that num_processors (NPROC_ALL) >= num_processors (NPROC_CURRENT). */ if (nprocs == 1 || nprocs == 2) { unsigned long nprocs_current = num_processors_via_affinity_mask (); if (/* nprocs_current > 0 && */ nprocs_current > nprocs) nprocs = nprocs_current; } # endif if (nprocs > 0) return nprocs; } #endif } #if HAVE_PSTAT_GETDYNAMIC { /* This works on HP-UX. */ struct pst_dynamic psd; if (pstat_getdynamic (&psd, sizeof psd, 1, 0) >= 0) { /* The field psd_proc_cnt contains the number of active processors. In newer releases of HP-UX 11, the field psd_max_proc_cnt includes deactivated processors. */ if (query == NPROC_CURRENT) { if (psd.psd_proc_cnt > 0) return psd.psd_proc_cnt; } else { if (psd.psd_max_proc_cnt > 0) return psd.psd_max_proc_cnt; } } } #endif #if HAVE_SYSMP && defined MP_NAPROCS && defined MP_NPROCS { /* This works on IRIX. */ /* MP_NPROCS yields the number of installed processors. MP_NAPROCS yields the number of processors available to unprivileged processes. */ int nprocs = sysmp (query == NPROC_CURRENT && getuid () != 0 ? MP_NAPROCS : MP_NPROCS); if (nprocs > 0) return nprocs; } #endif /* Finally, as fallback, use the APIs that don't distinguish between NPROC_CURRENT and NPROC_ALL. */ #if HAVE_SYSCTL && ! defined __GLIBC__ && defined HW_NCPU { /* This works on Mac OS X, FreeBSD, NetBSD, OpenBSD. */ int nprocs; size_t len = sizeof (nprocs); static int mib[2] = { CTL_HW, HW_NCPU }; if (sysctl (mib, ARRAY_SIZE (mib), &nprocs, &len, NULL, 0) == 0 && len == sizeof (nprocs) && 0 < nprocs) return nprocs; } #endif #if defined _WIN32 && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ SYSTEM_INFO system_info; GetSystemInfo (&system_info); if (0 < system_info.dwNumberOfProcessors) return system_info.dwNumberOfProcessors; } #endif return 1; } /* Parse OMP environment variables without dependence on OMP. Return 0 for invalid values. */ static unsigned long int parse_omp_threads (char const* threads) { unsigned long int ret = 0; if (threads == NULL) return ret; /* The OpenMP spec says that the value assigned to the environment variables "may have leading and trailing white space". */ while (*threads != '\0' && c_isspace (*threads)) threads++; /* Convert it from positive decimal to 'unsigned long'. */ if (c_isdigit (*threads)) { char *endptr = NULL; unsigned long int value = strtoul (threads, &endptr, 10); if (endptr != NULL) { while (*endptr != '\0' && c_isspace (*endptr)) endptr++; if (*endptr == '\0') return value; /* Also accept the first value in a nesting level, since we can't determine the nesting level from env vars. */ else if (*endptr == ',') return value; } } return ret; } unsigned long int num_processors (enum nproc_query query) { unsigned long int omp_env_limit = ULONG_MAX; if (query == NPROC_CURRENT_OVERRIDABLE) { unsigned long int omp_env_threads; /* Honor the OpenMP environment variables, recognized also by all programs that are based on OpenMP. */ omp_env_threads = parse_omp_threads (getenv ("OMP_NUM_THREADS")); omp_env_limit = parse_omp_threads (getenv ("OMP_THREAD_LIMIT")); if (! omp_env_limit) omp_env_limit = ULONG_MAX; if (omp_env_threads) return MIN (omp_env_threads, omp_env_limit); query = NPROC_CURRENT; } /* Here query is one of NPROC_ALL, NPROC_CURRENT. */ { unsigned long nprocs = num_processors_ignoring_omp (query); return MIN (nprocs, omp_env_limit); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nproc.h�����������������������������������������������������������������0000664�0000000�0000000�00000003353�14110572173�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 2009-2021 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 Glen Lenker and Bruno Haible. */ /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* A "processor" in this context means a thread execution unit, that is either - an execution core in a (possibly multi-core) chip, in a (possibly multi- chip) module, in a single computer, or - a thread execution unit inside a core (hyper-threading, see <https://en.wikipedia.org/wiki/Hyper-threading>). Which of the two definitions is used, is unspecified. */ enum nproc_query { NPROC_ALL, /* total number of processors */ NPROC_CURRENT, /* processors available to the current process */ NPROC_CURRENT_OVERRIDABLE /* likewise, but overridable through the OMP_NUM_THREADS environment variable */ }; /* Return the total number of processors. The result is guaranteed to be at least 1. */ extern unsigned long int num_processors (enum nproc_query query); #ifdef __cplusplus } #endif /* C++ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/nstrftime.c�������������������������������������������������������������0000664�0000000�0000000�00000140665�14110572173�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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/>. */ #ifdef _LIBC # define USE_IN_EXTENDED_LOCALE_MODEL 1 # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_STRUCT_TM_TM_ZONE 1 # define HAVE_TZNAME 1 # include "../locale/localeinfo.h" #else # include <config.h> # if FPRINTFTIME # include "fprintftime.h" # else # include "strftime.h" # endif # include "time-internal.h" #endif #include <ctype.h> #include <errno.h> #include <time.h> #if HAVE_TZNAME && !HAVE_DECL_TZNAME extern char *tzname[]; #endif /* Do multibyte processing if multibyte encodings are supported, unless multibyte sequences are safe in formats. Multibyte sequences are safe if they cannot contain byte sequences that look like format conversion specifications. The multibyte encodings used by the C library on the various platforms (UTF-8, GB2312, GBK, CP936, GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' cannot occur in a multibyte character except in the first byte. The DEC-HANYU encoding used on OSF/1 is not safe for formats, but this encoding has never been seen in real-life use, so we ignore it. */ #if !(defined __osf__ && 0) # define MULTIBYTE_IS_FORMAT_SAFE 1 #endif #define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) #if DO_MULTIBYTE # include <wchar.h> static const mbstate_t mbstate_zero; #endif #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "attribute.h" #include <intprops.h> #ifdef COMPILE_WIDE # include <endian.h> # define CHAR_T wchar_t # define UCHAR_T unsigned int # define L_(Str) L##Str # define NLW(Sym) _NL_W##Sym # define MEMCPY(d, s, n) __wmemcpy (d, s, n) # define STRLEN(s) __wcslen (s) #else # define CHAR_T char # define UCHAR_T unsigned char # define L_(Str) Str # define NLW(Sym) Sym # define ABALTMON_1 _NL_ABALTMON_1 # define MEMCPY(d, s, n) memcpy (d, s, n) # define STRLEN(s) strlen (s) #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : ((a) + ((a) < 0)) / (1 << (b)) - ((a) < 0)) #define TM_YEAR_BASE 1900 #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ # define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif #ifdef _LIBC # define mktime_z(tz, tm) mktime (tm) # define tzname __tzname # define tzset __tzset #endif #ifndef FPRINTFTIME # define FPRINTFTIME 0 #endif #if FPRINTFTIME # define STREAM_OR_CHAR_T FILE # define STRFTIME_ARG(x) /* empty */ #else # define STREAM_OR_CHAR_T CHAR_T # define STRFTIME_ARG(x) x, #endif #if FPRINTFTIME # define memset_byte(P, Len, Byte) \ do { size_t _i; for (_i = 0; _i < Len; _i++) fputc (Byte, P); } while (0) # define memset_space(P, Len) memset_byte (P, Len, ' ') # define memset_zero(P, Len) memset_byte (P, Len, '0') #elif defined COMPILE_WIDE # define memset_space(P, Len) (wmemset (P, L' ', Len), (P) += (Len)) # define memset_zero(P, Len) (wmemset (P, L'0', Len), (P) += (Len)) #else # define memset_space(P, Len) (memset (P, ' ', Len), (P) += (Len)) # define memset_zero(P, Len) (memset (P, '0', Len), (P) += (Len)) #endif #if FPRINTFTIME # define advance(P, N) #else # define advance(P, N) ((P) += (N)) #endif #define add(n, f) width_add (width, n, f) #define width_add(width, n, f) \ do \ { \ size_t _n = (n); \ size_t _w = pad == L_('-') || width < 0 ? 0 : width; \ size_t _incr = _n < _w ? _w : _n; \ if (_incr >= maxsize - i) \ { \ errno = ERANGE; \ return 0; \ } \ if (p) \ { \ if (_n < _w) \ { \ size_t _delta = _w - _n; \ if (pad == L_('0') || pad == L_('+')) \ memset_zero (p, _delta); \ else \ memset_space (p, _delta); \ } \ f; \ advance (p, _n); \ } \ i += _incr; \ } while (0) #define add1(c) width_add1 (width, c) #if FPRINTFTIME # define width_add1(width, c) width_add (width, 1, fputc (c, p)) #else # define width_add1(width, c) width_add (width, 1, *p = c) #endif #define cpy(n, s) width_cpy (width, n, s) #if FPRINTFTIME # define width_cpy(width, n, s) \ width_add (width, n, \ do \ { \ if (to_lowcase) \ fwrite_lowcase (p, (s), _n); \ else if (to_uppcase) \ fwrite_uppcase (p, (s), _n); \ else \ { \ /* Ignore the value of fwrite. The caller can determine whether \ an error occurred by inspecting ferror (P). All known fwrite \ implementations set the stream's error indicator when they \ fail due to ENOMEM etc., even though C11 and POSIX.1-2008 do \ not require this. */ \ fwrite (s, _n, 1, p); \ } \ } \ while (0) \ ) #else # define width_cpy(width, n, s) \ width_add (width, n, \ if (to_lowcase) \ memcpy_lowcase (p, (s), _n LOCALE_ARG); \ else if (to_uppcase) \ memcpy_uppcase (p, (s), _n LOCALE_ARG); \ else \ MEMCPY ((void *) p, (void const *) (s), _n)) #endif #ifdef COMPILE_WIDE # ifndef USE_IN_EXTENDED_LOCALE_MODEL # undef __mbsrtowcs_l # define __mbsrtowcs_l(d, s, l, st, loc) __mbsrtowcs (d, s, l, st) # endif # define widen(os, ws, l) \ { \ mbstate_t __st; \ const char *__s = os; \ memset (&__st, '\0', sizeof (__st)); \ l = __mbsrtowcs_l (NULL, &__s, 0, &__st, loc); \ ws = (wchar_t *) alloca ((l + 1) * sizeof (wchar_t)); \ (void) __mbsrtowcs_l (ws, &__s, l, &__st, loc); \ } #endif #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ # define strftime __strftime_l # define wcsftime __wcsftime_l # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # define LOCALE_PARAM , locale_t loc # define LOCALE_ARG , loc # define HELPER_LOCALE_ARG , current #else # define LOCALE_PARAM # define LOCALE_ARG # ifdef _LIBC # define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) # else # define HELPER_LOCALE_ARG # endif #endif #ifdef COMPILE_WIDE # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __towupper_l (Ch, L) # define TOLOWER(Ch, L) __towlower_l (Ch, L) # else # define TOUPPER(Ch, L) towupper (Ch) # define TOLOWER(Ch, L) towlower (Ch) # endif #else # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __toupper_l (Ch, L) # define TOLOWER(Ch, L) __tolower_l (Ch, L) # else # define TOUPPER(Ch, L) toupper (Ch) # define TOLOWER(Ch, L) tolower (Ch) # endif #endif /* We don't use 'isdigit' here since the locale dependent interpretation is not what we want here. We only need to accept the arabic digits in the ASCII range. One day there is perhaps a more reliable way to accept other sets of digits. */ #define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9) #if FPRINTFTIME static void fwrite_lowcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOLOWER ((UCHAR_T) *src, loc), fp); ++src; } } static void fwrite_uppcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOUPPER ((UCHAR_T) *src, loc), fp); ++src; } } #else static CHAR_T *memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOLOWER ((UCHAR_T) src[len], loc); return dest; } static CHAR_T *memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOUPPER ((UCHAR_T) src[len], loc); return dest; } #endif #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. */ # define tm_diff ftime_tm_diff static int tm_diff (const struct tm *, const struct tm *); static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ /* The number of days from the first day of the first ISO week of this year to the year day YDAY with week day WDAY. ISO weeks start on Monday; the first ISO week has the year's first Thursday. YDAY may be as small as YDAY_MINIMUM. */ #define ISO_WEEK_START_WDAY 1 /* Monday */ #define ISO_WEEK1_WDAY 4 /* Thursday */ #define YDAY_MINIMUM (-366) static int iso_week_days (int, int); #if defined __GNUC__ || defined __clang__ __inline__ #endif static int iso_week_days (int yday, int wday) { /* Add enough to the first operand of % to make it nonnegative. */ int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; return (yday - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); } /* When compiling this file, GNU applications can #define my_strftime to a symbol (typically nstrftime) to get an extended strftime with extra arguments TZ and NS. */ #if FPRINTFTIME # undef my_strftime # define my_strftime fprintftime #endif #ifdef my_strftime # define extra_args , tz, ns # define extra_args_spec , timezone_t tz, int ns #else # if defined COMPILE_WIDE # define my_strftime wcsftime # define nl_get_alt_digit _nl_get_walt_digit # else # define my_strftime strftime # define nl_get_alt_digit _nl_get_alt_digit # endif # define extra_args # define extra_args_spec /* We don't have this information in general. */ # define tz 1 # define ns 0 #endif static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t) const CHAR_T *, const struct tm *, bool, int, int, bool * extra_args_spec LOCALE_PARAM); /* Write information from TP into S according to the format string FORMAT, writing no more that MAXSIZE characters (including the terminating '\0') and returning number of characters written. If S is NULL, nothing will be written anywhere, so to determine how many characters would be written, use NULL for S and (size_t) -1 for MAXSIZE. */ size_t my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp extra_args_spec LOCALE_PARAM) { bool tzset_called = false; return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, false, 0, -1, &tzset_called extra_args LOCALE_ARG); } #if defined _LIBC && ! FPRINTFTIME libc_hidden_def (my_strftime) #endif /* Just like my_strftime, above, but with more parameters. UPCASE indicates that the result should be converted to upper case. YR_SPEC and WIDTH specify the padding and width for the year. *TZSET_CALLED indicates whether tzset has been called here. */ static size_t __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp, bool upcase, int yr_spec, int width, bool *tzset_called extra_args_spec LOCALE_PARAM) { #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL struct __locale_data *const current = loc->__locales[LC_TIME]; #endif #if FPRINTFTIME size_t maxsize = (size_t) -1; #endif int saved_errno = errno; int hour12 = tp->tm_hour; #ifdef _NL_CURRENT /* We cannot make the following values variables since we must delay the evaluation of these values until really needed since some expressions might not be valid in every situation. The 'struct tm' might be generated by a strptime() call that initialized only a few elements. Dereference the pointers only if the format requires this. Then it is ok to fail if the pointers are invalid. */ # define a_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))) # define f_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))) # define a_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))) # define f_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))) # define a_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABALTMON_1) + tp->tm_mon))) # define f_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ALTMON_1) + tp->tm_mon))) # define ampm \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \ ? NLW(PM_STR) : NLW(AM_STR))) # define aw_len STRLEN (a_wkday) # define am_len STRLEN (a_month) # define aam_len STRLEN (a_altmonth) # define ap_len STRLEN (ampm) #endif #if HAVE_TZNAME char **tzname_vec = tzname; #endif const char *zone; size_t i = 0; STREAM_OR_CHAR_T *p = s; const CHAR_T *f; #if DO_MULTIBYTE && !defined COMPILE_WIDE const char *format_end = NULL; #endif zone = NULL; #if HAVE_STRUCT_TM_TM_ZONE /* The POSIX test suite assumes that setting the environment variable TZ to a new value before calling strftime() will influence the result (the %Z format) even if the information in TP is computed with a totally different time zone. This is bogus: though POSIX allows bad behavior like this, POSIX does not require it. Do the right thing instead. */ zone = (const char *) tp->tm_zone; #endif #if HAVE_TZNAME if (!tz) { if (! (zone && *zone)) zone = "GMT"; } else { # if !HAVE_STRUCT_TM_TM_ZONE /* Infer the zone name from *TZ instead of from TZNAME. */ tzname_vec = tz->tzname_copy; # endif } /* The tzset() call might have changed the value. */ if (!(zone && *zone) && tp->tm_isdst >= 0) { /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif zone = tzname_vec[tp->tm_isdst != 0]; } #endif if (! zone) zone = ""; if (hour12 > 12) hour12 -= 12; else if (hour12 == 0) hour12 = 12; for (f = format; *f != '\0'; width = -1, f++) { int pad = 0; /* Padding for number ('_', '-', '+', '0', or 0). */ int modifier; /* Field modifier ('E', 'O', or 0). */ int digits = 0; /* Max digits for numeric format. */ int number_value; /* Numeric value to be printed. */ unsigned int u_number_value; /* (unsigned int) number_value. */ bool negative_number; /* The number is negative. */ bool always_output_a_sign; /* +/- should always be output. */ int tz_colon_mask; /* Bitmask of where ':' should appear. */ const CHAR_T *subfmt; CHAR_T *bufp; CHAR_T buf[1 + 2 /* for the two colons in a %::z or %:::z time zone */ + (sizeof (int) < sizeof (time_t) ? INT_STRLEN_BOUND (time_t) : INT_STRLEN_BOUND (int))]; bool to_lowcase = false; bool to_uppcase = upcase; size_t colons; bool change_case = false; int format_char; int subwidth; #if DO_MULTIBYTE && !defined COMPILE_WIDE switch (*f) { case L_('%'): break; case L_('\b'): case L_('\t'): case L_('\n'): case L_('\v'): case L_('\f'): case L_('\r'): case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'): case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'): case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'): case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'): case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'): case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'): case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'): case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'): case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'): case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'): case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'): case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'): case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'): case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'): case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'): case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'): case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'): case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'): case L_('~'): /* The C Standard requires these 98 characters (plus '%') to be in the basic execution character set. None of these characters can start a multibyte sequence, so they need not be analyzed further. */ add1 (*f); continue; default: /* Copy this multibyte sequence until we reach its end, find an error, or come back to the initial shift state. */ { mbstate_t mbstate = mbstate_zero; size_t len = 0; size_t fsize; if (! format_end) format_end = f + strlen (f) + 1; fsize = format_end - f; do { size_t bytes = mbrlen (f + len, fsize - len, &mbstate); if (bytes == 0) break; if (bytes == (size_t) -2) { len += strlen (f + len); break; } if (bytes == (size_t) -1) { len++; break; } len += bytes; } while (! mbsinit (&mbstate)); cpy (len, f); f += len - 1; continue; } } #else /* ! DO_MULTIBYTE */ /* Either multibyte encodings are not supported, they are safe for formats, so any non-'%' byte can be copied through, or this is the wide character version. */ if (*f != L_('%')) { add1 (*f); continue; } #endif /* ! DO_MULTIBYTE */ /* Check for flags that can modify a format. */ while (1) { switch (*++f) { /* This influences the number formats. */ case L_('_'): case L_('-'): case L_('+'): case L_('0'): pad = *f; continue; /* This changes textual output. */ case L_('^'): to_uppcase = true; continue; case L_('#'): change_case = true; continue; default: break; } break; } if (ISDIGIT (*f)) { width = 0; do { if (INT_MULTIPLY_WRAPV (width, 10, &width) || INT_ADD_WRAPV (width, *f - L_('0'), &width)) width = INT_MAX; ++f; } while (ISDIGIT (*f)); } /* Check for modifiers. */ switch (*f) { case L_('E'): case L_('O'): modifier = *f++; break; default: modifier = 0; break; } /* Now do the specified format. */ format_char = *f; switch (format_char) { #define DO_NUMBER(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number; \ } \ while (0) #define DO_SIGNED_NUMBER(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_signed_number) #define DO_YEARISH(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_yearish) #define DO_MAYBE_SIGNED_NUMBER(d, negative, v, label) \ do \ { \ digits = d; \ negative_number = negative; \ u_number_value = v; \ goto label; \ } \ while (0) /* The mask is not what you might think. When the ordinal i'th bit is set, insert a colon before the i'th digit of the time zone representation. */ #define DO_TZ_OFFSET(d, mask, v) \ do \ { \ digits = d; \ tz_colon_mask = mask; \ u_number_value = v; \ goto do_tz_offset; \ } \ while (0) #define DO_NUMBER_SPACEPAD(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number_spacepad; \ } \ while (0) case L_('%'): if (modifier != 0) goto bad_format; add1 (*f); break; case L_('a'): if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (aw_len, a_wkday); break; #else goto underlying_strftime; #endif case 'A': if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (STRLEN (f_wkday), f_wkday); break; #else goto underlying_strftime; #endif case L_('b'): case L_('h'): if (change_case) { to_uppcase = true; to_lowcase = false; } if (modifier == L_('E')) goto bad_format; #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (aam_len, a_altmonth); else cpy (am_len, a_month); break; #else goto underlying_strftime; #endif case L_('B'): if (modifier == L_('E')) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (STRLEN (f_altmonth), f_altmonth); else cpy (STRLEN (f_month), f_month); break; #else goto underlying_strftime; #endif case L_('c'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_T_FMT))) != '\0'))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT)); #else goto underlying_strftime; #endif subformat: subwidth = -1; subformat_width: { size_t len = __strftime_internal (NULL, STRFTIME_ARG ((size_t) -1) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG); add (len, __strftime_internal (p, STRFTIME_ARG (maxsize - i) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG)); } break; #if !(defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY) underlying_strftime: { /* The relevant information is available only via the underlying strftime implementation, so use that. */ char ufmt[5]; char *u = ufmt; char ubuf[1024]; /* enough for any single format in practice */ size_t len; /* Make sure we're calling the actual underlying strftime. In some cases, config.h contains something like "#define strftime rpl_strftime". */ # ifdef strftime # undef strftime size_t strftime (); # endif /* The space helps distinguish strftime failure from empty output. */ *u++ = ' '; *u++ = '%'; if (modifier != 0) *u++ = modifier; *u++ = format_char; *u = '\0'; len = strftime (ubuf, sizeof ubuf, ufmt, tp); if (len != 0) cpy (len - 1, ubuf + 1); } break; #endif case L_('C'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE size_t len = __wcslen (era->era_wname); cpy (len, era->era_wname); # else size_t len = strlen (era->era_name); cpy (len, era->era_name); # endif break; } #else goto underlying_strftime; #endif } { bool negative_year = tp->tm_year < - TM_YEAR_BASE; bool zero_thru_1899 = !negative_year & (tp->tm_year < 0); int century = ((tp->tm_year - 99 * zero_thru_1899) / 100 + TM_YEAR_BASE / 100); DO_YEARISH (2, negative_year, century); } case L_('x'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('D'): if (modifier != 0) goto bad_format; subfmt = L_("%m/%d/%y"); goto subformat; case L_('d'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_mday); case L_('e'): if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_mday); /* All numeric formats set DIGITS and NUMBER_VALUE (or U_NUMBER_VALUE) and then jump to one of these labels. */ do_tz_offset: always_output_a_sign = true; goto do_number_body; do_yearish: if (pad == 0) pad = yr_spec; always_output_a_sign = (pad == L_('+') && ((digits == 2 ? 99 : 9999) < u_number_value || digits < width)); goto do_maybe_signed_number; do_number_spacepad: if (pad == 0) pad = L_('_'); do_number: /* Format NUMBER_VALUE according to the MODIFIER flag. */ negative_number = number_value < 0; u_number_value = number_value; do_signed_number: always_output_a_sign = false; do_maybe_signed_number: tz_colon_mask = 0; do_number_body: /* Format U_NUMBER_VALUE according to the MODIFIER flag. NEGATIVE_NUMBER is nonzero if the original number was negative; in this case it was converted directly to unsigned int (i.e., modulo (UINT_MAX + 1)) without negating it. */ if (modifier == L_('O') && !negative_number) { #ifdef _NL_CURRENT /* Get the locale specific alternate representation of the number. If none exist NULL is returned. */ const CHAR_T *cp = nl_get_alt_digit (u_number_value HELPER_LOCALE_ARG); if (cp != NULL) { size_t digitlen = STRLEN (cp); if (digitlen != 0) { cpy (digitlen, cp); break; } } #else goto underlying_strftime; #endif } bufp = buf + sizeof (buf) / sizeof (buf[0]); if (negative_number) u_number_value = - u_number_value; do { if (tz_colon_mask & 1) *--bufp = ':'; tz_colon_mask >>= 1; *--bufp = u_number_value % 10 + L_('0'); u_number_value /= 10; } while (u_number_value != 0 || tz_colon_mask != 0); do_number_sign_and_padding: if (pad == 0) pad = L_('0'); if (width < 0) width = digits; { CHAR_T sign_char = (negative_number ? L_('-') : always_output_a_sign ? L_('+') : 0); int numlen = buf + sizeof buf / sizeof buf[0] - bufp; int shortage = width - !!sign_char - numlen; int padding = pad == L_('-') || shortage <= 0 ? 0 : shortage; if (sign_char) { if (pad == L_('_')) { if (p) memset_space (p, padding); i += padding; width -= padding; } width_add1 (0, sign_char); width--; } cpy (numlen, bufp); } break; case L_('F'): if (modifier != 0) goto bad_format; if (pad == 0 && width < 0) { pad = L_('+'); subwidth = 4; } else { subwidth = width - 6; if (subwidth < 0) subwidth = 0; } subfmt = L_("%Y-%m-%d"); goto subformat_width; case L_('H'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_hour); case L_('I'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, hour12); case L_('k'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_hour); case L_('l'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, hour12); case L_('j'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (3, tp->tm_yday < -1, tp->tm_yday + 1U); case L_('M'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_min); case L_('m'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (2, tp->tm_mon < -1, tp->tm_mon + 1U); #ifndef _LIBC case L_('N'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; { int n = ns, ns_digits = 9; if (width <= 0) width = ns_digits; int ndigs = ns_digits; while (width < ndigs || (1 < ndigs && n % 10 == 0)) ndigs--, n /= 10; for (int j = ndigs; 0 < j; j--) buf[j - 1] = n % 10 + L_('0'), n /= 10; if (!pad) pad = L_('0'); width_cpy (0, ndigs, buf); width_add (width - ndigs, 0, (void) 0); } break; #endif case L_('n'): add1 (L_('\n')); break; case L_('P'): to_lowcase = true; #ifndef _NL_CURRENT format_char = L_('p'); #endif FALLTHROUGH; case L_('p'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef _NL_CURRENT cpy (ap_len, ampm); break; #else goto underlying_strftime; #endif case L_('q'): /* GNU extension. */ DO_SIGNED_NUMBER (1, false, ((tp->tm_mon * 11) >> 5) + 1); break; case L_('R'): subfmt = L_("%H:%M"); goto subformat; case L_('r'): #ifdef _NL_CURRENT if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT_AMPM))) == L_('\0')) subfmt = L_("%I:%M:%S %p"); goto subformat; #else goto underlying_strftime; #endif case L_('S'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_sec); case L_('s'): /* GNU extension. */ { struct tm ltm; time_t t; ltm = *tp; ltm.tm_yday = -1; t = mktime_z (tz, <m); if (ltm.tm_yday < 0) { errno = EOVERFLOW; return 0; } /* Generate string value for T using time_t arithmetic; this works even if sizeof (long) < sizeof (time_t). */ bufp = buf + sizeof (buf) / sizeof (buf[0]); negative_number = t < 0; do { int d = t % 10; t /= 10; *--bufp = (negative_number ? -d : d) + L_('0'); } while (t != 0); digits = 1; always_output_a_sign = false; goto do_number_sign_and_padding; } case L_('X'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('T'): subfmt = L_("%H:%M:%S"); goto subformat; case L_('t'): add1 (L_('\t')); break; case L_('u'): DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); case L_('U'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); case L_('V'): case L_('g'): case L_('G'): if (modifier == L_('E')) goto bad_format; { /* YEAR is a leap year if and only if (tp->tm_year + TM_YEAR_BASE) is a leap year, except that YEAR and YEAR - 1 both work correctly even when (tp->tm_year + TM_YEAR_BASE) would overflow. */ int year = (tp->tm_year + (tp->tm_year < 0 ? TM_YEAR_BASE % 400 : TM_YEAR_BASE % 400 - 400)); int year_adjust = 0; int days = iso_week_days (tp->tm_yday, tp->tm_wday); if (days < 0) { /* This ISO week belongs to the previous year. */ year_adjust = -1; days = iso_week_days (tp->tm_yday + (365 + __isleap (year - 1)), tp->tm_wday); } else { int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), tp->tm_wday); if (0 <= d) { /* This ISO week belongs to the next year. */ year_adjust = 1; days = d; } } switch (*f) { case L_('g'): { int yy = (tp->tm_year % 100 + year_adjust) % 100; DO_YEARISH (2, false, (0 <= yy ? yy : tp->tm_year < -TM_YEAR_BASE - year_adjust ? -yy : yy + 100)); } case L_('G'): DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE - year_adjust, (tp->tm_year + (unsigned int) TM_YEAR_BASE + year_adjust)); default: DO_NUMBER (2, days / 7 + 1); } } case L_('W'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); case L_('w'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (1, tp->tm_wday); case L_('Y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE subfmt = era->era_wformat; # else subfmt = era->era_format; # endif if (pad == 0) pad = yr_spec; goto subformat; } #else goto underlying_strftime; #endif } if (modifier == L_('O')) goto bad_format; DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE, tp->tm_year + (unsigned int) TM_YEAR_BASE); case L_('y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { int delta = tp->tm_year - era->start_date[0]; if (pad == 0) pad = yr_spec; DO_NUMBER (2, (era->offset + delta * era->absolute_direction)); } #else goto underlying_strftime; #endif } { int yy = tp->tm_year % 100; if (yy < 0) yy = tp->tm_year < - TM_YEAR_BASE ? -yy : yy + 100; DO_YEARISH (2, false, yy); } case L_('Z'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef COMPILE_WIDE { /* The zone string is always given in multibyte form. We have to transform it first. */ wchar_t *wczone; size_t len; widen (zone, wczone, len); cpy (len, wczone); } #else cpy (strlen (zone), zone); #endif break; case L_(':'): /* :, ::, and ::: are valid only just before 'z'. :::: etc. are rejected later. */ for (colons = 1; f[colons] == L_(':'); colons++) continue; if (f[colons] != L_('z')) goto bad_format; f += colons; goto do_z_conversion; case L_('z'): colons = 0; do_z_conversion: if (tp->tm_isdst < 0) break; { int diff; int hour_diff; int min_diff; int sec_diff; #if HAVE_TM_GMTOFF diff = tp->tm_gmtoff; #else if (!tz) diff = 0; else { struct tm gtm; struct tm ltm; time_t lt; /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif ltm = *tp; ltm.tm_wday = -1; lt = mktime_z (tz, <m); if (ltm.tm_wday < 0 || ! localtime_rz (0, <, >m)) break; diff = tm_diff (<m, >m); } #endif negative_number = diff < 0 || (diff == 0 && *zone == '-'); hour_diff = diff / 60 / 60; min_diff = diff / 60 % 60; sec_diff = diff % 60; switch (colons) { case 0: /* +hhmm */ DO_TZ_OFFSET (5, 0, hour_diff * 100 + min_diff); case 1: tz_hh_mm: /* +hh:mm */ DO_TZ_OFFSET (6, 04, hour_diff * 100 + min_diff); case 2: tz_hh_mm_ss: /* +hh:mm:ss */ DO_TZ_OFFSET (9, 024, hour_diff * 10000 + min_diff * 100 + sec_diff); case 3: /* +hh if possible, else +hh:mm, else +hh:mm:ss */ if (sec_diff != 0) goto tz_hh_mm_ss; if (min_diff != 0) goto tz_hh_mm; DO_TZ_OFFSET (3, 0, hour_diff); default: goto bad_format; } } case L_('\0'): /* GNU extension: % at end of format. */ --f; FALLTHROUGH; default: /* Unknown format; output the format, including the '%', since this is most likely the right thing to do if a multibyte string has been misparsed. */ bad_format: { int flen; for (flen = 1; f[1 - flen] != L_('%'); flen++) continue; cpy (flen, &f[1 - flen]); } break; } } #if ! FPRINTFTIME if (p && maxsize != 0) *p = L_('\0'); #endif errno = saved_errno; return i; } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/obstack.c���������������������������������������������������������������0000664�0000000�0000000�00000027552�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988-2021 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 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/>. */ #ifdef _LIBC # include <obstack.h> #else # include <config.h> # include "obstack.h" #endif /* NOTE BEFORE MODIFYING THIS FILE: _OBSTACK_INTERFACE_VERSION in obstack.h must be incremented whenever callers compiled using an old obstack.h can no longer properly call the functions in this file. */ /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself, and the installed library supports the same library interface we do. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand 'configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include <gnu-versions.h> # if (_GNU_OBSTACK_INTERFACE_VERSION == _OBSTACK_INTERFACE_VERSION \ || (_GNU_OBSTACK_INTERFACE_VERSION == 1 \ && _OBSTACK_INTERFACE_VERSION == 2 \ && defined SIZEOF_INT && defined SIZEOF_SIZE_T \ && SIZEOF_INT == SIZEOF_SIZE_T)) # define _OBSTACK_ELIDE_CODE # endif #endif #ifndef _OBSTACK_ELIDE_CODE /* If GCC, or if an oddball (testing?) host that #defines __alignof__, use the already-supplied __alignof__. Otherwise, this must be Gnulib (as glibc assumes GCC); defer to Gnulib's alignof_type. */ # if !defined __GNUC__ && !defined __alignof__ # include <alignof.h> # define __alignof__(type) alignof_type (type) # endif # include <stdlib.h> # include <stdint.h> # ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) # endif /* Determine default alignment. */ /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. But in fact it might be less smart and round addresses to as much as DEFAULT_ROUNDING. So we prepare for it to do that. DEFAULT_ALIGNMENT cannot be an enum constant; see gnulib's alignof.h. */ #define DEFAULT_ALIGNMENT MAX (__alignof__ (long double), \ MAX (__alignof__ (uintmax_t), \ __alignof__ (void *))) #define DEFAULT_ROUNDING MAX (sizeof (long double), \ MAX (sizeof (uintmax_t), \ sizeof (void *))) /* Call functions with either the traditional malloc/free calling interface, or the mmalloc/mfree interface (that adds an extra first argument), based on the value of use_extra_arg. */ static void * call_chunkfun (struct obstack *h, size_t size) { if (h->use_extra_arg) return h->chunkfun.extra (h->extra_arg, size); else return h->chunkfun.plain (size); } static void call_freefun (struct obstack *h, void *old_chunk) { if (h->use_extra_arg) h->freefun.extra (h->extra_arg, old_chunk); else h->freefun.plain (old_chunk); } /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). Objects start on multiples of ALIGNMENT (0 means use default). Return nonzero if successful, calls obstack_alloc_failed_handler if allocation fails. */ static int _obstack_begin_worker (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment) { struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) alignment = DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. Use the values for range checking, because if range checking is off, the extra bytes won't be missed terribly, but if range checking is on and we used a larger request, a whole extra 4096 bytes would be allocated. These number are irrelevant to the new GNU malloc. I suspect it is less sensitive to the size of the request. */ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); size = 4096 - extra; } h->chunk_size = size; h->alignment_mask = alignment - 1; chunk = h->chunk = call_chunkfun (h, h->chunk_size); if (!chunk) (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents, alignment - 1); h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; h->alloc_failed = 0; return 1; } int _obstack_begin (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, void *(*chunkfun) (size_t), void (*freefun) (void *)) { h->chunkfun.plain = chunkfun; h->freefun.plain = freefun; h->use_extra_arg = 0; return _obstack_begin_worker (h, size, alignment); } int _obstack_begin_1 (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, void *(*chunkfun) (void *, size_t), void (*freefun) (void *, void *), void *arg) { h->chunkfun.extra = chunkfun; h->freefun.extra = freefun; h->extra_arg = arg; h->use_extra_arg = 1; return _obstack_begin_worker (h, size, alignment); } /* Allocate a new current chunk for the obstack *H on the assumption that LENGTH bytes need to be added to the current object, or a new object of length LENGTH allocated. Copies any partial object from the end of the old chunk to the beginning of the new one. */ void _obstack_newchunk (struct obstack *h, _OBSTACK_SIZE_T length) { struct _obstack_chunk *old_chunk = h->chunk; struct _obstack_chunk *new_chunk = 0; size_t obj_size = h->next_free - h->object_base; char *object_base; /* Compute size for new chunk. */ size_t sum1 = obj_size + length; size_t sum2 = sum1 + h->alignment_mask; size_t new_size = sum2 + (obj_size >> 3) + 100; if (new_size < sum2) new_size = sum2; if (new_size < h->chunk_size) new_size = h->chunk_size; /* Allocate and initialize the new chunk. */ if (obj_size <= sum1 && sum1 <= sum2) new_chunk = call_chunkfun (h, new_size); if (!new_chunk) (*obstack_alloc_failed_handler)(); h->chunk = new_chunk; new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; /* Compute an aligned object_base in the new chunk */ object_base = __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask); /* Move the existing object to the new chunk. */ memcpy (object_base, h->object_base, obj_size); /* If the object just copied was the only data in OLD_CHUNK, free that chunk and remove it from the chain. But not if that chunk might contain an empty object. */ if (!h->maybe_empty_object && (h->object_base == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents, h->alignment_mask))) { new_chunk->prev = old_chunk->prev; call_freefun (h, old_chunk); } h->object_base = object_base; h->next_free = h->object_base + obj_size; /* The new chunk certainly contains no empty object yet. */ h->maybe_empty_object = 0; } /* Return nonzero if object OBJ has been allocated from obstack H. This is here for debugging. If you use it in a program, you are probably losing. */ /* Suppress -Wmissing-prototypes warning. We don't want to declare this in obstack.h because it is just for debugging. */ int _obstack_allocated_p (struct obstack *h, void *obj) __attribute_pure__; int _obstack_allocated_p (struct obstack *h, void *obj) { struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = (h)->chunk; /* We use >= rather than > since the object cannot be exactly at the beginning of the chunk but might be an empty object exactly at the end of an adjacent chunk. */ while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) { plp = lp->prev; lp = plp; } return lp != 0; } /* Free objects in obstack H, including OBJ and everything allocate more recently than OBJ. If OBJ is zero, free everything in H. */ void _obstack_free (struct obstack *h, void *obj) { struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = h->chunk; /* We use >= because there cannot be an object at the beginning of a chunk. But there can be an empty object at that address at the end of another chunk. */ while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) { plp = lp->prev; call_freefun (h, lp); lp = plp; /* If we switch chunks, we can't tell whether the new current chunk contains an empty object, so assume that it may. */ h->maybe_empty_object = 1; } if (lp) { h->object_base = h->next_free = (char *) (obj); h->chunk_limit = lp->limit; h->chunk = lp; } else if (obj != 0) /* obj is not in any of the chunks! */ abort (); } _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *h) { struct _obstack_chunk *lp; _OBSTACK_SIZE_T nbytes = 0; for (lp = h->chunk; lp != 0; lp = lp->prev) { nbytes += lp->limit - (char *) lp; } return nbytes; } # ifndef _OBSTACK_NO_ERROR_HANDLER /* Define the error handler. */ # include <stdio.h> /* Exit value used when 'print_and_abort' is used. */ # ifdef _LIBC int obstack_exit_failure = EXIT_FAILURE; # else # include "exitfail.h" # define obstack_exit_failure exit_failure # endif # ifdef _LIBC # include <libintl.h> # else # include "gettext.h" # endif # ifndef _ # define _(msgid) gettext (msgid) # endif # ifdef _LIBC # include <libio/iolibio.h> # endif static __attribute_noreturn__ void print_and_abort (void) { /* Don't change any of these strings. Yes, it would be possible to add the newline to the string and use fputs or so. But this must not happen because the "memory exhausted" message appears in other places like this and the translation should be reused instead of creating a very similar string which requires a separate translation. */ # ifdef _LIBC (void) __fxprintf (NULL, "%s\n", _("memory exhausted")); # else fprintf (stderr, "%s\n", _("memory exhausted")); # endif exit (obstack_exit_failure); } /* The functions allocating more room by calling 'obstack_chunk_alloc' jump to the handler pointed to by 'obstack_alloc_failed_handler'. This can be set to a user defined function which should either abort gracefully or use longjump - but shouldn't return. This variable by default points to the internal function 'print_and_abort'. */ __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void) = print_and_abort; # endif /* !_OBSTACK_NO_ERROR_HANDLER */ #endif /* !_OBSTACK_ELIDE_CODE */ ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/obstack.h���������������������������������������������������������������0000664�0000000�0000000�00000054400�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.h - object stack macros Copyright (C) 1988-2021 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 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/>. */ /* Summary: All the apparent functions defined here are macros. The idea is that you would use these pre-tested macros to solve a very specific set of problems, and they would run fast. Caution: no side-effects in arguments please!! They may be evaluated MANY times!! These macros operate a stack of objects. Each object starts life small, and may grow to maturity. (Consider building a word syllable by syllable.) An object can move while it is growing. Once it has been "finished" it never changes address again. So the "top of the stack" is typically an immature growing object, while the rest of the stack is of mature, fixed size and fixed address objects. These routines grab large chunks of memory, using a function you supply, called 'obstack_chunk_alloc'. On occasion, they free chunks, by calling 'obstack_chunk_free'. You must define them and declare them before using any obstack macros. Each independent stack is represented by a 'struct obstack'. Each of the obstack macros expects a pointer to such a structure as the first argument. One motivation for this package is the problem of growing char strings in symbol tables. Unless you are "fascist pig with a read-only mind" --Gosper's immortal quote from HAKMEM item 154, out of context--you would not like to put any arbitrary upper limit on the length of your symbols. In practice this often means you will build many short symbols and a few long symbols. At the time you are reading a symbol you don't know how long it is. One traditional method is to read a symbol into a buffer, realloc()ating the buffer every time you try to read a symbol that is longer than the buffer. This is beaut, but you still will want to copy the symbol from the buffer to a more permanent symbol-table entry say about half the time. With obstacks, you can work differently. Use one obstack for all symbol names. As you read a symbol, grow the name in the obstack gradually. When the name is complete, finalize it. Then, if the symbol exists already, free the newly read name. The way we do this is to take a large chunk, allocating memory from low addresses. When you want to build a symbol in the chunk you just add chars above the current "high water mark" in the chunk. When you have finished adding chars, because you got to the end of the symbol, you know how long the chars are, and you can create a new object. Mostly the chars will not burst over the highest address of the chunk, because you would typically expect a chunk to be (say) 100 times as long as an average object. In case that isn't clear, when we have enough chars to make up the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) so we just point to it where it lies. No moving of chars is needed and this is the second win: potentially long strings need never be explicitly shuffled. Once an object is formed, it does not change its address during its lifetime. When the chars burst over a chunk boundary, we allocate a larger chunk, and then copy the partly formed object from the end of the old chunk to the beginning of the new larger chunk. We then carry on accreting characters to the end of the object as we normally would. A special macro is provided to add a single char at a time to a growing object. This allows the use of register variables, which break the ordinary 'growth' macro. Summary: We allocate large chunks. We carve out one object at a time from the current chunk. Once carved, an object never moves. We are free to append data of any size to the currently growing object. Exactly one object is growing in an obstack at any one time. You can run one obstack per control block. You may have as many control blocks as you dare. Because of the way we do it, you can "unwind" an obstack back to a previous state. (You may remove objects much as you would with a stack.) */ /* Don't do the contents of this file more than once. */ #ifndef _OBSTACK_H #define _OBSTACK_H 1 #ifndef _OBSTACK_INTERFACE_VERSION # define _OBSTACK_INTERFACE_VERSION 2 #endif #include <stddef.h> /* For size_t and ptrdiff_t. */ #include <string.h> /* For __GNU_LIBRARY__, and memcpy. */ #if __STDC_VERSION__ < 199901L || defined __HP_cc # define __FLEXIBLE_ARRAY_MEMBER 1 #else # define __FLEXIBLE_ARRAY_MEMBER #endif #if _OBSTACK_INTERFACE_VERSION == 1 /* For binary compatibility with obstack version 1, which used "int" and "long" for these two types. */ # define _OBSTACK_SIZE_T unsigned int # define _CHUNK_SIZE_T unsigned long # define _OBSTACK_CAST(type, expr) ((type) (expr)) #else /* Version 2 with sane types, especially for 64-bit hosts. */ # define _OBSTACK_SIZE_T size_t # define _CHUNK_SIZE_T size_t # define _OBSTACK_CAST(type, expr) (expr) #endif /* If B is the base of an object addressed by P, return the result of aligning P to the next multiple of A + 1. B and P must be of type char *. A + 1 must be a power of 2. */ #define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A))) /* Similar to __BPTR_ALIGN (B, P, A), except optimize the common case where pointers can be converted to integers, aligned as integers, and converted back again. If ptrdiff_t is narrower than a pointer (e.g., the AS/400), play it safe and compute the alignment relative to B. Otherwise, use the faster strategy of computing the alignment relative to 0. */ #define __PTR_ALIGN(B, P, A) \ __BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0, \ P, A) #ifndef __attribute_pure__ # define __attribute_pure__ _GL_ATTRIBUTE_PURE #endif /* Not the same as _Noreturn, since it also works with function pointers. */ #ifndef __attribute_noreturn__ # if 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ || 0x5110 <= __SUNPRO_C # define __attribute_noreturn__ __attribute__ ((__noreturn__)) # else # define __attribute_noreturn__ # endif #endif #ifdef __cplusplus extern "C" { #endif struct _obstack_chunk /* Lives at front of each chunk. */ { char *limit; /* 1 past end of this chunk */ struct _obstack_chunk *prev; /* address of prior chunk or NULL */ char contents[__FLEXIBLE_ARRAY_MEMBER]; /* objects begin here */ }; struct obstack /* control current object in current chunk */ { _CHUNK_SIZE_T chunk_size; /* preferred size to allocate chunks in */ struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ char *object_base; /* address of object we are building */ char *next_free; /* where to add next char to current object */ char *chunk_limit; /* address of char after current chunk */ union { _OBSTACK_SIZE_T i; void *p; } temp; /* Temporary for some macros. */ _OBSTACK_SIZE_T alignment_mask; /* Mask of alignment for each object. */ /* These prototypes vary based on 'use_extra_arg'. */ union { void *(*plain) (size_t); void *(*extra) (void *, size_t); } chunkfun; union { void (*plain) (void *); void (*extra) (void *, void *); } freefun; void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ unsigned use_extra_arg : 1; /* chunk alloc/dealloc funcs take extra arg */ unsigned maybe_empty_object : 1; /* There is a possibility that the current chunk contains a zero-length object. This prevents freeing the chunk if we allocate a bigger chunk to replace it. */ unsigned alloc_failed : 1; /* No longer used, as we now call the failed handler on error, but retained for binary compatibility. */ }; /* Declare the external functions we use; they are in obstack.c. */ extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T); extern void _obstack_free (struct obstack *, void *); extern int _obstack_begin (struct obstack *, _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, void *(*) (size_t), void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, void *(*) (void *, size_t), void (*) (void *, void *), void *); extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *) __attribute_pure__; /* Error handler called when 'obstack_chunk_alloc' failed to allocate more memory. This can be set to a user defined function which should either abort gracefully or use longjump - but shouldn't return. The default action is to print a message and abort. */ extern __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void); /* Exit value used when 'print_and_abort' is used. */ extern int obstack_exit_failure; /* Pointer to beginning of object being allocated or to be allocated next. Note that this might not be the final address of the object because a new chunk might be needed to hold the final size. */ #define obstack_base(h) ((void *) (h)->object_base) /* Size for allocating ordinary chunks. */ #define obstack_chunk_size(h) ((h)->chunk_size) /* Pointer to next byte not yet allocated in current chunk. */ #define obstack_next_free(h) ((void *) (h)->next_free) /* Mask specifying low bits that should be clear in address of an object. */ #define obstack_alignment_mask(h) ((h)->alignment_mask) /* To prevent prototype warnings provide complete argument list. */ #define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ _OBSTACK_CAST (void *(*) (size_t), chunkfun), \ _OBSTACK_CAST (void (*) (void *), freefun)) #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun), \ _OBSTACK_CAST (void (*) (void *, void *), freefun), arg) #define obstack_chunkfun(h, newchunkfun) \ ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun))) #define obstack_freefun(h, newfreefun) \ ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun))) #define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar))) #define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n))) #define obstack_memory_used(h) _obstack_memory_used (h) #if defined __GNUC__ || defined __clang__ # if !(defined __GNUC_MINOR__ && __GNUC__ * 1000 + __GNUC_MINOR__ >= 2008 \ || defined __clang__) # define __extension__ # endif /* For GNU C, if not -traditional, we can define these macros to compute all args only once without using a global variable. Also, we can avoid using the 'temp' slot, to make faster code. */ # define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack const *__o = (OBSTACK); \ (_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); }) /* The local variable is named __o1 to avoid a shadowed variable warning when invoked from other obstack macros. */ # define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack const *__o1 = (OBSTACK); \ (_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->next_free); }) # define obstack_make_room(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ (void) 0; }) # define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack const *__o = (OBSTACK); \ (__o->chunk->prev == 0 \ && __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \ __o->chunk->contents, \ __o->alignment_mask)); }) # define obstack_grow(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ memcpy (__o->next_free, where, __len); \ __o->next_free += __len; \ (void) 0; }) # define obstack_grow0(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len + 1) \ _obstack_newchunk (__o, __len + 1); \ memcpy (__o->next_free, where, __len); \ __o->next_free += __len; \ *(__o->next_free)++ = 0; \ (void) 0; }) # define obstack_1grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < 1) \ _obstack_newchunk (__o, 1); \ obstack_1grow_fast (__o, datum); }) /* These assume that the obstack alignment is good enough for pointers or ints, and that the data added so far to the current object shares that much alignment. */ # define obstack_ptr_grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < sizeof (void *)) \ _obstack_newchunk (__o, sizeof (void *)); \ obstack_ptr_grow_fast (__o, datum); }) # define obstack_int_grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < sizeof (int)) \ _obstack_newchunk (__o, sizeof (int)); \ obstack_int_grow_fast (__o, datum); }) # define obstack_ptr_grow_fast(OBSTACK, aptr) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__p1 = __o1->next_free; \ *(const void **) __p1 = (aptr); \ __o1->next_free += sizeof (const void *); \ (void) 0; }) # define obstack_int_grow_fast(OBSTACK, aint) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__p1 = __o1->next_free; \ *(int *) __p1 = (aint); \ __o1->next_free += sizeof (int); \ (void) 0; }) # define obstack_blank(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); }) # define obstack_alloc(OBSTACK, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_blank (__h, (length)); \ obstack_finish (__h); }) # define obstack_copy(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow (__h, (where), (length)); \ obstack_finish (__h); }) # define obstack_copy0(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow0 (__h, (where), (length)); \ obstack_finish (__h); }) /* The local variable is named __o1 to avoid a shadowed variable warning when invoked from other obstack macros, typically obstack_free. */ # define obstack_finish(OBSTACK) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__value = (void *) __o1->object_base; \ if (__o1->next_free == __value) \ __o1->maybe_empty_object = 1; \ __o1->next_free \ = __PTR_ALIGN (__o1->object_base, __o1->next_free, \ __o1->alignment_mask); \ if ((size_t) (__o1->next_free - (char *) __o1->chunk) \ > (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) \ __o1->next_free = __o1->chunk_limit; \ __o1->object_base = __o1->next_free; \ __value; }) # define obstack_free(OBSTACK, OBJ) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ void *__obj = (void *) (OBJ); \ if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \ __o->next_free = __o->object_base = (char *) __obj; \ else \ _obstack_free (__o, __obj); }) #else /* not __GNUC__ */ # define obstack_object_size(h) \ ((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base)) # define obstack_room(h) \ ((_OBSTACK_SIZE_T) ((h)->chunk_limit - (h)->next_free)) # define obstack_empty_p(h) \ ((h)->chunk->prev == 0 \ && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \ (h)->chunk->contents, \ (h)->alignment_mask)) /* Note that the call to _obstack_newchunk is enclosed in (..., 0) so that we can avoid having void expressions in the arms of the conditional expression. Casting the third operand to void was tried before, but some compilers won't accept it. */ # define obstack_make_room(h, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk (h, (h)->temp.i), 0) : 0), \ (void) 0) # define obstack_grow(h, where, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.i), \ (h)->next_free += (h)->temp.i, \ (void) 0) # define obstack_grow0(h, where, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i + 1) \ ? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.i), \ (h)->next_free += (h)->temp.i, \ *((h)->next_free)++ = 0, \ (void) 0) # define obstack_1grow(h, datum) \ (((obstack_room (h) < 1) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ obstack_1grow_fast (h, datum)) # define obstack_ptr_grow(h, datum) \ (((obstack_room (h) < sizeof (char *)) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ obstack_ptr_grow_fast (h, datum)) # define obstack_int_grow(h, datum) \ (((obstack_room (h) < sizeof (int)) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ obstack_int_grow_fast (h, datum)) # define obstack_ptr_grow_fast(h, aptr) \ (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr), \ (void) 0) # define obstack_int_grow_fast(h, aint) \ (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint), \ (void) 0) # define obstack_blank(h, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ obstack_blank_fast (h, (h)->temp.i)) # define obstack_alloc(h, length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) # define obstack_copy(h, where, length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) # define obstack_copy0(h, where, length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) # define obstack_finish(h) \ (((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ : 0), \ (h)->temp.p = (h)->object_base, \ (h)->next_free \ = __PTR_ALIGN ((h)->object_base, (h)->next_free, \ (h)->alignment_mask), \ (((size_t) ((h)->next_free - (char *) (h)->chunk) \ > (size_t) ((h)->chunk_limit - (char *) (h)->chunk)) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ (h)->temp.p) # define obstack_free(h, obj) \ ((h)->temp.p = (void *) (obj), \ (((h)->temp.p > (void *) (h)->chunk \ && (h)->temp.p < (void *) (h)->chunk_limit) \ ? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p) \ : _obstack_free ((h), (h)->temp.p))) #endif /* not __GNUC__ */ #ifdef __cplusplus } /* C++ */ #endif #endif /* _OBSTACK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/obstack_printf.c��������������������������������������������������������0000664�0000000�0000000�00000005260�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to obstacks. Copyright (C) 2008-2021 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 <config.h> /* Specification. */ #include <stdio.h> #include "obstack.h" #include "vasnprintf.h" #include <errno.h> #include <stdarg.h> #include <stdlib.h> /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ int obstack_printf (struct obstack *obs, const char *format, ...) { va_list args; int result; va_start (args, format); result = obstack_vprintf (obs, format, args); va_end (args); return result; } /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ int obstack_vprintf (struct obstack *obs, const char *format, va_list args) { /* If we are close to the end of the current obstack chunk, use a stack-allocated buffer and copy, to reduce the likelihood of a small-size malloc. Otherwise, print directly into the obstack. */ enum { CUTOFF = 1024 }; char buf[CUTOFF]; char *base = obstack_next_free (obs); size_t len = obstack_room (obs); char *str; if (len < CUTOFF) { base = buf; len = CUTOFF; } str = vasnprintf (base, &len, format, args); if (!str) { if (errno == ENOMEM) obstack_alloc_failed_handler (); return -1; } if (str == base && str != buf) /* The output was already computed in place, but we need to account for its size. */ obstack_blank_fast (obs, len); else { /* The output exceeded available obstack space or we used buf; copy the resulting string. */ obstack_grow (obs, str, len); if (str != buf) free (str); } return len; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/offtostr.c��������������������������������������������������������������0000664�0000000�0000000�00000001513�14110572173�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'off_t' integer to printable string. Copyright (C) 2004-2021 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/>. */ #define anytostr offtostr #define inttype off_t #include "anytostr.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/omp-init.c��������������������������������������������������������������0000664�0000000�0000000�00000005201�14110572173�0016743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Initialize OpenMP. Copyright (C) 2017-2021 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/>. */ #include <config.h> #ifdef _OPENMP /* Specification. */ # include <omp.h> #endif #include <stdlib.h> #include "c-ctype.h" #if defined _AIX /* Parse OMP environment variables without dependence on OMP. Return 0 for invalid values. */ static unsigned long int parse_omp_threads (char const* threads) { unsigned long int ret = 0; if (threads == NULL) return ret; /* The OpenMP spec says that the value assigned to the environment variables "may have leading and trailing white space". */ while (*threads != '\0' && c_isspace (*threads)) threads++; /* Convert it from positive decimal to 'unsigned long'. */ if (c_isdigit (*threads)) { char *endptr = NULL; unsigned long int value = strtoul (threads, &endptr, 10); if (endptr != NULL) { while (*endptr != '\0' && c_isspace (*endptr)) endptr++; if (*endptr == '\0') return value; /* Also accept the first value in a nesting level, since we can't determine the nesting level from env vars. */ else if (*endptr == ',') return value; } } return ret; } #endif void openmp_init (void) { /* On AIX 7.2, in 32-bit mode, use of OpenMP on machines with 64 or 128 processors makes the program fail with an error message "1587-120 SMP runtime library error. Memory allocation failed when creating thread number 62.". The workaround is to tell the OpenMP library to create fewer than 62 threads. This can be done through the OMP_THREAD_LIMIT environment variable. */ #if defined _AIX if (sizeof (long) == sizeof (int)) { /* Ensure that OMP_THREAD_LIMIT has a value <= 32. */ unsigned long int omp_env_limit = parse_omp_threads (getenv ("OMP_THREAD_LIMIT")); if (!(omp_env_limit > 0 && omp_env_limit <= 32)) setenv ("OMP_THREAD_LIMIT", "32", 1); } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/omp.in.h����������������������������������������������������������������0000664�0000000�0000000�00000002323�14110572173�0016416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* OpenMP declarations. Copyright (C) 2019-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_OMP_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_OMP_H@ #ifndef _@GUARD_PREFIX@_OMP_H #define _@GUARD_PREFIX@_OMP_H #ifdef __cplusplus extern "C" { #endif /* Initializes environment variables necessary for OpenMP. */ extern void openmp_init (void); #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_OMP_H */ #endif /* _@GUARD_PREFIX@_OMP_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/open-safer.c������������������������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke open, but avoid some glitches. Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "fcntl-safer.h" #include <fcntl.h> #include <stdarg.h> #include "unistd-safer.h" int open_safer (char const *file, int flags, ...) { mode_t mode = 0; if (flags & O_CREAT) { va_list ap; va_start (ap, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (ap, PROMOTED_MODE_T); va_end (ap); } return fd_safer (open (file, flags, mode)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/open.c������������������������������������������������������������������0000664�0000000�0000000�00000015377�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a descriptor to a file. Copyright (C) 2007-2021 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>, 2007. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_open doesn't recurse to rpl_open. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_open (const char *filename, int flags, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _open (filename, flags, mode); #else return open (filename, flags, mode); #endif } /* Specification. */ /* 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 "cloexec.h" #include <errno.h> #include <stdarg.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif int open (const char *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } #if GNULIB_defined_O_NONBLOCK /* The only known platform that lacks O_NONBLOCK is mingw, but it also lacks named pipes and Unix sockets, which are the only two file types that require non-blocking handling in open(). Therefore, it is safe to ignore O_NONBLOCK here. It is handy that mingw also lacks openat(), so that is also covered here. */ flags &= ~O_NONBLOCK; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_open (filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a directory file descriptor. If open doesn't support that (as on mingw), we use a dummy file that behaves the same as directories on Linux (ie. always reports EOF on attempts to read()), and override fstat() in fchdir.c to hide the fact that we have a dummy. */ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES && ((flags & O_ACCMODE) == O_RDONLY || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) { struct stat statbuf; if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) { /* Maximum recursion depth of 1. */ fd = open ("/dev/null", flags, mode); if (0 <= fd) fd = _gl_register_fd (fd, filename); } else errno = EACCES; } #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } #endif #if REPLACE_FCHDIR if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) fd = _gl_register_fd (fd, filename); #endif return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat-die.c������������������������������������������������������������0000664�0000000�0000000�00000003506�14110572173�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a save- or restore-cwd failure in our openat replacement and then exit. Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. This 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 "openat.h" #include <stdlib.h> #ifndef GNULIB_LIBPOSIX # include "error.h" #endif #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) _Noreturn void openat_save_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("unable to record current working directory")); #endif /* _Noreturn cannot be applied to error, since it returns when its first argument is 0. To help compilers understand that this function does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } /* Exit with an error about failure to restore the working directory during an openat emulation. The caller must ensure that fd 2 is not a just-opened fd, even when openat_safer is not in use. */ _Noreturn void openat_restore_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("failed to return to initial working directory")); #endif /* As above. */ abort (); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat-priv.h�����������������������������������������������������������0000664�0000000�0000000�00000005064�14110572173�0017467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals for openat-like functions. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #ifndef _GL_HEADER_OPENAT_PRIV #define _GL_HEADER_OPENAT_PRIV #include <errno.h> #include <limits.h> #include <stdlib.h> /* Maximum number of bytes that it is safe to allocate as a single array on the stack, and that is known as a compile-time constant. The assumption is that we'll touch the array very quickly, or a temporary very near the array, provoking an out-of-memory trap. On some operating systems, there is only one guard page for the stack, and a page size can be as small as 4096 bytes. Subtract 64 in the hope that this will let the compiler touch a nearby temporary and provoke a trap. */ #define SAFER_ALLOCA_MAX (4096 - 64) #define SAFER_ALLOCA(m) ((m) < SAFER_ALLOCA_MAX ? (m) : SAFER_ALLOCA_MAX) #if defined PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (PATH_MAX) #elif defined _XOPEN_PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (_XOPEN_PATH_MAX) #else # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (1024) #endif char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file); /* Trying to access a BUILD_PROC_NAME file will fail on systems without /proc support, and even on systems *with* ProcFS support. Return nonzero if the failure may be legitimate, e.g., because /proc is not readable, or the particular .../fd/N directory is not present. */ #define EXPECTED_ERRNO(Errno) \ ((Errno) == ENOTDIR || (Errno) == ENOENT \ || (Errno) == EPERM || (Errno) == EACCES \ || (Errno) == ENOSYS /* Solaris 8 */ \ || (Errno) == EOPNOTSUPP /* FreeBSD */) /* Wrapper function shared among linkat and renameat. */ int at_func2 (int fd1, char const *file1, int fd2, char const *file2, int (*func) (char const *file1, char const *file2)); #endif /* _GL_HEADER_OPENAT_PRIV */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat-proc.c�����������������������������������������������������������0000664�0000000�0000000�00000010030�14110572173�0017432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create /proc/self/fd-related names for subfiles of open directories. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "openat-priv.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef __KLIBC__ # include <InnoTekLIBC/backend.h> #endif #include "intprops.h" /* Set BUF to the name of the subfile of the directory identified by FD, where the subfile is named FILE. If successful, return BUF if the result fits in BUF, dynamically allocated memory otherwise. Return NULL (setting errno) on error. */ char * openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) { char *result = buf; int dirlen; /* Make sure the caller gets ENOENT when appropriate. */ if (!*file) { buf[0] = '\0'; return buf; } #ifndef __KLIBC__ # define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/" { enum { PROC_SELF_FD_DIR_SIZE_BOUND = (sizeof PROC_SELF_FD_FORMAT - (sizeof "%d" - 1) + INT_STRLEN_BOUND (int)) }; static int proc_status = 0; if (! proc_status) { /* Set PROC_STATUS to a positive value if /proc/self/fd is reliable, and a negative value otherwise. Solaris 10 /proc/self/fd mishandles "..", and any file name might expand to ".." after symbolic link expansion, so avoid /proc/self/fd if it mishandles "..". Solaris 10 has openat, but this problem is exhibited on code that built on Solaris 8 and running on Solaris 10. */ int proc_self_fd = open ("/proc/self/fd", O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); if (proc_self_fd < 0) proc_status = -1; else { /* Detect whether /proc/self/fd/%i/../fd exists, where %i is the number of a file descriptor open on /proc/self/fd. On Linux, that name resolves to /proc/self/fd, which was opened above. However, on Solaris, it may resolve to /proc/self/fd/fd, which cannot exist, since all names in /proc/self/fd are numeric. */ char dotdot_buf[PROC_SELF_FD_DIR_SIZE_BOUND + sizeof "../fd" - 1]; sprintf (dotdot_buf, PROC_SELF_FD_FORMAT "../fd", proc_self_fd); proc_status = access (dotdot_buf, F_OK) ? -1 : 1; close (proc_self_fd); } } if (proc_status < 0) return NULL; else { size_t bufsize = PROC_SELF_FD_DIR_SIZE_BOUND + strlen (file); if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } dirlen = sprintf (result, PROC_SELF_FD_FORMAT, fd); } } #else /* OS/2 kLIBC provides a function to retrieve a path from a fd. */ { char dir[_MAX_PATH]; size_t bufsize; if (__libc_Back_ioFHToPath (fd, dir, sizeof dir)) return NULL; dirlen = strlen (dir); bufsize = dirlen + 1 + strlen (file) + 1; /* 1 for '/', 1 for null */ if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } strcpy (result, dir); result[dirlen++] = '/'; } #endif strcpy (result + dirlen, file); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat-safer.c����������������������������������������������������������0000664�0000000�0000000�00000002542�14110572173�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke openat, but avoid some glitches. Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. This 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 Paul Eggert for open, ported by Eric Blake for openat. */ #include <config.h> #include "fcntl-safer.h" #include <fcntl.h> #include <stdarg.h> #include "unistd-safer.h" int openat_safer (int fd, char const *file, int flags, ...) { mode_t mode = 0; if (flags & O_CREAT) { va_list ap; va_start (ap, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (ap, PROMOTED_MODE_T); va_end (ap); } return fd_safer (openat (fd, file, flags, mode)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat.c����������������������������������������������������������������0000664�0000000�0000000�00000022327�14110572173�0016505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_openat doesn't recurse to rpl_openat. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h #if HAVE_OPENAT static int orig_openat (int fd, char const *filename, int flags, mode_t mode) { return openat (fd, filename, flags, mode); } #endif /* 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 "openat.h" #include "cloexec.h" #include <stdarg.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <errno.h> #if HAVE_OPENAT /* Like openat, but support O_CLOEXEC and work around Solaris 9 bugs with trailing slash. */ int rpl_openat (int dfd, char const *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } # if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/openat.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } # endif fd = orig_openat (dfd, filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_openat (dfd, filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } # if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } # endif return fd; } #else /* !HAVE_OPENAT */ # include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ # include "openat-priv.h" # include "save-cwd.h" /* Replacement for Solaris' openat function. <https://www.google.com/search?q=openat+site:docs.oracle.com> First, try to simulate it via open ("/proc/self/fd/FD/FILE"). Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, upon failure, set errno and return -1, as openat does. Upon successful completion, return a file descriptor. */ int openat (int fd, char const *file, int flags, ...) { mode_t mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } return openat_permissive (fd, file, flags, mode, NULL); } /* Like openat (FD, FILE, FLAGS, MODE), but if CWD_ERRNO is nonnull, set *CWD_ERRNO to an errno value if unable to save or restore the initial working directory. This is needed only the first time remove.c's remove_dir opens a command-line directory argument. If a previous attempt to restore the current working directory failed, then we must not even try to access a '.'-relative name. It is the caller's responsibility not to call this function in that case. */ int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno) { struct saved_cwd saved_cwd; int saved_errno; int err; bool save_ok; if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return open (file, flags, mode); { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, file); if (proc_file) { int open_result = open (proc_file, flags, mode); int open_errno = errno; if (proc_file != buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) { errno = open_errno; return open_result; } } } save_ok = (save_cwd (&saved_cwd) == 0); if (! save_ok) { if (! cwd_errno) openat_save_fail (errno); *cwd_errno = errno; } if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return -1; } err = fchdir (fd); saved_errno = errno; if (! err) { err = open (file, flags, mode); saved_errno = errno; if (save_ok && restore_cwd (&saved_cwd) != 0) { if (! cwd_errno) { /* Don't write a message to just-created fd 2. */ saved_errno = errno; if (err == STDERR_FILENO) close (err); openat_restore_fail (saved_errno); } *cwd_errno = errno; } } free_cwd (&saved_cwd); errno = saved_errno; return err; } /* Return true if our openat implementation must resort to using save_cwd and restore_cwd. */ bool openat_needs_fchdir (void) { bool needs_fchdir = true; int fd = open ("/", O_SEARCH | O_CLOEXEC); if (0 <= fd) { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) { needs_fchdir = false; if (proc_file != buf) free (proc_file); } close (fd); } return needs_fchdir; } #endif /* !HAVE_OPENAT */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openat.h����������������������������������������������������������������0000664�0000000�0000000�00000005752�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2006, 2008-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #ifndef _GL_HEADER_OPENAT #define _GL_HEADER_OPENAT #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdbool.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #if !HAVE_OPENAT int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno); bool openat_needs_fchdir (void); #else # define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \ openat (Fd, File, Flags, Mode) # define openat_needs_fchdir() false #endif _Noreturn void openat_restore_fail (int); _Noreturn void openat_save_fail (int); /* Using these function names makes application code slightly more readable than it would be with fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW). */ #if GNULIB_CHOWNAT # ifndef CHOWNAT_INLINE # define CHOWNAT_INLINE _GL_INLINE # endif CHOWNAT_INLINE int chownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, 0); } CHOWNAT_INLINE int lchownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_CHMODAT # ifndef CHMODAT_INLINE # define CHMODAT_INLINE _GL_INLINE # endif CHMODAT_INLINE int chmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, 0); } CHMODAT_INLINE int lchmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_STATAT # ifndef STATAT_INLINE # define STATAT_INLINE _GL_INLINE # endif STATAT_INLINE int statat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, 0); } STATAT_INLINE int lstatat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); } #endif /* For now, there are no wrappers named laccessat or leuidaccessat, since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and since access rights on symlinks are of limited utility. Likewise, wrappers are not provided for accessat or euidaccessat, so as to avoid dragging in -lgen on some platforms. */ _GL_INLINE_HEADER_END #endif /* _GL_HEADER_OPENAT */ ����������������������gnulib-20210822~d383792/lib/opendir-safer.c���������������������������������������������������������0000664�0000000�0000000�00000004333�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke opendir, but avoid some glitches. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> #include "dirent-safer.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Like opendir, but do not clobber stdin, stdout, or stderr. */ DIR * opendir_safer (char const *name) { DIR *dp = opendir (name); if (dp) { int fd = dirfd (dp); if (0 <= fd && fd <= STDERR_FILENO) { /* If fdopendir is native (as on Linux), then it is safe to assume dirfd(fdopendir(n))==n. If we are using the gnulib module fdopendir, then this guarantee is not met, but fdopendir recursively calls opendir_safer up to 3 times to at least get a safe fd. If fdopendir is not present but dirfd is accurate (as on cygwin 1.5.x), then we recurse up to 3 times ourselves. Finally, if dirfd always fails (as on mingw), then we are already safe. */ DIR *newdp; int e; #if HAVE_FDOPENDIR || GNULIB_FDOPENDIR int f = fcntl (fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); if (f < 0) { e = errno; newdp = NULL; } else { newdp = fdopendir (f); e = errno; if (! newdp) close (f); } #else /* !FDOPENDIR */ newdp = opendir_safer (name); e = errno; #endif closedir (dp); errno = e; dp = newdp; } } return dp; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/opendir.c���������������������������������������������������������������0000664�0000000�0000000�00000007727�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Start reading the entries of a directory. Copyright (C) 2006-2021 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/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include <stddef.h> #if HAVE_OPENDIR /* Override opendir(), to keep track of the open file descriptors. Needed because there is a function dirfd(). */ #else # include <stdlib.h> # include "dirent-private.h" # include "filename.h" #endif #if REPLACE_FCHDIR # include <unistd.h> #endif #ifdef __KLIBC__ # include <io.h> # include <fcntl.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef GetFullPathName # define GetFullPathName GetFullPathNameA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif DIR * opendir (const char *dir_name) { #if HAVE_OPENDIR # undef opendir DIR *dirp; dirp = opendir (dir_name); if (dirp == NULL) return NULL; # ifdef __KLIBC__ { int fd = open (dir_name, O_RDONLY); if (fd == -1 || _gl_register_dirp_fd (fd, dirp)) { int saved_errno = errno; close (fd); closedir (dirp); errno = saved_errno; return NULL; } } # endif #else char dir_name_mask[MAX_PATH + 1 + 1 + 1]; int status; HANDLE current; WIN32_FIND_DATA entry; struct gl_directory *dirp; if (dir_name[0] == '\0') { errno = ENOENT; return NULL; } /* Make the dir_name absolute, so that we continue reading the same directory if the current directory changed between this opendir() call and a subsequent rewinddir() call. */ if (!GetFullPathName (dir_name, MAX_PATH, dir_name_mask, NULL)) { errno = EINVAL; return NULL; } /* Append the mask. "*" and "*.*" appear to be equivalent. */ { char *p; p = dir_name_mask + strlen (dir_name_mask); if (p > dir_name_mask && !ISSLASH (p[-1])) *p++ = '\\'; *p++ = '*'; *p = '\0'; } /* Start searching the directory. */ status = -1; current = FindFirstFile (dir_name_mask, &entry); if (current == INVALID_HANDLE_VALUE) { switch (GetLastError ()) { case ERROR_FILE_NOT_FOUND: status = -2; break; case ERROR_PATH_NOT_FOUND: errno = ENOENT; return NULL; case ERROR_DIRECTORY: errno = ENOTDIR; return NULL; case ERROR_ACCESS_DENIED: errno = EACCES; return NULL; default: errno = EIO; return NULL; } } /* Allocate the result. */ dirp = (struct gl_directory *) malloc (offsetof (struct gl_directory, dir_name_mask[0]) + strlen (dir_name_mask) + 1); if (dirp == NULL) { if (current != INVALID_HANDLE_VALUE) FindClose (current); errno = ENOMEM; return NULL; } dirp->status = status; dirp->current = current; if (status == -1) memcpy (&dirp->entry, &entry, sizeof (WIN32_FIND_DATA)); strcpy (dirp->dir_name_mask, dir_name_mask); #endif #if REPLACE_FCHDIR { int fd = dirfd (dirp); if (0 <= fd && _gl_register_fd (fd, dir_name) != fd) { int saved_errno = errno; closedir (dirp); errno = saved_errno; return NULL; } } #endif return dirp; } �����������������������������������������gnulib-20210822~d383792/lib/opendirat.c�������������������������������������������������������������0000664�0000000�0000000�00000003300�14110572173�0017172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a directory relative to another directory. Copyright 2006-2021 Free Software Foundation, Inc. This 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 Jim Meyering and Paul Eggert. */ #include <config.h> #include <opendirat.h> #include <errno.h> #include <fcntl--.h> #include <unistd.h> /* Relative to DIR_FD, open the directory DIR, passing EXTRA_FLAGS to the underlying openat call. On success, store into *PNEW_FD the underlying file descriptor of the newly opened directory and return the directory stream. On failure, return NULL and set errno. On success, *PNEW_FD is at least 3, so this is a "safer" function. */ DIR * opendirat (int dir_fd, char const *dir, int extra_flags, int *pnew_fd) { int open_flags = (O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | extra_flags); int new_fd = openat (dir_fd, dir, open_flags); if (new_fd < 0) return NULL; DIR *dirp = fdopendir (new_fd); if (dirp) *pnew_fd = new_fd; else { int fdopendir_errno = errno; close (new_fd); errno = fdopendir_errno; } return dirp; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/opendirat.h�������������������������������������������������������������0000664�0000000�0000000�00000001561�14110572173�0017206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a directory relative to another directory. Copyright (C) 2018-2021 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 <dirent.h> DIR *opendirat (int, char const *, int, int *) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1); �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/openpty.c���������������������������������������������������������������0000664�0000000�0000000�00000006643�14110572173�0016720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a pseudo-terminal. Copyright (C) 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <pty.h> #if HAVE_OPENPTY /* Provide a wrapper with the prototype of glibc-2.8 and newer. */ # undef openpty int rpl_openpty (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp) { /* Cast away const, for implementations with weaker prototypes. */ return openpty (amaster, aslave, name, (struct termios *) termp, (struct winsize *) winp); } #elif defined _WIN32 && !defined __CYGWIN__ /* mingw */ # include <errno.h> int openpty (_GL_UNUSED int *amaster, _GL_UNUSED int *aslave, _GL_UNUSED char *name, _GL_UNUSED struct termios const *termp, _GL_UNUSED struct winsize const *winp) { /* Mingw lacks pseudo-terminals altogether. */ errno = ENOSYS; return -1; } #else /* AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10 */ # include <fcntl.h> # include <stdlib.h> # include <string.h> # include <sys/ioctl.h> # include <termios.h> # include <unistd.h> # if defined __sun || defined __hpux /* Solaris, HP-UX */ # include <stropts.h> # endif int openpty (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp) { int master; char *slave_name; int slave; # if HAVE__GETPTY /* IRIX */ slave_name = _getpty (&master, O_RDWR, 0622, 0); if (slave_name == NULL) return -1; # else /* AIX 5.1, HP-UX 11, Solaris 10, mingw */ /* This call uses the 'posix_openpt' module. */ master = posix_openpt (O_RDWR | O_NOCTTY); if (master < 0) return -1; # endif /* This call does not require a dependency to the 'grantpt' module, because AIX, HP-UX, IRIX, Solaris all have the grantpt() function. */ if (grantpt (master)) goto fail; /* This call does not require a dependency to the 'unlockpt' module, because AIX, HP-UX, IRIX, Solaris all have the unlockpt() function. */ if (unlockpt (master)) goto fail; # if !HAVE__GETPTY /* !IRIX */ slave_name = ptsname (master); if (slave_name == NULL) goto fail; # endif slave = open (slave_name, O_RDWR | O_NOCTTY); if (slave == -1) goto fail; # if defined __sun || defined __hpux /* Solaris, HP-UX */ if (ioctl (slave, I_PUSH, "ptem") < 0 || ioctl (slave, I_PUSH, "ldterm") < 0 # if defined __sun || ioctl (slave, I_PUSH, "ttcompat") < 0 # endif ) { close (slave); goto fail; } # endif /* XXX Should we ignore errors here? */ if (termp) tcsetattr (slave, TCSAFLUSH, termp); if (winp) ioctl (slave, TIOCSWINSZ, winp); *amaster = master; *aslave = slave; if (name != NULL) strcpy (name, slave_name); return 0; fail: close (master); return -1; } #endif ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/os2-spawn.c�������������������������������������������������������������0000664�0000000�0000000�00000007757�14110572173�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. OS/2 kLIBC API. Copyright (C) 2001, 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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> /* Specification. */ #include "os2-spawn.h" /* Get _open_osfhandle(). */ #include <io.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include "cloexec.h" #include "error.h" #include "gettext.h" #define _(str) gettext (str) /* Duplicates a file handle, making the copy uninheritable. Returns -1 for a file handle that is equivalent to closed. */ static int dup_noinherit (int fd) { fd = dup_cloexec (fd); if (fd < 0 && errno == EMFILE) error (EXIT_FAILURE, errno, _("_open_osfhandle failed")); return fd; } /* Returns a file descriptor equivalent to FD, except that the resulting file descriptor is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. FD must be open and non-inheritable. The result will be non-inheritable as well. If FD < 0, FD itself is returned. */ static int fd_safer_noinherit (int fd) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { /* The recursion depth is at most 3. */ int nfd = fd_safer_noinherit (dup_noinherit (fd)); int saved_errno = errno; close (fd); errno = saved_errno; return nfd; } return fd; } int dup_safer_noinherit (int fd) { return fd_safer_noinherit (dup_noinherit (fd)); } void undup_safer_noinherit (int tempfd, int origfd) { if (tempfd >= 0) { if (dup2 (tempfd, origfd) < 0) error (EXIT_FAILURE, errno, _("cannot restore fd %d: dup2 failed"), origfd); close (tempfd); } else { /* origfd was closed or open to no handle at all. Set it to a closed state. This is (nearly) equivalent to the original state. */ close (origfd); } } const char ** prepare_spawn (const char * const *argv, char **mem_to_free) { size_t argc; const char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = (const char **) malloc ((1 + argc + 1) * sizeof (const char *)); if (new_argv == NULL) return NULL; /* Add an element upfront that can be used when argv[0] turns out to be a script, not a program. On Unix, this would be "/bin/sh". */ new_argv[0] = "sh.exe"; /* Put quoted arguments into the new argument vector. */ size_t needed_size = 0; for (i = 0; i < argc; i++) { const char *string = argv[i]; const char *quoted_string = (string[0] == '\0' ? "\"\"" : string); size_t length = strlen (quoted_string); needed_size += length + 1; } char *mem; if (needed_size == 0) mem = NULL; else { mem = (char *) malloc (needed_size); if (mem == NULL) { /* Memory allocation failure. */ free (new_argv); errno = ENOMEM; return NULL; } } *mem_to_free = mem; for (i = 0; i < argc; i++) { const char *string = argv[i]; new_argv[1 + i] = mem; const char *quoted_string = (string[0] == '\0' ? "\"\"" : string); size_t length = strlen (quoted_string); memcpy (mem, quoted_string, length + 1); mem += length + 1; } new_argv[1 + argc] = NULL; return new_argv; } �����������������gnulib-20210822~d383792/lib/os2-spawn.h�������������������������������������������������������������0000664�0000000�0000000�00000002670�14110572173�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. OS/2 kLIBC API. Copyright (C) 2001, 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 _OS2_SPAWN_H #define _OS2_SPAWN_H /* Duplicates a file handle, making the copy uninheritable and ensuring the result is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. Returns -1 for a file handle that is equivalent to closed. */ extern int dup_safer_noinherit (int fd); /* Undoes the effect of TEMPFD = dup_safer_noinherit (ORIGFD); */ extern void undup_safer_noinherit (int tempfd, int origfd); /* Prepares an argument vector before calling spawn(). */ extern const char ** prepare_spawn (const char * const *argv, char **mem_to_free); #endif /* _OS2_SPAWN_H */ ������������������������������������������������������������������������gnulib-20210822~d383792/lib/pagealign_alloc.c�������������������������������������������������������0000664�0000000�0000000�00000011522�14110572173�0020313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation aligned to system page boundaries. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 Derek R. Price <derek@ximbiot.com>. */ #include <config.h> #include "pagealign_alloc.h" #include <errno.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MMAP # include <sys/mman.h> #endif #include "error.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) #if HAVE_MMAP /* Define MAP_FILE when it isn't otherwise. */ # ifndef MAP_FILE # define MAP_FILE 0 # endif /* Define MAP_FAILED for old systems which neglect to. */ # ifndef MAP_FAILED # define MAP_FAILED ((void *)-1) # endif #endif #if HAVE_MMAP || ! HAVE_POSIX_MEMALIGN # if HAVE_MMAP /* For each memory region, we store its size. */ typedef size_t info_t; # else /* For each memory region, we store the original pointer returned by malloc(). */ typedef void * info_t; # endif /* A simple linked list of allocated memory regions. It is probably not the most efficient way to store these, but anyway... */ typedef struct memnode_s memnode_t; struct memnode_s { void *aligned_ptr; info_t info; memnode_t *next; }; /* The list of currently allocated memory regions. */ static memnode_t *memnode_table = NULL; static void new_memnode (void *aligned_ptr, info_t info) { memnode_t *new_node = XMALLOC (memnode_t); new_node->aligned_ptr = aligned_ptr; new_node->info = info; new_node->next = memnode_table; memnode_table = new_node; } /* Dispose of the memnode containing a map for the ALIGNED_PTR in question and return the content of the node's INFO field. */ static info_t get_memnode (void *aligned_ptr) { info_t ret; memnode_t *c; memnode_t **p_next = &memnode_table; for (c = *p_next; c != NULL; p_next = &c->next, c = c->next) if (c->aligned_ptr == aligned_ptr) break; if (c == NULL) /* An attempt to free untracked memory. A wrong pointer was passed to pagealign_free(). */ abort (); /* Remove this entry from the list, save the return value, and free it. */ *p_next = c->next; ret = c->info; free (c); return ret; } #endif /* HAVE_MMAP || !HAVE_POSIX_MEMALIGN */ void * pagealign_alloc (size_t size) { void *ret; /* We prefer the mmap() approach over the posix_memalign() or malloc() based approaches, since the latter often waste an entire memory page per call. */ #if HAVE_MMAP # ifdef HAVE_MAP_ANONYMOUS const int fd = -1; const int flags = MAP_ANONYMOUS | MAP_PRIVATE; # else /* !HAVE_MAP_ANONYMOUS */ static int fd = -1; /* Only open /dev/zero once in order to avoid limiting the amount of memory we may allocate based on the number of open file descriptors. */ const int flags = MAP_FILE | MAP_PRIVATE; if (fd == -1) { fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0666); if (fd < 0) error (EXIT_FAILURE, errno, _("Failed to open /dev/zero for read")); } # endif /* HAVE_MAP_ANONYMOUS */ ret = mmap (NULL, size, PROT_READ | PROT_WRITE, flags, fd, 0); if (ret == MAP_FAILED) return NULL; new_memnode (ret, size); #elif HAVE_POSIX_MEMALIGN int status = posix_memalign (&ret, getpagesize (), size); if (status) { errno = status; return NULL; } #else /* !HAVE_MMAP && !HAVE_POSIX_MEMALIGN */ size_t pagesize = getpagesize (); void *unaligned_ptr = malloc (size + pagesize - 1); if (unaligned_ptr == NULL) { /* Set errno. We don't know whether malloc already set errno: some implementations of malloc do, some don't. */ errno = ENOMEM; return NULL; } ret = (char *) unaligned_ptr + ((- (unsigned long) unaligned_ptr) & (pagesize - 1)); new_memnode (ret, unaligned_ptr); #endif /* HAVE_MMAP && HAVE_POSIX_MEMALIGN */ return ret; } void * pagealign_xalloc (size_t size) { void *ret; ret = pagealign_alloc (size); if (ret == NULL) xalloc_die (); return ret; } void pagealign_free (void *aligned_ptr) { #if HAVE_MMAP if (munmap (aligned_ptr, get_memnode (aligned_ptr)) < 0) error (EXIT_FAILURE, errno, "Failed to unmap memory"); #elif HAVE_POSIX_MEMALIGN free (aligned_ptr); #else free (get_memnode (aligned_ptr)); #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pagealign_alloc.h�������������������������������������������������������0000664�0000000�0000000�00000003352�14110572173�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation aligned to system page boundaries. Copyright (C) 2005, 2008, 2010-2021 Free Software Foundation, Inc. This 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 _PAGEALIGN_ALLOC_H # define _PAGEALIGN_ALLOC_H # include <stddef.h> /* Free a memory block. PTR must be a non-NULL pointer returned by pagealign_alloc or pagealign_xalloc. */ extern void pagealign_free (void *ptr) _GL_ATTRIBUTE_NONNULL ((1)); /* Allocate a block of memory of SIZE bytes, aligned on a system page boundary. If SIZE is not a multiple of the system page size, it will be rounded up to the next multiple. Return a pointer to the start of the memory block. Upon allocation failure, return NULL and set errno. */ extern void *pagealign_alloc (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (pagealign_free, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)); /* Like pagealign_alloc, except it exits the program if the allocation fails. */ extern void *pagealign_xalloc (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (pagealign_free, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* _PAGEALIGN_ALLOC_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/parse-datetime.h��������������������������������������������������������0000664�0000000�0000000�00000002400�14110572173�0020116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a string into an internal timestamp. Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdbool.h> #include <time.h> bool parse_datetime (struct timespec *restrict, char const *, struct timespec const *); /* parse_datetime2 flag: if set, print debug/progress information to STDERR */ #define PARSE_DATETIME_DEBUG 1 /* same as above, supporting additional flags */ bool parse_datetime2 (struct timespec *restrict, char const *, struct timespec const *, unsigned int flags, timezone_t, char const *); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/parse-datetime.y��������������������������������������������������������0000664�0000000�0000000�00000224237�14110572173�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* Parse a string into an internal timestamp. Copyright (C) 1999-2000, 2002-2021 Free Software Foundation, Inc. This 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/>. */ /* Originally written by Steven M. Bellovin <smb@research.att.com> while at the University of North Carolina at Chapel Hill. Later tweaked by a couple of people on Usenet. Completely overhauled by Rich $alz <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990. Modified by Assaf Gordon <assafgordon@gmail.com> in 2016 to add debug output. Modified by Paul Eggert <eggert@twinsun.com> in 1999 to do the right thing about local DST. Also modified by Paul Eggert <eggert@cs.ucla.edu> in 2004 to support nanosecond-resolution timestamps, in 2004 to support TZ strings in dates, and in 2017 and 2020 to check for integer overflow and to support longer-than-'long' 'time_t' and 'tv_nsec'. */ #include <config.h> #include "parse-datetime.h" #include "idx.h" #include "intprops.h" #include "timespec.h" #include "verify.h" #include "strftime.h" /* There's no need to extend the stack, so there's no need to involve alloca. */ #define YYSTACK_USE_ALLOCA 0 /* Tell Bison how much stack space is needed. 20 should be plenty for this grammar, which is not right recursive. Beware setting it too high, since that might cause problems on machines whose implementations have lame stack-overflow checking. */ #define YYMAXDEPTH 20 #define YYINITDEPTH YYMAXDEPTH /* Since the code of parse-datetime.y is not included in the Emacs executable itself, there is no need to #define static in this file. Even if the code were included in the Emacs executable, it probably wouldn't do any harm to #undef it here; this will only cause problems if we try to write to a static variable, which I don't think this code needs to do. */ #ifdef emacs # undef static #endif #include <inttypes.h> #include <c-ctype.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "gettext.h" #define _(str) gettext (str) /* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ /* FIXME: this is temporary. Remove when we have a mechanism to ensure that the version we're using is fixed, too. */ #ifdef _STDLIB_H_ # undef _STDLIB_H # define _STDLIB_H 1 #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) #define HOUR(x) (60 * 60 * (x)) #define STREQ(a, b) (strcmp (a, b) == 0) /* Verify that time_t is an integer as POSIX requires, and that every time_t value fits in intmax_t. Please file a bug report if these assumptions are false on your platform. */ verify (TYPE_IS_INTEGER (time_t)); verify (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); verify (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); /* True if N is out of range for time_t. */ static bool time_overflow (intmax_t n) { return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) && n <= TYPE_MAXIMUM (time_t)); } /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static unsigned char to_uchar (char ch) { return ch; } static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) dbg_printf (char const *msg, ...) { va_list args; /* TODO: use gnulib's 'program_name' instead? */ fputs ("date: ", stderr); va_start (args, msg); vfprintf (stderr, msg, args); va_end (args); } /* An integer value, and the number of digits in its textual representation. */ typedef struct { bool negative; intmax_t value; idx_t digits; } textint; /* An entry in the lexical lookup table. */ typedef struct { char const *name; int type; int value; } table; /* Meridian: am, pm, or 24-hour style. */ enum { MERam, MERpm, MER24 }; /* A reasonable upper bound for the buffer used in debug output. */ enum { DBGBUFSIZE = 100 }; enum { BILLION = 1000000000, LOG10_BILLION = 9 }; /* Relative times. */ typedef struct { /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ intmax_t year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; intmax_t seconds; int ns; } relative_time; #if HAVE_COMPOUND_LITERALS # define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) #else static relative_time const RELATIVE_TIME_0; #endif /* Information passed to and from the parser. */ typedef struct { /* The input string remaining to be parsed. */ const char *input; /* N, if this is the Nth Tuesday. */ intmax_t day_ordinal; /* Day of week; Sunday is 0. */ int day_number; /* tm_isdst flag for the local zone. */ int local_isdst; /* Time zone, in seconds east of UT. */ int time_zone; /* Style used for time. */ int meridian; /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ textint year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; struct timespec seconds; /* includes nanoseconds */ /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ relative_time rel; /* Presence or counts of nonterminals of various flavors parsed so far. */ bool timespec_seen; bool rels_seen; idx_t dates_seen; idx_t days_seen; idx_t local_zones_seen; idx_t dsts_seen; idx_t times_seen; idx_t zones_seen; bool year_seen; #ifdef GNULIB_PARSE_DATETIME2 /* Print debugging output to stderr. */ bool parse_datetime_debug; #endif /* Which of the 'seen' parts have been printed when debugging. */ bool debug_dates_seen; bool debug_days_seen; bool debug_local_zones_seen; bool debug_times_seen; bool debug_zones_seen; bool debug_year_seen; /* The user specified explicit ordinal day value. */ bool debug_ordinal_day_seen; /* Table of local time zone abbreviations, terminated by a null entry. */ table local_time_zone_table[3]; } parser_control; static bool debugging (parser_control const *pc) { #ifdef GNULIB_PARSE_DATETIME2 return pc->parse_datetime_debug; #else return false; #endif } union YYSTYPE; static int yylex (union YYSTYPE *, parser_control *); static int yyerror (parser_control const *, char const *); static bool time_zone_hhmm (parser_control *, textint, intmax_t); /* Extract into *PC any date and time info from a string of digits of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, YYYY, ...). */ static void digits_to_date_time (parser_control *pc, textint text_int) { if (pc->dates_seen && ! pc->year.digits && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) { pc->year_seen = true; pc->year = text_int; } else { if (4 < text_int.digits) { pc->dates_seen++; pc->day = text_int.value % 100; pc->month = (text_int.value / 100) % 100; pc->year.value = text_int.value / 10000; pc->year.digits = text_int.digits - 4; } else { pc->times_seen++; if (text_int.digits <= 2) { pc->hour = text_int.value; pc->minutes = 0; } else { pc->hour = text_int.value / 100; pc->minutes = text_int.value % 100; } pc->seconds.tv_sec = 0; pc->seconds.tv_nsec = 0; pc->meridian = MER24; } } } /* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true if successful, false if an overflow occurred. */ static bool apply_relative_time (parser_control *pc, relative_time rel, int factor) { if (factor < 0 ? (INT_SUBTRACT_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_SUBTRACT_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_SUBTRACT_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_SUBTRACT_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_SUBTRACT_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_SUBTRACT_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_SUBTRACT_WRAPV (pc->rel.year, rel.year, &pc->rel.year)) : (INT_ADD_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_ADD_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_ADD_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_ADD_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_ADD_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_ADD_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_ADD_WRAPV (pc->rel.year, rel.year, &pc->rel.year))) return false; pc->rels_seen = true; return true; } /* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ static void set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, time_t sec, int nsec) { pc->hour = hour; pc->minutes = minutes; pc->seconds.tv_sec = sec; pc->seconds.tv_nsec = nsec; } /* Return a textual representation of the day ordinal/number values in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ static const char * str_days (parser_control *pc, char *buffer, int n) { /* TODO: use relative_time_table for reverse lookup. */ static char const ordinal_values[][11] = { "last", "this", "next/first", "(SECOND)", /* SECOND is commented out in relative_time_table. */ "third", "fourth", "fifth", "sixth", "seventh", "eight", "ninth", "tenth", "eleventh", "twelfth" }; static char const days_values[][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int len; /* Don't add an ordinal prefix if the user didn't specify it (e.g., "this wed" vs "wed"). */ if (pc->debug_ordinal_day_seen) { /* Use word description if possible (e.g., -1 = last, 3 = third). */ len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); } else { buffer[0] = '\0'; len = 0; } /* Add the day name */ if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) snprintf (buffer + len, n - len, &" %s"[len == 0], days_values[pc->day_number]); else { /* invalid day_number value - should never happen */ } return buffer; } /* Convert a time zone to its string representation. */ enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" } ; static char const * time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) { char *p = time_zone_buf; char sign = time_zone < 0 ? '-' : '+'; int hour = abs (time_zone / (60 * 60)); p += sprintf (time_zone_buf, "%c%02d", sign, hour); int offset_from_hour = abs (time_zone % (60 * 60)); if (offset_from_hour != 0) { int mm = offset_from_hour / 60; int ss = offset_from_hour % 60; *p++ = ':'; *p++ = '0' + mm / 10; *p++ = '0' + mm % 10; if (ss) { *p++ = ':'; *p++ = '0' + ss / 10; *p++ = '0' + ss % 10; } *p = '\0'; } return time_zone_buf; } /* debugging: print the current time in the parser_control structure. The parser will increment "*_seen" members for those which were parsed. This function will print only newly seen parts. */ static void debug_print_current_time (char const *item, parser_control *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->dates_seen && !pc->debug_dates_seen) { /*TODO: use pc->year.negative? */ fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, pc->year.value, pc->month, pc->day); pc->debug_dates_seen = true; space = true; } if (pc->year_seen != pc->debug_year_seen) { if (space) fputc (' ', stderr); fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); pc->debug_year_seen = pc->year_seen; space = true; } if (pc->times_seen && !pc->debug_times_seen) { intmax_t sec = pc->seconds.tv_sec; fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], pc->hour, pc->minutes, sec); if (pc->seconds.tv_nsec != 0) { int nsec = pc->seconds.tv_nsec; fprintf (stderr, ".%09d", nsec); } if (pc->meridian == MERpm) fputs ("pm", stderr); pc->debug_times_seen = true; space = true; } if (pc->days_seen && !pc->debug_days_seen) { if (space) fputc (' ', stderr); char tmp[DBGBUFSIZE]; fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), str_days (pc, tmp, sizeof tmp), pc->day_ordinal, pc->day_number); pc->debug_days_seen = true; space = true; } /* local zone strings only change the DST settings, not the timezone value. If seen, inform about the DST. */ if (pc->local_zones_seen && !pc->debug_local_zones_seen) { fprintf (stderr, &" isdst=%d%s"[!space], pc->local_isdst, pc->dsts_seen ? " DST" : ""); pc->debug_local_zones_seen = true; space = true; } if (pc->zones_seen && !pc->debug_zones_seen) { char time_zone_buf[TIME_ZONE_BUFSIZE]; fprintf (stderr, &" UTC%s"[!space], time_zone_str (pc->time_zone, time_zone_buf)); pc->debug_zones_seen = true; space = true; } if (pc->timespec_seen) { intmax_t sec = pc->seconds.tv_sec; if (space) fputc (' ', stderr); fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); } fputc ('\n', stderr); } /* Debugging: print the current relative values. */ static bool print_rel_part (bool space, intmax_t val, char const *name) { if (val == 0) return space; fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); return true; } static void debug_print_relative_time (char const *item, parser_control const *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 && pc->rel.ns == 0) { /* Special case: relative time of this/today/now */ fputs (_("today/this/now\n"), stderr); return; } space = print_rel_part (space, pc->rel.year, "year(s)"); space = print_rel_part (space, pc->rel.month, "month(s)"); space = print_rel_part (space, pc->rel.day, "day(s)"); space = print_rel_part (space, pc->rel.hour, "hour(s)"); space = print_rel_part (space, pc->rel.minutes, "minutes"); space = print_rel_part (space, pc->rel.seconds, "seconds"); print_rel_part (space, pc->rel.ns, "nanoseconds"); fputc ('\n', stderr); } %} /* We want a reentrant parser, even if the TZ manipulation and the calls to localtime and gmtime are not reentrant. */ %define api.pure %parse-param { parser_control *pc } %lex-param { parser_control *pc } /* This grammar has 31 shift/reduce conflicts. */ %expect 31 %union { intmax_t intval; textint textintval; struct timespec timespec; relative_time rel; } %token <intval> tAGO %token tDST %token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT %token <intval> tDAY_UNIT tDAY_SHIFT %token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN %token <intval> tMONTH tORDINAL tZONE %token <textintval> tSNUMBER tUNUMBER %token <timespec> tSDECIMAL_NUMBER tUDECIMAL_NUMBER %type <intval> o_colon_minutes %type <timespec> seconds signed_seconds unsigned_seconds %type <rel> relunit relunit_snumber dayshift %% spec: timespec | items ; timespec: '@' seconds { pc->seconds = $2; pc->timespec_seen = true; debug_print_current_time (_("number of seconds"), pc); } ; items: /* empty */ | items item ; item: datetime { pc->times_seen++; pc->dates_seen++; debug_print_current_time (_("datetime"), pc); } | time { pc->times_seen++; debug_print_current_time (_("time"), pc); } | local_zone { pc->local_zones_seen++; debug_print_current_time (_("local_zone"), pc); } | zone { pc->zones_seen++; debug_print_current_time (_("zone"), pc); } | date { pc->dates_seen++; debug_print_current_time (_("date"), pc); } | day { pc->days_seen++; debug_print_current_time (_("day"), pc); } | rel { debug_print_relative_time (_("relative"), pc); } | number { debug_print_current_time (_("number"), pc); } | hybrid { debug_print_relative_time (_("hybrid"), pc); } ; datetime: iso_8601_datetime ; iso_8601_datetime: iso_8601_date 'T' iso_8601_time ; time: tUNUMBER tMERIDIAN { set_hhmmss (pc, $1.value, 0, 0, 0); pc->meridian = $2; } | tUNUMBER ':' tUNUMBER tMERIDIAN { set_hhmmss (pc, $1.value, $3.value, 0, 0); pc->meridian = $4; } | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN { set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); pc->meridian = $6; } | iso_8601_time ; iso_8601_time: tUNUMBER zone_offset { set_hhmmss (pc, $1.value, 0, 0, 0); pc->meridian = MER24; } | tUNUMBER ':' tUNUMBER o_zone_offset { set_hhmmss (pc, $1.value, $3.value, 0, 0); pc->meridian = MER24; } | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset { set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); pc->meridian = MER24; } ; o_zone_offset: /* empty */ | zone_offset ; zone_offset: tSNUMBER o_colon_minutes { pc->zones_seen++; if (! time_zone_hhmm (pc, $1, $2)) YYABORT; } ; /* Local zone strings affect only the DST setting, and take effect only if the current TZ setting is relevant. Example 1: 'EEST' is parsed as tLOCAL_ZONE, as it relates to the effective TZ: TZ='Europe/Helsinki' date -d '2016-06-30 EEST' Example 2: 'EEST' is parsed as tDAYZONE: TZ='Asia/Tokyo' date -d '2016-06-30 EEST' This is implemented by probing the next three calendar quarters of the effective timezone and looking for DST changes - if found, the timezone name (EEST) is inserted into the lexical lookup table with type tLOCAL_ZONE. (Search for 'quarter' comment in 'parse_datetime2'.) */ local_zone: tLOCAL_ZONE { pc->local_isdst = $1; } | tLOCAL_ZONE tDST { pc->local_isdst = 1; pc->dsts_seen++; } ; /* Note 'T' is a special case, as it is used as the separator in ISO 8601 date and time of day representation. */ zone: tZONE { pc->time_zone = $1; } | 'T' { pc->time_zone = -HOUR (7); } | tZONE relunit_snumber { pc->time_zone = $1; if (! apply_relative_time (pc, $2, 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } | 'T' relunit_snumber { pc->time_zone = -HOUR (7); if (! apply_relative_time (pc, $2, 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } | tZONE tSNUMBER o_colon_minutes { if (! time_zone_hhmm (pc, $2, $3)) YYABORT; if (INT_ADD_WRAPV (pc->time_zone, $1, &pc->time_zone)) YYABORT; } | tDAYZONE { pc->time_zone = $1 + 60 * 60; } | tZONE tDST { pc->time_zone = $1 + 60 * 60; } ; day: tDAY { pc->day_ordinal = 0; pc->day_number = $1; } | tDAY ',' { pc->day_ordinal = 0; pc->day_number = $1; } | tORDINAL tDAY { pc->day_ordinal = $1; pc->day_number = $2; pc->debug_ordinal_day_seen = true; } | tUNUMBER tDAY { pc->day_ordinal = $1.value; pc->day_number = $2; pc->debug_ordinal_day_seen = true; } ; date: tUNUMBER '/' tUNUMBER { pc->month = $1.value; pc->day = $3.value; } | tUNUMBER '/' tUNUMBER '/' tUNUMBER { /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, otherwise as MM/DD/YY. The goal in recognizing YYYY/MM/DD is solely to support legacy machine-generated dates like those in an RCS log listing. If you want portability, use the ISO 8601 format. */ if (4 <= $1.digits) { if (debugging (pc)) { intmax_t digits = $1.digits; dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " "Assuming YYYY/MM/DD\n"), $1.value, digits); } pc->year = $1; pc->month = $3.value; pc->day = $5.value; } else { if (debugging (pc)) dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " "Assuming MM/DD/YY[YY]\n"), $1.value); pc->month = $1.value; pc->day = $3.value; pc->year = $5; } } | tUNUMBER tMONTH tSNUMBER { /* E.g., 17-JUN-1992. */ pc->day = $1.value; pc->month = $2; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; pc->year.digits = $3.digits; } | tMONTH tSNUMBER tSNUMBER { /* E.g., JUN-17-1992. */ pc->month = $1; if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->day)) YYABORT; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; pc->year.digits = $3.digits; } | tMONTH tUNUMBER { pc->month = $1; pc->day = $2.value; } | tMONTH tUNUMBER ',' tUNUMBER { pc->month = $1; pc->day = $2.value; pc->year = $4; } | tUNUMBER tMONTH { pc->day = $1.value; pc->month = $2; } | tUNUMBER tMONTH tUNUMBER { pc->day = $1.value; pc->month = $2; pc->year = $3; } | iso_8601_date ; iso_8601_date: tUNUMBER tSNUMBER tSNUMBER { /* ISO 8601 format. YYYY-MM-DD. */ pc->year = $1; if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->month)) YYABORT; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->day)) YYABORT; } ; rel: relunit tAGO { if (! apply_relative_time (pc, $1, $2)) YYABORT; } | relunit { if (! apply_relative_time (pc, $1, 1)) YYABORT; } | dayshift { if (! apply_relative_time (pc, $1, 1)) YYABORT; } ; relunit: tORDINAL tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1; } | tUNUMBER tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1.value; } | tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = 1; } | tORDINAL tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1; } | tUNUMBER tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1.value; } | tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = 1; } | tORDINAL tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1, $2, &$$.day)) YYABORT; } | tUNUMBER tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } | tDAY_UNIT { $$ = RELATIVE_TIME_0; $$.day = $1; } | tORDINAL tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1; } | tUNUMBER tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } | tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = 1; } | tORDINAL tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1; } | tUNUMBER tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } | tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = 1; } | tORDINAL tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1; } | tUNUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } | tSDECIMAL_NUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } | tUDECIMAL_NUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } | tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = 1; } | relunit_snumber ; relunit_snumber: tSNUMBER tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1.value; } | tSNUMBER tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1.value; } | tSNUMBER tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } | tSNUMBER tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } | tSNUMBER tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } | tSNUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } ; dayshift: tDAY_SHIFT { $$ = RELATIVE_TIME_0; $$.day = $1; } ; seconds: signed_seconds | unsigned_seconds; signed_seconds: tSDECIMAL_NUMBER | tSNUMBER { if (time_overflow ($1.value)) YYABORT; $$.tv_sec = $1.value; $$.tv_nsec = 0; } ; unsigned_seconds: tUDECIMAL_NUMBER | tUNUMBER { if (time_overflow ($1.value)) YYABORT; $$.tv_sec = $1.value; $$.tv_nsec = 0; } ; number: tUNUMBER { digits_to_date_time (pc, $1); } ; hybrid: tUNUMBER relunit_snumber { /* Hybrid all-digit and relative offset, so that we accept e.g., "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ digits_to_date_time (pc, $1); if (! apply_relative_time (pc, $2, 1)) YYABORT; } ; o_colon_minutes: /* empty */ { $$ = -1; } | ':' tUNUMBER { $$ = $2.value; } ; %% static table const meridian_table[] = { { "AM", tMERIDIAN, MERam }, { "A.M.", tMERIDIAN, MERam }, { "PM", tMERIDIAN, MERpm }, { "P.M.", tMERIDIAN, MERpm }, { NULL, 0, 0 } }; static table const dst_table[] = { { "DST", tDST, 0 } }; static table const month_and_day_table[] = { { "JANUARY", tMONTH, 1 }, { "FEBRUARY", tMONTH, 2 }, { "MARCH", tMONTH, 3 }, { "APRIL", tMONTH, 4 }, { "MAY", tMONTH, 5 }, { "JUNE", tMONTH, 6 }, { "JULY", tMONTH, 7 }, { "AUGUST", tMONTH, 8 }, { "SEPTEMBER",tMONTH, 9 }, { "SEPT", tMONTH, 9 }, { "OCTOBER", tMONTH, 10 }, { "NOVEMBER", tMONTH, 11 }, { "DECEMBER", tMONTH, 12 }, { "SUNDAY", tDAY, 0 }, { "MONDAY", tDAY, 1 }, { "TUESDAY", tDAY, 2 }, { "TUES", tDAY, 2 }, { "WEDNESDAY",tDAY, 3 }, { "WEDNES", tDAY, 3 }, { "THURSDAY", tDAY, 4 }, { "THUR", tDAY, 4 }, { "THURS", tDAY, 4 }, { "FRIDAY", tDAY, 5 }, { "SATURDAY", tDAY, 6 }, { NULL, 0, 0 } }; static table const time_units_table[] = { { "YEAR", tYEAR_UNIT, 1 }, { "MONTH", tMONTH_UNIT, 1 }, { "FORTNIGHT",tDAY_UNIT, 14 }, { "WEEK", tDAY_UNIT, 7 }, { "DAY", tDAY_UNIT, 1 }, { "HOUR", tHOUR_UNIT, 1 }, { "MINUTE", tMINUTE_UNIT, 1 }, { "MIN", tMINUTE_UNIT, 1 }, { "SECOND", tSEC_UNIT, 1 }, { "SEC", tSEC_UNIT, 1 }, { NULL, 0, 0 } }; /* Assorted relative-time words. */ static table const relative_time_table[] = { { "TOMORROW", tDAY_SHIFT, 1 }, { "YESTERDAY",tDAY_SHIFT, -1 }, { "TODAY", tDAY_SHIFT, 0 }, { "NOW", tDAY_SHIFT, 0 }, { "LAST", tORDINAL, -1 }, { "THIS", tORDINAL, 0 }, { "NEXT", tORDINAL, 1 }, { "FIRST", tORDINAL, 1 }, /*{ "SECOND", tORDINAL, 2 }, */ { "THIRD", tORDINAL, 3 }, { "FOURTH", tORDINAL, 4 }, { "FIFTH", tORDINAL, 5 }, { "SIXTH", tORDINAL, 6 }, { "SEVENTH", tORDINAL, 7 }, { "EIGHTH", tORDINAL, 8 }, { "NINTH", tORDINAL, 9 }, { "TENTH", tORDINAL, 10 }, { "ELEVENTH", tORDINAL, 11 }, { "TWELFTH", tORDINAL, 12 }, { "AGO", tAGO, -1 }, { "HENCE", tAGO, 1 }, { NULL, 0, 0 } }; /* The universal time zone table. These labels can be used even for timestamps that would not otherwise be valid, e.g., GMT timestamps oin London during summer. */ static table const universal_time_zone_table[] = { { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ { "UTC", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* The time zone table. This table is necessarily incomplete, as time zone abbreviations are ambiguous; e.g., Australians interpret "EST" as Eastern time in Australia, not as US Eastern Standard Time. You cannot rely on parse_datetime to handle arbitrary time zone abbreviations; use numeric abbreviations like "-0500" instead. */ static table const time_zone_table[] = { { "WET", tZONE, HOUR ( 0) }, /* Western European */ { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ { "CET", tZONE, HOUR ( 1) }, /* Central European */ { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ { "MET", tZONE, HOUR ( 1) }, /* Middle European */ { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ { "GST", tZONE, HOUR (10) }, /* Guam Standard */ { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ { NULL, 0, 0 } }; /* Military time zone table. RFC 822 got these backwards, but RFC 5322 makes the incorrect treatment optional, so do them the right way here. Note 'T' is a special case, as it is used as the separator in ISO 8601 date and time of day representation. */ static table const military_table[] = { { "A", tZONE, HOUR ( 1) }, { "B", tZONE, HOUR ( 2) }, { "C", tZONE, HOUR ( 3) }, { "D", tZONE, HOUR ( 4) }, { "E", tZONE, HOUR ( 5) }, { "F", tZONE, HOUR ( 6) }, { "G", tZONE, HOUR ( 7) }, { "H", tZONE, HOUR ( 8) }, { "I", tZONE, HOUR ( 9) }, { "K", tZONE, HOUR (10) }, { "L", tZONE, HOUR (11) }, { "M", tZONE, HOUR (12) }, { "N", tZONE, -HOUR ( 1) }, { "O", tZONE, -HOUR ( 2) }, { "P", tZONE, -HOUR ( 3) }, { "Q", tZONE, -HOUR ( 4) }, { "R", tZONE, -HOUR ( 5) }, { "S", tZONE, -HOUR ( 6) }, { "T", 'T', 0 }, { "U", tZONE, -HOUR ( 8) }, { "V", tZONE, -HOUR ( 9) }, { "W", tZONE, -HOUR (10) }, { "X", tZONE, -HOUR (11) }, { "Y", tZONE, -HOUR (12) }, { "Z", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* Convert a time zone expressed as HH:MM into an integer count of seconds. If MM is negative, then S is of the form HHMM and needs to be picked apart; otherwise, S is of the form HH. As specified in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03, allow only valid TZ range, and consider first two digits as hours, if no minutes specified. Return true if successful. */ static bool time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) { intmax_t n_minutes; bool overflow = false; /* If the length of S is 1 or 2 and no minutes are specified, interpret it as a number of hours. */ if (s.digits <= 2 && mm < 0) s.value *= 100; if (mm < 0) n_minutes = (s.value / 100) * 60 + s.value % 100; else { overflow |= INT_MULTIPLY_WRAPV (s.value, 60, &n_minutes); overflow |= (s.negative ? INT_SUBTRACT_WRAPV (n_minutes, mm, &n_minutes) : INT_ADD_WRAPV (n_minutes, mm, &n_minutes)); } if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) return false; pc->time_zone = n_minutes * 60; return true; } static int to_hour (intmax_t hours, int meridian) { switch (meridian) { default: /* Pacify GCC. */ case MER24: return 0 <= hours && hours < 24 ? hours : -1; case MERam: return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; case MERpm: return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; } } enum { TM_YEAR_BASE = 1900 }; enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; /* Convert TM_YEAR, a year minus 1900, to a string that is numerically correct even if subtracting 1900 would overflow. */ static char const * tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) { verify (TM_YEAR_BASE % 100 == 0); sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], abs (tm_year / 100 + TM_YEAR_BASE / 100), abs (tm_year % 100)); return buf; } /* Convert a text year number to a year minus 1900, working correctly even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ static bool to_tm_year (textint textyear, bool debug, int *tm_year) { intmax_t year = textyear.value; /* XPG4 suggests that years 00-68 map to 2000-2068, and years 69-99 map to 1969-1999. */ if (0 <= year && textyear.digits == 2) { year += year < 69 ? 2000 : 1900; if (debug) dbg_printf (_("warning: adjusting year value %"PRIdMAX " to %"PRIdMAX"\n"), textyear.value, year); } if (year < 0 ? INT_SUBTRACT_WRAPV (-TM_YEAR_BASE, year, tm_year) : INT_SUBTRACT_WRAPV (year, TM_YEAR_BASE, tm_year)) { if (debug) dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); return false; } return true; } static table const * _GL_ATTRIBUTE_PURE lookup_zone (parser_control const *pc, char const *name) { table const *tp; for (tp = universal_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; /* Try local zone abbreviations before those in time_zone_table, as the local ones are more likely to be right. */ for (tp = pc->local_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; for (tp = time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; return NULL; } #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. The body of this function is taken directly from the GNU C Library; see strftime.c. */ static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = a4 / 25 - (a4 % 25 < 0); int b100 = b4 / 25 - (b4 % 25 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ static table const * lookup_word (parser_control const *pc, char *word) { char *p; char *q; idx_t wordlen; table const *tp; bool period_found; bool abbrev; /* Make it uppercase. */ for (p = word; *p; p++) *p = c_toupper (to_uchar (*p)); for (tp = meridian_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* See if we have an abbreviation for a month. */ wordlen = strlen (word); abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); for (tp = month_and_day_table; tp->name; tp++) if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) return tp; if ((tp = lookup_zone (pc, word))) return tp; if (strcmp (word, dst_table[0].name) == 0) return dst_table; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Strip off any plural and try the units table again. */ if (word[wordlen - 1] == 'S') { word[wordlen - 1] = '\0'; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ } for (tp = relative_time_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Military time zones. */ if (wordlen == 1) for (tp = military_table; tp->name; tp++) if (word[0] == tp->name[0]) return tp; /* Drop out any periods and try the time zone table again. */ for (period_found = false, p = q = word; (*p = *q); q++) if (*q == '.') period_found = true; else p++; if (period_found && (tp = lookup_zone (pc, word))) return tp; return NULL; } static int yylex (union YYSTYPE *lvalp, parser_control *pc) { unsigned char c; for (;;) { while (c = *pc->input, c_isspace (c)) pc->input++; if (c_isdigit (c) || c == '-' || c == '+') { char const *p = pc->input; int sign; if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; while (c = *(pc->input = ++p), c_isspace (c)) continue; if (! c_isdigit (c)) /* skip the '-' sign */ continue; } else sign = 0; time_t value = 0; do { if (INT_MULTIPLY_WRAPV (value, 10, &value)) return '?'; if (INT_ADD_WRAPV (value, sign < 0 ? '0' - c : c - '0', &value)) return '?'; c = *++p; } while (c_isdigit (c)); if ((c == '.' || c == ',') && c_isdigit (p[1])) { time_t s = value; int digits; /* Accumulate fraction, to ns precision. */ p++; int ns = *p++ - '0'; for (digits = 2; digits <= LOG10_BILLION; digits++) { ns *= 10; if (c_isdigit (*p)) ns += *p++ - '0'; } /* Skip excess digits, truncating toward -Infinity. */ if (sign < 0) for (; c_isdigit (*p); p++) if (*p != '0') { ns++; break; } while (c_isdigit (*p)) p++; /* Adjust to the timespec convention, which is that tv_nsec is always a positive offset even if tv_sec is negative. */ if (sign < 0 && ns) { if (INT_SUBTRACT_WRAPV (s, 1, &s)) return '?'; ns = BILLION - ns; } lvalp->timespec.tv_sec = s; lvalp->timespec.tv_nsec = ns; pc->input = p; return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; } else { lvalp->textintval.negative = sign < 0; lvalp->textintval.value = value; lvalp->textintval.digits = p - pc->input; pc->input = p; return sign ? tSNUMBER : tUNUMBER; } } if (c_isalpha (c)) { char buff[20]; char *p = buff; table const *tp; do { if (p < buff + sizeof buff - 1) *p++ = c; c = *++pc->input; } while (c_isalpha (c) || c == '.'); *p = '\0'; tp = lookup_word (pc, buff); if (! tp) { if (debugging (pc)) dbg_printf (_("error: unknown word '%s'\n"), buff); return '?'; } lvalp->intval = tp->value; return tp->type; } if (c != '(') return to_uchar (*pc->input++); idx_t count = 0; do { c = *pc->input++; if (c == '\0') return c; if (c == '(') count++; else if (c == ')') count--; } while (count != 0); } } /* Do nothing if the parser reports an error. */ static int yyerror (_GL_UNUSED parser_control const *pc, _GL_UNUSED char const *s) { return 0; } /* If *TM0 is the old and *TM1 is the new value of a struct tm after passing it to mktime_z, return true if it's OK. It's not OK if mktime failed or if *TM0 has out-of-range mainline members. The caller should set TM1->tm_wday to -1 before calling mktime, as a negative tm_wday is how mktime failure is inferred. */ static bool mktime_ok (struct tm const *tm0, struct tm const *tm1) { if (tm1->tm_wday < 0) return false; return ! ((tm0->tm_sec ^ tm1->tm_sec) | (tm0->tm_min ^ tm1->tm_min) | (tm0->tm_hour ^ tm1->tm_hour) | (tm0->tm_mday ^ tm1->tm_mday) | (tm0->tm_mon ^ tm1->tm_mon) | (tm0->tm_year ^ tm1->tm_year)); } /* Debugging: format a 'struct tm' into a buffer, taking the parser's timezone information into account (if pc != NULL). */ static char const * debug_strfdatetime (struct tm const *tm, parser_control const *pc, char *buf, int n) { /* TODO: 1. find an optimal way to print date string in a clear and unambiguous format. Currently, always add '(Y-M-D)' prefix. Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. If the user needs debug printing, it means he/she already having issues with the parsing - better to avoid formats that could be mis-interpreted (e.g., just YYYY-MM-DD). 2. Can strftime be used instead? depends if it is portable and can print invalid dates on all systems. 3. Print timezone information ? 4. Print DST information ? 5. Print nanosecond information ? NOTE: Printed date/time values might not be valid, e.g., '2016-02-31' or '2016-19-2016' . These are the values as parsed from the user string, before validation. */ int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); /* If parser_control information was provided (for timezone), and there's enough space in the buffer, add timezone info. */ if (pc && m < n && pc->zones_seen) { int tz = pc->time_zone; /* Account for DST if tLOCAL_ZONE was seen. */ if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) tz += 60 * 60; char time_zone_buf[TIME_ZONE_BUFSIZE]; snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); } return buf; } static char const * debug_strfdate (struct tm const *tm, char *buf, int n) { char tm_year_buf[TM_YEAR_BUFSIZE]; snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday); return buf; } static char const * debug_strftime (struct tm const *tm, char *buf, int n) { snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); return buf; } /* If mktime_ok failed, display the failed time values, and provide possible hints. Example output: date: error: invalid date/time value: date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' date: __ date: possible reasons: date: non-existing due to daylight-saving time; date: numeric values overflow; date: missing timezone; */ static void debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, parser_control const *pc, bool time_zone_seen) { /* TODO: handle t == -1 (as in 'mktime_ok'). */ char tmp[DBGBUFSIZE]; int i; const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); const bool eq_min = (tm0->tm_min == tm1->tm_min); const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); const bool eq_month = (tm0->tm_mon == tm1->tm_mon); const bool eq_year = (tm0->tm_year == tm1->tm_year); const bool dst_shift = eq_sec && eq_min && !eq_hour && eq_mday && eq_month && eq_year; if (!debugging (pc)) return; dbg_printf (_("error: invalid date/time value:\n")); dbg_printf (_(" user provided time: '%s'\n"), debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); dbg_printf (_(" normalized time: '%s'\n"), debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); /* The format must be aligned with debug_strfdatetime and the two DEBUG statements above. This string is not translated. */ i = snprintf (tmp, sizeof tmp, " %4s %2s %2s %2s %2s %2s", eq_year ? "" : "----", eq_month ? "" : "--", eq_mday ? "" : "--", eq_hour ? "" : "--", eq_min ? "" : "--", eq_sec ? "" : "--"); /* Trim trailing whitespace. */ if (0 <= i) { if (sizeof tmp - 1 < i) i = sizeof tmp - 1; while (0 < i && tmp[i - 1] == ' ') --i; tmp[i] = '\0'; } dbg_printf ("%s\n", tmp); dbg_printf (_(" possible reasons:\n")); if (dst_shift) dbg_printf (_(" non-existing due to daylight-saving time;\n")); if (!eq_mday && !eq_month) dbg_printf (_(" invalid day/month combination;\n")); dbg_printf (_(" numeric values overflow;\n")); dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") : _("missing timezone"))); } /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ static bool parse_datetime_body (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { struct tm tm; struct tm tm0; char time_zone_buf[TIME_ZONE_BUFSIZE]; char dbg_tm[DBGBUFSIZE]; bool ok = false; char const *input_sentinel = p + strlen (p); char *tz1alloc = NULL; /* A reasonable upper bound for the size of ordinary TZ strings. Use heap allocation if TZ's length exceeds this. */ enum { TZBUFSIZE = 100 }; char tz1buf[TZBUFSIZE]; struct timespec gettime_buffer; if (! now) { gettime (&gettime_buffer); now = &gettime_buffer; } time_t Start = now->tv_sec; int Start_ns = now->tv_nsec; unsigned char c; while (c = *p, c_isspace (c)) p++; timezone_t tz = tzdefault; /* Store a local copy prior to first "goto". Without this, a prior use below of RELATIVE_TIME_0 on the RHS might translate to an assignment- to-temporary, which would trigger a -Wjump-misses-init warning. */ const relative_time rel_time_0 = RELATIVE_TIME_0; if (strncmp (p, "TZ=\"", 4) == 0) { char const *tzbase = p + 4; idx_t tzsize = 1; char const *s; for (s = tzbase; *s; s++, tzsize++) if (*s == '\\') { s++; if (! (*s == '\\' || *s == '"')) break; } else if (*s == '"') { timezone_t tz1; char *tz1string = tz1buf; char *z; if (TZBUFSIZE < tzsize) { tz1alloc = malloc (tzsize); if (!tz1alloc) goto fail; tz1string = tz1alloc; } z = tz1string; for (s = tzbase; *s != '"'; s++) *z++ = *(s += *s == '\\'); *z = '\0'; tz1 = tzalloc (tz1string); if (!tz1) goto fail; tz = tz1; tzstring = tz1string; p = s + 1; while (c = *p, c_isspace (c)) p++; break; } } struct tm tmp; if (! localtime_rz (tz, &now->tv_sec, &tmp)) goto fail; /* As documented, be careful to treat the empty string just like a date string of "0". Without this, an empty string would be declared invalid when parsed during a DST transition. */ if (*p == '\0') p = "0"; parser_control pc; pc.input = p; #ifdef GNULIB_PARSE_DATETIME2 pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; #endif if (INT_ADD_WRAPV (tmp.tm_year, TM_YEAR_BASE, &pc.year.value)) { if (debugging (&pc)) dbg_printf (_("error: initial year out of range\n")); goto fail; } pc.year.digits = 0; pc.month = tmp.tm_mon + 1; pc.day = tmp.tm_mday; pc.hour = tmp.tm_hour; pc.minutes = tmp.tm_min; pc.seconds.tv_sec = tmp.tm_sec; pc.seconds.tv_nsec = Start_ns; tm.tm_isdst = tmp.tm_isdst; pc.meridian = MER24; pc.rel = rel_time_0; pc.timespec_seen = false; pc.rels_seen = false; pc.dates_seen = 0; pc.days_seen = 0; pc.times_seen = 0; pc.local_zones_seen = 0; pc.dsts_seen = 0; pc.zones_seen = 0; pc.year_seen = false; pc.debug_dates_seen = false; pc.debug_days_seen = false; pc.debug_times_seen = false; pc.debug_local_zones_seen = false; pc.debug_zones_seen = false; pc.debug_year_seen = false; pc.debug_ordinal_day_seen = false; #if HAVE_STRUCT_TM_TM_ZONE pc.local_time_zone_table[0].name = tmp.tm_zone; pc.local_time_zone_table[0].type = tLOCAL_ZONE; pc.local_time_zone_table[0].value = tmp.tm_isdst; pc.local_time_zone_table[1].name = NULL; /* Probe the names used in the next three calendar quarters, looking for a tm_isdst different from the one we already have. */ { int quarter; for (quarter = 1; quarter <= 3; quarter++) { time_t probe; if (INT_ADD_WRAPV (Start, quarter * (90 * 24 * 60 * 60), &probe)) break; struct tm probe_tm; if (localtime_rz (tz, &probe, &probe_tm) && probe_tm.tm_zone && probe_tm.tm_isdst != pc.local_time_zone_table[0].value) { { pc.local_time_zone_table[1].name = probe_tm.tm_zone; pc.local_time_zone_table[1].type = tLOCAL_ZONE; pc.local_time_zone_table[1].value = probe_tm.tm_isdst; pc.local_time_zone_table[2].name = NULL; } break; } } } #else #if HAVE_TZNAME { # if !HAVE_DECL_TZNAME extern char *tzname[]; # endif int i; for (i = 0; i < 2; i++) { pc.local_time_zone_table[i].name = tzname[i]; pc.local_time_zone_table[i].type = tLOCAL_ZONE; pc.local_time_zone_table[i].value = i; } pc.local_time_zone_table[i].name = NULL; } #else pc.local_time_zone_table[0].name = NULL; #endif #endif if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name && ! strcmp (pc.local_time_zone_table[0].name, pc.local_time_zone_table[1].name)) { /* This locale uses the same abbreviation for standard and daylight times. So if we see that abbreviation, we don't know whether it's daylight time. */ pc.local_time_zone_table[0].value = -1; pc.local_time_zone_table[1].name = NULL; } if (yyparse (&pc) != 0) { if (debugging (&pc)) dbg_printf ((input_sentinel <= pc.input ? _("error: parsing failed\n") : _("error: parsing failed, stopped at '%s'\n")), pc.input); goto fail; } /* Determine effective timezone source. */ if (debugging (&pc)) { dbg_printf (_("input timezone: ")); if (pc.timespec_seen) fprintf (stderr, _("'@timespec' - always UTC")); else if (pc.zones_seen) fprintf (stderr, _("parsed date/time string")); else if (tzstring) { if (tz != tzdefault) fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); else if (STREQ (tzstring, "UTC0")) { /* Special case: 'date -u' sets TZ="UTC0". */ fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); } else fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); } else fprintf (stderr, _("system default")); /* Account for DST changes if tLOCAL_ZONE was seen. local timezone only changes DST and is relative to the default timezone.*/ if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) fprintf (stderr, ", dst"); if (pc.zones_seen) fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); fputc ('\n', stderr); } if (pc.timespec_seen) *result = pc.seconds; else { if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen | (pc.local_zones_seen + pc.zones_seen))) { if (debugging (&pc)) { if (pc.times_seen > 1) dbg_printf ("error: seen multiple time parts\n"); if (pc.dates_seen > 1) dbg_printf ("error: seen multiple date parts\n"); if (pc.days_seen > 1) dbg_printf ("error: seen multiple days parts\n"); if (pc.dsts_seen > 1) dbg_printf ("error: seen multiple daylight-saving parts\n"); if ((pc.local_zones_seen + pc.zones_seen) > 1) dbg_printf ("error: seen multiple time-zone parts\n"); } goto fail; } if (! to_tm_year (pc.year, debugging (&pc), &tm.tm_year) || INT_ADD_WRAPV (pc.month, -1, &tm.tm_mon) || INT_ADD_WRAPV (pc.day, 0, &tm.tm_mday)) { if (debugging (&pc)) dbg_printf (_("error: year, month, or day overflow\n")); goto fail; } if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) { tm.tm_hour = to_hour (pc.hour, pc.meridian); if (tm.tm_hour < 0) { char const *mrd = (pc.meridian == MERam ? "am" : pc.meridian == MERpm ?"pm" : ""); if (debugging (&pc)) dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), pc.hour, mrd); goto fail; } tm.tm_min = pc.minutes; tm.tm_sec = pc.seconds.tv_sec; if (debugging (&pc)) dbg_printf ((pc.times_seen ? _("using specified time as starting value: '%s'\n") : _("using current time as starting value: '%s'\n")), debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); } else { tm.tm_hour = tm.tm_min = tm.tm_sec = 0; pc.seconds.tv_nsec = 0; if (debugging (&pc)) dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); } /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ if (pc.dates_seen | pc.days_seen | pc.times_seen) tm.tm_isdst = -1; /* But if the input explicitly specifies local time with or without DST, give mktime that information. */ if (pc.local_zones_seen) tm.tm_isdst = pc.local_isdst; tm0.tm_sec = tm.tm_sec; tm0.tm_min = tm.tm_min; tm0.tm_hour = tm.tm_hour; tm0.tm_mday = tm.tm_mday; tm0.tm_mon = tm.tm_mon; tm0.tm_year = tm.tm_year; tm0.tm_isdst = tm.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz, &tm); if (! mktime_ok (&tm0, &tm)) { bool repaired = false; bool time_zone_seen = pc.zones_seen != 0; if (time_zone_seen) { /* Guard against falsely reporting errors near the time_t boundaries when parsing times in other time zones. For example, suppose the input string "1969-12-31 23:00:00 -0100", the current time zone is 8 hours ahead of UTC, and the min time_t value is 1970-01-01 00:00:00 UTC. Then the min localtime value is 1970-01-01 08:00:00, and mktime will therefore fail on 1969-12-31 23:00:00. To work around the problem, set the time zone to 1 hour behind UTC temporarily by setting TZ="XXX1:00" and try mktime again. */ char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; time_zone_str (pc.time_zone, &tz2buf[3]); timezone_t tz2 = tzalloc (tz2buf); if (!tz2) { if (debugging (&pc)) dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); goto fail; } tm.tm_sec = tm0.tm_sec; tm.tm_min = tm0.tm_min; tm.tm_hour = tm0.tm_hour; tm.tm_mday = tm0.tm_mday; tm.tm_mon = tm0.tm_mon; tm.tm_year = tm0.tm_year; tm.tm_isdst = tm0.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz2, &tm); repaired = mktime_ok (&tm0, &tm); tzfree (tz2); } if (! repaired) { debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); goto fail; } } char dbg_ord[DBGBUFSIZE]; if (pc.days_seen && ! pc.dates_seen) { intmax_t dayincr; if (INT_MULTIPLY_WRAPV ((pc.day_ordinal - (0 < pc.day_ordinal && tm.tm_wday != pc.day_number)), 7, &dayincr) || INT_ADD_WRAPV ((pc.day_number - tm.tm_wday + 7) % 7, dayincr, &dayincr) || INT_ADD_WRAPV (dayincr, tm.tm_mday, &tm.tm_mday)) Start = -1; else { tm.tm_isdst = -1; Start = mktime_z (tz, &tm); } if (Start == (time_t) -1) { if (debugging (&pc)) dbg_printf (_("error: day '%s' " "(day ordinal=%"PRIdMAX" number=%d) " "resulted in an invalid date: '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), pc.day_ordinal, pc.day_number, debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) dbg_printf (_("new start date: '%s' is '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } if (debugging (&pc)) { if (!pc.dates_seen && !pc.days_seen) dbg_printf (_("using current date as starting value: '%s'\n"), debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); if (pc.days_seen && pc.dates_seen) dbg_printf (_("warning: day (%s) ignored when explicit dates " "are given\n"), str_days (&pc, dbg_ord, sizeof dbg_ord)); dbg_printf (_("starting date/time: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } /* Add relative date. */ if (pc.rel.year | pc.rel.month | pc.rel.day) { if (debugging (&pc)) { if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) dbg_printf (_("warning: when adding relative months/years, " "it is recommended to specify the 15th of the " "months\n")); if (pc.rel.day != 0 && tm.tm_hour != 12) dbg_printf (_("warning: when adding relative days, " "it is recommended to specify noon\n")); } int year, month, day; if (INT_ADD_WRAPV (tm.tm_year, pc.rel.year, &year) || INT_ADD_WRAPV (tm.tm_mon, pc.rel.month, &month) || INT_ADD_WRAPV (tm.tm_mday, pc.rel.day, &day)) { if (debugging (&pc)) dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); goto fail; } tm.tm_year = year; tm.tm_mon = month; tm.tm_mday = day; tm.tm_hour = tm0.tm_hour; tm.tm_min = tm0.tm_min; tm.tm_sec = tm0.tm_sec; tm.tm_isdst = tm0.tm_isdst; Start = mktime_z (tz, &tm); if (Start == (time_t) -1) { if (debugging (&pc)) dbg_printf (_("error: adding relative date resulted " "in an invalid date: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) { dbg_printf (_("after date adjustment " "(%+"PRIdMAX" years, %+"PRIdMAX" months, " "%+"PRIdMAX" days),\n"), pc.rel.year, pc.rel.month, pc.rel.day); dbg_printf (_(" new date/time = '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' This case is different than DST changes due to time adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm0.tm_isdst' contains the DST of the input date, 'tm.tm_isdst' is the normalized result after calling mktime (&tm). */ if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "date adjustment\n")); /* Warn if the user did not ask to adjust days but mday changed, or user did not ask to adjust months/days but the month changed. Example for first case: 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. User asked to adjust month, but the day changed from 31 to 01. Example for second case: 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. User asked to adjust year, but the month changed from 02 to 03. */ if (pc.rel.day == 0 && (tm.tm_mday != day || (pc.rel.month == 0 && tm.tm_mon != month))) { dbg_printf (_("warning: month/year adjustment resulted in " "shifted dates:\n")); char tm_year_buf[TM_YEAR_BUFSIZE]; dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), tm_year_str (year, tm_year_buf), month + 1, day); dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), tm_year_str (tm.tm_year, tm_year_buf), tm.tm_mon + 1, tm.tm_mday); } } } /* The only "output" of this if-block is an updated Start value, so this block must follow others that clobber Start. */ if (pc.zones_seen) { bool overflow = false; #ifdef HAVE_TM_GMTOFF long int utcoff = tm.tm_gmtoff; #else time_t t = Start; struct tm gmt; int utcoff = (gmtime_r (&t, &gmt) ? tm_diff (&tm, &gmt) : (overflow = true, 0)); #endif intmax_t delta; overflow |= INT_SUBTRACT_WRAPV (pc.time_zone, utcoff, &delta); time_t t1; overflow |= INT_SUBTRACT_WRAPV (Start, delta, &t1); if (overflow) { if (debugging (&pc)) dbg_printf (_("error: timezone %d caused time_t overflow\n"), pc.time_zone); goto fail; } Start = t1; } if (debugging (&pc)) { intmax_t Starti = Start; dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), Starti); } /* Add relative hours, minutes, and seconds. On hosts that support leap seconds, ignore the possibility of leap seconds; e.g., "+ 10 minutes" adds 600 seconds, even if one of them is a leap second. Typically this is not what the user wants, but it's too hard to do it the other way, because the time zone indicator must be applied before relative times, and if mktime is applied again the time zone will be lost. */ { intmax_t orig_ns = pc.seconds.tv_nsec; intmax_t sum_ns = orig_ns + pc.rel.ns; int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; int d4 = (sum_ns - normalized_ns) / BILLION; intmax_t d1, t1, d2, t2, t3; time_t t4; if (INT_MULTIPLY_WRAPV (pc.rel.hour, 60 * 60, &d1) || INT_ADD_WRAPV (Start, d1, &t1) || INT_MULTIPLY_WRAPV (pc.rel.minutes, 60, &d2) || INT_ADD_WRAPV (t1, d2, &t2) || INT_ADD_WRAPV (t2, pc.rel.seconds, &t3) || INT_ADD_WRAPV (t3, d4, &t4)) { if (debugging (&pc)) dbg_printf (_("error: adding relative time caused an " "overflow\n")); goto fail; } result->tv_sec = t4; result->tv_nsec = normalized_ns; if (debugging (&pc) && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) { dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " "%+"PRIdMAX" minutes, " "%+"PRIdMAX" seconds, %+d ns),\n"), pc.rel.hour, pc.rel.minutes, pc.rel.seconds, pc.rel.ns); intmax_t t4i = t4; dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4i); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' This case is different than DST changes due to days adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm.tm_isdst' contains the date after date adjustment. */ struct tm lmt; if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) && tm.tm_isdst != lmt.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "time adjustment\n")); } } } if (debugging (&pc)) { /* Special case: using 'date -u' simply set TZ=UTC0 */ if (! tzstring) dbg_printf (_("timezone: system default\n")); else if (STREQ (tzstring, "UTC0")) dbg_printf (_("timezone: Universal Time\n")); else dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); intmax_t sec = result->tv_sec; int nsec = result->tv_nsec; dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), sec, nsec); struct tm gmt, lmt; bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); if (got_utc) dbg_printf (_("final: %s (UTC)\n"), debug_strfdatetime (&gmt, NULL, dbg_tm, sizeof dbg_tm)); if (localtime_rz (tz, &result->tv_sec, &lmt)) { #ifdef HAVE_TM_GMTOFF bool got_utcoff = true; long int utcoff = lmt.tm_gmtoff; #else bool got_utcoff = got_utc; int utcoff; if (got_utcoff) utcoff = tm_diff (&lmt, &gmt); #endif if (got_utcoff) dbg_printf (_("final: %s (UTC%s)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), time_zone_str (utcoff, time_zone_buf)); else dbg_printf (_("final: %s (unknown time zone offset)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); } } ok = true; fail: if (tz != tzdefault) tzfree (tz); free (tz1alloc); return ok; } #ifdef GNULIB_PARSE_DATETIME2 /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ bool parse_datetime2 (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { return parse_datetime_body (result, p, now, flags, tzdefault, tzstring); } #endif /* The plain interface: run with debug=false and the default timezone. */ bool parse_datetime (struct timespec *result, char const *p, struct timespec const *now) { char const *tzstring = getenv ("TZ"); timezone_t tz = tzalloc (tzstring); if (!tz) return false; bool ok = parse_datetime_body (result, p, now, 0, tz, tzstring); tzfree (tz); return ok; } #if TEST int main (int ac, char **av) { char buff[BUFSIZ]; printf ("Enter date, or blank line to exit.\n\t> "); fflush (stdout); buff[BUFSIZ - 1] = '\0'; while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) { struct timespec d; struct tm const *tm; if (! parse_datetime (&d, buff, NULL)) printf ("Bad format - couldn't convert.\n"); else if (! (tm = localtime (&d.tv_sec))) { intmax_t sec = d.tv_sec; printf ("localtime (%"PRIdMAX") failed\n", sec); } else { int ns = d.tv_nsec; char tm_year_buf[TM_YEAR_BUFSIZE]; printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, ns); } printf ("\t> "); fflush (stdout); } return 0; } #endif /* TEST */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/parse-duration.c��������������������������������������������������������0000664�0000000�0000000�00000030057�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a time duration and return a seconds count Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruce Korb <bkorb@gnu.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include "parse-duration.h" #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #ifndef NUL #define NUL '\0' #endif #define cch_t char const typedef enum { NOTHING_IS_DONE, YEAR_IS_DONE, MONTH_IS_DONE, WEEK_IS_DONE, DAY_IS_DONE, HOUR_IS_DONE, MINUTE_IS_DONE, SECOND_IS_DONE } whats_done_t; #define SEC_PER_MIN 60 #define SEC_PER_HR (SEC_PER_MIN * 60) #define SEC_PER_DAY (SEC_PER_HR * 24) #define SEC_PER_WEEK (SEC_PER_DAY * 7) #define SEC_PER_MONTH (SEC_PER_DAY * 30) #define SEC_PER_YEAR (SEC_PER_DAY * 365) #undef MAX_DURATION #define MAX_DURATION TYPE_MAXIMUM(time_t) /* Wrapper around strtoul that does not require a cast. */ static unsigned long str_const_to_ul (cch_t * str, cch_t ** ppz, int base) { return strtoul (str, (char **)ppz, base); } /* Wrapper around strtol that does not require a cast. */ static long str_const_to_l (cch_t * str, cch_t ** ppz, int base) { return strtol (str, (char **)ppz, base); } /* Returns BASE + VAL * SCALE, interpreting BASE = BAD_TIME with errno set as an error situation, and returning BAD_TIME with errno set in an error situation. */ static time_t scale_n_add (time_t base, time_t val, int scale) { if (base == BAD_TIME) { if (errno == 0) errno = EINVAL; return BAD_TIME; } if (val > MAX_DURATION / scale) { errno = ERANGE; return BAD_TIME; } val *= scale; if (base > MAX_DURATION - val) { errno = ERANGE; return BAD_TIME; } return base + val; } /* After a number HH has been parsed, parse subsequent :MM or :MM:SS. */ static time_t parse_hr_min_sec (time_t start, cch_t * pz) { int lpct = 0; errno = 0; /* For as long as our scanner pointer points to a colon *AND* we've not looped before, then keep looping. (two iterations max) */ while ((*pz == ':') && (lpct++ <= 1)) { unsigned long v = str_const_to_ul (pz+1, &pz, 10); if (errno != 0) return BAD_TIME; start = scale_n_add (v, start, 60); if (errno != 0) return BAD_TIME; } /* allow for trailing spaces */ while (isspace ((unsigned char)*pz)) pz++; if (*pz != NUL) { errno = EINVAL; return BAD_TIME; } return start; } /* Parses a value and returns BASE + value * SCALE, interpreting BASE = BAD_TIME with errno set as an error situation, and returning BAD_TIME with errno set in an error situation. */ static time_t parse_scaled_value (time_t base, cch_t ** ppz, cch_t * endp, int scale) { cch_t * pz = *ppz; time_t val; if (base == BAD_TIME) return base; errno = 0; val = str_const_to_ul (pz, &pz, 10); if (errno != 0) return BAD_TIME; while (isspace ((unsigned char)*pz)) pz++; if (pz != endp) { errno = EINVAL; return BAD_TIME; } *ppz = pz; return scale_n_add (base, val, scale); } /* Parses the syntax YEAR-MONTH-DAY. PS points into the string, after "YEAR", before "-MONTH-DAY". */ static time_t parse_year_month_day (cch_t * pz, cch_t * ps) { time_t res = 0; res = parse_scaled_value (0, &pz, ps, SEC_PER_YEAR); pz++; /* over the first '-' */ ps = strchr (pz, '-'); if (ps == NULL) { errno = EINVAL; return BAD_TIME; } res = parse_scaled_value (res, &pz, ps, SEC_PER_MONTH); pz++; /* over the second '-' */ ps = pz + strlen (pz); return parse_scaled_value (res, &pz, ps, SEC_PER_DAY); } /* Parses the syntax YYYYMMDD. */ static time_t parse_yearmonthday (cch_t * in_pz) { time_t res = 0; char buf[8]; cch_t * pz; if (strlen (in_pz) != 8) { errno = EINVAL; return BAD_TIME; } memcpy (buf, in_pz, 4); buf[4] = NUL; pz = buf; res = parse_scaled_value (0, &pz, buf + 4, SEC_PER_YEAR); memcpy (buf, in_pz + 4, 2); buf[2] = NUL; pz = buf; res = parse_scaled_value (res, &pz, buf + 2, SEC_PER_MONTH); memcpy (buf, in_pz + 6, 2); buf[2] = NUL; pz = buf; return parse_scaled_value (res, &pz, buf + 2, SEC_PER_DAY); } /* Parses the syntax yy Y mm M ww W dd D. */ static time_t parse_YMWD (cch_t * pz) { time_t res = 0; cch_t * ps = strchr (pz, 'Y'); if (ps != NULL) { res = parse_scaled_value (0, &pz, ps, SEC_PER_YEAR); pz++; } ps = strchr (pz, 'M'); if (ps != NULL) { res = parse_scaled_value (res, &pz, ps, SEC_PER_MONTH); pz++; } ps = strchr (pz, 'W'); if (ps != NULL) { res = parse_scaled_value (res, &pz, ps, SEC_PER_WEEK); pz++; } ps = strchr (pz, 'D'); if (ps != NULL) { res = parse_scaled_value (res, &pz, ps, SEC_PER_DAY); pz++; } while (isspace ((unsigned char)*pz)) pz++; if (*pz != NUL) { errno = EINVAL; return BAD_TIME; } return res; } /* Parses the syntax HH:MM:SS. PS points into the string, after "HH", before ":MM:SS". */ static time_t parse_hour_minute_second (cch_t * pz, cch_t * ps) { time_t res = 0; res = parse_scaled_value (0, &pz, ps, SEC_PER_HR); pz++; ps = strchr (pz, ':'); if (ps == NULL) { errno = EINVAL; return BAD_TIME; } res = parse_scaled_value (res, &pz, ps, SEC_PER_MIN); pz++; ps = pz + strlen (pz); return parse_scaled_value (res, &pz, ps, 1); } /* Parses the syntax HHMMSS. */ static time_t parse_hourminutesecond (cch_t * in_pz) { time_t res = 0; char buf[4]; cch_t * pz; if (strlen (in_pz) != 6) { errno = EINVAL; return BAD_TIME; } memcpy (buf, in_pz, 2); buf[2] = NUL; pz = buf; res = parse_scaled_value (0, &pz, buf + 2, SEC_PER_HR); memcpy (buf, in_pz + 2, 2); buf[2] = NUL; pz = buf; res = parse_scaled_value (res, &pz, buf + 2, SEC_PER_MIN); memcpy (buf, in_pz + 4, 2); buf[2] = NUL; pz = buf; return parse_scaled_value (res, &pz, buf + 2, 1); } /* Parses the syntax hh H mm M ss S. */ static time_t parse_HMS (cch_t * pz) { time_t res = 0; cch_t * ps = strchr (pz, 'H'); if (ps != NULL) { res = parse_scaled_value (0, &pz, ps, SEC_PER_HR); pz++; } ps = strchr (pz, 'M'); if (ps != NULL) { res = parse_scaled_value (res, &pz, ps, SEC_PER_MIN); pz++; } ps = strchr (pz, 'S'); if (ps != NULL) { res = parse_scaled_value (res, &pz, ps, 1); pz++; } while (isspace ((unsigned char)*pz)) pz++; if (*pz != NUL) { errno = EINVAL; return BAD_TIME; } return res; } /* Parses a time (hours, minutes, seconds) specification in either syntax. */ static time_t parse_time (cch_t * pz) { cch_t * ps; time_t res = 0; /* * Scan for a hyphen */ ps = strchr (pz, ':'); if (ps != NULL) { res = parse_hour_minute_second (pz, ps); } /* * Try for a 'H', 'M' or 'S' suffix */ else if (ps = strpbrk (pz, "HMS"), ps == NULL) { /* Its a YYYYMMDD format: */ res = parse_hourminutesecond (pz); } else res = parse_HMS (pz); return res; } /* Returns a substring of the given string, with spaces at the beginning and at the end destructively removed, per SNOBOL. */ static char * trim (char * pz) { /* trim leading white space */ while (isspace ((unsigned char)*pz)) pz++; /* trim trailing white space */ { char * pe = pz + strlen (pz); while ((pe > pz) && isspace ((unsigned char)pe[-1])) pe--; *pe = NUL; } return pz; } /* * Parse the year/months/days of a time period */ static time_t parse_period (cch_t * in_pz) { char * pT; char * ps; char * pz = strdup (in_pz); void * fptr = pz; time_t res = 0; if (pz == NULL) { errno = ENOMEM; return BAD_TIME; } pT = strchr (pz, 'T'); if (pT != NULL) { *(pT++) = NUL; pz = trim (pz); pT = trim (pT); } /* * Scan for a hyphen */ ps = strchr (pz, '-'); if (ps != NULL) { res = parse_year_month_day (pz, ps); } /* * Try for a 'Y', 'M' or 'D' suffix */ else if (ps = strpbrk (pz, "YMWD"), ps == NULL) { /* Its a YYYYMMDD format: */ res = parse_yearmonthday (pz); } else res = parse_YMWD (pz); if ((errno == 0) && (pT != NULL)) { time_t val = parse_time (pT); res = scale_n_add (res, val, 1); } free (fptr); return res; } static time_t parse_non_iso8601 (cch_t * pz) { whats_done_t whatd_we_do = NOTHING_IS_DONE; time_t res = 0; do { time_t val; errno = 0; val = str_const_to_l (pz, &pz, 10); if (errno != 0) goto bad_time; /* IF we find a colon, then we're going to have a seconds value. We will not loop here any more. We cannot already have parsed a minute value and if we've parsed an hour value, then the result value has to be less than an hour. */ if (*pz == ':') { if (whatd_we_do >= MINUTE_IS_DONE) break; val = parse_hr_min_sec (val, pz); if ((whatd_we_do == HOUR_IS_DONE) && (val >= SEC_PER_HR)) break; return scale_n_add (res, val, 1); } { unsigned int mult; /* Skip over white space following the number we just parsed. */ while (isspace ((unsigned char)*pz)) pz++; switch (*pz) { default: goto bad_time; case NUL: return scale_n_add (res, val, 1); case 'y': case 'Y': if (whatd_we_do >= YEAR_IS_DONE) goto bad_time; mult = SEC_PER_YEAR; whatd_we_do = YEAR_IS_DONE; break; case 'M': if (whatd_we_do >= MONTH_IS_DONE) goto bad_time; mult = SEC_PER_MONTH; whatd_we_do = MONTH_IS_DONE; break; case 'W': if (whatd_we_do >= WEEK_IS_DONE) goto bad_time; mult = SEC_PER_WEEK; whatd_we_do = WEEK_IS_DONE; break; case 'd': case 'D': if (whatd_we_do >= DAY_IS_DONE) goto bad_time; mult = SEC_PER_DAY; whatd_we_do = DAY_IS_DONE; break; case 'h': if (whatd_we_do >= HOUR_IS_DONE) goto bad_time; mult = SEC_PER_HR; whatd_we_do = HOUR_IS_DONE; break; case 'm': if (whatd_we_do >= MINUTE_IS_DONE) goto bad_time; mult = SEC_PER_MIN; whatd_we_do = MINUTE_IS_DONE; break; case 's': mult = 1; whatd_we_do = SECOND_IS_DONE; break; } res = scale_n_add (res, val, mult); pz++; while (isspace ((unsigned char)*pz)) pz++; if (*pz == NUL) return res; if (! isdigit ((unsigned char)*pz)) break; } } while (whatd_we_do < SECOND_IS_DONE); bad_time: errno = EINVAL; return BAD_TIME; } time_t parse_duration (char const * pz) { while (isspace ((unsigned char)*pz)) pz++; switch (*pz) { case 'P': return parse_period (pz + 1); case 'T': return parse_time (pz + 1); default: if (isdigit ((unsigned char)*pz)) return parse_non_iso8601 (pz); errno = EINVAL; return BAD_TIME; } } /* * Local Variables: * mode: C * c-file-style: "gnu" * indent-tabs-mode: nil * End: * end of parse-duration.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/parse-duration.h��������������������������������������������������������0000664�0000000�0000000�00000006504�14110572173�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a time duration and return a seconds count Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruce Korb <bkorb@gnu.org>, 2008. 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/>. */ /* Readers and users of this function are referred to the ISO-8601 specification, with particular attention to "Durations". At the time of writing, this worked: https://en.wikipedia.org/wiki/ISO_8601#Durations The string must start with a 'P', 'T' or a digit. ==== if it is a digit the string may contain: NNN Y NNN M NNN W NNN d NNN h NNN m NNN s This represents NNN years, NNN months, NNN weeks, NNN days, NNN hours, NNN minutes and NNN seconds. The embedded white space is optional. These terms must appear in this order. Case is significant: 'M' is months and 'm' is minutes. The final "s" is optional. All of the terms ("NNN" plus designator) are optional. Minutes and seconds may optionally be represented as NNN:NNN. Also, hours, minute and seconds may be represented as NNN:NNN:NNN. There is no limitation on the value of any of the terms, except that the final result must fit in a time_t value. ==== if it is a 'P' or 'T', please see ISO-8601 for a rigorous definition. The 'P' term may be followed by any of three formats: yyyymmdd yy-mm-dd yy Y mm M ww W dd D or it may be empty and followed by a 'T'. The "yyyymmdd" must be eight digits long. NOTE! Months are always 30 days and years are always 365 days long. 5 years is always 1825 days, not 1826 or 1827 depending on leap year considerations. 3 months is always 90 days. There is no consideration for how many days are in the current, next or previous months. For the final format: * Embedded white space is allowed, but it is optional. * All of the terms are optional. Any or all-but-one may be omitted. * The meanings are yy years, mm months, ww weeks and dd days. * The terms must appear in this order. ==== The 'T' term may be followed by any of these formats: hhmmss hh:mm:ss hh H mm M ss S For the final format: * Embedded white space is allowed, but it is optional. * All of the terms are optional. Any or all-but-one may be omitted. * The terms must appear in this order. */ #ifndef GNULIB_PARSE_DURATION_H #define GNULIB_PARSE_DURATION_H #include <time.h> /* Return value when a valid duration cannot be parsed. */ #define BAD_TIME ((time_t)~0) /* Parses the given string. If it has the syntax of a valid duration, this duration is returned. Otherwise, the return value is BAD_TIME, and errno is set to either EINVAL (bad syntax) or ERANGE (out of range). */ extern time_t parse_duration (char const * in_pz); #endif /* GNULIB_PARSE_DURATION_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/passfd.c����������������������������������������������������������������0000664�0000000�0000000�00000011562�14110572173�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include "passfd.h" #include <errno.h> #include <fcntl.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <sys/socket.h> #include "cloexec.h" /* The code that uses CMSG_FIRSTHDR is enabled on Linux, Mac OS X, FreeBSD, OpenBSD, NetBSD, AIX, OSF/1, Cygwin. The code that uses HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS is enabled on HP-UX, IRIX, Solaris. */ /* MSG_CMSG_CLOEXEC is defined only on Linux, as of 2011. */ #ifndef MSG_CMSG_CLOEXEC # define MSG_CMSG_CLOEXEC 0 #endif #if HAVE_SENDMSG /* sendfd sends the file descriptor fd along the socket to a process calling recvfd on the other end. Return 0 on success, or -1 with errno set in case of error. */ int sendfd (int sock, int fd) { char byte = 0; struct iovec iov; struct msghdr msg; # ifdef CMSG_FIRSTHDR struct cmsghdr *cmsg; char buf[CMSG_SPACE (sizeof fd)]; # endif /* send at least one char */ memset (&msg, 0, sizeof msg); iov.iov_base = &byte; iov.iov_len = 1; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_name = NULL; msg.msg_namelen = 0; # ifdef CMSG_FIRSTHDR msg.msg_control = buf; msg.msg_controllen = sizeof buf; cmsg = CMSG_FIRSTHDR (&msg); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; cmsg->cmsg_len = CMSG_LEN (sizeof fd); /* Initialize the payload: */ memcpy (CMSG_DATA (cmsg), &fd, sizeof fd); msg.msg_controllen = cmsg->cmsg_len; # elif HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS msg.msg_accrights = &fd; msg.msg_accrightslen = sizeof fd; # else errno = ENOSYS; return -1; # endif if (sendmsg (sock, &msg, 0) != iov.iov_len) return -1; return 0; } #else int sendfd (_GL_UNUSED int sock, _GL_UNUSED int fd) { errno = ENOSYS; return -1; } #endif #if HAVE_RECVMSG /* recvfd receives a file descriptor through the socket. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>). Return the fd on success, or -1 with errno set in case of error. */ int recvfd (int sock, int flags) { char byte = 0; struct iovec iov; struct msghdr msg; int fd = -1; ssize_t len; # ifdef CMSG_FIRSTHDR struct cmsghdr *cmsg; char buf[CMSG_SPACE (sizeof fd)]; int flags_recvmsg = flags & O_CLOEXEC ? MSG_CMSG_CLOEXEC : 0; # endif if ((flags & ~O_CLOEXEC) != 0) { errno = EINVAL; return -1; } /* send at least one char */ memset (&msg, 0, sizeof msg); iov.iov_base = &byte; iov.iov_len = 1; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_name = NULL; msg.msg_namelen = 0; # ifdef CMSG_FIRSTHDR msg.msg_control = buf; msg.msg_controllen = sizeof buf; cmsg = CMSG_FIRSTHDR (&msg); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; cmsg->cmsg_len = CMSG_LEN (sizeof fd); /* Initialize the payload: */ memcpy (CMSG_DATA (cmsg), &fd, sizeof fd); msg.msg_controllen = CMSG_SPACE (sizeof fd); len = recvmsg (sock, &msg, flags_recvmsg); if (len < 0) return -1; if (len == 0) { /* fake errno: at end the file is not available */ errno = ENOTCONN; return -1; } cmsg = CMSG_FIRSTHDR (&msg); /* be paranoiac */ if (cmsg == NULL || cmsg->cmsg_len != CMSG_LEN (sizeof fd) || cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) { errno = EACCES; return -1; } memcpy (&fd, CMSG_DATA (cmsg), sizeof fd); /* set close-on-exec flag */ if (!MSG_CMSG_CLOEXEC && (flags & O_CLOEXEC)) { if (set_cloexec_flag (fd, true) < 0) { int saved_errno = errno; (void) close (fd); errno = saved_errno; return -1; } } # elif HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS msg.msg_accrights = &fd; msg.msg_accrightslen = sizeof fd; if (recvmsg (sock, &msg, 0) < 0) return -1; /* set close-on-exec flag */ if (flags & O_CLOEXEC) { if (set_cloexec_flag (fd, true) < 0) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } # else errno = ENOSYS; # endif return fd; } #else int recvfd (_GL_UNUSED int sock, _GL_UNUSED int flags) { errno = ENOSYS; return -1; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/passfd.h����������������������������������������������������������������0000664�0000000�0000000�00000001717�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* passfd.h -- definitions and prototypes for passfd.c Copyright (C) 2011-2021 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/>. */ #ifndef PASSFD_H_ #define PASSFD_H_ 1 #ifdef __cplusplus extern "C" { #endif extern int sendfd (int sock, int fd); extern int recvfd (int sock, int flags); #ifdef __cplusplus } #endif #endif �������������������������������������������������gnulib-20210822~d383792/lib/pathmax.h���������������������������������������������������������������0000664�0000000�0000000�00000005630�14110572173�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2021 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/>. */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. This file does *not* define PATH_MAX always. Programs that use this file can handle the GNU/Hurd case in several ways: - Either with a package-wide handling, or with a per-file handling, - Either through a #ifdef PATH_MAX or through a fallback like #ifndef PATH_MAX # define PATH_MAX 8192 #endif or through a fallback like #ifndef PATH_MAX # define PATH_MAX pathconf ("/", _PC_PATH_MAX) #endif */ # include <unistd.h> # include <limits.h> # ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 256 # endif /* Don't include sys/param.h if it already has been. */ # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> # endif # if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN # endif # ifdef __hpux /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, *not* including the terminating NUL byte, and is set to 1023. Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is not defined at all any more. */ # undef PATH_MAX # define PATH_MAX 1024 # endif # if defined _WIN32 && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as - FILENAME_MAX in <stdio.h>, - _MAX_PATH in <stdlib.h>, - MAX_PATH in <windef.h>. Undefine the original value, because mingw's <limits.h> gets it wrong. */ # undef PATH_MAX # define PATH_MAX 260 # endif #endif /* _PATHMAX_H */ ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pclose.c����������������������������������������������������������������0000664�0000000�0000000�00000001612�14110572173�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream to a sub-process. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Native Windows API. */ int pclose (FILE *stream) { return _pclose (stream); } ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/perror.c����������������������������������������������������������������0000664�0000000�0000000�00000003005�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print a message describing error code. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "strerror-override.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef fprintf void perror (const char *string) { char stackbuf[STACKBUF_LEN]; int ret; /* Our implementation guarantees that this will be a non-empty string, even if it returns EINVAL; and stackbuf should be sized large enough to avoid ERANGE. */ ret = strerror_r (errno, stackbuf, sizeof stackbuf); if (ret == ERANGE) abort (); if (string != NULL && *string != '\0') fprintf (stderr, "%s: %s\n", string, stackbuf); else fprintf (stderr, "%s\n", stackbuf); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/physmem.c���������������������������������������������������������������0000664�0000000�0000000�00000020203�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Calculate the size of physical memory. Copyright (C) 2000-2001, 2003, 2005-2006, 2009-2021 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. */ #include <config.h> #include "physmem.h" #include <unistd.h> #if HAVE_SYS_PSTAT_H # include <sys/pstat.h> #endif #if HAVE_SYS_SYSMP_H # include <sys/sysmp.h> #endif #if HAVE_SYS_SYSINFO_H # include <sys/sysinfo.h> #endif #if HAVE_MACHINE_HAL_SYSINFO_H # include <machine/hal_sysinfo.h> #endif #if HAVE_SYS_TABLE_H # include <sys/table.h> #endif #include <sys/types.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if HAVE_SYS_SYSCTL_H && ! defined __GLIBC__ # include <sys/sysctl.h> #endif #if HAVE_SYS_SYSTEMCFG_H # include <sys/systemcfg.h> #endif #ifdef _WIN32 # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetModuleHandle # define GetModuleHandle GetModuleHandleA /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* MEMORYSTATUSEX is missing from older windows headers, so define a local replacement. */ typedef struct { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG ullTotalPhys; DWORDLONG ullAvailPhys; DWORDLONG ullTotalPageFile; DWORDLONG ullAvailPageFile; DWORDLONG ullTotalVirtual; DWORDLONG ullAvailVirtual; DWORDLONG ullAvailExtendedVirtual; } lMEMORYSTATUSEX; typedef BOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*); #endif #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) /* Return the total amount of physical memory. */ double physmem_total (void) { #if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE { /* This works on linux-gnu, solaris2 and cygwin. */ double pages = sysconf (_SC_PHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; } #endif #if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT { /* This works on linux. */ struct sysinfo si; if (sysinfo(&si) == 0) return (double) si.totalram * si.mem_unit; } #endif #if HAVE_PSTAT_GETSTATIC { /* This works on hpux11. */ struct pst_static pss; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) { double pages = pss.physical_memory; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE { /* This works on irix6. */ struct rminfo realmem; if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) { double pagesize = sysconf (_SC_PAGESIZE); double pages = realmem.physmem; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_GETSYSINFO && defined GSI_PHYSMEM { /* This works on Tru64 UNIX V4/5. */ int physmem; if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem), NULL, NULL, NULL) == 1) { double kbytes = physmem; if (0 <= kbytes) return kbytes * 1024.0; } } #endif #if HAVE_SYSCTL && ! defined __GLIBC__ && defined HW_PHYSMEM { /* This works on *bsd and darwin. */ unsigned int physmem; size_t len = sizeof physmem; static int mib[2] = { CTL_HW, HW_PHYSMEM }; if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0 && len == sizeof (physmem)) return (double) physmem; } #endif #if HAVE__SYSTEM_CONFIGURATION /* This works on AIX. */ return _system_configuration.physmem; #endif #if defined _WIN32 { /* this works on windows */ PFN_MS_EX pfnex; HMODULE h = GetModuleHandle ("kernel32.dll"); if (!h) return 0.0; /* Use GlobalMemoryStatusEx if available. */ if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) { lMEMORYSTATUSEX lms_ex; lms_ex.dwLength = sizeof lms_ex; if (!pfnex (&lms_ex)) return 0.0; return (double) lms_ex.ullTotalPhys; } /* Fall back to GlobalMemoryStatus which is always available. but returns wrong results for physical memory > 4GB. */ else { MEMORYSTATUS ms; GlobalMemoryStatus (&ms); return (double) ms.dwTotalPhys; } } #endif /* Guess 64 MB. It's probably an older host, so guess small. */ return 64 * 1024 * 1024; } /* Return the amount of physical memory available. */ double physmem_available (void) { #if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE { /* This works on linux-gnu, solaris2 and cygwin. */ double pages = sysconf (_SC_AVPHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; } #endif #if HAVE_SYSINFO && HAVE_STRUCT_SYSINFO_MEM_UNIT { /* This works on linux. */ struct sysinfo si; if (sysinfo(&si) == 0) return ((double) si.freeram + si.bufferram) * si.mem_unit; } #endif #if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC { /* This works on hpux11. */ struct pst_static pss; struct pst_dynamic psd; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) { double pages = psd.psd_free; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE { /* This works on irix6. */ struct rminfo realmem; if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) { double pagesize = sysconf (_SC_PAGESIZE); double pages = realmem.availrmem; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_TABLE && defined TBL_VMSTATS { /* This works on Tru64 UNIX V4/5. */ struct tbl_vmstats vmstats; if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1) { double pages = vmstats.free_count; double pagesize = vmstats.pagesize; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSCTL && ! defined __GLIBC__ && defined HW_USERMEM { /* This works on *bsd and darwin. */ unsigned int usermem; size_t len = sizeof usermem; static int mib[2] = { CTL_HW, HW_USERMEM }; if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0 && len == sizeof (usermem)) return (double) usermem; } #endif #if defined _WIN32 { /* this works on windows */ PFN_MS_EX pfnex; HMODULE h = GetModuleHandle ("kernel32.dll"); if (!h) return 0.0; /* Use GlobalMemoryStatusEx if available. */ if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) { lMEMORYSTATUSEX lms_ex; lms_ex.dwLength = sizeof lms_ex; if (!pfnex (&lms_ex)) return 0.0; return (double) lms_ex.ullAvailPhys; } /* Fall back to GlobalMemoryStatus which is always available. but returns wrong results for physical memory > 4GB */ else { MEMORYSTATUS ms; GlobalMemoryStatus (&ms); return (double) ms.dwAvailPhys; } } #endif /* Guess 25% of physical memory. */ return physmem_total () / 4; } #if DEBUG # include <stdio.h> # include <stdlib.h> int main (void) { printf ("%12.f %12.f\n", physmem_total (), physmem_available ()); exit (0); } #endif /* DEBUG */ /* Local Variables: compile-command: "gcc -DDEBUG -g -O -Wall -W physmem.c" End: */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/physmem.h���������������������������������������������������������������0000664�0000000�0000000�00000001654�14110572173�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Calculate the size of physical memory. Copyright (C) 2000, 2003, 2009-2021 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. */ #ifndef PHYSMEM_H_ # define PHYSMEM_H_ 1 double physmem_total (void); double physmem_available (void); #endif /* PHYSMEM_H_ */ ������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-filter-aux.c�������������������������������������������������������0000664�0000000�0000000�00000002354�14110572173�0020230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary code for filtering of data through a subprocess. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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> #define PIPE_FILTER_AUX_INLINE _GL_EXTERN_INLINE #include "pipe-filter.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <windows.h> #else # include <signal.h> # include <sys/select.h> #endif #include "error.h" #include "spawn-pipe.h" #include "wait-process.h" #include "gettext.h" #define _(str) gettext (str) #include "pipe-filter-aux.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-filter-aux.h�������������������������������������������������������0000664�0000000�0000000�00000006647�14110572173�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary code for filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2009. This 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 _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef PIPE_FILTER_AUX_INLINE # define PIPE_FILTER_AUX_INLINE _GL_INLINE #endif #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #ifdef _AIX /* On AIX, despite having select() and despite having put the file descriptor in non-blocking mode, it can happen that select() reports that fd[1] is writable but writing a large amount of data to fd[1] then fails with errno EAGAIN. Seen with test-pipe-filter-gi1 on AIX 7.2, with data sizes of 29 KB. So, limit the size of data passed to the write() call to 4 KB. */ # undef SSIZE_MAX # define SSIZE_MAX 4096 #endif /* We use a child process, and communicate through a bidirectional pipe. To avoid deadlocks, let the child process decide when it wants to read or to write, and let the parent behave accordingly. The parent uses select() to know whether it must write or read. On platforms without select(), we use non-blocking I/O. (This means the parent is busy looping while waiting for the child. Not good. But hardly any platform lacks select() nowadays.) */ /* On BeOS and OS/2 kLIBC select() works only on sockets, not on normal file descriptors. */ #if defined __BEOS__ || defined __KLIBC__ # undef HAVE_SELECT #endif #ifdef EINTR /* EINTR handling for close(), read(), write(), select(). These functions can return -1/EINTR even though we don't have any signal handlers set up, namely when we get interrupted via SIGSTOP. */ PIPE_FILTER_AUX_INLINE int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #undef close /* avoid warning related to gnulib module unistd */ #define close nonintr_close PIPE_FILTER_AUX_INLINE ssize_t nonintr_read (int fd, void *buf, size_t count) { ssize_t retval; do retval = read (fd, buf, count); while (retval < 0 && errno == EINTR); return retval; } #undef read /* avoid warning related to gnulib module unistd */ #define read nonintr_read PIPE_FILTER_AUX_INLINE ssize_t nonintr_write (int fd, const void *buf, size_t count) { ssize_t retval; do retval = write (fd, buf, count); while (retval < 0 && errno == EINTR); return retval; } #undef write /* avoid warning on VMS */ #define write nonintr_write #endif /* Non-blocking I/O. */ #if HAVE_SELECT # define IS_EAGAIN(errcode) 0 #else # ifdef EWOULDBLOCK # define IS_EAGAIN(errcode) ((errcode) == EAGAIN || (errcode) == EWOULDBLOCK) # else # define IS_EAGAIN(errcode) ((errcode) == EAGAIN) # endif #endif _GL_INLINE_HEADER_END �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-filter-gi.c��������������������������������������������������������0000664�0000000�0000000�00000040243�14110572173�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2021 Free Software Foundation, Inc. Written by Paolo Bonzini <bonzini@gnu.org>, 2009, and Bruno Haible <bruno@clisp.org>, 2009. This 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 "pipe-filter.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <windows.h> # include <process.h> /* _beginthreadex, _endthreadex */ #else # include <signal.h> # include <sys/select.h> #endif #include "error.h" #include "spawn-pipe.h" #include "wait-process.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) #include "pipe-filter-aux.h" struct pipe_filter_gi { /* Arguments passed to pipe_filter_gi_create. */ const char *progname; bool null_stderr; bool exit_on_error; prepare_read_fn prepare_read; done_read_fn done_read; void *private_data; /* Management of the subprocess. */ pid_t child; int fd[2]; bool exited; int exitstatus; /* Status of the writer part. */ volatile bool writer_terminated; int writer_errno; /* Status of the reader part. */ volatile bool reader_terminated; volatile int reader_errno; #if defined _WIN32 && ! defined __CYGWIN__ CRITICAL_SECTION lock; /* protects the volatile fields */ HANDLE reader_thread_handle; #else struct sigaction orig_sigpipe_action; fd_set readfds; /* All bits except fd[0] are always cleared. */ fd_set writefds; /* All bits except fd[1] are always cleared. */ #endif }; /* Platform dependent functions. */ /* Perform additional initializations. Return 0 if successful, -1 upon failure. */ static int filter_init (struct pipe_filter_gi *filter); /* Write count bytes starting at buf, while at the same time invoking the read iterator (the functions prepare_read/done_read) when needed. */ static void filter_loop (struct pipe_filter_gi *filter, const char *wbuf, size_t count); /* Perform cleanup actions at the end. finish_reading is true if there was no error, or false if some error occurred already. */ static void filter_cleanup (struct pipe_filter_gi *filter, bool finish_reading); #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ static unsigned int WINAPI reader_thread_func (void *thread_arg) { struct pipe_filter_gi *filter = (struct pipe_filter_gi *) thread_arg; for (;;) { size_t bufsize; void *buf = filter->prepare_read (&bufsize, filter->private_data); if (!(buf != NULL && bufsize > 0)) /* prepare_read returned wrong values. */ abort (); { ssize_t nread = read (filter->fd[0], buf, bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); EnterCriticalSection (&filter->lock); /* If the writer already encountered an error, terminate. */ if (filter->writer_terminated) break; if (nread < 0) { filter->reader_errno = errno; break; } else if (nread > 0) filter->done_read (buf, nread, filter->private_data); else /* nread == 0 */ break; LeaveCriticalSection (&filter->lock); } } filter->reader_terminated = true; LeaveCriticalSection (&filter->lock); _endthreadex (0); /* calls ExitThread (0) */ abort (); } static int filter_init (struct pipe_filter_gi *filter) { InitializeCriticalSection (&filter->lock); EnterCriticalSection (&filter->lock); filter->reader_thread_handle = (HANDLE) _beginthreadex (NULL, 100000, reader_thread_func, filter, 0, NULL); if (filter->reader_thread_handle == NULL) { if (filter->exit_on_error) error (EXIT_FAILURE, 0, _("creation of reading thread failed")); return -1; } else return 0; } static void filter_loop (struct pipe_filter_gi *filter, const char *wbuf, size_t count) { if (!filter->writer_terminated) { for (;;) { ssize_t nwritten; /* Allow the reader thread to continue. */ LeaveCriticalSection (&filter->lock); nwritten = write (filter->fd[1], wbuf, count > SSIZE_MAX ? SSIZE_MAX : count); /* Get the lock back from the reader thread. */ EnterCriticalSection (&filter->lock); if (nwritten < 0) { /* Don't assume that the gnulib modules 'write' and 'sigpipe' are used. */ if (GetLastError () == ERROR_NO_DATA) errno = EPIPE; filter->writer_errno = errno; filter->writer_terminated = true; break; } else if (nwritten > 0) { count -= nwritten; if (count == 0) break; wbuf += nwritten; } else /* nwritten == 0 */ { filter->writer_terminated = true; break; } } } } static void filter_cleanup (struct pipe_filter_gi *filter, bool finish_reading) { if (finish_reading) { LeaveCriticalSection (&filter->lock); WaitForSingleObject (filter->reader_thread_handle, INFINITE); } else TerminateThread (filter->reader_thread_handle, 1); CloseHandle (filter->reader_thread_handle); DeleteCriticalSection (&filter->lock); } #else /* Unix API. */ static int filter_init (struct pipe_filter_gi *filter) { #if !(defined _WIN32 && ! defined __CYGWIN__) /* When we write to the child process and it has just terminated, we don't want to die from a SIGPIPE signal. So set the SIGPIPE handler to SIG_IGN, and handle EPIPE error codes in write(). */ { struct sigaction sigpipe_action; sigpipe_action.sa_handler = SIG_IGN; sigpipe_action.sa_flags = 0; sigemptyset (&sigpipe_action.sa_mask); if (sigaction (SIGPIPE, &sigpipe_action, &filter->orig_sigpipe_action) < 0) abort (); } #endif /* Enable non-blocking I/O. This permits the read() and write() calls to return -1/EAGAIN without blocking; this is important for polling if HAVE_SELECT is not defined. It also permits the read() and write() calls to return after partial reads/writes; this is important if HAVE_SELECT is defined, because select() only says that some data can be read or written, not how many. Without non-blocking I/O, Linux 2.2.17 and BSD systems prefer to block instead of returning with partial results. */ { int fcntl_flags; if ((fcntl_flags = fcntl (filter->fd[1], F_GETFL, 0)) < 0 || fcntl (filter->fd[1], F_SETFL, fcntl_flags | O_NONBLOCK) == -1 || (fcntl_flags = fcntl (filter->fd[0], F_GETFL, 0)) < 0 || fcntl (filter->fd[0], F_SETFL, fcntl_flags | O_NONBLOCK) == -1) { if (filter->exit_on_error) error (EXIT_FAILURE, errno, _("cannot set up nonblocking I/O to %s subprocess"), filter->progname); return -1; } } FD_ZERO (&filter->readfds); FD_ZERO (&filter->writefds); return 0; } static void filter_loop (struct pipe_filter_gi *filter, const char *wbuf, size_t count) { /* This function is used in two situations: - in order to write some data to the subprocess [done_writing = false], - in order to read the remaining data after everything was written [done_writing = true]. In this case buf is NULL and count is ignored. */ bool done_writing = (wbuf == NULL); if (!done_writing) { if (filter->writer_terminated || filter->reader_terminated) /* pipe_filter_gi_write was called when it should not be. */ abort (); } else { if (filter->reader_terminated) return; } /* Loop, trying to write the given buffer or reading, whichever is possible. */ for (;;) { /* Here filter->writer_terminated is false. When it becomes true, this loop is terminated. */ /* Whereas filter->reader_terminated is initially false but may become true during this loop. */ /* Here, if !done_writing, count > 0. When count becomes 0, this loop is terminated. */ /* Here, if done_writing, filter->reader_terminated is false. When filter->reader_terminated becomes true, this loop is terminated. */ # if HAVE_SELECT int n, retval; /* See whether reading or writing is possible. */ n = 1; if (!filter->reader_terminated) { FD_SET (filter->fd[0], &filter->readfds); n = filter->fd[0] + 1; } if (!done_writing) { FD_SET (filter->fd[1], &filter->writefds); if (n <= filter->fd[1]) n = filter->fd[1] + 1; } /* Do EINTR handling here instead of in pipe-filter-aux.h, because select() cannot be referred to from an inline function on AIX 7.1. */ do retval = select (n, (!filter->reader_terminated ? &filter->readfds : NULL), (!done_writing ? &filter->writefds : NULL), NULL, NULL); while (retval < 0 && errno == EINTR); n = retval; if (n < 0) { if (filter->exit_on_error) error (EXIT_FAILURE, errno, _("communication with %s subprocess failed"), filter->progname); filter->writer_errno = errno; filter->writer_terminated = true; break; } if (!done_writing && FD_ISSET (filter->fd[1], &filter->writefds)) goto try_write; if (!filter->reader_terminated && FD_ISSET (filter->fd[0], &filter->readfds)) goto try_read; /* How could select() return if none of the two descriptors is ready? */ abort (); # endif /* Attempt to write. */ # if HAVE_SELECT try_write: # endif if (!done_writing) { ssize_t nwritten = write (filter->fd[1], wbuf, count > SSIZE_MAX ? SSIZE_MAX : count); if (nwritten < 0) { if (!IS_EAGAIN (errno)) { if (filter->exit_on_error) error (EXIT_FAILURE, errno, _("write to %s subprocess failed"), filter->progname); filter->writer_errno = errno; filter->writer_terminated = true; break; } } else if (nwritten > 0) { count -= nwritten; if (count == 0) break; wbuf += nwritten; } } # if HAVE_SELECT continue; # endif /* Attempt to read. */ # if HAVE_SELECT try_read: # endif if (!filter->reader_terminated) { size_t bufsize; void *buf = filter->prepare_read (&bufsize, filter->private_data); if (!(buf != NULL && bufsize > 0)) /* prepare_read returned wrong values. */ abort (); { ssize_t nread = read (filter->fd[0], buf, bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); if (nread < 0) { if (!IS_EAGAIN (errno)) { if (filter->exit_on_error) error (EXIT_FAILURE, errno, _("read from %s subprocess failed"), filter->progname); filter->reader_errno = errno; filter->reader_terminated = true; break; } } else if (nread > 0) filter->done_read (buf, nread, filter->private_data); else /* nread == 0 */ { filter->reader_terminated = true; if (done_writing) break; } } } # if HAVE_SELECT continue; # endif } } static void filter_cleanup (struct pipe_filter_gi *filter, bool finish_reading) { if (finish_reading) /* A select loop, with done_writing = true. */ filter_loop (filter, NULL, 0); if (sigaction (SIGPIPE, &filter->orig_sigpipe_action, NULL) < 0) abort (); } #endif /* Terminate the child process. Do nothing if it already exited. */ static void filter_terminate (struct pipe_filter_gi *filter) { if (!filter->exited) { /* Tell the child there is nothing more the parent will send. */ close (filter->fd[1]); filter_cleanup (filter, !filter->reader_terminated); close (filter->fd[0]); filter->exitstatus = wait_subprocess (filter->child, filter->progname, true, filter->null_stderr, true, filter->exit_on_error, NULL); if (filter->exitstatus != 0 && filter->exit_on_error) error (EXIT_FAILURE, 0, _("subprocess %s terminated with exit code %d"), filter->progname, filter->exitstatus); filter->exited = true; } } /* After filter_terminate: Return 0 upon success, or (only if exit_on_error is false): - -1 with errno set upon failure, - the positive exit code of the subprocess if that failed. */ static int filter_retcode (struct pipe_filter_gi *filter) { if (filter->writer_errno != 0) { errno = filter->writer_errno; return -1; } else if (filter->reader_errno != 0) { errno = filter->reader_errno; return -1; } else return filter->exitstatus; } struct pipe_filter_gi * pipe_filter_gi_create (const char *progname, const char *prog_path, const char * const *prog_argv, bool null_stderr, bool exit_on_error, prepare_read_fn prepare_read, done_read_fn done_read, void *private_data) { struct pipe_filter_gi *filter; filter = (struct pipe_filter_gi *) xmalloc (sizeof (struct pipe_filter_gi)); /* Open a bidirectional pipe to a subprocess. */ filter->child = create_pipe_bidi (progname, prog_path, prog_argv, NULL, null_stderr, true, exit_on_error, filter->fd); filter->progname = progname; filter->null_stderr = null_stderr; filter->exit_on_error = exit_on_error; filter->prepare_read = prepare_read; filter->done_read = done_read; filter->private_data = private_data; filter->exited = false; filter->exitstatus = 0; filter->writer_terminated = false; filter->writer_errno = 0; filter->reader_terminated = false; filter->reader_errno = 0; if (filter->child == -1) { /* Child process could not be created. Arrange for filter_retcode (filter) to be the current errno. */ filter->writer_errno = errno; filter->writer_terminated = true; filter->exited = true; } else if (filter_init (filter) < 0) filter_terminate (filter); return filter; } int pipe_filter_gi_write (struct pipe_filter_gi *filter, const void *buf, size_t size) { if (buf == NULL) /* Invalid argument. */ abort (); if (filter->exited) return filter_retcode (filter); if (size > 0) { filter_loop (filter, buf, size); if (filter->writer_terminated || filter->reader_terminated) { filter_terminate (filter); return filter_retcode (filter); } } return 0; } int pipe_filter_gi_close (struct pipe_filter_gi *filter) { int ret; filter_terminate (filter); ret = filter_retcode (filter); free (filter); return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-filter-ii.c��������������������������������������������������������0000664�0000000�0000000�00000041654�14110572173�0020042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 "pipe-filter.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <windows.h> # include <process.h> /* _beginthreadex, _endthreadex */ #elif defined __KLIBC__ # define INCL_DOS # include <os2.h> /* Simple implementation of Win32 APIs */ # define WINAPI typedef struct _HANDLE { TID tid; HEV hevDone; unsigned int WINAPI (*start) (void *); void *arg; } *HANDLE; typedef ULONG DWORD; static void start_wrapper (void *arg) { HANDLE h = (HANDLE) arg; h->start (h->arg); DosPostEventSem (h->hevDone); _endthread (); } static HANDLE _beginthreadex (void *s, unsigned n, unsigned int WINAPI (*start) (void *), void *arg, unsigned fl, unsigned *th) { HANDLE h; h = malloc (sizeof (*h)); if (!h) return NULL; if (DosCreateEventSem (NULL, &h->hevDone, 0, FALSE)) goto exit_free; h->start = start; h->arg = arg; h->tid = _beginthread (start_wrapper, NULL, n, (void *) h); if (h->tid == -1) goto exit_close_event_sem; return h; exit_close_event_sem: DosCloseEventSem (h->hevDone); exit_free: free (h); return NULL; } static BOOL CloseHandle (HANDLE h) { DosCloseEventSem (h->hevDone); free (h); } # define _endthreadex(x) return (x) # define TerminateThread(h, e) DosKillThread (h->tid) # define GetLastError() -1 # ifndef ERROR_NO_DATA # define ERROR_NO_DATA 232 # endif # define INFINITE SEM_INDEFINITE_WAIT # define WAIT_OBJECT_0 0 static DWORD WaitForSingleObject (HANDLE h, DWORD ms) { return DosWaitEventSem (h->hevDone, ms) == 0 ? WAIT_OBJECT_0 : (DWORD) -1; } static DWORD WaitForMultipleObjects (DWORD nCount, const HANDLE *pHandles, BOOL bWaitAll, DWORD ms) { HMUX hmux; PSEMRECORD psr; ULONG ulUser; ULONG rc = (ULONG) -1; DWORD i; psr = malloc (sizeof (*psr) * nCount); if (!psr) goto exit_return; for (i = 0; i < nCount; ++i) { psr[i].hsemCur = (HSEM) pHandles[i]->hevDone; psr[i].ulUser = WAIT_OBJECT_0 + i; } if (DosCreateMuxWaitSem (NULL, &hmux, nCount, psr, bWaitAll ? DCMW_WAIT_ALL : DCMW_WAIT_ANY)) goto exit_free; rc = DosWaitMuxWaitSem (hmux, ms, &ulUser); DosCloseMuxWaitSem (hmux); exit_free: free (psr); exit_return: if (rc) return (DWORD) -1; return ulUser; } #else # include <signal.h> # include <sys/select.h> #endif #include "error.h" #include "spawn-pipe.h" #include "wait-process.h" #include "gettext.h" #define _(str) gettext (str) #include "pipe-filter-aux.h" #if (defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__ struct locals { /* Arguments passed to pipe_filter_ii_execute. */ prepare_write_fn prepare_write; done_write_fn done_write; prepare_read_fn prepare_read; done_read_fn done_read; /* Management of the subprocess. */ void *private_data; int fd[2]; /* Status of the writer part. */ volatile bool writer_terminated; volatile int writer_errno; /* Status of the reader part. */ volatile bool reader_terminated; volatile int reader_errno; }; static unsigned int WINAPI writer_thread_func (void *thread_arg) { struct locals *l = (struct locals *) thread_arg; for (;;) { size_t bufsize; const void *buf = l->prepare_write (&bufsize, l->private_data); if (buf != NULL) { ssize_t nwritten = write (l->fd[1], buf, bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); if (nwritten < 0) { /* Don't assume that the gnulib modules 'write' and 'sigpipe' are used. */ if (GetLastError () == ERROR_NO_DATA) errno = EPIPE; l->writer_errno = errno; break; } else if (nwritten > 0) l->done_write ((void *) buf, nwritten, l->private_data); } else break; } l->writer_terminated = true; _endthreadex (0); /* calls ExitThread (0) */ abort (); } static unsigned int WINAPI reader_thread_func (void *thread_arg) { struct locals *l = (struct locals *) thread_arg; for (;;) { size_t bufsize; void *buf = l->prepare_read (&bufsize, l->private_data); if (!(buf != NULL && bufsize > 0)) /* prepare_read returned wrong values. */ abort (); { ssize_t nread = read (l->fd[0], buf, bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); if (nread < 0) { l->reader_errno = errno; break; } else if (nread > 0) l->done_read (buf, nread, l->private_data); else /* nread == 0 */ break; } } l->reader_terminated = true; _endthreadex (0); /* calls ExitThread (0) */ abort (); } #endif int pipe_filter_ii_execute (const char *progname, const char *prog_path, const char * const *prog_argv, bool null_stderr, bool exit_on_error, prepare_write_fn prepare_write, done_write_fn done_write, prepare_read_fn prepare_read, done_read_fn done_read, void *private_data) { pid_t child; int fd[2]; #if !((defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__) struct sigaction orig_sigpipe_action; #endif /* Open a bidirectional pipe to a subprocess. */ child = create_pipe_bidi (progname, prog_path, prog_argv, NULL, null_stderr, true, exit_on_error, fd); if (child == -1) return -1; #if (defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__ /* Native Windows API. */ /* Pipes have a non-blocking mode, see function SetNamedPipeHandleState and the article "Named Pipe Type, Read, and Wait Modes", but Microsoft's documentation discourages its use. So don't use it. Asynchronous I/O is also not suitable because it notifies the caller only about completion of the I/O request, not about intermediate progress. So do the writing and the reading in separate threads. */ { struct locals l; HANDLE handles[2]; #define writer_thread_handle handles[0] #define reader_thread_handle handles[1] bool writer_cleaned_up; bool reader_cleaned_up; l.prepare_write = prepare_write; l.done_write = done_write; l.prepare_read = prepare_read; l.done_read = done_read; l.private_data = private_data; l.fd[0] = fd[0]; l.fd[1] = fd[1]; l.writer_terminated = false; l.writer_errno = 0; l.reader_terminated = false; l.reader_errno = 0; writer_thread_handle = (HANDLE) _beginthreadex (NULL, 100000, writer_thread_func, &l, 0, NULL); reader_thread_handle = (HANDLE) _beginthreadex (NULL, 100000, reader_thread_func, &l, 0, NULL); if (writer_thread_handle == NULL || reader_thread_handle == NULL) { if (exit_on_error) error (EXIT_FAILURE, 0, _("creation of threads failed")); if (reader_thread_handle != NULL) CloseHandle (reader_thread_handle); if (writer_thread_handle != NULL) CloseHandle (writer_thread_handle); goto fail; } writer_cleaned_up = false; reader_cleaned_up = false; for (;;) { DWORD ret; /* Here !(writer_cleaned_up && reader_cleaned_up). */ if (writer_cleaned_up) ret = WaitForSingleObject (reader_thread_handle, INFINITE); else if (reader_cleaned_up) ret = WaitForSingleObject (writer_thread_handle, INFINITE); else ret = WaitForMultipleObjects (2, handles, FALSE, INFINITE); if (!(ret == WAIT_OBJECT_0 + 0 || ret == WAIT_OBJECT_0 + 1)) abort (); if (l.writer_terminated) { /* The writer thread has just terminated. */ l.writer_terminated = false; CloseHandle (writer_thread_handle); if (l.writer_errno) { if (exit_on_error) error (EXIT_FAILURE, l.writer_errno, _("write to %s subprocess failed"), progname); if (!reader_cleaned_up) { TerminateThread (reader_thread_handle, 1); CloseHandle (reader_thread_handle); } goto fail; } /* Tell the child there is nothing more the parent will send. */ close (fd[1]); writer_cleaned_up = true; } if (l.reader_terminated) { /* The reader thread has just terminated. */ l.reader_terminated = false; CloseHandle (reader_thread_handle); if (l.reader_errno) { if (exit_on_error) error (EXIT_FAILURE, l.reader_errno, _("read from %s subprocess failed"), progname); if (!writer_cleaned_up) { TerminateThread (writer_thread_handle, 1); CloseHandle (writer_thread_handle); } goto fail; } reader_cleaned_up = true; } if (writer_cleaned_up && reader_cleaned_up) break; } } #else /* When we write to the child process and it has just terminated, we don't want to die from a SIGPIPE signal. So set the SIGPIPE handler to SIG_IGN, and handle EPIPE error codes in write(). */ { struct sigaction sigpipe_action; sigpipe_action.sa_handler = SIG_IGN; sigpipe_action.sa_flags = 0; sigemptyset (&sigpipe_action.sa_mask); if (sigaction (SIGPIPE, &sigpipe_action, &orig_sigpipe_action) < 0) abort (); } { # if HAVE_SELECT fd_set readfds; /* All bits except fd[0] are always cleared. */ fd_set writefds; /* All bits except fd[1] are always cleared. */ # endif bool done_writing; /* Enable non-blocking I/O. This permits the read() and write() calls to return -1/EAGAIN without blocking; this is important for polling if HAVE_SELECT is not defined. It also permits the read() and write() calls to return after partial reads/writes; this is important if HAVE_SELECT is defined, because select() only says that some data can be read or written, not how many. Without non-blocking I/O, Linux 2.2.17 and BSD systems prefer to block instead of returning with partial results. */ { int fcntl_flags; if ((fcntl_flags = fcntl (fd[1], F_GETFL, 0)) < 0 || fcntl (fd[1], F_SETFL, fcntl_flags | O_NONBLOCK) == -1 || (fcntl_flags = fcntl (fd[0], F_GETFL, 0)) < 0 || fcntl (fd[0], F_SETFL, fcntl_flags | O_NONBLOCK) == -1) { if (exit_on_error) error (EXIT_FAILURE, errno, _("cannot set up nonblocking I/O to %s subprocess"), progname); goto fail; } } # if HAVE_SELECT FD_ZERO (&readfds); FD_ZERO (&writefds); # endif done_writing = false; for (;;) { # if HAVE_SELECT int n, retval; FD_SET (fd[0], &readfds); n = fd[0] + 1; if (!done_writing) { FD_SET (fd[1], &writefds); if (n <= fd[1]) n = fd[1] + 1; } /* Do EINTR handling here instead of in pipe-filter-aux.h, because select() cannot be referred to from an inline function on AIX 7.1. */ do retval = select (n, &readfds, (!done_writing ? &writefds : NULL), NULL, NULL); while (retval < 0 && errno == EINTR); n = retval; if (n < 0) { if (exit_on_error) error (EXIT_FAILURE, errno, _("communication with %s subprocess failed"), progname); goto fail; } if (!done_writing && FD_ISSET (fd[1], &writefds)) goto try_write; if (FD_ISSET (fd[0], &readfds)) goto try_read; /* How could select() return if none of the two descriptors is ready? */ abort (); # endif /* Attempt to write. */ # if HAVE_SELECT try_write: # endif if (!done_writing) { size_t bufsize; const void *buf = prepare_write (&bufsize, private_data); if (buf != NULL) { /* Writing to a pipe in non-blocking mode is tricky: The write() call may fail with EAGAIN, simply because sufficient space is not available in the pipe. See POSIX:2008 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. This happens actually on AIX and IRIX, when bufsize >= 8192 (even though PIPE_BUF and pathconf ("/", _PC_PIPE_BUF) are both 32768). */ size_t attempt_to_write = (bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); for (;;) { ssize_t nwritten = write (fd[1], buf, attempt_to_write); if (nwritten < 0) { if (errno == EAGAIN) { attempt_to_write = attempt_to_write / 2; if (attempt_to_write == 0) break; } else if (!IS_EAGAIN (errno)) { if (exit_on_error) error (EXIT_FAILURE, errno, _("write to %s subprocess failed"), progname); goto fail; } } else { if (nwritten > 0) done_write ((void *) buf, nwritten, private_data); break; } } } else { /* Tell the child there is nothing more the parent will send. */ close (fd[1]); done_writing = true; } } # if HAVE_SELECT continue; # endif /* Attempt to read. */ # if HAVE_SELECT try_read: # endif { size_t bufsize; void *buf = prepare_read (&bufsize, private_data); if (!(buf != NULL && bufsize > 0)) /* prepare_read returned wrong values. */ abort (); { ssize_t nread = read (fd[0], buf, bufsize > SSIZE_MAX ? SSIZE_MAX : bufsize); if (nread < 0) { if (!IS_EAGAIN (errno)) { if (exit_on_error) error (EXIT_FAILURE, errno, _("read from %s subprocess failed"), progname); goto fail; } } else if (nread > 0) done_read (buf, nread, private_data); else /* nread == 0 */ { if (done_writing) break; } } } # if HAVE_SELECT continue; # endif } } /* Restore SIGPIPE signal handler. */ if (sigaction (SIGPIPE, &orig_sigpipe_action, NULL) < 0) abort (); #endif close (fd[0]); /* Remove zombie process from process list. */ { int exitstatus = wait_subprocess (child, progname, false, null_stderr, true, exit_on_error, NULL); if (exitstatus != 0 && exit_on_error) error (EXIT_FAILURE, 0, _("%s subprocess terminated with exit code %d"), progname, exitstatus); return exitstatus; } fail: { int saved_errno = errno; close (fd[1]); #if !((defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__) if (sigaction (SIGPIPE, &orig_sigpipe_action, NULL) < 0) abort (); #endif close (fd[0]); wait_subprocess (child, progname, true, true, true, false, NULL); errno = saved_errno; return -1; } } ������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-filter.h�����������������������������������������������������������0000664�0000000�0000000�00000025167�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. -*- coding: utf-8 -*- Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2009, and Paolo Bonzini <bonzini@gnu.org>, 2009. This 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 _PIPE_FILTER_H #define _PIPE_FILTER_H #include <stdbool.h> #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Piping data through a subprocess in the naïve way - write data to the subprocess and read from the subprocess when you expect it to have produced results - is subject to two kinds of deadlocks: 1) If you write more than PIPE_MAX bytes or, more generally, if you write more bytes than the subprocess can handle at once, the subprocess may write its data and wait on you to read it, but you are currently busy writing. 2) When you don't know ahead of time how many bytes the subprocess will produce, the usual technique of calling read (fd, buf, BUFSIZ) with a fixed BUFSIZ will, on Linux 2.2.17 and on BSD systems, cause the read() call to block until *all* of the buffer has been filled. But the subprocess cannot produce more data until you gave it more input. But you are currently busy reading from it. This header file declares four set of functions that pipes data through the subprocess, without risking these deadlocks. The side that writes data to the subprocess can be seen as a "generator", that is, as a subroutine that produces and writes a piece of data here and there, see <https://en.wikipedia.org/wiki/Generator_(computer_science)>. But often, it can be written in the form of an "iterator", that is, as a function that, each time it is invoked, produces and writes one more piece of data. Similarly, the side that reads data from the subprocess can be seen as a "generator", that is, as a subroutine that consumes a piece of data here and there. Often, it can be written in the form of an "iterator", that is, as a function that, each time it is invoked, consumes one more piece of data. This header file declares four set of functions: | writer | reader | ----------------+------------+------------+ pipe_filter_ii | iterator | iterator | pipe_filter_ig | iterator | generator | pipe_filter_gi | generator | iterator | pipe_filter_gg | generator | generator | ----------------+------------+------------+ The last one uses threads in order to implement two generators running at the same time. (For the relation between generators, coroutines, and threads, see <https://en.wikipedia.org/wiki/Generator_(computer_science)> and <https://en.wikipedia.org/wiki/Coroutine>.) It is therefore only portable to platforms with kernel-based POSIX threads. */ /* These two functions together describe the side that writes data to the subprocess when it has the form of an iterator. - prepare_write (&num_bytes, p) must either return a pointer to data that is ready to be written and set num_bytes to the number of bytes ready to be written, or return NULL when no more bytes are to be written. - done_write (data_written, num_bytes_written) is called after num_bytes_written bytes were written. It is guaranteed that num_bytes_written > 0. Here p is always the private_data argument passed to the main function. */ typedef const void * (*prepare_write_fn) (size_t *num_bytes_p, void *private_data); typedef void (*done_write_fn) (void *data_written, size_t num_bytes_written, void *private_data); /* These two functions together describe the side that reads data from the subprocess when it has the form of an iterator. - prepare_read (&num_bytes, p) must return a pointer to a buffer for data that can be read and set num_bytes to the size of that buffer (must be > 0). - done_read (data_read, num_bytes_read, p) is called after num_bytes_read bytes were read into the buffer. Here p is always the private_data argument passed to the main function. */ typedef void * (*prepare_read_fn) (size_t *num_bytes_p, void *private_data); typedef void (*done_read_fn) (void *data_read, size_t num_bytes_read, void *private_data); /* ============================ pipe_filter_ii ============================ */ /* Create a subprocess and pipe some data through it. Arguments: - progname is the program name used in error messages. - prog_path is the file name of the program to invoke. - prog_argv is a NULL terminated argument list, starting with prog_path as first element. - If null_stderr is true, the subprocess' stderr will be redirected to /dev/null, and the usual error message to stderr will be omitted. This is suitable when the subprocess does not fulfill an important task. - If exit_on_error is true, any error will cause the main process to exit with an error status. If the subprocess does not terminate correctly, exit if exit_on_error is true, otherwise return 127. Callback arguments are as described above. Data is alternately written to the subprocess, through the functions prepare_write and done_write, and read from the subprocess, through the functions prepare_read and done_read. Note that the prepare_write/done_write functions and the prepare_read/done_read functions may be called in different threads than the current thread (depending on the platform). But they will not be called after the pipe_filter_ii_execute function has returned. Return 0 upon success, or (only if exit_on_error is false): - -1 with errno set upon failure, - the positive exit code of the subprocess if that failed. */ extern int pipe_filter_ii_execute (const char *progname, const char *prog_path, const char * const *prog_argv, bool null_stderr, bool exit_on_error, prepare_write_fn prepare_write, done_write_fn done_write, prepare_read_fn prepare_read, done_read_fn done_read, void *private_data); /* ============================ pipe_filter_ig ============================ */ struct pipe_filter_ig; /* ============================ pipe_filter_gi ============================ */ struct pipe_filter_gi; /* Finish reading the output via the prepare_read/done_read functions specified to pipe_filter_gi_create. Note that the prepare_read/done_read functions may be called in a different thread than the current thread (depending on the platform). However, they will always be called before pipe_filter_gi_close has returned. The write side of the pipe is closed as soon as pipe_filter_gi_close starts, while the read side will be closed just before it finishes. Return 0 upon success, or (only if exit_on_error is false): - -1 with errno set upon failure, - the positive exit code of the subprocess if that failed. */ extern int pipe_filter_gi_close (struct pipe_filter_gi *filter); /* Create a subprocess and pipe some data through it. Arguments: - progname is the program name used in error messages. - prog_path is the file name of the program to invoke. - prog_argv is a NULL terminated argument list, starting with prog_path as first element. - If null_stderr is true, the subprocess' stderr will be redirected to /dev/null, and the usual error message to stderr will be omitted. This is suitable when the subprocess does not fulfill an important task. - If exit_on_error is true, any error will cause the main process to exit with an error status. If the subprocess does not start correctly, exit if exit_on_error is true, otherwise return NULL and set errno. The caller will write to the subprocess through pipe_filter_gi_write and finally call pipe_filter_gi_close. During such calls, the prepare_read and done_read function may be called to process any data that the subprocess has written. Note that the prepare_read/done_read functions may be called in a different thread than the current thread (depending on the platform). But they will not be called after the pipe_filter_gi_close function has returned. Return the freshly created 'struct pipe_filter_gi'. */ extern struct pipe_filter_gi * pipe_filter_gi_create (const char *progname, const char *prog_path, const char * const *prog_argv, bool null_stderr, bool exit_on_error, prepare_read_fn prepare_read, done_read_fn done_read, void *private_data) _GL_ATTRIBUTE_DEALLOC (pipe_filter_gi_close, 1); /* Write size bytes starting at buf into the pipe and in the meanwhile possibly call the prepare_read and done_read functions specified to pipe_filter_gi_create. Note that the prepare_read/done_read functions may be called in a different thread than the current thread (depending on the platform). However, they will always be called before pipe_filter_gi_write has returned, or otherwise not sooner than the next call to pipe_filter_gi_write or pipe_filter_gi_close. Return only after all the entire buffer has been written to the pipe or the subprocess has exited. Return 0 upon success, or (only if exit_on_error is false): - -1 with errno set upon failure, - the positive exit code of the subprocess if that failed. */ extern int pipe_filter_gi_write (struct pipe_filter_gi *filter, const void *buf, size_t size); /* ============================ pipe_filter_gg ============================ */ /* ======================================================================== */ #ifdef __cplusplus } #endif #endif /* _PIPE_FILTER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe-safer.c������������������������������������������������������������0000664�0000000�0000000�00000002626�14110572173�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe, but avoid some glitches. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "unistd-safer.h" #include <unistd.h> #include <errno.h> /* Like pipe, but ensure that neither of the file descriptors is STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. Fail with ENOSYS on platforms that lack pipe. */ int pipe_safer (int fd[2]) { if (pipe (fd) == 0) { int i; for (i = 0; i < 2; i++) { fd[i] = fd_safer (fd[i]); if (fd[i] < 0) { int saved_errno = errno; close (fd[1 - i]); errno = saved_errno; return -1; } } return 0; } return -1; } ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe.c������������������������������������������������������������������0000664�0000000�0000000�00000002536�14110572173�0016154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ /* Get _pipe(). */ # include <io.h> /* Get _O_BINARY. */ # include <fcntl.h> int pipe (int fd[2]) { /* Mingw changes fd to {-1,-1} on failure, but this violates http://austingroupbugs.net/view.php?id=467 */ int tmp[2]; int result = _pipe (tmp, 4096, _O_BINARY); if (!result) { fd[0] = tmp[0]; fd[1] = tmp[1]; } return result; } #else # error "This platform lacks a pipe function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pipe2-safer.c�����������������������������������������������������������0000664�0000000�0000000�00000002711�14110572173�0017327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe2, but avoid some glitches. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <unistd.h> #include <errno.h> /* Like pipe2, but ensure that neither of the file descriptors is STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int pipe2_safer (int fd[2], int flags) { /* This is a generalization of the pipe_safer implementation. */ if (pipe2 (fd, flags) == 0) { int i; for (i = 0; i < 2; i++) { fd[i] = fd_safer_flag (fd[i], flags); if (fd[i] < 0) { int e = errno; close (fd[1 - i]); errno = e; return -1; } } return 0; } return -1; } �������������������������������������������������������gnulib-20210822~d383792/lib/pipe2.c�����������������������������������������������������������������0000664�0000000�0000000�00000010274�14110572173�0016234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe, with specific opening flags. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include "binary-io.h" #include "verify.h" #if GNULIB_defined_O_NONBLOCK # include "nonblocking.h" #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # include <io.h> #endif int pipe2 (int fd[2], int flags) { /* Mingw _pipe() corrupts fd on failure; also, if we succeed at creating the pipe but later fail at changing fcntl, we want to leave fd unchanged: http://austingroupbugs.net/view.php?id=467 */ int tmp[2]; tmp[0] = fd[0]; tmp[1] = fd[1]; #if HAVE_PIPE2 # undef pipe2 /* Try the system call first, if it exists. (We may be running with a glibc that has the function but with an older kernel that lacks it.) */ { /* Cache the information whether the system call really exists. */ static int have_pipe2_really; /* 0 = unknown, 1 = yes, -1 = no */ if (have_pipe2_really >= 0) { int result = pipe2 (fd, flags); if (!(result < 0 && errno == ENOSYS)) { have_pipe2_really = 1; return result; } have_pipe2_really = -1; } } #endif /* Check the supported flags. */ if ((flags & ~(O_CLOEXEC | O_NONBLOCK | O_BINARY | O_TEXT)) != 0) { errno = EINVAL; return -1; } #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0) { fd[0] = tmp[0]; fd[1] = tmp[1]; return -1; } /* O_NONBLOCK handling. On native Windows platforms, O_NONBLOCK is defined by gnulib. Use the functions defined by the gnulib module 'nonblocking'. */ # if GNULIB_defined_O_NONBLOCK if (flags & O_NONBLOCK) { if (set_nonblocking_flag (fd[0], true) != 0 || set_nonblocking_flag (fd[1], true) != 0) goto fail; } # else { verify (O_NONBLOCK == 0); } # endif return 0; #else /* Unix API. */ if (pipe (fd) < 0) return -1; /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pipe.html> says that initially, the O_NONBLOCK and FD_CLOEXEC flags are cleared on both fd[0] and fd[1]. */ /* O_NONBLOCK handling. On Unix platforms, O_NONBLOCK is defined by the system. Use fcntl(). */ if (flags & O_NONBLOCK) { int fcntl_flags; if ((fcntl_flags = fcntl (fd[1], F_GETFL, 0)) < 0 || fcntl (fd[1], F_SETFL, fcntl_flags | O_NONBLOCK) == -1 || (fcntl_flags = fcntl (fd[0], F_GETFL, 0)) < 0 || fcntl (fd[0], F_SETFL, fcntl_flags | O_NONBLOCK) == -1) goto fail; } if (flags & O_CLOEXEC) { int fcntl_flags; if ((fcntl_flags = fcntl (fd[1], F_GETFD, 0)) < 0 || fcntl (fd[1], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1 || (fcntl_flags = fcntl (fd[0], F_GETFD, 0)) < 0 || fcntl (fd[0], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1) goto fail; } # if O_BINARY if (flags & O_BINARY) { set_binary_mode (fd[1], O_BINARY); set_binary_mode (fd[0], O_BINARY); } else if (flags & O_TEXT) { set_binary_mode (fd[1], O_TEXT); set_binary_mode (fd[0], O_TEXT); } # endif return 0; #endif #if GNULIB_defined_O_NONBLOCK || !(defined _WIN32 && ! defined __CYGWIN__) fail: { int saved_errno = errno; close (fd[0]); close (fd[1]); fd[0] = tmp[0]; fd[1] = tmp[1]; errno = saved_errno; return -1; } #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/poll.c������������������������������������������������������������������0000664�0000000�0000000�00000042437�14110572173�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for poll(2) Contributed by Paolo Bonzini. Copyright 2001-2003, 2006-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ /* Tell gcc not to warn about the (nfd < 0) tests, below. */ #if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wtype-limits" #endif #include <config.h> #include <alloca.h> #include <sys/types.h> /* Specification. */ #include <poll.h> #include <errno.h> #include <limits.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE # include <winsock2.h> # include <windows.h> # include <io.h> # include <stdio.h> # include <conio.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #else # include <sys/time.h> # include <unistd.h> #endif #include <sys/select.h> #include <sys/socket.h> #ifdef HAVE_SYS_IOCTL_H # include <sys/ioctl.h> #endif #ifdef HAVE_SYS_FILIO_H # include <sys/filio.h> #endif #include <time.h> #include "assure.h" #ifndef INFTIM # define INFTIM (-1) #endif /* BeOS does not have MSG_PEEK. */ #ifndef MSG_PEEK # define MSG_PEEK 0 #endif #ifdef WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef GetModuleHandle # define GetModuleHandle GetModuleHandleA # undef PeekConsoleInput # define PeekConsoleInput PeekConsoleInputA # undef CreateEvent # define CreateEvent CreateEventA # undef PeekMessage # define PeekMessage PeekMessageA # undef DispatchMessage # define DispatchMessage DispatchMessageA /* Do *not* use the function WSAPoll <https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsapoll> because there is a bug named “Windows 8 Bugs 309411 - WSAPoll does not report failed connections” that Microsoft won't fix. See Daniel Stenberg: "WASPoll is broken" <https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/>. */ /* Here we need the recv() function from Windows, that takes a SOCKET as first argument, not any possible gnulib override. */ # undef recv /* Here we need the select() function from Windows, because we pass bit masks of SOCKETs, not bit masks of FDs. */ # undef select /* Here we need timeval from Windows since this is what the select() function from Windows requires. */ # undef timeval /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; return GetConsoleMode (h, &mode) != 0; } static BOOL IsSocketHandle (HANDLE h) { WSANETWORKEVENTS ev; if (IsConsoleHandle (h)) return FALSE; /* Under Wine, it seems that getsockopt returns 0 for pipes too. WSAEnumNetworkEvents instead distinguishes the two correctly. */ ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); return ev.lNetworkEvents != 0xDEADBEEF; } /* Declare data structures for ntdll functions. */ typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; ULONG MaximumInstances; ULONG CurrentInstances; ULONG InboundQuota; ULONG ReadDataAvailable; ULONG OutboundQuota; ULONG WriteQuotaAvailable; ULONG NamedPipeState; ULONG NamedPipeEnd; } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; typedef struct _IO_STATUS_BLOCK { union { DWORD Status; PVOID Pointer; } u; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef enum _FILE_INFORMATION_CLASS { FilePipeLocalInformation = 24 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef DWORD (WINAPI *PNtQueryInformationFile) (HANDLE, IO_STATUS_BLOCK *, VOID *, ULONG, FILE_INFORMATION_CLASS); # ifndef PIPE_BUF # define PIPE_BUF 512 # endif /* Compute revents values for file handle H. If some events cannot happen for the handle, eliminate them from *P_SOUGHT. */ static int windows_compute_revents (HANDLE h, int *p_sought) { int i, ret, happened; INPUT_RECORD *irbuffer; DWORD avail, nbuffer; BOOL bRet; IO_STATUS_BLOCK iosb; FILE_PIPE_LOCAL_INFORMATION fpli; static PNtQueryInformationFile NtQueryInformationFile; static BOOL once_only; switch (GetFileType (h)) { case FILE_TYPE_PIPE: if (!once_only) { NtQueryInformationFile = (PNtQueryInformationFile) GetProcAddress (GetModuleHandle ("ntdll.dll"), "NtQueryInformationFile"); once_only = TRUE; } happened = 0; if (PeekNamedPipe (h, NULL, 0, NULL, &avail, NULL) != 0) { if (avail) happened |= *p_sought & (POLLIN | POLLRDNORM); } else if (GetLastError () == ERROR_BROKEN_PIPE) happened |= POLLHUP; else { /* It was the write-end of the pipe. Check if it is writable. If NtQueryInformationFile fails, optimistically assume the pipe is writable. This could happen on Windows 9x, where NtQueryInformationFile is not available, or if we inherit a pipe that doesn't permit FILE_READ_ATTRIBUTES access on the write end (I think this should not happen since Windows XP SP2; WINE seems fine too). Otherwise, ensure that enough space is available for atomic writes. */ memset (&iosb, 0, sizeof (iosb)); memset (&fpli, 0, sizeof (fpli)); if (!NtQueryInformationFile || NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), FilePipeLocalInformation) || fpli.WriteQuotaAvailable >= PIPE_BUF || (fpli.OutboundQuota < PIPE_BUF && fpli.WriteQuotaAvailable == fpli.OutboundQuota)) happened |= *p_sought & (POLLOUT | POLLWRNORM | POLLWRBAND); } return happened; case FILE_TYPE_CHAR: ret = WaitForSingleObject (h, 0); if (!IsConsoleHandle (h)) return ret == WAIT_OBJECT_0 ? *p_sought & ~(POLLPRI | POLLRDBAND) : 0; nbuffer = avail = 0; bRet = GetNumberOfConsoleInputEvents (h, &nbuffer); if (bRet) { /* Input buffer. */ *p_sought &= POLLIN | POLLRDNORM; if (nbuffer == 0) return POLLHUP; if (!*p_sought) return 0; irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD)); bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail); if (!bRet || avail == 0) return POLLHUP; for (i = 0; i < avail; i++) if (irbuffer[i].EventType == KEY_EVENT) return *p_sought; return 0; } else { /* Screen buffer. */ *p_sought &= POLLOUT | POLLWRNORM | POLLWRBAND; return *p_sought; } default: ret = WaitForSingleObject (h, 0); if (ret == WAIT_OBJECT_0) return *p_sought & ~(POLLPRI | POLLRDBAND); return *p_sought & (POLLOUT | POLLWRNORM | POLLWRBAND); } } /* Convert fd_sets returned by select into revents values. */ static int windows_compute_revents_socket (SOCKET h, int sought, long lNetworkEvents) { int happened = 0; if ((lNetworkEvents & (FD_READ | FD_ACCEPT | FD_CLOSE)) == FD_ACCEPT) happened |= (POLLIN | POLLRDNORM) & sought; else if (lNetworkEvents & (FD_READ | FD_ACCEPT | FD_CLOSE)) { int r, error; char data[64]; WSASetLastError (0); r = recv (h, data, sizeof (data), MSG_PEEK); error = WSAGetLastError (); WSASetLastError (0); if (r > 0 || error == WSAENOTCONN) happened |= (POLLIN | POLLRDNORM) & sought; /* Distinguish hung-up sockets from other errors. */ else if (r == 0 || error == WSAESHUTDOWN || error == WSAECONNRESET || error == WSAECONNABORTED || error == WSAENETRESET) happened |= POLLHUP; else happened |= POLLERR; } if (lNetworkEvents & (FD_WRITE | FD_CONNECT)) happened |= (POLLOUT | POLLWRNORM | POLLWRBAND) & sought; if (lNetworkEvents & FD_OOB) happened |= (POLLPRI | POLLRDBAND) & sought; return happened; } #else /* !MinGW */ /* Convert select(2) returned fd_sets into poll(2) revents values. */ static int compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds) { int happened = 0; if (FD_ISSET (fd, rfds)) { int r; int socket_errno; # if defined __MACH__ && defined __APPLE__ /* There is a bug in Mac OS X that causes it to ignore MSG_PEEK for some kinds of descriptors. Detect if this descriptor is a connected socket, a server socket, or something else using a 0-byte recv, and use ioctl(2) to detect POLLHUP. */ r = recv (fd, NULL, 0, MSG_PEEK); socket_errno = (r < 0) ? errno : 0; if (r == 0 || socket_errno == ENOTSOCK) ioctl (fd, FIONREAD, &r); # else char data[64]; r = recv (fd, data, sizeof (data), MSG_PEEK); socket_errno = (r < 0) ? errno : 0; # endif if (r == 0) happened |= POLLHUP; /* If the event happened on an unconnected server socket, that's fine. */ else if (r > 0 || ( /* (r == -1) && */ socket_errno == ENOTCONN)) happened |= (POLLIN | POLLRDNORM) & sought; /* Distinguish hung-up sockets from other errors. */ else if (socket_errno == ESHUTDOWN || socket_errno == ECONNRESET || socket_errno == ECONNABORTED || socket_errno == ENETRESET) happened |= POLLHUP; /* some systems can't use recv() on non-socket, including HP NonStop */ else if (socket_errno == ENOTSOCK) happened |= (POLLIN | POLLRDNORM) & sought; else happened |= POLLERR; } if (FD_ISSET (fd, wfds)) happened |= (POLLOUT | POLLWRNORM | POLLWRBAND) & sought; if (FD_ISSET (fd, efds)) happened |= (POLLPRI | POLLRDBAND) & sought; return happened; } #endif /* !MinGW */ int poll (struct pollfd *pfd, nfds_t nfd, int timeout) { #ifndef WINDOWS_NATIVE fd_set rfds, wfds, efds; struct timeval tv; struct timeval *ptv; int maxfd, rc; nfds_t i; if (nfd > INT_MAX) { errno = EINVAL; return -1; } /* Don't check directly for NFD greater than OPEN_MAX. Any practical use of a too-large NFD is caught by one of the other checks below, and checking directly for getdtablesize is too much of a portability and/or performance and/or correctness hassle. */ /* EFAULT is not necessary to implement, but let's do it in the simplest case. */ if (!pfd && nfd) { errno = EFAULT; return -1; } /* convert timeout number into a timeval structure */ if (timeout == 0) { ptv = &tv; ptv->tv_sec = 0; ptv->tv_usec = 0; } else if (timeout > 0) { ptv = &tv; ptv->tv_sec = timeout / 1000; ptv->tv_usec = (timeout % 1000) * 1000; } else if (timeout == INFTIM) /* wait forever */ ptv = NULL; else { errno = EINVAL; return -1; } /* create fd sets and determine max fd */ maxfd = -1; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&efds); for (i = 0; i < nfd; i++) { if (pfd[i].fd < 0) continue; if (maxfd < pfd[i].fd) { maxfd = pfd[i].fd; if (FD_SETSIZE <= maxfd) { errno = EINVAL; return -1; } } if (pfd[i].events & (POLLIN | POLLRDNORM)) FD_SET (pfd[i].fd, &rfds); /* see select(2): "the only exceptional condition detectable is out-of-band data received on a socket", hence we push POLLWRBAND events onto wfds instead of efds. */ if (pfd[i].events & (POLLOUT | POLLWRNORM | POLLWRBAND)) FD_SET (pfd[i].fd, &wfds); if (pfd[i].events & (POLLPRI | POLLRDBAND)) FD_SET (pfd[i].fd, &efds); } /* examine fd sets */ rc = select (maxfd + 1, &rfds, &wfds, &efds, ptv); if (rc < 0) return rc; /* establish results */ rc = 0; for (i = 0; i < nfd; i++) { pfd[i].revents = (pfd[i].fd < 0 ? 0 : compute_revents (pfd[i].fd, pfd[i].events, &rfds, &wfds, &efds)); rc += pfd[i].revents != 0; } return rc; #else static struct timeval tv0; static HANDLE hEvent; WSANETWORKEVENTS ev; HANDLE h, handle_array[FD_SETSIZE + 2]; DWORD ret, wait_timeout, nhandles; fd_set rfds, wfds, xfds; BOOL poll_again; MSG msg; int rc = 0; nfds_t i; if (nfd > INT_MAX || timeout < -1) { errno = EINVAL; return -1; } if (!hEvent) hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); restart: handle_array[0] = hEvent; nhandles = 1; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); /* Classify socket handles and create fd sets. */ for (i = 0; i < nfd; i++) { int sought = pfd[i].events; pfd[i].revents = 0; if (pfd[i].fd < 0) continue; if (!(sought & (POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM | POLLWRBAND | POLLPRI | POLLRDBAND))) continue; h = (HANDLE) _get_osfhandle (pfd[i].fd); assure (h != NULL); if (IsSocketHandle (h)) { int requested = FD_CLOSE; /* see above; socket handles are mapped onto select. */ if (sought & (POLLIN | POLLRDNORM)) { requested |= FD_READ | FD_ACCEPT; FD_SET ((SOCKET) h, &rfds); } if (sought & (POLLOUT | POLLWRNORM | POLLWRBAND)) { requested |= FD_WRITE | FD_CONNECT; FD_SET ((SOCKET) h, &wfds); } if (sought & (POLLPRI | POLLRDBAND)) { requested |= FD_OOB; FD_SET ((SOCKET) h, &xfds); } if (requested) WSAEventSelect ((SOCKET) h, hEvent, requested); } else { /* Poll now. If we get an event, do not poll again. Also, screen buffer handles are waitable, and they'll block until a character is available. windows_compute_revents eliminates bits for the "wrong" direction. */ pfd[i].revents = windows_compute_revents (h, &sought); if (sought) handle_array[nhandles++] = h; if (pfd[i].revents) timeout = 0; } } if (select (0, &rfds, &wfds, &xfds, &tv0) > 0) { /* Do MsgWaitForMultipleObjects anyway to dispatch messages, but no need to call select again. */ poll_again = FALSE; wait_timeout = 0; } else { poll_again = TRUE; if (timeout == INFTIM) wait_timeout = INFINITE; else wait_timeout = timeout; } for (;;) { ret = MsgWaitForMultipleObjects (nhandles, handle_array, FALSE, wait_timeout, QS_ALLINPUT); if (ret == WAIT_OBJECT_0 + nhandles) { /* new input of some other kind */ BOOL bRet; while ((bRet = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) != 0) { TranslateMessage (&msg); DispatchMessage (&msg); } } else break; } if (poll_again) select (0, &rfds, &wfds, &xfds, &tv0); /* Place a sentinel at the end of the array. */ handle_array[nhandles] = NULL; nhandles = 1; for (i = 0; i < nfd; i++) { int happened; if (pfd[i].fd < 0) continue; if (!(pfd[i].events & (POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM | POLLWRBAND))) continue; h = (HANDLE) _get_osfhandle (pfd[i].fd); if (h != handle_array[nhandles]) { /* It's a socket. */ WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); WSAEventSelect ((SOCKET) h, 0, 0); /* If we're lucky, WSAEnumNetworkEvents already provided a way to distinguish FD_READ and FD_ACCEPT; this saves a recv later. */ if (FD_ISSET ((SOCKET) h, &rfds) && !(ev.lNetworkEvents & (FD_READ | FD_ACCEPT))) ev.lNetworkEvents |= FD_READ | FD_ACCEPT; if (FD_ISSET ((SOCKET) h, &wfds)) ev.lNetworkEvents |= FD_WRITE | FD_CONNECT; if (FD_ISSET ((SOCKET) h, &xfds)) ev.lNetworkEvents |= FD_OOB; happened = windows_compute_revents_socket ((SOCKET) h, pfd[i].events, ev.lNetworkEvents); } else { /* Not a socket. */ int sought = pfd[i].events; happened = windows_compute_revents (h, &sought); nhandles++; } if ((pfd[i].revents |= happened) != 0) rc++; } if (!rc && timeout == INFTIM) { SleepEx (1, TRUE); goto restart; } return rc; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/poll.in.h���������������������������������������������������������������0000664�0000000�0000000�00000007055�14110572173�0016600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Header for poll(2) emulation Contributed by Paolo Bonzini. Copyright 2001-2003, 2007, 2009-2021 Free Software Foundation, Inc. This file is part of gnulib. 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@_POLL_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_POLL_H@ # @INCLUDE_NEXT@ @NEXT_POLL_H@ #endif #ifndef _@GUARD_PREFIX@_POLL_H #define _@GUARD_PREFIX@_POLL_H /* On native Windows, get the 'struct pollfd' type and the POLL* macro definitions before we override them. mingw defines them in <winsock2.h> if _WIN32_WINNT >= 0x0600. */ #if @HAVE_WINSOCK2_H@ # include <winsock2.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_POLL_H@ # if @HAVE_WINSOCK2_H@ /* Override the definitions from <winsock2.h>. */ # undef POLLIN # undef POLLPRI # undef POLLOUT # undef POLLERR # undef POLLHUP # undef POLLNVAL # undef POLLRDNORM # undef POLLRDBAND # undef POLLWRNORM # undef POLLWRBAND # define pollfd rpl_pollfd # endif /* fake a poll(2) environment */ # define POLLIN 0x0001 /* any readable data available */ # define POLLPRI 0x0002 /* OOB/Urgent readable data */ # define POLLOUT 0x0004 /* file descriptor is writable */ # define POLLERR 0x0008 /* some poll error occurred */ # define POLLHUP 0x0010 /* file descriptor was "hung up" */ # define POLLNVAL 0x0020 /* requested events "invalid" */ # define POLLRDNORM 0x0040 # define POLLRDBAND 0x0080 # define POLLWRNORM 0x0100 # define POLLWRBAND 0x0200 # if !GNULIB_defined_poll_types struct pollfd { int fd; /* which file descriptor to poll */ short events; /* events we are interested in */ short revents; /* events found on return */ }; typedef unsigned long nfds_t; # define GNULIB_defined_poll_types 1 # endif /* Define INFTIM only if doing so conforms to POSIX. */ # if !defined (_POSIX_C_SOURCE) && !defined (_XOPEN_SOURCE) # define INFTIM (-1) # endif #endif #if @GNULIB_POLL@ # if @REPLACE_POLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef poll # define poll rpl_poll # endif _GL_FUNCDECL_RPL (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout)); _GL_CXXALIAS_RPL (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout)); # else # if !@HAVE_POLL@ _GL_FUNCDECL_SYS (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout)); # endif _GL_CXXALIAS_SYS (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout)); # endif _GL_CXXALIASWARN (poll); #elif defined GNULIB_POSIXCHECK # undef poll # if HAVE_RAW_DECL_POLL _GL_WARN_ON_USE (poll, "poll is unportable - " "use gnulib module poll for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_POLL_H */ #endif /* _@GUARD_PREFIX@_POLL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/popen-safer.c�����������������������������������������������������������0000664�0000000�0000000�00000003726�14110572173�0017440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke popen, but avoid some glitches. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> #include "stdio-safer.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Like popen, but do not return stdin, stdout, or stderr. */ FILE * popen_safer (char const *cmd, char const *mode) { /* Unfortunately, we cannot use the fopen_safer approach of using fdopen (dup_safer (fileno (popen (cmd, mode)))), because stdio libraries maintain hidden state tying the original fd to the pid to wait on when using pclose (this hidden state is also used to avoid fd leaks in subsequent popen calls). So, we instead guarantee that all standard streams are open prior to the popen call (even though this puts more pressure on open fds), so that the original fd created by popen is safe. */ FILE *fp; int fd = open ("/dev/null", O_RDONLY | O_CLOEXEC); if (0 <= fd && fd <= STDERR_FILENO) { /* Maximum recursion depth is 3. */ int saved_errno; fp = popen_safer (cmd, mode); saved_errno = errno; close (fd); errno = saved_errno; } else { /* Either all fd's are tied up, or fd is safe and the real popen will reuse it. */ close (fd); fp = popen (cmd, mode); } return fp; } ������������������������������������������gnulib-20210822~d383792/lib/popen.c�����������������������������������������������������������������0000664�0000000�0000000�00000006621�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a sub-process. Copyright (C) 2009-2021 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include <stdio.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # include <string.h> FILE * popen (const char *filename, const char *mode) { /* Use binary mode by default. */ if (strcmp (mode, "r") == 0) mode = "rb"; else if (strcmp (mode, "w") == 0) mode = "wb"; return _popen (filename, mode); } #else # include <errno.h> # include <fcntl.h> # include <stdlib.h> # include <unistd.h> # undef popen FILE * rpl_popen (const char *filename, const char *mode) { /* All other platforms have popen and fcntl. The bug of the child clobbering its own file descriptors if stdin or stdout was closed in the parent can be worked around by opening those two fds as close-on-exec to begin with. */ /* Cygwin 1.5.x also has a bug where the popen fd is improperly marked close-on-exec, and if the application undoes this, then the fd leaks into subsequent popen calls. We could work around this by maintaining a list of all fd's opened by popen, and temporarily marking them cloexec around the real popen call, but we would also have to override pclose, and the bookkeeping seems extreme given that cygwin 1.7 no longer has the bug. */ FILE *result; int cloexec0 = fcntl (STDIN_FILENO, F_GETFD); int cloexec1 = fcntl (STDOUT_FILENO, F_GETFD); int saved_errno; /* If either stdin or stdout was closed (that is, fcntl failed), then we open a dummy close-on-exec fd to occupy that slot. That way, popen's internal use of pipe() will not contain either fd 0 or 1, overcoming the fact that the child process blindly calls close() on the parent's end of the pipe without first checking whether it is clobbering the fd just placed there via dup2(); the exec will get rid of the dummy fd's in the child. Fortunately, closed stderr in the parent does not cause problems in the child. */ if (cloexec0 < 0) { if (open ("/dev/null", O_RDONLY) != STDIN_FILENO || fcntl (STDIN_FILENO, F_SETFD, fcntl (STDIN_FILENO, F_GETFD) | FD_CLOEXEC) == -1) abort (); } if (cloexec1 < 0) { if (open ("/dev/null", O_RDONLY) != STDOUT_FILENO || fcntl (STDOUT_FILENO, F_SETFD, fcntl (STDOUT_FILENO, F_GETFD) | FD_CLOEXEC) == -1) abort (); } result = popen (filename, mode); /* Now, close any dummy fd's created in the parent. */ saved_errno = errno; if (cloexec0 < 0) close (STDIN_FILENO); if (cloexec1 < 0) close (STDOUT_FILENO); errno = saved_errno; return result; } #endif ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/posix_memalign.c��������������������������������������������������������0000664�0000000�0000000�00000002350�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A posix_memalign() function that works around platform bugs. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> int posix_memalign (void **memptr, size_t alignment, size_t size) #undef posix_memalign { /* Round up SIZE to the next multiple of ALIGNMENT, namely (SIZE + ALIGNMENT - 1) & ~(ALIGNMENT - 1). */ size += alignment - 1; if (size >= alignment - 1) /* no overflow? */ return posix_memalign (memptr, alignment, size & ~(size_t)(alignment - 1)); else return ENOMEM; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/posix_openpt.c����������������������������������������������������������0000664�0000000�0000000�00000006205�14110572173�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open the master side of a pseudo-terminal. Copyright (C) 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <fcntl.h> #if defined __OpenBSD__ # include <sys/ioctl.h> # include <sys/tty.h> #endif /* posix_openpt() is already provided on glibc >= 2.2.1 (but is a stub on GNU/Hurd), Mac OS X >= 10.4, FreeBSD >= 5.1 (lived in src/lib/libc/stdlib/grantpt.c before 8.0), NetBSD >= 3.0, AIX >= 5.2, HP-UX >= 11.31, Solaris >= 10, Cygwin >= 1.7. Thus, this replacement function is compiled on Mac OS X 10.3, OpenBSD 4.9, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. Among these: - AIX has /dev/ptc. - HP-UX 10..11, IRIX 6.5, OSF/1 5.1, Solaris 2.6..9, Cygwin 1.5 have /dev/ptmx. - HP-UX 10..11 also has /dev/ptym/clone, but this should not be needed. - OpenBSD 4.9 has /dev/ptm and the PTMGET ioctl. - Minix 3.1.8 have a list of pseudo-terminal devices in /dev. - On native Windows, there are no ttys at all. */ int posix_openpt (int flags) { int master; #ifdef _AIX /* AIX */ master = open ("/dev/ptc", flags); #elif defined _WIN32 && !defined __CYGWIN__ /* mingw */ /* Mingw lacks pseudo-terminals altogether. */ master = -1; errno = ENOSYS; #elif defined __OpenBSD__ /* On OpenBSD, master and slave of a pseudo-terminal are allocated together, by opening /dev/ptm and applying the PTMGET ioctl to it. */ int fd; struct ptmget data; fd = open (PATH_PTMDEV, O_RDWR); if (fd >= 0) { if (ioctl (fd, PTMGET, &data) >= 0) { master = data.cfd; close (data.sfd); close (fd); } else { int saved_errno = errno; close (fd); errno = saved_errno; master = -1; } } else master = -1; #else /* Mac OS X, Minix, HP-UX, IRIX, OSF/1, Solaris 9, Cygwin 1.5 */ /* Most systems that lack posix_openpt() have /dev/ptmx. */ master = open ("/dev/ptmx", flags); /* If all this does not work, we could try to open, one by one: - On Mac OS X: /dev/pty[p-w][0-9a-f] - On *BSD: /dev/pty[p-sP-S][0-9a-v] - On Minix: /dev/pty[p-q][0-9a-f] - On AIX: /dev/ptyp[0-9a-f] - On HP-UX: /dev/pty[p-r][0-9a-f] - On OSF/1: /dev/pty[p-q][0-9a-f] - On Solaris: /dev/pty[p-r][0-9a-f] */ #endif return master; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/posixtm.c���������������������������������������������������������������0000664�0000000�0000000�00000011775�14110572173�0016727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse dates for touch and date. Copyright (C) 1989-1991, 1998, 2000-2021 Free Software Foundation, Inc. This 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/>. */ /* Yacc-based version written by Jim Kingdon and David MacKenzie. Rewritten by Jim Meyering. */ #include <config.h> #include "posixtm.h" #include "c-ctype.h" #include "idx.h" #include "intprops.h" #include "verify.h" #include <string.h> /* POSIX requires: touch -t [[CC]YY]mmddhhmm[.ss] FILE... 8, 10, or 12 digits, followed by optional .ss (PDS_CENTURY | PDS_SECONDS) touch mmddhhmm[YY] FILE... (obsoleted by POSIX 1003.1-2001) 8 or 10 digits, YY (if present) must be in the range 69-99 (PDS_TRAILING_YEAR | PDS_PRE_2000) date mmddhhmm[[CC]YY] 8, 10, or 12 digits (PDS_TRAILING_YEAR | PDS_CENTURY) */ static bool year (struct tm *tm, const int *digit_pair, idx_t n, unsigned int syntax_bits) { switch (n) { case 1: tm->tm_year = *digit_pair; /* Deduce the century based on the year. POSIX requires that 00-68 be interpreted as 2000-2068, and that 69-99 be interpreted as 1969-1999. */ if (digit_pair[0] <= 68) { if (syntax_bits & PDS_PRE_2000) return false; tm->tm_year += 100; } break; case 2: if (! (syntax_bits & PDS_CENTURY)) return false; tm->tm_year = digit_pair[0] * 100 + digit_pair[1] - 1900; break; case 0: { /* Use current year. */ time_t now = time (NULL); struct tm *tmp = localtime (&now); if (! tmp) return false; tm->tm_year = tmp->tm_year; } break; default: assume (false); } return true; } static bool posix_time_parse (struct tm *tm, const char *s, unsigned int syntax_bits) { const char *dot = NULL; int pair[6]; idx_t s_len = strlen (s); idx_t len = s_len; if (syntax_bits & PDS_SECONDS) { dot = strchr (s, '.'); if (dot) { len = dot - s; if (s_len - len != 3) return false; } } if (! (8 <= len && len <= 12 && len % 2 == 0)) return false; for (idx_t i = 0; i < len; i++) if (!c_isdigit (s[i])) return false; len /= 2; for (idx_t i = 0; i < len; i++) pair[i] = 10 * (s[2*i] - '0') + s[2*i + 1] - '0'; int *p = pair; if (! (syntax_bits & PDS_TRAILING_YEAR)) { if (! year (tm, p, len - 4, syntax_bits)) return false; p += len - 4; len = 4; } /* Handle 8 digits worth of 'MMDDhhmm'. */ tm->tm_mon = *p++ - 1; tm->tm_mday = *p++; tm->tm_hour = *p++; tm->tm_min = *p++; len -= 4; /* Handle any trailing year. */ if (syntax_bits & PDS_TRAILING_YEAR) { if (! year (tm, p, len, syntax_bits)) return false; } /* Handle seconds. */ if (!dot) tm->tm_sec = 0; else if (c_isdigit (dot[1]) && c_isdigit (dot[2])) tm->tm_sec = 10 * (dot[1] - '0') + dot[2] - '0'; else return false; return true; } /* Parse a POSIX-style date, returning true if successful. */ bool posixtime (time_t *p, const char *s, unsigned int syntax_bits) { struct tm tm0; bool leapsec = false; if (! posix_time_parse (&tm0, s, syntax_bits)) return false; while (true) { struct tm tm1; tm1.tm_sec = tm0.tm_sec; tm1.tm_min = tm0.tm_min; tm1.tm_hour = tm0.tm_hour; tm1.tm_mday = tm0.tm_mday; tm1.tm_mon = tm0.tm_mon; tm1.tm_year = tm0.tm_year; tm1.tm_wday = -1; tm1.tm_isdst = -1; time_t t = mktime (&tm1); if (tm1.tm_wday < 0) return false; /* Reject dates like "September 31" and times like "25:61". However, allow a seconds count of 60 even in time zones that do not support leap seconds, treating it as the following second; POSIX requires this. */ if (! ((tm0.tm_year ^ tm1.tm_year) | (tm0.tm_mon ^ tm1.tm_mon) | (tm0.tm_mday ^ tm1.tm_mday) | (tm0.tm_hour ^ tm1.tm_hour) | (tm0.tm_min ^ tm1.tm_min) | (tm0.tm_sec ^ tm1.tm_sec))) { if (INT_ADD_WRAPV (t, leapsec, &t)) return false; *p = t; return true; } /* Any mismatch without 60 in the tm_sec field is invalid. */ if (tm0.tm_sec != 60) return false; /* Allow times like 01:35:60 or 23:59:60. */ tm0.tm_sec = 59; leapsec = true; } } ���gnulib-20210822~d383792/lib/posixtm.h���������������������������������������������������������������0000664�0000000�0000000�00000002411�14110572173�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse dates for touch and date. Copyright (C) 1998, 2003, 2005, 2007-2021 Free Software Foundation, Inc. This 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/>. */ /* Yacc-based version written by Jim Kingdon and David MacKenzie. Rewritten by Jim Meyering. */ #ifndef POSIXTM_H_ # define POSIXTM_H_ # include <stdbool.h> # include <time.h> /* POSIX Date Syntax flags. */ # define PDS_TRAILING_YEAR 1 # define PDS_CENTURY 2 # define PDS_SECONDS 4 # define PDS_PRE_2000 8 /* For compatibility with older versions of this header, in which PDS_LEADING_YEAR had its own bit. */ # define PDS_LEADING_YEAR 0 bool posixtime (time_t *p, const char *s, unsigned int syntax_bits); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/posixver.c��������������������������������������������������������������0000664�0000000�0000000�00000002650�14110572173�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Which POSIX version to conform to, for utilities. Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "posixver.h" #include <limits.h> #include <stdlib.h> #include <unistd.h> #ifndef _POSIX2_VERSION # define _POSIX2_VERSION 0 #endif #ifndef DEFAULT_POSIX2_VERSION # define DEFAULT_POSIX2_VERSION _POSIX2_VERSION #endif /* The POSIX version that utilities should conform to. The default is specified by the system. */ int posix2_version (void) { long int v = DEFAULT_POSIX2_VERSION; char const *s = getenv ("_POSIX2_VERSION"); if (s && *s) { char *e; long int i = strtol (s, &e, 10); if (! *e) v = i; } return v < INT_MIN ? INT_MIN : v < INT_MAX ? v : INT_MAX; } ����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/posixver.h��������������������������������������������������������������0000664�0000000�0000000�00000001416�14110572173�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Which POSIX version to conform to, for utilities. Copyright (C) 2002-2021 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/>. */ int posix2_version (void); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/powf.c������������������������������������������������������������������0000664�0000000�0000000�00000001564�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Power function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float powf (float x, float y) { return (float) pow ((double) x, (double) y); } ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pread.c�����������������������������������������������������������������0000664�0000000�0000000�00000004022�14110572173�0016302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* replacement pread function Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #define __libc_lseek(f,o,w) lseek (f, o, w) #define __set_errno(Val) errno = (Val) #define __libc_read(f,b,n) read (f, b, n) /* pread substitute for systems that the function, such as mingw32 and BeOS. */ /* The following is identical to the function from glibc's sysdeps/posix/pread.c */ /* Note: This implementation of pread is not multithread-safe. */ ssize_t pread (int fd, void *buf, size_t nbyte, off_t offset) { /* Since we must not change the file pointer preserve the value so that we can restore it later. */ int save_errno; ssize_t result; off_t old_offset = __libc_lseek (fd, 0, SEEK_CUR); if (old_offset == (off_t) -1) return -1; /* Set to wanted position. */ if (__libc_lseek (fd, offset, SEEK_SET) == (off_t) -1) return -1; /* Write out the data. */ result = __libc_read (fd, buf, nbyte); /* Now we have to restore the position. If this fails we have to return this as an error. But if the writing also failed we return this error. */ save_errno = errno; if (__libc_lseek (fd, old_offset, SEEK_SET) == (off_t) -1) { if (result == -1) __set_errno (save_errno); return -1; } __set_errno (save_errno); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-args.c�����������������������������������������������������������0000664�0000000�0000000�00000014600�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2021 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/>. */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include <config.h> #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? (wint_t) va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-args.h�����������������������������������������������������������0000664�0000000�0000000�00000007406�14110572173�0017461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2021 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/>. */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include <stddef.h> /* Get wchar_t. */ #if HAVE_WCHAR_T # include <stddef.h> #endif /* Get wint_t. */ #if HAVE_WINT_T # include <wchar.h> #endif /* Get va_list. */ #include <stdarg.h> /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, TYPE_LONGLONGINT, TYPE_ULONGLONGINT, TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER, TYPE_COUNT_LONGLONGINT_POINTER #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; long long int a_longlongint; unsigned long long int a_ulonglongint; float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; long long int * a_count_longlongint_pointer; #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-frexp.c����������������������������������������������������������0000664�0000000�0000000�00000012340�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2021 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/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #ifdef USE_LONG_DOUBLE # include "printf-frexpl.h" #else # include "printf-frexp.h" #endif #include <float.h> #include <math.h> #ifdef USE_LONG_DOUBLE # include "fpucw.h" #endif /* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater than 2, or not even a power of 2, some rounding errors can occur, so that then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ #ifdef USE_LONG_DOUBLE # define FUNC printf_frexpl # define DOUBLE long double # define MIN_EXP LDBL_MIN_EXP # if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC # define USE_FREXP_LDEXP # define FREXP frexpl # define LDEXP ldexpl # endif # define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING # define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () # define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () # define L_(literal) literal##L #else # define FUNC printf_frexp # define DOUBLE double # define MIN_EXP DBL_MIN_EXP # if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC # define USE_FREXP_LDEXP # define FREXP frexp # define LDEXP ldexp # endif # define DECL_ROUNDING # define BEGIN_ROUNDING() # define END_ROUNDING() # define L_(literal) literal #endif DOUBLE FUNC (DOUBLE x, int *expptr) { int exponent; DECL_ROUNDING BEGIN_ROUNDING (); #ifdef USE_FREXP_LDEXP /* frexp and ldexp are usually faster than the loop below. */ x = FREXP (x, &exponent); x = x + x; exponent -= 1; if (exponent < MIN_EXP - 1) { x = LDEXP (x, exponent - (MIN_EXP - 1)); exponent = MIN_EXP - 1; } #else { /* Since the exponent is an 'int', it fits in 64 bits. Therefore the loops are executed no more than 64 times. */ DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ DOUBLE powh[64]; /* powh[i] = 2^-2^i */ int i; exponent = 0; if (x >= L_(1.0)) { /* A nonnegative exponent. */ { DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x >= 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x >= pow2_i) { exponent += (1 << i); x *= powh_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } } /* Here 1.0 <= x < 2^2^i. */ } else { /* A negative exponent. */ { DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (exponent - (1 << i) < MIN_EXP - 1) break; exponent -= (1 << i); x *= pow2_i; if (x >= L_(1.0)) break; pow2[i] = pow2_i; powh[i] = powh_i; } } /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ if (x < L_(1.0)) /* Invariants: x * 2^exponent = argument, x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent. */ while (i > 0) { i--; if (exponent - (1 << i) >= MIN_EXP - 1) { exponent -= (1 << i); x *= pow2[i]; if (x >= L_(1.0)) break; } } /* Here either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ } /* Invariants: x * 2^exponent = argument, and either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ while (i > 0) { i--; if (x >= pow2[i]) { exponent += (1 << i); x *= powh[i]; } } /* Here either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ } #endif END_ROUNDING (); *expptr = exponent; return x; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-frexp.h����������������������������������������������������������0000664�0000000�0000000�00000002102�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2021 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/>. */ /* Write a finite, positive number x as x = mantissa * 2^exp where exp >= DBL_MIN_EXP - 1, mantissa < 2.0, if x is not a denormalized number then mantissa >= 1.0. Store exp in *EXPPTR and return mantissa. */ extern double printf_frexp (double x, int *expptr); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-frexpl.c���������������������������������������������������������0000664�0000000�0000000�00000002122�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include "printf-frexpl.h" # include "printf-frexp.h" long double printf_frexpl (long double x, int *expptr) { return printf_frexp (x, expptr); } #else # define USE_LONG_DOUBLE # include "printf-frexp.c" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-frexpl.h���������������������������������������������������������0000664�0000000�0000000�00000002125�14110572173�0020016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2021 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/>. */ /* Write a finite, positive number x as x = mantissa * 2^exp where exp >= LDBL_MIN_EXP - 1, mantissa < 2.0, if x is not a denormalized number then mantissa >= 1.0. Store exp in *EXPPTR and return mantissa. */ extern long double printf_frexpl (long double x, int *expptr); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-parse.c����������������������������������������������������������0000664�0000000�0000000�00000052473�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2021 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/>. */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include <config.h> #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include <stddef.h> /* Get intmax_t. */ #include <stdint.h> /* malloc(), realloc(), free(). */ #include <stdlib.h> /* memcpy(). */ #include <string.h> /* errno. */ #include <errno.h> /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } #if defined __APPLE__ && defined __MACH__ /* On Mac OS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ flags += 16; } else { /* int64_t = long */ flags += 8; } cp++; } #endif #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64 = long long */ flags += 16; } else { /* __int64 = long */ flags += 8; } cp += 3; } #endif else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': /* If 'long long' is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else /* If 'long long' is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': /* If 'unsigned long long' is larger than 'unsigned long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else /* If 'unsigned long long' is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': /* If 'long long' is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else /* If 'long long' is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf-parse.h����������������������������������������������������������0000664�0000000�0000000�00000012225�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2021 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/>. */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. STATIC Set to 'static' to declare the function static. */ #if HAVE_FEATURES_H # include <features.h> /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* xxx_directive: A parsed directive. xxx_directives: A parsed format string. */ /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; #if ENABLE_UNISTDIO /* A parsed directive. */ typedef struct { const uint8_t* dir_start; const uint8_t* dir_end; int flags; const uint8_t* width_start; const uint8_t* width_end; size_t width_arg_index; const uint8_t* precision_start; const uint8_t* precision_end; size_t precision_arg_index; uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u8_directive; /* A parsed format string. */ typedef struct { size_t count; u8_directive *dir; size_t max_width_length; size_t max_precision_length; u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u8_directives; /* A parsed directive. */ typedef struct { const uint16_t* dir_start; const uint16_t* dir_end; int flags; const uint16_t* width_start; const uint16_t* width_end; size_t width_arg_index; const uint16_t* precision_start; const uint16_t* precision_end; size_t precision_arg_index; uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u16_directive; /* A parsed format string. */ typedef struct { size_t count; u16_directive *dir; size_t max_width_length; size_t max_precision_length; u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u16_directives; /* A parsed directive. */ typedef struct { const uint32_t* dir_start; const uint32_t* dir_end; int flags; const uint32_t* width_start; const uint32_t* width_end; size_t width_arg_index; const uint32_t* precision_start; const uint32_t* precision_end; size_t precision_arg_index; uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u32_directive; /* A parsed format string. */ typedef struct { size_t count; u32_directive *dir; size_t max_width_length; size_t max_precision_length; u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u32_directives; #endif /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #if ENABLE_UNISTDIO extern int ulc_printf_parse (const char *format, char_directives *d, arguments *a); extern int u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); extern int u16_printf_parse (const uint16_t *format, u16_directives *d, arguments *a); extern int u32_printf_parse (const uint32_t *format, u32_directives *d, arguments *a); #else # ifdef STATIC STATIC # else extern # endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif #endif /* _PRINTF_PARSE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/printf.c����������������������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2007, 2010-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <stdarg.h> /* Print formatted output to standard output. Return string length of formatted string. On error, return a negative value. */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/priv-set.c��������������������������������������������������������������0000664�0000000�0000000�00000006664�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query, remove, or restore a Solaris privilege. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 David Bartley. */ #include <config.h> #define PRIV_SET_INLINE _GL_EXTERN_INLINE #include "priv-set.h" #if HAVE_GETPPRIV && HAVE_PRIV_H # include <errno.h> # include <stdbool.h> # include <priv.h> /* Holds a (cached) copy of the effective set. */ static priv_set_t *eff_set; /* Holds a set of privileges that we have removed. */ static priv_set_t *rem_set; static bool initialized; static int priv_set_initialize (void) { if (! initialized) { eff_set = priv_allocset (); if (!eff_set) { return -1; } rem_set = priv_allocset (); if (!rem_set) { priv_freeset (eff_set); return -1; } if (getppriv (PRIV_EFFECTIVE, eff_set) != 0) { priv_freeset (eff_set); priv_freeset (rem_set); return -1; } priv_emptyset (rem_set); initialized = true; } return 0; } /* Check if priv is in the effective set. Returns 1 if priv is a member and 0 if not. Returns -1 on error with errno set appropriately. */ int priv_set_ismember (const char *priv) { if (! initialized && priv_set_initialize () != 0) return -1; return priv_ismember (eff_set, priv); } /* Try to remove priv from the effective set. Returns 0 if priv was removed. Returns -1 on error with errno set appropriately. */ int priv_set_remove (const char *priv) { if (! initialized && priv_set_initialize () != 0) return -1; if (priv_ismember (eff_set, priv)) { /* priv_addset/priv_delset can only fail if priv is invalid, which is checked above by the priv_ismember call. */ priv_delset (eff_set, priv); if (setppriv (PRIV_SET, PRIV_EFFECTIVE, eff_set) != 0) { priv_addset (eff_set, priv); return -1; } priv_addset (rem_set, priv); } else { errno = EINVAL; return -1; } return 0; } /* Try to restore priv to the effective set. Returns 0 if priv was re-added to the effective set (after being previously removed by a call to priv_set_remove). Returns -1 on error with errno set appropriately. */ int priv_set_restore (const char *priv) { if (! initialized && priv_set_initialize () != 0) return -1; if (priv_ismember (rem_set, priv)) { /* priv_addset/priv_delset can only fail if priv is invalid, which is checked above by the priv_ismember call. */ priv_addset (eff_set, priv); if (setppriv (PRIV_SET, PRIV_EFFECTIVE, eff_set) != 0) { priv_delset (eff_set, priv); return -1; } priv_delset (rem_set, priv); } else { errno = EINVAL; return -1; } return 0; } #endif ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/priv-set.h��������������������������������������������������������������0000664�0000000�0000000�00000002756�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query, remove, or restore a Solaris privilege. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 David Bartley. */ #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef PRIV_SET_INLINE # define PRIV_SET_INLINE _GL_INLINE #endif #if HAVE_GETPPRIV && HAVE_PRIV_H # include <priv.h> int priv_set_ismember (const char *priv); int priv_set_remove (const char *priv); int priv_set_restore (const char *priv); PRIV_SET_INLINE int priv_set_remove_linkdir (void) { return priv_set_remove (PRIV_SYS_LINKDIR); } PRIV_SET_INLINE int priv_set_restore_linkdir (void) { return priv_set_restore (PRIV_SYS_LINKDIR); } #else PRIV_SET_INLINE int priv_set_remove_linkdir (void) { return -1; } PRIV_SET_INLINE int priv_set_restore_linkdir (void) { return -1; } #endif _GL_INLINE_HEADER_END ������������������gnulib-20210822~d383792/lib/progname.c��������������������������������������������������������������0000664�0000000�0000000�00000006151�14110572173�0017024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2003, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This 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> /* Specification. */ #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ #include "progname.h" #include <errno.h> /* get program_invocation_name declaration */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* String containing name the program is called with. To be initialized by main(). */ const char *program_name = NULL; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ void set_program_name (const char *argv0) { /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). It also makes argv[0] absolute. But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here. */ const char *slash; const char *base; /* Sanity check. POSIX requires the invoking process to pass a non-NULL argv[0]. */ if (argv0 == NULL) { /* It's a bug in the invoking program. Help diagnosing it. */ fputs ("A NULL argv[0] was passed through an exec system call.\n", stderr); abort (); } slash = strrchr (argv0, '/'); base = (slash != NULL ? slash + 1 : argv0); if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) { argv0 = base; if (strncmp (base, "lt-", 3) == 0) { argv0 = base + 3; /* On glibc systems, remove the "lt-" prefix from the variable program_invocation_short_name. */ #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = (char *) argv0; #endif } } /* But don't strip off a leading <dirname>/ in general, because when the user runs /some/hidden/place/bin/cp foo foo he should get the error message /some/hidden/place/bin/cp: `foo' and `foo' are the same file not cp: `foo' and `foo' are the same file */ program_name = argv0; /* On glibc systems, the error() function comes from libc and uses the variable program_invocation_name, not program_name. So set this variable as well. */ #if HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = (char *) argv0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/progname.h��������������������������������������������������������������0000664�0000000�0000000�00000003740�14110572173�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This 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 _PROGNAME_H #define _PROGNAME_H /* Programs using this file should do the following in main(): set_program_name (argv[0]); */ #ifdef __cplusplus extern "C" { #endif /* String containing name the program is called with. */ extern const char *program_name; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ extern void set_program_name (const char *argv0); #if ENABLE_RELOCATABLE /* Set program_name, based on argv[0], and original installation prefix and directory, for relocatability. */ extern void set_program_name_and_installdir (const char *argv0, const char *orig_installprefix, const char *orig_installdir); #undef set_program_name #define set_program_name(ARG0) \ set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) /* Return the full pathname of the current executable, based on the earlier call to set_program_name_and_installdir. Return NULL if unknown. */ extern char *get_full_program_name (void); #endif #ifdef __cplusplus } #endif #endif /* _PROGNAME_H */ ��������������������������������gnulib-20210822~d383792/lib/progreloc.c�������������������������������������������������������������0000664�0000000�0000000�00000035347�14110572173�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable programs. Copyright (C) 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "progname.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> /* Get declaration of _NSGetExecutablePath on Mac OS X 10.2 or newer. */ #if HAVE_MACH_O_DYLD_H # include <mach-o/dyld.h> #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE #endif #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #ifdef __EMX__ # define INCL_DOS # include <os2.h> #endif #include "relocatable.h" #ifdef NO_XMALLOC # include "areadlink.h" # define xreadlink areadlink #else # include "xreadlink.h" #endif #ifdef NO_XMALLOC # define xmalloc malloc # define xstrdup strdup #else # include "xalloc.h" #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #if defined IN_RELOCWRAPPER && (!defined O_CLOEXEC || GNULIB_defined_O_CLOEXEC) # undef O_CLOEXEC # define O_CLOEXEC 0 #endif /* Declare canonicalize_file_name. The <stdlib.h> included above may be the system's one, not the gnulib one. */ extern char * canonicalize_file_name (const char *name); #if defined WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef GetModuleFileName # define GetModuleFileName GetModuleFileNameA #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_FILE_NAME_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_FILE_NAME_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf #undef set_program_name #if ENABLE_RELOCATABLE #ifdef __sun /* Helper function, from gnulib module 'safe-read'. */ static size_t safe_read (int fd, void *buf, size_t count) { for (;;) { ssize_t result = read (fd, buf, count); if (0 <= result || errno != EINTR) return result; } } /* Helper function, from gnulib module 'full-read'. */ static size_t full_read (int fd, void *buf, size_t count) { size_t total = 0; const char *ptr = (const char *) buf; while (count > 0) { size_t n = safe_read (fd, ptr, count); if (n == (size_t) -1) break; if (n == 0) { errno = 0; break; } total += n; ptr += n; count -= n; } return total; } #endif #if defined __linux__ || defined __CYGWIN__ /* File descriptor of the executable. (Only used to verify that we find the correct executable.) */ static int executable_fd = -1; #endif /* Define this function only when it's needed. */ #if !(defined WINDOWS_NATIVE || defined __EMX__) /* Tests whether a given filename may belong to the executable. */ static bool maybe_executable (const char *filename) { /* The native Windows API lacks the access() function. */ # if !defined WINDOWS_NATIVE if (access (filename, X_OK) < 0) return false; # endif # if defined __linux__ || defined __CYGWIN__ if (executable_fd >= 0) { /* If we already have an executable_fd, check that filename points to the same inode. */ struct stat statexe; struct stat statfile; if (fstat (executable_fd, &statexe) >= 0) return (stat (filename, &statfile) >= 0 && statfile.st_dev && statfile.st_dev == statexe.st_dev && statfile.st_ino == statexe.st_ino); } # endif /* Check that the filename does not point to a directory. */ { struct stat statfile; return (stat (filename, &statfile) >= 0 && ! S_ISDIR (statfile.st_mode)); } } #endif /* Determine the full pathname of the current executable, freshly allocated. Return NULL if unknown. Guaranteed to work on Linux and native Windows. Likely to work on the other Unixes (maybe except BeOS), under most conditions. */ static char * find_executable (const char *argv0) { #if defined WINDOWS_NATIVE /* Native Windows only. On Cygwin, it is better to use the Cygwin provided /proc interface, than to use native Windows API and cygwin_conv_to_posix_path, because it supports longer file names (see <https://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */ char location[MAX_PATH]; int length = GetModuleFileName (NULL, location, sizeof (location)); if (length < 0) return NULL; if (!IS_FILE_NAME_WITH_DIR (location)) /* Shouldn't happen. */ return NULL; return xstrdup (location); #elif defined __EMX__ PPIB ppib; char location[CCHMAXPATH]; /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/619_L2H_DosGetInfoBlocksSynt.html for specification of DosGetInfoBlocks(). */ if (DosGetInfoBlocks (NULL, &ppib)) return NULL; /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html for specification of DosQueryModuleName(). */ if (DosQueryModuleName (ppib->pib_hmte, sizeof (location), location)) return NULL; _fnslashify (location); return xstrdup (location); #else /* Unix */ # if defined __linux__ /* The executable is accessible as /proc/<pid>/exe. In newer Linux versions, also as /proc/self/exe. Linux >= 2.1 provides a symlink to the true pathname; older Linux versions give only device and ino, enclosed in brackets, which we cannot use here. */ { char *link; link = xreadlink ("/proc/self/exe"); if (link != NULL && link[0] != '[') return link; if (executable_fd < 0) executable_fd = open ("/proc/self/exe", O_EXEC | O_CLOEXEC, 0); { char buf[6+10+5]; sprintf (buf, "/proc/%d/exe", getpid ()); link = xreadlink (buf); if (link != NULL && link[0] != '[') return link; if (executable_fd < 0) executable_fd = open (buf, O_EXEC | O_CLOEXEC, 0); } } # endif # if defined __ANDROID__ || defined __FreeBSD_kernel__ /* On Android and GNU/kFreeBSD, the executable is accessible as /proc/<pid>/exe and /proc/self/exe. */ { char *link; link = xreadlink ("/proc/self/exe"); if (link != NULL) return link; } # endif # if defined __FreeBSD__ || defined __DragonFly__ /* In FreeBSD >= 5.0, the executable is accessible as /proc/<pid>/file and /proc/curproc/file. */ { char *link; link = xreadlink ("/proc/curproc/file"); if (link != NULL) { if (strcmp (link, "unknown") != 0) return link; free (link); } } # endif # if defined __NetBSD__ /* In NetBSD >= 4.0, the executable is accessible as /proc/<pid>/exe and /proc/curproc/exe. */ { char *link; link = xreadlink ("/proc/curproc/exe"); if (link != NULL) return link; } # endif # if defined __sun /* On Solaris >= 11.4, /proc/<pid>/execname and /proc/self/execname contains the name of the executable, either as an absolute file name or relative to the current directory. */ { char namebuf[4096]; int fd = open ("/proc/self/execname", O_RDONLY | O_CLOEXEC, 0); if (fd >= 0) { size_t len = full_read (fd, namebuf, sizeof (namebuf)); close (fd); if (len > 0 && len < sizeof (namebuf)) { namebuf[len] = '\0'; return canonicalize_file_name (namebuf); } } } # endif # if defined __CYGWIN__ /* The executable is accessible as /proc/<pid>/exe, at least in Cygwin >= 1.5. */ { char *link; link = xreadlink ("/proc/self/exe"); if (link != NULL) return link; if (executable_fd < 0) executable_fd = open ("/proc/self/exe", O_EXEC | O_CLOEXEC, 0); } # endif # if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH /* On Mac OS X 10.2 or newer, the function int _NSGetExecutablePath (char *buf, uint32_t *bufsize); can be used to retrieve the executable's full path. */ char location[4096]; unsigned int length = sizeof (location); if (_NSGetExecutablePath (location, &length) == 0 && location[0] == '/') return canonicalize_file_name (location); # endif /* Guess the executable's full path. We assume the executable has been called via execlp() or execvp() with properly set up argv[0]. The login(1) convention to add a '-' prefix to argv[0] is not supported. */ { bool has_slash = false; { const char *p; for (p = argv0; *p; p++) if (*p == '/') { has_slash = true; break; } } if (!has_slash) { /* exec searches paths without slashes in the directory list given by $PATH. */ const char *path = getenv ("PATH"); if (path != NULL) { const char *p; const char *p_next; for (p = path; *p; p = p_next) { const char *q; size_t p_len; char *concat_name; for (q = p; *q; q++) if (*q == ':') break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); /* We have a path item at p, of length p_len. Now concatenate the path item and argv0. */ concat_name = (char *) xmalloc (p_len + strlen (argv0) + 2); # ifdef NO_XMALLOC if (concat_name == NULL) return NULL; # endif if (p_len == 0) /* An empty PATH element designates the current directory. */ strcpy (concat_name, argv0); else { memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, argv0); } if (maybe_executable (concat_name)) return canonicalize_file_name (concat_name); free (concat_name); } } /* Not found in the PATH, assume the current directory. */ } /* exec treats paths containing slashes as relative to the current directory. */ if (maybe_executable (argv0)) return canonicalize_file_name (argv0); } /* No way to find the executable. */ return NULL; #endif } /* Full pathname of executable, or NULL. */ static char *executable_fullname; static void prepare_relocate (const char *orig_installprefix, const char *orig_installdir, const char *argv0) { char *curr_prefix; /* Determine the full pathname of the current executable. */ executable_fullname = find_executable (argv0); /* Determine the current installation prefix from it. */ curr_prefix = compute_curr_prefix (orig_installprefix, orig_installdir, executable_fullname); if (curr_prefix != NULL) { /* Now pass this prefix to all copies of the relocate.c source file. */ set_relocation_prefix (orig_installprefix, curr_prefix); free (curr_prefix); } } /* Set program_name, based on argv[0], and original installation prefix and directory, for relocatability. */ void set_program_name_and_installdir (const char *argv0, const char *orig_installprefix, const char *orig_installdir) { const char *argv0_stripped = argv0; /* Relocatable programs are renamed to .bin by install-reloc. Or, more generally, their suffix is changed from $exeext to .bin$exeext. Remove the ".bin" here. */ { size_t argv0_len = strlen (argv0); const size_t exeext_len = sizeof (EXEEXT) - sizeof (""); if (argv0_len > 4 + exeext_len) if (memcmp (argv0 + argv0_len - exeext_len - 4, ".bin", 4) == 0) { if (sizeof (EXEEXT) > sizeof ("")) { /* Compare using an inlined copy of c_strncasecmp(), because the filenames may have undergone a case conversion since they were packaged. In other words, EXEEXT may be ".exe" on one system and ".EXE" on another. */ static const char exeext[] = EXEEXT; const char *s1 = argv0 + argv0_len - exeext_len; const char *s2 = exeext; for (; *s1 != '\0'; s1++, s2++) { unsigned char c1 = *s1; unsigned char c2 = *s2; if ((c1 >= 'A' && c1 <= 'Z' ? c1 - 'A' + 'a' : c1) != (c2 >= 'A' && c2 <= 'Z' ? c2 - 'A' + 'a' : c2)) goto done_stripping; } } /* Remove ".bin" before EXEEXT or its equivalent. */ { char *shorter = (char *) xmalloc (argv0_len - 4 + 1); #ifdef NO_XMALLOC if (shorter != NULL) #endif { memcpy (shorter, argv0, argv0_len - exeext_len - 4); if (sizeof (EXEEXT) > sizeof ("")) memcpy (shorter + argv0_len - exeext_len - 4, argv0 + argv0_len - exeext_len - 4, exeext_len); shorter[argv0_len - 4] = '\0'; argv0_stripped = shorter; } } done_stripping: ; } } set_program_name (argv0_stripped); prepare_relocate (orig_installprefix, orig_installdir, argv0); } /* Return the full pathname of the current executable, based on the earlier call to set_program_name_and_installdir. Return NULL if unknown. */ char * get_full_program_name (void) { return executable_fullname; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/propername.c������������������������������������������������������������0000664�0000000�0000000�00000023442�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Localization of proper names. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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/>. */ /* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that the proper_name function might be candidate for attribute 'const' */ #if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=const" #endif #include <config.h> /* Specification. */ #include "propername.h" #include <ctype.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if HAVE_ICONV # include <iconv.h> #endif #include "trim.h" #include "mbchar.h" #include "mbuiter.h" #include "localcharset.h" #include "c-strcase.h" #include "xstriconv.h" #include "xalloc.h" #include "gettext.h" /* Tests whether STRING contains trim (SUB), starting and ending at word boundaries. Here, instead of implementing Unicode Standard Annex #29 for determining word boundaries, we assume that trim (SUB) starts and ends with words and only test whether the part before it ends with a non-word and the part after it starts with a non-word. */ static bool mbsstr_trimmed_wordbounded (const char *string, const char *sub) { char *tsub = trim (sub); bool found = false; for (; *string != '\0';) { const char *tsub_in_string = mbsstr (string, tsub); if (tsub_in_string == NULL) break; else { if (MB_CUR_MAX > 1) { mbui_iterator_t string_iter; bool word_boundary_before; bool word_boundary_after; mbui_init (string_iter, string); word_boundary_before = true; if (mbui_cur_ptr (string_iter) < tsub_in_string) { mbchar_t last_char_before_tsub; do { if (!mbui_avail (string_iter)) abort (); last_char_before_tsub = mbui_cur (string_iter); mbui_advance (string_iter); } while (mbui_cur_ptr (string_iter) < tsub_in_string); if (mb_isalnum (last_char_before_tsub)) word_boundary_before = false; } mbui_init (string_iter, tsub_in_string); { mbui_iterator_t tsub_iter; for (mbui_init (tsub_iter, tsub); mbui_avail (tsub_iter); mbui_advance (tsub_iter)) { if (!mbui_avail (string_iter)) abort (); mbui_advance (string_iter); } } word_boundary_after = true; if (mbui_avail (string_iter)) { mbchar_t first_char_after_tsub = mbui_cur (string_iter); if (mb_isalnum (first_char_after_tsub)) word_boundary_after = false; } if (word_boundary_before && word_boundary_after) { found = true; break; } mbui_init (string_iter, tsub_in_string); if (!mbui_avail (string_iter)) break; string = tsub_in_string + mb_len (mbui_cur (string_iter)); } else { bool word_boundary_before; const char *p; bool word_boundary_after; word_boundary_before = true; if (string < tsub_in_string) if (isalnum ((unsigned char) tsub_in_string[-1])) word_boundary_before = false; p = tsub_in_string + strlen (tsub); word_boundary_after = true; if (*p != '\0') if (isalnum ((unsigned char) *p)) word_boundary_after = false; if (word_boundary_before && word_boundary_after) { found = true; break; } if (*tsub_in_string == '\0') break; string = tsub_in_string + 1; } } } free (tsub); return found; } /* Return the localization of NAME. NAME is written in ASCII. */ const char * proper_name (const char *name) { /* See whether there is a translation. */ const char *translation = gettext (name); if (translation != name) { /* See whether the translation contains the original name. */ if (mbsstr_trimmed_wordbounded (translation, name)) return translation; else { /* Return "TRANSLATION (NAME)". */ char *result = XNMALLOC (strlen (translation) + 2 + strlen (name) + 1 + 1, char); sprintf (result, "%s (%s)", translation, name); return result; } } else return name; } /* Return the localization of a name whose original writing is not ASCII. NAME_UTF8 is the real name, written in UTF-8 with octal or hexadecimal escape sequences. NAME_ASCII is a fallback written only with ASCII characters. */ const char * proper_name_utf8 (const char *name_ascii, const char *name_utf8) { /* See whether there is a translation. */ const char *translation = gettext (name_ascii); /* Try to convert NAME_UTF8 to the locale encoding. */ const char *locale_code = locale_charset (); char *alloc_name_converted = NULL; char *alloc_name_converted_translit = NULL; const char *name_converted = NULL; const char *name_converted_translit = NULL; const char *name; if (c_strcasecmp (locale_code, "UTF-8") != 0) { #if HAVE_ICONV name_converted = alloc_name_converted = xstr_iconv (name_utf8, "UTF-8", locale_code); # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ && !defined __UCLIBC__) \ || _LIBICONV_VERSION >= 0x0105 { char *converted_translit; size_t len = strlen (locale_code); char *locale_code_translit = XNMALLOC (len + 10 + 1, char); memcpy (locale_code_translit, locale_code, len); memcpy (locale_code_translit + len, "//TRANSLIT", 10 + 1); converted_translit = xstr_iconv (name_utf8, "UTF-8", locale_code_translit); free (locale_code_translit); if (converted_translit != NULL) { # if !_LIBICONV_VERSION /* Don't use the transliteration if it added question marks. glibc's transliteration falls back to question marks; libiconv's transliteration does not. mbschr is equivalent to strchr in this case. */ if (strchr (converted_translit, '?') != NULL) free (converted_translit); else # endif name_converted_translit = alloc_name_converted_translit = converted_translit; } } # endif #endif } else { name_converted = name_utf8; name_converted_translit = name_utf8; } /* The name in locale encoding. */ name = (name_converted != NULL ? name_converted : name_converted_translit != NULL ? name_converted_translit : name_ascii); /* See whether we have a translation. Some translators have not understood that they should use the UTF-8 form of the name, if possible. So if the translator provided a no-op translation, we ignore it. */ if (strcmp (translation, name_ascii) != 0) { /* See whether the translation contains the original name. */ if (mbsstr_trimmed_wordbounded (translation, name_ascii) || (name_converted != NULL && mbsstr_trimmed_wordbounded (translation, name_converted)) || (name_converted_translit != NULL && mbsstr_trimmed_wordbounded (translation, name_converted_translit))) { if (alloc_name_converted != NULL) free (alloc_name_converted); if (alloc_name_converted_translit != NULL) free (alloc_name_converted_translit); return translation; } else { /* Return "TRANSLATION (NAME)". */ char *result = XNMALLOC (strlen (translation) + 2 + strlen (name) + 1 + 1, char); sprintf (result, "%s (%s)", translation, name); if (alloc_name_converted != NULL) free (alloc_name_converted); if (alloc_name_converted_translit != NULL) free (alloc_name_converted_translit); return result; } } else { if (alloc_name_converted != NULL && alloc_name_converted != name) free (alloc_name_converted); if (alloc_name_converted_translit != NULL && alloc_name_converted_translit != name) free (alloc_name_converted_translit); return name; } } #ifdef TEST1 # include <locale.h> int main (int argc, char *argv[]) { setlocale (LC_ALL, ""); if (mbsstr_trimmed_wordbounded (argv[1], argv[2])) printf("found\n"); return 0; } #endif #ifdef TEST2 # include <locale.h> # include <stdio.h> int main (int argc, char *argv[]) { setlocale (LC_ALL, ""); printf ("%s\n", proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard")); return 0; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/propername.h������������������������������������������������������������0000664�0000000�0000000�00000006167�14110572173�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Localization of proper names. -*- coding: utf-8 -*- Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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/>. */ /* INTRODUCTION What do Torbjörn Granlund (coreutils) François Pinard (coreutils) Danilo Šegan (gettext) have in common? A non-ASCII name. This causes trouble in the --version output. The simple "solution" unfortunately mutilates the name. $ du --version | grep Granlund Écrit par Torbjorn Granlund, David MacKenzie, Paul Eggert et Jim Meyering. $ ptx --version | grep Pinard Écrit par F. Pinard. What is desirable, is to print the full name if the output character set allows it, and the ASCIIfied name only as a fallback. $ recode-sr-latin --version ... Written by Danilo Šegan and Bruno Haible. $ LC_ALL=C recode-sr-latin --version ... Written by Danilo Segan and Bruno Haible. The 'propername' module does exactly this. Plus, for languages that use a different writing system than the Latin alphabet, it allows a translator to write the name using that different writing system. In that case the output will look like this: <translated name> (<original name in English>) To use the 'propername' module requires two simple steps: 1) Add it to the list of gnulib modules to import, 2) Change the arguments of version_etc(), from "Paul Eggert" to proper_name ("Paul Eggert") from "Torbjorn Granlund" to proper_name_utf8 ("Torbjorn Granlund", "Torbj\303\266rn Granlund") from "F. Pinard" to proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard") (Optionally, here you can also add / * TRANSLATORS: ... * / comments explaining how the name is written or pronounced.) */ #ifndef _PROPERNAME_H #define _PROPERNAME_H #ifdef __cplusplus extern "C" { #endif /* Return the localization of NAME. NAME is written in ASCII. */ extern const char * proper_name (const char *name) /* NOT attribute const */; /* Return the localization of a name whose original writing is not ASCII. NAME_UTF8 is the real name, written in UTF-8 with octal or hexadecimal escape sequences. NAME_ASCII is a fallback written only with ASCII characters. */ extern const char * proper_name_utf8 (const char *name_ascii, const char *name_utf8); #ifdef __cplusplus } #endif #endif /* _PROPERNAME_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pselect.c���������������������������������������������������������������0000664�0000000�0000000�00000005676�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* pselect - synchronous I/O multiplexing Copyright 2011-2021 Free Software Foundation, Inc. This file is part of gnulib. 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 */ #include <config.h> #include <sys/select.h> #include <errno.h> #include <signal.h> /* Examine the size-NFDS file descriptor sets in RFDS, WFDS, and XFDS to see whether some of their descriptors are ready for reading, ready for writing, or have exceptions pending. Wait for at most TIMEOUT seconds, and use signal mask SIGMASK while waiting. A null pointer parameter stands for no descriptors, an infinite timeout, or an unaffected signal mask. */ #if !HAVE_PSELECT int pselect (int nfds, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict xfds, struct timespec const *restrict timeout, sigset_t const *restrict sigmask) { int select_result; sigset_t origmask; struct timeval tv, *tvp; if (timeout) { if (! (0 <= timeout->tv_nsec && timeout->tv_nsec < 1000000000)) { errno = EINVAL; return -1; } tv.tv_sec = timeout->tv_sec; tv.tv_usec = (timeout->tv_nsec + 999) / 1000; tvp = &tv; } else tvp = NULL; /* Signal mask munging should be atomic, but this is the best we can do in this emulation. */ if (sigmask) pthread_sigmask (SIG_SETMASK, sigmask, &origmask); select_result = select (nfds, rfds, wfds, xfds, tvp); if (sigmask) { int select_errno = errno; pthread_sigmask (SIG_SETMASK, &origmask, NULL); errno = select_errno; } return select_result; } #else /* HAVE_PSELECT */ # include <unistd.h> # undef pselect int rpl_pselect (int nfds, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict xfds, struct timespec const *restrict timeout, sigset_t const *restrict sigmask) { int i; /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } for (i = 0; i < nfds; i++) { if (((rfds && FD_ISSET (i, rfds)) || (wfds && FD_ISSET (i, wfds)) || (xfds && FD_ISSET (i, xfds))) && dup2 (i, i) != i) return -1; } return pselect (nfds, rfds, wfds, xfds, timeout, sigmask); } #endif ������������������������������������������������������������������gnulib-20210822~d383792/lib/pt_chown.c��������������������������������������������������������������0000664�0000000�0000000�00000012003�14110572173�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* pt_chown - helper program for 'grantpt'. Copyright (C) 1998-1999, 2009-2021 Free Software Foundation, Inc. Contributed by C. Scott Ananian <cananian@alumni.princeton.edu>, 1998. 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/>. */ #include <config.h> #include <errno.h> #include <grp.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "root-uid.h" #include "pty-private.h" /* For security reasons, we try to minimize the dependencies on libraries outside libc. This means, in particular: - No use of gettext(), since it's usually implemented in libintl. - No use of error() or argp, since they rely on gettext by default. */ static int do_pt_chown (void) { char *pty; struct stat st; struct group *p; gid_t gid; /* Check that PTY_FILENO is a valid master pseudo terminal. */ pty = ptsname (PTY_FILENO); if (pty == NULL) return errno == EBADF ? FAIL_EBADF : FAIL_EINVAL; /* Check that the returned slave pseudo terminal is a character device. */ if (stat (pty, &st) < 0 || !S_ISCHR (st.st_mode)) return FAIL_EINVAL; /* Get the group ID of the special 'tty' group. */ p = getgrnam (TTY_GROUP); gid = p ? p->gr_gid : getgid (); /* Set the owner to the real user ID, and the group to that special group ID. */ if (st.st_gid != gid && chown (pty, getuid (), gid) < 0) return FAIL_EACCES; /* Set the permission mode to readable and writable by the owner, and writable by the group. */ if ((st.st_mode & (S_IRWXU|S_IRWXG|S_IRWXO)) != (S_IRUSR|S_IWUSR|S_IWGRP) && chmod (pty, S_IRUSR|S_IWUSR|S_IWGRP) < 0) return FAIL_EACCES; return 0; } int main (int argc, char *argv[]) { uid_t euid = geteuid (); if (argc == 1 && euid == ROOT_UID) { /* Normal invocation of this program is with no arguments and with privileges. */ return do_pt_chown (); } /* It would be possible to drop setuid/setgid privileges here. But it is not really needed, since the code below only calls strcmp and [f]printf. */ { int do_help = 0; int do_version = 0; int remaining; for (remaining = 1; remaining < argc; remaining++) { const char *arg = argv[remaining]; if (arg[0] == '-') { if (strcmp (arg, "--") == 0) { remaining++; break; } else if (strcmp (arg, "--help") == 0) do_help = 1; else if (strcmp (arg, "--version") == 0) do_version = 1; else { fprintf (stderr, "pt_chown: invalid option: %s\n", arg); return EXIT_FAILURE; } } else break; } if (remaining < argc) { fprintf (stderr, "pt_chown: too many arguments\n"); return EXIT_FAILURE; } if (do_help) { printf ("Usage: pt_chown [OPTION...]\n"); printf ("Set the owner, group and access permission of the slave pseudo terminal\n" "corresponding to the master pseudo terminal passed on file descriptor %d.\n" "This is the helper program for the 'grantpt' function. It is not intended\n" "to be run directly from the command line.\n", PTY_FILENO); printf ("\n"); printf (" --help Give this help list\n"); printf (" --version Print program version\n"); printf ("\n"); printf ("The owner is set to the current user, the group is set to '%s', and the\n" "access permission is set to '%o'.\n", TTY_GROUP, S_IRUSR|S_IWUSR|S_IWGRP); printf ("Please report bugs to <bug-gnulib@gnu.org>.\n"); return EXIT_SUCCESS; } if (do_version) { printf ("pt_chown (GNU %s) %s\n", "libc", "2.11"); printf ("Copyright (C) %s Free Software Foundation, Inc.\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", "1999"); return EXIT_SUCCESS; } } /* Check if we are properly installed. */ if (euid != ROOT_UID) { fprintf (stderr, "pt_chown: needs to be installed setuid 'root'\n"); return FAIL_EXEC; } return EXIT_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread-cond.c����������������������������������������������������������0000664�0000000�0000000�00000011772�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX condition variables. Copyright (C) 2010-2021 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, 2010, and Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-thread.h" #else # include <errno.h> # include <limits.h> # include <sys/time.h> # include <time.h> #endif #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H int pthread_condattr_init (pthread_condattr_t *attr) { *attr = 0; return 0; } int pthread_condattr_destroy (_GL_UNUSED pthread_condattr_t *attr) { return 0; } #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_cond_init (pthread_cond_t *cond, _GL_UNUSED const pthread_condattr_t *attr) { return glwthread_cond_init (cond); } int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) { return glwthread_cond_wait (cond, mutex, (int (*) (void *)) pthread_mutex_lock, (int (*) (void *)) pthread_mutex_unlock); } int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime) { return glwthread_cond_timedwait (cond, mutex, (int (*) (void *)) pthread_mutex_lock, (int (*) (void *)) pthread_mutex_unlock, abstime); } int pthread_cond_signal (pthread_cond_t *cond) { return glwthread_cond_signal (cond); } int pthread_cond_broadcast (pthread_cond_t *cond) { return glwthread_cond_broadcast (cond); } int pthread_cond_destroy (pthread_cond_t *cond) { return glwthread_cond_destroy (cond); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_cond_init (_GL_UNUSED pthread_cond_t *cond, _GL_UNUSED const pthread_condattr_t *attr) { /* COND is never seriously used. */ return 0; } int pthread_cond_wait (_GL_UNUSED pthread_cond_t *cond, _GL_UNUSED pthread_mutex_t *mutex) { /* No other thread can signal this condition variable. Wait endlessly. */ for (;;) { struct timespec duration; duration.tv_sec = 86400; duration.tv_nsec = 0; nanosleep (&duration, NULL); } } int pthread_cond_timedwait (_GL_UNUSED pthread_cond_t *cond, _GL_UNUSED pthread_mutex_t *mutex, const struct timespec *abstime) { /* No other thread can signal this condition variable. Wait until ABSTIME is reached. */ for (;;) { struct timeval currtime; unsigned long remaining; struct timespec duration; gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec) remaining = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; remaining = seconds * 1000000000; if (remaining / 1000000000 != seconds) /* overflow? */ remaining = ULONG_MAX; else { long nanoseconds = abstime->tv_nsec - currtime.tv_usec * 1000; if (nanoseconds >= 0) { remaining += nanoseconds; if (remaining < nanoseconds) /* overflow? */ remaining = ULONG_MAX; } else { if (remaining >= - nanoseconds) remaining -= (- nanoseconds); else remaining = 0; } } } if (remaining == 0) return ETIMEDOUT; /* Sleep up to REMAINING ns. */ duration.tv_sec = remaining / 1000000000; duration.tv_nsec = remaining % 1000000000; nanosleep (&duration, NULL); } } int pthread_cond_signal (_GL_UNUSED pthread_cond_t *cond) { /* No threads can currently be blocked on COND. */ return 0; } int pthread_cond_broadcast (_GL_UNUSED pthread_cond_t *cond) { /* No threads can currently be blocked on COND. */ return 0; } int pthread_cond_destroy (_GL_UNUSED pthread_cond_t *cond) { /* COND is never seriously used. */ return 0; } #endif ������gnulib-20210822~d383792/lib/pthread-mutex.c���������������������������������������������������������0000664�0000000�0000000�00000014751�14110572173�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX mutexes (locks). Copyright (C) 2010-2021 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, 2010, and Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-timedmutex.h" # include "windows-timedrecmutex.h" #else # include <stdlib.h> #endif #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H int pthread_mutexattr_init (pthread_mutexattr_t *attr) { *attr = (PTHREAD_MUTEX_STALLED << 2) | PTHREAD_MUTEX_DEFAULT; return 0; } int pthread_mutexattr_gettype (const pthread_mutexattr_t *attr, int *typep) { *typep = *attr & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE); return 0; } int pthread_mutexattr_settype (pthread_mutexattr_t *attr, int type) { if (!(type == PTHREAD_MUTEX_DEFAULT || type == PTHREAD_MUTEX_NORMAL || type == PTHREAD_MUTEX_ERRORCHECK || type == PTHREAD_MUTEX_RECURSIVE)) return EINVAL; *attr ^= (*attr ^ type) & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE); return 0; } int pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robustp) { *robustp = (*attr >> 2) & (PTHREAD_MUTEX_STALLED | PTHREAD_MUTEX_ROBUST); return 0; } int pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust) { if (!(robust == PTHREAD_MUTEX_STALLED || robust == PTHREAD_MUTEX_ROBUST)) return EINVAL; *attr ^= (*attr ^ (robust << 2)) & ((PTHREAD_MUTEX_STALLED | PTHREAD_MUTEX_ROBUST) << 2); return 0; } int pthread_mutexattr_destroy (_GL_UNUSED pthread_mutexattr_t *attr) { return 0; } #elif PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED int pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robustp) { *robustp = PTHREAD_MUTEX_STALLED; return 0; } int pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust) { if (!(robust == PTHREAD_MUTEX_STALLED || robust == PTHREAD_MUTEX_ROBUST)) return EINVAL; if (!(robust == PTHREAD_MUTEX_STALLED)) return ENOTSUP; return 0; } #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) { /* This implementation does not support PTHREAD_MUTEX_ERRORCHECK and ignores the 'robust' attribute. */ if (attr != NULL && (*attr & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE)) == PTHREAD_MUTEX_RECURSIVE) { mutex->type = 2; return glwthread_timedrecmutex_init (&mutex->u.u_timedrecmutex); } else { mutex->type = 1; return glwthread_timedmutex_init (&mutex->u.u_timedmutex); } } int pthread_mutex_lock (pthread_mutex_t *mutex) { switch (mutex->type) { case 1: return glwthread_timedmutex_lock (&mutex->u.u_timedmutex); case 2: return glwthread_timedrecmutex_lock (&mutex->u.u_timedrecmutex); default: abort (); } } int pthread_mutex_trylock (pthread_mutex_t *mutex) { switch (mutex->type) { case 1: return glwthread_timedmutex_trylock (&mutex->u.u_timedmutex); case 2: return glwthread_timedrecmutex_trylock (&mutex->u.u_timedrecmutex); default: abort (); } } int pthread_mutex_timedlock (pthread_mutex_t *mutex, const struct timespec *abstime) { switch (mutex->type) { case 1: return glwthread_timedmutex_timedlock (&mutex->u.u_timedmutex, abstime); case 2: return glwthread_timedrecmutex_timedlock (&mutex->u.u_timedrecmutex, abstime); default: abort (); } } int pthread_mutex_unlock (pthread_mutex_t *mutex) { switch (mutex->type) { case 1: return glwthread_timedmutex_unlock (&mutex->u.u_timedmutex); case 2: return glwthread_timedrecmutex_unlock (&mutex->u.u_timedrecmutex); default: abort (); } } int pthread_mutex_destroy (pthread_mutex_t *mutex) { switch (mutex->type) { case 1: return glwthread_timedmutex_destroy (&mutex->u.u_timedmutex); case 2: return glwthread_timedrecmutex_destroy (&mutex->u.u_timedrecmutex); default: abort (); } } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ /* pthread_mutex_timedlock is defined by the 'pthread_mutex_timedlock' module. */ #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_mutex_init (_GL_UNUSED pthread_mutex_t *mutex, _GL_UNUSED const pthread_mutexattr_t *attr) { /* MUTEX is never seriously used. */ return 0; } int pthread_mutex_lock (_GL_UNUSED pthread_mutex_t *mutex) { /* There is only one thread, so it always gets the lock. This implementation does not support PTHREAD_MUTEX_ERRORCHECK. */ return 0; } int pthread_mutex_trylock (_GL_UNUSED pthread_mutex_t *mutex) { /* There is only one thread, so it always gets the lock. This implementation does not support PTHREAD_MUTEX_ERRORCHECK. */ return 0; } int pthread_mutex_timedlock (_GL_UNUSED pthread_mutex_t *mutex, _GL_UNUSED const struct timespec *abstime) { /* There is only one thread, so it always gets the lock. This implementation does not support PTHREAD_MUTEX_ERRORCHECK. */ return 0; } int pthread_mutex_unlock (_GL_UNUSED pthread_mutex_t *mutex) { /* There is only one thread, so it always unlocks successfully. This implementation does not support robust mutexes or PTHREAD_MUTEX_ERRORCHECK. */ return 0; } int pthread_mutex_destroy (_GL_UNUSED pthread_mutex_t *mutex) { /* MUTEX is never seriously used. */ return 0; } #endif �����������������������gnulib-20210822~d383792/lib/pthread-once.c����������������������������������������������������������0000664�0000000�0000000�00000003017�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX once-only control. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-once.h" #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_once (pthread_once_t *once_control, void (*initfunction) (void)) { glwthread_once (once_control, initfunction); return 0; } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_once (pthread_once_t *once_control, void (*initfunction) (void)) { if (*once_control == 0) { *once_control = ~ 0; initfunction (); } return 0; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread-rwlock.c��������������������������������������������������������0000664�0000000�0000000�00000033364�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX read-write locks. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-timedrwlock.h" #else # include <errno.h> # include <limits.h> # include <sys/time.h> # include <time.h> #endif #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H int pthread_rwlockattr_init (pthread_rwlockattr_t *attr) { *attr = 0; return 0; } int pthread_rwlockattr_destroy (_GL_UNUSED pthread_rwlockattr_t *attr) { return 0; } #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_rwlock_init (pthread_rwlock_t *lock, _GL_UNUSED const pthread_rwlockattr_t *attr) { glwthread_timedrwlock_init (lock); return 0; } int pthread_rwlock_rdlock (pthread_rwlock_t *lock) { return glwthread_timedrwlock_rdlock (lock); } int pthread_rwlock_wrlock (pthread_rwlock_t *lock) { return glwthread_timedrwlock_wrlock (lock); } int pthread_rwlock_tryrdlock (pthread_rwlock_t *lock) { return glwthread_timedrwlock_tryrdlock (lock); } int pthread_rwlock_trywrlock (pthread_rwlock_t *lock) { return glwthread_timedrwlock_trywrlock (lock); } int pthread_rwlock_timedrdlock (pthread_rwlock_t *lock, const struct timespec *abstime) { return glwthread_timedrwlock_timedrdlock (lock, abstime); } int pthread_rwlock_timedwrlock (pthread_rwlock_t *lock, const struct timespec *abstime) { return glwthread_timedrwlock_timedwrlock (lock, abstime); } int pthread_rwlock_unlock (pthread_rwlock_t *lock) { return glwthread_timedrwlock_unlock (lock); } int pthread_rwlock_destroy (pthread_rwlock_t *lock) { return glwthread_timedrwlock_destroy (lock); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ # if PTHREAD_RWLOCK_UNIMPLEMENTED int pthread_rwlock_init (pthread_rwlock_t *lock, _GL_UNUSED const pthread_rwlockattr_t *attr) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int pthread_rwlock_rdlock (pthread_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_wrlock (pthread_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_tryrdlock (pthread_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread would have to wait for a while. Return instead. */ pthread_mutex_unlock (&lock->lock); return EBUSY; } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_trywrlock (pthread_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ pthread_mutex_unlock (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_timedrdlock (pthread_rwlock_t *lock, const struct timespec *abstime) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_timedwait (&lock->waiting_readers, &lock->lock, abstime); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_timedwrlock (pthread_rwlock_t *lock, const struct timespec *abstime) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_timedwait (&lock->waiting_writers, &lock->lock, abstime); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_unlock (pthread_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int pthread_rwlock_destroy (pthread_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # elif PTHREAD_RWLOCK_LACKS_TIMEOUT int pthread_rwlock_timedrdlock (pthread_rwlock_t *lock, const struct timespec *abstime) { /* Poll the lock's state in regular intervals. Ugh. */ for (;;) { int err; struct timeval currtime; unsigned long remaining; struct timespec duration; err = pthread_rwlock_tryrdlock (lock); if (err != EBUSY) return err; gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec) remaining = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; remaining = seconds * 1000000000; if (remaining / 1000000000 != seconds) /* overflow? */ remaining = ULONG_MAX; else { long nanoseconds = abstime->tv_nsec - currtime.tv_usec * 1000; if (nanoseconds >= 0) { remaining += nanoseconds; if (remaining < nanoseconds) /* overflow? */ remaining = ULONG_MAX; } else { if (remaining >= - nanoseconds) remaining -= (- nanoseconds); else remaining = 0; } } } if (remaining == 0) return ETIMEDOUT; /* Sleep 1 ms. */ duration.tv_sec = 0; duration.tv_nsec = 1000000; if (duration.tv_nsec > remaining) duration.tv_nsec = remaining; nanosleep (&duration, NULL); } } int pthread_rwlock_timedwrlock (pthread_rwlock_t *lock, const struct timespec *abstime) { /* Poll the lock's state in regular intervals. Ugh. */ for (;;) { int err; struct timeval currtime; unsigned long remaining; struct timespec duration; err = pthread_rwlock_trywrlock (lock); if (err != EBUSY) return err; gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec) remaining = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; remaining = seconds * 1000000000; if (remaining / 1000000000 != seconds) /* overflow? */ remaining = ULONG_MAX; else { long nanoseconds = abstime->tv_nsec - currtime.tv_usec * 1000; if (nanoseconds >= 0) { remaining += nanoseconds; if (remaining < nanoseconds) /* overflow? */ remaining = ULONG_MAX; } else { if (remaining >= - nanoseconds) remaining -= (- nanoseconds); else remaining = 0; } } } if (remaining == 0) return ETIMEDOUT; /* Sleep 1 ms. */ duration.tv_sec = 0; duration.tv_nsec = 1000000; if (duration.tv_nsec > remaining) duration.tv_nsec = remaining; nanosleep (&duration, NULL); } } # endif #else /* Provide a dummy implementation for single-threaded applications. */ /* The pthread_rwlock_t is an 'int', representing the number of readers running, or -1 when a writer runs. */ int pthread_rwlock_init (pthread_rwlock_t *lock, _GL_UNUSED const pthread_rwlockattr_t *attr) { *lock = 0; return 0; } int pthread_rwlock_rdlock (pthread_rwlock_t *lock) { if (*lock < 0) return EDEADLK; (*lock)++; return 0; } int pthread_rwlock_wrlock (pthread_rwlock_t *lock) { if (*lock != 0) return EDEADLK; *lock = -1; return 0; } int pthread_rwlock_tryrdlock (pthread_rwlock_t *lock) { return pthread_rwlock_rdlock (lock); } int pthread_rwlock_trywrlock (pthread_rwlock_t *lock) { return pthread_rwlock_wrlock (lock); } int pthread_rwlock_timedrdlock (pthread_rwlock_t *lock, _GL_UNUSED const struct timespec *abstime) { return pthread_rwlock_rdlock (lock); } int pthread_rwlock_timedwrlock (pthread_rwlock_t *lock, _GL_UNUSED const struct timespec *abstime) { return pthread_rwlock_wrlock (lock); } int pthread_rwlock_unlock (pthread_rwlock_t *lock) { if (*lock == 0) return EPERM; if (*lock < 0) *lock = 0; else /* *lock > 0 */ (*lock)--; return 0; } int pthread_rwlock_destroy (pthread_rwlock_t *lock) { if (*lock) return EBUSY; return 0; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread-spin.c����������������������������������������������������������0000664�0000000�0000000�00000014327�14110572173�0017616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX spin locks. Copyright (C) 2010-2021 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, 2010, and Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #include <stdbool.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-spin.h" #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_spin_init (pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { glwthread_spin_init (lock); return 0; } int pthread_spin_lock (pthread_spinlock_t *lock) { return glwthread_spin_lock (lock); } int pthread_spin_trylock (pthread_spinlock_t *lock) { return glwthread_spin_trylock (lock); } int pthread_spin_unlock (pthread_spinlock_t *lock) { return glwthread_spin_unlock (lock); } int pthread_spin_destroy (pthread_spinlock_t *lock) { return glwthread_spin_destroy (lock); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ /* We don't use the C11 <stdatomic.h> (available in GCC >= 4.9) because it would require to link with -latomic. */ # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ || __clang_major > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ && !defined __ibmxl__ /* Use GCC built-ins (available in GCC >= 4.7 and clang >= 3.1) that operate on the first byte of the lock. Documentation: <https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/_005f_005fatomic-Builtins.html> */ # if 1 /* An implementation that verifies the unlocks. */ int pthread_spin_init (pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { __atomic_store_n ((unsigned int *) lock, 0, __ATOMIC_SEQ_CST); return 0; } int pthread_spin_lock (pthread_spinlock_t *lock) { /* Wait until *lock becomes 0, then replace it with 1. */ unsigned int zero; while (!(zero = 0, __atomic_compare_exchange_n ((unsigned int *) lock, &zero, 1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))) ; return 0; } int pthread_spin_trylock (pthread_spinlock_t *lock) { unsigned int zero; if (!(zero = 0, __atomic_compare_exchange_n ((unsigned int *) lock, &zero, 1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST))) return EBUSY; return 0; } int pthread_spin_unlock (pthread_spinlock_t *lock) { /* If *lock is 1, then replace it with 0. */ unsigned int one = 1; if (!__atomic_compare_exchange_n ((unsigned int *) lock, &one, 0, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) abort (); return 0; } # else /* An implementation that is a little bit more optimized, but does not verify the unlocks. */ int pthread_spin_init (pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { __atomic_clear (lock, __ATOMIC_SEQ_CST); return 0; } int pthread_spin_lock (pthread_spinlock_t *lock) { while (__atomic_test_and_set (lock, __ATOMIC_SEQ_CST)) ; return 0; } int pthread_spin_trylock (pthread_spinlock_t *lock) { if (__atomic_test_and_set (lock, __ATOMIC_SEQ_CST)) return EBUSY; return 0; } int pthread_spin_unlock (pthread_spinlock_t *lock) { __atomic_clear (lock, __ATOMIC_SEQ_CST); return 0; } # endif int pthread_spin_destroy (pthread_spinlock_t *lock) { return 0; } # elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) \ || __clang_major__ >= 3) \ && !defined __ibmxl__ /* Use GCC built-ins (available in GCC >= 4.1 and clang >= 3.0). Documentation: <https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html> */ int pthread_spin_init (pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { * (volatile unsigned int *) lock = 0; __sync_synchronize (); return 0; } int pthread_spin_lock (pthread_spinlock_t *lock) { /* Wait until *lock becomes 0, then replace it with 1. */ while (__sync_val_compare_and_swap ((unsigned int *) lock, 0, 1) != 0) ; return 0; } int pthread_spin_trylock (pthread_spinlock_t *lock) { if (__sync_val_compare_and_swap ((unsigned int *) lock, 0, 1) != 0) return EBUSY; return 0; } int pthread_spin_unlock (pthread_spinlock_t *lock) { /* If *lock is 1, then replace it with 0. */ if (__sync_val_compare_and_swap ((unsigned int *) lock, 1, 0) != 1) abort (); return 0; } int pthread_spin_destroy (pthread_spinlock_t *lock) { return 0; } # else /* Emulate a spin lock through a mutex. */ int pthread_spin_init (pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { return pthread_mutex_init (lock, NULL); } int pthread_spin_lock (pthread_spinlock_t *lock) { return pthread_mutex_lock (lock); } int pthread_spin_trylock (pthread_spinlock_t *lock) { return pthread_mutex_trylock (lock); } int pthread_spin_unlock (pthread_spinlock_t *lock) { return pthread_mutex_unlock (lock); } int pthread_spin_destroy (pthread_spinlock_t *lock) { return pthread_mutex_destroy (lock); } # endif #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_spin_init (_GL_UNUSED pthread_spinlock_t *lock, _GL_UNUSED int shared_across_processes) { return 0; } int pthread_spin_lock (_GL_UNUSED pthread_spinlock_t *lock) { return 0; } int pthread_spin_trylock (_GL_UNUSED pthread_spinlock_t *lock) { return 0; } int pthread_spin_unlock (_GL_UNUSED pthread_spinlock_t *lock) { return 0; } int pthread_spin_destroy (_GL_UNUSED pthread_spinlock_t *lock) { return 0; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread-thread.c��������������������������������������������������������0000664�0000000�0000000�00000007614�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling POSIX threads. Copyright (C) 2010-2021 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, 2010, and Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-thread.h" #else # include <stdlib.h> #endif typedef void * (* pthread_main_function_t) (void *); #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H int pthread_attr_init (pthread_attr_t *attr) { *attr = PTHREAD_CREATE_JOINABLE; return 0; } int pthread_attr_getdetachstate (const pthread_attr_t *attr, int *detachstatep) { *detachstatep = *attr & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED); return 0; } int pthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate) { if (!(detachstate == PTHREAD_CREATE_JOINABLE || detachstate == PTHREAD_CREATE_DETACHED)) return EINVAL; *attr ^= (*attr ^ detachstate) & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED); return 0; } int pthread_attr_destroy (_GL_UNUSED pthread_attr_t *attr) { return 0; } #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) { unsigned int glwthread_attr = (attr != NULL && (*attr & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED)) != PTHREAD_CREATE_JOINABLE ? GLWTHREAD_ATTR_DETACHED : 0); return glwthread_thread_create (threadp, glwthread_attr, mainfunc, arg); } pthread_t pthread_self (void) { return glwthread_thread_self (); } int pthread_equal (pthread_t thread1, pthread_t thread2) { return thread1 == thread2; } int pthread_detach (pthread_t thread) { return glwthread_thread_detach (thread); } int pthread_join (pthread_t thread, void **valuep) { return glwthread_thread_join (thread, valuep); } void pthread_exit (void *value) { glwthread_thread_exit (value); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ # if PTHREAD_CREATE_IS_INLINE int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) # undef pthread_create { return pthread_create (threadp, attr, mainfunc, arg); } int pthread_attr_init (pthread_attr_t *attr) # undef pthread_attr_init { return pthread_attr_init (attr); } # endif #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) { /* The maximum number of threads is reached. Do not create a thread. */ return EAGAIN; } pthread_t pthread_self (void) { return 42; } int pthread_equal (pthread_t thread1, pthread_t thread2) { return thread1 == thread2; } int pthread_detach (pthread_t thread) { /* There are no joinable threads. */ return EINVAL; } int pthread_join (pthread_t thread, void **valuep) { /* There are no joinable threads. */ return EINVAL; } void pthread_exit (void *value) { /* There is just one thread, so the process exits. */ exit (0); } #endif ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread-tss.c�����������������������������������������������������������0000664�0000000�0000000�00000004145�14110572173�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX thread-specific storage. Copyright (C) 2010-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-tls.h" #else # include <stdlib.h> #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_key_create (pthread_key_t *keyp, void (*destructor) (void *)) { return glwthread_tls_key_create (keyp, destructor); } int pthread_setspecific (pthread_key_t key, const void *value) { return glwthread_tls_set (key, (void *) value); } void * pthread_getspecific (pthread_key_t key) { return glwthread_tls_get (key); } int pthread_key_delete (pthread_key_t key) { return glwthread_tls_key_delete (key); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_key_create (pthread_key_t *keyp, void (*destructor) (void *)) { pthread_key_t key = (void **) malloc (sizeof (void *)); if (key == NULL) return ENOMEM; *key = NULL; *keyp = key; return 0; } int pthread_setspecific (pthread_key_t key, const void *value) { *key = (void *) value; return 0; } void * pthread_getspecific (pthread_key_t key) { return *key; } int pthread_key_delete (pthread_key_t key) { free (key); return 0; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread.in.h������������������������������������������������������������0000664�0000000�0000000�00000213021�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implement the most essential subset of POSIX 1003.1-2008 pthread.h. Copyright (C) 2009-2021 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, Glen Lenker, and Bruno Haible. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_PTHREAD_H /* Special invocation convention: On Android, we have a sequence of nested includes <pthread.h> -> <time.h> -> <sys/time.h> -> <sys/select.h> -> <signal.h> -> <pthread.h>. In this situation, PTHREAD_COND_INITIALIZER is not yet defined, therefore we should not attempt to define PTHREAD_MUTEX_NORMAL etc. */ #@INCLUDE_NEXT@ @NEXT_PTHREAD_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #if @HAVE_PTHREAD_H@ # define _GL_ALREADY_INCLUDING_PTHREAD_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_PTHREAD_H@ # undef _GL_ALREADY_INCLUDING_PTHREAD_H #endif #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #define _@GUARD_PREFIX@_PTHREAD_H_ #define __need_system_stdlib_h #include <stdlib.h> #undef __need_system_stdlib_h /* The pthreads-win32 <pthread.h> defines a couple of broken macros. */ #undef asctime_r #undef ctime_r #undef gmtime_r #undef localtime_r #undef rand_r #undef strtok_r #include <errno.h> #include <sched.h> #include <sys/types.h> #include <time.h> /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _Noreturn is copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* =========== Thread types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_THREAD@ # include "windows-thread.h" # if @HAVE_PTHREAD_T@ # define pthread_t rpl_pthread_t # define pthread_attr_t rpl_pthread_attr_t # endif # if !GNULIB_defined_pthread_thread_types typedef glwthread_thread_t pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # else # if @HAVE_PTHREAD_T@ # define pthread_t rpl_pthread_t # define pthread_attr_t rpl_pthread_attr_t # endif # if !GNULIB_defined_pthread_thread_types typedef int pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # endif # undef PTHREAD_CREATE_JOINABLE # undef PTHREAD_CREATE_DETACHED # define PTHREAD_CREATE_JOINABLE 0 # define PTHREAD_CREATE_DETACHED 1 #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_thread_types typedef int pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # endif # if !@HAVE_PTHREAD_CREATE_DETACHED@ # define PTHREAD_CREATE_JOINABLE 0 # define PTHREAD_CREATE_DETACHED 1 # endif #endif /* =========== Once-only control (initialization) types and macros ========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_ONCE@ # include "windows-once.h" # if @HAVE_PTHREAD_T@ # define pthread_once_t rpl_pthread_once_t # endif # if !GNULIB_defined_pthread_once_types typedef glwthread_once_t pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT GLWTHREAD_ONCE_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_once_t rpl_pthread_once_t # endif # if !GNULIB_defined_pthread_once_types typedef int pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT { 0 } # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_once_types typedef int pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT { 0 } # endif #endif /* =========== Mutex types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_MUTEX@ # include "windows-timedmutex.h" # include "windows-timedrecmutex.h" # if @HAVE_PTHREAD_T@ # define pthread_mutex_t rpl_pthread_mutex_t # define pthread_mutexattr_t rpl_pthread_mutexattr_t # endif # if !GNULIB_defined_pthread_mutex_types typedef struct { int type; union { glwthread_timedmutex_t u_timedmutex; glwthread_timedrecmutex_t u_timedrecmutex; } u; } pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 1, { GLWTHREAD_TIMEDMUTEX_INIT } } # else # if @HAVE_PTHREAD_T@ # define pthread_mutex_t rpl_pthread_mutex_t # define pthread_mutexattr_t rpl_pthread_mutexattr_t # endif # if !GNULIB_defined_pthread_mutex_types typedef int pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 0 } # endif # undef PTHREAD_MUTEX_DEFAULT # undef PTHREAD_MUTEX_NORMAL # undef PTHREAD_MUTEX_ERRORCHECK # undef PTHREAD_MUTEX_RECURSIVE # define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL # define PTHREAD_MUTEX_NORMAL 0 # define PTHREAD_MUTEX_ERRORCHECK 1 # define PTHREAD_MUTEX_RECURSIVE 2 # undef PTHREAD_MUTEX_STALLED # undef PTHREAD_MUTEX_ROBUST # define PTHREAD_MUTEX_STALLED 0 # define PTHREAD_MUTEX_ROBUST 1 #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_mutex_types typedef int pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 0 } # endif # if !@HAVE_PTHREAD_MUTEX_RECURSIVE@ # define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL # define PTHREAD_MUTEX_NORMAL 0 # define PTHREAD_MUTEX_ERRORCHECK 1 # define PTHREAD_MUTEX_RECURSIVE 2 # endif # if !@HAVE_PTHREAD_MUTEX_ROBUST@ # define PTHREAD_MUTEX_STALLED 0 # define PTHREAD_MUTEX_ROBUST 1 # endif #endif /* =========== Read-write lock types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_RWLOCK@ # include "windows-timedrwlock.h" # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef glwthread_timedrwlock_t pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER GLWTHREAD_TIMEDRWLOCK_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef int pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER { 0 } # endif #elif @GNULIB_PTHREAD_RWLOCK@ && @REPLACE_PTHREAD_RWLOCK_INIT@ /* i.e. PTHREAD_RWLOCK_UNIMPLEMENTED */ # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } #else # if @HAVE_PTHREAD_T@ # if !defined PTHREAD_RWLOCK_INITIALIZER && defined PTHREAD_RWLOCK_INITIALIZER_NP /* z/OS */ # define PTHREAD_RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER_NP # endif # else # if !GNULIB_defined_pthread_rwlock_types typedef int pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER { 0 } # endif #endif /* =========== Condition variable types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_COND@ # include "windows-cond.h" # if @HAVE_PTHREAD_T@ # define pthread_cond_t rpl_pthread_cond_t # define pthread_condattr_t rpl_pthread_condattr_t # endif # if !GNULIB_defined_pthread_cond_types typedef glwthread_cond_t pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER GLWTHREAD_COND_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_cond_t rpl_pthread_cond_t # define pthread_condattr_t rpl_pthread_condattr_t # endif # if !GNULIB_defined_pthread_cond_types typedef int pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER { 0 } # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_cond_types typedef int pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER { 0 } # endif #endif /* =========== Thread-specific storage types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_TSS@ # include "windows-tls.h" # if @HAVE_PTHREAD_T@ # define pthread_key_t rpl_pthread_key_t # endif # if !GNULIB_defined_pthread_tss_types typedef glwthread_tls_key_t pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS GLWTHREAD_DESTRUCTOR_ITERATIONS # else # if @HAVE_PTHREAD_T@ # define pthread_key_t rpl_pthread_key_t # endif # if !GNULIB_defined_pthread_tss_types typedef void ** pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS 0 # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_tss_types typedef void ** pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS 0 # endif #endif /* =========== Spinlock types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_SPIN@ # include "windows-spin.h" # if @HAVE_PTHREAD_T@ # define pthread_spinlock_t rpl_pthread_spinlock_t # endif # if !GNULIB_defined_pthread_spin_types typedef glwthread_spinlock_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # else # if @HAVE_PTHREAD_T@ # define pthread_spinlock_t rpl_pthread_spinlock_t # endif # if !GNULIB_defined_pthread_spin_types typedef pthread_mutex_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # endif # undef PTHREAD_PROCESS_PRIVATE # undef PTHREAD_PROCESS_SHARED # define PTHREAD_PROCESS_PRIVATE 0 # define PTHREAD_PROCESS_SHARED 1 #else # if !@HAVE_PTHREAD_SPINLOCK_T@ /* Approximate spinlocks with mutexes. */ # if !GNULIB_defined_pthread_spin_types typedef pthread_mutex_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # endif # if !@HAVE_PTHREAD_PROCESS_SHARED@ # define PTHREAD_PROCESS_PRIVATE 0 # define PTHREAD_PROCESS_SHARED 1 # endif #endif /* =========== Other types and macros =========== */ #if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_other_pthread_types typedef int pthread_barrier_t; typedef unsigned int pthread_barrierattr_t; # define GNULIB_defined_other_pthread_types 1 # endif #endif #if !defined PTHREAD_CANCELED # define PTHREAD_BARRIER_SERIAL_THREAD (-1) # define PTHREAD_CANCEL_DEFERRED 0 # define PTHREAD_CANCEL_ASYNCHRONOUS 1 # define PTHREAD_CANCEL_ENABLE 0 # define PTHREAD_CANCEL_DISABLE 1 # define PTHREAD_CANCELED ((void *) -1) # define PTHREAD_INHERIT_SCHED 0 # define PTHREAD_EXPLICIT_SCHED 1 # define PTHREAD_PRIO_NONE 0 # define PTHREAD_PRIO_INHERIT 1 # define PTHREAD_PRIO_PROTECT 2 # define PTHREAD_SCOPE_SYSTEM 0 # define PTHREAD_SCOPE_PROCESS 1 #endif /* =========== Thread functions =========== */ #if @GNULIB_PTHREAD_THREAD@ /* The 'restrict' qualifier on ARG is nonsense, but POSIX specifies it this way. Sigh. */ # if @REPLACE_PTHREAD_CREATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_create # define pthread_create rpl_pthread_create # endif _GL_FUNCDECL_RPL (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg)); # else # if !@HAVE_PTHREAD_CREATE@ _GL_FUNCDECL_SYS (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS_CAST (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_create); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_create # if HAVE_RAW_DECL_PTHREAD_CREATE _GL_WARN_ON_USE (pthread_create, "pthread_create is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_init # define pthread_attr_init rpl_pthread_attr_init # endif _GL_FUNCDECL_RPL (pthread_attr_init, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_init, int, (pthread_attr_t *attr)); # else # if !@HAVE_PTHREAD_ATTR_INIT@ _GL_FUNCDECL_SYS (pthread_attr_init, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_init, int, (pthread_attr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_init # if HAVE_RAW_DECL_PTHREAD_ATTR_INIT _GL_WARN_ON_USE (pthread_attr_init, "pthread_attr_init is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_getdetachstate # define pthread_attr_getdetachstate rpl_pthread_attr_getdetachstate # endif _GL_FUNCDECL_RPL (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep)); # else # if !@HAVE_PTHREAD_ATTR_GETDETACHSTATE@ _GL_FUNCDECL_SYS (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_getdetachstate); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_getdetachstate # if HAVE_RAW_DECL_PTHREAD_ATTR_GETDETACHSTATE _GL_WARN_ON_USE (pthread_attr_getdetachstate, "pthread_attr_getdetachstate is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_setdetachstate # define pthread_attr_setdetachstate rpl_pthread_attr_setdetachstate # endif _GL_FUNCDECL_RPL (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate)); # else # if !@HAVE_PTHREAD_ATTR_SETDETACHSTATE@ _GL_FUNCDECL_SYS (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_setdetachstate); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_setdetachstate # if HAVE_RAW_DECL_PTHREAD_ATTR_SETDETACHSTATE _GL_WARN_ON_USE (pthread_attr_setdetachstate, "pthread_attr_setdetachstate is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_destroy # define pthread_attr_destroy rpl_pthread_attr_destroy # endif _GL_FUNCDECL_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr)); # else # if !@HAVE_PTHREAD_ATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_destroy # if HAVE_RAW_DECL_PTHREAD_ATTR_DESTROY _GL_WARN_ON_USE (pthread_attr_destroy, "pthread_attr_destroy is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_SELF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_self # define pthread_self rpl_pthread_self # endif _GL_FUNCDECL_RPL (pthread_self, pthread_t, (void) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (pthread_self, pthread_t, (void)); # else # if !@HAVE_PTHREAD_SELF@ _GL_FUNCDECL_SYS (pthread_self, pthread_t, (void) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (pthread_self, pthread_t, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_self); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_self # if HAVE_RAW_DECL_PTHREAD_SELF _GL_WARN_ON_USE (pthread_self, "pthread_self is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_EQUAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_equal # define pthread_equal rpl_pthread_equal # endif _GL_FUNCDECL_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); _GL_CXXALIAS_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # else # if !@HAVE_PTHREAD_EQUAL@ _GL_FUNCDECL_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # endif _GL_CXXALIAS_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_equal); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_equal # if HAVE_RAW_DECL_PTHREAD_EQUAL _GL_WARN_ON_USE (pthread_equal, "pthread_equal is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_DETACH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_detach # define pthread_detach rpl_pthread_detach # endif _GL_FUNCDECL_RPL (pthread_detach, int, (pthread_t thread)); _GL_CXXALIAS_RPL (pthread_detach, int, (pthread_t thread)); # else # if !@HAVE_PTHREAD_DETACH@ _GL_FUNCDECL_SYS (pthread_detach, int, (pthread_t thread)); # endif _GL_CXXALIAS_SYS (pthread_detach, int, (pthread_t thread)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_detach); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_detach # if HAVE_RAW_DECL_PTHREAD_DETACH _GL_WARN_ON_USE (pthread_detach, "pthread_detach is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_JOIN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_join # define pthread_join rpl_pthread_join # endif _GL_FUNCDECL_RPL (pthread_join, int, (pthread_t thread, void **valuep)); _GL_CXXALIAS_RPL (pthread_join, int, (pthread_t thread, void **valuep)); # else # if !@HAVE_PTHREAD_JOIN@ _GL_FUNCDECL_SYS (pthread_join, int, (pthread_t thread, void **valuep)); # endif _GL_CXXALIAS_SYS (pthread_join, int, (pthread_t thread, void **valuep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_join); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_join # if HAVE_RAW_DECL_PTHREAD_JOIN _GL_WARN_ON_USE (pthread_join, "pthread_join is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_EXIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_exit # define pthread_exit rpl_pthread_exit # endif _GL_FUNCDECL_RPL (pthread_exit, _Noreturn void, (void *value)); _GL_CXXALIAS_RPL (pthread_exit, void, (void *value)); # else # if !@HAVE_PTHREAD_EXIT@ _GL_FUNCDECL_SYS (pthread_exit, _Noreturn void, (void *value)); # endif /* Need to cast because of AIX with xlclang++. */ _GL_CXXALIAS_SYS_CAST (pthread_exit, void, (void *value)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_exit); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_exit # if HAVE_RAW_DECL_PTHREAD_EXIT _GL_WARN_ON_USE (pthread_exit, "pthread_exit is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif /* =========== Once-only control (initialization) functions =========== */ #if @GNULIB_PTHREAD_ONCE@ # if @REPLACE_PTHREAD_ONCE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_once # define pthread_once rpl_pthread_once # endif _GL_FUNCDECL_RPL (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void)) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void))); # else # if !@HAVE_PTHREAD_ONCE@ _GL_FUNCDECL_SYS (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void)) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS_CAST (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void))); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_once); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_once # if HAVE_RAW_DECL_PTHREAD_ONCE _GL_WARN_ON_USE (pthread_once, "pthread_once is not portable - " "use gnulib module pthread-once for portability"); # endif #endif /* =========== Mutex functions =========== */ #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_init # define pthread_mutex_init rpl_pthread_mutex_init # endif _GL_FUNCDECL_RPL (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_MUTEX_INIT@ _GL_FUNCDECL_SYS (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_init # if HAVE_RAW_DECL_PTHREAD_MUTEX_INIT _GL_WARN_ON_USE (pthread_mutex_init, "pthread_mutex_init is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_init # define pthread_mutexattr_init rpl_pthread_mutexattr_init # endif _GL_FUNCDECL_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); # else # if !@HAVE_PTHREAD_MUTEXATTR_INIT@ _GL_FUNCDECL_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_init # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_INIT _GL_WARN_ON_USE (pthread_mutexattr_init, "pthread_mutexattr_init is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_gettype # define pthread_mutexattr_gettype rpl_pthread_mutexattr_gettype # endif _GL_FUNCDECL_RPL (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep)); # else # if !@HAVE_PTHREAD_MUTEXATTR_GETTYPE@ _GL_FUNCDECL_SYS (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on FreeBSD the first parameter is pthread_mutexattr_t *attr. */ _GL_CXXALIAS_SYS_CAST (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_gettype); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_gettype # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETTYPE _GL_WARN_ON_USE (pthread_mutexattr_gettype, "pthread_mutexattr_gettype is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_settype # define pthread_mutexattr_settype rpl_pthread_mutexattr_settype # endif _GL_FUNCDECL_RPL (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type)); # else # if !@HAVE_PTHREAD_MUTEXATTR_SETTYPE@ _GL_FUNCDECL_SYS (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_settype); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_settype # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETTYPE _GL_WARN_ON_USE (pthread_mutexattr_settype, "pthread_mutexattr_settype is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_getrobust # define pthread_mutexattr_getrobust rpl_pthread_mutexattr_getrobust # endif _GL_FUNCDECL_RPL (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp)); # else # if !@HAVE_PTHREAD_MUTEXATTR_GETROBUST@ _GL_FUNCDECL_SYS (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on FreeBSD the first parameter is pthread_mutexattr_t *attr. */ _GL_CXXALIAS_SYS_CAST (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_getrobust); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_getrobust # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETROBUST _GL_WARN_ON_USE (pthread_mutexattr_getrobust, "pthread_mutexattr_getrobust is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_setrobust # define pthread_mutexattr_setrobust rpl_pthread_mutexattr_setrobust # endif _GL_FUNCDECL_RPL (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust)); # else # if !@HAVE_PTHREAD_MUTEXATTR_SETROBUST@ _GL_FUNCDECL_SYS (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_setrobust); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_setrobust # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETROBUST _GL_WARN_ON_USE (pthread_mutexattr_setrobust, "pthread_mutexattr_setrobust is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_destroy # define pthread_mutexattr_destroy rpl_pthread_mutexattr_destroy # endif _GL_FUNCDECL_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); # else # if !@HAVE_PTHREAD_MUTEXATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_destroy # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_DESTROY _GL_WARN_ON_USE (pthread_mutexattr_destroy, "pthread_mutexattr_destroy is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_LOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_lock # define pthread_mutex_lock rpl_pthread_mutex_lock # endif _GL_FUNCDECL_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_LOCK@ _GL_FUNCDECL_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_lock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_lock # if HAVE_RAW_DECL_PTHREAD_MUTEX_LOCK _GL_WARN_ON_USE (pthread_mutex_lock, "pthread_mutex_lock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_TRYLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_trylock # define pthread_mutex_trylock rpl_pthread_mutex_trylock # endif _GL_FUNCDECL_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_TRYLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_trylock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_trylock # if HAVE_RAW_DECL_PTHREAD_MUTEX_TRYLOCK _GL_WARN_ON_USE (pthread_mutex_trylock, "pthread_mutex_trylock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ # if @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_timedlock # define pthread_mutex_timedlock rpl_pthread_mutex_timedlock # endif _GL_FUNCDECL_RPL (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_MUTEX_TIMEDLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_timedlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_timedlock # if HAVE_RAW_DECL_PTHREAD_MUTEX_TIMEDLOCK _GL_WARN_ON_USE (pthread_mutex_timedlock, "pthread_mutex_timedlock is not portable - " "use gnulib module pthread_mutex_timedlock for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_unlock # define pthread_mutex_unlock rpl_pthread_mutex_unlock # endif _GL_FUNCDECL_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_UNLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_unlock # if HAVE_RAW_DECL_PTHREAD_MUTEX_UNLOCK _GL_WARN_ON_USE (pthread_mutex_unlock, "pthread_mutex_unlock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_destroy # define pthread_mutex_destroy rpl_pthread_mutex_destroy # endif _GL_FUNCDECL_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_DESTROY@ _GL_FUNCDECL_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_destroy # if HAVE_RAW_DECL_PTHREAD_MUTEX_DESTROY _GL_WARN_ON_USE (pthread_mutex_destroy, "pthread_mutex_destroy is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif /* =========== Read-write lock functions =========== */ #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_init # define pthread_rwlock_init rpl_pthread_rwlock_init # endif _GL_FUNCDECL_RPL (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_RWLOCK_INIT@ _GL_FUNCDECL_SYS (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_init # if HAVE_RAW_DECL_PTHREAD_RWLOCK_INIT _GL_WARN_ON_USE (pthread_rwlock_init, "pthread_rwlock_init is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCKATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlockattr_init # define pthread_rwlockattr_init rpl_pthread_rwlockattr_init # endif _GL_FUNCDECL_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); # else # if !@HAVE_PTHREAD_RWLOCKATTR_INIT@ _GL_FUNCDECL_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlockattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlockattr_init # if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_INIT _GL_WARN_ON_USE (pthread_rwlockattr_init, "pthread_rwlockattr_init is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlockattr_destroy # define pthread_rwlockattr_destroy rpl_pthread_rwlockattr_destroy # endif _GL_FUNCDECL_RPL (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr)); # else # if !@HAVE_PTHREAD_RWLOCKATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlockattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlockattr_destroy # if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_DESTROY _GL_WARN_ON_USE (pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_RDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_rdlock # define pthread_rwlock_rdlock rpl_pthread_rwlock_rdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_RDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_rdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_rdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_RDLOCK _GL_WARN_ON_USE (pthread_rwlock_rdlock, "pthread_rwlock_rdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_WRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_wrlock # define pthread_rwlock_wrlock rpl_pthread_rwlock_wrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_WRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_wrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_wrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_WRLOCK _GL_WARN_ON_USE (pthread_rwlock_wrlock, "pthread_rwlock_wrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_tryrdlock # define pthread_rwlock_tryrdlock rpl_pthread_rwlock_tryrdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_tryrdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_tryrdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYRDLOCK _GL_WARN_ON_USE (pthread_rwlock_tryrdlock, "pthread_rwlock_tryrdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_trywrlock # define pthread_rwlock_trywrlock rpl_pthread_rwlock_trywrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_trywrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_trywrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYWRLOCK _GL_WARN_ON_USE (pthread_rwlock_trywrlock, "pthread_rwlock_trywrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_timedrdlock # define pthread_rwlock_timedrdlock rpl_pthread_rwlock_timedrdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_timedrdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_timedrdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDRDLOCK _GL_WARN_ON_USE (pthread_rwlock_timedrdlock, "pthread_rwlock_timedrdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_timedwrlock # define pthread_rwlock_timedwrlock rpl_pthread_rwlock_timedwrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_timedwrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_timedwrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK _GL_WARN_ON_USE (pthread_rwlock_timedwrlock, "pthread_rwlock_timedwrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_unlock # define pthread_rwlock_unlock rpl_pthread_rwlock_unlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_UNLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_unlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_UNLOCK _GL_WARN_ON_USE (pthread_rwlock_unlock, "pthread_rwlock_unlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_destroy # define pthread_rwlock_destroy rpl_pthread_rwlock_destroy # endif _GL_FUNCDECL_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_DESTROY@ _GL_FUNCDECL_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_destroy # if HAVE_RAW_DECL_PTHREAD_RWLOCK_DESTROY _GL_WARN_ON_USE (pthread_rwlock_destroy, "pthread_rwlock_destroy is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif /* =========== Condition variable functions =========== */ #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_init # define pthread_cond_init rpl_pthread_cond_init # endif _GL_FUNCDECL_RPL (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_COND_INIT@ _GL_FUNCDECL_SYS (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_init # if HAVE_RAW_DECL_PTHREAD_COND_INIT _GL_WARN_ON_USE (pthread_cond_init, "pthread_cond_init is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_CONDATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_condattr_init # define pthread_condattr_init rpl_pthread_condattr_init # endif _GL_FUNCDECL_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr)); # else # if !@HAVE_PTHREAD_CONDATTR_INIT@ _GL_FUNCDECL_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_condattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_condattr_init # if HAVE_RAW_DECL_PTHREAD_CONDATTR_INIT _GL_WARN_ON_USE (pthread_condattr_init, "pthread_condattr_init is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_CONDATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_condattr_destroy # define pthread_condattr_destroy rpl_pthread_condattr_destroy # endif _GL_FUNCDECL_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); # else # if !@HAVE_PTHREAD_CONDATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_condattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_condattr_destroy # if HAVE_RAW_DECL_PTHREAD_CONDATTR_DESTROY _GL_WARN_ON_USE (pthread_condattr_destroy, "pthread_condattr_destroy is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_WAIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_wait # define pthread_cond_wait rpl_pthread_cond_wait # endif _GL_FUNCDECL_RPL (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)); # else # if !@HAVE_PTHREAD_COND_WAIT@ _GL_FUNCDECL_SYS (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_wait); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_wait # if HAVE_RAW_DECL_PTHREAD_COND_WAIT _GL_WARN_ON_USE (pthread_cond_wait, "pthread_cond_wait is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_TIMEDWAIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_timedwait # define pthread_cond_timedwait rpl_pthread_cond_timedwait # endif _GL_FUNCDECL_RPL (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_COND_TIMEDWAIT@ _GL_FUNCDECL_SYS (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_timedwait); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_timedwait # if HAVE_RAW_DECL_PTHREAD_COND_TIMEDWAIT _GL_WARN_ON_USE (pthread_cond_timedwait, "pthread_cond_timedwait is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_SIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_signal # define pthread_cond_signal rpl_pthread_cond_signal # endif _GL_FUNCDECL_RPL (pthread_cond_signal, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_signal, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_SIGNAL@ _GL_FUNCDECL_SYS (pthread_cond_signal, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_signal, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_signal); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_signal # if HAVE_RAW_DECL_PTHREAD_COND_SIGNAL _GL_WARN_ON_USE (pthread_cond_signal, "pthread_cond_signal is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_BROADCAST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_broadcast # define pthread_cond_broadcast rpl_pthread_cond_broadcast # endif _GL_FUNCDECL_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_BROADCAST@ _GL_FUNCDECL_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_broadcast); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_broadcast # if HAVE_RAW_DECL_PTHREAD_COND_BROADCAST _GL_WARN_ON_USE (pthread_cond_broadcast, "pthread_cond_broadcast is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_destroy # define pthread_cond_destroy rpl_pthread_cond_destroy # endif _GL_FUNCDECL_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_DESTROY@ _GL_FUNCDECL_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_destroy # if HAVE_RAW_DECL_PTHREAD_COND_DESTROY _GL_WARN_ON_USE (pthread_cond_destroy, "pthread_cond_destroy is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif /* =========== Thread-specific storage functions =========== */ #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_KEY_CREATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_key_create # define pthread_key_create rpl_pthread_key_create # endif _GL_FUNCDECL_RPL (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *)) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *))); # else # if !@HAVE_PTHREAD_KEY_CREATE@ _GL_FUNCDECL_SYS (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *)) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS_CAST (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *))); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_key_create); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_key_create # if HAVE_RAW_DECL_PTHREAD_KEY_CREATE _GL_WARN_ON_USE (pthread_key_create, "pthread_key_create is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_SETSPECIFIC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_setspecific # define pthread_setspecific rpl_pthread_setspecific # endif _GL_FUNCDECL_RPL (pthread_setspecific, int, (pthread_key_t key, const void *value)); _GL_CXXALIAS_RPL (pthread_setspecific, int, (pthread_key_t key, const void *value)); # else # if !@HAVE_PTHREAD_SETSPECIFIC@ _GL_FUNCDECL_SYS (pthread_setspecific, int, (pthread_key_t key, const void *value)); # endif _GL_CXXALIAS_SYS (pthread_setspecific, int, (pthread_key_t key, const void *value)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_setspecific); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_setspecific # if HAVE_RAW_DECL_PTHREAD_SETSPECIFIC _GL_WARN_ON_USE (pthread_setspecific, "pthread_setspecific is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_GETSPECIFIC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_getspecific # define pthread_getspecific rpl_pthread_getspecific # endif _GL_FUNCDECL_RPL (pthread_getspecific, void *, (pthread_key_t key)); _GL_CXXALIAS_RPL (pthread_getspecific, void *, (pthread_key_t key)); # else # if !@HAVE_PTHREAD_GETSPECIFIC@ _GL_FUNCDECL_SYS (pthread_getspecific, void *, (pthread_key_t key)); # endif _GL_CXXALIAS_SYS (pthread_getspecific, void *, (pthread_key_t key)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_getspecific); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_getspecific # if HAVE_RAW_DECL_PTHREAD_GETSPECIFIC _GL_WARN_ON_USE (pthread_getspecific, "pthread_getspecific is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_KEY_DELETE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_key_delete # define pthread_key_delete rpl_pthread_key_delete # endif _GL_FUNCDECL_RPL (pthread_key_delete, int, (pthread_key_t key)); _GL_CXXALIAS_RPL (pthread_key_delete, int, (pthread_key_t key)); # else # if !@HAVE_PTHREAD_KEY_DELETE@ _GL_FUNCDECL_SYS (pthread_key_delete, int, (pthread_key_t key)); # endif _GL_CXXALIAS_SYS (pthread_key_delete, int, (pthread_key_t key)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_key_delete); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_key_delete # if HAVE_RAW_DECL_PTHREAD_KEY_DELETE _GL_WARN_ON_USE (pthread_key_delete, "pthread_key_delete is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif /* =========== Spinlock functions =========== */ #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_init # define pthread_spin_init rpl_pthread_spin_init # endif _GL_FUNCDECL_RPL (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes)); # else # if !@HAVE_PTHREAD_SPIN_INIT@ _GL_FUNCDECL_SYS (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_init # if HAVE_RAW_DECL_PTHREAD_SPIN_INIT _GL_WARN_ON_USE (pthread_spin_init, "pthread_spin_init is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_LOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_lock # define pthread_spin_lock rpl_pthread_spin_lock # endif _GL_FUNCDECL_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_LOCK@ _GL_FUNCDECL_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_lock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_lock # if HAVE_RAW_DECL_PTHREAD_SPIN_LOCK _GL_WARN_ON_USE (pthread_spin_lock, "pthread_spin_lock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_TRYLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_trylock # define pthread_spin_trylock rpl_pthread_spin_trylock # endif _GL_FUNCDECL_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_TRYLOCK@ _GL_FUNCDECL_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_trylock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_trylock # if HAVE_RAW_DECL_PTHREAD_SPIN_TRYLOCK _GL_WARN_ON_USE (pthread_spin_trylock, "pthread_spin_trylock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_unlock # define pthread_spin_unlock rpl_pthread_spin_unlock # endif _GL_FUNCDECL_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_UNLOCK@ _GL_FUNCDECL_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_unlock # if HAVE_RAW_DECL_PTHREAD_SPIN_UNLOCK _GL_WARN_ON_USE (pthread_spin_unlock, "pthread_spin_unlock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_destroy # define pthread_spin_destroy rpl_pthread_spin_destroy # endif _GL_FUNCDECL_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_DESTROY@ _GL_FUNCDECL_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_destroy # if HAVE_RAW_DECL_PTHREAD_SPIN_DESTROY _GL_WARN_ON_USE (pthread_spin_destroy, "pthread_spin_destroy is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread_mutex_timedlock.c�����������������������������������������������0000664�0000000�0000000�00000005331�14110572173�0022117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lock a mutex, abandoning after a certain time. Copyright (C) 2019-2021 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/>. */ #include <config.h> /* Specification. */ #include <pthread.h> #include <errno.h> #include <limits.h> #include <sys/time.h> #include <time.h> int pthread_mutex_timedlock (pthread_mutex_t *mutex, const struct timespec *abstime) { /* Poll the mutex's state in regular intervals. Ugh. */ /* POSIX says: "Under no circumstance shall the function fail with a timeout if the mutex can be locked immediately. The validity of the abstime parameter need not be checked if the mutex can be locked immediately." Therefore start the loop with a pthread_mutex_trylock call. */ for (;;) { int err; struct timeval currtime; unsigned long remaining; struct timespec duration; err = pthread_mutex_trylock (mutex); if (err != EBUSY) return err; gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec) remaining = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; remaining = seconds * 1000000000; if (remaining / 1000000000 != seconds) /* overflow? */ remaining = ULONG_MAX; else { long nanoseconds = abstime->tv_nsec - currtime.tv_usec * 1000; if (nanoseconds >= 0) { remaining += nanoseconds; if (remaining < nanoseconds) /* overflow? */ remaining = ULONG_MAX; } else { if (remaining >= - nanoseconds) remaining -= (- nanoseconds); else remaining = 0; } } } if (remaining == 0) return ETIMEDOUT; /* Sleep 1 ms. */ duration.tv_sec = 0; duration.tv_nsec = 1000000; if (duration.tv_nsec > remaining) duration.tv_nsec = remaining; nanosleep (&duration, NULL); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pthread_sigmask.c�������������������������������������������������������0000664�0000000�0000000�00000005361�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking for threads. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stddef.h> #if PTHREAD_SIGMASK_INEFFECTIVE # include <string.h> #endif #if PTHREAD_SIGMASK_UNBLOCK_BUG # include <unistd.h> #endif int pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) #undef pthread_sigmask { #if HAVE_PTHREAD_SIGMASK int ret; # if PTHREAD_SIGMASK_INEFFECTIVE sigset_t omask, omask_copy; sigset_t *old_mask_ptr = &omask; sigemptyset (&omask); /* Add a signal unlikely to be blocked, so that OMASK_COPY is unlikely to match the actual mask. */ sigaddset (&omask, SIGILL); memcpy (&omask_copy, &omask, sizeof omask); # else sigset_t *old_mask_ptr = old_mask; # endif ret = pthread_sigmask (how, new_mask, old_mask_ptr); # if PTHREAD_SIGMASK_INEFFECTIVE if (ret == 0) { /* Detect whether pthread_sigmask is currently ineffective. Don't cache the information: libpthread.so could be dynamically loaded after the program started and after pthread_sigmask was called for the first time. */ if (memcmp (&omask_copy, &omask, sizeof omask) == 0 && pthread_sigmask (1729, &omask_copy, NULL) == 0) { /* pthread_sigmask is currently ineffective. The program is not linked to -lpthread. So use sigprocmask instead. */ return (sigprocmask (how, new_mask, old_mask) < 0 ? errno : 0); } if (old_mask) memcpy (old_mask, &omask, sizeof omask); } # endif # if PTHREAD_SIGMASK_FAILS_WITH_ERRNO if (ret == -1) return errno; # endif # if PTHREAD_SIGMASK_UNBLOCK_BUG if (ret == 0 && new_mask != NULL && (how == SIG_UNBLOCK || how == SIG_SETMASK)) { /* Give the OS the opportunity to raise signals that were pending before the pthread_sigmask call and have now been unblocked. */ usleep (1); } # endif return ret; #else int ret = sigprocmask (how, new_mask, old_mask); return (ret < 0 ? errno : 0); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ptsname.c���������������������������������������������������������������0000664�0000000�0000000�00000002243�14110572173�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the slave side of a pseudo-terminal. Copyright (C) 1998, 2002, 2010-2021 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/>. */ #include <config.h> #include <stdlib.h> /* Static buffer for 'ptsname'. */ static char buffer[64]; /* Return the pathname of the pseudo terminal slave associated with the master FD is open on, or NULL on errors. The returned storage is good until the next call to this function. */ char * ptsname (int fd) { return ptsname_r (fd, buffer, sizeof (buffer)) != 0 ? NULL : buffer; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ptsname_r.c�������������������������������������������������������������0000664�0000000�0000000�00000012374�14110572173�0017210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the slave side of a pseudo-terminal. Copyright (C) 1998, 2002, 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #ifndef _PATH_TTY # define _PATH_TTY "/dev/tty" #endif #ifndef _PATH_DEV # define _PATH_DEV "/dev/" #endif /* Get the major, minor macros. */ #if MAJOR_IN_MKDEV # include <sys/mkdev.h> #endif #if MAJOR_IN_SYSMACROS # include <sys/sysmacros.h> #endif #ifdef __sun /* Get ioctl() and 'struct strioctl'. */ # include <stropts.h> /* Get ISPTM. */ # include <sys/stream.h> # include <sys/ptms.h> # include <stdio.h> #endif #if defined _AIX || defined __osf__ /* Get ioctl(), ISPTM. */ # include <sys/ioctl.h> # include <stdio.h> #endif #if defined __DragonFly__ /* Get fdevname_r(). */ # include <stdlib.h> #endif /* Store at most BUFLEN characters of the pathname of the slave pseudo terminal associated with the master FD is open on in BUF. Return 0 on success, otherwise an error number. */ int ptsname_r (int fd, char *buf, size_t buflen) #undef ptsname_r { #if HAVE_ESSENTIALLY_WORKING_PTSNAME_R int ret = ptsname_r (fd, buf, buflen); if (ret == 0) return 0; else return errno; #elif defined __DragonFly__ int saved_errno = errno; char tmpbuf[5 + 4 + 10 + 1]; int ret; int n; if (buf == NULL) { errno = EINVAL; return errno; } /* The result of fdevname_r is typically of the form ptm/N. */ ret = fdevname_r (fd, tmpbuf + 5, sizeof (tmpbuf) - 5); if (ret < 0 || strncmp (tmpbuf + 5, "ptm/", 4) != 0) { errno = ENOTTY; return errno; } /* Turn it into /dev/pts/N. */ memcpy (tmpbuf, "/dev/pts/", 5 + 4); n = strlen (tmpbuf); if (n >= buflen) { errno = ERANGE; return errno; } memcpy (buf, tmpbuf, n + 1); /* Don't do a final stat(), since the file name /dev/pts/N does not actually exist. */ errno = saved_errno; return 0; #else int saved_errno = errno; struct stat st; if (buf == NULL) { errno = EINVAL; return errno; } # if defined __sun /* Solaris */ if (fstat (fd, &st) < 0) return errno; if (!S_ISCHR (st.st_mode)) { errno = ENOTTY; return errno; } { /* Master ptys can be recognized through a STREAMS ioctl. See "STREAMS-based Pseudo-Terminal Subsystem" <https://docs.oracle.com/cd/E18752_01/html/816-4855/termsub15-44781.html> and "STREAMS ioctl commands" <https://docs.oracle.com/cd/E18752_01/html/816-5177/streamio-7i.html> */ struct strioctl ioctl_arg; ioctl_arg.ic_cmd = ISPTM; ioctl_arg.ic_timout = 0; ioctl_arg.ic_len = 0; ioctl_arg.ic_dp = NULL; if (ioctl (fd, I_STR, &ioctl_arg) < 0) { errno = ENOTTY; return errno; } } { char tmpbuf[9 + 10 + 1]; int n = sprintf (tmpbuf, "/dev/pts/%u", minor (st.st_rdev)); if (n >= buflen) { errno = ERANGE; return errno; } memcpy (buf, tmpbuf, n + 1); } # elif defined _AIX || defined __osf__ /* AIX, OSF/1 */ /* This implementation returns /dev/pts/N, like ptsname() does. Whereas the generic implementation below returns /dev/ttypN. Both are correct, but let's be consistent with ptsname(). */ if (fstat (fd, &st) < 0) return errno; if (!S_ISCHR (st.st_mode)) { errno = ENOTTY; return errno; } { int ret; int dev; char tmpbuf[9 + 10 + 1]; int n; # ifdef _AIX ret = ioctl (fd, ISPTM, &dev); # endif # ifdef __osf__ ret = ioctl (fd, ISPTM, NULL); dev = ret; # endif if (ret < 0) { errno = ENOTTY; return errno; } n = sprintf (tmpbuf, "/dev/pts/%u", minor (dev)); if (n >= buflen) { errno = ERANGE; return errno; } memcpy (buf, tmpbuf, n + 1); } # else if (!isatty (fd)) { # if ISATTY_FAILS_WITHOUT_SETTING_ERRNO && defined F_GETFL /* IRIX, Solaris */ /* Set errno. */ if (fcntl (fd, F_GETFL) != -1) errno = ENOTTY; # else /* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */ # endif return errno; } if (buflen < strlen (_PATH_TTY) + 3) { errno = ERANGE; return errno; } int err = ttyname_r (fd, buf, buflen); if (err != 0) { errno = err; return errno; } if (strncmp(buf, "/dev/pts/", strlen("/dev/pts/")) != 0) buf[sizeof (_PATH_DEV) - 1] = 't'; # endif if (stat (buf, &st) < 0 && errno != EOVERFLOW) return errno; errno = saved_errno; return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pty-private.h�����������������������������������������������������������0000664�0000000�0000000�00000002773�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Interface to the pt_chown program. Copyright (C) 1998-1999, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. 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 _PTY_PRIVATE_H #define _PTY_PRIVATE_H 1 /* The group slave pseudo terminals belong to. */ #define TTY_GROUP "tty" /* The file descriptor connected to the master pseudo terminal. */ #define PTY_FILENO 3 /* Path to the helper program that implements 'grantpt' in user space. */ #define _PATH_PT_CHOWN PKGLIBEXECDIR "/pt_chown" /* Test whether given TTY is really a Unix98 pseudo terminal. */ /* #define unix98_pseudo_p(Dev) ... */ /* Exit codes for the helper program. */ enum /* failure modes */ { FAIL_EBADF = 1, FAIL_EINVAL, FAIL_EACCES, FAIL_EXEC, FAIL_ENOMEM }; #endif /* pty-private.h */ �����gnulib-20210822~d383792/lib/pty.in.h����������������������������������������������������������������0000664�0000000�0000000�00000010646�14110572173�0016446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <pty.h>. Copyright (C) 2010-2021 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/>. */ #ifndef _@GUARD_PREFIX@_PTY_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_PTY_H@ # @INCLUDE_NEXT@ @NEXT_PTY_H@ #endif #ifndef _@GUARD_PREFIX@_PTY_H #define _@GUARD_PREFIX@_PTY_H /* Some platforms declare this in a different header than glibc. */ #if @HAVE_UTIL_H@ # include <util.h> #endif #if @HAVE_LIBUTIL_H@ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ # include <sys/types.h> # include <libutil.h> #endif /* Get 'struct termios' and 'struct winsize'. */ #include <termios.h> #if defined _AIX # include <sys/ioctl.h> #endif /* Mingw lacks 'struct termios' and 'struct winsize', but a forward declaration of an opaque type is sufficient to allow compilation of a stub openpty(). */ struct termios; struct winsize; /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_FORKPTY@ /* Create pseudo tty master slave pair and set terminal attributes according to TERMP and WINP. Fork a child process attached to the slave end. Return a handle for the master end in *AMASTER, and return the name of the slave end in NAME. */ # if @REPLACE_FORKPTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef forkpty # define forkpty rpl_forkpty # endif _GL_FUNCDECL_RPL (forkpty, int, (int *amaster, char *name, struct termios const *termp, struct winsize const *winp)); _GL_CXXALIAS_RPL (forkpty, int, (int *amaster, char *name, struct termios const *termp, struct winsize const *winp)); # else # if !@HAVE_FORKPTY@ _GL_FUNCDECL_SYS (forkpty, int, (int *amaster, char *name, struct termios const *termp, struct winsize const *winp)); # endif _GL_CXXALIAS_SYS (forkpty, int, (int *amaster, char *name, struct termios const *termp, struct winsize const *winp)); # endif _GL_CXXALIASWARN (forkpty); #elif defined GNULIB_POSIXCHECK # undef forkpty # if HAVE_RAW_DECL_FORKPTY _GL_WARN_ON_USE (forkpty, "forkpty is not declared consistently - " "use gnulib module forkpty for portability"); # endif #endif #if @GNULIB_OPENPTY@ /* Create pseudo tty master slave pair and set terminal attributes according to TERMP and WINP. Return handles for both ends in *AMASTER and *ASLAVE, and return the name of the slave end in NAME. */ # if @REPLACE_OPENPTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openpty # define openpty rpl_openpty # endif _GL_FUNCDECL_RPL (openpty, int, (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp)); _GL_CXXALIAS_RPL (openpty, int, (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp)); # else # if !@HAVE_OPENPTY@ _GL_FUNCDECL_SYS (openpty, int, (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp)); # endif _GL_CXXALIAS_SYS (openpty, int, (int *amaster, int *aslave, char *name, struct termios const *termp, struct winsize const *winp)); # endif _GL_CXXALIASWARN (openpty); #elif defined GNULIB_POSIXCHECK # undef openpty # if HAVE_RAW_DECL_OPENPTY _GL_WARN_ON_USE (openpty, "openpty is not declared consistently - " "use gnulib module openpty for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_PTY_H */ #endif /* _@GUARD_PREFIX@_PTY_H */ ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/putenv.c����������������������������������������������������������������0000664�0000000�0000000�00000012006�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <stddef.h> /* Include errno.h *after* sys/types.h to work around header problems on AIX 3.2.5. */ #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if _LIBC # if HAVE_GNU_LD # define environ __environ # else extern char **environ; # endif #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef SetEnvironmentVariable # define SetEnvironmentVariable SetEnvironmentVariableA #endif static int _unsetenv (const char *name) { size_t len; #if !HAVE_DECL__PUTENV char **ep; #endif if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); #if HAVE_DECL__PUTENV { int putenv_result; char *name_ = malloc (len + 2); memcpy (name_, name, len); name_[len] = '='; name_[len + 1] = 0; putenv_result = _putenv (name_); free (name_); return putenv_result; } #else LOCK; ep = environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; #endif } /* Put STRING, which is of the form "NAME=VALUE", in the environment. If STRING contains no '=', then remove STRING from the environment. */ int putenv (char *string) { const char *name_end = strchr (string, '='); char **ep; if (name_end == NULL) { /* Remove the variable from the environment. */ return _unsetenv (string); } #if HAVE_DECL__PUTENV /* Rely on _putenv to allocate the new environment. If other parts of the application use _putenv, the !HAVE_DECL__PUTENV code would fight over who owns the environ vector, causing a crash. */ if (name_end[1]) return _putenv (string); else { /* _putenv ("NAME=") unsets NAME, so invoke _putenv ("NAME= ") to allocate the environ vector and then replace the new entry with "NAME=". */ int putenv_result; char *name_x = malloc (name_end - string + sizeof "= "); if (!name_x) return -1; memcpy (name_x, string, name_end - string + 1); name_x[name_end - string + 1] = ' '; name_x[name_end - string + 2] = 0; putenv_result = _putenv (name_x); for (ep = environ; *ep; ep++) if (strcmp (*ep, name_x) == 0) { *ep = string; break; } # if defined _WIN32 && ! defined __CYGWIN__ if (putenv_result == 0) { /* _putenv propagated "NAME= " into the subprocess environment; fix that by calling SetEnvironmentVariable directly. */ name_x[name_end - string] = 0; putenv_result = SetEnvironmentVariable (name_x, "") ? 0 : -1; errno = ENOMEM; /* ENOMEM is the only way to fail. */ } # endif free (name_x); return putenv_result; } #else for (ep = environ; *ep; ep++) if (strncmp (*ep, string, name_end - string) == 0 && (*ep)[name_end - string] == '=') break; if (*ep) *ep = string; else { static char **last_environ = NULL; size_t size = ep - environ; char **new_environ = malloc ((size + 2) * sizeof *new_environ); if (! new_environ) return -1; new_environ[0] = string; memcpy (new_environ + 1, environ, (size + 1) * sizeof *new_environ); free (last_environ); last_environ = new_environ; environ = new_environ; } return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/pwrite.c����������������������������������������������������������������0000664�0000000�0000000�00000004051�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Write block to given position in file without changing file pointer. POSIX version. Copyright (C) 1997-1999, 2002, 2011-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #define __libc_lseek(f,o,w) lseek (f, o, w) #define __set_errno(Val) errno = (Val) #define __libc_write(f,b,n) write (f, b, n) /* Note: This implementation of pwrite is not multithread-safe. */ ssize_t pwrite (int fd, const void *buf, size_t nbyte, off_t offset) { /* Since we must not change the file pointer preserve the value so that we can restore it later. */ int save_errno; ssize_t result; off_t old_offset = __libc_lseek (fd, 0, SEEK_CUR); if (old_offset == (off_t) -1) return -1; /* Set to wanted position. */ if (__libc_lseek (fd, offset, SEEK_SET) == (off_t) -1) return -1; /* Write out the data. */ result = __libc_write (fd, buf, nbyte); /* Now we have to restore the position. If this fails we have to return this as an error. But if the writing also failed we return this error. */ save_errno = errno; if (__libc_lseek (fd, old_offset, SEEK_SET) == (off_t) -1) { if (result == -1) __set_errno (save_errno); return -1; } __set_errno (save_errno); return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/qcopy-acl.c�������������������������������������������������������������0000664�0000000�0000000�00000003544�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy access control list from one file to another. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" /* Copy access control lists from one file to another. If SOURCE_DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on SRC_NAME. Likewise for DEST_DESC and DST_NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. Return -2 and set errno for an error relating to the source file. Return -1 and set errno for an error relating to the destination file. */ int qcopy_acl (const char *src_name, int source_desc, const char *dst_name, int dest_desc, mode_t mode) { struct permission_context ctx; int ret; ret = get_permissions (src_name, source_desc, mode, &ctx); if (ret != 0) return -2; ret = set_permissions (&ctx, dst_name, dest_desc); free_permission_context (&ctx); return ret; } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/qset-acl.c��������������������������������������������������������������0000664�0000000�0000000�00000003226�14110572173�0016725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* qset-acl.c - set access control list equivalent to a mode Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ #include <config.h> #define ACL_INTERNAL_INLINE _GL_EXTERN_INLINE #include <string.h> #include "acl.h" #include "acl-internal.h" /* Set the access control lists of a file. If DESC is a valid file descriptor, use file descriptor operations where available, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. Return -1 and set errno upon failure. */ int qset_acl (char const *name, int desc, mode_t mode) { struct permission_context ctx; int ret; memset (&ctx, 0, sizeof ctx); ctx.mode = mode; ret = set_permissions (&ctx, name, desc); free_permission_context (&ctx); return ret; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/qsort.c�����������������������������������������������������������������0000664�0000000�0000000�00000020537�14110572173�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Douglas C. Schmidt (schmidt@ics.uci.edu). 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/>. */ /* If you consider tuning this algorithm, you should consult first: Engineering a sort function; Jon Bentley and M. Douglas McIlroy; Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */ #ifndef _LIBC # include <config.h> #endif #include <limits.h> #include <stdlib.h> #include <string.h> #ifndef _LIBC # define _quicksort qsort_r # define __compar_d_fn_t compar_d_fn_t typedef int (*compar_d_fn_t) (const void *, const void *, void *); #endif /* Byte-wise swap two items of size SIZE. */ #define SWAP(a, b, size) \ do \ { \ size_t __size = (size); \ char *__a = (a), *__b = (b); \ do \ { \ char __tmp = *__a; \ *__a++ = *__b; \ *__b++ = __tmp; \ } while (--__size > 0); \ } while (0) /* Discontinue quicksort algorithm when partition gets below this size. This particular magic number was chosen to work best on a Sun 4/260. */ #define MAX_THRESH 4 /* Stack node declarations used to store unfulfilled partition obligations. */ typedef struct { char *lo; char *hi; } stack_node; /* The next 4 #defines implement a very fast in-line stack abstraction. */ /* The stack needs log (total_elements) entries (we could even subtract log(MAX_THRESH)). Since total_elements has type size_t, we get as upper bound for log (total_elements): bits per byte (CHAR_BIT) * sizeof(size_t). */ #define STACK_SIZE (CHAR_BIT * sizeof(size_t)) #define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) #define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) #define STACK_NOT_EMPTY (stack < top) /* Order size using quicksort. This implementation incorporates four optimizations discussed in Sedgewick: 1. Non-recursive, using an explicit stack of pointer that store the next array partition to sort. To save time, this maximum amount of space required to store an array of SIZE_MAX is allocated on the stack. Assuming a 32-bit (64 bit) integer for size_t, this needs only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes). Pretty cheap, actually. 2. Chose the pivot element using a median-of-three decision tree. This reduces the probability of selecting a bad pivot value and eliminates certain extraneous comparisons. 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving insertion sort to order the MAX_THRESH items within each partition. This is a big win, since insertion sort is faster for small, mostly sorted array segments. 4. The larger of the two sub-partitions is always pushed onto the stack first, with the algorithm then concentrating on the smaller partition. This *guarantees* no more than log (total_elems) stack size is needed (actually O(1) in this case)! */ void _quicksort (void *const pbase, size_t total_elems, size_t size, __compar_d_fn_t cmp, void *arg) { char *base_ptr = (char *) pbase; const size_t max_thresh = MAX_THRESH * size; if (total_elems == 0) /* Avoid lossage with unsigned arithmetic below. */ return; if (total_elems > MAX_THRESH) { char *lo = base_ptr; char *hi = &lo[size * (total_elems - 1)]; stack_node stack[STACK_SIZE]; stack_node *top = stack; PUSH (NULL, NULL); while (STACK_NOT_EMPTY) { char *left_ptr; char *right_ptr; /* Select median value from among LO, MID, and HI. Rearrange LO and HI so the three values are sorted. This lowers the probability of picking a pathological pivot value and skips a comparison for both the LEFT_PTR and RIGHT_PTR in the while loops. */ char *mid = lo + size * ((hi - lo) / size >> 1); if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) SWAP (mid, lo, size); if ((*cmp) ((void *) hi, (void *) mid, arg) < 0) SWAP (mid, hi, size); else goto jump_over; if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) SWAP (mid, lo, size); jump_over:; left_ptr = lo + size; right_ptr = hi - size; /* Here's the famous ``collapse the walls'' section of quicksort. Gotta like those tight inner loops! They are the main reason that this algorithm runs much faster than others. */ do { while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0) left_ptr += size; while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0) right_ptr -= size; if (left_ptr < right_ptr) { SWAP (left_ptr, right_ptr, size); if (mid == left_ptr) mid = right_ptr; else if (mid == right_ptr) mid = left_ptr; left_ptr += size; right_ptr -= size; } else if (left_ptr == right_ptr) { left_ptr += size; right_ptr -= size; break; } } while (left_ptr <= right_ptr); /* Set up pointers for next iteration. First determine whether left and right partitions are below the threshold size. If so, ignore one or both. Otherwise, push the larger partition's bounds on the stack and continue sorting the smaller one. */ if ((size_t) (right_ptr - lo) <= max_thresh) { if ((size_t) (hi - left_ptr) <= max_thresh) /* Ignore both small partitions. */ POP (lo, hi); else /* Ignore small left partition. */ lo = left_ptr; } else if ((size_t) (hi - left_ptr) <= max_thresh) /* Ignore small right partition. */ hi = right_ptr; else if ((right_ptr - lo) > (hi - left_ptr)) { /* Push larger left partition indices. */ PUSH (lo, right_ptr); lo = left_ptr; } else { /* Push larger right partition indices. */ PUSH (left_ptr, hi); hi = right_ptr; } } } /* Once the BASE_PTR array is partially sorted by quicksort the rest is completely sorted using insertion sort, since this is efficient for partitions below MAX_THRESH size. BASE_PTR points to the beginning of the array to sort, and END_PTR points at the very last element in the array (*not* one beyond it!). */ #define min(x, y) ((x) < (y) ? (x) : (y)) { char *const end_ptr = &base_ptr[size * (total_elems - 1)]; char *tmp_ptr = base_ptr; char *thresh = min(end_ptr, base_ptr + max_thresh); char *run_ptr; /* Find smallest element in first threshold and place it at the array's beginning. This is the smallest array element, and the operation speeds up insertion sort's inner loop. */ for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size) if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) tmp_ptr = run_ptr; if (tmp_ptr != base_ptr) SWAP (tmp_ptr, base_ptr, size); /* Insertion sort, running from left-hand-side up to right-hand-side. */ run_ptr = base_ptr + size; while ((run_ptr += size) <= end_ptr) { tmp_ptr = run_ptr - size; while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) tmp_ptr -= size; tmp_ptr += size; if (tmp_ptr != run_ptr) { char *trav; trav = run_ptr + size; while (--trav >= run_ptr) { char c = *trav; char *hi, *lo; for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo) *hi = *lo; *hi = c; } } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/qsort_r.c���������������������������������������������������������������0000664�0000000�0000000�00000002664�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant sort function. Copyright 2014-2021 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. */ #include <config.h> #include <stdlib.h> /* This file is compiled only when the system has a qsort_r that needs to be replaced because it has the BSD signature rather than the GNU signature. */ struct thunk { int (*cmp) (void const *, void const *, void *); void *arg; }; static int thunk_cmp (void *thunk, void const *a, void const *b) { struct thunk *th = thunk; return th->cmp (a, b, th->arg); } void qsort_r (void *base, size_t nmemb, size_t size, int (*cmp) (void const *, void const *, void *), void *arg) { # undef qsort_r struct thunk thunk; thunk.cmp = cmp; thunk.arg = arg; qsort_r (base, nmemb, size, &thunk, thunk_cmp); } ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/quote.h�����������������������������������������������������������������0000664�0000000�0000000�00000003503�14110572173�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quote.h - prototypes for quote.c Copyright (C) 1998-2001, 2003, 2009-2021 Free Software Foundation, Inc. This 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 QUOTE_H_ # define QUOTE_H_ 1 # include <stddef.h> /* The quoting options used by quote_n and quote. Its type is incomplete, so it's useful only in expressions like '"e_quoting_options'. */ extern struct quoting_options quote_quoting_options; /* Return an unambiguous printable representation of ARG (of size ARGSIZE), allocated in slot N, suitable for diagnostics. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ char const *quote_n_mem (int n, char const *arg, size_t argsize); /* Return an unambiguous printable representation of ARG (of size ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ char const *quote_mem (char const *arg, size_t argsize); /* Return an unambiguous printable representation of ARG, allocated in slot N, suitable for diagnostics. */ char const *quote_n (int n, char const *arg); /* Return an unambiguous printable representation of ARG, suitable for diagnostics. */ char const *quote (char const *arg); #endif /* !QUOTE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/quotearg.c��������������������������������������������������������������0000664�0000000�0000000�00000104553�14110572173�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.c - quote arguments for output Copyright (C) 1998-2002, 2004-2021 Free Software Foundation, Inc. This 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 Paul Eggert <eggert@twinsun.com> */ /* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that the quoting_options_from_style function might be candidate for attribute 'pure' */ #if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" #endif #include <config.h> #include "quotearg.h" #include "quote.h" #include "attribute.h" #include "minmax.h" #include "xalloc.h" #include "c-strcaseeq.h" #include "localcharset.h" #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> #include "gettext.h" #define _(msgid) gettext (msgid) #define N_(msgid) msgid #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #define INT_BITS (sizeof (int) * CHAR_BIT) struct quoting_options { /* Basic quoting style. */ enum quoting_style style; /* Additional flags. Bitwise combination of enum quoting_flags. */ int flags; /* Quote the characters indicated by this bit vector even if the quoting style would not normally require them to be quoted. */ unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1]; /* The left quote for custom_quoting_style. */ char const *left_quote; /* The right quote for custom_quoting_style. */ char const *right_quote; }; /* Names of quoting styles. */ char const *const quoting_style_args[] = { "literal", "shell", "shell-always", "shell-escape", "shell-escape-always", "c", "c-maybe", "escape", "locale", "clocale", 0 }; /* Correspondences to quoting style names. */ enum quoting_style const quoting_style_vals[] = { literal_quoting_style, shell_quoting_style, shell_always_quoting_style, shell_escape_quoting_style, shell_escape_always_quoting_style, c_quoting_style, c_maybe_quoting_style, escape_quoting_style, locale_quoting_style, clocale_quoting_style }; /* The default quoting options. */ static struct quoting_options default_quoting_options; /* Allocate a new set of quoting options, with contents initially identical to O if O is not null, or to the default if O is null. It is the caller's responsibility to free the result. */ struct quoting_options * clone_quoting_options (struct quoting_options *o) { int e = errno; struct quoting_options *p = xmemdup (o ? o : &default_quoting_options, sizeof *o); errno = e; return p; } /* Get the value of O's quoting style. If O is null, use the default. */ enum quoting_style get_quoting_style (struct quoting_options const *o) { return (o ? o : &default_quoting_options)->style; } /* In O (or in the default if O is null), set the value of the quoting style to S. */ void set_quoting_style (struct quoting_options *o, enum quoting_style s) { (o ? o : &default_quoting_options)->style = s; } /* In O (or in the default if O is null), set the value of the quoting options for character C to I. Return the old value. Currently, the only values defined for I are 0 (the default) and 1 (which means to quote the character even if it would not otherwise be quoted). */ int set_char_quoting (struct quoting_options *o, char c, int i) { unsigned char uc = c; unsigned int *p = (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; int shift = uc % INT_BITS; int r = (*p >> shift) & 1; *p ^= ((i & 1) ^ r) << shift; return r; } /* In O (or in the default if O is null), set the value of the quoting options flag to I, which can be a bitwise combination of enum quoting_flags, or 0 for default behavior. Return the old value. */ int set_quoting_flags (struct quoting_options *o, int i) { int r; if (!o) o = &default_quoting_options; r = o->flags; o->flags = i; return r; } void set_custom_quoting (struct quoting_options *o, char const *left_quote, char const *right_quote) { if (!o) o = &default_quoting_options; o->style = custom_quoting_style; if (!left_quote || !right_quote) abort (); o->left_quote = left_quote; o->right_quote = right_quote; } /* Return quoting options for STYLE, with no extra quoting. */ static struct quoting_options /* NOT PURE!! */ quoting_options_from_style (enum quoting_style style) { struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL }; if (style == custom_quoting_style) abort (); o.style = style; return o; } /* MSGID approximates a quotation mark. Return its translation if it has one; otherwise, return either it or "\"", depending on S. S is either clocale_quoting_style or locale_quoting_style. */ static char const * gettext_quote (char const *msgid, enum quoting_style s) { char const *translation = _(msgid); char const *locale_code; if (translation != msgid) return translation; /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019. Here is a list of other locales that include U+2018 and U+2019: ISO-8859-7 0xA1 KOI8-T 0x91 CP869 0x8B CP874 0x91 CP932 0x81 0x65 CP936 0xA1 0xAE CP949 0xA1 0xAE CP950 0xA1 0xA5 CP1250 0x91 CP1251 0x91 CP1252 0x91 CP1253 0x91 CP1254 0x91 CP1255 0x91 CP1256 0x91 CP1257 0x91 EUC-JP 0xA1 0xC6 EUC-KR 0xA1 0xAE EUC-TW 0xA1 0xE4 BIG5 0xA1 0xA5 BIG5-HKSCS 0xA1 0xA5 EUC-CN 0xA1 0xAE GBK 0xA1 0xAE Georgian-PS 0x91 PT154 0x91 None of these is still in wide use; using iconv is overkill. */ locale_code = locale_charset (); if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0)) return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99"; if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0)) return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf"; return (s == clocale_quoting_style ? "\"" : "'"); } /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and QUOTE_THESE_TOO to control quoting. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG, ARGSIZE, O), except it breaks O into its component pieces and is not careful about errno. */ static size_t quotearg_buffer_restyled (char *buffer, size_t buffersize, char const *arg, size_t argsize, enum quoting_style quoting_style, int flags, unsigned int const *quote_these_too, char const *left_quote, char const *right_quote) { size_t i; size_t len = 0; size_t orig_buffersize = 0; char const *quote_string = 0; size_t quote_string_len = 0; bool backslash_escapes = false; bool unibyte_locale = MB_CUR_MAX == 1; bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; bool pending_shell_escape_end = false; bool encountered_single_quote = false; bool all_c_and_shell_quote_compat = true; #define STORE(c) \ do \ { \ if (len < buffersize) \ buffer[len] = (c); \ len++; \ } \ while (0) #define START_ESC() \ do \ { \ if (elide_outer_quotes) \ goto force_outer_quoting_style; \ escaping = true; \ if (quoting_style == shell_always_quoting_style \ && ! pending_shell_escape_end) \ { \ STORE ('\''); \ STORE ('$'); \ STORE ('\''); \ pending_shell_escape_end = true; \ } \ STORE ('\\'); \ } \ while (0) #define END_ESC() \ do \ { \ if (pending_shell_escape_end && ! escaping) \ { \ STORE ('\''); \ STORE ('\''); \ pending_shell_escape_end = false; \ } \ } \ while (0) process_input: switch (quoting_style) { case c_maybe_quoting_style: quoting_style = c_quoting_style; elide_outer_quotes = true; FALLTHROUGH; case c_quoting_style: if (!elide_outer_quotes) STORE ('"'); backslash_escapes = true; quote_string = "\""; quote_string_len = 1; break; case escape_quoting_style: backslash_escapes = true; elide_outer_quotes = false; break; case locale_quoting_style: case clocale_quoting_style: case custom_quoting_style: { if (quoting_style != custom_quoting_style) { /* TRANSLATORS: Get translations for open and closing quotation marks. The message catalog should translate "`" to a left quotation mark suitable for the locale, and similarly for "'". For example, a French Unicode local should translate these to U+00AB (LEFT-POINTING DOUBLE ANGLE QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK), respectively. If the catalog has no translation, we will try to use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the current locale is not Unicode, locale_quoting_style will quote 'like this', and clocale_quoting_style will quote "like this". You should always include translations for "`" and "'" even if U+2018 and U+2019 are appropriate for your locale. If you don't know what to put here, please see <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> and use glyphs suitable for your language. */ left_quote = gettext_quote (N_("`"), quoting_style); right_quote = gettext_quote (N_("'"), quoting_style); } if (!elide_outer_quotes) for (quote_string = left_quote; *quote_string; quote_string++) STORE (*quote_string); backslash_escapes = true; quote_string = right_quote; quote_string_len = strlen (quote_string); } break; case shell_escape_quoting_style: backslash_escapes = true; FALLTHROUGH; case shell_quoting_style: elide_outer_quotes = true; FALLTHROUGH; case shell_escape_always_quoting_style: if (!elide_outer_quotes) backslash_escapes = true; FALLTHROUGH; case shell_always_quoting_style: quoting_style = shell_always_quoting_style; if (!elide_outer_quotes) STORE ('\''); quote_string = "'"; quote_string_len = 1; break; case literal_quoting_style: elide_outer_quotes = false; break; default: abort (); } for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++) { unsigned char c; unsigned char esc; bool is_right_quote = false; bool escaping = false; bool c_and_shell_quote_compat = false; if (backslash_escapes && quoting_style != shell_always_quoting_style && quote_string_len && (i + quote_string_len <= (argsize == SIZE_MAX && 1 < quote_string_len /* Use strlen only if we must: when argsize is SIZE_MAX, and when the quote string is more than 1 byte long. If we do call strlen, save the result. */ ? (argsize = strlen (arg)) : argsize)) && memcmp (arg + i, quote_string, quote_string_len) == 0) { if (elide_outer_quotes) goto force_outer_quoting_style; is_right_quote = true; } c = arg[i]; switch (c) { case '\0': if (backslash_escapes) { START_ESC (); /* If quote_string were to begin with digits, we'd need to test for the end of the arg as well. However, it's hard to imagine any locale that would use digits in quotes, and set_custom_quoting is documented not to accept them. Use only a single \0 with shell-escape as currently digits are not printed within $'...' */ if (quoting_style != shell_always_quoting_style && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9') { STORE ('0'); STORE ('0'); } c = '0'; /* We don't have to worry that this last '0' will be backslash-escaped because, again, quote_string should not start with it and because quote_these_too is documented as not accepting it. */ } else if (flags & QA_ELIDE_NULL_BYTES) continue; break; case '?': switch (quoting_style) { case shell_always_quoting_style: if (elide_outer_quotes) goto force_outer_quoting_style; break; case c_quoting_style: if ((flags & QA_SPLIT_TRIGRAPHS) && i + 2 < argsize && arg[i + 1] == '?') switch (arg[i + 2]) { case '!': case '\'': case '(': case ')': case '-': case '/': case '<': case '=': case '>': /* Escape the second '?' in what would otherwise be a trigraph. */ if (elide_outer_quotes) goto force_outer_quoting_style; c = arg[i + 2]; i += 2; STORE ('?'); STORE ('"'); STORE ('"'); STORE ('?'); break; default: break; } break; default: break; } break; case '\a': esc = 'a'; goto c_escape; case '\b': esc = 'b'; goto c_escape; case '\f': esc = 'f'; goto c_escape; case '\n': esc = 'n'; goto c_and_shell_escape; case '\r': esc = 'r'; goto c_and_shell_escape; case '\t': esc = 't'; goto c_and_shell_escape; case '\v': esc = 'v'; goto c_escape; case '\\': esc = c; /* Never need to escape '\' in shell case. */ if (quoting_style == shell_always_quoting_style) { if (elide_outer_quotes) goto force_outer_quoting_style; goto store_c; } /* No need to escape the escape if we are trying to elide outer quotes and nothing else is problematic. */ if (backslash_escapes && elide_outer_quotes && quote_string_len) goto store_c; c_and_shell_escape: if (quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; /* fall through */ c_escape: if (backslash_escapes) { c = esc; goto store_escape; } break; case '{': case '}': /* sometimes special if isolated */ if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1)) break; FALLTHROUGH; case '#': case '~': if (i != 0) break; FALLTHROUGH; case ' ': c_and_shell_quote_compat = true; FALLTHROUGH; case '!': /* special in bash */ case '"': case '$': case '&': case '(': case ')': case '*': case ';': case '<': case '=': /* sometimes special in 0th or (with "set -k") later args */ case '>': case '[': case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */ case '`': case '|': /* A shell special character. In theory, '$' and '`' could be the first bytes of multibyte characters, which means we should check them with mbrtowc, but in practice this doesn't happen so it's not worth worrying about. */ if (quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; break; case '\'': encountered_single_quote = true; c_and_shell_quote_compat = true; if (quoting_style == shell_always_quoting_style) { if (elide_outer_quotes) goto force_outer_quoting_style; if (buffersize && ! orig_buffersize) { /* Just scan string to see if supports a more concise representation, rather than writing a longer string but returning the length of the more concise form. */ orig_buffersize = buffersize; buffersize = 0; } STORE ('\''); STORE ('\\'); STORE ('\''); pending_shell_escape_end = false; } break; 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 '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 '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': /* These characters don't cause problems, no matter what the quoting style is. They cannot start multibyte sequences. A digit or a special letter would cause trouble if it appeared at the beginning of quote_string because we'd then escape by prepending a backslash. However, it's hard to imagine any locale that would use digits or letters as quotes, and set_custom_quoting is documented not to accept them. Also, a digit or a special letter would cause trouble if it appeared in quote_these_too, but that's also documented as not accepting them. */ c_and_shell_quote_compat = true; break; default: /* If we have a multibyte sequence, copy it until we reach its end, find an error, or come back to the initial shift state. For C-like styles, if the sequence has unprintable characters, escape the whole sequence, since we can't easily escape single characters within it. */ { /* Length of multibyte sequence found so far. */ size_t m; bool printable; if (unibyte_locale) { m = 1; printable = isprint (c) != 0; } else { mbstate_t mbstate; memset (&mbstate, 0, sizeof mbstate); m = 0; printable = true; if (argsize == SIZE_MAX) argsize = strlen (arg); do { wchar_t w; size_t bytes = mbrtowc (&w, &arg[i + m], argsize - (i + m), &mbstate); if (bytes == 0) break; else if (bytes == (size_t) -1) { printable = false; break; } else if (bytes == (size_t) -2) { printable = false; while (i + m < argsize && arg[i + m]) m++; break; } else { /* Work around a bug with older shells that "see" a '\' that is really the 2nd byte of a multibyte character. In practice the problem is limited to ASCII chars >= '@' that are shell special chars. */ if ('[' == 0x5b && elide_outer_quotes && quoting_style == shell_always_quoting_style) { size_t j; for (j = 1; j < bytes; j++) switch (arg[i + m + j]) { case '[': case '\\': case '^': case '`': case '|': goto force_outer_quoting_style; default: break; } } if (! iswprint (w)) printable = false; m += bytes; } } while (! mbsinit (&mbstate)); } c_and_shell_quote_compat = printable; if (1 < m || (backslash_escapes && ! printable)) { /* Output a multibyte sequence, or an escaped unprintable unibyte character. */ size_t ilim = i + m; for (;;) { if (backslash_escapes && ! printable) { START_ESC (); STORE ('0' + (c >> 6)); STORE ('0' + ((c >> 3) & 7)); c = '0' + (c & 7); } else if (is_right_quote) { STORE ('\\'); is_right_quote = false; } if (ilim <= i + 1) break; END_ESC (); STORE (c); c = arg[++i]; } goto store_c; } } } if (! (((backslash_escapes && quoting_style != shell_always_quoting_style) || elide_outer_quotes) && quote_these_too && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1) && !is_right_quote) goto store_c; store_escape: START_ESC (); store_c: END_ESC (); STORE (c); if (! c_and_shell_quote_compat) all_c_and_shell_quote_compat = false; } if (len == 0 && quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; /* Single shell quotes (') are commonly enough used as an apostrophe, that we attempt to minimize the quoting in this case. Note itʼs better to use the apostrophe modifier "\u02BC" if possible, as that renders better and works with the word match regex \W+ etc. */ if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes && encountered_single_quote) { if (all_c_and_shell_quote_compat) return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize, c_quoting_style, flags, quote_these_too, left_quote, right_quote); else if (! buffersize && orig_buffersize) { /* Disable read-only scan, and reprocess to write quoted string. */ buffersize = orig_buffersize; len = 0; goto process_input; } } if (quote_string && !elide_outer_quotes) for (; *quote_string; quote_string++) STORE (*quote_string); if (len < buffersize) buffer[len] = '\0'; return len; force_outer_quoting_style: /* Don't reuse quote_these_too, since the addition of outer quotes sufficiently quotes the specified characters. */ if (quoting_style == shell_always_quoting_style && backslash_escapes) quoting_style = shell_escape_always_quoting_style; return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, quoting_style, flags & ~QA_ELIDE_OUTER_QUOTES, NULL, left_quote, right_quote); } /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using O to control quoting. If O is null, use the default. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ size_t quotearg_buffer (char *buffer, size_t buffersize, char const *arg, size_t argsize, struct quoting_options const *o) { struct quoting_options const *p = o ? o : &default_quoting_options; int e = errno; size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize, p->style, p->flags, p->quote_these_too, p->left_quote, p->right_quote); errno = e; return r; } char * quotearg_alloc (char const *arg, size_t argsize, struct quoting_options const *o) { return quotearg_alloc_mem (arg, argsize, NULL, o); } /* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly allocated storage containing the quoted string, and store the resulting size into *SIZE, if non-NULL. The result can contain embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not NULL, and set_quoting_flags has not set the null byte elision flag. */ char * quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, struct quoting_options const *o) { struct quoting_options const *p = o ? o : &default_quoting_options; int e = errno; /* Elide embedded null bytes if we can't return a size. */ int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES); size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style, flags, p->quote_these_too, p->left_quote, p->right_quote) + 1; char *buf = xcharalloc (bufsize); quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags, p->quote_these_too, p->left_quote, p->right_quote); errno = e; if (size) *size = bufsize - 1; return buf; } /* A storage slot with size and pointer to a value. */ struct slotvec { size_t size; char *val; }; /* Preallocate a slot 0 buffer, so that the caller can always quote one small component of a "memory exhausted" message in slot 0. */ static char slot0[256]; static int nslots = 1; static struct slotvec slotvec0 = {sizeof slot0, slot0}; static struct slotvec *slotvec = &slotvec0; void quotearg_free (void) { struct slotvec *sv = slotvec; int i; for (i = 1; i < nslots; i++) free (sv[i].val); if (sv[0].val != slot0) { free (sv[0].val); slotvec0.size = sizeof slot0; slotvec0.val = slot0; } if (sv != &slotvec0) { free (sv); slotvec = &slotvec0; } nslots = 1; } /* Use storage slot N to return a quoted version of argument ARG. ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a null-terminated string. OPTIONS specifies the quoting options. The returned value points to static storage that can be reused by the next call to this function with the same value of N. N must be nonnegative; it is typically small, and must be less than MIN (INT_MAX, IDX_MAX). The type of N is signed to allow for future extensions (using negative values). */ static char * quotearg_n_options (int n, char const *arg, size_t argsize, struct quoting_options const *options) { int e = errno; struct slotvec *sv = slotvec; int nslots_max = MIN (INT_MAX, IDX_MAX); if (! (0 <= n && n < nslots_max)) abort (); if (nslots <= n) { bool preallocated = (sv == &slotvec0); idx_t new_nslots = nslots; slotvec = sv = xpalloc (preallocated ? NULL : sv, &new_nslots, n - nslots + 1, nslots_max, sizeof *sv); if (preallocated) *sv = slotvec0; memset (sv + nslots, 0, (new_nslots - nslots) * sizeof *sv); nslots = new_nslots; } { size_t size = sv[n].size; char *val = sv[n].val; /* Elide embedded null bytes since we don't return a size. */ int flags = options->flags | QA_ELIDE_NULL_BYTES; size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize, options->style, flags, options->quote_these_too, options->left_quote, options->right_quote); if (size <= qsize) { sv[n].size = size = qsize + 1; if (val != slot0) free (val); sv[n].val = val = xcharalloc (size); quotearg_buffer_restyled (val, size, arg, argsize, options->style, flags, options->quote_these_too, options->left_quote, options->right_quote); } errno = e; return val; } } char * quotearg_n (int n, char const *arg) { return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options); } char * quotearg_n_mem (int n, char const *arg, size_t argsize) { return quotearg_n_options (n, arg, argsize, &default_quoting_options); } char * quotearg (char const *arg) { return quotearg_n (0, arg); } char * quotearg_mem (char const *arg, size_t argsize) { return quotearg_n_mem (0, arg, argsize); } char * quotearg_n_style (int n, enum quoting_style s, char const *arg) { struct quoting_options const o = quoting_options_from_style (s); return quotearg_n_options (n, arg, SIZE_MAX, &o); } char * quotearg_n_style_mem (int n, enum quoting_style s, char const *arg, size_t argsize) { struct quoting_options const o = quoting_options_from_style (s); return quotearg_n_options (n, arg, argsize, &o); } char * quotearg_style (enum quoting_style s, char const *arg) { return quotearg_n_style (0, s, arg); } char * quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize) { return quotearg_n_style_mem (0, s, arg, argsize); } char * quotearg_char_mem (char const *arg, size_t argsize, char ch) { struct quoting_options options; options = default_quoting_options; set_char_quoting (&options, ch, 1); return quotearg_n_options (0, arg, argsize, &options); } char * quotearg_char (char const *arg, char ch) { return quotearg_char_mem (arg, SIZE_MAX, ch); } char * quotearg_colon (char const *arg) { return quotearg_char (arg, ':'); } char * quotearg_colon_mem (char const *arg, size_t argsize) { return quotearg_char_mem (arg, argsize, ':'); } char * quotearg_n_style_colon (int n, enum quoting_style s, char const *arg) { struct quoting_options options; options = quoting_options_from_style (s); set_char_quoting (&options, ':', 1); return quotearg_n_options (n, arg, SIZE_MAX, &options); } char * quotearg_n_custom (int n, char const *left_quote, char const *right_quote, char const *arg) { return quotearg_n_custom_mem (n, left_quote, right_quote, arg, SIZE_MAX); } char * quotearg_n_custom_mem (int n, char const *left_quote, char const *right_quote, char const *arg, size_t argsize) { struct quoting_options o = default_quoting_options; set_custom_quoting (&o, left_quote, right_quote); return quotearg_n_options (n, arg, argsize, &o); } char * quotearg_custom (char const *left_quote, char const *right_quote, char const *arg) { return quotearg_n_custom (0, left_quote, right_quote, arg); } char * quotearg_custom_mem (char const *left_quote, char const *right_quote, char const *arg, size_t argsize) { return quotearg_n_custom_mem (0, left_quote, right_quote, arg, argsize); } /* The quoting option used by the functions of quote.h. */ struct quoting_options quote_quoting_options = { locale_quoting_style, 0, { 0 }, NULL, NULL }; char const * quote_n_mem (int n, char const *arg, size_t argsize) { return quotearg_n_options (n, arg, argsize, "e_quoting_options); } char const * quote_mem (char const *arg, size_t argsize) { return quote_n_mem (0, arg, argsize); } char const * quote_n (int n, char const *arg) { return quote_n_mem (n, arg, SIZE_MAX); } char const * quote (char const *arg) { return quote_n (0, arg); } /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/quotearg.h��������������������������������������������������������������0000664�0000000�0000000�00000042433�14110572173�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.h - quote arguments for output Copyright (C) 1998-2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. This 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 Paul Eggert <eggert@twinsun.com> */ #ifndef QUOTEARG_H_ # define QUOTEARG_H_ 1 # include <stdlib.h> /* Basic quoting styles. For each style, an example is given on the input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that style and the default flags and quoted characters. Note that the examples are shown here as valid C strings rather than what displays on a terminal (with "??/" as a trigraph for "\\"). */ enum quoting_style { /* Output names as-is (ls --quoting-style=literal). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. quotearg_buffer: "simple", "\0 \t\n'\"\033??/\\", "a:b" quotearg: "simple", " \t\n'\"\033??/\\", "a:b" quotearg_colon: "simple", " \t\n'\"\033??/\\", "a:b" */ literal_quoting_style, /* Quote names for the shell if they contain shell metacharacters or would cause ambiguous output (ls --quoting-style=shell). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. quotearg_buffer: "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b" quotearg: "simple", "' \t\n'\\''\"\033??/\\'", "a:b" quotearg_colon: "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'" */ shell_quoting_style, /* Quote names for the shell, even if they would normally not require quoting (ls --quoting-style=shell-always). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. quotearg_buffer: "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'" quotearg: "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" quotearg_colon: "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" */ shell_always_quoting_style, /* Quote names for the shell if they contain shell metacharacters or other problematic characters (ls --quoting-style=shell-escape). Non printable characters are quoted using the $'...' syntax, which originated in ksh93 and is widely supported by most shells, and proposed for inclusion in POSIX. quotearg_buffer: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" quotearg: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" quotearg_colon: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "'a:b'" */ shell_escape_quoting_style, /* Quote names for the shell even if they would normally not require quoting (ls --quoting-style=shell-escape). Non printable characters are quoted using the $'...' syntax, which originated in ksh93 and is widely supported by most shells, and proposed for inclusion in POSIX. Behaves like shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. quotearg_buffer: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" quotearg: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" quotearg_colon: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "'a:b'" */ shell_escape_always_quoting_style, /* Quote names as for a C language string (ls --quoting-style=c). Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. Split into consecutive strings if QA_SPLIT_TRIGRAPHS. quotearg_buffer: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg_colon: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" */ c_quoting_style, /* Like c_quoting_style except omit the surrounding double-quote characters if no quoted characters are encountered. quotearg_buffer: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" quotearg: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" quotearg_colon: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" */ c_maybe_quoting_style, /* Like c_quoting_style except always omit the surrounding double-quote characters and ignore QA_SPLIT_TRIGRAPHS (ls --quoting-style=escape). quotearg_buffer: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" quotearg: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" quotearg_colon: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b" */ escape_quoting_style, /* Like clocale_quoting_style, but use single quotes in the default C locale or if the program does not use gettext (ls --quoting-style=locale). For UTF-8 locales, quote characters will use Unicode. LC_MESSAGES=C quotearg_buffer: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" quotearg: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" quotearg_colon: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'" LC_MESSAGES=pt_PT.utf8 quotearg_buffer: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg_colon: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" */ locale_quoting_style, /* Like c_quoting_style except use quotation marks appropriate for the locale and ignore QA_SPLIT_TRIGRAPHS (ls --quoting-style=clocale). LC_MESSAGES=C quotearg_buffer: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg_colon: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" LC_MESSAGES=pt_PT.utf8 quotearg_buffer: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg_colon: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" */ clocale_quoting_style, /* Like clocale_quoting_style except use the custom quotation marks set by set_custom_quoting. If custom quotation marks are not set, the behavior is undefined. left_quote = right_quote = "'" quotearg_buffer: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" quotearg: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" quotearg_colon: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'" left_quote = "(" and right_quote = ")" quotearg_buffer: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" quotearg: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" quotearg_colon: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)" left_quote = ":" and right_quote = " " quotearg_buffer: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " quotearg: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " quotearg_colon: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b " left_quote = "\"'" and right_quote = "'\"" Notice that this is treated as a single level of quotes or two levels where the outer quote need not be escaped within the inner quotes. For two levels where the outer quote must be escaped within the inner quotes, you must use separate quotearg invocations. quotearg_buffer: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" quotearg: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" quotearg_colon: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\"" */ custom_quoting_style }; /* Flags for use in set_quoting_flags. */ enum quoting_flags { /* Always elide null bytes from styles that do not quote them, even when the length of the result is available to the caller. */ QA_ELIDE_NULL_BYTES = 0x01, /* Omit the surrounding quote characters if no escaped characters are encountered. Note that if no other character needs escaping, then neither does the escape character. */ QA_ELIDE_OUTER_QUOTES = 0x02, /* In the c_quoting_style and c_maybe_quoting_style, split ANSI trigraph sequences into concatenated strings (for example, "?""?/" rather than "??/", which could be confused with "\\"). */ QA_SPLIT_TRIGRAPHS = 0x04 }; /* For now, --quoting-style=literal is the default, but this may change. */ # ifndef DEFAULT_QUOTING_STYLE # define DEFAULT_QUOTING_STYLE literal_quoting_style # endif /* Names of quoting styles and their corresponding values. */ extern char const *const quoting_style_args[]; extern enum quoting_style const quoting_style_vals[]; struct quoting_options; /* The functions listed below set and use a hidden variable that contains the default quoting style options. */ /* Allocate a new set of quoting options, with contents initially identical to O if O is not null, or to the default if O is null. It is the caller's responsibility to free the result. */ struct quoting_options *clone_quoting_options (struct quoting_options *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Get the value of O's quoting style. If O is null, use the default. */ enum quoting_style get_quoting_style (struct quoting_options const *o); /* In O (or in the default if O is null), set the value of the quoting style to S. */ void set_quoting_style (struct quoting_options *o, enum quoting_style s); /* In O (or in the default if O is null), set the value of the quoting options for character C to I. Return the old value. Currently, the only values defined for I are 0 (the default) and 1 (which means to quote the character even if it would not otherwise be quoted). C must never be a digit or a letter that has special meaning after a backslash (for example, "\t" for tab). */ int set_char_quoting (struct quoting_options *o, char c, int i); /* In O (or in the default if O is null), set the value of the quoting options flag to I, which can be a bitwise combination of enum quoting_flags, or 0 for default behavior. Return the old value. */ int set_quoting_flags (struct quoting_options *o, int i); /* In O (or in the default if O is null), set the value of the quoting style to custom_quoting_style, set the left quote to LEFT_QUOTE, and set the right quote to RIGHT_QUOTE. Each of LEFT_QUOTE and RIGHT_QUOTE must be null-terminated and can be the empty string. Because backslashes are used for escaping, it does not make sense for RIGHT_QUOTE to contain a backslash. RIGHT_QUOTE must not begin with a digit or a letter that has special meaning after a backslash (for example, "\t" for tab). */ void set_custom_quoting (struct quoting_options *o, char const *left_quote, char const *right_quote); /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using O to control quoting. If O is null, use the default. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is -1, use the string length of the argument for ARGSIZE. On output, BUFFER might contain embedded null bytes if ARGSIZE was not -1, the style of O does not use backslash escapes, and the flags of O do not request elision of null bytes.*/ size_t quotearg_buffer (char *restrict buffer, size_t buffersize, char const *arg, size_t argsize, struct quoting_options const *o); /* Like quotearg_buffer, except return the result in a newly allocated buffer. It is the caller's responsibility to free the result. The result will not contain embedded null bytes. */ char *quotearg_alloc (char const *arg, size_t argsize, struct quoting_options const *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Like quotearg_alloc, except that the length of the result, excluding the terminating null byte, is stored into SIZE if it is non-NULL. The result might contain embedded null bytes if ARGSIZE was not -1, SIZE was not NULL, the style of O does not use backslash escapes, and the flags of O do not request elision of null bytes.*/ char *quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, struct quoting_options const *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Use storage slot N to return a quoted version of the string ARG. Use the default quoting options. The returned value points to static storage that can be reused by the next call to this function with the same value of N. N must be nonnegative. The output of all functions in the quotearg_n family are guaranteed to not contain embedded null bytes.*/ char *quotearg_n (int n, char const *arg); /* Equivalent to quotearg_n (0, ARG). */ char *quotearg (char const *arg); /* Use storage slot N to return a quoted version of the argument ARG of size ARGSIZE. This is like quotearg_n (N, ARG), except it can quote null bytes. */ char *quotearg_n_mem (int n, char const *arg, size_t argsize); /* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */ char *quotearg_mem (char const *arg, size_t argsize); /* Use style S and storage slot N to return a quoted version of the string ARG. This is like quotearg_n (N, ARG), except that it uses S with no other options to specify the quoting method. */ char *quotearg_n_style (int n, enum quoting_style s, char const *arg); /* Use style S and storage slot N to return a quoted version of the argument ARG of size ARGSIZE. This is like quotearg_n_style (N, S, ARG), except it can quote null bytes. */ char *quotearg_n_style_mem (int n, enum quoting_style s, char const *arg, size_t argsize); /* Equivalent to quotearg_n_style (0, S, ARG). */ char *quotearg_style (enum quoting_style s, char const *arg); /* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */ char *quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize); /* Like quotearg (ARG), except also quote any instances of CH. See set_char_quoting for a description of acceptable CH values. */ char *quotearg_char (char const *arg, char ch); /* Like quotearg_char (ARG, CH), except it can quote null bytes. */ char *quotearg_char_mem (char const *arg, size_t argsize, char ch); /* Equivalent to quotearg_char (ARG, ':'). */ char *quotearg_colon (char const *arg); /* Like quotearg_colon (ARG), except it can quote null bytes. */ char *quotearg_colon_mem (char const *arg, size_t argsize); /* Like quotearg_n_style, except with ':' quoting enabled. */ char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg); /* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE. See set_custom_quoting for a description of acceptable LEFT_QUOTE and RIGHT_QUOTE values. */ char *quotearg_n_custom (int n, char const *left_quote, char const *right_quote, char const *arg); /* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it can quote null bytes. */ char *quotearg_n_custom_mem (int n, char const *left_quote, char const *right_quote, char const *arg, size_t argsize); /* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */ char *quotearg_custom (char const *left_quote, char const *right_quote, char const *arg); /* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG, ARGSIZE). */ char *quotearg_custom_mem (char const *left_quote, char const *right_quote, char const *arg, size_t argsize); /* Free any dynamically allocated memory. */ void quotearg_free (void); #endif /* !QUOTEARG_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/raise.c�����������������������������������������������������������������0000664�0000000�0000000�00000003435�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a non-threads replacement for the POSIX raise function. Copyright (C) 2002-2003, 2005-2006, 2009-2021 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 Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <signal.h> #if HAVE_RAISE /* Native Windows platform. */ # include <errno.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Forward declaration. */ static int raise_nothrow (int sig); # else # define raise_nothrow raise # endif #else /* An old Unix platform. */ # include <unistd.h> #endif int raise (int sig) #undef raise { #if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE if (sig == SIGPIPE) return _gl_raise_SIGPIPE (); #endif #if HAVE_RAISE return raise_nothrow (sig); #else return kill (getpid (), sig); #endif } #if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER static int raise_nothrow (int sig) { int result; TRY_MSVC_INVAL { result = raise (sig); } CATCH_MSVC_INVAL { result = -1; errno = EINVAL; } DONE_MSVC_INVAL; return result; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/random.c����������������������������������������������������������������0000664�0000000�0000000�00000031277�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-2021 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 /* Allow memory races; that's random enough. */ # define __libc_lock_define_initialized(class, name) # define __libc_lock_lock(name) ((void) 0) # define __libc_lock_unlock(name) ((void) 0) #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) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/random_r.c��������������������������������������������������������������0000664�0000000�0000000�00000033657�14110572173�0017030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-2021 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) ���������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rawmemchr.c�������������������������������������������������������������0000664�0000000�0000000�00000011526�14110572173�0017203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is only needed if HAVE_RAWMEMCHR is not defined. */ #if !HAVE_RAWMEMCHR # include <limits.h> # include <stdalign.h> # include <stdint.h> # include "verify.h" /* Find the first occurrence of C in S. */ void * rawmemchr (const void *s, int c_in) { /* Change this typedef to experiment with performance. */ typedef uintptr_t longword; /* If you change the "uintptr_t", you should change UINTPTR_WIDTH to match. This verifies that the type does not have padding bits. */ verify (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (longword)); const unsigned char *char_ptr; unsigned char c = c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (uintptr_t) char_ptr % alignof (longword) != 0; ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword const *longword_ptr = s = char_ptr; /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ longword repeated_one = (longword) -1 / UCHAR_MAX; longword repeated_c = repeated_one * c; longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1); /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if any of the bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether any of the bytes in longword1 is zero. (The following comments assume 8-bit bytes, as POSIX requires; the code's use of UCHAR_MAX should work even if bytes have more than 8 bits.) We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. This test can read beyond the end of a string, depending on where C_IN is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0) break; longword_ptr++; } char_ptr = s = longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == c. If we knew endianness, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. However, the following simple and portable code does not attempt this potential optimization. */ while (*char_ptr != c) char_ptr++; return (void *) char_ptr; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rawmemchr.valgrind������������������������������������������������������0000664�0000000�0000000�00000001714�14110572173�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). # Copyright (C) 2008-2021 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/>. # This use is OK because it provides only a speedup. { rawmemchr-value4 Memcheck:Value4 fun:rawmemchr } { rawmemchr-value8 Memcheck:Value8 fun:rawmemchr } ����������������������������������������������������gnulib-20210822~d383792/lib/read-file.c�������������������������������������������������������������0000664�0000000�0000000�00000014077�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.c -- read file contents into a string Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson and Bruno Haible. 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/>. */ #include <config.h> #include "read-file.h" /* Get fstat. */ #include <sys/stat.h> /* Get ftello. */ #include <stdio.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* Get malloc, realloc, free. */ #include <stdlib.h> /* Get explicit_bzero, memcpy. */ #include <string.h> /* Get errno. */ #include <errno.h> /* Read a STREAM and return a newly allocated string with the content, and set *LENGTH to the length of the string. The string is zero-terminated, but the terminating zero byte is not counted in *LENGTH. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. If the RF_SENSITIVE flag is set in FLAGS: - You should control the buffering of STREAM using 'setvbuf'. Either clear the buffer of STREAM after closing it, or disable buffering of STREAM before calling this function. - The memory buffer internally allocated will be cleared upon failure. */ char * fread_file (FILE *stream, int flags, size_t *length) { char *buf = NULL; size_t alloc = BUFSIZ; /* For a regular file, allocate a buffer that has exactly the right size. This avoids the need to do dynamic reallocations later. */ { struct stat st; if (fstat (fileno (stream), &st) >= 0 && S_ISREG (st.st_mode)) { off_t pos = ftello (stream); if (pos >= 0 && pos < st.st_size) { off_t alloc_off = st.st_size - pos; /* '1' below, accounts for the trailing NUL. */ if (PTRDIFF_MAX - 1 < alloc_off) { errno = ENOMEM; return NULL; } alloc = alloc_off + 1; } } } if (!(buf = malloc (alloc))) return NULL; /* errno is ENOMEM. */ { size_t size = 0; /* number of bytes read so far */ int save_errno; for (;;) { /* This reads 1 more than the size of a regular file so that we get eof immediately. */ size_t requested = alloc - size; size_t count = fread (buf + size, 1, requested, stream); size += count; if (count != requested) { save_errno = errno; if (ferror (stream)) break; /* Shrink the allocated memory if possible. */ if (size < alloc - 1) { if (flags & RF_SENSITIVE) { char *smaller_buf = malloc (size + 1); if (smaller_buf == NULL) explicit_bzero (buf + size, alloc - size); else { memcpy (smaller_buf, buf, size); explicit_bzero (buf, alloc); free (buf); buf = smaller_buf; } } else { char *smaller_buf = realloc (buf, size + 1); if (smaller_buf != NULL) buf = smaller_buf; } } buf[size] = '\0'; *length = size; return buf; } { char *new_buf; size_t save_alloc = alloc; if (alloc == PTRDIFF_MAX) { save_errno = ENOMEM; break; } if (alloc < PTRDIFF_MAX - alloc / 2) alloc = alloc + alloc / 2; else alloc = PTRDIFF_MAX; if (flags & RF_SENSITIVE) { new_buf = malloc (alloc); if (!new_buf) { /* BUF should be cleared below after the loop. */ save_errno = errno; break; } memcpy (new_buf, buf, save_alloc); explicit_bzero (buf, save_alloc); free (buf); } else if (!(new_buf = realloc (buf, alloc))) { save_errno = errno; break; } buf = new_buf; } } if (flags & RF_SENSITIVE) explicit_bzero (buf, alloc); free (buf); errno = save_errno; return NULL; } } /* Open and read the contents of FILENAME, and return a newly allocated string with the content, and set *LENGTH to the length of the string. The string is zero-terminated, but the terminating zero byte is not counted in *LENGTH. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. If the RF_BINARY flag is set in FLAGS, the file is opened in binary mode. If the RF_SENSITIVE flag is set in FLAGS, the memory buffer internally allocated will be cleared upon failure. */ char * read_file (const char *filename, int flags, size_t *length) { const char *mode = (flags & RF_BINARY) ? "rbe" : "re"; FILE *stream = fopen (filename, mode); char *out; if (!stream) return NULL; if (flags & RF_SENSITIVE) setvbuf (stream, NULL, _IONBF, 0); out = fread_file (stream, flags, length); if (fclose (stream) != 0) { if (out) { if (flags & RF_SENSITIVE) explicit_bzero (out, *length); free (out); } return NULL; } return out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/read-file.h�������������������������������������������������������������0000664�0000000�0000000�00000002544�14110572173�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.h -- read file contents into a string Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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 READ_FILE_H #define READ_FILE_H /* Get size_t, free(). */ #include <stdlib.h> /* Get FILE. */ #include <stdio.h> /* Indicate that the file is treated as binary. */ #define RF_BINARY 0x1 /* Indicate that the file content contains sensitive information. */ #define RF_SENSITIVE 0x2 extern char *fread_file (FILE * stream, int flags, size_t * length) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; extern char *read_file (const char *filename, int flags, size_t * length) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* READ_FILE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/read.c������������������������������������������������������������������0000664�0000000�0000000�00000004466�14110572173�0016136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible read() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # undef read # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static ssize_t read_nothrow (int fd, void *buf, size_t count) { ssize_t result; TRY_MSVC_INVAL { result = _read (fd, buf, count); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define read_nothrow _read # endif ssize_t rpl_read (int fd, void *buf, size_t count) { ssize_t ret = read_nothrow (fd, buf, count); # if GNULIB_NONBLOCKING if (ret < 0 && GetLastError () == ERROR_NO_DATA) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0) && (state & PIPE_NOWAIT) != 0) /* h is a pipe in non-blocking mode. Change errno from EINVAL to EAGAIN. */ errno = EAGAIN; } } # endif return ret; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readdir.c���������������������������������������������������������������0000664�0000000�0000000�00000006072�14110572173�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read the next entry of a directory. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include <stddef.h> #include "dirent-private.h" /* Don't assume that UNICODE is not defined. */ #undef FindNextFile #define FindNextFile FindNextFileA struct dirent * readdir (DIR *dirp) { char type; struct dirent *result; /* There is no need to add code to produce entries for "." and "..". According to the POSIX:2008 section "4.12 Pathname Resolution" <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html> "." and ".." are syntactic entities. POSIX also says: "If entries for dot or dot-dot exist, one entry shall be returned for dot and one entry shall be returned for dot-dot; otherwise, they shall not be returned." */ switch (dirp->status) { case -2: /* End of directory already reached. */ return NULL; case -1: break; case 0: if (!FindNextFile (dirp->current, &dirp->entry)) { switch (GetLastError ()) { case ERROR_NO_MORE_FILES: dirp->status = -2; return NULL; default: errno = EIO; return NULL; } } break; default: errno = dirp->status; return NULL; } dirp->status = 0; if (dirp->entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) type = DT_DIR; else if (dirp->entry.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) type = DT_LNK; else if ((dirp->entry.dwFileAttributes & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_SPARSE_FILE | FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | FILE_ATTRIBUTE_ENCRYPTED)) == 0) /* Devices like COM1, LPT1, NUL would also have the attributes 0x20 but they cannot occur here. */ type = DT_REG; else type = DT_UNKNOWN; /* Reuse the memory of dirp->entry for the result. */ result = (struct dirent *) ((char *) dirp->entry.cFileName - offsetof (struct dirent, d_name[0])); result->d_type = type; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readline.c��������������������������������������������������������������0000664�0000000�0000000�00000003405�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.c --- Simple implementation of readline. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson This 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> /* This module is intended to be used when the application only needs the readline interface. If you need more functions from the readline library, it is recommended to require the readline library (or improve this module) rather than #if-protect part of your application (doing so would add assumptions of this module into your application). The application should use #include "readline.h", that header file will include <readline/readline.h> if the real library is present on the system. */ /* Get specification. */ #include "readline.h" #include <stdio.h> #include <string.h> char * readline (const char *prompt) { char *out = NULL; size_t size = 0; if (prompt) { fputs (prompt, stdout); fflush (stdout); } if (getline (&out, &size, stdin) < 0) return NULL; while (*out && (out[strlen (out) - 1] == '\r' || out[strlen (out) - 1] == '\n')) out[strlen (out) - 1] = '\0'; return out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readline.h��������������������������������������������������������������0000664�0000000�0000000�00000002645�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.h --- Simple implementation of readline. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson This 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 GL_READLINE_H #define GL_READLINE_H #if HAVE_READLINE_READLINE_H /* <readline/readline.h> makes use of the FILE type without including <stdio.h> itself. */ # include <stdio.h> # include <readline/readline.h> #else # include <stdlib.h> /* Prints a prompt PROMPT and then reads and returns a single line of text from the user. If PROMPT is NULL or the empty string, no prompt is displayed. The returned line is allocated with malloc; the caller should free the line when it has finished with it. */ extern char *readline (const char *prompt) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif #endif /* GL_READLINE_H */ �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readlink.c��������������������������������������������������������������0000664�0000000�0000000�00000006223�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read the contents of a symbolic link. Copyright (C) 2003-2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #if !HAVE_READLINK /* readlink() substitute for systems that don't have a readlink() function, such as DJGPP 2.03 and mingw32. */ ssize_t readlink (char const *file, _GL_UNUSED char *buf, _GL_UNUSED size_t bufsize) { struct stat statbuf; /* In general we should use lstat() here, not stat(). But on platforms without symbolic links, lstat() - if it exists - would be equivalent to stat(), therefore we can use stat(). This saves us a configure check. */ if (stat (file, &statbuf) >= 0) errno = EINVAL; return -1; } #else /* HAVE_READLINK */ # undef readlink /* readlink() wrapper that uses correct types, for systems like cygwin 1.5.x where readlink returns int, and which rejects trailing slash, for Solaris 9. */ ssize_t rpl_readlink (char const *file, char *buf, size_t bufsize) { # if READLINK_TRAILING_SLASH_BUG size_t file_len = strlen (file); if (file_len && file[file_len - 1] == '/') { /* Even if FILE without the slash is a symlink to a directory, both lstat() and stat() must resolve the trailing slash to the directory rather than the symlink. We can therefore safely use stat() to distinguish between EINVAL and ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */ struct stat st; if (stat (file, &st) == 0 || errno == EOVERFLOW) errno = EINVAL; return -1; } # endif /* READLINK_TRAILING_SLASH_BUG */ ssize_t r = readlink (file, buf, bufsize); # if READLINK_TRUNCATE_BUG if (r < 0 && errno == ERANGE) { /* Try again with a bigger buffer. This is just for test cases; real code invariably discards short reads. */ char stackbuf[4032]; r = readlink (file, stackbuf, sizeof stackbuf); if (r < 0) { if (errno == ERANGE) { /* Clear the buffer, which is good enough for real code. Thankfully, no test cases try short reads of enormous symlinks and what would be the point anyway? */ r = bufsize; memset (buf, 0, r); } } else { if (bufsize < r) r = bufsize; memcpy (buf, stackbuf, r); } } # endif return r; } #endif /* HAVE_READLINK */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readlinkat.c������������������������������������������������������������0000664�0000000�0000000�00000007145�14110572173�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read a symlink relative to an open directory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #if HAVE_READLINKAT # undef fstatat # undef readlinkat ssize_t rpl_readlinkat (int fd, char const *file, char *buf, size_t bufsize) { # if READLINK_TRAILING_SLASH_BUG size_t file_len = strlen (file); if (file_len && file[file_len - 1] == '/') { /* Even if FILE without the slash is a symlink to a directory, both lstat() and stat() must resolve the trailing slash to the directory rather than the symlink. We can therefore safely use fstatat(..., 0) to distinguish between EINVAL and ENOTDIR/ENOENT, avoiding extra overhead of rpl_fstatat(). */ struct stat st; if (fstatat (fd, file, &st, 0) == 0 || errno == EOVERFLOW) errno = EINVAL; return -1; } # endif /* READLINK_TRAILING_SLASH_BUG */ ssize_t r = readlinkat (fd, file, buf, bufsize); # if READLINK_TRUNCATE_BUG if (r < 0 && errno == ERANGE) { /* Try again with a bigger buffer. This is just for test cases; real code invariably discards short reads. */ char stackbuf[4032]; r = readlinkat (fd, file, stackbuf, sizeof stackbuf); if (r < 0) { if (errno == ERANGE) { /* Clear the buffer, which is good enough for real code. Thankfully, no test cases try short reads of enormous symlinks and what would be the point anyway? */ r = bufsize; memset (buf, 0, r); } } else { if (bufsize < r) r = bufsize; memcpy (buf, stackbuf, r); } } # endif return r; } #else /* Gnulib provides a readlink stub for mingw; use it for distinction between EINVAL and ENOENT, rather than always failing with ENOSYS. */ /* POSIX 2008 says that unlike readlink, readlinkat returns 0 for success instead of the buffer length. But this would render readlinkat worthless since readlink does not guarantee a NUL-terminated buffer. Assume this was a bug in POSIX. */ /* Read the contents of symlink FILE into buffer BUF of size BUFSIZE, in the directory open on descriptor FD. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then readlink/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ # define AT_FUNC_NAME readlinkat # define AT_FUNC_F1 readlink # define AT_FUNC_POST_FILE_PARAM_DECLS , char *buf, size_t bufsize # define AT_FUNC_POST_FILE_ARGS , buf, bufsize # define AT_FUNC_RESULT ssize_t # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS # undef AT_FUNC_RESULT #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readtokens.c������������������������������������������������������������0000664�0000000�0000000�00000011642�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens.c -- Functions for reading tokens from an input stream. Copyright (C) 1990-1991, 1999-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ /* This almost supersedes xreadline stuff -- using delim="\n" gives the same functionality, except that these functions would never return empty lines. */ #include <config.h> #include "readtokens.h" #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "xalloc.h" #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* Initialize a tokenbuffer. */ void init_tokenbuffer (token_buffer *tokenbuffer) { tokenbuffer->size = 0; tokenbuffer->buffer = NULL; } typedef size_t word; enum { bits_per_word = sizeof (word) * CHAR_BIT }; static bool get_nth_bit (size_t n, word const *bitset) { return bitset[n / bits_per_word] >> n % bits_per_word & 1; } static void set_nth_bit (size_t n, word *bitset) { size_t one = 1; bitset[n / bits_per_word] |= one << n % bits_per_word; } /* Read a token from STREAM into TOKENBUFFER. A token is delimited by any of the N_DELIM bytes in DELIM. Upon return, the token is in tokenbuffer->buffer and has a trailing '\0' instead of any original delimiter. The function value is the length of the token not including the final '\0'. Upon EOF (i.e. on the call after the last token is read) or error, return -1 without modifying tokenbuffer. The EOF and error conditions may be distinguished in the caller by testing ferror (STREAM). This function works properly on lines containing NUL bytes and on files that do not end with a delimiter. */ size_t readtoken (FILE *stream, const char *delim, size_t n_delim, token_buffer *tokenbuffer) { int c; idx_t i; word isdelim[(UCHAR_MAX + bits_per_word) / bits_per_word]; memset (isdelim, 0, sizeof isdelim); for (i = 0; i < n_delim; i++) { unsigned char ch = delim[i]; set_nth_bit (ch, isdelim); } /* skip over any leading delimiters */ for (c = getc (stream); c >= 0 && get_nth_bit (c, isdelim); c = getc (stream)) { /* empty */ } char *p = tokenbuffer->buffer; idx_t n = tokenbuffer->size; i = 0; for (;;) { if (c < 0 && i == 0) return -1; if (i == n) p = xpalloc (p, &n, 1, -1, sizeof *p); if (c < 0) { p[i] = 0; break; } if (get_nth_bit (c, isdelim)) { p[i] = 0; break; } p[i++] = c; c = getc (stream); } tokenbuffer->buffer = p; tokenbuffer->size = n; return i; } /* Build a NULL-terminated array of pointers to tokens read from STREAM. Return the number of tokens read. All storage is obtained through calls to xmalloc-like functions. %%% Question: is it worth it to do a single %%% realloc() of 'tokens' just before returning? */ size_t readtokens (FILE *stream, size_t projected_n_tokens, const char *delim, size_t n_delim, char ***tokens_out, size_t **token_lengths) { token_buffer tb, *token = &tb; char **tokens; size_t *lengths; idx_t sz, n_tokens; if (projected_n_tokens == 0) projected_n_tokens = 64; else projected_n_tokens++; /* add one for trailing NULL pointer */ sz = projected_n_tokens; tokens = xnmalloc (sz, sizeof *tokens); lengths = xnmalloc (sz, sizeof *lengths); n_tokens = 0; init_tokenbuffer (token); for (;;) { char *tmp; size_t token_length = readtoken (stream, delim, n_delim, token); if (n_tokens >= sz) { tokens = xpalloc (tokens, &sz, 1, -1, sizeof *tokens); lengths = xreallocarray (lengths, sz, sizeof *lengths); } if (token_length == (size_t) -1) { /* don't increment n_tokens for NULL entry */ tokens[n_tokens] = NULL; lengths[n_tokens] = 0; break; } tmp = xnmalloc (token_length + 1, sizeof *tmp); lengths[n_tokens] = token_length; tokens[n_tokens] = memcpy (tmp, token->buffer, token_length + 1); n_tokens++; } free (token->buffer); *tokens_out = tokens; if (token_lengths != NULL) *token_lengths = lengths; else free (lengths); return n_tokens; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readtokens.h������������������������������������������������������������0000664�0000000�0000000�00000002613�14110572173�0017357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens.h -- Functions for reading tokens from an input stream. Copyright (C) 1990-1991, 1999, 2001-2004, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef READTOKENS_H # define READTOKENS_H # include <stdio.h> /* FIXME: This header should use idx_t, not size_t. */ struct tokenbuffer { size_t size; char *buffer; }; typedef struct tokenbuffer token_buffer; void init_tokenbuffer (token_buffer *tokenbuffer); size_t readtoken (FILE *stream, const char *delim, size_t n_delim, token_buffer *tokenbuffer); size_t readtokens (FILE *stream, size_t projected_n_tokens, const char *delim, size_t n_delim, char ***tokens_out, size_t **token_lengths); #endif /* not READTOKENS_H */ ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readtokens0.c�����������������������������������������������������������0000664�0000000�0000000�00000005446�14110572173�0017441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens0.c -- Read NUL-separated tokens from an input stream. Copyright (C) 2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include <stdlib.h> #include "readtokens0.h" #define obstack_chunk_alloc malloc #define obstack_chunk_free free void readtokens0_init (struct Tokens *t) { t->n_tok = 0; t->tok = NULL; t->tok_len = NULL; obstack_init (&t->o_data); obstack_init (&t->o_tok); obstack_init (&t->o_tok_len); } void readtokens0_free (struct Tokens *t) { obstack_free (&t->o_data, NULL); obstack_free (&t->o_tok, NULL); obstack_free (&t->o_tok_len, NULL); } /* Finalize (in the obstack_finish sense) the current token and record its pointer and length. */ static void save_token (struct Tokens *t) { /* Don't count the trailing NUL byte in the length. */ size_t len = obstack_object_size (&t->o_data) - 1; char const *s = obstack_finish (&t->o_data); obstack_ptr_grow (&t->o_tok, s); obstack_grow (&t->o_tok_len, &len, sizeof len); t->n_tok++; } /* Read NUL-separated tokens from stream IN into T until EOF or error. The final NUL is optional. Always append a NULL pointer to the resulting list of token pointers, but that pointer isn't counted via t->n_tok. Return true if successful. */ bool readtokens0 (FILE *in, struct Tokens *t) { while (1) { int c = fgetc (in); if (c == EOF) { size_t len = obstack_object_size (&t->o_data); /* If the current object has nonzero length, then there was no NUL byte at EOF -- or maybe there was an error, in which case, we need to append a NUL byte to our buffer. */ if (len) { obstack_1grow (&t->o_data, '\0'); save_token (t); } break; } obstack_1grow (&t->o_data, c); if (c == '\0') save_token (t); } /* Add a NULL pointer at the end, in case the caller (like du) requires an argv-style array of strings. */ obstack_ptr_grow (&t->o_tok, NULL); t->tok = obstack_finish (&t->o_tok); t->tok_len = obstack_finish (&t->o_tok_len); return ! ferror (in); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readtokens0.h�����������������������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens0.h -- read NUL-separated tokens from an input stream. Copyright (C) 2004, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef READTOKENS0_H # define READTOKENS0_H 1 # include <stdio.h> # include <sys/types.h> # include <stdbool.h> # include "obstack.h" struct Tokens { size_t n_tok; char **tok; size_t *tok_len; struct obstack o_data; /* Contains data pointed to by each tok[i]. */ struct obstack o_tok; /* array of pointers to tokens */ struct obstack o_tok_len; /* array of token lengths */ }; void readtokens0_init (struct Tokens *t); void readtokens0_free (struct Tokens *t); bool readtokens0 (FILE *in, struct Tokens *t); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readutmp.c��������������������������������������������������������������0000664�0000000�0000000�00000010317�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* GNU's read utmp module. Copyright (C) 1992-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 jla; revised by djm */ #include <config.h> #include "readutmp.h" #include <errno.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <signal.h> #include <stdbool.h> #include <string.h> #include <stdlib.h> #include <stdint.h> #include "xalloc.h" /* Each of the FILE streams in this file is only used in a single thread. */ #include "unlocked-io.h" #if 8 <= __GNUC__ # pragma GCC diagnostic ignored "-Wsizeof-pointer-memaccess" #endif /* Copy UT->ut_name into storage obtained from malloc. Then remove any trailing spaces from the copy, NUL terminate it, and return the copy. */ char * extract_trimmed_name (const STRUCT_UTMP *ut) { char *p, *trimmed_name; trimmed_name = xmalloc (sizeof (UT_USER (ut)) + 1); strncpy (trimmed_name, UT_USER (ut), sizeof (UT_USER (ut))); /* Append a trailing NUL. Some systems pad names shorter than the maximum with spaces, others pad with NULs. Remove any trailing spaces. */ trimmed_name[sizeof (UT_USER (ut))] = '\0'; for (p = trimmed_name + strlen (trimmed_name); trimmed_name < p && p[-1] == ' '; *--p = '\0') continue; return trimmed_name; } /* Is the utmp entry U desired by the user who asked for OPTIONS? */ static bool desirable_utmp_entry (STRUCT_UTMP const *u, int options) { bool user_proc = IS_USER_PROCESS (u); if ((options & READ_UTMP_USER_PROCESS) && !user_proc) return false; if ((options & READ_UTMP_CHECK_PIDS) && user_proc && 0 < UT_PID (u) && (kill (UT_PID (u), 0) < 0 && errno == ESRCH)) return false; return true; } /* Read the utmp entries corresponding to file FILE into freshly- malloc'd storage, set *UTMP_BUF to that pointer, set *N_ENTRIES to the number of entries, and return zero. If there is any error, return -1, setting errno, and don't modify the parameters. If OPTIONS & READ_UTMP_CHECK_PIDS is nonzero, omit entries whose process-IDs do not currently exist. */ #ifdef UTMP_NAME_FUNCTION int read_utmp (char const *file, size_t *n_entries, STRUCT_UTMP **utmp_buf, int options) { idx_t n_read = 0; idx_t n_alloc = 0; STRUCT_UTMP *utmp = NULL; STRUCT_UTMP *u; /* Ignore the return value for now. Solaris' utmpname returns 1 upon success -- which is contrary to what the GNU libc version does. In addition, older GNU libc versions are actually void. */ UTMP_NAME_FUNCTION ((char *) file); SET_UTMP_ENT (); while ((u = GET_UTMP_ENT ()) != NULL) if (desirable_utmp_entry (u, options)) { if (n_read == n_alloc) utmp = xpalloc (utmp, &n_alloc, 1, -1, sizeof *utmp); utmp[n_read++] = *u; } END_UTMP_ENT (); *n_entries = n_read; *utmp_buf = utmp; return 0; } #else int read_utmp (char const *file, size_t *n_entries, STRUCT_UTMP **utmp_buf, int options) { idx_t n_read = 0; idx_t n_alloc = 0; STRUCT_UTMP *utmp = NULL; int saved_errno; FILE *f = fopen (file, "re"); if (! f) return -1; for (;;) { if (n_read == n_alloc) utmp = xpalloc (utmp, &n_alloc, 1, -1, sizeof *utmp); if (fread (&utmp[n_read], sizeof utmp[n_read], 1, f) == 0) break; n_read += desirable_utmp_entry (&utmp[n_read], options); } saved_errno = ferror (f) ? errno : 0; if (fclose (f) != 0) saved_errno = errno; if (saved_errno != 0) { free (utmp); errno = saved_errno; return -1; } *n_entries = n_read; *utmp_buf = utmp; return 0; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/readutmp.h��������������������������������������������������������������0000664�0000000�0000000�00000013624�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for GNU's read utmp module. Copyright (C) 1992-2007, 2009-2021 Free Software Foundation, Inc. This 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 jla; revised by djm */ #ifndef __READUTMP_H__ # define __READUTMP_H__ # include <stdlib.h> # include <sys/types.h> /* AIX 4.3.3 has both utmp.h and utmpx.h, but only struct utmp has the ut_exit member. */ # if (HAVE_UTMPX_H && HAVE_UTMP_H && HAVE_STRUCT_UTMP_UT_EXIT \ && ! HAVE_STRUCT_UTMPX_UT_EXIT) # undef HAVE_UTMPX_H # endif # if HAVE_UTMPX_H # if HAVE_UTMP_H /* HPUX 10.20 needs utmp.h, for the definition of e.g., UTMP_FILE. */ # include <utmp.h> # endif # if defined _THREAD_SAFE && defined UTMP_DATA_INIT /* When including both utmp.h and utmpx.h on AIX 4.3, with _THREAD_SAFE defined, work around the duplicate struct utmp_data declaration. */ # define utmp_data gl_aix_4_3_workaround_utmp_data # endif # include <utmpx.h> # define UTMP_STRUCT_NAME utmpx # define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_tv.tv_sec) # define SET_UTMP_ENT setutxent # define GET_UTMP_ENT getutxent # define END_UTMP_ENT endutxent # ifdef HAVE_UTMPXNAME # define UTMP_NAME_FUNCTION utmpxname # elif defined UTXDB_ACTIVE # define UTMP_NAME_FUNCTION(x) setutxdb (UTXDB_ACTIVE, x) # endif # if HAVE_STRUCT_UTMPX_UT_EXIT_E_TERMINATION # define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.e_termination) # else # if HAVE_STRUCT_UTMPX_UT_EXIT_UT_TERMINATION # define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.ut_termination) # else # define UT_EXIT_E_TERMINATION(U) 0 # endif # endif # if HAVE_STRUCT_UTMPX_UT_EXIT_E_EXIT # define UT_EXIT_E_EXIT(U) ((U)->ut_exit.e_exit) # else # if HAVE_STRUCT_UTMPX_UT_EXIT_UT_EXIT # define UT_EXIT_E_EXIT(U) ((U)->ut_exit.ut_exit) # else # define UT_EXIT_E_EXIT(U) 0 # endif # endif # elif HAVE_UTMP_H # include <utmp.h> # if !HAVE_DECL_GETUTENT struct utmp *getutent (void); # endif # define UTMP_STRUCT_NAME utmp # define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_time) # define SET_UTMP_ENT setutent # define GET_UTMP_ENT getutent # define END_UTMP_ENT endutent # ifdef HAVE_UTMPNAME # define UTMP_NAME_FUNCTION utmpname # endif # if HAVE_STRUCT_UTMP_UT_EXIT_E_TERMINATION # define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.e_termination) # else # if HAVE_STRUCT_UTMP_UT_EXIT_UT_TERMINATION # define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.ut_termination) # else # define UT_EXIT_E_TERMINATION(U) 0 # endif # endif # if HAVE_STRUCT_UTMP_UT_EXIT_E_EXIT # define UT_EXIT_E_EXIT(U) ((U)->ut_exit.e_exit) # else # if HAVE_STRUCT_UTMP_UT_EXIT_UT_EXIT # define UT_EXIT_E_EXIT(U) ((U)->ut_exit.ut_exit) # else # define UT_EXIT_E_EXIT(U) 0 # endif # endif # endif /* Accessor macro for the member named ut_user or ut_name. */ # if HAVE_UTMPX_H # if HAVE_STRUCT_UTMPX_UT_USER # define UT_USER(Utmp) ((Utmp)->ut_user) # endif # if HAVE_STRUCT_UTMPX_UT_NAME # undef UT_USER # define UT_USER(Utmp) ((Utmp)->ut_name) # endif # elif HAVE_UTMP_H # if HAVE_STRUCT_UTMP_UT_USER # define UT_USER(Utmp) ((Utmp)->ut_user) # endif # if HAVE_STRUCT_UTMP_UT_NAME # undef UT_USER # define UT_USER(Utmp) ((Utmp)->ut_name) # endif # endif # define HAVE_STRUCT_XTMP_UT_EXIT \ (HAVE_STRUCT_UTMP_UT_EXIT \ || HAVE_STRUCT_UTMPX_UT_EXIT) # define HAVE_STRUCT_XTMP_UT_ID \ (HAVE_STRUCT_UTMP_UT_ID \ || HAVE_STRUCT_UTMPX_UT_ID) # define HAVE_STRUCT_XTMP_UT_PID \ (HAVE_STRUCT_UTMP_UT_PID \ || HAVE_STRUCT_UTMPX_UT_PID) typedef struct UTMP_STRUCT_NAME STRUCT_UTMP; enum { UT_USER_SIZE = sizeof UT_USER ((STRUCT_UTMP *) 0) }; # if !defined UTMP_FILE && defined _PATH_UTMP # define UTMP_FILE _PATH_UTMP # endif # if !defined WTMP_FILE && defined _PATH_WTMP # define WTMP_FILE _PATH_WTMP # endif # ifdef UTMPX_FILE /* Solaris, SysVr4 */ # undef UTMP_FILE # define UTMP_FILE UTMPX_FILE # endif # ifdef WTMPX_FILE /* Solaris, SysVr4 */ # undef WTMP_FILE # define WTMP_FILE WTMPX_FILE # endif # ifndef UTMP_FILE # define UTMP_FILE "/etc/utmp" # endif # ifndef WTMP_FILE # define WTMP_FILE "/etc/wtmp" # endif # if HAVE_STRUCT_XTMP_UT_PID # define UT_PID(U) ((U)->ut_pid) # else # define UT_PID(U) 0 # endif # if HAVE_STRUCT_UTMP_UT_TYPE || HAVE_STRUCT_UTMPX_UT_TYPE # define UT_TYPE_EQ(U, V) ((U)->ut_type == (V)) # define UT_TYPE_NOT_DEFINED 0 # else # define UT_TYPE_EQ(U, V) 0 # define UT_TYPE_NOT_DEFINED 1 # endif # ifdef BOOT_TIME # define UT_TYPE_BOOT_TIME(U) UT_TYPE_EQ (U, BOOT_TIME) # else # define UT_TYPE_BOOT_TIME(U) 0 # endif # ifdef USER_PROCESS # define UT_TYPE_USER_PROCESS(U) UT_TYPE_EQ (U, USER_PROCESS) # else # define UT_TYPE_USER_PROCESS(U) 0 # endif # define IS_USER_PROCESS(U) \ (UT_USER (U)[0] \ && (UT_TYPE_USER_PROCESS (U) \ || (UT_TYPE_NOT_DEFINED && UT_TIME_MEMBER (U) != 0))) /* Options for read_utmp. */ enum { READ_UTMP_CHECK_PIDS = 1, READ_UTMP_USER_PROCESS = 2 }; char *extract_trimmed_name (const STRUCT_UTMP *ut) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* FIXME: This header should use idx_t, not size_t. */ int read_utmp (char const *file, size_t *n_entries, STRUCT_UTMP **utmp_buf, int options); #endif /* __READUTMP_H__ */ ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/realloc.c���������������������������������������������������������������0000664�0000000�0000000�00000003131�14110572173�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* realloc() function that is glibc compatible. Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2021 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 Jim Meyering and Bruno Haible */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's realloc below. This file does not define _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */ #undef realloc /* Change the size of an allocated block of memory P to N bytes, with error checking. If P is NULL, use malloc. Otherwise if N is zero, free P and return NULL. */ void * rpl_realloc (void *p, size_t n) { if (p == NULL) return malloc (n); if (n == 0) { free (p); return NULL; } if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = realloc (p, n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/reallocarray.c����������������������������������������������������������0000664�0000000�0000000�00000002201�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* reallocarray function that is glibc compatible. Copyright (C) 2017-2021 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 Darshit Shah */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "intprops.h" void * reallocarray (void *ptr, size_t nmemb, size_t size) { size_t nbytes; if (INT_MULTIPLY_WRAPV (nmemb, size, &nbytes)) { errno = ENOMEM; return NULL; } /* Rely on the semantics of GNU realloc. */ return realloc (ptr, nbytes); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/recv.c������������������������������������������������������������������0000664�0000000�0000000�00000002413�14110572173�0016150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recv.c --- wrappers for Windows recv function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef recv ssize_t rpl_recv (int fd, void *buf, size_t len, int flags) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = recv (sock, buf, len, flags); if (r < 0) set_winsock_errno (); return r; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/recvfrom.c��������������������������������������������������������������0000664�0000000�0000000�00000003254�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recvfrom.c --- wrappers for Windows recvfrom function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef recvfrom ssize_t rpl_recvfrom (int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int frombufsize = (from != NULL ? *fromlen : 0); int r = recvfrom (sock, buf, len, flags, from, fromlen); if (r < 0) set_winsock_errno (); /* Winsock recvfrom() only returns a valid 'from' when the socket is connectionless. POSIX gives a valid 'from' for all types of sockets. */ else if (from != NULL && *fromlen == frombufsize) rpl_getpeername (fd, from, fromlen); return r; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regcomp.c���������������������������������������������������������������0000664�0000000�0000000�00000337455�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 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/>. */ #ifdef _LIBC # include <locale/weight.h> #endif static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset); #endif /* RE_ENABLE_I18N */ static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); #ifdef RE_ENABLE_I18N static void optimize_utf8 (re_dfa_t *dfa); #endif static reg_errcode_t analyze (regex_t *preg); static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node); static reg_errcode_t calc_first (void *extra, bin_tree_t *node); static reg_errcode_t calc_next (void *extra, bin_tree_t *node); static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root); static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); #ifdef RE_ENABLE_I18N static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax); #else /* not RE_ENABLE_I18N */ static reg_errcode_t build_equiv_class (bitset_t sbcset, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, const char *class_name, reg_syntax_t syntax); #endif /* not RE_ENABLE_I18N */ static bin_tree_t *build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err); static bin_tree_t *create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type); static bin_tree_t *create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); static void free_token (re_token_t *node); static reg_errcode_t free_tree (void *extra, bin_tree_t *node); static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char __re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t __re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub, unless RE_NO_SUB is set. */ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } weak_alias (__re_compile_pattern, re_compile_pattern) /* Set by 're_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } weak_alias (__re_set_syntax, re_set_syntax) int re_compile_fastmap (struct re_pattern_buffer *bufp) { re_dfa_t *dfa = bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } weak_alias (__re_compile_fastmap, re_compile_fastmap) static inline void __attribute__ ((always_inline)) re_set_fastmap (char *fastmap, bool icase, int ch) { fastmap[ch] = 1; if (icase) fastmap[tolower (ch)] = 1; } /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) { re_dfa_t *dfa = bufp->buffer; Idx node_cnt; bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { Idx node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == CHARACTER) { re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); #ifdef RE_ENABLE_I18N if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { unsigned char buf[MB_LEN_MAX]; unsigned char *p; wchar_t wc; mbstate_t state; p = buf; *p++ = dfa->nodes[node].opr.c; while (++node < dfa->nodes_len && dfa->nodes[node].type == CHARACTER && dfa->nodes[node].mb_partial) *p++ = dfa->nodes[node].opr.c; memset (&state, '\0', sizeof (state)); if (__mbrtowc (&wc, (const char *) buf, p - buf, &state) == p - buf && (__wcrtomb ((char *) buf, __towlower (wc), &state) != (size_t) -1)) re_set_fastmap (fastmap, false, buf[0]); } #endif } else if (type == SIMPLE_BRACKET) { int i, ch; for (i = 0, ch = 0; i < BITSET_WORDS; ++i) { int j; bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch); } } #ifdef RE_ENABLE_I18N else if (type == COMPLEX_BRACKET) { re_charset_t *cset = dfa->nodes[node].opr.mbcset; Idx i; # ifdef _LIBC /* See if we have to try all bytes which start multiple collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b' (and it is caught by SIMPLE_BRACKET). */ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 && (cset->ncoll_syms || cset->nranges)) { const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0; i < SBC_MAX; ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i); } # endif /* _LIBC */ /* See if we have to start the match at all multibyte characters, i.e. where we would not find an invalid sequence. This only applies to multibyte character sets; for single byte character sets, the SIMPLE_BRACKET again suffices. */ if (dfa->mb_cur_max > 1 && (cset->nchar_classes || cset->non_match || cset->nranges # ifdef _LIBC || cset->nequiv_classes # endif /* _LIBC */ )) { unsigned char c = 0; do { mbstate_t mbs; memset (&mbs, 0, sizeof (mbs)); if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) re_set_fastmap (fastmap, false, (int) c); } while (++c != 0); } else { /* ... Else catch all bytes which can start the mbchars. */ for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; mbstate_t state; memset (&state, '\0', sizeof (state)); if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) != (size_t) -1) re_set_fastmap (fastmap, false, *(unsigned char *) buf); } } } } #endif /* RE_ENABLE_I18N */ else if (type == OP_PERIOD #ifdef RE_ENABLE_I18N || type == OP_UTF8_PERIOD #endif /* RE_ENABLE_I18N */ || type == END_OF_RE) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set 'buffer' to the compiled pattern; 'used' to the length of the compiled pattern; 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; 'newline_anchor' to REG_NEWLINE being set in CFLAGS; 'fastmap' to an allocated space for the fastmap; 'fastmap_accurate' to zero; 're_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (__glibc_unlikely (preg->fastmap == NULL)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (__glibc_likely (ret == REG_NOERROR)) /* Compute the fastmap now, since regexec cannot modify the pattern buffer. This function never fails in this implementation. */ (void) re_compile_fastmap (preg); else { /* Some error occurred while compiling the expression. */ re_free (preg->fastmap); preg->fastmap = NULL; } return (int) ret; } libc_hidden_def (__regcomp) weak_alias (__regcomp, regcomp) /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (__glibc_likely (errbuf_size != 0)) { size_t cpy_size = msg_size; if (__glibc_unlikely (msg_size > errbuf_size)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } weak_alias (__regerror, regerror) #ifdef RE_ENABLE_I18N /* This static array is used for the map to single-byte characters when UTF-8 is used. Otherwise we would allocate memory just to initialize it the same all the time. UTF-8 is the preferred encoding so this is a worthwhile optimization. */ static const bitset_t utf8_sb_map = { /* Set the first 128 bits. */ # if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX # else # if 4 * BITSET_WORD_BITS < ASCII_CHARS # error "bitset_word_t is narrower than 32 bits" # elif 3 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 2 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 1 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, # endif (BITSET_WORD_MAX >> (SBC_MAX % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) # endif }; #endif static void free_dfa_content (re_dfa_t *dfa) { Idx i, j; if (dfa->nodes) for (i = 0; i < dfa->nodes_len; ++i) free_token (dfa->nodes + i); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); if (dfa->state_table) for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; free_state (state); } re_free (entry->array); } re_free (dfa->state_table); #ifdef RE_ENABLE_I18N if (dfa->sb_char != utf8_sb_map) re_free (dfa->sb_char); #endif re_free (dfa->subexp_map); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { re_dfa_t *dfa = preg->buffer; if (__glibc_likely (dfa != NULL)) { lock_fini (dfa->lock); free_dfa_content (dfa); } preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } libc_hidden_def (__regfree) weak_alias (__regfree, regfree) /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (const char *s) { reg_errcode_t ret; char *fastmap; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (re_comp_buf.buffer) { fastmap = re_comp_buf.fastmap; re_comp_buf.fastmap = NULL; __regfree (&re_comp_buf); memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); re_comp_buf.fastmap = fastmap; } if (re_comp_buf.fastmap == NULL) { re_comp_buf.fastmap = re_malloc (char, SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since 're_exec' always passes NULL for the 'regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC libc_freeres_fn (free_mem) { __regfree (&re_comp_buf); } #endif #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax) { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; preg->can_be_null = 0; preg->regs_allocated = REGS_UNALLOCATED; /* Initialize the dfa. */ dfa = preg->buffer; if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) err = REG_ESPACE; if (__glibc_unlikely (err != REG_NOERROR)) { free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } #ifdef DEBUG /* Note: length+1 will not overflow since it is checked in init_dfa. */ dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (__glibc_unlikely (dfa->str_tree == NULL)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (__glibc_unlikely (err != REG_NOERROR)) goto re_compile_internal_free_return; #ifdef RE_ENABLE_I18N /* If possible, do searching in single byte encoding to speed things up. */ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) optimize_utf8 (dfa); #endif /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); if (__glibc_unlikely (err != REG_NOERROR)) { lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; } return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len) { __re_size_t table_size; #ifndef _LIBC const char *codeset_name; #endif #ifdef RE_ENABLE_I18N size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); #else size_t max_i18n_object_size = 0; #endif size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); /* Force allocation of str_tree_storage the first time. */ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; /* Avoid overflows. The extra "/ 2" is for the table_size doubling calculation below, and for similar doubling calculations elsewhere. And it's <= rather than <, because some of the doubling calculations add 1 afterwards. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len)) return REG_ESPACE; dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; ; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; #ifdef _LIBC if (dfa->mb_cur_max == 6 && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) dfa->is_utf8 = 1; dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) != 0); #else codeset_name = nl_langinfo (CODESET); if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') && (codeset_name[1] == 'T' || codeset_name[1] == 't') && (codeset_name[2] == 'F' || codeset_name[2] == 'f') && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) dfa->is_utf8 = 1; /* We check exhaustively in the loop below if this charset is a superset of ASCII. */ dfa->map_notascii = 0; #endif #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; else { int i, j, ch; dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (dfa->sb_char == NULL)) return REG_ESPACE; /* Set the bits corresponding to single byte chars. */ for (i = 0, ch = 0; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) { wint_t wch = __btowc (ch); if (wch != WEOF) dfa->sb_char[i] |= (bitset_word_t) 1 << j; # ifndef _LIBC if (isascii (ch) && wch != ch) dfa->map_notascii = 1; # endif } } } #endif if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) return REG_ESPACE; return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static void init_word_char (re_dfa_t *dfa) { int i = 0; int j; int ch = 0; dfa->word_ops_used = 1; if (__glibc_likely (dfa->map_notascii == 0)) { /* Avoid uint32_t and uint64_t as some non-GCC platforms lack them, an issue when this code is used in Gnulib. */ bitset_word_t bits0 = 0x00000000; bitset_word_t bits1 = 0x03ff0000; bitset_word_t bits2 = 0x87fffffe; bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { /* Pacify gcc -Woverflow on 32-bit platformns. */ dfa->word_char[0] = bits1 << 31 << 1 | bits0; dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { dfa->word_char[0] = bits0; dfa->word_char[1] = bits1; dfa->word_char[2] = bits2; dfa->word_char[3] = bits3; i = 4; } else goto general_case; ch = 128; if (__glibc_likely (dfa->is_utf8)) { memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); return; } } general_case: for (; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= (bitset_word_t) 1 << j; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (regex_t *preg) { re_dfa_t *dfa = preg->buffer; bin_tree_storage_t *storage, *next; for (storage = dfa->str_tree_storage; storage; storage = next) { next = storage->next; re_free (storage); } dfa->str_tree_storage = NULL; dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; dfa->str_tree = NULL; re_free (dfa->org_indices); dfa->org_indices = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (re_dfa_t *dfa) { Idx first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first->node_idx; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { Idx node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; Idx clexp_idx; if (type != OP_BACK_REF) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_BACK_REF) { Idx dest_idx = dfa->edests[node_idx].elems[0]; if (!re_node_set_contains (&init_nodes, dest_idx)) { reg_errcode_t merge_err = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); if (merge_err != REG_NOERROR) return merge_err; i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (__glibc_unlikely (dfa->init_state == NULL)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (__glibc_unlikely (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } #ifdef RE_ENABLE_I18N /* If it is possible to do searching in single byte encoding instead of UTF-8 to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change DFA nodes where needed. */ static void optimize_utf8 (re_dfa_t *dfa) { Idx node; int i; bool mb_chars = false; bool has_period = false; for (node = 0; node < dfa->nodes_len; ++node) switch (dfa->nodes[node].type) { case CHARACTER: if (dfa->nodes[node].opr.c >= ASCII_CHARS) mb_chars = true; break; case ANCHOR: switch (dfa->nodes[node].opr.ctx_type) { case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break; default: /* Word anchors etc. cannot be handled. It's okay to test opr.ctx_type since constraints (for all DFA nodes) are created by ORing one or more opr.ctx_type values. */ return; } break; case OP_PERIOD: has_period = true; break; case OP_BACK_REF: case OP_ALT: case END_OF_RE: case OP_DUP_ASTERISK: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: break; case COMPLEX_BRACKET: return; case SIMPLE_BRACKET: /* Just double check. */ { int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) { if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) return; rshift = 0; } } break; default: abort (); } if (mb_chars || has_period) for (node = 0; node < dfa->nodes_len; ++node) { if (dfa->nodes[node].type == CHARACTER && dfa->nodes[node].opr.c >= ASCII_CHARS) dfa->nodes[node].mb_partial = 0; else if (dfa->nodes[node].type == OP_PERIOD) dfa->nodes[node].type = OP_UTF8_PERIOD; } /* The search can be in single byte locale. */ dfa->mb_cur_max = 1; dfa->is_utf8 = 0; dfa->has_mb_node = dfa->nbackref > 0 || has_period; } #endif /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (regex_t *preg) { re_dfa_t *dfa = preg->buffer; reg_errcode_t ret; /* Allocate arrays. */ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL)) return REG_ESPACE; dfa->subexp_map = re_malloc (Idx, preg->re_nsub); if (dfa->subexp_map != NULL) { Idx i; for (i = 0; i < preg->re_nsub; i++) dfa->subexp_map[i] = i; preorder (dfa->str_tree, optimize_subexps, dfa); for (i = 0; i < preg->re_nsub; i++) if (dfa->subexp_map[i] != i) break; if (i == preg->re_nsub) { re_free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = calc_eclosure (dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; /* We only need this during the prune_impossible_nodes pass in regexec.c; skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) || dfa->nbackref) { dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); if (__glibc_unlikely (dfa->inveclosures == NULL)) return REG_ESPACE; ret = calc_inveclosure (dfa); } return ret; } /* Our parse trees are very unbalanced, so we cannot use a stack to implement parse tree visits. Instead, we use parent pointers and some hairy code in these two functions. */ static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node, *prev; for (node = root; ; ) { /* Descend down the tree, preferably to the left (or to the right if that's the only child). */ while (node->left || node->right) if (node->left) node = node->left; else node = node->right; do { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (node->parent == NULL) return REG_NOERROR; prev = node; node = node->parent; } /* Go up while we have a node that is reached from the right. */ while (node->right == prev || node->right == NULL); node = node->right; } } static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node; for (node = root; ; ) { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Go to the left node, or up and to the right. */ if (node->left) node = node->left; else { bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; if (!node) return REG_NOERROR; } node = node->right; } } } /* Optimization pass: if a SUBEXP is entirely contained, strip it and tell re_search_internal to map the inner one's opr.idx to this one's. Adjust backreferences as well. Requires a preorder visit. */ static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == OP_BACK_REF && dfa->subexp_map) { int idx = node->token.opr.idx; node->token.opr.idx = dfa->subexp_map[idx]; dfa->used_bkref_map |= 1 << node->token.opr.idx; } else if (node->token.type == SUBEXP && node->left && node->left->token.type == SUBEXP) { Idx other_idx = node->left->token.opr.idx; node->left = node->left->left; if (node->left) node->left->parent = node; dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; if (other_idx < BITSET_WORD_BITS) dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); } return REG_NOERROR; } /* Lowering pass: Turn each SUBEXP node into the appropriate concatenation of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node) { regex_t *preg = (regex_t *) extra; reg_errcode_t err = REG_NOERROR; if (node->left && node->left->token.type == SUBEXP) { node->left = lower_subexp (&err, preg, node->left); if (node->left) node->left->parent = node; } if (node->right && node->right->token.type == SUBEXP) { node->right = lower_subexp (&err, preg, node->right); if (node->right) node->right->parent = node; } return err; } static bin_tree_t * lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) { re_dfa_t *dfa = preg->buffer; bin_tree_t *body = node->left; bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub /* We do not optimize empty subexpressions, because otherwise we may have bad CONCAT nodes with NULL children. This is obviously not very common, so we do not lose much. An example that triggers this case is the sed "script" /\(\)/x. */ && node->left != NULL && (node->token.opr.idx >= BITSET_WORD_BITS || !(dfa->used_bkref_map & ((bitset_word_t) 1 << node->token.opr.idx)))) return node->left; /* Convert the SUBEXP node to the concatenation of an OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; tree = create_tree (dfa, op, tree1, CONCAT); if (__glibc_unlikely (tree == NULL || tree1 == NULL || op == NULL || cls == NULL)) { *err = REG_ESPACE; return NULL; } op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; return tree; } /* Pass 1 in building the NFA: compute FIRST and create unlinked automaton nodes. Requires a postorder visit. */ static reg_errcode_t calc_first (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == CONCAT) { node->first = node->left->first; node->node_idx = node->left->node_idx; } else { node->first = node; node->node_idx = re_dfa_add_node (dfa, node->token); if (__glibc_unlikely (node->node_idx == -1)) return REG_ESPACE; if (node->token.type == ANCHOR) dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } /* Pass 2: compute NEXT on the tree. Preorder visit. */ static reg_errcode_t calc_next (void *extra, bin_tree_t *node) { switch (node->token.type) { case OP_DUP_ASTERISK: node->left->next = node; break; case CONCAT: node->left->next = node->right->first; node->right->next = node->next; break; default: if (node->left) node->left->next = node->next; if (node->right) node->right->next = node->next; break; } return REG_NOERROR; } /* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; Idx idx = node->node_idx; reg_errcode_t err = REG_NOERROR; switch (node->token.type) { case CONCAT: break; case END_OF_RE: DEBUG_ASSERT (node->next == NULL); break; case OP_DUP_ASTERISK: case OP_ALT: { Idx left, right; dfa->has_plural_match = 1; if (node->left != NULL) left = node->left->first->node_idx; else left = node->next->node_idx; if (node->right != NULL) right = node->right->first->node_idx; else right = node->next->node_idx; DEBUG_ASSERT (left > -1); DEBUG_ASSERT (right > -1); err = re_node_set_init_2 (dfa->edests + idx, left, right); } break; case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); break; case OP_BACK_REF: dfa->nexts[idx] = node->next->node_idx; if (node->token.type == OP_BACK_REF) err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); break; default: DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type)); dfa->nexts[idx] = node->next->node_idx; break; } return err; } /* Duplicate the epsilon closure of the node ROOT_NODE. Note that duplicated nodes have constraint INIT_CONSTRAINT in addition to their own constraint. */ static reg_errcode_t duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, Idx root_node, unsigned int init_constraint) { Idx org_node, clone_node; bool ok; unsigned int constraint = init_constraint; for (org_node = top_org_node, clone_node = top_clone_node;;) { Idx org_dest, clone_dest; if (dfa->nodes[org_node].type == OP_BACK_REF) { /* If the back reference epsilon-transit, its destination must also have the constraint. Then duplicate the epsilon closure of the destination of the back reference, and store it in edests of the back reference. */ org_dest = dfa->nexts[org_node]; re_node_set_empty (dfa->edests + clone_node); clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else if (dfa->edests[org_node].nelem == 0) { /* In case of the node can't epsilon-transit, don't duplicate the destination and store the original destination as the destination of the node. */ dfa->nexts[clone_node] = dfa->nexts[org_node]; break; } else if (dfa->edests[org_node].nelem == 1) { /* In case of the node can epsilon-transit, and it has only one destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* If the node is root_node itself, it means the epsilon closure has a loop. Then tie it to the destination of the root_node. */ if (org_node == root_node && clone_node != org_node) { ok = re_node_set_insert (dfa->edests + clone_node, org_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; break; } /* In case the node has another constraint, append it. */ constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else /* dfa->edests[org_node].nelem == 2 */ { /* In case of the node can epsilon-transit, and it has two destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* Search for a duplicated node which satisfies the constraint. */ clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else { /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_node = org_dest; clone_node = clone_dest; } return REG_NOERROR; } /* Search for a node which is duplicated from the node ORG_NODE, and satisfies the constraint CONSTRAINT. */ static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint) { Idx idx; for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) { if (org_node == dfa->org_indices[idx] && constraint == dfa->nodes[idx].constraint) return idx; /* Found. */ } return -1; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or -1 if insufficient storage is available. */ static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) { Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); if (__glibc_likely (dup_idx != -1)) { dfa->nodes[dup_idx].constraint = constraint; dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ dfa->org_indices[dup_idx] = org_idx; } return dup_idx; } static reg_errcode_t calc_inveclosure (re_dfa_t *dfa) { Idx src, idx; bool ok; for (idx = 0; idx < dfa->nodes_len; ++idx) re_node_set_init_empty (dfa->inveclosures + idx); for (src = 0; src < dfa->nodes_len; ++src) { Idx *elems = dfa->eclosures[src].elems; for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); if (__glibc_unlikely (! ok)) return REG_ESPACE; } } return REG_NOERROR; } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (re_dfa_t *dfa) { Idx node_idx; bool incomplete; DEBUG_ASSERT (dfa->nodes_len > 0); incomplete = false; /* For each nodes, calculate epsilon closure. */ for (node_idx = 0; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == dfa->nodes_len) { if (!incomplete) break; incomplete = false; node_idx = 0; } DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1); /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of 'node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) { reg_errcode_t err; Idx i; re_node_set eclosure; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* An epsilon closure includes itself. */ eclosure.elems[eclosure.nelem++] = node; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; /* If the current node has constraints, duplicate all nodes since they must inherit the constraints. */ if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { err = duplicate_node_closure (dfa, node, node, node, dfa->nodes[node].constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Expand each epsilon destination nodes. */ if (IS_EPSILON_NODE(dfa->nodes[node].type)) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; Idx edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of 'edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = true; continue; } /* If we haven't calculated the epsilon closure of 'edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of 'edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* If the epsilon closure of 'edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static void fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) { re_string_skip_bytes (input, peek_token (result, input, syntax)); } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; token->word_char = 0; #ifdef RE_ENABLE_I18N token->mb_partial = 0; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } #endif if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input) + 1); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else #endif token->word_char = IS_WORD_CHAR (c2) != 0; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '1'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = NOT_WORD_DELIM; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case 's': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_SPACE; break; case 'S': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTSPACE; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else #endif token->word_char = IS_WORD_CHAR (token->opr.c); switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') break; } token->type = ANCHOR; token->opr.ctx_type = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.ctx_type = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } #endif /* RE_ENABLE_I18N */ if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input)) { /* In this case, '\' escape a character. */ unsigned char c2; re_string_skip_bytes (input, 1); c2 = re_string_peek_byte (input, 0); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; if (re_string_cur_idx (input) + 1 < re_string_length (input)) c2 = re_string_peek_byte (input, 1); else c2 = 0; token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } FALLTHROUGH; default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case '-': token->type = OP_CHARSET_RANGE; break; case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error occurs, ERR is set by error code, and return NULL. This function build the following tree, from regular expression <reg_exp>: CAT / \ / \ <reg_exp> EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; eor = create_tree (dfa, NULL, NULL, END_OF_RE); if (tree != NULL) root = create_tree (dfa, tree, eor, CONCAT); else root = eor; if (__glibc_unlikely (eor == NULL || root == NULL)) { *err = REG_ESPACE; return NULL; } return root; } /* This function build the following tree, from regular expression <branch1>|<branch2>: ALT / \ / \ <branch1> <branch2> ALT means alternative, which represents the operator '|'. */ static bin_tree_t * parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *branch = NULL; bitset_word_t initial_bkref_map = dfa->completed_bkref_map; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type == OP_ALT) { fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; dfa->completed_bkref_map = initial_bkref_map; branch = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } dfa->completed_bkref_map |= accumulated_bkref_map; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } return tree; } /* This function build the following tree, from regular expression <exp1><exp2>: CAT / \ / \ <exp1> <exp2> CAT means concatenation. */ static bin_tree_t * parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { bin_tree_t *tree, *expr; re_dfa_t *dfa = preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { expr = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && expr != NULL) { bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); if (newtree == NULL) { postorder (expr, free_tree, NULL); postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } tree = newtree; } else if (tree == NULL) tree = expr; /* Otherwise expr == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; fetch_token (token, regexp, syntax); mbc_remain = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree, mbc_remain, CONCAT); if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } } #endif break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_BACK_REF: if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_DUP) { *err = REG_BADRPT; return NULL; } FALLTHROUGH; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: if (syntax & RE_CONTEXT_INVALID_OPS) { *err = REG_BADRPT; return NULL; } else if (syntax & RE_CONTEXT_INDEP_OPS) { fetch_token (token, regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } FALLTHROUGH; case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } FALLTHROUGH; case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; /* mb_partial and word_char bits should be initialized already by peek_token. */ tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } break; case ANCHOR: if ((token->opr.ctx_type & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) && dfa->word_ops_used == 0) init_word_char (dfa); if (token->opr.ctx_type == WORD_DELIM || token->opr.ctx_type == NOT_WORD_DELIM) { bin_tree_t *tree_first, *tree_last; if (token->opr.ctx_type == WORD_DELIM) { token->opr.ctx_type = WORD_FIRST; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = WORD_LAST; } else { token->opr.ctx_type = INSIDE_WORD; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = INSIDE_NOTWORD; } tree_last = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree_first, tree_last, OP_ALT); if (__glibc_unlikely (tree_first == NULL || tree_last == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>", it must not be "<ANCHOR(^)><REPEAT(*)>". */ fetch_token (token, regexp, syntax); return tree; case OP_PERIOD: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) dfa->has_mb_node = 1; break; case OP_WORD: case OP_NOTWORD: tree = build_charclass_op (dfa, regexp->trans, "alnum", "_", token->type == OP_NOTWORD, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, "space", "", token->type == OP_NOTSPACE, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ DEBUG_ASSERT (false); return NULL; } fetch_token (token, regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } } return tree; } /* This function build the following tree, from regular expression (<reg_exp>): SUBEXP | <reg_exp> */ static bin_tree_t * parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; size_t cur_nsub; cur_nsub = preg->re_nsub++; fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } tree->token.opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { bin_tree_t *tree = NULL, *old_tree = NULL; Idx i, start, end, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { end = 0; start = fetch_number (regexp, token, syntax); if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* <re>{} is invalid. */ return NULL; } } if (__glibc_likely (start != -2)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (__glibc_unlikely (start == -2 || end == -2)) { /* Invalid sequence. */ if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) { if (token->type == END_OF_RE) *err = REG_EBRACE; else *err = REG_BADBR; return NULL; } /* If the syntax bit is set, rollback. */ re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; /* mb_partial and word_char bits should be already initialized by peek_token. */ return elem; } if (__glibc_unlikely ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) { *err = REG_ESIZE; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : -1; } fetch_token (token, regexp, syntax); if (__glibc_unlikely (elem == NULL)) return NULL; if (__glibc_unlikely (start == 0 && end == 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ if (__glibc_unlikely (start > 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); if (__glibc_unlikely (elem == NULL)) goto parse_dup_op_espace; old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) { uintptr_t subidx = elem->token.opr.idx; postorder (elem, mark_opt_subexp, (void *) subidx); } tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; /* This loop is actually executed only when end != -1, to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != -1) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; } if (old_tree) tree = create_tree (dfa, old_tree, tree, CONCAT); return tree; parse_dup_op_espace: *err = REG_ESPACE; return NULL; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC # ifdef RE_ENABLE_I18N /* Convert the byte B to the corresponding wide character. In a unibyte locale, treat B as itself. In a multibyte locale, return WEOF if B is an encoding error. */ static wint_t parse_byte (unsigned char b, re_charset_t *mbcset) { return mbcset == NULL ? b : __btowc (b); } # endif /* Local function for parse_bracket_exp only used in case of NOT _LIBC. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_range_exp (const reg_syntax_t syntax, bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, const bracket_elem_t *start_elem, const bracket_elem_t *end_elem) # else /* not RE_ENABLE_I18N */ build_range_exp (const reg_syntax_t syntax, bitset_t sbcset, const bracket_elem_t *start_elem, const bracket_elem_t *end_elem) # endif /* not RE_ENABLE_I18N */ { unsigned int start_ch, end_ch; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (__glibc_unlikely ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1))) return REG_ECOLLATE; # ifdef RE_ENABLE_I18N { wchar_t wc; wint_t start_wc; wint_t end_wc; start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? parse_byte (start_ch, mbcset) : start_elem->opr.wch); end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? parse_byte (end_ch, mbcset) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, for !_LIBC we have no collation elements: if the character set is single byte, the single byte character set that we build below suffices. parse_bracket_exp passes no MBCSET if dfa->mb_cur_max == 1. */ if (mbcset) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) { re_free (new_array_start); re_free (new_array_end); return REG_ESPACE; } mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; } /* Build the table for single byte characters. */ for (wc = 0; wc < SBC_MAX; ++wc) { if (start_wc <= wc && wc <= end_wc) bitset_set (sbcset, wc); } } # else /* not RE_ENABLE_I18N */ { unsigned int ch; start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); if (start_ch > end_ch) return REG_ERANGE; /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ++ch) if (start_ch <= ch && ch <= end_ch) bitset_set (sbcset, ch); } # endif /* not RE_ENABLE_I18N */ return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name) # else /* not RE_ENABLE_I18N */ build_collating_symbol (bitset_t sbcset, const unsigned char *name) # endif /* not RE_ENABLE_I18N */ { size_t name_len = strlen ((const char *) name); if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { #ifdef _LIBC const unsigned char *collseqmb; const char *collseqwc; uint32_t nrules; int32_t table_size; const int32_t *symb_table; const unsigned char *extra; /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry corresponding to NAME. Return the index of the symbol in the SYMB_TABLE, or -1 if not found. */ auto inline int32_t __attribute__ ((always_inline)) seek_collating_symbol_entry (const unsigned char *name, size_t name_len) { int32_t elem; for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { int32_t idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; if (/* Compare the length of the name. */ name_len == extra[idx] /* Compare the name. */ && memcmp (name, &extra[idx + 1], name_len) == 0) /* Yep, this is the entry. */ return elem; } return -1; } /* Local function for parse_bracket_exp used in _LIBC environment. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ auto inline unsigned int __attribute__ ((always_inline)) lookup_collation_sequence_value (bracket_elem_t *br_elem) { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return __collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { if (nrules != 0) return __collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ auto inline reg_errcode_t __attribute__ ((always_inline)) build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem) { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* FIXME: Implement rational ranges here, too. */ start_collseq = lookup_collation_sequence_value (start_elem); end_collseq = lookup_collation_sequence_value (end_elem); /* Check start/end collation sequence values. */ if (__glibc_unlikely (start_collseq == UINT_MAX || end_collseq == UINT_MAX)) return REG_ECOLLATE; if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, if we have no collation elements, and the character set is single byte, the single byte character set that we build below suffices. */ if (nrules > 0 || dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; } /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ auto inline reg_errcode_t __attribute__ ((always_inline)) build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name) { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, new_coll_sym_alloc); if (__glibc_unlikely (new_coll_syms == NULL)) return REG_ESPACE; mbcset->coll_syms = new_coll_syms; *coll_sym_alloc = new_coll_sym_alloc; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; return REG_NOERROR; } else { if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif re_token_t br_token; re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; Idx equiv_class_alloc = 0, char_class_alloc = 0; #endif /* not RE_ENABLE_I18N */ bool non_match = false; bin_tree_t *work_tree; int token_len; bool first_round = true; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); #endif /* RE_ENABLE_I18N */ #ifdef RE_ENABLE_I18N if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) #else if (__glibc_unlikely (sbcset == NULL)) #endif /* RE_ENABLE_I18N */ { re_free (sbcset); #ifdef RE_ENABLE_I18N re_free (mbcset); #endif *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { #ifdef RE_ENABLE_I18N mbcset->non_match = 1; #endif /* not RE_ENABLE_I18N */ non_match = true; if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\n'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0; bool is_range_exp = false; re_token_t token2; start_elem.opr.name = start_name_buf; start_elem.type = COLL_SYM; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } first_round = false; /* Get information about the next token. We need it in any case. */ token_len = peek_token_bracket (token, regexp, syntax); /* Do not check for ranges if we know they are not allowed. */ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) { if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (__glibc_unlikely (token2.type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = true; } } if (is_range_exp == true) { end_elem.opr.name = end_name_buf; end_elem.type = COLL_SYM; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); #ifdef _LIBC *err = build_range_exp (sbcset, mbcset, &range_alloc, &start_elem, &end_elem); #else # ifdef RE_ENABLE_I18N *err = build_range_exp (syntax, sbcset, dfa->mb_cur_max > 1 ? mbcset : NULL, &range_alloc, &start_elem, &end_elem); # else *err = build_range_exp (syntax, sbcset, &start_elem, &end_elem); # endif #endif /* RE_ENABLE_I18N */ if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; #ifdef RE_ENABLE_I18N case MB_CHAR: /* Check whether the array has enough space. */ if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) { wchar_t *new_mbchars; /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ new_mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (__glibc_unlikely (new_mbchars == NULL)) goto parse_bracket_exp_espace; mbcset->mbchars = new_mbchars; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; #endif /* RE_ENABLE_I18N */ case EQUIV_CLASS: *err = build_equiv_class (sbcset, #ifdef RE_ENABLE_I18N mbcset, &equiv_class_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, #ifdef RE_ENABLE_I18N mbcset, &coll_sym_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: *err = build_charclass (regexp->trans, sbcset, #ifdef RE_ENABLE_I18N mbcset, &char_class_alloc, #endif /* RE_ENABLE_I18N */ (const char *) start_elem.opr.name, syntax); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; default: DEBUG_ASSERT (false); break; } } if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); #ifdef RE_ENABLE_I18N /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes || mbcset->non_match))) { bin_tree_t *mbc_tree; int sbc_idx; /* Build a tree for complex bracket. */ dfa->has_mb_node = 1; br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto parse_bracket_exp_espace; for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) if (sbcset[sbc_idx]) break; /* If there are no bits set in sbcset, there is no point of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ if (sbc_idx < BITSET_WORDS) { /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } else { re_free (sbcset); work_tree = mbc_tree; } } else #endif /* not RE_ENABLE_I18N */ { #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } return work_tree; parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen) { #ifdef RE_ENABLE_I18N int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) { /* A '-' must only appear as anything but a range indicator before the closing bracket. Everything else is an error. */ re_token_t token2; (void) peek_token_bracket (&token2, regexp, syntax); if (token2.type != OP_CLOSE_BRACKET) /* The actual error value is not standardized since this whole case is undefined. But ERANGE makes good sense. */ return REG_ERANGE; } elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [:<character_class>:], [.<collating_element>.], and [=<equivalent_class>=]. */ static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token) { unsigned char ch, delim = token->opr.c; int i = 0; if (re_string_eoi(regexp)) return REG_EBRACK; for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name) #else /* not RE_ENABLE_I18N */ build_equiv_class (bitset_t sbcset, const unsigned char *name) #endif /* not RE_ENABLE_I18N */ { #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (table, indirect, extra, &cp, -1); if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matching table for this equivalence class. */ len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (table, indirect, extra, &cp, 1); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; /* Compare only if the length matches and the collation rule index is the same. */ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) && memcmp (weights + (idx1 & 0xffffff) + 1, weights + (idx2 & 0xffffff) + 1, len) == 0) bitset_set (sbcset, ch); } /* Check whether the array has enough space. */ if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, new_equiv_class_alloc); if (__glibc_unlikely (new_equiv_classes == NULL)) return REG_ESPACE; mbcset->equiv_classes = new_equiv_classes; *equiv_class_alloc = new_equiv_class_alloc; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC */ { if (__glibc_unlikely (strlen ((const char *) name) != 1)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax) #else /* not RE_ENABLE_I18N */ build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, const char *class_name, reg_syntax_t syntax) #endif /* not RE_ENABLE_I18N */ { int i; const char *name = class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; #ifdef RE_ENABLE_I18N /* Check the space of the arrays. */ if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, new_char_class_alloc); if (__glibc_unlikely (new_char_classes == NULL)) return REG_ESPACE; mbcset->char_classes = new_char_classes; *char_class_alloc = new_char_class_alloc; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #endif /* RE_ENABLE_I18N */ #define BUILD_CHARCLASS_LOOP(ctype_func) \ do { \ if (__glibc_unlikely (trans != NULL)) \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, trans[i]); \ } \ else \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } \ } while (0) if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum); else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl); else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower); else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace); else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha); else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit); else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint); else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper); else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank); else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph); else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct); else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit); else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err) { re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; Idx alloc = 0; #endif /* not RE_ENABLE_I18N */ reg_errcode_t ret; bin_tree_t *tree; sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (sbcset == NULL)) { *err = REG_ESPACE; return NULL; } #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (mbcset == NULL)) { re_free (sbcset); *err = REG_ESPACE; return NULL; } mbcset->non_match = non_match; #endif /* RE_ENABLE_I18N */ /* We don't care the syntax in this case. */ ret = build_charclass (trans, sbcset, #ifdef RE_ENABLE_I18N mbcset, &alloc, #endif /* RE_ENABLE_I18N */ class_name, 0); if (__glibc_unlikely (ret != REG_NOERROR)) { re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = ret; return NULL; } /* \w match '_' also. */ for (; *extra; extra++) bitset_set (sbcset, *extra); /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); #ifdef RE_ENABLE_I18N /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); #endif /* Build a tree for simple bracket. */ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset }; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (tree == NULL)) goto build_word_op_espace; #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (__glibc_likely (mbc_tree != NULL)) return tree; } else { free_charset (mbcset); return tree; } #else /* not RE_ENABLE_I18N */ return tree; #endif /* not RE_ENABLE_I18N */ build_word_op_espace: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from 'input', and return the number. Return -1 if the number field is empty like "{,1}". Return RE_DUP_MAX + 1 if the number field is too large. Return -2 if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = -1; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (__glibc_unlikely (token->type == END_OF_RE)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : num == -1 ? c - '0' : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); } return num; } #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); # ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); # endif re_free (cset->range_starts); re_free (cset->range_ends); re_free (cset->char_classes); re_free (cset); } #endif /* RE_ENABLE_I18N */ /* Functions for binary tree operation. */ /* Create a tree node. */ static bin_tree_t * create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type) { re_token_t t = { .type = type }; return create_token_tree (dfa, left, right, &t); } static bin_tree_t * create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token) { bin_tree_t *tree; if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) { bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); if (storage == NULL) return NULL; storage->next = dfa->str_tree_storage; dfa->str_tree_storage = storage; dfa->str_tree_storage_idx = 0; } tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; tree->parent = NULL; tree->left = left; tree->right = right; tree->token = *token; tree->token.duplicated = 0; tree->token.opt_subexp = 0; tree->first = NULL; tree->next = NULL; tree->node_idx = -1; if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Mark the tree SRC as an optional subexpression. To be called from preorder or postorder. */ static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { Idx idx = (uintptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; return REG_NOERROR; } /* Free the allocated memory inside NODE. */ static void free_token (re_token_t *node) { #ifdef RE_ENABLE_I18N if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else #endif /* RE_ENABLE_I18N */ if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); } /* Worker function for tree walking. Free the allocated memory inside NODE and its children. */ static reg_errcode_t free_tree (void *extra, bin_tree_t *node) { free_token (&node->token); return REG_NOERROR; } /* Duplicate the node SRC, and return new node. This is a preorder visit similar to the one implemented by the generic visitor, but we need more infrastructure to maintain two parallel trees --- so, it's easier to duplicate. */ static bin_tree_t * duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) { const bin_tree_t *node; bin_tree_t *dup_root; bin_tree_t **p_new = &dup_root, *dup_node = root->parent; for (node = root; ; ) { /* Create a new tree and link it back to the current parent. */ *p_new = create_token_tree (dfa, NULL, NULL, &node->token); if (*p_new == NULL) return NULL; (*p_new)->parent = dup_node; (*p_new)->token.duplicated = 1; dup_node = *p_new; /* Go to the left node, or up and to the right. */ if (node->left) { node = node->left; p_new = &dup_node->left; } else { const bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; dup_node = dup_node->parent; if (!node) return dup_root; } node = node->right; p_new = &dup_node->right; } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regex-quote.c�����������������������������������������������������������0000664�0000000�0000000�00000013071�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a regular expression from a literal string. Copyright (C) 1995, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2010. This 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> /* Specification. */ #include "regex-quote.h" #include <string.h> #include "mbuiter.h" #include "xalloc.h" /* Characters that are special in a BRE. */ static const char bre_special[] = "$^.*[]\\"; /* Characters that are special in an ERE. */ static const char ere_special[] = "$^.*[]\\+?{}()|"; struct regex_quote_spec regex_quote_spec_posix (int cflags, bool anchored) { struct regex_quote_spec result; strcpy (result.special, cflags != 0 ? ere_special : bre_special); result.multibyte = true; result.anchored = anchored; return result; } /* Syntax bit values, defined in GNU <regex.h>. We don't include it here, otherwise this module would need to depend on gnulib module 'regex'. */ #define RE_BK_PLUS_QM 0x00000002 #define RE_INTERVALS 0x00000200 #define RE_LIMITED_OPS 0x00000400 #define RE_NEWLINE_ALT 0x00000800 #define RE_NO_BK_BRACES 0x00001000 #define RE_NO_BK_PARENS 0x00002000 #define RE_NO_BK_VBAR 0x00008000 struct regex_quote_spec regex_quote_spec_gnu (unsigned long /*reg_syntax_t*/ syntax, bool anchored) { struct regex_quote_spec result; char *p; p = result.special; memcpy (p, bre_special, sizeof (bre_special) - 1); p += sizeof (bre_special) - 1; if ((syntax & RE_LIMITED_OPS) == 0 && (syntax & RE_BK_PLUS_QM) == 0) { *p++ = '+'; *p++ = '?'; } if ((syntax & RE_INTERVALS) != 0 && (syntax & RE_NO_BK_BRACES) != 0) { *p++ = '{'; *p++ = '}'; } if ((syntax & RE_NO_BK_PARENS) != 0) { *p++ = '('; *p++ = ')'; } if ((syntax & RE_LIMITED_OPS) == 0 && (syntax & RE_NO_BK_VBAR) != 0) *p++ = '|'; if ((syntax & RE_NEWLINE_ALT) != 0) *p++ = '\n'; *p = '\0'; result.multibyte = true; result.anchored = anchored; return result; } /* Characters that are special in a PCRE. */ static const char pcre_special[] = "$^.*[]\\+?{}()|"; /* Options bit values, defined in <pcre.h>. We don't include it here, because it is not a standard header. */ #define PCRE_ANCHORED 0x00000010 #define PCRE_EXTENDED 0x00000008 struct regex_quote_spec regex_quote_spec_pcre (int options, bool anchored) { struct regex_quote_spec result; char *p; p = result.special; memcpy (p, pcre_special, sizeof (pcre_special) - 1); p += sizeof (pcre_special) - 1; if (options & PCRE_EXTENDED) { *p++ = ' '; *p++ = '\t'; *p++ = '\n'; *p++ = '\v'; *p++ = '\f'; *p++ = '\r'; *p++ = '#'; } *p = '\0'; /* PCRE regular expressions consist of UTF-8 characters of options contains PCRE_UTF8 and of single bytes otherwise. */ result.multibyte = false; /* If options contains PCRE_ANCHORED, the anchoring is implicit. */ result.anchored = (options & PCRE_ANCHORED ? 0 : anchored); return result; } size_t regex_quote_length (const char *string, const struct regex_quote_spec *spec) { const char *special = spec->special; size_t length; length = 0; if (spec->anchored) length += 2; /* for '^' at the beginning and '$' at the end */ if (spec->multibyte) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { /* We know that special contains only ASCII characters. */ if (mb_len (mbui_cur (iter)) == 1 && strchr (special, * mbui_cur_ptr (iter))) length += 1; length += mb_len (mbui_cur (iter)); } } else { const char *iter; for (iter = string; *iter != '\0'; iter++) { if (strchr (special, *iter)) length += 1; length += 1; } } return length; } char * regex_quote_copy (char *p, const char *string, const struct regex_quote_spec *spec) { const char *special = spec->special; if (spec->anchored) *p++ = '^'; if (spec->multibyte) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { /* We know that special contains only ASCII characters. */ if (mb_len (mbui_cur (iter)) == 1 && strchr (special, * mbui_cur_ptr (iter))) *p++ = '\\'; memcpy (p, mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); p += mb_len (mbui_cur (iter)); } } else { const char *iter; for (iter = string; *iter != '\0'; iter++) { if (strchr (special, *iter)) *p++ = '\\'; *p++ = *iter++; } } if (spec->anchored) *p++ = '$'; return p; } char * regex_quote (const char *string, const struct regex_quote_spec *spec) { size_t length = regex_quote_length (string, spec); char *result = XNMALLOC (length + 1, char); char *p; p = result; p = regex_quote_copy (p, string, spec); *p = '\0'; return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regex-quote.h�����������������������������������������������������������0000664�0000000�0000000�00000007755�14110572173�0017501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a regular expression from a literal string. Copyright (C) 1995, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2010. This 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 _REGEX_QUOTE_H #define _REGEX_QUOTE_H #include <stdbool.h> #include <stdlib.h> /* Specifies a quotation task for converting a fixed string to a regular expression pattern. */ struct regex_quote_spec { /* True if the regular expression pattern consists of multibyte characters (in the encoding given by the LC_CTYPE category of the locale), false if it consists of single bytes or UTF-8 characters. */ unsigned int /*bool*/ multibyte : 1; /* True if the regular expression pattern shall match only entire lines. */ unsigned int /*bool*/ anchored : 1; /* Set of characters that need to be escaped (all ASCII), as a NUL-terminated string. */ char special[30 + 1]; }; /* Creates a quotation task that produces a POSIX regular expression, that is, a pattern that can be compiled with regcomp(). CFLAGS can be 0 or REG_EXTENDED. If it is 0, the result is a Basic Regular Expression (BRE) <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03>. If it is REG_EXTENDED, the result is an Extended Regular Expression (ERE) <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04>. If ANCHORED is false, the regular expression will match substrings of lines. If ANCHORED is true, it will match only complete lines, */ extern struct regex_quote_spec regex_quote_spec_posix (int cflags, bool anchored); /* Creates a quotation task that produces a regular expression that can be compiled with the GNU API function re_compile_pattern(). SYNTAX describes the syntax of the regular expression (such as RE_SYNTAX_POSIX_BASIC, RE_SYNTAX_POSIX_EXTENDED, RE_SYNTAX_EMACS, all defined in <regex.h>). It must be the same value as 're_syntax_options' at the moment of the re_compile_pattern() call. If ANCHORED is false, the regular expression will match substrings of lines. If ANCHORED is true, it will match only complete lines, */ extern struct regex_quote_spec regex_quote_spec_gnu (unsigned long /*reg_syntax_t*/ syntax, bool anchored); /* Creates a quotation task that produces a PCRE regular expression, that is, a pattern that can be compiled with pcre_compile(). OPTIONS is the same value as the second argument passed to pcre_compile(). If ANCHORED is false, the regular expression will match substrings of lines. If ANCHORED is true, it will match only complete lines, */ extern struct regex_quote_spec regex_quote_spec_pcre (int options, bool anchored); /* Returns the number of bytes needed for the quoted string. */ extern size_t regex_quote_length (const char *string, const struct regex_quote_spec *spec); /* Copies the quoted string to p and returns the incremented p. There must be room for regex_quote_length (string, spec) + 1 bytes at p. */ extern char * regex_quote_copy (char *restrict p, const char *string, const struct regex_quote_spec *spec); /* Returns the freshly allocated quoted string. */ extern char * regex_quote (const char *string, const struct regex_quote_spec *spec) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* _REGEX_QUOTE_H */ �������������������gnulib-20210822~d383792/lib/regex.c�����������������������������������������������������������������0000664�0000000�0000000�00000006155�14110572173�0016332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 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/>. */ #define __STDC_WANT_IEC_60559_BFP_EXT__ #ifndef _LIBC # include <libc-config.h> # if __GNUC_PREREQ (4, 6) # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # endif # if __GNUC_PREREQ (4, 3) # pragma GCC diagnostic ignored "-Wold-style-definition" # pragma GCC diagnostic ignored "-Wtype-limits" # endif #endif /* Make sure no one compiles this code with a C++ compiler. */ #if defined __cplusplus && defined _LIBC # error "This is C code, use a C compiler" #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # include "../locale/localeinfo.h" #endif /* On some systems, limits.h sets RE_DUP_MAX to a lower value than GNU regex allows. Include it before <regex.h>, which correctly #undefs RE_DUP_MAX and sets it to the right value. */ #include <limits.h> #include <regex.h> #include "regex_internal.h" #include "regex_internal.c" #include "regcomp.c" #include "regexec.c" /* Binary backward compatibility. */ #if _LIBC # include <shlib-compat.h> # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regex.h�����������������������������������������������������������������0000664�0000000�0000000�00000060445�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-2021 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 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 _REGEX_H #define _REGEX_H 1 #include <sys/types.h> /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* Define __USE_GNU to declare GNU extensions that violate the POSIX name space rules. */ #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif #ifdef _REGEX_LARGE_OFFSETS /* Use types and values that are wide enough to represent signed and unsigned byte offsets in memory. This currently works only when the regex code is used outside of the GNU C library; it is not yet supported within glibc itself, and glibc users should not define _REGEX_LARGE_OFFSETS. */ /* The type of object sizes. */ typedef size_t __re_size_t; /* The type of object sizes, in places where the traditional code uses unsigned long int. */ typedef size_t __re_long_size_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef unsigned int __re_size_t; typedef unsigned long int __re_long_size_t; #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ # define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then '{...}' defines an interval, and \{ and \} are literals. If not set, then '\{...\}' defines an interval. */ # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \<digit> matches <digit>. If not set, then \<digit> is a back-reference. */ # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ # define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only for ^, because it is difficult to scan the regex backwards to find whether ^ should be special. */ # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) /* If this bit is set, then \{ cannot be first in a regex or immediately after an alternation, open-group or \} operator. */ # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) /* If this bit is set, then no_sub will be set to 1 during re_compile_pattern. */ # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) #endif /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; #ifdef __USE_GNU /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ # define RE_SYNTAX_EMACS 0 # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_CHAR_CLASSES \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INVALID_INTERVAL_ORD) \ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) # define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS \ | RE_INVALID_INTERVAL_ORD) # define RE_SYNTAX_GREP \ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) # define RE_SYNTAX_EGREP \ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) /* POSIX grep -E behavior is no longer incompatible with GNU. */ # define RE_SYNTAX_POSIX_EGREP \ RE_SYNTAX_EGREP /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ # define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) # define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) # define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. POSIX-conforming systems might define this in <limits.h>, but we want our value, so remove any previous define. */ # ifdef _REGEX_INCLUDE_LIMITS_H # include <limits.h> # endif # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored the counter as a 2-byte signed integer. This is no longer true, so RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. However, there would be a huge performance problem if someone actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (1 << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (1 << 2) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (1 << 3) /* POSIX 'eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* Use PMATCH[0] to delimit the start and end of the search in the buffer. */ #define REG_STARTEND (1 << 2) /* If any error codes are removed, changed, or added, update the '__re_error_msgid' table in regcomp.c. */ typedef enum { _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _REG_NOERROR = 0, /* Success. */ _REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ _REG_BADPAT, /* Invalid pattern. */ _REG_ECOLLATE, /* Invalid collating element. */ _REG_ECTYPE, /* Invalid character class name. */ _REG_EESCAPE, /* Trailing backslash. */ _REG_ESUBREG, /* Invalid back reference. */ _REG_EBRACK, /* Unmatched left bracket. */ _REG_EPAREN, /* Parenthesis imbalance. */ _REG_EBRACE, /* Unmatched \{. */ _REG_BADBR, /* Invalid contents of \{\}. */ _REG_ERANGE, /* Invalid range end. */ _REG_ESPACE, /* Ran out of memory. */ _REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ _REG_EEND, /* Premature end. */ _REG_ESIZE, /* Too large (e.g., repeat count too large). */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K # define REG_ENOSYS _REG_ENOSYS #endif #define REG_NOERROR _REG_NOERROR #define REG_NOMATCH _REG_NOMATCH #define REG_BADPAT _REG_BADPAT #define REG_ECOLLATE _REG_ECOLLATE #define REG_ECTYPE _REG_ECTYPE #define REG_EESCAPE _REG_EESCAPE #define REG_ESUBREG _REG_ESUBREG #define REG_EBRACK _REG_EBRACK #define REG_EPAREN _REG_EPAREN #define REG_EBRACE _REG_EBRACE #define REG_BADBR _REG_BADBR #define REG_ERANGE _REG_ERANGE #define REG_ESPACE _REG_ESPACE #define REG_BADRPT _REG_BADRPT #define REG_EEND _REG_EEND #define REG_ESIZE _REG_ESIZE #define REG_ERPAREN _REG_ERPAREN /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', and 'translate' can be set. After the pattern has been compiled, the fields 're_nsub', 'not_bol' and 'not_eol' are available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define __RE_TRANSLATE_TYPE unsigned char * # ifdef __USE_GNU # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE # endif #endif #ifdef __USE_GNU # define __REPB_PREFIX(name) name #else # define __REPB_PREFIX(name) __##name #endif struct re_pattern_buffer { /* Space that holds the compiled pattern. The type 'struct re_dfa_t' is private and is not declared here. */ struct re_dfa_t *__REPB_PREFIX(buffer); /* Number of bytes to which 'buffer' points. */ __re_long_size_t __REPB_PREFIX(allocated); /* Number of bytes actually used in 'buffer'. */ __re_long_size_t __REPB_PREFIX(used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t __REPB_PREFIX(syntax); /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *__REPB_PREFIX(fastmap); /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in 're_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see 're_compile_fastmap' (the "duplicate" case). */ unsigned __REPB_PREFIX(can_be_null) : 1; /* If REGS_UNALLOCATED, allocate space in the 'regs' structure for 'max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #ifdef __USE_GNU # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned __REPB_PREFIX(regs_allocated) : 2; /* Set to zero when 're_compile_pattern' compiles a pattern; set to one by 're_compile_fastmap' if it updates the fastmap. */ unsigned __REPB_PREFIX(fastmap_accurate) : 1; /* If set, 're_match_2' does not return information about subexpressions. */ unsigned __REPB_PREFIX(no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned __REPB_PREFIX(not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned __REPB_PREFIX(not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned __REPB_PREFIX(newline_anchor) : 1; }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ #ifdef _REGEX_LARGE_OFFSETS /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not visible here, so use ssize_t. */ typedef ssize_t regoff_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef int regoff_t; #endif #ifdef __USE_GNU /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { __re_size_t num_regs; regoff_t *start; regoff_t *end; }; /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 're_match_2' returns information about at least this many registers the first time a 'regs' structure is passed. */ # ifndef RE_NREGS # define RE_NREGS 30 # endif #endif /* POSIX specification for registers. Aside from the different names than 're_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ #ifdef __USE_GNU /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the 're_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global 're_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. To free the allocated storage, you must call 'regfree' on BUFFER. Note that the translate table must either have been initialized by 'regcomp', with a malloc'ed value, or set to NULL before calling 'regfree'. */ extern const char *re_compile_pattern (const char *__pattern, size_t __length, struct re_pattern_buffer *__buffer); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, regoff_t __range, struct re_registers *__regs); /* Like 're_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, regoff_t __range, struct re_registers *__regs, regoff_t __stop); /* Like 're_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, struct re_registers *__regs); /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, struct re_registers *__regs, regoff_t __stop); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least 'NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags); extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size); extern void regfree (regex_t *__preg); #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regex_internal.c��������������������������������������������������������0000664�0000000�0000000�00000140461�14110572173�0020225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 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/>. */ static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa); static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash); static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash); static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len); #ifdef RE_ENABLE_I18N static void build_wcs_buffer (re_string_t *pstr); static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); #endif /* RE_ENABLE_I18N */ static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) __attribute__ ((pure)); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; Idx init_buf_len; /* Ensure at least one character fits into the buffers. */ if (init_len < dfa->mb_cur_max) init_len = dfa->mb_cur_max; init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase, dfa); ret = re_string_realloc_buffers (pstr, init_buf_len); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; pstr->word_char = dfa->word_char; pstr->word_ops_used = dfa->word_ops_used; pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; pstr->valid_raw_len = pstr->valid_len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_construct (re_string_t *pstr, const char *str, Idx len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; memset (pstr, '\0', sizeof (re_string_t)); re_string_construct_common (str, len, pstr, trans, icase, dfa); if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; if (icase) { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { while (1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (pstr->valid_raw_len >= len) break; if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) break; ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } } else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (trans != NULL) re_string_translate_buffer (pstr); else { pstr->valid_len = pstr->bufs_len; pstr->valid_raw_len = pstr->bufs_len; } } } return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { wint_t *new_wcs; /* Avoid overflow in realloc. */ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (__glibc_unlikely (new_wcs == NULL)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (__glibc_unlikely (new_offsets == NULL)) return REG_ESPACE; pstr->offsets = new_offsets; } } #endif /* RE_ENABLE_I18N */ if (pstr->mbs_allocated) { unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (__glibc_unlikely (new_mbs == NULL)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->raw_len = len; pstr->trans = trans; pstr->icase = icase; pstr->mbs_allocated = (trans != NULL || icase); pstr->mb_cur_max = dfa->mb_cur_max; pstr->is_utf8 = dfa->is_utf8; pstr->map_notascii = dfa->map_notascii; pstr->stop = pstr->len; pstr->raw_stop = pstr->stop; } #ifdef RE_ENABLE_I18N /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3> Then wide character buffer will be: <wc1> , WEOF , <wc2> , WEOF , <wc3> We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max); #else unsigned char buf[64]; #endif mbstate_t prev_st; Idx byte_idx, end_idx, remain_len; size_t mbclen; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; const char *p; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; /* Apply the translation if we need. */ if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (__glibc_unlikely (pstr->trans != NULL)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } else if (__glibc_unlikely (mbclen == (size_t) -2)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static reg_errcode_t __attribute_warn_unused_result__ build_wcs_upper_buffer (re_string_t *pstr) { mbstate_t prev_st; Idx src_idx, byte_idx, end_idx, remain_len; size_t mbclen; #ifdef _LIBC char buf[MB_LEN_MAX]; DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX); #else char buf[64]; #endif byte_idx = pstr->valid_len; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; /* The following optimization assumes that ASCII characters can be mapped to wide characters with a simple cast. */ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) { while (byte_idx < end_idx) { wchar_t wc; unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (isascii (ch) && mbsinit (&pstr->cur_state)) { /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ wchar_t wcu = __towupper (ch); if (isascii (wcu)) { pstr->mbs[byte_idx] = wcu; pstr->wcs[byte_idx] = wcu; byte_idx++; continue; } } remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb (buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else { src_idx = byte_idx; goto offsets_needed; } } else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; return REG_NOERROR; } else for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) { wchar_t wc; const char *p; offsets_needed: remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; buf[i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else if (mbcdlen != (size_t) -1) { size_t i; if (byte_idx + mbcdlen > pstr->bufs_len) { pstr->cur_state = prev_st; break; } if (pstr->offsets == NULL) { pstr->offsets = re_malloc (Idx, pstr->bufs_len); if (pstr->offsets == NULL) return REG_ESPACE; } if (!pstr->offsets_needed) { for (i = 0; i < (size_t) byte_idx; ++i) pstr->offsets[i] = i; pstr->offsets_needed = 1; } memcpy (pstr->mbs + byte_idx, buf, mbcdlen); pstr->wcs[byte_idx] = wcu; pstr->offsets[byte_idx] = src_idx; for (i = 1; i < mbcdlen; ++i) { pstr->offsets[byte_idx + i] = src_idx + (i < mbclen ? i : mbclen - 1); pstr->wcs[byte_idx + i] = WEOF; } pstr->len += mbcdlen - mbclen; if (pstr->raw_stop > src_idx) pstr->stop += mbcdlen - mbclen; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; byte_idx += mbcdlen; src_idx += mbclen; continue; } else memcpy (pstr->mbs + byte_idx, p, mbclen); } else memcpy (pstr->mbs + byte_idx, p, mbclen); if (__glibc_unlikely (pstr->offsets_needed != 0)) { size_t i; for (i = 0; i < mbclen; ++i) pstr->offsets[byte_idx + i] = src_idx + i; } src_idx += mbclen; pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (__glibc_unlikely (pstr->offsets_needed != 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = src_idx; return REG_NOERROR; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static Idx re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) { mbstate_t prev_st; Idx rawbuf_idx; size_t mbclen; wint_t wc = WEOF; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; rawbuf_idx < new_raw_idx;) { wchar_t wc2; Idx remain_len = pstr->raw_len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0)) { /* We treat these cases as a single byte character. */ if (mbclen == 0 || remain_len == 0) wc = L'\0'; else wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); mbclen = 1; pstr->cur_state = prev_st; } else wc = wc2; /* Then proceed the next character. */ rawbuf_idx += mbclen; } *last_wc = wc; return rawbuf_idx; } #endif /* RE_ENABLE_I18N */ /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (re_string_t *pstr) { Idx char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans[ch]; pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (re_string_t *pstr) { Idx buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; pstr->valid_raw_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of pstr->mb_cur_max > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) offset = idx - pstr->raw_mbs_idx; else { /* Reset buffer. */ #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); #endif /* RE_ENABLE_I18N */ pstr->len = pstr->raw_len; pstr->stop = pstr->raw_stop; pstr->valid_len = 0; pstr->raw_mbs_idx = 0; pstr->valid_raw_len = 0; pstr->offsets_needed = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!pstr->mbs_allocated) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (__glibc_likely (offset != 0)) { /* Should the already checked characters be kept? */ if (__glibc_likely (offset < pstr->valid_raw_len)) { /* Yes, move them to the front of the buffer. */ #ifdef RE_ENABLE_I18N if (__glibc_unlikely (pstr->offsets_needed)) { Idx low = 0, high = pstr->valid_len, mid; do { mid = (high + low) / 2; if (pstr->offsets[mid] > offset) high = mid; else if (pstr->offsets[mid] < offset) low = mid + 1; else break; } while (low < high); if (pstr->offsets[mid] < offset) ++mid; pstr->tip_context = re_string_context_at (pstr, mid - 1, eflags); /* This can be quite complicated, so handle specially only the common and easy case where the character with different length representation of lower and upper case is present at or after offset. */ if (pstr->valid_len > offset && mid == offset && pstr->offsets[mid] == offset) { memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; for (low = 0; low < pstr->valid_len; low++) pstr->offsets[low] = pstr->offsets[low + offset] - offset; } else { /* Otherwise, just find out how long the partial multibyte character at offset is and fill it with WEOF/255. */ pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; while (mid > 0 && pstr->offsets[mid - 1] == offset) --mid; while (mid < pstr->valid_len) if (pstr->wcs[mid] != WEOF) break; else ++mid; if (mid == pstr->valid_len) pstr->valid_len = 0; else { pstr->valid_len = pstr->offsets[mid] - offset; if (pstr->valid_len) { for (low = 0; low < pstr->valid_len; ++low) pstr->wcs[low] = WEOF; memset (pstr->mbs, 255, pstr->valid_len); } } pstr->valid_raw_len = pstr->valid_len; } } else #endif { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags); #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); #endif /* RE_ENABLE_I18N */ if (__glibc_unlikely (pstr->mbs_allocated)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; DEBUG_ASSERT (pstr->valid_len > 0); } } else { #ifdef RE_ENABLE_I18N /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (__glibc_unlikely (pstr->offsets_needed)) { pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; } #endif pstr->valid_len = 0; #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { Idx wcs_idx; wint_t wc = WEOF; if (pstr->is_utf8) { const unsigned char *raw, *p, *end; /* Special case UTF-8. Multi-byte chars start with any byte other than 0x80 - 0xbf. */ raw = pstr->raw_mbs + pstr->raw_mbs_idx; end = raw + (offset - pstr->mb_cur_max); if (end < pstr->raw_mbs) end = pstr->raw_mbs; p = raw + offset - 1; #ifdef _LIBC /* We know the wchar_t encoding is UCS4, so for the simple case, ASCII characters, skip the conversion step. */ if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); /* pstr->valid_len = 0; */ wc = (wchar_t) *p; } else #endif for (; p >= end; --p) if ((*p & 0xc0) != 0x80) { mbstate_t cur_state; wchar_t wc2; Idx mlen = raw + pstr->len - p; unsigned char buf[6]; size_t mbclen; const unsigned char *pp = p; if (__glibc_unlikely (pstr->trans != NULL)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; pp = buf; } /* XXX Don't use mbrtowc, we know which conversion to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, &cur_state); if (raw + offset - p <= mbclen && mbclen < (size_t) -2) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->valid_len = mbclen - (raw + offset - p); wc = wc2; } break; } } if (wc == WEOF) pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; if (wc == WEOF) pstr->tip_context = re_string_context_at (pstr, prev_valid_len - 1, eflags); else pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (__glibc_unlikely (pstr->valid_len)) { for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; if (pstr->mbs_allocated) memset (pstr->mbs, 255, pstr->valid_len); } pstr->valid_raw_len = pstr->valid_len; } else #endif /* RE_ENABLE_I18N */ { int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; pstr->valid_raw_len = 0; if (pstr->trans) c = pstr->trans[c]; pstr->tip_context = (bitset_contain (pstr->word_char, c) ? CONTEXT_WORD : ((IS_NEWLINE (c) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); } } if (!__glibc_unlikely (pstr->mbs_allocated)) pstr->mbs += offset; } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { if (pstr->icase) { reg_errcode_t ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_wcs_buffer (pstr); } else #endif /* RE_ENABLE_I18N */ if (__glibc_unlikely (pstr->mbs_allocated)) { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } else pstr->valid_len = pstr->len; pstr->cur_idx = 0; return REG_NOERROR; } static unsigned char __attribute__ ((pure)) re_string_peek_byte_case (const re_string_t *pstr, Idx idx) { int ch; Idx off; /* Handle the common (easiest) cases first. */ if (__glibc_likely (!pstr->mbs_allocated)) return re_string_peek_byte (pstr, idx); #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) return re_string_peek_byte (pstr, idx); #endif off = pstr->cur_idx + idx; #ifdef RE_ENABLE_I18N if (pstr->offsets_needed) off = pstr->offsets[off]; #endif ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; #ifdef RE_ENABLE_I18N /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I this function returns CAPITAL LETTER I instead of first byte of DOTLESS SMALL LETTER I. The latter would confuse the parser, since peek_byte_case doesn't advance cur_idx in any way. */ if (pstr->offsets_needed && !isascii (ch)) return re_string_peek_byte (pstr, idx); #endif return ch; } static unsigned char re_string_fetch_byte_case (re_string_t *pstr) { if (__glibc_likely (!pstr->mbs_allocated)) return re_string_fetch_byte (pstr); #ifdef RE_ENABLE_I18N if (pstr->offsets_needed) { Idx off; int ch; /* For tr_TR.UTF-8 [[:islower:]] there is [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip in that case the whole multi-byte character and return the original letter. On the other side, with [[: DOTLESS SMALL LETTER I return [[:I, as doing anything else would complicate things too much. */ if (!re_string_first_byte (pstr, pstr->cur_idx)) return re_string_fetch_byte (pstr); off = pstr->offsets[pstr->cur_idx]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; if (! isascii (ch)) return re_string_fetch_byte (pstr); re_string_skip_bytes (pstr, re_string_char_size_at (pstr, pstr->cur_idx)); return ch; } #endif return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; } static void re_string_destruct (re_string_t *pstr) { #ifdef RE_ENABLE_I18N re_free (pstr->wcs); re_free (pstr->offsets); #endif /* RE_ENABLE_I18N */ if (pstr->mbs_allocated) re_free (pstr->mbs); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (__glibc_unlikely (idx < 0)) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; if (__glibc_unlikely (idx == input->len)) return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc; Idx wc_idx = idx; while(input->wcs[wc_idx] == WEOF) { DEBUG_ASSERT (wc_idx >= 0); --wc_idx; if (wc_idx < 0) return input->tip_context; } wc = input->wcs[wc_idx]; if (__glibc_unlikely (input->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) return CONTEXT_WORD; return (IS_WIDE_NEWLINE (wc) && input->newline_anchor ? CONTEXT_NEWLINE : 0); } else #endif { c = re_string_byte_at (input, idx); if (bitset_contain (input->word_char, c)) return CONTEXT_WORD; return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; } } /* Functions for set operation. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_alloc (re_node_set *set, Idx size) { set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); if (__glibc_unlikely (set->elems == NULL) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_1 (re_node_set *set, Idx elem) { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (Idx, 1); if (__glibc_unlikely (set->elems == NULL)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) { set->alloc = 2; set->elems = re_malloc (Idx, 2); if (__glibc_unlikely (set->elems == NULL)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_copy (re_node_set *dest, const re_node_set *src) { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) { dest->alloc = dest->nelem = 0; return REG_ESPACE; } memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, is, id, delta, sbase; if (src1->nelem == 0 || src2->nelem == 0) return REG_NOERROR; /* We need dest->nelem + 2 * elems_in_intersection; this is a conservative estimate. */ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_elems == NULL)) return REG_ESPACE; dest->elems = new_elems; dest->alloc = new_alloc; } /* Find the items in the intersection of SRC1 and SRC2, and copy into the top of DEST those that are not already in DEST itself. */ sbase = dest->nelem + src1->nelem + src2->nelem; i1 = src1->nelem - 1; i2 = src2->nelem - 1; id = dest->nelem - 1; for (;;) { if (src1->elems[i1] == src2->elems[i2]) { /* Try to find the item in DEST. Maybe we could binary search? */ while (id >= 0 && dest->elems[id] > src1->elems[i1]) --id; if (id < 0 || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (--i1 < 0 || --i2 < 0) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (--i2 < 0) break; } else { if (--i1 < 0) break; } } id = dest->nelem - 1; is = dest->nelem + src1->nelem + src2->nelem - 1; delta = is - sbase + 1; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place; this is more or less the same loop that is in re_node_set_merge. */ dest->nelem += delta; if (delta > 0 && id >= 0) for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) break; } } /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (Idx)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (Idx)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_merge (re_node_set *dest, const re_node_set *src) { Idx is, id, sbase, delta; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < 2 * src->nelem + dest->nelem) { Idx new_alloc = 2 * (src->nelem + dest->alloc); Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_buffer == NULL)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (__glibc_unlikely (dest->nelem == 0)) { /* Although we already guaranteed above that dest->alloc != 0 and therefore dest->elems != NULL, add a debug assertion to pacify GCC 11.2.1's -fanalyzer. */ DEBUG_ASSERT (dest->elems); dest->nelem = src->nelem; memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); return REG_NOERROR; } /* Copy into the top of DEST the items of SRC that are not found in DEST. Maybe we could binary search in DEST? */ for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { if (dest->elems[id] == src->elems[is]) is--, id--; else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; } if (is >= 0) { /* If DEST is exhausted, the remaining items of SRC must be unique. */ sbase -= is + 1; memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); } id = dest->nelem - 1; is = dest->nelem + 2 * src->nelem - 1; delta = is - sbase + 1; if (delta == 0) return REG_NOERROR; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place. */ dest->nelem += delta; for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) { /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); break; } } } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert (re_node_set *set, Idx elem) { Idx idx; /* In case the set is empty. */ if (set->alloc == 0) return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); if (__glibc_unlikely (set->nelem) == 0) { /* Although we already guaranteed above that set->alloc != 0 and therefore set->elems != NULL, add a debug assertion to pacify GCC 11.2 -fanalyzer. */ DEBUG_ASSERT (set->elems); set->elems[0] = elem; ++set->nelem; return true; } /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = set->alloc * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Move the elements which follows the new element. Test the first element separately to skip a check in the inner loop. */ if (elem < set->elems[0]) { for (idx = set->nelem; idx > 0; idx--) set->elems[idx] = set->elems[idx - 1]; } else { for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) set->elems[idx] = set->elems[idx - 1]; DEBUG_ASSERT (set->elems[idx - 1] < elem); } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return true; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have any element greater than or equal to ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert_last (re_node_set *set, Idx elem) { /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = (set->alloc + 1) * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Insert the new element. */ set->elems[set->nelem++] = elem; return true; } /* Compare two node sets SET1 and SET2. Return true if SET1 and SET2 are equivalent. */ static bool __attribute__ ((pure)) re_node_set_compare (const re_node_set *set1, const re_node_set *set2) { Idx i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return false; for (i = set1->nelem ; --i >= 0 ; ) if (set1->elems[i] != set2->elems[i]) return false; return true; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static Idx __attribute__ ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (re_node_set *set, Idx idx) { if (idx < 0 || idx >= set->nelem) return; --set->nelem; for (; idx < set->nelem; idx++) set->elems[idx] = set->elems[idx + 1]; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1 if an error occurred. */ static Idx re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) { size_t new_nodes_alloc = dfa->nodes_alloc * 2; Idx *new_nexts, *new_indices; re_node_set *new_edests, *new_eclosures; re_token_t *new_nodes; /* Avoid overflows in realloc. */ const size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc)) return -1; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (__glibc_unlikely (new_nodes == NULL)) return -1; dfa->nodes = new_nodes; new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL)) { re_free (new_nexts); re_free (new_indices); re_free (new_edests); re_free (new_eclosures); return -1; } dfa->nexts = new_nexts; dfa->org_indices = new_indices; dfa->edests = new_edests; dfa->eclosures = new_eclosures; dfa->nodes_alloc = new_nodes_alloc; } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].constraint = 0; #ifdef RE_ENABLE_I18N dfa->nodes[dfa->nodes_len].accept_mb = ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) || token.type == COMPLEX_BRACKET); #endif dfa->nexts[dfa->nodes_len] = -1; re_node_set_init_empty (dfa->edests + dfa->nodes_len); re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); return dfa->nodes_len++; } static re_hashval_t calc_state_hash (const re_node_set *nodes, unsigned int context) { re_hashval_t hash = nodes->nelem + context; Idx i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (__glibc_unlikely (nodes->nelem == 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (state->hash == hash && state->context == context && re_node_set_compare (state->entrance_nodes, nodes)) return state; } /* There are no appropriate state in 'dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Finish initialization of the new state NEWSTATE, and using its hash value HASH put in the appropriate bucket of DFA's state table. Return value indicates the error code if failed. */ static reg_errcode_t __attribute_warn_unused_result__ register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, re_hashval_t hash) { struct re_state_table_entry *spot; reg_errcode_t err; Idx i; newstate->hash = hash; err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < newstate->nodes.nelem; i++) { Idx elem = newstate->nodes.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (__glibc_unlikely (spot->alloc <= spot->num)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; spot->array = new_array; spot->alloc = new_alloc; } spot->array[spot->num++] = newstate; return REG_NOERROR; } static void free_state (re_dfastate_t *state) { re_node_set_free (&state->non_eps_nodes); re_node_set_free (&state->inveclosure); if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->word_trtable); re_free (state->trtable); re_free (state); } /* Create the new state which is independent of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) { Idx i; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER && !node->constraint) continue; #ifdef RE_ENABLE_I18N newstate->accept_mb |= node->accept_mb; #endif /* RE_ENABLE_I18N */ /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || node->constraint) newstate->has_constraint = 1; } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) { Idx i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; #ifdef RE_ENABLE_I18N newstate->accept_mb |= node->accept_mb; #endif /* RE_ENABLE_I18N */ /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { re_node_set *entrance_nodes = re_malloc (re_node_set, 1); if (__glibc_unlikely (entrance_nodes == NULL)) { free_state (newstate); return NULL; } newstate->entrance_nodes = entrance_nodes; if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) { free_state (newstate); return NULL; } nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regex_internal.h��������������������������������������������������������0000664�0000000�0000000�00000056074�14110572173�0020240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 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 _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <langinfo.h> #include <locale.h> #include <wchar.h> #include <wctype.h> #include <stdbool.h> #include <stdint.h> #ifndef _LIBC # include <dynarray.h> #endif #include <intprops.h> #include <verify.h> #if defined DEBUG && DEBUG != 0 # include <assert.h> # define DEBUG_ASSERT(x) assert (x) #else # define DEBUG_ASSERT(x) assume (x) #endif #ifdef _LIBC # include <libc-lock.h> # define lock_define(name) __libc_lock_define (, name) # define lock_init(lock) (__libc_lock_init (lock), 0) # define lock_fini(lock) ((void) 0) # define lock_lock(lock) __libc_lock_lock (lock) # define lock_unlock(lock) __libc_lock_unlock (lock) #elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD # include "glthread/lock.h" # define lock_define(name) gl_lock_define (, name) # define lock_init(lock) glthread_lock_init (&(lock)) # define lock_fini(lock) glthread_lock_destroy (&(lock)) # define lock_lock(lock) glthread_lock_lock (&(lock)) # define lock_unlock(lock) glthread_lock_unlock (&(lock)) #elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD # include <pthread.h> # define lock_define(name) pthread_mutex_t name; # define lock_init(lock) pthread_mutex_init (&(lock), 0) # define lock_fini(lock) pthread_mutex_destroy (&(lock)) # define lock_lock(lock) pthread_mutex_lock (&(lock)) # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) #else # define lock_define(name) # define lock_init(lock) 0 # define lock_fini(lock) ((void) 0) /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ # define lock_lock(lock) ((void) dfa) # define lock_unlock(lock) ((void) 0) #endif /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif /* regex code assumes isascii has its usual numeric meaning, even if the portable character set uses EBCDIC encoding, and even if wint_t is wider than int. */ #ifndef _LIBC # undef isascii # define isascii(c) (((c) & ~0x7f) == 0) #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include <locale/localeinfo.h> # include <locale/coll-lookup.h> # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include <libintl.h> # ifdef _LIBC # undef gettext # define gettext(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # undef gettext # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif #if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE) || _LIBC # define RE_ENABLE_I18N #endif /* Number of ASCII characters. */ #define ASCII_CHARS 0x80 /* Number of single byte characters. */ #define SBC_MAX (UCHAR_MAX + 1) #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' #define WIDE_NEWLINE_CHAR L'\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # undef __wctype # undef __iswalnum # undef __iswctype # undef __towlower # undef __towupper # define __wctype wctype # define __iswalnum iswalnum # define __iswctype iswctype # define __towlower towlower # define __towupper towupper # define __btowc btowc # define __mbrtowc mbrtowc # define __wcrtomb wcrtomb # define __regfree regfree #endif /* not _LIBC */ #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #ifndef ULONG_WIDTH # define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX) /* The number of usable bits in an unsigned integer type with maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */ # define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max) # define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n)) # define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n)) # define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n)) # define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n)) # define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n)) # define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1)) # if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1) # error "ULONG_MAX out of range" # endif #endif /* The type of indexes into strings. This is signed, not size_t, since the API requires indexes to fit in regoff_t anyway, and using signed integers makes the code a bit smaller and presumably faster. The traditional GNU regex implementation uses int for indexes. The POSIX-compatible implementation uses a possibly-wider type. The name 'Idx' is three letters to minimize the hassle of reindenting a lot of regex code that formerly used 'int'. */ typedef regoff_t Idx; #ifdef _REGEX_LARGE_OFFSETS # define IDX_MAX SSIZE_MAX #else # define IDX_MAX INT_MAX #endif /* A hash value, suitable for computing hash tables. */ typedef __re_size_t re_hashval_t; /* An integer used to represent a set of bits. It must be unsigned, and must be at least as wide as unsigned int. */ typedef unsigned long int bitset_word_t; /* All bits set in a bitset_word_t. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset_word_t. */ #define BITSET_WORD_BITS ULONG_WIDTH /* Number of bitset_word_t values in a bitset_t. */ #define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) typedef bitset_word_t bitset_t[BITSET_WORDS]; typedef bitset_word_t *re_bitset_ptr_t; typedef const bitset_word_t *re_const_bitset_ptr_t; #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define WORD_DELIM_CONSTRAINT 0x0100 #define NOT_WORD_DELIM_CONSTRAINT 0x0200 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = WORD_DELIM_CONSTRAINT, NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT } re_context_type; typedef struct { Idx alloc; Idx nelem; Idx *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Node type, These are used by token, node, tree. */ CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, #ifdef RE_ENABLE_I18N COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, #endif /* RE_ENABLE_I18N */ /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used when the debugger shows values of this enum type. */ #define EPSILON_BIT 8 OP_OPEN_SUBEXP = EPSILON_BIT | 0, OP_CLOSE_SUBEXP = EPSILON_BIT | 1, OP_ALT = EPSILON_BIT | 2, OP_DUP_ASTERISK = EPSILON_BIT | 3, ANCHOR = EPSILON_BIT | 4, /* Tree type, these are used only by tree. */ CONCAT = 16, SUBEXP = 17, /* Token type, these are used only by token. */ OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH } re_token_type_t; #ifdef RE_ENABLE_I18N typedef struct { /* Multibyte characters. */ wchar_t *mbchars; /* Collating symbols. */ # ifdef _LIBC int32_t *coll_syms; # endif /* Equivalence classes. */ # ifdef _LIBC int32_t *equiv_classes; # endif /* Range expressions. */ # ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; # else /* not _LIBC */ wchar_t *range_starts; wchar_t *range_ends; # endif /* not _LIBC */ /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ Idx nmbchars; /* # of collating symbols. */ Idx ncoll_syms; /* # of equivalence classes. */ Idx nequiv_classes; /* # of range expressions. */ Idx nranges; /* # of character classes. */ Idx nchar_classes; } re_charset_t; #endif /* RE_ENABLE_I18N */ typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ #ifdef RE_ENABLE_I18N re_charset_t *mbcset; /* for COMPLEX_BRACKET */ #endif /* RE_ENABLE_I18N */ Idx idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ } opr; #if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; unsigned int opt_subexp : 1; #ifdef RE_ENABLE_I18N unsigned int accept_mb : 1; /* These 2 bits can be moved into the union if needed (e.g. if running out of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ unsigned int mb_partial : 1; #endif unsigned int word_char : 1; } re_token_t; #define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; #ifdef RE_ENABLE_I18N /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; Idx *offsets; mbstate_t cur_state; #endif /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ Idx raw_mbs_idx; /* The length of the valid characters in the buffers. */ Idx valid_len; /* The corresponding number of bytes in raw_mbs array. */ Idx valid_raw_len; /* The length of the buffers MBS and WCS. */ Idx bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ Idx cur_idx; /* length of RAW_MBS array. */ Idx raw_len; /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ Idx len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ Idx raw_stop; /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ Idx stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* Copy of re_dfa_t's word_char. */ re_const_bitset_ptr_t word_char; /* true if REG_ICASE. */ unsigned char icase; unsigned char is_utf8; unsigned char map_notascii; unsigned char mbs_allocated; unsigned char offsets_needed; unsigned char newline_anchor; unsigned char word_ops_used; int mb_cur_max; }; typedef struct re_string_t re_string_t; struct re_dfa_t; typedef struct re_dfa_t re_dfa_t; #ifndef _LIBC # define IS_IN(libc) false #endif #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #ifdef _LIBC # define MALLOC_0_IS_NONNULL 1 #elif !defined MALLOC_0_IS_NONNULL # define MALLOC_0_IS_NONNULL 0 #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; struct bin_tree_t *first; struct bin_tree_t *next; re_token_t token; /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. Otherwise 'type' indicate the type of this node. */ Idx node_idx; }; typedef struct bin_tree_t bin_tree_t; #define BIN_TREE_STORAGE_SIZE \ ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) struct bin_tree_storage_t { struct bin_tree_storage_t *next; bin_tree_t data[BIN_TREE_STORAGE_SIZE]; }; typedef struct bin_tree_storage_t bin_tree_storage_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { re_hashval_t hash; re_node_set nodes; re_node_set non_eps_nodes; re_node_set inveclosure; re_node_set *entrance_nodes; struct re_dfastate_t **trtable, **word_trtable; unsigned int context : 4; unsigned int halt : 1; /* If this state can accept "multi byte". Note that we refer to multibyte characters, and multi character collating elements as "multi byte". */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; struct re_state_table_entry { Idx num; Idx alloc; re_dfastate_t **array; }; /* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ typedef struct { Idx next_idx; Idx alloc; re_dfastate_t **array; } state_array_t; /* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ typedef struct { Idx node; Idx str_idx; /* The position NODE match at. */ state_array_t path; } re_sub_match_last_t; /* Store information about the node NODE whose type is OP_OPEN_SUBEXP. And information about the node, whose type is OP_CLOSE_SUBEXP, corresponding to NODE is stored in LASTS. */ typedef struct { Idx str_idx; Idx node; state_array_t *path; Idx alasts; /* Allocation size of LASTS. */ Idx nlasts; /* The number of LASTS. */ re_sub_match_last_t **lasts; } re_sub_match_top_t; struct re_backref_cache_entry { Idx node; Idx str_idx; Idx subexp_from; Idx subexp_to; bitset_word_t eps_reachable_subexps_map; char more; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; const re_dfa_t *const dfa; /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ Idx match_last; Idx last_node; /* The state log used by the matcher. */ re_dfastate_t **state_log; Idx state_log_top; /* Back reference cache. */ Idx nbkref_ents; Idx abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; Idx nsub_tops; Idx asub_tops; re_sub_match_top_t **sub_tops; } re_match_context_t; typedef struct { re_dfastate_t **sifted_states; re_dfastate_t **limited_states; Idx last_node; Idx last_str_idx; re_node_set limits; } re_sift_context_t; struct re_fail_stack_ent_t { Idx idx; Idx node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { Idx num; Idx alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_token_t *nodes; size_t nodes_alloc; size_t nodes_len; Idx *nexts; Idx *org_indices; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; bin_tree_t *str_tree; bin_tree_storage_t *str_tree_storage; re_bitset_ptr_t sb_char; int str_tree_storage_idx; /* number of subexpressions 're_nsub' is in regex_t. */ re_hashval_t state_hash_mask; Idx init_node; Idx nbackref; /* The number of backreference in this dfa. */ /* Bitmap expressing which backreference is used. */ bitset_word_t used_bkref_map; bitset_word_t completed_bkref_map; unsigned int has_plural_match : 1; /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ unsigned int has_mb_node : 1; unsigned int is_utf8 : 1; unsigned int map_notascii : 1; unsigned int word_ops_used : 1; int mb_cur_max; bitset_t word_char; reg_syntax_t syntax; Idx *subexp_map; #ifdef DEBUG char* re_str; #endif lock_define (lock) }; #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) #define re_node_set_remove(set,id) \ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Functions for bitset_t operation. */ static inline void bitset_set (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; } static inline void bitset_clear (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); } static inline bool bitset_contain (const bitset_t set, Idx i) { return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; } static inline void bitset_empty (bitset_t set) { memset (set, '\0', sizeof (bitset_t)); } static inline void bitset_set_all (bitset_t set) { memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; } static inline void bitset_copy (bitset_t dest, const bitset_t src) { memcpy (dest, src, sizeof (bitset_t)); } static inline void bitset_not (bitset_t set) { int bitset_i; for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) & ~set[BITSET_WORDS - 1]); } static inline void bitset_merge (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } static inline void bitset_mask (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] &= src[bitset_i]; } #ifdef RE_ENABLE_I18N /* Functions for re_string. */ static int __attribute__ ((pure, unused)) re_string_char_size_at (const re_string_t *pstr, Idx idx) { int byte_idx; if (pstr->mb_cur_max == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static wint_t __attribute__ ((pure, unused)) re_string_wchar_at (const re_string_t *pstr, Idx idx) { if (pstr->mb_cur_max == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } # ifdef _LIBC # include <locale/weight.h> # endif static int __attribute__ ((pure, unused)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { # ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; findidx (table, indirect, extra, &p, pstr->len - idx); return p - pstr->mbs - idx; } else # endif /* _LIBC */ return 1; } #endif /* RE_ENABLE_I18N */ #ifdef _LIBC # if __GNUC__ >= 7 # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #else # include "attribute.h" #endif #endif /* _REGEX_INTERNAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/regexec.c���������������������������������������������������������������0000664�0000000�0000000�00000374022�14110572173�0016643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 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/>. */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n); static void match_ctx_clean (re_match_context_t *mctx); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to); static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx); static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags); static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len); static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated); static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first); static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx); static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack); static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx); #endif /* RE_ENABLE_I18N */ static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest); static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx); static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx); static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx node, Idx str_idx, Idx bkref_idx); static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx); static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates); static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num); static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx); static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state); static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state); static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx); #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate); #endif #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate); #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes); static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx); static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str); static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type); static reg_errcode_t check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type); static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes); static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type); static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type); static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type); static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); #ifdef RE_ENABLE_I18N static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx idx); # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset_t *states_ch); static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies "execution flags" which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if EFLAGS is invalid. */ int regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; Idx start, length; re_dfa_t *dfa = preg->buffer; if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) return REG_BADPAT; if (eflags & REG_STARTEND) { start = pmatch[0].rm_so; length = pmatch[0].rm_eo; } else { start = 0; length = strlen (string); } lock_lock (dfa->lock); if (preg->no_sub) err = re_search_internal (preg, string, length, start, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, start, length, length, nmatch, pmatch, eflags); lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC libc_hidden_def (__regexec) # include <shlib-compat.h> versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) __typeof__ (__regexec) __compat_regexec; int attribute_compat_text_section __compat_regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); } compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); # endif #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stored in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. They return -1 on match failure, -2 on error. */ regoff_t re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, 0, length, regs, true); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif regoff_t re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, range, length, regs, false); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif regoff_t re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, true); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif regoff_t re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, false); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len) { const char *str; regoff_t rval; Idx len; char *s = NULL; if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 || INT_ADD_WRAPV (length1, length2, &len)))) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (__glibc_unlikely (s == NULL)) return -2; #ifdef _LIBC memcpy (__mempcpy (s, string1, length1), string2, length2); #else memcpy (s, string1, length1); memcpy (s + length1, string2, length2); #endif str = s; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); re_free (s); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is true the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len) { reg_errcode_t result; regmatch_t *pmatch; Idx nregs; regoff_t rval; int eflags = 0; re_dfa_t *dfa = bufp->buffer; Idx last_start = start + range; /* Check for out-of-range. */ if (__glibc_unlikely (start < 0 || start > length)) return -1; if (__glibc_unlikely (length < last_start || (0 <= range && last_start < start))) last_start = length; else if (__glibc_unlikely (last_start < 0 || (range < 0 && start <= last_start))) last_start = 0; lock_lock (dfa->lock); eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (__glibc_unlikely (bufp->no_sub)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub)) { nregs = regs->num_regs; if (__glibc_unlikely (nregs < 1)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (__glibc_unlikely (pmatch == NULL)) { rval = -2; goto out; } result = re_search_internal (bufp, string, length, start, last_start, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = result == REG_NOMATCH ? -1 : -2; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) rval = -2; } if (__glibc_likely (rval == 0)) { if (ret_len) { DEBUG_ASSERT (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: lock_unlock (dfa->lock); return rval; } static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) { int rval = REGS_REALLOCATE; Idx i; Idx need_regs = nregs + 1; /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->start == NULL)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->end == NULL)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (__glibc_unlikely (need_regs > regs->num_regs)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (__glibc_unlikely (new_start == NULL)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (__glibc_unlikely (new_end == NULL)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { DEBUG_ASSERT (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ DEBUG_ASSERT (nregs <= regs->num_regs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, __re_size_t num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = NULL; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (const char *s) { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same meaning as with regexec. LAST_START is START + RANGE, where START and RANGE have the same meaning as with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (0 <= LAST_START && LAST_START <= LENGTH) */ static reg_errcode_t __attribute_warn_unused_result__ re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; const re_dfa_t *dfa = preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = -1; Idx extra_nmatch; bool sb; int ch; re_match_context_t mctx = { .dfa = dfa }; char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return REG_NOMATCH; /* We assume front-end functions already check them. */ DEBUG_ASSERT (0 <= last_start && last_start <= length); /* If initial states with non-begbuf contexts have no elements, the regex must be anchored. If preg->newline_anchor is set, we'll never use init_state_nl, so do not check it. */ if (dfa->init_state->nodes.nelem == 0 && dfa->init_state_word->nodes.nelem == 0 && (dfa->init_state_nl->nodes.nelem == 0 || !preg->newline_anchor)) { if (start != 0 && last_start != 0) return REG_NOMATCH; start = last_start = 0; } /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0 || dfa->nbackref); err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, preg->translate, (preg->syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; mctx.input.stop = stop; mctx.input.raw_stop = stop; mctx.input.newline_anchor = preg->newline_anchor; err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { /* Avoid overflow. */ if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= mctx.input.bufs_len))) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (__glibc_unlikely (mctx.state_log == NULL)) { err = REG_ESPACE; goto free_return; } } match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether the input string matches. */ incr = (last_start < start) ? -1 : 1; left_lim = (last_start < start) ? last_start : start; right_lim = (last_start < start) ? start : last_start; sb = dfa->mb_cur_max == 1; match_kind = (fastmap ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) | (start <= last_start ? 2 : 0) | (t != NULL ? 1 : 0)) : 8); for (;; match_first += incr) { err = REG_NOMATCH; if (match_first < left_lim || right_lim < match_first) goto free_return; /* Advance as rapidly as possible through the string, until we find a plausible place to start matching. This may be done with varying efficiency, so there are various possibilities: only the most common of them are specialized, in order to save on code size. We use a switch statement for speed. */ switch (match_kind) { case 8: /* No fastmap. */ break; case 7: /* Fastmap with single-byte translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[t[(unsigned char) string[match_first]]]) ++match_first; goto forward_match_found_start_or_reached_end; case 6: /* Fastmap without translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (__glibc_unlikely (match_first == right_lim)) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (!fastmap[t ? t[ch] : ch]) goto free_return; } break; case 4: case 5: /* Fastmap without multi-byte translation, match backwards. */ while (match_first >= left_lim) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (fastmap[t ? t[ch] : ch]) break; --match_first; } if (match_first < left_lim) goto free_return; break; default: /* In this case, we can't determine easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ for (;;) { /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ __re_size_t offset = match_first - mctx.input.raw_mbs_idx; if (__glibc_unlikely (offset >= (__re_size_t) mctx.input.valid_raw_len)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; offset = match_first - mctx.input.raw_mbs_idx; } /* If MATCH_FIRST is out of the buffer, leave it as '\0'. Note that MATCH_FIRST must not be smaller than 0. */ ch = (match_first >= length ? 0 : re_string_byte_at (&mctx.input, offset)); if (fastmap[ch]) break; match_first += incr; if (match_first < left_lim || match_first > right_lim) { err = REG_NOMATCH; goto free_return; } } break; } /* Reconstruct the buffers so that the matcher can assume that the matching starts from the beginning of the buffer. */ err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; #ifdef RE_ENABLE_I18N /* Don't consider this char as a possible match start if it part, yet isn't the head, of a multibyte character. */ if (!sb && !re_string_first_byte (&mctx.input, 0)) continue; #endif /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (&mctx, fl_longest_match, start <= last_start ? &match_first : NULL); if (match_last != -1) { if (__glibc_unlikely (match_last == -2)) { err = REG_ESPACE; goto free_return; } else { mctx.match_last = match_last; if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; mctx.last_node = check_halt_state_context (&mctx, pstate, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { err = prune_impossible_nodes (&mctx); if (err == REG_NOERROR) break; if (__glibc_unlikely (err != REG_NOMATCH)) goto free_return; match_last = -1; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } DEBUG_ASSERT (match_last != -1); DEBUG_ASSERT (err == REG_NOERROR); /* Set pmatch[] if we need. */ if (nmatch > 0) { Idx reg_idx; /* Initialize registers. */ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; pmatch[0].rm_eo = mctx.match_last; /* FIXME: This function should fail if mctx.match_last exceeds the maximum possible regoff_t value. We need a new error code REG_OVERFLOW. */ if (!preg->no_sub && nmatch > 1) { err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* At last, add the offset to each register, since we slid the buffers so that we could assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { #ifdef RE_ENABLE_I18N if (__glibc_unlikely (mctx.input.offsets_needed != 0)) { pmatch[reg_idx].rm_so = (pmatch[reg_idx].rm_so == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_so]); pmatch[reg_idx].rm_eo = (pmatch[reg_idx].rm_eo == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_eo]); } #else DEBUG_ASSERT (mctx.input.offsets_needed == 0); #endif pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) { pmatch[nmatch + reg_idx].rm_so = -1; pmatch[nmatch + reg_idx].rm_eo = -1; } if (dfa->subexp_map) for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) if (dfa->subexp_map[reg_idx] != reg_idx) { pmatch[reg_idx + 1].rm_so = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; pmatch[reg_idx + 1].rm_eo = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; } } free_return: re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&mctx.input); return err; } static reg_errcode_t __attribute_warn_unused_result__ prune_impossible_nodes (re_match_context_t *mctx) { const re_dfa_t *const dfa = mctx->dfa; Idx halt_node, match_last; reg_errcode_t ret; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; DEBUG_ASSERT (mctx->state_log != NULL); match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (sifted_states == NULL)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (lim_states == NULL)) { ret = REG_ESPACE; goto free_return; } while (1) { memset (lim_states, '\0', sizeof (re_dfastate_t *) * (match_last + 1)); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (match_last < 0) { ret = REG_NOMATCH; goto free_return; } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); halt_node = check_halt_state_context (mctx, mctx->state_log[match_last], match_last); } ret = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); re_free (lim_states); lim_states = NULL; if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; } else { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] == NULL) { ret = REG_NOMATCH; goto free_return; } } re_free (mctx->state_log); mctx->state_log = sifted_states; sifted_states = NULL; mctx->last_node = halt_node; mctx->match_last = match_last; ret = REG_NOERROR; free_return: re_free (sifted_states); re_free (lim_states); return ret; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static inline re_dfastate_t * __attribute__ ((always_inline)) acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, Idx idx) { const re_dfa_t *const dfa = mctx->dfa; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end. Return -1 if there is no match, and return -2 in case of an error. FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. Note that the matcher assumes that the matching starts from the current index of the buffer. */ static Idx __attribute_warn_unused_result__ check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx match = 0; Idx match_last = -1; Idx cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; bool at_init_state = p_match_first != NULL; Idx next_start_idx = cur_str_idx; err = REG_NOERROR; cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); /* An initial state must not be NULL (invalid). */ if (__glibc_unlikely (cur_state == NULL)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } if (mctx->state_log != NULL) { mctx->state_log[cur_str_idx] = cur_state; /* Check OP_OPEN_SUBEXP in the initial state in case that we use them later. E.g. Processing back references. */ if (__glibc_unlikely (dfa->nbackref)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } /* If the RE accepts NULL string. */ if (__glibc_unlikely (cur_state->halt)) { if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (&mctx->input)) { re_dfastate_t *old_state = cur_state; Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) && mctx->input.bufs_len < mctx->input.len) || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx, next_char_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } } cur_state = transit_state (&err, mctx, cur_state); if (mctx->state_log != NULL) cur_state = merge_state_with_log (&err, mctx, cur_state); if (cur_state == NULL) { /* Reached the invalid state or an error. Try to recover a valid state using the state log, if available and if we have not already found a valid (even if not the longest) match. */ if (__glibc_unlikely (err != REG_NOERROR)) return -2; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (__glibc_unlikely (at_init_state)) { if (old_state == cur_state) next_start_idx = next_char_idx; else at_init_state = false; } if (cur_state->halt) { /* Reached a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (&mctx->input); match = 1; /* We found a match, do not modify match_first below. */ p_match_first = NULL; if (!fl_longest_match) break; } } } if (p_match_first) *p_match_first += next_start_idx; return match_last; } /* Check NODE match the current context. */ static bool check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) { re_token_type_t type = dfa->nodes[node].type; unsigned int constraint = dfa->nodes[node].constraint; if (type != END_OF_RE) return false; if (!constraint) return true; if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) return false; return true; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; DEBUG_ASSERT (state->halt); context = re_string_context_at (&mctx->input, idx, mctx->eflags); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES; return -1 on match failure, -2 on error. */ static Idx proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; if (IS_EPSILON_NODE (dfa->nodes[node].type)) { re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; re_node_set *edests = &dfa->edests[node]; if (! re_node_set_contains (eps_via_nodes, node)) { bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; } /* Pick a valid destination, or return -1 if none is found. */ Idx dest_node = -1; for (Idx i = 0; i < edests->nelem; i++) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == -1) dest_node = candidate; else { /* In order to avoid infinite loop like "(a*)*", return the second epsilon-transition if the first was already considered. */ if (re_node_set_contains (eps_via_nodes, dest_node)) return candidate; /* Otherwise, push the second epsilon-transition on the fail stack. */ else if (fs != NULL && push_fail_stack (fs, *pidx, candidate, nregs, regs, prevregs, eps_via_nodes)) return -2; /* We know we are going to exit. */ break; } } return dest_node; } else { Idx naccepted = 0; re_token_type_t type = dfa->nodes[node].type; #ifdef RE_ENABLE_I18N if (dfa->nodes[node].accept_mb) naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else #endif /* RE_ENABLE_I18N */ if (type == OP_BACK_REF) { Idx subexp_idx = dfa->nodes[node].opr.idx + 1; if (subexp_idx < nregs) naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (subexp_idx >= nregs || regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (mctx->input.valid_len - *pidx < naccepted || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0)) return -1; } } if (naccepted == 0) { Idx dest_node; bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; dest_node = dfa->edests[node].elems[0]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; } } if (naccepted != 0 || check_node_accept (mctx, dfa->nodes + node, *pidx)) { Idx dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { reg_errcode_t err; Idx num = fs->num++; if (fs->num == fs->alloc) { struct re_fail_stack_ent_t *new_array; new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, fs->alloc * 2); if (new_array == NULL) return REG_ESPACE; fs->alloc *= 2; fs->stack = new_array; } fs->stack[num].idx = str_idx; fs->stack[num].node = dest_node; fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { if (fs == NULL || fs->num == 0) return -1; Idx num = --fs->num; *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); re_free (fs->stack[num].regs); *eps_via_nodes = fs->stack[num].eps_via_nodes; DEBUG_ASSERT (0 <= fs->stack[num].node); return fs->stack[num].node; } #define DYNARRAY_STRUCT regmatch_list #define DYNARRAY_ELEMENT regmatch_t #define DYNARRAY_PREFIX regmatch_list_ #include <malloc/dynarray-skeleton.c> /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ static reg_errcode_t __attribute_warn_unused_result__ set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack) { const re_dfa_t *dfa = preg->buffer; Idx idx, cur_node; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = { 0, 2, NULL }; struct regmatch_list prev_match; regmatch_list_init (&prev_match); DEBUG_ASSERT (nmatch > 1); DEBUG_ASSERT (mctx->state_log != NULL); if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); if (fs->stack == NULL) return REG_ESPACE; } else fs = NULL; cur_node = dfa->init_node; re_node_set_init_empty (&eps_via_nodes); if (!regmatch_list_resize (&prev_match, nmatch)) { regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match); memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node) || (fs && re_node_set_contains (&eps_via_nodes, cur_node))) { Idx reg_idx; cur_node = -1; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) { cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); break; } } if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match, &idx, cur_node, &eps_via_nodes, fs); if (__glibc_unlikely (cur_node < 0)) { if (__glibc_unlikely (cur_node == -2)) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) { if (fs) { Idx fs_idx; for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) { re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); re_free (fs->stack[fs_idx].regs); } re_free (fs->stack); } return REG_NOERROR; } static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) { int type = dfa->nodes[cur_node].type; if (type == OP_OPEN_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; /* We are at the first node of this sub expression. */ if (reg_num < nmatch) { pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } } else if (type == OP_CLOSE_SUBEXP) { /* We are at the last node of this sub expression. */ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { if (pmatch[reg_num].rm_so < cur_idx) { pmatch[reg_num].rm_eo = cur_idx; /* This is a non-empty match or we are not inside an optional subexpression. Accept this right away. */ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); } else { if (dfa->nodes[cur_node].opt_subexp && prev_idx_match[reg_num].rm_so != -1) /* We transited through an empty match for an optional subexpression, like (a?)*, and this is not the subexp's first match. Copy back the old content of the registers so that matches of an inner subexpression are undone as well, like in ((a?))*. */ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); else /* We completed a subexpression, but it may be part of an optional one, so do not update PREV_IDX_MATCH. */ pmatch[reg_num].rm_eo = cur_idx; } } } } /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to the LAST_NODE, we throw away the node 'a'. 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts string 's' and transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is thrown away, we throw away the node 'a'. 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, we throw away the node 'a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) { reg_errcode_t err; int null_cnt = 0; Idx str_idx = sctx->last_str_idx; re_node_set cur_dest; DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Then check each states in the state_log. */ while (str_idx > 0) { /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); re_node_set_free (&cur_dest); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; if (mctx->state_log[str_idx]) { err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t __attribute_warn_unused_result__ build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; Idx i; /* Then build the next sifted state. We build the next sifted state on 'cur_dest', and update 'sifted_states[str_idx]' with 'cur_dest'. Note: 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. 'cur_src' points the node_set of the old 'state_log[str_idx]' (with the epsilon nodes pre-filtered out). */ for (i = 0; i < cur_src->nelem; i++) { Idx prev_node = cur_src->elems[i]; int naccepted = 0; bool ok; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type)); #ifdef RE_ENABLE_I18N /* If the node may accept "multi byte". */ if (dfa->nodes[prev_node].accept_mb) naccepted = sift_states_iter_mb (mctx, sctx, prev_node, str_idx, sctx->last_str_idx); #endif /* RE_ENABLE_I18N */ /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { Idx to_idx = str_idx + naccepted; if (check_dst_limits (mctx, &sctx->limits, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ok = re_node_set_insert (cur_dest, prev_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) { Idx top = mctx->state_log_top; if ((next_state_log_idx >= mctx->input.bufs_len && mctx->input.bufs_len < mctx->input.len) || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx, next_state_log_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (top < next_state_log_idx) { memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) { Idx st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? NULL : &mctx->state_log[str_idx]->nodes); if (dest_nodes->nelem == 0) sctx->sifted_states[str_idx] = NULL; else { if (candidates) { /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) { reg_errcode_t err = REG_NOERROR; Idx i; re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < dest_nodes->nelem; i++) { err = re_node_set_merge (&state->inveclosure, dfa->inveclosures + dest_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, const re_node_set *candidates) { Idx ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) { Idx edst1 = dfa->edests[cur_node].elems[0]; Idx edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&except_nodes); return err; } } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx lim_idx, src_pos, dst_pos; Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; subexp_idx = dfa->nodes[ent->node].opr.idx; dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, dst_node, dst_idx, dst_bkref_idx); src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, src_node, src_idx, src_bkref_idx); /* In case of: <src> <dst> ( <subexp> ) ( <subexp> ) <src> <dst> ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return true; } return false; } static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *eclosures = dfa->eclosures + from_node; Idx node_idx; /* Else, we are on the boundary: examine the nodes on the epsilon closure. */ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { Idx node = eclosures->elems[node_idx]; switch (dfa->nodes[node].type) { case OP_BACK_REF: if (bkref_idx != -1) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; do { Idx dst; int cpos; if (ent->node != node) continue; if (subexp_idx < BITSET_WORD_BITS && !(ent->eps_reachable_subexps_map & ((bitset_word_t) 1 << subexp_idx))) continue; /* Recurse trying to reach the OP_OPEN_SUBEXP and OP_CLOSE_SUBEXP cases below. But, if the destination node is the same node as the source node, don't recurse because it would cause an infinite loop: a regex that exhibits this behavior is ()\1*\1* */ dst = dfa->edests[node].elems[0]; if (dst == from_node) { if (boundaries & 1) return -1; else /* if (boundaries & 2) */ return 0; } cpos = check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, dst, bkref_idx); if (cpos == -1 /* && (boundaries & 1) */) return -1; if (cpos == 0 && (boundaries & 2)) return 0; if (subexp_idx < BITSET_WORD_BITS) ent->eps_reachable_subexps_map &= ~((bitset_word_t) 1 << subexp_idx); } while (ent++->more); } break; case OP_OPEN_SUBEXP: if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) return -1; break; case OP_CLOSE_SUBEXP: if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) return 0; break; default: break; } } return (boundaries & 2) ? 1 : 0; } static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx from_node, Idx str_idx, Idx bkref_idx) { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int boundaries; /* If we are outside the range of the subexpression, return -1 or 1. */ if (str_idx < lim->subexp_from) return -1; if (lim->subexp_to < str_idx) return 1; /* If we are within the subexpression, return 0. */ boundaries = (str_idx == lim->subexp_from); boundaries |= (str_idx == lim->subexp_to) << 1; if (boundaries == 0) return 0; /* Else, examine epsilon closure. */ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, from_node, bkref_idx); } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx) { reg_errcode_t err; Idx node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ subexp_idx = dfa->nodes[ent->node].opr.idx; if (ent->subexp_to == str_idx) { Idx ops_node = -1; Idx cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Check the limitation of the close subexpression. */ if (cls_node >= 0) for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx node_idx, node; re_sift_context_t local_sctx; Idx first_idx = search_cur_bkref_entry (mctx, str_idx); if (first_idx == -1) return REG_NOERROR; local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { Idx enabled_idx; re_token_type_t type; struct re_backref_cache_entry *entry; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type != OP_BACK_REF) continue; entry = mctx->bkref_ents + first_idx; enabled_idx = first_idx; do { Idx subexp_len; Idx to_idx; Idx dst_node; bool ok; re_dfastate_t *cur_state; if (entry->node != node) continue; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; dst_node = (subexp_len ? dfa->nexts[node] : dfa->edests[node].elems[0]); if (to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) || check_dst_limits (mctx, &sctx->limits, node, str_idx, dst_node, to_idx)) continue; if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; ok = re_node_set_insert (&local_sctx.limits, enabled_idx); if (__glibc_unlikely (! ok)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove (&local_sctx.limits, enabled_idx); /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } while (enabled_idx++, entry++->more); } err = REG_NOERROR; free_return: if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return err; } #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx) { const re_dfa_t *const dfa = mctx->dfa; int naccepted; /* Check the node can accept "multi byte". */ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the "multi byte", or the destination was already thrown away, then the node couldn't accept the current input "multi byte". */ naccepted = 0; /* Otherwise, it is sure that the node could accept 'naccepted' bytes input. */ return naccepted; } #endif /* RE_ENABLE_I18N */ /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. Return NULL on failure. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * __attribute_warn_unused_result__ transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { re_dfastate_t **trtable; unsigned char ch; #ifdef RE_ENABLE_I18N /* If the current state can accept multibyte. */ if (__glibc_unlikely (state->accept_mb)) { *err = transit_state_mb (mctx, state); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } #endif /* RE_ENABLE_I18N */ /* Then decide the next state with the single byte. */ #if 0 if (0) /* don't use transition table */ return transit_state_sb (err, mctx, state); #endif /* Use transition table */ ch = re_string_fetch_byte (&mctx->input); for (;;) { trtable = state->trtable; if (__glibc_likely (trtable != NULL)) return trtable[ch]; trtable = state->word_trtable; if (__glibc_likely (trtable != NULL)) { unsigned int context; context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return trtable[ch + SBC_MAX]; else return trtable[ch]; } if (!build_trtable (mctx->dfa, state)) { *err = REG_ESPACE; return NULL; } /* Retry, we now have a transition table. */ } } /* Update the state_log if we need */ static re_dfastate_t * merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) { const re_dfa_t *const dfa = mctx->dfa; Idx cur_idx = re_string_cur_idx (&mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) { /* Check OP_OPEN_SUBEXP in the current state in case that we use them later. We must check them here, since the back references in the next state might use them. */ *err = check_subexp_matching_top (mctx, &next_state->nodes, cur_idx); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Skip bytes in the input that correspond to part of a multi-byte match, then look in the log for a state from which to restart matching. */ static re_dfastate_t * find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) { re_dfastate_t *cur_state; do { Idx max = mctx->state_log_top; Idx cur_str_idx = re_string_cur_idx (&mctx->input); do { if (++cur_str_idx > max) return NULL; re_string_skip_bytes (&mctx->input, 1); } while (mctx->state_log[cur_str_idx] == NULL); cur_state = merge_state_with_log (err, mctx, NULL); } while (*err == REG_NOERROR && cur_state == NULL); return cur_state; } /* Helper functions for transit_state. */ /* From the node set CUR_NODES, pick up the nodes whose types are OP_OPEN_SUBEXP and which have corresponding back references in the regular expression. And register them to use them later for evaluating the corresponding back references. */ static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx node_idx; reg_errcode_t err; /* TODO: This isn't efficient. Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) { Idx node = cur_nodes->elems[node_idx]; if (dfa->nodes[node].type == OP_OPEN_SUBEXP && dfa->nodes[node].opr.idx < BITSET_WORD_BITS && (dfa->used_bkref_map & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) { err = match_ctx_add_subtop (mctx, node, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } #if 0 /* Return the next state to which the current state STATE will transit by accepting the current input byte. Return NULL on failure. */ static re_dfastate_t * transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { const re_dfa_t *const dfa = mctx->dfa; re_node_set next_nodes; re_dfastate_t *next_state; Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { Idx cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (__glibc_unlikely (*err != REG_NOERROR)) { re_node_set_free (&next_nodes); return NULL; } } } context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (&mctx->input, 1); return next_state; } #endif #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; Idx cur_node_idx = pstate->nodes.elems[i]; int naccepted; Idx dest_idx; unsigned int context; re_dfastate_t *dest_state; if (!dfa->nodes[cur_node_idx].accept_mb) continue; if (dfa->nodes[cur_node_idx].constraint) { context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input), mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; } /* How many bytes the node can accept? */ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; /* The node can accepts 'naccepted' bytes. */ dest_idx = re_string_cur_idx (&mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_needed (mctx, dest_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1); new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } context = re_string_context_at (&mctx->input, dest_idx - 1, mctx->eflags); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (dest_state != NULL) re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR)) return err; } return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; Idx cur_str_idx = re_string_cur_idx (&mctx->input); for (i = 0; i < nodes->nelem; ++i) { Idx dest_str_idx, prev_nelem, bkc_idx; Idx node_idx = nodes->elems[i]; unsigned int context; const re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; /* Check whether 'node' is a backreference or not. */ if (node->type != OP_BACK_REF) continue; if (node->constraint) { context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; } /* 'node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; err = get_subexp (mctx, node_idx, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* And add the epsilon closures (which is 'new_dest_nodes') of the backreference to appropriate state_log. */ DEBUG_ASSERT (dfa->nexts[node_idx] != -1); for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { Idx subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = (subexp_len == 0 ? dfa->eclosures + dfa->edests[node_idx].elems[0] : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = re_string_context_at (&mctx->input, dest_str_idx - 1, mctx->eflags); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add 'new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&dest_nodes); goto free_return; } mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = check_subexp_matching_top (mctx, new_dest_nodes, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } } } err = REG_NOERROR; free_return: return err; } /* Enumerate all the candidates which the backreference BKREF_NODE can match at BKREF_STR_IDX, and register them by match_ctx_add_entry(). Note that we might collect inappropriate candidates here. However, the cost of checking them strictly here is too high, then we delay these checking for prune_impossible_nodes(). */ static reg_errcode_t __attribute_warn_unused_result__ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx subexp_num, sub_top_idx; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); if (cache_idx != -1) { const struct re_backref_cache_entry *entry = mctx->bkref_ents + cache_idx; do if (entry->node == bkref_node) return REG_NOERROR; /* We already checked it. */ while (entry++->more); } subexp_num = dfa->nodes[bkref_node].opr.idx; /* For each sub expression */ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) { reg_errcode_t err; re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; re_sub_match_last_t *sub_last; Idx sub_last_idx, sl_str, bkref_str_off; if (dfa->nodes[sub_top->node].opr.idx != subexp_num) continue; /* It isn't related. */ sl_str = sub_top->str_idx; bkref_str_off = bkref_str_idx; /* At first, check the last node of sub expressions we already evaluated. */ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) { regoff_t sl_str_diff; sub_last = sub_top->lasts[sub_last_idx]; sl_str_diff = sub_last->str_idx - sl_str; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_diff > 0) { if (__glibc_unlikely (bkref_str_off + sl_str_diff > mctx->input.valid_len)) { /* Not enough chars for a successful match. */ if (bkref_str_off + sl_str_diff > mctx->input.len) break; err = clean_state_log_if_needed (mctx, bkref_str_off + sl_str_diff); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) /* We don't need to search this sub expression any more. */ break; } bkref_str_off += sl_str_diff; sl_str += sl_str_diff; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated the buffer. */ buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (sub_last_idx < sub_top->nlasts) continue; if (sub_last_idx > 0) ++sl_str; /* Then, search for the other last nodes of the sub expression. */ for (; sl_str <= bkref_str_idx; ++sl_str) { Idx cls_node; regoff_t sl_str_off; const re_node_set *nodes; sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_off > 0) { if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx, bkref_str_off + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (buf [bkref_str_off++] != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ } if (mctx->state_log[sl_str] == NULL) continue; /* Does this state have a ')' of the sub expression? */ nodes = &mctx->state_log[sl_str]->nodes; cls_node = find_subexp_node (dfa, nodes, subexp_num, OP_CLOSE_SUBEXP); if (cls_node == -1) continue; /* No. */ if (sub_top->path == NULL) { sub_top->path = calloc (sizeof (state_array_t), sl_str - sub_top->str_idx + 1); if (sub_top->path == NULL) return REG_ESPACE; } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ err = check_arrival (mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (__glibc_unlikely (sub_last == NULL)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } /* Helper functions for get_subexp(). */ /* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. If it can arrive, register the sub expression expressed with SUB_TOP and SUB_LAST. */ static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) { reg_errcode_t err; Idx to_idx; /* Can the subexpression arrive the back reference? */ err = check_arrival (mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, sub_last->str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; return clean_state_log_if_needed (mctx, to_idx); } /* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. Search '(' if FL_OPEN, or search ')' otherwise. TODO: This function isn't efficient... Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) { Idx cls_idx; for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) { Idx cls_node = nodes->elems[cls_idx]; const re_token_t *node = dfa->nodes + cls_node; if (node->type == type && node->opr.idx == subexp_idx) return cls_node; } return -1; } /* Check whether the node TOP_NODE at TOP_STR can arrive to the node LAST_NODE at LAST_STR. We record the path onto PATH since it will be heavily reused. Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot, REG_ESPACE if memory is exhausted. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; Idx subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; re_node_set *cur_nodes, next_nodes; re_dfastate_t **backup_state_log; unsigned int context; subexp_num = dfa->nodes[top_node].opr.idx; /* Extend the buffer if we need. */ if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; Idx new_alloc; if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) return REG_ESPACE; new_alloc = old_alloc + incr_alloc; if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; path->array = new_array; path->alloc = new_alloc; memset (new_array + old_alloc, '\0', sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); } str_idx = path->next_idx ? path->next_idx : top_str; /* Temporary modify MCTX. */ backup_state_log = mctx->state_log; backup_cur_idx = mctx->input.cur_idx; mctx->state_log = path->array; mctx->input.cur_idx = str_idx; /* Setup initial node set. */ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); if (str_idx == top_str) { err = re_node_set_init_1 (&next_nodes, top_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } else { cur_state = mctx->state_log[str_idx]; if (cur_state && cur_state->has_backref) { err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else re_node_set_init_empty (&next_nodes); } if (str_idx == top_str || (cur_state && cur_state->has_backref)) { if (next_nodes.nelem) { err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; } for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) { re_node_set_empty (&next_nodes); if (mctx->state_log[str_idx + 1]) { err = re_node_set_merge (&next_nodes, &mctx->state_log[str_idx + 1]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } if (cur_state) { err = check_arrival_add_next_nodes (mctx, str_idx, &cur_state->non_eps_nodes, &next_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } ++str_idx; if (next_nodes.nelem) { err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; null_cnt = cur_state == NULL ? null_cnt + 1 : 0; } re_node_set_free (&next_nodes); cur_nodes = (mctx->state_log[last_str] == NULL ? NULL : &mctx->state_log[last_str]->nodes); path->next_idx = str_idx; /* Fix MCTX. */ mctx->state_log = backup_state_log; mctx->input.cur_idx = backup_cur_idx; /* Then check the current node set has the node LAST_NODE. */ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) return REG_NOERROR; return REG_NOMATCH; } /* Helper functions for check_arrival. */ /* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them to NEXT_NODES. TODO: This function is similar to the functions transit_state*(), however this function has many additional works. Can't we unify them? */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes) { const re_dfa_t *const dfa = mctx->dfa; bool ok; Idx cur_idx; #ifdef RE_ENABLE_I18N reg_errcode_t err = REG_NOERROR; #endif re_node_set union_set; re_node_set_init_empty (&union_set); for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) { int naccepted = 0; Idx cur_node = cur_nodes->elems[cur_idx]; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type)); #ifdef RE_ENABLE_I18N /* If the node may accept "multi byte". */ if (dfa->nodes[cur_node].accept_mb) { naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { re_dfastate_t *dest_state; Idx next_node = dfa->nexts[cur_node]; Idx next_idx = str_idx + naccepted; dest_state = mctx->state_log[next_idx]; re_node_set_empty (&union_set); if (dest_state) { err = re_node_set_merge (&union_set, &dest_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (__glibc_unlikely (mctx->state_log[next_idx] == NULL && err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } } #endif /* RE_ENABLE_I18N */ if (naccepted || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) { ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } } } re_node_set_free (&union_set); return REG_NOERROR; } /* For all the nodes in CUR_NODES, add the epsilon closures of them to CUR_NODES, however exclude the nodes which are: - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. */ static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) { reg_errcode_t err; Idx idx, outside_node; re_node_set new_nodes; DEBUG_ASSERT (cur_nodes->nelem); err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Create a new node set NEW_NODES with the nodes which are epsilon closures of the node in CUR_NODES. */ for (idx = 0; idx < cur_nodes->nelem; ++idx) { Idx cur_node = cur_nodes->elems[idx]; const re_node_set *eclosure = dfa->eclosures + cur_node; outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); if (outside_node == -1) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } else { /* There are problematic nodes, re-calculate incrementally. */ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } } re_node_set_free (cur_nodes); *cur_nodes = new_nodes; return REG_NOERROR; } /* Helper function for check_arrival_expand_ecl. Check incrementally the epsilon closure of TARGET, and if it isn't problematic append it to DST_NODES. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type) { Idx cur_node; for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) { bool ok; if (dfa->nodes[cur_node].type == type && dfa->nodes[cur_node].opr.idx == ex_subexp) { if (type == OP_CLOSE_SUBEXP) { ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; if (dfa->edests[cur_node].nelem == 0) break; if (dfa->edests[cur_node].nelem == 2) { reg_errcode_t err; err = check_arrival_expand_ecl_sub (dfa, dst_nodes, dfa->edests[cur_node].elems[1], ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) return err; } cur_node = dfa->edests[cur_node].elems[0]; } return REG_NOERROR; } /* For all the back references in the current state, calculate the destination of the back references by the appropriate entry in MCTX->BKREF_ENTS. */ static reg_errcode_t __attribute_warn_unused_result__ expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); struct re_backref_cache_entry *ent; if (cache_idx_start == -1) return REG_NOERROR; restart: ent = mctx->bkref_ents + cache_idx_start; do { Idx to_idx, next_node; /* Is this entry ENT is appropriate? */ if (!re_node_set_contains (cur_nodes, ent->node)) continue; /* No. */ to_idx = cur_str + ent->subexp_to - ent->subexp_from; /* Calculate the destination of the back reference, and append it to MCTX->STATE_LOG. */ if (to_idx == cur_str) { /* The backreference did epsilon transit, we must re-check all the node in the current state. */ re_node_set new_dests; reg_errcode_t err2, err3; next_node = dfa->edests[ent->node].elems[0]; if (re_node_set_contains (cur_nodes, next_node)) continue; err = re_node_set_init_1 (&new_dests, next_node); err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); err3 = re_node_set_merge (cur_nodes, &new_dests); re_node_set_free (&new_dests); if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR)) { err = (err != REG_NOERROR ? err : (err2 != REG_NOERROR ? err2 : err3)); return err; } /* TODO: It is still inefficient... */ goto restart; } else { re_node_set union_set; next_node = dfa->nexts[ent->node]; if (mctx->state_log[to_idx]) { bool ok; if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, next_node)) continue; err = re_node_set_init_copy (&union_set, &mctx->state_log[to_idx]->nodes); ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR || ! ok)) { re_node_set_free (&union_set); err = err != REG_NOERROR ? err : REG_ESPACE; return err; } } else { err = re_node_set_init_1 (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (__glibc_unlikely (mctx->state_log[to_idx] == NULL && err != REG_NOERROR)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool __attribute_noinline__ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) { reg_errcode_t err; Idx i, j; int ch; bool need_word_trtable = false; bitset_word_t elem, mask; Idx ndests; /* Number of the destination states from 'state'. */ re_dfastate_t **trtable; re_dfastate_t *dest_states[SBC_MAX]; re_dfastate_t *dest_states_word[SBC_MAX]; re_dfastate_t *dest_states_nl[SBC_MAX]; re_node_set follows; bitset_t acceptable; /* We build DFA states which corresponds to the destination nodes from 'state'. 'dests_node[i]' represents the nodes which i-th destination state contains, and 'dests_ch[i]' represents the characters which i-th destination state accepts. */ re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; /* Initialize transition table. */ state->word_trtable = state->trtable = NULL; /* At first, group all nodes belonging to 'state' into several destinations. */ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (__glibc_unlikely (ndests <= 0)) { /* Return false in case of an error, true otherwise. */ if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (state->trtable == NULL)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (__glibc_unlikely (err != REG_NOERROR)) { out_free: re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return false; } bitset_empty (acceptable); /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { Idx next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (__glibc_unlikely (err != REG_NOERROR)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) goto out_free; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (__glibc_unlikely (dest_states_word[i] == NULL && err != REG_NOERROR)) goto out_free; if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) need_word_trtable = true; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) goto out_free; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } if (!__glibc_unlikely (need_word_trtable)) { /* We don't care about whether the following character is a word character, or we are in a single-byte character set so we can discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ if (dfa->word_char[i] & mask) trtable[ch] = dest_states_word[j]; else trtable[ch] = dest_states[j]; } } else { /* We care about whether the following character is a word character, and we are in a multi-byte character set: discern by looking at the character code: build two 256-entry transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ trtable[ch] = dest_states[j]; trtable[ch + SBC_MAX] = dest_states_word[j]; } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (j = 0; j < ndests; ++j) if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[j]; if (need_word_trtable) trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return true; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. Return the number of destinations if successful, -1 on internal error. */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *dests_node, bitset_t *dests_ch) { reg_errcode_t err; bool ok; Idx i, j, k; Idx ndests; /* Number of the destinations from 'state'. */ bitset_t accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to 'state', */ for (i = 0; i < cur_nodes->nelem; ++i) { re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) bitset_merge (accepts, dfa->sb_char); else #endif bitset_set_all (accepts); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #ifdef RE_ENABLE_I18N else if (type == OP_UTF8_PERIOD) { if (ASCII_CHARS % BITSET_WORD_BITS == 0) memset (accepts, -1, ASCII_CHARS / CHAR_BIT); else bitset_merge (accepts, utf8_sb_map); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #endif else continue; /* Check the 'accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_NEWLINE_CONSTRAINT) { bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } if (constraint & NEXT_ENDBUF_CONSTRAINT) { bitset_empty (accepts); continue; } if (constraint & NEXT_WORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && !node->word_char) { bitset_empty (accepts); continue; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= dfa->word_char[j]); if (!any_set) continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && node->word_char) { bitset_empty (accepts); continue; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~dfa->word_char[j]); if (!any_set) continue; } } /* Then divide 'accepts' into DFA states, or create a new state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset_t intersec; /* Intersection sets, see below. */ bitset_t remains; /* Flags, see below. */ bitset_word_t has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and 'accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_WORDS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of 'accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_WORDS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of 'accepts', create a new group state, which has the 'remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (__glibc_unlikely (! ok)) goto error_return; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; bitset_empty (accepts); } } assume (ndests <= SBC_MAX); return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return -1; } #ifdef RE_ENABLE_I18N /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ # ifdef _LIBC # include <locale/weight.h> # endif static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx str_idx) { const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; Idx i; if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (__glibc_likely (c < 0xc2)) return 0; if (str_idx + 2 > input->len) return 0; d = re_string_byte_at (input, str_idx + 1); if (c < 0xe0) return (d < 0x80 || d > 0xbf) ? 0 : 2; else if (c < 0xf0) { char_len = 3; if (c == 0xe0 && d < 0xa0) return 0; } else if (c < 0xf8) { char_len = 4; if (c == 0xf0 && d < 0x90) return 0; } else if (c < 0xfc) { char_len = 5; if (c == 0xf8 && d < 0x88) return 0; } else if (c < 0xfe) { char_len = 6; if (c == 0xfc && d < 0x84) return 0; } else return 0; if (str_idx + char_len > input->len) return 0; for (i = 1; i < char_len; ++i) { d = re_string_byte_at (input, str_idx + i); if (d < 0x80 || d > 0xbf) return 0; } return char_len; } char_len = re_string_char_size_at (input, str_idx); if (node->type == OP_PERIOD) { if (char_len <= 1) return 0; /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } elem_len = re_string_elem_size_at (input, str_idx); if ((elem_len <= 1 && char_len <= 1) || char_len == 0) return 0; if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; # ifdef _LIBC const unsigned char *pin = ((const unsigned char *) re_string_get_buffer (input) + str_idx); Idx j; uint32_t nrules; # endif /* _LIBC */ int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } # ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = __collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ /* FIXME: Implement rational ranges here, too. */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); int32_t idx = findidx (table, indirect, extra, &cp, elem_len); int32_t rule = idx >> 24; idx &= 0xffffff; if (idx > 0) { size_t weight_len = weights[idx]; for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; int32_t equiv_class_rule = equiv_class_idx >> 24; equiv_class_idx &= 0xffffff; if (weights[equiv_class_idx] == weight_len && equiv_class_rule == rule && memcmp (weights + idx + 1, weights + equiv_class_idx + 1, weight_len) == 0) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else # endif /* _LIBC */ { /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) { if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); int32_t extrasize = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; for (idx = 0; idx < extrasize;) { int mbs_cnt; bool found = false; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = true; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } return UINT_MAX; } } # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) { unsigned char ch; ch = re_string_byte_at (&mctx->input, idx); switch (node->type) { case CHARACTER: if (node->opr.c != ch) return false; break; case SIMPLE_BRACKET: if (!bitset_contain (node->opr.sbcset, ch)) return false; break; #ifdef RE_ENABLE_I18N case OP_UTF8_PERIOD: if (ch >= ASCII_CHARS) return false; FALLTHROUGH; #endif case OP_PERIOD: if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) return false; break; default: return false; } if (node->constraint) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (&mctx->input, idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return false; } return true; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx, int min_len) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 <= pstr->bufs_len)) return REG_ESPACE; /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ ret = re_string_realloc_buffers (pstr, MAX (min_len, MIN (pstr->len, pstr->bufs_len * 2))); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ /* XXX We have no indication of the size of this buffer. If this allocation fail we have no indication that the state_log array does not have the right size. */ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len + 1); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->state_log = new_array; } /* Then reconstruct the buffers. */ if (pstr->icase) { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (pstr->trans != NULL) re_string_translate_buffer (pstr); } } return REG_NOERROR; } /* Functions for matching context. */ /* Initialize MCTX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = -1; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) return REG_ESPACE; mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) return REG_ESPACE; } /* Already zero-ed by the caller. else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->nsub_tops = 0; */ mctx->abkref_ents = n; mctx->max_mb_elem_len = 1; mctx->asub_tops = n; return REG_NOERROR; } /* Clean the entries which depend on the current input in MCTX. This function must be invoked when the matcher changes the start index of the input, or changes the input string. */ static void match_ctx_clean (re_match_context_t *mctx) { Idx st_idx; for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) { Idx sl_idx; re_sub_match_top_t *top = mctx->sub_tops[st_idx]; for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) { re_sub_match_last_t *last = top->lasts[sl_idx]; re_free (last->path.array); re_free (last); } re_free (top->lasts); if (top->path) { re_free (top->path->array); re_free (top->path); } re_free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void match_ctx_free (re_match_context_t *mctx) { /* First, free all the memory associated with MCTX->SUB_TOPS. */ match_ctx_clean (mctx); re_free (mctx->sub_tops); re_free (mctx->bkref_ents); } /* Add a new backreference entry to MCTX. Note that we assume that caller never call this function with duplicate entry, and call with STR_IDX which isn't smaller than any existing entry. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, Idx to) { if (mctx->nbkref_ents >= mctx->abkref_ents) { struct re_backref_cache_entry* new_entry; new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (__glibc_unlikely (new_entry == NULL)) { re_free (mctx->bkref_ents); return REG_ESPACE; } mctx->bkref_ents = new_entry; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } if (mctx->nbkref_ents > 0 && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; /* This is a cache that saves negative results of check_dst_limits_calc_pos. If bit N is clear, means that this entry won't epsilon-transition to an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If it is set, check_dst_limits_calc_pos_1 will recurse and try to find one such node. A backreference does not epsilon-transition unless it is empty, so set to all zeros if FROM != TO. */ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map = (from == to ? -1 : 0); mctx->bkref_ents[mctx->nbkref_ents++].more = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } /* Return the first entry with the same str_idx, or -1 if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) { Idx left, right, mid, last; last = right = mctx->nbkref_ents; for (left = 0; left < right;) { mid = (left + right) / 2; if (mctx->bkref_ents[mid].str_idx < str_idx) left = mid + 1; else right = mid; } if (left < last && mctx->bkref_ents[left].str_idx == str_idx) return left; else return -1; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { DEBUG_ASSERT (mctx->sub_tops != NULL); DEBUG_ASSERT (mctx->asub_tops > 0); if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) { Idx new_asub_tops = mctx->asub_tops * 2; re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, re_sub_match_top_t *, new_asub_tops); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->sub_tops = new_array; mctx->asub_tops = new_asub_tops; } mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) return REG_ESPACE; mctx->sub_tops[mctx->nsub_tops]->node = node; mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; return REG_NOERROR; } /* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. Return the new entry if successful, NULL if memory is exhausted. */ static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) { Idx new_alasts = 2 * subtop->alasts + 1; re_sub_match_last_t **new_array = re_realloc (subtop->lasts, re_sub_match_last_t *, new_alasts); if (__glibc_unlikely (new_array == NULL)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (__glibc_likely (new_entry != NULL)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; re_node_set_init_empty (&sctx->limits); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/relocatable.c�����������������������������������������������������������0000664�0000000�0000000�00000044651�14110572173�0017500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable packages. Copyright (C) 2003-2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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/>. */ /* Tell glibc's <stdio.h> to provide a prototype for getline(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "relocatable.h" #if ENABLE_RELOCATABLE #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef NO_XMALLOC # define xmalloc malloc #else # include "xalloc.h" #endif #if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #ifdef __EMX__ # define INCL_DOS # include <os2.h> # define strcmp stricmp # define strncmp strnicmp #endif #if DEPENDS_ON_LIBCHARSET # include <libcharset.h> #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV # include <iconv.h> #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS # include <libintl.h> #endif #if defined _WIN32 && !defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef GetModuleFileName # define GetModuleFileName GetModuleFileNameA #endif /* Faked cheap 'bool'. */ #undef bool #undef false #undef true #define bool int #define false 0 #define true 1 /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_FILE_NAME_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_FILE_NAME_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif /* Whether to enable the more costly support for relocatable libraries. It allows libraries to be have been installed with a different original prefix than the program. But it is quite costly, especially on Cygwin platforms, see below. Therefore we enable it by default only on native Windows platforms. */ #ifndef ENABLE_COSTLY_RELOCATABLE # if defined _WIN32 && !defined __CYGWIN__ # define ENABLE_COSTLY_RELOCATABLE 1 # else # define ENABLE_COSTLY_RELOCATABLE 0 # endif #endif /* Original installation prefix. */ static char *orig_prefix; static size_t orig_prefix_len; /* Current installation prefix. */ static char *curr_prefix; static size_t curr_prefix_len; /* These prefixes do not end in a slash. Anything that will be concatenated to them must start with a slash. */ /* Sets the original and the current installation prefix of this module. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ static void set_this_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { if (orig_prefix_arg != NULL && curr_prefix_arg != NULL /* Optimization: if orig_prefix and curr_prefix are equal, the relocation is a nop. */ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) { /* Duplicate the argument strings. */ char *memory; orig_prefix_len = strlen (orig_prefix_arg); curr_prefix_len = strlen (curr_prefix_arg); memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); #ifdef NO_XMALLOC if (memory != NULL) #endif { memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); orig_prefix = memory; memory += orig_prefix_len + 1; memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); curr_prefix = memory; return; } } orig_prefix = NULL; curr_prefix = NULL; /* Don't worry about wasted memory here - this function is usually only called once. */ } /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ void set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); /* Now notify all dependent libraries. */ #if DEPENDS_ON_LIBCHARSET libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif } #if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE) /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns it, freshly allocated. Returns NULL upon failure. */ #ifdef IN_LIBRARY #define compute_curr_prefix local_compute_curr_prefix static #endif char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname) { char *curr_installdir; const char *rel_installdir; if (curr_pathname == NULL) return NULL; /* Determine the relative installation directory, relative to the prefix. This is simply the difference between orig_installprefix and orig_installdir. */ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) != 0) /* Shouldn't happen - nothing should be installed outside $(prefix). */ return NULL; rel_installdir = orig_installdir + strlen (orig_installprefix); /* Determine the current installation directory. */ { const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); const char *p = curr_pathname + strlen (curr_pathname); char *q; while (p > p_base) { p--; if (ISSLASH (*p)) break; } q = (char *) xmalloc (p - curr_pathname + 1); #ifdef NO_XMALLOC if (q == NULL) return NULL; #endif memcpy (q, curr_pathname, p - curr_pathname); q[p - curr_pathname] = '\0'; curr_installdir = q; } /* Compute the current installation prefix by removing the trailing rel_installdir from it. */ { const char *rp = rel_installdir + strlen (rel_installdir); const char *cp = curr_installdir + strlen (curr_installdir); const char *cp_base = curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); while (rp > rel_installdir && cp > cp_base) { bool same = false; const char *rpi = rp; const char *cpi = cp; while (rpi > rel_installdir && cpi > cp_base) { rpi--; cpi--; if (ISSLASH (*rpi) || ISSLASH (*cpi)) { if (ISSLASH (*rpi) && ISSLASH (*cpi)) same = true; break; } /* Do case-insensitive comparison if the file system is always or often case-insensitive. It's better to accept the comparison if the difference is only in case, rather than to fail. */ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) break; #else if (*rpi != *cpi) break; #endif } if (!same) break; /* The last pathname component was the same. rpi and cpi now point to the slash before it. */ rp = rpi; cp = cpi; } if (rp > rel_installdir) { /* Unexpected: The curr_installdir does not end with rel_installdir. */ free (curr_installdir); return NULL; } { size_t computed_curr_prefix_len = cp - curr_installdir; char *computed_curr_prefix; computed_curr_prefix = (char *) xmalloc (computed_curr_prefix_len + 1); #ifdef NO_XMALLOC if (computed_curr_prefix == NULL) { free (curr_installdir); return NULL; } #endif memcpy (computed_curr_prefix, curr_installdir, computed_curr_prefix_len); computed_curr_prefix[computed_curr_prefix_len] = '\0'; free (curr_installdir); return computed_curr_prefix; } } } #endif /* !IN_LIBRARY || PIC */ #if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE /* Full pathname of shared library, or NULL. */ static char *shared_library_fullname; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows only. On Cygwin, it is better to use the Cygwin provided /proc interface, than to use native Windows API and cygwin_conv_to_posix_path, because it supports longer file names (see <https://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */ /* Determine the full pathname of the shared library when it is loaded. Documentation: <https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain> */ BOOL WINAPI DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) { (void) reserved; if (event == DLL_PROCESS_ATTACH) { /* The DLL is being loaded into an application's address range. */ static char location[MAX_PATH]; if (!GetModuleFileName (module_handle, location, sizeof (location))) /* Shouldn't happen. */ return FALSE; if (!IS_FILE_NAME_WITH_DIR (location)) /* Shouldn't happen. */ return FALSE; /* Avoid a memory leak when the same DLL get attached, detached, attached, detached, and so on. This happens e.g. when a spell checker DLL is used repeatedly by a mail program. */ if (!(shared_library_fullname != NULL && strcmp (shared_library_fullname, location) == 0)) /* Remember the full pathname of the shared library. */ shared_library_fullname = strdup (location); } return TRUE; } #elif defined __EMX__ extern int _CRT_init (void); extern void _CRT_term (void); extern void __ctordtorInit (void); extern void __ctordtorTerm (void); unsigned long _System _DLL_InitTerm (unsigned long hModule, unsigned long ulFlag) { static char location[CCHMAXPATH]; switch (ulFlag) { case 0: if (_CRT_init () == -1) return 0; __ctordtorInit(); /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html for specification of DosQueryModuleName(). */ if (DosQueryModuleName (hModule, sizeof (location), location)) return 0; _fnslashify (location); shared_library_fullname = strdup (location); break; case 1: __ctordtorTerm(); _CRT_term (); break; } return 1; } #else /* Unix */ static void find_shared_library_fullname () { #if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline() function. Cygwin >= 1.5 has /proc/self/maps and the getline() function too. But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on Cygwin 1.7. */ FILE *fp; /* Open the current process' maps file. It describes one VMA per line. */ fp = fopen ("/proc/self/maps", "r"); if (fp) { unsigned long address = (unsigned long) &find_shared_library_fullname; for (;;) { unsigned long start, end; int c; if (fscanf (fp, "%lx-%lx", &start, &end) != 2) break; if (address >= start && address <= end - 1) { /* Found it. Now see if this line contains a filename. */ while (c = getc (fp), c != EOF && c != '\n' && c != '/') continue; if (c == '/') { size_t size; int len; ungetc (c, fp); shared_library_fullname = NULL; size = 0; len = getline (&shared_library_fullname, &size, fp); if (len >= 0) { /* Success: filled shared_library_fullname. */ if (len > 0 && shared_library_fullname[len - 1] == '\n') shared_library_fullname[len - 1] = '\0'; } } break; } while (c = getc (fp), c != EOF && c != '\n') continue; } fclose (fp); } #endif } #endif /* Native Windows / EMX / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. Guaranteed to work only on Linux, EMX, Cygwin, and native Windows. */ static char * get_shared_library_fullname () { #if !(defined _WIN32 && !defined __CYGWIN__) && !defined __EMX__ static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) { find_shared_library_fullname (); tried_find_shared_library_fullname = true; } #endif return shared_library_fullname; } #endif /* PIC */ /* Returns the pathname, relocated according to the current installation directory. The returned string is either PATHNAME unmodified or a freshly allocated string that you can free with free() after casting it to 'char *'. */ const char * relocate (const char *pathname) { #if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE static int initialized; /* Initialization code for a shared library. */ if (!initialized) { /* At this point, orig_prefix and curr_prefix likely have already been set through the main program's set_program_name_and_installdir function. This is sufficient in the case that the library has initially been installed in the same orig_prefix. But we can do better, to also cover the cases that 1. it has been installed in a different prefix before being moved to orig_prefix and (later) to curr_prefix, 2. unlike the program, it has not moved away from orig_prefix. */ const char *orig_installprefix = INSTALLPREFIX; const char *orig_installdir = INSTALLDIR; char *curr_prefix_better; curr_prefix_better = compute_curr_prefix (orig_installprefix, orig_installdir, get_shared_library_fullname ()); set_relocation_prefix (orig_installprefix, curr_prefix_better != NULL ? curr_prefix_better : curr_prefix); if (curr_prefix_better != NULL) free (curr_prefix_better); initialized = 1; } #endif /* Note: It is not necessary to perform case insensitive comparison here, even for DOS-like file systems, because the pathname argument was typically created from the same Makefile variable as orig_prefix came from. */ if (orig_prefix != NULL && curr_prefix != NULL && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) { if (pathname[orig_prefix_len] == '\0') { /* pathname equals orig_prefix. */ char *result = (char *) xmalloc (strlen (curr_prefix) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { strcpy (result, curr_prefix); return result; } } else if (ISSLASH (pathname[orig_prefix_len])) { /* pathname starts with orig_prefix. */ const char *pathname_tail = &pathname[orig_prefix_len]; char *result = (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { memcpy (result, curr_prefix, curr_prefix_len); strcpy (result + curr_prefix_len, pathname_tail); return result; } } } #ifdef __EMX__ # ifdef __KLIBC__ # undef strncmp if (strncmp (pathname, "/@unixroot", 10) == 0 && (pathname[10] == '\0' || ISSLASH (pathname[10]))) { /* kLIBC itself processes /@unixroot prefix */ return pathname; } else # endif if (ISSLASH (pathname[0])) { const char *unixroot = getenv ("UNIXROOT"); if (unixroot && HAS_DEVICE (unixroot) && unixroot[2] == '\0') { char *result = (char *) xmalloc (2 + strlen (pathname) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { memcpy (result, unixroot, 2); strcpy (result + 2, pathname); return result; } } } #endif /* Nothing to relocate. */ return pathname; } /* Returns the pathname, relocated according to the current installation directory. This function sets *ALLOCATEDP to the allocated memory, or to NULL if no memory allocation occurs. So that, after you're done with the return value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ const char * relocate2 (const char *pathname, char **allocatedp) { const char *result = relocate (pathname); *allocatedp = (result != pathname ? (char *) result : NULL); return result; } #endif ���������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/relocatable.h�����������������������������������������������������������0000664�0000000�0000000�00000007701�14110572173�0017500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable packages. Copyright (C) 2003, 2005, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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 _RELOCATABLE_H #define _RELOCATABLE_H #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* This can be enabled through the configure --enable-relocatable option. */ #if ENABLE_RELOCATABLE /* When building a DLL, we must export some functions. Note that because this is a private .h file, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) #else # define RELOCATABLE_DLL_EXPORTED #endif /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ extern RELOCATABLE_DLL_EXPORTED void set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); /* Returns the pathname, relocated according to the current installation directory. The returned string is either PATHNAME unmodified or a freshly allocated string that you can free with free() after casting it to 'char *'. */ extern const char * relocate (const char *pathname); /* Returns the pathname, relocated according to the current installation directory. This function sets *ALLOCATEDP to the allocated memory, or to NULL if no memory allocation occurs. So that, after you're done with the return value, to reclaim allocated memory, you can do: free (*ALLOCATEDP). */ extern const char * relocate2 (const char *pathname, char **allocatedp); /* Memory management: relocate() potentially allocates memory, because it has to construct a fresh pathname. If this is a problem because your program calls relocate() frequently or because you want to fix all potential memory leaks anyway, you have three options: 1) Use this idiom: const char *pathname = ...; const char *rel_pathname = relocate (pathname); ... if (rel_pathname != pathname) free ((char *) rel_pathname); 2) Use this idiom: char *allocated; const char *rel_pathname = relocate2 (..., &allocated); ... free (allocated); 3) Think about caching the result. */ /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns it, freshly allocated. Returns NULL upon failure. */ extern char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) #define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) #endif #ifdef __cplusplus } #endif #endif /* _RELOCATABLE_H */ ���������������������������������������������������������������gnulib-20210822~d383792/lib/relocatable.valgrind����������������������������������������������������0000664�0000000�0000000�00000001705�14110572173�0021055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about a memory leak in relocatable.c. # Copyright (C) 2017-2021 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/>. # set_this_relocation_prefix leaks intentionally { relocatable/set_this_relocation_prefix Memcheck:Leak fun:malloc fun:set_this_relocation_prefix fun:set_relocation_prefix } �����������������������������������������������������������gnulib-20210822~d383792/lib/relocwrapper.c����������������������������������������������������������0000664�0000000�0000000�00000015235�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Relocating wrapper program. Copyright (C) 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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/>. */ /* Dependencies: relocwrapper -> progname -> progreloc -> stat -> filename -> pathmax -> verify -> areadlink -> careadlinkat -> allocator -> readlink -> stat -> canonicalize-lgpl -> libc-config -> errno -> fcntl-h -> stdbool -> sys_stat -> unistd -> eloop-threshold -> filename -> idx -> intprops -> scratch_buffer -> malloc-posix -> realloc-posix -> free-posix -> pathmax -> mempcpy -> rawmemchr -> readlink -> stat -> double-slash-root -> relocatable -> setenv -> malloca -> fprintf-posix [ignore, cut dependency tree here] -> strerror [ignore, cut dependency tree here] -> c-ctype Macros that need to be set while compiling this file: - ENABLE_RELOCATABLE 1 - INSTALLPREFIX the base installation directory - INSTALLDIR the directory into which this program is installed - LIBPATHVAR the platform dependent runtime library path variable - LIBDIRS a comma-terminated list of strings representing the list of directories that contain the libraries at installation time We don't want to internationalize this wrapper because then it would depend on libintl and therefore need relocation itself. So use only libc functions, no gettext(), no error(), no xmalloc(), no xsetenv(). */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include "progname.h" #include "relocatable.h" #include "c-ctype.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef fprintf #undef strerror /* Return a copy of the filename, with an extra ".bin" at the end. More generally, it replaces "${EXEEXT}" at the end with ".bin${EXEEXT}". */ static char * add_dotbin (const char *filename) { size_t filename_len = strlen (filename); char *result = (char *) malloc (filename_len + 4 + 1); if (result != NULL) { if (sizeof (EXEEXT) > sizeof ("")) { /* EXEEXT handling. */ const size_t exeext_len = sizeof (EXEEXT) - sizeof (""); static const char exeext[] = EXEEXT; if (filename_len > exeext_len) { /* Compare using an inlined copy of c_strncasecmp(), because the filenames may have undergone a case conversion since they were packaged. In other words, EXEEXT may be ".exe" on one system and ".EXE" on another. */ const char *s1 = filename + filename_len - exeext_len; const char *s2 = exeext; for (; *s1 != '\0'; s1++, s2++) { unsigned char c1 = *s1; unsigned char c2 = *s2; if (c_tolower (c1) != c_tolower (c2)) goto simple_append; } /* Insert ".bin" before EXEEXT or its equivalent. */ memcpy (result, filename, filename_len - exeext_len); memcpy (result + filename_len - exeext_len, ".bin", 4); memcpy (result + filename_len - exeext_len + 4, filename + filename_len - exeext_len, exeext_len + 1); return result; } } simple_append: /* Simply append ".bin". */ memcpy (result, filename, filename_len); memcpy (result + filename_len, ".bin", 4 + 1); return result; } else { fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); exit (1); } } /* List of directories that contain the libraries. */ static const char *libdirs[] = { LIBDIRS NULL }; /* Verify that at least one directory is given. */ verify (sizeof (libdirs) / sizeof (libdirs[0]) > 1); /* Relocate the list of directories that contain the libraries. */ static void relocate_libdirs () { size_t i; for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) libdirs[i] = relocate (libdirs[i]); } /* Activate the list of directories in the LIBPATHVAR. */ static void activate_libdirs () { const char *old_value; size_t total; size_t i; char *value; char *p; old_value = getenv (LIBPATHVAR); if (old_value == NULL) old_value = ""; total = 0; for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) total += strlen (libdirs[i]) + 1; total += strlen (old_value) + 1; value = (char *) malloc (total); if (value == NULL) { fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); exit (1); } p = value; for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++) { size_t len = strlen (libdirs[i]); memcpy (p, libdirs[i], len); p += len; *p++ = ':'; } if (old_value[0] != '\0') strcpy (p, old_value); else p[-1] = '\0'; if (setenv (LIBPATHVAR, value, 1) < 0) { fprintf (stderr, "%s: %s\n", program_name, "memory exhausted"); exit (1); } } int main (int argc, char *argv[]) { char *full_program_name; /* Set the program name and perform preparations for get_full_program_name() and relocate(). */ set_program_name_and_installdir (argv[0], INSTALLPREFIX, INSTALLDIR); /* Get the full program path. (Important if accessed through a symlink.) */ full_program_name = get_full_program_name (); if (full_program_name == NULL) full_program_name = argv[0]; /* Invoke the real program, with suffix ".bin". */ argv[0] = add_dotbin (full_program_name); relocate_libdirs (); activate_libdirs (); execv (argv[0], argv); fprintf (stderr, "%s: could not execute %s: %s\n", program_name, argv[0], strerror (errno)); exit (127); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/remainder.c�������������������������������������������������������������0000664�0000000�0000000�00000005411�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2012-2021 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/>. */ #if ! (defined USE_LONG_DOUBLE || defined USE_FLOAT) # include <config.h> #endif /* Specification. */ #include <math.h> #ifdef USE_LONG_DOUBLE # define REMAINDER remainderl # define DOUBLE long double # define L_(literal) literal##L # define FABS fabsl # define FMOD fmodl # define ISNAN isnanl #elif ! defined USE_FLOAT # define REMAINDER remainder # define DOUBLE double # define L_(literal) literal # define FABS fabs # define FMOD fmod # define ISNAN isnand #else /* defined USE_FLOAT */ # define REMAINDER remainderf # define DOUBLE float # define L_(literal) literal##f # define FABS fabsf # define FMOD fmodf # define ISNAN isnanf #endif #undef NAN #if defined _MSC_VER static DOUBLE zero; # define NAN (zero / zero) #else # define NAN (L_(0.0) / L_(0.0)) #endif DOUBLE REMAINDER (DOUBLE x, DOUBLE y) { if (isfinite (x) && isfinite (y) && y != L_(0.0)) { if (x == L_(0.0)) /* Return x, regardless of the sign of y. */ return x; { int negate = ((!signbit (x)) ^ (!signbit (y))); DOUBLE r; /* Take the absolute value of x and y. */ x = FABS (x); y = FABS (y); /* Trivial case that requires no computation. */ if (x <= L_(0.5) * y) return (negate ? - x : x); /* With a fixed y, the function x -> remainder(x,y) has a period 2*y. Therefore we can reduce the argument x modulo 2*y. And it's no problem if 2*y overflows, since fmod(x,Inf) = x. */ x = FMOD (x, L_(2.0) * y); /* Consider the 3 cases: 0 <= x <= 0.5 * y 0.5 * y < x < 1.5 * y 1.5 * y <= x <= 2.0 * y */ if (x <= L_(0.5) * y) r = x; else { r = x - y; if (r > L_(0.5) * y) r = x - L_(2.0) * y; } return (negate ? - r : r); } } else { if (ISNAN (x) || ISNAN (y)) return x + y; /* NaN */ else if (isinf (y)) return x; else /* x infinite or y zero */ return NAN; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/remainderf.c������������������������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0017326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_REMAINDER float remainderf (float x, float y) { return (float) remainder ((double) x, (double) y); } #else # define USE_FLOAT # include "remainder.c" #endif ������������������������������������������������������gnulib-20210822~d383792/lib/remainderl.c������������������������������������������������������������0000664�0000000�0000000�00000001731�14110572173�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. Copyright (C) 2012-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double remainderl (long double x, long double y) { return remainder (x, y); } #else # define USE_LONG_DOUBLE # include "remainder.c" #endif ���������������������������������������gnulib-20210822~d383792/lib/remove.c����������������������������������������������������������������0000664�0000000�0000000�00000003016�14110572173�0016506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remove a file or directory. Copyright (C) 2009-2021 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 Eric Blake */ #include <config.h> #include <stdio.h> #include <errno.h> #include <unistd.h> #undef remove /* Remove NAME from the file system. This works around C89 platforms that don't handle directories like POSIX requires; it also works around Solaris 9 bugs with trailing slash. */ int rpl_remove (char const *name) { /* It is faster to just try rmdir, and fall back on unlink, than it is to use lstat to see what we are about to remove. Technically, it is more likely that we want unlink, not rmdir, but we cannot guarantee the safety of unlink on directories. Trailing slash bugs are handled by our rmdir and unlink wrappers. */ int result = rmdir (name); if (result && errno == ENOTDIR) result = unlink (name); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rename.c����������������������������������������������������������������0000664�0000000�0000000�00000032163�14110572173�0016465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rename bugs in some systems. Copyright (C) 2001-2003, 2005-2006, 2009-2021 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 Volker Borchert, Eric Blake. */ #include <config.h> #include <stdio.h> #undef rename #if defined _WIN32 && ! defined __CYGWIN__ /* The mingw rename has problems with trailing slashes; it also requires use of native Windows calls to allow atomic renames over existing files. */ # include <errno.h> # include <stdbool.h> # include <stdlib.h> # include <sys/stat.h> # include <unistd.h> # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "dirname.h" /* Don't assume that UNICODE is not defined. */ # undef MoveFileEx # define MoveFileEx MoveFileExA /* Rename the file SRC to DST. This replacement is necessary on Windows, on which the system rename function will not replace an existing DST. */ int rpl_rename (char const *src, char const *dst) { int error; size_t src_len = strlen (src); size_t dst_len = strlen (dst); char *src_base = last_component (src); char *dst_base = last_component (dst); bool src_slash; bool dst_slash; bool dst_exists; struct stat src_st; struct stat dst_st; /* Filter out dot as last component. */ if (!src_len || !dst_len) { errno = ENOENT; return -1; } if (*src_base == '.') { size_t len = base_len (src_base); if (len == 1 || (len == 2 && src_base[1] == '.')) { errno = EINVAL; return -1; } } if (*dst_base == '.') { size_t len = base_len (dst_base); if (len == 1 || (len == 2 && dst_base[1] == '.')) { errno = EINVAL; return -1; } } /* Presence of a trailing slash requires directory semantics. If the source does not exist, or if the destination cannot be turned into a directory, give up now. Otherwise, strip trailing slashes before calling rename. There are no symlinks on mingw, so stat works instead of lstat. */ src_slash = ISSLASH (src[src_len - 1]); dst_slash = ISSLASH (dst[dst_len - 1]); if (stat (src, &src_st)) return -1; if (stat (dst, &dst_st)) { if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) return -1; dst_exists = false; } else { if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) { errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; return -1; } dst_exists = true; } /* There are no symlinks, so if a file existed with a trailing slash, it must be a directory, and we don't have to worry about stripping strip trailing slash. However, mingw refuses to replace an existing empty directory, so we have to help it out. And canonicalize_file_name is not yet ported to mingw; however, for directories, getcwd works as a viable alternative. Ensure that we can get back to where we started before using it; later attempts to return are fatal. Note that we can end up losing a directory if rename then fails, but it was empty, so not much damage was done. */ if (dst_exists && S_ISDIR (dst_st.st_mode)) { char *cwd = getcwd (NULL, 0); char *src_temp; char *dst_temp; if (!cwd || chdir (cwd)) return -1; if (IS_ABSOLUTE_FILE_NAME (src)) { dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); src_temp = chdir (src) ? NULL : getcwd (NULL, 0); } else { src_temp = chdir (src) ? NULL : getcwd (NULL, 0); if (!IS_ABSOLUTE_FILE_NAME (dst) && chdir (cwd)) abort (); dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); } if (chdir (cwd)) abort (); free (cwd); if (!src_temp || !dst_temp) { free (src_temp); free (dst_temp); errno = ENOMEM; return -1; } src_len = strlen (src_temp); if (strncmp (src_temp, dst_temp, src_len) == 0 && (ISSLASH (dst_temp[src_len]) || dst_temp[src_len] == '\0')) { error = dst_temp[src_len]; free (src_temp); free (dst_temp); if (error) { errno = EINVAL; return -1; } return 0; } if (rmdir (dst)) { free (src_temp); free (dst_temp); return -1; } free (src_temp); free (dst_temp); } /* MoveFileEx works if SRC is a directory without any flags, but fails with MOVEFILE_REPLACE_EXISTING, so try without flags first. Thankfully, MoveFileEx handles hard links correctly, even though rename() does not. */ if (MoveFileEx (src, dst, 0)) return 0; /* Retry with MOVEFILE_REPLACE_EXISTING if the move failed due to the destination already existing. */ error = GetLastError (); if (error == ERROR_FILE_EXISTS || error == ERROR_ALREADY_EXISTS) { if (MoveFileEx (src, dst, MOVEFILE_REPLACE_EXISTING)) return 0; error = GetLastError (); } switch (error) { case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: case ERROR_BAD_PATHNAME: case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_CURRENT_DIRECTORY: errno = EBUSY; break; case ERROR_NOT_SAME_DEVICE: errno = EXDEV; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_HANDLE_DISK_FULL: case ERROR_DISK_FULL: case ERROR_DISK_TOO_FRAGMENTED: errno = ENOSPC; break; case ERROR_FILE_EXISTS: case ERROR_ALREADY_EXISTS: errno = EEXIST; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_INVALID_NAME: case ERROR_DELETE_PENDING: errno = EPERM; /* ? */ break; # ifndef ERROR_FILE_TOO_LARGE /* This value is documented but not defined in all versions of windows.h. */ # define ERROR_FILE_TOO_LARGE 223 # endif case ERROR_FILE_TOO_LARGE: errno = EFBIG; break; default: errno = EINVAL; break; } return -1; } #else /* ! W32 platform */ # include <errno.h> # include <stdio.h> # include <stdlib.h> # include <string.h> # include <sys/stat.h> # include <unistd.h> # include "dirname.h" # include "same-inode.h" /* Rename the file SRC to DST, fixing any trailing slash bugs. */ int rpl_rename (char const *src, char const *dst) { size_t src_len = strlen (src); size_t dst_len = strlen (dst); char *src_temp = (char *) src; char *dst_temp = (char *) dst; bool src_slash; bool dst_slash; _GL_UNUSED bool dst_exists; int ret_val = -1; int rename_errno = ENOTDIR; struct stat src_st; struct stat dst_st; if (!src_len || !dst_len) return rename (src, dst); /* Let strace see the ENOENT failure. */ # if RENAME_DEST_EXISTS_BUG { char *src_base = last_component (src); char *dst_base = last_component (dst); if (*src_base == '.') { size_t len = base_len (src_base); if (len == 1 || (len == 2 && src_base[1] == '.')) { errno = EINVAL; return -1; } } if (*dst_base == '.') { size_t len = base_len (dst_base); if (len == 1 || (len == 2 && dst_base[1] == '.')) { errno = EINVAL; return -1; } } } # endif /* RENAME_DEST_EXISTS_BUG */ src_slash = src[src_len - 1] == '/'; dst_slash = dst[dst_len - 1] == '/'; # if !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG /* If there are no trailing slashes, then trust the native implementation unless we also suspect issues with hard link detection or file/directory conflicts. */ if (!src_slash && !dst_slash) return rename (src, dst); # endif /* !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG */ /* Presence of a trailing slash requires directory semantics. If the source does not exist, or if the destination cannot be turned into a directory, give up now. Otherwise, strip trailing slashes before calling rename. */ if (lstat (src, &src_st)) return -1; if (lstat (dst, &dst_st)) { if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) return -1; dst_exists = false; } else { if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) { errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; return -1; } # if RENAME_HARD_LINK_BUG if (SAME_INODE (src_st, dst_st)) return 0; # endif /* RENAME_HARD_LINK_BUG */ dst_exists = true; } # if (RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG \ || RENAME_HARD_LINK_BUG) /* If the only bug was that a trailing slash was allowed on a non-existing file destination, as in Solaris 10, then we've already covered that situation. But if there is any problem with a trailing slash on an existing source or destination, as in Solaris 9, or if a directory can overwrite a symlink, as on Cygwin 1.5, or if directories cannot be created with trailing slash, as on NetBSD 1.6, then we must strip the offending slash and check that we have not encountered a symlink instead of a directory. Stripping a trailing slash interferes with POSIX semantics, where rename behavior on a symlink with a trailing slash operates on the corresponding target directory. We prefer the GNU semantics of rejecting any use of a symlink with trailing slash, but do not enforce them, since Solaris 10 is able to obey POSIX semantics and there might be clients expecting it, as counter-intuitive as those semantics are. Technically, we could also follow the POSIX behavior by chasing a readlink trail, but that is harder to implement. */ if (src_slash) { src_temp = strdup (src); if (!src_temp) { /* Rather than rely on strdup-posix, we set errno ourselves. */ rename_errno = ENOMEM; goto out; } strip_trailing_slashes (src_temp); if (lstat (src_temp, &src_st)) { rename_errno = errno; goto out; } if (S_ISLNK (src_st.st_mode)) goto out; } if (dst_slash) { dst_temp = strdup (dst); if (!dst_temp) { rename_errno = ENOMEM; goto out; } strip_trailing_slashes (dst_temp); if (lstat (dst_temp, &dst_st)) { if (errno != ENOENT) { rename_errno = errno; goto out; } } else if (S_ISLNK (dst_st.st_mode)) goto out; } # endif /* RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG || RENAME_HARD_LINK_BUG */ # if RENAME_DEST_EXISTS_BUG /* Cygwin 1.5 sometimes behaves oddly when moving a non-empty directory on top of an empty one (the old directory name can reappear if the new directory tree is removed). Work around this by removing the target first, but don't remove the target if it is a subdirectory of the source. Note that we can end up losing a directory if rename then fails, but it was empty, so not much damage was done. */ if (dst_exists && S_ISDIR (dst_st.st_mode)) { if (src_st.st_dev != dst_st.st_dev) { rename_errno = EXDEV; goto out; } if (src_temp != src) free (src_temp); src_temp = canonicalize_file_name (src); if (dst_temp != dst) free (dst_temp); dst_temp = canonicalize_file_name (dst); if (!src_temp || !dst_temp) { rename_errno = ENOMEM; goto out; } src_len = strlen (src_temp); if (strncmp (src_temp, dst_temp, src_len) == 0 && dst_temp[src_len] == '/') { rename_errno = EINVAL; goto out; } if (rmdir (dst)) { rename_errno = errno; goto out; } } # endif /* RENAME_DEST_EXISTS_BUG */ ret_val = rename (src_temp, dst_temp); rename_errno = errno; out: _GL_UNUSED_LABEL; if (src_temp != src) free (src_temp); if (dst_temp != dst) free (dst_temp); errno = rename_errno; return ret_val; } #endif /* ! W32 platform */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/renameat.c��������������������������������������������������������������0000664�0000000�0000000�00000001637�14110572173�0017014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rename a file relative to open directories. Copyright 2017-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "renameatu.h" int renameat (int fd1, char const *src, int fd2, char const *dst) { return renameatu (fd1, src, fd2, dst, 0); } �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/renameatu.c�������������������������������������������������������������0000664�0000000�0000000�00000016007�14110572173�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rename a file relative to open directories. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake and Paul Eggert */ #include <config.h> #include "renameatu.h" #include <errno.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #ifdef __linux__ # include <sys/syscall.h> #endif static int errno_fail (int e) { errno = e; return -1; } #if HAVE_RENAMEAT # include <stdbool.h> # include <stdlib.h> # include <string.h> # include "dirname.h" # include "openat.h" #else # include "openat-priv.h" static int rename_noreplace (char const *src, char const *dst) { /* This has a race between the call to lstat and the call to rename. */ struct stat st; return (lstat (dst, &st) == 0 || errno == EOVERFLOW ? errno_fail (EEXIST) : errno == ENOENT ? rename (src, dst) : -1); } #endif #undef renameat /* Rename FILE1, in the directory open on descriptor FD1, to FILE2, in the directory open on descriptor FD2. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then rename/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. Obey FLAGS when doing the renaming. If FLAGS is zero, this function is equivalent to renameat (FD1, SRC, FD2, DST). Otherwise, attempt to implement FLAGS even if the implementation is not atomic; this differs from the GNU/Linux native renameat2, which fails if it cannot guarantee atomicity. */ int renameatu (int fd1, char const *src, int fd2, char const *dst, unsigned int flags) { int ret_val = -1; int err = EINVAL; #ifdef HAVE_RENAMEAT2 ret_val = renameat2 (fd1, src, fd2, dst, flags); err = errno; #elif defined SYS_renameat2 ret_val = syscall (SYS_renameat2, fd1, src, fd2, dst, flags); err = errno; #endif if (! (ret_val < 0 && (err == EINVAL || err == ENOSYS || err == ENOTSUP))) return ret_val; #if HAVE_RENAMEAT { # if defined RENAME_EXCL /* macOS */ unsigned int uflags; # endif size_t src_len; size_t dst_len; char *src_temp = (char *) src; char *dst_temp = (char *) dst; bool src_slash; bool dst_slash; int rename_errno = ENOTDIR; struct stat src_st; struct stat dst_st; bool dst_found_nonexistent = false; /* Check the flags. */ # if defined RENAME_EXCL /* We can support RENAME_EXCHANGE and RENAME_NOREPLACE. */ if (flags & ~(RENAME_EXCHANGE | RENAME_NOREPLACE)) # else /* RENAME_NOREPLACE is the only flag currently supported. */ if (flags & ~RENAME_NOREPLACE) # endif return errno_fail (ENOTSUP); # if defined RENAME_EXCL uflags = ((flags & RENAME_EXCHANGE ? RENAME_SWAP : 0) | (flags & RENAME_NOREPLACE ? RENAME_EXCL : 0)); # endif if ((flags & RENAME_NOREPLACE) != 0) { /* This has a race between the call to lstatat and the calls to renameat below. This lstatat is needed even if RENAME_EXCL is defined, because RENAME_EXCL is buggy on macOS 11.2: renameatx_np (fd, "X", fd, "X", RENAME_EXCL) incorrectly succeeds when X exists. */ if (lstatat (fd2, dst, &dst_st) == 0 || errno == EOVERFLOW) return errno_fail (EEXIST); if (errno != ENOENT) return -1; dst_found_nonexistent = true; } /* Let strace see any ENOENT failure. */ src_len = strlen (src); dst_len = strlen (dst); if (!src_len || !dst_len) # if defined RENAME_EXCL return renameatx_np (fd1, src, fd2, dst, uflags); # else return renameat (fd1, src, fd2, dst); # endif src_slash = src[src_len - 1] == '/'; dst_slash = dst[dst_len - 1] == '/'; if (!src_slash && !dst_slash) # if defined RENAME_EXCL return renameatx_np (fd1, src, fd2, dst, uflags); # else return renameat (fd1, src, fd2, dst); # endif /* Presence of a trailing slash requires directory semantics. If the source does not exist, or if the destination cannot be turned into a directory, give up now. Otherwise, strip trailing slashes before calling rename. */ if (lstatat (fd1, src, &src_st)) return -1; if (dst_found_nonexistent) { if (!S_ISDIR (src_st.st_mode)) return errno_fail (ENOENT); } else if (lstatat (fd2, dst, &dst_st)) { if (errno != ENOENT || !S_ISDIR (src_st.st_mode)) return -1; } else if (!S_ISDIR (dst_st.st_mode)) return errno_fail (ENOTDIR); else if (!S_ISDIR (src_st.st_mode)) return errno_fail (EISDIR); # if RENAME_TRAILING_SLASH_SOURCE_BUG /* See the lengthy comment in rename.c why Solaris 9 is forced to GNU behavior, while Solaris 10 is left with POSIX behavior, regarding symlinks with trailing slash. */ ret_val = -1; if (src_slash) { src_temp = strdup (src); if (!src_temp) { /* Rather than rely on strdup-posix, we set errno ourselves. */ rename_errno = ENOMEM; goto out; } strip_trailing_slashes (src_temp); if (lstatat (fd1, src_temp, &src_st)) { rename_errno = errno; goto out; } if (S_ISLNK (src_st.st_mode)) goto out; } if (dst_slash) { dst_temp = strdup (dst); if (!dst_temp) { rename_errno = ENOMEM; goto out; } strip_trailing_slashes (dst_temp); if (lstatat (fd2, dst_temp, &dst_st)) { if (errno != ENOENT) { rename_errno = errno; goto out; } } else if (S_ISLNK (dst_st.st_mode)) goto out; } # endif /* RENAME_TRAILING_SLASH_SOURCE_BUG */ /* renameat does not honor trailing / on Solaris 10. Solve it in a similar manner to rename. No need to worry about bugs not present on Solaris, since all other systems either lack renameat or honor trailing slash correctly. */ # if defined RENAME_EXCL ret_val = renameatx_np (fd1, src_temp, fd2, dst_temp, uflags); # else ret_val = renameat (fd1, src_temp, fd2, dst_temp); # endif rename_errno = errno; goto out; out: if (src_temp != src) free (src_temp); if (dst_temp != dst) free (dst_temp); errno = rename_errno; return ret_val; } #else /* !HAVE_RENAMEAT */ /* RENAME_NOREPLACE is the only flag currently supported. */ if (flags & ~RENAME_NOREPLACE) return errno_fail (ENOTSUP); return at_func2 (fd1, src, fd2, dst, flags ? rename_noreplace : rename); #endif /* !HAVE_RENAMEAT */ } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/renameatu.h�������������������������������������������������������������0000664�0000000�0000000�00000002137�14110572173�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rename a file relative to open directories. Copyright 2017-2021 Free Software Foundation, Inc. This 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 Paul Eggert */ /* Get RENAME_* macros from <stdio.h> if present, otherwise supply the traditional Linux values. */ #include <stdio.h> #ifndef RENAME_NOREPLACE # define RENAME_NOREPLACE (1 << 0) # define RENAME_EXCHANGE (1 << 1) # define RENAME_WHITEOUT (1 << 2) #endif extern int renameatu (int, char const *, int, char const *, unsigned int); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/resource-ext.h����������������������������������������������������������0000664�0000000�0000000�00000003215�14110572173�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extra functions for resource usage. Copyright (C) 2011-2021 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 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 _RESOURCE_EXT_H #define _RESOURCE_EXT_H #include <stdint.h> #ifdef __cplusplus extern "C" { #endif /* Returns the amount of address space currently in use by the current process, or zero if unknown. This is the quantity which is limited by setrlimit(RLIMIT_AS,...). Note: This function always returns zero on AIX. */ extern uintptr_t get_rusage_as (void); /* Returns the size of the data segment, or zero if unknown. This is the quantity which is limited by setrlimit(RLIMIT_DATA,...). Note: This function always returns zero on HP-UX 11.00. Note: The total size of all malloc()ed memory is bounded by the size of the data segment only on the following platforms: FreeBSD, AIX, HP-UX 11.23 and newer, IRIX, OSF/1, Solaris, BeOS, Haiku. */ extern uintptr_t get_rusage_data (void); #ifdef __cplusplus } #endif #endif /* _RESOURCE_EXT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rewinddir.c�������������������������������������������������������������0000664�0000000�0000000�00000003062�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Restart reading the entries of a directory from the beginning. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include "dirent-private.h" /* Don't assume that UNICODE is not defined. */ #undef FindFirstFile #define FindFirstFile FindFirstFileA void rewinddir (DIR *dirp) { /* Like in closedir(). */ if (dirp->current != INVALID_HANDLE_VALUE) FindClose (dirp->current); /* Like in opendir(). */ dirp->status = -1; dirp->current = FindFirstFile (dirp->dir_name_mask, &dirp->entry); if (dirp->current == INVALID_HANDLE_VALUE) { switch (GetLastError ()) { case ERROR_FILE_NOT_FOUND: dirp->status = -2; break; default: /* Save the error code for the next readdir() call. */ dirp->status = ENOENT; break; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rijndael-alg-fst.c������������������������������������������������������0000664�0000000�0000000�00000127575�14110572173�0020355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-alg-fst.c --- Rijndael cipher implementation. * Copyright (C) 2005-2006, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson. * * Based on public domain "Optimised C code" retrieved from (SHA1 * 7c8e4b00d06685d1dbc6724a9e0d502353de339e): * https://web.archive.org/web/20060618010435/http://www.iaik.tu-graz.ac.at/research/krypto/AES/old/~rijmen/rijndael/rijndael-fst-3.0.zip */ #include <config.h> /** * rijndael-alg-fst.c * * @version 3.0 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> * @author Paulo Barreto <paulo.barreto@terra.com.br> * * This code is hereby placed in the public domain. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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. */ #include "rijndael-alg-fst.h" /* Te0[x] = S [x].[02, 01, 01, 03]; Te1[x] = S [x].[03, 02, 01, 01]; Te2[x] = S [x].[01, 03, 02, 01]; Te3[x] = S [x].[01, 01, 03, 02]; Te4[x] = S [x].[01, 01, 01, 01]; Td0[x] = Si[x].[0e, 09, 0d, 0b]; Td1[x] = Si[x].[0b, 0e, 09, 0d]; Td2[x] = Si[x].[0d, 0b, 0e, 09]; Td3[x] = Si[x].[09, 0d, 0b, 0e]; Td4[x] = Si[x].[01, 01, 01, 01]; */ static const uint32_t Te0[256] = { 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a, }; static const uint32_t Te1[256] = { 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616, }; static const uint32_t Te2[256] = { 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16, }; static const uint32_t Te3[256] = { 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c, }; static const uint32_t Te4[256] = { 0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b, 0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5, 0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b, 0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676, 0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d, 0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0, 0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, 0xafafafaf, 0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0, 0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626, 0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc, 0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1, 0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515, 0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3, 0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a, 0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2, 0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575, 0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a, 0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0, 0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3, 0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484, 0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed, 0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b, 0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939, 0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf, 0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb, 0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585, 0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f, 0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8, 0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f, 0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5, 0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121, 0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2, 0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec, 0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717, 0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d, 0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373, 0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc, 0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888, 0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414, 0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb, 0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a, 0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c, 0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262, 0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979, 0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d, 0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9, 0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea, 0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808, 0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e, 0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6, 0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f, 0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a, 0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666, 0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e, 0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9, 0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e, 0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111, 0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494, 0x9b9b9b9b, 0x1e1e1e1e, 0x87878787, 0xe9e9e9e9, 0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf, 0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d, 0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868, 0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f, 0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616, }; static const uint32_t Td0[256] = { 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742, }; static const uint32_t Td1[256] = { 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857, }; static const uint32_t Td2[256] = { 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8, }; static const uint32_t Td3[256] = { 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0, }; static const uint32_t Td4[256] = { 0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5, 0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838, 0xbfbfbfbf, 0x40404040, 0xa3a3a3a3, 0x9e9e9e9e, 0x81818181, 0xf3f3f3f3, 0xd7d7d7d7, 0xfbfbfbfb, 0x7c7c7c7c, 0xe3e3e3e3, 0x39393939, 0x82828282, 0x9b9b9b9b, 0x2f2f2f2f, 0xffffffff, 0x87878787, 0x34343434, 0x8e8e8e8e, 0x43434343, 0x44444444, 0xc4c4c4c4, 0xdededede, 0xe9e9e9e9, 0xcbcbcbcb, 0x54545454, 0x7b7b7b7b, 0x94949494, 0x32323232, 0xa6a6a6a6, 0xc2c2c2c2, 0x23232323, 0x3d3d3d3d, 0xeeeeeeee, 0x4c4c4c4c, 0x95959595, 0x0b0b0b0b, 0x42424242, 0xfafafafa, 0xc3c3c3c3, 0x4e4e4e4e, 0x08080808, 0x2e2e2e2e, 0xa1a1a1a1, 0x66666666, 0x28282828, 0xd9d9d9d9, 0x24242424, 0xb2b2b2b2, 0x76767676, 0x5b5b5b5b, 0xa2a2a2a2, 0x49494949, 0x6d6d6d6d, 0x8b8b8b8b, 0xd1d1d1d1, 0x25252525, 0x72727272, 0xf8f8f8f8, 0xf6f6f6f6, 0x64646464, 0x86868686, 0x68686868, 0x98989898, 0x16161616, 0xd4d4d4d4, 0xa4a4a4a4, 0x5c5c5c5c, 0xcccccccc, 0x5d5d5d5d, 0x65656565, 0xb6b6b6b6, 0x92929292, 0x6c6c6c6c, 0x70707070, 0x48484848, 0x50505050, 0xfdfdfdfd, 0xedededed, 0xb9b9b9b9, 0xdadadada, 0x5e5e5e5e, 0x15151515, 0x46464646, 0x57575757, 0xa7a7a7a7, 0x8d8d8d8d, 0x9d9d9d9d, 0x84848484, 0x90909090, 0xd8d8d8d8, 0xabababab, 0x00000000, 0x8c8c8c8c, 0xbcbcbcbc, 0xd3d3d3d3, 0x0a0a0a0a, 0xf7f7f7f7, 0xe4e4e4e4, 0x58585858, 0x05050505, 0xb8b8b8b8, 0xb3b3b3b3, 0x45454545, 0x06060606, 0xd0d0d0d0, 0x2c2c2c2c, 0x1e1e1e1e, 0x8f8f8f8f, 0xcacacaca, 0x3f3f3f3f, 0x0f0f0f0f, 0x02020202, 0xc1c1c1c1, 0xafafafaf, 0xbdbdbdbd, 0x03030303, 0x01010101, 0x13131313, 0x8a8a8a8a, 0x6b6b6b6b, 0x3a3a3a3a, 0x91919191, 0x11111111, 0x41414141, 0x4f4f4f4f, 0x67676767, 0xdcdcdcdc, 0xeaeaeaea, 0x97979797, 0xf2f2f2f2, 0xcfcfcfcf, 0xcececece, 0xf0f0f0f0, 0xb4b4b4b4, 0xe6e6e6e6, 0x73737373, 0x96969696, 0xacacacac, 0x74747474, 0x22222222, 0xe7e7e7e7, 0xadadadad, 0x35353535, 0x85858585, 0xe2e2e2e2, 0xf9f9f9f9, 0x37373737, 0xe8e8e8e8, 0x1c1c1c1c, 0x75757575, 0xdfdfdfdf, 0x6e6e6e6e, 0x47474747, 0xf1f1f1f1, 0x1a1a1a1a, 0x71717171, 0x1d1d1d1d, 0x29292929, 0xc5c5c5c5, 0x89898989, 0x6f6f6f6f, 0xb7b7b7b7, 0x62626262, 0x0e0e0e0e, 0xaaaaaaaa, 0x18181818, 0xbebebebe, 0x1b1b1b1b, 0xfcfcfcfc, 0x56565656, 0x3e3e3e3e, 0x4b4b4b4b, 0xc6c6c6c6, 0xd2d2d2d2, 0x79797979, 0x20202020, 0x9a9a9a9a, 0xdbdbdbdb, 0xc0c0c0c0, 0xfefefefe, 0x78787878, 0xcdcdcdcd, 0x5a5a5a5a, 0xf4f4f4f4, 0x1f1f1f1f, 0xdddddddd, 0xa8a8a8a8, 0x33333333, 0x88888888, 0x07070707, 0xc7c7c7c7, 0x31313131, 0xb1b1b1b1, 0x12121212, 0x10101010, 0x59595959, 0x27272727, 0x80808080, 0xecececec, 0x5f5f5f5f, 0x60606060, 0x51515151, 0x7f7f7f7f, 0xa9a9a9a9, 0x19191919, 0xb5b5b5b5, 0x4a4a4a4a, 0x0d0d0d0d, 0x2d2d2d2d, 0xe5e5e5e5, 0x7a7a7a7a, 0x9f9f9f9f, 0x93939393, 0xc9c9c9c9, 0x9c9c9c9c, 0xefefefef, 0xa0a0a0a0, 0xe0e0e0e0, 0x3b3b3b3b, 0x4d4d4d4d, 0xaeaeaeae, 0x2a2a2a2a, 0xf5f5f5f5, 0xb0b0b0b0, 0xc8c8c8c8, 0xebebebeb, 0xbbbbbbbb, 0x3c3c3c3c, 0x83838383, 0x53535353, 0x99999999, 0x61616161, 0x17171717, 0x2b2b2b2b, 0x04040404, 0x7e7e7e7e, 0xbabababa, 0x77777777, 0xd6d6d6d6, 0x26262626, 0xe1e1e1e1, 0x69696969, 0x14141414, 0x63636363, 0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d, }; static const uint32_t rcon[] = { 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ }; #define GETU32(pt) (((uint32_t)((pt)[0] & 0xFF) << 24) ^ \ ((uint32_t)((pt)[1] & 0xFF) << 16) ^ \ ((uint32_t)((pt)[2] & 0xFF) << 8) ^ \ ((uint32_t)((pt)[3] & 0xFF))) #define PUTU32(ct, st) { \ (ct)[0] = (char)((st) >> 24); \ (ct)[1] = (char)((st) >> 16); \ (ct)[2] = (char)((st) >> 8); \ (ct)[3] = (char)(st); } /** * Expand the cipher key into the encryption key schedule. * * @return the number of rounds for the given cipher key size. */ int rijndaelKeySetupEnc (uint32_t rk[ /*4*(Nr + 1) */ ], const char cipherKey[], size_t keyBits) { size_t i = 0; uint32_t temp; rk[0] = GETU32 (cipherKey); rk[1] = GETU32 (cipherKey + 4); rk[2] = GETU32 (cipherKey + 8); rk[3] = GETU32 (cipherKey + 12); if (keyBits == 128) { for (;;) { temp = rk[3]; rk[4] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[5] = rk[1] ^ rk[4]; rk[6] = rk[2] ^ rk[5]; rk[7] = rk[3] ^ rk[6]; if (++i == 10) { return 10; } rk += 4; } } rk[4] = GETU32 (cipherKey + 16); rk[5] = GETU32 (cipherKey + 20); if (keyBits == 192) { for (;;) { temp = rk[5]; rk[6] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[7] = rk[1] ^ rk[6]; rk[8] = rk[2] ^ rk[7]; rk[9] = rk[3] ^ rk[8]; if (++i == 8) { return 12; } rk[10] = rk[4] ^ rk[9]; rk[11] = rk[5] ^ rk[10]; rk += 6; } } rk[6] = GETU32 (cipherKey + 24); rk[7] = GETU32 (cipherKey + 28); if (keyBits == 256) { for (;;) { temp = rk[7]; rk[8] = rk[0] ^ (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ (Te4[(temp) & 0xff] & 0x0000ff00) ^ (Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i]; rk[9] = rk[1] ^ rk[8]; rk[10] = rk[2] ^ rk[9]; rk[11] = rk[3] ^ rk[10]; if (++i == 7) { return 14; } temp = rk[11]; rk[12] = rk[4] ^ (Te4[(temp >> 24)] & 0xff000000) ^ (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(temp) & 0xff] & 0x000000ff); rk[13] = rk[5] ^ rk[12]; rk[14] = rk[6] ^ rk[13]; rk[15] = rk[7] ^ rk[14]; rk += 8; } } return 0; } /** * Expand the cipher key into the decryption key schedule. * * @return the number of rounds for the given cipher key size. */ int rijndaelKeySetupDec (uint32_t rk[ /*4*(Nr + 1) */ ], const char cipherKey[], size_t keyBits) { size_t Nr, i, j; uint32_t temp; /* expand the cipher key: */ Nr = rijndaelKeySetupEnc (rk, cipherKey, keyBits); /* invert the order of the round keys: */ for (i = 0, j = 4 * Nr; i < j; i += 4, j -= 4) { temp = rk[i]; rk[i] = rk[j]; rk[j] = temp; temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; } /* apply the inverse MixColumn transform to all round keys but the first and the last: */ for (i = 1; i < Nr; i++) { rk += 4; rk[0] = Td0[Te4[(rk[0] >> 24)] & 0xff] ^ Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[0]) & 0xff] & 0xff]; rk[1] = Td0[Te4[(rk[1] >> 24)] & 0xff] ^ Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[1]) & 0xff] & 0xff]; rk[2] = Td0[Te4[(rk[2] >> 24)] & 0xff] ^ Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[2]) & 0xff] & 0xff]; rk[3] = Td0[Te4[(rk[3] >> 24)] & 0xff] ^ Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^ Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^ Td3[Te4[(rk[3]) & 0xff] & 0xff]; } return Nr; } void rijndaelEncrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, const char pt[16], char ct[16]) { uint32_t s0, s1, s2, s3, t0, t1, t2, t3; size_t r; /* * map byte array block to cipher state * and add initial round key: */ s0 = GETU32 (pt) ^ rk[0]; s1 = GETU32 (pt + 4) ^ rk[1]; s2 = GETU32 (pt + 8) ^ rk[2]; s3 = GETU32 (pt + 12) ^ rk[3]; /* * Nr - 1 full rounds: */ r = Nr >> 1; for (;;) { t0 = Te0[(s0 >> 24)] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[(s3) & 0xff] ^ rk[4]; t1 = Te0[(s1 >> 24)] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[(s0) & 0xff] ^ rk[5]; t2 = Te0[(s2 >> 24)] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[(s1) & 0xff] ^ rk[6]; t3 = Te0[(s3 >> 24)] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[(s2) & 0xff] ^ rk[7]; rk += 8; if (--r == 0) { break; } s0 = Te0[(t0 >> 24)] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[(t3) & 0xff] ^ rk[0]; s1 = Te0[(t1 >> 24)] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[(t0) & 0xff] ^ rk[1]; s2 = Te0[(t2 >> 24)] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[(t1) & 0xff] ^ rk[2]; s3 = Te0[(t3 >> 24)] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[(t2) & 0xff] ^ rk[3]; } /* * apply last round and * map cipher state to byte array block: */ s0 = (Te4[(t0 >> 24)] & 0xff000000) ^ (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t3) & 0xff] & 0x000000ff) ^ rk[0]; PUTU32 (ct, s0); s1 = (Te4[(t1 >> 24)] & 0xff000000) ^ (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t0) & 0xff] & 0x000000ff) ^ rk[1]; PUTU32 (ct + 4, s1); s2 = (Te4[(t2 >> 24)] & 0xff000000) ^ (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t1) & 0xff] & 0x000000ff) ^ rk[2]; PUTU32 (ct + 8, s2); s3 = (Te4[(t3 >> 24)] & 0xff000000) ^ (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t2) & 0xff] & 0x000000ff) ^ rk[3]; PUTU32 (ct + 12, s3); } void rijndaelDecrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, const char ct[16], char pt[16]) { uint32_t s0, s1, s2, s3, t0, t1, t2, t3; size_t r; /* * map byte array block to cipher state * and add initial round key: */ s0 = GETU32 (ct) ^ rk[0]; s1 = GETU32 (ct + 4) ^ rk[1]; s2 = GETU32 (ct + 8) ^ rk[2]; s3 = GETU32 (ct + 12) ^ rk[3]; /* * Nr - 1 full rounds: */ r = Nr >> 1; for (;;) { t0 = Td0[(s0 >> 24)] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[(s1) & 0xff] ^ rk[4]; t1 = Td0[(s1 >> 24)] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[(s2) & 0xff] ^ rk[5]; t2 = Td0[(s2 >> 24)] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[(s3) & 0xff] ^ rk[6]; t3 = Td0[(s3 >> 24)] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[(s0) & 0xff] ^ rk[7]; rk += 8; if (--r == 0) { break; } s0 = Td0[(t0 >> 24)] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[(t1) & 0xff] ^ rk[0]; s1 = Td0[(t1 >> 24)] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[(t2) & 0xff] ^ rk[1]; s2 = Td0[(t2 >> 24)] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[(t3) & 0xff] ^ rk[2]; s3 = Td0[(t3 >> 24)] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[(t0) & 0xff] ^ rk[3]; } /* * apply last round and * map cipher state to byte array block: */ s0 = (Td4[(t0 >> 24)] & 0xff000000) ^ (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t1) & 0xff] & 0x000000ff) ^ rk[0]; PUTU32 (pt, s0); s1 = (Td4[(t1 >> 24)] & 0xff000000) ^ (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t2) & 0xff] & 0x000000ff) ^ rk[1]; PUTU32 (pt + 4, s1); s2 = (Td4[(t2 >> 24)] & 0xff000000) ^ (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t3) & 0xff] & 0x000000ff) ^ rk[2]; PUTU32 (pt + 8, s2); s3 = (Td4[(t3 >> 24)] & 0xff000000) ^ (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t0) & 0xff] & 0x000000ff) ^ rk[3]; PUTU32 (pt + 12, s3); } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rijndael-alg-fst.h������������������������������������������������������0000664�0000000�0000000�00000005210�14110572173�0020337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-alg-fst.h --- Rijndael cipher implementation. * Copyright (C) 2005, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson. */ /** * rijndael-alg-fst.h * * @version 3.0 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> * @author Paulo Barreto <paulo.barreto@terra.com.br> * * This code is hereby placed in the public domain. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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 __RIJNDAEL_ALG_FST_H #define __RIJNDAEL_ALG_FST_H #include <stdint.h> #include <stddef.h> #define RIJNDAEL_MAXKC (256/32) #define RIJNDAEL_MAXKB (256/8) #define RIJNDAEL_MAXNR 14 int rijndaelKeySetupEnc (uint32_t rk[ /*4*(Nr + 1) */ ], const char cipherKey[], size_t keyBits); int rijndaelKeySetupDec (uint32_t rk[ /*4*(Nr + 1) */ ], const char cipherKey[], size_t keyBits); void rijndaelEncrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, const char pt[16], char ct[16]); void rijndaelDecrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr, const char ct[16], char pt[16]); #endif /* __RIJNDAEL_ALG_FST_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rijndael-api-fst.c������������������������������������������������������0000664�0000000�0000000�00000034676�14110572173�0020362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-api-fst.c --- Rijndael cipher implementation. * Copyright (C) 2005-2006, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson. * * Based on public domain "Optimised C code" retrieved from (SHA1 * 7c8e4b00d06685d1dbc6724a9e0d502353de339e): * https://web.archive.org/web/20060618010435/http://www.iaik.tu-graz.ac.at/research/krypto/AES/old/~rijmen/rijndael/rijndael-fst-3.0.zip */ #include <config.h> /** * rijndael-api-fst.c * * @version 2.9 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> * @author Paulo Barreto <paulo.barreto@terra.com.br> * * This code is hereby placed in the public domain. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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. * * Acknowledgements: * * We are deeply indebted to the following people for their bug reports, * fixes, and improvement suggestions to this implementation. Though we * tried to list all contributions, we apologise in advance for any * missing reference. * * Andrew Bales <Andrew.Bales@Honeywell.com> * Markus Friedl <markus.friedl@informatik.uni-erlangen.de> * John Skodon <skodonj@webquill.com> */ #include "rijndael-alg-fst.h" #include "rijndael-api-fst.h" #include <assert.h> #include <stdlib.h> #include <string.h> rijndael_rc rijndaelMakeKey (rijndaelKeyInstance *key, rijndael_direction direction, size_t keyLen, const char *keyMaterial) { size_t i; char *keyMat; char cipherKey[RIJNDAEL_MAXKB]; if (key == NULL) { return RIJNDAEL_BAD_KEY_INSTANCE; } if ((direction == RIJNDAEL_DIR_ENCRYPT) || (direction == RIJNDAEL_DIR_DECRYPT)) { key->direction = direction; } else { return RIJNDAEL_BAD_KEY_DIR; } if ((keyLen == 128) || (keyLen == 192) || (keyLen == 256)) { key->keyLen = keyLen; } else { return RIJNDAEL_BAD_KEY_MAT; } if (keyMaterial != NULL) { strncpy (key->keyMaterial, keyMaterial, keyLen / 4); } /* initialize key schedule: */ keyMat = key->keyMaterial; for (i = 0; i < key->keyLen / 8; i++) { char t, v; t = *keyMat++; if ((t >= '0') && (t <= '9')) v = (t - '0') << 4; else if ((t >= 'a') && (t <= 'f')) v = (t - 'a' + 10) << 4; else if ((t >= 'A') && (t <= 'F')) v = (t - 'A' + 10) << 4; else return RIJNDAEL_BAD_KEY_MAT; t = *keyMat++; if ((t >= '0') && (t <= '9')) v ^= (t - '0'); else if ((t >= 'a') && (t <= 'f')) v ^= (t - 'a' + 10); else if ((t >= 'A') && (t <= 'F')) v ^= (t - 'A' + 10); else return RIJNDAEL_BAD_KEY_MAT; cipherKey[i] = v; } if (direction == RIJNDAEL_DIR_ENCRYPT) { key->Nr = rijndaelKeySetupEnc (key->rk, cipherKey, keyLen); } else { key->Nr = rijndaelKeySetupDec (key->rk, cipherKey, keyLen); } rijndaelKeySetupEnc (key->ek, cipherKey, keyLen); return 0; } rijndael_rc rijndaelCipherInit (rijndaelCipherInstance *cipher, rijndael_mode mode, const char *IV) { if ((mode == RIJNDAEL_MODE_ECB) || (mode == RIJNDAEL_MODE_CBC) || (mode == RIJNDAEL_MODE_CFB1)) { cipher->mode = mode; } else { return RIJNDAEL_BAD_CIPHER_MODE; } if (IV != NULL) { int i; for (i = 0; i < RIJNDAEL_MAX_IV_SIZE; i++) { int t, j; t = IV[2 * i]; if ((t >= '0') && (t <= '9')) j = (t - '0') << 4; else if ((t >= 'a') && (t <= 'f')) j = (t - 'a' + 10) << 4; else if ((t >= 'A') && (t <= 'F')) j = (t - 'A' + 10) << 4; else return RIJNDAEL_BAD_CIPHER_INSTANCE; t = IV[2 * i + 1]; if ((t >= '0') && (t <= '9')) j ^= (t - '0'); else if ((t >= 'a') && (t <= 'f')) j ^= (t - 'a' + 10); else if ((t >= 'A') && (t <= 'F')) j ^= (t - 'A' + 10); else return RIJNDAEL_BAD_CIPHER_INSTANCE; cipher->IV[i] = (uint8_t) j; } } else { memset (cipher->IV, 0, RIJNDAEL_MAX_IV_SIZE); } return 0; } int rijndaelBlockEncrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputLen, char *outBuffer) { size_t i, k, t, numBlocks; union { char bytes[16]; uint32_t words[4]; } block; char *iv; if (cipher == NULL || key == NULL || key->direction == RIJNDAEL_DIR_DECRYPT) { return RIJNDAEL_BAD_CIPHER_STATE; } if (input == NULL || inputLen <= 0) { return 0; /* nothing to do */ } numBlocks = inputLen / 128; switch (cipher->mode) { case RIJNDAEL_MODE_ECB: for (i = numBlocks; i > 0; i--) { rijndaelEncrypt (key->rk, key->Nr, input, outBuffer); input += 16; outBuffer += 16; } break; case RIJNDAEL_MODE_CBC: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { block.words[0] = ((uint32_t *) input)[0] ^ ((uint32_t *) iv)[0]; block.words[1] = ((uint32_t *) input)[1] ^ ((uint32_t *) iv)[1]; block.words[2] = ((uint32_t *) input)[2] ^ ((uint32_t *) iv)[2]; block.words[3] = ((uint32_t *) input)[3] ^ ((uint32_t *) iv)[3]; rijndaelEncrypt (key->rk, key->Nr, block.bytes, outBuffer); memcpy (cipher->IV, outBuffer, 16); input += 16; outBuffer += 16; } break; case RIJNDAEL_MODE_CFB1: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { memcpy (outBuffer, input, 16); for (k = 0; k < 128; k++) { rijndaelEncrypt (key->ek, key->Nr, iv, block.bytes); outBuffer[k >> 3] ^= (block.bytes[0] & 0x80U) >> (k & 7); for (t = 0; t < 15; t++) { iv[t] = (iv[t] << 1) | (iv[t + 1] >> 7); } iv[15] = (iv[15] << 1) | ((outBuffer[k >> 3] >> (7 - (k & 7))) & 1); } outBuffer += 16; input += 16; } break; default: return RIJNDAEL_BAD_CIPHER_STATE; } return 128 * numBlocks; } int rijndaelPadEncrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputOctets, char *outBuffer) { size_t i, numBlocks, padLen; union { char bytes[16]; uint32_t words[4]; } block; char *iv; if (cipher == NULL || key == NULL || key->direction == RIJNDAEL_DIR_DECRYPT) { return RIJNDAEL_BAD_CIPHER_STATE; } if (input == NULL || inputOctets <= 0) { return 0; /* nothing to do */ } numBlocks = inputOctets / 16; switch (cipher->mode) { case RIJNDAEL_MODE_ECB: for (i = numBlocks; i > 0; i--) { rijndaelEncrypt (key->rk, key->Nr, input, outBuffer); input += 16; outBuffer += 16; } padLen = 16 - (inputOctets - 16 * numBlocks); assert (padLen > 0 && padLen <= 16); memcpy (block.bytes, input, 16 - padLen); memset (block.bytes + 16 - padLen, padLen, padLen); rijndaelEncrypt (key->rk, key->Nr, block.bytes, outBuffer); break; case RIJNDAEL_MODE_CBC: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { block.words[0] = ((uint32_t *) input)[0] ^ ((uint32_t *) iv)[0]; block.words[1] = ((uint32_t *) input)[1] ^ ((uint32_t *) iv)[1]; block.words[2] = ((uint32_t *) input)[2] ^ ((uint32_t *) iv)[2]; block.words[3] = ((uint32_t *) input)[3] ^ ((uint32_t *) iv)[3]; rijndaelEncrypt (key->rk, key->Nr, block.bytes, outBuffer); memcpy (cipher->IV, outBuffer, 16); input += 16; outBuffer += 16; } padLen = 16 - (inputOctets - 16 * numBlocks); assert (padLen > 0 && padLen <= 16); for (i = 0; i < 16 - padLen; i++) { block.bytes[i] = input[i] ^ iv[i]; } for (i = 16 - padLen; i < 16; i++) { block.bytes[i] = (char) padLen ^ iv[i]; } rijndaelEncrypt (key->rk, key->Nr, block.bytes, outBuffer); memcpy (cipher->IV, outBuffer, 16); break; default: return RIJNDAEL_BAD_CIPHER_STATE; } return 16 * (numBlocks + 1); } int rijndaelBlockDecrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputLen, char *outBuffer) { size_t i, k, t, numBlocks; union { char bytes[16]; uint32_t words[4]; } block; char *iv; if (cipher == NULL || key == NULL || (cipher->mode != RIJNDAEL_MODE_CFB1 && key->direction == RIJNDAEL_DIR_ENCRYPT)) { return RIJNDAEL_BAD_CIPHER_STATE; } if (input == NULL || inputLen <= 0) { return 0; /* nothing to do */ } numBlocks = inputLen / 128; switch (cipher->mode) { case RIJNDAEL_MODE_ECB: for (i = numBlocks; i > 0; i--) { rijndaelDecrypt (key->rk, key->Nr, input, outBuffer); input += 16; outBuffer += 16; } break; case RIJNDAEL_MODE_CBC: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { rijndaelDecrypt (key->rk, key->Nr, input, block.bytes); block.words[0] ^= ((uint32_t *) iv)[0]; block.words[1] ^= ((uint32_t *) iv)[1]; block.words[2] ^= ((uint32_t *) iv)[2]; block.words[3] ^= ((uint32_t *) iv)[3]; memcpy (cipher->IV, input, 16); memcpy (outBuffer, block.bytes, 16); input += 16; outBuffer += 16; } break; case RIJNDAEL_MODE_CFB1: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { memcpy (outBuffer, input, 16); for (k = 0; k < 128; k++) { rijndaelEncrypt (key->ek, key->Nr, iv, block.bytes); for (t = 0; t < 15; t++) { iv[t] = (iv[t] << 1) | (iv[t + 1] >> 7); } iv[15] = (iv[15] << 1) | ((input[k >> 3] >> (7 - (k & 7))) & 1); outBuffer[k >> 3] ^= (block.bytes[0] & 0x80U) >> (k & 7); } outBuffer += 16; input += 16; } break; default: return RIJNDAEL_BAD_CIPHER_STATE; } return 128 * numBlocks; } int rijndaelPadDecrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputOctets, char *outBuffer) { size_t i, numBlocks, padLen; union { char bytes[16]; uint32_t words[4]; } block; char *iv; if (cipher == NULL || key == NULL || key->direction == RIJNDAEL_DIR_ENCRYPT) { return RIJNDAEL_BAD_CIPHER_STATE; } if (input == NULL || inputOctets <= 0) { return 0; /* nothing to do */ } if (inputOctets % 16 != 0) { return RIJNDAEL_BAD_DATA; } numBlocks = inputOctets / 16; switch (cipher->mode) { case RIJNDAEL_MODE_ECB: /* all blocks but last */ for (i = numBlocks - 1; i > 0; i--) { rijndaelDecrypt (key->rk, key->Nr, input, outBuffer); input += 16; outBuffer += 16; } /* last block */ rijndaelDecrypt (key->rk, key->Nr, input, block.bytes); padLen = block.bytes[15]; if (padLen >= 16) { return RIJNDAEL_BAD_DATA; } for (i = 16 - padLen; i < 16; i++) { if (block.bytes[i] != padLen) { return RIJNDAEL_BAD_DATA; } } memcpy (outBuffer, block.bytes, 16 - padLen); break; case RIJNDAEL_MODE_CBC: iv = cipher->IV; /* all blocks but last */ for (i = numBlocks - 1; i > 0; i--) { rijndaelDecrypt (key->rk, key->Nr, input, block.bytes); block.words[0] ^= ((uint32_t *) iv)[0]; block.words[1] ^= ((uint32_t *) iv)[1]; block.words[2] ^= ((uint32_t *) iv)[2]; block.words[3] ^= ((uint32_t *) iv)[3]; memcpy (iv, input, 16); memcpy (outBuffer, block.bytes, 16); input += 16; outBuffer += 16; } /* last block */ rijndaelDecrypt (key->rk, key->Nr, input, block.bytes); block.words[0] ^= ((uint32_t *) iv)[0]; block.words[1] ^= ((uint32_t *) iv)[1]; block.words[2] ^= ((uint32_t *) iv)[2]; block.words[3] ^= ((uint32_t *) iv)[3]; padLen = block.bytes[15]; if (padLen <= 0 || padLen > 16) { return RIJNDAEL_BAD_DATA; } for (i = 16 - padLen; i < 16; i++) { if (block.bytes[i] != padLen) { return RIJNDAEL_BAD_DATA; } } memcpy (outBuffer, block.bytes, 16 - padLen); break; default: return RIJNDAEL_BAD_CIPHER_STATE; } return 16 * numBlocks - padLen; } ������������������������������������������������������������������gnulib-20210822~d383792/lib/rijndael-api-fst.h������������������������������������������������������0000664�0000000�0000000�00000020201�14110572173�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-api-fst.h --- Rijndael cipher implementation. * Copyright (C) 2005, 2009-2021 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/>. * */ /* Adapted for gnulib by Simon Josefsson. */ /** * rijndael-api-fst.h * * @version 2.9 (December 2000) * * Optimised ANSI C code for the Rijndael cipher (now AES) * * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> * @author Paulo Barreto <paulo.barreto@terra.com.br> * * This code is hereby placed in the public domain. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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. * * Acknowledgements: * * We are deeply indebted to the following people for their bug reports, * fixes, and improvement suggestions to this implementation. Though we * tried to list all contributions, we apologise in advance for any * missing reference. * * Andrew Bales <Andrew.Bales@Honeywell.com> * Markus Friedl <markus.friedl@informatik.uni-erlangen.de> * John Skodon <skodonj@webquill.com> */ #ifndef __RIJNDAEL_API_FST_H #define __RIJNDAEL_API_FST_H #include "rijndael-alg-fst.h" #include <stdio.h> /* Default number of bits in a cipher block */ #define RIJNDAEL_BITSPERBLOCK 128 /* Number of ASCII char's needed to represent a key */ #define RIJNDAEL_MAX_KEY_SIZE 64 /* Number bytes needed to represent an IV */ #define RIJNDAEL_MAX_IV_SIZE 16 typedef enum { /* Key direction is invalid, e.g., unknown value */ RIJNDAEL_BAD_KEY_DIR = -1, /* Key material not of correct length */ RIJNDAEL_BAD_KEY_MAT = -2, /* Key passed is not valid */ RIJNDAEL_BAD_KEY_INSTANCE = -3, /* Params struct passed to cipherInit invalid */ RIJNDAEL_BAD_CIPHER_MODE = -4, /* Cipher in wrong state (e.g., not initialized) */ RIJNDAEL_BAD_CIPHER_STATE = -5, RIJNDAEL_BAD_BLOCK_LENGTH = -6, RIJNDAEL_BAD_CIPHER_INSTANCE = -7, /* Data contents are invalid, e.g., invalid padding */ RIJNDAEL_BAD_DATA = -8, /* Unknown error */ RIJNDAEL_BAD_OTHER = -9 } rijndael_rc; typedef enum { RIJNDAEL_DIR_ENCRYPT = 0, /* Are we encrypting? */ RIJNDAEL_DIR_DECRYPT = 1 /* Are we decrypting? */ } rijndael_direction; typedef enum { RIJNDAEL_MODE_ECB = 1, /* Are we ciphering in ECB mode? */ RIJNDAEL_MODE_CBC = 2, /* Are we ciphering in CBC mode? */ RIJNDAEL_MODE_CFB1 = 3 /* Are we ciphering in 1-bit CFB mode? */ } rijndael_mode; /* The structure for key information */ typedef struct { /* Key used for encrypting or decrypting? */ rijndael_direction direction; /* Length of the key */ size_t keyLen; /* Raw key data in ASCII, e.g., user input or KAT values */ char keyMaterial[RIJNDAEL_MAX_KEY_SIZE + 1]; /* key-length-dependent number of rounds */ int Nr; /* key schedule */ uint32_t rk[4 * (RIJNDAEL_MAXNR + 1)]; /* CFB1 key schedule (encryption only) */ uint32_t ek[4 * (RIJNDAEL_MAXNR + 1)]; } rijndaelKeyInstance; /* The structure for cipher information */ typedef struct { /* changed order of the components */ rijndael_mode mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */ /* A possible Initialization Vector for ciphering */ char IV[RIJNDAEL_MAX_IV_SIZE]; } rijndaelCipherInstance; /* Function prototypes */ /* Create KEY, for encryption or decryption depending on DIRECTION, from KEYMATERIAL, a hex string, of KEYLEN size. KEYLEN should be 128, 192 or 256. Returns 0 on success, or an error code. */ extern rijndael_rc rijndaelMakeKey (rijndaelKeyInstance *key, rijndael_direction direction, size_t keyLen, const char *keyMaterial); /* Initialize cipher state CIPHER for encryption MODE (e.g., RIJNDAEL_MODE_CBC) with initialization vector IV, a hex string of 2*RIJNDAEL_MAX_IV_SIZE length. IV may be NULL for modes that do not need an IV (i.e., RIJNDAEL_MODE_ECB). */ extern rijndael_rc rijndaelCipherInit (rijndaelCipherInstance *cipher, rijndael_mode mode, const char *IV); /* Encrypt data in INPUT, of INPUTLEN/8 bytes length, placing the output in the pre-allocated OUTBUFFER which must hold at least INPUTLEN/8 bytes of data. The CIPHER is used as state, and must be initialized with rijndaelCipherInit before calling this function. The encryption KEY must be initialized with rijndaelMakeKey before calling this function. Return the number of bits written, or a negative rijndael_rc error code. */ extern int rijndaelBlockEncrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputLen, char *restrict outBuffer); /* Encrypt data in INPUT, of INPUTOCTETS bytes length, placing the output in the pre-allocated OUTBUFFER which must hold at least INPUTOCTETS aligned to the next block size boundary. Ciphertext-Stealing as described in RFC 2040 is used to encrypt partial blocks. The CIPHER is used as state, and must be initialized with rijndaelCipherInit before calling this function. The encryption KEY must be initialized with rijndaelMakeKey before calling this function. Return the number of bits written, or a negative rijndael_rc error code. */ extern int rijndaelPadEncrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputOctets, char *restrict outBuffer); /* Decrypt data in INPUT, of INPUTLEN/8 bytes length, placing the output in the pre-allocated OUTBUFFER which must hold at least INPUTLEN/8 bytes of data. The CIPHER is used as state, and must be initialized with rijndaelCipherInit before calling this function. The encryption KEY must be initialized with rijndaelMakeKey before calling this function. Return the number of bits written, or a negative rijndael_rc error code. */ extern int rijndaelBlockDecrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputLen, char *restrict outBuffer); /* Decrypt data in INPUT, of INPUTOCTETS bytes length, placing the output in the pre-allocated OUTBUFFER which must hold at least INPUTOCTETS aligned to the next block size boundary. Ciphertext-Stealing as described in RFC 2040 is used to encrypt partial blocks. The CIPHER is used as state, and must be initialized with rijndaelCipherInit before calling this function. The encryption KEY must be initialized with rijndaelMakeKey before calling this function. Return the number of bits written, or a negative rijndael_rc error code. */ extern int rijndaelPadDecrypt (rijndaelCipherInstance *cipher, const rijndaelKeyInstance *key, const char *input, size_t inputOctets, char *restrict outBuffer); #endif /* __RIJNDAEL_API_FST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rint.c������������������������������������������������������������������0000664�0000000�0000000�00000007126�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. Copyright (C) 2007, 2010-2021 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/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #include <stdlib.h> #undef MIN #ifdef USE_LONG_DOUBLE # define RINT rintl # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define MIN LDBL_MIN # define L_(literal) literal##L #elif ! defined USE_FLOAT # define RINT rint # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define MIN DBL_MIN # define L_(literal) literal #else /* defined USE_FLOAT */ # define RINT rintf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define MIN FLT_MIN # define L_(literal) literal##f #endif /* -0.0. See minus-zero.h. */ #if defined __hpux || defined __sgi || defined __ICC # define MINUS_ZERO (-MIN * MIN) #else # define MINUS_ZERO L_(-0.0) #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif DOUBLE RINT (DOUBLE x) { /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE z = x; /* Consider the current rounding mode, cf. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html>. This implementation supports only rounds-to-nearest. */ if (FLT_ROUNDS != 1) abort (); if (z > L_(0.0)) { /* Avoid rounding error for x = 0.5 - 2^(-MANT_DIG-1). */ if (z < L_(0.5)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer. */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; } } else if (z < L_(0.0)) { /* Avoid rounding error for x = -(0.5 - 2^(-MANT_DIG-1)). */ if (z > - L_(0.5)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > -TWO_MANT_DIG) { /* Round to the next integer. */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; } } return z; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rintf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001447�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. Copyright (C) 2011-2021 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/>. */ #define USE_FLOAT #include "rint.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/rintl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001734�14110572173�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. Copyright (C) 2011-2021 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/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double rintl (long double x) { return rint (x); } #else # define USE_LONG_DOUBLE # include "rint.c" #endif ������������������������������������gnulib-20210822~d383792/lib/rmdir.c�����������������������������������������������������������������0000664�0000000�0000000�00000003166�14110572173�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rmdir bugs. Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2021 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/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <string.h> #include "filename.h" #undef rmdir #if defined _WIN32 && !defined __CYGWIN__ # define rmdir _rmdir #endif /* Remove directory DIR. Return 0 if successful, -1 if not. */ int rpl_rmdir (char const *dir) { /* Work around cygwin 1.5.x bug where rmdir("dir/./") succeeds. */ size_t len = strlen (dir); int result; while (len && ISSLASH (dir[len - 1])) len--; if (len && dir[len - 1] == '.' && (1 == len || ISSLASH (dir[len - 2]))) { errno = EINVAL; return -1; } result = rmdir (dir); /* Work around mingw bug, where rmdir("file/") fails with EINVAL instead of ENOTDIR. We've already filtered out trailing ., the only reason allowed by POSIX for EINVAL. */ if (result == -1 && errno == EINVAL) errno = ENOTDIR; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/root-uid.h��������������������������������������������������������������0000664�0000000�0000000�00000002003�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The user ID that always has appropriate privileges in the POSIX sense. Copyright 2012-2021 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. */ #ifndef ROOT_UID_H_ #define ROOT_UID_H_ /* The user ID that always has appropriate privileges in the POSIX sense. */ #ifdef __TANDEM # define ROOT_UID 65535 #else # define ROOT_UID 0 #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/round.c�����������������������������������������������������������������0000664�0000000�0000000�00000012307�14110572173�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. Copyright (C) 2007, 2010-2021 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 Ben Pfaff <blp@gnu.org>, 2007. Based heavily on code by Bruno Haible. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #undef MIN #ifdef USE_LONG_DOUBLE # define ROUND roundl # define FLOOR floorl # define CEIL ceill # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define MIN LDBL_MIN # define L_(literal) literal##L # define HAVE_FLOOR_AND_CEIL HAVE_FLOORL_AND_CEILL #elif ! defined USE_FLOAT # define ROUND round # define FLOOR floor # define CEIL ceil # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define MIN DBL_MIN # define L_(literal) literal # define HAVE_FLOOR_AND_CEIL 1 #else /* defined USE_FLOAT */ # define ROUND roundf # define FLOOR floorf # define CEIL ceilf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define MIN FLT_MIN # define L_(literal) literal##f # define HAVE_FLOOR_AND_CEIL HAVE_FLOORF_AND_CEILF #endif /* -0.0. See minus-zero.h. */ #if defined __hpux || defined __sgi || defined __ICC # define MINUS_ZERO (-MIN * MIN) #else # define MINUS_ZERO L_(-0.0) #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* If we're being included from test-round2[f].c, it already defined names for our round implementations. Otherwise, pick the preferred implementation for this machine. */ #if !defined FLOOR_BASED_ROUND && !defined FLOOR_FREE_ROUND # if HAVE_FLOOR_AND_CEIL # define FLOOR_BASED_ROUND ROUND # else # define FLOOR_FREE_ROUND ROUND # endif #endif #ifdef FLOOR_BASED_ROUND /* An implementation of the C99 round function based on floor and ceil. We use this when floor and ceil are available, on the assumption that they are faster than the open-coded versions below. */ DOUBLE FLOOR_BASED_ROUND (DOUBLE x) { if (x >= L_(0.0)) { DOUBLE y = FLOOR (x); if (x - y >= L_(0.5)) y += L_(1.0); return y; } else { DOUBLE y = CEIL (x); if (y - x >= L_(0.5)) y -= L_(1.0); return y; } } #endif /* FLOOR_BASED_ROUND */ #ifdef FLOOR_FREE_ROUND /* An implementation of the C99 round function without floor or ceil. We use this when floor or ceil is missing. */ DOUBLE FLOOR_FREE_ROUND (DOUBLE x) { /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* Avoid rounding error for x = 0.5 - 2^(-MANT_DIG-1). */ if (z < L_(0.5)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Add 0.5 to the absolute value. */ y = z += L_(0.5); /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* Avoid rounding error for x = -(0.5 - 2^(-MANT_DIG-1)). */ if (z > - L_(0.5)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > -TWO_MANT_DIG) { /* Add 0.5 to the absolute value. */ y = z -= L_(0.5); /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } #endif /* FLOOR_FREE_ROUND */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/roundf.c����������������������������������������������������������������0000664�0000000�0000000�00000001464�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. Copyright (C) 2007, 2009-2021 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/>. */ #define USE_FLOAT #include "round.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/roundl.c����������������������������������������������������������������0000664�0000000�0000000�00000001753�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double roundl (long double x) { return round (x); } #else # define USE_LONG_DOUBLE # include "round.c" #endif ���������������������gnulib-20210822~d383792/lib/rpmatch.c���������������������������������������������������������������0000664�0000000�0000000�00000013755�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether string value is affirmation or negative response according to current locale's data. Copyright (C) 1996, 1998, 2000, 2002-2003, 2006-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <stdlib.h> #include <stdbool.h> #include <stddef.h> #if ENABLE_NLS # include <sys/types.h> # include <limits.h> # include <string.h> # if HAVE_LANGINFO_YESEXPR # include <langinfo.h> # endif # include <regex.h> # include "gettext.h" # define _(msgid) gettext (msgid) # define N_(msgid) gettext_noop (msgid) # if HAVE_LANGINFO_YESEXPR /* Return the localized regular expression pattern corresponding to ENGLISH_PATTERN. NL_INDEX can be used with nl_langinfo. The resulting string may only be used until the next nl_langinfo call. */ static const char * localized_pattern (const char *english_pattern, nl_item nl_index, bool posixly_correct) { const char *translated_pattern; /* We prefer to get the patterns from a PO file. It would be possible to always use nl_langinfo (YESEXPR) instead of _("^[yY]"), and nl_langinfo (NOEXPR) instead of _("^[nN]"), if we could assume that the system's locale support is good. But this is not the case e.g. on Cygwin. The localizations of gnulib.pot are of better quality in general. Also, if we use locale info from non-free systems that don't have a 'localedef' command, we deprive the users of the freedom to localize this pattern for their preferred language. But some programs, such as 'cp', 'mv', 'rm', 'find', 'xargs', are specified by POSIX to use nl_langinfo (YESEXPR). We implement this behaviour if POSIXLY_CORRECT is set, for the sake of these programs. */ /* If the user wants strict POSIX compliance, use nl_langinfo. */ if (posixly_correct) { translated_pattern = nl_langinfo (nl_index); /* Check against a broken system return value. */ if (translated_pattern != NULL && translated_pattern[0] != '\0') return translated_pattern; } /* Look in the gnulib message catalog. */ translated_pattern = _(english_pattern); if (translated_pattern == english_pattern) { /* The gnulib message catalog provides no translation. Try the system's message catalog. */ translated_pattern = nl_langinfo (nl_index); /* Check against a broken system return value. */ if (translated_pattern != NULL && translated_pattern[0] != '\0') return translated_pattern; /* Fall back to English. */ translated_pattern = english_pattern; } return translated_pattern; } # else # define localized_pattern(english_pattern,nl_index,posixly_correct) \ _(english_pattern) # endif static int try (const char *response, const char *pattern, char **lastp, regex_t *re) { if (*lastp == NULL || strcmp (pattern, *lastp) != 0) { char *safe_pattern; /* The pattern has changed. */ if (*lastp != NULL) { /* Free the old compiled pattern. */ regfree (re); free (*lastp); *lastp = NULL; } /* Put the PATTERN into safe memory before calling regcomp. (regcomp may call nl_langinfo, overwriting PATTERN's storage. */ safe_pattern = strdup (pattern); if (safe_pattern == NULL) return -1; /* Compile the pattern and cache it for future runs. */ if (regcomp (re, safe_pattern, REG_EXTENDED) != 0) { free (safe_pattern); return -1; } *lastp = safe_pattern; } /* See if the regular expression matches RESPONSE. */ return regexec (re, response, 0, NULL, 0) == 0; } #endif int rpmatch (const char *response) { #if ENABLE_NLS /* Match against one of the response patterns, compiling the pattern first if necessary. */ /* We cache the response patterns and compiled regexps here. */ static char *last_yesexpr, *last_noexpr; static regex_t cached_yesre, cached_nore; # if HAVE_LANGINFO_YESEXPR bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL); # endif const char *yesexpr, *noexpr; int result; /* TRANSLATORS: A regular expression testing for an affirmative answer (english: "yes"). Testing the first character may be sufficient. Take care to consider upper and lower case. To enquire the regular expression that your system uses for this purpose, you can use the command locale -k LC_MESSAGES | grep '^yesexpr=' */ yesexpr = localized_pattern (N_("^[yY]"), YESEXPR, posixly_correct); result = try (response, yesexpr, &last_yesexpr, &cached_yesre); if (result < 0) return -1; if (result) return 1; /* TRANSLATORS: A regular expression testing for a negative answer (english: "no"). Testing the first character may be sufficient. Take care to consider upper and lower case. To enquire the regular expression that your system uses for this purpose, you can use the command locale -k LC_MESSAGES | grep '^noexpr=' */ noexpr = localized_pattern (N_("^[nN]"), NOEXPR, posixly_correct); result = try (response, noexpr, &last_noexpr, &cached_nore); if (result < 0) return -1; if (result) return 0; return -1; #else /* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */ return (*response == 'y' || *response == 'Y' ? 1 : *response == 'n' || *response == 'N' ? 0 : -1); #endif } �������������������gnulib-20210822~d383792/lib/safe-alloc.c������������������������������������������������������������0000664�0000000�0000000�00000001512�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safer memory allocation. Copyright (C) 2009-2021 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/>. */ #include <config.h> #define SAFE_ALLOC_INLINE _GL_EXTERN_INLINE #include "safe-alloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/safe-alloc.h������������������������������������������������������������0000664�0000000�0000000�00000006371�14110572173�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* safe-alloc.h: safer memory allocation Copyright (C) 2009-2021 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 Daniel Berrange and Paul Eggert. */ #ifndef SAFE_ALLOC_H_ #define SAFE_ALLOC_H_ #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SAFE_ALLOC_INLINE # define SAFE_ALLOC_INLINE _GL_INLINE #endif /* Don't call these directly - use the macros below. */ SAFE_ALLOC_INLINE void * safe_alloc_realloc_n (void *ptr, size_t count, size_t size) { if (count == 0 || size == 0) count = size = 1; return reallocarray (ptr, count, size); } _GL_ATTRIBUTE_NODISCARD SAFE_ALLOC_INLINE int safe_alloc_check (void *ptr) { /* Return 0 if the allocation was successful, -1 otherwise. */ return -!ptr; } /** * ALLOC: * @ptr: pointer to allocated memory * * Allocate sizeof *ptr bytes of memory and store * the address of allocated memory in 'ptr'. Fill the * newly allocated memory with zeros. * * Return -1 on failure to allocate, zero on success. */ #define ALLOC(ptr) ALLOC_N (ptr, 1) /** * ALLOC_N: * @ptr: pointer to allocated memory * @count: number of elements to allocate * * Allocate an array of 'count' elements, each sizeof *ptr * bytes long and store the address of allocated memory in * 'ptr'. Fill the newly allocated memory with zeros. * * Return -1 on failure, 0 on success. */ #define ALLOC_N(ptr, count) \ safe_alloc_check ((ptr) = calloc (count, sizeof *(ptr))) /** * ALLOC_N_UNINITIALIZED: * @ptr: pointer to allocated memory * @count: number of elements to allocate * * Allocate an array of 'count' elements, each sizeof *ptr * bytes long and store the address of allocated memory in * 'ptr'. Do not initialize the new memory at all. * * Return -1 on failure to allocate, zero on success. */ #define ALLOC_N_UNINITIALIZED(ptr, count) \ safe_alloc_check ((ptr) = safe_alloc_realloc_n (NULL, count, sizeof *(ptr))) /** * REALLOC_N: * @ptr: pointer to allocated memory * @count: number of elements to allocate * * Re-allocate an array of 'count' elements, each sizeof *ptr * bytes long and store the address of allocated memory in * 'ptr'. Fill the newly allocated memory with zeros. * * Return -1 on failure to reallocate, zero on success. */ #define REALLOC_N(ptr, count) \ safe_alloc_check ((ptr) = safe_alloc_realloc_n (ptr, count, sizeof *(ptr))) /** * FREE: * @ptr: pointer holding address to be freed * * Free the memory stored in 'ptr' and update to point * to NULL. */ #define FREE(ptr) ((void) (free (ptr), (ptr) = NULL)) _GL_INLINE_HEADER_END #endif /* SAFE_ALLOC_H_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/safe-read.c�������������������������������������������������������������0000664�0000000�0000000�00000003511�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read and write that retries after interrupts. Copyright (C) 1993-1994, 1998, 2002-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #ifdef SAFE_WRITE # include "safe-write.h" #else # include "safe-read.h" #endif /* Get ssize_t. */ #include <sys/types.h> #include <unistd.h> #include <errno.h> #ifdef EINTR # define IS_EINTR(x) ((x) == EINTR) #else # define IS_EINTR(x) 0 #endif #include "sys-limits.h" #ifdef SAFE_WRITE # define safe_rw safe_write # define rw write #else # define safe_rw safe_read # define rw read # undef const # define const /* empty */ #endif /* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if interrupted. Return the actual number of bytes read(written), zero for EOF, or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error. */ size_t safe_rw (int fd, void const *buf, size_t count) { for (;;) { ssize_t result = rw (fd, buf, count); if (0 <= result) return result; else if (IS_EINTR (errno)) continue; else if (errno == EINVAL && SYS_BUFSIZE_MAX < count) count = SYS_BUFSIZE_MAX; else return result; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/safe-read.h�������������������������������������������������������������0000664�0000000�0000000�00000003456�14110572173�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read() that retries after interrupts. Copyright (C) 2002, 2006, 2009-2021 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/>. */ /* Some system calls may be interrupted and fail with errno = EINTR in the following situations: - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user types Ctrl-Z) on some platforms: Mac OS X. - The process receives a signal for which a signal handler was installed with sigaction() with an sa_flags field that does not contain SA_RESTART. - The process receives a signal for which a signal handler was installed with signal() and for which no call to siginterrupt(sig,0) was done, on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. This module provides a wrapper around read() that handles EINTR. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif #define SAFE_READ_ERROR ((size_t) -1) /* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted. Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR upon error. */ extern size_t safe_read (int fd, void *buf, size_t count); #ifdef __cplusplus } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/safe-write.c������������������������������������������������������������0000664�0000000�0000000�00000001474�14110572173�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write that retries after interrupts. Copyright (C) 2002, 2009-2021 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/>. */ #define SAFE_WRITE #include "safe-read.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/safe-write.h������������������������������������������������������������0000664�0000000�0000000�00000003356�14110572173�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that retries after interrupts. Copyright (C) 2002, 2009-2021 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/>. */ /* Some system calls may be interrupted and fail with errno = EINTR in the following situations: - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user types Ctrl-Z) on some platforms: Mac OS X. - The process receives a signal for which a signal handler was installed with sigaction() with an sa_flags field that does not contain SA_RESTART. - The process receives a signal for which a signal handler was installed with signal() and for which no call to siginterrupt(sig,0) was done, on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. This module provides a wrapper around write() that handles EINTR. */ #include <stddef.h> #define SAFE_WRITE_ERROR ((size_t) -1) /* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted. Return the actual number of bytes written, zero for EOF, or SAFE_WRITE_ERROR upon error. */ extern size_t safe_write (int fd, const void *buf, size_t count); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/same-inode.h������������������������������������������������������������0000664�0000000�0000000�00000003237�14110572173�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two stat buffers are known to refer to the same file. Copyright (C) 2006, 2009-2021 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/>. */ #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) # else /* stat() and fstat() set st_ino to 0 always. */ # define SAME_INODE(a, b) 0 # endif # else # define SAME_INODE(a, b) \ ((a).st_ino == (b).st_ino \ && (a).st_dev == (b).st_dev) # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/same.c������������������������������������������������������������������0000664�0000000�0000000�00000010675�14110572173�0016147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two file names refer to the same file. Copyright (C) 1997-2000, 2002-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <ctype.h> #include <errno.h> #include <string.h> #include <limits.h> #ifndef _POSIX_NAME_MAX # define _POSIX_NAME_MAX 14 #endif #include "same.h" #include "dirname.h" #include "error.h" #include "same-inode.h" #ifndef MIN # define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /* Whether file name components are silently truncated (behavior that POSIX stopped allowing in 2008). This enables checks whether truncated base names are the same, while checking the directories. */ #if !_POSIX_NO_TRUNC && HAVE_FPATHCONF && defined _PC_NAME_MAX # define CHECK_TRUNCATION true #else # define CHECK_TRUNCATION false #endif /* Return nonzero if SOURCE and DEST point to the same name in the same directory. */ bool same_name (const char *source, const char *dest) { return same_nameat (AT_FDCWD, source, AT_FDCWD, dest); } /* Likewise, but interpret the file names relative to SOURCE_FD and DEST_FD, in the style of openat. */ bool same_nameat (int source_dfd, char const *source, int dest_dfd, char const *dest) { /* Compare the basenames. */ char const *source_basename = last_component (source); char const *dest_basename = last_component (dest); size_t source_baselen = base_len (source_basename); size_t dest_baselen = base_len (dest_basename); bool identical_basenames = (source_baselen == dest_baselen && memcmp (source_basename, dest_basename, dest_baselen) == 0); bool compare_dirs = identical_basenames; bool same = false; #if CHECK_TRUNCATION size_t slen_max = HAVE_LONG_FILE_NAMES ? 255 : _POSIX_NAME_MAX; size_t min_baselen = MIN (source_baselen, dest_baselen); if (slen_max <= min_baselen && memcmp (source_basename, dest_basename, slen_max) == 0) compare_dirs = true; #endif if (compare_dirs) { struct stat source_dir_stats; struct stat dest_dir_stats; /* Compare the parent directories (via the device and inode numbers). */ char *source_dirname = dir_name (source); int flags = AT_SYMLINK_NOFOLLOW; if (fstatat (source_dfd, source_dirname, &source_dir_stats, flags) != 0) { /* Shouldn't happen. */ error (1, errno, "%s", source_dirname); } free (source_dirname); char *dest_dirname = dir_name (dest); #if CHECK_TRUNCATION int destdir_errno = 0; int open_flags = O_SEARCH | O_CLOEXEC | O_DIRECTORY; int destdir_fd = openat (dest_dfd, dest_dirname, open_flags); if (destdir_fd < 0 || fstat (destdir_fd, &dest_dir_stats) != 0) destdir_errno = errno; else if (SAME_INODE (source_dir_stats, dest_dir_stats)) { same = identical_basenames; if (! same) { errno = 0; long name_max = fpathconf (destdir_fd, _PC_NAME_MAX); if (name_max < 0) destdir_errno = errno; else same = (name_max <= min_baselen && (memcmp (source_basename, dest_basename, name_max) == 0)); } } close (destdir_fd); if (destdir_errno != 0) { /* Shouldn't happen. */ error (1, destdir_errno, "%s", dest_dirname); } #else if (fstatat (dest_dfd, dest_dirname, &dest_dir_stats, flags) != 0) { /* Shouldn't happen. */ error (1, errno, "%s", dest_dirname); } same = SAME_INODE (source_dir_stats, dest_dir_stats); #endif free (dest_dirname); } return same; } �������������������������������������������������������������������gnulib-20210822~d383792/lib/same.h������������������������������������������������������������������0000664�0000000�0000000�00000001727�14110572173�0016152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two file names refer to the same file. Copyright (C) 1997-2000, 2003-2004, 2009-2021 Free Software Foundation, Inc. This 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 SAME_H_ # define SAME_H_ 1 # include <stdbool.h> bool same_name (const char *source, const char *dest); bool same_nameat (int, char const *, int, char const *); #endif /* SAME_H_ */ �����������������������������������������gnulib-20210822~d383792/lib/save-cwd.c��������������������������������������������������������������0000664�0000000�0000000�00000005751�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* save-cwd.c -- Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "save-cwd.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include "chdir-long.h" #include "unistd--.h" #if GNULIB_FCNTL_SAFER # include "fcntl--.h" #else # define GNULIB_FCNTL_SAFER 0 #endif /* Record the location of the current working directory in CWD so that the program may change to other directories and later use restore_cwd to return to the recorded location. This function may allocate space using malloc (via getcwd) or leave a file descriptor open; use free_cwd to perform the necessary free or close. Upon failure, no memory is allocated, any locally opened file descriptors are closed; return non-zero -- in that case, free_cwd need not be called, but doing so is ok. Otherwise, return zero. The _raison d'etre_ for this interface is that the working directory is sometimes inaccessible, and getcwd is not robust or as efficient. So, we prefer to use the open/fchdir approach, but fall back on getcwd if necessary. This module works for most cases with just the getcwd-lgpl module, but to be truly robust, use the getcwd module. Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin, SCO Xenix. Also, SunOS 4 and Irix 5.3 provide the function, yet it doesn't work for partitions on which auditing is enabled. If you're still using an obsolete system with these problems, please send email to the maintainer of this code. */ int save_cwd (struct saved_cwd *cwd) { cwd->name = NULL; cwd->desc = open (".", O_SEARCH | O_CLOEXEC); if (!GNULIB_FCNTL_SAFER) cwd->desc = fd_safer_flag (cwd->desc, O_CLOEXEC); if (cwd->desc < 0) { cwd->name = getcwd (NULL, 0); return cwd->name ? 0 : -1; } return 0; } /* Change to recorded location, CWD, in directory hierarchy. Upon failure, return -1 (errno is set by chdir or fchdir). Upon success, return zero. */ int restore_cwd (const struct saved_cwd *cwd) { if (0 <= cwd->desc) return fchdir (cwd->desc); else return chdir_long (cwd->name); } void free_cwd (struct saved_cwd *cwd) { if (cwd->desc >= 0) close (cwd->desc); free (cwd->name); } �����������������������gnulib-20210822~d383792/lib/save-cwd.h��������������������������������������������������������������0000664�0000000�0000000�00000002046�14110572173�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef SAVE_CWD_H # define SAVE_CWD_H 1 struct saved_cwd { int desc; char *name; }; int save_cwd (struct saved_cwd *cwd); int restore_cwd (const struct saved_cwd *cwd); void free_cwd (struct saved_cwd *cwd); #endif /* SAVE_CWD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/savedir.c���������������������������������������������������������������0000664�0000000�0000000�00000011624�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* savedir.c -- save the list of files in a directory in a string Copyright (C) 1990, 1997-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include "savedir.h" #include <sys/types.h> #include <errno.h> #include "dirent--.h" #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #include <stddef.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" typedef struct { char *name; #if D_INO_IN_DIRENT ino_t ino; #endif } direntry_t; /* Compare the names of two directory entries */ static int direntry_cmp_name (void const *a, void const *b) { direntry_t const *dea = a; direntry_t const *deb = b; return strcmp (dea->name, deb->name); } #if D_INO_IN_DIRENT /* Compare the inode numbers of two directory entries */ static int direntry_cmp_inode (void const *a, void const *b) { direntry_t const *dea = a; direntry_t const *deb = b; return _GL_CMP (dea->ino, deb->ino); } #endif typedef int (*comparison_function) (void const *, void const *); static comparison_function const comparison_function_table[] = { 0, direntry_cmp_name #if D_INO_IN_DIRENT , direntry_cmp_inode #endif }; /* Return a freshly allocated string containing the file names in directory DIRP, separated by '\0' characters; the end is marked by two '\0' characters in a row. Returned values are sorted according to OPTION. Return NULL (setting errno) if DIRP cannot be read. If DIRP is NULL, return NULL without affecting errno. */ char * streamsavedir (DIR *dirp, enum savedir_option option) { char *name_space = NULL; idx_t allocated = 0; direntry_t *entries = NULL; idx_t entries_allocated = 0; idx_t entries_used = 0; idx_t used = 0; comparison_function cmp = comparison_function_table[option]; if (dirp == NULL) return NULL; for (;;) { struct dirent const *dp; char const *entry; errno = 0; dp = readdir (dirp); if (! dp) break; /* Skip "", ".", and "..". "" is returned by at least one buggy implementation: Solaris 2.4 readdir on NFS file systems. */ entry = dp->d_name; if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0') { idx_t entry_size = _D_EXACT_NAMLEN (dp) + 1; if (cmp) { if (entries_allocated == entries_used) entries = xpalloc (entries, &entries_allocated, 1, -1, sizeof *entries); entries[entries_used].name = xstrdup (entry); #if D_INO_IN_DIRENT entries[entries_used].ino = dp->d_ino; #endif entries_used++; } else { if (allocated - used <= entry_size) name_space = xpalloc (name_space, &allocated, entry_size - (allocated - used), IDX_MAX - 1, sizeof *name_space); memcpy (name_space + used, entry, entry_size); } used += entry_size; } } if (errno != 0) { free (entries); free (name_space); return NULL; } if (cmp) { if (entries_used) qsort (entries, entries_used, sizeof *entries, cmp); name_space = ximalloc (used + 1); used = 0; for (idx_t i = 0; i < entries_used; i++) { char *dest = name_space + used; used += stpcpy (dest, entries[i].name) - dest + 1; free (entries[i].name); } free (entries); } else if (used == allocated) name_space = xirealloc (name_space, used + 1); name_space[used] = '\0'; return name_space; } /* Return a freshly allocated string containing the file names in directory DIR, separated by '\0' characters; the end is marked by two '\0' characters in a row. Return NULL (setting errno) if DIR cannot be opened, read, or closed. */ char * savedir (char const *dir, enum savedir_option option) { DIR *dirp = opendir (dir); if (! dirp) return NULL; else { char *name_space = streamsavedir (dirp, option); if (closedir (dirp) != 0) { free (name_space); return NULL; } return name_space; } } ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/savedir.h���������������������������������������������������������������0000664�0000000�0000000�00000002534�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save the list of files in a directory in a string. Copyright (C) 1997, 1999, 2001, 2003, 2005, 2009-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@gnu.ai.mit.edu>. */ #ifndef _GL_SAVEDIR_H #define _GL_SAVEDIR_H #include <dirent.h> #include <stdlib.h> enum savedir_option { SAVEDIR_SORT_NONE, SAVEDIR_SORT_NAME, #if D_INO_IN_DIRENT SAVEDIR_SORT_INODE, SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_INODE #else SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_NONE #endif }; char *streamsavedir (DIR *, enum savedir_option) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; char *savedir (char const *, enum savedir_option) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/savewd.c����������������������������������������������������������������0000664�0000000�0000000�00000016550�14110572173�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore the working directory, possibly using a child process. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #define SAVEWD_INLINE _GL_EXTERN_INLINE #include "savewd.h" #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include "assure.h" #include "attribute.h" #include "fcntl-safer.h" #include "filename.h" /* Save the working directory into *WD, if it hasn't been saved already. Return true if a child has been forked to do the real work. */ static bool savewd_save (struct savewd *wd) { switch (wd->state) { case INITIAL_STATE: /* Save the working directory, or prepare to fall back if possible. */ { int fd = open_safer (".", O_SEARCH); if (0 <= fd) { wd->state = FD_STATE; wd->val.fd = fd; break; } if (errno != EACCES && errno != ESTALE) { wd->state = ERROR_STATE; wd->val.errnum = errno; break; } } wd->state = FORKING_STATE; wd->val.child = -1; FALLTHROUGH; case FORKING_STATE: if (wd->val.child < 0) { /* "Save" the initial working directory by forking a new subprocess that will attempt all the work from the chdir until the next savewd_restore. */ wd->val.child = fork (); if (wd->val.child != 0) { if (0 < wd->val.child) return true; wd->state = ERROR_STATE; wd->val.errnum = errno; } } break; case FD_STATE: case FD_POST_CHDIR_STATE: case ERROR_STATE: case FINAL_STATE: break; default: assure (false); } return false; } int savewd_chdir (struct savewd *wd, char const *dir, int options, int open_result[2]) { int fd = -1; int result = 0; /* Open the directory if requested, or if avoiding a race condition is requested and possible. */ if (open_result || (options & (HAVE_WORKING_O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0))) { fd = open (dir, (O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | (options & SAVEWD_CHDIR_NOFOLLOW ? O_NOFOLLOW : 0))); if (open_result) { open_result[0] = fd; open_result[1] = errno; } if (fd < 0 && errno != EACCES) result = -1; } if (result == 0 && ! (0 <= fd && options & SAVEWD_CHDIR_SKIP_READABLE)) { if (savewd_save (wd)) { open_result = NULL; result = -2; } else { result = (fd < 0 ? chdir (dir) : fchdir (fd)); if (result == 0) switch (wd->state) { case FD_STATE: wd->state = FD_POST_CHDIR_STATE; break; case ERROR_STATE: case FD_POST_CHDIR_STATE: case FINAL_STATE: break; case FORKING_STATE: assure (wd->val.child == 0); break; default: assure (false); } } } if (0 <= fd && ! open_result) { int e = errno; close (fd); errno = e; } return result; } int savewd_restore (struct savewd *wd, int status) { switch (wd->state) { case INITIAL_STATE: case FD_STATE: /* The working directory is the desired directory, so there's no work to do. */ break; case FD_POST_CHDIR_STATE: /* Restore the working directory using fchdir. */ if (fchdir (wd->val.fd) == 0) { wd->state = FD_STATE; break; } else { int chdir_errno = errno; close (wd->val.fd); wd->state = ERROR_STATE; wd->val.errnum = chdir_errno; } FALLTHROUGH; case ERROR_STATE: /* Report an error if asked to restore the working directory. */ errno = wd->val.errnum; return -1; case FORKING_STATE: /* "Restore" the working directory by waiting for the subprocess to finish. */ { pid_t child = wd->val.child; if (child == 0) _exit (status); if (0 < child) { int child_status; while (waitpid (child, &child_status, 0) < 0) assure (errno == EINTR); wd->val.child = -1; if (! WIFEXITED (child_status)) raise (WTERMSIG (child_status)); return WEXITSTATUS (child_status); } } break; default: assure (false); } return 0; } void savewd_finish (struct savewd *wd) { switch (wd->state) { case INITIAL_STATE: case ERROR_STATE: break; case FD_STATE: case FD_POST_CHDIR_STATE: close (wd->val.fd); break; case FORKING_STATE: assure (wd->val.child < 0); break; default: assure (false); } wd->state = FINAL_STATE; } /* Return true if the actual work is currently being done by a subprocess. A true return means that the caller and the subprocess should resynchronize later with savewd_restore, using only their own memory to decide when to resynchronize; they should not consult the file system to decide, because that might lead to race conditions. This is why savewd_chdir is broken out into another function; savewd_chdir's callers _can_ inspect the file system to decide whether to call savewd_chdir. */ static bool savewd_delegating (struct savewd const *wd) { return wd->state == FORKING_STATE && 0 < wd->val.child; } int savewd_process_files (int n_files, char **file, int (*act) (char *, struct savewd *, void *), void *options) { int i = 0; int last_relative; int exit_status = EXIT_SUCCESS; struct savewd wd; savewd_init (&wd); for (last_relative = n_files - 1; 0 <= last_relative; last_relative--) if (! IS_ABSOLUTE_FILE_NAME (file[last_relative])) break; for (; i < last_relative; i++) { if (! savewd_delegating (&wd)) { int s = act (file[i], &wd, options); if (exit_status < s) exit_status = s; } if (! IS_ABSOLUTE_FILE_NAME (file[i + 1])) { int r = savewd_restore (&wd, exit_status); if (exit_status < r) exit_status = r; } } savewd_finish (&wd); for (; i < n_files; i++) { int s = act (file[i], &wd, options); if (exit_status < s) exit_status = s; } return exit_status; } ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/savewd.h����������������������������������������������������������������0000664�0000000�0000000�00000012372�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore the working directory, possibly using a subprocess. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef SAVEWD_H # define SAVEWD_H 1 #include <stdbool.h> #include <sys/types.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SAVEWD_INLINE # define SAVEWD_INLINE _GL_INLINE #endif /* A saved working directory. The member names and constants defined by this structure are private to the savewd module. */ struct savewd { /* The state of this object. */ enum { /* This object has been created but does not yet represent the working directory. */ INITIAL_STATE, /* val.fd is the original working directory's file descriptor. It is still the working directory. */ FD_STATE, /* Like FD_STATE, but the working directory has changed, so restoring it will require a fchdir. */ FD_POST_CHDIR_STATE, /* Fork and let the subprocess do the work. val.child is 0 in a child, negative in a childless parent, and the child process ID in a parent with a child. */ FORKING_STATE, /* A serious problem argues against further efforts. val.errnum contains the error number (e.g., EIO). */ ERROR_STATE, /* savewd_finish has been called, so the application no longer cares whether the working directory is saved, and there is no more work to do. */ FINAL_STATE } state; /* The object's value. */ union { int fd; int errnum; pid_t child; } val; }; /* Initialize a saved working directory object. */ SAVEWD_INLINE void savewd_init (struct savewd *wd) { wd->state = INITIAL_STATE; } /* Options for savewd_chdir. Can be ORed together. */ enum { /* Do not follow symbolic links, if supported. */ SAVEWD_CHDIR_NOFOLLOW = 1, /* Do not chdir if the directory is readable; simply succeed without invoking chdir if the directory was opened. */ SAVEWD_CHDIR_SKIP_READABLE = 2 }; /* Change the directory, and if successful, record into *WD the fact that the process chdired into DIR. A process using this module should use savewd_chdir rather than chdir or fchdir. Obey the options specified in OPTIONS. If OPEN_RESULT is not null, store into OPEN_RESULT[0] a file descriptor that accesses DIR if a file descriptor is successfully obtained. Store -1 otherwise, setting OPEN_RESULT[1] to the error number. Store through OPEN_RESULT regardless of whether the chdir is successful. However, when -2 is returned, the contents of OPEN_RESULT are indeterminate since the file descriptor is closed in the parent. Return -2 if a subprocess was spun off to do the real work, -1 (setting errno) if unsuccessful, 0 if successful. */ int savewd_chdir (struct savewd *wd, char const *dir, int options, int open_result[2]); /* Restore the working directory from *WD. STATUS indicates the exit status corresponding to the work done since the last save; this is used when the caller is in a subprocess. Return 0 if successful, -1 (setting errno) on our failure, a positive subprocess exit status if the working directory was restored in the parent but the subprocess failed. */ int savewd_restore (struct savewd *wd, int status); /* Return WD's error number, or 0 if WD is not in an error state. */ SAVEWD_INLINE int _GL_ATTRIBUTE_PURE savewd_errno (struct savewd const *wd) { return (wd->state == ERROR_STATE ? wd->val.errnum : 0); } /* Deallocate any resources associated with WD. A program that chdirs should restore before finishing. */ void savewd_finish (struct savewd *wd); /* Process N_FILES file names, FILE[0] through FILE[N_FILES - 1]. For each file name F, call ACT (F, WD, OPTIONS); ACT should invoke savewd_chdir as needed, and should return an exit status. WD represents the working directory; it may be in an error state when ACT is called. Save and restore the working directory as needed by the file name vector; assume that ACT does not require access to any relative file names other than its first argument, and that it is OK if the working directory is changed when this function returns. Some actions may be applied in a subprocess. Return the maximum exit status that any call to ACT returned, or EXIT_SUCCESS (i.e., 0) if no calls were made. */ int savewd_process_files (int n_files, char **file, int (*act) (char *, struct savewd *, void *), void *options); _GL_INLINE_HEADER_END #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/scandir.c���������������������������������������������������������������0000664�0000000�0000000�00000011633�14110572173�0016640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-1998, 2000, 2002-2003, 2009-2021 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 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/>. */ #include <config.h> #include <dirent.h> #include <stdlib.h> #include <string.h> #include <errno.h> #if _LIBC # include <bits/libc-lock.h> #endif #undef select #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(d) strlen ((d)->d_name) #endif #ifndef _D_ALLOC_NAMLEN # ifndef __KLIBC__ # define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1) # else /* On OS/2 kLIBC, d_name is not the last field of struct dirent. See <https://trac.netlabs.org/libc/browser/branches/libc-0.6/src/emx/include/sys/dirent.h#L68>. */ # include <stddef.h> # define _D_ALLOC_NAMLEN(d) (sizeof (struct dirent) - \ offsetof (struct dirent, d_name)) # endif #endif #if _LIBC # ifndef SCANDIR # define SCANDIR scandir # define READDIR __readdir # define DIRENT_TYPE struct dirent # endif #else # define SCANDIR scandir # define READDIR readdir # define DIRENT_TYPE struct dirent # define __opendir opendir # define __closedir closedir # define __set_errno(val) errno = (val) /* The results of opendir() in this file are not used with dirfd and fchdir, and we do not leak fds to any single-threaded code that could use stdio, therefore save some unnecessary recursion in fchdir.c and opendir_safer.c. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use opendir_safer. */ # undef opendir # undef closedir #endif #ifndef SCANDIR_CANCEL # define SCANDIR_CANCEL struct scandir_cancel_struct { DIR *dp; void *v; size_t cnt; }; # if _LIBC static void cancel_handler (void *arg) { struct scandir_cancel_struct *cp = arg; size_t i; void **v = cp->v; for (i = 0; i < cp->cnt; ++i) free (v[i]); free (v); (void) __closedir (cp->dp); } # endif #endif int #ifndef __KLIBC__ SCANDIR (const char *dir, DIRENT_TYPE ***namelist, int (*select) (const DIRENT_TYPE *), int (*cmp) (const DIRENT_TYPE **, const DIRENT_TYPE **)) #else /* On OS/2 kLIBC, scandir() declaration is different from POSIX. See <https://trac.netlabs.org/libc/browser/branches/libc-0.6/src/emx/include/dirent.h#L141>. */ SCANDIR (const char *dir, DIRENT_TYPE ***namelist, int (*select) (DIRENT_TYPE *), int (*cmp) (const void *, const void *)) #endif { DIR *dp = __opendir (dir); DIRENT_TYPE **v = NULL; size_t vsize = 0; struct scandir_cancel_struct c; DIRENT_TYPE *d; int save; if (dp == NULL) return -1; save = errno; __set_errno (0); c.dp = dp; c.v = NULL; c.cnt = 0; #if _LIBC __libc_cleanup_push (cancel_handler, &c); #endif while ((d = READDIR (dp)) != NULL) { int use_it = select == NULL; if (! use_it) { use_it = select (d); /* The select function might have changed errno. It was zero before and it need to be again to make the latter tests work. */ __set_errno (0); } if (use_it) { DIRENT_TYPE *vnew; size_t dsize; /* Ignore errors from select or readdir */ __set_errno (0); if (__builtin_expect (c.cnt == vsize, 0)) { DIRENT_TYPE **new; if (vsize == 0) vsize = 10; else vsize *= 2; new = (DIRENT_TYPE **) realloc (v, vsize * sizeof (*v)); if (new == NULL) break; v = new; c.v = (void *) v; } dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d; vnew = (DIRENT_TYPE *) malloc (dsize); if (vnew == NULL) break; v[c.cnt++] = (DIRENT_TYPE *) memcpy (vnew, d, dsize); } } if (__builtin_expect (errno, 0) != 0) { save = errno; while (c.cnt > 0) free (v[--c.cnt]); free (v); c.cnt = -1; } else { /* Sort the list if we have a comparison function to sort with. */ if (cmp != NULL) qsort (v, c.cnt, sizeof (*v), (int (*) (const void *, const void *)) cmp); *namelist = v; } #if _LIBC __libc_cleanup_pop (0); #endif (void) __closedir (dp); __set_errno (save); return c.cnt; } �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sched.in.h��������������������������������������������������������������0000664�0000000�0000000�00000005204�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <sched.h>. Copyright (C) 2008-2021 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/>. */ #ifndef _@GUARD_PREFIX@_SCHED_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SCHED_H@ # if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> # endif # @INCLUDE_NEXT@ @NEXT_SCHED_H@ #endif #ifndef _@GUARD_PREFIX@_SCHED_H #define _@GUARD_PREFIX@_SCHED_H /* Get pid_t. This is needed on glibc 2.11 (see glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) and Mac OS X 10.5. */ #include <sys/types.h> #ifdef __KLIBC__ /* On OS/2 kLIBC, struct sched_param is in spawn.h. */ # include <spawn.h> #endif #ifdef __VMS /* On OpenVMS, struct sched_param is in <pthread.h>. */ # include <pthread.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_STRUCT_SCHED_PARAM@ # if !GNULIB_defined_struct_sched_param struct sched_param { int sched_priority; }; # define GNULIB_defined_struct_sched_param 1 # endif #endif #if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) # define SCHED_FIFO 1 # define SCHED_RR 2 # define SCHED_OTHER 0 #endif #if @GNULIB_SCHED_YIELD@ # if @REPLACE_SCHED_YIELD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sched_yield # define sched_yield rpl_sched_yield # endif _GL_FUNCDECL_RPL (sched_yield, int, (void)); _GL_CXXALIAS_RPL (sched_yield, int, (void)); # else # if !@HAVE_SCHED_YIELD@ _GL_FUNCDECL_SYS (sched_yield, int, (void)); # endif _GL_CXXALIAS_SYS (sched_yield, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sched_yield); # endif #elif defined GNULIB_POSIXCHECK # undef sched_yield # if HAVE_RAW_DECL_SCHED_YIELD _GL_WARN_ON_USE (sched_yield, "sched_yield is not portable - " "use gnulib module sched_yield for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SCHED_H */ #endif /* _@GUARD_PREFIX@_SCHED_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sched_yield.c�����������������������������������������������������������0000664�0000000�0000000�00000002550�14110572173�0017467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Schedule other threads to run. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include <sched.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> int sched_yield (void) { Sleep (0); return 0; } #elif defined __KLIBC__ /* OS/2 kLIBC implementation */ # define INCL_DOS # include <os2.h> int sched_yield (void) { DosSleep (0); return 0; } #else /* Provide a dummy implementation for single-threaded applications. */ int sched_yield (void) { return 0; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/scratch_buffer.h��������������������������������������������������������0000664�0000000�0000000�00000011456�14110572173�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2017-2021 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, 2017. */ #ifndef _GL_SCRATCH_BUFFER_H #define _GL_SCRATCH_BUFFER_H /* Scratch buffers with a default stack allocation and fallback to heap allocation. It is expected that this function is used in this way: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) return -1; scratch_buffer_free (&tmpbuf); return 0; The allocation functions (scratch_buffer_grow, scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make sure that the heap allocation, if any, is freed, so that the code above does not have a memory leak. The buffer still remains in a state that can be deallocated using scratch_buffer_free, so a loop like this is valid as well: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) break; scratch_buffer_free (&tmpbuf); scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed to grow the buffer by at least 512 bytes. This means that when using the scratch buffer as a backing store for a non-character array whose element size, in bytes, is 512 or smaller, the scratch buffer only has to grow once to make room for at least one more element. */ /* Scratch buffer. Must be initialized with scratch_buffer_init before its use. */ struct scratch_buffer; /* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space and BUFFER->length reflects the available space. */ #if 0 extern void scratch_buffer_init (struct scratch_buffer *buffer); #endif /* Deallocates *BUFFER (if it was heap-allocated). */ #if 0 extern void scratch_buffer_free (struct scratch_buffer *buffer); #endif /* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT preserved. Return true on success, false on allocation failure (in which case the old buffer is freed). On success, the new buffer is larger than the previous size. On failure, *BUFFER is deallocated, but remains in a free-able state, and errno is set. */ #if 0 extern bool scratch_buffer_grow (struct scratch_buffer *buffer); #endif /* Like scratch_buffer_grow, but preserve the old buffer contents on success, as a prefix of the new buffer. */ #if 0 extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer); #endif /* Grow *BUFFER so that it can store at least NELEM elements of SIZE bytes. The buffer contents are NOT preserved. Both NELEM and SIZE can be zero. Return true on success, false on allocation failure (in which case the old buffer is freed, but *BUFFER remains in a free-able state, and errno is set). It is unspecified whether this function can reduce the array size. */ #if 0 extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size); #endif /* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, deallocating *BUFFER if it was heap-allocated. SIZE must be at most *BUFFER's size. Return NULL (setting errno) on memory exhaustion. */ #if 0 extern void *scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size); #endif /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_scratch_buffer_dupfree gl_scratch_buffer_dupfree #define __libc_scratch_buffer_grow gl_scratch_buffer_grow #define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve #define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size #ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) #endif #include <malloc/scratch_buffer.gl.h> #endif /* _GL_SCRATCH_BUFFER_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-context.c������������������������������������������������������������0000664�0000000�0000000�00000001546�14110572173�0017310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/context.h> functions. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define SE_CONTEXT_INLINE _GL_EXTERN_INLINE #include <selinux/context.h> ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-context.in.h���������������������������������������������������������0000664�0000000�0000000�00000006047�14110572173�0017723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* SELinux-related headers. Copyright (C) 2007-2021 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 Jim Meyering, 2007. */ #ifndef SELINUX_CONTEXT_H # define SELINUX_CONTEXT_H # include <errno.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SE_CONTEXT_INLINE # define SE_CONTEXT_INLINE _GL_INLINE #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif #endif typedef int context_t; SE_CONTEXT_INLINE context_t context_new (_GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return 0; } SE_CONTEXT_INLINE char * context_str (_GL_ATTRIBUTE_MAYBE_UNUSED context_t con) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE void context_free (_GL_ATTRIBUTE_MAYBE_UNUSED context_t c) {} SE_CONTEXT_INLINE int context_user_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_role_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_range_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_type_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE char * context_type_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_range_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_role_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_user_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } _GL_INLINE_HEADER_END #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-label.c��������������������������������������������������������������0000664�0000000�0000000�00000001534�14110572173�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/label.h> functions. Copyright 2020-2021 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/>. */ #include <config.h> #define SE_LABEL_INLINE _GL_EXTERN_INLINE #include <selinux/label.h> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-label.in.h�����������������������������������������������������������0000664�0000000�0000000�00000004414�14110572173�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <selinux/label.h> for platforms that lack it. Copyright 2020-2021 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. */ #ifndef SELINUX_LABEL_H #define SELINUX_LABEL_H #include <selinux/selinux.h> #include <errno.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SE_LABEL_INLINE # define SE_LABEL_INLINE _GL_INLINE #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif #endif #define SELABEL_CTX_FILE 0 struct selabel_handle; SE_LABEL_INLINE int selabel_lookup (_GL_ATTRIBUTE_MAYBE_UNUSED struct selabel_handle *hnd, _GL_ATTRIBUTE_MAYBE_UNUSED char **context, _GL_ATTRIBUTE_MAYBE_UNUSED char const *key, _GL_ATTRIBUTE_MAYBE_UNUSED int type) { errno = ENOTSUP; return -1; } SE_LABEL_INLINE struct selabel_handle * selabel_open (_GL_ATTRIBUTE_MAYBE_UNUSED int backend, _GL_ATTRIBUTE_MAYBE_UNUSED struct selinux_opt *options, _GL_ATTRIBUTE_MAYBE_UNUSED unsigned nopt) { errno = ENOTSUP; return 0; } SE_LABEL_INLINE void selabel_close (_GL_ATTRIBUTE_MAYBE_UNUSED struct selabel_handle *hnd) { errno = ENOTSUP; } _GL_INLINE_HEADER_END #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-selinux.c������������������������������������������������������������0000664�0000000�0000000�00000001546�14110572173�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/selinux.h> functions. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define SE_SELINUX_INLINE _GL_EXTERN_INLINE #include <selinux/selinux.h> ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/se-selinux.in.h���������������������������������������������������������0000664�0000000�0000000�00000010741�14110572173�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <selinux/selinux.h> for platforms that lack it. Copyright (C) 2008-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if HAVE_SELINUX_SELINUX_H #@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ #else # if !defined _@GUARD_PREFIX@_SELINUX_SELINUX_H # define _@GUARD_PREFIX@_SELINUX_SELINUX_H # include <sys/types.h> # include <errno.h> # ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." # endif _GL_INLINE_HEADER_BEGIN # ifndef SE_SELINUX_INLINE # define SE_SELINUX_INLINE _GL_INLINE # endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif # endif # if !GNULIB_defined_security_types typedef unsigned short security_class_t; struct selinux_opt; # define is_selinux_enabled() 0 SE_SELINUX_INLINE int getcon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE void freecon (_GL_ATTRIBUTE_MAYBE_UNUSED char *con) {} SE_SELINUX_INLINE int getfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int matchpathcon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED mode_t m, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int getfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int lgetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int fgetfilecon (int fd,_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int lsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int fsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED int fd, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_check_context (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_check_context_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setexeccon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_compute_create (_GL_ATTRIBUTE_MAYBE_UNUSED char const *scon, _GL_ATTRIBUTE_MAYBE_UNUSED char const *tcon, _GL_ATTRIBUTE_MAYBE_UNUSED security_class_t tclass, _GL_ATTRIBUTE_MAYBE_UNUSED char **newcon) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE security_class_t string_to_security_class (char const *name) { errno = ENOTSUP; return 0; } SE_SELINUX_INLINE int matchpathcon_init_prefix (_GL_ATTRIBUTE_MAYBE_UNUSED char const *path, _GL_ATTRIBUTE_MAYBE_UNUSED char const *prefix) { errno = ENOTSUP; return -1; } # define GNULIB_defined_security_types 1 # endif _GL_INLINE_HEADER_END # endif #endif �������������������������������gnulib-20210822~d383792/lib/search.in.h�������������������������������������������������������������0000664�0000000�0000000�00000021246�14110572173�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <search.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_SEARCH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SEARCH_H@ # @INCLUDE_NEXT@ @NEXT_SEARCH_H@ #endif #ifndef _@GUARD_PREFIX@_SEARCH_H #define _@GUARD_PREFIX@_SEARCH_H /* 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. */ #if @GNULIB_MDA_LFIND@ /* On native Windows, map 'lfind' to '_lfind', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lfind always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lfind # define lfind _lfind # endif _GL_CXXALIAS_MDA (lfind, void *, (const void *key, const void *base, unsigned int *nmemb, unsigned int size, int (*compar) (const void *, const void *))); # else _GL_CXXALIAS_SYS (lfind, void *, (const void *key, const void *base, size_t *nmemb, size_t size, int (*compar) (const void *, const void *))); # endif _GL_CXXALIASWARN (lfind); #endif #if @GNULIB_MDA_LSEARCH@ /* On native Windows, map 'lsearch' to '_lsearch', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lsearch always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lsearch # define lsearch _lsearch # endif _GL_CXXALIAS_MDA (lsearch, void *, (const void *key, void *base, unsigned int *nmemb, unsigned int size, int (*compar) (const void *, const void *))); # else _GL_CXXALIAS_SYS (lsearch, void *, (const void *key, void *base, size_t *nmemb, size_t size, int (*compar) (const void *, const void *))); # endif _GL_CXXALIASWARN (lsearch); #endif #if @GNULIB_TSEARCH@ # if @REPLACE_TSEARCH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tsearch rpl_tsearch # define tfind rpl_tfind # define tdelete rpl_tdelete # define twalk rpl_twalk # endif # endif /* See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/search.h.html> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/tsearch.html> for details. */ # if !@HAVE_TYPE_VISIT@ # if !GNULIB_defined_search_types typedef enum { preorder, postorder, endorder, leaf } VISIT; # define GNULIB_defined_search_types 1 # endif # endif # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_search_fn_types typedef int (*_gl_search_compar_fn) (const void *, const void *); typedef void (*_gl_search_action_fn) (const void *, VISIT, int); # define GNULIB_defined_search_fn_types 1 # endif # ifdef __cplusplus } # endif /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, a new element equal to KEY is inserted in the tree and is returned. */ # if @REPLACE_TSEARCH@ _GL_FUNCDECL_RPL (tsearch, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (tsearch, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar)); # else # if !@HAVE_TSEARCH@ _GL_FUNCDECL_SYS (tsearch, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (tsearch, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar)); # endif _GL_CXXALIASWARN (tsearch); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, NULL is returned. */ # if @REPLACE_TSEARCH@ _GL_FUNCDECL_RPL (tfind, void *, (const void *key, void *const *vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (tfind, void *, (const void *key, void *const *vrootp, _gl_search_compar_fn compar)); # else # if !@HAVE_TSEARCH@ _GL_FUNCDECL_SYS (tfind, void *, (const void *key, void *const *vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); # endif /* Need to cast, because on Cygwin 1.5.x systems, the second parameter is void **vrootp. */ _GL_CXXALIAS_SYS_CAST (tfind, void *, (const void *key, void *const *vrootp, _gl_search_compar_fn compar)); # endif _GL_CXXALIASWARN (tfind); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is removed from the tree, and its parent node is returned. Otherwise, NULL is returned. */ # if @REPLACE_TSEARCH@ _GL_FUNCDECL_RPL (tdelete, void *, (const void *restrict key, void **restrict vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (tdelete, void *, (const void *restrict key, void **restrict vrootp, _gl_search_compar_fn compar)); # else # if !@HAVE_TSEARCH@ _GL_FUNCDECL_SYS (tdelete, void *, (const void *restrict key, void **restrict vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (tdelete, void *, (const void *restrict key, void **restrict vrootp, _gl_search_compar_fn compar)); # endif _GL_CXXALIASWARN (tdelete); /* Perform a depth-first, left-to-right traversal of the tree VROOT. The ACTION function is called: - for non-leaf nodes: 3 times, before the left subtree traversal, after the left subtree traversal but before the right subtree traversal, and after the right subtree traversal, - for leaf nodes: once. The arguments passed to ACTION are: 1. the node; it can be cast to a 'const void * const *', i.e. into a pointer to the key, 2. an indicator which visit of the node this is, 3. the level of the node in the tree (0 for the root). */ # if @REPLACE_TSEARCH@ _GL_FUNCDECL_RPL (twalk, void, (const void *vroot, _gl_search_action_fn action) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (twalk, void, (const void *vroot, _gl_search_action_fn action)); # else # if !@HAVE_TWALK@ _GL_FUNCDECL_SYS (twalk, void, (const void *vroot, _gl_search_action_fn action) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (twalk, void, (const void *vroot, _gl_search_action_fn action)); # endif _GL_CXXALIASWARN (twalk); /* Flags used by tsearch.c. */ # define GNULIB_defined_tsearch (@REPLACE_TSEARCH@ || !@HAVE_TSEARCH@) # define GNULIB_defined_twalk (@REPLACE_TSEARCH@ || !@HAVE_TWALK@) #elif defined GNULIB_POSIXCHECK # undef tsearch # if HAVE_RAW_DECL_TSEARCH _GL_WARN_ON_USE (tsearch, "tsearch is unportable - " "use gnulib module tsearch for portability"); # endif # undef tfind # if HAVE_RAW_DECL_TFIND _GL_WARN_ON_USE (tfind, "tfind is unportable - " "use gnulib module tsearch for portability"); # endif # undef tdelete # if HAVE_RAW_DECL_TDELETE _GL_WARN_ON_USE (tdelete, "tdelete is unportable - " "use gnulib module tsearch for portability"); # endif # undef twalk # if HAVE_RAW_DECL_TWALK _GL_WARN_ON_USE (twalk, "twalk is unportable - " "use gnulib module tsearch for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SEARCH_H */ #endif /* _@GUARD_PREFIX@_SEARCH_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/secure_getenv.c���������������������������������������������������������0000664�0000000�0000000�00000003771�14110572173�0020057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look up an environment variable, returning NULL in insecure situations. Copyright 2013-2021 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/>. */ #include <config.h> #include <stdlib.h> #if !HAVE___SECURE_GETENV # if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) # include <unistd.h> # endif #endif char * secure_getenv (char const *name) { #if HAVE___SECURE_GETENV /* glibc */ return __secure_getenv (name); #elif HAVE_ISSETUGID /* OS X, FreeBSD, NetBSD, OpenBSD */ if (issetugid ()) return NULL; return getenv (name); #elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ if (geteuid () != getuid () || getegid () != getgid ()) return NULL; return getenv (name); #elif defined _WIN32 && ! defined __CYGWIN__ /* native Windows */ /* On native Windows, there is no such concept as setuid or setgid binaries. - Programs launched as system services have high privileges, but they don't inherit environment variables from a user. - Programs launched by a user with "Run as Administrator" have high privileges and use the environment variables, but the user has been asked whether he agrees. - Programs launched by a user without "Run as Administrator" cannot gain high privileges, therefore there is no risk. */ return getenv (name); #else return NULL; #endif } �������gnulib-20210822~d383792/lib/select.c����������������������������������������������������������������0000664�0000000�0000000�00000040710�14110572173�0016472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for select(2) Contributed by Paolo Bonzini. Copyright 2008-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ #include <config.h> /* Specification. */ #include <sys/select.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows. */ #include <alloca.h> #include <assert.h> #include <sys/types.h> #include <errno.h> #include <limits.h> #include <winsock2.h> #include <windows.h> #include <io.h> #include <stdio.h> #include <conio.h> #include <time.h> /* Get the overridden 'struct timeval'. */ #include <sys/time.h> #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #undef select /* Don't assume that UNICODE is not defined. */ #undef GetModuleHandle #define GetModuleHandle GetModuleHandleA #undef PeekConsoleInput #define PeekConsoleInput PeekConsoleInputA #undef CreateEvent #define CreateEvent CreateEventA #undef PeekMessage #define PeekMessage PeekMessageA #undef DispatchMessage #define DispatchMessage DispatchMessageA /* Avoid warnings from gcc -Wcast-function-type. */ #define GetProcAddress \ (void *) GetProcAddress struct bitset { unsigned char in[FD_SETSIZE / CHAR_BIT]; unsigned char out[FD_SETSIZE / CHAR_BIT]; }; /* Declare data structures for ntdll functions. */ typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; ULONG MaximumInstances; ULONG CurrentInstances; ULONG InboundQuota; ULONG ReadDataAvailable; ULONG OutboundQuota; ULONG WriteQuotaAvailable; ULONG NamedPipeState; ULONG NamedPipeEnd; } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; typedef struct _IO_STATUS_BLOCK { union { DWORD Status; PVOID Pointer; } u; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef enum _FILE_INFORMATION_CLASS { FilePipeLocalInformation = 24 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef DWORD (WINAPI *PNtQueryInformationFile) (HANDLE, IO_STATUS_BLOCK *, VOID *, ULONG, FILE_INFORMATION_CLASS); #ifndef PIPE_BUF #define PIPE_BUF 512 #endif static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; return GetConsoleMode (h, &mode) != 0; } static BOOL IsSocketHandle (HANDLE h) { WSANETWORKEVENTS ev; if (IsConsoleHandle (h)) return FALSE; /* Under Wine, it seems that getsockopt returns 0 for pipes too. WSAEnumNetworkEvents instead distinguishes the two correctly. */ ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); return ev.lNetworkEvents != 0xDEADBEEF; } /* Compute output fd_sets for libc descriptor FD (whose Windows handle is H). */ static int windows_poll_handle (HANDLE h, int fd, struct bitset *rbits, struct bitset *wbits, struct bitset *xbits) { BOOL read, write, except; int i, ret; INPUT_RECORD *irbuffer; DWORD avail, nbuffer; BOOL bRet; IO_STATUS_BLOCK iosb; FILE_PIPE_LOCAL_INFORMATION fpli; static PNtQueryInformationFile NtQueryInformationFile; static BOOL once_only; read = write = except = FALSE; switch (GetFileType (h)) { case FILE_TYPE_DISK: read = TRUE; write = TRUE; break; case FILE_TYPE_PIPE: if (!once_only) { NtQueryInformationFile = (PNtQueryInformationFile) GetProcAddress (GetModuleHandle ("ntdll.dll"), "NtQueryInformationFile"); once_only = TRUE; } if (PeekNamedPipe (h, NULL, 0, NULL, &avail, NULL) != 0) { if (avail) read = TRUE; } else if (GetLastError () == ERROR_BROKEN_PIPE) ; else { /* It was the write-end of the pipe. Check if it is writable. If NtQueryInformationFile fails, optimistically assume the pipe is writable. This could happen on Windows 9x, where NtQueryInformationFile is not available, or if we inherit a pipe that doesn't permit FILE_READ_ATTRIBUTES access on the write end (I think this should not happen since Windows XP SP2; WINE seems fine too). Otherwise, ensure that enough space is available for atomic writes. */ memset (&iosb, 0, sizeof (iosb)); memset (&fpli, 0, sizeof (fpli)); if (!NtQueryInformationFile || NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), FilePipeLocalInformation) || fpli.WriteQuotaAvailable >= PIPE_BUF || (fpli.OutboundQuota < PIPE_BUF && fpli.WriteQuotaAvailable == fpli.OutboundQuota)) write = TRUE; } break; case FILE_TYPE_CHAR: write = TRUE; if (!(rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) break; ret = WaitForSingleObject (h, 0); if (ret == WAIT_OBJECT_0) { if (!IsConsoleHandle (h)) { read = TRUE; break; } nbuffer = avail = 0; bRet = GetNumberOfConsoleInputEvents (h, &nbuffer); /* Screen buffers handles are filtered earlier. */ assert (bRet); if (nbuffer == 0) { except = TRUE; break; } irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD)); bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail); if (!bRet || avail == 0) { except = TRUE; break; } for (i = 0; i < avail; i++) if (irbuffer[i].EventType == KEY_EVENT) read = TRUE; } break; default: ret = WaitForSingleObject (h, 0); write = TRUE; if (ret == WAIT_OBJECT_0) read = TRUE; break; } ret = 0; if (read && (rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { rbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (write && (wbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { wbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (except && (xbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { xbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } return ret; } int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) #undef timeval { static struct timeval tv0; static HANDLE hEvent; HANDLE h, handle_array[FD_SETSIZE + 2]; fd_set handle_rfds, handle_wfds, handle_xfds; struct bitset rbits, wbits, xbits; unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT]; DWORD ret, wait_timeout, nhandles, nsock, nbuffer; MSG msg; int i, fd, rc; clock_t tend; if (nfds > FD_SETSIZE) nfds = FD_SETSIZE; if (!timeout) wait_timeout = INFINITE; else { wait_timeout = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; /* select is also used as a portable usleep. */ if (!rfds && !wfds && !xfds) { Sleep (wait_timeout); return 0; } } if (!hEvent) hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); handle_array[0] = hEvent; nhandles = 1; nsock = 0; /* Copy descriptors to bitsets. At the same time, eliminate bits in the "wrong" direction for console input buffers and screen buffers, because screen buffers are waitable and they will block until a character is available. */ memset (&rbits, 0, sizeof (rbits)); memset (&wbits, 0, sizeof (wbits)); memset (&xbits, 0, sizeof (xbits)); memset (anyfds_in, 0, sizeof (anyfds_in)); if (rfds) for (i = 0; i < rfds->fd_count; i++) { fd = rfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && !GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else rfds = (fd_set *) alloca (sizeof (fd_set)); if (wfds) for (i = 0; i < wfds->fd_count; i++) { fd = wfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else wfds = (fd_set *) alloca (sizeof (fd_set)); if (xfds) for (i = 0; i < xfds->fd_count; i++) { fd = xfds->fd_array[i]; xbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else xfds = (fd_set *) alloca (sizeof (fd_set)); /* Zero all the fd_sets, including the application's. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); FD_ZERO (&handle_rfds); FD_ZERO (&handle_wfds); FD_ZERO (&handle_xfds); /* Classify handles. Create fd sets for sockets, poll the others. */ for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (!h) { errno = EBADF; return -1; } if (IsSocketHandle (h)) { int requested = FD_CLOSE; /* See above; socket handles are mapped onto select, but we need to map descriptors to handles. */ if (rbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_READ | FD_ACCEPT; FD_SET ((SOCKET) h, rfds); FD_SET ((SOCKET) h, &handle_rfds); } if (wbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_WRITE | FD_CONNECT; FD_SET ((SOCKET) h, wfds); FD_SET ((SOCKET) h, &handle_wfds); } if (xbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_OOB; FD_SET ((SOCKET) h, xfds); FD_SET ((SOCKET) h, &handle_xfds); } WSAEventSelect ((SOCKET) h, hEvent, requested); nsock++; } else { handle_array[nhandles++] = h; /* Poll now. If we get an event, do not wait below. */ if (wait_timeout != 0 && windows_poll_handle (h, i, &rbits, &wbits, &xbits)) wait_timeout = 0; } } /* Place a sentinel at the end of the array. */ handle_array[nhandles] = NULL; /* When will the waiting period expire? */ if (wait_timeout != INFINITE) tend = clock () + wait_timeout; restart: if (wait_timeout == 0 || nsock == 0) rc = 0; else { /* See if we need to wait in the loop below. If any select is ready, do MsgWaitForMultipleObjects anyway to dispatch messages, but no need to call select again. */ rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (rc == 0) { /* Restore the fd_sets for the other select we do below. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); } else wait_timeout = 0; } /* How much is left to wait? */ if (wait_timeout != INFINITE) { clock_t tnow = clock (); if (tend >= tnow) wait_timeout = tend - tnow; else wait_timeout = 0; } for (;;) { ret = MsgWaitForMultipleObjects (nhandles, handle_array, FALSE, wait_timeout, QS_ALLINPUT); if (ret == WAIT_OBJECT_0 + nhandles) { /* new input of some other kind */ BOOL bRet; while ((bRet = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) != 0) { TranslateMessage (&msg); DispatchMessage (&msg); } } else break; } /* If we haven't done it yet, check the status of the sockets. */ if (rc == 0 && nsock > 0) rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (nhandles > 1) { /* Count results that are not counted in the return value of select. */ nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h == handle_array[nhandles]) { /* Not a socket. */ nhandles++; windows_poll_handle (h, i, &rbits, &wbits, &xbits); if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) rc++; } } if (rc == 0 && (wait_timeout == INFINITE /* If NHANDLES > 1, but no bits are set, it means we've been told incorrectly that some handle was signaled. This happens with anonymous pipes, which always cause MsgWaitForMultipleObjects to exit immediately, but no data is found ready to be read by windows_poll_handle. To avoid a total failure (whereby we return zero and don't wait at all), let's poll in a more busy loop. */ || (wait_timeout != 0 && nhandles > 1))) { /* Sleep 1 millisecond to avoid busy wait and retry with the original fd_sets. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); SleepEx (1, TRUE); goto restart; } if (timeout && wait_timeout == 0 && rc == 0) timeout->tv_sec = timeout->tv_usec = 0; } /* Now fill in the results. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h != handle_array[nhandles]) { /* Perform handle->descriptor mapping. */ SOCKET s = (SOCKET) h; WSAEventSelect (s, NULL, 0); if (FD_ISSET (s, &handle_rfds)) FD_SET (i, rfds); if (FD_ISSET (s, &handle_wfds)) FD_SET (i, wfds); if (FD_ISSET (s, &handle_xfds)) FD_SET (i, xfds); } else { /* Not a socket. */ nhandles++; if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, rfds); if (wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, wfds); if (xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, xfds); } } return rc; } #else /* ! Native Windows. */ #include <stddef.h> /* NULL */ #include <errno.h> #include <unistd.h> #undef select int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) { int i; /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } for (i = 0; i < nfds; i++) { if (((rfds && FD_ISSET (i, rfds)) || (wfds && FD_ISSET (i, wfds)) || (xfds && FD_ISSET (i, xfds))) && dup2 (i, i) != i) return -1; } /* Interix 3.5 has a bug: it does not support nfds == 0. */ if (nfds == 0) { nfds = 1; rfds = NULL; wfds = NULL; xfds = NULL; } return select (nfds, rfds, wfds, xfds, timeout); } #endif ��������������������������������������������������������gnulib-20210822~d383792/lib/selinux-at.c������������������������������������������������������������0000664�0000000�0000000�00000004142�14110572173�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* openat-style fd-relative functions for SE Linux Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include "selinux-at.h" #include "openat.h" #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include "save-cwd.h" #include "openat-priv.h" #define AT_FUNC_NAME getfileconat #define AT_FUNC_F1 getfilecon #define AT_FUNC_POST_FILE_PARAM_DECLS , char **con #define AT_FUNC_POST_FILE_ARGS , con #include "at-func.c" #undef AT_FUNC_NAME #undef AT_FUNC_F1 #undef AT_FUNC_POST_FILE_PARAM_DECLS #undef AT_FUNC_POST_FILE_ARGS #define AT_FUNC_NAME lgetfileconat #define AT_FUNC_F1 lgetfilecon #define AT_FUNC_POST_FILE_PARAM_DECLS , char **con #define AT_FUNC_POST_FILE_ARGS , con #include "at-func.c" #undef AT_FUNC_NAME #undef AT_FUNC_F1 #undef AT_FUNC_POST_FILE_PARAM_DECLS #undef AT_FUNC_POST_FILE_ARGS #define AT_FUNC_NAME setfileconat #define AT_FUNC_F1 setfilecon #define AT_FUNC_POST_FILE_PARAM_DECLS , char const *con #define AT_FUNC_POST_FILE_ARGS , con #include "at-func.c" #undef AT_FUNC_NAME #undef AT_FUNC_F1 #undef AT_FUNC_POST_FILE_PARAM_DECLS #undef AT_FUNC_POST_FILE_ARGS #define AT_FUNC_NAME lsetfileconat #define AT_FUNC_F1 lsetfilecon #define AT_FUNC_POST_FILE_PARAM_DECLS , char const *con #define AT_FUNC_POST_FILE_ARGS , con #include "at-func.c" #undef AT_FUNC_NAME #undef AT_FUNC_F1 #undef AT_FUNC_POST_FILE_PARAM_DECLS #undef AT_FUNC_POST_FILE_ARGS ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/selinux-at.h������������������������������������������������������������0000664�0000000�0000000�00000005405�14110572173�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Prototypes for openat-style fd-relative SELinux functions Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <selinux/selinux.h> #include <selinux/context.h> /* These are the dir-fd-relative variants of the functions without the "at" suffix. For example, getfileconat (AT_FDCWD, file, &c) is usually equivalent to getfilecon (file, &c). The emulation is accomplished by first attempting getfilecon ("/proc/self/fd/DIR_FD/FILE", &c). Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. */ /* dir-fd-relative getfilecon. Set *CON to the SELinux security context of the file specified by DIR_FD and FILE and return the length of *CON. DIR_FD and FILE are interpreted as for fstatat[*]. A non-NULL *CON must be freed with freecon. Upon error, set *CON to NULL, set errno and return -1. [*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat */ int getfileconat (int dir_fd, char const *file, char **con); /* dir-fd-relative lgetfilecon. This function is just like getfileconat, except when DIR_FD and FILE specify a symlink: lgetfileconat operates on the symlink, while getfileconat operates on the referent of the symlink. */ int lgetfileconat (int dir_fd, char const *file, char **con); /* dir-fd-relative setfilecon. Set the SELinux security context of the file specified by DIR_FD and FILE to CON. DIR_FD and FILE are interpreted as for fstatat[*]. Upon success, return 0. Otherwise, return -1 and set errno. */ int setfileconat (int dir_fd, char const *file, char const *con); /* dir-fd-relative lsetfilecon. This function is just like setfileconat, except that rather than dereferencing a symlink, this function affects it. */ /* dir-fd-relative lsetfilecon. This function is just like setfileconat, except when DIR_FD and FILE specify a symlink: lsetfileconat operates on the symlink, while setfileconat operates on the referent of the symlink. */ int lsetfileconat (int dir_fd, char const *file, char const *con); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/send.c������������������������������������������������������������������0000664�0000000�0000000�00000002421�14110572173�0016141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* send.c --- wrappers for Windows send function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef send ssize_t rpl_send (int fd, const void *buf, size_t len, int flags) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = send (sock, buf, len, flags); if (r < 0) set_winsock_errno (); return r; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sendto.c����������������������������������������������������������������0000664�0000000�0000000�00000002536�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sendto.c --- wrappers for Windows sendto function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef sendto ssize_t rpl_sendto (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = sendto (sock, buf, len, flags, to, tolen); if (r < 0) set_winsock_errno (); return r; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/set-acl.c���������������������������������������������������������������0000664�0000000�0000000�00000003216�14110572173�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* set-acl.c - set access control list equivalent to a mode Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include <errno.h> #include "quote.h" #include "error.h" #include "gettext.h" #define _(msgid) gettext (msgid) /* Set the access control lists of a file. If DESC is a valid file descriptor, use file descriptor operations where available, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. On failure, output a diagnostic, set errno and return -1. */ int set_acl (char const *name, int desc, mode_t mode) { int ret = qset_acl (name, desc, mode); if (ret != 0) error (0, errno, _("setting permissions for %s"), quote (name)); return ret; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/set-permissions.c�������������������������������������������������������0000664�0000000�0000000�00000062261�14110572173�0020364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set permissions of a file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" #if USE_ACL # if ! defined HAVE_ACL_FROM_MODE && defined HAVE_ACL_FROM_TEXT /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ # if HAVE_ACL_GET_FILE && !HAVE_ACL_TYPE_EXTENDED static acl_t acl_from_mode (mode_t mode) { # if HAVE_ACL_FREE_TEXT /* Tru64 */ char acl_text[] = "u::---,g::---,o::---,"; # else /* FreeBSD, IRIX, Cygwin >= 2.5 */ char acl_text[] = "u::---,g::---,o::---"; # endif if (mode & S_IRUSR) acl_text[ 3] = 'r'; if (mode & S_IWUSR) acl_text[ 4] = 'w'; if (mode & S_IXUSR) acl_text[ 5] = 'x'; if (mode & S_IRGRP) acl_text[10] = 'r'; if (mode & S_IWGRP) acl_text[11] = 'w'; if (mode & S_IXGRP) acl_text[12] = 'x'; if (mode & S_IROTH) acl_text[17] = 'r'; if (mode & S_IWOTH) acl_text[18] = 'w'; if (mode & S_IXOTH) acl_text[19] = 'x'; return acl_from_text (acl_text); } # endif # endif # if HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ static int set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) { # ifdef ACE_GETACL /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 file systems (whereas the other ones are used in UFS file systems). */ /* The flags in the ace_t structure changed in a binary incompatible way when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. How to distinguish the two conventions at runtime? We fetch the existing ACL. In the old convention, usually three ACEs have a_flags = ACE_OWNER / ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. In the new convention, these values are not used. */ int convention; { /* Initially, try to read the entries into a stack-allocated buffer. Use malloc if it does not fit. */ enum { alloc_init = 4000 / sizeof (ace_t), /* >= 3 */ alloc_max = MIN (INT_MAX, SIZE_MAX / sizeof (ace_t)) }; ace_t buf[alloc_init]; size_t alloc = alloc_init; ace_t *entries = buf; ace_t *malloced = NULL; int count; for (;;) { count = (desc != -1 ? facl (desc, ACE_GETACL, alloc, entries) : acl (name, ACE_GETACL, alloc, entries)); if (count < 0 && errno == ENOSPC) { /* Increase the size of the buffer. */ free (malloced); if (alloc > alloc_max / 2) { errno = ENOMEM; return -1; } alloc = 2 * alloc; /* <= alloc_max */ entries = malloced = (ace_t *) malloc (alloc * sizeof (ace_t)); if (entries == NULL) { errno = ENOMEM; return -1; } continue; } break; } if (count <= 0) convention = -1; else { int i; convention = 0; for (i = 0; i < count; i++) if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) { convention = 1; break; } } free (malloced); } if (convention >= 0) { ace_t entries[6]; int count; int ret; if (convention) { /* Running on Solaris 10. */ entries[0].a_type = OLD_ALLOW; entries[0].a_flags = OLD_ACE_OWNER; entries[0].a_who = 0; /* irrelevant */ entries[0].a_access_mask = (mode >> 6) & 7; entries[1].a_type = OLD_ALLOW; entries[1].a_flags = OLD_ACE_GROUP; entries[1].a_who = 0; /* irrelevant */ entries[1].a_access_mask = (mode >> 3) & 7; entries[2].a_type = OLD_ALLOW; entries[2].a_flags = OLD_ACE_OTHER; entries[2].a_who = 0; entries[2].a_access_mask = mode & 7; count = 3; } else { /* Running on Solaris 10 (newer version) or Solaris 11. The details here were found through "/bin/ls -lvd somefiles". */ entries[0].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[0].a_flags = NEW_ACE_OWNER; entries[0].a_who = 0; /* irrelevant */ entries[0].a_access_mask = 0; entries[1].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[1].a_flags = NEW_ACE_OWNER; entries[1].a_who = 0; /* irrelevant */ entries[1].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER; if (mode & 0400) entries[1].a_access_mask |= NEW_ACE_READ_DATA; else entries[0].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0200) entries[1].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[0].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0100) entries[1].a_access_mask |= NEW_ACE_EXECUTE; else entries[0].a_access_mask |= NEW_ACE_EXECUTE; entries[2].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[2].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; entries[2].a_who = 0; /* irrelevant */ entries[2].a_access_mask = 0; entries[3].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[3].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; entries[3].a_who = 0; /* irrelevant */ entries[3].a_access_mask = 0; if (mode & 0040) entries[3].a_access_mask |= NEW_ACE_READ_DATA; else entries[2].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0020) entries[3].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[2].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0010) entries[3].a_access_mask |= NEW_ACE_EXECUTE; else entries[2].a_access_mask |= NEW_ACE_EXECUTE; entries[4].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[4].a_flags = NEW_ACE_EVERYONE; entries[4].a_who = 0; entries[4].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER; entries[5].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[5].a_flags = NEW_ACE_EVERYONE; entries[5].a_who = 0; entries[5].a_access_mask = NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE; if (mode & 0004) entries[5].a_access_mask |= NEW_ACE_READ_DATA; else entries[4].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0002) entries[5].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[4].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0001) entries[5].a_access_mask |= NEW_ACE_EXECUTE; else entries[4].a_access_mask |= NEW_ACE_EXECUTE; count = 6; } if (desc != -1) ret = facl (desc, ACE_SETACL, count, entries); else ret = acl (name, ACE_SETACL, count, entries); if (ret < 0 && errno != EINVAL && errno != ENOTSUP) { if (errno == ENOSYS) { *must_chmod = true; return 0; } return -1; } if (ret == 0) return 0; } # endif { aclent_t entries[3]; int ret; entries[0].a_type = USER_OBJ; entries[0].a_id = 0; /* irrelevant */ entries[0].a_perm = (mode >> 6) & 7; entries[1].a_type = GROUP_OBJ; entries[1].a_id = 0; /* irrelevant */ entries[1].a_perm = (mode >> 3) & 7; entries[2].a_type = OTHER_OBJ; entries[2].a_id = 0; entries[2].a_perm = mode & 7; if (desc != -1) ret = facl (desc, SETACL, sizeof (entries) / sizeof (aclent_t), entries); else ret = acl (name, SETACL, sizeof (entries) / sizeof (aclent_t), entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP) { *must_chmod = true; return 0; } return -1; } return 0; } } # elif HAVE_GETACL /* HP-UX */ static int context_acl_from_mode (struct permission_context *ctx, const char *name, int desc) { struct stat statbuf; int ret; if (desc != -1) ret = fstat (desc, &statbuf); else ret = stat (name, &statbuf); if (ret < 0) return -1; ctx->entries[0].uid = statbuf.st_uid; ctx->entries[0].gid = ACL_NSGROUP; ctx->entries[0].mode = (ctx->mode >> 6) & 7; ctx->entries[1].uid = ACL_NSUSER; ctx->entries[1].gid = statbuf.st_gid; ctx->entries[1].mode = (ctx->mode >> 3) & 7; ctx->entries[2].uid = ACL_NSUSER; ctx->entries[2].gid = ACL_NSGROUP; ctx->entries[2].mode = ctx->mode & 7; ctx->count = 3; return 0; } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ static int context_aclv_from_mode (struct permission_context *ctx) { int ret; ctx->aclv_entries[0].a_type = USER_OBJ; ctx->aclv_entries[0].a_id = 0; /* irrelevant */ ctx->aclv_entries[0].a_perm = (ctx->mode >> 6) & 7; ctx->aclv_entries[1].a_type = GROUP_OBJ; ctx->aclv_entries[1].a_id = 0; /* irrelevant */ ctx->aclv_entries[1].a_perm = (ctx->mode >> 3) & 7; ctx->aclv_entries[2].a_type = CLASS_OBJ; ctx->aclv_entries[2].a_id = 0; ctx->aclv_entries[2].a_perm = (ctx->mode >> 3) & 7; ctx->aclv_entries[3].a_type = OTHER_OBJ; ctx->aclv_entries[3].a_id = 0; ctx->aclv_entries[3].a_perm = ctx->mode & 7; ctx->aclv_count = 4; ret = aclsort (ctx->aclv_count, 1, ctx->aclv_entries); if (ret > 0) abort (); return ret; } # endif # elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */ static int set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) { acl_type_list_t types; size_t types_size = sizeof (types); acl_type_t type; if (aclx_gettypes (name, &types, &types_size) < 0 || types.num_entries == 0) { *must_chmod = true; return 0; } /* XXX Do we need to clear all types of ACLs for the given file, or is it sufficient to clear the first one? */ type = types.entries[0]; if (type.u64 == ACL_AIXC) { union { struct acl a; char room[128]; } u; int ret; u.a.acl_len = (char *) &u.a.acl_ext[0] - (char *) &u.a; /* no entries */ u.a.acl_mode = mode & ~(S_IXACL | 0777); u.a.u_access = (mode >> 6) & 7; u.a.g_access = (mode >> 3) & 7; u.a.o_access = mode & 7; if (desc != -1) ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.acl_len, mode); else ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.acl_len, mode); if (!(ret < 0 && errno == ENOSYS)) return ret; } else if (type.u64 == ACL_NFS4) { union { nfs4_acl_int_t a; char room[128]; } u; nfs4_ace_int_t *ace; int ret; u.a.aclVersion = NFS4_ACL_INT_STRUCT_VERSION; u.a.aclEntryN = 0; ace = &u.a.aclEntry[0]; { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_OWNER; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0400 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0200 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0100 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_GROUP; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0040 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0020 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0010 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_EVERYONE; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0004 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0002 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0001 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } u.a.aclLength = (char *) ace - (char *) &u.a; if (desc != -1) ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.aclLength, mode); else ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.aclLength, mode); if (!(ret < 0 && errno == ENOSYS)) return ret; } *must_chmod = true; return 0; } # elif HAVE_STATACL /* older AIX */ static int context_acl_from_mode (struct permission_context *ctx) { ctx->u.a.acl_len = (char *) &ctx->u.a.acl_ext[0] - (char *) &ctx->u.a; /* no entries */ ctx->u.a.acl_mode = ctx->mode & ~(S_IXACL | 0777); ctx->u.a.u_access = (ctx->mode >> 6) & 7; ctx->u.a.g_access = (ctx->mode >> 3) & 7; ctx->u.a.o_access = ctx->mode & 7; ctx->have_u = true; return 0; } # elif HAVE_ACLSORT /* NonStop Kernel */ static int context_acl_from_mode (struct permission_context *ctx) { int ret; ctx->entries[0].a_type = USER_OBJ; ctx->entries[0].a_id = 0; /* irrelevant */ ctx->entries[0].a_perm = (ctx->mode >> 6) & 7; ctx->entries[1].a_type = GROUP_OBJ; ctx->entries[1].a_id = 0; /* irrelevant */ ctx->entries[1].a_perm = (ctx->mode >> 3) & 7; ctx->entries[2].a_type = CLASS_OBJ; ctx->entries[2].a_id = 0; ctx->entries[2].a_perm = (ctx->mode >> 3) & 7; ctx->entries[3].a_type = OTHER_OBJ; ctx->entries[3].a_id = 0; ctx->entries[3].a_perm = ctx->mode & 7; ctx->count = 4; ret = aclsort (ctx->count, 1, entries); if (ret > 0) abort (); return ret; } # endif static int set_acls (struct permission_context *ctx, const char *name, int desc, int from_mode, bool *must_chmod, bool *acls_set) { int ret = 0; # if HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ # ifndef HAVE_ACL_FROM_TEXT # error Must have acl_from_text (see POSIX 1003.1e draft 17). # endif # ifndef HAVE_ACL_DELETE_DEF_FILE # error Must have acl_delete_def_file (see POSIX 1003.1e draft 17). # endif if (! ctx->acls_not_supported) { if (ret == 0 && from_mode) { if (ctx->acl) acl_free (ctx->acl); ctx->acl = acl_from_mode (ctx->mode); if (ctx->acl == NULL) ret = -1; } if (ret == 0 && ctx->acl) { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, ctx->acl); else ret = acl_set_file (name, ACL_TYPE_ACCESS, ctx->acl); if (ret != 0) { if (! acl_errno_valid (errno)) { ctx->acls_not_supported = true; if (from_mode || acl_access_nontrivial (ctx->acl) == 0) ret = 0; } } else { *acls_set = true; if (S_ISDIR(ctx->mode)) { if (! from_mode && ctx->default_acl && acl_default_nontrivial (ctx->default_acl)) ret = acl_set_file (name, ACL_TYPE_DEFAULT, ctx->default_acl); else ret = acl_delete_def_file (name); } } } } # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ /* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs (for example, zfs). */ /* TODO: Implement setting ACLs once get_permissions() reads them. */ # endif # else /* HAVE_ACL_TYPE_EXTENDED */ /* Mac OS X */ /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) always return NULL / EINVAL. You have to use acl_get_file (name, ACL_TYPE_EXTENDED) or acl_get_fd (open (name, ...)) to retrieve an ACL. On the other hand, acl_set_file (name, ACL_TYPE_ACCESS, acl) and acl_set_file (name, ACL_TYPE_DEFAULT, acl) have the same effect as acl_set_file (name, ACL_TYPE_EXTENDED, acl): Each of these calls sets the file's ACL. */ if (ctx->acl == NULL) { acl_t acl; /* Remove ACLs if the file has ACLs. */ if (HAVE_ACL_GET_FD && desc != -1) acl = acl_get_fd (desc); else acl = acl_get_file (name, ACL_TYPE_EXTENDED); if (acl) { acl_free (acl); acl = acl_init (0); if (acl) { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, acl); else ret = acl_set_file (name, ACL_TYPE_EXTENDED, acl); acl_free (acl); } else ret = -1; } } else { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, ctx->acl); else ret = acl_set_file (name, ACL_TYPE_EXTENDED, ctx->acl); if (ret != 0) { if (! acl_errno_valid (errno) && ! acl_extended_nontrivial (ctx->acl)) ret = 0; } } *acls_set = true; # endif # elif defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions of Unixware. The acl() call returns the access and default ACL both at once. */ /* If both ace_entries and entries are available, try SETACL before ACE_SETACL, because SETACL cannot fail with ENOTSUP whereas ACE_SETACL can. */ if (from_mode) return set_acls_from_mode (name, desc, ctx->mode, must_chmod); if (ret == 0 && ctx->count) { if (desc != -1) ret = facl (desc, SETACL, ctx->count, ctx->entries); else ret = acl (name, SETACL, ctx->count, ctx->entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) && acl_nontrivial (ctx->count, ctx->entries) == 0) ret = 0; } else *acls_set = true; } # ifdef ACE_GETACL if (ret == 0 && ctx->ace_count) { if (desc != -1) ret = facl (desc, ACE_SETACL, ctx->ace_count, ctx->ace_entries); else ret = acl (name, ACE_SETACL, ctx->ace_count, ctx->ace_entries); if (ret < 0) { if ((errno == ENOSYS || errno == EINVAL || errno == ENOTSUP) && acl_ace_nontrivial (ctx->ace_count, ctx->ace_entries) == 0) ret = 0; } else *acls_set = true; } # endif # elif HAVE_GETACL /* HP-UX */ if (from_mode) ret = context_acl_from_mode (ctx, name, desc); if (ret == 0 && ctx->count > 0) { if (desc != -1) ret = fsetacl (desc, ctx->count, ctx->entries); else ret = setacl (name, ctx->count, ctx->entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) && (from_mode || !acl_nontrivial (ctx->count, ctx->entries))) ret = 0; } else *acls_set = true; } # if HAVE_ACLV_H if (from_mode) ret = context_aclv_from_mode (ctx); if (ret == 0 && ctx->aclv_count > 0) { ret = acl ((char *) name, ACL_SET, ctx->aclv_count, ctx->aclv_entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) && (from_mode || !aclv_nontrivial (ctx->aclv_count, ctx->aclv_entries))) ret = 0; } else *acls_set = true; } # endif # elif HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ /* TODO: Implement setting ACLs once get_permissions() reads them. */ if (from_mode) ret = set_acls_from_mode (name, desc, mode, must_chmod); # elif HAVE_STATACL /* older AIX */ if (from_mode) ret = context_acl_from_mode (ctx); if (ret == 0 && ctx->have_u) { if (desc != -1) ret = fchacl (desc, &ctx->u.a, ctx->u.a.acl_len); else ret = chacl ((char *) name, &ctx->u.a, ctx->u.a.acl_len); if (ret < 0) { if (errno == ENOSYS && from_mode) ret = 0; } else *acls_set = true; } # elif HAVE_ACLSORT /* NonStop Kernel */ if (from_mode) ret = context_acl_from_mode (ctx); if (ret == 0 && ctx->count) { ret = acl ((char *) name, ACL_SET, ctx->count, ctx->entries); if (ret != 0) { if (!acl_nontrivial (ctx->count, ctx->entries)) ret = 0; } else *acls_set = true; } # else /* No ACLs */ /* Nothing to do. */ # endif return ret; } #endif /* If DESC is a valid file descriptor use fchmod to change the file's mode to MODE on systems that have fchmod. On systems that don't have fchmod and if DESC is invalid, use chmod on NAME instead. Return 0 if successful. Return -1 and set errno upon failure. */ int chmod_or_fchmod (const char *name, int desc, mode_t mode) { if (HAVE_FCHMOD && desc != -1) return fchmod (desc, mode); else return chmod (name, mode); } /* Set the permissions in CTX on a file. If DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to the mode in CTX. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from the mode in CTX if any are set. Return 0 if successful. Return -1 and set errno upon failure. */ int set_permissions (struct permission_context *ctx, const char *name, int desc) { _GL_UNUSED bool acls_set = false; bool early_chmod; bool must_chmod = false; int ret = 0; #if USE_ACL # if HAVE_STATACL /* older AIX */ /* There is no need to call chmod_or_fchmod, since the mode bits S_ISUID, S_ISGID, S_ISVTX are also stored in the ACL. */ early_chmod = false; # else /* All other platforms */ /* On Cygwin, it is necessary to call chmod before acl, because chmod can change the contents of the ACL (in ways that don't change the allowed accesses, but still visible). */ early_chmod = (! MODE_INSIDE_ACL || (ctx->mode & (S_ISUID | S_ISGID | S_ISVTX))); # endif #else /* No ACLs */ early_chmod = true; #endif if (early_chmod) { ret = chmod_or_fchmod (name, desc, ctx->mode); if (ret != 0) return -1; } #if USE_ACL ret = set_acls (ctx, name, desc, false, &must_chmod, &acls_set); if (! acls_set) { int saved_errno = ret ? errno : 0; /* If we can't set an acl which we expect to be able to set, try setting the permissions to ctx->mode. Due to possible inherited permissions, we cannot simply chmod. */ ret = set_acls (ctx, name, desc, true, &must_chmod, &acls_set); if (! acls_set) must_chmod = true; if (saved_errno) { errno = saved_errno; ret = -1; } } #endif if (must_chmod && ! early_chmod) { int saved_errno = ret ? errno : 0; ret = chmod_or_fchmod (name, desc, ctx->mode); if (saved_errno) { errno = saved_errno; ret = -1; } } return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/setenv.c����������������������������������������������������������������0000664�0000000�0000000�00000025077�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2003, 2005-2021 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/>. */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif #include <alloca.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #if _LIBC || HAVE_UNISTD_H # include <unistd.h> #endif #if !_LIBC # include "malloca.h" #endif #if _LIBC || !HAVE_SETENV #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define setenv __setenv # define clearenv __clearenv # define tfind __tfind # define tsearch __tsearch #endif /* In the GNU C library implementation we try to be more clever and allow arbitrarily many changes of the environment given that the used values are from a small set. Outside glibc this will eat up all memory after a while. */ #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ && (defined __GNUC__ || defined __clang__)) # define USE_TSEARCH 1 # include <search.h> typedef int (*compar_fn_t) (const void *, const void *); /* This is a pointer to the root of the search tree with the known values. */ static void *known_values; # define KNOWN_VALUE(Str) \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ }) # define STORE_VALUE(Str) \ tsearch (Str, &known_values, (compar_fn_t) strcmp) #else # undef USE_TSEARCH # define KNOWN_VALUE(Str) NULL # define STORE_VALUE(Str) do { } while (0) #endif /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; /* This function is used by 'setenv' and 'putenv'. The difference between the two functions is that for the former must create a new string which is then placed in the environment, while the argument of 'putenv' must be used directly. This is all complicated by the fact that we try to reuse values once generated for a 'setenv' call since we can never free the strings. */ int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { char **ep; size_t size; const size_t namelen = strlen (name); const size_t vallen = value != NULL ? strlen (value) + 1 : 0; LOCK; /* We have to get the pointer now that we have the lock and not earlier since another thread might have created a new environment. */ ep = __environ; size = 0; if (ep != NULL) { for (; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (ep == NULL || *ep == NULL) { char **new_environ; #ifdef USE_TSEARCH char *new_value; #endif /* We allocated this space; we can extend it. */ new_environ = (char **) (last_environ == NULL ? malloc ((size + 2) * sizeof (char *)) : realloc (last_environ, (size + 2) * sizeof (char *))); if (new_environ == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' and 'realloc-posix' gnulib modules. */ __set_errno (ENOMEM); UNLOCK; return -1; } /* If the whole entry is given add it. */ if (combined != NULL) /* We must not add the string to the search tree since it belongs to the user. */ new_environ[size] = (char *) combined; else { /* See whether the value is already known. */ #ifdef USE_TSEARCH # ifdef _LIBC new_value = (char *) alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = (char *) malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif new_environ[size] = KNOWN_VALUE (new_value); if (new_environ[size] == NULL) #endif { new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (new_environ[size], new_value, namelen + 1 + vallen); #else memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); #endif /* And save the value now. We cannot do this when we remove the string since then we cannot decide whether it is a user string or not. */ STORE_VALUE (new_environ[size]); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { char *np; /* Use the user string if given. */ if (combined != NULL) np = (char *) combined; else { #ifdef USE_TSEARCH char *new_value; # ifdef _LIBC new_value = alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif np = KNOWN_VALUE (new_value); if (np == NULL) #endif { np = (char *) malloc (namelen + 1 + vallen); if (np == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (np, new_value, namelen + 1 + vallen); #else memcpy (np, name, namelen); np[namelen] = '='; memcpy (&np[namelen + 1], value, vallen); #endif /* And remember the value. */ STORE_VALUE (np); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } *ep = np; } UNLOCK; return 0; } int setenv (const char *name, const char *value, int replace) { if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } return __add_to_environ (name, value, NULL, replace); } /* The 'clearenv' was planned to be added to POSIX.1 but probably never made it. Nevertheless the POSIX.9 standard (POSIX bindings for Fortran 77) requires this function. */ int clearenv (void) { LOCK; if (__environ == last_environ && __environ != NULL) { /* We allocated this environment so we can free it. */ free (__environ); last_environ = NULL; } /* Clear the environment pointer removes the whole environment. */ __environ = NULL; UNLOCK; return 0; } #ifdef _LIBC static void free_mem (void) { /* Remove all traces. */ clearenv (); /* Now remove the search tree. */ __tdestroy (known_values, free); known_values = NULL; } text_set_element (__libc_subfreeres, free_mem); # undef setenv # undef clearenv weak_alias (__setenv, setenv) weak_alias (__clearenv, clearenv) #endif #endif /* _LIBC || !HAVE_SETENV */ /* The rest of this file is called into use when replacing an existing but buggy setenv. Known bugs include failure to diagnose invalid name, and consuming a leading '=' from value. */ #if HAVE_SETENV # undef setenv # if !HAVE_DECL_SETENV extern int setenv (const char *, const char *, int); # endif # define STREQ(a, b) (strcmp (a, b) == 0) int rpl_setenv (const char *name, const char *value, int replace) { int result; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } /* Call the real setenv even if replace is 0, in case implementation has underlying data to update, such as when environ changes. */ result = setenv (name, value, replace); if (result == 0 && replace && *value == '=') { char *tmp = getenv (name); if (!STREQ (tmp, value)) { int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); result = setenv (name, tmp, replace); saved_errno = errno; freea (tmp); errno = saved_errno; } } return result; } #endif /* HAVE_SETENV */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sethostname.c�����������������������������������������������������������0000664�0000000�0000000�00000010646�14110572173�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sethostname emulation for glibc compliance. Copyright (C) 2011-2021 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/>. */ /* Ben Walton <bwalton@artsci.utoronto.ca> */ #include <config.h> #if !(defined _WIN32 || defined __CYGWIN__) /* Unix API. */ /* Specification. */ # include <unistd.h> # include <errno.h> # include <stdio.h> # include <limits.h> /* Set up to LEN chars of NAME as system hostname. Return 0 if ok, set errno and return -1 on error. */ int sethostname (const char *name, size_t len) { /* Ensure the string isn't too long. glibc does allow setting an empty hostname so no point in enforcing a lower bound. */ if (len > HOST_NAME_MAX) { errno = EINVAL; return -1; } # ifdef __minix /* Minix */ { FILE *hostf; int r = 0; /* glibc returns EFAULT, EINVAL, and EPERM on error. None of these are appropriate for us to set, even if they may match the situation, during failed open/write/close operations, so we leave errno alone and rely on what the system sets up. */ hostf = fopen ("/etc/hostname.file", "we"); if (hostf == NULL) r = -1; else { fprintf (hostf, "%.*s\n", (int) len, name); if (ferror (hostf)) { /* Close hostf, preserving the errno from the fprintf call. */ int saved_errno = errno; fclose (hostf); errno = saved_errno; r = -1; } else { if (fclose (hostf)) /* fclose sets errno on failure. */ r = -1; } } return r; } # else /* For platforms that we don't have a better option for, simply bail out. */ errno = ENOSYS; return -1; # endif } #else /* Native Windows API. Also used on Cygwin. */ /* Ensure that <windows.h> declares SetComputerNameEx. */ # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN2K) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN2K # endif # define WIN32_LEAN_AND_MEAN /* Specification. */ # include <unistd.h> # include <errno.h> # include <limits.h> # include <string.h> # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef GetComputerNameEx # define GetComputerNameEx GetComputerNameExA # undef SetComputerNameEx # define SetComputerNameEx SetComputerNameExA /* Set up to LEN chars of NAME as system hostname. Return 0 if ok, set errno and return -1 on error. */ int sethostname (const char *name, size_t len) { char name_asciz[HOST_NAME_MAX + 1]; char old_name[HOST_NAME_MAX + 1]; DWORD old_name_len; /* Ensure the string isn't too long. glibc does allow setting an empty hostname so no point in enforcing a lower bound. */ if (len > HOST_NAME_MAX) { errno = EINVAL; return -1; } /* Prepare a NUL-terminated copy of name. */ memcpy (name_asciz, name, len); name_asciz[len] = '\0'; /* Save the old NetBIOS name. */ old_name_len = sizeof (old_name) - 1; if (! GetComputerNameEx (ComputerNamePhysicalNetBIOS, old_name, &old_name_len)) old_name_len = 0; /* Set both the NetBIOS and the first part of the IP / DNS name. */ if (! SetComputerNameEx (ComputerNamePhysicalNetBIOS, name_asciz)) { errno = (GetLastError () == ERROR_ACCESS_DENIED ? EPERM : EINVAL); return -1; } if (! SetComputerNameEx (ComputerNamePhysicalDnsHostname, name_asciz)) { errno = (GetLastError () == ERROR_ACCESS_DENIED ? EPERM : EINVAL); /* Restore the old NetBIOS name. */ if (old_name_len > 0) { old_name[old_name_len] = '\0'; SetComputerNameEx (ComputerNamePhysicalNetBIOS, old_name); } return -1; } /* Note that the new host name becomes effective only after a reboot! */ return 0; } #endif ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/setlocale-lock.c��������������������������������������������������������0000664�0000000�0000000�00000010530�14110572173�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by setlocale_null_r. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* When it is known that the gl_get_setlocale_null_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_SETLOCALE_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by setlocale_null_r. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by setlocale_null_r. */ CRITICAL_SECTION * gl_get_setlocale_null_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ pthread_mutex_t * gl_get_setlocale_null_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ mtx_t * gl_get_setlocale_null_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/setlocale.c�������������������������������������������������������������0000664�0000000�0000000�00000162670�14110572173�0017200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the current locale. -*- coding: utf-8 -*- Copyright (C) 2009, 2011-2021 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>, 2009. */ #include <config.h> /* Override setlocale() so that when the default locale is requested (locale = ""), the environment variables LC_ALL, LC_*, and LANG are considered. Also include all the functionality from libintl's setlocale() override. */ /* Please keep this file in sync with gettext/gettext-runtime/intl/setlocale.c ! */ /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "localename.h" #if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES # include <CoreFoundation/CFLocale.h> # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFPreferences.h> # endif # include <CoreFoundation/CFPropertyList.h> # include <CoreFoundation/CFArray.h> # include <CoreFoundation/CFString.h> extern void gl_locale_name_canonicalize (char *name); #endif #if 1 # undef setlocale /* Which of the replacements to activate? */ # if NEED_SETLOCALE_IMPROVED # define setlocale_improved rpl_setlocale # elif NEED_SETLOCALE_MTSAFE # define setlocale_mtsafe rpl_setlocale # else # error "This file should only be compiled if NEED_SETLOCALE_IMPROVED || NEED_SETLOCALE_MTSAFE." # endif /* Like setlocale, but guaranteed to be multithread-safe if LOCALE == NULL. */ # if !SETLOCALE_NULL_ALL_MTSAFE || !SETLOCALE_NULL_ONE_MTSAFE /* i.e. if NEED_SETLOCALE_MTSAFE */ # if NEED_SETLOCALE_IMPROVED static # endif char * setlocale_mtsafe (int category, const char *locale) { if (locale == NULL) return (char *) setlocale_null (category); else return setlocale (category, locale); } # else /* !NEED_SETLOCALE_MTSAFE */ # define setlocale_mtsafe setlocale # endif /* NEED_SETLOCALE_MTSAFE */ # if NEED_SETLOCALE_IMPROVED /* Return string representation of locale category CATEGORY. */ static const char * category_to_name (int category) { const char *retval; switch (category) { case LC_COLLATE: retval = "LC_COLLATE"; break; case LC_CTYPE: retval = "LC_CTYPE"; break; case LC_MONETARY: retval = "LC_MONETARY"; break; case LC_NUMERIC: retval = "LC_NUMERIC"; break; case LC_TIME: retval = "LC_TIME"; break; case LC_MESSAGES: retval = "LC_MESSAGES"; break; default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } # if defined _WIN32 && ! defined __CYGWIN__ /* The native Windows setlocale() function expects locale names of the form "German" or "German_Germany" or "DEU", but not "de" or "de_DE". We need to convert the names from the form with ISO 639 language code and ISO 3166 country code to the form with English names or with three-letter identifier. The three-letter identifiers known by a Windows XP SP2 or SP3 are: AFK Afrikaans_South Africa.1252 ARA Arabic_Saudi Arabia.1256 ARB Arabic_Lebanon.1256 ARE Arabic_Egypt.1256 ARG Arabic_Algeria.1256 ARH Arabic_Bahrain.1256 ARI Arabic_Iraq.1256 ARJ Arabic_Jordan.1256 ARK Arabic_Kuwait.1256 ARL Arabic_Libya.1256 ARM Arabic_Morocco.1256 ARO Arabic_Oman.1256 ARQ Arabic_Qatar.1256 ARS Arabic_Syria.1256 ART Arabic_Tunisia.1256 ARU Arabic_U.A.E..1256 ARY Arabic_Yemen.1256 AZE Azeri (Latin)_Azerbaijan.1254 BEL Belarusian_Belarus.1251 BGR Bulgarian_Bulgaria.1251 BSB Bosnian_Bosnia and Herzegovina.1250 BSC Bosnian (Cyrillic)_Bosnia and Herzegovina.1250 (wrong encoding!) CAT Catalan_Spain.1252 CHH Chinese_Hong Kong S.A.R..950 CHI Chinese_Singapore.936 CHS Chinese_People's Republic of China.936 CHT Chinese_Taiwan.950 CSY Czech_Czech Republic.1250 CYM Welsh_United Kingdom.1252 DAN Danish_Denmark.1252 DEA German_Austria.1252 DEC German_Liechtenstein.1252 DEL German_Luxembourg.1252 DES German_Switzerland.1252 DEU German_Germany.1252 ELL Greek_Greece.1253 ENA English_Australia.1252 ENB English_Caribbean.1252 ENC English_Canada.1252 ENG English_United Kingdom.1252 ENI English_Ireland.1252 ENJ English_Jamaica.1252 ENL English_Belize.1252 ENP English_Republic of the Philippines.1252 ENS English_South Africa.1252 ENT English_Trinidad and Tobago.1252 ENU English_United States.1252 ENW English_Zimbabwe.1252 ENZ English_New Zealand.1252 ESA Spanish_Panama.1252 ESB Spanish_Bolivia.1252 ESC Spanish_Costa Rica.1252 ESD Spanish_Dominican Republic.1252 ESE Spanish_El Salvador.1252 ESF Spanish_Ecuador.1252 ESG Spanish_Guatemala.1252 ESH Spanish_Honduras.1252 ESI Spanish_Nicaragua.1252 ESL Spanish_Chile.1252 ESM Spanish_Mexico.1252 ESN Spanish_Spain.1252 ESO Spanish_Colombia.1252 ESP Spanish_Spain.1252 ESR Spanish_Peru.1252 ESS Spanish_Argentina.1252 ESU Spanish_Puerto Rico.1252 ESV Spanish_Venezuela.1252 ESY Spanish_Uruguay.1252 ESZ Spanish_Paraguay.1252 ETI Estonian_Estonia.1257 EUQ Basque_Spain.1252 FAR Farsi_Iran.1256 FIN Finnish_Finland.1252 FOS Faroese_Faroe Islands.1252 FPO Filipino_Philippines.1252 FRA French_France.1252 FRB French_Belgium.1252 FRC French_Canada.1252 FRL French_Luxembourg.1252 FRM French_Principality of Monaco.1252 FRS French_Switzerland.1252 FYN Frisian_Netherlands.1252 GLC Galician_Spain.1252 HEB Hebrew_Israel.1255 HRB Croatian_Bosnia and Herzegovina.1250 HRV Croatian_Croatia.1250 HUN Hungarian_Hungary.1250 IND Indonesian_Indonesia.1252 IRE Irish_Ireland.1252 ISL Icelandic_Iceland.1252 ITA Italian_Italy.1252 ITS Italian_Switzerland.1252 IUK Inuktitut (Latin)_Canada.1252 JPN Japanese_Japan.932 KKZ Kazakh_Kazakhstan.1251 KOR Korean_Korea.949 KYR Kyrgyz_Kyrgyzstan.1251 LBX Luxembourgish_Luxembourg.1252 LTH Lithuanian_Lithuania.1257 LVI Latvian_Latvia.1257 MKI FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251 MON Mongolian_Mongolia.1251 MPD Mapudungun_Chile.1252 MSB Malay_Brunei Darussalam.1252 MSL Malay_Malaysia.1252 MWK Mohawk_Canada.1252 NLB Dutch_Belgium.1252 NLD Dutch_Netherlands.1252 NON Norwegian-Nynorsk_Norway.1252 NOR Norwegian (Bokmål)_Norway.1252 NSO Northern Sotho_South Africa.1252 PLK Polish_Poland.1250 PTB Portuguese_Brazil.1252 PTG Portuguese_Portugal.1252 QUB Quechua_Bolivia.1252 QUE Quechua_Ecuador.1252 QUP Quechua_Peru.1252 RMC Romansh_Switzerland.1252 ROM Romanian_Romania.1250 RUS Russian_Russia.1251 SKY Slovak_Slovakia.1250 SLV Slovenian_Slovenia.1250 SMA Sami (Southern)_Norway.1252 SMB Sami (Southern)_Sweden.1252 SME Sami (Northern)_Norway.1252 SMF Sami (Northern)_Sweden.1252 SMG Sami (Northern)_Finland.1252 SMJ Sami (Lule)_Norway.1252 SMK Sami (Lule)_Sweden.1252 SMN Sami (Inari)_Finland.1252 SMS Sami (Skolt)_Finland.1252 SQI Albanian_Albania.1250 SRB Serbian (Cyrillic)_Serbia and Montenegro.1251 SRL Serbian (Latin)_Serbia and Montenegro.1250 SRN Serbian (Cyrillic)_Bosnia and Herzegovina.1251 SRS Serbian (Latin)_Bosnia and Herzegovina.1250 SVE Swedish_Sweden.1252 SVF Swedish_Finland.1252 SWK Swahili_Kenya.1252 THA Thai_Thailand.874 TRK Turkish_Turkey.1254 TSN Tswana_South Africa.1252 TTT Tatar_Russia.1251 UKR Ukrainian_Ukraine.1251 URD Urdu_Islamic Republic of Pakistan.1256 USA English_United States.1252 UZB Uzbek (Latin)_Uzbekistan.1254 VIT Vietnamese_Viet Nam.1258 XHO Xhosa_South Africa.1252 ZHH Chinese_Hong Kong S.A.R..950 ZHI Chinese_Singapore.936 ZHM Chinese_Macau S.A.R..950 ZUL Zulu_South Africa.1252 */ /* Table from ISO 639 language code, optionally with country or script suffix, to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ struct table_entry { const char *code; const char *english; }; static const struct table_entry language_table[] = { { "af", "Afrikaans" }, { "am", "Amharic" }, { "ar", "Arabic" }, { "arn", "Mapudungun" }, { "as", "Assamese" }, { "az@cyrillic", "Azeri (Cyrillic)" }, { "az@latin", "Azeri (Latin)" }, { "ba", "Bashkir" }, { "be", "Belarusian" }, { "ber", "Tamazight" }, { "ber@arabic", "Tamazight (Arabic)" }, { "ber@latin", "Tamazight (Latin)" }, { "bg", "Bulgarian" }, { "bin", "Edo" }, { "bn", "Bengali" }, { "bn_BD", "Bengali (Bangladesh)" }, { "bn_IN", "Bengali (India)" }, { "bnt", "Sutu" }, { "bo", "Tibetan" }, { "br", "Breton" }, { "bs", "BSB" }, /* "Bosnian (Latin)" */ { "bs@cyrillic", "BSC" }, /* Bosnian (Cyrillic) */ { "ca", "Catalan" }, { "chr", "Cherokee" }, { "co", "Corsican" }, { "cpe", "Hawaiian" }, { "cs", "Czech" }, { "cy", "Welsh" }, { "da", "Danish" }, { "de", "German" }, { "dsb", "Lower Sorbian" }, { "dv", "Divehi" }, { "el", "Greek" }, { "en", "English" }, { "es", "Spanish" }, { "et", "Estonian" }, { "eu", "Basque" }, { "fa", "Farsi" }, { "ff", "Fulfulde" }, { "fi", "Finnish" }, { "fo", "Faroese" }, /* "Faeroese" does not work */ { "fr", "French" }, { "fy", "Frisian" }, { "ga", "IRE" }, /* Gaelic (Ireland) */ { "gd", "Gaelic (Scotland)" }, { "gd", "Scottish Gaelic" }, { "gl", "Galician" }, { "gn", "Guarani" }, { "gsw", "Alsatian" }, { "gu", "Gujarati" }, { "ha", "Hausa" }, { "he", "Hebrew" }, { "hi", "Hindi" }, { "hr", "Croatian" }, { "hsb", "Upper Sorbian" }, { "hu", "Hungarian" }, { "hy", "Armenian" }, { "id", "Indonesian" }, { "ig", "Igbo" }, { "ii", "Yi" }, { "is", "Icelandic" }, { "it", "Italian" }, { "iu", "IUK" }, /* Inuktitut */ { "ja", "Japanese" }, { "ka", "Georgian" }, { "kk", "Kazakh" }, { "kl", "Greenlandic" }, { "km", "Cambodian" }, { "km", "Khmer" }, { "kn", "Kannada" }, { "ko", "Korean" }, { "kok", "Konkani" }, { "kr", "Kanuri" }, { "ks", "Kashmiri" }, { "ks_IN", "Kashmiri_India" }, { "ks_PK", "Kashmiri (Arabic)_Pakistan" }, { "ky", "Kyrgyz" }, { "la", "Latin" }, { "lb", "Luxembourgish" }, { "lo", "Lao" }, { "lt", "Lithuanian" }, { "lv", "Latvian" }, { "mi", "Maori" }, { "mk", "FYRO Macedonian" }, { "mk", "Macedonian" }, { "ml", "Malayalam" }, { "mn", "Mongolian" }, { "mni", "Manipuri" }, { "moh", "Mohawk" }, { "mr", "Marathi" }, { "ms", "Malay" }, { "mt", "Maltese" }, { "my", "Burmese" }, { "nb", "NOR" }, /* Norwegian Bokmål */ { "ne", "Nepali" }, { "nic", "Ibibio" }, { "nl", "Dutch" }, { "nn", "NON" }, /* Norwegian Nynorsk */ { "no", "Norwegian" }, { "nso", "Northern Sotho" }, { "nso", "Sepedi" }, { "oc", "Occitan" }, { "om", "Oromo" }, { "or", "Oriya" }, { "pa", "Punjabi" }, { "pap", "Papiamentu" }, { "pl", "Polish" }, { "prs", "Dari" }, { "ps", "Pashto" }, { "pt", "Portuguese" }, { "qu", "Quechua" }, { "qut", "K'iche'" }, { "rm", "Romansh" }, { "ro", "Romanian" }, { "ru", "Russian" }, { "rw", "Kinyarwanda" }, { "sa", "Sanskrit" }, { "sah", "Yakut" }, { "sd", "Sindhi" }, { "se", "Sami (Northern)" }, { "se", "Northern Sami" }, { "si", "Sinhalese" }, { "sk", "Slovak" }, { "sl", "Slovenian" }, { "sma", "Sami (Southern)" }, { "sma", "Southern Sami" }, { "smj", "Sami (Lule)" }, { "smj", "Lule Sami" }, { "smn", "Sami (Inari)" }, { "smn", "Inari Sami" }, { "sms", "Sami (Skolt)" }, { "sms", "Skolt Sami" }, { "so", "Somali" }, { "sq", "Albanian" }, { "sr", "Serbian (Latin)" }, { "sr@cyrillic", "SRB" }, /* Serbian (Cyrillic) */ { "sv", "Swedish" }, { "sw", "Swahili" }, { "syr", "Syriac" }, { "ta", "Tamil" }, { "te", "Telugu" }, { "tg", "Tajik" }, { "th", "Thai" }, { "ti", "Tigrinya" }, { "tk", "Turkmen" }, { "tl", "Filipino" }, { "tn", "Tswana" }, { "tr", "Turkish" }, { "ts", "Tsonga" }, { "tt", "Tatar" }, { "ug", "Uighur" }, { "uk", "Ukrainian" }, { "ur", "Urdu" }, { "uz", "Uzbek" }, { "uz", "Uzbek (Latin)" }, { "uz@cyrillic", "Uzbek (Cyrillic)" }, { "ve", "Venda" }, { "vi", "Vietnamese" }, { "wen", "Sorbian" }, { "wo", "Wolof" }, { "xh", "Xhosa" }, { "yi", "Yiddish" }, { "yo", "Yoruba" }, { "zh", "Chinese" }, { "zu", "Zulu" } }; /* Table from ISO 3166 country code to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ static const struct table_entry country_table[] = { { "AE", "U.A.E." }, { "AF", "Afghanistan" }, { "AL", "Albania" }, { "AM", "Armenia" }, { "AN", "Netherlands Antilles" }, { "AR", "Argentina" }, { "AT", "Austria" }, { "AU", "Australia" }, { "AZ", "Azerbaijan" }, { "BA", "Bosnia and Herzegovina" }, { "BD", "Bangladesh" }, { "BE", "Belgium" }, { "BG", "Bulgaria" }, { "BH", "Bahrain" }, { "BN", "Brunei Darussalam" }, { "BO", "Bolivia" }, { "BR", "Brazil" }, { "BT", "Bhutan" }, { "BY", "Belarus" }, { "BZ", "Belize" }, { "CA", "Canada" }, { "CG", "Congo" }, { "CH", "Switzerland" }, { "CI", "Cote d'Ivoire" }, { "CL", "Chile" }, { "CM", "Cameroon" }, { "CN", "People's Republic of China" }, { "CO", "Colombia" }, { "CR", "Costa Rica" }, { "CS", "Serbia and Montenegro" }, { "CZ", "Czech Republic" }, { "DE", "Germany" }, { "DK", "Denmark" }, { "DO", "Dominican Republic" }, { "DZ", "Algeria" }, { "EC", "Ecuador" }, { "EE", "Estonia" }, { "EG", "Egypt" }, { "ER", "Eritrea" }, { "ES", "Spain" }, { "ET", "Ethiopia" }, { "FI", "Finland" }, { "FO", "Faroe Islands" }, { "FR", "France" }, { "GB", "United Kingdom" }, { "GD", "Caribbean" }, { "GE", "Georgia" }, { "GL", "Greenland" }, { "GR", "Greece" }, { "GT", "Guatemala" }, { "HK", "Hong Kong" }, { "HK", "Hong Kong S.A.R." }, { "HN", "Honduras" }, { "HR", "Croatia" }, { "HT", "Haiti" }, { "HU", "Hungary" }, { "ID", "Indonesia" }, { "IE", "Ireland" }, { "IL", "Israel" }, { "IN", "India" }, { "IQ", "Iraq" }, { "IR", "Iran" }, { "IS", "Iceland" }, { "IT", "Italy" }, { "JM", "Jamaica" }, { "JO", "Jordan" }, { "JP", "Japan" }, { "KE", "Kenya" }, { "KG", "Kyrgyzstan" }, { "KH", "Cambodia" }, { "KR", "South Korea" }, { "KW", "Kuwait" }, { "KZ", "Kazakhstan" }, { "LA", "Laos" }, { "LB", "Lebanon" }, { "LI", "Liechtenstein" }, { "LK", "Sri Lanka" }, { "LT", "Lithuania" }, { "LU", "Luxembourg" }, { "LV", "Latvia" }, { "LY", "Libya" }, { "MA", "Morocco" }, { "MC", "Principality of Monaco" }, { "MD", "Moldava" }, { "MD", "Moldova" }, { "ME", "Montenegro" }, { "MK", "Former Yugoslav Republic of Macedonia" }, { "ML", "Mali" }, { "MM", "Myanmar" }, { "MN", "Mongolia" }, { "MO", "Macau S.A.R." }, { "MT", "Malta" }, { "MV", "Maldives" }, { "MX", "Mexico" }, { "MY", "Malaysia" }, { "NG", "Nigeria" }, { "NI", "Nicaragua" }, { "NL", "Netherlands" }, { "NO", "Norway" }, { "NP", "Nepal" }, { "NZ", "New Zealand" }, { "OM", "Oman" }, { "PA", "Panama" }, { "PE", "Peru" }, { "PH", "Philippines" }, { "PK", "Islamic Republic of Pakistan" }, { "PL", "Poland" }, { "PR", "Puerto Rico" }, { "PT", "Portugal" }, { "PY", "Paraguay" }, { "QA", "Qatar" }, { "RE", "Reunion" }, { "RO", "Romania" }, { "RS", "Serbia" }, { "RU", "Russia" }, { "RW", "Rwanda" }, { "SA", "Saudi Arabia" }, { "SE", "Sweden" }, { "SG", "Singapore" }, { "SI", "Slovenia" }, { "SK", "Slovak" }, { "SN", "Senegal" }, { "SO", "Somalia" }, { "SR", "Suriname" }, { "SV", "El Salvador" }, { "SY", "Syria" }, { "TH", "Thailand" }, { "TJ", "Tajikistan" }, { "TM", "Turkmenistan" }, { "TN", "Tunisia" }, { "TR", "Turkey" }, { "TT", "Trinidad and Tobago" }, { "TW", "Taiwan" }, { "TZ", "Tanzania" }, { "UA", "Ukraine" }, { "US", "United States" }, { "UY", "Uruguay" }, { "VA", "Vatican" }, { "VE", "Venezuela" }, { "VN", "Viet Nam" }, { "YE", "Yemen" }, { "ZA", "South Africa" }, { "ZW", "Zimbabwe" } }; /* Given a string STRING, find the set of indices i such that TABLE[i].code is the given STRING. It is a range [lo,hi-1]. */ typedef struct { size_t lo; size_t hi; } range_t; static void search (const struct table_entry *table, size_t table_size, const char *string, range_t *result) { /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].code, string) < 0, for i >= hi, strcmp (table[i].code, string) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].code, string); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (language_table[i].code, string) == 0. Find the entire interval of such i. */ { size_t i; for (i = mid; i > lo; ) { i--; if (strcmp (table[i].code, string) < 0) { lo = i + 1; break; } } } { size_t i; for (i = mid + 1; i < hi; i++) { if (strcmp (table[i].code, string) > 0) { hi = i; break; } } } /* The set of i with strcmp (language_table[i].code, string) == 0 is the interval [lo, hi-1]. */ break; } } result->lo = lo; result->hi = hi; } /* Like setlocale, but accept also locale names in the form ll or ll_CC, where ll is an ISO 639 language code and CC is an ISO 3166 country code. */ static char * setlocale_unixlike (int category, const char *locale) { char *result; char llCC_buf[64]; char ll_buf[64]; char CC_buf[64]; /* The native Windows implementation of setlocale understands the special locale name "C", but not "POSIX". Therefore map "POSIX" to "C". */ if (locale != NULL && strcmp (locale, "POSIX") == 0) locale = "C"; /* First, try setlocale with the original argument unchanged. */ result = setlocale_mtsafe (category, locale); if (result != NULL) return result; /* Otherwise, assume the argument is in the form language[_territory][.codeset][@modifier] and try to map it using the tables. */ if (strlen (locale) < sizeof (llCC_buf)) { /* Second try: Remove the codeset part. */ { const char *p = locale; char *q = llCC_buf; /* Copy the part before the dot. */ for (; *p != '\0' && *p != '.'; p++, q++) *q = *p; if (*p == '.') /* Skip the part up to the '@', if any. */ for (; *p != '\0' && *p != '@'; p++) ; /* Copy the part starting with '@', if any. */ for (; *p != '\0'; p++, q++) *q = *p; *q = '\0'; } /* llCC_buf now contains language[_territory][@modifier] */ if (strcmp (llCC_buf, locale) != 0) { result = setlocale (category, llCC_buf); if (result != NULL) return result; } /* Look it up in language_table. */ { range_t range; size_t i; search (language_table, sizeof (language_table) / sizeof (language_table[0]), llCC_buf, &range); for (i = range.lo; i < range.hi; i++) { /* Try the replacement in language_table[i]. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } /* Split language[_territory][@modifier] into ll_buf = language[@modifier] and CC_buf = territory */ { const char *underscore = strchr (llCC_buf, '_'); if (underscore != NULL) { const char *territory_start = underscore + 1; const char *territory_end = strchr (territory_start, '@'); if (territory_end == NULL) territory_end = territory_start + strlen (territory_start); memcpy (ll_buf, llCC_buf, underscore - llCC_buf); strcpy (ll_buf + (underscore - llCC_buf), territory_end); memcpy (CC_buf, territory_start, territory_end - territory_start); CC_buf[territory_end - territory_start] = '\0'; { /* Look up ll_buf in language_table and CC_buf in country_table. */ range_t language_range; search (language_table, sizeof (language_table) / sizeof (language_table[0]), ll_buf, &language_range); if (language_range.lo < language_range.hi) { range_t country_range; search (country_table, sizeof (country_table) / sizeof (country_table[0]), CC_buf, &country_range); if (country_range.lo < country_range.hi) { size_t i; size_t j; for (i = language_range.lo; i < language_range.hi; i++) for (j = country_range.lo; j < country_range.hi; j++) { /* Concatenate the replacements. */ const char *part1 = language_table[i].english; size_t part1_len = strlen (part1); const char *part2 = country_table[j].english; size_t part2_len = strlen (part2) + 1; char buf[64+64]; if (!(part1_len + 1 + part2_len <= sizeof (buf))) abort (); memcpy (buf, part1, part1_len); buf[part1_len] = '_'; memcpy (buf + part1_len + 1, part2, part2_len); /* Try the concatenated replacements. */ result = setlocale (category, buf); if (result != NULL) return result; } } /* Try omitting the country entirely. This may set a locale corresponding to the wrong country, but is better than failing entirely. */ { size_t i; for (i = language_range.lo; i < language_range.hi; i++) { /* Try only the language replacement. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } } } } } } /* Failed. */ return NULL; } # elif defined __ANDROID__ /* Like setlocale, but accept also the locale names "C" and "POSIX". */ static char * setlocale_unixlike (int category, const char *locale) { char *result = setlocale_mtsafe (category, locale); if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: if (locale == NULL || strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) result = (char *) "C"; break; default: break; } return result; } # define setlocale setlocale_unixlike # else # define setlocale_unixlike setlocale_mtsafe # endif # if LC_MESSAGES == 1729 /* The system does not store an LC_MESSAGES locale category. Do it here. */ static char lc_messages_name[64] = "C"; /* Like setlocale, but support also LC_MESSAGES. */ static char * setlocale_single (int category, const char *locale) { if (category == LC_MESSAGES) { if (locale != NULL) { lc_messages_name[sizeof (lc_messages_name) - 1] = '\0'; strncpy (lc_messages_name, locale, sizeof (lc_messages_name) - 1); } return lc_messages_name; } else return setlocale_unixlike (category, locale); } # else # define setlocale_single setlocale_unixlike # endif # if defined __APPLE__ && defined __MACH__ /* Mapping from language to main territory where that language is spoken. */ static char const locales_with_principal_territory[][6 + 1] = { /* Language Main territory */ "ace_ID", /* Achinese Indonesia */ "af_ZA", /* Afrikaans South Africa */ "ak_GH", /* Akan Ghana */ "am_ET", /* Amharic Ethiopia */ "an_ES", /* Aragonese Spain */ "ang_GB", /* Old English Britain */ "arn_CL", /* Mapudungun Chile */ "as_IN", /* Assamese India */ "ast_ES", /* Asturian Spain */ "av_RU", /* Avaric Russia */ "awa_IN", /* Awadhi India */ "az_AZ", /* Azerbaijani Azerbaijan */ "ban_ID", /* Balinese Indonesia */ "be_BY", /* Belarusian Belarus */ "bej_SD", /* Beja Sudan */ "bem_ZM", /* Bemba Zambia */ "bg_BG", /* Bulgarian Bulgaria */ "bho_IN", /* Bhojpuri India */ "bi_VU", /* Bislama Vanuatu */ "bik_PH", /* Bikol Philippines */ "bin_NG", /* Bini Nigeria */ "bm_ML", /* Bambara Mali */ "bn_IN", /* Bengali India */ "bo_CN", /* Tibetan China */ "br_FR", /* Breton France */ "bs_BA", /* Bosnian Bosnia */ "bug_ID", /* Buginese Indonesia */ "ca_ES", /* Catalan Spain */ "ce_RU", /* Chechen Russia */ "ceb_PH", /* Cebuano Philippines */ "co_FR", /* Corsican France */ "cr_CA", /* Cree Canada */ /* Don't put "crh_UZ" or "crh_UA" here. That would be asking for fruitless political discussion. */ "cs_CZ", /* Czech Czech Republic */ "csb_PL", /* Kashubian Poland */ "cy_GB", /* Welsh Britain */ "da_DK", /* Danish Denmark */ "de_DE", /* German Germany */ "din_SD", /* Dinka Sudan */ "doi_IN", /* Dogri India */ "dsb_DE", /* Lower Sorbian Germany */ "dv_MV", /* Divehi Maldives */ "dz_BT", /* Dzongkha Bhutan */ "ee_GH", /* Éwé Ghana */ "el_GR", /* Greek Greece */ /* Don't put "en_GB" or "en_US" here. That would be asking for fruitless political discussion. */ "es_ES", /* Spanish Spain */ "et_EE", /* Estonian Estonia */ "fa_IR", /* Persian Iran */ "fi_FI", /* Finnish Finland */ "fil_PH", /* Filipino Philippines */ "fj_FJ", /* Fijian Fiji */ "fo_FO", /* Faroese Faeroe Islands */ "fon_BJ", /* Fon Benin */ "fr_FR", /* French France */ "fur_IT", /* Friulian Italy */ "fy_NL", /* Western Frisian Netherlands */ "ga_IE", /* Irish Ireland */ "gd_GB", /* Scottish Gaelic Britain */ "gon_IN", /* Gondi India */ "gsw_CH", /* Swiss German Switzerland */ "gu_IN", /* Gujarati India */ "he_IL", /* Hebrew Israel */ "hi_IN", /* Hindi India */ "hil_PH", /* Hiligaynon Philippines */ "hr_HR", /* Croatian Croatia */ "hsb_DE", /* Upper Sorbian Germany */ "ht_HT", /* Haitian Haiti */ "hu_HU", /* Hungarian Hungary */ "hy_AM", /* Armenian Armenia */ "id_ID", /* Indonesian Indonesia */ "ig_NG", /* Igbo Nigeria */ "ii_CN", /* Sichuan Yi China */ "ilo_PH", /* Iloko Philippines */ "is_IS", /* Icelandic Iceland */ "it_IT", /* Italian Italy */ "ja_JP", /* Japanese Japan */ "jab_NG", /* Hyam Nigeria */ "jv_ID", /* Javanese Indonesia */ "ka_GE", /* Georgian Georgia */ "kab_DZ", /* Kabyle Algeria */ "kaj_NG", /* Jju Nigeria */ "kam_KE", /* Kamba Kenya */ "kmb_AO", /* Kimbundu Angola */ "kcg_NG", /* Tyap Nigeria */ "kdm_NG", /* Kagoma Nigeria */ "kg_CD", /* Kongo Democratic Republic of Congo */ "kk_KZ", /* Kazakh Kazakhstan */ "kl_GL", /* Kalaallisut Greenland */ "km_KH", /* Central Khmer Cambodia */ "kn_IN", /* Kannada India */ "ko_KR", /* Korean Korea (South) */ "kok_IN", /* Konkani India */ "kr_NG", /* Kanuri Nigeria */ "kru_IN", /* Kurukh India */ "ky_KG", /* Kyrgyz Kyrgyzstan */ "lg_UG", /* Ganda Uganda */ "li_BE", /* Limburgish Belgium */ "lo_LA", /* Laotian Laos */ "lt_LT", /* Lithuanian Lithuania */ "lu_CD", /* Luba-Katanga Democratic Republic of Congo */ "lua_CD", /* Luba-Lulua Democratic Republic of Congo */ "luo_KE", /* Luo Kenya */ "lv_LV", /* Latvian Latvia */ "mad_ID", /* Madurese Indonesia */ "mag_IN", /* Magahi India */ "mai_IN", /* Maithili India */ "mak_ID", /* Makasar Indonesia */ "man_ML", /* Mandingo Mali */ "men_SL", /* Mende Sierra Leone */ "mfe_MU", /* Mauritian Creole Mauritius */ "mg_MG", /* Malagasy Madagascar */ "mi_NZ", /* Maori New Zealand */ "min_ID", /* Minangkabau Indonesia */ "mk_MK", /* Macedonian North Macedonia */ "ml_IN", /* Malayalam India */ "mn_MN", /* Mongolian Mongolia */ "mni_IN", /* Manipuri India */ "mos_BF", /* Mossi Burkina Faso */ "mr_IN", /* Marathi India */ "ms_MY", /* Malay Malaysia */ "mt_MT", /* Maltese Malta */ "mwr_IN", /* Marwari India */ "my_MM", /* Burmese Myanmar */ "na_NR", /* Nauru Nauru */ "nah_MX", /* Nahuatl Mexico */ "nap_IT", /* Neapolitan Italy */ "nb_NO", /* Norwegian Bokmål Norway */ "nds_DE", /* Low Saxon Germany */ "ne_NP", /* Nepali Nepal */ "nl_NL", /* Dutch Netherlands */ "nn_NO", /* Norwegian Nynorsk Norway */ "no_NO", /* Norwegian Norway */ "nr_ZA", /* South Ndebele South Africa */ "nso_ZA", /* Northern Sotho South Africa */ "ny_MW", /* Chichewa Malawi */ "nym_TZ", /* Nyamwezi Tanzania */ "nyn_UG", /* Nyankole Uganda */ "oc_FR", /* Occitan France */ "oj_CA", /* Ojibwa Canada */ "or_IN", /* Oriya India */ "pa_IN", /* Punjabi India */ "pag_PH", /* Pangasinan Philippines */ "pam_PH", /* Pampanga Philippines */ "pap_AN", /* Papiamento Netherlands Antilles - this line can be removed in 2018 */ "pbb_CO", /* Páez Colombia */ "pl_PL", /* Polish Poland */ "ps_AF", /* Pashto Afghanistan */ "pt_PT", /* Portuguese Portugal */ "raj_IN", /* Rajasthani India */ "rm_CH", /* Romansh Switzerland */ "rn_BI", /* Kirundi Burundi */ "ro_RO", /* Romanian Romania */ "ru_RU", /* Russian Russia */ "rw_RW", /* Kinyarwanda Rwanda */ "sa_IN", /* Sanskrit India */ "sah_RU", /* Yakut Russia */ "sas_ID", /* Sasak Indonesia */ "sat_IN", /* Santali India */ "sc_IT", /* Sardinian Italy */ "scn_IT", /* Sicilian Italy */ "sg_CF", /* Sango Central African Republic */ "shn_MM", /* Shan Myanmar */ "si_LK", /* Sinhala Sri Lanka */ "sid_ET", /* Sidamo Ethiopia */ "sk_SK", /* Slovak Slovakia */ "sl_SI", /* Slovenian Slovenia */ "sm_WS", /* Samoan Samoa */ "smn_FI", /* Inari Sami Finland */ "sms_FI", /* Skolt Sami Finland */ "so_SO", /* Somali Somalia */ "sq_AL", /* Albanian Albania */ "sr_RS", /* Serbian Serbia */ "srr_SN", /* Serer Senegal */ "suk_TZ", /* Sukuma Tanzania */ "sus_GN", /* Susu Guinea */ "sv_SE", /* Swedish Sweden */ "te_IN", /* Telugu India */ "tem_SL", /* Timne Sierra Leone */ "tet_ID", /* Tetum Indonesia */ "tg_TJ", /* Tajik Tajikistan */ "th_TH", /* Thai Thailand */ "ti_ER", /* Tigrinya Eritrea */ "tiv_NG", /* Tiv Nigeria */ "tk_TM", /* Turkmen Turkmenistan */ "tl_PH", /* Tagalog Philippines */ "to_TO", /* Tonga Tonga */ "tpi_PG", /* Tok Pisin Papua New Guinea */ "tr_TR", /* Turkish Turkey */ "tum_MW", /* Tumbuka Malawi */ "ug_CN", /* Uighur China */ "uk_UA", /* Ukrainian Ukraine */ "umb_AO", /* Umbundu Angola */ "ur_PK", /* Urdu Pakistan */ "uz_UZ", /* Uzbek Uzbekistan */ "ve_ZA", /* Venda South Africa */ "vi_VN", /* Vietnamese Vietnam */ "wa_BE", /* Walloon Belgium */ "wal_ET", /* Walamo Ethiopia */ "war_PH", /* Waray Philippines */ "wen_DE", /* Sorbian Germany */ "yao_MW", /* Yao Malawi */ "zap_MX" /* Zapotec Mexico */ }; /* Compare just the language part of two locale names. */ static int langcmp (const char *locale1, const char *locale2) { size_t locale1_len; size_t locale2_len; int cmp; { const char *locale1_end = strchr (locale1, '_'); if (locale1_end != NULL) locale1_len = locale1_end - locale1; else locale1_len = strlen (locale1); } { const char *locale2_end = strchr (locale2, '_'); if (locale2_end != NULL) locale2_len = locale2_end - locale2; else locale2_len = strlen (locale2); } if (locale1_len < locale2_len) { cmp = memcmp (locale1, locale2, locale1_len); if (cmp == 0) cmp = -1; } else { cmp = memcmp (locale1, locale2, locale2_len); if (locale1_len > locale2_len && cmp == 0) cmp = 1; } return cmp; } /* Given a locale name, return the main locale with the same language, or NULL if not found. For example: "fr_DE" -> "fr_FR". */ static const char * get_main_locale_with_same_language (const char *locale) { # define table locales_with_principal_territory /* The table is sorted. Perform a binary search. */ size_t hi = sizeof (table) / sizeof (table[0]); size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, langcmp (table[i], locale) < 0, for i >= hi, langcmp (table[i], locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = langcmp (table[mid], locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with langcmp (language_table[i], locale) == 0. Verify that it is the only such i. */ if (mid > lo && langcmp (table[mid - 1], locale) >= 0) abort (); if (mid + 1 < hi && langcmp (table[mid + 1], locale) <= 0) abort (); return table[mid]; } } # undef table return NULL; } /* Mapping from territory to main language that is spoken in that territory. */ static char const locales_with_principal_language[][6 + 1] = { /* This is based on the set of existing locales in glibc, with duplicates removed, and on the Wikipedia pages named "Languages of <territory>". If in doubt, use the locale that exists in macOS. For example, the only "*_IN" locale in macOS 10.13 is "hi_IN", so use that. */ /* A useful shell function for producing a line of this table is: func_line () { # Usage: func_line ll_CC ll=`echo "$1" | sed -e 's|_.*||'` cc=`echo "$1" | sed -e 's|^.*_||'` llx=`sed -n -e "s|^${ll} ||p" < gettext-tools/doc/ISO_639` ccx=`expand gettext-tools/doc/ISO_3166 | sed -n -e "s|^${cc} *||p"` echo " \"$1\", /$X* ${llx} ${ccx} *$X/" } */ /* Main language Territory */ "ca_AD", /* Catalan Andorra */ "ar_AE", /* Arabic United Arab Emirates */ "ps_AF", /* Pashto Afghanistan */ "en_AG", /* English Antigua and Barbuda */ "sq_AL", /* Albanian Albania */ "hy_AM", /* Armenian Armenia */ "pap_AN", /* Papiamento Netherlands Antilles - this line can be removed in 2018 */ "pt_AO", /* Portuguese Angola */ "es_AR", /* Spanish Argentina */ "de_AT", /* German Austria */ "en_AU", /* English Australia */ /* Aruba has two official languages: "nl_AW", "pap_AW". */ "az_AZ", /* Azerbaijani Azerbaijan */ "bs_BA", /* Bosnian Bosnia */ "bn_BD", /* Bengali Bangladesh */ "nl_BE", /* Dutch Belgium */ "fr_BF", /* French Burkina Faso */ "bg_BG", /* Bulgarian Bulgaria */ "ar_BH", /* Arabic Bahrain */ "rn_BI", /* Kirundi Burundi */ "fr_BJ", /* French Benin */ "es_BO", /* Spanish Bolivia */ "pt_BR", /* Portuguese Brazil */ "dz_BT", /* Dzongkha Bhutan */ "en_BW", /* English Botswana */ "be_BY", /* Belarusian Belarus */ "en_CA", /* English Canada */ "fr_CD", /* French Democratic Republic of Congo */ "sg_CF", /* Sango Central African Republic */ "de_CH", /* German Switzerland */ "es_CL", /* Spanish Chile */ "zh_CN", /* Chinese China */ "es_CO", /* Spanish Colombia */ "es_CR", /* Spanish Costa Rica */ "es_CU", /* Spanish Cuba */ /* Curaçao has three official languages: "nl_CW", "pap_CW", "en_CW". */ "el_CY", /* Greek Cyprus */ "cs_CZ", /* Czech Czech Republic */ "de_DE", /* German Germany */ /* Djibouti has two official languages: "ar_DJ" and "fr_DJ". */ "da_DK", /* Danish Denmark */ "es_DO", /* Spanish Dominican Republic */ "ar_DZ", /* Arabic Algeria */ "es_EC", /* Spanish Ecuador */ "et_EE", /* Estonian Estonia */ "ar_EG", /* Arabic Egypt */ "ti_ER", /* Tigrinya Eritrea */ "es_ES", /* Spanish Spain */ "am_ET", /* Amharic Ethiopia */ "fi_FI", /* Finnish Finland */ /* Fiji has three official languages: "en_FJ", "fj_FJ", "hif_FJ". */ "fo_FO", /* Faroese Faeroe Islands */ "fr_FR", /* French France */ "en_GB", /* English Britain */ "ka_GE", /* Georgian Georgia */ "en_GH", /* English Ghana */ "kl_GL", /* Kalaallisut Greenland */ "fr_GN", /* French Guinea */ "el_GR", /* Greek Greece */ "es_GT", /* Spanish Guatemala */ "zh_HK", /* Chinese Hong Kong */ "es_HN", /* Spanish Honduras */ "hr_HR", /* Croatian Croatia */ "ht_HT", /* Haitian Haiti */ "hu_HU", /* Hungarian Hungary */ "id_ID", /* Indonesian Indonesia */ "en_IE", /* English Ireland */ "he_IL", /* Hebrew Israel */ "hi_IN", /* Hindi India */ "ar_IQ", /* Arabic Iraq */ "fa_IR", /* Persian Iran */ "is_IS", /* Icelandic Iceland */ "it_IT", /* Italian Italy */ "ar_JO", /* Arabic Jordan */ "ja_JP", /* Japanese Japan */ "sw_KE", /* Swahili Kenya */ "ky_KG", /* Kyrgyz Kyrgyzstan */ "km_KH", /* Central Khmer Cambodia */ "ko_KR", /* Korean Korea (South) */ "ar_KW", /* Arabic Kuwait */ "kk_KZ", /* Kazakh Kazakhstan */ "lo_LA", /* Laotian Laos */ "ar_LB", /* Arabic Lebanon */ "de_LI", /* German Liechtenstein */ "si_LK", /* Sinhala Sri Lanka */ "lt_LT", /* Lithuanian Lithuania */ /* Luxembourg has three official languages: "lb_LU", "fr_LU", "de_LU". */ "lv_LV", /* Latvian Latvia */ "ar_LY", /* Arabic Libya */ "ar_MA", /* Arabic Morocco */ "sr_ME", /* Serbian Montenegro */ "mg_MG", /* Malagasy Madagascar */ "mk_MK", /* Macedonian North Macedonia */ "fr_ML", /* French Mali */ "my_MM", /* Burmese Myanmar */ "mn_MN", /* Mongolian Mongolia */ "mt_MT", /* Maltese Malta */ "mfe_MU", /* Mauritian Creole Mauritius */ "dv_MV", /* Divehi Maldives */ "ny_MW", /* Chichewa Malawi */ "es_MX", /* Spanish Mexico */ "ms_MY", /* Malay Malaysia */ "en_NG", /* English Nigeria */ "es_NI", /* Spanish Nicaragua */ "nl_NL", /* Dutch Netherlands */ "no_NO", /* Norwegian Norway */ "ne_NP", /* Nepali Nepal */ "na_NR", /* Nauru Nauru */ "niu_NU", /* Niuean Niue */ "en_NZ", /* English New Zealand */ "ar_OM", /* Arabic Oman */ "es_PA", /* Spanish Panama */ "es_PE", /* Spanish Peru */ "tpi_PG", /* Tok Pisin Papua New Guinea */ "fil_PH", /* Filipino Philippines */ "pa_PK", /* Punjabi Pakistan */ "pl_PL", /* Polish Poland */ "es_PR", /* Spanish Puerto Rico */ "pt_PT", /* Portuguese Portugal */ "es_PY", /* Spanish Paraguay */ "ar_QA", /* Arabic Qatar */ "ro_RO", /* Romanian Romania */ "sr_RS", /* Serbian Serbia */ "ru_RU", /* Russian Russia */ "rw_RW", /* Kinyarwanda Rwanda */ "ar_SA", /* Arabic Saudi Arabia */ "en_SC", /* English Seychelles */ "ar_SD", /* Arabic Sudan */ "sv_SE", /* Swedish Sweden */ "en_SG", /* English Singapore */ "sl_SI", /* Slovenian Slovenia */ "sk_SK", /* Slovak Slovakia */ "en_SL", /* English Sierra Leone */ "fr_SN", /* French Senegal */ "so_SO", /* Somali Somalia */ "ar_SS", /* Arabic South Sudan */ "es_SV", /* Spanish El Salvador */ "ar_SY", /* Arabic Syria */ "th_TH", /* Thai Thailand */ "tg_TJ", /* Tajik Tajikistan */ "tk_TM", /* Turkmen Turkmenistan */ "ar_TN", /* Arabic Tunisia */ "to_TO", /* Tonga Tonga */ "tr_TR", /* Turkish Turkey */ "zh_TW", /* Chinese Taiwan */ "sw_TZ", /* Swahili Tanzania */ "uk_UA", /* Ukrainian Ukraine */ "lg_UG", /* Ganda Uganda */ "en_US", /* English United States of America */ "es_UY", /* Spanish Uruguay */ "uz_UZ", /* Uzbek Uzbekistan */ "es_VE", /* Spanish Venezuela */ "vi_VN", /* Vietnamese Vietnam */ "bi_VU", /* Bislama Vanuatu */ "sm_WS", /* Samoan Samoa */ "ar_YE", /* Arabic Yemen */ "en_ZA", /* English South Africa */ "en_ZM", /* English Zambia */ "en_ZW" /* English Zimbabwe */ }; /* Compare just the territory part of two locale names. */ static int terrcmp (const char *locale1, const char *locale2) { const char *territory1 = strrchr (locale1, '_') + 1; const char *territory2 = strrchr (locale2, '_') + 1; return strcmp (territory1, territory2); } /* Given a locale name, return the locale corresponding to the main language with the same territory, or NULL if not found. For example: "fr_DE" -> "de_DE". */ static const char * get_main_locale_with_same_territory (const char *locale) { if (strrchr (locale, '_') != NULL) { # define table locales_with_principal_language /* The table is sorted. Perform a binary search. */ size_t hi = sizeof (table) / sizeof (table[0]); size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, terrcmp (table[i], locale) < 0, for i >= hi, terrcmp (table[i], locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = terrcmp (table[mid], locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with terrcmp (language_table[i], locale) == 0. Verify that it is the only such i. */ if (mid > lo && terrcmp (table[mid - 1], locale) >= 0) abort (); if (mid + 1 < hi && terrcmp (table[mid + 1], locale) <= 0) abort (); return table[mid]; } } # undef table } return NULL; } # endif char * setlocale_improved (int category, const char *locale) { if (locale != NULL && locale[0] == '\0') { /* A request to the set the current locale to the default locale. */ if (category == LC_ALL) { /* Set LC_CTYPE first. Then the other categories. */ static int const categories[] = { LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES }; char *saved_locale; const char *base_name; unsigned int i; /* Back up the old locale, in case one of the steps fails. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; /* Set LC_CTYPE category. Set all other categories (except possibly LC_MESSAGES) to the same value in the same call; this is likely to save calls. */ base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) base_name = gl_locale_name_default (); if (setlocale_unixlike (LC_ALL, base_name) != NULL) { /* LC_CTYPE category already set. */ i = 1; } else { /* On Mac OS X, "UTF-8" is a valid locale name for LC_CTYPE but not for LC_ALL. Therefore this call may fail. So, try another base_name. */ base_name = "C"; if (setlocale_unixlike (LC_ALL, base_name) == NULL) goto fail; i = 0; } # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strchr (base_name, '.') != NULL && strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) goto fail; # endif for (; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat = categories[i]; const char *name; name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) name = gl_locale_name_default (); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ if (strcmp (name, base_name) != 0 # if LC_MESSAGES == 1729 || cat == LC_MESSAGES # endif ) if (setlocale_single (cat, name) == NULL) # if defined __APPLE__ && defined __MACH__ { /* On Mac OS X 10.13, some locales can be set through System Preferences > Language & Region, that are not supported by libc. The system's setlocale() falls back to "C" for these locale categories. We can do better, by trying an existing locale with the same language or an existing locale with the same territory. If we can't, print a warning, to limit user expectations. */ int warn = 0; if (cat == LC_CTYPE) warn = (setlocale_single (cat, "UTF-8") == NULL); else if (cat == LC_MESSAGES) { # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ /* Take the primary language preference. */ # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ CFArrayRef prefArray = CFLocaleCopyPreferredLanguages (); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ CFTypeRef preferences = CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), kCFPreferencesCurrentApplication); if (preferences != NULL && CFGetTypeID (preferences) == CFArrayGetTypeID ()) { CFArrayRef prefArray = (CFArrayRef)preferences; # endif int n = CFArrayGetCount (prefArray); if (n > 0) { char buf[256]; CFTypeRef element = CFArrayGetValueAtIndex (prefArray, 0); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { /* Remove the country. E.g. "zh-Hans-DE" -> "zh-Hans". */ char *last_minus = strrchr (buf, '-'); if (last_minus != NULL) *last_minus = '\0'; /* Convert to Unix locale name. E.g. "zh-Hans" -> "zh_CN". */ gl_locale_name_canonicalize (buf); /* Try setlocale with this value. */ if (setlocale_single (cat, buf) == NULL) { const char *last_try = get_main_locale_with_same_language (buf); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; } } } # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ CFRelease (prefArray); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ } # endif # else const char *last_try = get_main_locale_with_same_language (name); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; # endif } else { /* For LC_NUMERIC, the application should use the locale properties kCFLocaleDecimalSeparator, kCFLocaleGroupingSeparator. For LC_TIME, the application should use the locale property kCFLocaleCalendarIdentifier. For LC_COLLATE, the application should use the locale properties kCFLocaleCollationIdentifier, kCFLocaleCollatorIdentifier. For LC_MONETARY, the applicationshould use the locale properties kCFLocaleCurrencySymbol, kCFLocaleCurrencyCode. But since most applications don't have macOS specific code like this, try an existing locale with the same territory. */ const char *last_try = get_main_locale_with_same_territory (name); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; } if (warn) { /* Warn only if the environment variable SETLOCALE_VERBOSE is set. Otherwise these warnings are just annoyances, since normal users won't invoke 'localedef'. */ const char *verbose = getenv ("SETLOCALE_VERBOSE"); if (verbose != NULL && verbose[0] != '\0') fprintf (stderr, "Warning: Failed to set locale category %s to %s.\n", category_to_name (cat), name); } } # else goto fail; # endif } /* All steps were successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); fail: if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } else { const char *name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) name = gl_locale_name_default (); return setlocale_single (category, name); } } else { # if defined _WIN32 && ! defined __CYGWIN__ if (category == LC_ALL && locale != NULL && strchr (locale, '.') != NULL) { char *saved_locale; /* Back up the old locale. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; if (setlocale_unixlike (LC_ALL, locale) == NULL) { free (saved_locale); return NULL; } /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } /* It was really successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); } else # endif return setlocale_single (category, locale); } } # endif /* NEED_SETLOCALE_IMPROVED */ #endif ������������������������������������������������������������������������gnulib-20210822~d383792/lib/setlocale_null.c��������������������������������������������������������0000664�0000000�0000000�00000025223�14110572173�0020222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include "setlocale_null.h" #include <errno.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # include <wchar.h> #endif #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* Use the system's setlocale() function, not the gnulib override, here. */ #undef setlocale static const char * setlocale_null_androidfix (int category) { const char *result = setlocale (category, NULL); #ifdef __ANDROID__ if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: result = "C"; break; default: break; } #endif return result; } static int setlocale_null_unlocked (int category, char *buf, size_t bufsize) { #if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER /* On native Windows, nowadays, the setlocale() implementation is based on _wsetlocale() and uses malloc() for the result. We are better off using _wsetlocale() directly. */ const wchar_t *result = _wsetlocale (category, NULL); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = wcslen (result); if (length < bufsize) { size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i <= length; i++) buf[i] = result[i]; return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i < bufsize; i++) buf[i] = result[i]; buf[bufsize - 1] = '\0'; } return ERANGE; } } #else const char *result = setlocale_null_androidfix (category); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = strlen (result); if (length < bufsize) { memcpy (buf, result, length + 1); return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ memcpy (buf, result, bufsize - 1); buf[bufsize - 1] = '\0'; } return ERANGE; } } #endif } #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ /* Use a lock, so that no two threads can invoke setlocale_null_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); int ret; EnterCriticalSection (lock); ret = setlocale_null_unlocked (category, buf, bufsize); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_setlocale_null_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_setlocale_null_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return setlocale_null_unlocked (category, buf, bufsize); } # elif HAVE_THREADS_H extern mtx_t *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { mtx_t *lock = gl_get_setlocale_null_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif #endif int setlocale_null_r (int category, char *buf, size_t bufsize) { #if SETLOCALE_NULL_ALL_MTSAFE # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_unlocked (category, buf, bufsize); # else if (category == LC_ALL) return setlocale_null_unlocked (category, buf, bufsize); else return setlocale_null_with_lock (category, buf, bufsize); # endif #else # if SETLOCALE_NULL_ONE_MTSAFE if (category == LC_ALL) return setlocale_null_with_lock (category, buf, bufsize); else return setlocale_null_unlocked (category, buf, bufsize); # else return setlocale_null_with_lock (category, buf, bufsize); # endif #endif } const char * setlocale_null (int category) { #if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); #else /* This call must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible CATEGORY argument. So that different threads can call setlocale_mtsafe with different CATEGORY arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ if (category == LC_ALL) { # if SETLOCALE_NULL_ALL_MTSAFE return setlocale_null_androidfix (LC_ALL); # else char buf[SETLOCALE_NULL_ALL_MAX]; static char resultbuf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) return "C"; strcpy (resultbuf, buf); return resultbuf; # endif } else { # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); # else enum { LC_CTYPE_INDEX, LC_NUMERIC_INDEX, LC_TIME_INDEX, LC_COLLATE_INDEX, LC_MONETARY_INDEX, LC_MESSAGES_INDEX, # ifdef LC_PAPER LC_PAPER_INDEX, # endif # ifdef LC_NAME LC_NAME_INDEX, # endif # ifdef LC_ADDRESS LC_ADDRESS_INDEX, # endif # ifdef LC_TELEPHONE LC_TELEPHONE_INDEX, # endif # ifdef LC_MEASUREMENT LC_MEASUREMENT_INDEX, # endif # ifdef LC_IDENTIFICATION LC_IDENTIFICATION_INDEX, # endif LC_INDICES_COUNT } i; char buf[SETLOCALE_NULL_MAX]; static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; int err; err = setlocale_null_r (category, buf, sizeof (buf)); if (err == EINVAL) return NULL; if (err) return "C"; switch (category) { case LC_CTYPE: i = LC_CTYPE_INDEX; break; case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; case LC_TIME: i = LC_TIME_INDEX; break; case LC_COLLATE: i = LC_COLLATE_INDEX; break; case LC_MONETARY: i = LC_MONETARY_INDEX; break; case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; # ifdef LC_PAPER case LC_PAPER: i = LC_PAPER_INDEX; break; # endif # ifdef LC_NAME case LC_NAME: i = LC_NAME_INDEX; break; # endif # ifdef LC_ADDRESS case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; # endif # ifdef LC_TELEPHONE case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; # endif # ifdef LC_MEASUREMENT case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; # endif # ifdef LC_IDENTIFICATION case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; # endif default: /* If you get here, a #ifdef LC_xxx is missing. */ abort (); } strcpy (resultbuf[i], buf); return resultbuf[i]; # endif } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/setlocale_null.h��������������������������������������������������������0000664�0000000�0000000�00000006664�14110572173�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2021 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>, 2019. */ #ifndef _SETLOCALE_NULL_H #define _SETLOCALE_NULL_H #include <stddef.h> #include "arg-nonnull.h" #ifdef __cplusplus extern "C" { #endif /* Recommended size of a buffer for a locale name for a single category. On glibc systems, you can have locale names that are relative file names; assume a maximum length 256. In native Windows, in 2018 the longest locale name was of length 58 ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ #define SETLOCALE_NULL_MAX (256+1) /* Recommended size of a buffer for a locale name with all categories. On glibc systems, you can have locale names that are relative file names; assume maximum length 256 for each. There are 12 categories; so, the maximum total length is 148+12*256. In native Windows, there are 5 categories, and the maximum total length is 55+5*58. */ #define SETLOCALE_NULL_ALL_MAX (148+12*256+1) /* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), except that - it is guaranteed to be multithread-safe, - it returns the resulting locale category name or locale name in the user-supplied buffer BUF, which must be BUFSIZE bytes long. The recommended minimum buffer size is - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. The return value is an error code: 0 if the call is successful, EINVAL if CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed size (including the trailing NUL byte). In the latter case, a truncated result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern int setlocale_null_r (int category, char *buf, size_t bufsize) _GL_ARG_NONNULL ((2)); /* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that it is guaranteed to be multithread-safe. The return value is NULL if CATEGORY is invalid. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern const char *setlocale_null (int category); #ifdef __cplusplus } #endif #endif /* _SETLOCALE_NULL_H */ ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/setsockopt.c������������������������������������������������������������0000664�0000000�0000000�00000003370�14110572173�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* setsockopt.c --- wrappers for Windows setsockopt function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get struct timeval. */ #include <sys/time.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef setsockopt int rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) { SOCKET sock = FD_TO_SOCKET (fd); int r; if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { if (level == SOL_SOCKET && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) { const struct timeval *tv = optval; int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; optval = &milliseconds; r = setsockopt (sock, level, optname, optval, sizeof (int)); } else { r = setsockopt (sock, level, optname, optval, optlen); } if (r < 0) set_winsock_errno (); return r; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/settime.c���������������������������������������������������������������0000664�0000000�0000000�00000003000�14110572173�0016654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* settime -- set the system clock Copyright (C) 2002, 2004-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "timespec.h" #include <sys/time.h> #include <unistd.h> #include <errno.h> /* Set the system time. */ int settime (struct timespec const *ts) { #if defined CLOCK_REALTIME && HAVE_CLOCK_SETTIME { int r = clock_settime (CLOCK_REALTIME, ts); if (r == 0 || errno == EPERM) return r; } #endif #if HAVE_SETTIMEOFDAY { struct timeval tv; tv.tv_sec = ts->tv_sec; tv.tv_usec = ts->tv_nsec / 1000; return settimeofday (&tv, 0); } #elif HAVE_STIME /* This fails to compile on OSF1 V5.1, due to stime requiring a 'long int*' and tv_sec is 'int'. But that system does provide settimeofday. */ return stime (&ts->tv_sec); #else errno = ENOSYS; return -1; #endif } gnulib-20210822~d383792/lib/sh-quote.c��������������������������������������������������������������0000664�0000000�0000000�00000005577�14110572173�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Shell quoting. Copyright (C) 2001-2004, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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> /* Specification. */ #include "sh-quote.h" #include <string.h> #include "quotearg.h" #include "xalloc.h" /* Describes quoting for sh compatible shells. */ static struct quoting_options *sh_quoting_options; /* Initializes the sh_quoting_options variable. */ static void init_sh_quoting_options () { sh_quoting_options = clone_quoting_options (NULL); set_quoting_style (sh_quoting_options, shell_quoting_style); } /* Returns the number of bytes needed for the quoted string. */ size_t shell_quote_length (const char *string) { if (sh_quoting_options == NULL) init_sh_quoting_options (); return quotearg_buffer (NULL, 0, string, strlen (string), sh_quoting_options); } /* Copies the quoted string to p and returns the incremented p. There must be room for shell_quote_length (string) + 1 bytes at p. */ char * shell_quote_copy (char *p, const char *string) { if (sh_quoting_options == NULL) init_sh_quoting_options (); return p + quotearg_buffer (p, (size_t)(-1), string, strlen (string), sh_quoting_options); } /* Returns the freshly allocated quoted string. */ char * shell_quote (const char *string) { if (sh_quoting_options == NULL) init_sh_quoting_options (); return quotearg_alloc (string, strlen (string), sh_quoting_options); } /* Returns a freshly allocated string containing all argument strings, quoted, separated through spaces. */ char * shell_quote_argv (const char * const *argv) { if (*argv != NULL) { const char * const *argp; size_t length; char *command; char *p; length = 0; for (argp = argv; ; ) { length += shell_quote_length (*argp) + 1; argp++; if (*argp == NULL) break; } command = XNMALLOC (length, char); p = command; for (argp = argv; ; ) { p = shell_quote_copy (p, *argp); argp++; if (*argp == NULL) break; *p++ = ' '; } *p = '\0'; return command; } else return xstrdup (""); } ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sh-quote.h��������������������������������������������������������������0000664�0000000�0000000�00000003600�14110572173�0016762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Shell quoting. Copyright (C) 2001-2002, 2004, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _SH_QUOTE_H #define _SH_QUOTE_H /* When passing a command to a shell, we must quote the program name and arguments, since Unix shells interpret characters like " ", "'", "<", ">", "$", '*', '?' etc. in a special way. */ #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Returns the number of bytes needed for the quoted string. */ extern size_t shell_quote_length (const char *string); /* Copies the quoted string to p and returns the incremented p. There must be room for shell_quote_length (string) + 1 bytes at p. */ extern char * shell_quote_copy (char *restrict p, const char *string); /* Returns the freshly allocated quoted string. */ extern char * shell_quote (const char *string) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Returns a freshly allocated string containing all argument strings, quoted, separated through spaces. */ extern char * shell_quote_argv (const char * const *argv) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #ifdef __cplusplus } #endif #endif /* _SH_QUOTE_H */ ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha1.c������������������������������������������������������������������0000664�0000000�0000000�00000033217�14110572173�0016053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sha1.c - Functions to compute SHA1 message digest of files or memory blocks according to the NIST specification FIPS-180-1. Copyright (C) 2000-2001, 2003-2006, 2008-2021 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 Scott G. Miller Credits: Robert Klep <robert@ilse.nl> -- Expansion function fix */ #include <config.h> #if HAVE_OPENSSL_SHA1 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif #include "sha1.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) bswap_32 (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif #if ! HAVE_OPENSSL_SHA1 /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Take a pointer to a 160 bit block of data (five 32 bit ints) and initialize it to the start constants of the SHA1 algorithm. This must be called before using hash in the call to sha1_hash. */ void sha1_init_ctx (struct sha1_ctx *ctx) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->E = 0xc3d2e1f0; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the 4 byte value from v into the memory location pointed to by *cp, If your architecture allows unaligned access this is equivalent to * (uint32_t *) cp = v */ static void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 20 bytes following RESBUF. The result must be in little endian byte order. */ void * sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf) { char *r = resbuf; set_uint32 (r + 0 * sizeof ctx->A, SWAP (ctx->A)); set_uint32 (r + 1 * sizeof ctx->B, SWAP (ctx->B)); set_uint32 (r + 2 * sizeof ctx->C, SWAP (ctx->C)); set_uint32 (r + 3 * sizeof ctx->D, SWAP (ctx->D)); set_uint32 (r + 4 * sizeof ctx->E, SWAP (ctx->E)); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ void * sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf) { /* Take yet unprocessed bytes into account. */ uint32_t bytes = ctx->buflen; size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; /* Put the 64-bit file length in *bits* at the end of the buffer. */ ctx->buffer[size - 2] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); ctx->buffer[size - 1] = SWAP (ctx->total[0] << 3); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes); /* Process last bytes. */ sha1_process_block (ctx->buffer, size * 4, ctx); return sha1_read_ctx (ctx, resbuf); } #endif #ifdef GL_COMPILE_CRYPTO_STREAM #include "af_alg.h" /* Compute SHA1 message digest for bytes read from STREAM. The resulting message digest number will be written into the 20 bytes beginning at RESBLOCK. */ int sha1_stream (FILE *stream, void *resblock) { switch (afalg_stream (stream, "sha1", resblock, SHA1_DIGEST_SIZE)) { case 0: return 0; case -EIO: return 1; } char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; struct sha1_ctx ctx; sha1_init_ctx (&ctx); size_t sum; /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { /* Either process a partial fread() from this loop, or the fread() in afalg_stream may have gotten EOF. We need to avoid a subsequent fread() as EOF may not be sticky. For details of such systems, see: https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */ if (feof (stream)) goto process_partial_block; n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ sha1_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) sha1_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ sha1_finish_ctx (&ctx, resblock); free (buffer); return 0; } #endif #if ! HAVE_OPENSSL_SHA1 /* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * sha1_buffer (const char *buffer, size_t len, void *resblock) { struct sha1_ctx ctx; /* Initialize the computation context. */ sha1_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ sha1_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sha1_finish_ctx (&ctx, resblock); } void sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { sha1_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap, because ctx->buflen < 64 ≤ (left_over + add) & ~63. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { sha1_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { sha1_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { sha1_process_block (ctx->buffer, 64, ctx); left_over -= 64; /* The regions in the following copy operation cannot overlap, because left_over ≤ 64. */ memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between md5.c and sha1.c --- */ /* SHA1 round constants */ #define K1 0x5a827999 #define K2 0x6ed9eba1 #define K3 0x8f1bbcdc #define K4 0xca62c1d6 /* Round functions. Note that F2 is the same as F4. */ #define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) ) #define F2(B,C,D) (B ^ C ^ D) #define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) ) #define F4(B,C,D) (B ^ C ^ D) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. Most of this code comes from GnuPG's cipher/sha1.c. */ void sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx) { const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t x[16]; uint32_t a = ctx->A; uint32_t b = ctx->B; uint32_t c = ctx->C; uint32_t d = ctx->D; uint32_t e = ctx->E; uint32_t lolen = len; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += lolen; ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) #define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \ ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \ , (x[I&0x0f] = rol(tm, 1)) ) #define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \ + F( B, C, D ) \ + K \ + M; \ B = rol( B, 30 ); \ } while(0) while (words < endp) { uint32_t tm; int t; for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } R( a, b, c, d, e, F1, K1, x[ 0] ); R( e, a, b, c, d, F1, K1, x[ 1] ); R( d, e, a, b, c, F1, K1, x[ 2] ); R( c, d, e, a, b, F1, K1, x[ 3] ); R( b, c, d, e, a, F1, K1, x[ 4] ); R( a, b, c, d, e, F1, K1, x[ 5] ); R( e, a, b, c, d, F1, K1, x[ 6] ); R( d, e, a, b, c, F1, K1, x[ 7] ); R( c, d, e, a, b, F1, K1, x[ 8] ); R( b, c, d, e, a, F1, K1, x[ 9] ); R( a, b, c, d, e, F1, K1, x[10] ); R( e, a, b, c, d, F1, K1, x[11] ); R( d, e, a, b, c, F1, K1, x[12] ); R( c, d, e, a, b, F1, K1, x[13] ); R( b, c, d, e, a, F1, K1, x[14] ); R( a, b, c, d, e, F1, K1, x[15] ); R( e, a, b, c, d, F1, K1, M(16) ); R( d, e, a, b, c, F1, K1, M(17) ); R( c, d, e, a, b, F1, K1, M(18) ); R( b, c, d, e, a, F1, K1, M(19) ); R( a, b, c, d, e, F2, K2, M(20) ); R( e, a, b, c, d, F2, K2, M(21) ); R( d, e, a, b, c, F2, K2, M(22) ); R( c, d, e, a, b, F2, K2, M(23) ); R( b, c, d, e, a, F2, K2, M(24) ); R( a, b, c, d, e, F2, K2, M(25) ); R( e, a, b, c, d, F2, K2, M(26) ); R( d, e, a, b, c, F2, K2, M(27) ); R( c, d, e, a, b, F2, K2, M(28) ); R( b, c, d, e, a, F2, K2, M(29) ); R( a, b, c, d, e, F2, K2, M(30) ); R( e, a, b, c, d, F2, K2, M(31) ); R( d, e, a, b, c, F2, K2, M(32) ); R( c, d, e, a, b, F2, K2, M(33) ); R( b, c, d, e, a, F2, K2, M(34) ); R( a, b, c, d, e, F2, K2, M(35) ); R( e, a, b, c, d, F2, K2, M(36) ); R( d, e, a, b, c, F2, K2, M(37) ); R( c, d, e, a, b, F2, K2, M(38) ); R( b, c, d, e, a, F2, K2, M(39) ); R( a, b, c, d, e, F3, K3, M(40) ); R( e, a, b, c, d, F3, K3, M(41) ); R( d, e, a, b, c, F3, K3, M(42) ); R( c, d, e, a, b, F3, K3, M(43) ); R( b, c, d, e, a, F3, K3, M(44) ); R( a, b, c, d, e, F3, K3, M(45) ); R( e, a, b, c, d, F3, K3, M(46) ); R( d, e, a, b, c, F3, K3, M(47) ); R( c, d, e, a, b, F3, K3, M(48) ); R( b, c, d, e, a, F3, K3, M(49) ); R( a, b, c, d, e, F3, K3, M(50) ); R( e, a, b, c, d, F3, K3, M(51) ); R( d, e, a, b, c, F3, K3, M(52) ); R( c, d, e, a, b, F3, K3, M(53) ); R( b, c, d, e, a, F3, K3, M(54) ); R( a, b, c, d, e, F3, K3, M(55) ); R( e, a, b, c, d, F3, K3, M(56) ); R( d, e, a, b, c, F3, K3, M(57) ); R( c, d, e, a, b, F3, K3, M(58) ); R( b, c, d, e, a, F3, K3, M(59) ); R( a, b, c, d, e, F4, K4, M(60) ); R( e, a, b, c, d, F4, K4, M(61) ); R( d, e, a, b, c, F4, K4, M(62) ); R( c, d, e, a, b, F4, K4, M(63) ); R( b, c, d, e, a, F4, K4, M(64) ); R( a, b, c, d, e, F4, K4, M(65) ); R( e, a, b, c, d, F4, K4, M(66) ); R( d, e, a, b, c, F4, K4, M(67) ); R( c, d, e, a, b, F4, K4, M(68) ); R( b, c, d, e, a, F4, K4, M(69) ); R( a, b, c, d, e, F4, K4, M(70) ); R( e, a, b, c, d, F4, K4, M(71) ); R( d, e, a, b, c, F4, K4, M(72) ); R( c, d, e, a, b, F4, K4, M(73) ); R( b, c, d, e, a, F4, K4, M(74) ); R( a, b, c, d, e, F4, K4, M(75) ); R( e, a, b, c, d, F4, K4, M(76) ); R( d, e, a, b, c, F4, K4, M(77) ); R( c, d, e, a, b, F4, K4, M(78) ); R( b, c, d, e, a, F4, K4, M(79) ); a = ctx->A += a; b = ctx->B += b; c = ctx->C += c; d = ctx->D += d; e = ctx->E += e; } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha1.h������������������������������������������������������������������0000664�0000000�0000000�00000007246�14110572173�0016063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for SHA1 sum library functions. Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2021 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/>. */ #ifndef SHA1_H # define SHA1_H 1 # include <stdio.h> # include <stdint.h> # if HAVE_OPENSSL_SHA1 # include <openssl/sha.h> # endif # ifdef __cplusplus extern "C" { # endif #define SHA1_DIGEST_SIZE 20 # if HAVE_OPENSSL_SHA1 # define GL_OPENSSL_NAME 1 # include "gl_openssl.h" # else /* Structure to save state of computation between the single steps. */ struct sha1_ctx { uint32_t A; uint32_t B; uint32_t C; uint32_t D; uint32_t E; uint32_t total[2]; uint32_t buflen; /* ≥ 0, ≤ 128 */ uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ }; /* Initialize structure containing state of computation. */ extern void sha1_init_ctx (struct sha1_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 20 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 20 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *restrict resbuf); /* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha1_buffer (const char *buffer, size_t len, void *restrict resblock); # endif /* Compute SHA1 message digest for bytes read from STREAM. STREAM is an open file stream. Regular files are handled more efficiently. The contents of STREAM from its current position to its end will be read. The case that the last operation on STREAM was an 'ungetc' is not supported. The resulting message digest number will be written into the 20 bytes beginning at RESBLOCK. */ extern int sha1_stream (FILE *stream, void *resblock); # ifdef __cplusplus } # endif #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha256.c����������������������������������������������������������������0000664�0000000�0000000�00000041461�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or memory blocks according to the NIST specification FIPS-180-2. Copyright (C) 2005-2006, 2008-2021 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 David Madore, considerably copypasting from Scott G. Miller's sha1.c */ #include <config.h> #if HAVE_OPENSSL_SHA256 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif #include "sha256.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) bswap_32 (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif #if ! HAVE_OPENSSL_SHA256 /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Takes a pointer to a 256 bit block of data (eight 32 bit ints) and initializes it to the start constants of the SHA256 algorithm. This must be called before using hash in the call to sha256_hash */ void sha256_init_ctx (struct sha256_ctx *ctx) { ctx->state[0] = 0x6a09e667UL; ctx->state[1] = 0xbb67ae85UL; ctx->state[2] = 0x3c6ef372UL; ctx->state[3] = 0xa54ff53aUL; ctx->state[4] = 0x510e527fUL; ctx->state[5] = 0x9b05688cUL; ctx->state[6] = 0x1f83d9abUL; ctx->state[7] = 0x5be0cd19UL; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } void sha224_init_ctx (struct sha256_ctx *ctx) { ctx->state[0] = 0xc1059ed8UL; ctx->state[1] = 0x367cd507UL; ctx->state[2] = 0x3070dd17UL; ctx->state[3] = 0xf70e5939UL; ctx->state[4] = 0xffc00b31UL; ctx->state[5] = 0x68581511UL; ctx->state[6] = 0x64f98fa7UL; ctx->state[7] = 0xbefa4fa4UL; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the value from v into the memory location pointed to by *CP, If your architecture allows unaligned access, this is equivalent to * (__typeof__ (v) *) cp = v */ static void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 32 bytes following RESBUF. The result must be in little endian byte order. */ void * sha256_read_ctx (const struct sha256_ctx *ctx, void *resbuf) { int i; char *r = resbuf; for (i = 0; i < 8; i++) set_uint32 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i])); return resbuf; } void * sha224_read_ctx (const struct sha256_ctx *ctx, void *resbuf) { int i; char *r = resbuf; for (i = 0; i < 7; i++) set_uint32 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i])); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ static void sha256_conclude_ctx (struct sha256_ctx *ctx) { /* Take yet unprocessed bytes into account. */ size_t bytes = ctx->buflen; size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; /* Put the 64-bit file length in *bits* at the end of the buffer. Use set_uint32 rather than a simple assignment, to avoid risk of unaligned access. */ set_uint32 ((char *) &ctx->buffer[size - 2], SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29))); set_uint32 ((char *) &ctx->buffer[size - 1], SWAP (ctx->total[0] << 3)); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes); /* Process last bytes. */ sha256_process_block (ctx->buffer, size * 4, ctx); } void * sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf) { sha256_conclude_ctx (ctx); return sha256_read_ctx (ctx, resbuf); } void * sha224_finish_ctx (struct sha256_ctx *ctx, void *resbuf) { sha256_conclude_ctx (ctx); return sha224_read_ctx (ctx, resbuf); } #endif #ifdef GL_COMPILE_CRYPTO_STREAM #include "af_alg.h" /* Compute message digest for bytes read from STREAM using algorithm ALG. Write the message digest into RESBLOCK, which contains HASHLEN bytes. The initial and finishing operations are INIT_CTX and FINISH_CTX. Return zero if and only if successful. */ static int shaxxx_stream (FILE *stream, char const *alg, void *resblock, ssize_t hashlen, void (*init_ctx) (struct sha256_ctx *), void *(*finish_ctx) (struct sha256_ctx *, void *)) { switch (afalg_stream (stream, alg, resblock, hashlen)) { case 0: return 0; case -EIO: return 1; } char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; struct sha256_ctx ctx; init_ctx (&ctx); size_t sum; /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { /* Either process a partial fread() from this loop, or the fread() in afalg_stream may have gotten EOF. We need to avoid a subsequent fread() as EOF may not be sticky. For details of such systems, see: https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */ if (feof (stream)) goto process_partial_block; n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ sha256_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) sha256_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ finish_ctx (&ctx, resblock); free (buffer); return 0; } int sha256_stream (FILE *stream, void *resblock) { return shaxxx_stream (stream, "sha256", resblock, SHA256_DIGEST_SIZE, sha256_init_ctx, sha256_finish_ctx); } int sha224_stream (FILE *stream, void *resblock) { return shaxxx_stream (stream, "sha224", resblock, SHA224_DIGEST_SIZE, sha224_init_ctx, sha224_finish_ctx); } #endif #if ! HAVE_OPENSSL_SHA256 /* Compute SHA256 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * sha256_buffer (const char *buffer, size_t len, void *resblock) { struct sha256_ctx ctx; /* Initialize the computation context. */ sha256_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ sha256_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sha256_finish_ctx (&ctx, resblock); } void * sha224_buffer (const char *buffer, size_t len, void *resblock) { struct sha256_ctx ctx; /* Initialize the computation context. */ sha224_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ sha256_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sha224_finish_ctx (&ctx, resblock); } void sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap, because ctx->buflen < 64 ≤ (left_over + add) & ~63. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { sha256_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { sha256_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { sha256_process_block (ctx->buffer, 64, ctx); left_over -= 64; /* The regions in the following copy operation cannot overlap, because left_over ≤ 64. */ memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between sha1.c and sha256.c --- */ /* SHA256 round constants */ #define K(I) sha256_round_constants[I] static const uint32_t sha256_round_constants[64] = { 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL, }; /* Round functions. */ #define F2(A,B,C) ( ( A & B ) | ( C & ( A | B ) ) ) #define F1(E,F,G) ( G ^ ( E & ( F ^ G ) ) ) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. Most of this code comes from GnuPG's cipher/sha1.c. */ void sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx) { const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t x[16]; uint32_t a = ctx->state[0]; uint32_t b = ctx->state[1]; uint32_t c = ctx->state[2]; uint32_t d = ctx->state[3]; uint32_t e = ctx->state[4]; uint32_t f = ctx->state[5]; uint32_t g = ctx->state[6]; uint32_t h = ctx->state[7]; uint32_t lolen = len; /* First increment the byte count. FIPS PUB 180-2 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += lolen; ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); #define rol(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) #define S0(x) (rol(x,25)^rol(x,14)^(x>>3)) #define S1(x) (rol(x,15)^rol(x,13)^(x>>10)) #define SS0(x) (rol(x,30)^rol(x,19)^rol(x,10)) #define SS1(x) (rol(x,26)^rol(x,21)^rol(x,7)) #define M(I) ( tm = S1(x[(I-2)&0x0f]) + x[(I-7)&0x0f] \ + S0(x[(I-15)&0x0f]) + x[I&0x0f] \ , x[I&0x0f] = tm ) #define R(A,B,C,D,E,F,G,H,K,M) do { t0 = SS0(A) + F2(A,B,C); \ t1 = H + SS1(E) \ + F1(E,F,G) \ + K \ + M; \ D += t1; H = t0 + t1; \ } while(0) while (words < endp) { uint32_t tm; uint32_t t0, t1; int t; /* FIXME: see sha1.c for a better implementation. */ for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } R( a, b, c, d, e, f, g, h, K( 0), x[ 0] ); R( h, a, b, c, d, e, f, g, K( 1), x[ 1] ); R( g, h, a, b, c, d, e, f, K( 2), x[ 2] ); R( f, g, h, a, b, c, d, e, K( 3), x[ 3] ); R( e, f, g, h, a, b, c, d, K( 4), x[ 4] ); R( d, e, f, g, h, a, b, c, K( 5), x[ 5] ); R( c, d, e, f, g, h, a, b, K( 6), x[ 6] ); R( b, c, d, e, f, g, h, a, K( 7), x[ 7] ); R( a, b, c, d, e, f, g, h, K( 8), x[ 8] ); R( h, a, b, c, d, e, f, g, K( 9), x[ 9] ); R( g, h, a, b, c, d, e, f, K(10), x[10] ); R( f, g, h, a, b, c, d, e, K(11), x[11] ); R( e, f, g, h, a, b, c, d, K(12), x[12] ); R( d, e, f, g, h, a, b, c, K(13), x[13] ); R( c, d, e, f, g, h, a, b, K(14), x[14] ); R( b, c, d, e, f, g, h, a, K(15), x[15] ); R( a, b, c, d, e, f, g, h, K(16), M(16) ); R( h, a, b, c, d, e, f, g, K(17), M(17) ); R( g, h, a, b, c, d, e, f, K(18), M(18) ); R( f, g, h, a, b, c, d, e, K(19), M(19) ); R( e, f, g, h, a, b, c, d, K(20), M(20) ); R( d, e, f, g, h, a, b, c, K(21), M(21) ); R( c, d, e, f, g, h, a, b, K(22), M(22) ); R( b, c, d, e, f, g, h, a, K(23), M(23) ); R( a, b, c, d, e, f, g, h, K(24), M(24) ); R( h, a, b, c, d, e, f, g, K(25), M(25) ); R( g, h, a, b, c, d, e, f, K(26), M(26) ); R( f, g, h, a, b, c, d, e, K(27), M(27) ); R( e, f, g, h, a, b, c, d, K(28), M(28) ); R( d, e, f, g, h, a, b, c, K(29), M(29) ); R( c, d, e, f, g, h, a, b, K(30), M(30) ); R( b, c, d, e, f, g, h, a, K(31), M(31) ); R( a, b, c, d, e, f, g, h, K(32), M(32) ); R( h, a, b, c, d, e, f, g, K(33), M(33) ); R( g, h, a, b, c, d, e, f, K(34), M(34) ); R( f, g, h, a, b, c, d, e, K(35), M(35) ); R( e, f, g, h, a, b, c, d, K(36), M(36) ); R( d, e, f, g, h, a, b, c, K(37), M(37) ); R( c, d, e, f, g, h, a, b, K(38), M(38) ); R( b, c, d, e, f, g, h, a, K(39), M(39) ); R( a, b, c, d, e, f, g, h, K(40), M(40) ); R( h, a, b, c, d, e, f, g, K(41), M(41) ); R( g, h, a, b, c, d, e, f, K(42), M(42) ); R( f, g, h, a, b, c, d, e, K(43), M(43) ); R( e, f, g, h, a, b, c, d, K(44), M(44) ); R( d, e, f, g, h, a, b, c, K(45), M(45) ); R( c, d, e, f, g, h, a, b, K(46), M(46) ); R( b, c, d, e, f, g, h, a, K(47), M(47) ); R( a, b, c, d, e, f, g, h, K(48), M(48) ); R( h, a, b, c, d, e, f, g, K(49), M(49) ); R( g, h, a, b, c, d, e, f, K(50), M(50) ); R( f, g, h, a, b, c, d, e, K(51), M(51) ); R( e, f, g, h, a, b, c, d, K(52), M(52) ); R( d, e, f, g, h, a, b, c, K(53), M(53) ); R( c, d, e, f, g, h, a, b, K(54), M(54) ); R( b, c, d, e, f, g, h, a, K(55), M(55) ); R( a, b, c, d, e, f, g, h, K(56), M(56) ); R( h, a, b, c, d, e, f, g, K(57), M(57) ); R( g, h, a, b, c, d, e, f, K(58), M(58) ); R( f, g, h, a, b, c, d, e, K(59), M(59) ); R( e, f, g, h, a, b, c, d, K(60), M(60) ); R( d, e, f, g, h, a, b, c, K(61), M(61) ); R( c, d, e, f, g, h, a, b, K(62), M(62) ); R( b, c, d, e, f, g, h, a, K(63), M(63) ); a = ctx->state[0] += a; b = ctx->state[1] += b; c = ctx->state[2] += c; d = ctx->state[3] += d; e = ctx->state[4] += e; f = ctx->state[5] += f; g = ctx->state[6] += g; h = ctx->state[7] += h; } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha256.h����������������������������������������������������������������0000664�0000000�0000000�00000010347�14110572173�0016233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for SHA256 and SHA224 sum library functions. Copyright (C) 2005-2006, 2008-2021 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/>. */ #ifndef SHA256_H # define SHA256_H 1 # include <stdio.h> # include <stdint.h> # if HAVE_OPENSSL_SHA256 # include <openssl/sha.h> # endif # ifdef __cplusplus extern "C" { # endif enum { SHA224_DIGEST_SIZE = 224 / 8 }; enum { SHA256_DIGEST_SIZE = 256 / 8 }; # if HAVE_OPENSSL_SHA256 # define GL_OPENSSL_NAME 224 # include "gl_openssl.h" # define GL_OPENSSL_NAME 256 # include "gl_openssl.h" # else /* Structure to save state of computation between the single steps. */ struct sha256_ctx { uint32_t state[8]; uint32_t total[2]; size_t buflen; /* ≥ 0, ≤ 128 */ uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ }; /* Initialize structure containing state of computation. */ extern void sha256_init_ctx (struct sha256_ctx *ctx); extern void sha224_init_ctx (struct sha256_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 32 (28) bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha256_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf); extern void *sha224_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 32 (28) bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha256_read_ctx (const struct sha256_ctx *ctx, void *restrict resbuf); extern void *sha224_read_ctx (const struct sha256_ctx *ctx, void *restrict resbuf); /* Compute SHA256 (SHA224) message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha256_buffer (const char *buffer, size_t len, void *restrict resblock); extern void *sha224_buffer (const char *buffer, size_t len, void *restrict resblock); # endif /* Compute SHA256 (SHA224) message digest for bytes read from STREAM. STREAM is an open file stream. Regular files are handled more efficiently. The contents of STREAM from its current position to its end will be read. The case that the last operation on STREAM was an 'ungetc' is not supported. The resulting message digest number will be written into the 32 (28) bytes beginning at RESBLOCK. */ extern int sha256_stream (FILE *stream, void *resblock); extern int sha224_stream (FILE *stream, void *resblock); # ifdef __cplusplus } # endif #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha512.c����������������������������������������������������������������0000664�0000000�0000000�00000051427�14110572173�0016225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sha512.c - Functions to compute SHA512 and SHA384 message digest of files or memory blocks according to the NIST specification FIPS-180-2. Copyright (C) 2005-2006, 2008-2021 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 David Madore, considerably copypasting from Scott G. Miller's sha1.c */ #include <config.h> #if HAVE_OPENSSL_SHA512 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif #include "sha512.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) bswap_64 (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 128 != 0 # error "invalid BLOCKSIZE" #endif #if ! HAVE_OPENSSL_SHA512 /* This array contains the bytes used to pad the buffer to the next 128-byte boundary. */ static const unsigned char fillbuf[128] = { 0x80, 0 /* , 0, 0, ... */ }; /* Takes a pointer to a 512 bit block of data (eight 64 bit ints) and initializes it to the start constants of the SHA512 algorithm. This must be called before using hash in the call to sha512_hash */ void sha512_init_ctx (struct sha512_ctx *ctx) { ctx->state[0] = u64hilo (0x6a09e667, 0xf3bcc908); ctx->state[1] = u64hilo (0xbb67ae85, 0x84caa73b); ctx->state[2] = u64hilo (0x3c6ef372, 0xfe94f82b); ctx->state[3] = u64hilo (0xa54ff53a, 0x5f1d36f1); ctx->state[4] = u64hilo (0x510e527f, 0xade682d1); ctx->state[5] = u64hilo (0x9b05688c, 0x2b3e6c1f); ctx->state[6] = u64hilo (0x1f83d9ab, 0xfb41bd6b); ctx->state[7] = u64hilo (0x5be0cd19, 0x137e2179); ctx->total[0] = ctx->total[1] = u64lo (0); ctx->buflen = 0; } void sha384_init_ctx (struct sha512_ctx *ctx) { ctx->state[0] = u64hilo (0xcbbb9d5d, 0xc1059ed8); ctx->state[1] = u64hilo (0x629a292a, 0x367cd507); ctx->state[2] = u64hilo (0x9159015a, 0x3070dd17); ctx->state[3] = u64hilo (0x152fecd8, 0xf70e5939); ctx->state[4] = u64hilo (0x67332667, 0xffc00b31); ctx->state[5] = u64hilo (0x8eb44a87, 0x68581511); ctx->state[6] = u64hilo (0xdb0c2e0d, 0x64f98fa7); ctx->state[7] = u64hilo (0x47b5481d, 0xbefa4fa4); ctx->total[0] = ctx->total[1] = u64lo (0); ctx->buflen = 0; } /* Copy the value from V into the memory location pointed to by *CP, If your architecture allows unaligned access, this is equivalent to * (__typeof__ (v) *) cp = v */ static void set_uint64 (char *cp, u64 v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 64 bytes following RESBUF. The result must be in little endian byte order. */ void * sha512_read_ctx (const struct sha512_ctx *ctx, void *resbuf) { int i; char *r = resbuf; for (i = 0; i < 8; i++) set_uint64 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i])); return resbuf; } void * sha384_read_ctx (const struct sha512_ctx *ctx, void *resbuf) { int i; char *r = resbuf; for (i = 0; i < 6; i++) set_uint64 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i])); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ static void sha512_conclude_ctx (struct sha512_ctx *ctx) { /* Take yet unprocessed bytes into account. */ size_t bytes = ctx->buflen; size_t size = (bytes < 112) ? 128 / 8 : 128 * 2 / 8; /* Now count remaining bytes. */ ctx->total[0] = u64plus (ctx->total[0], u64lo (bytes)); if (u64lt (ctx->total[0], u64lo (bytes))) ctx->total[1] = u64plus (ctx->total[1], u64lo (1)); /* Put the 128-bit file length in *bits* at the end of the buffer. Use set_uint64 rather than a simple assignment, to avoid risk of unaligned access. */ set_uint64 ((char *) &ctx->buffer[size - 2], SWAP (u64or (u64shl (ctx->total[1], 3), u64shr (ctx->total[0], 61)))); set_uint64 ((char *) &ctx->buffer[size - 1], SWAP (u64shl (ctx->total[0], 3))); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 8 - bytes); /* Process last bytes. */ sha512_process_block (ctx->buffer, size * 8, ctx); } void * sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf) { sha512_conclude_ctx (ctx); return sha512_read_ctx (ctx, resbuf); } void * sha384_finish_ctx (struct sha512_ctx *ctx, void *resbuf) { sha512_conclude_ctx (ctx); return sha384_read_ctx (ctx, resbuf); } #endif #ifdef GL_COMPILE_CRYPTO_STREAM #include "af_alg.h" /* Compute message digest for bytes read from STREAM using algorithm ALG. Write the message digest into RESBLOCK, which contains HASHLEN bytes. The initial and finishing operations are INIT_CTX and FINISH_CTX. Return zero if and only if successful. */ static int shaxxx_stream (FILE *stream, char const *alg, void *resblock, ssize_t hashlen, void (*init_ctx) (struct sha512_ctx *), void *(*finish_ctx) (struct sha512_ctx *, void *)) { switch (afalg_stream (stream, alg, resblock, hashlen)) { case 0: return 0; case -EIO: return 1; } char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; struct sha512_ctx ctx; init_ctx (&ctx); size_t sum; /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { /* Either process a partial fread() from this loop, or the fread() in afalg_stream may have gotten EOF. We need to avoid a subsequent fread() as EOF may not be sticky. For details of such systems, see: https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */ if (feof (stream)) goto process_partial_block; n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 128 == 0 */ sha512_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) sha512_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ finish_ctx (&ctx, resblock); free (buffer); return 0; } int sha512_stream (FILE *stream, void *resblock) { return shaxxx_stream (stream, "sha512", resblock, SHA512_DIGEST_SIZE, sha512_init_ctx, sha512_finish_ctx); } int sha384_stream (FILE *stream, void *resblock) { return shaxxx_stream (stream, "sha384", resblock, SHA384_DIGEST_SIZE, sha384_init_ctx, sha384_finish_ctx); } #endif #if ! HAVE_OPENSSL_SHA512 /* Compute SHA512 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * sha512_buffer (const char *buffer, size_t len, void *resblock) { struct sha512_ctx ctx; /* Initialize the computation context. */ sha512_init_ctx (&ctx); /* Process whole buffer but last len % 128 bytes. */ sha512_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sha512_finish_ctx (&ctx, resblock); } void * sha384_buffer (const char *buffer, size_t len, void *resblock) { struct sha512_ctx ctx; /* Initialize the computation context. */ sha384_init_ctx (&ctx); /* Process whole buffer but last len % 128 bytes. */ sha512_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sha384_finish_ctx (&ctx, resblock); } void sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 256 - left_over > len ? len : 256 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 128) { sha512_process_block (ctx->buffer, ctx->buflen & ~127, ctx); ctx->buflen &= 127; /* The regions in the following copy operation cannot overlap, because ctx->buflen < 128 ≤ (left_over + add) & ~127. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~127], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 128) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (u64) != 0) if (UNALIGNED_P (buffer)) while (len > 128) { sha512_process_block (memcpy (ctx->buffer, buffer, 128), 128, ctx); buffer = (const char *) buffer + 128; len -= 128; } else #endif { sha512_process_block (buffer, len & ~127, ctx); buffer = (const char *) buffer + (len & ~127); len &= 127; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 128) { sha512_process_block (ctx->buffer, 128, ctx); left_over -= 128; /* The regions in the following copy operation cannot overlap, because left_over ≤ 128. */ memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between sha1.c and sha512.c --- */ /* SHA512 round constants */ #define K(I) sha512_round_constants[I] static u64 const sha512_round_constants[80] = { u64init (0x428a2f98, 0xd728ae22), u64init (0x71374491, 0x23ef65cd), u64init (0xb5c0fbcf, 0xec4d3b2f), u64init (0xe9b5dba5, 0x8189dbbc), u64init (0x3956c25b, 0xf348b538), u64init (0x59f111f1, 0xb605d019), u64init (0x923f82a4, 0xaf194f9b), u64init (0xab1c5ed5, 0xda6d8118), u64init (0xd807aa98, 0xa3030242), u64init (0x12835b01, 0x45706fbe), u64init (0x243185be, 0x4ee4b28c), u64init (0x550c7dc3, 0xd5ffb4e2), u64init (0x72be5d74, 0xf27b896f), u64init (0x80deb1fe, 0x3b1696b1), u64init (0x9bdc06a7, 0x25c71235), u64init (0xc19bf174, 0xcf692694), u64init (0xe49b69c1, 0x9ef14ad2), u64init (0xefbe4786, 0x384f25e3), u64init (0x0fc19dc6, 0x8b8cd5b5), u64init (0x240ca1cc, 0x77ac9c65), u64init (0x2de92c6f, 0x592b0275), u64init (0x4a7484aa, 0x6ea6e483), u64init (0x5cb0a9dc, 0xbd41fbd4), u64init (0x76f988da, 0x831153b5), u64init (0x983e5152, 0xee66dfab), u64init (0xa831c66d, 0x2db43210), u64init (0xb00327c8, 0x98fb213f), u64init (0xbf597fc7, 0xbeef0ee4), u64init (0xc6e00bf3, 0x3da88fc2), u64init (0xd5a79147, 0x930aa725), u64init (0x06ca6351, 0xe003826f), u64init (0x14292967, 0x0a0e6e70), u64init (0x27b70a85, 0x46d22ffc), u64init (0x2e1b2138, 0x5c26c926), u64init (0x4d2c6dfc, 0x5ac42aed), u64init (0x53380d13, 0x9d95b3df), u64init (0x650a7354, 0x8baf63de), u64init (0x766a0abb, 0x3c77b2a8), u64init (0x81c2c92e, 0x47edaee6), u64init (0x92722c85, 0x1482353b), u64init (0xa2bfe8a1, 0x4cf10364), u64init (0xa81a664b, 0xbc423001), u64init (0xc24b8b70, 0xd0f89791), u64init (0xc76c51a3, 0x0654be30), u64init (0xd192e819, 0xd6ef5218), u64init (0xd6990624, 0x5565a910), u64init (0xf40e3585, 0x5771202a), u64init (0x106aa070, 0x32bbd1b8), u64init (0x19a4c116, 0xb8d2d0c8), u64init (0x1e376c08, 0x5141ab53), u64init (0x2748774c, 0xdf8eeb99), u64init (0x34b0bcb5, 0xe19b48a8), u64init (0x391c0cb3, 0xc5c95a63), u64init (0x4ed8aa4a, 0xe3418acb), u64init (0x5b9cca4f, 0x7763e373), u64init (0x682e6ff3, 0xd6b2b8a3), u64init (0x748f82ee, 0x5defb2fc), u64init (0x78a5636f, 0x43172f60), u64init (0x84c87814, 0xa1f0ab72), u64init (0x8cc70208, 0x1a6439ec), u64init (0x90befffa, 0x23631e28), u64init (0xa4506ceb, 0xde82bde9), u64init (0xbef9a3f7, 0xb2c67915), u64init (0xc67178f2, 0xe372532b), u64init (0xca273ece, 0xea26619c), u64init (0xd186b8c7, 0x21c0c207), u64init (0xeada7dd6, 0xcde0eb1e), u64init (0xf57d4f7f, 0xee6ed178), u64init (0x06f067aa, 0x72176fba), u64init (0x0a637dc5, 0xa2c898a6), u64init (0x113f9804, 0xbef90dae), u64init (0x1b710b35, 0x131c471b), u64init (0x28db77f5, 0x23047d84), u64init (0x32caab7b, 0x40c72493), u64init (0x3c9ebe0a, 0x15c9bebc), u64init (0x431d67c4, 0x9c100d4c), u64init (0x4cc5d4be, 0xcb3e42b6), u64init (0x597f299c, 0xfc657e2a), u64init (0x5fcb6fab, 0x3ad6faec), u64init (0x6c44198c, 0x4a475817), }; /* Round functions. */ #define F2(A, B, C) u64or (u64and (A, B), u64and (C, u64or (A, B))) #define F1(E, F, G) u64xor (G, u64and (E, u64xor (F, G))) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 128 == 0. Most of this code comes from GnuPG's cipher/sha1.c. */ void sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx) { u64 const *words = buffer; u64 const *endp = words + len / sizeof (u64); u64 x[16]; u64 a = ctx->state[0]; u64 b = ctx->state[1]; u64 c = ctx->state[2]; u64 d = ctx->state[3]; u64 e = ctx->state[4]; u64 f = ctx->state[5]; u64 g = ctx->state[6]; u64 h = ctx->state[7]; u64 lolen = u64size (len); /* First increment the byte count. FIPS PUB 180-2 specifies the possible length of the file up to 2^128 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] = u64plus (ctx->total[0], lolen); ctx->total[1] = u64plus (ctx->total[1], u64plus (u64size (len >> 31 >> 31 >> 2), u64lo (u64lt (ctx->total[0], lolen)))); #define S0(x) u64xor (u64rol(x, 63), u64xor (u64rol (x, 56), u64shr (x, 7))) #define S1(x) u64xor (u64rol (x, 45), u64xor (u64rol (x, 3), u64shr (x, 6))) #define SS0(x) u64xor (u64rol (x, 36), u64xor (u64rol (x, 30), u64rol (x, 25))) #define SS1(x) u64xor (u64rol(x, 50), u64xor (u64rol (x, 46), u64rol (x, 23))) #define M(I) (x[(I) & 15] \ = u64plus (x[(I) & 15], \ u64plus (S1 (x[((I) - 2) & 15]), \ u64plus (x[((I) - 7) & 15], \ S0 (x[((I) - 15) & 15]))))) #define R(A, B, C, D, E, F, G, H, K, M) \ do \ { \ u64 t0 = u64plus (SS0 (A), F2 (A, B, C)); \ u64 t1 = \ u64plus (H, u64plus (SS1 (E), \ u64plus (F1 (E, F, G), u64plus (K, M)))); \ D = u64plus (D, t1); \ H = u64plus (t0, t1); \ } \ while (0) while (words < endp) { int t; /* FIXME: see sha1.c for a better implementation. */ for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } R( a, b, c, d, e, f, g, h, K( 0), x[ 0] ); R( h, a, b, c, d, e, f, g, K( 1), x[ 1] ); R( g, h, a, b, c, d, e, f, K( 2), x[ 2] ); R( f, g, h, a, b, c, d, e, K( 3), x[ 3] ); R( e, f, g, h, a, b, c, d, K( 4), x[ 4] ); R( d, e, f, g, h, a, b, c, K( 5), x[ 5] ); R( c, d, e, f, g, h, a, b, K( 6), x[ 6] ); R( b, c, d, e, f, g, h, a, K( 7), x[ 7] ); R( a, b, c, d, e, f, g, h, K( 8), x[ 8] ); R( h, a, b, c, d, e, f, g, K( 9), x[ 9] ); R( g, h, a, b, c, d, e, f, K(10), x[10] ); R( f, g, h, a, b, c, d, e, K(11), x[11] ); R( e, f, g, h, a, b, c, d, K(12), x[12] ); R( d, e, f, g, h, a, b, c, K(13), x[13] ); R( c, d, e, f, g, h, a, b, K(14), x[14] ); R( b, c, d, e, f, g, h, a, K(15), x[15] ); R( a, b, c, d, e, f, g, h, K(16), M(16) ); R( h, a, b, c, d, e, f, g, K(17), M(17) ); R( g, h, a, b, c, d, e, f, K(18), M(18) ); R( f, g, h, a, b, c, d, e, K(19), M(19) ); R( e, f, g, h, a, b, c, d, K(20), M(20) ); R( d, e, f, g, h, a, b, c, K(21), M(21) ); R( c, d, e, f, g, h, a, b, K(22), M(22) ); R( b, c, d, e, f, g, h, a, K(23), M(23) ); R( a, b, c, d, e, f, g, h, K(24), M(24) ); R( h, a, b, c, d, e, f, g, K(25), M(25) ); R( g, h, a, b, c, d, e, f, K(26), M(26) ); R( f, g, h, a, b, c, d, e, K(27), M(27) ); R( e, f, g, h, a, b, c, d, K(28), M(28) ); R( d, e, f, g, h, a, b, c, K(29), M(29) ); R( c, d, e, f, g, h, a, b, K(30), M(30) ); R( b, c, d, e, f, g, h, a, K(31), M(31) ); R( a, b, c, d, e, f, g, h, K(32), M(32) ); R( h, a, b, c, d, e, f, g, K(33), M(33) ); R( g, h, a, b, c, d, e, f, K(34), M(34) ); R( f, g, h, a, b, c, d, e, K(35), M(35) ); R( e, f, g, h, a, b, c, d, K(36), M(36) ); R( d, e, f, g, h, a, b, c, K(37), M(37) ); R( c, d, e, f, g, h, a, b, K(38), M(38) ); R( b, c, d, e, f, g, h, a, K(39), M(39) ); R( a, b, c, d, e, f, g, h, K(40), M(40) ); R( h, a, b, c, d, e, f, g, K(41), M(41) ); R( g, h, a, b, c, d, e, f, K(42), M(42) ); R( f, g, h, a, b, c, d, e, K(43), M(43) ); R( e, f, g, h, a, b, c, d, K(44), M(44) ); R( d, e, f, g, h, a, b, c, K(45), M(45) ); R( c, d, e, f, g, h, a, b, K(46), M(46) ); R( b, c, d, e, f, g, h, a, K(47), M(47) ); R( a, b, c, d, e, f, g, h, K(48), M(48) ); R( h, a, b, c, d, e, f, g, K(49), M(49) ); R( g, h, a, b, c, d, e, f, K(50), M(50) ); R( f, g, h, a, b, c, d, e, K(51), M(51) ); R( e, f, g, h, a, b, c, d, K(52), M(52) ); R( d, e, f, g, h, a, b, c, K(53), M(53) ); R( c, d, e, f, g, h, a, b, K(54), M(54) ); R( b, c, d, e, f, g, h, a, K(55), M(55) ); R( a, b, c, d, e, f, g, h, K(56), M(56) ); R( h, a, b, c, d, e, f, g, K(57), M(57) ); R( g, h, a, b, c, d, e, f, K(58), M(58) ); R( f, g, h, a, b, c, d, e, K(59), M(59) ); R( e, f, g, h, a, b, c, d, K(60), M(60) ); R( d, e, f, g, h, a, b, c, K(61), M(61) ); R( c, d, e, f, g, h, a, b, K(62), M(62) ); R( b, c, d, e, f, g, h, a, K(63), M(63) ); R( a, b, c, d, e, f, g, h, K(64), M(64) ); R( h, a, b, c, d, e, f, g, K(65), M(65) ); R( g, h, a, b, c, d, e, f, K(66), M(66) ); R( f, g, h, a, b, c, d, e, K(67), M(67) ); R( e, f, g, h, a, b, c, d, K(68), M(68) ); R( d, e, f, g, h, a, b, c, K(69), M(69) ); R( c, d, e, f, g, h, a, b, K(70), M(70) ); R( b, c, d, e, f, g, h, a, K(71), M(71) ); R( a, b, c, d, e, f, g, h, K(72), M(72) ); R( h, a, b, c, d, e, f, g, K(73), M(73) ); R( g, h, a, b, c, d, e, f, K(74), M(74) ); R( f, g, h, a, b, c, d, e, K(75), M(75) ); R( e, f, g, h, a, b, c, d, K(76), M(76) ); R( d, e, f, g, h, a, b, c, K(77), M(77) ); R( c, d, e, f, g, h, a, b, K(78), M(78) ); R( b, c, d, e, f, g, h, a, K(79), M(79) ); a = ctx->state[0] = u64plus (ctx->state[0], a); b = ctx->state[1] = u64plus (ctx->state[1], b); c = ctx->state[2] = u64plus (ctx->state[2], c); d = ctx->state[3] = u64plus (ctx->state[3], d); e = ctx->state[4] = u64plus (ctx->state[4], e); f = ctx->state[5] = u64plus (ctx->state[5], f); g = ctx->state[6] = u64plus (ctx->state[6], g); h = ctx->state[7] = u64plus (ctx->state[7], h); } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sha512.h����������������������������������������������������������������0000664�0000000�0000000�00000010471�14110572173�0016224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for SHA512 and SHA384 sum library functions. Copyright (C) 2005-2006, 2008-2021 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/>. */ #ifndef SHA512_H # define SHA512_H 1 # include <stdio.h> # include "u64.h" # if HAVE_OPENSSL_SHA512 # include <openssl/sha.h> # endif # ifdef __cplusplus extern "C" { # endif enum { SHA384_DIGEST_SIZE = 384 / 8 }; enum { SHA512_DIGEST_SIZE = 512 / 8 }; # if HAVE_OPENSSL_SHA512 # define GL_OPENSSL_NAME 384 # include "gl_openssl.h" # define GL_OPENSSL_NAME 512 # include "gl_openssl.h" # else /* Structure to save state of computation between the single steps. */ struct sha512_ctx { u64 state[8]; u64 total[2]; size_t buflen; /* ≥ 0, ≤ 256 */ u64 buffer[32]; /* 256 bytes; the first buflen bytes are in use */ }; /* Initialize structure containing state of computation. */ extern void sha512_init_ctx (struct sha512_ctx *ctx); extern void sha384_init_ctx (struct sha512_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 128!!! */ extern void sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 128. */ extern void sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 64 (48) bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha512_finish_ctx (struct sha512_ctx *ctx, void *restrict resbuf); extern void *sha384_finish_ctx (struct sha512_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 64 (48) bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ extern void *sha512_read_ctx (const struct sha512_ctx *ctx, void *restrict resbuf); extern void *sha384_read_ctx (const struct sha512_ctx *ctx, void *restrict resbuf); /* Compute SHA512 (SHA384) message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha512_buffer (const char *buffer, size_t len, void *restrict resblock); extern void *sha384_buffer (const char *buffer, size_t len, void *restrict resblock); # endif /* Compute SHA512 (SHA384) message digest for bytes read from STREAM. STREAM is an open file stream. Regular files are handled more efficiently. The contents of STREAM from its current position to its end will be read. The case that the last operation on STREAM was an 'ungetc' is not supported. The resulting message digest number will be written into the 64 (48) bytes beginning at RESBLOCK. */ extern int sha512_stream (FILE *stream, void *resblock); extern int sha384_stream (FILE *stream, void *resblock); # ifdef __cplusplus } # endif #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/shutdown.c��������������������������������������������������������������0000664�0000000�0000000�00000002366�14110572173�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* shutdown.c --- wrappers for Windows shutdown function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef shutdown int rpl_shutdown (int fd, int how) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = shutdown (sock, how); if (r < 0) set_winsock_errno (); return r; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sig-handler.c�����������������������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience declarations when working with <signal.h>. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define SIG_HANDLER_INLINE _GL_EXTERN_INLINE #include "sig-handler.h" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sig-handler.h�����������������������������������������������������������0000664�0000000�0000000�00000003563�14110572173�0017422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience declarations when working with <signal.h>. Copyright (C) 2008-2021 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/>. */ #ifndef _GL_SIG_HANDLER_H #define _GL_SIG_HANDLER_H #include <signal.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SIG_HANDLER_INLINE # define SIG_HANDLER_INLINE _GL_INLINE #endif /* Convenience type when working with signal handlers. */ typedef void (*sa_handler_t) (int); /* Return the handler of a signal, as a sa_handler_t value regardless of its true type. The resulting function can be compared to special values like SIG_IGN but it is not portable to call it. */ SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE get_handler (struct sigaction const *a) { /* POSIX says that special values like SIG_IGN can only occur when action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, for example, sa_sigaction and sa_handler are aliases and a signal is ignored if sa_sigaction (after casting) equals SIG_IGN. In this case, this implementation relies on the fact that the two are aliases, and simply returns sa_handler. */ return a->sa_handler; } _GL_INLINE_HEADER_END #endif /* _GL_SIG_HANDLER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sig2str.c���������������������������������������������������������������0000664�0000000�0000000�00000016350�14110572173�0016613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sig2str.c -- convert between signal names and numbers Copyright (C) 2002, 2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <limits.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include "sig2str.h" #ifndef SIGRTMIN # define SIGRTMIN 0 # undef SIGRTMAX #endif #ifndef SIGRTMAX # define SIGRTMAX (SIGRTMIN - 1) #endif #define NUMNAME(name) { SIG##name, #name } /* Signal names and numbers. Put the preferred name first. */ static struct numname { int num; char const name[8]; } numname_table[] = { /* Signals required by POSIX 1003.1-2001 base, listed in traditional numeric order where possible. */ #ifdef SIGHUP NUMNAME (HUP), #endif #ifdef SIGINT NUMNAME (INT), #endif #ifdef SIGQUIT NUMNAME (QUIT), #endif #ifdef SIGILL NUMNAME (ILL), #endif #ifdef SIGTRAP NUMNAME (TRAP), #endif #ifdef SIGABRT NUMNAME (ABRT), #endif #ifdef SIGFPE NUMNAME (FPE), #endif #ifdef SIGKILL NUMNAME (KILL), #endif #ifdef SIGSEGV NUMNAME (SEGV), #endif /* On Haiku, SIGSEGV == SIGBUS, but we prefer SIGSEGV to match strsignal.c output, so SIGBUS must be listed second. */ #ifdef SIGBUS NUMNAME (BUS), #endif #ifdef SIGPIPE NUMNAME (PIPE), #endif #ifdef SIGALRM NUMNAME (ALRM), #endif #ifdef SIGTERM NUMNAME (TERM), #endif #ifdef SIGUSR1 NUMNAME (USR1), #endif #ifdef SIGUSR2 NUMNAME (USR2), #endif #ifdef SIGCHLD NUMNAME (CHLD), #endif #ifdef SIGURG NUMNAME (URG), #endif #ifdef SIGSTOP NUMNAME (STOP), #endif #ifdef SIGTSTP NUMNAME (TSTP), #endif #ifdef SIGCONT NUMNAME (CONT), #endif #ifdef SIGTTIN NUMNAME (TTIN), #endif #ifdef SIGTTOU NUMNAME (TTOU), #endif /* Signals required by POSIX 1003.1-2001 with the XSI extension. */ #ifdef SIGSYS NUMNAME (SYS), #endif #ifdef SIGPOLL NUMNAME (POLL), #endif #ifdef SIGVTALRM NUMNAME (VTALRM), #endif #ifdef SIGPROF NUMNAME (PROF), #endif #ifdef SIGXCPU NUMNAME (XCPU), #endif #ifdef SIGXFSZ NUMNAME (XFSZ), #endif /* Unix Version 7. */ #ifdef SIGIOT NUMNAME (IOT), /* Older name for ABRT. */ #endif #ifdef SIGEMT NUMNAME (EMT), #endif /* USG Unix. */ #ifdef SIGPHONE NUMNAME (PHONE), #endif #ifdef SIGWIND NUMNAME (WIND), #endif /* Unix System V. */ #ifdef SIGCLD NUMNAME (CLD), #endif #ifdef SIGPWR NUMNAME (PWR), #endif /* GNU/Linux 2.2 and Solaris 8. */ #ifdef SIGCANCEL NUMNAME (CANCEL), #endif #ifdef SIGLWP NUMNAME (LWP), #endif #ifdef SIGWAITING NUMNAME (WAITING), #endif #ifdef SIGFREEZE NUMNAME (FREEZE), #endif #ifdef SIGTHAW NUMNAME (THAW), #endif #ifdef SIGLOST NUMNAME (LOST), #endif #ifdef SIGWINCH NUMNAME (WINCH), #endif /* GNU/Linux 2.2. */ #ifdef SIGINFO NUMNAME (INFO), #endif #ifdef SIGIO NUMNAME (IO), #endif #ifdef SIGSTKFLT NUMNAME (STKFLT), #endif /* AIX 7. */ #ifdef SIGCPUFAIL NUMNAME (CPUFAIL), #endif /* AIX 5L. */ #ifdef SIGDANGER NUMNAME (DANGER), #endif #ifdef SIGGRANT NUMNAME (GRANT), #endif #ifdef SIGMIGRATE NUMNAME (MIGRATE), #endif #ifdef SIGMSG NUMNAME (MSG), #endif #ifdef SIGPRE NUMNAME (PRE), #endif #ifdef SIGRETRACT NUMNAME (RETRACT), #endif #ifdef SIGSAK NUMNAME (SAK), #endif #ifdef SIGSOUND NUMNAME (SOUND), #endif /* Older AIX versions. */ #ifdef SIGALRM1 NUMNAME (ALRM1), /* unknown; taken from Bash 2.05 */ #endif #ifdef SIGKAP NUMNAME (KAP), /* Older name for SIGGRANT. */ #endif #ifdef SIGVIRT NUMNAME (VIRT), /* unknown; taken from Bash 2.05 */ #endif #ifdef SIGWINDOW NUMNAME (WINDOW), /* Older name for SIGWINCH. */ #endif /* OpenBSD. */ #ifdef SIGTHR NUMNAME (THR), #endif /* BeOS, Haiku */ #ifdef SIGKILLTHR NUMNAME (KILLTHR), #endif /* Older HP-UX versions. */ #ifdef SIGDIL NUMNAME (DIL), #endif /* native Windows */ #ifdef SIGBREAK NUMNAME (BREAK), #endif /* Korn shell and Bash, of uncertain vintage. */ { 0, "EXIT" } }; #define NUMNAME_ENTRIES (sizeof numname_table / sizeof numname_table[0]) /* ISDIGIT differs from isdigit, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char or EOF. - It's typically faster. POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless it's important to use the locale's definition of "digit" even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* Convert the signal name SIGNAME to a signal number. Return the signal number if successful, -1 otherwise. */ static int str2signum (char const *signame) { if (ISDIGIT (*signame)) { char *endp; long int n = strtol (signame, &endp, 10); if (! *endp && n <= SIGNUM_BOUND) return n; } else { unsigned int i; for (i = 0; i < NUMNAME_ENTRIES; i++) if (strcmp (numname_table[i].name, signame) == 0) return numname_table[i].num; { char *endp; int rtmin = SIGRTMIN; int rtmax = SIGRTMAX; if (0 < rtmin && strncmp (signame, "RTMIN", 5) == 0) { long int n = strtol (signame + 5, &endp, 10); if (! *endp && 0 <= n && n <= rtmax - rtmin) return rtmin + n; } else if (0 < rtmax && strncmp (signame, "RTMAX", 5) == 0) { long int n = strtol (signame + 5, &endp, 10); if (! *endp && rtmin - rtmax <= n && n <= 0) return rtmax + n; } } } return -1; } /* Convert the signal name SIGNAME to the signal number *SIGNUM. Return 0 if successful, -1 otherwise. */ int str2sig (char const *signame, int *signum) { *signum = str2signum (signame); return *signum < 0 ? -1 : 0; } /* Convert SIGNUM to a signal name in SIGNAME. SIGNAME must point to a buffer of at least SIG2STR_MAX bytes. Return 0 if successful, -1 otherwise. */ int sig2str (int signum, char *signame) { unsigned int i; for (i = 0; i < NUMNAME_ENTRIES; i++) if (numname_table[i].num == signum) { strcpy (signame, numname_table[i].name); return 0; } { int rtmin = SIGRTMIN; int rtmax = SIGRTMAX; int base, delta; if (! (rtmin <= signum && signum <= rtmax)) return -1; if (signum <= rtmin + (rtmax - rtmin) / 2) { strcpy (signame, "RTMIN"); base = rtmin; } else { strcpy (signame, "RTMAX"); base = rtmax; } delta = signum - base; if (delta != 0) sprintf (signame + 5, "%+d", delta); return 0; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sig2str.h���������������������������������������������������������������0000664�0000000�0000000�00000002770�14110572173�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sig2str.h -- convert between signal names and numbers Copyright (C) 2002, 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <signal.h> /* Don't override system declarations of SIG2STR_MAX, sig2str, str2sig. */ #ifndef SIG2STR_MAX # include "intprops.h" /* Size of a buffer needed to hold a signal name like "HUP". */ # define SIG2STR_MAX (sizeof "SIGRTMAX" + INT_STRLEN_BOUND (int) - 1) #ifdef __cplusplus extern "C" { #endif int sig2str (int, char *); int str2sig (char const *, int *); #ifdef __cplusplus } #endif #endif /* An upper bound on signal numbers allowed by the system. */ #if defined _sys_nsig # define SIGNUM_BOUND (_sys_nsig - 1) #elif defined _SIG_MAXSIG # define SIGNUM_BOUND (_SIG_MAXSIG - 2) /* FreeBSD >= 7. */ #elif defined NSIG # define SIGNUM_BOUND (NSIG - 1) #else # define SIGNUM_BOUND 64 #endif ��������gnulib-20210822~d383792/lib/sigabbrev_np.c����������������������������������������������������������0000664�0000000�0000000�00000015240�14110572173�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abbreviated name of signals. Copyright (C) 2020-2021 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 <string.h> #include <signal.h> const char * sigabbrev_np (int sig) { switch (sig) { /* Signals specified by ISO C. */ case SIGABRT: return "ABRT"; case SIGFPE: return "FPE"; case SIGILL: return "ILL"; case SIGINT: return "INT"; case SIGSEGV: return "SEGV"; case SIGTERM: return "TERM"; /* Signals specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> */ #if defined SIGALRM case SIGALRM: return "ALRM"; #endif #if defined SIGBUS case SIGBUS: return "BUS"; #endif #if defined SIGCHLD case SIGCHLD: return "CHLD"; #endif #if defined SIGCONT case SIGCONT: return "CONT"; #endif #if defined SIGHUP case SIGHUP: return "HUP"; #endif #if defined SIGKILL case SIGKILL: return "KILL"; #endif #if defined SIGPIPE case SIGPIPE: return "PIPE"; #endif #if defined SIGQUIT case SIGQUIT: return "QUIT"; #endif #if defined SIGSTOP case SIGSTOP: return "STOP"; #endif #if defined SIGTSTP case SIGTSTP: return "TSTP"; #endif #if defined SIGTTIN case SIGTTIN: return "TTIN"; #endif #if defined SIGTTOU case SIGTTOU: return "TTOU"; #endif #if defined SIGUSR1 case SIGUSR1: return "USR1"; #endif #if defined SIGUSR2 case SIGUSR2: return "USR2"; #endif #if defined SIGPOLL case SIGPOLL: return "POLL"; #endif #if defined SIGPROF case SIGPROF: return "PROF"; #endif #if defined SIGSYS case SIGSYS: return "SYS"; #endif #if defined SIGTRAP case SIGTRAP: return "TRAP"; #endif #if defined SIGURG case SIGURG: return "URG"; #endif #if defined SIGVTALRM case SIGVTALRM: return "VTALRM"; #endif #if defined SIGXCPU case SIGXCPU: return "XCPU"; #endif #if defined SIGXFSZ case SIGXFSZ: return "XFSZ"; #endif /* Other signals on other systems. */ /* native Windows */ #if defined SIGBREAK case SIGBREAK: return "BREAK"; #endif /* IRIX */ #if defined SIGCKPT case SIGCKPT: return "CKPT"; #endif /* Linux, IRIX, Cygwin */ #if defined SIGCLD && SIGCLD != SIGCHLD case SIGCLD: return "CLD"; #endif /* AIX */ #if defined SIGCPUFAIL case SIGCPUFAIL: return "CPUFAIL"; #endif /* AIX */ #if defined SIGDANGER case SIGDANGER: return "DANGER"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */ #if defined SIGEMT case SIGEMT: return "EMT"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined SIGINFO case SIGINFO: return "INFO"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin */ #if defined SIGIO && SIGIO != SIGPOLL case SIGIO: return "IO"; #endif /* Linux, IRIX, Cygwin, mingw */ #if defined SIGIOT && SIGIOT != SIGABRT case SIGIOT: return "IOT"; #endif /* AIX */ #if defined SIGKAP case SIGKAP: return "KAP"; #endif /* Haiku */ #if defined SIGKILLTHR case SIGKILLTHR: return "KILLTHR"; #endif /* Minix */ #if defined SIGKMEM case SIGKMEM: return "KMEM"; #endif /* Minix */ #if defined SIGKMESS case SIGKMESS: return "KMESS"; #endif /* Minix */ #if defined SIGKSIG case SIGKSIG: return "KSIG"; #endif /* Minix */ #if defined SIGKSIGSM case SIGKSIGSM: return "KSIGSM"; #endif /* FreeBSD */ #if defined SIGLIBRT case SIGLIBRT: return "LIBRT"; #endif /* Cygwin */ #if defined SIGLOST && SIGLOST != SIGABRT && SIGLOST != SIGPWR case SIGLOST: return "LOST"; #endif /* AIX */ #if defined SIGMIGRATE case SIGMIGRATE: return "MIGRATE"; #endif /* AIX */ #if defined SIGMSG case SIGMSG: return "MSG"; #endif /* AIX */ #if defined SIGPRE case SIGPRE: return "PRE"; #endif /* IRIX */ #if defined SIGPTINTR case SIGPTINTR: return "PTINTR"; #endif /* IRIX */ #if defined SIGPTRESCHED case SIGPTRESCHED:return "PTRESCHED"; #endif /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */ #if defined SIGPWR case SIGPWR: return "PWR"; #endif /* AIX */ #if defined SIGRECONFIG case SIGRECONFIG: return "RECONFIG"; #endif /* AIX */ #if defined SIGRECOVERY case SIGRECOVERY: return "RECOVERY"; #endif /* IRIX */ #if defined SIGRESTART case SIGRESTART: return "RESTART"; #endif /* AIX */ #if defined SIGRETRACT case SIGRETRACT: return "RETRACT"; #endif /* AIX */ #if defined SIGSAK case SIGSAK: return "SAK"; #endif /* Minix */ #if defined SIGSNDELAY case SIGSNDELAY: return "SNDELAY"; #endif /* AIX */ #if defined SIGSOUND case SIGSOUND: return "SOUND"; #endif /* Linux */ #if defined SIGSTKFLT case SIGSTKFLT: return "STKFLT"; #endif /* AIX */ #if defined SIGSYSERROR case SIGSYSERROR: return "SYSERROR"; #endif /* AIX */ #if defined SIGTALRM case SIGTALRM: return "TALRM"; #endif /* FreeBSD, OpenBSD */ #if defined SIGTHR case SIGTHR: return "THR"; #endif /* IRIX */ #if defined SIGUME case SIGUME: return "UME"; #endif /* AIX */ #if defined SIGVIRT case SIGVIRT: return "VIRT"; #endif /* AIX */ #if defined SIGWAITING case SIGWAITING: return "WAITING"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, Haiku */ #if defined SIGWINCH case SIGWINCH: return "WINCH"; #endif default: return NULL; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigaction.c�������������������������������������������������������������0000664�0000000�0000000�00000016136�14110572173�0017200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stdint.h> #include <stdlib.h> /* This implementation of sigaction is tailored to native Windows behavior: signal() has SysV semantics (ie. the handler is uninstalled before it is invoked). This is an inherent data race if an asynchronous signal is sent twice in a row before we can reinstall our handler, but there's nothing we can do about it. Meanwhile, sigprocmask() is not present, and while we can use the gnulib replacement to provide critical sections, it too suffers from potential data races in the face of an ill-timed asynchronous signal. And we compound the situation by reading static storage in a signal handler, which POSIX warns is not generically async-signal-safe. Oh well. Additionally: - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD is not defined. - We don't implement SA_ONSTACK, because sigaltstack() is not present. - We ignore SA_RESTART, because blocking native Windows API calls are not interrupted anyway when an asynchronous signal occurs, and the MSVCRT runtime never sets errno to EINTR. - We don't implement SA_SIGINFO because it is impossible to do so portably. POSIX states that an application should not mix signal() and sigaction(). We support the use of signal() within the gnulib sigprocmask() substitute, but all other application code linked with this module should stick with only sigaction(). */ /* Check some of our assumptions. */ #if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT # error "Revisit the assumptions made in the sigaction module" #endif /* Out-of-range substitutes make a good fallback for uncatchable signals. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if defined _WIN32 && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif /* A signal handler. */ typedef void (*handler_t) (int signal); /* Set of current actions. If sa_handler for an entry is NULL, then that signal is not currently handled by the sigaction handler. */ static struct sigaction volatile action_array[NSIG] /* = 0 */; /* Signal handler that is installed for signals. */ static void sigaction_handler (int sig) { handler_t handler; sigset_t mask; sigset_t oldmask; int saved_errno = errno; if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler) { /* Unexpected situation; be careful to avoid recursive abort. */ if (sig == SIGABRT) signal (SIGABRT, SIG_DFL); abort (); } /* Reinstall the signal handler when required; otherwise update the bookkeeping so that the user's handler may call sigaction and get accurate results. We know the signal isn't currently blocked, or we wouldn't be in its handler, therefore we know that we are not interrupting a sigaction() call. There is a race where any asynchronous instance of the same signal occurring before we reinstall the handler will trigger the default handler; oh well. */ handler = action_array[sig].sa_handler; if ((action_array[sig].sa_flags & SA_RESETHAND) == 0) signal (sig, sigaction_handler); else action_array[sig].sa_handler = NULL; /* Block appropriate signals. */ mask = action_array[sig].sa_mask; if ((action_array[sig].sa_flags & SA_NODEFER) == 0) sigaddset (&mask, sig); sigprocmask (SIG_BLOCK, &mask, &oldmask); /* Invoke the user's handler, then restore prior mask. */ errno = saved_errno; handler (sig); saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; } /* Change and/or query the action that will be taken on delivery of signal SIG. If not NULL, ACT describes the new behavior. If not NULL, OACT is set to the prior behavior. Return 0 on success, or set errno and return -1 on failure. */ int sigaction (int sig, const struct sigaction *restrict act, struct sigaction *restrict oact) { sigset_t mask; sigset_t oldmask; int saved_errno; if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP || (act && act->sa_handler == SIG_ERR)) { errno = EINVAL; return -1; } #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif /* POSIX requires sigaction() to be async-signal-safe. In other words, if an asynchronous signal can occur while we are anywhere inside this function, the user's handler could then call sigaction() recursively and expect consistent results. We meet this rule by using sigprocmask to block all signals before modifying any data structure that could be read from a signal handler; this works since we know that the gnulib sigprocmask replacement does not try to use sigaction() from its handler. */ if (!act && !oact) return 0; sigfillset (&mask); sigprocmask (SIG_BLOCK, &mask, &oldmask); if (oact) { if (action_array[sig].sa_handler) *oact = action_array[sig]; else { /* Safe to change the handler at will here, since all signals are currently blocked. */ oact->sa_handler = signal (sig, SIG_DFL); if (oact->sa_handler == SIG_ERR) goto failure; signal (sig, oact->sa_handler); oact->sa_flags = SA_RESETHAND | SA_NODEFER; sigemptyset (&oact->sa_mask); } } if (act) { /* Safe to install the handler before updating action_array, since all signals are currently blocked. */ if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN) { if (signal (sig, act->sa_handler) == SIG_ERR) goto failure; action_array[sig].sa_handler = NULL; } else { if (signal (sig, sigaction_handler) == SIG_ERR) goto failure; action_array[sig] = *act; } } sigprocmask (SIG_SETMASK, &oldmask, NULL); return 0; failure: saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigdescr_np.c�����������������������������������������������������������0000664�0000000�0000000�00000024117�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* English descriptions of signals. Copyright (C) 2020-2021 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 <string.h> #include <signal.h> const char * sigdescr_np (int sig) { /* Note: Some platforms (glibc, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Haiku, Android) have an array 'sys_siglist'. (On AIX, you need to declare it yourself, and it has fewer than NSIG elements.) Its contents varies depending on the OS. On other OSes, you can invoke strsignal (sig) in the C locale. In the code below, we show the differences. You can see how cryptic some of these strings are. We try to pick more understandable wordings. */ switch (sig) { /* Signals specified by ISO C. */ case SIGABRT: /* glibc: "Aborted". *BSD: "Abort trap". Solaris: "Abort". */ return "Aborted"; case SIGFPE: /* glibc, *BSD: "Floating point exception". Solaris: "Arithmetic exception". The latter is more correct, because of integer division by 0 or -1. */ return "Arithmetic exception"; case SIGILL: return "Illegal instruction"; case SIGINT: return "Interrupt"; case SIGSEGV: return "Segmentation fault"; case SIGTERM: return "Terminated"; /* Signals specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> */ #if defined SIGALRM case SIGALRM: return "Alarm clock"; #endif #if defined SIGBUS case SIGBUS: return "Bus error"; #endif #if defined SIGCHLD case SIGCHLD: /* glibc, *BSD: "Child exited". Solaris: "Child status changed". */ return "Child stopped or exited"; #endif #if defined SIGCONT case SIGCONT: return "Continued"; #endif #if defined SIGHUP case SIGHUP: return "Hangup"; #endif #if defined SIGKILL case SIGKILL: return "Killed"; #endif #if defined SIGPIPE case SIGPIPE: return "Broken pipe"; #endif #if defined SIGQUIT case SIGQUIT: return "Quit"; #endif #if defined SIGSTOP case SIGSTOP: /* glibc, Solaris: "Stopped (signal)". *BSD: "Suspended (signal)". */ return "Stopped (signal)"; #endif #if defined SIGTSTP case SIGTSTP: /* glibc: "Stopped". *BSD: "Suspended". Solaris: "Stopped (user)". */ return "Stopped"; #endif #if defined SIGTTIN case SIGTTIN: return "Stopped (tty input)"; #endif #if defined SIGTTOU case SIGTTOU: return "Stopped (tty output)"; #endif #if defined SIGUSR1 case SIGUSR1: /* glibc, *BSD: "User defined signal 1". Solaris: "User signal 1". */ return "User defined signal 1"; #endif #if defined SIGUSR2 case SIGUSR2: /* glibc, *BSD: "User defined signal 2". Solaris: "User signal 2". */ return "User defined signal 2"; #endif #if defined SIGPOLL case SIGPOLL: /* glibc: "I/O possible". Solaris: "Pollable event". */ return "I/O possible"; #endif #if defined SIGPROF case SIGPROF: return "Profiling timer expired"; #endif #if defined SIGSYS case SIGSYS: return "Bad system call"; #endif #if defined SIGTRAP case SIGTRAP: /* glibc, Solaris: "Trace/breakpoint trap". *BSD: "Trace/BPT trap". */ return "Trace/breakpoint trap"; #endif #if defined SIGURG case SIGURG: /* glibc, *BSD: "Urgent I/O condition". Solaris: "Urgent socket condition". */ return "Urgent I/O condition"; #endif #if defined SIGVTALRM case SIGVTALRM: return "Virtual timer expired"; #endif #if defined SIGXCPU case SIGXCPU: /* glibc, *BSD: "CPU time limit exceeded". Solaris: "Cpu limit exceeded". */ return "CPU time limit exceeded"; #endif #if defined SIGXFSZ case SIGXFSZ: return "File size limit exceeded"; #endif /* Other signals on other systems. */ /* native Windows */ #if defined SIGBREAK case SIGBREAK: return "Ctrl-Break"; #endif /* IRIX */ #if defined SIGCKPT case SIGCKPT: return "Checkpoint"; /* See man 1 cpr, man 3C atcheckpoint */ #endif /* Linux, IRIX, Cygwin */ #if defined SIGCLD && SIGCLD != SIGCHLD case SIGCLD: return "Child stopped or exited"; #endif /* AIX */ #if defined SIGCPUFAIL case SIGCPUFAIL: /* AIX: "CPU failure predicted". */ return "CPU going down"; /* See man bindprocessor */ #endif /* AIX */ #if defined SIGDANGER case SIGDANGER: /* AIX: "Paging space low". */ return "Swap space nearly exhausted"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */ #if defined SIGEMT case SIGEMT: /* glibc/Hurd, *BSD: "EMT trap". Solaris: "Emulation trap". */ return "Instruction emulation needed"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined SIGINFO case SIGINFO: return "Information request"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin */ #if defined SIGIO && SIGIO != SIGPOLL case SIGIO: return "I/O possible"; #endif /* Linux, IRIX, Cygwin, mingw */ #if defined SIGIOT && SIGIOT != SIGABRT case SIGIOT: return "IOT instruction"; /* a PDP-11 instruction */ #endif /* AIX */ #if defined SIGKAP case SIGKAP: /* Process must issue a KSKAPACK ioctl, or will be killed in 30 seconds. */ /* AIX: "Monitor mode granted". */ return "Keep Alive Poll"; #endif /* Haiku */ #if defined SIGKILLTHR case SIGKILLTHR: return "Kill thread"; #endif /* Minix */ #if defined SIGKMEM case SIGKMEM: return "Kernel memory request"; #endif /* Minix */ #if defined SIGKMESS case SIGKMESS: return "Kernel message"; #endif /* Minix */ #if defined SIGKSIG case SIGKSIG: return "Kernel signal"; #endif /* Minix */ #if defined SIGKSIGSM case SIGKSIGSM: return "Kernel signal for signal manager"; #endif /* FreeBSD */ #if defined SIGLIBRT case SIGLIBRT: return "Real-time library interrupt"; #endif /* Cygwin */ #if defined SIGLOST && SIGLOST != SIGABRT && SIGLOST != SIGPWR case SIGLOST: /* Solaris: "Resource lost". */ return "File lock lost"; #endif /* AIX */ #if defined SIGMIGRATE case SIGMIGRATE: return "Process migration"; #endif /* AIX */ #if defined SIGMSG case SIGMSG: /* AIX: "Input device data". */ return "Message in the ring"; #endif /* ACM */ #if defined SIGPLAN case SIGPLAN: return "Programming language anomaly"; #endif /* AIX */ #if defined SIGPRE case SIGPRE: return "Programmed exception"; #endif /* IRIX */ #if defined SIGPTINTR case SIGPTINTR: return "Pthread interrupt"; #endif /* IRIX */ #if defined SIGPTRESCHED case SIGPTRESCHED: return "Pthread rescheduling"; #endif /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */ #if defined SIGPWR case SIGPWR: /* glibc: "Power failure". NetBSD: "Power fail/restart". */ return "Power failure"; #endif /* AIX */ #if defined SIGRECONFIG case SIGRECONFIG: return "Dynamic logical partitioning changed"; #endif /* AIX */ #if defined SIGRECOVERY case SIGRECOVERY: return "Kernel recovery"; #endif /* IRIX */ #if defined SIGRESTART case SIGRESTART: return "Checkpoint restart"; /* See man 1 cpr, man 3C atrestart */ #endif /* AIX */ #if defined SIGRETRACT case SIGRETRACT: /* AIX: "Monitor mode retracted". */ return "Retracting Keep Alive Poll"; #endif /* AIX */ #if defined SIGSAK case SIGSAK: /* AIX: "Secure attention". */ return "Secure Attention Key"; #endif /* ACM */ #if defined SIGSAM case SIGSAM: return "Symbolic computation failed"; #endif /* Minix */ #if defined SIGSNDELAY case SIGSNDELAY: return "Done sending message"; #endif /* AIX */ #if defined SIGSOUND case SIGSOUND: /* AIX: "Sound completed". */ return "Sound configuration changed"; #endif /* Linux */ #if defined SIGSTKFLT case SIGSTKFLT: return "Stack fault"; #endif /* AIX */ #if defined SIGSYSERROR case SIGSYSERROR: return "Kernel error"; #endif /* AIX */ #if defined SIGTALRM case SIGTALRM: return "Thread alarm clock"; #endif /* FreeBSD, OpenBSD */ #if defined SIGTHR case SIGTHR: /* OpenBSD: "Thread AST". */ return "Thread library interrupt"; #endif /* IRIX */ #if defined SIGUME case SIGUME: return "Uncorrectable memory error"; #endif /* AIX */ #if defined SIGVIRT case SIGVIRT: return "Virtual time alarm clock"; #endif /* AIX */ #if defined SIGWAITING case SIGWAITING: /* AIX: "No runnable lwp". */ return "Thread waiting"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, Haiku */ #if defined SIGWINCH case SIGWINCH: /* glibc: "Window changed". *BSD: "Window size changed" or "Window size changes". */ return "Window size changed"; #endif default: return NULL; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/siglist.h���������������������������������������������������������������0000664�0000000�0000000�00000007437�14110572173�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical list of all signal names. Copyright (C) 1996-1999, 2008-2021 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/>. */ /* This file should be usable for any platform, since it just associates the SIG* macros with text names and descriptions. The actual values come from <bits/signum.h> (via <signal.h>). For any signal macros do not exist on every platform, we can use #ifdef tests here and still use this single common file for all platforms. */ /* This file is included multiple times. */ /* Duplicate values (such as SIGBUS==SIGSEGV on Haiku) favor the last list entry. */ /* Standard signals */ #ifdef SIGHUP init_sig (SIGHUP, "HUP", N_("Hangup")) #endif #ifdef SIGINT init_sig (SIGINT, "INT", N_("Interrupt")) #endif #ifdef SIGQUIT init_sig (SIGQUIT, "QUIT", N_("Quit")) #endif #ifdef SIGILL init_sig (SIGILL, "ILL", N_("Illegal instruction")) #endif #ifdef SIGTRAP init_sig (SIGTRAP, "TRAP", N_("Trace/breakpoint trap")) #endif #ifdef SIGABRT init_sig (SIGABRT, "ABRT", N_("Aborted")) #endif #ifdef SIGFPE init_sig (SIGFPE, "FPE", N_("Floating point exception")) #endif #ifdef SIGKILL init_sig (SIGKILL, "KILL", N_("Killed")) #endif #ifdef SIGBUS init_sig (SIGBUS, "BUS", N_("Bus error")) #endif #ifdef SIGSEGV init_sig (SIGSEGV, "SEGV", N_("Segmentation fault")) #endif #ifdef SIGPIPE init_sig (SIGPIPE, "PIPE", N_("Broken pipe")) #endif #ifdef SIGALRM init_sig (SIGALRM, "ALRM", N_("Alarm clock")) #endif #ifdef SIGTERM init_sig (SIGTERM, "TERM", N_("Terminated")) #endif #ifdef SIGURG init_sig (SIGURG, "URG", N_("Urgent I/O condition")) #endif #ifdef SIGSTOP init_sig (SIGSTOP, "STOP", N_("Stopped (signal)")) #endif #ifdef SIGTSTP init_sig (SIGTSTP, "TSTP", N_("Stopped")) #endif #ifdef SIGCONT init_sig (SIGCONT, "CONT", N_("Continued")) #endif #ifdef SIGCHLD init_sig (SIGCHLD, "CHLD", N_("Child exited")) #endif #ifdef SIGTTIN init_sig (SIGTTIN, "TTIN", N_("Stopped (tty input)")) #endif #ifdef SIGTTOU init_sig (SIGTTOU, "TTOU", N_("Stopped (tty output)")) #endif #ifdef SIGIO init_sig (SIGIO, "IO", N_("I/O possible")) #endif #ifdef SIGXCPU init_sig (SIGXCPU, "XCPU", N_("CPU time limit exceeded")) #endif #ifdef SIGXFSZ init_sig (SIGXFSZ, "XFSZ", N_("File size limit exceeded")) #endif #ifdef SIGVTALRM init_sig (SIGVTALRM, "VTALRM", N_("Virtual timer expired")) #endif #ifdef SIGPROF init_sig (SIGPROF, "PROF", N_("Profiling timer expired")) #endif #ifdef SIGWINCH init_sig (SIGWINCH, "WINCH", N_("Window changed")) #endif #ifdef SIGUSR1 init_sig (SIGUSR1, "USR1", N_("User defined signal 1")) #endif #ifdef SIGUSR2 init_sig (SIGUSR2, "USR2", N_("User defined signal 2")) #endif /* Variations */ #ifdef SIGEMT init_sig (SIGEMT, "EMT", N_("EMT trap")) #endif #ifdef SIGSYS init_sig (SIGSYS, "SYS", N_("Bad system call")) #endif #ifdef SIGSTKFLT init_sig (SIGSTKFLT, "STKFLT", N_("Stack fault")) #endif #ifdef SIGINFO init_sig (SIGINFO, "INFO", N_("Information request")) #elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) init_sig (SIGPWR, "PWR", N_("Power failure")) #endif #ifdef SIGLOST init_sig (SIGLOST, "LOST", N_("Resource lost")) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/signal.in.h�������������������������������������������������������������0000664�0000000�0000000�00000036303�14110572173�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <signal.h>. Copyright (C) 2006-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) /* Special invocation convention: - Inside glibc header files. - On glibc systems we have a sequence of nested includes <signal.h> -> <ucontext.h> -> <signal.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. - On glibc systems with GCC 4.3 we have a sequence of nested includes <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. In this situation, some of the functions are not yet declared, therefore we cannot provide the C++ aliases. */ # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _GL_ALREADY_INCLUDING_SIGNAL_H /* Define pid_t, uid_t. Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes us; so include <sys/types.h> now, before the second inclusion guard. */ #include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #undef _GL_ALREADY_INCLUDING_SIGNAL_H #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H /* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android, OS/2 kLIBC declare pthread_sigmask in <pthread.h>, not in <signal.h>. But avoid namespace pollution on glibc systems.*/ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) \ || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ || defined __sun || defined __ANDROID__ || defined __KLIBC__) \ && ! defined __GLIBC__ # include <pthread.h> #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. */ /* On AIX, sig_atomic_t already includes volatile. C99 requires that 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. Hence, redefine this to a non-volatile type as needed. */ #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ # if !GNULIB_defined_sig_atomic_t typedef int rpl_sig_atomic_t; # undef sig_atomic_t # define sig_atomic_t rpl_sig_atomic_t # define GNULIB_defined_sig_atomic_t 1 # endif #endif /* A set or mask of signals. */ #if !@HAVE_SIGSET_T@ # if !GNULIB_defined_sigset_t typedef unsigned int sigset_t; # define GNULIB_defined_sigset_t 1 # endif #endif /* Define sighandler_t, the type of signal handlers. A GNU extension. */ #if !@HAVE_SIGHANDLER_T@ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_sighandler_t typedef void (*sighandler_t) (int); # define GNULIB_defined_sighandler_t 1 # endif # ifdef __cplusplus } # endif #endif #if @GNULIB_SIGNAL_H_SIGPIPE@ # ifndef SIGPIPE /* Define SIGPIPE to a value that does not overlap with other signals. */ # define SIGPIPE 13 # define GNULIB_defined_SIGPIPE 1 /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 'write', 'stdio'. */ # endif #endif /* Maximum signal number + 1. */ #ifndef NSIG # if defined __TANDEM # define NSIG 32 # endif #endif #if @GNULIB_PTHREAD_SIGMASK@ # if @REPLACE_PTHREAD_SIGMASK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_sigmask # define pthread_sigmask rpl_pthread_sigmask # endif _GL_FUNCDECL_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # else # if !(@HAVE_PTHREAD_SIGMASK@ || defined pthread_sigmask) _GL_FUNCDECL_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_sigmask); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask # if HAVE_RAW_DECL_PTHREAD_SIGMASK _GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " "use gnulib module pthread_sigmask for portability"); # endif #endif #if @GNULIB_RAISE@ # if @REPLACE_RAISE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef raise # define raise rpl_raise # endif _GL_FUNCDECL_RPL (raise, int, (int sig)); _GL_CXXALIAS_RPL (raise, int, (int sig)); # else # if !@HAVE_RAISE@ _GL_FUNCDECL_SYS (raise, int, (int sig)); # endif _GL_CXXALIAS_SYS (raise, int, (int sig)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (raise); # endif #elif defined GNULIB_POSIXCHECK # undef raise /* Assume raise is always declared. */ _GL_WARN_ON_USE (raise, "raise can crash on native Windows - " "use gnulib module raise for portability"); #endif #if @GNULIB_SIGPROCMASK@ # if !@HAVE_POSIX_SIGNALBLOCKING@ # ifndef GNULIB_defined_signal_blocking # define GNULIB_defined_signal_blocking 1 # endif /* Maximum signal number + 1. */ # ifndef NSIG # define NSIG 32 # endif /* This code supports only 32 signals. */ # if !GNULIB_defined_verify_NSIG_constraint typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; # define GNULIB_defined_verify_NSIG_constraint 1 # endif # endif /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && (defined __i386__ || defined __x86_64__)) # undef sigaddset # undef sigdelset # undef sigemptyset # undef sigfillset # undef sigismember #endif /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigismember # endif # else _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); _GL_CXXALIASWARN (sigismember); /* Initialize a signal set to the empty set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigemptyset # endif # else _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigemptyset); /* Add a signal to a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigaddset # endif # else _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigaddset); /* Remove a signal from a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigdelset # endif # else _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigdelset); /* Fill a signal set with all possible signals. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigfillset # endif # else _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigfillset); /* Return the set of those blocked signals that are pending. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ _GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); _GL_CXXALIASWARN (sigpending); /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. Then, if SET is not NULL, affect the current set of blocked signals by combining it with *SET as indicated in OPERATION. In this implementation, you are not allowed to change a signal handler while the signal is blocked. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ # define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ _GL_FUNCDECL_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); _GL_CXXALIASWARN (sigprocmask); /* Install the handler FUNC for signal SIG, and return the previous handler. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_function_taking_int_returning_void_t typedef void (*_gl_function_taking_int_returning_void_t) (int); # define GNULIB_defined_function_taking_int_returning_void_t 1 # endif # ifdef __cplusplus } # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define signal rpl_signal # endif _GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # else /* On OpenBSD, the declaration of 'signal' may not be present at this point, because it occurs in <sys/signal.h>, not <signal.h> directly. */ # if defined __OpenBSD__ _GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (signal); # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE /* Raise signal SIGPIPE. */ _GL_EXTERN_C int _gl_raise_SIGPIPE (void); # endif #elif defined GNULIB_POSIXCHECK # undef sigaddset # if HAVE_RAW_DECL_SIGADDSET _GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigdelset # if HAVE_RAW_DECL_SIGDELSET _GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigemptyset # if HAVE_RAW_DECL_SIGEMPTYSET _GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigfillset # if HAVE_RAW_DECL_SIGFILLSET _GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigismember # if HAVE_RAW_DECL_SIGISMEMBER _GL_WARN_ON_USE (sigismember, "sigismember is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigpending # if HAVE_RAW_DECL_SIGPENDING _GL_WARN_ON_USE (sigpending, "sigpending is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigprocmask # if HAVE_RAW_DECL_SIGPROCMASK _GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " "use the gnulib module sigprocmask for portability"); # endif #endif /* @GNULIB_SIGPROCMASK@ */ #if @GNULIB_SIGACTION@ # if !@HAVE_SIGACTION@ # if !@HAVE_SIGINFO_T@ # if !GNULIB_defined_siginfo_types /* Present to allow compilation, but unsupported by gnulib. */ union sigval { int sival_int; void *sival_ptr; }; /* Present to allow compilation, but unsupported by gnulib. */ struct siginfo_t { int si_signo; int si_code; int si_errno; pid_t si_pid; uid_t si_uid; void *si_addr; int si_status; long si_band; union sigval si_value; }; typedef struct siginfo_t siginfo_t; # define GNULIB_defined_siginfo_types 1 # endif # endif /* !@HAVE_SIGINFO_T@ */ /* We assume that platforms which lack the sigaction() function also lack the 'struct sigaction' type, and vice versa. */ # if !GNULIB_defined_struct_sigaction struct sigaction { union { void (*_sa_handler) (int); /* Present to allow compilation, but unsupported by gnulib. POSIX says that implementations may, but not must, make sa_sigaction overlap with sa_handler, but we know of no implementation where they do not overlap. */ void (*_sa_sigaction) (int, siginfo_t *, void *); } _sa_func; sigset_t sa_mask; /* Not all POSIX flags are supported. */ int sa_flags; }; # define sa_handler _sa_func._sa_handler # define sa_sigaction _sa_func._sa_sigaction /* Unsupported flags are not present. */ # define SA_RESETHAND 1 # define SA_NODEFER 2 # define SA_RESTART 4 # define GNULIB_defined_struct_sigaction 1 # endif _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); # elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ # define sa_sigaction sa_handler # endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ _GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); _GL_CXXALIASWARN (sigaction); #elif defined GNULIB_POSIXCHECK # undef sigaction # if HAVE_RAW_DECL_SIGACTION _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " "use the gnulib module sigaction for portability"); # endif #endif /* Some systems don't have SA_NODEFER. */ #ifndef SA_NODEFER # define SA_NODEFER 0 #endif #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/signbitd.c��������������������������������������������������������������0000664�0000000�0000000�00000004110�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnand-nolibm.h" #include "float+.h" #ifdef gl_signbitd_OPTIMIZED_MACRO # undef gl_signbitd #endif int gl_signbitd (double arg) { #if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGN_IN_LIBC return copysign (1.0, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnand (arg)) return 0; if (arg < 0.0) return 1; else if (arg == 0.0) { /* Distinguish 0.0 and -0.0. */ static double plus_zero = 0.0; double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); } else return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/signbitf.c��������������������������������������������������������������0000664�0000000�0000000�00000004121�14110572173�0017014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanf-nolibm.h" #include "float+.h" #ifdef gl_signbitf_OPTIMIZED_MACRO # undef gl_signbitf #endif int gl_signbitf (float arg) { #if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { float value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNF_IN_LIBC return copysignf (1.0f, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanf (arg)) return 0; if (arg < 0.0f) return 1; else if (arg == 0.0f) { /* Distinguish 0.0f and -0.0f. */ static float plus_zero = 0.0f; float arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); } else return 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/signbitl.c��������������������������������������������������������������0000664�0000000�0000000�00000004164�14110572173�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanl-nolibm.h" #include "float+.h" #ifdef gl_signbitl_OPTIMIZED_MACRO # undef gl_signbitl #endif int gl_signbitl (long double arg) { #if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNL_IN_LIBC return copysignl (1.0L, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanl (arg)) return 0; if (arg < 0.0L) return 1; else if (arg == 0.0L) { /* Distinguish 0.0L and -0.0L. */ static long double plus_zero = 0.0L; long double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); } else return 0; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigpipe-die.c�����������������������������������������������������������0000664�0000000�0000000�00000004530�14110572173�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a SIGPIPE signal and exit. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "sigpipe-die.h" #include <signal.h> #include <stdlib.h> #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void sigpipe_die (void) { error (exit_failure, 0, "%s", _("error writing to a closed pipe or socket")); /* Ensure that this function really does not return. */ abort (); } static void (*prepare_die_hook) (void); /* This is the signal handler for SIGPIPE. It is invoked synchronously, therefore it can make library calls to malloc(), gettext(), exit() etc. - although in general it is undefined behaviour to do such calls from within signal handlers. */ static void sigpipe_die_handler (int sig) { if (prepare_die_hook != NULL) (*prepare_die_hook) (); sigpipe_die (); } void install_sigpipe_die_handler (void (*prepare_die) (void)) { prepare_die_hook = prepare_die; /* Install the handler. */ { struct sigaction action; action.sa_handler = sigpipe_die_handler; action.sa_flags = 0; sigemptyset (&action.sa_mask); if (sigaction (SIGPIPE, &action, NULL) >= 0) { /* Unblock the signal (just in case). This is needed because if the signal was blocked in the parent process, it is also blocked in this process: the mask of blocked signals is inherited across fork/exec (except for SIGCHLD). */ sigset_t sigpipe_set; sigemptyset (&sigpipe_set); sigaddset (&sigpipe_set, SIGPIPE); sigprocmask (SIG_UNBLOCK, &sigpipe_set, NULL); } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigpipe-die.h�����������������������������������������������������������0000664�0000000�0000000�00000004636�14110572173�0017426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a SIGPIPE signal and exit. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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. */ /* SIGPIPE is the signal sent to a process calling write() on a pipe with no readers. Together with the signal, the write() call is terminated with return value -1, errno = EPIPE. Note that SIGPIPE is a *synchronous* signal: it occurs only during write(), without delay (unless blocked). The default reaction on SIGPIPE, namely terminating the process without an error message, is suitable for programs which only produce output to standard output and don't have side effects. When a program has side effects, other than writing to standard output, the suitable behaviour is either (a) to exit with an error message or - in certain cases, for example when writing to subprocesses - (b) to continue the operation without writing to the pipe/socket with no readers. This file provides support for (a). For (b), the program needs to know which of the output file descriptors has no readers. This is usually implemented by blocking the SIGPIPE signal and handling an EPIPE error indicator in all affected library calls (write(), send(), fwrite(), fflush(), fclose(), etc.). */ #ifndef _SIGPIPE_DIE_H #define _SIGPIPE_DIE_H #ifdef __cplusplus extern "C" { #endif /* Emit an error message indicating a SIGPIPE signal, and terminate the process with an error code. */ /*extern*/ _Noreturn void sigpipe_die (void); /* Install a SIGPIPE handler that invokes PREPARE_DIE and then emits an error message and exits. PREPARE_DIE may be NULL, meaning a no-op. */ extern void install_sigpipe_die_handler (void (*prepare_die) (void)); #ifdef __cplusplus } #endif #endif /* _SIGPIPE_DIE_H */ ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigprocmask.c�����������������������������������������������������������0000664�0000000�0000000�00000020622�14110572173�0017535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. 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/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stdint.h> #include <stdlib.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* We assume that a platform without POSIX signal blocking functions also does not have the POSIX sigaction() function, only the signal() function. We also assume signal() has SysV semantics, where any handler is uninstalled prior to being invoked. This is true for native Windows platforms. */ /* We use raw signal(), but also provide a wrapper rpl_signal() so that applications can query or change a blocked signal. */ #undef signal /* Provide invalid signal numbers as fallbacks if the uncatchable signals are not defined. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if defined _WIN32 && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif #ifdef SIGABRT_COMPAT # define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) #else # define SIGABRT_COMPAT_MASK 0 #endif typedef void (*handler_t) (int); #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static handler_t signal_nothrow (int sig, handler_t handler) { handler_t result; TRY_MSVC_INVAL { result = signal (sig, handler); } CATCH_MSVC_INVAL { result = SIG_ERR; errno = EINVAL; } DONE_MSVC_INVAL; return result; } # define signal signal_nothrow #endif /* Handling of gnulib defined signals. */ #if GNULIB_defined_SIGPIPE static handler_t SIGPIPE_handler = SIG_DFL; #endif #if GNULIB_defined_SIGPIPE static handler_t ext_signal (int sig, handler_t handler) { switch (sig) { case SIGPIPE: { handler_t old_handler = SIGPIPE_handler; SIGPIPE_handler = handler; return old_handler; } default: /* System defined signal */ return signal (sig, handler); } } # undef signal # define signal ext_signal #endif int sigismember (const sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif return (*set >> sig) & 1; } else return 0; } int sigemptyset (sigset_t *set) { *set = 0; return 0; } int sigaddset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set |= 1U << sig; return 0; } else { errno = EINVAL; return -1; } } int sigdelset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set &= ~(1U << sig); return 0; } else { errno = EINVAL; return -1; } } int sigfillset (sigset_t *set) { *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; return 0; } /* Set of currently blocked signals. */ static volatile sigset_t blocked_set /* = 0 */; /* Set of currently blocked and pending signals. */ static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; /* Signal handler that is installed for blocked signals. */ static void blocked_handler (int sig) { /* Reinstall the handler, in case the signal occurs multiple times while blocked. There is an inherent race where an asynchronous signal in between when the kernel uninstalled the handler and when we reinstall it will trigger the default handler; oh well. */ signal (sig, blocked_handler); if (sig >= 0 && sig < NSIG) pending_array[sig] = 1; } int sigpending (sigset_t *set) { sigset_t pending = 0; int sig; for (sig = 0; sig < NSIG; sig++) if (pending_array[sig]) pending |= 1U << sig; *set = pending; return 0; } /* The previous signal handlers. Only the array elements corresponding to blocked signals are relevant. */ static volatile handler_t old_handlers[NSIG]; int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) { if (old_set != NULL) *old_set = blocked_set; if (set != NULL) { sigset_t new_blocked_set; sigset_t to_unblock; sigset_t to_block; switch (operation) { case SIG_BLOCK: new_blocked_set = blocked_set | *set; break; case SIG_SETMASK: new_blocked_set = *set; break; case SIG_UNBLOCK: new_blocked_set = blocked_set & ~*set; break; default: errno = EINVAL; return -1; } to_unblock = blocked_set & ~new_blocked_set; to_block = new_blocked_set & ~blocked_set; if (to_block != 0) { int sig; for (sig = 0; sig < NSIG; sig++) if ((to_block >> sig) & 1) { pending_array[sig] = 0; if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) blocked_set |= 1U << sig; } } if (to_unblock != 0) { sig_atomic_t received[NSIG]; int sig; for (sig = 0; sig < NSIG; sig++) if ((to_unblock >> sig) & 1) { if (signal (sig, old_handlers[sig]) != blocked_handler) /* The application changed a signal handler while the signal was blocked, bypassing our rpl_signal replacement. We don't support this. */ abort (); received[sig] = pending_array[sig]; blocked_set &= ~(1U << sig); pending_array[sig] = 0; } else received[sig] = 0; for (sig = 0; sig < NSIG; sig++) if (received[sig]) raise (sig); } } return 0; } /* Install the handler FUNC for signal SIG, and return the previous handler. */ handler_t rpl_signal (int sig, handler_t handler) { /* We must provide a wrapper, so that a user can query what handler they installed even if that signal is currently blocked. */ if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP && handler != SIG_ERR) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif if (blocked_set & (1U << sig)) { /* POSIX states that sigprocmask and signal are both async-signal-safe. This is not true of our implementation - there is a slight data race where an asynchronous interrupt on signal A can occur after we install blocked_handler but before we have updated old_handlers for signal B, such that handler A can see stale information if it calls signal(B). Oh well - signal handlers really shouldn't try to manipulate the installed handlers of unrelated signals. */ handler_t result = old_handlers[sig]; old_handlers[sig] = handler; return result; } else return signal (sig, handler); } else { errno = EINVAL; return SIG_ERR; } } #if GNULIB_defined_SIGPIPE /* Raise the signal SIGPIPE. */ int _gl_raise_SIGPIPE (void) { if (blocked_set & (1U << SIGPIPE)) pending_array[SIGPIPE] = 1; else { handler_t handler = SIGPIPE_handler; if (handler == SIG_DFL) exit (128 + SIGPIPE); else if (handler != SIG_IGN) (*handler) (SIGPIPE); } return 0; } #endif ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigsegv.c���������������������������������������������������������������0000664�0000000�0000000�00000131544�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Page fault handling library. Copyright (C) 1993-2021 Free Software Foundation, Inc. Copyright (C) 2018 Nylon Chen <nylon7@andestech.com> This 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 2 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 and Nylon Chen. */ #include <config.h> /* Specification. */ #include "sigsegv.h" #include <errno.h> #include <stdio.h> /* declares perror */ #include <stdint.h> /* defines uintptr_t */ #include <stdlib.h> #include <signal.h> #if HAVE_GETRLIMIT # include <sys/resource.h> /* declares struct rlimit */ #endif #ifdef __OpenBSD__ # include <sys/param.h> /* defines macro OpenBSD */ #endif /* Version number. */ int libsigsegv_version = LIBSIGSEGV_VERSION; /* ======================= Fault handler information ======================= */ /* Define: SIGSEGV_FAULT_HANDLER_ARGLIST is the argument list for the actual fault handler. and if available (optional): SIGSEGV_FAULT_ADDRESS is a macro for fetching the fault address. SIGSEGV_FAULT_CONTEXT is a macro giving a pointer to the entire fault context (i.e. the register set etc.). SIGSEGV_FAULT_STACKPOINTER is a macro for fetching the stackpointer at the moment the fault occurred. */ #if defined __linux__ || defined __ANDROID__ /* Linux */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __alpha__ /* See glibc/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are actually the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.sc_regs[30] # elif defined __arm64__ /* 64-bit */ /* See glibc/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are actually the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.sp # elif defined __arm__ || defined __armhf__ /* 32-bit */ /* See glibc/sysdeps/unix/sysv/linux/arm/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/arm/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are actually the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.arm_sp # elif defined __cris__ /* See glibc-ports/sysdeps/unix/sysv/linux/cris/sys/ucontext.h. Note that the 'mcontext_t' defined in glibc-ports/sysdeps/unix/sysv/linux/cris/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are actually the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.usp # elif defined __hppa__ /* See glibc/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are actually the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.sc_gr[30] # elif defined __x86_64__ /* 64 bit registers */ /* See glibc/sysdeps/unix/sysv/linux/x86/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/x86/sys/ucontext.h and the 'struct sigcontext' defined in glibc/sysdeps/unix/sysv/linux/x86/bits/sigcontext.h (see also <asm/sigcontext.h>) are effectively the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[REG_RSP] # elif defined __i386__ /* 32 bit registers */ /* See glibc/sysdeps/unix/sysv/linux/x86/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/x86/sys/ucontext.h and the 'struct sigcontext_ia32' defined in <asm/sigcontext32.h> are effectively the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[REG_ESP] /* same value as ((ucontext_t *) ucp)->uc_mcontext.gregs[REG_UESP] */ # elif defined __ia64__ /* See glibc/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h and the 'struct sigcontext' defined in glibc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (see also <asm/sigcontext.h>) are actually the same. */ /* IA-64 has two stack pointers, one that grows down, called $r12, and one that grows up, called $bsp/$bspstore. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.sc_gr[12] /* It would be better to access $bspstore instead of $bsp but I don't know where to find it in 'struct sigcontext'. Anyway, it doesn't matter because $bsp and $bspstore never differ by more than ca. 1 KB. */ # define SIGSEGV_FAULT_BSP_POINTER ((ucontext_t *) ucp)->uc_mcontext.sc_ar_bsp # elif defined __m68k__ /* See glibc/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are quite different types. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[R_SP] # elif defined __mips__ || defined __mipsn32__ || defined __mips64__ /* See glibc/sysdeps/unix/sysv/linux/mips/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/mips/sys/ucontext.h and the 'struct sigcontext' defined in glibc/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h (see also <asm/sigcontext.h>) are effectively the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[29] # elif defined __nds32__ /* See glibc/sysdeps/unix/sysv/linux/nds32/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h. Both are found in <https://patches-gcc.linaro.org/cover/4409/> part 08/11 <https://sourceware.org/ml/libc-alpha/2018-05/msg00125.html>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.nds32_sp # elif defined __powerpc__ || defined __powerpc64__ || defined __powerpc64_elfv2__ /* See glibc/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h, the 'struct sigcontext' defined in <asm/sigcontext.h>, and the 'struct pt_regs' defined in <asm/ptrace.h> are quite different types. */ # if defined __powerpc64__ || defined __powerpc64_elfv2__ /* 64-bit */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gp_regs[1] # else /* 32-bit */ /* both should be equivalent */ # if 0 # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.regs->gpr[1] # else # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.uc_regs->gregs[1] # endif # endif # elif defined __riscv32__ || __riscv64__ /* See glibc/sysdeps/unix/sysv/linux/riscv/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/riscv/sys/ucontext.h and the 'struct sigcontext' defined in glibc/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h start with the same block of 32 general-purpose registers. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.__gregs[REG_SP] # elif defined __s390__ || defined __s390x__ /* See glibc/sysdeps/unix/sysv/linux/s390/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/s390/sys/ucontext.h and the '_sigregs' type, indirect part of 'struct sigcontext', defined in <asm/sigcontext.h>, are effectively the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[15] # elif defined __sh__ /* See glibc/sysdeps/unix/sysv/linux/sh/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/sh/sys/ucontext.h and the 'struct sigcontext' defined in <asm/sigcontext.h> are effectively the same. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[15] # elif defined __sparc__ || defined __sparc64__ /* See glibc/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h and the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/sparc/{sparc32,sparc64}/sigcontextinfo.h. Note that the 'mcontext_t' defined in glibc/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h and the 'struct sigcontext' defined in glibc/sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h (see also <asm/sigcontext.h>) are quite different types. */ # if defined __sparc64__/* 64-bit */ /* From linux-4.8.1/arch/sparc/kernel/signal_64.c, function setup_rt_frame, we see that ucp is not an 'ucontext_t *' but rather a 'struct sigcontext *' that happens to have the same value as sip (which is possible because a 'struct sigcontext' starts with 128 bytes room for the siginfo_t). */ # define SIGSEGV_FAULT_STACKPOINTER (((struct sigcontext *) ucp)->sigc_regs.u_regs[14] + 2047) # else /* 32-bit */ /* From linux-4.8.1/arch/sparc/kernel/signal_32.c, function setup_rt_frame, and linux-4.8.1/arch/sparc/kernel/signal32.c, function setup_rt_frame32, we see that ucp is a 'struct pt_regs *' or 'struct pt_regs32 *', respectively. In userland, this is a 'struct sigcontext *'. */ # define SIGSEGV_FAULT_STACKPOINTER ((struct sigcontext *) ucp)->si_regs.u_regs[14] # endif /* The sip->si_addr field is correct for a normal fault, but unusable in case of a stack overflow. What I observe (when running tests/test-sigsegv-catch-stackoverflow1, with a printf right at the beginning of sigsegv_handler) is that sip->si_addr is near 0: - in 64-bit mode: sip->si_addr = 0x000000000000030F, and gdb shows me that the fault occurs in an instruction 'stx %o3,[%fp+0x30f]' and %fp is 0. In fact, all registers %l0..%l7 and %i0..%i7 are 0. - in 32-bit mode: sip->si_addr = 0xFFFFFA64, and gdb shows me that the fault occurs in an instruction 'st %g2,[%fp-1436]' and %fp is 0. In fact, all registers %l0..%l7 and %i0..%i7 are 0. Apparently when the stack overflow occurred, some trap has tried to move the contents of the registers %l0..%l7 and %i0..%i7 (a "window" in SPARC terminology) to the stack, did not succeed in doing this, replaced all these register values with 0, and resumed execution at the fault location. This time, due to %fp = 0, a different fault was triggered. Now it is impossible to determine the real (previous) fault address because, even if know the faulting instruction, the previous register values have been lost. */ # define BOGUS_FAULT_ADDRESS_UPON_STACK_OVERFLOW # else /* When adding support for other CPUs here: */ /* For SIGSEGV_FAULT_HANDLER_ARGLIST, see the definition of SIGCONTEXT in glibc/sysdeps/unix/sysv/linux/<cpu>/sigcontextinfo.h. */ /* For SIGSEGV_FAULT_STACKPOINTER, see the definition of GET_STACK in glibc/sysdeps/unix/sysv/linux/<cpu>/sigcontextinfo.h. */ # endif #endif #if defined __GNU__ /* Hurd */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, int code, struct sigcontext *scp # define SIGSEGV_FAULT_ADDRESS (unsigned long) code # define SIGSEGV_FAULT_CONTEXT scp # if defined __i386__ /* scp points to a 'struct sigcontext' (defined in glibc/sysdeps/mach/hurd/i386/bits/sigcontext.h). The registers of this struct get pushed on the stack through gnumach/i386/i386/locore.S:trapall. */ /* Both sc_esp and sc_uesp appear to have the same value. It appears more reliable to use sc_uesp because it is labelled as "old esp, if trapped from user". */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_uesp # endif #endif #if defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ /* GNU/kFreeBSD, FreeBSD */ # if defined __arm__ || defined __armhf__ || defined __arm64__ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # if defined __arm64__ /* 64-bit */ /* See sys/arm64/include/ucontext.h. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.mc_gpregs.gp_sp # elif defined __arm__ || defined __armhf__ /* 32-bit */ /* See sys/arm/include/ucontext.h. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.__gregs[_REG_SP] # endif # else /* On FreeBSD 12, both of these approaches work. On FreeBSD derivatives, the first one has more chances to work. */ # if 1 /* Use signal handlers without SA_SIGINFO. */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, int code, struct sigcontext *scp, void *addr # define SIGSEGV_FAULT_ADDRESS addr # define SIGSEGV_FAULT_CONTEXT scp /* See sys/x86/include/signal.h. */ # if defined __x86_64__ /* 64 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_rsp # elif defined __i386__ /* 32 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_esp # endif # else /* Use signal handlers with SA_SIGINFO. */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *scp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((struct sigcontext *) scp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO /* See sys/x86/include/signal.h. */ # if defined __x86_64__ /* 64 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((struct sigcontext *) scp)->sc_rsp # elif defined __i386__ /* 32 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((struct sigcontext *) scp)->sc_esp # endif # endif # endif #endif #if defined __NetBSD__ /* NetBSD */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO /* _UC_MACHINE_SP is a platform independent macro. Defined in <machine/mcontext.h>, see http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/$arch/include/mcontext.h Supported on alpha, amd64, i386, ia64, m68k, mips, powerpc, sparc since NetBSD 2.0. On i386, _UC_MACHINE_SP is the same as ->uc_mcontext.__gregs[_REG_UESP], and apparently the same value as ->uc_mcontext.__gregs[_REG_ESP]. */ # ifdef _UC_MACHINE_SP # define SIGSEGV_FAULT_STACKPOINTER _UC_MACHINE_SP ((ucontext_t *) ucp) # endif #endif #if defined __OpenBSD__ /* OpenBSD */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, struct sigcontext *scp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT scp # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __alpha__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/alpha/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs[30] # elif defined __arm__ || defined __armhf__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/arm/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_usr_sp # elif defined __hppa__ || defined __hppa64__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/hppa/include/signal.h and openbsd-src/sys/arch/hppa64/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs[30] # elif defined __x86_64__ /* 64 bit registers */ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/amd64/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_rsp # elif defined __i386__ /* 32 bit registers */ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/i386/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_esp # elif defined __m68k__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/m68k/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_sp # elif defined __m88k__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/m88k/include/signal.h and the definition of 'struct reg' in openbsd-src/sys/arch/m88k/include/reg.h. */ # if OpenBSD >= 201211 /* OpenBSD version >= 5.2 */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs[31] # else # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs.r[31] # endif # elif defined __mips__ || defined __mipsn32__ || defined __mips64__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/mips64/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs[29] # elif defined __powerpc__ || defined __powerpc64__ /* See the definition of 'struct sigcontext' and 'struct trapframe' in openbsd-src/sys/arch/powerpc/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_frame.fixreg[1] # elif defined __sh__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/sh/include/signal.h and the definition of 'struct reg' in openbsd-src/sys/arch/sh/include/reg.h. */ # if OpenBSD >= 201211 /* OpenBSD version >= 5.2 */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_reg[20-15] # else # define SIGSEGV_FAULT_STACKPOINTER scp->sc_reg.r_r15 # endif # elif defined __sparc__ || defined __sparc64__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/sparc/include/signal.h and openbsd-src/sys/arch/sparc64/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_sp # elif defined __vax__ /* See the definition of 'struct sigcontext' in openbsd-src/sys/arch/vax/include/signal.h. */ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_sp # endif #endif #if (defined __APPLE__ && defined __MACH__) /* macOS */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __x86_64__ /* See the definitions of - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_types/_ucontext.h>, - 'struct __darwin_mcontext64' in <i386/_mcontext.h>, and - 'struct __darwin_x86_thread_state64' in <mach/i386/_structs.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext->__ss.__rsp # elif defined __i386__ /* See the definitions of - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_types/_ucontext.h>, - 'struct __darwin_mcontext32' in <i386/_mcontext.h>, and - 'struct __darwin_i386_thread_state' in <mach/i386/_structs.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext->__ss.__esp # elif defined __arm64__ /* See the definitions of - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_types/_ucontext.h>, - 'struct __darwin_mcontext64' in <arm/_mcontext.h>, and - 'struct __darwin_arm_thread_state64' in <mach/arm/_structs.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext->__ss.__sp # elif defined __powerpc__ /* See the definitions of - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_structs.h>, - 'struct __darwin_mcontext' in <ppc/_structs.h>, and - 'struct __darwin_ppc_thread_state' in <mach/ppc/_structs.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext->__ss.__r1 # endif #endif #if defined _AIX /* AIX */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __powerpc__ || defined __powerpc64__ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.jmp_context.gpr[1] # endif #endif #if defined __sgi /* IRIX */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, int code, struct sigcontext *scp # define SIGSEGV_FAULT_ADDRESS (unsigned long) scp->sc_badvaddr # define SIGSEGV_FAULT_CONTEXT scp # if defined __mips__ || defined __mipsn32__ || defined __mips64__ # define SIGSEGV_FAULT_STACKPOINTER scp->sc_regs[29] # endif #endif #if defined __sun /* Solaris */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __x86_64__ /* 64 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[REG_RSP] # elif defined __i386__ /* 32 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[ESP] # elif defined __sparc__ || defined __sparc64__ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.gregs[REG_O6] # if SOLARIS11 /* On Solaris 11.3/SPARC, both in 32-bit and 64-bit mode, when catching stack overflow, the fault address is correct the first time, but is zero or near zero the second time. 'truss tests/test-sigsegv-catch-stackoverflow1' shows it: In 32-bit mode: Incurred fault #6, FLTBOUNDS %pc = 0x000116E8 siginfo: SIGSEGV SEGV_MAPERR addr=0xFFB00000 Received signal #11, SIGSEGV [caught] siginfo: SIGSEGV SEGV_MAPERR addr=0xFFB00000 then Incurred fault #6, FLTBOUNDS %pc = 0x000116E8 siginfo: SIGSEGV SEGV_MAPERR addr=0x00000008 Received signal #11, SIGSEGV [caught] siginfo: SIGSEGV SEGV_MAPERR addr=0x00000008 In 64-bit mode: Incurred fault #6, FLTBOUNDS %pc = 0x100001C58 siginfo: SIGSEGV SEGV_MAPERR addr=0xFFFFFFFF7FF00000 Received signal #11, SIGSEGV [caught] siginfo: SIGSEGV SEGV_MAPERR addr=0xFFFFFFFF7FF00000 then Incurred fault #6, FLTBOUNDS %pc = 0x100001C58 siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000 Received signal #11, SIGSEGV [caught] siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000 */ # define BOGUS_FAULT_ADDRESS_UPON_STACK_OVERFLOW # endif # endif #endif #if defined __CYGWIN__ /* Cygwin */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO /* See the definition of 'ucontext_t' in <sys/ucontext.h> and of 'struct __mcontext' in <cygwin/signal.h>. */ # if defined __x86_64__ /* 64 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.rsp # elif defined __i386__ /* 32 bit registers */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.esp # endif #endif #if defined __HAIKU__ /* Haiku */ # define SIGSEGV_FAULT_HANDLER_ARGLIST int sig, siginfo_t *sip, void *ucp # define SIGSEGV_FAULT_ADDRESS sip->si_addr # define SIGSEGV_FAULT_CONTEXT ((ucontext_t *) ucp) # define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO # if defined __x86_64__ /* 64 bit registers */ /* See the definition of 'ucontext_t' in <signal.h> and of 'struct vregs' in <arch/x86_64/signal.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.rsp # elif defined __i386__ /* 32 bit registers */ /* See the definition of 'ucontext_t' in <signal.h> and of 'struct vregs' in <arch/x86/signal.h>. */ # define SIGSEGV_FAULT_STACKPOINTER ((ucontext_t *) ucp)->uc_mcontext.esp # endif #endif /* ========================================================================== */ /* List of signals that are sent when an invalid virtual memory address is accessed, or when the stack overflows. */ #if defined __GNU__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ || defined __OpenBSD__ \ || (defined __APPLE__ && defined __MACH__) # define SIGSEGV_FOR_ALL_SIGNALS(var,body) \ { int var; var = SIGSEGV; { body } var = SIGBUS; { body } } #else # define SIGSEGV_FOR_ALL_SIGNALS(var,body) \ { int var; var = SIGSEGV; { body } } #endif /* ========================================================================== */ /* Determine the virtual memory area of a given address. */ #include "stackvma.h" /* ========================================================================== */ /* On the average Unix platform, we define HAVE_SIGSEGV_RECOVERY if there is a fault-*.h include file which defines SIGSEGV_FAULT_HANDLER_ARGLIST and SIGSEGV_FAULT_ADDRESS. HAVE_STACK_OVERFLOW_RECOVERY if HAVE_SIGALTSTACK is set and at least two of the following are true: A) There is a fault-*.h include file which defines SIGSEGV_FAULT_HANDLER_ARGLIST and SIGSEGV_FAULT_ADDRESS. B) There is a fault-*.h include file which defines SIGSEGV_FAULT_HANDLER_ARGLIST and SIGSEGV_FAULT_STACKPOINTER. C) There is a stackvma-*.c, other than stackvma-none.c, which defines sigsegv_get_vma. Why? Obviously, to catch stack overflow, we need an alternate signal stack; this requires kernel support. But we also need to distinguish (with a reasonable confidence) a stack overflow from a regular SIGSEGV. If we have A) and B), we use the Heuristic AB: If the fault address is near the stack pointer, it's a stack overflow. If we have A) and C), we use the Heuristic AC: If the fault address is near and beyond the bottom of the stack's virtual memory area, it's a stack overflow. If we have B) and C), we use the Heuristic BC: If the stack pointer is near the bottom of the stack's virtual memory area, it's a stack overflow. This heuristic comes in two flavours: On OSes which let the stack's VMA grow continuously, we determine the bottom by use of getrlimit(). On OSes which preallocate the stack's VMA with its maximum size (like BeOS), we use the stack's VMA directly. */ #if HAVE_SIGSEGV_RECOVERY \ && !(defined SIGSEGV_FAULT_HANDLER_ARGLIST && defined SIGSEGV_FAULT_ADDRESS) # error "You need to define SIGSEGV_FAULT_HANDLER_ARGLIST and SIGSEGV_FAULT_ADDRESS before you can define HAVE_SIGSEGV_RECOVERY." #endif #if !HAVE_SIGSEGV_RECOVERY \ && (defined SIGSEGV_FAULT_HANDLER_ARGLIST && defined SIGSEGV_FAULT_ADDRESS) \ && !(defined __FreeBSD__ && (defined __sparc__ || defined __sparc64__)) # if __GNUC__ || (__clang_major__ >= 4) # warning "You can define HAVE_SIGSEGV_RECOVERY on this platform." # else # error "You can define HAVE_SIGSEGV_RECOVERY on this platform." # endif #endif #if HAVE_STACK_OVERFLOW_RECOVERY \ && !(defined SIGSEGV_FAULT_ADDRESS + defined SIGSEGV_FAULT_STACKPOINTER + HAVE_STACKVMA >= 2) # error "You need to define two of SIGSEGV_FAULT_ADDRESS, SIGSEGV_FAULT_STACKPOINTER, HAVE_STACKVMA, before you can define HAVE_STACK_OVERFLOW_RECOVERY." #endif #if !HAVE_STACK_OVERFLOW_RECOVERY \ && (defined SIGSEGV_FAULT_ADDRESS + defined SIGSEGV_FAULT_STACKPOINTER + HAVE_STACKVMA >= 2) \ && !(defined __FreeBSD__ && (defined __sparc__ || defined __sparc64__)) \ && !(defined __NetBSD__ && (defined __sparc__ || defined __sparc64__)) # if __GNUC__ || (__clang_major__ >= 4) # warning "You can define HAVE_STACK_OVERFLOW_RECOVERY on this platform." # else # error "You can define HAVE_STACK_OVERFLOW_RECOVERY on this platform." # endif #endif /* ========================================================================== */ #if HAVE_STACK_OVERFLOW_RECOVERY /* ======= Leaving a signal handler executing on the alternate stack ======= */ /* Platform dependent: Leaving a signal handler executing on the alternate stack. */ static void sigsegv_reset_onstack_flag (void); /* -------------------------- leave-sigaltstack.c -------------------------- */ # if defined __GNU__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ || defined __OpenBSD__ static void sigsegv_reset_onstack_flag (void) { stack_t ss; if (sigaltstack (NULL, &ss) >= 0) { ss.ss_flags &= ~SS_ONSTACK; sigaltstack (&ss, NULL); } } /* --------------------------- leave-setcontext.c --------------------------- */ # elif defined __sgi || defined __sun /* IRIX, Solaris */ # include <ucontext.h> static void sigsegv_reset_onstack_flag (void) { ucontext_t uc; if (getcontext (&uc) >= 0) /* getcontext returns twice. We are interested in the returned context only the first time, i.e. when the SS_ONSTACK bit is set. */ if (uc.uc_stack.ss_flags & SS_ONSTACK) { uc.uc_stack.ss_flags &= ~SS_ONSTACK; /* Note that setcontext() does not refill uc. Therefore if setcontext() keeps SS_ONSTACK set in the kernel, either setcontext() will return -1 or getcontext() will return a second time, with the SS_ONSTACK bit being cleared. */ setcontext (&uc); } } /* ------------------------------ leave-nop.c ------------------------------ */ # else static void sigsegv_reset_onstack_flag (void) { /* Nothing to do. sigaltstack() simply looks at the stack pointer, therefore SS_ONSTACK is not sticky. */ } # endif /* ========================================================================== */ # if HAVE_STACKVMA /* Address of the last byte belonging to the stack vma. */ static uintptr_t stack_top = 0; /* Needs to be called once only. */ static void remember_stack_top (void *some_variable_on_stack) { struct vma_struct vma; if (sigsegv_get_vma ((uintptr_t) some_variable_on_stack, &vma) >= 0) stack_top = vma.end - 1; } # endif /* HAVE_STACKVMA */ static stackoverflow_handler_t stk_user_handler = (stackoverflow_handler_t)NULL; static uintptr_t stk_extra_stack; static size_t stk_extra_stack_size; #endif /* HAVE_STACK_OVERFLOW_RECOVERY */ #if HAVE_SIGSEGV_RECOVERY /* User's SIGSEGV handler. */ static sigsegv_handler_t user_handler = (sigsegv_handler_t)NULL; #endif /* HAVE_SIGSEGV_RECOVERY */ /* Our SIGSEGV handler, with OS dependent argument list. */ #if HAVE_SIGSEGV_RECOVERY static void sigsegv_handler (SIGSEGV_FAULT_HANDLER_ARGLIST) { void *address = (void *) (SIGSEGV_FAULT_ADDRESS); # if HAVE_STACK_OVERFLOW_RECOVERY # if !(HAVE_STACKVMA || defined SIGSEGV_FAULT_STACKPOINTER) #error "Insufficient heuristics for detecting a stack overflow. Either define CFG_STACKVMA and HAVE_STACKVMA correctly, or define SIGSEGV_FAULT_STACKPOINTER correctly, or undefine HAVE_STACK_OVERFLOW_RECOVERY!" # endif /* Call user's handler. */ if (user_handler && (*user_handler) (address, 0)) { /* Handler successful. */ } else { /* Handler declined responsibility. */ /* Did the user install a stack overflow handler? */ if (stk_user_handler) { /* See whether it was a stack overflow. If so, longjump away. */ # ifdef SIGSEGV_FAULT_STACKPOINTER uintptr_t old_sp = (uintptr_t) (SIGSEGV_FAULT_STACKPOINTER); # ifdef __ia64 uintptr_t old_bsp = (uintptr_t) (SIGSEGV_FAULT_BSP_POINTER); # endif # endif # if HAVE_STACKVMA /* Were we able to determine the stack top? */ if (stack_top) { /* Determine stack bounds. */ int saved_errno; struct vma_struct vma; int ret; saved_errno = errno; ret = sigsegv_get_vma (stack_top, &vma); errno = saved_errno; if (ret >= 0) { # ifndef BOGUS_FAULT_ADDRESS_UPON_STACK_OVERFLOW /* Heuristic AC: If the fault_address is nearer to the stack segment's [start,end] than to the previous segment, we consider it a stack overflow. In the case of IA-64, we know that the previous segment is the up-growing bsp segment, and either of the two stacks can overflow. */ uintptr_t addr = (uintptr_t) address; # ifdef __ia64 if (addr >= vma.prev_end && addr <= vma.end - 1) # else # if STACK_DIRECTION < 0 if (addr >= vma.start ? (addr <= vma.end - 1) : vma.is_near_this (addr, &vma)) # else if (addr <= vma.end - 1 ? (addr >= vma.start) : vma.is_near_this (addr, &vma)) # endif # endif { # else /* BOGUS_FAULT_ADDRESS_UPON_STACK_OVERFLOW */ # if HAVE_GETRLIMIT && defined RLIMIT_STACK /* Heuristic BC: If the stack size has reached its maximal size, and old_sp is near the low end, we consider it a stack overflow. */ struct rlimit rl; saved_errno = errno; ret = getrlimit (RLIMIT_STACK, &rl); errno = saved_errno; if (ret >= 0) { uintptr_t current_stack_size = vma.end - vma.start; uintptr_t max_stack_size = rl.rlim_cur; if (current_stack_size <= max_stack_size + 4096 && max_stack_size <= current_stack_size + 4096 # else { if (1 # endif # ifdef SIGSEGV_FAULT_STACKPOINTER /* Heuristic BC: If we know old_sp, and it is neither near the low end, nor in the alternate stack, then it's probably not a stack overflow. */ && ((old_sp >= stk_extra_stack && old_sp <= stk_extra_stack + stk_extra_stack_size) # if STACK_DIRECTION < 0 || (old_sp <= vma.start + 4096 && vma.start <= old_sp + 4096)) # else || (old_sp <= vma.end + 4096 && vma.end <= old_sp + 4096)) # endif # endif ) # endif /* BOGUS_FAULT_ADDRESS_UPON_STACK_OVERFLOW */ # else /* !HAVE_STACKVMA */ /* Heuristic AB: If the fault address is near the stack pointer, it's a stack overflow. */ uintptr_t addr = (uintptr_t) address; if ((addr <= old_sp + 4096 && old_sp <= addr + 4096) # ifdef __ia64 || (addr <= old_bsp + 4096 && old_bsp <= addr + 4096) # endif ) { { { # endif /* !HAVE_STACKVMA */ { # ifdef SIGSEGV_FAULT_STACKPOINTER int emergency = (old_sp >= stk_extra_stack && old_sp <= stk_extra_stack + stk_extra_stack_size); stackoverflow_context_t context = (SIGSEGV_FAULT_CONTEXT); # else int emergency = 0; stackoverflow_context_t context = (void *) 0; # endif /* Call user's handler. */ (*stk_user_handler) (emergency, context); } } } } } # endif /* HAVE_STACK_OVERFLOW_RECOVERY */ if (user_handler && (*user_handler) (address, 1)) { /* Handler successful. */ } else { /* Handler declined responsibility for real. */ /* Remove ourselves and dump core. */ SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo, SIG_DFL);) } # if HAVE_STACK_OVERFLOW_RECOVERY } # endif /* HAVE_STACK_OVERFLOW_RECOVERY */ } #elif HAVE_STACK_OVERFLOW_RECOVERY static void # ifdef SIGSEGV_FAULT_STACKPOINTER sigsegv_handler (SIGSEGV_FAULT_HANDLER_ARGLIST) # else sigsegv_handler (int sig) # endif { # if !((HAVE_GETRLIMIT && defined RLIMIT_STACK) || defined SIGSEGV_FAULT_STACKPOINTER) # error "Insufficient heuristics for detecting a stack overflow. Either define SIGSEGV_FAULT_STACKPOINTER correctly, or undefine HAVE_STACK_OVERFLOW_RECOVERY!" # endif /* Did the user install a handler? */ if (stk_user_handler) { /* See whether it was a stack overflow. If so, longjump away. */ # ifdef SIGSEGV_FAULT_STACKPOINTER uintptr_t old_sp = (uintptr_t) (SIGSEGV_FAULT_STACKPOINTER); # endif /* Were we able to determine the stack top? */ if (stack_top) { /* Determine stack bounds. */ int saved_errno; struct vma_struct vma; int ret; saved_errno = errno; ret = sigsegv_get_vma (stack_top, &vma); errno = saved_errno; if (ret >= 0) { # if HAVE_GETRLIMIT && defined RLIMIT_STACK /* Heuristic BC: If the stack size has reached its maximal size, and old_sp is near the low end, we consider it a stack overflow. */ struct rlimit rl; saved_errno = errno; ret = getrlimit (RLIMIT_STACK, &rl); errno = saved_errno; if (ret >= 0) { uintptr_t current_stack_size = vma.end - vma.start; uintptr_t max_stack_size = rl.rlim_cur; if (current_stack_size <= max_stack_size + 4096 && max_stack_size <= current_stack_size + 4096 # else { if (1 # endif # ifdef SIGSEGV_FAULT_STACKPOINTER /* Heuristic BC: If we know old_sp, and it is neither near the low end, nor in the alternate stack, then it's probably not a stack overflow. */ && ((old_sp >= stk_extra_stack && old_sp <= stk_extra_stack + stk_extra_stack_size) # if STACK_DIRECTION < 0 || (old_sp <= vma.start + 4096 && vma.start <= old_sp + 4096)) # else || (old_sp <= vma.end + 4096 && vma.end <= old_sp + 4096)) # endif # endif ) { # ifdef SIGSEGV_FAULT_STACKPOINTER int emergency = (old_sp >= stk_extra_stack && old_sp <= stk_extra_stack + stk_extra_stack_size); stackoverflow_context_t context = (SIGSEGV_FAULT_CONTEXT); # else int emergency = 0; stackoverflow_context_t context = (void *) 0; # endif /* Call user's handler. */ (*stk_user_handler)(emergency,context); } } } } } /* Remove ourselves and dump core. */ SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo, SIG_DFL);) } #endif #if HAVE_SIGSEGV_RECOVERY || HAVE_STACK_OVERFLOW_RECOVERY static void install_for (int sig) { struct sigaction action; # ifdef SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO action.sa_sigaction = &sigsegv_handler; # else action.sa_handler = (void (*) (int)) &sigsegv_handler; # endif /* Block most signals while SIGSEGV is being handled. */ /* Signals SIGKILL, SIGSTOP cannot be blocked. */ /* Signals SIGCONT, SIGTSTP, SIGTTIN, SIGTTOU are not blocked because dealing with these signals seems dangerous. */ /* Signals SIGILL, SIGABRT, SIGFPE, SIGSEGV, SIGTRAP, SIGIOT, SIGEMT, SIGBUS, SIGSYS, SIGSTKFLT are not blocked because these are synchronous signals, which may require immediate intervention, otherwise the process may starve. */ sigemptyset (&action.sa_mask); # ifdef SIGHUP sigaddset (&action.sa_mask,SIGHUP); # endif # ifdef SIGINT sigaddset (&action.sa_mask,SIGINT); # endif # ifdef SIGQUIT sigaddset (&action.sa_mask,SIGQUIT); # endif # ifdef SIGPIPE sigaddset (&action.sa_mask,SIGPIPE); # endif # ifdef SIGALRM sigaddset (&action.sa_mask,SIGALRM); # endif # ifdef SIGTERM sigaddset (&action.sa_mask,SIGTERM); # endif # ifdef SIGUSR1 sigaddset (&action.sa_mask,SIGUSR1); # endif # ifdef SIGUSR2 sigaddset (&action.sa_mask,SIGUSR2); # endif # ifdef SIGCHLD sigaddset (&action.sa_mask,SIGCHLD); # endif # ifdef SIGCLD sigaddset (&action.sa_mask,SIGCLD); # endif # ifdef SIGURG sigaddset (&action.sa_mask,SIGURG); # endif # ifdef SIGIO sigaddset (&action.sa_mask,SIGIO); # endif # ifdef SIGPOLL sigaddset (&action.sa_mask,SIGPOLL); # endif # ifdef SIGXCPU sigaddset (&action.sa_mask,SIGXCPU); # endif # ifdef SIGXFSZ sigaddset (&action.sa_mask,SIGXFSZ); # endif # ifdef SIGVTALRM sigaddset (&action.sa_mask,SIGVTALRM); # endif # ifdef SIGPROF sigaddset (&action.sa_mask,SIGPROF); # endif # ifdef SIGPWR sigaddset (&action.sa_mask,SIGPWR); # endif # ifdef SIGLOST sigaddset (&action.sa_mask,SIGLOST); # endif # ifdef SIGWINCH sigaddset (&action.sa_mask,SIGWINCH); # endif /* Note that sigaction() implicitly adds sig itself to action.sa_mask. */ /* Ask the OS to provide a structure siginfo_t to the handler. */ # ifdef SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO action.sa_flags = SA_SIGINFO; # else action.sa_flags = 0; # endif # if HAVE_STACK_OVERFLOW_RECOVERY && HAVE_SIGALTSTACK /* not BeOS */ /* Work around Linux 2.2.5 bug: If SA_ONSTACK is specified but sigaltstack() has not been called, the kernel will busy loop, eating CPU time. So avoid setting SA_ONSTACK until the user has requested stack overflow handling. */ if (stk_user_handler) action.sa_flags |= SA_ONSTACK; # endif sigaction (sig, &action, (struct sigaction *) NULL); } #endif /* HAVE_SIGSEGV_RECOVERY || HAVE_STACK_OVERFLOW_RECOVERY */ int sigsegv_install_handler (sigsegv_handler_t handler) { #if HAVE_SIGSEGV_RECOVERY user_handler = handler; SIGSEGV_FOR_ALL_SIGNALS (sig, install_for (sig);) return 0; #else return -1; #endif } void sigsegv_deinstall_handler (void) { #if HAVE_SIGSEGV_RECOVERY user_handler = (sigsegv_handler_t)NULL; # if HAVE_STACK_OVERFLOW_RECOVERY if (!stk_user_handler) # endif { SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);) } #endif } int sigsegv_leave_handler (void (*continuation) (void*, void*, void*), void* cont_arg1, void* cont_arg2, void* cont_arg3) { #if HAVE_STACK_OVERFLOW_RECOVERY /* * Reset the system's knowledge that we are executing on the alternate * stack. If we didn't do that, siglongjmp would be needed instead of * longjmp to leave the signal handler. */ sigsegv_reset_onstack_flag (); #endif (*continuation) (cont_arg1, cont_arg2, cont_arg3); return 1; } int stackoverflow_install_handler (stackoverflow_handler_t handler, void *extra_stack, size_t extra_stack_size) { #if HAVE_STACK_OVERFLOW_RECOVERY # if HAVE_STACKVMA if (!stack_top) { int dummy; remember_stack_top (&dummy); if (!stack_top) return -1; } # endif stk_user_handler = handler; stk_extra_stack = (uintptr_t) extra_stack; stk_extra_stack_size = extra_stack_size; { stack_t ss; # if SIGALTSTACK_SS_REVERSED ss.ss_sp = (char *) extra_stack + extra_stack_size - sizeof (void *); ss.ss_size = extra_stack_size - sizeof (void *); # else ss.ss_sp = extra_stack; ss.ss_size = extra_stack_size; # endif ss.ss_flags = 0; /* no SS_DISABLE */ if (sigaltstack (&ss, (stack_t*)0) < 0) return -1; } /* Install the signal handlers with SA_ONSTACK. */ SIGSEGV_FOR_ALL_SIGNALS (sig, install_for (sig);) return 0; #else return -1; #endif } void stackoverflow_deinstall_handler (void) { #if HAVE_STACK_OVERFLOW_RECOVERY stk_user_handler = (stackoverflow_handler_t) NULL; # if HAVE_SIGSEGV_RECOVERY if (user_handler) { /* Reinstall the signal handlers without SA_ONSTACK, to avoid Linux bug. */ SIGSEGV_FOR_ALL_SIGNALS (sig, install_for (sig);) } else # endif { SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);) } { stack_t ss; ss.ss_flags = SS_DISABLE; if (sigaltstack (&ss, (stack_t *) 0) < 0) perror ("gnulib sigsegv (stackoverflow_deinstall_handler)"); } #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sigsegv.in.h������������������������������������������������������������0000664�0000000�0000000�00000023321�14110572173�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Page fault handling library. Copyright (C) 1998-2021 Free Software Foundation, Inc. This 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 2 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. */ #ifndef _SIGSEGV_H #define _SIGSEGV_H /* Get size_t. */ #include <stddef.h> /* Define the fault context structure. */ #if defined __linux__ || defined __ANDROID__ \ || (defined __FreeBSD__ && (defined __arm__ || defined __armhf__ || defined __arm64__)) \ || defined __NetBSD__ \ || defined _AIX || defined __sun \ || defined __CYGWIN__ /* Linux, FreeBSD, NetBSD, AIX, Solaris, Cygwin */ # include <ucontext.h> #elif (defined __APPLE__ && defined __MACH__) /* macOS */ # include <sys/ucontext.h> #elif defined __HAIKU__ /* Haiku */ # include <signal.h> #endif /* Correct the value of SIGSTKSZ on some systems. glibc >= 2.34: When _GNU_SOURCE is defined, SIGSTKSZ is no longer a compile-time constant. But most programs need a simple constant. AIX 64-bit: original value 4096 is too small. HP-UX: original value 8192 is too small. Solaris 11/x86_64: original value 8192 is too small. */ #include <signal.h> #if __GLIBC__ >= 2 # undef SIGSTKSZ # if defined __ia64__ # define SIGSTKSZ 262144 # else # define SIGSTKSZ 65536 # endif #endif #if defined _AIX && defined _ARCH_PPC64 # undef SIGSTKSZ # define SIGSTKSZ 8192 #endif #if defined __hpux || (defined __sun && (defined __x86_64__ || defined __amd64__)) # undef SIGSTKSZ # define SIGSTKSZ 16384 #endif /* HAVE_SIGSEGV_RECOVERY is defined if the system supports catching SIGSEGV. */ #if defined __linux__ || defined __ANDROID__ || defined __GNU__ \ || defined __FreeBSD_kernel__ || (defined __FreeBSD__ && !(defined __sparc__ || defined __sparc64__)) || defined __DragonFly__ \ || defined __NetBSD__ \ || defined __OpenBSD__ \ || (defined __APPLE__ && defined __MACH__) \ || defined _AIX || defined __sgi || defined __sun \ || defined __CYGWIN__ || defined __HAIKU__ /* Linux, Hurd, GNU/kFreeBSD, FreeBSD, NetBSD, OpenBSD, macOS, AIX, IRIX, Solaris, Cygwin, Haiku */ # define HAVE_SIGSEGV_RECOVERY 1 #endif /* HAVE_STACK_OVERFLOW_RECOVERY is defined if stack overflow can be caught. */ #if defined __linux__ || defined __ANDROID__ || defined __GNU__ \ || defined __FreeBSD_kernel__ || (defined __FreeBSD__ && !(defined __sparc__ || defined __sparc64__)) || defined __DragonFly__ \ || (defined __NetBSD__ && !(defined __sparc__ || defined __sparc64__)) \ || defined __OpenBSD__ \ || (defined __APPLE__ && defined __MACH__) \ || defined _AIX || defined __sgi || defined __sun \ || defined __CYGWIN__ || defined __HAIKU__ /* Linux, Hurd, GNU/kFreeBSD, FreeBSD, NetBSD, OpenBSD, macOS, AIX, IRIX, Solaris, Cygwin, Haiku */ # define HAVE_STACK_OVERFLOW_RECOVERY 1 #endif #ifdef __cplusplus extern "C" { #endif #define LIBSIGSEGV_VERSION 0x020D /* version number: (major<<8) + minor */ extern int libsigsegv_version; /* Likewise */ /* -------------------------------------------------------------------------- */ #if 1 /* really only HAVE_SIGSEGV_RECOVERY */ /* * The mask of bits that are set to zero in a fault address that gets passed * to a global SIGSEGV handler. * On some platforms, the precise fault address is not known, only the memory * page into which the fault address falls. This is apparently allowed by POSIX: * <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> * says: "For some implementations, the value of si_addr may be inaccurate." * In this case, the returned fault address is rounded down to a multiple of * getpagesize() = sysconf(_SC_PAGESIZE). * On such platforms, we define SIGSEGV_FAULT_ADDRESS_ALIGNMENT to be an upper * bound for getpagesize() (and, like getpagesize(), also a power of 2). * On the platforms where the returned fault address is the precise one, we * define SIGSEGV_FAULT_ADDRESS_ALIGNMENT to 1. */ # if defined __NetBSD__ && (defined __sparc__ || defined __sparc64__) /* getpagesize () is 0x1000 or 0x2000, depending on hardware. */ # define SIGSEGV_FAULT_ADDRESS_ALIGNMENT 0x2000UL # elif defined __linux__ && (defined __s390__ || defined __s390x__) /* getpagesize () is 0x1000. */ # define SIGSEGV_FAULT_ADDRESS_ALIGNMENT 0x1000UL # else # define SIGSEGV_FAULT_ADDRESS_ALIGNMENT 1UL # endif /* * The type of a global SIGSEGV handler. * The fault address, with the bits (SIGSEGV_FAULT_ADDRESS_ALIGNMENT - 1) * cleared, is passed as argument. * The access type (read access or write access) is not passed; your handler * has to know itself how to distinguish these two cases. * The second argument is 0, meaning it could also be a stack overflow, or 1, * meaning the handler should seriously try to fix the fault. * The return value should be nonzero if the handler has done its job * and no other handler should be called, or 0 if the handler declines * responsibility for the given address. * * The handler is run at a moment when nothing about the global state of the * program is known. Therefore it cannot use facilities that manipulate global * variables or locks. In particular, it cannot use malloc(); use mmap() * instead. It cannot use fopen(); use open() instead. Etc. All global * variables that are accessed by the handler should be marked 'volatile'. */ typedef int (*sigsegv_handler_t) (void* fault_address, int serious); /* * Installs a global SIGSEGV handler. * This should be called once only, and it ignores any previously installed * SIGSEGV handler. * Returns 0 on success, or -1 if the system doesn't support catching SIGSEGV. */ extern int sigsegv_install_handler (sigsegv_handler_t handler); /* * Deinstalls the global SIGSEGV handler. * This goes back to the state where no SIGSEGV handler is installed. */ extern void sigsegv_deinstall_handler (void); /* * Prepares leaving a SIGSEGV handler (through longjmp or similar means). * Control is transferred by calling CONTINUATION with CONT_ARG1, CONT_ARG2, * CONT_ARG3 as arguments. * CONTINUATION must not return. * The sigsegv_leave_handler function may return if called from a SIGSEGV * handler; its return value should be used as the handler's return value. * The sigsegv_leave_handler function does not return if called from a * stack overflow handler. */ extern int sigsegv_leave_handler (void (*continuation) (void*, void*, void*), void* cont_arg1, void* cont_arg2, void* cont_arg3); #endif /* HAVE_SIGSEGV_RECOVERY */ #if 1 /* really only HAVE_STACK_OVERFLOW_RECOVERY */ /* * The type of a context passed to a stack overflow handler. * This type is system dependent; on some platforms it is an 'ucontext_t *', * on some platforms it is a 'struct sigcontext *', on others merely an * opaque 'void *'. */ # if defined __linux__ || defined __ANDROID__ \ || (defined __FreeBSD__ && (defined __arm__ || defined __armhf__ || defined __arm64__)) \ || defined __NetBSD__ \ || (defined __APPLE__ && defined __MACH__) \ || defined _AIX || defined __sun \ || defined __CYGWIN__ || defined __HAIKU__ typedef ucontext_t *stackoverflow_context_t; # elif defined __GNU__ \ || defined __FreeBSD_kernel__ || (defined __FreeBSD__ && !(defined __sparc__ || defined __sparc64__)) || defined __DragonFly__ \ || defined __OpenBSD__ || defined __sgi typedef struct sigcontext *stackoverflow_context_t; # else typedef void *stackoverflow_context_t; # endif /* * The type of a stack overflow handler. * Such a handler should perform a longjmp call in order to reduce the amount * of stack needed. It must not return. * The emergency argument is 0 when the stack could be repared, or 1 if the * application should better save its state and exit now. * * The handler is run at a moment when nothing about the global state of the * program is known. Therefore it cannot use facilities that manipulate global * variables or locks. In particular, it cannot use malloc(); use mmap() * instead. It cannot use fopen(); use open() instead. Etc. All global * variables that are accessed by the handler should be marked 'volatile'. */ typedef void (*stackoverflow_handler_t) (int emergency, stackoverflow_context_t scp); /* * Installs a stack overflow handler. * The extra_stack argument is a pointer to a pre-allocated area used as a * stack for executing the handler. It typically comes from a static variable * or from heap-allocated memoty; placing it on the main stack may fail on * some operating systems. * Its size, passed in extra_stack_size, should be sufficiently large. The * following code determines an appropriate size: * #include <signal.h> * #ifndef SIGSTKSZ / * glibc defines SIGSTKSZ for this purpose * / * # define SIGSTKSZ 16384 / * on most platforms, 16 KB are sufficient * / * #endif * Returns 0 on success, or -1 if the system doesn't support catching stack * overflow. */ extern int stackoverflow_install_handler (stackoverflow_handler_t handler, void* extra_stack, size_t extra_stack_size); /* * Deinstalls the stack overflow handler. */ extern void stackoverflow_deinstall_handler (void); #endif /* HAVE_STACK_OVERFLOW_RECOVERY */ /* -------------------------------------------------------------------------- */ #ifdef __cplusplus } #endif #endif /* _SIGSEGV_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/simple-atomic.c���������������������������������������������������������0000664�0000000�0000000�00000024075�14110572173�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple atomic operations for multithreading. Copyright (C) 2020-2021 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>, 2021. */ #include <config.h> /* Specification. */ #include "simple-atomic.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows. */ # include <windows.h> void memory_barrier (void) { /* MemoryBarrier <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-memorybarrier> */ MemoryBarrier (); } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { /* InterlockedCompareExchange <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedcompareexchange> */ return InterlockedCompareExchange ((LONG volatile *) vp, (LONG) newval, (LONG) cmp); } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { /* InterlockedCompareExchangePointer <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedcompareexchangepointer> */ return InterlockedCompareExchangePointer ((void * volatile *) vp, (void *) newval, (void *) cmp); } #elif HAVE_PTHREAD_H /* Some other platform that supports multi-threading. We don't use the C11 <stdatomic.h> (available in GCC >= 4.9) because it would require to link with -latomic. */ # if (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ && !defined __sparc__) \ || __clang_major__ >= 3) \ && !defined __ibmxl__ /* Use GCC built-ins (available in GCC >= 4.1, except on SPARC, and clang >= 3.0). Documentation: <https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html> */ void memory_barrier (void) { __sync_synchronize (); } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { return __sync_val_compare_and_swap (vp, cmp, newval); } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { return __sync_val_compare_and_swap (vp, cmp, newval); } # elif defined _AIX /* AIX */ /* For older versions of GCC or xlc, use inline assembly. __compare_and_swap and __compare_and_swaplp are not sufficient here. */ void memory_barrier (void) { asm volatile ("sync"); } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { asm volatile ("sync"); unsigned int oldval; asm volatile ( # if defined __GNUC__ || defined __clang__ "1: lwarx %0,0,%1\n" " cmpw 0,%0,%2\n" " bne 0,2f\n" " stwcx. %3,0,%1\n" " bne 0,1b\n" "2:" # else /* another label syntax */ ".L01: lwarx %0,0,%1\n" " cmpw 0,%0,%2\n" " bne 0,.L02\n" " stwcx. %3,0,%1\n" " bne 0,.L01\n" ".L02:" # endif : "=&r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "cr0"); asm volatile ("isync"); return oldval; } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { asm volatile ("sync"); uintptr_t oldval; asm volatile ( # if defined __GNUC__ || defined __clang__ # if defined __powerpc64__ || defined __LP64__ "1: ldarx %0,0,%1\n" " cmpd 0,%0,%2\n" " bne 0,2f\n" " stdcx. %3,0,%1\n" " bne 0,1b\n" "2:" # else "1: lwarx %0,0,%1\n" " cmpw 0,%0,%2\n" " bne 0,2f\n" " stwcx. %3,0,%1\n" " bne 0,1b\n" "2:" # endif # else /* another label syntax */ # if defined __powerpc64__ || defined __LP64__ ".L01: ldarx %0,0,%1\n" " cmpd 0,%0,%2\n" " bne 0,.L02\n" " stdcx. %3,0,%1\n" " bne 0,.L01\n" ".L02:" # else ".L01: lwarx %0,0,%1\n" " cmpw 0,%0,%2\n" " bne 0,.L02\n" " stwcx. %3,0,%1\n" " bne 0,.L01\n" ".L02:" # endif # endif : "=&r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "cr0"); asm volatile ("isync"); return oldval; } # elif ((defined __GNUC__ || defined __clang__ || defined __SUNPRO_C) && (defined __sparc || defined __i386 || defined __x86_64__)) || (defined __TINYC__ && (defined __i386 || defined __x86_64__)) /* For older versions of GCC or clang, use inline assembly. GCC, clang, and the Oracle Studio C 12 compiler understand GCC's extended asm syntax, but the plain Oracle Studio C 11 compiler understands only simple asm. */ void memory_barrier (void) { # if defined __GNUC__ || defined __clang__ || __SUNPRO_C >= 0x590 || defined __TINYC__ # if defined __i386 || defined __x86_64__ # if defined __TINYC__ && defined __i386 /* Cannot use the SSE instruction "mfence" with this compiler. */ asm volatile ("lock orl $0,(%esp)"); # else asm volatile ("mfence"); # endif # endif # if defined __sparc asm volatile ("membar 2"); # endif # else # if defined __i386 || defined __x86_64__ asm ("mfence"); # endif # if defined __sparc asm ("membar 2"); # endif # endif } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { # if defined __GNUC__ || defined __clang__ || __SUNPRO_C >= 0x590 || defined __TINYC__ unsigned int oldval; # if defined __i386 || defined __x86_64__ asm volatile (" lock\n cmpxchgl %3,(%1)" : "=a" (oldval) : "r" (vp), "a" (cmp), "r" (newval) : "memory"); # endif # if defined __sparc asm volatile (" cas [%1],%2,%3\n" " mov %3,%0" : "=r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "memory"); # endif return oldval; # else /* __SUNPRO_C */ # if defined __x86_64__ asm (" movl %esi,%eax\n" " lock\n cmpxchgl %edx,(%rdi)"); # elif defined __i386 asm (" movl 16(%ebp),%ecx\n" " movl 12(%ebp),%eax\n" " movl 8(%ebp),%edx\n" " lock\n cmpxchgl %ecx,(%edx)"); # endif # if defined __sparc asm (" cas [%i0],%i1,%i2\n" " mov %i2,%i0"); # endif # endif } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { # if defined __GNUC__ || defined __clang__ || __SUNPRO_C >= 0x590 || defined __TINYC__ uintptr_t oldval; # if defined __x86_64__ asm volatile (" lock\n cmpxchgq %3,(%1)" : "=a" (oldval) : "r" (vp), "a" (cmp), "r" (newval) : "memory"); # elif defined __i386 asm volatile (" lock\n cmpxchgl %3,(%1)" : "=a" (oldval) : "r" (vp), "a" (cmp), "r" (newval) : "memory"); # endif # if defined __sparc && (defined __sparcv9 || defined __arch64__) asm volatile (" casx [%1],%2,%3\n" " mov %3,%0" : "=r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "memory"); # elif defined __sparc asm volatile (" cas [%1],%2,%3\n" " mov %3,%0" : "=r" (oldval) : "r" (vp), "r" (cmp), "r" (newval) : "memory"); # endif return oldval; # else /* __SUNPRO_C */ # if defined __x86_64__ asm (" movq %rsi,%rax\n" " lock\n cmpxchgq %rdx,(%rdi)"); # elif defined __i386 asm (" movl 16(%ebp),%ecx\n" " movl 12(%ebp),%eax\n" " movl 8(%ebp),%edx\n" " lock\n cmpxchgl %ecx,(%edx)"); # endif # if defined __sparc && (defined __sparcv9 || defined __arch64__) asm (" casx [%i0],%i1,%i2\n" " mov %i2,%i0"); # elif defined __sparc asm (" cas [%i0],%i1,%i2\n" " mov %i2,%i0"); # endif # endif } # else /* Fallback code. It has some race conditions. The unit test will fail. */ void memory_barrier (void) { } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { unsigned int oldval = *vp; if (oldval == cmp) *vp = newval; return oldval; } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { uintptr_t oldval = *vp; if (oldval == cmp) *vp = newval; return oldval; } # endif #else /* A platform that does not support multi-threading. */ void memory_barrier (void) { } unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval) { unsigned int oldval = *vp; if (oldval == cmp) *vp = newval; return oldval; } uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval) { uintptr_t oldval = *vp; if (oldval == cmp) *vp = newval; return oldval; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/simple-atomic.h���������������������������������������������������������0000664�0000000�0000000�00000003403�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple atomic operations for multithreading. Copyright (C) 2021 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>, 2021. */ #ifndef _SIMPLE_ATOMIC_H #define _SIMPLE_ATOMIC_H #include <stdint.h> #ifdef __cplusplus extern "C" { #endif /* Guarantees that memory stores that are in code before this call are finished before this call, and that memory loads that are in code after this call are started after this call. */ extern void memory_barrier (void); /* Stores NEWVAL in *VP if the old value *VP is == CMP. Returns the old value. */ extern unsigned int atomic_compare_and_swap (unsigned int volatile *vp, unsigned int cmp, unsigned int newval); /* Stores NEWVAL in *VP if the old value *VP is == CMP. Returns the old value. */ extern uintptr_t atomic_compare_and_swap_ptr (uintptr_t volatile *vp, uintptr_t cmp, uintptr_t newval); #ifdef __cplusplus } #endif #endif /* _SIMPLE_ATOMIC_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sincosl.c���������������������������������������������������������������0000664�0000000�0000000�00000167774�14110572173�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quad-precision floating point trigonometric functions on <-pi/4,pi/4>. Copyright (C) 1999, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> 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/>. */ #include <config.h> /* Specification. */ #include "trigl.h" #include <float.h> #include <math.h> /* Code based on glibc/sysdeps/ieee754/ldbl-128/k_sincosl.c or glibc/sysdeps/ieee754/ldbl-128/k_{sin,cos}l.c and glibc/sysdeps/ieee754/ldbl-128/t_sincosl.c. */ static const long double sin_c[] = { #define ONE sin_c[0] 1.00000000000000000000000000000000000E+00L, /* 3fff0000000000000000000000000000 */ /* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) x in <0,1/256> */ #define SCOS1 sin_c[1] #define SCOS2 sin_c[2] #define SCOS3 sin_c[3] #define SCOS4 sin_c[4] #define SCOS5 sin_c[5] -5.00000000000000000000000000000000000E-01L, /* bffe0000000000000000000000000000 */ 4.16666666666666666666666666556146073E-02L, /* 3ffa5555555555555555555555395023 */ -1.38888888888888888888309442601939728E-03L, /* bff56c16c16c16c16c16a566e42c0375 */ 2.48015873015862382987049502531095061E-05L, /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -2.75573112601362126593516899592158083E-07L, /* bfe927e4f5dce637cb0b54908754bde0 */ /* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) x in <0,0.1484375> */ #define SIN1 sin_c[6] #define SIN2 sin_c[7] #define SIN3 sin_c[8] #define SIN4 sin_c[9] #define SIN5 sin_c[10] #define SIN6 sin_c[11] #define SIN7 sin_c[12] #define SIN8 sin_c[13] -1.66666666666666666666666666666666538e-01L, /* bffc5555555555555555555555555550 */ 8.33333333333333333333333333307532934e-03L, /* 3ff811111111111111111111110e7340 */ -1.98412698412698412698412534478712057e-04L, /* bff2a01a01a01a01a01a019e7a626296 */ 2.75573192239858906520896496653095890e-06L, /* 3fec71de3a556c7338fa38527474b8f5 */ -2.50521083854417116999224301266655662e-08L, /* bfe5ae64567f544e16c7de65c2ea551f */ 1.60590438367608957516841576404938118e-10L, /* 3fde6124613a811480538a9a41957115 */ -7.64716343504264506714019494041582610e-13L, /* bfd6ae7f3d5aef30c7bc660b060ef365 */ 2.81068754939739570236322404393398135e-15L, /* 3fce9510115aabf87aceb2022a9a9180 */ /* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) x in <0,1/256> */ #define SSIN1 sin_c[14] #define SSIN2 sin_c[15] #define SSIN3 sin_c[16] #define SSIN4 sin_c[17] #define SSIN5 sin_c[18] -1.66666666666666666666666666666666659E-01L, /* bffc5555555555555555555555555555 */ 8.33333333333333333333333333146298442E-03L, /* 3ff81111111111111111111110fe195d */ -1.98412698412698412697726277416810661E-04L, /* bff2a01a01a01a01a019e7121e080d88 */ 2.75573192239848624174178393552189149E-06L, /* 3fec71de3a556c640c6aaa51aa02ab41 */ -2.50521016467996193495359189395805639E-08L, /* bfe5ae644ee90c47dc71839de75b2787 */ }; static const long double cos_c[] = { /* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) x in <0,0.1484375> */ #define COS1 cos_c[0] #define COS2 cos_c[1] #define COS3 cos_c[2] #define COS4 cos_c[3] #define COS5 cos_c[4] #define COS6 cos_c[5] #define COS7 cos_c[6] #define COS8 cos_c[7] -4.99999999999999999999999999999999759E-01L, /* bffdfffffffffffffffffffffffffffb */ 4.16666666666666666666666666651287795E-02L, /* 3ffa5555555555555555555555516f30 */ -1.38888888888888888888888742314300284E-03L, /* bff56c16c16c16c16c16c16a463dfd0d */ 2.48015873015873015867694002851118210E-05L, /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ -2.75573192239858811636614709689300351E-07L, /* bfe927e4fb7789f5aa8142a22044b51f */ 2.08767569877762248667431926878073669E-09L, /* 3fe21eed8eff881d1e9262d7adff4373 */ -1.14707451049343817400420280514614892E-11L, /* bfda9397496922a9601ed3d4ca48944b */ 4.77810092804389587579843296923533297E-14L, /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ }; #define SINCOSL_COS_HI 0 #define SINCOSL_COS_LO 1 #define SINCOSL_SIN_HI 2 #define SINCOSL_SIN_LO 3 static const long double sincosl_table[]; long double kernel_sinl (long double x, long double y, int iy) { long double h, l, z, sin_l, cos_l_m1; int index, sign; sign = 1; if (x < 0) { x = -x; sign = -1; } if (x < 0.1484375L) /* |x| < 0.1484375 */ { /* Argument is small enough to approximate it by a Chebyshev polynomial of degree 17. */ if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* |x| < 2^-57 */ if (!((int) x)) return x; /* generate inexact */ z = x * x; return x + (x * (z * (SIN1 + z * (SIN2 + z * (SIN3 + z * (SIN4 + z * (SIN5 + z * (SIN6 + z * (SIN7 + z * SIN8))))))))); } else { /* So that we don't have to use too large polynomial, we find k and l such that x = k + l, where fabsl(l) <= 1.0/256 with 83 possible values for k. We look up cosl(k) and sinl(k) in pre-computed tables, compute cosl(l) and sinl(l) using a Chebyshev polynomial of degree 10(11) and compute sinl(k+l) = sinl(k)cosl(l) + cosl(k)sinl(l). Furthermore write k = 0.1484375 + h. */ x -= 0.1484375L; index = (int) (x * 128L + 0.5L); h = index / 128.0L; if (iy) l = y - (h - x); else l = x - h; z = l * l; sin_l = l * (ONE + z * (SSIN1 + z * (SSIN2 + z * (SSIN3 + z * (SSIN4 + z * SSIN5))))); cos_l_m1 = z * (SCOS1 + z * (SCOS2 + z * (SCOS3 + z * (SCOS4 + z * SCOS5)))); index *= 4; /* We rely on this expression not being "contracted" by the compiler (cf. ISO C 99 section 6.5 paragraph 8). */ z = sincosl_table[index + SINCOSL_SIN_HI] + (sincosl_table[index + SINCOSL_COS_HI] * sin_l + (sincosl_table[index + SINCOSL_SIN_HI] * cos_l_m1 + (sincosl_table[index + SINCOSL_SIN_LO] * (1 + cos_l_m1) + sincosl_table[index + SINCOSL_COS_LO] * sin_l))); return z * sign; } } long double kernel_cosl (long double x, long double y) { long double h, l, z, sin_l, cos_l_m1; int index; if (x < 0) x = -x; if (x < 0.1484375L) /* |x| < 0.1484375 */ { /* Argument is small enough to approximate it by a Chebyshev polynomial of degree 16. */ if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* |x| < 2^-57 */ if (!((int) x)) return ONE; /* generate inexact */ z = x * x; return ONE + (z * (COS1 + z * (COS2 + z * (COS3 + z * (COS4 + z * (COS5 + z * (COS6 + z * (COS7 + z * COS8)))))))); } else { /* So that we don't have to use too large polynomial, we find k and l such that x = k + l, where fabsl(l) <= 1.0/256 with 83 possible values for k. We look up cosl(k) and sinl(k) in pre-computed tables, compute cosl(l) and sinl(l) using a Chebyshev polynomial of degree 10(11) and compute cosl(k+l) = cosl(k)cosl(l) - sinl(k)sinl(l). Furthermore write k = 0.1484375 + h. */ x -= 0.1484375L; index = (int) (x * 128L + 0.5L); h = index / 128.0L; l = y - (h - x); z = l * l; sin_l = l * (ONE + z * (SSIN1 + z * (SSIN2 + z * (SSIN3 + z * (SSIN4 + z * SSIN5))))); cos_l_m1 = z * (SCOS1 + z * (SCOS2 + z * (SCOS3 + z * (SCOS4 + z * SCOS5)))); index *= 4; /* We rely on this expression not being "contracted" by the compiler (cf. ISO C 99 section 6.5 paragraph 8). */ z = sincosl_table [index + SINCOSL_COS_HI] - (sincosl_table [index + SINCOSL_SIN_HI] * sin_l - (sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1 + (sincosl_table [index + SINCOSL_COS_LO] * (1 + cos_l_m1) - sincosl_table [index + SINCOSL_SIN_LO] * sin_l))); return z; } } /* For 0.1484375 + n/128.0, n=0..82 this table contains first 113 bits of cosine, then at least 113 additional bits and the same for sine. 0.1484375+82.0/128.0 is the smallest number among above defined numbers larger than pi/4. Computed using gmp. */ static const long double sincosl_table[] = { /* x = 1.48437500000000000000000000000000000e-01L 3ffc3000000000000000000000000000 */ /* cos(x) = 0.fd2f5320e1b790209b4dda2f98f79caaa7b873aff1014b0fbc5243766d03cb006bc837c4358 */ 9.89003367927322909016887196069562069e-01L, /* 3ffefa5ea641c36f2041369bb45f31ef */ 2.15663692029265697782289400027743703e-35L, /* 3f8bcaaa7b873aff1014b0fbc5243767 */ /* sin(x) = 0.25dc50bc95711d0d9787d108fd438cf5959ee0bfb7a1e36e8b1a112968f356657420e9cc9ea */ 1.47892995873409608580026675734609314e-01L, /* 3ffc2ee285e4ab88e86cbc3e8847ea1c */ 9.74950446464233268291647449768590886e-36L, /* 3f8a9eb2b3dc17f6f43c6dd16342252d */ /* x = 1.56250000000000000000000000000000000e-01 3ffc4000000000000000000000000000 */ /* cos(x) = 0.fce1a053e621438b6d60c76e8c45bf0a9dc71aa16f922acc10e95144ec796a249813c9cb649 */ 9.87817783816471944100503034363211317e-01L, /* 3ffef9c340a7cc428716dac18edd188b */ 4.74271307836705897892468107620526395e-35L, /* 3f8cf854ee38d50b7c915660874a8a27 */ /* sin(x) = 0.27d66258bacd96a3eb335b365c87d59438c5142bb56a489e9b8db9d36234ffdebb6bdc22d8e */ 1.55614992773556041209920643203516258e-01L, /* 3ffc3eb312c5d66cb51f599ad9b2e43f */ -7.83989563419287980121718050629497270e-36L, /* bf8a4d78e75d7a8952b6ec2c8e48c594 */ /* x = 1.64062500000000000000000000000000000e-01 3ffc5000000000000000000000000000 */ /* cos(x) = 0.fc8ffa01ba6807417e05962b0d9fdf1fddb0cc4c07d22e19e08019bffa50a6c7acdb40307a3 */ 9.86571908399497588757337407495308409e-01L, /* 3ffef91ff40374d00e82fc0b2c561b40 */ -2.47327949936985362476252401212720725e-35L, /* bf8c070112799d9fc16e8f30fbff3200 */ /* sin(x) = 0.29cfd49b8be4f665276cab01cbf0426934906c3dd105473b226e410b1450f62e53ff7c6cce1 */ 1.63327491736612850846866172454354370e-01L, /* 3ffc4e7ea4dc5f27b3293b65580e5f82 */ 1.81380344301155485770367902300754350e-36L, /* 3f88349a48361ee882a39d913720858a */ /* x = 1.71875000000000000000000000000000000e-01 3ffc6000000000000000000000000000 */ /* cos(x) = 0.fc3a6170f767ac735d63d99a9d439e1db5e59d3ef153a4265d5855850ed82b536bf361b80e3 */ 9.85265817718213816204294709759578994e-01L, /* 3ffef874c2e1eecf58e6bac7b3353a87 */ 2.26568029505818066141517497778527952e-35L, /* 3f8be1db5e59d3ef153a4265d5855851 */ /* sin(x) = 0.2bc89f9f424de5485de7ce03b2514952b9faf5648c3244d4736feb95dbb9da49f3b58a9253b */ 1.71030022031395019281347969239834331e-01L, /* 3ffc5e44fcfa126f2a42ef3e701d928a */ 7.01395875187487608875416030203241317e-36L, /* 3f8a2a573f5eac9186489a8e6dfd72bb */ /* x = 1.79687500000000000000000000000000000e-01 3ffc7000000000000000000000000000 */ /* cos(x) = 0.fbe0d7f7fef11e70aa43b8abf4f6a457cea20c8f3f676b47781f9821bbe9ce04b3c7b981c0b */ 9.83899591489663972178309351416487245e-01L, /* 3ffef7c1afeffde23ce154877157e9ed */ 2.73414318948066207810486330723761265e-35L, /* 3f8c22be75106479fb3b5a3bc0fcc10e */ /* sin(x) = 0.2dc0bb80b49a97ffb34e8dd1f8db9df7af47ed2dcf58b12c8e7827e048cae929da02c04ecac */ 1.78722113535153659375356241864180724e-01L, /* 3ffc6e05dc05a4d4bffd9a746e8fc6dd */ -1.52906926517265103202547561260594148e-36L, /* bf8804285c09691853a769b8c3ec0fdc */ /* x = 1.87500000000000000000000000000000000e-01 3ffc8000000000000000000000000000 */ /* cos(x) = 0.fb835efcf670dd2ce6fe7924697eea13ea358867e9cdb3899b783f4f9f43aa5626e8b67b3bc */ 9.82473313101255257487327683243622495e-01L, /* 3ffef706bdf9ece1ba59cdfcf248d2fe */ -1.64924358891557584625463868014230342e-35L, /* bf8b5ec15ca779816324c766487c0b06 */ /* sin(x) = 0.2fb8205f75e56a2b56a1c4792f856258769af396e0189ef72c05e4df59a6b00e4b44a6ea515 */ 1.86403296762269884552379983103205261e-01L, /* 3ffc7dc102fbaf2b515ab50e23c97c2b */ 1.76460304806826780010586715975331753e-36L, /* 3f882c3b4d79cb700c4f7b9602f26fad */ /* x = 1.95312500000000000000000000000000000e-01 3ffc9000000000000000000000000000 */ /* cos(x) = 0.fb21f7f5c156696b00ac1fe28ac5fd76674a92b4df80d9c8a46c684399005deccc41386257c */ 9.80987069605669190469329896435309665e-01L, /* 3ffef643efeb82acd2d601583fc5158c */ -1.90899259410096419886996331536278461e-36L, /* bf8844cc5ab6a5903f931badc9cbde34 */ /* sin(x) = 0.31aec65df552876f82ece9a2356713246eba6799983d7011b0b3698d6e1da919c15d57c30c1 */ 1.94073102892909791156055200214145404e-01L, /* 3ffc8d7632efaa943b7c17674d11ab39 */ -9.67304741051998267208945242944928999e-36L, /* bf8a9b7228b30cccf851fdc9e992ce52 */ /* x = 2.03125000000000000000000000000000000e-01 3ffca000000000000000000000000000 */ /* cos(x) = 0.fabca467fb3cb8f1d069f01d8ea33ade5bfd68296ecd1cc9f7b7609bbcf3676e726c3301334 */ 9.79440951715548359998530954502987493e-01L, /* 3ffef57948cff67971e3a0d3e03b1d46 */ 4.42878056591560757066844797290067990e-35L, /* 3f8cd6f2dfeb414b7668e64fbdbb04de */ /* sin(x) = 0.33a4a5a19d86246710f602c44df4fa513f4639ce938477aeeabb82e8e0a7ed583a188879fd4 */ 2.01731063801638804725038151164000971e-01L, /* 3ffc9d252d0cec31233887b016226fa8 */ -4.27513434754966978435151290617384120e-36L, /* bf896bb02e718c5b1ee21445511f45c8 */ /* x = 2.10937500000000000000000000000000000e-01 3ffcb000000000000000000000000000 */ /* cos(x) = 0.fa5365e8f1d3ca27be1db5d76ae64d983d7470a4ab0f4ccf65a2b8c67a380df949953a09bc1 */ 9.77835053797959793331971572944454549e-01L, /* 3ffef4a6cbd1e3a7944f7c3b6baed5cd */ -3.79207422905180416937210853779192702e-35L, /* bf8c933e145c7adaa7859984d2ea39cc */ /* sin(x) = 0.3599b652f40ec999df12a0a4c8561de159c98d4e54555de518b97f48886f715d8df5f4f093e */ 2.09376712085993643711890752724881652e-01L, /* 3ffcaccdb297a0764ccef895052642b1 */ -1.59470287344329449965314638482515925e-36L, /* bf880f531b3958d5d5510d73a3405bbc */ /* x = 2.18750000000000000000000000000000000e-01 3ffcc000000000000000000000000000 */ /* cos(x) = 0.f9e63e1d9e8b6f6f2e296bae5b5ed9c11fd7fa2fe11e09fc7bde901abed24b6365e72f7db4e */ 9.76169473868635276723989035435135534e-01L, /* 3ffef3cc7c3b3d16dede5c52d75cb6be */ -2.87727974249481583047944860626985460e-35L, /* bf8c31f701402e80f70fb01c210b7f2a */ /* sin(x) = 0.378df09db8c332ce0d2b53d865582e4526ea336c768f68c32b496c6d11c1cd241bb9f1da523 */ 2.17009581095010156760578095826055396e-01L, /* 3ffcbc6f84edc6199670695a9ec32ac1 */ 1.07356488794216831812829549198201194e-35L, /* 3f8ac8a4dd466d8ed1ed1865692d8da2 */ /* x = 2.26562500000000000000000000000000000e-01 3ffcd000000000000000000000000000 */ /* cos(x) = 0.f9752eba9fff6b98842beadab054a932fb0f8d5b875ae63d6b2288d09b148921aeb6e52f61b */ 9.74444313585988980349711056045434344e-01L, /* 3ffef2ea5d753ffed7310857d5b560a9 */ 3.09947905955053419304514538592548333e-35L, /* 3f8c4997d87c6adc3ad731eb59144685 */ /* sin(x) = 0.39814cb10513453cb97b21bc1ca6a337b150c21a675ab85503bc09a436a10ab1473934e20c8 */ 2.24629204957705292350428549796424820e-01L, /* 3ffccc0a6588289a29e5cbd90de0e535 */ 2.42061510849297469844695751870058679e-36L, /* 3f889bd8a8610d33ad5c2a81de04d21b */ /* x = 2.34375000000000000000000000000000000e-01 3ffce000000000000000000000000000 */ /* cos(x) = 0.f90039843324f9b940416c1984b6cbed1fc733d97354d4265788a86150493ce657cae032674 */ 9.72659678244912752670913058267565260e-01L, /* 3ffef20073086649f3728082d833096e */ -3.91759231819314904966076958560252735e-35L, /* bf8ca09701c6613465595ecd43babcf5 */ /* sin(x) = 0.3b73c2bf6b4b9f668ef9499c81f0d965087f1753fa64b086e58cb8470515c18c1412f8c2e02 */ 2.32235118611511462413930877746235872e-01L, /* 3ffcdb9e15fb5a5cfb3477ca4ce40f87 */ -4.96930483364191020075024624332928910e-36L, /* bf89a6bde03a2b0166d3de469cd1ee3f */ /* x = 2.42187500000000000000000000000000000e-01 3ffcf000000000000000000000000000 */ /* cos(x) = 0.f887604e2c39dbb20e4ec5825059a789ffc95b275ad9954078ba8a28d3fcfe9cc2c1d49697b */ 9.70815676770349462947490545785046027e-01L, /* 3ffef10ec09c5873b7641c9d8b04a0b3 */ 2.97458820972393859125277682021202860e-35L, /* 3f8c3c4ffe4ad93ad6ccaa03c5d45147 */ /* sin(x) = 0.3d654aff15cb457a0fca854698aba33039a8a40626609204472d9d40309b626eccc6dff0ffa */ 2.39826857830661564441369251810886574e-01L, /* 3ffceb2a57f8ae5a2bd07e542a34c55d */ 2.39867036569896287240938444445071448e-36L, /* 3f88981cd45203133049022396cea018 */ /* x = 2.50000000000000000000000000000000000e-01 3ffd0000000000000000000000000000 */ /* cos(x) = 0.f80aa4fbef750ba783d33cb95f94f8a41426dbe79edc4a023ef9ec13c944551c0795b84fee1 */ 9.68912421710644784144595449494189205e-01L, /* 3ffef01549f7deea174f07a67972bf2a */ -5.53634706113461989398873287749326500e-36L, /* bf89d6faf649061848ed7f704184fb0e */ /* sin(x) = 0.3f55dda9e62aed7513bd7b8e6a3d1635dd5676648d7db525898d7086af9330f03c7f285442a */ 2.47403959254522929596848704849389203e-01L, /* 3ffcfaaeed4f31576ba89debdc7351e9 */ -7.36487001108599532943597115275811618e-36L, /* bf8a39445531336e50495b4ece51ef2a */ /* x = 2.57812500000000000000000000000000000e-01 3ffd0800000000000000000000000000 */ /* cos(x) = 0.f78a098069792daabc9ee42591b7c5a68cb1ab822aeb446b3311b4ba5371b8970e2c1547ad7 */ 9.66950029230677822008341623610531503e-01L, /* 3ffeef141300d2f25b55793dc84b2370 */ -4.38972214432792412062088059990480514e-35L, /* bf8cd2cb9a72a3eea8a5dca667725a2d */ /* sin(x) = 0.414572fd94556e6473d620271388dd47c0ba050cdb5270112e3e370e8c4705ae006426fb5d5 */ 2.54965960415878467487556574864872628e-01L, /* 3ffd0515cbf65155b991cf58809c4e23 */ 2.20280377918534721005071688328074154e-35L, /* 3f8bd47c0ba050cdb5270112e3e370e9 */ /* x = 2.65625000000000000000000000000000000e-01 3ffd1000000000000000000000000000 */ /* cos(x) = 0.f7058fde0788dfc805b8fe88789e4f4253e3c50afe8b22f41159620ab5940ff7df9557c0d1f */ 9.64928619104771009581074665315748371e-01L, /* 3ffeee0b1fbc0f11bf900b71fd10f13d */ -3.66685832670820775002475545602761113e-35L, /* bf8c85ed60e1d7a80ba6e85f7534efaa */ /* sin(x) = 0.4334033bcd90d6604f5f36c1d4b84451a87150438275b77470b50e5b968fa7962b5ffb379b7 */ 2.62512399769153281450949626395692931e-01L, /* 3ffd0cd00cef364359813d7cdb0752e1 */ 3.24923677072031064673177178571821843e-36L, /* 3f89146a1c5410e09d6ddd1c2d4396e6 */ /* x = 2.73437500000000000000000000000000000e-01 3ffd1800000000000000000000000000 */ /* cos(x) = 0.f67d3a26af7d07aa4bd6d42af8c0067fefb96d5b46c031eff53627f215ea3242edc3f2e13eb */ 9.62848314709379699899701093480214365e-01L, /* 3ffeecfa744d5efa0f5497ada855f180 */ 4.88986966383343450799422013051821394e-36L, /* 3f899ffbee5b56d1b00c7bfd4d89fc85 */ /* sin(x) = 0.452186aa5377ab20bbf2524f52e3a06a969f47166ab88cf88c111ad12c55941021ef3317a1a */ 2.70042816718585031552755063618827102e-01L, /* 3ffd14861aa94ddeac82efc9493d4b8f */ -2.37608892440611310321138680065803162e-35L, /* bf8bf956960b8e99547730773eee52ed */ /* x = 2.81250000000000000000000000000000000e-01 3ffd2000000000000000000000000000 */ /* cos(x) = 0.f5f10a7bb77d3dfa0c1da8b57842783280d01ce3c0f82bae3b9d623c168d2e7c29977994451 */ 9.60709243015561903066659350581313472e-01L, /* 3ffeebe214f76efa7bf4183b516af085 */ -5.87011558231583960712013351601221840e-36L, /* bf89f35fcbf8c70fc1f5147118a770fa */ /* sin(x) = 0.470df5931ae1d946076fe0dcff47fe31bb2ede618ebc607821f8462b639e1f4298b5ae87fd3 */ 2.77556751646336325922023446828128568e-01L, /* 3ffd1c37d64c6b8765181dbf8373fd20 */ -1.35848595468998128214344668770082997e-36L, /* bf87ce44d1219e71439f87de07b9d49c */ /* x = 2.89062500000000000000000000000000000e-01 3ffd2800000000000000000000000000 */ /* cos(x) = 0.f561030ddd7a78960ea9f4a32c6521554995667f5547bafee9ec48b3155cdb0f7fd00509713 */ 9.58511534581228627301969408154919822e-01L, /* 3ffeeac2061bbaf4f12c1d53e94658ca */ 2.50770779371636481145735089393154404e-35L, /* 3f8c0aaa4cab33faaa3dd7f74f624599 */ /* sin(x) = 0.48f948446abcd6b0f7fccb100e7a1b26eccad880b0d24b59948c7cdd49514d44b933e6985c2 */ 2.85053745940547424587763033323252561e-01L, /* 3ffd23e52111aaf35ac3dff32c4039e8 */ 2.04269325885902918802700123680403749e-35L, /* 3f8bb26eccad880b0d24b59948c7cdd5 */ /* x = 2.96875000000000000000000000000000000e-01 3ffd3000000000000000000000000000 */ /* cos(x) = 0.f4cd261d3e6c15bb369c8758630d2ac00b7ace2a51c0631bfeb39ed158ba924cc91e259c195 */ 9.56255323543175296975599942263028361e-01L, /* 3ffee99a4c3a7cd82b766d390eb0c61a */ 3.21616572190865997051103645135837207e-35L, /* 3f8c56005bd671528e0318dff59cf68b */ /* sin(x) = 0.4ae37710fad27c8aa9c4cf96c03519b9ce07dc08a1471775499f05c29f86190aaebaeb9716e */ 2.92533342023327543624702326493913423e-01L, /* 3ffd2b8ddc43eb49f22aa7133e5b00d4 */ 1.93539408668704450308003687950685128e-35L, /* 3f8b9b9ce07dc08a1471775499f05c2a */ /* x = 3.04687500000000000000000000000000000e-01 3ffd3800000000000000000000000000 */ /* cos(x) = 0.f43575f94d4f6b272f5fb76b14d2a64ab52df1ee8ddf7c651034e5b2889305a9ea9015d758a */ 9.53940747608894733981324795987611623e-01L, /* 3ffee86aebf29a9ed64e5ebf6ed629a5 */ 2.88075689052478602008395972924657164e-35L, /* 3f8c3255a96f8f746efbe32881a72d94 */ /* sin(x) = 0.4ccc7a50127e1de0cb6b40c302c651f7bded4f9e7702b0471ae0288d091a37391950907202f */ 2.99995083378683051163248282011699944e-01L, /* 3ffd3331e94049f877832dad030c0b19 */ 1.35174265535697850139283361475571050e-35L, /* 3f8b1f7bded4f9e7702b0471ae0288d1 */ /* x = 3.12500000000000000000000000000000000e-01 3ffd4000000000000000000000000000 */ /* cos(x) = 0.f399f500c9e9fd37ae9957263dab8877102beb569f101ee4495350868e5847d181d50d3cca2 */ 9.51567948048172202145488217364270962e-01L, /* 3ffee733ea0193d3fa6f5d32ae4c7b57 */ 6.36842628598115658308749288799884606e-36L, /* 3f8a0ee2057d6ad3e203dc892a6a10d2 */ /* sin(x) = 0.4eb44a5da74f600207aaa090f0734e288603ffadb3eb2542a46977b105f8547128036dcf7f0 */ 3.07438514580380850670502958201982091e-01L, /* 3ffd3ad129769d3d80081eaa8243c1cd */ 1.06515172423204645839241099453417152e-35L, /* 3f8ac510c07ff5b67d64a8548d2ef621 */ /* x = 3.20312500000000000000000000000000000e-01 3ffd4800000000000000000000000000 */ /* cos(x) = 0.f2faa5a1b74e82fd61fa05f9177380e8e69b7b15a945e8e5ae1124bf3d12b0617e03af4fab5 */ 9.49137069684463027665847421762105623e-01L, /* 3ffee5f54b436e9d05fac3f40bf22ee7 */ 6.84433965991637152250309190468859701e-37L, /* 3f86d1cd36f62b528bd1cb5c22497e7a */ /* sin(x) = 0.509adf9a7b9a5a0f638a8fa3a60a199418859f18b37169a644fdb986c21ecb00133853bc35b */ 3.14863181319745250865036315126939016e-01L, /* 3ffd426b7e69ee69683d8e2a3e8e9828 */ 1.92431240212432926993057705062834160e-35L, /* 3f8b99418859f18b37169a644fdb986c */ /* x = 3.28125000000000000000000000000000000e-01 3ffd5000000000000000000000000000 */ /* cos(x) = 0.f2578a595224dd2e6bfa2eb2f99cc674f5ea6f479eae2eb580186897ae3f893df1113ca06b8 */ 9.46648260886053321846099507295532976e-01L, /* 3ffee4af14b2a449ba5cd7f45d65f33a */ -4.32906339663000890941529420498824645e-35L, /* bf8ccc5850ac85c30a8e8a53ff3cbb43 */ /* sin(x) = 0.5280326c3cf481823ba6bb08eac82c2093f2bce3c4eb4ee3dec7df41c92c8a4226098616075 */ 3.22268630433386625687745919893188031e-01L, /* 3ffd4a00c9b0f3d20608ee9aec23ab21 */ -1.49505897804759263483853908335500228e-35L, /* bf8b3df6c0d431c3b14b11c213820be3 */ /* x = 3.35937500000000000000000000000000000e-01 3ffd5800000000000000000000000000 */ /* cos(x) = 0.f1b0a5b406b526d886c55feadc8d0dcc8eb9ae2ac707051771b48e05b25b000009660bdb3e3 */ 9.44101673557004345630017691253124860e-01L, /* 3ffee3614b680d6a4db10d8abfd5b91a */ 1.03812535240120229609822461172145584e-35L, /* 3f8ab991d735c558e0e0a2ee3691c0b6 */ /* sin(x) = 0.54643b3da29de9b357155eef0f332fb3e66c83bf4dddd9491c5eb8e103ccd92d6175220ed51 */ 3.29654409930860171914317725126463176e-01L, /* 3ffd5190ecf68a77a6cd5c557bbc3ccd */ -1.22606996784743214973082192294232854e-35L, /* bf8b04c19937c40b22226b6e3a1471f0 */ /* x = 3.43750000000000000000000000000000000e-01 3ffd6000000000000000000000000000 */ /* cos(x) = 0.f105fa4d66b607a67d44e042725204435142ac8ad54dfb0907a4f6b56b06d98ee60f19e557a */ 9.41497463127881068644511236053670815e-01L, /* 3ffee20bf49acd6c0f4cfa89c084e4a4 */ 3.20709366603165602071590241054884900e-36L, /* 3f8910d450ab22b5537ec241e93dad5b */ /* sin(x) = 0.5646f27e8bd65cbe3a5d61ff06572290ee826d9674a00246b05ae26753cdfc90d9ce81a7d02 */ 3.37020069022253076261281754173810024e-01L, /* 3ffd591bc9fa2f5972f8e97587fc195d */ -2.21435756148839473677777545049890664e-35L, /* bf8bd6f117d92698b5ffdb94fa51d98b */ /* x = 3.51562500000000000000000000000000000e-01 3ffd6800000000000000000000000000 */ /* cos(x) = 0.f0578ad01ede707fa39c09dc6b984afef74f3dc8d0efb0f4c5a6b13771145b3e0446fe33887 */ 9.38835788546265488632578305984712554e-01L, /* 3ffee0af15a03dbce0ff473813b8d731 */ -3.98758068773974031348585072752245458e-35L, /* bf8ca808458611b978827859d2ca7644 */ /* sin(x) = 0.582850a41e1dd46c7f602ea244cdbbbfcdfa8f3189be794dda427ce090b5f85164f1f80ac13 */ 3.44365158145698408207172046472223747e-01L, /* 3ffd60a14290787751b1fd80ba891337 */ -3.19791885005480924937758467594051927e-36L, /* bf89100c815c339d9061ac896f60c7dc */ /* x = 3.59375000000000000000000000000000000e-01 3ffd7000000000000000000000000000 */ /* cos(x) = 0.efa559f5ec3aec3a4eb03319278a2d41fcf9189462261125fe6147b078f1daa0b06750a1654 */ 9.36116812267055290294237411019508588e-01L, /* 3ffedf4ab3ebd875d8749d6066324f14 */ 3.40481591236710658435409862439032162e-35L, /* 3f8c6a0fe7c8c4a31130892ff30a3d84 */ /* sin(x) = 0.5a084e28e35fda2776dfdbbb5531d74ced2b5d17c0b1afc4647529d50c295e36d8ceec126c1 */ 3.51689228994814059222584896955547016e-01L, /* 3ffd682138a38d7f689ddb7f6eed54c7 */ 1.75293433418270210567525412802083294e-35L, /* 3f8b74ced2b5d17c0b1afc4647529d51 */ /* x = 3.67187500000000000000000000000000000e-01 3ffd7800000000000000000000000000 */ /* cos(x) = 0.eeef6a879146af0bf9b95ea2ea0ac0d3e2e4d7e15d93f48cbd41bf8e4fded40bef69e19eafa */ 9.33340700242548435655299229469995527e-01L, /* 3ffeddded50f228d5e17f372bd45d416 */ -4.75255707251679831124800898831382223e-35L, /* bf8cf960e8d940f513605b9a15f2038e */ /* sin(x) = 0.5be6e38ce8095542bc14ee9da0d36483e6734bcab2e07624188af5653f114eeb46738fa899d */ 3.58991834546065053677710299152868941e-01L, /* 3ffd6f9b8e33a025550af053ba76834e */ -2.06772389262723368139416970257112089e-35L, /* bf8bb7c198cb4354d1f89dbe7750a9ac */ /* x = 3.75000000000000000000000000000000000e-01 3ffd8000000000000000000000000000 */ /* cos(x) = 0.ee35bf5ccac89052cd91ddb734d3a47e262e3b609db604e217053803be0091e76daf28a89b7 */ 9.30507621912314291149476792229555481e-01L, /* 3ffedc6b7eb9959120a59b23bb6e69a7 */ 2.74541088551732982573335285685416092e-35L, /* 3f8c23f13171db04edb02710b829c01e */ /* sin(x) = 0.5dc40955d9084f48a94675a2498de5d851320ff5528a6afb3f2e24de240fce6cbed1ba0ccd6 */ 3.66272529086047561372909351716264177e-01L, /* 3ffd7710255764213d22a519d6892638 */ -1.96768433534936592675897818253108989e-35L, /* bf8ba27aecdf00aad759504c0d1db21e */ /* x = 3.82812500000000000000000000000000000e-01 3ffd8800000000000000000000000000 */ /* cos(x) = 0.ed785b5c44741b4493c56bcb9d338a151c6f6b85d8f8aca658b28572c162b199680eb9304da */ 9.27617750192851909628030798799961350e-01L, /* 3ffedaf0b6b888e83689278ad7973a67 */ 7.58520371916345756281201167126854712e-36L, /* 3f8a42a38ded70bb1f1594cb1650ae58 */ /* sin(x) = 0.5f9fb80f21b53649c432540a50e22c53057ff42ae0fdf1307760dc0093f99c8efeb2fbd7073 */ 3.73530868238692946416839752660848112e-01L, /* 3ffd7e7ee03c86d4d92710c950294389 */ -1.48023494778986556048879113411517128e-35L, /* bf8b3acfa800bd51f020ecf889f23ff7 */ /* x = 3.90625000000000000000000000000000000e-01 3ffd9000000000000000000000000000 */ /* cos(x) = 0.ecb7417b8d4ee3fec37aba4073aa48f1f14666006fb431d9671303c8100d10190ec8179c41d */ 9.24671261467036098502113014560138771e-01L, /* 3ffed96e82f71a9dc7fd86f57480e755 */ -4.14187124860031825108649347251175815e-35L, /* bf8cb87075cccffc825e7134c767e1bf */ /* sin(x) = 0.6179e84a09a5258a40e9b5face03e525f8b5753cd0105d93fe6298010c3458e84d75fe420e9 */ 3.80766408992390192057200703388896675e-01L, /* 3ffd85e7a1282694962903a6d7eb3810 */ -2.02009541175208636336924533372496107e-35L, /* bf8bada074a8ac32fefa26c019d67fef */ /* x = 3.98437500000000000000000000000000000e-01 3ffd9800000000000000000000000000 */ /* cos(x) = 0.ebf274bf0bda4f62447e56a093626798d3013b5942b1abfd155aacc9dc5c6d0806a20d6b9c1 */ 9.21668335573351918175411368202712714e-01L, /* 3ffed7e4e97e17b49ec488fcad4126c5 */ -1.83587995433957622948710263541479322e-35L, /* bf8b8672cfec4a6bd4e5402eaa553362 */ /* sin(x) = 0.6352929dd264bd44a02ea766325d8aa8bd9695fc8def3caefba5b94c9a3c873f7b2d3776ead */ 3.87978709727025046051079690813741960e-01L, /* 3ffd8d4a4a774992f51280ba9d98c976 */ 8.01904783870935075844443278617586301e-36L, /* 3f8a5517b2d2bf91bde795df74b72993 */ /* x = 4.06250000000000000000000000000000000e-01 3ffda000000000000000000000000000 */ /* cos(x) = 0.eb29f839f201fd13b93796827916a78f15c85230a4e8ea4b21558265a14367e1abb4c30695a */ 9.18609155794918267837824977718549863e-01L, /* 3ffed653f073e403fa27726f2d04f22d */ 2.97608282778274433460057745798409849e-35L, /* 3f8c3c78ae429185274752590aac132d */ /* sin(x) = 0.6529afa7d51b129631ec197c0a840a11d7dc5368b0a47956feb285caa8371c4637ef17ef01b */ 3.95167330240934236244832640419653657e-01L, /* 3ffd94a6be9f546c4a58c7b065f02a10 */ 7.57560031388312550940040194042627704e-36L, /* 3f8a423afb8a6d16148f2adfd650b955 */ /* x = 4.14062500000000000000000000000000000e-01 3ffda800000000000000000000000000 */ /* cos(x) = 0.ea5dcf0e30cf03e6976ef0b1ec26515fba47383855c3b4055a99b5e86824b2cd1a691fdca7b */ 9.15493908848301228563917732180221882e-01L, /* 3ffed4bb9e1c619e07cd2edde163d84d */ -3.50775517955306954815090901168305659e-35L, /* bf8c75022dc63e3d51e25fd52b3250bd */ /* sin(x) = 0.66ff380ba0144109e39a320b0a3fa5fd65ea0585bcbf9b1a769a9b0334576c658139e1a1cbe */ 4.02331831777773111217105598880982387e-01L, /* 3ffd9bfce02e805104278e68c82c28ff */ -1.95678722882848174723569916504871563e-35L, /* bf8ba029a15fa7a434064e5896564fcd */ /* x = 4.21875000000000000000000000000000000e-01 3ffdb000000000000000000000000000 */ /* cos(x) = 0.e98dfc6c6be031e60dd3089cbdd18a75b1f6b2c1e97f79225202f03dbea45b07a5ec4efc062 */ 9.12322784872117846492029542047341734e-01L, /* 3ffed31bf8d8d7c063cc1ba611397ba3 */ 7.86903886556373674267948132178845568e-36L, /* 3f8a4eb63ed6583d2fef244a405e07b8 */ /* sin(x) = 0.68d32473143327973bc712bcc4ccddc47630d755850c0655243b205934dc49ffed8eb76adcb */ 4.09471777053295066122694027011452236e-01L, /* 3ffda34c91cc50cc9e5cef1c4af31333 */ 2.23945241468457597921655785729821354e-35L, /* 3f8bdc47630d755850c0655243b20593 */ /* x = 4.29687500000000000000000000000000000e-01 3ffdb800000000000000000000000000 */ /* cos(x) = 0.e8ba8393eca7821aa563d83491b6101189b3b101c3677f73d7bad7c10f9ee02b7ab4009739a */ 9.09095977415431051650381735684476417e-01L, /* 3ffed1750727d94f04354ac7b069236c */ 1.20886014028444155733776025085677953e-35L, /* 3f8b01189b3b101c3677f73d7bad7c11 */ /* sin(x) = 0.6aa56d8e8249db4eb60a761fe3f9e559be456b9e13349ca99b0bfb787f22b95db3b70179615 */ 4.16586730282041119259112448831069657e-01L, /* 3ffdaa95b63a09276d3ad829d87f8fe8 */ -2.00488106831998813675438269796963612e-35L, /* bf8baa641ba9461eccb635664f404878 */ /* x = 4.37500000000000000000000000000000000e-01 3ffdc000000000000000000000000000 */ /* cos(x) = 0.e7e367d2956cfb16b6aa11e5419cd0057f5c132a6455bf064297e6a76fe2b72bb630d6d50ff */ 9.05813683425936420744516660652700258e-01L, /* 3ffecfc6cfa52ad9f62d6d5423ca833a */ -3.60950307605941169775676563004467163e-35L, /* bf8c7fd4051f66acdd5207cdeb40cac5 */ /* sin(x) = 0.6c760c14c8585a51dbd34660ae6c52ac7036a0b40887a0b63724f8b4414348c3063a637f457 */ 4.23676257203938010361683988031102480e-01L, /* 3ffdb1d83053216169476f4d1982b9b1 */ 1.40484456388654470329473096579312595e-35L, /* 3f8b2ac7036a0b40887a0b63724f8b44 */ /* x = 4.45312500000000000000000000000000000e-01 3ffdc800000000000000000000000000 */ /* cos(x) = 0.e708ac84d4172a3e2737662213429e14021074d7e702e77d72a8f1101a7e70410df8273e9aa */ 9.02476103237941504925183272675895999e-01L, /* 3ffece115909a82e547c4e6ecc442685 */ 2.26282899501344419018306295680210602e-35L, /* 3f8be14021074d7e702e77d72a8f1102 */ /* sin(x) = 0.6e44f8c36eb10a1c752d093c00f4d47ba446ac4c215d26b0316442f168459e677d06e7249e3 */ 4.30739925110803197216321517850849190e-01L, /* 3ffdb913e30dbac42871d4b424f003d3 */ 1.54096780001629398850891218396761548e-35L, /* 3f8b47ba446ac4c215d26b0316442f17 */ /* x = 4.53125000000000000000000000000000000e-01 3ffdd000000000000000000000000000 */ /* cos(x) = 0.e62a551594b970a770b15d41d4c0e483e47aca550111df6966f9e7ac3a94ae49e6a71eb031e */ 8.99083440560138456216544929209379307e-01L, /* 3ffecc54aa2b2972e14ee162ba83a982 */ -2.06772615490904370666670275154751976e-35L, /* bf8bb7c1b8535aafeee209699061853c */ /* sin(x) = 0.70122c5ec5028c8cff33abf4fd340ccc382e038379b09cf04f9a52692b10b72586060cbb001 */ 4.37777302872755132861618974702796680e-01L, /* 3ffdc048b17b140a3233fcceafd3f4d0 */ 9.62794364503442612477117426033922467e-36L, /* 3f8a998705c0706f36139e09f34a4d25 */ /* x = 4.60937500000000000000000000000000000e-01 3ffdd800000000000000000000000000 */ /* cos(x) = 0.e54864fe33e8575cabf5bd0e5cf1b1a8bc7c0d5f61702450fa6b6539735820dd2603ae355d5 */ 8.95635902463170698900570000446256350e-01L, /* 3ffeca90c9fc67d0aeb957eb7a1cb9e3 */ 3.73593741659866883088620495542311808e-35L, /* 3f8c8d45e3e06afb0b812287d35b29cc */ /* sin(x) = 0.71dd9fb1ff4677853acb970a9f6729c6e3aac247b1c57cea66c77413f1f98e8b9e98e49d851 */ 4.44787960964527211433056012529525211e-01L, /* 3ffdc7767ec7fd19de14eb2e5c2a7d9d */ -1.67187936511493678007508371613954899e-35L, /* bf8b6391c553db84e3a831599388bec1 */ /* x = 4.68750000000000000000000000000000000e-01 3ffde000000000000000000000000000 */ /* cos(x) = 0.e462dfc670d421ab3d1a15901228f146a0547011202bf5ab01f914431859aef577966bc4fa4 */ 8.92133699366994404723900253723788575e-01L, /* 3ffec8c5bf8ce1a843567a342b202452 */ -1.10771937602567314732693079264692504e-35L, /* bf8ad72bf571fddbfa814a9fc0dd779d */ /* sin(x) = 0.73a74b8f52947b681baf6928eb3fb021769bf4779bad0e3aa9b1cdb75ec60aad9fc63ff19d5 */ 4.51771471491683776581688750134062870e-01L, /* 3ffdce9d2e3d4a51eda06ebda4a3acff */ -1.19387223016472295893794387275284505e-35L, /* bf8afbd12c81710c8a5e38aac9c64914 */ /* x = 4.76562500000000000000000000000000000e-01 3ffde800000000000000000000000000 */ /* cos(x) = 0.e379c9045f29d517c4808aa497c2057b2b3d109e76c0dc302d4d0698b36e3f0bdbf33d8e952 */ 8.88577045028035543317609023116020980e-01L, /* 3ffec6f39208be53aa2f890115492f84 */ 4.12354278954664731443813655177022170e-36L, /* 3f895ecacf44279db0370c0b5341a62d */ /* sin(x) = 0.756f28d011d98528a44a75fc29c779bd734ecdfb582fdb74b68a4c4c4be54cfd0b2d3ad292f */ 4.58727408216736592377295028972874773e-01L, /* 3ffdd5bca340476614a29129d7f0a71e */ -4.70946994194182908929251719575431779e-36L, /* bf8990a32c4c8129f40922d25d6ceced */ /* x = 4.84375000000000000000000000000000000e-01 3ffdf000000000000000000000000000 */ /* cos(x) = 0.e28d245c58baef72225e232abc003c4366acd9eb4fc2808c2ab7fe7676cf512ac7f945ae5fb */ 8.84966156526143291697296536966647926e-01L, /* 3ffec51a48b8b175dee444bc46557800 */ 4.53370570288325630442037826313462165e-35L, /* 3f8ce21b3566cf5a7e14046155bff3b4 */ /* sin(x) = 0.77353054ca72690d4c6e171fd99e6b39fa8e1ede5f052fd2964534c75340970a3a9cd3c5c32 */ 4.65655346585160182681199512507546779e-01L, /* 3ffddcd4c15329c9a43531b85c7f667a */ -1.56282598978971872478619772155305961e-35L, /* bf8b4c60571e121a0fad02d69bacb38b */ /* x = 4.92187500000000000000000000000000000e-01 3ffdf800000000000000000000000000 */ /* cos(x) = 0.e19cf580eeec046aa1422fa74807ecefb2a1911c94e7b5f20a00f70022d940193691e5bd790 */ 8.81301254251340599140161908298100173e-01L, /* 3ffec339eb01ddd808d542845f4e9010 */ -1.43419192312116687783945619009629445e-35L, /* bf8b3104d5e6ee36b184a0df5ff08ffe */ /* sin(x) = 0.78f95b0560a9a3bd6df7bd981dc38c61224d08bc20631ea932e605e53b579e9e0767dfcbbcb */ 4.72554863751304451146551317808516942e-01L, /* 3ffde3e56c1582a68ef5b7def660770e */ 9.31324774957768018850224267625371204e-36L, /* 3f8a8c2449a117840c63d5265cc0bca7 */ /* x = 5.00000000000000000000000000000000000e-01 3ffe0000000000000000000000000000 */ /* cos(x) = 0.e0a94032dbea7cedbddd9da2fafad98556566b3a89f43eabd72350af3e8b19e801204d8fe2e */ 8.77582561890372716116281582603829681e-01L, /* 3ffec1528065b7d4f9db7bbb3b45f5f6 */ -2.89484960181363924855192538540698851e-35L, /* bf8c33d54d4ca62bb05e0aa146e57a86 */ /* sin(x) = 0.7abba1d12c17bfa1d92f0d93f60ded9992f45b4fcaf13cd58b303693d2a0db47db35ae8a3a9 */ 4.79425538604203000273287935215571402e-01L, /* 3ffdeaee8744b05efe8764bc364fd838 */ -1.38426977616718318950175848639381926e-35L, /* bf8b2666d0ba4b0350ec32a74cfc96c3 */ /* x = 5.07812500000000000000000000000000000e-01 3ffe0400000000000000000000000000 */ /* cos(x) = 0.dfb20840f3a9b36f7ae2c515342890b5ec583b8366cc2b55029e95094d31112383f2553498b */ 8.73810306413054508282556837071377159e-01L, /* 3ffebf641081e75366def5c58a2a6851 */ 1.25716864497849302237218128599994785e-35L, /* 3f8b0b5ec583b8366cc2b55029e95095 */ /* sin(x) = 0.7c7bfdaf13e5ed17212f8a7525bfb113aba6c0741b5362bb8d59282a850b63716bca0c910f0 */ 4.86266951793275574311011306895834993e-01L, /* 3ffdf1eff6bc4f97b45c84be29d496ff */ -1.12269393250914752644352376448094271e-35L, /* bf8add8a8b27f17c9593a88e54dafaaf */ /* x = 5.15625000000000000000000000000000000e-01 3ffe0800000000000000000000000000 */ /* cos(x) = 0.deb7518814a7a931bbcc88c109cd41c50bf8bb48f20ae8c36628d1d3d57574f7dc58f27d91c */ 8.69984718058417388828915599901466243e-01L, /* 3ffebd6ea310294f526377991182139b */ -4.68168638300575626782741319792183837e-35L, /* bf8cf1d7a03a25b86fa8b9e4ceb97161 */ /* sin(x) = 0.7e3a679daaf25c676542bcb4028d0964172961c921823a4ef0c3a9070d886dbd073f6283699 */ 4.93078685753923057265136552753487121e-01L, /* 3ffdf8e99e76abc9719d950af2d00a34 */ 7.06498693112535056352301101088624950e-36L, /* 3f8a2c82e52c3924304749de187520e2 */ /* x = 5.23437500000000000000000000000000000e-01 3ffe0c00000000000000000000000000 */ /* cos(x) = 0.ddb91ff318799172bd2452d0a3889f5169c64a0094bcf0b8aa7dcf0d7640a2eba68955a80be */ 8.66106030320656714696616831654267220e-01L, /* 3ffebb723fe630f322e57a48a5a14711 */ 2.35610597588322493119667003904687628e-35L, /* 3f8bf5169c64a0094bcf0b8aa7dcf0d7 */ /* sin(x) = 0.7ff6d8a34bd5e8fa54c97482db5159df1f24e8038419c0b448b9eea8939b5d4dfcf40900257 */ 4.99860324733013463819556536946425724e-01L, /* 3ffdffdb628d2f57a3e95325d20b6d45 */ 1.94636052312235297538564591686645139e-35L, /* 3f8b9df1f24e8038419c0b448b9eea89 */ /* x = 5.31250000000000000000000000000000000e-01 3ffe1000000000000000000000000000 */ /* cos(x) = 0.dcb7777ac420705168f31e3eb780ce9c939ecada62843b54522f5407eb7f21e556059fcd734 */ 8.62174479934880504367162510253324274e-01L, /* 3ffeb96eeef58840e0a2d1e63c7d6f02 */ -3.71556818317533582234562471835771823e-35L, /* bf8c8b1b6309a92cebde255d6e855fc1 */ /* sin(x) = 0.81b149ce34caa5a4e650f8d09fd4d6aa74206c32ca951a93074c83b2d294d25dbb0f7fdfad2 */ 5.06611454814257367642296000893867192e-01L, /* 3ffe0362939c69954b49cca1f1a13faa */ -3.10963699824274155702706043065967062e-35L, /* bf8c4aac5efc9e69ab572b67c59be269 */ /* x = 5.39062500000000000000000000000000000e-01 3ffe1400000000000000000000000000 */ /* cos(x) = 0.dbb25c25b8260c14f6e7bc98ec991b70c65335198b0ab628bad20cc7b229d4dd62183cfa055 */ 8.58190306862660347046629564970494649e-01L, /* 3ffeb764b84b704c1829edcf7931d932 */ 2.06439574601190798155563653000684861e-35L, /* 3f8bb70c65335198b0ab628bad20cc7b */ /* sin(x) = 0.8369b434a372da7eb5c8a71fe36ce1e0b2b493f6f5cb2e38bcaec2a556b3678c401940d1c3c */ 5.13331663943471218288801270215706878e-01L, /* 3ffe06d3686946e5b4fd6b914e3fc6da */ -2.26614796466671970772244932848067224e-35L, /* bf8be1f4d4b6c090a34d1c743513d5ab */ /* x = 5.46875000000000000000000000000000000e-01 3ffe1800000000000000000000000000 */ /* cos(x) = 0.daa9d20860827063fde51c09e855e9932e1b17143e7244fd267a899d41ae1f3bc6a0ec42e27 */ 8.54153754277385385143451785105103176e-01L, /* 3ffeb553a410c104e0c7fbca3813d0ac */ -1.68707534013095152873222061722573172e-35L, /* bf8b66cd1e4e8ebc18dbb02d9857662c */ /* sin(x) = 0.852010f4f0800521378bd8dd614753d080c2e9e0775ffc609947b9132f5357404f464f06a58 */ 5.20020541953727004760213699874674730e-01L, /* 3ffe0a4021e9e1000a426f17b1bac28f */ -3.32415021330884924833711842866896734e-35L, /* bf8c617bf9e8b0fc45001cfb35c23767 */ /* x = 5.54687500000000000000000000000000000e-01 3ffe1c00000000000000000000000000 */ /* cos(x) = 0.d99ddd44e44a43d4d4a3a3ed95204106fd54d78e8c7684545c0da0b7c2c72be7a89b7c182ad */ 8.50065068549420263957072899177793617e-01L, /* 3ffeb33bba89c89487a9a94747db2a41 */ -4.73753917078785974356016104842568442e-35L, /* bf8cf7c81559438b9c4bdd5d1f92fa42 */ /* sin(x) = 0.86d45935ab396cb4e421e822dee54f3562dfcefeaa782184c23401d231f5ad981a1cc195b18 */ 5.26677680590386730710789410624833901e-01L, /* 3ffe0da8b26b5672d969c843d045bdcb */ -3.67066148195515214077582496518566735e-35L, /* bf8c8654e901880aac3ef3d9ee5ff16e */ /* x = 5.62500000000000000000000000000000000e-01 3ffe2000000000000000000000000000 */ /* cos(x) = 0.d88e820b1526311dd561efbc0c1a9a5375eb26f65d246c5744b13ca26a7e0fd42556da843c8 */ 8.45924499231067954459723078597493262e-01L, /* 3ffeb11d04162a4c623baac3df781835 */ 1.98054947141989878179164342925274053e-35L, /* 3f8ba5375eb26f65d246c5744b13ca27 */ /* sin(x) = 0.88868625b4e1dbb2313310133022527200c143a5cb16637cb7daf8ade82459ff2e98511f40f */ 5.33302673536020173329131103308161529e-01L, /* 3ffe110d0c4b69c3b764626620266045 */ -3.42715291319551615996993795226755157e-35L, /* bf8c6c6ff9f5e2d1a74ce41a41283a91 */ /* x = 5.70312500000000000000000000000000000e-01 3ffe2400000000000000000000000000 */ /* cos(x) = 0.d77bc4985e93a607c9d868b906bbc6bbe3a04258814acb0358468b826fc91bd4d814827f65e */ 8.41732299041338366963111794309701085e-01L, /* 3ffeaef78930bd274c0f93b0d1720d78 */ -4.30821936750410026005408345400225948e-35L, /* bf8cca20e2fded3bf5a9a7e53dcba3ed */ /* sin(x) = 0.8a3690fc5bfc11bf9535e2739a8512f448a41251514bbed7fc18d530f9b4650fcbb2861b0aa */ 5.39895116435204405041660709903993340e-01L, /* 3ffe146d21f8b7f8237f2a6bc4e7350a */ 1.42595803521626714477253741404712093e-35L, /* 3f8b2f448a41251514bbed7fc18d5310 */ /* x = 5.78125000000000000000000000000000000e-01 3ffe2800000000000000000000000000 */ /* cos(x) = 0.d665a937b4ef2b1f6d51bad6d988a4419c1d7051faf31a9efa151d7631117efac03713f950a */ 8.37488723850523685315353348917240617e-01L, /* 3ffeaccb526f69de563edaa375adb311 */ 2.72761997872084533045777718677326179e-35L, /* 3f8c220ce0eb828fd798d4f7d0a8ebb2 */ /* sin(x) = 0.8be472f9776d809af2b88171243d63d66dfceeeb739cc894e023fbc165a0e3f26ff729c5d57 */ 5.46454606919203564403349553749411001e-01L, /* 3ffe17c8e5f2eedb0135e57102e2487b */ -2.11870230730160315420936523771864858e-35L, /* bf8bc29920311148c63376b1fdc043ea */ /* x = 5.85937500000000000000000000000000000e-01 3ffe2c00000000000000000000000000 */ /* cos(x) = 0.d54c3441844897fc8f853f0655f1ba695eba9fbfd7439dbb1171d862d9d9146ca5136f825ac */ 8.33194032664581363070224042208032321e-01L, /* 3ffeaa98688308912ff91f0a7e0cabe3 */ 4.39440050052045486567668031751259899e-35L, /* 3f8cd34af5d4fdfeba1cedd88b8ec317 */ /* sin(x) = 0.8d902565817ee7839bce3cd128060119492cd36d42d82ada30d7f8bde91324808377ddbf5d4 */ 5.52980744630527369849695082681623667e-01L, /* 3ffe1b204acb02fdcf07379c79a2500c */ 8.26624790417342895897164123189984127e-37L, /* 3f8719492cd36d42d82ada30d7f8bde9 */ /* x = 5.93750000000000000000000000000000000e-01 3ffe3000000000000000000000000000 */ /* cos(x) = 0.d42f6a1b9f0168cdf031c2f63c8d9304d86f8d34cb1d5fccb68ca0f2241427fc18d1fd5bbdf */ 8.28848487609325734810171790119116638e-01L, /* 3ffea85ed4373e02d19be06385ec791b */ 1.43082508100496581719048175506239770e-35L, /* 3f8b304d86f8d34cb1d5fccb68ca0f22 */ /* sin(x) = 0.8f39a191b2ba6122a3fa4f41d5a3ffd421417d46f19a22230a14f7fcc8fce5c75b4b28b29d1 */ 5.59473131247366877384844006003116688e-01L, /* 3ffe1e7343236574c24547f49e83ab48 */ -1.28922620524163922306886952100992796e-37L, /* bf845ef5f415c8732eeee7af584019b8 */ /* x = 6.01562500000000000000000000000000000e-01 3ffe3400000000000000000000000000 */ /* cos(x) = 0.d30f4f392c357ab0661c5fa8a7d9b26627846fef214b1d19a22379ff9eddba087cf410eb097 */ 8.24452353914429207485643598212356053e-01L, /* 3ffea61e9e72586af560cc38bf514fb3 */ 3.79160239225080026987031418939026741e-35L, /* 3f8c93313c237f790a58e8cd111bcffd */ /* sin(x) = 0.90e0e0d81ca678796cc92c8ea8c2815bc72ca78abe571bfa8576aacc571e096a33237e0e830 */ 5.65931370507905990773159095689276114e-01L, /* 3ffe21c1c1b0394cf0f2d992591d5185 */ 1.02202775968053982310991962521535027e-36L, /* 3f875bc72ca78abe571bfa8576aacc57 */ /* x = 6.09375000000000000000000000000000000e-01 3ffe3800000000000000000000000000 */ /* cos(x) = 0.d1ebe81a95ee752e48a26bcd32d6e922d7eb44b8ad2232f6930795e84b56317269b9dd1dfa6 */ 8.20005899897234008255550633876556043e-01L, /* 3ffea3d7d0352bdcea5c9144d79a65ae */ -1.72008811955230823416724332297991247e-35L, /* bf8b6dd2814bb4752ddcd096cf86a17b */ /* sin(x) = 0.9285dc9bc45dd9ea3d02457bcce59c4175aab6ff7929a8d287195525fdace200dba032874fb */ 5.72355068234507240384953706824503608e-01L, /* 3ffe250bb93788bbb3d47a048af799cb */ 2.12572273479933123944580199464514529e-35L, /* 3f8bc4175aab6ff7929a8d2871955260 */ /* x = 6.17187500000000000000000000000000000e-01 3ffe3c00000000000000000000000000 */ /* cos(x) = 0.d0c5394d772228195e25736c03574707de0af1ca344b13bd3914bfe27518e9e426f5deff1e1 */ 8.15509396946375476876345384201386217e-01L, /* 3ffea18a729aee445032bc4ae6d806af */ -4.28589138410712954051679139949341961e-35L, /* bf8cc7c10fa871ae5da76216375a00ec */ /* sin(x) = 0.94288e48bd0335fc41c4cbd2920497a8f5d1d8185c99fa0081f90c27e2a53ffdd208a0dbe69 */ 5.78743832357770354521111378581385347e-01L, /* 3ffe28511c917a066bf8838997a52409 */ 1.77998063432551282609698670002456093e-35L, /* 3f8b7a8f5d1d8185c99fa0081f90c27e */ /* x = 6.25000000000000000000000000000000000e-01 3ffe4000000000000000000000000000 */ /* cos(x) = 0.cf9b476c897c25c5bfe750dd3f308eaf7bcc1ed00179a256870f4200445043dcdb1974b5878 */ 8.10963119505217902189534803941080724e-01L, /* 3ffe9f368ed912f84b8b7fcea1ba7e61 */ 1.10481292856794436426051402418804358e-35L, /* 3f8ad5ef7983da002f344ad0e1e84009 */ /* sin(x) = 0.95c8ef544210ec0b91c49bd2aa09e8515fa61a156ebb10f5f8c232a6445b61ebf3c2ec268f9 */ 5.85097272940462154805399314150080459e-01L, /* 3ffe2b91dea88421d817238937a55414 */ -1.78164576278056195136525335403380464e-35L, /* bf8b7aea059e5ea9144ef0a073dcd59c */ /* x = 6.32812500000000000000000000000000000e-01 3ffe4400000000000000000000000000 */ /* cos(x) = 0.ce6e171f92f2e27f32225327ec440ddaefae248413efc0e58ceee1ae369aabe73f88c87ed1a */ 8.06367345055103913698795406077297399e-01L, /* 3ffe9cdc2e3f25e5c4fe6444a64fd888 */ 1.04235088143133625463876245029180850e-35L, /* 3f8abb5df5c490827df81cb19ddc35c7 */ /* sin(x) = 0.9766f93cd18413a6aafc1cfc6fc28abb6817bf94ce349901ae3f48c3215d3eb60acc5f78903 */ 5.91415002201316315087000225758031236e-01L, /* 3ffe2ecdf279a308274d55f839f8df85 */ 8.07390238063560077355762466502569603e-36L, /* 3f8a576d02f7f299c6932035c7e91864 */ /* x = 6.40625000000000000000000000000000000e-01 3ffe4800000000000000000000000000 */ /* cos(x) = 0.cd3dad1b5328a2e459f993f4f5108819faccbc4eeba9604e81c7adad51cc8a2561631a06826 */ 8.01722354098418450607492605652964208e-01L, /* 3ffe9a7b5a36a65145c8b3f327e9ea21 */ 6.09487851305233089325627939458963741e-36L, /* 3f8a033f599789dd752c09d038f5b5aa */ /* sin(x) = 0.9902a58a45e27bed68412b426b675ed503f54d14c8172e0d373f42cadf04daf67319a7f94be */ 5.97696634538701531238647618967334337e-01L, /* 3ffe32054b148bc4f7dad0825684d6cf */ -2.49527608940873714527427941350461554e-35L, /* bf8c0957e0559759bf468f964605e9a9 */ /* x = 6.48437500000000000000000000000000000e-01 3ffe4c00000000000000000000000000 */ /* cos(x) = 0.cc0a0e21709883a3ff00911e11a07ee3bd7ea2b04e081be99be0264791170761ae64b8b744a */ 7.97028430141468342004642741431945296e-01L, /* 3ffe98141c42e1310747fe01223c2341 */ -8.35364432831812599727083251866305534e-37L, /* bf871c42815d4fb1f7e416641fd9b86f */ /* sin(x) = 0.9a9bedcdf01b38d993f3d7820781de292033ead73b89e28f39313dbe3a6e463f845b5fa8490 */ 6.03941786554156657267270287527367726e-01L, /* 3ffe3537db9be03671b327e7af040f04 */ -2.54578992328947177770363936132309779e-35L, /* bf8c0eb6fe60a94623b0eb863676120e */ /* x = 6.56250000000000000000000000000000000e-01 3ffe5000000000000000000000000000 */ /* cos(x) = 0.cad33f00658fe5e8204bbc0f3a66a0e6a773f87987a780b243d7be83b3db1448ca0e0e62787 */ 7.92285859677178543141501323781709399e-01L, /* 3ffe95a67e00cb1fcbd04097781e74cd */ 2.47519558228473167879248891673807645e-35L, /* 3f8c07353b9fc3cc3d3c05921ebdf41e */ /* sin(x) = 0.9c32cba2b14156ef05256c4f857991ca6a547cd7ceb1ac8a8e62a282bd7b9183648a462bd04 */ 6.10150077075791371273742393566183220e-01L, /* 3ffe386597456282adde0a4ad89f0af3 */ 1.33842237929938963780969418369150532e-35L, /* 3f8b1ca6a547cd7ceb1ac8a8e62a282c */ /* x = 6.64062500000000000000000000000000000e-01 3ffe5400000000000000000000000000 */ /* cos(x) = 0.c99944936cf48c8911ff93fe64b3ddb7981e414bdaf6aae1203577de44878c62bc3bc9cf7b9 */ 7.87494932167606083931328295965533034e-01L, /* 3ffe93328926d9e9191223ff27fcc968 */ -2.57915385618070637156514241185180920e-35L, /* bf8c12433f0df5a1284aa8f6fe54410e */ /* sin(x) = 0.9dc738ad14204e689ac582d0f85826590feece34886cfefe2e08cf2bb8488d55424dc9d3525 */ 6.16321127181550943005700433761731837e-01L, /* 3ffe3b8e715a28409cd1358b05a1f0b0 */ 2.88497530050197716298085892460478666e-35L, /* 3f8c32c87f7671a44367f7f17046795e */ /* x = 6.71875000000000000000000000000000000e-01 3ffe5800000000000000000000000000 */ /* cos(x) = 0.c85c23c26ed7b6f014ef546c47929682122876bfbf157de0aff3c4247d820c746e32cd4174f */ 7.82655940026272796930787447428139026e-01L, /* 3ffe90b84784ddaf6de029dea8d88f25 */ 1.69332045679237919427807771288506254e-35L, /* 3f8b682122876bfbf157de0aff3c4248 */ /* sin(x) = 0.9f592e9b66a9cf906a3c7aa3c10199849040c45ec3f0a747597311038101780c5f266059dbf */ 6.22454560222343683041926705090443330e-01L, /* 3ffe3eb25d36cd539f20d478f5478203 */ 1.91974786921147072717621236192269859e-35L, /* 3f8b9849040c45ec3f0a747597311038 */ /* x = 6.79687500000000000000000000000000000e-01 3ffe5c00000000000000000000000000 */ /* cos(x) = 0.c71be181ecd6875ce2da5615a03cca207d9adcb9dfb0a1d6c40a4f0056437f1a59ccddd06ee */ 7.77769178600317903122203513685412863e-01L, /* 3ffe8e37c303d9ad0eb9c5b4ac2b407a */ -4.05296033424632846931240580239929672e-35L, /* bf8caefc13291a31027af149dfad87fd */ /* sin(x) = 0.a0e8a725d33c828c11fa50fd9e9a15ffecfad43f3e534358076b9b0f6865694842b1e8c67dc */ 6.28550001845029662028004327939032867e-01L, /* 3ffe41d14e4ba679051823f4a1fb3d34 */ 1.65507421184028099672784511397428852e-35L, /* 3f8b5ffecfad43f3e534358076b9b0f7 */ /* x = 6.87500000000000000000000000000000000e-01 3ffe6000000000000000000000000000 */ /* cos(x) = 0.c5d882d2ee48030c7c07d28e981e34804f82ed4cf93655d2365389b716de6ad44676a1cc5da */ 7.72834946152471544810851845913425178e-01L, /* 3ffe8bb105a5dc900618f80fa51d303c */ 3.94975229341211664237241534741146939e-35L, /* 3f8ca4027c176a67c9b2ae91b29c4db9 */ /* sin(x) = 0.a2759c0e79c35582527c32b55f5405c182c66160cb1d9eb7bb0b7cdf4ad66f317bda4332914 */ 6.34607080015269296850309914203671436e-01L, /* 3ffe44eb381cf386ab04a4f8656abea8 */ 4.33025916939968369326060156455927002e-36L, /* 3f897060b1985832c767adeec2df37d3 */ /* x = 6.95312500000000000000000000000000000e-01 3ffe6400000000000000000000000000 */ /* cos(x) = 0.c4920cc2ec38fb891b38827db08884fc66371ac4c2052ca8885b981bbcfd3bb7b093ee31515 */ 7.67853543842850365879920759114193964e-01L, /* 3ffe89241985d871f712367104fb6111 */ 3.75100035267325597157244776081706979e-36L, /* 3f893f198dc6b130814b2a2216e606ef */ /* sin(x) = 0.a400072188acf49cd6b173825e038346f105e1301afe642bcc364cea455e21e506e3e927ed8 */ 6.40625425040230409188409779413961021e-01L, /* 3ffe48000e431159e939ad62e704bc07 */ 2.46542747294664049615806500747173281e-36L, /* 3f88a37882f0980d7f3215e61b267523 */ /* x = 7.03125000000000000000000000000000000e-01 3ffe6800000000000000000000000000 */ /* cos(x) = 0.c348846bbd3631338ffe2bfe9dd1381a35b4e9c0c51b4c13fe376bad1bf5caacc4542be0aa9 */ 7.62825275710576250507098753625429792e-01L, /* 3ffe869108d77a6c62671ffc57fd3ba2 */ 4.22067411888601505004748939382325080e-35L, /* 3f8cc0d1ada74e0628da609ff1bb5d69 */ /* sin(x) = 0.a587e23555bb08086d02b9c662cdd29316c3e9bd08d93793634a21b1810cce73bdb97a99b9e */ 6.46604669591152370524042159882800763e-01L, /* 3ffe4b0fc46aab761010da05738cc59c */ -3.41742981816219412415674365946079826e-35L, /* bf8c6b6749e0b217b9364364e5aef274 */ /* x = 7.10937500000000000000000000000000000e-01 3ffe6c00000000000000000000000000 */ /* cos(x) = 0.c1fbeef380e4ffdd5a613ec8722f643ffe814ec2343e53adb549627224fdc9f2a7b77d3d69f */ 7.57750448655219342240234832230493361e-01L, /* 3ffe83f7dde701c9ffbab4c27d90e45f */ -2.08767968311222650582659938787920125e-35L, /* bf8bbc0017eb13dcbc1ac524ab69d8de */ /* sin(x) = 0.a70d272a76a8d4b6da0ec90712bb748b96dabf88c3079246f3db7eea6e58ead4ed0e2843303 */ 6.52544448725765956407573982284767763e-01L, /* 3ffe4e1a4e54ed51a96db41d920e2577 */ -8.61758060284379660697102362141557170e-36L, /* bf8a6e8d24a80ee79f0db721849022b2 */ /* x = 7.18750000000000000000000000000000000e-01 3ffe7000000000000000000000000000 */ /* cos(x) = 0.c0ac518c8b6ae710ba37a3eeb90cb15aebcb8bed4356fb507a48a6e97de9aa6d9660116b436 */ 7.52629372418066476054541324847143116e-01L, /* 3ffe8158a31916d5ce21746f47dd7219 */ 3.71306958657663189665450864311104571e-35L, /* 3f8c8ad75e5c5f6a1ab7da83d245374c */ /* sin(x) = 0.a88fcfebd9a8dd47e2f3c76ef9e2439920f7e7fbe735f8bcc985491ec6f12a2d4214f8cfa99 */ 6.58444399910567541589583954884041989e-01L, /* 3ffe511f9fd7b351ba8fc5e78eddf3c5 */ -4.54412944084300330523721391865787219e-35L, /* bf8ce336f840c020c6503a19b3d5b70a */ /* x = 7.26562500000000000000000000000000000e-01 3ffe7400000000000000000000000000 */ /* cos(x) = 0.bf59b17550a4406875969296567cf3e3b4e483061877c02811c6cae85fad5a6c3da58f49292 */ 7.47462359563216166669700384714767552e-01L, /* 3ffe7eb362eaa14880d0eb2d252cacfa */ -9.11094340926220027288083639048016945e-36L, /* bf8a8389636f9f3cf107fafdc726a2f4 */ /* sin(x) = 0.aa0fd66eddb921232c28520d3911b8a03193b47f187f1471ac216fbcd5bb81029294d3a73f1 */ 6.64304163042946276515506587432846246e-01L, /* 3ffe541facddbb7242465850a41a7223 */ 4.26004843895378210155889028714676019e-35L, /* 3f8cc5018c9da3f8c3f8a38d610b7de7 */ /* x = 7.34375000000000000000000000000000000e-01 3ffe7800000000000000000000000000 */ /* cos(x) = 0.be0413f84f2a771c614946a88cbf4da1d75a5560243de8f2283fefa0ea4a48468a52d51d8b3 */ 7.42249725458501306991347253449610537e-01L, /* 3ffe7c0827f09e54ee38c2928d51197f */ -3.78925270049800913539923473871287550e-35L, /* bf8c92f1452d54fede10b86ebe0082f9 */ /* sin(x) = 0.ab8d34b36acd987210ed343ec65d7e3adc2e7109fce43d55c8d57dfdf55b9e01d2cc1f1b9ec */ 6.70123380473162894654531583500648495e-01L, /* 3ffe571a6966d59b30e421da687d8cbb */ -1.33165852952743729897634069393684656e-36L, /* bf87c523d18ef6031bc2aa372a82020b */ /* x = 7.42187500000000000000000000000000000e-01 3ffe7c00000000000000000000000000 */ /* cos(x) = 0.bcab7e6bfb2a14a9b122c574a376bec98ab14808c64a4e731b34047e217611013ac99c0f25d */ 7.36991788256240741057089385586450844e-01L, /* 3ffe7956fcd7f654295362458ae946ed */ 4.72358938637974850573747497460125519e-35L, /* 3f8cf64c558a404632527398d9a023f1 */ /* sin(x) = 0.ad07e4c409d08c4fa3a9057bb0ac24b8636e74e76f51e09bd6b2319707cbd9f5e254643897a */ 6.75901697026178809189642203142423973e-01L, /* 3ffe5a0fc98813a1189f47520af76158 */ 2.76252586616364878801928456702948857e-35L, /* 3f8c25c31b73a73b7a8f04deb5918cb8 */ /* x = 7.50000000000000000000000000000000000e-01 3ffe8000000000000000000000000000 */ /* cos(x) = 0.bb4ff632a908f73ec151839cb9d993b4e0bfb8f20e7e44e6e4aee845e35575c3106dbe6fd06 */ 7.31688868873820886311838753000084529e-01L, /* 3ffe769fec655211ee7d82a3073973b3 */ 1.48255637548931697184991710293198620e-35L, /* 3f8b3b4e0bfb8f20e7e44e6e4aee845e */ /* sin(x) = 0.ae7fe0b5fc786b2d966e1d6af140a488476747c2646425fc7533f532cd044cb10a971a49a6a */ 6.81638760023334166733241952779893908e-01L, /* 3ffe5cffc16bf8f0d65b2cdc3ad5e281 */ 2.74838775935027549024224114338667371e-35L, /* 3f8c24423b3a3e1323212fe3a99fa996 */ /* x = 7.57812500000000000000000000000000000e-01 3ffe8400000000000000000000000000 */ /* cos(x) = 0.b9f180ba77dd0751628e135a9508299012230f14becacdd14c3f8862d122de5b56d55b53360 */ 7.26341290974108590410147630237598973e-01L, /* 3ffe73e30174efba0ea2c51c26b52a10 */ 3.12683579338351123545814364980658990e-35L, /* 3f8c4c80911878a5f6566e8a61fc4317 */ /* sin(x) = 0.aff522a954f2ba16d9defdc416e33f5e9a5dfd5a6c228e0abc4d521327ff6e2517a7b3851dd */ 6.87334219303873534951703613035647220e-01L, /* 3ffe5fea4552a9e5742db3bdfb882dc6 */ 4.76739454455410744997012795035529128e-35L, /* 3f8cfaf4d2efead361147055e26a9099 */ /* x = 7.65625000000000000000000000000000000e-01 3ffe8800000000000000000000000000 */ /* cos(x) = 0.b890237d3bb3c284b614a0539016bfa1053730bbdf940fa895e185f8e58884d3dda15e63371 */ 7.20949380945696418043812784148447688e-01L, /* 3ffe712046fa776785096c2940a7202d */ 4.78691285733673379499536326050811832e-35L, /* 3f8cfd0829b985defca07d44af0c2fc7 */ /* sin(x) = 0.b167a4c90d63c4244cf5493b7cc23bd3c3c1225e078baa0c53d6d400b926281f537a1a260e6 */ 6.92987727246317910281815490823048210e-01L, /* 3ffe62cf49921ac7884899ea9276f984 */ 4.50089871077663557180849219529189918e-35L, /* 3f8cde9e1e0912f03c5d50629eb6a006 */ /* x = 7.73437500000000000000000000000000000e-01 3ffe8c00000000000000000000000000 */ /* cos(x) = 0.b72be40067aaf2c050dbdb7a14c3d7d4f203f6b3f0224a4afe55d6ec8e92b508fd5c5984b3b */ 7.15513467882981573520620561289896903e-01L, /* 3ffe6e57c800cf55e580a1b7b6f42988 */ -3.02191815581445336509438104625489192e-35L, /* bf8c41586fe04a607eedada80d51489c */ /* sin(x) = 0.b2d7614b1f3aaa24df2d6e20a77e1ca3e6d838c03e29c1bcb026e6733324815fadc9eb89674 */ 6.98598938789681741301929277107891591e-01L, /* 3ffe65aec2963e755449be5adc414efc */ 2.15465226809256290914423429408722521e-35L, /* 3f8bca3e6d838c03e29c1bcb026e6733 */ /* x = 7.81250000000000000000000000000000000e-01 3ffe9000000000000000000000000000 */ /* cos(x) = 0.b5c4c7d4f7dae915ac786ccf4b1a498d3e73b6e5e74fe7519d9c53ee6d6b90e881bddfc33e1 */ 7.10033883566079674974121643959490219e-01L, /* 3ffe6b898fa9efb5d22b58f0d99e9635 */ -4.09623224763692443220896752907902465e-35L, /* bf8cb3960c6248d0c580c573131d608d */ /* sin(x) = 0.b44452709a59752905913765434a59d111f0433eb2b133f7d103207e2aeb4aae111ddc385b3 */ 7.04167511454533672780059509973942844e-01L, /* 3ffe6888a4e134b2ea520b226eca8695 */ -2.87259372740393348676633610275598640e-35L, /* bf8c3177707de60a6a76604177e6fc0f */ /* x = 7.89062500000000000000000000000000000e-01 3ffe9400000000000000000000000000 */ /* cos(x) = 0.b45ad4975b1294cadca4cf40ec8f22a68cd14b175835239a37e63acb85e8e9505215df18140 */ 7.04510962440574606164129481545916976e-01L, /* 3ffe68b5a92eb6252995b9499e81d91e */ 2.60682037357042658395360726992048803e-35L, /* 3f8c1534668a58bac1a91cd1bf31d65c */ /* sin(x) = 0.b5ae7285bc10cf515753847e8f8b7a30e0a580d929d770103509880680f7b8b0e8ad23b65d8 */ 7.09693105363899724959669028139035515e-01L, /* 3ffe6b5ce50b78219ea2aea708fd1f17 */ -4.37026016974122945368562319136420097e-36L, /* bf8973c7d69fc9b58a23fbf2bd9dfe60 */ }; ����gnulib-20210822~d383792/lib/sinf.c������������������������������������������������������������������0000664�0000000�0000000�00000001536�14110572173�0016155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float sinf (float x) { return (float) sin ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sinhf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001553�14110572173�0016324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic sine function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float sinhf (float x) { return (float) sinh ((double) x); } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sinl.c������������������������������������������������������������������0000664�0000000�0000000�00000007717�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sin (sine) function with 'long double' argument. Copyright (C) 2003-2021 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/>. */ /* s_sinl.c -- long double version of s_sin.c. * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double sinl (long double x) { return sin (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/s_sinl.c. */ /* sinl(x) * Return sine function of x. * * kernel function: * __kernel_sinl ... sine function on [-pi/4,pi/4] * __kernel_cosl ... cosine function on [-pi/4,pi/4] * __ieee754_rem_pio2l ... argument reduction routine * * Method. * Let S,C and T denote the sin, cos and tan respectively on * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 * in [-pi/4 , +pi/4], and let n = k mod 4. * We have * * n sin(x) cos(x) tan(x) * ---------------------------------------------------------- * 0 S C T * 1 C -S -1/T * 2 -S -C T * 3 -C S -1/T * ---------------------------------------------------------- * * Special cases: * Let trig be any of sin, cos, or tan. * trig(+-INF) is NaN, with signals; * trig(NaN) is that NaN; * * Accuracy: * TRIG(x) returns trig(x) nearly rounded */ # include "trigl.h" long double sinl (long double x) { long double y[2], z = 0.0L; int n; /* sinl(NaN) is NaN */ if (isnanl (x)) return x; /* |x| ~< pi/4 */ if (x >= -0.7853981633974483096156608458198757210492 && x <= 0.7853981633974483096156608458198757210492) return kernel_sinl (x, z, 0); /* sinl(Inf) is NaN, sinl(0) is 0 */ else if (x + x == x) return x - x; /* NaN */ /* argument reduction needed */ else { n = ieee754_rem_pio2l (x, y); switch (n & 3) { case 0: return kernel_sinl (y[0], y[1], 1); case 1: return kernel_cosl (y[0], y[1]); case 2: return -kernel_sinl (y[0], y[1], 1); default: return -kernel_cosl (y[0], y[1]); } } } #endif #if 0 int main (void) { printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *29)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *2)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *30)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *4)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *32)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *2/3)); printf ("%.16Lg\n", sinl (0.7853981633974483096156608458198757210492 *4/3)); } #endif �������������������������������������������������gnulib-20210822~d383792/lib/size_max.h��������������������������������������������������������������0000664�0000000�0000000�00000002253�14110572173�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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 GNULIB_SIZE_MAX_H #define GNULIB_SIZE_MAX_H /* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ # include <limits.h> /* Get SIZE_MAX declaration on systems like glibc 2. */ # if HAVE_STDINT_H # include <stdint.h> # endif /* On systems where these include files don't define it, SIZE_MAX is defined in config.h. */ #endif /* GNULIB_SIZE_MAX_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sleep.c�����������������������������������������������������������������0000664�0000000�0000000�00000004402�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <limits.h> #include "verify.h" #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> unsigned int sleep (unsigned int seconds) { unsigned int remaining; /* Sleep for 1 second many times, because 1. Sleep is not interruptible by Ctrl-C, 2. we want to avoid arithmetic overflow while multiplying with 1000. */ for (remaining = seconds; remaining > 0; remaining--) Sleep (1000); return remaining; } #elif HAVE_SLEEP # undef sleep /* Guarantee unlimited sleep and a reasonable return value. Cygwin 1.5.x rejects attempts to sleep more than 49.7 days (2**32 milliseconds), but uses uninitialized memory which results in a garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too small return value when asked to sleep more than 24.85 days. */ unsigned int rpl_sleep (unsigned int seconds) { /* This requires int larger than 16 bits. */ verify (UINT_MAX / 24 / 24 / 60 / 60); const unsigned int limit = 24 * 24 * 60 * 60; while (limit < seconds) { unsigned int result; seconds -= limit; result = sleep (limit); if (result) return seconds + result; } return sleep (seconds); } #else /* !HAVE_SLEEP */ #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sm3.c�������������������������������������������������������������������0000664�0000000�0000000�00000040360�14110572173�0015716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sm3.c - Functions to compute SM3 message digest of files or memory blocks according to the specification GM/T 004-2012 Cryptographic Hash Algorithm SM3, published by State Encryption Management Bureau, China. SM3 cryptographic hash algorithm. <http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml> Copyright (C) 2017-2021 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 Jia Zhang <qianyue.zj@alibaba-inc.com>, 2017, considerably copypasting from David Madore's sha256.c */ #ifndef DEBUG_SM3 # define DEBUG_SM3 0 #endif #include <config.h> #if HAVE_OPENSSL_SM3 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif #include "sm3.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #if ! DEBUG_SM3 # define dbg_printf(fmt, ...) do { } while (0) #else # define dbg_printf printf #endif #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) bswap_32 (n) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif #if ! HAVE_OPENSSL_SM3 /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Takes a pointer to a 256 bit block of data (eight 32 bit ints) and initializes it to the start constants of the SM3 algorithm. This must be called before using hash in the call to sm3_hash */ void sm3_init_ctx (struct sm3_ctx *ctx) { ctx->state[0] = 0x7380166fUL; ctx->state[1] = 0x4914b2b9UL; ctx->state[2] = 0x172442d7UL; ctx->state[3] = 0xda8a0600UL; ctx->state[4] = 0xa96f30bcUL; ctx->state[5] = 0x163138aaUL; ctx->state[6] = 0xe38dee4dUL; ctx->state[7] = 0xb0fb0e4eUL; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the value from v into the memory location pointed to by *cp, If your architecture allows unaligned access this is equivalent to * (uint32_t *) cp = v */ static void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 32 bytes following RESBUF. The result must be in little endian byte order. */ void * sm3_read_ctx (const struct sm3_ctx *ctx, void *resbuf) { int i; char *r = resbuf; for (i = 0; i < 8; i++) set_uint32 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i])); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ static void sm3_conclude_ctx (struct sm3_ctx *ctx) { /* Take yet unprocessed bytes into account. */ size_t bytes = ctx->buflen; size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; /* Put the 64-bit file length in *bits* at the end of the buffer. Use set_uint32 rather than a simple assignment, to avoid risk of unaligned access. */ set_uint32 ((char *) &ctx->buffer[size - 2], SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29))); set_uint32 ((char *) &ctx->buffer[size - 1], SWAP (ctx->total[0] << 3)); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes); /* Process last bytes. */ sm3_process_block (ctx->buffer, size * 4, ctx); } void * sm3_finish_ctx (struct sm3_ctx *ctx, void *resbuf) { sm3_conclude_ctx (ctx); return sm3_read_ctx (ctx, resbuf); } #endif /* Compute SM3 message digest for bytes read from STREAM. The resulting message digest number will be written into the 32 bytes beginning at RESBLOCK. */ int sm3_stream (FILE *stream, void *resblock) { struct sm3_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sm3_init_ctx (&ctx); /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ while (1) { n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; if (sum == BLOCKSIZE) break; if (n == 0) { /* Check for the error flag IFF N == 0, so that we don't exit the loop after a partial read due to e.g., EAGAIN or EWOULDBLOCK. */ if (ferror (stream)) { free (buffer); return 1; } goto process_partial_block; } /* We've read at least one byte, so ignore errors. But always check for EOF, since feof may be true even though N > 0. Otherwise, we could end up calling fread after EOF. */ if (feof (stream)) goto process_partial_block; } /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ sm3_process_block (buffer, BLOCKSIZE, &ctx); } process_partial_block:; /* Process any remaining bytes. */ if (sum > 0) sm3_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ sm3_finish_ctx (&ctx, resblock); free (buffer); return 0; } #if ! HAVE_OPENSSL_SM3 /* Compute SM3 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * sm3_buffer (const char *buffer, size_t len, void *resblock) { struct sm3_ctx ctx; /* Initialize the computation context. */ sm3_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ sm3_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return sm3_finish_ctx (&ctx, resblock); } void sm3_process_bytes (const void *buffer, size_t len, struct sm3_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { sm3_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap, because ctx->buflen < 64 ≤ (left_over + add) & ~63. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned) # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { sm3_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { sm3_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { sm3_process_block (ctx->buffer, 64, ctx); left_over -= 64; /* The regions in the following copy operation cannot overlap, because left_over ≤ 64. */ memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between sha256.c and sm3.c --- */ /* SM3 round constants */ #define T(j) sm3_round_constants[j] static const uint32_t sm3_round_constants[64] = { 0x79cc4519UL, 0xf3988a32UL, 0xe7311465UL, 0xce6228cbUL, 0x9cc45197UL, 0x3988a32fUL, 0x7311465eUL, 0xe6228cbcUL, 0xcc451979UL, 0x988a32f3UL, 0x311465e7UL, 0x6228cbceUL, 0xc451979cUL, 0x88a32f39UL, 0x11465e73UL, 0x228cbce6UL, 0x9d8a7a87UL, 0x3b14f50fUL, 0x7629ea1eUL, 0xec53d43cUL, 0xd8a7a879UL, 0xb14f50f3UL, 0x629ea1e7UL, 0xc53d43ceUL, 0x8a7a879dUL, 0x14f50f3bUL, 0x29ea1e76UL, 0x53d43cecUL, 0xa7a879d8UL, 0x4f50f3b1UL, 0x9ea1e762UL, 0x3d43cec5UL, 0x7a879d8aUL, 0xf50f3b14UL, 0xea1e7629UL, 0xd43cec53UL, 0xa879d8a7UL, 0x50f3b14fUL, 0xa1e7629eUL, 0x43cec53dUL, 0x879d8a7aUL, 0x0f3b14f5UL, 0x1e7629eaUL, 0x3cec53d4UL, 0x79d8a7a8UL, 0xf3b14f50UL, 0xe7629ea1UL, 0xcec53d43UL, 0x9d8a7a87UL, 0x3b14f50fUL, 0x7629ea1eUL, 0xec53d43cUL, 0xd8a7a879UL, 0xb14f50f3UL, 0x629ea1e7UL, 0xc53d43ceUL, 0x8a7a879dUL, 0x14f50f3bUL, 0x29ea1e76UL, 0x53d43cecUL, 0xa7a879d8UL, 0x4f50f3b1UL, 0x9ea1e762UL, 0x3d43cec5UL, }; /* Round functions. */ #define FF1(X,Y,Z) ( X ^ Y ^ Z ) #define FF2(X,Y,Z) ( ( X & Y ) | ( X & Z ) | ( Y & Z ) ) #define GG1(X,Y,Z) ( X ^ Y ^ Z ) #define GG2(X,Y,Z) ( ( X & Y ) | ( ~X & Z ) ) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. Most of this code comes from David Madore's sha256.c. */ void sm3_process_block (const void *buffer, size_t len, struct sm3_ctx *ctx) { const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t x[16]; uint32_t a = ctx->state[0]; uint32_t b = ctx->state[1]; uint32_t c = ctx->state[2]; uint32_t d = ctx->state[3]; uint32_t e = ctx->state[4]; uint32_t f = ctx->state[5]; uint32_t g = ctx->state[6]; uint32_t h = ctx->state[7]; uint32_t lolen = len; /* First increment the byte count. GM/T 004-2012 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += lolen; ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen); #define rol(x, n) (((x) << ((n) & 31)) | ((x) >> ((32 - (n)) & 31))) #define P0(x) ((x)^rol(x,9)^rol(x,17)) #define P1(x) ((x)^rol(x,15)^rol(x,23)) #define W1(I) ( x[I&0x0f] ) #define W2(I) ( tw = P1(x[I&0x0f]^x[(I-9)&0x0f]^rol(x[(I-3)&0x0f],15)) \ ^ rol(x[(I-13)&0x0f],7) ^ x[(I-6)&0x0f] \ , x[I&0x0f] = tw ) #define R(i,A,B,C,D,E,F,G,H,T,W1,W2) \ do { \ if (++j) \ dbg_printf("%2d %08x %08x %08x %08x %08x %08x %08x %08x\n", \ j-1, A, B, C, D, E, F, G, H); \ ss1 = rol(rol(A,12) + E + T,7); \ ss2 = ss1 ^ rol(A,12); \ D += FF##i(A,B,C) + ss2 + (W1 ^ W2); \ H += GG##i(E,F,G) + ss1 + W1; \ B = rol(B,9); \ F = rol(F,19); \ H = P0(H); \ } while(0) #define R1(A,B,C,D,E,F,G,H,T,W1,W2) R(1,A,B,C,D,E,F,G,H,T,W1,W2) #define R2(A,B,C,D,E,F,G,H,T,W1,W2) R(2,A,B,C,D,E,F,G,H,T,W1,W2) while (words < endp) { uint32_t tw; uint32_t ss1, ss2; int j; for (j = 0; j < 16; j++) { x[j] = SWAP (*words); words++; } j = -1; dbg_printf (" j A B C D E " " F G H\n"); dbg_printf (" %08x %08x %08x %08x %08x %08x %08x %08x\n", a, b, c, d, e, f, g, h); R1( a, b, c, d, e, f, g, h, T( 0), W1( 0), W1( 4) ); R1( d, a, b, c, h, e, f, g, T( 1), W1( 1), W1( 5) ); R1( c, d, a, b, g, h, e, f, T( 2), W1( 2), W1( 6) ); R1( b, c, d, a, f, g, h, e, T( 3), W1( 3), W1( 7) ); R1( a, b, c, d, e, f, g, h, T( 4), W1( 4), W1( 8) ); R1( d, a, b, c, h, e, f, g, T( 5), W1( 5), W1( 9) ); R1( c, d, a, b, g, h, e, f, T( 6), W1( 6), W1(10) ); R1( b, c, d, a, f, g, h, e, T( 7), W1( 7), W1(11) ); R1( a, b, c, d, e, f, g, h, T( 8), W1( 8), W1(12) ); R1( d, a, b, c, h, e, f, g, T( 9), W1( 9), W1(13) ); R1( c, d, a, b, g, h, e, f, T(10), W1(10), W1(14) ); R1( b, c, d, a, f, g, h, e, T(11), W1(11), W1(15) ); R1( a, b, c, d, e, f, g, h, T(12), W1(12), W2(16) ); R1( d, a, b, c, h, e, f, g, T(13), W1(13), W2(17) ); R1( c, d, a, b, g, h, e, f, T(14), W1(14), W2(18) ); R1( b, c, d, a, f, g, h, e, T(15), W1(15), W2(19) ); R2( a, b, c, d, e, f, g, h, T(16), W1(16), W2(20) ); R2( d, a, b, c, h, e, f, g, T(17), W1(17), W2(21) ); R2( c, d, a, b, g, h, e, f, T(18), W1(18), W2(22) ); R2( b, c, d, a, f, g, h, e, T(19), W1(19), W2(23) ); R2( a, b, c, d, e, f, g, h, T(20), W1(20), W2(24) ); R2( d, a, b, c, h, e, f, g, T(21), W1(21), W2(25) ); R2( c, d, a, b, g, h, e, f, T(22), W1(22), W2(26) ); R2( b, c, d, a, f, g, h, e, T(23), W1(23), W2(27) ); R2( a, b, c, d, e, f, g, h, T(24), W1(24), W2(28) ); R2( d, a, b, c, h, e, f, g, T(25), W1(25), W2(29) ); R2( c, d, a, b, g, h, e, f, T(26), W1(26), W2(30) ); R2( b, c, d, a, f, g, h, e, T(27), W1(27), W2(31) ); R2( a, b, c, d, e, f, g, h, T(28), W1(28), W2(32) ); R2( d, a, b, c, h, e, f, g, T(29), W1(29), W2(33) ); R2( c, d, a, b, g, h, e, f, T(30), W1(30), W2(34) ); R2( b, c, d, a, f, g, h, e, T(31), W1(31), W2(35) ); R2( a, b, c, d, e, f, g, h, T(32), W1(32), W2(36) ); R2( d, a, b, c, h, e, f, g, T(33), W1(33), W2(37) ); R2( c, d, a, b, g, h, e, f, T(34), W1(34), W2(38) ); R2( b, c, d, a, f, g, h, e, T(35), W1(35), W2(39) ); R2( a, b, c, d, e, f, g, h, T(36), W1(36), W2(40) ); R2( d, a, b, c, h, e, f, g, T(37), W1(37), W2(41) ); R2( c, d, a, b, g, h, e, f, T(38), W1(38), W2(42) ); R2( b, c, d, a, f, g, h, e, T(39), W1(39), W2(43) ); R2( a, b, c, d, e, f, g, h, T(40), W1(40), W2(44) ); R2( d, a, b, c, h, e, f, g, T(41), W1(41), W2(45) ); R2( c, d, a, b, g, h, e, f, T(42), W1(42), W2(46) ); R2( b, c, d, a, f, g, h, e, T(43), W1(43), W2(47) ); R2( a, b, c, d, e, f, g, h, T(44), W1(44), W2(48) ); R2( d, a, b, c, h, e, f, g, T(45), W1(45), W2(49) ); R2( c, d, a, b, g, h, e, f, T(46), W1(46), W2(50) ); R2( b, c, d, a, f, g, h, e, T(47), W1(47), W2(51) ); R2( a, b, c, d, e, f, g, h, T(48), W1(48), W2(52) ); R2( d, a, b, c, h, e, f, g, T(49), W1(49), W2(53) ); R2( c, d, a, b, g, h, e, f, T(50), W1(50), W2(54) ); R2( b, c, d, a, f, g, h, e, T(51), W1(51), W2(55) ); R2( a, b, c, d, e, f, g, h, T(52), W1(52), W2(56) ); R2( d, a, b, c, h, e, f, g, T(53), W1(53), W2(57) ); R2( c, d, a, b, g, h, e, f, T(54), W1(54), W2(58) ); R2( b, c, d, a, f, g, h, e, T(55), W1(55), W2(59) ); R2( a, b, c, d, e, f, g, h, T(56), W1(56), W2(60) ); R2( d, a, b, c, h, e, f, g, T(57), W1(57), W2(61) ); R2( c, d, a, b, g, h, e, f, T(58), W1(58), W2(62) ); R2( b, c, d, a, f, g, h, e, T(59), W1(59), W2(63) ); R2( a, b, c, d, e, f, g, h, T(60), W1(60), W2(64) ); R2( d, a, b, c, h, e, f, g, T(61), W1(61), W2(65) ); R2( c, d, a, b, g, h, e, f, T(62), W1(62), W2(66) ); R2( b, c, d, a, f, g, h, e, T(63), W1(63), W2(67) ); dbg_printf("%2d %08x %08x %08x %08x %08x %08x %08x %08x\n", j, a, b, c, d, e, f, g, h); a = ctx->state[0] ^= a; b = ctx->state[1] ^= b; c = ctx->state[2] ^= c; d = ctx->state[3] ^= d; e = ctx->state[4] ^= e; f = ctx->state[5] ^= f; g = ctx->state[6] ^= g; h = ctx->state[7] ^= h; } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sm3.h�������������������������������������������������������������������0000664�0000000�0000000�00000007330�14110572173�0015723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations of functions and data types used for SM3 sum library function. Copyright (C) 2017-2021 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/>. */ /* This module can be used to compute SM3 message digest of files or memory blocks according to the specification GM/T 004-2012 Cryptographic Hash Algorithm SM3, published by State Cryptography Administration, China. The official SM3 cryptographic hash algorithm specification is available at <http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml>. */ #ifndef SM3_H # define SM3_H 1 # include <stdio.h> # include <stdint.h> # if HAVE_OPENSSL_SM3 # include <openssl/sm3.h> # endif # ifdef __cplusplus extern "C" { # endif enum { SM3_DIGEST_SIZE = 256 / 8 }; # if HAVE_OPENSSL_SM3 # define GL_OPENSSL_NAME 3 # include "gl_openssl.h" # else /* Structure to save state of computation between the single steps. */ struct sm3_ctx { uint32_t state[8]; uint32_t total[2]; size_t buflen; /* ≥ 0, ≤ 128 */ uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */ }; /* Initialize structure containing state of computation. */ extern void sm3_init_ctx (struct sm3_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void sm3_process_block (const void *buffer, size_t len, struct sm3_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void sm3_process_bytes (const void *buffer, size_t len, struct sm3_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 32 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sm3_finish_ctx (struct sm3_ctx *ctx, void *restrict resbuf); /* Put result from CTX in first 32 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sm3_read_ctx (const struct sm3_ctx *ctx, void *restrict resbuf); /* Compute SM3 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sm3_buffer (const char *buffer, size_t len, void *restrict resblock); # endif /* Compute SM3 message digest for bytes read from STREAM. The resulting message digest number will be written into the 32 bytes beginning at RESBLOCK. */ extern int sm3_stream (FILE *stream, void *resblock); # ifdef __cplusplus } # endif #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/snprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000003565�14110572173�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. Written by Simon Josefsson and Paul Eggert. 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "vasnprintf.h" /* Print formatted output to string STR. Similar to sprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. */ int snprintf (char *str, size_t size, const char *format, ...) { char *output; size_t len; size_t lenbuf = size; va_list args; va_start (args, format); output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (INT_MAX < len) { errno = EOVERFLOW; return -1; } return len; } �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/socket.c����������������������������������������������������������������0000664�0000000�0000000�00000002742�14110572173�0016506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* socket.c --- wrappers for Windows socket function Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #include "sockets.h" /* Don't assume that UNICODE is defined. */ #undef WSASocket #define WSASocket WSASocketW int rpl_socket (int domain, int type, int protocol) { SOCKET fh; gl_sockets_startup (SOCKETS_1_1); /* We have to use WSASocket() to create non-overlapped IO sockets. Overlapped IO sockets cannot be used with read/write. */ fh = WSASocket (domain, type, protocol, NULL, 0, 0); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } ������������������������������gnulib-20210822~d383792/lib/sockets.c���������������������������������������������������������������0000664�0000000�0000000�00000010212�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.c --- wrappers for Windows socket functions Copyright (C) 2008-2021 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 Simon Josefsson */ #include <config.h> /* Specification. */ #include "sockets.h" #if WINDOWS_SOCKETS /* This includes winsock2.h on MinGW. */ # include <sys/socket.h> # include "fd-hook.h" # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Get set_winsock_errno, FD_TO_SOCKET etc. */ # include "w32sock.h" static int close_fd_maybe_socket (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { /* Note about multithread-safety: There is a race condition where, between our calls to closesocket() and the primary close(), some other thread could make system calls that allocate precisely the same HANDLE value as sock; then the primary close() would call CloseHandle() on it. */ SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ /* FIXME: other applications, like squid, use an undocumented _free_osfhnd free function. But this is not enough: The 'osfile' flags for fd also needs to be cleared, but it is hard to access it. Instead, here we just close twice the file descriptor. */ if (closesocket (sock)) { set_winsock_errno (); return -1; } else { /* This call frees the file descriptor and does a CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails. */ _close (fd); return 0; } } else /* Some other type of file descriptor. */ return execute_close_hooks (remaining_list, primary, fd); } static int ioctl_fd_maybe_socket (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ if (ioctlsocket (sock, request, arg) < 0) { set_winsock_errno (); return -1; } else return 0; } else /* Some other type of file descriptor. */ return execute_ioctl_hooks (remaining_list, primary, fd, request, arg); } static struct fd_hook fd_sockets_hook; static int initialized_sockets_version /* = 0 */; #endif /* WINDOWS_SOCKETS */ int gl_sockets_startup (_GL_UNUSED int version) { #if WINDOWS_SOCKETS if (version > initialized_sockets_version) { WSADATA data; int err; err = WSAStartup (version, &data); if (err != 0) return 1; if (data.wVersion != version) { WSACleanup (); return 2; } if (initialized_sockets_version == 0) register_fd_hook (close_fd_maybe_socket, ioctl_fd_maybe_socket, &fd_sockets_hook); initialized_sockets_version = version; } #endif return 0; } int gl_sockets_cleanup (void) { #if WINDOWS_SOCKETS int err; initialized_sockets_version = 0; unregister_fd_hook (&fd_sockets_hook); err = WSACleanup (); if (err != 0) return 1; #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sockets.h���������������������������������������������������������������0000664�0000000�0000000�00000003174�14110572173�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.h - wrappers for Windows socket functions Copyright (C) 2008-2021 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 Simon Josefsson */ #ifndef SOCKETS_H #define SOCKETS_H 1 #define SOCKETS_1_0 0x0001 #define SOCKETS_1_1 0x0101 #define SOCKETS_2_0 0x0002 #define SOCKETS_2_1 0x0102 #define SOCKETS_2_2 0x0202 int gl_sockets_startup (int version) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; int gl_sockets_cleanup (void) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; /* This function is useful it you create a socket using gnulib's Winsock wrappers but needs to pass on the socket handle to some other library that only accepts sockets. */ #ifdef WINDOWS_SOCKETS # include <sys/socket.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static inline SOCKET gl_fd_to_handle (int fd) { return _get_osfhandle (fd); } #else # define gl_fd_to_handle(x) (x) #endif /* WINDOWS_SOCKETS */ #endif /* SOCKETS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn-pipe.c������������������������������������������������������������0000664�0000000�0000000�00000054405�14110572173�0017304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of subprocesses, communicating via pipes. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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/>. */ /* Tell clang not to warn about the 'child' variable, below. */ #if defined __clang__ # pragma clang diagnostic ignored "-Wconditional-uninitialized" #endif #include <config.h> /* Specification. */ #include "spawn-pipe.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include "canonicalize.h" #include "error.h" #include "fatal-signal.h" #include "filename.h" #include "findprog.h" #include "unistd-safer.h" #include "wait-process.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) /* Choice of implementation for native Windows. - Define to 0 to use the posix_spawn facility (modules 'posix_spawn' and 'posix_spawnp'), that is based on the module 'windows-spawn'. - Define to 1 to use the older code, that uses the module 'windows-spawn' directly. You can set this macro from a Makefile or at configure time, from the CPPFLAGS. */ #ifndef SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN # define SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN 0 #endif #if (defined _WIN32 && !defined __CYGWIN__) && SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN /* Native Windows API. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include <process.h> # include "windows-spawn.h" #elif defined __KLIBC__ /* OS/2 kLIBC API. */ # include <process.h> # include "os2-spawn.h" #else /* Unix API. */ # include <spawn.h> #endif #ifdef EINTR /* EINTR handling for close(). These functions can return -1/EINTR even though we don't have any signal handlers set up, namely when we get interrupted via SIGSTOP. */ static int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #undef close /* avoid warning related to gnulib module unistd */ #define close nonintr_close #if (defined _WIN32 && !defined __CYGWIN__) && SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN static int nonintr_open (const char *pathname, int oflag, mode_t mode) { int retval; do retval = open (pathname, oflag, mode); while (retval < 0 && errno == EINTR); return retval; } # undef open /* avoid warning on VMS */ # define open nonintr_open #endif #endif /* Open a pipe connected to a child process. * * write system read * parent -> fd[1] -> STDIN_FILENO -> child if pipe_stdin * parent <- fd[0] <- STDOUT_FILENO <- child if pipe_stdout * read system write * * At least one of pipe_stdin, pipe_stdout must be true. * pipe_stdin and prog_stdin together determine the child's standard input. * pipe_stdout and prog_stdout together determine the child's standard output. * If pipe_stdin is true, prog_stdin is ignored. * If pipe_stdout is true, prog_stdout is ignored. */ static pid_t create_pipe (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool pipe_stdin, bool pipe_stdout, const char *prog_stdin, const char *prog_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int fd[2]) { int saved_errno; char *prog_path_to_free = NULL; if (directory != NULL) { /* If a change of directory is requested, make sure PROG_PATH is absolute before we do so. This is needed because - posix_spawn and posix_spawnp are required to resolve a relative PROG_PATH *after* changing the directory. See <https://www.austingroupbugs.net/view.php?id=1208>: "if this pathname does not start with a <slash> it shall be interpreted relative to the working directory of the child process _after_ all file_actions have been performed." But this would be a surprising application behaviour, possibly even security relevant. - For the Windows CreateProcess() function, it is unspecified whether a relative file name is interpreted to the parent's current directory or to the specified directory. See <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { const char *resolved_prog = find_in_given_path (prog_path, getenv ("PATH"), NULL, false); if (resolved_prog == NULL) goto fail_with_errno; if (resolved_prog != prog_path) prog_path_to_free = (char *) resolved_prog; prog_path = resolved_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { char *absolute_prog = canonicalize_filename_mode (prog_path, CAN_MISSING | CAN_NOLINKS); if (absolute_prog == NULL) { free (prog_path_to_free); goto fail_with_errno; } free (prog_path_to_free); prog_path_to_free = absolute_prog; prog_path = absolute_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) abort (); } } } #if ((defined _WIN32 && !defined __CYGWIN__) && SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN) || defined __KLIBC__ /* Native Windows API. This uses _pipe(), dup2(), and _spawnv(). It could also be implemented using the low-level functions CreatePipe(), DuplicateHandle(), CreateProcess() and _open_osfhandle(); see the GNU make and GNU clisp and cvs source code. */ char *argv_mem_to_free; int ifd[2]; int ofd[2]; int child; int nulloutfd; int stdinfd; int stdoutfd; const char **argv = prepare_spawn (prog_argv, &argv_mem_to_free); if (argv == NULL) xalloc_die (); if (pipe_stdout) if (pipe2_safer (ifd, O_BINARY | O_CLOEXEC) < 0) error (EXIT_FAILURE, errno, _("cannot create pipe")); if (pipe_stdin) if (pipe2_safer (ofd, O_BINARY | O_CLOEXEC) < 0) error (EXIT_FAILURE, errno, _("cannot create pipe")); /* Data flow diagram: * * write system read * parent -> ofd[1] -> ofd[0] -> child if pipe_stdin * parent <- ifd[0] <- ifd[1] <- child if pipe_stdout * read system write * */ child = -1; # if (defined _WIN32 && !defined __CYGWIN__) && SPAWN_PIPE_IMPL_AVOID_POSIX_SPAWN bool must_close_ifd1 = pipe_stdout; bool must_close_ofd0 = pipe_stdin; /* Create standard file handles of child process. */ HANDLE stdin_handle = INVALID_HANDLE_VALUE; HANDLE stdout_handle = INVALID_HANDLE_VALUE; nulloutfd = -1; stdinfd = -1; stdoutfd = -1; if ((!null_stderr || (nulloutfd = open ("NUL", O_RDWR, 0)) >= 0) && (pipe_stdin || prog_stdin == NULL || (stdinfd = open (prog_stdin, O_RDONLY, 0)) >= 0) && (pipe_stdout || prog_stdout == NULL || (stdoutfd = open (prog_stdout, O_WRONLY, 0)) >= 0)) /* The child process doesn't inherit ifd[0], ifd[1], ofd[0], ofd[1], but it inherits the three STD*_FILENO for which we pass the handles. */ /* Pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, processes have two environments, one in the "environment block" of the process and managed through SetEnvironmentVariable(), and one inside the process, in the location retrieved by the 'environ' macro. If we were to pass NULL, the child process would inherit a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ { stdin_handle = (HANDLE) _get_osfhandle (pipe_stdin ? ofd[0] : prog_stdin == NULL ? STDIN_FILENO : stdinfd); if (pipe_stdin) { HANDLE curr_process = GetCurrentProcess (); HANDLE duplicate; if (!DuplicateHandle (curr_process, stdin_handle, curr_process, &duplicate, 0, TRUE, DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ goto failed; } must_close_ofd0 = false; close (ofd[0]); /* implies CloseHandle (stdin_handle); */ stdin_handle = duplicate; } stdout_handle = (HANDLE) _get_osfhandle (pipe_stdout ? ifd[1] : prog_stdout == NULL ? STDOUT_FILENO : stdoutfd); if (pipe_stdout) { HANDLE curr_process = GetCurrentProcess (); HANDLE duplicate; if (!DuplicateHandle (curr_process, stdout_handle, curr_process, &duplicate, 0, TRUE, DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ goto failed; } must_close_ifd1 = false; close (ifd[1]); /* implies CloseHandle (stdout_handle); */ stdout_handle = duplicate; } HANDLE stderr_handle = (HANDLE) _get_osfhandle (null_stderr ? nulloutfd : STDERR_FILENO); child = spawnpvech (P_NOWAIT, prog_path, argv + 1, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); # if 0 /* Executing arbitrary files as shell scripts is unsecure. */ if (child == -1 && errno == ENOEXEC) { /* prog is not a native executable. Try to execute it as a shell script. Note that prepare_spawn() has already prepended a hidden element "sh.exe" to argv. */ argv[1] = prog_path; child = spawnpvech (P_NOWAIT, argv[0], argv, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); } # endif } failed: if (child == -1) saved_errno = errno; if (stdinfd >= 0) close (stdinfd); if (stdoutfd >= 0) close (stdoutfd); if (nulloutfd >= 0) close (nulloutfd); if (pipe_stdin) { if (must_close_ofd0) close (ofd[0]); else if (stdin_handle != INVALID_HANDLE_VALUE) CloseHandle (stdin_handle); } if (pipe_stdout) { if (must_close_ifd1) close (ifd[1]); else if (stdout_handle != INVALID_HANDLE_VALUE) CloseHandle (stdout_handle); } # else /* __KLIBC__ */ if (!(directory == NULL || strcmp (directory, ".") == 0)) { /* A directory argument is not supported in this implementation. */ saved_errno = EINVAL; goto fail_with_saved_errno; } int orig_stdin; int orig_stdout; int orig_stderr; /* Save standard file handles of parent process. */ if (pipe_stdin || prog_stdin != NULL) orig_stdin = dup_safer_noinherit (STDIN_FILENO); if (pipe_stdout || prog_stdout != NULL) orig_stdout = dup_safer_noinherit (STDOUT_FILENO); if (null_stderr) orig_stderr = dup_safer_noinherit (STDERR_FILENO); /* Create standard file handles of child process. */ nulloutfd = -1; stdinfd = -1; stdoutfd = -1; if ((!pipe_stdin || dup2 (ofd[0], STDIN_FILENO) >= 0) && (!pipe_stdout || dup2 (ifd[1], STDOUT_FILENO) >= 0) && (!null_stderr || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0 && (nulloutfd == STDERR_FILENO || (dup2 (nulloutfd, STDERR_FILENO) >= 0 && close (nulloutfd) >= 0)))) && (pipe_stdin || prog_stdin == NULL || ((stdinfd = open (prog_stdin, O_RDONLY, 0)) >= 0 && (stdinfd == STDIN_FILENO || (dup2 (stdinfd, STDIN_FILENO) >= 0 && close (stdinfd) >= 0)))) && (pipe_stdout || prog_stdout == NULL || ((stdoutfd = open (prog_stdout, O_WRONLY, 0)) >= 0 && (stdoutfd == STDOUT_FILENO || (dup2 (stdoutfd, STDOUT_FILENO) >= 0 && close (stdoutfd) >= 0))))) /* The child process doesn't inherit ifd[0], ifd[1], ofd[0], ofd[1], but it inherits all open()ed or dup2()ed file handles (which is what we want in the case of STD*_FILENO). */ { child = _spawnvpe (P_NOWAIT, prog_path, argv + 1, (const char **) environ); # if 0 /* Executing arbitrary files as shell scripts is unsecure. */ if (child == -1 && errno == ENOEXEC) { /* prog is not a native executable. Try to execute it as a shell script. Note that prepare_spawn() has already prepended a hidden element "sh.exe" to argv. */ child = _spawnvpe (P_NOWAIT, argv[0], argv, (const char **) environ); } # endif } if (child == -1) saved_errno = errno; if (stdinfd >= 0) close (stdinfd); if (stdoutfd >= 0) close (stdoutfd); if (nulloutfd >= 0) close (nulloutfd); /* Restore standard file handles of parent process. */ if (null_stderr) undup_safer_noinherit (orig_stderr, STDERR_FILENO); if (pipe_stdout || prog_stdout != NULL) undup_safer_noinherit (orig_stdout, STDOUT_FILENO); if (pipe_stdin || prog_stdin != NULL) undup_safer_noinherit (orig_stdin, STDIN_FILENO); if (pipe_stdin) close (ofd[0]); if (pipe_stdout) close (ifd[1]); # endif free (argv); free (argv_mem_to_free); free (prog_path_to_free); if (child == -1) { if (pipe_stdout) close (ifd[0]); if (pipe_stdin) close (ofd[1]); goto fail_with_saved_errno; } if (pipe_stdout) fd[0] = ifd[0]; if (pipe_stdin) fd[1] = ofd[1]; return child; #else /* Unix API. */ int ifd[2]; int ofd[2]; sigset_t blocked_signals; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; if (pipe_stdout) if (pipe_safer (ifd) < 0) error (EXIT_FAILURE, errno, _("cannot create pipe")); if (pipe_stdin) if (pipe_safer (ofd) < 0) error (EXIT_FAILURE, errno, _("cannot create pipe")); /* Data flow diagram: * * write system read * parent -> ofd[1] -> ofd[0] -> child if pipe_stdin * parent <- ifd[0] <- ifd[1] <- child if pipe_stdout * read system write * */ if (slave_process) { sigprocmask (SIG_SETMASK, NULL, &blocked_signals); block_fatal_signals (); } actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (pipe_stdin && (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0) || (pipe_stdout && (err = posix_spawn_file_actions_adddup2 (&actions, ifd[1], STDOUT_FILENO)) != 0) || (pipe_stdin && (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0) || (pipe_stdout && (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) != 0) || (pipe_stdin && (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0) || (pipe_stdout && (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) != 0) || (null_stderr && (err = posix_spawn_file_actions_addopen (&actions, STDERR_FILENO, "/dev/null", O_RDWR, 0)) != 0) || (!pipe_stdin && prog_stdin != NULL && (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, prog_stdin, O_RDONLY, 0)) != 0) || (!pipe_stdout && prog_stdout != NULL && (err = posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, prog_stdout, O_WRONLY, 0)) != 0) || (directory != NULL && (err = posix_spawn_file_actions_addchdir (&actions, directory))) || (slave_process && ((err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, # if defined _WIN32 && !defined __CYGWIN__ (err = posix_spawnattr_setpgroup (&attrs, 0)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETPGROUP)) != 0 # else (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0 # endif ) ) ) || (err = (directory != NULL ? posix_spawn (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ) : posix_spawnp (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ))) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) unblock_fatal_signals (); if (pipe_stdout) { close (ifd[0]); close (ifd[1]); } if (pipe_stdin) { close (ofd[0]); close (ofd[1]); } free (prog_path_to_free); saved_errno = err; goto fail_with_saved_errno; } posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) { register_slave_subprocess (child); unblock_fatal_signals (); } if (pipe_stdin) close (ofd[0]); if (pipe_stdout) close (ifd[1]); free (prog_path_to_free); if (pipe_stdout) fd[0] = ifd[0]; if (pipe_stdin) fd[1] = ofd[1]; return child; #endif fail_with_errno: saved_errno = errno; fail_with_saved_errno: if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, saved_errno, _("%s subprocess failed"), progname); errno = saved_errno; return -1; } /* Open a bidirectional pipe. * * write system read * parent -> fd[1] -> STDIN_FILENO -> child * parent <- fd[0] <- STDOUT_FILENO <- child * read system write * */ pid_t create_pipe_bidi (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool null_stderr, bool slave_process, bool exit_on_error, int fd[2]) { pid_t result = create_pipe (progname, prog_path, prog_argv, directory, true, true, NULL, NULL, null_stderr, slave_process, exit_on_error, fd); return result; } /* Open a pipe for input from a child process. * The child's stdin comes from a file. * * read system write * parent <- fd[0] <- STDOUT_FILENO <- child * */ pid_t create_pipe_in (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, const char *prog_stdin, bool null_stderr, bool slave_process, bool exit_on_error, int fd[1]) { int iofd[2]; pid_t result = create_pipe (progname, prog_path, prog_argv, directory, false, true, prog_stdin, NULL, null_stderr, slave_process, exit_on_error, iofd); if (result != -1) fd[0] = iofd[0]; return result; } /* Open a pipe for output to a child process. * The child's stdout goes to a file. * * write system read * parent -> fd[0] -> STDIN_FILENO -> child * */ pid_t create_pipe_out (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, const char *prog_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int fd[1]) { int iofd[2]; pid_t result = create_pipe (progname, prog_path, prog_argv, directory, true, false, NULL, prog_stdout, null_stderr, slave_process, exit_on_error, iofd); if (result != -1) fd[0] = iofd[1]; return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn-pipe.h������������������������������������������������������������0000664�0000000�0000000�00000016245�14110572173�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of subprocesses, communicating via pipes. Copyright (C) 2001-2003, 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _SPAWN_PIPE_H #define _SPAWN_PIPE_H /* Get pid_t. */ #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* All these functions create a subprocess and don't wait for its termination. They return the process id of the subprocess. They also return in fd[] one or two file descriptors for communication with the subprocess. If the subprocess creation fails: if exit_on_error is true, the main process exits with an error message; otherwise, an error message is given if null_stderr is false, then -1 is returned, with errno set, and fd[] remain uninitialized. After finishing communication, the caller should call wait_subprocess() to get rid of the subprocess in the process table. progname is the name of the program to be executed by the subprocess, used for error messages. prog_path is the file name of the program to be executed by the subprocess. If it contains no slashes, a search is conducted in $PATH. An operating system dependent suffix is added, if necessary. prog_argv is the array of strings that the subprocess shall receive in argv[]. It is a NULL-terminated array. prog_argv[0] should normally be identical to prog_path. If directory is not NULL, the subprocess is started in that directory. If prog_path is a relative file name, it resolved before changing to that directory. The current directory of the current process remains unchanged. If slave_process is true, the child process will be terminated when its creator receives a catchable fatal signal or exits normally. If slave_process is false, the child process will continue running in this case, until it is lucky enough to attempt to communicate with its creator and thus get a SIGPIPE signal. If exit_on_error is false, a child process id of -1 should be treated the same way as a subprocess which accepts no input, produces no output and terminates with exit code 127. Why? Some errors during posix_spawnp() cause the function posix_spawnp() to return an error code; some other errors cause the subprocess to exit with return code 127. It is implementation dependent which error is reported which way. The caller must treat both cases as equivalent. It is recommended that no signal is blocked or ignored (i.e. have a signal handler with value SIG_IGN) while any of these functions is called. The reason is that child processes inherit the mask of blocked signals from their parent (both through posix_spawn() and fork()/exec()); likewise, signals ignored in the parent are also ignored in the child (except possibly for SIGCHLD). And POSIX:2001 says [in the description of exec()]: "it should be noted that many existing applications wrongly assume that they start with certain signals set to the default action and/or unblocked. In particular, applications written with a simpler signal model that does not include blocking of signals, such as the one in the ISO C standard, may not behave properly if invoked with some signals blocked. Therefore, it is best not to block or ignore signals across execs without explicit reason to do so, and especially not to block signals across execs of arbitrary (not closely co-operating) programs." */ /* Open a pipe for output to a child process. * The child's stdout goes to a file. * * write system read * parent -> fd[0] -> STDIN_FILENO -> child * * Note: When writing to a child process, it is useful to ignore the SIGPIPE * signal and the EPIPE error code. */ extern pid_t create_pipe_out (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, const char *prog_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int fd[1]); /* Open a pipe for input from a child process. * The child's stdin comes from a file. * * read system write * parent <- fd[0] <- STDOUT_FILENO <- child * */ extern pid_t create_pipe_in (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, const char *prog_stdin, bool null_stderr, bool slave_process, bool exit_on_error, int fd[1]); /* Open a bidirectional pipe. * * write system read * parent -> fd[1] -> STDIN_FILENO -> child * parent <- fd[0] <- STDOUT_FILENO <- child * read system write * * Note: When writing to a child process, it is useful to ignore the SIGPIPE * signal and the EPIPE error code. * * Note: The parent process must be careful to avoid deadlock. * 1) If you write more than PIPE_MAX bytes or, more generally, if you write * more bytes than the subprocess can handle at once, the subprocess * may write its data and wait on you to read it, but you are currently * busy writing. * 2) When you don't know ahead of time how many bytes the subprocess * will produce, the usual technique of calling read (fd, buf, BUFSIZ) * with a fixed BUFSIZ will, on Linux 2.2.17 and on BSD systems, cause * the read() call to block until *all* of the buffer has been filled. * But the subprocess cannot produce more data until you gave it more * input. But you are currently busy reading from it. */ extern pid_t create_pipe_bidi (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool null_stderr, bool slave_process, bool exit_on_error, int fd[2]); /* The name of the "always silent" device. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # define DEV_NULL "NUL" #else /* Unix API. */ # define DEV_NULL "/dev/null" #endif #ifdef __cplusplus } #endif #endif /* _SPAWN_PIPE_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn.c�����������������������������������������������������������������0000664�0000000�0000000�00000002521�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int posix_spawn (pid_t *pid, const char *path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]) { return __spawni (pid, path, file_actions, attrp, (const char * const *) argv, (const char * const *) envp, 0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn.in.h��������������������������������������������������������������0000664�0000000�0000000�00000120142�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for POSIX spawn interface. Copyright (C) 2000, 2003-2004, 2008-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_SPAWN_H /* Special invocation convention: On OS/2 kLIBC, <spawn.h> includes <signal.h>. Then <signal.h> -> <pthread.h> -> <sched.h> -> <spawn.h> are included by GNULIB. In this situation, struct sched_param is not yet defined. */ #@INCLUDE_NEXT@ @NEXT_SPAWN_H@ #else #ifndef _@GUARD_PREFIX@_SPAWN_H /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SPAWN_H@ # define _GL_ALREADY_INCLUDING_SPAWN_H # @INCLUDE_NEXT@ @NEXT_SPAWN_H@ # define _GL_ALREADY_INCLUDING_SPAWN_H #endif #ifndef _@GUARD_PREFIX@_SPAWN_H #define _@GUARD_PREFIX@_SPAWN_H /* Get definitions of 'struct sched_param' and 'sigset_t'. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <sched.h> # include <signal.h> #endif #include <sys/types.h> #ifndef __THROW # define __THROW #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # 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. */ /* Data structure to contain attributes for thread creation. */ #if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@) # define posix_spawnattr_t rpl_posix_spawnattr_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawnattr_t typedef struct { short int _flags; pid_t _pgrp; sigset_t _sd; sigset_t _ss; struct sched_param _sp; int _policy; int __pad[16]; } posix_spawnattr_t; # define GNULIB_defined_posix_spawnattr_t 1 # endif #endif /* Data structure to contain information about the actions to be performed in the new process with respect to file descriptors. */ #if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && !@HAVE_POSIX_SPAWN@) # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawn_file_actions_t typedef struct { int _allocated; int _used; struct __spawn_action *_actions; int __pad[16]; } posix_spawn_file_actions_t; # define GNULIB_defined_posix_spawn_file_actions_t 1 # endif #endif /* Flags to be set in the 'posix_spawnattr_t'. */ #if @HAVE_POSIX_SPAWN@ /* Use the values from the system, but provide the missing ones. */ # ifndef POSIX_SPAWN_SETSCHEDPARAM # define POSIX_SPAWN_SETSCHEDPARAM 0 # endif # ifndef POSIX_SPAWN_SETSCHEDULER # define POSIX_SPAWN_SETSCHEDULER 0 # endif #else # if @REPLACE_POSIX_SPAWN@ /* Use the values from the system, for better compatibility. */ /* But this implementation does not support AIX extensions. */ # undef POSIX_SPAWN_FORK_HANDLERS # else # define POSIX_SPAWN_RESETIDS 0x01 # define POSIX_SPAWN_SETPGROUP 0x02 # define POSIX_SPAWN_SETSIGDEF 0x04 # define POSIX_SPAWN_SETSIGMASK 0x08 # define POSIX_SPAWN_SETSCHEDPARAM 0x10 # define POSIX_SPAWN_SETSCHEDULER 0x20 # endif #endif /* A GNU extension. Use the next free bit position. */ #ifndef POSIX_SPAWN_USEVFORK # define POSIX_SPAWN_USEVFORK \ ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \ | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \ | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \ | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \ | POSIX_SPAWN_SETSCHEDPARAM \ | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \ | POSIX_SPAWN_SETSCHEDULER \ | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \ + 1) #endif #if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER) & POSIX_SPAWN_USEVFORK) == 0) ? 1 : -1]; # define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1 #endif #if @GNULIB_POSIX_SPAWN@ /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. This function is a possible cancellation points and therefore not marked with __THROW. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn rpl_posix_spawn # endif _GL_FUNCDECL_RPL (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_]) _GL_ARG_NONNULL ((2, 5, 6))); _GL_CXXALIAS_RPL (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_])); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_]) _GL_ARG_NONNULL ((2, 5, 6))); # endif _GL_CXXALIAS_SYS (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_])); # endif _GL_CXXALIASWARN (posix_spawn); #elif defined GNULIB_POSIXCHECK # undef posix_spawn # if HAVE_RAW_DECL_POSIX_SPAWN _GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - " "use gnulib module posix_spawn for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNP@ /* Similar to 'posix_spawn' but search for FILE in the PATH. This function is a possible cancellation points and therefore not marked with __THROW. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnp rpl_posix_spawnp # endif _GL_FUNCDECL_RPL (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[]) _GL_ARG_NONNULL ((2, 5, 6))); _GL_CXXALIAS_RPL (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[])); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[]) _GL_ARG_NONNULL ((2, 5, 6))); # endif _GL_CXXALIAS_SYS (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[])); # endif _GL_CXXALIASWARN (posix_spawnp); #elif defined GNULIB_POSIXCHECK # undef posix_spawnp # if HAVE_RAW_DECL_POSIX_SPAWNP _GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - " "use gnulib module posix_spawnp for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_INIT@ /* Initialize data structure with attributes for 'spawn' to default values. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_init rpl_posix_spawnattr_init # endif _GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); # endif _GL_CXXALIASWARN (posix_spawnattr_init); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_init # if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT _GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - " "use gnulib module posix_spawnattr_init for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_DESTROY@ /* Free resources associated with ATTR. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_destroy rpl_posix_spawnattr_destroy # endif _GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); # endif _GL_CXXALIASWARN (posix_spawnattr_destroy); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_destroy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY _GL_WARN_ON_USE (posix_spawnattr_destroy, "posix_spawnattr_destroy is unportable - " "use gnulib module posix_spawnattr_destroy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ /* Store signal mask for signals with default handling from ATTR in SIGDEFAULT. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault # endif _GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault)); # endif _GL_CXXALIASWARN (posix_spawnattr_getsigdefault); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getsigdefault # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT _GL_WARN_ON_USE (posix_spawnattr_getsigdefault, "posix_spawnattr_getsigdefault is unportable - " "use gnulib module posix_spawnattr_getsigdefault for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault # endif _GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault)); # endif _GL_CXXALIASWARN (posix_spawnattr_setsigdefault); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setsigdefault # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT _GL_WARN_ON_USE (posix_spawnattr_setsigdefault, "posix_spawnattr_setsigdefault is unportable - " "use gnulib module posix_spawnattr_setsigdefault for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ /* Store signal mask for the new process from ATTR in SIGMASK. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask # endif _GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask)); # endif _GL_CXXALIASWARN (posix_spawnattr_getsigmask); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getsigmask # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK _GL_WARN_ON_USE (posix_spawnattr_getsigmask, "posix_spawnattr_getsigmask is unportable - " "use gnulib module posix_spawnattr_getsigmask for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ /* Set signal mask for the new process in ATTR to SIGMASK. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask # endif _GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask)); # endif _GL_CXXALIASWARN (posix_spawnattr_setsigmask); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setsigmask # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK _GL_WARN_ON_USE (posix_spawnattr_setsigmask, "posix_spawnattr_setsigmask is unportable - " "use gnulib module posix_spawnattr_setsigmask for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ /* Get flag word from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getflags rpl_posix_spawnattr_getflags # endif _GL_FUNCDECL_RPL (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags)); # endif _GL_CXXALIASWARN (posix_spawnattr_getflags); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getflags # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS _GL_WARN_ON_USE (posix_spawnattr_getflags, "posix_spawnattr_getflags is unportable - " "use gnulib module posix_spawnattr_getflags for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ /* Store flags in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setflags rpl_posix_spawnattr_setflags # endif _GL_FUNCDECL_RPL (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags)); # endif _GL_CXXALIASWARN (posix_spawnattr_setflags); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setflags # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS _GL_WARN_ON_USE (posix_spawnattr_setflags, "posix_spawnattr_setflags is unportable - " "use gnulib module posix_spawnattr_setflags for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ /* Get process group ID from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup # endif _GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup)); # endif _GL_CXXALIASWARN (posix_spawnattr_getpgroup); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getpgroup # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP _GL_WARN_ON_USE (posix_spawnattr_getpgroup, "posix_spawnattr_getpgroup is unportable - " "use gnulib module posix_spawnattr_getpgroup for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ /* Store process group ID in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup # endif _GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup)); # endif _GL_CXXALIASWARN (posix_spawnattr_setpgroup); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setpgroup # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP _GL_WARN_ON_USE (posix_spawnattr_setpgroup, "posix_spawnattr_setpgroup is unportable - " "use gnulib module posix_spawnattr_setpgroup for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ /* Get scheduling policy from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy # endif _GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 _GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_getschedpolicy); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getschedpolicy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY _GL_WARN_ON_USE (posix_spawnattr_getschedpolicy, "posix_spawnattr_getschedpolicy is unportable - " "use gnulib module posix_spawnattr_getschedpolicy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ /* Store scheduling policy in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy # endif _GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 _GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_setschedpolicy); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setschedpolicy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY _GL_WARN_ON_USE (posix_spawnattr_setschedpolicy, "posix_spawnattr_setschedpolicy is unportable - " "use gnulib module posix_spawnattr_setschedpolicy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ /* Get scheduling parameters from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam # endif _GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 _GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_getschedparam); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getschedparam # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM _GL_WARN_ON_USE (posix_spawnattr_getschedparam, "posix_spawnattr_getschedparam is unportable - " "use gnulib module posix_spawnattr_getschedparam for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ /* Store scheduling parameters in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam # endif _GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 _GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_setschedparam); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setschedparam # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM _GL_WARN_ON_USE (posix_spawnattr_setschedparam, "posix_spawnattr_setschedparam is unportable - " "use gnulib module posix_spawnattr_setschedparam for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ /* Initialize data structure for file attribute for 'spawn' call. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_init); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_init # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT _GL_WARN_ON_USE (posix_spawn_file_actions_init, "posix_spawn_file_actions_init is unportable - " "use gnulib module posix_spawn_file_actions_init for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ /* Free resources associated with FILE-ACTIONS. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_destroy); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_destroy # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY _GL_WARN_ON_USE (posix_spawn_file_actions_destroy, "posix_spawn_file_actions_destroy is unportable - " "use gnulib module posix_spawn_file_actions_destroy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'open' for the given file during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode) __THROW _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode) __THROW _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_addopen); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addopen # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN _GL_WARN_ON_USE (posix_spawn_file_actions_addopen, "posix_spawn_file_actions_addopen is unportable - " "use gnulib module posix_spawn_file_actions_addopen for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'close' for the given file descriptor during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_addclose); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addclose # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE _GL_WARN_ON_USE (posix_spawn_file_actions_addclose, "posix_spawn_file_actions_addclose is unportable - " "use gnulib module posix_spawn_file_actions_addclose for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'dup2' for the given file descriptors during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_adddup2); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_adddup2 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 _GL_WARN_ON_USE (posix_spawn_file_actions_adddup2, "posix_spawn_file_actions_adddup2 is unportable - " "use gnulib module posix_spawn_file_actions_adddup2 for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'chdir' to the given directory during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addchdir rpl_posix_spawn_file_actions_addchdir # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path)); # else # if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_addchdir); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addchdir # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR _GL_WARN_ON_USE (posix_spawn_file_actions_addchdir, "posix_spawn_file_actions_addchdir is unportable - " "use gnulib module posix_spawn_file_actions_addchdir for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'fchdir' to the given directory during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addfchdir rpl_posix_spawn_file_actions_addfchdir # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd)); # else # if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_addfchdir); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addfchdir # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR _GL_WARN_ON_USE (posix_spawn_file_actions_addfchdir, "posix_spawn_file_actions_addfchdir is unportable - " "use gnulib module posix_spawn_file_actions_addfchdir for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SPAWN_H */ #endif /* _@GUARD_PREFIX@_SPAWN_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_addchdir.c������������������������������������������������0000664�0000000�0000000�00000004107�14110572173�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2018-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'chdir' to the given directory during the 'spawn' call. */ int posix_spawn_file_actions_addchdir (posix_spawn_file_actions_t *file_actions, const char *path) #undef posix_spawn_file_actions_addchdir { #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addchdir_np (file_actions, path); #else { /* Copy PATH, because the caller may free it before calling posix_spawn() or posix_spawnp(). */ char *path_copy = strdup (path); if (path_copy == NULL) return ENOMEM; /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) { /* This can only mean we ran out of memory. */ free (path_copy); return ENOMEM; } { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_chdir; rec->action.chdir_action.path = path_copy; /* Account for the new entry. */ ++file_actions->_used; return 0; } } #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_addclose.c������������������������������������������������0000664�0000000�0000000�00000004015�14110572173�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <unistd.h> #if !_LIBC # define __sysconf(open_max) getdtablesize () #endif #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'close' for the given file descriptor during the 'spawn' call. */ int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions, int fd) #undef posix_spawn_file_actions_addclose { int maxfd = __sysconf (_SC_OPEN_MAX); /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addclose (file_actions, fd); #else /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) /* This can only mean we ran out of memory. */ return ENOMEM; { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_close; rec->action.open_action.fd = fd; /* Account for the new entry. */ ++file_actions->_used; return 0; } #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_adddup2.c�������������������������������������������������0000664�0000000�0000000�00000004144�14110572173�0021452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <unistd.h> #if !_LIBC # define __sysconf(open_max) getdtablesize () #endif #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'dup2' for the given file descriptors during the 'spawn' call. */ int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions, int fd, int newfd) #undef posix_spawn_file_actions_adddup2 { int maxfd = __sysconf (_SC_OPEN_MAX); /* Test for the validity of the file descriptor. */ if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd) return EBADF; #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_adddup2 (file_actions, fd, newfd); #else /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) /* This can only mean we ran out of memory. */ return ENOMEM; { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_dup2; rec->action.dup2_action.fd = fd; rec->action.dup2_action.newfd = newfd; /* Account for the new entry. */ ++file_actions->_used; return 0; } #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_addfchdir.c�����������������������������������������������0000664�0000000�0000000�00000003740�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2018-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <unistd.h> #if !_LIBC # define __sysconf(open_max) getdtablesize () #endif #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'fchdir' to the given directory during the 'spawn' call. */ int posix_spawn_file_actions_addfchdir (posix_spawn_file_actions_t *file_actions, int fd) #undef posix_spawn_file_actions_addfchdir { int maxfd = __sysconf (_SC_OPEN_MAX); /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addfchdir_np (file_actions, fd); #else /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) /* This can only mean we ran out of memory. */ return ENOMEM; { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_fchdir; rec->action.fchdir_action.fd = fd; /* Account for the new entry. */ ++file_actions->_used; return 0; } #endif } ��������������������������������gnulib-20210822~d383792/lib/spawn_faction_addopen.c�������������������������������������������������0000664�0000000�0000000�00000005041�14110572173�0021536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if !_LIBC # define __sysconf(open_max) getdtablesize () #endif #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'open' for the given file during the 'spawn' call. */ int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, int fd, const char *path, int oflag, mode_t mode) #undef posix_spawn_file_actions_addopen { int maxfd = __sysconf (_SC_OPEN_MAX); /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addopen (file_actions, fd, path, oflag, mode); #else { /* Copy PATH, because the caller may free it before calling posix_spawn() or posix_spawnp(). */ char *path_copy = strdup (path); if (path_copy == NULL) return ENOMEM; /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) { /* This can only mean we ran out of memory. */ free (path_copy); return ENOMEM; } { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_open; rec->action.open_action.fd = fd; rec->action.open_action.path = path_copy; rec->action.open_action.oflag = oflag; rec->action.open_action.mode = mode; /* Account for the new entry. */ ++file_actions->_used; return 0; } } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_destroy.c�������������������������������������������������0000664�0000000�0000000�00000003336�14110572173�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <stdlib.h> #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions) #undef posix_spawn_file_actions_destroy { #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_destroy (file_actions); #else int i; /* Free the paths in the open actions. */ for (i = 0; i < file_actions->_used; ++i) { struct __spawn_action *sa = &file_actions->_actions[i]; switch (sa->tag) { case spawn_do_open: free (sa->action.open_action.path); break; case spawn_do_chdir: free (sa->action.chdir_action.path); break; default: /* No cleanup required. */ break; } } /* Free the array of actions. */ free (file_actions->_actions); return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_faction_init.c����������������������������������������������������0000664�0000000�0000000�00000003314�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "spawn_int.h" /* Function used to increase the size of the allocated array. This function is called from the 'add'-functions. */ int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions) { int newalloc = file_actions->_allocated + 8; void *newmem = realloc (file_actions->_actions, newalloc * sizeof (struct __spawn_action)); if (newmem == NULL) /* Not enough memory. */ return ENOMEM; file_actions->_actions = (struct __spawn_action *) newmem; file_actions->_allocated = newalloc; return 0; } /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions) { /* Simply clear all the elements. */ memset (file_actions, '\0', sizeof (*file_actions)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawn_int.h�������������������������������������������������������������0000664�0000000�0000000�00000003570�14110572173�0017225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2008-2021 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/>. */ #include <sys/types.h> /* Data structure to contain the action information. */ struct __spawn_action { enum { spawn_do_close, spawn_do_dup2, spawn_do_open, spawn_do_chdir, spawn_do_fchdir } tag; union { struct { int fd; } close_action; struct { int fd; int newfd; } dup2_action; struct { int fd; char *path; int oflag; mode_t mode; } open_action; struct { char *path; } chdir_action; struct { int fd; } fchdir_action; } action; }; #if !_LIBC # define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc #endif extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * file_actions); #if !_LIBC # define __spawni gl_posix_spawn_internal #endif extern int __spawni (pid_t *pid, const char *path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const argv[], const char *const envp[], int use_path); ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_destroy.c�����������������������������������������������������0000664�0000000�0000000�00000001766�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawnattr_destroy (posix_spawnattr_t *attr) { /* Nothing to do in the moment. */ return 0; } ����������gnulib-20210822~d383792/lib/spawnattr_getdefault.c��������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Store signal mask for signals with default handling from ATTR in SIGDEFAULT. */ int posix_spawnattr_getsigdefault (const posix_spawnattr_t *attr, sigset_t *sigdefault) { /* Copy the sigset_t data to the user buffer. */ memcpy (sigdefault, &attr->_sd, sizeof (sigset_t)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_getflags.c����������������������������������������������������0000664�0000000�0000000�00000002042�14110572173�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Get flag word from the attribute structure. */ int posix_spawnattr_getflags (const posix_spawnattr_t *attr, short int *flags) { /* Copy the flag word. */ *flags = attr->_flags; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_getpgroup.c���������������������������������������������������0000664�0000000�0000000�00000002056�14110572173�0021333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Get process group ID from the attribute structure. */ int posix_spawnattr_getpgroup (const posix_spawnattr_t *attr, pid_t *pgroup) { /* Copy the process group ID. */ *pgroup = attr->_pgrp; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_getschedparam.c�����������������������������������������������0000664�0000000�0000000�00000002304�14110572173�0022122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> /* Get scheduling parameters from the attribute structure. */ int posix_spawnattr_getschedparam (const posix_spawnattr_t *attr, struct sched_param *schedparam) { /* Do nothing if POSIX_SPAWN_SETSCHEDPARAM is unsupported. */ #if POSIX_SPAWN_SETSCHEDPARAM != 0 /* Copy the scheduling parameters. */ *schedparam = attr->_sp; #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_getschedpolicy.c����������������������������������������������0000664�0000000�0000000�00000002310�14110572173�0022316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Get scheduling policy from the attribute structure. */ int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *attr, int *schedpolicy) { /* Do nothing if POSIX_SPAWN_SETSCHEDULER is unsupported. */ #if POSIX_SPAWN_SETSCHEDULER != 0 /* Copy the scheduling policy. */ *schedpolicy = attr->_policy; #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_getsigmask.c��������������������������������������������������0000664�0000000�0000000�00000002202�14110572173�0021446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Store signal mask for the new process from ATTR in SIGMASK. */ int posix_spawnattr_getsigmask (const posix_spawnattr_t *attr, sigset_t *sigmask) { /* Copy the sigset_t data to the user buffer. */ memcpy (sigmask, &attr->_ss, sizeof (sigset_t)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_init.c��������������������������������������������������������0000664�0000000�0000000�00000002153�14110572173�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawnattr_init (posix_spawnattr_t *attr) { /* All elements have to be initialized to the default values which is generally zero. */ memset (attr, '\0', sizeof (*attr)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setdefault.c��������������������������������������������������0000664�0000000�0000000�00000002233�14110572173�0021454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ int posix_spawnattr_setsigdefault (posix_spawnattr_t *attr, const sigset_t *sigdefault) { /* Copy the sigset_t data to the user buffer. */ memcpy (&attr->_sd, sigdefault, sizeof (sigset_t)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setflags.c����������������������������������������������������0000664�0000000�0000000�00000003222�14110572173�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2004, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <string.h> #define ALL_FLAGS (POSIX_SPAWN_RESETIDS \ | POSIX_SPAWN_SETPGROUP \ | POSIX_SPAWN_SETSIGDEF \ | POSIX_SPAWN_SETSIGMASK \ | POSIX_SPAWN_SETSCHEDPARAM \ | POSIX_SPAWN_SETSCHEDULER \ | POSIX_SPAWN_USEVFORK) /* Store flags in the attribute structure. */ int posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags) { /* Check no invalid bits are set. */ if (flags & ~ALL_FLAGS) return EINVAL; /* Store the flag word. */ attr->_flags = flags; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setpgroup.c���������������������������������������������������0000664�0000000�0000000�00000002047�14110572173�0021347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Store process group ID in the attribute structure. */ int posix_spawnattr_setpgroup (posix_spawnattr_t *attr, pid_t pgroup) { /* Store the process group ID. */ attr->_pgrp = pgroup; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setschedparam.c�����������������������������������������������0000664�0000000�0000000�00000002305�14110572173�0022137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> /* Store scheduling parameters in the attribute structure. */ int posix_spawnattr_setschedparam (posix_spawnattr_t *attr, const struct sched_param *schedparam) { /* Do nothing if POSIX_SPAWN_SETSCHEDPARAM is unsupported. */ #if POSIX_SPAWN_SETSCHEDPARAM != 0 /* Store the scheduling parameters. */ attr->_sp = *schedparam; #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setschedpolicy.c����������������������������������������������0000664�0000000�0000000�00000002411�14110572173�0022334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> /* Store scheduling policy in the attribute structure. */ int posix_spawnattr_setschedpolicy (posix_spawnattr_t *attr, int schedpolicy) { /* Do nothing if POSIX_SPAWN_SETSCHEDULER is unsupported. */ #if POSIX_SPAWN_SETSCHEDULER != 0 if (schedpolicy != SCHED_OTHER && schedpolicy != SCHED_FIFO && schedpolicy != SCHED_RR) return EINVAL; /* Store the policy. */ attr->_policy = schedpolicy; #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnattr_setsigmask.c��������������������������������������������������0000664�0000000�0000000�00000002176�14110572173�0021474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Set signal mask for the new process in ATTR to SIGMASK. */ int posix_spawnattr_setsigmask (posix_spawnattr_t *attr, const sigset_t *sigmask) { /* Copy the sigset_t data to the user buffer. */ memcpy (&attr->_ss, sigmask, sizeof (sigset_t)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawni.c����������������������������������������������������������������0000664�0000000�0000000�00000071575�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Guts of POSIX spawn interface. Generic POSIX.1 version. Copyright (C) 2000-2006, 2008-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" #include <alloca.h> #include <errno.h> #include <fcntl.h> #ifndef O_LARGEFILE # define O_LARGEFILE 0 #endif #if _LIBC || HAVE_PATHS_H # include <paths.h> #else # define _PATH_BSHELL BOURNE_SHELL #endif #include <signal.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if _LIBC # include <not-cancel.h> #else # define close_not_cancel close # define open_not_cancel open #endif #if _LIBC # include <local-setxid.h> #else # if !HAVE_SETEUID # define seteuid(id) setresuid (-1, id, -1) # endif # if !HAVE_SETEGID # define setegid(id) setresgid (-1, id, -1) # endif # define local_seteuid(id) seteuid (id) # define local_setegid(id) setegid (id) #endif #if _LIBC # define alloca __alloca # define execve __execve # define dup2 __dup2 # define fork __fork # define getgid __getgid # define getuid __getuid # define sched_setparam __sched_setparam # define sched_setscheduler __sched_setscheduler # define setpgid __setpgid # define sigaction __sigaction # define sigismember __sigismember # define sigprocmask __sigprocmask # define strchrnul __strchrnul # define vfork __vfork #endif /* The Unix standard contains a long explanation of the way to signal an error after the fork() was successful. Since no new wait status was wanted there is no way to signal an error using one of the available methods. The committee chose to signal an error by a normal program exit with the exit code 127. */ #define SPAWN_ERROR 127 #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <stdbool.h> # include <stdio.h> # include "filename.h" # include "concat-filename.h" # include "findprog.h" # include "malloca.h" # include "windows-spawn.h" /* Don't assume that UNICODE is not defined. */ # undef CreateFile # define CreateFile CreateFileA # undef STARTUPINFO # define STARTUPINFO STARTUPINFOA # undef CreateProcess # define CreateProcess CreateProcessA /* Grows inh_handles->count so that it becomes > newfd. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int grow_inheritable_handles (struct inheritable_handles *inh_handles, int newfd) { if (inh_handles->allocated <= newfd) { size_t new_allocated = 2 * inh_handles->allocated + 1; if (new_allocated <= newfd) new_allocated = newfd + 1; HANDLE *new_handles_array = (HANDLE *) realloc (inh_handles->handles, new_allocated * sizeof (HANDLE)); if (new_handles_array == NULL) { errno = ENOMEM; return -1; } unsigned char *new_flags_array = (unsigned char *) realloc (inh_handles->flags, new_allocated * sizeof (unsigned char)); if (new_flags_array == NULL) { free (new_handles_array); errno = ENOMEM; return -1; } inh_handles->allocated = new_allocated; inh_handles->handles = new_handles_array; inh_handles->flags = new_flags_array; } HANDLE *handles = inh_handles->handles; for (; inh_handles->count <= newfd; inh_handles->count++) handles[inh_handles->count] = INVALID_HANDLE_VALUE; return 0; } /* Reduces inh_handles->count to the minimum needed. */ static void shrink_inheritable_handles (struct inheritable_handles *inh_handles) { HANDLE *handles = inh_handles->handles; while (inh_handles->count > 3 && handles[inh_handles->count - 1] == INVALID_HANDLE_VALUE) inh_handles->count--; } /* Closes all handles in inh_handles. */ static void close_inheritable_handles (struct inheritable_handles *inh_handles) { HANDLE *handles = inh_handles->handles; size_t handles_count = inh_handles->count; unsigned int fd; for (fd = 0; fd < handles_count; fd++) { HANDLE handle = handles[fd]; if (handle != INVALID_HANDLE_VALUE) CloseHandle (handle); } } /* Tests whether a memory region, starting at P and N bytes long, contains only zeroes. */ static bool memiszero (const void *p, size_t n) { const char *cp = p; for (; n > 0; cp++, n--) if (*cp != 0) return 0; return 1; } /* Tests whether *S contains no signals. */ static bool sigisempty (const sigset_t *s) { return memiszero (s, sizeof (sigset_t)); } /* Opens a HANDLE to a file. Upon failure, returns INVALID_HANDLE_VALUE with errno set. */ static HANDLE open_handle (const char *name, int flags, mode_t mode) { /* To ease portability. Like in open.c. */ if (strcmp (name, "/dev/null") == 0) name = "NUL"; /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return INVALID_HANDLE_VALUE; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return INVALID_HANDLE_VALUE; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return INVALID_HANDLE_VALUE; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* For the meaning of the flags, see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/open-wopen> */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE handle = CreateFile (rname, ((flags & (O_WRONLY | O_RDWR)) != 0 ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ), FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, ((flags & O_CREAT) != 0 ? ((flags & O_EXCL) != 0 ? CREATE_NEW : ((flags & O_TRUNC) != 0 ? CREATE_ALWAYS : OPEN_ALWAYS)) : ((flags & O_TRUNC) != 0 ? TRUNCATE_EXISTING : OPEN_EXISTING)), /* FILE_FLAG_BACKUP_SEMANTICS is useful for opening directories, which is out-of-scope here. */ /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ /* FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS */ FILE_ATTRIBUTE_NORMAL | ((flags & O_TEMPORARY) != 0 ? FILE_FLAG_DELETE_ON_CLOSE : 0) | ((flags & O_SEQUENTIAL ) != 0 ? FILE_FLAG_SEQUENTIAL_SCAN : 0) | ((flags & O_RANDOM) != 0 ? FILE_FLAG_RANDOM_ACCESS : 0), NULL); if (handle == INVALID_HANDLE_VALUE) switch (GetLastError ()) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NETPATH: /* rname is such as '\\nonexistentserver\share'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys'. */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return handle; } /* Executes an 'open' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_open (struct inheritable_handles *inh_handles, int newfd, const char *filename, const char *directory, int flags, mode_t mode, HANDLE curr_process) { if (!(newfd >= 0 && newfd < _getmaxstdio ())) { errno = EBADF; return -1; } if (grow_inheritable_handles (inh_handles, newfd) < 0) return -1; if (inh_handles->handles[newfd] != INVALID_HANDLE_VALUE && !CloseHandle (inh_handles->handles[newfd])) { errno = EIO; return -1; } if (filename == NULL) { errno = EINVAL; return -1; } char *filename_to_free = NULL; if (directory != NULL && IS_RELATIVE_FILE_NAME (filename)) { char *real_filename = concatenated_filename (directory, filename, NULL); if (real_filename == NULL) { errno = ENOMEM; return -1; } filename = real_filename; filename_to_free = real_filename; } HANDLE handle = open_handle (filename, flags, mode); if (handle == INVALID_HANDLE_VALUE) { free (filename_to_free); return -1; } free (filename_to_free); /* Duplicate the handle, so that it becomes inheritable. */ if (!DuplicateHandle (curr_process, handle, curr_process, &inh_handles->handles[newfd], 0, TRUE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ return -1; } inh_handles->flags[newfd] = ((flags & O_APPEND) != 0 ? 32 : 0); return 0; } /* Executes a 'dup2' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_dup2 (struct inheritable_handles *inh_handles, int oldfd, int newfd, HANDLE curr_process) { if (!(oldfd >= 0 && oldfd < inh_handles->count && inh_handles->handles[oldfd] != INVALID_HANDLE_VALUE)) { errno = EBADF; return -1; } if (!(newfd >= 0 && newfd < _getmaxstdio ())) { errno = EBADF; return -1; } if (newfd != oldfd) { if (grow_inheritable_handles (inh_handles, newfd) < 0) return -1; if (inh_handles->handles[newfd] != INVALID_HANDLE_VALUE && !CloseHandle (inh_handles->handles[newfd])) { errno = EIO; return -1; } /* Duplicate the handle, so that it a forthcoming do_close action on oldfd has no effect on newfd. */ if (!DuplicateHandle (curr_process, inh_handles->handles[oldfd], curr_process, &inh_handles->handles[newfd], 0, TRUE, DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ return -1; } inh_handles->flags[newfd] = 0; } return 0; } /* Executes a 'close' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_close (struct inheritable_handles *inh_handles, int fd) { if (!(fd >= 0 && fd < inh_handles->count && inh_handles->handles[fd] != INVALID_HANDLE_VALUE)) { errno = EBADF; return -1; } if (!CloseHandle (inh_handles->handles[fd])) { errno = EIO; return -1; } inh_handles->handles[fd] = INVALID_HANDLE_VALUE; return 0; } int __spawni (pid_t *pid, const char *prog_filename, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const prog_argv[], const char *const envp[], int use_path) { /* Validate the arguments. */ if (prog_filename == NULL || (attrp != NULL && ((attrp->_flags & ~POSIX_SPAWN_SETPGROUP) != 0 || attrp->_pgrp != 0 || ! sigisempty (&attrp->_sd) || ! sigisempty (&attrp->_ss) || attrp->_sp.sched_priority != 0 || attrp->_policy != 0))) return EINVAL; /* Process group handling: Native Windows does not have the concept of process group, but it has the concept of a console attached to a process. So, we interpret the three cases as follows: - Flag POSIX_SPAWN_SETPGROUP not set: Means, the child process is in the same process group as the parent process. We interpret this as a request to reuse the same console. - Flag POSIX_SPAWN_SETPGROUP set with attrp->_pgrp == 0: Means the child process starts a process group of its own. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getpgroup.html> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgrp.html> We interpret this as a request to detach from the current console. - Flag POSIX_SPAWN_SETPGROUP set with attrp->_pgrp != 0: Means the child process joins another, existing process group. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getpgroup.html> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgid.html> We don't support this case; it produces error EINVAL above. */ /* <https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags> */ DWORD process_creation_flags = (attrp != NULL && (attrp->_flags & POSIX_SPAWN_SETPGROUP) != 0 ? DETACHED_PROCESS : 0); char *argv_mem_to_free; const char **argv = prepare_spawn (prog_argv, &argv_mem_to_free); if (argv == NULL) return errno; /* errno is set here */ argv++; /* Compose the command. */ char *command = compose_command (argv); if (command == NULL) { free (argv_mem_to_free); return ENOMEM; } /* Copy *ENVP into a contiguous block of memory. */ char *envblock; if (envp == NULL) envblock = NULL; else { envblock = compose_envblock (envp); if (envblock == NULL) { free (command); free (argv_mem_to_free); return ENOMEM; } } /* Set up the array of handles to inherit. Duplicate each handle, so that a spawn_do_close action (below) has no effect on the file descriptors of the current process. Alternatively, we could store, for each handle, a bit that tells whether it is shared with the current process. But this is simpler. */ struct inheritable_handles inh_handles; if (init_inheritable_handles (&inh_handles, true) < 0) goto failed_1; /* Directory in which to execute the new process. */ const char *directory = NULL; /* Execute the file_actions, modifying the inh_handles instead of the file descriptors of the current process. */ if (file_actions != NULL) { HANDLE curr_process = GetCurrentProcess (); int cnt; for (cnt = 0; cnt < file_actions->_used; ++cnt) { struct __spawn_action *action = &file_actions->_actions[cnt]; switch (action->tag) { case spawn_do_close: { int fd = action->action.close_action.fd; if (do_close (&inh_handles, fd) < 0) goto failed_2; } break; case spawn_do_open: { int newfd = action->action.open_action.fd; const char *filename = action->action.open_action.path; int flags = action->action.open_action.oflag; mode_t mode = action->action.open_action.mode; if (do_open (&inh_handles, newfd, filename, directory, flags, mode, curr_process) < 0) goto failed_2; } break; case spawn_do_dup2: { int oldfd = action->action.dup2_action.fd; int newfd = action->action.dup2_action.newfd; if (do_dup2 (&inh_handles, oldfd, newfd, curr_process) < 0) goto failed_2; } break; case spawn_do_chdir: { char *newdir = action->action.chdir_action.path; if (directory != NULL && IS_RELATIVE_FILE_NAME (newdir)) { newdir = concatenated_filename (directory, newdir, NULL); if (newdir == NULL) { errno = ENOMEM; goto failed_2; } } directory = newdir; } break; case spawn_do_fchdir: /* Not supported in this implementation. */ errno = EINVAL; goto failed_2; } } } /* Reduce inh_handles.count to the minimum needed. */ shrink_inheritable_handles (&inh_handles); /* CreateProcess <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ STARTUPINFO sinfo; sinfo.cb = sizeof (STARTUPINFO); sinfo.lpReserved = NULL; sinfo.lpDesktop = NULL; sinfo.lpTitle = NULL; if (compose_handles_block (&inh_handles, &sinfo) < 0) goto failed_2; /* Perform the PATH search now, considering the final DIRECTORY. */ char *resolved_prog_filename_to_free = NULL; { const char *resolved_prog_filename = find_in_given_path (prog_filename, use_path ? getenv ("PATH") : "", directory, false); if (resolved_prog_filename == NULL) goto failed_3; if (resolved_prog_filename != prog_filename) resolved_prog_filename_to_free = (char *) resolved_prog_filename; prog_filename = resolved_prog_filename; } PROCESS_INFORMATION pinfo; if (!CreateProcess (prog_filename, command, NULL, NULL, TRUE, process_creation_flags, envblock, directory, &sinfo, &pinfo)) { DWORD error = GetLastError (); free (resolved_prog_filename_to_free); free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return convert_CreateProcess_error (error); } if (pinfo.hThread) CloseHandle (pinfo.hThread); free (resolved_prog_filename_to_free); free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); if (pid != NULL) *pid = (intptr_t) pinfo.hProcess; return 0; failed_3: { int saved_errno = errno; free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return saved_errno; } failed_2: { int saved_errno = errno; close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return saved_errno; } failed_1: free (envblock); free (command); free (argv_mem_to_free); return errno; } #else /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int __spawni (pid_t *pid, const char *file, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const argv[], const char *const envp[], int use_path) { pid_t new_pid; char *path, *p, *name; size_t len; size_t pathlen; /* Do this once. */ short int flags = attrp == NULL ? 0 : attrp->_flags; /* Avoid gcc warning "variable 'flags' might be clobbered by 'longjmp' or 'vfork'" */ (void) &flags; /* Generate the new process. */ #if HAVE_VFORK if ((flags & POSIX_SPAWN_USEVFORK) != 0 /* If no major work is done, allow using vfork. Note that we might perform the path searching. But this would be done by a call to execvp(), too, and such a call must be OK according to POSIX. */ || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0 && file_actions == NULL)) new_pid = vfork (); else #endif new_pid = fork (); if (new_pid != 0) { if (new_pid < 0) return errno; /* The call was successful. Store the PID if necessary. */ if (pid != NULL) *pid = new_pid; return 0; } /* Set signal mask. */ if ((flags & POSIX_SPAWN_SETSIGMASK) != 0 && sigprocmask (SIG_SETMASK, &attrp->_ss, NULL) != 0) _exit (SPAWN_ERROR); /* Set signal default action. */ if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) { /* We have to iterate over all signals. This could possibly be done better but it requires system specific solutions since the sigset_t data type can be very different on different architectures. */ int sig; struct sigaction sa; memset (&sa, '\0', sizeof (sa)); sa.sa_handler = SIG_DFL; for (sig = 1; sig <= NSIG; ++sig) if (sigismember (&attrp->_sd, sig) != 0 && sigaction (sig, &sa, NULL) != 0) _exit (SPAWN_ERROR); } #if (_LIBC ? defined _POSIX_PRIORITY_SCHEDULING : HAVE_SCHED_SETPARAM && HAVE_SCHED_SETSCHEDULER) /* Set the scheduling algorithm and parameters. */ if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) == POSIX_SPAWN_SETSCHEDPARAM) { if (sched_setparam (0, &attrp->_sp) == -1) _exit (SPAWN_ERROR); } else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) { if (sched_setscheduler (0, attrp->_policy, (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0 ? &attrp->_sp : NULL) == -1) _exit (SPAWN_ERROR); } #endif /* Set the process group ID. */ if ((flags & POSIX_SPAWN_SETPGROUP) != 0 && setpgid (0, attrp->_pgrp) != 0) _exit (SPAWN_ERROR); /* Set the effective user and group IDs. */ if ((flags & POSIX_SPAWN_RESETIDS) != 0 && (local_seteuid (getuid ()) != 0 || local_setegid (getgid ()) != 0)) _exit (SPAWN_ERROR); /* Execute the file actions. */ if (file_actions != NULL) { int cnt; for (cnt = 0; cnt < file_actions->_used; ++cnt) { struct __spawn_action *action = &file_actions->_actions[cnt]; switch (action->tag) { case spawn_do_close: if (close_not_cancel (action->action.close_action.fd) != 0) /* Signal the error. */ _exit (SPAWN_ERROR); break; case spawn_do_open: { int new_fd = open_not_cancel (action->action.open_action.path, action->action.open_action.oflag | O_LARGEFILE, action->action.open_action.mode); if (new_fd == -1) /* The 'open' call failed. */ _exit (SPAWN_ERROR); /* Make sure the desired file descriptor is used. */ if (new_fd != action->action.open_action.fd) { if (dup2 (new_fd, action->action.open_action.fd) != action->action.open_action.fd) /* The 'dup2' call failed. */ _exit (SPAWN_ERROR); if (close_not_cancel (new_fd) != 0) /* The 'close' call failed. */ _exit (SPAWN_ERROR); } } break; case spawn_do_dup2: if (dup2 (action->action.dup2_action.fd, action->action.dup2_action.newfd) != action->action.dup2_action.newfd) /* The 'dup2' call failed. */ _exit (SPAWN_ERROR); break; case spawn_do_chdir: if (chdir (action->action.chdir_action.path) < 0) /* The 'chdir' call failed. */ _exit (SPAWN_ERROR); break; case spawn_do_fchdir: if (fchdir (action->action.fchdir_action.fd) < 0) /* The 'fchdir' call failed. */ _exit (SPAWN_ERROR); break; } } } if (! use_path || strchr (file, '/') != NULL) { /* The FILE parameter is actually a path. */ execve (file, (char * const *) argv, (char * const *) envp); /* Oh, oh. 'execve' returns. This is bad. */ _exit (SPAWN_ERROR); } /* We have to search for FILE on the path. */ path = getenv ("PATH"); if (path == NULL) { #if HAVE_CONFSTR /* There is no 'PATH' in the environment. The default search path is the current directory followed by the path 'confstr' returns for '_CS_PATH'. */ len = confstr (_CS_PATH, (char *) NULL, 0); path = (char *) alloca (1 + len); path[0] = ':'; (void) confstr (_CS_PATH, path + 1, len); #else /* Pretend that the PATH contains only the current directory. */ path = ""; #endif } len = strlen (file) + 1; pathlen = strlen (path); name = alloca (pathlen + len + 1); /* Copy the file name at the top. */ name = (char *) memcpy (name + pathlen + 1, file, len); /* And add the slash. */ *--name = '/'; p = path; do { char *startp; path = p; p = strchrnul (path, ':'); if (p == path) /* Two adjacent colons, or a colon at the beginning or the end of 'PATH' means to search the current directory. */ startp = name + 1; else startp = (char *) memcpy (name - (p - path), path, p - path); /* Try to execute this name. If it works, execv will not return. */ execve (startp, (char * const *) argv, (char * const *) envp); switch (errno) { case EACCES: case ENOENT: case ESTALE: case ENOTDIR: /* Those errors indicate the file is missing or not executable by us, in which case we want to just try the next path directory. */ break; default: /* Some other error means we found an executable file, but something went wrong executing it; return the error to our caller. */ _exit (SPAWN_ERROR); } } while (*p++ != '\0'); /* Return with an error. */ _exit (SPAWN_ERROR); } #endif �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/spawnp.c����������������������������������������������������������������0000664�0000000�0000000�00000002525�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" /* Spawn a new process executing FILE with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int posix_spawnp (pid_t *pid, const char *file, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]) { return __spawni (pid, file, file_actions, attrp, (const char * const *) argv, (const char * const *) envp, 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000004164�14110572173�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include "vasnprintf.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif /* Print formatted output to string STR. Return string length of formatted string. On error, return a negative value. */ int sprintf (char *str, const char *format, ...) { char *output; size_t len; size_t lenbuf; va_list args; /* vasnprintf fails with EOVERFLOW when the buffer size argument is larger than INT_MAX (if that fits into a 'size_t' at all). Also note that glibc's iconv fails with E2BIG when we pass a length that is so large that str + lenbuf wraps around, i.e. (uintptr_t) (str + lenbuf) < (uintptr_t) str. Therefore set lenbuf = min (SIZE_MAX, INT_MAX, - (uintptr_t) str - 1). */ lenbuf = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX); if (lenbuf > ~ (uintptr_t) str) lenbuf = ~ (uintptr_t) str; va_start (args, format); output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) return -1; if (output != str) { /* len is near SIZE_MAX. */ free (output); errno = EOVERFLOW; return -1; } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sqrtf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001536�14110572173�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Square root. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float sqrtf (float x) { return (float) sqrt ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sqrtl.c�����������������������������������������������������������������0000664�0000000�0000000�00000002767�14110572173�0016372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for sqrtl. Contributed by Paolo Bonzini Copyright 2002-2003, 2007, 2009-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double sqrtl (long double x) { return sqrt (x); } #else # include <float.h> /* A simple Newton-Raphson method. */ long double sqrtl (long double x) { long double delta, y; int exponent; /* Check for NaN */ if (isnanl (x)) return x; /* Check for negative numbers */ if (x < 0.0L) return (long double) sqrt (-1); /* Check for zero and infinites */ if (x + x == x) return x; frexpl (x, &exponent); y = ldexpl (x, -exponent / 2); do { delta = y; y = (y + x / y) * 0.5L; delta -= y; } while (delta != 0.0L); return y; } #endif ���������gnulib-20210822~d383792/lib/ssfmalloc-bitmap.h������������������������������������������������������0000664�0000000�0000000�00000052271�14110572173�0020462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple and straight-forward malloc implementation (front end). Copyright (C) 2020-2021 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. */ /* ===================== Low-level functions for bitmaps ==================== */ /* A bitmap is represented as an array of uint32_t = 'unsigned int', each with 32 bits. The bit i in the word with index j therefore represents bit k = 32 * j + i of the entire bit sequence. */ /* Initializes a bitmap. */ static inline void init_bitmap_all_bits_clear (size_t num_words, uint32_t *words) { size_t i; for (i = 0; i < num_words; i++) words[i] = 0; } /* Initializes a bitmap. */ static inline void init_bitmap_all_bits_set (size_t num_words, uint32_t *words) { size_t i; for (i = 0; i < num_words; i++) words[i] = ~(uint32_t)0; } /* Returns the smallest index k >= k0 for which the bit k is set in the bitmap consisting of num_words words. Returns (size_t)(-1) if there is none. */ static size_t find_first_bit_set (size_t num_words, const uint32_t *words, size_t k0) { size_t j0 = k0 / 32; if (j0 < num_words) { size_t i0 = k0 % 32; const uint32_t *ptr = words + j0; /* Look at the word j0, ignoring the i0 least significant bits. */ { size_t found = ffs (*ptr & (-1U << i0)); if (found > 0) return 32 * j0 + (found - 1); } /* Look at the subsequent words. */ const uint32_t *words_end = words + num_words; while (++ptr < words_end) { size_t found = ffs (*ptr); if (found > 0) return 32 * (ptr - words) + (found - 1); } } return (size_t)(-1); } /* Returns the smallest index k >= 0 for which the bit packet of c consecutive bits (1 <= c <= 32) is all set in the bitmap consisting of num_words words. Returns (size_t)(-1) if there is none. */ static size_t find_first_packet_set (size_t num_words, const uint32_t *words, size_t c) { const uint32_t *ptr = words; const uint32_t *words_end = words + num_words; switch (c) { case 1: { /* A simplified variant of find_first_bit_set. */ for (; ptr < words_end; ptr++) { size_t found = ffs (*ptr); if (found > 0) return 32 * (ptr - words) + (found - 1); } return (size_t)(-1); } case 2: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t combined = longword & (longword >> 1); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 3: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t combined = longword & (longword >> 1) & (longword >> 2); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 4: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t combined = tmp1 & (tmp1 >> 2); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 5: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t combined = tmp2 & (longword >> 4); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 6: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t combined = tmp1 & (tmp1 >> 2) & (tmp1 >> 4); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 7: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t combined = tmp1 & (tmp1 >> 2) & (tmp1 >> 4) & (longword >> 6); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 8: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t combined = tmp2 & (tmp2 >> 4); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 9: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (longword >> 8); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 10: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp1 >> 8); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 11: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp1 >> 8) & (longword >> 10); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 12: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t combined = tmp2 & (tmp2 >> 4) & (tmp2 >> 8); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 13: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t combined = tmp2 & (tmp2 >> 4) & (tmp2 >> 8) & (longword >> 12); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 14: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t combined = tmp2 & (tmp2 >> 4) & (tmp2 >> 8) & (tmp1 >> 12); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 15: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; /* Optimized: Use 5, not 6, '&' operations. */ uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (longword >> 4); uint64_t combined = tmp3 & (tmp3 >> 5) & (tmp3 >> 10); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 16: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 17: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (longword >> 16); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 18: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp1 >> 16); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 19: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp1 >> 16) & (longword >> 18); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 20: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp2 >> 16); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 21: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp2 >> 16) & (longword >> 20); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 22: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp2 >> 16) & (tmp1 >> 20); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 23: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp2 >> 16) & (tmp1 >> 20) & (longword >> 22); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 24: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 25: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (longword >> 24); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 26: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp1 >> 24); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 27: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; /* Optimized: Use 6, not 7, '&' operations. */ uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (longword >> 8); uint64_t combined = tmp4 & (tmp4 >> 9) & (tmp4 >> 18); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 28: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp2 >> 24); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 29: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t combined = tmp3 & (tmp3 >> 8) & (tmp3 >> 16) & (tmp2 >> 24) & (longword >> 28); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 30: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; /* Optimized: Use 6, not 7, '&' operations. */ uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp1 >> 8); uint64_t combined = tmp4 & (tmp4 >> 10) & (tmp4 >> 20); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 31: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp3 >> 16) & (tmp2 >> 24) & (tmp1 >> 28) & (longword >> 30); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } case 32: { while (ptr < words_end) { uint64_t longword = *ptr++; if (likely (ptr < words_end)) longword |= ((uint64_t) *ptr) << 32; uint64_t tmp1 = longword & (longword >> 1); uint64_t tmp2 = tmp1 & (tmp1 >> 2); uint64_t tmp3 = tmp2 & (tmp2 >> 4); uint64_t tmp4 = tmp3 & (tmp3 >> 8); uint64_t combined = tmp4 & (tmp4 >> 16); size_t found = ffsll (combined); if (found > 0) return 32 * (ptr - 1 - words) + (found - 1); } return (size_t)(-1); } default: /* Invalid argument. */ abort (); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ssfmalloc.h�������������������������������������������������������������0000664�0000000�0000000�00000075417�14110572173�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple and straight-forward malloc implementation (front end). Copyright (C) 2020-2021 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. */ /* This file implements an allocator of memory blocks of given size (a "malloc front end"), based on an allocator of memory pages (a "malloc back end"). The need for such an allocator arises because a memory block is often 50 bytes large or less, whereas an allocator of memory pages provides entire pages (4096 bytes or more). This implementation attempts to be - simple and straight-forward, - respecting locality of reference, - usable for small allocations, - nevertheless of reasonable speed. Simple and straight-forward - means that it contains only a small amount of code (compared to e.g. tcmalloc). Respecting locality of reference - means that searching for a free block will not follow lists of pointers that touch unrelated cache lines in the same page or even unrelated memory pages, because that would cause cache misses or even swapping in of unrelated memory pages. Usable for small allocations - means that it can be used for data types with few instances. It does not, unlike some other malloc implementations, allocate 256 KB of memory up-front. Nor does it allocate memory pages per thread. Reasonable speed is nevertheless guaranteed by - choosing algorithms that lead to little fragmentation, - small caches where they make sense. */ /* The user of this file needs to define the following macros before including this file: PAGESIZE A variable-like macro of type intptr_t or uintptr_t that evaluates to the memory page size (>= 4096). PAGESIZE_MAX A constant that specifies an upper bound for PAGESIZE. ALLOC_PAGES A function-like macro with the signature uintptr_t ALLOC_PAGES (size_t size) where the argument size is > 0 and a multiple of the PAGESIZE. It returns a multiple of PAGESIZE, or 0 upon failure. FREE_PAGES A function-like macro with the signature void FREE_PAGES (uintptr_t pages, size_t size) where pages is a non-zero value returned by ALLOC_PAGES (size). ALIGNMENT A constant that specifies the desired alignment of all the returned memory blocks. Possible values are the powers of 2, from sizeof (void *) to 32. PAGE_RESERVED_HEADER_SIZE A constant, either 0 or a multiple of sizeof (void *), that denotes the size of a reserved header - not to be used by the application - at the beginning of a page sequence returned by ALLOC_PAGES. */ /* =================== Declarations of exported functions =================== */ #include <stdint.h> /* Allocates a block of memory, aligned to ALIGNMENT bytes. Returns 0 upon failure. */ static uintptr_t allocate_block (size_t size); /* Frees a block of memory, returned by allocate_block. */ static void free_block (uintptr_t block); /* ============================= Implementation ============================= */ /* Outline of the implementation decisions (ID): * ID: This implementation considers three types of blocks: - small blocks - these are allocated in "small block" pages. - medium blocks - these are allocated in "medium block" pages. - large blocks - these are allocated individually, with a page or sequence of pages uniquely for this block. * Rationale: - Most memory allocations are small (e.g. <= 32 bytes); this is a lesson learned from xc/programs/Xserver/os/xalloc.c (1997) [Pascal Haible]. - Fragmentation is one of the biggest problems, and keeping large blocks and small blocks separate from medium blocks is one way to control it. * ID: If an allocation succeeds in one page, the next allocation (of the same type of block) will try to use the same page. * Rationale: Locality of reference. * ID: Pages of small or medium blocks have their management data structures concentrated at the beginning of the page. No chained lists that force to walk through the page. * Rationale: Locality of reference. * ID: Across pages, the management of the free space is done through data structures outside the pages. No chained lists across pages. * Rationale: Locality of reference. */ #include <stdlib.h> #include <string.h> /* ffsll */ #include <strings.h> /* ffs */ #include "flexmember.h" #include "glthread/lock.h" #include "thread-optim.h" #include "gl_oset.h" #include "gl_rbtree_oset.h" /* Help the branch prediction. */ #if __GNUC__ >= 3 # define likely(cond) __builtin_expect ((cond), 1) # define unlikely(cond) __builtin_expect ((cond), 0) #else # define likely(cond) (cond) # define unlikely(cond) (cond) #endif enum { small_page_type = 1, medium_page_type = 2, large_page_type = 3 }; /* Header of a page of small or medium blocks or of a large block. Lies at an address that is a multiple of PAGESIZE. */ struct any_page_header { #if PAGE_RESERVED_HEADER_SIZE > 0 void * reserved[PAGE_RESERVED_HEADER_SIZE / sizeof (void *)]; #endif /* small_page_type or medium_page_type or large_page_type */ unsigned char page_type; }; /* ========================= Small and medium blocks ======================== */ /* An integer type, capable of holding the values 0 .. PAGESIZE. */ #if PAGESIZE_MAX >= 0x10000 typedef unsigned int pg_offset_t; #else typedef unsigned short pg_offset_t; #endif /* Tree element that corresponds to a page. These tree elements are allocated via malloc(). */ struct page_tree_element { uintptr_t page; pg_offset_t free_space; }; /* Header of a page of small or medium blocks. Lies at an address that is a multiple of PAGESIZE. */ struct dissected_page_header { struct any_page_header common; /* Amount of free space in this page. Always a multiple of ALIGNMENT. */ pg_offset_t free_space; /* The tree element. */ struct page_tree_element *tree_element; }; /* Data structure for managing a pool of pages. */ struct page_pool { /* Methods. */ void (*init_page_pool) (struct page_pool *pool); void (*init_page) (uintptr_t page); uintptr_t (*allocate_block_in_page) (size_t size, uintptr_t page); void (*free_block_in_page) (uintptr_t block, uintptr_t page); /* Maximum free space in a page of this pool. */ size_t page_capacity; /* Page that provided the last successful allocation from this pool, or 0. */ uintptr_t last_page; /* Ordered set of managed pages, sorted according to free_space, in ascending order. */ gl_oset_t /* <struct page_tree_element *> */ managed_pages; /* A queue of pages which have a modified free_space but which have not been updated in the managed_pages tree so far. */ #define UPDATE_QUEUE_SIZE 10 unsigned int update_queue_count; /* <= UPDATE_QUEUE_SIZE */ uintptr_t update_queue[UPDATE_QUEUE_SIZE]; /* A page that could be freed. We don't free it immediately, so that on allocation/deallocation pattern like 2x allocate, 2x free, 2x allocate, 2x free, 2x allocate, 2x free, ... will not allocate and free a page so frequently. */ uintptr_t freeable_page; }; /* Comparison function for managed_pages. */ static int compare_pages_by_free_space (const void *elt1, const void *elt2) { struct page_tree_element *element1 = (struct page_tree_element *) elt1; struct page_tree_element *element2 = (struct page_tree_element *) elt2; int cmp = _GL_CMP (element1->free_space, element2->free_space); if (unlikely (cmp == 0)) cmp = _GL_CMP (element1->page, element2->page); return cmp; } /* Tests whether the free space in a tree element is greater or equal than the given threshold. */ static bool page_free_space_is_at_least (const void *elt, const void *threshold) { struct page_tree_element *element = (struct page_tree_element *) elt; return element->free_space >= (uintptr_t) threshold; } /* Updates the free space of a 'struct page_tree_element *'. Only to be called through gl_oset_update! */ static void set_free_space (const void *elt, void *action_data) { struct page_tree_element *element = (struct page_tree_element *) elt; element->free_space = (pg_offset_t) (uintptr_t) action_data; } /* Executes the pending updates in the managed_pages tree. */ static void flush_all_updates (struct page_pool *pool) { size_t count = pool->update_queue_count; while (likely (count > 0)) { --count; uintptr_t page = pool->update_queue[count]; struct dissected_page_header *pageptr = (struct dissected_page_header *) page; struct page_tree_element *tree_element = pageptr->tree_element; if (gl_oset_update (pool->managed_pages, tree_element, set_free_space, (void *) (uintptr_t) pageptr->free_space) < 0) /* A collision was found. This contradicts the definition of compare_pages_by_free_space. */ abort (); } pool->update_queue_count = 0; } /* Adds a page to the update queue. This function has to be called when the free_space of the page has changed. */ static inline void add_update (uintptr_t page, struct page_pool *pool) { size_t count = pool->update_queue_count; size_t i; for (i = 0; i < count; i++) if (pool->update_queue[i] == page) /* It's already in the queue. */ return; /* Ensure there is room for adding one more page to the update queue. */ if (unlikely (count == UPDATE_QUEUE_SIZE)) flush_all_updates (pool); /* Add it to the update queue. */ pool->update_queue[pool->update_queue_count++] = page; } /* Drops a page from the update queue. */ static inline void drop_update (uintptr_t page, struct page_pool *pool) { size_t count = pool->update_queue_count; size_t i; for (i = 0; i < count; i++) if (pool->update_queue[i] == page) { /* It's in the queue. Remove it. */ for (i = i + 1; i < count; i++) pool->update_queue[i - 1] = pool->update_queue[i]; pool->update_queue_count--; return; } } /* ============================== Small blocks ============================== */ #include "ssfmalloc-bitmap.h" /* Maximum size of a small block. Must be a power of 2. */ #define SMALL_BLOCK_MAX_SIZE (ALIGNMENT < 8 ? 32 * ALIGNMENT : 256) /* Number of rows of ALIGNMENT bytes available in an empty page. */ static unsigned int small_block_page_num_bits; /* Offset in the page where the memory blocks start. A multiple of ALIGNMENT. */ static unsigned int small_block_page_blocks_start; /* Number of uint32_t words in each of the two bitmaps. */ static unsigned int small_block_page_num_bitmap_words; /* Header of a page of small blocks. Lies at an address that is a multiple of PAGESIZE. */ struct small_page_header { struct dissected_page_header common; /* Two bitmaps, each with small_block_page_num_bitmap_words. In each a bit represents ALIGNMENT bytes. - available_bitmap: bit set means available, bit clear means allocated. - blockend_bitmap: bit set means the an allocated block ends here. */ uint32_t bitmap_words[FLEXIBLE_ARRAY_MEMBER]; }; static inline uint32_t * small_block_page_available_bitmap (struct small_page_header *pageptr) { return &pageptr->bitmap_words[0]; } static inline uint32_t * small_block_page_blockend_bitmap (struct small_page_header *pageptr) { return &pageptr->bitmap_words[small_block_page_num_bitmap_words]; } static void init_small_block_page_pool (struct page_pool *pool) { /* How many usable rows of ALIGNMENT bytes can we have? Each takes ALIGNMENT bytes + 1/8 byte in each bitmap, so approximately (ALIGNMENT + 1/4) bytes. */ unsigned int num_bits = (unsigned int) (4 * PAGESIZE) / (4 * ALIGNMENT + 1); unsigned int num_bitmap_words; unsigned int blocks_start; /* Iterate until it converges. */ for (;;) { num_bitmap_words = (num_bits + 32 - 1) / 32; blocks_start = (FLEXSIZEOF (struct small_page_header, bitmap_words, 2 * num_bitmap_words * sizeof (uint32_t)) + ALIGNMENT - 1) & -ALIGNMENT; unsigned int num_bits_r = (unsigned int) (PAGESIZE - blocks_start) / ALIGNMENT; if (num_bits_r >= num_bits) break; num_bits = num_bits_r; } small_block_page_num_bits = num_bits; small_block_page_num_bitmap_words = num_bitmap_words; small_block_page_blocks_start = blocks_start; pool->page_capacity = small_block_page_num_bits * ALIGNMENT; } static void init_small_block_page (uintptr_t page) { struct small_page_header *pageptr = (struct small_page_header *) page; pageptr->common.common.page_type = small_page_type; /* Initialize available_bitmap. */ uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); init_bitmap_all_bits_set (small_block_page_num_bitmap_words, available_bitmap); if ((small_block_page_num_bits % 32) != 0) available_bitmap[small_block_page_num_bitmap_words - 1] = (1U << (small_block_page_num_bits % 32)) - 1; /* Initialize blockend_bitmap. */ init_bitmap_all_bits_clear (small_block_page_num_bitmap_words, small_block_page_blockend_bitmap (pageptr)); pageptr->common.free_space = small_block_page_num_bits * ALIGNMENT; } /* Allocates a block of memory of size <= SMALL_BLOCK_MAX_SIZE, aligned to ALIGNMENT bytes, from the given page. Returns 0 upon failure. */ static uintptr_t allocate_small_block_in_page (size_t size, uintptr_t page) { struct small_page_header *pageptr = (struct small_page_header *) page; /* glibc compatible. */ if (size == 0) size = 1; /* Number of consecutive bits to look for in the bitmap. */ size_t c = (size + ALIGNMENT - 1) / ALIGNMENT; /* SMALL_BLOCK_MAX_SIZE has been chosen so that c <= 32. */ if (!(c > 0 && c <= 32)) abort (); uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); size_t k = find_first_packet_set (small_block_page_num_bitmap_words, available_bitmap, c); if (unlikely (k == (size_t)(-1))) /* Failed to find c consecutive available rows of ALIGNMENT bytes each. */ return 0; uint32_t *blockend_bitmap = small_block_page_blockend_bitmap (pageptr); size_t j = k / 32; size_t i = k % 32; if (i + c <= 32) { available_bitmap[j] &= ~(((2U << (c - 1)) - 1) << i); blockend_bitmap[j] |= (1U << (i + c - 1)); } else { available_bitmap[j] &= ~(-1U << i); available_bitmap[j + 1] &= ~((1U << (i + c - 32)) - 1); blockend_bitmap[j + 1] |= (1U << (i + c - 1 - 32)); } pageptr->common.free_space -= c * ALIGNMENT; return page + small_block_page_blocks_start + k * ALIGNMENT; } static void free_small_block_in_page (uintptr_t block, uintptr_t page) { struct small_page_header *pageptr = (struct small_page_header *) page; if (!(block >= page + small_block_page_blocks_start && (block % ALIGNMENT) == 0)) /* Invalid argument. */ abort (); uint32_t *available_bitmap = small_block_page_available_bitmap (pageptr); uint32_t *blockend_bitmap = small_block_page_blockend_bitmap (pageptr); /* The bit that corresponds to where the block starts. */ size_t k = (block - page - small_block_page_blocks_start) / ALIGNMENT; /* The bit that corresponds to where the block ends. */ size_t ke = find_first_bit_set (small_block_page_num_bitmap_words, blockend_bitmap, k); if (/* ke == (size_t)(-1) || */ ke >= k + 32) /* Invalid argument or invalid state. */ abort (); /* Number of consecutive bits to manipulate in the bitmap. */ size_t c = ke - k + 1; size_t j = k / 32; size_t i = k % 32; if (i + c <= 32) { available_bitmap[j] |= (((2U << (c - 1)) - 1) << i); blockend_bitmap[j] &= ~(1U << (i + c - 1)); } else { available_bitmap[j] |= (-1U << i); available_bitmap[j + 1] |= ((1U << (i + c - 32)) - 1); blockend_bitmap[j + 1] &= ~(1U << (i + c - 1 - 32)); } pageptr->common.free_space += c * ALIGNMENT; } /* Management of pages of small blocks. */ struct page_pool small_block_pages = { init_small_block_page_pool, init_small_block_page, allocate_small_block_in_page, free_small_block_in_page }; /* ============================== Medium blocks ============================= */ /* A range of memory in a page. It covers the address range [page+start, page+end). start <= end. */ struct memory_range { pg_offset_t start; pg_offset_t end; }; /* Header of a page of medium blocks. Lies at an address that is a multiple of PAGESIZE. */ struct medium_page_header { struct dissected_page_header common; /* If n blocks are allocated, there are n+1 gaps before, between, and after them. Keep them in an array, sorted in ascending order. */ unsigned int num_gaps; /* > 0 */ struct memory_range gaps[FLEXIBLE_ARRAY_MEMBER /* PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1 */]; }; #define MEDIUM_BLOCKS_PAGE_MAX_GAPS \ (PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1) #define MEDIUM_BLOCKS_PAGE_FIRST_GAP_START \ ((FLEXSIZEOF (struct medium_page_header, gaps, \ MEDIUM_BLOCKS_PAGE_MAX_GAPS * sizeof (struct memory_range)) \ + ALIGNMENT - 1) & -ALIGNMENT) #define MEDIUM_BLOCKS_PAGE_LAST_GAP_END \ PAGESIZE #define MEDIUM_BLOCKS_PAGE_CAPACITY \ (MEDIUM_BLOCKS_PAGE_LAST_GAP_END - MEDIUM_BLOCKS_PAGE_FIRST_GAP_START) static void init_medium_block_page_pool (struct page_pool *pool) { pool->page_capacity = MEDIUM_BLOCKS_PAGE_CAPACITY; } static void init_medium_block_page (uintptr_t page) { struct medium_page_header *pageptr = (struct medium_page_header *) page; pageptr->common.common.page_type = medium_page_type; pageptr->num_gaps = 1; pageptr->gaps[0].start = MEDIUM_BLOCKS_PAGE_FIRST_GAP_START; pageptr->gaps[0].end = MEDIUM_BLOCKS_PAGE_LAST_GAP_END; pageptr->common.free_space = MEDIUM_BLOCKS_PAGE_CAPACITY; } /* Allocates a block of memory of size > SMALL_BLOCK_MAX_SIZE, aligned to ALIGNMENT bytes, from the given page. Returns 0 upon failure. */ static uintptr_t allocate_medium_block_in_page (size_t size, uintptr_t page) { struct medium_page_header *pageptr = (struct medium_page_header *) page; /* Walk through the gaps and remember the smallest gap of at least the given size. */ size_t best_i = (size_t)(-1); size_t best_length = (size_t)(-1); size_t num_gaps = pageptr->num_gaps; size_t i; for (i = 0; i < num_gaps; i++) { size_t length = pageptr->gaps[i].end - pageptr->gaps[i].start; if (length >= size) { /* Found a gap of sufficient size. */ if (length < best_length) { best_i = i; best_length = length; } } } if (unlikely (best_i == (size_t)(-1))) /* Failed to find a gap of sufficient size. */ return 0; size_t aligned_size = (size + ALIGNMENT - 1) & -ALIGNMENT; if (pageptr->common.free_space < aligned_size) /* Invalid state: Less free space than expected. */ abort (); /* Split the gap, leaving an empty gap and a remaining gap. */ for (i = num_gaps - 1; ; i--) { pageptr->gaps[i + 1] = pageptr->gaps[i]; if (i == best_i) break; } size_t result = pageptr->gaps[best_i].start; pageptr->gaps[best_i].end = result; pageptr->gaps[best_i + 1].start = result + aligned_size; pageptr->num_gaps = num_gaps + 1; if (pageptr->num_gaps > PAGESIZE / SMALL_BLOCK_MAX_SIZE + 1) /* Invalid state: More gaps than expected. */ abort (); pageptr->common.free_space -= aligned_size; return page + result; } static void free_medium_block_in_page (uintptr_t block, uintptr_t page) { struct medium_page_header *pageptr = (struct medium_page_header *) page; size_t offset = block - page; /* Search for the gap that ends where this block begins. We can ignore the last gap here, since it ends where the page ends. */ struct memory_range *gaps = pageptr->gaps; size_t lo = 0; size_t hi = pageptr->num_gaps - 1; size_t index; while (lo < hi) { /* Invariant: for i < lo, gaps[i].end < offset, for i >= hi, gaps[i].end > offset. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ if (offset > gaps[mid].end) lo = mid + 1; else if (offset < gaps[mid].end) hi = mid; else { /* Found it: offset == gaps[mid].end. */ index = mid; goto found; } } /* Invalid argument: block is not the start of a currently allocated block. */ abort (); found: /* Here 0 <= index < pageptr->num_gaps - 1. Combine the gaps index and index+1. */ pageptr->common.free_space += gaps[index + 1].start - gaps[index].end; if (pageptr->common.free_space < gaps[index + 1].start - gaps[index].end) /* Wrap around. */ abort (); gaps[index].end = gaps[index + 1].end; size_t num_gaps = pageptr->num_gaps - 1; size_t i; for (i = index + 1; i < num_gaps; i++) gaps[i] = gaps[i + 1]; pageptr->num_gaps = num_gaps; } /* Management of pages of medium blocks. */ struct page_pool medium_block_pages = { init_medium_block_page_pool, init_medium_block_page, allocate_medium_block_in_page, free_medium_block_in_page }; /* ==================== Pages of small and medium blocks ==================== */ /* Allocates a block of memory from the given pool, aligned to ALIGNMENT bytes. Returns 0 upon failure. */ static inline uintptr_t allocate_block_from_pool (size_t size, struct page_pool *pool) { uintptr_t page; /* Try in the last used page first. */ page = pool->last_page; if (likely (page != 0)) { uintptr_t block = pool->allocate_block_in_page (size, page); if (likely (block != 0)) { add_update (page, pool); return block; } } /* Ensure that the pool and its managed_pages is initialized. */ if (unlikely (pool->managed_pages == NULL)) { pool->managed_pages = gl_oset_nx_create_empty (GL_RBTREE_OSET, compare_pages_by_free_space, NULL); if (unlikely (pool->managed_pages == NULL)) /* Could not allocate the managed_pages. */ return 0; pool->init_page_pool (pool); } /* Ensure that managed_pages is up-to-date. */ flush_all_updates (pool); /* Try in the other managed_pages. */ { gl_oset_iterator_t iter = gl_oset_iterator_atleast (pool->managed_pages, page_free_space_is_at_least, (void *) (uintptr_t) size); const void *elt; while (gl_oset_iterator_next (&iter, &elt)) { struct page_tree_element *element = (struct page_tree_element *) elt; page = element->page; /* No need to try the last used page again. */ if (likely (page != pool->last_page)) { uintptr_t block = pool->allocate_block_in_page (size, page); if (likely (block != 0)) { gl_oset_iterator_free (&iter); add_update (page, pool); pool->last_page = page; return block; } } } gl_oset_iterator_free (&iter); } /* If we have a freeable page ready for reuse, use it. */ if (pool->freeable_page != 0) { page = pool->freeable_page; pool->init_page (page); struct page_tree_element *element = (struct page_tree_element *) malloc (sizeof (struct page_tree_element)); if (unlikely (element == NULL)) { /* Could not allocate the tree element. */ pool->last_page = 0; return 0; } element->page = page; element->free_space = ((struct dissected_page_header *) page)->free_space; if (unlikely (gl_oset_nx_add (pool->managed_pages, element) < 0)) { /* Could not allocate the tree node. */ free (element); pool->last_page = 0; return 0; } ((struct dissected_page_header *) page)->tree_element = element; pool->freeable_page = 0; uintptr_t block = pool->allocate_block_in_page (size, page); if (block == 0) /* If the size is too large for an empty page, this function should not have been invoked. */ abort (); add_update (page, pool); pool->last_page = page; return block; } /* Allocate a fresh page. */ page = ALLOC_PAGES (PAGESIZE); if (unlikely (page == 0)) { /* Failed. */ pool->last_page = 0; return 0; } if ((page & (PAGESIZE - 1)) != 0) /* ALLOC_PAGES's result is not aligned as expected. */ abort (); pool->init_page (page); struct page_tree_element *element = (struct page_tree_element *) malloc (sizeof (struct page_tree_element)); if (unlikely (element == NULL)) { /* Could not allocate the tree element. */ FREE_PAGES (page, PAGESIZE); pool->last_page = 0; return 0; } element->page = page; element->free_space = ((struct dissected_page_header *) page)->free_space; if (unlikely (gl_oset_nx_add (pool->managed_pages, element) < 0)) { /* Could not allocate the tree node. */ free (element); FREE_PAGES (page, PAGESIZE); pool->last_page = 0; return 0; } ((struct dissected_page_header *) page)->tree_element = element; uintptr_t block = pool->allocate_block_in_page (size, page); if (block == 0) /* If the size is too large for an empty page, this function should not have been invoked. */ abort (); add_update (page, pool); pool->last_page = page; return block; } static void free_block_from_pool (uintptr_t block, uintptr_t page, struct page_pool *pool) { if (pool->page_capacity == 0) /* Invalid argument: The block is not valid, since the pool has not yet been initialized. */ abort (); pool->free_block_in_page (block, page); struct dissected_page_header *pageptr = (struct dissected_page_header *) page; if (likely (pageptr->free_space != pool->page_capacity)) { /* The page is not entirely free. */ add_update (page, pool); } else { /* The page is now entirely free. */ /* Remove its tree element and free it. */ struct page_tree_element *element = pageptr->tree_element; if (!gl_oset_remove (pool->managed_pages, element)) /* Invalid state: The element is not in the managed_pages. */ abort (); free (element); if (pool->last_page == page) pool->last_page = 0; drop_update (page, pool); /* If we would now have two freeable pages, free the old one. */ if (pool->freeable_page != 0) FREE_PAGES (pool->freeable_page, PAGESIZE); /* Don't free the page now, but later. */ pool->freeable_page = page; } } /* Lock that protects the management of small and medium blocks from simultaneous access from multiple threads. */ gl_lock_define_initialized(static, ssfmalloc_lock) /* ============================== Large blocks ============================== */ /* Header of a page sequence for a large block. Lies at an address that is a multiple of PAGESIZE. */ struct large_block_header { #if PAGE_RESERVED_HEADER_SIZE > 0 void * reserved[PAGE_RESERVED_HEADER_SIZE / sizeof (void *)]; #endif unsigned char page_type; /* large_page_type */ }; /* Information about a large block. Ends at an address that is a multiple of ALIGNMENT. */ struct large_block_caption { size_t pages_size; /* A multiple of PAGESIZE. */ }; /* Size of large block page header, gap, and caption. */ #define LARGE_BLOCK_OFFSET \ ((sizeof (struct large_block_header) + sizeof (struct large_block_caption) \ + ALIGNMENT - 1) & -ALIGNMENT) /* =========================== Exported functions =========================== */ /* Allocates a block of memory, aligned to ALIGNMENT bytes. Returns 0 upon failure. */ static uintptr_t allocate_block (size_t size) { uintptr_t block; if (unlikely (size > MEDIUM_BLOCKS_PAGE_CAPACITY)) { /* Allocate a large block. */ size_t pages_size = (size + LARGE_BLOCK_OFFSET + PAGESIZE - 1) & -PAGESIZE; uintptr_t pages = ALLOC_PAGES (pages_size); if (unlikely (pages == 0)) /* Failed. */ return 0; if ((pages & (PAGESIZE - 1)) != 0) /* ALLOC_PAGES's result is not aligned as expected. */ abort (); ((struct any_page_header *) pages)->page_type = large_page_type; block = pages + LARGE_BLOCK_OFFSET; ((struct large_block_caption *) block)[-1].pages_size = pages_size; } else { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (ssfmalloc_lock); struct page_pool *pool = (size <= SMALL_BLOCK_MAX_SIZE ? &small_block_pages : &medium_block_pages); block = allocate_block_from_pool (size, pool); if (mt) gl_lock_unlock (ssfmalloc_lock); } return block; } /* Frees a block of memory, returned by allocate_block. */ static void free_block (uintptr_t block) { if (block == 0 || (block % ALIGNMENT) != 0) /* Invalid argument. */ abort (); uintptr_t pages = block & -PAGESIZE; unsigned char type = ((struct any_page_header *) pages)->page_type; if (unlikely (type == large_page_type)) { if (block != pages + LARGE_BLOCK_OFFSET) /* Invalid argument. */ abort (); size_t pages_size = ((struct large_block_caption *) block)[-1].pages_size; if ((pages_size & (PAGESIZE - 1)) != 0) /* Invalid memory state: pages_size not as expected. */ abort (); FREE_PAGES (pages, pages_size); } else { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (ssfmalloc_lock); struct page_pool *pool; if (type == small_page_type) pool = &small_block_pages; else if (type == medium_page_type) pool = &medium_block_pages; else /* Invalid memory state: type not as expected. */ abort (); free_block_from_pool (block, pages, pool); if (mt) gl_lock_unlock (ssfmalloc_lock); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stack.h�����������������������������������������������������������������0000664�0000000�0000000�00000012373�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe stack data type. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>, 2020. */ /* This header file does not have include-guards as it is meant to be includeable multiple times as long as the necessary defines have been set up. A stack is implemented with a homogenous array of elements in memory, which will be resized (and moved) as needed. Elements are passed by value and it is the responsibility of the user-code to free any resources associated with individual elements. The exported names are all prefixed by ‘stack’ (e.g. stack_init), but this can be changed by setting an appropriate define. Type: stack_type Initialization: stack_init (&stack); De-initialization: stack_destroy (&stack); Predicate: bool res = stack_empty (&stack); Introspection: ELEMENT *base = stack_base (&stack); Pushing: stack_push (&stack, element); Popping: ELEMENT element = stack_pop (&stack); Discarding: stack_discard (&stack); Top-of-stack: ELEMENT element = stack_top (&stack); Size: size_t size = stack_size (&stack); Here, ELEMENT is the type to which GL_STACK_ELEMENT was defined when this file was included. */ /* Before including this file, you need to define: GL_STACK_ELEMENT The type of the elements on the stack. GL_STACK_STORAGECLASS (Optional) The storage class specifier (e.g. static) to use in the function definitions. GL_STACK_NAME (Optional) The prefix to use for the type names and functions definitions instead of the default ‘stack’. After including this file, these names will be undefined. Before including this file, you also need to include: #include <stdbool.h> #include <stdlib.h> #include "assure.h" #include "xalloc.h" */ #ifndef GL_STACK_ELEMENT # error "Please define GL_STACK_ELEMENT first." #endif #ifndef GL_STACK_STORAGECLASS # define GL_STACK_STORAGECLASS #endif #ifndef GL_STACK_NAME # define GL_STACK_NAME stack #endif #define _GL_STACK_PREFIX(name) _GL_CONCAT(GL_STACK_NAME, _GL_CONCAT(_, name)) #define _GL_STACK_TYPE _GL_STACK_PREFIX(type) typedef struct { GL_STACK_ELEMENT *base; size_t size; idx_t allocated; } _GL_STACK_TYPE; /* Initialize a stack. */ GL_STACK_STORAGECLASS void _GL_STACK_PREFIX (init) (_GL_STACK_TYPE *stack) { stack->base = NULL; stack->size = 0; stack->allocated = 0; } /* Destroy a stack by freeing the allocated space. */ GL_STACK_STORAGECLASS void _GL_STACK_PREFIX (destroy) (_GL_STACK_TYPE *stack) { free (stack->base); } /* Return true if the stack currently holds no element. */ GL_STACK_STORAGECLASS _GL_ATTRIBUTE_PURE bool _GL_STACK_PREFIX (empty) (const _GL_STACK_TYPE *stack) { return stack->size == 0; } /* Return the current address of the array of stack elements. The result is invalidated as soon as an element is added or removed from the stack. */ GL_STACK_STORAGECLASS _GL_ATTRIBUTE_PURE GL_STACK_ELEMENT * _GL_STACK_PREFIX (current_base) (const _GL_STACK_TYPE *stack) { return stack->base; } /* Push an element to the top of the stack. */ GL_STACK_STORAGECLASS void _GL_STACK_PREFIX (push) (_GL_STACK_TYPE *stack, GL_STACK_ELEMENT item) { if (stack->size == stack->allocated) stack->base = xpalloc (stack->base, &stack->allocated, 1, -1, sizeof *stack->base); stack->base [stack->size++] = item; } /* Pop the element from the top of the stack, which must be non-empty, and return it. */ GL_STACK_STORAGECLASS GL_STACK_ELEMENT _GL_STACK_PREFIX (pop) (_GL_STACK_TYPE *stack) { affirm (!_GL_STACK_PREFIX (empty) (stack)); return stack->base [--stack->size]; } /* Pop the element from the top of the stack, which must be non-empty. */ GL_STACK_STORAGECLASS void _GL_STACK_PREFIX (discard) (_GL_STACK_TYPE *stack) { affirm (!_GL_STACK_PREFIX (empty) (stack)); --stack->size; } /* Return the element from the top of the stack, which must be non-empty. */ GL_STACK_STORAGECLASS GL_STACK_ELEMENT _GL_STACK_PREFIX (top) (const _GL_STACK_TYPE *stack) { affirm (!_GL_STACK_PREFIX (empty) (stack)); return stack->base [stack->size - 1]; } /* Return the currently stored number of elements in the stack. */ GL_STACK_STORAGECLASS _GL_ATTRIBUTE_PURE size_t _GL_STACK_PREFIX (size) (const _GL_STACK_TYPE *stack) { return stack->size; } #undef GL_STACK_ELEMENT #undef GL_STACK_STORAGECLASS #undef GL_STACK_NAME #undef _GL_STACK_PREFIX #undef _GL_STACK_TYPE ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stackvma.c��������������������������������������������������������������0000664�0000000�0000000�00000166630�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the virtual memory area of a given address. Copyright (C) 2002-2021 Free Software Foundation, Inc. Copyright (C) 2003-2006 Paolo Bonzini <bonzini@gnu.org> This 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 2 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 and Paolo Bonzini. */ #include <config.h> /* On Solaris in 32-bit mode, when gnulib module 'largefile' is in use, prevent a compilation error "Cannot use procfs in the large file compilation environment" On Android, when targeting Android 4.4 or older with a GCC toolchain, prevent a compilation error "error: call to 'mmap' declared with attribute error: mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21. Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang." The files that we access in this compilation unit are less than 2 GB large. */ #if defined __sun || defined __ANDROID__ # undef _FILE_OFFSET_BITS #endif /* Specification. */ #include "stackvma.h" #include <stdio.h> #include <stdlib.h> /* =========================== stackvma-simple.c =========================== */ #if defined __linux__ || defined __ANDROID__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ \ || (defined __APPLE__ && defined __MACH__) \ || defined __sgi || defined __sun \ || defined __CYGWIN__ || defined __HAIKU__ /* This file contains the proximity test function for the simple cases, where the OS has an API for enumerating the mapped ranges of virtual memory. */ # if STACK_DIRECTION < 0 /* Info about the gap between this VMA and the previous one. addr must be < vma->start. */ static int simple_is_near_this (uintptr_t addr, struct vma_struct *vma) { return (vma->start - addr <= (vma->start - vma->prev_end) / 2); } # endif # if STACK_DIRECTION > 0 /* Info about the gap between this VMA and the next one. addr must be > vma->end - 1. */ static int simple_is_near_this (uintptr_t addr, struct vma_struct *vma) { return (addr - vma->end < (vma->next_start - vma->end) / 2); } # endif #endif /* =========================== stackvma-rofile.c =========================== */ /* Buffered read-only streams. */ #if defined __linux__ || defined __ANDROID__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ \ || defined __CYGWIN__ # include <errno.h> /* errno, EINTR */ # include <fcntl.h> /* open, O_RDONLY */ # include <stddef.h> /* size_t */ # include <unistd.h> /* getpagesize, lseek, read, close */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ # if defined __linux__ || defined __ANDROID__ # include <limits.h> /* PATH_MAX */ # endif /* Buffered read-only streams. We cannot use <stdio.h> here, because fopen() calls malloc(), and a malloc() call may have been interrupted. Also, we cannot use multiple read() calls, because if the buffer size is smaller than the file's contents: - On NetBSD, the second read() call would return 0, thus making the file appear truncated. - On DragonFly BSD, the first read() call would fail with errno = EFBIG. - On all platforms, if some other thread is doing memory allocations or deallocations between two read() calls, there is a high risk that the result of these two read() calls don't fit together, and as a consequence we will parse gargage and either omit some VMAs or return VMAs with nonsensical addresses. So use mmap(), and ignore the resulting VMA. The stack-allocated buffer cannot be too large, because this can be called when we are in the context of an alternate stack of just SIGSTKSZ bytes. */ # if defined __linux__ || defined __ANDROID__ /* On Linux, if the file does not entirely fit into the buffer, the read() function stops before the line that would come out truncated. The maximum size of such a line is 73 + PATH_MAX bytes. To be sure that we have read everything, we must verify that at least that many bytes are left when read() returned. */ # define MIN_LEFTOVER (73 + PATH_MAX) # else # define MIN_LEFTOVER 1 # endif # if MIN_LEFTOVER < 1024 # define STACK_ALLOCATED_BUFFER_SIZE 1024 # else /* There is no point in using a stack-allocated buffer if it is too small anyway. */ # define STACK_ALLOCATED_BUFFER_SIZE 1 # endif struct rofile { size_t position; size_t filled; int eof_seen; /* These fields deal with allocation of the buffer. */ char *buffer; char *auxmap; size_t auxmap_length; uintptr_t auxmap_start; uintptr_t auxmap_end; char stack_allocated_buffer[STACK_ALLOCATED_BUFFER_SIZE]; }; /* Open a read-only file stream. */ static int rof_open (struct rofile *rof, const char *filename) { int fd; uintptr_t pagesize; size_t size; fd = open (filename, O_RDONLY); if (fd < 0) return -1; rof->position = 0; rof->eof_seen = 0; /* Try the static buffer first. */ pagesize = 0; rof->buffer = rof->stack_allocated_buffer; size = sizeof (rof->stack_allocated_buffer); rof->auxmap = NULL; rof->auxmap_start = 0; rof->auxmap_end = 0; for (;;) { /* Attempt to read the contents in a single system call. */ if (size > MIN_LEFTOVER) { int n = read (fd, rof->buffer, size); if (n < 0 && errno == EINTR) goto retry; # if defined __DragonFly__ if (!(n < 0 && errno == EFBIG)) # endif { if (n <= 0) /* Empty file. */ goto fail1; if (n + MIN_LEFTOVER <= size) { /* The buffer was sufficiently large. */ rof->filled = n; # if defined __linux__ || defined __ANDROID__ /* On Linux, the read() call may stop even if the buffer was large enough. We need the equivalent of full_read(). */ for (;;) { n = read (fd, rof->buffer + rof->filled, size - rof->filled); if (n < 0 && errno == EINTR) goto retry; if (n < 0) /* Some error. */ goto fail1; if (n + MIN_LEFTOVER > size - rof->filled) /* Allocate a larger buffer. */ break; if (n == 0) { /* Reached the end of file. */ close (fd); return 0; } rof->filled += n; } # else close (fd); return 0; # endif } } } /* Allocate a larger buffer. */ if (pagesize == 0) { pagesize = getpagesize (); size = pagesize; while (size <= MIN_LEFTOVER) size = 2 * size; } else { size = 2 * size; if (size == 0) /* Wraparound. */ goto fail1; if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); } rof->auxmap = (void *) mmap ((void *) 0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (rof->auxmap == (void *) -1) { close (fd); return -1; } rof->auxmap_length = size; rof->auxmap_start = (uintptr_t) rof->auxmap; rof->auxmap_end = rof->auxmap_start + size; rof->buffer = (char *) rof->auxmap; retry: /* Restart. */ if (lseek (fd, 0, SEEK_SET) < 0) { close (fd); fd = open (filename, O_RDONLY); if (fd < 0) goto fail2; } } fail1: close (fd); fail2: if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); return -1; } /* Return the next byte from a read-only file stream without consuming it, or -1 at EOF. */ static int rof_peekchar (struct rofile *rof) { if (rof->position == rof->filled) { rof->eof_seen = 1; return -1; } return (unsigned char) rof->buffer[rof->position]; } /* Return the next byte from a read-only file stream, or -1 at EOF. */ static int rof_getchar (struct rofile *rof) { int c = rof_peekchar (rof); if (c >= 0) rof->position++; return c; } /* Parse an unsigned hexadecimal number from a read-only file stream. */ static int rof_scanf_lx (struct rofile *rof, uintptr_t *valuep) { uintptr_t value = 0; unsigned int numdigits = 0; for (;;) { int c = rof_peekchar (rof); if (c >= '0' && c <= '9') value = (value << 4) + (c - '0'); else if (c >= 'A' && c <= 'F') value = (value << 4) + (c - 'A' + 10); else if (c >= 'a' && c <= 'f') value = (value << 4) + (c - 'a' + 10); else break; rof_getchar (rof); numdigits++; } if (numdigits == 0) return -1; *valuep = value; return 0; } /* Close a read-only file stream. */ static void rof_close (struct rofile *rof) { if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); } #endif /* ========================== stackvma-vma-iter.c ========================== */ /* Iterate through the virtual memory areas of the current process, by reading from the /proc file system. */ /* This code is a simplified copy (no handling of protection flags) of the code in gnulib's lib/vma-iter.c. */ #if defined __linux__ || defined __ANDROID__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ \ || defined __CYGWIN__ /* Forward declarations. */ struct callback_locals; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end); # if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) || defined __CYGWIN__ /* GNU/kFreeBSD mounts /proc as linprocfs, which looks like a Linux /proc file system. */ static int vma_iterate_proc (struct callback_locals *locals) { struct rofile rof; /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, "/proc/self/maps") >= 0) { uintptr_t auxmap_start = rof.auxmap_start; uintptr_t auxmap_end = rof.auxmap_end; for (;;) { uintptr_t start, end; int c; /* Parse one line. First start and end. */ if (!(rof_scanf_lx (&rof, &start) >= 0 && rof_getchar (&rof) == '-' && rof_scanf_lx (&rof, &end) >= 0)) break; while (c = rof_getchar (&rof), c != -1 && c != '\n') ; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (locals, start, auxmap_start)) break; if (auxmap_end - 1 < end - 1) if (callback (locals, auxmap_end, end)) break; } else { if (callback (locals, start, end)) break; } } rof_close (&rof); return 0; } return -1; } # elif defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ static int vma_iterate_proc (struct callback_locals *locals) { struct rofile rof; /* Open the current process' maps file. It describes one VMA per line. On FreeBSD: Cf. <https://www.freebsd.org/cgi/cvsweb.cgi/src/sys/fs/procfs/procfs_map.c?annotate=HEAD> On NetBSD, there are two such files: - /proc/curproc/map in near-FreeBSD syntax, - /proc/curproc/maps in Linux syntax. Cf. <http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/miscfs/procfs/procfs_map.c?rev=HEAD> */ if (rof_open (&rof, "/proc/curproc/map") >= 0) { uintptr_t auxmap_start = rof.auxmap_start; uintptr_t auxmap_end = rof.auxmap_end; for (;;) { uintptr_t start, end; int c; /* Parse one line. First start. */ if (!(rof_getchar (&rof) == '0' && rof_getchar (&rof) == 'x' && rof_scanf_lx (&rof, &start) >= 0)) break; while (c = rof_peekchar (&rof), c == ' ' || c == '\t') rof_getchar (&rof); /* Then end. */ if (!(rof_getchar (&rof) == '0' && rof_getchar (&rof) == 'x' && rof_scanf_lx (&rof, &end) >= 0)) break; while (c = rof_getchar (&rof), c != -1 && c != '\n') ; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (locals, start, auxmap_start)) break; if (auxmap_end - 1 < end - 1) if (callback (locals, auxmap_end, end)) break; } else { if (callback (locals, start, end)) break; } } rof_close (&rof); return 0; } return -1; } # endif # if (defined __FreeBSD_kernel__ || defined __FreeBSD__) && defined KERN_PROC_VMMAP /* FreeBSD >= 7.1 */ # include <sys/user.h> /* struct kinfo_vmentry */ # include <sys/sysctl.h> /* sysctl */ static int vma_iterate_bsd (struct callback_locals *locals) { /* Documentation: https://www.freebsd.org/cgi/man.cgi?sysctl(3) */ int info_path[] = { CTL_KERN, KERN_PROC, KERN_PROC_VMMAP, getpid () }; size_t len; size_t pagesize; size_t memneed; void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; char *mem; char *p; char *p_end; len = 0; if (sysctl (info_path, 4, NULL, &len, NULL, 0) < 0) return -1; /* Allow for small variations over time. In a multithreaded program new VMAs can be allocated at any moment. */ len = 2 * len + 200; /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ pagesize = getpagesize (); memneed = len; memneed = ((memneed - 1) / pagesize + 1) * pagesize; auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (auxmap == (void *) -1) return -1; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; mem = (char *) auxmap; if (sysctl (info_path, 4, mem, &len, NULL, 0) < 0) { munmap (auxmap, memneed); return -1; } p = mem; p_end = mem + len; while (p < p_end) { struct kinfo_vmentry *kve = (struct kinfo_vmentry *) p; unsigned long start = kve->kve_start; unsigned long end = kve->kve_end; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (locals, start, auxmap_start)) break; if (auxmap_end - 1 < end - 1) if (callback (locals, auxmap_end, end)) break; } else { if (callback (locals, start, end)) break; } p += kve->kve_structsize; } munmap (auxmap, memneed); return 0; } # else # define vma_iterate_bsd(locals) (-1) # endif /* Iterate over the virtual memory areas of the current process. If such iteration is supported, the callback is called once for every virtual memory area, in ascending order, with the following arguments: - LOCALS is the same argument as passed to vma_iterate. - START is the address of the first byte in the area, page-aligned. - END is the address of the last byte in the area plus 1, page-aligned. Note that it may be 0 for the last area in the address space. If the callback returns 0, the iteration continues. If it returns 1, the iteration terminates prematurely. This function may open file descriptors, but does not call malloc(). Return 0 if all went well, or -1 in case of error. */ static int vma_iterate (struct callback_locals *locals) { # if defined __FreeBSD__ /* On FreeBSD with procfs (but not GNU/kFreeBSD, which uses linprocfs), the function vma_iterate_proc does not return the virtual memory areas that were created by anonymous mmap. See <https://svnweb.freebsd.org/base/head/sys/fs/procfs/procfs_map.c?view=markup> So use vma_iterate_proc only as a fallback. */ int retval = vma_iterate_bsd (locals); if (retval == 0) return 0; return vma_iterate_proc (locals); # else /* On the other platforms, try the /proc approach first, and the sysctl() as a fallback. */ int retval = vma_iterate_proc (locals); if (retval == 0) return 0; return vma_iterate_bsd (locals); # endif } #endif /* =========================== stackvma-mincore.c =========================== */ /* mincore() is a system call that allows to inquire the status of a range of pages of virtual memory. In particular, it allows to inquire whether a page is mapped at all (except on Mac OS X, where mincore returns 0 even for unmapped addresses). As of 2006, mincore() is supported by: possible bits: - Linux, since Linux 2.4 and glibc 2.2, 1 - Solaris, since Solaris 9, 1 - MacOS X, since MacOS X 10.3 (at least), 1 - FreeBSD, since FreeBSD 6.0, MINCORE_{INCORE,REFERENCED,MODIFIED} - NetBSD, since NetBSD 3.0 (at least), 1 - OpenBSD, since OpenBSD 2.6 (at least), 1 - AIX, since AIX 5.3, 1 As of 2019, also on - Hurd. However, while the API allows to easily determine the bounds of mapped virtual memory, it does not make it easy to find the bounds of _unmapped_ virtual memory ranges. We try to work around this, but it may still be slow. */ #if defined __linux__ || defined __ANDROID__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ /* || defined __OpenBSD__ */ \ /* || (defined __APPLE__ && defined __MACH__) */ \ || defined _AIX || defined __sun # include <unistd.h> /* getpagesize, mincore */ # include <sys/types.h> # include <sys/mman.h> /* mincore */ /* The AIX declaration of mincore() uses 'caddr_t', whereas the other platforms use 'void *'. */ # ifdef _AIX typedef caddr_t MINCORE_ADDR_T; # else typedef void* MINCORE_ADDR_T; # endif /* The glibc and musl declaration of mincore() uses 'unsigned char *', whereas the BSD declaration uses 'char *'. */ # if __GLIBC__ >= 2 || defined __linux__ || defined __ANDROID__ typedef unsigned char pageinfo_t; # else typedef char pageinfo_t; # endif /* Cache for getpagesize(). */ static uintptr_t pagesize; /* Initialize pagesize. */ static void init_pagesize (void) { pagesize = getpagesize (); } /* Test whether the page starting at ADDR is among the address range. ADDR must be a multiple of pagesize. */ static int is_mapped (uintptr_t addr) { pageinfo_t vec[1]; return mincore ((MINCORE_ADDR_T) addr, pagesize, vec) >= 0; } /* Assuming that the page starting at ADDR is among the address range, return the start of its virtual memory range. ADDR must be a multiple of pagesize. */ static uintptr_t mapped_range_start (uintptr_t addr) { /* Use a moderately sized VEC here, small enough that it fits on the stack (without requiring malloc). */ pageinfo_t vec[1024]; uintptr_t stepsize = sizeof (vec); for (;;) { uintptr_t max_remaining; if (addr == 0) return addr; max_remaining = addr / pagesize; if (stepsize > max_remaining) stepsize = max_remaining; if (mincore ((MINCORE_ADDR_T) (addr - stepsize * pagesize), stepsize * pagesize, vec) < 0) /* Time to search in smaller steps. */ break; /* The entire range exists. Continue searching in large steps. */ addr -= stepsize * pagesize; } for (;;) { uintptr_t halfstepsize1; uintptr_t halfstepsize2; if (stepsize == 1) return addr; /* Here we know that less than stepsize pages exist starting at addr. */ halfstepsize1 = (stepsize + 1) / 2; halfstepsize2 = stepsize / 2; /* halfstepsize1 + halfstepsize2 = stepsize. */ if (mincore ((MINCORE_ADDR_T) (addr - halfstepsize1 * pagesize), halfstepsize1 * pagesize, vec) < 0) stepsize = halfstepsize1; else { addr -= halfstepsize1 * pagesize; stepsize = halfstepsize2; } } } /* Assuming that the page starting at ADDR is among the address range, return the end of its virtual memory range + 1. ADDR must be a multiple of pagesize. */ static uintptr_t mapped_range_end (uintptr_t addr) { /* Use a moderately sized VEC here, small enough that it fits on the stack (without requiring malloc). */ pageinfo_t vec[1024]; uintptr_t stepsize = sizeof (vec); addr += pagesize; for (;;) { uintptr_t max_remaining; if (addr == 0) /* wrapped around? */ return addr; max_remaining = (- addr) / pagesize; if (stepsize > max_remaining) stepsize = max_remaining; if (mincore ((MINCORE_ADDR_T) addr, stepsize * pagesize, vec) < 0) /* Time to search in smaller steps. */ break; /* The entire range exists. Continue searching in large steps. */ addr += stepsize * pagesize; } for (;;) { uintptr_t halfstepsize1; uintptr_t halfstepsize2; if (stepsize == 1) return addr; /* Here we know that less than stepsize pages exist starting at addr. */ halfstepsize1 = (stepsize + 1) / 2; halfstepsize2 = stepsize / 2; /* halfstepsize1 + halfstepsize2 = stepsize. */ if (mincore ((MINCORE_ADDR_T) addr, halfstepsize1 * pagesize, vec) < 0) stepsize = halfstepsize1; else { addr += halfstepsize1 * pagesize; stepsize = halfstepsize2; } } } /* Determine whether an address range [ADDR1..ADDR2] is completely unmapped. ADDR1 must be <= ADDR2. */ static int is_unmapped (uintptr_t addr1, uintptr_t addr2) { uintptr_t count; uintptr_t stepsize; /* Round addr1 down. */ addr1 = (addr1 / pagesize) * pagesize; /* Round addr2 up and turn it into an exclusive bound. */ addr2 = ((addr2 / pagesize) + 1) * pagesize; /* This is slow: mincore() does not provide a way to determine the bounds of the gaps directly. So we have to use mincore() on individual pages over and over again. Only after we've verified that all pages are unmapped, we know that the range is completely unmapped. If we were to traverse the pages from bottom to top or from top to bottom, it would be slow even in the average case. To speed up the search, we exploit the fact that mapped memory ranges are larger than one page on average, therefore we have good chances of hitting a mapped area if we traverse only every second, or only fourth page, etc. This doesn't decrease the worst-case runtime, only the average runtime. */ count = (addr2 - addr1) / pagesize; /* We have to test is_mapped (addr1 + i * pagesize) for 0 <= i < count. */ for (stepsize = 1; stepsize < count; ) stepsize = 2 * stepsize; for (;;) { uintptr_t addr_stepsize; uintptr_t i; uintptr_t addr; stepsize = stepsize / 2; if (stepsize == 0) break; addr_stepsize = stepsize * pagesize; for (i = stepsize, addr = addr1 + addr_stepsize; i < count; i += 2 * stepsize, addr += 2 * addr_stepsize) /* Here addr = addr1 + i * pagesize. */ if (is_mapped (addr)) return 0; } return 1; } # if STACK_DIRECTION < 0 /* Info about the gap between this VMA and the previous one. addr must be < vma->start. */ static int mincore_is_near_this (uintptr_t addr, struct vma_struct *vma) { /* vma->start - addr <= (vma->start - vma->prev_end) / 2 is mathematically equivalent to vma->prev_end <= 2 * addr - vma->start <==> is_unmapped (2 * addr - vma->start, vma->start - 1). But be careful about overflow: if 2 * addr - vma->start is negative, we consider a tiny "guard page" mapping [0, 0] to be present around NULL; it intersects the range (2 * addr - vma->start, vma->start - 1), therefore return false. */ uintptr_t testaddr = addr - (vma->start - addr); if (testaddr > addr) /* overflow? */ return 0; /* Here testaddr <= addr < vma->start. */ return is_unmapped (testaddr, vma->start - 1); } # endif # if STACK_DIRECTION > 0 /* Info about the gap between this VMA and the next one. addr must be > vma->end - 1. */ static int mincore_is_near_this (uintptr_t addr, struct vma_struct *vma) { /* addr - vma->end < (vma->next_start - vma->end) / 2 is mathematically equivalent to vma->next_start > 2 * addr - vma->end <==> is_unmapped (vma->end, 2 * addr - vma->end). But be careful about overflow: if 2 * addr - vma->end is > ~0UL, we consider a tiny "guard page" mapping [0, 0] to be present around NULL; it intersects the range (vma->end, 2 * addr - vma->end), therefore return false. */ uintptr_t testaddr = addr + (addr - vma->end); if (testaddr < addr) /* overflow? */ return 0; /* Here vma->end - 1 < addr <= testaddr. */ return is_unmapped (vma->end, testaddr); } # endif static int mincore_get_vma (uintptr_t address, struct vma_struct *vma) { if (pagesize == 0) init_pagesize (); address = (address / pagesize) * pagesize; vma->start = mapped_range_start (address); vma->end = mapped_range_end (address); vma->is_near_this = mincore_is_near_this; return 0; } #endif /* ========================================================================== */ /* ---------------------------- stackvma-linux.c ---------------------------- */ #if defined __linux__ || defined __ANDROID__ /* Linux */ struct callback_locals { uintptr_t address; struct vma_struct *vma; # if STACK_DIRECTION < 0 uintptr_t prev; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { # if STACK_DIRECTION < 0 if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->vma->prev_end = locals->prev; locals->retval = 0; return 1; } locals->prev = end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = start; locals->stop_at_next_vma = 0; return 1; } if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif return 0; } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; # if STACK_DIRECTION < 0 locals.prev = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } return mincore_get_vma (address, vma); } /* --------------------------- stackvma-freebsd.c --------------------------- */ #elif defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ /* GNU/kFreeBSD, FreeBSD */ struct callback_locals { uintptr_t address; struct vma_struct *vma; /* The stack appears as multiple adjacents segments, therefore we merge adjacent segments. */ uintptr_t curr_start, curr_end; # if STACK_DIRECTION < 0 uintptr_t prev_end; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { if (start == locals->curr_end) { /* Merge adjacent segments. */ locals->curr_end = end; return 0; } # if STACK_DIRECTION < 0 if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->vma->prev_end = locals->prev_end; locals->retval = 0; return 1; } locals->prev_end = locals->curr_end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = locals->curr_start; locals->stop_at_next_vma = 0; return 1; } if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif locals->curr_start = start; locals->curr_end = end; return 0; } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; locals.curr_start = 0; locals.curr_end = 0; # if STACK_DIRECTION < 0 locals.prev_end = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval < 0) { if (locals.curr_start < locals.curr_end && address >= locals.curr_start && address <= locals.curr_end - 1) { vma->start = locals.curr_start; vma->end = locals.curr_end; # if STACK_DIRECTION < 0 vma->prev_end = locals.prev_end; # else vma->next_start = 0; # endif locals.retval = 0; } } if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } /* FreeBSD 6.[01] doesn't allow to distinguish unmapped pages from mapped but swapped-out pages. See whether it's fixed. */ if (!is_mapped (0)) /* OK, mincore() appears to work as expected. */ return mincore_get_vma (address, vma); return -1; } /* --------------------------- stackvma-netbsd.c --------------------------- */ #elif defined __NetBSD__ /* NetBSD */ struct callback_locals { uintptr_t address; struct vma_struct *vma; /* The stack appears as multiple adjacents segments, therefore we merge adjacent segments. */ uintptr_t curr_start, curr_end; # if STACK_DIRECTION < 0 uintptr_t prev_end; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { if (start == locals->curr_end) { /* Merge adjacent segments. */ locals->curr_end = end; return 0; } # if STACK_DIRECTION < 0 if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->vma->prev_end = locals->prev_end; locals->retval = 0; return 1; } locals->prev_end = locals->curr_end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = locals->curr_start; locals->stop_at_next_vma = 0; return 1; } if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif locals->curr_start = start; locals->curr_end = end; return 0; } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; locals.curr_start = 0; locals.curr_end = 0; # if STACK_DIRECTION < 0 locals.prev_end = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval < 0) { if (locals.curr_start < locals.curr_end && address >= locals.curr_start && address <= locals.curr_end - 1) { vma->start = locals.curr_start; vma->end = locals.curr_end; # if STACK_DIRECTION < 0 vma->prev_end = locals.prev_end; # else vma->next_start = 0; # endif locals.retval = 0; } } if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } return mincore_get_vma (address, vma); } /* --------------------------- stackvma-mquery.c --------------------------- */ /* mquery() is a system call that allows to inquire the status of a range of pages of virtual memory. In particular, it allows to inquire whether a page is mapped at all, and where is the next unmapped page after a given address. As of 2021, mquery() is supported by: - OpenBSD, since OpenBSD 3.4. Note that this file can give different results. For example, on OpenBSD 4.4 / i386 the stack segment (which starts around 0xcdbfe000) ends at 0xcfbfdfff according to mincore, but at 0xffffffff according to mquery. */ #elif defined __OpenBSD__ /* OpenBSD */ # include <unistd.h> /* getpagesize, mincore */ # include <sys/types.h> # include <sys/mman.h> /* mincore */ /* Cache for getpagesize(). */ static uintptr_t pagesize; /* Initialize pagesize. */ static void init_pagesize (void) { pagesize = getpagesize (); } /* Test whether the page starting at ADDR is among the address range. ADDR must be a multiple of pagesize. */ static int is_mapped (uintptr_t addr) { /* Avoid calling mquery with a NULL first argument, because this argument value has a specific meaning. We know the NULL page is unmapped. */ if (addr == 0) return 0; return mquery ((void *) addr, pagesize, 0, MAP_FIXED, -1, 0) == (void *) -1; } /* Assuming that the page starting at ADDR is among the address range, return the start of its virtual memory range. ADDR must be a multiple of pagesize. */ static uintptr_t mapped_range_start (uintptr_t addr) { uintptr_t stepsize; uintptr_t known_unmapped_page; /* Look at smaller addresses, in larger and larger steps, to minimize the number of mquery() calls. */ stepsize = pagesize; for (;;) { uintptr_t hole; if (addr == 0) abort (); if (addr <= stepsize) { known_unmapped_page = 0; break; } hole = (uintptr_t) mquery ((void *) (addr - stepsize), pagesize, 0, 0, -1, 0); if (!(hole == (uintptr_t) (void *) -1 || hole >= addr)) { /* Some part of [addr - stepsize, addr - 1] is unmapped. */ known_unmapped_page = hole; break; } /* The entire range [addr - stepsize, addr - 1] is mapped. */ addr -= stepsize; if (2 * stepsize > stepsize && 2 * stepsize < addr) stepsize = 2 * stepsize; } /* Now reduce the step size again. We know that the page at known_unmapped_page is unmapped and that 0 < addr - known_unmapped_page <= stepsize. */ while (stepsize > pagesize && stepsize / 2 >= addr - known_unmapped_page) stepsize = stepsize / 2; /* Still 0 < addr - known_unmapped_page <= stepsize. */ while (stepsize > pagesize) { uintptr_t hole; stepsize = stepsize / 2; hole = (uintptr_t) mquery ((void *) (addr - stepsize), pagesize, 0, 0, -1, 0); if (!(hole == (uintptr_t) (void *) -1 || hole >= addr)) /* Some part of [addr - stepsize, addr - 1] is unmapped. */ known_unmapped_page = hole; else /* The entire range [addr - stepsize, addr - 1] is mapped. */ addr -= stepsize; /* Still 0 < addr - known_unmapped_page <= stepsize. */ } return addr; } /* Assuming that the page starting at ADDR is among the address range, return the end of its virtual memory range + 1. ADDR must be a multiple of pagesize. */ static uintptr_t mapped_range_end (uintptr_t addr) { uintptr_t end; if (addr == 0) abort (); end = (uintptr_t) mquery ((void *) addr, pagesize, 0, 0, -1, 0); if (end == (uintptr_t) (void *) -1) end = 0; /* wrap around */ return end; } /* Determine whether an address range [ADDR1..ADDR2] is completely unmapped. ADDR1 must be <= ADDR2. */ static int is_unmapped (uintptr_t addr1, uintptr_t addr2) { /* Round addr1 down. */ addr1 = (addr1 / pagesize) * pagesize; /* Round addr2 up and turn it into an exclusive bound. */ addr2 = ((addr2 / pagesize) + 1) * pagesize; /* Avoid calling mquery with a NULL first argument, because this argument value has a specific meaning. We know the NULL page is unmapped. */ if (addr1 == 0) addr1 = pagesize; if (addr1 < addr2) { if (mquery ((void *) addr1, addr2 - addr1, 0, MAP_FIXED, -1, 0) == (void *) -1) /* Not all the interval [addr1 .. addr2 - 1] is unmapped. */ return 0; else /* The interval [addr1 .. addr2 - 1] is unmapped. */ return 1; } return 1; } # if STACK_DIRECTION < 0 /* Info about the gap between this VMA and the previous one. addr must be < vma->start. */ static int mquery_is_near_this (uintptr_t addr, struct vma_struct *vma) { /* vma->start - addr <= (vma->start - vma->prev_end) / 2 is mathematically equivalent to vma->prev_end <= 2 * addr - vma->start <==> is_unmapped (2 * addr - vma->start, vma->start - 1). But be careful about overflow: if 2 * addr - vma->start is negative, we consider a tiny "guard page" mapping [0, 0] to be present around NULL; it intersects the range (2 * addr - vma->start, vma->start - 1), therefore return false. */ uintptr_t testaddr = addr - (vma->start - addr); if (testaddr > addr) /* overflow? */ return 0; /* Here testaddr <= addr < vma->start. */ return is_unmapped (testaddr, vma->start - 1); } # endif # if STACK_DIRECTION > 0 /* Info about the gap between this VMA and the next one. addr must be > vma->end - 1. */ static int mquery_is_near_this (uintptr_t addr, struct vma_struct *vma) { /* addr - vma->end < (vma->next_start - vma->end) / 2 is mathematically equivalent to vma->next_start > 2 * addr - vma->end <==> is_unmapped (vma->end, 2 * addr - vma->end). But be careful about overflow: if 2 * addr - vma->end is > ~0UL, we consider a tiny "guard page" mapping [0, 0] to be present around NULL; it intersects the range (vma->end, 2 * addr - vma->end), therefore return false. */ uintptr_t testaddr = addr + (addr - vma->end); if (testaddr < addr) /* overflow? */ return 0; /* Here vma->end - 1 < addr <= testaddr. */ return is_unmapped (vma->end, testaddr); } # endif int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { if (pagesize == 0) init_pagesize (); address = (address / pagesize) * pagesize; vma->start = mapped_range_start (address); vma->end = mapped_range_end (address); vma->is_near_this = mquery_is_near_this; return 0; } /* ---------------------------- stackvma-mach.c ---------------------------- */ #elif (defined __APPLE__ && defined __MACH__) /* macOS */ #include <libc.h> #include <nlist.h> #include <mach/mach.h> #include <mach/machine/vm_param.h> int sigsegv_get_vma (uintptr_t req_address, struct vma_struct *vma) { uintptr_t prev_address = 0, prev_size = 0; uintptr_t join_address = 0, join_size = 0; int more = 1; vm_address_t address; vm_size_t size; task_t task = mach_task_self (); for (address = VM_MIN_ADDRESS; more; address += size) { mach_port_t object_name; /* In MacOS X 10.5, the types vm_address_t, vm_offset_t, vm_size_t have 32 bits in 32-bit processes and 64 bits in 64-bit processes. Whereas mach_vm_address_t and mach_vm_size_t are always 64 bits large. MacOS X 10.5 has three vm_region like methods: - vm_region. It has arguments that depend on whether the current process is 32-bit or 64-bit. When linking dynamically, this function exists only in 32-bit processes. Therefore we use it only in 32-bit processes. - vm_region_64. It has arguments that depend on whether the current process is 32-bit or 64-bit. It interprets a flavor VM_REGION_BASIC_INFO as VM_REGION_BASIC_INFO_64, which is dangerous since 'struct vm_region_basic_info_64' is larger than 'struct vm_region_basic_info'; therefore let's write VM_REGION_BASIC_INFO_64 explicitly. - mach_vm_region. It has arguments that are 64-bit always. This function is useful when you want to access the VM of a process other than the current process. In 64-bit processes, we could use vm_region_64 or mach_vm_region. I choose vm_region_64 because it uses the same types as vm_region, resulting in less conditional code. */ # if defined __aarch64__ || defined __ppc64__ || defined __x86_64__ struct vm_region_basic_info_64 info; mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT_64; more = (vm_region_64 (task, &address, &size, VM_REGION_BASIC_INFO_64, (vm_region_info_t)&info, &info_count, &object_name) == KERN_SUCCESS); # else struct vm_region_basic_info info; mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT; more = (vm_region (task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)&info, &info_count, &object_name) == KERN_SUCCESS); # endif if (!more) { address = join_address + join_size; size = 0; } if ((uintptr_t) address == join_address + join_size) join_size += size; else { prev_address = join_address; prev_size = join_size; join_address = (uintptr_t) address; join_size = size; } if (object_name != MACH_PORT_NULL) mach_port_deallocate (mach_task_self (), object_name); # if STACK_DIRECTION < 0 if (join_address <= req_address && join_address + join_size > req_address) { vma->start = join_address; vma->end = join_address + join_size; vma->prev_end = prev_address + prev_size; vma->is_near_this = simple_is_near_this; return 0; } # else if (prev_address <= req_address && prev_address + prev_size > req_address) { vma->start = prev_address; vma->end = prev_address + prev_size; vma->next_start = join_address; vma->is_near_this = simple_is_near_this; return 0; } # endif } # if STACK_DIRECTION > 0 if (join_address <= req_address && join_address + size > req_address) { vma->start = prev_address; vma->end = prev_address + prev_size; vma->next_start = ~0UL; vma->is_near_this = simple_is_near_this; return 0; } # endif return -1; } /* -------------------------------------------------------------------------- */ #elif defined _AIX /* AIX */ int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { return mincore_get_vma (address, vma); } /* --------------------------- stackvma-procfs.h --------------------------- */ #elif defined __sgi || defined __sun /* IRIX, Solaris */ # include <errno.h> /* errno, EINTR */ # include <fcntl.h> /* open, O_RDONLY */ # include <stddef.h> /* size_t */ # include <unistd.h> /* getpagesize, getpid, read, close */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ # include <sys/stat.h> /* fstat */ # include <string.h> /* memcpy */ /* Try to use the newer ("structured") /proc filesystem API, if supported. */ # define _STRUCTURED_PROC 1 # include <sys/procfs.h> /* prmap_t, optionally PIOC* */ # if !defined __sun /* Cache for getpagesize(). */ static uintptr_t pagesize; /* Initialize pagesize. */ static void init_pagesize (void) { pagesize = getpagesize (); } # endif struct callback_locals { uintptr_t address; struct vma_struct *vma; # if STACK_DIRECTION < 0 uintptr_t prev; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { # if STACK_DIRECTION < 0 if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->vma->prev_end = locals->prev; locals->retval = 0; return 1; } locals->prev = end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = start; locals->stop_at_next_vma = 0; return 1; } if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif return 0; } /* Iterate over the virtual memory areas of the current process. If such iteration is supported, the callback is called once for every virtual memory area, in ascending order, with the following arguments: - LOCALS is the same argument as passed to vma_iterate. - START is the address of the first byte in the area, page-aligned. - END is the address of the last byte in the area plus 1, page-aligned. Note that it may be 0 for the last area in the address space. If the callback returns 0, the iteration continues. If it returns 1, the iteration terminates prematurely. This function may open file descriptors, but does not call malloc(). Return 0 if all went well, or -1 in case of error. */ /* This code is a simplified copy (no handling of protection flags) of the code in gnulib's lib/vma-iter.c. */ static int vma_iterate (struct callback_locals *locals) { /* Note: Solaris <sys/procfs.h> defines a different type prmap_t with _STRUCTURED_PROC than without! Here's a table of sizeof(prmap_t): 32-bit 64-bit _STRUCTURED_PROC = 0 32 56 _STRUCTURED_PROC = 1 96 104 Therefore, if the include files provide the newer API, prmap_t has the bigger size, and thus you MUST use the newer API. And if the include files provide the older API, prmap_t has the smaller size, and thus you MUST use the older API. */ # if defined PIOCNMAP && defined PIOCMAP /* We must use the older /proc interface. */ char fnamebuf[6+10+1]; char *fname; int fd; int nmaps; size_t memneed; # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS # else /* !HAVE_MAP_ANONYMOUS */ int zero_fd; # define map_flags 0 # endif void *auxmap; uintptr_t auxmap_start; uintptr_t auxmap_end; prmap_t* maps; prmap_t* mp; if (pagesize == 0) init_pagesize (); /* Construct fname = sprintf (fnamebuf+i, "/proc/%u", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - 1; *fname = '\0'; { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); fd = open (fname, O_RDONLY); if (fd < 0) return -1; if (ioctl (fd, PIOCNMAP, &nmaps) < 0) goto fail2; memneed = (nmaps + 10) * sizeof (prmap_t); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ memneed = ((memneed - 1) / pagesize + 1) * pagesize; # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY, 0644); if (zero_fd < 0) goto fail2; # endif auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, map_flags | MAP_PRIVATE, zero_fd, 0); # if !HAVE_MAP_ANONYMOUS close (zero_fd); # endif if (auxmap == (void *) -1) goto fail2; auxmap_start = (uintptr_t) auxmap; auxmap_end = auxmap_start + memneed; maps = (prmap_t *) auxmap; if (ioctl (fd, PIOCMAP, maps) < 0) goto fail1; for (mp = maps;;) { uintptr_t start, end; start = (uintptr_t) mp->pr_vaddr; end = start + mp->pr_size; if (start == 0 && end == 0) break; mp++; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (locals, start, auxmap_start)) break; if (auxmap_end - 1 < end - 1) if (callback (locals, auxmap_end, end)) break; } else { if (callback (locals, start, end)) break; } } munmap (auxmap, memneed); close (fd); return 0; fail1: munmap (auxmap, memneed); fail2: close (fd); return -1; # else /* We must use the newer /proc interface. Documentation: https://docs.oracle.com/cd/E23824_01/html/821-1473/proc-4.html The contents of /proc/<pid>/map consists of records of type prmap_t. These are different in 32-bit and 64-bit processes, but here we are fortunately accessing only the current process. */ char fnamebuf[6+10+4+1]; char *fname; int fd; int nmaps; size_t memneed; # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS # else /* !HAVE_MAP_ANONYMOUS */ int zero_fd; # define map_flags 0 # endif void *auxmap; uintptr_t auxmap_start; uintptr_t auxmap_end; prmap_t* maps; prmap_t* maps_end; prmap_t* mp; if (pagesize == 0) init_pagesize (); /* Construct fname = sprintf (fnamebuf+i, "/proc/%u/map", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - 1 - 4; memcpy (fname, "/map", 4 + 1); { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); fd = open (fname, O_RDONLY); if (fd < 0) return -1; { struct stat statbuf; if (fstat (fd, &statbuf) < 0) goto fail2; nmaps = statbuf.st_size / sizeof (prmap_t); } memneed = (nmaps + 10) * sizeof (prmap_t); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ memneed = ((memneed - 1) / pagesize + 1) * pagesize; # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY, 0644); if (zero_fd < 0) goto fail2; # endif auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, map_flags | MAP_PRIVATE, zero_fd, 0); # if !HAVE_MAP_ANONYMOUS close (zero_fd); # endif if (auxmap == (void *) -1) goto fail2; auxmap_start = (uintptr_t) auxmap; auxmap_end = auxmap_start + memneed; maps = (prmap_t *) auxmap; /* Read up to memneed bytes from fd into maps. */ { size_t remaining = memneed; size_t total_read = 0; char *ptr = (char *) maps; do { size_t nread = read (fd, ptr, remaining); if (nread == (size_t)-1) { if (errno == EINTR) continue; goto fail1; } if (nread == 0) /* EOF */ break; total_read += nread; ptr += nread; remaining -= nread; } while (remaining > 0); nmaps = (memneed - remaining) / sizeof (prmap_t); maps_end = maps + nmaps; } for (mp = maps; mp < maps_end; mp++) { uintptr_t start, end; start = (uintptr_t) mp->pr_vaddr; end = start + mp->pr_size; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (locals, start, auxmap_start)) break; if (auxmap_end - 1 < end - 1) if (callback (locals, auxmap_end, end)) break; } else { if (callback (locals, start, end)) break; } } munmap (auxmap, memneed); close (fd); return 0; fail1: munmap (auxmap, memneed); fail2: close (fd); return -1; # endif } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; # if STACK_DIRECTION < 0 locals.prev = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } # if defined __sun return mincore_get_vma (address, vma); # else return -1; # endif } /* -------------------------------------------------------------------------- */ #elif defined __CYGWIN__ /* Cygwin */ struct callback_locals { uintptr_t address; struct vma_struct *vma; /* The stack appears as three adjacents segments, therefore we merge adjacent segments. */ uintptr_t curr_start, curr_end; # if STACK_DIRECTION < 0 uintptr_t prev_end; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { if (start == locals->curr_end) { /* Merge adjacent segments. */ locals->curr_end = end; return 0; } # if STACK_DIRECTION < 0 if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->vma->prev_end = locals->prev_end; locals->retval = 0; return 1; } locals->prev_end = locals->curr_end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = locals->curr_start; locals->stop_at_next_vma = 0; return 1; } if (locals->curr_start < locals->curr_end && locals->address >= locals->curr_start && locals->address <= locals->curr_end - 1) { locals->vma->start = locals->curr_start; locals->vma->end = locals->curr_end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif locals->curr_start = start; locals->curr_end = end; return 0; } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; locals.curr_start = 0; locals.curr_end = 0; # if STACK_DIRECTION < 0 locals.prev_end = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval < 0) { if (locals.curr_start < locals.curr_end && address >= locals.curr_start && address <= locals.curr_end - 1) { vma->start = locals.curr_start; vma->end = locals.curr_end; # if STACK_DIRECTION < 0 vma->prev_end = locals.prev_end; # else vma->next_start = 0; # endif locals.retval = 0; } } if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } return -1; } /* ---------------------------- stackvma-beos.h ---------------------------- */ #elif defined __HAIKU__ /* Haiku */ # include <OS.h> /* get_next_area_info */ struct callback_locals { uintptr_t address; struct vma_struct *vma; # if STACK_DIRECTION < 0 uintptr_t prev; # else int stop_at_next_vma; # endif int retval; }; static int callback (struct callback_locals *locals, uintptr_t start, uintptr_t end) { # if STACK_DIRECTION < 0 if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->vma->prev_end = locals->prev; locals->retval = 0; return 1; } locals->prev = end; # else if (locals->stop_at_next_vma) { locals->vma->next_start = start; locals->stop_at_next_vma = 0; return 1; } if (locals->address >= start && locals->address <= end - 1) { locals->vma->start = start; locals->vma->end = end; locals->retval = 0; locals->stop_at_next_vma = 1; return 0; } # endif return 0; } /* Iterate over the virtual memory areas of the current process. If such iteration is supported, the callback is called once for every virtual memory area, in ascending order, with the following arguments: - LOCALS is the same argument as passed to vma_iterate. - START is the address of the first byte in the area, page-aligned. - END is the address of the last byte in the area plus 1, page-aligned. Note that it may be 0 for the last area in the address space. If the callback returns 0, the iteration continues. If it returns 1, the iteration terminates prematurely. This function may open file descriptors, but does not call malloc(). Return 0 if all went well, or -1 in case of error. */ /* This code is a simplified copy (no handling of protection flags) of the code in gnulib's lib/vma-iter.c. */ static int vma_iterate (struct callback_locals *locals) { area_info info; ssize_t cookie; cookie = 0; while (get_next_area_info (0, &cookie, &info) == B_OK) { uintptr_t start, end; start = (uintptr_t) info.address; end = start + info.size; if (callback (locals, start, end)) break; } return 0; } int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { struct callback_locals locals; locals.address = address; locals.vma = vma; # if STACK_DIRECTION < 0 locals.prev = 0; # else locals.stop_at_next_vma = 0; # endif locals.retval = -1; vma_iterate (&locals); if (locals.retval == 0) { # if !(STACK_DIRECTION < 0) if (locals.stop_at_next_vma) vma->next_start = 0; # endif vma->is_near_this = simple_is_near_this; return 0; } return -1; } /* -------------------------------------------------------------------------- */ #else /* Hurd, Minix, ... */ int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma) { /* No way. */ return -1; } #endif ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stackvma.h��������������������������������������������������������������0000664�0000000�0000000�00000004641�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the virtual memory area of a given address. Copyright (C) 2002-2021 Free Software Foundation, Inc. Copyright (C) 2003-2006 Paolo Bonzini <bonzini@gnu.org> This 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 2 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 and Paolo Bonzini. */ #ifndef _STACKVMA_H #define _STACKVMA_H #include <stdint.h> /* Describes a virtual memory area, with some info about the gap between it and the next or previous virtual memory area. */ struct vma_struct { uintptr_t start; uintptr_t end; #if STACK_DIRECTION < 0 /* Info about the gap between this VMA and the previous one. addr must be < vma->start. */ int (*is_near_this) (uintptr_t addr, struct vma_struct *vma); /* Private field, not provided by all sigsegv_get_vma implementations. */ uintptr_t prev_end; #endif #if STACK_DIRECTION > 0 /* Info about the gap between this VMA and the next one. addr must be > vma->end - 1. */ int (*is_near_this) (uintptr_t addr, struct vma_struct *vma); /* Private field, not provided by all sigsegv_get_vma implementations. */ uintptr_t next_start; #endif }; /* Determines the virtual memory area to which a given address belongs, and returns 0. Returns -1 if it cannot be determined. This function is used to determine the stack extent when a fault occurs. */ extern int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma); /* Defined if sigsegv_get_vma actually works (i.e. does not always fail). */ #if defined __linux__ || defined __ANDROID__ \ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ || defined __OpenBSD__ \ || (defined __APPLE__ && defined __MACH__) \ || defined _AIX || defined __sgi || defined __sun \ || defined __CYGWIN__ || defined __HAIKU__ # define HAVE_STACKVMA 1 #endif #endif /* _STACKVMA_H */ �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat-macros.h�����������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related macros Copyright (C) 1993-2021 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/>. */ /* All the mode bits that can be affected by chmod. */ #define CHMOD_MODE_BITS \ (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat-size.h�������������������������������������������������������������0000664�0000000�0000000�00000006775�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* macros useful in interpreting size-related values in struct stat. Copyright (C) 1989, 1991-2021 Free Software Foundation, Inc. This 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/>. */ /* Macros defined by this file (s is an rvalue of type struct stat): DEV_BSIZE: The device blocksize. But use ST_NBLOCKSIZE instead. ST_BLKSIZE(s): Preferred (in the sense of best performance) I/O blocksize for the file, in bytes. ST_NBLOCKS(s): Number of blocks in the file, including indirect blocks. ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */ #ifndef STAT_SIZE_H #define STAT_SIZE_H /* sys/param.h may define DEV_BSIZE */ #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif /* Get or fake the disk device blocksize. Usually defined by sys/param.h (if at all). */ #if !defined DEV_BSIZE && defined BSIZE # define DEV_BSIZE BSIZE #endif #if !defined DEV_BSIZE && defined BBSIZE /* SGI sys/param.h */ # define DEV_BSIZE BBSIZE #endif #ifndef DEV_BSIZE # define DEV_BSIZE 4096 #endif /* Extract or fake data from a 'struct stat'. ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes. ST_NBLOCKS: Number of blocks in the file, including indirect blocks. ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */ #ifndef HAVE_STRUCT_STAT_ST_BLOCKS # define ST_BLKSIZE(statbuf) DEV_BSIZE /* coreutils' fileblocks.c also uses BSIZE. */ # if defined _POSIX_SOURCE || !defined BSIZE # define ST_NBLOCKS(statbuf) \ ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0)) # else /* This definition calls st_blocks, which is in the fileblocks module. */ # define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) || S_ISDIR ((statbuf).st_mode) ? \ st_blocks ((statbuf).st_size) : 0) # endif #else /* When running 'rsh hpux11-system cat any-file', cat would determine that the output stream had an st_blksize of 2147421096. Conversely st_blksize can be 2 GiB (or maybe even larger) with XFS on 64-bit hosts. Somewhat arbitrarily, limit the "optimal" block size to SIZE_MAX / 8 + 1. (Dividing SIZE_MAX by only 4 wouldn't suffice, since "cat" sometimes multiplies the result by 4.) If anyone knows of a system for which this limit is too small, please report it as a bug in this code. */ # define ST_BLKSIZE(statbuf) ((0 < (statbuf).st_blksize \ && (statbuf).st_blksize <= ((size_t)-1) / 8 + 1) \ ? (statbuf).st_blksize : DEV_BSIZE) # if defined hpux || defined __hpux__ || defined __hpux /* HP-UX counts st_blocks in 1024-byte units. This loses when mixing HP-UX and BSD file systems with NFS. */ # define ST_NBLOCKSIZE 1024 # endif #endif #ifndef ST_NBLOCKS # define ST_NBLOCKS(statbuf) ((statbuf).st_blocks) #endif #ifndef ST_NBLOCKSIZE # ifdef S_BLKSIZE # define ST_NBLOCKSIZE S_BLKSIZE # else # define ST_NBLOCKSIZE 512 # endif #endif #endif /* STAT_SIZE_H */ ���gnulib-20210822~d383792/lib/stat-time.c�������������������������������������������������������������0000664�0000000�0000000�00000001520�14110572173�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE #include "stat-time.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat-time.h�������������������������������������������������������������0000664�0000000�0000000�00000017024�14110572173�0017131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2005, 2007, 2009-2021 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. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 #include "intprops.h" #include <errno.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 #endif #ifdef __cplusplus extern "C" { #endif /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim for access, status change, data modification, or birth (creation) time respectively. These macros are private to stat-time.h. */ #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) # 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) #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 # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) #endif /* Return the nanosecond component of *ST's access time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_atim); # else return 0; # endif } /* Return the nanosecond component of *ST's status change time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_ctim); # else return 0; # endif } /* Return the nanosecond component of *ST's data modification time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_mtim); # else return 0; # endif } /* Return the nanosecond component of *ST's birth time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC return STAT_TIMESPEC (st, st_birthtim).tv_nsec; # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC return STAT_TIMESPEC_NS (st, st_birthtim); # else return 0; # endif } /* Return *ST's access time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE 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; #endif } /* Return *ST's status change time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE 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; #endif } /* Return *ST's data modification time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE 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; #endif } /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_birthtime (_GL_UNUSED struct stat const *st) { struct timespec t; #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || 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; #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else t.tv_sec = st->st_ctime; t.tv_nsec = 0; # endif #else /* Birth time is not supported. */ t.tv_sec = -1; t.tv_nsec = -1; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) /* FreeBSD and NetBSD sometimes signal the absence of knowledge by using zero. Attempt to work around this problem. Alas, this can report failure even for valid timestamps. Also, NetBSD 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; } #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 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 (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) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); long int q = ts->tv_nsec / timespec_hz; long int r = ts->tv_nsec % timespec_hz; if (r < 0) { r += timespec_hz; q--; } 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. */ if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) { errno = EOVERFLOW; return -1; } } } #endif return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat-w32.c��������������������������������������������������������������0000664�0000000�0000000�00000044224�14110572173�0016603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2021 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> #if defined _WIN32 && ! defined __CYGWIN__ /* Attempt to make <windows.h> define FILE_ID_INFO. But ensure that the redefinition of _WIN32_WINNT does not make us assume Windows Vista or newer when building for an older version of Windows. */ #if HAVE_SDKDDKVER_H # include <sdkddkver.h> # if _WIN32_WINNT >= _WIN32_WINNT_VISTA # define WIN32_ASSUME_VISTA 1 # else # define WIN32_ASSUME_VISTA 0 # endif # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN8 # endif #else # define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) #endif #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <windows.h> /* Specification. */ #include "stat-w32.h" #include "pathmax.h" #include "verify.h" /* Don't assume that UNICODE is not defined. */ #undef LoadLibrary #define LoadLibrary LoadLibraryA #undef GetFinalPathNameByHandle #define GetFinalPathNameByHandle GetFinalPathNameByHandleA /* Older mingw headers do not define VOLUME_NAME_NONE. */ #ifndef VOLUME_NAME_NONE # define VOLUME_NAME_NONE 4 #endif #if !WIN32_ASSUME_VISTA /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress # if _GL_WINDOWS_STAT_INODES == 2 /* GetFileInformationByHandleEx was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS fiClass, LPVOID lpBuffer, DWORD dwBufferSize); static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; # endif /* GetFinalPathNameByHandle was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, LPSTR lpFilePath, DWORD lenFilePath, DWORD dwFlags); static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { # if _GL_WINDOWS_STAT_INODES == 2 GetFileInformationByHandleExFunc = (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); # endif GetFinalPathNameByHandleFunc = (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); } initialized = TRUE; } #else # define GetFileInformationByHandleExFunc GetFileInformationByHandleEx # define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle #endif /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft) { struct timespec result; /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) { result.tv_sec = 0; result.tv_nsec = 0; } else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; result.tv_sec = since_1970 / (unsigned long long) 10000000; result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; } return result; } #else time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft) { /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) return 0; else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; return since_1970 / (unsigned long long) 10000000; } } #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) { /* GetFileType <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */ DWORD type = GetFileType (h); if (type == FILE_TYPE_DISK) { #if !WIN32_ASSUME_VISTA if (!initialized) initialize (); #endif /* st_mode can be determined through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ BY_HANDLE_FILE_INFORMATION info; if (! GetFileInformationByHandle (h, &info)) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { errno = EOVERFLOW; return -1; } #if _GL_WINDOWS_STAT_INODES /* st_ino can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> as 64 bits, or through GetFileInformationByHandleEx with argument FileIdInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info> as 128 bits. The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ /* Experiments show that GetFileInformationByHandleEx does not provide much more information than GetFileInformationByHandle: * The dwVolumeSerialNumber from GetFileInformationByHandle is equal to the low 32 bits of the 64-bit VolumeSerialNumber from GetFileInformationByHandleEx, and is apparently sufficient for identifying the device. * The nFileIndex from GetFileInformationByHandle is equal to the low 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, and the high 64 bits of this 128-bit FileId are zero. * On a FAT file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle succeeds. * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle succeeds. */ # if _GL_WINDOWS_STAT_INODES == 2 if (GetFileInformationByHandleExFunc != NULL) { FILE_ID_INFO id; if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) { buf->st_dev = id.VolumeSerialNumber; verify (sizeof (ino_t) == sizeof (id.FileId)); memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); goto ino_done; } else { switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ goto fallback; default: goto failed; } } } fallback: ; /* Fallback for older Windows versions. */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; buf->st_ino._gl_ino[1] = 0; ino_done: ; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; # endif #else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; #endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. If the file name is already known, use it. Otherwise, for non-empty files, it can be determined through GetFinalPathNameByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea> or through GetFileInformationByHandleEx with argument FileNameInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info> Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { char fpath[PATH_MAX]; if (path != NULL || (GetFinalPathNameByHandleFunc != NULL && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) < sizeof (fpath) && (path = fpath, 1))) { const char *last_dot = NULL; const char *p; for (p = path; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } else /* Cannot determine file name. Pretend that it is executable. */ mode |= S_IEXEC_UGO; } } buf->st_mode = mode; /* st_nlink can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size can be determined through GetFileSizeEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime can be determined through GetFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); #else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); #endif return 0; } else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) { buf->st_dev = 0; #if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; #else buf->st_ino = 0; #endif buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; if (type == FILE_TYPE_PIPE) { /* PeekNamedPipe <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ DWORD bytes_available; if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) buf->st_size = bytes_available; else buf->st_size = 0; } else buf->st_size = 0; #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; #else buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; #endif return 0; } else { errno = ENOENT; return -1; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); #endif switch (error) { case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; default: errno = EINVAL; break; } return -1; } } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat-w32.h��������������������������������������������������������������0000664�0000000�0000000�00000003107�14110572173�0016603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2021 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/>. */ #ifndef _STAT_W32_H #define _STAT_W32_H 1 /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); #else extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); /* Bitmasks for st_mode. */ #define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) #define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) #define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) #endif /* _STAT_W32_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stat.c������������������������������������������������������������������0000664�0000000�0000000�00000032765�14110572173�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in stat. Copyright (C) 2009-2021 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 Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_stat doesn't recurse to rpl_stat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of stat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <limits.h> #include <stdbool.h> #include <string.h> #include "filename.h" #include "malloca.h" #include "verify.h" #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "stat-w32.h" /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef CreateFile # define CreateFile CreateFileA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif #ifdef WINDOWS_NATIVE /* Return TRUE if the given file name denotes an UNC root. */ static BOOL is_unc_root (const char *rname) { /* Test whether it has the syntax '\\server\share'. */ if (ISSLASH (rname[0]) && ISSLASH (rname[1])) { /* It starts with two slashes. Find the next slash. */ const char *p = rname + 2; const char *q = p; while (*q != '\0' && !ISSLASH (*q)) q++; if (q > p && *q != '\0') { /* Found the next slash at q. */ q++; const char *r = q; while (*r != '\0' && !ISSLASH (*r)) r++; if (r > q && *r == '\0') return TRUE; } } return FALSE; } #endif /* Store information about NAME into ST. Work around bugs with trailing slashes. Mingw has other bugs (such as st_ino always being 0 on success) which this wrapper does not work around. But at least this implementation provides the ability to emulate fchdir correctly. */ int rpl_stat (char const *name, struct stat *buf) { #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original stat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work around length limitations <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */ /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return -1; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return -1; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* There are two ways to get at the requested information: - by scanning the parent directory and examining the relevant directory entry, - by opening the file directly. The first approach fails for root directories (e.g. 'C:\') and UNC root directories (e.g. '\\server\share'). The second approach fails for some system files (e.g. 'C:\pagefile.sys' and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. The second approach gives more information (in particular, correct st_dev, st_ino, st_nlink fields). So we use the second approach and, as a fallback except for root and UNC root directories, also the first approach. */ { int ret; { /* Approach based on the file. */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE h = CreateFile (rname, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (h != INVALID_HANDLE_VALUE) { ret = _gl_fstat_by_handle (h, rname, buf); CloseHandle (h); goto done; } } /* Test for root and UNC root directories. */ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) || is_unc_root (rname)) goto failed; /* Fallback. */ { /* Approach based on the directory entry. */ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) { /* Other Windows API functions would fail with error ERROR_INVALID_NAME. */ if (malloca_rname != NULL) freea (malloca_rname); errno = ENOENT; return -1; } /* Get the details about the directory entry. This can be done through FindFirstFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> or through FindFirstFileEx with argument FindExInfoBasic <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */ WIN32_FIND_DATA info; HANDLE h = FindFirstFile (rname, &info); if (h == INVALID_HANDLE_VALUE) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { FindClose (h); if (malloca_rname != NULL) freea (malloca_rname); errno = EOVERFLOW; return -1; } # if _GL_WINDOWS_STAT_INODES buf->st_dev = 0; # if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_ino = 0; # endif # else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; # endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { const char *last_dot = NULL; const char *p; for (p = info.cFileName; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } } buf->st_mode = mode; /* st_nlink. Ignore hard links here. */ buf->st_nlink = 1; /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime. */ # if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); # else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); # endif FindClose (h); ret = 0; } done: if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) { errno = ENOTDIR; ret = -1; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return ret; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } #else int result = orig_stat (name, buf); if (result == 0) { # if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (!S_ISDIR (buf->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } # endif /* REPLACE_FUNC_STAT_FILE */ result = stat_time_normalize (result, buf); } return result; #endif } �����������gnulib-20210822~d383792/lib/statat.c����������������������������������������������������������������0000664�0000000�0000000�00000001473�14110572173�0016516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return info about a file at a directory. Copyright (C) 2012-2021 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 <config.h> #define STATAT_INLINE _GL_EXTERN_INLINE #include "openat.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdalign.in.h�����������������������������������������������������������0000664�0000000�0000000�00000011557�14110572173�0017441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C11 <stdalign.h>. Copyright 2011-2021 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. Include <stddef.h> for offsetof. */ #include <stddef.h> /* 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 # define _Alignof(type) alignof (type) # else template <class __t> struct __alignof_helper { char __a; __t __b; }; # define _Alignof(type) offsetof (__alignof_helper<type>, __b) # endif # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) # endif #endif #if ! (defined __cplusplus && 201103 <= __cplusplus) # 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 # 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 __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas #endif #if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) # define __alignas_is_defined 1 #endif #endif /* _GL_STDALIGN_H */ �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdarg.in.h�������������������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <stdarg.h>. Copyright (C) 2008-2021 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/>. */ #ifndef _@GUARD_PREFIX@_STDARG_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDARG_H@ #ifndef _@GUARD_PREFIX@_STDARG_H #define _@GUARD_PREFIX@_STDARG_H #ifndef va_copy # define va_copy(a,b) ((a) = (b)) #endif #endif /* _@GUARD_PREFIX@_STDARG_H */ #endif /* _@GUARD_PREFIX@_STDARG_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdbool.in.h������������������������������������������������������������0000664�0000000�0000000�00000012011�14110572173�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. 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 _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 <stdbool.h> for platforms that lack it. */ /* Usage suggestions: Programs that use <stdbool.h> should be aware of some limitations and standards compliance issues. Standards compliance: - <stdbool.h> must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - <stdbool.h> must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include <OS.h> /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if <stdbool.h> was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stddef.in.h�������������������������������������������������������������0000664�0000000�0000000�00000012034�14110572173�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2021 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 Eric Blake. */ /* * POSIX 2008 <stddef.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of <stddef.h> that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by <stddef.h>. Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On TinyCC, make sure that the macros that indicate the special invocation convention get undefined. */ # undef __need_wchar_t # undef __need_size_t # undef __need_ptrdiff_t # undef __need_NULL # undef __need_wint_t # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a type with alignment 4, but 'long' has alignment 8. */ # if defined _AIX && defined __LP64__ # if !GNULIB_defined_max_align_t # ifdef _MAX_ALIGN_T /* /usr/include/stddef.h has already defined max_align_t. Override it. */ typedef long rpl_max_align_t; # define max_align_t rpl_max_align_t # else /* Prevent /usr/include/stddef.h from defining max_align_t. */ typedef long max_align_t; # define _MAX_ALIGN_T # endif # define GNULIB_defined_max_align_t 1 # endif # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was included. Its definition is good since it has an alignment of 8 (on x86 and x86_64). Similarly on OS/2 kLIBC. */ #if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \ && defined __cplusplus # include <cstddef> #else # if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # if defined __GNUC__ || (__clang_major__ >= 4) # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdint.in.h�������������������������������������������������������������0000664�0000000�0000000�00000054754�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2002, 2004-2021 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. 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/>. */ /* * ISO C 99 <stdint.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html> */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes <inttypes.h>, use the system <inttypes.h>, not our substitute. This avoids problems with (for example) VMS, whose <sys/bitypes.h> includes <inttypes.h>. */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), <sys/types.h> includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's <stdint.h>. Ideally we should test __BIONIC__ here, but it is only defined after <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 <stdint.h> implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy <stdint.h>. Include it before <inttypes.h>, since any "#include <stdint.h>" in <inttypes.h> would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include <limits.h> /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides wint_t. */ #if @GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* <sys/types.h> defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). AIX 5.2 <sys/types.h> isn't needed and causes troubles. Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but relies on the system <stdint.h> definitions, so include <sys/types.h> after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include <sys/types.h> # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. <inttypes.h> also defines intptr_t and uintptr_t. */ # include <inttypes.h> # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include <sys/inttypes.h> # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by <sys/types.h>. */ # include <sys/bitypes.h> # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other <stdint.h> substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and uintptr_t to avoid conflicting declarations of system functions like _findclose in <io.h>. */ # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ || defined __MINGW32__) # undef intptr_t # undef uintptr_t # ifdef _WIN64 typedef long long int gl_intptr_t; typedef unsigned long long int gl_uintptr_t; # else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # endif # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # ifdef _WIN64 # define INTPTR_MIN LLONG_MIN # define INTPTR_MAX LLONG_MAX # define UINTPTR_MAX ULLONG_MAX # else # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX # endif /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes <stdint.h> and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include <wchar.h> # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not accurate, therefore use the definitions from above. */ # if !@GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ ��������������������gnulib-20210822~d383792/lib/stdio--.h���������������������������������������������������������������0000664�0000000�0000000�00000002207�14110572173�0016473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like stdio.h, but redefine some names to avoid glitches. Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <stdio.h> #include "stdio-safer.h" #if GNULIB_FOPEN_SAFER # undef fopen # define fopen fopen_safer #endif #if GNULIB_FREOPEN_SAFER # undef freopen # define freopen freopen_safer #endif #if GNULIB_TMPFILE_SAFER # undef tmpfile # define tmpfile tmpfile_safer #endif #if GNULIB_POPEN_SAFER # undef popen # define popen popen_safer #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdio-impl.h������������������������������������������������������������0000664�0000000�0000000�00000017553�14110572173�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implementation details of FILE streams. Copyright (C) 2007-2008, 2010-2021 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/>. */ /* Many stdio implementations have the same logic and therefore can share the same implementation of stdio extension API, except that some fields have different naming conventions, or their access requires some casts. */ /* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private. For now, work around this problem by defining them ourselves. FIXME: Do not rely on glibc internals. */ #if defined _IO_EOF_SEEN # if !defined _IO_UNBUFFERED # define _IO_UNBUFFERED 0x2 # endif # if !defined _IO_IN_BACKUP # define _IO_IN_BACKUP 0x100 # endif #endif /* BSD stdio derived implementations. */ #if defined __NetBSD__ /* NetBSD */ /* Get __NetBSD_Version__. */ # include <sys/param.h> #endif #include <errno.h> /* For detecting Plan9. */ #if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __DragonFly__ /* DragonFly */ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */ # define fp_ ((struct { struct __FILE_public pub; \ struct { unsigned char *_base; int _size; } _bf; \ void *cookie; \ void *_close; \ void *_read; \ void *_seek; \ void *_write; \ struct { unsigned char *_base; int _size; } _ub; \ int _ur; \ unsigned char _ubuf[3]; \ unsigned char _nbuf[1]; \ struct { unsigned char *_base; int _size; } _lb; \ int _blksize; \ fpos_t _offset; \ /* More fields, not relevant here. */ \ } *) fp) /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */ # define _p pub._p # define _flags pub._flags # define _r pub._r # define _w pub._w # elif defined __ANDROID__ /* Android */ # ifdef __LP64__ # define _gl_flags_file_t int # else # define _gl_flags_file_t short # endif /* Up to this commit from 2015-10-12 <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a> the innards of FILE were public, and fp_ub could be defined like for OpenBSD, see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h> and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>. After this commit, the innards of FILE are hidden. */ # define fp_ ((struct { unsigned char *_p; \ int _r; \ int _w; \ _gl_flags_file_t _flags; \ _gl_flags_file_t _file; \ struct { unsigned char *_base; size_t _size; } _bf; \ int _lbfsize; \ void *_cookie; \ void *_close; \ void *_read; \ void *_seek; \ void *_write; \ struct { unsigned char *_base; size_t _size; } _ext; \ unsigned char *_up; \ int _ur; \ unsigned char _ubuf[3]; \ unsigned char _nbuf[1]; \ struct { unsigned char *_base; size_t _size; } _lb; \ int _blksize; \ fpos_t _offset; \ /* More fields, not relevant here. */ \ } *) fp) # else # define fp_ fp # endif # if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */ /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */ struct __sfileext { struct __sbuf _ub; /* ungetc buffer */ /* More fields, not relevant here. */ }; # define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub # elif defined __ANDROID__ /* Android */ struct __sfileext { struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */ /* More fields, not relevant here. */ }; # define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub # else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */ # define fp_ub fp_->_ub # endif # define HASUB(fp) (fp_ub._base != NULL) # if defined __ANDROID__ /* Android */ /* Needed after this commit from 2016-01-25 <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */ # ifndef __SEOF # define __SLBF 1 # define __SNBF 2 # define __SRD 4 # define __SWR 8 # define __SRW 0x10 # define __SEOF 0x20 # define __SERR 0x40 # endif # ifndef __SOFF # define __SOFF 0x1000 # endif # endif #endif /* SystemV derived implementations. */ #ifdef __TANDEM /* NonStop Kernel */ # ifndef _IOERR /* These values were determined by the program 'stdioext-flags' at <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ # define _IOERR 0x40 # define _IOREAD 0x80 # define _IOWRT 0x4 # define _IORW 0x100 # endif #endif #if defined _IOERR # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ # define fp_ ((struct { unsigned char *_ptr; \ unsigned char *_base; \ unsigned char *_end; \ long _cnt; \ int _file; \ unsigned int _flag; \ } *) fp) # elif defined __VMS /* OpenVMS */ # define fp_ ((struct _iobuf *) fp) # else # define fp_ fp # endif # if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer 5, OpenServer 6, UnixWare 7 */ # define _cnt __cnt # define _ptr __ptr # define _base __base # define _flag __flag # endif #elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */ /* <stdio.h> does not define the innards of FILE any more. */ # define WINDOWS_OPAQUE_FILE struct _gl_real_FILE { /* Note: Compared to older Windows and to mingw, it has the fields _base and _cnt swapped. */ unsigned char *_ptr; unsigned char *_base; int _cnt; int _flag; int _file; int _charbuf; int _bufsiz; }; # define fp_ ((struct _gl_real_FILE *) fp) /* These values were determined by a program similar to the one at <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ # define _IOREAD 0x1 # define _IOWRT 0x2 # define _IORW 0x4 # define _IOEOF 0x8 # define _IOERR 0x10 #endif �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdio-read.c������������������������������������������������������������0000664�0000000�0000000�00000013614�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream read function. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' is requested. */ #if GNULIB_NONBLOCKING /* On native Windows platforms, when read() is called on a non-blocking pipe with an empty buffer, ReadFile() fails with error GetLastError() = ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This read() function is at the basis of the function which fills the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ SetLastError (0); \ ret = (EXPRESSION); \ if (FAILED) \ { \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from EINVAL to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ } \ return ret; \ } /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_SCANF int scanf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stdin, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_FSCANF int fscanf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stream, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VSCANF int vscanf (const char *format, va_list args) { return vfscanf (stdin, format, args); } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VFSCANF int vfscanf (FILE *stream, const char *format, va_list args) #undef vfscanf { CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) } # endif int getchar (void) { return fgetc (stdin); } int fgetc (FILE *stream) #undef fgetc { CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF) } char * fgets (char *s, int n, FILE *stream) #undef fgets { CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL) } /* We intentionally don't bother to fix gets. */ size_t fread (void *ptr, size_t s, size_t n, FILE *stream) #undef fread { CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n) } # endif #endif ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdio-safer.h�����������������������������������������������������������0000664�0000000�0000000�00000002454�14110572173�0017443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke stdio functions, but avoid some glitches. Copyright (C) 2001, 2003, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <stdio.h> #if GNULIB_FOPEN_SAFER FILE *fopen_safer (char const *, char const *) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1); #endif #if GNULIB_FREOPEN_SAFER FILE *freopen_safer (char const *, char const *, FILE *) _GL_ARG_NONNULL ((2, 3)); #endif #if GNULIB_POPEN_SAFER FILE *popen_safer (char const *, char const *) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1); #endif #if GNULIB_TMPFILE_SAFER FILE *tmpfile_safer (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdio-write.c�����������������������������������������������������������0000664�0000000�0000000�00000016706�14110572173�0017475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream write function. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' or module 'sigpipe' is requested. */ #if GNULIB_NONBLOCKING || GNULIB_SIGPIPE /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. This write() function is at the basis of the function which flushes the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # if GNULIB_NONBLOCKING # define CLEAR_ERRNO \ errno = 0; # define HANDLE_ENOSPC \ if (errno == ENOSPC && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from ENOSPC to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ else # else # define CLEAR_ERRNO # define HANDLE_ENOSPC # endif # if GNULIB_SIGPIPE # define CLEAR_LastError \ SetLastError (0); # define HANDLE_ERROR_NO_DATA \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0 \ && GetFileType ((HANDLE) _get_osfhandle (fd)) \ == FILE_TYPE_PIPE) \ { \ /* Try to raise signal SIGPIPE. */ \ raise (SIGPIPE); \ /* If it is currently blocked or ignored, change errno from \ EINVAL to EPIPE. */ \ errno = EPIPE; \ } \ } \ else # else # define CLEAR_LastError # define HANDLE_ERROR_NO_DATA # endif # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ CLEAR_ERRNO \ CLEAR_LastError \ ret = (EXPRESSION); \ if (FAILED) \ { \ HANDLE_ENOSPC \ HANDLE_ERROR_NO_DATA \ ; \ } \ return ret; \ } # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } # endif # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ int fprintf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stream, format, args); va_end (args); return retval; } # endif # if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ int vprintf (const char *format, va_list args) { return vfprintf (stdout, format, args); } # endif # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ int vfprintf (FILE *stream, const char *format, va_list args) #undef vfprintf { CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) } # endif int putchar (int c) { return fputc (c, stdout); } int fputc (int c, FILE *stream) #undef fputc { CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) } int fputs (const char *string, FILE *stream) #undef fputs { CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) } int puts (const char *string) #undef puts { FILE *stream = stdout; CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) } size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream) #undef fwrite { CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) } # endif #endif ����������������������������������������������������������gnulib-20210822~d383792/lib/stdio.in.h��������������������������������������������������������������0000664�0000000�0000000�00000172146�14110572173�0016760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 2007-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> #include <stddef.h> /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include <unistd.h> #endif /* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && ! defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stdlib.h> #endif /* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <io.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #ifndef _GL_ATTRIBUTE_FORMAT # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ # 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. _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ /* __gnu_printf__ is supported in GCC >= 4.4. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ #else # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ /* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates whether this change is effective. On older mingw, it is not. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* 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. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); # endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_MDA_FCLOSEALL@ /* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcloseall # define fcloseall _fcloseall # endif _GL_CXXALIAS_MDA (fcloseall, int, (void)); # else # if @HAVE_DECL_FCLOSEALL@ # if defined __FreeBSD__ || defined __DragonFly__ _GL_CXXALIAS_SYS (fcloseall, void, (void)); # else _GL_CXXALIAS_SYS (fcloseall, int, (void)); # endif # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCLOSEALL@ _GL_CXXALIASWARN (fcloseall); # endif #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); # elif @GNULIB_MDA_FDOPEN@ /* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fdopen always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); # endif #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); # endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); # endif #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); # endif #endif #if @GNULIB_MDA_FILENO@ /* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fileno always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fileno # define fileno _fileno # endif _GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (fileno); #endif #if @GNULIB_FOPEN@ # if @REPLACE_FOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # 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_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); # endif #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); # endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); # endif #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *restrict string, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *restrict string, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *restrict string, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); # endif #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); # endif #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); # endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); # endif #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); # endif #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); # endif #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); # endif #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); # endif #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); # endif #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_MDA_GETW@ /* On native Windows, map 'getw' to '_getw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getw # define getw _getw # endif _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (getw); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); # endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); _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)); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #else # if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined 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)); # endif # if defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); # endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); # endif #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); # endif #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); # endif #endif #if @GNULIB_MDA_PUTW@ /* On native Windows, map 'putw' to '_putw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putw # define putw _putw # endif _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); # endif _GL_CXXALIASWARN (putw); #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); # endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); # endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); # endif #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif # define GNULIB_overrides_snprintf 1 _GL_FUNCDECL_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (snprintf); # endif #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif # define GNULIB_overrides_sprintf 1 _GL_FUNCDECL_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *restrict str, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_MDA_TEMPNAM@ /* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tempnam always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tempnam # define tempnam _tempnam # endif _GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); # else _GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); # endif _GL_CXXALIASWARN (tempnam); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _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)); # endif _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); # endif #else # 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)); # endif # if defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif # define GNULIB_overrides_asprintf _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif # define GNULIB_overrides_vasprintf 1 _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); # endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfscanf); # endif #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); # endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vscanf); # endif #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif # define GNULIB_overrides_vsnprintf 1 _GL_FUNCDECL_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsnprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif # define GNULIB_overrides_vsprintf 1 _GL_FUNCDECL_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdlib--.h��������������������������������������������������������������0000664�0000000�0000000�00000002102�14110572173�0016624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like stdlib.h, but redefine some names to avoid glitches. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <stdlib.h> #include "stdlib-safer.h" #undef mkstemp #define mkstemp mkstemp_safer #if GNULIB_MKOSTEMP # define mkostemp mkostemp_safer #endif #if GNULIB_MKOSTEMPS # define mkostemps mkostemps_safer #endif #if GNULIB_MKSTEMPS # define mkstemps mkstemps_safer #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdlib-safer.h����������������������������������������������������������0000664�0000000�0000000�00000001776�14110572173�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke stdlib.h functions, but avoid some glitches. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ int mkstemp_safer (char *); #if GNULIB_MKOSTEMP int mkostemp_safer (char *, int); #endif #if GNULIB_MKOSTEMPS int mkostemps_safer (char *, int, int); #endif #if GNULIB_MKSTEMPS int mkstemps_safer (char *, int); #endif ��gnulib-20210822~d383792/lib/stdlib.in.h�������������������������������������������������������������0000664�0000000�0000000�00000152256�14110572173�0017117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdlib.h>. Copyright (C) 1995, 2001-2004, 2006-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include <sys/wait.h> #endif /* Solaris declares getloadavg() in <sys/loadavg.h>. */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif /* Native Windows platforms declare _mktemp() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included from <stdlib.h> if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include <random.h> # endif # if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ # include <stdint.h> # endif # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ /* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include <unistd.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after including <stdlib.h>. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definition of _Noreturn is copied here. */ /* 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. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); _GL_CXXALIASWARN (_Exit); #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_FREE_POSIX@ # if @REPLACE_FREE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef free # define free rpl_free # endif _GL_FUNCDECL_RPL (free, void, (void *ptr)); _GL_CXXALIAS_RPL (free, void, (void *ptr)); # else _GL_CXXALIAS_SYS (free, void, (void *ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (free); # endif #elif defined GNULIB_POSIXCHECK # undef free /* Assume free is always declared. */ _GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " "use gnulib module free for portability"); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_ALIGNED_ALLOC@ # if @REPLACE_ALIGNED_ALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef aligned_alloc # define aligned_alloc rpl_aligned_alloc # endif _GL_FUNCDECL_RPL (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); # else # if @HAVE_ALIGNED_ALLOC@ # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); # endif # endif # if @HAVE_ALIGNED_ALLOC@ _GL_CXXALIASWARN (aligned_alloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef aligned_alloc # if HAVE_RAW_DECL_ALIGNED_ALLOC _GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " "use gnulib module aligned_alloc for portability"); # endif # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if @REPLACE_CALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); # endif #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif # ifndef GNULIB_defined_canonicalize_file_name # define GNULIB_defined_canonicalize_file_name \ (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) # endif _GL_CXXALIASWARN (canonicalize_file_name); #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or rpl_free. */ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif # endif #endif #if @GNULIB_MDA_ECVT@ /* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ecvt # define ecvt _ecvt # endif _GL_CXXALIAS_MDA (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_ECVT@ _GL_CXXALIAS_SYS (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@ _GL_CXXALIASWARN (ecvt); # endif #endif #if @GNULIB_MDA_FCVT@ /* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcvt # define fcvt _fcvt # endif _GL_CXXALIAS_MDA (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_FCVT@ _GL_CXXALIAS_SYS (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@ _GL_CXXALIASWARN (fcvt); # endif #endif #if @GNULIB_MDA_GCVT@ /* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gcvt # define gcvt _gcvt # endif _GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); # else # if @HAVE_DECL_GCVT@ _GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@ _GL_CXXALIASWARN (gcvt); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); _GL_CXXALIASWARN (getloadavg); #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX specification. https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); _GL_CXXALIASWARN (getsubopt); #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if @REPLACE_MALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # else # if !@HAVE_MBTOWC@ _GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbtowc # if HAVE_RAW_DECL_MBTOWC _GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " "use gnulib module mbtowc for portability"); # endif #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemp); #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemps); #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_MDA_MKTEMP@ /* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mktemp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mktemp # define mktemp _mktemp # endif _GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); # else _GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); # endif _GL_CXXALIASWARN (mktemp); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_POSIX_MEMALIGN@ # if @REPLACE_POSIX_MEMALIGN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_memalign # define posix_memalign rpl_posix_memalign # endif _GL_FUNCDECL_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # else # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIAS_SYS (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # endif # endif # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIASWARN (posix_memalign); # endif #elif defined GNULIB_POSIXCHECK # undef posix_memalign # if HAVE_RAW_DECL_POSIX_MEMALIGN _GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " "use gnulib module posix_memalign for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); _GL_CXXALIASWARN (posix_openpt); #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif # ifndef GNULIB_defined_ptsname_r # define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif _GL_CXXALIAS_MDA (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #elif @GNULIB_MDA_PUTENV@ /* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putenv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif /* Need to cast, because on mingw, the parameter is either 'const char *string' or 'char *string'. */ _GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random # define random rpl_random # endif _GL_FUNCDECL_RPL (random, long, (void)); _GL_CXXALIAS_RPL (random, long, (void)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif /* Need to cast, because on Haiku, the return type is int. */ _GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom # define srandom rpl_srandom # endif _GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); _GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_INITSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate # define initstate rpl_initstate # endif _GL_FUNCDECL_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # else # if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # endif _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_SETSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate # define setstate rpl_setstate # endif _GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); # else # if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter is const char *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif /* Need to cast, because on Haiku, the third parameter is unsigned long buf_size. */ _GL_CXXALIAS_SYS_CAST (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on Haiku, the first parameter is void *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if @REPLACE_REALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); # endif #endif #if @GNULIB_REALLOCARRAY@ # if @REPLACE_REALLOCARRAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef reallocarray # define reallocarray rpl_reallocarray # endif _GL_FUNCDECL_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # else # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIASWARN (reallocarray); #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *restrict name, char *restrict resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *restrict name, char *restrict resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif # define GNULIB_defined_strtod_function 1 _GL_FUNCDECL_RPL (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *restrict str, char **restrict endp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); # endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLD@ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOLD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtold rpl_strtold # endif # define GNULIB_defined_strtold_function 1 _GL_FUNCDECL_RPL (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtold, long double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOLD@ _GL_FUNCDECL_SYS (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtold, long double, (const char *restrict str, char **restrict endp)); # endif _GL_CXXALIASWARN (strtold); #elif defined GNULIB_POSIXCHECK # undef strtold # if HAVE_RAW_DECL_STRTOLD _GL_WARN_ON_USE (strtold, "strtold is unportable - " "use gnulib module strtold for portability"); # endif #endif #if @GNULIB_STRTOL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtol rpl_strtol # endif # define GNULIB_defined_strtol_function 1 _GL_FUNCDECL_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOL@ _GL_FUNCDECL_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtol); #elif defined GNULIB_POSIXCHECK # undef strtol # if HAVE_RAW_DECL_STRTOL _GL_WARN_ON_USE (strtol, "strtol is unportable - " "use gnulib module strtol for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoll rpl_strtoll # endif # define GNULIB_defined_strtoll_function 1 _GL_FUNCDECL_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOUL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoul rpl_strtoul # endif # define GNULIB_defined_strtoul_function 1 _GL_FUNCDECL_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOUL@ _GL_FUNCDECL_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoul); #elif defined GNULIB_POSIXCHECK # undef strtoul # if HAVE_RAW_DECL_STRTOUL _GL_WARN_ON_USE (strtoul, "strtoul is unportable - " "use gnulib module strtoul for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOULL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoull rpl_strtoull # endif # define GNULIB_defined_strtoull_function 1 _GL_FUNCDECL_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); # endif #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdnoreturn.in.h��������������������������������������������������������0000664�0000000�0000000�00000004202�14110572173�0020210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C11 <stdnoreturn.h>. Copyright 2012-2021 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. */ #ifndef noreturn /* ISO C11 <stdnoreturn.h> for platforms that lack it. References: ISO C11 (latest free draft <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) section 7.23 */ /* The definition of _Noreturn is copied here. */ #if 1200 <= _MSC_VER || defined __CYGWIN__ /* On MSVC, standard include files contain declarations like __declspec (noreturn) void abort (void); "#define noreturn _Noreturn" would cause this declaration to be rewritten to the invalid __declspec (__declspec (noreturn)) void abort (void); Similarly, on Cygwin, standard include files contain declarations like void __cdecl abort (void) __attribute__ ((noreturn)); "#define noreturn _Noreturn" would cause this declaration to be rewritten to the invalid void __cdecl abort (void) __attribute__ ((__attribute__ ((__noreturn__)))); Instead, define noreturn to empty, so that such declarations are rewritten to __declspec () void abort (void); or void __cdecl abort (void) __attribute__ (()); respectively. This gives up on noreturn's advice to the compiler but at least it is valid code. */ # define noreturn /*empty*/ #else # define noreturn _Noreturn #endif /* Did he ever return? No he never returned And his fate is still unlearn'd ... -- Steiner J, Hawes BL. M.T.A. (1949) */ #endif /* noreturn */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdopen.c���������������������������������������������������������������0000664�0000000�0000000�00000004607�14110572173�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stdopen.c - ensure that the three standard file descriptors are in use Copyright (C) 2005-2006, 2019-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering. */ #include <config.h> #include "stdopen.h" #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> /* Try to ensure that all of the standard file numbers (0, 1, 2) are in use. Without this, each application would have to guard every call to open, dup, fopen, etc. with tests to ensure they don't use one of the special file numbers when opening a file. Return zero if successful, an errno value if at least one of the file descriptors is initially closed and could not be opened. */ int stdopen (void) { int fd; for (fd = STDIN_FILENO; fd <= STDERR_FILENO; fd++) { if (fcntl (fd, F_GETFD) < 0) { /* Open /dev/null with the contrary mode so that the typical read (stdin) or write (stdout, stderr) operation will fail. With descriptor 0, we can do even better on systems that have /dev/full, by opening that write-only instead of /dev/null. The only drawback is that a write-provoked failure comes with a misleading errno value, ENOSPC. */ int mode = fd == STDIN_FILENO ? O_WRONLY : O_RDONLY; int full_fd = fd == STDIN_FILENO ? open ("/dev/full", mode) : -1; int new_fd = full_fd < 0 ? open ("/dev/null", mode) : full_fd; if (new_fd < 0) return errno; if (STDERR_FILENO < new_fd) { /* 0, 1, and 2 are already open somehow. Our is not to reason why. */ close (new_fd); return 0; } } } return 0; } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stdopen.h���������������������������������������������������������������0000664�0000000�0000000�00000001646�14110572173�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arrange for stdin/stdout/stderr to be open. Copyright (C) 2005-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2005. */ #ifndef STDOPEN_H # define STDOPEN_H 1 # ifdef __cplusplus extern "C" { # endif int stdopen (void); # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stpcpy.c����������������������������������������������������������������0000664�0000000�0000000�00000002605�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stpcpy.c -- copy a string and return pointer to end of new string Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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/>. */ #include <config.h> #include <string.h> #undef __stpcpy #ifdef _LIBC # undef stpcpy #endif #ifndef weak_alias # define __stpcpy stpcpy #endif /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ char * __stpcpy (char *dest, const char *src) { register char *d = dest; register const char *s = src; do *d++ = *s; while (*s++ != '\0'); return d - 1; } #ifdef weak_alias weak_alias (__stpcpy, stpcpy) #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/stpncpy.c���������������������������������������������������������������0000664�0000000�0000000�00000004167�14110572173�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1993, 1995-1997, 2002-2003, 2005-2007, 2009-2021 Free Software * Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ /* This is almost copied from strncpy.c, written by Torbjorn Granlund. */ #include <config.h> /* Specification. */ #include <string.h> #ifndef weak_alias # define __stpncpy stpncpy #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ char * (__stpncpy) (char *dest, const char *src, size_t n) { char c; char *s = dest; if (n >= 4) { size_t n4 = n >> 2; for (;;) { c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; if (--n4 == 0) goto last_chars; } n -= dest - s; goto zero_fill; } last_chars: n &= 3; if (n == 0) return dest; for (;;) { c = *src++; --n; *dest++ = c; if (c == '\0') break; if (n == 0) return dest; } zero_fill: while (n-- > 0) dest[n] = '\0'; return dest - 1; } #ifdef weak_alias weak_alias (__stpncpy, stpncpy) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/str-kmp.h���������������������������������������������������������������0000664�0000000�0000000�00000013331�14110572173�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring search in a NUL terminated string of UNIT elements, using the Knuth-Morris-Pratt algorithm. Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Before including this file, you need to define: UNIT The element type of the needle and haystack. CANON_ELEMENT(c) A macro that canonicalizes an element right after it has been fetched from needle or haystack. The argument is of type UNIT; the result must be of type UNIT as well. */ /* Knuth-Morris-Pratt algorithm. See https://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm HAYSTACK is the NUL terminated string in which to search for. NEEDLE is the string to search for in HAYSTACK, consisting of NEEDLE_LEN units. Return a boolean indicating success: Return true and set *RESULTP if the search was completed. Return false if it was aborted because not enough memory was available. */ static bool knuth_morris_pratt (const UNIT *haystack, const UNIT *needle, size_t needle_len, const UNIT **resultp) { size_t m = needle_len; /* Allocate the table. */ size_t *table = (size_t *) nmalloca (m, sizeof (size_t)); if (table == NULL) return false; /* Fill the table. For 0 < i < m: 0 < table[i] <= i is defined such that forall 0 < x < table[i]: needle[x..i-1] != needle[0..i-1-x], and table[i] is as large as possible with this property. This implies: 1) For 0 < i < m: If table[i] < i, needle[table[i]..i-1] = needle[0..i-1-table[i]]. 2) For 0 < i < m: rhaystack[0..i-1] == needle[0..i-1] and exists h, i <= h < m: rhaystack[h] != needle[h] implies forall 0 <= x < table[i]: rhaystack[x..x+m-1] != needle[0..m-1]. table[0] remains uninitialized. */ { size_t i, j; /* i = 1: Nothing to verify for x = 0. */ table[1] = 1; j = 0; for (i = 2; i < m; i++) { /* Here: j = i-1 - table[i-1]. The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < table[i-1], by induction. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ UNIT b = CANON_ELEMENT (needle[i - 1]); for (;;) { /* Invariants: The inequality needle[x..i-1] != needle[0..i-1-x] is known to hold for x < i-1-j. Furthermore, if j>0: needle[i-1-j..i-2] = needle[0..j-1]. */ if (b == CANON_ELEMENT (needle[j])) { /* Set table[i] := i-1-j. */ table[i] = i - ++j; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for x = i-1-j, because needle[i-1] != needle[j] = needle[i-1-x]. */ if (j == 0) { /* The inequality holds for all possible x. */ table[i] = i; break; } /* The inequality needle[x..i-1] != needle[0..i-1-x] also holds for i-1-j < x < i-1-j+table[j], because for these x: needle[x..i-2] = needle[x-(i-1-j)..j-1] != needle[0..j-1-(x-(i-1-j))] (by definition of table[j]) = needle[0..i-2-x], hence needle[x..i-1] != needle[0..i-1-x]. Furthermore needle[i-1-j+table[j]..i-2] = needle[table[j]..j-1] = needle[0..j-1-table[j]] (by definition of table[j]). */ j = j - table[j]; } /* Here: j = i - table[i]. */ } } /* Search, using the table to accelerate the processing. */ { size_t j; const UNIT *rhaystack; const UNIT *phaystack; *resultp = NULL; j = 0; rhaystack = haystack; phaystack = haystack; /* Invariant: phaystack = rhaystack + j. */ while (*phaystack != 0) if (CANON_ELEMENT (needle[j]) == CANON_ELEMENT (*phaystack)) { j++; phaystack++; if (j == m) { /* The entire needle has been found. */ *resultp = rhaystack; break; } } else if (j > 0) { /* Found a match of needle[0..j-1], mismatch at needle[j]. */ rhaystack += table[j]; j -= table[j]; } else { /* Found a mismatch at needle[0] already. */ rhaystack++; phaystack++; } } freea (table); return true; } #undef CANON_ELEMENT �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/str-two-way.h�����������������������������������������������������������0000664�0000000�0000000�00000042232�14110572173�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Byte-wise substring search, using the Two-Way algorithm. Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake <ebb9@byu.net>, 2008. 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/>. */ /* Before including this file, you need to include <config.h> and <string.h>, and define: RETURN_TYPE A macro that expands to the return type. AVAILABLE(h, h_l, j, n_l) A macro that returns nonzero if there are at least N_L bytes left starting at H[J]. H is 'unsigned char *', H_L, J, and N_L are 'size_t'; H_L is an lvalue. For NUL-terminated searches, H_L can be modified each iteration to avoid having to compute the end of H up front. For case-insensitivity, you may optionally define: CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L characters of P1 and P2 are equal. CANON_ELEMENT(c) A macro that canonicalizes an element right after it has been fetched from one of the two strings. The argument is an 'unsigned char'; the result must be an 'unsigned char' as well. This file undefines the macros documented above, and defines LONG_NEEDLE_THRESHOLD. */ #include <limits.h> #include <stdint.h> /* We use the Two-Way string matching algorithm (also known as Chrochemore-Perrin), which guarantees linear complexity with constant space. Additionally, for long needles, we also use a bad character shift table similar to the Boyer-Moore algorithm to achieve improved (potentially sub-linear) performance. See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf */ /* Point at which computing a bad-byte shift table is likely to be worthwhile. Small needles should not compute a table, since it adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a speedup no greater than a factor of NEEDLE_LEN. The larger the needle, the better the potential performance gain. On the other hand, on non-POSIX systems with CHAR_BIT larger than eight, the memory required for the table is prohibitive. */ #if CHAR_BIT < 10 # define LONG_NEEDLE_THRESHOLD 32U #else # define LONG_NEEDLE_THRESHOLD SIZE_MAX #endif #ifndef MAX # define MAX(a, b) ((a < b) ? (b) : (a)) #endif #ifndef CANON_ELEMENT # define CANON_ELEMENT(c) c #endif #ifndef CMP_FUNC # define CMP_FUNC memcmp #endif /* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. Return the index of the first byte in the right half, and set *PERIOD to the global period of the right half. The global period of a string is the smallest index (possibly its length) at which all remaining bytes in the string are repetitions of the prefix (the last repetition may be a subset of the prefix). When NEEDLE is factored into two halves, a local period is the length of the smallest word that shares a suffix with the left half and shares a prefix with the right half. All factorizations of a non-empty NEEDLE have a local period of at least 1 and no greater than NEEDLE_LEN. A critical factorization has the property that the local period equals the global period. All strings have at least one critical factorization with the left half smaller than the global period. And while some strings have more than one critical factorization, it is provable that with an ordered alphabet, at least one of the critical factorizations corresponds to a maximal suffix. Given an ordered alphabet, a critical factorization can be computed in linear time, with 2 * NEEDLE_LEN comparisons, by computing the shorter of two ordered maximal suffixes. The ordered maximal suffixes are determined by lexicographic comparison while tracking periodicity. */ static size_t critical_factorization (const unsigned char *needle, size_t needle_len, size_t *period) { /* Index of last byte of left half, or SIZE_MAX. */ size_t max_suffix, max_suffix_rev; size_t j; /* Index into NEEDLE for current candidate suffix. */ size_t k; /* Offset into current period. */ size_t p; /* Intermediate period. */ unsigned char a, b; /* Current comparison bytes. */ /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered out 0-length needles. */ if (needle_len < 3) { *period = 1; return needle_len - 1; } /* Invariants: 0 <= j < NEEDLE_LEN - 1 -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) min(max_suffix, max_suffix_rev) < global period of NEEDLE 1 <= p <= global period of NEEDLE p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] 1 <= k <= p */ /* Perform lexicographic search. */ max_suffix = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix + k]); if (a < b) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* b < a */ { /* Suffix is larger, start over from current location. */ max_suffix = j++; k = p = 1; } } *period = p; /* Perform reverse lexicographic search. */ max_suffix_rev = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix_rev + k]); if (b < a) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix_rev; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* a < b */ { /* Suffix is larger, start over from current location. */ max_suffix_rev = j++; k = p = 1; } } /* Choose the shorter suffix. Return the index of the first byte of the right half, rather than the last byte of the left half. For some examples, 'banana' has two critical factorizations, both exposed by the two lexicographic extreme suffixes of 'anana' and 'nana', where both suffixes have a period of 2. On the other hand, with 'aab' and 'bba', both strings have a single critical factorization of the last byte, with the suffix having a period of 1. While the maximal lexicographic suffix of 'aab' is 'b', the maximal lexicographic suffix of 'bba' is 'ba', which is not a critical factorization. Conversely, the maximal reverse lexicographic suffix of 'a' works for 'bba', but not 'ab' for 'aab'. The shorter suffix of the two will always be a critical factorization. */ if (max_suffix_rev + 1 < max_suffix + 1) return max_suffix + 1; *period = p; return max_suffix_rev + 1; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. Performance is guaranteed to be linear, with an initialization cost of 2 * NEEDLE_LEN comparisons. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ static RETURN_TYPE two_way_short_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = MAX (suffix, memory); while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = suffix; while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. Performance is guaranteed to be linear, with an initialization cost of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance is not possible. */ static RETURN_TYPE two_way_long_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ size_t shift_table[1U << CHAR_BIT]; /* See below. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Populate shift_table. For each possible byte value c, shift_table[c] is the distance from the last occurrence of c to the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ for (i = 0; i < 1U << CHAR_BIT; i++) shift_table[i] = needle_len; for (i = 0; i < needle_len; i++) shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; size_t shift; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { if (memory && shift < period) { /* Since needle is periodic, but the last period has a byte out of place, there can be no match until after the mismatch. */ shift = needle_len - period; } memory = 0; j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = MAX (suffix, memory); while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ size_t shift; period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = suffix; while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } #undef AVAILABLE #undef CANON_ELEMENT #undef CMP_FUNC #undef MAX #undef RETURN_TYPE ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strcasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000003451�14110572173�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work with multibyte strings! */ int strcasecmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strcasestr.c������������������������������������������������������������0000664�0000000�0000000�00000006001�14110572173�0017403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string. Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <stdbool.h> #include <strings.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Two-Way algorithm. */ #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ && ((h_l) = (j) + (n_l))) #define CANON_ELEMENT(c) TOLOWER (c) #define CMP_FUNC(p1, p2, l) \ strncasecmp ((const char *) (p1), (const char *) (p2), l) #include "str-two-way.h" /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. This function gives unspecified results in multibyte locales. */ char * strcasestr (const char *haystack_start, const char *needle_start) { const char *haystack = haystack_start; const char *needle = needle_start; size_t needle_len; /* Length of NEEDLE. */ size_t haystack_len; /* Known minimum length of HAYSTACK. */ bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ /* Determine length of NEEDLE, and in the process, make sure HAYSTACK is at least as long (no point processing all of a long NEEDLE if HAYSTACK is too short). */ while (*haystack && *needle) { ok &= (TOLOWER ((unsigned char) *haystack) == TOLOWER ((unsigned char) *needle)); haystack++; needle++; } if (*needle) return NULL; if (ok) return (char *) haystack_start; needle_len = needle - needle_start; haystack = haystack_start + 1; haystack_len = needle_len - 1; /* Perform the search. Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ if (needle_len < LONG_NEEDLE_THRESHOLD) return two_way_short_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); return two_way_long_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); } #undef LONG_NEEDLE_THRESHOLD �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strchrnul.c�������������������������������������������������������������0000664�0000000�0000000�00000013037�14110572173�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2003, 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> /* Find the first occurrence of C in S or the final NUL byte. */ char * strchrnul (const char *s, int c_in) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned char c; c = (unsigned char) c_in; if (!c) return rawmemchr (s, 0); /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (size_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (!*char_ptr || *char_ptr == c) return (char *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to NUL or c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 or longword2 is zero. Let's consider longword1. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 or longword2 is zero is equivalent to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine this into a single test, whether (tmp1 | tmp2) is nonzero. This test can read more than one byte beyond the end of a string, depending on where the terminating NUL is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; longword longword2 = *longword_ptr; if (((((longword1 - repeated_one) & ~longword1) | ((longword2 - repeated_one) & ~longword2)) & (repeated_one << 7)) != 0) break; longword_ptr++; } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == 0 or == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ char_ptr = (unsigned char *) longword_ptr; while (*char_ptr && (*char_ptr != c)) char_ptr++; return (char *) char_ptr; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strchrnul.valgrind������������������������������������������������������0000664�0000000�0000000�00000001714�14110572173�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in strchrnul(). # Copyright (C) 2008-2021 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/>. # This use is OK because it provides only a speedup. { strchrnul-value4 Memcheck:Value4 fun:strchrnul } { strchrnul-value8 Memcheck:Value8 fun:strchrnul } ����������������������������������������������������gnulib-20210822~d383792/lib/strcspn.c���������������������������������������������������������������0000664�0000000�0000000�00000002421�14110572173�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 1996-1997, 2002-2003, 2005-2006, 2009-2021 Free * Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ #include <config.h> #include <stddef.h> #include <string.h> #if _LIBC # undef strcspn #endif /* Return the length of the maximum initial segment of S which contains no characters from REJECT. */ size_t strcspn (const char *s, const char *reject) { size_t count = 0; while (*s != '\0') if (strchr (reject, *s++) == NULL) ++count; else return count; return count; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strdup.c����������������������������������������������������������������0000664�0000000�0000000�00000002532�14110572173�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2021 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 _LIBC # include <config.h> #endif /* Get specification. */ #include <string.h> #include <stdlib.h> #undef __strdup #ifdef _LIBC # undef strdup #endif #ifndef weak_alias # define __strdup strdup #endif /* Duplicate S, returning an identical malloc'd string. */ char * __strdup (const char *s) { size_t len = strlen (s) + 1; void *new = malloc (len); if (new == NULL) return NULL; return (char *) memcpy (new, s, len); } #ifdef libc_hidden_def libc_hidden_def (__strdup) #endif #ifdef weak_alias weak_alias (__strdup, strdup) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/streq.h�����������������������������������������������������������������0000664�0000000�0000000�00000007703�14110572173�0016363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized string comparison. Copyright (C) 2001-2002, 2007, 2009-2021 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>. */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include <string.h> /* STREQ_OPT allows to optimize string comparison with a small literal string. STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) is semantically equivalent to strcmp (s, "EUC-KR") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ static inline int streq9 (const char *s1, const char *s2) { return strcmp (s1 + 9, s2 + 9) == 0; } static inline int streq8 (const char *s1, const char *s2, char s28) { if (s1[8] == s28) { if (s28 == 0) return 1; else return streq9 (s1, s2); } else return 0; } static inline int streq7 (const char *s1, const char *s2, char s27, char s28) { if (s1[7] == s27) { if (s27 == 0) return 1; else return streq8 (s1, s2, s28); } else return 0; } static inline int streq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (s1[6] == s26) { if (s26 == 0) return 1; else return streq7 (s1, s2, s27, s28); } else return 0; } static inline int streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (s1[5] == s25) { if (s25 == 0) return 1; else return streq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (s1[4] == s24) { if (s24 == 0) return 1; else return streq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[3] == s23) { if (s23 == 0) return 1; else return streq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[2] == s22) { if (s22 == 0) return 1; else return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[1] == s21) { if (s21 == 0) return 1; else return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[0] == s20) { if (s20 == 0) return 1; else return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ �������������������������������������������������������������gnulib-20210822~d383792/lib/strerror-override.c�����������������������������������������������������0000664�0000000�0000000�00000021646�14110572173�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2021 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>, 2010. */ #include <config.h> #include "strerror-override.h" #include <errno.h> #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include <winsock2.h> # endif #endif #if !GNULIB_defined_strerror_override_macro /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { # if REPLACE_STRERROR_0 case 0: return "Success"; # endif # if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; # endif # if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; # endif # if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif # endif # if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; # endif # if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; # endif # if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; # endif # if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; # endif # if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; # endif # if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; # endif # if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; # endif # if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; # endif # if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; # endif # if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; # endif # if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; # endif # if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; # endif # if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; # endif # if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; # endif # if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; # endif # if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; # endif default: return NULL; } } #endif ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strerror-override.h�����������������������������������������������������0000664�0000000�0000000�00000004050�14110572173�0020714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2021 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/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include <errno.h> # include <stddef.h> /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # define GNULIB_defined_strerror_override_macro 1 # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strerror.c��������������������������������������������������������������0000664�0000000�0000000�00000004074�14110572173�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strerror_r.c������������������������������������������������������������0000664�0000000�0000000�00000032414�14110572173�0017420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror_r.c --- POSIX compatible system error routine Copyright (C) 2010-2021 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>, 2010. */ #include <config.h> /* Enable declaration of sys_nerr and sys_errlist in <errno.h> on NetBSD. */ #define _NETBSD_SOURCE 1 /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #if !HAVE_SNPRINTF # include <stdarg.h> #endif #include "strerror-override.h" #if (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) && HAVE___XPG_STRERROR_R /* glibc >= 2.3.4, cygwin >= 1.7.9 */ # define USE_XPG_STRERROR_R 1 extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r (int errnum, char *buf, size_t buflen); #elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) /* The system's strerror_r function is OK, except that its third argument is 'int', not 'size_t', or its return type is wrong. */ # include <limits.h> # define USE_SYSTEM_STRERROR_R 1 #else /* (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__ ? !HAVE___XPG_STRERROR_R : !HAVE_DECL_STRERROR_R) */ /* Use the system's strerror(). Exclude glibc and cygwin because the system strerror_r has the wrong return type, and cygwin 1.7.9 strerror_r clobbers strerror. */ # undef strerror # define USE_SYSTEM_STRERROR 1 # if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ /* No locking needed. */ /* Get catgets internationalization functions. */ # if HAVE_CATGETS # include <nl_types.h> # endif #ifdef __cplusplus extern "C" { #endif /* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode). Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI). */ # if defined __hpux || defined __sgi extern int sys_nerr; extern char *sys_errlist[]; # endif /* Get sys_nerr on Solaris. */ # if defined __sun && !defined _LP64 extern int sys_nerr; # endif #ifdef __cplusplus } #endif # else # include "glthread/lock.h" /* This lock protects the buffer returned by strerror(). We assume that no other uses of strerror() exist in the program. */ gl_lock_define_initialized(static, strerror_lock) # endif #endif /* On MSVC, there is no snprintf() function, just a _snprintf(). It is of lower quality, but sufficient for the simple use here. We only have to make sure to NUL terminate the result (_snprintf does not NUL terminate, like strncpy). */ #if !HAVE_SNPRINTF static int local_snprintf (char *buf, size_t buflen, const char *format, ...) { va_list args; int result; va_start (args, format); result = _vsnprintf (buf, buflen, format, args); va_end (args); if (buflen > 0 && (result < 0 || result >= buflen)) buf[buflen - 1] = '\0'; return result; } # undef snprintf # define snprintf local_snprintf #endif /* Copy as much of MSG into BUF as possible, without corrupting errno. Return 0 if MSG fit in BUFLEN, otherwise return ERANGE. */ static int safe_copy (char *buf, size_t buflen, const char *msg) { size_t len = strlen (msg); size_t moved = len < buflen ? len : buflen - 1; /* Although POSIX lets memmove corrupt errno, we don't know of any implementation where this is a real problem. */ memmove (buf, msg, moved); buf[moved] = '\0'; return len < buflen ? 0 : ERANGE; } int strerror_r (int errnum, char *buf, size_t buflen) #undef strerror_r { /* Filter this out now, so that rest of this replacement knows that there is room for a non-empty message and trailing NUL. */ if (buflen <= 1) { if (buflen) *buf = '\0'; return ERANGE; } *buf = '\0'; /* Check for gnulib overrides. */ { char const *msg = strerror_override (errnum); if (msg) return safe_copy (buf, buflen, msg); } { int ret; int saved_errno = errno; #if USE_XPG_STRERROR_R { ret = __xpg_strerror_r (errnum, buf, buflen); if (ret < 0) ret = errno; if (!*buf) { /* glibc 2.13 would not touch buf on err, so we have to fall back to GNU strerror_r which always returns a thread-safe untruncated string to (partially) copy into our buf. */ safe_copy (buf, buflen, strerror_r (errnum, buf, buflen)); } } #elif USE_SYSTEM_STRERROR_R if (buflen > INT_MAX) buflen = INT_MAX; # ifdef __hpux /* On HP-UX 11.31, strerror_r always fails when buflen < 80; it also fails to change buf on EINVAL. */ { char stackbuf[80]; if (buflen < sizeof stackbuf) { ret = strerror_r (errnum, stackbuf, sizeof stackbuf); if (ret == 0) ret = safe_copy (buf, buflen, stackbuf); } else ret = strerror_r (errnum, buf, buflen); } # else ret = strerror_r (errnum, buf, buflen); /* Some old implementations may return (-1, EINVAL) instead of EINVAL. But on Haiku, valid error numbers are negative. */ # if !defined __HAIKU__ if (ret < 0) ret = errno; # endif # endif # if defined _AIX || defined __HAIKU__ /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try again until we are sure we got the entire string. */ if (!ret && strlen (buf) == buflen - 1) { char stackbuf[STACKBUF_LEN]; size_t len; strerror_r (errnum, stackbuf, sizeof stackbuf); len = strlen (stackbuf); /* STACKBUF_LEN should have been large enough. */ if (len + 1 == sizeof stackbuf) abort (); if (buflen <= len) ret = ERANGE; } # else /* Solaris 10 does not populate buf on ERANGE. OpenBSD 4.7 truncates early on ERANGE rather than return a partial integer. We prefer the maximal string. We set buf[0] earlier, and we know of no implementation that modifies buf to be an unterminated string, so this strlen should be portable in practice (rather than pulling in a safer strnlen). */ if (ret == ERANGE && strlen (buf) < buflen - 1) { char stackbuf[STACKBUF_LEN]; /* STACKBUF_LEN should have been large enough. */ if (strerror_r (errnum, stackbuf, sizeof stackbuf) == ERANGE) abort (); safe_copy (buf, buflen, stackbuf); } # endif #else /* USE_SYSTEM_STRERROR */ /* Try to do what strerror (errnum) does, but without clobbering the buffer used by strerror(). */ # if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ /* NetBSD: sys_nerr, sys_errlist are declared through _NETBSD_SOURCE and <errno.h> above. HP-UX: sys_nerr, sys_errlist are declared explicitly above. native Windows: sys_nerr, sys_errlist are declared in <stdlib.h>. Cygwin: sys_nerr, sys_errlist are declared in <errno.h>. */ if (errnum >= 0 && errnum < sys_nerr) { # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) # if defined __NetBSD__ nl_catd catd = catopen ("libc", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # if defined __hpux nl_catd catd = catopen ("perror", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, 1 + errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # else const char *errmsg = sys_errlist[errnum]; # endif if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) if (catd != (nl_catd)-1) catclose (catd); # endif } else ret = EINVAL; # elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */ /* For a valid error number, the system's strerror() function returns a pointer to a not copied string, not to a buffer. */ if (errnum >= 0 && errnum < sys_nerr) { char *errmsg = strerror (errnum); if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } else ret = EINVAL; # else gl_lock_lock (strerror_lock); { char *errmsg = strerror (errnum); /* For invalid error numbers, strerror() on - IRIX 6.5 returns NULL, - HP-UX 11 returns an empty string. */ if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } gl_lock_unlock (strerror_lock); # endif #endif #if defined _WIN32 && !defined __CYGWIN__ /* MSVC 14 defines names for many error codes in the range 100..140, but _sys_errlist contains strings only for the error codes < _sys_nerr = 43. */ if (ret == EINVAL) { const char *errmsg; switch (errnum) { case 100 /* EADDRINUSE */: errmsg = "Address already in use"; break; case 101 /* EADDRNOTAVAIL */: errmsg = "Cannot assign requested address"; break; case 102 /* EAFNOSUPPORT */: errmsg = "Address family not supported by protocol"; break; case 103 /* EALREADY */: errmsg = "Operation already in progress"; break; case 105 /* ECANCELED */: errmsg = "Operation canceled"; break; case 106 /* ECONNABORTED */: errmsg = "Software caused connection abort"; break; case 107 /* ECONNREFUSED */: errmsg = "Connection refused"; break; case 108 /* ECONNRESET */: errmsg = "Connection reset by peer"; break; case 109 /* EDESTADDRREQ */: errmsg = "Destination address required"; break; case 110 /* EHOSTUNREACH */: errmsg = "No route to host"; break; case 112 /* EINPROGRESS */: errmsg = "Operation now in progress"; break; case 113 /* EISCONN */: errmsg = "Transport endpoint is already connected"; break; case 114 /* ELOOP */: errmsg = "Too many levels of symbolic links"; break; case 115 /* EMSGSIZE */: errmsg = "Message too long"; break; case 116 /* ENETDOWN */: errmsg = "Network is down"; break; case 117 /* ENETRESET */: errmsg = "Network dropped connection on reset"; break; case 118 /* ENETUNREACH */: errmsg = "Network is unreachable"; break; case 119 /* ENOBUFS */: errmsg = "No buffer space available"; break; case 123 /* ENOPROTOOPT */: errmsg = "Protocol not available"; break; case 126 /* ENOTCONN */: errmsg = "Transport endpoint is not connected"; break; case 128 /* ENOTSOCK */: errmsg = "Socket operation on non-socket"; break; case 129 /* ENOTSUP */: errmsg = "Not supported"; break; case 130 /* EOPNOTSUPP */: errmsg = "Operation not supported"; break; case 132 /* EOVERFLOW */: errmsg = "Value too large for defined data type"; break; case 133 /* EOWNERDEAD */: errmsg = "Owner died"; break; case 134 /* EPROTO */: errmsg = "Protocol error"; break; case 135 /* EPROTONOSUPPORT */: errmsg = "Protocol not supported"; break; case 136 /* EPROTOTYPE */: errmsg = "Protocol wrong type for socket"; break; case 138 /* ETIMEDOUT */: errmsg = "Connection timed out"; break; case 140 /* EWOULDBLOCK */: errmsg = "Operation would block"; break; default: errmsg = NULL; break; } if (errmsg != NULL) ret = safe_copy (buf, buflen, errmsg); } #endif if (ret == EINVAL && !*buf) { #if defined __HAIKU__ /* For consistency with perror(). */ snprintf (buf, buflen, "Unknown Application Error (%d)", errnum); #else snprintf (buf, buflen, "Unknown error %d", errnum); #endif } errno = saved_errno; return ret; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strerrorname_np.c�������������������������������������������������������0000664�0000000�0000000�00000111734�14110572173�0020440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Name of system error code. Copyright (C) 2020-2021 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 <string.h> #include <errno.h> const char * strerrorname_np (int errnum) { switch (errnum) { /* Error codes specified by ISO C. */ case EDOM: return "EDOM"; case EILSEQ: return "EILSEQ"; case ERANGE: return "ERANGE"; /* Error codes specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html> */ #if defined E2BIG case E2BIG: return "E2BIG"; #endif #if defined EACCES case EACCES: return "EACCES"; #endif #if defined EADDRINUSE case EADDRINUSE: return "EADDRINUSE"; #endif #if defined EADDRNOTAVAIL case EADDRNOTAVAIL: return "EADDRNOTAVAIL"; #endif #if defined EAFNOSUPPORT case EAFNOSUPPORT: return "EAFNOSUPPORT"; #endif #if defined EAGAIN case EAGAIN: return "EAGAIN"; #endif #if defined EALREADY case EALREADY: return "EALREADY"; #endif #if defined EBADF case EBADF: return "EBADF"; #endif #if defined EBADMSG case EBADMSG: return "EBADMSG"; #endif #if defined EBUSY case EBUSY: return "EBUSY"; #endif #if defined ECANCELED case ECANCELED: return "ECANCELED"; #endif #if defined ECHILD case ECHILD: return "ECHILD"; #endif #if defined ECONNABORTED case ECONNABORTED: return "ECONNABORTED"; #endif #if defined ECONNREFUSED case ECONNREFUSED: return "ECONNREFUSED"; #endif #if defined ECONNRESET case ECONNRESET: return "ECONNRESET"; #endif #if defined EDEADLK case EDEADLK: return "EDEADLK"; #endif #if defined EDESTADDRREQ case EDESTADDRREQ: return "EDESTADDRREQ"; #endif #if defined EDQUOT case EDQUOT: return "EDQUOT"; #endif #if defined EEXIST case EEXIST: return "EEXIST"; #endif #if defined EFAULT case EFAULT: return "EFAULT"; #endif #if defined EFBIG case EFBIG: return "EFBIG"; #endif #if defined EHOSTUNREACH case EHOSTUNREACH: return "EHOSTUNREACH"; #endif #if defined EIDRM case EIDRM: return "EIDRM"; #endif #if defined EINPROGRESS case EINPROGRESS: return "EINPROGRESS"; #endif #if defined EINTR case EINTR: return "EINTR"; #endif #if defined EINVAL case EINVAL: return "EINVAL"; #endif #if defined EIO case EIO: return "EIO"; #endif #if defined EISCONN case EISCONN: return "EISCONN"; #endif #if defined EISDIR case EISDIR: return "EISDIR"; #endif #if defined ELOOP case ELOOP: return "ELOOP"; #endif #if defined EMFILE case EMFILE: return "EMFILE"; #endif #if defined EMLINK case EMLINK: return "EMLINK"; #endif #if defined EMSGSIZE case EMSGSIZE: return "EMSGSIZE"; #endif #if defined EMULTIHOP case EMULTIHOP: return "EMULTIHOP"; #endif #if defined ENAMETOOLONG case ENAMETOOLONG: return "ENAMETOOLONG"; #endif #if defined ENETDOWN case ENETDOWN: return "ENETDOWN"; #endif #if defined ENETRESET case ENETRESET: return "ENETRESET"; #endif #if defined ENETUNREACH case ENETUNREACH: return "ENETUNREACH"; #endif #if defined ENFILE case ENFILE: return "ENFILE"; #endif #if defined ENOBUFS case ENOBUFS: return "ENOBUFS"; #endif #if defined ENODATA case ENODATA: return "ENODATA"; #endif #if defined ENODEV case ENODEV: return "ENODEV"; #endif #if defined ENOENT case ENOENT: return "ENOENT"; #endif #if defined ENOEXEC case ENOEXEC: return "ENOEXEC"; #endif #if defined ENOLCK case ENOLCK: return "ENOLCK"; #endif #if defined ENOLINK case ENOLINK: return "ENOLINK"; #endif #if defined ENOMEM case ENOMEM: return "ENOMEM"; #endif #if defined ENOMSG case ENOMSG: return "ENOMSG"; #endif #if defined ENOPROTOOPT case ENOPROTOOPT: return "ENOPROTOOPT"; #endif #if defined ENOSPC case ENOSPC: return "ENOSPC"; #endif #if defined ENOSR case ENOSR: return "ENOSR"; #endif #if defined ENOSTR case ENOSTR: return "ENOSTR"; #endif #if defined ENOSYS case ENOSYS: return "ENOSYS"; #endif #if defined ENOTCONN case ENOTCONN: return "ENOTCONN"; #endif #if defined ENOTDIR case ENOTDIR: return "ENOTDIR"; #endif #if defined ENOTEMPTY && ENOTEMPTY != EEXIST case ENOTEMPTY: return "ENOTEMPTY"; #endif #if defined ENOTRECOVERABLE case ENOTRECOVERABLE: return "ENOTRECOVERABLE"; #endif #if defined ENOTSOCK case ENOTSOCK: return "ENOTSOCK"; #endif #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP case ENOTSUP: return "ENOTSUP"; #endif #if defined ENOTTY case ENOTTY: return "ENOTTY"; #endif #if defined ENXIO case ENXIO: return "ENXIO"; #endif #if defined EOPNOTSUPP case EOPNOTSUPP: return "EOPNOTSUPP"; #endif #if defined EOVERFLOW case EOVERFLOW: return "EOVERFLOW"; #endif #if defined EOWNERDEAD case EOWNERDEAD: return "EOWNERDEAD"; #endif #if defined EPERM case EPERM: return "EPERM"; #endif #if defined EPIPE case EPIPE: return "EPIPE"; #endif #if defined EPROTO case EPROTO: return "EPROTO"; #endif #if defined EPROTONOSUPPORT case EPROTONOSUPPORT: return "EPROTONOSUPPORT"; #endif #if defined EPROTOTYPE case EPROTOTYPE: return "EPROTOTYPE"; #endif #if defined EROFS case EROFS: return "EROFS"; #endif #if defined ESPIPE case ESPIPE: return "ESPIPE"; #endif #if defined ESRCH case ESRCH: return "ESRCH"; #endif #if defined ESTALE case ESTALE: return "ESTALE"; #endif #if defined ETIME case ETIME: return "ETIME"; #endif #if defined ETIMEDOUT case ETIMEDOUT: return "ETIMEDOUT"; #endif #if defined ETXTBSY case ETXTBSY: return "ETXTBSY"; #endif #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN case EWOULDBLOCK: return "EWOULDBLOCK"; #endif #if defined EXDEV case EXDEV: return "EXDEV"; #endif /* Other error codes on other systems. */ /* Solaris */ #if defined EADI case EADI: return "EADI"; #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined EADV case EADV: return "EADV"; #endif /* OSF/1 */ #if defined EAIO case EAIO: return "EAIO"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined EAUTH case EAUTH: return "EAUTH"; #endif /* GNU/Hurd */ #if defined EBACKGROUND case EBACKGROUND: return "EBACKGROUND"; #endif /* Mac OS X */ #if defined EBADARCH case EBADARCH: return "EBADARCH"; #endif /* Minix */ #if defined EBADCALL case EBADCALL: return "EBADCALL"; #endif /* Minix */ #if defined EBADCPU case EBADCPU: return "EBADCPU"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADE case EBADE: return "EBADE"; #endif /* Minix */ #if defined EBADEPT case EBADEPT: return "EBADEPT"; #endif /* Mac OS X */ #if defined EBADEXEC case EBADEXEC: return "EBADEXEC"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADFD case EBADFD: return "EBADFD"; #endif /* IRIX */ #if defined EBADFILT case EBADFILT: return "EBADFILT"; #endif /* Minix */ #if defined EBADIOCTL case EBADIOCTL: return "EBADIOCTL"; #endif /* Mac OS X */ #if defined EBADMACHO case EBADMACHO: return "EBADMACHO"; #endif /* Minix */ #if defined EBADMODE case EBADMODE: return "EBADMODE"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADR case EBADR: return "EBADR"; #endif /* Minix */ #if defined EBADREQUEST case EBADREQUEST: return "EBADREQUEST"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EBADRPC case EBADRPC: return "EBADRPC"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADRQC case EBADRQC: return "EBADRQC"; #endif /* IRIX */ #if defined EBADRSPEC case EBADRSPEC: return "EBADRSPEC"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADSLT case EBADSLT: return "EBADSLT"; #endif /* IRIX */ #if defined EBADTSPEC case EBADTSPEC: return "EBADTSPEC"; #endif /* HP-UX */ #if defined EBADVER case EBADVER: return "EBADVER"; #endif /* IRIX */ #if defined EBDHDL case EBDHDL: return "EBDHDL"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBFONT case EBFONT: return "EBFONT"; #endif /* IRIX */ #if defined EBUFSIZE case EBUFSIZE: return "EBUFSIZE"; #endif /* Minix */ #if defined ECALLDENIED case ECALLDENIED: return "ECALLDENIED"; #endif /* IRIX */ #if defined ECANTEXTENT case ECANTEXTENT: return "ECANTEXTENT"; #endif /* FreeBSD */ #if defined ECAPMODE case ECAPMODE: return "ECAPMODE"; #endif /* Cygwin */ #if defined ECASECLASH case ECASECLASH: return "ECASECLASH"; #endif /* IRIX */ #if defined ECELLDOWN case ECELLDOWN: return "ECELLDOWN"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ECHRNG case ECHRNG: return "ECHRNG"; #endif /* IRIX */ #if defined ECKPT case ECKPT: return "ECKPT"; #endif /* IRIX */ #if defined ECLOCKCPU case ECLOCKCPU: return "ECLOCKCPU"; #endif /* OSF/1 */ #if defined ECLONEME && ECLONEME != ERESTART case ECLONEME: return "ECLONEME"; #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ECOMM case ECOMM: return "ECOMM"; #endif /* HP-UX */ #if defined ECONFIG case ECONFIG: return "ECONFIG"; #endif /* IRIX */ #if defined ECONTROLLER case ECONTROLLER: return "ECONTROLLER"; #endif /* AIX */ #if defined ECORRUPT case ECORRUPT: return "ECORRUPT"; #endif /* GNU/Hurd */ #if defined ED case ED: return "ED"; #endif /* Minix */ #if defined EDEADEPT case EDEADEPT: return "EDEADEPT"; #endif /* IRIX, Solaris, Cygwin */ #if defined EDEADLOCK && EDEADLOCK != EDEADLK case EDEADLOCK: return "EDEADLOCK"; #endif /* Minix */ #if defined EDEADSRCDST case EDEADSRCDST: return "EDEADSRCDST"; #endif /* IRIX */ #if defined EDELAY case EDELAY: return "EDELAY"; #endif /* IRIX */ #if defined EDESTROYED case EDESTROYED: return "EDESTROYED"; #endif /* Mac OS X */ #if defined EDEVERR case EDEVERR: return "EDEVERR"; #endif /* GNU/Hurd */ #if defined EDIED case EDIED: return "EDIED"; #endif /* IRIX */ #if defined EDIRCORRUPTED case EDIRCORRUPTED: return "EDIRCORRUPTED"; #endif /* FreeBSD */ #if defined EDIRIOCTL case EDIRIOCTL: return "EDIRIOCTL"; #endif /* OSF/1 */ #if defined EDIRTY case EDIRTY: return "EDIRTY"; #endif /* IRIX */ #if defined EDISJOINT case EDISJOINT: return "EDISJOINT"; #endif /* AIX */ #if defined EDIST case EDIST: return "EDIST"; #endif /* Minix */ #if defined EDONTREPLY case EDONTREPLY: return "EDONTREPLY"; #endif /* FreeBSD */ #if defined EDOOFUS case EDOOFUS: return "EDOOFUS"; #endif /* Linux, HP-UX, Cygwin */ #if defined EDOTDOT case EDOTDOT: return "EDOTDOT"; #endif /* OSF/1 */ #if defined EDUPPKG case EDUPPKG: return "EDUPPKG"; #endif /* GNU/Hurd */ #if defined ED_ALREADY_OPEN case ED_ALREADY_OPEN: return "ED_ALREADY_OPEN"; #endif /* GNU/Hurd */ #if defined ED_DEVICE_DOWN case ED_DEVICE_DOWN: return "ED_DEVICE_DOWN"; #endif /* GNU/Hurd */ #if defined ED_INVALID_OPERATION case ED_INVALID_OPERATION:return "ED_INVALID_OPERATION"; #endif /* GNU/Hurd */ #if defined ED_INVALID_RECNUM case ED_INVALID_RECNUM:return "ED_INVALID_RECNUM"; #endif /* GNU/Hurd */ #if defined ED_INVALID_SIZE case ED_INVALID_SIZE: return "ED_INVALID_SIZE"; #endif /* GNU/Hurd */ #if defined ED_IO_ERROR case ED_IO_ERROR: return "ED_IO_ERROR"; #endif /* GNU/Hurd */ #if defined ED_NO_MEMORY case ED_NO_MEMORY: return "ED_NO_MEMORY"; #endif /* GNU/Hurd */ #if defined ED_NO_SUCH_DEVICE case ED_NO_SUCH_DEVICE:return "ED_NO_SUCH_DEVICE"; #endif /* GNU/Hurd */ #if defined ED_READ_ONLY case ED_READ_ONLY: return "ED_READ_ONLY"; #endif /* GNU/Hurd */ #if defined ED_WOULD_BLOCK case ED_WOULD_BLOCK: return "ED_WOULD_BLOCK"; #endif /* IRIX */ #if defined EEMPTY case EEMPTY: return "EEMPTY"; #endif /* OSF/1 */ #if defined EEMULATE case EEMULATE: return "EEMULATE"; #endif /* IRIX */ #if defined EENDOFMINOR case EENDOFMINOR: return "EENDOFMINOR"; #endif /* IRIX */ #if defined EENQUEUED case EENQUEUED: return "EENQUEUED"; #endif /* OSF/1 */ #if defined EFAIL case EFAIL: return "EFAIL"; #endif /* AIX */ #if defined EFORMAT case EFORMAT: return "EFORMAT"; #endif /* Haiku */ #if defined EFPOS case EFPOS: return "EFPOS"; #endif /* IRIX */ #if defined EFSCORRUPTED case EFSCORRUPTED: return "EFSCORRUPTED"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix, Cygwin */ #if defined EFTYPE case EFTYPE: return "EFTYPE"; #endif /* Minix */ #if defined EGENERIC case EGENERIC: return "EGENERIC"; #endif /* GNU/Hurd */ #if defined EGRATUITOUS case EGRATUITOUS: return "EGRATUITOUS"; #endif /* GNU/Hurd */ #if defined EGREGIOUS case EGREGIOUS: return "EGREGIOUS"; #endif /* IRIX */ #if defined EGROUPLOOP case EGROUPLOOP: return "EGROUPLOOP"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EHOSTDOWN case EHOSTDOWN: return "EHOSTDOWN"; #endif /* Linux */ #if defined EHWPOISON case EHWPOISON: return "EHWPOISON"; #endif /* GNU/Hurd */ #if defined EIEIO case EIEIO: return "EIEIO"; #endif /* IRIX */ #if defined EINIT case EINIT: return "EINIT"; #endif /* OSF/1 */ #if defined EINPROG case EINPROG: return "EINPROG"; #endif /* IRIX */ #if defined EINVALMODE case EINVALMODE: return "EINVALMODE"; #endif /* IRIX */ #if defined EINVALSTATE case EINVALSTATE: return "EINVALSTATE"; #endif /* IRIX */ #if defined EINVALTIME case EINVALTIME: return "EINVALTIME"; #endif /* IRIX */ #if defined EIORESID case EIORESID: return "EIORESID"; #endif /* OpenBSD */ #if defined EIPSEC case EIPSEC: return "EIPSEC"; #endif /* Linux, IRIX */ #if defined EISNAM case EISNAM: return "EISNAM"; #endif /* IRIX */ #if defined EJOINED case EJOINED: return "EJOINED"; #endif /* FreeBSD, OSF/1 */ #if defined EJUSTRETURN case EJUSTRETURN: return "EJUSTRETURN"; #endif /* GNU/Hurd */ #if defined EKERN_ABORTED case EKERN_ABORTED: return "EKERN_ABORTED"; #endif /* GNU/Hurd */ #if defined EKERN_FAILURE case EKERN_FAILURE: return "EKERN_FAILURE"; #endif /* GNU/Hurd */ #if defined EKERN_INTERRUPTED case EKERN_INTERRUPTED:return "EKERN_INTERRUPTED"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_ADDRESS case EKERN_INVALID_ADDRESS:return "EKERN_INVALID_ADDRESS"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_ARGUMENT case EKERN_INVALID_ARGUMENT:return "EKERN_INVALID_ARGUMENT"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_CAPABILITY case EKERN_INVALID_CAPABILITY:return "EKERN_INVALID_CAPABILITY"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_HOST case EKERN_INVALID_HOST:return "EKERN_INVALID_HOST"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_NAME case EKERN_INVALID_NAME:return "EKERN_INVALID_NAME"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_RIGHT case EKERN_INVALID_RIGHT:return "EKERN_INVALID_RIGHT"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_TASK case EKERN_INVALID_TASK:return "EKERN_INVALID_TASK"; #endif /* GNU/Hurd */ #if defined EKERN_INVALID_VALUE case EKERN_INVALID_VALUE:return "EKERN_INVALID_VALUE"; #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_ERROR case EKERN_MEMORY_ERROR:return "EKERN_MEMORY_ERROR"; #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_FAILURE case EKERN_MEMORY_FAILURE:return "EKERN_MEMORY_FAILURE"; #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_PRESENT case EKERN_MEMORY_PRESENT:return "EKERN_MEMORY_PRESENT"; #endif /* GNU/Hurd */ #if defined EKERN_NAME_EXISTS case EKERN_NAME_EXISTS:return "EKERN_NAME_EXISTS"; #endif /* GNU/Hurd */ #if defined EKERN_NOT_IN_SET case EKERN_NOT_IN_SET:return "EKERN_NOT_IN_SET"; #endif /* GNU/Hurd */ #if defined EKERN_NOT_RECEIVER case EKERN_NOT_RECEIVER:return "EKERN_NOT_RECEIVER"; #endif /* GNU/Hurd */ #if defined EKERN_NO_ACCESS case EKERN_NO_ACCESS: return "EKERN_NO_ACCESS"; #endif /* GNU/Hurd */ #if defined EKERN_NO_SPACE case EKERN_NO_SPACE: return "EKERN_NO_SPACE"; #endif /* GNU/Hurd */ #if defined EKERN_PROTECTION_FAILURE case EKERN_PROTECTION_FAILURE:return "EKERN_PROTECTION_FAILURE"; #endif /* GNU/Hurd */ #if defined EKERN_RESOURCE_SHORTAGE case EKERN_RESOURCE_SHORTAGE:return "EKERN_RESOURCE_SHORTAGE"; #endif /* GNU/Hurd */ #if defined EKERN_RIGHT_EXISTS case EKERN_RIGHT_EXISTS:return "EKERN_RIGHT_EXISTS"; #endif /* GNU/Hurd */ #if defined EKERN_TERMINATED case EKERN_TERMINATED:return "EKERN_TERMINATED"; #endif /* GNU/Hurd */ #if defined EKERN_TIMEDOUT case EKERN_TIMEDOUT: return "EKERN_TIMEDOUT"; #endif /* GNU/Hurd */ #if defined EKERN_UREFS_OVERFLOW case EKERN_UREFS_OVERFLOW:return "EKERN_UREFS_OVERFLOW"; #endif /* GNU/Hurd */ #if defined EKERN_WRITE_PROTECTION_FAILURE case EKERN_WRITE_PROTECTION_FAILURE:return "EKERN_WRITE_PROTECTION_FAILURE"; #endif /* Linux */ #if defined EKEYEXPIRED case EKEYEXPIRED: return "EKEYEXPIRED"; #endif /* Linux */ #if defined EKEYREJECTED case EKEYREJECTED: return "EKEYREJECTED"; #endif /* Linux */ #if defined EKEYREVOKED case EKEYREVOKED: return "EKEYREVOKED"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL2HLT case EL2HLT: return "EL2HLT"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL2NSYNC case EL2NSYNC: return "EL2NSYNC"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL3HLT case EL3HLT: return "EL3HLT"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL3RST case EL3RST: return "EL3RST"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined ELAST && 0 case ELAST: return "ELAST"; #endif /* Cygwin */ #if defined ELBIN case ELBIN: return "ELBIN"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBACC case ELIBACC: return "ELIBACC"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBBAD case ELIBBAD: return "ELIBBAD"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBEXEC case ELIBEXEC: return "ELIBEXEC"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBMAX case ELIBMAX: return "ELIBMAX"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBSCN case ELIBSCN: return "ELIBSCN"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ELNRNG case ELNRNG: return "ELNRNG"; #endif /* Minix */ #if defined ELOCKED case ELOCKED: return "ELOCKED"; #endif /* Solaris */ #if defined ELOCKUNMAPPED case ELOCKUNMAPPED: return "ELOCKUNMAPPED"; #endif /* IRIX */ #if defined ELOGINLIM case ELOGINLIM: return "ELOGINLIM"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_BODY_ERROR case EMACH_RCV_BODY_ERROR:return "EMACH_RCV_BODY_ERROR"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_HEADER_ERROR case EMACH_RCV_HEADER_ERROR:return "EMACH_RCV_HEADER_ERROR"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_INTERRUPTED case EMACH_RCV_INTERRUPTED:return "EMACH_RCV_INTERRUPTED"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_DATA case EMACH_RCV_INVALID_DATA:return "EMACH_RCV_INVALID_DATA"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_NAME case EMACH_RCV_INVALID_NAME:return "EMACH_RCV_INVALID_NAME"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_NOTIFY case EMACH_RCV_INVALID_NOTIFY:return "EMACH_RCV_INVALID_NOTIFY"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_IN_PROGRESS case EMACH_RCV_IN_PROGRESS:return "EMACH_RCV_IN_PROGRESS"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_IN_SET case EMACH_RCV_IN_SET:return "EMACH_RCV_IN_SET"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_PORT_CHANGED case EMACH_RCV_PORT_CHANGED:return "EMACH_RCV_PORT_CHANGED"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_PORT_DIED case EMACH_RCV_PORT_DIED:return "EMACH_RCV_PORT_DIED"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_TIMED_OUT case EMACH_RCV_TIMED_OUT:return "EMACH_RCV_TIMED_OUT"; #endif /* GNU/Hurd */ #if defined EMACH_RCV_TOO_LARGE case EMACH_RCV_TOO_LARGE:return "EMACH_RCV_TOO_LARGE"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INTERRUPTED case EMACH_SEND_INTERRUPTED:return "EMACH_SEND_INTERRUPTED"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_DATA case EMACH_SEND_INVALID_DATA:return "EMACH_SEND_INVALID_DATA"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_DEST case EMACH_SEND_INVALID_DEST:return "EMACH_SEND_INVALID_DEST"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_HEADER case EMACH_SEND_INVALID_HEADER:return "EMACH_SEND_INVALID_HEADER"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_MEMORY case EMACH_SEND_INVALID_MEMORY:return "EMACH_SEND_INVALID_MEMORY"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_NOTIFY case EMACH_SEND_INVALID_NOTIFY:return "EMACH_SEND_INVALID_NOTIFY"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_REPLY case EMACH_SEND_INVALID_REPLY:return "EMACH_SEND_INVALID_REPLY"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_RIGHT case EMACH_SEND_INVALID_RIGHT:return "EMACH_SEND_INVALID_RIGHT"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_TYPE case EMACH_SEND_INVALID_TYPE:return "EMACH_SEND_INVALID_TYPE"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_IN_PROGRESS case EMACH_SEND_IN_PROGRESS:return "EMACH_SEND_IN_PROGRESS"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_MSG_TOO_SMALL case EMACH_SEND_MSG_TOO_SMALL:return "EMACH_SEND_MSG_TOO_SMALL"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_NOTIFY_IN_PROGRESS case EMACH_SEND_NOTIFY_IN_PROGRESS:return "EMACH_SEND_NOTIFY_IN_PROGRESS"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_NO_BUFFER case EMACH_SEND_NO_BUFFER:return "EMACH_SEND_NO_BUFFER"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_NO_NOTIFY case EMACH_SEND_NO_NOTIFY:return "EMACH_SEND_NO_NOTIFY"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_TIMED_OUT case EMACH_SEND_TIMED_OUT:return "EMACH_SEND_TIMED_OUT"; #endif /* GNU/Hurd */ #if defined EMACH_SEND_WILL_NOTIFY case EMACH_SEND_WILL_NOTIFY:return "EMACH_SEND_WILL_NOTIFY"; #endif /* AIX, OSF/1 */ #if defined EMEDIA case EMEDIA: return "EMEDIA"; #endif /* Linux, OpenBSD */ #if defined EMEDIUMTYPE case EMEDIUMTYPE: return "EMEDIUMTYPE"; #endif /* IRIX */ #if defined EMEMRETRY case EMEMRETRY: return "EMEMRETRY"; #endif /* IRIX */ #if defined EMIGRATED case EMIGRATED: return "EMIGRATED"; #endif /* IRIX */ #if defined EMIGRATING case EMIGRATING: return "EMIGRATING"; #endif /* GNU/Hurd */ #if defined EMIG_ARRAY_TOO_LARGE case EMIG_ARRAY_TOO_LARGE:return "EMIG_ARRAY_TOO_LARGE"; #endif /* GNU/Hurd */ #if defined EMIG_BAD_ARGUMENTS case EMIG_BAD_ARGUMENTS:return "EMIG_BAD_ARGUMENTS"; #endif /* GNU/Hurd */ #if defined EMIG_BAD_ID case EMIG_BAD_ID: return "EMIG_BAD_ID"; #endif /* GNU/Hurd */ #if defined EMIG_DESTROY_REQUEST case EMIG_DESTROY_REQUEST:return "EMIG_DESTROY_REQUEST"; #endif /* GNU/Hurd */ #if defined EMIG_EXCEPTION case EMIG_EXCEPTION: return "EMIG_EXCEPTION"; #endif /* GNU/Hurd */ #if defined EMIG_NO_REPLY case EMIG_NO_REPLY: return "EMIG_NO_REPLY"; #endif /* GNU/Hurd */ #if defined EMIG_REMOTE_ERROR case EMIG_REMOTE_ERROR:return "EMIG_REMOTE_ERROR"; #endif /* GNU/Hurd */ #if defined EMIG_REPLY_MISMATCH case EMIG_REPLY_MISMATCH:return "EMIG_REPLY_MISMATCH"; #endif /* GNU/Hurd */ #if defined EMIG_SERVER_DIED case EMIG_SERVER_DIED:return "EMIG_SERVER_DIED"; #endif /* GNU/Hurd */ #if defined EMIG_TYPE_ERROR case EMIG_TYPE_ERROR: return "EMIG_TYPE_ERROR"; #endif /* OSF/1 */ #if defined EMTIMERS case EMTIMERS: return "EMTIMERS"; #endif /* IRIX */ #if defined EMUSTRUN case EMUSTRUN: return "EMUSTRUN"; #endif /* Linux, IRIX */ #if defined ENAVAIL case ENAVAIL: return "ENAVAIL"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined ENEEDAUTH case ENEEDAUTH: return "ENEEDAUTH"; #endif /* IRIX */ #if defined ENFSREMOTE case ENFSREMOTE: return "ENFSREMOTE"; #endif /* Cygwin */ #if defined ENMFILE case ENMFILE: return "ENMFILE"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ENOANO case ENOANO: return "ENOANO"; #endif /* IRIX */ #if defined ENOATTACH case ENOATTACH: return "ENOATTACH"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Minix */ #if defined ENOATTR case ENOATTR: return "ENOATTR"; #endif /* IRIX */ #if defined ENOBWD case ENOBWD: return "ENOBWD"; #endif /* MirBSD */ #if defined ENOCOFFEE case ENOCOFFEE: return "ENOCOFFEE"; #endif /* Minix */ #if defined ENOCONN case ENOCONN: return "ENOCONN"; #endif /* AIX */ #if defined ENOCONNECT case ENOCONNECT: return "ENOCONNECT"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ENOCSI case ENOCSI: return "ENOCSI"; #endif /* IRIX */ #if defined ENOEXIST case ENOEXIST: return "ENOEXIST"; #endif /* IRIX */ #if defined ENOINTRGROUP case ENOINTRGROUP: return "ENOINTRGROUP"; #endif /* FreeBSD */ #if defined ENOIOCTL case ENOIOCTL: return "ENOIOCTL"; #endif /* Linux */ #if defined ENOKEY case ENOKEY: return "ENOKEY"; #endif /* IRIX */ #if defined ENOLIMFILE case ENOLIMFILE: return "ENOLIMFILE"; #endif /* HP-UX */ #if defined ENOLOAD case ENOLOAD: return "ENOLOAD"; #endif /* IRIX */ #if defined ENOLOGIN case ENOLOGIN: return "ENOLOGIN"; #endif /* HP-UX */ #if defined ENOMATCH case ENOMATCH: return "ENOMATCH"; #endif /* Linux, OpenBSD, Cygwin */ #if defined ENOMEDIUM case ENOMEDIUM: return "ENOMEDIUM"; #endif /* IRIX */ #if defined ENOMESSAGE case ENOMESSAGE: return "ENOMESSAGE"; #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ENONET case ENONET: return "ENONET"; #endif /* Linux, HP-UX, IRIX, OSF/1, Solaris, Cygwin */ #if defined ENOPKG case ENOPKG: return "ENOPKG"; #endif /* Mac OS X */ #if defined ENOPOLICY case ENOPOLICY: return "ENOPOLICY"; #endif /* IRIX */ #if defined ENOPROC case ENOPROC: return "ENOPROC"; #endif /* HP-UX */ #if defined ENOREG case ENOREG: return "ENOREG"; #endif /* IRIX */ #if defined ENOSERVICE case ENOSERVICE: return "ENOSERVICE"; #endif /* Cygwin */ #if defined ENOSHARE case ENOSHARE: return "ENOSHARE"; #endif /* HP-UX, OSF/1 */ #if defined ENOSYM case ENOSYM: return "ENOSYM"; #endif /* Solaris */ #if defined ENOTACTIVE case ENOTACTIVE: return "ENOTACTIVE"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ENOTBLK case ENOTBLK: return "ENOTBLK"; #endif /* FreeBSD */ #if defined ENOTCAPABLE case ENOTCAPABLE: return "ENOTCAPABLE"; #endif /* IRIX */ #if defined ENOTCONTROLLER case ENOTCONTROLLER: return "ENOTCONTROLLER"; #endif /* IRIX */ #if defined ENOTENQUEUED case ENOTENQUEUED: return "ENOTENQUEUED"; #endif /* IRIX */ #if defined ENOTJOINED case ENOTJOINED: return "ENOTJOINED"; #endif /* Linux, IRIX */ #if defined ENOTNAM case ENOTNAM: return "ENOTNAM"; #endif /* AIX, Minix */ #if defined ENOTREADY case ENOTREADY: return "ENOTREADY"; #endif /* AIX */ #if defined ENOTRUST case ENOTRUST: return "ENOTRUST"; #endif /* IRIX */ #if defined ENOTSTOPPED case ENOTSTOPPED: return "ENOTSTOPPED"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ENOTUNIQ case ENOTUNIQ: return "ENOTUNIQ"; #endif /* HP-UX */ #if defined ENOUNLD case ENOUNLD: return "ENOUNLD"; #endif /* HP-UX */ #if defined ENOUNREG case ENOUNREG: return "ENOUNREG"; #endif /* Minix */ #if defined ENOURG case ENOURG: return "ENOURG"; #endif /* native Windows */ #if defined EOTHER case EOTHER: return "EOTHER"; #endif /* Minix */ #if defined EPACKSIZE case EPACKSIZE: return "EPACKSIZE"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EPFNOSUPPORT case EPFNOSUPPORT: return "EPFNOSUPPORT"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, OSF/1, Minix, Cygwin */ #if defined EPROCLIM case EPROCLIM: return "EPROCLIM"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROCUNAVAIL case EPROCUNAVAIL: return "EPROCUNAVAIL"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROGMISMATCH case EPROGMISMATCH: return "EPROGMISMATCH"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROGUNAVAIL case EPROGUNAVAIL: return "EPROGUNAVAIL"; #endif /* Mac OS X */ #if defined EPWROFF case EPWROFF: return "EPWROFF"; #endif /* Mac OS X */ #if defined EQFULL case EQFULL: return "EQFULL"; #endif /* HP-UX */ #if defined ERELOC case ERELOC: return "ERELOC"; #endif /* OSF/1 */ #if defined ERELOCATED case ERELOCATED: return "ERELOCATED"; #endif /* FreeBSD */ #if defined ERELOOKUP case ERELOOKUP: return "ERELOOKUP"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EREMCHG case EREMCHG: return "EREMCHG"; #endif /* IRIX */ #if defined EREMDEV case EREMDEV: return "EREMDEV"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EREMOTE case EREMOTE: return "EREMOTE"; #endif /* Linux, IRIX */ #if defined EREMOTEIO case EREMOTEIO: return "EREMOTEIO"; #endif /* HP-UX */ #if defined EREMOTERELEASE case EREMOTERELEASE: return "EREMOTERELEASE"; #endif /* Linux, FreeBSD, AIX, IRIX, OSF/1, Solaris, Minix */ #if defined ERESTART case ERESTART: return "ERESTART"; #endif /* Linux */ #if defined ERFKILL case ERFKILL: return "ERFKILL"; #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined ERPCMISMATCH case ERPCMISMATCH: return "ERPCMISMATCH"; #endif /* AIX */ #if defined ESAD case ESAD: return "ESAD"; #endif /* Mac OS X */ #if defined ESHLIBVERS case ESHLIBVERS: return "ESHLIBVERS"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined ESHUTDOWN case ESHUTDOWN: return "ESHUTDOWN"; #endif /* Haiku */ #if defined ESIGPARM case ESIGPARM: return "ESIGPARM"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ESOCKTNOSUPPORT case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT"; #endif /* AIX, OSF/1 */ #if defined ESOFT case ESOFT: return "ESOFT"; #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ESRMNT case ESRMNT: return "ESRMNT"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ESTRPIPE case ESTRPIPE: return "ESTRPIPE"; #endif /* OSF/1 */ #if defined ESUCCESS case ESUCCESS: return "ESUCCESS"; #endif /* AIX */ #if defined ESYSERROR case ESYSERROR: return "ESYSERROR"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ETOOMANYREFS case ETOOMANYREFS: return "ETOOMANYREFS"; #endif /* Minix */ #if defined ETRAPDENIED case ETRAPDENIED: return "ETRAPDENIED"; #endif /* Linux, IRIX */ #if defined EUCLEAN case EUCLEAN: return "EUCLEAN"; #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EUNATCH case EUNATCH: return "EUNATCH"; #endif /* Minix */ #if defined EURG case EURG: return "EURG"; #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined EUSERS case EUSERS: return "EUSERS"; #endif /* OSF/1 */ #if defined EVERSION case EVERSION: return "EVERSION"; #endif /* IRIX */ #if defined EWRONGFS case EWRONGFS: return "EWRONGFS"; #endif /* AIX */ #if defined EWRPROTECT case EWRPROTECT: return "EWRPROTECT"; #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EXFULL case EXFULL: return "EXFULL"; #endif default: return NULL; } } ������������������������������������gnulib-20210822~d383792/lib/strfmon_l.c�������������������������������������������������������������0000664�0000000�0000000�00000015463�14110572173�0017225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strfmon_l override. Copyright (C) 2017-2021 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/>. */ #include <config.h> /* Specification. */ #include <monetary.h> #include <errno.h> #include <locale.h> #include <stdarg.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #undef strfmon_l /* This override can only support a limited number of arguments. */ #define MAX_ARGS 16 /* A parsed directive. */ typedef struct { bool needs_long_double; const char *conversion_ptr; } directive_t; /* A parsed format string. */ typedef struct { size_t count; directive_t dir[MAX_ARGS]; } directives_t; /* Parses a monetary format string. Returns 0 and fills *DIRECTIVESP if valid. Returns -1 if invalid. */ static int fmon_parse (const char *format, directives_t *directivesp) { size_t count = 0; const char *cp = format; while (*cp != '\0') { if (*cp++ == '%') { /* Parse flags. */ while (*cp == '=' || *cp == '^' || *cp == '+' || *cp == '(' || *cp == '!' || *cp == '-') { if (*cp == '=') { cp++; if (*cp == '\0') return -1; } cp++; } /* Parse field width. */ while (*cp >= '0' && *cp <= '9') cp++; /* Parse left precision. */ if (*cp == '#') { cp++; while (*cp >= '0' && *cp <= '9') cp++; } /* Parse right precision. */ if (*cp == '.') { cp++; while (*cp >= '0' && *cp <= '9') cp++; } /* Now comes the conversion specifier. */ if (*cp != '%') { if (count == MAX_ARGS) /* Too many arguments. */ return -1; /* glibc supports an 'L' modifier before the conversion specifier. */ if (*cp == 'L') { cp++; directivesp->dir[count].needs_long_double = true; } else directivesp->dir[count].needs_long_double = false; if (!(*cp == 'i' || *cp == 'n')) return -1; directivesp->dir[count].conversion_ptr = cp; count++; } cp++; } } directivesp->count = count; return 0; } ssize_t rpl_strfmon_l (char *s, size_t maxsize, locale_t locale, const char *format, ...) { /* Work around glibc 2.23 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=19633>. */ va_list argptr; locale_t orig_locale; directives_t directives; ssize_t result; orig_locale = uselocale ((locale_t)0); if (uselocale (locale) == (locale_t)0) /* errno is set. */ return -1; /* The format string may consume 'double' or 'long double' arguments. In order not to have to link with libffcall or libffi, convert all arguments to 'long double', and use a modified format string that requests 'long double' arguments. But since 'long double' arguments are only supported on glibc, do so only if the original format string consumes at least one 'long double' argument. */ if (fmon_parse (format, &directives) < 0) { errno = EINVAL; result = -1; } else { bool use_long_double; unsigned int i; use_long_double = false; for (i = 0; i < directives.count; i++) if (directives.dir[i].needs_long_double) { use_long_double = true; break; } va_start (argptr, format); if (use_long_double) { char *ld_format; /* Allocate room for the modified format string. */ ld_format = (char *) malloc (strlen (format) + directives.count + 1); if (ld_format == NULL) { errno = ENOMEM; result = -1; } else { long double args[MAX_ARGS]; /* Create the modified format string. */ { const char *p = format; char *dest = ld_format; for (i = 0; i < directives.count; i++) { const char *q = directives.dir[i].conversion_ptr; memcpy (dest, p, q - p); dest += q - p; if (!directives.dir[i].needs_long_double) *dest++ = 'L'; p = q; } strcpy (dest, p); } /* Set up arguments array. */ for (i = 0; i < directives.count; i++) args[i] = (directives.dir[i].needs_long_double ? va_arg (argptr, long double) : (long double) va_arg (argptr, double)); /* Avoid uninitialized memory references. */ for (; i < MAX_ARGS; i++) args[i] = 0.0L; result = strfmon_l (s, maxsize, locale, ld_format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); free (ld_format); } } else { double args[MAX_ARGS]; /* Set up arguments array. */ for (i = 0; i < directives.count; i++) args[i] = va_arg (argptr, double); /* Avoid uninitialized memory references. */ for (; i < MAX_ARGS; i++) args[i] = 0.0; result = strfmon_l (s, maxsize, locale, format, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); } va_end (argptr); } if (uselocale (orig_locale) == (locale_t)0) /* errno is set. */ return -1; return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strftime-fixes.c��������������������������������������������������������0000664�0000000�0000000�00000005054�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in strftime. Copyright (C) 2017-2021 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/>. */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> #undef strftime size_t rpl_strftime (char *buf, size_t bufsize, const char *format, const struct tm *tp) { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); #endif return strftime (buf, bufsize, format, tp); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strftime.h��������������������������������������������������������������0000664�0000000�0000000�00000002644�14110572173�0017061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declarations for strftime.c Copyright (C) 2002, 2004, 2008-2021 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/>. */ #include <time.h> #ifdef __cplusplus extern "C" { #endif /* Just like strftime, but with two more arguments: POSIX requires that strftime use the local timezone information. Use the timezone __TZ instead. Use __NS as the number of nanoseconds in the %N directive. On error, set errno and return 0. Otherwise, return the number of bytes generated (not counting the trailing NUL), preserving errno if the number is 0. This errno behavior is in draft POSIX 202x plus some requested changes to POSIX. */ size_t nstrftime (char *restrict, size_t, char const *, struct tm const *, timezone_t __tz, int __ns); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/striconv.c��������������������������������������������������������������0000664�0000000�0000000�00000030470�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion. Copyright (C) 2001-2007, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. 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/>. */ #include <config.h> /* Specification. */ #include "striconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #if HAVE_ICONV # include <iconv.h> /* Get MB_LEN_MAX, CHAR_BIT. */ # include <limits.h> #endif #include "c-strcase.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #if HAVE_ICONV int mem_cd_iconv (const char *src, size_t srclen, iconv_t cd, char **resultp, size_t *lengthp) { # define tmpbufsize 4096 size_t length; char *result; /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) /* Set to the initial state. */ iconv (cd, NULL, NULL, NULL, NULL); # endif /* Determine the length we need. */ { size_t count = 0; /* The alignment is needed when converting e.g. to glibc's WCHAR_T or libiconv's UCS-4-INTERNAL encoding. */ union { unsigned int align; char buf[tmpbufsize]; } tmp; # define tmpbuf tmp.buf const char *inptr = src; size_t insize = srclen; while (insize > 0) { char *outptr = tmpbuf; size_t outsize = tmpbufsize; size_t res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize); if (res == (size_t)(-1)) { if (errno == E2BIG) ; else if (errno == EINVAL) break; else return -1; } # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. */ else if (res > 0) { errno = EILSEQ; return -1; } # endif count += outptr - tmpbuf; } /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) { char *outptr = tmpbuf; size_t outsize = tmpbufsize; size_t res = iconv (cd, NULL, NULL, &outptr, &outsize); if (res == (size_t)(-1)) return -1; count += outptr - tmpbuf; } # endif length = count; # undef tmpbuf } if (length == 0) { *lengthp = 0; return 0; } if (*resultp != NULL && *lengthp >= length) result = *resultp; else { result = (char *) malloc (length); if (result == NULL) { errno = ENOMEM; return -1; } } /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) /* Return to the initial state. */ iconv (cd, NULL, NULL, NULL, NULL); # endif /* Do the conversion for real. */ { const char *inptr = src; size_t insize = srclen; char *outptr = result; size_t outsize = length; while (insize > 0) { size_t res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize); if (res == (size_t)(-1)) { if (errno == EINVAL) break; else goto fail; } # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. */ else if (res > 0) { errno = EILSEQ; goto fail; } # endif } /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) { size_t res = iconv (cd, NULL, NULL, &outptr, &outsize); if (res == (size_t)(-1)) goto fail; } # endif if (outsize != 0) abort (); } *resultp = result; *lengthp = length; return 0; fail: { if (result != *resultp) free (result); return -1; } # undef tmpbufsize } char * str_cd_iconv (const char *src, iconv_t cd) { /* For most encodings, a trailing NUL byte in the input will be converted to a trailing NUL byte in the output. But not for UTF-7. So that this function is usable for UTF-7, we have to exclude the NUL byte from the conversion and add it by hand afterwards. */ # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. For other iconv() implementations, we have to look at the number of irreversible conversions returned; but this information is lost when iconv() returns for an E2BIG reason. Therefore we cannot use the second, faster algorithm. */ char *result = NULL; size_t length = 0; int retval = mem_cd_iconv (src, strlen (src), cd, &result, &length); char *final_result; if (retval < 0) { if (result != NULL) abort (); return NULL; } /* Add the terminating NUL byte. */ final_result = (result != NULL ? realloc (result, length + 1) : malloc (length + 1)); if (final_result == NULL) { free (result); errno = ENOMEM; return NULL; } final_result[length] = '\0'; return final_result; # else /* This algorithm is likely faster than the one above. But it may produce iconv() returns for an E2BIG reason, when the output size guess is too small. Therefore it can only be used when we don't need the number of irreversible conversions performed. */ char *result; size_t result_size; size_t length; const char *inptr = src; size_t inbytes_remaining = strlen (src); /* Make a guess for the worst-case output size, in order to avoid a realloc. It's OK if the guess is wrong as long as it is not zero and doesn't lead to an integer overflow. */ result_size = inbytes_remaining; { size_t approx_sqrt_SIZE_MAX = SIZE_MAX >> (sizeof (size_t) * CHAR_BIT / 2); if (result_size <= approx_sqrt_SIZE_MAX / MB_LEN_MAX) result_size *= MB_LEN_MAX; } result_size += 1; /* for the terminating NUL */ result = (char *) malloc (result_size); if (result == NULL) { errno = ENOMEM; return NULL; } /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) /* Set to the initial state. */ iconv (cd, NULL, NULL, NULL, NULL); # endif /* Do the conversion. */ { char *outptr = result; size_t outbytes_remaining = result_size - 1; for (;;) { /* Here inptr + inbytes_remaining = src + strlen (src), outptr + outbytes_remaining = result + result_size - 1. */ size_t res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytes_remaining, &outptr, &outbytes_remaining); if (res == (size_t)(-1)) { if (errno == EINVAL) break; else if (errno == E2BIG) { size_t used = outptr - result; size_t newsize = result_size * 2; char *newresult; if (!(newsize > result_size)) { errno = ENOMEM; goto failed; } newresult = (char *) realloc (result, newsize); if (newresult == NULL) { errno = ENOMEM; goto failed; } result = newresult; result_size = newsize; outptr = result + used; outbytes_remaining = result_size - 1 - used; } else goto failed; } else break; } /* Avoid glibc-2.1 bug and Solaris 2.7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) for (;;) { /* Here outptr + outbytes_remaining = result + result_size - 1. */ size_t res = iconv (cd, NULL, NULL, &outptr, &outbytes_remaining); if (res == (size_t)(-1)) { if (errno == E2BIG) { size_t used = outptr - result; size_t newsize = result_size * 2; char *newresult; if (!(newsize > result_size)) { errno = ENOMEM; goto failed; } newresult = (char *) realloc (result, newsize); if (newresult == NULL) { errno = ENOMEM; goto failed; } result = newresult; result_size = newsize; outptr = result + used; outbytes_remaining = result_size - 1 - used; } else goto failed; } else break; } # endif /* Add the terminating NUL byte. */ *outptr++ = '\0'; length = outptr - result; } /* Give away unused memory. */ if (length < result_size) { char *smaller_result = (char *) realloc (result, length); if (smaller_result != NULL) result = smaller_result; } return result; failed: free (result); return NULL; # endif } #endif char * str_iconv (const char *src, const char *from_codeset, const char *to_codeset) { if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) { char *result = strdup (src); if (result == NULL) errno = ENOMEM; return result; } else { #if HAVE_ICONV iconv_t cd; char *result; /* Avoid glibc-2.1 bug with EUC-KR. */ # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ && !defined _LIBICONV_VERSION if (c_strcasecmp (from_codeset, "EUC-KR") == 0 || c_strcasecmp (to_codeset, "EUC-KR") == 0) { errno = EINVAL; return NULL; } # endif cd = iconv_open (to_codeset, from_codeset); if (cd == (iconv_t) -1) return NULL; result = str_cd_iconv (src, cd); if (result == NULL) { /* Close cd, but preserve the errno from str_cd_iconv. */ int saved_errno = errno; iconv_close (cd); errno = saved_errno; } else { if (iconv_close (cd) < 0) { free (result); return NULL; } } return result; #else /* This is a different error code than if iconv_open existed but didn't support from_codeset and to_codeset, so that the caller can emit an error message such as "iconv() is not supported. Installing GNU libiconv and then reinstalling this package would fix this." */ errno = ENOSYS; return NULL; #endif } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/striconv.h��������������������������������������������������������������0000664�0000000�0000000�00000005706�14110572173�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion. Copyright (C) 2001-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. 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 _STRICONV_H #define _STRICONV_H #include <stdlib.h> #if HAVE_ICONV #include <iconv.h> #endif #ifdef __cplusplus extern "C" { #endif #if HAVE_ICONV /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. The conversion descriptor is passed as CD. *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int mem_cd_iconv (const char *src, size_t srclen, iconv_t cd, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. The conversion descriptor is passed as CD. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * str_cd_iconv (const char *src, iconv_t cd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * str_iconv (const char *src, const char *from_codeset, const char *to_codeset) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _STRICONV_H */ ����������������������������������������������������������gnulib-20210822~d383792/lib/striconveh.c������������������������������������������������������������0000664�0000000�0000000�00000112172�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling. Copyright (C) 2001-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. 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/>. */ #include <config.h> /* Specification. */ #include "striconveh.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #if HAVE_ICONV # include <iconv.h> # include "unistr.h" #endif #include "c-strcase.h" #include "c-strcaseeq.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #if HAVE_ICONV /* The caller must provide an iconveh_t, not just an iconv_t, because when a conversion error occurs, we may have to determine the Unicode representation of the inconvertible character. */ int iconveh_open (const char *to_codeset, const char *from_codeset, iconveh_t *cdp) { iconv_t cd; iconv_t cd1; iconv_t cd2; /* Avoid glibc-2.1 bug with EUC-KR. */ # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ && !defined _LIBICONV_VERSION if (c_strcasecmp (from_codeset, "EUC-KR") == 0 || c_strcasecmp (to_codeset, "EUC-KR") == 0) { errno = EINVAL; return -1; } # endif cd = iconv_open (to_codeset, from_codeset); if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)) cd1 = (iconv_t)(-1); else { cd1 = iconv_open ("UTF-8", from_codeset); if (cd1 == (iconv_t)(-1)) { int saved_errno = errno; if (cd != (iconv_t)(-1)) iconv_close (cd); errno = saved_errno; return -1; } } if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0) # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ && !defined __UCLIBC__) \ || _LIBICONV_VERSION >= 0x0105 || c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0 # endif ) cd2 = (iconv_t)(-1); else { cd2 = iconv_open (to_codeset, "UTF-8"); if (cd2 == (iconv_t)(-1)) { int saved_errno = errno; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd != (iconv_t)(-1)) iconv_close (cd); errno = saved_errno; return -1; } } cdp->cd = cd; cdp->cd1 = cd1; cdp->cd2 = cd2; return 0; } int iconveh_close (const iconveh_t *cd) { if (cd->cd2 != (iconv_t)(-1) && iconv_close (cd->cd2) < 0) { /* Return -1, but preserve the errno from iconv_close. */ int saved_errno = errno; if (cd->cd1 != (iconv_t)(-1)) iconv_close (cd->cd1); if (cd->cd != (iconv_t)(-1)) iconv_close (cd->cd); errno = saved_errno; return -1; } if (cd->cd1 != (iconv_t)(-1) && iconv_close (cd->cd1) < 0) { /* Return -1, but preserve the errno from iconv_close. */ int saved_errno = errno; if (cd->cd != (iconv_t)(-1)) iconv_close (cd->cd); errno = saved_errno; return -1; } if (cd->cd != (iconv_t)(-1) && iconv_close (cd->cd) < 0) return -1; return 0; } /* iconv_carefully is like iconv, except that it stops as soon as it encounters a conversion error, and it returns in *INCREMENTED a boolean telling whether it has incremented the input pointers past the error location. */ # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. */ static size_t iconv_carefully (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft, bool *incremented) { const char *inptr = *inbuf; const char *inptr_end = inptr + *inbytesleft; char *outptr = *outbuf; size_t outsize = *outbytesleft; const char *inptr_before; size_t res; do { size_t insize; inptr_before = inptr; res = (size_t)(-1); for (insize = 1; inptr + insize <= inptr_end; insize++) { res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize); if (!(res == (size_t)(-1) && errno == EINVAL)) break; /* iconv can eat up a shift sequence but give EINVAL while attempting to convert the first character. E.g. libiconv does this. */ if (inptr > inptr_before) { res = 0; break; } } if (res == 0) { *outbuf = outptr; *outbytesleft = outsize; } } while (res == 0 && inptr < inptr_end); *inbuf = inptr; *inbytesleft = inptr_end - inptr; if (res != (size_t)(-1) && res > 0) { /* iconv() has already incremented INPTR. We cannot go back to a previous INPTR, otherwise the state inside CD would become invalid, if FROM_CODESET is a stateful encoding. So, tell the caller that *INBUF has already been incremented. */ *incremented = (inptr > inptr_before); errno = EILSEQ; return (size_t)(-1); } else { *incremented = false; return res; } } # else # define iconv_carefully(cd, inbuf, inbytesleft, outbuf, outbytesleft, incremented) \ (*(incremented) = false, \ iconv (cd, (ICONV_CONST char **) (inbuf), inbytesleft, outbuf, outbytesleft)) # endif /* iconv_carefully_1 is like iconv_carefully, except that it stops after converting one character or one shift sequence. */ static size_t iconv_carefully_1 (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft, bool *incremented) { const char *inptr_before = *inbuf; const char *inptr = inptr_before; const char *inptr_end = inptr_before + *inbytesleft; char *outptr = *outbuf; size_t outsize = *outbytesleft; size_t res = (size_t)(-1); size_t insize; for (insize = 1; inptr_before + insize <= inptr_end; insize++) { inptr = inptr_before; res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize); if (!(res == (size_t)(-1) && errno == EINVAL)) break; /* iconv can eat up a shift sequence but give EINVAL while attempting to convert the first character. E.g. libiconv does this. */ if (inptr > inptr_before) { res = 0; break; } } *inbuf = inptr; *inbytesleft = inptr_end - inptr; # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. */ if (res != (size_t)(-1) && res > 0) { /* iconv() has already incremented INPTR. We cannot go back to a previous INPTR, otherwise the state inside CD would become invalid, if FROM_CODESET is a stateful encoding. So, tell the caller that *INBUF has already been incremented. */ *incremented = (inptr > inptr_before); errno = EILSEQ; return (size_t)(-1); } # endif if (res != (size_t)(-1)) { *outbuf = outptr; *outbytesleft = outsize; } *incremented = false; return res; } /* utf8conv_carefully is like iconv, except that - it converts from UTF-8 to UTF-8, - it stops as soon as it encounters a conversion error, and it returns in *INCREMENTED a boolean telling whether it has incremented the input pointers past the error location, - if one_character_only is true, it stops after converting one character. */ static size_t utf8conv_carefully (bool one_character_only, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft, bool *incremented) { const char *inptr = *inbuf; size_t insize = *inbytesleft; char *outptr = *outbuf; size_t outsize = *outbytesleft; size_t res; res = 0; do { ucs4_t uc; int n; int m; n = u8_mbtoucr (&uc, (const uint8_t *) inptr, insize); if (n < 0) { errno = (n == -2 ? EINVAL : EILSEQ); n = u8_mbtouc (&uc, (const uint8_t *) inptr, insize); inptr += n; insize -= n; res = (size_t)(-1); *incremented = true; break; } if (outsize == 0) { errno = E2BIG; res = (size_t)(-1); *incremented = false; break; } m = u8_uctomb ((uint8_t *) outptr, uc, outsize); if (m == -2) { errno = E2BIG; res = (size_t)(-1); *incremented = false; break; } inptr += n; insize -= n; if (m == -1) { errno = EILSEQ; res = (size_t)(-1); *incremented = true; break; } outptr += m; outsize -= m; } while (!one_character_only && insize > 0); *inbuf = inptr; *inbytesleft = insize; *outbuf = outptr; *outbytesleft = outsize; return res; } static int mem_cd_iconveh_internal (const char *src, size_t srclen, iconv_t cd, iconv_t cd1, iconv_t cd2, enum iconv_ilseq_handler handler, size_t extra_alloc, size_t *offsets, char **resultp, size_t *lengthp) { /* When a conversion error occurs, we cannot start using CD1 and CD2 at this point: FROM_CODESET may be a stateful encoding like ISO-2022-KR. Instead, we have to start afresh from the beginning of SRC. */ /* Use a temporary buffer, so that for small strings, a single malloc() call will be sufficient. */ # define tmpbufsize 4096 /* The alignment is needed when converting e.g. to glibc's WCHAR_T or libiconv's UCS-4-INTERNAL encoding. */ union { unsigned int align; char buf[tmpbufsize]; } tmp; # define tmpbuf tmp.buf char *initial_result; char *result; size_t allocated; size_t length; size_t last_length = (size_t)(-1); /* only needed if offsets != NULL */ if (*resultp != NULL && *lengthp >= sizeof (tmpbuf)) { initial_result = *resultp; allocated = *lengthp; } else { initial_result = tmpbuf; allocated = sizeof (tmpbuf); } result = initial_result; /* Test whether a direct conversion is possible at all. */ if (cd == (iconv_t)(-1)) goto indirectly; if (offsets != NULL) { size_t i; for (i = 0; i < srclen; i++) offsets[i] = (size_t)(-1); last_length = (size_t)(-1); } length = 0; /* First, try a direct conversion, and see whether a conversion error occurs at all. */ { const char *inptr = src; size_t insize = srclen; /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) /* Set to the initial state. */ iconv (cd, NULL, NULL, NULL, NULL); # endif while (insize > 0) { char *outptr = result + length; size_t outsize = allocated - extra_alloc - length; bool incremented; size_t res; bool grow; if (offsets != NULL) { if (length != last_length) /* ensure that offset[] be increasing */ { offsets[inptr - src] = length; last_length = length; } res = iconv_carefully_1 (cd, &inptr, &insize, &outptr, &outsize, &incremented); } else /* Use iconv_carefully instead of iconv here, because: - If TO_CODESET is UTF-8, we can do the error handling in this loop, no need for a second loop, - With iconv() implementations other than GNU libiconv and GNU libc, if we use iconv() in a big swoop, checking for an E2BIG return, we lose the number of irreversible conversions. */ res = iconv_carefully (cd, &inptr, &insize, &outptr, &outsize, &incremented); length = outptr - result; grow = (length + extra_alloc > allocated / 2); if (res == (size_t)(-1)) { if (errno == E2BIG) grow = true; else if (errno == EINVAL) break; else if (errno == EILSEQ && handler != iconveh_error) { if (cd2 == (iconv_t)(-1)) { /* TO_CODESET is UTF-8. */ /* Error handling can produce up to 1 byte of output. */ if (length + 1 + extra_alloc > allocated) { char *memory; allocated = 2 * allocated; if (length + 1 + extra_alloc > allocated) abort (); if (result == initial_result) memory = (char *) malloc (allocated); else memory = (char *) realloc (result, allocated); if (memory == NULL) { if (result != initial_result) free (result); errno = ENOMEM; return -1; } if (result == initial_result) memcpy (memory, initial_result, length); result = memory; grow = false; } /* The input is invalid in FROM_CODESET. Eat up one byte and emit a question mark. */ if (!incremented) { if (insize == 0) abort (); inptr++; insize--; } result[length] = '?'; length++; } else goto indirectly; } else { if (result != initial_result) free (result); return -1; } } if (insize == 0) break; if (grow) { char *memory; allocated = 2 * allocated; if (result == initial_result) memory = (char *) malloc (allocated); else memory = (char *) realloc (result, allocated); if (memory == NULL) { if (result != initial_result) free (result); errno = ENOMEM; return -1; } if (result == initial_result) memcpy (memory, initial_result, length); result = memory; } } } /* Now get the conversion state back to the initial state. But avoid glibc-2.1 bug and Solaris 2.7 bug. */ #if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) for (;;) { char *outptr = result + length; size_t outsize = allocated - extra_alloc - length; size_t res; res = iconv (cd, NULL, NULL, &outptr, &outsize); length = outptr - result; if (res == (size_t)(-1)) { if (errno == E2BIG) { char *memory; allocated = 2 * allocated; if (result == initial_result) memory = (char *) malloc (allocated); else memory = (char *) realloc (result, allocated); if (memory == NULL) { if (result != initial_result) free (result); errno = ENOMEM; return -1; } if (result == initial_result) memcpy (memory, initial_result, length); result = memory; } else { if (result != initial_result) free (result); return -1; } } else break; } #endif /* The direct conversion succeeded. */ goto done; indirectly: /* The direct conversion failed. Use a conversion through UTF-8. */ if (offsets != NULL) { size_t i; for (i = 0; i < srclen; i++) offsets[i] = (size_t)(-1); last_length = (size_t)(-1); } length = 0; { const bool slowly = (offsets != NULL || handler == iconveh_error); # define utf8bufsize 4096 /* may also be smaller or larger than tmpbufsize */ char utf8buf[utf8bufsize + 1]; size_t utf8len = 0; const char *in1ptr = src; size_t in1size = srclen; bool do_final_flush1 = true; bool do_final_flush2 = true; /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) /* Set to the initial state. */ if (cd1 != (iconv_t)(-1)) iconv (cd1, NULL, NULL, NULL, NULL); if (cd2 != (iconv_t)(-1)) iconv (cd2, NULL, NULL, NULL, NULL); # endif while (in1size > 0 || do_final_flush1 || utf8len > 0 || do_final_flush2) { char *out1ptr = utf8buf + utf8len; size_t out1size = utf8bufsize - utf8len; bool incremented1; size_t res1; int errno1; /* Conversion step 1: from FROM_CODESET to UTF-8. */ if (in1size > 0) { if (offsets != NULL && length != last_length) /* ensure that offset[] be increasing */ { offsets[in1ptr - src] = length; last_length = length; } if (cd1 != (iconv_t)(-1)) { if (slowly) res1 = iconv_carefully_1 (cd1, &in1ptr, &in1size, &out1ptr, &out1size, &incremented1); else res1 = iconv_carefully (cd1, &in1ptr, &in1size, &out1ptr, &out1size, &incremented1); } else { /* FROM_CODESET is UTF-8. */ res1 = utf8conv_carefully (slowly, &in1ptr, &in1size, &out1ptr, &out1size, &incremented1); } } else if (do_final_flush1) { /* Now get the conversion state of CD1 back to the initial state. But avoid glibc-2.1 bug and Solaris 2.7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) if (cd1 != (iconv_t)(-1)) res1 = iconv (cd1, NULL, NULL, &out1ptr, &out1size); else # endif res1 = 0; do_final_flush1 = false; incremented1 = true; } else { res1 = 0; incremented1 = true; } if (res1 == (size_t)(-1) && !(errno == E2BIG || errno == EINVAL || errno == EILSEQ)) { if (result != initial_result) free (result); return -1; } if (res1 == (size_t)(-1) && errno == EILSEQ && handler != iconveh_error) { /* The input is invalid in FROM_CODESET. Eat up one byte and emit a question mark. Room for the question mark was allocated at the end of utf8buf. */ if (!incremented1) { if (in1size == 0) abort (); in1ptr++; in1size--; } *out1ptr++ = '?'; res1 = 0; } errno1 = errno; utf8len = out1ptr - utf8buf; if (offsets != NULL || in1size == 0 || utf8len > utf8bufsize / 2 || (res1 == (size_t)(-1) && errno1 == E2BIG)) { /* Conversion step 2: from UTF-8 to TO_CODESET. */ const char *in2ptr = utf8buf; size_t in2size = utf8len; while (in2size > 0 || (in1size == 0 && !do_final_flush1 && do_final_flush2)) { char *out2ptr = result + length; size_t out2size = allocated - extra_alloc - length; bool incremented2; size_t res2; bool grow; if (in2size > 0) { if (cd2 != (iconv_t)(-1)) res2 = iconv_carefully (cd2, &in2ptr, &in2size, &out2ptr, &out2size, &incremented2); else /* TO_CODESET is UTF-8. */ res2 = utf8conv_carefully (false, &in2ptr, &in2size, &out2ptr, &out2size, &incremented2); } else /* in1size == 0 && !do_final_flush1 && in2size == 0 && do_final_flush2 */ { /* Now get the conversion state of CD1 back to the initial state. But avoid glibc-2.1 bug and Solaris 2.7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) && !defined __UCLIBC__) \ || defined __sun) if (cd2 != (iconv_t)(-1)) res2 = iconv (cd2, NULL, NULL, &out2ptr, &out2size); else # endif res2 = 0; do_final_flush2 = false; incremented2 = true; } length = out2ptr - result; grow = (length + extra_alloc > allocated / 2); if (res2 == (size_t)(-1)) { if (errno == E2BIG) grow = true; else if (errno == EINVAL) break; else if (errno == EILSEQ && handler != iconveh_error) { /* Error handling can produce up to 10 bytes of ASCII output. But TO_CODESET may be UCS-2, UTF-16 or UCS-4, so use CD2 here as well. */ char scratchbuf[10]; size_t scratchlen; ucs4_t uc; const char *inptr; size_t insize; size_t res; if (incremented2) { if (u8_prev (&uc, (const uint8_t *) in2ptr, (const uint8_t *) utf8buf) == NULL) abort (); } else { int n; if (in2size == 0) abort (); n = u8_mbtouc_unsafe (&uc, (const uint8_t *) in2ptr, in2size); in2ptr += n; in2size -= n; } if (handler == iconveh_escape_sequence) { static char hex[16] = "0123456789ABCDEF"; scratchlen = 0; scratchbuf[scratchlen++] = '\\'; if (uc < 0x10000) scratchbuf[scratchlen++] = 'u'; else { scratchbuf[scratchlen++] = 'U'; scratchbuf[scratchlen++] = hex[(uc>>28) & 15]; scratchbuf[scratchlen++] = hex[(uc>>24) & 15]; scratchbuf[scratchlen++] = hex[(uc>>20) & 15]; scratchbuf[scratchlen++] = hex[(uc>>16) & 15]; } scratchbuf[scratchlen++] = hex[(uc>>12) & 15]; scratchbuf[scratchlen++] = hex[(uc>>8) & 15]; scratchbuf[scratchlen++] = hex[(uc>>4) & 15]; scratchbuf[scratchlen++] = hex[uc & 15]; } else { scratchbuf[0] = '?'; scratchlen = 1; } inptr = scratchbuf; insize = scratchlen; if (cd2 != (iconv_t)(-1)) res = iconv (cd2, (ICONV_CONST char **) &inptr, &insize, &out2ptr, &out2size); else { /* TO_CODESET is UTF-8. */ if (out2size >= insize) { memcpy (out2ptr, inptr, insize); out2ptr += insize; out2size -= insize; inptr += insize; insize = 0; res = 0; } else { errno = E2BIG; res = (size_t)(-1); } } length = out2ptr - result; if (res == (size_t)(-1) && errno == E2BIG) { char *memory; allocated = 2 * allocated; if (length + 1 + extra_alloc > allocated) abort (); if (result == initial_result) memory = (char *) malloc (allocated); else memory = (char *) realloc (result, allocated); if (memory == NULL) { if (result != initial_result) free (result); errno = ENOMEM; return -1; } if (result == initial_result) memcpy (memory, initial_result, length); result = memory; grow = false; out2ptr = result + length; out2size = allocated - extra_alloc - length; if (cd2 != (iconv_t)(-1)) res = iconv (cd2, (ICONV_CONST char **) &inptr, &insize, &out2ptr, &out2size); else { /* TO_CODESET is UTF-8. */ if (!(out2size >= insize)) abort (); memcpy (out2ptr, inptr, insize); out2ptr += insize; out2size -= insize; inptr += insize; insize = 0; res = 0; } length = out2ptr - result; } # if !defined _LIBICONV_VERSION && !(defined __GLIBC__ && !defined __UCLIBC__) /* Irix iconv() inserts a NUL byte if it cannot convert. NetBSD iconv() inserts a question mark if it cannot convert. Only GNU libiconv and GNU libc are known to prefer to fail rather than doing a lossy conversion. */ if (res != (size_t)(-1) && res > 0) { errno = EILSEQ; res = (size_t)(-1); } # endif if (res == (size_t)(-1)) { /* Failure converting the ASCII replacement. */ if (result != initial_result) free (result); return -1; } } else { if (result != initial_result) free (result); return -1; } } if (!(in2size > 0 || (in1size == 0 && !do_final_flush1 && do_final_flush2))) break; if (grow) { char *memory; allocated = 2 * allocated; if (result == initial_result) memory = (char *) malloc (allocated); else memory = (char *) realloc (result, allocated); if (memory == NULL) { if (result != initial_result) free (result); errno = ENOMEM; return -1; } if (result == initial_result) memcpy (memory, initial_result, length); result = memory; } } /* Move the remaining bytes to the beginning of utf8buf. */ if (in2size > 0) memmove (utf8buf, in2ptr, in2size); utf8len = in2size; } if (res1 == (size_t)(-1)) { if (errno1 == EINVAL) in1size = 0; else if (errno1 == EILSEQ) { if (result != initial_result) free (result); errno = errno1; return -1; } } } # undef utf8bufsize } done: /* Now the final memory allocation. */ if (result == tmpbuf) { size_t memsize = length + extra_alloc; if (*resultp != NULL && *lengthp >= memsize) result = *resultp; else { char *memory; memory = (char *) malloc (memsize > 0 ? memsize : 1); if (memory != NULL) result = memory; else { errno = ENOMEM; return -1; } } memcpy (result, tmpbuf, length); } else if (result != *resultp && length + extra_alloc < allocated) { /* Shrink the allocated memory if possible. */ size_t memsize = length + extra_alloc; char *memory; memory = (char *) realloc (result, memsize > 0 ? memsize : 1); if (memory != NULL) result = memory; } *resultp = result; *lengthp = length; return 0; # undef tmpbuf # undef tmpbufsize } int mem_cd_iconveh (const char *src, size_t srclen, const iconveh_t *cd, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { return mem_cd_iconveh_internal (src, srclen, cd->cd, cd->cd1, cd->cd2, handler, 0, offsets, resultp, lengthp); } char * str_cd_iconveh (const char *src, const iconveh_t *cd, enum iconv_ilseq_handler handler) { /* For most encodings, a trailing NUL byte in the input will be converted to a trailing NUL byte in the output. But not for UTF-7. So that this function is usable for UTF-7, we have to exclude the NUL byte from the conversion and add it by hand afterwards. */ char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh_internal (src, strlen (src), cd->cd, cd->cd1, cd->cd2, handler, 1, NULL, &result, &length); if (retval < 0) { free (result); return NULL; } /* Add the terminating NUL byte. */ result[length] = '\0'; return result; } #endif int mem_iconveh (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { if (srclen == 0) { /* Nothing to convert. */ *lengthp = 0; return 0; } else if (offsets == NULL && c_strcasecmp (from_codeset, to_codeset) == 0) { char *result; if (*resultp != NULL && *lengthp >= srclen) result = *resultp; else { result = (char *) malloc (srclen); if (result == NULL) { errno = ENOMEM; return -1; } } memcpy (result, src, srclen); *resultp = result; *lengthp = srclen; return 0; } else { #if HAVE_ICONV iconveh_t cd; char *result; size_t length; int retval; if (iconveh_open (to_codeset, from_codeset, &cd) < 0) return -1; result = *resultp; length = *lengthp; retval = mem_cd_iconveh (src, srclen, &cd, handler, offsets, &result, &length); if (retval < 0) { /* Close cd, but preserve the errno from str_cd_iconv. */ int saved_errno = errno; iconveh_close (&cd); errno = saved_errno; } else { if (iconveh_close (&cd) < 0) { if (result != *resultp) free (result); return -1; } *resultp = result; *lengthp = length; } return retval; #else /* This is a different error code than if iconv_open existed but didn't support from_codeset and to_codeset, so that the caller can emit an error message such as "iconv() is not supported. Installing GNU libiconv and then reinstalling this package would fix this." */ errno = ENOSYS; return -1; #endif } } char * str_iconveh (const char *src, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler) { if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) { char *result = strdup (src); if (result == NULL) errno = ENOMEM; return result; } else { #if HAVE_ICONV iconveh_t cd; char *result; if (iconveh_open (to_codeset, from_codeset, &cd) < 0) return NULL; result = str_cd_iconveh (src, &cd, handler); if (result == NULL) { /* Close cd, but preserve the errno from str_cd_iconv. */ int saved_errno = errno; iconveh_close (&cd); errno = saved_errno; } else { if (iconveh_close (&cd) < 0) { free (result); return NULL; } } return result; #else /* This is a different error code than if iconv_open existed but didn't support from_codeset and to_codeset, so that the caller can emit an error message such as "iconv() is not supported. Installing GNU libiconv and then reinstalling this package would fix this." */ errno = ENOSYS; return NULL; #endif } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/striconveh.h������������������������������������������������������������0000664�0000000�0000000�00000013425�14110572173�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling. Copyright (C) 2001-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. 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 _STRICONVEH_H #define _STRICONVEH_H #include <stdlib.h> #if HAVE_ICONV #include <iconv.h> #endif #include "iconveh.h" #ifdef __cplusplus extern "C" { #endif #if HAVE_ICONV /* A conversion descriptor for use by the iconveh functions. */ typedef struct { /* Conversion descriptor from FROM_CODESET to TO_CODESET, or (iconv_t)(-1) if the system does not support a direct conversion from FROM_CODESET to TO_CODESET. */ iconv_t cd; /* Conversion descriptor from FROM_CODESET to UTF-8 (or (iconv_t)(-1) if FROM_CODESET is UTF-8). */ iconv_t cd1; /* Conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1) if TO_CODESET is UTF-8). */ iconv_t cd2; } iconveh_t; /* Open a conversion descriptor for use by the iconveh functions. If successful, fills *CDP and returns 0. Upon failure, return -1 with errno set. */ extern int iconveh_open (const char *to_codeset, const char *from_codeset, iconveh_t *cdp); /* Close a conversion descriptor created by iconveh_open(). Return value: 0 if successful, otherwise -1 and errno set. */ extern int iconveh_close (const iconveh_t *cd); /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. CD points to the conversion descriptor from FROMCODE to TOCODE, created by the function iconveh_open(). If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int mem_cd_iconveh (const char *src, size_t srclen, const iconveh_t *cd, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. CD points to the conversion descriptor from FROMCODE to TOCODE, created by the function iconveh_open(). Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * str_cd_iconveh (const char *src, const iconveh_t *cd, enum iconv_ilseq_handler handler) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int mem_iconveh (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * str_iconveh (const char *src, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _STRICONVEH_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/striconveha.c�����������������������������������������������������������0000664�0000000�0000000�00000025770�14110572173�0017551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling and autodetection. Copyright (C) 2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible. 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/>. */ #include <config.h> /* Specification. */ #include "striconveha.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "malloca.h" #include "c-strcase.h" #include "striconveh.h" #define SIZEOF(a) (sizeof(a)/sizeof(a[0])) /* Autodetection list. */ struct autodetect_alias { struct autodetect_alias *next; const char *name; const char * const *encodings_to_try; }; static const char * const autodetect_utf8_try[] = { /* Try UTF-8 first. There are very few ISO-8859-1 inputs that would be valid UTF-8, but many UTF-8 inputs are valid ISO-8859-1. */ "UTF-8", "ISO-8859-1", NULL }; static const char * const autodetect_jp_try[] = { /* Try 7-bit encoding first. If the input contains bytes >= 0x80, it will fail. Try EUC-JP next. Short SHIFT_JIS inputs may come out wrong. This is unavoidable. People will condemn SHIFT_JIS. If we tried SHIFT_JIS first, then some short EUC-JP inputs would come out wrong, and people would condemn EUC-JP and Unix, which would not be good. Finally try SHIFT_JIS. */ "ISO-2022-JP-2", "EUC-JP", "SHIFT_JIS", NULL }; static const char * const autodetect_kr_try[] = { /* Try 7-bit encoding first. If the input contains bytes >= 0x80, it will fail. Finally try EUC-KR. */ "ISO-2022-KR", "EUC-KR", NULL }; static struct autodetect_alias autodetect_predefined[] = { { &autodetect_predefined[1], "autodetect_utf8", autodetect_utf8_try }, { &autodetect_predefined[2], "autodetect_jp", autodetect_jp_try }, { NULL, "autodetect_kr", autodetect_kr_try } }; static struct autodetect_alias *autodetect_list = &autodetect_predefined[0]; static struct autodetect_alias **autodetect_list_end = &autodetect_predefined[SIZEOF(autodetect_predefined)-1].next; int uniconv_register_autodetect (const char *name, const char * const *try_in_order) { size_t namelen; size_t listlen; size_t memneed; size_t i; char *memory; struct autodetect_alias *new_alias; char *new_name; const char **new_try_in_order; /* The TRY_IN_ORDER list must not be empty. */ if (try_in_order[0] == NULL) { errno = EINVAL; return -1; } /* We must deep-copy NAME and TRY_IN_ORDER, because they may be allocated with dynamic extent. */ namelen = strlen (name) + 1; memneed = sizeof (struct autodetect_alias) + namelen + sizeof (char *); for (i = 0; try_in_order[i] != NULL; i++) memneed += sizeof (char *) + strlen (try_in_order[i]) + 1; listlen = i; memory = (char *) malloc (memneed); if (memory != NULL) { new_alias = (struct autodetect_alias *) memory; memory += sizeof (struct autodetect_alias); new_try_in_order = (const char **) memory; memory += (listlen + 1) * sizeof (char *); new_name = (char *) memory; memcpy (new_name, name, namelen); memory += namelen; for (i = 0; i < listlen; i++) { size_t len = strlen (try_in_order[i]) + 1; memcpy (memory, try_in_order[i], len); new_try_in_order[i] = (const char *) memory; memory += len; } new_try_in_order[i] = NULL; /* Now insert the new alias. */ new_alias->name = new_name; new_alias->encodings_to_try = new_try_in_order; new_alias->next = NULL; /* FIXME: Not multithread-safe. */ *autodetect_list_end = new_alias; autodetect_list_end = &new_alias->next; return 0; } else { errno = ENOMEM; return -1; } } /* Like mem_iconveha, except no handling of transliteration. */ static int mem_iconveha_notranslit (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { int retval = mem_iconveh (src, srclen, from_codeset, to_codeset, handler, offsets, resultp, lengthp); if (retval >= 0 || errno != EINVAL) return retval; else { struct autodetect_alias *alias; /* Unsupported from_codeset or to_codeset. Check whether the caller requested autodetection. */ for (alias = autodetect_list; alias != NULL; alias = alias->next) if (strcmp (from_codeset, alias->name) == 0) { const char * const *encodings; if (handler != iconveh_error) { /* First try all encodings without any forgiving. */ encodings = alias->encodings_to_try; do { retval = mem_iconveha_notranslit (src, srclen, *encodings, to_codeset, iconveh_error, offsets, resultp, lengthp); if (!(retval < 0 && errno == EILSEQ)) return retval; encodings++; } while (*encodings != NULL); } encodings = alias->encodings_to_try; do { retval = mem_iconveha_notranslit (src, srclen, *encodings, to_codeset, handler, offsets, resultp, lengthp); if (!(retval < 0 && errno == EILSEQ)) return retval; encodings++; } while (*encodings != NULL); /* Return the last call's result. */ return -1; } /* It wasn't an autodetection name. */ errno = EINVAL; return -1; } } int mem_iconveha (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, bool transliterate, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { if (srclen == 0) { /* Nothing to convert. */ *lengthp = 0; return 0; } /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ #if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ && !defined __UCLIBC__) \ || _LIBICONV_VERSION >= 0x0105 if (transliterate) { int retval; size_t len = strlen (to_codeset); char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); memcpy (to_codeset_suffixed, to_codeset, len); memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); retval = mem_iconveha_notranslit (src, srclen, from_codeset, to_codeset_suffixed, handler, offsets, resultp, lengthp); freea (to_codeset_suffixed); return retval; } else #endif return mem_iconveha_notranslit (src, srclen, from_codeset, to_codeset, handler, offsets, resultp, lengthp); } /* Like str_iconveha, except no handling of transliteration. */ static char * str_iconveha_notranslit (const char *src, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler) { char *result = str_iconveh (src, from_codeset, to_codeset, handler); if (result != NULL || errno != EINVAL) return result; else { struct autodetect_alias *alias; /* Unsupported from_codeset or to_codeset. Check whether the caller requested autodetection. */ for (alias = autodetect_list; alias != NULL; alias = alias->next) if (strcmp (from_codeset, alias->name) == 0) { const char * const *encodings; if (handler != iconveh_error) { /* First try all encodings without any forgiving. */ encodings = alias->encodings_to_try; do { result = str_iconveha_notranslit (src, *encodings, to_codeset, iconveh_error); if (!(result == NULL && errno == EILSEQ)) return result; encodings++; } while (*encodings != NULL); } encodings = alias->encodings_to_try; do { result = str_iconveha_notranslit (src, *encodings, to_codeset, handler); if (!(result == NULL && errno == EILSEQ)) return result; encodings++; } while (*encodings != NULL); /* Return the last call's result. */ return NULL; } /* It wasn't an autodetection name. */ errno = EINVAL; return NULL; } } char * str_iconveha (const char *src, const char *from_codeset, const char *to_codeset, bool transliterate, enum iconv_ilseq_handler handler) { if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) { char *result = strdup (src); if (result == NULL) errno = ENOMEM; return result; } /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ #if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ && !defined __UCLIBC__) \ || _LIBICONV_VERSION >= 0x0105 if (transliterate) { char *result; size_t len = strlen (to_codeset); char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); memcpy (to_codeset_suffixed, to_codeset, len); memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); result = str_iconveha_notranslit (src, from_codeset, to_codeset_suffixed, handler); freea (to_codeset_suffixed); return result; } else #endif return str_iconveha_notranslit (src, from_codeset, to_codeset, handler); } ��������gnulib-20210822~d383792/lib/striconveha.h�����������������������������������������������������������0000664�0000000�0000000�00000010145�14110572173�0017544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling and autodetection. Copyright (C) 2002, 2005, 2007-2021 Free Software Foundation, Inc. Written by Bruno Haible. 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 _STRICONVEHA_H #define _STRICONVEHA_H #include <stdbool.h> #include <stdlib.h> #include "iconveh.h" #ifdef __cplusplus extern "C" { #endif /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. The "from" encoding can also be a name defined for autodetection. If TRANSLITERATE is true, transliteration will attempted to avoid conversion errors, for iconv implementations that support this. Usually you'll choose TRANSLITERATE = true if HANDLER != iconveh_error. If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int mem_iconveha (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, bool transliterate, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). The "from" encoding can also be a name defined for autodetection. If TRANSLITERATE is true, transliteration will attempted to avoid conversion errors, for iconv implementations that support this. Usually you'll choose TRANSLITERATE = true if HANDLER != iconveh_error. Allocate a malloced memory block for the result. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * str_iconveha (const char *src, const char *from_codeset, const char *to_codeset, bool transliterate, enum iconv_ilseq_handler handler) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* In the above, FROM_CODESET can also be one of the following values: "autodetect_utf8" supports ISO-8859-1 and UTF-8 "autodetect_jp" supports EUC-JP, ISO-2022-JP-2 and SHIFT_JIS "autodetect_kr" supports EUC-KR and ISO-2022-KR More names can be defined for autodetection. */ /* Registers an encoding name for autodetection. TRY_IN_ORDER is a NULL terminated list of encodings to be tried. Returns 0 upon success, or -1 (with errno set) in case of error. Particular errno values: ENOMEM. */ extern int uniconv_register_autodetect (const char *name, const char * const *try_in_order); #ifdef __cplusplus } #endif #endif /* _STRICONVEHA_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/string-buffer.c���������������������������������������������������������0000664�0000000�0000000�00000017470�14110572173�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A buffer that accumulates a string by piecewise concatenation. Copyright (C) 2021 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>, 2021. */ #include <config.h> /* Specification. */ #include "string-buffer.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void sb_init (struct string_buffer *buffer) { buffer->data = buffer->space; buffer->length = 0; buffer->allocated = sizeof (buffer->space); buffer->error = false; } /* Ensures that INCREMENT bytes are available beyond the current used length of BUFFER. Returns 0, or -1 in case of out-of-memory error. */ static int sb_ensure_more_bytes (struct string_buffer *buffer, size_t increment) { size_t incremented_length = buffer->length + increment; if (incremented_length < increment) /* Overflow. */ return -1; if (buffer->allocated < incremented_length) { size_t new_allocated = 2 * buffer->allocated; if (new_allocated < buffer->allocated) /* Overflow. */ return -1; if (new_allocated < incremented_length) new_allocated = incremented_length; char *new_data; if (buffer->data == buffer->space) { new_data = (char *) malloc (new_allocated); if (new_data == NULL) /* Out-of-memory. */ return -1; memcpy (new_data, buffer->data, buffer->length); } else { new_data = (char *) realloc (buffer->data, new_allocated); if (new_data == NULL) /* Out-of-memory. */ return -1; } buffer->data = new_data; buffer->allocated = new_allocated; } return 0; } int sb_append (struct string_buffer *buffer, const char *str) { size_t len = strlen (str); if (sb_ensure_more_bytes (buffer, len) < 0) { buffer->error = true; return -1; } memcpy (buffer->data + buffer->length, str, len); buffer->length += len; return 0; } int sb_appendvf (struct string_buffer *buffer, const char *formatstring, va_list list) { va_list list_copy; /* Make a bit of room, so that the probability that the first vsnprintf() call succeeds is high. */ size_t room = buffer->allocated - buffer->length; if (room < 64) { if (sb_ensure_more_bytes (buffer, 64) < 0) { buffer->error = true; return -1; } room = buffer->allocated - buffer->length; } va_copy (list_copy, list); /* First vsnprintf() call. */ int ret = vsnprintf (buffer->data + buffer->length, room, formatstring, list); if (ret < 0) { /* Failed. */ buffer->error = true; ret = -1; } else { if ((size_t) ret <= room) { /* The result has fit into room bytes. */ buffer->length += (size_t) ret; ret = 0; } else { /* The result was truncated. Make more room, for a second vsnprintf() call. */ if (sb_ensure_more_bytes (buffer, (size_t) ret) < 0) { buffer->error = true; ret = -1; } else { /* Second vsnprintf() call. */ room = buffer->allocated - buffer->length; ret = vsnprintf (buffer->data + buffer->length, room, formatstring, list_copy); if (ret < 0) { /* Failed. */ buffer->error = true; ret = -1; } else { if ((size_t) ret <= room) { /* The result has fit into room bytes. */ buffer->length += (size_t) ret; ret = 0; } else /* The return values of the vsnprintf() calls are not consistent. */ abort (); } } } } va_end (list_copy); return ret; } int sb_appendf (struct string_buffer *buffer, const char *formatstring, ...) { va_list args; /* Make a bit of room, so that the probability that the first vsnprintf() call succeeds is high. */ size_t room = buffer->allocated - buffer->length; if (room < 64) { if (sb_ensure_more_bytes (buffer, 64) < 0) { buffer->error = true; return -1; } room = buffer->allocated - buffer->length; } va_start (args, formatstring); /* First vsnprintf() call. */ int ret = vsnprintf (buffer->data + buffer->length, room, formatstring, args); if (ret < 0) { /* Failed. */ buffer->error = true; ret = -1; } else { if ((size_t) ret <= room) { /* The result has fit into room bytes. */ buffer->length += (size_t) ret; ret = 0; } else { /* The result was truncated. Make more room, for a second vsnprintf() call. */ if (sb_ensure_more_bytes (buffer, (size_t) ret) < 0) { buffer->error = true; ret = -1; } else { /* Second vsnprintf() call. */ room = buffer->allocated - buffer->length; va_end (args); va_start (args, formatstring); ret = vsnprintf (buffer->data + buffer->length, room, formatstring, args); if (ret < 0) { /* Failed. */ buffer->error = true; ret = -1; } else { if ((size_t) ret <= room) { /* The result has fit into room bytes. */ buffer->length += (size_t) ret; ret = 0; } else /* The return values of the vsnprintf() calls are not consistent. */ abort (); } } } } va_end (args); return ret; } void sb_free (struct string_buffer *buffer) { if (buffer->data != buffer->space) free (buffer->data); } /* Returns the contents of BUFFER, and frees all other memory held by BUFFER. Returns NULL upon failure or if there was an error earlier. */ char * sb_dupfree (struct string_buffer *buffer) { if (buffer->error) goto fail; if (sb_ensure_more_bytes (buffer, 1) < 0) goto fail; buffer->data[buffer->length] = '\0'; buffer->length++; if (buffer->data == buffer->space) { char *copy = (char *) malloc (buffer->length); if (copy == NULL) goto fail; memcpy (copy, buffer->data, buffer->length); return copy; } else { /* Shrink the string before returning it. */ char *contents = buffer->data; if (buffer->length < buffer->allocated) { contents = realloc (contents, buffer->length); if (contents == NULL) goto fail; } return contents; } fail: sb_free (buffer); return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/string-buffer.h���������������������������������������������������������0000664�0000000�0000000�00000005471�14110572173�0020002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A buffer that accumulates a string by piecewise concatenation. Copyright (C) 2021 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>, 2021. */ #ifndef _STRING_BUFFER_H #define _STRING_BUFFER_H #include <stdarg.h> #include <stdbool.h> #include <stdlib.h> #include "attribute.h" /* A string buffer type. */ struct string_buffer { char *data; size_t length; /* used bytes, <= allocated */ size_t allocated; /* allocated bytes */ bool error; /* true if there was an error */ char space[1024]; /* stack allocated space */ }; #ifdef __cplusplus extern "C" { #endif /* Initializes BUFFER to the empty string. */ extern void sb_init (struct string_buffer *buffer); /* Appends the contents of STR to BUFFER. Returns 0, or -1 in case of out-of-memory error. */ extern int sb_append (struct string_buffer *buffer, const char *str); /* Appends the result of the printf-compatible FORMATSTRING with the argument list LIST to BUFFER. Returns 0, or -1 in case of error. */ extern int sb_appendvf (struct string_buffer *buffer, const char *formatstring, va_list list) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 0)) #else ATTRIBUTE_FORMAT ((__printf__, 2, 0)) #endif ; /* Appends the result of the printf-compatible FORMATSTRING with the following arguments to BUFFER. Returns 0, or -1 in case of error. */ extern int sb_appendf (struct string_buffer *buffer, const char *formatstring, ...) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) ATTRIBUTE_FORMAT ((__gnu_printf__, 2, 3)) #else ATTRIBUTE_FORMAT ((__printf__, 2, 3)) #endif ; /* Frees the memory held by BUFFER. */ extern void sb_free (struct string_buffer *buffer); /* Returns the contents of BUFFER, and frees all other memory held by BUFFER. Returns NULL upon failure or if there was an error earlier. It is the responsibility of the caller to free() the result. */ extern char * sb_dupfree (struct string_buffer *buffer) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _STRING_BUFFER_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/string.in.h�������������������������������������������������������������0000664�0000000�0000000�00000132377�14110572173�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes <string.h> -> <strings.h> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* Get free(). */ #include <stdlib.h> /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include <wchar.h> #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include <unistd.h> #endif /* AIX 7.2 declares ffsl and ffsll in <strings.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if ((@GNULIB_FFSL@ || @GNULIB_FFSLL@ || defined GNULIB_POSIXCHECK) \ && defined _AIX) \ && ! defined __GLIBC__ # include <strings.h> #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # 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. */ /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if @REPLACE_FFSLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ffsll rpl_ffsll # endif _GL_FUNCDECL_RPL (ffsll, int, (long long int i)); _GL_CXXALIAS_RPL (ffsll, int, (long long int i)); # else # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif #if @GNULIB_MDA_MEMCCPY@ /* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::memccpy always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memccpy # define memccpy _memccpy # endif _GL_CXXALIAS_MDA (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # else _GL_CXXALIAS_SYS (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # endif _GL_CXXALIASWARN (memccpy); #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memchr # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE_CXX (strchr, const char *, char *, (const char *, int), "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #else # if __GNUC__ >= 11 && !defined strdup /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif # elif @GNULIB_MDA_STRDUP@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::strdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup # undef strdup # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); # endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE_CXX (strrchr, const char *, char *, (const char *, int), "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); # endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif /* Return the name of the system error code ERRNUM. */ #if @GNULIB_STRERRORNAME_NP@ # if @REPLACE_STRERRORNAME_NP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerrorname_np # define strerrorname_np rpl_strerrorname_np # endif _GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); _GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); # else # if !@HAVE_STRERRORNAME_NP@ _GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIASWARN (strerrorname_np); #elif defined GNULIB_POSIXCHECK # undef strerrorname_np # if HAVE_RAW_DECL_STRERRORNAME_NP _GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " "use gnulib module strerrorname_np for portability"); # endif #endif /* Return an abbreviation string for the signal number SIG. */ #if @GNULIB_SIGABBREV_NP@ # if ! @HAVE_SIGABBREV_NP@ _GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); _GL_CXXALIASWARN (sigabbrev_np); #elif defined GNULIB_POSIXCHECK # undef sigabbrev_np # if HAVE_RAW_DECL_SIGABBREV_NP _GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " "use gnulib module sigabbrev_np for portability"); # endif #endif /* Return an English description string for the signal number SIG. */ #if @GNULIB_SIGDESCR_NP@ # if ! @HAVE_SIGDESCR_NP@ _GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); _GL_CXXALIASWARN (sigdescr_np); #elif defined GNULIB_POSIXCHECK # undef sigdescr_np # if HAVE_RAW_DECL_SIGDESCR_NP _GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " "use gnulib module sigdescr_np for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strings.in.h������������������������������������������������������������0000664�0000000�0000000�00000007720�14110572173�0017322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute <strings.h>. Copyright (C) 2007-2021 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/>. */ #ifndef _@GUARD_PREFIX@_STRINGS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. But avoid namespace pollution on glibc systems. */ #if defined __minix && !defined __GLIBC__ # include <sys/types.h> #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_STRINGS_H@ # @INCLUDE_NEXT@ @NEXT_STRINGS_H@ #endif #ifndef _@GUARD_PREFIX@_STRINGS_H #define _@GUARD_PREFIX@_STRINGS_H #if ! @HAVE_DECL_STRNCASECMP@ /* Get size_t. */ # include <stddef.h> #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. */ #ifdef __cplusplus extern "C" { #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFS@ # if !@HAVE_FFS@ _GL_FUNCDECL_SYS (ffs, int, (int i)); # endif _GL_CXXALIAS_SYS (ffs, int, (int i)); _GL_CXXALIASWARN (ffs); #elif defined GNULIB_POSIXCHECK # undef ffs # if HAVE_RAW_DECL_FFS _GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); # endif #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work in multibyte locales. */ #if ! @HAVE_STRCASECMP@ extern int strcasecmp (char const *s1, char const *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strcasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strcasecmp # if HAVE_RAW_DECL_STRCASECMP _GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbscasecmp if you care about " "internationalization, or use c_strcasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ #if ! @HAVE_DECL_STRNCASECMP@ extern int strncasecmp (char const *s1, char const *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strncasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strncasecmp # if HAVE_RAW_DECL_STRNCASECMP _GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbsncasecmp or mbspcasecmp if you care about " "internationalization, or use c_strncasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ ������������������������������������������������gnulib-20210822~d383792/lib/stripslash.c������������������������������������������������������������0000664�0000000�0000000�00000003063�14110572173�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-2021 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/>. */ #include <config.h> #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strncasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000003601�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strncasecmp.c -- case insensitive string comparator Copyright (C) 1998-1999, 2005-2007, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ int strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strncat.c���������������������������������������������������������������0000664�0000000�0000000�00000002122�14110572173�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate strings. Copyright (C) 1999, 2002, 2006, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include <string.h> char * strncat (char *dest, const char *src, size_t n) { char *destptr = dest + strlen (dest); for (; n > 0 && (*destptr = *src) != '\0'; src++, destptr++, n--) ; if (n == 0) *destptr = '\0'; return dest; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strndup.c���������������������������������������������������������������0000664�0000000�0000000�00000002066�14110572173�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A replacement function, for systems that lack strndup. Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2021 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/>. */ #include <config.h> #include <string.h> #include <stdlib.h> char * strndup (char const *s, size_t n) { size_t len = strnlen (s, n); char *new = malloc (len + 1); if (new == NULL) return NULL; new[len] = '\0'; return memcpy (new, s, len); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strnlen.c���������������������������������������������������������������0000664�0000000�0000000�00000002226�14110572173�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING, but scan at most MAXLEN characters. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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/>. */ #include <config.h> #include <string.h> /* Find the length of STRING, but scan at most MAXLEN characters. If no '\0' terminator is found in that many characters, return MAXLEN. */ size_t strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strnlen1.c��������������������������������������������������������������0000664�0000000�0000000�00000002407�14110572173�0016762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005-2006, 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include "strnlen1.h" #include <string.h> /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ size_t strnlen1 (const char *string, size_t maxlen) { const char *end = (const char *) memchr (string, '\0', maxlen); if (end != NULL) return end - string + 1; else return maxlen; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strnlen1.h��������������������������������������������������������������0000664�0000000�0000000�00000002331�14110572173�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005, 2009-2021 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/>. */ #ifndef _STRNLEN1_H #define _STRNLEN1_H #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ extern size_t strnlen1 (const char *string, size_t maxlen) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _STRNLEN1_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strpbrk.c���������������������������������������������������������������0000664�0000000�0000000�00000002403�14110572173�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 2000, 2002-2003, 2006, 2009-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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/>. */ #include <config.h> #include <stddef.h> #include <string.h> #if _LIBC # undef strpbrk #endif /* Find the first occurrence in S of any character in ACCEPT. */ char * strpbrk (const char *s, const char *accept) { while (*s != '\0') { const char *a = accept; while (*a != '\0') if (*a++ == *s) return (char *) s; ++s; } return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strptime.c��������������������������������������������������������������0000664�0000000�0000000�00000110720�14110572173�0017061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2002, 2004-2005, 2007, 2009-2021 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 _LIBC # include <config.h> #endif #include <time.h> #include <assert.h> #include <ctype.h> #ifdef _LIBC # include <langinfo.h> #endif #include <limits.h> #include <string.h> #include <strings.h> #include <stdbool.h> #ifdef _LIBC # include "../locale/localeinfo.h" #endif #ifndef _LIBC enum ptime_locale_status { not, loc, raw }; #endif #define match_char(ch1, ch2) if (ch1 != ch2) return NULL #if defined _LIBC && defined __GNUC__ && __GNUC__ >= 2 # define match_string(cs1, s2) \ ({ size_t len = strlen (cs1); \ int result = __strncasecmp_l ((cs1), (s2), len, locale) == 0; \ if (result) (s2) += len; \ result; }) #else /* Oh come on. Get a reasonable compiler. */ # define match_string(cs1, s2) \ (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) #endif /* We intentionally do not use isdigit() for testing because this will lead to problems with the wide character version. */ #define get_number(from, to, n) \ do { \ int __n = n; \ val = 0; \ while (*rp == ' ') \ ++rp; \ if (*rp < '0' || *rp > '9') \ return NULL; \ do { \ val *= 10; \ val += *rp++ - '0'; \ } while (--__n > 0 && val * 10 <= to && *rp >= '0' && *rp <= '9'); \ if (val < from || val > to) \ return NULL; \ } while (0) #ifdef _NL_CURRENT # define get_alt_number(from, to, n) \ ({ \ __label__ do_normal; \ \ if (*decided != raw) \ { \ val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ if (val == -1 && *decided != loc) \ { \ *decided = loc; \ goto do_normal; \ } \ if (val < from || val > to) \ return NULL; \ } \ else \ { \ do_normal: \ get_number (from, to, n); \ } \ 0; \ }) #else # define get_alt_number(from, to, n) \ /* We don't have the alternate representation. */ \ get_number(from, to, n) #endif #define recursive(new_fmt) \ (*(new_fmt) != '\0' \ && (rp = __strptime_internal (rp, (new_fmt), tm, \ decided, era_cnt LOCALE_ARG)) != NULL) #ifdef _LIBC /* This is defined in locale/C-time.c in the GNU libc. */ extern const struct locale_data _nl_C_LC_TIME attribute_hidden; # define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string) # define ab_weekday_name \ (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string) # define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string) # define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string) # define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string) # define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_FMT)].string) # define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string) # define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string) # define HERE_T_FMT_AMPM \ (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string) # define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string) # define strncasecmp(s1, s2, n) __strncasecmp (s1, s2, n) #else static char const weekday_name[][10] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; static char const ab_weekday_name[][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static char const month_name[][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static char const ab_month_name[][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; # define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y" # define HERE_D_FMT "%m/%d/%y" # define HERE_AM_STR "AM" # define HERE_PM_STR "PM" # define HERE_T_FMT_AMPM "%I:%M:%S %p" # define HERE_T_FMT "%H:%M:%S" static const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; #endif #if defined _LIBC /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ # define strptime __strptime_l # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # undef _NL_CURRENT_WORD # define _NL_CURRENT_WORD(category, item) \ (current->values[_NL_ITEM_INDEX (item)].word) # define LOCALE_PARAM , locale # define LOCALE_ARG , locale # define LOCALE_PARAM_PROTO , __locale_t locale # define LOCALE_PARAM_DECL __locale_t locale; # define HELPER_LOCALE_ARG , current # define ISSPACE(Ch) __isspace_l (Ch, locale) #else # define LOCALE_PARAM # define LOCALE_ARG # define LOCALE_PARAM_DECL # define LOCALE_PARAM_PROTO # define HELPER_LOCALE_ARG # define ISSPACE(Ch) isspace (Ch) #endif #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ # define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif /* Compute the day of the week. */ static void day_of_the_week (struct tm *tm) { /* We know that January 1st 1970 was a Thursday (= 4). Compute the difference between this data in the one on TM and so determine the weekday. */ int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2); int corr_quad = corr_year / 4; int wday = (-473 + (365 * (tm->tm_year - 70)) + corr_quad - ((corr_quad + (corr_quad < 0)) / 25 - (corr_quad < 0)) + ((corr_quad / 25) / 4) + __mon_yday[0][tm->tm_mon] + tm->tm_mday - 1); tm->tm_wday = ((wday % 7) + 7) % 7; } /* Compute the day of the year. */ static void day_of_the_year (struct tm *tm) { tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon] + (tm->tm_mday - 1)); } #ifdef _LIBC char * internal_function #else static char * #endif __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) const char *rp; const char *fmt; struct tm *tm; enum ptime_locale_status *decided; int era_cnt; LOCALE_PARAM_DECL { #ifdef _LIBC struct locale_data *const current = locale->__locales[LC_TIME]; #endif int cnt; size_t val; int have_I, is_pm; int century, want_century; int want_era; int have_wday, want_xday; int have_yday; int have_mon, have_mday; int have_uweek, have_wweek; int week_no; #ifdef _NL_CURRENT size_t num_eras; struct era_entry *era = NULL; const char *rp_backup; #endif have_I = is_pm = 0; century = -1; want_century = 0; want_era = 0; week_no = 0; have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; have_wweek = 0; while (*fmt != '\0') { /* A white space in the format string matches 0 more or white space in the input string. */ if (ISSPACE (*fmt)) { while (ISSPACE (*rp)) ++rp; ++fmt; continue; } /* Any character but '%' must be matched by the same character in the input string. */ if (*fmt != '%') { match_char (*fmt++, *rp++); continue; } ++fmt; #ifndef _NL_CURRENT /* We need this for handling the 'E' modifier. */ start_over: #else /* Make back up of current processing pointer. */ rp_backup = rp; #endif switch (*fmt++) { case '%': /* Match the '%' character itself. */ match_char ('%', *rp++); break; case 'a': case 'A': /* Match day of week. */ for (cnt = 0; cnt < 7; ++cnt) { #ifdef _NL_CURRENT if (*decided !=raw) { if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), weekday_name[cnt])) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), ab_weekday_name[cnt])) *decided = loc; break; } } #endif if (*decided != loc && (match_string (weekday_name[cnt], rp) || match_string (ab_weekday_name[cnt], rp))) { *decided = raw; break; } } if (cnt == 7) /* Does not match a weekday name. */ return NULL; tm->tm_wday = cnt; have_wday = 1; break; case 'b': case 'B': case 'h': /* Match month name. */ for (cnt = 0; cnt < 12; ++cnt) { #ifdef _NL_CURRENT if (*decided !=raw) { if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), month_name[cnt])) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), ab_month_name[cnt])) *decided = loc; break; } } #endif if (match_string (month_name[cnt], rp) || match_string (ab_month_name[cnt], rp)) { *decided = raw; break; } } if (cnt == 12) /* Does not match a month name. */ return NULL; tm->tm_mon = cnt; want_xday = 1; break; case 'c': /* Match locale's date and time format. */ #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } #endif if (!recursive (HERE_D_T_FMT)) return NULL; want_xday = 1; break; case 'C': /* Match century number. */ #ifdef _NL_CURRENT match_century: #endif get_number (0, 99, 2); century = val; want_xday = 1; break; case 'd': case 'e': /* Match day of month. */ get_number (1, 31, 2); tm->tm_mday = val; have_mday = 1; want_xday = 1; break; case 'F': if (!recursive ("%Y-%m-%d")) return NULL; want_xday = 1; break; case 'x': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } #endif /* Fall through. */ case 'D': /* Match standard day format. */ if (!recursive (HERE_D_FMT)) return NULL; want_xday = 1; break; case 'k': case 'H': /* Match hour in 24-hour clock. */ get_number (0, 23, 2); tm->tm_hour = val; have_I = 0; break; case 'l': /* Match hour in 12-hour clock. GNU extension. */ case 'I': /* Match hour in 12-hour clock. */ get_number (1, 12, 2); tm->tm_hour = val % 12; have_I = 1; break; case 'j': /* Match day number of year. */ get_number (1, 366, 3); tm->tm_yday = val - 1; have_yday = 1; break; case 'm': /* Match number of month. */ get_number (1, 12, 2); tm->tm_mon = val - 1; have_mon = 1; want_xday = 1; break; case 'M': /* Match minute. */ get_number (0, 59, 2); tm->tm_min = val; break; case 'n': case 't': /* Match any white space. */ while (ISSPACE (*rp)) ++rp; break; case 'p': /* Match locale's equivalent of AM/PM. */ #ifdef _NL_CURRENT if (*decided != raw) { if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) *decided = loc; is_pm = 1; break; } *decided = raw; } #endif if (!match_string (HERE_AM_STR, rp)) { if (match_string (HERE_PM_STR, rp)) is_pm = 1; else return NULL; } break; case 'q': /* Match quarter of year. GNU extension. */ get_number (1, 4, 1); tm->tm_mon = (val - 1) * 3; tm->tm_mday = 1; have_mon = 1; have_mday = 1; want_xday = 1; break; case 'r': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), HERE_T_FMT_AMPM)) *decided = loc; break; } *decided = raw; } #endif if (!recursive (HERE_T_FMT_AMPM)) return NULL; break; case 'R': if (!recursive ("%H:%M")) return NULL; break; case 's': { /* The number of seconds may be very high so we cannot use the 'get_number' macro. Instead read the number character for character and construct the result while doing this. */ time_t secs = 0; if (*rp < '0' || *rp > '9') /* We need at least one digit. */ return NULL; do { secs *= 10; secs += *rp++ - '0'; } while (*rp >= '0' && *rp <= '9'); if (localtime_r (&secs, tm) == NULL) /* Error in function. */ return NULL; } break; case 'S': get_number (0, 61, 2); tm->tm_sec = val; break; case 'X': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) *decided = loc; break; } *decided = raw; } #endif /* Fall through. */ case 'T': if (!recursive (HERE_T_FMT)) return NULL; break; case 'u': get_number (1, 7, 1); tm->tm_wday = val % 7; have_wday = 1; break; case 'g': get_number (0, 99, 2); /* XXX This cannot determine any field in TM. */ break; case 'G': if (*rp < '0' || *rp > '9') return NULL; /* XXX Ignore the number since we would need some more information to compute a real date. */ do ++rp; while (*rp >= '0' && *rp <= '9'); break; case 'U': get_number (0, 53, 2); week_no = val; have_uweek = 1; break; case 'W': get_number (0, 53, 2); week_no = val; have_wweek = 1; break; case 'V': get_number (0, 53, 2); /* XXX This cannot determine any field in TM without some information. */ break; case 'w': /* Match number of weekday. */ get_number (0, 6, 1); tm->tm_wday = val; have_wday = 1; break; case 'y': #ifdef _NL_CURRENT match_year_in_century: #endif /* Match year within century. */ get_number (0, 99, 2); /* The "Year 2000: The Millennium Rollover" paper suggests that values in the range 69-99 refer to the twentieth century. */ tm->tm_year = val >= 69 ? val : val + 100; /* Indicate that we want to use the century, if specified. */ want_century = 1; want_xday = 1; break; case 'Y': /* Match year including century number. */ get_number (0, 9999, 4); tm->tm_year = val - 1900; want_century = 0; want_xday = 1; break; case 'Z': /* XXX How to handle this? */ break; case 'z': /* We recognize two formats: if two digits are given, these specify hours. If fours digits are used, minutes are also specified. */ { _GL_UNUSED bool neg; int n; val = 0; while (*rp == ' ') ++rp; if (*rp != '+' && *rp != '-') return NULL; neg = *rp++ == '-'; n = 0; while (n < 4 && *rp >= '0' && *rp <= '9') { val = val * 10 + *rp++ - '0'; ++n; } if (n == 2) val *= 100; else if (n != 4) /* Only two or four digits recognized. */ return NULL; else { /* We have to convert the minutes into decimal. */ if (val % 100 >= 60) return NULL; val = (val / 100) * 100 + ((val % 100) * 50) / 30; } if (val > 1200) return NULL; #if defined _LIBC || HAVE_TM_GMTOFF tm->tm_gmtoff = (val * 3600) / 100; if (neg) tm->tm_gmtoff = -tm->tm_gmtoff; #endif } break; case 'E': #ifdef _NL_CURRENT switch (*fmt++) { case 'c': /* Match locale's alternate date and time format. */ if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, D_T_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_D_T_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } /* The C locale has no era information, so use the normal representation. */ if (!recursive (HERE_D_T_FMT)) return NULL; want_xday = 1; break; case 'C': if (*decided != raw) { if (era_cnt >= 0) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; } else return NULL; } num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; } } if (era_cnt != (int) num_eras) break; era_cnt = -1; if (*decided == loc) return NULL; *decided = raw; } /* The C locale has no era information, so use the normal representation. */ goto match_century; case 'y': if (*decided != raw) { get_number(0, 9999, 4); tm->tm_year = val; want_era = 1; want_xday = 1; want_century = 1; if (era_cnt >= 0) { assert (*decided == loc); era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); bool match = false; if (era != NULL) { int delta = ((tm->tm_year - era->offset) * era->absolute_direction); match = (delta >= 0 && delta < (((int64_t) era->stop_date[0] - (int64_t) era->start_date[0]) * era->absolute_direction)); } if (! match) return NULL; break; } num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL) { int delta = ((tm->tm_year - era->offset) * era->absolute_direction); if (delta >= 0 && delta < (((int64_t) era->stop_date[0] - (int64_t) era->start_date[0]) * era->absolute_direction)) { *decided = loc; break; } } } if (era_cnt != (int) num_eras) break; era_cnt = -1; if (*decided == loc) return NULL; *decided = raw; } goto match_year_in_century; case 'Y': if (*decided != raw) { num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && recursive (era->era_format)) break; } if (era_cnt == (int) num_eras) { era_cnt = -1; if (*decided == loc) return NULL; else rp = rp_backup; } else { *decided = loc; era_cnt = -1; break; } *decided = raw; } get_number (0, 9999, 4); tm->tm_year = val - 1900; want_century = 0; want_xday = 1; break; case 'x': if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, D_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_D_FMT)) *decided = loc; break; } *decided = raw; } if (!recursive (HERE_D_FMT)) return NULL; break; case 'X': if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, T_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_T_FMT)) *decided = loc; break; } *decided = raw; } if (!recursive (HERE_T_FMT)) return NULL; break; default: return NULL; } break; #else /* We have no information about the era format. Just use the normal format. */ if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' && *fmt != 'x' && *fmt != 'X') /* This is an illegal format. */ return NULL; goto start_over; #endif case 'O': switch (*fmt++) { case 'd': case 'e': /* Match day of month using alternate numeric symbols. */ get_alt_number (1, 31, 2); tm->tm_mday = val; have_mday = 1; want_xday = 1; break; case 'H': /* Match hour in 24-hour clock using alternate numeric symbols. */ get_alt_number (0, 23, 2); tm->tm_hour = val; have_I = 0; break; case 'I': /* Match hour in 12-hour clock using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_hour = val % 12; have_I = 1; break; case 'm': /* Match month using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_mon = val - 1; have_mon = 1; want_xday = 1; break; case 'M': /* Match minutes using alternate numeric symbols. */ get_alt_number (0, 59, 2); tm->tm_min = val; break; case 'q': /* Match quarter using alternate numeric symbols. */ get_alt_number (1, 4, 1); tm->tm_mon = (val - 1) * 3; tm->tm_mday = 1; have_mon = 1; have_mday = 1; want_xday = 1; break; case 'S': /* Match seconds using alternate numeric symbols. */ get_alt_number (0, 61, 2); tm->tm_sec = val; break; case 'U': get_alt_number (0, 53, 2); week_no = val; have_uweek = 1; break; case 'W': get_alt_number (0, 53, 2); week_no = val; have_wweek = 1; break; case 'V': get_alt_number (0, 53, 2); /* XXX This cannot determine any field in TM without further information. */ break; case 'w': /* Match number of weekday using alternate numeric symbols. */ get_alt_number (0, 6, 1); tm->tm_wday = val; have_wday = 1; break; case 'y': /* Match year within century using alternate numeric symbols. */ get_alt_number (0, 99, 2); tm->tm_year = val >= 69 ? val : val + 100; want_xday = 1; break; default: return NULL; } break; default: return NULL; } } if (have_I && is_pm) tm->tm_hour += 12; if (century != -1) { if (want_century) tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; else /* Only the century, but not the year. Strange, but so be it. */ tm->tm_year = (century - 19) * 100; } if (era_cnt != -1) { #ifdef _NL_CURRENT era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era == NULL) return NULL; if (want_era) tm->tm_year = (era->start_date[0] + ((tm->tm_year - era->offset) * era->absolute_direction)); else /* Era start year assumed. */ tm->tm_year = era->start_date[0]; #endif } else if (want_era) { /* No era found but we have seen an E modifier. Rectify some values. */ if (want_century && century == -1 && tm->tm_year < 69) tm->tm_year += 100; } if (want_xday && !have_wday) { if ( !(have_mon && have_mday) && have_yday) { /* We don't have tm_mon and/or tm_mday, compute them. */ int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; if (!have_mon) tm->tm_mon = t_mon - 1; if (!have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); } day_of_the_week (tm); } if (want_xday && !have_yday) day_of_the_year (tm); if ((have_uweek || have_wweek) && have_wday) { int save_wday = tm->tm_wday; int save_mday = tm->tm_mday; int save_mon = tm->tm_mon; int w_offset = have_uweek ? 0 : 1; tm->tm_mday = 1; tm->tm_mon = 0; day_of_the_week (tm); if (have_mday) tm->tm_mday = save_mday; if (have_mon) tm->tm_mon = save_mon; if (!have_yday) tm->tm_yday = ((7 - (tm->tm_wday - w_offset)) % 7 + (week_no - 1) *7 + save_wday - w_offset); if (!have_mday || !have_mon) { int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; if (!have_mon) tm->tm_mon = t_mon - 1; if (!have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); } tm->tm_wday = save_wday; } return (char *) rp; } char * strptime (buf, format, tm LOCALE_PARAM) const char *restrict buf; const char *restrict format; struct tm *restrict tm; LOCALE_PARAM_DECL { enum ptime_locale_status decided; #ifdef _NL_CURRENT decided = not; #else decided = raw; #endif return __strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG); } #ifdef _LIBC weak_alias (__strptime_l, strptime_l) #endif ������������������������������������������������gnulib-20210822~d383792/lib/strsep.c����������������������������������������������������������������0000664�0000000�0000000�00000002654�14110572173�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2004, 2007, 2009-2021 Free Software Foundation, Inc. Written by Yoann Vandoorselaere <yoann@prelude-ids.org>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <string.h> char * strsep (char **stringp, const char *delim) { char *start = *stringp; char *ptr; if (start == NULL) return NULL; /* Optimize the case of no delimiters. */ if (delim[0] == '\0') { *stringp = NULL; return start; } /* Optimize the case of one delimiter. */ if (delim[1] == '\0') ptr = strchr (start, delim[0]); else /* The general case. */ ptr = strpbrk (start, delim); if (ptr == NULL) { *stringp = NULL; return start; } *ptr = '\0'; *stringp = ptr + 1; return start; } ������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strsignal.c�������������������������������������������������������������0000664�0000000�0000000�00000012160�14110572173�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994-2002, 2005, 2008-2021 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 _LIBC # include <config.h> #endif /* Specification. */ #include <string.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #ifdef _LIBC # include <libintl.h> #else /* !_LIBC */ # include "gettext.h" # define _(msgid) gettext (msgid) # define N_(msgid) gettext_noop (msgid) #endif /* _LIBC */ #ifdef _LIBC # include <bits/libc-lock.h> #else /* !_LIBC */ # include "glthread/lock.h" # include "glthread/tls.h" # define __libc_once_define(CLASS, NAME) gl_once_define (CLASS, NAME) # define __libc_once(NAME, INIT) gl_once ((NAME), (INIT)) # define __libc_key_t gl_tls_key_t # define __libc_getspecific(NAME) gl_tls_get ((NAME)) # define __libc_setspecific(NAME, POINTER) gl_tls_set ((NAME), (POINTER)) # define __snprintf snprintf #endif /* _LIBC */ #ifdef _LIBC /* Defined in siglist.c. */ extern const char *const _sys_siglist[]; extern const char *const _sys_siglist_internal[] attribute_hidden; #else /* !_LIBC */ /* NetBSD declares sys_siglist in unistd.h. */ # if HAVE_UNISTD_H # include <unistd.h> # endif # define INTUSE(x) (x) # if HAVE_DECL_SYS_SIGLIST # undef _sys_siglist # define _sys_siglist sys_siglist # else /* !HAVE_DECL_SYS_SIGLIST */ # ifndef NSIG # define NSIG 32 # endif /* NSIG */ # if !HAVE_DECL__SYS_SIGLIST static const char *_sys_siglist[NSIG]; # endif # endif /* !HAVE_DECL_SYS_SIGLIST */ #endif /* _LIBC */ static __libc_key_t key; /* If nonzero the key allocation failed and we should better use a static buffer than fail. */ #define BUFFERSIZ 100 static char local_buf[BUFFERSIZ]; static char *static_buf; /* Destructor for the thread-specific data. */ static void init (void); static void free_key_mem (void *mem); static char *getbuffer (void); /* Return a string describing the meaning of the signal number SIGNUM. */ char * strsignal (int signum) { const char *desc; __libc_once_define (static, once); /* If we have not yet initialized the buffer do it now. */ __libc_once (once, init); if ( #ifdef SIGRTMIN (signum >= SIGRTMIN && signum <= SIGRTMAX) || #endif signum < 0 || signum >= NSIG || (desc = INTUSE(_sys_siglist)[signum]) == NULL) { char *buffer = getbuffer (); int len; #ifdef SIGRTMIN if (signum >= SIGRTMIN && signum <= SIGRTMAX) len = __snprintf (buffer, BUFFERSIZ - 1, _("Real-time signal %d"), signum - (int) SIGRTMIN); else #endif len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"), signum); if (len >= BUFFERSIZ) buffer = NULL; else buffer[len] = '\0'; return buffer; } return (char *) _(desc); } /* Initialize buffer. */ static void init (void) { #ifdef _LIBC if (__libc_key_create (&key, free_key_mem)) /* Creating the key failed. This means something really went wrong. In any case use a static buffer which is better than nothing. */ static_buf = local_buf; #else /* !_LIBC */ gl_tls_key_init (key, free_key_mem); # if !HAVE_DECL_SYS_SIGLIST memset (_sys_siglist, 0, NSIG * sizeof *_sys_siglist); /* No need to use a do {} while (0) here since init_sig(...) must expand to a complete statement. (We cannot use the ISO C99 designated array initializer syntax since it is not supported by ANSI C compilers and since some signal numbers might exceed NSIG.) */ # define init_sig(sig, abbrev, desc) \ if (sig >= 0 && sig < NSIG) \ _sys_siglist[sig] = desc; # include "siglist.h" # undef init_sig # endif /* !HAVE_DECL_SYS_SIGLIST */ #endif /* !_LIBC */ } /* Free the thread specific data, this is done if a thread terminates. */ static void free_key_mem (void *mem) { free (mem); __libc_setspecific (key, NULL); } /* Return the buffer to be used. */ static char * getbuffer (void) { char *result; if (static_buf != NULL) result = static_buf; else { /* We don't use the static buffer and so we have a key. Use it to get the thread-specific buffer. */ result = __libc_getspecific (key); if (result == NULL) { /* No buffer allocated so far. */ result = malloc (BUFFERSIZ); if (result == NULL) /* No more memory available. We use the static buffer. */ result = local_buf; else __libc_setspecific (key, result); } } return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strstr.c����������������������������������������������������������������0000664�0000000�0000000�00000005735�14110572173�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2021 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/>. */ /* This particular implementation was written by Eric Blake, 2008. */ #ifndef _LIBC # include <config.h> #endif /* Specification of strstr. */ #include <string.h> #include <stdbool.h> #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ && ((h_l) = (j) + (n_l))) #include "str-two-way.h" /* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK if NEEDLE is empty, otherwise NULL if NEEDLE is not found in HAYSTACK. */ char * strstr (const char *haystack_start, const char *needle_start) { const char *haystack = haystack_start; const char *needle = needle_start; size_t needle_len; /* Length of NEEDLE. */ size_t haystack_len; /* Known minimum length of HAYSTACK. */ bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ /* Determine length of NEEDLE, and in the process, make sure HAYSTACK is at least as long (no point processing all of a long NEEDLE if HAYSTACK is too short). */ while (*haystack && *needle) ok &= *haystack++ == *needle++; if (*needle) return NULL; if (ok) return (char *) haystack_start; /* Reduce the size of haystack using strchr, since it has a smaller linear coefficient than the Two-Way algorithm. */ needle_len = needle - needle_start; haystack = strchr (haystack_start + 1, *needle_start); if (!haystack || __builtin_expect (needle_len == 1, 0)) return (char *) haystack; needle -= needle_len; haystack_len = (haystack > haystack_start + needle_len ? 1 : needle_len + haystack_start - haystack); /* Perform the search. Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ if (needle_len < LONG_NEEDLE_THRESHOLD) return two_way_short_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle, needle_len); return two_way_long_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle, needle_len); } #undef LONG_NEEDLE_THRESHOLD �����������������������������������gnulib-20210822~d383792/lib/strtod.c����������������������������������������������������������������0000664�0000000�0000000�00000034120�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1992, 1997, 1999, 2003, 2006, 2008-2021 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/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <stdlib.h> #include <ctype.h> /* isspace() */ #include <errno.h> #include <float.h> /* {DBL,LDBL}_{MIN,MAX} */ #include <limits.h> /* LONG_{MIN,MAX} */ #include <locale.h> /* localeconv() */ #include <math.h> /* NAN */ #include <stdbool.h> #include <stdio.h> /* sprintf() */ #include <string.h> /* strdup() */ #if HAVE_NL_LANGINFO # include <langinfo.h> #endif #include "c-ctype.h" #undef MIN #undef MAX #ifdef USE_LONG_DOUBLE # define STRTOD strtold # define LDEXP ldexpl # if defined __hpux && defined __hppa /* We cannot call strtold on HP-UX/hppa, because its return type is a struct, not a 'long double'. */ # define HAVE_UNDERLYING_STRTOD 0 # elif STRTOLD_HAS_UNDERFLOW_BUG /* strtold would not set errno=ERANGE upon underflow. */ # define HAVE_UNDERLYING_STRTOD 0 # else # define HAVE_UNDERLYING_STRTOD HAVE_STRTOLD # endif # define DOUBLE long double # define MIN LDBL_MIN # define MAX LDBL_MAX # define L_(literal) literal##L #else # define STRTOD strtod # define LDEXP ldexp # define HAVE_UNDERLYING_STRTOD 1 # define DOUBLE double # define MIN DBL_MIN # define MAX DBL_MAX # define L_(literal) literal #endif #if (defined USE_LONG_DOUBLE ? HAVE_LDEXPM_IN_LIBC : HAVE_LDEXP_IN_LIBC) # define USE_LDEXP 1 #else # define USE_LDEXP 0 #endif /* Return true if C is a space in the current locale, avoiding problems with signed char and isspace. */ static bool locale_isspace (char c) { unsigned char uc = c; return isspace (uc) != 0; } /* Determine the decimal-point character according to the current locale. */ static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ #if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); #elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; #else point = localeconv () -> decimal_point; #endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } #if !USE_LDEXP #undef LDEXP #define LDEXP dummy_ldexp /* A dummy definition that will never be invoked. */ static DOUBLE LDEXP (_GL_UNUSED DOUBLE x, _GL_UNUSED int exponent) { abort (); return L_(0.0); } #endif /* Return X * BASE**EXPONENT. Return an extreme value and set errno to ERANGE if underflow or overflow occurs. */ static DOUBLE scale_radix_exp (DOUBLE x, int radix, long int exponent) { /* If RADIX == 10, this code is neither precise nor fast; it is merely a straightforward and relatively portable approximation. If N == 2, this code is precise on a radix-2 implementation, albeit perhaps not fast if ldexp is not in libc. */ long int e = exponent; if (USE_LDEXP && radix == 2) return LDEXP (x, e < INT_MIN ? INT_MIN : INT_MAX < e ? INT_MAX : e); else { DOUBLE r = x; if (r != 0) { if (e < 0) { while (e++ != 0) { r /= radix; if (r == 0 && x != 0) { errno = ERANGE; break; } } } else { while (e-- != 0) { if (r < -MAX / radix) { errno = ERANGE; return -HUGE_VAL; } else if (MAX / radix < r) { errno = ERANGE; return HUGE_VAL; } else r *= radix; } } } return r; } } /* Parse a number at NPTR; this is a bit like strtol (NPTR, ENDPTR) except there are no leading spaces or signs or "0x", and ENDPTR is nonnull. The number uses a base BASE (either 10 or 16) fraction, a radix RADIX (either 10 or 2) exponent, and exponent character EXPCHAR. BASE is RADIX**RADIX_MULTIPLIER. */ static DOUBLE parse_number (const char *nptr, int base, int radix, int radix_multiplier, char radixchar, char expchar, char **endptr) { const char *s = nptr; const char *digits_start; const char *digits_end; const char *radixchar_ptr; long int exponent; DOUBLE num; /* First, determine the start and end of the digit sequence. */ digits_start = s; radixchar_ptr = NULL; for (;; ++s) { if (base == 16 ? c_isxdigit (*s) : c_isdigit (*s)) ; else if (radixchar_ptr == NULL && *s == radixchar) { /* Record that we have found the decimal point. */ radixchar_ptr = s; } else /* Any other character terminates the digit sequence. */ break; } digits_end = s; /* Now radixchar_ptr == NULL or digits_start <= radixchar_ptr < digits_end. */ if (false) { /* Unoptimized. */ exponent = (radixchar_ptr != NULL ? - (long int) (digits_end - radixchar_ptr - 1) : 0); } else { /* Remove trailing zero digits. This reduces rounding errors for inputs such as 1.0000000000 or 10000000000e-10. */ while (digits_end > digits_start) { if (digits_end - 1 == radixchar_ptr || *(digits_end - 1) == '0') digits_end--; else break; } exponent = (radixchar_ptr != NULL ? (digits_end > radixchar_ptr ? - (long int) (digits_end - radixchar_ptr - 1) : (long int) (radixchar_ptr - digits_end)) : (long int) (s - digits_end)); } /* Then, convert the digit sequence to a number. */ { const char *dp; num = 0; for (dp = digits_start; dp < digits_end; dp++) if (dp != radixchar_ptr) { int digit; /* Make sure that multiplication by BASE will not overflow. */ if (!(num <= MAX / base)) { /* The value of the digit and all subsequent digits don't matter, since we have already gotten as many digits as can be represented in a 'DOUBLE'. This doesn't necessarily mean that the result will overflow: The exponent may reduce it to within range. */ exponent += (digits_end - dp) - (radixchar_ptr >= dp && radixchar_ptr < digits_end ? 1 : 0); break; } /* Eat the next digit. */ if (c_isdigit (*dp)) digit = *dp - '0'; else if (base == 16 && c_isxdigit (*dp)) digit = c_tolower (*dp) - ('a' - 10); else abort (); num = num * base + digit; } } exponent = exponent * radix_multiplier; /* Finally, parse the exponent. */ if (c_tolower (*s) == expchar && ! locale_isspace (s[1])) { /* Add any given exponent to the implicit one. */ int saved_errno = errno; char *end; long int value = strtol (s + 1, &end, 10); errno = saved_errno; if (s + 1 != end) { /* Skip past the exponent, and add in the implicit exponent, resulting in an extreme value on overflow. */ s = end; exponent = (exponent < 0 ? (value < LONG_MIN - exponent ? LONG_MIN : exponent + value) : (LONG_MAX - exponent < value ? LONG_MAX : exponent + value)); } } *endptr = (char *) s; return scale_radix_exp (num, radix, exponent); } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -MIN * MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ static DOUBLE minus_zero (void) { #if defined __hpux || defined __sgi || defined __ICC return -MIN * MIN; #else return -0.0; #endif } /* Convert NPTR to a DOUBLE. If ENDPTR is not NULL, a pointer to the character after the last one used in the number is put in *ENDPTR. */ DOUBLE STRTOD (const char *nptr, char **endptr) #if HAVE_UNDERLYING_STRTOD # ifdef USE_LONG_DOUBLE # undef strtold # else # undef strtod # endif #else # undef STRTOD # define STRTOD(NPTR,ENDPTR) \ parse_number (NPTR, 10, 10, 1, radixchar, 'e', ENDPTR) #endif /* From here on, STRTOD refers to the underlying implementation. It needs to handle only finite unsigned decimal numbers with non-null ENDPTR. */ { char radixchar; bool negative = false; /* The number so far. */ DOUBLE num; const char *s = nptr; const char *end; char *endbuf; int saved_errno = errno; radixchar = decimal_point_char (); /* Eat whitespace. */ while (locale_isspace (*s)) ++s; /* Get the sign. */ negative = *s == '-'; if (*s == '-' || *s == '+') ++s; num = STRTOD (s, &endbuf); end = endbuf; if (c_isdigit (s[*s == radixchar])) { /* If a hex float was converted incorrectly, do it ourselves. If the string starts with "0x" but does not contain digits, consume the "0" ourselves. If a hex float is followed by a 'p' but no exponent, then adjust the end pointer. */ if (*s == '0' && c_tolower (s[1]) == 'x') { if (! c_isxdigit (s[2 + (s[2] == radixchar)])) { end = s + 1; /* strtod() on z/OS returns ERANGE for "0x". */ errno = saved_errno; } else if (end <= s + 2) { num = parse_number (s + 2, 16, 2, 4, radixchar, 'p', &endbuf); end = endbuf; } else { const char *p = s + 2; while (p < end && c_tolower (*p) != 'p') p++; if (p < end && ! c_isdigit (p[1 + (p[1] == '-' || p[1] == '+')])) { char *dup = strdup (s); errno = saved_errno; if (!dup) { /* Not really our day, is it. Rounding errors are better than outright failure. */ num = parse_number (s + 2, 16, 2, 4, radixchar, 'p', &endbuf); } else { dup[p - s] = '\0'; num = STRTOD (dup, &endbuf); saved_errno = errno; free (dup); errno = saved_errno; } end = p; } } } else { /* If "1e 1" was misparsed as 10.0 instead of 1.0, re-do the underlying STRTOD on a copy of the original string truncated to avoid the bug. */ const char *e = s + 1; while (e < end && c_tolower (*e) != 'e') e++; if (e < end && ! c_isdigit (e[1 + (e[1] == '-' || e[1] == '+')])) { char *dup = strdup (s); errno = saved_errno; if (!dup) { /* Not really our day, is it. Rounding errors are better than outright failure. */ num = parse_number (s, 10, 10, 1, radixchar, 'e', &endbuf); } else { dup[e - s] = '\0'; num = STRTOD (dup, &endbuf); saved_errno = errno; free (dup); errno = saved_errno; } end = e; } } s = end; } /* Check for infinities and NaNs. */ else if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'f') { s += 3; if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'i' && c_tolower (s[3]) == 't' && c_tolower (s[4]) == 'y') s += 5; num = HUGE_VAL; errno = saved_errno; } else if (c_tolower (*s) == 'n' && c_tolower (s[1]) == 'a' && c_tolower (s[2]) == 'n') { s += 3; if (*s == '(') { const char *p = s + 1; while (c_isalnum (*p)) p++; if (*p == ')') s = p + 1; } /* If the underlying implementation misparsed the NaN, assume its result is incorrect, and return a NaN. Normally it's better to use the underlying implementation's result, since a nice implementation populates the bits of the NaN according to interpreting n-char-sequence as a hexadecimal number. */ if (s != end || num == num) num = NAN; errno = saved_errno; } else { /* No conversion could be performed. */ errno = EINVAL; s = nptr; } if (endptr != NULL) *endptr = (char *) s; /* Special case -0.0, since at least ICC miscompiles negation. We can't use copysign(), as that drags in -lm on some platforms. */ if (!num && negative) return minus_zero (); return negative ? -num : num; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtoimax.c�������������������������������������������������������������0000664�0000000�0000000�00000003606�14110572173�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string representation of a number into an intmax_t value. Copyright (C) 1999, 2001-2004, 2006, 2009-2021 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 Paul Eggert. */ #include <config.h> /* Verify interface. */ #include <inttypes.h> #include <stdlib.h> #include "verify.h" #ifdef UNSIGNED # ifndef HAVE_DECL_STRTOULL "this configure-time declaration test was not run" # endif # if !HAVE_DECL_STRTOULL unsigned long long int strtoull (char const *, char **, int); # endif #else # ifndef HAVE_DECL_STRTOLL "this configure-time declaration test was not run" # endif # if !HAVE_DECL_STRTOLL long long int strtoll (char const *, char **, int); # endif #endif #ifdef UNSIGNED # define Int uintmax_t # define Strtoimax strtoumax # define Strtol strtoul # define Strtoll strtoull # define Unsigned unsigned #else # define Int intmax_t # define Strtoimax strtoimax # define Strtol strtol # define Strtoll strtoll # define Unsigned #endif Int Strtoimax (char const *ptr, char **endptr, int base) { verify (sizeof (Int) == sizeof (Unsigned long int) || sizeof (Int) == sizeof (Unsigned long long int)); if (sizeof (Int) != sizeof (Unsigned long int)) return Strtoll (ptr, endptr, base); return Strtol (ptr, endptr, base); } ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtok_r.c��������������������������������������������������������������0000664�0000000�0000000�00000004136�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant string tokenizer. Generic version. Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #ifdef _LIBC # undef strtok_r # undef __strtok_r #else # define __strtok_r strtok_r # define __rawmemchr strchr #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" */ char * __strtok_r (char *s, const char *delim, char **save_ptr) { char *token; if (s == NULL) s = *save_ptr; /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') { *save_ptr = s; return NULL; } /* Find the end of the token. */ token = s; s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ *save_ptr = __rawmemchr (token, '\0'); else { /* Terminate the token and make *SAVE_PTR point past it. */ *s = '\0'; *save_ptr = s + 1; } return token; } #ifdef weak_alias libc_hidden_def (__strtok_r) weak_alias (__strtok_r, strtok_r) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtol.c����������������������������������������������������������������0000664�0000000�0000000�00000023740�14110572173�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string representation of a number into an integer value. Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ #ifdef _LIBC # define USE_NUMBER_GROUPING #else # include <config.h> #endif #include <ctype.h> #include <errno.h> #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #ifdef USE_NUMBER_GROUPING # include "../locale/localeinfo.h" #endif /* Nonzero if we are defining 'strtoul' or 'strtoull', operating on unsigned integers. */ #ifndef UNSIGNED # define UNSIGNED 0 # define INT LONG int #else # define INT unsigned LONG int #endif /* Determine the name. */ #ifdef USE_IN_EXTENDED_LOCALE_MODEL # undef strtol # if UNSIGNED # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol __wcstoull_l # else # define strtol __wcstoul_l # endif # else # ifdef QUAD # define strtol __strtoull_l # else # define strtol __strtoul_l # endif # endif # else # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol __wcstoll_l # else # define strtol __wcstol_l # endif # else # ifdef QUAD # define strtol __strtoll_l # else # define strtol __strtol_l # endif # endif # endif #else # if UNSIGNED # undef strtol # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoull # else # define strtol wcstoul # endif # else # ifdef QUAD # define strtol strtoull # else # define strtol strtoul # endif # endif # else # ifdef USE_WIDE_CHAR # undef strtol # ifdef QUAD # define strtol wcstoll # else # define strtol wcstol # endif # else # ifdef QUAD # undef strtol # define strtol strtoll # endif # endif # endif #endif /* If QUAD is defined, we are defining 'strtoll' or 'strtoull', operating on 'long long int's. */ #ifdef QUAD # define LONG long long # define STRTOL_LONG_MIN LLONG_MIN # define STRTOL_LONG_MAX LLONG_MAX # define STRTOL_ULONG_MAX ULLONG_MAX # if __GNUC__ == 2 && __GNUC_MINOR__ < 7 /* Work around gcc bug with using this constant. */ static const unsigned long long int maxquad = ULLONG_MAX; # undef STRTOL_ULONG_MAX # define STRTOL_ULONG_MAX maxquad # endif #else # define LONG long # define STRTOL_LONG_MIN LONG_MIN # define STRTOL_LONG_MAX LONG_MAX # define STRTOL_ULONG_MAX ULONG_MAX #endif #ifdef USE_NUMBER_GROUPING # define GROUP_PARAM_PROTO , int group #else # define GROUP_PARAM_PROTO #endif /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ #ifdef USE_IN_EXTENDED_LOCALE_MODEL # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # define LOCALE_PARAM , loc # define LOCALE_PARAM_PROTO , __locale_t loc #else # define LOCALE_PARAM # define LOCALE_PARAM_PROTO #endif #ifdef USE_WIDE_CHAR # include <wchar.h> # include <wctype.h> # define L_(Ch) L##Ch # define UCHAR_TYPE wint_t # define STRING_TYPE wchar_t # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define ISSPACE(Ch) __iswspace_l ((Ch), loc) # define ISALPHA(Ch) __iswalpha_l ((Ch), loc) # define TOUPPER(Ch) __towupper_l ((Ch), loc) # else # define ISSPACE(Ch) iswspace (Ch) # define ISALPHA(Ch) iswalpha (Ch) # define TOUPPER(Ch) towupper (Ch) # endif #else # define L_(Ch) Ch # define UCHAR_TYPE unsigned char # define STRING_TYPE char # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define ISSPACE(Ch) __isspace_l ((unsigned char) (Ch), loc) # define ISALPHA(Ch) __isalpha_l ((unsigned char) (Ch), loc) # define TOUPPER(Ch) __toupper_l ((unsigned char) (Ch), loc) # else # define ISSPACE(Ch) isspace ((unsigned char) (Ch)) # define ISALPHA(Ch) isalpha ((unsigned char) (Ch)) # define TOUPPER(Ch) toupper ((unsigned char) (Ch)) # endif #endif #ifdef USE_NUMBER_GROUPING # define INTERNAL(X) INTERNAL1(X) # define INTERNAL1(X) __##X##_internal # define WEAKNAME(X) WEAKNAME1(X) #else # define INTERNAL(X) X #endif #ifdef USE_NUMBER_GROUPING /* This file defines a function to check for correct grouping. */ # include "grouping.h" #endif /* Convert NPTR to an 'unsigned long int' or 'long int' in base BASE. If BASE is 0 the base is determined by the presence of a leading zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. If BASE is < 2 or > 36, it is reset to 10. If ENDPTR is not NULL, a pointer to the character after the last one converted is stored in *ENDPTR. */ INT INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base GROUP_PARAM_PROTO LOCALE_PARAM_PROTO) { int negative; register unsigned LONG int cutoff; register unsigned int cutlim; register unsigned LONG int i; register const STRING_TYPE *s; register UCHAR_TYPE c; const STRING_TYPE *save, *end; int overflow; #ifdef USE_NUMBER_GROUPING # ifdef USE_IN_EXTENDED_LOCALE_MODEL struct locale_data *current = loc->__locales[LC_NUMERIC]; # endif /* The thousands character of the current locale. */ wchar_t thousands = L'\0'; /* The numeric grouping specification of the current locale, in the format described in <locale.h>. */ const char *grouping; if (group) { grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) grouping = NULL; else { /* Figure out the thousands separator character. */ # if defined _LIBC || defined _HAVE_BTOWC thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)); if (thousands == WEOF) thousands = L'\0'; # endif if (thousands == L'\0') grouping = NULL; } } else grouping = NULL; #endif if (base < 0 || base == 1 || base > 36) { __set_errno (EINVAL); return 0; } save = s = nptr; /* Skip white space. */ while (ISSPACE (*s)) ++s; if (*s == L_('\0')) goto noconv; /* Check for a sign. */ if (*s == L_('-')) { negative = 1; ++s; } else if (*s == L_('+')) { negative = 0; ++s; } else negative = 0; /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ if (*s == L_('0')) { if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X')) { s += 2; base = 16; } else if (base == 0) base = 8; } else if (base == 0) base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; #ifdef USE_NUMBER_GROUPING if (group) { /* Find the end of the digit string and check its grouping. */ end = s; for (c = *end; c != L_('\0'); c = *++end) if ((wchar_t) c != thousands && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9')) && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base)) break; if (*s == thousands) end = s; else end = correctly_grouped_prefix (s, end, thousands, grouping); } else #endif end = NULL; cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base; cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base; overflow = 0; i = 0; for (c = *s; c != L_('\0'); c = *++s) { if (s == end) break; if (c >= L_('0') && c <= L_('9')) c -= L_('0'); else if (ISALPHA (c)) c = TOUPPER (c) - L_('A') + 10; else break; if ((int) c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned LONG int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (STRING_TYPE *) s; #if !UNSIGNED /* Check for a value that is within the range of 'unsigned LONG int', but outside the range of 'LONG int'. */ if (overflow == 0 && i > (negative ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1 : (unsigned LONG int) STRTOL_LONG_MAX)) overflow = 1; #endif if (overflow) { __set_errno (ERANGE); #if UNSIGNED return STRTOL_ULONG_MAX; #else return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX; #endif } /* Return the result of the appropriate sign. */ return negative ? -i : i; noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters are '0' and 'x', but the rest are no hexadecimal digits. This is no error case. We return 0 and ENDPTR points to the 'x'. */ if (endptr != NULL) { if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') && save[-2] == L_('0')) *endptr = (STRING_TYPE *) &save[-1]; else /* There was no number to convert. */ *endptr = (STRING_TYPE *) nptr; } return 0L; } #ifdef USE_NUMBER_GROUPING /* External user entry point. */ INT # ifdef weak_function weak_function # endif strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base LOCALE_PARAM_PROTO) { return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM); } #endif ��������������������������������gnulib-20210822~d383792/lib/strtold.c���������������������������������������������������������������0000664�0000000�0000000�00000002047�14110572173�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'long double'. Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <stdlib.h> long double strtold (const char *str, char **endp) { return strtod (str, endp); } #else # define USE_LONG_DOUBLE # include "strtod.c" #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtoll.c���������������������������������������������������������������0000664�0000000�0000000�00000002130�14110572173�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Function to parse a 'long long int' from text. Copyright (C) 1995-1997, 1999, 2001, 2009-2021 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 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/>. */ #define QUAD 1 #include <strtol.c> #ifdef _LIBC # ifdef SHARED # include <shlib-compat.h> # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0); # endif # endif weak_alias (strtoll, strtoq) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtoul.c���������������������������������������������������������������0000664�0000000�0000000�00000001470�14110572173�0016727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1997, 2009-2021 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 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/>. */ #define UNSIGNED 1 #include "strtol.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtoull.c��������������������������������������������������������������0000664�0000000�0000000�00000002057�14110572173�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Function to parse an 'unsigned long long int' from text. Copyright (C) 1995-1997, 1999, 2009-2021 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ #define QUAD 1 #include "strtoul.c" #ifdef _LIBC strong_alias (__strtoull_internal, __strtouq_internal) weak_alias (strtoull, strtouq) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strtoumax.c�������������������������������������������������������������0000664�0000000�0000000�00000001502�14110572173�0017255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string representation of a number into a uintmax_t value. Copyright (C) 1999-2021 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/>. */ #define UNSIGNED 1 #include "strtoimax.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/strverscmp.c������������������������������������������������������������0000664�0000000�0000000�00000006201�14110572173�0017420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare strings while treating digits characters numerically. Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. 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 _LIBC # include <libc-config.h> # define __strverscmp strverscmp #endif #include <stdint.h> #include <string.h> #include <ctype.h> /* states: S_N: normal, S_I: comparing integral part, S_F: comparing fractional parts, S_Z: idem but with leading Zeroes only */ #define S_N 0x0 #define S_I 0x3 #define S_F 0x6 #define S_Z 0x9 /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* Compare S1 and S2 as strings holding indices/version numbers, returning less than, equal to or greater than zero if S1 is less than, equal to or greater than S2 (for more info, see the texinfo doc). */ int __strverscmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; /* Symbol(s) 0 [1-9] others Transition (10) 0 (01) d (00) x */ static const uint_least8_t next_state[] = { /* state x d 0 */ /* S_N */ S_N, S_I, S_Z, /* S_I */ S_N, S_I, S_I, /* S_F */ S_N, S_F, S_F, /* S_Z */ S_N, S_F, S_Z }; static const int_least8_t result_type[] = { /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP }; if (p1 == p2) return 0; unsigned char c1 = *p1++; unsigned char c2 = *p2++; /* Hint: '0' is a digit too. */ int state = S_N + ((c1 == '0') + (isdigit (c1) != 0)); int diff; while ((diff = c1 - c2) == 0) { if (c1 == '\0') return diff; state = next_state[state]; c1 = *p1++; c2 = *p2++; state += (c1 == '0') + (isdigit (c1) != 0); } state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; switch (state) { case CMP: return diff; case LEN: while (isdigit (*p1++)) if (!isdigit (*p2++)) return 1; return isdigit (*p2) ? -1 : diff; default: return state; } } libc_hidden_def (__strverscmp) weak_alias (__strverscmp, strverscmp) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/supersede.c�������������������������������������������������������������0000664�0000000�0000000�00000036145�14110572173�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a file, without destroying an old file with the same name. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ #include <config.h> /* Specification. */ #include "supersede.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #if defined _WIN32 && !defined __CYGWIN__ /* A native Windows platform. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <io.h> #else # include <unistd.h> #endif #include "canonicalize.h" #include "clean-temp.h" #include "ignore-value.h" #include "stat-time.h" #include "utimens.h" #include "acl.h" #if defined _WIN32 && !defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef MoveFileEx # define MoveFileEx MoveFileExA #endif static int create_temp_file (char *canon_filename, int flags, mode_t mode, struct supersede_final_action *action) { /* Use a temporary file always. */ size_t canon_filename_length = strlen (canon_filename); /* The temporary file needs to be in the same directory, otherwise the final rename may fail. */ char *temp_filename = (char *) malloc (canon_filename_length + 7 + 1); if (temp_filename == NULL) return -1; memcpy (temp_filename, canon_filename, canon_filename_length); memcpy (temp_filename + canon_filename_length, ".XXXXXX", 7 + 1); int fd = gen_register_open_temp (temp_filename, 0, flags, mode); if (fd < 0) return -1; action->final_rename_temp = temp_filename; action->final_rename_dest = canon_filename; return fd; } int open_supersede (const char *filename, int flags, mode_t mode, bool supersede_if_exists, bool supersede_if_does_not_exist, struct supersede_final_action *action) { int fd; /* Extra flags for existing devices. */ int extra_flags = #if defined __sun || (defined _WIN32 && !defined __CYGWIN__) /* open ("/dev/null", O_TRUNC | O_WRONLY) fails with error EINVAL on Solaris zones. See <https://www.illumos.org/issues/13035>. Likewise for open ("NUL", O_TRUNC | O_RDWR) on native Windows. As a workaround, add the O_CREAT flag, although it ought not to be necessary. */ O_CREAT; #else 0; #endif if (supersede_if_exists) { if (supersede_if_does_not_exist) { struct stat statbuf; if (stat (filename, &statbuf) >= 0 && ! S_ISREG (statbuf.st_mode) /* The file exists and is possibly a character device, socket, or something like that. */ && ((fd = open (filename, flags | extra_flags, mode)) >= 0 || errno != ENOENT)) { if (fd >= 0) { action->final_rename_temp = NULL; action->final_rename_dest = NULL; } } else { /* The file does not exist or is a regular file. Use a temporary file. */ char *canon_filename = canonicalize_filename_mode (filename, CAN_ALL_BUT_LAST); if (canon_filename == NULL) fd = -1; else { fd = create_temp_file (canon_filename, flags, mode, action); if (fd < 0) free (canon_filename); } } } else { fd = open (filename, flags | O_CREAT | O_EXCL, mode); if (fd >= 0) { /* The file did not exist. */ action->final_rename_temp = NULL; action->final_rename_dest = NULL; } else { /* The file exists or is a symbolic link to a nonexistent file. */ char *canon_filename = canonicalize_filename_mode (filename, CAN_ALL_BUT_LAST); if (canon_filename == NULL) fd = -1; else { fd = open (canon_filename, flags | O_CREAT | O_EXCL, mode); if (fd >= 0) { /* It was a symbolic link to a nonexistent file. */ free (canon_filename); action->final_rename_temp = NULL; action->final_rename_dest = NULL; } else { /* The file exists. */ struct stat statbuf; if (stat (canon_filename, &statbuf) >= 0 && S_ISREG (statbuf.st_mode)) { /* It is a regular file. Use a temporary file. */ fd = create_temp_file (canon_filename, flags, mode, action); if (fd < 0) free (canon_filename); } else { /* It is possibly a character device, socket, or something like that. */ fd = open (canon_filename, flags | extra_flags, mode); free (canon_filename); if (fd >= 0) { action->final_rename_temp = NULL; action->final_rename_dest = NULL; } } } } } } } else { if (supersede_if_does_not_exist) { fd = open (filename, flags, mode); if (fd >= 0) { /* The file exists. */ action->final_rename_temp = NULL; action->final_rename_dest = NULL; } #if defined __sun || (defined _WIN32 && !defined __CYGWIN__) /* See the comment regarding extra_flags, above. */ else if (errno == EINVAL) { struct stat statbuf; if (stat (filename, &statbuf) >= 0 && ! S_ISREG (statbuf.st_mode)) { /* The file exists and is possibly a character device, socket, or something like that. As a workaround, add the O_CREAT flag, although it ought not to be necessary.*/ fd = open (filename, flags | extra_flags, mode); if (fd >= 0) { /* The file exists. */ action->final_rename_temp = NULL; action->final_rename_dest = NULL; } } } #endif else if (errno == ENOENT) { /* The file does not exist. Use a temporary file. */ char *canon_filename = canonicalize_filename_mode (filename, CAN_ALL_BUT_LAST); if (canon_filename == NULL) fd = -1; else { fd = create_temp_file (canon_filename, flags, mode, action); if (fd < 0) free (canon_filename); } } } else { /* Never use a temporary file. */ fd = open (filename, flags | O_CREAT, mode); action->final_rename_temp = NULL; action->final_rename_dest = NULL; } } return fd; } static int after_close_actions (int ret, const struct supersede_final_action *action) { if (ret < 0) { /* There was an error writing. Erase the temporary file. */ if (action->final_rename_temp != NULL) { int saved_errno = errno; ignore_value (unlink (action->final_rename_temp)); free (action->final_rename_temp); free (action->final_rename_dest); errno = saved_errno; } return ret; } if (action->final_rename_temp != NULL) { struct stat temp_statbuf; struct stat dest_statbuf; if (stat (action->final_rename_temp, &temp_statbuf) < 0) { /* We just finished writing the temporary file, but now cannot access it. There's something wrong. */ int saved_errno = errno; ignore_value (unlink (action->final_rename_temp)); free (action->final_rename_temp); free (action->final_rename_dest); errno = saved_errno; return -1; } if (stat (action->final_rename_dest, &dest_statbuf) >= 0) { /* Copy the access time from the destination file to the temporary file. */ { struct timespec ts[2]; ts[0] = get_stat_atime (&dest_statbuf); ts[1] = get_stat_mtime (&temp_statbuf); ignore_value (utimens (action->final_rename_temp, ts)); } #if HAVE_CHOWN /* Copy the owner and group from the destination file to the temporary file. */ ignore_value (chown (action->final_rename_temp, dest_statbuf.st_uid, dest_statbuf.st_gid)); #endif /* Copy the access permissions from the destination file to the temporary file. */ #if USE_ACL switch (qcopy_acl (action->final_rename_dest, -1, action->final_rename_temp, -1, dest_statbuf.st_mode)) { case -2: /* Could not get the ACL of the destination file. */ case -1: /* Could not set the ACL on the temporary file. */ ignore_value (unlink (action->final_rename_temp)); free (action->final_rename_temp); free (action->final_rename_dest); errno = EPERM; return -1; } #else chmod (action->final_rename_temp, dest_statbuf.st_mode); #endif } else /* No chmod needed, since the mode was already passed to gen_register_open_temp. */ ; /* Rename the temporary file to the destination file. */ #if defined _WIN32 && !defined __CYGWIN__ /* A native Windows platform. */ /* ReplaceFile <https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-replacefilea> is atomic regarding the file's contents, says https://stackoverflow.com/questions/167414/is-an-atomic-file-rename-with-overwrite-possible-on-windows> But it fails with GetLastError () == ERROR_FILE_NOT_FOUND if action->final_rename_dest does not exist. So better use MoveFileEx <https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefileexa>. */ if (!MoveFileEx (action->final_rename_temp, action->final_rename_dest, MOVEFILE_REPLACE_EXISTING)) { int saved_errno; switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: saved_errno = EINVAL; break; default: saved_errno = EIO; break; } ignore_value (unlink (action->final_rename_temp)); free (action->final_rename_temp); free (action->final_rename_dest); errno = saved_errno; return -1; } #else if (rename (action->final_rename_temp, action->final_rename_dest) < 0) { int saved_errno = errno; ignore_value (unlink (action->final_rename_temp)); free (action->final_rename_temp); free (action->final_rename_dest); errno = saved_errno; return -1; } #endif unregister_temporary_file (action->final_rename_temp); free (action->final_rename_temp); free (action->final_rename_dest); } return ret; } int close_supersede (int fd, const struct supersede_final_action *action) { if (fd < 0) { free (action->final_rename_temp); free (action->final_rename_dest); return fd; } int ret; if (action->final_rename_temp != NULL) ret = close_temp (fd); else ret = close (fd); return after_close_actions (ret, action); } FILE * fopen_supersede (const char *filename, const char *mode, bool supersede_if_exists, bool supersede_if_does_not_exist, struct supersede_final_action *action) { /* Parse the mode. */ int open_direction = 0; int open_flags = 0; { const char *p = mode; for (; *p != '\0'; p++) { switch (*p) { case 'r': open_direction = O_RDONLY; continue; case 'w': open_direction = O_WRONLY; open_flags |= /* not! O_CREAT | */ O_TRUNC; continue; case 'a': open_direction = O_WRONLY; open_flags |= /* not! O_CREAT | */ O_APPEND; continue; case 'b': /* While it is non-standard, O_BINARY is guaranteed by gnulib <fcntl.h>. */ open_flags |= O_BINARY; continue; case '+': open_direction = O_RDWR; continue; case 'x': /* not! open_flags |= O_EXCL; */ continue; case 'e': open_flags |= O_CLOEXEC; continue; default: break; } break; } } mode_t open_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; int fd = open_supersede (filename, open_direction | open_flags, open_mode, supersede_if_exists, supersede_if_does_not_exist, action); if (fd < 0) return NULL; FILE *stream = fdopen (fd, mode); if (stream == NULL) { int saved_errno = errno; close (fd); close_supersede (-1, action); errno = saved_errno; } return stream; } int fclose_supersede (FILE *stream, const struct supersede_final_action *action) { if (stream == NULL) return -1; int ret; if (action->final_rename_temp != NULL) ret = fclose_temp (stream); else ret = fclose (stream); return after_close_actions (ret, action); } #if GNULIB_FWRITEERROR int fwriteerror_supersede (FILE *stream, const struct supersede_final_action *action) { if (stream == NULL) return -1; int ret; if (action->final_rename_temp != NULL) ret = fclose_temp (stream); else ret = fclose (stream); return after_close_actions (ret, action); } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/supersede.h�������������������������������������������������������������0000664�0000000�0000000�00000013600�14110572173�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a file, without destroying an old file with the same name. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ #ifndef _GL_SUPERSEDE_H #define _GL_SUPERSEDE_H #include <stdbool.h> #include <stdio.h> #include <sys/types.h> #ifdef __cplusplus extern "C" { #endif /* When writing a file, for some usages it is important that at any moment, a process that opens the file will see consistent data in the file. This can be important in two situations: * If supersede_if_exists == true, then when the file already existed, it is important that a process that opens the file while the new file's contents is being written sees consistent data - namely the old file's data. * If supersede_if_does_not_exist == true, then when the file did not exist, it is important that a process that opens the file while the new file's contents is being written sees no file (as opposed to a file with truncated contents). In both situations, the effect is implemented by creating a temporary file, writing into that temporary file, and renaming the temporary file when the temporary file's contents is complete. Note that opening a file with superseding may fail when it would succeed without superseding (for example, for a writable file in an unwritable directory). And also the other way around: Opening a file with superseding may succeed although it would fail without superseding (for example, for an unwritable file in a writable directory). */ /* This type holds everything that needs to needs to be remembered in order to execute the final rename action. */ struct supersede_final_action { char *final_rename_temp; char *final_rename_dest; }; /* =================== open() and close() with supersede =================== */ /* The typical code idiom is like this: struct supersede_final_action action; int fd = open_supersede (filename, O_RDWR, mode, supersede_if_exists, supersede_if_does_not_exist, &action); if (fd >= 0) { ... write the file's contents ... if (successful) { if (close_supersede (fd, &action) < 0) error (...); } else { // Abort the operation. close (fd); close_supersede (-1, &action); } } */ /* Opens a file (typically for writing) in superseding mode, depending on supersede_if_exists and supersede_if_does_not_exist. FLAGS should not contain O_CREAT nor O_EXCL. MODE is used when the file does not yet exist. The umask of the process is considered, like in open(), i.e. the effective mode is (MODE & ~ getumask ()). Upon success, it fills in ACTION and returns a file descriptor. Upon failure, it returns -1 and sets errno. */ extern int open_supersede (const char *filename, int flags, mode_t mode, bool supersede_if_exists, bool supersede_if_does_not_exist, struct supersede_final_action *action); /* Closes a file and executes the final rename action. FD must have been returned by open_supersede(), or -1 if you want to abort the operation. */ extern int close_supersede (int fd, const struct supersede_final_action *action); /* ================== fopen() and fclose() with supersede ================== */ /* The typical code idiom is like this: struct supersede_final_action action; FILE *stream = fopen_supersede (filename, O_RDWR, mode, supersede_if_exists, supersede_if_does_not_exist, &action); if (stream != NULL) { ... write the file's contents ... if (successful) { if (fclose_supersede (stream, &action) < 0) error (...); } else { // Abort the operation. fclose (stream); fclose_supersede (NULL, &action); } } */ /* Opens a file (typically for writing) in superseding mode, depending on supersede_if_exists and supersede_if_does_not_exist. Upon success, it fills in ACTION and returns a file stream. Upon failure, it returns NULL and sets errno. */ extern FILE *fopen_supersede (const char *filename, const char *mode, bool supersede_if_exists, bool supersede_if_does_not_exist, struct supersede_final_action *action); /* Closes a file stream and executes the final rename action. STREAM must have been returned by fopen_supersede(), or NULL if you want to abort the operation. */ extern int fclose_supersede (FILE *stream, const struct supersede_final_action *action); /* Closes a file stream, like with fwriteerror, and executes the final rename action. STREAM must have been returned by fopen_supersede(), or NULL if you want to abort the operation. */ extern int fwriteerror_supersede (FILE *stream, const struct supersede_final_action *action); #ifdef __cplusplus } #endif #endif /* _GL_SUPERSEDE_H */ ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/symlink.c���������������������������������������������������������������0000664�0000000�0000000�00000002677�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for symlink(). Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #if HAVE_SYMLINK # undef symlink /* Create a symlink, but reject trailing slash. */ int rpl_symlink (char const *contents, char const *name) { size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (lstat (name, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } return symlink (contents, name); } #else /* !HAVE_SYMLINK */ /* The system does not support symlinks. */ int symlink (_GL_UNUSED char const *contents, _GL_UNUSED char const *name) { errno = ENOSYS; return -1; } #endif /* !HAVE_SYMLINK */ �����������������������������������������������������������������gnulib-20210822~d383792/lib/symlinkat.c�������������������������������������������������������������0000664�0000000�0000000�00000005542�14110572173�0017232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a symlink relative to an open directory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #if HAVE_SYMLINKAT # undef symlinkat #include <fcntl.h> #include <sys/stat.h> #include <string.h> /* Create a symlink, but reject trailing slash. */ int rpl_symlinkat (char const *contents, int fd, char const *name) { size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (fstatat (fd, name, &st, AT_SYMLINK_NOFOLLOW) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } return symlinkat (contents, fd, name); } #elif !HAVE_SYMLINK /* Mingw lacks symlink, and it is more efficient to provide a trivial wrapper than to go through at-func.c to call rpl_symlink. */ int symlinkat (_GL_UNUSED char const *path1, _GL_UNUSED int fd, _GL_UNUSED char const *path2) { errno = ENOSYS; return -1; } #else /* HAVE_SYMLINK */ /* Our openat helper functions expect the directory parameter first, not second. These shims make life easier. */ /* Like symlink, but with arguments reversed. */ static int symlink_reversed (char const *file, char const *contents) { return symlink (contents, file); } /* Like symlinkat, but with arguments reversed. */ static int symlinkat_reversed (int fd, char const *file, char const *contents); # define AT_FUNC_NAME symlinkat_reversed # define AT_FUNC_F1 symlink_reversed # define AT_FUNC_POST_FILE_PARAM_DECLS , char const *contents # define AT_FUNC_POST_FILE_ARGS , contents # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS /* Create a symlink FILE, in the directory open on descriptor FD, holding CONTENTS. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then symlink/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ int symlinkat (char const *contents, int fd, char const *file) { return symlinkat_reversed (fd, file, contents); } #endif /* HAVE_SYMLINK */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys-limits.h������������������������������������������������������������0000664�0000000�0000000�00000003227�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System call limits Copyright 2018-2021 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/>. */ #ifndef _GL_SYS_LIMITS_H #define _GL_SYS_LIMITS_H #include <limits.h> /* Maximum number of bytes to read or write in a single system call. This can be useful for system calls like sendfile on GNU/Linux, which do not handle more than MAX_RW_COUNT bytes correctly. The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20, where the 20 comes from the Hexagon port with 1 MiB pages; use that as an approximation, as the exact value may not be available to us. Using this also works around a serious Linux bug before 2.6.16; see <https://bugzilla.redhat.com/show_bug.cgi?id=612839>. Using this also works around a Tru64 5.1 bug, where attempting to read INT_MAX bytes fails with errno == EINVAL. See <https://lists.gnu.org/r/bug-gnu-utils/2002-04/msg00010.html>. Using this is likely to work around similar bugs in other operating systems. */ enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_file.in.h�����������������������������������������������������������0000664�0000000�0000000�00000003664�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/file.h. Copyright (C) 2007-2021 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 Richard W.M. Jones. */ #ifndef _@GUARD_PREFIX@_SYS_FILE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_FILE_H@ # @INCLUDE_NEXT@ @NEXT_SYS_FILE_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_FILE_H #define _@GUARD_PREFIX@_SYS_FILE_H #ifndef LOCK_SH /* Operations for the 'flock' call (same as Linux kernel constants). */ # define LOCK_SH 1 /* Shared lock. */ # define LOCK_EX 2 /* Exclusive lock. */ # define LOCK_UN 8 /* Unlock. */ /* Can be OR'd in to one of the above. */ # define LOCK_NB 4 /* Don't block when locking. */ #endif /* The definition of _GL_WARN_ON_USE is copied here. */ #if @GNULIB_FLOCK@ /* Apply or remove advisory locks on an open file. Return 0 if successful, otherwise -1 and errno set. */ # if !@HAVE_FLOCK@ extern int flock (int fd, int operation); # endif #elif defined GNULIB_POSIXCHECK # undef flock # if HAVE_RAW_DECL_FLOCK _GL_WARN_ON_USE (flock, "flock is unportable - " "use gnulib module flock for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_FILE_H */ #endif /* _@GUARD_PREFIX@_SYS_FILE_H */ ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_ioctl.in.h����������������������������������������������������������0000664�0000000�0000000�00000005054�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <sys/ioctl.h>. Copyright (C) 2008-2021 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/>. */ #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_IOCTL_H@ # @INCLUDE_NEXT@ @NEXT_SYS_IOCTL_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #define _@GUARD_PREFIX@_SYS_IOCTL_H /* 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>. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <unistd.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_IOCTL@ # if @REPLACE_IOCTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ioctl # define ioctl rpl_ioctl # endif _GL_FUNCDECL_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); _GL_CXXALIAS_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # else # if @SYS_IOCTL_H_HAVE_WINSOCK2_H@ || 1 _GL_FUNCDECL_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif _GL_CXXALIAS_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif _GL_CXXALIASWARN (ioctl); #elif @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef ioctl # define ioctl ioctl_used_without_requesting_gnulib_module_ioctl #elif defined GNULIB_POSIXCHECK # undef ioctl # if HAVE_RAW_DECL_IOCTL _GL_WARN_ON_USE (ioctl, "ioctl does not portably work on sockets - " "use gnulib module ioctl for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_random.in.h���������������������������������������������������������0000664�0000000�0000000�00000005707�14110572173�0020012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/random.h>. Copyright (C) 2020-2021 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/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_RANDOM_H #if @HAVE_SYS_RANDOM_H@ /* On uClibc, <sys/random.h> assumes prior inclusion of <stddef.h>. */ # if defined __UCLIBC__ # include <stddef.h> # endif /* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>. On Max OS X 10.13, <sys/random.h> assumes prior inclusion of a file that includes <Availability.h>, such as <stdlib.h> or <unistd.h>. */ # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # include <sys/types.h> # include <stdlib.h> # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_RANDOM_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_RANDOM_H #define _@GUARD_PREFIX@_SYS_RANDOM_H #include <sys/types.h> /* Define the GRND_* constants. */ #ifndef GRND_NONBLOCK # define GRND_NONBLOCK 1 # define GRND_RANDOM 2 #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. */ /* Declare overridden functions. */ #if @GNULIB_GETRANDOM@ /* Fill a buffer with random bytes. */ # if @REPLACE_GETRANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getrandom # define getrandom rpl_getrandom # endif _GL_FUNCDECL_RPL (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags)); # else # if !@HAVE_GETRANDOM@ _GL_FUNCDECL_SYS (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags)); # endif _GL_CXXALIASWARN (getrandom); #elif defined GNULIB_POSIXCHECK # undef getrandom # if HAVE_RAW_DECL_GETRANDOM _GL_WARN_ON_USE (getrandom, "getrandom is unportable - " "use gnulib module getrandom for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ #endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ ���������������������������������������������������������gnulib-20210822~d383792/lib/sys_resource.in.h�������������������������������������������������������0000664�0000000�0000000�00000006161�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/resource.h>. Copyright (C) 2012-2021 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/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_RESOURCE_H #if @HAVE_SYS_RESOURCE_H@ /* On FreeBSD 5.0, <sys/resource.h> assumes prior inclusion of <sys/types.h> and <sys/time.h>. */ # include <sys/types.h> # include <sys/time.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_RESOURCE_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_RESOURCE_H #define _@GUARD_PREFIX@_SYS_RESOURCE_H #if !@HAVE_SYS_RESOURCE_H@ /* A platform that lacks <sys/resource.h>. */ /* Get 'struct timeval'. */ # include <sys/time.h> /* Define the RUSAGE_* constants. */ # define RUSAGE_SELF 0 # define RUSAGE_CHILDREN -1 # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_rusage /* All known platforms that lack <sys/resource.h> also lack any declaration of struct rusage in any other header. */ struct rusage { struct timeval ru_utime; /* CPU time used in user mode */ struct timeval ru_stime; /* CPU time used in system mode (kernel) */ long ru_maxrss; long ru_ixrss; long ru_idrss; long ru_isrss; long ru_minflt; long ru_majflt; long ru_nswap; long ru_inblock; long ru_oublock; long ru_msgsnd; long ru_msgrcv; long ru_nsignals; long ru_nvcsw; long ru_nivcsw; }; # define GNULIB_defined_struct_rusage 1 # endif # ifdef __cplusplus } # endif #else # ifdef __VMS /* OpenVMS */ /* Define the RUSAGE_* constants. */ # ifndef RUSAGE_SELF # define RUSAGE_SELF 0 # endif # ifndef RUSAGE_CHILDREN # define RUSAGE_CHILDREN -1 # 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. */ /* Declare overridden functions. */ #if @GNULIB_GETRUSAGE@ # if !@HAVE_GETRUSAGE@ _GL_FUNCDECL_SYS (getrusage, int, (int who, struct rusage *usage_p) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (getrusage, int, (int who, struct rusage *usage_p)); _GL_CXXALIASWARN (getrusage); #elif defined GNULIB_POSIXCHECK # undef getrusage # if HAVE_RAW_DECL_GETRUSAGE _GL_WARN_ON_USE (getrusage, "getrusage is unportable - " "use gnulib module getrusage for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_RESOURCE_H */ #endif /* _@GUARD_PREFIX@_SYS_RESOURCE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_select.in.h���������������������������������������������������������0000664�0000000�0000000�00000030604�14110572173�0020003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/select.h>. Copyright (C) 2007-2021 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/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ /* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h> both include <sys/select.h>. On Cygwin, <sys/time.h> includes <sys/select.h>. Simply delegate to the system's header in this case. */ #if (@HAVE_SYS_SELECT_H@ \ && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H \ && ((defined __osf__ && defined _SYS_TYPES_H_ \ && defined _OSF_SOURCE) \ || (defined __sun && defined _SYS_TYPES_H \ && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #elif (@HAVE_SYS_SELECT_H@ \ && (defined _CYGWIN_SYS_TIME_H \ || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H \ && ((defined __osf__ && defined _SYS_TIME_H_ \ && defined _OSF_SOURCE) \ || (defined __sun && defined _SYS_TIME_H \ && (! (defined _XOPEN_SOURCE \ || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On IRIX 6.5, <sys/timespec.h> includes <sys/types.h>, which includes <sys/bsd_types.h>, which includes <sys/select.h>. At this point we cannot include <signal.h>, because that includes <internal/signal_core.h>, which gives a syntax error because <sys/timespec.h> has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On OpenBSD 5.0, <pthread.h> includes <sys/types.h>, which includes <sys/select.h>. At this point we cannot include <signal.h>, because that includes gnulib's pthread.h override, which gives a syntax error because /usr/include/pthread.h has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER) # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #else #ifndef _@GUARD_PREFIX@_SYS_SELECT_H /* 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. */ #include <sys/types.h> #if @HAVE_SYS_SELECT_H@ /* On OSF/1 4.0, <sys/select.h> provides only a forward declaration of 'struct timeval', and no definition of this type. Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() in <sys/time.h>. But avoid namespace pollution on glibc systems and "unknown type name" problems on Cygwin. */ # if !(defined __GLIBC__ || defined __CYGWIN__) # include <sys/time.h> # endif /* On AIX 7 and Solaris 10, <sys/select.h> provides an FD_ZERO implementation that relies on memset(), but without including <string.h>. But in any case avoid namespace pollution on glibc systems. */ # if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \ && ! defined __GLIBC__ # include <string.h> # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #endif /* Get definition of 'sigset_t'. But avoid namespace pollution on glibc systems and "unknown type name" problems on Cygwin. On OS/2 kLIBC, sigset_t is defined in <sys/select.h>, too. In addition, if <sys/param.h> is included, <types.h> -> <sys/types.h> -> <sys/select.h> are included. Then <signal.h> -> <pthread.h> are included by GNULIB. By the way, <pthread.h> requires PAGE_SIZE defined in <sys/param.h>. However, <sys/param.h> has not been processed, yet. As a result, 'PAGE_SIZE' undeclared error occurs in <pthread.h>. Do this after the include_next (for the sake of OpenBSD 5.0) but before the split double-inclusion guard (for the sake of Solaris). */ #if !((defined __GLIBC__ || defined __CYGWIN__ || defined __KLIBC__) \ && !defined __UCLIBC__) # include <signal.h> #endif #ifndef _@GUARD_PREFIX@_SYS_SELECT_H #define _@GUARD_PREFIX@_SYS_SELECT_H #if !@HAVE_SYS_SELECT_H@ /* A platform that lacks <sys/select.h>. */ /* Get the 'struct timeval' and 'fd_set' types and the FD_* macros on most platforms. */ # include <sys/time.h> /* On HP-UX 11, <sys/time.h> provides an FD_ZERO implementation that relies on memset(), but without including <string.h>. */ # if defined __hpux # include <string.h> # endif /* On native Windows platforms: Get the 'fd_set' type. Get the close() declaration before we override it. */ # if @HAVE_WINSOCK2_H@ # if !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H # endif # include <io.h> # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Fix some definitions from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ static int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # elif !defined __clang__ _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif #endif #if @GNULIB_PSELECT@ # if @REPLACE_PSELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pselect # define pselect rpl_pselect # endif _GL_FUNCDECL_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); _GL_CXXALIAS_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # else # if !@HAVE_PSELECT@ _GL_FUNCDECL_SYS (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif _GL_CXXALIAS_SYS (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif _GL_CXXALIASWARN (pselect); #elif defined GNULIB_POSIXCHECK # undef pselect # if HAVE_RAW_DECL_PSELECT _GL_WARN_ON_USE (pselect, "pselect is not portable - " "use gnulib module pselect for portability"); # endif #endif #if @GNULIB_SELECT@ # if @REPLACE_SELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select rpl_select # endif _GL_FUNCDECL_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timeval *restrict)); _GL_CXXALIAS_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, timeval *restrict)); # else _GL_CXXALIAS_SYS (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, timeval *restrict)); # endif _GL_CXXALIASWARN (select); #elif @HAVE_WINSOCK2_H@ # undef select # define select select_used_without_requesting_gnulib_module_select #elif defined GNULIB_POSIXCHECK # undef select # if HAVE_RAW_DECL_SELECT _GL_WARN_ON_USE (select, "select is not always POSIX compliant - " "use gnulib module select for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* OSF/1 */ ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_socket.c������������������������������������������������������������0000664�0000000�0000000�00000001555�14110572173�0017405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <sys/socket.h>. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE #include "sys/socket.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_socket.in.h���������������������������������������������������������0000664�0000000�0000000�00000057572�14110572173�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. Copyright (C) 2005-2021 Free Software Foundation, Inc. Written by Simon Josefsson. 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/>. */ /* This file is supposed to be used on platforms that lack <sys/socket.h>, on platforms where <sys/socket.h> cannot be included standalone, and on platforms where <sys/socket.h> does not provide all necessary definitions. It is intended to provide definitions and prototypes needed by an application. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* Special invocation convention: - On Cygwin 1.5.x we have a sequence of nested includes <sys/socket.h> -> <cygwin/socket.h> -> <asm/socket.h> -> <cygwin/if.h>, and the latter includes <sys/socket.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #if @HAVE_SYS_SOCKET_H@ # define _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* On many platforms, <sys/socket.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* On FreeBSD 6.4, <sys/socket.h> defines some macros that assume that NULL is defined. */ # include <stddef.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ # undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H #endif #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #define _@GUARD_PREFIX@_SYS_SOCKET_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_SYS_SOCKET_INLINE # define _GL_SYS_SOCKET_INLINE _GL_INLINE #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. */ #if !@HAVE_SA_FAMILY_T@ # if !GNULIB_defined_sa_family_t /* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ # if !defined __KLIBC__ || defined TCPV40HDRS typedef unsigned short sa_family_t; # else typedef unsigned char sa_family_t; # endif # define GNULIB_defined_sa_family_t 1 # endif #endif #if @HAVE_STRUCT_SOCKADDR_STORAGE@ /* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ # if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ # ifndef ss_family # define ss_family __ss_family # endif # endif #else # include <stdalign.h> /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ # define __ss_aligntype unsigned long int # define _SS_SIZE 256 # define _SS_PADSIZE \ (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ ? sizeof (sa_family_t) \ : alignof (__ss_aligntype)) \ + sizeof (__ss_aligntype))) # if !GNULIB_defined_struct_sockaddr_storage struct sockaddr_storage { sa_family_t ss_family; /* Address family, etc. */ __ss_aligntype __ss_align; /* Force desired alignment. */ char __ss_padding[_SS_PADSIZE]; }; # define GNULIB_defined_struct_sockaddr_storage 1 # endif #endif /* Get struct iovec. */ /* But avoid namespace pollution on glibc systems. */ #if ! defined __GLIBC__ # include <sys/uio.h> #endif #if @HAVE_SYS_SOCKET_H@ /* A platform that has <sys/socket.h>. */ /* For shutdown(). */ # if !defined SHUT_RD # define SHUT_RD 0 # endif # if !defined SHUT_WR # define SHUT_WR 1 # endif # if !defined SHUT_RDWR # define SHUT_RDWR 2 # endif # ifdef __VMS /* OpenVMS */ # ifndef CMSG_SPACE # define CMSG_SPACE(length) _CMSG_SPACE(length) # endif # ifndef CMSG_LEN # define CMSG_LEN(length) _CMSG_LEN(length) # endif # endif #else # ifdef __CYGWIN__ # error "Cygwin does have a sys/socket.h, doesn't it?!?" # endif /* A platform that lacks <sys/socket.h>. Currently only MinGW is supported. See the gnulib manual regarding Windows sockets. MinGW has the header files winsock2.h and ws2tcpip.h that declare the sys/socket.h definitions we need. Note that you can influence which definitions you get by setting the WINVER symbol before including these two files. For example, getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that symbol is set indirectly through WINVER). You can set this by adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your code may not run on older Windows releases then. My Windows 2000 box was not able to run the code, for example. The situation is slightly confusing because <https://docs.microsoft.com/en-us/windows/desktop/api/ws2tcpip/nf-ws2tcpip-getaddrinfo> suggests that getaddrinfo should be available on all Windows releases. */ # if @HAVE_WINSOCK2_H@ # include <winsock2.h> # endif # if @HAVE_WS2TCPIP_H@ # include <ws2tcpip.h> # endif /* For shutdown(). */ # if !defined SHUT_RD && defined SD_RECEIVE # define SHUT_RD SD_RECEIVE # endif # if !defined SHUT_WR && defined SD_SEND # define SHUT_WR SD_SEND # endif # if !defined SHUT_RDWR && defined SD_BOTH # define SHUT_RDWR SD_BOTH # endif # if @HAVE_WINSOCK2_H@ /* Include headers needed by the emulation code. */ # include <sys/types.h> # include <io.h> /* If these headers don't define socklen_t, <config.h> does. */ # endif /* Rudimentary 'struct msghdr'; this works as long as you don't try to access msg_control or msg_controllen. */ struct msghdr { void *msg_name; socklen_t msg_namelen; struct iovec *msg_iov; int msg_iovlen; int msg_flags; }; #endif /* Ensure SO_REUSEPORT is defined. */ /* For the subtle differences between SO_REUSEPORT and SO_REUSEADDR, see https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t and https://lwn.net/Articles/542629/ */ #ifndef SO_REUSEPORT # define SO_REUSEPORT SO_REUSEADDR #endif /* Fix some definitions from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ _GL_SYS_SOCKET_INLINE int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* Wrap everything else to use libc file descriptors for sockets. */ #if @GNULIB_SOCKET@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket rpl_socket # endif _GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol)); _GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol)); # else _GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol)); # endif _GL_CXXALIASWARN (socket); #elif @HAVE_WINSOCK2_H@ # undef socket # define socket socket_used_without_requesting_gnulib_module_socket #elif defined GNULIB_POSIXCHECK # undef socket # if HAVE_RAW_DECL_SOCKET _GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - " "use gnulib module socket for portability"); # endif #endif #if @GNULIB_CONNECT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef connect # define connect rpl_connect # endif _GL_FUNCDECL_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (connect); #elif @HAVE_WINSOCK2_H@ # undef connect # define connect socket_used_without_requesting_gnulib_module_connect #elif defined GNULIB_POSIXCHECK # undef connect # if HAVE_RAW_DECL_CONNECT _GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - " "use gnulib module connect for portability"); # endif #endif #if @GNULIB_ACCEPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef accept # define accept rpl_accept # endif _GL_FUNCDECL_RPL (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); _GL_CXXALIAS_RPL (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (accept); #elif @HAVE_WINSOCK2_H@ # undef accept # define accept accept_used_without_requesting_gnulib_module_accept #elif defined GNULIB_POSIXCHECK # undef accept # if HAVE_RAW_DECL_ACCEPT _GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - " "use gnulib module accept for portability"); # endif #endif #if @GNULIB_BIND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef bind # define bind rpl_bind # endif _GL_FUNCDECL_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (bind); #elif @HAVE_WINSOCK2_H@ # undef bind # define bind bind_used_without_requesting_gnulib_module_bind #elif defined GNULIB_POSIXCHECK # undef bind # if HAVE_RAW_DECL_BIND _GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - " "use gnulib module bind for portability"); # endif #endif #if @GNULIB_GETPEERNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpeername # define getpeername rpl_getpeername # endif _GL_FUNCDECL_RPL (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (getpeername); #elif @HAVE_WINSOCK2_H@ # undef getpeername # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername #elif defined GNULIB_POSIXCHECK # undef getpeername # if HAVE_RAW_DECL_GETPEERNAME _GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - " "use gnulib module getpeername for portability"); # endif #endif #if @GNULIB_GETSOCKNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockname # define getsockname rpl_getsockname # endif _GL_FUNCDECL_RPL (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (getsockname); #elif @HAVE_WINSOCK2_H@ # undef getsockname # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname #elif defined GNULIB_POSIXCHECK # undef getsockname # if HAVE_RAW_DECL_GETSOCKNAME _GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - " "use gnulib module getsockname for portability"); # endif #endif #if @GNULIB_GETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockopt # define getsockopt rpl_getsockopt # endif _GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen) _GL_ARG_NONNULL ((4, 5))); _GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen)); # else /* Need to cast, because on Solaris 10 systems, the fifth parameter is void *optlen. */ _GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen)); # endif _GL_CXXALIASWARN (getsockopt); #elif @HAVE_WINSOCK2_H@ # undef getsockopt # define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt #elif defined GNULIB_POSIXCHECK # undef getsockopt # if HAVE_RAW_DECL_GETSOCKOPT _GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - " "use gnulib module getsockopt for portability"); # endif #endif #if @GNULIB_LISTEN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef listen # define listen rpl_listen # endif _GL_FUNCDECL_RPL (listen, int, (int fd, int backlog)); _GL_CXXALIAS_RPL (listen, int, (int fd, int backlog)); # else _GL_CXXALIAS_SYS (listen, int, (int fd, int backlog)); # endif _GL_CXXALIASWARN (listen); #elif @HAVE_WINSOCK2_H@ # undef listen # define listen listen_used_without_requesting_gnulib_module_listen #elif defined GNULIB_POSIXCHECK # undef listen # if HAVE_RAW_DECL_LISTEN _GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - " "use gnulib module listen for portability"); # endif #endif #if @GNULIB_RECV@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recv # define recv rpl_recv # endif _GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # else /* Need to cast, because on HP-UX 11.31 the return type may be int, depending on compiler options. */ _GL_CXXALIAS_SYS_CAST (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (recv); #elif @HAVE_WINSOCK2_H@ # undef recv # define recv recv_used_without_requesting_gnulib_module_recv #elif defined GNULIB_POSIXCHECK # undef recv # if HAVE_RAW_DECL_RECV _GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - " "use gnulib module recv for portability"); # endif #endif #if @GNULIB_SEND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef send # define send rpl_send # endif _GL_FUNCDECL_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # else /* Need to cast, because on HP-UX 11.31 the return type may be int, depending on compiler options. */ _GL_CXXALIAS_SYS_CAST (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (send); #elif @HAVE_WINSOCK2_H@ # undef send # define send send_used_without_requesting_gnulib_module_send #elif defined GNULIB_POSIXCHECK # undef send # if HAVE_RAW_DECL_SEND _GL_WARN_ON_USE (send, "send is not always POSIX compliant - " "use gnulib module send for portability"); # endif #endif #if @GNULIB_RECVFROM@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recvfrom # define recvfrom rpl_recvfrom # endif _GL_FUNCDECL_RPL (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen)); # else /* Need to cast, because on Solaris 10 systems, the sixth parameter is void *fromlen. */ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen)); # endif _GL_CXXALIASWARN (recvfrom); #elif @HAVE_WINSOCK2_H@ # undef recvfrom # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom #elif defined GNULIB_POSIXCHECK # undef recvfrom # if HAVE_RAW_DECL_RECVFROM _GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - " "use gnulib module recvfrom for portability"); # endif #endif #if @GNULIB_SENDTO@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sendto # define sendto rpl_sendto # endif _GL_FUNCDECL_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # else /* Need to cast, because on NonStop Kernel, the sixth parameter is size_t tolen. */ _GL_CXXALIAS_SYS_CAST (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # endif _GL_CXXALIASWARN (sendto); #elif @HAVE_WINSOCK2_H@ # undef sendto # define sendto sendto_used_without_requesting_gnulib_module_sendto #elif defined GNULIB_POSIXCHECK # undef sendto # if HAVE_RAW_DECL_SENDTO _GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - " "use gnulib module sendto for portability"); # endif #endif #if @GNULIB_SETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setsockopt # define setsockopt rpl_setsockopt # endif _GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # else /* Need to cast, because on NonStop Kernel, the fifth parameter is size_t optlen. */ _GL_CXXALIAS_SYS_CAST (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # endif _GL_CXXALIASWARN (setsockopt); #elif @HAVE_WINSOCK2_H@ # undef setsockopt # define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt #elif defined GNULIB_POSIXCHECK # undef setsockopt # if HAVE_RAW_DECL_SETSOCKOPT _GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - " "use gnulib module setsockopt for portability"); # endif #endif #if @GNULIB_SHUTDOWN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef shutdown # define shutdown rpl_shutdown # endif _GL_FUNCDECL_RPL (shutdown, int, (int fd, int how)); _GL_CXXALIAS_RPL (shutdown, int, (int fd, int how)); # else _GL_CXXALIAS_SYS (shutdown, int, (int fd, int how)); # endif _GL_CXXALIASWARN (shutdown); #elif @HAVE_WINSOCK2_H@ # undef shutdown # define shutdown shutdown_used_without_requesting_gnulib_module_shutdown #elif defined GNULIB_POSIXCHECK # undef shutdown # if HAVE_RAW_DECL_SHUTDOWN _GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " "use gnulib module shutdown for portability"); # endif #endif #if @GNULIB_ACCEPT4@ /* Accept a connection on a socket, with specific opening flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */ # if @HAVE_ACCEPT4@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define accept4 rpl_accept4 # endif _GL_FUNCDECL_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # else _GL_FUNCDECL_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # endif _GL_CXXALIASWARN (accept4); #elif defined GNULIB_POSIXCHECK # undef accept4 # if HAVE_RAW_DECL_ACCEPT4 _GL_WARN_ON_USE (accept4, "accept4 is unportable - " "use gnulib module accept4 for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_stat.in.h�����������������������������������������������������������0000664�0000000�0000000�00000062653�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/stat.h header file. Copyright (C) 2005-2021 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 Eric Blake, Paul Eggert, and Jim Meyering. */ /* This file is supposed to be used on platforms where <sys/stat.h> is incomplete. It is intended to provide definitions and prototypes needed by an application. Start with what the system provides. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_sys_stat_h /* Special invocation convention. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_STAT_H /* Get nlink_t. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Get struct timespec. */ #include <time.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H /* 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>. */ #ifdef __KLIBC__ # include <unistd.h> #endif /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir in <io.h> and/or <direct.h>, not in <sys/stat.h>. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in <io.h>. */ #if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif /* Large File Support on native Windows. */ #if @WINDOWS_64_BIT_ST_SIZE@ # define stat _stati64 #endif /* Optionally, override 'struct stat' on native Windows. */ #if @GNULIB_OVERRIDES_STRUCT_STAT@ # undef stat # if @GNULIB_STAT@ # define stat rpl_stat # else /* Provoke a clear link error if stat() is used as a function and module 'stat' is not in use. */ # define stat stat_used_without_requesting_gnulib_module_stat # endif # if !GNULIB_defined_struct_stat struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; # if 0 uid_t st_uid; # else /* uid_t is not defined by default on native Windows. */ short st_uid; # endif # if 0 gid_t st_gid; # else /* gid_t is not defined by default on native Windows. */ short st_gid; # endif dev_t st_rdev; off_t st_size; # if 0 blksize_t st_blksize; blkcnt_t st_blocks; # endif # if @WINDOWS_STAT_TIMESPEC@ struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; # else time_t st_atime; time_t st_mtime; time_t st_ctime; # endif }; # if @WINDOWS_STAT_TIMESPEC@ # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_TIMESPEC 1 # endif # define GNULIB_defined_struct_stat 1 # endif /* Other possible values of st_mode. */ # if 0 # define _S_IFBLK 0x6000 # endif # if 0 # define _S_IFLNK 0xA000 # endif # if 0 # define _S_IFSOCK 0xC000 # endif #endif #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO # endif #endif #ifndef S_IFMT # define S_IFMT 0170000 #endif #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK # undef S_ISNAM # undef S_ISMPB # undef S_ISMPC # undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) 0 # endif #endif #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) 0 # endif #endif #ifndef S_ISDIR # ifdef S_IFDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # else # define S_ISDIR(m) 0 # endif #endif #ifndef S_ISDOOR /* Solaris 2.5 and up */ # define S_ISDOOR(m) 0 #endif #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif #ifndef S_ISLNK # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # else # define S_ISLNK(m) 0 # endif #endif #ifndef S_ISMPB /* V7 */ # ifdef S_IFMPB # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) # else # define S_ISMPB(m) 0 # define S_ISMPC(m) 0 # endif #endif #ifndef S_ISMPX /* AIX */ # define S_ISMPX(m) 0 #endif #ifndef S_ISNAM /* Xenix */ # ifdef S_IFNAM # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) # else # define S_ISNAM(m) 0 # endif #endif #ifndef S_ISNWK /* HP/UX */ # ifdef S_IFNWK # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) # else # define S_ISNWK(m) 0 # endif #endif #ifndef S_ISPORT /* Solaris 10 and up */ # define S_ISPORT(m) 0 #endif #ifndef S_ISREG # ifdef S_IFREG # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # else # define S_ISREG(m) 0 # endif #endif #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif #ifndef S_TYPEISMQ # define S_TYPEISMQ(p) 0 #endif #ifndef S_TYPEISTMO # define S_TYPEISTMO(p) 0 #endif #ifndef S_TYPEISSEM # ifdef S_INSEM # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) # else # define S_TYPEISSEM(p) 0 # endif #endif #ifndef S_TYPEISSHM # ifdef S_INSHD # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) # else # define S_TYPEISSHM(p) 0 # endif #endif /* high performance ("contiguous data") */ #ifndef S_ISCTG # define S_ISCTG(p) 0 #endif /* Cray DMF (data migration facility): off line, with data */ #ifndef S_ISOFD # define S_ISOFD(p) 0 #endif /* Cray DMF (data migration facility): off line, with no data */ #ifndef S_ISOFL # define S_ISOFL(p) 0 #endif /* 4.4BSD whiteout */ #ifndef S_ISWHT # define S_ISWHT(m) 0 #endif /* If any of the following are undefined, define them to their de facto standard values. */ #if !S_ISUID # define S_ISUID 04000 #endif #if !S_ISGID # define S_ISGID 02000 #endif /* S_ISVTX is a common extension to POSIX. */ #ifndef S_ISVTX # define S_ISVTX 01000 #endif #if !S_IRUSR && S_IREAD # define S_IRUSR S_IREAD #endif #if !S_IRUSR # define S_IRUSR 00400 #endif #if !S_IRGRP # define S_IRGRP (S_IRUSR >> 3) #endif #if !S_IROTH # define S_IROTH (S_IRUSR >> 6) #endif #if !S_IWUSR && S_IWRITE # define S_IWUSR S_IWRITE #endif #if !S_IWUSR # define S_IWUSR 00200 #endif #if !S_IWGRP # define S_IWGRP (S_IWUSR >> 3) #endif #if !S_IWOTH # define S_IWOTH (S_IWUSR >> 6) #endif #if !S_IXUSR && S_IEXEC # define S_IXUSR S_IEXEC #endif #if !S_IXUSR # define S_IXUSR 00100 #endif #if !S_IXGRP # define S_IXGRP (S_IXUSR >> 3) #endif #if !S_IXOTH # define S_IXOTH (S_IXUSR >> 6) #endif #if !S_IRWXU # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) #endif #if !S_IRWXG # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) #endif #if !S_IRWXO # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif #ifndef S_IRWXUGO # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif /* Macros for futimens and utimensat. */ #ifndef UTIME_NOW # define UTIME_NOW (-1) # define UTIME_OMIT (-2) #endif #if @GNULIB_MDA_CHMOD@ /* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chmod always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #endif #if @GNULIB_FCHMODAT@ # if @REPLACE_FCHMODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchmodat # define fchmodat rpl_fchmodat # endif _GL_FUNCDECL_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # else # if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # endif _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat # if HAVE_RAW_DECL_FCHMODAT _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FSTAT@ # if @REPLACE_FSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstat # define fstat rpl_fstat # endif _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); # else _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstat # define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 #elif defined GNULIB_POSIXCHECK # undef fstat # if HAVE_RAW_DECL_FSTAT _GL_WARN_ON_USE (fstat, "fstat has portability problems - " "use gnulib module fstat for portability"); # endif #endif #if @GNULIB_FSTATAT@ # if @REPLACE_FSTATAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstatat # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # endif _GL_CXXALIASWARN (fstatat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstatat # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FUTIMENS@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens implementation relies on futimesat, which on Solaris 10 makes an invocation to futimens that is meant to invoke the libc's futimens(), not gnulib's futimens(). */ # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef futimens # define futimens rpl_futimens # endif _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); # else # if !@HAVE_FUTIMENS@ _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@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK # undef futimens # if HAVE_RAW_DECL_FUTIMENS _GL_WARN_ON_USE (futimens, "futimens is not portable - " "use gnulib module futimens for portability"); # endif #endif #if @GNULIB_GETUMASK@ # if !@HAVE_GETUMASK@ _GL_FUNCDECL_SYS (getumask, mode_t, (void)); # endif _GL_CXXALIAS_SYS (getumask, mode_t, (void)); # if @HAVE_GETUMASK@ _GL_CXXALIASWARN (getumask); # endif #elif defined GNULIB_POSIXCHECK # undef getumask # if HAVE_RAW_DECL_GETUMASK _GL_WARN_ON_USE (getumask, "getumask is not portable - " "use gnulib module getumask for portability"); # endif #endif #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ || defined __hpux _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); _GL_CXXALIASWARN (lchmod); #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " "use gnulib module lchmod for portability"); # endif #endif #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *restrict name, struct stat *restrict buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *restrict name, struct stat *restrict buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef lstat # define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT _GL_WARN_ON_USE (lstat, "lstat is unportable - " "use gnulib module lstat for portability"); # endif #endif #if @GNULIB_MKDIR@ # if @REPLACE_MKDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included above. */ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #elif defined GNULIB_POSIXCHECK # undef mkdir # if HAVE_RAW_DECL_MKDIR _GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " "use gnulib module mkdir for portability"); # endif #elif @GNULIB_MDA_MKDIR@ /* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mkdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #endif #if @GNULIB_MKDIRAT@ # if !@HAVE_MKDIRAT@ _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkdirat); #elif defined GNULIB_POSIXCHECK # undef mkdirat # if HAVE_RAW_DECL_MKDIRAT _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_MKFIFO@ # if @REPLACE_MKFIFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifo # define mkfifo rpl_mkfifo # endif _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); # else # if !@HAVE_MKFIFO@ _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifo); #elif defined GNULIB_POSIXCHECK # undef mkfifo # if HAVE_RAW_DECL_MKFIFO _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " "use gnulib module mkfifo for portability"); # endif #endif #if @GNULIB_MKFIFOAT@ # if @REPLACE_MKFIFOAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifoat # define mkfifoat rpl_mkfifoat # endif _GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); # else # if !@HAVE_MKFIFOAT@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifoat); #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_MKNOD@ # if @REPLACE_MKNOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknod # define mknod rpl_mknod # endif _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNOD@ _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknod); #elif defined GNULIB_POSIXCHECK # undef mknod # if HAVE_RAW_DECL_MKNOD _GL_WARN_ON_USE (mknod, "mknod is not portable - " "use gnulib module mknod for portability"); # endif #endif #if @GNULIB_MKNODAT@ # if @REPLACE_MKNODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknodat # define mknodat rpl_mknodat # endif _GL_FUNCDECL_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNODAT@ _GL_FUNCDECL_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknodat); #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_STAT@ # if @REPLACE_STAT@ # if !@GNULIB_OVERRIDES_STRUCT_STAT@ /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ # if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # undef stat64 # define stat64(name, st) rpl_stat (name, st) # elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # if defined __MINGW32__ && defined _stati64 # ifndef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined _stati64 # ifdef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # else # undef _stati64 # define _stati64(name, st) rpl_stat (name, st) # endif # elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32. */ # undef _stat32 # define _stat32(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64i32. */ # undef _stat64i32 # define _stat64i32(name, st) rpl_stat (name, st) # endif # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ # undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2)); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ /* see above: #define stat stat_used_without_requesting_gnulib_module_stat */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT _GL_WARN_ON_USE (stat, "stat is unportable - " "use gnulib module stat for portability"); # endif #endif #if @GNULIB_MDA_UMASK@ /* On native Windows, map 'umask' to '_umask', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::umask always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef umask # define umask _umask # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); # else _GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); # endif _GL_CXXALIASWARN (umask); #endif #if @GNULIB_UTIMENSAT@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat implementation relies on futimesat, which on Solaris 10 makes an invocation to utimensat that is meant to invoke the libc's utimensat(), not gnulib's utimensat(). */ # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utimensat # define utimensat rpl_utimensat # endif _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # else # if !@HAVE_UTIMENSAT@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif # if @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK # undef utimensat # if HAVE_RAW_DECL_UTIMENSAT _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " "use gnulib module utimensat for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif �������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_time.in.h�����������������������������������������������������������0000664�0000000�0000000�00000017450�14110572173�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/time.h. Copyright (C) 2007-2021 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. */ #ifndef _@GUARD_PREFIX@_SYS_TIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* 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. Without this extra ifdef, the C++ gettimeofday declaration below would be a forward declaration in gnulib's nested <sys/time.h>. */ #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #else /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_TIME_H #define _@GUARD_PREFIX@_SYS_TIME_H #if ! @HAVE_SYS_TIME_H@ # include <time.h> #endif /* On native Windows with MSVC, get the 'struct timeval' type. Also, on native Windows with a 64-bit time_t, where we are overriding the 'struct timeval' type, get all declarations of system functions whose signature contains 'struct timeval'. */ #if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #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. */ #ifdef __cplusplus extern "C" { #endif #if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval # endif # if !GNULIB_defined_struct_timeval struct timeval { time_t tv_sec; long int tv_usec; }; # define GNULIB_defined_struct_timeval 1 # endif #endif #ifdef __cplusplus } #endif #if @GNULIB_GETTIMEOFDAY@ # if @REPLACE_GETTIMEOFDAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gettimeofday # define gettimeofday rpl_gettimeofday # endif _GL_FUNCDECL_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict)); # else # if !@HAVE_GETTIMEOFDAY@ _GL_FUNCDECL_SYS (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on glibc systems, by default, the second argument is struct timezone *. */ _GL_CXXALIAS_SYS_CAST (gettimeofday, int, (struct timeval *restrict, void *restrict)); # endif _GL_CXXALIASWARN (gettimeofday); # if defined __cplusplus && defined GNULIB_NAMESPACE namespace GNULIB_NAMESPACE { typedef ::timeval # undef timeval timeval; # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval typedef ::timeval timeval; # endif } # endif #elif defined GNULIB_POSIXCHECK # undef gettimeofday # if HAVE_RAW_DECL_GETTIMEOFDAY _GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " "use gnulib module gettimeofday for portability"); # endif #endif /* Hide some function declarations from <winsock2.h>. */ #if defined _MSC_VER && @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ #endif /* _CYGWIN_SYS_TIME_H */ #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_times.in.h����������������������������������������������������������0000664�0000000�0000000�00000004356�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a sys/times.h header file. Copyright (C) 2008-2021 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 Simon Josefsson <simon@josefsson.org>, 2008. */ /* This file is supposed to be used on platforms where <sys/times.h> is missing. */ #ifndef _@GUARD_PREFIX@_SYS_TIMES_H # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ # if @HAVE_SYS_TIMES_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIMES_H@ # endif # define _@GUARD_PREFIX@_SYS_TIMES_H /* Get clock_t. But avoid namespace pollution on glibc systems. */ # ifndef __GLIBC__ # include <time.h> # endif /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ # ifdef __cplusplus extern "C" { # endif # if !@HAVE_STRUCT_TMS@ # if !GNULIB_defined_struct_tms /* Structure describing CPU time used by a process and its children. */ struct tms { clock_t tms_utime; /* User CPU time. */ clock_t tms_stime; /* System CPU time. */ clock_t tms_cutime; /* User CPU time of dead children. */ clock_t tms_cstime; /* System CPU time of dead children. */ }; # define GNULIB_defined_struct_tms 1 # endif # endif # if @GNULIB_TIMES@ # if !@HAVE_TIMES@ extern clock_t times (struct tms *buffer) _GL_ARG_NONNULL ((1)); # endif # elif defined GNULIB_POSIXCHECK # undef times # if HAVE_RAW_DECL_TIMES _GL_WARN_ON_USE (times, "times is unportable - " "use gnulib module times for portability"); # endif # endif # ifdef __cplusplus } # endif #endif /* _@GUARD_PREFIX@_SYS_TIMES_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_types.in.h����������������������������������������������������������0000664�0000000�0000000�00000006171�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. Copyright (C) 2011-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in <stdint.h>. */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_uio.in.h������������������������������������������������������������0000664�0000000�0000000�00000003236�14110572173�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/uio.h>. Copyright (C) 2011-2021 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/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_UIO_H #if @HAVE_SYS_UIO_H@ /* On OpenBSD 4.4, <sys/uio.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_UIO_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_UIO_H #define _@GUARD_PREFIX@_SYS_UIO_H #if !@HAVE_SYS_UIO_H@ /* A platform that lacks <sys/uio.h>. */ /* Get 'size_t' and 'ssize_t'. */ # include <sys/types.h> # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_iovec /* All known platforms that lack <sys/uio.h> also lack any declaration of struct iovec in any other header. */ struct iovec { void *iov_base; size_t iov_len; }; # define GNULIB_defined_struct_iovec 1 # endif # ifdef __cplusplus } # endif #endif #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_utsname.in.h��������������������������������������������������������0000664�0000000�0000000�00000005655�14110572173�0020210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/utsname.h>. Copyright (C) 2009-2021 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/>. */ #ifndef _@GUARD_PREFIX@_SYS_UTSNAME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_SYS_UTSNAME_H@ /* Minix 3.1.8 has a bug: <stddef.h> must be included before <sys/utsname.h>. But avoid namespace pollution on glibc systems. */ # if defined __minix && !defined __GLIBC__ # include <stddef.h> # endif # @INCLUDE_NEXT@ @NEXT_SYS_UTSNAME_H@ #endif #define _@GUARD_PREFIX@_SYS_UTSNAME_H /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif #if !@HAVE_STRUCT_UTSNAME@ /* Length of the entries in 'struct utsname' is 256. */ # define _UTSNAME_LENGTH 256 # ifndef _UTSNAME_NODENAME_LENGTH # define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH # endif # ifndef _UTSNAME_SYSNAME_LENGTH # define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH # endif # ifndef _UTSNAME_RELEASE_LENGTH # define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH # endif # ifndef _UTSNAME_VERSION_LENGTH # define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH # endif # ifndef _UTSNAME_MACHINE_LENGTH # define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH # endif # if !GNULIB_defined_struct_utsname /* Structure describing the system and machine. */ struct utsname { /* Name of this node on the network. */ char nodename[_UTSNAME_NODENAME_LENGTH]; /* Name of the implementation of the operating system. */ char sysname[_UTSNAME_SYSNAME_LENGTH]; /* Current release level of this implementation. */ char release[_UTSNAME_RELEASE_LENGTH]; /* Current version level of this release. */ char version[_UTSNAME_VERSION_LENGTH]; /* Name of the hardware type the system is running on. */ char machine[_UTSNAME_MACHINE_LENGTH]; }; # define GNULIB_defined_struct_utsname 1 # endif #endif /* !@HAVE_STRUCT_UTSNAME@ */ #if @GNULIB_UNAME@ # if !@HAVE_UNAME@ extern int uname (struct utsname *buf) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef uname # if HAVE_RAW_DECL_UNAME _GL_WARN_ON_USE (uname, "uname is unportable - " "use gnulib module uname for portability"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_SYS_UTSNAME_H */ �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sys_wait.in.h�����������������������������������������������������������0000664�0000000�0000000�00000007602�14110572173�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <sys/wait.h>. Copyright (C) 2001-2003, 2005-2021 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/>. */ #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if !(defined _WIN32 && ! defined __CYGWIN__) # @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #define _@GUARD_PREFIX@_SYS_WAIT_H /* Get pid_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !(defined _WIN32 && ! defined __CYGWIN__) /* Unix API. */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid(). On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs have to use the abstract macros. */ /* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) is true. */ # ifndef WIFSIGNALED # define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) # endif # ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) # endif # ifndef WIFSTOPPED # define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) # endif /* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ # ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) # endif /* The exit status. Only to be accessed if WIFEXITED(x) is true. */ # ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) # endif /* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ # ifndef WSTOPSIG # define WSTOPSIG(x) (((x) >> 8) & 0x7f) # endif /* True if the process dumped core. Not standardized by POSIX. */ # ifndef WCOREDUMP # define WCOREDUMP(x) ((x) & 0x80) # endif #else /* Native Windows API. */ # include <signal.h> /* for SIGTERM */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). This value is simply an 'int', not composed of bit fields. */ /* When an unhandled fatal signal terminates a process, the exit code is 3. */ # define WIFSIGNALED(x) ((x) == 3) # define WIFEXITED(x) ((x) != 3) # define WIFSTOPPED(x) 0 /* The signal that terminated a process is not known posthum. */ # define WTERMSIG(x) SIGTERM # define WEXITSTATUS(x) (x) /* There are no stopping signals. */ # define WSTOPSIG(x) 0 /* There are no core dumps. */ # define WCOREDUMP(x) 0 #endif /* Declarations of functions. */ #if @GNULIB_WAITPID@ # if defined _WIN32 && ! defined __CYGWIN__ _GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); # endif /* Need to cast, because on Cygwin, the second parameter is __wait_status_ptr_t statusp. */ _GL_CXXALIAS_SYS_CAST (waitpid, pid_t, (pid_t pid, int *statusp, int options)); _GL_CXXALIASWARN (waitpid); #elif defined GNULIB_POSIXCHECK # undef waitpid # if HAVE_RAW_DECL_WAITPID _GL_WARN_ON_USE (waitpid, "waitpid is unportable - " "use gnulib module sys_wait for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/sysexits.in.h�����������������������������������������������������������0000664�0000000�0000000�00000003725�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exit() exit codes for some BSD system programs. Copyright (C) 2003, 2006-2021 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 Simon Josefsson based on sysexits(3) man page */ #ifndef _@GUARD_PREFIX@_SYSEXITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_SYSEXITS_H@ /* IRIX 6.5 has an <unistd.h> that defines a macro EX_OK with a nonzero value. Override it. See <https://lists.gnu.org/r/bug-gnulib/2007-03/msg00361.html> */ # ifdef __sgi # include <unistd.h> # undef EX_OK # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@ /* HP-UX 11 <sysexits.h> ends at EX_NOPERM. */ # ifndef EX_CONFIG # define EX_CONFIG 78 # endif #endif #ifndef _@GUARD_PREFIX@_SYSEXITS_H #define _@GUARD_PREFIX@_SYSEXITS_H #if !(@HAVE_SYSEXITS_H@ && defined EX_USAGE) # define EX_OK 0 /* same value as EXIT_SUCCESS */ # define EX_USAGE 64 # define EX_DATAERR 65 # define EX_NOINPUT 66 # define EX_NOUSER 67 # define EX_NOHOST 68 # define EX_UNAVAILABLE 69 # define EX_SOFTWARE 70 # define EX_OSERR 71 # define EX_OSFILE 72 # define EX_CANTCREAT 73 # define EX_IOERR 74 # define EX_TEMPFAIL 75 # define EX_PROTOCOL 76 # define EX_NOPERM 77 # define EX_CONFIG 78 #endif #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ �������������������������������������������gnulib-20210822~d383792/lib/system-quote.c����������������������������������������������������������0000664�0000000�0000000�00000020416�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quoting for a system command. Copyright (C) 2012-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2012. This 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> /* Specification. */ #include "system-quote.h" #include <stdbool.h> #include <stdlib.h> #include <string.h> #include "sh-quote.h" #include "xalloc.h" #if defined _WIN32 && ! defined __CYGWIN__ /* The native Windows CreateProcess() function interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" - '*', '?' characters may get expanded through wildcard expansion in the callee: By default, in the callee, the initialization code before main() takes the result of GetCommandLine(), wildcard-expands it, and passes it to main(). The exceptions to this rule are: - programs that inspect GetCommandLine() and ignore argv, - mingw programs that have a global variable 'int _CRT_glob = 0;', - Cygwin programs, when invoked from a Cygwin program. */ # define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" # define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" /* Copies the quoted string to p and returns the number of bytes needed. If p is non-NULL, there must be room for system_quote_length (string) bytes at p. */ static size_t windows_createprocess_quote (char *p, const char *string) { size_t len = strlen (string); bool quote_around = (len == 0 || strpbrk (string, SHELL_SPECIAL_CHARS) != NULL); size_t backslashes = 0; size_t i = 0; # define STORE(c) \ do \ { \ if (p != NULL) \ p[i] = (c); \ i++; \ } \ while (0) if (quote_around) STORE ('"'); for (; len > 0; string++, len--) { char c = *string; if (c == '"') { size_t j; for (j = backslashes + 1; j > 0; j--) STORE ('\\'); } STORE (c); if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { size_t j; for (j = backslashes; j > 0; j--) STORE ('\\'); STORE ('"'); } # undef STORE return i; } /* The native Windows cmd.exe command interpreter also interprets: - '\n', '\r' as a command terminator - no way to escape it, - '<', '>' as redirections, - '|' as pipe operator, - '%var%' as a reference to the environment variable VAR (uppercase), even inside quoted strings, - '&' '[' ']' '{' '}' '^' '=' ';' '!' '\'' '+' ',' '`' '~' for other purposes, according to <https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true> We quote a string like '%var%' by putting the '%' characters outside of double-quotes and the rest of the string inside double-quotes: %"var"%. This is guaranteed to not be a reference to an environment variable. */ # define CMD_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037!%&'*+,;<=>?[]^`{|}~" # define CMD_FORBIDDEN_CHARS "\n\r" /* Copies the quoted string to p and returns the number of bytes needed. If p is non-NULL, there must be room for system_quote_length (string) bytes at p. */ static size_t windows_cmd_quote (char *p, const char *string) { size_t len = strlen (string); bool quote_around = (len == 0 || strpbrk (string, CMD_SPECIAL_CHARS) != NULL); size_t backslashes = 0; size_t i = 0; # define STORE(c) \ do \ { \ if (p != NULL) \ p[i] = (c); \ i++; \ } \ while (0) if (quote_around) STORE ('"'); for (; len > 0; string++, len--) { char c = *string; if (c == '"') { size_t j; for (j = backslashes + 1; j > 0; j--) STORE ('\\'); } if (c == '%') { size_t j; for (j = backslashes; j > 0; j--) STORE ('\\'); STORE ('"'); } STORE (c); if (c == '%') STORE ('"'); if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { size_t j; for (j = backslashes; j > 0; j--) STORE ('\\'); STORE ('"'); } return i; } #endif size_t system_quote_length (enum system_command_interpreter interpreter, const char *string) { switch (interpreter) { #if !(defined _WIN32 && ! defined __CYGWIN__) case SCI_SYSTEM: #endif case SCI_POSIX_SH: return shell_quote_length (string); #if defined _WIN32 && ! defined __CYGWIN__ case SCI_WINDOWS_CREATEPROCESS: return windows_createprocess_quote (NULL, string); case SCI_SYSTEM: case SCI_WINDOWS_CMD: return windows_cmd_quote (NULL, string); #endif default: /* Invalid interpreter. */ abort (); } } char * system_quote_copy (char *p, enum system_command_interpreter interpreter, const char *string) { switch (interpreter) { #if !(defined _WIN32 && ! defined __CYGWIN__) case SCI_SYSTEM: #endif case SCI_POSIX_SH: return shell_quote_copy (p, string); #if defined _WIN32 && ! defined __CYGWIN__ case SCI_WINDOWS_CREATEPROCESS: p += windows_createprocess_quote (p, string); *p = '\0'; return p; case SCI_SYSTEM: case SCI_WINDOWS_CMD: p += windows_cmd_quote (p, string); *p = '\0'; return p; #endif default: /* Invalid interpreter. */ abort (); } } char * system_quote (enum system_command_interpreter interpreter, const char *string) { switch (interpreter) { #if !(defined _WIN32 && ! defined __CYGWIN__) case SCI_SYSTEM: #endif case SCI_POSIX_SH: return shell_quote (string); #if defined _WIN32 && ! defined __CYGWIN__ case SCI_WINDOWS_CREATEPROCESS: case SCI_SYSTEM: case SCI_WINDOWS_CMD: { size_t length = system_quote_length (interpreter, string); char *quoted = XNMALLOC (length, char); system_quote_copy (quoted, interpreter, string); return quoted; } #endif default: /* Invalid interpreter. */ abort (); } } char * system_quote_argv (enum system_command_interpreter interpreter, char * const *argv) { if (*argv != NULL) { char * const *argp; size_t length; char *command; char *p; length = 0; for (argp = argv; ; ) { length += system_quote_length (interpreter, *argp) + 1; argp++; if (*argp == NULL) break; } command = XNMALLOC (length, char); p = command; for (argp = argv; ; ) { p = system_quote_copy (p, interpreter, *argp); argp++; if (*argp == NULL) break; *p++ = ' '; } *p = '\0'; return command; } else return xstrdup (""); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/system-quote.h����������������������������������������������������������0000664�0000000�0000000�00000010007�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quoting for a system command. Copyright (C) 2001-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2012. This 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 _SYSTEM_QUOTE_H #define _SYSTEM_QUOTE_H /* When passing a command the system's command interpreter, we must quote the program name and arguments, since - Unix shells interpret characters like " ", "'", "<", ">", "$", '*', '?' etc. in a special way, - Windows CreateProcess() interprets characters like ' ', '\t', '\\', '"' etc. (but not '<' and '>') in a special way, - Windows cmd.exe also interprets characters like '<', '>', '&', '%', etc. in a special way. Note that it is impossible to pass arguments that contain newlines or carriage return characters to programs through cmd.exe. - Windows programs usually perform wildcard expansion when they receive arguments that contain unquoted '*', '?' characters. With this module, you can build a command that will invoke a program with specific strings as arguments. Note: If you want wildcard expansion to happen, you have to first do wildcard expansion through the 'glob' module, then quote the resulting strings through this module, and then invoke the system's command interpreter. Limitations: - When invoking native Windows programs on Windows Vista or newer, wildcard expansion will occur in the invoked program nevertheless. - On native Windows, for SCI_SYSTEM and SCI_WINDOWS_CMD, newlines and carriage return characters are not supported. Their undesired effect is to truncate the entire command line. */ #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Identifier for the kind of interpreter of the command. */ enum system_command_interpreter { /* The interpreter used by the system() and popen() functions. This is equivalent to SCI_POSIX_SH on Unix platforms and SCI_WINDOWS_CMD on native Windows platforms. */ SCI_SYSTEM = 0 /* The POSIX /bin/sh. */ , SCI_POSIX_SH = 1 #if defined _WIN32 && ! defined __CYGWIN__ /* The native Windows CreateProcess() function. */ , SCI_WINDOWS_CREATEPROCESS = 2 /* The native Windows cmd.exe interpreter. */ , SCI_WINDOWS_CMD = 3 #endif }; /* Returns the number of bytes needed for the quoted string. */ extern size_t system_quote_length (enum system_command_interpreter interpreter, const char *string); /* Copies the quoted string to p and returns the incremented p. There must be room for system_quote_length (string) + 1 bytes at p. */ extern char * system_quote_copy (char *restrict p, enum system_command_interpreter interpreter, const char *string); /* Returns the freshly allocated quoted string. */ extern char * system_quote (enum system_command_interpreter interpreter, const char *string) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Returns a freshly allocated string containing all argument strings, quoted, separated through spaces. */ extern char * system_quote_argv (enum system_command_interpreter interpreter, char * const *argv) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #ifdef __cplusplus } #endif #endif /* _SYSTEM_QUOTE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/t-idcache���������������������������������������������������������������0000775�0000000�0000000�00000002434�14110572173�0016617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Compare the two halves (user and group) of idcache.c. # Once xformed, they'd better be the same: pwd=`pwd` t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0 trap '(exit $?); exit $?' 1 2 13 15 srcdir=../.. framework_failure=0 mkdir -p $tmp || framework_failure=1 cd $tmp || framework_failure=1 if test $framework_failure = 1; then echo "$0: failure in testing framework" 1>&2 (exit 1); exit 1 fi # Extract user-oriented functions. perl -ne \ 'print if /^static struct.*user_alist/ .. /^static struct.*group_alist/' \ $srcdir/idcache.c | head -n -3 > u # Extract group-oriented functions. perl -ne 'print if /^static struct.*group_alist/ .. eof' $srcdir/idcache.c > g # Convert user-specific strings of "u" into corresponding group-specific strings subst=' s/user_/group_/g; s/\buser\b/group/g; s/USER/GROUP/g; s/\bu\b/g/g; s/passwd/group/g; s/pw_uid/gr_gid/g; s/pwnam/grnam/g; s/pwent/grent/g; s/getpw/getgr/g; s/pw_/gr_/g; s/UID/GID/g; s/uid/gid/g; s/getuser/getgroup/; s/login name/group name/; s/to be the/to belong to/; s/pwd fun/grp fun/; ' fail=0 # Ensure that the transformed "u" is the same as g. # Any differences here constitute an error. perl -pe "$subst" u | diff -u - g || fail=1 exit $fail ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tanf.c������������������������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0016142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tangent function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float tanf (float x) { return (float) tan ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tanhf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001556�14110572173�0016320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic tangent function. Copyright (C) 2011-2021 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/>. */ #include <config.h> /* Specification. */ #include <math.h> float tanhf (float x) { return (float) tanh ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tanl.c������������������������������������������������������������������0000664�0000000�0000000�00000016656�14110572173�0016165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* tan (tangent) function with 'long double' argument. Copyright (C) 2003-2021 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/>. */ /* s_tanl.c -- long double version of s_tan.c. * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. */ /* @(#)s_tan.c 5.1 93/09/24 */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #include <config.h> /* Specification. */ #include <math.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE long double tanl (long double x) { return tan (x); } #else /* Code based on glibc/sysdeps/ieee754/ldbl-128/s_tanl.c and glibc/sysdeps/ieee754/ldbl-128/k_tanl.c. */ /* tanl(x) * Return tangent function of x. * * kernel function: * __kernel_tanl ... tangent function on [-pi/4,pi/4] * __ieee754_rem_pio2l ... argument reduction routine * * Method. * Let S,C and T denote the sin, cos and tan respectively on * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 * in [-pi/4 , +pi/4], and let n = k mod 4. * We have * * n sin(x) cos(x) tan(x) * ---------------------------------------------------------- * 0 S C T * 1 C -S -1/T * 2 -S -C T * 3 -C S -1/T * ---------------------------------------------------------- * * Special cases: * Let trig be any of sin, cos, or tan. * trig(+-INF) is NaN, with signals; * trig(NaN) is that NaN; * * Accuracy: * TRIG(x) returns trig(x) nearly rounded */ # include "trigl.h" /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ /* Long double expansions contributed by Stephen L. Moshier <moshier@na-net.ornl.gov> */ /* __kernel_tanl( x, y, k ) * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 * Input x is assumed to be bounded by ~pi/4 in magnitude. * Input y is the tail of x. * Input k indicates whether tan (if k=1) or * -1/tan (if k= -1) is returned. * * Algorithm * 1. Since tan(-x) = -tan(x), we need only to consider positive x. * 2. if x < 2^-57, return x with inexact if x!=0. * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) * on [0,0.67433]. * * Note: tan(x+y) = tan(x) + tan'(x)*y * ~ tan(x) + (1+x*x)*y * Therefore, for better accuracy in computing tan(x+y), let * r = x^3 * R(x^2) * then * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) * * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ static const long double pio4hi = 7.8539816339744830961566084581987569936977E-1L, pio4lo = 2.1679525325309452561992610065108379921906E-35L, /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) 0 <= x <= 0.6743316650390625 Peak relative error 8.0e-36 */ TH = 3.333333333333333333333333333333333333333E-1L, T0 = -1.813014711743583437742363284336855889393E7L, T1 = 1.320767960008972224312740075083259247618E6L, T2 = -2.626775478255838182468651821863299023956E4L, T3 = 1.764573356488504935415411383687150199315E2L, T4 = -3.333267763822178690794678978979803526092E-1L, U0 = -1.359761033807687578306772463253710042010E8L, U1 = 6.494370630656893175666729313065113194784E7L, U2 = -4.180787672237927475505536849168729386782E6L, U3 = 8.031643765106170040139966622980914621521E4L, U4 = -5.323131271912475695157127875560667378597E2L; /* 1.000000000000000000000000000000000000000E0 */ static long double kernel_tanl (long double x, long double y, int iy) { long double z, r, v, w, s, u, u1; int invert = 0, sign; sign = 1; if (x < 0) { x = -x; y = -y; sign = -1; } if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* x < 2**-57 */ { if ((int) x == 0) { /* generate inexact */ if (iy == -1 && x == 0.0) return 1.0L / fabs (x); else return (iy == 1) ? x : -1.0L / x; } } if (x >= 0.6743316650390625) /* |x| >= 0.6743316650390625 */ { invert = 1; z = pio4hi - x; w = pio4lo - y; x = z + w; y = 0.0; } z = x * x; r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); r = r / v; s = z * x; r = y + z * (s * r + y); r += TH * s; w = x + r; if (invert) { v = (long double) iy; w = (v - 2.0 * (x - (w * w / (w + v) - r))); if (sign < 0) w = -w; return w; } if (iy == 1) return w; else { /* if allow error up to 2 ulp, simply return -1.0/(x+r) here */ /* compute -1.0/(x+r) accurately */ u1 = (double) w; v = r - (u1 - x); z = -1.0 / w; u = (double) z; s = 1.0 + u * u1; return u + z * (s + u * v); } } long double tanl (long double x) { long double y[2], z = 0.0L; int n; /* tanl(NaN) is NaN */ if (isnanl (x)) return x; /* |x| ~< pi/4 */ if (x >= -0.7853981633974483096156608458198757210492 && x <= 0.7853981633974483096156608458198757210492) return kernel_tanl (x, z, 1); /* tanl(Inf) is NaN, tanl(0) is 0 */ else if (x + x == x) return x - x; /* NaN */ /* argument reduction needed */ else { n = ieee754_rem_pio2l (x, y); /* 1 -- n even, -1 -- n odd */ return kernel_tanl (y[0], y[1], 1 - ((n & 1) << 1)); } } #endif #if 0 int main (void) { printf ("%.16Lg\n", tanl (0.7853981633974483096156608458198757210492)); printf ("%.16Lg\n", tanl (-0.7853981633974483096156608458198757210492)); printf ("%.16Lg\n", tanl (0.7853981633974483096156608458198757210492 *3)); printf ("%.16Lg\n", tanl (-0.7853981633974483096156608458198757210492 *31)); printf ("%.16Lg\n", tanl (0.7853981633974483096156608458198757210492 / 2)); printf ("%.16Lg\n", tanl (0.7853981633974483096156608458198757210492 * 3/2)); printf ("%.16Lg\n", tanl (0.7853981633974483096156608458198757210492 * 5/2)); } #endif ����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tcgetsid.c��������������������������������������������������������������0000664�0000000�0000000�00000002323�14110572173�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the session ID of the controlling terminal of the current process. Copyright (C) 2010-2021 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/>. */ #include <config.h> #define USE_OLD_TTY /* needed on OpenBSD 4.5, so that TIOCGSID gets defined */ /* Specification. */ #include <termios.h> #include <errno.h> #include <sys/ioctl.h> pid_t tcgetsid (int fd) { #ifdef TIOCGSID /* Mac OS X, OpenBSD */ int sid; if (ioctl (fd, TIOCGSID, &sid) < 0) return -1; /* errno is set here */ return sid; #else /* FreeBSD, Cygwin, mingw */ errno = ENOSYS; return -1; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tempname.c��������������������������������������������������������������0000664�0000000�0000000�00000023274�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2021 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 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/>. */ #if !_LIBC # include <libc-config.h> # include "tempname.h" #endif #include <sys/types.h> #include <assert.h> #include <stdbool.h> #include <errno.h> #include <stdio.h> #ifndef P_tmpdir # define P_tmpdir "/tmp" #endif #ifndef TMP_MAX # define TMP_MAX 238328 #endif #ifndef __GT_FILE # define __GT_FILE 0 # define __GT_DIR 1 # define __GT_NOCREATE 2 #endif #if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \ || GT_NOCREATE != __GT_NOCREATE) # error report this to bug-gnulib@gnu.org #endif #include <stddef.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <stdalign.h> #include <stdint.h> #include <sys/random.h> #include <sys/stat.h> #include <time.h> #if _LIBC # define struct_stat64 struct stat64 # define __secure_getenv __libc_secure_getenv #else # define struct_stat64 struct stat # define __gen_tempname gen_tempname # define __mkdir mkdir # define __open open # define __lstat64(file, buf) lstat (file, buf) # define __stat64(file, buf) stat (file, buf) # define __getrandom getrandom # define __clock_gettime64 clock_gettime # define __timespec64 timespec #endif /* Use getrandom if it works, falling back on a 64-bit linear congruential generator that starts with Var's value mixed in with a clock's low-order bits if available. */ typedef uint_fast64_t random_value; #define RANDOM_VALUE_MAX UINT_FAST64_MAX #define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */ #define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62) static random_value random_bits (random_value var, bool use_getrandom) { random_value r; /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */ if (use_getrandom && __getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r) return r; #if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME) /* Add entropy if getrandom did not work. */ struct __timespec64 tv; __clock_gettime64 (CLOCK_MONOTONIC, &tv); var ^= tv.tv_nsec; #endif return 2862933555777941757 * var + 3037000493; } #if _LIBC /* Return nonzero if DIR is an existent directory. */ static int direxists (const char *dir) { struct_stat64 buf; return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode); } /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ int __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, int try_tmpdir) { const char *d; size_t dlen, plen; if (!pfx || !pfx[0]) { pfx = "file"; plen = 4; } else { plen = strlen (pfx); if (plen > 5) plen = 5; } if (try_tmpdir) { d = __secure_getenv ("TMPDIR"); if (d != NULL && direxists (d)) dir = d; else if (dir != NULL && direxists (dir)) /* nothing */ ; else dir = NULL; } if (dir == NULL) { if (direxists (P_tmpdir)) dir = P_tmpdir; else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) dir = "/tmp"; else { __set_errno (ENOENT); return -1; } } dlen = strlen (dir); while (dlen > 1 && dir[dlen - 1] == '/') dlen--; /* remove trailing slashes */ /* check we have room for "${dir}/${pfx}XXXXXX\0" */ if (tmpl_len < dlen + 1 + plen + 6 + 1) { __set_errno (EINVAL); return -1; } sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); return 0; } #endif /* _LIBC */ #if _LIBC static int try_tempname_len (char *, int, void *, int (*) (char *, void *), size_t); #endif static int try_file (char *tmpl, void *flags) { int *openflags = flags; return __open (tmpl, (*openflags & ~O_ACCMODE) | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); } static int try_dir (char *tmpl, _GL_UNUSED void *flags) { return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); } static int try_nocreate (char *tmpl, _GL_UNUSED void *flags) { struct_stat64 st; if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW) __set_errno (EEXIST); return errno == ENOENT ? 0 : -1; } /* These are the characters used in temporary file names. */ static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; /* Generate a temporary file name based on TMPL. TMPL must match the rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s, possibly with a suffix). The name constructed does not exist at the time of the call to this function. TMPL is overwritten with the result. KIND may be one of: __GT_NOCREATE: simply verify that the name does not exist at the time of the call. __GT_FILE: create the file using open(O_CREAT|O_EXCL) and return a read-write fd. The file is mode 0600. __GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ #ifdef _LIBC static #endif int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, size_t x_suffix_len) { static int (*const tryfunc[]) (char *, void *) = { [__GT_FILE] = try_file, [__GT_DIR] = try_dir, [__GT_NOCREATE] = try_nocreate }; return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind], x_suffix_len); } #ifdef _LIBC static #endif int try_tempname_len (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *), size_t x_suffix_len) { size_t len; char *XXXXXX; unsigned int count; int fd = -1; int save_errno = errno; /* A lower bound on the number of temporary files to attempt to generate. The maximum total number of temporary file names that can exist for a given template is 62**6. It should never be necessary to try all of these combinations. Instead if a reasonable number of names is tried (we define reasonable as 62**3) fail to give the system administrator the chance to remove the problems. This value requires that X_SUFFIX_LEN be at least 3. */ #define ATTEMPTS_MIN (62 * 62 * 62) /* The number of times to attempt to generate a temporary file. To conform to POSIX, this must be no smaller than TMP_MAX. */ #if ATTEMPTS_MIN < TMP_MAX unsigned int attempts = TMP_MAX; #else unsigned int attempts = ATTEMPTS_MIN; #endif /* A random variable. The initial value is used only the for fallback path on 'random_bits' on 'getrandom' failure. Its initial value tries to use some entropy from the ASLR and ignore possible bits from the stack alignment. */ random_value v = ((uintptr_t) &v) / alignof (max_align_t); /* How many random base-62 digits can currently be extracted from V. */ int vdigits = 0; /* Whether to consume entropy when acquiring random bits. On the first try it's worth the entropy cost with __GT_NOCREATE, which is inherently insecure and can use the entropy to make it a bit less secure. On the (rare) second and later attempts it might help against DoS attacks. */ bool use_getrandom = tryfunc == try_nocreate; /* Least unfair value for V. If V is less than this, V can generate BASE_62_DIGITS digits fairly. Otherwise it might be biased. */ random_value const unfair_min = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER; len = strlen (tmpl); if (len < x_suffix_len + suffixlen || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len) { __set_errno (EINVAL); return -1; } /* This is where the Xs start. */ XXXXXX = &tmpl[len - x_suffix_len - suffixlen]; for (count = 0; count < attempts; ++count) { for (size_t i = 0; i < x_suffix_len; i++) { if (vdigits == 0) { do { v = random_bits (v, use_getrandom); use_getrandom = true; } while (unfair_min <= v); vdigits = BASE_62_DIGITS; } XXXXXX[i] = letters[v % 62]; v /= 62; vdigits--; } fd = tryfunc (tmpl, args); if (fd >= 0) { __set_errno (save_errno); return fd; } else if (errno != EEXIST) return -1; } /* We got out of the loop because we ran out of combinations to try. */ __set_errno (EEXIST); return -1; } int __gen_tempname (char *tmpl, int suffixlen, int flags, int kind) { return gen_tempname_len (tmpl, suffixlen, flags, kind, 6); } #if !_LIBC int try_tempname (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *)) { return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tempname.h��������������������������������������������������������������0000664�0000000�0000000�00000005313�14110572173�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a temporary file or directory. Copyright (C) 2006, 2009-2021 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/>. */ /* header written by Eric Blake */ #ifndef GL_TEMPNAME_H # define GL_TEMPNAME_H # include <stdio.h> # ifdef __GT_FILE # define GT_FILE __GT_FILE # define GT_DIR __GT_DIR # define GT_NOCREATE __GT_NOCREATE # else # define GT_FILE 0 # define GT_DIR 1 # define GT_NOCREATE 2 # endif #ifdef __cplusplus extern "C" { #endif /* Generate a temporary file name based on TMPL. TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). The name constructed does not exist at the time of the call to gen_tempname. TMPL is overwritten with the result. KIND may be one of: GT_NOCREATE: simply verify that the name does not exist at the time of the call. GT_FILE: create a large file using open(O_CREAT|O_EXCL) and return a read-write fd. The file is mode 0600. GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind); /* Similar, except X_SUFFIX_LEN gives the number of Xs. */ extern int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, size_t x_suffix_len); /* Similar to gen_tempname, but TRYFUNC is called for each temporary name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME returns with this value. Otherwise, if errno is set to EEXIST, another name is tried, or else TRY_GEN_TEMPNAME returns -1. */ extern int try_tempname (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *)); /* Similar, except X_SUFFIX_LEN gives the number of Xs. */ extern int try_tempname_len (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *), size_t x_suffix_len); #ifdef __cplusplus } #endif #endif /* GL_TEMPNAME_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/term-style-control.c����������������������������������������������������0000664�0000000�0000000�00000076223�14110572173�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Terminal control for outputting styled text to a terminal. Copyright (C) 2006-2008, 2017, 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. This 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> /* Specification. */ #include "term-style-control.h" /* Set to 1 to get debugging output regarding signals. */ #define DEBUG_SIGNALS 0 #include <errno.h> #include <signal.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if DEBUG_SIGNALS # include <stdio.h> #endif #if HAVE_TCGETATTR # include <termios.h> # if !defined NOFLSH /* QNX */ # define NOFLSH 0 # endif #endif #if HAVE_TCGETATTR # include <sys/stat.h> #endif #include "fatal-signal.h" #include "sig-handler.h" #include "full-write.h" #include "same-inode.h" #include "xalloc.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* ============================ EINTR handling ============================ */ /* EINTR handling for tcgetattr(), tcsetattr(). These functions can return -1/EINTR even when we don't have any signal handlers set up, namely when we get interrupted via SIGSTOP. */ #if HAVE_TCGETATTR static inline int nonintr_tcgetattr (int fd, struct termios *tcp) { int retval; do retval = tcgetattr (fd, tcp); while (retval < 0 && errno == EINTR); return retval; } static inline int nonintr_tcsetattr (int fd, int flush_mode, const struct termios *tcp) { int retval; do retval = tcsetattr (fd, flush_mode, tcp); while (retval < 0 && errno == EINTR); return retval; } #endif /* ========================== Logging primitives ========================== */ /* We need logging, especially for the signal handling, because - Debugging through gdb is hardly possible, because gdb produces output by itself and interferes with the process states. - strace is buggy when it comes to SIGTSTP handling: By default, it sends the process a SIGSTOP signal instead of SIGTSTP. It supports an option '-D -I4' to mitigate this, though. Also, race conditions appear with different probability with and without strace. fprintf(stderr) is not possible within async-safe code, because fprintf() may invoke malloc(). */ #if DEBUG_SIGNALS /* Log a simple message. */ static _GL_ASYNC_SAFE void log_message (const char *message) { full_write (STDERR_FILENO, message, strlen (message)); } #else # define log_message(message) #endif #if HAVE_TCGETATTR || DEBUG_SIGNALS /* Async-safe implementation of sprintf (str, "%d", n). */ static _GL_ASYNC_SAFE void sprintf_integer (char *str, int x) { unsigned int y; char buf[20]; char *p; size_t n; if (x < 0) { *str++ = '-'; y = (unsigned int) (-1 - x) + 1; } else y = x; p = buf + sizeof (buf); do { *--p = '0' + (y % 10); y = y / 10; } while (y > 0); n = buf + sizeof (buf) - p; memcpy (str, p, n); str[n] = '\0'; } #endif #if HAVE_TCGETATTR /* Async-safe conversion of errno value to string. */ static _GL_ASYNC_SAFE void simple_errno_string (char *str, int errnum) { switch (errnum) { case EBADF: strcpy (str, "EBADF"); break; case EINTR: strcpy (str, "EINTR"); break; case EINVAL: strcpy (str, "EINVAL"); break; case EIO: strcpy (str, "EIO"); break; case ENOTTY: strcpy (str, "ENOTTY"); break; default: sprintf_integer (str, errnum); break; } } #endif #if DEBUG_SIGNALS /* Async-safe conversion of signal number to name. */ static _GL_ASYNC_SAFE void simple_signal_string (char *str, int sig) { switch (sig) { /* Fatal signals (see fatal-signal.c). */ #ifdef SIGINT case SIGINT: strcpy (str, "SIGINT"); break; #endif #ifdef SIGTERM case SIGTERM: strcpy (str, "SIGTERM"); break; #endif #ifdef SIGHUP case SIGHUP: strcpy (str, "SIGHUP"); break; #endif #ifdef SIGPIPE case SIGPIPE: strcpy (str, "SIGPIPE"); break; #endif #ifdef SIGXCPU case SIGXCPU: strcpy (str, "SIGXCPU"); break; #endif #ifdef SIGXFSZ case SIGXFSZ: strcpy (str, "SIGXFSZ"); break; #endif #ifdef SIGBREAK case SIGBREAK: strcpy (str, "SIGBREAK"); break; #endif /* Stopping signals. */ #ifdef SIGTSTP case SIGTSTP: strcpy (str, "SIGTSTP"); break; #endif #ifdef SIGTTIN case SIGTTIN: strcpy (str, "SIGTTIN"); break; #endif #ifdef SIGTTOU case SIGTTOU: strcpy (str, "SIGTTOU"); break; #endif /* Continuing signals. */ #ifdef SIGCONT case SIGCONT: strcpy (str, "SIGCONT"); break; #endif default: sprintf_integer (str, sig); break; } } /* Emit a message that a given signal handler is being run. */ static _GL_ASYNC_SAFE void log_signal_handler_called (int sig) { char message[100]; strcpy (message, "Signal handler for signal "); simple_signal_string (message + strlen (message), sig); strcat (message, " called.\n"); log_message (message); } #else # define log_signal_handler_called(sig) #endif /* ============================ Signal handling ============================ */ /* There are several situations which can cause garbled output on the terminal's screen: (1) When the program calls exit() after calling flush_to_current_style, the program would terminate and leave the terminal in a non-default state. (2) When the program is interrupted through a fatal signal, the terminal would be left in a non-default state. (3) When the program is stopped through a stopping signal, the terminal would be left (for temporary use by other programs) in a non-default state. (4) When a foreground process receives a SIGINT, the kernel(!) prints '^C'. On Linux, the place where this happens is linux-5.0/drivers/tty/n_tty.c:713..730 within a call sequence n_tty_receive_signal_char (n_tty.c:1245..1246) -> commit_echoes (n_tty.c:792) -> __process_echoes (n_tty.c:713..730). (5) When a signal is sent, the output buffer is cleared. On Linux, this output buffer consists of the "echo buffer" in the tty and the "output buffer" in the driver. The place where this happens is linux-5.0/drivers/tty/n_tty.c:1133..1140 within a call isig (n_tty.c:1133..1140). How do we mitigate these problems? (1) We install an exit handler that restores the terminal to the default state. (2) If tty_control is TTYCTL_PARTIAL or TTYCTL_FULL: For some of the fatal signals (see gnulib's 'fatal-signal' module for the precise list), we install a handler that attempts to restore the terminal to the default state. Since the terminal may be in the middle of outputting an escape sequence at this point, the first escape sequence emitted from this handler may have no effect and produce garbled characters instead. Therefore the handler outputs the cleanup sequence twice. For the other fatal signals, we don't do anything. (3) If tty_control is TTYCTL_PARTIAL or TTYCTL_FULL: For some of the stopping signals (SIGTSTP, SIGTTIN, SIGTTOU), we install a handler that attempts to restore the terminal to the default state. For SIGCONT, we install a handler that does the opposite: it puts the terminal into the desired state again. For SIGSTOP, we cannot do anything. (4) If tty_control is TTYCTL_FULL: The kernel's action depends on L_ECHO(tty) and L_ISIG(tty), that is, on the local modes of the tty (see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html> section 11.2.5). We don't want to change L_ISIG; hence we change L_ECHO. So, we disable the ECHO local flag of the tty; the equivalent command is 'stty -echo'. (5) If tty_control is TTYCTL_FULL: The kernel's action depends on !L_NOFLSH(tty), that is, again on the local modes of the tty (see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html> section 11.2.5). So, we enable the NOFLSH local flag of the tty; the equivalent command is 'stty noflsh'. For terminals with a baud rate < 9600 this is suboptimal. For this case - where the traditional flushing behaviour makes sense - we would use a technique that involves tcdrain(), TIOCOUTQ, and usleep() when it is OK to disable NOFLSH. Regarding (4) and (5), there is a complication: Changing the local modes is done through tcsetattr(). However, when the process is put into the background, tcsetattr() does not operate the same way as when the process is running in the foreground. To test this kind of behaviour, use the 'color-filter' example like this: $ yes | ./filter '.*' <Ctrl-Z> $ bg 1 We have three possible implementation options: * If we don't ignore the signal SIGTTOU: If the TOSTOP bit in the terminal's local mode is clear (command equivalent: 'stty -tostop') and the process is put into the background, normal output would continue (per POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html> section 11.2.5) but tcsetattr() calls would cause it to stop due to a SIGTTOU signal (per POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsetattr.html>). Thus, the program would behave differently with term-style-control than without. * If we ignore the signal SIGTTOU when the TOSTOP bit in the terminal's local mode is clear (i.e. when (tc.c_lflag & TOSTOP) == 0): The tcsetattr() calls do not stop the process, but they don't have the desired effect. On Linux, when I put the process into the background and then kill it with signal SIGINT, I can see that the last operation on the terminal settings (as shown by 'strace') is ioctl(1, TCSETSW, {B38400 opost isig icanon echo ...}) = 0 and yet, once the process is terminated, the terminal settings contain '-echo', not 'echo'. * Don't call tcsetattr() if the process is not in the foreground. This approach produces reliable results. Blocking some signals while a non-default style is active is *not* useful: - It does not help against (1), since exit() is not a signal. - Signal handlers are the better approach against (2) and (3). - It does not help against (4) and (5), because the kernel's actions happen outside the process. */ #define BLOCK_SIGNALS_DURING_NON_DEFAULT_STYLE_OUTPUT 0 /* File descriptor of the currently active 'struct term_style_controller' and 'struct term_style_user_data'. */ static int volatile term_fd = -1; #if HAVE_TCGETATTR /* Status of the process group of term_fd. */ typedef enum { PGRP_UNKNOWN = 0, /* term_fd < 0. Unknown status. */ PGRP_NO_TTY, /* term_fd >= 0 but is not connected to a tty. */ PGRP_IN_FOREGROUND, /* term_fd >= 0 is a tty. This process is running in the foreground. */ PGRP_IN_BACKGROUND /* term_fd >= 0 is a tty. This process is running in the background. */ } pgrp_status_t; static pgrp_status_t volatile pgrp_status = PGRP_UNKNOWN; /* Update pgrp_status, depending on term_fd. */ static _GL_ASYNC_SAFE void update_pgrp_status (void) { int fd = term_fd; if (fd < 0) { pgrp_status = PGRP_UNKNOWN; log_message ("pgrp_status = PGRP_UNKNOWN\n"); } else { pid_t p = tcgetpgrp (fd); if (p < 0) { pgrp_status = PGRP_NO_TTY; log_message ("pgrp_status = PGRP_NO_TTY\n"); } else { /* getpgrp () changes when the process gets put into the background by a shell that implements job control. */ if (p == getpgrp ()) { pgrp_status = PGRP_IN_FOREGROUND; log_message ("pgrp_status = PGRP_IN_FOREGROUND\n"); } else { pgrp_status = PGRP_IN_BACKGROUND; log_message ("pgrp_status = PGRP_IN_BACKGROUND\n"); } } } } #else # define update_pgrp_status() #endif /* Controller and its user_data that contain information about how to do output. */ static const struct term_style_controller * volatile active_controller; static struct term_style_user_data * volatile active_user_data; /* The 'struct term_style_control_data' embedded in active_user_data. Same as (active_controller != NULL ? active_controller->get_control_data (active_user_data) : NULL). */ static struct term_style_control_data * volatile active_control_data; /* The fd contained in active_control_data. Same as (active_controller != NULL ? active_control_data->fd : -1). */ static int volatile active_fd = -1; /* The exit handler. */ static void atexit_handler (void) { /* Only do something while some output was started but not completed. */ if (active_controller != NULL) { active_controller->restore (active_user_data); deactivate_term_non_default_mode (active_controller, active_user_data); #if 0 /* not needed */ deactivate_term_style_controller (active_controller, active_user_data); #endif } } #if HAVE_TCGETATTR /* Return a failure message after tcsetattr() failed. */ static _GL_ASYNC_SAFE void tcsetattr_failed (char message[100], const char *caller) { int errnum = errno; strcpy (message, caller); strcat (message, ": tcsetattr(fd="); sprintf_integer (message + strlen (message), active_fd); strcat (message, ") failed, errno="); simple_errno_string (message + strlen (message), errnum); strcat (message, "\n"); } /* True when orig_lflag represents the original tc.c_lflag. */ static bool volatile orig_lflag_set; static tcflag_t volatile orig_lflag; /* Modifies the tty's local mode, preparing for non-default terminal state. Used only when the active_control_data's tty_control is TTYCTL_FULL. */ static _GL_ASYNC_SAFE void clobber_local_mode (void) { /* Here, active_fd == term_fd. */ if (pgrp_status == PGRP_IN_FOREGROUND) { struct termios tc; if (nonintr_tcgetattr (active_fd, &tc) >= 0) { if (!orig_lflag_set) orig_lflag = tc.c_lflag; /* Set orig_lflag_set to true before actually modifying the tty's local mode, because restore_local_mode does nothing if orig_lflag_set is false. */ orig_lflag_set = true; tc.c_lflag &= ~ECHO; tc.c_lflag |= NOFLSH; if (nonintr_tcsetattr (active_fd, TCSANOW, &tc) < 0) { /* Since tcsetattr failed, restore_local_mode does not need to restore anything. Set orig_lflag_set to false to indicate this. */ orig_lflag_set = false; { char message[100]; tcsetattr_failed (message, "term-style-control:clobber_local_mode"); full_write (STDERR_FILENO, message, strlen (message)); } } } } } /* Modifies the tty's local mode, once the terminal is back to the default state. Returns true if ECHO was turned off. Used only when the active_control_data's tty_control is TTYCTL_FULL. */ static _GL_ASYNC_SAFE bool restore_local_mode (void) { /* Here, active_fd == term_fd. */ bool echo_was_off = false; /* Nothing to do if !orig_lflag_set. */ if (orig_lflag_set) { struct termios tc; if (nonintr_tcgetattr (active_fd, &tc) >= 0) { echo_was_off = (tc.c_lflag & ECHO) == 0; tc.c_lflag = orig_lflag; if (nonintr_tcsetattr (active_fd, TCSADRAIN, &tc) < 0) { char message[100]; tcsetattr_failed (message, "term-style-control:restore_local_mode"); full_write (STDERR_FILENO, message, strlen (message)); } } orig_lflag_set = false; } return echo_was_off; } #endif #if defined SIGCONT /* The list of signals whose default behaviour is to stop or continue the program. */ static int const job_control_signals[] = { #ifdef SIGTSTP SIGTSTP, #endif #ifdef SIGTTIN SIGTTIN, #endif #ifdef SIGTTOU SIGTTOU, #endif #ifdef SIGCONT SIGCONT, #endif 0 }; # define num_job_control_signals (SIZEOF (job_control_signals) - 1) #endif /* The following signals are relevant because they output escape sequences to the terminal: - fatal signals, - stopping signals, - continuing signals (SIGCONT). */ static sigset_t relevant_signal_set; static bool relevant_signal_set_initialized = false; static void init_relevant_signal_set () { if (!relevant_signal_set_initialized) { int fatal_signals[64]; size_t num_fatal_signals; size_t i; num_fatal_signals = get_fatal_signals (fatal_signals); sigemptyset (&relevant_signal_set); for (i = 0; i < num_fatal_signals; i++) sigaddset (&relevant_signal_set, fatal_signals[i]); #if defined SIGCONT for (i = 0; i < num_job_control_signals; i++) sigaddset (&relevant_signal_set, job_control_signals[i]); #endif relevant_signal_set_initialized = true; } } /* Temporarily delay the relevant signals. */ static _GL_ASYNC_SAFE inline void block_relevant_signals () { /* The caller must ensure that init_relevant_signal_set () was already called. */ if (!relevant_signal_set_initialized) abort (); sigprocmask (SIG_BLOCK, &relevant_signal_set, NULL); } /* Stop delaying the relevant signals. */ static _GL_ASYNC_SAFE inline void unblock_relevant_signals () { sigprocmask (SIG_UNBLOCK, &relevant_signal_set, NULL); } #if defined SIGCONT /* Determines whether a signal is ignored. */ static _GL_ASYNC_SAFE bool is_ignored (int sig) { struct sigaction action; return (sigaction (sig, NULL, &action) >= 0 && get_handler (&action) == SIG_IGN); } #endif #if HAVE_TCGETATTR /* Write the same signal marker that the kernel would have printed if ECHO had been turned on. See (4) above. This is a makeshift and is not perfect: - When stderr refers to a different target than active_control_data->fd, it is too hairy to write the signal marker. - In some cases, when the signal was generated right before and delivered right after a clobber_local_mode invocation, the result is that the marker appears twice, e.g. ^C^C. This occurs only with a small probability. - In some cases, when the signal was generated right before and delivered right after a restore_local_mode invocation, the result is that the marker does not appear at all. This occurs only with a small probability. To test this kind of behaviour, use the 'test-term-style-control-yes' example like this: $ ./test-term-style-control-yes */ static _GL_ASYNC_SAFE void show_signal_marker (int sig) { /* Write to stderr, not to active_control_data->fd, because active_control_data->fd is often logged or used with 'less -R'. */ if (active_controller != NULL && active_control_data->same_as_stderr) switch (sig) { /* The kernel's action when the user presses the INTR key. */ case SIGINT: full_write (STDERR_FILENO, "^C", 2); break; /* The kernel's action when the user presses the SUSP key. */ case SIGTSTP: full_write (STDERR_FILENO, "^Z", 2); break; /* The kernel's action when the user presses the QUIT key. */ case SIGQUIT: full_write (STDERR_FILENO, "^\\", 2); break; default: break; } } #endif /* The main code of the signal handler for fatal signals and stopping signals. It is reentrant. */ static _GL_ASYNC_SAFE void fatal_or_stopping_signal_handler (int sig) { #if HAVE_TCGETATTR bool echo_was_off = false; #endif /* Only do something while some output was interrupted. */ if (active_controller != NULL && active_control_data->tty_control != TTYCTL_NONE) { unsigned int i; /* Block the relevant signals. This is needed, because the output of escape sequences below (usually through tputs invocations) is not reentrant. */ block_relevant_signals (); /* Restore the terminal to the default state. */ for (i = 0; i < 2; i++) active_controller->async_restore (active_user_data); #if HAVE_TCGETATTR if (active_control_data->tty_control == TTYCTL_FULL) { /* Restore the local mode, once the escape sequences output above have reached their destination. */ echo_was_off = restore_local_mode (); } #endif /* Unblock the relevant signals. */ unblock_relevant_signals (); } #if HAVE_TCGETATTR if (echo_was_off) show_signal_marker (sig); #endif } /* The signal handler for fatal signals. It is reentrant. */ static _GL_ASYNC_SAFE void fatal_signal_handler (int sig) { log_signal_handler_called (sig); fatal_or_stopping_signal_handler (sig); } #if defined SIGCONT /* The signal handler for stopping signals. It is reentrant. */ static _GL_ASYNC_SAFE void stopping_signal_handler (int sig) { int saved_errno = errno; log_signal_handler_called (sig); fatal_or_stopping_signal_handler (sig); /* Now execute the signal's default action. We reinstall the handler later, during the SIGCONT handler. */ { struct sigaction action; action.sa_handler = SIG_DFL; action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); sigaction (sig, &action, NULL); } errno = saved_errno; raise (sig); } /* The signal handler for SIGCONT. It is reentrant. */ static _GL_ASYNC_SAFE void continuing_signal_handler (int sig) { int saved_errno = errno; log_signal_handler_called (sig); update_pgrp_status (); /* Only do something while some output was interrupted. */ if (active_controller != NULL && active_control_data->tty_control != TTYCTL_NONE) { /* Reinstall the signals handlers removed in stopping_signal_handler. */ { unsigned int i; for (i = 0; i < num_job_control_signals; i++) { int sig = job_control_signals[i]; if (sig != SIGCONT && !is_ignored (sig)) { struct sigaction action; action.sa_handler = &stopping_signal_handler; /* If we get a stopping or continuing signal while executing stopping_signal_handler or continuing_signal_handler, enter it recursively, since it is reentrant. Hence no SA_RESETHAND. */ action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); sigaction (sig, &action, NULL); } } } /* Block the relevant signals. This is needed, because the output of escape sequences done inside the async_set_attributes_from_default call below is not reentrant. */ block_relevant_signals (); #if HAVE_TCGETATTR if (active_control_data->tty_control == TTYCTL_FULL) { /* Modify the local mode. */ clobber_local_mode (); } #endif /* Set the terminal attributes. */ active_controller->async_set_attributes_from_default (active_user_data); /* Unblock the relevant signals. */ unblock_relevant_signals (); } errno = saved_errno; } /* Ensure the signal handlers are installed. Once they are installed, we leave them installed. It's not worth installing and uninstalling them each time we switch the terminal to a non-default state and back; instead we set active_controller to tell the signal handler whether it has something to do or not. */ static void ensure_continuing_signal_handler (void) { static bool signal_handler_installed = false; if (!signal_handler_installed) { int sig = SIGCONT; struct sigaction action; action.sa_handler = &continuing_signal_handler; /* If we get a stopping or continuing signal while executing continuing_signal_handler, enter it recursively, since it is reentrant. Hence no SA_RESETHAND. */ action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); sigaction (sig, &action, NULL); signal_handler_installed = true; } } #endif static void ensure_other_signal_handlers (void) { static bool signal_handlers_installed = false; if (!signal_handlers_installed) { /* Install the handlers for the fatal signals. */ if (at_fatal_signal (fatal_signal_handler) < 0) xalloc_die (); #if defined SIGCONT /* Install the handlers for the stopping and continuing signals. */ { unsigned int i; for (i = 0; i < num_job_control_signals; i++) { int sig = job_control_signals[i]; if (sig == SIGCONT) /* Already handled in ensure_continuing_signal_handler. */ ; else if (!is_ignored (sig)) { struct sigaction action; action.sa_handler = &stopping_signal_handler; /* If we get a stopping or continuing signal while executing stopping_signal_handler, enter it recursively, since it is reentrant. Hence no SA_RESETHAND. */ action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); sigaction (sig, &action, NULL); } #if DEBUG_SIGNALS else { fprintf (stderr, "Signal %d is ignored. Not installing a handler!\n", sig); fflush (stderr); } #endif } } #endif signal_handlers_installed = true; } } /* ============================== Public API ============================== */ void activate_term_non_default_mode (const struct term_style_controller *controller, struct term_style_user_data *user_data) { struct term_style_control_data *control_data = controller->get_control_data (user_data); if (!control_data->non_default_active) { if (control_data->tty_control != TTYCTL_NONE) ensure_other_signal_handlers (); #if BLOCK_SIGNALS_DURING_NON_DEFAULT_STYLE_OUTPUT /* Block fatal signals, so that a SIGINT or similar doesn't interrupt us without the possibility of restoring the terminal's state. Likewise for SIGTSTP etc. */ block_relevant_signals (); #endif /* Enable the exit handler for restoring the terminal's state, and make the signal handlers effective. */ if (active_controller != NULL) { /* We can't support two active controllers with non-default attributes at the same time. */ abort (); } /* The uses of 'volatile' (and ISO C 99 section 5.1.2.3.(5)) ensure that we set active_controller to a non-NULL value only after the memory locations active_user_data, active_control_data, active_fd have been filled. */ active_fd = control_data->fd; active_control_data = control_data; active_user_data = user_data; active_controller = controller; #if HAVE_TCGETATTR /* Now that the signal handlers are effective, modify the tty. */ if (active_control_data->tty_control == TTYCTL_FULL) { /* Modify the local mode. */ clobber_local_mode (); } #endif control_data->non_default_active = true; } } void deactivate_term_non_default_mode (const struct term_style_controller *controller, struct term_style_user_data *user_data) { struct term_style_control_data *control_data = controller->get_control_data (user_data); if (control_data->non_default_active) { #if HAVE_TCGETATTR /* Before we make the signal handlers ineffective, modify the tty. */ if (active_control_data->tty_control == TTYCTL_FULL) { /* Restore the local mode, once the tputs calls from out_attr_change have reached their destination. */ restore_local_mode (); } #endif /* Disable the exit handler, and make the signal handlers ineffective. */ /* The uses of 'volatile' (and ISO C 99 section 5.1.2.3.(5)) ensure that we reset active_user_data, active_control_data, active_fd only after the memory location active_controller has been cleared. */ active_controller = NULL; active_user_data = NULL; active_control_data = NULL; active_fd = -1; #if BLOCK_SIGNALS_DURING_NON_DEFAULT_STYLE_OUTPUT /* Unblock the relevant signals. */ unblock_relevant_signals (); #endif control_data->non_default_active = false; } } void activate_term_style_controller (const struct term_style_controller *controller, struct term_style_user_data *user_data, int fd, ttyctl_t tty_control) { struct term_style_control_data *control_data = controller->get_control_data (user_data); control_data->fd = fd; /* Prepare tty control. */ if (tty_control == TTYCTL_AUTO) tty_control = TTYCTL_FULL; control_data->tty_control = tty_control; if (control_data->tty_control != TTYCTL_NONE) init_relevant_signal_set (); #if HAVE_TCGETATTR if (control_data->tty_control == TTYCTL_FULL) { struct stat statbuf1; struct stat statbuf2; if (fd == STDERR_FILENO || (fstat (fd, &statbuf1) >= 0 && fstat (STDERR_FILENO, &statbuf2) >= 0 && SAME_INODE (statbuf1, statbuf2))) control_data->same_as_stderr = true; else control_data->same_as_stderr = false; } else /* This value is actually not used. */ control_data->same_as_stderr = false; #endif control_data->non_default_active = false; /* Start keeping track of the process group status. */ term_fd = fd; #if defined SIGCONT ensure_continuing_signal_handler (); #endif update_pgrp_status (); /* Register an exit handler. */ { static bool registered = false; if (!registered) { atexit (atexit_handler); registered = true; } } } void deactivate_term_style_controller (const struct term_style_controller *controller, struct term_style_user_data *user_data) { struct term_style_control_data *control_data = controller->get_control_data (user_data); /* Verify that the non-default attributes mode is turned off. */ if (control_data->non_default_active) abort (); term_fd = -1; update_pgrp_status (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/term-style-control.h����������������������������������������������������0000664�0000000�0000000�00000021012�14110572173�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Terminal control for outputting styled text to a terminal. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. This 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 _TERM_STYLE_CONTROL_H #define _TERM_STYLE_CONTROL_H #include <stdbool.h> /* The user of this file will define a macro 'term_style_user_data', such that 'struct term_style_user_data' is a user-defined struct. */ /* The amount of control to take over the underlying tty in order to avoid garbled output on the screen, due to interleaved output of escape sequences and output from the kernel (such as when the kernel echoes user's input or when the kernel prints '^C' after the user pressed Ctrl-C). */ typedef enum { TTYCTL_AUTO = 0, /* Automatic best-possible choice. */ TTYCTL_NONE, /* No control. Result: Garbled output can occur, and the terminal can be left in any state when the program is interrupted. */ TTYCTL_PARTIAL, /* Signal handling. Result: Garbled output can occur, but the terminal will be left in the default state when the program is interrupted. */ TTYCTL_FULL /* Signal handling and disabling echo and flush-upon-signal. Result: No garbled output, and the the terminal will be left in the default state when the program is interrupted. */ } ttyctl_t; /* This struct contains data, used by implementation of this module. You should not access the members of this struct; they may be renamed or removed without notice. */ struct term_style_control_data { int volatile fd; ttyctl_t volatile tty_control; /* Signal handling and tty control. */ #if HAVE_TCGETATTR bool volatile same_as_stderr; #endif bool non_default_active; /* True if activate_term_non_default_mode() is in effect. */ }; /* Forward declaration. */ struct term_style_user_data; /* This struct contains function pointers. You implement these functions in your application; this module invokes them when it needs to. */ struct term_style_controller { /* This function returns a pointer to the embedded 'struct term_style_control_data' contained in a 'struct term_style_user_data'. */ struct term_style_control_data * (*get_control_data) (struct term_style_user_data *); /* This function brings the terminal's state back to the default state (no styling attributes set). It is invoked when the process terminates through exit(). */ void (*restore) (struct term_style_user_data *); /* This function brings the terminal's state back to the default state (no styling attributes set). It is async-safe (see gnulib-common.m4 for the precise definition). It is invoked when the process receives a fatal or stopping signal. */ _GL_ASYNC_SAFE void (*async_restore) (struct term_style_user_data *); /* This function brings the terminal's state, from the default state, back to the state where it has the desired attributes set. It is async-safe (see gnulib-common.m4 for the precise definition). It is invoked when the process receives a SIGCONT signal. */ _GL_ASYNC_SAFE void (*async_set_attributes_from_default) (struct term_style_user_data *); }; #ifdef __cplusplus extern "C" { #endif /* This module is used as follows: 1. You fill a 'struct term_style_controller' with function pointers. You create a 'struct term_style_user_data' that contains, among other members, a 'struct term_style_control_data'. You will pass these two objects to all API functions below. 2. You call activate_term_style_controller to activate this controller. Activation of the controller is the prerequisite for activating the non-default mode, which in turn is the prerequisite for changing the terminal's attributes. When you are done with the styled output, you may deactivate the controller. This is not required before exiting the program, but is required before activating a different controller. You cannot have more than one controller activated at the same time. 3. Once the controller is activated, you may turn on the non-default mode. The non-default mode is the prerequisite for changing the terminal's attributes. Once the terminal's attributes are in the default state again, you may turn off the non-default mode again. In other words: - In the default mode, the terminal's attributes MUST be in the default state; no styled output is possible. - In the non-default mode, the terminal's attributes MAY switch among the default state and other states. This module exercises a certain amount of control over the terminal during the non-default mode phases; see above (ttyctl_t) for details. You may switch between the default and the non-default modes any number of times. The idea is that you switch back to the default mode before doing large amounts of output of unstyled text. However, this is not a requirement: You may leave the non-default mode turned on all the time until the the program exits. 4. Once the non-default mode is activated, you may change the attributes (foreground color, background color, font weight, font posture, underline decoration, etc.) of the terminal. On Unix, this is typically done by outputting appropriate escape sequences. 5. Once attributes are set, text output to the terminal will be rendered with these attributes. Note: You MUST return the terminal to the default state before outputting a newline. */ /* Activates a controller. The CONTROLLER and its USER_DATA controls the terminal associated with FD. FD is usually STDOUT_FILENO. TTY_CONTROL specifies the amount of control to take over the underlying tty. The effects of this functions are undone by calling deactivate_term_style_controller. You cannot have more than one controller activated at the same time. You must not close FD while the controller is active. */ extern void activate_term_style_controller (const struct term_style_controller *controller, struct term_style_user_data *user_data, int fd, ttyctl_t tty_control); /* Activates the non-default mode. CONTROLLER and its USER_DATA must be a currently active controller. This function fiddles with the signals of the current process and with the underlying tty, to an extent described by TTY_CONTROL. This function is idempotent: When you call it twice in a row, the second invocation does nothing. The effects of this function are undone by calling deactivate_term_non_default_mode. */ extern void activate_term_non_default_mode (const struct term_style_controller *controller, struct term_style_user_data *user_data); /* Deactivates the non-default mode. CONTROLLER and its USER_DATA must be a currently active controller. This function is idempotent: When you call it twice in a row, the second invocation does nothing. Before invoking this function, you must put the terminal's attributes in the default state. */ extern void deactivate_term_non_default_mode (const struct term_style_controller *controller, struct term_style_user_data *user_data); /* Deactivates a controller. CONTROLLER and its USER_DATA must be a currently active controller. Before invoking this function, you must ensure that the non-default mode is deactivated. */ extern void deactivate_term_style_controller (const struct term_style_controller *controller, struct term_style_user_data *user_data); #ifdef __cplusplus } #endif #endif /* _TERM_STYLE_CONTROL_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/termios.in.h������������������������������������������������������������0000664�0000000�0000000�00000004427�14110572173�0017314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <termios.h>. Copyright (C) 2010-2021 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/>. */ #ifndef _@GUARD_PREFIX@_TERMIOS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* On HP-UX 11.00, some of the function declarations in <sys/termio.h>, included by <termios.h>, are not protected by extern "C". Enforce "C" linkage for these functions nevertheless. */ #if defined __hpux && defined __cplusplus # include <sys/types.h> # include <sys/ioctl.h> extern "C" { # include <sys/termio.h> } #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_TERMIOS_H@ # @INCLUDE_NEXT@ @NEXT_TERMIOS_H@ #endif #ifndef _@GUARD_PREFIX@_TERMIOS_H #define _@GUARD_PREFIX@_TERMIOS_H /* Get pid_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_TCGETSID@ /* Return the session ID of the controlling terminal of the current process. The argument is a descriptor if this controlling terminal. Return -1, with errno set, upon failure. errno = ENOSYS means that the function is unsupported. */ # if !@HAVE_DECL_TCGETSID@ _GL_FUNCDECL_SYS (tcgetsid, pid_t, (int fd)); # endif _GL_CXXALIAS_SYS (tcgetsid, pid_t, (int fd)); _GL_CXXALIASWARN (tcgetsid); #elif defined GNULIB_POSIXCHECK # undef tcgetsid # if HAVE_RAW_DECL_TCGETSID _GL_WARN_ON_USE (tcgetsid, "tcgetsid is not portable - " "use gnulib module tcgetsid for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_TERMIOS_H */ #endif /* _@GUARD_PREFIX@_TERMIOS_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/textstyle.in.h����������������������������������������������������������0000664�0000000�0000000�00000034015�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dummy replacement for part of the public API of the libtextstyle library. Copyright (C) 2006-2007, 2019-2021 Free Software Foundation, Inc. This 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. */ /* This file is used as replacement when libtextstyle with its include file <textstyle.h> is not found. It supports the essential API and implements it in a way that does not provide text styling. That is, it produces plain text output via <stdio.h> FILE objects. Thus, it allows a package to be build with or without a dependency to libtextstyle, with very few occurrences of '#if HAVE_LIBTEXTSTYLE'. Restriction: It assumes that freopen() is not being called on stdout and stderr. */ #ifndef _TEXTSTYLE_H #define _TEXTSTYLE_H #include <errno.h> #include <stdarg.h> #include <stdbool.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if HAVE_TCDRAIN # include <termios.h> #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. _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ /* __gnu_printf__ is supported in GCC >= 4.4. */ #ifndef _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ # else # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ # endif #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif #endif /* ----------------------------- From ostream.h ----------------------------- */ /* Describes the scope of a flush operation. */ typedef enum { /* Flushes buffers in this ostream_t. Use this value if you want to write to the underlying ostream_t. */ FLUSH_THIS_STREAM = 0, /* Flushes all buffers in the current process. Use this value if you want to write to the same target through a different file descriptor or a FILE stream. */ FLUSH_THIS_PROCESS = 1, /* Flushes buffers in the current process and attempts to flush the buffers in the kernel. Use this value so that some other process (or the kernel itself) may write to the same target. */ FLUSH_ALL = 2 } ostream_flush_scope_t; /* An output stream is an object to which one can feed a sequence of bytes. */ typedef FILE * ostream_t; static inline void ostream_write_mem (ostream_t stream, const void *data, size_t len) { if (len > 0) fwrite (data, 1, len, stream); } static inline void ostream_flush (ostream_t stream, ostream_flush_scope_t scope) { fflush (stream); if (scope == FLUSH_ALL) { int fd = fileno (stream); if (fd >= 0) { /* For streams connected to a disk file: */ fsync (fd); #if HAVE_TCDRAIN /* For streams connected to a terminal: */ { int retval; do retval = tcdrain (fd); while (retval < 0 && errno == EINTR); } #endif } } } static inline void ostream_free (ostream_t stream) { if (stream == stdin || stream == stderr) fflush (stream); else fclose (stream); } static inline void ostream_write_str (ostream_t stream, const char *string) { ostream_write_mem (stream, string, strlen (string)); } static inline ptrdiff_t ostream_printf (ostream_t stream, const char *format, ...) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined __clang__ __attribute__ ((__format__ (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3))) #endif ; static inline ptrdiff_t ostream_printf (ostream_t stream, const char *format, ...) { va_list args; char *temp_string; ptrdiff_t ret; va_start (args, format); ret = vasprintf (&temp_string, format, args); va_end (args); if (ret >= 0) { if (ret > 0) ostream_write_str (stream, temp_string); free (temp_string); } return ret; } static inline ptrdiff_t ostream_vprintf (ostream_t stream, const char *format, va_list args) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined __clang__ __attribute__ ((__format__ (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0))) #endif ; static inline ptrdiff_t ostream_vprintf (ostream_t stream, const char *format, va_list args) { char *temp_string; ptrdiff_t ret = vasprintf (&temp_string, format, args); if (ret >= 0) { if (ret > 0) ostream_write_str (stream, temp_string); free (temp_string); } return ret; } /* ------------------------- From styled-ostream.h ------------------------- */ typedef ostream_t styled_ostream_t; #define styled_ostream_write_mem ostream_write_mem #define styled_ostream_flush ostream_flush #define styled_ostream_free ostream_free static inline void styled_ostream_begin_use_class (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED const char *classname) { } static inline void styled_ostream_end_use_class (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED const char *classname) { } static inline const char * styled_ostream_get_hyperlink_ref (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream) { return NULL; } static inline const char * styled_ostream_get_hyperlink_id (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream) { return NULL; } static inline void styled_ostream_set_hyperlink (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED const char *ref, _GL_ATTRIBUTE_MAYBE_UNUSED const char *id) { } static inline void styled_ostream_flush_to_current_style (_GL_ATTRIBUTE_MAYBE_UNUSED styled_ostream_t stream) { } /* -------------------------- From file-ostream.h -------------------------- */ typedef ostream_t file_ostream_t; #define file_ostream_write_mem ostream_write_mem #define file_ostream_flush ostream_flush #define file_ostream_free ostream_free static inline file_ostream_t file_ostream_create (FILE *fp) { return fp; } /* --------------------------- From fd-ostream.h --------------------------- */ typedef ostream_t fd_ostream_t; #define fd_ostream_write_mem ostream_write_mem #define fd_ostream_flush ostream_flush #define fd_ostream_free ostream_free static inline fd_ostream_t fd_ostream_create (int fd, _GL_ATTRIBUTE_MAYBE_UNUSED const char *filename, _GL_ATTRIBUTE_MAYBE_UNUSED bool buffered) { if (fd == 1) return stdout; else if (fd == 2) return stderr; else return fdopen (fd, "w"); } /* -------------------------- From term-ostream.h -------------------------- */ typedef int term_color_t; enum { COLOR_DEFAULT = -1 /* unknown */ }; typedef enum { WEIGHT_NORMAL = 0, WEIGHT_BOLD, WEIGHT_DEFAULT = WEIGHT_NORMAL } term_weight_t; typedef enum { POSTURE_NORMAL = 0, POSTURE_ITALIC, /* same as oblique */ POSTURE_DEFAULT = POSTURE_NORMAL } term_posture_t; typedef enum { UNDERLINE_OFF = 0, UNDERLINE_ON, UNDERLINE_DEFAULT = UNDERLINE_OFF } term_underline_t; typedef ostream_t term_ostream_t; #define term_ostream_write_mem ostream_write_mem #define term_ostream_flush ostream_flush #define term_ostream_free ostream_free static inline term_color_t term_ostream_get_color (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return COLOR_DEFAULT; } static inline void term_ostream_set_color (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED term_color_t color) { } static inline term_color_t term_ostream_get_bgcolor (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return COLOR_DEFAULT; } static inline void term_ostream_set_bgcolor (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED term_color_t color) { } static inline term_weight_t term_ostream_get_weight (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return WEIGHT_DEFAULT; } static inline void term_ostream_set_weight (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED term_weight_t weight) { } static inline term_posture_t term_ostream_get_posture (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return POSTURE_DEFAULT; } static inline void term_ostream_set_posture (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED term_posture_t posture) { } static inline term_underline_t term_ostream_get_underline (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return UNDERLINE_DEFAULT; } static inline void term_ostream_set_underline (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED term_underline_t underline) { } static inline const char * term_ostream_get_hyperlink_ref (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return NULL; } static inline const char * term_ostream_get_hyperlink_id (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream) { return NULL; } static inline void term_ostream_set_hyperlink (_GL_ATTRIBUTE_MAYBE_UNUSED term_ostream_t stream, _GL_ATTRIBUTE_MAYBE_UNUSED const char *ref, _GL_ATTRIBUTE_MAYBE_UNUSED const char *id) { } static inline void term_ostream_flush_to_current_style (term_ostream_t stream) { fflush (stream); } typedef enum { TTYCTL_AUTO = 0, /* Automatic best-possible choice. */ TTYCTL_NONE, /* No control. Result: Garbled output can occur, and the terminal can be left in any state when the program is interrupted. */ TTYCTL_PARTIAL, /* Signal handling. Result: Garbled output can occur, but the terminal will be left in the default state when the program is interrupted. */ TTYCTL_FULL /* Signal handling and disabling echo and flush-upon-signal. Result: No garbled output, and the the terminal will be left in the default state when the program is interrupted. */ } ttyctl_t; static inline term_ostream_t term_ostream_create (int fd, const char *filename, _GL_ATTRIBUTE_MAYBE_UNUSED ttyctl_t tty_control) { return fd_ostream_create (fd, filename, true); } /* ----------------------- From term-styled-ostream.h ----------------------- */ typedef styled_ostream_t term_styled_ostream_t; #define term_styled_ostream_write_mem ostream_write_mem #define term_styled_ostream_flush ostream_flush #define term_styled_ostream_free ostream_free #define term_styled_ostream_begin_use_class styled_ostream_begin_use_class #define term_styled_ostream_end_use_class styled_ostream_end_use_class #define term_styled_ostream_get_hyperlink_ref styled_ostream_get_hyperlink_ref #define term_styled_ostream_get_hyperlink_id styled_ostream_get_hyperlink_id #define term_styled_ostream_set_hyperlink styled_ostream_set_hyperlink #define term_styled_ostream_flush_to_current_style styled_ostream_flush_to_current_style static inline term_styled_ostream_t term_styled_ostream_create (int fd, const char *filename, _GL_ATTRIBUTE_MAYBE_UNUSED ttyctl_t tty_control, _GL_ATTRIBUTE_MAYBE_UNUSED const char *css_filename) { return fd_ostream_create (fd, filename, true); } /* ----------------------- From html-styled-ostream.h ----------------------- */ typedef styled_ostream_t html_styled_ostream_t; static inline html_styled_ostream_t html_styled_ostream_create (_GL_ATTRIBUTE_MAYBE_UNUSED ostream_t destination, _GL_ATTRIBUTE_MAYBE_UNUSED const char *css_filename) { abort (); return NULL; } /* ------------------------------ From color.h ------------------------------ */ #define color_test_mode false enum color_option { color_no, color_tty, color_yes, color_html }; #define color_mode color_no #define style_file_name NULL static inline bool handle_color_option (_GL_ATTRIBUTE_MAYBE_UNUSED const char *option) { return false; } static inline void handle_style_option (_GL_ATTRIBUTE_MAYBE_UNUSED const char *option) { } static inline void print_color_test (void) { abort (); } static inline void style_file_prepare (_GL_ATTRIBUTE_MAYBE_UNUSED const char *style_file_envvar, _GL_ATTRIBUTE_MAYBE_UNUSED const char *stylesdir_envvar, _GL_ATTRIBUTE_MAYBE_UNUSED const char *stylesdir_after_install, _GL_ATTRIBUTE_MAYBE_UNUSED const char *default_style_file) { } /* ------------------------------ From misc.h ------------------------------ */ static inline styled_ostream_t styled_ostream_create (int fd, const char *filename, _GL_ATTRIBUTE_MAYBE_UNUSED ttyctl_t tty_control, _GL_ATTRIBUTE_MAYBE_UNUSED const char *css_filename) { return fd_ostream_create (fd, filename, true); } static inline void libtextstyle_set_failure_exit_code (_GL_ATTRIBUTE_MAYBE_UNUSED int exit_code) { } #endif /* _TEXTSTYLE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/thrd.c������������������������������������������������������������������0000664�0000000�0000000�00000024771�14110572173�0016165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling ISO C 11 threads. Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ #include <config.h> #include <threads.h> #include <stdlib.h> #if HAVE_THREADS_H /* Provide workarounds. */ # if BROKEN_THRD_START_T # undef thrd_t /* AIX 7.1..7.2 defines thrd_start_t incorrectly, namely as 'void * (*) (void *)' instead of 'int (*) (void *)'. As a consequence, its thrd_join function never stores an exit code. */ /* The Thread-Specific Storage (TSS) key that allows to access each thread's 'struct thrd_with_exitcode *' pointer. */ static tss_t thrd_with_exitcode_key; /* Initializes thrd_with_exitcode_key. This function must only be called once. */ static void do_init_thrd_with_exitcode_key (void) { if (tss_create (&thrd_with_exitcode_key, NULL) != thrd_success) abort (); } /* Initializes thrd_with_exitcode_key. */ static void init_thrd_with_exitcode_key (void) { static once_flag once = ONCE_FLAG_INIT; call_once (&once, do_init_thrd_with_exitcode_key); } typedef union { struct thrd_with_exitcode t; struct { thrd_t tid; /* reserve memory for t.tid */ int detached; /* reserve memory for t.detached */ thrd_start_t mainfunc; void *arg; } a; } main_arg_t; static void * thrd_main_func (void *pmarg) { /* Unpack the object that combines mainfunc and arg. */ main_arg_t *main_arg = (main_arg_t *) pmarg; thrd_start_t mainfunc = main_arg->a.mainfunc; void *arg = main_arg->a.arg; if (tss_set (thrd_with_exitcode_key, &main_arg->t) != thrd_success) abort (); /* Execute mainfunc, with arg as argument. */ { int exitcode = mainfunc (arg); /* Store the exitcode, for use by thrd_join(). */ main_arg->t.exitcode = exitcode; if (main_arg->t.detached) { /* Clean up the thread, like thrd_join would do. */ free (&main_arg->t); } return NULL; } } int rpl_thrd_create (rpl_thrd_t *threadp, thrd_start_t mainfunc, void *arg) # undef thrd_create { init_thrd_with_exitcode_key (); { /* Combine mainfunc and arg in a single object. A stack-allocated object does not work, because it would be out of existence when thrd_create returns before pthread_main_func is entered. So, allocate it in the heap. */ main_arg_t *main_arg = (main_arg_t *) malloc (sizeof (main_arg_t)); if (main_arg == NULL) return thrd_nomem; main_arg->a.mainfunc = mainfunc; main_arg->a.arg = arg; main_arg->t.detached = 0; { int err = thrd_create ((thrd_t *) &main_arg->t.tid, thrd_main_func, main_arg); if (err == thrd_success) *threadp = &main_arg->t; else free (main_arg); return err; } } } rpl_thrd_t rpl_thrd_current (void) # undef thrd_current { init_thrd_with_exitcode_key (); { rpl_thrd_t thread = (struct thrd_with_exitcode *) tss_get (thrd_with_exitcode_key); if (thread == NULL) { /* This happens only in threads that have not been created through thrd_create(), such as the main thread. */ for (;;) { thread = (struct thrd_with_exitcode *) malloc (sizeof (struct thrd_with_exitcode)); if (thread != NULL) break; /* 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; thrd_sleep (&ts, NULL); } } thread->tid = thrd_current (); thread->detached = 0; /* This can lead to a memory leak. */ thread->exitcode = 0; /* just to be deterministic */ if (tss_set (thrd_with_exitcode_key, thread) != thrd_success) abort (); } return thread; } } int rpl_thrd_equal (rpl_thrd_t thread1, rpl_thrd_t thread2) { return thread1 == thread2; } int rpl_thrd_detach (rpl_thrd_t thread) # undef thrd_detach { if (thread->detached) return thrd_error; { int err = thrd_detach (thread == rpl_thrd_current () ? /* thread->tid may not be initialized at this point. */ thrd_current () : thread->tid); if (err == thrd_success) thread->detached = 1; return err; } } int rpl_thrd_join (rpl_thrd_t thread, int *exitcodep) # undef thrd_join { if (thread == rpl_thrd_current () || thread->detached) return thrd_error; { int err = thrd_join (thread->tid, NULL); if (err == thrd_success) { if (exitcodep != NULL) *exitcodep = thread->exitcode; free (thread); } return err; } } # endif # if BROKEN_THRD_JOIN /* On Solaris 11.4, thrd_join crashes when the second argument is NULL. */ int rpl_thrd_join (thrd_t thread, int *exitcodep) # undef thrd_join { int exitcode; int err = thrd_join (thread, &exitcode); if (err == 0 && exitcodep != NULL) *exitcodep = exitcode; return err; } # endif #else # include <errno.h> # include <stdint.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # else /* Use POSIX threads. */ # include <pthread.h> # include <sched.h> # endif /* The main functions passed to thrd_create and pthread_create/glwthread_thread_create have different return types: 'int' vs. 'void *'. */ struct pthread_main_arg_t { thrd_start_t mainfunc; void *arg; }; static void * pthread_main_func (void *pmarg) { /* Unpack the object that combines mainfunc and arg. */ struct pthread_main_arg_t *pthread_main_arg = (struct pthread_main_arg_t *) pmarg; thrd_start_t mainfunc = pthread_main_arg->mainfunc; void *arg = pthread_main_arg->arg; /* Free it. */ free (pmarg); /* Execute mainfunc, with arg as argument. */ { int exitcode = mainfunc (arg); /* Note: When using Windows threads, this exit code is different from the argument passed to ExitThread(), because the latter should never be 259, see <https://docs.microsoft.com/de-de/windows/desktop/api/processthreadsapi/nf-processthreadsapi-getexitcodethread>, whereas the exit code passed to thrd_exit() is not constrained. */ return (void *) (intptr_t) exitcode; } } # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ int thrd_create (thrd_t *threadp, thrd_start_t mainfunc, void *arg) { /* Combine mainfunc and arg in a single object. A stack-allocated object does not work, because it would be out of existence when thrd_create returns before pthread_main_func is entered. So, allocate it in the heap. */ struct pthread_main_arg_t *pthread_main_arg = (struct pthread_main_arg_t *) malloc (sizeof (struct pthread_main_arg_t)); if (pthread_main_arg == NULL) return thrd_nomem; pthread_main_arg->mainfunc = mainfunc; pthread_main_arg->arg = arg; { int err = glwthread_thread_create (threadp, 0, pthread_main_func, pthread_main_arg); if (err != 0) free (pthread_main_arg); return (err == 0 ? thrd_success : err == ENOMEM /* || err == EAGAIN */ ? thrd_nomem : thrd_error); } } thrd_t thrd_current (void) { return glwthread_thread_self (); } int thrd_equal (thrd_t thread1, thrd_t thread2) { return thread1 == thread2; } void thrd_yield (void) { Sleep (0); } int thrd_detach (thrd_t thread) { int err = glwthread_thread_detach (thread); return (err == 0 ? thrd_success : thrd_error); } int thrd_join (thrd_t thread, int *exitcodep) { void *exitptr; int err = glwthread_thread_join (thread, &exitptr); if (err == 0) { if (exitcodep != NULL) *exitcodep = (int) (intptr_t) exitptr; return thrd_success; } else return thrd_error; } _Noreturn void thrd_exit (int exitcode) { glwthread_thread_exit ((void *) (intptr_t) exitcode); } # else /* Use POSIX threads. */ int thrd_create (thrd_t *threadp, thrd_start_t mainfunc, void *arg) { /* Combine mainfunc and arg in a single object. A stack-allocated object does not work, because it would be out of existence when thrd_create returns before pthread_main_func is entered. So, allocate it in the heap. */ struct pthread_main_arg_t *pthread_main_arg = (struct pthread_main_arg_t *) malloc (sizeof (struct pthread_main_arg_t)); if (pthread_main_arg == NULL) return thrd_nomem; pthread_main_arg->mainfunc = mainfunc; pthread_main_arg->arg = arg; { int err = pthread_create (threadp, NULL, pthread_main_func, pthread_main_arg); if (err != 0) free (pthread_main_arg); return (err == 0 ? thrd_success : err == ENOMEM /* || err == EAGAIN */ ? thrd_nomem : thrd_error); } } thrd_t thrd_current (void) { return pthread_self (); } int thrd_equal (thrd_t thread1, thrd_t thread2) { return pthread_equal (thread1, thread2); } void thrd_yield (void) { sched_yield (); } int thrd_detach (thrd_t thread) { int err = pthread_detach (thread); return (err == 0 ? thrd_success : thrd_error); } int thrd_join (thrd_t thread, int *exitcodep) { void *exitptr; int err = pthread_join (thread, &exitptr); if (err == 0) { if (exitcodep != NULL) *exitcodep = (int) (intptr_t) exitptr; return thrd_success; } else return thrd_error; } _Noreturn void thrd_exit (int exitcode) { pthread_exit ((void *) (intptr_t) exitcode); } # endif int thrd_sleep (const struct timespec *duration, struct timespec *remaining) { int ret = nanosleep (duration, remaining); return (ret == 0 ? 0 : errno == EINTR ? -1 : -2); } #endif �������gnulib-20210822~d383792/lib/thread-optim.h����������������������������������������������������������0000664�0000000�0000000�00000004241�14110572173�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimization of multithreaded code. Copyright (C) 2020-2021 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. */ #ifndef _THREAD_OPTIM_H #define _THREAD_OPTIM_H /* This file defines a way to optimize multithreaded code for the single-thread case, based on the variable '__libc_single_threaded', defined in glibc >= 2.32. */ /* Typical use: In a block or function, use bool mt = gl_multithreaded (); ... if (mt) if (pthread_mutex_lock (&lock)) abort (); ... if (mt) if (pthread_mutex_unlock (&lock)) abort (); The gl_multithreaded () invocation determines whether the program currently is multithreaded. if (mt) STATEMENT executes STATEMENT in the multithreaded case, and skips it in the single-threaded case. The code between the gl_multithreaded () invocation and any use of the variable 'mt' must not create threads or invoke functions that may indirectly create threads (e.g. 'dlopen' may, indirectly through C++ initializers of global variables in the shared library being opened, create threads). The lock here is meant to synchronize threads in the same process. The same optimization cannot be applied to locks that synchronize different processes (e.g. through shared memory mappings). */ #if HAVE_SYS_SINGLE_THREADED_H /* glibc >= 2.32 */ # include <sys/single_threaded.h> # define gl_multithreaded() !__libc_single_threaded #else # define gl_multithreaded() 1 #endif #endif /* _THREAD_OPTIM_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/threads.in.h������������������������������������������������������������0000664�0000000�0000000�00000043226�14110572173�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ISO C 11 compatible <threads.h>. Copyright (C) 2019-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_THREADS_H /* The include_next requires a split double-inclusion guard. */ #if @HAVE_THREADS_H@ # @INCLUDE_NEXT@ @NEXT_THREADS_H@ #endif #ifndef _@GUARD_PREFIX@_THREADS_H #define _@GUARD_PREFIX@_THREADS_H #if !@HAVE_THREADS_H@ # include <time.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # else /* Use POSIX threads. */ # include <pthread.h> # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _Noreturn is copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Storage class specifier for thread-local storage. */ #ifdef _AIX /* The macro definition from AIX 7.1..7.2 <threads.h> is unusable, because its expansion ends in a semicolon. */ # undef thread_local #endif #if !@HAVE_THREADS_H@ || !defined thread_local # define thread_local _Thread_local #endif /* Define the macro thread_local if and only if it actually works. */ #if !@HAVE_THREAD_LOCAL@ # undef thread_local #endif /* =========== ISO C 11 7.26.5 Thread functions =========== */ #if !@HAVE_THREADS_H@ /* Return codes. */ enum { thrd_success = 0, thrd_timedout = 1, thrd_busy = 2, thrd_nomem = 3, thrd_error = 4 }; # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # include "windows-thread.h" typedef glwthread_thread_t thrd_t; # else /* Use POSIX threads. */ typedef pthread_t thrd_t; # endif #endif #if @BROKEN_THRD_START_T@ /* Need to override thrd_start_t, to make thrd_create work. */ # define thrd_start_t rpl_thrd_start_t /* Need to override thrd_t, to make thrd_join work. */ struct thrd_with_exitcode { thrd_t volatile tid; int volatile detached; int volatile exitcode; }; typedef struct thrd_with_exitcode *rpl_thrd_t; # define thrd_t rpl_thrd_t #endif /* Type of the main function of a thread. */ #if !@HAVE_THREADS_H@ || @BROKEN_THRD_START_T@ typedef int (* thrd_start_t) (void *); #endif #if @GNULIB_THRD@ # if @REPLACE_THRD_CREATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define thrd_create rpl_thrd_create # endif _GL_FUNCDECL_RPL (thrd_create, int, (thrd_t *, thrd_start_t, void *) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (thrd_create, int, (thrd_t *, thrd_start_t, void *)); # else # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_create, int, (thrd_t *, thrd_start_t, void *) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (thrd_create, int, (thrd_t *, thrd_start_t, void *)); # endif _GL_CXXALIASWARN (thrd_create); #elif defined GNULIB_POSIXCHECK # undef thrd_create # if HAVE_RAW_DECL_THRD_CREATE _GL_WARN_ON_USE (thrd_create, "thrd_create is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if @REPLACE_THRD_CURRENT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define thrd_current rpl_thrd_current # endif _GL_FUNCDECL_RPL (thrd_current, thrd_t, (void) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (thrd_current, thrd_t, (void)); # else # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_current, thrd_t, (void) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (thrd_current, thrd_t, (void)); # endif _GL_CXXALIASWARN (thrd_current); #elif defined GNULIB_POSIXCHECK # undef thrd_current # if HAVE_RAW_DECL_THRD_CURRENT _GL_WARN_ON_USE (thrd_current, "thrd_current is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if @REPLACE_THRD_EQUAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define thrd_equal rpl_thrd_equal # endif _GL_FUNCDECL_RPL (thrd_equal, int, (thrd_t, thrd_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (thrd_equal, int, (thrd_t, thrd_t)); # else # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_equal, int, (thrd_t, thrd_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (thrd_equal, int, (thrd_t, thrd_t)); # endif _GL_CXXALIASWARN (thrd_equal); #elif defined GNULIB_POSIXCHECK # undef thrd_equal # if HAVE_RAW_DECL_THRD_EQUAL _GL_WARN_ON_USE (thrd_equal, "thrd_equal is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_sleep, int, (const struct timespec *, struct timespec *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (thrd_sleep, int, (const struct timespec *, struct timespec *)); _GL_CXXALIASWARN (thrd_sleep); #elif defined GNULIB_POSIXCHECK # undef thrd_sleep # if HAVE_RAW_DECL_THRD_SLEEP _GL_WARN_ON_USE (thrd_sleep, "thrd_sleep is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_yield, void, (void)); # endif _GL_CXXALIAS_SYS (thrd_yield, void, (void)); _GL_CXXALIASWARN (thrd_yield); #elif defined GNULIB_POSIXCHECK # undef thrd_yield # if HAVE_RAW_DECL_THRD_YIELD _GL_WARN_ON_USE (thrd_yield, "thrd_yield is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if @REPLACE_THRD_DETACH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define thrd_detach rpl_thrd_detach # endif _GL_FUNCDECL_RPL (thrd_detach, int, (thrd_t)); _GL_CXXALIAS_RPL (thrd_detach, int, (thrd_t)); # else # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_detach, int, (thrd_t)); # endif _GL_CXXALIAS_SYS (thrd_detach, int, (thrd_t)); # endif _GL_CXXALIASWARN (thrd_detach); #elif defined GNULIB_POSIXCHECK # undef thrd_detach # if HAVE_RAW_DECL_THRD_DETACH _GL_WARN_ON_USE (thrd_detach, "thrd_detach is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if @REPLACE_THRD_JOIN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define thrd_join rpl_thrd_join # endif _GL_FUNCDECL_RPL (thrd_join, int, (thrd_t, int *)); _GL_CXXALIAS_RPL (thrd_join, int, (thrd_t, int *)); # else # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_join, int, (thrd_t, int *)); # endif _GL_CXXALIAS_SYS (thrd_join, int, (thrd_t, int *)); # endif _GL_CXXALIASWARN (thrd_join); #elif defined GNULIB_POSIXCHECK # undef thrd_join # if HAVE_RAW_DECL_THRD_JOIN _GL_WARN_ON_USE (thrd_join, "thrd_join is unportable - " "use gnulib module thrd for portability"); # endif #endif #if @GNULIB_THRD@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (thrd_exit, _Noreturn void, (int)); # endif /* Need to cast because of AIX with xlclang++. */ _GL_CXXALIAS_SYS_CAST (thrd_exit, void, (int)); _GL_CXXALIASWARN (thrd_exit); #elif defined GNULIB_POSIXCHECK # undef thrd_exit # if HAVE_RAW_DECL_THRD_EXIT _GL_WARN_ON_USE (thrd_exit, "thrd_exit is unportable - " "use gnulib module thrd for portability"); # endif #endif /* =========== ISO C 11 7.26.4 Mutex functions =========== */ #if !@HAVE_THREADS_H@ /* Types of mutexes. */ enum { mtx_plain = 0, mtx_timed = 1, mtx_recursive = 2 }; # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # include "windows-mutex.h" # include "windows-recmutex.h" # include "windows-timedmutex.h" # include "windows-timedrecmutex.h" typedef struct { int type; union { glwthread_mutex_t u_mutex; glwthread_recmutex_t u_recmutex; glwthread_timedmutex_t u_timedmutex; glwthread_timedrecmutex_t u_timedrecmutex; } u; } mtx_t; # else /* Use POSIX threads. */ typedef pthread_mutex_t mtx_t; # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_init, int, (mtx_t *, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mtx_init, int, (mtx_t *, int)); _GL_CXXALIASWARN (mtx_init); #elif defined GNULIB_POSIXCHECK # undef mtx_init # if HAVE_RAW_DECL_MTX_INIT _GL_WARN_ON_USE (mtx_init, "mtx_init is unportable - " "use gnulib module mtx for portability"); # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_lock, int, (mtx_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mtx_lock, int, (mtx_t *)); _GL_CXXALIASWARN (mtx_lock); #elif defined GNULIB_POSIXCHECK # undef mtx_lock # if HAVE_RAW_DECL_MTX_LOCK _GL_WARN_ON_USE (mtx_lock, "mtx_lock is unportable - " "use gnulib module mtx for portability"); # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_trylock, int, (mtx_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mtx_trylock, int, (mtx_t *)); _GL_CXXALIASWARN (mtx_trylock); #elif defined GNULIB_POSIXCHECK # undef mtx_trylock # if HAVE_RAW_DECL_MTX_TRYLOCK _GL_WARN_ON_USE (mtx_trylock, "mtx_trylock is unportable - " "use gnulib module mtx for portability"); # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_timedlock, int, (mtx_t *, const struct timespec *) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mtx_timedlock, int, (mtx_t *, const struct timespec *)); _GL_CXXALIASWARN (mtx_timedlock); #elif defined GNULIB_POSIXCHECK # undef mtx_timedlock # if HAVE_RAW_DECL_MTX_TIMEDLOCK _GL_WARN_ON_USE (mtx_timedlock, "mtx_timedlock is unportable - " "use gnulib module mtx for portability"); # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_unlock, int, (mtx_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mtx_unlock, int, (mtx_t *)); _GL_CXXALIASWARN (mtx_unlock); #elif defined GNULIB_POSIXCHECK # undef mtx_unlock # if HAVE_RAW_DECL_MTX_UNLOCK _GL_WARN_ON_USE (mtx_unlock, "mtx_unlock is unportable - " "use gnulib module mtx for portability"); # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (mtx_destroy, void, (mtx_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mtx_destroy, void, (mtx_t *)); _GL_CXXALIASWARN (mtx_destroy); #elif defined GNULIB_POSIXCHECK # undef mtx_destroy # if HAVE_RAW_DECL_MTX_DESTROY _GL_WARN_ON_USE (mtx_destroy, "mtx_destroy is unportable - " "use gnulib module mtx for portability"); # endif #endif /* =========== ISO C 11 7.26.2 Initialization functions =========== */ #if !@HAVE_THREADS_H@ /* Type that contains a flag for use by call_once. */ # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # include "windows-once.h" typedef glwthread_once_t once_flag; # define ONCE_FLAG_INIT GLWTHREAD_ONCE_INIT # else /* Use POSIX threads. */ typedef pthread_once_t once_flag; # define ONCE_FLAG_INIT PTHREAD_ONCE_INIT # endif #endif #if @GNULIB_MTX@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (call_once, void, (once_flag *, void (*) (void)) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS_CAST (call_once, void, (once_flag *, void (*) (void))); _GL_CXXALIASWARN (call_once); #elif defined GNULIB_POSIXCHECK # undef call_once # if HAVE_RAW_DECL_CALL_ONCE _GL_WARN_ON_USE (call_once, "call_once is unportable - " "use gnulib module mtx for portability"); # endif #endif /* =========== ISO C 11 7.26.3 Condition variable functions =========== */ #if !@HAVE_THREADS_H@ # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # include "windows-cond.h" typedef glwthread_cond_t cnd_t; # else /* Use POSIX threads. */ typedef pthread_cond_t cnd_t; # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_init, int, (cnd_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (cnd_init, int, (cnd_t *)); _GL_CXXALIASWARN (cnd_init); #elif defined GNULIB_POSIXCHECK # undef cnd_init # if HAVE_RAW_DECL_CND_INIT _GL_WARN_ON_USE (cnd_init, "cnd_init is unportable - " "use gnulib module cnd for portability"); # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_wait, int, (cnd_t *, mtx_t *) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (cnd_wait, int, (cnd_t *, mtx_t *)); _GL_CXXALIASWARN (cnd_wait); #elif defined GNULIB_POSIXCHECK # undef cnd_wait # if HAVE_RAW_DECL_CND_WAIT _GL_WARN_ON_USE (cnd_wait, "cnd_wait is unportable - " "use gnulib module cnd for portability"); # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_timedwait, int, (cnd_t *, mtx_t *, const struct timespec *) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (cnd_timedwait, int, (cnd_t *, mtx_t *, const struct timespec *)); _GL_CXXALIASWARN (cnd_timedwait); #elif defined GNULIB_POSIXCHECK # undef cnd_timedwait # if HAVE_RAW_DECL_CND_TIMEDWAIT _GL_WARN_ON_USE (cnd_timedwait, "cnd_timedwait is unportable - " "use gnulib module cnd for portability"); # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_signal, int, (cnd_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (cnd_signal, int, (cnd_t *)); _GL_CXXALIASWARN (cnd_signal); #elif defined GNULIB_POSIXCHECK # undef cnd_signal # if HAVE_RAW_DECL_CND_SIGNAL _GL_WARN_ON_USE (cnd_signal, "cnd_signal is unportable - " "use gnulib module cnd for portability"); # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_broadcast, int, (cnd_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (cnd_broadcast, int, (cnd_t *)); _GL_CXXALIASWARN (cnd_broadcast); #elif defined GNULIB_POSIXCHECK # undef cnd_broadcast # if HAVE_RAW_DECL_CND_BROADCAST _GL_WARN_ON_USE (cnd_broadcast, "cnd_broadcast is unportable - " "use gnulib module cnd for portability"); # endif #endif #if @GNULIB_CND@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (cnd_destroy, void, (cnd_t *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (cnd_destroy, void, (cnd_t *)); _GL_CXXALIASWARN (cnd_destroy); #elif defined GNULIB_POSIXCHECK # undef cnd_destroy # if HAVE_RAW_DECL_CND_DESTROY _GL_WARN_ON_USE (cnd_destroy, "cnd_destroy is unportable - " "use gnulib module cnd for portability"); # endif #endif /* =========== ISO C 11 7.26.6 Thread-specific storage functions =========== */ #if !@HAVE_THREADS_H@ # if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # include "windows-tls.h" typedef glwthread_tls_key_t tss_t; # define TSS_DTOR_ITERATIONS GLWTHREAD_DESTRUCTOR_ITERATIONS # else /* Use POSIX threads. */ # include <limits.h> typedef pthread_key_t tss_t; # endif /* Type for the destructor of a thread-specific storage pointer. */ typedef void (*tss_dtor_t) (void *); #endif /* AIX 7.1 <threads.h> does not define TSS_DTOR_ITERATIONS. */ #ifndef TSS_DTOR_ITERATIONS # ifdef PTHREAD_DESTRUCTOR_ITERATIONS # define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS # else /* IRIX 6.5 does not define PTHREAD_DESTRUCTOR_ITERATIONS. This value is a wild guess. */ # define TSS_DTOR_ITERATIONS 1 # endif #endif #if @GNULIB_TSS@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (tss_create, int, (tss_t *, tss_dtor_t) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (tss_create, int, (tss_t *, tss_dtor_t)); _GL_CXXALIASWARN (tss_create); #elif defined GNULIB_POSIXCHECK # undef tss_create # if HAVE_RAW_DECL_TSS_CREATE _GL_WARN_ON_USE (tss_create, "tss_create is unportable - " "use gnulib module tss for portability"); # endif #endif #if @GNULIB_TSS@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (tss_set, int, (tss_t, void *)); # endif _GL_CXXALIAS_SYS (tss_set, int, (tss_t, void *)); _GL_CXXALIASWARN (tss_set); #elif defined GNULIB_POSIXCHECK # undef tss_set # if HAVE_RAW_DECL_TSS_SET _GL_WARN_ON_USE (tss_set, "tss_set is unportable - " "use gnulib module tss for portability"); # endif #endif #if @GNULIB_TSS@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (tss_get, void *, (tss_t)); # endif _GL_CXXALIAS_SYS (tss_get, void *, (tss_t)); _GL_CXXALIASWARN (tss_get); #elif defined GNULIB_POSIXCHECK # undef tss_get # if HAVE_RAW_DECL_TSS_GET _GL_WARN_ON_USE (tss_get, "tss_get is unportable - " "use gnulib module tss for portability"); # endif #endif #if @GNULIB_TSS@ # if !@HAVE_THREADS_H@ _GL_FUNCDECL_SYS (tss_delete, void, (tss_t)); # endif _GL_CXXALIAS_SYS (tss_delete, void, (tss_t)); _GL_CXXALIASWARN (tss_delete); #elif defined GNULIB_POSIXCHECK # undef tss_delete # if HAVE_RAW_DECL_TSS_DELETE _GL_WARN_ON_USE (tss_delete, "tss_delete is unportable - " "use gnulib module tss for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_THREADS_H */ #endif /* _@GUARD_PREFIX@_THREADS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/time-internal.h���������������������������������������������������������0000664�0000000�0000000�00000003627�14110572173�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time internal interface Copyright 2015-2021 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 Paul Eggert. */ /* A time zone rule. */ struct tm_zone { /* More abbreviations, should they be needed. Their TZ_IS_SET members are zero. */ struct tm_zone *next; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE /* Copies of recent strings taken from tzname[0] and tzname[1]. The copies are in ABBRS, so that they survive tzset. Null if unknown. */ char *tzname_copy[2]; #endif /* If nonzero, the rule represents the TZ environment variable set to the first "abbreviation" (this may be the empty string). Otherwise, it represents an unset TZ. */ char tz_is_set; /* A sequence of null-terminated strings packed next to each other. The strings are followed by an extra null byte. If TZ_IS_SET, there must be at least one string and the first string (which is actually a TZ environment value) may be empty. Otherwise all strings must be nonempty. Abbreviations are stored here because otherwise the values of tm_zone and/or tzname would be dead after changing TZ and calling tzset. Abbreviations never move once allocated, and are live until tzfree is called. */ char abbrs[FLEXIBLE_ARRAY_MEMBER]; }; ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/time.in.h���������������������������������������������������������������0000664�0000000�0000000�00000040020�14110572173�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more-standard <time.h>. Copyright (C) 2007-2021 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* 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 incompatibly.) Also, Solaris 8 <time.h> eventually includes itself recursively; if that is happening, just include the system <time.h> without adding our own declarations. */ #if (((defined __need_time_t || defined __need_clock_t \ || defined __need_timespec) \ && !defined __MINGW32__) \ || defined _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ # if defined __MINGW32__ # include <unistd.h> # endif # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* NetBSD 5.0 mis-defines NULL. */ # include <stddef.h> /* 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. */ /* Some systems don't define struct timespec (e.g., AIX 4.1). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in <pthread.h>. */ # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ # if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ # include <sys/time.h> # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include <pthread.h> # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ # include <unistd.h> # else # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_timespec # undef timespec # define timespec rpl_timespec struct timespec { time_t tv_sec; long int tv_nsec; }; # define GNULIB_defined_struct_timespec 1 # endif # ifdef __cplusplus } # endif # endif # endif # if !GNULIB_defined_struct_time_t_must_be_integral /* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ struct __time_t_must_be_integral { unsigned int __floating_time_t_unsupported : (time_t) 1; }; # define GNULIB_defined_struct_time_t_must_be_integral 1 # endif /* Define TIME_UTC, a positive integer constant used for timespec_get(). */ # if ! @TIME_H_DEFINES_TIME_UTC@ # if !GNULIB_defined_TIME_UTC # define TIME_UTC 1 # define GNULIB_defined_TIME_UTC 1 # endif # endif /* Set *TS to the current time, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GET@ # if ! @HAVE_TIMESPEC_GET@ _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); _GL_CXXALIASWARN (timespec_get); # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define nanosleep rpl_nanosleep # endif _GL_FUNCDECL_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # else # if ! @HAVE_NANOSLEEP@ _GL_FUNCDECL_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); # endif /* Initialize time conversion information. */ # if @GNULIB_TZSET@ # if @REPLACE_TZSET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset rpl_tzset # endif _GL_FUNCDECL_RPL (tzset, void, (void)); _GL_CXXALIAS_RPL (tzset, void, (void)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # elif @GNULIB_MDA_TZSET@ /* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tzset always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # endif /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mktime rpl_mktime # endif _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime_r # define localtime_r rpl_localtime_r # endif _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (localtime_r); # endif # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime_r # define gmtime_r rpl_gmtime_r # endif _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); # endif # endif # if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime # define gmtime rpl_gmtime # endif _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (gmtime); # endif /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ # if @GNULIB_CTIME@ # if @REPLACE_CTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); # else _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ctime); # endif # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ # if @GNULIB_STRFTIME@ # if @REPLACE_STRFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strftime rpl_strftime # endif _GL_FUNCDECL_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # else _GL_CXXALIAS_SYS (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strftime); # endif # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ /* Functions that use a first-class time zone data type, instead of relying on an implicit global time zone. Inspired by NetBSD. */ /* Represents a time zone. (timezone_t) NULL stands for UTC. */ typedef struct tm_zone *timezone_t; /* tzalloc (name) Returns a time zone object for the given time zone NAME. This object represents the time zone that other functions would use it the TZ environment variable was set to NAME. If NAME is NULL, the result represents the time zone that other functions would use it the TZ environment variable was unset. May return NULL if NAME is invalid (this is platform dependent) or upon memory allocation failure. */ _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); /* tzfree (tz) Frees a time zone object. The argument must have been returned by tzalloc(). */ _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); /* localtime_rz (tz, &t, &result) Converts an absolute time T to a broken-down time RESULT, assuming the time zone TZ. This function is like 'localtime_r', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result)); /* mktime_z (tz, &tm) Normalizes the broken-down time TM and converts it to an absolute time, assuming the time zone TZ. Returns the absolute time. This function is like 'mktime', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm)); /* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' in the 'tm_zone' member of 'struct tm') are valid as long as - the 'struct tm' argument is not destroyed or overwritten, and - the 'timezone_t' argument is not freed through tzfree(). */ # endif /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timegm # define timegm rpl_timegm # endif _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); # else # if ! @HAVE_TIMEGM@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif _GL_CXXALIASWARN (timegm); # endif /* Encourage applications to avoid unsafe functions that can overrun buffers when given outlandish struct tm values. Portable applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef asctime_r _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime_r _GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/time_r.c����������������������������������������������������������������0000664�0000000�0000000�00000002335�14110572173�0016473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant time functions like localtime_r. Copyright (C) 2003, 2006-2007, 2010-2021 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. */ #include <config.h> #include <time.h> static struct tm * copy_tm_result (struct tm *dest, struct tm const *src) { if (! src) return 0; *dest = *src; return dest; } struct tm * gmtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, gmtime (t)); } struct tm * localtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, localtime (t)); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/time_rz.c���������������������������������������������������������������0000664�0000000�0000000�00000020652�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time zone functions such as tzalloc and localtime_rz Copyright 2015-2021 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 Paul Eggert. */ /* Although this module is not thread-safe, any races should be fairly rare and reasonably benign. For complete thread-safety, use a C library with a working timezone_t type, so that this module is not needed. */ #include <config.h> #include <time.h> #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "flexmember.h" #include "idx.h" #include "time-internal.h" /* The approximate size to use for small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger only in the unlikely case where an abbreviation longer than this is used. */ enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; /* Magic cookie timezone_t value, for local time. It differs from NULL and from all other timezone_t values. Only the address matters; the pointer is never dereferenced. */ static timezone_t const local_tz = (timezone_t) 1; /* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this includes its trailing null byte). Append an extra null byte to mark the end of ABBRS. */ static void extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) { memcpy (abbrs, abbr, abbr_size); abbrs[abbr_size] = '\0'; } /* Return a newly allocated time zone for NAME, or NULL on failure. A null NAME stands for wall clock time (which is like unset TZ). */ timezone_t tzalloc (char const *name) { size_t name_size = name ? strlen (name) + 1 : 0; size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1; timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size)); if (tz) { tz->next = NULL; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE tz->tzname_copy[0] = tz->tzname_copy[1] = NULL; #endif tz->tz_is_set = !!name; tz->abbrs[0] = '\0'; if (name) extend_abbrs (tz->abbrs, name, name_size); } return tz; } /* Save into TZ any nontrivial time zone abbreviation used by TM, and update *TM (if HAVE_STRUCT_TM_TM_ZONE) or *TZ (if !HAVE_STRUCT_TM_TM_ZONE && HAVE_TZNAME) if they use the abbreviation. Return true if successful, false (setting errno) otherwise. */ static bool save_abbr (timezone_t tz, struct tm *tm) { #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME char const *zone = NULL; char *zone_copy = (char *) ""; # if HAVE_TZNAME int tzname_index = -1; # endif # if HAVE_STRUCT_TM_TM_ZONE zone = tm->tm_zone; # endif # if HAVE_TZNAME if (! (zone && *zone) && 0 <= tm->tm_isdst) { tzname_index = tm->tm_isdst != 0; zone = tzname[tzname_index]; } # endif /* No need to replace null zones, or zones within the struct tm. */ if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1))) return true; if (*zone) { zone_copy = tz->abbrs; while (strcmp (zone_copy, zone) != 0) { if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) { idx_t zone_size = strlen (zone) + 1; if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) extend_abbrs (zone_copy, zone, zone_size); else { tz = tz->next = tzalloc (zone); if (!tz) return false; tz->tz_is_set = 0; zone_copy = tz->abbrs; } break; } zone_copy += strlen (zone_copy) + 1; if (!*zone_copy && tz->next) { tz = tz->next; zone_copy = tz->abbrs; } } } /* Replace the zone name so that its lifetime matches that of TZ. */ # if HAVE_STRUCT_TM_TM_ZONE tm->tm_zone = zone_copy; # else if (0 <= tzname_index) tz->tzname_copy[tzname_index] = zone_copy; # endif #endif return true; } /* Free a time zone. */ void tzfree (timezone_t tz) { if (tz != local_tz) while (tz) { timezone_t next = tz->next; free (tz); tz = next; } } /* Get and set the TZ environment variable. These functions can be overridden by programs like Emacs that manage their own environment. */ #ifndef getenv_TZ static char * getenv_TZ (void) { return getenv ("TZ"); } #endif #ifndef setenv_TZ static int setenv_TZ (char const *tz) { return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ"); } #endif /* Change the environment to match the specified timezone_t value. Return true if successful, false (setting errno) otherwise. */ static bool change_env (timezone_t tz) { if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0) return false; tzset (); return true; } /* Temporarily set the time zone to TZ, which must not be null. Return LOCAL_TZ if the time zone setting is already correct. Otherwise return a newly allocated time zone representing the old setting, or NULL (setting errno) on failure. */ static timezone_t set_tz (timezone_t tz) { char *env_tz = getenv_TZ (); if (env_tz ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0 : !tz->tz_is_set) return local_tz; else { timezone_t old_tz = tzalloc (env_tz); if (!old_tz) return old_tz; if (! change_env (tz)) { int saved_errno = errno; tzfree (old_tz); errno = saved_errno; return NULL; } return old_tz; } } /* Restore an old setting returned by set_tz. It must not be null. Return true (preserving errno) if successful, false (setting errno) otherwise. */ static bool revert_tz (timezone_t tz) { if (tz == local_tz) return true; else { int saved_errno = errno; bool ok = change_env (tz); if (!ok) saved_errno = errno; tzfree (tz); errno = saved_errno; return ok; } } /* Use time zone TZ to compute localtime_r (T, TM). */ struct tm * localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) { #ifdef HAVE_LOCALTIME_INFLOOP_BUG /* The -67768038400665599 comes from: https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html On affected platforms the greatest POSIX-compatible time_t value that could return nonnull is 67768036191766798 (when TZ="XXX24:59:59" it resolves to the year 2**31 - 1 + 1900, on 12-31 at 23:59:59), so test for that too while we're in the neighborhood. */ if (! (-67768038400665599 <= *t && *t <= 67768036191766798)) { errno = EOVERFLOW; return NULL; } #endif if (!tz) return gmtime_r (t, tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm); if (revert_tz (old_tz) && abbr_saved) return tm; } return NULL; } } /* Use time zone TZ to compute mktime (TM). */ time_t mktime_z (timezone_t tz, struct tm *tm) { if (!tz) return timegm (tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { struct tm tm_1; tm_1.tm_sec = tm->tm_sec; tm_1.tm_min = tm->tm_min; tm_1.tm_hour = tm->tm_hour; tm_1.tm_mday = tm->tm_mday; tm_1.tm_mon = tm->tm_mon; tm_1.tm_year = tm->tm_year; tm_1.tm_yday = -1; tm_1.tm_isdst = tm->tm_isdst; time_t t = mktime (&tm_1); bool ok = 0 <= tm_1.tm_yday; #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME ok = ok && save_abbr (tz, &tm_1); #endif if (revert_tz (old_tz) && ok) { *tm = tm_1; return t; } } return -1; } } ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timegm.c����������������������������������������������������������������0000664�0000000�0000000�00000002664�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. Copyright (C) 1994-2021 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 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 _LIBC # include <libc-config.h> #endif #include <time.h> #include <errno.h> #include "mktime-internal.h" __time64_t __timegm64 (struct tm *tmp) { static mktime_offset_t gmtime_offset; tmp->tm_isdst = 0; return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset); } #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__timegm64) time_t timegm (struct tm *tmp) { struct tm tm = *tmp; __time64_t t = __timegm64 (&tm); if (in_time_t_range (t)) { *tmp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/times.c�����������������������������������������������������������������0000664�0000000�0000000�00000004121�14110572173�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get process times Copyright (C) 2008-2021 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> /* Get times prototype. */ #include <sys/times.h> /* Get round. */ #include <math.h> /* Get GetProcessTimes etc. */ #include <windows.h> static clock_t filetime2clock (FILETIME time) { float f; /* We have a 64-bit value, in the form of two DWORDS aka unsigned int, counting the number of 100-nanosecond intervals. We need to convert these to clock ticks. Older POSIX uses CLK_TCK to indicate the number of clock ticks per second while modern POSIX uses sysconf(_SC_CLK_TCK). Mingw32 does not appear to have sysconf(_SC_CLK_TCK), but appears to have CLK_TCK = 1000 so we use it. Note that CLOCKS_PER_SEC constant does not apply here, it is for use with the clock function. */ f = (unsigned long long) time.dwHighDateTime << 32; f += time.dwLowDateTime; f = f * CLK_TCK / 10000000; return (clock_t) round (f); } clock_t times (struct tms * buffer) { FILETIME creation_time, exit_time, kernel_time, user_time; if (GetProcessTimes (GetCurrentProcess (), &creation_time, &exit_time, &kernel_time, &user_time) == 0) return (clock_t) -1; buffer->tms_utime = filetime2clock (user_time); buffer->tms_stime = filetime2clock (kernel_time); buffer->tms_cutime = 0; buffer->tms_cstime = 0; return clock (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timespec-add.c����������������������������������������������������������0000664�0000000�0000000�00000003222�14110572173�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Add two struct timespec values. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* Return the sum of two timespec values A and B. On overflow, return an extremal value. This assumes 0 <= tv_nsec < TIMESPEC_HZ. */ #include <config.h> #include "timespec.h" #include "intprops.h" struct timespec timespec_add (struct timespec a, struct timespec b) { time_t rs = a.tv_sec; time_t bs = b.tv_sec; int ns = a.tv_nsec + b.tv_nsec; int nsd = ns - TIMESPEC_HZ; int rns = ns; if (0 <= nsd) { rns = nsd; time_t bs1; if (!INT_ADD_WRAPV (bs, 1, &bs1)) bs = bs1; else if (rs < 0) rs++; else goto high_overflow; } if (INT_ADD_WRAPV (rs, bs, &rs)) { if (bs < 0) { rs = TYPE_MINIMUM (time_t); rns = 0; } else { high_overflow: rs = TYPE_MAXIMUM (time_t); rns = TIMESPEC_HZ - 1; } } return make_timespec (rs, rns); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timespec-sub.c����������������������������������������������������������0000664�0000000�0000000�00000003253�14110572173�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Subtract two struct timespec values. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* Return the difference between two timespec values A and B. On overflow, return an extremal value. This assumes 0 <= tv_nsec < TIMESPEC_HZ. */ #include <config.h> #include "timespec.h" #include "intprops.h" struct timespec timespec_sub (struct timespec a, struct timespec b) { time_t rs = a.tv_sec; time_t bs = b.tv_sec; int ns = a.tv_nsec - b.tv_nsec; int rns = ns; if (ns < 0) { rns = ns + TIMESPEC_HZ; time_t bs1; if (!INT_ADD_WRAPV (bs, 1, &bs1)) bs = bs1; else if (- TYPE_SIGNED (time_t) < rs) rs--; else goto low_overflow; } if (INT_SUBTRACT_WRAPV (rs, bs, &rs)) { if (0 < bs) { low_overflow: rs = TYPE_MINIMUM (time_t); rns = 0; } else { rs = TYPE_MAXIMUM (time_t); rns = TIMESPEC_HZ - 1; } } return make_timespec (rs, rns); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timespec.c��������������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <timespec.h>. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE #include "timespec.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timespec.h��������������������������������������������������������������0000664�0000000�0000000�00000005400�14110572173�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* timespec -- System time interface Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2021 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/>. */ #if ! defined TIMESPEC_H #define TIMESPEC_H #include <time.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_TIMESPEC_INLINE # define _GL_TIMESPEC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #include "arg-nonnull.h" /* Inverse resolution of timespec timestamps (in units per second), and log base 10 of the inverse resolution. */ enum { TIMESPEC_HZ = 1000000000 }; enum { LOG10_TIMESPEC_HZ = 9 }; /* Obsolescent names for backward compatibility. They are misnomers, because TIMESPEC_RESOLUTION is not a resolution. */ enum { TIMESPEC_RESOLUTION = TIMESPEC_HZ }; enum { LOG10_TIMESPEC_RESOLUTION = LOG10_TIMESPEC_HZ }; /* Return a timespec with seconds S and nanoseconds NS. */ _GL_TIMESPEC_INLINE struct timespec make_timespec (time_t s, long int ns) { struct timespec r; r.tv_sec = s; r.tv_nsec = ns; return r; } /* Return negative, zero, positive if A < B, A == B, A > B, respectively. */ _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE timespec_cmp (struct timespec a, struct timespec b) { return 2 * _GL_CMP (a.tv_sec, b.tv_sec) + _GL_CMP (a.tv_nsec, b.tv_nsec); } /* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be nonnegative. */ _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE timespec_sign (struct timespec a) { return _GL_CMP (a.tv_sec, 0) + (!a.tv_sec & !!a.tv_nsec); } struct timespec timespec_add (struct timespec, struct timespec) _GL_ATTRIBUTE_CONST; struct timespec timespec_sub (struct timespec, struct timespec) _GL_ATTRIBUTE_CONST; struct timespec dtotimespec (double) _GL_ATTRIBUTE_CONST; /* Return an approximation to A, of type 'double'. */ _GL_TIMESPEC_INLINE double timespectod (struct timespec a) { return a.tv_sec + a.tv_nsec / 1e9; } struct timespec current_timespec (void); void gettime (struct timespec *) _GL_ARG_NONNULL ((1)); int settime (struct timespec const *) _GL_ARG_NONNULL ((1)); #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timespec_get.c����������������������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* timespec_get() function. Copyright (C) 2021 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/>. */ #include <config.h> /* Specification. */ #include <time.h> #include "timespec.h" int timespec_get (struct timespec *ts, int base) { if (base == TIME_UTC) { gettime (ts); return base; } return 0; } ������������������������������������������������������gnulib-20210822~d383792/lib/timevar.c���������������������������������������������������������������0000664�0000000�0000000�00000022467�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timing variables for measuring compiler performance. Copyright (C) 2000, 2002, 2004, 2006, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Alex Samuel <samuel@codesourcery.com> This 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> /* Specification. */ #include "timevar.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/resource.h> #include <sys/time.h> #include <sys/times.h> #include "gethrxtime.h" #include "gettext.h" #define _(msgid) gettext (msgid) #include "xalloc.h" /* See timevar.h for an explanation of timing variables. */ int timevar_enabled = 0; /* A timing variable. */ struct timevar_def { /* Elapsed time for this variable. */ struct timevar_time_def elapsed; /* If this variable is timed independently of the timing stack, using timevar_start, this contains the start time. */ struct timevar_time_def start_time; /* The name of this timing variable. */ const char *name; /* Non-zero if this timing variable is running as a standalone timer. */ unsigned standalone : 1; /* Non-zero if this timing variable was ever started or pushed onto the timing stack. */ unsigned used : 1; }; /* An element on the timing stack. Elapsed time is attributed to the topmost timing variable on the stack. */ struct timevar_stack_def { /* The timing variable at this stack level. */ struct timevar_def *timevar; /* The next lower timing variable context in the stack. */ struct timevar_stack_def *next; }; /* Declared timing variables. Constructed from the contents of timevar.def. */ static struct timevar_def timevars[TIMEVAR_LAST]; /* The top of the timing stack. */ static struct timevar_stack_def *stack; /* A list of unused (i.e. allocated and subsequently popped) timevar_stack_def instances. */ static struct timevar_stack_def *unused_stack_instances; /* The time at which the topmost element on the timing stack was pushed. Time elapsed since then is attributed to the topmost element. */ static struct timevar_time_def start_time; /* Fill the current times into TIME. */ static void set_to_current_time (struct timevar_time_def *now) { now->user = 0; now->sys = 0; now->wall = 0; if (!timevar_enabled) return; struct rusage self; getrusage (RUSAGE_SELF, &self); struct rusage chld; getrusage (RUSAGE_CHILDREN, &chld); now->user = xtime_make (self.ru_utime.tv_sec + chld.ru_utime.tv_sec, (self.ru_utime.tv_usec + chld.ru_utime.tv_usec) * 1000); now->sys = xtime_make (self.ru_stime.tv_sec + chld.ru_stime.tv_sec, (self.ru_stime.tv_usec + chld.ru_stime.tv_usec) * 1000); now->wall = gethrxtime(); } /* Return the current time. */ static struct timevar_time_def get_current_time (void) { struct timevar_time_def now; set_to_current_time (&now); return now; } /* Add the difference between STOP and START to TIMER. */ static void timevar_accumulate (struct timevar_time_def *timer, const struct timevar_time_def *start, const struct timevar_time_def *stop) { timer->user += stop->user - start->user; timer->sys += stop->sys - start->sys; timer->wall += stop->wall - start->wall; } void timevar_init () { if (!timevar_enabled) return; /* Zero all elapsed times. */ memset ((void *) timevars, 0, sizeof (timevars)); /* Initialize the names of timing variables. */ #define DEFTIMEVAR(identifier__, name__) \ timevars[identifier__].name = name__; #include "timevar.def" #undef DEFTIMEVAR } void timevar_push (timevar_id_t timevar) { if (!timevar_enabled) return; struct timevar_def *tv = &timevars[timevar]; /* Mark this timing variable as used. */ tv->used = 1; /* Can't push a standalone timer. */ if (tv->standalone) abort (); /* What time is it? */ struct timevar_time_def const now = get_current_time (); /* If the stack isn't empty, attribute the current elapsed time to the old topmost element. */ if (stack) timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to TIMEVAR. */ start_time = now; /* See if we have a previously-allocated stack instance. If so, take it off the list. If not, malloc a new one. */ struct timevar_stack_def *context = NULL; if (unused_stack_instances != NULL) { context = unused_stack_instances; unused_stack_instances = unused_stack_instances->next; } else context = (struct timevar_stack_def *) xmalloc (sizeof (struct timevar_stack_def)); /* Fill it in and put it on the stack. */ context->timevar = tv; context->next = stack; stack = context; } void timevar_pop (timevar_id_t timevar) { if (!timevar_enabled) return; if (&timevars[timevar] != stack->timevar) abort (); /* What time is it? */ struct timevar_time_def const now = get_current_time (); /* Attribute the elapsed time to the element we're popping. */ struct timevar_stack_def *popped = stack; timevar_accumulate (&popped->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to the element just exposed on the stack. */ start_time = now; /* Take the item off the stack. */ stack = stack->next; /* Don't delete the stack element; instead, add it to the list of unused elements for later use. */ popped->next = unused_stack_instances; unused_stack_instances = popped; } void timevar_start (timevar_id_t timevar) { if (!timevar_enabled) return; struct timevar_def *tv = &timevars[timevar]; /* Mark this timing variable as used. */ tv->used = 1; /* Don't allow the same timing variable to be started more than once. */ if (tv->standalone) abort (); tv->standalone = 1; set_to_current_time (&tv->start_time); } void timevar_stop (timevar_id_t timevar) { if (!timevar_enabled) return; struct timevar_def *tv = &timevars[timevar]; /* TIMEVAR must have been started via timevar_start. */ if (!tv->standalone) abort (); struct timevar_time_def const now = get_current_time (); timevar_accumulate (&tv->elapsed, &tv->start_time, &now); } void timevar_get (timevar_id_t timevar, struct timevar_time_def *elapsed) { struct timevar_def *tv = &timevars[timevar]; *elapsed = tv->elapsed; /* Is TIMEVAR currently running as a standalone timer? */ if (tv->standalone) { struct timevar_time_def const now = get_current_time (); timevar_accumulate (elapsed, &tv->start_time, &now); } /* Or is TIMEVAR at the top of the timer stack? */ else if (stack->timevar == tv) { struct timevar_time_def const now = get_current_time (); timevar_accumulate (elapsed, &start_time, &now); } } void timevar_print (FILE *fp) { if (!timevar_enabled) return; /* Update timing information in case we're calling this from GDB. */ if (fp == 0) fp = stderr; /* What time is it? */ struct timevar_time_def const now = get_current_time (); /* If the stack isn't empty, attribute the current elapsed time to the old topmost element. */ if (stack) timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to TIMEVAR. */ start_time = now; struct timevar_time_def const* total = &timevars[tv_total].elapsed; fprintf (fp, "%-22s\n", _("Execution times (seconds)")); fprintf (fp, " %-22s %-13s %-13s %-16s\n", "", _("CPU user"), _("CPU system"), _("wall clock")); for (unsigned /* timevar_id_t */ id = 0; id < (unsigned) TIMEVAR_LAST; ++id) { /* Don't print the total execution time here; that goes at the end. */ if ((timevar_id_t) id == tv_total) continue; /* Don't print timing variables that were never used. */ struct timevar_def *tv = &timevars[(timevar_id_t) id]; if (!tv->used) continue; /* Percentages. */ const int usr = total->user ? tv->elapsed.user * 100 / total->user : 0; const int sys = total->sys ? tv->elapsed.sys * 100 / total->sys : 0; const int wall = total->wall ? tv->elapsed.wall * 100 / total->wall : 0; /* Ignore insignificant lines. */ if (!usr && !sys && !wall) continue; fprintf (fp, " %-22s", tv->name); fprintf (fp, "%8.3f (%2d%%)", tv->elapsed.user * 1e-9, usr); fprintf (fp, "%8.3f (%2d%%)", tv->elapsed.sys * 1e-9, sys); fprintf (fp, "%11.6f (%2d%%)\n", tv->elapsed.wall * 1e-9, wall); } /* Print total time. */ fprintf (fp, " %-22s", timevars[tv_total].name); fprintf (fp, "%8.3f ", total->user * 1e-9); fprintf (fp, "%8.3f ", total->sys * 1e-9); fprintf (fp, "%11.6f\n", total->wall * 1e-9); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timevar.def�������������������������������������������������������������0000664�0000000�0000000�00000003615�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file contains the definitions for timing variables used to -*- C -*- measure run-time performance of the compiler. Copyright (C) 2002, 2007, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Akim Demaille <akim@freefriends.org>. This 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/>. */ /* This file contains the list of timing variable definitions, used by timevar.h and timevar.c. Syntax: DEFTIMEVAR (Id, Name) where: - Id is the value used to identify the timing variable. It's an enum value, i.e., behaves like a nonnegative integer. It is used only the manipulate the timer: the user of the program will never see this identifier. - Name is a string describing its purpose. This string will be presented to the user in the timing tables. It does not need to be a literal, you may for instance use gettext. The order of this list matters: that is the order in which the timing table is printed, except that 'tv_total' is printed last. */ /* The total execution time. Mandatory. */ DEFTIMEVAR (tv_total, "total time") /* Examples. */ DEFTIMEVAR (tv_read, "read") DEFTIMEVAR (tv_work, "work") DEFTIMEVAR (tv_work_1, "work: phase 1") DEFTIMEVAR (tv_work_2, "work: phase 2") DEFTIMEVAR (tv_output, "output") �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/timevar.h���������������������������������������������������������������0000664�0000000�0000000�00000010576�14110572173�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timing variables for measuring application performance. Copyright (C) 2000, 2002, 2004, 2009-2015, 2018-2021 Free Software Foundation, Inc. Contributed by Alex Samuel <samuel@codesourcery.com> This 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 _TIMEVAR_H # define _TIMEVAR_H 1 # include <stdio.h> # include "xtime.h" # ifdef __cplusplus extern "C" { # endif /* Timing variables are used to measure elapsed time in various portions of the application. Each measures elapsed user, system, and wall-clock time, as appropriate to and supported by the host system. Timing variables are defined using the DEFTIMEVAR macro in timevar.def. Each has an enumeral identifier, used when referring to the timing variable in code, and a character string name. Timing variables can be used in two ways: - On the timing stack, using timevar_push and timevar_pop. Timing variables may be pushed onto the stack; elapsed time is attributed to the topmost timing variable on the stack. When another variable is pushed on, the previous topmost variable is 'paused' until the pushed variable is popped back off. - As a standalone timer, using timevar_start and timevar_stop. All time elapsed between the two calls is attributed to the variable. */ /* This structure stores the various varieties of time that can be measured. Times are stored in seconds. The time may be an absolute time or a time difference; in the former case, the time base is undefined, except that the difference between two times produces a valid time difference. */ struct timevar_time_def { /* User time in this process. */ xtime_t user; /* System time (if applicable for this host platform) in this process. */ xtime_t sys; /* Wall clock time. */ xtime_t wall; }; /* An enumeration of timing variable identifiers. Constructed from the contents of timevar.def. */ #define DEFTIMEVAR(identifier__, name__) \ identifier__, typedef enum { #include "timevar.def" TIMEVAR_LAST } timevar_id_t; #undef DEFTIMEVAR /* Initialize timing variables. */ void timevar_init (void); /* Push TIMEVAR onto the timing stack. No further elapsed time is attributed to the previous topmost timing variable on the stack; subsequent elapsed time is attributed to TIMEVAR, until it is popped or another element is pushed on top. TIMEVAR cannot be running as a standalone timer. */ void timevar_push (timevar_id_t timevar); /* Pop the topmost timing variable element off the timing stack. The popped variable must be TIMEVAR. Elapsed time since the that element was pushed on, or since it was last exposed on top of the stack when the element above it was popped off, is credited to that timing variable. */ void timevar_pop (timevar_id_t timevar); /* Start timing TIMEVAR independently of the timing stack. Elapsed time until timevar_stop is called for the same timing variable is attributed to TIMEVAR. */ void timevar_start (timevar_id_t timevar); /* Stop timing TIMEVAR. Time elapsed since timevar_start was called is attributed to it. */ void timevar_stop (timevar_id_t timevar); /* Fill the elapsed time for TIMEVAR into ELAPSED. Returns update-to-date information even if TIMEVAR is currently running. */ void timevar_get (timevar_id_t timevar, struct timevar_time_def *elapsed); /* Summarize timing variables to FP. The timing variable TV_TOTAL has a special meaning -- it's considered to be the total elapsed time, for normalizing the others, and is displayed last. */ void timevar_print (FILE *fp); /* Set to to nonzero to enable timing variables. All the timevar functions make an early exit if timevar is disabled. */ extern int timevar_enabled; # ifdef __cplusplus } # endif #endif /* ! _TIMEVAR_H */ ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tmpdir.c����������������������������������������������������������������0000664�0000000�0000000�00000010344�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1999, 2001-2002, 2006, 2009-2021 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 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/>. */ /* Extracted from sysdeps/posix/tempname.c. */ #include <config.h> /* Specification. */ #include "tmpdir.h" #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <errno.h> #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif #include <stdio.h> #ifndef P_tmpdir # ifdef _P_tmpdir /* native Windows */ # define P_tmpdir _P_tmpdir # else # define P_tmpdir "/tmp" # endif #endif #include <sys/stat.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #include "pathmax.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef GetTempPath # define GetTempPath GetTempPathA #endif #if _LIBC # define struct_stat64 struct stat64 #else # define struct_stat64 struct stat # define __libc_secure_getenv secure_getenv # define __xstat64(version, path, buf) stat (path, buf) #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. */ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else /* Unix */ # define ISSLASH(C) ((C) == '/') #endif /* Return nonzero if DIR is an existent directory. */ static bool direxists (const char *dir) { struct_stat64 buf; return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); } /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir) { const char *d; size_t dlen, plen; bool add_slash; if (!pfx || !pfx[0]) { pfx = "file"; plen = 4; } else { plen = strlen (pfx); if (plen > 5) plen = 5; } if (try_tmpdir) { d = __libc_secure_getenv ("TMPDIR"); if (d != NULL && direxists (d)) dir = d; else if (dir != NULL && direxists (dir)) /* nothing */ ; else dir = NULL; } if (dir == NULL) { #if defined _WIN32 && ! defined __CYGWIN__ char dirbuf[PATH_MAX]; DWORD retval; /* Find Windows temporary file directory. We try this before P_tmpdir because Windows defines P_tmpdir to "\\" and will therefore try to put all temporary files in the root directory (unless $TMPDIR is set). */ retval = GetTempPath (PATH_MAX, dirbuf); if (retval > 0 && retval < PATH_MAX && direxists (dirbuf)) dir = dirbuf; else #endif if (direxists (P_tmpdir)) dir = P_tmpdir; else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) dir = "/tmp"; else { __set_errno (ENOENT); return -1; } } dlen = strlen (dir); #ifdef __VMS add_slash = 0; #else add_slash = dlen != 0 && !ISSLASH (dir[dlen - 1]); #endif /* check we have room for "${dir}/${pfx}XXXXXX\0" */ if (tmpl_len < dlen + add_slash + plen + 6 + 1) { __set_errno (EINVAL); return -1; } memcpy (tmpl, dir, dlen); sprintf (tmpl + dlen, &"/%.*sXXXXXX"[!add_slash], (int) plen, pfx); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tmpdir.h����������������������������������������������������������������0000664�0000000�0000000�00000002377�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a temporary directory. Copyright (C) 2001-2002, 2009-2021 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/>. */ #include <stdbool.h> #include <stddef.h> /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ extern int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tmpfile-safer.c���������������������������������������������������������0000664�0000000�0000000�00000003531�14110572173�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke tmpfile, but avoid some glitches. Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake, based on ideas from Paul Eggert. */ #include <config.h> #include "stdio-safer.h" #include <errno.h> #include <unistd.h> #include "unistd-safer.h" #include "binary-io.h" /* Like tmpfile, but do not return stdin, stdout, or stderr. Remember that tmpfile can leave files behind if your program calls _exit, so this function should not be mixed with the close_stdout module. */ FILE * tmpfile_safer (void) { FILE *fp = tmpfile (); if (fp) { int fd = fileno (fp); if (0 <= fd && fd <= STDERR_FILENO) { int f = dup_safer (fd); if (f < 0) { int e = errno; fclose (fp); errno = e; return NULL; } /* Keep the temporary file in binary mode, on platforms where that matters. */ if (fclose (fp) != 0 || ! (fp = fdopen (f, O_BINARY ? "wb+" : "w+"))) { int e = errno; close (f); errno = e; return NULL; } } } return fp; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tmpfile.c���������������������������������������������������������������0000664�0000000�0000000�00000011462�14110572173�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a temporary file. Copyright (C) 2007, 2009-2021 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 Ben Pfaff. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <stdbool.h> #if defined _WIN32 && ! defined __CYGWIN__ /* A native Windows platform. */ # include <fcntl.h> # include <string.h> # include <sys/stat.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #else # include <unistd.h> #endif #include "pathmax.h" #include "tempname.h" #include "tmpdir.h" /* PATH_MAX is guaranteed to be defined, because this replacement is only used on native Windows and Android. */ #if defined _WIN32 && ! defined __CYGWIN__ /* A native Windows platform. */ /* Don't assume that UNICODE is not defined. */ # undef OSVERSIONINFO # define OSVERSIONINFO OSVERSIONINFOA # undef GetVersionEx # define GetVersionEx GetVersionExA # undef GetTempPath # define GetTempPath GetTempPathA /* On Windows, opening a file with _O_TEMPORARY has the effect of passing the FILE_FLAG_DELETE_ON_CLOSE flag to CreateFile(), which has the effect of deleting the file when it is closed - even when the program crashes. But (according to the Cygwin sources) it works only on Windows NT or newer. So we cache the info whether we are running on Windows NT or newer. */ static bool supports_delete_on_close () { static int known; /* 1 = yes, -1 = no, 0 = unknown */ if (!known) { OSVERSIONINFO v; /* According to <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getversionexa> this structure must be initialized as follows: */ v.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (GetVersionEx (&v)) known = (v.dwPlatformId == VER_PLATFORM_WIN32_NT ? 1 : -1); else known = -1; } return (known > 0); } FILE * tmpfile (void) { char dir[PATH_MAX]; DWORD retval; /* Find Windows temporary file directory. We provide this as the directory argument to path_search because Windows defines P_tmpdir to "\\" and will therefore try to put all temporary files in the root directory (unless $TMPDIR is set). */ retval = GetTempPath (PATH_MAX, dir); if (retval > 0 && retval < PATH_MAX) { char xtemplate[PATH_MAX]; if (path_search (xtemplate, PATH_MAX, dir, NULL, true) >= 0) { size_t len = strlen (xtemplate); int o_temporary = (supports_delete_on_close () ? _O_TEMPORARY : 0); int fd; do { memcpy (&xtemplate[len - 6], "XXXXXX", 6); if (gen_tempname (xtemplate, 0, 0, GT_NOCREATE) < 0) { fd = -1; break; } fd = _open (xtemplate, _O_CREAT | _O_EXCL | o_temporary | _O_RDWR | _O_BINARY, _S_IREAD | _S_IWRITE); } while (fd < 0 && errno == EEXIST); if (fd >= 0) { FILE *fp = _fdopen (fd, "w+b"); if (fp != NULL) return fp; else { int saved_errno = errno; _close (fd); errno = saved_errno; } } } } else { if (retval > 0) errno = ENAMETOOLONG; else /* Ideally this should translate GetLastError () to an errno value. */ errno = ENOENT; } return NULL; } #else FILE * tmpfile (void) { char buf[PATH_MAX]; int fd; FILE *fp; /* Try $TMPDIR first, not /tmp nor P_tmpdir, because we need this replacement on Android, and /tmp does not exist on Android. */ if (path_search (buf, sizeof buf, NULL, "tmpf", true)) return NULL; fd = gen_tempname (buf, 0, 0, GT_FILE); if (fd < 0) return NULL; /* Note that this relies on the Unix semantics that a file is not really removed until it is closed. */ (void) unlink (buf); if ((fp = fdopen (fd, "w+b")) == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/towctrans-impl.h��������������������������������������������������������0000664�0000000�0000000�00000001625�14110572173�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a wide character using a case mapping. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ wint_t towctrans (wint_t wc, wctrans_t desc) { return ((wint_t (*) (wint_t)) desc) (wc); } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/towctrans.c�������������������������������������������������������������0000664�0000000�0000000�00000001624�14110572173�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a wide character using a case mapping. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include "towctrans-impl.h" ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/trigl.c�����������������������������������������������������������������0000664�0000000�0000000�00000056103�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quad-precision floating point argument reduction. -*- coding: utf-8 -*- Copyright (C) 1999, 2007, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> 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/>. */ #include <config.h> /* Specification. */ #include "trigl.h" #include <float.h> #include <math.h> /* Code based on glibc/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c and glibc/sysdeps/ieee754/dbl-64/k_rem_pio2.c. */ /* Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi */ static const int two_over_pi[] = { 0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62, 0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a, 0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129, 0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41, 0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8, 0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf, 0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5, 0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08, 0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3, 0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880, 0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b, 0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6, 0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2, 0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35, 0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30, 0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c, 0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4, 0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770, 0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7, 0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19, 0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522, 0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16, 0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6, 0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e, 0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48, 0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3, 0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf, 0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55, 0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612, 0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929, 0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec, 0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b, 0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c, 0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4, 0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb, 0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc, 0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c, 0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f, 0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5, 0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437, 0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b, 0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea, 0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad, 0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3, 0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3, 0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717, 0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f, 0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61, 0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db, 0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51, 0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0, 0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c, 0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6, 0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc, 0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed, 0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328, 0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d, 0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0, 0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b, 0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4, 0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3, 0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f, 0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad, 0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b, 0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4, 0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761, 0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31, 0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30, 0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262, 0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e, 0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1, 0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c, 0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4, 0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08, 0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196, 0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9, 0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4, 0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc, 0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c, 0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0, 0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c, 0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0, 0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac, 0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22, 0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893, 0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7, 0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5, 0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f, 0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4, 0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf, 0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b, 0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2, 0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138, 0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e, 0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569, 0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34, 0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9, 0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d, 0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f, 0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855, 0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569, 0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b, 0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe, 0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41, 0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49, 0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f, 0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110, 0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8, 0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365, 0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a, 0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270, 0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5, 0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616, 0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b, 0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0, 0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb, 0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a, 0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e, 0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa, 0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5, 0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0, 0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2, 0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886, 0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142, 0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba, 0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4, 0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708, 0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555, 0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3, 0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55, 0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58, 0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5, 0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c, 0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe, 0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b, 0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8, 0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005, 0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7, 0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50, 0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604, 0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643, 0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485, 0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d, 0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6, 0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2, 0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02, 0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3, 0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412, 0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274, 0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755, 0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849, 0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce, 0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5, 0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba, 0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6, 0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d, 0x7b7b89, 0x483d38, }; static const long double c[] = { /* 93 bits of pi/2 */ #define PI_2_1 c[0] 1.57079632679489661923132169155131424e+00L, /* 3fff921fb54442d18469898cc5100000 */ /* pi/2 - PI_2_1 */ #define PI_2_1t c[1] 8.84372056613570112025531863263659260e-29L, /* 3fa1c06e0e68948127044533e63a0106 */ }; static int kernel_rem_pio2 (double *x, double *y, int e0, int nx, int prec, const int *ipio2); int ieee754_rem_pio2l (long double x, long double *y) { long double z, w, t; double tx[8]; int exp, n; if (x >= -0.78539816339744830961566084581987572104929234984377 && x <= 0.78539816339744830961566084581987572104929234984377) /* x in <-pi/4, pi/4> */ { y[0] = x; y[1] = 0; return 0; } if (x > 0 && x < 2.35619449019234492884698253745962716314787704953131) { /* 113 + 93 bit PI is ok */ z = x - PI_2_1; y[0] = z - PI_2_1t; y[1] = (z - y[0]) - PI_2_1t; return 1; } if (x < 0 && x > -2.35619449019234492884698253745962716314787704953131) { /* 113 + 93 bit PI is ok */ z = x + PI_2_1; y[0] = z + PI_2_1t; y[1] = (z - y[0]) + PI_2_1t; return -1; } if (x + x == x) /* x is ±oo */ { y[0] = x - x; y[1] = y[0]; return 0; } /* Handle large arguments. We split the 113 bits of the mantissa into 5 24bit integers stored in a double array. */ z = frexp (x, &exp); tx[0] = floorl (z *= 16777216.0); z -= tx[0]; tx[1] = floorl (z *= 16777216.0); z -= tx[1]; tx[2] = floorl (z *= 16777216.0); z -= tx[2]; tx[3] = floorl (z *= 16777216.0); z -= tx[3]; tx[4] = floorl (z *= 16777216.0); n = kernel_rem_pio2 (tx, tx + 5, exp - 24, tx[4] ? 5 : 4, 3, two_over_pi); /* The result is now stored in 3 double values, we need to convert it into two long double values. */ t = (long double) tx[6] + (long double) tx[7]; w = (long double) tx[5]; if (x > 0) { y[0] = w + t; y[1] = t - (y[0] - w); return n; } else { y[0] = -(w + t); y[1] = -t - (y[0] + w); return -n; } } /* @(#)k_rem_pio2.c 5.1 93/09/24 */ /* * ==================================================== * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this * software is freely granted, provided that this notice * is preserved. * ==================================================== */ #if defined LIBM_SCCS && !defined GCC_LINT && !defined lint static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $"; #endif /* * kernel_rem_pio2(x,y,e0,nx,prec,ipio2) * double x[],y[]; int e0,nx,prec; int ipio2[]; * * kernel_rem_pio2 return the last three digits of N with * y = x - N*pi/2 * so that |y| < pi/2. * * The method is to compute the integer (mod 8) and fraction parts of * (2/pi)*x without doing the full multiplication. In general we * skip the part of the product that are known to be a huge integer ( * more accurately, = 0 mod 8 ). Thus the number of operations are * independent of the exponent of the input. * * (2/pi) is represented by an array of 24-bit integers in ipio2[]. * * Input parameters: * x[] The input value (must be positive) is broken into nx * pieces of 24-bit integers in double precision format. * x[i] will be the i-th 24 bit of x. The scaled exponent * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0 * match x's up to 24 bits. * * Example of breaking a double positive z into x[0]+x[1]+x[2]: * e0 = ilogb(z)-23 * z = scalbn(z,-e0) * for i = 0,1,2 * x[i] = floor(z) * z = (z-x[i])*2**24 * * * y[] output result in an array of double precision numbers. * The dimension of y[] is: * 24-bit precision 1 * 53-bit precision 2 * 64-bit precision 2 * 113-bit precision 3 * The actual value is the sum of them. Thus for 113-bit * precision, one may have to do something like: * * long double t,w,r_head, r_tail; * t = (long double)y[2] + (long double)y[1]; * w = (long double)y[0]; * r_head = t+w; * r_tail = w - (r_head - t); * * e0 The exponent of x[0] * * nx dimension of x[] * * prec an integer indicating the precision: * 0 24 bits (single) * 1 53 bits (double) * 2 64 bits (extended) * 3 113 bits (quad) * * ipio2[] * integer array, contains the (24*i)-th to (24*i+23)-th * bit of 2/pi after binary point. The corresponding * floating value is * * ipio2[i] * 2^(-24(i+1)). * * External function: * double scalbn(), floor(); * * * Here is the description of some local variables: * * jk jk+1 is the initial number of terms of ipio2[] needed * in the computation. The recommended value is 2,3,4, * 6 for single, double, extended,and quad. * * jz local integer variable indicating the number of * terms of ipio2[] used. * * jx nx - 1 * * jv index for pointing to the suitable ipio2[] for the * computation. In general, we want * ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8 * is an integer. Thus * e0-3-24*jv >= 0 or (e0-3)/24 >= jv * Hence jv = max(0,(e0-3)/24). * * jp jp+1 is the number of terms in PIo2[] needed, jp = jk. * * q[] double array with integral value, representing the * 24-bits chunk of the product of x and 2/pi. * * q0 the corresponding exponent of q[0]. Note that the * exponent for q[i] would be q0-24*i. * * PIo2[] double precision array, obtained by cutting pi/2 * into 24 bits chunks. * * f[] ipio2[] in floating point * * iq[] integer array by breaking up q[] in 24-bits chunk. * * fq[] final product of x*(2/pi) in fq[0],..,fq[jk] * * ih integer. If >0 it indicates q[] is >= 0.5, hence * it also indicates the *sign* of the result. * */ /* * Constants: * The hexadecimal values are the intended ones for the following * constants. The decimal values may be used, provided that the * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ static const int init_jk[] = { 2, 3, 4, 6 }; /* initial value for jk */ static const double PIo2[] = { 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */ 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */ 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */ 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */ 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */ 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */ 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */ 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */ }; static const double zero = 0.0, one = 1.0, two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ static int kernel_rem_pio2 (double *x, double *y, int e0, int nx, int prec, const int *ipio2) { int jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih; double z, fw, f[20], fq[20], q[20]; /* initialize jk */ jk = init_jk[prec]; jp = jk; /* determine jx,jv,q0, note that 3>q0 */ jx = nx - 1; jv = (e0 - 3) / 24; if (jv < 0) jv = 0; q0 = e0 - 24 * (jv + 1); /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ j = jv - jx; m = jx + jk; for (i = 0; i <= m; i++, j++) f[i] = (j < 0) ? zero : (double) ipio2[j]; /* compute q[0],q[1],...q[jk] */ for (i = 0; i <= jk; i++) { for (j = 0, fw = 0.0; j <= jx; j++) fw += x[j] * f[jx + i - j]; q[i] = fw; } jz = jk; recompute: /* distill q[] into iq[] in reverse order */ for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--) { fw = (double) ((int) (twon24 * z)); iq[i] = (int) (z - two24 * fw); z = q[j - 1] + fw; } /* compute n */ z = ldexp (z, q0); /* actual value of z */ z -= 8.0 * floor (z * 0.125); /* trim off integer >= 8 */ n = (int) z; z -= (double) n; ih = 0; if (q0 > 0) { /* need iq[jz-1] to determine n */ i = (iq[jz - 1] >> (24 - q0)); n += i; iq[jz - 1] -= i << (24 - q0); ih = iq[jz - 1] >> (23 - q0); } else if (q0 == 0) ih = iq[jz - 1] >> 23; else if (z >= 0.5) ih = 2; if (ih > 0) { /* q > 0.5 */ n += 1; carry = 0; for (i = 0; i < jz; i++) { /* compute 1-q */ j = iq[i]; if (carry == 0) { if (j != 0) { carry = 1; iq[i] = 0x1000000 - j; } } else iq[i] = 0xffffff - j; } if (q0 > 0) { /* rare case: chance is 1 in 12 */ switch (q0) { case 1: iq[jz - 1] &= 0x7fffff; break; case 2: iq[jz - 1] &= 0x3fffff; break; } } if (ih == 2) { z = one - z; if (carry != 0) z -= ldexp (one, q0); } } /* check if recomputation is needed */ if (z == zero) { j = 0; for (i = jz - 1; i >= jk; i--) j |= iq[i]; if (j == 0) { /* need recomputation */ for (k = 1; iq[jk - k] == 0; k++); /* k = no. of terms needed */ for (i = jz + 1; i <= jz + k; i++) { /* add q[jz+1] to q[jz+k] */ f[jx + i] = (double) ipio2[jv + i]; for (j = 0, fw = 0.0; j <= jx; j++) fw += x[j] * f[jx + i - j]; q[i] = fw; } jz += k; goto recompute; } } /* chop off zero terms */ if (z == 0.0) { jz -= 1; q0 -= 24; while (iq[jz] == 0) { jz--; q0 -= 24; } } else { /* break z into 24-bit if necessary */ z = ldexp (z, -q0); if (z >= two24) { fw = (double) ((int) (twon24 * z)); iq[jz] = (int) (z - two24 * fw); jz += 1; q0 += 24; iq[jz] = (int) fw; } else iq[jz] = (int) z; } /* convert integer "bit" chunk to floating-point value */ fw = ldexp (one, q0); for (i = jz; i >= 0; i--) { q[i] = fw * (double) iq[i]; fw *= twon24; } /* compute PIo2[0,...,jp]*q[jz,...,0] */ for (i = jz; i >= 0; i--) { for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++) fw += PIo2[k] * q[i + k]; fq[jz - i] = fw; } /* compress fq[] into y[] */ switch (prec) { case 0: fw = 0.0; for (i = jz; i >= 0; i--) fw += fq[i]; y[0] = (ih == 0) ? fw : -fw; break; case 1: case 2: fw = 0.0; for (i = jz; i >= 0; i--) fw += fq[i]; y[0] = (ih == 0) ? fw : -fw; fw = fq[0] - fw; for (i = 1; i <= jz; i++) fw += fq[i]; y[1] = (ih == 0) ? fw : -fw; break; case 3: /* painful */ for (i = jz; i > 0; i--) { fw = fq[i - 1] + fq[i]; fq[i] += fq[i - 1] - fw; fq[i - 1] = fw; } for (i = jz; i > 1; i--) { fw = fq[i - 1] + fq[i]; fq[i] += fq[i - 1] - fw; fq[i - 1] = fw; } for (fw = 0.0, i = jz; i >= 2; i--) fw += fq[i]; if (ih == 0) { y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; } else { y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; } } return n & 7; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/trigl.h�����������������������������������������������������������������0000664�0000000�0000000�00000003067�14110572173�0016345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for sinl, cosl, tanl internal functions. -*- coding: utf-8 -*- Contributed by Paolo Bonzini Copyright 2002-2003, 2009-2021 Free Software Foundation, Inc. This file is part of gnulib. 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/>. */ /* Decompose x into x = k * π/2 + r where k is an integer and abs(r) <= π/4. Store r in y[0] and y[1] (main part in y[0], small additional part in y[1], r = y[0] + y[1]). Return k. */ extern int ieee754_rem_pio2l (long double x, long double *y); /* Compute and return sinl (x + y), where x is the main part and y is the small additional part of a floating-point number. iy is 0 when y is known to be 0.0, otherwise iy is 1. */ extern long double kernel_sinl (long double x, long double y, int iy); /* Compute and return cosl (x + y), where x is the main part and y is the small additional part of a floating-point number. */ extern long double kernel_cosl (long double x, long double y); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/trim.c������������������������������������������������������������������0000664�0000000�0000000�00000006212�14110572173�0016165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Removes leading and/or trailing whitespaces Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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 Davide Angelocola <davide.angelocola@gmail.com> */ #include <config.h> /* Specification. */ #include "trim.h" #include <ctype.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #include "mbchar.h" #include "mbiter.h" #include "xalloc.h" /* Use this to suppress gcc's "...may be used before initialized" warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif char * trim2 (const char *s, int how) { char *d; d = strdup (s); if (!d) xalloc_die (); if (MB_CUR_MAX > 1) { mbi_iterator_t i; /* Trim leading whitespaces. */ if (how != TRIM_TRAILING) { mbi_init (i, d, strlen (d)); for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) ; memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); } /* Trim trailing whitespaces. */ if (how != TRIM_LEADING) { unsigned int state = 0; char *r IF_LINT (= NULL); /* used only while state = 2 */ mbi_init (i, d, strlen (d)); for (; mbi_avail (i); mbi_advance (i)) { if (state == 0 && mb_isspace (mbi_cur (i))) continue; if (state == 0 && !mb_isspace (mbi_cur (i))) { state = 1; continue; } if (state == 1 && !mb_isspace (mbi_cur (i))) continue; if (state == 1 && mb_isspace (mbi_cur (i))) { state = 2; r = (char *) mbi_cur_ptr (i); } else if (state == 2 && mb_isspace (mbi_cur (i))) { /* empty */ } else { state = 1; } } if (state == 2) *r = '\0'; } } else { char *p; /* Trim leading whitespaces. */ if (how != TRIM_TRAILING) { for (p = d; *p && isspace ((unsigned char) *p); p++) ; memmove (d, p, strlen (p) + 1); } /* Trim trailing whitespaces. */ if (how != TRIM_LEADING) { for (p = d + strlen (d) - 1; p >= d && isspace ((unsigned char) *p); p--) *p = '\0'; } } return d; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/trim.h������������������������������������������������������������������0000664�0000000�0000000�00000002425�14110572173�0016174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Removes leading and/or trailing whitespaces Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. This 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 Davide Angelocola <davide.angelocola@gmail.com> */ #include <stdlib.h> /* Trim mode. */ #define TRIM_TRAILING 0 #define TRIM_LEADING 1 #define TRIM_BOTH 2 /* Removes trailing and leading whitespaces. */ #define trim(s) trim2(s, TRIM_BOTH) /* Removes trailing whitespaces. */ #define trim_trailing(s) trim2(s, TRIM_TRAILING) /* Removes leading whitespaces. */ #define trim_leading(s) trim2(s, TRIM_LEADING) char *trim2 (const char *, int) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/trunc.c�����������������������������������������������������������������0000664�0000000�0000000�00000007300�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. Copyright (C) 2007, 2010-2021 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>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #undef MIN #ifdef USE_LONG_DOUBLE # define FUNC truncl # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define MIN LDBL_MIN # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC trunc # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define MIN DBL_MIN # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC truncf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define MIN FLT_MIN # define L_(literal) literal##f #endif /* -0.0. See minus-zero.h. */ #if defined __hpux || defined __sgi || defined __ICC # define MINUS_ZERO (-MIN * MIN) #else # define MINUS_ZERO L_(-0.0) #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE FUNC (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/truncate.c��������������������������������������������������������������0000664�0000000�0000000�00000004413�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* truncate emulations for native Windows. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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, 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/>. */ /* If the user's config.h happens to include <unistd.h>, let it include only the system's <unistd.h> here, so that orig_faccessat doesn't recurse to rpl_faccessat. */ #define _GL_INCLUDING_UNISTD_H #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> #undef _GL_INCLUDING_UNISTD_H #if TRUNCATE_TRAILING_SLASH_BUG static int orig_truncate (const char *filename, off_t length) { return truncate (filename, length); } #endif /* Write "unistd.h" here, not <unistd.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <unistd.h> above. */ #include "unistd.h" int truncate (const char *filename, off_t length) { #if TRUNCATE_TRAILING_SLASH_BUG /* Use the original truncate(), but correct the trailing slash handling. */ size_t len = strlen (filename); if (len && filename[len - 1] == '/') { struct stat st; if (stat (filename, &st) == 0) errno = (S_ISDIR (st.st_mode) ? EISDIR : ENOTDIR); return -1; } return orig_truncate (filename, length); #else int fd; if (length == 0) { fd = open (filename, O_WRONLY | O_TRUNC | O_CLOEXEC); if (fd < 0) return -1; } else { fd = open (filename, O_WRONLY | O_CLOEXEC); if (fd < 0) return -1; if (ftruncate (fd, length) < 0) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } close (fd); return 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/truncf.c����������������������������������������������������������������0000664�0000000�0000000�00000001515�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. Copyright (C) 2007, 2009-2021 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>, 2007. */ #define USE_FLOAT #include "trunc.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/truncl.c����������������������������������������������������������������0000664�0000000�0000000�00000002004�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. Copyright (C) 2007, 2009-2021 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>, 2007. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double truncl (long double x) { return trunc (x); } #else # define USE_LONG_DOUBLE # include "trunc.c" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tsearch.c���������������������������������������������������������������0000664�0000000�0000000�00000052266�14110572173�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-1997, 2000, 2006-2007, 2009-2021 Free Software Foundation, Inc. Contributed by Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>, 1997. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ /* Tree search for red/black trees. The algorithm for adding nodes is taken from one of the many "Algorithms" books by Robert Sedgewick, although the implementation differs. The algorithm for deleting nodes can probably be found in a book named "Introduction to Algorithms" by Cormen/Leiserson/Rivest. At least that's the book that my professor took most algorithms from during the "Data Structures" course... Totally public domain. */ /* Red/black trees are binary trees in which the edges are colored either red or black. They have the following properties: 1. The number of black edges on every path from the root to a leaf is constant. 2. No two red edges are adjacent. Therefore there is an upper bound on the length of every path, it's O(log n) where n is the number of nodes in the tree. No path can be longer than 1+2*P where P is the length of the shortest path in the tree. Useful for the implementation: 3. If one of the children of a node is NULL, then the other one is red (if it exists). In the implementation, not the edges are colored, but the nodes. The color interpreted as the color of the edge leading to this node. The color is meaningless for the root node, but we color the root node black for convenience. All added nodes are red initially. Adding to a red/black tree is rather easy. The right place is searched with a usual binary tree search. Additionally, whenever a node N is reached that has two red successors, the successors are colored black and the node itself colored red. This moves red edges up the tree where they pose less of a problem once we get to really insert the new node. Changing N's color to red may violate rule 2, however, so rotations may become necessary to restore the invariants. Adding a new red leaf may violate the same rule, so afterwards an additional check is run and the tree possibly rotated. Deleting is hairy. There are mainly two nodes involved: the node to be deleted (n1), and another node that is to be unchained from the tree (n2). If n1 has a successor (the node with a smallest key that is larger than n1), then the successor becomes n2 and its contents are copied into n1, otherwise n1 becomes n2. Unchaining a node may violate rule 1: if n2 is black, one subtree is missing one black edge afterwards. The algorithm must try to move this error upwards towards the root, so that the subtree that does not have enough black edges becomes the whole tree. Once that happens, the error has disappeared. It may not be necessary to go all the way up, since it is possible that rotations and recoloring can fix the error before that. Although the deletion algorithm must walk upwards through the tree, we do not store parent pointers in the nodes. Instead, delete allocates a small array of parent pointers and fills it while descending the tree. Since we know that the length of a path is O(log n), where n is the number of nodes, this is likely to use less memory. */ /* Tree rotations look like this: A C / \ / \ B C A G / \ / \ --> / \ D E F G B F / \ D E In this case, A has been rotated left. This preserves the ordering of the binary tree. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the rootp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <search.h> #include <stdlib.h> typedef int (*__compar_fn_t) (const void *, const void *); typedef void (*__action_fn_t) (const void *, VISIT, int); #ifndef weak_alias # define __tsearch tsearch # define __tfind tfind # define __tdelete tdelete # define __twalk twalk #endif #ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ # define internal_function #endif typedef struct node_t { /* Callers expect this to be the first element in the structure - do not move! */ const void *key; struct node_t *left; struct node_t *right; unsigned int red:1; } *node; typedef const struct node_t *const_node; #undef DEBUGGING #ifdef DEBUGGING /* Routines to check tree invariants. */ #include <assert.h> #define CHECK_TREE(a) check_tree(a) static void check_tree_recurse (node p, int d_sofar, int d_total) { if (p == NULL) { assert (d_sofar == d_total); return; } check_tree_recurse (p->left, d_sofar + (p->left && !p->left->red), d_total); check_tree_recurse (p->right, d_sofar + (p->right && !p->right->red), d_total); if (p->left) assert (!(p->left->red && p->red)); if (p->right) assert (!(p->right->red && p->red)); } static void check_tree (node root) { int cnt = 0; node p; if (root == NULL) return; root->red = 0; for (p = root->left; p; p = p->left) cnt += !p->red; check_tree_recurse (root, 0, cnt); } #else #define CHECK_TREE(a) #endif #if GNULIB_defined_tsearch /* Possibly "split" a node with two red successors, and/or fix up two red edges in a row. ROOTP is a pointer to the lowest node we visited, PARENTP and GPARENTP pointers to its parent/grandparent. P_R and GP_R contain the comparison values that determined which way was taken in the tree to reach ROOTP. MODE is 1 if we need not do the split, but must check for two red edges between GPARENTP and ROOTP. */ static void maybe_split_for_insert (node *rootp, node *parentp, node *gparentp, int p_r, int gp_r, int mode) { node root = *rootp; node *rp, *lp; rp = &(*rootp)->right; lp = &(*rootp)->left; /* See if we have to split this node (both successors red). */ if (mode == 1 || ((*rp) != NULL && (*lp) != NULL && (*rp)->red && (*lp)->red)) { /* This node becomes red, its successors black. */ root->red = 1; if (*rp) (*rp)->red = 0; if (*lp) (*lp)->red = 0; /* If the parent of this node is also red, we have to do rotations. */ if (parentp != NULL && (*parentp)->red) { node gp = *gparentp; node p = *parentp; /* There are two main cases: 1. The edge types (left or right) of the two red edges differ. 2. Both red edges are of the same type. There exist two symmetries of each case, so there is a total of 4 cases. */ if ((p_r > 0) != (gp_r > 0)) { /* Put the child at the top of the tree, with its parent and grandparent as successors. */ p->red = 1; gp->red = 1; root->red = 0; if (p_r < 0) { /* Child is left of parent. */ p->left = *rp; *rp = p; gp->right = *lp; *lp = gp; } else { /* Child is right of parent. */ p->right = *lp; *lp = p; gp->left = *rp; *rp = gp; } *gparentp = root; } else { *gparentp = *parentp; /* Parent becomes the top of the tree, grandparent and child are its successors. */ p->red = 0; gp->red = 1; if (p_r < 0) { /* Left edges. */ gp->left = p->right; p->right = gp; } else { /* Right edges. */ gp->right = p->left; p->left = gp; } } } } } /* Find or insert datum into search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tsearch (const void *key, void **vrootp, __compar_fn_t compar) { node q; node *parentp = NULL, *gparentp = NULL; node *rootp = (node *) vrootp; node *nextp; int r = 0, p_r = 0, gp_r = 0; /* No they might not, Mr Compiler. */ if (rootp == NULL) return NULL; /* This saves some additional tests below. */ if (*rootp != NULL) (*rootp)->red = 0; CHECK_TREE (*rootp); nextp = rootp; while (*nextp != NULL) { node root = *rootp; r = (*compar) (key, root->key); if (r == 0) return root; maybe_split_for_insert (rootp, parentp, gparentp, p_r, gp_r, 0); /* If that did any rotations, parentp and gparentp are now garbage. That doesn't matter, because the values they contain are never used again in that case. */ nextp = r < 0 ? &root->left : &root->right; if (*nextp == NULL) break; gparentp = parentp; parentp = rootp; rootp = nextp; gp_r = p_r; p_r = r; } q = (struct node_t *) malloc (sizeof (struct node_t)); if (q != NULL) { *nextp = q; /* link new node to old */ q->key = key; /* initialize new node */ q->red = 1; q->left = q->right = NULL; if (nextp != rootp) /* There may be two red edges in a row now, which we must avoid by rotating the tree. */ maybe_split_for_insert (nextp, rootp, parentp, r, p_r, 1); } return q; } #ifdef weak_alias weak_alias (__tsearch, tsearch) #endif /* Find datum in search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tfind (const void *key, void *const *vrootp, __compar_fn_t compar) { node *rootp = (node *) vrootp; if (rootp == NULL) return NULL; CHECK_TREE (*rootp); while (*rootp != NULL) { node root = *rootp; int r; r = (*compar) (key, root->key); if (r == 0) return root; rootp = r < 0 ? &root->left : &root->right; } return NULL; } #ifdef weak_alias weak_alias (__tfind, tfind) #endif /* Delete node with given key. KEY is the key to be deleted, ROOTP is the address of the root of tree, COMPAR the comparison function. */ void * __tdelete (const void *key, void **vrootp, __compar_fn_t compar) { node p, q, r, retval; int cmp; node *rootp = (node *) vrootp; node root, unchained; /* Stack of nodes so we remember the parents without recursion. It's _very_ unlikely that there are paths longer than 40 nodes. The tree would need to have around 250.000 nodes. */ int stacksize = 100; int sp = 0; node *nodestack[100]; if (rootp == NULL) return NULL; p = *rootp; if (p == NULL) return NULL; CHECK_TREE (p); while ((cmp = (*compar) (key, (*rootp)->key)) != 0) { if (sp == stacksize) abort (); nodestack[sp++] = rootp; p = *rootp; rootp = ((cmp < 0) ? &(*rootp)->left : &(*rootp)->right); if (*rootp == NULL) return NULL; } /* This is bogus if the node to be deleted is the root... this routine really should return an integer with 0 for success, -1 for failure and errno = ESRCH or something. */ retval = p; /* We don't unchain the node we want to delete. Instead, we overwrite it with its successor and unchain the successor. If there is no successor, we really unchain the node to be deleted. */ root = *rootp; r = root->right; q = root->left; if (q == NULL || r == NULL) unchained = root; else { node *parent = rootp, *up = &root->right; for (;;) { if (sp == stacksize) abort (); nodestack[sp++] = parent; parent = up; if ((*up)->left == NULL) break; up = &(*up)->left; } unchained = *up; } /* We know that either the left or right successor of UNCHAINED is NULL. R becomes the other one, it is chained into the parent of UNCHAINED. */ r = unchained->left; if (r == NULL) r = unchained->right; if (sp == 0) *rootp = r; else { q = *nodestack[sp-1]; if (unchained == q->right) q->right = r; else q->left = r; } if (unchained != root) root->key = unchained->key; if (!unchained->red) { /* Now we lost a black edge, which means that the number of black edges on every path is no longer constant. We must balance the tree. */ /* NODESTACK now contains all parents of R. R is likely to be NULL in the first iteration. */ /* NULL nodes are considered black throughout - this is necessary for correctness. */ while (sp > 0 && (r == NULL || !r->red)) { node *pp = nodestack[sp - 1]; p = *pp; /* Two symmetric cases. */ if (r == p->left) { /* Q is R's brother, P is R's parent. The subtree with root R has one black edge less than the subtree with root Q. */ q = p->right; if (q->red) { /* If Q is red, we know that P is black. We rotate P left so that Q becomes the top node in the tree, with P below it. P is colored red, Q is colored black. This action does not change the black edge count for any leaf in the tree, but we will be able to recognize one of the following situations, which all require that Q is black. */ q->red = 0; p->red = 1; /* Left rotate p. */ p->right = q->left; q->left = p; *pp = q; /* Make sure pp is right if the case below tries to use it. */ nodestack[sp++] = pp = &q->left; q = p->right; } /* We know that Q can't be NULL here. We also know that Q is black. */ if ((q->left == NULL || !q->left->red) && (q->right == NULL || !q->right->red)) { /* Q has two black successors. We can simply color Q red. The whole subtree with root P is now missing one black edge. Note that this action can temporarily make the tree invalid (if P is red). But we will exit the loop in that case and set P black, which both makes the tree valid and also makes the black edge count come out right. If P is black, we are at least one step closer to the root and we'll try again the next iteration. */ q->red = 1; r = p; } else { /* Q is black, one of Q's successors is red. We can repair the tree with one operation and will exit the loop afterwards. */ if (q->right == NULL || !q->right->red) { /* The left one is red. We perform the same action as in maybe_split_for_insert where two red edges are adjacent but point in different directions: Q's left successor (let's call it Q2) becomes the top of the subtree we are looking at, its parent (Q) and grandparent (P) become its successors. The former successors of Q2 are placed below P and Q. P becomes black, and Q2 gets the color that P had. This changes the black edge count only for node R and its successors. */ node q2 = q->left; q2->red = p->red; p->right = q2->left; q->left = q2->right; q2->right = q; q2->left = p; *pp = q2; p->red = 0; } else { /* It's the right one. Rotate P left. P becomes black, and Q gets the color that P had. Q's right successor also becomes black. This changes the black edge count only for node R and its successors. */ q->red = p->red; p->red = 0; q->right->red = 0; /* left rotate p */ p->right = q->left; q->left = p; *pp = q; } /* We're done. */ sp = 1; r = NULL; } } else { /* Comments: see above. */ q = p->left; if (q->red) { q->red = 0; p->red = 1; p->left = q->right; q->right = p; *pp = q; nodestack[sp++] = pp = &q->right; q = p->left; } if ((q->right == NULL || !q->right->red) && (q->left == NULL || !q->left->red)) { q->red = 1; r = p; } else { if (q->left == NULL || !q->left->red) { node q2 = q->right; q2->red = p->red; p->left = q2->right; q->right = q2->left; q2->left = q; q2->right = p; *pp = q2; p->red = 0; } else { q->red = p->red; p->red = 0; q->left->red = 0; p->left = q->right; q->right = p; *pp = q; } sp = 1; r = NULL; } } --sp; } if (r != NULL) r->red = 0; } free (unchained); return retval; } #ifdef weak_alias weak_alias (__tdelete, tdelete) #endif #endif /* GNULIB_defined_tsearch */ #if GNULIB_defined_twalk /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. LEVEL is the level of ROOT in the whole tree. */ static void internal_function trecurse (const void *vroot, __action_fn_t action, int level) { const_node root = (const_node) vroot; if (root->left == NULL && root->right == NULL) (*action) (root, leaf, level); else { (*action) (root, preorder, level); if (root->left != NULL) trecurse (root->left, action, level + 1); (*action) (root, postorder, level); if (root->right != NULL) trecurse (root->right, action, level + 1); (*action) (root, endorder, level); } } /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. */ void __twalk (const void *vroot, __action_fn_t action) { const_node root = (const_node) vroot; CHECK_TREE (root); if (root != NULL && action != NULL) trecurse (root, action, 0); } #ifdef weak_alias weak_alias (__twalk, twalk) #endif #endif /* GNULIB_defined_twalk */ #ifdef _LIBC /* The standardized functions miss an important functionality: the tree cannot be removed easily. We provide a function to do this. */ static void internal_function tdestroy_recurse (node root, __free_fn_t freefct) { if (root->left != NULL) tdestroy_recurse (root->left, freefct); if (root->right != NULL) tdestroy_recurse (root->right, freefct); (*freefct) ((void *) root->key); /* Free the node itself. */ free (root); } void __tdestroy (void *vroot, __free_fn_t freefct) { node root = (node) vroot; CHECK_TREE (root); if (root != NULL) tdestroy_recurse (root, freefct); } weak_alias (__tdestroy, tdestroy) #endif /* _LIBC */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tss.c�������������������������������������������������������������������0000664�0000000�0000000�00000004320�14110572173�0016021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C 11 thread-specific storage in multithreaded situations. Copyright (C) 2005-2021 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>, 2005, 2019. */ #include <config.h> #include <threads.h> #include <string.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #else /* Use POSIX threads. */ # include <pthread.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Use Windows threads. */ int tss_create (tss_t *keyp, tss_dtor_t destructor) { int err = glwthread_tls_key_create (keyp, destructor); if (err == 0) return thrd_success; else { memset (keyp, '\0', sizeof (tss_t)); return thrd_error; } } int tss_set (tss_t key, void *value) { int err = glwthread_tls_set (key, value); return (err == 0 ? thrd_success : thrd_error); } void * tss_get (tss_t key) { return glwthread_tls_get (key); } void tss_delete (tss_t key) { glwthread_tls_key_delete (key); } #else /* Use POSIX threads. */ int tss_create (tss_t *keyp, tss_dtor_t destructor) { int err = pthread_key_create (keyp, destructor); if (err == 0) return thrd_success; else { memset (keyp, '\0', sizeof (tss_t)); return thrd_error; } } int tss_set (tss_t key, void *value) { int err = pthread_setspecific (key, value); return (err == 0 ? thrd_success : thrd_error); } void * tss_get (tss_t key) { return pthread_getspecific (key); } void tss_delete (tss_t key) { pthread_key_delete (key); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/ttyname_r.c�������������������������������������������������������������0000664�0000000�0000000�00000006410�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of a terminal. Copyright (C) 2010-2021 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>, 2010. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <limits.h> #include <string.h> #if defined __ANDROID__ # include <stdio.h> #endif int ttyname_r (int fd, char *buf, size_t buflen) #undef ttyname_r { #if defined __ANDROID__ /* On Android, read the result from the /proc file system. */ if (!isatty (fd)) /* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */ return errno; else if (buflen == 0) return ERANGE; else { char procfile[14+11+1]; char largerbuf[512]; ssize_t ret; sprintf (procfile, "/proc/self/fd/%d", fd); ret = (buflen < sizeof (largerbuf) ? readlink (procfile, largerbuf, sizeof (largerbuf)) : readlink (procfile, buf, buflen <= INT_MAX ? buflen : INT_MAX)); if (ret < 0) return errno; if ((size_t) ret >= buflen) return ERANGE; if (buflen < sizeof (largerbuf)) memcpy (buf, largerbuf, (size_t) ret); buf[(size_t) ret] = '\0'; return 0; } #elif HAVE_TTYNAME_R /* When ttyname_r exists, use it. */ /* This code is multithread-safe. */ /* On Solaris, ttyname_r always fails if buflen < 128. On OSF/1 5.1, ttyname_r ignores the buffer size and assumes the buffer is large enough. So provide a buffer that is large enough. */ char largerbuf[512]; # if HAVE_POSIXDECL_TTYNAME_R int err = (buflen < sizeof (largerbuf) ? ttyname_r (fd, largerbuf, sizeof (largerbuf)) : ttyname_r (fd, buf, buflen <= INT_MAX ? buflen : INT_MAX)); if (err != 0) return err; if (buflen < sizeof (largerbuf)) { size_t namelen = strlen (largerbuf) + 1; if (namelen > buflen) return ERANGE; memcpy (buf, largerbuf, namelen); } # else char *name = (buflen < sizeof (largerbuf) ? ttyname_r (fd, largerbuf, sizeof (largerbuf)) : ttyname_r (fd, buf, buflen <= INT_MAX ? buflen : INT_MAX)); if (name == NULL) return errno; if (name != buf) { size_t namelen = strlen (name) + 1; if (namelen > buflen) return ERANGE; memmove (buf, name, namelen); } # endif return 0; #elif HAVE_TTYNAME /* Note: This is not multithread-safe. */ char *name; size_t namelen; name = ttyname (fd); if (name == NULL) return errno; namelen = strlen (name) + 1; if (namelen > buflen) return ERANGE; memcpy (buf, name, namelen); return 0; #else /* Platforms like mingw: no ttys exist at all. */ return ENOTTY; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/tzset.c�����������������������������������������������������������������0000664�0000000�0000000�00000005433�14110572173�0016367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide tzset for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2021 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 Jim Meyering */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> void rpl_tzset (void) #undef tzset { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); /* On native Windows, tzset() is deprecated. Use _tzset() instead. See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/posix-tzset> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> */ _tzset (); #else tzset (); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/u64.c�������������������������������������������������������������������0000664�0000000�0000000�00000001574�14110572173�0015636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* uint64_t-like operations that work even on hosts lacking uint64_t Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_U64_INLINE _GL_EXTERN_INLINE #include "u64.h" typedef int dummy; ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/u64.h�������������������������������������������������������������������0000664�0000000�0000000�00000007225�14110572173�0015642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* uint64_t-like operations that work even on hosts lacking uint64_t Copyright (C) 2006, 2009-2021 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. */ #include <stdint.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_U64_INLINE # define _GL_U64_INLINE _GL_INLINE #endif /* Return X rotated left by N bits, where 0 < N < 64. */ #define u64rol(x, n) u64or (u64shl (x, n), u64shr (x, 64 - n)) #ifdef UINT64_MAX /* Native implementations are trivial. See below for comments on what these operations do. */ typedef uint64_t u64; # define u64hilo(hi, lo) ((u64) (((u64) (hi) << 32) + (lo))) # define u64init(hi, lo) u64hilo (hi, lo) # define u64lo(x) ((u64) (x)) # define u64size(x) u64lo (x) # define u64lt(x, y) ((x) < (y)) # define u64and(x, y) ((x) & (y)) # define u64or(x, y) ((x) | (y)) # define u64xor(x, y) ((x) ^ (y)) # define u64plus(x, y) ((x) + (y)) # define u64shl(x, n) ((x) << (n)) # define u64shr(x, n) ((x) >> (n)) #else /* u64 is a 64-bit unsigned integer value. u64init (HI, LO), is like u64hilo (HI, LO), but for use in initializer contexts. */ # ifdef WORDS_BIGENDIAN typedef struct { uint32_t hi, lo; } u64; # define u64init(hi, lo) { hi, lo } # else typedef struct { uint32_t lo, hi; } u64; # define u64init(hi, lo) { lo, hi } # endif /* Given the high and low-order 32-bit quantities HI and LO, return a u64 value representing (HI << 32) + LO. */ _GL_U64_INLINE u64 u64hilo (uint32_t hi, uint32_t lo) { u64 r; r.hi = hi; r.lo = lo; return r; } /* Return a u64 value representing LO. */ _GL_U64_INLINE u64 u64lo (uint32_t lo) { u64 r; r.hi = 0; r.lo = lo; return r; } /* Return a u64 value representing SIZE. */ _GL_U64_INLINE u64 u64size (size_t size) { u64 r; r.hi = size >> 31 >> 1; r.lo = size; return r; } /* Return X < Y. */ _GL_U64_INLINE int u64lt (u64 x, u64 y) { return x.hi < y.hi || (x.hi == y.hi && x.lo < y.lo); } /* Return X & Y. */ _GL_U64_INLINE u64 u64and (u64 x, u64 y) { u64 r; r.hi = x.hi & y.hi; r.lo = x.lo & y.lo; return r; } /* Return X | Y. */ _GL_U64_INLINE u64 u64or (u64 x, u64 y) { u64 r; r.hi = x.hi | y.hi; r.lo = x.lo | y.lo; return r; } /* Return X ^ Y. */ _GL_U64_INLINE u64 u64xor (u64 x, u64 y) { u64 r; r.hi = x.hi ^ y.hi; r.lo = x.lo ^ y.lo; return r; } /* Return X + Y. */ _GL_U64_INLINE u64 u64plus (u64 x, u64 y) { u64 r; r.lo = x.lo + y.lo; r.hi = x.hi + y.hi + (r.lo < x.lo); return r; } /* Return X << N. */ _GL_U64_INLINE u64 u64shl (u64 x, int n) { u64 r; if (n < 32) { r.hi = (x.hi << n) | (x.lo >> (32 - n)); r.lo = x.lo << n; } else { r.hi = x.lo << (n - 32); r.lo = 0; } return r; } /* Return X >> N. */ _GL_U64_INLINE u64 u64shr (u64 x, int n) { u64 r; if (n < 32) { r.hi = x.hi >> n; r.lo = (x.hi << (32 - n)) | (x.lo >> n); } else { r.hi = 0; r.lo = x.hi >> (n - 32); } return r; } #endif _GL_INLINE_HEADER_END ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uchar.in.h��������������������������������������������������������������0000664�0000000�0000000�00000022205�14110572173�0016726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* <uchar.h> substitute - 16-bit and 32-bit wide character types. Copyright (C) 2019-2021 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>, 2019. */ /* * ISO C 11 <uchar.h> for platforms that lack it. */ #ifndef _@GUARD_PREFIX@_UCHAR_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UCHAR_H@ # @INCLUDE_NEXT@ @NEXT_UCHAR_H@ #endif /* Get uint_least16_t, uint_least32_t. */ #include <stdint.h> /* Get mbstate_t, size_t. */ #include <wchar.h> /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_UCHAR_TYPES@)) /* A 16-bit variant of wchar_t. Note: This type does *NOT* denote UTF-16 units. (Only on platforms on which __STDC_UTF_16__ is defined.) */ typedef uint_least16_t char16_t; #elif @GNULIBHEADERS_OVERRIDE_CHAR16_T@ typedef uint_least16_t gl_char16_t; # define char16_t gl_char16_t #endif #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_UCHAR_TYPES@)) /* A 32-bit variant of wchar_t. Note: This type does *NOT* denote UTF-32 code points. (Only on platforms on which __STDC_UTF_32__ is defined.) */ typedef uint_least32_t char32_t; #elif @GNULIBHEADERS_OVERRIDE_CHAR32_T@ typedef uint_least32_t gl_char32_t; # define char32_t gl_char32_t #endif /* Define if a 'char32_t' can hold more characters than a 'wchar_t'. */ #if @SMALL_WCHAR_T@ /* 32-bit AIX, Cygwin, native Windows */ # define _GL_LARGE_CHAR32_T 1 #endif /* Convert a single-byte character to a 32-bit wide character. */ #if @GNULIB_BTOC32@ _GL_FUNCDECL_SYS (btoc32, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_SYS (btoc32, wint_t, (int c)); _GL_CXXALIASWARN (btoc32); #endif /* Test a specific property of a 32-bit wide character. */ #if @GNULIB_C32ISALNUM@ _GL_FUNCDECL_SYS (c32isalnum, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isalnum, int, (wint_t wc)); _GL_CXXALIASWARN (c32isalnum); #endif #if @GNULIB_C32ISALPHA@ _GL_FUNCDECL_SYS (c32isalpha, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isalpha, int, (wint_t wc)); _GL_CXXALIASWARN (c32isalpha); #endif #if @GNULIB_C32ISBLANK@ _GL_FUNCDECL_SYS (c32isblank, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isblank, int, (wint_t wc)); _GL_CXXALIASWARN (c32isblank); #endif #if @GNULIB_C32ISCNTRL@ _GL_FUNCDECL_SYS (c32iscntrl, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32iscntrl, int, (wint_t wc)); _GL_CXXALIASWARN (c32iscntrl); #endif #if @GNULIB_C32ISDIGIT@ _GL_FUNCDECL_SYS (c32isdigit, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isdigit, int, (wint_t wc)); _GL_CXXALIASWARN (c32isdigit); #endif #if @GNULIB_C32ISGRAPH@ _GL_FUNCDECL_SYS (c32isgraph, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isgraph, int, (wint_t wc)); _GL_CXXALIASWARN (c32isgraph); #endif #if @GNULIB_C32ISLOWER@ _GL_FUNCDECL_SYS (c32islower, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32islower, int, (wint_t wc)); _GL_CXXALIASWARN (c32islower); #endif #if @GNULIB_C32ISPRINT@ _GL_FUNCDECL_SYS (c32isprint, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isprint, int, (wint_t wc)); _GL_CXXALIASWARN (c32isprint); #endif #if @GNULIB_C32ISPUNCT@ _GL_FUNCDECL_SYS (c32ispunct, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32ispunct, int, (wint_t wc)); _GL_CXXALIASWARN (c32ispunct); #endif #if @GNULIB_C32ISSPACE@ _GL_FUNCDECL_SYS (c32isspace, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isspace, int, (wint_t wc)); _GL_CXXALIASWARN (c32isspace); #endif #if @GNULIB_C32ISUPPER@ _GL_FUNCDECL_SYS (c32isupper, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isupper, int, (wint_t wc)); _GL_CXXALIASWARN (c32isupper); #endif #if @GNULIB_C32ISXDIGIT@ _GL_FUNCDECL_SYS (c32isxdigit, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32isxdigit, int, (wint_t wc)); _GL_CXXALIASWARN (c32isxdigit); #endif /* Converts a 32-bit wide character to a multibyte character. */ #if @GNULIB_C32RTOMB@ # if @REPLACE_C32RTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef c32rtomb # define c32rtomb rpl_c32rtomb # endif _GL_FUNCDECL_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); _GL_CXXALIAS_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # else # if !@HAVE_C32RTOMB@ _GL_FUNCDECL_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # endif _GL_CXXALIASWARN (c32rtomb); #elif defined GNULIB_POSIXCHECK # undef c32rtomb # if HAVE_RAW_DECL_C32RTOMB _GL_WARN_ON_USE (mbrtoc32, "c32rtomb is not portable - " "use gnulib module c32rtomb for portability"); # endif #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32SNRTOMBS@ _GL_FUNCDECL_SYS (c32snrtombs, size_t, (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (c32snrtombs, size_t, (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (c32snrtombs); #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32SRTOMBS@ _GL_FUNCDECL_SYS (c32srtombs, size_t, (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (c32srtombs, size_t, (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (c32srtombs); #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32STOMBS@ _GL_FUNCDECL_SYS (c32stombs, size_t, (char *dest, const char32_t *src, size_t len) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (c32stombs, size_t, (char *dest, const char32_t *src, size_t len)); _GL_CXXALIASWARN (c32stombs); #endif /* Converts a 32-bit wide character to unibyte character. Returns the single-byte representation of WC if it exists, or EOF otherwise. */ #if @GNULIB_C32TOB@ _GL_FUNCDECL_SYS (c32tob, int, (wint_t wc)); _GL_CXXALIAS_SYS (c32tob, int, (wint_t wc)); _GL_CXXALIASWARN (c32tob); #endif /* Converts a multibyte character to a 32-bit wide character. */ #if @GNULIB_MBRTOC32@ # if @REPLACE_MBRTOC32@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtoc32 # define mbrtoc32 rpl_mbrtoc32 # endif _GL_FUNCDECL_RPL (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOC32@ _GL_FUNCDECL_SYS (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrtoc32); #elif defined GNULIB_POSIXCHECK # undef mbrtoc32 # if HAVE_RAW_DECL_MBRTOC32 _GL_WARN_ON_USE (mbrtoc32, "mbrtoc32 is not portable - " "use gnulib module mbrtoc32 for portability"); # endif #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSNRTOC32S@ _GL_FUNCDECL_SYS (mbsnrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mbsnrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (mbsnrtoc32s); #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSRTOC32S@ _GL_FUNCDECL_SYS (mbsrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mbsrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (mbsrtoc32s); #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSTOC32S@ _GL_FUNCDECL_SYS (mbstoc32s, size_t, (char32_t *dest, const char *src, size_t len) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mbstoc32s, size_t, (char32_t *dest, const char *src, size_t len)); _GL_CXXALIASWARN (mbstoc32s); #endif #endif /* _@GUARD_PREFIX@_UCHAR_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uinttostr.c�������������������������������������������������������������0000664�0000000�0000000�00000001532�14110572173�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'unsigned int' integer to printable string. Copyright (C) 2006-2021 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/>. */ #define anytostr uinttostr #define inttype unsigned int #include "anytostr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/umaxtostr.c�������������������������������������������������������������0000664�0000000�0000000�00000001524�14110572173�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 'uintmax_t' integer to printable string. Copyright (C) 2004-2021 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/>. */ #define anytostr umaxtostr #define inttype uintmax_t #include "anytostr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uname.c�����������������������������������������������������������������0000664�0000000�0000000�00000021314�14110572173�0016317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* uname replacement. Copyright (C) 2009-2021 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/>. */ #include <config.h> /* Specification. */ #include <sys/utsname.h> /* This file provides an implementation only for the native Windows API. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> # include <stdlib.h> # include <string.h> # include <unistd.h> # include <windows.h> /* Mingw headers don't have all the platform codes. */ # ifndef VER_PLATFORM_WIN32_CE # define VER_PLATFORM_WIN32_CE 3 # endif /* Some headers don't have all the processor architecture codes. */ # ifndef PROCESSOR_ARCHITECTURE_AMD64 # define PROCESSOR_ARCHITECTURE_AMD64 9 # endif # ifndef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 # define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 # endif /* Mingw headers don't have the latest processor codes. */ # ifndef PROCESSOR_AMD_X8664 # define PROCESSOR_AMD_X8664 8664 # endif /* Don't assume that UNICODE is not defined. */ # undef OSVERSIONINFO # define OSVERSIONINFO OSVERSIONINFOA # undef GetVersionEx # define GetVersionEx GetVersionExA int uname (struct utsname *buf) { OSVERSIONINFO version; OSVERSIONINFOEX versionex; BOOL have_versionex; /* indicates whether versionex is filled */ const char *super_version; /* Preparation: Fill version and, if possible, also versionex. But try to call GetVersionEx only once in the common case. */ versionex.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); have_versionex = GetVersionEx ((OSVERSIONINFO *) &versionex); if (have_versionex) { /* We know that OSVERSIONINFO is a subset of OSVERSIONINFOEX. */ memcpy (&version, &versionex, sizeof (OSVERSIONINFO)); } else { version.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (!GetVersionEx (&version)) abort (); } /* Fill in nodename. */ if (gethostname (buf->nodename, sizeof (buf->nodename)) < 0) strcpy (buf->nodename, "localhost"); /* Determine major-major Windows version. */ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { /* Windows NT or newer. */ super_version = "NT"; } else if (version.dwPlatformId == VER_PLATFORM_WIN32_CE) { /* Windows CE or Embedded CE. */ super_version = "CE"; } else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { /* Windows 95/98/ME. */ switch (version.dwMinorVersion) { case 0: super_version = "95"; break; case 10: super_version = "98"; break; case 90: super_version = "ME"; break; default: super_version = ""; break; } } else super_version = ""; /* Fill in sysname. */ # ifdef __MINGW32__ /* Returns a string compatible with the MSYS uname.exe program, so that no further changes are needed to GNU config.guess. For example, $ ./uname.exe -s => MINGW32_NT-5.1 */ sprintf (buf->sysname, "MINGW32_%s-%u.%u", super_version, (unsigned int) version.dwMajorVersion, (unsigned int) version.dwMinorVersion); # else sprintf (buf->sysname, "Windows%s", super_version); # endif /* Fill in release, version. */ /* The MSYS uname.exe programs uses strings from a modified Cygwin runtime: $ ./uname.exe -r => 1.0.11(0.46/3/2) $ ./uname.exe -v => 2008-08-25 23:40 There is no point in imitating this behaviour. */ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { /* Windows NT or newer. */ struct windows_version { int major; int minor; unsigned int server_offset; const char *name; }; /* Storing the workstation and server version names in a single stream does not waste memory when they are the same. These macros abstract the representation. VERSION1 is used if version.wProductType does not matter, VERSION2 if it does. */ #define VERSION1(major, minor, name) \ { major, minor, 0, name } #define VERSION2(major, minor, workstation, server) \ { major, minor, sizeof workstation, workstation "\0" server } static const struct windows_version versions[] = { VERSION2 (3, -1, "Windows NT Workstation", "Windows NT Server"), VERSION2 (4, -1, "Windows NT Workstation", "Windows NT Server"), VERSION1 (5, 0, "Windows 2000"), VERSION1 (5, 1, "Windows XP"), VERSION1 (5, 2, "Windows Server 2003"), VERSION2 (6, 0, "Windows Vista", "Windows Server 2008"), VERSION2 (6, 1, "Windows 7", "Windows Server 2008 R2"), VERSION2 (-1, -1, "Windows", "Windows Server") }; const char *base; const struct windows_version *v = versions; /* Find a version that matches ours. The last element is a wildcard that always ends the loop. */ while ((v->major != version.dwMajorVersion && v->major != -1) || (v->minor != version.dwMinorVersion && v->minor != -1)) v++; if (have_versionex && versionex.wProductType != VER_NT_WORKSTATION) base = v->name + v->server_offset; else base = v->name; if (v->major == -1 || v->minor == -1) sprintf (buf->release, "%s %u.%u", base, (unsigned int) version.dwMajorVersion, (unsigned int) version.dwMinorVersion); else strcpy (buf->release, base); } else if (version.dwPlatformId == VER_PLATFORM_WIN32_CE) { /* Windows CE or Embedded CE. */ sprintf (buf->release, "Windows CE %u.%u", (unsigned int) version.dwMajorVersion, (unsigned int) version.dwMinorVersion); } else { /* Windows 95/98/ME. */ sprintf (buf->release, "Windows %s", super_version); } strcpy (buf->version, version.szCSDVersion); /* Fill in machine. */ { SYSTEM_INFO info; GetSystemInfo (&info); /* Check for Windows NT or CE, since the info.wProcessorLevel is garbage on Windows 95. */ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT || version.dwPlatformId == VER_PLATFORM_WIN32_CE) { /* Windows NT or newer, or Windows CE or Embedded CE. */ switch (info.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_AMD64: strcpy (buf->machine, "x86_64"); break; case PROCESSOR_ARCHITECTURE_IA64: strcpy (buf->machine, "ia64"); break; case PROCESSOR_ARCHITECTURE_INTEL: strcpy (buf->machine, "i386"); if (info.wProcessorLevel >= 3) buf->machine[1] = '0' + (info.wProcessorLevel <= 6 ? info.wProcessorLevel : 6); break; case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: strcpy (buf->machine, "i686"); break; case PROCESSOR_ARCHITECTURE_MIPS: strcpy (buf->machine, "mips"); break; case PROCESSOR_ARCHITECTURE_ALPHA: case PROCESSOR_ARCHITECTURE_ALPHA64: strcpy (buf->machine, "alpha"); break; case PROCESSOR_ARCHITECTURE_PPC: strcpy (buf->machine, "powerpc"); break; case PROCESSOR_ARCHITECTURE_SHX: strcpy (buf->machine, "sh"); break; case PROCESSOR_ARCHITECTURE_ARM: strcpy (buf->machine, "arm"); break; default: strcpy (buf->machine, "unknown"); break; } } else { /* Windows 95/98/ME. */ switch (info.dwProcessorType) { case PROCESSOR_AMD_X8664: strcpy (buf->machine, "x86_64"); break; case PROCESSOR_INTEL_IA64: strcpy (buf->machine, "ia64"); break; default: if (info.dwProcessorType % 100 == 86) sprintf (buf->machine, "i%u", (unsigned int) info.dwProcessorType); else strcpy (buf->machine, "unknown"); break; } } } return 0; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase.in.h������������������������������������������������������������0000664�0000000�0000000�00000051100�14110572173�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character case mappings. Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNICASE_H #define _UNICASE_H #include "unitypes.h" /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.h> /* Get uninorm_t. */ #include "uninorm.h" #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Character case mappings. These mappings are locale and context independent. WARNING! These functions are not sufficient for languages such as German. Better use the functions below that treat an entire string at once and are language aware. */ /* Return the uppercase mapping of a Unicode character. */ extern ucs4_t uc_toupper (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the lowercase mapping of a Unicode character. */ extern ucs4_t uc_tolower (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the titlecase mapping of a Unicode character. */ extern ucs4_t uc_totitle (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* String case mappings. */ /* These functions are locale dependent. The iso639_language argument identifies the language (e.g. "tr" for Turkish). NULL means to use locale independent case mappings. */ /* Return the ISO 639 language code of the current locale. Return "" if it is unknown, or in the "C" locale. */ extern const char * uc_locale_language (void) _UC_ATTRIBUTE_PURE; /* Conventions: All functions prefixed with u8_ operate on UTF-8 encoded strings. Their unit is an uint8_t (1 byte). All functions prefixed with u16_ operate on UTF-16 encoded strings. Their unit is an uint16_t (a 2-byte word). All functions prefixed with u32_ operate on UCS-4 encoded strings. Their unit is an uint32_t (a 4-byte word). All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly n units. Functions returning a string result take a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ /* Return the uppercase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the lowercase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the titlecase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_totitle (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_totitle (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_totitle (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* The case-mapping context given by a prefix string. */ typedef struct casing_prefix_context { /* These fields are private, undocumented. */ uint32_t last_char_except_ignorable; uint32_t last_char_normal_or_above; } casing_prefix_context_t; /* The case-mapping context of the empty prefix string. */ extern const casing_prefix_context_t unicase_empty_prefix_context; /* Return the case-mapping context of a given prefix string. */ extern casing_prefix_context_t u8_casing_prefix_context (const uint8_t *s, size_t n); extern casing_prefix_context_t u16_casing_prefix_context (const uint16_t *s, size_t n); extern casing_prefix_context_t u32_casing_prefix_context (const uint32_t *s, size_t n); /* Return the case-mapping context of the prefix concat(A, S), given the case-mapping context of the prefix A. */ extern casing_prefix_context_t u8_casing_prefixes_context (const uint8_t *s, size_t n, casing_prefix_context_t a_context); extern casing_prefix_context_t u16_casing_prefixes_context (const uint16_t *s, size_t n, casing_prefix_context_t a_context); extern casing_prefix_context_t u32_casing_prefixes_context (const uint32_t *s, size_t n, casing_prefix_context_t a_context); /* The case-mapping context given by a suffix string. */ typedef struct casing_suffix_context { /* These fields are private, undocumented. */ uint32_t first_char_except_ignorable; uint32_t bits; } casing_suffix_context_t; /* The case-mapping context of the empty suffix string. */ extern const casing_suffix_context_t unicase_empty_suffix_context; /* Return the case-mapping context of a given suffix string. */ extern casing_suffix_context_t u8_casing_suffix_context (const uint8_t *s, size_t n); extern casing_suffix_context_t u16_casing_suffix_context (const uint16_t *s, size_t n); extern casing_suffix_context_t u32_casing_suffix_context (const uint32_t *s, size_t n); /* Return the case-mapping context of the suffix concat(S, A), given the case-mapping context of the suffix A. */ extern casing_suffix_context_t u8_casing_suffixes_context (const uint8_t *s, size_t n, casing_suffix_context_t a_context); extern casing_suffix_context_t u16_casing_suffixes_context (const uint16_t *s, size_t n, casing_suffix_context_t a_context); extern casing_suffix_context_t u32_casing_suffixes_context (const uint32_t *s, size_t n, casing_suffix_context_t a_context); /* Return the uppercase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_toupper (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_toupper (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_toupper (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the lowercase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_tolower (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_tolower (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_tolower (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the titlecase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_totitle (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_totitle (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_totitle (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the case folded string. Comparing uN_casefold (S1) and uN_casefold (S2) with uN_cmp2() is equivalent to comparing S1 and S2 with uN_casecmp(). The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_casefold (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_casefold (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_casefold (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Likewise, for a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_casefold (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_casefold (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_casefold (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in case and normalization. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_casecmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u16_casecmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u32_casecmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int ulc_casecmp (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); /* Convert the string S of length N to a NUL-terminated byte sequence, in such a way that comparing uN_casexfrm (S1) and uN_casexfrm (S2) with the gnulib function memcmp2() is equivalent to comparing S1 and S2 with uN_casecoll(). NF must be either UNINORM_NFC, UNINORM_NFKC, or NULL for no normalization. */ extern char * u8_casexfrm (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u16_casexfrm (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u32_casexfrm (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * ulc_casexfrm (const char *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in case and normalization, using the collation rules of the current locale. The nf argument identifies the normalization form to apply after the case-mapping. It must be either UNINORM_NFC or UNINORM_NFKC. It can also be NULL, for no normalization. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_casecoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u16_casecoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u32_casecoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int ulc_casecoll (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); /* Set *RESULTP to true if mapping NFD(S) to upper case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_uppercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_uppercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_uppercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if mapping NFD(S) to lower case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_lowercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_lowercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_lowercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if mapping NFD(S) to title case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_titlecase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_titlecase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_titlecase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if applying case folding to NFD(S) is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_casefolded (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_casefolded (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_casefolded (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if case matters for S, that is, if mapping NFD(S) to either upper case or lower case or title case is not a no-op. Set *RESULTP to false if NFD(S) maps to itself under the upper case mapping, under the lower case mapping, and under the title case mapping; in other words, when NFD(S) consists entirely of caseless characters. Upon failure, return -1 with errno set. */ extern int u8_is_cased (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_cased (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_cased (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNICASE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016474�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/cased.c���������������������������������������������������������0000664�0000000�0000000�00000003561�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode character is cased. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "caseprop.h" /* Quoting the Unicode standard: Definition: A character is defined to be "cased" if it has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter. */ #if 0 #include "unictype.h" bool uc_is_cased (ucs4_t uc) { return (uc_is_property_lowercase (uc) || uc_is_property_uppercase (uc) || uc_is_general_category (uc, UC_TITLECASE_LETTER)); } #else #include "unictype/bitmap.h" /* Define u_casing_property_cased table. */ #include "cased.h" bool uc_is_cased (ucs4_t uc) { return bitmap_lookup (&u_casing_property_cased, uc); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/cased.h���������������������������������������������������������0000664�0000000�0000000�00000023705�14110572173�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Casing Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[21 << 4]; } u_casing_property_cased = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x01FFFFFFU, 0x00000003U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCCF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x007FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF21FBD50U, 0x000043E0U, 0xFFFFFFFFU, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00003FFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF78FFU, 0x00FF7FFFU, 0x00000000U, 0x07000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������gnulib-20210822~d383792/lib/unicase/casefold.h������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "unitypes.h" /* Return the casefold mapping of a Unicode character. */ extern ucs4_t uc_tocasefold (ucs4_t uc); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/caseprop.h������������������������������������������������������0000664�0000000�0000000�00000003364�14110572173�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case related properties of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> #include "unitypes.h" /* Determine whether a character is "cased" according to the Unicode Standard, <https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, definition D120. */ extern bool uc_is_cased (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Determine whether a character is "case-ignorable" according to the Unicode Standard, <https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, definition D121. */ extern bool uc_is_case_ignorable (ucs4_t uc) _UC_ATTRIBUTE_CONST; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/context.h�������������������������������������������������������0000664�0000000�0000000�00000006177�14110572173�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping contexts of UTF-8/UTF-16/UTF-32 substring. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* The context of a prefix string combines the information of the "Before C" conditions of the Unicode Standard, <https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, table 3-14 "Context Specification for Casing". casing_prefix_context_t contains the following fields: // Helper for evaluating the FINAL_SIGMA condition: // Last character that was not case-ignorable. ucs4_t last_char_except_ignorable; // Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: // Last character that was of combining class 230 ("Above") or 0. ucs4_t last_char_normal_or_above; Three bits would be sufficient to carry the context information, but that would require to invoke uc_is_cased and uc_is_property_soft_dotted ahead of time, more often than actually needed. */ /* The context of a suffix string combines the information of the "After C" conditions of the Unicode Standard, <https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, table 3-14 "Context Specification for Casing". casing_suffix_context_t contains the following fields: // For evaluating the FINAL_SIGMA condition: // First character that was not case-ignorable. ucs4_t first_char_except_ignorable; // For evaluating the MORE_ABOVE condition: // Bit 0 is set if the suffix contains a character of combining class // 230 (Above) with no character of combining class 0 or 230 (Above) // before it. // // For evaluating the BEFORE_DOT condition: // Bit 1 is set if the suffix contains a COMBINING DOT ABOVE (U+0307) // with no character of combining class 0 or 230 (Above) before it. // uint32_t bits; Three bits would be sufficient to carry the context information, but that would require to invoke uc_is_cased ahead of time, more often than actually needed. */ #define SCC_MORE_ABOVE_MASK 1 #define SCC_BEFORE_DOT_MASK 2 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/empty-prefix-context.c������������������������������������������0000664�0000000�0000000�00000002635�14110572173�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of empty prefix string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" const casing_prefix_context_t unicase_empty_prefix_context = { 0xFFFD /* last_char_except_ignorable */, 0xFFFD /* last_char_normal_or_above */ }; ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/empty-suffix-context.c������������������������������������������0000664�0000000�0000000�00000002604�14110572173�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of empty suffix string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" const casing_suffix_context_t unicase_empty_suffix_context = { 0xFFFD /* first_char_except_ignorable */, 0 /* bits */ }; ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/ignorable.c�����������������������������������������������������0000664�0000000�0000000�00000005540�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode character is case-ignorable. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "caseprop.h" /* Quoting the Unicode standard: Definition: A character is defined to be "case-ignorable" if it has the value MidLetter {or the value MidNumLet} for the Word_Break property or its General_Category is one of Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk). The text marked in braces was added in Unicode 5.1.0, see <https://www.unicode.org/versions/Unicode5.1.0/> section "Update of Definition of case-ignorable". */ /* Since this predicate is only used for the "Before C" and "After C" conditions of FINAL_SIGMA, we exclude the "cased" characters here. This simplifies the evaluation of the regular expressions \p{cased} (\p{case-ignorable})* C and C (\p{case-ignorable})* \p{cased} */ #if 0 #include "unictype.h" #include "uniwbrk.h" bool uc_is_case_ignorable (ucs4_t uc) { int wbp = uc_wordbreak_property (uc); return (wbp == WBP_MIDLETTER || wbp == WBP_MIDNUMLET || uc_is_general_category_withtable (uc, UC_CATEGORY_MASK_Mn | UC_CATEGORY_MASK_Me | UC_CATEGORY_MASK_Cf | UC_CATEGORY_MASK_Lm | UC_CATEGORY_MASK_Sk)) && !uc_is_cased (uc); } #else #include "unictype/bitmap.h" /* Define u_casing_property_case_ignorable table. */ #include "ignorable.h" bool uc_is_case_ignorable (ucs4_t uc) { return bitmap_lookup (&u_casing_property_case_ignorable, uc); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/ignorable.h�����������������������������������������������������0000664�0000000�0000000�00000043167�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Casing Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[44 << 4]; } u_casing_property_case_ignorable = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, 16 + 384 * sizeof (short) / sizeof (int) + 208, 16 + 384 * sizeof (short) / sizeof (int) + 224, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, -1, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, 16 + 384 * sizeof (short) / sizeof (int) + 480, 16 + 384 * sizeof (short) / sizeof (int) + 496, 16 + 384 * sizeof (short) / sizeof (int) + 512, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, 16 + 384 * sizeof (short) / sizeof (int) + 608, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 624, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 656, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x04004000U, 0x40000000U, 0x00000001U, 0x00000000U, 0x0190A100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFE000000U, 0xFFFFFFFCU, 0xFFFFFFE0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFDFU, 0x0030FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00100000U, 0x17FF003FU, 0x00000000U, 0xFFFFF801U, 0x00010000U, 0x00000000U, 0x00000000U, 0xBFC00000U, 0x00003DFFU, 0x00028000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x043FF800U, 0xFFC00000U, 0x00003FFFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFFU, 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0002000CU, 0x00000002U, 0x10000000U, 0x0000201EU, 0x0000000CU, 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, 0x00000006U, 0x10000000U, 0x000021BEU, 0x0000000CU, 0x00000002U, 0x90000000U, 0x0040201EU, 0x0000000CU, 0x00000004U, 0x00000000U, 0x00002001U, 0x00000000U, 0x00000001U, 0xC0000000U, 0x00603DC1U, 0x0000000CU, 0x00000002U, 0x90000000U, 0x00003040U, 0x0000000CU, 0x00000002U, 0x00000000U, 0x0000201EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x005C0400U, 0x00000000U, 0x00000000U, 0x07F20000U, 0x00007FC0U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F40U, 0x00000000U, 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, 0x20002064U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0x3FB00000U, 0x208FFE40U, 0x00000000U, 0x00007800U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, 0x00000000U, 0x7FFF0080U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, 0x00000000U, 0x00CFF000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0x0300F800U, 0x00007C90U, 0x00000000U, 0x0000FFDFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x083E3C00U, 0x00000000U, 0x00000000U, 0x7E000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0xBFF78000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000700U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, 0x00000007U, 0x13C80000U, 0x00008000U, 0x00000060U, 0x00000000U, 0x00667E00U, 0x00001008U, 0x10010000U, 0x00000000U, 0xC19D0000U, 0x20000002U, 0x00583000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000003U, 0x00000000U, 0x0008FFFFU, 0x0000FFFFU, 0x00240000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x04004080U, 0x40000000U, 0x00000001U, 0x00010000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x0E000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000003U, 0x26780000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, 0x00000003U, 0x7FC00000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x40D38000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, 0x00000003U, 0x10000000U, 0x00000001U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0000005CU, 0x00000000U, 0x00000000U, 0x85F80000U, 0x0000000DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB03C0000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xBF7F0000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80380U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/invariant.h�����������������������������������������������������0000664�0000000�0000000�00000005060�14110572173�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal functions for Unicode character case mappings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> #include <stddef.h> #include "unitypes.h" #include "uninorm.h" /* Return true if mapping NFD(S) to via MAPPING is a no-op. */ extern int u8_is_invariant (const uint8_t *s, size_t n, uint8_t * (*mapping) (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp), const char *iso639_language, bool *resultp); extern int u16_is_invariant (const uint16_t *s, size_t n, uint16_t * (*mapping) (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp), const char *iso639_language, bool *resultp); extern int u32_is_invariant (const uint32_t *s, size_t n, uint32_t * (*mapping) (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp), const char *iso639_language, bool *resultp); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/locale-language.c�����������������������������������������������0000664�0000000�0000000�00000004235�14110572173�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Language code of current locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <locale.h> #include <string.h> #include "localename.h" #include "unicase/locale-languages.h" const char * uc_locale_language (void) { const char *locale_name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); const char *p; /* Find the end of the language portion. */ p = locale_name; while (*p != '\0' && *p != '_' && *p != '.' && *p != '@') p++; /* Return a statically allocated pointer to the language portion, so that the caller of this function does not need to free() the result. We could use a dynamically built unification table. But given that the set of possible languages is small, it is easier (and excludes ENOMEM error conditions) to allocate the unification table statically. */ if (p != locale_name) { const char *language = uc_locale_languages_lookup (locale_name, p - locale_name); if (language != NULL) return language; } return ""; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/locale-languages.gperf������������������������������������������0000664�0000000�0000000�00000015626�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Language codes of locales. Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ %language=ANSI-C %define hash-function-name uc_locale_language_hash %define lookup-function-name uc_locale_languages_lookup %compare-lengths %compare-strncmp %readonly-tables %pic /* List of languages taken from gettext/gettext-tools/src/lang-table.c on 2009-02-07. */ %% "aa", /* Afar" */ "ab", /* Abkhazian" */ "ace", /* Achinese" */ "ae", /* Avestan" */ "af", /* Afrikaans" */ "ak", /* Akan" */ "am", /* Amharic" */ "an", /* Aragonese" */ "ang", /* Old English" */ "ar", /* Arabic" */ "as", /* Assamese" */ "ast", /* Asturian" */ "av", /* Avaric" */ "awa", /* Awadhi" */ "ay", /* Aymara" */ "az", /* Azerbaijani" */ "ba", /* Bashkir" */ "bal", /* Baluchi" */ "ban", /* Balinese" */ "be", /* Belarusian" */ "bej", /* Beja" */ "bem", /* Bemba" */ "bg", /* Bulgarian" */ "bh", /* Bihari" */ "bho", /* Bhojpuri" */ "bi", /* Bislama" */ "bik", /* Bikol" */ "bin", /* Bini" */ "bm", /* Bambara" */ "bn", /* Bengali" */ "bo", /* Tibetan" */ "br", /* Breton" */ "bs", /* Bosnian" */ "bug", /* Buginese" */ "ca", /* Catalan" */ "ce", /* Chechen" */ "ceb", /* Cebuano" */ "ch", /* Chamorro" */ "co", /* Corsican" */ "cr", /* Cree" */ "crh", /* Crimean Tatar" */ "cs", /* Czech" */ "csb", /* Kashubian" */ "cu", /* Church Slavic" */ "cv", /* Chuvash" */ "cy", /* Welsh" */ "da", /* Danish" */ "de", /* German" */ "din", /* Dinka" */ "doi", /* Dogri" */ "dv", /* Divehi" */ "dz", /* Dzongkha" */ "ee", /* Ewe" */ "el", /* Greek" */ "en", /* English" */ "eo", /* Esperanto" */ "es", /* Spanish" */ "et", /* Estonian" */ "eu", /* Basque" */ "fa", /* Persian" */ "ff", /* Fulah" */ "fi", /* Finnish" */ "fil", /* Filipino" */ "fj", /* Fijian" */ "fo", /* Faroese" */ "fon", /* Fon" */ "fr", /* French" */ "fur", /* Friulian" */ "fy", /* Western Frisian" */ "ga", /* Irish" */ "gd", /* Scottish Gaelic" */ "gl", /* Galician" */ "gn", /* Guarani" */ "gon", /* Gondi" */ "gsw", /* Swiss German" */ "gu", /* Gujarati" */ "gv", /* Manx" */ "ha", /* Hausa" */ "he", /* Hebrew" */ "hi", /* Hindi" */ "hil", /* Hiligaynon" */ "hmn", /* Hmong" */ "ho", /* Hiri Motu" */ "hr", /* Croatian" */ "ht", /* Haitian" */ "hu", /* Hungarian" */ "hy", /* Armenian" */ "hz", /* Herero" */ "ia", /* Interlingua" */ "id", /* Indonesian" */ "ie", /* Interlingue" */ "ig", /* Igbo" */ "ii", /* Sichuan Yi" */ "ik", /* Inupiak" */ "ilo", /* Iloko" */ "is", /* Icelandic" */ "it", /* Italian" */ "iu", /* Inuktitut" */ "ja", /* Japanese" */ "jab", /* Hyam" */ "jv", /* Javanese" */ "ka", /* Georgian" */ "kab", /* Kabyle" */ "kaj", /* Jju" */ "kam", /* Kamba" */ "kbd", /* Kabardian" */ "kcg", /* Tyap" */ "kdm", /* Kagoma" */ "kg", /* Kongo" */ "ki", /* Kikuyu" */ "kj", /* Kuanyama" */ "kk", /* Kazakh" */ "kl", /* Kalaallisut" */ "km", /* Central Khmer" */ "kmb", /* Kimbundu" */ "kn", /* Kannada" */ "ko", /* Korean" */ "kr", /* Kanuri" */ "kru", /* Kurukh" */ "ks", /* Kashmiri" */ "ku", /* Kurdish" */ "kv", /* Komi" */ "kw", /* Cornish" */ "ky", /* Kirghiz" */ "kok", /* Konkani" */ "la", /* Latin" */ "lb", /* Letzeburgesch" */ "lg", /* Ganda" */ "li", /* Limburgish" */ "ln", /* Lingala" */ "lo", /* Laotian" */ "lt", /* Lithuanian" */ "lu", /* Luba-Katanga" */ "lua", /* Luba-Lulua" */ "luo", /* Luo" */ "lv", /* Latvian" */ "mad", /* Madurese" */ "mag", /* Magahi" */ "mai", /* Maithili" */ "mak", /* Makasar" */ "man", /* Mandingo" */ "men", /* Mende" */ "mg", /* Malagasy" */ "mh", /* Marshallese" */ "mi", /* Maori" */ "min", /* Minangkabau" */ "mk", /* Macedonian" */ "ml", /* Malayalam" */ "mn", /* Mongolian" */ "mni", /* Manipuri" */ "mo", /* Moldavian" */ "mos", /* Mossi" */ "mr", /* Marathi" */ "ms", /* Malay" */ "mt", /* Maltese" */ "mwr", /* Marwari" */ "my", /* Burmese" */ "myn", /* Mayan" */ "na", /* Nauru" */ "nap", /* Neapolitan" */ "nah", /* Nahuatl" */ "nb", /* Norwegian Bokmal" */ "nd", /* North Ndebele" */ "nds", /* Low Saxon" */ "ne", /* Nepali" */ "ng", /* Ndonga" */ "nl", /* Dutch" */ "nn", /* Norwegian Nynorsk" */ "no", /* Norwegian" */ "nr", /* South Ndebele" */ "nso", /* Northern Sotho" */ "nv", /* Navajo" */ "ny", /* Nyanja" */ "nym", /* Nyamwezi" */ "nyn", /* Nyankole" */ "oc", /* Occitan" */ "oj", /* Ojibwa" */ "om", /* (Afan) Oromo" */ "or", /* Oriya" */ "os", /* Ossetian" */ "pa", /* Punjabi" */ "pag", /* Pangasinan" */ "pam", /* Pampanga" */ "pap", /* Papiamento" */ "pbb", /* Páez" */ "pi", /* Pali" */ "pl", /* Polish" */ "ps", /* Pashto" */ "pt", /* Portuguese" */ "qu", /* Quechua" */ "raj", /* Rajasthani" */ "rm", /* Romansh" */ "rn", /* Kirundi" */ "ro", /* Romanian" */ "ru", /* Russian" */ "rw", /* Kinyarwanda" */ "sa", /* Sanskrit" */ "sas", /* Sasak" */ "sat", /* Santali" */ "sc", /* Sardinian" */ "scn", /* Sicilian" */ "sd", /* Sindhi" */ "se", /* Northern Sami" */ "sg", /* Sango" */ "shn", /* Shan" */ "si", /* Sinhala" */ "sid", /* Sidamo" */ "sk", /* Slovak" */ "sl", /* Slovenian" */ "sm", /* Samoan" */ "sn", /* Shona" */ "so", /* Somali" */ "sq", /* Albanian" */ "sr", /* Serbian" */ "srr", /* Serer" */ "ss", /* Siswati" */ "st", /* Sesotho" */ "su", /* Sundanese" */ "suk", /* Sukuma" */ "sus", /* Susu" */ "sv", /* Swedish" */ "sw", /* Swahili" */ "ta", /* Tamil" */ "te", /* Telugu" */ "tem", /* Timne" */ "tet", /* Tetum" */ "tg", /* Tajik" */ "th", /* Thai" */ "ti", /* Tigrinya" */ "tiv", /* Tiv" */ "tk", /* Turkmen" */ "tl", /* Tagalog" */ "tn", /* Setswana" */ "to", /* Tonga" */ "tr", /* Turkish" */ "ts", /* Tsonga" */ "tt", /* Tatar" */ "tum", /* Tumbuka" */ "tw", /* Twi" */ "ty", /* Tahitian" */ "ug", /* Uighur" */ "uk", /* Ukrainian" */ "umb", /* Umbundu" */ "ur", /* Urdu" */ "uz", /* Uzbek" */ "ve", /* Venda" */ "vi", /* Vietnamese" */ "vo", /* Volapuk" */ "wal", /* Walamo" */ "war", /* Waray" */ "wen", /* Sorbian" */ "wo", /* Wolof" */ "xh", /* Xhosa" */ "yao", /* Yao" */ "yi", /* Yiddish" */ "yo", /* Yoruba" */ "za", /* Zhuang" */ "zh", /* Chinese" */ "zu", /* Zulu" */ "zap", /* Zapotec" */ %% /* * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/simple-mapping.h������������������������������������������������0000664�0000000�0000000�00000003413�14110572173�0021570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple case mapping for Unicode characters. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ ucs4_t FUNC (ucs4_t uc) { unsigned int index1 = uc >> mapping_header_0; if (index1 < mapping_header_1) { int lookup1 = u_mapping.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> mapping_header_2) & mapping_header_3; int lookup2 = u_mapping.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & mapping_header_4); int lookup3 = u_mapping.level3[lookup2 + index3]; return uc + lookup3; } } } return uc; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/special-casing-table.gperf��������������������������������������0000664�0000000�0000000�00000053436�14110572173�0023503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Special casing rules of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ struct special_casing_rule { char code[3]; }; %struct-type %language=ANSI-C %define slot-name code %define hash-function-name gl_unicase_special_hash %define lookup-function-name gl_unicase_special_lookup %compare-lengths %compare-strncmp %readonly-tables %omit-struct-type %% "\x00\x49\x00", 1, SCC_MORE_ABOVE , { 'l', 't' }, { 0x0049, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 } "\x00\x49\x01", 1, -SCC_BEFORE_DOT , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } "\x00\x49\x02", 1, -SCC_BEFORE_DOT , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } "\x00\x49\x03", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } "\x00\x49\x04", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } "\x00\x4a\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x004A, 0, 0 }, { 0x006A, 0x0307, 0 }, { 0x004A, 0, 0 }, { 0x006A, 0, 0 } "\x00\x69\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } "\x00\x69\x01", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } "\x00\xcc\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CC, 0, 0 }, { 0x0069, 0x0307, 0x0300 }, { 0x00CC, 0, 0 }, { 0x00EC, 0, 0 } "\x00\xcd\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CD, 0, 0 }, { 0x0069, 0x0307, 0x0301 }, { 0x00CD, 0, 0 }, { 0x00ED, 0, 0 } "\x00\xdf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0053, 0 }, { 0x00DF, 0, 0 }, { 0x0053, 0x0073, 0 }, { 0x0073, 0x0073, 0 } "\x01\x28\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x0128, 0, 0 }, { 0x0069, 0x0307, 0x0303 }, { 0x0128, 0, 0 }, { 0x0129, 0, 0 } "\x01\x2e\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x012E, 0, 0 }, { 0x012F, 0x0307, 0 }, { 0x012E, 0, 0 }, { 0x012F, 0, 0 } "\x01\x30\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } "\x01\x30\x01", 1, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } "\x01\x30\x02", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 } "\x01\x49\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x02BC, 0x004E, 0 }, { 0x0149, 0, 0 }, { 0x02BC, 0x004E, 0 }, { 0x02BC, 0x006E, 0 } "\x01\xf0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x004A, 0x030C, 0 }, { 0x01F0, 0, 0 }, { 0x004A, 0x030C, 0 }, { 0x006A, 0x030C, 0 } "\x03\x07\x00", 1, SCC_AFTER_SOFT_DOTTED, { 'l', 't' }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 } "\x03\x07\x01", 1, SCC_AFTER_I , { 't', 'r' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } "\x03\x07\x02", 0, SCC_AFTER_I , { 'a', 'z' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } "\x03\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x0390, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } "\x03\xa3\x00", 0, SCC_FINAL_SIGMA , { '\0', '\0' }, { 0x03A3, 0, 0 }, { 0x03C2, 0, 0 }, { 0x03A3, 0, 0 }, { 0x03C3, 0, 0 } "\x03\xb0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x03B0, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } "\x05\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0535, 0x0552, 0 }, { 0x0587, 0, 0 }, { 0x0535, 0x0582, 0 }, { 0x0565, 0x0582, 0 } "\x1e\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0048, 0x0331, 0 }, { 0x1E96, 0, 0 }, { 0x0048, 0x0331, 0 }, { 0x0068, 0x0331, 0 } "\x1e\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0054, 0x0308, 0 }, { 0x1E97, 0, 0 }, { 0x0054, 0x0308, 0 }, { 0x0074, 0x0308, 0 } "\x1e\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0057, 0x030A, 0 }, { 0x1E98, 0, 0 }, { 0x0057, 0x030A, 0 }, { 0x0077, 0x030A, 0 } "\x1e\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0059, 0x030A, 0 }, { 0x1E99, 0, 0 }, { 0x0059, 0x030A, 0 }, { 0x0079, 0x030A, 0 } "\x1e\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0041, 0x02BE, 0 }, { 0x1E9A, 0, 0 }, { 0x0041, 0x02BE, 0 }, { 0x0061, 0x02BE, 0 } "\x1e\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1E9E, 0, 0 }, { 0x00DF, 0, 0 }, { 0x1E9E, 0, 0 }, { 0x0073, 0x0073, 0 } "\x1f\x50\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0 }, { 0x1F50, 0, 0 }, { 0x03A5, 0x0313, 0 }, { 0x03C5, 0x0313, 0 } "\x1f\x52\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0300 }, { 0x1F52, 0, 0 }, { 0x03A5, 0x0313, 0x0300 }, { 0x03C5, 0x0313, 0x0300 } "\x1f\x54\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0301 }, { 0x1F54, 0, 0 }, { 0x03A5, 0x0313, 0x0301 }, { 0x03C5, 0x0313, 0x0301 } "\x1f\x56\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0342 }, { 0x1F56, 0, 0 }, { 0x03A5, 0x0313, 0x0342 }, { 0x03C5, 0x0313, 0x0342 } "\x1f\x80\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } "\x1f\x81\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } "\x1f\x82\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } "\x1f\x83\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } "\x1f\x84\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } "\x1f\x85\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } "\x1f\x86\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } "\x1f\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } "\x1f\x88\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } "\x1f\x89\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } "\x1f\x8a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } "\x1f\x8b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } "\x1f\x8c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } "\x1f\x8d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } "\x1f\x8e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } "\x1f\x8f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } "\x1f\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } "\x1f\x91\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } "\x1f\x92\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } "\x1f\x93\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } "\x1f\x94\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } "\x1f\x95\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } "\x1f\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } "\x1f\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } "\x1f\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } "\x1f\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } "\x1f\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } "\x1f\x9b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } "\x1f\x9c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } "\x1f\x9d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } "\x1f\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } "\x1f\x9f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } "\x1f\xa0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } "\x1f\xa1\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } "\x1f\xa2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } "\x1f\xa3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } "\x1f\xa4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } "\x1f\xa5\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } "\x1f\xa6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } "\x1f\xa7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } "\x1f\xa8\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } "\x1f\xa9\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } "\x1f\xaa\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } "\x1f\xab\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } "\x1f\xac\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } "\x1f\xad\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } "\x1f\xae\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } "\x1f\xaf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } "\x1f\xb2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FBA, 0x0399, 0 }, { 0x1FB2, 0, 0 }, { 0x1FBA, 0x0345, 0 }, { 0x1F70, 0x03B9, 0 } "\x1f\xb3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } "\x1f\xb4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0386, 0x0399, 0 }, { 0x1FB4, 0, 0 }, { 0x0386, 0x0345, 0 }, { 0x03AC, 0x03B9, 0 } "\x1f\xb6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0 }, { 0x1FB6, 0, 0 }, { 0x0391, 0x0342, 0 }, { 0x03B1, 0x0342, 0 } "\x1f\xb7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0x0399 }, { 0x1FB7, 0, 0 }, { 0x0391, 0x0342, 0x0345 }, { 0x03B1, 0x0342, 0x03B9 } "\x1f\xbc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } "\x1f\xc2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FCA, 0x0399, 0 }, { 0x1FC2, 0, 0 }, { 0x1FCA, 0x0345, 0 }, { 0x1F74, 0x03B9, 0 } "\x1f\xc3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } "\x1f\xc4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0389, 0x0399, 0 }, { 0x1FC4, 0, 0 }, { 0x0389, 0x0345, 0 }, { 0x03AE, 0x03B9, 0 } "\x1f\xc6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0 }, { 0x1FC6, 0, 0 }, { 0x0397, 0x0342, 0 }, { 0x03B7, 0x0342, 0 } "\x1f\xc7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0x0399 }, { 0x1FC7, 0, 0 }, { 0x0397, 0x0342, 0x0345 }, { 0x03B7, 0x0342, 0x03B9 } "\x1f\xcc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } "\x1f\xd2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0300 }, { 0x1FD2, 0, 0 }, { 0x0399, 0x0308, 0x0300 }, { 0x03B9, 0x0308, 0x0300 } "\x1f\xd3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x1FD3, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } "\x1f\xd6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0342, 0 }, { 0x1FD6, 0, 0 }, { 0x0399, 0x0342, 0 }, { 0x03B9, 0x0342, 0 } "\x1f\xd7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0342 }, { 0x1FD7, 0, 0 }, { 0x0399, 0x0308, 0x0342 }, { 0x03B9, 0x0308, 0x0342 } "\x1f\xe2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0300 }, { 0x1FE2, 0, 0 }, { 0x03A5, 0x0308, 0x0300 }, { 0x03C5, 0x0308, 0x0300 } "\x1f\xe3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x1FE3, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } "\x1f\xe4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A1, 0x0313, 0 }, { 0x1FE4, 0, 0 }, { 0x03A1, 0x0313, 0 }, { 0x03C1, 0x0313, 0 } "\x1f\xe6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0342, 0 }, { 0x1FE6, 0, 0 }, { 0x03A5, 0x0342, 0 }, { 0x03C5, 0x0342, 0 } "\x1f\xe7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0342 }, { 0x1FE7, 0, 0 }, { 0x03A5, 0x0308, 0x0342 }, { 0x03C5, 0x0308, 0x0342 } "\x1f\xf2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FFA, 0x0399, 0 }, { 0x1FF2, 0, 0 }, { 0x1FFA, 0x0345, 0 }, { 0x1F7C, 0x03B9, 0 } "\x1f\xf3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } "\x1f\xf4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x038F, 0x0399, 0 }, { 0x1FF4, 0, 0 }, { 0x038F, 0x0345, 0 }, { 0x03CE, 0x03B9, 0 } "\x1f\xf6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0 }, { 0x1FF6, 0, 0 }, { 0x03A9, 0x0342, 0 }, { 0x03C9, 0x0342, 0 } "\x1f\xf7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0x0399 }, { 0x1FF7, 0, 0 }, { 0x03A9, 0x0342, 0x0345 }, { 0x03C9, 0x0342, 0x03B9 } "\x1f\xfc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } "\xfb\x00\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0 }, { 0xFB00, 0, 0 }, { 0x0046, 0x0066, 0 }, { 0x0066, 0x0066, 0 } "\xfb\x01\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0049, 0 }, { 0xFB01, 0, 0 }, { 0x0046, 0x0069, 0 }, { 0x0066, 0x0069, 0 } "\xfb\x02\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x004C, 0 }, { 0xFB02, 0, 0 }, { 0x0046, 0x006C, 0 }, { 0x0066, 0x006C, 0 } "\xfb\x03\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x0049 }, { 0xFB03, 0, 0 }, { 0x0046, 0x0066, 0x0069 }, { 0x0066, 0x0066, 0x0069 } "\xfb\x04\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x004C }, { 0xFB04, 0, 0 }, { 0x0046, 0x0066, 0x006C }, { 0x0066, 0x0066, 0x006C } "\xfb\x05\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB05, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } "\xfb\x06\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB06, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } "\xfb\x13\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0546, 0 }, { 0xFB13, 0, 0 }, { 0x0544, 0x0576, 0 }, { 0x0574, 0x0576, 0 } "\xfb\x14\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0535, 0 }, { 0xFB14, 0, 0 }, { 0x0544, 0x0565, 0 }, { 0x0574, 0x0565, 0 } "\xfb\x15\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053B, 0 }, { 0xFB15, 0, 0 }, { 0x0544, 0x056B, 0 }, { 0x0574, 0x056B, 0 } "\xfb\x16\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x054E, 0x0546, 0 }, { 0xFB16, 0, 0 }, { 0x054E, 0x0576, 0 }, { 0x057E, 0x0576, 0 } "\xfb\x17\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053D, 0 }, { 0xFB17, 0, 0 }, { 0x0544, 0x056D, 0 }, { 0x0574, 0x056D, 0 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/special-casing.c������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0021532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Special casing table. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase/special-casing.h" #include <string.h> #include "unicase/special-casing-table.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/special-casing.in.h���������������������������������������������0000664�0000000�0000000�00000004577�14110572173�0022151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Special casing table. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stddef.h> /* A special casing context. A context is negated through x -> -x. */ enum { SCC_ALWAYS = 0, SCC_FINAL_SIGMA = 1, SCC_AFTER_SOFT_DOTTED = 2, SCC_MORE_ABOVE = 3, SCC_BEFORE_DOT = 4, SCC_AFTER_I = 5 }; struct special_casing_rule { /* The first two bytes are the code, in big-endian order. The third byte only distinguishes different rules pertaining to the same code. */ /*unsigned*/ char code[3]; /* True when this rule is not the last one for the given code. */ /*bool*/ unsigned int has_next : 1; /* Context. */ signed int context : 7; /* Language, or an empty string. */ char language[2]; /* Mapping to upper case. Between 0 and 3 characters. Filled with 0s. */ unsigned short upper[3]; /* Mapping to lower case. Between 0 and 3 characters. Filled with 0s. */ unsigned short lower[3]; /* Mapping to title case. Between 0 and 3 characters. Filled with 0s. */ unsigned short title[3]; /* Casefolding mapping. Between 0 and 3 characters. Filled with 0s. */ unsigned short casefold[3]; }; extern const struct special_casing_rule * gl_unicase_special_lookup (const char *str, size_t len); ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/tocasefold.c����������������������������������������������������0000664�0000000�0000000�00000002630�14110572173�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefold mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "casefold.h" /* Define u_mapping table. */ #include "tocasefold.h" #define FUNC uc_tocasefold #include "simple-mapping.h" ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/tocasefold.h����������������������������������������������������0000664�0000000�0000000�00000122015�14110572173�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define mapping_header_0 16 #define mapping_header_1 2 #define mapping_header_2 7 #define mapping_header_3 511 #define mapping_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[34 << 7]; } u_mapping = { { 0, 512 }, { 0, 128, 256, 384, 512, -1, 640, 768, 896, 1024, 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1280, -1, -1, -1, -1, -1, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -1, -1, 1664, 1792, 1920, 2048, -1, -1, 2176, 2304, -1, -1, -1, -1, -1, 2432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2560, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2816, 2944, 3072, 3200, -1, -1, -1, -1, -1, -1, 3328, 3456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3584, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3712, 3840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4096, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -121, 1, 0, 1, 0, 1, 0, -268, 0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202, 203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214, 1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1, 0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 2, 1, 0, 1, 0, -97, -56, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -130, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, -163, 10792, 0, 0, 1, 0, -195, 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -30, -25, 0, 0, 0, -15, -22, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -54, -48, 0, 0, -60, -64, 0, 1, 0, -7, 1, 0, 0, -130, -130, -130, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, -6222, -6221, -6212, -6210, -6210, -6211, -6204, -6180, 35267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -8, 0, -8, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -74, -74, 0, 0, -7173, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -112, -112, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -126, -126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7517, 0, 0, 0, -8383, -8262, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -10743, -3814, -10727, 0, 0, 1, 0, 1, 0, 1, 0, -10780, -10749, -10783, -10782, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -10815, -10815, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -35332, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, -42280, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -42308, -42319, -42315, -42305, -42308, 0, -42258, -42282, -42261, 928, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/tolower.c�������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0020335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" /* Define u_mapping table. */ #include "tolower.h" #define FUNC uc_tolower #include "simple-mapping.h" ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/tolower.h�������������������������������������������������������0000664�0000000�0000000�00000114175�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define mapping_header_0 16 #define mapping_header_1 2 #define mapping_header_2 7 #define mapping_header_3 511 #define mapping_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[31 << 7]; } u_mapping = { { 0, 512 }, { 0, 128, 256, 384, 512, -1, 640, 768, 896, 1024, 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1280, -1, -1, -1, -1, -1, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, 1664, 1792, 1920, -1, -1, 2048, 2176, -1, -1, -1, -1, -1, 2304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2432, 2560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2688, 2816, 2944, 3072, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3200, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328, 3456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3584, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3712, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -199, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -121, 1, 0, 1, 0, 1, 0, 0, 0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202, 203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214, 1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1, 0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 2, 1, 0, 1, 0, -97, -56, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -130, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, -163, 10792, 0, 0, 1, 0, -195, 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, -60, 0, 0, 1, 0, -7, 1, 0, 0, -130, -130, -130, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7615, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -8, 0, -8, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -74, -74, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, -86, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -112, -112, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -126, -126, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7517, 0, 0, 0, -8383, -8262, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -10743, -3814, -10727, 0, 0, 1, 0, 1, 0, 1, 0, -10780, -10749, -10783, -10782, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -10815, -10815, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -35332, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, -42280, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -42308, -42319, -42315, -42305, -42308, 0, -42258, -42282, -42261, 928, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/totitle.c�������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" /* Define u_mapping table. */ #include "totitle.h" #define FUNC uc_totitle #include "simple-mapping.h" ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/totitle.h�������������������������������������������������������0000664�0000000�0000000�00000127475�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define mapping_header_0 16 #define mapping_header_1 2 #define mapping_header_2 7 #define mapping_header_3 511 #define mapping_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[37 << 7]; } u_mapping = { { 0, 512 }, { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1664, 1792, -1, 1920, 2048, 2176, 2304, -1, -1, 2432, 2560, -1, -1, -1, -1, -1, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2816, 2944, 3072, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3200, 3328, 3456, 3584, -1, -1, -1, -1, -1, -1, 3712, 3840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3968, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4096, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, -32, -32, -32, -32, -32, 121, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -232, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, -300, 195, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 97, 0, 0, 0, -1, 163, 0, 0, 0, 130, 0, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 56, 0, 0, 0, 0, 1, 0, -1, 1, 0, -1, 1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -79, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 10783, 10780, 10782, -210, -206, 0, -205, -205, 0, -202, 0, -203, 42319, 0, 0, 0, -205, 42315, 0, -207, 0, 42280, 42308, 0, -209, -211, 42308, 10743, 42305, 0, 0, -211, 0, 10749, -213, 0, 0, -214, 0, 0, 0, 0, 0, 0, 0, 10727, 0, 0, -218, 0, 0, -218, 0, 0, 0, 42282, -218, -69, -217, -217, -71, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42261, 42258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, -37, -37, -37, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -64, -63, -63, 0, -62, -57, 0, 0, 0, -47, -54, -8, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -86, -80, 7, -116, 0, -96, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -15, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, -6254, -6253, -6244, -6242, -6242, -6243, -6236, -6181, 35266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35332, 0, 0, 0, 3814, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 74, 74, 86, 86, 86, 86, 100, 100, 128, 128, 112, 112, 126, 126, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7205, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, 0, -1, 0, 0, 0, -10795, -10792, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, 0, -7264, 0, 0, 0, 0, 0, -7264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/toupper.c�������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" /* Define u_mapping table. */ #include "toupper.h" #define FUNC uc_toupper #include "simple-mapping.h" ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/toupper.h�������������������������������������������������������0000664�0000000�0000000�00000127475�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define mapping_header_0 16 #define mapping_header_1 2 #define mapping_header_2 7 #define mapping_header_3 511 #define mapping_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[37 << 7]; } u_mapping = { { 0, 512 }, { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1664, 1792, -1, 1920, 2048, 2176, 2304, -1, -1, 2432, 2560, -1, -1, -1, -1, -1, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2816, 2944, 3072, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3200, 3328, 3456, 3584, -1, -1, -1, -1, -1, -1, 3712, 3840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3968, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4096, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, -32, -32, -32, -32, -32, 121, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -232, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, -300, 195, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 97, 0, 0, 0, -1, 163, 0, 0, 0, 130, 0, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 56, 0, 0, 0, 0, 0, -1, -2, 0, -1, -2, 0, -1, -2, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -79, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, -2, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 10783, 10780, 10782, -210, -206, 0, -205, -205, 0, -202, 0, -203, 42319, 0, 0, 0, -205, 42315, 0, -207, 0, 42280, 42308, 0, -209, -211, 42308, 10743, 42305, 0, 0, -211, 0, 10749, -213, 0, 0, -214, 0, 0, 0, 0, 0, 0, 0, 10727, 0, 0, -218, 0, 0, -218, 0, 0, 0, 42282, -218, -69, -217, -217, -71, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42261, 42258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, -37, -37, -37, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -64, -63, -63, 0, -62, -57, 0, 0, 0, -47, -54, -8, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -86, -80, 7, -116, 0, -96, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -15, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, -6254, -6253, -6244, -6242, -6242, -6243, -6236, -6181, 35266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35332, 0, 0, 0, 3814, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 74, 74, 86, 86, 86, 86, 100, 100, 128, 128, 112, 112, 126, 126, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7205, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, 0, -1, 0, 0, 0, -10795, -10792, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, 0, -7264, 0, 0, 0, 0, 0, -7264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, -38864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-casecmp.h�����������������������������������������������������0000664�0000000�0000000�00000005007�14110572173�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const SRC_UNIT *s1, size_t n1, const SRC_UNIT *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) { UNIT buf1[2048 / sizeof (UNIT)]; UNIT buf2[2048 / sizeof (UNIT)]; UNIT *norms1; size_t norms1_length; UNIT *norms2; size_t norms2_length; int cmp; /* Optimization: There is no need to do canonical composition of each string. Decomposition is enough. */ if (nf != NULL) nf = uninorm_decomposing_form (nf); /* Case-fold and normalize S1. */ norms1_length = sizeof (buf1) / sizeof (UNIT); norms1 = U_CASEFOLD (s1, n1, iso639_language, nf, buf1, &norms1_length); if (norms1 == NULL) /* errno is set here. */ return -1; /* Case-fold and normalize S2. */ norms2_length = sizeof (buf2) / sizeof (UNIT); norms2 = U_CASEFOLD (s2, n2, iso639_language, nf, buf2, &norms2_length); if (norms2 == NULL) { if (norms1 != buf1) { int saved_errno = errno; free (norms1); errno = saved_errno; } return -1; } /* Compare the normalized strings. */ cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); if (cmp > 0) cmp = 1; else if (cmp < 0) cmp = -1; if (norms2 != buf2) free (norms2); if (norms1 != buf1) free (norms1); *resultp = cmp; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-casecoll.h����������������������������������������������������0000664�0000000�0000000�00000004706�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) { char buf1[2048]; char buf2[2048]; char *transformed1; size_t transformed1_length; char *transformed2; size_t transformed2_length; int cmp; /* Normalize and transform S1. */ transformed1_length = sizeof (buf1); transformed1 = U_CASEXFRM (s1, n1, iso639_language, nf, buf1, &transformed1_length); if (transformed1 == NULL) /* errno is set here. */ return -1; /* Normalize and transform S2. */ transformed2_length = sizeof (buf2); transformed2 = U_CASEXFRM (s2, n2, iso639_language, nf, buf2, &transformed2_length); if (transformed2 == NULL) { if (transformed1 != buf1) { int saved_errno = errno; free (transformed1); errno = saved_errno; } return -1; } /* Compare the transformed strings. */ cmp = memcmp2 (transformed1, transformed1_length, transformed2, transformed2_length); if (cmp < 0) cmp = -1; else if (cmp > 0) cmp = 1; if (transformed2 != buf2) free (transformed2); if (transformed1 != buf1) free (transformed1); *resultp = cmp; return 0; } ����������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-casefold.h����������������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0020672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for Unicode strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, UNIT *resultbuf, size_t *lengthp) { return U_CT_CASEFOLD (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-casemap.h�����������������������������������������������������0000664�0000000�0000000�00000037001�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, ucs4_t (*single_character_map) (ucs4_t), size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ uninorm_t nf, UNIT *resultbuf, size_t *lengthp) { /* The result being accumulated. */ UNIT *result; size_t length; size_t allocated; /* Initialize the accumulator. */ if (nf != NULL || resultbuf == NULL) { result = NULL; allocated = 0; } else { result = resultbuf; allocated = *lengthp; } length = 0; { const UNIT *s_end = s + n; /* Helper for evaluating the FINAL_SIGMA condition: Last character that was not case-ignorable. */ ucs4_t last_char_except_ignorable = prefix_context.last_char_except_ignorable; /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: Last character that was of combining class 230 ("Above") or 0. */ ucs4_t last_char_normal_or_above = prefix_context.last_char_normal_or_above; while (s < s_end) { ucs4_t uc; int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); ucs4_t mapped_uc[3]; unsigned int mapped_count; if (uc < 0x10000) { /* Look first in the special-casing table. */ char code[3]; code[0] = (uc >> 8) & 0xff; code[1] = uc & 0xff; for (code[2] = 0; ; code[2]++) { const struct special_casing_rule *rule = gl_unicase_special_lookup (code, 3); if (rule == NULL) break; /* Test if the condition applies. */ /* Does the language apply? */ if (rule->language[0] == '\0' || (iso639_language != NULL && iso639_language[0] == rule->language[0] && iso639_language[1] == rule->language[1])) { /* Does the context apply? */ int context = rule->context; bool applies; if (context < 0) context = - context; switch (context) { case SCC_ALWAYS: applies = true; break; case SCC_FINAL_SIGMA: /* "Before" condition: preceded by a sequence consisting of a cased letter and a case-ignorable sequence. "After" condition: not followed by a sequence consisting of a case-ignorable sequence and then a cased letter. */ /* Test the "before" condition. */ applies = uc_is_cased (last_char_except_ignorable); /* Test the "after" condition. */ if (applies) { const UNIT *s2 = s + count; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); /* Our uc_is_case_ignorable function is known to return false for all cased characters. So we can call uc_is_case_ignorable first. */ if (!uc_is_case_ignorable (uc2)) { applies = ! uc_is_cased (uc2); break; } s2 += count2; } else { applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); break; } } } break; case SCC_AFTER_SOFT_DOTTED: /* "Before" condition: There is a Soft_Dotted character before it, with no intervening character of combining class 0 or 230 (Above). */ /* Test the "before" condition. */ applies = uc_is_property_soft_dotted (last_char_normal_or_above); break; case SCC_MORE_ABOVE: /* "After" condition: followed by a character of combining class 230 (Above) with no intervening character of combining class 0 or 230 (Above). */ /* Test the "after" condition. */ { const UNIT *s2 = s + count; applies = false; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); int ccc = uc_combining_class (uc2); if (ccc == UC_CCC_A) { applies = true; break; } if (ccc == UC_CCC_NR) break; s2 += count2; } else { applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); break; } } } break; case SCC_BEFORE_DOT: /* "After" condition: followed by COMBINING DOT ABOVE (U+0307). Any sequence of characters with a combining class that is neither 0 nor 230 may intervene between the current character and the combining dot above. */ /* Test the "after" condition. */ { const UNIT *s2 = s + count; applies = false; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ { applies = true; break; } { int ccc = uc_combining_class (uc2); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) break; } s2 += count2; } else { applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); break; } } } break; case SCC_AFTER_I: /* "Before" condition: There is an uppercase I before it, and there is no intervening character of combining class 0 or 230 (Above). */ /* Test the "before" condition. */ applies = (last_char_normal_or_above == 'I'); break; default: abort (); } if (rule->context < 0) applies = !applies; if (applies) { /* The rule applies. Look up the mapping (0 to 3 characters). */ const unsigned short *mapped_in_rule = (const unsigned short *)((const char *)rule + offset_in_rule); if (mapped_in_rule[0] == 0) mapped_count = 0; else { mapped_uc[0] = mapped_in_rule[0]; if (mapped_in_rule[1] == 0) mapped_count = 1; else { mapped_uc[1] = mapped_in_rule[1]; if (mapped_in_rule[2] == 0) mapped_count = 2; else { mapped_uc[2] = mapped_in_rule[2]; mapped_count = 3; } } } goto found_mapping; } } /* Optimization: Save a hash table lookup in the next round. */ if (!rule->has_next) break; } } /* No special-cased mapping. So use the locale and context independent mapping. */ mapped_uc[0] = single_character_map (uc); mapped_count = 1; found_mapping: /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ { unsigned int i; for (i = 0; i < mapped_count; i++) { ucs4_t muc = mapped_uc[i]; /* Append muc to the result accumulator. */ if (length < allocated) { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail; } if (ret >= 0) { length += ret; goto done_appending; } } { size_t old_allocated = allocated; size_t new_allocated = 2 * old_allocated; if (new_allocated < 64) new_allocated = 64; if (new_allocated < old_allocated) /* integer overflow? */ abort (); { UNIT *larger_result; if (result == NULL) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } } else if (result == resultbuf) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } U_CPY (larger_result, resultbuf, length); } else { larger_result = (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } } result = larger_result; allocated = new_allocated; { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail; } if (ret < 0) abort (); length += ret; goto done_appending; } } } done_appending: ; } } if (!uc_is_case_ignorable (uc)) last_char_except_ignorable = uc; { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) last_char_normal_or_above = uc; } s += count; } } if (nf != NULL) { /* Finally, normalize the result. */ UNIT *normalized_result; normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); if (normalized_result == NULL) goto fail; free (result); return normalized_result; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; goto fail; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ UNIT *memory; memory = (UNIT *) realloc (result, length * sizeof (UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; fail: if (result != resultbuf) { int saved_errno = errno; free (result); errno = saved_errno; } return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-casexfrm.h����������������������������������������������������0000664�0000000�0000000�00000005737�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ char * FUNC (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) { UNIT foldedsbuf[2048 / sizeof (UNIT)]; UNIT *foldeds; size_t foldeds_length; char convsbuf[2048]; char *convs; size_t convs_length; char *result; /* Casefold and normalize the Unicode string. */ foldeds_length = sizeof (foldedsbuf) / sizeof (UNIT); foldeds = U_CASEFOLD (s, n, iso639_language, nf, foldedsbuf, &foldeds_length); if (foldeds == NULL) /* errno is set here. */ return NULL; /* Convert it to locale encoding. */ convs_length = sizeof (convsbuf) - 1; convs = U_CONV_TO_ENCODING (locale_charset (), iconveh_error, foldeds, foldeds_length, NULL, convsbuf, &convs_length); if (convs == NULL) { if (foldeds != foldedsbuf) { int saved_errno = errno; free (foldeds); errno = saved_errno; } return NULL; } if (foldeds != foldedsbuf) free (foldeds); /* Ensure one more byte is available. */ if (convs != convsbuf) { char *memory = (char *) realloc (convs, convs_length + 1); if (memory == NULL) { free (convs); errno = ENOMEM; return NULL; } convs = memory; } /* Apply locale dependent transformations for comparison. */ result = amemxfrm (convs, convs_length, resultbuf, lengthp); if (result == NULL) { if (convs != convsbuf) { int saved_errno = errno; free (convs); errno = saved_errno; } return NULL; } if (convs != convsbuf) free (convs); return result; } ���������������������������������gnulib-20210822~d383792/lib/unicase/u-ct-casefold.h�������������������������������������������������0000664�0000000�0000000�00000010350�14110572173�0021272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for Unicode substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, UNIT *resultbuf, size_t *lengthp) { /* Implement the three definitions of caseless matching, as described in Unicode 5.0, section "Default caseless matching": - If no normalization is requested, simply apply the casefolding. X -> toCasefold(X). - If canonical normalization is requested, apply it, and apply an NFD before. X -> NFD(toCasefold(NFD(X))). - If compatibility normalization is requested, apply it twice, apply the normalization after each, and apply an NFD before: X -> NFKD(toCasefold(NFKD(toCasefold(NFD(X))))). */ if (nf == NULL) /* X -> toCasefold(X) */ return U_CASEMAP (s, n, prefix_context, suffix_context, iso639_language, uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), NULL, resultbuf, lengthp); else { uninorm_t nfd = uninorm_decomposing_form (nf); /* X -> nf(toCasefold(NFD(X))) or X -> nf(toCasefold(nfd(toCasefold(NFD(X))))) */ int repeat = (uninorm_is_compat_decomposing (nf) ? 2 : 1); UNIT tmpbuf1[2048 / sizeof (UNIT)]; UNIT tmpbuf2[2048 / sizeof (UNIT)]; UNIT *tmp1; size_t tmp1_length; UNIT *tmp2; size_t tmp2_length; tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); tmp1 = U_NORMALIZE (UNINORM_NFD, s, n, tmpbuf1, &tmp1_length); if (tmp1 == NULL) /* errno is set here. */ return NULL; do { tmp2_length = sizeof (tmpbuf2) / sizeof (UNIT); tmp2 = U_CASEMAP (tmp1, tmp1_length, prefix_context, suffix_context, iso639_language, uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), NULL, tmpbuf2, &tmp2_length); if (tmp2 == NULL) { int saved_errno = errno; if (tmp1 != tmpbuf1) free (tmp1); errno = saved_errno; return NULL; } if (tmp1 != tmpbuf1) free (tmp1); if (repeat > 1) { tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); tmp1 = U_NORMALIZE (nfd, tmp2, tmp2_length, tmpbuf1, &tmp1_length); } else /* Last run through this loop. */ tmp1 = U_NORMALIZE (nf, tmp2, tmp2_length, resultbuf, lengthp); if (tmp1 == NULL) { int saved_errno = errno; if (tmp2 != tmpbuf2) free (tmp2); errno = saved_errno; return NULL; } if (tmp2 != tmpbuf2) free (tmp2); } while (--repeat > 0); return tmp1; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-ct-totitle.h��������������������������������������������������0000664�0000000�0000000�00000044372�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8/UTF-16/UTF-32 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Quoting the Unicode standard, section "Default Case Algorithms": Find the word boundaries in X according to Unicode Standard Annex #29, “Text Boundaries.” For each word boundary, find the first cased character F following the word boundary. If F exists, map F to Titlecase_Mapping(F); then map all characters C between F and the following word boundary to Lowercase_Mapping(C). */ UNIT * FUNC (const UNIT *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, UNIT *resultbuf, size_t *lengthp) { /* The result being accumulated. */ UNIT *result; size_t length; size_t allocated; /* An array containing the word break positions. */ char *wordbreaks; /* Initialize the accumulator. */ if (nf != NULL || resultbuf == NULL) { result = NULL; allocated = 0; } else { result = resultbuf; allocated = *lengthp; } length = 0; /* Initialize the word breaks array. */ if (n > 0) { wordbreaks = (char *) malloc (n); if (wordbreaks == NULL) { errno = ENOMEM; goto fail2; } U_WORDBREAKS (s, n, wordbreaks); } else wordbreaks = NULL; { const UNIT *s_end = s + n; const char *wp = wordbreaks; /* When considering the string as segmented by word boundaries: For each such segment: - In the first part, we are searching for the first cased character. In this state, in_word_first_part = true, and no conversion takes place. - In the second part, we are converting every character: the first among these characters to title case, the other ones to lower case. In this state, in_word_first_part = false. */ bool in_word_first_part = true; /* Helper for evaluating the FINAL_SIGMA condition: Last character that was not case-ignorable. */ ucs4_t last_char_except_ignorable = prefix_context.last_char_except_ignorable; /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: Last character that was of combining class 230 ("Above") or 0. */ ucs4_t last_char_normal_or_above = prefix_context.last_char_normal_or_above; while (s < s_end) { /* Fetch the next character. */ ucs4_t uc; int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); ucs4_t (*single_character_map) (ucs4_t); size_t offset_in_rule; /* offset in 'struct special_casing_rule' */ ucs4_t mapped_uc[3]; unsigned int mapped_count; if (*wp) /* Crossing a word boundary. */ in_word_first_part = true; /* Determine single_character_map, offset_in_rule. There are three possibilities: - uc should not be converted. - uc should be titlecased. - uc should be lowercased. */ if (in_word_first_part) { if (uc_is_cased (uc)) { /* uc is to be titlecased. */ single_character_map = uc_totitle; offset_in_rule = offsetof (struct special_casing_rule, title[0]); in_word_first_part = false; } else { /* uc is not converted. */ single_character_map = NULL; offset_in_rule = 0; } } else { /* uc is to be lowercased. */ single_character_map = uc_tolower; offset_in_rule = offsetof (struct special_casing_rule, lower[0]); } /* Actually map uc. */ if (single_character_map == NULL) { mapped_uc[0] = uc; mapped_count = 1; goto found_mapping; } if (uc < 0x10000) { /* Look first in the special-casing table. */ char code[3]; code[0] = (uc >> 8) & 0xff; code[1] = uc & 0xff; for (code[2] = 0; ; code[2]++) { const struct special_casing_rule *rule = gl_unicase_special_lookup (code, 3); if (rule == NULL) break; /* Test if the condition applies. */ /* Does the language apply? */ if (rule->language[0] == '\0' || (iso639_language != NULL && iso639_language[0] == rule->language[0] && iso639_language[1] == rule->language[1])) { /* Does the context apply? */ int context = rule->context; bool applies; if (context < 0) context = - context; switch (context) { case SCC_ALWAYS: applies = true; break; case SCC_FINAL_SIGMA: /* "Before" condition: preceded by a sequence consisting of a cased letter and a case-ignorable sequence. "After" condition: not followed by a sequence consisting of a case-ignorable sequence and then a cased letter. */ /* Test the "before" condition. */ applies = uc_is_cased (last_char_except_ignorable); /* Test the "after" condition. */ if (applies) { const UNIT *s2 = s + count; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); /* Our uc_is_case_ignorable function is known to return false for all cased characters. So we can call uc_is_case_ignorable first. */ if (!uc_is_case_ignorable (uc2)) { applies = ! uc_is_cased (uc2); break; } s2 += count2; } else { applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); break; } } } break; case SCC_AFTER_SOFT_DOTTED: /* "Before" condition: There is a Soft_Dotted character before it, with no intervening character of combining class 0 or 230 (Above). */ /* Test the "before" condition. */ applies = uc_is_property_soft_dotted (last_char_normal_or_above); break; case SCC_MORE_ABOVE: /* "After" condition: followed by a character of combining class 230 (Above) with no intervening character of combining class 0 or 230 (Above). */ /* Test the "after" condition. */ { const UNIT *s2 = s + count; applies = false; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); int ccc = uc_combining_class (uc2); if (ccc == UC_CCC_A) { applies = true; break; } if (ccc == UC_CCC_NR) break; s2 += count2; } else { applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); break; } } } break; case SCC_BEFORE_DOT: /* "After" condition: followed by COMBINING DOT ABOVE (U+0307). Any sequence of characters with a combining class that is neither 0 nor 230 may intervene between the current character and the combining dot above. */ /* Test the "after" condition. */ { const UNIT *s2 = s + count; applies = false; for (;;) { if (s2 < s_end) { ucs4_t uc2; int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ { applies = true; break; } { int ccc = uc_combining_class (uc2); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) break; } s2 += count2; } else { applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); break; } } } break; case SCC_AFTER_I: /* "Before" condition: There is an uppercase I before it, and there is no intervening character of combining class 0 or 230 (Above). */ /* Test the "before" condition. */ applies = (last_char_normal_or_above == 'I'); break; default: abort (); } if (rule->context < 0) applies = !applies; if (applies) { /* The rule applies. Look up the mapping (0 to 3 characters). */ const unsigned short *mapped_in_rule = (const unsigned short *)((const char *)rule + offset_in_rule); if (mapped_in_rule[0] == 0) mapped_count = 0; else { mapped_uc[0] = mapped_in_rule[0]; if (mapped_in_rule[1] == 0) mapped_count = 1; else { mapped_uc[1] = mapped_in_rule[1]; if (mapped_in_rule[2] == 0) mapped_count = 2; else { mapped_uc[2] = mapped_in_rule[2]; mapped_count = 3; } } } goto found_mapping; } } /* Optimization: Save a hash table lookup in the next round. */ if (!rule->has_next) break; } } /* No special-cased mapping. So use the locale and context independent mapping. */ mapped_uc[0] = single_character_map (uc); mapped_count = 1; found_mapping: /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ { unsigned int i; for (i = 0; i < mapped_count; i++) { ucs4_t muc = mapped_uc[i]; /* Append muc to the result accumulator. */ if (length < allocated) { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail1; } if (ret >= 0) { length += ret; goto done_appending; } } { size_t old_allocated = allocated; size_t new_allocated = 2 * old_allocated; if (new_allocated < 64) new_allocated = 64; if (new_allocated < old_allocated) /* integer overflow? */ abort (); { UNIT *larger_result; if (result == NULL) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail1; } } else if (result == resultbuf) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail1; } U_CPY (larger_result, resultbuf, length); } else { larger_result = (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail1; } } result = larger_result; allocated = new_allocated; { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail1; } if (ret < 0) abort (); length += ret; goto done_appending; } } } done_appending: ; } } if (!uc_is_case_ignorable (uc)) last_char_except_ignorable = uc; { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) last_char_normal_or_above = uc; } s += count; wp += count; } } free (wordbreaks); if (nf != NULL) { /* Finally, normalize the result. */ UNIT *normalized_result; normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); if (normalized_result == NULL) goto fail2; free (result); return normalized_result; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; goto fail2; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ UNIT *memory; memory = (UNIT *) realloc (result, length * sizeof (UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; fail1: { int saved_errno = errno; free (wordbreaks); errno = saved_errno; } fail2: if (result != resultbuf) { int saved_errno = errno; free (result); errno = saved_errno; } return NULL; } /* * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-is-cased.h����������������������������������������������������0000664�0000000�0000000�00000007632�14110572173�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for a Unicode string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s, size_t n, const char *iso639_language, bool *resultp) { UNIT normsbuf[2048 / sizeof (UNIT)]; UNIT *norms; size_t norms_length; UNIT mappedbuf[2048 / sizeof (UNIT)]; UNIT *mapped_toupper; UNIT *mapped_tolower; UNIT *mapped_totitle; size_t mapped_length; /* Apply canonical decomposition to S. */ norms_length = sizeof (normsbuf) / sizeof (UNIT); norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); if (norms == NULL) /* errno is set here. */ return -1; mapped_length = sizeof (mappedbuf) / sizeof (UNIT); /* Apply toupper mapping. */ mapped_toupper = U_TOUPPER (norms, norms_length, iso639_language, NULL, mappedbuf, &mapped_length); if (mapped_toupper == NULL) goto fail; /* Compare. */ if (!(mapped_length == norms_length && U_CMP (mapped_toupper, norms, norms_length) == 0)) { if (mapped_toupper != mappedbuf) free (mapped_toupper); goto yes; } /* Apply tolower mapping. */ mapped_tolower = U_TOLOWER (norms, norms_length, iso639_language, NULL, mapped_toupper, &mapped_length); if (mapped_tolower == NULL) { if (mapped_toupper != mappedbuf) { int saved_errno = errno; free (mapped_toupper); errno = saved_errno; } goto fail; } if (mapped_toupper != mapped_tolower && mapped_toupper != mappedbuf) free (mapped_toupper); /* Compare. */ if (!(mapped_length == norms_length && U_CMP (mapped_tolower, norms, norms_length) == 0)) { if (mapped_tolower != mappedbuf) free (mapped_tolower); goto yes; } /* Apply totitle mapping. */ mapped_totitle = U_TOTITLE (norms, norms_length, iso639_language, NULL, mapped_tolower, &mapped_length); if (mapped_totitle == NULL) { if (mapped_tolower != mappedbuf) { int saved_errno = errno; free (mapped_tolower); errno = saved_errno; } goto fail; } if (mapped_tolower != mapped_totitle && mapped_tolower != mappedbuf) free (mapped_tolower); /* Compare. */ if (!(mapped_length == norms_length && U_CMP (mapped_totitle, norms, norms_length) == 0)) { if (mapped_totitle != mappedbuf) free (mapped_totitle); goto yes; } if (mapped_totitle != mappedbuf) free (mapped_totitle); if (norms != normsbuf) free (norms); *resultp = false; return 0; yes: if (norms != normsbuf) free (norms); *resultp = true; return 0; fail: if (norms != normsbuf) { int saved_errno = errno; free (norms); errno = saved_errno; } return -1; } ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-is-invariant.h������������������������������������������������0000664�0000000�0000000�00000004714�14110572173�0021521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode string is invariant under a given case mapping. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s, size_t n, UNIT * (*mapping) (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, UNIT *resultbuf, size_t *lengthp), const char *iso639_language, bool *resultp) { UNIT normsbuf[2048 / sizeof (UNIT)]; UNIT *norms; size_t norms_length; UNIT mappedbuf[2048 / sizeof (UNIT)]; UNIT *mapped; size_t mapped_length; /* Apply canonical decomposition to S. */ norms_length = sizeof (normsbuf) / sizeof (UNIT); norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); if (norms == NULL) /* errno is set here. */ return -1; /* Apply mapping. */ mapped_length = sizeof (mappedbuf) / sizeof (UNIT); mapped = mapping (norms, norms_length, iso639_language, NULL, mappedbuf, &mapped_length); if (mapped == NULL) { if (norms != normsbuf) { int saved_errno = errno; free (norms); errno = saved_errno; } return -1; } /* Compare. */ *resultp = (mapped_length == norms_length && U_CMP (mapped, norms, norms_length) == 0); if (mapped != mappedbuf) free (mapped); if (norms != normsbuf) free (norms); return 0; } ����������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-prefix-context.h����������������������������������������������0000664�0000000�0000000�00000006111�14110572173�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-8/UTF-16/UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ casing_prefix_context_t FUNC1 (const UNIT *s, size_t n) { return FUNC2 (s, n, unicase_empty_prefix_context); } casing_prefix_context_t FUNC2 (const UNIT *s, size_t n, casing_prefix_context_t a_context) { #if 0 /* Forward iteration. Slow for long strings. */ casing_prefix_context_t context = a_context; const UNIT *s_end = s + n; while (s < s_end) { ucs4_t uc; int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); if (!uc_is_case_ignorable (uc)) context.last_char_except_ignorable = uc; { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) context.last_char_normal_or_above = uc; } s += count; } return context; #else /* Iterate backwards, only as far as needed. */ casing_prefix_context_t context; ucs4_t last_char_except_ignorable = (ucs4_t)(-1); ucs4_t last_char_normal_or_above = (ucs4_t)(-1); const UNIT *p = s + n; for (;;) { ucs4_t uc; p = U_PREV (&uc, p, s); if (p == NULL) break; if (last_char_except_ignorable == (ucs4_t)(-1)) { if (!uc_is_case_ignorable (uc)) last_char_except_ignorable = uc; } if (last_char_normal_or_above == (ucs4_t)(-1)) { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) last_char_normal_or_above = uc; } if (last_char_except_ignorable != (ucs4_t)(-1) && last_char_normal_or_above != (ucs4_t)(-1)) break; } context.last_char_except_ignorable = (last_char_except_ignorable != (ucs4_t)(-1) ? last_char_except_ignorable : a_context.last_char_except_ignorable); context.last_char_normal_or_above = (last_char_normal_or_above != (ucs4_t)(-1) ? last_char_normal_or_above : a_context.last_char_normal_or_above); return context; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-suffix-context.h����������������������������������������������0000664�0000000�0000000�00000006421�14110572173�0022100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-8/UTF-16/UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ casing_suffix_context_t FUNC1 (const UNIT *s, size_t n) { return FUNC2 (s, n, unicase_empty_suffix_context); } casing_suffix_context_t FUNC2 (const UNIT *s, size_t n, casing_suffix_context_t a_context) { casing_suffix_context_t context; /* Evaluate all three conditions in a single pass through the string S. The three variables are -1 as long as the value of the condition has not been determined. */ ucs4_t first_char_except_ignorable = (ucs4_t)(-1); int scc_MORE_ABOVE = -1; int scc_BEFORE_DOT = -1; const UNIT *s_end = s + n; while (s < s_end) { ucs4_t uc; int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); if (first_char_except_ignorable == (ucs4_t)(-1)) { if (!uc_is_case_ignorable (uc)) first_char_except_ignorable = uc; } if (scc_MORE_ABOVE < 0) { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A) scc_MORE_ABOVE = SCC_MORE_ABOVE_MASK; else if (ccc == UC_CCC_NR) scc_MORE_ABOVE = 0; } if (scc_BEFORE_DOT < 0) { if (uc == 0x0307) /* COMBINING DOT ABOVE */ scc_BEFORE_DOT = SCC_BEFORE_DOT_MASK; else { int ccc = uc_combining_class (uc); if (ccc == UC_CCC_A || ccc == UC_CCC_NR) scc_BEFORE_DOT = 0; } } if (first_char_except_ignorable != (ucs4_t)(-1) && (scc_MORE_ABOVE | scc_BEFORE_DOT) >= 0) /* All conditions have been determined. */ break; s += count; } /* For those conditions that have not been determined so far, use the value from the argument context. */ context.first_char_except_ignorable = (first_char_except_ignorable != (ucs4_t)(-1) ? first_char_except_ignorable : a_context.first_char_except_ignorable); context.bits = (scc_MORE_ABOVE >= 0 ? scc_MORE_ABOVE : a_context.bits & SCC_MORE_ABOVE_MASK) | (scc_BEFORE_DOT >= 0 ? scc_BEFORE_DOT : a_context.bits & SCC_BEFORE_DOT_MASK); return context; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u-totitle.h�����������������������������������������������������0000664�0000000�0000000�00000003071�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, UNIT *resultbuf, size_t *lengthp) { return U_CT_TOTITLE (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, nf, resultbuf, lengthp); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-casecmp.c���������������������������������������������������0000664�0000000�0000000�00000003021�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "uninorm.h" #include "unistr.h" #define FUNC u16_casecmp #define UNIT uint16_t #define SRC_UNIT uint16_t #define U_CASEFOLD u16_casefold #define U_CMP2 u16_cmp2 #include "u-casecmp.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-casecoll.c��������������������������������������������������0000664�0000000�0000000�00000002716�14110572173�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u16_casecoll #define UNIT uint16_t #define U_CASEXFRM u16_casexfrm #include "u-casecoll.h" ��������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-casefold.c��������������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u16_casefold #define UNIT uint16_t #define U_CT_CASEFOLD u16_ct_casefold #include "u-casefold.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-casemap.c���������������������������������������������������0000664�0000000�0000000�00000003241�14110572173�0020662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicasemap.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u16_casemap #define UNIT uint16_t #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #define U_UCTOMB u16_uctomb #define U_CPY u16_cpy #define U_NORMALIZE u16_normalize #include "u-casemap.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-casexfrm.c��������������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u16_casexfrm #define UNIT uint16_t #define U_CASEFOLD u16_casefold #define U_CONV_TO_ENCODING u16_conv_to_encoding #include "u-casexfrm.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-ct-casefold.c�����������������������������������������������0000664�0000000�0000000�00000003075�14110572173�0021442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" #include "unicase/casefold.h" #define FUNC u16_ct_casefold #define UNIT uint16_t #define U_CASEMAP u16_casemap #define U_NORMALIZE u16_normalize #include "u-ct-casefold.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-ct-tolower.c������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint16_t * u16_ct_tolower (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) { return u16_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-ct-totitle.c������������������������������������������������0000664�0000000�0000000�00000003371�14110572173�0021345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uniwbrk.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u16_ct_totitle #define UNIT uint16_t #define U_WORDBREAKS u16_wordbreaks #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #define U_UCTOMB u16_uctomb #define U_CPY u16_cpy #define U_NORMALIZE u16_normalize #include "u-ct-totitle.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-ct-toupper.c������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0021362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint16_t * u16_ct_toupper (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) { return u16_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-is-cased.c��������������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-16 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u16_is_cased #define UNIT uint16_t #define U_NORMALIZE u16_normalize #define U_TOUPPER u16_toupper #define U_TOLOWER u16_tolower #define U_TOTITLE u16_totitle #define U_CMP u16_cmp #include "u-is-cased.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-is-casefolded.c���������������������������������������������0000664�0000000�0000000�00000002751�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u16_is_casefolded (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) { return u16_is_invariant (s, n, u16_casefold, iso639_language, resultp); } �����������������������gnulib-20210822~d383792/lib/unicase/u16-is-invariant.c����������������������������������������������0000664�0000000�0000000�00000003022�14110572173�0021652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is invariant under a given case mapping. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase/invariant.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u16_is_invariant #define UNIT uint16_t #define U_NORMALIZE u16_normalize #define U_CMP u16_cmp #include "u-is-invariant.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-is-lowercase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u16_is_lowercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) { return u16_is_invariant (s, n, u16_tolower, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u16-is-titlecase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u16_is_titlecase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) { return u16_is_invariant (s, n, u16_totitle, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u16-is-uppercase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u16_is_uppercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) { return u16_is_invariant (s, n, u16_toupper, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u16-prefix-context.c��������������������������������������������0000664�0000000�0000000�00000003046�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-16 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u16_casing_prefix_context #define FUNC2 u16_casing_prefixes_context #define UNIT uint16_t #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #define U_PREV u16_prev #include "u-prefix-context.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-suffix-context.c��������������������������������������������0000664�0000000�0000000�00000003016�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-16 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u16_casing_suffix_context #define FUNC2 u16_casing_suffixes_context #define UNIT uint16_t #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #include "u-suffix-context.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-tolower.c���������������������������������������������������0000664�0000000�0000000�00000003466�14110572173�0020755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint16_t * u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) { return u16_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-totitle.c���������������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u16_totitle #define UNIT uint16_t #define U_CT_TOTITLE u16_ct_totitle #include "u-totitle.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u16-toupper.c���������������������������������������������������0000664�0000000�0000000�00000003466�14110572173�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint16_t * u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) { return u16_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-casecmp.c���������������������������������������������������0000664�0000000�0000000�00000003021�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "uninorm.h" #include "unistr.h" #define FUNC u32_casecmp #define UNIT uint32_t #define SRC_UNIT uint32_t #define U_CASEFOLD u32_casefold #define U_CMP2 u32_cmp2 #include "u-casecmp.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-casecoll.c��������������������������������������������������0000664�0000000�0000000�00000002716�14110572173�0021042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u32_casecoll #define UNIT uint32_t #define U_CASEXFRM u32_casexfrm #include "u-casecoll.h" ��������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-casefold.c��������������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u32_casefold #define UNIT uint32_t #define U_CT_CASEFOLD u32_ct_casefold #include "u-casefold.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-casemap.c���������������������������������������������������0000664�0000000�0000000�00000003241�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicasemap.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u32_casemap #define UNIT uint32_t #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #define U_UCTOMB u32_uctomb #define U_CPY u32_cpy #define U_NORMALIZE u32_normalize #include "u-casemap.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-casexfrm.c��������������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u32_casexfrm #define UNIT uint32_t #define U_CASEFOLD u32_casefold #define U_CONV_TO_ENCODING u32_conv_to_encoding #include "u-casexfrm.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-ct-casefold.c�����������������������������������������������0000664�0000000�0000000�00000003075�14110572173�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" #include "unicase/casefold.h" #define FUNC u32_ct_casefold #define UNIT uint32_t #define U_CASEMAP u32_casemap #define U_NORMALIZE u32_normalize #include "u-ct-casefold.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-ct-tolower.c������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0021355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint32_t * u32_ct_tolower (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) { return u32_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-ct-totitle.c������������������������������������������������0000664�0000000�0000000�00000003371�14110572173�0021343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uniwbrk.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u32_ct_totitle #define UNIT uint32_t #define U_WORDBREAKS u32_wordbreaks #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #define U_UCTOMB u32_uctomb #define U_CPY u32_cpy #define U_NORMALIZE u32_normalize #include "u-ct-totitle.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-ct-toupper.c������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0021360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint32_t * u32_ct_toupper (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) { return u32_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-is-cased.c��������������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u32_is_cased #define UNIT uint32_t #define U_NORMALIZE u32_normalize #define U_TOUPPER u32_toupper #define U_TOLOWER u32_tolower #define U_TOTITLE u32_totitle #define U_CMP u32_cmp #include "u-is-cased.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-is-casefolded.c���������������������������������������������0000664�0000000�0000000�00000002751�14110572173�0021756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u32_is_casefolded (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) { return u32_is_invariant (s, n, u32_casefold, iso639_language, resultp); } �����������������������gnulib-20210822~d383792/lib/unicase/u32-is-invariant.c����������������������������������������������0000664�0000000�0000000�00000003022�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is invariant under a given case mapping. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase/invariant.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u32_is_invariant #define UNIT uint32_t #define U_NORMALIZE u32_normalize #define U_CMP u32_cmp #include "u-is-invariant.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-is-lowercase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u32_is_lowercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) { return u32_is_invariant (s, n, u32_tolower, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u32-is-titlecase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u32_is_titlecase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) { return u32_is_invariant (s, n, u32_totitle, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u32-is-uppercase.c����������������������������������������������0000664�0000000�0000000�00000002746�14110572173�0021660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u32_is_uppercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) { return u32_is_invariant (s, n, u32_toupper, iso639_language, resultp); } ��������������������������gnulib-20210822~d383792/lib/unicase/u32-prefix-context.c��������������������������������������������0000664�0000000�0000000�00000003046�14110572173�0022231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u32_casing_prefix_context #define FUNC2 u32_casing_prefixes_context #define UNIT uint32_t #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #define U_PREV u32_prev #include "u-prefix-context.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-suffix-context.c��������������������������������������������0000664�0000000�0000000�00000003016�14110572173�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u32_casing_suffix_context #define FUNC2 u32_casing_suffixes_context #define UNIT uint32_t #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #include "u-suffix-context.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-tolower.c���������������������������������������������������0000664�0000000�0000000�00000003466�14110572173�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint32_t * u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) { return u32_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-totitle.c���������������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u32_totitle #define UNIT uint32_t #define U_CT_TOTITLE u32_ct_totitle #include "u-totitle.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u32-toupper.c���������������������������������������������������0000664�0000000�0000000�00000003466�14110572173�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint32_t * u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) { return u32_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-casecmp.c����������������������������������������������������0000664�0000000�0000000�00000003013�14110572173�0020602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "uninorm.h" #include "unistr.h" #define FUNC u8_casecmp #define UNIT uint8_t #define SRC_UNIT uint8_t #define U_CASEFOLD u8_casefold #define U_CMP2 u8_cmp2 #include "u-casecmp.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-casecoll.c���������������������������������������������������0000664�0000000�0000000�00000002712�14110572173�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u8_casecoll #define UNIT uint8_t #define U_CASEXFRM u8_casexfrm #include "u-casecoll.h" ������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-casefold.c���������������������������������������������������0000664�0000000�0000000�00000005707�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u8_casefold #define UNIT uint8_t #define U_CT_CASEFOLD u8_ct_casefold #include "u-casefold.h" #ifdef TEST #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_ALL, ""); if (argc == 1) { /* Display the case folded input string. */ char *input = read_file (stdin); int length = strlen (input); size_t output_length; uint8_t *output = u8_casefold ((uint8_t *) input, length, uc_locale_language (), NULL, NULL, &output_length); fwrite (output, 1, output_length, stdout); return 0; } else return 1; } #endif /* TEST */ ���������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-casemap.c����������������������������������������������������0000664�0000000�0000000�00000003232�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicasemap.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u8_casemap #define UNIT uint8_t #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #define U_UCTOMB u8_uctomb #define U_CPY u8_cpy #define U_NORMALIZE u8_normalize #include "u-casemap.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-casexfrm.c���������������������������������������������������0000664�0000000�0000000�00000003051�14110572173�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u8_casexfrm #define UNIT uint8_t #define U_CASEFOLD u8_casefold #define U_CONV_TO_ENCODING u8_conv_to_encoding #include "u-casexfrm.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-ct-casefold.c������������������������������������������������0000664�0000000�0000000�00000003070�14110572173�0021356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" #include "unicase/casefold.h" #define FUNC u8_ct_casefold #define UNIT uint8_t #define U_CASEMAP u8_casemap #define U_NORMALIZE u8_normalize #include "u-ct-casefold.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-ct-tolower.c�������������������������������������������������0000664�0000000�0000000�00000003554�14110572173�0021300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint8_t * u8_ct_tolower (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) { return u8_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-ct-totitle.c�������������������������������������������������0000664�0000000�0000000�00000003361�14110572173�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include "unistr.h" #include "unictype.h" #include "uniwbrk.h" #include "uninorm.h" #include "unicase/caseprop.h" #include "context.h" #include "unicase/special-casing.h" #define FUNC u8_ct_totitle #define UNIT uint8_t #define U_WORDBREAKS u8_wordbreaks #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #define U_UCTOMB u8_uctomb #define U_CPY u8_cpy #define U_NORMALIZE u8_normalize #include "u-ct-totitle.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-ct-toupper.c�������������������������������������������������0000664�0000000�0000000�00000003554�14110572173�0021303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint8_t * u8_ct_toupper (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) { return u8_casemap (s, n, prefix_context, suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-is-cased.c���������������������������������������������������0000664�0000000�0000000�00000003046�14110572173�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-8 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u8_is_cased #define UNIT uint8_t #define U_NORMALIZE u8_normalize #define U_TOUPPER u8_toupper #define U_TOLOWER u8_tolower #define U_TOTITLE u8_totitle #define U_CMP u8_cmp #include "u-is-cased.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-is-casefolded.c����������������������������������������������0000664�0000000�0000000�00000002743�14110572173�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u8_is_casefolded (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) { return u8_is_invariant (s, n, u8_casefold, iso639_language, resultp); } �����������������������������gnulib-20210822~d383792/lib/unicase/u8-is-invariant.c�����������������������������������������������0000664�0000000�0000000�00000003015�14110572173�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is invariant under a given case mapping. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase/invariant.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include "uninorm.h" #include "unistr.h" #define FUNC u8_is_invariant #define UNIT uint8_t #define U_NORMALIZE u8_normalize #define U_CMP u8_cmp #include "u-is-invariant.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-is-lowercase.c�����������������������������������������������0000664�0000000�0000000�00000002740�14110572173�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u8_is_lowercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) { return u8_is_invariant (s, n, u8_tolower, iso639_language, resultp); } ��������������������������������gnulib-20210822~d383792/lib/unicase/u8-is-titlecase.c�����������������������������������������������0000664�0000000�0000000�00000002740�14110572173�0021563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u8_is_titlecase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) { return u8_is_invariant (s, n, u8_totitle, iso639_language, resultp); } ��������������������������������gnulib-20210822~d383792/lib/unicase/u8-is-uppercase.c�����������������������������������������������0000664�0000000�0000000�00000002740�14110572173�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unicase/invariant.h" int u8_is_uppercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) { return u8_is_invariant (s, n, u8_toupper, iso639_language, resultp); } ��������������������������������gnulib-20210822~d383792/lib/unicase/u8-prefix-context.c���������������������������������������������0000664�0000000�0000000�00000003040�14110572173�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-8 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u8_casing_prefix_context #define FUNC2 u8_casing_prefixes_context #define UNIT uint8_t #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #define U_PREV u8_prev #include "u-prefix-context.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-suffix-context.c���������������������������������������������0000664�0000000�0000000�00000003011�14110572173�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-8 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "unicase/caseprop.h" #include "context.h" #define FUNC1 u8_casing_suffix_context #define FUNC2 u8_casing_suffixes_context #define UNIT uint8_t #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #include "u-suffix-context.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-tolower.c����������������������������������������������������0000664�0000000�0000000�00000006576�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint8_t * u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) { return u8_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_tolower, offsetof (struct special_casing_rule, lower[0]), nf, resultbuf, lengthp); } #ifdef TEST #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_ALL, ""); if (argc == 1) { /* Display the lower case of the input string. */ char *input = read_file (stdin); int length = strlen (input); size_t output_length; uint8_t *output = u8_tolower ((uint8_t *) input, length, uc_locale_language (), NULL, NULL, &output_length); fwrite (output, 1, output_length, stdout); return 0; } else return 1; } #endif /* TEST */ ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-totitle.c����������������������������������������������������0000664�0000000�0000000�00000005706�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #define FUNC u8_totitle #define UNIT uint8_t #define U_CT_TOTITLE u8_ct_totitle #include "u-totitle.h" #ifdef TEST #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_ALL, ""); if (argc == 1) { /* Display the upper case of the input string. */ char *input = read_file (stdin); int length = strlen (input); size_t output_length; uint8_t *output = u8_toupper ((uint8_t *) input, length, uc_locale_language (), NULL, NULL, &output_length); fwrite (output, 1, output_length, stdout); return 0; } else return 1; } #endif /* TEST */ ����������������������������������������������������������gnulib-20210822~d383792/lib/unicase/u8-toupper.c����������������������������������������������������0000664�0000000�0000000�00000006576�14110572173�0020706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicase/unicasemap.h" #include "unicase/special-casing.h" uint8_t * u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) { return u8_casemap (s, n, unicase_empty_prefix_context, unicase_empty_suffix_context, iso639_language, uc_toupper, offsetof (struct special_casing_rule, upper[0]), nf, resultbuf, lengthp); } #ifdef TEST #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_ALL, ""); if (argc == 1) { /* Display the upper case of the input string. */ char *input = read_file (stdin); int length = strlen (input); size_t output_length; uint8_t *output = u8_toupper ((uint8_t *) input, length, uc_locale_language (), NULL, NULL, &output_length); fwrite (output, 1, output_length, stdout); return 0; } else return 1; } #endif /* TEST */ ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/ulc-casecmp.c���������������������������������������������������0000664�0000000�0000000�00000004737�14110572173�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "uninorm.h" #include "uniconv.h" #include "unistr.h" static uint8_t * ulc_u8_casefold (const char *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) { uint8_t convbuf[2048 / sizeof (uint8_t)]; uint8_t *conv; size_t conv_length; uint8_t *result; /* Convert the string to UTF-8. */ conv_length = sizeof (convbuf) / sizeof (uint8_t); conv = u8_conv_from_encoding (locale_charset (), iconveh_error, s, n, NULL, convbuf, &conv_length); if (conv == NULL) /* errno is set here. */ return NULL; /* Case-fold and normalize. */ result = u8_casefold (conv, conv_length, iso639_language, nf, resultbuf, lengthp); if (result == NULL) { if (conv != convbuf) { int saved_errno = errno; free (conv); errno = saved_errno; } return NULL; } if (conv != convbuf) free (conv); return result; } #define FUNC ulc_casecmp #define UNIT uint8_t #define SRC_UNIT char #define U_CASEFOLD ulc_u8_casefold #define U_CMP2 u8_cmp2 #include "u-casecmp.h" ���������������������������������gnulib-20210822~d383792/lib/unicase/ulc-casecoll.c��������������������������������������������������0000664�0000000�0000000�00000002700�14110572173�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC ulc_casecoll #define UNIT char #define U_CASEXFRM ulc_casexfrm #include "u-casecoll.h" ����������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/ulc-casexfrm.c��������������������������������������������������0000664�0000000�0000000�00000004405�14110572173�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stdlib.h> #include "uniconv.h" char * ulc_casexfrm (const char *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) { uint8_t convbuf[2048 / sizeof (uint8_t)]; uint8_t *conv; size_t conv_length; char *result; /* Convert the string to UTF-8. */ conv_length = sizeof (convbuf) / sizeof (uint8_t); conv = u8_conv_from_encoding (locale_charset (), iconveh_error, s, n, NULL, convbuf, &conv_length); if (conv == NULL) /* errno is set here. */ return NULL; /* Case-fold and normalize. */ result = u8_casexfrm (conv, conv_length, iso639_language, nf, resultbuf, lengthp); if (result == NULL) { if (conv != convbuf) { int saved_errno = errno; free (conv); errno = saved_errno; } return NULL; } if (conv != convbuf) free (conv); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicase/unicasemap.h����������������������������������������������������0000664�0000000�0000000�00000005271�14110572173�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stddef.h> #include "unitypes.h" #include "unicase.h" #include "uninorm.h" extern uint8_t * u8_casemap (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, ucs4_t (*single_character_map) (ucs4_t), size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ uninorm_t nf, uint8_t *resultbuf, size_t *lengthp); extern uint16_t * u16_casemap (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, ucs4_t (*single_character_map) (ucs4_t), size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ uninorm_t nf, uint16_t *resultbuf, size_t *lengthp); extern uint32_t * u32_casemap (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, ucs4_t (*single_character_map) (ucs4_t), size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ uninorm_t nf, uint32_t *resultbuf, size_t *lengthp); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicodeio.c�������������������������������������������������������������0000664�0000000�0000000�00000017346�14110572173�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character output to streams with locale dependent encoding. Copyright (C) 2000-2003, 2006, 2008-2021 Free Software Foundation, Inc. This 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 <haible@clisp.cons.org>. */ #include <config.h> /* Specification. */ #include "unicodeio.h" #include <stdio.h> #include <string.h> #include <errno.h> #if HAVE_ICONV # include <iconv.h> #endif #include <error.h> #include "gettext.h" #define _(msgid) gettext (msgid) #define N_(msgid) msgid #include "localcharset.h" #include "unistr.h" /* When we pass a Unicode character to iconv(), we must pass it in a suitable encoding. The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to \U0000FFFF. UTF-16 and variants support only characters up to \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. UCS-4 specification leaves doubts about endianness and byte order mark. glibc currently interprets it as big endian without byte order mark, but this is not backed by an RFC. So we use UTF-8. It supports characters up to \U7FFFFFFF and is unambiguously defined. */ /* Luckily, the encoding's name is platform independent. */ #define UTF8_NAME "UTF-8" /* Converts the Unicode character CODE to its multibyte representation in the current locale and calls the SUCCESS callback on the resulting byte sequence. If an error occurs, invokes the FAILURE callback instead, passing it CODE and an English error string. Returns whatever the callback returned. Assumes that the locale doesn't change between two calls. */ long unicode_to_mb (unsigned int code, long (*success) (const char *buf, size_t buflen, void *callback_arg), long (*failure) (unsigned int code, const char *msg, void *callback_arg), void *callback_arg) { static int initialized; static int is_utf8; #if HAVE_ICONV static iconv_t utf8_to_local; #endif char inbuf[6]; int count; if (!initialized) { const char *charset = locale_charset (); is_utf8 = !strcmp (charset, UTF8_NAME); #if HAVE_ICONV if (!is_utf8) { utf8_to_local = iconv_open (charset, UTF8_NAME); if (utf8_to_local == (iconv_t)(-1)) /* For an unknown encoding, assume ASCII. */ utf8_to_local = iconv_open ("ASCII", UTF8_NAME); } #endif initialized = 1; } /* Test whether the utf8_to_local converter is available at all. */ if (!is_utf8) { #if HAVE_ICONV if (utf8_to_local == (iconv_t)(-1)) return failure (code, N_("iconv function not usable"), callback_arg); #else return failure (code, N_("iconv function not available"), callback_arg); #endif } /* Convert the character to UTF-8. */ count = u8_uctomb ((unsigned char *) inbuf, code, sizeof (inbuf)); if (count < 0) return failure (code, N_("character out of range"), callback_arg); #if HAVE_ICONV if (!is_utf8) { char outbuf[25]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = inbuf; inbytesleft = count; outptr = outbuf; outbytesleft = sizeof (outbuf); /* Convert the character from UTF-8 to the locale's charset. */ res = iconv (utf8_to_local, (ICONV_CONST char **)&inptr, &inbytesleft, &outptr, &outbytesleft); /* Analyze what iconv() actually did and distinguish replacements that are OK (no need to invoke the FAILURE callback), such as - replacing GREEK SMALL LETTER MU with MICRO SIGN, or - replacing FULLWIDTH COLON with ':', or - replacing a Unicode TAG character (U+E00xx) with an empty string, from replacements that are worse than the FAILURE callback, such as - replacing 'ç' with '?' (NetBSD, Solaris 11) or '*' (musl) or NUL (IRIX). */ if (inbytesleft > 0 || res == (size_t)(-1) /* Irix iconv() inserts a NUL byte if it cannot convert. */ # if !defined _LIBICONV_VERSION && (defined sgi || defined __sgi) || (res > 0 && code != 0 && outptr - outbuf == 1 && *outbuf == '\0') # endif /* FreeBSD iconv(), NetBSD iconv(), and Solaris 11 iconv() insert a '?' if they cannot convert. */ # if !defined _LIBICONV_VERSION || (res > 0 && outptr - outbuf == 1 && *outbuf == '?') # endif /* musl libc iconv() inserts a '*' if it cannot convert. */ # if !defined _LIBICONV_VERSION && MUSL_LIBC || (res > 0 && outptr - outbuf == 1 && *outbuf == '*') # endif ) return failure (code, NULL, callback_arg); /* Avoid glibc-2.1 bug and Solaris 7 bug. */ # if defined _LIBICONV_VERSION \ || !(((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) \ && !defined __UCLIBC__) \ || defined __sun) /* Get back to the initial shift state. */ res = iconv (utf8_to_local, NULL, NULL, &outptr, &outbytesleft); if (res == (size_t)(-1)) return failure (code, NULL, callback_arg); # endif return success (outbuf, outptr - outbuf, callback_arg); } #endif /* At this point, is_utf8 is true, so no conversion is needed. */ return success (inbuf, count, callback_arg); } /* Simple success callback that outputs the converted string. The STREAM is passed as callback_arg. */ long fwrite_success_callback (const char *buf, size_t buflen, void *callback_arg) { FILE *stream = (FILE *) callback_arg; /* The return value of fwrite can be ignored here, because under normal conditions (STREAM is an open stream and not wide-character oriented) when fwrite() returns a value != buflen it also sets STREAM's error indicator. */ fwrite (buf, 1, buflen, stream); return 0; } /* Simple failure callback that displays an error and exits. */ static long exit_failure_callback (unsigned int code, const char *msg, _GL_UNUSED void *callback_arg) { if (msg == NULL) error (1, 0, _("cannot convert U+%04X to local character set"), code); else error (1, 0, _("cannot convert U+%04X to local character set: %s"), code, gettext (msg)); return -1; } /* Simple failure callback that displays a fallback representation in plain ASCII, using the same notation as ISO C99 strings. */ static long fallback_failure_callback (unsigned int code, _GL_UNUSED const char *msg, void *callback_arg) { FILE *stream = (FILE *) callback_arg; if (code < 0x10000) fprintf (stream, "\\u%04X", code); else fprintf (stream, "\\U%08X", code); return -1; } /* Outputs the Unicode character CODE to the output stream STREAM. Upon failure, exit if exit_on_error is true, otherwise output a fallback notation. */ void print_unicode_char (FILE *stream, unsigned int code, int exit_on_error) { unicode_to_mb (code, fwrite_success_callback, exit_on_error ? exit_failure_callback : fallback_failure_callback, stream); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unicodeio.h�������������������������������������������������������������0000664�0000000�0000000�00000004156�14110572173�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character output to streams with locale dependent encoding. Copyright (C) 2000-2003, 2005, 2008-2021 Free Software Foundation, Inc. This 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 UNICODEIO_H # define UNICODEIO_H # include <stddef.h> # include <stdio.h> /* Converts the Unicode character CODE to its multibyte representation in the current locale and calls the SUCCESS callback on the resulting byte sequence. If an error occurs, invokes the FAILURE callback instead, passing it CODE and an English error string. Returns whatever the callback returned. Assumes that the locale doesn't change between two calls. */ extern long unicode_to_mb (unsigned int code, long (*success) (const char *buf, size_t buflen, void *callback_arg), long (*failure) (unsigned int code, const char *msg, void *callback_arg), void *callback_arg); /* Outputs the Unicode character CODE to the output stream STREAM. Upon failure, exit if exit_on_error is true, otherwise output a fallback notation. */ extern void print_unicode_char (FILE *stream, unsigned int code, int exit_on_error); /* Simple success callback that outputs the converted string. The STREAM is passed as callback_arg. */ extern long fwrite_success_callback (const char *buf, size_t buflen, void *callback_arg); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv.in.h������������������������������������������������������������0000664�0000000�0000000�00000016574�14110572173�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversions between Unicode and legacy encodings. Copyright (C) 2002, 2005, 2007, 2009-2021 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/>. */ #ifndef _UNICONV_H #define _UNICONV_H /* Get size_t. */ #include <stddef.h> #include "unitypes.h" /* Get enum iconv_ilseq_handler. */ #include "iconveh.h" /* Get uniconv_register_autodetect() declaration. */ #include "striconveha.h" /* Get locale_charset() declaration. */ #include "localcharset.h" #ifdef __cplusplus extern "C" { #endif /* Converts an entire string, possibly including NUL bytes, from one encoding to a Unicode encoding. Converts a memory region given in encoding FROMCODE. FROMCODE is as for iconv_open(3). The input is in the memory region between SRC (inclusive) and SRC + SRCLEN (exclusive). If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). RESULTBUF and *LENGTHP should initially be a scratch buffer and its size, or *RESULTBUF can be NULL. May erase the contents of the memory at RESULTBUF. If successful: The resulting Unicode string (non-NULL) is returned and its length stored in *LENGTHP. The resulting string is RESULTBUF if no dynamic memory allocation was necessary, or a freshly allocated memory block otherwise. In case of error: NULL is returned and errno is set. Particular errno values: EINVAL, EILSEQ, ENOMEM. */ extern uint8_t * u8_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint8_t *resultbuf, size_t *lengthp); extern uint16_t * u16_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint16_t *resultbuf, size_t *lengthp); extern uint32_t * u32_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint32_t *resultbuf, size_t *lengthp); /* Converts an entire Unicode string, possibly including NUL units, from a Unicode encoding to a given encoding. Converts a memory region to encoding TOCODE. TOCODE is as for iconv_open(3). The input is in the memory region between SRC (inclusive) and SRC + SRCLEN (exclusive). If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). RESULTBUF and *LENGTHP should initially be a scratch buffer and its size, or RESULTBUF can be NULL. May erase the contents of the memory at RESULTBUF. If successful: The resulting string (non-NULL) is returned and its length stored in *LENGTHP. The resulting string is RESULTBUF if no dynamic memory allocation was necessary, or a freshly allocated memory block otherwise. In case of error: NULL is returned and errno is set. Particular errno values: EINVAL, EILSEQ, ENOMEM. */ extern char * u8_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint8_t *src, size_t srclen, size_t *offsets, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u16_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint16_t *src, size_t srclen, size_t *offsets, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u32_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint32_t *src, size_t srclen, size_t *offsets, char *_UC_RESTRICT resultbuf, size_t *lengthp); /* Converts a NUL terminated string from a given encoding. The result is malloc allocated, or NULL (with errno set) in case of error. Particular errno values: EILSEQ, ENOMEM. */ extern uint8_t * u8_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler); extern uint16_t * u16_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler); extern uint32_t * u32_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler); /* Converts a NUL terminated string to a given encoding. The result is malloc allocated, or NULL (with errno set) in case of error. Particular errno values: EILSEQ, ENOMEM. */ extern char * u8_strconv_to_encoding (const uint8_t *string, const char *tocode, enum iconv_ilseq_handler handler); extern char * u16_strconv_to_encoding (const uint16_t *string, const char *tocode, enum iconv_ilseq_handler handler); extern char * u32_strconv_to_encoding (const uint32_t *string, const char *tocode, enum iconv_ilseq_handler handler); /* Converts a NUL terminated string from the locale encoding. The result is malloc allocated, or NULL (with errno set) in case of error. Particular errno values: ENOMEM. */ extern uint8_t * u8_strconv_from_locale (const char *string); extern uint16_t * u16_strconv_from_locale (const char *string); extern uint32_t * u32_strconv_from_locale (const char *string); /* Converts a NUL terminated string to the locale encoding. The result is malloc allocated, or NULL (with errno set) in case of error. Particular errno values: ENOMEM. */ extern char * u8_strconv_to_locale (const uint8_t *string); extern char * u16_strconv_to_locale (const uint16_t *string); extern char * u32_strconv_to_locale (const uint32_t *string); #ifdef __cplusplus } #endif #endif /* _UNICONV_H */ ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016526�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u-conv-from-enc.h�����������������������������������������������0000664�0000000�0000000�00000006307�14110572173�0021620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16/UTF-32 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, UNIT *resultbuf, size_t *lengthp) { #if HAVE_UTF_NAME char *result = (char *) resultbuf; size_t length = *lengthp * sizeof (UNIT); if (mem_iconveha (src, srclen, fromcode, UTF_NAME, true, handler, offsets, &result, &length) < 0) return NULL; if (offsets != NULL) { /* Convert 'char *' offsets to 'UNIT *' offsets. */ size_t *offsets_end = offsets + srclen; size_t *o; for (o = offsets; o < offsets_end; o++) if (*o != (size_t)(-1)) *o = *o / sizeof (UNIT); } if ((length % sizeof (UNIT)) != 0) abort (); *lengthp = length / sizeof (UNIT); return (UNIT *) result; #else uint8_t *utf8_string; size_t utf8_length; UNIT *result; utf8_string = u8_conv_from_encoding (fromcode, handler, src, srclen, offsets, NULL, &utf8_length); if (utf8_string == NULL) return NULL; result = U8_TO_U (utf8_string, utf8_length, resultbuf, lengthp); if (result == NULL) { int saved_errno = errno; free (utf8_string); errno = saved_errno; return NULL; } if (offsets != NULL) { size_t length = *lengthp; size_t *offsets_end = offsets + srclen; size_t *o; size_t off8 = 0; /* offset into utf8_string */ size_t offunit = 0; /* offset into result */ for (o = offsets; o < offsets_end; o++) if (*o != (size_t)(-1)) { while (off8 < *o) { int count8 = u8_mblen (utf8_string + off8, utf8_length - off8); int countunit = U_MBLEN (result + offunit, length - offunit); if (count8 < 0 || countunit < 0) abort (); off8 += count8; offunit += countunit; } if (*o != off8) abort (); *o = offunit; } } free (utf8_string); return result; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u-conv-to-enc.h�������������������������������������������������0000664�0000000�0000000�00000011155�14110572173�0021274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16/UTF-32 to legacy encodings. Copyright (C) 2002, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ char * FUNC (const char *tocode, enum iconv_ilseq_handler handler, const UNIT *src, size_t srclen, size_t *offsets, char *resultbuf, size_t *lengthp) { #if HAVE_UTF_NAME size_t *scaled_offsets; char *result; size_t length; if (offsets != NULL && srclen > 0) { scaled_offsets = (size_t *) malloc (srclen * sizeof (UNIT) * sizeof (size_t)); if (scaled_offsets == NULL) { errno = ENOMEM; return NULL; } } else scaled_offsets = NULL; result = resultbuf; length = *lengthp; if (mem_iconveha ((const char *) src, srclen * sizeof (UNIT), UTF_NAME, tocode, handler == iconveh_question_mark, handler, scaled_offsets, &result, &length) < 0) { int saved_errno = errno; free (scaled_offsets); errno = saved_errno; return NULL; } if (offsets != NULL) { /* Convert scaled_offsets[srclen * sizeof (UNIT)] to offsets[srclen]. */ size_t i; for (i = 0; i < srclen; i++) offsets[i] = scaled_offsets[i * sizeof (UNIT)]; free (scaled_offsets); } if (result == NULL) /* when (resultbuf == NULL && length == 0) */ { result = (char *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } *lengthp = length; return result; #else uint8_t tmpbuf[4096]; size_t tmpbufsize = SIZEOF (tmpbuf); uint8_t *utf8_src; size_t utf8_srclen; size_t *scaled_offsets; char *result; utf8_src = U_TO_U8 (src, srclen, tmpbuf, &tmpbufsize); if (utf8_src == NULL) return NULL; utf8_srclen = tmpbufsize; if (offsets != NULL && utf8_srclen > 0) { scaled_offsets = (size_t *) malloc (utf8_srclen * sizeof (size_t)); if (scaled_offsets == NULL) { if (utf8_src != tmpbuf) free (utf8_src); errno = ENOMEM; return NULL; } } else scaled_offsets = NULL; result = u8_conv_to_encoding (tocode, handler, utf8_src, utf8_srclen, scaled_offsets, resultbuf, lengthp); if (result == NULL) { int saved_errno = errno; free (scaled_offsets); if (utf8_src != tmpbuf) free (utf8_src); errno = saved_errno; return NULL; } if (offsets != NULL) { size_t iunit; /* offset into src */ size_t i8; /* offset into utf8_src */ for (iunit = 0; iunit < srclen; iunit++) offsets[iunit] = (size_t)(-1); iunit = 0; i8 = 0; while (iunit < srclen && i8 < utf8_srclen) { int countunit; int count8; offsets[iunit] = scaled_offsets[i8]; countunit = U_MBLEN (src + iunit, srclen - iunit); count8 = u8_mblen (utf8_src + i8, utf8_srclen - i8); if (countunit < 0 || count8 < 0) abort (); iunit += countunit; i8 += count8; } /* Check that utf8_src has been traversed entirely. */ if (i8 < utf8_srclen) abort (); /* Check that src has been traversed entirely, except possibly for an incomplete sequence of units at the end. */ if (iunit < srclen) { offsets[iunit] = *lengthp; if (!(U_MBLEN (src + iunit, srclen - iunit) < 0)) abort (); } free (scaled_offsets); } if (utf8_src != tmpbuf) free (utf8_src); return result; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u-strconv-from-enc.h��������������������������������������������0000664�0000000�0000000�00000002545�14110572173�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8/UTF-16/UTF-32 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 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/>. */ UNIT * FUNC (const char *string, const char *fromcode, enum iconv_ilseq_handler handler) { UNIT *result; size_t length; result = U_CONV_FROM_ENCODING (fromcode, handler, string, strlen (string) + 1, NULL, NULL, &length); if (result == NULL) return NULL; /* Verify the result has exactly one NUL unit, at the end. */ if (!(length > 0 && result[length-1] == 0 && U_STRLEN (result) == length-1)) { free (result); errno = EILSEQ; return NULL; } return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u-strconv-to-enc.h����������������������������������������������0000664�0000000�0000000�00000004557�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16/UTF-32 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ char * FUNC (const UNIT *string, const char *tocode, enum iconv_ilseq_handler handler) { #if HAVE_UTF_NAME char *result = NULL; size_t length = 0; if (mem_iconveha ((const char *) string, (U_STRLEN (string) + 1) * sizeof (UNIT), UTF_NAME, tocode, handler == iconveh_question_mark, handler, NULL, &result, &length) < 0) return NULL; /* Verify the result has exactly one NUL byte, at the end. */ if (!(length > 0 && result[length-1] == '\0' && strlen (result) == length-1)) { free (result); errno = EILSEQ; return NULL; } return result; #else uint8_t tmpbuf[4096]; size_t tmpbufsize = SIZEOF (tmpbuf); uint8_t *utf8_string; char *result; utf8_string = U_TO_U8 (string, U_STRLEN (string) + 1, tmpbuf, &tmpbufsize); if (utf8_string == NULL) return NULL; result = u8_strconv_to_encoding (utf8_string, tocode, handler); if (result == NULL) { if (utf8_string != tmpbuf) { int saved_errno = errno; free (utf8_string); errno = saved_errno; } return NULL; } if (utf8_string != tmpbuf) free (utf8_string); return result; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-conv-from-enc.c���������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include "striconveha.h" #include "unistr.h" /* Name of UTF-16 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION || (((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__) # ifdef WORDS_BIGENDIAN # define UTF16_NAME "UTF-16BE" # else # define UTF16_NAME "UTF-16LE" # endif #endif #define FUNC u16_conv_from_encoding #define UNIT uint16_t #define U8_TO_U u8_to_u16 #define U_MBLEN u16_mblen #if defined UTF16_NAME # define UTF_NAME UTF16_NAME # define HAVE_UTF_NAME 1 #endif #include "u-conv-from-enc.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-conv-to-enc.c�����������������������������������������������0000664�0000000�0000000�00000012040�14110572173�0021430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to legacy encodings. Copyright (C) 2002, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "striconveha.h" #include "unistr.h" #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* Name of UTF-16 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION || (((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__) # ifdef WORDS_BIGENDIAN # define UTF16_NAME "UTF-16BE" # else # define UTF16_NAME "UTF-16LE" # endif #endif #if !defined UTF16_NAME /* A variant of u16_to_u8 that treats an incomplete sequence of units at the end as a harmless no-op, rather than reporting it as an EILSEQ error. */ #define FUNC u16_to_u8_lenient #define SRC_UNIT uint16_t #define DST_UNIT uint8_t static DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ count = u16_mbtoucr (&uc, s, s_end - s); if (count < 0) { if (count == -2) /* Incomplete sequence of units. */ break; if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } s += count; /* Store it in the output string. */ count = u8_uctomb (result + length, uc, allocated - length); if (count == -1) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } if (count == -2) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 6 > allocated) allocated = length + 6; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; count = u8_uctomb (result + length, uc, allocated - length); if (count < 0) abort (); } length += count; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } #undef DST_UNIT #undef SRC_UNIT #undef FUNC #endif #define FUNC u16_conv_to_encoding #define UNIT uint16_t #define U_TO_U8 u16_to_u8_lenient #define U_MBLEN u16_mblen #if defined UTF16_NAME # define UTF_NAME UTF16_NAME # define HAVE_UTF_NAME 1 #endif #include "u-conv-to-enc.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-strconv-from-enc.c������������������������������������������0000664�0000000�0000000�00000003014�14110572173�0022503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #define FUNC u16_strconv_from_encoding #define UNIT uint16_t #define U_CONV_FROM_ENCODING u16_conv_from_encoding #define U_STRLEN u16_strlen #include "u-strconv-from-enc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-strconv-from-locale.c���������������������������������������0000664�0000000�0000000�00000002707�14110572173�0023205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" uint16_t * u16_strconv_from_locale (const char *string) { const char *encoding = locale_charset (); return u16_strconv_from_encoding (string, encoding, iconveh_question_mark); } ���������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-strconv-to-enc.c��������������������������������������������0000664�0000000�0000000�00000003716�14110572173�0022173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "striconveha.h" #include "unistr.h" #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* Name of UTF-16 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION || (((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__) # ifdef WORDS_BIGENDIAN # define UTF16_NAME "UTF-16BE" # else # define UTF16_NAME "UTF-16LE" # endif #endif #define FUNC u16_strconv_to_encoding #define UNIT uint16_t #define U_TO_U8 u16_to_u8 #define U_STRLEN u16_strlen #if defined UTF16_NAME # define UTF_NAME UTF16_NAME # define HAVE_UTF_NAME 1 #endif #include "u-strconv-to-enc.h" ��������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u16-strconv-to-locale.c�����������������������������������������0000664�0000000�0000000�00000002703�14110572173�0022660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" char * u16_strconv_to_locale (const uint16_t *string) { const char *encoding = locale_charset (); return u16_strconv_to_encoding (string, encoding, iconveh_question_mark); } �������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-conv-from-enc.c���������������������������������������������0000664�0000000�0000000�00000003543�14110572173�0021757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include "striconveha.h" #include "unistr.h" /* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION # define UTF32_NAME "UCS-4-INTERNAL" #elif ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__ # define UTF32_NAME "WCHAR_T" #endif #define FUNC u32_conv_from_encoding #define UNIT uint32_t #define U8_TO_U u8_to_u32 #define U_MBLEN u32_mblen #if defined UTF32_NAME # define UTF_NAME UTF32_NAME # define HAVE_UTF_NAME 1 #endif #include "u-conv-from-enc.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-conv-to-enc.c�����������������������������������������������0000664�0000000�0000000�00000003657�14110572173�0021444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "striconveha.h" #include "unistr.h" #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION # define UTF32_NAME "UCS-4-INTERNAL" #elif ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__ # define UTF32_NAME "WCHAR_T" #endif #define FUNC u32_conv_to_encoding #define UNIT uint32_t #define U_TO_U8 u32_to_u8 #define U_MBLEN u32_mblen #if defined UTF32_NAME # define UTF_NAME UTF32_NAME # define HAVE_UTF_NAME 1 #endif #include "u-conv-to-enc.h" ���������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-strconv-from-enc.c������������������������������������������0000664�0000000�0000000�00000003014�14110572173�0022501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #define FUNC u32_strconv_from_encoding #define UNIT uint32_t #define U_CONV_FROM_ENCODING u32_conv_from_encoding #define U_STRLEN u32_strlen #include "u-strconv-from-enc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-strconv-from-locale.c���������������������������������������0000664�0000000�0000000�00000002707�14110572173�0023203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" uint32_t * u32_strconv_from_locale (const char *string) { const char *encoding = locale_charset (); return u32_strconv_from_encoding (string, encoding, iconveh_question_mark); } ���������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-strconv-to-enc.c��������������������������������������������0000664�0000000�0000000�00000003667�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "striconveha.h" #include "unistr.h" #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and alignment. */ #if defined _LIBICONV_VERSION # define UTF32_NAME "UCS-4-INTERNAL" #elif ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__ # define UTF32_NAME "WCHAR_T" #endif #define FUNC u32_strconv_to_encoding #define UNIT uint32_t #define U_TO_U8 u32_to_u8 #define U_STRLEN u32_strlen #if defined UTF32_NAME # define UTF_NAME UTF32_NAME # define HAVE_UTF_NAME 1 #endif #include "u-strconv-to-enc.h" �������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u32-strconv-to-locale.c�����������������������������������������0000664�0000000�0000000�00000002703�14110572173�0022656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" char * u32_strconv_to_locale (const uint32_t *string) { const char *encoding = locale_charset (); return u32_strconv_to_encoding (string, encoding, iconveh_question_mark); } �������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u8-conv-from-enc.c����������������������������������������������0000664�0000000�0000000�00000005771�14110572173�0021707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "c-strcaseeq.h" #include "striconveha.h" #include "unistr.h" uint8_t * u8_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint8_t *resultbuf, size_t *lengthp) { if (STRCASEEQ (fromcode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) { /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ uint8_t *result; if (u8_check ((const uint8_t *) src, srclen)) { errno = EILSEQ; return NULL; } if (offsets != NULL) { size_t i; for (i = 0; i < srclen; ) { int count = u8_mblen ((const uint8_t *) src + i, srclen - i); /* We can rely on count > 0 because of the previous u8_check. */ if (count <= 0) abort (); offsets[i] = i; i++; while (--count > 0) offsets[i++] = (size_t)(-1); } } /* Memory allocation. */ if (resultbuf != NULL && *lengthp >= srclen) result = resultbuf; else { result = (uint8_t *) malloc (srclen > 0 ? srclen : 1); if (result == NULL) { errno = ENOMEM; return NULL; } } if (srclen > 0) memcpy ((char *) result, src, srclen); *lengthp = srclen; return result; } else { char *result = (char *) resultbuf; size_t length = *lengthp; if (mem_iconveha (src, srclen, fromcode, "UTF-8", true, handler, offsets, &result, &length) < 0) return NULL; if (result == NULL) /* when (resultbuf == NULL && length == 0) */ { result = (char *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } *lengthp = length; return (uint8_t *) result; } } �������gnulib-20210822~d383792/lib/uniconv/u8-conv-to-enc.c������������������������������������������������0000664�0000000�0000000�00000005707�14110572173�0021365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "c-strcaseeq.h" #include "striconveha.h" #include "unistr.h" char * u8_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint8_t *src, size_t srclen, size_t *offsets, char *resultbuf, size_t *lengthp) { if (STRCASEEQ (tocode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) { char *result; /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ if (u8_check (src, srclen)) { errno = EILSEQ; return NULL; } /* Memory allocation. */ if (resultbuf != NULL && *lengthp >= srclen) result = resultbuf; else { result = (char *) malloc (srclen > 0 ? srclen : 1); if (result == NULL) { errno = ENOMEM; return NULL; } } if (srclen > 0) memcpy (result, (const char *) src, srclen); *lengthp = srclen; return result; } else { char *result = resultbuf; size_t length = *lengthp; if (mem_iconveha ((const char *) src, srclen, "UTF-8", tocode, handler == iconveh_question_mark, handler, offsets, &result, &length) < 0) return NULL; if (result == NULL) /* when (resultbuf == NULL && length == 0) */ { result = (char *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } *lengthp = length; return result; } } ���������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u8-strconv-from-enc.c�������������������������������������������0000664�0000000�0000000�00000002201�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #define FUNC u8_strconv_from_encoding #define UNIT uint8_t #define U_CONV_FROM_ENCODING u8_conv_from_encoding #define U_STRLEN u8_strlen #include "u-strconv-from-enc.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u8-strconv-from-locale.c����������������������������������������0000664�0000000�0000000�00000002075�14110572173�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" uint8_t * u8_strconv_from_locale (const char *string) { const char *encoding = locale_charset (); return u8_strconv_from_encoding (string, encoding, iconveh_question_mark); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u8-strconv-to-enc.c���������������������������������������������0000664�0000000�0000000�00000005236�14110572173�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to legacy encodings. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "c-strcaseeq.h" #include "striconveha.h" #include "unistr.h" char * u8_strconv_to_encoding (const uint8_t *string, const char *tocode, enum iconv_ilseq_handler handler) { char *result; size_t length; if (STRCASEEQ (tocode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) { /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ length = u8_strlen (string) + 1; if (u8_check (string, length)) { errno = EILSEQ; return NULL; } result = (char *) malloc (length); if (result == NULL) { errno = ENOMEM; return NULL; } memcpy (result, (const char *) string, length); return result; } else { result = NULL; length = 0; if (mem_iconveha ((const char *) string, u8_strlen (string) + 1, "UTF-8", tocode, handler == iconveh_question_mark, handler, NULL, &result, &length) < 0) return NULL; /* Verify the result has exactly one NUL byte, at the end. */ if (!(length > 0 && result[length-1] == '\0' && strlen (result) == length-1)) { free (result); errno = EILSEQ; return NULL; } return result; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniconv/u8-strconv-to-locale.c������������������������������������������0000664�0000000�0000000�00000002677�14110572173�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to the locale encoding. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and 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>. */ #include <config.h> /* Specification. */ #include "uniconv.h" char * u8_strconv_to_locale (const uint8_t *string) { const char *encoding = locale_charset (); return u8_strconv_to_encoding (string, encoding, iconveh_question_mark); } �����������������������������������������������������������������gnulib-20210822~d383792/lib/unictype.in.h�����������������������������������������������������������0000664�0000000�0000000�00000120750�14110572173�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character classification and properties. Copyright (C) 2002, 2005-2021 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/>. */ #ifndef _UNICTYPE_H #define _UNICTYPE_H #include "unitypes.h" /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Field 1 of Unicode Character Database: Character name. See "uniname.h". */ /* ========================================================================= */ /* Field 2 of Unicode Character Database: General category. */ /* Data type denoting a General category value. This is not just a bitmask, but rather a bitmask and a pointer to the lookup table, so that programs that use only the predefined bitmasks (i.e. don't combine bitmasks with & and |) don't have a link-time dependency towards the big general table. */ typedef struct { uint32_t bitmask : 31; /*bool*/ unsigned int generic : 1; union { const void *table; /* when generic is 0 */ bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ } lookup; } uc_general_category_t; /* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html says a 32-bit integer will always suffice to represent them. These bit masks can only be used with the uc_is_general_category_withtable function. */ enum { UC_CATEGORY_MASK_L = 0x0000001f, UC_CATEGORY_MASK_LC = 0x00000007, UC_CATEGORY_MASK_Lu = 0x00000001, UC_CATEGORY_MASK_Ll = 0x00000002, UC_CATEGORY_MASK_Lt = 0x00000004, UC_CATEGORY_MASK_Lm = 0x00000008, UC_CATEGORY_MASK_Lo = 0x00000010, UC_CATEGORY_MASK_M = 0x000000e0, UC_CATEGORY_MASK_Mn = 0x00000020, UC_CATEGORY_MASK_Mc = 0x00000040, UC_CATEGORY_MASK_Me = 0x00000080, UC_CATEGORY_MASK_N = 0x00000700, UC_CATEGORY_MASK_Nd = 0x00000100, UC_CATEGORY_MASK_Nl = 0x00000200, UC_CATEGORY_MASK_No = 0x00000400, UC_CATEGORY_MASK_P = 0x0003f800, UC_CATEGORY_MASK_Pc = 0x00000800, UC_CATEGORY_MASK_Pd = 0x00001000, UC_CATEGORY_MASK_Ps = 0x00002000, UC_CATEGORY_MASK_Pe = 0x00004000, UC_CATEGORY_MASK_Pi = 0x00008000, UC_CATEGORY_MASK_Pf = 0x00010000, UC_CATEGORY_MASK_Po = 0x00020000, UC_CATEGORY_MASK_S = 0x003c0000, UC_CATEGORY_MASK_Sm = 0x00040000, UC_CATEGORY_MASK_Sc = 0x00080000, UC_CATEGORY_MASK_Sk = 0x00100000, UC_CATEGORY_MASK_So = 0x00200000, UC_CATEGORY_MASK_Z = 0x01c00000, UC_CATEGORY_MASK_Zs = 0x00400000, UC_CATEGORY_MASK_Zl = 0x00800000, UC_CATEGORY_MASK_Zp = 0x01000000, UC_CATEGORY_MASK_C = 0x3e000000, UC_CATEGORY_MASK_Cc = 0x02000000, UC_CATEGORY_MASK_Cf = 0x04000000, UC_CATEGORY_MASK_Cs = 0x08000000, UC_CATEGORY_MASK_Co = 0x10000000, UC_CATEGORY_MASK_Cn = 0x20000000 }; /* Predefined General category values. */ extern const uc_general_category_t UC_CATEGORY_L; extern const uc_general_category_t UC_CATEGORY_LC; extern const uc_general_category_t UC_CATEGORY_Lu; extern const uc_general_category_t UC_CATEGORY_Ll; extern const uc_general_category_t UC_CATEGORY_Lt; extern const uc_general_category_t UC_CATEGORY_Lm; extern const uc_general_category_t UC_CATEGORY_Lo; extern const uc_general_category_t UC_CATEGORY_M; extern const uc_general_category_t UC_CATEGORY_Mn; extern const uc_general_category_t UC_CATEGORY_Mc; extern const uc_general_category_t UC_CATEGORY_Me; extern const uc_general_category_t UC_CATEGORY_N; extern const uc_general_category_t UC_CATEGORY_Nd; extern const uc_general_category_t UC_CATEGORY_Nl; extern const uc_general_category_t UC_CATEGORY_No; extern const uc_general_category_t UC_CATEGORY_P; extern const uc_general_category_t UC_CATEGORY_Pc; extern const uc_general_category_t UC_CATEGORY_Pd; extern const uc_general_category_t UC_CATEGORY_Ps; extern const uc_general_category_t UC_CATEGORY_Pe; extern const uc_general_category_t UC_CATEGORY_Pi; extern const uc_general_category_t UC_CATEGORY_Pf; extern const uc_general_category_t UC_CATEGORY_Po; extern const uc_general_category_t UC_CATEGORY_S; extern const uc_general_category_t UC_CATEGORY_Sm; extern const uc_general_category_t UC_CATEGORY_Sc; extern const uc_general_category_t UC_CATEGORY_Sk; extern const uc_general_category_t UC_CATEGORY_So; extern const uc_general_category_t UC_CATEGORY_Z; extern const uc_general_category_t UC_CATEGORY_Zs; extern const uc_general_category_t UC_CATEGORY_Zl; extern const uc_general_category_t UC_CATEGORY_Zp; extern const uc_general_category_t UC_CATEGORY_C; extern const uc_general_category_t UC_CATEGORY_Cc; extern const uc_general_category_t UC_CATEGORY_Cf; extern const uc_general_category_t UC_CATEGORY_Cs; extern const uc_general_category_t UC_CATEGORY_Co; extern const uc_general_category_t UC_CATEGORY_Cn; /* Non-public. */ extern const uc_general_category_t _UC_CATEGORY_NONE; /* Alias names for predefined General category values. */ #define UC_LETTER UC_CATEGORY_L #define UC_CASED_LETTER UC_CATEGORY_LC #define UC_UPPERCASE_LETTER UC_CATEGORY_Lu #define UC_LOWERCASE_LETTER UC_CATEGORY_Ll #define UC_TITLECASE_LETTER UC_CATEGORY_Lt #define UC_MODIFIER_LETTER UC_CATEGORY_Lm #define UC_OTHER_LETTER UC_CATEGORY_Lo #define UC_MARK UC_CATEGORY_M #define UC_NON_SPACING_MARK UC_CATEGORY_Mn #define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc #define UC_ENCLOSING_MARK UC_CATEGORY_Me #define UC_NUMBER UC_CATEGORY_N #define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd #define UC_LETTER_NUMBER UC_CATEGORY_Nl #define UC_OTHER_NUMBER UC_CATEGORY_No #define UC_PUNCTUATION UC_CATEGORY_P #define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc #define UC_DASH_PUNCTUATION UC_CATEGORY_Pd #define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ #define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ #define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi #define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf #define UC_OTHER_PUNCTUATION UC_CATEGORY_Po #define UC_SYMBOL UC_CATEGORY_S #define UC_MATH_SYMBOL UC_CATEGORY_Sm #define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc #define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk #define UC_OTHER_SYMBOL UC_CATEGORY_So #define UC_SEPARATOR UC_CATEGORY_Z #define UC_SPACE_SEPARATOR UC_CATEGORY_Zs #define UC_LINE_SEPARATOR UC_CATEGORY_Zl #define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp #define UC_OTHER UC_CATEGORY_C #define UC_CONTROL UC_CATEGORY_Cc #define UC_FORMAT UC_CATEGORY_Cf #define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ #define UC_PRIVATE_USE UC_CATEGORY_Co #define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ /* Return the union of two general categories. This corresponds to the unions of the two sets of characters. */ extern uc_general_category_t uc_general_category_or (uc_general_category_t category1, uc_general_category_t category2); /* Return the intersection of two general categories as bit masks. This *does*not* correspond to the intersection of the two sets of characters. */ extern uc_general_category_t uc_general_category_and (uc_general_category_t category1, uc_general_category_t category2); /* Return the intersection of a general category with the complement of a second general category, as bit masks. This *does*not* correspond to the intersection with complement, when viewing the categories as sets of characters. */ extern uc_general_category_t uc_general_category_and_not (uc_general_category_t category1, uc_general_category_t category2); /* Return the name of a general category. */ extern const char * uc_general_category_name (uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Return the long name of a general category. */ extern const char * uc_general_category_long_name (uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Return the general category given by name, e.g. "Lu", or by long name, e.g. "Uppercase Letter". */ extern uc_general_category_t uc_general_category_byname (const char *category_name) _UC_ATTRIBUTE_PURE; /* Return the general category of a Unicode character. */ extern uc_general_category_t uc_general_category (ucs4_t uc) _UC_ATTRIBUTE_PURE; /* Test whether a Unicode character belongs to a given category. The CATEGORY argument can be the combination of several predefined general categories. */ extern bool uc_is_general_category (ucs4_t uc, uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Likewise. This function uses a big table comprising all categories. */ extern bool uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 3 of Unicode Character Database: Canonical combining class. */ /* The possible results of uc_combining_class (0..255) are described in UCD.html. The list here is not definitive; more values can be added in future versions. */ enum { UC_CCC_NR = 0, /* Not Reordered */ UC_CCC_OV = 1, /* Overlay */ UC_CCC_NK = 7, /* Nukta */ UC_CCC_KV = 8, /* Kana Voicing */ UC_CCC_VR = 9, /* Virama */ UC_CCC_ATBL = 200, /* Attached Below Left */ UC_CCC_ATB = 202, /* Attached Below */ UC_CCC_ATA = 214, /* Attached Above */ UC_CCC_ATAR = 216, /* Attached Above Right */ UC_CCC_BL = 218, /* Below Left */ UC_CCC_B = 220, /* Below */ UC_CCC_BR = 222, /* Below Right */ UC_CCC_L = 224, /* Left */ UC_CCC_R = 226, /* Right */ UC_CCC_AL = 228, /* Above Left */ UC_CCC_A = 230, /* Above */ UC_CCC_AR = 232, /* Above Right */ UC_CCC_DB = 233, /* Double Below */ UC_CCC_DA = 234, /* Double Above */ UC_CCC_IS = 240 /* Iota Subscript */ }; /* Return the canonical combining class of a Unicode character. */ extern int uc_combining_class (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the name of a canonical combining class. */ extern const char * uc_combining_class_name (int ccc) _UC_ATTRIBUTE_CONST; /* Return the long name of a canonical combining class. */ extern const char * uc_combining_class_long_name (int ccc) _UC_ATTRIBUTE_CONST; /* Return the canonical combining class given by name, e.g. "BL", or by long name, e.g. "Below Left". */ extern int uc_combining_class_byname (const char *ccc_name) _UC_ATTRIBUTE_PURE; /* ========================================================================= */ /* Field 4 of Unicode Character Database: Bidi class. Before Unicode 4.0, this field was called "Bidirectional category". */ enum { UC_BIDI_L, /* Left-to-Right */ UC_BIDI_LRE, /* Left-to-Right Embedding */ UC_BIDI_LRO, /* Left-to-Right Override */ UC_BIDI_R, /* Right-to-Left */ UC_BIDI_AL, /* Right-to-Left Arabic */ UC_BIDI_RLE, /* Right-to-Left Embedding */ UC_BIDI_RLO, /* Right-to-Left Override */ UC_BIDI_PDF, /* Pop Directional Format */ UC_BIDI_EN, /* European Number */ UC_BIDI_ES, /* European Number Separator */ UC_BIDI_ET, /* European Number Terminator */ UC_BIDI_AN, /* Arabic Number */ UC_BIDI_CS, /* Common Number Separator */ UC_BIDI_NSM, /* Non-Spacing Mark */ UC_BIDI_BN, /* Boundary Neutral */ UC_BIDI_B, /* Paragraph Separator */ UC_BIDI_S, /* Segment Separator */ UC_BIDI_WS, /* Whitespace */ UC_BIDI_ON, /* Other Neutral */ UC_BIDI_LRI, /* Left-to-Right Isolate */ UC_BIDI_RLI, /* Right-to-Left Isolate */ UC_BIDI_FSI, /* First Strong Isolate */ UC_BIDI_PDI /* Pop Directional Isolate */ }; /* Return the name of a bidi class. */ extern const char * uc_bidi_class_name (int bidi_class) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern const char * uc_bidi_category_name (int category) _UC_ATTRIBUTE_CONST; /* Return the long name of a bidi class. */ extern const char * uc_bidi_class_long_name (int bidi_class) _UC_ATTRIBUTE_CONST; /* Return the bidi class given by name, e.g. "LRE", or by long name, e.g. "Left-to-Right Embedding". */ extern int uc_bidi_class_byname (const char *bidi_class_name) _UC_ATTRIBUTE_PURE; /* Same; obsolete function name. */ extern int uc_bidi_category_byname (const char *category_name) _UC_ATTRIBUTE_PURE; /* Return the bidi class of a Unicode character. */ extern int uc_bidi_class (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern int uc_bidi_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character belongs to a given bidi class. */ extern bool uc_is_bidi_class (ucs4_t uc, int bidi_class) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern bool uc_is_bidi_category (ucs4_t uc, int category) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 5 of Unicode Character Database: Character decomposition mapping. See "uninorm.h". */ /* ========================================================================= */ /* Field 6 of Unicode Character Database: Decimal digit value. */ /* Return the decimal digit value of a Unicode character. */ extern int uc_decimal_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 7 of Unicode Character Database: Digit value. */ /* Return the digit value of a Unicode character. */ extern int uc_digit_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 8 of Unicode Character Database: Numeric value. */ /* Return the numeric value of a Unicode character. */ typedef struct { int numerator; int denominator; } uc_fraction_t; extern uc_fraction_t uc_numeric_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 9 of Unicode Character Database: Mirrored. */ /* Return the mirrored character of a Unicode character UC in *PUC. */ extern bool uc_mirror_char (ucs4_t uc, ucs4_t *puc); /* ========================================================================= */ /* Field 10 of Unicode Character Database: Unicode 1.0 Name. Not available in this library. */ /* ========================================================================= */ /* Field 11 of Unicode Character Database: ISO 10646 comment. Not available in this library. */ /* ========================================================================= */ /* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, lowercase mapping, titlecase mapping. See "unicase.h". */ /* ========================================================================= */ /* Field 2 of the file ArabicShaping.txt in the Unicode Character Database. */ /* Possible joining types. */ enum { UC_JOINING_TYPE_U, /* Non_Joining */ UC_JOINING_TYPE_T, /* Transparent */ UC_JOINING_TYPE_C, /* Join_Causing */ UC_JOINING_TYPE_L, /* Left_Joining */ UC_JOINING_TYPE_R, /* Right_Joining */ UC_JOINING_TYPE_D /* Dual_Joining */ }; /* Return the name of a joining type. */ extern const char * uc_joining_type_name (int joining_type) _UC_ATTRIBUTE_CONST; /* Return the long name of a joining type. */ extern const char * uc_joining_type_long_name (int joining_type) _UC_ATTRIBUTE_CONST; /* Return the joining type given by name, e.g. "D", or by long name, e.g. "Dual Joining". */ extern int uc_joining_type_byname (const char *joining_type_name) _UC_ATTRIBUTE_PURE; /* Return the joining type of a Unicode character. */ extern int uc_joining_type (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 3 of the file ArabicShaping.txt in the Unicode Character Database. */ /* Possible joining groups. This enumeration may be extended in the future. */ enum { UC_JOINING_GROUP_NONE, /* No_Joining_Group */ UC_JOINING_GROUP_AIN, /* Ain */ UC_JOINING_GROUP_ALAPH, /* Alaph */ UC_JOINING_GROUP_ALEF, /* Alef */ UC_JOINING_GROUP_BEH, /* Beh */ UC_JOINING_GROUP_BETH, /* Beth */ UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ UC_JOINING_GROUP_DAL, /* Dal */ UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ UC_JOINING_GROUP_E, /* E */ UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ UC_JOINING_GROUP_FE, /* Fe */ UC_JOINING_GROUP_FEH, /* Feh */ UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ UC_JOINING_GROUP_GAF, /* Gaf */ UC_JOINING_GROUP_GAMAL, /* Gamal */ UC_JOINING_GROUP_HAH, /* Hah */ UC_JOINING_GROUP_HE, /* He */ UC_JOINING_GROUP_HEH, /* Heh */ UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ UC_JOINING_GROUP_HETH, /* Heth */ UC_JOINING_GROUP_KAF, /* Kaf */ UC_JOINING_GROUP_KAPH, /* Kaph */ UC_JOINING_GROUP_KHAPH, /* Khaph */ UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ UC_JOINING_GROUP_LAM, /* Lam */ UC_JOINING_GROUP_LAMADH, /* Lamadh */ UC_JOINING_GROUP_MEEM, /* Meem */ UC_JOINING_GROUP_MIM, /* Mim */ UC_JOINING_GROUP_NOON, /* Noon */ UC_JOINING_GROUP_NUN, /* Nun */ UC_JOINING_GROUP_NYA, /* Nya */ UC_JOINING_GROUP_PE, /* Pe */ UC_JOINING_GROUP_QAF, /* Qaf */ UC_JOINING_GROUP_QAPH, /* Qaph */ UC_JOINING_GROUP_REH, /* Reh */ UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ UC_JOINING_GROUP_SAD, /* Sad */ UC_JOINING_GROUP_SADHE, /* Sadhe */ UC_JOINING_GROUP_SEEN, /* Seen */ UC_JOINING_GROUP_SEMKATH, /* Semkath */ UC_JOINING_GROUP_SHIN, /* Shin */ UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ UC_JOINING_GROUP_TAH, /* Tah */ UC_JOINING_GROUP_TAW, /* Taw */ UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ UC_JOINING_GROUP_TETH, /* Teth */ UC_JOINING_GROUP_WAW, /* Waw */ UC_JOINING_GROUP_YEH, /* Yeh */ UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ UC_JOINING_GROUP_YUDH, /* Yudh */ UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ UC_JOINING_GROUP_ZAIN, /* Zain */ UC_JOINING_GROUP_ZHAIN, /* Zhain */ UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ UC_JOINING_GROUP_MANICHAEAN_HUNDRED, /* Manichaean_Hundred */ UC_JOINING_GROUP_AFRICAN_FEH, /* African_Feh */ UC_JOINING_GROUP_AFRICAN_QAF, /* African_Qaf */ UC_JOINING_GROUP_AFRICAN_NOON /* African_Noon */ }; /* Return the name of a joining group. */ extern const char * uc_joining_group_name (int joining_group) _UC_ATTRIBUTE_CONST; /* Return the joining group given by name, e.g. "Teh_Marbuta". */ extern int uc_joining_group_byname (const char *joining_group_name) _UC_ATTRIBUTE_PURE; /* Return the joining group of a Unicode character. */ extern int uc_joining_group (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Common API for properties. */ /* Data type denoting a property. This is not just a number, but rather a pointer to the test functions, so that programs that use only few of the properties don't have a link-time dependency towards all the tables. */ typedef struct { bool (*test_fn) (ucs4_t uc); } uc_property_t; /* Predefined properties. */ /* General. */ extern const uc_property_t UC_PROPERTY_WHITE_SPACE; extern const uc_property_t UC_PROPERTY_ALPHABETIC; extern const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; extern const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; extern const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; extern const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; extern const uc_property_t UC_PROPERTY_DEPRECATED; extern const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; extern const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; extern const uc_property_t UC_PROPERTY_PRIVATE_USE; extern const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; /* Case. */ extern const uc_property_t UC_PROPERTY_UPPERCASE; extern const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; extern const uc_property_t UC_PROPERTY_LOWERCASE; extern const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; extern const uc_property_t UC_PROPERTY_TITLECASE; extern const uc_property_t UC_PROPERTY_CASED; extern const uc_property_t UC_PROPERTY_CASE_IGNORABLE; extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED; extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED; extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED; extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; extern const uc_property_t UC_PROPERTY_SOFT_DOTTED; /* Identifiers. */ extern const uc_property_t UC_PROPERTY_ID_START; extern const uc_property_t UC_PROPERTY_OTHER_ID_START; extern const uc_property_t UC_PROPERTY_ID_CONTINUE; extern const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; extern const uc_property_t UC_PROPERTY_XID_START; extern const uc_property_t UC_PROPERTY_XID_CONTINUE; extern const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; extern const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; /* Shaping and rendering. */ extern const uc_property_t UC_PROPERTY_JOIN_CONTROL; extern const uc_property_t UC_PROPERTY_GRAPHEME_BASE; extern const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; extern const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; extern const uc_property_t UC_PROPERTY_GRAPHEME_LINK; /* Bidi. */ extern const uc_property_t UC_PROPERTY_BIDI_CONTROL; extern const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; extern const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; extern const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; extern const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; extern const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; extern const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; extern const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; extern const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; extern const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; extern const uc_property_t UC_PROPERTY_BIDI_PDF; extern const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; extern const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; /* Numeric. */ extern const uc_property_t UC_PROPERTY_HEX_DIGIT; extern const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; /* CJK. */ extern const uc_property_t UC_PROPERTY_IDEOGRAPHIC; extern const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; extern const uc_property_t UC_PROPERTY_RADICAL; extern const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; extern const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; /* Misc. */ extern const uc_property_t UC_PROPERTY_ZERO_WIDTH; extern const uc_property_t UC_PROPERTY_SPACE; extern const uc_property_t UC_PROPERTY_NON_BREAK; extern const uc_property_t UC_PROPERTY_ISO_CONTROL; extern const uc_property_t UC_PROPERTY_FORMAT_CONTROL; extern const uc_property_t UC_PROPERTY_DASH; extern const uc_property_t UC_PROPERTY_HYPHEN; extern const uc_property_t UC_PROPERTY_PUNCTUATION; extern const uc_property_t UC_PROPERTY_LINE_SEPARATOR; extern const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; extern const uc_property_t UC_PROPERTY_QUOTATION_MARK; extern const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; extern const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; extern const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; extern const uc_property_t UC_PROPERTY_MATH; extern const uc_property_t UC_PROPERTY_OTHER_MATH; extern const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; extern const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; extern const uc_property_t UC_PROPERTY_COMBINING; extern const uc_property_t UC_PROPERTY_COMPOSITE; extern const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; extern const uc_property_t UC_PROPERTY_NUMERIC; extern const uc_property_t UC_PROPERTY_DIACRITIC; extern const uc_property_t UC_PROPERTY_EXTENDER; extern const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; /* Return the property given by name, e.g. "White space". */ extern uc_property_t uc_property_byname (const char *property_name); /* Test whether a property is valid. */ #define uc_property_is_valid(property) ((property).test_fn != NULL) /* Test whether a Unicode character has a given property. */ extern bool uc_is_property (ucs4_t uc, uc_property_t property); extern bool uc_is_property_white_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_alphabetic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_alphabetic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_not_a_character (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_deprecated (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_logical_order_exception (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_variation_selector (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_private_use (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_unassigned_code_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_uppercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_uppercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_lowercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_lowercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_titlecase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_cased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_case_ignorable (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_lowercased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_uppercased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_titlecased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_casefolded (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_casemapped (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_soft_dotted (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_id_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_id_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_xid_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_xid_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_pattern_white_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_pattern_syntax (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_join_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_base (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_extend (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_grapheme_extend (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_link (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_left_to_right (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_european_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_common_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_block_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_segment_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_pdf (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_other_neutral (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_hex_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ascii_hex_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ideographic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_unified_ideograph (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_radical (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ids_binary_operator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ids_trinary_operator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_zero_width (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_non_break (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_iso_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_format_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_dash (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_hyphen (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_line_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_paragraph_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_quotation_mark (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_sentence_terminal (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_terminal_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_currency_symbol (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_math (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_math (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_paired_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_left_of_pair (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_combining (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_composite (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_decimal_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_numeric (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_diacritic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_extender (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ignorable_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Subdivision of the Unicode characters into scripts. */ typedef struct { unsigned int code : 21; unsigned int start : 1; unsigned int end : 1; } uc_interval_t; typedef struct { unsigned int nintervals; const uc_interval_t *intervals; const char *name; } uc_script_t; /* Return the script of a Unicode character. */ extern const uc_script_t * uc_script (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the script given by name, e.g. "HAN". */ extern const uc_script_t * uc_script_byname (const char *script_name) _UC_ATTRIBUTE_PURE; /* Test whether a Unicode character belongs to a given script. */ extern bool uc_is_script (ucs4_t uc, const uc_script_t *script) _UC_ATTRIBUTE_PURE; /* Get the list of all scripts. */ extern void uc_all_scripts (const uc_script_t **scripts, size_t *count); /* ========================================================================= */ /* Subdivision of the Unicode character range into blocks. */ typedef struct { ucs4_t start; ucs4_t end; const char *name; } uc_block_t; /* Return the block a character belongs to. */ extern const uc_block_t * uc_block (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character belongs to a given block. */ extern bool uc_is_block (ucs4_t uc, const uc_block_t *block) _UC_ATTRIBUTE_PURE; /* Get the list of all blocks. */ extern void uc_all_blocks (const uc_block_t **blocks, size_t *count); /* ========================================================================= */ /* Properties taken from language standards. */ /* Test whether a Unicode character is considered whitespace in ISO C 99. */ extern bool uc_is_c_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character is considered whitespace in Java. */ extern bool uc_is_java_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; enum { UC_IDENTIFIER_START, /* valid as first or subsequent character */ UC_IDENTIFIER_VALID, /* valid as subsequent character only */ UC_IDENTIFIER_INVALID, /* not valid */ UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ }; /* Return the categorization of a Unicode character w.r.t. the ISO C 99 identifier syntax. */ extern int uc_c_ident_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the categorization of a Unicode character w.r.t. the Java identifier syntax. */ extern int uc_java_ident_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Like ISO C <ctype.h> and <wctype.h>. These functions are deprecated, because this set of functions was designed with ASCII in mind and cannot reflect the more diverse reality of the Unicode character set. But they can be a quick-and-dirty porting aid when migrating from wchar_t APIs to Unicode strings. */ /* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ extern bool uc_is_alnum (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, or any character that is one of a locale-specific set of characters for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_alpha (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any control character. */ extern bool uc_is_cntrl (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a decimal-digit character. */ extern bool uc_is_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character for which 'uc_is_print' is true and 'uc_is_space' is false. */ extern bool uc_is_graph (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a lowercase letter or is one of a locale-specific set of characters for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_lower (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any printing character. */ extern bool uc_is_print (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any printing character that is one of a locale-specific set of characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ extern bool uc_is_punct (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a locale-specific set of characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' is true. */ extern bool uc_is_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to an uppercase letter or is one of a locale-specific set of character for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_upper (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a hexadecimal-digit character. */ extern bool uc_is_xdigit (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* GNU extension. */ /* Test for any character that corresponds to a standard blank character or a locale-specific set of characters for which 'uc_is_alnum' is false. */ extern bool uc_is_blank (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNICTYPE_H */ ������������������������gnulib-20210822~d383792/lib/unictype/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016705�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/3level.h�������������������������������������������������������0000664�0000000�0000000�00000023113�14110572173�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000-2001, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Bruno Haible <haible@clisp.cons.org>, 2000. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ /* Construction of sparse 3-level tables. See wchar-lookup.h or coll-lookup.h for their structure and the meaning of p and q. Before including this file, set TABLE to the name of the structure to be defined ELEMENT to the type of every entry DEFAULT to the default value for empty entries ITERATE if you want the TABLE_iterate function to be defined NO_FINALIZE if you don't want the TABLE_finalize function to be defined This will define struct TABLE; void TABLE_init (struct TABLE *t); ELEMENT TABLE_get (struct TABLE *t, uint32_t wc); void TABLE_add (struct TABLE *t, uint32_t wc, ELEMENT value); void TABLE_iterate (struct TABLE *t, void (*fn) (uint32_t wc, ELEMENT value)); void TABLE_finalize (struct TABLE *t); */ #define CONCAT(a,b) CONCAT1(a,b) #define CONCAT1(a,b) a##b struct TABLE { /* Parameters. */ unsigned int p; unsigned int q; /* Working representation. */ size_t level1_alloc; size_t level1_size; uint32_t *level1; size_t level2_alloc; size_t level2_size; uint32_t *level2; size_t level3_alloc; size_t level3_size; ELEMENT *level3; /* Compressed representation. */ size_t result_size; char *result; }; /* Initialize. Assumes t->p and t->q have already been set. */ static inline void CONCAT(TABLE,_init) (struct TABLE *t) { t->level1 = NULL; t->level1_alloc = t->level1_size = 0; t->level2 = NULL; t->level2_alloc = t->level2_size = 0; t->level3 = NULL; t->level3_alloc = t->level3_size = 0; } /* Marker for an empty slot. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define EMPTY ((uint32_t) ~0) /* Retrieve an entry. */ static inline ELEMENT CONCAT(TABLE,_get) (struct TABLE *t, uint32_t wc) { uint32_t index1 = wc >> (t->q + t->p); if (index1 < t->level1_size) { uint32_t lookup1 = t->level1[index1]; if (lookup1 != EMPTY) { uint32_t index2 = ((wc >> t->p) & ((1 << t->q) - 1)) + (lookup1 << t->q); uint32_t lookup2 = t->level2[index2]; if (lookup2 != EMPTY) { uint32_t index3 = (wc & ((1 << t->p) - 1)) + (lookup2 << t->p); ELEMENT lookup3 = t->level3[index3]; return lookup3; } } } return DEFAULT; } /* Add one entry. */ static void CONCAT(TABLE,_add) (struct TABLE *t, uint32_t wc, ELEMENT value) { uint32_t index1 = wc >> (t->q + t->p); uint32_t index2 = (wc >> t->p) & ((1 << t->q) - 1); uint32_t index3 = wc & ((1 << t->p) - 1); size_t i, i1, i2; if (value == CONCAT(TABLE,_get) (t, wc)) return; if (index1 >= t->level1_size) { if (index1 >= t->level1_alloc) { size_t alloc = 2 * t->level1_alloc; if (alloc <= index1) alloc = index1 + 1; t->level1 = (uint32_t *) xrealloc ((char *) t->level1, alloc * sizeof (uint32_t)); t->level1_alloc = alloc; } while (index1 >= t->level1_size) t->level1[t->level1_size++] = EMPTY; } if (t->level1[index1] == EMPTY) { if (t->level2_size == t->level2_alloc) { size_t alloc = 2 * t->level2_alloc + 1; t->level2 = (uint32_t *) xrealloc ((char *) t->level2, (alloc << t->q) * sizeof (uint32_t)); t->level2_alloc = alloc; } i1 = t->level2_size << t->q; i2 = (t->level2_size + 1) << t->q; for (i = i1; i < i2; i++) t->level2[i] = EMPTY; t->level1[index1] = t->level2_size++; } index2 += t->level1[index1] << t->q; if (t->level2[index2] == EMPTY) { if (t->level3_size == t->level3_alloc) { size_t alloc = 2 * t->level3_alloc + 1; t->level3 = (ELEMENT *) xrealloc ((char *) t->level3, (alloc << t->p) * sizeof (ELEMENT)); t->level3_alloc = alloc; } i1 = t->level3_size << t->p; i2 = (t->level3_size + 1) << t->p; for (i = i1; i < i2; i++) t->level3[i] = DEFAULT; t->level2[index2] = t->level3_size++; } index3 += t->level2[index2] << t->p; t->level3[index3] = value; } #ifdef ITERATE /* Apply a function to all entries in the table. */ static void CONCAT(TABLE,_iterate) (struct TABLE *t, void (*fn) (uint32_t wc, ELEMENT value)) { uint32_t index1; for (index1 = 0; index1 < t->level1_size; index1++) { uint32_t lookup1 = t->level1[index1]; if (lookup1 != EMPTY) { uint32_t lookup1_shifted = lookup1 << t->q; uint32_t index2; for (index2 = 0; index2 < (1 << t->q); index2++) { uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; if (lookup2 != EMPTY) { uint32_t lookup2_shifted = lookup2 << t->p; uint32_t index3; for (index3 = 0; index3 < (1 << t->p); index3++) { ELEMENT lookup3 = t->level3[index3 + lookup2_shifted]; if (lookup3 != DEFAULT) fn ((((index1 << t->q) + index2) << t->p) + index3, lookup3); } } } } } } #endif #ifndef NO_FINALIZE /* Finalize and shrink. */ static void CONCAT(TABLE,_finalize) (struct TABLE *t) { size_t i, j, k; uint32_t reorder3[t->level3_size]; uint32_t reorder2[t->level2_size]; uint32_t level1_offset, level2_offset, level3_offset, last_offset; /* Uniquify level3 blocks. */ k = 0; for (j = 0; j < t->level3_size; j++) { for (i = 0; i < k; i++) if (memcmp (&t->level3[i << t->p], &t->level3[j << t->p], (1 << t->p) * sizeof (ELEMENT)) == 0) break; /* Relocate block j to block i. */ reorder3[j] = i; if (i == k) { if (i != j) memcpy (&t->level3[i << t->p], &t->level3[j << t->p], (1 << t->p) * sizeof (ELEMENT)); k++; } } t->level3_size = k; for (i = 0; i < (t->level2_size << t->q); i++) if (t->level2[i] != EMPTY) t->level2[i] = reorder3[t->level2[i]]; /* Uniquify level2 blocks. */ k = 0; for (j = 0; j < t->level2_size; j++) { for (i = 0; i < k; i++) if (memcmp (&t->level2[i << t->q], &t->level2[j << t->q], (1 << t->q) * sizeof (uint32_t)) == 0) break; /* Relocate block j to block i. */ reorder2[j] = i; if (i == k) { if (i != j) memcpy (&t->level2[i << t->q], &t->level2[j << t->q], (1 << t->q) * sizeof (uint32_t)); k++; } } t->level2_size = k; for (i = 0; i < t->level1_size; i++) if (t->level1[i] != EMPTY) t->level1[i] = reorder2[t->level1[i]]; /* Create and fill the resulting compressed representation. */ last_offset = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t) + (t->level2_size << t->q) * sizeof (uint32_t) + (t->level3_size << t->p) * sizeof (ELEMENT); t->result_size = (last_offset + 3) & ~3ul; t->result = (char *) xmalloc (t->result_size); level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t) + (t->level2_size << t->q) * sizeof (uint32_t); ((uint32_t *) t->result)[0] = t->q + t->p; ((uint32_t *) t->result)[1] = t->level1_size; ((uint32_t *) t->result)[2] = t->p; ((uint32_t *) t->result)[3] = (1 << t->q) - 1; ((uint32_t *) t->result)[4] = (1 << t->p) - 1; for (i = 0; i < t->level1_size; i++) ((uint32_t *) (t->result + level1_offset))[i] = (t->level1[i] == EMPTY ? 0 : (t->level1[i] << t->q) * sizeof (uint32_t) + level2_offset); for (i = 0; i < (t->level2_size << t->q); i++) ((uint32_t *) (t->result + level2_offset))[i] = (t->level2[i] == EMPTY ? 0 : (t->level2[i] << t->p) * sizeof (ELEMENT) + level3_offset); for (i = 0; i < (t->level3_size << t->p); i++) ((ELEMENT *) (t->result + level3_offset))[i] = t->level3[i]; if (last_offset < t->result_size) memset (t->result + last_offset, 0, t->result_size - last_offset); if (t->level1_alloc > 0) free (t->level1); if (t->level2_alloc > 0) free (t->level2); if (t->level3_alloc > 0) free (t->level3); } #endif #undef EMPTY #undef TABLE #undef ELEMENT #undef DEFAULT #undef ITERATE #undef NO_FINALIZE �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/3levelbit.h����������������������������������������������������0000664�0000000�0000000�00000022572�14110572173�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000-2002, 2009-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Bruno Haible <haible@clisp.cons.org>, 2000. NOTE: The canonical source of this file is maintained with the GNU C Library. See glibc/locale/programs/ld-ctype.c. Bugs can be reported to bug-glibc@gnu.org. 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/>. */ /* Construction of sparse 3-level tables. See wchar-lookup.h for their structure and the meaning of p and q. Before including this file, set TABLE to the name of the structure to be defined ITERATE if you want the TABLE_iterate function to be defined NO_FINALIZE if you don't want the TABLE_finalize function to be defined This will define struct TABLE; void TABLE_init (struct TABLE *t); int TABLE_get (struct TABLE *t, uint32_t wc); void TABLE_add (struct TABLE *t, uint32_t wc); void TABLE_iterate (struct TABLE *t, void (*fn) (uint32_t wc)); void TABLE_finalize (struct TABLE *t); */ #define CONCAT(a,b) CONCAT1(a,b) #define CONCAT1(a,b) a##b struct TABLE { /* Parameters. */ unsigned int p; unsigned int q; /* Working representation. */ size_t level1_alloc; size_t level1_size; uint32_t *level1; size_t level2_alloc; size_t level2_size; uint32_t *level2; size_t level3_alloc; size_t level3_size; uint32_t *level3; /* Compressed representation. */ size_t result_size; char *result; }; /* Initialize. Assumes t->p and t->q have already been set. */ static inline void CONCAT(TABLE,_init) (struct TABLE *t) { t->level1 = NULL; t->level1_alloc = t->level1_size = 0; t->level2 = NULL; t->level2_alloc = t->level2_size = 0; t->level3 = NULL; t->level3_alloc = t->level3_size = 0; } /* Marker for an empty slot. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define EMPTY ((uint32_t) ~0) /* Retrieve an entry. */ static inline int CONCAT(TABLE,_get) (struct TABLE *t, uint32_t wc) { uint32_t index1 = wc >> (t->q + t->p + 5); if (index1 < t->level1_size) { uint32_t lookup1 = t->level1[index1]; if (lookup1 != EMPTY) { uint32_t index2 = ((wc >> (t->p + 5)) & ((1 << t->q) - 1)) + (lookup1 << t->q); uint32_t lookup2 = t->level2[index2]; if (lookup2 != EMPTY) { uint32_t index3 = ((wc >> 5) & ((1 << t->p) - 1)) + (lookup2 << t->p); uint32_t lookup3 = t->level3[index3]; uint32_t index4 = wc & 0x1f; return (lookup3 >> index4) & 1; } } } return 0; } /* Add one entry. */ static void CONCAT(TABLE,_add) (struct TABLE *t, uint32_t wc) { uint32_t index1 = wc >> (t->q + t->p + 5); uint32_t index2 = (wc >> (t->p + 5)) & ((1 << t->q) - 1); uint32_t index3 = (wc >> 5) & ((1 << t->p) - 1); uint32_t index4 = wc & 0x1f; size_t i, i1, i2; if (index1 >= t->level1_size) { if (index1 >= t->level1_alloc) { size_t alloc = 2 * t->level1_alloc; if (alloc <= index1) alloc = index1 + 1; t->level1 = (uint32_t *) xrealloc ((char *) t->level1, alloc * sizeof (uint32_t)); t->level1_alloc = alloc; } while (index1 >= t->level1_size) t->level1[t->level1_size++] = EMPTY; } if (t->level1[index1] == EMPTY) { if (t->level2_size == t->level2_alloc) { size_t alloc = 2 * t->level2_alloc + 1; t->level2 = (uint32_t *) xrealloc ((char *) t->level2, (alloc << t->q) * sizeof (uint32_t)); t->level2_alloc = alloc; } i1 = t->level2_size << t->q; i2 = (t->level2_size + 1) << t->q; for (i = i1; i < i2; i++) t->level2[i] = EMPTY; t->level1[index1] = t->level2_size++; } index2 += t->level1[index1] << t->q; if (t->level2[index2] == EMPTY) { if (t->level3_size == t->level3_alloc) { size_t alloc = 2 * t->level3_alloc + 1; t->level3 = (uint32_t *) xrealloc ((char *) t->level3, (alloc << t->p) * sizeof (uint32_t)); t->level3_alloc = alloc; } i1 = t->level3_size << t->p; i2 = (t->level3_size + 1) << t->p; for (i = i1; i < i2; i++) t->level3[i] = 0; t->level2[index2] = t->level3_size++; } index3 += t->level2[index2] << t->p; t->level3[index3] |= (uint32_t)1 << index4; } #ifdef ITERATE /* Apply a function to all entries in the table. */ static void CONCAT(TABLE,_iterate) (struct TABLE *t, void (*fn) (uint32_t wc)) { uint32_t index1; for (index1 = 0; index1 < t->level1_size; index1++) { uint32_t lookup1 = t->level1[index1]; if (lookup1 != EMPTY) { uint32_t lookup1_shifted = lookup1 << t->q; uint32_t index2; for (index2 = 0; index2 < (1 << t->q); index2++) { uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; if (lookup2 != EMPTY) { uint32_t lookup2_shifted = lookup2 << t->p; uint32_t index3; for (index3 = 0; index3 < (1 << t->p); index3++) { uint32_t lookup3 = t->level3[index3 + lookup2_shifted]; uint32_t index4; for (index4 = 0; index4 < 32; index4++) if ((lookup3 >> index4) & 1) fn ((((((index1 << t->q) + index2) << t->p) + index3) << 5) + index4); } } } } } } #endif #ifndef NO_FINALIZE /* Finalize and shrink. */ static void CONCAT(TABLE,_finalize) (struct TABLE *t) { size_t i, j, k; uint32_t reorder3[t->level3_size]; uint32_t reorder2[t->level2_size]; uint32_t level1_offset, level2_offset, level3_offset; /* Uniquify level3 blocks. */ k = 0; for (j = 0; j < t->level3_size; j++) { for (i = 0; i < k; i++) if (memcmp (&t->level3[i << t->p], &t->level3[j << t->p], (1 << t->p) * sizeof (uint32_t)) == 0) break; /* Relocate block j to block i. */ reorder3[j] = i; if (i == k) { if (i != j) memcpy (&t->level3[i << t->p], &t->level3[j << t->p], (1 << t->p) * sizeof (uint32_t)); k++; } } t->level3_size = k; for (i = 0; i < (t->level2_size << t->q); i++) if (t->level2[i] != EMPTY) t->level2[i] = reorder3[t->level2[i]]; /* Uniquify level2 blocks. */ k = 0; for (j = 0; j < t->level2_size; j++) { for (i = 0; i < k; i++) if (memcmp (&t->level2[i << t->q], &t->level2[j << t->q], (1 << t->q) * sizeof (uint32_t)) == 0) break; /* Relocate block j to block i. */ reorder2[j] = i; if (i == k) { if (i != j) memcpy (&t->level2[i << t->q], &t->level2[j << t->q], (1 << t->q) * sizeof (uint32_t)); k++; } } t->level2_size = k; for (i = 0; i < t->level1_size; i++) if (t->level1[i] != EMPTY) t->level1[i] = reorder2[t->level1[i]]; /* Create and fill the resulting compressed representation. */ t->result_size = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t) + (t->level2_size << t->q) * sizeof (uint32_t) + (t->level3_size << t->p) * sizeof (uint32_t); t->result = (char *) xmalloc (t->result_size); level1_offset = 5 * sizeof (uint32_t); level2_offset = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t); level3_offset = 5 * sizeof (uint32_t) + t->level1_size * sizeof (uint32_t) + (t->level2_size << t->q) * sizeof (uint32_t); ((uint32_t *) t->result)[0] = t->q + t->p + 5; ((uint32_t *) t->result)[1] = t->level1_size; ((uint32_t *) t->result)[2] = t->p + 5; ((uint32_t *) t->result)[3] = (1 << t->q) - 1; ((uint32_t *) t->result)[4] = (1 << t->p) - 1; for (i = 0; i < t->level1_size; i++) ((uint32_t *) (t->result + level1_offset))[i] = (t->level1[i] == EMPTY ? 0 : (t->level1[i] << t->q) * sizeof (uint32_t) + level2_offset); for (i = 0; i < (t->level2_size << t->q); i++) ((uint32_t *) (t->result + level2_offset))[i] = (t->level2[i] == EMPTY ? 0 : (t->level2[i] << t->p) * sizeof (uint32_t) + level3_offset); for (i = 0; i < (t->level3_size << t->p); i++) ((uint32_t *) (t->result + level3_offset))[i] = t->level3[i]; if (t->level1_alloc > 0) free (t->level1); if (t->level2_alloc > 0) free (t->level2); if (t->level3_alloc > 0) free (t->level3); } #endif #undef EMPTY #undef TABLE #undef ITERATE #undef NO_FINALIZE ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/Makefile�������������������������������������������������������0000664�0000000�0000000�00000001217�14110572173�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for generating the table files from unicode.org data. ARCHIVE_DIR = /gfs/ibook/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions VERSION = 5.0.0 UCD_DIR = $(ARCHIVE_DIR)/$(VERSION)/ucd EXTRA_DIST = gen-ctype.c 3levelbit.h 3level.h all: force gcc -g -Wall gen-ctype.c -o gen-ctype ./gen-ctype $(UCD_DIR)/UnicodeData.txt \ $(UCD_DIR)/PropList.txt \ $(UCD_DIR)/DerivedCoreProperties.txt \ $(UCD_DIR)/Scripts.txt \ $(UCD_DIR)/Blocks.txt \ $(ARCHIVE_DIR)/3.0.1/PropList-3.0.1.txt \ $(VERSION) mv test-* ../../tests/unictype/ force: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_byname.c��������������������������������������������������0000664�0000000�0000000�00000004373�14110572173�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU 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 "unictype/bidi_byname.h" int uc_bidi_class_byname (const char *bidi_class_name) { size_t len; len = strlen (bidi_class_name); if (len <= MAX_WORD_LENGTH) { char buf[MAX_WORD_LENGTH + 1]; const struct named_bidi_class *found; /* Copy bidi_class_name into buf, converting '_' and '-' to ' '. */ { const char *p = bidi_class_name; char *q = buf; for (;; p++, q++) { char c = *p; if (c == '_' || c == '-') c = ' '; *q = c; if (c == '\0') break; } } /* Here q == buf + len. */ /* Do a hash table lookup, with case-insensitive comparison. */ found = uc_bidi_class_lookup (buf, len); if (found != NULL) return found->bidi_class; } /* Invalid bidi class name. */ return -1; } int uc_bidi_category_byname (const char *category_name) { return uc_bidi_class_byname (category_name); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_byname.gperf����������������������������������������������0000664�0000000�0000000�00000006216�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_bidi_class { int name; int bidi_class; }; %struct-type %ignore-case %language=ANSI-C %define hash-function-name bidi_class_hash %define lookup-function-name uc_bidi_class_lookup %readonly-tables %global-table %define word-array-name bidi_class_names %pic %define string-pool-name bidi_class_stringpool %% AL, UC_BIDI_AL AN, UC_BIDI_AN B, UC_BIDI_B BN, UC_BIDI_BN CS, UC_BIDI_CS EN, UC_BIDI_EN ES, UC_BIDI_ES ET, UC_BIDI_ET FSI, UC_BIDI_FSI L, UC_BIDI_L LRE, UC_BIDI_LRE LRI, UC_BIDI_LRI LRO, UC_BIDI_LRO NSM, UC_BIDI_NSM ON, UC_BIDI_ON PDF, UC_BIDI_PDF PDI, UC_BIDI_PDI R, UC_BIDI_R RLE, UC_BIDI_RLE RLI, UC_BIDI_RLI RLO, UC_BIDI_RLO S, UC_BIDI_S WS, UC_BIDI_WS Arabic Letter, UC_BIDI_AL ArabicLetter, UC_BIDI_AL Arabic Number, UC_BIDI_AN ArabicNumber, UC_BIDI_AN Paragraph Separator, UC_BIDI_B ParagraphSeparator, UC_BIDI_B Boundary Neutral, UC_BIDI_BN BoundaryNeutral, UC_BIDI_BN Common Separator, UC_BIDI_CS CommonSeparator, UC_BIDI_CS European Number, UC_BIDI_EN EuropeanNumber, UC_BIDI_EN European Separator, UC_BIDI_ES EuropeanSeparator, UC_BIDI_ES European Terminator, UC_BIDI_ET EuropeanTerminator, UC_BIDI_ET First Strong Isolate, UC_BIDI_FSI FirstStrongIsolate, UC_BIDI_FSI Left To Right, UC_BIDI_L LeftToRight, UC_BIDI_L Left To Right Embedding, UC_BIDI_LRE LeftToRightEmbedding, UC_BIDI_LRE Left To Right Isolate, UC_BIDI_LRI LeftToRightIsolate, UC_BIDI_LRI Left To Right Override, UC_BIDI_LRO LeftToRightOverride, UC_BIDI_LRO Nonspacing Mark, UC_BIDI_NSM NonspacingMark, UC_BIDI_NSM Other Neutral, UC_BIDI_ON OtherNeutral, UC_BIDI_ON Pop Directional Format, UC_BIDI_PDF PopDirectionalFormat, UC_BIDI_PDF Pop Directional Isolate, UC_BIDI_PDI PopDirectionalIsolate, UC_BIDI_PDI Right To Left, UC_BIDI_R RightToLeft, UC_BIDI_R Right To Left Embedding, UC_BIDI_RLE RightToLeftEmbedding, UC_BIDI_RLE Right To Left Isolate, UC_BIDI_RLI RightToLeftIsolate, UC_BIDI_RLI Right To Left Override, UC_BIDI_RLO RightToLeftOverride, UC_BIDI_RLO Segment Separator, UC_BIDI_S SegmentSeparator, UC_BIDI_S White Space, UC_BIDI_WS WhiteSpace, UC_BIDI_WS ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_longname.c������������������������������������������������0000664�0000000�0000000�00000003732�14110572173�0021645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_bidi_class_long_name[19][24] = { "Left To Right", "Left To Right Embedding", "Left To Right Override", "Right To Left", "Arabic Letter", "Right To Left Embedding", "Right To Left Override", "Pop Directional Format", "European Number", "European Separator", "European Terminator", "Arabic Number", "Common Separator", "Nonspacing Mark", "Boundary Neutral", "Paragraph Separator", "Segment Separator", "White Space", "Other Neutral" }; const char * uc_bidi_class_long_name (int bidi_class) { if (bidi_class >= 0 && bidi_class < sizeof (u_bidi_class_long_name) / sizeof (u_bidi_class_long_name[0])) return u_bidi_class_long_name[bidi_class]; return NULL; } ��������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_name.c����������������������������������������������������0000664�0000000�0000000�00000003346�14110572173�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_bidi_class_name[19][4] = { "L", "LRE", "LRO", "R", "AL", "RLE", "RLO", "PDF", "EN", "ES", "ET", "AN", "CS", "NSM", "BN", "B", "S", "WS", "ON" }; const char * uc_bidi_class_name (int bidi_class) { if (bidi_class >= 0 && bidi_class < sizeof (u_bidi_class_name) / sizeof (u_bidi_class_name[0])) return u_bidi_class_name[bidi_class]; return NULL; } const char * uc_bidi_category_name (int category) { return uc_bidi_class_name (category); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_of.c������������������������������������������������������0000664�0000000�0000000�00000003601�14110572173�0020444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_bidi_category table. */ #include "bidi_of.h" int uc_bidi_class (ucs4_t uc) { unsigned int index1 = uc >> bidi_category_header_0; if (index1 < bidi_category_header_1) { int lookup1 = u_bidi_category.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> bidi_category_header_2) & bidi_category_header_3; int lookup2 = u_bidi_category.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = ((uc & bidi_category_header_4) + lookup2) * 5; /* level3 contains 5-bit values, packed into 16-bit words. */ unsigned int lookup3 = (((unsigned int) u_bidi_category.level3[index3>>4] | ((unsigned int) u_bidi_category.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0x1f; return lookup3; } } } return UC_BIDI_L; } int uc_bidi_category (ucs4_t uc) { return uc_bidi_class (uc); } �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_of.h������������������������������������������������������0000664�0000000�0000000�00000204734�14110572173�0020463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Bidi categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ #define bidi_category_header_0 16 #define bidi_category_header_1 17 #define bidi_category_header_2 7 #define bidi_category_header_3 511 #define bidi_category_header_4 127 static const struct { int level1[17]; short level2[4 << 9]; unsigned short level3[151 * 40 + 1]; } u_bidi_category = { { 0, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1536, 1024, 1024 }, { 0, 128, -1, -1, -1, 256, 384, 512, -1, 640, -1, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, -1, -1, -1, -1, 3712, 3840, 3968, -1, -1, -1, -1, 4096, 4224, 4352, 4480, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, -1, 5760, -1, -1, -1, 5888, 6016, 6144, 6272, 6400, 6528, 6656, 6784, 6912, 7040, 7168, 6656, 6656, 6656, 7296, 6656, 6656, -1, -1, 6656, 6656, 6656, 6656, 7424, 7552, -1, 7680, 7808, 7936, 8064, 8192, 6656, 8320, 8448, 8576, -1, 8704, 8832, 8960, 9088, 9216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9472, -1, -1, 9600, 9728, 9856, 9984, 10112, 10240, 10368, 10496, 10624, 10752, -1, 10880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11008, 11136, 11136, 11136, 11264, 11392, 11520, 11648, 11776, 11904, -1, -1, 12032, 12160, -1, 12288, 12416, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12544, 12544, 12672, 12544, 12800, 12928, 13056, 12544, 12544, 12544, 12544, 12544, 13184, 12544, 12544, 12544, 13312, 13440, 13568, 13696, 13824, 13952, 14080, -1, 14208, 14336, -1, 14464, 14592, 14720, 14848, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14976, 15104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15232, 15360, -1, -1, -1, -1, -1, -1, -1, -1, 15488, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15616, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15744, 15872, 16000, -1, 16128, -1, -1, -1, -1, -1, -1, 16256, 16384, 16512, -1, -1, -1, -1, 16640, 16768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12544, 17024, 17152, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17280, 17408, -1, -1, 17536, 17664, 17792, -1, -1, -1, 6656, 6656, 6656, 6656, 6656, 6656, 6656, 17920, 18048, 18176, 18304, 18432, 18560, 18688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18816, 18944, 18944, 19072, 19200, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, 18944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18816 }, { 0x39ce, 0x9ce7, 0x0e73, 0x183e, 0x739f, 0x39ce, 0x9ce7, 0xce73, 0xf739, 0x83de, 0x4a51, 0x94a5, 0x5294, 0xc4ca, 0x6312, 0x2108, 0x1084, 0x0842, 0x2931, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x74a5, 0x39ce, 0x9ee7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x2a4c, 0x94a5, 0x5294, 0x2902, 0x949d, 0x214a, 0x8124, 0x1294, 0x2901, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x004a, 0x0000, 0x4800, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4800, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0xa400, 0x5294, 0x294a, 0x9025, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x0000, 0x2520, 0x0000, 0x0000, 0x0480, 0x0000, 0x2520, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0004, 0x0000, 0x0000, 0x8000, 0x5ad6, 0xad6b, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0048, 0x54a4, 0xb5a3, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x68da, 0xb5a3, 0xdad1, 0x6368, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0xad6b, 0x96b5, 0x4494, 0xc229, 0x9488, 0xb5ad, 0x5ad6, 0xad6b, 0x4235, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd690, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xad6b, 0xd6b5, 0x6b5a, 0xb5a9, 0x2108, 0x108d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xad6b, 0xd6b5, 0x6c96, 0xb5ad, 0x08d6, 0x4d69, 0xd6b6, 0x211a, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x11a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4235, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xad6b, 0xd6b5, 0x6b5a, 0x108d, 0x0842, 0x8421, 0x4210, 0x2108, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0xd68c, 0x6b5a, 0xb5ad, 0x8636, 0x5294, 0x318e, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0x4631, 0xad6b, 0xd68d, 0x6b5a, 0xb5ad, 0x5a36, 0xa36b, 0xd6b5, 0x18da, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0xa318, 0x36b5, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0642, 0x8421, 0x4210, 0x18c8, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0x5ad1, 0xad6b, 0xd6b5, 0x6b5a, 0xadad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x35ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd034, 0x0000, 0xb5a0, 0x5ad6, 0x0d6b, 0x0000, 0x001a, 0xb5a0, 0x5ad6, 0x006b, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x2800, 0x0005, 0x0000, 0x0500, 0x0000, 0x35a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0x35a0, 0x0000, 0x0d68, 0xd680, 0x001a, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ad, 0x1a00, 0x0000, 0x0000, 0x0000, 0x35a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0xb5a0, 0x1ad6, 0x0d68, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x6800, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x001a, 0x0000, 0x4000, 0x0003, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0000, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa529, 0x5294, 0x0049, 0x0000, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b40, 0x000d, 0x4000, 0x0d6b, 0xd6b4, 0x001a, 0x0000, 0x5a00, 0x0003, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5200, 0x294a, 0x04a5, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0034, 0x0000, 0xb400, 0x40d6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x5ad0, 0xad6b, 0x0035, 0x5000, 0x0000, 0x0000, 0xad68, 0xd6b5, 0x035a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x5ad0, 0xad6b, 0xd681, 0x0000, 0x0000, 0x0000, 0xad00, 0xd6b5, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad00, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a00, 0xa068, 0x2949, 0x0025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5a0, 0x5ad6, 0xad6b, 0xd6b5, 0x035a, 0xb5ad, 0x40d6, 0x006b, 0x0000, 0x6b5a, 0xb5ad, 0x5ad6, 0xa06b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x0000, 0x0000, 0x4000, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b5a, 0xb40d, 0x5ad6, 0xa06b, 0x0035, 0x035a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad00, 0x0001, 0x6b40, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x0000, 0x3400, 0x5a00, 0x0003, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b5a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ad0, 0xad68, 0xd6b5, 0x001a, 0x0000, 0x4000, 0xa003, 0xd6b5, 0x6b5a, 0xb5ad, 0x0006, 0x0000, 0x0500, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x0002, 0x0000, 0x4a52, 0xa529, 0x5294, 0xd6ca, 0x039a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a00, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35ad, 0x0000, 0x0d68, 0x0000, 0x0000, 0x3400, 0x0000, 0xa000, 0x06b5, 0x0000, 0x0012, 0x2520, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9480, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d68, 0x0680, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad03, 0xd6b5, 0x035a, 0x340d, 0x5a00, 0xad6b, 0xd6b5, 0x0000, 0x8000, 0x5ad6, 0xad6b, 0xd6b5, 0x6800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x035a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40d0, 0xad6b, 0xd035, 0x0000, 0x3400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd680, 0x6b5a, 0xb5ad, 0x0006, 0x0000, 0x0000, 0x0000, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x1ad6, 0xad00, 0xd681, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad03, 0x0001, 0x681a, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x6b5a, 0xb5ad, 0x4006, 0x006b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35ad, 0x5ad0, 0xad6b, 0xd6b5, 0x6b5a, 0xb40d, 0x5ad6, 0x0d6b, 0x0000, 0x001a, 0x0000, 0x00d0, 0xad00, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x1ad6, 0x0000, 0xd680, 0x6b5a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9024, 0x0252, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a4, 0xc631, 0x6318, 0x318c, 0xe746, 0x181c, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xf194, 0x7285, 0x6184, 0x294a, 0xa4a5, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa4c9, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x8ca5, 0x39ce, 0xc8e7, 0xd5a4, 0xe73a, 0x739c, 0x0008, 0x1080, 0x0842, 0x24a5, 0x04a5, 0x2108, 0x1084, 0x0842, 0x24a5, 0x04a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0294, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0252, 0xa529, 0x5204, 0x0002, 0x0000, 0x0000, 0x8120, 0x1294, 0x0000, 0x9480, 0x4a52, 0x2409, 0x4090, 0x0002, 0x0280, 0x0000, 0x0000, 0x0000, 0x0948, 0x0000, 0x4a52, 0x0129, 0x0000, 0x2948, 0x0025, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x094a, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x2652, 0xa525, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x8129, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x04a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x004a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0894, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x0421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2948, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x094a, 0x94a4, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x8009, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x5200, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x0002, 0x94a4, 0x4a52, 0xa529, 0x1294, 0x2948, 0x94a5, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa400, 0x5294, 0x004a, 0x6800, 0x01ad, 0x0000, 0x4000, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0129, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x2902, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x4a51, 0x0129, 0x5200, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0012, 0x0000, 0x0000, 0xd6b4, 0x001a, 0x0012, 0x8000, 0x0094, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x2935, 0x0001, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x04a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x2000, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5290, 0x004a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x35ad, 0x5ad9, 0xad6b, 0xd6b5, 0x949a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b40, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3400, 0x4000, 0x0003, 0x0680, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a00, 0x5203, 0x094a, 0x0000, 0x0000, 0x0000, 0x4a00, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa520, 0x0094, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ad0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad6b, 0xd6b5, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad68, 0xd6b5, 0x6b5a, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x4006, 0xad6b, 0xd001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xd6b5, 0x035a, 0x35a0, 0x5a00, 0x0003, 0x0000, 0x0000, 0x8000, 0x0006, 0x0000, 0xd000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb40d, 0x00d6, 0x0d68, 0x0000, 0x6b40, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x001a, 0x0000, 0x4000, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a00, 0x0d00, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b46, 0x8c63, 0xc631, 0x2318, 0x318d, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x9488, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x1084, 0x0842, 0x8421, 0x4210, 0x2124, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4a52, 0xa529, 0x5294, 0x4212, 0x2108, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x324c, 0x9922, 0x5294, 0x294a, 0x54a5, 0xa652, 0xa524, 0x5224, 0x4929, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x7108, 0x4a40, 0x94a5, 0x5294, 0xc4ca, 0x6312, 0x2108, 0x1084, 0x0842, 0x2931, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x494a, 0x9529, 0x5202, 0x294a, 0x04a5, 0x39ce, 0x9ce7, 0x4e73, 0x294a, 0x73a5, 0x0240, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x0001, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x210d, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x0421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad6b, 0x0035, 0x0000, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x90c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0xb5a3, 0x5a36, 0x631b, 0xd18c, 0x6b5a, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0xad18, 0x31b5, 0x68c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0x5a31, 0x631b, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x4318, 0x294a, 0x94a5, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x1ad6, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad00, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x0003, 0x0000, 0x0000, 0x4800, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x5ad6, 0xa003, 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad68, 0x06b5, 0x6b5a, 0xb5ad, 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0006, 0x0000, 0x0000, 0x0000, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad6b, 0xd6b5, 0x035a, 0x0000, 0x0000, 0x0000, 0xd6b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x01ad, 0x40d0, 0x006b, 0x0000, 0x0340, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x8000, 0x5ad6, 0xad6b, 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x0000, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xad6b, 0xd6b5, 0x0000, 0xb5ad, 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad00, 0xd6b5, 0x6b5a, 0xb400, 0x40d6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x5ad6, 0x0d6b, 0x0034, 0x6800, 0xb40d, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x1ad6, 0x0000, 0xd000, 0x681a, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x5ad6, 0xad6b, 0x0035, 0x681a, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0680, 0x001a, 0xb5ad, 0x1ad6, 0x0068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b5a, 0xb400, 0x1ad6, 0xad68, 0x06b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad03, 0xd6b5, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x006b, 0xd6b4, 0x6b5a, 0xb40d, 0x5a06, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x35ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x035a, 0x39ce, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad68, 0x0001, 0x0000, 0x0000, 0x9ce7, 0xce73, 0xd6b9, 0x6b5a, 0x35ad, 0x5a00, 0xad6b, 0x06b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd6b4, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0xb652, 0x24d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x4200, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x0003, 0xd680, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x0000, 0x0000, 0x1a00, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd680, 0x6b5a, 0xb5a0, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad03, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x0d6b, 0xd680, 0x6b5a, 0x81ad, 0x40d6, 0xad6b, 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0x0031, 0x6318, 0x318c, 0x18c6, 0xb5ad, 0x5ad6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0x5ad1, 0xad6b, 0x0035, 0x0000, 0x8c63, 0xc631, 0x6318, 0x0000, 0x18c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0802, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1080, 0x0040, 0x8020, 0x4210, 0x2108, 0x1084, 0x0840, 0x8021, 0x0200, 0x0000, 0x1000, 0x0000, 0x8020, 0x0200, 0x2108, 0x1080, 0x0040, 0x8020, 0x0200, 0x2008, 0x1080, 0x0040, 0x8420, 0x4010, 0x2108, 0x1084, 0x0840, 0x8021, 0x4210, 0x0100, 0x1084, 0x0842, 0x8421, 0x4200, 0x2108, 0x1084, 0x0842, 0x8421, 0x0210, 0x0000, 0x1080, 0x0802, 0x8421, 0x4200, 0x2108, 0x1084, 0x0842, 0x8421, 0x0210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x04a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x2108, 0x1084, 0x0842, 0x2921, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0948, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x0001, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0129, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0094, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x0002, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0094, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x0025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x04a5, 0x4a52, 0xa529, 0x0094, 0x0000, 0x0000, 0x0012, 0xa529, 0x5294, 0x294a, 0x04a5, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x04a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7380, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x0000 } }; ������������������������������������gnulib-20210822~d383792/lib/unictype/bidi_test.c����������������������������������������������������0000664�0000000�0000000�00000002710�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" bool uc_is_bidi_class (ucs4_t uc, int bidi_class) { return (uc_bidi_class (uc) == bidi_class); } bool uc_is_bidi_category (ucs4_t uc, int category) { return uc_is_bidi_class (uc, category); } ��������������������������������������������������������gnulib-20210822~d383792/lib/unictype/bitmap.h�������������������������������������������������������0000664�0000000�0000000�00000003302�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Three-level bitmap lookup. Copyright (C) 2000-2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2000-2002. 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/>. */ static inline int bitmap_lookup (const void *table, ucs4_t uc); /* These values are currently hardcoded into gen-uni-tables.c, function output_predicate(). */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static inline int bitmap_lookup (const void *table, ucs4_t uc) { unsigned int index1 = uc >> header_0; if (index1 < ((const int *) table)[0]) { int lookup1 = ((const int *) table)[1 + index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> header_2) & header_3; int lookup2 = ((const short *) table)[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc >> 5) & header_4; unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3]; return (lookup3 >> (uc & 0x1f)) & 1; } } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/block_test.c���������������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Blocks of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" bool uc_is_block (ucs4_t uc, const uc_block_t *block) { if (block != NULL) return ((ucs4_t) (uc - block->start) <= block->end - block->start); else return false; } �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/blocks.c�������������������������������������������������������0000664�0000000�0000000�00000004363�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Blocks of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "blocks.h" const uc_block_t * uc_block (ucs4_t uc) { unsigned int first_index; unsigned int last_index; if (uc < blocks_level1_threshold) { unsigned int index1 = uc >> blocks_level1_shift; first_index = blocks_level1[2 * index1]; last_index = blocks_level1[2 * index1 + 1]; } else { first_index = blocks_upper_first_index; last_index = blocks_upper_last_index; } /* We know that the relevant blocks are blocks[i] with first_index <= i < last_index. Now perform a binary search. */ while (first_index < last_index) { unsigned int mid_index = (first_index + last_index) / 2; if (blocks[mid_index].end < uc) first_index = mid_index + 1; else if (uc < blocks[mid_index].start) last_index = mid_index; else return &blocks[mid_index]; } return NULL; } void uc_all_blocks (const uc_block_t **blocksp, size_t *countp) { *blocksp = blocks; *countp = sizeof (blocks) / sizeof (blocks[0]); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/blocks.h�������������������������������������������������������0000664�0000000�0000000�00000050425�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode blocks. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ static const uc_block_t blocks[] = { { 0x0000, 0x007F, "Basic Latin" }, { 0x0080, 0x00FF, "Latin-1 Supplement" }, { 0x0100, 0x017F, "Latin Extended-A" }, { 0x0180, 0x024F, "Latin Extended-B" }, { 0x0250, 0x02AF, "IPA Extensions" }, { 0x02B0, 0x02FF, "Spacing Modifier Letters" }, { 0x0300, 0x036F, "Combining Diacritical Marks" }, { 0x0370, 0x03FF, "Greek and Coptic" }, { 0x0400, 0x04FF, "Cyrillic" }, { 0x0500, 0x052F, "Cyrillic Supplement" }, { 0x0530, 0x058F, "Armenian" }, { 0x0590, 0x05FF, "Hebrew" }, { 0x0600, 0x06FF, "Arabic" }, { 0x0700, 0x074F, "Syriac" }, { 0x0750, 0x077F, "Arabic Supplement" }, { 0x0780, 0x07BF, "Thaana" }, { 0x07C0, 0x07FF, "NKo" }, { 0x0800, 0x083F, "Samaritan" }, { 0x0840, 0x085F, "Mandaic" }, { 0x08A0, 0x08FF, "Arabic Extended-A" }, { 0x0900, 0x097F, "Devanagari" }, { 0x0980, 0x09FF, "Bengali" }, { 0x0A00, 0x0A7F, "Gurmukhi" }, { 0x0A80, 0x0AFF, "Gujarati" }, { 0x0B00, 0x0B7F, "Oriya" }, { 0x0B80, 0x0BFF, "Tamil" }, { 0x0C00, 0x0C7F, "Telugu" }, { 0x0C80, 0x0CFF, "Kannada" }, { 0x0D00, 0x0D7F, "Malayalam" }, { 0x0D80, 0x0DFF, "Sinhala" }, { 0x0E00, 0x0E7F, "Thai" }, { 0x0E80, 0x0EFF, "Lao" }, { 0x0F00, 0x0FFF, "Tibetan" }, { 0x1000, 0x109F, "Myanmar" }, { 0x10A0, 0x10FF, "Georgian" }, { 0x1100, 0x11FF, "Hangul Jamo" }, { 0x1200, 0x137F, "Ethiopic" }, { 0x1380, 0x139F, "Ethiopic Supplement" }, { 0x13A0, 0x13FF, "Cherokee" }, { 0x1400, 0x167F, "Unified Canadian Aboriginal Syllabics" }, { 0x1680, 0x169F, "Ogham" }, { 0x16A0, 0x16FF, "Runic" }, { 0x1700, 0x171F, "Tagalog" }, { 0x1720, 0x173F, "Hanunoo" }, { 0x1740, 0x175F, "Buhid" }, { 0x1760, 0x177F, "Tagbanwa" }, { 0x1780, 0x17FF, "Khmer" }, { 0x1800, 0x18AF, "Mongolian" }, { 0x18B0, 0x18FF, "Unified Canadian Aboriginal Syllabics Extended" }, { 0x1900, 0x194F, "Limbu" }, { 0x1950, 0x197F, "Tai Le" }, { 0x1980, 0x19DF, "New Tai Lue" }, { 0x19E0, 0x19FF, "Khmer Symbols" }, { 0x1A00, 0x1A1F, "Buginese" }, { 0x1A20, 0x1AAF, "Tai Tham" }, { 0x1AB0, 0x1AFF, "Combining Diacritical Marks Extended" }, { 0x1B00, 0x1B7F, "Balinese" }, { 0x1B80, 0x1BBF, "Sundanese" }, { 0x1BC0, 0x1BFF, "Batak" }, { 0x1C00, 0x1C4F, "Lepcha" }, { 0x1C50, 0x1C7F, "Ol Chiki" }, { 0x1C80, 0x1C8F, "Cyrillic Extended-C" }, { 0x1CC0, 0x1CCF, "Sundanese Supplement" }, { 0x1CD0, 0x1CFF, "Vedic Extensions" }, { 0x1D00, 0x1D7F, "Phonetic Extensions" }, { 0x1D80, 0x1DBF, "Phonetic Extensions Supplement" }, { 0x1DC0, 0x1DFF, "Combining Diacritical Marks Supplement" }, { 0x1E00, 0x1EFF, "Latin Extended Additional" }, { 0x1F00, 0x1FFF, "Greek Extended" }, { 0x2000, 0x206F, "General Punctuation" }, { 0x2070, 0x209F, "Superscripts and Subscripts" }, { 0x20A0, 0x20CF, "Currency Symbols" }, { 0x20D0, 0x20FF, "Combining Diacritical Marks for Symbols" }, { 0x2100, 0x214F, "Letterlike Symbols" }, { 0x2150, 0x218F, "Number Forms" }, { 0x2190, 0x21FF, "Arrows" }, { 0x2200, 0x22FF, "Mathematical Operators" }, { 0x2300, 0x23FF, "Miscellaneous Technical" }, { 0x2400, 0x243F, "Control Pictures" }, { 0x2440, 0x245F, "Optical Character Recognition" }, { 0x2460, 0x24FF, "Enclosed Alphanumerics" }, { 0x2500, 0x257F, "Box Drawing" }, { 0x2580, 0x259F, "Block Elements" }, { 0x25A0, 0x25FF, "Geometric Shapes" }, { 0x2600, 0x26FF, "Miscellaneous Symbols" }, { 0x2700, 0x27BF, "Dingbats" }, { 0x27C0, 0x27EF, "Miscellaneous Mathematical Symbols-A" }, { 0x27F0, 0x27FF, "Supplemental Arrows-A" }, { 0x2800, 0x28FF, "Braille Patterns" }, { 0x2900, 0x297F, "Supplemental Arrows-B" }, { 0x2980, 0x29FF, "Miscellaneous Mathematical Symbols-B" }, { 0x2A00, 0x2AFF, "Supplemental Mathematical Operators" }, { 0x2B00, 0x2BFF, "Miscellaneous Symbols and Arrows" }, { 0x2C00, 0x2C5F, "Glagolitic" }, { 0x2C60, 0x2C7F, "Latin Extended-C" }, { 0x2C80, 0x2CFF, "Coptic" }, { 0x2D00, 0x2D2F, "Georgian Supplement" }, { 0x2D30, 0x2D7F, "Tifinagh" }, { 0x2D80, 0x2DDF, "Ethiopic Extended" }, { 0x2DE0, 0x2DFF, "Cyrillic Extended-A" }, { 0x2E00, 0x2E7F, "Supplemental Punctuation" }, { 0x2E80, 0x2EFF, "CJK Radicals Supplement" }, { 0x2F00, 0x2FDF, "Kangxi Radicals" }, { 0x2FF0, 0x2FFF, "Ideographic Description Characters" }, { 0x3000, 0x303F, "CJK Symbols and Punctuation" }, { 0x3040, 0x309F, "Hiragana" }, { 0x30A0, 0x30FF, "Katakana" }, { 0x3100, 0x312F, "Bopomofo" }, { 0x3130, 0x318F, "Hangul Compatibility Jamo" }, { 0x3190, 0x319F, "Kanbun" }, { 0x31A0, 0x31BF, "Bopomofo Extended" }, { 0x31C0, 0x31EF, "CJK Strokes" }, { 0x31F0, 0x31FF, "Katakana Phonetic Extensions" }, { 0x3200, 0x32FF, "Enclosed CJK Letters and Months" }, { 0x3300, 0x33FF, "CJK Compatibility" }, { 0x3400, 0x4DBF, "CJK Unified Ideographs Extension A" }, { 0x4DC0, 0x4DFF, "Yijing Hexagram Symbols" }, { 0x4E00, 0x9FFF, "CJK Unified Ideographs" }, { 0xA000, 0xA48F, "Yi Syllables" }, { 0xA490, 0xA4CF, "Yi Radicals" }, { 0xA4D0, 0xA4FF, "Lisu" }, { 0xA500, 0xA63F, "Vai" }, { 0xA640, 0xA69F, "Cyrillic Extended-B" }, { 0xA6A0, 0xA6FF, "Bamum" }, { 0xA700, 0xA71F, "Modifier Tone Letters" }, { 0xA720, 0xA7FF, "Latin Extended-D" }, { 0xA800, 0xA82F, "Syloti Nagri" }, { 0xA830, 0xA83F, "Common Indic Number Forms" }, { 0xA840, 0xA87F, "Phags-pa" }, { 0xA880, 0xA8DF, "Saurashtra" }, { 0xA8E0, 0xA8FF, "Devanagari Extended" }, { 0xA900, 0xA92F, "Kayah Li" }, { 0xA930, 0xA95F, "Rejang" }, { 0xA960, 0xA97F, "Hangul Jamo Extended-A" }, { 0xA980, 0xA9DF, "Javanese" }, { 0xA9E0, 0xA9FF, "Myanmar Extended-B" }, { 0xAA00, 0xAA5F, "Cham" }, { 0xAA60, 0xAA7F, "Myanmar Extended-A" }, { 0xAA80, 0xAADF, "Tai Viet" }, { 0xAAE0, 0xAAFF, "Meetei Mayek Extensions" }, { 0xAB00, 0xAB2F, "Ethiopic Extended-A" }, { 0xAB30, 0xAB6F, "Latin Extended-E" }, { 0xAB70, 0xABBF, "Cherokee Supplement" }, { 0xABC0, 0xABFF, "Meetei Mayek" }, { 0xAC00, 0xD7AF, "Hangul Syllables" }, { 0xD7B0, 0xD7FF, "Hangul Jamo Extended-B" }, { 0xD800, 0xDB7F, "High Surrogates" }, { 0xDB80, 0xDBFF, "High Private Use Surrogates" }, { 0xDC00, 0xDFFF, "Low Surrogates" }, { 0xE000, 0xF8FF, "Private Use Area" }, { 0xF900, 0xFAFF, "CJK Compatibility Ideographs" }, { 0xFB00, 0xFB4F, "Alphabetic Presentation Forms" }, { 0xFB50, 0xFDFF, "Arabic Presentation Forms-A" }, { 0xFE00, 0xFE0F, "Variation Selectors" }, { 0xFE10, 0xFE1F, "Vertical Forms" }, { 0xFE20, 0xFE2F, "Combining Half Marks" }, { 0xFE30, 0xFE4F, "CJK Compatibility Forms" }, { 0xFE50, 0xFE6F, "Small Form Variants" }, { 0xFE70, 0xFEFF, "Arabic Presentation Forms-B" }, { 0xFF00, 0xFFEF, "Halfwidth and Fullwidth Forms" }, { 0xFFF0, 0xFFFF, "Specials" }, { 0x10000, 0x1007F, "Linear B Syllabary" }, { 0x10080, 0x100FF, "Linear B Ideograms" }, { 0x10100, 0x1013F, "Aegean Numbers" }, { 0x10140, 0x1018F, "Ancient Greek Numbers" }, { 0x10190, 0x101CF, "Ancient Symbols" }, { 0x101D0, 0x101FF, "Phaistos Disc" }, { 0x10280, 0x1029F, "Lycian" }, { 0x102A0, 0x102DF, "Carian" }, { 0x102E0, 0x102FF, "Coptic Epact Numbers" }, { 0x10300, 0x1032F, "Old Italic" }, { 0x10330, 0x1034F, "Gothic" }, { 0x10350, 0x1037F, "Old Permic" }, { 0x10380, 0x1039F, "Ugaritic" }, { 0x103A0, 0x103DF, "Old Persian" }, { 0x10400, 0x1044F, "Deseret" }, { 0x10450, 0x1047F, "Shavian" }, { 0x10480, 0x104AF, "Osmanya" }, { 0x104B0, 0x104FF, "Osage" }, { 0x10500, 0x1052F, "Elbasan" }, { 0x10530, 0x1056F, "Caucasian Albanian" }, { 0x10600, 0x1077F, "Linear A" }, { 0x10800, 0x1083F, "Cypriot Syllabary" }, { 0x10840, 0x1085F, "Imperial Aramaic" }, { 0x10860, 0x1087F, "Palmyrene" }, { 0x10880, 0x108AF, "Nabataean" }, { 0x108E0, 0x108FF, "Hatran" }, { 0x10900, 0x1091F, "Phoenician" }, { 0x10920, 0x1093F, "Lydian" }, { 0x10980, 0x1099F, "Meroitic Hieroglyphs" }, { 0x109A0, 0x109FF, "Meroitic Cursive" }, { 0x10A00, 0x10A5F, "Kharoshthi" }, { 0x10A60, 0x10A7F, "Old South Arabian" }, { 0x10A80, 0x10A9F, "Old North Arabian" }, { 0x10AC0, 0x10AFF, "Manichaean" }, { 0x10B00, 0x10B3F, "Avestan" }, { 0x10B40, 0x10B5F, "Inscriptional Parthian" }, { 0x10B60, 0x10B7F, "Inscriptional Pahlavi" }, { 0x10B80, 0x10BAF, "Psalter Pahlavi" }, { 0x10C00, 0x10C4F, "Old Turkic" }, { 0x10C80, 0x10CFF, "Old Hungarian" }, { 0x10E60, 0x10E7F, "Rumi Numeral Symbols" }, { 0x11000, 0x1107F, "Brahmi" }, { 0x11080, 0x110CF, "Kaithi" }, { 0x110D0, 0x110FF, "Sora Sompeng" }, { 0x11100, 0x1114F, "Chakma" }, { 0x11150, 0x1117F, "Mahajani" }, { 0x11180, 0x111DF, "Sharada" }, { 0x111E0, 0x111FF, "Sinhala Archaic Numbers" }, { 0x11200, 0x1124F, "Khojki" }, { 0x11280, 0x112AF, "Multani" }, { 0x112B0, 0x112FF, "Khudawadi" }, { 0x11300, 0x1137F, "Grantha" }, { 0x11400, 0x1147F, "Newa" }, { 0x11480, 0x114DF, "Tirhuta" }, { 0x11580, 0x115FF, "Siddham" }, { 0x11600, 0x1165F, "Modi" }, { 0x11660, 0x1167F, "Mongolian Supplement" }, { 0x11680, 0x116CF, "Takri" }, { 0x11700, 0x1173F, "Ahom" }, { 0x118A0, 0x118FF, "Warang Citi" }, { 0x11AC0, 0x11AFF, "Pau Cin Hau" }, { 0x11C00, 0x11C6F, "Bhaiksuki" }, { 0x11C70, 0x11CBF, "Marchen" }, { 0x12000, 0x123FF, "Cuneiform" }, { 0x12400, 0x1247F, "Cuneiform Numbers and Punctuation" }, { 0x12480, 0x1254F, "Early Dynastic Cuneiform" }, { 0x13000, 0x1342F, "Egyptian Hieroglyphs" }, { 0x14400, 0x1467F, "Anatolian Hieroglyphs" }, { 0x16800, 0x16A3F, "Bamum Supplement" }, { 0x16A40, 0x16A6F, "Mro" }, { 0x16AD0, 0x16AFF, "Bassa Vah" }, { 0x16B00, 0x16B8F, "Pahawh Hmong" }, { 0x16F00, 0x16F9F, "Miao" }, { 0x16FE0, 0x16FFF, "Ideographic Symbols and Punctuation" }, { 0x17000, 0x187FF, "Tangut" }, { 0x18800, 0x18AFF, "Tangut Components" }, { 0x1B000, 0x1B0FF, "Kana Supplement" }, { 0x1BC00, 0x1BC9F, "Duployan" }, { 0x1BCA0, 0x1BCAF, "Shorthand Format Controls" }, { 0x1D000, 0x1D0FF, "Byzantine Musical Symbols" }, { 0x1D100, 0x1D1FF, "Musical Symbols" }, { 0x1D200, 0x1D24F, "Ancient Greek Musical Notation" }, { 0x1D300, 0x1D35F, "Tai Xuan Jing Symbols" }, { 0x1D360, 0x1D37F, "Counting Rod Numerals" }, { 0x1D400, 0x1D7FF, "Mathematical Alphanumeric Symbols" }, { 0x1D800, 0x1DAAF, "Sutton SignWriting" }, { 0x1E000, 0x1E02F, "Glagolitic Supplement" }, { 0x1E800, 0x1E8DF, "Mende Kikakui" }, { 0x1E900, 0x1E95F, "Adlam" }, { 0x1EE00, 0x1EEFF, "Arabic Mathematical Alphabetic Symbols" }, { 0x1F000, 0x1F02F, "Mahjong Tiles" }, { 0x1F030, 0x1F09F, "Domino Tiles" }, { 0x1F0A0, 0x1F0FF, "Playing Cards" }, { 0x1F100, 0x1F1FF, "Enclosed Alphanumeric Supplement" }, { 0x1F200, 0x1F2FF, "Enclosed Ideographic Supplement" }, { 0x1F300, 0x1F5FF, "Miscellaneous Symbols and Pictographs" }, { 0x1F600, 0x1F64F, "Emoticons" }, { 0x1F650, 0x1F67F, "Ornamental Dingbats" }, { 0x1F680, 0x1F6FF, "Transport and Map Symbols" }, { 0x1F700, 0x1F77F, "Alchemical Symbols" }, { 0x1F780, 0x1F7FF, "Geometric Shapes Extended" }, { 0x1F800, 0x1F8FF, "Supplemental Arrows-C" }, { 0x1F900, 0x1F9FF, "Supplemental Symbols and Pictographs" }, { 0x20000, 0x2A6DF, "CJK Unified Ideographs Extension B" }, { 0x2A700, 0x2B73F, "CJK Unified Ideographs Extension C" }, { 0x2B740, 0x2B81F, "CJK Unified Ideographs Extension D" }, { 0x2B820, 0x2CEAF, "CJK Unified Ideographs Extension E" }, { 0x2F800, 0x2FA1F, "CJK Compatibility Ideographs Supplement" }, { 0xE0000, 0xE007F, "Tags" }, { 0xE0100, 0xE01EF, "Variation Selectors Supplement" }, { 0xF0000, 0xFFFFF, "Supplementary Private Use Area-A" }, { 0x100000, 0x10FFFF, "Supplementary Private Use Area-B" } }; #define blocks_level1_shift 8 #define blocks_level1_threshold 0x28000 static const uint16_t blocks_level1[640 * 2] = { 0, 2, 2, 4, 3, 6, 6, 8, 8, 9, 9, 12, 12, 13, 13, 17, 17, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 33, 33, 35, 35, 36, 36, 37, 36, 39, 39, 40, 39, 40, 39, 42, 42, 47, 47, 49, 49, 53, 53, 56, 56, 59, 59, 64, 64, 67, 67, 68, 68, 69, 69, 73, 73, 76, 76, 77, 77, 78, 78, 81, 81, 84, 84, 85, 85, 88, 88, 89, 89, 91, 91, 92, 92, 93, 93, 96, 96, 100, 100, 102, 102, 104, 104, 107, 107, 113, 113, 114, 114, 115, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 116, 115, 117, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 117, 118, 118, 119, 118, 119, 118, 119, 118, 119, 118, 121, 121, 122, 121, 124, 124, 126, 126, 131, 131, 136, 136, 140, 140, 144, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 145, 144, 146, 146, 147, 146, 147, 146, 147, 146, 148, 148, 149, 148, 149, 148, 149, 148, 149, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 149, 150, 150, 151, 150, 151, 151, 153, 152, 153, 152, 153, 153, 159, 159, 161, 161, 163, 163, 167, 167, 170, 170, 175, 175, 179, 179, 181, 181, 182, 181, 182, 182, 187, 187, 191, 191, 195, 195, 199, 199, 201, 201, 201, 201, 202, 202, 202, 202, 205, 205, 209, 209, 212, 212, 213, 213, 215, 215, 216, 216, 219, 219, 220, 220, 221, 221, 221, 221, 222, 222, 222, 222, 224, 224, 224, 224, 224, 224, 224, 224, 225, 224, 225, 224, 225, 224, 225, 225, 227, 226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, 227, 228, 227, 228, 227, 228, 227, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 229, 228, 229, 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, 229, 230, 229, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 235, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 235, 236, 236, 237, 236, 237, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 242, 242, 243, 243, 245, 245, 246, 245, 246, 245, 246, 245, 246, 246, 247, 246, 247, 246, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 254, 254, 255, 255, 256, 256, 257, 256, 257, 256, 257, 257, 260, 260, 262, 262, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265, 264, 265 }; #define blocks_upper_first_index 264 #define blocks_upper_last_index 273 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_C.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_C table. */ #include "categ_C.h" const uc_general_category_t UC_CATEGORY_C = { UC_CATEGORY_MASK_C, 0, { &u_categ_C } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_C.h������������������������������������������������������0000664�0000000�0000000�00000135777�14110572173�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[5 << 7]; unsigned int level3[78 << 4]; } u_categ_C = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384 }, { 18 + 640 * sizeof (short) / sizeof (int) + 0, 18 + 640 * sizeof (short) / sizeof (int) + 16, 18 + 640 * sizeof (short) / sizeof (int) + 32, 18 + 640 * sizeof (short) / sizeof (int) + 48, 18 + 640 * sizeof (short) / sizeof (int) + 64, 18 + 640 * sizeof (short) / sizeof (int) + 80, 18 + 640 * sizeof (short) / sizeof (int) + 96, 18 + 640 * sizeof (short) / sizeof (int) + 112, 18 + 640 * sizeof (short) / sizeof (int) + 128, 18 + 640 * sizeof (short) / sizeof (int) + 144, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 176, 18 + 640 * sizeof (short) / sizeof (int) + 192, 18 + 640 * sizeof (short) / sizeof (int) + 208, 18 + 640 * sizeof (short) / sizeof (int) + 224, 18 + 640 * sizeof (short) / sizeof (int) + 240, 18 + 640 * sizeof (short) / sizeof (int) + 256, 18 + 640 * sizeof (short) / sizeof (int) + 272, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 288, 18 + 640 * sizeof (short) / sizeof (int) + 304, 18 + 640 * sizeof (short) / sizeof (int) + 320, 18 + 640 * sizeof (short) / sizeof (int) + 336, 18 + 640 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 384, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 400, 18 + 640 * sizeof (short) / sizeof (int) + 416, 18 + 640 * sizeof (short) / sizeof (int) + 432, 18 + 640 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 464, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 512, 18 + 640 * sizeof (short) / sizeof (int) + 528, 18 + 640 * sizeof (short) / sizeof (int) + 544, 18 + 640 * sizeof (short) / sizeof (int) + 560, 18 + 640 * sizeof (short) / sizeof (int) + 576, 18 + 640 * sizeof (short) / sizeof (int) + 592, 18 + 640 * sizeof (short) / sizeof (int) + 608, 18 + 640 * sizeof (short) / sizeof (int) + 624, 18 + 640 * sizeof (short) / sizeof (int) + 640, 18 + 640 * sizeof (short) / sizeof (int) + 656, 18 + 640 * sizeof (short) / sizeof (int) + 672, 18 + 640 * sizeof (short) / sizeof (int) + 688, 18 + 640 * sizeof (short) / sizeof (int) + 704, 18 + 640 * sizeof (short) / sizeof (int) + 720, 18 + 640 * sizeof (short) / sizeof (int) + 736, 18 + 640 * sizeof (short) / sizeof (int) + 752, 18 + 640 * sizeof (short) / sizeof (int) + 768, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, 18 + 640 * sizeof (short) / sizeof (int) + 800, 18 + 640 * sizeof (short) / sizeof (int) + 816, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 832, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, 18 + 640 * sizeof (short) / sizeof (int) + 848, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 896, -1, 18 + 640 * sizeof (short) / sizeof (int) + 912, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 928, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 944, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 960, 18 + 640 * sizeof (short) / sizeof (int) + 976, 18 + 640 * sizeof (short) / sizeof (int) + 992, 18 + 640 * sizeof (short) / sizeof (int) + 1008, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1024, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 1040, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 1056, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 1072, 18 + 640 * sizeof (short) / sizeof (int) + 1088, 18 + 640 * sizeof (short) / sizeof (int) + 1104, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1120, 18 + 640 * sizeof (short) / sizeof (int) + 1136, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1152, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1168, 18 + 640 * sizeof (short) / sizeof (int) + 1184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1200, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1216, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 1232, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 480 }, { 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFFFU, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x0000280FU, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x01800000U, 0x00000001U, 0x00011900U, 0x00000000U, 0x0000FF00U, 0xFFE0F800U, 0x3000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00001800U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0x8000C000U, 0xB0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0200000U, 0x000FFFFFU, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00066010U, 0x0C3A0200U, 0x4F7F8660U, 0xF0000030U, 0x00067811U, 0x2C920200U, 0xA1FDC678U, 0xFFC0003FU, 0x00044011U, 0x0C120200U, 0xFFFEC440U, 0xFDFC0030U, 0x00066011U, 0x0C120200U, 0x4F3FC660U, 0xFF000030U, 0x29C23813U, 0x3C0038E7U, 0xFF7EC238U, 0xF800003FU, 0x00022010U, 0x1C000200U, 0xF89FC220U, 0x00FF0030U, 0x00022010U, 0x0C100200U, 0xBF9FC220U, 0xFFF90030U, 0x00022011U, 0x18000000U, 0x000F0220U, 0x00000030U, 0x03800013U, 0xD0040000U, 0x00A07B80U, 0xFFE3003FU, 0x00000001U, 0x78000000U, 0xF0000000U, 0xFFFFFFFFU, 0x010FDA69U, 0xC4001351U, 0x0C00C0A0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000100U, 0x0001E000U, 0x01000000U, 0x20000000U, 0xF8002000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC280C200U, 0x00000000U, 0x0000C200U, 0x80C20000U, 0x008000C2U, 0x00000000U, 0x00C20000U, 0x00000000U, 0x18000000U, 0xE0000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0xFE000000U, 0xFFE02000U, 0xFF800000U, 0xFFF00000U, 0xFFF22000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFC00FC00U, 0xFC00C000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0xFFC00000U, 0x80000000U, 0xF000F000U, 0x0000000EU, 0xFFE0C000U, 0x00000000U, 0x0000F000U, 0x3800FC00U, 0x00000000U, 0x30000000U, 0x00000000U, 0x80000000U, 0x60000000U, 0xFC00FC00U, 0x8000C000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000F000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FF00000U, 0x00000000U, 0x07000000U, 0x00001C00U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x0000FF00U, 0xFC800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x5500C0C0U, 0xC0000000U, 0x00000000U, 0x00200000U, 0x10300020U, 0x80230000U, 0x0000F800U, 0x00007C00U, 0x00000000U, 0x000CFFFFU, 0xE0008000U, 0x80000000U, 0x0000FFFFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFF800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00C00000U, 0x1C000000U, 0xFFFC0200U, 0xFFFF0FFFU, 0x00000000U, 0x00008000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01F00000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x7FFE7F00U, 0xFF800000U, 0x80808080U, 0x80808080U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0xFFFFFFFFU, 0x04000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xF000FFFFU, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x01800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00008000U, 0xF8000000U, 0x00000000U, 0x0000FFF0U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF008000U, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFC00F000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0xFC003FC0U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x7FF00000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x3C004000U, 0x80000000U, 0x00000000U, 0xFF800000U, 0x0C00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFF8U, 0xFF800000U, 0xFF818181U, 0x00008080U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFF0U, 0x00000780U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0x1F07FF80U, 0xA0800000U, 0x00000024U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00030000U, 0x00000000U, 0xFFFFFF00U, 0xC000FFFFU, 0xFC000000U, 0x00000000U, 0x00080000U, 0x0020F080U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0xE3030303U, 0xCFFF8080U, 0x00001000U, 0x48000080U, 0xC000C000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000078U, 0x00700000U, 0x00000000U, 0x00000000U, 0xF0008000U, 0xFFFFFFFEU, 0x0000FFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0000000U, 0x00000000U, 0xFFFE0000U, 0xF0000000U, 0x00000000U, 0x0000FFF0U, 0x0000F800U, 0xF8000000U, 0x40000000U, 0x00000000U, 0xFFC000F0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x0000FC00U, 0x00F00000U, 0xF0000000U, 0x00000000U, 0x0000FF00U, 0x00000000U, 0xFFFF7FF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFC00000U, 0xFFFFFF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000002C0U, 0x6E400000U, 0x00400000U, 0x00000000U, 0x80000000U, 0xFFFF007FU, 0xFFFFFFFFU, 0x07C80000U, 0x70000000U, 0x7C000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0F000000U, 0x00030000U, 0x00000000U, 0x01100F90U, 0x78F00000U, 0xFE00FF00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0xFF800780U, 0x00000000U, 0x01C00000U, 0x00C00000U, 0x00F80000U, 0xE1FC0000U, 0xFFFF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x03F80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0003C000U, 0x7FFF0000U, 0x00000000U, 0x20000000U, 0x0000FFFCU, 0xFC00FE00U, 0x00000000U, 0x00200000U, 0x0000FFF0U, 0xFF800000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0xFFE00001U, 0x00040000U, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x40004280U, 0x0000FC00U, 0x00000000U, 0xFC00F800U, 0x00066010U, 0x0C120200U, 0x1F7EC660U, 0xFFE0E030U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xD4000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00C00000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FFE0U, 0xFFFFE000U, 0x00000000U, 0xFF000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0x1C000000U, 0x0000F000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x7FF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000200U, 0x00800000U, 0x0000FFC0U, 0x0000E000U, 0x00030000U, 0xFF800100U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE08000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF8000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0x80000000U, 0xFFFF3C00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFC0C000U, 0x00000000U, 0x00000000U, 0x0400FFC0U, 0x1F000004U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000FFE0U, 0x80000000U, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFE000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xE000F800U, 0x0C00FE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000180U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0x00000000U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x20000000U, 0x1400219BU, 0x00000010U, 0x00000000U, 0x20201840U, 0x84000000U, 0x000203A0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFF000U, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x06000080U, 0xFFFFF824U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800060U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x3C00F800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000010U, 0xF5080169U, 0x5569157BU, 0xA1080869U, 0xF0000400U, 0xF0000411U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00018000U, 0x00010001U, 0xFFC00000U, 0x0000E000U, 0x00008000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0xFFFFE000U, 0xFFFFFFFFU, 0x0000003FU, 0x0000FFF8U, 0xF0000000U, 0xFFFCFE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFF80E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0xFFFFFFFFU, 0x0000F000U, 0x00000000U, 0xFC00FF00U, 0x00000000U, 0x0000FF00U, 0xFFFFC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8000FFFFU, 0x8006FF00U, 0x8000F000U, 0xFFFFFFFFU, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U } }; �gnulib-20210822~d383792/lib/unictype/categ_Cc.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Cc table. */ #include "categ_Cc.h" const uc_general_category_t UC_CATEGORY_Cc = { UC_CATEGORY_MASK_Cc, 0, { &u_categ_Cc } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cc.h�����������������������������������������������������0000664�0000000�0000000�00000006267�14110572173�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_categ_Cc = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cf.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Cf table. */ #include "categ_Cf.h" const uc_general_category_t UC_CATEGORY_Cf = { UC_CATEGORY_MASK_Cf, 0, { &u_categ_Cf } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cf.h�����������������������������������������������������0000664�0000000�0000000�00000021072�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[10 << 4]; } u_categ_Cf = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00007C00U, 0x00000000U, 0x0000FFDFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cn.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Cn table. */ #include "categ_Cn.h" const uc_general_category_t UC_CATEGORY_Cn = { UC_CATEGORY_MASK_Cn, 0, { &u_categ_Cn } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cn.h�����������������������������������������������������0000664�0000000�0000000�00000136560�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[6 << 7]; unsigned int level3[77 << 4]; } u_categ_Cn = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 640, 18 * sizeof (int) / sizeof (short) + 640 }, { -1, 18 + 768 * sizeof (short) / sizeof (int) + 0, 18 + 768 * sizeof (short) / sizeof (int) + 16, 18 + 768 * sizeof (short) / sizeof (int) + 32, 18 + 768 * sizeof (short) / sizeof (int) + 48, 18 + 768 * sizeof (short) / sizeof (int) + 64, 18 + 768 * sizeof (short) / sizeof (int) + 80, 18 + 768 * sizeof (short) / sizeof (int) + 96, 18 + 768 * sizeof (short) / sizeof (int) + 112, 18 + 768 * sizeof (short) / sizeof (int) + 128, -1, 18 + 768 * sizeof (short) / sizeof (int) + 144, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 176, 18 + 768 * sizeof (short) / sizeof (int) + 192, 18 + 768 * sizeof (short) / sizeof (int) + 208, 18 + 768 * sizeof (short) / sizeof (int) + 224, 18 + 768 * sizeof (short) / sizeof (int) + 240, 18 + 768 * sizeof (short) / sizeof (int) + 256, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 272, 18 + 768 * sizeof (short) / sizeof (int) + 288, 18 + 768 * sizeof (short) / sizeof (int) + 304, 18 + 768 * sizeof (short) / sizeof (int) + 320, 18 + 768 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 368, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 384, 18 + 768 * sizeof (short) / sizeof (int) + 400, 18 + 768 * sizeof (short) / sizeof (int) + 416, 18 + 768 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 464, 18 + 768 * sizeof (short) / sizeof (int) + 480, 18 + 768 * sizeof (short) / sizeof (int) + 496, 18 + 768 * sizeof (short) / sizeof (int) + 512, 18 + 768 * sizeof (short) / sizeof (int) + 528, 18 + 768 * sizeof (short) / sizeof (int) + 544, 18 + 768 * sizeof (short) / sizeof (int) + 560, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 592, 18 + 768 * sizeof (short) / sizeof (int) + 608, 18 + 768 * sizeof (short) / sizeof (int) + 624, 18 + 768 * sizeof (short) / sizeof (int) + 640, 18 + 768 * sizeof (short) / sizeof (int) + 656, 18 + 768 * sizeof (short) / sizeof (int) + 672, 18 + 768 * sizeof (short) / sizeof (int) + 688, 18 + 768 * sizeof (short) / sizeof (int) + 704, 18 + 768 * sizeof (short) / sizeof (int) + 720, 18 + 768 * sizeof (short) / sizeof (int) + 736, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, 18 + 768 * sizeof (short) / sizeof (int) + 768, 18 + 768 * sizeof (short) / sizeof (int) + 784, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 800, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, 18 + 768 * sizeof (short) / sizeof (int) + 816, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, 18 + 768 * sizeof (short) / sizeof (int) + 832, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 864, -1, 18 + 768 * sizeof (short) / sizeof (int) + 880, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 896, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 912, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 928, 18 + 768 * sizeof (short) / sizeof (int) + 944, 18 + 768 * sizeof (short) / sizeof (int) + 960, 18 + 768 * sizeof (short) / sizeof (int) + 976, -1, 18 + 768 * sizeof (short) / sizeof (int) + 992, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 1008, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 1024, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 1040, 18 + 768 * sizeof (short) / sizeof (int) + 1056, 18 + 768 * sizeof (short) / sizeof (int) + 1072, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1088, 18 + 768 * sizeof (short) / sizeof (int) + 1104, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1136, 18 + 768 * sizeof (short) / sizeof (int) + 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1168, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1184, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 1200, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1216 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x0000280FU, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x01800000U, 0x00000001U, 0x00011900U, 0x00000000U, 0x0000FF00U, 0xFFE0F800U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00001800U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0x8000C000U, 0xB0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0200000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00066010U, 0x0C3A0200U, 0x4F7F8660U, 0xF0000030U, 0x00067811U, 0x2C920200U, 0xA1FDC678U, 0xFFC0003FU, 0x00044011U, 0x0C120200U, 0xFFFEC440U, 0xFDFC0030U, 0x00066011U, 0x0C120200U, 0x4F3FC660U, 0xFF000030U, 0x29C23813U, 0x3C0038E7U, 0xFF7EC238U, 0xF800003FU, 0x00022010U, 0x1C000200U, 0xF89FC220U, 0x00FF0030U, 0x00022010U, 0x0C100200U, 0xBF9FC220U, 0xFFF90030U, 0x00022011U, 0x18000000U, 0x000F0220U, 0x00000030U, 0x03800013U, 0xD0040000U, 0x00A07B80U, 0xFFE3003FU, 0x00000001U, 0x78000000U, 0xF0000000U, 0xFFFFFFFFU, 0x010FDA69U, 0xC4001351U, 0x0C00C0A0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000100U, 0x0001E000U, 0x01000000U, 0x20000000U, 0xF8002000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC280C200U, 0x00000000U, 0x0000C200U, 0x80C20000U, 0x008000C2U, 0x00000000U, 0x00C20000U, 0x00000000U, 0x18000000U, 0xE0000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0xFE000000U, 0xFFE02000U, 0xFF800000U, 0xFFF00000U, 0xFFF22000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFC00FC00U, 0xFC008000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0xFFC00000U, 0x80000000U, 0xF000F000U, 0x0000000EU, 0xFFE0C000U, 0x00000000U, 0x0000F000U, 0x3800FC00U, 0x00000000U, 0x30000000U, 0x00000000U, 0x80000000U, 0x60000000U, 0xFC00FC00U, 0x8000C000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000F000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FF00000U, 0x00000000U, 0x07000000U, 0x00001C00U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x0000FF00U, 0xFC800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x5500C0C0U, 0xC0000000U, 0x00000000U, 0x00200000U, 0x10300020U, 0x80230000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0020U, 0xE0008000U, 0x80000000U, 0x0000FFFFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFF800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00C00000U, 0x1C000000U, 0xFFFC0200U, 0xFFFF0FFFU, 0x00000000U, 0x00008000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01F00000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x7FFE7F00U, 0xFF800000U, 0x80808080U, 0x80808080U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0xFFFFFFFFU, 0x04000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xF000FFFFU, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x01800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00008000U, 0xF8000000U, 0x00000000U, 0x0000FFF0U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF008000U, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFC00F000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0xFC003FC0U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x7FF00000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x3C004000U, 0x80000000U, 0x00000000U, 0xFF800000U, 0x0C00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFF8U, 0xFF800000U, 0xFF818181U, 0x00008080U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFF0U, 0x00000780U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0x1F07FF80U, 0xA0800000U, 0x00000024U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00030000U, 0x00000000U, 0xFFFFFF00U, 0xC000FFFFU, 0xFC000000U, 0x00000000U, 0x00080000U, 0x0020F080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0xE3030303U, 0xC1FF8080U, 0x00001000U, 0x48000080U, 0xC000C000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000078U, 0x00700000U, 0x00000000U, 0x00000000U, 0xF0008000U, 0xFFFFFFFEU, 0x0000FFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0000000U, 0x00000000U, 0xFFFE0000U, 0xF0000000U, 0x00000000U, 0x0000FFF0U, 0x0000F800U, 0xF8000000U, 0x40000000U, 0x00000000U, 0xFFC000F0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x0000FC00U, 0x00F00000U, 0xF0000000U, 0x00000000U, 0x0000FF00U, 0x00000000U, 0xFFFF7FF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFC00000U, 0xFFFFFF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000002C0U, 0x6E400000U, 0x00400000U, 0x00000000U, 0x80000000U, 0xFFFF007FU, 0xFFFFFFFFU, 0x07C80000U, 0x70000000U, 0x7C000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0F000000U, 0x00030000U, 0x00000000U, 0x01100F90U, 0x78F00000U, 0xFE00FF00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0xFF800780U, 0x00000000U, 0x01C00000U, 0x00C00000U, 0x00F80000U, 0xE1FC0000U, 0xFFFF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x03F80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0003C000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000FFFCU, 0xFC00FE00U, 0x00000000U, 0x00200000U, 0x0000FFF0U, 0xFF800000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0xFFE00001U, 0x00040000U, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x40004280U, 0x0000FC00U, 0x00000000U, 0xFC00F800U, 0x00066010U, 0x0C120200U, 0x1F7EC660U, 0xFFE0E030U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xD4000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00C00000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FFE0U, 0xFFFFE000U, 0x00000000U, 0xFF000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0x1C000000U, 0x0000F000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x7FF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000200U, 0x00800000U, 0x0000FFC0U, 0x0000E000U, 0x00030000U, 0xFF800100U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE08000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF8000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0x80000000U, 0xFFFF3C00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFC0C000U, 0x00000000U, 0x00000000U, 0x0400FFC0U, 0x1F000004U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000FFE0U, 0x80000000U, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFE000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xE000F800U, 0x0C00FE00U, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000180U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0x00000000U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x20000000U, 0x1400219BU, 0x00000010U, 0x00000000U, 0x20201840U, 0x84000000U, 0x000203A0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFF000U, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x06000080U, 0xFFFFF824U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800060U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x3C00F800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000010U, 0xF5080169U, 0x5569157BU, 0xA1080869U, 0xF0000400U, 0xF0000411U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00018000U, 0x00010001U, 0xFFC00000U, 0x0000E000U, 0x00008000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0xFFFFE000U, 0xFFFFFFFFU, 0x0000003FU, 0x0000FFF8U, 0xF0000000U, 0xFFFCFE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFF80E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0xFFFFFFFFU, 0x0000F000U, 0x00000000U, 0xFC00FF00U, 0x00000000U, 0x0000FF00U, 0xFFFFC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8000FFFFU, 0x8006FF00U, 0x8000F000U, 0xFFFFFFFFU, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFDU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Co.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Co table. */ #include "categ_Co.h" const uc_general_category_t UC_CATEGORY_Co = { UC_CATEGORY_MASK_Co, 0, { &u_categ_Co } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Co.h�����������������������������������������������������0000664�0000000�0000000�00000027477�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[2 << 7]; unsigned int level3[3 << 4]; } u_categ_Co = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 32 }, { 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cs.c�����������������������������������������������������0000664�0000000�0000000�00000002700�14110572173�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static bool uc_is_category_Cs (ucs4_t uc) { return (uc >= 0xd800 && uc < 0xe000); } const uc_general_category_t UC_CATEGORY_Cs = { UC_CATEGORY_MASK_Cs, 1, { &uc_is_category_Cs } }; ����������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Cs.h�����������������������������������������������������0000664�0000000�0000000�00000006507�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_categ_Cs = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_L.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_L table. */ #include "categ_L.h" const uc_general_category_t UC_CATEGORY_L = { UC_CATEGORY_MASK_L, 0, { &u_categ_L } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_L.h������������������������������������������������������0000664�0000000�0000000�00000100043�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[65 << 4]; } u_categ_L = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, 4 + 384 * sizeof (short) / sizeof (int) + 608, -1, 4 + 384 * sizeof (short) / sizeof (int) + 624, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 736, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, 4 + 384 * sizeof (short) / sizeof (int) + 816, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 832, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 896, 4 + 384 * sizeof (short) / sizeof (int) + 912, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 976, 4 + 384 * sizeof (short) / sizeof (int) + 992, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 1008, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 1024, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000000U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9C00C060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFC00U, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFE0003U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x00030003U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001C0000U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x02000003U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x00020003U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x00000000U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x00000003U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x00060003U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC000003U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x00000000U, 0xFFFFFFFEU, 0x000DFFFFU, 0x0000007FU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF000005FU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F0000U, 0xFFE1C062U, 0x00004003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FE07FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x000003FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x00000FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFC00C001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFC00E000U, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x0063DE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBD50U, 0x000043E0U, 0x00000000U, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x183E0000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000C00U, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x00000000U, 0x28FC0000U, 0xFFFFFC00U, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x00008000U, 0x7C00FFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF03FDU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x0000FF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x000001FFU, 0xFFFFFFF8U, 0x0000007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x1400001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x00000000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x00000001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x0000000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_LC.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_LC table. */ #include "categ_LC.h" const uc_general_category_t UC_CATEGORY_LC = { UC_CATEGORY_MASK_LC, 0, { &u_categ_LC } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_LC.h�����������������������������������������������������0000664�0000000�0000000�00000022621�14110572173�0020522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[19 << 4]; } u_categ_LC = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB8CF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x007FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000FFFU, 0x00000000U, 0xFEFFF800U, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF21FBD50U, 0x000043E0U, 0x00000000U, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00003FFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFFFF78FFU, 0x00FF7FFFU, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x07FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Ll.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Ll table. */ #include "categ_Ll.h" const uc_general_category_t UC_CATEGORY_Ll = { UC_CATEGORY_MASK_Ll, 0, { &u_categ_Ll } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Ll.h�����������������������������������������������������0000664�0000000�0000000�00000022201�14110572173�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_categ_Ll = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x55AAAAAAU, 0xAAAAAB55U, 0xD4AAAAAAU, 0x4E243129U, 0xE6512D2AU, 0xB5555240U, 0xAA29AAAAU, 0xAAAAAAAAU, 0x93FAAAAAU, 0xFFFFAA85U, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x388A0000U, 0x00010000U, 0xFFFFF000U, 0xAAE37FFFU, 0x192FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000FFFU, 0x00000000U, 0xFEFFF800U, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xBFEAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00FF003FU, 0x3FFF00FFU, 0x00FF00FFU, 0x40DF00FFU, 0x00CF00DCU, 0x00DC00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0008C400U, 0x32108000U, 0x000043C0U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFFFFFFU, 0x0FDA1562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008501AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x0AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAABAAA8U, 0xAAAAAAAAU, 0x95FEAAAAU, 0xAABA50AAU, 0x00A002AAU, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x07FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x000FFFFFU, 0xFFDFC000U, 0x000000FFU, 0x0FFFFFFCU, 0xEBC00000U, 0x0000FFEFU, 0xFFFFFC00U, 0xC000000FU, 0x00FFFFFFU, 0xFFFC0000U, 0x00000FFFU, 0xFFFFFFC0U, 0xFC000000U, 0x000FFFFFU, 0xFFFFC000U, 0x000000FFU, 0x0FFFFFFCU, 0xFFC00000U, 0x0000FFFFU, 0xFFFFFC00U, 0x0000003FU, 0xF7FFFFFCU, 0xF0000003U, 0x0FDFFFFFU, 0xFFC00000U, 0x003F7FFFU, 0xFFFF0000U, 0x0000FDFFU, 0xFFFFFC00U, 0x00000BF7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lm.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Lm table. */ #include "categ_Lm.h" const uc_general_category_t UC_CATEGORY_Lm = { UC_CATEGORY_MASK_Lm, 0, { &u_categ_Lm } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lm.h�����������������������������������������������������0000664�0000000�0000000�00000024301�14110572173�0020571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[22 << 4]; } u_categ_Lm = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x04100000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04300000U, 0x04000000U, 0x00000110U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0xFFFFFFFFU, 0x010007FFU, 0xF8000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x083E0000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00180000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lo.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Lo table. */ #include "categ_Lo.h" const uc_general_category_t UC_CATEGORY_Lo = { UC_CATEGORY_MASK_Lo, 0, { &u_categ_Lo } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lo.h�����������������������������������������������������0000664�0000000�0000000�00000076304�14110572173�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[62 << 4]; } u_categ_Lo = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, -1, 4 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, 4 + 384 * sizeof (short) / sizeof (int) + 800, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 816, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 912, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 928, 4 + 384 * sizeof (short) / sizeof (int) + 944, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 960, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 976, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FEU, 0xFFFEC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9C00C000U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFC00U, 0x000007FFU, 0x003FFFFFU, 0x00000000U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFC0003U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x00030003U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001C0000U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x02000003U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x00020003U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x00000000U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x00000003U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x00060003U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC000003U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x00000000U, 0xFFFFFFFEU, 0x000DFFFFU, 0x0000003FU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF000001FU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F0000U, 0xFFE1C062U, 0x00004003U, 0x00000000U, 0xFFFF0000U, 0xE7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FE07FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFF7U, 0x00FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x000003FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x00000FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFC00C001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFC00E000U, 0x00FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0063DE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01E00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x000000FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000040U, 0x10000000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x807FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x87FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x00000C00U, 0x00000000U, 0x00004000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0xF8800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x00000000U, 0x28FC0000U, 0xFFFFFC00U, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x00000000U, 0x7C00FF9FU, 0xFFFFFFFFU, 0x000001FFU, 0x00000FF7U, 0xC47EFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x18000005U, 0x000407FFU, 0x007E7E7EU, 0x00007F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0000000U, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFEFFC0U, 0x3FFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF03FDU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x0000FF0FU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x000001FFU, 0xFFFFFFF8U, 0x0000007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x1400001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x00000000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x00000001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lt.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Lt table. */ #include "categ_Lt.h" const uc_general_category_t UC_CATEGORY_Lt = { UC_CATEGORY_MASK_Lt, 0, { &u_categ_Lt } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lt.h�����������������������������������������������������0000664�0000000�0000000�00000006707�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_categ_Lt = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000920U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF00FF00U, 0x1000FF00U, 0x00001000U, 0x10000000U } }; ���������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lu.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Lu table. */ #include "categ_Lu.h" const uc_general_category_t UC_CATEGORY_Lu = { UC_CATEGORY_MASK_Lu, 0, { &u_categ_Lu } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Lu.h�����������������������������������������������������0000664�0000000�0000000�00000021141�14110572173�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[16 << 4]; } u_categ_Lu = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555554AAU, 0x2B555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAA490U, 0x55D25555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x551C8000U, 0xE6905555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x40155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0x00000000U, 0x0F000000U, 0x0F000F00U, 0x0F001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E273884U, 0xC00F3D50U, 0x00000020U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x005F7D55U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0xFFF00000U, 0x00003FFFU, 0xFFFFFF00U, 0xD0000003U, 0x003FDE64U, 0xFFFF0000U, 0x000003FFU, 0x1FDFE7B0U, 0x7B000000U, 0x0001FC5FU, 0xFFFFF000U, 0x0000003FU, 0x03FFFFFFU, 0xFFF00000U, 0x00003FFFU, 0xFFFFFF00U, 0xF0000003U, 0x003FFFFFU, 0xFFFF0000U, 0x000003FFU, 0xFFFFFF00U, 0x00000001U, 0x07FFFFFCU, 0xF0000000U, 0x001FFFFFU, 0xFFC00000U, 0x00007FFFU, 0xFFFF0000U, 0x000001FFU, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_M.c������������������������������������������������������0000664�0000000�0000000�00000002016�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_M table. */ #include "categ_M.h" const uc_general_category_t UC_CATEGORY_M = { UC_CATEGORY_MASK_M, 0, { &u_categ_M } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_M.h������������������������������������������������������0000664�0000000�0000000�00000037156�14110572173�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[38 << 4]; } u_categ_M = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, -1, 16 + 384 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 224, -1, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, -1, 16 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 512, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFFFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x9FC00000U, 0x00003D9FU, 0x00020000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x000FF800U, 0xFBC00000U, 0x00003EEFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFBU, 0x0000000FU, 0xDC000000U, 0x00FEFFFFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x0080399FU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00023987U, 0x00230000U, 0x0000000EU, 0xD0000000U, 0x00003BBFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00C0399FU, 0x0000000CU, 0x00000004U, 0xC0000000U, 0x00803DC7U, 0x00000000U, 0x0000000FU, 0xC0000000U, 0x00603DDFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00603DDFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00803DDFU, 0x0000000CU, 0x0000000CU, 0x00000000U, 0xFF5F8400U, 0x000C0000U, 0x00000000U, 0x07F20000U, 0x00007F80U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0x03000000U, 0xC2A00000U, 0x00000000U, 0xFFFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x7FFFF800U, 0xC3C00000U, 0x001E3F9DU, 0x3C00BFFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0xFFF00000U, 0x200FFFFFU, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0F800000U, 0x00000000U, 0x7FE00000U, 0x9FFFFFFFU, 0x00000000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0xFFF00000U, 0x0000001FU, 0x000FF800U, 0x00000007U, 0x00003FFEU, 0x00000000U, 0x000FFFC0U, 0x00000000U, 0x00FFFFF0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031C21FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FF78000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x000000F8U, 0x00000000U, 0x00000000U, 0x00000003U, 0xFFF00000U, 0x0000003FU, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x000FFF80U, 0x00000000U, 0x0000000FU, 0xFFF80000U, 0x00000001U, 0x00000020U, 0x00000000U, 0x007FFE00U, 0x00003008U, 0x38000000U, 0x00000000U, 0xC19D0000U, 0x00000002U, 0x0060F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000037F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000007U, 0x07FF0000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FFF80U, 0x00000000U, 0x00080000U, 0x00000007U, 0xFFF80000U, 0x00001C01U, 0x00000000U, 0x00000000U, 0x40FFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007FFU, 0x0000000FU, 0xD0000000U, 0x0080399FU, 0x001F1FCCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x0000007FU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF3F8000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00FFF800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF7F8000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0x7FFFFFFFU, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807E3E0U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Mc.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Mc table. */ #include "categ_Mc.h" const uc_general_category_t UC_CATEGORY_Mc = { UC_CATEGORY_MASK_Mc, 0, { &u_categ_Mc } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Mc.h�����������������������������������������������������0000664�0000000�0000000�00000022621�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[19 << 4]; } u_categ_Mc = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0xC8000000U, 0x0000DE01U, 0x00000000U, 0x0000000CU, 0xC0000000U, 0x00801981U, 0x00000000U, 0x00000008U, 0xC0000000U, 0x00000001U, 0x00000000U, 0x00000008U, 0xC0000000U, 0x00001A01U, 0x00000000U, 0x0000000CU, 0x40000000U, 0x00801981U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00801DC6U, 0x00000000U, 0x0000000EU, 0x00000000U, 0x0000001EU, 0x00000000U, 0x0000000CU, 0x40000000U, 0x00600D9FU, 0x00000000U, 0x0000000CU, 0xC0000000U, 0x00801DC1U, 0x00000000U, 0x0000000CU, 0x00000000U, 0xFF038000U, 0x000C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x19021800U, 0x00C00000U, 0x00003F9CU, 0x1C009F98U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0400000U, 0x000001BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FB0E78U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00A00000U, 0x0007E01AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0xE8200000U, 0x0000001BU, 0x00000000U, 0x00000004U, 0x000004C2U, 0x00000000U, 0x000C5C80U, 0x00000000U, 0x00300FF0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000098U, 0x00000000U, 0x00000000U, 0x00000003U, 0xFFF00000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0000U, 0x00000000U, 0x00000008U, 0xEC300000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00198000U, 0x00002000U, 0x28000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0020C800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000016D8U, 0x00000005U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x01870000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x80380000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x002C7000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x0000000CU, 0xC0000000U, 0x0080399EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00E00000U, 0x00000023U, 0x00000000U, 0x00000000U, 0x7A070000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x4F038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x58070000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0040D000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000043U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00120200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007E060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Me.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Me table. */ #include "categ_Me.h" const uc_general_category_t UC_CATEGORY_Me = { UC_CATEGORY_MASK_Me, 0, { &u_categ_Me } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Me.h�����������������������������������������������������0000664�0000000�0000000�00000007747�14110572173�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_categ_Me = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x0000001DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00070000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������gnulib-20210822~d383792/lib/unictype/categ_Mn.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Mn table. */ #include "categ_Mn.h" const uc_general_category_t UC_CATEGORY_Mn = { UC_CATEGORY_MASK_Mn, 0, { &u_categ_Mn } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Mn.h�����������������������������������������������������0000664�0000000�0000000�00000037772�14110572173�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[38 << 4]; } u_categ_Mn = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, -1, 16 + 384 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 224, -1, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, -1, 16 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 512, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFFFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x9FC00000U, 0x00003D9FU, 0x00020000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x000FF800U, 0xFBC00000U, 0x00003EEFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFBU, 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0000000CU, 0x00000002U, 0x10000000U, 0x0000201EU, 0x0000000CU, 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, 0x00000006U, 0x10000000U, 0x000021BEU, 0x0000000CU, 0x00000002U, 0x90000000U, 0x0040201EU, 0x0000000CU, 0x00000004U, 0x00000000U, 0x00002001U, 0x00000000U, 0x00000001U, 0xC0000000U, 0x00603DC1U, 0x0000000CU, 0x00000002U, 0x90000000U, 0x00003040U, 0x0000000CU, 0x00000002U, 0x00000000U, 0x0000201EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x005C0400U, 0x00000000U, 0x00000000U, 0x07F20000U, 0x00007F80U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, 0x20002064U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0x3FB00000U, 0x200FFE40U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, 0x00000000U, 0x3FFF0000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, 0x00000000U, 0x00CFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFF0000U, 0x0001FFE2U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FF08000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, 0x00000007U, 0x13C80000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00667E00U, 0x00001008U, 0x10000000U, 0x00000000U, 0xC19D0000U, 0x00000002U, 0x00403000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000003U, 0x06780000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, 0x00000003U, 0x7FC00000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x40D38000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, 0x00000003U, 0x10000000U, 0x00000001U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0000005CU, 0x00000000U, 0x00000000U, 0x85F80000U, 0x0000000DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB03C0000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xBF7F0000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000380U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ������gnulib-20210822~d383792/lib/unictype/categ_N.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_N table. */ #include "categ_N.h" const uc_general_category_t UC_CATEGORY_N = { UC_CATEGORY_MASK_N, 0, { &u_categ_N } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_N.h������������������������������������������������������0000664�0000000�0000000�00000036360�14110572173�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[41 << 4]; } u_categ_N = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, 3 + 256 * sizeof (short) / sizeof (int) + 496, 3 + 256 * sizeof (short) / sizeof (int) + 512, 3 + 256 * sizeof (short) / sizeof (int) + 528, -1, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, 3 + 256 * sizeof (short) / sizeof (int) + 608, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x720C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F0FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FCFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F00FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x7F000000U, 0x01FFFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F10000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x000003E7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x070003FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0xFFFEFF00U, 0x00000000U, 0x000003FFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0x000FFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFEU, 0x00000000U, 0x0000000FU, 0x00000402U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003E0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFE000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0xF8000000U, 0x0FC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x000000FFU, 0x60000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFF000000U, 0x00000000U, 0x0000FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x001FFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFBFF0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFC000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Nd.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Nd table. */ #include "categ_Nd.h" const uc_general_category_t UC_CATEGORY_Nd = { UC_CATEGORY_MASK_Nd, 0, { &u_categ_Nd } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Nd.h�����������������������������������������������������0000664�0000000�0000000�00000025421�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[24 << 4]; } u_categ_Nd = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFC000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Nl.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Nl table. */ #include "categ_Nl.h" const uc_general_category_t UC_CATEGORY_Nl = { UC_CATEGORY_MASK_Nl, 0, { &u_categ_Nl } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Nl.h�����������������������������������������������������0000664�0000000�0000000�00000014320�14110572173�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[7 << 4]; } u_categ_Nl = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000001E7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x070003FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000402U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003E0000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_No.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_No table. */ #include "categ_No.h" const uc_general_category_t UC_CATEGORY_No = { UC_CATEGORY_MASK_No, 0, { &u_categ_No } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_No.h�����������������������������������������������������0000664�0000000�0000000�00000030061�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[29 << 4]; } u_categ_No = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x720C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FC0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00070000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F000000U, 0x01FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000FFC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F10000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0xFFFEFF00U, 0x00000000U, 0x000003FFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0x000FFFFFU, 0x00000000U, 0x01E00000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFEU, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFE000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0xF8000000U, 0x0FC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x000000FFU, 0x60000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFF000000U, 0x00000000U, 0x0000FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001FFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_P.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_P table. */ #include "categ_P.h" const uc_general_category_t UC_CATEGORY_P = { UC_CATEGORY_MASK_P, 0, { &u_categ_P } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_P.h������������������������������������������������������0000664�0000000�0000000�00000037420�14110572173�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[43 << 4]; } u_categ_P = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, 3 + 256 * sizeof (short) / sizeof (int) + 544, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 656, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x8C00F7EEU, 0xB8000001U, 0x28000000U, 0x00000000U, 0x88C00882U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000600U, 0x40000000U, 0x00000049U, 0x00180000U, 0xC8003600U, 0x00000000U, 0x00000000U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03800000U, 0x00000000U, 0x7FFF0000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00000000U, 0x0C008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0017FFF0U, 0x3C000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x061F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07700000U, 0x00000000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x000800FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF00FFU, 0x7FFBFFEFU, 0x60000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003FFF00U, 0x00000000U, 0x00000000U, 0x00000060U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFF8U, 0x00000000U, 0x0F000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xDE000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF3FF0EU, 0x20010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x40080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FC0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F00000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x17000000U, 0x00000000U, 0x0000C000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0003FFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0xFFFF0000U, 0xFFF7FFFFU, 0x00000D0BU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x8C00F7EEU, 0xB8000001U, 0xA8000000U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FF0000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0xFE000000U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F80U, 0x00000000U, 0x00000000U, 0xD8000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00300000U, 0x00000000U, 0x00000000U, 0xE80023E0U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x2800F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000003EU, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x0F800000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pc.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Pc table. */ #include "categ_Pc.h" const uc_general_category_t UC_CATEGORY_Pc = { UC_CATEGORY_MASK_Pc, 0, { &u_categ_Pc } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pc.h�����������������������������������������������������0000664�0000000�0000000�00000007327�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[3 << 4]; } u_categ_Pc = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32 }, { 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00100001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00180000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pd.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Pd table. */ #include "categ_Pd.h" const uc_general_category_t UC_CATEGORY_Pd = { UC_CATEGORY_MASK_Pd, 0, { &u_categ_Pd } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pd.h�����������������������������������������������������0000664�0000000�0000000�00000012047�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[8 << 4]; } u_categ_Pd = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112 }, { 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04800000U, 0x0C000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00060000U, 0x01000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pe.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Pe table. */ #include "categ_Pe.h" const uc_general_category_t UC_CATEGORY_Pe = { UC_CATEGORY_MASK_Pe, 0, { &u_categ_Pe } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pe.h�����������������������������������������������������0000664�0000000�0000000�00000013530�14110572173�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[11 << 4]; } u_categ_Pe = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, 2 + 128 * sizeof (short) / sizeof (int) + 160 }, { 0x00000000U, 0x00000200U, 0x20000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x28000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x40000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000A00U, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x002AAA00U, 0x00000000U, 0x00000000U, 0x00000040U, 0x0000AA80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01555550U, 0x00000000U, 0x0A000000U, 0x20000000U, 0x00000000U, 0x000002A8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xCAA2AA00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01000000U, 0x55400000U, 0x54000115U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x20000000U, 0x20000000U, 0x00000009U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pf.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Pf table. */ #include "categ_Pf.h" const uc_general_category_t UC_CATEGORY_Pf = { UC_CATEGORY_MASK_Pf, 0, { &u_categ_Pf } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pf.h�����������������������������������������������������0000664�0000000�0000000�00000007327�14110572173�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[3 << 4]; } u_categ_Pf = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20002428U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pi.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Pi table. */ #include "categ_Pi.h" const uc_general_category_t UC_CATEGORY_Pi = { UC_CATEGORY_MASK_Pi, 0, { &u_categ_Pi } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Pi.h�����������������������������������������������������0000664�0000000�0000000�00000007327�14110572173�0020602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[3 << 4]; } u_categ_Pi = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x99000000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10001214U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Po.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Po table. */ #include "categ_Po.h" const uc_general_category_t UC_CATEGORY_Po = { UC_CATEGORY_MASK_Po, 0, { &u_categ_Po } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Po.h�����������������������������������������������������0000664�0000000�0000000�00000034701�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[38 << 4]; } u_categ_Po = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x8C00D4EEU, 0x10000001U, 0x00000000U, 0x00000000U, 0x80C00082U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000049U, 0x00180000U, 0xC8003600U, 0x00000000U, 0x00000000U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03800000U, 0x00000000U, 0x7FFF0000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00000000U, 0x0C008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0017FFF0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x061F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07700000U, 0x00000000U, 0x000007BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x000800FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x79FF00FFU, 0x7FEBFF8EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xDE000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xCB7FC9C3U, 0xF3FF7C00U, 0x0000001AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x40080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FC0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F00000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x17000000U, 0x00000000U, 0x0000C000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0003FFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x027F0000U, 0x00010000U, 0x80F71E60U, 0x00000D03U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x8C00D4EEU, 0x10000001U, 0x00000000U, 0x00000032U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FF0000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0xFE000000U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F80U, 0x00000000U, 0x00000000U, 0xD8000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00300000U, 0x00000000U, 0x00000000U, 0xE80023E0U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x2800F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000003EU, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x0F800000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Ps.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Ps table. */ #include "categ_Ps.h" const uc_general_category_t UC_CATEGORY_Ps = { UC_CATEGORY_MASK_Ps, 0, { &u_categ_Ps } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Ps.h�����������������������������������������������������0000664�0000000�0000000�00000013530�14110572173�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[11 << 4]; } u_categ_Ps = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, 2 + 128 * sizeof (short) / sizeof (int) + 160 }, { 0x00000000U, 0x00000100U, 0x08000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x14000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x44000000U, 0x00000000U, 0x00000020U, 0x20000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000500U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00155500U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00005540U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00AAAAA8U, 0x00000000U, 0x05000000U, 0x10000000U, 0x00000000U, 0x00000154U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x25515500U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0xAAA00000U, 0x2A00008AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x08000000U, 0x88000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_S.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_S table. */ #include "categ_S.h" const uc_general_category_t UC_CATEGORY_S = { UC_CATEGORY_MASK_S, 0, { &u_categ_S } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_S.h������������������������������������������������������0000664�0000000�0000000�00000042220�14110572173�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[48 << 4]; } u_categ_S = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, 3 + 256 * sizeof (short) / sizeof (int) + 496, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 608, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, 3 + 256 * sizeof (short) / sizeof (int) + 640, 3 + 256 * sizeof (short) / sizeof (int) + 656, 3 + 256 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 688, 3 + 256 * sizeof (short) / sizeof (int) + 704, 3 + 256 * sizeof (short) / sizeof (int) + 720, 3 + 256 * sizeof (short) / sizeof (int) + 656, 3 + 256 * sizeof (short) / sizeof (int) + 736, 3 + 256 * sizeof (short) / sizeof (int) + 752, -1, -1, -1 }, { 0x00000000U, 0x70000810U, 0x40000000U, 0x50000001U, 0x00000000U, 0x0113D37CU, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC003CU, 0xFFFFAFE0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C9C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x60000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C0C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFCE8000EU, 0x01500000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x01E0DFBFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FF007FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0x00000000U, 0x00000000U, 0x00040010U, 0x1C000000U, 0x00001C00U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0xC1D0037BU, 0x0C0042AFU, 0x0000BC1FU, 0x00000000U, 0xFFFF0C00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF0FFU, 0xFFFFF9FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0xFFF00000U, 0xFFFFFFFFU, 0xFFFFFF9FU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE000007U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0x000C0010U, 0xC0C00001U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC30000U, 0x00000000U, 0xFFFFFFFFU, 0x0000000FU, 0x7FFFFFFFU, 0xFFFFFC00U, 0x000100FFU, 0xFFFFFFFFU, 0xFFFFFC00U, 0x0001FFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007FFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03C00F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000274U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000810U, 0x40000000U, 0x50000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30007F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0x00000000U, 0xFE000000U, 0x0FFF73FFU, 0x00000001U, 0xFFFF0000U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x01800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0x00001C1FU, 0xFFFFF018U, 0xFFFFC3FFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000002U, 0x08000000U, 0x00200000U, 0x00200000U, 0x00008000U, 0x00008000U, 0x00000200U, 0x00000200U, 0x00000008U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x07800000U, 0x00000000U, 0xFFDFE000U, 0x0000006FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFF0000U, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sc.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Sc table. */ #include "categ_Sc.h" const uc_general_category_t UC_CATEGORY_Sc = { UC_CATEGORY_MASK_Sc, 0, { &u_categ_Sc } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sc.h�����������������������������������������������������0000664�0000000�0000000�00000013530�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[11 << 4]; } u_categ_Sc = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, 2 + 128 * sizeof (short) / sizeof (int) + 160 }, { 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000003CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x080C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000063U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sk.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Sk table. */ #include "categ_Sk.h" const uc_general_category_t UC_CATEGORY_Sk = { UC_CATEGORY_MASK_Sk, 0, { &u_categ_Sk } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sk.h�����������������������������������������������������0000664�0000000�0000000�00000015360�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[9 << 4]; } u_categ_Sk = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x40000000U, 0x00000001U, 0x00000000U, 0x01108100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC003CU, 0xFFFFAFE0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007FFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sm.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Sm table. */ #include "categ_Sm.h" const uc_general_category_t UC_CATEGORY_Sm = { UC_CATEGORY_MASK_Sm, 0, { &u_categ_Sm } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Sm.h�����������������������������������������������������0000664�0000000�0000000�00000017461�14110572173�0020611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[13 << 4]; } u_categ_Sm = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x70000800U, 0x00000000U, 0x50000000U, 0x00000000U, 0x00021000U, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x000001C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040010U, 0x1C000000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01000000U, 0x00000000U, 0x0000081FU, 0x00000000U, 0x0C1F0000U, 0x00004049U, 0x0014C000U, 0xFFF00000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000003U, 0x00000000U, 0x10000000U, 0xF8000000U, 0x000FFFFFU, 0xF0000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000002U, 0xFF000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF9FU, 0xFFFF003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE000007U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x00001F9FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000074U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000800U, 0x00000000U, 0x50000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001E04U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000002U, 0x08000000U, 0x00200000U, 0x00200000U, 0x00008000U, 0x00008000U, 0x00000200U, 0x00000200U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_So.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_So table. */ #include "categ_So.h" const uc_general_category_t UC_CATEGORY_So = { UC_CATEGORY_MASK_So, 0, { &u_categ_So } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_So.h�����������������������������������������������������0000664�0000000�0000000�00000036441�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[41 << 4]; } u_categ_So = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, 3 + 256 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, 3 + 256 * sizeof (short) / sizeof (int) + 608, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 624, 3 + 256 * sizeof (short) / sizeof (int) + 640, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00014240U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x60000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x05F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFCE8000EU, 0x01500000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x01E0DFBFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FF007FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0D0037BU, 0x0C0042AFU, 0x0000B400U, 0x00000000U, 0xF3E00C00U, 0xFFFFBFB6U, 0xFFEB3FFFU, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF0FFU, 0xFFFFF9FCU, 0xFFFFFFFFU, 0xEFFFFFFFU, 0x07FFFFFFU, 0xFFF00000U, 0x0FFFFFFFU, 0x7FFFFFFCU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFF7FFFFFU, 0xFFFFFFFDU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0xFFF00000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFE060U, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0x000C0010U, 0xC0C00001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC30000U, 0x00000000U, 0xFFFFFFFFU, 0x0000000FU, 0x7FFFFFFFU, 0xFFFFFC00U, 0x000100FFU, 0xFFFFFFFFU, 0xFFFFFC00U, 0x0001FFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02C00F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30006110U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0x00000000U, 0xFE000000U, 0x0FFF73FFU, 0x00000001U, 0xFFFF0000U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x01800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0x00001C1FU, 0xFFFFF018U, 0xFFFFC3FFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x07800000U, 0x00000000U, 0xFFDFE000U, 0x0000006FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFF0000U, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Z.c������������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Z table. */ #include "categ_Z.h" const uc_general_category_t UC_CATEGORY_Z = { UC_CATEGORY_MASK_Z, 0, { &u_categ_Z } }; ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Z.h������������������������������������������������������0000664�0000000�0000000�00000007746�14110572173�0020450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_categ_Z = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00008300U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������gnulib-20210822~d383792/lib/unictype/categ_Zl.c�����������������������������������������������������0000664�0000000�0000000�00000002661�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static bool uc_is_category_Zl (ucs4_t uc) { return (uc == 0x2028); } const uc_general_category_t UC_CATEGORY_Zl = { UC_CATEGORY_MASK_Zl, 1, { &uc_is_category_Zl } }; �������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Zl.h�����������������������������������������������������0000664�0000000�0000000�00000006267�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_categ_Zl = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Zp.c�����������������������������������������������������0000664�0000000�0000000�00000002661�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static bool uc_is_category_Zp (ucs4_t uc) { return (uc == 0x2029); } const uc_general_category_t UC_CATEGORY_Zp = { UC_CATEGORY_MASK_Zp, 1, { &uc_is_category_Zp } }; �������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Zp.h�����������������������������������������������������0000664�0000000�0000000�00000006267�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_categ_Zp = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Zs.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_categ_Zs table. */ #include "categ_Zs.h" const uc_general_category_t UC_CATEGORY_Zs = { UC_CATEGORY_MASK_Zs, 0, { &u_categ_Zs } }; �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_Zs.h�����������������������������������������������������0000664�0000000�0000000�00000007747�14110572173�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_categ_Zs = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00008000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������gnulib-20210822~d383792/lib/unictype/categ_and.c����������������������������������������������������0000664�0000000�0000000�00000003435�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" uc_general_category_t uc_general_category_and (uc_general_category_t category1, uc_general_category_t category2) { uint32_t bitmask; uc_general_category_t result; bitmask = category1.bitmask & category2.bitmask; if (bitmask == category1.bitmask) return category1; if (bitmask == category2.bitmask) return category2; if (bitmask == 0) return _UC_CATEGORY_NONE; result.bitmask = bitmask; result.generic = 1; result.lookup.lookup_fn = &uc_is_general_category_withtable; return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_and_not.c������������������������������������������������0000664�0000000�0000000�00000003353�14110572173�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" uc_general_category_t uc_general_category_and_not (uc_general_category_t category1, uc_general_category_t category2) { uint32_t bitmask; uc_general_category_t result; bitmask = category1.bitmask & ~category2.bitmask; if (bitmask == category1.bitmask) return category1; if (bitmask == 0) return _UC_CATEGORY_NONE; result.bitmask = bitmask; result.generic = 1; result.lookup.lookup_fn = &uc_is_general_category_withtable; return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_byname.c�������������������������������������������������0000664�0000000�0000000�00000014216�14110572173�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include <stdlib.h> #include <string.h> /* Indices stored in the 'struct named_category' elements of the perfect hash table. We don't use uc_general_category_t values or their addresses directly, because this would introduce load-time relocations. */ enum { UC_CATEGORY_INDEX_L, UC_CATEGORY_INDEX_LC, UC_CATEGORY_INDEX_Lu, UC_CATEGORY_INDEX_Ll, UC_CATEGORY_INDEX_Lt, UC_CATEGORY_INDEX_Lm, UC_CATEGORY_INDEX_Lo, UC_CATEGORY_INDEX_M, UC_CATEGORY_INDEX_Mn, UC_CATEGORY_INDEX_Mc, UC_CATEGORY_INDEX_Me, UC_CATEGORY_INDEX_N, UC_CATEGORY_INDEX_Nd, UC_CATEGORY_INDEX_Nl, UC_CATEGORY_INDEX_No, UC_CATEGORY_INDEX_P, UC_CATEGORY_INDEX_Pc, UC_CATEGORY_INDEX_Pd, UC_CATEGORY_INDEX_Ps, UC_CATEGORY_INDEX_Pe, UC_CATEGORY_INDEX_Pi, UC_CATEGORY_INDEX_Pf, UC_CATEGORY_INDEX_Po, UC_CATEGORY_INDEX_S, UC_CATEGORY_INDEX_Sm, UC_CATEGORY_INDEX_Sc, UC_CATEGORY_INDEX_Sk, UC_CATEGORY_INDEX_So, UC_CATEGORY_INDEX_Z, UC_CATEGORY_INDEX_Zs, UC_CATEGORY_INDEX_Zl, UC_CATEGORY_INDEX_Zp, UC_CATEGORY_INDEX_C, UC_CATEGORY_INDEX_Cc, UC_CATEGORY_INDEX_Cf, UC_CATEGORY_INDEX_Cs, UC_CATEGORY_INDEX_Co, UC_CATEGORY_INDEX_Cn }; #include "unictype/categ_byname.h" uc_general_category_t uc_general_category_byname (const char *category_name) { size_t len; len = strlen (category_name); if (len <= MAX_WORD_LENGTH) { char buf[MAX_WORD_LENGTH + 1]; const struct named_category *found; /* Copy category_name into buf, converting '_' and '-' to ' '. */ { const char *p = category_name; char *q = buf; for (;; p++, q++) { char c = *p; if (c == '_' || c == '-') c = ' '; *q = c; if (c == '\0') break; } } /* Here q == buf + len. */ /* Do a hash table lookup, with case-insensitive comparison. */ found = uc_general_category_lookup (buf, len); if (found != NULL) /* Use a 'switch' statement here, because a table would introduce load-time relocations. */ switch (found->category_index) { case UC_CATEGORY_INDEX_L: return UC_CATEGORY_L; case UC_CATEGORY_INDEX_LC: return UC_CATEGORY_LC; case UC_CATEGORY_INDEX_Lu: return UC_CATEGORY_Lu; case UC_CATEGORY_INDEX_Ll: return UC_CATEGORY_Ll; case UC_CATEGORY_INDEX_Lt: return UC_CATEGORY_Lt; case UC_CATEGORY_INDEX_Lm: return UC_CATEGORY_Lm; case UC_CATEGORY_INDEX_Lo: return UC_CATEGORY_Lo; case UC_CATEGORY_INDEX_M: return UC_CATEGORY_M; case UC_CATEGORY_INDEX_Mn: return UC_CATEGORY_Mn; case UC_CATEGORY_INDEX_Mc: return UC_CATEGORY_Mc; case UC_CATEGORY_INDEX_Me: return UC_CATEGORY_Me; case UC_CATEGORY_INDEX_N: return UC_CATEGORY_N; case UC_CATEGORY_INDEX_Nd: return UC_CATEGORY_Nd; case UC_CATEGORY_INDEX_Nl: return UC_CATEGORY_Nl; case UC_CATEGORY_INDEX_No: return UC_CATEGORY_No; case UC_CATEGORY_INDEX_P: return UC_CATEGORY_P; case UC_CATEGORY_INDEX_Pc: return UC_CATEGORY_Pc; case UC_CATEGORY_INDEX_Pd: return UC_CATEGORY_Pd; case UC_CATEGORY_INDEX_Ps: return UC_CATEGORY_Ps; case UC_CATEGORY_INDEX_Pe: return UC_CATEGORY_Pe; case UC_CATEGORY_INDEX_Pi: return UC_CATEGORY_Pi; case UC_CATEGORY_INDEX_Pf: return UC_CATEGORY_Pf; case UC_CATEGORY_INDEX_Po: return UC_CATEGORY_Po; case UC_CATEGORY_INDEX_S: return UC_CATEGORY_S; case UC_CATEGORY_INDEX_Sm: return UC_CATEGORY_Sm; case UC_CATEGORY_INDEX_Sc: return UC_CATEGORY_Sc; case UC_CATEGORY_INDEX_Sk: return UC_CATEGORY_Sk; case UC_CATEGORY_INDEX_So: return UC_CATEGORY_So; case UC_CATEGORY_INDEX_Z: return UC_CATEGORY_Z; case UC_CATEGORY_INDEX_Zs: return UC_CATEGORY_Zs; case UC_CATEGORY_INDEX_Zl: return UC_CATEGORY_Zl; case UC_CATEGORY_INDEX_Zp: return UC_CATEGORY_Zp; case UC_CATEGORY_INDEX_C: return UC_CATEGORY_C; case UC_CATEGORY_INDEX_Cc: return UC_CATEGORY_Cc; case UC_CATEGORY_INDEX_Cf: return UC_CATEGORY_Cf; case UC_CATEGORY_INDEX_Cs: return UC_CATEGORY_Cs; case UC_CATEGORY_INDEX_Co: return UC_CATEGORY_Co; case UC_CATEGORY_INDEX_Cn: return UC_CATEGORY_Cn; default: abort (); } } /* Invalid category name. */ return _UC_CATEGORY_NONE; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_byname.gperf���������������������������������������������0000664�0000000�0000000�00000011260�14110572173�0022350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_category { int name; unsigned int category_index; }; %struct-type %ignore-case %language=ANSI-C %define hash-function-name general_category_hash %define lookup-function-name uc_general_category_lookup %readonly-tables %global-table %define word-array-name general_category_names %pic %define string-pool-name general_category_stringpool %% L, UC_CATEGORY_INDEX_L LC, UC_CATEGORY_INDEX_LC Lu, UC_CATEGORY_INDEX_Lu Ll, UC_CATEGORY_INDEX_Ll Lt, UC_CATEGORY_INDEX_Lt Lm, UC_CATEGORY_INDEX_Lm Lo, UC_CATEGORY_INDEX_Lo M, UC_CATEGORY_INDEX_M Mn, UC_CATEGORY_INDEX_Mn Mc, UC_CATEGORY_INDEX_Mc Me, UC_CATEGORY_INDEX_Me N, UC_CATEGORY_INDEX_N Nd, UC_CATEGORY_INDEX_Nd Nl, UC_CATEGORY_INDEX_Nl No, UC_CATEGORY_INDEX_No P, UC_CATEGORY_INDEX_P Pc, UC_CATEGORY_INDEX_Pc Pd, UC_CATEGORY_INDEX_Pd Ps, UC_CATEGORY_INDEX_Ps Pe, UC_CATEGORY_INDEX_Pe Pi, UC_CATEGORY_INDEX_Pi Pf, UC_CATEGORY_INDEX_Pf Po, UC_CATEGORY_INDEX_Po S, UC_CATEGORY_INDEX_S Sm, UC_CATEGORY_INDEX_Sm Sc, UC_CATEGORY_INDEX_Sc Sk, UC_CATEGORY_INDEX_Sk So, UC_CATEGORY_INDEX_So Z, UC_CATEGORY_INDEX_Z Zs, UC_CATEGORY_INDEX_Zs Zl, UC_CATEGORY_INDEX_Zl Zp, UC_CATEGORY_INDEX_Zp C, UC_CATEGORY_INDEX_C Cc, UC_CATEGORY_INDEX_Cc Cf, UC_CATEGORY_INDEX_Cf Cs, UC_CATEGORY_INDEX_Cs Co, UC_CATEGORY_INDEX_Co Cn, UC_CATEGORY_INDEX_Cn Letter, UC_CATEGORY_INDEX_L Cased Letter, UC_CATEGORY_INDEX_LC CasedLetter, UC_CATEGORY_INDEX_LC Uppercase Letter, UC_CATEGORY_INDEX_Lu UppercaseLetter, UC_CATEGORY_INDEX_Lu Lowercase Letter, UC_CATEGORY_INDEX_Ll LowercaseLetter, UC_CATEGORY_INDEX_Ll Titlecase Letter, UC_CATEGORY_INDEX_Lt TitlecaseLetter, UC_CATEGORY_INDEX_Lt Modifier Letter, UC_CATEGORY_INDEX_Lm ModifierLetter, UC_CATEGORY_INDEX_Lm Other Letter, UC_CATEGORY_INDEX_Lo OtherLetter, UC_CATEGORY_INDEX_Lo Mark, UC_CATEGORY_INDEX_M Nonspacing Mark, UC_CATEGORY_INDEX_Mn NonspacingMark, UC_CATEGORY_INDEX_Mn Spacing Mark, UC_CATEGORY_INDEX_Mc SpacingMark, UC_CATEGORY_INDEX_Mc Enclosing Mark, UC_CATEGORY_INDEX_Me EnclosingMark, UC_CATEGORY_INDEX_Me Number, UC_CATEGORY_INDEX_N Decimal Number, UC_CATEGORY_INDEX_Nd DecimalNumber, UC_CATEGORY_INDEX_Nd Letter Number, UC_CATEGORY_INDEX_Nl LetterNumber, UC_CATEGORY_INDEX_Nl Other Number, UC_CATEGORY_INDEX_No OtherNumber, UC_CATEGORY_INDEX_No Punctuation, UC_CATEGORY_INDEX_P Connector Punctuation, UC_CATEGORY_INDEX_Pc ConnectorPunctuation, UC_CATEGORY_INDEX_Pc Dash Punctuation, UC_CATEGORY_INDEX_Pd DashPunctuation, UC_CATEGORY_INDEX_Pd Open Punctuation, UC_CATEGORY_INDEX_Ps OpenPunctuation, UC_CATEGORY_INDEX_Ps Close Punctuation, UC_CATEGORY_INDEX_Pe ClosePunctuation, UC_CATEGORY_INDEX_Pe Initial Punctuation, UC_CATEGORY_INDEX_Pi InitialPunctuation, UC_CATEGORY_INDEX_Pi Final Punctuation, UC_CATEGORY_INDEX_Pf FinalPunctuation, UC_CATEGORY_INDEX_Pf Other Punctuation, UC_CATEGORY_INDEX_Po OtherPunctuation, UC_CATEGORY_INDEX_Po Symbol, UC_CATEGORY_INDEX_S Math Symbol, UC_CATEGORY_INDEX_Sm MathSymbol, UC_CATEGORY_INDEX_Sm Currency Symbol, UC_CATEGORY_INDEX_Sc CurrencySymbol, UC_CATEGORY_INDEX_Sc Modifier Symbol, UC_CATEGORY_INDEX_Sk ModifierSymbol, UC_CATEGORY_INDEX_Sk Other Symbol, UC_CATEGORY_INDEX_So OtherSymbol, UC_CATEGORY_INDEX_So Separator, UC_CATEGORY_INDEX_Z Space Separator, UC_CATEGORY_INDEX_Zs SpaceSeparator, UC_CATEGORY_INDEX_Zs Line Separator, UC_CATEGORY_INDEX_Zl LineSeparator, UC_CATEGORY_INDEX_Zl Paragraph Separator, UC_CATEGORY_INDEX_Zp ParagraphSeparator, UC_CATEGORY_INDEX_Zp Other, UC_CATEGORY_INDEX_C Control, UC_CATEGORY_INDEX_Cc Format, UC_CATEGORY_INDEX_Cf Surrogate, UC_CATEGORY_INDEX_Cs Private Use, UC_CATEGORY_INDEX_Co PrivateUse, UC_CATEGORY_INDEX_Co Unassigned, UC_CATEGORY_INDEX_Cn ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_longname.c�����������������������������������������������0000664�0000000�0000000�00000007072�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_category_long_name[30][22] = { "Uppercase Letter", "Lowercase Letter", "Titlecase Letter", "Modifier Letter", "Other Letter", "Nonspacing Mark", "Spacing Mark", "Enclosing Mark", "Decimal Number", "Letter Number", "Other Number", "Connector Punctuation", "Dash Punctuation", "Open Punctuation", "Close Punctuation", "Initial Punctuation", "Final Punctuation", "Other Punctuation", "Math Symbol", "Currency Symbol", "Modifier Symbol", "Other Symbol", "Space Separator", "Line Separator", "Paragraph Separator", "Control", "Format", "Surrogate", "Private Use", "Unassigned" }; const char * uc_general_category_long_name (uc_general_category_t category) { uint32_t bitmask = category.bitmask; /* bitmask should consist of a single bit. */ if (bitmask != 0) { if ((bitmask & (bitmask - 1)) == 0) { int bit; /* Take log2 using a variant of Robert Harley's method. Found by Bruno Haible 1996. */ uint32_t n = bitmask; static const char ord2_tab[64] = { -1, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 }; n += n << 4; n += n << 6; n = (n << 16) - n; bit = ord2_tab[n >> 26]; if (bit < sizeof (u_category_long_name) / sizeof (u_category_long_name[0])) return u_category_long_name[bit]; } else { if (bitmask == UC_CATEGORY_MASK_L) return "Letter"; if (bitmask == UC_CATEGORY_MASK_LC) return "Cased Letter"; if (bitmask == UC_CATEGORY_MASK_M) return "Mark"; if (bitmask == UC_CATEGORY_MASK_N) return "Number"; if (bitmask == UC_CATEGORY_MASK_P) return "Punctuation"; if (bitmask == UC_CATEGORY_MASK_S) return "Symbol"; if (bitmask == UC_CATEGORY_MASK_Z) return "Separator"; if (bitmask == UC_CATEGORY_MASK_C) return "Other"; } } return NULL; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_name.c���������������������������������������������������0000664�0000000�0000000�00000006116�14110572173�0021140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_category_name[30][3] = { "Lu", "Ll", "Lt", "Lm", "Lo", "Mn", "Mc", "Me", "Nd", "Nl", "No", "Pc", "Pd", "Ps", "Pe", "Pi", "Pf", "Po", "Sm", "Sc", "Sk", "So", "Zs", "Zl", "Zp", "Cc", "Cf", "Cs", "Co", "Cn" }; const char * uc_general_category_name (uc_general_category_t category) { uint32_t bitmask = category.bitmask; /* bitmask should consist of a single bit. */ if (bitmask != 0) { if ((bitmask & (bitmask - 1)) == 0) { int bit; /* Take log2 using a variant of Robert Harley's method. Found by Bruno Haible 1996. */ uint32_t n = bitmask; static const char ord2_tab[64] = { -1, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 }; n += n << 4; n += n << 6; n = (n << 16) - n; bit = ord2_tab[n >> 26]; if (bit < sizeof (u_category_name) / sizeof (u_category_name[0])) return u_category_name[bit]; } else { if (bitmask == UC_CATEGORY_MASK_L) return "L"; if (bitmask == UC_CATEGORY_MASK_LC) return "LC"; if (bitmask == UC_CATEGORY_MASK_M) return "M"; if (bitmask == UC_CATEGORY_MASK_N) return "N"; if (bitmask == UC_CATEGORY_MASK_P) return "P"; if (bitmask == UC_CATEGORY_MASK_S) return "S"; if (bitmask == UC_CATEGORY_MASK_Z) return "Z"; if (bitmask == UC_CATEGORY_MASK_C) return "C"; } } return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_none.c���������������������������������������������������0000664�0000000�0000000�00000002020�14110572173�0021145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static bool always_false (ucs4_t uc, uint32_t bitmask) { return false; } const uc_general_category_t _UC_CATEGORY_NONE = { 0, 1, { &always_false } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_of.c�����������������������������������������������������0000664�0000000�0000000�00000004531�14110572173�0020623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_category table. */ #include "categ_of.h" static inline int lookup_withtable (ucs4_t uc) { unsigned int index1 = uc >> category_header_0; if (index1 < category_header_1) { int lookup1 = u_category.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> category_header_2) & category_header_3; int lookup2 = u_category.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = ((uc & category_header_4) + lookup2) * 5; /* level3 contains 5-bit values, packed into 16-bit words. */ unsigned int lookup3 = (((unsigned int) u_category.level3[index3>>4] | ((unsigned int) u_category.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0x1f; return lookup3; } } return 29; /* = log2(UC_CATEGORY_MASK_Cn) */ } return -1; } bool uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) { int bit = lookup_withtable (uc); if (bit >= 0) return ((bitmask >> bit) & 1); else return false; } uc_general_category_t uc_general_category (ucs4_t uc) { int bit = lookup_withtable (uc); uc_general_category_t result; if (bit >= 0) { result.bitmask = 1 << bit; result.generic = 1; result.lookup.lookup_fn = &uc_is_general_category_withtable; return result; } else return _UC_CATEGORY_NONE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_of.h�����������������������������������������������������0000664�0000000�0000000�00000267415�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ #define category_header_0 16 #define category_header_1 17 #define category_header_2 7 #define category_header_3 511 #define category_header_4 127 static const struct { int level1[17]; short level2[5 << 9]; unsigned short level3[216 * 40 + 1]; } u_category = { { 0, 512, 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, 2048, 2048 }, { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, 4352, 4480, 4608, 4736, 4864, 4992, 4352, 4352, 4352, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064, 8192, 8192, 8320, 8448, 8576, 8704, 8832, 8960, 9088, 8832, 9216, 9344, 8832, 8832, 8192, 9472, 8192, 8192, 9600, 9728, 9856, 9984, 10112, 10240, 10368, 10496, 8832, 10624, 10752, 10880, 11008, 11136, 11264, 11392, 8832, 8832, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 11520, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 11648, 11776, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 11904, 4352, 4352, 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 13568, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 4352, 4352, 13952, 14080, 14208, 14336, 4352, 4352, 14464, 14592, 14720, 14848, 14976, 15104, 15232, 15360, 15488, 15616, -1, 15744, 15872, 16000, 16128, 16256, 16384, -1, 4352, 4352, 16512, -1, 16640, 16768, 16896, 17024, 17152, 17280, 17408, 17536, 17664, 17792, -1, -1, 17920, -1, -1, -1, 18048, 18176, 18304, 18432, 18560, 18688, 18816, -1, 18944, 19072, -1, 19200, 19328, 19456, 19584, -1, -1, 19712, -1, -1, -1, 19840, -1, -1, 19968, 20096, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 20224, 20352, 4352, 20480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 20608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 20736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 20864, 20992, 21120, 21248, -1, -1, -1, -1, -1, -1, 21376, 21504, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 21632, 4352, 4352, 4352, 4352, 4352, 21760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22016, 22144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8832, 22272, 22400, 22528, 22656, -1, 22784, -1, 22912, 23040, 23168, 23296, 23424, 23552, 23680, 23808, 8832, 8832, 8832, 8832, 23936, 24064, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 24320, 24448, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24576, 24704, -1, -1, 24832, 24960, 25088, 25216, 25344, -1, 8832, 25472, 8832, 8832, 8832, 8832, 8832, 25600, 25728, 25856, 25984, 26112, 26240, 26368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 26496, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 26624, 4352, 26752, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, 26880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4352, 4352, 4352, 27008, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27136, -1, 27264, 27392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, 27520 }, { 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xc636, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, 0x1084, 0x0842, 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0xcc9d, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xce36, 0x6739, 0xb48d, 0x2792, 0xa575, 0x2a55, 0x4345, 0x548c, 0xa811, 0x8a94, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0800, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2190, 0x1084, 0x0842, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x0108, 0x1004, 0x0040, 0x0401, 0x4010, 0x2100, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x0008, 0x1004, 0x0840, 0x8001, 0x0200, 0x0100, 0x1000, 0x0002, 0x0400, 0x0200, 0x2000, 0x0084, 0x0040, 0x8020, 0x0200, 0x0100, 0x0084, 0x0002, 0x0001, 0x4010, 0x2000, 0x0204, 0x0842, 0x1084, 0x4402, 0x2200, 0x1100, 0x0040, 0x0401, 0x4010, 0x0100, 0x1004, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8801, 0x0200, 0x2000, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x4210, 0x2108, 0x1000, 0x0800, 0x0401, 0x0000, 0x2008, 0x0080, 0x0802, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4240, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x5063, 0xe94a, 0x6318, 0x318c, 0x18c6, 0x5063, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x8c63, 0x2831, 0x94a5, 0x3a52, 0xa0e8, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x8020, 0x2830, 0xbd08, 0x108f, 0x0442, 0xf7bd, 0x294e, 0x0088, 0x0e80, 0x003a, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x7400, 0x0000, 0x0000, 0x1000, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0042, 0x0021, 0x4200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8421, 0x8200, 0x0104, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0xd420, 0x4a52, 0xe729, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x0400, 0x4010, 0x0100, 0x1004, 0x0840, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x001d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7de8, 0x18c4, 0x8c63, 0x843d, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x3d08, 0xdeb2, 0x9d6b, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x2b0a, 0x94b1, 0x4a58, 0xbd2c, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, 0x9084, 0x7b18, 0xbdef, 0xdef7, 0xef7b, 0x6b5a, 0xb5ad, 0x3294, 0x19c6, 0xad63, 0x94a5, 0x4a52, 0xa529, 0xa894, 0x8c7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x5290, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x2108, 0x1084, 0x0842, 0x18c5, 0x2123, 0x1085, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4912, 0xa529, 0x5294, 0x2d74, 0x94a5, 0xc652, 0xa528, 0x5296, 0x210a, 0x2108, 0x1084, 0x0842, 0x4211, 0x256a, 0xc631, 0x6318, 0x318c, 0x18c6, 0xd763, 0x10a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xde94, 0x2109, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x294a, 0xf485, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x5290, 0x294a, 0x94a5, 0x4632, 0x318d, 0xde8e, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x528c, 0x294a, 0x94a5, 0x4a32, 0xa329, 0x5294, 0xef4a, 0xc631, 0x6318, 0x318c, 0x18c6, 0xec63, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xd294, 0xec7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x3a42, 0x8421, 0x4210, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x4a5e, 0xa529, 0x5294, 0x294a, 0xe8a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x14a5, 0x0843, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x5314, 0x3188, 0x94a6, 0x4a52, 0xc529, 0x6318, 0x318a, 0x94a4, 0x4a52, 0x8429, 0x4210, 0x2108, 0x9484, 0x2312, 0x0842, 0x8421, 0x4210, 0x1071, 0x0842, 0x8421, 0x4210, 0x2108, 0x18a4, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x93a4, 0x3bde, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x7a52, 0xa637, 0x6377, 0xe90a, 0xf7bd, 0x7bde, 0xbd37, 0x4ef7, 0x2748, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0xcc84, 0x94a9, 0x4a52, 0xd9d5, 0xef7b, 0x14bd, 0x09d3, 0x8421, 0xde90, 0x277b, 0x77a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, 0x09d2, 0x84e9, 0x5ef4, 0x31ba, 0x94a6, 0x7bde, 0xa52f, 0x52f7, 0xef4a, 0xf4bd, 0x7bde, 0x9def, 0x4210, 0xe93a, 0xf7bd, 0x3bde, 0x0842, 0x8421, 0x4210, 0x10a5, 0x4a42, 0xbdef, 0xdef7, 0xef7b, 0x14bd, 0x09d3, 0x8421, 0x4210, 0x2748, 0x7484, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, 0x09d2, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x4a52, 0xc52f, 0x6374, 0xef4a, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0xf671, 0x7bde, 0x9def, 0xdef4, 0xef7b, 0x18bd, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x94a6, 0x7a52, 0xa637, 0x6377, 0xef4a, 0xf7bd, 0x7bde, 0xbd31, 0x4ef7, 0x2748, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0x2895, 0x94a5, 0xbd52, 0xdef7, 0xef7b, 0x17bd, 0x09d2, 0x8421, 0xde90, 0x213b, 0x13a4, 0x4842, 0x9def, 0x4e90, 0x213a, 0x77bd, 0x7a42, 0x84ef, 0xde90, 0x213b, 0x1084, 0x0842, 0x8421, 0xdef4, 0x31bb, 0x98c5, 0xbbde, 0xa631, 0x631b, 0xef4a, 0xf7a4, 0x7bde, 0xbd37, 0xdef7, 0xef7b, 0xf7bd, 0x3bde, 0x0842, 0x8421, 0x4210, 0xa94a, 0x6b5a, 0x75ad, 0xded6, 0xef7b, 0x18c5, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0x2949, 0x18c5, 0x7a63, 0xa529, 0x5297, 0xef4a, 0xf7bd, 0x4bde, 0x84e9, 0xde90, 0xef7b, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0x4aef, 0xa529, 0xaa94, 0x18a4, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x18c6, 0x7a63, 0xa631, 0x531b, 0xef4a, 0xf7bd, 0x8dde, 0xbde9, 0xdef7, 0xe93b, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0x909d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x18bd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0x3189, 0x94a6, 0xba52, 0xa631, 0x631b, 0xa90a, 0xf7bd, 0x084e, 0x4a31, 0xa529, 0x2294, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0x294a, 0x94a5, 0xaa52, 0x4212, 0x2108, 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x7484, 0x0842, 0x8421, 0xd210, 0xef49, 0x1084, 0x0842, 0xbde9, 0xde97, 0x377b, 0x94c6, 0x7a52, 0xc6e9, 0x6318, 0x318c, 0xf7bd, 0x3bde, 0x0842, 0x8421, 0x4210, 0x1bbd, 0x7b13, 0xbdef, 0xdef7, 0xef7b, 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x10a4, 0x4a52, 0xa529, 0xde94, 0x9f7b, 0x1084, 0xc842, 0xa528, 0x5294, 0x894a, 0x2108, 0x1084, 0x0842, 0xd8c5, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x909d, 0x7a4e, 0xa427, 0xde93, 0xef49, 0xf7bd, 0x084e, 0x9d21, 0x4210, 0x2108, 0x109d, 0x49d2, 0xbd27, 0xd213, 0x2109, 0x10a4, 0x4a52, 0xa529, 0x52f4, 0xef48, 0x1084, 0xfa42, 0xa5e8, 0x5294, 0xef4a, 0x2108, 0x1084, 0x0842, 0x4ef5, 0x2108, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6a4, 0x631a, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6b1a, 0xa5ad, 0x5ad4, 0xad6b, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0x294a, 0x4b55, 0xb52d, 0xd734, 0x319c, 0x1084, 0x0842, 0x9d21, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x314a, 0x94a5, 0x6252, 0x8429, 0x4210, 0x294a, 0x94a5, 0x4a52, 0xbd29, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xad7a, 0xd6b5, 0x6b5a, 0xb5a9, 0x5ad6, 0xad7b, 0xc631, 0x6b18, 0x35ad, 0xdec6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6310, 0x294a, 0x94c5, 0x4a52, 0xa629, 0x6314, 0x214a, 0x2108, 0x1084, 0x0842, 0x18c5, 0x8c63, 0x1084, 0x8842, 0xa531, 0x4210, 0x2948, 0x1885, 0x0863, 0xc631, 0x6318, 0x210c, 0x94a4, 0x0852, 0x8421, 0x4210, 0x2108, 0x1484, 0x4a63, 0xc631, 0x6318, 0x310a, 0x2108, 0x1084, 0x0842, 0x6319, 0xad4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xbd07, 0xdef7, 0xef41, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0xef48, 0x1084, 0x0842, 0xa4e9, 0x4213, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, 0x4842, 0x84ef, 0x4210, 0xe908, 0x13a4, 0x4842, 0x84ef, 0x4210, 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, 0x4842, 0x84ef, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0x294b, 0xc631, 0x6318, 0x518c, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x21ef, 0x1084, 0xef42, 0x108c, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2462, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1096, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xe690, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x1890, 0x4a63, 0x1089, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x213a, 0x9484, 0x7a52, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9484, 0x6252, 0xbdec, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9484, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x213a, 0x97a4, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8a52, 0xa529, 0x5294, 0x318a, 0x18c6, 0x4c63, 0xa631, 0x5294, 0x294a, 0x94a5, 0x6312, 0x311c, 0x49c6, 0xef4a, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xdef5, 0xef7b, 0xc631, 0x2318, 0x318b, 0x52c6, 0xee8a, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x0841, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, 0x1084, 0x4a42, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xde90, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x14a5, 0x8c63, 0xc529, 0xd318, 0xef7b, 0x14c6, 0x8c63, 0xa631, 0xd294, 0xef7b, 0xf7b5, 0x231e, 0x0842, 0x8421, 0x4210, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdea9, 0xad7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xc529, 0xd298, 0x8c7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4c42, 0xa531, 0x5294, 0xe94a, 0x14c5, 0x4a63, 0xa529, 0x5294, 0x318c, 0x98c6, 0x4a52, 0xa529, 0x5294, 0x2f7a, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xc631, 0x6318, 0x311c, 0x18c6, 0xef63, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xe9ca, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x94a5, 0x0862, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4c52, 0xa529, 0x5314, 0x318c, 0x14c6, 0x0863, 0x8421, 0xd210, 0xef7b, 0x2108, 0x1084, 0x0842, 0x18c5, 0x8c63, 0xd6b1, 0x6b5a, 0xb5ad, 0x52d6, 0x294a, 0x94a5, 0x6b52, 0xb5ad, 0x5ad6, 0xef7b, 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94c4, 0x8a52, 0xa531, 0x5298, 0x210a, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa531, 0x6318, 0x298a, 0x18a5, 0x7bd3, 0xbdef, 0x1ef7, 0x8c63, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8c62, 0xc631, 0x5318, 0x294a, 0x94a5, 0x4c62, 0xbd29, 0x18f7, 0x8c63, 0x2108, 0x1084, 0x0842, 0xdef5, 0x2109, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x6321, 0x318c, 0x8c46, 0x8421, 0x4210, 0xa108, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xc631, 0x6318, 0xbd8c, 0xdef7, 0xef7b, 0x94a5, 0x4a58, 0xa529, 0x5294, 0x294a, 0x94c5, 0x4a52, 0x8529, 0x4210, 0x210a, 0x1884, 0x0853, 0xa5e9, 0xdef4, 0xef7b, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x3084, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x108c, 0x0842, 0x8421, 0x4210, 0x2308, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x3184, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xbdef, 0x52f7, 0x294a, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x4200, 0x2108, 0x1084, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, 0x0000, 0xef40, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, 0x0000, 0xef40, 0x8421, 0x4210, 0x1d08, 0xd074, 0x0741, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, 0xef42, 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, 0x7a10, 0x0008, 0x2000, 0xa068, 0x8694, 0x7a10, 0x0008, 0x2000, 0xa528, 0x8421, 0x7bd0, 0x0008, 0xd000, 0xa529, 0x8421, 0x4210, 0x0008, 0x0000, 0xa528, 0x87bd, 0x7a10, 0x0008, 0x2000, 0xed28, 0x5ad6, 0xad6b, 0xd6b5, 0xad5a, 0xd6b5, 0x318c, 0x58c6, 0x0f8c, 0xf7b6, 0x7b60, 0xc631, 0x6318, 0x178c, 0xad6b, 0xb6b5, 0xc631, 0x6318, 0xf18c, 0x18c1, 0x5c63, 0xc62b, 0x9b28, 0x318b, 0x18c6, 0x8c63, 0xca31, 0x62b8, 0x318c, 0x18c6, 0xb463, 0x6b5a, 0xbbad, 0x5ad6, 0xad6b, 0xd6b5, 0xf46a, 0x94ae, 0x4a52, 0x2949, 0x1b9b, 0x294a, 0x94a5, 0x4a52, 0x2949, 0xeb9b, 0x8c63, 0xc631, 0x6318, 0x318c, 0xef7a, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0xece7, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x39ce, 0x9ca7, 0x4a73, 0xa529, 0x5294, 0x294a, 0xf7a5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x82b5, 0x6b5a, 0xb505, 0x0006, 0x0840, 0x8000, 0x4150, 0x12ad, 0x0000, 0xad40, 0xd6b5, 0x2a0a, 0xa0a8, 0x0002, 0x0d40, 0x0000, 0x0810, 0x2421, 0x1ad4, 0x0002, 0x4a52, 0x4129, 0x2108, 0x5954, 0xa86b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x2529, 0x5210, 0x494a, 0xdad5, 0xef7b, 0x4a52, 0x6b29, 0xb5ad, 0x594a, 0xad6b, 0x56b2, 0xab59, 0xb5ac, 0x5ad6, 0xacab, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x94ab, 0xcab5, 0x6b2a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0xa52a, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0xd6b5, 0x6b5a, 0xcdad, 0x5735, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd652, 0x6b5a, 0xb5ad, 0x5ab9, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2956, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6b59, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0x94a5, 0xd652, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xded6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x5529, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xa52a, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb595, 0x5ad6, 0xad6b, 0xd655, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x52ad, 0x294a, 0x94a5, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0x956b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xcdad, 0xd735, 0x735c, 0x35cd, 0x9cd7, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x6b55, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4a52, 0x9b29, 0x5293, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6529, 0xcd73, 0xd735, 0x735c, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0xca52, 0x9ae6, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x9ae6, 0x4e6b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xcd94, 0x2735, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd94a, 0x949c, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6b29, 0x5295, 0x294a, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ef, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad7, 0xad6b, 0xf6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x5ef7, 0xad6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe800, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0xe842, 0x0020, 0x4200, 0x0100, 0x1004, 0x0000, 0x8020, 0x4010, 0x2108, 0x3084, 0x0006, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x6a10, 0xb5ad, 0x1056, 0x2840, 0x80a5, 0x7bd0, 0x3def, 0x18c6, 0x8c55, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xbd0f, 0xdef7, 0xef43, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0x1f7b, 0xf7b1, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x3e31, 0x60f8, 0xf18c, 0xf8c1, 0x8c60, 0xc631, 0x6318, 0x3164, 0xf8b2, 0x8c60, 0x360f, 0x5cd7, 0xcd73, 0x18c5, 0x1c63, 0xc631, 0x6318, 0x318c, 0x1632, 0x8c63, 0xb62c, 0x7b18, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5af6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xc636, 0x0758, 0xcd49, 0xd735, 0x735c, 0xd5cd, 0x5cda, 0xcd73, 0xc735, 0x739a, 0xa535, 0x5294, 0x294a, 0x5295, 0x318a, 0x8c6c, 0x4631, 0x29ad, 0x41a5, 0xad62, 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0x4a14, 0x20c7, 0x108c, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0x20c6, 0xf7bd, 0x09de, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x2ab5, 0x54a5, 0xb5ad, 0x5ad6, 0xad6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4aad, 0xa529, 0x5294, 0x2955, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x2955, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0642, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x6321, 0x318c, 0x8c46, 0x1084, 0x0842, 0x8421, 0x3210, 0x8c62, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x2108, 0x1084, 0x0842, 0xd211, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x2902, 0x9ce7, 0x4a58, 0xa529, 0x5294, 0x1c4a, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x3080, 0x2946, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0x294a, 0x94a5, 0x4a52, 0xc4a5, 0x6318, 0xbd8c, 0xdef7, 0xef7b, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x631d, 0x318c, 0x18c6, 0x8294, 0x0200, 0x2008, 0x0080, 0x0802, 0x8021, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8423, 0x4210, 0x0108, 0x1004, 0x0800, 0x8020, 0x0200, 0x8308, 0x1052, 0x2040, 0x8020, 0x0210, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0000, 0xe800, 0x0000, 0x0200, 0xbd08, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0x6327, 0x4204, 0x2108, 0x1484, 0x4842, 0x8421, 0x4290, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4a63, 0xb531, 0xdad6, 0xef7b, 0x294a, 0x54a5, 0xb3ad, 0xdef6, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x6312, 0xbd8c, 0xdef7, 0xef7b, 0x10c6, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8c62, 0xc631, 0x6318, 0x318c, 0x18c6, 0x4a53, 0xbdef, 0xdef7, 0x8c7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x10a5, 0x0842, 0x3121, 0x1246, 0xef49, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x8c4a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0x294a, 0x18a5, 0x7bd3, 0xbdef, 0xdef7, 0x8f7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0x14a5, 0x0843, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x4c62, 0xa529, 0x5318, 0x318c, 0xc626, 0x6318, 0x318c, 0x18c6, 0x1f63, 0x2108, 0x1084, 0x0842, 0xdef5, 0x8c7b, 0x1084, 0xca42, 0x8420, 0x4210, 0x2108, 0x2108, 0x1084, 0x0842, 0x4211, 0xe908, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x5294, 0x314a, 0x14a6, 0x4a63, 0xbde9, 0xdef7, 0xef7b, 0x9084, 0x0842, 0x8421, 0x5210, 0xef4c, 0x2108, 0x1084, 0x0842, 0x1ef5, 0x8c63, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0xb5a9, 0x5312, 0x210c, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9485, 0x0852, 0x8529, 0x4210, 0x2948, 0x90a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x4277, 0x8c46, 0x1084, 0x0842, 0x8421, 0x5310, 0x318a, 0x9231, 0x4c31, 0xbde9, 0xdef7, 0xef7b, 0x109d, 0x0842, 0x9de9, 0x4210, 0xe908, 0x109d, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x3a04, 0x18c6, 0x8421, 0x4210, 0xbdef, 0xdef7, 0xef7b, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8a63, 0xc531, 0x6898, 0xef4a, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0x4277, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8421, 0x4210, 0xbde8, 0xdef7, 0xef7b, 0xf7bd, 0x4210, 0xbd08, 0xdef7, 0x2149, 0x1084, 0x0842, 0x4421, 0x4212, 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe93a, 0x7484, 0x3a42, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x5084, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xf694, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x77bd, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x6b88, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13bd, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x3210, 0xef6b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xc631, 0x6318, 0x2e6c, 0xdef6, 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xb191, 0x9ab5, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x62e6, 0x2e6c, 0x18c6, 0x5ad7, 0xc631, 0x631e, 0xac8c, 0xe6b9, 0x8b9a, 0x4a31, 0xa526, 0x71ec, 0xd8c6, 0xef7b, 0x1084, 0x3a42, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xd77a, 0xc63d, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, 0x1084, 0x0842, 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0x6c9d, 0x362e, 0x2317, 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x18c8, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x13bd, 0x0842, 0xbd21, 0x4213, 0x2108, 0x13bd, 0x0842, 0xbd21, 0x4213, 0xef7a, 0x4a73, 0xe75a, 0x55ec, 0x294a, 0xed6b, 0xf7bd, 0x7bde, 0x5def, 0x5d6b, 0xef6b, 0x1084, 0x0842, 0x8421, 0xd210, 0x2109, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4e90, 0x2748, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, 0xc631, 0x7bde, 0x4a57, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x7bd5, 0xb5af, 0x5ad6, 0xad6b, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x9494, 0xaa52, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x552a, 0xed6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef4b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x2945, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xd529, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x294a, 0x7bd5, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1124, 0x0842, 0x8421, 0xdea4, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0xde94, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x8f48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0x84ef, 0x4210, 0x2108, 0xa531, 0x5294, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7bd0, 0x21ef, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd084, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, 0x8f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x4842, 0xa4ef, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa427, 0x4ef7, 0x277a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0x4a8f, 0xa529, 0x5294, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x55a9, 0xa529, 0x5294, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0xf7bd, 0x7bde, 0x4a57, 0xa529, 0x5294, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x484e, 0xbdef, 0xa577, 0x5294, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8842, 0x4a52, 0xd529, 0x8f7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0x8f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xaef7, 0x2114, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x2bbd, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x94a4, 0x4bd2, 0xbde9, 0x5ef7, 0x294a, 0x1084, 0x09d2, 0x9d21, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xa5ef, 0xde94, 0x2f7b, 0x294a, 0x94a5, 0xbd52, 0xdef7, 0xef7b, 0xc631, 0x6318, 0xb18c, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x8a94, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x5294, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x9521, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4a42, 0xbde9, 0xa577, 0x5294, 0xc631, 0x6318, 0xbdec, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0x3def, 0x18c6, 0x8c63, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0x4aef, 0xa529, 0x5294, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x7bde, 0x4aef, 0xa529, 0x5294, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf484, 0x7bde, 0x3def, 0x18c6, 0xef7b, 0xf7bd, 0x7bde, 0x5def, 0xa529, 0x5294, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x7bde, 0xbdef, 0xa52b, 0x5294, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xea94, 0x18a6, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa521, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x3189, 0x18c6, 0xef63, 0x2bbd, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x14a5, 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, 0x4a52, 0xa631, 0x1894, 0x8c75, 0xf631, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x14a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa529, 0x6294, 0x294a, 0x94a5, 0x3a52, 0x0842, 0x8421, 0x4210, 0xc631, 0x7bd8, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x2312, 0xbde9, 0xdef7, 0xef7b, 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4c63, 0xa529, 0x5294, 0x314a, 0x1086, 0x6242, 0x318c, 0x5296, 0xef62, 0x2108, 0x1084, 0x0842, 0x4891, 0x8c62, 0x295d, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x7aa5, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x7484, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6210, 0x298c, 0x18a5, 0x4c53, 0x3129, 0x18c6, 0xe963, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0xa4e9, 0x4213, 0x2748, 0x1084, 0x0842, 0x8421, 0x4210, 0x2748, 0x1084, 0x0842, 0x2421, 0xdef6, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2908, 0x98c6, 0x4a52, 0xa529, 0xde94, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x18a5, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, 0x09d2, 0x8421, 0x5ef4, 0x3188, 0x18c5, 0x7a63, 0xa637, 0x6377, 0xef4c, 0xf7a4, 0x7bde, 0xbd37, 0xdef7, 0x2109, 0x1884, 0x7bd3, 0xa529, 0x5294, 0xef7a, 0x94a5, 0x7a52, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8c42, 0xa531, 0x5294, 0x294a, 0x94c6, 0x4c52, 0x8421, 0x1890, 0x8c63, 0x2108, 0x1084, 0x0842, 0xd8f5, 0xef63, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, 0x4a52, 0xc529, 0x6314, 0x298c, 0x94c5, 0x4842, 0xbd24, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x3108, 0x94c6, 0x4a52, 0xc6ef, 0x5318, 0x298a, 0xc625, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x848c, 0x5210, 0xef4a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, 0x4a52, 0xa529, 0x6314, 0x298a, 0xc625, 0x7a48, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xc631, 0x6318, 0x318c, 0x18c6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6290, 0x318a, 0x94a5, 0x8a52, 0xbd29, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0x294b, 0x94c6, 0x8a52, 0xa529, 0xd294, 0xef7b, 0x2108, 0x1084, 0x0842, 0x1529, 0xac63, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0xa94a, 0x7bde, 0xbdef, 0xdef7, 0x277b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x3108, 0x94a5, 0x4a52, 0xa5e9, 0x5294, 0x298a, 0xc624, 0x6318, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, 0x1231, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x97bd, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xdd29, 0x5294, 0x294a, 0x94c5, 0x4a62, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0xea52, 0xc631, 0x7b18, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x2108, 0x1084, 0x0842, 0xdef5, 0x8c7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x94a5, 0x6252, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94a5, 0x4a52, 0x3189, 0x58c6, 0xad6b, 0x8c63, 0x6b11, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xa575, 0x5294, 0x754a, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0x2109, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, 0x18c4, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0xe98c, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, 0x94a5, 0xc631, 0x6318, 0x318c, 0x18c6, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7a3, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf484, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x5ef4, 0x894b, 0x6b5a, 0x7bdd, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x8d5a, 0xa529, 0x5ad4, 0x318d, 0x18c6, 0xb5ad, 0x5ad6, 0x52eb, 0x294a, 0x94a5, 0x4b5a, 0xa529, 0x5294, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5296, 0xad4a, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x96b5, 0x6a52, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xf54a, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x8421, 0x7a10, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x0084, 0x003a, 0x83bd, 0x01de, 0x1de8, 0x0000, 0x003a, 0x0000, 0x4000, 0x2108, 0xd0f4, 0x0843, 0x8421, 0x43d0, 0x2108, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4000, 0x0007, 0xde80, 0x0001, 0x0000, 0x3a00, 0x0000, 0x0000, 0x087a, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x0008, 0x0074, 0xe800, 0x0000, 0x3a00, 0xbde8, 0x0003, 0x0000, 0x87a0, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x00ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8640, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1904, 0x0842, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1900, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6410, 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6400, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x9042, 0x8421, 0x0210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9000, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x4108, 0x1086, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x1086, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x0421, 0x4219, 0x2108, 0xd080, 0x423b, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xb5a9, 0x52d6, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xad6a, 0xd6b5, 0x4b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6a5a, 0x318d, 0xd8c6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x52f7, 0x294a, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x294a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x94a5, 0x4a52, 0xa5e9, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x52f7, 0x294a, 0xf4a5, 0x7a52, 0xa529, 0xde94, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0x4a57, 0xa529, 0x5294, 0x94a5, 0x4a52, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4a50, 0xa529, 0xde94, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0x8c7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x09d2, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x909d, 0x7a4e, 0x9d27, 0x4210, 0x2108, 0x9084, 0x084e, 0x9d21, 0xd274, 0xef7b, 0x93bd, 0x7bde, 0x9d27, 0xd274, 0x2109, 0x909d, 0x7a4e, 0x9d27, 0xd274, 0x2749, 0x909d, 0x7a4e, 0x8427, 0x4e90, 0x2108, 0x9084, 0x084e, 0x9d21, 0x4210, 0xe93a, 0x1084, 0x0842, 0x8421, 0x4274, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, 0x109d, 0x09d2, 0x8421, 0x4274, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf652, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef7, 0xef7b, 0xf6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x4a56, 0xa529, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef7b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdad, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdad, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6b5, 0x6b5a, 0xbdad, 0xdef7, 0xef7b, 0xf7b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xf6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf484, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf75d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xef79, 0x0000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_or.c�����������������������������������������������������0000664�0000000�0000000�00000003350�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" uc_general_category_t uc_general_category_or (uc_general_category_t category1, uc_general_category_t category2) { uint32_t bitmask; uc_general_category_t result; bitmask = category1.bitmask | category2.bitmask; if (bitmask == category1.bitmask) return category1; if (bitmask == category2.bitmask) return category2; result.bitmask = bitmask; result.generic = 1; result.lookup.lookup_fn = &uc_is_general_category_withtable; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/categ_test.c���������������������������������������������������0000664�0000000�0000000�00000002163�14110572173�0021175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" bool uc_is_general_category (ucs4_t uc, uc_general_category_t category) { if (category.generic) return category.lookup.lookup_fn (uc, category.bitmask); else return bitmap_lookup (category.lookup.table, uc); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/combiningclass.c�����������������������������������������������0000664�0000000�0000000�00000003040�14110572173�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Combining classes of Unicode characters. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_combclass table. */ #include "combiningclass.h" int uc_combining_class (ucs4_t uc) { unsigned int index1 = uc >> combclass_header_0; if (index1 < combclass_header_1) { int lookup1 = u_combclass.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> combclass_header_2) & combclass_header_3; int lookup2 = u_combclass.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & combclass_header_4); unsigned int lookup3 = u_combclass.level3[lookup2 + index3]; return lookup3; } } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/combiningclass.h�����������������������������������������������0000664�0000000�0000000�00000170355�14110572173�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Combining class of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ #define combclass_header_0 16 #define combclass_header_1 2 #define combclass_header_2 7 #define combclass_header_3 511 #define combclass_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; unsigned char level3[75 << 7]; } u_combclass = { { 0, 512 }, { -1, -1, -1, -1, -1, -1, 0, -1, -1, 128, -1, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1280, 1280, 1280, 1408, 1536, 1280, 1408, 1664, 1792, 1920, 2048, 2176, 2304, 2432, -1, -1, -1, -1, 2560, -1, -1, -1, -1, -1, -1, -1, 2688, 2816, -1, 2944, 3072, -1, 3200, 3328, 3456, 3584, 3712, 3840, -1, 3968, -1, -1, -1, -1, -1, 4096, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4224, 4352, 4480, -1, -1, -1, -1, 4608, 4736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4864, 4992, -1, -1, 5120, 5248, 5376, 5504, -1, 5632, -1, 5760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5888, -1, -1, -1, -1, -1, 6016, -1, -1, -1, -1, -1, -1, 6144, -1, 6272, 6400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6528, 6656, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6784, 6912, 7040, 7168, 7296, 7424, 7552, -1, 7680, 7808, -1, 7936, 8064, 8192, 8320, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8064, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8448, 8576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8832, 8960, 9088, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9344, 9472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216, 220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220, 220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220, 220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220, 230, 232, 220, 220, 230, 233, 234, 234, 233, 234, 234, 233, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230, 230, 230, 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230, 222, 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, 0, 230, 220, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 220, 230, 230, 230, 230, 230, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230, 220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 220, 230, 230, 220, 230, 230, 220, 230, 230, 230, 220, 220, 220, 27, 28, 29, 230, 230, 230, 220, 230, 230, 220, 220, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, 132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 1, 220, 220, 220, 220, 220, 230, 230, 220, 220, 220, 220, 230, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 220, 230, 230, 230, 230, 230, 230, 230, 220, 230, 230, 234, 214, 220, 202, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 230, 233, 220, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230, 230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220, 230, 1, 1, 220, 220, 220, 220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 230, 230, 220, 0, 0, 230, 230, 0, 0, 0, 0, 0, 230, 230, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 220, 220, 220, 220, 220, 220, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 220, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0, 230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/combiningclass_byname.c����������������������������������������0000664�0000000�0000000�00000004231�14110572173�0023377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU 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 "unictype/combiningclass_byname.h" int uc_combining_class_byname (const char *ccc_name) { size_t len; len = strlen (ccc_name); if (len <= MAX_WORD_LENGTH) { char buf[MAX_WORD_LENGTH + 1]; const struct named_combining_class *found; /* Copy ccc_name into buf, converting '_' and '-' to ' '. */ { const char *p = ccc_name; char *q = buf; for (;; p++, q++) { char c = *p; if (c == '_' || c == '-') c = ' '; *q = c; if (c == '\0') break; } } /* Here q == buf + len. */ /* Do a hash table lookup, with case-insensitive comparison. */ found = uc_combining_class_lookup (buf, len); if (found != NULL) return found->combining_class; } /* Invalid combining class name. */ return -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/combiningclass_byname.gperf������������������������������������0000664�0000000�0000000�00000004771�14110572173�0024271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_combining_class { int name; int combining_class; }; %struct-type %ignore-case %language=ANSI-C %define hash-function-name combining_class_hash %define lookup-function-name uc_combining_class_lookup %readonly-tables %global-table %define word-array-name combining_class_names %pic %define string-pool-name combining_class_stringpool %% NR, UC_CCC_NR OV, UC_CCC_OV NK, UC_CCC_NK KV, UC_CCC_KV VR, UC_CCC_VR ATBL, UC_CCC_ATBL ATB, UC_CCC_ATB ATA, UC_CCC_ATA ATAR, UC_CCC_ATAR BL, UC_CCC_BL B, UC_CCC_B BR, UC_CCC_BR L, UC_CCC_L R, UC_CCC_R AL, UC_CCC_AL A, UC_CCC_A AR, UC_CCC_AR DB, UC_CCC_DB DA, UC_CCC_DA IS, UC_CCC_IS Not Reordered, UC_CCC_NR NotReordered, UC_CCC_NR Overlay, UC_CCC_OV Nukta, UC_CCC_NK Kana Voicing, UC_CCC_KV KanaVoicing, UC_CCC_KV Virama, UC_CCC_VR Attached Below Left, UC_CCC_ATBL AttachedBelowLeft, UC_CCC_ATBL Attached Below, UC_CCC_ATB AttachedBelow, UC_CCC_ATB Attached Above, UC_CCC_ATA AttachedAbove, UC_CCC_ATA Attached Above Right, UC_CCC_ATAR AttachedAboveRight, UC_CCC_ATAR Below Left, UC_CCC_BL BelowLeft, UC_CCC_BL Below, UC_CCC_B Below Right, UC_CCC_BR BelowRight, UC_CCC_BR Left, UC_CCC_L Right, UC_CCC_R Above Left, UC_CCC_AL AboveLeft, UC_CCC_AL Above, UC_CCC_A Above Right, UC_CCC_AR AboveRight, UC_CCC_AR Double Below, UC_CCC_DB DoubleBelow, UC_CCC_DB Double Above, UC_CCC_DA DoubleAbove, UC_CCC_DA Iota Subscript, UC_CCC_IS IotaSubscript, UC_CCC_IS �������gnulib-20210822~d383792/lib/unictype/combiningclass_longname.c��������������������������������������0000664�0000000�0000000�00000005771�14110572173�0023736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include <stdlib.h> static const signed char u_combining_class_index_part1[10] = { 0, /* Not Reordered */ 1, /* Overlay */ -1, -1, -1, -1, -1, 2, /* Nukta */ 3, /* Kana Voicing */ 4 /* Virama */ }; static const signed char u_combining_class_index_part2[241 - 200] = { 5, /* Attached Below Left */ -1, 6, /* Attached Below */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, /* Attached Above */ -1, 8, /* Attached Above Right */ -1, 9, /* Below Left */ -1, 10, /* Below */ -1, 11, /* Below Right */ -1, 12, /* Left */ -1, 13, /* Right */ -1, 14, /* Above Left */ -1, 15, /* Above */ -1, 16, /* Above Right */ 17, /* Double Below */ 18, /* Double Above */ -1, -1, -1, -1, -1, 19 /* Iota Subscript */ }; static const char u_combining_class_long_name[20][21] = { "Not Reordered", "Overlay", "Nukta", "Kana Voicing", "Virama", "Attached Below Left", "Attached Below", "Attached Above", "Attached Above Right", "Below Left", "Below", "Below Right", "Left", "Right", "Above Left", "Above", "Above Right", "Double Below", "Double Above", "Iota Subscript" }; const char * uc_combining_class_long_name (int ccc) { if (ccc >= 0) { int index; if (ccc < 10) index = u_combining_class_index_part1[ccc]; else if (ccc >= 200 && ccc < 241) index = u_combining_class_index_part2[ccc - 200]; else return NULL; if (index >= 0) { if (index < sizeof (u_combining_class_long_name) / sizeof (u_combining_class_long_name[0])) return u_combining_class_long_name[index]; else abort (); } } return NULL; } �������gnulib-20210822~d383792/lib/unictype/combiningclass_name.c������������������������������������������0000664�0000000�0000000�00000006274�14110572173�0023055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. Copyright (C) 2002, 2006-2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include <stdlib.h> static const signed char u_combining_class_index_part1[10] = { 0, /* Not Reordered */ 1, /* Overlay */ -1, -1, -1, -1, -1, 2, /* Nukta */ 3, /* Kana Voicing */ 4 /* Virama */ }; static const signed char u_combining_class_index_part2[241 - 200] = { 5, /* Attached Below Left */ -1, 6, /* Attached Below */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, /* Attached Above */ -1, 8, /* Attached Above Right */ -1, 9, /* Below Left */ -1, 10, /* Below */ -1, 11, /* Below Right */ -1, 12, /* Left */ -1, 13, /* Right */ -1, 14, /* Above Left */ -1, 15, /* Above */ -1, 16, /* Above Right */ 17, /* Double Below */ 18, /* Double Above */ -1, -1, -1, -1, -1, 19 /* Iota Subscript */ }; static const char u_combining_class_name[20][5] = { "NR", /* Not Reordered */ "OV", /* Overlay */ "NK", /* Nukta */ "KV", /* Kana Voicing */ "VR", /* Virama */ "ATBL", /* Attached Below Left */ "ATB", /* Attached Below */ "ATA", /* Attached Above */ "ATAR", /* Attached Above Right */ "BL", /* Below Left */ "B", /* Below */ "BR", /* Below Right */ "L", /* Left */ "R", /* Right */ "AL", /* Above Left */ "A", /* Above */ "AR", /* Above Right */ "DB", /* Double Below */ "DA", /* Double Above */ "IS" /* Iota Subscript */ }; const char * uc_combining_class_name (int ccc) { if (ccc >= 0) { int index; if (ccc < 10) index = u_combining_class_index_part1[ccc]; else if (ccc >= 200 && ccc < 241) index = u_combining_class_index_part2[ccc - 200]; else return NULL; if (index >= 0) { if (index < sizeof (u_combining_class_name) / sizeof (u_combining_class_name[0])) return u_combining_class_name[index]; else abort (); } } return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_alnum.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_alnum table. */ #include "ctype_alnum.h" bool uc_is_alnum (ucs4_t uc) { return bitmap_lookup (&u_is_alnum, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_alnum.h��������������������������������������������������0000664�0000000�0000000�00000101131�14110572173�0021373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[67 << 4]; } u_is_alnum = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, -1, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 752, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 816, -1, 4 + 384 * sizeof (short) / sizeof (int) + 832, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 848, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 912, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 976, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 992, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1008, 4 + 384 * sizeof (short) / sizeof (int) + 1024, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1040, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1056, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9FFFC060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFFFFU, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFEFFC3U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x0003FFC3U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001CFFC0U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x0200FFC3U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x0002FFC3U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x0000FFC0U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x0000FFC3U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x0006FFC3U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC00FFC3U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x0000FFC0U, 0xFFFFFFFEU, 0x07FF7FFFU, 0x03FF7FBFU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF3FF005FU, 0x00000000U, 0x00000001U, 0x000003FFU, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F03FFU, 0xFFE1C062U, 0x03FF4003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x000003FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x03FF03FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x03FF03FFU, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x03FF0FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFFFFC001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x0063DE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBF50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x03FF0000U, 0x28FC0000U, 0xFFFFFFFFU, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x03FF8000U, 0x7FFFFFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x03FF0FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x0000FFC0U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFF8U, 0xFFC0007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x17FF001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x03FF0000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x03FF0780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF00B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF0010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x000003FFU, 0x00000000U, 0x03FFFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x03FF0001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF1FFFU, 0xFFFF03FFU, 0xFFFF03FFU, 0x000007FFU, 0x00000020U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_alpha.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_alpha table. */ #include "ctype_alpha.h" bool uc_is_alpha (ucs4_t uc) { return bitmap_lookup (&u_is_alpha, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_alpha.h��������������������������������������������������0000664�0000000�0000000�00000101131�14110572173�0021344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[67 << 4]; } u_is_alpha = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, -1, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 752, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 816, -1, 4 + 384 * sizeof (short) / sizeof (int) + 832, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 848, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 912, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 976, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 992, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1008, 4 + 384 * sizeof (short) / sizeof (int) + 1024, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1040, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1056, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9FFFC060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFFFFU, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFEFFC3U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x0003FFC3U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001CFFC0U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x0200FFC3U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x0002FFC3U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x0000FFC0U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x0000FFC3U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x0006FFC3U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC00FFC3U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x0000FFC0U, 0xFFFFFFFEU, 0x07FF7FFFU, 0x03FF7FBFU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF3FF005FU, 0x00000000U, 0x00000001U, 0x000003FFU, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F03FFU, 0xFFE1C062U, 0x03FF4003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x000003FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x03FF03FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x03FF03FFU, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x03FF0FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFFFFC001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x0063DE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBF50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x03FF0000U, 0x28FC0000U, 0xFFFFFFFFU, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x03FF8000U, 0x7FFFFFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x03FF0FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x0000FFC0U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFF8U, 0xFFC0007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x17FF001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x03FF0000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x03FF0780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF00B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF0010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x000003FFU, 0x00000000U, 0x03FFFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x03FF0001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF1FFFU, 0xFFFF03FFU, 0xFFFF03FFU, 0x000007FFU, 0x00000020U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_blank.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_blank table. */ #include "ctype_blank.h" bool uc_is_blank (ucs4_t uc) { return bitmap_lookup (&u_is_blank, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_blank.h��������������������������������������������������0000664�0000000�0000000�00000007774�14110572173�0021370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_is_blank = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000200U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000077FU, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����gnulib-20210822~d383792/lib/unictype/ctype_cntrl.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_cntrl table. */ #include "ctype_cntrl.h" bool uc_is_cntrl (ucs4_t uc) { return bitmap_lookup (&u_is_cntrl, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_cntrl.h��������������������������������������������������0000664�0000000�0000000�00000006734�14110572173�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_is_cntrl = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_digit.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_digit table. */ #include "ctype_digit.h" bool uc_is_digit (ucs4_t uc) { return bitmap_lookup (&u_is_digit, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_digit.h��������������������������������������������������0000664�0000000�0000000�00000006314�14110572173�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_is_digit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_graph.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_graph table. */ #include "ctype_graph.h" bool uc_is_graph (ucs4_t uc) { return bitmap_lookup (&u_is_graph, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_graph.h��������������������������������������������������0000664�0000000�0000000�00000132515�14110572173�0021372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[5 << 7]; unsigned int level3[78 << 4]; } u_is_graph = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 512 }, { 18 + 640 * sizeof (short) / sizeof (int) + 0, 18 + 640 * sizeof (short) / sizeof (int) + 16, 18 + 640 * sizeof (short) / sizeof (int) + 32, 18 + 640 * sizeof (short) / sizeof (int) + 48, 18 + 640 * sizeof (short) / sizeof (int) + 64, 18 + 640 * sizeof (short) / sizeof (int) + 80, 18 + 640 * sizeof (short) / sizeof (int) + 96, 18 + 640 * sizeof (short) / sizeof (int) + 112, 18 + 640 * sizeof (short) / sizeof (int) + 128, 18 + 640 * sizeof (short) / sizeof (int) + 144, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 176, 18 + 640 * sizeof (short) / sizeof (int) + 192, 18 + 640 * sizeof (short) / sizeof (int) + 208, 18 + 640 * sizeof (short) / sizeof (int) + 224, 18 + 640 * sizeof (short) / sizeof (int) + 240, 18 + 640 * sizeof (short) / sizeof (int) + 256, 18 + 640 * sizeof (short) / sizeof (int) + 272, 18 + 640 * sizeof (short) / sizeof (int) + 288, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 304, 18 + 640 * sizeof (short) / sizeof (int) + 320, 18 + 640 * sizeof (short) / sizeof (int) + 336, 18 + 640 * sizeof (short) / sizeof (int) + 352, 18 + 640 * sizeof (short) / sizeof (int) + 368, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 384, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 400, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 416, 18 + 640 * sizeof (short) / sizeof (int) + 432, 18 + 640 * sizeof (short) / sizeof (int) + 448, 18 + 640 * sizeof (short) / sizeof (int) + 464, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 512, 18 + 640 * sizeof (short) / sizeof (int) + 528, 18 + 640 * sizeof (short) / sizeof (int) + 544, 18 + 640 * sizeof (short) / sizeof (int) + 560, 18 + 640 * sizeof (short) / sizeof (int) + 576, 18 + 640 * sizeof (short) / sizeof (int) + 592, 18 + 640 * sizeof (short) / sizeof (int) + 608, 18 + 640 * sizeof (short) / sizeof (int) + 624, 18 + 640 * sizeof (short) / sizeof (int) + 640, 18 + 640 * sizeof (short) / sizeof (int) + 656, 18 + 640 * sizeof (short) / sizeof (int) + 672, 18 + 640 * sizeof (short) / sizeof (int) + 688, 18 + 640 * sizeof (short) / sizeof (int) + 704, 18 + 640 * sizeof (short) / sizeof (int) + 720, 18 + 640 * sizeof (short) / sizeof (int) + 736, 18 + 640 * sizeof (short) / sizeof (int) + 752, 18 + 640 * sizeof (short) / sizeof (int) + 768, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 848, -1, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 880, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 912, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 944, 18 + 640 * sizeof (short) / sizeof (int) + 960, 18 + 640 * sizeof (short) / sizeof (int) + 976, 18 + 640 * sizeof (short) / sizeof (int) + 992, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1008, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1024, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1040, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1056, 18 + 640 * sizeof (short) / sizeof (int) + 1072, 18 + 640 * sizeof (short) / sizeof (int) + 1088, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1104, 18 + 640 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1136, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1152, 18 + 640 * sizeof (short) / sizeof (int) + 1168, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1200, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1232 }, { 0x00000000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFCFFFFFFU, 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFEU, 0xFFFEE6FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x001F07FFU, 0xDFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFBFFFU, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0x7FFF3FFFU, 0x4FFFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0xFFF00000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x0FFFFFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x003FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0x0203FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0C0399FU, 0x00FFFFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x07FFFFC0U, 0xFFFDDFEFU, 0xE3FFFDFFU, 0x07603DDFU, 0xFF00FFCFU, 0xFFFDDFEFU, 0xF3EFFDFFU, 0x40603DDFU, 0x0006FFCFU, 0xFFFDDFEEU, 0xE7FFFFFFU, 0xFFF0FDDFU, 0xFFFFFFCFU, 0xFC7FFFECU, 0x2FFBFFFFU, 0xFF5F847FU, 0x001CFFC0U, 0xFFFFFFFEU, 0x87FFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0xFEF02596U, 0x3BFFECAEU, 0xF3FF3F5FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFFFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x1FFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x001FDFFFU, 0x007FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x03FF03FFU, 0x03FF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFF1U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0x7FFF3FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF00FFFFFU, 0xFFFFFFFFU, 0xF8FFFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFF00FFU, 0x037FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, 0xFFFFF880U, 0xFFFFFCFFU, 0x7FFFFFFFU, 0xFFF3FFDFU, 0x1FFF7FFFU, 0x7FFFFFFFU, 0xFFFF0000U, 0x0001FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0FFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800180FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x03FF0FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC03FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FFBFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0xF3FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000007U, 0x007FFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x3FFF0000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFDF0F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x3E007F7FU, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFF07FFU, 0x07FFFFFFU, 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000800FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFEEFF06FU, 0x870FFFFFU, 0x01FF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF87FU, 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFC3FFFU, 0x8000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF000FU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0x001FFFFEU, 0xFFFBFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xF3EDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x2BFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF001FU, 0x00001FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0x000003FFU, 0x00000000U, 0xE3FFFFFFU, 0xFFFF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0xFFFF003FU, 0xFFFF1FFFU, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x0000C3FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x003F3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFBFF003FU, 0xE0FFFFFBU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0xF3FF01FFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF07FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFF1FFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_lower.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_lower table. */ #include "ctype_lower.h" bool uc_is_lower (ucs4_t uc) { return bitmap_lookup (&u_is_lower, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_lower.h��������������������������������������������������0000664�0000000�0000000�00000021166�14110572173�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[16 << 4]; } u_is_lower = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x54AAAAAAU, 0xAAAAA955U, 0xD4AAAAAAU, 0x46241129U, 0xA251212AU, 0xB5555B60U, 0xAA2CAAAAU, 0xAAAAAAAAU, 0x900AAAA8U, 0x1ADFAA85U, 0x20269F6BU, 0x60041F89U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x388A0000U, 0x00000000U, 0xFFFEF000U, 0xAAE37FFFU, 0x092FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x082AAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00AA003FU, 0x3FFF00FFU, 0x00FF00FFU, 0x400B00FFU, 0x00030008U, 0x00080023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0xFFFF0000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFFFFFFU, 0x00481562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008500AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x0AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAA8AAA8U, 0xAAAAAAAAU, 0x9400AAAAU, 0xAA8A10AAU, 0x00A002AAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_print.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_print table. */ #include "ctype_print.h" bool uc_is_print (ucs4_t uc) { return bitmap_lookup (&u_is_print, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_print.h��������������������������������������������������0000664�0000000�0000000�00000132515�14110572173�0021425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[5 << 7]; unsigned int level3[78 << 4]; } u_is_print = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 512 }, { 18 + 640 * sizeof (short) / sizeof (int) + 0, 18 + 640 * sizeof (short) / sizeof (int) + 16, 18 + 640 * sizeof (short) / sizeof (int) + 32, 18 + 640 * sizeof (short) / sizeof (int) + 48, 18 + 640 * sizeof (short) / sizeof (int) + 64, 18 + 640 * sizeof (short) / sizeof (int) + 80, 18 + 640 * sizeof (short) / sizeof (int) + 96, 18 + 640 * sizeof (short) / sizeof (int) + 112, 18 + 640 * sizeof (short) / sizeof (int) + 128, 18 + 640 * sizeof (short) / sizeof (int) + 144, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 176, 18 + 640 * sizeof (short) / sizeof (int) + 192, 18 + 640 * sizeof (short) / sizeof (int) + 208, 18 + 640 * sizeof (short) / sizeof (int) + 224, 18 + 640 * sizeof (short) / sizeof (int) + 240, 18 + 640 * sizeof (short) / sizeof (int) + 256, 18 + 640 * sizeof (short) / sizeof (int) + 272, 18 + 640 * sizeof (short) / sizeof (int) + 288, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 304, 18 + 640 * sizeof (short) / sizeof (int) + 320, 18 + 640 * sizeof (short) / sizeof (int) + 336, 18 + 640 * sizeof (short) / sizeof (int) + 352, 18 + 640 * sizeof (short) / sizeof (int) + 368, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 384, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 400, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 416, 18 + 640 * sizeof (short) / sizeof (int) + 432, 18 + 640 * sizeof (short) / sizeof (int) + 448, 18 + 640 * sizeof (short) / sizeof (int) + 464, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 512, 18 + 640 * sizeof (short) / sizeof (int) + 528, 18 + 640 * sizeof (short) / sizeof (int) + 544, 18 + 640 * sizeof (short) / sizeof (int) + 560, 18 + 640 * sizeof (short) / sizeof (int) + 576, 18 + 640 * sizeof (short) / sizeof (int) + 592, 18 + 640 * sizeof (short) / sizeof (int) + 608, 18 + 640 * sizeof (short) / sizeof (int) + 624, 18 + 640 * sizeof (short) / sizeof (int) + 640, 18 + 640 * sizeof (short) / sizeof (int) + 656, 18 + 640 * sizeof (short) / sizeof (int) + 672, 18 + 640 * sizeof (short) / sizeof (int) + 688, 18 + 640 * sizeof (short) / sizeof (int) + 704, 18 + 640 * sizeof (short) / sizeof (int) + 720, 18 + 640 * sizeof (short) / sizeof (int) + 736, 18 + 640 * sizeof (short) / sizeof (int) + 752, 18 + 640 * sizeof (short) / sizeof (int) + 768, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 848, -1, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 880, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 912, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 944, 18 + 640 * sizeof (short) / sizeof (int) + 960, 18 + 640 * sizeof (short) / sizeof (int) + 976, 18 + 640 * sizeof (short) / sizeof (int) + 992, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1008, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1024, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1040, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1056, 18 + 640 * sizeof (short) / sizeof (int) + 1072, 18 + 640 * sizeof (short) / sizeof (int) + 1088, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1104, 18 + 640 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1136, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1152, 18 + 640 * sizeof (short) / sizeof (int) + 1168, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1200, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 1216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 1232 }, { 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFCFFFFFFU, 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFEU, 0xFFFEE6FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x001F07FFU, 0xDFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFBFFFU, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0x7FFF3FFFU, 0x4FFFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0xFFF00000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x0FFFFFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x003FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0x0203FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0C0399FU, 0x00FFFFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x07FFFFC0U, 0xFFFDDFEFU, 0xE3FFFDFFU, 0x07603DDFU, 0xFF00FFCFU, 0xFFFDDFEFU, 0xF3EFFDFFU, 0x40603DDFU, 0x0006FFCFU, 0xFFFDDFEEU, 0xE7FFFFFFU, 0xFFF0FDDFU, 0xFFFFFFCFU, 0xFC7FFFECU, 0x2FFBFFFFU, 0xFF5F847FU, 0x001CFFC0U, 0xFFFFFFFEU, 0x87FFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0xFEF02596U, 0x3BFFECAEU, 0xF3FF3F5FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFFFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x1FFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x001FDFFFU, 0x007FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x03FF03FFU, 0x03FF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFF1U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0x7FFF3FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF00FFFFFU, 0xFFFFFFFFU, 0xF8FFFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFF00FFU, 0x037FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, 0xFFFFFFFFU, 0xFFFFFCFFU, 0xFFFFFFFFU, 0xFFF3FFDFU, 0x1FFF7FFFU, 0x7FFFFFFFU, 0xFFFF0000U, 0x0001FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0FFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800180FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x03FF0FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC03FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FFBFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0xF3FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000007U, 0x007FFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x3FFF0000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFDF0F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x3E007F7FU, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFF07FFU, 0x07FFFFFFU, 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000800FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFEEFF06FU, 0x870FFFFFU, 0x01FF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF87FU, 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFC3FFFU, 0x8000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF000FU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0x001FFFFEU, 0xFFFBFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xF3EDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x2BFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF001FU, 0x00001FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0x000003FFU, 0x00000000U, 0xE3FFFFFFU, 0xFFFF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0xFFFF003FU, 0xFFFF1FFFU, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x0000C3FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x003F3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFBFF003FU, 0xE0FFFFFBU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0xF3FF01FFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF07FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFF1FFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_punct.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_punct table. */ #include "ctype_punct.h" bool uc_is_punct (ucs4_t uc) { return bitmap_lookup (&u_is_punct, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_punct.h��������������������������������������������������0000664�0000000�0000000�00000076065�14110572173�0021431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[4 << 7]; unsigned int level3[64 << 4]; } u_is_punct = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384 }, { 18 + 512 * sizeof (short) / sizeof (int) + 0, 18 + 512 * sizeof (short) / sizeof (int) + 16, 18 + 512 * sizeof (short) / sizeof (int) + 32, 18 + 512 * sizeof (short) / sizeof (int) + 48, 18 + 512 * sizeof (short) / sizeof (int) + 64, 18 + 512 * sizeof (short) / sizeof (int) + 80, 18 + 512 * sizeof (short) / sizeof (int) + 96, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 128, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 160, 18 + 512 * sizeof (short) / sizeof (int) + 176, 18 + 512 * sizeof (short) / sizeof (int) + 192, 18 + 512 * sizeof (short) / sizeof (int) + 208, 18 + 512 * sizeof (short) / sizeof (int) + 224, 18 + 512 * sizeof (short) / sizeof (int) + 240, 18 + 512 * sizeof (short) / sizeof (int) + 256, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 288, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 336, 18 + 512 * sizeof (short) / sizeof (int) + 352, 18 + 512 * sizeof (short) / sizeof (int) + 368, 18 + 512 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 416, 18 + 512 * sizeof (short) / sizeof (int) + 432, 18 + 512 * sizeof (short) / sizeof (int) + 448, 18 + 512 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 480, 18 + 512 * sizeof (short) / sizeof (int) + 496, 18 + 512 * sizeof (short) / sizeof (int) + 512, 18 + 512 * sizeof (short) / sizeof (int) + 528, 18 + 512 * sizeof (short) / sizeof (int) + 544, 18 + 512 * sizeof (short) / sizeof (int) + 560, 18 + 512 * sizeof (short) / sizeof (int) + 576, -1, 18 + 512 * sizeof (short) / sizeof (int) + 592, 18 + 512 * sizeof (short) / sizeof (int) + 608, 18 + 512 * sizeof (short) / sizeof (int) + 624, 18 + 512 * sizeof (short) / sizeof (int) + 640, 18 + 512 * sizeof (short) / sizeof (int) + 656, 18 + 512 * sizeof (short) / sizeof (int) + 672, 18 + 512 * sizeof (short) / sizeof (int) + 688, 18 + 512 * sizeof (short) / sizeof (int) + 704, 18 + 512 * sizeof (short) / sizeof (int) + 720, -1, 18 + 512 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 768, -1, 18 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 816, 18 + 512 * sizeof (short) / sizeof (int) + 832, -1, 18 + 512 * sizeof (short) / sizeof (int) + 848, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 864, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 896, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 912, 18 + 512 * sizeof (short) / sizeof (int) + 928, 18 + 512 * sizeof (short) / sizeof (int) + 944, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 960, 18 + 512 * sizeof (short) / sizeof (int) + 976, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 1008 }, { 0x00000000U, 0xFC00FFFEU, 0xF8000001U, 0x78000001U, 0x00000000U, 0xFBDFFBFFU, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC003CU, 0xFFFFAFE0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFDFU, 0x4020FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0xFFFEE600U, 0xFFFFFFFFU, 0x000000FFU, 0x00180000U, 0xDFFFFFFFU, 0x00000000U, 0xFFFFF800U, 0x00013C00U, 0x00000000U, 0x00000000U, 0xFFD00000U, 0x60003F9FU, 0x0002BFFFU, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x03CFF800U, 0xFBC00000U, 0x7FFF3EEFU, 0x4E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFFU, 0x0000000FU, 0xDC000000U, 0x00FEFFFFU, 0x0001003CU, 0x0000000EU, 0xD0000000U, 0x0080399FU, 0x0FFC000CU, 0x0000000EU, 0xD0000000U, 0x00023987U, 0x00230000U, 0x0000000EU, 0xD0000000U, 0x00003BBFU, 0x0003000CU, 0x0000000EU, 0xD0000000U, 0x00C0399FU, 0x00FD000CU, 0x00000004U, 0xC0000000U, 0x00803DC7U, 0x07FF0000U, 0x0000000FU, 0xC0000000U, 0x00603DDFU, 0xFF00000CU, 0x0000000EU, 0xD0000000U, 0x00603DDFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x7F80BDDFU, 0x03FF000CU, 0x0000000CU, 0x00000000U, 0xFF5F8400U, 0x001C0000U, 0x00000000U, 0x80008000U, 0x0C008040U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0xFFFFFFFEU, 0xFFFFFC00U, 0x00000000U, 0xFFFE0000U, 0xFEFFE0FFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0x00000000U, 0x7FFFF800U, 0xC3C0FC00U, 0x001E3F9DU, 0xFC00BFFCU, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x1FFFFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x001C0000U, 0x007C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0xFFF00000U, 0x2F7FFFFFU, 0x03FF0000U, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFF0FFFU, 0x00000031U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC4000000U, 0xFFFFFFFFU, 0xCF800000U, 0x00000000U, 0x7FE00000U, 0x9FFFFFFFU, 0x00000000U, 0x7FFF3F7FU, 0x00000000U, 0x00000000U, 0x0000001FU, 0xFFF00000U, 0xFC00001FU, 0x1FFFFFFFU, 0x00000007U, 0x00003FFEU, 0x00000000U, 0xF00FFFC0U, 0x00000000U, 0xF8FFFFF0U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0xFFFF00FFU, 0x031C21FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0xFFFFF880U, 0xFFFFFCFFU, 0x7FFFFFFFU, 0x7FF1FFDFU, 0x00007FFFU, 0x7FFFFFFFU, 0xFFFF0000U, 0x0001FFFFU, 0xC1D0037BU, 0x0C0040AFU, 0xFFFFBC1FU, 0x00000000U, 0xFFFF0E00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFE0387E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x0000001FU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0xFFFFFF1EU, 0xE0C1FC01U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000001U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000000U, 0xFFFFFFFFU, 0x0000000FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000007FU, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x7FFF8000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00FF0000U, 0x007FFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x03FF0FF8U, 0x00000000U, 0x00F00000U, 0x00000003U, 0xFFF00000U, 0x0000C03FU, 0x1703FFFFU, 0x00000000U, 0x0000FFC0U, 0x800FFF80U, 0x00000000U, 0x0000000FU, 0xFFF80000U, 0xC0003FFFU, 0x00000020U, 0x00000000U, 0x007FFE00U, 0xF0003008U, 0x3B800000U, 0x00000000U, 0xC19D0000U, 0xC0000002U, 0x0063F800U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003FF8U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0x00000F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0xFC00FFFEU, 0xF8000001U, 0xF8000001U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E007F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF87U, 0xFF8FFFFFU, 0x00000000U, 0xFFE00000U, 0x0FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFFU, 0x00000000U, 0x0000000FU, 0x00000000U, 0x07C00000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFF800000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0xF8000000U, 0x8FC00000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x0000F06EU, 0x87000000U, 0x01FF00FFU, 0xE0000000U, 0xE0000000U, 0x00000000U, 0x00000100U, 0x007FF860U, 0x00000000U, 0xFE000000U, 0xFF000000U, 0xFF000000U, 0x1E000000U, 0x0000FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0xFF000000U, 0xFFFC3FFFU, 0x8000003FU, 0x00000007U, 0xFFFF0000U, 0x00000003U, 0x00000000U, 0x00000007U, 0x001FFF80U, 0x0000000FU, 0x00380000U, 0x00000007U, 0xFFF80000U, 0xE8003FE1U, 0x001FFFFEU, 0x00000000U, 0x7FFFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x80000000U, 0x000007FFU, 0x0000000FU, 0xD0000000U, 0x0080399FU, 0x001F1FCCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x2800F87FU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000004FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF3F8000U, 0x30FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000000FU, 0x00001FFFU, 0x00000000U, 0x00FFF800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0xFC000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF7F8000U, 0xFC00003EU, 0x00031FFFU, 0xFFFC0000U, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0xFFFF0000U, 0xF8000030U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0x7FFFFFFFU, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000002U, 0x08000000U, 0x00200000U, 0x00200000U, 0x00008000U, 0x00008000U, 0x00000200U, 0x00000200U, 0x00000008U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007FFF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC00007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0x00001FFFU, 0x00006000U, 0x0000FC00U, 0x00000C00U, 0xFFFFF800U, 0x00001FDFU, 0x00000000U, 0x00000000U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_space.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_space table. */ #include "ctype_space.h" bool uc_is_space (ucs4_t uc) { return bitmap_lookup (&u_is_space, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_space.h��������������������������������������������������0000664�0000000�0000000�00000007774�14110572173�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_is_space = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003E00U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000077FU, 0x00000300U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����gnulib-20210822~d383792/lib/unictype/ctype_upper.c��������������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0021421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_upper table. */ #include "ctype_upper.h" bool uc_is_upper (ucs4_t uc) { return bitmap_lookup (&u_is_upper, uc); } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_upper.h��������������������������������������������������0000664�0000000�0000000�00000020546�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[15 << 4]; } u_is_upper = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555554AAU, 0x2B555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAADB0U, 0x55D65555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x55008000U, 0xE6905555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x40155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0xFF00FF00U, 0x1F00FF00U, 0x0F001F00U, 0x1F001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040C40U, 0x00000000U, 0x0000FFFFU, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x005F7D55U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_xdigit.c�������������������������������������������������0000664�0000000�0000000�00000002671�14110572173�0021553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_xdigit table. */ #include "ctype_xdigit.h" bool uc_is_xdigit (ucs4_t uc) { return bitmap_lookup (&u_is_xdigit, uc); } �����������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/ctype_xdigit.h�������������������������������������������������0000664�0000000�0000000�00000006315�14110572173�0021557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_is_xdigit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x0000007EU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/decdigit.c�����������������������������������������������������0000664�0000000�0000000�00000004010�14110572173�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of decimal digit Unicode characters. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_decdigit table. */ #include "decdigit.h" int uc_decimal_value (ucs4_t uc) { unsigned int index1 = uc >> decdigit_header_0; if (index1 < decdigit_header_1) { int lookup1 = u_decdigit.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> decdigit_header_2) & decdigit_header_3; int lookup2 = u_decdigit.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & decdigit_header_4) + lookup2; /* level3 contains 4-bit values. */ unsigned int lookup3 = (u_decdigit.level3[index3>>1] >> ((index3 % 2) * 4)) & 0x0f; return (int) lookup3 - 1; } } } return -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/decdigit.h�����������������������������������������������������0000664�0000000�0000000�00000036227�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decimal digit values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define decdigit_header_0 16 #define decdigit_header_1 2 #define decdigit_header_2 7 #define decdigit_header_3 511 #define decdigit_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; unsigned char level3[15 << 6]; } u_decdigit = { { 0, 512 }, { 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 128, 256, -1, 384, -1, -1, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 640, 640, 768, -1, 384, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 128, 896, -1, 1024, 640, -1, 1152, 640, 0, 1280, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 768, -1, -1, -1, -1, 640, 1408, 1536, 640, -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, 256, 1664, 640, -1, 256, -1, -1, 640, 640, -1, -1, 640, 384, 0, -1, -1, 128, -1, -1, -1, -1, -1, -1, 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 128, -1, 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1792, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/digit.c��������������������������������������������������������0000664�0000000�0000000�00000003740�14110572173�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of digit Unicode characters. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_digit table. */ #include "digit.h" int uc_digit_value (ucs4_t uc) { unsigned int index1 = uc >> digit_header_0; if (index1 < digit_header_1) { int lookup1 = u_digit.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> digit_header_2) & digit_header_3; int lookup2 = u_digit.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & digit_header_4) + lookup2; /* level3 contains 4-bit values. */ unsigned int lookup3 = (u_digit.level3[index3>>1] >> ((index3 % 2) * 4)) & 0x0f; return (int) lookup3 - 1; } } } return -1; } ��������������������������������gnulib-20210822~d383792/lib/unictype/digit.h��������������������������������������������������������0000664�0000000�0000000�00000047775�14110572173�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Digit values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define digit_header_0 16 #define digit_header_1 2 #define digit_header_2 7 #define digit_header_3 511 #define digit_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; unsigned char level3[27 << 6]; } u_digit = { { 0, 512 }, { 0, 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 384, -1, 512, -1, -1, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 768, 768, 896, -1, 512, 1024, -1, -1, -1, -1, 1152, -1, -1, -1, -1, -1, -1, -1, -1, 256, 1024, -1, 1280, 1408, -1, 1536, 768, 0, 1664, -1, -1, -1, -1, -1, -1, -1, 1792, 1920, -1, -1, -1, -1, -1, -1, 2048, 2176, -1, -1, -1, -1, 2304, 2432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 896, -1, -1, -1, -1, 768, 1920, 2560, 768, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2688, -1, -1, -1, -1, -1, -1, -1, 2816, -1, -1, -1, 2944, 384, 3072, 768, -1, 384, -1, -1, 768, 768, -1, -1, 768, 512, 0, -1, -1, 256, -1, -1, -1, -1, -1, -1, 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3200, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x87, 0xa9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x11, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; ���gnulib-20210822~d383792/lib/unictype/identsyntaxmap.h�����������������������������������������������0000664�0000000�0000000�00000003710�14110572173�0022127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Three-level bitmap lookup. Copyright (C) 2000-2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2000-2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ static inline int identsyntax_lookup (ucs4_t uc); static inline int identsyntax_lookup (ucs4_t uc) { unsigned int index1 = uc >> identsyntax_header_0; if (index1 < identsyntax_header_1) { int lookup1 = TABLE.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> identsyntax_header_2) & identsyntax_header_3; int lookup2 = TABLE.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & identsyntax_header_4) + lookup2; /* level3 contains 2-bit values. */ unsigned int lookup3 = TABLE.level3[index3 >> 3]; return (lookup3 >> (2 * (index3 & 7))) & 3; } } } return UC_IDENTIFIER_INVALID; } ��������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_byname.c������������������������������������������0000664�0000000�0000000�00000004256�14110572173�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU 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 "unictype/joininggroup_byname.h" int uc_joining_group_byname (const char *joining_group_name) { size_t len; len = strlen (joining_group_name); if (len <= MAX_WORD_LENGTH) { char buf[MAX_WORD_LENGTH + 1]; const struct named_joining_group *found; /* Copy joining_group_name into buf, converting '_' and '-' to ' '. */ { const char *p = joining_group_name; char *q = buf; for (;; p++, q++) { char c = *p; if (c == '_' || c == '-') c = ' '; *q = c; if (c == '\0') break; } } /* Here q == buf + len. */ /* Do a hash table lookup, with case-insensitive comparison. */ found = uc_joining_group_lookup (buf, len); if (found != NULL) return found->joining_group; } /* Invalid joining group name. */ return -1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_byname.gperf��������������������������������������0000664�0000000�0000000�00000015215�14110572173�0024003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_joining_group { int name; int joining_group; }; %struct-type %ignore-case %language=ANSI-C %define hash-function-name joining_group_hash %define lookup-function-name uc_joining_group_lookup %readonly-tables %global-table %define word-array-name joining_group_names %pic %define string-pool-name joining_group_stringpool %% No Joining Group, UC_JOINING_GROUP_NONE NoJoiningGroup, UC_JOINING_GROUP_NONE Ain, UC_JOINING_GROUP_AIN Alaph, UC_JOINING_GROUP_ALAPH Alef, UC_JOINING_GROUP_ALEF Beh, UC_JOINING_GROUP_BEH Beth, UC_JOINING_GROUP_BETH Burushaski Yeh Barree, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE BurushaskiYehBarree, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE Dal, UC_JOINING_GROUP_DAL Dalath Rish, UC_JOINING_GROUP_DALATH_RISH DalathRish, UC_JOINING_GROUP_DALATH_RISH E, UC_JOINING_GROUP_E Farsi Yeh, UC_JOINING_GROUP_FARSI_YEH FarsiYeh, UC_JOINING_GROUP_FARSI_YEH Fe, UC_JOINING_GROUP_FE Feh, UC_JOINING_GROUP_FEH Final Semkath, UC_JOINING_GROUP_FINAL_SEMKATH FinalSemkath, UC_JOINING_GROUP_FINAL_SEMKATH Gaf, UC_JOINING_GROUP_GAF Gamal, UC_JOINING_GROUP_GAMAL Hah, UC_JOINING_GROUP_HAH He, UC_JOINING_GROUP_HE Heh, UC_JOINING_GROUP_HEH Heh Goal, UC_JOINING_GROUP_HEH_GOAL HehGoal, UC_JOINING_GROUP_HEH_GOAL Heth, UC_JOINING_GROUP_HETH Kaf, UC_JOINING_GROUP_KAF Kaph, UC_JOINING_GROUP_KAPH Khaph, UC_JOINING_GROUP_KHAPH Knotted Heh, UC_JOINING_GROUP_KNOTTED_HEH KnottedHeh, UC_JOINING_GROUP_KNOTTED_HEH Lam, UC_JOINING_GROUP_LAM Lamadh, UC_JOINING_GROUP_LAMADH Meem, UC_JOINING_GROUP_MEEM Mim, UC_JOINING_GROUP_MIM Noon, UC_JOINING_GROUP_NOON Nun, UC_JOINING_GROUP_NUN Nya, UC_JOINING_GROUP_NYA Pe, UC_JOINING_GROUP_PE Qaf, UC_JOINING_GROUP_QAF Qaph, UC_JOINING_GROUP_QAPH Reh, UC_JOINING_GROUP_REH Reversed Pe, UC_JOINING_GROUP_REVERSED_PE ReversedPe, UC_JOINING_GROUP_REVERSED_PE Sad, UC_JOINING_GROUP_SAD Sadhe, UC_JOINING_GROUP_SADHE Seen, UC_JOINING_GROUP_SEEN Semkath, UC_JOINING_GROUP_SEMKATH Shin, UC_JOINING_GROUP_SHIN Swash Kaf, UC_JOINING_GROUP_SWASH_KAF SwashKaf, UC_JOINING_GROUP_SWASH_KAF Syriac Waw, UC_JOINING_GROUP_SYRIAC_WAW SyriacWaw, UC_JOINING_GROUP_SYRIAC_WAW Tah, UC_JOINING_GROUP_TAH Taw, UC_JOINING_GROUP_TAW Teh Marbuta, UC_JOINING_GROUP_TEH_MARBUTA TehMarbuta, UC_JOINING_GROUP_TEH_MARBUTA Teh Marbuta Goal, UC_JOINING_GROUP_TEH_MARBUTA_GOAL TehMarbutaGoal, UC_JOINING_GROUP_TEH_MARBUTA_GOAL Teth, UC_JOINING_GROUP_TETH Waw, UC_JOINING_GROUP_WAW Yeh, UC_JOINING_GROUP_YEH Yeh Barree, UC_JOINING_GROUP_YEH_BARREE YehBarree, UC_JOINING_GROUP_YEH_BARREE Yeh with tail, UC_JOINING_GROUP_YEH_WITH_TAIL YehWithTail, UC_JOINING_GROUP_YEH_WITH_TAIL Yudh, UC_JOINING_GROUP_YUDH Yudh He, UC_JOINING_GROUP_YUDH_HE YudhHe, UC_JOINING_GROUP_YUDH_HE Zain, UC_JOINING_GROUP_ZAIN Zhain, UC_JOINING_GROUP_ZHAIN Rohingya Yeh, UC_JOINING_GROUP_ROHINGYA_YEH RohingyaYeh, UC_JOINING_GROUP_ROHINGYA_YEH Straight Waw, UC_JOINING_GROUP_STRAIGHT_WAW StraightWaw, UC_JOINING_GROUP_STRAIGHT_WAW Manichaean Aleph, UC_JOINING_GROUP_MANICHAEAN_ALEPH ManichaeanAleph, UC_JOINING_GROUP_MANICHAEAN_ALEPH Manichaean Beth, UC_JOINING_GROUP_MANICHAEAN_BETH ManichaeanBeth, UC_JOINING_GROUP_MANICHAEAN_BETH Manichaean Gimel, UC_JOINING_GROUP_MANICHAEAN_GIMEL ManichaeanGimel, UC_JOINING_GROUP_MANICHAEAN_GIMEL Manichaean Daleth, UC_JOINING_GROUP_MANICHAEAN_DALETH ManichaeanDaleth, UC_JOINING_GROUP_MANICHAEAN_DALETH Manichaean Waw, UC_JOINING_GROUP_MANICHAEAN_WAW ManichaeanWaw, UC_JOINING_GROUP_MANICHAEAN_WAW Manichaean Zayin, UC_JOINING_GROUP_MANICHAEAN_ZAYIN ManichaeanZayin, UC_JOINING_GROUP_MANICHAEAN_ZAYIN Manichaean Heth, UC_JOINING_GROUP_MANICHAEAN_HETH ManichaeanHeth, UC_JOINING_GROUP_MANICHAEAN_HETH Manichaean Teth, UC_JOINING_GROUP_MANICHAEAN_TETH ManichaeanTeth, UC_JOINING_GROUP_MANICHAEAN_TETH Manichaean Yodh, UC_JOINING_GROUP_MANICHAEAN_YODH ManichaeanYodh, UC_JOINING_GROUP_MANICHAEAN_YODH Manichaean Kaph, UC_JOINING_GROUP_MANICHAEAN_KAPH ManichaeanKaph, UC_JOINING_GROUP_MANICHAEAN_KAPH Manichaean Lamedh, UC_JOINING_GROUP_MANICHAEAN_LAMEDH ManichaeanLamedh, UC_JOINING_GROUP_MANICHAEAN_LAMEDH Manichaean Dhamedh, UC_JOINING_GROUP_MANICHAEAN_DHAMEDH ManichaeanDhamedh, UC_JOINING_GROUP_MANICHAEAN_DHAMEDH Manichaean Thamedh, UC_JOINING_GROUP_MANICHAEAN_THAMEDH ManichaeanThamedh, UC_JOINING_GROUP_MANICHAEAN_THAMEDH Manichaean Mem, UC_JOINING_GROUP_MANICHAEAN_MEM ManichaeanMem, UC_JOINING_GROUP_MANICHAEAN_MEM Manichaean Nun, UC_JOINING_GROUP_MANICHAEAN_NUN ManichaeanNun, UC_JOINING_GROUP_MANICHAEAN_NUN Manichaean Samekh, UC_JOINING_GROUP_MANICHAEAN_SAMEKH ManichaeanSamekh, UC_JOINING_GROUP_MANICHAEAN_SAMEKH Manichaean Ayin, UC_JOINING_GROUP_MANICHAEAN_AYIN ManichaeanAyin, UC_JOINING_GROUP_MANICHAEAN_AYIN Manichaean Pe, UC_JOINING_GROUP_MANICHAEAN_PE ManichaeanPe, UC_JOINING_GROUP_MANICHAEAN_PE Manichaean Sadhe, UC_JOINING_GROUP_MANICHAEAN_SADHE ManichaeanSadhe, UC_JOINING_GROUP_MANICHAEAN_SADHE Manichaean Qoph, UC_JOINING_GROUP_MANICHAEAN_QOPH ManichaeanQoph, UC_JOINING_GROUP_MANICHAEAN_QOPH Manichaean Resh, UC_JOINING_GROUP_MANICHAEAN_RESH ManichaeanResh, UC_JOINING_GROUP_MANICHAEAN_RESH Manichaean Taw, UC_JOINING_GROUP_MANICHAEAN_TAW ManichaeanTaw, UC_JOINING_GROUP_MANICHAEAN_TAW Manichaean One, UC_JOINING_GROUP_MANICHAEAN_ONE ManichaeanOne, UC_JOINING_GROUP_MANICHAEAN_ONE Manichaean Five, UC_JOINING_GROUP_MANICHAEAN_FIVE ManichaeanFive, UC_JOINING_GROUP_MANICHAEAN_FIVE Manichaean Ten, UC_JOINING_GROUP_MANICHAEAN_TEN ManichaeanTen, UC_JOINING_GROUP_MANICHAEAN_TEN Manichaean Twenty, UC_JOINING_GROUP_MANICHAEAN_TWENTY ManichaeanTwenty, UC_JOINING_GROUP_MANICHAEAN_TWENTY Manichaean Hundred, UC_JOINING_GROUP_MANICHAEAN_HUNDRED ManichaeanHundred, UC_JOINING_GROUP_MANICHAEAN_HUNDRED �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_name.c��������������������������������������������0000664�0000000�0000000�00000004321�14110572173�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Use a string pool, rather than a two-dimensional array, because the strings have very different lengths. */ struct joining_group_stringpool_t { #define ELEM(tag,string) char tag[sizeof (string)]; #include "unictype/joininggroup_name.h" #undef ELEM }; static const struct joining_group_stringpool_t joining_group_stringpool_contents = { #define ELEM(tag,string) string, #include "unictype/joininggroup_name.h" #undef ELEM }; #define joining_group_stringpool ((const char *) &joining_group_stringpool_contents) static const int joining_group_index[] = { #define ELEM(tag,string) (int)(size_t)&((struct joining_group_stringpool_t *)0)->tag, #include "unictype/joininggroup_name.h" #undef ELEM }; const char * uc_joining_group_name (int joining_group) { if (joining_group >= 0 && joining_group < sizeof (joining_group_index) / sizeof (joining_group_index[0])) return joining_group_stringpool + joining_group_index[joining_group]; return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_name.h��������������������������������������������0000664�0000000�0000000�00000011323�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ ELEM (NONE, "No Joining Group") ELEM (AIN, "Ain") ELEM (ALAPH, "Alaph") ELEM (ALEF, "Alef") ELEM (BEH, "Beh") ELEM (BETH, "Beth") ELEM (BURUSHASKI_YEH_BARREE, "Burushaski Yeh Barree") ELEM (DAL, "Dal") ELEM (DALATH_RISH, "Dalath Rish") ELEM (E, "E") ELEM (FARSI_YEH, "Farsi Yeh") ELEM (FE, "Fe") ELEM (FEH, "Feh") ELEM (FINAL_SEMKATH, "Final Semkath") ELEM (GAF, "Gaf") ELEM (GAMAL, "Gamal") ELEM (HAH, "Hah") ELEM (HE, "He") ELEM (HEH, "Heh") ELEM (HEH_GOAL, "Heh Goal") ELEM (HETH, "Heth") ELEM (KAF, "Kaf") ELEM (KAPH, "Kaph") ELEM (KHAPH, "Khaph") ELEM (KNOTTED_HEH, "Knotted Heh") ELEM (LAM, "Lam") ELEM (LAMADH, "Lamadh") ELEM (MEEM, "Meem") ELEM (MIM, "Mim") ELEM (NOON, "Noon") ELEM (NUN, "Nun") ELEM (NYA, "Nya") ELEM (PE, "Pe") ELEM (QAF, "Qaf") ELEM (QAPH, "Qaph") ELEM (REH, "Reh") ELEM (REVERSED_PE, "Reversed Pe") ELEM (SAD, "Sad") ELEM (SADHE, "Sadhe") ELEM (SEEN, "Seen") ELEM (SEMKATH, "Semkath") ELEM (SHIN, "Shin") ELEM (SWASH_KAF, "Swash Kaf") ELEM (SYRIAC_WAW, "Syriac Waw") ELEM (TAH, "Tah") ELEM (TAW, "Taw") ELEM (TEH_MARBUTA, "Teh Marbuta") ELEM (TEH_MARBUTA_GOAL, "Teh Marbuta Goal") ELEM (TETH, "Teth") ELEM (WAW, "Waw") ELEM (YEH, "Yeh") ELEM (YEH_BARREE, "Yeh Barree") ELEM (YEH_WITH_TAIL, "Yeh With Tail") ELEM (YUDH, "Yudh") ELEM (YUDH_HE, "Yudh He") ELEM (ZAIN, "Zain") ELEM (ZHAIN, "Zhain") ELEM (ROHINGYA_YEH, "Rohingya Yeh") ELEM (STRAIGHT_WAW, "Straight Waw") ELEM (MANICHAEAN_ALEPH, "Manichaean Aleph") ELEM (MANICHAEAN_BETH, "Manichaean Beth") ELEM (MANICHAEAN_GIMEL, "Manichaean Gimel") ELEM (MANICHAEAN_DALETH, "Manichaean Daleth") ELEM (MANICHAEAN_WAW, "Manichaean Waw") ELEM (MANICHAEAN_ZAYIN, "Manichaean Zayin") ELEM (MANICHAEAN_HETH, "Manichaean Heth") ELEM (MANICHAEAN_TETH, "Manichaean Teth") ELEM (MANICHAEAN_YODH, "Manichaean Yodh") ELEM (MANICHAEAN_KAPH, "Manichaean Kaph") ELEM (MANICHAEAN_LAMEDH, "Manichaean Lamedh") ELEM (MANICHAEAN_DHAMEDH, "Manichaean Dhamedh") ELEM (MANICHAEAN_THAMEDH, "Manichaean Thamedh") ELEM (MANICHAEAN_MEM, "Manichaean Mem") ELEM (MANICHAEAN_NUN, "Manichaean Nun") ELEM (MANICHAEAN_SAMEKH, "Manichaean Samekh") ELEM (MANICHAEAN_AYIN, "Manichaean Ayin") ELEM (MANICHAEAN_PE, "Manichaean Pe") ELEM (MANICHAEAN_SADHE, "Manichaean Sadhe") ELEM (MANICHAEAN_QOPH, "Manichaean Qoph") ELEM (MANICHAEAN_RESH, "Manichaean Resh") ELEM (MANICHAEAN_TAW, "Manichaean Taw") ELEM (MANICHAEAN_ONE, "Manichaean One") ELEM (MANICHAEAN_FIVE, "Manichaean Five") ELEM (MANICHAEAN_TEN, "Manichaean Ten") ELEM (MANICHAEAN_TWENTY, "Manichaean Twenty") ELEM (MANICHAEAN_HUNDRED, "Manichaean Hundred") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_of.c����������������������������������������������0000664�0000000�0000000�00000004327�14110572173�0022255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_joining_group table. */ #include "joininggroup_of.h" int uc_joining_group (ucs4_t uc) { unsigned int index1 = uc >> joining_group_header_0; if (index1 < joining_group_header_1) { int lookup1 = u_joining_group.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> joining_group_header_2) & joining_group_header_3; int lookup2 = u_joining_group.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = ((uc & joining_group_header_4) + lookup2) * 7; /* level3 contains 7-bit values, packed into 16-bit words. */ unsigned int lookup3 = (((unsigned int) u_joining_group.level3[index3>>4] | ((unsigned int) u_joining_group.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0x7f; return lookup3; } } } return UC_JOINING_GROUP_NONE; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joininggroup_of.h����������������������������������������������0000664�0000000�0000000�00000026661�14110572173�0022267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining group of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define joining_group_header_0 16 #define joining_group_header_1 2 #define joining_group_header_2 7 #define joining_group_header_3 511 #define joining_group_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; unsigned short level3[5 * 56 + 1]; } u_joining_group = { { 0, 512 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 128, 256, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc032, 0x1060, 0xc81b, 0x0406, 0x8117, 0x8100, 0x0e40, 0xd187, 0x74e8, 0x952a, 0xac58, 0xc040, 0x50e1, 0x1428, 0x4600, 0x92a8, 0x74d9, 0x3124, 0x0c99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4210, 0xc180, 0x0060, 0xc418, 0x3262, 0x8102, 0x2040, 0x0810, 0x0804, 0x0204, 0x4081, 0x8720, 0xe1c3, 0x3870, 0x0e1c, 0xd187, 0x3468, 0x8d1a, 0xa346, 0xe9d1, 0x2a74, 0x5895, 0x0601, 0xc183, 0x3060, 0x2142, 0xca87, 0xa951, 0x1c54, 0x870e, 0xe1c3, 0x64c8, 0x9932, 0xa74e, 0xf9d3, 0x2060, 0xc9ae, 0x15e4, 0xc58b, 0xb162, 0x2c58, 0xa0a6, 0x6229, 0xd932, 0x066c, 0x0170, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x461c, 0x0000, 0x0000, 0x0000, 0x0000, 0xa9c0, 0x0014, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4002, 0xf1e1, 0x2040, 0xab22, 0x051b, 0xab06, 0x2cd9, 0x8e1a, 0xd507, 0x8048, 0x2648, 0x2211, 0x2ad5, 0x103c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc000, 0x165d, 0x0204, 0x4081, 0x1020, 0x9020, 0x61c3, 0x0a74, 0x0204, 0x860c, 0xe1c3, 0x6cd8, 0x9d3a, 0x664e, 0x3a34, 0x2041, 0x11a7, 0x3064, 0x2850, 0xb164, 0xc198, 0x3900, 0x2a9d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0204, 0xc584, 0x6508, 0x3236, 0x28d9, 0x0396, 0x4a1c, 0xdd0e, 0x5028, 0x1001, 0x8408, 0xcc91, 0xc57a, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e3b, 0xd7af, 0x01f3, 0x007e, 0x1020, 0x0800, 0x870a, 0x2244, 0x68b1, 0x223c, 0xca93, 0x92e5, 0x6cc9, 0x9d3a, 0x27ce, 0x0000, 0x0005, 0x0000, 0x2000, 0x9d2a, 0xab52, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } }; �������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_byname.c�������������������������������������������0000664�0000000�0000000�00000004243�14110572173�0022746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU 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 "unictype/joiningtype_byname.h" int uc_joining_type_byname (const char *joining_type_name) { size_t len; len = strlen (joining_type_name); if (len <= MAX_WORD_LENGTH) { char buf[MAX_WORD_LENGTH + 1]; const struct named_joining_type *found; /* Copy joining_type_name into buf, converting '_' and '-' to ' '. */ { const char *p = joining_type_name; char *q = buf; for (;; p++, q++) { char c = *p; if (c == '_' || c == '-') c = ' '; *q = c; if (c == '\0') break; } } /* Here q == buf + len. */ /* Do a hash table lookup, with case-insensitive comparison. */ found = uc_joining_type_lookup (buf, len); if (found != NULL) return found->joining_type; } /* Invalid joining type name. */ return -1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_byname.gperf���������������������������������������0000664�0000000�0000000�00000003652�14110572173�0023632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_joining_type { int name; int joining_type; }; %struct-type %ignore-case %language=ANSI-C %define hash-function-name joining_type_hash %define lookup-function-name uc_joining_type_lookup %readonly-tables %global-table %define word-array-name joining_type_names %pic %define string-pool-name joining_type_stringpool %% C, UC_JOINING_TYPE_C D, UC_JOINING_TYPE_D L, UC_JOINING_TYPE_L R, UC_JOINING_TYPE_R T, UC_JOINING_TYPE_T U, UC_JOINING_TYPE_U Join Causing, UC_JOINING_TYPE_C JoinCausing, UC_JOINING_TYPE_C Dual Joining, UC_JOINING_TYPE_D DualJoining, UC_JOINING_TYPE_D Left Joining, UC_JOINING_TYPE_L LeftJoining, UC_JOINING_TYPE_L Right Joining, UC_JOINING_TYPE_R RightJoining, UC_JOINING_TYPE_R Transparent, UC_JOINING_TYPE_T Non Joining, UC_JOINING_TYPE_U NonJoining, UC_JOINING_TYPE_U ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_longname.c�����������������������������������������0000664�0000000�0000000�00000003234�14110572173�0023272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_joining_type_long_name[6][14] = { "Non Joining", "Transparent", "Join Causing", "Left Joining", "Right Joining", "Dual Joining" }; const char * uc_joining_type_long_name (int joining_type) { if (joining_type >= 0 && joining_type < sizeof (u_joining_type_long_name) / sizeof (u_joining_type_long_name[0])) return u_joining_type_long_name[joining_type]; return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_name.c���������������������������������������������0000664�0000000�0000000�00000003067�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" static const char u_joining_type_name[6][2] = { "U", "T", "C", "L", "R", "D" }; const char * uc_joining_type_name (int joining_type) { if (joining_type >= 0 && joining_type < sizeof (u_joining_type_name) / sizeof (u_joining_type_name[0])) return u_joining_type_name[joining_type]; return NULL; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_of.c�����������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_joining_type table. */ #include "joiningtype_of.h" int uc_joining_type (ucs4_t uc) { unsigned int index1 = uc >> joining_type_header_0; if (index1 < joining_type_header_1) { int lookup1 = u_joining_type.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> joining_type_header_2) & joining_type_header_3; int lookup2 = u_joining_type.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & joining_type_header_4) + lookup2; /* level3 contains 4-bit values. */ unsigned int lookup3 = (u_joining_type.level3[index3>>1] >> ((index3 % 2) * 4)) & 0x0f; if (lookup3 != 0x0f) return lookup3; } } } if (uc_is_general_category_withtable (uc, UC_CATEGORY_MASK_Mn | UC_CATEGORY_MASK_Me | UC_CATEGORY_MASK_Cf)) return UC_JOINING_TYPE_T; return UC_JOINING_TYPE_U; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/joiningtype_of.h�����������������������������������������������0000664�0000000�0000000�00000033743�14110572173�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining type of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ #define joining_type_header_0 16 #define joining_type_header_1 2 #define joining_type_header_2 7 #define joining_type_header_3 511 #define joining_type_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; unsigned char level3[13 * 64]; } u_joining_type = { { 0, 512 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 128, 256, 384, 512, 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 768, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1280, -1, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00, 0x00, 0x00, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x44, 0x45, 0x45, 0x55, 0x55, 0x45, 0x44, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x52, 0x55, 0x55, 0x55, 0x54, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x4f, 0x44, 0x40, 0x44, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x45, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x55, 0x44, 0x4f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xf5, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x55, 0x45, 0x44, 0x44, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x44, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x54, 0x55, 0x45, 0x45, 0x54, 0x55, 0x44, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0x55, 0x55, 0x44, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x44, 0x04, 0x54, 0x45, 0x54, 0xf5, 0x55, 0x45, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0xff, 0xf2, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x51, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf5, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x45, 0x40, 0x40, 0x04, 0x30, 0x44, 0x44, 0x54, 0x55, 0x35, 0x55, 0x55, 0x45, 0x55, 0x45, 0x00, 0xf4, 0xff, 0xff, 0x5f, 0x55, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x45, 0x45, 0x44, 0x55, 0x45, 0x55, 0x54, 0x44, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x44, 0x54, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }; �����������������������������gnulib-20210822~d383792/lib/unictype/mirror.c�������������������������������������������������������0000664�0000000�0000000�00000003663�14110572173�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Mirrored Unicode characters. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_mirror table. */ #include "mirror.h" bool uc_mirror_char (ucs4_t uc, ucs4_t *puc) { unsigned int index1 = uc >> mirror_header_0; if (index1 < mirror_header_1) { int lookup1 = u_mirror.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> mirror_header_2) & mirror_header_3; int lookup2 = u_mirror.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & mirror_header_4); int lookup3 = u_mirror.level3[lookup2 + index3]; *puc = uc + lookup3; return (lookup3 != 0); } } } *puc = uc; return false; } �����������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/mirror.h�������������������������������������������������������0000664�0000000�0000000�00000073227�14110572173�0020403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Mirrored Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define mirror_header_0 16 #define mirror_header_1 2 #define mirror_header_2 7 #define mirror_header_3 511 #define mirror_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[22 << 7]; } u_mirror = { { 0, 512 }, { 0, 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, 640, 768, -1, 896, 1024, 1152, -1, -1, -1, -1, -1, -1, -1, 1280, 1408, -1, -1, -1, 1536, 1664, 1792, -1, -1, -1, -1, -1, -1, 1920, -1, -1, -1, 2048, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2176, -1, 2304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2432, 2560, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61635, 61634, 61633, 61632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59746, 59745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56828, 56827, 56826, 56825, 0, 0, 0, 3, 56820, 3, -3, 56817, -3, 0, 0, 0, 56812, 0, 0, 0, 56808, 56807, 0, 0, 0, 56803, 56802, 56801, 56800, 0, 56798, 56797, 56796, 56795, 0, 56793, 0, 56791, 0, 0, 0, 0, 56786, 56785, 56784, 56783, 56782, 56781, 56780, 56779, 56778, 0, 0, 0, 0, 0, 56772, 0, 56770, 1, -1, 56767, 56766, 56765, 56764, 56763, 138, 56761, 56760, 56759, 56758, 56757, 56756, 56755, 56754, 56753, 0, 0, 0, 0, 0, 1, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56734, 56733, 0, 56731, 0, 1, -1, 1, -1, 56725, 56724, 1, -1, 0, 0, 56719, 56718, 56717, 56716, 56715, 56714, 56713, 56712, 1, -1, 1, -1, 1, -1, 1, -1, 56703, 56702, 56701, 56700, 1, -1, 56697, 56696, 1, -1, 56693, 56692, 56691, 56690, 56689, 0, 0, 1, -1, 1, -1, 0, 0, 0, 0, 0, 56677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 56663, 56662, 56661, 56660, 56659, 56658, 56657, 56656, 56655, 56654, 1, -1, 1, -1, 1, -1, 1, -1, 56645, 0, 0, 0, 0, 0, 56639, 56638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 56605, 56604, 56603, 56602, 56601, 56600, 56599, 56598, 56597, 56596, 56595, 56594, 56593, 56592, 0, 0, 1, -1, 56587, 56586, 56585, 56584, 56583, 56582, 56581, 56580, 56579, 56578, 56577, 56576, 56575, 56574, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56541, 56540, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55445, 55444, 55443, 55442, 55441, 55440, 55439, 55438, 55437, 55436, 55435, 55434, 55433, 55432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55357, 0, 0, 55354, 55353, 55352, 55351, 0, 55349, 55348, 0, 55346, 55345, 55344, 0, 0, 0, 0, 0, 55338, 55337, 55336, 55335, 0, 0, 0, 0, 0, 55329, 55328, 55327, 0, 0, 0, 55323, 55322, 55321, 55320, 55319, 55318, 55317, 55316, 55315, 55314, 55313, 55312, 55311, 55310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54906, 54905, 54904, 54903, 54902, 54901, 54900, 54899, 54898, 54897, 54896, 54895, 54894, 54893, 54892, 54891, 54890, 54889, 54888, 54887, 54886, 54885, 0, 0, 54882, 54881, 54880, 54879, 54878, 54877, 54876, 54875, 54874, 54873, 54872, 54871, 54870, 54869, 54868, 54867, 54866, 54865, 54864, 54863, 54862, 0, 0, 0, 0, 0, 0, 0, 0, 54853, 0, 0, 0, 0, 0, 0, 0, 54845, 54844, 54843, 54842, 54841, 54840, 0, 0, 0, 54836, 0, 0, 0, 0, 54831, 54830, 54829, 54828, 54827, 0, 54825, 54824, 0, 0, 54821, 54820, 54819, 54818, 54817, 0, 0, 0, 0, 54812, 0, 54810, 54809, 54808, 0, 0, 54805, 54804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54793, 54792, 54791, 54790, 54789, 54788, 0, 0, 54785, 54784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54771, 54770, 54769, 54768, 54767, 54766, 54765, 54764, 54763, 54762, 54761, 54760, 54759, 54758, 54757, 54756, 54755, 54754, 54753, 0, 54751, 54750, 54749, 54748, 0, 0, 54745, 0, 54743, 0, 0, 54740, 0, 54738, 54737, 54736, 54735, 0, 0, 0, 0, 0, 54729, 54728, 0, 0, 0, 0, 0, 0, 54721, 54720, 54719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54694, 54693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54681, 54680, 0, 0, 0, 0, 54675, 54674, 54673, 54672, 0, 54670, 54669, 0, 0, 54666, 54665, 0, 0, 0, 0, 54660, 54659, 54658, 54657, 54656, 54655, 54654, 54653, 54652, 54651, 54650, 54649, 54648, 54647, 54646, 54645, 54644, 54643, 54642, 54641, 54640, 54639, 54638, 54637, 54636, 54635, 54634, 54633, 54632, 54631, 54630, 54629, 54628, 54627, 54626, 54625, 54624, 54623, 54622, 54621, 54620, 54619, 54618, 0, 0, 54615, 54614, 54613, 54612, 54611, 54610, 54609, 54608, 0, 54606, 54605, 54604, 54603, 54602, 54601, 54600, 54599, 54598, 54597, 54596, 54595, 54594, 54593, 54592, 54591, 54590, 54589, 54588, 54587, 54586, 54585, 54584, 54583, 54582, 54581, 54580, 54579, 54578, 54577, 54576, 54575, 54574, 54573, 54572, 54571, 54570, 54569, 54568, 54567, 0, 0, 0, 0, 0, 54561, 0, 54559, 0, 0, 0, 54555, 54554, 54553, 54552, 54551, 0, 0, 0, 0, 0, 54545, 54544, 54543, 0, 0, 0, 0, 54538, 0, 0, 0, 54534, 54533, 54532, 54531, 54530, 0, 54528, 0, 0, 0, 0, 53755, 53754, 53753, 53752, 0, 0, 0, 53748, 53747, 0, 53745, 53744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53729, 53728, 0, 0, 53725, 53724, 53723, 53722, 53721, 53720, 53719, 53718, 53717, 53716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 419, 418, 417, 416, 415, 0, 0, 0, 0, 0, 409, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 160, 0, 158, 157, 0, 155, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/numeric.c������������������������������������������������������0000664�0000000�0000000�00000004404�14110572173�0020515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of numeric Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" /* Define u_numeric_values and u_numeric tables. */ #include "numeric.h" uc_fraction_t uc_numeric_value (ucs4_t uc) { unsigned int index1 = uc >> numeric_header_0; if (index1 < numeric_header_1) { int lookup1 = u_numeric.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> numeric_header_2) & numeric_header_3; int lookup2 = u_numeric.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = ((uc & numeric_header_4) + lookup2) * 8; /* level3 contains 8-bit values, packed into 16-bit words. */ unsigned int lookup3 = (((unsigned int) u_numeric.level3[index3>>4] | ((unsigned int) u_numeric.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0xff; return u_numeric_values[lookup3]; } } } { const uc_fraction_t default_value = { 0, 0 }; return default_value; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/numeric.h������������������������������������������������������0000664�0000000�0000000�00000145636�14110572173�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Numeric values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ static const uc_fraction_t u_numeric_values[143] = { { 0, 0 }, { -727379968, 1 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 10, 1 }, { 11, 1 }, { 12, 1 }, { 13, 1 }, { 14, 1 }, { 15, 1 }, { 16, 1 }, { 17, 1 }, { 18, 1 }, { 19, 1 }, { 20, 1 }, { 21, 1 }, { 22, 1 }, { 23, 1 }, { 24, 1 }, { 25, 1 }, { 26, 1 }, { 27, 1 }, { 28, 1 }, { 29, 1 }, { 30, 1 }, { 31, 1 }, { 32, 1 }, { 33, 1 }, { 34, 1 }, { 35, 1 }, { 36, 1 }, { 37, 1 }, { 38, 1 }, { 39, 1 }, { 40, 1 }, { 41, 1 }, { 42, 1 }, { 43, 1 }, { 44, 1 }, { 45, 1 }, { 46, 1 }, { 47, 1 }, { 48, 1 }, { 49, 1 }, { 50, 1 }, { 60, 1 }, { 70, 1 }, { 80, 1 }, { 90, 1 }, { 100, 1 }, { 200, 1 }, { 300, 1 }, { 400, 1 }, { 500, 1 }, { 600, 1 }, { 700, 1 }, { 800, 1 }, { 900, 1 }, { 1000, 1 }, { 2000, 1 }, { 3000, 1 }, { 4000, 1 }, { 5000, 1 }, { 6000, 1 }, { 7000, 1 }, { 8000, 1 }, { 9000, 1 }, { 10000, 1 }, { 20000, 1 }, { 30000, 1 }, { 40000, 1 }, { 50000, 1 }, { 60000, 1 }, { 70000, 1 }, { 80000, 1 }, { 90000, 1 }, { 100000, 1 }, { 200000, 1 }, { 216000, 1 }, { 300000, 1 }, { 400000, 1 }, { 432000, 1 }, { 500000, 1 }, { 600000, 1 }, { 700000, 1 }, { 800000, 1 }, { 900000, 1 }, { 1000000, 1 }, { 100000000, 1 }, { 1410065408, 1 }, { -1, 2 }, { 1, 2 }, { 3, 2 }, { 5, 2 }, { 7, 2 }, { 9, 2 }, { 11, 2 }, { 13, 2 }, { 15, 2 }, { 17, 2 }, { 1, 3 }, { 2, 3 }, { 1, 4 }, { 3, 4 }, { 1, 5 }, { 2, 5 }, { 3, 5 }, { 4, 5 }, { 1, 6 }, { 5, 6 }, { 1, 7 }, { 1, 8 }, { 3, 8 }, { 5, 8 }, { 7, 8 }, { 1, 9 }, { 1, 10 }, { 1, 12 }, { 2, 12 }, { 3, 12 }, { 4, 12 }, { 5, 12 }, { 6, 12 }, { 7, 12 }, { 8, 12 }, { 9, 12 }, { 10, 12 }, { 11, 12 }, { 1, 16 }, { 3, 16 }, { 1, 20 }, { 3, 20 }, { 1, 40 }, { 3, 80 }, { 1, 160 } }; #define numeric_header_0 16 #define numeric_header_1 3 #define numeric_header_2 7 #define numeric_header_3 511 #define numeric_header_4 127 static const struct { int level1[3]; short level2[3 << 9]; unsigned short level3[68 * 64 + 1]; } u_numeric = { { 0, 512, 1024 }, { 0, 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 384, -1, 512, -1, -1, 640, 768, 640, 640, 896, 1024, 1152, 640, 1280, 640, 1408, 1408, 1536, -1, 512, 1664, -1, -1, -1, -1, 1792, -1, -1, -1, -1, -1, -1, 1920, -1, 2048, 1664, -1, 2176, 2304, -1, 2432, 1408, 0, 2560, -1, -1, -1, -1, -1, -1, -1, 2688, 2816, 2944, 3072, -1, -1, -1, -1, 3200, 3328, -1, -1, -1, -1, 3456, 3584, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3712, -1, -1, -1, -1, -1, -1, 3840, -1, -1, 3968, 4096, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4480, -1, -1, 4608, 1408, 2816, 4736, 1408, -1, -1, 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4864, 4992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1664, -1, -1, -1, 5120, 5248, -1, 5376, 5504, 5632, -1, 4352, -1, -1, -1, -1, -1, -1, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 6656, -1, 6784, -1, -1, 6912, -1, -1, -1, 7040, 384, 7168, 7296, -1, 384, -1, -1, 1408, 1408, -1, -1, 1408, 512, 7424, -1, -1, 7552, -1, -1, -1, -1, -1, -1, 7680, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7808, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, 7936, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8064, -1, -1, -1, -1, -1, -1, -1, -1, 8192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8320, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0504, 0x0000, 0x0000, 0x0300, 0x0000, 0x636e, 0x006f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x7788, 0x6e89, 0x126f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x636e, 0x886f, 0x8977, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x390c, 0x0042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0403, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c8e, 0x8a8d, 0x8b7c, 0x0070, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x390c, 0x6e42, 0x6f63, 0x7788, 0x0089, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x6463, 0x6665, 0x6867, 0x6a69, 0x626b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x2a20, 0x3534, 0x3736, 0x3938, 0x004b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1413, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b76, 0x6c7c, 0x706d, 0x7271, 0x7473, 0x7775, 0x7978, 0x037a, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0e0d, 0x3934, 0x423d, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0e0d, 0x3934, 0x423d, 0x4642, 0x004b, 0x0800, 0x4f34, 0x0254, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0e0d, 0x100f, 0x1211, 0x1413, 0x1615, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0e0d, 0x100f, 0x1211, 0x1413, 0x1615, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0e0d, 0x100f, 0x1211, 0x1413, 0x1615, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d02, 0x0f0e, 0x1110, 0x1312, 0x1514, 0x0316, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x020c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x160c, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x160c, 0x2a20, 0x3534, 0x3736, 0x1700, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e, 0x2120, 0x2322, 0x2524, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2600, 0x2827, 0x2a29, 0x2c2b, 0x2e2d, 0x302f, 0x3231, 0x3433, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x020b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x636e, 0x886f, 0x8977, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x0000, 0x0000, 0x0000, 0x0c00, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x2a20, 0x3534, 0x3736, 0x3938, 0x3b3a, 0x3d3c, 0x3f3e, 0x4140, 0x4342, 0x4544, 0x4746, 0x4948, 0x4b4a, 0x4d4c, 0x4f4e, 0x5150, 0x5352, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x636e, 0x0703, 0x3d34, 0x4f46, 0x0c07, 0x3934, 0x423d, 0x0746, 0x340c, 0x3d39, 0x4b42, 0x0c4f, 0x0303, 0x0403, 0x0404, 0x0704, 0x0c0c, 0x0c0c, 0x200c, 0x3434, 0x3434, 0x3b39, 0x3d3d, 0x3d3d, 0x423d, 0x0746, 0x6334, 0x6d63, 0x006f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6e02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x2a20, 0x3534, 0x3736, 0x3938, 0x3b3a, 0x3d3c, 0x3f3e, 0x4140, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0703, 0x340c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0c04, 0x3916, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0c05, 0x3916, 0x4b42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x160c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0606, 0x0c07, 0x3916, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0c07, 0x3916, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c03, 0x3916, 0x0504, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6387, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x2016, 0x342a, 0x3635, 0x0000, 0x3a39, 0x3c3b, 0x3e3d, 0x403f, 0x4241, 0x4443, 0x4645, 0x4847, 0x4a49, 0x4c4b, 0x4e4d, 0x504f, 0x5251, 0x5453, 0x5755, 0x5a58, 0x5c5b, 0x5e5d, 0x7e7d, 0x807f, 0x8281, 0x8483, 0x8685, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x160c, 0x4239, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0034, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x160c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0c07, 0x3916, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x160c, 0x4239, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x160c, 0x4239, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0c06, 0x3916, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0703, 0x340c, 0x4239, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x2016, 0x342a, 0x3635, 0x3837, 0x3a39, 0x3c3b, 0x3e3d, 0x403f, 0x6341, 0x6c6e, 0x006d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x2016, 0x342a, 0x3635, 0x3837, 0x4239, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x2a20, 0x3534, 0x3736, 0x3938, 0x0042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x160c, 0x2a20, 0x3534, 0x3736, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x2016, 0x342a, 0x3635, 0x3837, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0605, 0x0807, 0x0a09, 0x060b, 0x0807, 0x0a09, 0x030b, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0403, 0x0605, 0x0407, 0x0505, 0x0706, 0x0908, 0x0b0a, 0x0403, 0x0505, 0x0706, 0x5956, 0x0403, 0x0505, 0x0706, 0x0505, 0x0606, 0x0606, 0x0908, 0x0909, 0x0a0a, 0x0b0b, 0x0b0b, 0x0504, 0x0706, 0x0308, 0x0504, 0x0606, 0x0707, 0x0504, 0x0403, 0x6d6c, 0x6c75, 0x776d, 0x746e, 0x6e6e, 0x6c63, 0x2a6d, 0x0634, 0x0807, 0x0a09, 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0c00, 0x4b39, 0x605f, 0x0161, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0605, 0x0807, 0x0a09, 0x0c0b, 0x2016, 0x342a, 0x3635, 0x3837, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0202, 0x0403, 0x0605, 0x0807, 0x0a09, 0x020b, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } }; ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_alphabetic.c������������������������������������������������0000664�0000000�0000000�00000003026�14110572173�0021647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_alphabetic table. */ #include "pr_alphabetic.h" bool uc_is_property_alphabetic (ucs4_t uc) { return bitmap_lookup (&u_property_alphabetic, uc); } const uc_property_t UC_PROPERTY_ALPHABETIC = { &uc_is_property_alphabetic }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_alphabetic.h������������������������������������������������0000664�0000000�0000000�00000101537�14110572173�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[68 << 4]; } u_property_alphabetic = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, -1, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 752, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 816, -1, 4 + 384 * sizeof (short) / sizeof (int) + 832, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 848, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 912, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 960, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 976, 4 + 384 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1008, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1024, 4 + 384 * sizeof (short) / sizeof (int) + 1040, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1056, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 1072, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0xBFFF0000U, 0xFFFF00B6U, 0x000707FFU, 0x07FF0000U, 0xFFFFFFFFU, 0xFEFFFFFFU, 0xFFFFC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FEFFFFFU, 0x9C00E1FEU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFC00U, 0x043007FFU, 0xFCFFFFFFU, 0x00001FFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0xFFF00000U, 0xFFFF03F8U, 0xFFFFFFFFU, 0xEFFFFFFFU, 0xFFE1DFFFU, 0xFFFE000FU, 0xFFF99FEFU, 0xE3C5FDFFU, 0xB080599FU, 0x0003000FU, 0xFFF987EEU, 0xC36DFDFFU, 0x5E021987U, 0x003F0000U, 0xFFFBBFEEU, 0xE3EDFDFFU, 0x00011BBFU, 0x0200000FU, 0xFFF99FEEU, 0xE3EDFDFFU, 0xB0C0199FU, 0x0002000FU, 0xD63DC7ECU, 0xC3FFC718U, 0x00811DC7U, 0x00000000U, 0xFFFDDFEFU, 0xE3FFFDFFU, 0x07601DDFU, 0x0000000FU, 0xFFFDDFEFU, 0xE3EFFDFFU, 0x40601DDFU, 0x0006000FU, 0xFFFDDFEEU, 0xE7FFFFFFU, 0x80F05DDFU, 0xFC00000FU, 0xFC7FFFECU, 0x2FFBFFFFU, 0xFF5F807FU, 0x000C0000U, 0xFFFFFFFEU, 0x07FFFFFFU, 0x0000207FU, 0x00000000U, 0xFEF02596U, 0x3BFFECAEU, 0xF000205FU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFF03U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF97FFFFFU, 0xFFFF0000U, 0xFFFFC1E7U, 0x3000407FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x87FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x000FDFFFU, 0x000FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0x108001FFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x01FF0FFFU, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x000003FFU, 0x00000000U, 0x0FFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x001FFFFEU, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x00000FEFU, 0x00000000U, 0xFFFFFFFFU, 0xFC00F3FFU, 0xFFFFFFFFU, 0x0003FFBFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFC00E000U, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x006FDE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x001FFF80U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBD50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000C00U, 0xFFFFFFFFU, 0x8FF07FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x000000FFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000002FU, 0x28FC0000U, 0xFFFFFC00U, 0xFFFF07FFU, 0x0007FFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0x00008000U, 0x7C00FFDFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00003FFFU, 0xC47FFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x38000005U, 0x003CFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x07FFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEFF06FU, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0xFFFFFFFCU, 0x01FFFFFFU, 0xFFFF0000U, 0x000001FFU, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1400001EU, 0x00000000U, 0xFFFBFFFFU, 0x409FFFFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFF99FEFU, 0xE3EDFDFFU, 0xE081199FU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007BBU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000000B3U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x7F3FFFFFU, 0x3F000000U, 0x00000000U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000011U, 0x00000000U, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xE3FFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x7F7FFFFFU, 0x00000001U, 0xFFFC0000U, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x0000000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x43FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000008FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ascii_hex_digit.c�������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0022671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_ascii_hex_digit table. */ #include "pr_ascii_hex_digit.h" bool uc_is_property_ascii_hex_digit (ucs4_t uc) { return bitmap_lookup (&u_property_ascii_hex_digit, uc); } const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT = { &uc_is_property_ascii_hex_digit }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ascii_hex_digit.h�������������������������������������������0000664�0000000�0000000�00000006307�14110572173�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_ascii_hex_digit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x0000007EU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_arabic_digit.c�����������������������������������������0000664�0000000�0000000�00000003275�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_arabic_digit table. */ #include "pr_bidi_arabic_digit.h" bool uc_is_property_bidi_arabic_digit (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_arabic_digit, uc); } #else bool uc_is_property_bidi_arabic_digit (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_AN); } #endif const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT = { &uc_is_property_bidi_arabic_digit }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_arabic_digit.h�����������������������������������������0000664�0000000�0000000�00000012242�14110572173�0023150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[3 << 4]; } u_property_bidi_arabic_digit = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x0000003FU, 0x00000000U, 0x00000000U, 0x00001BFFU, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_arabic_right_to_left.c���������������������������������0000664�0000000�0000000�00000003365�14110572173�0024702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_arabic_right_to_left table. */ #include "pr_bidi_arabic_right_to_left.h" bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_arabic_right_to_left, uc); } #else bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_AL); } #endif const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT = { &uc_is_property_bidi_arabic_right_to_left }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_arabic_right_to_left.h���������������������������������0000664�0000000�0000000�00000014352�14110572173�0024705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[7 << 4]; } u_property_bidi_arabic_right_to_left = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xF8002900U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFC00C060U, 0xFFFDFFFFU, 0x0000FFFFU, 0xFFFFF800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFE003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xDFFF0000U, 0xFC000000U, 0x00000000U, 0x00080000U, 0xFFFFF080U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_block_separator.c��������������������������������������0000664�0000000�0000000�00000003321�14110572173�0023712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_block_separator table. */ #include "pr_bidi_block_separator.h" bool uc_is_property_bidi_block_separator (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_block_separator, uc); } #else bool uc_is_property_bidi_block_separator (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_B); } #endif const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR = { &uc_is_property_bidi_block_separator }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_block_separator.h��������������������������������������0000664�0000000�0000000�00000006734�14110572173�0023732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_property_bidi_block_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x70002400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_boundary_neutral.c�������������������������������������0000664�0000000�0000000�00000003331�14110572173�0024116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_boundary_neutral table. */ #include "pr_bidi_boundary_neutral.h" bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_boundary_neutral, uc); } #else bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_BN); } #endif const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL = { &uc_is_property_bidi_boundary_neutral }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_boundary_neutral.h�������������������������������������0000664�0000000�0000000�00000025626�14110572173�0024136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[4 << 7]; unsigned int level3[10 << 4]; } u_property_bidi_boundary_neutral = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256 }, { 18 + 512 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 48, 18 + 512 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 128, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 112 }, { 0x0FFFC1FFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFDFU, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x0000FC1FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC1FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU } }; ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_common_separator.c�������������������������������������0000664�0000000�0000000�00000003331�14110572173�0024111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_common_separator table. */ #include "pr_bidi_common_separator.h" bool uc_is_property_bidi_common_separator (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_common_separator, uc); } #else bool uc_is_property_bidi_common_separator (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_CS); } #endif const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR = { &uc_is_property_bidi_common_separator }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_common_separator.h�������������������������������������0000664�0000000�0000000�00000007775�14110572173�0024136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_property_bidi_common_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48 }, { 0x00000000U, 0x0400D000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00250000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0400D000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���gnulib-20210822~d383792/lib/unictype/pr_bidi_control.c����������������������������������������������0000664�0000000�0000000�00000003042�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_bidi_control table. */ #include "pr_bidi_control.h" bool uc_is_property_bidi_control (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_control, uc); } const uc_property_t UC_PROPERTY_BIDI_CONTROL = { &uc_is_property_bidi_control }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_control.h����������������������������������������������0000664�0000000�0000000�00000006724�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_property_bidi_control = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00007C00U, 0x00000000U, 0x000003C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_embedding_or_override.c��������������������������������0000664�0000000�0000000�00000003563�14110572173�0025065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_embedding_or_override table. */ #include "pr_bidi_embedding_or_override.h" bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_embedding_or_override, uc); } #else bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) { int category = uc_bidi_category (uc); return (category == UC_BIDI_LRE || category == UC_BIDI_LRO || category == UC_BIDI_RLE || category == UC_BIDI_RLO); } #endif const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE = { &uc_is_property_bidi_embedding_or_override }; ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_embedding_or_override.h��������������������������������0000664�0000000�0000000�00000006322�14110572173�0025066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_bidi_embedding_or_override = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00006C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_eur_num_separator.c������������������������������������0000664�0000000�0000000�00000003340�14110572173�0024273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_eur_num_separator table. */ #include "pr_bidi_eur_num_separator.h" bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_eur_num_separator, uc); } #else bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_ES); } #endif const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR = { &uc_is_property_bidi_eur_num_separator }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_eur_num_separator.h������������������������������������0000664�0000000�0000000�00000010416�14110572173�0024302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[5 << 4]; } u_property_bidi_eur_num_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64 }, { 0x00000000U, 0x00002800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_eur_num_terminator.c�����������������������������������0000664�0000000�0000000�00000003347�14110572173�0024466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_eur_num_terminator table. */ #include "pr_bidi_eur_num_terminator.h" bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_eur_num_terminator, uc); } #else bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_ET); } #endif const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR = { &uc_is_property_bidi_eur_num_terminator }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_eur_num_terminator.h�����������������������������������0000664�0000000�0000000�00000013560�14110572173�0024471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[11 << 4]; } u_property_bidi_eur_num_terminator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 160 }, { 0x00000000U, 0x00000038U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003003CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x080C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000038U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000063U } }; ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_european_digit.c���������������������������������������0000664�0000000�0000000�00000003313�14110572173�0023537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_european_digit table. */ #include "pr_bidi_european_digit.h" bool uc_is_property_bidi_european_digit (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_european_digit, uc); } #else bool uc_is_property_bidi_european_digit (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_EN); } #endif const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT = { &uc_is_property_bidi_european_digit }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_european_digit.h���������������������������������������0000664�0000000�0000000�00000014764�14110572173�0023560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[8 << 4]; } u_property_bidi_european_digit = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x020C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F10000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFF00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFC000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������gnulib-20210822~d383792/lib/unictype/pr_bidi_hebrew_right_to_left.c���������������������������������0000664�0000000�0000000�00000003364�14110572173�0024734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_hebrew_right_to_left table. */ #include "pr_bidi_hebrew_right_to_left.h" bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_hebrew_right_to_left, uc); } #else bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_R); } #endif const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT = { &uc_is_property_bidi_hebrew_right_to_left }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_hebrew_right_to_left.h���������������������������������0000664�0000000�0000000�00000016033�14110572173�0024736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[10 << 4]; } u_property_bidi_hebrew_right_to_left = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x40000000U, 0xFFFFFF49U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFC3007FFU, 0x043FFFFFU, 0xFFFFC110U, 0xF1FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0200000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xFFFFFDFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0F91U, 0x78FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF9FU, 0xFFFFFFFFU, 0x01FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_left_to_right.c����������������������������������������0000664�0000000�0000000�00000003303�14110572173�0023371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_left_to_right table. */ #include "pr_bidi_left_to_right.h" bool uc_is_property_bidi_left_to_right (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_left_to_right, uc); } #else bool uc_is_property_bidi_left_to_right (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_L); } #endif const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT = { &uc_is_property_bidi_left_to_right }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_left_to_right.h����������������������������������������0000664�0000000�0000000�00000125743�14110572173�0023413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[4 << 7]; unsigned int level3[54 << 4]; } u_property_bidi_left_to_right = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 256 }, { 18 + 512 * sizeof (short) / sizeof (int) + 0, 18 + 512 * sizeof (short) / sizeof (int) + 16, 18 + 512 * sizeof (short) / sizeof (int) + 32, -1, 18 + 512 * sizeof (short) / sizeof (int) + 48, 18 + 512 * sizeof (short) / sizeof (int) + 64, 18 + 512 * sizeof (short) / sizeof (int) + 80, 18 + 512 * sizeof (short) / sizeof (int) + 96, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 128, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 160, 18 + 512 * sizeof (short) / sizeof (int) + 176, 18 + 512 * sizeof (short) / sizeof (int) + 192, 18 + 512 * sizeof (short) / sizeof (int) + 208, 18 + 512 * sizeof (short) / sizeof (int) + 224, 18 + 512 * sizeof (short) / sizeof (int) + 240, 18 + 512 * sizeof (short) / sizeof (int) + 256, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 288, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 336, 18 + 512 * sizeof (short) / sizeof (int) + 352, 18 + 512 * sizeof (short) / sizeof (int) + 368, 18 + 512 * sizeof (short) / sizeof (int) + 384, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 416, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 432, 18 + 512 * sizeof (short) / sizeof (int) + 448, 18 + 512 * sizeof (short) / sizeof (int) + 464, 18 + 512 * sizeof (short) / sizeof (int) + 480, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 496, -1, 18 + 512 * sizeof (short) / sizeof (int) + 512, 18 + 512 * sizeof (short) / sizeof (int) + 528, 18 + 512 * sizeof (short) / sizeof (int) + 544, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 560, 18 + 512 * sizeof (short) / sizeof (int) + 576, 18 + 512 * sizeof (short) / sizeof (int) + 592, 18 + 512 * sizeof (short) / sizeof (int) + 608, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 624, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 640, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 656, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 672, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 688, 18 + 512 * sizeof (short) / sizeof (int) + 704, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 720, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 736, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 752, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 768, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 784, 18 + 512 * sizeof (short) / sizeof (int) + 800, 18 + 512 * sizeof (short) / sizeof (int) + 304, -1, 18 + 512 * sizeof (short) / sizeof (int) + 816, 18 + 512 * sizeof (short) / sizeof (int) + 832, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 848, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 848 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF9FFFFFFU, 0x00030003U, 0x0000401FU, 0x00000000U, 0x00000000U, 0x00000000U, 0xBFCF0000U, 0xFFFFFF4FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC07U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001BFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0xEBFFFFFFU, 0xFF01DE01U, 0xFFFFFFF3U, 0xFFFFFFFDU, 0xEFFFFFFFU, 0xFFFFDFE1U, 0xF7F3FFF3U, 0xFFFFFFF9U, 0xEFFFFFFFU, 0xFFFDC679U, 0xFFDCFFFFU, 0xFFFFFFF9U, 0xEFFFFFFFU, 0xFFFFDE41U, 0xFFFDFFF3U, 0xFFFFFFFDU, 0x6FFFFFFFU, 0xFFBFDFE1U, 0xFFFFFFF3U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFDFFEU, 0xF807FFFFU, 0xFFFFFFFEU, 0x3FFFFFFFU, 0xFF9FC23EU, 0x80FFFFF3U, 0xFFFFFFFDU, 0xEFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFF3U, 0xFFFFFFFDU, 0xFFFFFFFFU, 0xFFFFDFE1U, 0xFFFFFFF3U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFA3FBFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x780DFFFFU, 0xFFFF807FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE40DFFFFU, 0xFFFFC0FFU, 0xFFFFFFFFU, 0xFCFFFFFFU, 0xC15FFFFFU, 0xFFFFFFFFU, 0x8001FFFFU, 0x01001F20U, 0xE0000000U, 0xFFFFFFBFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x99021FFFU, 0x3CFFFFFFU, 0xFFE1FFFEU, 0xDFFFDF9BU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFC00FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE7FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFE3FFFFU, 0xFFE3FFFFU, 0xFFF3FFFFU, 0xFFF3FFFFU, 0xFFFFFFFFU, 0xC04FFFFFU, 0xD7F001BFU, 0xFC00FFFFU, 0xFFFF8000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF9FU, 0xFFFFFDFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF1FBFE78U, 0xFFFFFFCEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xF67FFFFFU, 0xFFFFFFFFU, 0x80BFFFFFU, 0x6007E01AU, 0xFFFFFFFFU, 0x8000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFF0U, 0xE82FFFFFU, 0xFFFFFFFBU, 0xFFF007FFU, 0xFFFFFFFCU, 0xFFFFC4C3U, 0xFFFFFFFFU, 0xFFFC5CBFU, 0xFFFFFFFFU, 0xFF300FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0008FFFFU, 0xFCEFDE02U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x07C00000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x5FFFFFFFU, 0x1FFF1FFCU, 0x9FFF1FFFU, 0x00004000U, 0x00000000U, 0x00000000U, 0x800E0000U, 0xFFFF8000U, 0x80000000U, 0x0000FFFFU, 0xFFFE0000U, 0x3E2FFC84U, 0xF3FFBD50U, 0x0000C3E0U, 0xFFFFFFFFU, 0x0000F1FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00200000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFF800U, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00C00000U, 0x1C000000U, 0xFFFC0200U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FC781FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0xFFFFFFFFU, 0x04000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xF000FFFFU, 0x000000E0U, 0x1F3EC3FEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE1FFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFF0U, 0x9FFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x8FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0xFFFFFF80U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFCFFFFU, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF7BBU, 0xFCFFF09FU, 0xFFFFFFFFU, 0xFF0FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFCFU, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFC03FU, 0xFFFC007FU, 0xFFFFFFFFU, 0xFFFFFFF8U, 0xEC37FFFFU, 0xFFFFFFFFU, 0xFFFFFFDFU, 0xFFFFFFFFU, 0xFF9981FFU, 0xFFFFEFF7U, 0xEFFFFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0xFFFFFFFDU, 0xFFBFCFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFDEDFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00008080U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFDU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xF000E000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFDU, 0x00FFFFFFU, 0x0003FF80U, 0x7FFFFFC0U, 0xFFFFFFFCU, 0xF987FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFF8U, 0xFFE0107FU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFFFFFFCU, 0x803FFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xBF2C7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFF807U, 0xFFFFFFFCU, 0xEFFFFFFFU, 0xFFFFFFFEU, 0xFFE0E03FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFA3U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7A07FFFFU, 0xFFFFFFF2U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x4FC3FFFFU, 0xCFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x5807FFFFU, 0xFFFFFFFEU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFF40D7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFF043U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC080FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFF920300U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFE0FFFFU, 0xFFFFFFFFU, 0xFF80FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF87FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FC7FU, 0xFFFFF018U, 0xFFFFC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFFFDFFU, 0xFFFFFFFFU, 0x00003FF7U, 0x00000000U, 0x00000000U, 0x07800000U, 0x00000000U, 0xFFDFE000U, 0x07FFFFEFU, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x06000080U, 0xFFFFF824U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800060U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x3C00F800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000010U, 0xF5080169U, 0x5569157BU, 0xA1080869U, 0xF0000400U, 0xF0000411U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00018000U, 0x00010001U, 0xFFC00000U, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFF80E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0xFFFFFFFFU, 0x0000F000U, 0x00000000U, 0xFC00FF00U, 0x00000000U, 0x0000FF00U, 0xFFFFC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8000FFFFU, 0x8006FF00U, 0x8000F000U, 0xFFFFFFFFU, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �����������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_non_spacing_mark.c�������������������������������������0000664�0000000�0000000�00000003332�14110572173�0024052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_non_spacing_mark table. */ #include "pr_bidi_non_spacing_mark.h" bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_non_spacing_mark, uc); } #else bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_NSM); } #endif const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK = { &uc_is_property_bidi_non_spacing_mark }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_non_spacing_mark.h�������������������������������������0000664�0000000�0000000�00000040020�14110572173�0024052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[38 << 4]; } u_property_bidi_non_spacing_mark = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, -1, 16 + 384 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 224, -1, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, -1, 16 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 512, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFFFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x9FC00000U, 0x00003D9FU, 0x00020000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x000FF800U, 0xFBC00000U, 0x00003EEFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFBU, 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0000000CU, 0x00000002U, 0x10000000U, 0x0000201EU, 0x0000000CU, 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, 0x00000006U, 0x10000000U, 0x000021BEU, 0x0000000CU, 0x00000002U, 0x90000000U, 0x0040201EU, 0x0000000CU, 0x00000004U, 0x00000000U, 0x00002001U, 0x00000000U, 0x00000001U, 0xC0000000U, 0x00603DC1U, 0x0000000CU, 0x00000002U, 0x10000000U, 0x00003000U, 0x0000000CU, 0x00000002U, 0x00000000U, 0x0000201EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x005C0400U, 0x00000000U, 0x00000000U, 0x07F20000U, 0x00007F80U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, 0x20002064U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0x3FB00000U, 0x200FFE40U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, 0x00000000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, 0x00000000U, 0x00CFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FF78000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, 0x00000007U, 0x13C80000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00667E00U, 0x00001008U, 0x10000000U, 0x00000000U, 0xC19D0000U, 0x00000002U, 0x00403000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000003U, 0x06780000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, 0x00000003U, 0x7FC00000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x40D38000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, 0x00000003U, 0x10000000U, 0x00000001U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0000005CU, 0x00000000U, 0x00000000U, 0x85F80000U, 0x0000000DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB03C0000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F7F0000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000380U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_other_neutral.c����������������������������������������0000664�0000000�0000000�00000003304�14110572173�0023414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_other_neutral table. */ #include "pr_bidi_other_neutral.h" bool uc_is_property_bidi_other_neutral (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_other_neutral, uc); } #else bool uc_is_property_bidi_other_neutral (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_ON); } #endif const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL = { &uc_is_property_bidi_other_neutral }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_other_neutral.h����������������������������������������0000664�0000000�0000000�00000036044�14110572173�0023430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[40 << 4]; } u_property_bidi_other_neutral = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, -1, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 576, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 592, 3 + 256 * sizeof (short) / sizeof (int) + 608, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, -1, -1 }, { 0x00000000U, 0xF80007C6U, 0xF8000001U, 0x78000001U, 0x00000000U, 0xF9D0DBC2U, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x06000000U, 0xFFFCFFFCU, 0xFFFFBFE0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40300000U, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C0C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x05F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3C000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000031U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0xFFFF0000U, 0xFFE000FFU, 0x7FFFFFEFU, 0x70000000U, 0x00007000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC1D0037BU, 0x0C0002AFU, 0xFFFF3C1FU, 0x00000000U, 0xFFFF0E00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF3FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xF8000000U, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFEFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFE0007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0xFFFFFF1EU, 0xE0C10001U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000001U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000000FU, 0x60000000U, 0x00000000U, 0xFFFF0000U, 0x70000000U, 0x00000000U, 0xFFFE0000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07800000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0xC0080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000000U, 0x00F00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x03FF0000U, 0xFFFF0000U, 0x7FD2FFFFU, 0x00000973U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF80007C6U, 0xF8000001U, 0xF8000001U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E007F1CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFF1FFFU, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFE000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0x00001800U, 0x00000000U, 0x00000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_pdf.c��������������������������������������������������0000664�0000000�0000000�00000003177�14110572173�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_pdf table. */ #include "pr_bidi_pdf.h" bool uc_is_property_bidi_pdf (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_pdf, uc); } #else bool uc_is_property_bidi_pdf (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_PDF); } #endif const uc_property_t UC_PROPERTY_BIDI_PDF = { &uc_is_property_bidi_pdf }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_pdf.h��������������������������������������������������0000664�0000000�0000000�00000006300�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_bidi_pdf = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_segment_separator.c������������������������������������0000664�0000000�0000000�00000003337�14110572173�0024271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_segment_separator table. */ #include "pr_bidi_segment_separator.h" bool uc_is_property_bidi_segment_separator (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_segment_separator, uc); } #else bool uc_is_property_bidi_segment_separator (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_S); } #endif const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR = { &uc_is_property_bidi_segment_separator }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_segment_separator.h������������������������������������0000664�0000000�0000000�00000006316�14110572173�0024276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_bidi_segment_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x80000A00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_whitespace.c�������������������������������������������0000664�0000000�0000000�00000003257�14110572173�0022704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_bidi_whitespace table. */ #include "pr_bidi_whitespace.h" bool uc_is_property_bidi_whitespace (ucs4_t uc) { return bitmap_lookup (&u_property_bidi_whitespace, uc); } #else bool uc_is_property_bidi_whitespace (ucs4_t uc) { return (uc_bidi_category (uc) == UC_BIDI_WS); } #endif const uc_property_t UC_PROPERTY_BIDI_WHITESPACE = { &uc_is_property_bidi_whitespace }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_bidi_whitespace.h�������������������������������������������0000664�0000000�0000000�00000007767�14110572173�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_property_bidi_whitespace = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00001000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00000100U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������gnulib-20210822~d383792/lib/unictype/pr_byname.c����������������������������������������������������0000664�0000000�0000000�00000032473�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2007, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include <stdlib.h> #include <string.h> /* Indices stored in the 'struct named_category' elements of the perfect hash table. We don't use uc_general_category_t values or their addresses directly, because this would introduce load-time relocations. */ enum { /* General. */ UC_PROPERTY_INDEX_WHITE_SPACE, UC_PROPERTY_INDEX_ALPHABETIC, UC_PROPERTY_INDEX_OTHER_ALPHABETIC, UC_PROPERTY_INDEX_NOT_A_CHARACTER, UC_PROPERTY_INDEX_DEFAULT_IGNORABLE_CODE_POINT, UC_PROPERTY_INDEX_OTHER_DEFAULT_IGNORABLE_CODE_POINT, UC_PROPERTY_INDEX_DEPRECATED, UC_PROPERTY_INDEX_LOGICAL_ORDER_EXCEPTION, UC_PROPERTY_INDEX_VARIATION_SELECTOR, UC_PROPERTY_INDEX_PRIVATE_USE, UC_PROPERTY_INDEX_UNASSIGNED_CODE_VALUE, /* Case. */ UC_PROPERTY_INDEX_UPPERCASE, UC_PROPERTY_INDEX_OTHER_UPPERCASE, UC_PROPERTY_INDEX_LOWERCASE, UC_PROPERTY_INDEX_OTHER_LOWERCASE, UC_PROPERTY_INDEX_TITLECASE, UC_PROPERTY_INDEX_CASED, UC_PROPERTY_INDEX_CASE_IGNORABLE, UC_PROPERTY_INDEX_CHANGES_WHEN_LOWERCASED, UC_PROPERTY_INDEX_CHANGES_WHEN_UPPERCASED, UC_PROPERTY_INDEX_CHANGES_WHEN_TITLECASED, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEFOLDED, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEMAPPED, UC_PROPERTY_INDEX_SOFT_DOTTED, /* Identifiers. */ UC_PROPERTY_INDEX_ID_START, UC_PROPERTY_INDEX_OTHER_ID_START, UC_PROPERTY_INDEX_ID_CONTINUE, UC_PROPERTY_INDEX_OTHER_ID_CONTINUE, UC_PROPERTY_INDEX_XID_START, UC_PROPERTY_INDEX_XID_CONTINUE, UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE, UC_PROPERTY_INDEX_PATTERN_SYNTAX, /* Shaping and rendering. */ UC_PROPERTY_INDEX_JOIN_CONTROL, UC_PROPERTY_INDEX_GRAPHEME_BASE, UC_PROPERTY_INDEX_GRAPHEME_EXTEND, UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND, UC_PROPERTY_INDEX_GRAPHEME_LINK, /* Bidi. */ UC_PROPERTY_INDEX_BIDI_CONTROL, UC_PROPERTY_INDEX_BIDI_LEFT_TO_RIGHT, UC_PROPERTY_INDEX_BIDI_HEBREW_RIGHT_TO_LEFT, UC_PROPERTY_INDEX_BIDI_ARABIC_RIGHT_TO_LEFT, UC_PROPERTY_INDEX_BIDI_EUROPEAN_DIGIT, UC_PROPERTY_INDEX_BIDI_EUR_NUM_SEPARATOR, UC_PROPERTY_INDEX_BIDI_EUR_NUM_TERMINATOR, UC_PROPERTY_INDEX_BIDI_ARABIC_DIGIT, UC_PROPERTY_INDEX_BIDI_COMMON_SEPARATOR, UC_PROPERTY_INDEX_BIDI_BLOCK_SEPARATOR, UC_PROPERTY_INDEX_BIDI_SEGMENT_SEPARATOR, UC_PROPERTY_INDEX_BIDI_WHITESPACE, UC_PROPERTY_INDEX_BIDI_NON_SPACING_MARK, UC_PROPERTY_INDEX_BIDI_BOUNDARY_NEUTRAL, UC_PROPERTY_INDEX_BIDI_PDF, UC_PROPERTY_INDEX_BIDI_EMBEDDING_OR_OVERRIDE, UC_PROPERTY_INDEX_BIDI_OTHER_NEUTRAL, /* Numeric. */ UC_PROPERTY_INDEX_HEX_DIGIT, UC_PROPERTY_INDEX_ASCII_HEX_DIGIT, /* CJK. */ UC_PROPERTY_INDEX_IDEOGRAPHIC, UC_PROPERTY_INDEX_UNIFIED_IDEOGRAPH, UC_PROPERTY_INDEX_RADICAL, UC_PROPERTY_INDEX_IDS_BINARY_OPERATOR, UC_PROPERTY_INDEX_IDS_TRINARY_OPERATOR, /* Misc. */ UC_PROPERTY_INDEX_ZERO_WIDTH, UC_PROPERTY_INDEX_SPACE, UC_PROPERTY_INDEX_NON_BREAK, UC_PROPERTY_INDEX_ISO_CONTROL, UC_PROPERTY_INDEX_FORMAT_CONTROL, UC_PROPERTY_INDEX_DASH, UC_PROPERTY_INDEX_HYPHEN, UC_PROPERTY_INDEX_PUNCTUATION, UC_PROPERTY_INDEX_LINE_SEPARATOR, UC_PROPERTY_INDEX_PARAGRAPH_SEPARATOR, UC_PROPERTY_INDEX_QUOTATION_MARK, UC_PROPERTY_INDEX_SENTENCE_TERMINAL, UC_PROPERTY_INDEX_TERMINAL_PUNCTUATION, UC_PROPERTY_INDEX_CURRENCY_SYMBOL, UC_PROPERTY_INDEX_MATH, UC_PROPERTY_INDEX_OTHER_MATH, UC_PROPERTY_INDEX_PAIRED_PUNCTUATION, UC_PROPERTY_INDEX_LEFT_OF_PAIR, UC_PROPERTY_INDEX_COMBINING, UC_PROPERTY_INDEX_COMPOSITE, UC_PROPERTY_INDEX_DECIMAL_DIGIT, UC_PROPERTY_INDEX_NUMERIC, UC_PROPERTY_INDEX_DIACRITIC, UC_PROPERTY_INDEX_EXTENDER, UC_PROPERTY_INDEX_IGNORABLE_CONTROL }; /* Get gperf generated lookup function. */ #include "unictype/pr_byname.h" static const uc_property_t UC_PROPERTY_NONE = { NULL }; uc_property_t uc_property_byname (const char *property_name) { char buf[MAX_WORD_LENGTH + 1]; const char *cp; char *bp; unsigned int count; const struct named_property *found; for (cp = property_name, bp = buf, count = MAX_WORD_LENGTH + 1; ; cp++, bp++) { unsigned char c = (unsigned char) *cp; if (c >= 0x80) goto invalid; if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; else if (c == ' ' || c == '-') c = '_'; *bp = c; if (c == '\0') break; if (--count == 0) goto invalid; } found = uc_property_lookup (buf, bp - buf); if (found != NULL) /* Use a 'switch' statement here, because a table would introduce load-time relocations. */ switch (found->property_index) { case UC_PROPERTY_INDEX_WHITE_SPACE: return UC_PROPERTY_WHITE_SPACE; case UC_PROPERTY_INDEX_ALPHABETIC: return UC_PROPERTY_ALPHABETIC; case UC_PROPERTY_INDEX_OTHER_ALPHABETIC: return UC_PROPERTY_OTHER_ALPHABETIC; case UC_PROPERTY_INDEX_NOT_A_CHARACTER: return UC_PROPERTY_NOT_A_CHARACTER; case UC_PROPERTY_INDEX_DEFAULT_IGNORABLE_CODE_POINT: return UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; case UC_PROPERTY_INDEX_OTHER_DEFAULT_IGNORABLE_CODE_POINT: return UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; case UC_PROPERTY_INDEX_DEPRECATED: return UC_PROPERTY_DEPRECATED; case UC_PROPERTY_INDEX_LOGICAL_ORDER_EXCEPTION: return UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; case UC_PROPERTY_INDEX_VARIATION_SELECTOR: return UC_PROPERTY_VARIATION_SELECTOR; case UC_PROPERTY_INDEX_PRIVATE_USE: return UC_PROPERTY_PRIVATE_USE; case UC_PROPERTY_INDEX_UNASSIGNED_CODE_VALUE: return UC_PROPERTY_UNASSIGNED_CODE_VALUE; case UC_PROPERTY_INDEX_UPPERCASE: return UC_PROPERTY_UPPERCASE; case UC_PROPERTY_INDEX_OTHER_UPPERCASE: return UC_PROPERTY_OTHER_UPPERCASE; case UC_PROPERTY_INDEX_LOWERCASE: return UC_PROPERTY_LOWERCASE; case UC_PROPERTY_INDEX_OTHER_LOWERCASE: return UC_PROPERTY_OTHER_LOWERCASE; case UC_PROPERTY_INDEX_TITLECASE: return UC_PROPERTY_TITLECASE; case UC_PROPERTY_INDEX_CASED: return UC_PROPERTY_CASED; case UC_PROPERTY_INDEX_CASE_IGNORABLE: return UC_PROPERTY_CASE_IGNORABLE; case UC_PROPERTY_INDEX_CHANGES_WHEN_LOWERCASED: return UC_PROPERTY_CHANGES_WHEN_LOWERCASED; case UC_PROPERTY_INDEX_CHANGES_WHEN_UPPERCASED: return UC_PROPERTY_CHANGES_WHEN_UPPERCASED; case UC_PROPERTY_INDEX_CHANGES_WHEN_TITLECASED: return UC_PROPERTY_CHANGES_WHEN_TITLECASED; case UC_PROPERTY_INDEX_CHANGES_WHEN_CASEFOLDED: return UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; case UC_PROPERTY_INDEX_CHANGES_WHEN_CASEMAPPED: return UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; case UC_PROPERTY_INDEX_SOFT_DOTTED: return UC_PROPERTY_SOFT_DOTTED; case UC_PROPERTY_INDEX_ID_START: return UC_PROPERTY_ID_START; case UC_PROPERTY_INDEX_OTHER_ID_START: return UC_PROPERTY_OTHER_ID_START; case UC_PROPERTY_INDEX_ID_CONTINUE: return UC_PROPERTY_ID_CONTINUE; case UC_PROPERTY_INDEX_OTHER_ID_CONTINUE: return UC_PROPERTY_OTHER_ID_CONTINUE; case UC_PROPERTY_INDEX_XID_START: return UC_PROPERTY_XID_START; case UC_PROPERTY_INDEX_XID_CONTINUE: return UC_PROPERTY_XID_CONTINUE; case UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE: return UC_PROPERTY_PATTERN_WHITE_SPACE; case UC_PROPERTY_INDEX_PATTERN_SYNTAX: return UC_PROPERTY_PATTERN_SYNTAX; case UC_PROPERTY_INDEX_JOIN_CONTROL: return UC_PROPERTY_JOIN_CONTROL; case UC_PROPERTY_INDEX_GRAPHEME_BASE: return UC_PROPERTY_GRAPHEME_BASE; case UC_PROPERTY_INDEX_GRAPHEME_EXTEND: return UC_PROPERTY_GRAPHEME_EXTEND; case UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND: return UC_PROPERTY_OTHER_GRAPHEME_EXTEND; case UC_PROPERTY_INDEX_GRAPHEME_LINK: return UC_PROPERTY_GRAPHEME_LINK; case UC_PROPERTY_INDEX_BIDI_CONTROL: return UC_PROPERTY_BIDI_CONTROL; case UC_PROPERTY_INDEX_BIDI_LEFT_TO_RIGHT: return UC_PROPERTY_BIDI_LEFT_TO_RIGHT; case UC_PROPERTY_INDEX_BIDI_HEBREW_RIGHT_TO_LEFT: return UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; case UC_PROPERTY_INDEX_BIDI_ARABIC_RIGHT_TO_LEFT: return UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; case UC_PROPERTY_INDEX_BIDI_EUROPEAN_DIGIT: return UC_PROPERTY_BIDI_EUROPEAN_DIGIT; case UC_PROPERTY_INDEX_BIDI_EUR_NUM_SEPARATOR: return UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; case UC_PROPERTY_INDEX_BIDI_EUR_NUM_TERMINATOR: return UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; case UC_PROPERTY_INDEX_BIDI_ARABIC_DIGIT: return UC_PROPERTY_BIDI_ARABIC_DIGIT; case UC_PROPERTY_INDEX_BIDI_COMMON_SEPARATOR: return UC_PROPERTY_BIDI_COMMON_SEPARATOR; case UC_PROPERTY_INDEX_BIDI_BLOCK_SEPARATOR: return UC_PROPERTY_BIDI_BLOCK_SEPARATOR; case UC_PROPERTY_INDEX_BIDI_SEGMENT_SEPARATOR: return UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; case UC_PROPERTY_INDEX_BIDI_WHITESPACE: return UC_PROPERTY_BIDI_WHITESPACE; case UC_PROPERTY_INDEX_BIDI_NON_SPACING_MARK: return UC_PROPERTY_BIDI_NON_SPACING_MARK; case UC_PROPERTY_INDEX_BIDI_BOUNDARY_NEUTRAL: return UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; case UC_PROPERTY_INDEX_BIDI_PDF: return UC_PROPERTY_BIDI_PDF; case UC_PROPERTY_INDEX_BIDI_EMBEDDING_OR_OVERRIDE: return UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; case UC_PROPERTY_INDEX_BIDI_OTHER_NEUTRAL: return UC_PROPERTY_BIDI_OTHER_NEUTRAL; case UC_PROPERTY_INDEX_HEX_DIGIT: return UC_PROPERTY_HEX_DIGIT; case UC_PROPERTY_INDEX_ASCII_HEX_DIGIT: return UC_PROPERTY_ASCII_HEX_DIGIT; case UC_PROPERTY_INDEX_IDEOGRAPHIC: return UC_PROPERTY_IDEOGRAPHIC; case UC_PROPERTY_INDEX_UNIFIED_IDEOGRAPH: return UC_PROPERTY_UNIFIED_IDEOGRAPH; case UC_PROPERTY_INDEX_RADICAL: return UC_PROPERTY_RADICAL; case UC_PROPERTY_INDEX_IDS_BINARY_OPERATOR: return UC_PROPERTY_IDS_BINARY_OPERATOR; case UC_PROPERTY_INDEX_IDS_TRINARY_OPERATOR: return UC_PROPERTY_IDS_TRINARY_OPERATOR; case UC_PROPERTY_INDEX_ZERO_WIDTH: return UC_PROPERTY_ZERO_WIDTH; case UC_PROPERTY_INDEX_SPACE: return UC_PROPERTY_SPACE; case UC_PROPERTY_INDEX_NON_BREAK: return UC_PROPERTY_NON_BREAK; case UC_PROPERTY_INDEX_ISO_CONTROL: return UC_PROPERTY_ISO_CONTROL; case UC_PROPERTY_INDEX_FORMAT_CONTROL: return UC_PROPERTY_FORMAT_CONTROL; case UC_PROPERTY_INDEX_DASH: return UC_PROPERTY_DASH; case UC_PROPERTY_INDEX_HYPHEN: return UC_PROPERTY_HYPHEN; case UC_PROPERTY_INDEX_PUNCTUATION: return UC_PROPERTY_PUNCTUATION; case UC_PROPERTY_INDEX_LINE_SEPARATOR: return UC_PROPERTY_LINE_SEPARATOR; case UC_PROPERTY_INDEX_PARAGRAPH_SEPARATOR: return UC_PROPERTY_PARAGRAPH_SEPARATOR; case UC_PROPERTY_INDEX_QUOTATION_MARK: return UC_PROPERTY_QUOTATION_MARK; case UC_PROPERTY_INDEX_SENTENCE_TERMINAL: return UC_PROPERTY_SENTENCE_TERMINAL; case UC_PROPERTY_INDEX_TERMINAL_PUNCTUATION: return UC_PROPERTY_TERMINAL_PUNCTUATION; case UC_PROPERTY_INDEX_CURRENCY_SYMBOL: return UC_PROPERTY_CURRENCY_SYMBOL; case UC_PROPERTY_INDEX_MATH: return UC_PROPERTY_MATH; case UC_PROPERTY_INDEX_OTHER_MATH: return UC_PROPERTY_OTHER_MATH; case UC_PROPERTY_INDEX_PAIRED_PUNCTUATION: return UC_PROPERTY_PAIRED_PUNCTUATION; case UC_PROPERTY_INDEX_LEFT_OF_PAIR: return UC_PROPERTY_LEFT_OF_PAIR; case UC_PROPERTY_INDEX_COMBINING: return UC_PROPERTY_COMBINING; case UC_PROPERTY_INDEX_COMPOSITE: return UC_PROPERTY_COMPOSITE; case UC_PROPERTY_INDEX_DECIMAL_DIGIT: return UC_PROPERTY_DECIMAL_DIGIT; case UC_PROPERTY_INDEX_NUMERIC: return UC_PROPERTY_NUMERIC; case UC_PROPERTY_INDEX_DIACRITIC: return UC_PROPERTY_DIACRITIC; case UC_PROPERTY_INDEX_EXTENDER: return UC_PROPERTY_EXTENDER; case UC_PROPERTY_INDEX_IGNORABLE_CONTROL: return UC_PROPERTY_IGNORABLE_CONTROL; default: abort (); } invalid: return UC_PROPERTY_NONE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_byname.gperf������������������������������������������������0000664�0000000�0000000�00000026510�14110572173�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ struct named_property { int name; int property_index; }; %struct-type %language=ANSI-C %define hash-function-name properties_hash %define lookup-function-name uc_property_lookup %7bit %readonly-tables %global-table %define word-array-name properties %pic %define string-pool-name properties_stringpool %% white_space, UC_PROPERTY_INDEX_WHITE_SPACE whitespace, UC_PROPERTY_INDEX_WHITE_SPACE wspace, UC_PROPERTY_INDEX_WHITE_SPACE alphabetic, UC_PROPERTY_INDEX_ALPHABETIC alpha, UC_PROPERTY_INDEX_ALPHABETIC other_alphabetic, UC_PROPERTY_INDEX_OTHER_ALPHABETIC otheralphabetic, UC_PROPERTY_INDEX_OTHER_ALPHABETIC oalpha, UC_PROPERTY_INDEX_OTHER_ALPHABETIC not_a_character, UC_PROPERTY_INDEX_NOT_A_CHARACTER notacharacter, UC_PROPERTY_INDEX_NOT_A_CHARACTER default_ignorable_code_point, UC_PROPERTY_INDEX_DEFAULT_IGNORABLE_CODE_POINT defaultignorablecodepoint, UC_PROPERTY_INDEX_DEFAULT_IGNORABLE_CODE_POINT di, UC_PROPERTY_INDEX_DEFAULT_IGNORABLE_CODE_POINT other_default_ignorable_code_point, UC_PROPERTY_INDEX_OTHER_DEFAULT_IGNORABLE_CODE_POINT otherdefaultignorablecodepoint, UC_PROPERTY_INDEX_OTHER_DEFAULT_IGNORABLE_CODE_POINT odi, UC_PROPERTY_INDEX_OTHER_DEFAULT_IGNORABLE_CODE_POINT deprecated, UC_PROPERTY_INDEX_DEPRECATED dep, UC_PROPERTY_INDEX_DEPRECATED logical_order_exception, UC_PROPERTY_INDEX_LOGICAL_ORDER_EXCEPTION logicalorderexception, UC_PROPERTY_INDEX_LOGICAL_ORDER_EXCEPTION loe, UC_PROPERTY_INDEX_LOGICAL_ORDER_EXCEPTION variation_selector, UC_PROPERTY_INDEX_VARIATION_SELECTOR variationselector, UC_PROPERTY_INDEX_VARIATION_SELECTOR vs, UC_PROPERTY_INDEX_VARIATION_SELECTOR private_use, UC_PROPERTY_INDEX_PRIVATE_USE privateuse, UC_PROPERTY_INDEX_PRIVATE_USE unassigned_code_value, UC_PROPERTY_INDEX_UNASSIGNED_CODE_VALUE unassignedcodevalue, UC_PROPERTY_INDEX_UNASSIGNED_CODE_VALUE uppercase, UC_PROPERTY_INDEX_UPPERCASE upper, UC_PROPERTY_INDEX_UPPERCASE other_uppercase, UC_PROPERTY_INDEX_OTHER_UPPERCASE otheruppercase, UC_PROPERTY_INDEX_OTHER_UPPERCASE oupper, UC_PROPERTY_INDEX_OTHER_UPPERCASE lowercase, UC_PROPERTY_INDEX_LOWERCASE lower, UC_PROPERTY_INDEX_LOWERCASE other_lowercase, UC_PROPERTY_INDEX_OTHER_LOWERCASE otherlowercase, UC_PROPERTY_INDEX_OTHER_LOWERCASE olower, UC_PROPERTY_INDEX_OTHER_LOWERCASE titlecase, UC_PROPERTY_INDEX_TITLECASE cased, UC_PROPERTY_INDEX_CASED case_ignorable, UC_PROPERTY_INDEX_CASE_IGNORABLE caseignorable, UC_PROPERTY_INDEX_CASE_IGNORABLE ci, UC_PROPERTY_INDEX_CASE_IGNORABLE changes_when_lowercased, UC_PROPERTY_INDEX_CHANGES_WHEN_LOWERCASED changeswhenlowercased, UC_PROPERTY_INDEX_CHANGES_WHEN_LOWERCASED cwl, UC_PROPERTY_INDEX_CHANGES_WHEN_LOWERCASED changes_when_uppercased, UC_PROPERTY_INDEX_CHANGES_WHEN_UPPERCASED changeswhenuppercased, UC_PROPERTY_INDEX_CHANGES_WHEN_UPPERCASED cwu, UC_PROPERTY_INDEX_CHANGES_WHEN_UPPERCASED changes_when_titlecased, UC_PROPERTY_INDEX_CHANGES_WHEN_TITLECASED changeswhentitlecased, UC_PROPERTY_INDEX_CHANGES_WHEN_TITLECASED cwt, UC_PROPERTY_INDEX_CHANGES_WHEN_TITLECASED changes_when_casefolded, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEFOLDED changeswhencasefolded, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEFOLDED cwcf, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEFOLDED changes_when_casemapped, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEMAPPED changeswhencasemapped, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEMAPPED cwcm, UC_PROPERTY_INDEX_CHANGES_WHEN_CASEMAPPED soft_dotted, UC_PROPERTY_INDEX_SOFT_DOTTED softdotted, UC_PROPERTY_INDEX_SOFT_DOTTED sd, UC_PROPERTY_INDEX_SOFT_DOTTED id_start, UC_PROPERTY_INDEX_ID_START idstart, UC_PROPERTY_INDEX_ID_START ids, UC_PROPERTY_INDEX_ID_START other_id_start, UC_PROPERTY_INDEX_OTHER_ID_START otheridstart, UC_PROPERTY_INDEX_OTHER_ID_START oids, UC_PROPERTY_INDEX_OTHER_ID_START id_continue, UC_PROPERTY_INDEX_ID_CONTINUE idcontinue, UC_PROPERTY_INDEX_ID_CONTINUE idc, UC_PROPERTY_INDEX_ID_CONTINUE other_id_continue, UC_PROPERTY_INDEX_OTHER_ID_CONTINUE otheridcontinue, UC_PROPERTY_INDEX_OTHER_ID_CONTINUE oidc, UC_PROPERTY_INDEX_OTHER_ID_CONTINUE xid_start, UC_PROPERTY_INDEX_XID_START xidstart, UC_PROPERTY_INDEX_XID_START xids, UC_PROPERTY_INDEX_XID_START xid_continue, UC_PROPERTY_INDEX_XID_CONTINUE xidcontinue, UC_PROPERTY_INDEX_XID_CONTINUE xidc, UC_PROPERTY_INDEX_XID_CONTINUE pattern_white_space, UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE patternwhitespace, UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE pat_ws, UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE patws, UC_PROPERTY_INDEX_PATTERN_WHITE_SPACE pattern_syntax, UC_PROPERTY_INDEX_PATTERN_SYNTAX patternsyntax, UC_PROPERTY_INDEX_PATTERN_SYNTAX pat_syn, UC_PROPERTY_INDEX_PATTERN_SYNTAX patsyn, UC_PROPERTY_INDEX_PATTERN_SYNTAX join_control, UC_PROPERTY_INDEX_JOIN_CONTROL joincontrol, UC_PROPERTY_INDEX_JOIN_CONTROL join_c, UC_PROPERTY_INDEX_JOIN_CONTROL joinc, UC_PROPERTY_INDEX_JOIN_CONTROL grapheme_base, UC_PROPERTY_INDEX_GRAPHEME_BASE graphemebase, UC_PROPERTY_INDEX_GRAPHEME_BASE gr_base, UC_PROPERTY_INDEX_GRAPHEME_BASE grbase, UC_PROPERTY_INDEX_GRAPHEME_BASE grapheme_extend, UC_PROPERTY_INDEX_GRAPHEME_EXTEND graphemeextend, UC_PROPERTY_INDEX_GRAPHEME_EXTEND gr_ext, UC_PROPERTY_INDEX_GRAPHEME_EXTEND grext, UC_PROPERTY_INDEX_GRAPHEME_EXTEND other_grapheme_extend, UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND othergraphemeextend, UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND ogr_ext, UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND ogrext, UC_PROPERTY_INDEX_OTHER_GRAPHEME_EXTEND grapheme_link, UC_PROPERTY_INDEX_GRAPHEME_LINK graphemelink, UC_PROPERTY_INDEX_GRAPHEME_LINK gr_link, UC_PROPERTY_INDEX_GRAPHEME_LINK grlink, UC_PROPERTY_INDEX_GRAPHEME_LINK bidi_control, UC_PROPERTY_INDEX_BIDI_CONTROL bidicontrol, UC_PROPERTY_INDEX_BIDI_CONTROL bidi_c, UC_PROPERTY_INDEX_BIDI_CONTROL bidic, UC_PROPERTY_INDEX_BIDI_CONTROL bidi_left_to_right, UC_PROPERTY_INDEX_BIDI_LEFT_TO_RIGHT bidilefttoright, UC_PROPERTY_INDEX_BIDI_LEFT_TO_RIGHT bidi_hebrew_right_to_left, UC_PROPERTY_INDEX_BIDI_HEBREW_RIGHT_TO_LEFT bidihebrewrighttoleft, UC_PROPERTY_INDEX_BIDI_HEBREW_RIGHT_TO_LEFT bidi_arabic_right_to_left, UC_PROPERTY_INDEX_BIDI_ARABIC_RIGHT_TO_LEFT bidiarabicrighttoleft, UC_PROPERTY_INDEX_BIDI_ARABIC_RIGHT_TO_LEFT bidi_european_digit, UC_PROPERTY_INDEX_BIDI_EUROPEAN_DIGIT bidieuropeandigit, UC_PROPERTY_INDEX_BIDI_EUROPEAN_DIGIT bidi_eur_num_separator, UC_PROPERTY_INDEX_BIDI_EUR_NUM_SEPARATOR bidieurnumseparator, UC_PROPERTY_INDEX_BIDI_EUR_NUM_SEPARATOR bidi_eur_num_terminator, UC_PROPERTY_INDEX_BIDI_EUR_NUM_TERMINATOR bidieurnumterminator, UC_PROPERTY_INDEX_BIDI_EUR_NUM_TERMINATOR bidi_arabic_digit, UC_PROPERTY_INDEX_BIDI_ARABIC_DIGIT bidiarabicdigit, UC_PROPERTY_INDEX_BIDI_ARABIC_DIGIT bidi_common_separator, UC_PROPERTY_INDEX_BIDI_COMMON_SEPARATOR bidicommonseparator, UC_PROPERTY_INDEX_BIDI_COMMON_SEPARATOR bidi_block_separator, UC_PROPERTY_INDEX_BIDI_BLOCK_SEPARATOR bidiblockseparator, UC_PROPERTY_INDEX_BIDI_BLOCK_SEPARATOR bidi_segment_separator, UC_PROPERTY_INDEX_BIDI_SEGMENT_SEPARATOR bidisegmentseparator, UC_PROPERTY_INDEX_BIDI_SEGMENT_SEPARATOR bidi_whitespace, UC_PROPERTY_INDEX_BIDI_WHITESPACE bidiwhitespace, UC_PROPERTY_INDEX_BIDI_WHITESPACE bidi_non_spacing_mark, UC_PROPERTY_INDEX_BIDI_NON_SPACING_MARK bidinonspacingmark, UC_PROPERTY_INDEX_BIDI_NON_SPACING_MARK bidi_boundary_neutral, UC_PROPERTY_INDEX_BIDI_BOUNDARY_NEUTRAL bidiboundaryneutral, UC_PROPERTY_INDEX_BIDI_BOUNDARY_NEUTRAL bidi_pdf, UC_PROPERTY_INDEX_BIDI_PDF bidipdf, UC_PROPERTY_INDEX_BIDI_PDF bidi_embedding_or_override, UC_PROPERTY_INDEX_BIDI_EMBEDDING_OR_OVERRIDE bidiembeddingoroverride, UC_PROPERTY_INDEX_BIDI_EMBEDDING_OR_OVERRIDE bidi_other_neutral, UC_PROPERTY_INDEX_BIDI_OTHER_NEUTRAL bidiotherneutral, UC_PROPERTY_INDEX_BIDI_OTHER_NEUTRAL hex_digit, UC_PROPERTY_INDEX_HEX_DIGIT hexdigit, UC_PROPERTY_INDEX_HEX_DIGIT hex, UC_PROPERTY_INDEX_HEX_DIGIT ascii_hex_digit, UC_PROPERTY_INDEX_ASCII_HEX_DIGIT asciihexdigit, UC_PROPERTY_INDEX_ASCII_HEX_DIGIT ahex, UC_PROPERTY_INDEX_ASCII_HEX_DIGIT ideographic, UC_PROPERTY_INDEX_IDEOGRAPHIC ideo, UC_PROPERTY_INDEX_IDEOGRAPHIC unified_ideograph, UC_PROPERTY_INDEX_UNIFIED_IDEOGRAPH unifiedideograph, UC_PROPERTY_INDEX_UNIFIED_IDEOGRAPH uideo, UC_PROPERTY_INDEX_UNIFIED_IDEOGRAPH radical, UC_PROPERTY_INDEX_RADICAL ids_binary_operator, UC_PROPERTY_INDEX_IDS_BINARY_OPERATOR idsbinaryoperator, UC_PROPERTY_INDEX_IDS_BINARY_OPERATOR idsb, UC_PROPERTY_INDEX_IDS_BINARY_OPERATOR ids_trinary_operator, UC_PROPERTY_INDEX_IDS_TRINARY_OPERATOR idstrinaryoperator, UC_PROPERTY_INDEX_IDS_TRINARY_OPERATOR idst, UC_PROPERTY_INDEX_IDS_TRINARY_OPERATOR zero_width, UC_PROPERTY_INDEX_ZERO_WIDTH zerowidth, UC_PROPERTY_INDEX_ZERO_WIDTH space, UC_PROPERTY_INDEX_SPACE non_break, UC_PROPERTY_INDEX_NON_BREAK nonbreak, UC_PROPERTY_INDEX_NON_BREAK iso_control, UC_PROPERTY_INDEX_ISO_CONTROL isocontrol, UC_PROPERTY_INDEX_ISO_CONTROL format_control, UC_PROPERTY_INDEX_FORMAT_CONTROL formatcontrol, UC_PROPERTY_INDEX_FORMAT_CONTROL dash, UC_PROPERTY_INDEX_DASH hyphen, UC_PROPERTY_INDEX_HYPHEN punctuation, UC_PROPERTY_INDEX_PUNCTUATION line_separator, UC_PROPERTY_INDEX_LINE_SEPARATOR lineseparator, UC_PROPERTY_INDEX_LINE_SEPARATOR paragraph_separator, UC_PROPERTY_INDEX_PARAGRAPH_SEPARATOR paragraphseparator, UC_PROPERTY_INDEX_PARAGRAPH_SEPARATOR quotation_mark, UC_PROPERTY_INDEX_QUOTATION_MARK quotationmark, UC_PROPERTY_INDEX_QUOTATION_MARK qmark, UC_PROPERTY_INDEX_QUOTATION_MARK sentence_terminal, UC_PROPERTY_INDEX_SENTENCE_TERMINAL sentenceterminal, UC_PROPERTY_INDEX_SENTENCE_TERMINAL terminal_punctuation, UC_PROPERTY_INDEX_TERMINAL_PUNCTUATION terminalpunctuation, UC_PROPERTY_INDEX_TERMINAL_PUNCTUATION term, UC_PROPERTY_INDEX_TERMINAL_PUNCTUATION currency_symbol, UC_PROPERTY_INDEX_CURRENCY_SYMBOL currencysymbol, UC_PROPERTY_INDEX_CURRENCY_SYMBOL math, UC_PROPERTY_INDEX_MATH other_math, UC_PROPERTY_INDEX_OTHER_MATH othermath, UC_PROPERTY_INDEX_OTHER_MATH omath, UC_PROPERTY_INDEX_OTHER_MATH paired_punctuation, UC_PROPERTY_INDEX_PAIRED_PUNCTUATION pairedpunctuation, UC_PROPERTY_INDEX_PAIRED_PUNCTUATION left_of_pair, UC_PROPERTY_INDEX_LEFT_OF_PAIR leftofpair, UC_PROPERTY_INDEX_LEFT_OF_PAIR combining, UC_PROPERTY_INDEX_COMBINING composite, UC_PROPERTY_INDEX_COMPOSITE decimal_digit, UC_PROPERTY_INDEX_DECIMAL_DIGIT decimaldigit, UC_PROPERTY_INDEX_DECIMAL_DIGIT numeric, UC_PROPERTY_INDEX_NUMERIC diacritic, UC_PROPERTY_INDEX_DIACRITIC dia, UC_PROPERTY_INDEX_DIACRITIC extender, UC_PROPERTY_INDEX_EXTENDER ext, UC_PROPERTY_INDEX_EXTENDER ignorable_control, UC_PROPERTY_INDEX_IGNORABLE_CONTROL ignorablecontrol, UC_PROPERTY_INDEX_IGNORABLE_CONTROL ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_case_ignorable.c��������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0022513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_case_ignorable table. */ #include "pr_case_ignorable.h" bool uc_is_property_case_ignorable (ucs4_t uc) { return bitmap_lookup (&u_property_case_ignorable, uc); } const uc_property_t UC_PROPERTY_CASE_IGNORABLE = { &uc_is_property_case_ignorable }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_case_ignorable.h��������������������������������������������0000664�0000000�0000000�00000043151�14110572173�0022520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[44 << 4]; } u_property_case_ignorable = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, 16 + 384 * sizeof (short) / sizeof (int) + 208, 16 + 384 * sizeof (short) / sizeof (int) + 224, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, -1, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, 16 + 384 * sizeof (short) / sizeof (int) + 480, 16 + 384 * sizeof (short) / sizeof (int) + 496, 16 + 384 * sizeof (short) / sizeof (int) + 512, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, 16 + 384 * sizeof (short) / sizeof (int) + 608, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 624, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 656, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x04004080U, 0x40000000U, 0x00000001U, 0x00000000U, 0x0190A100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0430FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00100000U, 0x17FF003FU, 0x00000000U, 0xFFFFF801U, 0x00010000U, 0x00000000U, 0x00000000U, 0xBFC00000U, 0x00003DFFU, 0x00028000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x043FF800U, 0xFFC00000U, 0x00003FFFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFFU, 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0002000CU, 0x00000002U, 0x10000000U, 0x0000201EU, 0x0000000CU, 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, 0x00000006U, 0x10000000U, 0x000021BEU, 0x0000000CU, 0x00000002U, 0x90000000U, 0x0040201EU, 0x0000000CU, 0x00000004U, 0x00000000U, 0x00002001U, 0x00000000U, 0x00000001U, 0xC0000000U, 0x00603DC1U, 0x0000000CU, 0x00000002U, 0x90000000U, 0x00003040U, 0x0000000CU, 0x00000002U, 0x00000000U, 0x0000201EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x005C0400U, 0x00000000U, 0x00000000U, 0x07F20000U, 0x00007FC0U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F40U, 0x00000000U, 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, 0x20002064U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0x3FB00000U, 0x208FFE40U, 0x00000000U, 0x00007800U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, 0x00000000U, 0x7FFF0080U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, 0x00000000U, 0x00CFF000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, 0x00000000U, 0xFFFFF000U, 0xFFFFFFFFU, 0x010007FFU, 0xF8000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0x0300F800U, 0x00007C90U, 0x00000000U, 0x8002FFDFU, 0x1FFF0000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x083E3C00U, 0x00000000U, 0x00000000U, 0x7E000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0xBFF78000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00010000U, 0x00000700U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000844U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, 0x00000007U, 0x13C80000U, 0x00008000U, 0x00000060U, 0x00000000U, 0x00667E00U, 0x00001008U, 0x10010000U, 0x00000000U, 0xC19D0000U, 0x20000002U, 0x00583000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000003U, 0x00000000U, 0x0008FFFFU, 0x0000FFFFU, 0x00240000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x04004080U, 0x40000000U, 0x00000001U, 0x00010000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x0E000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000003U, 0x26780000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, 0x00000003U, 0x7FC00000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x40D38000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, 0x00000003U, 0x10000000U, 0x00000001U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0000005CU, 0x00000000U, 0x00000000U, 0x85F80000U, 0x0000000DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB03C0000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xBF7F0000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80380U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_cased.c�����������������������������������������������������0000664�0000000�0000000�00000002770�14110572173�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_cased table. */ #include "pr_cased.h" bool uc_is_property_cased (ucs4_t uc) { return bitmap_lookup (&u_property_cased, uc); } const uc_property_t UC_PROPERTY_CASED = { &uc_is_property_cased }; ��������gnulib-20210822~d383792/lib/unictype/pr_cased.h�����������������������������������������������������0000664�0000000�0000000�00000023667�14110572173�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[21 << 4]; } u_property_cased = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x01FFFFFFU, 0x00000003U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCCF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x007FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF21FBD50U, 0x000043E0U, 0xFFFFFFFFU, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00003FFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF78FFU, 0x00FF7FFFU, 0x00000000U, 0x07000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_casefolded.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_changes_when_casefolded table. */ #include "pr_changes_when_casefolded.h" bool uc_is_property_changes_when_casefolded (ucs4_t uc) { return bitmap_lookup (&u_property_changes_when_casefolded, uc); } const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED = { &uc_is_property_changes_when_casefolded }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_casefolded.h�����������������������������������0000664�0000000�0000000�00000022231�14110572173�0024361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_property_changes_when_casefolded = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00200000U, 0xFF7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555556AAU, 0xAB555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAADB0U, 0x55D65555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x55638004U, 0xE6B35555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x4C155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0xFFFFFFFFU, 0x1F9CFFFFU, 0x0F001F9CU, 0x1F9C1F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040C40U, 0x00000000U, 0x0000FFFFU, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x005F7D55U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_casemapped.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_changes_when_casemapped table. */ #include "pr_changes_when_casemapped.h" bool uc_is_property_changes_when_casemapped (ucs4_t uc) { return bitmap_lookup (&u_property_changes_when_casemapped, uc); } const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED = { &uc_is_property_changes_when_casemapped }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_casemapped.h�����������������������������������0000664�0000000�0000000�00000022231�14110572173�0024372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_property_changes_when_casemapped = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFEFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF7FFDFFFU, 0xB3FFF3FFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFC0FFFFDU, 0x1ADFFFFFU, 0x20269F6BU, 0x60041F89U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0xB8CF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFE3FFFFU, 0xEFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x007FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x4FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040C40U, 0x00004000U, 0xFFFFFFFFU, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xC06DFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C780FU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00003FFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFCFFFCU, 0xFFFFFFFFU, 0xFE00FFFFU, 0xFFCF38FFU, 0x00FF7FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_lowercased.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_changes_when_lowercased table. */ #include "pr_changes_when_lowercased.h" bool uc_is_property_changes_when_lowercased (ucs4_t uc) { return bitmap_lookup (&u_property_changes_when_lowercased, uc); } const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED = { &uc_is_property_changes_when_lowercased }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_lowercased.h�����������������������������������0000664�0000000�0000000�00000020551�14110572173�0024423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[15 << 4]; } u_property_changes_when_lowercased = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555554AAU, 0x2B555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAADB0U, 0x55D65555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x55008000U, 0xE6905555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x40155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0xFF00FF00U, 0x1F00FF00U, 0x0F001F00U, 0x1F001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040C40U, 0x00000000U, 0x0000FFFFU, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x005F7D55U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_titlecased.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_changes_when_titlecased table. */ #include "pr_changes_when_titlecased.h" bool uc_is_property_changes_when_titlecased (ucs4_t uc) { return bitmap_lookup (&u_property_changes_when_titlecased, uc); } const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED = { &uc_is_property_changes_when_titlecased }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_titlecased.h�����������������������������������0000664�0000000�0000000�00000021611�14110572173�0024412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[17 << 4]; } u_property_changes_when_titlecased = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x54AAAAAAU, 0xAAAAAB55U, 0xD4AAAAAAU, 0x46241129U, 0xA251212AU, 0xB55556D0U, 0xAA2BAAAAU, 0xAAAAAAAAU, 0x900AAAA8U, 0x1ADFAA85U, 0x20269F6BU, 0x60041F89U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x388A0000U, 0x00010000U, 0xFFFFF000U, 0xAAE37FFFU, 0x092FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0FEAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00FF003FU, 0x3FFF00FFU, 0x00FF00FFU, 0x40DF00FFU, 0x00CF00DCU, 0x00DC00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0xFFFF0000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFFFFFFU, 0x00481562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008500AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x0AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAA8AAA8U, 0xAAAAAAAAU, 0x9400AAAAU, 0xAA8A10AAU, 0x00A002AAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_uppercased.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_changes_when_uppercased table. */ #include "pr_changes_when_uppercased.h" bool uc_is_property_changes_when_uppercased (ucs4_t uc) { return bitmap_lookup (&u_property_changes_when_uppercased, uc); } const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED = { &uc_is_property_changes_when_uppercased }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_changes_when_uppercased.h�����������������������������������0000664�0000000�0000000�00000021611�14110572173�0024424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[17 << 4]; } u_property_changes_when_uppercased = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x54AAAAAAU, 0xAAAAAB55U, 0xD4AAAAAAU, 0x46241129U, 0xA251212AU, 0xB5555B60U, 0xAA2DAAAAU, 0xAAAAAAAAU, 0x900AAAA8U, 0x1ADFAA85U, 0x20269F6BU, 0x60041F89U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x388A0000U, 0x00010000U, 0xFFFFF000U, 0xAAE37FFFU, 0x092FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0FEAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00FF003FU, 0x3FFF00FFU, 0xFFFFFFFFU, 0x50DFFFFFU, 0x00CF10DCU, 0x10DC00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0xFFFF0000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFFFFFFU, 0x00481562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008500AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x0AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAA8AAA8U, 0xAAAAAAAAU, 0x9400AAAAU, 0xAA8A10AAU, 0x00A002AAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_combining.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_combining table. */ #include "pr_combining.h" bool uc_is_property_combining (ucs4_t uc) { return bitmap_lookup (&u_property_combining, uc); } const uc_property_t UC_PROPERTY_COMBINING = { &uc_is_property_combining }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_combining.h�������������������������������������������������0000664�0000000�0000000�00000040004�14110572173�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[38 << 4]; } u_property_combining = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, -1, 16 + 384 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 224, -1, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, -1, 16 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 512, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFFFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x9FC00000U, 0x00003D9FU, 0x00020000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x000FF800U, 0xFBC00000U, 0x00003EEFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFBU, 0x0000000FU, 0xDC000000U, 0x00FEFFFFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x0080399FU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00023987U, 0x00230000U, 0x0000000EU, 0xD0000000U, 0x00003BBFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00C0399FU, 0x0000000CU, 0x00000004U, 0xC0000000U, 0x00803DC7U, 0x00000000U, 0x0000000FU, 0xC0000000U, 0x00603DDFU, 0x0000000CU, 0x0000000EU, 0xD0000000U, 0x00603DDFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00803DDFU, 0x0000000CU, 0x0000000CU, 0x00000000U, 0xFF5F8400U, 0x000C0000U, 0x00000000U, 0x07F20000U, 0x00007F80U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0x03000000U, 0xC2A00000U, 0x00000000U, 0xFFFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x7FFFF800U, 0xC3C00000U, 0x001E3F9DU, 0x3C00BFFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0xFFF00000U, 0x200FFFFFU, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0F800000U, 0x00000000U, 0x7FE00000U, 0x9FFFFFFFU, 0x00000000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0xFFF00000U, 0x0000001FU, 0x000FF800U, 0x00000007U, 0x00003FFEU, 0x00000000U, 0x000FFFC0U, 0x00000000U, 0x00FFFFF0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031C21FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FF78000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x000000F8U, 0x00000000U, 0x00000000U, 0x00000003U, 0xFFF00000U, 0x0000003FU, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x000FFF80U, 0x00000000U, 0x0000000FU, 0xFFF80000U, 0x00000001U, 0x00000020U, 0x00000000U, 0x007FFE00U, 0x00003008U, 0x38000000U, 0x00000000U, 0xC19D0000U, 0x00000002U, 0x0060F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000037F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000007U, 0x07FF0000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FFF80U, 0x00000000U, 0x00080000U, 0x00000007U, 0xFFF80000U, 0x00001C01U, 0x00000000U, 0x00000000U, 0x40FFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007FFU, 0x0000000FU, 0xD0000000U, 0x0080399FU, 0x001F1FCCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x0000007FU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF3F8000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00FFF800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF7F8000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0x7FFFFFFFU, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807E3E0U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_composite.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_composite table. */ #include "pr_composite.h" bool uc_is_property_composite (ucs4_t uc) { return bitmap_lookup (&u_property_composite, uc); } const uc_property_t UC_PROPERTY_COMPOSITE = { &uc_is_property_composite }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_composite.h�������������������������������������������������0000664�0000000�0000000�00000031353�14110572173�0021566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[28 << 4]; } u_property_composite = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x3E7EFFBFU, 0xBE7EFFBFU, 0xFFFCFFFFU, 0xFEFDFF3FU, 0xFFF3F3F9U, 0x7FFFFF3FU, 0x00000000U, 0x00018003U, 0xDFFFFFF0U, 0xFF3FFFCFU, 0xCFFFFFFFU, 0x000FFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x0001D760U, 0x0001FC00U, 0x00187C00U, 0x00000000U, 0x0200708BU, 0x02000000U, 0x708B0000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0xFCCF0006U, 0x033FFCFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000007CU, 0x00000000U, 0x01E00000U, 0x00000000U, 0x00000000U, 0x00080005U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00120200U, 0xFF000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB0001800U, 0x00000000U, 0x00000000U, 0x00480000U, 0x4E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30001900U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000D81U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x74000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10842008U, 0x03E80200U, 0x20080002U, 0x02001084U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00045540U, 0x28000000U, 0x0000000BU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x1555FFFFU, 0xFFFFFFFFU, 0x17DFFFFFU, 0xE7C7F5DEU, 0x15DC37F7U, 0x00000000U, 0x10D80060U, 0x00800380U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x0040026BU, 0x08000007U, 0xFFFF0000U, 0x0DEE0DEEU, 0x0C000200U, 0x00004000U, 0x0000E000U, 0x00000000U, 0x00001210U, 0x0001B050U, 0x00000292U, 0x0333E005U, 0x00000333U, 0x0000F000U, 0x00000000U, 0x00003C0FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00700000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555000U, 0x36DB02A5U, 0xC0100000U, 0x55555000U, 0x36DB02A5U, 0xC7900000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0x7FFFC000U, 0x00000000U, 0xFFFE0000U, 0x0000FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0F8007FU, 0x5F7FFC00U, 0x0000FFDBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFC00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAA820000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FE00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x14000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x58000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x0000001FU, 0x00000000U, 0xF8000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF07FFU, 0x000067FFU, 0x0000FC00U, 0x00000C00U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_currency_symbol.c�������������������������������������������0000664�0000000�0000000�00000003265�14110572173�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_currency_symbol table. */ #include "pr_currency_symbol.h" bool uc_is_property_currency_symbol (ucs4_t uc) { return bitmap_lookup (&u_property_currency_symbol, uc); } #else bool uc_is_property_currency_symbol (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_Sc); } #endif const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL = { &uc_is_property_currency_symbol }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_currency_symbol.h�������������������������������������������0000664�0000000�0000000�00000013550�14110572173�0023002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[11 << 4]; } u_property_currency_symbol = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, 2 + 128 * sizeof (short) / sizeof (int) + 160 }, { 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000003CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x080C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000063U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_dash.c������������������������������������������������������0000664�0000000�0000000�00000002762�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_dash table. */ #include "pr_dash.h" bool uc_is_property_dash (ucs4_t uc) { return bitmap_lookup (&u_property_dash, uc); } const uc_property_t UC_PROPERTY_DASH = { &uc_is_property_dash }; ��������������gnulib-20210822~d383792/lib/unictype/pr_dash.h������������������������������������������������������0000664�0000000�0000000�00000012474�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[9 << 4]; } u_property_dash = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, 2 + 128 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 128 }, { 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0x00080000U, 0x08000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04800000U, 0x0C000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00060000U, 0x01000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_decimal_digit.c���������������������������������������������0000664�0000000�0000000�00000003247�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_decimal_digit table. */ #include "pr_decimal_digit.h" bool uc_is_property_decimal_digit (ucs4_t uc) { return bitmap_lookup (&u_property_decimal_digit, uc); } #else bool uc_is_property_decimal_digit (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_Nd); } #endif const uc_property_t UC_PROPERTY_DECIMAL_DIGIT = { &uc_is_property_decimal_digit }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_decimal_digit.h���������������������������������������������0000664�0000000�0000000�00000025437�14110572173�0022350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[24 << 4]; } u_property_decimal_digit = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFC000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_default_ignorable_code_point.c������������������������������0000664�0000000�0000000�00000003202�14110572173�0025420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_default_ignorable_code_point table. */ #include "pr_default_ignorable_code_point.h" bool uc_is_property_default_ignorable_code_point (ucs4_t uc) { return bitmap_lookup (&u_property_default_ignorable_code_point, uc); } const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT = { &uc_is_property_default_ignorable_code_point }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_default_ignorable_code_point.h������������������������������0000664�0000000�0000000�00000022707�14110572173�0025440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[12 << 4]; } u_property_default_ignorable_code_point = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00000000U, 0x00000000U, 0x00007800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00007C00U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x01FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU } }; ���������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_deprecated.c������������������������������������������������0000664�0000000�0000000�00000003026�14110572173�0021653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_deprecated table. */ #include "pr_deprecated.h" bool uc_is_property_deprecated (ucs4_t uc) { return bitmap_lookup (&u_property_deprecated, uc); } const uc_property_t UC_PROPERTY_DEPRECATED = { &uc_is_property_deprecated }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_deprecated.h������������������������������������������������0000664�0000000�0000000�00000014554�14110572173�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[2 << 7]; unsigned int level3[7 << 4]; } u_property_deprecated = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 128 }, { 16 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 64, 16 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000018U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_diacritic.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_diacritic table. */ #include "pr_diacritic.h" bool uc_is_property_diacritic (ucs4_t uc) { return bitmap_lookup (&u_property_diacritic, uc); } const uc_property_t UC_PROPERTY_DIACRITIC = { &uc_is_property_diacritic }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_diacritic.h�������������������������������������������������0000664�0000000�0000000�00000032173�14110572173�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[33 << 4]; } u_property_diacritic = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 464, -1, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x40000000U, 0x00000001U, 0x00000000U, 0x01908100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0FF7FFFU, 0x04300007U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFBU, 0x00000016U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0187F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00001C61U, 0x00000000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x003FF800U, 0x03000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFF8U, 0x00000000U, 0x10000000U, 0x001E2000U, 0x00020000U, 0x00000000U, 0x10000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00005F80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001F00U, 0x00000000U, 0x03000000U, 0xC2A00000U, 0x00000000U, 0x00000000U, 0x000000DCU, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x06800000U, 0x00000000U, 0x00000000U, 0x0C00BF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x200FFE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x9FE00000U, 0x00000000U, 0x3FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000010U, 0x000FF800U, 0x00000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x031021FFU, 0x00000000U, 0xFFFFF000U, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0000FFF0U, 0xE0200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB0008000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0xFF800000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x0003FFFFU, 0x00000000U, 0x00007800U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000001U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x38000000U, 0x00000000U, 0x80000000U, 0x00000007U, 0x00400000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000001U, 0x00010000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00180000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00001C01U, 0x00000000U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x10000000U, 0x00002000U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000044U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807E380U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000770U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_extender.c��������������������������������������������������0000664�0000000�0000000�00000003012�14110572173�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_extender table. */ #include "pr_extender.h" bool uc_is_property_extender (ucs4_t uc) { return bitmap_lookup (&u_property_extender, uc); } const uc_property_t UC_PROPERTY_EXTENDER = { &uc_is_property_extender }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_extender.h��������������������������������������������������0000664�0000000�0000000�00000022212�14110572173�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_property_extender = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x003E0000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00180000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000070U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_format_control.c��������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_format_control table. */ #include "pr_format_control.h" bool uc_is_property_format_control (ucs4_t uc) { return bitmap_lookup (&u_property_format_control, uc); } const uc_property_t UC_PROPERTY_FORMAT_CONTROL = { &uc_is_property_format_control }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_format_control.h��������������������������������������������0000664�0000000�0000000�00000017010�14110572173�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[6 << 4]; } u_property_format_control = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x0000FC1FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_base.c���������������������������������������������0000664�0000000�0000000�00000003050�14110572173�0022332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_grapheme_base table. */ #include "pr_grapheme_base.h" bool uc_is_property_grapheme_base (ucs4_t uc) { return bitmap_lookup (&u_property_grapheme_base, uc); } const uc_property_t UC_PROPERTY_GRAPHEME_BASE = { &uc_is_property_grapheme_base }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_base.h���������������������������������������������0000664�0000000�0000000�00000106322�14110572173�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[76 << 4]; } u_property_grapheme_base = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, 4 + 384 * sizeof (short) / sizeof (int) + 272, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, 4 + 384 * sizeof (short) / sizeof (int) + 752, 4 + 384 * sizeof (short) / sizeof (int) + 768, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 800, 4 + 384 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 896, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 912, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 976, 4 + 384 * sizeof (short) / sizeof (int) + 992, 4 + 384 * sizeof (short) / sizeof (int) + 1008, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1024, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 1040, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 1056, 4 + 384 * sizeof (short) / sizeof (int) + 1072, 4 + 384 * sizeof (short) / sizeof (int) + 1088, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1104, 4 + 384 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1136, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1152, 4 + 384 * sizeof (short) / sizeof (int) + 1168, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 1200, -1, -1 }, { 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFCFF0000U, 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC07U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFEU, 0x0000E6FFU, 0x40000000U, 0xFFFF0049U, 0x001F07FFU, 0xC800FFC0U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x403FFFFFU, 0xFFFFC260U, 0xFFFD3FFFU, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFFFFU, 0x07F007FFU, 0x043FFFFFU, 0x7FFF0110U, 0x41FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0xEBFFFFFFU, 0xFF01DE01U, 0xFFFFFFF3U, 0xFFF99FEDU, 0xA3C5FDFFU, 0xB0005981U, 0x0FFFFFC3U, 0xFFF987E8U, 0xC36DFDFFU, 0x5E000001U, 0x001CFFC0U, 0xFFFBBFE8U, 0xE3EDFDFFU, 0x00011A01U, 0x0203FFC3U, 0xFFF99FECU, 0x23EDFDFFU, 0xB0001981U, 0x00FFFFC3U, 0xD63DC7E8U, 0x83FFC718U, 0x00011DC6U, 0x07FFFFC0U, 0xFFFDDFEEU, 0x23FFFDFFU, 0x0700001EU, 0xFF00FFC3U, 0xFFFDDFEDU, 0x63EFFDFFU, 0x40000D9BU, 0x0006FFC3U, 0xFFFDDFECU, 0xA7FFFFFFU, 0xFF70DDC1U, 0xFFFFFFC3U, 0xFC7FFFECU, 0x2FFBFFFFU, 0x7F03007FU, 0x001CFFC0U, 0xFFFFFFFEU, 0x800DFFFFU, 0x0FFF807FU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF3FF005FU, 0x00000000U, 0xFCFFFFFFU, 0xFD5FFFFFU, 0xFFFFFEFFU, 0x80001FFFU, 0x00001F20U, 0xC0000000U, 0x07FFDFBFU, 0x00000000U, 0xFFFFFFFFU, 0x99021FFFU, 0x3CFFFFFFU, 0xFFE1FFFEU, 0xDFFFDF9BU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x1FFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x0003DFFFU, 0x0063FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0xC04FFFFFU, 0x1FF001BFU, 0x03FF03FFU, 0x03FF07FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x01FB0E78U, 0xFFFFFFF1U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, 0xC67FFFFFU, 0xFFFFFFFFU, 0x00BFFFFFU, 0x0007E01AU, 0x03FF03FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0xE82FFFFFU, 0xFFFF0FFBU, 0x1FF007FFU, 0xFFFFFFFCU, 0xFFFFC4C3U, 0xFFFFFFFFU, 0xF00C5CBFU, 0xFFFFFFFFU, 0xF8300FFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x000800FFU, 0x006FDE02U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, 0xFFFF07FFU, 0xFFFF80FFU, 0xFFFFFFFFU, 0xFFF30000U, 0x1FFF7FFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFF3FFFFFU, 0xE3FFFFFFU, 0x0003FDFFU, 0x0000F000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0C7FFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000180FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x0FFF0000U, 0xFFFFFFFFU, 0xFFFF03FFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xC0087FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FCFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x03FF0F9FU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC00FU, 0x3FFC0000U, 0xFFFFFFFFU, 0xFFFFC03FU, 0x800C007FU, 0x1FFFFFFFU, 0xFFFFFFF8U, 0xEC37FFFFU, 0xC3FFBFFFU, 0x7FFFFFDFU, 0xFFFFFFFFU, 0x001981FFU, 0xF3FF2FF7U, 0xEFFFFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0xF8000005U, 0x003FCFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF1EDFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x3FFF0000U, 0x03FF0000U, 0xFFFF0000U, 0xFFF7FFFFU, 0xFFDF0F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x30007F7FU, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFEU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFF07FFU, 0x003FFFFFU, 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000800FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFEEF0001U, 0x000FFFFFU, 0x01FF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF81FU, 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFDU, 0x00FFFFFFU, 0xFFFC3F80U, 0x0000FFFFU, 0xFFFFFFFCU, 0xD987FFFFU, 0xFFFF0003U, 0x03FF01FFU, 0xFFFFFFF8U, 0xFFC0107FU, 0xFFFF000FU, 0x0077FFFFU, 0xFFFFFFFCU, 0x803FFFFFU, 0xFFFF23FFU, 0x001FFFFEU, 0xFFFBFFFFU, 0x3F2C7FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF03FFU, 0x7FFFFFFFU, 0x03FF0007U, 0xFFF99FECU, 0xA3EDFDFFU, 0xE001399EU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00FFFFFFU, 0x2BFFFFA3U, 0x00000000U, 0xFFFFFFFFU, 0x5A06FFFFU, 0x03FF00F2U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x4F037FFFU, 0x0FFFFFFEU, 0x00000000U, 0xFFFFFFFFU, 0x5807FFFFU, 0x03FF001EU, 0x00001FFFU, 0xFFFFFFFFU, 0x0040D7FFU, 0x000003FFU, 0x00000000U, 0x03FFFFFFU, 0xFFFF0043U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x4000FFFFU, 0xFFFF003FU, 0xFFFF1FFFU, 0x0000FFFFU, 0x00120200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x0000C3FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00203FFFU, 0xFFFFFFFFU, 0xFF80FFFFU, 0xFBFF003FU, 0xE0FFFFFBU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x93FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0x00003C5FU, 0xFFFFF018U, 0xFFFFC3FFU, 0xFFFFFFFFU, 0x000001FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0x00000000U, 0x07800000U, 0x00000000U, 0xFFDFE000U, 0x00000FEFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFF1FFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x007F1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x7FF900FFU, 0x7FFF0FFFU, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_extend.c�������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_grapheme_extend table. */ #include "pr_grapheme_extend.h" bool uc_is_property_grapheme_extend (ucs4_t uc) { return bitmap_lookup (&u_property_grapheme_extend, uc); } const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND = { &uc_is_property_grapheme_extend }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_extend.h�������������������������������������������0000664�0000000�0000000�00000040012�14110572173�0022713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[38 << 4]; } u_property_grapheme_extend = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, 16 + 384 * sizeof (short) / sizeof (int) + 80, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 160, 16 + 384 * sizeof (short) / sizeof (int) + 176, 16 + 384 * sizeof (short) / sizeof (int) + 192, -1, 16 + 384 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 224, -1, 16 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 256, 16 + 384 * sizeof (short) / sizeof (int) + 272, 16 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 304, -1, 16 + 384 * sizeof (short) / sizeof (int) + 320, 16 + 384 * sizeof (short) / sizeof (int) + 336, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 384, 16 + 384 * sizeof (short) / sizeof (int) + 400, 16 + 384 * sizeof (short) / sizeof (int) + 416, 16 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 464, -1, 16 + 384 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 512, 16 + 384 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 544, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xBFFFFFFFU, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFFFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x9FC00000U, 0x00003D9FU, 0x00020000U, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x000FF800U, 0xFBC00000U, 0x00003EEFU, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFFFFFBU, 0x00000007U, 0x14000000U, 0x00FE21FEU, 0x0000000CU, 0x00000002U, 0x50000000U, 0x0080201EU, 0x0000000CU, 0x00000006U, 0x10000000U, 0x00023986U, 0x00230000U, 0x00000006U, 0x10000000U, 0x000021BEU, 0x0000000CU, 0x00000002U, 0xD0000000U, 0x00C0201EU, 0x0000000CU, 0x00000004U, 0x40000000U, 0x00802001U, 0x00000000U, 0x00000001U, 0xC0000000U, 0x00603DC1U, 0x0000000CU, 0x00000002U, 0x90000000U, 0x00603044U, 0x0000000CU, 0x00000002U, 0x40000000U, 0x0080201EU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x805C8400U, 0x00000000U, 0x00000000U, 0x07F20000U, 0x00007F80U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00003F00U, 0x00000000U, 0x03000000U, 0x02A00000U, 0x00000000U, 0x7FFE0000U, 0xFEFFE0DFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0x00000000U, 0x66FDE000U, 0xC3000000U, 0x001E0001U, 0x20002064U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001C0000U, 0x001C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0x3FB00000U, 0x200FFE40U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E040187U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x09800000U, 0x00000000U, 0x7F400000U, 0x9FF81FE5U, 0x00000000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x17D00000U, 0x00000004U, 0x000FF800U, 0x00000003U, 0x00003B3CU, 0x00000000U, 0x0003A340U, 0x00000000U, 0x00CFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF70000U, 0x031021FDU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF83FFFFFU, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0001FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00038000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FF78000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x0003FFFFU, 0x00000000U, 0x00003FC0U, 0x0003FF80U, 0x00000000U, 0x00000007U, 0x13C80000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00667E00U, 0x00001008U, 0x10000000U, 0x00000000U, 0xC19D0000U, 0x00000002U, 0x00403000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002120U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x87000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFF000000U, 0x0000007FU, 0x80000000U, 0x00000003U, 0x06780000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x001FEF80U, 0x00000000U, 0x00080000U, 0x00000003U, 0x7FC00000U, 0x00001C00U, 0x00000000U, 0x00000000U, 0x40D38000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000007F8U, 0x00000003U, 0x50000000U, 0x00800001U, 0x001F1FC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0000005CU, 0x00000000U, 0x00000000U, 0xA5F90000U, 0x0000000DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xB03C8000U, 0x30000001U, 0x00000000U, 0x00000000U, 0xA7F80000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00BF2800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000FBCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xBF7F0000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x006DFCFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00078000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807C3A0U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_link.c���������������������������������������������0000664�0000000�0000000�00000003050�14110572173�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_grapheme_link table. */ #include "pr_grapheme_link.h" bool uc_is_property_grapheme_link (ucs4_t uc) { return bitmap_lookup (&u_property_grapheme_link, uc); } const uc_property_t UC_PROPERTY_GRAPHEME_LINK = { &uc_is_property_grapheme_link }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_grapheme_link.h���������������������������������������������0000664�0000000�0000000�00000020617�14110572173�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[15 << 4]; } u_property_grapheme_link = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000000U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00100000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000C00U, 0x00000000U, 0x000C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x80000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00180000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_hex_digit.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_hex_digit table. */ #include "pr_hex_digit.h" bool uc_is_property_hex_digit (ucs4_t uc) { return bitmap_lookup (&u_property_hex_digit, uc); } const uc_property_t UC_PROPERTY_HEX_DIGIT = { &uc_is_property_hex_digit }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_hex_digit.h�������������������������������������������������0000664�0000000�0000000�00000006721�14110572173�0021531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_property_hex_digit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16 }, { 0x00000000U, 0x03FF0000U, 0x0000007EU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x0000007EU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_hyphen.c����������������������������������������������������0000664�0000000�0000000�00000002776�14110572173�0021061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_hyphen table. */ #include "pr_hyphen.h" bool uc_is_property_hyphen (ucs4_t uc) { return bitmap_lookup (&u_property_hyphen, uc); } const uc_property_t UC_PROPERTY_HYPHEN = { &uc_is_property_hyphen }; ��gnulib-20210822~d383792/lib/unictype/pr_hyphen.h����������������������������������������������������0000664�0000000�0000000�00000011436�14110572173�0021057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[7 << 4]; } u_property_hyphen = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96 }, { 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_id_continue.c�����������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_id_continue table. */ #include "pr_id_continue.h" bool uc_is_property_id_continue (ucs4_t uc) { return bitmap_lookup (&u_property_id_continue, uc); } const uc_property_t UC_PROPERTY_ID_CONTINUE = { &uc_is_property_id_continue }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_id_continue.h�����������������������������������������������0000664�0000000�0000000�00000105236�14110572173�0022066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[4 << 7]; unsigned int level3[69 << 4]; } u_property_id_continue = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, 16 * sizeof (int) / sizeof (short) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 384 }, { 16 + 512 * sizeof (short) / sizeof (int) + 0, 16 + 512 * sizeof (short) / sizeof (int) + 16, 16 + 512 * sizeof (short) / sizeof (int) + 32, 16 + 512 * sizeof (short) / sizeof (int) + 48, 16 + 512 * sizeof (short) / sizeof (int) + 64, 16 + 512 * sizeof (short) / sizeof (int) + 80, 16 + 512 * sizeof (short) / sizeof (int) + 96, 16 + 512 * sizeof (short) / sizeof (int) + 112, 16 + 512 * sizeof (short) / sizeof (int) + 128, 16 + 512 * sizeof (short) / sizeof (int) + 144, 16 + 512 * sizeof (short) / sizeof (int) + 160, 16 + 512 * sizeof (short) / sizeof (int) + 176, 16 + 512 * sizeof (short) / sizeof (int) + 192, 16 + 512 * sizeof (short) / sizeof (int) + 208, 16 + 512 * sizeof (short) / sizeof (int) + 224, 16 + 512 * sizeof (short) / sizeof (int) + 240, 16 + 512 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 272, -1, 16 + 512 * sizeof (short) / sizeof (int) + 288, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 320, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 336, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 352, 16 + 512 * sizeof (short) / sizeof (int) + 368, 16 + 512 * sizeof (short) / sizeof (int) + 384, 16 + 512 * sizeof (short) / sizeof (int) + 400, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 432, 16 + 512 * sizeof (short) / sizeof (int) + 448, 16 + 512 * sizeof (short) / sizeof (int) + 464, 16 + 512 * sizeof (short) / sizeof (int) + 480, 16 + 512 * sizeof (short) / sizeof (int) + 496, 16 + 512 * sizeof (short) / sizeof (int) + 512, 16 + 512 * sizeof (short) / sizeof (int) + 528, 16 + 512 * sizeof (short) / sizeof (int) + 544, 16 + 512 * sizeof (short) / sizeof (int) + 560, 16 + 512 * sizeof (short) / sizeof (int) + 576, 16 + 512 * sizeof (short) / sizeof (int) + 592, -1, 16 + 512 * sizeof (short) / sizeof (int) + 608, 16 + 512 * sizeof (short) / sizeof (int) + 624, 16 + 512 * sizeof (short) / sizeof (int) + 640, 16 + 512 * sizeof (short) / sizeof (int) + 656, 16 + 512 * sizeof (short) / sizeof (int) + 672, 16 + 512 * sizeof (short) / sizeof (int) + 688, 16 + 512 * sizeof (short) / sizeof (int) + 704, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 720, 16 + 512 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 784, -1, 16 + 512 * sizeof (short) / sizeof (int) + 800, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 816, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 880, 16 + 512 * sizeof (short) / sizeof (int) + 896, 16 + 512 * sizeof (short) / sizeof (int) + 912, 16 + 512 * sizeof (short) / sizeof (int) + 928, -1, 16 + 512 * sizeof (short) / sizeof (int) + 944, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 960, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 976, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1008, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1024, 16 + 512 * sizeof (short) / sizeof (int) + 1040, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1056, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1072, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 1088, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x87FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04A00400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xBCDFFFFFU, 0xFFFFD7C0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFCFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0xFFFE00FFU, 0xBFFFFFFFU, 0xFFFF00B6U, 0x000707FFU, 0x07FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FEFFFFFU, 0x9FFFFDFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0x043FFFFFU, 0xFFFFFFFFU, 0x00003FFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0xFFF00000U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFCFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x0003FFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x003FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0x0200FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0C0399FU, 0x0002FFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x0000FFC0U, 0xFFFDDFEFU, 0xE3FFFDFFU, 0x07603DDFU, 0x0000FFCFU, 0xFFFDDFEFU, 0xF3EFFDFFU, 0x40603DDFU, 0x0006FFCFU, 0xFFFDDFEEU, 0xE7FFFFFFU, 0x80F07DDFU, 0xFC00FFCFU, 0xFC7FFFECU, 0x2FFBFFFFU, 0xFF5F847FU, 0x000CFFC0U, 0xFFFFFFFEU, 0x07FFFFFFU, 0x03FF7FFFU, 0x00000000U, 0xFEF02596U, 0x3BFFECAEU, 0xF3FF3F5FU, 0x00000000U, 0x03000001U, 0xC2A003FFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFDFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x0003FE00U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x001FDFFFU, 0x001FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x308FFFFFU, 0x000003FFU, 0x03FF3800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x07FF03FFU, 0x00000000U, 0x0FFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0x3FFF0080U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0FFFU, 0x000FF800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFF70000U, 0x037FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x80000000U, 0x00100001U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x1FFF0000U, 0x0001FFE2U, 0x3F2FFC84U, 0xF3FFFD50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FF81FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0x000000E0U, 0x1F3EFFFEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFE7FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xBFF0FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x000000FFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF003FU, 0x28FFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0x000FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF8001U, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x03FF3FFFU, 0xFC7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x38000007U, 0x007CFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF37FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x0000FFFFU, 0x0018FFFFU, 0x0000E000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x87FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000001U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x07FFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEFF06FU, 0x870FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000007FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x8000FFC0U, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF0000U, 0x004FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x17FF1C1FU, 0x00000000U, 0xFFFBFFFFU, 0x40FFFFFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xF3EDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF07FFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3F000001U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0011U, 0x00000000U, 0xFFFFFFFFU, 0x00FFFFFFU, 0x000003FFU, 0x00000000U, 0xE3FFFFFFU, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0x03FF0001U, 0xFFFC0000U, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x63FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807E3E0U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007F001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF07FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_id_start.c��������������������������������������������������0000664�0000000�0000000�00000003012�14110572173�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_id_start table. */ #include "pr_id_start.h" bool uc_is_property_id_start (ucs4_t uc) { return bitmap_lookup (&u_property_id_start, uc); } const uc_property_t UC_PROPERTY_ID_START = { &uc_is_property_id_start }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_id_start.h��������������������������������������������������0000664�0000000�0000000�00000077435�14110572173�0021410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[64 << 4]; } u_property_id_start = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, 4 + 384 * sizeof (short) / sizeof (int) + 800, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 816, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 912, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 944, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 976, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 1008, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000000U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9C00C060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFC00U, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFE0003U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x00030003U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001C0000U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x02000003U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x00020003U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x00000000U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x00000003U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x00060003U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC000003U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x00000000U, 0xFFFFFFFEU, 0x000DFFFFU, 0x0000007FU, 0x00000000U, 0xFEF02596U, 0x200DECAEU, 0xF000005FU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F0000U, 0xFFE1C062U, 0x00004003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x000003FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x00000FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFC00C001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFC00E000U, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x0063DE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F2FFC84U, 0xF3FFFD50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000C00U, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x00000000U, 0x28FC0000U, 0xFFFFFC00U, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x00008000U, 0x7C00FFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x000001FFU, 0xFFFFFFF8U, 0x0000007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x1400001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x00000000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x00000001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x0000000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ideographic.c�����������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_ideographic table. */ #include "pr_ideographic.h" bool uc_is_property_ideographic (ucs4_t uc) { return bitmap_lookup (&u_property_ideographic, uc); } const uc_property_t UC_PROPERTY_IDEOGRAPHIC = { &uc_is_property_ideographic }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ideographic.h�����������������������������������������������0000664�0000000�0000000�00000041660�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[13 << 4]; } u_property_ideographic = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 0, -1, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 192, -1, -1 }, { 0x000000C0U, 0x070003FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ids_binary_operator.c���������������������������������������0000664�0000000�0000000�00000003114�14110572173�0023607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_ids_binary_operator table. */ #include "pr_ids_binary_operator.h" bool uc_is_property_ids_binary_operator (ucs4_t uc) { return bitmap_lookup (&u_property_ids_binary_operator, uc); } const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR = { &uc_is_property_ids_binary_operator }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ids_binary_operator.h���������������������������������������0000664�0000000�0000000�00000006313�14110572173�0023620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_ids_binary_operator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FF30000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ids_trinary_operator.c��������������������������������������0000664�0000000�0000000�00000003122�14110572173�0024012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_ids_trinary_operator table. */ #include "pr_ids_trinary_operator.h" bool uc_is_property_ids_trinary_operator (ucs4_t uc) { return bitmap_lookup (&u_property_ids_trinary_operator, uc); } const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR = { &uc_is_property_ids_trinary_operator }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ids_trinary_operator.h��������������������������������������0000664�0000000�0000000�00000006314�14110572173�0024025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_ids_trinary_operator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ignorable_control.c�����������������������������������������0000664�0000000�0000000�00000003100�14110572173�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_ignorable_control table. */ #include "pr_ignorable_control.h" bool uc_is_property_ignorable_control (ucs4_t uc) { return bitmap_lookup (&u_property_ignorable_control, uc); } const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL = { &uc_is_property_ignorable_control }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_ignorable_control.h�����������������������������������������0000664�0000000�0000000�00000021114�14110572173�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[10 << 4]; } u_property_ignorable_control = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x0FFFC1FEU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFDFU, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00007C00U, 0x00000000U, 0x0000FFDFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_iso_control.c�����������������������������������������������0000664�0000000�0000000�00000003231�14110572173�0022103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_iso_control table. */ #include "pr_iso_control.h" bool uc_is_property_iso_control (ucs4_t uc) { return bitmap_lookup (&u_property_iso_control, uc); } #else bool uc_is_property_iso_control (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_Cc); } #endif const uc_property_t UC_PROPERTY_ISO_CONTROL = { &uc_is_property_iso_control }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_iso_control.h�����������������������������������������������0000664�0000000�0000000�00000006303�14110572173�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_iso_control = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_join_control.c����������������������������������������������0000664�0000000�0000000�00000003223�14110572173�0022251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_join_control table. */ #include "pr_join_control.h" bool uc_is_property_join_control (ucs4_t uc) { return bitmap_lookup (&u_property_join_control, uc); } #else bool uc_is_property_join_control (ucs4_t uc) { return (uc >= 0x200C && uc <= 0x200D); } #endif const uc_property_t UC_PROPERTY_JOIN_CONTROL = { &uc_is_property_join_control }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_join_control.h����������������������������������������������0000664�0000000�0000000�00000006304�14110572173�0022261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_join_control = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_left_of_pair.c����������������������������������������������0000664�0000000�0000000�00000003042�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_left_of_pair table. */ #include "pr_left_of_pair.h" bool uc_is_property_left_of_pair (ucs4_t uc) { return bitmap_lookup (&u_property_left_of_pair, uc); } const uc_property_t UC_PROPERTY_LEFT_OF_PAIR = { &uc_is_property_left_of_pair }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_left_of_pair.h����������������������������������������������0000664�0000000�0000000�00000012064�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[8 << 4]; } u_property_left_of_pair = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, 2 + 128 * sizeof (short) / sizeof (int) + 112 }, { 0x00000000U, 0x00000100U, 0x08000000U, 0x08000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x14000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xDD000000U, 0x02000000U, 0x00000020U, 0x20000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x25515500U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAA00000U, 0x2A00000AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x08000000U, 0x08000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_line_separator.c��������������������������������������������0000664�0000000�0000000�00000003357�14110572173�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_line_separator table. */ #include "pr_line_separator.h" bool uc_is_property_line_separator (ucs4_t uc) { return bitmap_lookup (&u_property_line_separator, uc); } #elif 0 bool uc_is_property_line_separator (ucs4_t uc) { return uc_is_category_Zl (uc); } #else bool uc_is_property_line_separator (ucs4_t uc) { return (uc == 0x2028); } #endif const uc_property_t UC_PROPERTY_LINE_SEPARATOR = { &uc_is_property_line_separator }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_line_separator.h��������������������������������������������0000664�0000000�0000000�00000006306�14110572173�0022573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_line_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_logical_order_exception.c�����������������������������������0000664�0000000�0000000�00000003144�14110572173�0024437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_logical_order_exception table. */ #include "pr_logical_order_exception.h" bool uc_is_property_logical_order_exception (ucs4_t uc) { return bitmap_lookup (&u_property_logical_order_exception, uc); } const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION = { &uc_is_property_logical_order_exception }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_logical_order_exception.h�����������������������������������0000664�0000000�0000000�00000007357�14110572173�0024456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[3 << 4]; } u_property_logical_order_exception = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04E00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1A600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_lowercase.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_lowercase table. */ #include "pr_lowercase.h" bool uc_is_property_lowercase (ucs4_t uc) { return bitmap_lookup (&u_property_lowercase, uc); } const uc_property_t UC_PROPERTY_LOWERCASE = { &uc_is_property_lowercase }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_lowercase.h�������������������������������������������������0000664�0000000�0000000�00000022633�14110572173�0021551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[19 << 4]; } u_property_lowercase = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x55AAAAAAU, 0xAAAAAB55U, 0xD4AAAAAAU, 0x4E243129U, 0xE6512D2AU, 0xB5555240U, 0xAA29AAAAU, 0xAAAAAAAAU, 0x93FAAAAAU, 0xFFFFAA85U, 0xFFFFFFFFU, 0xFFEFFFFFU, 0x01FFFFFFU, 0x00000003U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000020U, 0x3C8A0000U, 0x00010000U, 0xFFFFF000U, 0xAAE37FFFU, 0x192FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xBFEAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00FF003FU, 0x3FFF00FFU, 0x00FF00FFU, 0x40DF00FFU, 0x00CF00DCU, 0x00DC00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0008C400U, 0x32108000U, 0x000043C0U, 0xFFFF0000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFFFFFFU, 0x3FDA1562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008501AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x3AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAABAAA8U, 0xAAAAAAAAU, 0x95FFAAAAU, 0xAABA50AAU, 0x00A002AAU, 0x00000000U, 0x07000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F8007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x000FFFFFU, 0xFFDFC000U, 0x000000FFU, 0x0FFFFFFCU, 0xEBC00000U, 0x0000FFEFU, 0xFFFFFC00U, 0xC000000FU, 0x00FFFFFFU, 0xFFFC0000U, 0x00000FFFU, 0xFFFFFFC0U, 0xFC000000U, 0x000FFFFFU, 0xFFFFC000U, 0x000000FFU, 0x0FFFFFFCU, 0xFFC00000U, 0x0000FFFFU, 0xFFFFFC00U, 0x0000003FU, 0xF7FFFFFCU, 0xF0000003U, 0x0FDFFFFFU, 0xFFC00000U, 0x003F7FFFU, 0xFFFF0000U, 0x0000FDFFU, 0xFFFFFC00U, 0x00000BF7U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_math.c������������������������������������������������������0000664�0000000�0000000�00000002762�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_math table. */ #include "pr_math.h" bool uc_is_property_math (ucs4_t uc) { return bitmap_lookup (&u_property_math, uc); } const uc_property_t UC_PROPERTY_MATH = { &uc_is_property_math }; ��������������gnulib-20210822~d383792/lib/unictype/pr_math.h������������������������������������������������������0000664�0000000�0000000�00000020106�14110572173�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[14 << 4]; } u_property_math = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x70000800U, 0x40000000U, 0x50000000U, 0x00000000U, 0x00021000U, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00270000U, 0x00730000U, 0x000001C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00400000U, 0x001C0000U, 0x00040011U, 0x7C00001EU, 0x00007C00U, 0x00000000U, 0x1FFF0000U, 0x0000F862U, 0x3F2FFC84U, 0xF1FBB310U, 0x00000BFFU, 0x00000000U, 0xFFFF0000U, 0xF0C37EFFU, 0x2FFFFFFFU, 0xFFF00030U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000F00U, 0x00000003U, 0x00000000U, 0x10000000U, 0xF8000000U, 0x00BFFFFFU, 0xF0010000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0FFC003U, 0x000F8CC3U, 0xFF001F94U, 0x00000060U, 0x00000000U, 0x00000005U, 0x0000E00FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x00001F9FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000017EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000800U, 0x50000000U, 0x50000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001E04U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_non_break.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_non_break table. */ #include "pr_non_break.h" bool uc_is_property_non_break (ucs4_t uc) { return bitmap_lookup (&u_property_non_break, uc); } const uc_property_t UC_PROPERTY_NON_BREAK = { &uc_is_property_non_break }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_non_break.h�������������������������������������������������0000664�0000000�0000000�00000010401�14110572173�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[5 << 4]; } u_property_non_break = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0008000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00041100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020080U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_not_a_character.c�������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0022671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_not_a_character table. */ #include "pr_not_a_character.h" bool uc_is_property_not_a_character (ucs4_t uc) { return bitmap_lookup (&u_property_not_a_character, uc); } const uc_property_t UC_PROPERTY_NOT_A_CHARACTER = { &uc_is_property_not_a_character }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_not_a_character.h�������������������������������������������0000664�0000000�0000000�00000013277�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[2 << 7]; unsigned int level3[2 << 4]; } u_property_not_a_character = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 16 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_numeric.c���������������������������������������������������0000664�0000000�0000000�00000003004�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_numeric table. */ #include "pr_numeric.h" bool uc_is_property_numeric (ucs4_t uc) { return bitmap_lookup (&u_property_numeric, uc); } const uc_property_t UC_PROPERTY_NUMERIC = { &uc_is_property_numeric }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_numeric.h���������������������������������������������������0000664�0000000�0000000�00000042314�14110572173�0021225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[43 << 4]; } u_property_numeric = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, -1, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, -1, 4 + 384 * sizeof (short) / sizeof (int) + 192, -1, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 240, -1, 4 + 384 * sizeof (short) / sizeof (int) + 256, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, -1, 4 + 384 * sizeof (short) / sizeof (int) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, -1, 4 + 384 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 608, -1, 4 + 384 * sizeof (short) / sizeof (int) + 624, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 656, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x720C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F0FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FCFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F00FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x7F000000U, 0x01FFFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF03FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03F10000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x000003EFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x070003FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0xFFFEFF00U, 0x00000000U, 0x000003FFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01080800U, 0x00000000U, 0x00040000U, 0x000A0000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0x000FFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFEU, 0x00000000U, 0x0000000FU, 0x00000402U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003E0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFE000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0xF8000000U, 0x0FC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x000000FFU, 0x60000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0x00000000U, 0xFF000000U, 0xFF000000U, 0x00000000U, 0x0000FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x001FFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFBFF0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFC000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_alphabetic.c������������������������������������������0000664�0000000�0000000�00000003072�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_alphabetic table. */ #include "pr_other_alphabetic.h" bool uc_is_property_other_alphabetic (ucs4_t uc) { return bitmap_lookup (&u_property_other_alphabetic, uc); } const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC = { &uc_is_property_other_alphabetic }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_alphabetic.h������������������������������������������0000664�0000000�0000000�00000031562�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[32 << 4]; } u_property_other_alphabetic = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, -1, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xBFFF0000U, 0x000000B6U, 0x00000000U, 0x07FF0000U, 0x00000000U, 0xFEFFF800U, 0x00010000U, 0x00000000U, 0x00000000U, 0x1FC00000U, 0x0000219EU, 0x00020000U, 0xFFFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0x00000000U, 0xF8C00000U, 0x00001EEFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0xFFFF03F8U, 0x0000000FU, 0xCC000000U, 0x00E0DFFFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x0080199FU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00021987U, 0x00230000U, 0x0000000EU, 0xC0000000U, 0x00001BBFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00C0199FU, 0x0000000CU, 0x00000004U, 0xC0000000U, 0x00801DC7U, 0x00000000U, 0x0000000FU, 0xC0000000U, 0x00601DDFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00601DDFU, 0x0000000CU, 0x0000000EU, 0xC0000000U, 0x00801DDFU, 0x0000000CU, 0x0000000CU, 0x00000000U, 0xFF5F8000U, 0x000C0000U, 0x00000000U, 0x07F20000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x1BF20000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xFEFFE003U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x797FF800U, 0xC3C00000U, 0x001E0185U, 0x3000007CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0000U, 0x000C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0xFFC00000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0F800000U, 0x00000000U, 0x7FE00000U, 0x001FFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0xFFE00000U, 0x0000000FU, 0x00000000U, 0x00000007U, 0x000033FEU, 0x00000000U, 0x0003FF80U, 0x00000000U, 0x003FFFF0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001FFF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FF00000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000F8U, 0x00000000U, 0x00000000U, 0x00000003U, 0xFFF00000U, 0x0000002FU, 0x00000000U, 0x00000000U, 0x000007C0U, 0x0007FF80U, 0x00000000U, 0x0000000FU, 0xFFF00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007FFE00U, 0x00003008U, 0x00000000U, 0x00000000U, 0x419D0000U, 0x00000000U, 0x0020F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007F8U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F06EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0xFF000000U, 0x0000003FU, 0x00000000U, 0x00000004U, 0x01FF0000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x0007FF80U, 0x00000000U, 0x00000000U, 0x00000007U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x409FF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x000001FFU, 0x0000000FU, 0xC0000000U, 0x0080199FU, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x0000003BU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F3F8000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x7FFF0000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x003FF800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7F8000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_default_ignorable_code_point.c������������������������0000664�0000000�0000000�00000003246�14110572173�0026631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_default_ignorable_code_point table. */ #include "pr_other_default_ignorable_code_point.h" bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) { return bitmap_lookup (&u_property_other_default_ignorable_code_point, uc); } const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT = { &uc_is_property_other_default_ignorable_code_point }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_default_ignorable_code_point.h������������������������0000664�0000000�0000000�00000015664�14110572173�0026645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[2 << 7]; unsigned int level3[8 << 4]; } u_property_other_default_ignorable_code_point = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 128 }, { -1, 16 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 80, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, 16 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x01FF0000U, 0xFFFFFFFDU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU } }; ����������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_grapheme_extend.c�������������������������������������0000664�0000000�0000000�00000003130�14110572173�0024107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_grapheme_extend table. */ #include "pr_other_grapheme_extend.h" bool uc_is_property_other_grapheme_extend (ucs4_t uc) { return bitmap_lookup (&u_property_other_grapheme_extend, uc); } const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND = { &uc_is_property_other_grapheme_extend }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_grapheme_extend.h�������������������������������������0000664�0000000�0000000�00000021120�14110572173�0024113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[10 << 4]; } u_property_other_grapheme_extend = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 0, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 96, 16 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00600004U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80008000U, 0x00000000U, 0x00001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007C020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_id_continue.c�����������������������������������������0000664�0000000�0000000�00000003100�14110572173�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_id_continue table. */ #include "pr_other_id_continue.h" bool uc_is_property_other_id_continue (ucs4_t uc) { return bitmap_lookup (&u_property_other_id_continue, uc); } const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE = { &uc_is_property_other_id_continue }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_id_continue.h�����������������������������������������0000664�0000000�0000000�00000007771�14110572173�0023274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_property_other_id_continue = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000000U, 0x00000000U } }; �������gnulib-20210822~d383792/lib/unictype/pr_other_id_start.c��������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_id_start table. */ #include "pr_other_id_start.h" bool uc_is_property_other_id_start (ucs4_t uc) { return bitmap_lookup (&u_property_other_id_start, uc); } const uc_property_t UC_PROPERTY_OTHER_ID_START = { &uc_is_property_other_id_start }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_id_start.h��������������������������������������������0000664�0000000�0000000�00000007346�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[3 << 4]; } u_property_other_id_start = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_lowercase.c�������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_lowercase table. */ #include "pr_other_lowercase.h" bool uc_is_property_other_lowercase (ucs4_t uc) { return bitmap_lookup (&u_property_other_lowercase, uc); } const uc_property_t UC_PROPERTY_OTHER_LOWERCASE = { &uc_is_property_other_lowercase }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_lowercase.h�������������������������������������������0000664�0000000�0000000�00000012067�14110572173�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[8 << 4]; } u_property_other_lowercase = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FF0000U, 0x00000003U, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000020U, 0x04000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0xFFFFFFFFU, 0x010007FFU, 0xF8000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_math.c������������������������������������������������0000664�0000000�0000000�00000003026�14110572173�0021705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_math table. */ #include "pr_other_math.h" bool uc_is_property_other_math (ucs4_t uc) { return bitmap_lookup (&u_property_other_math, uc); } const uc_property_t UC_PROPERTY_OTHER_MATH = { &uc_is_property_other_math }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_math.h������������������������������������������������0000664�0000000�0000000�00000016434�14110572173�0021721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[11 << 4]; } u_property_other_math = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00270000U, 0x00330000U, 0x00400000U, 0x001C0000U, 0x00000001U, 0x6000001EU, 0x00006000U, 0x00000000U, 0x1FFF0000U, 0x0000F862U, 0x3E2FFC84U, 0xF1FBB310U, 0x000003E0U, 0x00000000U, 0xF3E00000U, 0xF0C33EB6U, 0x2FEB3FFFU, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00B00000U, 0x00010000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF07FC003U, 0x000F8CC1U, 0x00001F94U, 0x00000060U, 0x00000000U, 0x00000005U, 0x0000600FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFF8U, 0x00000000U, 0x0F000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000010AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x50000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_uppercase.c�������������������������������������������0000664�0000000�0000000�00000003064�14110572173�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_other_uppercase table. */ #include "pr_other_uppercase.h" bool uc_is_property_other_uppercase (ucs4_t uc) { return bitmap_lookup (&u_property_other_uppercase, uc); } const uc_property_t UC_PROPERTY_OTHER_UPPERCASE = { &uc_is_property_other_uppercase }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_other_uppercase.h�������������������������������������������0000664�0000000�0000000�00000012240�14110572173�0022746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[3 << 4]; } u_property_other_uppercase = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_paired_punctuation.c����������������������������������������0000664�0000000�0000000�00000003106�14110572173�0023447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_paired_punctuation table. */ #include "pr_paired_punctuation.h" bool uc_is_property_paired_punctuation (ucs4_t uc) { return bitmap_lookup (&u_property_paired_punctuation, uc); } const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION = { &uc_is_property_paired_punctuation }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_paired_punctuation.h����������������������������������������0000664�0000000�0000000�00000012072�14110572173�0023456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[8 << 4]; } u_property_paired_punctuation = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, 2 + 128 * sizeof (short) / sizeof (int) + 112 }, { 0x00000000U, 0x00000300U, 0x28000000U, 0x28000000U, 0x00000000U, 0x08000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3C000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x06000000U, 0x00000060U, 0x60000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xEFF3FF00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x7E00001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x28000000U, 0x28000000U, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_paragraph_separator.c���������������������������������������0000664�0000000�0000000�00000003427�14110572173�0023605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_paragraph_separator table. */ #include "pr_paragraph_separator.h" bool uc_is_property_paragraph_separator (ucs4_t uc) { return bitmap_lookup (&u_property_paragraph_separator, uc); } #elif 0 bool uc_is_property_paragraph_separator (ucs4_t uc) { return uc_is_category_Zp (uc); } #else bool uc_is_property_paragraph_separator (ucs4_t uc) { return (uc == 0x2029); } #endif const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR = { &uc_is_property_paragraph_separator }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_paragraph_separator.h���������������������������������������0000664�0000000�0000000�00000006313�14110572173�0023607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_paragraph_separator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_pattern_syntax.c��������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0022641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_pattern_syntax table. */ #include "pr_pattern_syntax.h" bool uc_is_property_pattern_syntax (ucs4_t uc) { return bitmap_lookup (&u_property_pattern_syntax, uc); } const uc_property_t UC_PROPERTY_PATTERN_SYNTAX = { &uc_is_property_pattern_syntax }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_pattern_syntax.h��������������������������������������������0000664�0000000�0000000�00000012646�14110572173�0022653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[9 << 4]; } u_property_pattern_syntax = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, 2 + 128 * sizeof (short) / sizeof (int) + 80, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 112, 2 + 128 * sizeof (short) / sizeof (int) + 128 }, { 0x00000000U, 0xFC00FFFEU, 0x78000001U, 0x78000001U, 0x00000000U, 0x88435AFEU, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x7FFF00FFU, 0x7FEFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFF00000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF0EU, 0x00010001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_pattern_white_space.c���������������������������������������0000664�0000000�0000000�00000003114�14110572173�0023601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_pattern_white_space table. */ #include "pr_pattern_white_space.h" bool uc_is_property_pattern_white_space (ucs4_t uc) { return bitmap_lookup (&u_property_pattern_white_space, uc); } const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE = { &uc_is_property_pattern_white_space }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_pattern_white_space.h���������������������������������������0000664�0000000�0000000�00000006733�14110572173�0023620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_property_pattern_white_space = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003E00U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������gnulib-20210822~d383792/lib/unictype/pr_private_use.c�����������������������������������������������0000664�0000000�0000000�00000003350�14110572173�0022101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_private_use table. */ #include "pr_private_use.h" bool uc_is_property_private_use (ucs4_t uc) { return bitmap_lookup (&u_property_private_use, uc); } #else bool uc_is_property_private_use (ucs4_t uc) { return (uc >= 0xE000 && uc <= 0xF8FF) || (uc >= 0xF0000 && uc <= 0xFFFFD) || (uc >= 0x100000 && uc <= 0x10FFFD); } #endif const uc_property_t UC_PROPERTY_PRIVATE_USE = { &uc_is_property_private_use }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_private_use.h�����������������������������������������������0000664�0000000�0000000�00000027513�14110572173�0022115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[2 << 7]; unsigned int level3[3 << 4]; } u_property_private_use = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 0, 18 + 256 * sizeof (short) / sizeof (int) + 32 }, { 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_punctuation.c�����������������������������������������������0000664�0000000�0000000�00000003230�14110572173�0022121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_punctuation table. */ #include "pr_punctuation.h" bool uc_is_property_punctuation (ucs4_t uc) { return bitmap_lookup (&u_property_punctuation, uc); } #else bool uc_is_property_punctuation (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_P); } #endif const uc_property_t UC_PROPERTY_PUNCTUATION = { &uc_is_property_punctuation }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_punctuation.h�����������������������������������������������0000664�0000000�0000000�00000037435�14110572173�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[43 << 4]; } u_property_punctuation = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 352, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, 3 + 256 * sizeof (short) / sizeof (int) + 464, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, 3 + 256 * sizeof (short) / sizeof (int) + 512, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 528, 3 + 256 * sizeof (short) / sizeof (int) + 544, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 576, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 656, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x8C00F7EEU, 0xB8000001U, 0x28000000U, 0x00000000U, 0x88C00882U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000600U, 0x40000000U, 0x00000049U, 0x00180000U, 0xC8003600U, 0x00000000U, 0x00000000U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03800000U, 0x00000000U, 0x7FFF0000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00000000U, 0x0C008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0017FFF0U, 0x3C000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x061F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FC00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07700000U, 0x00000000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x000800FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF00FFU, 0x7FFBFFEFU, 0x60000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003FFF00U, 0x00000000U, 0x00000000U, 0x00000060U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFF8U, 0x00000000U, 0x0F000000U, 0x30000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xDE000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x0000001FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF3FF0EU, 0x20010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x40080000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FC0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F00000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x17000000U, 0x00000000U, 0x0000C000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0003FFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0xFFFF0000U, 0xFFF7FFFFU, 0x00000D0BU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x8C00F7EEU, 0xB8000001U, 0xA8000000U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FF0000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00000000U, 0xFE000000U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F80U, 0x00000000U, 0x00000000U, 0xD8000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00300000U, 0x00000000U, 0x00000000U, 0xE80023E0U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x2800F800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000040U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00001FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000003EU, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x0F800000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_quotation_mark.c��������������������������������������������0000664�0000000�0000000�00000003056�14110572173�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_quotation_mark table. */ #include "pr_quotation_mark.h" bool uc_is_property_quotation_mark (ucs4_t uc) { return bitmap_lookup (&u_property_quotation_mark, uc); } const uc_property_t UC_PROPERTY_QUOTATION_MARK = { &uc_is_property_quotation_mark }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_quotation_mark.h��������������������������������������������0000664�0000000�0000000�00000010406�14110572173�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[5 << 4]; } u_property_quotation_mark = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64 }, { 0x00000000U, 0x00000084U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x06000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000084U, 0x00000000U, 0x00000000U, 0x0000000CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_radical.c���������������������������������������������������0000664�0000000�0000000�00000003004�14110572173�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_radical table. */ #include "pr_radical.h" bool uc_is_property_radical (ucs4_t uc) { return bitmap_lookup (&u_property_radical, uc); } const uc_property_t UC_PROPERTY_RADICAL = { &uc_is_property_radical }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_radical.h���������������������������������������������������0000664�0000000�0000000�00000006277�14110572173�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_property_radical = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_sentence_terminal.c�����������������������������������������0000664�0000000�0000000�00000003100�14110572173�0023243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_sentence_terminal table. */ #include "pr_sentence_terminal.h" bool uc_is_property_sentence_terminal (ucs4_t uc) { return bitmap_lookup (&u_property_sentence_terminal, uc); } const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL = { &uc_is_property_sentence_terminal }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_sentence_terminal.h�����������������������������������������0000664�0000000�0000000�00000027043�14110572173�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[27 << 4]; } u_property_sentence_terminal = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, -1, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, 3 + 256 * sizeof (short) / sizeof (int) + 320, 3 + 256 * sizeof (short) / sizeof (int) + 336, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x80004002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000184U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000208U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xCC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000380U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00880000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00C40000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80004002U, 0x00000000U, 0x00000000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000180U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0002060U, 0x00000000U, 0x00000000U, 0x1B000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00001800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FFFE0CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000006U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000006U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x01800000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_soft_dotted.c�����������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0022070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_soft_dotted table. */ #include "pr_soft_dotted.h" bool uc_is_property_soft_dotted (ucs4_t uc) { return bitmap_lookup (&u_property_soft_dotted, uc); } const uc_property_t UC_PROPERTY_SOFT_DOTTED = { &uc_is_property_soft_dotted }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_soft_dotted.h�����������������������������������������������0000664�0000000�0000000�00000015374�14110572173�0022107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[9 << 4]; } u_property_soft_dotted = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000100U, 0x20000000U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0x00000000U, 0x00000000U, 0x01400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00400000U, 0x00000110U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000CU, 0x00C00000U, 0x00000000U, 0x00000C00U, 0xC0000000U, 0x00000000U, 0x000C0000U, 0x00000000U, 0x000000C0U, 0x0C000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x0000000CU, 0x00C00000U, 0x00000000U, 0x00000C00U, 0xC0000000U, 0x00000000U, 0x000C0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_space.c�����������������������������������������������������0000664�0000000�0000000�00000003157�14110572173�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_space table. */ #include "pr_space.h" bool uc_is_property_space (ucs4_t uc) { return bitmap_lookup (&u_property_space, uc); } #else bool uc_is_property_space (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_Zs); } #endif const uc_property_t UC_PROPERTY_SPACE = { &uc_is_property_space }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_space.h�����������������������������������������������������0000664�0000000�0000000�00000007755�14110572173�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_property_space = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00008000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������gnulib-20210822~d383792/lib/unictype/pr_terminal_punctuation.c��������������������������������������0000664�0000000�0000000�00000003122�14110572173�0024014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_terminal_punctuation table. */ #include "pr_terminal_punctuation.h" bool uc_is_property_terminal_punctuation (ucs4_t uc) { return bitmap_lookup (&u_property_terminal_punctuation, uc); } const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION = { &uc_is_property_terminal_punctuation }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_terminal_punctuation.h��������������������������������������0000664�0000000�0000000�00000031566�14110572173�0024036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[32 << 4]; } u_property_terminal_punctuation = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, 3 + 256 * sizeof (short) / sizeof (int) + 144, 3 + 256 * sizeof (short) / sizeof (int) + 160, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, 3 + 256 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 304, -1, 3 + 256 * sizeof (short) / sizeof (int) + 320, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 336, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 368, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, 3 + 256 * sizeof (short) / sizeof (int) + 416, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 480, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x8C005002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000008U, 0x00000000U, 0x88001000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00100000U, 0x00000000U, 0x000017FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x00000000U, 0x7FFF0000U, 0x40000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007E100U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x00000000U, 0x00600000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x04700000U, 0x00000000U, 0x0000033CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000030U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xEC000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0x00000380U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x10004000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000006U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000380U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, 0x00F70000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x8C005002U, 0x00000000U, 0x00000000U, 0x00000012U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003F80U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0002060U, 0x00000000U, 0x00000000U, 0x1F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00FFFE3CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000006U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x70000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000EU, 0x00020000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x03800000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000780U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_test.c������������������������������������������������������0000664�0000000�0000000�00000002542�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" bool uc_is_property (ucs4_t uc, uc_property_t property) { return property.test_fn (uc); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_titlecase.c�������������������������������������������������0000664�0000000�0000000�00000003213�14110572173�0021526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #if 0 #include "bitmap.h" /* Define u_property_titlecase table. */ #include "pr_titlecase.h" bool uc_is_property_titlecase (ucs4_t uc) { return bitmap_lookup (&u_property_titlecase, uc); } #else bool uc_is_property_titlecase (ucs4_t uc) { return uc_is_general_category (uc, UC_CATEGORY_Lt); } #endif const uc_property_t UC_PROPERTY_TITLECASE = { &uc_is_property_titlecase }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_titlecase.h�������������������������������������������������0000664�0000000�0000000�00000006721�14110572173�0021542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_property_titlecase = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000920U, 0x00040000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF00FF00U, 0x1000FF00U, 0x00001000U, 0x10000000U } }; �����������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_unassigned_code_value.c�������������������������������������0000664�0000000�0000000�00000003130�14110572173�0024075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_unassigned_code_value table. */ #include "pr_unassigned_code_value.h" bool uc_is_property_unassigned_code_value (ucs4_t uc) { return bitmap_lookup (&u_property_unassigned_code_value, uc); } const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE = { &uc_is_property_unassigned_code_value }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_unassigned_code_value.h�������������������������������������0000664�0000000�0000000�00000133560�14110572173�0024115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[5 << 7]; unsigned int level3[77 << 4]; } u_property_unassigned_code_value = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, 16 * sizeof (int) / sizeof (short) + 256, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 384, 16 * sizeof (int) / sizeof (short) + 512 }, { -1, 16 + 640 * sizeof (short) / sizeof (int) + 0, 16 + 640 * sizeof (short) / sizeof (int) + 16, 16 + 640 * sizeof (short) / sizeof (int) + 32, 16 + 640 * sizeof (short) / sizeof (int) + 48, 16 + 640 * sizeof (short) / sizeof (int) + 64, 16 + 640 * sizeof (short) / sizeof (int) + 80, 16 + 640 * sizeof (short) / sizeof (int) + 96, 16 + 640 * sizeof (short) / sizeof (int) + 112, 16 + 640 * sizeof (short) / sizeof (int) + 128, -1, 16 + 640 * sizeof (short) / sizeof (int) + 144, 16 + 640 * sizeof (short) / sizeof (int) + 160, 16 + 640 * sizeof (short) / sizeof (int) + 176, 16 + 640 * sizeof (short) / sizeof (int) + 192, 16 + 640 * sizeof (short) / sizeof (int) + 208, 16 + 640 * sizeof (short) / sizeof (int) + 224, 16 + 640 * sizeof (short) / sizeof (int) + 240, 16 + 640 * sizeof (short) / sizeof (int) + 256, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 272, 16 + 640 * sizeof (short) / sizeof (int) + 288, 16 + 640 * sizeof (short) / sizeof (int) + 304, 16 + 640 * sizeof (short) / sizeof (int) + 320, 16 + 640 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 368, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 384, 16 + 640 * sizeof (short) / sizeof (int) + 400, 16 + 640 * sizeof (short) / sizeof (int) + 416, 16 + 640 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 464, 16 + 640 * sizeof (short) / sizeof (int) + 480, 16 + 640 * sizeof (short) / sizeof (int) + 496, 16 + 640 * sizeof (short) / sizeof (int) + 512, 16 + 640 * sizeof (short) / sizeof (int) + 528, 16 + 640 * sizeof (short) / sizeof (int) + 544, 16 + 640 * sizeof (short) / sizeof (int) + 560, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 592, 16 + 640 * sizeof (short) / sizeof (int) + 608, 16 + 640 * sizeof (short) / sizeof (int) + 624, 16 + 640 * sizeof (short) / sizeof (int) + 640, 16 + 640 * sizeof (short) / sizeof (int) + 656, 16 + 640 * sizeof (short) / sizeof (int) + 672, 16 + 640 * sizeof (short) / sizeof (int) + 688, 16 + 640 * sizeof (short) / sizeof (int) + 704, 16 + 640 * sizeof (short) / sizeof (int) + 720, 16 + 640 * sizeof (short) / sizeof (int) + 736, 16 + 640 * sizeof (short) / sizeof (int) + 752, -1, 16 + 640 * sizeof (short) / sizeof (int) + 768, 16 + 640 * sizeof (short) / sizeof (int) + 784, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 800, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, -1, 16 + 640 * sizeof (short) / sizeof (int) + 816, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, -1, 16 + 640 * sizeof (short) / sizeof (int) + 832, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 864, -1, 16 + 640 * sizeof (short) / sizeof (int) + 880, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 896, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 912, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 928, 16 + 640 * sizeof (short) / sizeof (int) + 944, 16 + 640 * sizeof (short) / sizeof (int) + 960, 16 + 640 * sizeof (short) / sizeof (int) + 976, -1, 16 + 640 * sizeof (short) / sizeof (int) + 992, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1008, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1024, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1040, 16 + 640 * sizeof (short) / sizeof (int) + 1056, 16 + 640 * sizeof (short) / sizeof (int) + 1072, -1, 16 + 640 * sizeof (short) / sizeof (int) + 1088, 16 + 640 * sizeof (short) / sizeof (int) + 1104, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 1136, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 1152, 16 + 640 * sizeof (short) / sizeof (int) + 1168, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 1184, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, -1, 16 + 640 * sizeof (short) / sizeof (int) + 1200, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1120, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1120, 16 + 640 * sizeof (short) / sizeof (int) + 1216, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 1120 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03000000U, 0x0000280FU, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x01800000U, 0x00000001U, 0x00011900U, 0x00000000U, 0x0000FF00U, 0xFFE0F800U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00001800U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000000U, 0xF8000000U, 0x00000000U, 0x8000C000U, 0xB0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0200000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00066010U, 0x0C3A0200U, 0x4F7F8660U, 0xF0000030U, 0x00067811U, 0x2C920200U, 0xA1FDC678U, 0xFFC0003FU, 0x00044011U, 0x0C120200U, 0xFFFEC440U, 0xFDFC0030U, 0x00066011U, 0x0C120200U, 0x4F3FC660U, 0xFF000030U, 0x29C23813U, 0x3C0038E7U, 0xFF7EC238U, 0xF800003FU, 0x00022010U, 0x1C000200U, 0xF89FC220U, 0x00FF0030U, 0x00022010U, 0x0C100200U, 0xBF9FC220U, 0xFFF90030U, 0x00022011U, 0x18000000U, 0x000F0220U, 0x00000030U, 0x03800013U, 0xD0040000U, 0x00A07B80U, 0xFFE3003FU, 0x00000001U, 0x78000000U, 0xF0000000U, 0xFFFFFFFFU, 0x010FDA69U, 0xC4001351U, 0x0C00C0A0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000100U, 0x0001E000U, 0x01000000U, 0x20000000U, 0xF8002000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC280C200U, 0x00000000U, 0x0000C200U, 0x80C20000U, 0x008000C2U, 0x00000000U, 0x00C20000U, 0x00000000U, 0x18000000U, 0xE0000000U, 0xFC000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0xFE000000U, 0xFFE02000U, 0xFF800000U, 0xFFF00000U, 0xFFF22000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0xFC00FC00U, 0xFC008000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x0000F800U, 0x00000000U, 0xFFC00000U, 0x80000000U, 0xF000F000U, 0x0000000EU, 0xFFE0C000U, 0x00000000U, 0x0000F000U, 0x3800FC00U, 0x00000000U, 0x30000000U, 0x00000000U, 0x80000000U, 0x60000000U, 0xFC00FC00U, 0x8000C000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000F000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FF00000U, 0x00000000U, 0x07000000U, 0x00001C00U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x0000FF00U, 0xFC800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07C00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0C00000U, 0x00000000U, 0x5500C0C0U, 0xC0000000U, 0x00000000U, 0x00200000U, 0x10300020U, 0x80230000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000C0020U, 0xE0008000U, 0x80000000U, 0x0000FFFFU, 0xFFFE0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFF800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00300000U, 0x00C00000U, 0x1C000000U, 0xFFFC0200U, 0xFFFF0FFFU, 0x00000000U, 0x00008000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01F00000U, 0x00000000U, 0x0000DF40U, 0x00000000U, 0x7FFE7F00U, 0xFF800000U, 0x80808080U, 0x80808080U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0xFFFFFFFFU, 0x04000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xF000FFFFU, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x01800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001FU, 0x0001C000U, 0x00000000U, 0x00000000U, 0x00008000U, 0xF8000000U, 0x00000000U, 0x0000FFF0U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF008000U, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFC00F000U, 0x00000000U, 0xFF000000U, 0x00000000U, 0x00000000U, 0xFC003FC0U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x7FF00000U, 0xE0000000U, 0x00000000U, 0x00000000U, 0x3C004000U, 0x80000000U, 0x00000000U, 0xFF800000U, 0x0C00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFF8U, 0xFF800000U, 0xFF818181U, 0x00008080U, 0x00000000U, 0x0000FFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC00C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFF0U, 0x00000780U, 0xF0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0x1F07FF80U, 0xA0800000U, 0x00000024U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00030000U, 0x00000000U, 0x0000FF00U, 0xC0000000U, 0xFC000000U, 0x00000000U, 0x00080000U, 0x0020F080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0xE3030303U, 0x01FF8080U, 0x00001000U, 0x48000080U, 0xC000C000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xF8000000U, 0x00000078U, 0x00700000U, 0x00000000U, 0x00000000U, 0xF0008000U, 0xFFFFFFFEU, 0x0000FFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0000000U, 0x00000000U, 0xFFFE0000U, 0xF0000000U, 0x00000000U, 0x0000FFF0U, 0x0000F800U, 0xF8000000U, 0x40000000U, 0x00000000U, 0xFFC000F0U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x0000FC00U, 0x00F00000U, 0xF0000000U, 0x00000000U, 0x0000FF00U, 0x00000000U, 0xFFFF7FF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFC00000U, 0xFFFFFF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000002C0U, 0x6E400000U, 0x00400000U, 0x00000000U, 0x80000000U, 0xFFFF007FU, 0xFFFFFFFFU, 0x07C80000U, 0x70000000U, 0x7C000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0F000000U, 0x00030000U, 0x00000000U, 0x01100F90U, 0x78F00000U, 0xFE00FF00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0xFF800780U, 0x00000000U, 0x01C00000U, 0x00C00000U, 0x00F80000U, 0xE1FC0000U, 0xFFFF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0xFFFFFFFFU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x03F80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0003C000U, 0x7FFF0000U, 0x00000000U, 0x00000000U, 0x0000FFFCU, 0xFC00FE00U, 0x00000000U, 0x00200000U, 0x0000FFF0U, 0xFF800000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0xFFE00001U, 0x00040000U, 0x80000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x40004280U, 0x0000FC00U, 0x00000000U, 0xFC00F800U, 0x00066010U, 0x0C120200U, 0x1F7EC660U, 0xFFE0E030U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xD4000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FF00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00C00000U, 0xC0000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFC00FFE0U, 0xFFFFE000U, 0x00000000U, 0xFF000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0x1C000000U, 0x0000F000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x7FF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000200U, 0x00800000U, 0x0000FFC0U, 0x0000E000U, 0x00030000U, 0xFF800100U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE08000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF8000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFF80U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFE000000U, 0x80000000U, 0xFFFF3C00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFC0C000U, 0x00000000U, 0x00000000U, 0x0400FFC0U, 0x1F000004U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x0000FFE0U, 0x80000000U, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFE000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xE000F800U, 0x0C00FE00U, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x00000000U, 0x00000180U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFE00U, 0x00000000U, 0x00000000U, 0xFFFFFFC0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00200000U, 0x00000000U, 0x20000000U, 0x1400219BU, 0x00000010U, 0x00000000U, 0x20201840U, 0x84000000U, 0x000203A0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000C0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFF000U, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x06000080U, 0xFFFFF824U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800060U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x3C00F800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000010U, 0xF5080169U, 0x5569157BU, 0xA1080869U, 0xF0000400U, 0xF0000411U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00018000U, 0x00010001U, 0xFFC00000U, 0x0000E000U, 0x00008000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0xFFFFE000U, 0xFFFFFFFFU, 0x0000003FU, 0x0000FFF8U, 0xF0000000U, 0xFFFCFE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF80000U, 0xFF80E000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFF00000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0xFFFFFFFFU, 0x0000F000U, 0x00000000U, 0xFC00FF00U, 0x00000000U, 0x0000FF00U, 0xFFFFC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8000FFFFU, 0x8006FF00U, 0x8000F000U, 0xFFFFFFFFU, 0xFFFC0000U, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFDU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_unified_ideograph.c�����������������������������������������0000664�0000000�0000000�00000003100�14110572173�0023211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_unified_ideograph table. */ #include "pr_unified_ideograph.h" bool uc_is_property_unified_ideograph (ucs4_t uc) { return bitmap_lookup (&u_property_unified_ideograph, uc); } const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH = { &uc_is_property_unified_ideograph }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_unified_ideograph.h�����������������������������������������0000664�0000000�0000000�00000033115�14110572173�0023227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[2 << 7]; unsigned int level3[8 << 4]; } u_property_unified_ideograph = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, -1, 4 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 256 * sizeof (short) / sizeof (int) + 48, -1, -1, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 64, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 80, 4 + 256 * sizeof (short) / sizeof (int) + 96, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 0, 4 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x801AC000U, 0x0000039AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_uppercase.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_uppercase table. */ #include "pr_uppercase.h" bool uc_is_property_uppercase (ucs4_t uc) { return bitmap_lookup (&u_property_uppercase, uc); } const uc_property_t UC_PROPERTY_UPPERCASE = { &uc_is_property_uppercase }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_uppercase.h�������������������������������������������������0000664�0000000�0000000�00000022213�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_property_uppercase = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555554AAU, 0x2B555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAA490U, 0x55D25555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x551C8000U, 0xE6905555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x40155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0x00000000U, 0x0F000000U, 0x0F000F00U, 0x0F001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E273884U, 0xC00F3D50U, 0x00000020U, 0x0000FFFFU, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x005F7D55U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0xFFF00000U, 0x00003FFFU, 0xFFFFFF00U, 0xD0000003U, 0x003FDE64U, 0xFFFF0000U, 0x000003FFU, 0x1FDFE7B0U, 0x7B000000U, 0x0001FC5FU, 0xFFFFF000U, 0x0000003FU, 0x03FFFFFFU, 0xFFF00000U, 0x00003FFFU, 0xFFFFFF00U, 0xF0000003U, 0x003FFFFFU, 0xFFFF0000U, 0x000003FFU, 0xFFFFFF00U, 0x00000001U, 0x07FFFFFCU, 0xF0000000U, 0x001FFFFFU, 0xFFC00000U, 0x00007FFFU, 0xFFFF0000U, 0x000001FFU, 0x00000400U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF03FFU, 0xFFFF03FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_variation_selector.c����������������������������������������0000664�0000000�0000000�00000003106�14110572173�0023446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_variation_selector table. */ #include "pr_variation_selector.h" bool uc_is_property_variation_selector (ucs4_t uc) { return bitmap_lookup (&u_property_variation_selector, uc); } const uc_property_t UC_PROPERTY_VARIATION_SELECTOR = { &uc_is_property_variation_selector }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_variation_selector.h����������������������������������������0000664�0000000�0000000�00000012464�14110572173�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[2 << 7]; unsigned int level3[3 << 4]; } u_property_variation_selector = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 128 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 16, 16 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_white_space.c�����������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_white_space table. */ #include "pr_white_space.h" bool uc_is_property_white_space (ucs4_t uc) { return bitmap_lookup (&u_property_white_space, uc); } const uc_property_t UC_PROPERTY_WHITE_SPACE = { &uc_is_property_white_space }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_white_space.h�����������������������������������������������0000664�0000000�0000000�00000007763�14110572173�0022067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_property_white_space = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003E00U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000007FFU, 0x00008300U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������gnulib-20210822~d383792/lib/unictype/pr_xid_continue.c����������������������������������������������0000664�0000000�0000000�00000003042�14110572173�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_xid_continue table. */ #include "pr_xid_continue.h" bool uc_is_property_xid_continue (ucs4_t uc) { return bitmap_lookup (&u_property_xid_continue, uc); } const uc_property_t UC_PROPERTY_XID_CONTINUE = { &uc_is_property_xid_continue }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_xid_continue.h����������������������������������������������0000664�0000000�0000000�00000105237�14110572173�0022257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[4 << 7]; unsigned int level3[69 << 4]; } u_property_xid_continue = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, 16 * sizeof (int) / sizeof (short) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 384 }, { 16 + 512 * sizeof (short) / sizeof (int) + 0, 16 + 512 * sizeof (short) / sizeof (int) + 16, 16 + 512 * sizeof (short) / sizeof (int) + 32, 16 + 512 * sizeof (short) / sizeof (int) + 48, 16 + 512 * sizeof (short) / sizeof (int) + 64, 16 + 512 * sizeof (short) / sizeof (int) + 80, 16 + 512 * sizeof (short) / sizeof (int) + 96, 16 + 512 * sizeof (short) / sizeof (int) + 112, 16 + 512 * sizeof (short) / sizeof (int) + 128, 16 + 512 * sizeof (short) / sizeof (int) + 144, 16 + 512 * sizeof (short) / sizeof (int) + 160, 16 + 512 * sizeof (short) / sizeof (int) + 176, 16 + 512 * sizeof (short) / sizeof (int) + 192, 16 + 512 * sizeof (short) / sizeof (int) + 208, 16 + 512 * sizeof (short) / sizeof (int) + 224, 16 + 512 * sizeof (short) / sizeof (int) + 240, 16 + 512 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 272, -1, 16 + 512 * sizeof (short) / sizeof (int) + 288, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 320, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 336, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 352, 16 + 512 * sizeof (short) / sizeof (int) + 368, 16 + 512 * sizeof (short) / sizeof (int) + 384, 16 + 512 * sizeof (short) / sizeof (int) + 400, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 432, 16 + 512 * sizeof (short) / sizeof (int) + 448, 16 + 512 * sizeof (short) / sizeof (int) + 464, 16 + 512 * sizeof (short) / sizeof (int) + 480, 16 + 512 * sizeof (short) / sizeof (int) + 496, 16 + 512 * sizeof (short) / sizeof (int) + 512, 16 + 512 * sizeof (short) / sizeof (int) + 528, 16 + 512 * sizeof (short) / sizeof (int) + 544, 16 + 512 * sizeof (short) / sizeof (int) + 560, 16 + 512 * sizeof (short) / sizeof (int) + 576, 16 + 512 * sizeof (short) / sizeof (int) + 592, -1, 16 + 512 * sizeof (short) / sizeof (int) + 608, 16 + 512 * sizeof (short) / sizeof (int) + 624, 16 + 512 * sizeof (short) / sizeof (int) + 640, 16 + 512 * sizeof (short) / sizeof (int) + 656, 16 + 512 * sizeof (short) / sizeof (int) + 672, 16 + 512 * sizeof (short) / sizeof (int) + 688, 16 + 512 * sizeof (short) / sizeof (int) + 704, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 720, 16 + 512 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 784, -1, 16 + 512 * sizeof (short) / sizeof (int) + 800, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 816, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 880, 16 + 512 * sizeof (short) / sizeof (int) + 896, 16 + 512 * sizeof (short) / sizeof (int) + 912, 16 + 512 * sizeof (short) / sizeof (int) + 928, -1, 16 + 512 * sizeof (short) / sizeof (int) + 944, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 960, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 976, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1008, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1024, 16 + 512 * sizeof (short) / sizeof (int) + 1040, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1056, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 1072, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 1088, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x87FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04A00400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xB8DFFFFFU, 0xFFFFD7C0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFCFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0xFFFE00FFU, 0xBFFFFFFFU, 0xFFFF00B6U, 0x000707FFU, 0x07FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FEFFFFFU, 0x9FFFFDFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0x043FFFFFU, 0xFFFFFFFFU, 0x00003FFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0xFFF00000U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFCFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x0003FFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x003FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0x0200FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0C0399FU, 0x0002FFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x0000FFC0U, 0xFFFDDFEFU, 0xE3FFFDFFU, 0x07603DDFU, 0x0000FFCFU, 0xFFFDDFEFU, 0xF3EFFDFFU, 0x40603DDFU, 0x0006FFCFU, 0xFFFDDFEEU, 0xE7FFFFFFU, 0x80F07DDFU, 0xFC00FFCFU, 0xFC7FFFECU, 0x2FFBFFFFU, 0xFF5F847FU, 0x000CFFC0U, 0xFFFFFFFEU, 0x07FFFFFFU, 0x03FF7FFFU, 0x00000000U, 0xFEF02596U, 0x3BFFECAEU, 0xF3FF3F5FU, 0x00000000U, 0x03000001U, 0xC2A003FFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFDFU, 0x1FFFFFFFU, 0x00000040U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x0003FE00U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x001FDFFFU, 0x001FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x308FFFFFU, 0x000003FFU, 0x03FF3800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x07FF03FFU, 0x00000000U, 0x0FFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0x3FFF0080U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0FFFU, 0x000FF800U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFF70000U, 0x037FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF83FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x80000000U, 0x00100001U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x1FFF0000U, 0x0001FFE2U, 0x3F2FFC84U, 0xF3FFFD50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FF81FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0x000000E0U, 0x1F3EFFFEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE67FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xBFF0FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFFFFFU, 0x000000FFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF003FU, 0x28FFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0x000FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF8001U, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x03FF3FFFU, 0xFC7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x38000007U, 0x007CFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF37FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x03FF0000U, 0x0000FFFFU, 0x0018FFFFU, 0x0000E000U, 0xAA8A0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x87FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000001U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x07FFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEFF06FU, 0x870FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000007FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x8000FFC0U, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF0000U, 0x004FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x17FF1C1FU, 0x00000000U, 0xFFFBFFFFU, 0x40FFFFFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xF3EDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF07FFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3F000001U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0011U, 0x00000000U, 0xFFFFFFFFU, 0x00FFFFFFU, 0x000003FFU, 0x00000000U, 0xE3FFFFFFU, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0x03FF0001U, 0xFFFC0000U, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF001FU, 0x7FFFFFFFU, 0xFFFF8000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x63FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF807E3E0U, 0x00000FE7U, 0x00003C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000001CU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0x00201FFFU, 0xF8000010U, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007F001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF07FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_xid_start.c�������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_xid_start table. */ #include "pr_xid_start.h" bool uc_is_property_xid_start (ucs4_t uc) { return bitmap_lookup (&u_property_xid_start, uc); } const uc_property_t UC_PROPERTY_XID_START = { &uc_is_property_xid_start }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_xid_start.h�������������������������������������������������0000664�0000000�0000000�00000077436�14110572173�0021601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[3]; short level2[3 << 7]; unsigned int level3[64 << 4]; } u_property_xid_start = { { 3 }, { 4 * sizeof (int) / sizeof (short) + 0, 4 * sizeof (int) / sizeof (short) + 128, 4 * sizeof (int) / sizeof (short) + 256 }, { 4 + 384 * sizeof (short) / sizeof (int) + 0, 4 + 384 * sizeof (short) / sizeof (int) + 16, 4 + 384 * sizeof (short) / sizeof (int) + 32, 4 + 384 * sizeof (short) / sizeof (int) + 48, 4 + 384 * sizeof (short) / sizeof (int) + 64, 4 + 384 * sizeof (short) / sizeof (int) + 80, 4 + 384 * sizeof (short) / sizeof (int) + 96, 4 + 384 * sizeof (short) / sizeof (int) + 112, 4 + 384 * sizeof (short) / sizeof (int) + 128, 4 + 384 * sizeof (short) / sizeof (int) + 144, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 176, 4 + 384 * sizeof (short) / sizeof (int) + 192, 4 + 384 * sizeof (short) / sizeof (int) + 208, 4 + 384 * sizeof (short) / sizeof (int) + 224, 4 + 384 * sizeof (short) / sizeof (int) + 240, 4 + 384 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 272, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 352, 4 + 384 * sizeof (short) / sizeof (int) + 368, 4 + 384 * sizeof (short) / sizeof (int) + 384, 4 + 384 * sizeof (short) / sizeof (int) + 400, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 432, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, 4 + 384 * sizeof (short) / sizeof (int) + 480, 4 + 384 * sizeof (short) / sizeof (int) + 496, 4 + 384 * sizeof (short) / sizeof (int) + 512, 4 + 384 * sizeof (short) / sizeof (int) + 528, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, 4 + 384 * sizeof (short) / sizeof (int) + 672, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, 4 + 384 * sizeof (short) / sizeof (int) + 800, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 816, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 880, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 912, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 944, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 960, 4 + 384 * sizeof (short) / sizeof (int) + 976, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 1008, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000000U, 0xB8DF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFEU, 0x000000FFU, 0x00000000U, 0xFFFF0000U, 0x000707FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9C00C060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFC00U, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x3FDFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFE0003U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x00030003U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001C0000U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x02000003U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x00020003U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x00000000U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x07000000U, 0x00000003U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x40000000U, 0x00060003U, 0xFFFDDFE0U, 0x27FFFFFFU, 0x80704000U, 0xFC000003U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x00000000U, 0xFFFFFFFEU, 0x0005FFFFU, 0x0000007FU, 0x00000000U, 0xFEF02596U, 0x2005ECAEU, 0xF000005FU, 0x00000000U, 0x00000001U, 0x00000000U, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F0000U, 0xFFE1C062U, 0x00004003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x0003DFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFF0000U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x000003FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x00000FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFC00C001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFC00E000U, 0x3FFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x0063DE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F2FFC84U, 0xF3FFFD50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFE3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0x07FFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000C00U, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0x00FF7FFFU, 0x00000000U, 0xFF800000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x00000000U, 0x28FC0000U, 0xFFFFFC00U, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x00008000U, 0x7C00FFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF003FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFF0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAA8A0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0x3FFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x000FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x000001FFU, 0xFFFFFFF8U, 0x0000007FU, 0xFFFF0000U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x1400001EU, 0x00000000U, 0xFFFBFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x00000000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000780U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000010U, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x00000001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x0000000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001001FU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x00000001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0x00000FF7U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_zero_width.c������������������������������������������������0000664�0000000�0000000�00000003026�14110572173�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_property_zero_width table. */ #include "pr_zero_width.h" bool uc_is_property_zero_width (ucs4_t uc) { return bitmap_lookup (&u_property_zero_width, uc); } const uc_property_t UC_PROPERTY_ZERO_WIDTH = { &uc_is_property_zero_width }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/pr_zero_width.h������������������������������������������������0000664�0000000�0000000�00000021105�14110572173�0021734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[15]; short level2[3 << 7]; unsigned int level3[10 << 4]; } u_property_zero_width = { { 15 }, { 16 * sizeof (int) / sizeof (short) + 0, 16 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 * sizeof (int) / sizeof (short) + 256 }, { 16 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 16, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000004U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F800U, 0x00007C00U, 0x00000000U, 0x0000FFDFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0E000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07F80000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/scripts.c������������������������������������������������������0000664�0000000�0000000�00000004061�14110572173�0020541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Scripts of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. 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/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include <string.h> #include "scripts.h" #include "unictype/scripts_byname.h" const uc_script_t * uc_script (ucs4_t uc) { unsigned int index1 = uc >> script_header_0; if (index1 < script_header_1) { int lookup1 = u_script.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> script_header_2) & script_header_3; int lookup2 = u_script.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & script_header_4); unsigned char lookup3 = u_script.level3[lookup2 + index3]; if (lookup3 != 0xff) return &scripts[lookup3]; } } } return NULL; } const uc_script_t * uc_script_byname (const char *script_name) { const struct named_script *found; found = uc_script_lookup (script_name, strlen (script_name)); if (found != NULL) return &scripts[found->index]; else return NULL; } bool uc_is_script (ucs4_t uc, const uc_script_t *script) { return uc_script (uc) == script; } void uc_all_scripts (const uc_script_t **scriptsp, size_t *countp) { *scriptsp = scripts; *countp = sizeof (scripts) / sizeof (scripts[0]); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/scripts.h������������������������������������������������������0000664�0000000�0000000�00000653103�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode scripts. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ static const uc_interval_t script_common_intervals[] = { { 0x0000, 1, 0 }, { 0x0040, 0, 1 }, { 0x005B, 1, 0 }, { 0x0060, 0, 1 }, { 0x007B, 1, 0 }, { 0x00A9, 0, 1 }, { 0x00AB, 1, 0 }, { 0x00B9, 0, 1 }, { 0x00BB, 1, 0 }, { 0x00BF, 0, 1 }, { 0x00D7, 1, 1 }, { 0x00F7, 1, 1 }, { 0x02B9, 1, 0 }, { 0x02DF, 0, 1 }, { 0x02E5, 1, 0 }, { 0x02E9, 0, 1 }, { 0x02EC, 1, 0 }, { 0x02FF, 0, 1 }, { 0x0374, 1, 1 }, { 0x037E, 1, 1 }, { 0x0385, 1, 1 }, { 0x0387, 1, 1 }, { 0x0589, 1, 1 }, { 0x0605, 1, 1 }, { 0x060C, 1, 1 }, { 0x061B, 1, 0 }, { 0x061C, 0, 1 }, { 0x061F, 1, 1 }, { 0x0640, 1, 1 }, { 0x06DD, 1, 1 }, { 0x08E2, 1, 1 }, { 0x0964, 1, 0 }, { 0x0965, 0, 1 }, { 0x0E3F, 1, 1 }, { 0x0FD5, 1, 0 }, { 0x0FD8, 0, 1 }, { 0x10FB, 1, 1 }, { 0x16EB, 1, 0 }, { 0x16ED, 0, 1 }, { 0x1735, 1, 0 }, { 0x1736, 0, 1 }, { 0x1802, 1, 0 }, { 0x1803, 0, 1 }, { 0x1805, 1, 1 }, { 0x1CD3, 1, 1 }, { 0x1CE1, 1, 1 }, { 0x1CE9, 1, 0 }, { 0x1CEC, 0, 1 }, { 0x1CEE, 1, 0 }, { 0x1CF3, 0, 1 }, { 0x1CF5, 1, 0 }, { 0x1CF6, 0, 1 }, { 0x2000, 1, 0 }, { 0x200B, 0, 1 }, { 0x200E, 1, 0 }, { 0x2064, 0, 1 }, { 0x2066, 1, 0 }, { 0x2070, 0, 1 }, { 0x2074, 1, 0 }, { 0x207E, 0, 1 }, { 0x2080, 1, 0 }, { 0x208E, 0, 1 }, { 0x20A0, 1, 0 }, { 0x20BE, 0, 1 }, { 0x2100, 1, 0 }, { 0x2125, 0, 1 }, { 0x2127, 1, 0 }, { 0x2129, 0, 1 }, { 0x212C, 1, 0 }, { 0x2131, 0, 1 }, { 0x2133, 1, 0 }, { 0x214D, 0, 1 }, { 0x214F, 1, 0 }, { 0x215F, 0, 1 }, { 0x2189, 1, 0 }, { 0x218B, 0, 1 }, { 0x2190, 1, 0 }, { 0x23FE, 0, 1 }, { 0x2400, 1, 0 }, { 0x2426, 0, 1 }, { 0x2440, 1, 0 }, { 0x244A, 0, 1 }, { 0x2460, 1, 0 }, { 0x27FF, 0, 1 }, { 0x2900, 1, 0 }, { 0x2B73, 0, 1 }, { 0x2B76, 1, 0 }, { 0x2B95, 0, 1 }, { 0x2B98, 1, 0 }, { 0x2BB9, 0, 1 }, { 0x2BBD, 1, 0 }, { 0x2BC8, 0, 1 }, { 0x2BCA, 1, 0 }, { 0x2BD1, 0, 1 }, { 0x2BEC, 1, 0 }, { 0x2BEF, 0, 1 }, { 0x2E00, 1, 0 }, { 0x2E44, 0, 1 }, { 0x2FF0, 1, 0 }, { 0x2FFB, 0, 1 }, { 0x3000, 1, 0 }, { 0x3004, 0, 1 }, { 0x3006, 1, 1 }, { 0x3008, 1, 0 }, { 0x3020, 0, 1 }, { 0x3030, 1, 0 }, { 0x3037, 0, 1 }, { 0x303C, 1, 0 }, { 0x303F, 0, 1 }, { 0x309B, 1, 0 }, { 0x309C, 0, 1 }, { 0x30A0, 1, 1 }, { 0x30FB, 1, 0 }, { 0x30FC, 0, 1 }, { 0x3190, 1, 0 }, { 0x319F, 0, 1 }, { 0x31C0, 1, 0 }, { 0x31E3, 0, 1 }, { 0x3220, 1, 0 }, { 0x325F, 0, 1 }, { 0x327F, 1, 0 }, { 0x32CF, 0, 1 }, { 0x3358, 1, 0 }, { 0x33FF, 0, 1 }, { 0x4DC0, 1, 0 }, { 0x4DFF, 0, 1 }, { 0xA700, 1, 0 }, { 0xA721, 0, 1 }, { 0xA788, 1, 0 }, { 0xA78A, 0, 1 }, { 0xA830, 1, 0 }, { 0xA839, 0, 1 }, { 0xA92E, 1, 1 }, { 0xA9CF, 1, 1 }, { 0xAB5B, 1, 1 }, { 0xFD3E, 1, 0 }, { 0xFD3F, 0, 1 }, { 0xFE10, 1, 0 }, { 0xFE19, 0, 1 }, { 0xFE30, 1, 0 }, { 0xFE52, 0, 1 }, { 0xFE54, 1, 0 }, { 0xFE66, 0, 1 }, { 0xFE68, 1, 0 }, { 0xFE6B, 0, 1 }, { 0xFEFF, 1, 1 }, { 0xFF01, 1, 0 }, { 0xFF20, 0, 1 }, { 0xFF3B, 1, 0 }, { 0xFF40, 0, 1 }, { 0xFF5B, 1, 0 }, { 0xFF65, 0, 1 }, { 0xFF70, 1, 1 }, { 0xFF9E, 1, 0 }, { 0xFF9F, 0, 1 }, { 0xFFE0, 1, 0 }, { 0xFFE6, 0, 1 }, { 0xFFE8, 1, 0 }, { 0xFFEE, 0, 1 }, { 0xFFF9, 1, 0 }, { 0xFFFD, 0, 1 }, { 0x10100, 1, 0 }, { 0x10102, 0, 1 }, { 0x10107, 1, 0 }, { 0x10133, 0, 1 }, { 0x10137, 1, 0 }, { 0x1013F, 0, 1 }, { 0x10190, 1, 0 }, { 0x1019B, 0, 1 }, { 0x101D0, 1, 0 }, { 0x101FC, 0, 1 }, { 0x102E1, 1, 0 }, { 0x102FB, 0, 1 }, { 0x1BCA0, 1, 0 }, { 0x1BCA3, 0, 1 }, { 0x1D000, 1, 0 }, { 0x1D0F5, 0, 1 }, { 0x1D100, 1, 0 }, { 0x1D126, 0, 1 }, { 0x1D129, 1, 0 }, { 0x1D166, 0, 1 }, { 0x1D16A, 1, 0 }, { 0x1D17A, 0, 1 }, { 0x1D183, 1, 0 }, { 0x1D184, 0, 1 }, { 0x1D18C, 1, 0 }, { 0x1D1A9, 0, 1 }, { 0x1D1AE, 1, 0 }, { 0x1D1E8, 0, 1 }, { 0x1D300, 1, 0 }, { 0x1D356, 0, 1 }, { 0x1D360, 1, 0 }, { 0x1D371, 0, 1 }, { 0x1D400, 1, 0 }, { 0x1D454, 0, 1 }, { 0x1D456, 1, 0 }, { 0x1D49C, 0, 1 }, { 0x1D49E, 1, 0 }, { 0x1D49F, 0, 1 }, { 0x1D4A2, 1, 1 }, { 0x1D4A5, 1, 0 }, { 0x1D4A6, 0, 1 }, { 0x1D4A9, 1, 0 }, { 0x1D4AC, 0, 1 }, { 0x1D4AE, 1, 0 }, { 0x1D4B9, 0, 1 }, { 0x1D4BB, 1, 1 }, { 0x1D4BD, 1, 0 }, { 0x1D4C3, 0, 1 }, { 0x1D4C5, 1, 0 }, { 0x1D505, 0, 1 }, { 0x1D507, 1, 0 }, { 0x1D50A, 0, 1 }, { 0x1D50D, 1, 0 }, { 0x1D514, 0, 1 }, { 0x1D516, 1, 0 }, { 0x1D51C, 0, 1 }, { 0x1D51E, 1, 0 }, { 0x1D539, 0, 1 }, { 0x1D53B, 1, 0 }, { 0x1D53E, 0, 1 }, { 0x1D540, 1, 0 }, { 0x1D544, 0, 1 }, { 0x1D546, 1, 1 }, { 0x1D54A, 1, 0 }, { 0x1D550, 0, 1 }, { 0x1D552, 1, 0 }, { 0x1D6A5, 0, 1 }, { 0x1D6A8, 1, 0 }, { 0x1D7CB, 0, 1 }, { 0x1D7CE, 1, 0 }, { 0x1D7FF, 0, 1 }, { 0x1F000, 1, 0 }, { 0x1F02B, 0, 1 }, { 0x1F030, 1, 0 }, { 0x1F093, 0, 1 }, { 0x1F0A0, 1, 0 }, { 0x1F0AE, 0, 1 }, { 0x1F0B1, 1, 0 }, { 0x1F0BF, 0, 1 }, { 0x1F0C1, 1, 0 }, { 0x1F0CF, 0, 1 }, { 0x1F0D1, 1, 0 }, { 0x1F0F5, 0, 1 }, { 0x1F100, 1, 0 }, { 0x1F10C, 0, 1 }, { 0x1F110, 1, 0 }, { 0x1F12E, 0, 1 }, { 0x1F130, 1, 0 }, { 0x1F16B, 0, 1 }, { 0x1F170, 1, 0 }, { 0x1F1AC, 0, 1 }, { 0x1F1E6, 1, 0 }, { 0x1F1FF, 0, 1 }, { 0x1F201, 1, 0 }, { 0x1F202, 0, 1 }, { 0x1F210, 1, 0 }, { 0x1F23B, 0, 1 }, { 0x1F240, 1, 0 }, { 0x1F248, 0, 1 }, { 0x1F250, 1, 0 }, { 0x1F251, 0, 1 }, { 0x1F300, 1, 0 }, { 0x1F6D2, 0, 1 }, { 0x1F6E0, 1, 0 }, { 0x1F6EC, 0, 1 }, { 0x1F6F0, 1, 0 }, { 0x1F6F6, 0, 1 }, { 0x1F700, 1, 0 }, { 0x1F773, 0, 1 }, { 0x1F780, 1, 0 }, { 0x1F7D4, 0, 1 }, { 0x1F800, 1, 0 }, { 0x1F80B, 0, 1 }, { 0x1F810, 1, 0 }, { 0x1F847, 0, 1 }, { 0x1F850, 1, 0 }, { 0x1F859, 0, 1 }, { 0x1F860, 1, 0 }, { 0x1F887, 0, 1 }, { 0x1F890, 1, 0 }, { 0x1F8AD, 0, 1 }, { 0x1F910, 1, 0 }, { 0x1F91E, 0, 1 }, { 0x1F920, 1, 0 }, { 0x1F927, 0, 1 }, { 0x1F930, 1, 1 }, { 0x1F933, 1, 0 }, { 0x1F93E, 0, 1 }, { 0x1F940, 1, 0 }, { 0x1F94B, 0, 1 }, { 0x1F950, 1, 0 }, { 0x1F95E, 0, 1 }, { 0x1F980, 1, 0 }, { 0x1F991, 0, 1 }, { 0x1F9C0, 1, 1 }, { 0xE0001, 1, 1 }, { 0xE0020, 1, 0 }, { 0xE007F, 0, 1 } }; static const uc_interval_t script_latin_intervals[] = { { 0x0041, 1, 0 }, { 0x005A, 0, 1 }, { 0x0061, 1, 0 }, { 0x007A, 0, 1 }, { 0x00AA, 1, 1 }, { 0x00BA, 1, 1 }, { 0x00C0, 1, 0 }, { 0x00D6, 0, 1 }, { 0x00D8, 1, 0 }, { 0x00F6, 0, 1 }, { 0x00F8, 1, 0 }, { 0x02B8, 0, 1 }, { 0x02E0, 1, 0 }, { 0x02E4, 0, 1 }, { 0x1D00, 1, 0 }, { 0x1D25, 0, 1 }, { 0x1D2C, 1, 0 }, { 0x1D5C, 0, 1 }, { 0x1D62, 1, 0 }, { 0x1D65, 0, 1 }, { 0x1D6B, 1, 0 }, { 0x1D77, 0, 1 }, { 0x1D79, 1, 0 }, { 0x1DBE, 0, 1 }, { 0x1E00, 1, 0 }, { 0x1EFF, 0, 1 }, { 0x2071, 1, 1 }, { 0x207F, 1, 1 }, { 0x2090, 1, 0 }, { 0x209C, 0, 1 }, { 0x212A, 1, 0 }, { 0x212B, 0, 1 }, { 0x2132, 1, 1 }, { 0x214E, 1, 1 }, { 0x2160, 1, 0 }, { 0x2188, 0, 1 }, { 0x2C60, 1, 0 }, { 0x2C7F, 0, 1 }, { 0xA722, 1, 0 }, { 0xA787, 0, 1 }, { 0xA78B, 1, 0 }, { 0xA7AE, 0, 1 }, { 0xA7B0, 1, 0 }, { 0xA7B7, 0, 1 }, { 0xA7F7, 1, 0 }, { 0xA7FF, 0, 1 }, { 0xAB30, 1, 0 }, { 0xAB5A, 0, 1 }, { 0xAB5C, 1, 0 }, { 0xAB64, 0, 1 }, { 0xFB00, 1, 0 }, { 0xFB06, 0, 1 }, { 0xFF21, 1, 0 }, { 0xFF3A, 0, 1 }, { 0xFF41, 1, 0 }, { 0xFF5A, 0, 1 } }; static const uc_interval_t script_greek_intervals[] = { { 0x0370, 1, 0 }, { 0x0373, 0, 1 }, { 0x0375, 1, 0 }, { 0x0377, 0, 1 }, { 0x037A, 1, 0 }, { 0x037D, 0, 1 }, { 0x037F, 1, 1 }, { 0x0384, 1, 1 }, { 0x0386, 1, 1 }, { 0x0388, 1, 0 }, { 0x038A, 0, 1 }, { 0x038C, 1, 1 }, { 0x038E, 1, 0 }, { 0x03A1, 0, 1 }, { 0x03A3, 1, 0 }, { 0x03E1, 0, 1 }, { 0x03F0, 1, 0 }, { 0x03FF, 0, 1 }, { 0x1D26, 1, 0 }, { 0x1D2A, 0, 1 }, { 0x1D5D, 1, 0 }, { 0x1D61, 0, 1 }, { 0x1D66, 1, 0 }, { 0x1D6A, 0, 1 }, { 0x1DBF, 1, 1 }, { 0x1F00, 1, 0 }, { 0x1F15, 0, 1 }, { 0x1F18, 1, 0 }, { 0x1F1D, 0, 1 }, { 0x1F20, 1, 0 }, { 0x1F45, 0, 1 }, { 0x1F48, 1, 0 }, { 0x1F4D, 0, 1 }, { 0x1F50, 1, 0 }, { 0x1F57, 0, 1 }, { 0x1F59, 1, 1 }, { 0x1F5B, 1, 1 }, { 0x1F5D, 1, 1 }, { 0x1F5F, 1, 0 }, { 0x1F7D, 0, 1 }, { 0x1F80, 1, 0 }, { 0x1FB4, 0, 1 }, { 0x1FB6, 1, 0 }, { 0x1FC4, 0, 1 }, { 0x1FC6, 1, 0 }, { 0x1FD3, 0, 1 }, { 0x1FD6, 1, 0 }, { 0x1FDB, 0, 1 }, { 0x1FDD, 1, 0 }, { 0x1FEF, 0, 1 }, { 0x1FF2, 1, 0 }, { 0x1FF4, 0, 1 }, { 0x1FF6, 1, 0 }, { 0x1FFE, 0, 1 }, { 0x2126, 1, 1 }, { 0xAB65, 1, 1 }, { 0x10140, 1, 0 }, { 0x1018E, 0, 1 }, { 0x101A0, 1, 1 }, { 0x1D200, 1, 0 }, { 0x1D245, 0, 1 } }; static const uc_interval_t script_cyrillic_intervals[] = { { 0x0400, 1, 0 }, { 0x0484, 0, 1 }, { 0x0487, 1, 0 }, { 0x052F, 0, 1 }, { 0x1C80, 1, 0 }, { 0x1C88, 0, 1 }, { 0x1D2B, 1, 1 }, { 0x1D78, 1, 1 }, { 0x2DE0, 1, 0 }, { 0x2DFF, 0, 1 }, { 0xA640, 1, 0 }, { 0xA69F, 0, 1 }, { 0xFE2E, 1, 0 }, { 0xFE2F, 0, 1 } }; static const uc_interval_t script_armenian_intervals[] = { { 0x0531, 1, 0 }, { 0x0556, 0, 1 }, { 0x0559, 1, 0 }, { 0x055F, 0, 1 }, { 0x0561, 1, 0 }, { 0x0587, 0, 1 }, { 0x058A, 1, 1 }, { 0x058D, 1, 0 }, { 0x058F, 0, 1 }, { 0xFB13, 1, 0 }, { 0xFB17, 0, 1 } }; static const uc_interval_t script_hebrew_intervals[] = { { 0x0591, 1, 0 }, { 0x05C7, 0, 1 }, { 0x05D0, 1, 0 }, { 0x05EA, 0, 1 }, { 0x05F0, 1, 0 }, { 0x05F4, 0, 1 }, { 0xFB1D, 1, 0 }, { 0xFB36, 0, 1 }, { 0xFB38, 1, 0 }, { 0xFB3C, 0, 1 }, { 0xFB3E, 1, 1 }, { 0xFB40, 1, 0 }, { 0xFB41, 0, 1 }, { 0xFB43, 1, 0 }, { 0xFB44, 0, 1 }, { 0xFB46, 1, 0 }, { 0xFB4F, 0, 1 } }; static const uc_interval_t script_arabic_intervals[] = { { 0x0600, 1, 0 }, { 0x0604, 0, 1 }, { 0x0606, 1, 0 }, { 0x060B, 0, 1 }, { 0x060D, 1, 0 }, { 0x061A, 0, 1 }, { 0x061E, 1, 1 }, { 0x0620, 1, 0 }, { 0x063F, 0, 1 }, { 0x0641, 1, 0 }, { 0x064A, 0, 1 }, { 0x0656, 1, 0 }, { 0x066F, 0, 1 }, { 0x0671, 1, 0 }, { 0x06DC, 0, 1 }, { 0x06DE, 1, 0 }, { 0x06FF, 0, 1 }, { 0x0750, 1, 0 }, { 0x077F, 0, 1 }, { 0x08A0, 1, 0 }, { 0x08B4, 0, 1 }, { 0x08B6, 1, 0 }, { 0x08BD, 0, 1 }, { 0x08D4, 1, 0 }, { 0x08E1, 0, 1 }, { 0x08E3, 1, 0 }, { 0x08FF, 0, 1 }, { 0xFB50, 1, 0 }, { 0xFBC1, 0, 1 }, { 0xFBD3, 1, 0 }, { 0xFD3D, 0, 1 }, { 0xFD50, 1, 0 }, { 0xFD8F, 0, 1 }, { 0xFD92, 1, 0 }, { 0xFDC7, 0, 1 }, { 0xFDF0, 1, 0 }, { 0xFDFD, 0, 1 }, { 0xFE70, 1, 0 }, { 0xFE74, 0, 1 }, { 0xFE76, 1, 0 }, { 0xFEFC, 0, 1 }, { 0x10E60, 1, 0 }, { 0x10E7E, 0, 1 }, { 0x1EE00, 1, 0 }, { 0x1EE03, 0, 1 }, { 0x1EE05, 1, 0 }, { 0x1EE1F, 0, 1 }, { 0x1EE21, 1, 0 }, { 0x1EE22, 0, 1 }, { 0x1EE24, 1, 1 }, { 0x1EE27, 1, 1 }, { 0x1EE29, 1, 0 }, { 0x1EE32, 0, 1 }, { 0x1EE34, 1, 0 }, { 0x1EE37, 0, 1 }, { 0x1EE39, 1, 1 }, { 0x1EE3B, 1, 1 }, { 0x1EE42, 1, 1 }, { 0x1EE47, 1, 1 }, { 0x1EE49, 1, 1 }, { 0x1EE4B, 1, 1 }, { 0x1EE4D, 1, 0 }, { 0x1EE4F, 0, 1 }, { 0x1EE51, 1, 0 }, { 0x1EE52, 0, 1 }, { 0x1EE54, 1, 1 }, { 0x1EE57, 1, 1 }, { 0x1EE59, 1, 1 }, { 0x1EE5B, 1, 1 }, { 0x1EE5D, 1, 1 }, { 0x1EE5F, 1, 1 }, { 0x1EE61, 1, 0 }, { 0x1EE62, 0, 1 }, { 0x1EE64, 1, 1 }, { 0x1EE67, 1, 0 }, { 0x1EE6A, 0, 1 }, { 0x1EE6C, 1, 0 }, { 0x1EE72, 0, 1 }, { 0x1EE74, 1, 0 }, { 0x1EE77, 0, 1 }, { 0x1EE79, 1, 0 }, { 0x1EE7C, 0, 1 }, { 0x1EE7E, 1, 1 }, { 0x1EE80, 1, 0 }, { 0x1EE89, 0, 1 }, { 0x1EE8B, 1, 0 }, { 0x1EE9B, 0, 1 }, { 0x1EEA1, 1, 0 }, { 0x1EEA3, 0, 1 }, { 0x1EEA5, 1, 0 }, { 0x1EEA9, 0, 1 }, { 0x1EEAB, 1, 0 }, { 0x1EEBB, 0, 1 }, { 0x1EEF0, 1, 0 }, { 0x1EEF1, 0, 1 } }; static const uc_interval_t script_syriac_intervals[] = { { 0x0700, 1, 0 }, { 0x070D, 0, 1 }, { 0x070F, 1, 0 }, { 0x074A, 0, 1 }, { 0x074D, 1, 0 }, { 0x074F, 0, 1 } }; static const uc_interval_t script_thaana_intervals[] = { { 0x0780, 1, 0 }, { 0x07B1, 0, 1 } }; static const uc_interval_t script_devanagari_intervals[] = { { 0x0900, 1, 0 }, { 0x0950, 0, 1 }, { 0x0953, 1, 0 }, { 0x0963, 0, 1 }, { 0x0966, 1, 0 }, { 0x097F, 0, 1 }, { 0xA8E0, 1, 0 }, { 0xA8FD, 0, 1 } }; static const uc_interval_t script_bengali_intervals[] = { { 0x0980, 1, 0 }, { 0x0983, 0, 1 }, { 0x0985, 1, 0 }, { 0x098C, 0, 1 }, { 0x098F, 1, 0 }, { 0x0990, 0, 1 }, { 0x0993, 1, 0 }, { 0x09A8, 0, 1 }, { 0x09AA, 1, 0 }, { 0x09B0, 0, 1 }, { 0x09B2, 1, 1 }, { 0x09B6, 1, 0 }, { 0x09B9, 0, 1 }, { 0x09BC, 1, 0 }, { 0x09C4, 0, 1 }, { 0x09C7, 1, 0 }, { 0x09C8, 0, 1 }, { 0x09CB, 1, 0 }, { 0x09CE, 0, 1 }, { 0x09D7, 1, 1 }, { 0x09DC, 1, 0 }, { 0x09DD, 0, 1 }, { 0x09DF, 1, 0 }, { 0x09E3, 0, 1 }, { 0x09E6, 1, 0 }, { 0x09FB, 0, 1 } }; static const uc_interval_t script_gurmukhi_intervals[] = { { 0x0A01, 1, 0 }, { 0x0A03, 0, 1 }, { 0x0A05, 1, 0 }, { 0x0A0A, 0, 1 }, { 0x0A0F, 1, 0 }, { 0x0A10, 0, 1 }, { 0x0A13, 1, 0 }, { 0x0A28, 0, 1 }, { 0x0A2A, 1, 0 }, { 0x0A30, 0, 1 }, { 0x0A32, 1, 0 }, { 0x0A33, 0, 1 }, { 0x0A35, 1, 0 }, { 0x0A36, 0, 1 }, { 0x0A38, 1, 0 }, { 0x0A39, 0, 1 }, { 0x0A3C, 1, 1 }, { 0x0A3E, 1, 0 }, { 0x0A42, 0, 1 }, { 0x0A47, 1, 0 }, { 0x0A48, 0, 1 }, { 0x0A4B, 1, 0 }, { 0x0A4D, 0, 1 }, { 0x0A51, 1, 1 }, { 0x0A59, 1, 0 }, { 0x0A5C, 0, 1 }, { 0x0A5E, 1, 1 }, { 0x0A66, 1, 0 }, { 0x0A75, 0, 1 } }; static const uc_interval_t script_gujarati_intervals[] = { { 0x0A81, 1, 0 }, { 0x0A83, 0, 1 }, { 0x0A85, 1, 0 }, { 0x0A8D, 0, 1 }, { 0x0A8F, 1, 0 }, { 0x0A91, 0, 1 }, { 0x0A93, 1, 0 }, { 0x0AA8, 0, 1 }, { 0x0AAA, 1, 0 }, { 0x0AB0, 0, 1 }, { 0x0AB2, 1, 0 }, { 0x0AB3, 0, 1 }, { 0x0AB5, 1, 0 }, { 0x0AB9, 0, 1 }, { 0x0ABC, 1, 0 }, { 0x0AC5, 0, 1 }, { 0x0AC7, 1, 0 }, { 0x0AC9, 0, 1 }, { 0x0ACB, 1, 0 }, { 0x0ACD, 0, 1 }, { 0x0AD0, 1, 1 }, { 0x0AE0, 1, 0 }, { 0x0AE3, 0, 1 }, { 0x0AE6, 1, 0 }, { 0x0AF1, 0, 1 }, { 0x0AF9, 1, 1 } }; static const uc_interval_t script_oriya_intervals[] = { { 0x0B01, 1, 0 }, { 0x0B03, 0, 1 }, { 0x0B05, 1, 0 }, { 0x0B0C, 0, 1 }, { 0x0B0F, 1, 0 }, { 0x0B10, 0, 1 }, { 0x0B13, 1, 0 }, { 0x0B28, 0, 1 }, { 0x0B2A, 1, 0 }, { 0x0B30, 0, 1 }, { 0x0B32, 1, 0 }, { 0x0B33, 0, 1 }, { 0x0B35, 1, 0 }, { 0x0B39, 0, 1 }, { 0x0B3C, 1, 0 }, { 0x0B44, 0, 1 }, { 0x0B47, 1, 0 }, { 0x0B48, 0, 1 }, { 0x0B4B, 1, 0 }, { 0x0B4D, 0, 1 }, { 0x0B56, 1, 0 }, { 0x0B57, 0, 1 }, { 0x0B5C, 1, 0 }, { 0x0B5D, 0, 1 }, { 0x0B5F, 1, 0 }, { 0x0B63, 0, 1 }, { 0x0B66, 1, 0 }, { 0x0B77, 0, 1 } }; static const uc_interval_t script_tamil_intervals[] = { { 0x0B82, 1, 0 }, { 0x0B83, 0, 1 }, { 0x0B85, 1, 0 }, { 0x0B8A, 0, 1 }, { 0x0B8E, 1, 0 }, { 0x0B90, 0, 1 }, { 0x0B92, 1, 0 }, { 0x0B95, 0, 1 }, { 0x0B99, 1, 0 }, { 0x0B9A, 0, 1 }, { 0x0B9C, 1, 1 }, { 0x0B9E, 1, 0 }, { 0x0B9F, 0, 1 }, { 0x0BA3, 1, 0 }, { 0x0BA4, 0, 1 }, { 0x0BA8, 1, 0 }, { 0x0BAA, 0, 1 }, { 0x0BAE, 1, 0 }, { 0x0BB9, 0, 1 }, { 0x0BBE, 1, 0 }, { 0x0BC2, 0, 1 }, { 0x0BC6, 1, 0 }, { 0x0BC8, 0, 1 }, { 0x0BCA, 1, 0 }, { 0x0BCD, 0, 1 }, { 0x0BD0, 1, 1 }, { 0x0BD7, 1, 1 }, { 0x0BE6, 1, 0 }, { 0x0BFA, 0, 1 } }; static const uc_interval_t script_telugu_intervals[] = { { 0x0C00, 1, 0 }, { 0x0C03, 0, 1 }, { 0x0C05, 1, 0 }, { 0x0C0C, 0, 1 }, { 0x0C0E, 1, 0 }, { 0x0C10, 0, 1 }, { 0x0C12, 1, 0 }, { 0x0C28, 0, 1 }, { 0x0C2A, 1, 0 }, { 0x0C39, 0, 1 }, { 0x0C3D, 1, 0 }, { 0x0C44, 0, 1 }, { 0x0C46, 1, 0 }, { 0x0C48, 0, 1 }, { 0x0C4A, 1, 0 }, { 0x0C4D, 0, 1 }, { 0x0C55, 1, 0 }, { 0x0C56, 0, 1 }, { 0x0C58, 1, 0 }, { 0x0C5A, 0, 1 }, { 0x0C60, 1, 0 }, { 0x0C63, 0, 1 }, { 0x0C66, 1, 0 }, { 0x0C6F, 0, 1 }, { 0x0C78, 1, 0 }, { 0x0C7F, 0, 1 } }; static const uc_interval_t script_kannada_intervals[] = { { 0x0C80, 1, 0 }, { 0x0C83, 0, 1 }, { 0x0C85, 1, 0 }, { 0x0C8C, 0, 1 }, { 0x0C8E, 1, 0 }, { 0x0C90, 0, 1 }, { 0x0C92, 1, 0 }, { 0x0CA8, 0, 1 }, { 0x0CAA, 1, 0 }, { 0x0CB3, 0, 1 }, { 0x0CB5, 1, 0 }, { 0x0CB9, 0, 1 }, { 0x0CBC, 1, 0 }, { 0x0CC4, 0, 1 }, { 0x0CC6, 1, 0 }, { 0x0CC8, 0, 1 }, { 0x0CCA, 1, 0 }, { 0x0CCD, 0, 1 }, { 0x0CD5, 1, 0 }, { 0x0CD6, 0, 1 }, { 0x0CDE, 1, 1 }, { 0x0CE0, 1, 0 }, { 0x0CE3, 0, 1 }, { 0x0CE6, 1, 0 }, { 0x0CEF, 0, 1 }, { 0x0CF1, 1, 0 }, { 0x0CF2, 0, 1 } }; static const uc_interval_t script_malayalam_intervals[] = { { 0x0D01, 1, 0 }, { 0x0D03, 0, 1 }, { 0x0D05, 1, 0 }, { 0x0D0C, 0, 1 }, { 0x0D0E, 1, 0 }, { 0x0D10, 0, 1 }, { 0x0D12, 1, 0 }, { 0x0D3A, 0, 1 }, { 0x0D3D, 1, 0 }, { 0x0D44, 0, 1 }, { 0x0D46, 1, 0 }, { 0x0D48, 0, 1 }, { 0x0D4A, 1, 0 }, { 0x0D4F, 0, 1 }, { 0x0D54, 1, 0 }, { 0x0D63, 0, 1 }, { 0x0D66, 1, 0 }, { 0x0D7F, 0, 1 } }; static const uc_interval_t script_sinhala_intervals[] = { { 0x0D82, 1, 0 }, { 0x0D83, 0, 1 }, { 0x0D85, 1, 0 }, { 0x0D96, 0, 1 }, { 0x0D9A, 1, 0 }, { 0x0DB1, 0, 1 }, { 0x0DB3, 1, 0 }, { 0x0DBB, 0, 1 }, { 0x0DBD, 1, 1 }, { 0x0DC0, 1, 0 }, { 0x0DC6, 0, 1 }, { 0x0DCA, 1, 1 }, { 0x0DCF, 1, 0 }, { 0x0DD4, 0, 1 }, { 0x0DD6, 1, 1 }, { 0x0DD8, 1, 0 }, { 0x0DDF, 0, 1 }, { 0x0DE6, 1, 0 }, { 0x0DEF, 0, 1 }, { 0x0DF2, 1, 0 }, { 0x0DF4, 0, 1 }, { 0x111E1, 1, 0 }, { 0x111F4, 0, 1 } }; static const uc_interval_t script_thai_intervals[] = { { 0x0E01, 1, 0 }, { 0x0E3A, 0, 1 }, { 0x0E40, 1, 0 }, { 0x0E5B, 0, 1 } }; static const uc_interval_t script_lao_intervals[] = { { 0x0E81, 1, 0 }, { 0x0E82, 0, 1 }, { 0x0E84, 1, 1 }, { 0x0E87, 1, 0 }, { 0x0E88, 0, 1 }, { 0x0E8A, 1, 1 }, { 0x0E8D, 1, 1 }, { 0x0E94, 1, 0 }, { 0x0E97, 0, 1 }, { 0x0E99, 1, 0 }, { 0x0E9F, 0, 1 }, { 0x0EA1, 1, 0 }, { 0x0EA3, 0, 1 }, { 0x0EA5, 1, 1 }, { 0x0EA7, 1, 1 }, { 0x0EAA, 1, 0 }, { 0x0EAB, 0, 1 }, { 0x0EAD, 1, 0 }, { 0x0EB9, 0, 1 }, { 0x0EBB, 1, 0 }, { 0x0EBD, 0, 1 }, { 0x0EC0, 1, 0 }, { 0x0EC4, 0, 1 }, { 0x0EC6, 1, 1 }, { 0x0EC8, 1, 0 }, { 0x0ECD, 0, 1 }, { 0x0ED0, 1, 0 }, { 0x0ED9, 0, 1 }, { 0x0EDC, 1, 0 }, { 0x0EDF, 0, 1 } }; static const uc_interval_t script_tibetan_intervals[] = { { 0x0F00, 1, 0 }, { 0x0F47, 0, 1 }, { 0x0F49, 1, 0 }, { 0x0F6C, 0, 1 }, { 0x0F71, 1, 0 }, { 0x0F97, 0, 1 }, { 0x0F99, 1, 0 }, { 0x0FBC, 0, 1 }, { 0x0FBE, 1, 0 }, { 0x0FCC, 0, 1 }, { 0x0FCE, 1, 0 }, { 0x0FD4, 0, 1 }, { 0x0FD9, 1, 0 }, { 0x0FDA, 0, 1 } }; static const uc_interval_t script_myanmar_intervals[] = { { 0x1000, 1, 0 }, { 0x109F, 0, 1 }, { 0xA9E0, 1, 0 }, { 0xA9FE, 0, 1 }, { 0xAA60, 1, 0 }, { 0xAA7F, 0, 1 } }; static const uc_interval_t script_georgian_intervals[] = { { 0x10A0, 1, 0 }, { 0x10C5, 0, 1 }, { 0x10C7, 1, 1 }, { 0x10CD, 1, 1 }, { 0x10D0, 1, 0 }, { 0x10FA, 0, 1 }, { 0x10FC, 1, 0 }, { 0x10FF, 0, 1 }, { 0x2D00, 1, 0 }, { 0x2D25, 0, 1 }, { 0x2D27, 1, 1 }, { 0x2D2D, 1, 1 } }; static const uc_interval_t script_hangul_intervals[] = { { 0x1100, 1, 0 }, { 0x11FF, 0, 1 }, { 0x302E, 1, 0 }, { 0x302F, 0, 1 }, { 0x3131, 1, 0 }, { 0x318E, 0, 1 }, { 0x3200, 1, 0 }, { 0x321E, 0, 1 }, { 0x3260, 1, 0 }, { 0x327E, 0, 1 }, { 0xA960, 1, 0 }, { 0xA97C, 0, 1 }, { 0xAC00, 1, 0 }, { 0xD7A3, 0, 1 }, { 0xD7B0, 1, 0 }, { 0xD7C6, 0, 1 }, { 0xD7CB, 1, 0 }, { 0xD7FB, 0, 1 }, { 0xFFA0, 1, 0 }, { 0xFFBE, 0, 1 }, { 0xFFC2, 1, 0 }, { 0xFFC7, 0, 1 }, { 0xFFCA, 1, 0 }, { 0xFFCF, 0, 1 }, { 0xFFD2, 1, 0 }, { 0xFFD7, 0, 1 }, { 0xFFDA, 1, 0 }, { 0xFFDC, 0, 1 } }; static const uc_interval_t script_ethiopic_intervals[] = { { 0x1200, 1, 0 }, { 0x1248, 0, 1 }, { 0x124A, 1, 0 }, { 0x124D, 0, 1 }, { 0x1250, 1, 0 }, { 0x1256, 0, 1 }, { 0x1258, 1, 1 }, { 0x125A, 1, 0 }, { 0x125D, 0, 1 }, { 0x1260, 1, 0 }, { 0x1288, 0, 1 }, { 0x128A, 1, 0 }, { 0x128D, 0, 1 }, { 0x1290, 1, 0 }, { 0x12B0, 0, 1 }, { 0x12B2, 1, 0 }, { 0x12B5, 0, 1 }, { 0x12B8, 1, 0 }, { 0x12BE, 0, 1 }, { 0x12C0, 1, 1 }, { 0x12C2, 1, 0 }, { 0x12C5, 0, 1 }, { 0x12C8, 1, 0 }, { 0x12D6, 0, 1 }, { 0x12D8, 1, 0 }, { 0x1310, 0, 1 }, { 0x1312, 1, 0 }, { 0x1315, 0, 1 }, { 0x1318, 1, 0 }, { 0x135A, 0, 1 }, { 0x135D, 1, 0 }, { 0x137C, 0, 1 }, { 0x1380, 1, 0 }, { 0x1399, 0, 1 }, { 0x2D80, 1, 0 }, { 0x2D96, 0, 1 }, { 0x2DA0, 1, 0 }, { 0x2DA6, 0, 1 }, { 0x2DA8, 1, 0 }, { 0x2DAE, 0, 1 }, { 0x2DB0, 1, 0 }, { 0x2DB6, 0, 1 }, { 0x2DB8, 1, 0 }, { 0x2DBE, 0, 1 }, { 0x2DC0, 1, 0 }, { 0x2DC6, 0, 1 }, { 0x2DC8, 1, 0 }, { 0x2DCE, 0, 1 }, { 0x2DD0, 1, 0 }, { 0x2DD6, 0, 1 }, { 0x2DD8, 1, 0 }, { 0x2DDE, 0, 1 }, { 0xAB01, 1, 0 }, { 0xAB06, 0, 1 }, { 0xAB09, 1, 0 }, { 0xAB0E, 0, 1 }, { 0xAB11, 1, 0 }, { 0xAB16, 0, 1 }, { 0xAB20, 1, 0 }, { 0xAB26, 0, 1 }, { 0xAB28, 1, 0 }, { 0xAB2E, 0, 1 } }; static const uc_interval_t script_cherokee_intervals[] = { { 0x13A0, 1, 0 }, { 0x13F5, 0, 1 }, { 0x13F8, 1, 0 }, { 0x13FD, 0, 1 }, { 0xAB70, 1, 0 }, { 0xABBF, 0, 1 } }; static const uc_interval_t script_canadian_aboriginal_intervals[] = { { 0x1400, 1, 0 }, { 0x167F, 0, 1 }, { 0x18B0, 1, 0 }, { 0x18F5, 0, 1 } }; static const uc_interval_t script_ogham_intervals[] = { { 0x1680, 1, 0 }, { 0x169C, 0, 1 } }; static const uc_interval_t script_runic_intervals[] = { { 0x16A0, 1, 0 }, { 0x16EA, 0, 1 }, { 0x16EE, 1, 0 }, { 0x16F8, 0, 1 } }; static const uc_interval_t script_khmer_intervals[] = { { 0x1780, 1, 0 }, { 0x17DD, 0, 1 }, { 0x17E0, 1, 0 }, { 0x17E9, 0, 1 }, { 0x17F0, 1, 0 }, { 0x17F9, 0, 1 }, { 0x19E0, 1, 0 }, { 0x19FF, 0, 1 } }; static const uc_interval_t script_mongolian_intervals[] = { { 0x1800, 1, 0 }, { 0x1801, 0, 1 }, { 0x1804, 1, 1 }, { 0x1806, 1, 0 }, { 0x180E, 0, 1 }, { 0x1810, 1, 0 }, { 0x1819, 0, 1 }, { 0x1820, 1, 0 }, { 0x1877, 0, 1 }, { 0x1880, 1, 0 }, { 0x18AA, 0, 1 }, { 0x11660, 1, 0 }, { 0x1166C, 0, 1 } }; static const uc_interval_t script_hiragana_intervals[] = { { 0x3041, 1, 0 }, { 0x3096, 0, 1 }, { 0x309D, 1, 0 }, { 0x309F, 0, 1 }, { 0x1B001, 1, 1 }, { 0x1F200, 1, 1 } }; static const uc_interval_t script_katakana_intervals[] = { { 0x30A1, 1, 0 }, { 0x30FA, 0, 1 }, { 0x30FD, 1, 0 }, { 0x30FF, 0, 1 }, { 0x31F0, 1, 0 }, { 0x31FF, 0, 1 }, { 0x32D0, 1, 0 }, { 0x32FE, 0, 1 }, { 0x3300, 1, 0 }, { 0x3357, 0, 1 }, { 0xFF66, 1, 0 }, { 0xFF6F, 0, 1 }, { 0xFF71, 1, 0 }, { 0xFF9D, 0, 1 }, { 0x1B000, 1, 1 } }; static const uc_interval_t script_bopomofo_intervals[] = { { 0x02EA, 1, 0 }, { 0x02EB, 0, 1 }, { 0x3105, 1, 0 }, { 0x312D, 0, 1 }, { 0x31A0, 1, 0 }, { 0x31BA, 0, 1 } }; static const uc_interval_t script_han_intervals[] = { { 0x2E80, 1, 0 }, { 0x2E99, 0, 1 }, { 0x2E9B, 1, 0 }, { 0x2EF3, 0, 1 }, { 0x2F00, 1, 0 }, { 0x2FD5, 0, 1 }, { 0x3005, 1, 1 }, { 0x3007, 1, 1 }, { 0x3021, 1, 0 }, { 0x3029, 0, 1 }, { 0x3038, 1, 0 }, { 0x303B, 0, 1 }, { 0x3400, 1, 0 }, { 0x4DB5, 0, 1 }, { 0x4E00, 1, 0 }, { 0x9FD5, 0, 1 }, { 0xF900, 1, 0 }, { 0xFA6D, 0, 1 }, { 0xFA70, 1, 0 }, { 0xFAD9, 0, 1 }, { 0x20000, 1, 0 }, { 0x2A6D6, 0, 1 }, { 0x2A700, 1, 0 }, { 0x2B734, 0, 1 }, { 0x2B740, 1, 0 }, { 0x2B81D, 0, 1 }, { 0x2B820, 1, 0 }, { 0x2CEA1, 0, 1 }, { 0x2F800, 1, 0 }, { 0x2FA1D, 0, 1 } }; static const uc_interval_t script_yi_intervals[] = { { 0xA000, 1, 0 }, { 0xA48C, 0, 1 }, { 0xA490, 1, 0 }, { 0xA4C6, 0, 1 } }; static const uc_interval_t script_old_italic_intervals[] = { { 0x10300, 1, 0 }, { 0x10323, 0, 1 } }; static const uc_interval_t script_gothic_intervals[] = { { 0x10330, 1, 0 }, { 0x1034A, 0, 1 } }; static const uc_interval_t script_deseret_intervals[] = { { 0x10400, 1, 0 }, { 0x1044F, 0, 1 } }; static const uc_interval_t script_inherited_intervals[] = { { 0x0300, 1, 0 }, { 0x036F, 0, 1 }, { 0x0485, 1, 0 }, { 0x0486, 0, 1 }, { 0x064B, 1, 0 }, { 0x0655, 0, 1 }, { 0x0670, 1, 1 }, { 0x0951, 1, 0 }, { 0x0952, 0, 1 }, { 0x1AB0, 1, 0 }, { 0x1ABE, 0, 1 }, { 0x1CD0, 1, 0 }, { 0x1CD2, 0, 1 }, { 0x1CD4, 1, 0 }, { 0x1CE0, 0, 1 }, { 0x1CE2, 1, 0 }, { 0x1CE8, 0, 1 }, { 0x1CED, 1, 1 }, { 0x1CF4, 1, 1 }, { 0x1CF8, 1, 0 }, { 0x1CF9, 0, 1 }, { 0x1DC0, 1, 0 }, { 0x1DF5, 0, 1 }, { 0x1DFB, 1, 0 }, { 0x1DFF, 0, 1 }, { 0x200C, 1, 0 }, { 0x200D, 0, 1 }, { 0x20D0, 1, 0 }, { 0x20F0, 0, 1 }, { 0x302A, 1, 0 }, { 0x302D, 0, 1 }, { 0x3099, 1, 0 }, { 0x309A, 0, 1 }, { 0xFE00, 1, 0 }, { 0xFE0F, 0, 1 }, { 0xFE20, 1, 0 }, { 0xFE2D, 0, 1 }, { 0x101FD, 1, 1 }, { 0x102E0, 1, 1 }, { 0x1D167, 1, 0 }, { 0x1D169, 0, 1 }, { 0x1D17B, 1, 0 }, { 0x1D182, 0, 1 }, { 0x1D185, 1, 0 }, { 0x1D18B, 0, 1 }, { 0x1D1AA, 1, 0 }, { 0x1D1AD, 0, 1 }, { 0xE0100, 1, 0 }, { 0xE01EF, 0, 1 } }; static const uc_interval_t script_tagalog_intervals[] = { { 0x1700, 1, 0 }, { 0x170C, 0, 1 }, { 0x170E, 1, 0 }, { 0x1714, 0, 1 } }; static const uc_interval_t script_hanunoo_intervals[] = { { 0x1720, 1, 0 }, { 0x1734, 0, 1 } }; static const uc_interval_t script_buhid_intervals[] = { { 0x1740, 1, 0 }, { 0x1753, 0, 1 } }; static const uc_interval_t script_tagbanwa_intervals[] = { { 0x1760, 1, 0 }, { 0x176C, 0, 1 }, { 0x176E, 1, 0 }, { 0x1770, 0, 1 }, { 0x1772, 1, 0 }, { 0x1773, 0, 1 } }; static const uc_interval_t script_limbu_intervals[] = { { 0x1900, 1, 0 }, { 0x191E, 0, 1 }, { 0x1920, 1, 0 }, { 0x192B, 0, 1 }, { 0x1930, 1, 0 }, { 0x193B, 0, 1 }, { 0x1940, 1, 1 }, { 0x1944, 1, 0 }, { 0x194F, 0, 1 } }; static const uc_interval_t script_tai_le_intervals[] = { { 0x1950, 1, 0 }, { 0x196D, 0, 1 }, { 0x1970, 1, 0 }, { 0x1974, 0, 1 } }; static const uc_interval_t script_linear_b_intervals[] = { { 0x10000, 1, 0 }, { 0x1000B, 0, 1 }, { 0x1000D, 1, 0 }, { 0x10026, 0, 1 }, { 0x10028, 1, 0 }, { 0x1003A, 0, 1 }, { 0x1003C, 1, 0 }, { 0x1003D, 0, 1 }, { 0x1003F, 1, 0 }, { 0x1004D, 0, 1 }, { 0x10050, 1, 0 }, { 0x1005D, 0, 1 }, { 0x10080, 1, 0 }, { 0x100FA, 0, 1 } }; static const uc_interval_t script_ugaritic_intervals[] = { { 0x10380, 1, 0 }, { 0x1039D, 0, 1 }, { 0x1039F, 1, 1 } }; static const uc_interval_t script_shavian_intervals[] = { { 0x10450, 1, 0 }, { 0x1047F, 0, 1 } }; static const uc_interval_t script_osmanya_intervals[] = { { 0x10480, 1, 0 }, { 0x1049D, 0, 1 }, { 0x104A0, 1, 0 }, { 0x104A9, 0, 1 } }; static const uc_interval_t script_cypriot_intervals[] = { { 0x10800, 1, 0 }, { 0x10805, 0, 1 }, { 0x10808, 1, 1 }, { 0x1080A, 1, 0 }, { 0x10835, 0, 1 }, { 0x10837, 1, 0 }, { 0x10838, 0, 1 }, { 0x1083C, 1, 1 }, { 0x1083F, 1, 1 } }; static const uc_interval_t script_braille_intervals[] = { { 0x2800, 1, 0 }, { 0x28FF, 0, 1 } }; static const uc_interval_t script_buginese_intervals[] = { { 0x1A00, 1, 0 }, { 0x1A1B, 0, 1 }, { 0x1A1E, 1, 0 }, { 0x1A1F, 0, 1 } }; static const uc_interval_t script_coptic_intervals[] = { { 0x03E2, 1, 0 }, { 0x03EF, 0, 1 }, { 0x2C80, 1, 0 }, { 0x2CF3, 0, 1 }, { 0x2CF9, 1, 0 }, { 0x2CFF, 0, 1 } }; static const uc_interval_t script_new_tai_lue_intervals[] = { { 0x1980, 1, 0 }, { 0x19AB, 0, 1 }, { 0x19B0, 1, 0 }, { 0x19C9, 0, 1 }, { 0x19D0, 1, 0 }, { 0x19DA, 0, 1 }, { 0x19DE, 1, 0 }, { 0x19DF, 0, 1 } }; static const uc_interval_t script_glagolitic_intervals[] = { { 0x2C00, 1, 0 }, { 0x2C2E, 0, 1 }, { 0x2C30, 1, 0 }, { 0x2C5E, 0, 1 }, { 0x1E000, 1, 0 }, { 0x1E006, 0, 1 }, { 0x1E008, 1, 0 }, { 0x1E018, 0, 1 }, { 0x1E01B, 1, 0 }, { 0x1E021, 0, 1 }, { 0x1E023, 1, 0 }, { 0x1E024, 0, 1 }, { 0x1E026, 1, 0 }, { 0x1E02A, 0, 1 } }; static const uc_interval_t script_tifinagh_intervals[] = { { 0x2D30, 1, 0 }, { 0x2D67, 0, 1 }, { 0x2D6F, 1, 0 }, { 0x2D70, 0, 1 }, { 0x2D7F, 1, 1 } }; static const uc_interval_t script_syloti_nagri_intervals[] = { { 0xA800, 1, 0 }, { 0xA82B, 0, 1 } }; static const uc_interval_t script_old_persian_intervals[] = { { 0x103A0, 1, 0 }, { 0x103C3, 0, 1 }, { 0x103C8, 1, 0 }, { 0x103D5, 0, 1 } }; static const uc_interval_t script_kharoshthi_intervals[] = { { 0x10A00, 1, 0 }, { 0x10A03, 0, 1 }, { 0x10A05, 1, 0 }, { 0x10A06, 0, 1 }, { 0x10A0C, 1, 0 }, { 0x10A13, 0, 1 }, { 0x10A15, 1, 0 }, { 0x10A17, 0, 1 }, { 0x10A19, 1, 0 }, { 0x10A33, 0, 1 }, { 0x10A38, 1, 0 }, { 0x10A3A, 0, 1 }, { 0x10A3F, 1, 0 }, { 0x10A47, 0, 1 }, { 0x10A50, 1, 0 }, { 0x10A58, 0, 1 } }; static const uc_interval_t script_balinese_intervals[] = { { 0x1B00, 1, 0 }, { 0x1B4B, 0, 1 }, { 0x1B50, 1, 0 }, { 0x1B7C, 0, 1 } }; static const uc_interval_t script_cuneiform_intervals[] = { { 0x12000, 1, 0 }, { 0x12399, 0, 1 }, { 0x12400, 1, 0 }, { 0x1246E, 0, 1 }, { 0x12470, 1, 0 }, { 0x12474, 0, 1 }, { 0x12480, 1, 0 }, { 0x12543, 0, 1 } }; static const uc_interval_t script_phoenician_intervals[] = { { 0x10900, 1, 0 }, { 0x1091B, 0, 1 }, { 0x1091F, 1, 1 } }; static const uc_interval_t script_phags_pa_intervals[] = { { 0xA840, 1, 0 }, { 0xA877, 0, 1 } }; static const uc_interval_t script_nko_intervals[] = { { 0x07C0, 1, 0 }, { 0x07FA, 0, 1 } }; static const uc_interval_t script_sundanese_intervals[] = { { 0x1B80, 1, 0 }, { 0x1BBF, 0, 1 }, { 0x1CC0, 1, 0 }, { 0x1CC7, 0, 1 } }; static const uc_interval_t script_lepcha_intervals[] = { { 0x1C00, 1, 0 }, { 0x1C37, 0, 1 }, { 0x1C3B, 1, 0 }, { 0x1C49, 0, 1 }, { 0x1C4D, 1, 0 }, { 0x1C4F, 0, 1 } }; static const uc_interval_t script_ol_chiki_intervals[] = { { 0x1C50, 1, 0 }, { 0x1C7F, 0, 1 } }; static const uc_interval_t script_vai_intervals[] = { { 0xA500, 1, 0 }, { 0xA62B, 0, 1 } }; static const uc_interval_t script_saurashtra_intervals[] = { { 0xA880, 1, 0 }, { 0xA8C5, 0, 1 }, { 0xA8CE, 1, 0 }, { 0xA8D9, 0, 1 } }; static const uc_interval_t script_kayah_li_intervals[] = { { 0xA900, 1, 0 }, { 0xA92D, 0, 1 }, { 0xA92F, 1, 1 } }; static const uc_interval_t script_rejang_intervals[] = { { 0xA930, 1, 0 }, { 0xA953, 0, 1 }, { 0xA95F, 1, 1 } }; static const uc_interval_t script_lycian_intervals[] = { { 0x10280, 1, 0 }, { 0x1029C, 0, 1 } }; static const uc_interval_t script_carian_intervals[] = { { 0x102A0, 1, 0 }, { 0x102D0, 0, 1 } }; static const uc_interval_t script_lydian_intervals[] = { { 0x10920, 1, 0 }, { 0x10939, 0, 1 }, { 0x1093F, 1, 1 } }; static const uc_interval_t script_cham_intervals[] = { { 0xAA00, 1, 0 }, { 0xAA36, 0, 1 }, { 0xAA40, 1, 0 }, { 0xAA4D, 0, 1 }, { 0xAA50, 1, 0 }, { 0xAA59, 0, 1 }, { 0xAA5C, 1, 0 }, { 0xAA5F, 0, 1 } }; static const uc_interval_t script_tai_tham_intervals[] = { { 0x1A20, 1, 0 }, { 0x1A5E, 0, 1 }, { 0x1A60, 1, 0 }, { 0x1A7C, 0, 1 }, { 0x1A7F, 1, 0 }, { 0x1A89, 0, 1 }, { 0x1A90, 1, 0 }, { 0x1A99, 0, 1 }, { 0x1AA0, 1, 0 }, { 0x1AAD, 0, 1 } }; static const uc_interval_t script_tai_viet_intervals[] = { { 0xAA80, 1, 0 }, { 0xAAC2, 0, 1 }, { 0xAADB, 1, 0 }, { 0xAADF, 0, 1 } }; static const uc_interval_t script_avestan_intervals[] = { { 0x10B00, 1, 0 }, { 0x10B35, 0, 1 }, { 0x10B39, 1, 0 }, { 0x10B3F, 0, 1 } }; static const uc_interval_t script_egyptian_hieroglyphs_intervals[] = { { 0x13000, 1, 0 }, { 0x1342E, 0, 1 } }; static const uc_interval_t script_samaritan_intervals[] = { { 0x0800, 1, 0 }, { 0x082D, 0, 1 }, { 0x0830, 1, 0 }, { 0x083E, 0, 1 } }; static const uc_interval_t script_lisu_intervals[] = { { 0xA4D0, 1, 0 }, { 0xA4FF, 0, 1 } }; static const uc_interval_t script_bamum_intervals[] = { { 0xA6A0, 1, 0 }, { 0xA6F7, 0, 1 }, { 0x16800, 1, 0 }, { 0x16A38, 0, 1 } }; static const uc_interval_t script_javanese_intervals[] = { { 0xA980, 1, 0 }, { 0xA9CD, 0, 1 }, { 0xA9D0, 1, 0 }, { 0xA9D9, 0, 1 }, { 0xA9DE, 1, 0 }, { 0xA9DF, 0, 1 } }; static const uc_interval_t script_meetei_mayek_intervals[] = { { 0xAAE0, 1, 0 }, { 0xAAF6, 0, 1 }, { 0xABC0, 1, 0 }, { 0xABED, 0, 1 }, { 0xABF0, 1, 0 }, { 0xABF9, 0, 1 } }; static const uc_interval_t script_imperial_aramaic_intervals[] = { { 0x10840, 1, 0 }, { 0x10855, 0, 1 }, { 0x10857, 1, 0 }, { 0x1085F, 0, 1 } }; static const uc_interval_t script_old_south_arabian_intervals[] = { { 0x10A60, 1, 0 }, { 0x10A7F, 0, 1 } }; static const uc_interval_t script_inscriptional_parthian_intervals[] = { { 0x10B40, 1, 0 }, { 0x10B55, 0, 1 }, { 0x10B58, 1, 0 }, { 0x10B5F, 0, 1 } }; static const uc_interval_t script_inscriptional_pahlavi_intervals[] = { { 0x10B60, 1, 0 }, { 0x10B72, 0, 1 }, { 0x10B78, 1, 0 }, { 0x10B7F, 0, 1 } }; static const uc_interval_t script_old_turkic_intervals[] = { { 0x10C00, 1, 0 }, { 0x10C48, 0, 1 } }; static const uc_interval_t script_kaithi_intervals[] = { { 0x11080, 1, 0 }, { 0x110C1, 0, 1 } }; static const uc_interval_t script_batak_intervals[] = { { 0x1BC0, 1, 0 }, { 0x1BF3, 0, 1 }, { 0x1BFC, 1, 0 }, { 0x1BFF, 0, 1 } }; static const uc_interval_t script_brahmi_intervals[] = { { 0x11000, 1, 0 }, { 0x1104D, 0, 1 }, { 0x11052, 1, 0 }, { 0x1106F, 0, 1 }, { 0x1107F, 1, 1 } }; static const uc_interval_t script_mandaic_intervals[] = { { 0x0840, 1, 0 }, { 0x085B, 0, 1 }, { 0x085E, 1, 1 } }; static const uc_interval_t script_chakma_intervals[] = { { 0x11100, 1, 0 }, { 0x11134, 0, 1 }, { 0x11136, 1, 0 }, { 0x11143, 0, 1 } }; static const uc_interval_t script_meroitic_cursive_intervals[] = { { 0x109A0, 1, 0 }, { 0x109B7, 0, 1 }, { 0x109BC, 1, 0 }, { 0x109CF, 0, 1 }, { 0x109D2, 1, 0 }, { 0x109FF, 0, 1 } }; static const uc_interval_t script_meroitic_hieroglyphs_intervals[] = { { 0x10980, 1, 0 }, { 0x1099F, 0, 1 } }; static const uc_interval_t script_miao_intervals[] = { { 0x16F00, 1, 0 }, { 0x16F44, 0, 1 }, { 0x16F50, 1, 0 }, { 0x16F7E, 0, 1 }, { 0x16F8F, 1, 0 }, { 0x16F9F, 0, 1 } }; static const uc_interval_t script_sharada_intervals[] = { { 0x11180, 1, 0 }, { 0x111CD, 0, 1 }, { 0x111D0, 1, 0 }, { 0x111DF, 0, 1 } }; static const uc_interval_t script_sora_sompeng_intervals[] = { { 0x110D0, 1, 0 }, { 0x110E8, 0, 1 }, { 0x110F0, 1, 0 }, { 0x110F9, 0, 1 } }; static const uc_interval_t script_takri_intervals[] = { { 0x11680, 1, 0 }, { 0x116B7, 0, 1 }, { 0x116C0, 1, 0 }, { 0x116C9, 0, 1 } }; static const uc_interval_t script_caucasian_albanian_intervals[] = { { 0x10530, 1, 0 }, { 0x10563, 0, 1 }, { 0x1056F, 1, 1 } }; static const uc_interval_t script_bassa_vah_intervals[] = { { 0x16AD0, 1, 0 }, { 0x16AED, 0, 1 }, { 0x16AF0, 1, 0 }, { 0x16AF5, 0, 1 } }; static const uc_interval_t script_duployan_intervals[] = { { 0x1BC00, 1, 0 }, { 0x1BC6A, 0, 1 }, { 0x1BC70, 1, 0 }, { 0x1BC7C, 0, 1 }, { 0x1BC80, 1, 0 }, { 0x1BC88, 0, 1 }, { 0x1BC90, 1, 0 }, { 0x1BC99, 0, 1 }, { 0x1BC9C, 1, 0 }, { 0x1BC9F, 0, 1 } }; static const uc_interval_t script_elbasan_intervals[] = { { 0x10500, 1, 0 }, { 0x10527, 0, 1 } }; static const uc_interval_t script_grantha_intervals[] = { { 0x11300, 1, 0 }, { 0x11303, 0, 1 }, { 0x11305, 1, 0 }, { 0x1130C, 0, 1 }, { 0x1130F, 1, 0 }, { 0x11310, 0, 1 }, { 0x11313, 1, 0 }, { 0x11328, 0, 1 }, { 0x1132A, 1, 0 }, { 0x11330, 0, 1 }, { 0x11332, 1, 0 }, { 0x11333, 0, 1 }, { 0x11335, 1, 0 }, { 0x11339, 0, 1 }, { 0x1133C, 1, 0 }, { 0x11344, 0, 1 }, { 0x11347, 1, 0 }, { 0x11348, 0, 1 }, { 0x1134B, 1, 0 }, { 0x1134D, 0, 1 }, { 0x11350, 1, 1 }, { 0x11357, 1, 1 }, { 0x1135D, 1, 0 }, { 0x11363, 0, 1 }, { 0x11366, 1, 0 }, { 0x1136C, 0, 1 }, { 0x11370, 1, 0 }, { 0x11374, 0, 1 } }; static const uc_interval_t script_pahawh_hmong_intervals[] = { { 0x16B00, 1, 0 }, { 0x16B45, 0, 1 }, { 0x16B50, 1, 0 }, { 0x16B59, 0, 1 }, { 0x16B5B, 1, 0 }, { 0x16B61, 0, 1 }, { 0x16B63, 1, 0 }, { 0x16B77, 0, 1 }, { 0x16B7D, 1, 0 }, { 0x16B8F, 0, 1 } }; static const uc_interval_t script_khojki_intervals[] = { { 0x11200, 1, 0 }, { 0x11211, 0, 1 }, { 0x11213, 1, 0 }, { 0x1123E, 0, 1 } }; static const uc_interval_t script_linear_a_intervals[] = { { 0x10600, 1, 0 }, { 0x10736, 0, 1 }, { 0x10740, 1, 0 }, { 0x10755, 0, 1 }, { 0x10760, 1, 0 }, { 0x10767, 0, 1 } }; static const uc_interval_t script_mahajani_intervals[] = { { 0x11150, 1, 0 }, { 0x11176, 0, 1 } }; static const uc_interval_t script_manichaean_intervals[] = { { 0x10AC0, 1, 0 }, { 0x10AE6, 0, 1 }, { 0x10AEB, 1, 0 }, { 0x10AF6, 0, 1 } }; static const uc_interval_t script_mende_kikakui_intervals[] = { { 0x1E800, 1, 0 }, { 0x1E8C4, 0, 1 }, { 0x1E8C7, 1, 0 }, { 0x1E8D6, 0, 1 } }; static const uc_interval_t script_modi_intervals[] = { { 0x11600, 1, 0 }, { 0x11644, 0, 1 }, { 0x11650, 1, 0 }, { 0x11659, 0, 1 } }; static const uc_interval_t script_mro_intervals[] = { { 0x16A40, 1, 0 }, { 0x16A5E, 0, 1 }, { 0x16A60, 1, 0 }, { 0x16A69, 0, 1 }, { 0x16A6E, 1, 0 }, { 0x16A6F, 0, 1 } }; static const uc_interval_t script_old_north_arabian_intervals[] = { { 0x10A80, 1, 0 }, { 0x10A9F, 0, 1 } }; static const uc_interval_t script_nabataean_intervals[] = { { 0x10880, 1, 0 }, { 0x1089E, 0, 1 }, { 0x108A7, 1, 0 }, { 0x108AF, 0, 1 } }; static const uc_interval_t script_palmyrene_intervals[] = { { 0x10860, 1, 0 }, { 0x1087F, 0, 1 } }; static const uc_interval_t script_pau_cin_hau_intervals[] = { { 0x11AC0, 1, 0 }, { 0x11AF8, 0, 1 } }; static const uc_interval_t script_old_permic_intervals[] = { { 0x10350, 1, 0 }, { 0x1037A, 0, 1 } }; static const uc_interval_t script_psalter_pahlavi_intervals[] = { { 0x10B80, 1, 0 }, { 0x10B91, 0, 1 }, { 0x10B99, 1, 0 }, { 0x10B9C, 0, 1 }, { 0x10BA9, 1, 0 }, { 0x10BAF, 0, 1 } }; static const uc_interval_t script_siddham_intervals[] = { { 0x11580, 1, 0 }, { 0x115B5, 0, 1 }, { 0x115B8, 1, 0 }, { 0x115DD, 0, 1 } }; static const uc_interval_t script_khudawadi_intervals[] = { { 0x112B0, 1, 0 }, { 0x112EA, 0, 1 }, { 0x112F0, 1, 0 }, { 0x112F9, 0, 1 } }; static const uc_interval_t script_tirhuta_intervals[] = { { 0x11480, 1, 0 }, { 0x114C7, 0, 1 }, { 0x114D0, 1, 0 }, { 0x114D9, 0, 1 } }; static const uc_interval_t script_warang_citi_intervals[] = { { 0x118A0, 1, 0 }, { 0x118F2, 0, 1 }, { 0x118FF, 1, 1 } }; static const uc_interval_t script_ahom_intervals[] = { { 0x11700, 1, 0 }, { 0x11719, 0, 1 }, { 0x1171D, 1, 0 }, { 0x1172B, 0, 1 }, { 0x11730, 1, 0 }, { 0x1173F, 0, 1 } }; static const uc_interval_t script_anatolian_hieroglyphs_intervals[] = { { 0x14400, 1, 0 }, { 0x14646, 0, 1 } }; static const uc_interval_t script_hatran_intervals[] = { { 0x108E0, 1, 0 }, { 0x108F2, 0, 1 }, { 0x108F4, 1, 0 }, { 0x108F5, 0, 1 }, { 0x108FB, 1, 0 }, { 0x108FF, 0, 1 } }; static const uc_interval_t script_multani_intervals[] = { { 0x11280, 1, 0 }, { 0x11286, 0, 1 }, { 0x11288, 1, 1 }, { 0x1128A, 1, 0 }, { 0x1128D, 0, 1 }, { 0x1128F, 1, 0 }, { 0x1129D, 0, 1 }, { 0x1129F, 1, 0 }, { 0x112A9, 0, 1 } }; static const uc_interval_t script_old_hungarian_intervals[] = { { 0x10C80, 1, 0 }, { 0x10CB2, 0, 1 }, { 0x10CC0, 1, 0 }, { 0x10CF2, 0, 1 }, { 0x10CFA, 1, 0 }, { 0x10CFF, 0, 1 } }; static const uc_interval_t script_signwriting_intervals[] = { { 0x1D800, 1, 0 }, { 0x1DA8B, 0, 1 }, { 0x1DA9B, 1, 0 }, { 0x1DA9F, 0, 1 }, { 0x1DAA1, 1, 0 }, { 0x1DAAF, 0, 1 } }; static const uc_interval_t script_adlam_intervals[] = { { 0x1E900, 1, 0 }, { 0x1E94A, 0, 1 }, { 0x1E950, 1, 0 }, { 0x1E959, 0, 1 }, { 0x1E95E, 1, 0 }, { 0x1E95F, 0, 1 } }; static const uc_interval_t script_bhaiksuki_intervals[] = { { 0x11C00, 1, 0 }, { 0x11C08, 0, 1 }, { 0x11C0A, 1, 0 }, { 0x11C36, 0, 1 }, { 0x11C38, 1, 0 }, { 0x11C45, 0, 1 }, { 0x11C50, 1, 0 }, { 0x11C6C, 0, 1 } }; static const uc_interval_t script_marchen_intervals[] = { { 0x11C70, 1, 0 }, { 0x11C8F, 0, 1 }, { 0x11C92, 1, 0 }, { 0x11CA7, 0, 1 }, { 0x11CA9, 1, 0 }, { 0x11CB6, 0, 1 } }; static const uc_interval_t script_newa_intervals[] = { { 0x11400, 1, 0 }, { 0x11459, 0, 1 }, { 0x1145B, 1, 1 }, { 0x1145D, 1, 1 } }; static const uc_interval_t script_osage_intervals[] = { { 0x104B0, 1, 0 }, { 0x104D3, 0, 1 }, { 0x104D8, 1, 0 }, { 0x104FB, 0, 1 } }; static const uc_interval_t script_tangut_intervals[] = { { 0x16FE0, 1, 1 }, { 0x17000, 1, 0 }, { 0x187EC, 0, 1 }, { 0x18800, 1, 0 }, { 0x18AF2, 0, 1 } }; static const uc_script_t scripts[137] = { { sizeof (script_common_intervals) / sizeof (uc_interval_t), script_common_intervals, "Common" }, { sizeof (script_latin_intervals) / sizeof (uc_interval_t), script_latin_intervals, "Latin" }, { sizeof (script_greek_intervals) / sizeof (uc_interval_t), script_greek_intervals, "Greek" }, { sizeof (script_cyrillic_intervals) / sizeof (uc_interval_t), script_cyrillic_intervals, "Cyrillic" }, { sizeof (script_armenian_intervals) / sizeof (uc_interval_t), script_armenian_intervals, "Armenian" }, { sizeof (script_hebrew_intervals) / sizeof (uc_interval_t), script_hebrew_intervals, "Hebrew" }, { sizeof (script_arabic_intervals) / sizeof (uc_interval_t), script_arabic_intervals, "Arabic" }, { sizeof (script_syriac_intervals) / sizeof (uc_interval_t), script_syriac_intervals, "Syriac" }, { sizeof (script_thaana_intervals) / sizeof (uc_interval_t), script_thaana_intervals, "Thaana" }, { sizeof (script_devanagari_intervals) / sizeof (uc_interval_t), script_devanagari_intervals, "Devanagari" }, { sizeof (script_bengali_intervals) / sizeof (uc_interval_t), script_bengali_intervals, "Bengali" }, { sizeof (script_gurmukhi_intervals) / sizeof (uc_interval_t), script_gurmukhi_intervals, "Gurmukhi" }, { sizeof (script_gujarati_intervals) / sizeof (uc_interval_t), script_gujarati_intervals, "Gujarati" }, { sizeof (script_oriya_intervals) / sizeof (uc_interval_t), script_oriya_intervals, "Oriya" }, { sizeof (script_tamil_intervals) / sizeof (uc_interval_t), script_tamil_intervals, "Tamil" }, { sizeof (script_telugu_intervals) / sizeof (uc_interval_t), script_telugu_intervals, "Telugu" }, { sizeof (script_kannada_intervals) / sizeof (uc_interval_t), script_kannada_intervals, "Kannada" }, { sizeof (script_malayalam_intervals) / sizeof (uc_interval_t), script_malayalam_intervals, "Malayalam" }, { sizeof (script_sinhala_intervals) / sizeof (uc_interval_t), script_sinhala_intervals, "Sinhala" }, { sizeof (script_thai_intervals) / sizeof (uc_interval_t), script_thai_intervals, "Thai" }, { sizeof (script_lao_intervals) / sizeof (uc_interval_t), script_lao_intervals, "Lao" }, { sizeof (script_tibetan_intervals) / sizeof (uc_interval_t), script_tibetan_intervals, "Tibetan" }, { sizeof (script_myanmar_intervals) / sizeof (uc_interval_t), script_myanmar_intervals, "Myanmar" }, { sizeof (script_georgian_intervals) / sizeof (uc_interval_t), script_georgian_intervals, "Georgian" }, { sizeof (script_hangul_intervals) / sizeof (uc_interval_t), script_hangul_intervals, "Hangul" }, { sizeof (script_ethiopic_intervals) / sizeof (uc_interval_t), script_ethiopic_intervals, "Ethiopic" }, { sizeof (script_cherokee_intervals) / sizeof (uc_interval_t), script_cherokee_intervals, "Cherokee" }, { sizeof (script_canadian_aboriginal_intervals) / sizeof (uc_interval_t), script_canadian_aboriginal_intervals, "Canadian_Aboriginal" }, { sizeof (script_ogham_intervals) / sizeof (uc_interval_t), script_ogham_intervals, "Ogham" }, { sizeof (script_runic_intervals) / sizeof (uc_interval_t), script_runic_intervals, "Runic" }, { sizeof (script_khmer_intervals) / sizeof (uc_interval_t), script_khmer_intervals, "Khmer" }, { sizeof (script_mongolian_intervals) / sizeof (uc_interval_t), script_mongolian_intervals, "Mongolian" }, { sizeof (script_hiragana_intervals) / sizeof (uc_interval_t), script_hiragana_intervals, "Hiragana" }, { sizeof (script_katakana_intervals) / sizeof (uc_interval_t), script_katakana_intervals, "Katakana" }, { sizeof (script_bopomofo_intervals) / sizeof (uc_interval_t), script_bopomofo_intervals, "Bopomofo" }, { sizeof (script_han_intervals) / sizeof (uc_interval_t), script_han_intervals, "Han" }, { sizeof (script_yi_intervals) / sizeof (uc_interval_t), script_yi_intervals, "Yi" }, { sizeof (script_old_italic_intervals) / sizeof (uc_interval_t), script_old_italic_intervals, "Old_Italic" }, { sizeof (script_gothic_intervals) / sizeof (uc_interval_t), script_gothic_intervals, "Gothic" }, { sizeof (script_deseret_intervals) / sizeof (uc_interval_t), script_deseret_intervals, "Deseret" }, { sizeof (script_inherited_intervals) / sizeof (uc_interval_t), script_inherited_intervals, "Inherited" }, { sizeof (script_tagalog_intervals) / sizeof (uc_interval_t), script_tagalog_intervals, "Tagalog" }, { sizeof (script_hanunoo_intervals) / sizeof (uc_interval_t), script_hanunoo_intervals, "Hanunoo" }, { sizeof (script_buhid_intervals) / sizeof (uc_interval_t), script_buhid_intervals, "Buhid" }, { sizeof (script_tagbanwa_intervals) / sizeof (uc_interval_t), script_tagbanwa_intervals, "Tagbanwa" }, { sizeof (script_limbu_intervals) / sizeof (uc_interval_t), script_limbu_intervals, "Limbu" }, { sizeof (script_tai_le_intervals) / sizeof (uc_interval_t), script_tai_le_intervals, "Tai_Le" }, { sizeof (script_linear_b_intervals) / sizeof (uc_interval_t), script_linear_b_intervals, "Linear_B" }, { sizeof (script_ugaritic_intervals) / sizeof (uc_interval_t), script_ugaritic_intervals, "Ugaritic" }, { sizeof (script_shavian_intervals) / sizeof (uc_interval_t), script_shavian_intervals, "Shavian" }, { sizeof (script_osmanya_intervals) / sizeof (uc_interval_t), script_osmanya_intervals, "Osmanya" }, { sizeof (script_cypriot_intervals) / sizeof (uc_interval_t), script_cypriot_intervals, "Cypriot" }, { sizeof (script_braille_intervals) / sizeof (uc_interval_t), script_braille_intervals, "Braille" }, { sizeof (script_buginese_intervals) / sizeof (uc_interval_t), script_buginese_intervals, "Buginese" }, { sizeof (script_coptic_intervals) / sizeof (uc_interval_t), script_coptic_intervals, "Coptic" }, { sizeof (script_new_tai_lue_intervals) / sizeof (uc_interval_t), script_new_tai_lue_intervals, "New_Tai_Lue" }, { sizeof (script_glagolitic_intervals) / sizeof (uc_interval_t), script_glagolitic_intervals, "Glagolitic" }, { sizeof (script_tifinagh_intervals) / sizeof (uc_interval_t), script_tifinagh_intervals, "Tifinagh" }, { sizeof (script_syloti_nagri_intervals) / sizeof (uc_interval_t), script_syloti_nagri_intervals, "Syloti_Nagri" }, { sizeof (script_old_persian_intervals) / sizeof (uc_interval_t), script_old_persian_intervals, "Old_Persian" }, { sizeof (script_kharoshthi_intervals) / sizeof (uc_interval_t), script_kharoshthi_intervals, "Kharoshthi" }, { sizeof (script_balinese_intervals) / sizeof (uc_interval_t), script_balinese_intervals, "Balinese" }, { sizeof (script_cuneiform_intervals) / sizeof (uc_interval_t), script_cuneiform_intervals, "Cuneiform" }, { sizeof (script_phoenician_intervals) / sizeof (uc_interval_t), script_phoenician_intervals, "Phoenician" }, { sizeof (script_phags_pa_intervals) / sizeof (uc_interval_t), script_phags_pa_intervals, "Phags_Pa" }, { sizeof (script_nko_intervals) / sizeof (uc_interval_t), script_nko_intervals, "Nko" }, { sizeof (script_sundanese_intervals) / sizeof (uc_interval_t), script_sundanese_intervals, "Sundanese" }, { sizeof (script_lepcha_intervals) / sizeof (uc_interval_t), script_lepcha_intervals, "Lepcha" }, { sizeof (script_ol_chiki_intervals) / sizeof (uc_interval_t), script_ol_chiki_intervals, "Ol_Chiki" }, { sizeof (script_vai_intervals) / sizeof (uc_interval_t), script_vai_intervals, "Vai" }, { sizeof (script_saurashtra_intervals) / sizeof (uc_interval_t), script_saurashtra_intervals, "Saurashtra" }, { sizeof (script_kayah_li_intervals) / sizeof (uc_interval_t), script_kayah_li_intervals, "Kayah_Li" }, { sizeof (script_rejang_intervals) / sizeof (uc_interval_t), script_rejang_intervals, "Rejang" }, { sizeof (script_lycian_intervals) / sizeof (uc_interval_t), script_lycian_intervals, "Lycian" }, { sizeof (script_carian_intervals) / sizeof (uc_interval_t), script_carian_intervals, "Carian" }, { sizeof (script_lydian_intervals) / sizeof (uc_interval_t), script_lydian_intervals, "Lydian" }, { sizeof (script_cham_intervals) / sizeof (uc_interval_t), script_cham_intervals, "Cham" }, { sizeof (script_tai_tham_intervals) / sizeof (uc_interval_t), script_tai_tham_intervals, "Tai_Tham" }, { sizeof (script_tai_viet_intervals) / sizeof (uc_interval_t), script_tai_viet_intervals, "Tai_Viet" }, { sizeof (script_avestan_intervals) / sizeof (uc_interval_t), script_avestan_intervals, "Avestan" }, { sizeof (script_egyptian_hieroglyphs_intervals) / sizeof (uc_interval_t), script_egyptian_hieroglyphs_intervals, "Egyptian_Hieroglyphs" }, { sizeof (script_samaritan_intervals) / sizeof (uc_interval_t), script_samaritan_intervals, "Samaritan" }, { sizeof (script_lisu_intervals) / sizeof (uc_interval_t), script_lisu_intervals, "Lisu" }, { sizeof (script_bamum_intervals) / sizeof (uc_interval_t), script_bamum_intervals, "Bamum" }, { sizeof (script_javanese_intervals) / sizeof (uc_interval_t), script_javanese_intervals, "Javanese" }, { sizeof (script_meetei_mayek_intervals) / sizeof (uc_interval_t), script_meetei_mayek_intervals, "Meetei_Mayek" }, { sizeof (script_imperial_aramaic_intervals) / sizeof (uc_interval_t), script_imperial_aramaic_intervals, "Imperial_Aramaic" }, { sizeof (script_old_south_arabian_intervals) / sizeof (uc_interval_t), script_old_south_arabian_intervals, "Old_South_Arabian" }, { sizeof (script_inscriptional_parthian_intervals) / sizeof (uc_interval_t), script_inscriptional_parthian_intervals, "Inscriptional_Parthian" }, { sizeof (script_inscriptional_pahlavi_intervals) / sizeof (uc_interval_t), script_inscriptional_pahlavi_intervals, "Inscriptional_Pahlavi" }, { sizeof (script_old_turkic_intervals) / sizeof (uc_interval_t), script_old_turkic_intervals, "Old_Turkic" }, { sizeof (script_kaithi_intervals) / sizeof (uc_interval_t), script_kaithi_intervals, "Kaithi" }, { sizeof (script_batak_intervals) / sizeof (uc_interval_t), script_batak_intervals, "Batak" }, { sizeof (script_brahmi_intervals) / sizeof (uc_interval_t), script_brahmi_intervals, "Brahmi" }, { sizeof (script_mandaic_intervals) / sizeof (uc_interval_t), script_mandaic_intervals, "Mandaic" }, { sizeof (script_chakma_intervals) / sizeof (uc_interval_t), script_chakma_intervals, "Chakma" }, { sizeof (script_meroitic_cursive_intervals) / sizeof (uc_interval_t), script_meroitic_cursive_intervals, "Meroitic_Cursive" }, { sizeof (script_meroitic_hieroglyphs_intervals) / sizeof (uc_interval_t), script_meroitic_hieroglyphs_intervals, "Meroitic_Hieroglyphs" }, { sizeof (script_miao_intervals) / sizeof (uc_interval_t), script_miao_intervals, "Miao" }, { sizeof (script_sharada_intervals) / sizeof (uc_interval_t), script_sharada_intervals, "Sharada" }, { sizeof (script_sora_sompeng_intervals) / sizeof (uc_interval_t), script_sora_sompeng_intervals, "Sora_Sompeng" }, { sizeof (script_takri_intervals) / sizeof (uc_interval_t), script_takri_intervals, "Takri" }, { sizeof (script_caucasian_albanian_intervals) / sizeof (uc_interval_t), script_caucasian_albanian_intervals, "Caucasian_Albanian" }, { sizeof (script_bassa_vah_intervals) / sizeof (uc_interval_t), script_bassa_vah_intervals, "Bassa_Vah" }, { sizeof (script_duployan_intervals) / sizeof (uc_interval_t), script_duployan_intervals, "Duployan" }, { sizeof (script_elbasan_intervals) / sizeof (uc_interval_t), script_elbasan_intervals, "Elbasan" }, { sizeof (script_grantha_intervals) / sizeof (uc_interval_t), script_grantha_intervals, "Grantha" }, { sizeof (script_pahawh_hmong_intervals) / sizeof (uc_interval_t), script_pahawh_hmong_intervals, "Pahawh_Hmong" }, { sizeof (script_khojki_intervals) / sizeof (uc_interval_t), script_khojki_intervals, "Khojki" }, { sizeof (script_linear_a_intervals) / sizeof (uc_interval_t), script_linear_a_intervals, "Linear_A" }, { sizeof (script_mahajani_intervals) / sizeof (uc_interval_t), script_mahajani_intervals, "Mahajani" }, { sizeof (script_manichaean_intervals) / sizeof (uc_interval_t), script_manichaean_intervals, "Manichaean" }, { sizeof (script_mende_kikakui_intervals) / sizeof (uc_interval_t), script_mende_kikakui_intervals, "Mende_Kikakui" }, { sizeof (script_modi_intervals) / sizeof (uc_interval_t), script_modi_intervals, "Modi" }, { sizeof (script_mro_intervals) / sizeof (uc_interval_t), script_mro_intervals, "Mro" }, { sizeof (script_old_north_arabian_intervals) / sizeof (uc_interval_t), script_old_north_arabian_intervals, "Old_North_Arabian" }, { sizeof (script_nabataean_intervals) / sizeof (uc_interval_t), script_nabataean_intervals, "Nabataean" }, { sizeof (script_palmyrene_intervals) / sizeof (uc_interval_t), script_palmyrene_intervals, "Palmyrene" }, { sizeof (script_pau_cin_hau_intervals) / sizeof (uc_interval_t), script_pau_cin_hau_intervals, "Pau_Cin_Hau" }, { sizeof (script_old_permic_intervals) / sizeof (uc_interval_t), script_old_permic_intervals, "Old_Permic" }, { sizeof (script_psalter_pahlavi_intervals) / sizeof (uc_interval_t), script_psalter_pahlavi_intervals, "Psalter_Pahlavi" }, { sizeof (script_siddham_intervals) / sizeof (uc_interval_t), script_siddham_intervals, "Siddham" }, { sizeof (script_khudawadi_intervals) / sizeof (uc_interval_t), script_khudawadi_intervals, "Khudawadi" }, { sizeof (script_tirhuta_intervals) / sizeof (uc_interval_t), script_tirhuta_intervals, "Tirhuta" }, { sizeof (script_warang_citi_intervals) / sizeof (uc_interval_t), script_warang_citi_intervals, "Warang_Citi" }, { sizeof (script_ahom_intervals) / sizeof (uc_interval_t), script_ahom_intervals, "Ahom" }, { sizeof (script_anatolian_hieroglyphs_intervals) / sizeof (uc_interval_t), script_anatolian_hieroglyphs_intervals, "Anatolian_Hieroglyphs" }, { sizeof (script_hatran_intervals) / sizeof (uc_interval_t), script_hatran_intervals, "Hatran" }, { sizeof (script_multani_intervals) / sizeof (uc_interval_t), script_multani_intervals, "Multani" }, { sizeof (script_old_hungarian_intervals) / sizeof (uc_interval_t), script_old_hungarian_intervals, "Old_Hungarian" }, { sizeof (script_signwriting_intervals) / sizeof (uc_interval_t), script_signwriting_intervals, "SignWriting" }, { sizeof (script_adlam_intervals) / sizeof (uc_interval_t), script_adlam_intervals, "Adlam" }, { sizeof (script_bhaiksuki_intervals) / sizeof (uc_interval_t), script_bhaiksuki_intervals, "Bhaiksuki" }, { sizeof (script_marchen_intervals) / sizeof (uc_interval_t), script_marchen_intervals, "Marchen" }, { sizeof (script_newa_intervals) / sizeof (uc_interval_t), script_newa_intervals, "Newa" }, { sizeof (script_osage_intervals) / sizeof (uc_interval_t), script_osage_intervals, "Osage" }, { sizeof (script_tangut_intervals) / sizeof (uc_interval_t), script_tangut_intervals, "Tangut" } }; #define script_header_0 16 #define script_header_1 15 #define script_header_2 7 #define script_header_3 511 #define script_header_4 127 static const struct { int level1[15]; short level2[4 << 9]; unsigned char level3[208 << 7]; } u_script = { { 0, 512, 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536 }, { 0, 128, 256, 256, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 4096, 4224, 4352, 4480, 4608, 4736, 4736, 4736, 4736, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 6656, 256, 256, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7552, 7552, 7680, 7808, 7552, 7552, 7552, 7552, 7552, 7552, 7552, 7936, 7936, 7552, 7552, 7552, 7552, 8064, 8192, 8320, 8448, 8576, 8704, 8832, 8960, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 7552, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 10240, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 10368, 10496, 10496, 10496, 10496, 10496, 10496, 10496, 10496, 10496, 10624, 10752, 10752, 10880, 11008, 11136, 11264, 11392, 11520, 11648, 11776, 11904, 12032, 12160, 12288, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 12416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9088, 9088, 12544, 12672, 12800, 12928, 13056, 13056, 13184, 13312, 13440, 13568, 13696, 13824, 13952, 14080, 14208, 14336, -1, 14464, 14592, 14720, 14848, 14976, 15104, -1, 15232, 15232, 15360, -1, 15488, 15616, 15744, 15872, 16000, 16128, 16256, 16384, 16512, 16640, -1, -1, 16768, -1, -1, -1, 16896, 17024, 17152, 17280, 17408, 17536, 17664, -1, 17792, 17920, -1, 18048, 18176, 18304, 18432, -1, -1, 18560, -1, -1, -1, 18688, -1, -1, 18816, 18944, -1, -1, -1, -1, -1, -1, 19072, 19072, 19072, 19072, 19072, 19072, 19072, 19200, 19328, 19072, 19456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19584, 19584, 19584, 19584, 19584, 19584, 19584, 19584, 19712, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19840, 19840, 19840, 19840, 19968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20096, 20096, 20096, 20096, 20224, 20352, 20480, 20608, -1, -1, -1, -1, -1, -1, 20736, 20864, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 20992, 21120, 20992, 20992, 20992, 20992, 20992, 21248, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21504, 21632, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7552, 21760, 21888, 22016, 22144, -1, 22272, -1, 22400, 22528, 22656, 7552, 7552, 22784, 7552, 22912, 23040, 23040, 23040, 23040, 23040, 23168, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23296, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23424, 23552, 23680, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23808, 23936, -1, -1, 24064, 24192, 24320, 24448, 24576, -1, 7552, 7552, 7552, 7552, 7552, 7552, 7552, 24704, 24832, 24960, 25088, 25216, 25344, 25472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 25600, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 25728, 9088, 25856, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 25984, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9088, 9088, 9088, 9088, 26112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26240, -1, 26368, 26496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 2, 2, 2, 2, 0, 2, 2, 2, 255, 255, 2, 2, 2, 2, 0, 2, 255, 255, 255, 255, 2, 0, 2, 0, 2, 2, 2, 255, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 40, 40, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 255, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 255, 255, 4, 4, 4, 4, 4, 4, 4, 255, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 255, 0, 4, 255, 255, 4, 4, 4, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 255, 255, 255, 255, 255, 255, 255, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 255, 255, 255, 255, 255, 5, 5, 5, 5, 5, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 255, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 40, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 255, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 255, 255, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 255, 255, 255, 255, 255, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 255, 255, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 255, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 255, 255, 94, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 40, 40, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 255, 10, 10, 10, 10, 10, 10, 10, 10, 255, 255, 10, 10, 255, 255, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 255, 10, 10, 10, 10, 10, 10, 10, 255, 10, 255, 255, 255, 10, 10, 10, 10, 255, 255, 10, 10, 10, 10, 10, 10, 10, 10, 10, 255, 255, 10, 10, 255, 255, 10, 10, 10, 10, 255, 255, 255, 255, 255, 255, 255, 255, 10, 255, 255, 255, 255, 10, 10, 255, 10, 10, 10, 10, 10, 255, 255, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 255, 255, 255, 255, 255, 11, 11, 11, 255, 11, 11, 11, 11, 11, 11, 255, 255, 255, 255, 11, 11, 255, 255, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 255, 11, 11, 11, 11, 11, 11, 11, 255, 11, 11, 255, 11, 11, 255, 11, 11, 255, 255, 11, 255, 11, 11, 11, 11, 11, 255, 255, 255, 255, 11, 11, 255, 255, 11, 11, 11, 255, 255, 255, 11, 255, 255, 255, 255, 255, 255, 255, 11, 11, 11, 11, 255, 11, 255, 255, 255, 255, 255, 255, 255, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 12, 12, 12, 255, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 12, 12, 12, 255, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 12, 12, 12, 12, 12, 12, 12, 255, 12, 12, 255, 12, 12, 12, 12, 12, 255, 255, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 12, 12, 12, 255, 12, 12, 12, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 12, 12, 12, 12, 255, 255, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 255, 255, 255, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 13, 13, 13, 255, 13, 13, 13, 13, 13, 13, 13, 13, 255, 255, 13, 13, 255, 255, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 255, 13, 13, 13, 13, 13, 13, 13, 255, 13, 13, 255, 13, 13, 13, 13, 13, 255, 255, 13, 13, 13, 13, 13, 13, 13, 13, 13, 255, 255, 13, 13, 255, 255, 13, 13, 13, 255, 255, 255, 255, 255, 255, 255, 255, 13, 13, 255, 255, 255, 255, 13, 13, 255, 13, 13, 13, 13, 13, 255, 255, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 14, 14, 255, 14, 14, 14, 14, 14, 14, 255, 255, 255, 14, 14, 14, 255, 14, 14, 14, 14, 255, 255, 255, 14, 14, 255, 14, 255, 14, 14, 255, 255, 255, 14, 14, 255, 255, 255, 14, 14, 14, 255, 255, 255, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 255, 255, 255, 255, 14, 14, 14, 14, 14, 255, 255, 255, 14, 14, 14, 255, 14, 14, 14, 14, 255, 255, 14, 255, 255, 255, 255, 255, 255, 14, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 255, 255, 255, 255, 255, 15, 15, 15, 15, 255, 15, 15, 15, 15, 15, 15, 15, 15, 255, 15, 15, 15, 255, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 255, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 255, 255, 255, 15, 15, 15, 15, 15, 15, 15, 15, 255, 15, 15, 15, 255, 15, 15, 15, 15, 255, 255, 255, 255, 255, 255, 255, 15, 15, 255, 15, 15, 15, 255, 255, 255, 255, 255, 15, 15, 15, 15, 255, 255, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 255, 255, 255, 255, 255, 255, 255, 255, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 255, 16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 16, 255, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 16, 16, 16, 255, 255, 16, 16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 16, 255, 16, 16, 16, 16, 255, 255, 255, 255, 255, 255, 255, 16, 16, 255, 255, 255, 255, 255, 255, 255, 16, 255, 16, 16, 16, 16, 255, 255, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 255, 16, 16, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 17, 17, 17, 255, 17, 17, 17, 17, 17, 17, 17, 17, 255, 17, 17, 17, 255, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 255, 255, 17, 17, 17, 17, 17, 17, 17, 17, 255, 17, 17, 17, 255, 17, 17, 17, 17, 17, 17, 255, 255, 255, 255, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 255, 255, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 255, 255, 18, 18, 255, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 255, 255, 255, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 255, 18, 18, 18, 18, 18, 18, 18, 18, 18, 255, 18, 255, 255, 18, 18, 18, 18, 18, 18, 18, 255, 255, 255, 18, 255, 255, 255, 255, 18, 18, 18, 18, 18, 18, 255, 18, 255, 18, 18, 18, 18, 18, 18, 18, 18, 255, 255, 255, 255, 255, 255, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 255, 255, 18, 18, 18, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 255, 255, 255, 255, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 20, 20, 255, 20, 255, 255, 20, 20, 255, 20, 255, 255, 20, 255, 255, 255, 255, 255, 255, 20, 20, 20, 20, 255, 20, 20, 20, 20, 20, 20, 20, 255, 20, 20, 20, 255, 20, 255, 20, 255, 255, 20, 20, 255, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 255, 20, 20, 20, 255, 255, 20, 20, 20, 20, 20, 255, 20, 255, 20, 20, 20, 20, 20, 20, 255, 255, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 255, 255, 20, 20, 20, 20, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 255, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 255, 255, 255, 255, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 255, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 255, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 255, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 21, 21, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 255, 23, 255, 255, 255, 255, 255, 23, 255, 255, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 255, 255, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 255, 255, 255, 255, 255, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 255, 255, 26, 26, 26, 26, 26, 26, 255, 255, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 255, 255, 255, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0, 0, 0, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 255, 255, 255, 255, 255, 255, 255, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 255, 41, 41, 41, 41, 41, 41, 41, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 255, 44, 44, 44, 255, 44, 44, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 255, 255, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 255, 255, 255, 255, 255, 255, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 255, 255, 255, 255, 255, 255, 31, 31, 0, 0, 31, 0, 31, 31, 31, 31, 31, 31, 31, 31, 31, 255, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 255, 255, 255, 255, 255, 255, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 255, 255, 255, 255, 255, 255, 255, 255, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 255, 255, 255, 255, 255, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 255, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 255, 255, 255, 255, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 255, 255, 255, 255, 45, 255, 255, 255, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 255, 255, 46, 46, 46, 46, 46, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 255, 255, 255, 255, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 255, 255, 255, 255, 255, 255, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 255, 255, 255, 55, 55, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 255, 255, 53, 53, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 255, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 255, 255, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 255, 255, 255, 255, 255, 255, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 255, 255, 255, 255, 255, 255, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 255, 255, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 255, 255, 255, 255, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 255, 255, 255, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 92, 92, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 255, 255, 255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 255, 255, 255, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 3, 3, 3, 3, 3, 3, 3, 3, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 66, 66, 66, 66, 66, 66, 66, 66, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 40, 0, 0, 255, 40, 40, 255, 255, 255, 255, 255, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 255, 255, 255, 255, 255, 40, 40, 40, 40, 40, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 2, 2, 255, 2, 255, 2, 255, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 2, 2, 2, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 255, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 255, 255, 255, 255, 255, 54, 54, 54, 54, 54, 54, 54, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 255, 23, 255, 255, 255, 255, 255, 23, 255, 255, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 255, 255, 255, 255, 255, 255, 255, 57, 57, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 57, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 255, 255, 255, 255, 255, 255, 255, 255, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 40, 40, 40, 40, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 0, 0, 0, 0, 255, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 255, 255, 40, 40, 0, 0, 32, 32, 32, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 33, 33, 33, 255, 255, 255, 255, 255, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 255, 255, 255, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 255, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 255, 255, 255, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 255, 255, 255, 255, 255, 255, 255, 255, 255, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 1, 1, 1, 1, 1, 1, 1, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 255, 255, 255, 255, 255, 255, 255, 255, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 255, 255, 255, 255, 255, 255, 255, 255, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 255, 255, 255, 255, 255, 255, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 255, 255, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 72, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 255, 255, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 255, 0, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 255, 255, 255, 255, 84, 84, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 255, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 255, 255, 255, 255, 255, 255, 255, 255, 255, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 255, 255, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 255, 255, 76, 76, 76, 76, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 78, 78, 78, 78, 78, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 25, 25, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 255, 255, 25, 25, 25, 25, 25, 25, 255, 255, 255, 255, 255, 255, 255, 255, 255, 25, 25, 25, 25, 25, 25, 25, 255, 25, 25, 25, 25, 25, 25, 25, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 255, 255, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 255, 255, 255, 255, 255, 255, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 255, 255, 255, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 1, 1, 1, 1, 1, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 4, 4, 4, 4, 4, 255, 255, 255, 255, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 255, 5, 5, 5, 5, 5, 255, 5, 255, 5, 5, 255, 5, 5, 255, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 255, 255, 255, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 255, 255, 255, 24, 24, 24, 24, 24, 24, 255, 255, 24, 24, 24, 24, 24, 24, 255, 255, 24, 24, 24, 24, 24, 24, 255, 255, 24, 24, 24, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 47, 47, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 2, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 255, 255, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 255, 255, 255, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 255, 255, 255, 255, 255, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 255, 255, 255, 255, 255, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 255, 48, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 255, 255, 255, 255, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 255, 255, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 255, 255, 255, 255, 255, 255, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 255, 255, 255, 255, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 255, 255, 255, 255, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 255, 255, 255, 255, 255, 255, 255, 255, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 102, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 255, 255, 255, 255, 255, 255, 255, 255, 255, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 109, 109, 109, 109, 109, 109, 109, 109, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 51, 51, 51, 51, 51, 51, 255, 255, 51, 255, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 255, 51, 51, 255, 255, 255, 51, 255, 255, 51, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 255, 86, 86, 86, 86, 86, 86, 86, 86, 86, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 255, 255, 255, 255, 255, 255, 255, 255, 116, 116, 116, 116, 116, 116, 116, 116, 116, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 255, 127, 127, 255, 255, 255, 255, 255, 127, 127, 127, 127, 127, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 255, 255, 255, 63, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 255, 255, 255, 255, 255, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 255, 255, 255, 255, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 255, 255, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 60, 60, 60, 60, 255, 60, 60, 255, 255, 255, 255, 255, 60, 60, 60, 60, 60, 60, 60, 60, 255, 60, 60, 60, 255, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 255, 255, 255, 255, 60, 60, 60, 255, 255, 255, 255, 60, 60, 60, 60, 60, 60, 60, 60, 60, 255, 255, 255, 255, 255, 255, 255, 255, 60, 60, 60, 60, 60, 60, 60, 60, 60, 255, 255, 255, 255, 255, 255, 255, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 255, 255, 255, 255, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 255, 255, 255, 255, 255, 255, 255, 255, 255, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 255, 255, 255, 79, 79, 79, 79, 79, 79, 79, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 255, 255, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 255, 255, 255, 255, 255, 89, 89, 89, 89, 89, 89, 89, 89, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 120, 120, 120, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 255, 255, 255, 255, 255, 255, 255, 129, 129, 129, 129, 129, 129, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 255, 255, 255, 255, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 255, 255, 255, 255, 255, 255, 255, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 255, 255, 255, 255, 255, 255, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 255, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 255, 255, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 255, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 255, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 128, 128, 128, 128, 128, 128, 255, 128, 255, 128, 128, 128, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 255, 255, 255, 255, 255, 255, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 255, 255, 255, 255, 255, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 255, 255, 255, 255, 255, 255, 106, 106, 106, 106, 255, 106, 106, 106, 106, 106, 106, 106, 106, 255, 255, 106, 106, 255, 255, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 255, 106, 106, 106, 106, 106, 106, 106, 255, 106, 106, 255, 106, 106, 106, 106, 106, 255, 255, 106, 106, 106, 106, 106, 106, 106, 106, 106, 255, 255, 106, 106, 255, 255, 106, 106, 106, 255, 255, 106, 255, 255, 255, 255, 255, 255, 106, 255, 255, 255, 255, 255, 106, 106, 106, 106, 106, 106, 106, 255, 255, 106, 106, 106, 106, 106, 106, 106, 255, 255, 255, 106, 106, 106, 106, 106, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 255, 134, 255, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 255, 255, 255, 255, 255, 255, 255, 255, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 255, 255, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 255, 255, 255, 255, 255, 255, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 255, 255, 255, 255, 255, 255, 255, 255, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 255, 255, 255, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 255, 255, 255, 255, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 124, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 255, 255, 255, 255, 255, 255, 255, 132, 132, 132, 132, 132, 132, 132, 132, 132, 255, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 255, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 255, 255, 255, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 255, 255, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 255, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 255, 62, 62, 62, 62, 62, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 255, 255, 255, 255, 255, 255, 255, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 255, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 255, 255, 255, 255, 114, 114, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 255, 255, 103, 103, 103, 103, 103, 103, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 255, 107, 107, 107, 107, 107, 107, 107, 255, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 255, 255, 255, 255, 255, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 136, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 32, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 255, 255, 255, 255, 255, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 255, 255, 255, 104, 104, 104, 104, 104, 104, 104, 104, 104, 255, 255, 255, 255, 255, 255, 255, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 255, 255, 104, 104, 104, 104, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 130, 130, 130, 130, 255, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 56, 56, 56, 56, 56, 56, 56, 255, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 255, 255, 56, 56, 56, 56, 56, 56, 56, 255, 56, 56, 255, 56, 56, 56, 56, 56, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 255, 255, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 255, 255, 255, 255, 255, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 255, 255, 255, 255, 131, 131, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 6, 6, 255, 6, 255, 255, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 255, 6, 255, 6, 255, 255, 255, 255, 255, 255, 6, 255, 255, 255, 255, 6, 255, 6, 255, 6, 255, 6, 6, 6, 255, 6, 6, 255, 6, 255, 255, 6, 255, 6, 255, 6, 255, 6, 255, 6, 255, 6, 6, 255, 6, 255, 255, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 255, 6, 6, 6, 6, 255, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 255, 255, 255, 6, 6, 6, 255, 6, 6, 6, 6, 6, 255, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 6, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/scripts_byname.gperf�������������������������������������������0000664�0000000�0000000�00000005661�14110572173�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode scripts. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ struct named_script { int name; unsigned int index; }; %struct-type %language=ANSI-C %define hash-function-name scripts_hash %define lookup-function-name uc_script_lookup %readonly-tables %global-table %define word-array-name script_names %pic %define string-pool-name script_stringpool %% Common, 0 Latin, 1 Greek, 2 Cyrillic, 3 Armenian, 4 Hebrew, 5 Arabic, 6 Syriac, 7 Thaana, 8 Devanagari, 9 Bengali, 10 Gurmukhi, 11 Gujarati, 12 Oriya, 13 Tamil, 14 Telugu, 15 Kannada, 16 Malayalam, 17 Sinhala, 18 Thai, 19 Lao, 20 Tibetan, 21 Myanmar, 22 Georgian, 23 Hangul, 24 Ethiopic, 25 Cherokee, 26 Canadian_Aboriginal, 27 Ogham, 28 Runic, 29 Khmer, 30 Mongolian, 31 Hiragana, 32 Katakana, 33 Bopomofo, 34 Han, 35 Yi, 36 Old_Italic, 37 Gothic, 38 Deseret, 39 Inherited, 40 Tagalog, 41 Hanunoo, 42 Buhid, 43 Tagbanwa, 44 Limbu, 45 Tai_Le, 46 Linear_B, 47 Ugaritic, 48 Shavian, 49 Osmanya, 50 Cypriot, 51 Braille, 52 Buginese, 53 Coptic, 54 New_Tai_Lue, 55 Glagolitic, 56 Tifinagh, 57 Syloti_Nagri, 58 Old_Persian, 59 Kharoshthi, 60 Balinese, 61 Cuneiform, 62 Phoenician, 63 Phags_Pa, 64 Nko, 65 Sundanese, 66 Lepcha, 67 Ol_Chiki, 68 Vai, 69 Saurashtra, 70 Kayah_Li, 71 Rejang, 72 Lycian, 73 Carian, 74 Lydian, 75 Cham, 76 Tai_Tham, 77 Tai_Viet, 78 Avestan, 79 Egyptian_Hieroglyphs, 80 Samaritan, 81 Lisu, 82 Bamum, 83 Javanese, 84 Meetei_Mayek, 85 Imperial_Aramaic, 86 Old_South_Arabian, 87 Inscriptional_Parthian, 88 Inscriptional_Pahlavi, 89 Old_Turkic, 90 Kaithi, 91 Batak, 92 Brahmi, 93 Mandaic, 94 Chakma, 95 Meroitic_Cursive, 96 Meroitic_Hieroglyphs, 97 Miao, 98 Sharada, 99 Sora_Sompeng, 100 Takri, 101 Caucasian_Albanian, 102 Bassa_Vah, 103 Duployan, 104 Elbasan, 105 Grantha, 106 Pahawh_Hmong, 107 Khojki, 108 Linear_A, 109 Mahajani, 110 Manichaean, 111 Mende_Kikakui, 112 Modi, 113 Mro, 114 Old_North_Arabian, 115 Nabataean, 116 Palmyrene, 117 Pau_Cin_Hau, 118 Old_Permic, 119 Psalter_Pahlavi, 120 Siddham, 121 Khudawadi, 122 Tirhuta, 123 Warang_Citi, 124 Ahom, 125 Anatolian_Hieroglyphs, 126 Hatran, 127 Multani, 128 Old_Hungarian, 129 SignWriting, 130 Adlam, 131 Bhaiksuki, 132 Marchen, 133 Newa, 134 Osage, 135 Tangut, 136 �������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_c_ident.c���������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0021173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "sy_c_ident.h" #define TABLE u_c_ident #include "identsyntaxmap.h" int uc_c_ident_category (ucs4_t uc) { return identsyntax_lookup (uc); } �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_c_ident.h���������������������������������������������������0000664�0000000�0000000�00000021723�14110572173�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Language syntax properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define identsyntax_header_0 12 #define identsyntax_header_1 14 #define identsyntax_header_2 7 #define identsyntax_header_3 31 #define identsyntax_header_4 127 static const struct { int level1[14]; short level2[9 << 5]; unsigned short level3[39 * 16]; } u_c_ident = { { 0, 32, 64, 96, 128, 160, 160, 160, 160, 192, 224, 160, 160, 256 }, { 0, 128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, -1, -1, -1, -1, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, -1, 2944, 3072, 3200, 3328, -1, 3456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 3584, 3712, 3840, 3968, -1, 4096, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, 4480, 4608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 4736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 4864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x5555, 0xaaa5, 0x0002, 0x0000, 0x0000, 0x2a80, 0x0002, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaa8a, 0x22aa, 0xaa8a, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x000a, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0x0000, 0x0228, 0xaaa0, 0xaaaa, 0xaaa0, 0xaaaa, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaa8a, 0x8aaa, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x8000, 0x888a, 0x0008, 0x0000, 0xaa00, 0xaaaa, 0x0002, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2800, 0xa828, 0x0000, 0x0000, 0x0000, 0x0a00, 0xa000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaa2, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x2020, 0xaa82, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0000, 0xaaa0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x800a, 0x0000, 0x8000, 0x0000, 0xa800, 0x02aa, 0xa008, 0x0000, 0xaaa0, 0x0202, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x0000, 0xa000, 0xaa80, 0x0000, 0x0a00, 0x0000, 0xaaaa, 0xaaaa, 0x0202, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a88, 0x0aa0, 0x2800, 0xa028, 0xaaaa, 0x20aa, 0x0a00, 0x0000, 0xaaa0, 0xaaaa, 0x028a, 0x2a80, 0x0028, 0x0000, 0x0000, 0x0008, 0x8208, 0x0aa0, 0x2a80, 0xa028, 0xaaaa, 0x8802, 0x0aaa, 0x0000, 0xa8aa, 0xaaaa, 0x0202, 0x2200, 0x0020, 0x0000, 0x0000, 0x0008, 0x0208, 0x02a0, 0x2000, 0xa020, 0xaaa8, 0xaaaa, 0x0aa8, 0x0000, 0xaaaa, 0xaaaa, 0x0202, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a08, 0x02a0, 0x2a00, 0xa028, 0xaaaa, 0x20aa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, 0x020a, 0x0a80, 0xa008, 0x0882, 0xa82a, 0x0a80, 0x2000, 0x0aa0, 0x0a80, 0xa008, 0xaaaa, 0xaaaa, 0x2aaa, 0x0000, 0xaaaa, 0xaaaa, 0x0202, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x0aa0, 0x0800, 0xa008, 0xaaaa, 0xaaaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, 0x020a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x0aa0, 0x0800, 0xa008, 0xaaaa, 0x8aaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, 0x020a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0000, 0x0aa0, 0x0a00, 0xa008, 0xaaaa, 0xaaaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2882, 0xa288, 0x00aa, 0x0002, 0x2202, 0x820a, 0x0000, 0xa020, 0x8800, 0xa000, 0x0000, 0xa0a0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaa0, 0x0000, 0x0000, 0x2200, 0x0aa2, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0xaaa0, 0x0002, 0x0000, 0x0800, 0xaa00, 0x2000, 0x0002, 0x0000, 0xa000, 0x0002, 0xaaa2, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x2222, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8800, 0x080a, 0xa800, 0x0a00, 0xaa00, 0x0000, 0xa800, 0x080a, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0x2a8a, 0x000a, 0xa200, 0xa000, 0x88aa, 0x0008, 0x0020, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0xaaa0, 0xaaaa, 0xaaaa, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xa82a, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xa82a, 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa } }; ���������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_c_whitespace.c����������������������������������������������0000664�0000000�0000000�00000002542�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" bool uc_is_c_whitespace (ucs4_t uc) { return (uc == ' ' || (uc <= 0x000D && uc >= 0x0009)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_c_whitespace.h����������������������������������������������0000664�0000000�0000000�00000006313�14110572173�0022232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Language syntax properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_c_whitespace = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003E00U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_java_ident.c������������������������������������������������0000664�0000000�0000000�00000002642�14110572173�0021674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "sy_java_ident.h" #define TABLE u_java_ident #include "identsyntaxmap.h" int uc_java_ident_category (ucs4_t uc) { return identsyntax_lookup (uc); } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_java_ident.h������������������������������������������������0000664�0000000�0000000�00000077033�14110572173�0021707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Language syntax properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define identsyntax_header_0 12 #define identsyntax_header_1 225 #define identsyntax_header_2 7 #define identsyntax_header_3 31 #define identsyntax_header_4 127 static const struct { int level1[225]; short level2[25 << 5]; unsigned short level3[169 * 16]; } u_java_ident = { { 0, 32, 64, 96, 128, 160, 160, 160, 160, 192, 224, 160, 160, 256, -1, 288, 320, 352, 384, 416, 448, -1, 480, 160, 512, -1, -1, 544, -1, 576, 608, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 640, 672, 704, -1, -1, 736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 768 }, { 0, 128, 256, 256, 256, 384, 512, 640, 256, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 256, 256, 3968, 4096, 4224, 4352, 4480, 256, 256, 256, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 256, 6400, 256, 256, 6528, 6656, 6784, 6912, 7040, 7168, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7296, 7424, 7552, 7680, 7808, -1, -1, -1, 7936, 8064, 8192, 8320, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8448, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8576, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8704, 256, 256, 8832, 8960, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 10240, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 10368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 10496, 10624, 10752, 10880, 256, 256, 11008, 11136, 11264, 11392, 11520, 11648, 11776, 11904, 12032, 12160, -1, 12288, 12416, 12544, 256, 12672, 12800, -1, 256, 256, 12928, -1, 13056, 13184, 13312, 13440, 13568, 13696, 13824, 13952, 14080, 14208, -1, -1, -1, -1, -1, -1, 14336, 14464, 14592, 14720, 14848, 14976, 15104, -1, 15232, 15360, -1, 15488, 15616, 15744, 15872, -1, -1, 16000, -1, -1, -1, 16128, -1, -1, 16256, 16384, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 16512, 16640, 256, 16768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 16896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 17024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 17152, 17280, 17408, 17536, -1, -1, -1, -1, -1, -1, 17664, 17792, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 17920, 256, 256, 256, 256, 256, 18048, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18304, 18432, -1, -1, -1, -1, -1, -1, -1, -1, 18560, 18688, 18816, -1, -1, -1, 18944, 19072, 19200, 256, 256, 19328, 19456, 19584, -1, -1, -1, -1, 19712, 19840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 20096, 20224, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20352, 20480, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 20608, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 20736, 256, 20864, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 20992, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 21120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21248, -1, 21376, 21504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xffff, 0xfaab, 0xffff, 0xaaff, 0xa8aa, 0xaaaa, 0x5555, 0xaaa5, 0x0002, 0x0000, 0x0000, 0x2a80, 0x0002, 0x0000, 0x0000, 0xea80, 0xffff, 0xffff, 0xffff, 0xffff, 0xa00a, 0xae8a, 0xa2aa, 0xaa8a, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aa0, 0x0000, 0xaaa0, 0xaaaa, 0xa800, 0x88aa, 0xaaaa, 0xaaaa, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x0800, 0x200a, 0x8aaa, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x0000, 0x5560, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaa2, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x5556, 0x5555, 0x5555, 0x5555, 0x5555, 0x6555, 0x6596, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaa80, 0xaaaa, 0xafff, 0xaa2a, 0x5555, 0xab95, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0x5555, 0x5555, 0x0aa5, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5200, 0x6d55, 0x4155, 0x0559, 0x5555, 0x2805, 0xaaaa, 0xeaaa, 0x0004, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, 0x5555, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x5555, 0xaaa1, 0xaaaa, 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0x5540, 0xa055, 0xaa8a, 0x0000, 0x0000, 0x5000, 0x5545, 0x5455, 0xa554, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa54, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0800, 0xa000, 0xaaaa, 0xaaaa, 0x55aa, 0x5555, 0x5575, 0x5555, 0x5555, 0x5555, 0x0055, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5150, 0x5555, 0x5555, 0x5554, 0x0000, 0x5a50, 0x5555, 0x0002, 0x0000, 0x0254, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a88, 0x51a0, 0x6955, 0x8569, 0x6aaa, 0x20aa, 0x5a50, 0x5555, 0xaa00, 0xaa2a, 0x0256, 0x2a80, 0x0028, 0x0000, 0x0000, 0x0008, 0x8208, 0x59a0, 0x6a95, 0xa569, 0xaaa6, 0x8802, 0x5aaa, 0x5555, 0xa405, 0xaaaa, 0x0256, 0x2000, 0x0020, 0x0000, 0x0000, 0x0008, 0x0208, 0x51a0, 0x6555, 0xa565, 0xaaa8, 0xaaaa, 0x5a50, 0x5555, 0xaaa2, 0xaaa2, 0x0256, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0208, 0x51a0, 0x6955, 0xa569, 0x5aaa, 0x20aa, 0x5a50, 0x5555, 0xaaa2, 0xaaaa, 0x021a, 0x0a80, 0xa008, 0x0882, 0xa82a, 0x0a80, 0x0000, 0x5aa0, 0x5a95, 0xa559, 0x6aa8, 0xaaaa, 0x5aaa, 0x5555, 0xaaaa, 0xaaa2, 0x0255, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0000, 0x52a0, 0x5955, 0xa559, 0x96aa, 0xaa80, 0x5a50, 0x5555, 0xaaaa, 0xaaaa, 0x0254, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x51a0, 0x5955, 0xa559, 0x96aa, 0x8aaa, 0x5a50, 0x5555, 0xaa82, 0xaaaa, 0x0256, 0x0800, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x5280, 0x5955, 0x8559, 0x40aa, 0x2aaa, 0x5a50, 0x5555, 0xaaaa, 0x000a, 0x025a, 0x0000, 0x8000, 0x000a, 0x0000, 0x0000, 0x0020, 0xa200, 0x8000, 0x6a9a, 0x9955, 0x5555, 0x5aaa, 0x5555, 0xaa5a, 0xaaaa, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5504, 0x2a95, 0x4000, 0x9555, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2882, 0xa288, 0x00aa, 0x0002, 0x2202, 0x020a, 0x5504, 0xa165, 0x8800, 0xa555, 0x5555, 0x00a5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaa5, 0x5555, 0xaaa5, 0x66aa, 0x5aa6, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0xa800, 0x5556, 0x5555, 0x5955, 0x5400, 0x5555, 0x5556, 0x5555, 0x5555, 0x5555, 0xa955, 0x9aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0x1555, 0x5555, 0xaaa5, 0x5000, 0x5005, 0x4151, 0x0555, 0x0154, 0x0000, 0x5550, 0x4555, 0x5555, 0xa555, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0xa2aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa008, 0x8000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, 0xa008, 0x8000, 0xa008, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5680, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xa000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2800, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a80, 0x0000, 0xaaa8, 0x0000, 0x0800, 0xa950, 0xaaaa, 0x0000, 0x0000, 0xa950, 0xaaaa, 0x0000, 0x0000, 0xaa50, 0xaaaa, 0x0000, 0x0800, 0xaa58, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0x5555, 0x5555, 0x2a55, 0xa42a, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xb56a, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0x1400, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x8000, 0x5555, 0xaa55, 0x5555, 0xaa55, 0x5aaa, 0x5555, 0x0000, 0x0000, 0x0000, 0xa000, 0xa800, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0xaaa0, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x4000, 0xaa55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5400, 0x9555, 0x5555, 0x5555, 0x5555, 0x6955, 0x5555, 0xaaa5, 0x5555, 0xaaa5, 0x2aaa, 0xaaaa, 0x5555, 0xa555, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0x0155, 0xaa00, 0x5555, 0xaaa5, 0xaaaa, 0x556a, 0xaa55, 0xaaaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x5554, 0x0555, 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x5555, 0xaa55, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0x5555, 0xaaaa, 0x5555, 0x02a5, 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x5595, 0x5555, 0x5555, 0x0401, 0x8150, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0xa555, 0x556a, 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x2222, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8800, 0x080a, 0xa800, 0x0a00, 0xaa00, 0x0000, 0xa800, 0x080a, 0xa800, 0xaaaa, 0xffea, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffa, 0xaaaa, 0x2aaa, 0xaaa8, 0xaaaa, 0xa8aa, 0xaaaa, 0xfbff, 0xffff, 0xaaa2, 0x2aaa, 0xaaaa, 0xaaaa, 0x0000, 0xa800, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x5555, 0xa955, 0x56a6, 0x5555, 0xaaa9, 0xaaaa, 0x2a8a, 0x000a, 0xa200, 0xa002, 0x88aa, 0x2008, 0x0000, 0x00a0, 0x02aa, 0x8aa0, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0x402a, 0xaa05, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0xa2aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0xaaaa, 0x6aaa, 0x0000, 0x0000, 0x8000, 0xaaaa, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x5555, 0x5555, 0x5555, 0x5555, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x5550, 0xa002, 0xa800, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0296, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0xa800, 0x0000, 0x0000, 0x5555, 0xaa05, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x55aa, 0x2555, 0x0000, 0x0000, 0x0000, 0x5000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0x0000, 0x1010, 0x0040, 0x0000, 0x0000, 0x5540, 0xaaaa, 0xaaaa, 0xaaa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0xa555, 0xaaaa, 0x5555, 0xaaa5, 0x5555, 0x5555, 0x0005, 0xa22a, 0x5555, 0x0005, 0x0000, 0x0000, 0x5000, 0xa555, 0x0000, 0x0000, 0x4000, 0x5555, 0xaa55, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa800, 0x0055, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0xaaa9, 0x2aaa, 0x5555, 0xaaa5, 0x0400, 0x0000, 0x5555, 0x8005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5554, 0x9555, 0xaaaa, 0x0040, 0xa500, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x8000, 0x054a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4151, 0x5001, 0xaa84, 0xaaaa, 0xaaaa, 0xa02a, 0x0000, 0x5540, 0x940a, 0xaaaa, 0x8002, 0x8002, 0x8002, 0xaaaa, 0x8000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0xa595, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0x0000, 0x0000, 0x8000, 0x002a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x8000, 0xaaaa, 0x002a, 0x12aa, 0x0000, 0x0008, 0x8000, 0x8800, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0x002a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0xa800, 0x5555, 0x5555, 0xaaaa, 0xaaaa, 0x5555, 0x5555, 0xa82a, 0xaaaa, 0xaaaa, 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa2, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe800, 0xa8aa, 0xaaaa, 0x5555, 0xaaa5, 0x0002, 0x0000, 0x0000, 0x2a80, 0x0002, 0x0000, 0x0000, 0xaa80, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x000a, 0x000a, 0x000a, 0xa80a, 0x82a0, 0xaaaa, 0xaaaa, 0xaafe, 0x0000, 0x0200, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x2080, 0x0000, 0xa000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xa6aa, 0x0000, 0x0000, 0x0000, 0xa800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0xaaaa, 0xaaa9, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0xaa95, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0xa002, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa000, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xa000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x28a8, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x8000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0xa080, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x9654, 0x55aa, 0x0200, 0x0002, 0x0000, 0x0000, 0xaa00, 0x6a95, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa800, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0002, 0x0000, 0x0000, 0x9400, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x9555, 0xaaaa, 0xaaaa, 0xaaaa, 0x5aaa, 0x5555, 0xaaaa, 0x6aaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0xae95, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaa8, 0x5555, 0xaaa5, 0x0015, 0x0000, 0x0000, 0x0000, 0x4000, 0x5555, 0x5955, 0x5555, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x8a40, 0xaaaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0xa801, 0xa95a, 0x5555, 0xa885, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x5500, 0x5555, 0x9aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x8000, 0x2008, 0x0000, 0x2000, 0x0000, 0xaaa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x5555, 0xaa95, 0x5555, 0xaaa5, 0x0255, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0208, 0x51a0, 0x6955, 0xa569, 0x6aa8, 0x02aa, 0x5a50, 0xa955, 0xa955, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5400, 0x5555, 0x1555, 0xaa80, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, 0x2055, 0xaaaa, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xa555, 0x5555, 0xaaa9, 0xaaaa, 0xaaaa, 0xa500, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, 0xa8a9, 0xaaaa, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0xaaaa, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x56a0, 0x5555, 0xaa55, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0xaaa5, 0xaaaa, 0x2aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x4000, 0x9555, 0x5555, 0xaaa8, 0xaaaa, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0x000a, 0x0000, 0x0000, 0x0000, 0x555a, 0x5555, 0x5555, 0x5556, 0x9555, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0x0000, 0x0000, 0x0000, 0x8000, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa000, 0xa955, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9555, 0xaaaa, 0xaa00, 0xaaaa, 0x5555, 0xaaa5, 0x002a, 0x0000, 0x0000, 0x02aa, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0x5554, 0x5555, 0x5555, 0x5555, 0x5555, 0x9555, 0xaaaa, 0x6aaa, 0x0015, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0x0000, 0xa800, 0x0000, 0xaaa8, 0x0000, 0x96a0, 0xaaff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x56aa, 0x56a5, 0xffd5, 0x557f, 0x5695, 0xaa55, 0xaaaa, 0xaaaa, 0xaaaa, 0xa55a, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xa95a, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x828a, 0x0802, 0x0000, 0x0220, 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x0280, 0x0800, 0x0800, 0x0000, 0x0000, 0x0000, 0x8020, 0x8800, 0x000a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0080, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0080, 0x5a00, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x9555, 0x556a, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0xa955, 0xa6aa, 0xaaaa, 0xa9aa, 0xaaaa, 0xaaaa, 0x556a, 0x5556, 0x5555, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x9555, 0x5555, 0x5555, 0x5569, 0x5965, 0xaa95, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0x9555, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0xaa95, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0200, 0x0000, 0x0000, 0x0000, 0x2882, 0x0002, 0x0080, 0xaa22, 0x2a8a, 0x0222, 0x2882, 0x2222, 0x2882, 0x0080, 0x0080, 0x8802, 0x0000, 0x0020, 0x0000, 0xaa00, 0x0202, 0x0020, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaae, 0xaaaa, 0xaaaa, 0xaaaa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0xaaaa, 0xaaaa } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_java_whitespace.c�������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" bool uc_is_java_whitespace (ucs4_t uc) { return (uc == ' ' || (uc <= 0x000D && uc >= 0x0009 && uc != 0x000B)); } �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unictype/sy_java_whitespace.h�������������������������������������������0000664�0000000�0000000�00000006316�14110572173�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Language syntax properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_java_whitespace = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003600U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk.in.h������������������������������������������������������������0000664�0000000�0000000�00000011545�14110572173�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks in Unicode strings. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNIGBRK_H #define _UNIGBRK_H /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.h> #include "unitypes.h" #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Property defined in Unicode Standard Annex #29, section "Grapheme Cluster Boundaries" <https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries> */ /* Possible values of the Grapheme_Cluster_Break property. This enumeration may be extended in the future. */ enum { GBP_OTHER = 0, GBP_CR = 1, GBP_LF = 2, GBP_CONTROL = 3, GBP_EXTEND = 4, GBP_PREPEND = 5, GBP_SPACINGMARK = 6, GBP_L = 7, GBP_V = 8, GBP_T = 9, GBP_LV = 10, GBP_LVT = 11, GBP_RI = 12, GBP_ZWJ = 13, GBP_EB = 14, GBP_EM = 15, GBP_GAZ = 16, GBP_EBG = 17 }; /* Return the Grapheme_Cluster_Break property of a Unicode character. */ extern int uc_graphemeclusterbreak_property (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Grapheme cluster breaks. */ /* Returns true if there is a grapheme cluster boundary between Unicode code points A and B. A "grapheme cluster" is an approximation to a user-perceived character, which sometimes corresponds to multiple code points. For example, an English letter followed by an acute accent can be expressed as two consecutive Unicode code points, but it is perceived by the user as only a single character and therefore constitutes a single grapheme cluster. Implements extended (not legacy) grapheme cluster rules, because UAX #29 indicates that they are preferred. Use A == 0 or B == 0 to indicate start of text or end of text, respectively. */ extern bool uc_is_grapheme_break (ucs4_t a, ucs4_t b) _UC_ATTRIBUTE_CONST; /* Returns the start of the next grapheme cluster following S, or NULL if the end of the string has been reached. */ extern const uint8_t * u8_grapheme_next (const uint8_t *s, const uint8_t *end) _UC_ATTRIBUTE_PURE; extern const uint16_t * u16_grapheme_next (const uint16_t *s, const uint16_t *end) _UC_ATTRIBUTE_PURE; extern const uint32_t * u32_grapheme_next (const uint32_t *s, const uint32_t *end) _UC_ATTRIBUTE_PURE; /* Returns the start of the previous grapheme cluster before S, or NULL if the start of the string has been reached. */ extern const uint8_t * u8_grapheme_prev (const uint8_t *s, const uint8_t *start) _UC_ATTRIBUTE_PURE; extern const uint16_t * u16_grapheme_prev (const uint16_t *s, const uint16_t *start) _UC_ATTRIBUTE_PURE; extern const uint32_t * u32_grapheme_prev (const uint32_t *s, const uint32_t *start) _UC_ATTRIBUTE_PURE; /* Determine the grapheme cluster boundaries in S, and store the result at p[0..n-1]. p[i] = 1 means that a new grapheme cluster begins at s[i]. p[i] = 0 means that s[i-1] and s[i] are part of the same grapheme cluster. p[0] will always be 1. */ extern void u8_grapheme_breaks (const uint8_t *s, size_t n, char *p); extern void u16_grapheme_breaks (const uint16_t *s, size_t n, char *p); extern void u32_grapheme_breaks (const uint32_t *s, size_t n, char *p); extern void ulc_grapheme_breaks (const char *s, size_t n, char *p); extern void uc_grapheme_breaks (const ucs4_t *s, size_t n, char *p); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNIGBRK_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016506�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/gbrkprop.h������������������������������������������������������0000664�0000000�0000000�00000600314�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Grapheme break property of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define gbrkprop_header_0 16 #define gbrkprop_header_1 15 #define gbrkprop_header_2 7 #define gbrkprop_header_3 511 #define gbrkprop_header_4 127 static const struct { int level1[15]; short level2[3 << 9]; unsigned char level3[119 << 7]; } unigbrkprop = { { 0, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1024 }, { 0, 128, -1, -1, -1, -1, 256, -1, -1, 384, -1, 512, 640, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, -1, -1, 3712, -1, -1, -1, -1, -1, -1, -1, 3840, 3968, 4096, 4224, 4352, -1, 4480, 4608, 4736, 4864, 4992, 5120, -1, 5248, -1, -1, -1, -1, 5376, 5504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5632, 5760, 5888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6016, 6144, 6272, -1, -1, -1, -1, 6400, 6528, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6656, 6784, -1, -1, 6912, 7040, 7168, 7296, 7424, 7552, -1, 7680, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 7808, 7936, 8064, 8704, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8960, -1, -1, -1, -1, -1, 9088, 9216, -1, 9344, -1, -1, -1, 9472, -1, 9600, 9728, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9856, 9984, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10112, 10240, 10368, 10496, 10624, 10752, 10880, -1, 11008, 11136, -1, 11264, 11392, 11520, 11648, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11776, 11904, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12032, 12160, -1, -1, -1, -1, -1, -1, -1, 12288, 12416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12672, 12800, 12928, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13056, 13184, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13440, 13568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13696, -1, -1, -1, 13824, 13952, 14080, 14208, 14336, 14464, 14592, -1, -1, -1, -1, 14720, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14848, 8832, 14976, 15104, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, 8832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_LF, GBP_CONTROL, GBP_CONTROL, GBP_CR, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_PREPEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_PREPEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_PREPEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_PREPEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_EXTEND, GBP_ZWJ, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_GAZ, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_L, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LV, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_LVT, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_V, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_T, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_PREPEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_PREPEND, GBP_PREPEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_SPACINGMARK, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_SPACINGMARK, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_RI, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EM, GBP_EM, GBP_EM, GBP_EM, GBP_EM, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EBG, GBP_EBG, GBP_EBG, GBP_EBG, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_GAZ, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_GAZ, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_EB, GBP_EB, GBP_EB, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_OTHER, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_EXTEND, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL, GBP_CONTROL } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u-grapheme-breaks.h���������������������������������������������0000664�0000000�0000000�00000011563�14110572173�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ void FUNC (const UNIT *s, size_t n, char *p) { if (n > 0) { const UNIT *s_end = s + n; /* Grapheme Cluster break property of the last character. -1 at the very beginning of the string. */ int last_char_prop = -1; /* Grapheme Cluster break property of the last complex character. -1 at the very beginning of the string. */ int last_compchar_prop = -1; size_t ri_count = 0; /* Don't break inside multibyte characters. */ memset (p, 0, n); while (s < s_end) { ucs4_t uc; int count = U_MBTOUC (&uc, s, s_end - s); int prop = uc_graphemeclusterbreak_property (uc); /* Break at the start of the string (GB1). */ if (last_char_prop < 0) *p = 1; else { /* No break between CR and LF (GB3). */ if (last_char_prop == GBP_CR && prop == GBP_LF) /* *p = 0 */; /* Break before and after newlines (GB4, GB5). */ else if ((last_char_prop == GBP_CR || last_char_prop == GBP_LF || last_char_prop == GBP_CONTROL) || (prop == GBP_CR || prop == GBP_LF || prop == GBP_CONTROL)) *p = 1; /* No break between Hangul syllable sequences (GB6, GB7, GB8). */ else if ((last_char_prop == GBP_L && (prop == GBP_L || prop == GBP_V || prop == GBP_LV || prop == GBP_LVT)) || ((last_char_prop == GBP_LV || last_char_prop == GBP_V) && (prop == GBP_V || prop == GBP_T)) || ((last_char_prop == GBP_LVT || last_char_prop == GBP_T) && prop == GBP_T)) /* *p = 0 */; /* No break before extending characters or ZWJ (GB9). */ else if (prop == GBP_EXTEND || prop == GBP_ZWJ) /* *p = 0 */; /* No break before SpacingMarks (GB9a). */ else if (prop == GBP_SPACINGMARK) /* *p = 0 */; /* No break after Prepend characters (GB9b). */ else if (last_char_prop == GBP_PREPEND) /* *p = 0 */; /* No break within emoji modifier sequences (GB10). */ else if ((last_compchar_prop == GBP_EB || last_compchar_prop == GBP_EBG) && prop == GBP_EM) /* *p = 0 */; /* No break within emoji zwj sequences (GB11). */ else if (last_char_prop == GBP_ZWJ && (prop == GBP_GAZ || prop == GBP_EBG)) /* *p = 0 */; /* No break between RI if there is an odd number of RI characters before (GB12, GB13). */ else if (prop == GBP_RI) { if (ri_count % 2 == 0) *p = 1; /* else *p = 0; */ } /* Break everywhere (GBP999). */ else *p = 1; } last_char_prop = prop; if (!(prop == GBP_EXTEND && (last_compchar_prop == GBP_EB || last_compchar_prop == GBP_EBG))) last_compchar_prop = prop; if (prop == GBP_RI) ri_count++; else ri_count = 0; s += count; p += count; } } } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u16-grapheme-breaks.c�������������������������������������������0000664�0000000�0000000�00000002621�14110572173�0022321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include <string.h> #include "unistr.h" #define FUNC u16_grapheme_breaks #define UNIT uint16_t #define U_MBTOUC u16_mbtouc #include "u-grapheme-breaks.h" ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u16-grapheme-next.c���������������������������������������������0000664�0000000�0000000�00000003204�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint16_t * u16_grapheme_next (const uint16_t *s, const uint16_t *end) { ucs4_t prev; int mblen; if (s == end) return NULL; for (s += u16_mbtouc (&prev, s, end - s); s != end; s += mblen) { ucs4_t next; mblen = u16_mbtouc (&next, s, end - s); if (uc_is_grapheme_break (prev, next)) break; prev = next; } return s; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u16-grapheme-prev.c���������������������������������������������0000664�0000000�0000000�00000003424�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint16_t * u16_grapheme_prev (const uint16_t *s, const uint16_t *start) { ucs4_t next; if (s == start) return NULL; s = u16_prev (&next, s, start); while (s != start) { const uint16_t *prev_s; ucs4_t prev; prev_s = u16_prev (&prev, s, start); if (prev_s == NULL) { /* Ill-formed UTF-16 encoding. */ return start; } if (uc_is_grapheme_break (prev, next)) break; s = prev_s; next = prev; } return s; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u32-grapheme-breaks.c�������������������������������������������0000664�0000000�0000000�00000002621�14110572173�0022317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include <string.h> #include "unistr.h" #define FUNC u32_grapheme_breaks #define UNIT uint32_t #define U_MBTOUC u32_mbtouc #include "u-grapheme-breaks.h" ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u32-grapheme-next.c���������������������������������������������0000664�0000000�0000000�00000003152�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint32_t * u32_grapheme_next (const uint32_t *s, const uint32_t *end) { ucs4_t prev; if (s == end) return NULL; u32_mbtouc (&prev, s, end - s); for (s++; s != end; s++) { ucs4_t next; u32_mbtouc (&next, s, end - s); if (uc_is_grapheme_break (prev, next)) break; prev = next; } return s; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u32-grapheme-prev.c���������������������������������������������0000664�0000000�0000000�00000003321�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint32_t * u32_grapheme_prev (const uint32_t *s, const uint32_t *start) { ucs4_t next; if (s == start) return NULL; u32_prev (&next, s, start); for (s--; s != start; s--) { ucs4_t prev; if (u32_prev (&prev, s, start) == NULL) { /* Ill-formed UTF-32 encoding. */ return start; } if (uc_is_grapheme_break (prev, next)) break; next = prev; } return s; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u8-grapheme-breaks.c��������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010, based on code written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include <string.h> #include "unistr.h" #define FUNC u8_grapheme_breaks #define UNIT uint8_t #define U_MBTOUC u8_mbtouc #include "u-grapheme-breaks.h" �������������������������������������gnulib-20210822~d383792/lib/unigbrk/u8-grapheme-next.c����������������������������������������������0000664�0000000�0000000�00000003176�14110572173�0021757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint8_t * u8_grapheme_next (const uint8_t *s, const uint8_t *end) { ucs4_t prev; int mblen; if (s == end) return NULL; for (s += u8_mbtouc (&prev, s, end - s); s != end; s += mblen) { ucs4_t next; mblen = u8_mbtouc (&next, s, end - s); if (uc_is_grapheme_break (prev, next)) break; prev = next; } return s; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/u8-grapheme-prev.c����������������������������������������������0000664�0000000�0000000�00000003414�14110572173�0021750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" const uint8_t * u8_grapheme_prev (const uint8_t *s, const uint8_t *start) { ucs4_t next; if (s == start) return NULL; s = u8_prev (&next, s, start); while (s != start) { const uint8_t *prev_s; ucs4_t prev; prev_s = u8_prev (&prev, s, start); if (prev_s == NULL) { /* Ill-formed UTF-8 encoding. */ return start; } if (uc_is_grapheme_break (prev, next)) break; s = prev_s; next = prev; } return s; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/uc-gbrk-prop.c��������������������������������������������������0000664�0000000�0000000�00000003524�14110572173�0021166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break property function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "gbrkprop.h" int uc_graphemeclusterbreak_property (ucs4_t uc) { unsigned int index1 = uc >> gbrkprop_header_0; if (index1 < gbrkprop_header_1) { int lookup1 = unigbrkprop.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> gbrkprop_header_2) & gbrkprop_header_3; int lookup2 = unigbrkprop.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = uc & gbrkprop_header_4; return unigbrkprop.level3[lookup2 + index3]; } } } return GBP_OTHER; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/uc-grapheme-breaks.c��������������������������������������������0000664�0000000�0000000�00000003114�14110572173�0022313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include <string.h> /* This is similar to u32_mbtouc_unsafe(), but doesn't check invalid characters. */ static int uc_grapheme_breaks_mbtouc (ucs4_t *puc, const ucs4_t *s, size_t n) { *puc = *s; return 1; } #define FUNC uc_grapheme_breaks #define UNIT ucs4_t #define U_MBTOUC uc_grapheme_breaks_mbtouc #include "u-grapheme-breaks.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/uc-is-grapheme-break.c������������������������������������������0000664�0000000�0000000�00000015653�14110572173�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function. Copyright (C) 2010-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" /* Evaluates to true if there is an extended grapheme cluster break between code points with GBP_* values A and B, false if there is not. The comments are the grapheme cluster boundary rules from in UAX #29. */ #define UC_IS_GRAPHEME_BREAK(A, B) \ (/* GB1 and GB2 are covered--just use a GBP_CONTROL character, such \ as 0, for sot and eot. */ \ \ /* GB3 */ \ (A) == GBP_CR && (B) == GBP_LF ? false : \ \ /* GB4 */ \ (A) == GBP_CONTROL || (A) == GBP_CR || (A) == GBP_LF ? true : \ \ /* GB5 */ \ (B) == GBP_CONTROL || (B) == GBP_CR || (B) == GBP_LF ? true : \ \ /* GB6 */ \ (A) == GBP_L && ((B) == GBP_L || (B) == GBP_V \ || (B) == GBP_LV || (B) == GBP_LVT) ? false : \ \ /* GB7 */ \ ((A) == GBP_LV || (A) == GBP_V) \ && ((B) == GBP_V || (B) == GBP_T) ? false : \ \ /* GB8 */ \ ((A) == GBP_LVT || (A) == GBP_T) && (B) == GBP_T ? false : \ \ /* GB9 */ \ (B) == GBP_EXTEND || (B) == GBP_ZWJ ? false : \ \ /* GB9a */ \ (B) == GBP_SPACINGMARK ? false : \ \ /* GB9b */ \ (A) == GBP_PREPEND ? false : \ \ /* GB10 -- incomplete */ \ ((A) == GBP_EB || (A) == GBP_EBG) && (B) == GBP_EM ? false : \ \ /* GB11 */ \ (A) == GBP_ZWJ && ((B) == GBP_GAZ || (B) == GBP_EBG) ? false \ \ /* GB999 */ \ : true) #define UC_GRAPHEME_BREAKS_FOR(A) \ ( (UC_IS_GRAPHEME_BREAK(A, GBP_OTHER) << GBP_OTHER) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_CR) << GBP_CR) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_LF) << GBP_LF) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_CONTROL) << GBP_CONTROL) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_EXTEND) << GBP_EXTEND) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_PREPEND) << GBP_PREPEND) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_SPACINGMARK) << GBP_SPACINGMARK) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_L) << GBP_L) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_V) << GBP_V) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_T) << GBP_T) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_LV) << GBP_LV) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_LVT) << GBP_LVT) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_RI) << GBP_RI) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_ZWJ) << GBP_ZWJ) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_EB) << GBP_EB) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_EM) << GBP_EM) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_GAZ) << GBP_GAZ) \ | (UC_IS_GRAPHEME_BREAK(A, GBP_EBG) << GBP_EBG)) static const unsigned long int gb_table[18] = { UC_GRAPHEME_BREAKS_FOR(0), /* GBP_OTHER */ UC_GRAPHEME_BREAKS_FOR(1), /* GBP_CR */ UC_GRAPHEME_BREAKS_FOR(2), /* GBP_LF */ UC_GRAPHEME_BREAKS_FOR(3), /* GBP_CONTROL */ UC_GRAPHEME_BREAKS_FOR(4), /* GBP_EXTEND */ UC_GRAPHEME_BREAKS_FOR(5), /* GBP_PREPEND */ UC_GRAPHEME_BREAKS_FOR(6), /* GBP_SPACINGMARK */ UC_GRAPHEME_BREAKS_FOR(7), /* GBP_L */ UC_GRAPHEME_BREAKS_FOR(8), /* GBP_V */ UC_GRAPHEME_BREAKS_FOR(9), /* GBP_T */ UC_GRAPHEME_BREAKS_FOR(10), /* GBP_LV */ UC_GRAPHEME_BREAKS_FOR(11), /* GBP_LVT */ UC_GRAPHEME_BREAKS_FOR(12), /* GBP_RI */ UC_GRAPHEME_BREAKS_FOR(13), /* GBP_ZWJ */ UC_GRAPHEME_BREAKS_FOR(14), /* GBP_EB */ UC_GRAPHEME_BREAKS_FOR(15), /* GBP_EM */ UC_GRAPHEME_BREAKS_FOR(16), /* GBP_GAZ */ UC_GRAPHEME_BREAKS_FOR(17), /* GBP_EBG */ }; bool uc_is_grapheme_break (ucs4_t a, ucs4_t b) { int a_gcp, b_gcp; if ((a | b) < 0x300) { /* GB3 is the only relevant rule for this case. */ return a != '\r' || b != '\n'; } a_gcp = uc_graphemeclusterbreak_property (a); b_gcp = uc_graphemeclusterbreak_property (b); return (gb_table[a_gcp] >> b_gcp) & 1; } �������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unigbrk/ulc-grapheme-breaks.c�������������������������������������������0000664�0000000�0000000�00000010715�14110572173�0022474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 2010, based on code written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include <stdlib.h> #include <string.h> #include "c-ctype.h" #include "c-strcaseeq.h" #include "localcharset.h" #include "uniconv.h" static int is_utf8_encoding (const char *encoding) { if (STRCASEEQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return 1; return 0; } #if C_CTYPE_ASCII /* Assume that every ASCII character starts a new grapheme, which is often true, except that CR-LF is a single grapheme. */ static void ascii_grapheme_breaks (const char *s, size_t n, char *p) { size_t i; p[0] = 1; for (i = 1; i < n; i++) { bool is_ascii = c_isprint (s[i]) || c_isspace (s[i]); p[i] = is_ascii && (s[i] != '\n' || s[i - 1] != '\r'); } } #endif /* Grapheme boundaries in a string in an arbitrary encoding. We convert the input string to Unicode. The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to \U0000FFFF. UTF-16 and variants support only characters up to \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. UCS-4 specification leaves doubts about endianness and byte order mark. glibc currently interprets it as big endian without byte order mark, but this is not backed by an RFC. So we use UTF-8. It supports characters up to \U7FFFFFFF and is unambiguously defined. */ void ulc_grapheme_breaks (const char *s, size_t n, char *p) { if (n > 0) { const char *encoding = locale_charset (); if (is_utf8_encoding (encoding)) u8_grapheme_breaks ((const uint8_t *) s, n, p); else { /* Convert the string to UTF-8 and build a translation table from offsets into s to offsets into the translated string. */ size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); if (offsets != NULL) { uint8_t *t; size_t m; t = u8_conv_from_encoding (encoding, iconveh_question_mark, s, n, offsets, NULL, &m); if (t != NULL) { char *q = (char *) (m > 0 ? malloc (m) : NULL); if (m == 0 || q != NULL) { size_t i; /* Determine the grapheme breaks of the UTF-8 string. */ u8_grapheme_breaks (t, m, q); /* Translate the result back to the original string. */ memset (p, 0, n); for (i = 0; i < n; i++) if (offsets[i] != (size_t)(-1)) p[i] = q[offsets[i]]; free (q); free (t); free (offsets); return; } free (t); } free (offsets); } /* Impossible to convert. */ #if C_CTYPE_ASCII /* Fall back to ASCII as best we can. */ ascii_grapheme_breaks (s, n, p); #else /* We cannot make any assumptions. */ p[0] = 1; memset (p + 1, 0, n - 1); #endif } } } ���������������������������������������������������gnulib-20210822~d383792/lib/unilbrk.in.h������������������������������������������������������������0000664�0000000�0000000�00000010673�14110572173�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of Unicode strings. Copyright (C) 2001-2003, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNILBRK_H #define _UNILBRK_H /* Get size_t. */ #include <stddef.h> #include "unitypes.h" /* Get locale_charset() declaration. */ #include "localcharset.h" #ifdef __cplusplus extern "C" { #endif /* These functions are locale dependent. The encoding argument identifies the encoding (e.g. "ISO-8859-2" for Polish). */ /* Line breaking. */ enum { UC_BREAK_UNDEFINED, UC_BREAK_PROHIBITED, UC_BREAK_POSSIBLE, UC_BREAK_MANDATORY, UC_BREAK_HYPHENATION }; /* Determine the line break points in S, and store the result at p[0..n-1]. p[i] = UC_BREAK_MANDATORY means that s[i] is a line break character. p[i] = UC_BREAK_POSSIBLE means that a line break may be inserted between s[i-1] and s[i]. p[i] = UC_BREAK_HYPHENATION means that a hyphen and a line break may be inserted between s[i-1] and s[i]. But beware of language dependent hyphenation rules. p[i] = UC_BREAK_PROHIBITED means that s[i-1] and s[i] must not be separated. */ extern void u8_possible_linebreaks (const uint8_t *s, size_t n, const char *encoding, char *_UC_RESTRICT p); extern void u16_possible_linebreaks (const uint16_t *s, size_t n, const char *encoding, char *_UC_RESTRICT p); extern void u32_possible_linebreaks (const uint32_t *s, size_t n, const char *encoding, char *_UC_RESTRICT p); extern void ulc_possible_linebreaks (const char *s, size_t n, const char *encoding, char *_UC_RESTRICT p); /* Choose the best line breaks, assuming the uc_width function. The string is s[0..n-1]. The maximum number of columns per line is given as WIDTH. The starting column of the string is given as START_COLUMN. If the algorithm shall keep room after the last piece, they can be given as AT_END_COLUMNS. o is an optional override; if o[i] != UC_BREAK_UNDEFINED, o[i] takes precedence over p[i] as returned by the *_possible_linebreaks function. The given ENCODING is used for disambiguating widths in uc_width. Return the column after the end of the string, and store the result at p[0..n-1]. */ extern int u8_width_linebreaks (const uint8_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *_UC_RESTRICT p); extern int u16_width_linebreaks (const uint16_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *_UC_RESTRICT p); extern int u32_width_linebreaks (const uint32_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *_UC_RESTRICT p); extern int ulc_width_linebreaks (const char *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *_UC_RESTRICT p); #ifdef __cplusplus } #endif #endif /* _UNILBRK_H */ ���������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016513�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/lbrkprop1.h�����������������������������������������������������0000664�0000000�0000000�00000003100�14110572173�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Line breaking properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define lbrkprop_header_0 16 #define lbrkprop_header_1 15 #define lbrkprop_header_2 7 #define lbrkprop_header_3 511 #define lbrkprop_header_4 127 typedef struct { int level1[15]; int level2[4 << 9]; unsigned char level3[210 << 7]; } lbrkprop_t; extern const lbrkprop_t unilbrkprop; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/lbrkprop2.h�����������������������������������������������������0000664�0000000�0000000�00000737102�14110572173�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Line breaking properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ const lbrkprop_t unilbrkprop = { { 0, 512, 1024, 1024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536 }, { 0, 128, 256, 256, 256, 384, 512, 640, 256, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, 4480, 4608, 4736, 256, 256, 256, 256, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 256, 6528, 256, 256, 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 8704, 8832, 256, 256, 256, 8960, 256, 256, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 10240, 10368, 10496, 10624, 10752, 10880, 11008, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 11136, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 11264, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 11392, 256, 256, 11520, 11648, 256, 11776, 11904, 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13312, 13440, 13568, 13696, 12928, 13056, 13184, 13824, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10112, 10112, 10112, 10112, 13952, 14080, 256, 256, 14208, 14336, 14464, 14592, 14720, 14848, 14976, 15104, 15232, 15360, -1, 15488, 15616, 15744, 256, 15872, 16000, -1, 256, 256, 16128, -1, 16256, 16384, 16512, 16640, 16768, 16896, 17024, 17152, 17280, 17408, -1, -1, 17536, -1, -1, -1, 17664, 17792, 17920, 18048, 18176, 18304, 18432, -1, 18560, 18688, -1, 18816, 18944, 19072, 19200, -1, -1, 19328, -1, -1, -1, 19456, -1, -1, 19584, 19712, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 19840, 19968, 256, 20096, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 20224, 20352, 20480, 256, 20608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 20736, 20864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 20992, 21120, 21248, 21376, -1, -1, -1, -1, -1, -1, 21504, 21632, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 21760, 10112, 10112, 10112, 10112, 10112, 21888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22016, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22144, 22272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 22400, 22528, 22656, 22784, -1, 22912, -1, 23040, 23168, 23296, 256, 256, 23424, 256, 23552, 256, 256, 256, 256, 23680, 23808, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23936, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 24064, 24192, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24320, 24448, -1, -1, 10112, 10112, 24576, 24704, 10112, 10112, 10112, 24832, 24960, 25088, 25216, 25344, 25472, 25600, 25728, 25856, 25984, 26112, 26240, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 26368, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 10112, 26368, 26496, -1, 26624, 26752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BK, LBP_BK, LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_SP, LBP_EX, LBP_QU, LBP_AL, LBP_PR, LBP_PO, LBP_AL, LBP_QU, LBP_OP, LBP_CP, LBP_AL, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_AL, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CP, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_BA, LBP_CL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_OP, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_QU, LBP_AL, LBP_BA, LBP_AL, LBP_AL, LBP_PO, LBP_PR, LBP_AI, LBP_AI, LBP_BB, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_QU, LBP_AI, LBP_AI, LBP_AI, LBP_OP, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_BB, LBP_AI, LBP_AI, LBP_AI, LBP_BB, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_BB, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_GL, LBP_GL, LBP_GL, LBP_GL, LBP_GL, LBP_GL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IS, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_IS, LBP_BA, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_PR, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_EX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_HL, LBP_HL, LBP_HL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_PO, LBP_PO, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_EX, LBP_CM, LBP_XX, LBP_EX, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_PO, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_EX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IS, LBP_EX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_PO, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_PR, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_PR, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PR, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_PR, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_AL, LBP_BB, LBP_BB, LBP_GL, LBP_BB, LBP_BB, LBP_BA, LBP_GL, LBP_EX, LBP_EX, LBP_EX, LBP_EX, LBP_EX, LBP_GL, LBP_AL, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_CM, LBP_AL, LBP_CM, LBP_AL, LBP_CM, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_BB, LBP_BB, LBP_BA, LBP_BB, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_GL, LBP_GL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_BA, LBP_BA, LBP_NS, LBP_SA, LBP_BA, LBP_AL, LBP_BA, LBP_PR, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_EX, LBP_EX, LBP_BA, LBP_BA, LBP_BB, LBP_AL, LBP_EX, LBP_EX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_EX, LBP_EX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_CM, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_BA, LBP_ZW, LBP_CM, LBP_ZWJ, LBP_CM, LBP_CM, LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_B2, LBP_AI, LBP_AI, LBP_AL, LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_IN, LBP_IN, LBP_IN, LBP_BA, LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_AL, LBP_QU, LBP_QU, LBP_AI, LBP_NS, LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IS, LBP_OP, LBP_CL, LBP_NS, LBP_NS, LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_WJ, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO, LBP_PR, LBP_PR, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_PR, LBP_PR, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IN, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_ID, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_ID, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_ID, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_AL, LBP_EX, LBP_EX, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_EX, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_EX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_OP, LBP_BA, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_EX, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_B2, LBP_B2, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_OP, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_CL, LBP_CL, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_NS, LBP_OP, LBP_CL, LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_CM, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_EX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_BB, LBP_EX, LBP_EX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_HL, LBP_CM, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_AL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_XX, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_XX, LBP_HL, LBP_XX, LBP_HL, LBP_HL, LBP_XX, LBP_HL, LBP_HL, LBP_XX, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_HL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CL, LBP_OP, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_IS, LBP_CL, LBP_CL, LBP_IS, LBP_IS, LBP_EX, LBP_EX, LBP_OP, LBP_CL, LBP_IN, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_WJ, LBP_XX, LBP_EX, LBP_ID, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_EX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_OP, LBP_CL, LBP_CL, LBP_OP, LBP_CL, LBP_CL, LBP_NS, LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_PO, LBP_PR, LBP_ID, LBP_ID, LBP_ID, LBP_PR, LBP_PR, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_IN, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_BB, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_BB, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_BA, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BB, LBP_BA, LBP_BA, LBP_EX, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_SA, LBP_SA, LBP_BA, LBP_BA, LBP_BA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_BB, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_OP, LBP_OP, LBP_CL, LBP_CL, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NS, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_OP, LBP_OP, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_RI, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EM, LBP_EM, LBP_EM, LBP_EM, LBP_EM, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_ID, LBP_AL, LBP_ID, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_ID, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_QU, LBP_NS, LBP_NS, LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_EB, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_EB, LBP_EB, LBP_EB, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/lbrktables.c����������������������������������������������������0000664�0000000�0000000�00000014004�14110572173�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary tables. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk/lbrktables.h" /* Define unilbrkprop, table of line breaking properties. */ #include "unilbrk/lbrkprop2.h" const unsigned char unilbrk_table[30][30] = { /* after */ /* WJ GL B2 BA BB HY CL CP EX IN NS OP QU IS NU PO PR SY AL H2 H3 ID JL JV JT HL RI ZWJ EB EM */ /* WJ */ { P, I, I, I, I, I, P, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, }, /* GL */ { P, I, I, I, I, I, P, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, }, /* B2 */ { P, I, P, I, D, I, P, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* BA */ { P, D, D, I, D, I, P, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* BB */ { P, I, I, I, I, I, P, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, }, /* HY */ { P, D, D, I, D, I, P, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* CL */ { P, I, D, I, D, I, P, P, P, D, P, D, I, P, D, I, I, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* CP */ { P, I, D, I, D, I, P, P, P, D, P, D, I, P, I, I, I, P, I, D, D, D, D, D, D, I, D, I, D, D, }, /* EX */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* IN */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* NS */ { P, I, D, I, D, I, P, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* OP */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, }, /* QU */ { P, I, I, I, I, I, P, P, P, I, I, P, I, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, }, /* IS */ { P, I, D, I, D, I, P, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* NU */ { P, I, D, I, D, I, P, P, P, I, I, I, I, P, I, I, I, P, I, D, D, D, D, D, D, I, D, I, D, D, }, /* PO */ { P, I, D, I, D, I, P, P, P, D, I, I, I, P, I, D, D, P, I, D, D, D, D, D, D, I, D, I, D, D, }, /* PR */ { P, I, D, I, D, I, P, P, P, D, I, I, I, P, I, D, D, P, I, I, I, I, I, I, I, I, D, I, I, I, }, /* SY */ { P, I, D, I, D, I, P, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, I, D, I, D, D, }, /* AL */ { P, I, D, I, D, I, P, P, P, I, I, I, I, P, I, D, D, P, I, D, D, D, D, D, D, I, D, I, D, D, }, /* H2 */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, I, I, D, D, I, D, D, }, /* H3 */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, D, D, I, D, D, }, /* ID */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, D, D, D, I, D, D, }, /* JL */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, I, I, D, I, I, D, D, D, I, D, D, }, /* JV */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, I, I, D, D, I, D, D, }, /* JT */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, D, D, I, D, D, }, /* HL */ { P, I, D, I, D, I, P, P, P, I, I, I, I, P, I, D, D, P, I, D, D, D, D, D, D, I, D, I, D, D, }, /* RI */ { P, I, D, I, D, I, P, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, I, D, I, I, D, D, }, /* ZWJ */ { P, I, D, I, D, I, P, P, P, D, I, D, I, P, D, D, D, P, D, D, D, I, D, D, I, D, I, I, I, I, }, /* EB */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, D, I, I, D, I, }, /* EM */ { P, I, D, I, D, I, P, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, D, I, I, D, D, }, /* "" */ /* before */ }; /* Note: The (IS,AL) entry has been changed from I to D. In other words, the rule "Do not break between numeric punctuation and alphabetics" is not implemented here. We want to break before the HTML tag in strings like "<P>Some sentence.</P>" */ /* Note: The (B2,B2) entry should probably be D instead of P. */ /* Note: The (PR,ID) entry should probably be D instead of I. */ /* Note: The (WJ,*) and (GL,*) entries should probably be P instead of I. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/lbrktables.h����������������������������������������������������0000664�0000000�0000000�00000010367�14110572173�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary tables. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "unitypes.h" /* Line breaking classification. */ enum { /* Values >= 30 are resolved at run time. */ LBP_BK = 30, /* mandatory break */ /*LBP_CR, carriage return - not used here because it's a DOSism */ /*LBP_LF, line feed - not used here because it's a DOSism */ LBP_CM = 31, /* attached characters and combining marks */ /*LBP_NL, next line - not used here because it's equivalent to LBP_BK */ /*LBP_SG, surrogates - not used here because they are not characters */ LBP_WJ = 0, /* word joiner */ LBP_ZW = 32, /* zero width space */ LBP_GL = 1, /* non-breaking (glue) */ LBP_SP = 33, /* space */ LBP_B2 = 2, /* break opportunity before and after */ LBP_BA = 3, /* break opportunity after */ LBP_BB = 4, /* break opportunity before */ LBP_HY = 5, /* hyphen */ LBP_CB = 34, /* contingent break opportunity */ LBP_CL = 6, /* closing punctuation */ LBP_CP = 7, /* closing parenthesis */ LBP_EX = 8, /* exclamation/interrogation */ LBP_IN = 9, /* inseparable */ LBP_NS = 10, /* non starter */ LBP_OP = 11, /* opening punctuation */ LBP_QU = 12, /* ambiguous quotation */ LBP_IS = 13, /* infix separator (numeric) */ LBP_NU = 14, /* numeric */ LBP_PO = 15, /* postfix (numeric) */ LBP_PR = 16, /* prefix (numeric) */ LBP_SY = 17, /* symbols allowing breaks */ LBP_AI = 35, /* ambiguous (alphabetic or ideograph) */ LBP_AL = 18, /* ordinary alphabetic and symbol characters */ /*LBP_CJ, conditional Japanese starters, resolved to NS */ LBP_H2 = 19, /* Hangul LV syllable */ LBP_H3 = 20, /* Hangul LVT syllable */ LBP_HL = 25, /* Hebrew letter */ LBP_ID = 21, /* ideographic */ LBP_JL = 22, /* Hangul L Jamo */ LBP_JV = 23, /* Hangul V Jamo */ LBP_JT = 24, /* Hangul T Jamo */ LBP_RI = 26, /* regional indicator */ LBP_SA = 36, /* complex context (South East Asian) */ LBP_ZWJ = 27, /* zero width joiner */ LBP_EB = 28, /* emoji base */ LBP_EM = 29, /* emoji modifier */ LBP_XX = 37 /* unknown */ }; #include "lbrkprop1.h" static inline unsigned char unilbrkprop_lookup (ucs4_t uc) { unsigned int index1 = uc >> lbrkprop_header_0; if (index1 < lbrkprop_header_1) { int lookup1 = unilbrkprop.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> lbrkprop_header_2) & lbrkprop_header_3; int lookup2 = unilbrkprop.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = uc & lbrkprop_header_4; return unilbrkprop.level3[lookup2 + index3]; } } } return LBP_XX; } /* Table indexed by two line breaking classifications. */ #define D 1 /* direct break opportunity, empty in table 7.3 of UTR #14 */ #define I 2 /* indirect break opportunity, '%' in table 7.3 of UTR #14 */ #define P 3 /* prohibited break, '^' in table 7.3 of UTR #14 */ extern const unsigned char unilbrk_table[30][30]; /* We don't support line breaking of complex-context dependent characters (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/u16-possible-linebreaks.c���������������������������������������0000664�0000000�0000000�00000014254�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-16 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include <stdlib.h> #include <string.h> #include "unilbrk/lbrktables.h" #include "uniwidth/cjk.h" #include "unistr.h" void u16_possible_linebreaks (const uint16_t *s, size_t n, const char *encoding, char *p) { if (n > 0) { int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); const uint16_t *s_end = s + n; int last_prop = LBP_BK; /* line break property of last non-space character */ char *seen_space = NULL; /* Was a space seen after the last non-space character? */ char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ /* Don't break inside multibyte characters. */ memset (p, UC_BREAK_PROHIBITED, n); do { ucs4_t uc; int count = u16_mbtouc_unsafe (&uc, s, s_end - s); int prop = unilbrkprop_lookup (uc); if (prop == LBP_BK) { /* Mandatory break. */ *p = UC_BREAK_MANDATORY; last_prop = LBP_BK; seen_space = NULL; seen_space2 = NULL; } else { char *q; /* Resolve property values whose behaviour is not fixed. */ switch (prop) { case LBP_AI: /* Resolve ambiguous. */ prop = LBP_AI_REPLACEMENT; break; case LBP_CB: /* This is arbitrary. */ prop = LBP_ID; break; case LBP_SA: /* We don't handle complex scripts yet. Treat LBP_SA like LBP_XX. */ case LBP_XX: /* This is arbitrary. */ prop = LBP_AL; break; } /* Deal with spaces and combining characters. */ q = p; if (prop == LBP_SP) { /* Don't break just before a space. */ *p = UC_BREAK_PROHIBITED; seen_space2 = seen_space; seen_space = p; } else if (prop == LBP_ZW) { /* Don't break just before a zero-width space. */ *p = UC_BREAK_PROHIBITED; last_prop = LBP_ZW; seen_space = NULL; seen_space2 = NULL; } else if (prop == LBP_CM) { /* Don't break just before a combining character, except immediately after a zero-width space. */ if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *p = UC_BREAK_POSSIBLE; /* A combining character turns a preceding space into LBP_ID. */ last_prop = LBP_ID; } else { *p = UC_BREAK_PROHIBITED; /* A combining character turns a preceding space into LBP_ID. */ if (seen_space != NULL) { q = seen_space; seen_space = seen_space2; prop = LBP_ID; goto lookup_via_table; } } } else { lookup_via_table: /* prop must be usable as an index for table 7.3 of UTR #14. */ if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) abort (); if (last_prop == LBP_BK) { /* Don't break at the beginning of a line. */ *q = UC_BREAK_PROHIBITED; } else if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *q = UC_BREAK_POSSIBLE; } else { switch (unilbrk_table [last_prop] [prop]) { case D: *q = UC_BREAK_POSSIBLE; break; case I: *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); break; case P: *q = UC_BREAK_PROHIBITED; break; default: abort (); } } last_prop = prop; seen_space = NULL; seen_space2 = NULL; } } s += count; p += count; } while (s < s_end); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/u16-width-linebreaks.c������������������������������������������0000664�0000000�0000000�00000006640�14110572173�0022532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-16 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include "unistr.h" #include "uniwidth.h" int u16_width_linebreaks (const uint16_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *p) { const uint16_t *s_end; char *last_p; int last_column; int piece_width; u16_possible_linebreaks (s, n, encoding, p); s_end = s + n; last_p = NULL; last_column = start_column; piece_width = 0; while (s < s_end) { ucs4_t uc; int count = u16_mbtouc_unsafe (&uc, s, s_end - s); /* Respect the override. */ if (o != NULL && *o != UC_BREAK_UNDEFINED) *p = *o; if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) { /* An atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } } if (*p == UC_BREAK_MANDATORY) { /* uc is a line break character. */ /* Start a new piece at column 0. */ last_p = NULL; last_column = 0; piece_width = 0; } else { /* uc is not a line break character. */ int w; if (*p == UC_BREAK_POSSIBLE) { /* Start a new piece. */ last_p = p; last_column += piece_width; piece_width = 0; /* No line break for the moment, may be turned into UC_BREAK_POSSIBLE later, via last_p. */ } *p = UC_BREAK_PROHIBITED; w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ piece_width += w; } s += count; p += count; if (o != NULL) o += count; } /* The last atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width + at_end_columns > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } return last_column + piece_width; } ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/u32-possible-linebreaks.c���������������������������������������0000664�0000000�0000000�00000013735�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-32 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include <stdlib.h> #include "unilbrk/lbrktables.h" #include "uniwidth/cjk.h" void u32_possible_linebreaks (const uint32_t *s, size_t n, const char *encoding, char *p) { if (n > 0) { int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); const uint32_t *s_end = s + n; int last_prop = LBP_BK; /* line break property of last non-space character */ char *seen_space = NULL; /* Was a space seen after the last non-space character? */ char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ do { ucs4_t uc = *s; int prop = unilbrkprop_lookup (uc); if (prop == LBP_BK) { /* Mandatory break. */ *p = UC_BREAK_MANDATORY; last_prop = LBP_BK; seen_space = NULL; seen_space2 = NULL; } else { char *q; /* Resolve property values whose behaviour is not fixed. */ switch (prop) { case LBP_AI: /* Resolve ambiguous. */ prop = LBP_AI_REPLACEMENT; break; case LBP_CB: /* This is arbitrary. */ prop = LBP_ID; break; case LBP_SA: /* We don't handle complex scripts yet. Treat LBP_SA like LBP_XX. */ case LBP_XX: /* This is arbitrary. */ prop = LBP_AL; break; } /* Deal with spaces and combining characters. */ q = p; if (prop == LBP_SP) { /* Don't break just before a space. */ *p = UC_BREAK_PROHIBITED; seen_space2 = seen_space; seen_space = p; } else if (prop == LBP_ZW) { /* Don't break just before a zero-width space. */ *p = UC_BREAK_PROHIBITED; last_prop = LBP_ZW; seen_space = NULL; seen_space2 = NULL; } else if (prop == LBP_CM) { /* Don't break just before a combining character, except immediately after a zero-width space. */ if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *p = UC_BREAK_POSSIBLE; /* A combining character turns a preceding space into LBP_ID. */ last_prop = LBP_ID; } else { *p = UC_BREAK_PROHIBITED; /* A combining character turns a preceding space into LBP_ID. */ if (seen_space != NULL) { q = seen_space; seen_space = seen_space2; prop = LBP_ID; goto lookup_via_table; } } } else { lookup_via_table: /* prop must be usable as an index for table 7.3 of UTR #14. */ if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) abort (); if (last_prop == LBP_BK) { /* Don't break at the beginning of a line. */ *q = UC_BREAK_PROHIBITED; } else if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *q = UC_BREAK_POSSIBLE; } else { switch (unilbrk_table [last_prop] [prop]) { case D: *q = UC_BREAK_POSSIBLE; break; case I: *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); break; case P: *q = UC_BREAK_PROHIBITED; break; default: abort (); } } last_prop = prop; seen_space = NULL; seen_space2 = NULL; } } s++; p++; } while (s < s_end); } } �����������������������������������gnulib-20210822~d383792/lib/unilbrk/u32-width-linebreaks.c������������������������������������������0000664�0000000�0000000�00000006503�14110572173�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-32 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include "uniwidth.h" int u32_width_linebreaks (const uint32_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *p) { const uint32_t *s_end; char *last_p; int last_column; int piece_width; u32_possible_linebreaks (s, n, encoding, p); s_end = s + n; last_p = NULL; last_column = start_column; piece_width = 0; while (s < s_end) { ucs4_t uc = *s; /* Respect the override. */ if (o != NULL && *o != UC_BREAK_UNDEFINED) *p = *o; if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) { /* An atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } } if (*p == UC_BREAK_MANDATORY) { /* uc is a line break character. */ /* Start a new piece at column 0. */ last_p = NULL; last_column = 0; piece_width = 0; } else { /* uc is not a line break character. */ int w; if (*p == UC_BREAK_POSSIBLE) { /* Start a new piece. */ last_p = p; last_column += piece_width; piece_width = 0; /* No line break for the moment, may be turned into UC_BREAK_POSSIBLE later, via last_p. */ } *p = UC_BREAK_PROHIBITED; w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ piece_width += w; } s++; p++; if (o != NULL) o++; } /* The last atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width + at_end_columns > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } return last_column + piece_width; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/u8-possible-linebreaks.c����������������������������������������0000664�0000000�0000000�00000020332�14110572173�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-8 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include <stdlib.h> #include <string.h> #include "unilbrk/lbrktables.h" #include "uniwidth/cjk.h" #include "unistr.h" void u8_possible_linebreaks (const uint8_t *s, size_t n, const char *encoding, char *p) { if (n > 0) { int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); const uint8_t *s_end = s + n; int last_prop = LBP_BK; /* line break property of last non-space character */ char *seen_space = NULL; /* Was a space seen after the last non-space character? */ char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ /* Don't break inside multibyte characters. */ memset (p, UC_BREAK_PROHIBITED, n); do { ucs4_t uc; int count = u8_mbtouc_unsafe (&uc, s, s_end - s); int prop = unilbrkprop_lookup (uc); if (prop == LBP_BK) { /* Mandatory break. */ *p = UC_BREAK_MANDATORY; last_prop = LBP_BK; seen_space = NULL; seen_space2 = NULL; } else { char *q; /* Resolve property values whose behaviour is not fixed. */ switch (prop) { case LBP_AI: /* Resolve ambiguous. */ prop = LBP_AI_REPLACEMENT; break; case LBP_CB: /* This is arbitrary. */ prop = LBP_ID; break; case LBP_SA: /* We don't handle complex scripts yet. Treat LBP_SA like LBP_XX. */ case LBP_XX: /* This is arbitrary. */ prop = LBP_AL; break; } /* Deal with spaces and combining characters. */ q = p; if (prop == LBP_SP) { /* Don't break just before a space. */ *p = UC_BREAK_PROHIBITED; seen_space2 = seen_space; seen_space = p; } else if (prop == LBP_ZW) { /* Don't break just before a zero-width space. */ *p = UC_BREAK_PROHIBITED; last_prop = LBP_ZW; seen_space = NULL; seen_space2 = NULL; } else if (prop == LBP_CM) { /* Don't break just before a combining character, except immediately after a zero-width space. */ if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *p = UC_BREAK_POSSIBLE; /* A combining character turns a preceding space into LBP_ID. */ last_prop = LBP_ID; } else { *p = UC_BREAK_PROHIBITED; /* A combining character turns a preceding space into LBP_ID. */ if (seen_space != NULL) { q = seen_space; seen_space = seen_space2; prop = LBP_ID; goto lookup_via_table; } } } else { lookup_via_table: /* prop must be usable as an index for table 7.3 of UTR #14. */ if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) abort (); if (last_prop == LBP_BK) { /* Don't break at the beginning of a line. */ *q = UC_BREAK_PROHIBITED; } else if (last_prop == LBP_ZW) { /* Break after zero-width space. */ *q = UC_BREAK_POSSIBLE; } else { switch (unilbrk_table [last_prop] [prop]) { case D: *q = UC_BREAK_POSSIBLE; break; case I: *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); break; case P: *q = UC_BREAK_PROHIBITED; break; default: abort (); } } last_prop = prop; seen_space = NULL; seen_space2 = NULL; } } s += count; p += count; } while (s < s_end); } } #ifdef TEST #include <stdio.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { if (argc == 1) { /* Display all the break opportunities in the input string. */ char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; u8_possible_linebreaks ((uint8_t *) input, length, "UTF-8", breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case UC_BREAK_POSSIBLE: /* U+2027 in UTF-8 encoding */ putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout); break; case UC_BREAK_MANDATORY: /* U+21B2 (or U+21B5) in UTF-8 encoding */ putc (0xe2, stdout); putc (0x86, stdout); putc (0xb2, stdout); break; case UC_BREAK_PROHIBITED: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/u8-width-linebreaks.c�������������������������������������������0000664�0000000�0000000�00000012440�14110572173�0022446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-8 strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include "unistr.h" #include "uniwidth.h" int u8_width_linebreaks (const uint8_t *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *p) { const uint8_t *s_end; char *last_p; int last_column; int piece_width; u8_possible_linebreaks (s, n, encoding, p); s_end = s + n; last_p = NULL; last_column = start_column; piece_width = 0; while (s < s_end) { ucs4_t uc; int count = u8_mbtouc_unsafe (&uc, s, s_end - s); /* Respect the override. */ if (o != NULL && *o != UC_BREAK_UNDEFINED) *p = *o; if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) { /* An atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } } if (*p == UC_BREAK_MANDATORY) { /* uc is a line break character. */ /* Start a new piece at column 0. */ last_p = NULL; last_column = 0; piece_width = 0; } else { /* uc is not a line break character. */ int w; if (*p == UC_BREAK_POSSIBLE) { /* Start a new piece. */ last_p = p; last_column += piece_width; piece_width = 0; /* No line break for the moment, may be turned into UC_BREAK_POSSIBLE later, via last_p. */ } *p = UC_BREAK_PROHIBITED; w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ piece_width += w; } s += count; p += count; if (o != NULL) o += count; } /* The last atomic piece of text ends here. */ if (last_p != NULL && last_column + piece_width + at_end_columns > width) { /* Insert a line break. */ *last_p = UC_BREAK_POSSIBLE; last_column = 0; } return last_column + piece_width; } #ifdef TEST #include <stdio.h> #include <stdlib.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { if (argc == 2) { /* Insert line breaks for a given width. */ int width = atoi (argv[1]); char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; u8_width_linebreaks ((uint8_t *) input, length, width, 0, 0, NULL, "UTF-8", breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case UC_BREAK_POSSIBLE: putc ('\n', stdout); break; case UC_BREAK_MANDATORY: break; case UC_BREAK_PROHIBITED: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/ulc-common.c����������������������������������������������������0000664�0000000�0000000�00000003533�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary functions. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk/ulc-common.h" #include "c-ctype.h" #include "c-strcaseeq.h" int is_utf8_encoding (const char *encoding) { if (STRCASEEQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return 1; return 0; } #if C_CTYPE_ASCII /* Tests whether a string is entirely ASCII. Returns 1 if yes. Returns 0 if the string is in an 8-bit encoding or an ISO-2022 encoding. */ int is_all_ascii (const char *s, size_t n) { for (; n > 0; s++, n--) { unsigned char c = (unsigned char) *s; if (!(c_isprint (c) || c_isspace (c))) return 0; } return 1; } #endif /* C_CTYPE_ASCII */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/ulc-common.h����������������������������������������������������0000664�0000000�0000000�00000002761�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary functions. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Get size_t. */ #include <stddef.h> #include "c-ctype.h" #define is_utf8_encoding unilbrk_is_utf8_encoding extern int is_utf8_encoding (const char *encoding); #if C_CTYPE_ASCII # define is_all_ascii unilbrk_is_all_ascii extern int is_all_ascii (const char *s, size_t n); #endif /* C_CTYPE_ASCII */ ���������������gnulib-20210822~d383792/lib/unilbrk/ulc-possible-linebreaks.c���������������������������������������0000664�0000000�0000000�00000014377�14110572173�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include <stdlib.h> #include <string.h> #include "c-ctype.h" #include "uniconv.h" #include "unilbrk/ulc-common.h" /* Line breaking of a string in an arbitrary encoding. We convert the input string to Unicode. The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to \U0000FFFF. UTF-16 and variants support only characters up to \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. UCS-4 specification leaves doubts about endianness and byte order mark. glibc currently interprets it as big endian without byte order mark, but this is not backed by an RFC. So we use UTF-8. It supports characters up to \U7FFFFFFF and is unambiguously defined. */ void ulc_possible_linebreaks (const char *s, size_t n, const char *encoding, char *p) { if (n > 0) { if (is_utf8_encoding (encoding)) u8_possible_linebreaks ((const uint8_t *) s, n, encoding, p); else { /* Convert the string to UTF-8 and build a translation table from offsets into s to offsets into the translated string. */ size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); if (offsets != NULL) { uint8_t *t; size_t m; t = u8_conv_from_encoding (encoding, iconveh_question_mark, s, n, offsets, NULL, &m); if (t != NULL) { char *q = (char *) (m > 0 ? malloc (m) : NULL); if (m == 0 || q != NULL) { size_t i; /* Determine the possible line breaks of the UTF-8 string. */ u8_possible_linebreaks (t, m, encoding, q); /* Translate the result back to the original string. */ memset (p, UC_BREAK_PROHIBITED, n); for (i = 0; i < n; i++) if (offsets[i] != (size_t)(-1)) p[i] = q[offsets[i]]; free (q); free (t); free (offsets); return; } free (t); } free (offsets); } /* Impossible to convert. */ #if C_CTYPE_ASCII if (is_all_ascii (s, n)) { /* ASCII is a subset of UTF-8. */ u8_possible_linebreaks ((const uint8_t *) s, n, encoding, p); return; } #endif /* We have a non-ASCII string and cannot convert it. Don't produce line breaks except those already present in the input string. All we assume here is that the encoding is minimally ASCII compatible. */ { const char *s_end = s + n; while (s < s_end) { *p = (*s == '\n' ? UC_BREAK_MANDATORY : UC_BREAK_PROHIBITED); s++; p++; } } } } } #ifdef TEST #include <stdio.h> #include <locale.h> #include <string.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_CTYPE, ""); if (argc == 1) { /* Display all the break opportunities in the input string. */ char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; ulc_possible_linebreaks (input, length, locale_charset (), breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case UC_BREAK_POSSIBLE: putc ('|', stdout); break; case UC_BREAK_MANDATORY: break; case UC_BREAK_PROHIBITED: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unilbrk/ulc-width-linebreaks.c������������������������������������������0000664�0000000�0000000�00000016440�14110572173�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unilbrk.h" #include <stdlib.h> #include <string.h> #include "c-ctype.h" #include "uniconv.h" #include "unilbrk/ulc-common.h" /* Line breaking of a string in an arbitrary encoding. We convert the input string to Unicode. The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to \U0000FFFF. UTF-16 and variants support only characters up to \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. UCS-4 specification leaves doubts about endianness and byte order mark. glibc currently interprets it as big endian without byte order mark, but this is not backed by an RFC. So we use UTF-8. It supports characters up to \U7FFFFFFF and is unambiguously defined. */ int ulc_width_linebreaks (const char *s, size_t n, int width, int start_column, int at_end_columns, const char *o, const char *encoding, char *p) { if (n > 0) { if (is_utf8_encoding (encoding)) return u8_width_linebreaks ((const uint8_t *) s, n, width, start_column, at_end_columns, o, encoding, p); else { /* Convert the string to UTF-8 and build a translation table from offsets into s to offsets into the translated string. */ size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); if (offsets != NULL) { uint8_t *t; size_t m; t = u8_conv_from_encoding (encoding, iconveh_question_mark, s, n, offsets, NULL, &m); if (t != NULL) { char *memory = (char *) (m > 0 ? malloc (m + (o != NULL ? m : 0)) : NULL); if (m == 0 || memory != NULL) { char *q = (char *) memory; char *o8 = (o != NULL ? (char *) (q + m) : NULL); int res_column; size_t i; /* Translate the overrides to the UTF-8 string. */ if (o != NULL) { memset (o8, UC_BREAK_UNDEFINED, m); for (i = 0; i < n; i++) if (offsets[i] != (size_t)(-1)) o8[offsets[i]] = o[i]; } /* Determine the line breaks of the UTF-8 string. */ res_column = u8_width_linebreaks (t, m, width, start_column, at_end_columns, o8, encoding, q); /* Translate the result back to the original string. */ memset (p, UC_BREAK_PROHIBITED, n); for (i = 0; i < n; i++) if (offsets[i] != (size_t)(-1)) p[i] = q[offsets[i]]; free (memory); free (t); free (offsets); return res_column; } free (t); } free (offsets); } /* Impossible to convert. */ #if C_CTYPE_ASCII if (is_all_ascii (s, n)) { /* ASCII is a subset of UTF-8. */ return u8_width_linebreaks ((const uint8_t *) s, n, width, start_column, at_end_columns, o, encoding, p); } #endif /* We have a non-ASCII string and cannot convert it. Don't produce line breaks except those already present in the input string. All we assume here is that the encoding is minimally ASCII compatible. */ { const char *s_end = s + n; while (s < s_end) { *p = ((o != NULL && *o == UC_BREAK_MANDATORY) || *s == '\n' ? UC_BREAK_MANDATORY : UC_BREAK_PROHIBITED); s++; p++; if (o != NULL) o++; } /* We cannot compute widths in this case. */ } } } return start_column; } #ifdef TEST #include <stdio.h> #include <locale.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_CTYPE, ""); if (argc == 2) { /* Insert line breaks for a given width. */ int width = atoi (argv[1]); char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; ulc_width_linebreaks (input, length, width, 0, 0, NULL, locale_charset (), breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case UC_BREAK_POSSIBLE: putc ('\n', stdout); break; case UC_BREAK_MANDATORY: break; case UC_BREAK_PROHIBITED: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniname.in.h������������������������������������������������������������0000664�0000000�0000000�00000003625�14110572173�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Association between Unicode characters and their names. Copyright (C) 2000-2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNINAME_H #define _UNINAME_H #include "unitypes.h" #ifdef __cplusplus extern "C" { #endif /* Required size of buffer for a Unicode character name. */ #define UNINAME_MAX 256 /* Looks up the name of a Unicode character, in uppercase ASCII. Returns the filled buf, or NULL if the character does not have a name. */ extern char * unicode_character_name (ucs4_t uc, char *buf); /* Looks up the Unicode character with a given name, in upper- or lowercase ASCII. Returns the character if found, or UNINAME_INVALID if not found. */ extern ucs4_t unicode_name_character (const char *name) _UC_ATTRIBUTE_PURE; #define UNINAME_INVALID ((ucs4_t) 0xFFFF) #ifdef __cplusplus } #endif #endif /* _UNINAME_H */ �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniname/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016501�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniname/gen-uninames.lisp�����������������������������������������������0000775�0000000�0000000�00000042041�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/clisp -C ;;; Creation of gnulib's uninames.h from the UnicodeData.txt table. ;;; Copyright (C) 2000-2021 Free Software Foundation, Inc. ;;; Written by Bruno Haible <bruno@clisp.org>, 2000-12-28. ;;; ;;; This program is free software. ;;; It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". ;;; You can redistribute it and/or modify it under either ;;; - the terms of the GNU Lesser General Public License as published ;;; by the Free Software Foundation; either version 3, or (at your ;;; option) any later version, or ;;; - the terms of the GNU General Public License as published by the ;;; Free Software Foundation; either version 2, or (at your option) ;;; any later version, or ;;; - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". ;;; ;;; 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 and the GNU General Public License ;;; for more details. ;;; ;;; You should have received a copy of the GNU Lesser General Public ;;; License and of the GNU General Public License along with this ;;; program. If not, see <https://www.gnu.org/licenses/>. (defparameter add-comments nil) (defstruct unicode-char (index nil :type integer) (name nil :type string) word-indices word-indices-index ) (defstruct range (index nil :type integer) (start-code nil :type integer) (end-code nil :type integer) ) (defstruct word-list (hashed nil :type hash-table) (sorted nil :type list) size ; number of characters total length ; number of words ) (defun main (inputfile outputfile aliasfile) (declare (type string inputfile outputfile aliasfile)) #+UNICODE (setq *default-file-encoding* charset:utf-8) (let ((all-chars '()) (all-chars-hashed (make-hash-table :test #'equal)) (all-aliases '()) all-chars-and-aliases (all-ranges '()) (name-index 0) range) ;; Read all characters and names from the input file. (with-open-file (istream inputfile :direction :input) (loop (let ((line (read-line istream nil nil))) (unless line (return)) (let* ((i1 (position #\; line)) (i2 (position #\; line :start (1+ i1))) (code-string (subseq line 0 i1)) (code (parse-integer code-string :radix 16)) (name-string (subseq line (1+ i1) i2))) ; Ignore characters whose name starts with "<". (unless (eql (char name-string 0) #\<) ; Also ignore Hangul syllables; they are treated specially. (unless (<= #xAC00 code #xD7A3) ; Also ignore CJK compatibility ideographs; they are treated ; specially as well. (unless (or (<= #xF900 code #xFA2D) (<= #xFA30 code #xFA6A) (<= #xFA70 code #xFAD9) (<= #x2F800 code #x2FA1D)) ;; Also ignore variationselectors; they are treated ;; specially as well. (unless (or (<= #xFE00 code #xFE0F) (<= #xE0100 code #xE01EF)) (push (make-unicode-char :index name-index :name name-string) all-chars) (setf (gethash code all-chars-hashed) (car all-chars)) ;; Update the contiguous range, or start a new range. (if (and range (= (1+ (range-end-code range)) code)) (setf (range-end-code range) code) (progn (when range (push range all-ranges)) (setq range (make-range :index name-index :start-code code :end-code code)))) (incf name-index) (setq last-code code) ) ) ) ) ) ) ) ) (setq all-chars (nreverse all-chars)) (if range (push range all-ranges)) (setq all-ranges (nreverse all-ranges)) (when aliasfile ;; Read all characters and names from the alias file. (with-open-file (istream aliasfile :direction :input) (loop (let ((line (read-line istream nil nil))) (unless line (return)) (let* ((i1 (position #\; line)) (i2 (position #\; line :start (1+ i1))) (code-string (subseq line 0 i1)) (code (parse-integer code-string :radix 16)) (name-string (subseq line (1+ i1) i2)) (uc (gethash code all-chars-hashed))) (when uc (push (make-unicode-char :index (unicode-char-index uc) :name name-string) all-aliases) ) ) ) ) ) ) (setq all-aliases (nreverse all-aliases) all-chars-and-aliases (append all-chars all-aliases)) ;; Split into words. (let ((words-by-length (make-array 0 :adjustable t))) (dolist (name (list* "HANGUL SYLLABLE" "CJK COMPATIBILITY" "VARIATION" (mapcar #'unicode-char-name all-chars-and-aliases))) (let ((i1 0)) (loop (when (>= i1 (length name)) (return)) (let ((i2 (or (position #\Space name :start i1) (length name)))) (let* ((word (subseq name i1 i2)) (len (length word))) (when (>= len (length words-by-length)) (adjust-array words-by-length (1+ len)) ) (unless (aref words-by-length len) (setf (aref words-by-length len) (make-word-list :hashed (make-hash-table :test #'equal) :sorted '() ) ) ) (let ((word-list (aref words-by-length len))) (unless (gethash word (word-list-hashed word-list)) (setf (gethash word (word-list-hashed word-list)) t) (push word (word-list-sorted word-list)) ) ) ) (setq i1 (1+ i2)) ) ) ) ) ;; Sort the word lists. (dotimes (len (length words-by-length)) (unless (aref words-by-length len) (setf (aref words-by-length len) (make-word-list :hashed (make-hash-table :test #'equal) :sorted '() ) ) ) (let ((word-list (aref words-by-length len))) (setf (word-list-sorted word-list) (sort (word-list-sorted word-list) #'string<) ) (setf (word-list-size word-list) (reduce #'+ (mapcar #'length (word-list-sorted word-list))) ) (setf (word-list-length word-list) (length (word-list-sorted word-list)) ) ) ) ;; Output the tables. (with-open-file (ostream outputfile :direction :output #+UNICODE :external-format #+UNICODE charset:ascii) (format ostream "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */~%") (format ostream "/*~%") (format ostream " * ~A~%" (file-namestring outputfile)) (format ostream " *~%") (format ostream " * Unicode character name table.~%") (format ostream " * Generated automatically by the gen-uninames utility.~%") (format ostream " */~%") (format ostream "/* Copyright (C) 2000-2021 Free Software Foundation, Inc.~%") (format ostream "~%") (format ostream " This program is free software.~%") (format ostream " It is dual-licensed under \"the GNU LGPLv3+ or the GNU GPLv2+\".~%") (format ostream " You can redistribute it and/or modify it under either~%") (format ostream " - the terms of the GNU Lesser General Public License as published~%") (format ostream " by the Free Software Foundation; either version 3, or (at your~%") (format ostream " option) any later version, or~%") (format ostream " - the terms of the GNU General Public License as published by the~%") (format ostream " Free Software Foundation; either version 2, or (at your option)~%") (format ostream " any later version, or~%") (format ostream " - the same dual license \"the GNU LGPLv3+ or the GNU GPLv2+\".~%") (format ostream "~%") (format ostream " This program is distributed in the hope that it will be useful,~%") (format ostream " but WITHOUT ANY WARRANTY; without even the implied warranty of~%") (format ostream " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU~%") (format ostream " Lesser General Public License and the GNU General Public License~%") (format ostream " for more details.~%") (format ostream "~%") (format ostream " You should have received a copy of the GNU Lesser General Public~%") (format ostream " License and of the GNU General Public License along with this~%") (format ostream " program. If not, see <https://www.gnu.org/licenses/>. */~%") (format ostream "~%") (format ostream "static const char unicode_name_words[~D] = {~%" (let ((sum 0)) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (incf sum (word-list-size word-list)) ) ) sum ) ) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (dolist (word (word-list-sorted word-list)) (format ostream " ~{ '~C',~}~%" (coerce word 'list)) ) ) ) (format ostream "};~%") (format ostream "#define UNICODE_CHARNAME_NUM_WORDS ~D~%" (let ((sum 0)) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (incf sum (word-list-length word-list)) ) ) sum ) ) #| ; Redundant data (format ostream "static const uint16_t unicode_name_word_offsets[~D] = {~%" (let ((sum 0)) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (incf sum (word-list-length word-list)) ) ) sum ) ) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (when (word-list-sorted word-list) (format ostream " ") (do ((l (word-list-sorted word-list) (cdr l)) (offset 0 (+ offset (length (car l))))) ((endp l)) (format ostream "~<~% ~0,79:; ~D,~>" offset) ) (format ostream "~%") ) ) ) (format ostream "};~%") |# (format ostream "static const struct { uint32_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[~D] = {~%" (1+ (length words-by-length)) ) (let ((extra-offset 0) (ind-offset 0)) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (format ostream " { ~D, ~D },~%" extra-offset ind-offset) (incf extra-offset (word-list-size word-list)) (incf ind-offset (word-list-length word-list)) ) ) (format ostream " { ~D, ~D }~%" extra-offset ind-offset) ) (format ostream "};~%") (let ((ind-offset 0)) (dotimes (len (length words-by-length)) (let ((word-list (aref words-by-length len))) (dolist (word (word-list-sorted word-list)) (setf (gethash word (word-list-hashed word-list)) ind-offset) (incf ind-offset) ) ) ) ) (dolist (word '("HANGUL" "SYLLABLE" "CJK" "COMPATIBILITY" "VARIATION")) (format ostream "#define UNICODE_CHARNAME_WORD_~A ~D~%" word (gethash word (word-list-hashed (aref words-by-length (length word)))) ) ) ;; Compute the word-indices for every unicode-char. (dolist (uc all-chars-and-aliases) (let ((name (unicode-char-name uc)) (indices '())) (let ((i1 0)) (loop (when (>= i1 (length name)) (return)) (let ((i2 (or (position #\Space name :start i1) (length name)))) (let* ((word (subseq name i1 i2)) (len (length word))) (push (gethash word (word-list-hashed (aref words-by-length len))) indices ) ) (setq i1 (1+ i2)) ) ) ) (setf (unicode-char-word-indices uc) (coerce (nreverse indices) 'vector) ) ) ) ;; Sort the list of unicode-chars by word-indices. (setq all-chars-and-aliases (sort all-chars-and-aliases (lambda (vec1 vec2) (let ((len1 (length vec1)) (len2 (length vec2))) (do ((i 0 (1+ i))) (nil) (if (< i len2) (if (< i len1) (cond ((< (aref vec1 i) (aref vec2 i)) (return t)) ((> (aref vec1 i) (aref vec2 i)) (return nil)) ) (return t) ) (return nil) ) ) ) ) :key #'unicode-char-word-indices ) ) ;; Output the word-indices. (format ostream "static const uint16_t unicode_names[~D] = {~%" (reduce #'+ (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars-and-aliases)) ) (let ((i 0)) (dolist (uc all-chars-and-aliases) (format ostream " ~{ ~D,~}" (maplist (lambda (r) (+ (* 2 (car r)) (if (cdr r) 1 0))) (coerce (unicode-char-word-indices uc) 'list) ) ) (when add-comments (format ostream "~40T/* ~A */" (unicode-char-name uc)) ) (format ostream "~%") (setf (unicode-char-word-indices-index uc) i) (incf i (length (unicode-char-word-indices uc))) ) ) (format ostream "};~%") (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_name_to_index[~D] = {~%" (length all-chars-and-aliases) ) (dolist (uc all-chars-and-aliases) (format ostream " { 0x~4,'0X, ~D }," (unicode-char-index uc) (unicode-char-word-indices-index uc) ) (when add-comments (format ostream "~21T/* ~A */" (unicode-char-name uc)) ) (format ostream "~%") ) (format ostream "};~%") (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_index_to_name[~D] = {~%" (length all-chars) ) (dolist (uc (sort (copy-list all-chars) #'< :key #'unicode-char-index)) (format ostream " { 0x~4,'0X, ~D }," (unicode-char-index uc) (unicode-char-word-indices-index uc) ) (when add-comments (format ostream "~21T/* ~A */" (unicode-char-name uc)) ) (format ostream "~%") ) (format ostream "};~%") (format ostream "#define UNICODE_CHARNAME_MAX_LENGTH ~D~%" (reduce #'max (mapcar (lambda (uc) (length (unicode-char-name uc))) all-chars-and-aliases)) ) (format ostream "#define UNICODE_CHARNAME_MAX_WORDS ~D~%" (reduce #'max (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars-and-aliases)) ) (format ostream "static const struct { uint16_t index; uint32_t gap; uint16_t length; } unicode_ranges[~D] = {~%" (length all-ranges)) (dolist (range all-ranges) (format ostream " { ~D, ~D, ~D },~%" (range-index range) (- (range-start-code range) (range-index range)) (1+ (- (range-end-code range) (range-start-code range)))) ) (format ostream "};~%") ) ) ) ) (main (first *args*) (second *args*) (third *args*)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniname/uniname.c�������������������������������������������������������0000664�0000000�0000000�00000053712�14110572173�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Association between Unicode characters and their names. Copyright (C) 2000-2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniname.h" #include <assert.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <string.h> #include "attribute.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* Table of Unicode character names, derived from UnicodeData.txt. This table is generated in a way to minimize the memory footprint: 1. its compiled size is small (less than 350 KB), 2. it resides entirely in the text or read-only data segment of the executable or shared library: the table contains only immediate integers, no pointers, and the functions don't do heap allocation. */ #include "uninames.h" /* It contains: static const char unicode_name_words[36303] = ...; #define UNICODE_CHARNAME_NUM_WORDS 6260 static const struct { uint16_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[26] = ...; #define UNICODE_CHARNAME_WORD_HANGUL 3902 #define UNICODE_CHARNAME_WORD_SYLLABLE 4978 #define UNICODE_CHARNAME_WORD_CJK 417 #define UNICODE_CHARNAME_WORD_COMPATIBILITY 6107 static const uint16_t unicode_names[68940] = ...; static const struct { uint16_t index; uint32_t name:24; } unicode_name_to_index[16626] = ...; static const struct { uint16_t index; uint32_t name:24; } unicode_index_to_name[16626] = ...; #define UNICODE_CHARNAME_MAX_LENGTH 83 #define UNICODE_CHARNAME_MAX_WORDS 13 static const struct { uint32_t index; uint32_t gap; uint16_t length; } unicode_ranges[401] = ...; */ /* Returns the word with a given index. */ static const char * unicode_name_word (unsigned int index, unsigned int *lengthp) { unsigned int i1; unsigned int i2; assert (index < UNICODE_CHARNAME_NUM_WORDS); /* Binary search for i with unicode_name_by_length[i].ind_offset <= index and index < unicode_name_by_length[i+1].ind_offset */ i1 = 0; i2 = SIZEOF (unicode_name_by_length) - 1; while (i2 - i1 > 1) { unsigned int i = (i1 + i2) >> 1; if (unicode_name_by_length[i].ind_offset <= index) i1 = i; else i2 = i; } unsigned int i = i1; assert (unicode_name_by_length[i].ind_offset <= index && index < unicode_name_by_length[i+1].ind_offset); *lengthp = i; return &unicode_name_words[unicode_name_by_length[i].extra_offset + (index-unicode_name_by_length[i].ind_offset)*i]; } /* Looks up the index of a word. */ static int unicode_name_word_lookup (const char *word, size_t length) { if (length > 0 && length < SIZEOF (unicode_name_by_length) - 1) { /* Binary search among the words of given length. */ unsigned int extra_offset = unicode_name_by_length[length].extra_offset; unsigned int i0 = unicode_name_by_length[length].ind_offset; unsigned int i1 = i0; unsigned int i2 = unicode_name_by_length[length+1].ind_offset; while (i2 - i1 > 0) { unsigned int i = (i1 + i2) >> 1; const char *p = &unicode_name_words[extra_offset + (i-i0)*length]; const char *w = word; unsigned int n = length; for (;;) { if (*p < *w) { if (i1 == i) return -1; /* Note here: i1 < i < i2. */ i1 = i; break; } if (*p > *w) { /* Note here: i1 <= i < i2. */ i2 = i; break; } p++; w++; n--; if (n == 0) return i; } } } return -1; } #define UNINAME_INVALID_INDEX UINT16_MAX /* Looks up the internal index of a Unicode character. */ static uint16_t unicode_code_to_index (ucs4_t c) { /* Binary search in unicode_ranges. */ unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_ranges); for (;;) { unsigned int i = (i1 + i2) >> 1; ucs4_t start_code = unicode_ranges[i].index + unicode_ranges[i].gap; ucs4_t end_code = start_code + unicode_ranges[i].length - 1; if (start_code <= c && c <= end_code) return c - unicode_ranges[i].gap; if (end_code < c) { if (i1 == i) break; /* Note here: i1 < i < i2. */ i1 = i; } else if (c < start_code) { if (i2 == i) break; /* Note here: i1 <= i < i2. */ i2 = i; } } return UNINAME_INVALID_INDEX; } /* Looks up the codepoint of a Unicode character, from the given internal index. */ static ucs4_t unicode_index_to_code (uint16_t index) { /* Binary search in unicode_ranges. */ unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_ranges); for (;;) { unsigned int i = (i1 + i2) >> 1; uint16_t start_index = unicode_ranges[i].index; uint16_t end_index = start_index + unicode_ranges[i].length - 1; if (start_index <= index && index <= end_index) return index + unicode_ranges[i].gap; if (end_index < index) { if (i1 == i) break; /* Note here: i1 < i < i2. */ i1 = i; } else if (index < start_index) { if (i2 == i) break; /* Note here: i1 <= i < i2. */ i2 = i; } } return UNINAME_INVALID; } /* Auxiliary tables for Hangul syllable names, see the Unicode 3.0 book, sections 3.11 and 4.4. */ static const char jamo_initial_short_name[19][3] = { "G", "GG", "N", "D", "DD", "R", "M", "B", "BB", "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H" }; static const char jamo_medial_short_name[21][4] = { "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O", "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI", "YU", "EU", "YI", "I" }; static const char jamo_final_short_name[28][3] = { "", "G", "GG", "GS", "N", "NI", "NH", "D", "L", "LG", "LM", "LB", "LS", "LT", "LP", "LH", "M", "B", "BS", "S", "SS", "NG", "J", "C", "K", "T", "P", "H" }; /* Looks up the name of a Unicode character, in uppercase ASCII. Returns the filled buf, or NULL if the character does not have a name. */ char * unicode_character_name (ucs4_t c, char *buf) { if (c >= 0xAC00 && c <= 0xD7A3) { /* Special case for Hangul syllables. Keeps the tables small. */ char *ptr; unsigned int tmp; unsigned int index1; unsigned int index2; unsigned int index3; const char *q; /* buf needs to have at least 16 + 7 bytes here. */ memcpy (buf, "HANGUL SYLLABLE ", 16); ptr = buf + 16; tmp = c - 0xAC00; index3 = tmp % 28; tmp = tmp / 28; index2 = tmp % 21; tmp = tmp / 21; index1 = tmp; q = jamo_initial_short_name[index1]; while (*q != '\0') *ptr++ = *q++; q = jamo_medial_short_name[index2]; while (*q != '\0') *ptr++ = *q++; q = jamo_final_short_name[index3]; while (*q != '\0') *ptr++ = *q++; *ptr = '\0'; return buf; } else if ((c >= 0xF900 && c <= 0xFA2D) || (c >= 0xFA30 && c <= 0xFA6A) || (c >= 0xFA70 && c <= 0xFAD9) || (c >= 0x2F800 && c <= 0x2FA1D)) { /* Special case for CJK compatibility ideographs. Keeps the tables small. */ char *ptr; int i; /* buf needs to have at least 28 + 5 bytes here. */ memcpy (buf, "CJK COMPATIBILITY IDEOGRAPH-", 28); ptr = buf + 28; for (i = (c < 0x10000 ? 12 : 16); i >= 0; i -= 4) { unsigned int x = (c >> i) & 0xf; *ptr++ = (x < 10 ? '0' : 'A' - 10) + x; } *ptr = '\0'; return buf; } else if ((c >= 0xFE00 && c <= 0xFE0F) || (c >= 0xE0100 && c <= 0xE01EF)) { /* Special case for variation selectors. Keeps the tables small. */ /* buf needs to have at least 19 + 3 bytes here. */ sprintf (buf, "VARIATION SELECTOR-%d", c <= 0xFE0F ? c - 0xFE00 + 1 : c - 0xE0100 + 17); return buf; } else { uint16_t index = unicode_code_to_index (c); const uint16_t *words = NULL; if (index != UNINAME_INVALID_INDEX) { /* Binary search in unicode_code_to_name. */ unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_index_to_name); for (;;) { unsigned int i = (i1 + i2) >> 1; if (unicode_index_to_name[i].index == index) { words = &unicode_names[unicode_index_to_name[i].name]; break; } else if (unicode_index_to_name[i].index < index) { if (i1 == i) { words = NULL; break; } /* Note here: i1 < i < i2. */ i1 = i; } else if (unicode_index_to_name[i].index > index) { if (i2 == i) { words = NULL; break; } /* Note here: i1 <= i < i2. */ i2 = i; } } } if (words != NULL) { /* Found it in unicode_index_to_name. Now concatenate the words. */ /* buf needs to have at least UNICODE_CHARNAME_MAX_LENGTH bytes. */ char *ptr = buf; for (;;) { unsigned int wordlen; const char *word = unicode_name_word (*words>>1, &wordlen); do *ptr++ = *word++; while (--wordlen > 0); if ((*words & 1) == 0) break; *ptr++ = ' '; words++; } *ptr = '\0'; return buf; } return NULL; } } /* Looks up the Unicode character with a given name, in upper- or lowercase ASCII. Returns the character if found, or UNINAME_INVALID if not found. */ ucs4_t unicode_name_character (const char *name) { size_t len = strlen (name); if (len > 1 && len <= UNICODE_CHARNAME_MAX_LENGTH) { /* Test for "word1 word2 ..." syntax. */ char buf[UNICODE_CHARNAME_MAX_LENGTH]; char *ptr = buf; for (;;) { char c = *name++; if (!(c >= ' ' && c <= '~')) break; *ptr++ = (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); if (--len == 0) goto filled_buf; } if (false) filled_buf: { { /* Special case for variation selector aliases. Keeps the tables small. */ const char *p1 = buf; if (ptr >= buf + 3 && *p1++ == 'V') { if (*p1++ == 'S') { if (*p1 != '0') { unsigned int c = 0; for (;;) { if (*p1 >= '0' && *p1 <= '9') c += (*p1 - '0'); p1++; if (p1 == ptr) { if (c >= 1 && c <= 16) return c - 1 + 0xFE00; else if (c >= 17 && c <= 256) return c - 17 + 0xE0100; else break; } c = c * 10; } } } } } { /* Convert the constituents to uint16_t words. */ uint16_t words[UNICODE_CHARNAME_MAX_WORDS]; uint16_t *wordptr = words; { const char *p1 = buf; for (;;) { { int word; const char *p2 = p1; while (p2 < ptr && *p2 != ' ') p2++; word = unicode_name_word_lookup (p1, p2 - p1); if (word < 0) break; if (wordptr == &words[UNICODE_CHARNAME_MAX_WORDS]) break; *wordptr++ = word; if (p2 == ptr) goto filled_words; p1 = p2 + 1; } /* Special case for Hangul syllables. Keeps the tables small. */ if (wordptr == &words[2] && words[0] == UNICODE_CHARNAME_WORD_HANGUL && words[1] == UNICODE_CHARNAME_WORD_SYLLABLE) { /* Split the last word [p1..ptr) into three parts: 1) [BCDGHJKMNPRST] 2) [AEIOUWY] 3) [BCDGHIJKLMNPST] */ const char *p2; const char *p3; const char *p4; p2 = p1; while (p2 < ptr && (*p2 == 'B' || *p2 == 'C' || *p2 == 'D' || *p2 == 'G' || *p2 == 'H' || *p2 == 'J' || *p2 == 'K' || *p2 == 'M' || *p2 == 'N' || *p2 == 'P' || *p2 == 'R' || *p2 == 'S' || *p2 == 'T')) p2++; p3 = p2; while (p3 < ptr && (*p3 == 'A' || *p3 == 'E' || *p3 == 'I' || *p3 == 'O' || *p3 == 'U' || *p3 == 'W' || *p3 == 'Y')) p3++; p4 = p3; while (p4 < ptr && (*p4 == 'B' || *p4 == 'C' || *p4 == 'D' || *p4 == 'G' || *p4 == 'H' || *p4 == 'I' || *p4 == 'J' || *p4 == 'K' || *p4 == 'L' || *p4 == 'M' || *p4 == 'N' || *p4 == 'P' || *p4 == 'S' || *p4 == 'T')) p4++; if (p4 == ptr) { size_t n1 = p2 - p1; size_t n2 = p3 - p2; size_t n3 = p4 - p3; if (n1 <= 2 && (n2 >= 1 && n2 <= 3) && n3 <= 2) { unsigned int index1; for (index1 = 0; index1 < 19; index1++) if (memcmp (jamo_initial_short_name[index1], p1, n1) == 0 && jamo_initial_short_name[index1][n1] == '\0') { unsigned int index2; for (index2 = 0; index2 < 21; index2++) if (memcmp (jamo_medial_short_name[index2], p2, n2) == 0 && jamo_medial_short_name[index2][n2] == '\0') { unsigned int index3; for (index3 = 0; index3 < 28; index3++) if (memcmp (jamo_final_short_name[index3], p3, n3) == 0 && jamo_final_short_name[index3][n3] == '\0') { return 0xAC00 + (index1 * 21 + index2) * 28 + index3; } break; } break; } } } } /* Special case for CJK compatibility ideographs. Keeps the tables small. */ if (wordptr == &words[2] && words[0] == UNICODE_CHARNAME_WORD_CJK && words[1] == UNICODE_CHARNAME_WORD_COMPATIBILITY && p1 + 14 <= ptr && p1 + 15 >= ptr && memcmp (p1, "IDEOGRAPH-", 10) == 0) { const char *p2 = p1 + 10; if (*p2 != '0') { unsigned int c = 0; for (;;) { if (*p2 >= '0' && *p2 <= '9') c += (*p2 - '0'); else if (*p2 >= 'A' && *p2 <= 'F') c += (*p2 - 'A' + 10); else break; p2++; if (p2 == ptr) { if ((c >= 0xF900 && c <= 0xFA2D) || (c >= 0xFA30 && c <= 0xFA6A) || (c >= 0xFA70 && c <= 0xFAD9) || (c >= 0x2F800 && c <= 0x2FA1D)) return c; else break; } c = c << 4; } } } /* Special case for variation selectors. Keeps the tables small. */ if (wordptr == &words[1] && words[0] == UNICODE_CHARNAME_WORD_VARIATION && p1 + 10 <= ptr && p1 + 12 >= ptr && memcmp (p1, "SELECTOR-", 9) == 0) { const char *p2 = p1 + 9; if (*p2 != '0') { unsigned int c = 0; for (;;) { if (*p2 >= '0' && *p2 <= '9') c += (*p2 - '0'); p2++; if (p2 == ptr) { if (c >= 1 && c <= 16) return c - 1 + 0xFE00; else if (c >= 17 && c <= 256) return c - 17 + 0xE0100; else break; } c = c * 10; } } } } } if (false) filled_words: { /* Multiply by 2, to simplify later comparisons. */ size_t words_length = wordptr - words; { size_t i = words_length - 1; words[i] = 2 * words[i]; for (; i > 0; ) { --i; words[i] = 2 * words[i] + 1; } } /* Binary search in unicode_name_to_index. */ { unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_name_to_index); for (;;) { unsigned int i = (i1 + i2) >> 1; const uint16_t *w = words; const uint16_t *p = &unicode_names[unicode_name_to_index[i].name]; size_t n = words_length; for (;;) { if (*p < *w) { if (i1 == i) goto name_not_found; /* Note here: i1 < i < i2. */ i1 = i; break; } else if (*p > *w) { if (i2 == i) goto name_not_found; /* Note here: i1 <= i < i2. */ i2 = i; break; } p++; w++; n--; if (n == 0) return unicode_index_to_code (unicode_name_to_index[i].index); } } } name_not_found: ; } } } } return UNINAME_INVALID; } ������������������������������������������������������gnulib-20210822~d383792/lib/uniname/uninames.h������������������������������������������������������0000664�0000000�0000000�00011245130�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* * uninames.h * * Unicode character name table. * Generated automatically by the gen-uninames utility. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ static const char unicode_name_words[71408] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '-', 'A', 'A', '2', 'A', '3', 'A', 'A', 'A', 'B', 'A', 'C', 'A', 'D', 'A', 'E', 'A', 'G', 'A', 'H', 'A', 'I', 'A', 'K', 'A', 'L', 'A', 'M', 'A', 'N', 'A', 'O', 'A', 'P', 'A', 'Q', 'A', 'R', 'A', 'S', 'A', 'T', 'A', 'U', 'A', 'V', 'A', 'W', 'A', 'X', 'A', 'Y', 'A', 'Z', 'B', 'A', 'B', 'B', 'B', 'E', 'B', 'H', 'B', 'I', 'B', 'O', 'B', 'Q', 'B', 'U', 'B', 'Y', 'C', 'A', 'C', 'C', 'C', 'D', 'C', 'E', 'C', 'H', 'C', 'I', 'C', 'L', 'C', 'M', 'C', 'O', 'C', 'U', 'C', 'Y', 'D', '2', 'D', 'A', 'D', 'B', 'D', 'D', 'D', 'E', 'D', 'H', 'D', 'I', 'D', 'J', 'D', 'L', 'D', 'M', 'D', 'O', 'D', 'U', 'D', 'V', 'D', 'Z', 'E', '2', 'E', 'A', 'E', 'B', 'E', 'C', 'E', 'D', 'E', 'E', 'E', 'F', 'E', 'G', 'E', 'H', 'E', 'I', 'E', 'J', 'E', 'K', 'E', 'L', 'E', 'M', 'E', 'N', 'E', 'O', 'E', 'P', 'E', 'R', 'E', 'S', 'E', 'T', 'E', 'U', 'E', 'V', 'E', 'W', 'E', 'X', 'E', 'Z', 'F', 'A', 'F', 'E', 'F', 'F', 'F', 'I', 'F', 'L', 'F', 'M', 'F', 'O', 'F', 'U', 'F', 'Y', 'G', '2', 'G', 'A', 'G', 'B', 'G', 'E', 'G', 'G', 'G', 'H', 'G', 'I', 'G', 'N', 'G', 'O', 'G', 'U', 'G', 'V', 'G', 'Y', 'H', 'A', 'H', 'C', 'H', 'E', 'H', 'G', 'H', 'I', 'H', 'K', 'H', 'L', 'H', 'M', 'H', 'O', 'H', 'P', 'H', 'U', 'H', 'V', 'H', 'Z', 'I', 'A', 'I', 'B', 'I', 'C', 'I', 'D', 'I', 'E', 'I', 'F', 'I', 'G', 'I', 'H', 'I', 'I', 'I', 'J', 'I', 'L', 'I', 'M', 'I', 'N', 'I', 'O', 'I', 'P', 'I', 'Q', 'I', 'R', 'I', 'S', 'I', 'T', 'I', 'U', 'I', 'X', 'I', 'Y', 'J', 'A', 'J', 'E', 'J', 'I', 'J', 'O', 'J', 'U', 'J', 'Y', 'K', '2', 'K', 'A', 'K', 'B', 'K', 'E', 'K', 'G', 'K', 'I', 'K', 'K', 'K', 'L', 'K', 'M', 'K', 'O', 'K', 'T', 'K', 'U', 'K', 'V', 'K', 'W', 'L', '2', 'L', '3', 'L', '4', 'L', '6', 'L', 'A', 'L', 'D', 'L', 'E', 'L', 'H', 'L', 'I', 'L', 'J', 'L', 'L', 'L', 'M', 'L', 'N', 'L', 'O', 'L', 'S', 'L', 'U', 'L', 'V', 'L', 'X', 'L', 'Y', 'L', 'Z', 'M', 'A', 'M', 'B', 'M', 'C', 'M', 'D', 'M', 'E', 'M', 'G', 'M', 'H', 'M', 'I', 'M', 'L', 'M', 'M', 'M', 'O', 'M', 'S', 'M', 'U', 'M', 'V', 'M', 'W', 'M', 'Y', 'N', 'A', 'N', 'D', 'N', 'E', 'N', 'F', 'N', 'G', 'N', 'H', 'N', 'I', 'N', 'J', 'N', 'M', 'N', 'N', 'N', 'O', 'N', 'S', 'N', 'U', 'N', 'V', 'N', 'W', 'O', 'A', 'O', 'B', 'O', 'E', 'O', 'F', 'O', 'H', 'O', 'I', 'O', 'K', 'O', 'L', 'O', 'M', 'O', 'N', 'O', 'O', 'O', 'P', 'O', 'Q', 'O', 'R', 'O', 'S', 'O', 'T', 'O', 'U', 'O', 'V', 'O', 'W', 'O', 'X', 'O', 'Y', 'P', '2', 'P', 'A', 'P', 'C', 'P', 'D', 'P', 'E', 'P', 'F', 'P', 'G', 'P', 'H', 'P', 'I', 'P', 'M', 'P', 'O', 'P', 'R', 'P', 'S', 'P', 'U', 'P', 'V', 'P', 'W', 'P', 'Y', 'P', 'Z', 'Q', 'A', 'Q', 'E', 'Q', 'I', 'Q', 'N', 'Q', 'O', 'Q', 'P', 'Q', 'U', 'Q', 'Y', 'R', 'A', 'R', 'E', 'R', 'H', 'R', 'I', 'R', 'O', 'R', 'R', 'R', 'U', 'R', 'Y', 'S', 'A', 'S', 'D', 'S', 'E', 'S', 'G', 'S', 'H', 'S', 'I', 'S', 'K', 'S', 'O', 'S', 'P', 'S', 'R', 'S', 'S', 'S', 'T', 'S', 'U', 'S', 'V', 'S', 'W', 'S', 'Y', 'S', 'Z', 'T', 'A', 'T', 'C', 'T', 'E', 'T', 'H', 'T', 'I', 'T', 'N', 'T', 'O', 'T', 'R', 'T', 'S', 'T', 'T', 'T', 'U', 'T', 'Z', 'U', '2', 'U', 'A', 'U', 'B', 'U', 'C', 'U', 'D', 'U', 'E', 'U', 'H', 'U', 'I', 'U', 'K', 'U', 'M', 'U', 'N', 'U', 'O', 'U', 'P', 'U', 'R', 'U', 'S', 'U', 'U', 'U', 'Y', 'V', 'A', 'V', 'E', 'V', 'I', 'V', 'O', 'V', 'S', 'V', 'U', 'V', 'Y', 'W', 'A', 'W', 'B', 'W', 'C', 'W', 'E', 'W', 'G', 'W', 'H', 'W', 'I', 'W', 'J', 'W', 'O', 'W', 'U', 'W', 'V', 'W', 'Z', 'X', 'A', 'X', 'E', 'X', 'G', 'X', 'I', 'X', 'O', 'X', 'U', 'X', 'W', 'X', 'Y', 'Y', 'A', 'Y', 'E', 'Y', 'I', 'Y', 'N', 'Y', 'O', 'Y', 'R', 'Y', 'U', 'Y', 'V', 'Y', 'Y', 'Z', 'A', 'Z', 'E', 'Z', 'H', 'Z', 'I', 'Z', 'O', 'Z', 'U', 'Z', 'Y', '-', 'U', 'M', 'A', '-', 'O', 'A', '-', 'U', 'A', 'A', 'I', 'A', 'A', 'J', 'A', 'A', 'K', 'A', 'A', 'M', 'A', 'A', 'N', 'A', 'A', 'O', 'A', 'A', 'U', 'A', 'A', 'W', 'A', 'A', 'Y', 'A', 'B', '2', 'A', 'B', 'B', 'A', 'C', 'E', 'A', 'D', 'I', 'A', 'D', 'O', 'A', 'E', 'B', 'A', 'E', 'D', 'A', 'E', 'E', 'A', 'E', 'G', 'A', 'E', 'K', 'A', 'E', 'L', 'A', 'E', 'N', 'A', 'E', 'R', 'A', 'E', 'S', 'A', 'E', 'T', 'A', 'E', 'Y', 'A', 'G', 'E', 'A', 'H', 'H', 'A', 'I', 'N', 'A', 'I', 'R', 'A', 'L', 'F', 'A', 'L', 'I', 'A', 'L', 'L', 'A', 'L', 'M', 'A', 'L', 'T', 'A', 'M', 'B', 'A', 'N', 'D', 'A', 'N', 'G', 'A', 'N', 'N', 'A', 'N', 'O', 'A', 'N', 'T', 'A', 'O', 'R', 'A', 'O', 'U', 'A', 'P', 'L', 'A', 'R', 'C', 'A', 'R', 'E', 'A', 'R', 'M', 'A', 'S', 'H', 'A', 'S', 'Z', 'A', 'T', 'T', 'A', 'U', 'E', 'A', 'W', 'E', 'A', 'X', 'E', 'A', 'Y', 'B', 'A', 'Y', 'N', 'A', 'Z', 'U', 'B', 'A', 'A', 'B', 'A', 'D', 'B', 'A', 'G', 'B', 'A', 'H', 'B', 'A', 'L', 'B', 'A', 'N', 'B', 'A', 'P', 'B', 'A', 'R', 'B', 'A', 'T', 'B', 'A', 'U', 'B', 'A', 'X', 'B', 'B', 'A', 'B', 'B', 'E', 'B', 'B', 'I', 'B', 'B', 'O', 'B', 'B', 'U', 'B', 'B', 'Y', 'B', 'E', 'D', 'B', 'E', 'E', 'B', 'E', 'H', 'B', 'E', 'I', 'B', 'E', 'N', 'B', 'E', 'P', 'B', 'E', 'T', 'B', 'E', 'X', 'B', 'H', 'A', 'B', 'H', 'E', 'B', 'H', 'I', 'B', 'H', 'O', 'B', 'H', 'U', 'B', 'I', 'B', 'B', 'I', 'E', 'B', 'I', 'G', 'B', 'I', 'P', 'B', 'I', 'T', 'B', 'I', 'X', 'B', 'L', 'A', 'B', 'O', 'A', 'B', 'O', 'M', 'B', 'O', 'O', 'B', 'O', 'P', 'B', 'O', 'T', 'B', 'O', 'W', 'B', 'O', 'X', 'B', 'O', 'Y', 'B', 'R', 'A', 'B', 'U', 'D', 'B', 'U', 'G', 'B', 'U', 'O', 'B', 'U', 'P', 'B', 'U', 'R', 'B', 'U', 'S', 'B', 'U', 'T', 'B', 'U', 'X', 'B', 'W', 'A', 'B', 'W', 'E', 'B', 'W', 'I', 'B', 'X', 'G', 'B', 'Y', 'P', 'B', 'Y', 'R', 'B', 'Y', 'T', 'B', 'Y', 'X', 'C', 'A', 'A', 'C', 'A', 'H', 'C', 'A', 'L', 'C', 'A', 'N', 'C', 'A', 'P', 'C', 'A', 'R', 'C', 'A', 'T', 'C', 'A', 'U', 'C', 'A', 'X', 'C', 'C', 'A', 'C', 'C', 'E', 'C', 'C', 'I', 'C', 'C', 'O', 'C', 'C', 'U', 'C', 'E', 'E', 'C', 'E', 'N', 'C', 'E', 'P', 'C', 'E', 'X', 'C', 'G', 'J', 'C', 'H', 'A', 'C', 'H', 'E', 'C', 'H', 'I', 'C', 'H', 'O', 'C', 'H', 'U', 'C', 'H', 'Y', 'C', 'I', 'E', 'C', 'I', 'I', 'C', 'I', 'L', 'C', 'I', 'M', 'C', 'I', 'N', 'C', 'I', 'P', 'C', 'I', 'T', 'C', 'I', 'X', 'C', 'J', 'K', 'C', 'O', 'A', 'C', 'O', 'N', 'C', 'O', 'O', 'C', 'O', 'P', 'C', 'O', 'T', 'C', 'O', 'W', 'C', 'O', 'X', 'C', 'U', 'M', 'C', 'U', 'O', 'C', 'U', 'P', 'C', 'U', 'R', 'C', 'U', 'T', 'C', 'U', 'X', 'C', 'W', 'A', 'C', 'W', 'E', 'C', 'W', 'I', 'C', 'W', 'O', 'C', 'Y', 'A', 'C', 'Y', 'P', 'C', 'Y', 'R', 'C', 'Y', 'T', 'C', 'Y', 'X', 'D', 'A', 'A', 'D', 'A', 'D', 'D', 'A', 'G', 'D', 'A', 'H', 'D', 'A', 'I', 'D', 'A', 'L', 'D', 'A', 'M', 'D', 'A', 'P', 'D', 'A', 'R', 'D', 'A', 'T', 'D', 'A', 'X', 'D', 'A', 'Y', 'D', 'D', 'A', 'D', 'D', 'E', 'D', 'D', 'I', 'D', 'D', 'O', 'D', 'D', 'U', 'D', 'E', 'E', 'D', 'E', 'I', 'D', 'E', 'K', 'D', 'E', 'L', 'D', 'E', 'P', 'D', 'E', 'X', 'D', 'H', 'A', 'D', 'H', 'E', 'D', 'H', 'I', 'D', 'H', 'O', 'D', 'H', 'U', 'D', 'I', 'B', 'D', 'I', 'E', 'D', 'I', 'L', 'D', 'I', 'M', 'D', 'I', 'N', 'D', 'I', 'P', 'D', 'I', 'T', 'D', 'I', 'X', 'D', 'J', 'A', 'D', 'J', 'E', 'D', 'L', 'A', 'D', 'L', 'E', 'D', 'L', 'I', 'D', 'L', 'O', 'D', 'L', 'U', 'D', 'O', 'A', 'D', 'O', 'G', 'D', 'O', 'I', 'D', 'O', 'N', 'D', 'O', 'O', 'D', 'O', 'P', 'D', 'O', 'T', 'D', 'O', 'X', 'D', 'R', 'Y', 'D', 'U', 'B', 'D', 'U', 'G', 'D', 'U', 'H', 'D', 'U', 'L', 'D', 'U', 'M', 'D', 'U', 'N', 'D', 'U', 'O', 'D', 'U', 'P', 'D', 'U', 'R', 'D', 'U', 'T', 'D', 'U', 'X', 'D', 'V', 'D', 'D', 'W', 'A', 'D', 'W', 'E', 'D', 'W', 'O', 'D', 'Y', 'O', 'D', 'Z', 'A', 'D', 'Z', 'E', 'D', 'Z', 'I', 'D', 'Z', 'O', 'D', 'Z', 'U', 'E', 'A', 'R', 'E', 'A', 'T', 'E', 'C', 'H', 'E', 'C', 'S', 'E', 'D', 'D', 'E', 'E', 'H', 'E', 'E', 'N', 'E', 'G', 'G', 'E', 'G', 'Y', 'E', 'I', 'E', 'E', 'I', 'N', 'E', 'I', 'S', 'E', 'K', 'S', 'E', 'L', 'T', 'E', 'L', 'Y', 'E', 'M', 'P', 'E', 'N', 'C', 'E', 'N', 'D', 'E', 'N', 'G', 'E', 'N', 'N', 'E', 'N', 'T', 'E', 'N', 'Y', 'E', 'O', 'H', 'E', 'R', 'A', 'E', 'R', 'G', 'E', 'R', 'R', 'E', 'R', 'S', 'E', 'S', 'H', 'E', 'S', 'O', 'E', 'S', 'S', 'E', 'S', 'Z', 'E', 'T', 'A', 'E', 'T', 'H', 'E', 'T', 'Y', 'E', 'W', 'E', 'E', 'X', 'O', 'E', 'Y', 'E', 'E', 'Y', 'N', 'E', 'Z', 'H', 'E', 'Z', 'S', 'F', 'A', 'A', 'F', 'A', 'J', 'F', 'A', 'M', 'F', 'A', 'N', 'F', 'A', 'P', 'F', 'A', 'Q', 'F', 'A', 'R', 'F', 'A', 'T', 'F', 'A', 'X', 'F', 'A', 'Y', 'F', 'E', 'E', 'F', 'E', 'H', 'F', 'E', 'I', 'F', 'F', 'I', 'F', 'F', 'L', 'F', 'I', 'I', 'F', 'I', 'P', 'F', 'I', 'T', 'F', 'I', 'X', 'F', 'L', 'A', 'F', 'L', 'Y', 'F', 'O', 'G', 'F', 'O', 'M', 'F', 'O', 'N', 'F', 'O', 'O', 'F', 'O', 'P', 'F', 'O', 'R', 'F', 'O', 'X', 'F', 'S', 'I', 'F', 'U', 'A', 'F', 'U', 'E', 'F', 'U', 'P', 'F', 'U', 'R', 'F', 'U', 'T', 'F', 'U', 'X', 'F', 'W', 'A', 'F', 'W', 'E', 'F', 'W', 'I', 'F', 'Y', 'A', 'F', 'Y', 'P', 'F', 'Y', 'T', 'F', 'Y', 'X', 'G', 'A', '2', 'G', 'A', 'A', 'G', 'A', 'D', 'G', 'A', 'F', 'G', 'A', 'G', 'G', 'A', 'H', 'G', 'A', 'I', 'G', 'A', 'L', 'G', 'A', 'M', 'G', 'A', 'N', 'G', 'A', 'P', 'G', 'A', 'R', 'G', 'A', 'T', 'G', 'A', 'X', 'G', 'A', 'Y', 'G', 'B', 'A', 'G', 'B', 'E', 'G', 'B', 'I', 'G', 'B', 'O', 'G', 'B', 'U', 'G', 'E', 'E', 'G', 'E', 'M', 'G', 'E', 'N', 'G', 'E', 'P', 'G', 'E', 'R', 'G', 'E', 'T', 'G', 'E', 'X', 'G', 'G', 'A', 'G', 'G', 'E', 'G', 'G', 'I', 'G', 'G', 'O', 'G', 'G', 'U', 'G', 'H', 'A', 'G', 'H', 'E', 'G', 'H', 'I', 'G', 'H', 'O', 'G', 'H', 'U', 'G', 'H', 'Z', 'G', 'I', '4', 'G', 'I', 'E', 'G', 'I', 'G', 'G', 'I', 'M', 'G', 'I', 'P', 'G', 'I', 'T', 'G', 'I', 'X', 'G', 'J', 'E', 'G', 'L', 'A', 'G', 'O', 'A', 'G', 'O', 'K', 'G', 'O', 'O', 'G', 'O', 'P', 'G', 'O', 'T', 'G', 'O', 'X', 'G', 'P', 'A', 'G', 'R', 'U', 'G', 'U', '2', 'G', 'U', 'A', 'G', 'U', 'D', 'G', 'U', 'G', 'G', 'U', 'L', 'G', 'U', 'M', 'G', 'U', 'O', 'G', 'U', 'P', 'G', 'U', 'R', 'G', 'U', 'T', 'G', 'U', 'X', 'G', 'W', 'A', 'G', 'W', 'E', 'G', 'W', 'I', 'G', 'W', 'U', 'G', 'Y', 'A', 'G', 'Y', 'E', 'G', 'Y', 'I', 'G', 'Y', 'O', 'G', 'Y', 'U', 'H', 'A', 'A', 'H', 'A', 'E', 'H', 'A', 'H', 'H', 'A', 'I', 'H', 'A', 'L', 'H', 'A', 'M', 'H', 'A', 'N', 'H', 'A', 'O', 'H', 'A', 'P', 'H', 'A', 'R', 'H', 'A', 'T', 'H', 'A', 'U', 'H', 'A', 'X', 'H', 'D', 'R', 'H', 'E', 'E', 'H', 'E', 'H', 'H', 'E', 'I', 'H', 'E', 'N', 'H', 'E', 'P', 'H', 'E', 'T', 'H', 'E', 'X', 'H', 'H', 'A', 'H', 'H', 'E', 'H', 'H', 'I', 'H', 'H', 'O', 'H', 'H', 'U', 'H', 'I', 'E', 'H', 'I', 'I', 'H', 'I', 'N', 'H', 'I', 'P', 'H', 'I', 'T', 'H', 'L', 'A', 'H', 'L', 'E', 'H', 'L', 'I', 'H', 'L', 'O', 'H', 'L', 'U', 'H', 'L', 'Y', 'H', 'M', 'A', 'H', 'M', 'E', 'H', 'M', 'I', 'H', 'M', 'O', 'H', 'M', 'U', 'H', 'M', 'Y', 'H', 'N', 'A', 'H', 'N', 'E', 'H', 'N', 'I', 'H', 'O', 'A', 'H', 'O', 'E', 'H', 'O', 'I', 'H', 'O', 'M', 'H', 'O', 'N', 'H', 'O', 'O', 'H', 'O', 'P', 'H', 'O', 'T', 'H', 'O', 'X', 'H', 'O', 'Y', 'H', 'P', 'A', 'H', 'T', 'A', 'H', 'U', 'B', 'H', 'U', 'K', 'H', 'U', 'N', 'H', 'U', 'O', 'H', 'W', 'A', 'H', 'W', 'E', 'H', 'W', 'I', 'H', 'W', 'O', 'H', 'W', 'U', 'H', 'X', 'A', 'H', 'X', 'E', 'H', 'X', 'I', 'H', 'X', 'O', 'H', 'Y', 'A', 'H', 'Z', 'G', 'H', 'Z', 'T', 'H', 'Z', 'W', 'H', 'Z', 'Z', 'I', '-', 'A', 'I', '-', 'I', 'I', '-', 'O', 'I', '-', 'U', 'I', 'A', 'N', 'I', 'C', 'E', 'I', 'E', 'P', 'I', 'E', 'T', 'I', 'E', 'X', 'I', 'G', 'I', 'I', 'L', '2', 'I', 'M', 'N', 'I', 'M', 'P', 'I', 'N', 'G', 'I', 'N', 'I', 'I', 'N', 'K', 'I', 'N', 'N', 'I', 'N', 'Y', 'I', 'O', 'R', 'I', 'R', 'B', 'I', 'R', 'I', 'I', 'S', 'H', 'I', 'S', 'S', 'I', 'T', 'S', 'I', 'W', 'N', 'J', 'A', 'A', 'J', 'A', 'H', 'J', 'A', 'R', 'J', 'A', 'W', 'J', 'E', 'E', 'J', 'E', 'H', 'J', 'E', 'R', 'J', 'E', 'U', 'J', 'H', 'A', 'J', 'H', 'O', 'J', 'I', 'A', 'J', 'I', 'E', 'J', 'I', 'L', 'J', 'I', 'P', 'J', 'I', 'T', 'J', 'I', 'X', 'J', 'J', 'A', 'J', 'J', 'E', 'J', 'J', 'I', 'J', 'J', 'O', 'J', 'J', 'U', 'J', 'J', 'Y', 'J', 'O', 'A', 'J', 'O', 'O', 'J', 'O', 'P', 'J', 'O', 'T', 'J', 'O', 'X', 'J', 'O', 'Y', 'J', 'U', 'O', 'J', 'U', 'P', 'J', 'U', 'R', 'J', 'U', 'T', 'J', 'U', 'U', 'J', 'U', 'X', 'J', 'W', 'A', 'J', 'Y', 'P', 'J', 'Y', 'R', 'J', 'Y', 'T', 'J', 'Y', 'X', 'K', 'A', '2', 'K', 'A', 'A', 'K', 'A', 'B', 'K', 'A', 'D', 'K', 'A', 'F', 'K', 'A', 'H', 'K', 'A', 'I', 'K', 'A', 'K', 'K', 'A', 'L', 'K', 'A', 'M', 'K', 'A', 'N', 'K', 'A', 'P', 'K', 'A', 'Q', 'K', 'A', 'R', 'K', 'A', 'T', 'K', 'A', 'V', 'K', 'A', 'X', 'K', 'A', 'Y', 'K', 'E', 'B', 'K', 'E', 'E', 'K', 'E', 'H', 'K', 'E', 'N', 'K', 'E', 'P', 'K', 'E', 'S', 'K', 'E', 'T', 'K', 'E', 'V', 'K', 'E', 'X', 'K', 'E', 'Y', 'K', 'H', 'A', 'K', 'H', 'E', 'K', 'H', 'I', 'K', 'H', 'O', 'K', 'H', 'U', 'K', 'H', 'Z', 'K', 'I', 'B', 'K', 'I', 'D', 'K', 'I', 'E', 'K', 'I', 'H', 'K', 'I', 'I', 'K', 'I', 'N', 'K', 'I', 'P', 'K', 'I', 'Q', 'K', 'I', 'T', 'K', 'I', 'V', 'K', 'I', 'W', 'K', 'I', 'X', 'K', 'J', 'E', 'K', 'K', 'A', 'K', 'K', 'E', 'K', 'K', 'I', 'K', 'K', 'O', 'K', 'K', 'U', 'K', 'L', 'A', 'K', 'O', 'A', 'K', 'O', 'B', 'K', 'O', 'H', 'K', 'O', 'I', 'K', 'O', 'K', 'K', 'O', 'N', 'K', 'O', 'O', 'K', 'O', 'P', 'K', 'O', 'T', 'K', 'O', 'V', 'K', 'O', 'X', 'K', 'P', 'A', 'K', 'P', 'E', 'K', 'P', 'I', 'K', 'P', 'O', 'K', 'P', 'U', 'K', 'R', 'A', 'K', 'S', 'I', 'K', 'U', '3', 'K', 'U', '4', 'K', 'U', '7', 'K', 'U', 'A', 'K', 'U', 'B', 'K', 'U', 'G', 'K', 'U', 'L', 'K', 'U', 'N', 'K', 'U', 'O', 'K', 'U', 'P', 'K', 'U', 'Q', 'K', 'U', 'R', 'K', 'U', 'T', 'K', 'U', 'V', 'K', 'U', 'X', 'K', 'V', 'A', 'K', 'W', 'A', 'K', 'W', 'B', 'K', 'W', 'E', 'K', 'W', 'I', 'K', 'W', 'M', 'K', 'W', 'O', 'K', 'W', 'V', 'K', 'X', 'A', 'K', 'X', 'E', 'K', 'X', 'I', 'K', 'X', 'O', 'K', 'X', 'U', 'K', 'Y', 'A', 'K', 'Y', 'E', 'K', 'Y', 'I', 'K', 'Y', 'O', 'K', 'Y', 'U', 'L', 'A', 'A', 'L', 'A', 'E', 'L', 'A', 'H', 'L', 'A', 'I', 'L', 'A', 'L', 'L', 'A', 'M', 'L', 'A', 'N', 'L', 'A', 'O', 'L', 'A', 'P', 'L', 'A', 'Q', 'L', 'A', 'S', 'L', 'A', 'T', 'L', 'A', 'U', 'L', 'A', 'W', 'L', 'A', 'X', 'L', 'A', 'Y', 'L', 'C', 'E', 'L', 'C', 'I', 'L', 'D', '2', 'L', 'E', 'E', 'L', 'E', 'G', 'L', 'E', 'I', 'L', 'E', 'K', 'L', 'E', 'O', 'L', 'E', 'P', 'L', 'E', 'T', 'L', 'E', 'U', 'L', 'E', 'X', 'L', 'H', 'A', 'L', 'H', 'E', 'L', 'H', 'I', 'L', 'H', 'O', 'L', 'H', 'U', 'L', 'I', 'D', 'L', 'I', 'E', 'L', 'I', 'I', 'L', 'I', 'L', 'L', 'I', 'P', 'L', 'I', 'Q', 'L', 'I', 'S', 'L', 'I', 'T', 'L', 'I', 'X', 'L', 'J', 'E', 'L', 'L', 'A', 'L', 'L', 'E', 'L', 'L', 'L', 'L', 'O', 'A', 'L', 'O', 'G', 'L', 'O', 'M', 'L', 'O', 'O', 'L', 'O', 'P', 'L', 'O', 'Q', 'L', 'O', 'S', 'L', 'O', 'T', 'L', 'O', 'W', 'L', 'O', 'X', 'L', 'R', 'E', 'L', 'R', 'I', 'L', 'R', 'M', 'L', 'R', 'O', 'L', 'U', '2', 'L', 'U', '3', 'L', 'U', 'B', 'L', 'U', 'E', 'L', 'U', 'H', 'L', 'U', 'L', 'L', 'U', 'M', 'L', 'U', 'O', 'L', 'U', 'P', 'L', 'U', 'R', 'L', 'U', 'S', 'L', 'U', 'T', 'L', 'U', 'X', 'L', 'W', 'A', 'L', 'W', 'E', 'L', 'W', 'I', 'L', 'W', 'O', 'L', 'Y', 'A', 'L', 'Y', 'P', 'L', 'Y', 'R', 'L', 'Y', 'T', 'L', 'Y', 'X', 'L', 'Y', 'Y', 'M', 'A', '2', 'M', 'A', 'A', 'M', 'A', 'E', 'M', 'A', 'H', 'M', 'A', 'I', 'M', 'A', 'N', 'M', 'A', 'O', 'M', 'A', 'P', 'M', 'A', 'Q', 'M', 'A', 'R', 'M', 'A', 'T', 'M', 'A', 'U', 'M', 'A', 'X', 'M', 'A', 'Y', 'M', 'B', '2', 'M', 'B', '3', 'M', 'B', '4', 'M', 'B', 'A', 'M', 'B', 'E', 'M', 'B', 'I', 'M', 'B', 'O', 'M', 'B', 'U', 'M', 'E', 'D', 'M', 'E', 'E', 'M', 'E', 'M', 'M', 'E', 'N', 'M', 'E', 'S', 'M', 'E', 'X', 'M', 'F', 'O', 'M', 'G', 'A', 'M', 'G', 'E', 'M', 'G', 'O', 'M', 'G', 'U', 'M', 'H', 'A', 'M', 'H', 'Z', 'M', 'I', 'D', 'M', 'I', 'E', 'M', 'I', 'G', 'M', 'I', 'I', 'M', 'I', 'L', 'M', 'I', 'M', 'M', 'I', 'N', 'M', 'I', 'P', 'M', 'I', 'T', 'M', 'I', 'X', 'M', 'L', 'A', 'M', 'O', 'A', 'M', 'O', 'L', 'M', 'O', 'N', 'M', 'O', 'O', 'M', 'O', 'P', 'M', 'O', 'T', 'M', 'O', 'X', 'M', 'P', 'A', 'M', 'R', 'O', 'M', 'U', 'E', 'M', 'U', 'G', 'M', 'U', 'M', 'M', 'U', 'N', 'M', 'U', 'O', 'M', 'U', 'P', 'M', 'U', 'R', 'M', 'U', 'S', 'M', 'U', 'T', 'M', 'U', 'X', 'M', 'V', 'I', 'M', 'V', 'S', 'M', 'W', 'A', 'M', 'W', 'E', 'M', 'W', 'I', 'M', 'W', 'O', 'M', 'Y', 'A', 'M', 'Y', 'P', 'M', 'Y', 'T', 'M', 'Y', 'X', 'N', 'A', '2', 'N', 'A', '4', 'N', 'A', 'A', 'N', 'A', 'E', 'N', 'A', 'G', 'N', 'A', 'H', 'N', 'A', 'M', 'N', 'A', 'N', 'N', 'A', 'P', 'N', 'A', 'Q', 'N', 'A', 'R', 'N', 'A', 'U', 'N', 'A', 'X', 'N', 'A', 'Y', 'N', 'B', 'A', 'N', 'B', 'I', 'N', 'B', 'O', 'N', 'B', 'U', 'N', 'B', 'Y', 'N', 'D', 'A', 'N', 'D', 'E', 'N', 'D', 'I', 'N', 'D', 'O', 'N', 'D', 'U', 'N', 'E', 'E', 'N', 'E', 'N', 'N', 'E', 'O', 'N', 'E', 'P', 'N', 'E', 'T', 'N', 'E', 'W', 'N', 'E', 'X', 'N', 'G', 'A', 'N', 'G', 'E', 'N', 'G', 'G', 'N', 'G', 'I', 'N', 'G', 'O', 'N', 'G', 'U', 'N', 'H', 'A', 'N', 'I', '2', 'N', 'I', 'A', 'N', 'I', 'B', 'N', 'I', 'E', 'N', 'I', 'I', 'N', 'I', 'M', 'N', 'I', 'N', 'N', 'I', 'P', 'N', 'I', 'T', 'N', 'I', 'X', 'N', 'J', 'A', 'N', 'J', 'E', 'N', 'J', 'I', 'N', 'J', 'O', 'N', 'J', 'U', 'N', 'J', 'Y', 'N', 'K', 'O', 'N', 'N', 'A', 'N', 'N', 'E', 'N', 'N', 'G', 'N', 'N', 'O', 'N', 'O', 'A', 'N', 'O', 'N', 'N', 'O', 'O', 'N', 'O', 'P', 'N', 'O', 'R', 'N', 'O', 'T', 'N', 'O', 'W', 'N', 'O', 'X', 'N', 'O', 'Y', 'N', 'R', 'A', 'N', 'R', 'E', 'N', 'R', 'O', 'N', 'R', 'U', 'N', 'R', 'Y', 'N', 'S', 'A', 'N', 'T', 'U', 'N', 'U', 'E', 'N', 'U', 'M', 'N', 'U', 'N', 'N', 'U', 'O', 'N', 'U', 'P', 'N', 'U', 'R', 'N', 'U', 'T', 'N', 'U', 'X', 'N', 'W', 'A', 'N', 'W', 'E', 'N', 'W', 'I', 'N', 'W', 'O', 'N', 'Y', 'A', 'N', 'Y', 'D', 'N', 'Y', 'E', 'N', 'Y', 'I', 'N', 'Y', 'O', 'N', 'Y', 'U', 'N', 'Z', 'A', 'N', 'Z', 'E', 'N', 'Z', 'I', 'N', 'Z', 'U', 'N', 'Z', 'Y', 'O', '-', 'E', 'O', '-', 'O', 'O', '-', 'U', 'O', 'A', 'K', 'O', 'A', 'Y', 'O', 'C', 'R', 'O', 'D', 'D', 'O', 'E', 'E', 'O', 'E', 'K', 'O', 'E', 'Y', 'O', 'F', 'F', 'O', 'H', 'M', 'O', 'I', 'L', 'O', 'I', 'N', 'O', 'L', 'D', 'O', 'L', 'E', 'O', 'N', 'E', 'O', 'N', 'G', 'O', 'N', 'N', 'O', 'N', 'U', 'O', 'O', 'E', 'O', 'O', 'H', 'O', 'O', 'N', 'O', 'O', 'U', 'O', 'R', 'E', 'O', 'T', 'T', 'O', 'T', 'U', 'O', 'U', 'T', 'O', 'W', 'L', 'P', 'A', 'A', 'P', 'A', 'D', 'P', 'A', 'H', 'P', 'A', 'N', 'P', 'A', 'O', 'P', 'A', 'P', 'P', 'A', 'R', 'P', 'A', 'T', 'P', 'A', 'U', 'P', 'A', 'W', 'P', 'A', 'X', 'P', 'A', 'Y', 'P', 'D', 'F', 'P', 'D', 'I', 'P', 'E', 'E', 'P', 'E', 'H', 'P', 'E', 'N', 'P', 'E', 'R', 'P', 'E', 'S', 'P', 'E', 'T', 'P', 'H', 'A', 'P', 'H', 'E', 'P', 'H', 'I', 'P', 'H', 'O', 'P', 'H', 'U', 'P', 'I', 'E', 'P', 'I', 'G', 'P', 'I', 'I', 'P', 'I', 'N', 'P', 'I', 'P', 'P', 'I', 'T', 'P', 'I', 'X', 'P', 'L', 'A', 'P', 'O', 'A', 'P', 'O', 'N', 'P', 'O', 'O', 'P', 'O', 'P', 'P', 'O', 'T', 'P', 'O', 'X', 'P', 'O', 'Y', 'P', 'P', 'A', 'P', 'P', 'M', 'P', 'P', 'V', 'P', 'S', 'I', 'P', 'T', 'E', 'P', 'U', '2', 'P', 'U', 'B', 'P', 'U', 'E', 'P', 'U', 'M', 'P', 'U', 'O', 'P', 'U', 'P', 'P', 'U', 'Q', 'P', 'U', 'R', 'P', 'U', 'T', 'P', 'U', 'X', 'P', 'W', 'A', 'P', 'W', 'E', 'P', 'W', 'I', 'P', 'W', 'O', 'P', 'Y', 'P', 'P', 'Y', 'R', 'P', 'Y', 'T', 'P', 'Y', 'X', 'Q', 'A', 'A', 'Q', 'A', 'F', 'Q', 'A', 'I', 'Q', 'A', 'Q', 'Q', 'A', 'R', 'Q', 'A', 'U', 'Q', 'A', 'Y', 'Q', 'E', 'E', 'Q', 'G', 'A', 'Q', 'H', 'A', 'Q', 'H', 'E', 'Q', 'H', 'I', 'Q', 'H', 'O', 'Q', 'H', 'U', 'Q', 'I', 'E', 'Q', 'I', 'F', 'Q', 'I', 'I', 'Q', 'I', 'P', 'Q', 'I', 'T', 'Q', 'I', 'X', 'Q', 'O', 'A', 'Q', 'O', 'F', 'Q', 'O', 'O', 'Q', 'O', 'P', 'Q', 'O', 'T', 'Q', 'O', 'X', 'Q', 'U', 'A', 'Q', 'U', 'E', 'Q', 'U', 'F', 'Q', 'U', 'I', 'Q', 'U', 'K', 'Q', 'U', 'O', 'Q', 'U', 'P', 'Q', 'U', 'R', 'Q', 'U', 'T', 'Q', 'U', 'U', 'Q', 'U', 'V', 'Q', 'U', 'X', 'Q', 'W', 'A', 'Q', 'W', 'E', 'Q', 'W', 'I', 'Q', 'Y', 'A', 'Q', 'Y', 'E', 'Q', 'Y', 'I', 'Q', 'Y', 'O', 'Q', 'Y', 'P', 'Q', 'Y', 'R', 'Q', 'Y', 'T', 'Q', 'Y', 'U', 'Q', 'Y', 'X', 'R', 'A', '2', 'R', 'A', '3', 'R', 'A', 'A', 'R', 'A', 'B', 'R', 'A', 'D', 'R', 'A', 'E', 'R', 'A', 'H', 'R', 'A', 'I', 'R', 'A', 'M', 'R', 'A', 'N', 'R', 'A', 'P', 'R', 'A', 'Q', 'R', 'A', 'T', 'R', 'A', 'U', 'R', 'A', 'X', 'R', 'A', 'Y', 'R', 'D', 'O', 'R', 'E', 'D', 'R', 'E', 'E', 'R', 'E', 'H', 'R', 'E', 'I', 'R', 'E', 'N', 'R', 'E', 'P', 'R', 'E', 'U', 'R', 'E', 'X', 'R', 'H', 'A', 'R', 'H', 'O', 'R', 'I', 'I', 'R', 'I', 'M', 'R', 'I', 'N', 'R', 'I', 'P', 'R', 'J', 'E', 'R', 'L', 'E', 'R', 'L', 'I', 'R', 'L', 'M', 'R', 'L', 'O', 'R', 'M', 'T', 'R', 'O', '2', 'R', 'O', 'A', 'R', 'O', 'C', 'R', 'O', 'D', 'R', 'O', 'G', 'R', 'O', 'M', 'R', 'O', 'O', 'R', 'O', 'P', 'R', 'O', 'T', 'R', 'O', 'X', 'R', 'R', 'A', 'R', 'R', 'E', 'R', 'R', 'O', 'R', 'R', 'U', 'R', 'R', 'Y', 'R', 'U', 'A', 'R', 'U', 'B', 'R', 'U', 'E', 'R', 'U', 'M', 'R', 'U', 'N', 'R', 'U', 'O', 'R', 'U', 'P', 'R', 'U', 'R', 'R', 'U', 'T', 'R', 'U', 'X', 'R', 'W', 'A', 'R', 'W', 'E', 'R', 'W', 'I', 'R', 'W', 'O', 'R', 'Y', 'A', 'R', 'Y', 'P', 'R', 'Y', 'R', 'R', 'Y', 'T', 'R', 'Y', 'X', 'R', 'Y', 'Y', 'S', '-', 'W', 'S', 'A', 'A', 'S', 'A', 'D', 'S', 'A', 'G', 'S', 'A', 'H', 'S', 'A', 'L', 'S', 'A', 'M', 'S', 'A', 'N', 'S', 'A', 'P', 'S', 'A', 'Q', 'S', 'A', 'R', 'S', 'A', 'T', 'S', 'A', 'W', 'S', 'A', 'X', 'S', 'A', 'Y', 'S', 'E', 'E', 'S', 'E', 'H', 'S', 'E', 'P', 'S', 'E', 'T', 'S', 'E', 'X', 'S', 'H', '2', 'S', 'H', 'A', 'S', 'H', 'E', 'S', 'H', 'I', 'S', 'H', 'O', 'S', 'H', 'U', 'S', 'H', 'V', 'S', 'H', 'Y', 'S', 'I', 'A', 'S', 'I', 'E', 'S', 'I', 'G', 'S', 'I', 'I', 'S', 'I', 'N', 'S', 'I', 'P', 'S', 'I', 'T', 'S', 'I', 'X', 'S', 'J', 'E', 'S', 'K', 'I', 'S', 'K', 'W', 'S', 'N', 'A', 'S', 'O', 'A', 'S', 'O', 'F', 'S', 'O', 'M', 'S', 'O', 'N', 'S', 'O', 'O', 'S', 'O', 'P', 'S', 'O', 'Q', 'S', 'O', 'S', 'S', 'O', 'T', 'S', 'O', 'U', 'S', 'O', 'W', 'S', 'O', 'X', 'S', 'O', 'Y', 'S', 'P', 'Y', 'S', 'S', 'A', 'S', 'S', 'E', 'S', 'S', 'I', 'S', 'S', 'O', 'S', 'S', 'U', 'S', 'S', 'Y', 'S', 'T', '2', 'S', 'U', 'A', 'S', 'U', 'D', 'S', 'U', 'E', 'S', 'U', 'M', 'S', 'U', 'N', 'S', 'U', 'O', 'S', 'U', 'P', 'S', 'U', 'R', 'S', 'U', 'T', 'S', 'U', 'U', 'S', 'U', 'X', 'S', 'W', 'A', 'S', 'W', 'E', 'S', 'W', 'G', 'S', 'W', 'I', 'S', 'W', 'O', 'S', 'W', 'Z', 'S', 'Y', 'A', 'S', 'Y', 'P', 'S', 'Y', 'R', 'S', 'Y', 'T', 'S', 'Y', 'X', 'S', 'Z', 'A', 'S', 'Z', 'E', 'S', 'Z', 'I', 'S', 'Z', 'O', 'S', 'Z', 'U', 'S', 'Z', 'Z', 'T', 'A', '2', 'T', 'A', 'A', 'T', 'A', 'B', 'T', 'A', 'E', 'T', 'A', 'G', 'T', 'A', 'H', 'T', 'A', 'I', 'T', 'A', 'K', 'T', 'A', 'M', 'T', 'A', 'N', 'T', 'A', 'O', 'T', 'A', 'P', 'T', 'A', 'Q', 'T', 'A', 'R', 'T', 'A', 'S', 'T', 'A', 'T', 'T', 'A', 'U', 'T', 'A', 'V', 'T', 'A', 'W', 'T', 'A', 'X', 'T', 'A', 'Y', 'T', 'E', 'E', 'T', 'E', 'H', 'T', 'E', 'K', 'T', 'E', 'N', 'T', 'E', 'P', 'T', 'E', 'T', 'T', 'E', 'U', 'T', 'E', 'X', 'T', 'H', 'A', 'T', 'H', 'E', 'T', 'H', 'I', 'T', 'H', 'O', 'T', 'H', 'U', 'T', 'H', 'Z', 'T', 'I', '2', 'T', 'I', 'E', 'T', 'I', 'I', 'T', 'I', 'L', 'T', 'I', 'N', 'T', 'I', 'P', 'T', 'I', 'R', 'T', 'I', 'T', 'T', 'I', 'X', 'T', 'J', 'E', 'T', 'L', 'A', 'T', 'L', 'E', 'T', 'L', 'I', 'T', 'L', 'O', 'T', 'L', 'U', 'T', 'L', 'V', 'T', 'O', 'A', 'T', 'O', 'N', 'T', 'O', 'O', 'T', 'O', 'P', 'T', 'O', 'Q', 'T', 'O', 'S', 'T', 'O', 'T', 'T', 'O', 'V', 'T', 'O', 'X', 'T', 'R', 'A', 'T', 'R', 'I', 'T', 'S', 'A', 'T', 'S', 'E', 'T', 'S', 'I', 'T', 'S', 'O', 'T', 'S', 'U', 'T', 'S', 'V', 'T', 'T', '2', 'T', 'T', 'A', 'T', 'T', 'E', 'T', 'T', 'H', 'T', 'T', 'I', 'T', 'T', 'O', 'T', 'T', 'U', 'T', 'U', 'B', 'T', 'U', 'K', 'T', 'U', 'M', 'T', 'U', 'O', 'T', 'U', 'P', 'T', 'U', 'R', 'T', 'U', 'T', 'T', 'U', 'X', 'T', 'W', 'A', 'T', 'W', 'E', 'T', 'W', 'I', 'T', 'W', 'O', 'T', 'Y', 'A', 'T', 'Y', 'E', 'T', 'Y', 'I', 'T', 'Y', 'O', 'T', 'Y', 'R', 'T', 'Z', 'A', 'T', 'Z', 'E', 'T', 'Z', 'I', 'T', 'Z', 'O', 'T', 'Z', 'U', 'U', '-', 'A', 'U', '-', 'U', 'U', 'A', 'N', 'U', 'E', 'A', 'U', 'E', 'E', 'U', 'E', 'I', 'U', 'E', 'Y', 'U', 'H', 'D', 'U', 'K', 'U', 'U', 'L', 'U', 'U', 'N', 'A', 'U', 'N', 'G', 'U', 'N', 'K', 'U', 'N', 'N', 'U', 'O', 'N', 'U', 'O', 'P', 'U', 'O', 'X', 'U', 'R', '2', 'U', 'R', '4', 'U', 'R', 'A', 'U', 'R', 'I', 'U', 'R', 'N', 'U', 'R', 'U', 'U', 'S', 'E', 'U', 'S', 'H', 'U', 'U', 'E', 'U', 'U', 'U', 'U', 'W', 'U', 'U', 'Z', '3', 'U', 'Z', 'U', 'V', 'A', 'A', 'V', 'A', 'H', 'V', 'A', 'I', 'V', 'A', 'J', 'V', 'A', 'P', 'V', 'A', 'T', 'V', 'A', 'U', 'V', 'A', 'V', 'V', 'A', 'X', 'V', 'E', 'E', 'V', 'E', 'H', 'V', 'E', 'P', 'V', 'E', 'R', 'V', 'E', 'W', 'V', 'E', 'X', 'V', 'F', 'A', 'V', 'I', 'E', 'V', 'I', 'N', 'V', 'I', 'P', 'V', 'I', 'T', 'V', 'I', 'X', 'V', 'O', 'D', 'V', 'O', 'M', 'V', 'O', 'O', 'V', 'O', 'P', 'V', 'O', 'S', 'V', 'O', 'T', 'V', 'O', 'U', 'V', 'O', 'W', 'V', 'O', 'X', 'V', 'U', 'P', 'V', 'U', 'R', 'V', 'U', 'T', 'V', 'U', 'X', 'V', 'W', 'A', 'V', 'W', 'J', 'V', 'Y', 'P', 'V', 'Y', 'R', 'V', 'Y', 'T', 'V', 'Y', 'X', 'W', 'A', 'A', 'W', 'A', 'E', 'W', 'A', 'I', 'W', 'A', 'N', 'W', 'A', 'P', 'W', 'A', 'T', 'W', 'A', 'U', 'W', 'A', 'W', 'W', 'A', 'X', 'W', 'A', 'Y', 'W', 'E', 'B', 'W', 'E', 'E', 'W', 'E', 'I', 'W', 'E', 'N', 'W', 'E', 'O', 'W', 'E', 'P', 'W', 'E', 'X', 'W', 'I', 'I', 'W', 'I', 'N', 'W', 'O', 'A', 'W', 'O', 'E', 'W', 'O', 'N', 'W', 'O', 'O', 'W', 'O', 'P', 'W', 'O', 'W', 'W', 'O', 'X', 'W', 'R', 'Y', 'W', 'U', 'E', 'W', 'U', 'I', 'W', 'U', 'N', 'W', 'U', 'O', 'W', 'U', 'P', 'W', 'V', 'A', 'W', 'V', 'E', 'W', 'V', 'I', 'X', '-', 'X', 'X', 'A', 'A', 'X', 'A', 'N', 'X', 'A', 'U', 'X', 'E', 'E', 'X', 'E', 'H', 'X', 'I', 'E', 'X', 'I', 'P', 'X', 'I', 'T', 'X', 'I', 'X', 'X', 'O', 'A', 'X', 'O', 'P', 'X', 'O', 'R', 'X', 'O', 'T', 'X', 'O', 'X', 'X', 'U', 'O', 'X', 'V', 'A', 'X', 'V', 'E', 'X', 'W', 'A', 'X', 'W', 'E', 'X', 'W', 'I', 'X', 'Y', 'A', 'X', 'Y', 'E', 'X', 'Y', 'I', 'X', 'Y', 'O', 'X', 'Y', 'P', 'X', 'Y', 'R', 'X', 'Y', 'T', 'X', 'Y', 'U', 'X', 'Y', 'X', 'Y', 'A', 'A', 'Y', 'A', 'B', 'Y', 'A', 'D', 'Y', 'A', 'E', 'Y', 'A', 'F', 'Y', 'A', 'G', 'Y', 'A', 'H', 'Y', 'A', 'J', 'Y', 'A', 'K', 'Y', 'A', 'L', 'Y', 'A', 'M', 'Y', 'A', 'N', 'Y', 'A', 'P', 'Y', 'A', 'Q', 'Y', 'A', 'R', 'Y', 'A', 'S', 'Y', 'A', 'T', 'Y', 'A', 'U', 'Y', 'A', 'V', 'Y', 'A', 'W', 'Y', 'A', 'Y', 'Y', 'A', 'Z', 'Y', 'E', 'A', 'Y', 'E', 'E', 'Y', 'E', 'H', 'Y', 'E', 'N', 'Y', 'E', 'O', 'Y', 'E', 'R', 'Y', 'E', 'W', 'Y', 'E', 'Y', 'Y', 'H', 'E', 'Y', 'I', 'E', 'Y', 'I', 'G', 'Y', 'I', 'I', 'Y', 'I', 'N', 'Y', 'I', 'P', 'Y', 'I', 'T', 'Y', 'I', 'X', 'Y', 'O', 'A', 'Y', 'O', 'D', 'Y', 'O', 'O', 'Y', 'O', 'P', 'Y', 'O', 'Q', 'Y', 'O', 'T', 'Y', 'O', 'X', 'Y', 'O', 'Y', 'Y', 'R', 'Y', 'Y', 'U', 'E', 'Y', 'U', 'J', 'Y', 'U', 'M', 'Y', 'U', 'N', 'Y', 'U', 'O', 'Y', 'U', 'P', 'Y', 'U', 'Q', 'Y', 'U', 'R', 'Y', 'U', 'S', 'Y', 'U', 'T', 'Y', 'U', 'X', 'Y', 'W', 'A', 'Y', 'W', 'E', 'Y', 'W', 'I', 'Y', 'W', 'O', 'Y', 'Y', 'A', 'Y', 'Y', 'E', 'Y', 'Y', 'P', 'Y', 'Y', 'R', 'Y', 'Y', 'T', 'Y', 'Y', 'X', 'Z', 'A', '7', 'Z', 'A', 'A', 'Z', 'A', 'G', 'Z', 'A', 'H', 'Z', 'A', 'I', 'Z', 'A', 'L', 'Z', 'A', 'P', 'Z', 'A', 'T', 'Z', 'A', 'X', 'Z', 'E', '2', 'Z', 'E', 'E', 'Z', 'E', 'N', 'Z', 'E', 'P', 'Z', 'E', 'X', 'Z', 'H', 'A', 'Z', 'H', 'E', 'Z', 'H', 'I', 'Z', 'H', 'O', 'Z', 'H', 'U', 'Z', 'H', 'Y', 'Z', 'I', '3', 'Z', 'I', 'B', 'Z', 'I', 'E', 'Z', 'I', 'G', 'Z', 'I', 'P', 'Z', 'I', 'T', 'Z', 'I', 'X', 'Z', 'J', 'E', 'Z', 'L', 'A', 'Z', 'O', 'A', 'Z', 'O', 'O', 'Z', 'O', 'P', 'Z', 'O', 'T', 'Z', 'O', 'X', 'Z', 'R', 'A', 'Z', 'S', 'A', 'Z', 'U', '5', 'Z', 'U', 'M', 'Z', 'U', 'O', 'Z', 'U', 'P', 'Z', 'U', 'R', 'Z', 'U', 'T', 'Z', 'U', 'X', 'Z', 'W', 'A', 'Z', 'W', 'J', 'Z', 'Y', 'P', 'Z', 'Y', 'R', 'Z', 'Y', 'T', 'Z', 'Y', 'X', 'Z', 'Z', 'A', 'Z', 'Z', 'E', 'Z', 'Z', 'I', 'Z', 'Z', 'O', 'Z', 'Z', 'U', 'Z', 'Z', 'Y', 'A', '-', 'E', 'U', 'A', '0', '0', '1', 'A', '0', '0', '2', 'A', '0', '0', '3', 'A', '0', '0', '4', 'A', '0', '0', '5', 'A', '0', '0', '6', 'A', '0', '0', '7', 'A', '0', '0', '8', 'A', '0', '0', '9', 'A', '0', '1', '0', 'A', '0', '1', '1', 'A', '0', '1', '2', 'A', '0', '1', '3', 'A', '0', '1', '4', 'A', '0', '1', '5', 'A', '0', '1', '6', 'A', '0', '1', '7', 'A', '0', '1', '8', 'A', '0', '1', '9', 'A', '0', '2', '0', 'A', '0', '2', '1', 'A', '0', '2', '2', 'A', '0', '2', '3', 'A', '0', '2', '4', 'A', '0', '2', '5', 'A', '0', '2', '6', 'A', '0', '2', '7', 'A', '0', '2', '8', 'A', '0', '2', '9', 'A', '0', '3', '0', 'A', '0', '3', '1', 'A', '0', '3', '2', 'A', '0', '3', '3', 'A', '0', '3', '4', 'A', '0', '3', '5', 'A', '0', '3', '6', 'A', '0', '3', '7', 'A', '0', '3', '8', 'A', '0', '3', '9', 'A', '0', '4', '0', 'A', '0', '4', '1', 'A', '0', '4', '2', 'A', '0', '4', '3', 'A', '0', '4', '4', 'A', '0', '4', '5', 'A', '0', '4', '6', 'A', '0', '4', '7', 'A', '0', '4', '8', 'A', '0', '4', '9', 'A', '0', '5', '0', 'A', '0', '5', '1', 'A', '0', '5', '2', 'A', '0', '5', '3', 'A', '0', '5', '4', 'A', '0', '5', '5', 'A', '0', '5', '6', 'A', '0', '5', '7', 'A', '0', '5', '8', 'A', '0', '5', '9', 'A', '0', '6', '0', 'A', '0', '6', '1', 'A', '0', '6', '2', 'A', '0', '6', '3', 'A', '0', '6', '4', 'A', '0', '6', '5', 'A', '0', '6', '6', 'A', '0', '6', '7', 'A', '0', '6', '8', 'A', '0', '6', '9', 'A', '0', '7', '0', 'A', '0', '7', '1', 'A', '0', '7', '2', 'A', '0', '7', '3', 'A', '0', '7', '4', 'A', '0', '7', '5', 'A', '0', '7', '6', 'A', '0', '7', '7', 'A', '0', '7', '8', 'A', '0', '7', '9', 'A', '0', '8', '0', 'A', '0', '8', '1', 'A', '0', '8', '2', 'A', '0', '8', '3', 'A', '0', '8', '4', 'A', '0', '8', '5', 'A', '0', '8', '6', 'A', '0', '8', '7', 'A', '0', '8', '8', 'A', '0', '8', '9', 'A', '0', '9', '0', 'A', '0', '9', '1', 'A', '0', '9', '2', 'A', '0', '9', '3', 'A', '0', '9', '4', 'A', '0', '9', '5', 'A', '0', '9', '6', 'A', '0', '9', '7', 'A', '0', '9', '8', 'A', '0', '9', '9', 'A', '1', '0', '0', 'A', '1', '0', '1', 'A', '1', '0', '2', 'A', '1', '0', '3', 'A', '1', '0', '4', 'A', '1', '0', '5', 'A', '1', '0', '6', 'A', '1', '0', '7', 'A', '1', '0', '8', 'A', '1', '0', '9', 'A', '1', '1', '0', 'A', '1', '1', '1', 'A', '1', '1', '2', 'A', '1', '1', '3', 'A', '1', '1', '4', 'A', '1', '1', '5', 'A', '1', '1', '6', 'A', '1', '1', '7', 'A', '1', '1', '8', 'A', '1', '1', '9', 'A', '1', '2', '0', 'A', '1', '2', '1', 'A', '1', '2', '2', 'A', '1', '2', '3', 'A', '1', '2', '4', 'A', '1', '2', '5', 'A', '1', '2', '6', 'A', '1', '2', '7', 'A', '1', '2', '8', 'A', '1', '2', '9', 'A', '1', '3', '0', 'A', '1', '3', '1', 'A', '1', '3', '2', 'A', '1', '3', '3', 'A', '1', '3', '4', 'A', '1', '3', '5', 'A', '1', '3', '6', 'A', '1', '3', '7', 'A', '1', '3', '8', 'A', '1', '3', '9', 'A', '1', '4', '0', 'A', '1', '4', '1', 'A', '1', '4', '2', 'A', '1', '4', '3', 'A', '1', '4', '4', 'A', '1', '4', '5', 'A', '1', '4', '6', 'A', '1', '4', '7', 'A', '1', '4', '8', 'A', '1', '4', '9', 'A', '1', '5', '0', 'A', '1', '5', '1', 'A', '1', '5', '2', 'A', '1', '5', '3', 'A', '1', '5', '4', 'A', '1', '5', '5', 'A', '1', '5', '6', 'A', '1', '5', '7', 'A', '1', '5', '8', 'A', '1', '5', '9', 'A', '1', '6', '0', 'A', '1', '6', '1', 'A', '1', '6', '2', 'A', '1', '6', '3', 'A', '1', '6', '4', 'A', '1', '6', '5', 'A', '1', '6', '6', 'A', '1', '6', '7', 'A', '1', '6', '8', 'A', '1', '6', '9', 'A', '1', '7', '0', 'A', '1', '7', '1', 'A', '1', '7', '2', 'A', '1', '7', '3', 'A', '1', '7', '4', 'A', '1', '7', '5', 'A', '1', '7', '6', 'A', '1', '7', '7', 'A', '1', '7', '8', 'A', '1', '7', '9', 'A', '1', '8', '0', 'A', '1', '8', '1', 'A', '1', '8', '2', 'A', '1', '8', '3', 'A', '1', '8', '4', 'A', '1', '8', '5', 'A', '1', '8', '6', 'A', '1', '8', '7', 'A', '1', '8', '8', 'A', '1', '8', '9', 'A', '1', '9', '0', 'A', '1', '9', '1', 'A', '1', '9', '2', 'A', '1', '9', '3', 'A', '1', '9', '4', 'A', '1', '9', '5', 'A', '1', '9', '6', 'A', '1', '9', '7', 'A', '1', '9', '8', 'A', '1', '9', '9', 'A', '2', '0', '0', 'A', '2', '0', '1', 'A', '2', '0', '2', 'A', '2', '0', '3', 'A', '2', '0', '4', 'A', '2', '0', '5', 'A', '2', '0', '6', 'A', '2', '0', '7', 'A', '2', '0', '8', 'A', '2', '0', '9', 'A', '2', '1', '0', 'A', '2', '1', '1', 'A', '2', '1', '2', 'A', '2', '1', '3', 'A', '2', '1', '4', 'A', '2', '1', '5', 'A', '2', '1', '6', 'A', '2', '1', '7', 'A', '2', '1', '8', 'A', '2', '1', '9', 'A', '2', '2', '0', 'A', '2', '2', '1', 'A', '2', '2', '2', 'A', '2', '2', '3', 'A', '2', '2', '4', 'A', '2', '2', '5', 'A', '2', '2', '6', 'A', '2', '2', '7', 'A', '2', '2', '8', 'A', '2', '2', '9', 'A', '2', '3', '0', 'A', '2', '3', '1', 'A', '2', '3', '2', 'A', '2', '3', '3', 'A', '2', '3', '4', 'A', '2', '3', '5', 'A', '2', '3', '6', 'A', '2', '3', '7', 'A', '2', '3', '8', 'A', '2', '3', '9', 'A', '2', '4', '0', 'A', '2', '4', '1', 'A', '2', '4', '2', 'A', '2', '4', '3', 'A', '2', '4', '4', 'A', '2', '4', '5', 'A', '2', '4', '6', 'A', '2', '4', '7', 'A', '2', '4', '8', 'A', '2', '4', '9', 'A', '2', '5', '0', 'A', '2', '5', '1', 'A', '2', '5', '2', 'A', '2', '5', '3', 'A', '2', '5', '4', 'A', '2', '5', '5', 'A', '2', '5', '6', 'A', '2', '5', '7', 'A', '2', '5', '8', 'A', '2', '5', '9', 'A', '2', '6', '0', 'A', '2', '6', '1', 'A', '2', '6', '2', 'A', '2', '6', '3', 'A', '2', '6', '4', 'A', '2', '6', '5', 'A', '2', '6', '6', 'A', '2', '6', '7', 'A', '2', '6', '8', 'A', '2', '6', '9', 'A', '2', '7', '0', 'A', '2', '7', '1', 'A', '2', '7', '2', 'A', '2', '7', '3', 'A', '2', '7', '4', 'A', '2', '7', '5', 'A', '2', '7', '6', 'A', '2', '7', '7', 'A', '2', '7', '8', 'A', '2', '7', '9', 'A', '2', '8', '0', 'A', '2', '8', '1', 'A', '2', '8', '2', 'A', '2', '8', '3', 'A', '2', '8', '4', 'A', '2', '8', '5', 'A', '2', '8', '6', 'A', '2', '8', '7', 'A', '2', '8', '8', 'A', '2', '8', '9', 'A', '2', '9', '0', 'A', '2', '9', '1', 'A', '2', '9', '2', 'A', '2', '9', '3', 'A', '2', '9', '4', 'A', '2', '9', '5', 'A', '2', '9', '6', 'A', '2', '9', '7', 'A', '2', '9', '8', 'A', '2', '9', '9', 'A', '3', '0', '0', 'A', '3', '0', '1', 'A', '3', '0', '2', 'A', '3', '0', '3', 'A', '3', '0', '4', 'A', '3', '0', '5', 'A', '3', '0', '6', 'A', '3', '0', '7', 'A', '3', '0', '8', 'A', '3', '0', '9', 'A', '3', '1', '0', 'A', '3', '1', '1', 'A', '3', '1', '2', 'A', '3', '1', '3', 'A', '3', '1', '4', 'A', '3', '1', '5', 'A', '3', '1', '6', 'A', '3', '1', '7', 'A', '3', '1', '8', 'A', '3', '1', '9', 'A', '3', '2', '0', 'A', '3', '2', '1', 'A', '3', '2', '2', 'A', '3', '2', '3', 'A', '3', '2', '4', 'A', '3', '2', '5', 'A', '3', '2', '6', 'A', '3', '2', '7', 'A', '3', '2', '8', 'A', '3', '2', '9', 'A', '3', '3', '0', 'A', '3', '3', '1', 'A', '3', '3', '2', 'A', '3', '3', '3', 'A', '3', '3', '4', 'A', '3', '3', '5', 'A', '3', '3', '6', 'A', '3', '3', '7', 'A', '3', '3', '8', 'A', '3', '3', '9', 'A', '3', '4', '0', 'A', '3', '4', '1', 'A', '3', '4', '2', 'A', '3', '4', '3', 'A', '3', '4', '4', 'A', '3', '4', '5', 'A', '3', '4', '6', 'A', '3', '4', '7', 'A', '3', '4', '8', 'A', '3', '4', '9', 'A', '3', '5', '0', 'A', '3', '5', '1', 'A', '3', '5', '2', 'A', '3', '5', '3', 'A', '3', '5', '4', 'A', '3', '5', '5', 'A', '3', '5', '6', 'A', '3', '5', '7', 'A', '3', '5', '8', 'A', '3', '5', '9', 'A', '3', '6', '0', 'A', '3', '6', '1', 'A', '3', '6', '2', 'A', '3', '6', '3', 'A', '3', '6', '4', 'A', '3', '6', '5', 'A', '3', '6', '6', 'A', '3', '6', '7', 'A', '3', '6', '8', 'A', '3', '6', '9', 'A', '3', '7', '0', 'A', '3', '7', '1', 'A', '3', '7', '2', 'A', '3', '7', '3', 'A', '3', '7', '4', 'A', '3', '7', '5', 'A', '3', '7', '6', 'A', '3', '7', '7', 'A', '3', '7', '8', 'A', '3', '7', '9', 'A', '3', '8', '0', 'A', '3', '8', '1', 'A', '3', '8', '2', 'A', '3', '8', '3', 'A', '3', '8', '4', 'A', '3', '8', '5', 'A', '3', '8', '6', 'A', '3', '8', '7', 'A', '3', '8', '8', 'A', '3', '8', '9', 'A', '3', '9', '0', 'A', '3', '9', '1', 'A', '3', '9', '2', 'A', '3', '9', '3', 'A', '3', '9', '4', 'A', '3', '9', '5', 'A', '3', '9', '6', 'A', '3', '9', '7', 'A', '3', '9', '8', 'A', '3', '9', '9', 'A', '4', '0', '0', 'A', '4', '0', '1', 'A', '4', '0', '2', 'A', '4', '0', '3', 'A', '4', '0', '4', 'A', '4', '0', '5', 'A', '4', '0', '6', 'A', '4', '0', '7', 'A', '4', '0', '8', 'A', '4', '0', '9', 'A', '4', '1', '0', 'A', '4', '1', '1', 'A', '4', '1', '2', 'A', '4', '1', '3', 'A', '4', '1', '4', 'A', '4', '1', '5', 'A', '4', '1', '6', 'A', '4', '1', '7', 'A', '4', '1', '8', 'A', '4', '1', '9', 'A', '4', '2', '0', 'A', '4', '2', '1', 'A', '4', '2', '2', 'A', '4', '2', '3', 'A', '4', '2', '4', 'A', '4', '2', '5', 'A', '4', '2', '6', 'A', '4', '2', '7', 'A', '4', '2', '8', 'A', '4', '2', '9', 'A', '4', '3', '0', 'A', '4', '3', '1', 'A', '4', '3', '2', 'A', '4', '3', '3', 'A', '4', '3', '4', 'A', '4', '3', '5', 'A', '4', '3', '6', 'A', '4', '3', '7', 'A', '4', '3', '8', 'A', '4', '3', '9', 'A', '4', '4', '0', 'A', '4', '4', '1', 'A', '4', '4', '2', 'A', '4', '4', '3', 'A', '4', '4', '4', 'A', '4', '4', '5', 'A', '4', '4', '6', 'A', '4', '4', '7', 'A', '4', '4', '8', 'A', '4', '4', '9', 'A', '4', '5', '0', 'A', '4', '5', '1', 'A', '4', '5', '2', 'A', '4', '5', '3', 'A', '4', '5', '4', 'A', '4', '5', '5', 'A', '4', '5', '6', 'A', '4', '5', '7', 'A', '4', '5', '8', 'A', '4', '5', '9', 'A', '4', '6', '0', 'A', '4', '6', '1', 'A', '4', '6', '2', 'A', '4', '6', '3', 'A', '4', '6', '4', 'A', '4', '6', '5', 'A', '4', '6', '6', 'A', '4', '6', '7', 'A', '4', '6', '8', 'A', '4', '6', '9', 'A', '4', '7', '0', 'A', '4', '7', '1', 'A', '4', '7', '2', 'A', '4', '7', '3', 'A', '4', '7', '4', 'A', '4', '7', '5', 'A', '4', '7', '6', 'A', '4', '7', '7', 'A', '4', '7', '8', 'A', '4', '7', '9', 'A', '4', '8', '0', 'A', '4', '8', '1', 'A', '4', '8', '2', 'A', '4', '8', '3', 'A', '4', '8', '4', 'A', '4', '8', '5', 'A', '4', '8', '6', 'A', '4', '8', '7', 'A', '4', '8', '8', 'A', '4', '8', '9', 'A', '4', '9', '0', 'A', '4', '9', '1', 'A', '4', '9', '2', 'A', '4', '9', '3', 'A', '4', '9', '4', 'A', '4', '9', '5', 'A', '4', '9', '6', 'A', '4', '9', '7', 'A', '5', '0', '1', 'A', '5', '0', '2', 'A', '5', '0', '3', 'A', '5', '0', '4', 'A', '5', '0', '5', 'A', '5', '0', '6', 'A', '5', '0', '7', 'A', '5', '0', '8', 'A', '5', '0', '9', 'A', '5', '1', '0', 'A', '5', '1', '1', 'A', '5', '1', '2', 'A', '5', '1', '3', 'A', '5', '1', '4', 'A', '5', '1', '5', 'A', '5', '1', '6', 'A', '5', '1', '7', 'A', '5', '1', '8', 'A', '5', '1', '9', 'A', '5', '2', '0', 'A', '5', '2', '1', 'A', '5', '2', '2', 'A', '5', '2', '3', 'A', '5', '2', '4', 'A', '5', '2', '5', 'A', '5', '2', '6', 'A', '5', '2', '7', 'A', '5', '2', '8', 'A', '5', '2', '9', 'A', '5', '3', '0', 'A', '5', '3', '1', 'A', '5', '3', '2', 'A', '5', '3', '4', 'A', '5', '3', '5', 'A', '5', '3', '6', 'A', '5', '3', '7', 'A', '5', '3', '8', 'A', '5', '3', '9', 'A', '5', '4', '0', 'A', '5', '4', '1', 'A', '5', '4', '2', 'A', '5', '4', '5', 'A', '5', '4', '7', 'A', '5', '4', '8', 'A', '5', '4', '9', 'A', '5', '5', '0', 'A', '5', '5', '1', 'A', '5', '5', '2', 'A', '5', '5', '3', 'A', '5', '5', '4', 'A', '5', '5', '5', 'A', '5', '5', '6', 'A', '5', '5', '7', 'A', '5', '5', '9', 'A', '5', '6', '3', 'A', '5', '6', '4', 'A', '5', '6', '5', 'A', '5', '6', '6', 'A', '5', '6', '8', 'A', '5', '6', '9', 'A', '5', '7', '0', 'A', '5', '7', '1', 'A', '5', '7', '2', 'A', '5', '7', '3', 'A', '5', '7', '4', 'A', '5', '7', '5', 'A', '5', '7', '6', 'A', '5', '7', '7', 'A', '5', '7', '8', 'A', '5', '7', '9', 'A', '5', '8', '0', 'A', '5', '8', '1', 'A', '5', '8', '2', 'A', '5', '8', '3', 'A', '5', '8', '4', 'A', '5', '8', '5', 'A', '5', '8', '6', 'A', '5', '8', '7', 'A', '5', '8', '8', 'A', '5', '8', '9', 'A', '5', '9', '1', 'A', '5', '9', '2', 'A', '5', '9', '4', 'A', '5', '9', '5', 'A', '5', '9', '6', 'A', '5', '9', '8', 'A', '6', '0', '0', 'A', '6', '0', '1', 'A', '6', '0', '2', 'A', '6', '0', '3', 'A', '6', '0', '4', 'A', '6', '0', '6', 'A', '6', '0', '8', 'A', '6', '0', '9', 'A', '6', '1', '0', 'A', '6', '1', '1', 'A', '6', '1', '2', 'A', '6', '1', '3', 'A', '6', '1', '4', 'A', '6', '1', '5', 'A', '6', '1', '6', 'A', '6', '1', '7', 'A', '6', '1', '8', 'A', '6', '1', '9', 'A', '6', '2', '0', 'A', '6', '2', '1', 'A', '6', '2', '2', 'A', '6', '2', '3', 'A', '6', '2', '4', 'A', '6', '2', '6', 'A', '6', '2', '7', 'A', '6', '2', '8', 'A', '6', '2', '9', 'A', '6', '3', '4', 'A', '6', '3', '7', 'A', '6', '3', '8', 'A', '6', '4', '0', 'A', '6', '4', '2', 'A', '6', '4', '3', 'A', '6', '4', '4', 'A', '6', '4', '5', 'A', '6', '4', '6', 'A', '6', '4', '8', 'A', '6', '4', '9', 'A', '6', '5', '1', 'A', '6', '5', '2', 'A', '6', '5', '3', 'A', '6', '5', '4', 'A', '6', '5', '5', 'A', '6', '5', '6', 'A', '6', '5', '7', 'A', '6', '5', '8', 'A', '6', '5', '9', 'A', '6', '6', '0', 'A', '6', '6', '1', 'A', '6', '6', '2', 'A', '6', '6', '3', 'A', '6', '6', '4', 'A', '7', '0', '1', 'A', '7', '0', '2', 'A', '7', '0', '3', 'A', '7', '0', '4', 'A', '7', '0', '5', 'A', '7', '0', '6', 'A', '7', '0', '7', 'A', '7', '0', '8', 'A', '7', '0', '9', 'A', '7', '1', '0', 'A', '7', '1', '1', 'A', '7', '1', '2', 'A', '7', '1', '3', 'A', '7', '1', '4', 'A', '7', '1', '5', 'A', '7', '1', '7', 'A', '7', '2', '6', 'A', '7', '3', '2', 'A', '8', '0', '0', 'A', '8', '0', '1', 'A', '8', '0', '2', 'A', '8', '0', '3', 'A', '8', '0', '4', 'A', '8', '0', '5', 'A', '8', '0', '6', 'A', '8', '0', '7', 'A', 'A', 'R', 'U', 'A', 'D', 'A', 'K', 'A', 'D', 'E', 'G', 'A', 'E', 'N', 'G', 'A', 'E', 'S', 'C', 'A', 'H', 'A', 'D', 'A', 'H', 'O', 'M', 'A', 'H', 'S', 'A', 'A', 'I', 'L', 'M', 'A', 'I', 'N', 'N', 'A', 'I', 'N', 'U', 'A', 'K', 'S', 'A', 'A', 'L', 'A', 'F', 'A', 'L', 'A', 'N', 'A', 'L', 'E', 'F', 'A', 'L', 'F', 'A', 'A', 'L', 'I', 'F', 'A', 'L', 'L', 'I', 'A', 'L', 'L', 'O', 'A', 'L', 'P', 'A', 'A', 'L', 'T', 'A', 'A', 'L', 'U', 'M', 'A', 'M', 'A', 'R', 'A', 'M', 'B', 'A', 'A', 'M', 'P', 'S', 'A', 'N', 'A', 'P', 'A', 'N', 'H', 'U', 'A', 'N', 'J', 'I', 'A', 'N', 'K', 'H', 'A', 'P', 'I', 'N', 'A', 'P', 'L', 'I', 'A', 'P', 'U', 'N', 'A', 'Q', 'U', 'A', 'A', 'R', 'A', 'D', 'A', 'R', 'C', 'H', 'A', 'R', 'G', 'I', 'A', 'R', 'M', 'Y', 'A', 'R', 'T', 'S', 'A', 'S', 'A', 'T', 'A', 'S', 'H', '2', 'A', 'S', 'H', '3', 'A', 'S', 'H', '9', 'A', 'T', 'O', 'M', 'A', 'U', 'N', 'N', 'A', 'W', 'A', 'Y', 'A', 'Y', 'A', 'H', 'A', 'Y', 'E', 'R', 'A', 'Y', 'I', 'N', 'B', '0', '0', '1', 'B', '0', '0', '2', 'B', '0', '0', '3', 'B', '0', '0', '4', 'B', '0', '0', '5', 'B', '0', '0', '6', 'B', '0', '0', '7', 'B', '0', '0', '8', 'B', '0', '0', '9', 'B', '0', '1', '0', 'B', '0', '1', '1', 'B', '0', '1', '2', 'B', '0', '1', '3', 'B', '0', '1', '4', 'B', '0', '1', '5', 'B', '0', '1', '6', 'B', '0', '1', '7', 'B', '0', '1', '8', 'B', '0', '1', '9', 'B', '0', '2', '0', 'B', '0', '2', '1', 'B', '0', '2', '2', 'B', '0', '2', '3', 'B', '0', '2', '4', 'B', '0', '2', '5', 'B', '0', '2', '6', 'B', '0', '2', '7', 'B', '0', '2', '8', 'B', '0', '2', '9', 'B', '0', '3', '0', 'B', '0', '3', '1', 'B', '0', '3', '2', 'B', '0', '3', '3', 'B', '0', '3', '4', 'B', '0', '3', '6', 'B', '0', '3', '7', 'B', '0', '3', '8', 'B', '0', '3', '9', 'B', '0', '4', '0', 'B', '0', '4', '1', 'B', '0', '4', '2', 'B', '0', '4', '3', 'B', '0', '4', '4', 'B', '0', '4', '5', 'B', '0', '4', '6', 'B', '0', '4', '7', 'B', '0', '4', '8', 'B', '0', '4', '9', 'B', '0', '5', '0', 'B', '0', '5', '1', 'B', '0', '5', '2', 'B', '0', '5', '3', 'B', '0', '5', '4', 'B', '0', '5', '5', 'B', '0', '5', '6', 'B', '0', '5', '7', 'B', '0', '5', '8', 'B', '0', '5', '9', 'B', '0', '6', '0', 'B', '0', '6', '1', 'B', '0', '6', '2', 'B', '0', '6', '3', 'B', '0', '6', '4', 'B', '0', '6', '5', 'B', '0', '6', '6', 'B', '0', '6', '7', 'B', '0', '6', '8', 'B', '0', '6', '9', 'B', '0', '7', '0', 'B', '0', '7', '1', 'B', '0', '7', '2', 'B', '0', '7', '3', 'B', '0', '7', '4', 'B', '0', '7', '5', 'B', '0', '7', '6', 'B', '0', '7', '7', 'B', '0', '7', '8', 'B', '0', '7', '9', 'B', '0', '8', '0', 'B', '0', '8', '1', 'B', '0', '8', '2', 'B', '0', '8', '3', 'B', '0', '8', '5', 'B', '0', '8', '6', 'B', '0', '8', '7', 'B', '0', '8', '9', 'B', '0', '9', '0', 'B', '0', '9', '1', 'B', '1', '0', '0', 'B', '1', '0', '2', 'B', '1', '0', '4', 'B', '1', '0', '5', 'B', '1', '2', '0', 'B', '1', '2', '1', 'B', '1', '2', '2', 'B', '1', '2', '3', 'B', '1', '2', '5', 'B', '1', '2', '7', 'B', '1', '2', '8', 'B', '1', '3', '0', 'B', '1', '3', '1', 'B', '1', '3', '2', 'B', '1', '3', '3', 'B', '1', '3', '5', 'B', '1', '4', '0', 'B', '1', '4', '1', 'B', '1', '4', '2', 'B', '1', '4', '5', 'B', '1', '4', '6', 'B', '1', '5', '0', 'B', '1', '5', '1', 'B', '1', '5', '2', 'B', '1', '5', '3', 'B', '1', '5', '4', 'B', '1', '5', '5', 'B', '1', '5', '6', 'B', '1', '5', '7', 'B', '1', '5', '8', 'B', '1', '5', '9', 'B', '1', '6', '0', 'B', '1', '6', '1', 'B', '1', '6', '2', 'B', '1', '6', '3', 'B', '1', '6', '4', 'B', '1', '6', '5', 'B', '1', '6', '6', 'B', '1', '6', '7', 'B', '1', '6', '8', 'B', '1', '6', '9', 'B', '1', '7', '0', 'B', '1', '7', '1', 'B', '1', '7', '2', 'B', '1', '7', '3', 'B', '1', '7', '4', 'B', '1', '7', '6', 'B', '1', '7', '7', 'B', '1', '7', '8', 'B', '1', '7', '9', 'B', '1', '8', '0', 'B', '1', '8', '1', 'B', '1', '8', '2', 'B', '1', '8', '3', 'B', '1', '8', '4', 'B', '1', '8', '5', 'B', '1', '8', '9', 'B', '1', '9', '0', 'B', '1', '9', '1', 'B', '2', '0', '0', 'B', '2', '0', '1', 'B', '2', '0', '2', 'B', '2', '0', '3', 'B', '2', '0', '4', 'B', '2', '0', '5', 'B', '2', '0', '6', 'B', '2', '0', '7', 'B', '2', '0', '8', 'B', '2', '0', '9', 'B', '2', '1', '0', 'B', '2', '1', '1', 'B', '2', '1', '2', 'B', '2', '1', '3', 'B', '2', '1', '4', 'B', '2', '1', '5', 'B', '2', '1', '6', 'B', '2', '1', '7', 'B', '2', '1', '8', 'B', '2', '1', '9', 'B', '2', '2', '0', 'B', '2', '2', '1', 'B', '2', '2', '2', 'B', '2', '2', '5', 'B', '2', '2', '6', 'B', '2', '2', '7', 'B', '2', '2', '8', 'B', '2', '2', '9', 'B', '2', '3', '0', 'B', '2', '3', '1', 'B', '2', '3', '2', 'B', '2', '3', '3', 'B', '2', '3', '4', 'B', '2', '3', '6', 'B', '2', '4', '0', 'B', '2', '4', '1', 'B', '2', '4', '2', 'B', '2', '4', '3', 'B', '2', '4', '5', 'B', '2', '4', '6', 'B', '2', '4', '7', 'B', '2', '4', '8', 'B', '2', '4', '9', 'B', '2', '5', '0', 'B', '2', '5', '1', 'B', '2', '5', '2', 'B', '2', '5', '3', 'B', '2', '5', '4', 'B', '2', '5', '5', 'B', '2', '5', '6', 'B', '2', '5', '7', 'B', '2', '5', '8', 'B', '2', '5', '9', 'B', '3', '0', '5', 'B', 'A', '-', '2', 'B', 'A', 'B', 'Y', 'B', 'A', 'C', 'K', 'B', 'A', 'G', '3', 'B', 'A', 'G', 'A', 'B', 'A', 'G', 'S', 'B', 'A', 'H', 'T', 'B', 'A', 'L', 'L', 'B', 'A', 'N', '2', 'B', 'A', 'N', 'D', 'B', 'A', 'N', 'G', 'B', 'A', 'N', 'K', 'B', 'A', 'R', 'B', 'B', 'A', 'R', 'S', 'B', 'A', 'S', 'E', 'B', 'A', 'S', 'H', 'B', 'A', 'T', 'H', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'P', 'B', 'B', 'A', 'T', 'B', 'B', 'A', 'X', 'B', 'B', 'E', 'E', 'B', 'B', 'E', 'P', 'B', 'B', 'E', 'X', 'B', 'B', 'I', 'E', 'B', 'B', 'I', 'P', 'B', 'B', 'I', 'T', 'B', 'B', 'I', 'X', 'B', 'B', 'O', 'P', 'B', 'B', 'O', 'T', 'B', 'B', 'O', 'X', 'B', 'B', 'U', 'O', 'B', 'B', 'U', 'P', 'B', 'B', 'U', 'R', 'B', 'B', 'U', 'T', 'B', 'B', 'U', 'X', 'B', 'B', 'Y', 'P', 'B', 'B', 'Y', 'T', 'B', 'B', 'Y', 'X', 'B', 'C', 'A', 'D', 'B', 'E', 'A', 'M', 'B', 'E', 'A', 'N', 'B', 'E', 'A', 'R', 'B', 'E', 'A', 'T', 'B', 'E', 'E', 'H', 'B', 'E', 'E', 'R', 'B', 'E', 'L', 'L', 'B', 'E', 'L', 'T', 'B', 'E', 'N', 'D', 'B', 'E', 'N', 'T', 'B', 'E', 'T', 'A', 'B', 'E', 'T', 'H', 'B', 'H', 'A', 'A', 'B', 'H', 'A', 'M', 'B', 'H', 'E', 'E', 'B', 'H', 'O', 'O', 'B', 'I', 'E', 'P', 'B', 'I', 'E', 'T', 'B', 'I', 'E', 'X', 'B', 'I', 'R', 'D', 'B', 'I', 'R', 'U', 'B', 'I', 'T', 'E', 'B', 'K', 'A', '-', 'B', 'L', 'O', 'W', 'B', 'L', 'U', 'E', 'B', 'O', 'A', 'R', 'B', 'O', 'A', 'T', 'B', 'O', 'D', 'Y', 'B', 'O', 'L', 'D', 'B', 'O', 'L', 'T', 'B', 'O', 'M', 'B', 'B', 'O', 'N', 'E', 'B', 'O', 'O', 'K', 'B', 'O', 'O', 'T', 'B', 'O', 'T', 'H', 'B', 'O', 'W', 'L', 'B', 'O', 'Y', 'S', 'B', 'R', 'D', 'A', 'B', 'U', 'K', 'Y', 'B', 'U', 'L', 'B', 'B', 'U', 'L', 'L', 'B', 'U', 'N', 'G', 'B', 'U', 'O', 'N', 'B', 'U', 'O', 'P', 'B', 'U', 'O', 'X', 'B', 'U', 'R', '2', 'B', 'U', 'R', 'U', 'B', 'U', 'R', 'X', 'B', 'U', 'S', 'T', 'B', 'W', 'E', 'E', 'B', 'Y', 'R', 'X', 'B', 'Y', 'T', 'E', 'B', 'Z', 'H', 'I', 'C', '-', '1', '8', 'C', '-', '3', '9', 'C', '0', '0', '1', 'C', '0', '0', '2', 'C', '0', '0', '3', 'C', '0', '0', '4', 'C', '0', '0', '5', 'C', '0', '0', '6', 'C', '0', '0', '7', 'C', '0', '0', '8', 'C', '0', '0', '9', 'C', '0', '1', '0', 'C', '0', '1', '1', 'C', '0', '1', '2', 'C', '0', '1', '3', 'C', '0', '1', '4', 'C', '0', '1', '5', 'C', '0', '1', '6', 'C', '0', '1', '7', 'C', '0', '1', '8', 'C', '0', '1', '9', 'C', '0', '2', '0', 'C', '0', '2', '1', 'C', '0', '2', '2', 'C', '0', '2', '3', 'C', '0', '2', '4', 'C', 'A', 'A', 'I', 'C', 'A', 'D', 'A', 'C', 'A', 'K', 'E', 'C', 'A', 'L', 'C', 'C', 'A', 'L', 'L', 'C', 'A', 'L', 'X', 'C', 'A', 'N', 'G', 'C', 'A', 'P', 'O', 'C', 'A', 'R', 'D', 'C', 'A', 'R', 'E', 'C', 'A', 'R', 'P', 'C', 'A', 'R', 'S', 'C', 'A', 'R', 'T', 'C', 'A', 'V', 'E', 'C', 'A', 'Y', 'N', 'C', 'C', 'A', 'A', 'C', 'C', 'E', 'E', 'C', 'C', 'H', 'A', 'C', 'C', 'H', 'E', 'C', 'C', 'H', 'I', 'C', 'C', 'H', 'O', 'C', 'C', 'H', 'U', 'C', 'E', 'D', 'I', 'C', 'E', 'E', 'B', 'C', 'E', 'E', 'V', 'C', 'E', 'N', 'T', 'C', 'H', 'A', 'A', 'C', 'H', 'A', 'D', 'C', 'H', 'A', 'M', 'C', 'H', 'A', 'N', 'C', 'H', 'A', 'P', 'C', 'H', 'A', 'R', 'C', 'H', 'A', 'T', 'C', 'H', 'A', 'U', 'C', 'H', 'A', 'X', 'C', 'H', 'E', 'E', 'C', 'H', 'E', 'H', 'C', 'H', 'E', 'N', 'C', 'H', 'E', 'P', 'C', 'H', 'E', 'T', 'C', 'H', 'E', 'X', 'C', 'H', 'H', 'A', 'C', 'H', 'I', 'L', 'C', 'H', 'I', 'N', 'C', 'H', 'O', 'A', 'C', 'H', 'O', 'E', 'C', 'H', 'O', 'P', 'C', 'H', 'O', 'T', 'C', 'H', 'O', 'X', 'C', 'H', 'O', 'Y', 'C', 'H', 'U', 'O', 'C', 'H', 'U', 'P', 'C', 'H', 'U', 'R', 'C', 'H', 'U', 'X', 'C', 'H', 'W', 'A', 'C', 'H', 'W', 'V', 'C', 'H', 'Y', 'P', 'C', 'H', 'Y', 'R', 'C', 'H', 'Y', 'T', 'C', 'H', 'Y', 'X', 'C', 'I', 'E', 'P', 'C', 'I', 'E', 'T', 'C', 'I', 'E', 'X', 'C', 'I', 'T', 'I', 'C', 'I', 'T', 'Y', 'C', 'L', 'A', 'N', 'C', 'L', 'A', 'W', 'C', 'L', 'E', 'F', 'C', 'L', 'U', 'B', 'C', 'O', 'D', 'A', 'C', 'O', 'L', 'D', 'C', 'O', 'L', 'L', 'C', 'O', 'M', 'B', 'C', 'O', 'O', 'L', 'C', 'O', 'P', 'Y', 'C', 'O', 'R', 'K', 'C', 'R', 'A', 'B', 'C', 'R', 'O', 'P', 'C', 'U', 'A', 'M', 'C', 'U', 'B', 'E', 'C', 'U', 'O', 'P', 'C', 'U', 'O', 'X', 'C', 'U', 'R', 'L', 'C', 'U', 'R', 'X', 'C', 'U', 'S', 'P', 'C', 'W', 'A', 'A', 'C', 'W', 'I', 'I', 'C', 'W', 'O', 'O', 'C', 'Y', 'A', 'W', 'C', 'Y', 'A', 'Y', 'C', 'Y', 'R', 'X', 'D', '0', '0', '1', 'D', '0', '0', '2', 'D', '0', '0', '3', 'D', '0', '0', '4', 'D', '0', '0', '5', 'D', '0', '0', '6', 'D', '0', '0', '7', 'D', '0', '0', '8', 'D', '0', '0', '9', 'D', '0', '1', '0', 'D', '0', '1', '1', 'D', '0', '1', '2', 'D', '0', '1', '3', 'D', '0', '1', '4', 'D', '0', '1', '5', 'D', '0', '1', '6', 'D', '0', '1', '7', 'D', '0', '1', '8', 'D', '0', '1', '9', 'D', '0', '2', '0', 'D', '0', '2', '1', 'D', '0', '2', '2', 'D', '0', '2', '3', 'D', '0', '2', '4', 'D', '0', '2', '5', 'D', '0', '2', '6', 'D', '0', '2', '7', 'D', '0', '2', '8', 'D', '0', '2', '9', 'D', '0', '3', '0', 'D', '0', '3', '1', 'D', '0', '3', '2', 'D', '0', '3', '3', 'D', '0', '3', '4', 'D', '0', '3', '5', 'D', '0', '3', '6', 'D', '0', '3', '7', 'D', '0', '3', '8', 'D', '0', '3', '9', 'D', '0', '4', '0', 'D', '0', '4', '1', 'D', '0', '4', '2', 'D', '0', '4', '3', 'D', '0', '4', '4', 'D', '0', '4', '5', 'D', '0', '4', '6', 'D', '0', '4', '7', 'D', '0', '4', '8', 'D', '0', '4', '9', 'D', '0', '5', '0', 'D', '0', '5', '1', 'D', '0', '5', '2', 'D', '0', '5', '3', 'D', '0', '5', '4', 'D', '0', '5', '5', 'D', '0', '5', '6', 'D', '0', '5', '7', 'D', '0', '5', '8', 'D', '0', '5', '9', 'D', '0', '6', '0', 'D', '0', '6', '1', 'D', '0', '6', '2', 'D', '0', '6', '3', 'D', '0', '6', '4', 'D', '0', '6', '5', 'D', '0', '6', '6', 'D', '0', '6', '7', 'D', 'A', 'E', 'G', 'D', 'A', 'G', '3', 'D', 'A', 'G', 'S', 'D', 'A', 'I', 'R', 'D', 'A', 'M', 'P', 'D', 'A', 'N', 'G', 'D', 'A', 'R', 'K', 'D', 'A', 'R', 'T', 'D', 'A', 'S', 'H', 'D', 'A', 'T', 'A', 'D', 'A', 'T', 'E', 'D', 'A', 'W', 'B', 'D', 'C', 'H', 'E', 'D', 'D', 'A', 'A', 'D', 'D', 'A', 'L', 'D', 'D', 'A', 'P', 'D', 'D', 'A', 'T', 'D', 'D', 'A', 'X', 'D', 'D', 'D', 'A', 'D', 'D', 'E', 'E', 'D', 'D', 'E', 'P', 'D', 'D', 'E', 'X', 'D', 'D', 'H', 'A', 'D', 'D', 'H', 'E', 'D', 'D', 'H', 'I', 'D', 'D', 'H', 'O', 'D', 'D', 'H', 'U', 'D', 'D', 'I', 'E', 'D', 'D', 'I', 'P', 'D', 'D', 'I', 'T', 'D', 'D', 'I', 'X', 'D', 'D', 'O', 'A', 'D', 'D', 'O', 'P', 'D', 'D', 'O', 'T', 'D', 'D', 'O', 'X', 'D', 'D', 'U', 'O', 'D', 'D', 'U', 'P', 'D', 'D', 'U', 'R', 'D', 'D', 'U', 'T', 'D', 'D', 'U', 'X', 'D', 'D', 'W', 'A', 'D', 'E', 'A', 'D', 'D', 'E', 'E', 'L', 'D', 'E', 'E', 'R', 'D', 'E', 'H', 'I', 'D', 'E', 'K', 'A', 'D', 'E', 'L', 'T', 'D', 'E', 'N', 'E', 'D', 'E', 'N', 'G', 'D', 'E', 'S', 'I', 'D', 'E', 'S', 'K', 'D', 'E', 'Z', 'H', 'D', 'H', 'A', 'A', 'D', 'H', 'A', 'L', 'D', 'H', 'E', 'E', 'D', 'H', 'H', 'A', 'D', 'H', 'H', 'E', 'D', 'H', 'H', 'I', 'D', 'H', 'H', 'O', 'D', 'H', 'H', 'U', 'D', 'H', 'I', 'I', 'D', 'H', 'O', 'O', 'D', 'H', 'O', 'U', 'D', 'I', 'E', 'P', 'D', 'I', 'E', 'X', 'D', 'I', 'G', 'A', 'D', 'I', 'M', '2', 'D', 'I', 'N', 'G', 'D', 'I', 'S', 'C', 'D', 'I', 'S', 'H', 'D', 'I', 'S', 'K', 'D', 'K', 'A', 'R', 'D', 'L', 'E', 'E', 'D', 'L', 'H', 'A', 'D', 'O', '-', 'O', 'D', 'O', 'E', 'S', 'D', 'O', 'I', 'T', 'D', 'O', 'N', 'G', 'D', 'O', 'O', 'R', 'D', 'O', 'R', 'U', 'D', 'O', 'T', 'S', 'D', 'O', 'V', 'E', 'D', 'O', 'W', 'N', 'D', 'R', 'A', 'M', 'D', 'R', 'I', 'L', 'D', 'R', 'U', 'M', 'D', 'U', 'B', '2', 'D', 'U', 'C', 'K', 'D', 'U', 'N', '3', 'D', 'U', 'N', '4', 'D', 'U', 'N', 'G', 'D', 'U', 'O', 'X', 'D', 'U', 'R', '2', 'D', 'U', 'R', 'X', 'D', 'U', 'S', 'K', 'D', 'Y', 'A', 'N', 'D', 'Y', 'E', 'H', 'D', 'Z', 'A', 'A', 'D', 'Z', 'A', 'Y', 'D', 'Z', 'E', 'E', 'D', 'Z', 'H', 'A', 'D', 'Z', 'H', 'E', 'D', 'Z', 'J', 'E', 'D', 'Z', 'W', 'E', 'D', 'Z', 'Z', 'A', 'D', 'Z', 'Z', 'E', 'E', '0', '0', '1', 'E', '0', '0', '2', 'E', '0', '0', '3', 'E', '0', '0', '4', 'E', '0', '0', '5', 'E', '0', '0', '6', 'E', '0', '0', '7', 'E', '0', '0', '8', 'E', '0', '0', '9', 'E', '0', '1', '0', 'E', '0', '1', '1', 'E', '0', '1', '2', 'E', '0', '1', '3', 'E', '0', '1', '4', 'E', '0', '1', '5', 'E', '0', '1', '6', 'E', '0', '1', '7', 'E', '0', '1', '8', 'E', '0', '1', '9', 'E', '0', '2', '0', 'E', '0', '2', '1', 'E', '0', '2', '2', 'E', '0', '2', '3', 'E', '0', '2', '4', 'E', '0', '2', '5', 'E', '0', '2', '6', 'E', '0', '2', '7', 'E', '0', '2', '8', 'E', '0', '2', '9', 'E', '0', '3', '0', 'E', '0', '3', '1', 'E', '0', '3', '2', 'E', '0', '3', '3', 'E', '0', '3', '4', 'E', '0', '3', '6', 'E', '0', '3', '7', 'E', '0', '3', '8', 'E', 'A', 'R', 'S', 'E', 'A', 'S', 'E', 'E', 'A', 'S', 'T', 'E', 'D', 'I', 'N', 'E', 'G', 'I', 'R', 'E', 'H', 'K', 'A', 'E', 'H', 'P', 'A', 'E', 'H', 'T', 'A', 'E', 'K', 'A', 'M', 'E', 'N', 'N', 'I', 'E', 'N', 'O', 'S', 'E', 'O', '-', 'O', 'E', 'O', '-', 'U', 'E', 'R', 'E', 'N', 'E', 'S', '-', '1', 'E', 'S', '-', '2', 'E', 'S', '-', '3', 'E', 'S', 'H', '2', 'E', 'U', '-', 'A', 'E', 'U', '-', 'E', 'E', 'U', '-', 'O', 'E', 'U', '-', 'U', 'E', 'U', 'R', 'O', 'E', 'V', 'E', 'N', 'E', 'Y', 'E', 'S', 'E', 'Y', 'Y', 'Y', 'E', 'Z', 'E', 'N', 'F', '0', '0', '1', 'F', '0', '0', '2', 'F', '0', '0', '3', 'F', '0', '0', '4', 'F', '0', '0', '5', 'F', '0', '0', '6', 'F', '0', '0', '7', 'F', '0', '0', '8', 'F', '0', '0', '9', 'F', '0', '1', '0', 'F', '0', '1', '1', 'F', '0', '1', '2', 'F', '0', '1', '3', 'F', '0', '1', '4', 'F', '0', '1', '5', 'F', '0', '1', '6', 'F', '0', '1', '7', 'F', '0', '1', '8', 'F', '0', '1', '9', 'F', '0', '2', '0', 'F', '0', '2', '1', 'F', '0', '2', '2', 'F', '0', '2', '3', 'F', '0', '2', '4', 'F', '0', '2', '5', 'F', '0', '2', '6', 'F', '0', '2', '7', 'F', '0', '2', '8', 'F', '0', '2', '9', 'F', '0', '3', '0', 'F', '0', '3', '1', 'F', '0', '3', '2', 'F', '0', '3', '3', 'F', '0', '3', '4', 'F', '0', '3', '5', 'F', '0', '3', '6', 'F', '0', '3', '7', 'F', '0', '3', '8', 'F', '0', '3', '9', 'F', '0', '4', '0', 'F', '0', '4', '1', 'F', '0', '4', '2', 'F', '0', '4', '3', 'F', '0', '4', '4', 'F', '0', '4', '5', 'F', '0', '4', '6', 'F', '0', '4', '7', 'F', '0', '4', '8', 'F', '0', '4', '9', 'F', '0', '5', '0', 'F', '0', '5', '1', 'F', '0', '5', '2', 'F', '0', '5', '3', 'F', 'A', 'A', 'I', 'F', 'A', 'C', 'E', 'F', 'A', 'I', 'B', 'F', 'A', 'N', 'G', 'F', 'A', 'S', 'T', 'F', 'E', 'A', 'R', 'F', 'E', 'E', 'D', 'F', 'E', 'E', 'M', 'F', 'E', 'H', 'U', 'F', 'E', 'N', 'G', 'F', 'E', 'O', 'H', 'F', 'E', 'U', 'X', 'F', 'I', 'L', 'E', 'F', 'I', 'L', 'L', 'F', 'I', 'L', 'M', 'F', 'I', 'R', 'E', 'F', 'I', 'R', 'I', 'F', 'I', 'S', 'H', 'F', 'I', 'S', 'T', 'F', 'I', 'T', 'A', 'F', 'I', 'V', 'E', 'F', 'L', 'A', 'G', 'F', 'L', 'A', 'T', 'F', 'L', 'E', 'X', 'F', 'L', 'I', 'P', 'F', 'O', 'N', 'T', 'F', 'O', 'O', 'D', 'F', 'O', 'O', 'L', 'F', 'O', 'O', 'T', 'F', 'O', 'R', 'K', 'F', 'O', 'R', 'M', 'F', 'O', 'U', 'R', 'F', 'R', 'E', 'E', 'F', 'R', 'O', 'G', 'F', 'R', 'O', 'M', 'F', 'U', 'E', 'L', 'F', 'U', 'E', 'T', 'F', 'U', 'J', 'I', 'F', 'U', 'L', 'L', 'F', 'U', 'R', 'X', 'F', 'U', 'S', 'A', 'F', 'U', 'S', 'E', 'F', 'V', 'S', '1', 'F', 'V', 'S', '2', 'F', 'V', 'S', '3', 'F', 'W', 'A', 'A', 'F', 'W', 'E', 'E', 'G', '0', '0', '1', 'G', '0', '0', '2', 'G', '0', '0', '3', 'G', '0', '0', '4', 'G', '0', '0', '5', 'G', '0', '0', '6', 'G', '0', '0', '7', 'G', '0', '0', '8', 'G', '0', '0', '9', 'G', '0', '1', '0', 'G', '0', '1', '1', 'G', '0', '1', '2', 'G', '0', '1', '3', 'G', '0', '1', '4', 'G', '0', '1', '5', 'G', '0', '1', '6', 'G', '0', '1', '7', 'G', '0', '1', '8', 'G', '0', '1', '9', 'G', '0', '2', '0', 'G', '0', '2', '1', 'G', '0', '2', '2', 'G', '0', '2', '3', 'G', '0', '2', '4', 'G', '0', '2', '5', 'G', '0', '2', '6', 'G', '0', '2', '7', 'G', '0', '2', '8', 'G', '0', '2', '9', 'G', '0', '3', '0', 'G', '0', '3', '1', 'G', '0', '3', '2', 'G', '0', '3', '3', 'G', '0', '3', '4', 'G', '0', '3', '5', 'G', '0', '3', '6', 'G', '0', '3', '7', 'G', '0', '3', '8', 'G', '0', '3', '9', 'G', '0', '4', '0', 'G', '0', '4', '1', 'G', '0', '4', '2', 'G', '0', '4', '3', 'G', '0', '4', '4', 'G', '0', '4', '5', 'G', '0', '4', '6', 'G', '0', '4', '7', 'G', '0', '4', '8', 'G', '0', '4', '9', 'G', '0', '5', '0', 'G', '0', '5', '1', 'G', '0', '5', '2', 'G', '0', '5', '3', 'G', '0', '5', '4', 'G', 'A', 'B', 'A', 'G', 'A', 'L', 'I', 'G', 'A', 'M', 'E', 'G', 'A', 'M', 'L', 'G', 'A', 'N', '2', 'G', 'A', 'R', '3', 'G', 'A', 'T', 'E', 'G', 'B', 'E', 'E', 'G', 'B', 'E', 'N', 'G', 'B', 'E', 'T', 'G', 'B', 'O', 'N', 'G', 'B', 'O', 'O', 'G', 'C', 'A', 'N', 'G', 'C', 'I', 'G', 'G', 'D', 'A', 'N', 'G', 'E', '2', '2', 'G', 'E', 'A', 'R', 'G', 'E', 'B', 'A', 'G', 'E', 'B', 'O', 'G', 'E', 'D', 'E', 'G', 'E', 'E', 'M', 'G', 'E', 'T', 'A', 'G', 'G', 'A', 'A', 'G', 'G', 'A', 'P', 'G', 'G', 'A', 'T', 'G', 'G', 'A', 'X', 'G', 'G', 'E', 'E', 'G', 'G', 'E', 'P', 'G', 'G', 'E', 'T', 'G', 'G', 'E', 'X', 'G', 'G', 'I', 'E', 'G', 'G', 'I', 'T', 'G', 'G', 'I', 'X', 'G', 'G', 'O', 'P', 'G', 'G', 'O', 'T', 'G', 'G', 'O', 'X', 'G', 'G', 'U', 'O', 'G', 'G', 'U', 'P', 'G', 'G', 'U', 'R', 'G', 'G', 'U', 'T', 'G', 'G', 'U', 'X', 'G', 'G', 'W', 'A', 'G', 'G', 'W', 'E', 'G', 'G', 'W', 'I', 'G', 'H', 'A', 'A', 'G', 'H', 'A', 'D', 'G', 'H', 'A', 'N', 'G', 'H', 'A', 'P', 'G', 'H', 'E', 'E', 'G', 'H', 'E', 'T', 'G', 'H', 'H', 'A', 'G', 'H', 'O', 'M', 'G', 'H', 'O', 'U', 'G', 'H', 'W', 'A', 'G', 'I', 'B', 'A', 'G', 'I', 'E', 'P', 'G', 'I', 'E', 'T', 'G', 'I', 'E', 'X', 'G', 'I', 'G', 'A', 'G', 'I', 'R', '2', 'G', 'I', 'R', '3', 'G', 'I', 'R', 'L', 'G', 'I', 'S', 'H', 'G', 'O', 'A', 'L', 'G', 'O', 'A', 'T', 'G', 'O', 'L', 'D', 'G', 'O', 'N', 'G', 'G', 'O', 'O', 'D', 'G', 'O', 'R', 'A', 'G', 'O', 'R', 'T', 'G', 'R', 'A', 'M', 'G', 'S', 'U', 'M', 'G', 'T', 'E', 'R', 'G', 'U', 'A', 'N', 'G', 'U', 'E', 'H', 'G', 'U', 'E', 'I', 'G', 'U', 'N', 'U', 'G', 'U', 'O', 'P', 'G', 'U', 'O', 'T', 'G', 'U', 'O', 'X', 'G', 'U', 'R', '7', 'G', 'U', 'R', 'X', 'G', 'W', 'A', 'A', 'G', 'W', 'E', 'E', 'G', 'Y', 'A', 'A', 'G', 'Y', 'A', 'N', 'G', 'Y', 'A', 'S', 'G', 'Y', 'E', 'E', 'G', 'Y', 'F', 'U', 'G', 'Y', 'O', 'N', 'H', '0', '0', '1', 'H', '0', '0', '2', 'H', '0', '0', '3', 'H', '0', '0', '4', 'H', '0', '0', '5', 'H', '0', '0', '6', 'H', '0', '0', '7', 'H', '0', '0', '8', 'H', 'A', 'A', 'M', 'H', 'A', 'G', 'L', 'H', 'A', 'I', 'R', 'H', 'A', 'I', 'S', 'H', 'A', 'L', 'F', 'H', 'A', 'L', 'O', 'H', 'A', 'N', 'D', 'H', 'A', 'N', 'G', 'H', 'A', 'R', 'D', 'H', 'A', 'T', 'E', 'H', 'A', 'V', 'E', 'H', 'A', 'W', 'J', 'H', 'E', 'A', 'D', 'H', 'E', 'E', 'I', 'H', 'E', 'E', 'L', 'H', 'E', 'L', 'M', 'H', 'E', 'M', 'P', 'H', 'E', 'N', 'G', 'H', 'E', 'R', 'B', 'H', 'E', 'R', 'U', 'H', 'E', 'T', 'A', 'H', 'E', 'T', 'H', 'H', 'E', 'Y', 'T', 'H', 'H', 'A', 'A', 'H', 'H', 'E', 'E', 'H', 'H', 'W', 'A', 'H', 'I', 'D', 'E', 'H', 'I', 'E', 'X', 'H', 'I', 'G', 'H', 'H', 'I', 'Y', 'O', 'H', 'I', 'Z', 'B', 'H', 'L', 'A', 'P', 'H', 'L', 'A', 'T', 'H', 'L', 'A', 'U', 'H', 'L', 'A', 'X', 'H', 'L', 'E', 'P', 'H', 'L', 'E', 'X', 'H', 'L', 'I', 'E', 'H', 'L', 'I', 'P', 'H', 'L', 'I', 'T', 'H', 'L', 'I', 'X', 'H', 'L', 'O', 'P', 'H', 'L', 'O', 'X', 'H', 'L', 'U', 'O', 'H', 'L', 'U', 'P', 'H', 'L', 'U', 'R', 'H', 'L', 'U', 'T', 'H', 'L', 'U', 'X', 'H', 'L', 'Y', 'P', 'H', 'L', 'Y', 'R', 'H', 'L', 'Y', 'T', 'H', 'L', 'Y', 'X', 'H', 'M', 'A', 'P', 'H', 'M', 'A', 'T', 'H', 'M', 'A', 'X', 'H', 'M', 'I', 'E', 'H', 'M', 'I', 'P', 'H', 'M', 'I', 'T', 'H', 'M', 'I', 'X', 'H', 'M', 'O', 'P', 'H', 'M', 'O', 'T', 'H', 'M', 'O', 'X', 'H', 'M', 'U', 'O', 'H', 'M', 'U', 'P', 'H', 'M', 'U', 'R', 'H', 'M', 'U', 'T', 'H', 'M', 'U', 'X', 'H', 'M', 'Y', 'P', 'H', 'M', 'Y', 'R', 'H', 'M', 'Y', 'X', 'H', 'N', 'A', 'P', 'H', 'N', 'A', 'T', 'H', 'N', 'A', 'U', 'H', 'N', 'A', 'X', 'H', 'N', 'E', 'P', 'H', 'N', 'E', 'X', 'H', 'N', 'I', 'E', 'H', 'N', 'I', 'P', 'H', 'N', 'I', 'T', 'H', 'N', 'I', 'X', 'H', 'N', 'O', 'P', 'H', 'N', 'O', 'T', 'H', 'N', 'O', 'X', 'H', 'N', 'U', 'B', 'H', 'N', 'U', 'O', 'H', 'N', 'U', 'T', 'H', 'O', 'K', 'A', 'H', 'O', 'L', 'E', 'H', 'O', 'L', 'O', 'H', 'O', 'O', 'K', 'H', 'O', 'O', 'N', 'H', 'O', 'O', 'P', 'H', 'O', 'O', 'U', 'H', 'O', 'R', 'A', 'H', 'O', 'R', 'I', 'H', 'O', 'R', 'N', 'H', 'O', 'R', 'R', 'H', 'O', 'T', 'A', 'H', 'O', 'U', 'R', 'H', 'P', 'W', 'G', 'H', 'U', 'A', 'N', 'H', 'U', 'B', '2', 'H', 'U', 'L', '2', 'H', 'U', 'M', 'P', 'H', 'U', 'N', 'G', 'H', 'U', 'O', 'P', 'H', 'U', 'O', 'T', 'H', 'U', 'O', 'X', 'H', 'U', 'S', 'H', 'H', 'U', 'V', 'A', 'H', 'W', 'A', 'H', 'H', 'W', 'E', 'E', 'H', 'X', 'A', 'P', 'H', 'X', 'A', 'T', 'H', 'X', 'A', 'X', 'H', 'X', 'E', 'P', 'H', 'X', 'E', 'X', 'H', 'X', 'I', 'E', 'H', 'X', 'I', 'P', 'H', 'X', 'I', 'T', 'H', 'X', 'I', 'X', 'H', 'X', 'O', 'P', 'H', 'X', 'O', 'T', 'H', 'X', 'O', 'X', 'H', 'X', 'U', 'O', 'H', 'X', 'W', 'G', 'H', 'Z', 'W', 'G', 'H', 'Z', 'Z', 'P', 'H', 'Z', 'Z', 'Z', 'I', '-', 'E', 'U', 'I', '-', 'Y', 'A', 'I', '-', 'Y', 'E', 'I', '-', 'Y', 'O', 'I', '-', 'Y', 'U', 'I', '0', '0', '1', 'I', '0', '0', '2', 'I', '0', '0', '3', 'I', '0', '0', '4', 'I', '0', '0', '5', 'I', '0', '0', '6', 'I', '0', '0', '7', 'I', '0', '0', '8', 'I', '0', '0', '9', 'I', '0', '1', '0', 'I', '0', '1', '1', 'I', '0', '1', '2', 'I', '0', '1', '3', 'I', '0', '1', '4', 'I', '0', '1', '5', 'I', 'A', 'N', 'G', 'I', 'C', 'O', 'N', 'I', 'D', 'I', 'M', 'I', 'D', 'L', 'E', 'I', 'F', 'I', 'N', 'I', 'L', 'U', 'T', 'I', 'L', 'U', 'Y', 'I', 'M', 'I', 'N', 'I', 'N', 'A', 'P', 'I', 'N', 'C', 'H', 'I', 'N', 'N', 'N', 'I', 'N', 'T', 'I', 'I', 'N', 'Y', 'A', 'I', 'O', 'T', 'A', 'I', 'R', 'O', 'N', 'I', 'S', 'A', 'Z', 'I', 'S', 'O', 'N', 'I', 'T', 'E', 'M', 'I', 'U', 'J', 'A', 'I', 'W', 'A', 'Z', 'I', 'Y', 'E', 'K', 'I', 'Z', 'H', 'E', 'J', 'A', 'C', 'K', 'J', 'A', 'D', 'E', 'J', 'A', 'I', 'N', 'J', 'A', 'Y', 'N', 'J', 'E', 'E', 'M', 'J', 'E', 'R', 'A', 'J', 'H', 'A', 'A', 'J', 'H', 'A', 'M', 'J', 'H', 'A', 'N', 'J', 'H', 'E', 'H', 'J', 'H', 'O', 'X', 'J', 'I', 'E', 'P', 'J', 'I', 'E', 'T', 'J', 'I', 'E', 'X', 'J', 'I', 'I', 'M', 'J', 'J', 'E', 'E', 'J', 'J', 'I', 'E', 'J', 'J', 'I', 'P', 'J', 'J', 'I', 'T', 'J', 'J', 'I', 'X', 'J', 'J', 'O', 'P', 'J', 'J', 'O', 'T', 'J', 'J', 'O', 'X', 'J', 'J', 'U', 'O', 'J', 'J', 'U', 'P', 'J', 'J', 'U', 'R', 'J', 'J', 'U', 'T', 'J', 'J', 'U', 'X', 'J', 'J', 'Y', 'P', 'J', 'J', 'Y', 'T', 'J', 'J', 'Y', 'X', 'J', 'O', 'I', 'N', 'J', 'O', 'N', 'A', 'J', 'O', 'N', 'G', 'J', 'O', 'V', 'E', 'J', 'U', 'L', 'Y', 'J', 'U', 'N', 'E', 'J', 'U', 'N', 'O', 'J', 'U', 'O', 'P', 'J', 'U', 'O', 'T', 'J', 'U', 'O', 'X', 'J', 'U', 'R', 'X', 'J', 'Y', 'R', 'X', 'K', '0', '0', '1', 'K', '0', '0', '2', 'K', '0', '0', '3', 'K', '0', '0', '4', 'K', '0', '0', '5', 'K', '0', '0', '6', 'K', '0', '0', '7', 'K', '0', '0', '8', 'K', 'A', 'A', 'B', 'K', 'A', 'A', 'F', 'K', 'A', 'A', 'I', 'K', 'A', 'A', 'N', 'K', 'A', 'A', 'V', 'K', 'A', 'B', 'A', 'K', 'A', 'D', '2', 'K', 'A', 'D', '3', 'K', 'A', 'D', '4', 'K', 'A', 'D', '5', 'K', 'A', 'F', 'A', 'K', 'A', 'I', 'B', 'K', 'A', 'I', 'V', 'K', 'A', 'K', 'O', 'K', 'A', 'M', '2', 'K', 'A', 'M', '4', 'K', 'A', 'N', 'A', 'K', 'A', 'N', 'G', 'K', 'A', 'P', 'A', 'K', 'A', 'P', 'H', 'K', 'A', 'P', 'O', 'K', 'A', 'R', 'O', 'K', 'A', 'T', 'O', 'K', 'A', 'U', 'B', 'K', 'A', 'U', 'N', 'K', 'A', 'U', 'V', 'K', 'A', 'W', 'B', 'K', 'A', 'W', 'I', 'K', 'A', 'W', 'V', 'K', 'C', 'A', 'L', 'K', 'E', 'E', 'B', 'K', 'E', 'E', 'V', 'K', 'E', 'O', 'W', 'K', 'E', 'U', 'M', 'K', 'E', 'U', 'P', 'K', 'E', 'U', 'X', 'K', 'H', 'A', 'A', 'K', 'H', 'A', 'B', 'K', 'H', 'A', 'H', 'K', 'H', 'A', 'I', 'K', 'H', 'A', 'N', 'K', 'H', 'A', 'R', 'K', 'H', 'A', 'V', 'K', 'H', 'E', 'E', 'K', 'H', 'E', 'I', 'K', 'H', 'H', 'A', 'K', 'H', 'H', 'O', 'K', 'H', 'I', 'T', 'K', 'H', 'M', 'U', 'K', 'H', 'O', 'N', 'K', 'H', 'O', 'T', 'K', 'H', 'O', 'U', 'K', 'I', 'A', 'B', 'K', 'I', 'A', 'V', 'K', 'I', 'C', 'K', 'K', 'I', 'E', 'P', 'K', 'I', 'E', 'X', 'K', 'I', 'N', 'G', 'K', 'I', 'R', 'O', 'K', 'I', 'S', 'H', 'K', 'I', 'S', 'S', 'K', 'K', 'E', 'E', 'K', 'O', 'E', 'T', 'K', 'O', 'K', 'E', 'K', 'O', 'K', 'O', 'K', 'O', 'M', 'I', 'K', 'O', 'O', 'B', 'K', 'O', 'O', 'V', 'K', 'O', 'T', 'O', 'K', 'P', 'A', 'H', 'K', 'P', 'A', 'N', 'K', 'P', 'E', 'E', 'K', 'P', 'E', 'N', 'K', 'P', 'O', 'O', 'K', 'P', 'O', 'Q', 'K', 'S', 'S', 'A', 'K', 'U', 'A', 'B', 'K', 'U', 'A', 'V', 'K', 'U', 'E', 'T', 'K', 'U', 'N', 'G', 'K', 'U', 'O', 'M', 'K', 'U', 'O', 'P', 'K', 'U', 'O', 'Q', 'K', 'U', 'O', 'X', 'K', 'U', 'R', 'T', 'K', 'U', 'R', 'X', 'K', 'U', 'U', 'H', 'K', 'W', 'A', 'A', 'K', 'W', 'A', 'Y', 'K', 'W', 'E', 'E', 'K', 'W', 'I', 'I', 'K', 'W', 'O', 'O', 'K', 'X', 'A', 'A', 'K', 'X', 'E', 'E', 'K', 'X', 'W', 'A', 'K', 'X', 'W', 'E', 'K', 'X', 'W', 'I', 'K', 'Y', 'A', 'A', 'K', 'Y', 'E', 'E', 'L', '0', '0', '1', 'L', '0', '0', '2', 'L', '0', '0', '3', 'L', '0', '0', '4', 'L', '0', '0', '5', 'L', '0', '0', '6', 'L', '0', '0', '7', 'L', '0', '0', '8', 'L', 'A', 'A', 'I', 'L', 'A', 'A', 'M', 'L', 'A', 'A', 'N', 'L', 'A', 'C', 'A', 'L', 'A', 'C', 'K', 'L', 'A', 'D', 'Y', 'L', 'A', 'E', 'V', 'L', 'A', 'G', 'U', 'L', 'A', 'K', 'E', 'L', 'A', 'M', 'D', 'L', 'A', 'M', 'E', 'L', 'A', 'M', 'P', 'L', 'A', 'N', 'E', 'L', 'A', 'R', 'I', 'L', 'A', 'S', 'T', 'L', 'A', 'T', 'E', 'L', 'A', 'U', 'J', 'L', 'A', 'Z', 'Y', 'L', 'D', 'A', 'N', 'L', 'E', 'A', 'D', 'L', 'E', 'A', 'F', 'L', 'E', 'E', 'K', 'L', 'E', 'F', 'T', 'L', 'E', 'G', 'S', 'L', 'E', 'S', 'S', 'L', 'E', 'U', 'M', 'L', 'E', 'Z', 'H', 'L', 'H', 'A', 'A', 'L', 'H', 'A', 'G', 'L', 'H', 'E', 'E', 'L', 'H', 'I', 'I', 'L', 'H', 'O', 'O', 'L', 'H', 'Y', 'A', 'L', 'I', 'E', 'E', 'L', 'I', 'E', 'P', 'L', 'I', 'E', 'T', 'L', 'I', 'E', 'X', 'L', 'I', 'F', 'E', 'L', 'I', 'L', 'Y', 'L', 'I', 'M', 'B', 'L', 'I', 'M', 'E', 'L', 'I', 'N', 'E', 'L', 'I', 'N', 'G', 'L', 'I', 'N', 'K', 'L', 'I', 'O', 'N', 'L', 'I', 'P', 'S', 'L', 'I', 'R', 'A', 'L', 'I', 'S', 'H', 'L', 'I', 'S', 'U', 'L', 'I', 'T', 'H', 'L', 'I', 'W', 'N', 'L', 'L', 'L', 'A', 'L', 'O', 'C', 'K', 'L', 'O', 'G', 'R', 'L', 'O', 'L', 'L', 'L', 'O', 'N', 'G', 'L', 'O', 'O', 'K', 'L', 'O', 'O', 'N', 'L', 'O', 'O', 'P', 'L', 'O', 'O', 'T', 'L', 'O', 'V', 'E', 'L', 'U', 'I', 'S', 'L', 'U', 'O', 'P', 'L', 'U', 'O', 'T', 'L', 'U', 'O', 'X', 'L', 'U', 'R', 'X', 'L', 'W', 'A', 'A', 'L', 'W', 'I', 'I', 'L', 'W', 'O', 'O', 'L', 'Y', 'I', 'T', 'L', 'Y', 'R', 'X', 'M', '0', '0', '1', 'M', '0', '0', '2', 'M', '0', '0', '3', 'M', '0', '0', '4', 'M', '0', '0', '5', 'M', '0', '0', '6', 'M', '0', '0', '7', 'M', '0', '0', '8', 'M', '0', '0', '9', 'M', '0', '1', '0', 'M', '0', '1', '1', 'M', '0', '1', '2', 'M', '0', '1', '3', 'M', '0', '1', '4', 'M', '0', '1', '5', 'M', '0', '1', '6', 'M', '0', '1', '7', 'M', '0', '1', '8', 'M', '0', '1', '9', 'M', '0', '2', '0', 'M', '0', '2', '1', 'M', '0', '2', '2', 'M', '0', '2', '3', 'M', '0', '2', '4', 'M', '0', '2', '5', 'M', '0', '2', '6', 'M', '0', '2', '7', 'M', '0', '2', '8', 'M', '0', '2', '9', 'M', '0', '3', '0', 'M', '0', '3', '1', 'M', '0', '3', '2', 'M', '0', '3', '3', 'M', '0', '3', '4', 'M', '0', '3', '5', 'M', '0', '3', '6', 'M', '0', '3', '7', 'M', '0', '3', '8', 'M', '0', '3', '9', 'M', '0', '4', '0', 'M', '0', '4', '1', 'M', '0', '4', '2', 'M', '0', '4', '3', 'M', '0', '4', '4', 'M', '0', '4', '5', 'M', '0', '4', '6', 'M', '0', '4', '7', 'M', '0', '4', '8', 'M', '0', '4', '9', 'M', '0', '5', '0', 'M', '0', '5', '1', 'M', '0', '5', '2', 'M', '0', '5', '3', 'M', '0', '5', '4', 'M', '0', '5', '5', 'M', '0', '5', '6', 'M', '0', '5', '7', 'M', '0', '5', '8', 'M', '0', '5', '9', 'M', '0', '6', '0', 'M', '0', '6', '1', 'M', '0', '6', '2', 'M', '0', '6', '3', 'M', '0', '6', '4', 'M', '0', '6', '5', 'M', '0', '6', '6', 'M', '0', '6', '7', 'M', '0', '6', '8', 'M', '0', '6', '9', 'M', '0', '7', '0', 'M', '0', '7', '1', 'M', '0', '7', '2', 'M', '0', '7', '3', 'M', '0', '7', '4', 'M', '0', '7', '5', 'M', '0', '7', '6', 'M', '0', '7', '7', 'M', '0', '7', '8', 'M', '0', '7', '9', 'M', '0', '8', '0', 'M', '0', '8', '1', 'M', '0', '8', '2', 'M', '0', '8', '3', 'M', '0', '8', '4', 'M', '0', '8', '5', 'M', '0', '8', '6', 'M', '0', '8', '7', 'M', '0', '8', '8', 'M', '0', '8', '9', 'M', '0', '9', '0', 'M', '0', '9', '1', 'M', '0', '9', '2', 'M', '0', '9', '3', 'M', '0', '9', '4', 'M', '0', '9', '5', 'M', '0', '9', '6', 'M', '0', '9', '7', 'M', '0', '9', '8', 'M', '0', '9', '9', 'M', '1', '0', '0', 'M', '1', '0', '1', 'M', '1', '0', '2', 'M', '1', '0', '3', 'M', '1', '0', '4', 'M', '1', '0', '5', 'M', '1', '0', '6', 'M', '1', '0', '7', 'M', '1', '0', '8', 'M', '1', '0', '9', 'M', '1', '1', '0', 'M', '1', '1', '1', 'M', '1', '1', '2', 'M', '1', '1', '3', 'M', '1', '1', '4', 'M', '1', '1', '5', 'M', '1', '1', '6', 'M', '1', '1', '7', 'M', '1', '1', '8', 'M', '1', '1', '9', 'M', '1', '2', '0', 'M', '1', '2', '1', 'M', '1', '2', '2', 'M', '1', '2', '3', 'M', '1', '2', '4', 'M', '1', '2', '5', 'M', '1', '2', '6', 'M', '1', '2', '7', 'M', '1', '2', '8', 'M', '1', '2', '9', 'M', '1', '3', '0', 'M', '1', '3', '1', 'M', '1', '3', '2', 'M', '1', '3', '3', 'M', '1', '3', '4', 'M', '1', '3', '5', 'M', '1', '3', '6', 'M', '1', '3', '7', 'M', '1', '3', '8', 'M', '1', '3', '9', 'M', '1', '4', '0', 'M', '1', '4', '1', 'M', '1', '4', '2', 'M', '1', '4', '3', 'M', '1', '4', '4', 'M', '1', '4', '5', 'M', '1', '4', '6', 'M', '1', '4', '7', 'M', '1', '4', '8', 'M', '1', '4', '9', 'M', '1', '5', '0', 'M', '1', '5', '1', 'M', '1', '5', '2', 'M', '1', '5', '3', 'M', '1', '5', '4', 'M', '1', '5', '5', 'M', '1', '5', '6', 'M', '1', '5', '7', 'M', '1', '5', '8', 'M', '1', '5', '9', 'M', '1', '6', '0', 'M', '1', '6', '1', 'M', '1', '6', '2', 'M', '1', '6', '3', 'M', '1', '6', '4', 'M', '1', '6', '5', 'M', '1', '6', '6', 'M', '1', '6', '7', 'M', '1', '6', '8', 'M', '1', '6', '9', 'M', '1', '7', '0', 'M', '1', '7', '1', 'M', '1', '7', '2', 'M', '1', '7', '3', 'M', '1', '7', '4', 'M', '1', '7', '5', 'M', '1', '7', '6', 'M', '1', '7', '7', 'M', '1', '7', '8', 'M', '1', '7', '9', 'M', '1', '8', '0', 'M', '1', '8', '1', 'M', '1', '8', '2', 'M', '1', '8', '3', 'M', '1', '8', '4', 'M', '1', '8', '5', 'M', '1', '8', '6', 'M', '1', '8', '7', 'M', '1', '8', '8', 'M', '1', '8', '9', 'M', '1', '9', '0', 'M', '1', '9', '1', 'M', '1', '9', '2', 'M', '1', '9', '3', 'M', '1', '9', '4', 'M', '1', '9', '5', 'M', '1', '9', '6', 'M', '1', '9', '7', 'M', 'A', 'A', 'I', 'M', 'A', 'D', 'U', 'M', 'A', 'E', 'M', 'M', 'A', 'L', 'E', 'M', 'A', 'N', 'S', 'M', 'A', 'R', 'E', 'M', 'A', 'R', 'K', 'M', 'A', 'R', 'Y', 'M', 'A', 'S', 'H', 'M', 'A', 'S', 'K', 'M', 'A', 'S', 'U', 'M', 'B', 'A', 'A', 'M', 'B', 'A', 'Q', 'M', 'B', 'E', 'E', 'M', 'B', 'E', 'N', 'M', 'B', 'I', 'T', 'M', 'B', 'O', 'O', 'M', 'B', 'U', 'E', 'M', 'B', 'U', 'O', 'M', 'B', 'U', 'U', 'M', 'C', 'H', 'U', 'M', 'D', 'U', 'N', 'M', 'E', 'A', 'T', 'M', 'E', 'E', 'J', 'M', 'E', 'E', 'M', 'M', 'E', 'E', 'T', 'M', 'E', 'G', 'A', 'M', 'E', 'M', 'O', 'M', 'E', 'N', 'S', 'M', 'E', 'R', 'I', 'M', 'E', 'S', 'H', 'M', 'E', 'S', 'I', 'M', 'E', 'S', 'O', 'M', 'E', 'T', 'A', 'M', 'E', 'U', 'N', 'M', 'E', 'U', 'Q', 'M', 'E', 'U', 'T', 'M', 'F', 'A', 'A', 'M', 'F', 'O', 'N', 'M', 'G', 'A', 'P', 'M', 'G', 'A', 'T', 'M', 'G', 'A', 'X', 'M', 'G', 'B', 'A', 'M', 'G', 'B', 'E', 'M', 'G', 'B', 'I', 'M', 'G', 'B', 'O', 'M', 'G', 'B', 'U', 'M', 'G', 'E', 'P', 'M', 'G', 'E', 'X', 'M', 'G', 'I', 'E', 'M', 'G', 'O', 'P', 'M', 'G', 'O', 'T', 'M', 'G', 'O', 'X', 'M', 'G', 'U', 'O', 'M', 'G', 'U', 'P', 'M', 'G', 'U', 'R', 'M', 'G', 'U', 'T', 'M', 'G', 'U', 'X', 'M', 'I', 'A', 'O', 'M', 'I', 'C', 'R', 'M', 'I', 'E', 'E', 'M', 'I', 'E', 'P', 'M', 'I', 'E', 'X', 'M', 'I', 'I', 'M', 'M', 'I', 'I', 'N', 'M', 'I', 'L', 'K', 'M', 'I', 'L', 'L', 'M', 'I', 'M', 'E', 'M', 'I', 'N', 'Y', 'M', 'I', 'R', 'I', 'M', 'M', 'S', 'P', 'M', 'N', 'A', 'S', 'M', 'O', 'D', 'E', 'M', 'O', 'D', 'I', 'M', 'O', 'N', 'I', 'M', 'O', 'O', 'D', 'M', 'O', 'O', 'N', 'M', 'O', 'V', 'E', 'M', 'U', 'A', 'E', 'M', 'U', 'A', 'N', 'M', 'U', 'A', 'S', 'M', 'U', 'C', 'H', 'M', 'U', 'E', 'N', 'M', 'U', 'G', 'S', 'M', 'U', 'I', 'N', 'M', 'U', 'O', 'P', 'M', 'U', 'O', 'T', 'M', 'U', 'O', 'X', 'M', 'U', 'O', 'Y', 'M', 'U', 'R', 'E', 'M', 'U', 'R', 'X', 'M', 'U', 'S', 'H', 'M', 'V', 'O', 'P', 'M', 'W', 'A', 'A', 'M', 'W', 'E', 'E', 'M', 'W', 'I', 'I', 'M', 'W', 'O', 'O', 'N', '0', '0', '1', 'N', '0', '0', '2', 'N', '0', '0', '3', 'N', '0', '0', '4', 'N', '0', '0', '5', 'N', '0', '0', '6', 'N', '0', '0', '7', 'N', '0', '0', '8', 'N', '0', '0', '9', 'N', '0', '1', '0', 'N', '0', '1', '1', 'N', '0', '1', '2', 'N', '0', '1', '3', 'N', '0', '1', '4', 'N', '0', '1', '5', 'N', '0', '1', '6', 'N', '0', '1', '7', 'N', '0', '1', '8', 'N', '0', '1', '9', 'N', '0', '2', '0', 'N', '0', '2', '1', 'N', '0', '2', '2', 'N', '0', '2', '3', 'N', '0', '2', '4', 'N', '0', '2', '5', 'N', '0', '2', '6', 'N', '0', '2', '7', 'N', '0', '2', '8', 'N', '0', '2', '9', 'N', '0', '3', '0', 'N', '0', '3', '1', 'N', '0', '3', '2', 'N', '0', '3', '3', 'N', '0', '3', '4', 'N', '0', '3', '5', 'N', '0', '3', '6', 'N', '0', '3', '7', 'N', '0', '3', '8', 'N', '0', '3', '9', 'N', '0', '4', '0', 'N', '0', '4', '1', 'N', '0', '4', '2', 'N', 'A', '-', '2', 'N', 'A', 'A', 'I', 'N', 'A', 'G', 'A', 'N', 'A', 'I', 'L', 'N', 'A', 'M', '2', 'N', 'A', 'M', 'E', 'N', 'A', 'N', 'A', 'N', 'A', 'N', 'D', 'N', 'A', 'N', 'O', 'N', 'A', 'O', 'S', 'N', 'A', 'U', 'D', 'N', 'B', 'A', 'P', 'N', 'B', 'A', 'T', 'N', 'B', 'A', 'X', 'N', 'B', 'I', 'E', 'N', 'B', 'I', 'P', 'N', 'B', 'I', 'T', 'N', 'B', 'I', 'X', 'N', 'B', 'O', 'P', 'N', 'B', 'O', 'T', 'N', 'B', 'O', 'X', 'N', 'B', 'S', 'P', 'N', 'B', 'U', 'P', 'N', 'B', 'U', 'R', 'N', 'B', 'U', 'T', 'N', 'B', 'U', 'X', 'N', 'B', 'Y', 'P', 'N', 'B', 'Y', 'R', 'N', 'B', 'Y', 'T', 'N', 'B', 'Y', 'X', 'N', 'D', 'A', 'A', 'N', 'D', 'A', 'M', 'N', 'D', 'A', 'P', 'N', 'D', 'A', 'T', 'N', 'D', 'A', 'X', 'N', 'D', 'E', 'E', 'N', 'D', 'E', 'P', 'N', 'D', 'E', 'X', 'N', 'D', 'I', 'E', 'N', 'D', 'I', 'P', 'N', 'D', 'I', 'Q', 'N', 'D', 'I', 'T', 'N', 'D', 'I', 'X', 'N', 'D', 'O', 'N', 'N', 'D', 'O', 'O', 'N', 'D', 'O', 'P', 'N', 'D', 'O', 'T', 'N', 'D', 'O', 'X', 'N', 'D', 'U', 'N', 'N', 'D', 'U', 'P', 'N', 'D', 'U', 'R', 'N', 'D', 'U', 'T', 'N', 'D', 'U', 'X', 'N', 'E', '-', '2', 'N', 'E', 'C', 'K', 'N', 'E', 'R', 'D', 'N', 'E', 'W', 'A', 'N', 'E', 'X', 'T', 'N', 'G', 'A', 'A', 'N', 'G', 'A', 'H', 'N', 'G', 'A', 'I', 'N', 'G', 'A', 'N', 'N', 'G', 'A', 'P', 'N', 'G', 'A', 'Q', 'N', 'G', 'A', 'S', 'N', 'G', 'A', 'T', 'N', 'G', 'A', 'X', 'N', 'G', 'E', 'N', 'N', 'G', 'E', 'P', 'N', 'G', 'E', 'X', 'N', 'G', 'G', 'A', 'N', 'G', 'G', 'E', 'N', 'G', 'G', 'I', 'N', 'G', 'G', 'O', 'N', 'G', 'G', 'U', 'N', 'G', 'H', 'A', 'N', 'G', 'I', 'E', 'N', 'G', 'I', 'I', 'N', 'G', 'K', 'A', 'N', 'G', 'O', 'M', 'N', 'G', 'O', 'N', 'N', 'G', 'O', 'O', 'N', 'G', 'O', 'P', 'N', 'G', 'O', 'Q', 'N', 'G', 'O', 'T', 'N', 'G', 'O', 'U', 'N', 'G', 'O', 'X', 'N', 'G', 'U', 'E', 'N', 'G', 'U', 'O', 'N', 'G', 'V', 'E', 'N', 'G', 'Y', 'E', 'N', 'H', 'J', 'A', 'N', 'H', 'U', 'E', 'N', 'I', 'E', 'P', 'N', 'I', 'E', 'X', 'N', 'I', 'K', 'A', 'N', 'I', 'N', '9', 'N', 'I', 'N', 'E', 'N', 'I', 'O', 'N', 'N', 'J', 'A', 'A', 'N', 'J', 'A', 'M', 'N', 'J', 'A', 'P', 'N', 'J', 'A', 'Q', 'N', 'J', 'E', 'E', 'N', 'J', 'I', 'E', 'N', 'J', 'I', 'P', 'N', 'J', 'I', 'T', 'N', 'J', 'I', 'X', 'N', 'J', 'O', 'O', 'N', 'J', 'O', 'P', 'N', 'J', 'O', 'T', 'N', 'J', 'O', 'X', 'N', 'J', 'U', 'O', 'N', 'J', 'U', 'P', 'N', 'J', 'U', 'R', 'N', 'J', 'U', 'X', 'N', 'J', 'Y', 'P', 'N', 'J', 'Y', 'R', 'N', 'J', 'Y', 'T', 'N', 'J', 'Y', 'X', 'N', 'K', 'A', 'U', 'N', 'K', 'O', 'M', 'N', 'L', 'A', 'U', 'N', 'N', 'A', 'A', 'N', 'N', 'G', 'A', 'N', 'N', 'G', 'I', 'N', 'N', 'G', 'O', 'N', 'N', 'H', 'A', 'N', 'N', 'N', 'A', 'N', 'N', 'Y', 'A', 'N', 'O', 'D', 'E', 'N', 'O', 'O', 'N', 'N', 'O', 'S', 'E', 'N', 'O', 'T', 'E', 'N', 'O', 'W', 'C', 'N', 'Q', 'I', 'G', 'N', 'R', 'A', 'P', 'N', 'R', 'A', 'T', 'N', 'R', 'A', 'X', 'N', 'R', 'E', 'P', 'N', 'R', 'E', 'S', 'N', 'R', 'E', 'T', 'N', 'R', 'E', 'X', 'N', 'R', 'O', 'P', 'N', 'R', 'O', 'X', 'N', 'R', 'U', 'A', 'N', 'R', 'U', 'P', 'N', 'R', 'U', 'R', 'N', 'R', 'U', 'T', 'N', 'R', 'U', 'X', 'N', 'R', 'Y', 'P', 'N', 'R', 'Y', 'R', 'N', 'R', 'Y', 'T', 'N', 'R', 'Y', 'X', 'N', 'S', 'E', 'N', 'N', 'S', 'H', 'A', 'N', 'S', 'O', 'M', 'N', 'S', 'U', 'M', 'N', 'S', 'U', 'N', 'N', 'T', 'A', 'A', 'N', 'T', 'A', 'P', 'N', 'T', 'E', 'E', 'N', 'T', 'E', 'N', 'N', 'T', 'O', 'G', 'N', 'T', 'U', 'J', 'N', 'T', 'U', 'M', 'N', 'T', 'U', 'U', 'N', 'U', '1', '1', 'N', 'U', 'A', 'E', 'N', 'U', 'L', 'L', 'N', 'U', 'N', 'G', 'N', 'U', 'O', 'P', 'N', 'U', 'O', 'X', 'N', 'U', 'R', 'X', 'N', 'U', 'U', 'N', 'N', 'W', 'A', 'A', 'N', 'W', 'I', 'I', 'N', 'W', 'O', 'O', 'N', 'Y', 'A', 'A', 'N', 'Y', 'A', 'H', 'N', 'Y', 'A', 'M', 'N', 'Y', 'A', 'N', 'N', 'Y', 'C', 'A', 'N', 'Y', 'E', 'E', 'N', 'Y', 'E', 'H', 'N', 'Y', 'E', 'N', 'N', 'Y', 'E', 'T', 'N', 'Y', 'H', 'A', 'N', 'Y', 'I', 'E', 'N', 'Y', 'I', 'N', 'N', 'Y', 'I', 'P', 'N', 'Y', 'I', 'R', 'N', 'Y', 'I', 'S', 'N', 'Y', 'I', 'T', 'N', 'Y', 'I', 'X', 'N', 'Y', 'J', 'A', 'N', 'Y', 'O', 'A', 'N', 'Y', 'O', 'N', 'N', 'Y', 'O', 'O', 'N', 'Y', 'O', 'P', 'N', 'Y', 'O', 'T', 'N', 'Y', 'O', 'X', 'N', 'Y', 'U', 'E', 'N', 'Y', 'U', 'N', 'N', 'Y', 'U', 'O', 'N', 'Y', 'U', 'P', 'N', 'Y', 'U', 'T', 'N', 'Y', 'U', 'X', 'N', 'Y', 'W', 'A', 'N', 'Z', 'A', 'P', 'N', 'Z', 'A', 'Q', 'N', 'Z', 'A', 'T', 'N', 'Z', 'A', 'X', 'N', 'Z', 'E', 'X', 'N', 'Z', 'I', 'E', 'N', 'Z', 'I', 'P', 'N', 'Z', 'I', 'T', 'N', 'Z', 'I', 'X', 'N', 'Z', 'O', 'P', 'N', 'Z', 'O', 'X', 'N', 'Z', 'U', 'N', 'N', 'Z', 'U', 'O', 'N', 'Z', 'U', 'P', 'N', 'Z', 'U', 'Q', 'N', 'Z', 'U', 'R', 'N', 'Z', 'U', 'X', 'N', 'Z', 'Y', 'P', 'N', 'Z', 'Y', 'R', 'N', 'Z', 'Y', 'T', 'N', 'Z', 'Y', 'X', 'O', '-', 'E', 'O', 'O', '-', 'Y', 'A', 'O', '-', 'Y', 'E', 'O', '0', '0', '1', 'O', '0', '0', '2', 'O', '0', '0', '3', 'O', '0', '0', '4', 'O', '0', '0', '5', 'O', '0', '0', '6', 'O', '0', '0', '7', 'O', '0', '0', '8', 'O', '0', '0', '9', 'O', '0', '1', '0', 'O', '0', '1', '1', 'O', '0', '1', '2', 'O', '0', '1', '3', 'O', '0', '1', '4', 'O', '0', '1', '5', 'O', '0', '1', '6', 'O', '0', '1', '7', 'O', '0', '1', '8', 'O', '0', '1', '9', 'O', '0', '2', '0', 'O', '0', '2', '1', 'O', '0', '2', '2', 'O', '0', '2', '3', 'O', '0', '2', '4', 'O', '0', '2', '5', 'O', '0', '2', '6', 'O', '0', '2', '7', 'O', '0', '2', '8', 'O', '0', '2', '9', 'O', '0', '3', '0', 'O', '0', '3', '1', 'O', '0', '3', '2', 'O', '0', '3', '3', 'O', '0', '3', '4', 'O', '0', '3', '5', 'O', '0', '3', '6', 'O', '0', '3', '7', 'O', '0', '3', '8', 'O', '0', '3', '9', 'O', '0', '4', '0', 'O', '0', '4', '1', 'O', '0', '4', '2', 'O', '0', '4', '3', 'O', '0', '4', '4', 'O', '0', '4', '5', 'O', '0', '4', '6', 'O', '0', '4', '7', 'O', '0', '4', '8', 'O', '0', '4', '9', 'O', '0', '5', '0', 'O', '0', '5', '1', 'O', 'B', 'O', 'L', 'O', 'D', 'E', 'N', 'O', 'G', 'R', 'E', 'O', 'K', 'T', 'O', 'O', 'N', 'A', 'P', 'O', 'N', 'S', 'U', 'O', 'O', 'M', 'U', 'O', 'O', 'Z', 'E', 'O', 'P', 'E', 'N', 'O', 'V', 'A', 'L', 'O', 'V', 'E', 'R', 'O', 'X', 'I', 'A', 'P', '0', '0', '1', 'P', '0', '0', '2', 'P', '0', '0', '3', 'P', '0', '0', '4', 'P', '0', '0', '5', 'P', '0', '0', '6', 'P', '0', '0', '7', 'P', '0', '0', '8', 'P', '0', '0', '9', 'P', '0', '1', '0', 'P', '0', '1', '1', 'P', 'A', 'A', 'I', 'P', 'A', 'A', 'M', 'P', 'A', 'D', 'A', 'P', 'A', 'G', 'E', 'P', 'A', 'L', 'M', 'P', 'A', 'N', 'G', 'P', 'A', 'R', 'A', 'P', 'A', 'R', 'K', 'P', 'A', 'R', 'T', 'P', 'A', 'T', 'H', 'P', 'A', 'W', 'N', 'P', 'E', 'A', 'R', 'P', 'E', 'E', 'I', 'P', 'E', 'E', 'M', 'P', 'E', 'E', 'P', 'P', 'E', 'S', 'O', 'P', 'E', 'U', 'T', 'P', 'E', 'U', 'X', 'P', 'H', 'A', 'A', 'P', 'H', 'A', 'B', 'P', 'H', 'A', 'M', 'P', 'H', 'A', 'N', 'P', 'H', 'A', 'R', 'P', 'H', 'E', 'E', 'P', 'H', 'O', 'A', 'P', 'H', 'U', 'R', 'P', 'H', 'W', 'A', 'P', 'I', 'C', 'K', 'P', 'I', 'E', 'P', 'P', 'I', 'E', 'T', 'P', 'I', 'E', 'X', 'P', 'I', 'K', 'O', 'P', 'I', 'L', 'E', 'P', 'I', 'L', 'L', 'P', 'I', 'N', 'E', 'P', 'I', 'N', 'G', 'P', 'I', 'R', '2', 'P', 'I', 'W', 'R', 'P', 'L', 'A', 'K', 'P', 'L', 'O', 'W', 'P', 'L', 'U', 'G', 'P', 'L', 'U', 'K', 'P', 'L', 'U', 'M', 'P', 'L', 'U', 'S', 'P', 'O', 'L', 'E', 'P', 'O', 'L', 'I', 'P', 'O', 'L', 'O', 'P', 'O', 'O', 'N', 'P', 'O', 'S', 'T', 'P', 'R', 'A', 'M', 'P', 'U', 'A', 'E', 'P', 'U', 'A', 'Q', 'P', 'U', 'C', 'K', 'P', 'U', 'M', 'P', 'P', 'U', 'N', 'G', 'P', 'U', 'O', 'P', 'P', 'U', 'O', 'X', 'P', 'U', 'R', 'X', 'P', 'U', 'U', 'T', 'P', 'W', 'A', 'A', 'P', 'W', 'E', 'E', 'P', 'W', 'I', 'I', 'P', 'W', 'O', 'O', 'P', 'W', 'O', 'Y', 'P', 'Y', 'R', 'X', 'Q', '0', '0', '1', 'Q', '0', '0', '2', 'Q', '0', '0', '3', 'Q', '0', '0', '4', 'Q', '0', '0', '5', 'Q', '0', '0', '6', 'Q', '0', '0', '7', 'Q', 'A', 'A', 'F', 'Q', 'A', 'A', 'I', 'Q', 'A', 'L', 'A', 'Q', 'A', 'P', 'H', 'Q', 'H', 'A', 'A', 'Q', 'H', 'A', 'U', 'Q', 'H', 'E', 'E', 'Q', 'H', 'W', 'A', 'Q', 'H', 'W', 'E', 'Q', 'H', 'W', 'I', 'Q', 'I', 'E', 'P', 'Q', 'I', 'E', 'T', 'Q', 'I', 'E', 'X', 'Q', 'O', 'P', 'A', 'Q', 'O', 'P', 'H', 'Q', 'U', 'A', 'D', 'Q', 'U', 'O', 'P', 'Q', 'U', 'O', 'T', 'Q', 'U', 'O', 'X', 'Q', 'U', 'R', 'X', 'Q', 'U', 'U', 'V', 'Q', 'W', 'A', 'A', 'Q', 'W', 'E', 'E', 'Q', 'Y', 'A', 'A', 'Q', 'Y', 'E', 'E', 'Q', 'Y', 'R', 'X', 'R', '0', '0', '1', 'R', '0', '0', '2', 'R', '0', '0', '3', 'R', '0', '0', '4', 'R', '0', '0', '5', 'R', '0', '0', '6', 'R', '0', '0', '7', 'R', '0', '0', '8', 'R', '0', '0', '9', 'R', '0', '1', '0', 'R', '0', '1', '1', 'R', '0', '1', '2', 'R', '0', '1', '3', 'R', '0', '1', '4', 'R', '0', '1', '5', 'R', '0', '1', '6', 'R', '0', '1', '7', 'R', '0', '1', '8', 'R', '0', '1', '9', 'R', '0', '2', '0', 'R', '0', '2', '1', 'R', '0', '2', '2', 'R', '0', '2', '3', 'R', '0', '2', '4', 'R', '0', '2', '5', 'R', '0', '2', '6', 'R', '0', '2', '7', 'R', '0', '2', '8', 'R', '0', '2', '9', 'R', 'A', '-', '2', 'R', 'A', 'A', 'I', 'R', 'A', 'D', 'I', 'R', 'A', 'E', 'M', 'R', 'A', 'F', 'E', 'R', 'A', 'I', 'L', 'R', 'A', 'I', 'N', 'R', 'A', 'M', 'S', 'R', 'A', 'N', 'A', 'R', 'A', 'T', 'A', 'R', 'A', 'Y', 'S', 'R', 'D', 'E', 'L', 'R', 'E', 'I', 'D', 'R', 'E', 'M', 'U', 'R', 'E', 'P', 'A', 'R', 'E', 'P', 'H', 'R', 'E', 'S', 'H', 'R', 'E', 'S', 'T', 'R', 'E', 'U', 'X', 'R', 'G', 'Y', 'A', 'R', 'I', 'A', 'L', 'R', 'I', 'C', 'E', 'R', 'I', 'E', 'E', 'R', 'I', 'E', 'L', 'R', 'I', 'N', 'G', 'R', 'I', 'R', 'A', 'R', 'I', 'S', 'H', 'R', 'J', 'E', 'S', 'R', 'N', 'A', 'M', 'R', 'O', 'A', 'R', 'R', 'O', 'C', 'K', 'R', 'O', 'O', 'F', 'R', 'O', 'O', 'K', 'R', 'O', 'O', 'T', 'R', 'O', 'S', 'E', 'R', 'O', 'S', 'H', 'R', 'R', 'A', 'X', 'R', 'R', 'E', 'H', 'R', 'R', 'E', 'P', 'R', 'R', 'E', 'T', 'R', 'R', 'E', 'X', 'R', 'R', 'O', 'P', 'R', 'R', 'O', 'T', 'R', 'R', 'O', 'X', 'R', 'R', 'R', 'A', 'R', 'R', 'U', 'O', 'R', 'R', 'U', 'P', 'R', 'R', 'U', 'R', 'R', 'R', 'U', 'T', 'R', 'R', 'U', 'X', 'R', 'R', 'Y', 'P', 'R', 'R', 'Y', 'R', 'R', 'R', 'Y', 'T', 'R', 'R', 'Y', 'X', 'R', 'U', 'I', 'S', 'R', 'U', 'L', 'E', 'R', 'U', 'M', 'I', 'R', 'U', 'O', 'P', 'R', 'U', 'O', 'X', 'R', 'U', 'R', 'X', 'R', 'U', 'S', 'I', 'R', 'W', 'A', 'A', 'R', 'W', 'E', 'E', 'R', 'W', 'I', 'I', 'R', 'W', 'O', 'O', 'R', 'Y', 'R', 'X', 'S', '0', '0', '1', 'S', '0', '0', '2', 'S', '0', '0', '3', 'S', '0', '0', '4', 'S', '0', '0', '5', 'S', '0', '0', '6', 'S', '0', '0', '7', 'S', '0', '0', '8', 'S', '0', '0', '9', 'S', '0', '1', '0', 'S', '0', '1', '1', 'S', '0', '1', '2', 'S', '0', '1', '3', 'S', '0', '1', '4', 'S', '0', '1', '5', 'S', '0', '1', '6', 'S', '0', '1', '7', 'S', '0', '1', '8', 'S', '0', '1', '9', 'S', '0', '2', '0', 'S', '0', '2', '1', 'S', '0', '2', '2', 'S', '0', '2', '3', 'S', '0', '2', '4', 'S', '0', '2', '5', 'S', '0', '2', '6', 'S', '0', '2', '7', 'S', '0', '2', '8', 'S', '0', '2', '9', 'S', '0', '3', '0', 'S', '0', '3', '1', 'S', '0', '3', '2', 'S', '0', '3', '3', 'S', '0', '3', '4', 'S', '0', '3', '5', 'S', '0', '3', '6', 'S', '0', '3', '7', 'S', '0', '3', '8', 'S', '0', '3', '9', 'S', '0', '4', '0', 'S', '0', '4', '1', 'S', '0', '4', '2', 'S', '0', '4', '3', 'S', '0', '4', '4', 'S', '0', '4', '5', 'S', '0', '4', '6', 'S', 'A', '-', '2', 'S', 'A', '-', 'I', 'S', 'A', 'A', 'I', 'S', 'A', 'D', 'E', 'S', 'A', 'G', 'A', 'S', 'A', 'I', 'L', 'S', 'A', 'K', 'E', 'S', 'A', 'L', 'A', 'S', 'A', 'L', 'T', 'S', 'A', 'N', 'D', 'S', 'A', 'P', 'A', 'S', 'A', 'R', 'A', 'S', 'A', 'R', 'I', 'S', 'A', 'S', 'H', 'S', 'B', 'U', 'B', 'S', 'C', 'A', 'N', 'S', 'C', 'W', 'A', 'S', 'E', 'A', 'L', 'S', 'E', 'A', 'T', 'S', 'E', 'E', 'N', 'S', 'E', 'E', 'V', 'S', 'E', 'L', 'F', 'S', 'E', 'M', 'K', 'S', 'E', 'U', 'X', 'S', 'E', 'Y', 'K', 'S', 'G', 'A', 'B', 'S', 'G', 'A', 'W', 'S', 'G', 'O', 'R', 'S', 'G', 'R', 'A', 'S', 'H', 'A', '3', 'S', 'H', 'A', '6', 'S', 'H', 'A', 'A', 'S', 'H', 'A', 'D', 'S', 'H', 'A', 'K', 'S', 'H', 'A', 'N', 'S', 'H', 'A', 'P', 'S', 'H', 'A', 'T', 'S', 'H', 'A', 'X', 'S', 'H', 'A', 'Y', 'S', 'H', 'E', 'E', 'S', 'H', 'E', 'I', 'S', 'H', 'E', 'N', 'S', 'H', 'E', 'P', 'S', 'H', 'E', 'T', 'S', 'H', 'E', 'X', 'S', 'H', 'H', 'A', 'S', 'H', 'I', 'D', 'S', 'H', 'I', 'I', 'S', 'H', 'I', 'M', 'S', 'H', 'I', 'N', 'S', 'H', 'I', 'P', 'S', 'H', 'I', 'Q', 'S', 'H', 'I', 'R', 'S', 'H', 'O', 'A', 'S', 'H', 'O', 'E', 'S', 'H', 'O', 'G', 'S', 'H', 'O', 'O', 'S', 'H', 'O', 'P', 'S', 'H', 'O', 'Q', 'S', 'H', 'O', 'T', 'S', 'H', 'O', 'X', 'S', 'H', 'O', 'Y', 'S', 'H', 'R', 'I', 'S', 'H', 'T', 'A', 'S', 'H', 'U', '2', 'S', 'H', 'U', 'L', 'S', 'H', 'U', 'M', 'S', 'H', 'U', 'O', 'S', 'H', 'U', 'P', 'S', 'H', 'U', 'R', 'S', 'H', 'U', 'T', 'S', 'H', 'U', 'X', 'S', 'H', 'W', 'A', 'S', 'H', 'W', 'E', 'S', 'H', 'W', 'I', 'S', 'H', 'W', 'O', 'S', 'H', 'Y', 'A', 'S', 'H', 'Y', 'E', 'S', 'H', 'Y', 'P', 'S', 'H', 'Y', 'R', 'S', 'H', 'Y', 'T', 'S', 'H', 'Y', 'X', 'S', 'I', 'B', 'E', 'S', 'I', 'D', 'E', 'S', 'I', 'E', 'E', 'S', 'I', 'E', 'P', 'S', 'I', 'E', 'X', 'S', 'I', 'G', '4', 'S', 'I', 'G', 'N', 'S', 'I', 'K', '2', 'S', 'I', 'K', 'I', 'S', 'I', 'L', 'K', 'S', 'I', 'M', 'A', 'S', 'I', 'N', 'E', 'S', 'I', 'O', 'S', 'S', 'I', 'S', 'A', 'S', 'I', 'T', 'E', 'S', 'I', 'Z', 'E', 'S', 'K', 'I', 'N', 'S', 'K', 'W', 'A', 'S', 'L', 'O', 'T', 'S', 'L', 'O', 'W', 'S', 'L', 'U', 'R', 'S', 'N', 'A', 'P', 'S', 'N', 'O', 'W', 'S', 'O', 'A', 'P', 'S', 'O', 'F', 'T', 'S', 'O', 'N', 'G', 'S', 'O', 'O', 'N', 'S', 'O', 'R', 'A', 'S', 'P', 'O', 'T', 'S', 'P', 'W', 'A', 'S', 'S', 'A', 'A', 'S', 'S', 'A', 'P', 'S', 'S', 'A', 'T', 'S', 'S', 'A', 'X', 'S', 'S', 'E', 'E', 'S', 'S', 'E', 'P', 'S', 'S', 'E', 'X', 'S', 'S', 'H', 'E', 'S', 'S', 'I', 'E', 'S', 'S', 'I', 'P', 'S', 'S', 'I', 'T', 'S', 'S', 'I', 'X', 'S', 'S', 'O', 'P', 'S', 'S', 'O', 'T', 'S', 'S', 'O', 'X', 'S', 'S', 'U', 'P', 'S', 'S', 'U', 'T', 'S', 'S', 'U', 'U', 'S', 'S', 'U', 'X', 'S', 'S', 'Y', 'P', 'S', 'S', 'Y', 'R', 'S', 'S', 'Y', 'T', 'S', 'S', 'Y', 'X', 'S', 'T', 'A', 'N', 'S', 'T', 'A', 'R', 'S', 'T', 'E', 'M', 'S', 'T', 'E', 'P', 'S', 'T', 'O', 'P', 'S', 'T', 'W', 'A', 'S', 'U', 'A', 'B', 'S', 'U', 'A', 'E', 'S', 'U', 'A', 'M', 'S', 'U', 'C', 'K', 'S', 'U', 'D', '2', 'S', 'U', 'I', 'T', 'S', 'U', 'K', 'U', 'S', 'U', 'N', 'G', 'S', 'U', 'O', 'P', 'S', 'U', 'O', 'X', 'S', 'U', 'R', '9', 'S', 'U', 'R', 'E', 'S', 'U', 'R', 'X', 'S', 'W', 'A', 'A', 'S', 'W', 'I', 'I', 'S', 'W', 'O', 'O', 'S', 'Y', 'R', 'X', 'S', 'Z', 'A', 'A', 'S', 'Z', 'E', 'E', 'S', 'Z', 'W', 'A', 'S', 'Z', 'W', 'G', 'T', '0', '0', '1', 'T', '0', '0', '2', 'T', '0', '0', '3', 'T', '0', '0', '4', 'T', '0', '0', '5', 'T', '0', '0', '6', 'T', '0', '0', '7', 'T', '0', '0', '8', 'T', '0', '0', '9', 'T', '0', '1', '0', 'T', '0', '1', '1', 'T', '0', '1', '2', 'T', '0', '1', '3', 'T', '0', '1', '4', 'T', '0', '1', '5', 'T', '0', '1', '6', 'T', '0', '1', '7', 'T', '0', '1', '8', 'T', '0', '1', '9', 'T', '0', '2', '0', 'T', '0', '2', '1', 'T', '0', '2', '2', 'T', '0', '2', '3', 'T', '0', '2', '4', 'T', '0', '2', '5', 'T', '0', '2', '6', 'T', '0', '2', '7', 'T', '0', '2', '8', 'T', '0', '2', '9', 'T', '0', '3', '0', 'T', '0', '3', '1', 'T', '0', '3', '2', 'T', '0', '3', '3', 'T', '0', '3', '4', 'T', '0', '3', '5', 'T', '0', '3', '6', 'T', 'A', '-', '2', 'T', 'A', 'A', 'F', 'T', 'A', 'A', 'I', 'T', 'A', 'A', 'M', 'T', 'A', 'A', 'Q', 'T', 'A', 'B', 'S', 'T', 'A', 'C', 'K', 'T', 'A', 'C', 'O', 'T', 'A', 'E', 'N', 'T', 'A', 'I', 'L', 'T', 'A', 'K', '4', 'T', 'A', 'K', 'E', 'T', 'A', 'L', 'L', 'T', 'A', 'N', 'G', 'T', 'A', 'P', 'E', 'T', 'A', 'U', 'M', 'T', 'A', 'W', 'A', 'T', 'A', 'X', 'I', 'T', 'C', 'H', 'E', 'T', 'E', '-', '2', 'T', 'E', '-', 'U', 'T', 'E', 'L', 'U', 'T', 'E', 'N', 'S', 'T', 'E', 'N', 'T', 'T', 'E', 'N', 'U', 'T', 'E', 'S', 'H', 'T', 'E', 'T', 'H', 'T', 'E', 'U', 'N', 'T', 'E', 'U', 'T', 'T', 'E', 'X', 'T', 'T', 'H', 'A', 'A', 'T', 'H', 'A', 'I', 'T', 'H', 'A', 'J', 'T', 'H', 'A', 'L', 'T', 'H', 'A', 'M', 'T', 'H', 'A', 'N', 'T', 'H', 'A', 'W', 'T', 'H', 'E', 'A', 'T', 'H', 'E', 'E', 'T', 'H', 'E', 'H', 'T', 'H', 'E', 'N', 'T', 'H', 'E', 'S', 'T', 'H', 'E', 'Y', 'T', 'H', 'I', 'I', 'T', 'H', 'I', 'N', 'T', 'H', 'O', 'A', 'T', 'H', 'O', 'J', 'T', 'H', 'O', 'M', 'T', 'H', 'O', 'O', 'T', 'H', 'O', 'U', 'T', 'H', 'W', 'A', 'T', 'H', 'W', 'E', 'T', 'H', 'W', 'I', 'T', 'H', 'W', 'O', 'T', 'I', 'C', 'K', 'T', 'I', 'E', 'P', 'T', 'I', 'E', 'X', 'T', 'I', 'L', 'E', 'T', 'I', 'L', 'T', 'T', 'I', 'M', 'E', 'T', 'I', 'N', 'G', 'T', 'I', 'N', 'Y', 'T', 'I', 'T', 'A', 'T', 'I', 'W', 'N', 'T', 'I', 'W', 'R', 'T', 'L', 'E', 'E', 'T', 'L', 'H', 'A', 'T', 'L', 'H', 'E', 'T', 'L', 'H', 'I', 'T', 'L', 'H', 'O', 'T', 'L', 'H', 'U', 'T', 'O', 'D', 'O', 'T', 'O', 'N', 'E', 'T', 'O', 'N', 'G', 'T', 'O', 'O', 'N', 'T', 'R', 'A', 'M', 'T', 'R', 'A', 'Y', 'T', 'R', 'E', 'E', 'T', 'R', 'I', 'A', 'T', 'R', 'U', 'E', 'T', 'S', 'A', 'A', 'T', 'S', 'A', 'B', 'T', 'S', 'E', 'E', 'T', 'S', 'H', 'A', 'T', 'S', 'H', 'E', 'T', 'S', 'I', 'U', 'T', 'S', 'O', 'V', 'T', 'S', 'S', 'A', 'T', 'S', 'S', 'E', 'T', 'S', 'W', 'A', 'T', 'S', 'W', 'B', 'T', 'S', 'W', 'E', 'T', 'T', 'A', 'A', 'T', 'T', 'E', 'E', 'T', 'T', 'E', 'H', 'T', 'T', 'H', 'A', 'T', 'T', 'H', 'E', 'T', 'T', 'H', 'I', 'T', 'T', 'H', 'O', 'T', 'T', 'H', 'U', 'T', 'T', 'S', 'A', 'T', 'T', 'S', 'E', 'T', 'T', 'S', 'I', 'T', 'T', 'S', 'O', 'T', 'T', 'S', 'U', 'T', 'T', 'T', 'A', 'T', 'U', 'A', 'E', 'T', 'U', 'G', '2', 'T', 'U', 'O', 'P', 'T', 'U', 'O', 'T', 'T', 'U', 'O', 'X', 'T', 'U', 'R', 'N', 'T', 'U', 'R', 'U', 'T', 'U', 'R', 'X', 'T', 'W', 'A', 'A', 'T', 'W', 'I', 'I', 'T', 'W', 'O', 'O', 'T', 'X', 'W', 'V', 'T', 'Y', 'A', 'Y', 'T', 'Y', 'P', 'E', 'T', 'Z', 'A', 'A', 'T', 'Z', 'E', 'E', 'T', 'Z', 'I', 'R', 'T', 'Z', 'O', 'A', 'U', '-', 'A', 'E', 'U', '-', 'Y', 'E', 'U', '0', '0', '1', 'U', '0', '0', '2', 'U', '0', '0', '3', 'U', '0', '0', '4', 'U', '0', '0', '5', 'U', '0', '0', '6', 'U', '0', '0', '7', 'U', '0', '0', '8', 'U', '0', '0', '9', 'U', '0', '1', '0', 'U', '0', '1', '1', 'U', '0', '1', '2', 'U', '0', '1', '3', 'U', '0', '1', '4', 'U', '0', '1', '5', 'U', '0', '1', '6', 'U', '0', '1', '7', 'U', '0', '1', '8', 'U', '0', '1', '9', 'U', '0', '2', '0', 'U', '0', '2', '1', 'U', '0', '2', '2', 'U', '0', '2', '3', 'U', '0', '2', '4', 'U', '0', '2', '5', 'U', '0', '2', '6', 'U', '0', '2', '7', 'U', '0', '2', '8', 'U', '0', '2', '9', 'U', '0', '3', '0', 'U', '0', '3', '1', 'U', '0', '3', '2', 'U', '0', '3', '3', 'U', '0', '3', '4', 'U', '0', '3', '5', 'U', '0', '3', '6', 'U', '0', '3', '7', 'U', '0', '3', '8', 'U', '0', '3', '9', 'U', '0', '4', '0', 'U', '0', '4', '1', 'U', '0', '4', '2', 'U', 'A', 'N', 'G', 'U', 'A', 'T', 'H', 'U', 'D', 'U', 'G', 'U', 'M', 'U', 'M', 'U', 'N', 'A', 'P', 'U', 'N', 'D', 'O', 'U', 'N', 'I', 'T', 'U', 'R', 'I', '3', 'U', 'R', 'U', 'S', 'U', 'R', 'U', 'Z', 'U', 'S', 'E', 'D', 'U', 'S', 'H', '2', 'U', 'S', 'H', 'X', 'U', 'S', 'S', 'U', 'U', 'U', 'U', '2', 'U', 'U', 'U', '3', 'U', 'U', 'U', 'U', 'V', '0', '0', '1', 'V', '0', '0', '2', 'V', '0', '0', '3', 'V', '0', '0', '4', 'V', '0', '0', '5', 'V', '0', '0', '6', 'V', '0', '0', '7', 'V', '0', '0', '8', 'V', '0', '0', '9', 'V', '0', '1', '0', 'V', '0', '1', '1', 'V', '0', '1', '2', 'V', '0', '1', '3', 'V', '0', '1', '4', 'V', '0', '1', '5', 'V', '0', '1', '6', 'V', '0', '1', '7', 'V', '0', '1', '8', 'V', '0', '1', '9', 'V', '0', '2', '0', 'V', '0', '2', '1', 'V', '0', '2', '2', 'V', '0', '2', '3', 'V', '0', '2', '4', 'V', '0', '2', '5', 'V', '0', '2', '6', 'V', '0', '2', '7', 'V', '0', '2', '8', 'V', '0', '2', '9', 'V', '0', '3', '0', 'V', '0', '3', '1', 'V', '0', '3', '2', 'V', '0', '3', '3', 'V', '0', '3', '4', 'V', '0', '3', '5', 'V', '0', '3', '6', 'V', '0', '3', '7', 'V', '0', '3', '8', 'V', '0', '3', '9', 'V', '0', '4', '0', 'V', 'A', 'N', 'E', 'V', 'E', 'D', 'E', 'V', 'E', 'I', 'L', 'V', 'E', 'N', 'D', 'V', 'E', 'R', 'Y', 'V', 'E', 'U', 'M', 'V', 'E', 'U', 'X', 'V', 'E', 'Y', 'Z', 'V', 'I', 'D', 'A', 'V', 'I', 'D', 'J', 'V', 'I', 'E', 'P', 'V', 'I', 'E', 'T', 'V', 'I', 'E', 'X', 'V', 'I', 'N', 'E', 'V', 'I', 'Y', 'O', 'V', 'O', 'I', 'D', 'V', 'O', 'O', 'I', 'V', 'U', 'E', 'Q', 'V', 'U', 'R', 'X', 'V', 'Y', 'R', 'X', 'W', '0', '0', '1', 'W', '0', '0', '2', 'W', '0', '0', '3', 'W', '0', '0', '4', 'W', '0', '0', '5', 'W', '0', '0', '6', 'W', '0', '0', '7', 'W', '0', '0', '8', 'W', '0', '0', '9', 'W', '0', '1', '0', 'W', '0', '1', '1', 'W', '0', '1', '2', 'W', '0', '1', '3', 'W', '0', '1', '4', 'W', '0', '1', '5', 'W', '0', '1', '6', 'W', '0', '1', '7', 'W', '0', '1', '8', 'W', '0', '1', '9', 'W', '0', '2', '0', 'W', '0', '2', '1', 'W', '0', '2', '2', 'W', '0', '2', '3', 'W', '0', '2', '4', 'W', '0', '2', '5', 'W', 'A', 'E', 'N', 'W', 'A', 'L', 'K', 'W', 'A', 'L', 'L', 'W', 'A', 'V', 'E', 'W', 'A', 'V', 'Y', 'W', 'E', 'E', 'N', 'W', 'E', 'L', 'L', 'W', 'E', 'S', 'T', 'W', 'E', 'U', 'X', 'W', 'I', 'D', 'E', 'W', 'I', 'N', 'D', 'W', 'I', 'N', 'E', 'W', 'I', 'N', 'K', 'W', 'I', 'T', 'H', 'W', 'O', 'L', 'F', 'W', 'O', 'O', 'D', 'W', 'O', 'O', 'L', 'W', 'O', 'O', 'N', 'W', 'O', 'R', 'D', 'W', 'O', 'R', 'K', 'W', 'R', 'A', 'P', 'W', 'U', 'L', 'U', 'W', 'U', 'O', 'P', 'W', 'U', 'O', 'X', 'W', 'Y', 'N', 'N', 'X', '0', '0', '1', 'X', '0', '0', '2', 'X', '0', '0', '3', 'X', '0', '0', '4', 'X', '0', '0', '5', 'X', '0', '0', '6', 'X', '0', '0', '7', 'X', '0', '0', '8', 'X', 'A', 'P', 'H', 'X', 'A', 'U', 'S', 'X', 'E', 'Y', 'N', 'X', 'I', 'A', 'B', 'X', 'I', 'E', 'P', 'X', 'I', 'E', 'T', 'X', 'I', 'E', 'X', 'X', 'O', 'P', 'H', 'X', 'U', 'O', 'X', 'X', 'W', 'A', 'A', 'X', 'W', 'E', 'E', 'X', 'Y', 'A', 'A', 'X', 'Y', 'E', 'E', 'X', 'Y', 'O', 'O', 'X', 'Y', 'R', 'X', 'Y', '0', '0', '1', 'Y', '0', '0', '2', 'Y', '0', '0', '3', 'Y', '0', '0', '4', 'Y', '0', '0', '5', 'Y', '0', '0', '6', 'Y', '0', '0', '7', 'Y', '0', '0', '8', 'Y', 'A', '-', 'O', 'Y', 'A', '-', 'U', 'Y', 'A', 'A', 'I', 'Y', 'A', 'B', 'H', 'Y', 'A', 'C', 'H', 'Y', 'A', 'D', 'D', 'Y', 'A', 'D', 'H', 'Y', 'A', 'F', 'U', 'Y', 'A', 'G', 'H', 'Y', 'A', 'G', 'N', 'Y', 'A', 'H', 'H', 'Y', 'A', 'K', 'H', 'Y', 'A', 'N', 'G', 'Y', 'A', 'R', 'R', 'Y', 'A', 'S', 'H', 'Y', 'A', 'S', 'S', 'Y', 'A', 'T', 'H', 'Y', 'A', 'T', 'I', 'Y', 'A', 'T', 'T', 'Y', 'A', 'W', 'N', 'Y', 'A', 'Y', 'D', 'Y', 'A', 'Z', 'H', 'Y', 'A', 'Z', 'Z', 'Y', 'E', 'A', 'R', 'Y', 'E', 'E', 'G', 'Y', 'E', 'I', 'N', 'Y', 'E', 'R', 'I', 'Y', 'E', 'R', 'U', 'Y', 'E', 'U', 'M', 'Y', 'E', 'U', 'Q', 'Y', 'E', 'U', 'X', 'Y', 'F', 'E', 'N', 'Y', 'I', '-', 'U', 'Y', 'I', 'E', 'E', 'Y', 'I', 'E', 'P', 'Y', 'I', 'E', 'T', 'Y', 'I', 'E', 'X', 'Y', 'I', 'N', 'G', 'Y', 'I', 'W', 'N', 'Y', 'O', '-', 'A', 'Y', 'O', '-', 'I', 'Y', 'O', '-', 'O', 'Y', 'O', 'D', 'H', 'Y', 'O', 'G', 'H', 'Y', 'O', 'M', 'O', 'Y', 'O', 'R', 'I', 'Y', 'O', 'W', 'D', 'Y', 'U', '-', 'A', 'Y', 'U', '-', 'E', 'Y', 'U', '-', 'I', 'Y', 'U', '-', 'O', 'Y', 'U', '-', 'U', 'Y', 'U', 'A', 'N', 'Y', 'U', 'D', 'H', 'Y', 'U', 'E', 'Q', 'Y', 'U', 'O', 'M', 'Y', 'U', 'O', 'P', 'Y', 'U', 'O', 'T', 'Y', 'U', 'O', 'X', 'Y', 'U', 'R', 'X', 'Y', 'W', 'A', 'A', 'Y', 'W', 'I', 'I', 'Y', 'W', 'O', 'O', 'Y', 'Y', 'A', 'A', 'Y', 'Y', 'R', 'X', 'Z', '0', '0', '1', 'Z', '0', '0', '2', 'Z', '0', '0', '3', 'Z', '0', '0', '4', 'Z', '0', '0', '5', 'Z', '0', '0', '6', 'Z', '0', '0', '7', 'Z', '0', '0', '8', 'Z', '0', '0', '9', 'Z', '0', '1', '0', 'Z', '0', '1', '1', 'Z', '0', '1', '2', 'Z', '0', '1', '3', 'Z', '0', '1', '4', 'Z', '0', '1', '5', 'Z', '0', '1', '6', 'Z', 'A', 'E', 'F', 'Z', 'A', 'I', 'N', 'Z', 'A', 'M', 'X', 'Z', 'A', 'R', 'L', 'Z', 'A', 'T', 'A', 'Z', 'A', 'Y', 'N', 'Z', 'E', 'R', 'O', 'Z', 'E', 'T', 'A', 'Z', 'H', 'A', 'A', 'Z', 'H', 'A', 'P', 'Z', 'H', 'A', 'R', 'Z', 'H', 'A', 'T', 'Z', 'H', 'A', 'X', 'Z', 'H', 'E', 'E', 'Z', 'H', 'E', 'P', 'Z', 'H', 'E', 'T', 'Z', 'H', 'E', 'X', 'Z', 'H', 'I', 'L', 'Z', 'H', 'O', 'I', 'Z', 'H', 'O', 'O', 'Z', 'H', 'O', 'P', 'Z', 'H', 'O', 'T', 'Z', 'H', 'O', 'X', 'Z', 'H', 'U', 'O', 'Z', 'H', 'U', 'P', 'Z', 'H', 'U', 'R', 'Z', 'H', 'U', 'T', 'Z', 'H', 'U', 'X', 'Z', 'H', 'W', 'A', 'Z', 'H', 'W', 'E', 'Z', 'H', 'Y', 'P', 'Z', 'H', 'Y', 'R', 'Z', 'H', 'Y', 'T', 'Z', 'H', 'Y', 'X', 'Z', 'I', 'D', 'A', 'Z', 'I', 'E', 'P', 'Z', 'I', 'E', 'X', 'Z', 'I', 'Z', '2', 'Z', 'S', 'H', 'A', 'Z', 'U', 'O', 'P', 'Z', 'U', 'O', 'X', 'Z', 'U', 'R', 'X', 'Z', 'W', 'N', 'J', 'Z', 'W', 'S', 'P', 'Z', 'Y', 'R', 'X', 'Z', 'Z', 'A', 'A', 'Z', 'Z', 'A', 'P', 'Z', 'Z', 'A', 'T', 'Z', 'Z', 'A', 'X', 'Z', 'Z', 'E', 'E', 'Z', 'Z', 'E', 'P', 'Z', 'Z', 'E', 'X', 'Z', 'Z', 'I', 'E', 'Z', 'Z', 'I', 'P', 'Z', 'Z', 'I', 'T', 'Z', 'Z', 'I', 'X', 'Z', 'Z', 'O', 'P', 'Z', 'Z', 'O', 'X', 'Z', 'Z', 'S', 'A', 'Z', 'Z', 'U', 'P', 'Z', 'Z', 'U', 'R', 'Z', 'Z', 'U', 'X', 'Z', 'Z', 'Y', 'A', 'Z', 'Z', 'Y', 'P', 'Z', 'Z', 'Y', 'R', 'Z', 'Z', 'Y', 'T', 'Z', 'Z', 'Y', 'X', '-', 'C', 'H', 'A', 'L', '-', 'C', 'H', 'A', 'R', '-', 'D', 'Z', 'U', 'D', '-', 'P', 'H', 'R', 'U', 'A', '0', '0', '5', 'A', 'A', '0', '0', '6', 'A', 'A', '0', '0', '6', 'B', 'A', '0', '1', '0', 'A', 'A', '0', '1', '4', 'A', 'A', '0', '1', '7', 'A', 'A', '0', '2', '6', 'A', 'A', '0', '2', '8', 'B', 'A', '0', '3', '2', 'A', 'A', '0', '3', '9', 'A', 'A', '0', '4', '0', 'A', 'A', '0', '4', '1', 'A', 'A', '0', '4', '2', 'A', 'A', '0', '4', '3', 'A', 'A', '0', '4', '5', 'A', 'A', '0', '4', '6', 'A', 'A', '0', '4', '6', 'B', 'A', '0', '6', '6', 'A', 'A', '0', '6', '6', 'B', 'A', '0', '6', '6', 'C', 'A', '0', '9', '7', 'A', 'A', '0', '9', '8', 'A', 'A', '1', '0', '0', 'A', 'A', '1', '0', '1', 'A', 'A', '1', '0', '2', 'A', 'A', '1', '0', '4', 'A', 'A', '1', '0', '4', 'B', 'A', '1', '0', '4', 'C', 'A', '1', '0', '5', 'A', 'A', '1', '0', '5', 'B', 'A', '1', '0', '7', 'A', 'A', '1', '0', '7', 'B', 'A', '1', '0', '7', 'C', 'A', '1', '1', '0', 'A', 'A', '1', '1', '0', 'B', 'A', '1', '1', '5', 'A', 'A', '1', '2', '0', 'B', 'A', '1', '2', '5', 'A', 'A', '1', '3', '1', 'C', 'A', '1', '3', '5', 'A', 'A', '2', '0', '2', 'A', 'A', '2', '0', '2', 'B', 'A', '2', '0', '7', 'A', 'A', '2', '0', '9', 'A', 'A', '2', '1', '5', 'A', 'A', '2', '1', '6', 'A', 'A', '2', '2', '7', 'A', 'A', '2', '6', '7', 'A', 'A', '2', '8', '9', 'A', 'A', '2', '9', '4', 'A', 'A', '2', '9', '9', 'A', 'A', '3', '0', '9', 'A', 'A', '3', '0', '9', 'B', 'A', '3', '0', '9', 'C', 'A', '3', '1', '3', 'A', 'A', '3', '1', '3', 'B', 'A', '3', '1', '3', 'C', 'A', '3', '2', '9', 'A', 'A', '3', '3', '2', 'A', 'A', '3', '3', '2', 'B', 'A', '3', '3', '2', 'C', 'A', '3', '3', '6', 'A', 'A', '3', '3', '6', 'B', 'A', '3', '3', '6', 'C', 'A', '3', '5', '9', 'A', 'A', '3', '6', '4', 'A', 'A', '3', '6', '8', 'A', 'A', '3', '7', '1', 'A', 'A', '3', '8', '1', 'A', 'A', '3', '8', '3', 'A', 'A', '3', '8', '6', 'A', 'A', '4', '1', '0', 'A', 'A', '4', '5', '0', 'A', 'A', '4', '5', '7', 'A', 'A', 'A', '0', '0', '1', 'A', 'A', '0', '0', '2', 'A', 'A', '0', '0', '3', 'A', 'A', '0', '0', '4', 'A', 'A', '0', '0', '5', 'A', 'A', '0', '0', '6', 'A', 'A', '0', '0', '7', 'A', 'A', '0', '0', '8', 'A', 'A', '0', '0', '9', 'A', 'A', '0', '1', '0', 'A', 'A', '0', '1', '1', 'A', 'A', '0', '1', '2', 'A', 'A', '0', '1', '3', 'A', 'A', '0', '1', '4', 'A', 'A', '0', '1', '5', 'A', 'A', '0', '1', '6', 'A', 'A', '0', '1', '7', 'A', 'A', '0', '1', '8', 'A', 'A', '0', '1', '9', 'A', 'A', '0', '2', '0', 'A', 'A', '0', '2', '1', 'A', 'A', '0', '2', '2', 'A', 'A', '0', '2', '3', 'A', 'A', '0', '2', '4', 'A', 'A', '0', '2', '5', 'A', 'A', '0', '2', '6', 'A', 'A', '0', '2', '7', 'A', 'A', '0', '2', '8', 'A', 'A', '0', '2', '9', 'A', 'A', '0', '3', '0', 'A', 'A', '0', '3', '1', 'A', 'A', '0', '3', '2', 'A', 'A', 'Y', 'I', 'N', 'A', 'B', '0', '0', '1', 'A', 'B', '0', '0', '2', 'A', 'B', '0', '0', '3', 'A', 'B', '0', '0', '4', 'A', 'B', '0', '0', '5', 'A', 'B', '0', '0', '6', 'A', 'B', '0', '0', '7', 'A', 'B', '0', '0', '8', 'A', 'B', '0', '0', '9', 'A', 'B', '0', '1', '0', 'A', 'B', '0', '1', '1', 'A', 'B', '0', '1', '3', 'A', 'B', '0', '1', '6', 'A', 'B', '0', '1', '7', 'A', 'B', '0', '2', '0', 'A', 'B', '0', '2', '1', 'A', 'B', '0', '2', '2', 'A', 'B', '0', '2', '3', 'A', 'B', '0', '2', '4', 'A', 'B', '0', '2', '6', 'A', 'B', '0', '2', '7', 'A', 'B', '0', '2', '8', 'A', 'B', '0', '2', '9', 'A', 'B', '0', '3', '0', 'A', 'B', '0', '3', '1', 'A', 'B', '0', '3', '4', 'A', 'B', '0', '3', '7', 'A', 'B', '0', '3', '8', 'A', 'B', '0', '3', '9', 'A', 'B', '0', '4', '0', 'A', 'B', '0', '4', '1', 'A', 'B', '0', '4', '4', 'A', 'B', '0', '4', '5', 'A', 'B', '0', '4', '6', 'A', 'B', '0', '4', '7', 'A', 'B', '0', '4', '8', 'A', 'B', '0', '4', '9', 'A', 'B', '0', '5', '0', 'A', 'B', '0', '5', '1', 'A', 'B', '0', '5', '3', 'A', 'B', '0', '5', '4', 'A', 'B', '0', '5', '5', 'A', 'B', '0', '5', '6', 'A', 'B', '0', '5', '7', 'A', 'B', '0', '5', '8', 'A', 'B', '0', '5', '9', 'A', 'B', '0', '6', '0', 'A', 'B', '0', '6', '1', 'A', 'B', '0', '6', '5', 'A', 'B', '0', '6', '6', 'A', 'B', '0', '6', '7', 'A', 'B', '0', '6', '9', 'A', 'B', '0', '7', '0', 'A', 'B', '0', '7', '3', 'A', 'B', '0', '7', '4', 'A', 'B', '0', '7', '6', 'A', 'B', '0', '7', '7', 'A', 'B', '0', '7', '8', 'A', 'B', '0', '7', '9', 'A', 'B', '0', '8', '0', 'A', 'B', '0', '8', '1', 'A', 'B', '0', '8', '2', 'A', 'B', '0', '8', '5', 'A', 'B', '0', '8', '6', 'A', 'B', '0', '8', '7', 'A', 'B', '1', '1', '8', 'A', 'B', '1', '2', '0', 'A', 'B', '1', '2', '2', 'A', 'B', '1', '2', '3', 'A', 'B', '1', '6', '4', 'A', 'B', '1', '7', '1', 'A', 'B', '1', '8', '0', 'A', 'B', '1', '8', '8', 'A', 'B', '1', '9', '1', 'A', 'B', 'O', 'V', 'E', 'A', 'C', 'U', 'T', 'E', 'A', 'D', 'D', 'A', 'K', 'A', 'D', 'L', 'A', 'M', 'A', 'F', 'F', 'I', 'X', 'A', 'F', 'T', 'E', 'R', 'A', 'G', 'A', 'I', 'N', 'A', 'G', 'O', 'G', 'I', 'A', 'G', 'U', 'N', 'G', 'A', 'H', 'A', 'N', 'G', 'A', 'H', 'S', 'D', 'A', 'A', 'I', 'T', 'O', 'N', 'A', 'K', 'A', 'R', 'A', 'A', 'K', 'B', 'A', 'R', 'A', 'L', 'A', 'P', 'H', 'A', 'L', 'A', 'R', 'M', 'A', 'L', 'E', 'P', 'H', 'A', 'L', 'E', 'U', 'T', 'A', 'L', 'G', 'I', 'Z', 'A', 'L', 'I', 'E', 'N', 'A', 'L', 'I', 'F', 'U', 'A', 'L', 'L', 'A', 'H', 'A', 'L', 'P', 'H', 'A', 'A', 'N', 'D', 'A', 'P', 'A', 'N', 'G', 'E', 'D', 'A', 'N', 'G', 'E', 'L', 'A', 'N', 'G', 'E', 'R', 'A', 'N', 'G', 'L', 'E', 'A', 'N', 'G', 'R', 'Y', 'A', 'N', 'P', 'E', 'A', 'A', 'N', 'S', 'H', 'E', 'A', 'N', 'S', 'U', 'Z', 'A', 'P', 'A', 'R', 'T', 'A', 'P', 'E', 'S', 'O', 'A', 'P', 'P', 'L', 'E', 'A', 'P', 'R', 'I', 'L', 'A', 'R', 'A', 'E', 'A', 'A', 'R', 'E', 'P', 'A', 'A', 'R', 'G', 'O', 'N', 'A', 'R', 'I', 'E', 'S', 'A', 'R', 'K', 'A', 'B', 'A', 'R', 'R', 'A', 'Y', 'A', 'R', 'R', 'O', 'W', 'A', 'S', 'A', 'L', '2', 'A', 'S', 'H', 'E', 'S', 'A', 'S', 'P', 'E', 'R', 'A', 'T', 'I', 'Y', 'A', 'A', 'T', 'N', 'A', 'H', 'A', 'T', 'T', 'A', 'K', 'A', 'T', 'T', 'I', 'C', 'B', '0', '0', '5', 'A', 'B', '1', '0', '5', 'F', 'B', '1', '0', '5', 'M', 'B', '1', '0', '6', 'F', 'B', '1', '0', '6', 'M', 'B', '1', '0', '7', 'F', 'B', '1', '0', '7', 'M', 'B', '1', '0', '8', 'F', 'B', '1', '0', '8', 'M', 'B', '1', '0', '9', 'F', 'B', '1', '0', '9', 'M', 'B', 'A', 'C', 'O', 'N', 'B', 'A', 'D', 'G', 'E', 'B', 'A', 'L', 'A', 'G', 'B', 'A', 'M', 'U', 'M', 'B', 'A', 'R', 'A', '2', 'B', 'A', 'S', 'S', 'A', 'B', 'A', 'T', 'A', 'K', 'B', 'B', 'I', 'E', 'P', 'B', 'B', 'I', 'E', 'T', 'B', 'B', 'I', 'E', 'X', 'B', 'B', 'U', 'O', 'P', 'B', 'B', 'U', 'O', 'X', 'B', 'B', 'U', 'R', 'X', 'B', 'E', 'A', 'C', 'H', 'B', 'E', 'A', 'D', 'S', 'B', 'E', 'E', 'T', 'A', 'B', 'E', 'G', 'I', 'N', 'B', 'E', 'H', 'E', 'H', 'B', 'E', 'I', 'T', 'H', 'B', 'E', 'L', 'O', 'W', 'B', 'E', 'N', 'D', 'E', 'B', 'E', 'N', 'T', 'O', 'B', 'E', 'O', 'R', 'C', 'B', 'H', 'E', 'T', 'H', 'B', 'I', 'N', 'D', 'I', 'B', 'I', 'N', 'D', 'U', 'B', 'I', 'R', 'G', 'A', 'B', 'I', 'S', 'A', 'H', 'B', 'L', 'A', 'C', 'K', 'B', 'L', 'A', 'D', 'E', 'B', 'L', 'A', 'N', 'K', 'B', 'L', 'I', 'N', 'K', 'B', 'L', 'O', 'C', 'K', 'B', 'L', 'O', 'N', 'D', 'B', 'L', 'O', 'O', 'D', 'B', 'O', 'A', 'R', 'D', 'B', 'O', 'O', 'K', 'S', 'B', 'O', 'O', 'T', 'S', 'B', 'O', 'R', 'A', 'X', 'B', 'R', 'A', 'C', 'E', 'B', 'R', 'E', 'A', 'D', 'B', 'R', 'E', 'V', 'E', 'B', 'R', 'I', 'C', 'K', 'B', 'R', 'I', 'D', 'E', 'B', 'R', 'O', 'A', 'D', 'B', 'R', 'U', 'S', 'H', 'B', 'S', 'D', 'U', 'S', 'B', 'S', 'K', 'A', '-', 'B', 'S', 'K', 'U', 'R', 'B', 'S', 'T', 'A', 'R', 'B', 'U', 'H', 'I', 'D', 'B', 'U', 'L', 'L', 'S', 'B', 'U', 'L', 'U', 'G', 'B', 'U', 'M', 'P', 'Y', 'B', 'U', 'N', 'N', 'Y', 'B', 'U', 'S', 'T', 'S', 'B', 'Z', 'U', 'N', 'G', 'C', '0', '0', '2', 'A', 'C', '0', '0', '2', 'B', 'C', '0', '0', '2', 'C', 'C', '0', '1', '0', 'A', 'C', 'A', 'A', 'N', 'G', 'C', 'A', 'K', 'R', 'A', 'C', 'A', 'L', 'Y', 'A', 'C', 'A', 'M', 'E', 'L', 'C', 'A', 'N', 'D', 'Y', 'C', 'A', 'N', 'O', 'E', 'C', 'A', 'P', 'U', 'T', 'C', 'A', 'R', 'D', 'S', 'C', 'A', 'R', 'E', 'T', 'C', 'A', 'R', 'I', 'K', 'C', 'A', 'R', 'O', 'N', 'C', 'A', 'U', 'D', 'A', 'C', 'C', 'H', 'A', 'A', 'C', 'C', 'H', 'E', 'E', 'C', 'C', 'H', 'H', 'A', 'C', 'C', 'H', 'H', 'E', 'C', 'C', 'H', 'H', 'I', 'C', 'C', 'H', 'H', 'O', 'C', 'C', 'H', 'H', 'U', 'C', 'E', 'A', 'L', 'C', 'C', 'E', 'C', 'A', 'K', 'C', 'E', 'C', 'E', 'K', 'C', 'E', 'I', 'R', 'T', 'C', 'E', 'R', 'E', 'K', 'C', 'E', 'R', 'E', 'S', 'C', 'H', 'A', 'D', 'A', 'C', 'H', 'A', 'I', 'R', 'C', 'H', 'A', 'N', 'G', 'C', 'H', 'A', 'R', 'T', 'C', 'H', 'E', 'C', 'K', 'C', 'H', 'E', 'E', 'K', 'C', 'H', 'E', 'E', 'M', 'C', 'H', 'E', 'R', 'Y', 'C', 'H', 'E', 'S', 'S', 'C', 'H', 'E', 'S', 'T', 'C', 'H', 'I', 'C', 'K', 'C', 'H', 'I', 'K', 'I', 'C', 'H', 'I', 'L', 'D', 'C', 'H', 'I', 'M', 'E', 'C', 'H', 'I', 'N', 'G', 'C', 'H', 'O', 'K', 'E', 'C', 'H', 'R', 'O', 'A', 'C', 'H', 'U', 'L', 'A', 'C', 'H', 'U', 'O', 'P', 'C', 'H', 'U', 'O', 'T', 'C', 'H', 'U', 'O', 'X', 'C', 'H', 'U', 'R', 'X', 'C', 'H', 'Y', 'R', 'X', 'C', 'I', 'E', 'U', 'C', 'C', 'L', 'A', 'I', 'M', 'C', 'L', 'E', 'A', 'R', 'C', 'L', 'I', 'C', 'K', 'C', 'L', 'I', 'F', 'F', 'C', 'L', 'O', 'C', 'K', 'C', 'L', 'O', 'S', 'E', 'C', 'L', 'O', 'T', 'H', 'C', 'L', 'O', 'U', 'D', 'C', 'L', 'O', 'W', 'N', 'C', 'L', 'U', 'B', 'S', 'C', 'O', 'E', 'N', 'G', 'C', 'O', 'L', 'O', 'N', 'C', 'O', 'L', 'O', 'R', 'C', 'O', 'M', 'E', 'T', 'C', 'O', 'M', 'M', 'A', 'C', 'O', 'U', 'C', 'H', 'C', 'O', 'V', 'E', 'R', 'C', 'R', 'E', 'A', 'M', 'C', 'R', 'O', 'I', 'X', 'C', 'R', 'O', 'S', 'S', 'C', 'R', 'O', 'W', 'N', 'C', 'U', 'B', 'E', 'D', 'C', 'U', 'R', 'L', 'Y', 'C', 'U', 'R', 'R', 'Y', 'C', 'U', 'R', 'V', 'E', 'D', '0', '0', '8', 'A', 'D', '0', '2', '7', 'A', 'D', '0', '3', '1', 'A', 'D', '0', '3', '4', 'A', 'D', '0', '4', '6', 'A', 'D', '0', '4', '8', 'A', 'D', '0', '5', '0', 'A', 'D', '0', '5', '0', 'B', 'D', '0', '5', '0', 'C', 'D', '0', '5', '0', 'D', 'D', '0', '5', '0', 'E', 'D', '0', '5', '0', 'F', 'D', '0', '5', '0', 'G', 'D', '0', '5', '0', 'H', 'D', '0', '5', '0', 'I', 'D', '0', '5', '2', 'A', 'D', '0', '5', '4', 'A', 'D', '0', '6', '7', 'A', 'D', '0', '6', '7', 'B', 'D', '0', '6', '7', 'C', 'D', '0', '6', '7', 'D', 'D', '0', '6', '7', 'E', 'D', '0', '6', '7', 'F', 'D', '0', '6', '7', 'G', 'D', '0', '6', '7', 'H', 'D', 'A', 'A', 'L', 'I', 'D', 'A', 'A', 'S', 'U', 'D', 'A', 'E', 'N', 'G', 'D', 'A', 'G', 'A', 'Z', 'D', 'A', 'H', 'A', 'L', 'D', 'A', 'I', 'N', 'G', 'D', 'A', 'L', 'A', 'T', 'D', 'A', 'L', 'D', 'A', 'D', 'A', 'L', 'E', 'T', 'D', 'A', 'M', 'M', 'A', 'D', 'A', 'N', 'D', 'A', 'D', 'A', 'N', 'G', 'O', 'D', 'A', 'R', 'A', '3', 'D', 'A', 'R', 'A', '4', 'D', 'A', 'R', 'G', 'A', 'D', 'A', 'S', 'I', 'A', 'D', 'A', 'V', 'I', 'D', 'D', 'D', 'D', 'H', 'A', 'D', 'D', 'H', 'A', 'A', 'D', 'D', 'H', 'E', 'E', 'D', 'D', 'I', 'E', 'P', 'D', 'D', 'I', 'E', 'X', 'D', 'D', 'U', 'O', 'P', 'D', 'D', 'U', 'O', 'X', 'D', 'D', 'U', 'R', 'X', 'D', 'E', 'A', 'T', 'H', 'D', 'E', 'B', 'I', 'T', 'D', 'E', 'L', 'T', 'A', 'D', 'E', 'P', 'T', 'H', 'D', 'E', 'R', 'E', 'T', 'D', 'E', 'U', 'N', 'G', 'D', 'E', 'X', 'I', 'A', 'D', 'H', 'H', 'E', 'E', 'D', 'H', 'H', 'O', 'O', 'D', 'I', 'F', 'A', 'T', 'D', 'I', 'G', 'I', 'T', 'D', 'I', 'P', 'L', 'I', 'D', 'I', 'P', 'T', 'E', 'D', 'I', 'R', 'G', 'A', 'D', 'I', 'T', 'T', 'O', 'D', 'I', 'Z', 'Z', 'Y', 'D', 'J', 'E', 'R', 'V', 'D', 'L', 'H', 'Y', 'A', 'D', 'O', 'B', 'R', 'O', 'D', 'O', 'I', 'N', 'G', 'D', 'O', 'L', 'L', 'S', 'D', 'O', 'O', 'N', 'G', 'D', 'O', 'U', 'B', 'T', 'D', 'R', 'E', 'S', 'S', 'D', 'R', 'I', 'N', 'K', 'D', 'R', 'I', 'V', 'E', 'D', 'R', 'O', 'P', 'S', 'D', 'U', 'G', 'U', 'D', 'D', 'Z', 'E', 'L', 'O', 'D', 'Z', 'H', 'O', 'I', 'D', 'Z', 'I', 'T', 'A', 'D', 'Z', 'Y', 'A', 'Y', 'D', 'Z', 'Z', 'H', 'E', 'E', '0', '0', '8', 'A', 'E', '0', '0', '9', 'A', 'E', '0', '1', '6', 'A', 'E', '0', '1', '7', 'A', 'E', '0', '2', '0', 'A', 'E', '0', '2', '8', 'A', 'E', '0', '3', '4', 'A', 'E', 'A', 'G', 'L', 'E', 'E', 'A', 'R', 'L', 'Y', 'E', 'A', 'R', 'T', 'H', 'E', 'E', 'K', 'A', 'A', 'E', 'H', 'C', 'H', 'A', 'E', 'H', 'T', 'S', 'A', 'E', 'H', 'W', 'A', 'Z', 'E', 'I', 'G', 'H', 'T', 'E', 'J', 'E', 'C', 'T', 'E', 'K', 'A', 'R', 'A', 'E', 'L', 'I', 'F', 'I', 'E', 'M', 'O', 'J', 'I', 'E', 'M', 'P', 'T', 'Y', 'E', 'N', 'D', 'E', 'P', 'E', 'N', 'T', 'E', 'R', 'E', 'N', 'T', 'R', 'Y', 'E', 'O', '-', 'E', 'U', 'E', 'O', 'L', 'H', 'X', 'E', 'P', 'A', 'C', 'T', 'E', 'P', 'O', 'C', 'H', 'E', 'Q', 'U', 'A', 'L', 'E', 'Q', 'U', 'I', 'D', 'E', 'R', 'A', 'S', 'E', 'E', 'R', 'I', 'N', '2', 'E', 'S', '-', 'T', 'E', 'E', 'S', 'A', 'S', 'A', 'E', 'S', 'H', '1', '6', 'E', 'S', 'H', '2', '1', 'E', 'S', 'H', 'E', '3', 'E', 'T', 'H', 'E', 'L', 'E', 'U', '-', 'E', 'O', 'E', 'U', '-', 'E', 'U', 'E', 'U', 'L', 'E', 'R', 'E', 'V', 'E', 'R', 'Y', 'E', 'X', 'I', 'S', 'T', 'E', 'X', 'T', 'R', 'A', 'F', '0', '0', '1', 'A', 'F', '0', '1', '3', 'A', 'F', '0', '2', '1', 'A', 'F', '0', '3', '1', 'A', 'F', '0', '3', '7', 'A', 'F', '0', '3', '8', 'A', 'F', '0', '4', '5', 'A', 'F', '0', '4', '6', 'A', 'F', '0', '4', '7', 'A', 'F', '0', '5', '1', 'A', 'F', '0', '5', '1', 'B', 'F', '0', '5', '1', 'C', 'F', 'A', 'A', 'F', 'U', 'F', 'A', 'I', 'H', 'U', 'F', 'A', 'R', 'S', 'I', 'F', 'A', 'T', 'H', 'A', 'F', 'E', 'A', 'R', 'N', 'F', 'E', 'E', 'N', 'G', 'F', 'E', 'N', 'C', 'E', 'F', 'E', 'R', 'R', 'Y', 'F', 'I', 'E', 'L', 'D', 'F', 'I', 'F', 'T', 'H', 'F', 'I', 'F', 'T', 'Y', 'F', 'I', 'G', 'H', 'T', 'F', 'I', 'N', 'A', 'L', 'F', 'I', 'R', 'S', 'T', 'F', 'L', 'A', 'G', 'S', 'F', 'L', 'A', 'S', 'H', 'F', 'L', 'I', 'C', 'K', 'F', 'L', 'O', 'O', 'R', 'F', 'L', 'U', 'T', 'E', 'F', 'O', 'G', 'G', 'Y', 'F', 'O', 'L', 'L', 'Y', 'F', 'O', 'R', 'C', 'E', 'F', 'O', 'R', 'M', 'S', 'F', 'O', 'R', 'T', 'E', 'F', 'O', 'R', 'T', 'Y', 'F', 'R', 'A', 'M', 'E', 'F', 'R', 'A', 'N', 'C', 'F', 'R', 'I', 'E', 'D', 'F', 'R', 'I', 'E', 'S', 'F', 'R', 'I', 'T', 'U', 'F', 'R', 'O', 'N', 'T', 'F', 'R', 'O', 'W', 'N', 'G', '0', '0', '6', 'A', 'G', '0', '0', '7', 'A', 'G', '0', '0', '7', 'B', 'G', '0', '1', '1', 'A', 'G', '0', '2', '0', 'A', 'G', '0', '2', '6', 'A', 'G', '0', '3', '6', 'A', 'G', '0', '3', '7', 'A', 'G', '0', '4', '3', 'A', 'G', '0', '4', '5', 'A', 'G', 'A', 'A', 'F', 'U', 'G', 'A', 'D', 'O', 'L', 'G', 'A', 'L', 'A', 'M', 'G', 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'A', 'N', 'G', 'A', 'M', 'L', 'A', 'G', 'A', 'M', 'M', 'A', 'G', 'A', 'N', 'D', 'A', 'G', 'A', 'N', 'M', 'A', 'G', 'A', 'R', 'O', 'N', 'G', 'B', 'A', 'Y', 'I', 'G', 'B', 'E', 'U', 'X', 'G', 'B', 'I', 'E', 'E', 'G', 'E', 'S', 'H', '2', 'G', 'E', 'S', 'H', 'U', 'G', 'G', 'I', 'E', 'P', 'G', 'G', 'I', 'E', 'X', 'G', 'G', 'U', 'O', 'P', 'G', 'G', 'U', 'O', 'T', 'G', 'G', 'U', 'O', 'X', 'G', 'G', 'U', 'R', 'X', 'G', 'G', 'W', 'A', 'A', 'G', 'G', 'W', 'E', 'E', 'G', 'H', 'A', 'I', 'N', 'G', 'H', 'A', 'Y', 'N', 'G', 'H', 'E', 'U', 'N', 'G', 'H', 'E', 'U', 'X', 'G', 'H', 'E', 'Y', 'S', 'G', 'H', 'O', 'S', 'T', 'G', 'I', 'D', 'I', 'M', 'G', 'I', 'M', 'E', 'L', 'G', 'I', 'N', 'I', 'I', 'G', 'I', 'R', 'L', 'S', 'G', 'I', 'S', 'A', 'L', 'G', 'L', 'A', 'S', 'S', 'G', 'L', 'O', 'B', 'E', 'G', 'L', 'O', 'V', 'E', 'G', 'N', 'Y', 'I', 'S', 'G', 'O', 'I', 'N', 'G', 'G', 'O', 'R', 'G', 'I', 'G', 'R', 'A', 'C', 'E', 'G', 'R', 'A', 'I', 'N', 'G', 'R', 'A', 'S', 'P', 'G', 'R', 'A', 'S', 'S', 'G', 'R', 'A', 'V', 'E', 'G', 'R', 'E', 'A', 'T', 'G', 'R', 'E', 'E', 'K', 'G', 'R', 'E', 'E', 'N', 'G', 'R', 'O', 'U', 'P', 'G', 'U', 'A', 'R', 'D', 'G', 'U', 'R', 'U', 'N', 'G', 'V', 'A', 'N', 'G', 'H', '0', '0', '6', 'A', 'H', 'A', '-', 'H', 'A', 'H', 'A', 'A', 'R', 'U', 'H', 'A', 'E', 'G', 'L', 'H', 'A', 'I', 'T', 'U', 'H', 'A', 'L', 'Q', 'A', 'H', 'A', 'M', 'Z', 'A', 'H', 'A', 'N', 'D', 'S', 'H', 'A', 'P', 'P', 'Y', 'H', 'A', 'S', 'E', 'R', 'H', 'A', 'T', 'A', 'F', 'H', 'A', 'T', 'H', 'I', 'H', 'B', 'A', 'S', 'A', 'H', 'E', 'A', 'R', 'T', 'H', 'E', 'A', 'V', 'Y', 'H', 'I', 'D', 'E', 'T', 'H', 'I', 'E', 'U', 'H', 'H', 'I', 'N', 'G', 'E', 'H', 'I', 'R', 'I', 'Q', 'H', 'L', 'I', 'E', 'P', 'H', 'L', 'I', 'E', 'X', 'H', 'L', 'U', 'O', 'P', 'H', 'L', 'U', 'O', 'X', 'H', 'L', 'U', 'R', 'X', 'H', 'L', 'Y', 'R', 'X', 'H', 'M', 'I', 'E', 'P', 'H', 'M', 'I', 'E', 'X', 'H', 'M', 'O', 'N', 'G', 'H', 'M', 'U', 'O', 'P', 'H', 'M', 'U', 'O', 'X', 'H', 'M', 'U', 'R', 'X', 'H', 'M', 'Y', 'R', 'X', 'H', 'N', 'I', 'E', 'P', 'H', 'N', 'I', 'E', 'T', 'H', 'N', 'I', 'E', 'X', 'H', 'N', 'U', 'O', 'X', 'H', 'O', 'C', 'H', 'O', 'H', 'O', 'L', 'A', 'M', 'H', 'O', 'N', 'E', 'Y', 'H', 'O', 'O', 'R', 'U', 'H', 'O', 'R', 'N', 'S', 'H', 'O', 'R', 'S', 'E', 'H', 'O', 'T', 'E', 'L', 'H', 'O', 'U', 'S', 'E', 'H', 'U', 'M', 'A', 'N', 'H', 'U', 'R', 'A', 'N', 'H', 'W', 'A', 'I', 'R', 'H', 'X', 'I', 'E', 'P', 'H', 'X', 'I', 'E', 'T', 'H', 'X', 'I', 'E', 'X', 'H', 'X', 'U', 'O', 'P', 'H', 'X', 'U', 'O', 'T', 'H', 'X', 'U', 'O', 'X', 'H', 'Z', 'Z', 'Z', 'G', 'I', '-', 'O', '-', 'I', 'I', '-', 'Y', 'A', 'E', 'I', '-', 'Y', 'E', 'O', 'I', '0', '0', '5', 'A', 'I', '0', '0', '9', 'A', 'I', '0', '1', '0', 'A', 'I', '0', '1', '1', 'A', 'I', 'A', 'U', 'D', 'A', 'I', 'C', 'H', 'O', 'S', 'I', 'C', 'H', 'O', 'U', 'I', 'E', 'U', 'N', 'G', 'I', 'G', 'G', 'W', 'S', 'I', 'K', 'A', 'R', 'A', 'I', 'M', 'A', 'G', 'E', 'I', 'M', 'I', 'N', '3', 'I', 'N', 'B', 'O', 'X', 'I', 'N', 'D', 'E', 'X', 'I', 'N', 'D', 'I', 'C', 'I', 'N', 'N', 'E', 'R', 'I', 'N', 'P', 'U', 'T', 'J', 'A', 'C', 'K', 'S', 'J', 'A', 'P', 'A', 'N', 'J', 'A', 'Y', 'I', 'N', 'J', 'E', 'A', 'N', 'S', 'J', 'E', 'R', 'A', 'N', 'J', 'J', 'I', 'E', 'P', 'J', 'J', 'I', 'E', 'T', 'J', 'J', 'I', 'E', 'X', 'J', 'J', 'U', 'O', 'P', 'J', 'J', 'U', 'O', 'X', 'J', 'J', 'U', 'R', 'X', 'J', 'O', 'K', 'E', 'R', 'J', 'U', 'D', 'G', 'E', 'J', 'U', 'D', 'U', 'L', 'J', 'U', 'E', 'U', 'I', 'K', 'A', 'A', 'B', 'A', 'K', 'A', 'A', 'F', 'U', 'K', 'A', 'I', 'R', 'I', 'K', 'A', 'P', 'A', 'L', 'K', 'A', 'P', 'P', 'A', 'K', 'A', 'R', 'A', 'N', 'K', 'A', 'R', 'E', 'N', 'K', 'A', 'S', 'R', 'A', 'K', 'A', 'U', 'N', 'A', 'K', 'A', 'Y', 'A', 'H', 'K', 'E', 'A', 'A', 'E', 'K', 'E', 'E', 'N', 'G', 'K', 'E', 'E', 'S', 'U', 'K', 'E', 'H', 'E', 'H', 'K', 'E', 'N', 'A', 'T', 'K', 'E', 'R', 'E', 'T', 'K', 'E', 'S', 'H', '2', 'K', 'E', 'T', 'T', 'I', 'K', 'E', 'U', 'A', 'E', 'K', 'E', 'U', 'O', 'T', 'K', 'H', 'A', 'N', 'G', 'K', 'H', 'A', 'P', 'H', 'K', 'H', 'E', 'T', 'H', 'K', 'H', 'M', 'E', 'R', 'K', 'H', 'U', 'A', 'T', 'K', 'H', 'U', 'E', 'N', 'K', 'H', 'W', 'A', 'I', 'K', 'I', 'E', 'E', 'M', 'K', 'I', 'S', 'A', 'L', 'K', 'N', 'I', 'F', 'E', 'K', 'N', 'O', 'B', 'S', 'K', 'O', 'A', 'L', 'A', 'K', 'O', 'M', 'B', 'U', 'K', 'O', 'O', 'P', 'O', 'K', 'O', 'P', 'P', 'A', 'K', 'O', 'V', 'U', 'U', 'K', 'P', 'E', 'U', 'X', 'K', 'U', 'S', 'M', 'A', 'K', 'W', 'A', 'E', 'T', 'K', 'X', 'W', 'A', 'A', 'K', 'X', 'W', 'E', 'E', 'L', '0', '0', '2', 'A', 'L', '0', '0', '6', 'A', 'L', 'A', 'A', 'M', 'U', 'L', 'A', 'B', 'A', 'T', 'L', 'A', 'B', 'E', 'L', 'L', 'A', 'B', 'O', 'R', 'L', 'A', 'G', 'A', 'B', 'L', 'A', 'G', 'A', 'R', 'L', 'A', 'G', 'U', 'S', 'L', 'A', 'I', 'N', 'G', 'L', 'A', 'M', 'D', 'A', 'L', 'A', 'M', 'E', 'D', 'L', 'A', 'N', 'E', 'S', 'L', 'A', 'P', 'A', 'Q', 'L', 'A', 'R', 'G', 'E', 'L', 'A', 'T', 'I', 'K', 'L', 'A', 'T', 'I', 'N', 'L', 'A', 'U', 'L', 'A', 'L', 'A', 'Y', 'A', 'R', 'L', 'E', 'E', 'E', 'E', 'L', 'E', 'L', 'E', 'T', 'L', 'E', 'M', 'O', 'I', 'L', 'E', 'M', 'O', 'N', 'L', 'E', 'N', 'G', 'A', 'L', 'E', 'N', 'I', 'S', 'L', 'E', 'V', 'E', 'L', 'L', 'I', 'B', 'R', 'A', 'L', 'I', 'G', 'H', 'T', 'L', 'I', 'M', 'B', 'S', 'L', 'I', 'M', 'B', 'U', 'L', 'I', 'M', 'I', 'T', 'L', 'I', 'M', 'M', 'U', 'L', 'I', 'N', 'E', 'S', 'L', 'I', 'T', 'R', 'A', 'L', 'I', 'V', 'R', 'E', 'L', 'O', 'N', 'G', 'A', 'L', 'O', 'R', 'R', 'Y', 'L', 'O', 'T', 'U', 'S', 'L', 'O', 'U', 'R', 'E', 'L', 'O', 'W', '-', '9', 'L', 'O', 'W', 'E', 'R', 'L', 'U', 'A', 'E', 'P', 'L', 'U', 'G', 'A', 'L', 'L', 'U', 'H', 'U', 'R', 'L', 'Y', 'I', 'N', 'G', 'M', '0', '0', '1', 'A', 'M', '0', '0', '1', 'B', 'M', '0', '0', '3', 'A', 'M', '0', '1', '0', 'A', 'M', '0', '1', '2', 'A', 'M', '0', '1', '2', 'B', 'M', '0', '1', '2', 'C', 'M', '0', '1', '2', 'D', 'M', '0', '1', '2', 'E', 'M', '0', '1', '2', 'F', 'M', '0', '1', '2', 'G', 'M', '0', '1', '2', 'H', 'M', '0', '1', '5', 'A', 'M', '0', '1', '6', 'A', 'M', '0', '1', '7', 'A', 'M', '0', '2', '2', 'A', 'M', '0', '2', '4', 'A', 'M', '0', '2', '8', 'A', 'M', '0', '3', '1', 'A', 'M', '0', '3', '3', 'A', 'M', '0', '3', '3', 'B', 'M', '0', '4', '0', 'A', 'M', 'A', 'D', 'D', 'A', 'M', 'A', 'D', 'Y', 'A', 'M', 'A', 'E', 'S', 'I', 'M', 'A', 'H', 'H', 'A', 'M', 'A', 'I', 'R', 'U', 'M', 'A', 'I', 'Z', 'E', 'M', 'A', 'N', 'A', 'T', 'M', 'A', 'N', 'N', 'A', 'M', 'A', 'P', 'I', 'Q', 'M', 'A', 'P', 'L', 'E', 'M', 'A', 'Q', 'A', 'F', 'M', 'A', 'R', 'C', 'H', 'M', 'A', 'R', 'K', 'S', 'M', 'A', 'S', 'H', '2', 'M', 'A', 'Y', 'E', 'K', 'M', 'B', 'E', 'U', 'M', 'M', 'B', 'E', 'U', 'X', 'M', 'B', 'U', 'A', 'E', 'M', 'B', 'U', 'O', 'Q', 'M', 'C', 'H', 'A', 'N', 'M', 'E', 'D', 'A', 'L', 'M', 'E', 'E', 'E', 'E', 'M', 'E', 'E', 'M', 'U', 'M', 'E', 'I', 'Z', 'I', 'M', 'E', 'L', 'I', 'K', 'M', 'E', 'L', 'O', 'N', 'M', 'E', 'N', 'D', 'E', 'M', 'E', 'N', 'O', 'E', 'M', 'E', 'R', 'G', 'E', 'M', 'E', 'T', 'A', 'L', 'M', 'E', 'T', 'E', 'G', 'M', 'E', 'T', 'E', 'K', 'M', 'E', 'T', 'R', 'O', 'M', 'E', 'Z', 'Z', 'O', 'M', 'F', 'E', 'U', 'Q', 'M', 'F', 'E', 'U', 'T', 'M', 'F', 'I', 'E', 'E', 'M', 'G', 'B', 'E', 'E', 'M', 'G', 'B', 'E', 'N', 'M', 'G', 'B', 'O', 'O', 'M', 'G', 'I', 'E', 'X', 'M', 'G', 'U', 'O', 'P', 'M', 'G', 'U', 'O', 'X', 'M', 'G', 'U', 'R', 'X', 'M', 'I', 'C', 'R', 'O', 'M', 'I', 'E', 'U', 'M', 'M', 'I', 'K', 'R', 'I', 'M', 'I', 'L', 'K', 'Y', 'M', 'I', 'L', 'L', 'E', 'M', 'I', 'N', 'U', 'S', 'M', 'I', 'R', 'E', 'D', 'M', 'I', 'S', 'R', 'A', 'M', 'N', 'Y', 'A', 'M', 'M', 'O', 'D', 'E', 'L', 'M', 'O', 'D', 'E', 'M', 'M', 'O', 'N', 'E', 'Y', 'M', 'O', 'N', 'T', 'H', 'M', 'O', 'T', 'O', 'R', 'M', 'O', 'U', 'N', 'D', 'M', 'O', 'U', 'N', 'T', 'M', 'O', 'U', 'S', 'E', 'M', 'O', 'U', 'T', 'H', 'M', 'O', 'V', 'E', 'D', 'M', 'O', 'V', 'E', 'S', 'M', 'O', 'V', 'I', 'E', 'M', 'O', 'Y', 'A', 'I', 'M', 'U', 'K', 'H', 'A', 'M', 'U', 'L', 'T', 'I', 'M', 'U', 'N', 'A', 'H', 'M', 'U', 'R', 'D', 'A', 'M', 'U', 'S', 'H', '3', 'M', 'U', 'S', 'I', 'C', 'N', '-', 'A', 'R', 'Y', 'N', '0', '1', '8', 'A', 'N', '0', '1', '8', 'B', 'N', '0', '2', '5', 'A', 'N', '0', '3', '3', 'A', 'N', '0', '3', '4', 'A', 'N', '0', '3', '5', 'A', 'N', '0', '3', '7', 'A', 'N', 'A', 'B', 'L', 'A', 'N', 'A', 'G', 'A', 'R', 'N', 'A', 'G', 'R', 'I', 'N', 'A', 'I', 'R', 'A', 'N', 'A', 'S', 'A', 'L', 'N', 'A', 'S', 'H', 'I', 'N', 'B', 'I', 'E', 'P', 'N', 'B', 'I', 'E', 'X', 'N', 'B', 'U', 'R', 'X', 'N', 'B', 'Y', 'R', 'X', 'N', 'C', 'H', 'A', 'U', 'N', 'D', 'E', 'U', 'T', 'N', 'D', 'E', 'U', 'X', 'N', 'D', 'I', 'A', 'Q', 'N', 'D', 'I', 'D', 'A', 'N', 'D', 'I', 'E', 'X', 'N', 'D', 'O', 'L', 'E', 'N', 'D', 'U', 'R', 'X', 'N', 'E', 'N', 'O', 'E', 'N', 'G', 'A', 'A', 'I', 'N', 'G', 'G', 'A', 'A', 'N', 'G', 'G', 'A', 'P', 'N', 'G', 'G', 'E', 'E', 'N', 'G', 'G', 'E', 'N', 'N', 'G', 'G', 'E', 'U', 'N', 'G', 'G', 'O', 'O', 'N', 'G', 'G', 'U', 'A', 'N', 'G', 'G', 'U', 'M', 'N', 'G', 'G', 'U', 'P', 'N', 'G', 'I', 'E', 'P', 'N', 'G', 'I', 'E', 'X', 'N', 'G', 'K', 'A', 'P', 'N', 'G', 'K', 'A', 'Q', 'N', 'G', 'K', 'U', 'E', 'N', 'G', 'K', 'U', 'M', 'N', 'G', 'K', 'U', 'N', 'N', 'G', 'K', 'U', 'P', 'N', 'G', 'O', 'E', 'H', 'N', 'G', 'U', 'A', 'E', 'N', 'G', 'U', 'A', 'N', 'N', 'G', 'U', 'O', 'T', 'N', 'G', 'U', 'O', 'X', 'N', 'I', 'E', 'U', 'N', 'N', 'I', 'G', 'H', 'T', 'N', 'I', 'N', 'T', 'H', 'N', 'I', 'S', 'A', 'G', 'N', 'I', 'T', 'R', 'E', 'N', 'J', 'A', 'E', 'M', 'N', 'J', 'E', 'U', 'T', 'N', 'J', 'E', 'U', 'X', 'N', 'J', 'I', 'E', 'E', 'N', 'J', 'I', 'E', 'P', 'N', 'J', 'I', 'E', 'T', 'N', 'J', 'I', 'E', 'X', 'N', 'J', 'U', 'A', 'E', 'N', 'J', 'U', 'E', 'Q', 'N', 'J', 'U', 'O', 'X', 'N', 'J', 'U', 'Q', 'A', 'N', 'J', 'U', 'R', 'X', 'N', 'J', 'Y', 'R', 'X', 'N', 'L', '0', '0', '1', 'N', 'L', '0', '0', '2', 'N', 'L', '0', '0', '3', 'N', 'L', '0', '0', '4', 'N', 'L', '0', '0', '5', 'N', 'L', '0', '0', '6', 'N', 'L', '0', '0', '7', 'N', 'L', '0', '0', '8', 'N', 'L', '0', '0', '9', 'N', 'L', '0', '1', '0', 'N', 'L', '0', '1', '1', 'N', 'L', '0', '1', '2', 'N', 'L', '0', '1', '3', 'N', 'L', '0', '1', '4', 'N', 'L', '0', '1', '5', 'N', 'L', '0', '1', '6', 'N', 'L', '0', '1', '7', 'N', 'L', '0', '1', '8', 'N', 'L', '0', '1', '9', 'N', 'L', '0', '2', '0', 'N', 'N', 'B', 'S', 'P', 'N', 'N', 'G', 'A', 'A', 'N', 'N', 'G', 'I', 'I', 'N', 'N', 'G', 'O', 'O', 'N', 'O', 'O', 'N', 'U', 'N', 'O', 'R', 'T', 'H', 'N', 'O', 'T', 'C', 'H', 'N', 'O', 'T', 'E', 'S', 'N', 'O', 'T', 'T', 'O', 'N', 'R', 'U', 'R', 'X', 'N', 'R', 'Y', 'R', 'X', 'N', 'S', 'H', 'A', 'Q', 'N', 'S', 'H', 'E', 'E', 'N', 'S', 'H', 'U', 'E', 'N', 'S', 'H', 'U', 'T', 'N', 'S', 'I', 'E', 'E', 'N', 'S', 'U', 'O', 'T', 'N', 'T', 'E', 'U', 'M', 'N', 'T', 'H', 'A', 'U', 'N', 'T', 'I', 'E', 'E', 'N', 'T', 'S', 'A', 'U', 'N', 'T', 'X', 'I', 'V', 'N', 'U', '0', '0', '1', 'N', 'U', '0', '0', '2', 'N', 'U', '0', '0', '3', 'N', 'U', '0', '0', '4', 'N', 'U', '0', '0', '5', 'N', 'U', '0', '0', '6', 'N', 'U', '0', '0', '7', 'N', 'U', '0', '0', '8', 'N', 'U', '0', '0', '9', 'N', 'U', '0', '1', '0', 'N', 'U', '0', '1', '1', 'N', 'U', '0', '1', '2', 'N', 'U', '0', '1', '3', 'N', 'U', '0', '1', '4', 'N', 'U', '0', '1', '5', 'N', 'U', '0', '1', '6', 'N', 'U', '0', '1', '7', 'N', 'U', '0', '1', '8', 'N', 'U', '0', '1', '9', 'N', 'U', '0', '2', '0', 'N', 'U', '0', '2', '1', 'N', 'U', '0', '2', '2', 'N', 'U', 'E', 'N', 'G', 'N', 'U', 'K', 'T', 'A', 'N', 'U', 'N', 'U', 'Z', 'N', 'Y', 'I', 'E', 'P', 'N', 'Y', 'I', 'E', 'T', 'N', 'Y', 'I', 'E', 'X', 'N', 'Y', 'U', 'O', 'P', 'N', 'Y', 'U', 'O', 'X', 'N', 'Z', 'E', 'U', 'M', 'N', 'Z', 'I', 'E', 'P', 'N', 'Z', 'I', 'E', 'X', 'N', 'Z', 'U', 'O', 'X', 'N', 'Z', 'U', 'R', 'X', 'N', 'Z', 'Y', 'R', 'X', 'O', '-', 'O', '-', 'I', 'O', '-', 'Y', 'A', 'E', 'O', '-', 'Y', 'E', 'O', 'O', '0', '0', '1', 'A', 'O', '0', '0', '5', 'A', 'O', '0', '0', '6', 'A', 'O', '0', '0', '6', 'B', 'O', '0', '0', '6', 'C', 'O', '0', '0', '6', 'D', 'O', '0', '0', '6', 'E', 'O', '0', '0', '6', 'F', 'O', '0', '1', '0', 'A', 'O', '0', '1', '0', 'B', 'O', '0', '1', '0', 'C', 'O', '0', '1', '9', 'A', 'O', '0', '2', '0', 'A', 'O', '0', '2', '4', 'A', 'O', '0', '2', '5', 'A', 'O', '0', '2', '9', 'A', 'O', '0', '3', '0', 'A', 'O', '0', '3', '3', 'A', 'O', '0', '3', '6', 'A', 'O', '0', '3', '6', 'B', 'O', '0', '3', '6', 'C', 'O', '0', '3', '6', 'D', 'O', '0', '5', '0', 'A', 'O', '0', '5', '0', 'B', 'O', 'B', 'O', 'L', 'S', 'O', 'G', 'H', 'A', 'M', 'O', 'J', 'E', 'O', 'N', 'O', 'K', 'A', 'R', 'A', 'O', 'L', 'D', 'E', 'R', 'O', 'L', 'I', 'V', 'E', 'O', 'M', 'E', 'G', 'A', 'O', 'N', 'K', 'A', 'R', 'O', 'R', 'D', 'E', 'R', 'O', 'R', 'E', '-', '2', 'O', 'R', 'I', 'Y', 'A', 'O', 'S', 'A', 'G', 'E', 'O', 'T', 'H', 'A', 'L', 'O', 'T', 'H', 'E', 'R', 'O', 'U', 'N', 'C', 'E', 'O', 'U', 'T', 'E', 'R', 'O', 'X', 'E', 'I', 'A', 'P', '0', '0', '1', 'A', 'P', '0', '0', '3', 'A', 'P', 'A', 'A', 'T', 'U', 'P', 'A', 'D', 'M', 'A', 'P', 'A', 'G', 'E', 'R', 'P', 'A', 'G', 'E', 'S', 'P', 'A', 'N', 'D', 'A', 'P', 'A', 'N', 'T', 'I', 'P', 'A', 'P', 'E', 'R', 'P', 'A', 'R', 'T', 'Y', 'P', 'A', 'R', 'U', 'M', 'P', 'A', 'S', 'E', 'Q', 'P', 'A', 'S', 'U', 'Q', 'P', 'A', 'T', 'A', 'H', 'P', 'A', 'T', 'A', 'K', 'P', 'A', 'Z', 'E', 'R', 'P', 'E', 'A', 'C', 'E', 'P', 'E', 'A', 'C', 'H', 'P', 'E', 'A', 'K', 'S', 'P', 'E', 'D', 'A', 'L', 'P', 'E', 'E', 'Z', 'I', 'P', 'E', 'H', 'E', 'H', 'P', 'E', 'I', 'T', 'H', 'P', 'E', 'N', 'N', 'Y', 'P', 'E', 'N', 'S', 'U', 'P', 'E', 'P', 'E', 'T', 'P', 'E', 'S', 'H', '2', 'P', 'H', 'O', 'N', 'E', 'P', 'H', 'U', 'N', 'G', 'P', 'I', 'A', 'N', 'O', 'P', 'I', 'E', 'C', 'E', 'P', 'I', 'E', 'E', 'Q', 'P', 'I', 'E', 'E', 'T', 'P', 'I', 'E', 'U', 'P', 'P', 'I', 'R', 'I', 'G', 'P', 'I', 'Z', 'Z', 'A', 'P', 'L', 'A', 'C', 'E', 'P', 'L', 'A', 'N', 'E', 'P', 'L', 'A', 'T', 'E', 'P', 'L', 'H', 'A', 'U', 'P', 'L', 'U', 'T', 'A', 'P', 'L', 'U', 'T', 'O', 'P', 'O', 'I', 'N', 'T', 'P', 'O', 'N', 'D', 'O', 'P', 'O', 'U', 'C', 'H', 'P', 'O', 'U', 'N', 'D', 'P', 'O', 'W', 'E', 'R', 'P', 'R', 'I', 'M', 'E', 'P', 'R', 'I', 'N', 'T', 'P', 'R', 'O', 'O', 'F', 'P', 'R', 'O', 'V', 'E', 'P', 'S', 'I', 'L', 'I', 'P', 'U', 'R', 'S', 'E', 'Q', 'A', 'A', 'F', 'U', 'Q', 'A', 'D', 'M', 'A', 'Q', 'A', 'T', 'A', 'N', 'Q', 'H', 'O', 'P', 'H', 'Q', 'H', 'W', 'A', 'A', 'Q', 'H', 'W', 'E', 'E', 'Q', 'I', 'T', 'S', 'A', 'Q', 'U', 'E', 'E', 'N', 'Q', 'U', 'I', 'C', 'K', 'Q', 'U', 'I', 'L', 'L', 'Q', 'U', 'I', 'L', 'T', 'Q', 'U', 'O', 'T', 'E', 'R', '0', '0', '2', 'A', 'R', '0', '0', '3', 'A', 'R', '0', '0', '3', 'B', 'R', '0', '1', '0', 'A', 'R', '0', '1', '6', 'A', 'R', 'A', 'D', 'I', 'O', 'R', 'A', 'I', 'D', 'A', 'R', 'A', 'I', 'D', 'O', 'R', 'A', 'N', 'G', 'E', 'R', 'A', 'S', 'H', 'A', 'R', 'A', 'T', 'H', 'A', 'R', 'A', 'T', 'I', 'O', 'R', 'B', 'A', 'S', 'A', 'R', 'E', 'A', 'C', 'H', 'R', 'E', 'G', 'I', 'A', 'R', 'E', 'L', 'A', 'A', 'R', 'E', 'V', 'I', 'A', 'R', 'E', 'V', 'M', 'A', 'R', 'G', 'Y', 'A', 'N', 'R', 'I', 'C', 'E', 'M', 'R', 'I', 'E', 'U', 'L', 'R', 'I', 'F', 'L', 'E', 'R', 'I', 'G', 'H', 'T', 'R', 'I', 'N', 'G', 'S', 'R', 'I', 'T', 'S', 'I', 'R', 'I', 'V', 'E', 'R', 'R', 'N', 'O', 'O', 'N', 'R', 'O', 'B', 'A', 'T', 'R', 'O', 'B', 'O', 'T', 'R', 'O', 'M', 'A', 'N', 'R', 'O', 'U', 'N', 'D', 'R', 'R', 'U', 'O', 'X', 'R', 'R', 'U', 'R', 'X', 'R', 'R', 'Y', 'R', 'X', 'R', 'T', 'A', 'G', 'S', 'R', 'U', 'B', 'L', 'E', 'R', 'U', 'G', 'B', 'Y', 'R', 'U', 'L', 'A', 'I', 'R', 'U', 'L', 'E', 'R', 'R', 'U', 'M', 'A', 'I', 'R', 'U', 'N', 'I', 'C', 'R', 'U', 'P', 'E', 'E', 'R', 'U', 'P', 'I', 'I', 'R', 'W', 'A', 'H', 'A', 'S', '0', '0', '2', 'A', 'S', '0', '0', '6', 'A', 'S', '0', '1', '4', 'A', 'S', '0', '1', '4', 'B', 'S', '0', '1', '7', 'A', 'S', '0', '2', '6', 'A', 'S', '0', '2', '6', 'B', 'S', '0', '3', '5', 'A', 'S', 'A', 'D', 'H', 'E', 'S', 'A', 'F', 'H', 'A', 'S', 'A', 'K', 'H', 'A', 'S', 'A', 'K', 'O', 'T', 'S', 'A', 'K', 'T', 'A', 'S', 'A', 'L', 'A', 'D', 'S', 'A', 'L', 'A', 'M', 'S', 'A', 'L', 'L', 'A', 'S', 'A', 'M', 'B', 'A', 'S', 'A', 'M', 'K', 'A', 'S', 'A', 'M', 'P', 'I', 'S', 'A', 'N', 'A', 'H', 'S', 'A', 'S', 'A', 'K', 'S', 'A', 'U', 'I', 'L', 'S', 'A', 'W', 'A', 'N', 'S', 'B', 'R', 'U', 'L', 'S', 'C', 'H', 'W', 'A', 'S', 'C', 'O', 'R', 'E', 'S', 'D', 'O', 'N', 'G', 'S', 'E', 'E', 'N', 'U', 'S', 'E', 'G', 'N', 'O', 'S', 'E', 'G', 'O', 'L', 'S', 'E', 'N', 'T', 'I', 'S', 'E', 'N', 'T', 'O', 'S', 'E', 'R', 'I', 'F', 'S', 'E', 'V', 'E', 'N', 'S', 'H', 'A', 'B', '6', 'S', 'H', 'A', 'D', 'E', 'S', 'H', 'A', 'F', 'T', 'S', 'H', 'A', 'N', 'G', 'S', 'H', 'A', 'P', 'E', 'S', 'H', 'A', 'R', '2', 'S', 'H', 'A', 'R', 'A', 'S', 'H', 'A', 'R', 'K', 'S', 'H', 'A', 'R', 'P', 'S', 'H', 'A', 'R', 'U', 'S', 'H', 'C', 'H', 'A', 'S', 'H', 'E', 'E', 'N', 'S', 'H', 'E', 'E', 'P', 'S', 'H', 'E', 'G', '9', 'S', 'H', 'E', 'L', 'F', 'S', 'H', 'E', 'L', 'L', 'S', 'H', 'E', 'S', 'H', 'S', 'H', 'E', 'U', 'X', 'S', 'H', 'E', 'V', 'A', 'S', 'H', 'I', 'F', 'T', 'S', 'H', 'I', 'I', 'N', 'S', 'H', 'I', 'M', 'A', 'S', 'H', 'I', 'R', 'T', 'S', 'H', 'I', 'T', 'A', 'S', 'H', 'O', 'G', 'I', 'S', 'H', 'O', 'O', 'I', 'S', 'H', 'O', 'O', 'T', 'S', 'H', 'O', 'R', 'T', 'S', 'H', 'R', 'U', 'G', 'S', 'H', 'U', 'E', 'Q', 'S', 'H', 'U', 'O', 'P', 'S', 'H', 'U', 'O', 'X', 'S', 'H', 'U', 'R', 'X', 'S', 'H', 'W', 'A', 'A', 'S', 'H', 'W', 'I', 'I', 'S', 'H', 'W', 'O', 'O', 'S', 'H', 'W', 'O', 'Y', 'S', 'H', 'Y', 'R', 'X', 'S', 'I', 'G', 'E', 'L', 'S', 'I', 'G', 'M', 'A', 'S', 'I', 'G', 'N', 'S', 'S', 'I', 'L', 'A', '3', 'S', 'I', 'X', 'T', 'H', 'S', 'I', 'X', 'T', 'Y', 'S', 'K', 'A', 'T', 'E', 'S', 'K', 'I', 'E', 'R', 'S', 'K', 'U', 'L', 'L', 'S', 'L', 'A', 'S', 'H', 'S', 'L', 'A', 'V', 'E', 'S', 'L', 'E', 'E', 'P', 'S', 'L', 'I', 'C', 'E', 'S', 'L', 'I', 'N', 'G', 'S', 'L', 'O', 'A', 'N', 'S', 'L', 'O', 'P', 'E', 'S', 'L', 'O', 'V', 'O', 'S', 'M', 'A', 'L', 'L', 'S', 'M', 'A', 'S', 'H', 'S', 'M', 'E', 'A', 'R', 'S', 'M', 'I', 'L', 'E', 'S', 'N', 'A', 'I', 'L', 'S', 'N', 'A', 'K', 'E', 'S', 'N', 'O', 'U', 'T', 'S', 'O', 'L', 'I', 'D', 'S', 'O', 'U', 'N', 'D', 'S', 'O', 'U', 'T', 'H', 'S', 'P', 'A', 'C', 'E', 'S', 'P', 'A', 'D', 'E', 'S', 'P', 'E', 'A', 'R', 'S', 'P', 'I', 'C', 'E', 'S', 'P', 'I', 'N', 'E', 'S', 'P', 'L', 'I', 'T', 'S', 'P', 'O', 'O', 'N', 'S', 'Q', 'U', 'A', 'T', 'S', 'Q', 'U', 'I', 'D', 'S', 'S', 'H', 'I', 'N', 'S', 'S', 'I', 'E', 'P', 'S', 'S', 'I', 'E', 'X', 'S', 'S', 'Y', 'R', 'X', 'S', 'T', 'A', 'F', 'F', 'S', 'T', 'A', 'N', 'D', 'S', 'T', 'A', 'R', 'K', 'S', 'T', 'A', 'R', 'S', 'S', 'T', 'A', 'R', 'T', 'S', 'T', 'E', 'A', 'M', 'S', 'T', 'I', 'C', 'K', 'S', 'T', 'I', 'L', 'E', 'S', 'T', 'I', 'L', 'L', 'S', 'T', 'O', 'C', 'K', 'S', 'T', 'O', 'N', 'E', 'S', 'T', 'O', 'R', 'E', 'S', 'T', 'O', 'V', 'E', 'S', 'T', 'U', 'D', 'Y', 'S', 'U', 'A', 'E', 'N', 'S', 'U', 'A', 'E', 'T', 'S', 'U', 'H', 'U', 'R', 'S', 'U', 'K', 'U', 'N', 'S', 'U', 'P', 'E', 'R', 'S', 'U', 'R', 'Y', 'A', 'S', 'U', 'S', 'H', 'I', 'S', 'U', 'T', 'R', 'A', 'S', 'W', 'A', 'S', 'H', 'S', 'W', 'E', 'A', 'T', 'S', 'W', 'E', 'E', 'T', 'S', 'W', 'I', 'R', 'L', 'S', 'W', 'O', 'R', 'D', 'S', 'W', 'U', 'N', 'G', 'S', 'Y', 'R', 'M', 'A', 'T', '0', '0', '3', 'A', 'T', '0', '0', '7', 'A', 'T', '0', '0', '8', 'A', 'T', '0', '0', '9', 'A', 'T', '0', '1', '1', 'A', 'T', '0', '1', '6', 'A', 'T', '0', '3', '2', 'A', 'T', '0', '3', '3', 'A', 'T', 'A', 'B', 'L', 'E', 'T', 'A', 'K', 'R', 'I', 'T', 'A', 'M', 'I', 'L', 'T', 'A', 'P', 'E', 'R', 'T', 'C', 'H', 'E', 'H', 'T', 'E', 'A', 'R', 'S', 'T', 'E', 'E', 'E', 'E', 'T', 'E', 'E', 'N', 'S', 'T', 'E', 'E', 'T', 'H', 'T', 'E', 'G', 'E', 'H', 'T', 'E', 'H', 'E', 'H', 'T', 'E', 'I', 'W', 'S', 'T', 'E', 'N', 'G', 'E', 'T', 'E', 'N', 'S', 'E', 'T', 'E', 'N', 'T', 'H', 'T', 'E', 'V', 'I', 'R', 'T', 'H', 'E', 'M', 'A', 'T', 'H', 'E', 'R', 'E', 'T', 'H', 'E', 'T', 'A', 'T', 'H', 'E', 'T', 'H', 'T', 'H', 'I', 'A', 'B', 'T', 'H', 'I', 'C', 'K', 'T', 'H', 'I', 'G', 'H', 'T', 'H', 'I', 'R', 'D', 'T', 'H', 'I', 'T', 'A', 'T', 'H', 'O', 'N', 'G', 'T', 'H', 'O', 'R', 'N', 'T', 'H', 'R', 'E', 'E', 'T', 'H', 'U', 'M', 'B', 'T', 'H', 'U', 'N', 'G', 'T', 'H', 'U', 'R', 'S', 'T', 'H', 'W', 'A', 'A', 'T', 'H', 'W', 'E', 'E', 'T', 'H', 'W', 'I', 'I', 'T', 'H', 'W', 'O', 'O', 'T', 'I', 'A', 'R', 'A', 'T', 'I', 'G', 'E', 'R', 'T', 'I', 'G', 'H', 'T', 'T', 'I', 'L', 'D', 'E', 'T', 'I', 'L', 'E', 'S', 'T', 'I', 'M', 'E', 'R', 'T', 'I', 'M', 'E', 'S', 'T', 'I', 'N', 'N', 'E', 'T', 'I', 'P', 'P', 'I', 'T', 'I', 'R', 'E', 'D', 'T', 'I', 'R', 'T', 'A', 'T', 'I', 'T', 'L', 'O', 'T', 'I', 'W', 'A', 'Z', 'T', 'L', 'H', 'E', 'E', 'T', 'L', 'H', 'O', 'O', 'T', 'L', 'H', 'W', 'E', 'T', 'L', 'H', 'Y', 'A', 'T', 'O', 'K', 'Y', 'O', 'T', 'O', 'M', 'P', 'I', 'T', 'O', 'N', 'A', 'L', 'T', 'O', 'N', 'O', 'S', 'T', 'O', 'O', 'T', 'H', 'T', 'O', 'R', 'C', 'H', 'T', 'O', 'R', 'S', 'O', 'T', 'O', 'T', 'A', 'L', 'T', 'O', 'U', 'C', 'H', 'T', 'O', 'W', 'E', 'R', 'T', 'R', 'A', 'C', 'K', 'T', 'R', 'A', 'D', 'E', 'T', 'R', 'A', 'I', 'N', 'T', 'R', 'E', 'N', 'D', 'T', 'R', 'I', 'O', 'N', 'T', 'R', 'U', 'C', 'K', 'T', 'R', 'U', 'N', 'K', 'T', 'R', 'U', 'T', 'H', 'T', 'S', 'A', 'D', 'I', 'T', 'S', 'E', 'E', 'B', 'T', 'S', 'E', 'R', 'E', 'T', 'S', 'H', 'A', 'B', 'T', 'S', 'H', 'E', 'G', 'T', 'S', 'H', 'E', 'S', 'T', 'T', 'H', 'A', 'A', 'T', 'T', 'H', 'E', 'E', 'T', 'T', 'H', 'O', 'O', 'T', 'T', 'H', 'W', 'E', 'T', 'T', 'S', 'E', 'E', 'T', 'T', 'T', 'H', 'A', 'T', 'U', 'A', 'E', 'P', 'T', 'U', 'L', 'I', 'P', 'T', 'U', 'M', 'A', 'E', 'T', 'U', 'N', 'N', 'Y', 'T', 'U', 'R', 'O', '2', 'T', 'U', 'T', 'T', 'Y', 'T', 'U', 'U', 'M', 'U', 'U', '-', 'I', '-', 'I', 'U', '-', 'Y', 'E', 'O', 'U', '0', '0', '6', 'A', 'U', '0', '0', '6', 'B', 'U', '0', '2', '3', 'A', 'U', '0', '2', '9', 'A', 'U', '0', '3', '2', 'A', 'U', 'D', 'A', 'A', 'T', 'U', 'K', 'A', 'R', 'A', 'U', 'M', 'B', 'I', 'N', 'U', 'N', 'C', 'I', 'A', 'U', 'N', 'D', 'E', 'R', 'U', 'N', 'I', 'O', 'N', 'U', 'N', 'I', 'T', 'Y', 'U', 'P', 'P', 'E', 'R', 'U', 'R', 'I', 'N', 'E', 'U', 'R', 'U', 'D', 'A', 'U', 'S', 'S', 'U', '3', 'U', 'T', 'U', 'K', 'I', 'V', '0', '0', '1', 'A', 'V', '0', '0', '1', 'B', 'V', '0', '0', '1', 'C', 'V', '0', '0', '1', 'D', 'V', '0', '0', '1', 'E', 'V', '0', '0', '1', 'F', 'V', '0', '0', '1', 'G', 'V', '0', '0', '1', 'H', 'V', '0', '0', '1', 'I', 'V', '0', '0', '2', 'A', 'V', '0', '0', '7', 'A', 'V', '0', '0', '7', 'B', 'V', '0', '1', '1', 'A', 'V', '0', '1', '1', 'B', 'V', '0', '1', '1', 'C', 'V', '0', '1', '2', 'A', 'V', '0', '1', '2', 'B', 'V', '0', '2', '0', 'A', 'V', '0', '2', '0', 'B', 'V', '0', '2', '0', 'C', 'V', '0', '2', '0', 'D', 'V', '0', '2', '0', 'E', 'V', '0', '2', '0', 'F', 'V', '0', '2', '0', 'G', 'V', '0', '2', '0', 'H', 'V', '0', '2', '0', 'I', 'V', '0', '2', '0', 'J', 'V', '0', '2', '0', 'K', 'V', '0', '2', '0', 'L', 'V', '0', '2', '3', 'A', 'V', '0', '2', '8', 'A', 'V', '0', '2', '9', 'A', 'V', '0', '3', '0', 'A', 'V', '0', '3', '1', 'A', 'V', '0', '3', '3', 'A', 'V', '0', '3', '7', 'A', 'V', '0', '4', '0', 'A', 'V', 'A', 'A', 'V', 'U', 'V', 'A', 'R', 'I', 'A', 'V', 'A', 'R', 'Y', 'S', 'V', 'A', 'S', 'I', 'S', 'V', 'A', 'T', 'H', 'Y', 'V', 'E', 'D', 'I', 'C', 'V', 'E', 'R', 'G', 'E', 'V', 'E', 'R', 'S', 'E', 'V', 'E', 'S', 'T', 'A', 'V', 'E', 'U', 'A', 'E', 'V', 'I', 'D', 'E', 'O', 'V', 'I', 'R', 'G', 'A', 'V', 'I', 'R', 'G', 'O', 'V', 'I', 'T', 'A', 'E', 'V', 'O', 'C', 'A', 'L', 'V', 'O', 'W', 'E', 'L', 'V', 'Z', 'M', 'E', 'T', 'W', '0', '0', '3', 'A', 'W', '0', '0', '9', 'A', 'W', '0', '1', '0', 'A', 'W', '0', '1', '4', 'A', 'W', '0', '1', '7', 'A', 'W', '0', '1', '8', 'A', 'W', '0', '2', '4', 'A', 'W', 'A', 'A', 'V', 'U', 'W', 'A', 'D', 'D', 'A', 'W', 'A', 'I', 'S', 'T', 'W', 'A', 'Q', 'F', 'A', 'W', 'A', 'S', 'L', 'A', 'W', 'A', 'T', 'C', 'H', 'W', 'A', 'T', 'E', 'R', 'W', 'A', 'T', 'T', 'O', 'W', 'A', 'V', 'E', 'S', 'W', 'E', 'A', 'R', 'Y', 'W', 'E', 'D', 'G', 'E', 'W', 'H', 'A', 'L', 'E', 'W', 'H', 'E', 'A', 'T', 'W', 'H', 'E', 'E', 'L', 'W', 'H', 'I', 'T', 'E', 'W', 'H', 'O', 'L', 'E', 'W', 'I', 'A', 'N', 'G', 'W', 'I', 'D', 'T', 'H', 'W', 'I', 'N', 'D', 'U', 'W', 'I', 'N', 'G', 'S', 'W', 'I', 'N', 'J', 'A', 'W', 'I', 'R', 'E', 'D', 'W', 'O', 'M', 'A', 'N', 'W', 'O', 'M', 'E', 'N', 'W', 'O', 'R', 'L', 'D', 'W', 'R', 'I', 'S', 'T', 'W', 'R', 'O', 'N', 'G', 'W', 'U', 'A', 'E', 'N', 'W', 'U', 'A', 'E', 'T', 'W', 'U', 'N', 'J', 'O', 'X', '0', '0', '4', 'A', 'X', '0', '0', '4', 'B', 'X', '0', '0', '6', 'A', 'X', '0', '0', '8', 'A', 'X', 'I', 'R', 'O', 'N', 'X', 'Y', 'E', 'E', 'M', 'X', 'Y', 'O', 'O', 'J', 'Y', '0', '0', '1', 'A', 'Y', 'A', '-', 'Y', 'O', 'Y', 'A', 'A', 'D', 'O', 'Y', 'A', 'A', 'R', 'U', 'Y', 'A', 'D', 'D', 'H', 'Y', 'A', 'G', 'H', 'H', 'Y', 'A', 'K', 'H', 'H', 'Y', 'A', 'M', 'O', 'K', 'Y', 'E', 'N', 'A', 'P', 'Y', 'E', 'O', '-', 'O', 'Y', 'E', 'O', '-', 'U', 'Y', 'E', 'R', 'A', 'H', 'Y', 'E', 'S', 'T', 'U', 'Y', 'E', 'T', 'I', 'V', 'Y', 'E', 'U', 'A', 'E', 'Y', 'I', 'Z', 'E', 'T', 'Y', 'O', '-', 'A', 'E', 'Y', 'O', '-', 'E', 'O', 'Y', 'O', '-', 'Y', 'A', 'Y', 'U', '-', 'A', 'E', 'Y', 'U', '-', 'E', 'O', 'Y', 'U', '-', 'Y', 'E', 'Y', 'U', 'A', 'E', 'N', 'Y', 'U', 'W', 'O', 'Q', 'Z', '0', '0', '2', 'A', 'Z', '0', '0', '2', 'B', 'Z', '0', '0', '2', 'C', 'Z', '0', '0', '2', 'D', 'Z', '0', '0', '3', 'A', 'Z', '0', '0', '3', 'B', 'Z', '0', '0', '4', 'A', 'Z', '0', '0', '5', 'A', 'Z', '0', '1', '5', 'A', 'Z', '0', '1', '5', 'B', 'Z', '0', '1', '5', 'C', 'Z', '0', '1', '5', 'D', 'Z', '0', '1', '5', 'E', 'Z', '0', '1', '5', 'F', 'Z', '0', '1', '5', 'G', 'Z', '0', '1', '5', 'H', 'Z', '0', '1', '5', 'I', 'Z', '0', '1', '6', 'A', 'Z', '0', '1', '6', 'B', 'Z', '0', '1', '6', 'C', 'Z', '0', '1', '6', 'D', 'Z', '0', '1', '6', 'E', 'Z', '0', '1', '6', 'F', 'Z', '0', '1', '6', 'G', 'Z', '0', '1', '6', 'H', 'Z', 'A', 'Q', 'E', 'F', 'Z', 'A', 'R', 'Q', 'A', 'Z', 'A', 'Y', 'I', 'N', 'Z', 'H', 'A', 'I', 'N', 'Z', 'H', 'U', 'O', 'P', 'Z', 'H', 'U', 'O', 'X', 'Z', 'H', 'U', 'R', 'X', 'Z', 'H', 'Y', 'R', 'X', 'Z', 'I', 'L', 'D', 'E', 'Z', 'I', 'N', 'O', 'R', 'Z', 'I', 'Q', 'A', 'A', 'Z', 'L', 'A', 'M', 'A', 'Z', 'U', 'B', 'U', 'R', 'Z', 'Y', 'G', 'O', 'S', 'Z', 'Z', 'I', 'E', 'P', 'Z', 'Z', 'I', 'E', 'T', 'Z', 'Z', 'I', 'E', 'X', 'Z', 'Z', 'S', 'Y', 'A', 'Z', 'Z', 'U', 'R', 'X', 'Z', 'Z', 'Y', 'R', 'X', '-', 'K', 'H', 'Y', 'I', 'L', '-', 'K', 'H', 'Y', 'U', 'D', 'A', '7', '0', '9', '-', '2', 'A', '7', '0', '9', '-', '3', 'A', '7', '0', '9', '-', '4', 'A', '7', '0', '9', '-', '6', 'A', 'A', '0', '0', '7', 'A', 'A', 'A', '0', '0', '7', 'B', 'A', 'B', '0', '2', '1', 'F', 'A', 'B', '0', '2', '1', 'M', 'A', 'B', '0', '2', '2', 'F', 'A', 'B', '0', '2', '2', 'M', 'A', 'B', '0', '2', '3', 'M', 'A', 'B', '1', '3', '1', 'A', 'A', 'B', '1', '3', '1', 'B', 'A', 'C', 'C', 'E', 'N', 'T', 'A', 'C', 'C', 'E', 'P', 'T', 'A', 'E', 'G', 'E', 'A', 'N', 'A', 'E', 'R', 'I', 'A', 'L', 'A', 'F', 'S', 'A', 'A', 'Q', 'A', 'I', 'H', 'V', 'U', 'S', 'A', 'I', 'K', 'A', 'R', 'A', 'A', 'L', 'A', 'Y', 'H', 'E', 'A', 'L', 'K', 'A', 'L', 'I', 'A', 'L', 'M', 'O', 'S', 'T', 'A', 'M', 'O', 'U', 'N', 'T', 'A', 'N', 'C', 'H', 'O', 'R', 'A', 'N', 'C', 'O', 'R', 'A', 'A', 'N', 'G', 'L', 'E', 'D', 'A', 'N', 'N', 'A', 'A', 'U', 'A', 'P', 'A', 'A', 'T', 'O', 'A', 'P', 'L', 'O', 'U', 'N', 'A', 'R', '-', 'R', 'U', 'B', 'A', 'R', 'A', 'B', 'I', 'C', 'A', 'R', 'A', 'E', 'A', 'E', 'A', 'R', 'L', 'A', 'U', 'G', 'A', 'R', 'M', 'O', 'U', 'R', 'A', 'R', 'O', 'U', 'N', 'D', 'A', 'R', 'O', 'U', 'R', 'A', 'A', 'R', 'R', 'I', 'V', 'E', 'A', 'R', 'R', 'O', 'W', 'S', 'A', 'R', 'S', 'E', 'O', 'S', 'A', 'R', 'T', 'A', 'B', 'E', 'A', 'R', 'T', 'I', 'S', 'T', 'A', 'R', 'U', 'H', 'U', 'A', 'A', 'S', 'C', 'E', 'N', 'T', 'A', 'S', 'H', 'G', 'A', 'B', 'A', 'S', 'Y', 'U', 'R', 'A', 'A', 'T', 'M', 'A', 'A', 'U', 'A', 'U', 'G', 'U', 'S', 'T', 'A', 'U', 'T', 'U', 'M', 'N', 'A', 'Y', 'A', 'N', 'N', 'A', 'B', 'A', 'D', 'G', 'E', 'R', 'B', 'A', 'H', 'A', 'R', '2', 'B', 'A', 'I', 'M', 'A', 'I', 'B', 'A', 'L', 'L', 'O', 'T', 'B', 'A', 'L', 'U', 'D', 'A', 'B', 'A', 'M', 'B', 'O', 'O', 'B', 'A', 'N', 'A', 'N', 'A', 'B', 'A', 'N', 'T', 'O', 'C', 'B', 'A', 'R', 'B', 'E', 'R', 'B', 'A', 'R', 'L', 'E', 'Y', 'B', 'A', 'R', 'R', 'E', 'D', 'B', 'A', 'R', 'R', 'E', 'E', 'B', 'E', 'A', 'M', 'E', 'D', 'B', 'E', 'A', 'V', 'E', 'R', 'B', 'E', 'E', 'T', 'L', 'E', 'B', 'E', 'F', 'O', 'R', 'E', 'B', 'E', 'H', 'I', 'N', 'D', 'B', 'E', 'R', 'B', 'E', 'R', 'B', 'E', 'S', 'I', 'D', 'E', 'B', 'E', 'Y', 'Y', 'A', 'L', 'B', 'I', 'C', 'E', 'P', 'S', 'B', 'I', 'K', 'I', 'N', 'I', 'B', 'I', 'N', 'A', 'R', 'Y', 'B', 'I', 'S', 'H', 'O', 'P', 'B', 'I', 'T', 'I', 'N', 'G', 'B', 'I', 'T', 'T', 'E', 'R', 'B', 'O', 'R', 'U', 'T', 'O', 'B', 'O', 'T', 'T', 'L', 'E', 'B', 'O', 'T', 'T', 'O', 'M', 'B', 'O', 'W', 'I', 'N', 'G', 'B', 'O', 'W', 'T', 'I', 'E', 'B', 'O', 'X', 'I', 'N', 'G', 'B', 'R', 'A', 'H', 'M', 'I', 'B', 'R', 'A', 'N', 'C', 'H', 'B', 'R', 'E', 'A', 'T', 'H', 'B', 'R', 'E', 'V', 'I', 'S', 'B', 'R', 'I', 'D', 'G', 'E', 'B', 'R', 'O', 'K', 'E', 'N', 'B', 'R', 'O', 'N', 'Z', 'E', 'B', 'U', 'B', 'B', 'L', 'E', 'B', 'U', 'C', 'K', 'L', 'E', 'B', 'U', 'L', 'L', 'E', 'T', 'B', 'U', 'T', 'T', 'O', 'N', 'C', 'A', 'C', 'T', 'U', 'S', 'C', 'A', 'M', 'E', 'R', 'A', 'C', 'A', 'M', 'N', 'U', 'C', 'C', 'A', 'N', 'C', 'E', 'L', 'C', 'A', 'N', 'C', 'E', 'R', 'C', 'A', 'N', 'D', 'L', 'E', 'C', 'A', 'N', 'D', 'R', 'A', 'C', 'A', 'P', 'P', 'E', 'D', 'C', 'A', 'R', 'I', 'A', 'N', 'C', 'A', 'R', 'R', 'O', 'T', 'C', 'A', 'S', 'K', 'E', 'T', 'C', 'A', 'S', 'T', 'L', 'E', 'C', 'A', 'T', 'A', 'W', 'A', 'C', 'C', 'H', 'H', 'A', 'A', 'C', 'C', 'H', 'H', 'E', 'E', 'C', 'E', 'L', 'T', 'I', 'C', 'C', 'E', 'N', 'T', 'R', 'E', 'C', 'E', 'R', '-', 'W', 'A', 'C', 'H', 'A', 'I', 'N', 'S', 'C', 'H', 'A', 'K', 'M', 'A', 'C', 'H', 'A', 'M', 'K', 'O', 'C', 'H', 'A', 'N', 'G', 'E', 'C', 'H', 'E', 'E', 'K', 'S', 'C', 'H', 'E', 'E', 'S', 'E', 'C', 'H', 'E', 'R', 'R', 'Y', 'C', 'H', 'I', 'L', 'L', 'U', 'C', 'H', 'I', 'R', 'E', 'T', 'C', 'H', 'I', 'R', 'O', 'N', 'C', 'H', 'R', 'I', 'V', 'I', 'C', 'H', 'R', 'O', 'M', 'A', 'C', 'H', 'U', 'R', 'C', 'H', 'C', 'I', 'N', 'E', 'M', 'A', 'C', 'I', 'R', 'C', 'L', 'E', 'C', 'I', 'R', 'C', 'U', 'S', 'C', 'L', 'E', 'F', '-', '1', 'C', 'L', 'E', 'F', '-', '2', 'C', 'L', 'I', 'V', 'I', 'S', 'C', 'L', 'O', 'S', 'E', 'D', 'C', 'L', 'O', 'S', 'E', 'T', 'C', 'L', 'O', 'V', 'E', 'R', 'C', 'O', 'F', 'F', 'I', 'N', 'C', 'O', 'L', 'U', 'M', 'N', 'C', 'O', 'M', 'I', 'N', 'G', 'C', 'O', 'M', 'M', 'O', 'N', 'C', 'O', 'O', 'K', 'E', 'D', 'C', 'O', 'O', 'K', 'I', 'E', 'C', 'O', 'P', 'P', 'E', 'R', 'C', 'O', 'P', 'T', 'I', 'C', 'C', 'O', 'R', 'N', 'E', 'R', 'C', 'O', 'R', 'P', 'S', 'E', 'C', 'O', 'U', 'P', 'L', 'E', 'C', 'O', 'W', 'B', 'O', 'Y', 'C', 'R', 'A', 'Y', 'O', 'N', 'C', 'R', 'E', 'D', 'I', 'T', 'C', 'R', 'O', 'C', 'U', 'S', 'C', 'R', 'Y', 'I', 'N', 'G', 'C', 'U', 'P', 'P', 'E', 'D', 'C', 'U', 'R', 'V', 'E', 'D', 'D', 'A', 'A', 'D', 'H', 'U', 'D', 'A', 'G', 'E', 'S', 'H', 'D', 'A', 'G', 'G', 'E', 'R', 'D', 'A', 'L', 'A', 'T', 'H', 'D', 'A', 'L', 'E', 'T', 'H', 'D', 'A', 'M', 'A', 'R', 'U', 'D', 'A', 'N', 'C', 'E', 'R', 'D', 'A', 'S', 'E', 'I', 'A', 'D', 'A', 'S', 'H', 'E', 'D', 'D', 'D', 'A', 'H', 'A', 'L', 'D', 'E', 'E', 'P', 'L', 'Y', 'D', 'E', 'G', 'R', 'E', 'E', 'D', 'E', 'L', 'E', 'T', 'E', 'D', 'E', 'N', 'N', 'E', 'N', 'D', 'E', 'N', 'T', 'A', 'L', 'D', 'E', 'S', 'E', 'R', 'T', 'D', 'E', 'S', 'I', 'G', 'N', 'D', 'E', 'V', 'I', 'C', 'E', 'D', 'H', 'A', 'A', 'L', 'U', 'D', 'H', 'A', 'D', 'H', 'E', 'D', 'H', 'A', 'R', 'M', 'A', 'D', 'I', 'E', 'S', 'E', 'L', 'D', 'I', 'E', 'S', 'I', 'S', 'D', 'I', 'G', 'I', 'T', 'S', 'D', 'I', 'G', 'R', 'A', 'M', 'D', 'I', 'P', 'P', 'E', 'R', 'D', 'I', 'R', 'E', 'C', 'T', 'D', 'I', 'V', 'I', 'D', 'E', 'D', 'J', 'E', 'R', 'V', 'I', 'D', 'O', 'K', 'M', 'A', 'I', 'D', 'O', 'L', 'I', 'U', 'M', 'D', 'O', 'L', 'L', 'A', 'R', 'D', 'O', 'M', 'A', 'I', 'N', 'D', 'O', 'M', 'I', 'N', 'O', 'D', 'O', 'T', 'S', '-', '1', 'D', 'O', 'T', 'S', '-', '2', 'D', 'O', 'T', 'S', '-', '3', 'D', 'O', 'T', 'S', '-', '4', 'D', 'O', 'T', 'S', '-', '5', 'D', 'O', 'T', 'S', '-', '6', 'D', 'O', 'T', 'S', '-', '7', 'D', 'O', 'T', 'S', '-', '8', 'D', 'O', 'T', 'T', 'E', 'D', 'D', 'O', 'U', 'B', 'L', 'E', 'D', 'R', 'A', 'G', 'O', 'N', 'D', 'R', 'E', 'A', 'M', 'Y', 'D', 'U', 'T', 'I', 'E', 'S', 'E', '-', 'M', 'A', 'I', 'L', 'E', 'I', 'G', 'H', 'T', 'H', 'E', 'I', 'G', 'H', 'T', 'Y', 'E', 'L', 'E', 'V', 'E', 'N', 'E', 'M', 'B', 'L', 'E', 'M', 'E', 'N', 'D', 'I', 'N', 'G', 'E', 'N', 'G', 'I', 'N', 'E', 'E', 'Q', 'U', 'A', 'L', 'S', 'E', 'S', 'C', 'A', 'P', 'E', 'E', 'T', 'E', 'R', 'O', 'N', 'E', 'X', 'C', 'E', 'S', 'S', 'E', 'X', 'H', 'A', 'L', 'E', 'E', 'X', 'I', 'S', 'T', 'S', 'E', 'Y', 'A', 'N', 'N', 'A', 'F', 'A', 'A', 'M', 'A', 'E', 'F', 'A', 'C', 'E', '-', '1', 'F', 'A', 'C', 'E', '-', '2', 'F', 'A', 'C', 'E', '-', '3', 'F', 'A', 'C', 'E', '-', '4', 'F', 'A', 'C', 'E', '-', '5', 'F', 'A', 'C', 'E', '-', '6', 'F', 'A', 'C', 'I', 'N', 'G', 'F', 'A', 'C', 'T', 'O', 'R', 'F', 'A', 'L', 'L', 'E', 'N', 'F', 'A', 'M', 'I', 'L', 'Y', 'F', 'A', 'T', 'H', 'E', 'R', 'F', 'E', 'M', 'A', 'L', 'E', 'F', 'E', 'N', 'C', 'E', 'R', 'F', 'E', 'R', 'R', 'I', 'S', 'F', 'H', 'T', 'O', 'R', 'A', 'F', 'I', 'F', 'T', 'H', 'S', 'F', 'I', 'G', 'U', 'R', 'E', 'F', 'I', 'L', 'L', 'E', 'D', 'F', 'I', 'L', 'L', 'E', 'R', 'F', 'I', 'N', 'G', 'E', 'R', 'F', 'I', 'N', 'I', 'T', 'E', 'F', 'I', 'S', 'T', 'E', 'D', 'F', 'L', 'A', 'G', '-', '1', 'F', 'L', 'A', 'G', '-', '2', 'F', 'L', 'A', 'G', '-', '3', 'F', 'L', 'A', 'G', '-', '4', 'F', 'L', 'A', 'G', '-', '5', 'F', 'L', 'E', 'X', 'E', 'D', 'F', 'L', 'E', 'X', 'U', 'S', 'F', 'L', 'I', 'G', 'H', 'T', 'F', 'L', 'O', 'P', 'P', 'Y', 'F', 'L', 'O', 'R', 'A', 'L', 'F', 'L', 'O', 'W', 'E', 'R', 'F', 'L', 'Y', 'I', 'N', 'G', 'F', 'O', 'L', 'D', 'E', 'D', 'F', 'O', 'L', 'D', 'E', 'R', 'F', 'O', 'R', 'C', 'E', 'S', 'F', 'O', 'R', 'K', 'E', 'D', 'F', 'O', 'R', 'M', 'A', 'T', 'F', 'O', 'U', 'R', 'T', 'H', 'F', 'R', 'A', 'M', 'E', 'S', 'F', 'R', 'A', 'N', 'K', 'S', 'F', 'R', 'E', 'N', 'C', 'H', 'F', 'T', 'H', 'O', 'R', 'A', 'G', 'A', 'N', 'G', 'I', 'A', 'G', 'A', 'P', 'P', 'E', 'D', 'G', 'A', 'R', 'D', 'E', 'N', 'G', 'A', 'S', 'H', 'A', 'N', 'G', 'E', 'D', 'O', 'L', 'A', 'G', 'E', 'M', 'I', 'N', 'I', 'G', 'E', 'N', 'I', 'K', 'I', 'G', 'E', 'N', 'T', 'L', 'E', 'G', 'E', 'R', 'E', 'S', 'H', 'G', 'E', 'R', 'M', 'A', 'N', 'G', 'H', 'A', 'I', 'N', 'U', 'G', 'H', 'A', 'M', 'A', 'L', 'G', 'H', 'A', 'M', 'M', 'A', 'G', 'H', 'A', 'R', 'A', 'E', 'G', 'H', 'E', 'U', 'A', 'E', 'G', 'H', 'I', 'M', 'E', 'L', 'G', 'H', 'U', 'N', 'N', 'A', 'G', 'L', 'E', 'I', 'C', 'H', 'G', 'O', 'B', 'L', 'I', 'N', 'G', 'O', 'L', 'F', 'E', 'R', 'G', 'O', 'R', 'G', 'O', 'N', 'G', 'O', 'T', 'H', 'I', 'C', 'G', 'R', 'A', 'M', 'M', 'A', 'G', 'R', 'A', 'P', 'E', 'S', 'G', 'R', 'A', 'T', 'E', 'R', 'G', 'R', 'O', 'U', 'N', 'D', 'G', 'U', 'I', 'T', 'A', 'R', 'G', 'U', 'R', 'A', 'M', 'U', 'G', 'U', 'R', 'U', 'S', 'H', 'H', '-', 'T', 'Y', 'P', 'E', 'H', 'A', 'F', 'U', 'K', 'H', 'H', 'A', 'G', 'L', 'A', 'Z', 'H', 'A', 'M', 'M', 'E', 'R', 'H', 'A', 'N', 'D', 'L', 'E', 'H', 'A', 'N', 'G', 'U', 'L', 'H', 'A', 'T', 'R', 'A', 'N', 'H', 'E', 'A', 'D', 'E', 'D', 'H', 'E', 'A', 'R', 'T', 'S', 'H', 'E', 'A', 'V', 'E', 'N', 'H', 'E', 'B', 'R', 'E', 'W', 'H', 'E', 'I', 'G', 'H', 'T', 'H', 'E', 'I', 'S', 'E', 'I', 'H', 'E', 'L', 'M', 'E', 'T', 'H', 'E', 'R', 'M', 'E', 'S', 'H', 'E', 'R', 'U', 'T', 'U', 'H', 'I', '-', 'R', 'E', 'S', 'H', 'I', 'D', 'I', 'N', 'G', 'H', 'I', 'N', 'G', 'E', 'D', 'H', 'O', 'C', 'K', 'E', 'Y', 'H', 'O', 'L', 'L', 'O', 'W', 'H', 'O', 'O', 'K', 'E', 'D', 'H', 'U', 'I', 'I', 'T', 'O', 'H', 'U', 'S', 'H', 'E', 'D', 'H', 'Y', 'P', 'H', 'E', 'N', 'I', '-', 'B', 'E', 'A', 'M', 'I', '-', 'Y', 'A', '-', 'O', 'I', 'L', 'I', 'M', 'M', 'U', 'I', 'N', 'D', 'I', 'A', 'N', 'I', 'N', 'G', 'W', 'A', 'Z', 'I', 'N', 'H', 'A', 'L', 'E', 'I', 'N', 'I', 'N', 'G', 'U', 'I', 'N', 'S', 'E', 'C', 'T', 'I', 'N', 'S', 'I', 'D', 'E', 'I', 'S', 'A', 'K', 'I', 'A', 'I', 'S', 'L', 'A', 'N', 'D', 'I', 'S', 'S', 'H', 'A', 'R', 'I', 'T', 'A', 'L', 'I', 'C', 'I', 'Y', 'A', 'N', 'N', 'A', 'J', 'H', 'A', 'Y', 'I', 'N', 'J', 'O', 'I', 'N', 'E', 'D', 'J', 'O', 'I', 'N', 'E', 'R', 'J', 'O', 'I', 'N', 'T', 'S', 'J', 'O', 'Y', 'O', 'U', 'S', 'K', 'A', 'I', 'T', 'H', 'I', 'K', 'A', 'N', 'A', 'K', 'O', 'K', 'A', 'N', 'G', 'X', 'I', 'K', 'A', 'S', 'K', 'A', 'L', 'K', 'A', 'T', 'A', 'V', 'A', 'K', 'A', 'V', 'Y', 'K', 'A', 'K', 'A', 'Z', 'A', 'K', 'H', 'K', 'E', 'F', 'U', 'L', 'A', 'K', 'E', 'L', 'V', 'I', 'N', 'K', 'E', 'M', 'P', 'L', 'I', 'K', 'E', 'M', 'P', 'U', 'L', 'K', 'E', 'U', 'A', 'E', 'M', 'K', 'E', 'U', 'K', 'A', 'Q', 'K', 'E', 'U', 'P', 'U', 'Q', 'K', 'E', 'Y', 'C', 'A', 'P', 'K', 'H', 'A', 'M', 'T', 'I', 'K', 'H', 'A', 'N', 'D', 'A', 'K', 'H', 'O', 'J', 'K', 'I', 'K', 'H', 'O', 'M', 'U', 'T', 'K', 'H', 'U', 'D', 'A', 'M', 'K', 'I', 'E', 'V', 'A', 'N', 'K', 'I', 'L', 'L', 'E', 'R', 'K', 'I', 'M', 'O', 'N', 'O', 'K', 'I', 'S', 'I', 'M', '5', 'K', 'I', 'Y', 'E', 'O', 'K', 'K', 'L', 'A', 'S', 'M', 'A', 'K', 'L', 'I', 'T', 'O', 'N', 'K', 'N', 'I', 'G', 'H', 'T', 'K', 'O', 'G', 'H', 'O', 'M', 'K', 'O', 'R', 'E', 'A', 'N', 'K', 'O', 'R', 'U', 'N', 'A', 'K', 'P', 'A', 'R', 'A', 'Q', 'K', 'U', 'S', 'H', 'U', '2', 'K', 'W', 'U', '3', '1', '8', 'K', 'Y', 'U', 'R', 'I', 'I', 'L', '-', 'T', 'Y', 'P', 'E', 'L', 'A', 'A', 'N', 'A', 'E', 'L', 'A', 'B', 'I', 'A', 'L', 'L', 'A', 'H', 'S', 'H', 'U', 'L', 'A', 'M', 'A', 'D', 'H', 'L', 'A', 'M', 'B', 'D', 'A', 'L', 'A', 'M', 'E', 'D', 'H', 'L', 'A', 'R', 'G', 'E', 'R', 'L', 'A', 'U', 'K', 'A', 'Z', 'L', 'E', 'A', 'D', 'E', 'R', 'L', 'E', 'D', 'G', 'E', 'R', 'L', 'E', 'G', 'I', 'O', 'N', 'L', 'E', 'I', 'M', 'M', 'A', 'L', 'E', 'N', 'G', 'T', 'H', 'L', 'E', 'P', 'C', 'H', 'A', 'L', 'E', 'S', 'S', 'E', 'R', 'L', 'E', 'T', 'T', 'E', 'R', 'L', 'E', 'U', 'A', 'E', 'M', 'L', 'E', 'U', 'A', 'E', 'P', 'L', 'I', 'F', 'T', 'E', 'R', 'L', 'I', 'L', 'I', 'T', 'H', 'L', 'I', 'M', 'M', 'U', '2', 'L', 'I', 'M', 'M', 'U', '4', 'L', 'I', 'N', 'E', '-', '1', 'L', 'I', 'N', 'E', '-', '3', 'L', 'I', 'N', 'E', '-', '7', 'L', 'I', 'N', 'E', '-', '9', 'L', 'I', 'N', 'E', 'A', 'R', 'L', 'I', 'N', 'G', 'S', 'A', 'L', 'I', 'N', 'K', 'E', 'D', 'L', 'I', 'Q', 'U', 'I', 'D', 'L', 'I', 'T', 'T', 'E', 'R', 'L', 'I', 'T', 'T', 'L', 'E', 'L', 'I', 'Z', 'A', 'R', 'D', 'L', 'O', 'M', 'M', 'A', 'E', 'L', 'O', 'N', 'S', 'U', 'M', 'L', 'O', 'O', 'P', 'E', 'D', 'L', 'O', 'U', 'D', 'L', 'Y', 'L', 'U', 'N', 'A', 'T', 'E', 'L', 'U', 'N', 'G', 'S', 'I', 'L', 'Y', 'C', 'I', 'A', 'N', 'L', 'Y', 'D', 'I', 'A', 'N', 'M', 'A', 'C', 'R', 'O', 'N', 'M', 'A', 'D', 'D', 'A', 'H', 'M', 'A', 'E', 'L', 'E', 'E', 'M', 'A', 'E', 'M', 'B', 'A', 'M', 'A', 'E', 'N', 'Y', 'I', 'M', 'A', 'I', 'D', 'E', 'N', 'M', 'A', 'N', 'C', 'H', 'U', 'M', 'A', 'N', 'N', 'A', 'Z', 'M', 'A', 'R', 'K', '-', '1', 'M', 'A', 'R', 'K', '-', '2', 'M', 'A', 'R', 'K', '-', '3', 'M', 'A', 'R', 'K', '-', '4', 'M', 'A', 'R', 'K', 'E', 'R', 'M', 'A', 'R', 'U', 'K', 'U', 'M', 'A', 'S', 'O', 'R', 'A', 'M', 'A', 'T', 'R', 'I', 'X', 'M', 'A', 'X', 'I', 'M', 'A', 'M', 'B', 'A', 'N', 'Y', 'I', 'M', 'B', 'E', 'R', 'A', 'E', 'M', 'B', 'E', 'U', 'R', 'I', 'M', 'B', 'U', 'A', 'E', 'M', 'M', 'E', 'D', 'I', 'A', 'L', 'M', 'E', 'D', 'I', 'U', 'M', 'M', 'E', 'E', 'T', 'E', 'I', 'M', 'E', 'G', 'A', 'L', 'I', 'M', 'E', 'M', 'B', 'E', 'R', 'M', 'E', 'N', 'D', 'U', 'T', 'M', 'E', 'R', 'K', 'H', 'A', 'M', 'E', 'T', 'R', 'I', 'A', 'M', 'F', 'E', 'U', 'A', 'E', 'M', 'F', 'I', 'Y', 'A', 'Q', 'M', 'G', 'B', 'A', 'S', 'A', 'M', 'G', 'B', 'E', 'U', 'N', 'M', 'G', 'B', 'I', 'E', 'E', 'M', 'I', 'D', 'D', 'L', 'E', 'M', 'I', 'K', 'R', 'O', 'N', 'M', 'I', 'L', 'L', 'E', 'T', 'M', 'I', 'N', 'I', 'M', 'A', 'M', 'O', 'B', 'I', 'L', 'E', 'M', 'O', 'D', 'E', 'L', 'S', 'M', 'O', 'D', 'E', 'R', 'N', 'M', 'O', 'D', 'U', 'L', 'O', 'M', 'O', 'N', 'K', 'E', 'Y', 'M', 'O', 'R', 'T', 'A', 'R', 'M', 'O', 'S', 'Q', 'U', 'E', 'M', 'O', 'T', 'H', 'E', 'R', 'M', 'U', 'C', 'A', 'A', 'D', 'M', 'U', 'N', 'S', 'U', 'B', 'M', 'U', 'O', 'M', 'A', 'E', 'M', 'U', 'Q', 'D', 'A', 'M', 'M', 'U', 'R', 'G', 'U', '2', 'N', '-', 'C', 'R', 'E', 'E', 'N', 'A', 'R', 'R', 'O', 'W', 'N', 'A', 'U', 'D', 'I', 'Z', 'N', 'A', 'U', 'T', 'H', 'S', 'N', 'A', 'X', 'I', 'A', 'N', 'N', 'D', 'O', 'M', 'B', 'U', 'N', 'E', 'N', 'A', 'N', 'O', 'N', 'E', 'S', 'T', 'E', 'D', 'N', 'E', 'U', 'T', 'E', 'R', 'N', 'G', 'A', 'N', 'G', 'U', 'N', 'G', 'G', 'A', 'A', 'M', 'N', 'G', 'G', 'E', 'E', 'T', 'N', 'G', 'G', 'E', 'U', 'X', 'N', 'G', 'G', 'U', 'O', 'M', 'N', 'G', 'G', 'U', 'O', 'N', 'N', 'G', 'G', 'U', 'O', 'Q', 'N', 'G', 'K', 'E', 'U', 'X', 'N', 'G', 'K', 'I', 'E', 'E', 'N', 'G', 'K', 'Y', 'E', 'E', 'N', 'G', 'U', 'A', 'E', 'T', 'N', 'I', 'N', 'D', 'A', '2', 'N', 'I', 'N', 'E', 'T', 'Y', 'N', 'I', 'R', 'U', 'G', 'U', 'N', 'J', 'E', 'E', 'E', 'E', 'N', 'K', 'I', 'N', 'D', 'I', 'N', 'L', '0', '0', '5', 'A', 'N', 'L', '0', '1', '7', 'A', 'N', 'O', 'K', 'H', 'U', 'K', 'N', 'O', 'R', 'D', 'I', 'C', 'N', 'O', 'R', 'M', 'A', 'L', 'N', 'S', 'H', 'I', 'E', 'E', 'N', 'S', 'H', 'U', 'E', 'T', 'N', 'S', 'H', 'U', 'O', 'P', 'N', 'S', 'I', 'E', 'E', 'P', 'N', 'S', 'I', 'E', 'E', 'T', 'N', 'U', '0', '1', '0', 'A', 'N', 'U', '0', '1', '1', 'A', 'N', 'U', '0', '1', '8', 'A', 'N', 'U', '0', '2', '2', 'A', 'N', 'U', 'B', 'I', 'A', 'N', 'N', 'U', 'M', 'B', 'E', 'R', 'N', 'U', 'M', 'E', 'R', 'O', 'O', 'B', 'E', 'L', 'O', 'S', 'O', 'B', 'E', 'L', 'U', 'S', 'O', 'B', 'J', 'E', 'C', 'T', 'O', 'C', 'L', 'O', 'C', 'K', 'O', 'F', 'F', 'I', 'C', 'E', 'O', 'G', 'O', 'N', 'E', 'K', 'O', 'L', 'I', 'G', 'O', 'N', 'O', 'M', 'A', 'L', 'O', 'N', 'O', 'N', '-', 'O', 'F', 'F', 'O', 'P', 'E', 'N', '-', 'O', 'O', 'P', 'E', 'N', '-', 'P', 'O', 'P', 'P', 'O', 'S', 'E', 'O', 'P', 'T', 'I', 'O', 'N', 'O', 'R', 'A', 'N', 'G', 'E', 'O', 'R', 'C', 'H', 'I', 'D', 'O', 'R', 'I', 'G', 'I', 'N', 'O', 'R', 'K', 'H', 'O', 'N', 'O', 'R', 'N', 'A', 'T', 'E', 'O', 'T', 'H', 'E', 'R', 'S', 'O', 'T', 'T', 'A', 'V', 'A', 'O', 'U', 'N', 'K', 'I', 'A', 'O', 'U', 'T', 'B', 'O', 'X', 'O', 'X', 'E', 'I', 'A', 'I', 'O', 'Y', 'A', 'N', 'N', 'A', 'P', 'A', 'A', 'R', 'A', 'E', 'P', 'A', 'D', 'D', 'L', 'E', 'P', 'A', 'H', 'A', 'W', 'H', 'P', 'A', 'I', 'R', 'E', 'D', 'P', 'A', 'K', 'P', 'A', 'K', 'P', 'A', 'L', 'L', 'A', 'S', 'P', 'A', 'L', 'U', 'T', 'A', 'P', 'A', 'M', 'A', 'D', 'A', 'P', 'A', 'S', 'H', 'A', 'E', 'P', 'A', 'S', 'H', 'T', 'A', 'P', 'E', 'E', 'S', 'H', 'I', 'P', 'E', 'N', 'C', 'I', 'L', 'P', 'E', 'N', 'I', 'H', 'I', 'P', 'E', 'O', 'P', 'L', 'E', 'P', 'E', 'O', 'R', 'T', 'H', 'P', 'E', 'P', 'P', 'E', 'R', 'P', 'E', 'R', 'M', 'I', 'C', 'P', 'E', 'R', 'N', 'I', 'N', 'P', 'E', 'R', 'S', 'O', 'N', 'P', 'E', 'R', 'T', 'H', 'O', 'P', 'E', 'S', 'E', 'T', 'A', 'P', 'E', 'U', 'T', 'A', 'E', 'P', 'H', 'N', 'A', 'E', 'K', 'P', 'H', 'O', 'N', 'E', 'S', 'P', 'H', 'R', 'A', 'S', 'E', 'P', 'I', 'A', 'S', 'M', 'A', 'P', 'I', 'C', 'K', 'E', 'T', 'P', 'I', 'K', 'U', 'R', 'U', 'P', 'I', 'P', 'I', 'N', 'G', 'P', 'I', 'R', 'A', 'C', 'Y', 'P', 'I', 'S', 'C', 'E', 'S', 'P', 'I', 'S', 'T', 'O', 'L', 'P', 'L', 'A', 'N', 'C', 'K', 'P', 'L', 'O', 'P', 'H', 'U', 'P', 'L', 'U', 'M', 'E', 'D', 'P', 'L', 'U', 'R', 'A', 'L', 'P', 'O', 'C', 'K', 'E', 'T', 'P', 'O', 'E', 'T', 'I', 'C', 'P', 'O', 'E', 'T', 'R', 'Y', 'P', 'O', 'I', 'N', 'T', 'O', 'P', 'O', 'I', 'N', 'T', 'S', 'P', 'O', 'K', 'O', 'J', 'I', 'P', 'O', 'L', 'I', 'C', 'E', 'P', 'O', 'L', 'I', 'S', 'H', 'P', 'O', 'M', 'M', 'E', 'E', 'P', 'O', 'O', 'D', 'L', 'E', 'P', 'O', 'P', 'P', 'E', 'R', 'P', 'O', 'S', 'T', 'A', 'L', 'P', 'O', 'T', 'A', 'T', 'O', 'P', 'O', 'W', 'D', 'E', 'R', 'P', 'O', 'W', 'E', 'R', 'S', 'P', 'R', 'A', 'Y', 'E', 'R', 'P', 'R', 'I', 'N', 'C', 'E', 'P', 'R', 'I', 'N', 'T', 'S', 'P', 'R', 'O', 'T', 'O', 'S', 'P', 'S', 'I', 'L', 'O', 'N', 'P', 'T', 'H', 'A', 'H', 'A', 'P', 'U', 'B', 'L', 'I', 'C', 'P', 'U', 'F', 'F', 'E', 'D', 'P', 'U', 'R', 'I', 'F', 'Y', 'P', 'U', 'R', 'I', 'T', 'Y', 'P', 'U', 'R', 'P', 'L', 'E', 'Q', 'A', 'M', 'A', 'T', 'S', 'Q', 'A', 'R', 'N', 'E', 'Y', 'Q', 'E', 'T', 'A', 'N', 'A', 'Q', 'U', 'B', 'U', 'T', 'S', 'R', '-', 'C', 'R', 'E', 'E', 'R', 'A', 'B', 'B', 'I', 'T', 'R', 'A', 'C', 'I', 'N', 'G', 'R', 'A', 'I', 'S', 'E', 'D', 'R', 'A', 'M', 'B', 'A', 'T', 'R', 'A', 'S', 'O', 'U', 'L', 'R', 'E', 'C', 'O', 'R', 'D', 'R', 'E', 'J', 'A', 'N', 'G', 'R', 'E', 'M', 'E', 'D', 'Y', 'R', 'E', 'P', 'E', 'A', 'T', 'R', 'E', 'T', 'O', 'R', 'T', 'R', 'E', 'T', 'U', 'R', 'N', 'R', 'H', 'O', 'T', 'I', 'C', 'R', 'I', 'B', 'B', 'O', 'N', 'R', 'I', 'K', 'R', 'I', 'K', 'R', 'I', 'M', 'G', 'B', 'A', 'R', 'I', 'P', 'P', 'L', 'E', 'R', 'I', 'S', 'I', 'N', 'G', 'R', 'I', 'T', 'U', 'A', 'L', 'R', 'N', 'Y', 'I', 'N', 'G', 'R', 'O', 'C', 'K', 'E', 'T', 'R', 'O', 'L', 'L', 'E', 'R', 'R', 'T', 'H', 'A', 'N', 'G', 'R', 'U', 'N', 'N', 'E', 'R', 'R', 'U', 'N', 'O', 'U', 'T', 'S', 'A', 'A', 'D', 'H', 'U', 'S', 'A', 'F', 'E', 'T', 'Y', 'S', 'A', 'J', 'D', 'A', 'H', 'S', 'A', 'L', 'T', '-', '2', 'S', 'A', 'M', 'E', 'K', 'H', 'S', 'A', 'M', 'V', 'A', 'T', 'S', 'A', 'M', 'Y', 'O', 'K', 'S', 'A', 'N', 'D', 'A', 'L', 'S', 'A', 'N', 'D', 'H', 'I', 'S', 'A', 'N', 'G', 'A', '2', 'S', 'A', 'N', 'N', 'Y', 'A', 'S', 'A', 'T', 'U', 'R', 'N', 'S', 'A', 'Y', 'I', 'S', 'I', 'S', 'C', 'A', 'L', 'E', 'S', 'S', 'C', 'H', 'E', 'M', 'A', 'S', 'C', 'H', 'O', 'O', 'L', 'S', 'C', 'R', 'E', 'E', 'N', 'S', 'C', 'R', 'I', 'P', 'T', 'S', 'C', 'R', 'O', 'L', 'L', 'S', 'E', 'C', 'A', 'N', 'T', 'S', 'E', 'C', 'O', 'N', 'D', 'S', 'E', 'C', 'R', 'E', 'T', 'S', 'E', 'C', 'T', 'O', 'R', 'S', 'E', 'I', 'S', 'M', 'A', 'S', 'E', 'L', 'F', 'I', 'E', 'S', 'E', 'R', 'I', 'F', 'S', 'S', 'E', 'S', 'A', 'M', 'E', 'S', 'E', 'T', 'F', 'O', 'N', 'S', 'E', 'U', 'A', 'E', 'Q', 'S', 'H', 'A', 'D', 'D', 'A', 'S', 'H', 'A', 'D', 'E', 'D', 'S', 'H', 'A', 'K', 'T', 'I', 'S', 'H', 'A', 'P', 'E', 'S', 'S', 'H', 'A', 'V', 'E', 'D', 'S', 'H', 'E', 'E', 'N', 'U', 'S', 'H', 'E', 'Q', 'E', 'L', 'S', 'H', 'E', 'S', 'H', '2', 'S', 'H', 'E', 'U', 'A', 'E', 'S', 'H', 'E', 'U', 'O', 'Q', 'S', 'H', 'I', 'E', 'L', 'D', 'S', 'H', 'I', 'N', 'D', 'A', 'S', 'H', 'I', 'N', 'I', 'G', 'S', 'H', 'I', 'N', 'T', 'O', 'S', 'H', 'I', 'R', 'A', 'E', 'S', 'H', 'O', 'R', 'T', 'S', 'S', 'H', 'O', 'W', 'E', 'R', 'S', 'H', 'R', 'I', 'M', 'P', 'S', 'H', 'R', 'I', 'N', 'E', 'S', 'H', 'U', 'B', 'U', 'R', 'S', 'I', 'C', 'K', 'L', 'E', 'S', 'I', 'D', 'D', 'H', 'I', 'S', 'I', 'L', 'V', 'E', 'R', 'S', 'I', 'N', 'D', 'H', 'I', 'S', 'I', 'N', 'G', 'L', 'E', 'S', 'I', 'X', 'T', 'H', 'S', 'S', 'K', 'E', 'W', 'E', 'D', 'S', 'L', 'E', 'E', 'P', 'Y', 'S', 'L', 'E', 'U', 'T', 'H', 'S', 'L', 'I', 'D', 'E', 'R', 'S', 'L', 'O', 'W', 'L', 'Y', 'S', 'O', 'C', 'C', 'E', 'R', 'S', 'O', 'N', 'J', 'A', 'M', 'S', 'O', 'U', 'N', 'A', 'P', 'S', 'O', 'U', 'R', 'C', 'E', 'S', 'O', 'W', 'I', 'L', 'O', 'S', 'P', 'A', 'D', 'E', 'S', 'S', 'P', 'A', 'T', 'H', 'I', 'S', 'P', 'E', 'E', 'C', 'H', 'S', 'P', 'I', 'D', 'E', 'R', 'S', 'P', 'I', 'R', 'A', 'L', 'S', 'P', 'I', 'R', 'I', 'T', 'S', 'P', 'O', 'K', 'E', 'D', 'S', 'P', 'O', 'R', 'T', 'S', 'S', 'P', 'R', 'E', 'A', 'D', 'S', 'P', 'R', 'I', 'N', 'G', 'S', 'P', 'R', 'O', 'U', 'T', 'S', 'P', 'U', 'N', 'G', 'S', 'S', 'Q', 'U', 'A', 'R', 'E', 'S', 'Q', 'U', 'I', 'S', 'H', 'S', 'T', 'A', 'T', 'U', 'E', 'S', 'T', 'E', 'R', 'E', 'O', 'S', 'T', 'I', 'G', 'M', 'A', 'S', 'T', 'I', 'M', 'M', 'E', 'S', 'T', 'R', 'A', 'I', 'F', 'S', 'T', 'R', 'E', 'S', 'S', 'S', 'T', 'R', 'I', 'D', 'E', 'S', 'T', 'R', 'I', 'K', 'E', 'S', 'T', 'R', 'I', 'P', 'E', 'S', 'T', 'R', 'O', 'K', 'E', 'S', 'T', 'R', 'O', 'N', 'G', 'S', 'T', 'U', 'D', 'I', 'O', 'S', 'U', 'B', 'I', 'T', 'O', 'S', 'U', 'B', 'S', 'E', 'T', 'S', 'U', 'C', 'K', 'E', 'D', 'S', 'U', 'L', 'F', 'U', 'R', 'S', 'U', 'M', 'A', 'S', 'H', 'S', 'U', 'M', 'M', 'E', 'R', 'S', 'U', 'N', 'S', 'E', 'T', 'S', 'U', 'R', 'A', 'N', 'G', 'S', 'U', 'R', 'F', 'E', 'R', 'S', 'V', 'A', 'S', 'T', 'I', 'S', 'W', 'O', 'R', 'D', 'S', 'S', 'Y', 'L', 'O', 'T', 'I', 'S', 'Y', 'M', 'B', 'O', 'L', 'S', 'Y', 'N', 'A', 'F', 'I', 'S', 'Y', 'O', 'U', 'W', 'A', 'S', 'Y', 'R', 'I', 'A', 'C', 'T', 'A', '-', 'R', 'O', 'L', 'T', 'A', 'I', 'L', 'E', 'D', 'T', 'A', 'L', 'E', 'N', 'T', 'T', 'A', 'L', 'I', 'N', 'G', 'T', 'A', 'M', 'I', 'N', 'G', 'T', 'A', 'N', 'G', 'U', 'T', 'T', 'A', 'N', 'N', 'E', 'D', 'T', 'A', 'R', 'G', 'E', 'T', 'T', 'A', 'R', 'T', 'A', 'R', 'T', 'A', 'R', 'U', 'N', 'G', 'T', 'A', 'U', 'R', 'U', 'S', 'T', 'E', 'A', 'C', 'U', 'P', 'T', 'E', 'D', 'U', 'N', 'G', 'T', 'E', 'L', 'E', 'I', 'A', 'T', 'E', 'L', 'L', 'E', 'R', 'T', 'E', 'L', 'O', 'U', 'S', 'T', 'E', 'L', 'U', 'G', 'U', 'T', 'E', 'M', 'P', 'U', 'S', 'T', 'E', 'N', 'N', 'I', 'S', 'T', 'E', 'N', 'U', 'T', 'O', 'T', 'E', 'U', 'A', 'E', 'N', 'T', 'E', 'U', 'A', 'E', 'Q', 'T', 'H', 'A', 'A', 'L', 'U', 'T', 'H', 'A', 'A', 'N', 'A', 'T', 'H', 'A', 'H', 'A', 'N', 'T', 'H', 'A', 'N', 'N', 'A', 'T', 'H', 'E', 'T', 'H', 'E', 'T', 'H', 'I', 'R', 'D', 'S', 'T', 'H', 'I', 'R', 'T', 'Y', 'T', 'H', 'I', 'U', 'T', 'H', 'T', 'H', 'R', 'E', 'A', 'D', 'T', 'H', 'U', 'M', 'B', 'S', 'T', 'H', 'Y', 'O', 'O', 'M', 'T', 'I', 'C', 'K', 'E', 'T', 'T', 'I', 'K', 'E', 'U', 'T', 'T', 'I', 'P', 'E', 'H', 'A', 'T', 'I', 'R', 'Y', 'A', 'K', 'T', 'O', 'I', 'L', 'E', 'T', 'T', 'O', 'L', 'O', 'N', 'G', 'T', 'O', 'M', 'A', 'T', 'O', 'T', 'O', 'N', 'E', '-', '1', 'T', 'O', 'N', 'E', '-', '2', 'T', 'O', 'N', 'E', '-', '3', 'T', 'O', 'N', 'E', '-', '4', 'T', 'O', 'N', 'E', '-', '5', 'T', 'O', 'N', 'E', '-', '6', 'T', 'O', 'N', 'E', '-', '7', 'T', 'O', 'N', 'E', '-', '8', 'T', 'O', 'N', 'G', 'U', 'E', 'T', 'O', 'P', 'B', 'A', 'R', 'T', 'R', 'I', 'P', 'L', 'E', 'T', 'R', 'I', 'P', 'L', 'I', 'T', 'R', 'I', 'P', 'O', 'D', 'T', 'R', 'I', 'T', 'O', 'S', 'T', 'R', 'O', 'P', 'H', 'Y', 'T', 'S', 'H', 'E', 'E', 'J', 'T', 'S', 'H', 'O', 'O', 'J', 'T', 'S', 'H', 'O', 'O', 'K', 'T', 'S', 'H', 'U', 'G', 'S', 'T', 'T', 'E', 'H', 'E', 'H', 'T', 'U', 'A', 'R', 'E', 'G', 'T', 'U', 'G', 'R', 'I', 'K', 'T', 'U', 'R', 'B', 'A', 'N', 'T', 'U', 'R', 'K', 'E', 'Y', 'T', 'U', 'R', 'K', 'I', 'C', 'T', 'U', 'R', 'N', 'E', 'D', 'T', 'U', 'R', 'T', 'L', 'E', 'T', 'U', 'X', 'E', 'D', 'O', 'T', 'V', 'R', 'I', 'D', 'O', 'T', 'W', 'E', 'L', 'V', 'E', 'T', 'W', 'E', 'N', 'T', 'Y', 'T', 'W', 'O', '-', 'E', 'M', 'T', 'X', 'H', 'E', 'E', 'J', 'T', 'Y', 'P', 'E', '-', '1', 'T', 'Y', 'P', 'E', '-', '2', 'T', 'Y', 'P', 'E', '-', '3', 'T', 'Y', 'P', 'E', '-', '4', 'T', 'Y', 'P', 'E', '-', '5', 'T', 'Y', 'P', 'E', '-', '6', 'T', 'Y', 'P', 'E', '-', '7', 'U', 'D', 'A', 'T', 'T', 'A', 'U', 'I', 'G', 'H', 'U', 'R', 'U', 'P', 'T', 'U', 'R', 'N', 'U', 'P', 'W', 'A', 'R', 'D', 'U', 'R', 'A', 'N', 'U', 'S', 'U', 'S', 'H', 'U', 'M', 'X', 'U', 'Y', 'A', 'N', 'N', 'A', 'V', 'A', 'L', 'L', 'E', 'Y', 'V', 'A', 'R', 'E', 'I', 'A', 'V', 'A', 'R', 'I', 'K', 'A', 'V', 'E', 'C', 'T', 'O', 'R', 'V', 'E', 'S', 'S', 'E', 'L', 'V', 'I', 'D', 'J', '-', '2', 'V', 'I', 'O', 'L', 'I', 'N', 'V', 'I', 'R', 'A', 'M', 'A', 'V', 'I', 'R', 'I', 'A', 'M', 'V', 'O', 'I', 'C', 'E', 'D', 'V', 'O', 'L', 'U', 'M', 'E', 'V', 'R', 'A', 'C', 'H', 'Y', 'V', 'U', 'L', 'G', 'A', 'R', 'W', 'A', 'N', 'I', 'N', 'G', 'W', 'A', 'R', 'A', 'N', 'G', 'W', 'A', 'V', 'I', 'N', 'G', 'W', 'A', 'X', 'I', 'N', 'G', 'W', 'E', 'A', 'P', 'O', 'N', 'W', 'E', 'I', 'G', 'H', 'T', 'W', 'I', 'G', 'G', 'L', 'Y', 'W', 'I', 'L', 'T', 'E', 'D', 'W', 'I', 'N', 'D', 'O', 'W', 'W', 'I', 'N', 'T', 'E', 'R', 'W', 'I', 'T', 'H', 'I', 'N', 'W', 'O', 'L', 'O', 'S', 'O', 'W', 'O', 'M', 'A', 'N', 'S', 'W', 'O', 'M', 'E', 'N', 'S', 'W', 'O', 'R', 'K', 'E', 'R', 'W', 'R', 'E', 'A', 'T', 'H', 'W', 'R', 'E', 'N', 'C', 'H', 'X', 'E', 'S', 'T', 'E', 'S', 'Y', '-', 'C', 'R', 'E', 'E', 'Y', 'A', 'K', 'A', 'S', 'H', 'Y', 'E', 'L', 'L', 'O', 'W', 'Y', 'E', 'O', '-', 'Y', 'A', 'Y', 'E', 'U', 'A', 'E', 'T', 'Y', 'E', 'U', 'R', 'A', 'E', 'Y', 'F', 'E', 'S', 'I', 'S', 'Y', 'O', '-', 'Y', 'A', 'E', 'Y', 'O', '-', 'Y', 'E', 'O', 'Y', 'P', 'S', 'I', 'L', 'I', 'Y', 'U', '-', 'Y', 'E', 'O', 'Z', 'E', 'M', 'L', 'J', 'A', 'Z', 'E', 'M', 'L', 'Y', 'A', 'Z', 'H', 'A', 'Y', 'I', 'N', 'Z', 'I', 'G', 'Z', 'A', 'G', 'Z', 'Q', 'A', 'P', 'H', 'A', 'Z', 'W', 'N', 'B', 'S', 'P', 'A', 'A', 'Y', 'A', 'N', 'N', 'A', 'A', 'B', 'A', 'F', 'I', 'L', 'I', 'A', 'B', 'Y', 'S', 'M', 'A', 'L', 'A', 'C', 'A', 'D', 'E', 'M', 'Y', 'A', 'C', 'C', 'O', 'U', 'N', 'T', 'A', 'D', 'D', 'R', 'E', 'S', 'S', 'A', 'D', 'V', 'A', 'N', 'C', 'E', 'A', 'E', 'Y', 'A', 'N', 'N', 'A', 'A', 'F', 'G', 'H', 'A', 'N', 'I', 'A', 'F', 'R', 'I', 'C', 'A', 'N', 'A', 'G', 'A', 'I', 'N', 'S', 'T', 'A', 'H', 'A', 'G', 'G', 'A', 'R', 'A', 'I', 'V', 'I', 'L', 'I', 'K', 'A', 'I', 'Y', 'A', 'N', 'N', 'A', 'A', 'L', 'E', 'M', 'B', 'I', 'C', 'A', 'L', 'I', 'G', 'N', 'E', 'D', 'A', 'L', 'L', 'A', 'H', 'O', 'U', 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'A', 'M', 'P', 'H', 'O', 'R', 'A', 'A', 'N', '-', 'N', 'I', 'S', 'F', 'A', 'N', 'G', 'U', 'L', 'A', 'R', 'A', 'N', 'N', 'U', 'I', 'T', 'Y', 'A', 'N', 'T', 'E', 'N', 'N', 'A', 'A', 'P', 'O', 'T', 'H', 'E', 'S', 'A', 'R', 'A', 'B', 'I', 'A', 'N', 'A', 'R', 'A', 'E', 'A', '-', 'A', 'A', 'R', 'A', 'E', 'A', '-', 'E', 'A', 'R', 'A', 'E', 'A', '-', 'I', 'A', 'R', 'A', 'E', 'A', '-', 'U', 'A', 'R', 'A', 'M', 'A', 'I', 'C', 'A', 'R', 'C', 'H', 'A', 'I', 'C', 'A', 'R', 'K', 'A', 'A', 'N', 'U', 'A', 'R', 'K', 'T', 'I', 'K', 'O', 'A', 'R', 'S', 'E', 'N', 'I', 'C', 'A', 'U', 'S', 'T', 'R', 'A', 'L', 'A', 'U', 'Y', 'A', 'N', 'N', 'A', 'A', 'V', 'E', 'R', 'A', 'G', 'E', 'A', 'V', 'E', 'S', 'T', 'A', 'N', 'A', 'V', 'O', 'C', 'A', 'D', 'O', 'B', 'A', 'A', 'R', 'E', 'R', 'U', 'B', 'A', 'G', 'G', 'A', 'G', 'E', 'B', 'A', 'I', 'R', 'K', 'A', 'N', 'B', 'A', 'L', 'L', 'O', 'O', 'N', 'B', 'A', 'M', 'B', 'O', 'O', 'S', 'B', 'A', 'R', 'L', 'I', 'N', 'E', 'B', 'A', 'R', 'R', 'E', 'K', 'H', 'B', 'A', 'R', 'R', 'I', 'E', 'R', 'B', 'A', 'S', 'H', 'K', 'I', 'R', 'B', 'A', 'T', 'H', 'T', 'U', 'B', 'B', 'A', 'T', 'T', 'E', 'R', 'Y', 'B', 'A', 'Y', 'A', 'N', 'N', 'A', 'B', 'E', 'A', 'T', 'I', 'N', 'G', 'B', 'E', 'C', 'A', 'U', 'S', 'E', 'B', 'E', 'E', 'H', 'I', 'V', 'E', 'B', 'E', 'L', 'L', 'H', 'O', 'P', 'B', 'E', 'N', 'G', 'A', 'L', 'I', 'B', 'E', 'N', 'Z', 'E', 'N', 'E', 'B', 'E', 'T', 'W', 'E', 'E', 'N', 'B', 'I', 'C', 'Y', 'C', 'L', 'E', 'B', 'I', 'N', 'D', 'I', 'N', 'G', 'B', 'I', 'S', 'M', 'U', 'T', 'H', 'B', 'J', 'A', 'R', 'K', 'A', 'N', 'B', 'L', 'E', 'N', 'D', 'E', 'D', 'B', 'L', 'O', 'S', 'S', 'O', 'M', 'B', 'L', 'O', 'W', 'I', 'N', 'G', 'B', 'O', 'R', 'A', 'X', '-', '2', 'B', 'O', 'R', 'A', 'X', '-', '3', 'B', 'O', 'U', 'Q', 'U', 'E', 'T', 'B', 'O', 'W', 'L', 'I', 'N', 'G', 'B', 'R', 'A', 'C', 'K', 'E', 'T', 'B', 'R', 'A', 'I', 'L', 'L', 'E', 'B', 'R', 'A', 'K', 'C', 'E', 'T', 'B', 'R', 'I', 'S', 'T', 'L', 'E', 'B', 'U', 'B', 'B', 'L', 'E', 'S', 'B', 'U', 'F', 'F', 'A', 'L', 'O', 'B', 'U', 'R', 'R', 'I', 'T', 'O', 'B', 'U', 'U', 'M', 'I', 'S', 'H', 'C', 'A', 'B', 'I', 'N', 'E', 'T', 'C', 'A', 'E', 'S', 'U', 'R', 'A', 'C', 'A', 'M', 'P', 'I', 'N', 'G', 'C', 'A', 'P', 'I', 'T', 'A', 'L', 'C', 'A', 'P', 'T', 'I', 'V', 'E', 'C', 'A', 'R', 'R', 'I', 'E', 'R', 'C', 'A', 'U', 'T', 'I', 'O', 'N', 'C', 'A', 'Y', 'A', 'N', 'N', 'A', 'C', 'E', 'D', 'I', 'L', 'L', 'A', 'C', 'E', 'I', 'L', 'I', 'N', 'G', 'C', 'E', 'L', 'S', 'I', 'U', 'S', 'C', 'E', 'N', 'T', 'R', 'E', 'D', 'C', 'H', 'A', 'M', 'I', 'L', 'I', 'C', 'H', 'A', 'P', 'T', 'E', 'R', 'C', 'H', 'A', 'R', 'I', 'O', 'T', 'C', 'H', 'E', 'C', 'K', 'E', 'R', 'C', 'H', 'E', 'I', 'N', 'A', 'P', 'C', 'H', 'E', 'V', 'R', 'O', 'N', 'C', 'H', 'I', 'C', 'K', 'E', 'N', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'C', 'H', 'I', 'N', 'E', 'S', 'E', 'C', 'H', 'I', 'N', 'O', 'O', 'K', 'C', 'H', 'R', 'O', 'N', 'O', 'N', 'C', 'H', 'R', 'O', 'N', 'O', 'U', 'C', 'I', 'R', 'C', 'L', 'E', 'D', 'C', 'I', 'R', 'C', 'L', 'E', 'S', 'C', 'L', 'A', 'P', 'P', 'E', 'R', 'C', 'L', 'E', 'A', 'V', 'E', 'R', 'C', 'L', 'O', 'S', 'I', 'N', 'G', 'C', 'L', 'O', 'S', 'U', 'R', 'E', 'C', 'L', 'O', 'T', 'H', 'E', 'S', 'C', 'L', 'U', 'S', 'T', 'E', 'R', 'C', 'O', 'A', 'S', 'T', 'E', 'R', 'C', 'O', 'M', 'P', 'A', 'R', 'E', 'C', 'O', 'N', 'I', 'C', 'A', 'L', 'C', 'O', 'N', 'T', 'A', 'C', 'T', 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'C', 'O', 'N', 'T', 'O', 'U', 'R', 'C', 'O', 'N', 'T', 'R', 'O', 'L', 'C', 'O', 'O', 'K', 'I', 'N', 'G', 'C', 'O', 'R', 'N', 'E', 'R', 'S', 'C', 'O', 'R', 'O', 'N', 'I', 'S', 'C', 'O', 'R', 'R', 'E', 'C', 'T', 'C', 'O', 'U', 'N', 'C', 'I', 'L', 'C', 'R', 'A', 'C', 'K', 'E', 'R', 'C', 'R', 'I', 'C', 'K', 'E', 'T', 'C', 'R', 'O', 'S', 'S', 'E', 'D', 'C', 'R', 'Y', 'S', 'T', 'A', 'L', 'C', 'U', 'R', 'R', 'E', 'N', 'T', 'C', 'U', 'R', 'S', 'I', 'V', 'E', 'C', 'U', 'R', 'V', 'I', 'N', 'G', 'C', 'U', 'S', 'T', 'A', 'R', 'D', 'C', 'U', 'S', 'T', 'O', 'M', 'S', 'C', 'W', 'E', 'O', 'R', 'T', 'H', 'C', 'Y', 'C', 'L', 'O', 'N', 'E', 'C', 'Y', 'P', 'E', 'R', 'U', 'S', 'C', 'Y', 'P', 'R', 'I', 'O', 'T', 'D', 'A', 'G', 'A', 'L', 'G', 'A', 'D', 'A', 'N', 'C', 'I', 'N', 'G', 'D', 'A', 'N', 'T', 'A', 'J', 'A', 'D', 'A', 'P', '-', 'B', 'E', 'I', 'D', 'A', 'P', '-', 'P', 'I', 'I', 'D', 'A', 'Y', 'A', 'N', 'N', 'A', 'D', 'E', 'C', 'A', 'Y', 'E', 'D', 'D', 'E', 'C', 'I', 'M', 'A', 'L', 'D', 'E', 'G', 'R', 'E', 'E', 'S', 'D', 'E', 'L', 'P', 'H', 'I', 'C', 'D', 'E', 'S', 'E', 'R', 'E', 'T', 'D', 'E', 'S', 'K', 'T', 'O', 'P', 'D', 'H', 'A', 'L', 'A', 'T', 'H', 'D', 'H', 'A', 'L', 'E', 'T', 'H', 'D', 'H', 'A', 'M', 'E', 'D', 'H', 'D', 'I', 'A', 'M', 'O', 'N', 'D', 'D', 'I', 'A', 'R', 'G', 'O', 'N', 'D', 'I', 'G', 'A', 'M', 'M', 'A', 'D', 'I', 'G', 'R', 'A', 'P', 'H', 'D', 'I', 'M', 'I', 'D', 'I', 'A', 'D', 'I', 'M', 'M', 'I', 'N', 'G', 'D', 'I', 'N', 'G', 'B', 'A', 'T', 'D', 'I', 'P', 'L', 'O', 'U', 'N', 'D', 'I', 'S', 'I', 'M', 'O', 'U', 'D', 'I', 'S', 'T', 'I', 'L', 'L', 'D', 'I', 'V', 'I', 'D', 'E', 'D', 'D', 'I', 'V', 'I', 'D', 'E', 'R', 'D', 'I', 'V', 'I', 'D', 'E', 'S', 'D', 'I', 'V', 'O', 'R', 'C', 'E', 'D', 'O', 'L', 'P', 'H', 'I', 'N', 'D', 'O', 'T', 'L', 'E', 'S', 'S', 'D', 'O', 'T', 'S', '-', '1', '2', 'D', 'O', 'T', 'S', '-', '1', '3', 'D', 'O', 'T', 'S', '-', '1', '4', 'D', 'O', 'T', 'S', '-', '1', '5', 'D', 'O', 'T', 'S', '-', '1', '6', 'D', 'O', 'T', 'S', '-', '1', '7', 'D', 'O', 'T', 'S', '-', '1', '8', 'D', 'O', 'T', 'S', '-', '2', '3', 'D', 'O', 'T', 'S', '-', '2', '4', 'D', 'O', 'T', 'S', '-', '2', '5', 'D', 'O', 'T', 'S', '-', '2', '6', 'D', 'O', 'T', 'S', '-', '2', '7', 'D', 'O', 'T', 'S', '-', '2', '8', 'D', 'O', 'T', 'S', '-', '3', '4', 'D', 'O', 'T', 'S', '-', '3', '5', 'D', 'O', 'T', 'S', '-', '3', '6', 'D', 'O', 'T', 'S', '-', '3', '7', 'D', 'O', 'T', 'S', '-', '3', '8', 'D', 'O', 'T', 'S', '-', '4', '5', 'D', 'O', 'T', 'S', '-', '4', '6', 'D', 'O', 'T', 'S', '-', '4', '7', 'D', 'O', 'T', 'S', '-', '4', '8', 'D', 'O', 'T', 'S', '-', '5', '6', 'D', 'O', 'T', 'S', '-', '5', '7', 'D', 'O', 'T', 'S', '-', '5', '8', 'D', 'O', 'T', 'S', '-', '6', '7', 'D', 'O', 'T', 'S', '-', '6', '8', 'D', 'O', 'T', 'S', '-', '7', '8', 'D', 'O', 'U', 'B', 'L', 'E', 'D', 'D', 'R', 'A', 'C', 'H', 'M', 'A', 'D', 'R', 'O', 'P', 'L', 'E', 'T', 'D', 'Y', 'N', 'A', 'M', 'I', 'C', 'E', 'A', 'B', 'H', 'A', 'D', 'H', 'E', 'A', 'D', 'H', 'A', 'D', 'H', 'E', 'A', 'R', 'T', 'H', 'L', 'Y', 'E', 'A', 'S', 'T', 'E', 'R', 'N', 'E', 'B', 'E', 'F', 'I', 'L', 'I', 'E', 'E', 'Y', 'A', 'N', 'N', 'A', 'E', 'I', 'G', 'H', 'T', 'H', 'S', 'E', 'L', 'A', 'F', 'R', 'O', 'N', 'E', 'L', 'A', 'M', 'I', 'T', 'E', 'E', 'L', 'B', 'A', 'S', 'A', 'N', 'E', 'L', 'E', 'M', 'E', 'N', 'T', 'E', 'L', 'L', 'I', 'P', 'S', 'E', 'E', 'N', 'A', 'R', 'X', 'I', 'S', 'E', 'N', 'Q', 'U', 'I', 'R', 'Y', 'E', 'N', 'T', 'R', 'Y', '-', '1', 'E', 'N', 'T', 'R', 'Y', '-', '2', 'E', 'P', 'S', 'I', 'L', 'O', 'N', 'E', 'T', 'N', 'A', 'H', 'T', 'A', 'E', 'V', 'E', 'N', 'I', 'N', 'G', 'F', 'A', 'C', 'I', 'N', 'G', 'S', 'F', 'A', 'C', 'T', 'O', 'R', 'Y', 'F', 'A', 'I', 'L', 'U', 'R', 'E', 'F', 'A', 'L', 'L', 'I', 'N', 'G', 'F', 'A', 'T', 'I', 'G', 'U', 'E', 'F', 'A', 'Y', 'A', 'N', 'N', 'A', 'F', 'E', 'A', 'R', 'F', 'U', 'L', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'F', 'E', 'R', 'M', 'A', 'T', 'A', 'F', 'I', 'F', 'T', 'E', 'E', 'N', 'F', 'I', 'N', 'G', 'E', 'R', 'S', 'F', 'I', 'S', 'H', 'E', 'Y', 'E', 'F', 'I', 'S', 'H', 'I', 'N', 'G', 'F', 'L', 'E', 'U', 'R', 'O', 'N', 'F', 'L', 'O', 'W', 'E', 'R', 'S', 'F', 'L', 'O', 'W', 'I', 'N', 'G', 'F', 'L', 'U', 'S', 'H', 'E', 'D', 'F', 'O', 'N', 'G', 'M', 'A', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', 'F', 'O', 'R', 'W', 'A', 'R', 'D', 'F', 'R', 'A', 'K', 'T', 'U', 'R', 'F', 'U', 'N', 'E', 'R', 'A', 'L', 'G', 'A', 'A', 'H', 'L', 'A', 'A', 'G', 'A', 'R', 'M', 'E', 'N', 'T', 'G', 'A', 'Y', 'A', 'N', 'N', 'A', 'G', 'E', 'N', 'E', 'R', 'I', 'C', 'G', 'E', 'S', 'H', 'T', 'I', 'N', 'G', 'E', 'S', 'T', 'U', 'R', 'E', 'G', 'H', 'A', 'A', 'M', 'A', 'E', 'G', 'I', 'B', 'B', 'O', 'U', 'S', 'G', 'I', 'R', 'U', 'D', 'A', 'A', 'G', 'L', 'A', 'G', 'O', 'L', 'I', 'G', 'L', 'A', 'S', 'S', 'E', 'S', 'G', 'L', 'O', 'T', 'T', 'A', 'L', 'G', 'L', 'O', 'W', 'I', 'N', 'G', 'G', 'O', 'R', 'I', 'L', 'L', 'A', 'G', 'R', 'A', 'D', 'U', 'A', 'L', 'G', 'R', 'A', 'N', 'T', 'H', 'A', 'G', 'R', 'E', 'A', 'T', 'E', 'R', 'G', 'R', 'O', 'W', 'I', 'N', 'G', 'G', 'U', 'A', 'R', 'A', 'N', 'I', 'H', 'A', 'F', 'U', 'K', 'H', 'A', 'H', 'A', 'I', 'R', 'C', 'U', 'T', 'H', 'A', 'L', 'A', 'N', 'T', 'A', 'H', 'A', 'L', 'B', 'E', 'R', 'D', 'H', 'A', 'M', 'S', 'T', 'E', 'R', 'H', 'A', 'N', 'D', 'B', 'A', 'G', 'H', 'A', 'N', 'D', 'L', 'E', 'S', 'H', 'A', 'N', 'U', 'N', 'O', 'O', 'H', 'A', 'R', 'P', 'O', 'O', 'N', 'H', 'A', 'S', 'A', 'N', 'T', 'A', 'H', 'A', 'Y', 'A', 'N', 'N', 'A', 'H', 'E', '-', 'G', 'O', 'A', 'T', 'H', 'E', 'A', 'D', 'I', 'N', 'G', 'H', 'E', 'R', 'A', 'E', 'U', 'M', 'H', 'E', 'X', 'A', 'G', 'O', 'N', 'H', 'I', 'T', 'T', 'I', 'N', 'G', 'H', 'O', 'L', 'D', 'I', 'N', 'G', 'H', 'R', 'Y', 'V', 'N', 'I', 'A', 'H', 'U', 'G', 'G', 'I', 'N', 'G', 'H', 'U', 'N', 'D', 'R', 'E', 'D', 'H', 'Y', 'G', 'I', 'E', 'I', 'A', 'I', '-', 'A', 'R', 'A', 'E', 'A', 'I', 'B', 'I', 'F', 'I', 'L', 'I', 'I', 'C', 'H', 'A', 'D', 'I', 'N', 'I', 'I', 'Y', 'A', 'N', 'N', 'A', 'I', 'L', 'I', 'M', 'M', 'U', '3', 'I', 'L', 'I', 'M', 'M', 'U', '4', 'I', 'M', 'I', 'S', 'E', 'O', 'S', 'I', 'N', '-', 'A', 'L', 'A', 'F', 'I', 'N', 'H', 'I', 'B', 'I', 'T', 'I', 'N', 'I', 'T', 'I', 'A', 'L', 'I', 'N', 'S', 'U', 'L', 'A', 'R', 'I', 'N', 'V', 'E', 'R', 'S', 'E', 'I', 'O', 'D', 'H', 'A', 'D', 'H', 'I', 'O', 'T', 'A', 'T', 'E', 'D', 'I', 'S', 'O', 'L', 'A', 'T', 'E', 'I', 'Z', 'A', 'K', 'A', 'Y', 'A', 'I', 'Z', 'H', 'I', 'T', 'S', 'A', 'J', 'A', 'N', 'U', 'A', 'R', 'Y', 'J', 'A', 'Y', 'A', 'N', 'N', 'A', 'J', 'E', 'G', 'O', 'G', 'A', 'N', 'J', 'U', 'P', 'I', 'T', 'E', 'R', 'K', 'A', 'A', 'N', 'K', 'U', 'U', 'K', 'A', 'K', 'A', 'B', 'A', 'T', 'K', 'A', 'N', 'N', 'A', 'D', 'A', 'K', 'A', 'N', 'T', 'A', 'J', 'A', 'K', 'A', 'R', 'A', 'T', 'T', 'O', 'K', 'A', 'R', 'O', 'R', 'I', 'I', 'K', 'A', 'T', 'H', 'A', 'K', 'A', 'K', 'A', 'Y', 'A', 'N', 'N', 'A', 'K', 'E', 'E', 'P', 'I', 'N', 'G', 'K', 'E', 'M', 'B', 'A', 'N', 'G', 'K', 'E', 'N', 'T', 'I', 'M', 'A', 'K', 'E', 'U', 'A', 'E', 'R', 'I', 'K', 'E', 'U', 'S', 'E', 'U', 'X', 'K', 'E', 'U', 'Y', 'E', 'U', 'X', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'K', 'I', 'K', 'A', 'K', 'U', 'I', 'K', 'I', 'N', 'S', 'H', 'I', 'P', 'K', 'I', 'R', 'G', 'H', 'I', 'Z', 'K', 'I', 'S', 'S', 'I', 'N', 'G', 'K', 'N', 'U', 'C', 'K', 'L', 'E', 'K', 'O', 'M', 'B', 'U', 'V', 'A', 'K', 'O', 'O', 'M', 'U', 'U', 'T', 'K', 'O', 'Q', 'N', 'D', 'O', 'N', 'K', 'O', 'R', 'A', 'N', 'I', 'C', 'K', 'O', 'R', 'O', 'N', 'I', 'S', 'K', 'R', 'A', 'T', 'I', 'M', 'A', 'K', 'U', 'R', 'O', 'O', 'N', 'E', 'K', 'Y', 'A', 'T', 'H', 'O', 'S', 'K', 'Y', 'L', 'I', 'S', 'M', 'A', 'L', 'A', 'K', '-', '0', '0', '3', 'L', 'A', 'K', '-', '0', '2', '0', 'L', 'A', 'K', '-', '0', '2', '1', 'L', 'A', 'K', '-', '0', '2', '5', 'L', 'A', 'K', '-', '0', '3', '0', 'L', 'A', 'K', '-', '0', '5', '0', 'L', 'A', 'K', '-', '0', '5', '1', 'L', 'A', 'K', '-', '0', '6', '2', 'L', 'A', 'K', '-', '0', '7', '9', 'L', 'A', 'K', '-', '0', '8', '0', 'L', 'A', 'K', '-', '0', '8', '1', 'L', 'A', 'K', '-', '0', '9', '2', 'L', 'A', 'K', '-', '1', '3', '0', 'L', 'A', 'K', '-', '1', '4', '2', 'L', 'A', 'K', '-', '2', '1', '0', 'L', 'A', 'K', '-', '2', '1', '9', 'L', 'A', 'K', '-', '2', '2', '0', 'L', 'A', 'K', '-', '2', '2', '5', 'L', 'A', 'K', '-', '2', '2', '8', 'L', 'A', 'K', '-', '2', '3', '8', 'L', 'A', 'K', '-', '2', '6', '5', 'L', 'A', 'K', '-', '2', '6', '6', 'L', 'A', 'K', '-', '3', '4', '3', 'L', 'A', 'K', '-', '3', '4', '7', 'L', 'A', 'K', '-', '3', '4', '8', 'L', 'A', 'K', '-', '3', '8', '3', 'L', 'A', 'K', '-', '3', '8', '4', 'L', 'A', 'K', '-', '3', '9', '0', 'L', 'A', 'K', '-', '4', '4', '1', 'L', 'A', 'K', '-', '4', '4', '9', 'L', 'A', 'K', '-', '4', '5', '0', 'L', 'A', 'K', '-', '4', '5', '7', 'L', 'A', 'K', '-', '4', '7', '0', 'L', 'A', 'K', '-', '4', '8', '3', 'L', 'A', 'K', '-', '4', '9', '0', 'L', 'A', 'K', '-', '4', '9', '2', 'L', 'A', 'K', '-', '4', '9', '3', 'L', 'A', 'K', '-', '4', '9', '5', 'L', 'A', 'K', '-', '5', '5', '0', 'L', 'A', 'K', '-', '6', '0', '8', 'L', 'A', 'K', '-', '6', '1', '7', 'L', 'A', 'K', '-', '6', '3', '6', 'L', 'A', 'K', '-', '6', '4', '8', 'L', 'A', 'K', '-', '6', '6', '8', 'L', 'A', 'K', '-', '7', '2', '4', 'L', 'A', 'K', '-', '7', '4', '9', 'L', 'A', 'N', 'T', 'E', 'R', 'N', 'L', 'A', 'R', 'G', 'E', 'S', 'T', 'L', 'A', 'T', 'E', 'R', 'A', 'L', 'L', 'A', 'Y', 'A', 'N', 'N', 'A', 'L', 'E', 'A', 'D', 'I', 'N', 'G', 'L', 'E', 'A', 'T', 'H', 'E', 'R', 'L', 'E', 'G', 'E', 'T', 'O', 'S', 'L', 'E', 'O', 'P', 'A', 'R', 'D', 'L', 'E', 'T', 'T', 'E', 'R', 'S', 'L', 'I', 'B', 'E', 'R', 'T', 'Y', 'L', 'I', 'C', 'K', 'I', 'N', 'G', 'L', 'I', 'M', 'I', 'T', 'E', 'D', 'L', 'I', 'N', 'K', 'I', 'N', 'G', 'L', 'J', 'U', 'D', 'I', 'J', 'E', 'L', 'O', 'G', 'I', 'C', 'A', 'L', 'L', 'O', 'W', '-', 'M', 'I', 'D', 'L', 'O', 'W', 'E', 'R', 'E', 'D', 'L', 'O', 'Z', 'E', 'N', 'G', 'E', 'L', 'U', 'G', 'G', 'A', 'G', 'E', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', 'M', 'A', 'A', 'Y', 'Y', 'A', 'A', 'M', 'A', 'C', 'H', 'I', 'N', 'E', 'M', 'A', 'E', 'K', 'E', 'U', 'P', 'M', 'A', 'E', 'N', 'J', 'E', 'T', 'M', 'A', 'H', 'J', 'O', 'N', 'G', 'M', 'A', 'I', 'K', 'U', 'R', 'O', 'M', 'A', 'I', 'L', 'B', 'O', 'X', 'M', 'A', 'I', 'M', 'U', 'A', 'N', 'M', 'A', 'K', 'S', 'U', 'R', 'A', 'M', 'A', 'L', 'A', 'K', 'O', 'N', 'M', 'A', 'L', 'E', 'E', 'R', 'I', 'M', 'A', 'L', 'T', 'E', 'S', 'E', 'M', 'A', 'N', 'D', 'A', 'I', 'C', 'M', 'A', 'N', 'S', 'U', 'A', 'E', 'M', 'A', 'N', 'S', 'Y', 'O', 'N', 'M', 'A', 'R', 'B', 'U', 'T', 'A', 'M', 'A', 'R', 'C', 'A', 'T', 'O', 'M', 'A', 'R', 'C', 'H', 'E', 'N', 'M', 'A', 'R', 'T', 'I', 'A', 'L', 'M', 'A', 'R', 'W', 'A', 'R', 'I', 'M', 'A', 'S', 'S', 'A', 'G', 'E', 'M', 'A', 'S', 'S', 'I', 'N', 'G', 'M', 'A', 'T', 'T', 'O', 'C', 'K', 'M', 'A', 'Y', 'A', 'N', 'N', 'A', 'M', 'B', 'A', 'A', 'K', 'E', 'T', 'M', 'B', 'A', 'A', 'R', 'A', 'E', 'M', 'E', 'A', 'S', 'U', 'R', 'E', 'M', 'E', 'D', 'I', 'C', 'A', 'L', 'M', 'E', 'E', 'T', 'O', 'R', 'U', 'M', 'E', 'G', 'A', 'T', 'O', 'N', 'M', 'E', 'L', 'O', 'D', 'I', 'C', 'M', 'E', 'N', 'O', 'R', 'A', 'H', 'M', 'E', 'R', 'C', 'U', 'R', 'Y', 'M', 'G', 'B', 'A', 'S', 'A', 'Q', 'M', 'G', 'B', 'O', 'F', 'U', 'M', 'M', 'I', 'D', 'L', 'I', 'N', 'E', 'M', 'I', 'K', 'U', 'R', 'O', 'N', 'M', 'I', 'N', 'I', 'B', 'U', 'S', 'M', 'K', 'P', 'A', 'R', 'A', 'Q', 'M', 'O', 'D', 'E', 'S', 'T', 'Y', 'M', 'O', 'N', 'S', 'T', 'E', 'R', 'M', 'O', 'O', 'M', 'E', 'U', 'T', 'M', 'O', 'O', 'M', 'P', 'U', 'Q', 'M', 'O', 'R', 'N', 'I', 'N', 'G', 'M', 'O', 'R', 'T', 'U', 'U', 'M', 'M', 'U', 'L', 'T', 'A', 'N', 'I', 'M', 'U', 'S', 'I', 'C', 'A', 'L', 'M', 'Y', 'A', 'N', 'M', 'A', 'R', 'M', 'Y', 'S', 'L', 'I', 'T', 'E', 'N', 'A', 'S', 'K', 'A', 'P', 'I', 'N', 'A', 'T', 'U', 'R', 'A', 'L', 'N', 'A', 'Y', 'A', 'N', 'N', 'A', 'N', 'E', 'C', 'K', 'T', 'I', 'E', 'N', 'E', 'G', 'A', 'T', 'E', 'D', 'N', 'E', 'I', 'T', 'H', 'E', 'R', 'N', 'E', 'P', 'T', 'U', 'N', 'E', 'N', 'E', 'Q', 'U', 'D', 'A', 'A', 'N', 'E', 'U', 'T', 'R', 'A', 'L', 'N', 'E', 'W', 'L', 'I', 'N', 'E', 'N', 'G', 'E', 'A', 'D', 'A', 'L', 'N', 'G', 'G', 'E', 'E', 'E', 'E', 'N', 'G', 'G', 'E', 'U', 'A', 'E', 'N', 'G', 'G', 'U', 'A', 'E', 'N', 'N', 'G', 'G', 'U', 'E', 'E', 'T', 'N', 'G', 'G', 'U', 'R', 'A', 'E', 'N', 'G', 'G', 'W', 'A', 'E', 'N', 'N', 'G', 'K', 'A', 'A', 'M', 'I', 'N', 'G', 'K', 'E', 'U', 'R', 'I', 'N', 'G', 'K', 'I', 'N', 'D', 'I', 'N', 'G', 'K', 'W', 'A', 'E', 'N', 'N', 'I', 'K', 'A', 'H', 'I', 'T', 'N', 'J', 'A', 'E', 'M', 'L', 'I', 'N', 'J', 'E', 'U', 'A', 'E', 'M', 'N', 'K', 'A', 'A', 'R', 'A', 'E', 'N', 'O', 'M', 'I', 'N', 'A', 'L', 'N', 'O', 'M', 'I', 'S', 'M', 'A', 'N', 'O', 'T', 'C', 'H', 'E', 'D', 'N', 'S', 'E', 'U', 'A', 'E', 'N', 'N', 'T', 'O', 'Q', 'P', 'E', 'N', 'N', 'U', 'M', 'B', 'E', 'R', 'S', 'N', 'U', 'M', 'E', 'R', 'A', 'L', 'N', 'U', 'M', 'E', 'R', 'I', 'C', 'N', 'U', 'N', 'A', 'V', 'I', 'K', 'N', 'U', 'N', 'A', 'V', 'U', 'T', 'N', 'U', 'T', 'I', 'L', 'L', 'U', 'N', 'Y', 'A', 'E', 'M', 'A', 'E', 'N', 'Y', 'I', 'N', '-', 'D', 'O', 'O', 'B', 'L', 'I', 'Q', 'U', 'E', 'O', 'B', 'O', 'F', 'I', 'L', 'I', 'O', 'C', 'T', 'A', 'G', 'O', 'N', 'O', 'C', 'T', 'O', 'B', 'E', 'R', 'O', 'C', 'T', 'O', 'P', 'U', 'S', 'O', 'F', 'F', 'I', 'C', 'E', 'R', 'O', 'J', 'I', 'B', 'W', 'A', 'Y', 'O', 'M', 'I', 'C', 'R', 'O', 'N', 'O', 'N', 'E', '-', 'W', 'A', 'Y', 'O', 'N', 'E', 'S', 'E', 'L', 'F', 'O', 'O', 'Y', 'A', 'N', 'N', 'A', 'O', 'P', 'E', 'N', 'I', 'N', 'G', 'O', 'P', 'T', 'I', 'C', 'A', 'L', 'O', 'R', 'D', 'I', 'N', 'A', 'L', 'O', 'S', 'M', 'A', 'N', 'Y', 'A', 'O', 'T', 'H', 'A', 'L', 'A', 'N', 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'O', 'V', 'E', 'R', 'B', 'A', 'R', 'O', 'V', 'E', 'R', 'L', 'A', 'P', 'O', 'V', 'E', 'R', 'L', 'A', 'Y', 'P', 'A', 'C', 'K', 'A', 'G', 'E', 'P', 'A', 'C', 'K', 'I', 'N', 'G', 'P', 'A', 'H', 'L', 'A', 'V', 'I', 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'P', 'A', 'L', 'A', 'U', 'N', 'G', 'P', 'A', 'L', 'E', 'T', 'T', 'E', 'P', 'A', 'L', 'L', 'A', 'W', 'A', 'P', 'A', 'M', 'A', 'A', 'E', 'H', 'P', 'A', 'M', 'E', 'P', 'E', 'T', 'P', 'A', 'M', 'S', 'H', 'A', 'E', 'P', 'A', 'N', 'G', 'K', 'A', 'T', 'P', 'A', 'N', 'G', 'K', 'O', 'N', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'P', 'A', 'N', 'Y', 'I', 'K', 'U', 'P', 'A', 'N', 'Y', 'U', 'K', 'U', 'P', 'A', 'P', 'Y', 'R', 'U', 'S', 'P', 'A', 'R', 'E', 'R', 'E', 'N', 'P', 'A', 'R', 'T', 'I', 'A', 'L', 'P', 'A', 'T', 'T', 'E', 'R', 'N', 'P', 'A', 'Y', 'A', 'N', 'N', 'A', 'P', 'A', 'Y', 'E', 'R', 'O', 'K', 'P', 'E', 'A', 'N', 'U', 'T', 'S', 'P', 'E', 'N', 'G', 'K', 'A', 'L', 'P', 'E', 'N', 'G', 'U', 'I', 'N', 'P', 'E', 'N', 'N', 'A', 'N', 'T', 'P', 'E', 'N', 'S', 'I', 'V', 'E', 'P', 'E', 'R', 'C', 'E', 'N', 'T', 'P', 'E', 'R', 'S', 'I', 'A', 'N', 'P', 'E', 'T', 'A', 'S', 'M', 'A', 'P', 'E', 'T', 'A', 'S', 'T', 'I', 'P', 'H', 'A', 'S', 'E', '-', 'A', 'P', 'H', 'A', 'S', 'E', '-', 'B', 'P', 'H', 'A', 'S', 'E', '-', 'C', 'P', 'H', 'A', 'S', 'E', '-', 'D', 'P', 'H', 'A', 'S', 'E', '-', 'E', 'P', 'H', 'A', 'S', 'E', '-', 'F', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'P', 'H', 'I', 'N', 'T', 'H', 'U', 'P', 'H', 'U', 'T', 'H', 'A', 'O', 'P', 'I', 'C', 'T', 'U', 'R', 'E', 'P', 'I', 'L', 'C', 'R', 'O', 'W', 'P', 'I', 'R', 'I', 'E', 'E', 'N', 'P', 'I', 'S', 'E', 'L', 'E', 'H', 'P', 'L', 'A', 'G', 'I', 'O', 'S', 'P', 'L', 'A', 'Y', 'I', 'N', 'G', 'P', 'O', 'D', 'A', 'T', 'U', 'S', 'P', 'O', 'I', 'N', 'T', 'E', 'D', 'P', 'O', 'I', 'N', 'T', 'E', 'R', 'P', 'O', 'P', 'C', 'O', 'R', 'N', 'P', 'O', 'P', 'P', 'I', 'N', 'G', 'P', 'O', 'S', 'T', 'B', 'O', 'X', 'P', 'O', 'T', 'A', 'B', 'L', 'E', 'P', 'O', 'U', 'L', 'T', 'R', 'Y', 'P', 'O', 'U', 'T', 'I', 'N', 'G', 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'P', 'R', 'E', 'F', 'A', 'C', 'E', 'P', 'R', 'E', 'N', 'K', 'H', 'A', 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'P', 'R', 'E', 'S', 'S', 'E', 'D', 'P', 'R', 'I', 'N', 'T', 'E', 'R', 'P', 'R', 'I', 'V', 'A', 'T', 'E', 'P', 'R', 'O', 'D', 'U', 'C', 'T', 'P', 'S', 'A', 'L', 'T', 'E', 'R', 'P', 'U', 'N', 'G', 'A', 'A', 'M', 'P', 'U', 'R', 'N', 'A', 'M', 'A', 'P', 'U', 'S', 'H', 'I', 'N', 'G', 'P', 'U', 'S', 'H', 'P', 'I', 'N', 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'R', 'A', 'C', 'Q', 'U', 'E', 'T', 'R', 'A', 'D', 'I', 'C', 'A', 'L', 'R', 'A', 'I', 'L', 'W', 'A', 'Y', 'R', 'A', 'I', 'N', 'B', 'O', 'W', 'R', 'A', 'I', 'S', 'I', 'N', 'G', 'R', 'A', 'K', 'H', 'A', 'N', 'G', 'R', 'A', 'P', 'I', 'S', 'M', 'A', 'R', 'A', 'S', 'W', 'A', 'D', 'I', 'R', 'A', 'Y', 'A', 'N', 'N', 'A', 'R', 'E', 'A', 'H', 'M', 'U', 'K', 'R', 'E', 'A', 'L', 'G', 'A', 'R', 'R', 'E', 'G', 'I', 'A', '-', '2', 'R', 'E', 'G', 'U', 'L', 'U', 'S', 'R', 'E', 'L', 'A', 'X', 'E', 'D', 'R', 'E', 'L', 'E', 'A', 'S', 'E', 'R', 'E', 'R', 'E', 'K', 'A', 'N', 'R', 'E', 'T', 'R', 'E', 'A', 'T', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'R', 'G', 'Y', 'I', 'N', 'G', 'S', 'R', 'I', 'N', 'G', 'I', 'N', 'G', 'R', 'I', 'T', 'T', 'O', 'R', 'U', 'R', 'O', 'A', 'S', 'T', 'E', 'D', 'R', 'O', 'L', 'L', 'I', 'N', 'G', 'R', 'O', 'O', 'S', 'T', 'E', 'R', 'R', 'O', 'S', 'E', 'T', 'T', 'E', 'R', 'O', 'T', 'A', 'T', 'E', 'D', 'R', 'O', 'T', 'U', 'N', 'D', 'A', 'R', 'O', 'U', 'N', 'D', 'E', 'D', 'R', 'O', 'W', 'B', 'O', 'A', 'T', 'R', 'U', 'N', 'N', 'I', 'N', 'G', 'R', 'U', 'U', 'B', 'U', 'R', 'U', 'S', 'A', 'I', 'K', 'U', 'R', 'U', 'S', 'A', 'K', 'E', 'U', 'A', 'E', 'S', 'A', 'L', 'T', 'I', 'R', 'E', 'S', 'A', 'M', 'P', 'H', 'A', 'O', 'S', 'A', 'N', 'Y', 'A', 'K', 'A', 'S', 'A', 'T', 'A', 'N', 'G', 'A', 'S', 'A', 'T', 'C', 'H', 'E', 'L', 'S', 'A', 'T', 'K', 'A', 'A', 'N', 'S', 'A', 'Y', 'A', 'N', 'N', 'A', 'S', 'C', 'E', 'P', 'T', 'E', 'R', 'S', 'C', 'H', 'O', 'L', 'A', 'R', 'S', 'C', 'O', 'O', 'T', 'E', 'R', 'S', 'C', 'R', 'U', 'P', 'L', 'E', 'S', 'E', 'A', 'G', 'U', 'L', 'L', 'S', 'E', 'C', 'T', 'I', 'O', 'N', 'S', 'E', 'G', 'M', 'E', 'N', 'T', 'S', 'E', 'M', 'K', 'A', 'T', 'H', 'S', 'E', 'R', 'V', 'I', 'C', 'E', 'S', 'E', 'U', 'N', 'Y', 'A', 'M', 'S', 'E', 'V', 'E', 'N', 'T', 'H', 'S', 'E', 'V', 'E', 'N', 'T', 'Y', 'S', 'E', 'X', 'T', 'A', 'N', 'S', 'S', 'E', 'X', 'T', 'I', 'L', 'E', 'S', 'E', 'X', 'T', 'U', 'L', 'A', 'S', 'H', 'A', 'K', 'I', 'N', 'G', 'S', 'H', 'A', 'L', 'L', 'O', 'W', 'S', 'H', 'A', 'P', 'I', 'N', 'G', 'S', 'H', 'A', 'R', 'A', 'D', 'A', 'S', 'H', 'A', 'V', 'I', 'A', 'N', 'S', 'H', 'C', 'H', 'O', 'O', 'I', 'S', 'H', 'E', 'S', 'H', 'I', 'G', 'S', 'H', 'E', 'U', 'A', 'E', 'Q', 'S', 'H', 'T', 'A', 'P', 'I', 'C', 'S', 'H', 'U', 'F', 'F', 'L', 'E', 'S', 'I', 'D', 'D', 'H', 'A', 'M', 'S', 'I', 'L', 'I', 'Q', 'U', 'A', 'S', 'I', 'M', 'I', 'L', 'A', 'R', 'S', 'I', 'N', 'G', 'A', 'A', 'T', 'S', 'I', 'N', 'H', 'A', 'L', 'A', 'S', 'I', 'N', 'K', 'I', 'N', 'G', 'S', 'I', 'R', 'I', 'N', 'G', 'U', 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'S', 'K', 'L', 'I', 'R', 'O', 'N', 'S', 'L', 'A', 'N', 'T', 'E', 'D', 'S', 'L', 'I', 'D', 'I', 'N', 'G', 'S', 'L', 'O', 'P', 'I', 'N', 'G', 'S', 'M', 'A', 'L', 'L', 'E', 'R', 'S', 'M', 'I', 'L', 'I', 'N', 'G', 'S', 'M', 'O', 'K', 'I', 'N', 'G', 'S', 'N', 'O', 'W', 'M', 'A', 'N', 'S', 'O', 'C', 'I', 'E', 'T', 'Y', 'S', 'O', 'G', 'D', 'I', 'A', 'N', 'S', 'O', 'L', 'I', 'D', 'U', 'S', 'S', 'O', 'M', 'P', 'E', 'N', 'G', 'S', 'P', 'A', 'C', 'I', 'N', 'G', 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'S', 'P', 'E', 'A', 'K', 'E', 'R', 'S', 'P', 'E', 'C', 'I', 'A', 'L', 'S', 'P', 'I', 'D', 'E', 'R', 'Y', 'S', 'P', 'I', 'R', 'A', 'N', 'T', 'S', 'P', 'L', 'A', 'Y', 'E', 'D', 'S', 'P', 'R', 'I', 'N', 'G', 'S', 'S', 'Q', 'U', 'A', 'R', 'E', 'D', 'S', 'Q', 'U', 'A', 'R', 'E', 'S', 'S', 'Q', 'U', 'E', 'E', 'Z', 'E', 'S', 'T', 'A', 'D', 'I', 'U', 'M', 'S', 'T', 'A', 'M', 'P', 'E', 'D', 'S', 'T', 'A', 'R', 'R', 'E', 'D', 'S', 'T', 'A', 'T', 'E', 'R', 'S', 'S', 'T', 'A', 'T', 'I', 'O', 'N', 'S', 'T', 'A', 'U', 'R', 'O', 'S', 'S', 'T', 'A', 'V', 'R', 'O', 'S', 'S', 'T', 'A', 'V', 'R', 'O', 'U', 'S', 'T', 'I', 'R', 'R', 'U', 'P', 'S', 'T', 'R', 'A', 'T', 'U', 'M', 'S', 'T', 'R', 'E', 'T', 'C', 'H', 'S', 'T', 'R', 'O', 'K', 'E', 'S', 'S', 'T', 'U', 'F', 'F', 'E', 'D', 'S', 'U', 'B', 'J', 'E', 'C', 'T', 'S', 'U', 'B', 'U', 'N', 'I', 'T', 'S', 'U', 'C', 'C', 'E', 'E', 'D', 'S', 'U', 'C', 'K', 'I', 'N', 'G', 'S', 'U', 'N', 'R', 'I', 'S', 'E', 'S', 'U', 'R', 'F', 'A', 'C', 'E', 'S', 'V', 'A', 'R', 'I', 'T', 'A', 'S', 'W', 'I', 'M', 'M', 'E', 'R', 'S', 'Y', 'M', 'B', 'O', 'L', 'S', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', 'S', 'Y', 'N', 'E', 'V', 'M', 'A', 'S', 'Y', 'R', 'I', 'N', 'G', 'E', 'T', '-', 'S', 'H', 'I', 'R', 'T', 'T', 'A', 'A', 'L', 'U', 'J', 'A', 'T', 'A', 'A', 'S', 'H', 'A', 'E', 'T', 'A', 'G', 'A', 'L', 'O', 'G', 'T', 'A', 'I', 'S', 'Y', 'O', 'U', 'T', 'A', 'L', 'E', 'N', 'T', 'S', 'T', 'A', 'N', 'G', 'E', 'N', 'T', 'T', 'A', 'T', 'W', 'E', 'E', 'L', 'T', 'A', 'Y', 'A', 'N', 'N', 'A', 'T', 'C', 'H', 'E', 'H', 'E', 'H', 'T', 'E', 'L', 'I', 'S', 'H', 'A', 'T', 'E', 'S', 'S', 'E', 'R', 'A', 'T', 'E', 'U', 'T', 'E', 'U', 'X', 'T', 'H', '-', 'C', 'R', 'E', 'E', 'T', 'H', 'A', 'M', 'E', 'D', 'H', 'T', 'H', 'E', 'S', 'E', 'O', 'S', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'T', 'H', 'O', 'U', 'G', 'H', 'T', 'T', 'H', 'R', 'E', 'E', '-', 'D', 'T', 'H', 'R', 'O', 'U', 'G', 'H', 'T', 'H', 'U', 'N', 'D', 'E', 'R', 'T', 'I', 'B', 'E', 'T', 'A', 'N', 'T', 'I', 'C', 'K', 'E', 'T', 'S', 'T', 'I', 'L', 'T', 'I', 'N', 'G', 'T', 'I', 'N', 'A', 'G', 'M', 'A', 'T', 'I', 'R', 'H', 'U', 'T', 'A', 'T', 'I', 'T', 'U', 'A', 'E', 'P', 'T', 'O', 'R', 'N', 'A', 'D', 'O', 'T', 'O', 'U', 'C', 'H', 'E', 'S', 'T', 'O', 'W', 'A', 'R', 'D', 'S', 'T', 'R', 'A', 'C', 'T', 'O', 'R', 'T', 'R', 'A', 'F', 'F', 'I', 'C', 'T', 'R', 'A', 'M', 'W', 'A', 'Y', 'T', 'R', 'I', 'D', 'E', 'N', 'T', 'T', 'R', 'I', 'G', 'R', 'A', 'M', 'T', 'R', 'I', 'I', 'S', 'A', 'P', 'T', 'R', 'I', 'S', 'E', 'M', 'E', 'T', 'R', 'I', 'U', 'M', 'P', 'H', 'T', 'R', 'O', 'L', 'L', 'E', 'Y', 'T', 'R', 'U', 'M', 'P', '-', '1', 'T', 'R', 'U', 'M', 'P', '-', '2', 'T', 'R', 'U', 'M', 'P', '-', '3', 'T', 'R', 'U', 'M', 'P', '-', '4', 'T', 'R', 'U', 'M', 'P', '-', '5', 'T', 'R', 'U', 'M', 'P', '-', '6', 'T', 'R', 'U', 'M', 'P', '-', '7', 'T', 'R', 'U', 'M', 'P', '-', '8', 'T', 'R', 'U', 'M', 'P', '-', '9', 'T', 'R', 'U', 'M', 'P', 'E', 'T', 'T', 'S', 'A', 'A', 'D', 'I', 'Y', 'T', 'T', 'U', 'D', 'D', 'A', 'G', 'T', 'U', 'M', 'B', 'L', 'E', 'R', 'T', 'U', 'M', 'E', 'T', 'E', 'S', 'T', 'U', 'R', 'K', 'I', 'S', 'H', 'T', 'W', 'E', 'L', 'F', 'T', 'H', 'T', 'W', 'I', 'S', 'T', 'E', 'D', 'T', 'W', 'O', '-', 'W', 'A', 'Y', 'U', '-', 'E', 'O', '-', 'E', 'U', 'U', 'B', 'A', 'D', 'A', 'M', 'A', 'U', 'B', 'U', 'F', 'I', 'L', 'I', 'U', 'N', 'I', 'C', 'O', 'R', 'N', 'U', 'N', 'I', 'F', 'I', 'E', 'D', 'U', 'N', 'I', 'F', 'O', 'R', 'M', 'U', 'N', 'K', 'N', 'O', 'W', 'N', 'U', 'P', 'R', 'I', 'G', 'H', 'T', 'U', 'P', 'S', 'I', 'L', 'O', 'N', 'U', 'P', 'W', 'A', 'R', 'D', 'S', 'U', 'S', 'H', 'E', 'N', 'N', 'A', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', 'V', 'A', 'P', 'O', 'U', 'R', 'S', 'V', 'A', 'R', 'E', 'I', 'A', 'I', 'V', 'A', 'R', 'I', 'A', 'N', 'T', 'V', 'A', 'Y', 'A', 'N', 'N', 'A', 'V', 'E', 'H', 'I', 'C', 'L', 'E', 'V', 'I', 'C', 'T', 'O', 'R', 'Y', 'V', 'I', 'E', 'W', 'I', 'N', 'G', 'V', 'I', 'L', 'L', 'A', 'G', 'E', 'V', 'I', 'N', 'E', 'G', 'A', 'R', 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'V', 'I', 'T', 'A', 'E', '-', '2', 'V', 'I', 'T', 'R', 'I', 'O', 'L', 'V', 'O', 'C', 'A', 'L', 'I', 'C', 'V', 'O', 'I', 'C', 'I', 'N', 'G', 'V', 'O', 'L', 'A', 'P', 'U', 'K', 'V', 'O', 'L', 'C', 'A', 'N', 'O', 'V', 'O', 'L', 'T', 'A', 'G', 'E', 'W', 'A', 'I', 'T', 'I', 'N', 'G', 'W', 'A', 'R', 'N', 'I', 'N', 'G', 'W', 'A', 'S', 'T', 'I', 'N', 'G', 'W', 'E', 'D', 'D', 'I', 'N', 'G', 'W', 'E', 'S', 'T', 'E', 'R', 'N', 'W', 'H', 'E', 'E', 'L', 'E', 'D', 'W', 'I', 'G', 'G', 'L', 'E', 'S', 'W', 'I', 'G', 'N', 'Y', 'A', 'N', 'W', 'I', 'N', 'K', 'I', 'N', 'G', 'W', 'I', 'T', 'H', 'O', 'U', 'T', 'W', 'O', 'R', 'R', 'I', 'E', 'D', 'W', 'O', 'R', 'S', 'H', 'I', 'P', 'W', 'R', 'A', 'P', 'P', 'E', 'D', 'W', 'R', 'I', 'T', 'I', 'N', 'G', 'Y', 'A', 'E', 'M', 'M', 'A', 'E', 'Y', 'A', 'Y', 'A', 'N', 'N', 'A', 'Y', 'E', 'N', 'I', 'S', 'E', 'I', 'Y', 'I', 'D', 'D', 'I', 'S', 'H', 'Y', 'P', 'O', 'R', 'R', 'O', 'I', 'Z', 'H', 'I', 'V', 'E', 'T', 'E', 'A', '1', '0', '0', '-', '1', '0', '2', 'A', '4', '0', '0', '-', 'V', 'A', 'S', 'A', '4', '0', '1', '-', 'V', 'A', 'S', 'A', '4', '0', '2', '-', 'V', 'A', 'S', 'A', '4', '0', '3', '-', 'V', 'A', 'S', 'A', '4', '0', '4', '-', 'V', 'A', 'S', 'A', '4', '0', '5', '-', 'V', 'A', 'S', 'A', '4', '0', '6', '-', 'V', 'A', 'S', 'A', '4', '0', '7', '-', 'V', 'A', 'S', 'A', '4', '0', '8', '-', 'V', 'A', 'S', 'A', '4', '0', '9', '-', 'V', 'A', 'S', 'A', '4', '1', '0', '-', 'V', 'A', 'S', 'A', '4', '1', '1', '-', 'V', 'A', 'S', 'A', '4', '1', '2', '-', 'V', 'A', 'S', 'A', '4', '1', '3', '-', 'V', 'A', 'S', 'A', '4', '1', '4', '-', 'V', 'A', 'S', 'A', '4', '1', '5', '-', 'V', 'A', 'S', 'A', '4', '1', '6', '-', 'V', 'A', 'S', 'A', '4', '1', '7', '-', 'V', 'A', 'S', 'A', '4', '1', '8', '-', 'V', 'A', 'S', 'A', 'C', 'T', 'I', 'V', 'A', 'T', 'E', 'A', 'C', 'T', 'U', 'A', 'L', 'L', 'Y', 'A', 'E', 'E', 'Y', 'A', 'N', 'N', 'A', 'A', 'I', 'R', 'P', 'L', 'A', 'N', 'E', 'A', 'K', 'H', 'M', 'I', 'M', 'I', 'C', 'A', 'L', 'B', 'A', 'N', 'I', 'A', 'N', 'A', 'L', 'K', 'A', 'L', 'I', '-', '2', 'A', 'L', 'L', 'I', 'A', 'N', 'C', 'E', 'A', 'L', 'V', 'E', 'O', 'L', 'A', 'R', 'A', 'M', 'E', 'R', 'I', 'C', 'A', 'N', 'A', 'M', 'E', 'R', 'I', 'C', 'A', 'S', 'A', 'N', 'G', 'S', 'T', 'R', 'O', 'M', 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'Y', 'A', 'N', 'U', 'D', 'A', 'T', 'T', 'A', 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', 'A', 'P', 'O', 'D', 'E', 'R', 'M', 'A', 'A', 'P', 'O', 'D', 'E', 'X', 'I', 'A', 'A', 'P', 'O', 'T', 'H', 'E', 'M', 'A', 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', 'A', 'Q', 'U', 'A', 'R', 'I', 'U', 'S', 'A', 'R', 'A', 'E', 'A', '-', 'E', 'O', 'A', 'R', 'C', 'H', 'A', 'I', 'O', 'N', 'A', 'R', 'G', 'O', 'T', 'E', 'R', 'I', 'A', 'R', 'I', 'S', 'T', 'E', 'R', 'A', 'A', 'R', 'M', 'E', 'N', 'I', 'A', 'N', 'A', 'R', 'O', 'U', 'S', 'I', 'N', 'G', 'A', 'R', 'R', 'I', 'V', 'I', 'N', 'G', 'A', 'S', '-', 'S', 'A', 'J', 'D', 'A', 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', 'A', 'S', 'S', 'Y', 'R', 'I', 'A', 'N', 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'M', 'A', 'T', 'H', 'L', 'E', 'T', 'I', 'C', 'A', 'T', 'T', 'A', 'C', 'H', 'E', 'D', 'A', 'T', 'T', 'H', 'A', 'C', 'A', 'N', 'A', 'V', 'A', 'G', 'R', 'A', 'H', 'A', 'B', 'A', 'C', 'K', 'H', 'A', 'N', 'D', 'B', 'A', 'C', 'T', 'R', 'I', 'A', 'N', 'B', 'A', 'G', 'U', 'E', 'T', 'T', 'E', 'B', 'A', 'L', 'I', 'N', 'E', 'S', 'E', 'B', 'A', 'N', 'K', 'N', 'O', 'T', 'E', 'B', 'A', 'S', 'E', 'B', 'A', 'L', 'L', 'B', 'A', 'S', 'E', 'L', 'I', 'N', 'E', 'B', 'E', 'G', 'I', 'N', 'N', 'E', 'R', 'B', 'E', 'L', 'G', 'T', 'H', 'O', 'R', 'B', 'E', 'R', 'K', 'A', 'N', 'A', 'N', 'B', 'E', 'V', 'E', 'R', 'A', 'G', 'E', 'B', 'I', 'C', 'Y', 'C', 'L', 'E', 'S', 'B', 'I', 'D', 'E', 'N', 'T', 'A', 'L', 'B', 'I', 'L', 'A', 'B', 'I', 'A', 'L', 'B', 'I', 'L', 'L', 'I', 'O', 'N', 'S', 'B', 'I', 'R', 'T', 'H', 'D', 'A', 'Y', 'B', 'L', 'O', 'W', 'F', 'I', 'S', 'H', 'B', 'O', 'H', 'A', 'I', 'R', 'I', 'C', 'B', 'O', 'O', 'K', 'M', 'A', 'R', 'K', 'B', 'O', 'P', 'O', 'M', 'O', 'F', 'O', 'B', 'O', 'U', 'N', 'D', 'A', 'R', 'Y', 'B', 'R', 'A', 'N', 'C', 'H', 'E', 'S', 'B', 'U', 'G', 'I', 'N', 'E', 'S', 'E', 'B', 'U', 'I', 'L', 'D', 'I', 'N', 'G', 'B', 'U', 'L', 'L', 'H', 'O', 'R', 'N', 'B', 'U', 'L', 'L', 'S', 'E', 'Y', 'E', 'B', 'U', 'S', 'I', 'N', 'E', 'S', 'S', 'B', 'U', 'S', 'S', 'Y', 'E', 'R', 'U', 'C', 'A', 'B', 'L', 'E', 'W', 'A', 'Y', 'C', 'A', 'D', 'U', 'C', 'E', 'U', 'S', 'C', 'A', 'L', 'E', 'N', 'D', 'A', 'R', 'C', 'A', 'N', 'A', 'D', 'I', 'A', 'N', 'C', 'A', 'R', 'O', 'U', 'S', 'E', 'L', 'C', 'A', 'R', 'R', 'I', 'A', 'G', 'E', 'C', 'A', 'U', 'L', 'D', 'R', 'O', 'N', 'C', 'E', 'R', 'E', 'M', 'O', 'N', 'Y', 'C', 'H', 'A', 'M', 'I', 'L', 'O', 'N', 'C', 'H', 'A', 'T', 'T', 'A', 'W', 'A', 'C', 'H', 'E', 'E', 'R', 'I', 'N', 'G', 'C', 'H', 'E', 'I', 'K', 'H', 'A', 'N', 'C', 'H', 'E', 'I', 'K', 'H', 'E', 'I', 'C', 'H', 'E', 'R', 'O', 'K', 'E', 'E', 'C', 'H', 'E', 'R', 'R', 'I', 'E', 'S', 'C', 'H', 'E', 'S', 'T', 'N', 'U', 'T', 'C', 'H', 'I', 'L', 'D', 'R', 'E', 'N', 'C', 'H', 'I', 'P', 'M', 'U', 'N', 'K', 'C', 'H', 'O', 'R', 'E', 'V', 'M', 'A', 'C', 'H', 'O', 'S', 'E', 'O', 'N', 'G', 'C', 'I', 'N', 'N', 'A', 'B', 'A', 'R', 'C', 'I', 'R', 'C', 'L', 'I', 'N', 'G', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', 'C', 'I', 'T', 'A', 'T', 'I', 'O', 'N', 'C', 'I', 'V', 'I', 'L', 'I', 'A', 'N', 'C', 'L', 'A', 'P', 'P', 'I', 'N', 'G', 'C', 'L', 'I', 'M', 'A', 'C', 'U', 'S', 'C', 'L', 'I', 'N', 'G', 'I', 'N', 'G', 'C', 'L', 'I', 'N', 'K', 'I', 'N', 'G', 'C', 'O', 'C', 'K', 'T', 'A', 'I', 'L', 'C', 'O', 'M', 'B', 'I', 'N', 'E', 'D', 'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', 'C', 'O', 'N', 'F', 'E', 'T', 'T', 'I', 'C', 'O', 'N', 'F', 'L', 'I', 'C', 'T', 'C', 'O', 'N', 'F', 'U', 'S', 'E', 'D', 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'T', 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'S', 'C', 'O', 'P', 'P', 'E', 'R', '-', '2', 'C', 'O', 'U', 'N', 'T', 'I', 'N', 'G', 'C', 'R', 'E', 'A', 'T', 'I', 'V', 'E', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'T', 'C', 'R', 'O', 'S', 'S', 'I', 'N', 'G', 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', 'C', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', 'C', 'U', 'C', 'U', 'M', 'B', 'E', 'R', 'C', 'U', 'R', 'L', 'I', 'C', 'U', 'E', 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', 'C', 'U', 'S', 'T', 'O', 'M', 'E', 'R', 'C', 'Y', 'R', 'E', 'N', 'A', 'I', 'C', 'C', 'Y', 'R', 'I', 'L', 'L', 'I', 'C', 'D', 'A', 'M', 'M', 'A', 'T', 'A', 'N', 'D', 'A', 'P', '-', 'B', 'U', 'O', 'N', 'D', 'A', 'P', '-', 'M', 'U', 'O', 'Y', 'D', 'A', 'P', '-', 'P', 'R', 'A', 'M', 'D', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'D', 'D', 'A', 'Y', 'A', 'N', 'N', 'A', 'D', 'E', 'C', 'E', 'M', 'B', 'E', 'R', 'D', 'E', 'C', 'R', 'E', 'A', 'S', 'E', 'D', 'E', 'L', 'E', 'T', 'I', 'O', 'N', 'D', 'E', 'L', 'I', 'V', 'E', 'R', 'Y', 'D', 'E', 'N', 'A', 'R', 'I', 'U', 'S', 'D', 'E', 'R', 'E', 'L', 'I', 'C', 'T', 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'S', 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'U', 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', 'D', 'I', 'A', 'M', 'E', 'T', 'E', 'R', 'D', 'I', 'A', 'M', 'O', 'N', 'D', 'S', 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'I', 'D', 'I', 'A', 'T', 'O', 'N', 'O', 'N', 'D', 'I', 'F', 'O', 'N', 'I', 'A', 'S', 'D', 'I', 'G', 'O', 'R', 'G', 'O', 'N', 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'A', 'D', 'I', 'R', 'E', 'C', 'T', 'L', 'Y', 'D', 'I', 'S', 'A', 'B', 'L', 'E', 'D', 'D', 'I', 'S', 'P', 'U', 'T', 'E', 'D', 'D', 'I', 'S', 'S', 'O', 'L', 'V', 'E', 'D', 'I', 'V', 'I', 'D', 'E', 'R', 'S', 'D', 'I', 'V', 'I', 'S', 'I', 'O', 'N', 'D', 'O', 'C', 'U', 'M', 'E', 'N', 'T', 'D', 'O', 'D', 'E', 'K', 'A', 'T', 'A', 'D', 'O', 'T', 'S', '-', '1', '2', '3', 'D', 'O', 'T', 'S', '-', '1', '2', '4', 'D', 'O', 'T', 'S', '-', '1', '2', '5', 'D', 'O', 'T', 'S', '-', '1', '2', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', 'D', 'O', 'T', 'S', '-', '1', '3', '5', 'D', 'O', 'T', 'S', '-', '1', '3', '6', 'D', 'O', 'T', 'S', '-', '1', '3', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '5', 'D', 'O', 'T', 'S', '-', '1', '4', '6', 'D', 'O', 'T', 'S', '-', '1', '4', '7', 'D', 'O', 'T', 'S', '-', '1', '4', '8', 'D', 'O', 'T', 'S', '-', '1', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', 'D', 'O', 'T', 'S', '-', '2', '3', '5', 'D', 'O', 'T', 'S', '-', '2', '3', '6', 'D', 'O', 'T', 'S', '-', '2', '3', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '5', 'D', 'O', 'T', 'S', '-', '2', '4', '6', 'D', 'O', 'T', 'S', '-', '2', '4', '7', 'D', 'O', 'T', 'S', '-', '2', '4', '8', 'D', 'O', 'T', 'S', '-', '2', '5', '6', 'D', 'O', 'T', 'S', '-', '2', '5', '7', 'D', 'O', 'T', 'S', '-', '2', '5', '8', 'D', 'O', 'T', 'S', '-', '2', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '5', 'D', 'O', 'T', 'S', '-', '3', '4', '6', 'D', 'O', 'T', 'S', '-', '3', '4', '7', 'D', 'O', 'T', 'S', '-', '3', '4', '8', 'D', 'O', 'T', 'S', '-', '3', '5', '6', 'D', 'O', 'T', 'S', '-', '3', '5', '7', 'D', 'O', 'T', 'S', '-', '3', '5', '8', 'D', 'O', 'T', 'S', '-', '3', '6', '7', 'D', 'O', 'T', 'S', '-', '3', '6', '8', 'D', 'O', 'T', 'S', '-', '3', '7', '8', 'D', 'O', 'T', 'S', '-', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '6', '7', '8', 'D', 'O', 'T', 'T', 'E', 'D', '-', 'L', 'D', 'O', 'T', 'T', 'E', 'D', '-', 'N', 'D', 'O', 'T', 'T', 'E', 'D', '-', 'P', 'D', 'O', 'U', 'G', 'H', 'N', 'U', 'T', 'D', 'R', 'A', 'C', 'H', 'M', 'A', 'S', 'D', 'R', 'A', 'F', 'T', 'I', 'N', 'G', 'D', 'R', 'A', 'U', 'G', 'H', 'T', 'S', 'D', 'R', 'A', 'W', 'I', 'N', 'G', 'S', 'D', 'R', 'O', 'O', 'L', 'I', 'N', 'G', 'D', 'U', 'P', 'L', 'O', 'Y', 'A', 'N', 'D', 'U', 'R', 'A', 'T', 'I', 'O', 'N', 'D', 'U', 'S', 'H', 'E', 'N', 'N', 'A', 'D', 'V', 'I', 'S', 'V', 'A', 'R', 'A', 'E', 'G', 'Y', 'P', 'T', 'I', 'A', 'N', 'E', 'I', 'G', 'H', 'T', 'E', 'E', 'N', 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', 'E', 'L', 'E', 'P', 'H', 'A', 'N', 'T', 'E', 'L', 'L', 'I', 'P', 'S', 'I', 'S', 'E', 'L', 'L', 'I', 'P', 'T', 'I', 'C', 'E', 'M', 'P', 'H', 'A', 'S', 'I', 'S', 'E', 'M', 'P', 'H', 'A', 'T', 'I', 'C', 'E', 'N', 'T', 'E', 'R', 'I', 'N', 'G', 'E', 'N', 'V', 'E', 'L', 'O', 'P', 'E', 'E', 'P', 'E', 'G', 'E', 'R', 'M', 'A', 'E', 'S', 'U', 'K', 'U', 'U', 'D', 'O', 'E', 'T', 'E', 'R', 'N', 'I', 'T', 'Y', 'E', 'T', 'H', 'I', 'O', 'P', 'I', 'C', 'E', 'U', 'R', 'O', 'P', 'E', 'A', 'N', 'E', 'X', 'C', 'H', 'A', 'N', 'G', 'E', 'E', 'X', 'P', 'O', 'N', 'E', 'N', 'T', 'E', 'X', 'T', 'E', 'N', 'D', 'E', 'D', 'E', 'Y', 'E', 'B', 'R', 'O', 'W', 'S', 'F', 'A', 'T', 'H', 'A', 'T', 'A', 'N', 'F', 'E', 'B', 'R', 'U', 'A', 'R', 'Y', 'F', 'E', 'M', 'I', 'N', 'I', 'N', 'E', 'F', 'E', 'S', 'T', 'I', 'V', 'A', 'L', 'F', 'I', 'G', 'U', 'R', 'E', '-', '1', 'F', 'I', 'G', 'U', 'R', 'E', '-', '2', 'F', 'I', 'G', 'U', 'R', 'E', '-', '3', 'F', 'I', 'L', 'L', 'E', 'R', '-', '1', 'F', 'I', 'L', 'L', 'E', 'R', '-', '2', 'F', 'I', 'N', 'G', 'E', 'R', 'E', 'D', 'F', 'I', 'R', 'E', 'W', 'O', 'R', 'K', 'F', 'I', 'S', 'H', 'H', 'O', 'O', 'K', 'F', 'L', 'A', 'T', 'N', 'E', 'S', 'S', 'F', 'L', 'O', 'R', 'E', 'T', 'T', 'E', 'F', 'L', 'O', 'U', 'R', 'I', 'S', 'H', 'F', 'O', 'O', 'T', 'B', 'A', 'L', 'L', 'F', 'O', 'O', 'T', 'N', 'O', 'T', 'E', 'F', 'O', 'R', 'E', 'H', 'E', 'A', 'D', 'F', 'O', 'R', 'T', 'I', 'E', 'T', 'H', 'F', 'O', 'U', 'N', 'T', 'A', 'I', 'N', 'F', 'O', 'U', 'R', 'T', 'E', 'E', 'N', 'F', 'R', 'A', 'C', 'T', 'I', 'O', 'N', 'F', 'R', 'A', 'G', 'M', 'E', 'N', 'T', 'F', 'R', 'A', 'G', 'R', 'A', 'N', 'T', 'F', 'R', 'O', 'W', 'N', 'I', 'N', 'G', 'F', 'U', 'L', 'L', 'N', 'E', 'S', 'S', 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'G', 'A', 'R', 'S', 'H', 'U', 'N', 'I', 'G', 'A', 'U', 'N', 'T', 'L', 'E', 'T', 'G', 'E', 'M', 'I', 'N', 'A', 'T', 'E', 'G', 'E', 'N', 'I', 'T', 'I', 'V', 'E', 'G', 'E', 'O', 'R', 'G', 'I', 'A', 'N', 'G', 'H', 'E', 'U', 'G', 'H', 'E', 'N', 'G', 'R', 'A', 'P', 'H', 'E', 'M', 'E', 'G', 'R', 'I', 'N', 'N', 'I', 'N', 'G', 'G', 'U', 'J', 'A', 'R', 'A', 'T', 'I', 'G', 'U', 'R', 'M', 'U', 'K', 'H', 'I', 'H', 'A', 'N', '-', 'A', 'K', 'A', 'T', 'H', 'A', 'N', 'D', '-', 'C', 'U', 'P', 'H', 'A', 'N', 'D', 'B', 'A', 'L', 'L', 'H', 'A', 'N', 'G', 'Z', 'H', 'O', 'U', 'H', 'A', 'R', 'D', 'N', 'E', 'S', 'S', 'H', 'A', 'R', 'K', 'L', 'E', 'A', 'N', 'H', 'A', 'R', 'M', 'O', 'N', 'I', 'C', 'H', 'A', 'T', 'C', 'H', 'I', 'N', 'G', 'H', 'E', 'A', 'V', 'E', 'N', 'L', 'Y', 'H', 'E', 'X', 'A', 'G', 'R', 'A', 'M', 'H', 'E', 'X', 'I', 'F', 'O', 'R', 'M', 'H', 'I', 'B', 'I', 'S', 'C', 'U', 'S', 'H', 'I', 'G', 'H', '-', 'L', 'O', 'W', 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', 'H', 'I', 'S', 'T', 'O', 'R', 'I', 'C', 'H', 'O', 'N', 'E', 'Y', 'B', 'E', 'E', 'H', 'O', 'S', 'P', 'I', 'T', 'A', 'L', 'H', 'U', 'A', 'R', 'A', 'D', 'D', 'O', 'H', 'U', 'N', 'D', 'R', 'E', 'D', 'S', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'M', 'I', 'L', 'U', 'Y', 'A', 'N', 'N', 'A', 'I', 'M', 'I', 'F', 'O', 'N', 'O', 'N', 'I', 'M', 'P', 'E', 'R', 'I', 'A', 'L', 'I', 'N', 'C', 'O', 'M', 'I', 'N', 'G', 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', 'I', 'N', 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'N', 'F', 'I', 'N', 'I', 'T', 'Y', 'I', 'N', 'H', 'E', 'R', 'E', 'N', 'T', 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'L', 'I', 'N', 'T', 'E', 'R', 'E', 'S', 'T', 'I', 'N', 'T', 'E', 'R', 'I', 'O', 'R', 'I', 'N', 'V', 'E', 'R', 'T', 'E', 'D', 'I', 'O', 'T', 'I', 'F', 'I', 'E', 'D', 'I', 'R', 'U', 'Y', 'A', 'N', 'N', 'A', 'I', 'S', '-', 'P', 'I', 'L', 'L', 'A', 'I', 'S', 'O', 'L', 'A', 'T', 'E', 'D', 'J', 'A', 'P', 'A', 'N', 'E', 'S', 'E', 'J', 'A', 'V', 'A', 'N', 'E', 'S', 'E', 'J', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'J', 'O', 'Y', 'S', 'T', 'I', 'C', 'K', 'J', 'U', 'G', 'G', 'L', 'I', 'N', 'G', 'K', 'A', 'R', 'S', 'H', 'A', 'N', 'A', 'K', 'A', 'S', 'H', 'M', 'I', 'R', 'I', 'K', 'A', 'S', 'R', 'A', 'T', 'A', 'N', 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', 'K', 'A', 'T', 'H', 'I', 'S', 'T', 'I', 'K', 'E', 'Y', 'B', 'O', 'A', 'R', 'D', 'K', 'N', 'U', 'C', 'K', 'L', 'E', 'S', 'K', 'O', 'N', 'T', 'E', 'V', 'M', 'A', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', 'K', 'R', 'E', 'M', 'A', 'S', 'T', 'I', 'L', '-', 'S', 'H', 'A', 'P', 'E', 'D', 'L', 'A', 'N', 'G', 'U', 'A', 'G', 'E', 'L', 'A', 'T', 'I', 'N', 'A', 'T', 'E', 'L', 'A', 'U', 'G', 'H', 'I', 'N', 'G', 'L', 'E', 'E', 'R', 'A', 'E', 'W', 'A', 'L', 'E', 'N', 'G', 'T', 'H', '-', '1', 'L', 'E', 'N', 'G', 'T', 'H', '-', '2', 'L', 'E', 'N', 'G', 'T', 'H', '-', '3', 'L', 'E', 'N', 'G', 'T', 'H', '-', '4', 'L', 'E', 'N', 'G', 'T', 'H', '-', '5', 'L', 'E', 'N', 'G', 'T', 'H', '-', '6', 'L', 'E', 'N', 'G', 'T', 'H', '-', '7', 'L', 'I', 'G', 'A', 'T', 'I', 'N', 'G', 'L', 'I', 'G', 'A', 'T', 'U', 'R', 'E', 'L', 'I', 'P', 'S', 'T', 'I', 'C', 'K', 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', 'L', 'O', 'C', 'A', 'T', 'I', 'V', 'E', 'L', 'O', 'G', 'O', 'G', 'R', 'A', 'M', 'L', 'O', 'G', 'O', 'T', 'Y', 'P', 'E', 'L', 'O', 'L', 'L', 'I', 'P', 'O', 'P', 'L', 'O', 'R', 'R', 'A', 'I', 'N', 'E', 'L', 'O', 'S', 'S', 'L', 'E', 'S', 'S', 'M', 'A', 'E', 'M', 'K', 'P', 'E', 'N', 'M', 'A', 'E', 'M', 'V', 'E', 'U', 'X', 'M', 'A', 'H', 'A', 'J', 'A', 'N', 'I', 'M', 'A', 'H', 'A', 'P', 'A', 'K', 'H', 'M', 'A', 'I', 'M', 'A', 'L', 'A', 'I', 'M', 'A', 'I', 'Y', 'A', 'M', 'O', 'K', 'M', 'A', 'N', 'A', 'C', 'L', 'E', 'S', 'M', 'A', 'N', 'G', 'A', 'L', 'A', 'M', 'M', 'A', 'R', 'R', 'I', 'A', 'G', 'E', 'M', 'A', 'R', 'R', 'Y', 'I', 'N', 'G', 'M', 'A', 'R', 'T', 'Y', 'R', 'I', 'A', 'M', 'A', 'S', 'H', 'F', 'A', 'A', 'T', 'M', 'A', 'X', 'I', 'M', 'I', 'Z', 'E', 'M', 'B', 'E', 'E', 'K', 'E', 'E', 'T', 'M', 'B', 'I', 'R', 'I', 'E', 'E', 'N', 'M', 'E', 'A', 'S', 'U', 'R', 'E', 'D', 'M', 'E', 'D', 'I', 'C', 'I', 'N', 'E', 'M', 'E', 'M', '-', 'Q', 'O', 'P', 'H', 'M', 'E', 'R', 'O', 'I', 'T', 'I', 'C', 'M', 'E', 'T', 'R', 'E', 'T', 'E', 'S', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'M', 'I', 'L', 'I', 'T', 'A', 'R', 'Y', 'M', 'I', 'L', 'L', 'I', 'O', 'N', 'S', 'M', 'I', 'N', 'I', 'D', 'I', 'S', 'C', 'M', 'I', 'N', 'I', 'M', 'I', 'Z', 'E', 'M', 'I', 'N', 'I', 'S', 'T', 'E', 'R', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', 'M', 'O', 'H', 'A', 'M', 'M', 'A', 'D', 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', 'M', 'O', 'N', 'O', 'R', 'A', 'I', 'L', 'M', 'O', 'N', 'T', 'I', 'E', 'E', 'N', 'M', 'O', 'T', 'O', 'R', 'W', 'A', 'Y', 'M', 'O', 'U', 'N', 'T', 'A', 'I', 'N', 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', 'M', 'U', 'L', 'T', 'I', 'M', 'A', 'P', 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'E', 'M', 'U', 'L', 'T', 'I', 'S', 'E', 'T', 'M', 'U', 'S', 'H', 'R', 'O', 'O', 'M', 'N', 'A', 'N', 'S', 'A', 'N', 'A', 'Q', 'N', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'N', 'E', 'G', 'A', 'T', 'I', 'O', 'N', 'N', 'E', 'G', 'A', 'T', 'I', 'V', 'E', 'N', 'G', 'E', 'U', 'R', 'E', 'U', 'T', 'N', 'G', 'G', 'A', 'A', 'M', 'A', 'E', 'N', 'G', 'G', 'E', 'U', 'A', 'E', 'T', 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'M', 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'Q', 'N', 'I', 'K', 'H', 'A', 'H', 'I', 'T', 'N', 'I', 'N', 'E', 'T', 'E', 'E', 'N', 'N', 'J', 'E', 'U', 'A', 'E', 'N', 'A', 'N', 'O', '-', 'B', 'R', 'E', 'A', 'K', 'N', 'O', 'R', 'T', 'H', 'E', 'R', 'N', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'N', 'O', 'T', 'E', 'B', 'O', 'O', 'K', 'N', 'O', 'T', 'E', 'H', 'E', 'A', 'D', 'N', 'O', 'V', 'E', 'M', 'B', 'E', 'R', 'N', 'T', 'E', 'U', 'N', 'G', 'B', 'A', 'O', 'M', 'I', 'S', 'S', 'I', 'O', 'N', 'O', 'N', 'C', 'O', 'M', 'I', 'N', 'G', 'O', 'N', 'E', '-', 'L', 'I', 'N', 'E', 'O', 'P', 'E', 'R', 'A', 'T', 'O', 'R', 'O', 'P', 'P', 'O', 'S', 'I', 'N', 'G', 'O', 'R', 'I', 'G', 'I', 'N', 'A', 'L', 'O', 'R', 'N', 'A', 'M', 'E', 'N', 'T', 'O', 'R', 'T', 'H', 'O', 'D', 'O', 'X', 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', 'O', 'V', 'E', 'R', 'L', 'A', 'I', 'D', 'O', 'V', 'E', 'R', 'L', 'I', 'N', 'E', 'O', 'V', 'E', 'R', 'L', 'O', 'N', 'G', 'O', 'V', 'E', 'R', 'R', 'I', 'D', 'E', 'P', 'A', 'A', 'S', 'E', 'N', 'T', 'O', 'P', 'A', 'I', 'R', 'T', 'H', 'R', 'A', 'P', 'A', 'L', 'O', 'C', 'H', 'K', 'A', 'P', 'A', 'M', 'E', 'N', 'E', 'N', 'G', 'P', 'A', 'M', 'U', 'D', 'P', 'O', 'D', 'P', 'A', 'N', 'C', 'A', 'K', 'E', 'S', 'P', 'A', 'N', 'G', 'H', 'U', 'L', 'U', 'P', 'A', 'N', 'G', 'L', 'O', 'N', 'G', 'P', 'A', 'N', 'G', 'O', 'L', 'A', 'T', 'P', 'A', 'N', 'O', 'L', 'O', 'N', 'G', 'P', 'A', 'N', 'Y', 'A', 'K', 'R', 'A', 'P', 'A', 'N', 'Y', 'E', 'C', 'E', 'K', 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', 'P', 'A', 'R', 'I', 'C', 'H', 'O', 'N', 'P', 'A', 'R', 'T', 'H', 'I', 'A', 'N', 'P', 'A', 'S', 'A', 'N', 'G', 'A', 'N', 'P', 'A', 'S', 'S', 'P', 'O', 'R', 'T', 'P', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'P', 'E', 'D', 'E', 'S', 'T', 'A', 'L', 'P', 'E', 'L', 'A', 'S', 'T', 'O', 'N', 'P', 'E', 'N', 'T', 'A', 'G', 'O', 'N', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', 'P', 'E', 'R', 'S', 'O', 'N', 'A', 'L', 'P', 'E', 'T', 'A', 'L', 'L', 'E', 'D', 'P', 'H', 'A', 'A', 'R', 'K', 'A', 'A', 'P', 'H', 'A', 'G', 'S', '-', 'P', 'A', 'P', 'H', 'A', 'I', 'S', 'T', 'O', 'S', 'P', 'I', 'N', 'W', 'H', 'E', 'E', 'L', 'P', 'I', 'P', 'A', 'E', 'M', 'B', 'A', 'P', 'L', 'A', 'S', 'T', 'I', 'C', 'S', 'P', 'L', 'E', 'T', 'H', 'R', 'O', 'N', 'P', 'N', 'E', 'U', 'M', 'A', 'T', 'A', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'P', 'O', 'K', 'R', 'Y', 'T', 'I', 'E', 'P', 'O', 'R', 'T', 'A', 'B', 'L', 'E', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'P', 'O', 'W', 'D', 'E', 'R', 'E', 'D', 'P', 'R', 'A', 'M', '-', 'B', 'E', 'I', 'P', 'R', 'A', 'M', '-', 'P', 'I', 'I', 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'D', 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'S', 'P', 'R', 'E', 'G', 'N', 'A', 'N', 'T', 'P', 'R', 'E', 'V', 'I', 'O', 'U', 'S', 'P', 'R', 'I', 'N', 'C', 'E', 'S', 'S', 'P', 'R', 'O', 'F', 'O', 'U', 'N', 'D', 'P', 'R', 'O', 'G', 'R', 'E', 'S', 'S', 'P', 'R', 'O', 'P', 'E', 'R', 'T', 'Y', 'P', 'U', 'S', 'H', 'P', 'I', 'K', 'A', 'Q', 'A', 'I', 'R', 'T', 'H', 'R', 'A', 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', 'Q', 'U', 'A', 'N', 'T', 'I', 'T', 'Y', 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'S', 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', 'Q', 'U', 'I', 'N', 'C', 'U', 'N', 'X', 'R', 'E', 'C', 'E', 'I', 'V', 'E', 'R', 'R', 'E', 'C', 'O', 'R', 'D', 'E', 'R', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', 'R', 'E', 'F', 'O', 'R', 'M', 'E', 'D', 'R', 'E', 'G', 'I', 'O', 'N', 'A', 'L', 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'R', 'E', 'L', 'I', 'E', 'V', 'E', 'D', 'R', 'E', 'L', 'I', 'G', 'I', 'O', 'N', 'R', 'E', 'M', 'I', 'N', 'D', 'E', 'R', 'R', 'E', 'N', 'T', 'O', 'G', 'E', 'N', 'R', 'E', 'P', 'E', 'A', 'T', 'E', 'D', 'R', 'E', 'S', 'O', 'U', 'R', 'C', 'E', 'R', 'E', 'S', 'P', 'O', 'N', 'S', 'E', 'R', 'E', 'S', 'T', 'R', 'O', 'O', 'M', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', 'R', 'I', 'G', 'V', 'E', 'D', 'I', 'C', 'R', 'O', 'H', 'I', 'N', 'G', 'Y', 'A', 'R', 'O', 'M', 'A', 'N', 'I', 'A', 'N', 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'R', 'U', 'K', 'K', 'A', 'K', 'H', 'A', 'S', '-', 'S', 'H', 'A', 'P', 'E', 'D', 'S', 'A', 'I', 'L', 'B', 'O', 'A', 'T', 'S', 'A', 'L', 'T', 'I', 'L', 'L', 'O', 'S', 'A', 'N', 'T', 'I', 'I', 'M', 'U', 'S', 'A', 'N', 'Y', 'O', 'O', 'G', 'A', 'S', 'A', 'X', 'I', 'M', 'A', 'T', 'A', 'S', 'C', 'I', 'S', 'S', 'O', 'R', 'S', 'S', 'C', 'O', 'R', 'P', 'I', 'O', 'N', 'S', 'C', 'O', 'R', 'P', 'I', 'U', 'S', 'S', 'E', 'E', 'D', 'L', 'I', 'N', 'G', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', 'S', 'E', 'M', 'I', 'S', 'O', 'F', 'T', 'S', 'E', 'M', 'U', 'N', 'C', 'I', 'A', 'S', 'E', 'P', 'T', 'U', 'P', 'L', 'E', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', 'S', 'H', 'A', 'M', 'R', 'O', 'C', 'K', 'S', 'H', 'E', '-', 'G', 'O', 'A', 'T', 'S', 'H', 'E', 'S', 'H', 'L', 'A', 'M', 'S', 'H', 'O', 'O', 'T', 'I', 'N', 'G', 'S', 'H', 'O', 'P', 'P', 'I', 'N', 'G', 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', 'S', 'I', 'C', 'K', 'N', 'E', 'S', 'S', 'S', 'I', 'D', 'E', 'W', 'A', 'Y', 'S', 'S', 'I', 'M', 'A', 'N', 'S', 'I', 'S', 'S', 'I', 'N', 'U', 'S', 'O', 'I', 'D', 'S', 'I', 'X', '-', 'L', 'I', 'N', 'E', 'S', 'L', 'A', 'V', 'O', 'N', 'I', 'C', 'S', 'L', 'E', 'E', 'P', 'I', 'N', 'G', 'S', 'L', 'I', 'G', 'H', 'T', 'L', 'Y', 'S', 'M', 'I', 'R', 'K', 'I', 'N', 'G', 'S', 'N', 'E', 'E', 'Z', 'I', 'N', 'G', 'S', 'O', 'F', 'T', 'N', 'E', 'S', 'S', 'S', 'O', 'U', 'T', 'H', 'E', 'R', 'N', 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'R', 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'S', 'S', 'P', 'E', 'A', 'K', 'I', 'N', 'G', 'S', 'P', 'E', 'S', 'M', 'I', 'L', 'O', 'S', 'P', 'I', 'R', 'I', 'T', 'U', 'S', 'S', 'P', 'O', 'U', 'T', 'I', 'N', 'G', 'S', 'Q', 'U', 'E', 'E', 'Z', 'E', 'D', 'S', 'Q', 'U', 'I', 'G', 'G', 'L', 'E', 'S', 'Q', 'U', 'I', 'R', 'R', 'E', 'L', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', 'S', 'T', 'A', 'L', 'L', 'I', 'O', 'N', 'S', 'T', 'A', 'N', 'D', 'A', 'R', 'D', 'S', 'T', 'E', 'A', 'M', 'I', 'N', 'G', 'S', 'T', 'I', 'C', 'K', 'I', 'N', 'G', 'S', 'T', 'O', 'P', 'P', 'A', 'G', 'E', 'S', 'T', 'O', 'P', 'P', 'I', 'N', 'G', 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', 'S', 'T', 'R', 'A', 'I', 'N', 'E', 'R', 'S', 'T', 'R', 'A', 'T', 'I', 'A', 'N', 'S', 'T', 'R', 'E', 'A', 'M', 'E', 'R', 'S', 'T', 'R', 'E', 'N', 'G', 'T', 'H', 'S', 'T', 'R', 'I', 'C', 'T', 'L', 'Y', 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', 'S', 'T', 'R', 'O', 'K', 'E', '-', '2', 'S', 'T', 'R', 'O', 'K', 'E', '-', '3', 'S', 'T', 'R', 'O', 'K', 'E', '-', '4', 'S', 'T', 'R', 'O', 'K', 'E', '-', '5', 'S', 'T', 'R', 'O', 'K', 'E', '-', '6', 'S', 'T', 'R', 'O', 'K', 'E', '-', '7', 'S', 'T', 'R', 'O', 'K', 'E', '-', '8', 'S', 'T', 'R', 'O', 'K', 'E', '-', '9', 'S', 'U', 'B', 'G', 'R', 'O', 'U', 'P', 'S', 'U', 'C', 'C', 'E', 'E', 'D', 'S', 'S', 'U', 'I', 'T', 'A', 'B', 'L', 'E', 'S', 'U', 'P', 'E', 'R', 'S', 'E', 'T', 'S', 'U', 'R', 'R', 'O', 'U', 'N', 'D', 'S', 'W', 'A', 'P', 'P', 'I', 'N', 'G', 'S', 'W', 'I', 'M', 'M', 'I', 'N', 'G', 'S', 'Y', 'L', 'L', 'A', 'B', 'L', 'E', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '6', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '7', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '8', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '9', 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'Y', 'T', 'A', 'G', 'B', 'A', 'N', 'W', 'A', 'T', 'A', 'I', 'L', 'L', 'E', 'S', 'S', 'T', 'A', 'N', 'A', 'B', 'A', 'T', 'A', 'T', 'A', 'R', 'T', 'A', 'R', '-', '2', 'T', 'A', 'T', 'T', 'O', 'O', 'E', 'D', 'T', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'T', 'E', 'A', 'R', '-', 'O', 'F', 'F', 'T', 'E', 'S', 'S', 'A', 'R', 'O', 'N', 'T', 'E', 'T', 'A', 'R', 'T', 'O', 'S', 'T', 'E', 'T', 'R', 'A', 'P', 'L', 'I', 'T', 'H', 'E', 'S', 'P', 'I', 'A', 'N', 'T', 'H', 'I', 'N', 'K', 'I', 'N', 'G', 'T', 'H', 'I', 'R', 'T', 'E', 'E', 'N', 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'T', 'H', 'R', 'E', 'E', '-', 'E', 'M', 'T', 'H', 'R', 'O', 'W', 'I', 'N', 'G', 'T', 'H', 'U', 'R', 'I', 'S', 'A', 'Z', 'T', 'I', 'F', 'I', 'N', 'A', 'G', 'H', 'T', 'I', 'N', 'C', 'T', 'U', 'R', 'E', 'T', 'I', 'R', 'O', 'N', 'I', 'A', 'N', 'T', 'O', 'G', 'E', 'T', 'H', 'E', 'R', 'T', 'O', 'R', 'C', 'U', 'L', 'U', 'S', 'T', 'O', 'R', 'T', 'O', 'I', 'S', 'E', 'T', 'O', 'U', 'C', 'H', 'I', 'N', 'G', 'T', 'O', 'U', 'R', 'N', 'O', 'I', 'S', 'T', 'R', 'A', 'I', 'L', 'I', 'N', 'G', 'T', 'R', 'E', 'A', 'D', 'I', 'N', 'G', 'T', 'R', 'E', 'S', 'I', 'L', 'L', 'O', 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', 'T', 'R', 'I', 'C', 'O', 'L', 'O', 'N', 'T', 'R', 'I', 'S', 'I', 'M', 'O', 'U', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'N', 'T', 'R', 'O', 'P', 'I', 'C', 'A', 'L', 'T', 'R', 'U', 'M', 'P', '-', '1', '0', 'T', 'R', 'U', 'M', 'P', '-', '1', '1', 'T', 'R', 'U', 'M', 'P', '-', '1', '2', 'T', 'R', 'U', 'M', 'P', '-', '1', '3', 'T', 'R', 'U', 'M', 'P', '-', '1', '4', 'T', 'R', 'U', 'M', 'P', '-', '1', '5', 'T', 'R', 'U', 'M', 'P', '-', '1', '6', 'T', 'R', 'U', 'M', 'P', '-', '1', '7', 'T', 'R', 'U', 'M', 'P', '-', '1', '8', 'T', 'R', 'U', 'M', 'P', '-', '1', '9', 'T', 'R', 'U', 'M', 'P', '-', '2', '0', 'T', 'R', 'U', 'M', 'P', '-', '2', '1', 'T', 'R', 'Y', 'B', 'L', 'I', 'O', 'N', 'T', 'T', 'A', 'Y', 'A', 'N', 'N', 'A', 'T', 'T', 'U', 'D', 'D', 'A', 'A', 'G', 'T', 'V', 'I', 'M', 'A', 'D', 'U', 'R', 'T', 'W', 'E', 'L', 'F', 'T', 'H', 'S', 'T', 'W', 'I', 'S', 'T', 'I', 'N', 'G', 'T', 'W', 'O', '-', 'L', 'I', 'N', 'E', 'T', 'Y', 'P', 'E', '-', '1', '-', '2', 'U', '-', 'S', 'H', 'A', 'P', 'E', 'D', 'U', 'B', 'H', 'A', 'Y', 'A', 'T', 'O', 'U', 'G', 'A', 'R', 'I', 'T', 'I', 'C', 'U', 'I', 'L', 'L', 'E', 'A', 'N', 'N', 'U', 'M', 'B', 'R', 'E', 'L', 'L', 'A', 'U', 'N', 'A', 'M', 'U', 'S', 'E', 'D', 'U', 'N', 'D', 'E', 'R', 'B', 'A', 'R', 'U', 'N', 'D', 'E', 'R', 'D', 'O', 'T', 'U', 'N', 'D', 'E', 'R', 'T', 'I', 'E', 'V', 'A', 'S', 'T', 'N', 'E', 'S', 'S', 'V', 'E', 'R', 'S', 'I', 'C', 'L', 'E', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', 'V', 'E', 'U', 'A', 'E', 'P', 'E', 'N', 'V', 'I', 'E', 'W', 'D', 'A', 'T', 'A', 'W', 'A', 'N', 'D', 'E', 'R', 'E', 'R', 'W', 'A', 'N', 'G', 'K', 'U', 'O', 'Q', 'W', 'A', 'S', 'A', 'L', 'L', 'A', 'M', 'W', 'I', 'D', 'E', 'N', 'I', 'N', 'G', 'W', 'R', 'I', 'N', 'K', 'L', 'E', 'D', 'W', 'R', 'I', 'N', 'K', 'L', 'E', 'S', 'Y', 'A', 'M', 'A', 'K', 'K', 'A', 'N', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', 'Z', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'Z', 'W', 'A', 'R', 'A', 'K', 'A', 'Y', 'A', 'A', 'B', 'A', 'A', 'F', 'I', 'L', 'I', 'A', 'B', 'K', 'H', 'A', 'S', 'I', 'A', 'N', 'A', 'B', 'U', 'N', 'D', 'A', 'N', 'C', 'E', 'A', 'D', 'D', 'R', 'E', 'S', 'S', 'E', 'D', 'A', 'D', 'M', 'I', 'S', 'S', 'I', 'O', 'N', 'A', 'D', 'V', 'A', 'N', 'T', 'A', 'G', 'E', 'A', 'L', '-', 'L', 'A', 'K', 'U', 'N', 'A', 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'N', 'A', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'E', 'A', 'M', 'B', 'U', 'L', 'A', 'N', 'C', 'E', 'A', 'M', 'P', 'E', 'R', 'S', 'A', 'N', 'D', 'A', 'N', 'A', 'T', 'O', 'L', 'I', 'A', 'N', 'A', 'N', 'G', 'U', 'I', 'S', 'H', 'E', 'D', 'A', 'N', 'T', 'I', 'F', 'O', 'N', 'I', 'A', 'A', 'R', '-', 'R', 'A', 'H', 'E', 'E', 'M', 'A', 'R', '-', 'R', 'A', 'H', 'M', 'A', 'N', 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', 'A', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', 'A', 'S', 'S', 'E', 'R', 'T', 'I', 'O', 'N', 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', 'S', 'A', 'T', 'T', 'E', 'N', 'T', 'I', 'O', 'N', 'A', 'U', 'B', 'E', 'R', 'G', 'I', 'N', 'E', 'A', 'U', 'T', 'O', 'M', 'A', 'T', 'E', 'D', 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'S', 'H', 'B', 'A', 'C', 'K', 'S', 'P', 'A', 'C', 'E', 'B', 'A', 'D', 'M', 'I', 'N', 'T', 'O', 'N', 'B', 'A', 'L', 'L', 'P', 'O', 'I', 'N', 'T', 'B', 'E', 'G', 'I', 'N', 'N', 'I', 'N', 'G', 'B', 'H', 'A', 'I', 'K', 'S', 'U', 'K', 'I', 'B', 'I', 'C', 'Y', 'C', 'L', 'I', 'S', 'T', 'B', 'I', 'L', 'L', 'I', 'A', 'R', 'D', 'S', 'B', 'I', 'N', 'O', 'C', 'U', 'L', 'A', 'R', 'B', 'I', 'O', 'H', 'A', 'Z', 'A', 'R', 'D', 'B', 'I', 'S', 'E', 'C', 'T', 'I', 'N', 'G', 'B', 'I', 'S', 'M', 'I', 'L', 'L', 'A', 'H', 'B', 'L', 'A', 'C', 'K', 'F', 'O', 'O', 'T', 'B', 'O', 'O', 'M', 'E', 'R', 'A', 'N', 'G', 'B', 'R', 'A', 'C', 'K', 'E', 'T', 'E', 'D', 'B', 'R', 'A', 'N', 'C', 'H', 'I', 'N', 'G', 'B', 'R', 'I', 'E', 'F', 'C', 'A', 'S', 'E', 'B', 'U', 'I', 'L', 'D', 'I', 'N', 'G', 'S', 'B', 'U', 'T', 'T', 'E', 'R', 'F', 'L', 'Y', 'B', 'Y', 'Z', 'A', 'N', 'T', 'I', 'N', 'E', 'C', 'A', 'P', 'I', 'T', 'U', 'L', 'U', 'M', 'C', 'A', 'P', 'R', 'I', 'C', 'O', 'R', 'N', 'C', 'A', 'R', 'P', 'E', 'N', 'T', 'R', 'Y', 'C', 'A', 'R', 'T', 'R', 'I', 'D', 'G', 'E', 'C', 'A', 'R', 'T', 'W', 'H', 'E', 'E', 'L', 'C', 'A', 'R', 'Y', 'S', 'T', 'I', 'A', 'N', 'C', 'A', 'U', 'C', 'A', 'S', 'I', 'A', 'N', 'C', 'E', 'N', 'T', 'U', 'R', 'I', 'A', 'L', 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', 'C', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'C', 'H', 'E', 'Q', 'U', 'E', 'R', 'E', 'D', 'C', 'H', 'O', 'C', 'O', 'L', 'A', 'T', 'E', 'C', 'H', 'R', 'I', 'S', 'T', 'M', 'A', 'S', 'C', 'I', 'T', 'Y', 'S', 'C', 'A', 'P', 'E', 'C', 'L', 'A', 'M', 'S', 'H', 'E', 'L', 'L', 'C', 'L', 'A', 'S', 'S', 'I', 'C', 'A', 'L', 'C', 'L', 'I', 'P', 'B', 'O', 'A', 'R', 'D', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', 'C', 'L', 'O', 'S', 'E', 'N', 'E', 'S', 'S', 'C', 'O', 'L', 'L', 'I', 'S', 'I', 'O', 'N', 'C', 'O', 'M', 'B', 'I', 'N', 'I', 'N', 'G', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', 'D', 'C', 'O', 'M', 'P', 'U', 'T', 'E', 'R', 'S', 'C', 'O', 'N', 'G', 'R', 'U', 'E', 'N', 'T', 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'E', 'D', 'C', 'O', 'N', 'J', 'U', 'G', 'A', 'T', 'E', 'C', 'O', 'N', 'S', 'O', 'N', 'A', 'N', 'T', 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'C', 'Y', 'C', 'O', 'N', 'T', 'O', 'U', 'R', 'E', 'D', 'C', 'O', 'P', 'R', 'O', 'D', 'U', 'C', 'T', 'C', 'O', 'P', 'Y', 'R', 'I', 'G', 'H', 'T', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'T', 'S', 'C', 'R', 'O', 'C', 'O', 'D', 'I', 'L', 'E', 'C', 'R', 'O', 'I', 'S', 'S', 'A', 'N', 'T', 'C', 'R', 'U', 'C', 'I', 'F', 'O', 'R', 'M', 'C', 'U', 'A', 'T', 'R', 'I', 'L', 'L', 'O', 'C', 'U', 'N', 'E', 'I', 'F', 'O', 'R', 'M', 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', 'D', 'A', 'R', 'K', 'E', 'N', 'I', 'N', 'G', 'D', 'A', 'Y', '-', 'N', 'I', 'G', 'H', 'T', 'D', 'E', 'C', 'I', 'D', 'U', 'O', 'U', 'S', 'D', 'E', 'L', 'I', 'C', 'I', 'O', 'U', 'S', 'D', 'E', 'L', 'I', 'M', 'I', 'T', 'E', 'R', 'D', 'E', 'N', 'T', 'I', 'S', 'T', 'R', 'Y', 'D', 'E', 'P', 'A', 'R', 'T', 'I', 'N', 'G', 'D', 'E', 'P', 'A', 'R', 'T', 'U', 'R', 'E', 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'E', 'R', 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'S', 'D', 'I', 'A', 'L', 'E', 'C', 'T', '-', 'P', 'D', 'I', 'A', 'L', 'Y', 'T', 'I', 'K', 'A', 'D', 'I', 'A', 'T', 'O', 'N', 'I', 'K', 'I', 'D', 'I', 'F', 'T', 'O', 'G', 'G', 'O', 'S', 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'O', 'N', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '3', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '3', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '3', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '5', '6', '7', '8', 'D', 'O', 'W', 'N', 'W', 'A', 'R', 'D', 'S', 'D', 'R', 'O', 'M', 'E', 'D', 'A', 'R', 'Y', 'D', 'U', 'P', 'O', 'N', 'D', 'I', 'U', 'S', 'E', 'D', 'I', 'T', 'O', 'R', 'I', 'A', 'L', 'E', 'E', 'B', 'E', 'E', 'F', 'I', 'L', 'I', 'E', 'M', 'B', 'E', 'D', 'D', 'I', 'N', 'G', 'E', 'N', 'C', 'L', 'O', 'S', 'I', 'N', 'G', 'E', 'N', 'C', 'L', 'O', 'S', 'U', 'R', 'E', 'E', 'N', 'D', 'E', 'A', 'V', 'O', 'U', 'R', 'E', 'N', 'D', 'O', 'F', 'O', 'N', 'O', 'N', 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'D', 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'S', 'E', 'V', 'E', 'R', 'G', 'R', 'E', 'E', 'N', 'E', 'X', 'C', 'E', 'L', 'L', 'E', 'N', 'T', 'E', 'X', 'T', 'E', 'N', 'S', 'I', 'O', 'N', 'E', 'X', 'T', 'R', 'A', '-', 'L', 'O', 'W', 'E', 'X', 'T', 'R', 'E', 'M', 'E', 'L', 'Y', 'E', 'Y', 'B', 'E', 'Y', 'F', 'I', 'L', 'I', 'E', 'Y', 'E', 'L', 'A', 'S', 'H', 'E', 'S', 'F', 'A', 'C', 'S', 'I', 'M', 'I', 'L', 'E', 'F', 'A', 'N', 'E', 'R', 'O', 'S', 'I', 'S', 'F', 'E', 'U', 'F', 'E', 'U', 'A', 'E', 'T', 'F', 'I', 'N', 'A', 'N', 'C', 'I', 'A', 'L', 'F', 'I', 'R', 'E', 'W', 'O', 'R', 'K', 'S', 'F', 'I', 'V', 'E', '-', 'L', 'I', 'N', 'E', 'F', 'L', 'A', 'T', 'B', 'R', 'E', 'A', 'D', 'F', 'L', 'A', 'T', 'T', 'E', 'N', 'E', 'D', 'F', 'O', 'L', 'L', 'O', 'W', 'I', 'N', 'G', 'F', 'O', 'O', 'T', 'S', 'T', 'O', 'O', 'L', 'F', 'O', 'S', 'T', 'E', 'R', 'I', 'N', 'G', 'F', 'O', 'U', 'R', '-', 'L', 'I', 'N', 'E', 'F', 'R', 'E', 'T', 'B', 'O', 'A', 'R', 'D', 'F', 'R', 'I', 'C', 'A', 'T', 'I', 'V', 'E', 'F', 'U', 'L', 'L', 'W', 'I', 'D', 'T', 'H', 'G', 'A', 'T', 'H', 'E', 'R', 'I', 'N', 'G', 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', 'G', 'E', 'R', 'S', 'H', 'A', 'Y', 'I', 'M', 'G', 'H', 'E', 'U', 'A', 'E', 'R', 'A', 'E', 'G', 'L', 'I', 'S', 'S', 'A', 'N', 'D', 'O', 'G', 'N', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'G', 'O', 'R', 'G', 'O', 'T', 'E', 'R', 'I', 'G', 'R', 'A', 'V', 'E', 'Y', 'A', 'R', 'D', 'G', 'R', 'E', 'A', 'T', 'N', 'E', 'S', 'S', 'G', 'R', 'E', 'G', 'O', 'R', 'I', 'A', 'N', 'G', 'R', 'I', 'M', 'A', 'C', 'I', 'N', 'G', 'G', 'U', 'A', 'R', 'D', 'S', 'M', 'A', 'N', 'G', 'U', 'R', 'A', 'M', 'U', 'T', 'O', 'N', 'H', 'A', 'L', 'F', 'W', 'I', 'D', 'T', 'H', 'H', 'A', 'M', 'B', 'U', 'R', 'G', 'E', 'R', 'H', 'A', 'N', 'D', '-', 'C', 'L', 'A', 'W', 'H', 'A', 'N', 'D', '-', 'F', 'I', 'S', 'T', 'H', 'A', 'N', 'D', '-', 'F', 'L', 'A', 'T', 'H', 'A', 'N', 'D', '-', 'H', 'O', 'O', 'K', 'H', 'A', 'N', 'D', '-', 'O', 'V', 'A', 'L', 'H', 'A', 'N', 'D', 'S', 'H', 'A', 'K', 'E', 'H', 'E', 'A', 'D', 'P', 'H', 'O', 'N', 'E', 'H', 'E', 'A', 'D', 'S', 'T', 'O', 'N', 'E', 'H', 'E', 'K', 'U', 'T', 'A', 'A', 'R', 'U', 'H', 'E', 'R', 'M', 'I', 'T', 'I', 'A', 'N', 'H', 'O', 'U', 'R', 'G', 'L', 'A', 'S', 'S', 'H', 'U', 'N', 'G', 'A', 'R', 'I', 'A', 'N', 'I', 'C', 'H', 'I', 'M', 'A', 'T', 'O', 'S', 'I', 'D', 'E', 'N', 'T', 'I', 'C', 'A', 'L', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'L', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'A', 'I', 'N', 'C', 'L', 'U', 'D', 'I', 'N', 'G', 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', 'S', 'I', 'N', 'C', 'R', 'E', 'M', 'E', 'N', 'T', 'I', 'N', 'D', 'I', 'C', 'A', 'T', 'O', 'R', 'I', 'N', 'D', 'I', 'C', 'T', 'I', 'O', 'N', 'I', 'N', 'F', 'L', 'U', 'E', 'N', 'C', 'E', 'I', 'N', 'N', 'O', 'C', 'E', 'N', 'C', 'E', 'I', 'N', 'S', 'E', 'R', 'T', 'I', 'O', 'N', 'I', 'N', 'V', 'I', 'S', 'I', 'B', 'L', 'E', 'I', 'R', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', 'I', 'S', 'E', 'N', '-', 'I', 'S', 'E', 'N', 'I', 'S', 'O', 'S', 'C', 'E', 'L', 'E', 'S', 'I', 'T', 'E', 'R', 'A', 'T', 'I', 'O', 'N', 'J', 'E', 'R', 'U', 'S', 'A', 'L', 'E', 'M', 'J', 'O', 'N', 'G', 'S', 'E', 'O', 'N', 'G', 'J', 'U', 'N', 'G', 'S', 'E', 'O', 'N', 'G', 'K', 'A', 'T', 'A', 'V', 'A', 'S', 'M', 'A', 'K', 'E', 'M', 'P', 'H', 'R', 'E', 'N', 'G', 'K', 'E', 'N', 'T', 'I', 'M', 'A', 'T', 'A', 'K', 'H', 'U', 'D', 'A', 'W', 'A', 'D', 'I', 'K', 'H', 'U', 'E', 'N', '-', 'L', 'U', 'E', 'K', 'I', 'R', 'O', 'W', 'A', 'T', 'T', 'O', 'K', 'I', 'W', 'I', 'F', 'R', 'U', 'I', 'T', 'K', 'R', 'A', 'T', 'I', 'M', 'A', 'T', 'A', 'K', 'U', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', 'L', 'A', 'B', 'O', 'U', 'R', 'I', 'N', 'G', 'L', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', 'L', 'E', 'F', 'T', '-', 'H', 'A', 'N', 'D', 'L', 'E', 'F', 'T', '-', 'S', 'I', 'D', 'E', 'L', 'E', 'F', 'T', '-', 'S', 'T', 'E', 'M', 'L', 'E', 'F', 'T', 'W', 'A', 'R', 'D', 'S', 'L', 'E', 'S', 'S', '-', 'T', 'H', 'A', 'N', 'L', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'L', 'I', 'A', 'B', 'I', 'L', 'I', 'T', 'Y', 'L', 'I', 'G', 'H', 'T', 'N', 'I', 'N', 'G', 'L', 'O', 'D', 'E', 'S', 'T', 'O', 'N', 'E', 'M', 'A', 'E', 'M', 'G', 'B', 'I', 'E', 'E', 'M', 'A', 'H', 'A', 'P', 'R', 'A', 'N', 'A', 'M', 'A', 'I', 'T', 'A', 'I', 'K', 'H', 'U', 'M', 'A', 'L', 'A', 'Y', 'A', 'L', 'A', 'M', 'M', 'A', 'R', 'C', 'A', 'S', 'I', 'T', 'E', 'M', 'A', 'S', 'C', 'U', 'L', 'I', 'N', 'E', 'M', 'A', 'T', 'E', 'R', 'I', 'A', 'L', 'S', 'M', 'E', 'G', 'A', 'P', 'H', 'O', 'N', 'E', 'M', 'E', 'R', 'I', 'D', 'I', 'A', 'N', 'S', 'M', 'E', 'S', 'S', 'E', 'N', 'I', 'A', 'N', 'M', 'E', 'T', 'O', 'B', 'E', 'L', 'U', 'S', 'M', 'I', 'D', '-', 'L', 'E', 'V', 'E', 'L', 'M', 'I', 'R', 'I', 'B', 'A', 'A', 'R', 'U', 'M', 'O', 'N', 'G', 'O', 'L', 'I', 'A', 'N', 'M', 'O', 'N', 'O', 'C', 'U', 'L', 'A', 'R', 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'P', 'H', 'M', 'O', 'N', 'O', 'S', 'P', 'A', 'C', 'E', 'M', 'O', 'U', 'N', 'T', 'A', 'I', 'N', 'S', 'M', 'U', 'K', 'P', 'H', 'R', 'E', 'N', 'G', 'M', 'U', 'U', 'R', 'D', 'H', 'A', 'J', 'A', 'N', 'A', 'B', 'A', 'T', 'A', 'E', 'A', 'N', 'N', 'A', 'U', 'S', 'E', 'A', 'T', 'E', 'D', 'N', 'D', 'E', 'U', 'A', 'E', 'R', 'E', 'E', 'N', 'E', 'T', 'W', 'O', 'R', 'K', 'E', 'D', 'N', 'E', 'W', 'S', 'P', 'A', 'P', 'E', 'R', 'N', 'I', 'G', 'G', 'A', 'H', 'I', 'T', 'A', 'N', 'I', 'G', 'I', 'D', 'A', 'E', 'S', 'H', 'N', 'I', 'G', 'I', 'D', 'A', 'M', 'I', 'N', 'N', 'I', 'H', 'S', 'H', 'V', 'A', 'S', 'A', 'N', 'O', 'R', 'T', 'H', 'W', 'E', 'S', 'T', 'N', 'U', 'M', 'E', 'R', 'A', 'T', 'O', 'R', 'O', 'A', 'B', 'O', 'A', 'F', 'I', 'L', 'I', 'O', 'C', 'C', 'L', 'U', 'S', 'I', 'O', 'N', 'O', 'C', 'T', 'A', 'G', 'O', 'N', 'A', 'L', 'O', 'O', 'B', 'O', 'O', 'F', 'I', 'L', 'I', 'O', 'P', 'H', 'I', 'U', 'C', 'H', 'U', 'S', 'O', 'R', 'N', 'A', 'M', 'E', 'N', 'T', 'S', 'O', 'Y', 'R', 'A', 'N', 'I', 'S', 'M', 'A', 'P', 'A', 'A', '-', 'P', 'I', 'L', 'L', 'A', 'P', 'A', 'I', 'Y', 'A', 'N', 'N', 'O', 'I', 'P', 'A', 'L', 'M', 'Y', 'R', 'E', 'N', 'E', 'P', 'A', 'M', 'I', 'N', 'G', 'K', 'A', 'L', 'P', 'A', 'M', 'U', 'N', 'G', 'K', 'A', 'H', 'P', 'A', 'N', 'G', 'L', 'A', 'Y', 'A', 'R', 'P', 'A', 'N', 'G', 'W', 'I', 'S', 'A', 'D', 'P', 'A', 'N', 'Y', 'A', 'N', 'G', 'G', 'A', 'P', 'A', 'P', 'E', 'R', 'C', 'L', 'I', 'P', 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', 'P', 'A', 'S', 'S', 'E', 'N', 'G', 'E', 'R', 'P', 'E', 'N', 'T', 'A', 'G', 'R', 'A', 'M', 'P', 'E', 'N', 'T', 'A', 'S', 'E', 'M', 'E', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', 'P', 'E', 'R', 'M', 'A', 'N', 'E', 'N', 'T', 'P', 'I', 'A', 'S', 'U', 'T', 'O', 'R', 'U', 'P', 'I', 'N', 'E', 'A', 'P', 'P', 'L', 'E', 'P', 'I', 'T', 'C', 'H', 'F', 'O', 'R', 'K', 'P', 'I', 'Z', 'Z', 'I', 'C', 'A', 'T', 'O', 'P', 'O', 'R', 'R', 'E', 'C', 'T', 'U', 'S', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'S', 'P', 'R', 'A', 'M', '-', 'B', 'U', 'O', 'N', 'P', 'R', 'A', 'M', '-', 'M', 'U', 'O', 'Y', 'P', 'R', 'E', 'C', 'E', 'D', 'I', 'N', 'G', 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'O', 'R', 'P', 'R', 'O', 'L', 'O', 'N', 'G', 'E', 'D', 'P', 'R', 'O', 'P', 'E', 'L', 'L', 'E', 'R', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', 'Q', 'U', 'A', 'D', 'C', 'O', 'L', 'O', 'N', 'Q', 'U', 'A', 'D', 'R', 'U', 'P', 'L', 'E', 'Q', 'U', 'I', 'N', 'A', 'R', 'I', 'U', 'S', 'Q', 'U', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'Q', 'U', 'S', 'H', 'S', 'H', 'A', 'Y', 'A', 'R', 'E', 'A', 'L', 'G', 'A', 'R', '-', '2', 'R', 'E', 'C', 'E', 'P', 'T', 'I', 'V', 'E', 'R', 'E', 'C', 'O', 'R', 'D', 'I', 'N', 'G', 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'L', 'E', 'R', 'E', 'C', 'Y', 'C', 'L', 'I', 'N', 'G', 'R', 'E', 'F', 'E', 'R', 'E', 'N', 'C', 'E', 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '2', 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '3', 'R', 'E', 'G', 'U', 'L', 'U', 'S', '-', '4', 'R', 'E', 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'R', 'E', 'R', 'E', 'N', 'G', 'G', 'A', 'N', 'R', 'E', 'S', 'I', 'D', 'E', 'N', 'C', 'E', 'R', 'E', 'S', 'U', 'P', 'I', 'N', 'U', 'S', 'R', 'E', 'T', 'R', 'O', 'F', 'L', 'E', 'X', 'R', 'E', 'V', 'O', 'L', 'V', 'I', 'N', 'G', 'R', 'I', 'G', 'H', 'T', 'H', 'A', 'N', 'D', 'R', 'O', 'L', 'L', 'E', 'D', '-', 'U', 'P', 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'S', 'R', 'U', 'D', 'I', 'M', 'E', 'N', 'T', 'A', 'S', 'A', 'M', 'A', 'R', 'I', 'T', 'A', 'N', 'S', 'A', 'T', 'E', 'L', 'L', 'I', 'T', 'E', 'S', 'A', 'V', 'O', 'U', 'R', 'I', 'N', 'G', 'S', 'A', 'X', 'O', 'P', 'H', 'O', 'N', 'E', 'S', 'C', 'A', 'N', 'D', 'I', 'C', 'U', 'S', 'S', 'C', 'H', 'R', 'O', 'E', 'D', 'E', 'R', 'S', 'C', 'R', 'E', 'A', 'M', 'I', 'N', 'G', 'S', 'E', 'B', 'A', 'T', 'B', 'E', 'I', 'T', 'S', 'E', 'M', 'I', 'C', 'O', 'L', 'O', 'N', 'S', 'E', 'M', 'I', 'V', 'O', 'W', 'E', 'L', 'S', 'E', 'P', 'A', 'R', 'A', 'T', 'O', 'R', 'S', 'E', 'P', 'T', 'E', 'M', 'B', 'E', 'R', 'S', 'E', 'V', 'E', 'N', 'T', 'E', 'E', 'N', 'S', 'E', 'V', 'E', 'R', 'A', 'N', 'C', 'E', 'S', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', 'S', 'H', 'E', 'U', 'A', 'E', 'Q', 'T', 'U', 'S', 'H', 'O', 'R', 'T', 'C', 'A', 'K', 'E', 'S', 'H', 'O', 'R', 'T', 'E', 'N', 'E', 'R', 'S', 'H', 'O', 'R', 'T', 'H', 'A', 'N', 'D', 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', 'S', 'N', 'O', 'W', 'F', 'L', 'A', 'K', 'E', 'S', 'P', 'A', 'G', 'H', 'E', 'T', 'T', 'I', 'S', 'P', 'A', 'R', 'K', 'L', 'I', 'N', 'G', 'S', 'P', 'E', 'E', 'D', 'B', 'O', 'A', 'T', 'S', 'P', 'H', 'E', 'R', 'I', 'C', 'A', 'L', 'S', 'P', 'L', 'A', 'S', 'H', 'I', 'N', 'G', 'S', 'P', 'L', 'I', 'T', 'T', 'I', 'N', 'G', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'S', 'T', 'O', 'P', 'W', 'A', 'T', 'C', 'H', 'S', 'T', 'R', 'A', 'T', 'U', 'M', '-', '2', 'S', 'T', 'R', 'E', 'T', 'C', 'H', 'E', 'D', 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '0', 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '1', 'S', 'T', 'U', 'C', 'K', '-', 'O', 'U', 'T', 'S', 'U', 'B', 'J', 'O', 'I', 'N', 'E', 'D', 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', 'S', 'U', 'B', 'L', 'I', 'N', 'E', 'A', 'R', 'S', 'U', 'B', 'S', 'C', 'R', 'I', 'P', 'T', 'S', 'U', 'M', 'M', 'A', 'T', 'I', 'O', 'N', 'S', 'U', 'N', 'D', 'A', 'N', 'E', 'S', 'E', 'S', 'U', 'N', 'F', 'L', 'O', 'W', 'E', 'R', 'S', 'U', 'P', 'E', 'R', 'V', 'I', 'S', 'E', 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', 'S', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '0', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '1', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '3', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '4', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '5', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '6', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '7', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '8', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '9', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '0', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '1', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '3', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '4', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '5', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '6', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '7', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '9', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '0', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '6', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '7', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '8', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '9', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '0', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '3', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '5', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '7', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '8', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '9', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '0', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '1', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '2', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '3', 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '4', 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'I', 'C', 'S', 'Y', 'N', 'A', 'G', 'O', 'G', 'U', 'E', 'S', 'Y', 'N', 'D', 'E', 'S', 'M', 'O', 'S', 'S', 'Y', 'R', 'M', 'A', 'T', 'I', 'K', 'I', 'T', 'A', 'K', 'H', 'A', 'L', 'L', 'U', 'S', 'T', 'A', 'N', 'G', 'E', 'R', 'I', 'N', 'E', 'T', 'E', 'L', 'E', 'G', 'R', 'A', 'P', 'H', 'T', 'E', 'L', 'E', 'P', 'H', 'O', 'N', 'E', 'T', 'E', 'L', 'E', 'S', 'C', 'O', 'P', 'E', 'T', 'E', 'T', 'R', 'A', 'G', 'R', 'A', 'M', 'T', 'E', 'T', 'R', 'A', 'S', 'E', 'M', 'E', 'T', 'E', 'U', 'T', 'E', 'U', 'W', 'E', 'N', 'T', 'H', 'E', 'R', 'E', 'F', 'O', 'R', 'E', 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'S', 'T', 'O', 'U', 'C', 'H', 'T', 'O', 'N', 'E', 'T', 'R', 'A', 'C', 'K', 'B', 'A', 'L', 'L', 'T', 'R', 'A', 'P', 'E', 'Z', 'I', 'U', 'M', 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '1', 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '2', 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '3', 'T', 'R', 'I', 'F', 'O', 'N', 'I', 'A', 'S', 'T', 'R', 'I', 'G', 'O', 'R', 'G', 'O', 'N', 'T', 'R', 'I', 'L', 'L', 'I', 'O', 'N', 'S', 'T', 'R', 'U', 'N', 'C', 'A', 'T', 'E', 'D', 'T', 'U', 'K', 'W', 'E', 'N', 'T', 'I', 'S', 'T', 'U', 'R', 'N', 'S', 'T', 'I', 'L', 'E', 'T', 'U', 'T', 'E', 'Y', 'A', 'S', 'A', 'T', 'T', 'W', 'E', 'N', 'T', 'I', 'E', 'T', 'H', 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', 'U', 'N', 'B', 'L', 'E', 'N', 'D', 'E', 'D', 'U', 'N', 'D', 'E', 'R', 'L', 'I', 'N', 'E', 'U', 'N', 'I', 'V', 'E', 'R', 'S', 'A', 'L', 'U', 'N', 'M', 'A', 'R', 'R', 'I', 'E', 'D', 'V', 'A', 'R', 'I', 'A', 'T', 'I', 'O', 'N', 'V', 'E', 'R', 'D', 'I', 'G', 'R', 'I', 'S', 'V', 'I', 'B', 'R', 'A', 'T', 'I', 'O', 'N', 'V', 'I', 'N', 'E', 'G', 'A', 'R', '-', '2', 'V', 'I', 'N', 'E', 'G', 'A', 'R', '-', '3', 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'Y', 'A', 'V', 'I', 'T', 'R', 'I', 'O', 'L', '-', '2', 'V', 'O', 'I', 'C', 'E', 'L', 'E', 'S', 'S', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'W', 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', 'W', 'E', 'S', 'T', '-', 'C', 'R', 'E', 'E', 'W', 'I', 'A', 'N', 'G', 'W', 'A', 'A', 'K', 'W', 'O', 'R', 'D', 'S', 'P', 'A', 'C', 'E', 'W', 'R', 'E', 'S', 'T', 'L', 'E', 'R', 'S', 'Y', 'P', 'O', 'K', 'R', 'I', 'S', 'I', 'S', 'A', 'C', 'R', 'O', 'P', 'H', 'O', 'N', 'I', 'C', 'A', 'E', 'D', 'A', '-', 'P', 'I', 'L', 'L', 'A', 'A', 'E', 'L', 'A', '-', 'P', 'I', 'L', 'L', 'A', 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'E', 'D', 'A', 'L', 'C', 'H', 'E', 'M', 'I', 'C', 'A', 'L', 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'A', 'N', 'A', 'A', 'N', 'G', 'K', 'H', 'A', 'N', 'K', 'H', 'U', 'A', 'N', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'M', 'A', 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'Y', '-', '2', 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', 'Y', 'A', 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'I', 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'S', 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'P', 'H', 'E', 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', 'E', 'S', 'A', 'Q', 'U', 'A', 'F', 'O', 'R', 'T', 'I', 'S', 'A', 'R', 'P', 'E', 'G', 'G', 'I', 'A', 'T', 'O', 'A', 'R', 'R', 'O', 'W', '-', 'T', 'A', 'I', 'L', 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', 'S', 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'I', 'O', 'N', 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'C', 'U', 'S', 'A', 'S', 'T', 'O', 'N', 'I', 'S', 'H', 'E', 'D', 'A', 'T', 'H', 'A', 'P', 'A', 'S', 'C', 'A', 'N', 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', 'A', 'U', 'T', 'O', 'M', 'O', 'B', 'I', 'L', 'E', 'B', 'A', 'R', 'I', 'Y', 'O', 'O', 'S', 'A', 'N', 'B', 'A', 'S', 'K', 'E', 'T', 'B', 'A', 'L', 'L', 'B', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', 'B', 'I', 'B', 'L', 'E', '-', 'C', 'R', 'E', 'E', 'B', 'R', 'I', 'G', 'H', 'T', 'N', 'E', 'S', 'S', 'C', 'A', 'L', 'C', 'U', 'L', 'A', 'T', 'O', 'R', 'C', 'E', 'N', 'T', 'R', 'E', 'L', 'I', 'N', 'E', 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', 'S', 'C', 'I', 'R', 'C', 'U', 'M', 'F', 'L', 'E', 'X', 'C', 'O', 'M', 'M', 'E', 'R', 'C', 'I', 'A', 'L', 'C', 'O', 'M', 'P', 'L', 'E', 'M', 'E', 'N', 'T', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'I', 'O', 'N', 'C', 'O', 'M', 'P', 'L', 'I', 'A', 'N', 'C', 'E', 'C', 'O', 'M', 'P', 'R', 'E', 'S', 'S', 'E', 'D', 'C', 'O', 'N', 'F', 'O', 'U', 'N', 'D', 'E', 'D', 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'I', 'N', 'G', 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'I', 'N', 'G', 'C', 'O', 'N', 'T', 'E', 'N', 'T', 'I', 'O', 'N', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'I', 'N', 'G', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', 'C', 'O', 'N', 'V', 'E', 'R', 'G', 'I', 'N', 'G', 'C', 'R', 'O', 'S', 'S', 'B', 'O', 'N', 'E', 'S', 'C', 'R', 'O', 'S', 'S', 'H', 'A', 'T', 'C', 'H', 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '2', 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '3', 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '4', 'C', 'R', 'U', 'C', 'I', 'B', 'L', 'E', '-', '5', 'D', 'A', 'G', 'B', 'A', 'S', 'I', 'N', 'N', 'A', 'D', 'E', 'C', 'O', 'R', 'A', 'T', 'I', 'O', 'N', 'D', 'E', 'C', 'O', 'R', 'A', 'T', 'I', 'V', 'E', 'D', 'E', 'F', 'I', 'N', 'I', 'T', 'I', 'O', 'N', 'D', 'E', 'P', 'A', 'R', 'T', 'M', 'E', 'N', 'T', 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', 'D', 'E', 'V', 'A', 'N', 'A', 'G', 'A', 'R', 'I', 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'C', 'E', 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'Y', 'D', 'I', 'S', 'P', 'E', 'R', 'S', 'I', 'O', 'N', 'D', 'I', 'S', 'S', 'O', 'L', 'V', 'E', '-', '2', 'D', 'I', 'S', 'T', 'O', 'R', 'T', 'I', 'O', 'N', 'D', 'I', 'V', 'E', 'R', 'G', 'E', 'N', 'C', 'E', 'D', 'I', 'V', 'I', 'N', 'A', 'T', 'I', 'O', 'N', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', '8', 'D', 'R', 'U', 'M', 'S', 'T', 'I', 'C', 'K', 'S', 'E', 'I', 'G', 'H', 'T', 'I', 'E', 'T', 'H', 'S', 'E', 'K', 'S', 'T', 'R', 'E', 'P', 'T', 'O', 'N', 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', 'A', 'L', 'E', 'M', 'B', 'R', 'O', 'I', 'D', 'E', 'R', 'Y', 'E', 'N', 'A', 'R', 'M', 'O', 'N', 'I', 'O', 'S', 'E', 'N', 'C', 'L', 'O', 'S', 'U', 'R', 'E', 'S', 'E', 'N', 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', 'E', 'N', 'T', '-', 'S', 'H', 'A', 'P', 'E', 'D', 'E', 'N', 'T', 'E', 'R', 'P', 'R', 'I', 'S', 'E', 'E', 'N', 'T', 'H', 'U', 'S', 'I', 'A', 'S', 'M', 'E', 'P', 'E', 'N', 'T', 'H', 'E', 'T', 'I', 'C', 'E', 'P', 'I', 'D', 'A', 'U', 'R', 'E', 'A', 'N', 'E', 'P', 'I', 'G', 'R', 'A', 'P', 'H', 'I', 'C', 'E', 'Q', 'U', 'I', 'V', 'A', 'L', 'E', 'N', 'T', 'E', 'X', 'C', 'I', 'T', 'E', 'M', 'E', 'N', 'T', 'E', 'X', 'H', 'A', 'U', 'S', 'T', 'I', 'O', 'N', 'E', 'X', 'T', 'R', 'A', '-', 'H', 'I', 'G', 'H', 'E', 'Y', 'E', 'G', 'L', 'A', 'S', 'S', 'E', 'S', 'F', 'A', 'H', 'R', 'E', 'N', 'H', 'E', 'I', 'T', 'F', 'E', 'L', 'L', 'O', 'W', 'S', 'H', 'I', 'P', 'F', 'I', 'X', 'E', 'D', '-', 'F', 'O', 'R', 'M', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'F', 'L', 'U', 'T', 'T', 'E', 'R', 'I', 'N', 'G', 'F', 'O', 'O', 'T', 'P', 'R', 'I', 'N', 'T', 'S', 'F', 'O', 'R', 'M', 'A', 'T', 'T', 'I', 'N', 'G', 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'A', 'L', 'G', 'B', 'A', 'K', 'U', 'R', 'U', 'N', 'E', 'N', 'G', 'E', 'M', 'I', 'N', 'A', 'T', 'I', 'O', 'N', 'G', 'L', 'A', 'G', 'O', 'L', 'I', 'T', 'I', 'C', 'G', 'O', 'R', 'T', 'H', 'M', 'I', 'K', 'O', 'N', 'G', 'R', 'A', 'D', 'U', 'A', 'T', 'I', 'O', 'N', 'H', 'A', 'N', 'D', '-', 'A', 'N', 'G', 'L', 'E', 'H', 'A', 'N', 'D', '-', 'H', 'I', 'N', 'G', 'E', 'H', 'E', 'A', 'D', 'S', 'T', 'R', 'O', 'K', 'E', 'H', 'E', 'L', 'I', 'C', 'O', 'P', 'T', 'E', 'R', 'H', 'E', 'R', 'M', 'I', 'O', 'N', 'I', 'A', 'N', 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', 'H', 'I', 'E', 'U', 'H', '-', 'S', 'I', 'O', 'S', 'H', 'I', 'G', 'H', '-', 'S', 'P', 'E', 'E', 'D', 'H', 'O', 'M', 'O', 'T', 'H', 'E', 'T', 'I', 'C', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', 'H', 'Y', 'S', 'T', 'E', 'R', 'E', 'S', 'I', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', 'I', 'M', 'I', 'D', 'I', 'A', 'R', 'G', 'O', 'N', 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'O', 'N', 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', 'I', 'N', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', 'I', 'N', 'D', 'U', 'S', 'T', 'R', 'I', 'A', 'L', 'I', 'N', 'T', 'E', 'R', 'L', 'A', 'C', 'E', 'D', 'K', 'E', 'U', 'A', 'E', 'T', 'M', 'E', 'U', 'N', 'K', 'E', 'U', 'K', 'E', 'U', 'T', 'N', 'D', 'A', 'K', 'E', 'U', 'S', 'H', 'E', 'U', 'A', 'E', 'P', 'K', 'H', 'A', 'K', 'A', 'S', 'S', 'I', 'A', 'N', 'K', 'H', 'A', 'R', 'O', 'S', 'H', 'T', 'H', 'I', 'K', 'I', 'R', 'O', 'G', 'U', 'R', 'A', 'M', 'U', 'K', 'U', 'N', 'D', 'D', 'A', 'L', 'I', 'Y', 'A', 'L', 'A', 'J', 'A', 'N', 'Y', 'A', 'L', 'A', 'N', 'L', 'E', 'N', 'G', 'T', 'H', 'E', 'N', 'E', 'R', 'L', 'E', 'N', 'T', 'I', 'C', 'U', 'L', 'A', 'R', 'L', 'E', 'V', 'I', 'T', 'A', 'T', 'I', 'N', 'G', 'L', 'I', 'G', 'H', 'T', 'H', 'O', 'U', 'S', 'E', 'L', 'I', 'M', 'I', 'T', 'A', 'T', 'I', 'O', 'N', 'L', 'O', 'C', 'O', 'M', 'O', 'T', 'I', 'V', 'E', 'M', 'A', 'E', 'M', 'B', 'G', 'B', 'I', 'E', 'E', 'M', 'A', 'G', 'N', 'I', 'F', 'Y', 'I', 'N', 'G', 'M', 'A', 'N', 'D', 'A', 'I', 'L', 'I', 'N', 'G', 'M', 'A', 'N', 'I', 'C', 'H', 'A', 'E', 'A', 'N', 'M', 'E', 'M', 'B', 'E', 'R', 'S', 'H', 'I', 'P', 'M', 'I', 'C', 'R', 'O', 'P', 'H', 'O', 'N', 'E', 'M', 'I', 'C', 'R', 'O', 'S', 'C', 'O', 'P', 'E', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '2', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '3', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '4', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '5', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '6', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '7', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '8', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '9', 'M', 'O', 'N', 'G', 'K', 'E', 'U', 'A', 'E', 'Q', 'M', 'O', 'N', 'O', 'F', 'O', 'N', 'I', 'A', 'S', 'M', 'O', 'N', 'O', 'S', 'T', 'A', 'B', 'L', 'E', 'M', 'O', 'O', 'S', 'E', '-', 'C', 'R', 'E', 'E', 'M', 'O', 'T', 'O', 'R', 'C', 'Y', 'C', 'L', 'E', 'M', 'U', '-', 'G', 'A', 'A', 'H', 'L', 'A', 'A', 'M', 'V', 'E', 'U', 'A', 'E', 'N', 'G', 'A', 'M', 'N', 'A', 'A', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', 'N', 'A', 'N', 'G', 'M', 'O', 'N', 'T', 'H', 'O', 'N', 'G', 'G', 'U', 'A', 'E', 'S', 'H', 'A', 'E', 'N', 'G', 'K', 'U', 'E', 'N', 'Z', 'E', 'U', 'M', 'N', 'I', 'E', 'U', 'N', '-', 'S', 'I', 'O', 'S', 'N', 'I', 'K', 'O', 'L', 'S', 'B', 'U', 'R', 'G', 'N', 'O', 'N', '-', 'J', 'O', 'I', 'N', 'E', 'R', 'N', 'O', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', 'O', 'N', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'O', 'P', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'O', 'P', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', 'O', 'R', 'T', 'H', 'O', 'G', 'O', 'N', 'A', 'L', 'P', 'A', 'I', 'N', 'T', 'B', 'R', 'U', 'S', 'H', 'P', 'A', 'M', 'P', 'H', 'Y', 'L', 'I', 'A', 'N', 'P', 'A', 'N', 'A', 'E', 'L', 'A', 'E', 'N', 'G', 'P', 'A', 'N', 'E', 'U', 'L', 'E', 'U', 'N', 'G', 'P', 'A', 'N', 'O', 'N', 'G', 'O', 'N', 'A', 'N', 'P', 'A', 'P', 'E', 'R', 'C', 'L', 'I', 'P', 'S', 'P', 'A', 'R', 'A', 'P', 'H', 'R', 'A', 'S', 'E', 'P', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', 'P', 'E', 'D', 'E', 'S', 'T', 'R', 'I', 'A', 'N', 'P', 'E', 'N', 'T', 'A', 'T', 'H', 'L', 'O', 'N', 'P', 'E', 'R', 'C', 'U', 'S', 'S', 'I', 'V', 'E', 'P', 'E', 'R', 'F', 'O', 'R', 'M', 'I', 'N', 'G', 'P', 'H', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', 'P', 'H', 'I', 'L', 'I', 'P', 'P', 'I', 'N', 'E', 'P', 'H', 'O', 'E', 'N', 'I', 'C', 'I', 'A', 'N', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', 'P', 'I', 'N', 'A', 'R', 'B', 'O', 'R', 'A', 'S', 'P', 'L', 'U', 'S', '-', 'M', 'I', 'N', 'U', 'S', 'P', 'O', 'S', 'S', 'E', 'S', 'S', 'I', 'O', 'N', 'P', 'R', 'O', 'H', 'I', 'B', 'I', 'T', 'E', 'D', 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'O', 'N', 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'V', 'E', 'P', 'R', 'O', 'L', 'A', 'T', 'I', 'O', 'N', 'E', 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', 'P', 'R', 'O', 'T', 'O', 'V', 'A', 'R', 'Y', 'S', 'Q', 'U', 'A', 'T', 'E', 'R', 'N', 'I', 'O', 'N', 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', 'E', 'D', 'R', 'E', 'C', 'I', 'T', 'A', 'T', 'I', 'V', 'E', 'R', 'E', 'G', 'I', 'S', 'T', 'E', 'R', 'E', 'D', 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'R', 'E', 'P', 'E', 'T', 'I', 'T', 'I', 'O', 'N', 'R', 'E', 'S', 'I', 'S', 'T', 'A', 'N', 'C', 'E', 'R', 'E', 'S', 'O', 'L', 'U', 'T', 'I', 'O', 'N', 'R', 'E', 'S', 'T', 'R', 'I', 'C', 'T', 'E', 'D', 'R', 'E', 'V', 'O', 'L', 'U', 'T', 'I', 'O', 'N', 'R', 'H', 'I', 'N', 'O', 'C', 'E', 'R', 'O', 'S', 'R', 'I', 'E', 'U', 'L', '-', 'S', 'I', 'O', 'S', 'R', 'I', 'G', 'H', 'T', '-', 'H', 'A', 'N', 'D', 'R', 'I', 'G', 'H', 'T', '-', 'S', 'I', 'D', 'E', 'R', 'I', 'G', 'H', 'T', 'W', 'A', 'R', 'D', 'S', 'S', 'A', 'N', 'S', '-', 'S', 'E', 'R', 'I', 'F', 'S', 'A', 'T', 'K', 'A', 'A', 'N', 'K', 'U', 'U', 'S', 'A', 'U', 'R', 'A', 'S', 'H', 'T', 'R', 'A', 'S', 'E', 'M', 'I', 'B', 'R', 'E', 'V', 'I', 'S', 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'L', 'E', 'S', 'E', 'M', 'I', 'D', 'I', 'R', 'E', 'C', 'T', 'S', 'E', 'M', 'I', 'M', 'I', 'N', 'I', 'M', 'A', 'S', 'E', 'Q', 'U', 'E', 'N', 'T', 'I', 'A', 'L', 'S', 'E', 'S', 'T', 'E', 'R', 'T', 'I', 'U', 'S', 'S', 'H', 'A', 'L', 'S', 'H', 'E', 'L', 'E', 'T', 'S', 'H', 'I', 'Y', 'Y', 'A', 'A', 'L', 'A', 'A', 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', 'E', 'D', 'S', 'H', 'U', 'E', 'N', 'S', 'H', 'U', 'E', 'T', 'S', 'I', 'L', 'H', 'O', 'U', 'E', 'T', 'T', 'E', 'S', 'I', 'M', 'A', 'L', 'U', 'N', 'G', 'U', 'N', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', 'S', 'I', 'N', 'N', 'Y', 'I', 'I', 'Y', 'H', 'E', 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', 'S', 'I', 'O', 'S', '-', 'H', 'I', 'E', 'U', 'H', 'S', 'I', 'O', 'S', '-', 'I', 'E', 'U', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'M', 'I', 'E', 'U', 'M', 'S', 'I', 'O', 'S', '-', 'N', 'I', 'E', 'U', 'N', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', 'S', 'I', 'O', 'S', '-', 'R', 'I', 'E', 'U', 'L', 'S', 'I', 'X', '-', 'P', 'E', 'R', '-', 'E', 'M', 'S', 'I', 'X', '-', 'S', 'T', 'R', 'I', 'N', 'G', 'S', 'I', 'X', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', 'S', 'S', 'S', 'A', 'N', 'G', 'A', 'R', 'A', 'E', 'A', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', 'S', 'S', 'A', 'N', 'G', 'H', 'I', 'E', 'U', 'H', 'S', 'S', 'A', 'N', 'G', 'I', 'E', 'U', 'N', 'G', 'S', 'S', 'A', 'N', 'G', 'M', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'N', 'I', 'E', 'U', 'N', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', 'S', 'S', 'A', 'N', 'G', 'R', 'I', 'E', 'U', 'L', 'S', 'T', 'A', 'N', 'D', 'S', 'T', 'I', 'L', 'L', 'S', 'T', 'R', 'A', 'W', 'B', 'E', 'R', 'R', 'Y', 'S', 'U', 'B', 'P', 'U', 'N', 'C', 'T', 'I', 'S', 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'E', 'S', 'U', 'N', 'G', 'L', 'A', 'S', 'S', 'E', 'S', 'S', 'U', 'P', 'E', 'R', 'F', 'I', 'X', 'E', 'D', 'S', 'U', 'S', 'P', 'E', 'N', 'S', 'I', 'O', 'N', 'T', 'A', 'B', 'U', 'L', 'A', 'T', 'I', 'O', 'N', 'T', 'A', 'W', 'E', 'L', 'L', 'E', 'M', 'E', 'T', 'T', 'E', 'L', 'E', 'V', 'I', 'S', 'I', 'O', 'N', 'T', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'T', 'E', 'R', 'M', 'I', 'N', 'A', 'T', 'O', 'R', 'T', 'E', 'T', 'R', 'A', 'S', 'I', 'M', 'O', 'U', 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'O', 'N', 'E', 'T', 'H', 'R', 'E', 'E', '-', 'L', 'I', 'N', 'E', 'T', 'R', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', 'T', 'R', 'I', 'F', 'O', 'L', 'I', 'A', 'T', 'E', 'T', 'R', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', 'T', 'R', 'O', 'E', 'Z', 'E', 'N', 'I', 'A', 'N', 'T', 'R', 'O', 'K', 'U', 'T', 'A', 'S', 'T', 'I', 'T', 'R', 'O', 'L', 'L', 'E', 'Y', 'B', 'U', 'S', 'T', 'W', 'E', 'N', 'T', 'I', 'E', 'T', 'H', 'S', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'O', 'N', 'E', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'I', 'X', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'W', 'O', 'T', 'W', 'O', '-', 'C', 'I', 'R', 'C', 'L', 'E', 'T', 'W', 'O', '-', 'H', 'E', 'A', 'D', 'E', 'D', 'T', 'W', 'O', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', 'V', 'I', 'S', 'I', 'G', 'O', 'T', 'H', 'I', 'C', 'V', 'O', 'L', 'L', 'E', 'Y', 'B', 'A', 'L', 'L', 'W', 'A', 'T', 'E', 'R', 'M', 'E', 'L', 'O', 'N', 'W', 'H', 'E', 'E', 'L', 'C', 'H', 'A', 'I', 'R', 'W', 'O', 'O', 'D', 'S', '-', 'C', 'R', 'E', 'E', 'Y', 'A', 'J', 'U', 'R', 'V', 'E', 'D', 'I', 'C', 'A', 'C', 'K', 'N', 'O', 'W', 'L', 'E', 'D', 'G', 'E', 'A', 'E', 'S', 'C', 'U', 'L', 'A', 'P', 'I', 'U', 'S', 'A', 'F', 'F', 'R', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'N', 'G', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'V', 'E', 'A', 'N', 'T', 'I', 'M', 'O', 'N', 'I', 'A', 'T', 'E', 'A', 'P', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', 'A', 'R', 'D', 'H', 'A', 'C', 'A', 'N', 'D', 'R', 'A', 'A', 'R', 'T', 'I', 'C', 'U', 'L', 'A', 'T', 'E', 'D', 'A', 'U', 'R', 'I', 'P', 'I', 'G', 'M', 'E', 'N', 'T', 'B', 'A', 'C', 'K', '-', 'T', 'I', 'L', 'T', 'E', 'D', 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'N', 'T', 'E', 'D', 'B', 'H', 'A', 'T', 'T', 'I', 'P', 'R', 'O', 'L', 'U', 'B', 'L', 'A', 'C', 'K', 'L', 'E', 'T', 'T', 'E', 'R', 'C', 'A', 'N', 'D', 'R', 'A', 'B', 'I', 'N', 'D', 'U', 'C', 'E', 'L', 'E', 'B', 'R', 'A', 'T', 'I', 'O', 'N', 'C', 'I', 'E', 'U', 'C', '-', 'I', 'E', 'U', 'N', 'G', 'C', 'I', 'E', 'U', 'C', '-', 'P', 'I', 'E', 'U', 'P', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'T', 'I', 'O', 'N', 'C', 'L', 'U', 'B', '-', 'S', 'P', 'O', 'K', 'E', 'D', 'C', 'O', 'M', 'B', 'I', 'N', 'A', 'T', 'I', 'O', 'N', 'C', 'O', 'M', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'C', 'O', 'M', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', 'C', 'O', 'N', 'J', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'C', 'O', 'N', 'S', 'E', 'C', 'U', 'T', 'I', 'V', 'E', 'C', 'O', 'N', 'T', 'R', 'A', 'C', 'T', 'I', 'O', 'N', 'C', 'O', 'N', 'T', 'R', 'A', 'R', 'I', 'E', 'T', 'Y', 'C', 'O', 'N', 'V', 'E', 'N', 'I', 'E', 'N', 'C', 'E', 'C', 'O', 'R', 'P', 'O', 'R', 'A', 'T', 'I', 'O', 'N', 'C', 'O', 'R', 'R', 'E', 'S', 'P', 'O', 'N', 'D', 'S', 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'B', 'O', 'R', 'E', 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', 'I', 'N', 'K', 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', '-', '2', 'D', 'A', 'L', 'E', 'T', 'H', '-', 'R', 'E', 'S', 'H', 'D', 'E', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', 'D', 'E', 'L', 'I', 'V', 'E', 'R', 'A', 'N', 'C', 'E', 'D', 'E', 'N', 'O', 'M', 'I', 'N', 'A', 'T', 'O', 'R', 'D', 'E', 'R', 'E', 'T', '-', 'H', 'I', 'D', 'E', 'T', 'D', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', 'D', 'E', 'V', 'E', 'L', 'O', 'P', 'M', 'E', 'N', 'T', 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'Z', 'E', 'D', 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', 'A', 'L', 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'O', 'N', 'A', 'L', 'D', 'I', 'S', 'T', 'I', 'N', 'G', 'U', 'I', 'S', 'H', 'D', 'O', 'A', 'C', 'H', 'A', 'S', 'H', 'M', 'E', 'E', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', '8', 'D', 'O', 'U', 'B', 'L', 'E', '-', 'L', 'I', 'N', 'E', 'E', 'A', 'M', 'H', 'A', 'N', 'C', 'H', 'O', 'L', 'L', 'E', 'K', 'F', 'O', 'N', 'I', 'T', 'I', 'K', 'O', 'N', 'E', 'N', 'L', 'A', 'R', 'G', 'E', 'M', 'E', 'N', 'T', 'E', 'N', 'U', 'M', 'E', 'R', 'A', 'T', 'I', 'O', 'N', 'E', 'Q', 'U', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', 'E', 'Q', 'U', 'I', 'L', 'A', 'T', 'E', 'R', 'A', 'L', 'E', 'X', 'C', 'L', 'A', 'M', 'A', 'T', 'I', 'O', 'N', 'F', 'I', 'N', 'G', 'E', 'R', '-', 'P', 'O', 'S', 'T', 'F', 'I', 'N', 'G', 'E', 'R', 'N', 'A', 'I', 'L', 'S', 'F', 'I', 'T', 'Z', 'P', 'A', 'T', 'R', 'I', 'C', 'K', 'F', 'I', 'V', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'F', 'O', 'U', 'R', '-', 'P', 'E', 'R', '-', 'E', 'M', 'F', 'O', 'U', 'R', '-', 'S', 'T', 'R', 'I', 'N', 'G', 'F', 'O', 'U', 'R', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'G', 'A', 'Y', 'A', 'N', 'U', 'K', 'I', 'T', 'T', 'A', 'G', 'H', 'E', 'U', 'G', 'H', 'E', 'U', 'A', 'E', 'M', 'G', 'U', 'A', 'R', 'D', 'E', 'D', 'N', 'E', 'S', 'S', 'H', 'A', 'L', 'F', '-', 'C', 'I', 'R', 'C', 'L', 'E', 'H', 'A', 'N', 'D', '-', 'C', 'I', 'R', 'C', 'L', 'E', 'H', 'A', 'U', 'P', 'T', 'S', 'T', 'I', 'M', 'M', 'E', 'H', 'B', 'A', 'S', 'A', '-', 'E', 'S', 'A', 'S', 'A', 'H', 'I', 'E', 'U', 'H', '-', 'M', 'I', 'E', 'U', 'M', 'H', 'I', 'E', 'U', 'H', '-', 'N', 'I', 'E', 'U', 'N', 'H', 'I', 'E', 'U', 'H', '-', 'P', 'I', 'E', 'U', 'P', 'H', 'I', 'E', 'U', 'H', '-', 'R', 'I', 'E', 'U', 'L', 'H', 'I', 'G', 'H', '-', 'H', 'E', 'E', 'L', 'E', 'D', 'H', 'Y', 'P', 'H', 'E', 'N', 'A', 'T', 'I', 'O', 'N', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'C', 'I', 'E', 'U', 'N', 'G', '-', 'C', 'I', 'E', 'U', 'C', 'I', 'E', 'U', 'N', 'G', '-', 'H', 'I', 'E', 'U', 'H', 'I', 'E', 'U', 'N', 'G', '-', 'M', 'I', 'E', 'U', 'M', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'I', 'E', 'U', 'P', 'I', 'E', 'U', 'N', 'G', '-', 'R', 'I', 'E', 'U', 'L', 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', 'I', 'N', 'D', 'E', 'P', 'E', 'N', 'D', 'E', 'N', 'T', 'I', 'N', 'F', 'O', 'R', 'M', 'A', 'T', 'I', 'O', 'N', 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'T', 'I', 'O', 'N', 'I', 'N', 'T', 'E', 'R', 'C', 'A', 'L', 'A', 'T', 'E', 'I', 'N', 'T', 'E', 'R', 'L', 'I', 'N', 'E', 'A', 'R', 'I', 'N', 'T', 'E', 'R', 'L', 'O', 'C', 'K', 'E', 'D', 'I', 'N', 'T', 'E', 'R', 'R', 'O', 'B', 'A', 'N', 'G', 'I', 'R', 'O', 'N', '-', 'C', 'O', 'P', 'P', 'E', 'R', 'J', 'I', 'H', 'V', 'A', 'M', 'U', 'L', 'I', 'Y', 'A', 'K', 'I', 'R', 'O', 'M', 'E', 'E', 'T', 'O', 'R', 'U', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', 'L', 'A', 'K', 'K', 'H', 'A', 'N', 'G', 'Y', 'A', 'O', 'L', 'E', 'F', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', 'L', 'E', 'F', 'T', '-', 'H', 'A', 'N', 'D', 'E', 'D', 'L', 'E', 'F', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', 'L', 'O', 'N', 'G', '-', 'L', 'E', 'G', 'G', 'E', 'D', 'L', 'O', 'U', 'D', 'S', 'P', 'E', 'A', 'K', 'E', 'R', 'L', 'O', 'W', '-', 'F', 'A', 'L', 'L', 'I', 'N', 'G', 'M', 'A', 'H', 'A', 'A', 'P', 'R', 'A', 'A', 'N', 'A', 'M', 'A', 'N', 'T', 'E', 'L', 'P', 'I', 'E', 'C', 'E', 'M', 'I', 'E', 'U', 'M', '-', 'C', 'I', 'E', 'U', 'C', 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', 'M', 'I', 'E', 'U', 'M', '-', 'N', 'I', 'E', 'U', 'N', 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', 'M', 'I', 'E', 'U', 'M', '-', 'R', 'I', 'E', 'U', 'L', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '0', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '1', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '2', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '3', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '4', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '5', 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', '-', '1', '6', 'M', 'O', 'N', 'E', 'Y', '-', 'M', 'O', 'U', 'T', 'H', 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', 'M', 'O', 'S', 'M', 'U', 'L', 'T', 'I', 'O', 'C', 'U', 'L', 'A', 'R', 'M', 'U', 'U', 'S', 'I', 'K', 'A', 'T', 'O', 'A', 'N', 'N', 'A', 'A', 'K', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', 'N', 'E', 'B', 'E', 'N', 'S', 'T', 'I', 'M', 'M', 'E', 'N', 'I', 'E', 'U', 'N', '-', 'C', 'I', 'E', 'U', 'C', 'N', 'I', 'E', 'U', 'N', '-', 'H', 'I', 'E', 'U', 'H', 'N', 'I', 'E', 'U', 'N', '-', 'P', 'I', 'E', 'U', 'P', 'N', 'I', 'E', 'U', 'N', '-', 'R', 'I', 'E', 'U', 'L', 'N', 'I', 'N', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'N', 'O', 'N', '-', 'P', 'O', 'T', 'A', 'B', 'L', 'E', 'O', 'B', 'S', 'T', 'R', 'U', 'C', 'T', 'I', 'O', 'N', 'O', 'P', 'E', 'N', '-', 'H', 'E', 'A', 'D', 'E', 'D', 'O', 'V', 'E', 'R', 'L', 'A', 'P', 'P', 'I', 'N', 'G', 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'E', 'D', 'P', 'A', 'N', 'G', 'R', 'A', 'N', 'G', 'K', 'E', 'P', 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', 'O', 'S', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', 'P', 'A', 'R', 'A', 'K', 'L', 'I', 'T', 'I', 'K', 'I', 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'E', 'S', 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'S', 'P', 'A', 'R', 'T', 'N', 'E', 'R', 'S', 'H', 'I', 'P', 'P', 'E', 'D', 'E', 'S', 'T', 'R', 'I', 'A', 'N', 'S', 'P', 'E', 'N', 'E', 'T', 'R', 'A', 'T', 'I', 'O', 'N', 'P', 'E', 'R', 'I', 'S', 'P', 'O', 'M', 'E', 'N', 'I', 'P', 'E', 'R', 'S', 'E', 'V', 'E', 'R', 'I', 'N', 'G', 'P', 'E', 'R', 'S', 'P', 'E', 'C', 'T', 'I', 'V', 'E', 'P', 'I', 'E', 'U', 'P', '-', 'C', 'I', 'E', 'U', 'C', 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', 'P', 'I', 'E', 'U', 'P', '-', 'M', 'I', 'E', 'U', 'M', 'P', 'I', 'E', 'U', 'P', '-', 'N', 'I', 'E', 'U', 'N', 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', 'P', 'I', 'P', 'A', 'E', 'M', 'G', 'B', 'I', 'E', 'E', 'P', 'L', 'A', 'C', 'E', 'H', 'O', 'L', 'D', 'E', 'R', 'P', 'R', 'E', 'C', 'I', 'P', 'I', 'T', 'A', 'T', 'E', 'P', 'U', 'N', 'C', 'T', 'U', 'A', 'T', 'I', 'O', 'N', 'R', 'A', 'D', 'I', 'O', 'A', 'C', 'T', 'I', 'V', 'E', 'R', 'A', 'H', 'M', 'A', 'T', 'U', 'L', 'L', 'A', 'H', 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'U', 'L', 'A', 'R', 'R', 'E', 'C', 'T', 'I', 'L', 'I', 'N', 'E', 'A', 'R', 'R', 'E', 'P', 'L', 'A', 'C', 'E', 'M', 'E', 'N', 'T', 'R', 'I', 'E', 'U', 'L', '-', 'C', 'I', 'E', 'U', 'C', 'R', 'I', 'E', 'U', 'L', '-', 'H', 'I', 'E', 'U', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', 'R', 'I', 'E', 'U', 'L', '-', 'N', 'I', 'E', 'U', 'N', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', 'R', 'I', 'N', 'F', 'O', 'R', 'Z', 'A', 'N', 'D', 'O', 'S', 'A', 'C', 'R', 'I', 'F', 'I', 'C', 'I', 'A', 'L', 'S', 'A', 'G', 'I', 'T', 'T', 'A', 'R', 'I', 'U', 'S', 'S', 'A', 'L', 'L', 'A', 'L', 'L', 'A', 'H', 'O', 'U', 'S', 'E', 'E', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', 'S', 'E', 'M', 'I', '-', 'V', 'O', 'I', 'C', 'E', 'D', 'S', 'E', 'M', 'I', 'S', 'E', 'X', 'T', 'I', 'L', 'E', 'S', 'H', 'U', 'T', 'T', 'L', 'E', 'C', 'O', 'C', 'K', 'S', 'I', 'G', 'N', 'W', 'R', 'I', 'T', 'I', 'N', 'G', 'S', 'I', 'N', 'G', 'L', 'E', '-', 'L', 'I', 'N', 'E', 'S', 'I', 'N', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'S', 'N', 'O', 'W', 'B', 'O', 'A', 'R', 'D', 'E', 'R', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', '-', '2', 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'E', '-', '3', 'S', 'U', 'B', 'L', 'I', 'M', 'A', 'T', 'I', 'O', 'N', 'S', 'U', 'P', 'E', 'R', 'S', 'C', 'R', 'I', 'P', 'T', 'S', 'U', 'P', 'R', 'A', 'L', 'I', 'N', 'E', 'A', 'R', 'S', 'Y', 'N', 'C', 'H', 'R', 'O', 'N', 'O', 'U', 'S', 'T', 'E', 'T', 'R', 'A', 'F', 'O', 'N', 'I', 'A', 'S', 'T', 'H', 'A', 'N', 'T', 'H', 'A', 'K', 'H', 'A', 'T', 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'S', 'M', 'O', 'S', 'T', 'H', 'E', 'R', 'M', 'O', 'M', 'E', 'T', 'E', 'R', 'T', 'H', 'I', 'R', 'D', '-', 'S', 'T', 'A', 'G', 'E', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'S', 'I', 'O', 'S', 'T', 'O', 'A', 'N', 'D', 'A', 'K', 'H', 'I', 'A', 'T', 'T', 'O', 'P', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', 'T', 'R', 'A', 'N', 'S', 'V', 'E', 'R', 'S', 'A', 'L', 'T', 'R', 'I', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'I', 'V', 'E', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'O', 'U', 'R', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'N', 'I', 'N', 'E', 'U', 'N', 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', 'U', 'N', 'C', 'E', 'R', 'T', 'A', 'I', 'N', 'T', 'Y', 'U', 'P', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'U', 'P', 'A', 'D', 'H', 'M', 'A', 'N', 'I', 'Y', 'A', 'U', 'P', 'S', 'I', 'D', 'E', '-', 'D', 'O', 'W', 'N', 'V', 'A', 'M', 'A', 'G', 'O', 'M', 'U', 'K', 'H', 'A', 'W', 'A', 'S', 'T', 'E', 'B', 'A', 'S', 'K', 'E', 'T', 'W', 'E', 'I', 'E', 'R', 'S', 'T', 'R', 'A', 'S', 'S', 'W', 'I', 'D', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', 'A', 'B', 'B', 'R', 'E', 'V', 'I', 'A', 'T', 'I', 'O', 'N', 'A', 'C', 'C', 'U', 'M', 'U', 'L', 'A', 'T', 'I', 'O', 'N', 'A', 'C', 'U', 'T', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', 'A', 'K', 'T', 'I', 'E', 'S', 'E', 'L', 'S', 'K', 'A', 'B', 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'A', 'T', 'I', 'O', 'N', 'A', 'N', 'A', 'T', 'R', 'I', 'C', 'H', 'I', 'S', 'M', 'A', 'A', 'N', 'T', 'A', 'R', 'G', 'O', 'M', 'U', 'K', 'H', 'A', 'A', 'R', 'A', 'B', 'I', 'C', '-', 'I', 'N', 'D', 'I', 'C', 'A', 'R', 'D', 'H', 'A', 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'A', 'S', 'T', 'R', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', 'A', 'S', 'T', 'R', 'O', 'N', 'O', 'M', 'I', 'C', 'A', 'L', 'A', 'T', 'H', '-', 'T', 'H', 'A', 'L', 'A', 'T', 'H', 'A', 'A', 'T', 'H', 'A', 'R', 'V', 'A', 'V', 'E', 'D', 'I', 'C', 'A', 'U', 'G', 'M', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', '-', '2', 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', 'H', 'A', 'B', 'A', 'H', 'I', 'R', 'G', 'O', 'M', 'U', 'K', 'H', 'A', 'B', 'L', 'A', 'C', 'K', '-', 'L', 'E', 'T', 'T', 'E', 'R', 'B', 'R', 'E', 'A', 'K', 'T', 'H', 'R', 'O', 'U', 'G', 'H', 'B', 'R', 'E', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', 'C', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', 'C', 'A', 'B', 'B', 'A', 'G', 'E', '-', 'T', 'R', 'E', 'E', 'C', 'A', 'N', 'C', 'E', 'L', 'L', 'A', 'T', 'I', 'O', 'N', 'C', 'A', 'N', 'T', 'I', 'L', 'L', 'A', 'T', 'I', 'O', 'N', 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'I', 'O', 'S', 'C', 'O', 'N', 'S', 'T', 'R', 'U', 'C', 'T', 'I', 'O', 'N', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'A', 'T', 'I', 'O', 'N', 'C', 'R', 'O', 'S', 'S', 'E', 'D', '-', 'T', 'A', 'I', 'L', 'C', 'Y', 'L', 'I', 'N', 'D', 'R', 'I', 'C', 'I', 'T', 'Y', 'D', 'E', 'C', 'I', 'S', 'I', 'V', 'E', 'N', 'E', 'S', 'S', 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'T', 'I', 'A', 'L', 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'I', 'E', 'S', 'D', 'I', 'M', 'I', 'N', 'I', 'S', 'H', 'M', 'E', 'N', 'T', 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '1', 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '2', 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '3', 'D', 'I', 'S', 'A', 'P', 'P', 'O', 'I', 'N', 'T', 'E', 'D', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', '8', 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', '8', 'D', 'O', 'U', 'B', 'L', 'E', '-', 'E', 'N', 'D', 'E', 'D', 'E', 'I', 'G', 'H', 'T', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'E', 'R', 'R', 'O', 'R', '-', 'B', 'A', 'R', 'R', 'E', 'D', 'F', 'L', 'E', 'U', 'R', '-', 'D', 'E', '-', 'L', 'I', 'S', 'F', 'R', 'O', 'N', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', 'F', 'R', 'O', 'N', 'T', '-', 'T', 'I', 'L', 'T', 'E', 'D', 'G', 'A', 'E', 'T', 'T', 'A', '-', 'P', 'I', 'L', 'L', 'A', 'G', 'H', 'E', 'U', 'A', 'E', 'G', 'H', 'E', 'U', 'A', 'E', 'G', 'R', 'A', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', 'G', 'R', 'E', 'A', 'T', 'E', 'R', '-', 'T', 'H', 'A', 'N', 'G', 'R', 'O', 'N', 'T', 'H', 'I', 'S', 'M', 'A', 'T', 'A', 'H', 'E', 'A', 'D', '-', 'B', 'A', 'N', 'D', 'A', 'G', 'E', 'H', 'E', 'A', 'R', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', 'H', 'E', 'A', 'R', 'T', '-', 'S', 'H', 'A', 'P', 'E', 'D', 'H', 'I', 'E', 'R', 'O', 'G', 'L', 'Y', 'P', 'H', 'I', 'C', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', 'L', 'Y', 'H', 'Y', 'P', 'H', 'E', 'N', '-', 'M', 'I', 'N', 'U', 'S', 'H', 'Y', 'P', 'O', 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'E', 'I', 'C', 'E', 'L', 'A', 'N', 'D', 'I', 'C', '-', 'Y', 'R', 'I', 'E', 'U', 'N', 'G', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'I', 'E', 'U', 'N', 'G', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'I', 'N', 'S', 'T', 'R', 'U', 'M', 'E', 'N', 'T', 'A', 'L', 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'N', 'G', 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'O', 'N', 'J', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', 'K', 'I', 'N', 'D', 'E', 'R', 'G', 'A', 'R', 'T', 'E', 'N', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'H', 'I', 'E', 'U', 'H', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'N', 'I', 'E', 'U', 'N', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'P', 'I', 'E', 'U', 'P', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'R', 'I', 'E', 'U', 'L', 'L', 'E', 'F', 'T', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', 'M', 'A', 'C', 'R', 'O', 'N', '-', 'A', 'C', 'U', 'T', 'E', 'M', 'A', 'C', 'R', 'O', 'N', '-', 'B', 'R', 'E', 'V', 'E', 'M', 'A', 'C', 'R', 'O', 'N', '-', 'G', 'R', 'A', 'V', 'E', 'M', 'A', 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'C', 'A', 'L', 'M', 'E', 'U', 'N', 'J', 'O', 'M', 'N', 'D', 'E', 'U', 'Q', 'M', 'I', 'D', 'D', 'L', 'E', '-', 'W', 'E', 'L', 'S', 'H', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'M', 'I', 'E', 'U', 'M', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'N', 'A', 'S', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', 'N', 'D', 'A', 'A', 'N', 'G', 'G', 'E', 'U', 'A', 'E', 'T', 'N', 'I', 'E', 'U', 'N', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'N', 'I', 'E', 'U', 'N', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'N', 'O', 'N', '-', 'B', 'R', 'E', 'A', 'K', 'I', 'N', 'G', 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'S', 'I', 'O', 'S', 'P', 'H', 'I', 'L', 'O', 'S', 'O', 'P', 'H', 'E', 'R', 'S', 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'P', 'I', 'E', 'U', 'P', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'P', 'O', 'S', 'T', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'P', 'R', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', 'A', 'L', 'P', 'U', 'T', 'R', 'E', 'F', 'A', 'C', 'T', 'I', 'O', 'N', 'Q', 'U', 'I', 'N', 'D', 'I', 'C', 'E', 'S', 'I', 'M', 'A', 'Q', 'U', 'I', 'N', 'T', 'E', 'S', 'S', 'E', 'N', 'C', 'E', 'R', 'E', 'C', 'R', 'E', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'R', 'I', 'G', 'H', 'T', '-', 'F', 'A', 'C', 'I', 'N', 'G', 'R', 'I', 'G', 'H', 'T', '-', 'H', 'A', 'N', 'D', 'E', 'D', 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', 'R', 'O', 'U', 'N', 'D', '-', 'T', 'I', 'P', 'P', 'E', 'D', 'R', 'U', 'L', 'E', '-', 'D', 'E', 'L', 'A', 'Y', 'E', 'D', 'S', 'A', 'L', '-', 'A', 'M', 'M', 'O', 'N', 'I', 'A', 'C', 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', 'S', 'E', 'V', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'S', 'I', 'M', 'U', 'L', 'T', 'A', 'N', 'E', 'O', 'U', 'S', 'S', 'I', 'O', 'S', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'S', 'I', 'O', 'S', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'S', 'I', 'O', 'S', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'S', 'I', 'O', 'S', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'S', 'I', 'O', 'S', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'S', 'I', 'X', 'T', 'Y', '-', 'F', 'O', 'U', 'R', 'T', 'H', 'S', 'O', 'U', 'T', 'H', '-', 'S', 'L', 'A', 'V', 'E', 'Y', 'S', 'P', 'R', 'E', 'C', 'H', 'G', 'E', 'S', 'A', 'N', 'G', 'S', 'S', 'A', 'N', 'G', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'S', 'T', 'E', 'N', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'C', 'S', 'T', 'R', 'A', 'G', 'G', 'I', 'S', 'M', 'A', 'T', 'A', 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', 'N', 'E', 'S', 'S', 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'I', 'O', 'N', 'S', 'U', 'P', 'E', 'R', 'I', 'M', 'P', 'O', 'S', 'E', 'D', 'T', 'H', 'R', 'E', 'E', '-', 'C', 'I', 'R', 'C', 'L', 'E', 'T', 'H', 'R', 'E', 'E', '-', 'L', 'E', 'G', 'G', 'E', 'D', 'T', 'H', 'R', 'E', 'E', '-', 'P', 'E', 'R', '-', 'E', 'M', 'T', 'H', 'R', 'E', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'T', 'H', 'U', 'N', 'D', 'E', 'R', 'S', 'T', 'O', 'R', 'M', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'C', 'I', 'E', 'U', 'C', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'M', 'I', 'E', 'U', 'M', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'P', 'I', 'E', 'U', 'P', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'R', 'I', 'E', 'U', 'L', 'T', 'R', 'A', 'N', 'S', 'M', 'I', 'S', 'S', 'I', 'O', 'N', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'E', 'V', 'E', 'N', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'H', 'R', 'E', 'E', 'V', 'O', 'C', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', 'W', 'E', 'D', 'G', 'E', '-', 'T', 'A', 'I', 'L', 'E', 'D', 'X', 'S', 'H', 'A', 'A', 'Y', 'A', 'T', 'H', 'I', 'Y', 'A', 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', 'N', 'E', 'S', 'S', 'Z', 'I', 'P', 'P', 'E', 'R', '-', 'M', 'O', 'U', 'T', 'H', 'A', 'C', 'C', 'O', 'M', 'M', 'O', 'D', 'A', 'T', 'I', 'O', 'N', 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', 'L', 'Y', 'A', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', 'A', 'V', 'A', 'K', 'R', 'A', 'H', 'A', 'S', 'A', 'N', 'Y', 'A', 'B', 'O', 'T', 'T', 'O', 'M', '-', 'S', 'H', 'A', 'D', 'E', 'D', 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'H', 'I', 'E', 'U', 'H', 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', 'C', 'H', 'R', 'Y', 'S', 'A', 'N', 'T', 'H', 'E', 'M', 'U', 'M', 'C', 'O', 'M', 'P', 'A', 'T', 'I', 'B', 'I', 'L', 'I', 'T', 'Y', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '0', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '1', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '2', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '3', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '4', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '5', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '5', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '6', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '7', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '8', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '6', '9', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '0', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '1', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '2', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '3', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '5', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '6', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '7', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '8', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '4', '9', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '0', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '1', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '2', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '3', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '4', 'C', 'O', 'M', 'P', 'O', 'N', 'E', 'N', 'T', '-', '7', '5', '5', 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'S', 'I', 'D', 'E', 'D', 'C', 'O', 'N', 'T', 'E', 'M', 'P', 'L', 'A', 'T', 'I', 'O', 'N', 'C', 'R', 'Y', 'P', 'T', 'O', 'G', 'R', 'A', 'M', 'M', 'I', 'C', 'D', 'E', 'F', 'E', 'C', 'T', 'I', 'V', 'E', 'N', 'E', 'S', 'S', 'D', 'I', 'S', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', '8', 'D', 'O', 'U', 'B', 'L', 'E', '-', 'S', 'T', 'R', 'U', 'C', 'K', 'D', 'O', 'W', 'N', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', 'E', 'G', 'Y', 'P', 'T', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', 'E', 'L', 'E', 'V', 'E', 'N', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'E', 'M', 'B', 'E', 'L', 'L', 'I', 'S', 'H', 'M', 'E', 'N', 'T', 'E', 'U', 'R', 'O', '-', 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', 'E', 'U', 'R', 'O', 'P', 'E', '-', 'A', 'F', 'R', 'I', 'C', 'A', 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'L', 'Y', 'H', 'A', 'N', 'D', '-', 'C', 'U', 'R', 'L', 'I', 'C', 'U', 'E', 'I', 'E', 'U', 'N', 'G', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'I', 'E', 'U', 'N', 'G', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'I', 'E', 'U', 'N', 'G', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'I', 'N', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', 'A', 'L', 'I', 'N', 'T', 'E', 'R', 'P', 'O', 'L', 'A', 'T', 'I', 'O', 'N', 'I', 'N', 'T', 'E', 'R', 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', 'J', 'U', 'D', 'E', 'O', '-', 'S', 'P', 'A', 'N', 'I', 'S', 'H', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'M', 'I', 'E', 'U', 'M', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'R', 'I', 'E', 'U', 'L', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'L', 'A', 'B', 'I', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', 'L', 'E', 'F', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'L', 'E', 'F', 'T', '-', 'T', 'O', '-', 'R', 'I', 'G', 'H', 'T', 'M', 'I', 'E', 'U', 'M', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'M', 'I', 'E', 'U', 'M', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'M', 'I', 'N', 'U', 'S', '-', 'O', 'R', '-', 'P', 'L', 'U', 'S', 'M', 'O', 'R', 'P', 'H', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', 'N', 'I', 'E', 'U', 'N', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'N', 'I', 'E', 'U', 'N', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'N', 'I', 'E', 'U', 'N', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'O', 'P', 'E', 'N', '-', 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', 'P', 'A', 'N', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', 'O', 'G', 'R', 'A', 'M', 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'Z', 'E', 'D', 'P', 'A', 'R', 'E', 'S', 'T', 'I', 'G', 'M', 'E', 'N', 'O', 'N', 'P', 'E', 'R', 'P', 'E', 'N', 'D', 'I', 'C', 'U', 'L', 'A', 'R', 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'H', 'I', 'E', 'U', 'H', 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'P', 'I', 'E', 'U', 'P', 'P', 'I', 'E', 'U', 'P', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'P', 'I', 'E', 'U', 'P', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'P', 'I', 'E', 'U', 'P', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'P', 'I', 'E', 'U', 'P', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'P', 'R', 'E', 'P', 'O', 'N', 'D', 'E', 'R', 'A', 'N', 'C', 'E', 'P', 'R', 'I', 'S', 'H', 'T', 'H', 'A', 'M', 'A', 'T', 'R', 'A', 'R', 'E', 'D', 'U', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'R', 'I', 'G', 'H', 'T', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', 'R', 'I', 'G', 'H', 'T', '-', 'T', 'O', '-', 'L', 'E', 'F', 'T', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'A', 'R', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'Y', 'R', 'S', 'P', 'E', 'A', 'K', '-', 'N', 'O', '-', 'E', 'V', 'I', 'L', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'I', 'S', 'S', 'I', 'M', 'O', 'S', 'T', 'R', 'I', 'K', 'E', 'T', 'H', 'R', 'O', 'U', 'G', 'H', 'T', 'E', 'T', 'A', 'R', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', 'T', 'H', 'E', 'R', 'M', 'O', 'D', 'Y', 'N', 'A', 'M', 'I', 'C', 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'S', 'E', 'C', 'O', 'N', 'D', 'T', 'H', 'R', 'E', 'E', '-', 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'T', 'R', 'A', 'N', 'S', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', 'T', 'W', 'E', 'L', 'V', 'E', '-', 'T', 'H', 'I', 'R', 'T', 'Y', 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', 'H', 'V', 'I', 'D', 'E', 'O', 'C', 'A', 'S', 'S', 'E', 'T', 'T', 'E', 'V', 'O', 'W', 'E', 'L', '-', 'C', 'A', 'R', 'R', 'I', 'E', 'R', 'W', 'A', 'W', '-', 'A', 'Y', 'I', 'N', '-', 'R', 'E', 'S', 'H', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', 'Y', 'P', 'O', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', 'Y', 'U', 'U', 'K', 'A', 'L', 'E', 'A', 'P', 'I', 'N', 'T', 'U', 'A', 'F', 'O', 'R', 'E', 'M', 'E', 'N', 'T', 'I', 'O', 'N', 'E', 'D', 'A', 'R', 'O', 'U', 'N', 'D', '-', 'P', 'R', 'O', 'F', 'I', 'L', 'E', 'A', 'S', 'I', 'A', '-', 'A', 'U', 'S', 'T', 'R', 'A', 'L', 'I', 'A', 'A', 'S', 'Y', 'M', 'P', 'T', 'O', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', 'B', 'A', 'L', 'L', 'O', 'O', 'N', '-', 'S', 'P', 'O', 'K', 'E', 'D', 'B', 'O', 'T', 'T', 'O', 'M', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', 'C', 'E', 'N', 'T', 'R', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', 'C', 'O', 'N', 'G', 'R', 'A', 'T', 'U', 'L', 'A', 'T', 'I', 'O', 'N', 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'S', '-', 'R', 'I', 'N', 'G', 'E', 'X', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', 'L', 'E', 'S', 'S', 'G', 'O', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', 'I', 'D', 'E', 'N', 'T', 'I', 'F', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '0', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '0', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '2', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', '8', 'C', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '4', 'E', 'A', '4', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '1', '8', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '1', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '4', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', '7', '2', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '2', 'D', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '3', 'C', 'C', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '3', 'F', '3', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '4', '0', '8', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '4', '3', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '5', 'B', '6', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '8', 'F', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '9', '1', 'A', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', '9', '2', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'B', '5', '7', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'B', '8', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'D', 'E', '6', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '5', 'F', '8', 'C', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '4', 'B', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '5', '3', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '2', '9', '5', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '3', '0', '7', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '3', '5', '5', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', '5', '7', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', '9', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '5', 'B', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '6', '2', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '0', '8', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '0', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', '7', '2', 'C', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', 'E', '8', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '6', 'F', '1', '4', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '0', 'B', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '1', '2', '1', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '5', '1', 'F', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '5', '3', '3', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '6', 'D', '7', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', '9', '8', '1', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', 'A', '7', 'A', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '7', 'D', '4', '2', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', '9', 'E', '3', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', 'C', 'A', '9', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '8', 'D', '7', '0', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '9', '0', '4', 'A', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', '9', '1', '4', 'D', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '2', 'E', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '2', 'F', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'B', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'C', 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', '-', 'F', 'A', '6', 'D', 'J', 'A', 'C', 'K', '-', 'O', '-', 'L', 'A', 'N', 'T', 'E', 'R', 'N', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'A', 'R', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'Y', 'R', 'L', 'O', 'W', '-', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', '9', 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'H', 'I', 'N', 'G', 'E', 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', 'P', 'R', 'O', 'S', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', 'S', 'C', 'H', 'W', 'A', 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', 'R', 'I', 'G', 'H', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', 'S', 'E', 'S', 'Q', 'U', 'I', 'Q', 'U', 'A', 'D', 'R', 'A', 'T', 'E', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'O', 'S', 'S', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'S', 'O', 'L', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'T', 'Y', 'R', 'S', 'I', 'O', 'S', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'T', 'I', 'G', 'H', 'T', 'L', 'Y', '-', 'C', 'L', 'O', 'S', 'E', 'D', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'R', 'O', 'U', 'N', 'D', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '6', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '0', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '1', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '2', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '3', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '4', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '5', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '6', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'H', 'I', 'E', 'U', 'H', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'M', 'I', 'E', 'U', 'M', 'A', 'C', 'C', 'E', 'N', 'T', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'K', 'Y', 'L', 'I', 'S', 'M', 'A', 'A', 'N', 'T', 'I', 'R', 'E', 'S', 'T', 'R', 'I', 'C', 'T', 'I', 'O', 'N', 'B', 'L', 'A', 'C', 'K', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'I', 'O', 'S', 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'P', 'O', 'I', 'N', 'T', 'E', 'D', 'H', 'I', 'G', 'H', '-', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', '9', 'J', 'A', 'L', 'L', 'A', 'J', 'A', 'L', 'A', 'L', 'O', 'U', 'H', 'O', 'U', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'Y', 'P', 'O', 'R', 'R', 'O', 'O', 'N', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'O', 'S', 'S', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'S', 'O', 'L', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'P', 'E', 'T', 'A', 'S', 'T', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'M', 'A', 'D', 'R', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'N', 'A', 'U', 'D', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'B', 'A', 'R', 'B', 'E', 'D', 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'P', 'O', 'K', 'E', 'D', 'T', 'O', 'R', 'S', 'O', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', 'W', 'H', 'I', 'T', 'E', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', 'C', 'I', 'E', 'U', 'C', '-', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', 'E', 'X', 'T', 'R', 'A', 'T', 'E', 'R', 'R', 'E', 'S', 'T', 'R', 'I', 'A', 'L', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '6', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '0', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '1', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '2', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '3', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '4', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '5', 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '6', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'M', 'A', 'D', 'R', 'M', 'A', 'R', 'C', 'A', 'T', 'O', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'S', 'A', 'N', 'G', 'N', 'I', 'E', 'U', 'N', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', '-', 'H', 'I', 'E', 'U', 'H', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'S', 'S', 'A', 'N', 'G', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'N', 'K', 'E', 'D', 'T', 'O', 'R', 'S', 'O', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'T', 'R', 'A', 'V', 'E', 'L', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'E', 'Y', 'E', 'G', 'A', 'Z', 'E', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', '-', 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'H', 'A', 'G', 'A', 'L', 'L', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E', '-', 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'P', 'I', 'E', 'U', 'P', 'T', 'R', 'A', 'V', 'E', 'L', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', 'E', 'Y', 'E', 'G', 'A', 'Z', 'E', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'H', 'A', 'G', 'A', 'L', 'L', 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'N', 'O', 'R', 'T', 'H', 'E', 'A', 'S', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'P', 'A', 'R', 'T', 'I', 'A', 'L', 'L', 'Y', '-', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'H', 'I', 'E', 'U', 'H', 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'H', 'I', 'E', 'U', 'H', 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '-', 'W', 'A', 'L', 'L', 'P', 'L', 'A', 'N', 'E', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'B', 'J', 'A', 'R', 'K', 'A', 'N', 'S', 'I', 'O', 'S', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', 'S', 'S', 'A', 'N', 'G', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'M', 'O', 'V', 'E', 'M', 'E', 'N', 'T', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'O', 'P', 'E', 'N', '-', 'C', 'I', 'R', 'C', 'U', 'I', 'T', '-', 'O', 'U', 'T', 'P', 'U', 'T', 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', 'R', 'I', 'E', 'U', 'L', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', 'R', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '-', 'F', 'L', 'O', 'O', 'R', 'P', 'L', 'A', 'N', 'E', 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', '-', 'R', 'O', 'T', 'A', 'T', 'E', 'D', 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', 'P', 'A', 'N', 'S', 'I', 'O', 'S', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', 'B', 'Y', 'E', 'L', 'O', 'R', 'U', 'S', 'S', 'I', 'A', 'N', '-', 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'U', 'P', '-', 'O', 'U', 'T', 'P', 'U', 'T', 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', '-', 'H', 'I', 'E', 'U', 'H', 'O', 'N', 'E', '-', 'H', 'U', 'N', 'D', 'R', 'E', 'D', '-', 'A', 'N', 'D', '-', 'S', 'I', 'X', 'T', 'I', 'E', 'T', 'H', 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'D', 'O', 'W', 'N', '-', 'O', 'U', 'T', 'P', 'U', 'T', }; #define UNICODE_CHARNAME_NUM_WORDS 11782 static const struct { uint32_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[26] = { { 0, 0 }, { 0, 0 }, { 26, 26 }, { 740, 383 }, { 5432, 1947 }, { 19688, 5511 }, { 27713, 7116 }, { 32867, 7975 }, { 38439, 8771 }, { 43767, 9437 }, { 48177, 9927 }, { 51497, 10259 }, { 54082, 10494 }, { 55810, 10638 }, { 66782, 11482 }, { 68770, 11624 }, { 69220, 11654 }, { 70340, 11724 }, { 70680, 11744 }, { 71058, 11765 }, { 71210, 11773 }, { 71230, 11774 }, { 71293, 11777 }, { 71337, 11779 }, { 71360, 11780 }, { 71408, 11782 } }; #define UNICODE_CHARNAME_WORD_HANGUL 7409 #define UNICODE_CHARNAME_WORD_SYLLABLE 9348 #define UNICODE_CHARNAME_WORD_CJK 536 #define UNICODE_CHARNAME_WORD_COMPATIBILITY 10647 #define UNICODE_CHARNAME_WORD_VARIATION 9912 static const uint16_t unicode_names[115981] = { 23, 3, 897, 15672, 37, 317, 18774, 47, 317, 1, 19567, 968, 51, 18371, 887, 20234, 51, 18371, 7817, 12383, 16088, 51, 18371, 7817, 16069, 16088, 51, 18371, 9898, 51, 18371, 10313, 11756, 51, 18371, 13313, 23252, 51, 18371, 13341, 12383, 16088, 51, 18371, 13341, 16069, 16088, 51, 18371, 14603, 23252, 51, 18371, 15495, 15340, 51, 18371, 15495, 20336, 51, 18371, 15495, 20566, 51, 18371, 20355, 20566, 63, 16200, 167, 2511, 15029, 15672, 201, 6286, 201, 9374, 201, 13582, 203, 6286, 203, 9374, 203, 13582, 469, 2611, 13883, 18011, 15672, 469, 11994, 469, 11995, 9854, 469, 15127, 15330, 469, 15342, 469, 17247, 15672, 469, 17676, 469, 20850, 491, 7127, 9854, 493, 11709, 441, 17430, 493, 11709, 5228, 493, 11709, 11905, 2610, 493, 11709, 11905, 3076, 493, 11709, 11905, 3356, 493, 11709, 11905, 6756, 493, 11709, 11905, 6778, 493, 11709, 11905, 8780, 493, 11709, 11905, 10900, 493, 11709, 11905, 11978, 493, 11709, 11905, 13450, 493, 11709, 11905, 13736, 493, 11709, 13326, 493, 11709, 14999, 68, 493, 11709, 14999, 76, 493, 11709, 14999, 92, 493, 11709, 14999, 202, 493, 11709, 14999, 206, 493, 11709, 14999, 306, 493, 11709, 14999, 324, 493, 11709, 14999, 326, 493, 11709, 14999, 384, 493, 11709, 14999, 388, 493, 11709, 14999, 392, 493, 11709, 14999, 402, 493, 11709, 14999, 406, 493, 11709, 14999, 480, 493, 11709, 14999, 486, 493, 11709, 14999, 512, 493, 11709, 14999, 652, 493, 11709, 14999, 654, 493, 11709, 14999, 678, 493, 11709, 14999, 774, 493, 11709, 14999, 776, 493, 11709, 14999, 778, 493, 11709, 14999, 786, 493, 11709, 14999, 844, 493, 11709, 14999, 1272, 493, 11709, 14999, 1314, 493, 11709, 14999, 1764, 493, 11709, 14999, 2066, 493, 11709, 14999, 2628, 493, 11709, 14999, 3404, 493, 11709, 16427, 18812, 493, 11709, 18454, 493, 11709, 20269, 18812, 493, 11709, 20877, 14625, 15142, 493, 11709, 20877, 15142, 495, 15672, 497, 10641, 20685, 8321, 10641, 7817, 13341, 11477, 11392, 505, 10641, 1217, 14874, 516, 604, 671, 5741, 7817, 6435, 5741, 7817, 16480, 671, 5741, 7817, 6435, 5741, 13341, 16480, 671, 5741, 13341, 6435, 5741, 7817, 16480, 671, 5741, 13341, 6435, 5741, 13341, 16480, 671, 6435, 11476, 671, 6435, 11477, 10641, 5744, 671, 6435, 11571, 11476, 671, 6435, 14049, 11476, 671, 6435, 14625, 11476, 671, 6435, 20377, 11476, 671, 6435, 23305, 11476, 671, 6751, 10092, 671, 10086, 671, 10087, 10641, 14487, 11392, 671, 11477, 17369, 14486, 671, 13341, 17839, 18016, 671, 18906, 671, 18907, 317, 1, 19567, 968, 671, 18907, 16065, 3357, 20181, 5742, 708, 739, 17091, 144, 739, 17091, 168, 739, 17091, 244, 739, 17091, 342, 739, 17091, 354, 739, 17091, 392, 739, 17091, 430, 739, 17091, 500, 739, 17091, 642, 739, 17091, 710, 739, 17091, 742, 739, 17091, 752, 739, 17091, 982, 739, 17091, 1046, 739, 17091, 1066, 739, 17091, 1110, 739, 17091, 1114, 739, 17091, 1474, 739, 17091, 1530, 739, 17091, 1658, 739, 17091, 1822, 739, 17091, 1942, 739, 17091, 2134, 739, 17091, 2224, 739, 17091, 2332, 739, 17091, 2742, 739, 17091, 2758, 739, 17091, 2810, 739, 17091, 3060, 739, 17091, 3118, 739, 17091, 3214, 739, 17091, 3460, 739, 17091, 3500, 739, 17091, 3720, 739, 17091, 3848, 739, 17091, 3862, 739, 17091, 3864, 739, 17091, 5784, 739, 17091, 6114, 739, 17091, 6344, 739, 17091, 6984, 739, 17091, 6990, 739, 17091, 7352, 739, 17091, 7356, 739, 17091, 7362, 739, 17091, 7488, 739, 17091, 7508, 739, 17091, 8614, 739, 17091, 8966, 739, 17091, 8984, 739, 17091, 9030, 739, 17091, 9750, 739, 17091, 9792, 739, 17091, 9816, 739, 17091, 14222, 739, 18697, 0, 739, 18697, 8, 739, 18697, 16, 739, 18697, 28, 739, 18697, 84, 739, 18697, 92, 739, 18697, 100, 739, 18697, 106, 739, 18697, 110, 739, 18697, 114, 739, 18697, 116, 739, 18697, 120, 739, 18697, 122, 739, 18697, 124, 739, 18697, 130, 739, 18697, 134, 739, 18697, 140, 739, 18697, 142, 739, 18697, 144, 739, 18697, 148, 739, 18697, 154, 739, 18697, 158, 739, 18697, 166, 739, 18697, 168, 739, 18697, 220, 739, 18697, 224, 739, 18697, 230, 739, 18697, 236, 739, 18697, 238, 739, 18697, 240, 739, 18697, 244, 739, 18697, 248, 739, 18697, 254, 739, 18697, 258, 739, 18697, 260, 739, 18697, 266, 739, 18697, 270, 739, 18697, 282, 739, 18697, 300, 739, 18697, 320, 739, 18697, 328, 739, 18697, 332, 739, 18697, 340, 739, 18697, 342, 739, 18697, 344, 739, 18697, 346, 739, 18697, 350, 739, 18697, 354, 739, 18697, 358, 739, 18697, 366, 739, 18697, 370, 739, 18697, 384, 739, 18697, 388, 739, 18697, 392, 739, 18697, 402, 739, 18697, 406, 739, 18697, 412, 739, 18697, 416, 739, 18697, 424, 739, 18697, 430, 739, 18697, 436, 739, 18697, 440, 739, 18697, 446, 739, 18697, 448, 739, 18697, 452, 739, 18697, 460, 739, 18697, 468, 739, 18697, 472, 739, 18697, 500, 739, 18697, 508, 739, 18697, 516, 739, 18697, 522, 739, 18697, 536, 739, 18697, 540, 739, 18697, 546, 739, 18697, 552, 739, 18697, 560, 739, 18697, 564, 739, 18697, 568, 739, 18697, 570, 739, 18697, 572, 739, 18697, 574, 739, 18697, 580, 739, 18697, 584, 739, 18697, 586, 739, 18697, 588, 739, 18697, 592, 739, 18697, 598, 739, 18697, 602, 739, 18697, 612, 739, 18697, 618, 739, 18697, 622, 739, 18697, 626, 739, 18697, 630, 739, 18697, 634, 739, 18697, 642, 739, 18697, 668, 739, 18697, 680, 739, 18697, 684, 739, 18697, 686, 739, 18697, 690, 739, 18697, 692, 739, 18697, 694, 739, 18697, 700, 739, 18697, 710, 739, 18697, 712, 739, 18697, 724, 739, 18697, 726, 739, 18697, 732, 739, 18697, 738, 739, 18697, 742, 739, 18697, 746, 739, 18697, 750, 739, 18697, 752, 739, 18697, 754, 739, 18697, 758, 739, 18697, 760, 739, 18697, 762, 739, 18697, 764, 739, 18697, 894, 739, 18697, 898, 739, 18697, 902, 739, 18697, 904, 739, 18697, 906, 739, 18697, 908, 739, 18697, 910, 739, 18697, 912, 739, 18697, 914, 739, 18697, 926, 739, 18697, 930, 739, 18697, 944, 739, 18697, 948, 739, 18697, 950, 739, 18697, 952, 739, 18697, 962, 739, 18697, 964, 739, 18697, 968, 739, 18697, 978, 739, 18697, 980, 739, 18697, 982, 739, 18697, 986, 739, 18697, 988, 739, 18697, 998, 739, 18697, 1000, 739, 18697, 1002, 739, 18697, 1004, 739, 18697, 1014, 739, 18697, 1018, 739, 18697, 1022, 739, 18697, 1038, 739, 18697, 1040, 739, 18697, 1044, 739, 18697, 1046, 739, 18697, 1050, 739, 18697, 1052, 739, 18697, 1054, 739, 18697, 1056, 739, 18697, 1066, 739, 18697, 1068, 739, 18697, 1070, 739, 18697, 1080, 739, 18697, 1082, 739, 18697, 1086, 739, 18697, 1090, 739, 18697, 1092, 739, 18697, 1094, 739, 18697, 1096, 739, 18697, 1098, 739, 18697, 1110, 739, 18697, 1112, 739, 18697, 1114, 739, 18697, 1116, 739, 18697, 1132, 739, 18697, 1136, 739, 18697, 1138, 739, 18697, 1142, 739, 18697, 1144, 739, 18697, 1146, 739, 18697, 1148, 739, 18697, 1150, 739, 18697, 1160, 739, 18697, 1162, 739, 18697, 1176, 739, 18697, 1184, 739, 18697, 1186, 739, 18697, 1188, 739, 18697, 1214, 739, 18697, 1216, 739, 18697, 1218, 739, 18697, 1234, 739, 18697, 1236, 739, 18697, 1238, 739, 18697, 1240, 739, 18697, 1242, 739, 18697, 1352, 739, 18697, 1358, 739, 18697, 1360, 739, 18697, 1376, 739, 18697, 1378, 739, 18697, 1380, 739, 18697, 1394, 739, 18697, 1398, 739, 18697, 1406, 739, 18697, 1408, 739, 18697, 1410, 739, 18697, 1412, 739, 18697, 1422, 739, 18697, 1424, 739, 18697, 1426, 739, 18697, 1448, 739, 18697, 1452, 739, 18697, 1454, 739, 18697, 1474, 739, 18697, 1478, 739, 18697, 1480, 739, 18697, 1482, 739, 18697, 1484, 739, 18697, 1486, 739, 18697, 1488, 739, 18697, 1490, 739, 18697, 1506, 739, 18697, 1512, 739, 18697, 1514, 739, 18697, 1516, 739, 18697, 1528, 739, 18697, 1530, 739, 18697, 1532, 739, 18697, 1550, 739, 18697, 1552, 739, 18697, 1554, 739, 18697, 1556, 739, 18697, 1558, 739, 18697, 1594, 739, 18697, 1598, 739, 18697, 1602, 739, 18697, 1614, 739, 18697, 1618, 739, 18697, 1630, 739, 18697, 1638, 739, 18697, 1640, 739, 18697, 1642, 739, 18697, 1644, 739, 18697, 1646, 739, 18697, 1648, 739, 18697, 1650, 739, 18697, 1652, 739, 18697, 1656, 739, 18697, 1658, 739, 18697, 1660, 739, 18697, 1662, 739, 18697, 1664, 739, 18697, 1666, 739, 18697, 1668, 739, 18697, 1682, 739, 18697, 1684, 739, 18697, 1686, 739, 18697, 1700, 739, 18697, 1712, 739, 18697, 1714, 739, 18697, 1716, 739, 18697, 1718, 739, 18697, 1742, 739, 18697, 1744, 739, 18697, 1746, 739, 18697, 1802, 739, 18697, 1806, 739, 18697, 1808, 739, 18697, 1810, 739, 18697, 1816, 739, 18697, 1818, 739, 18697, 1820, 739, 18697, 1822, 739, 18697, 1828, 739, 18697, 1830, 739, 18697, 1832, 739, 18697, 1836, 739, 18697, 1838, 739, 18697, 1840, 739, 18697, 1842, 739, 18697, 1846, 739, 18697, 1850, 739, 18697, 1852, 739, 18697, 1854, 739, 18697, 1856, 739, 18697, 1880, 739, 18697, 1886, 739, 18697, 1890, 739, 18697, 1902, 739, 18697, 1906, 739, 18697, 1910, 739, 18697, 1930, 739, 18697, 1938, 739, 18697, 1942, 739, 18697, 1948, 739, 18697, 1978, 739, 18697, 1980, 739, 18697, 1984, 739, 18697, 2016, 739, 18697, 2018, 739, 18697, 2022, 739, 18697, 2024, 739, 18697, 2028, 739, 18697, 2082, 739, 18697, 2088, 739, 18697, 2094, 739, 18697, 2114, 739, 18697, 2120, 739, 18697, 2134, 739, 18697, 2140, 739, 18697, 2146, 739, 18697, 2148, 739, 18697, 2166, 739, 18697, 2172, 739, 18697, 2176, 739, 18697, 2200, 739, 18697, 2202, 739, 18697, 2204, 739, 18697, 2208, 739, 18697, 2210, 739, 18697, 2222, 739, 18697, 2224, 739, 18697, 2226, 739, 18697, 2228, 739, 18697, 2246, 739, 18697, 2252, 739, 18697, 2256, 739, 18697, 2286, 739, 18697, 2290, 739, 18697, 2292, 739, 18697, 2294, 739, 18697, 2296, 739, 18697, 2304, 739, 18697, 2316, 739, 18697, 2318, 739, 18697, 2320, 739, 18697, 2332, 739, 18697, 2334, 739, 18697, 2336, 739, 18697, 2350, 739, 18697, 2352, 739, 18697, 2354, 739, 18697, 2358, 739, 18697, 2360, 739, 18697, 2376, 739, 18697, 2378, 739, 18697, 2380, 739, 18697, 2398, 739, 18697, 2406, 739, 18697, 2410, 739, 18697, 2412, 739, 18697, 2414, 739, 18697, 2416, 739, 18697, 2418, 739, 18697, 2420, 739, 18697, 2422, 739, 18697, 2424, 739, 18697, 2426, 739, 18697, 2428, 739, 18697, 2436, 739, 18697, 2442, 739, 18697, 2444, 739, 18697, 2446, 739, 18697, 2452, 739, 18697, 2464, 739, 18697, 2472, 739, 18697, 2474, 739, 18697, 2476, 739, 18697, 2482, 739, 18697, 2484, 739, 18697, 2486, 739, 18697, 2488, 739, 18697, 2506, 739, 18697, 2510, 739, 18697, 2514, 739, 18697, 2518, 739, 18697, 2520, 739, 18697, 2522, 739, 18697, 2524, 739, 18697, 2526, 739, 18697, 2538, 739, 18697, 2540, 739, 18697, 2542, 739, 18697, 2544, 739, 18697, 2546, 739, 18697, 2562, 739, 18697, 2564, 739, 18697, 2566, 739, 18697, 2568, 739, 18697, 2570, 739, 18697, 2572, 739, 18697, 2574, 739, 18697, 2576, 739, 18697, 2646, 739, 18697, 2650, 739, 18697, 2656, 739, 18697, 2686, 739, 18697, 2694, 739, 18697, 2696, 739, 18697, 2698, 739, 18697, 2708, 739, 18697, 2710, 739, 18697, 2712, 739, 18697, 2734, 739, 18697, 2736, 739, 18697, 2740, 739, 18697, 2742, 739, 18697, 2744, 739, 18697, 2754, 739, 18697, 2756, 739, 18697, 2758, 739, 18697, 2760, 739, 18697, 2790, 739, 18697, 2796, 739, 18697, 2798, 739, 18697, 2800, 739, 18697, 2808, 739, 18697, 2810, 739, 18697, 2812, 739, 18697, 2824, 739, 18697, 2826, 739, 18697, 2828, 739, 18697, 2830, 739, 18697, 2836, 739, 18697, 2852, 739, 18697, 2854, 739, 18697, 2856, 739, 18697, 2860, 739, 18697, 2882, 739, 18697, 2886, 739, 18697, 2890, 739, 18697, 2906, 739, 18697, 2910, 739, 18697, 2950, 739, 18697, 2952, 739, 18697, 2954, 739, 18697, 2956, 739, 18697, 2958, 739, 18697, 2960, 739, 18697, 2962, 739, 18697, 2964, 739, 18697, 2976, 739, 18697, 2978, 739, 18697, 2980, 739, 18697, 2982, 739, 18697, 2984, 739, 18697, 2996, 739, 18697, 2998, 739, 18697, 3000, 739, 18697, 3002, 739, 18697, 3022, 739, 18697, 3028, 739, 18697, 3032, 739, 18697, 3040, 739, 18697, 3044, 739, 18697, 3048, 739, 18697, 3050, 739, 18697, 3054, 739, 18697, 3056, 739, 18697, 3060, 739, 18697, 3064, 739, 18697, 3072, 739, 18697, 3074, 739, 18697, 3076, 739, 18697, 3096, 739, 18697, 3102, 739, 18697, 3108, 739, 18697, 3114, 739, 18697, 3116, 739, 18697, 3118, 739, 18697, 3120, 739, 18697, 3122, 739, 18697, 3124, 739, 18697, 3138, 739, 18697, 3140, 739, 18697, 3142, 739, 18697, 3144, 739, 18697, 3148, 739, 18697, 3164, 739, 18697, 3166, 739, 18697, 3168, 739, 18697, 3170, 739, 18697, 3206, 739, 18697, 3214, 739, 18697, 3222, 739, 18697, 3234, 739, 18697, 3240, 739, 18697, 3256, 739, 18697, 3264, 739, 18697, 3268, 739, 18697, 3270, 739, 18697, 3292, 739, 18697, 3298, 739, 18697, 3302, 739, 18697, 3340, 739, 18697, 3342, 739, 18697, 3344, 739, 18697, 3346, 739, 18697, 3348, 739, 18697, 3408, 739, 18697, 3410, 739, 18697, 3446, 739, 18697, 3448, 739, 18697, 3454, 739, 18697, 3460, 739, 18697, 3466, 739, 18697, 3470, 739, 18697, 3474, 739, 18697, 3476, 739, 18697, 3478, 739, 18697, 3486, 739, 18697, 3490, 739, 18697, 3496, 739, 18697, 3498, 739, 18697, 3500, 739, 18697, 3502, 739, 18697, 3504, 739, 18697, 3510, 739, 18697, 3512, 739, 18697, 3514, 739, 18697, 3516, 739, 18697, 3526, 739, 18697, 3528, 739, 18697, 3534, 739, 18697, 3548, 739, 18697, 3550, 739, 18697, 3564, 739, 18697, 3568, 739, 18697, 3578, 739, 18697, 3600, 739, 18697, 3602, 739, 18697, 3604, 739, 18697, 3606, 739, 18697, 3610, 739, 18697, 3614, 739, 18697, 3616, 739, 18697, 3618, 739, 18697, 3638, 739, 18697, 3640, 739, 18697, 3642, 739, 18697, 3646, 739, 18697, 3710, 739, 18697, 3718, 739, 18697, 3720, 739, 18697, 3722, 739, 18697, 3730, 739, 18697, 3734, 739, 18697, 3736, 739, 18697, 3750, 739, 18697, 3752, 739, 18697, 3756, 739, 18697, 3760, 739, 18697, 3762, 739, 18697, 3776, 739, 18697, 3778, 739, 18697, 3780, 739, 18697, 3782, 739, 18697, 3796, 739, 18697, 3798, 739, 18697, 3800, 739, 18697, 3808, 739, 18697, 3810, 739, 18697, 3812, 739, 18697, 3814, 739, 18697, 3818, 739, 18697, 3820, 739, 18697, 3822, 739, 18697, 3828, 739, 18697, 3832, 739, 18697, 3834, 739, 18697, 3836, 739, 18697, 3846, 739, 18697, 3848, 739, 18697, 3850, 739, 18697, 3860, 739, 18697, 3862, 739, 18697, 3864, 739, 18697, 3866, 739, 18697, 3868, 739, 18697, 3874, 739, 18697, 3876, 739, 18697, 3878, 739, 18697, 3880, 739, 18697, 3882, 739, 18697, 3884, 739, 18697, 3886, 739, 18697, 3888, 739, 18697, 3890, 739, 18697, 3892, 739, 18697, 5752, 739, 18697, 5754, 739, 18697, 5756, 739, 18697, 5760, 739, 18697, 5762, 739, 18697, 5764, 739, 18697, 5766, 739, 18697, 5768, 739, 18697, 5770, 739, 18697, 5772, 739, 18697, 5774, 739, 18697, 5776, 739, 18697, 5778, 739, 18697, 5780, 739, 18697, 5782, 739, 18697, 5784, 739, 18697, 5786, 739, 18697, 5788, 739, 18697, 5790, 739, 18697, 5792, 739, 18697, 5828, 739, 18697, 5830, 739, 18697, 5832, 739, 18697, 5882, 739, 18697, 5884, 739, 18697, 5890, 739, 18697, 5896, 739, 18697, 6014, 739, 18697, 6018, 739, 18697, 6022, 739, 18697, 6030, 739, 18697, 6032, 739, 18697, 6034, 739, 18697, 6046, 739, 18697, 6048, 739, 18697, 6050, 739, 18697, 6054, 739, 18697, 6056, 739, 18697, 6058, 739, 18697, 6060, 739, 18697, 6066, 739, 18697, 6068, 739, 18697, 6070, 739, 18697, 6072, 739, 18697, 6074, 739, 18697, 6076, 739, 18697, 6078, 739, 18697, 6114, 739, 18697, 6116, 739, 18697, 6120, 739, 18697, 6134, 739, 18697, 6300, 739, 18697, 6302, 739, 18697, 6304, 739, 18697, 6310, 739, 18697, 6312, 739, 18697, 6324, 739, 18697, 6326, 739, 18697, 6328, 739, 18697, 6330, 739, 18697, 6334, 739, 18697, 6336, 739, 18697, 6338, 739, 18697, 6340, 739, 18697, 6342, 739, 18697, 6344, 739, 18697, 6346, 739, 18697, 6348, 739, 18697, 6396, 739, 18697, 6398, 739, 18697, 6452, 739, 18697, 6456, 739, 18697, 6794, 739, 18697, 6964, 739, 18697, 6966, 739, 18697, 6968, 739, 18697, 6972, 739, 18697, 6974, 739, 18697, 6976, 739, 18697, 6978, 739, 18697, 6980, 739, 18697, 6982, 739, 18697, 6984, 739, 18697, 6986, 739, 18697, 6988, 739, 18697, 6990, 739, 18697, 6992, 739, 18697, 6994, 739, 18697, 6996, 739, 18697, 6998, 739, 18697, 7028, 739, 18697, 7030, 739, 18697, 7032, 739, 18697, 7072, 739, 18697, 7074, 739, 18697, 7076, 739, 18697, 7080, 739, 18697, 7168, 739, 18697, 7176, 739, 18697, 7178, 739, 18697, 7182, 739, 18697, 7184, 739, 18697, 7186, 739, 18697, 7188, 739, 18697, 7190, 739, 18697, 7192, 739, 18697, 7194, 739, 18697, 7196, 739, 18697, 7198, 739, 18697, 7200, 739, 18697, 7202, 739, 18697, 7204, 739, 18697, 7206, 739, 18697, 7208, 739, 18697, 7210, 739, 18697, 7212, 739, 18697, 7214, 739, 18697, 7216, 739, 18697, 7218, 739, 18697, 7220, 739, 18697, 7222, 739, 18697, 7224, 739, 18697, 7226, 739, 18697, 7228, 739, 18697, 7230, 739, 18697, 7232, 739, 18697, 7234, 739, 18697, 7236, 739, 18697, 7238, 739, 18697, 7240, 739, 18697, 7242, 739, 18697, 7244, 739, 18697, 7246, 739, 18697, 7248, 739, 18697, 7250, 739, 18697, 7252, 739, 18697, 7254, 739, 18697, 7256, 739, 18697, 7260, 739, 18697, 7262, 739, 18697, 7264, 739, 18697, 7266, 739, 18697, 7268, 739, 18697, 7270, 739, 18697, 7272, 739, 18697, 7274, 739, 18697, 7276, 739, 18697, 7278, 739, 18697, 7282, 739, 18697, 7284, 739, 18697, 7324, 739, 18697, 7326, 739, 18697, 7328, 739, 18697, 7338, 739, 18697, 7340, 739, 18697, 7342, 739, 18697, 7344, 739, 18697, 7346, 739, 18697, 7348, 739, 18697, 7350, 739, 18697, 7352, 739, 18697, 7354, 739, 18697, 7356, 739, 18697, 7358, 739, 18697, 7360, 739, 18697, 7362, 739, 18697, 7478, 739, 18697, 7480, 739, 18697, 7482, 739, 18697, 7488, 739, 18697, 7490, 739, 18697, 7492, 739, 18697, 7494, 739, 18697, 7496, 739, 18697, 7498, 739, 18697, 7500, 739, 18697, 7502, 739, 18697, 7504, 739, 18697, 7506, 739, 18697, 7508, 739, 18697, 7510, 739, 18697, 7512, 739, 18697, 7514, 739, 18697, 7516, 739, 18697, 7532, 739, 18697, 7534, 739, 18697, 7536, 739, 18697, 7538, 739, 18697, 7540, 739, 18697, 7668, 739, 18697, 7670, 739, 18697, 7720, 739, 18697, 7724, 739, 18697, 7728, 739, 18697, 7840, 739, 18697, 7842, 739, 18697, 7844, 739, 18697, 7896, 739, 18697, 7898, 739, 18697, 7900, 739, 18697, 7902, 739, 18697, 7912, 739, 18697, 8386, 739, 18697, 8388, 739, 18697, 8390, 739, 18697, 8402, 739, 18697, 8404, 739, 18697, 8406, 739, 18697, 8408, 739, 18697, 8410, 739, 18697, 8412, 739, 18697, 8414, 739, 18697, 8416, 739, 18697, 8418, 739, 18697, 8420, 739, 18697, 8422, 739, 18697, 8430, 739, 18697, 8432, 739, 18697, 8478, 739, 18697, 8480, 739, 18697, 8482, 739, 18697, 8488, 739, 18697, 8608, 739, 18697, 8610, 739, 18697, 8612, 739, 18697, 8614, 739, 18697, 8616, 739, 18697, 8618, 739, 18697, 8620, 739, 18697, 8622, 739, 18697, 8624, 739, 18697, 8626, 739, 18697, 8630, 739, 18697, 8632, 739, 18697, 8634, 739, 18697, 8636, 739, 18697, 8638, 739, 18697, 8640, 739, 18697, 8642, 739, 18697, 8644, 739, 18697, 8650, 739, 18697, 8652, 739, 18697, 8654, 739, 18697, 8658, 739, 18697, 8660, 739, 18697, 8662, 739, 18697, 8664, 739, 18697, 8668, 739, 18697, 8670, 739, 18697, 8676, 739, 18697, 8678, 739, 18697, 8680, 739, 18697, 8684, 739, 18697, 8686, 739, 18697, 8688, 739, 18697, 8690, 739, 18697, 8710, 739, 18697, 8716, 739, 18697, 8718, 739, 18697, 8722, 739, 18697, 8724, 739, 18697, 8738, 739, 18697, 8750, 739, 18697, 8754, 739, 18697, 8758, 739, 18697, 8762, 739, 18697, 8772, 739, 18697, 8774, 739, 18697, 8794, 739, 18697, 8796, 739, 18697, 8798, 739, 18697, 8800, 739, 18697, 8804, 739, 18697, 8806, 739, 18697, 8808, 739, 18697, 8810, 739, 18697, 8812, 739, 18697, 8814, 739, 18697, 8816, 739, 18697, 8818, 739, 18697, 8820, 739, 18697, 8822, 739, 18697, 8824, 739, 18697, 8858, 739, 18697, 8860, 739, 18697, 8862, 739, 18697, 8864, 739, 18697, 8868, 739, 18697, 8870, 739, 18697, 8872, 739, 18697, 8874, 739, 18697, 8878, 739, 18697, 8880, 739, 18697, 8882, 739, 18697, 8884, 739, 18697, 8886, 739, 18697, 8888, 739, 18697, 8890, 739, 18697, 8892, 739, 18697, 8928, 739, 18697, 8930, 739, 18697, 8932, 739, 18697, 8962, 739, 18697, 8966, 739, 18697, 8972, 739, 18697, 8974, 739, 18697, 8984, 739, 18697, 8986, 739, 18697, 8988, 739, 18697, 8994, 739, 18697, 8996, 739, 18697, 8998, 739, 18697, 9000, 739, 18697, 9004, 739, 18697, 9008, 739, 18697, 9010, 739, 18697, 9012, 739, 18697, 9014, 739, 18697, 9016, 739, 18697, 9018, 739, 18697, 9020, 739, 18697, 9022, 739, 18697, 9024, 739, 18697, 9028, 739, 18697, 9030, 739, 18697, 9034, 739, 18697, 9036, 739, 18697, 9038, 739, 18697, 9040, 739, 18697, 9042, 739, 18697, 9044, 739, 18697, 9256, 739, 18697, 9260, 739, 18697, 9310, 739, 18697, 9312, 739, 18697, 9314, 739, 18697, 9328, 739, 18697, 9364, 739, 18697, 9366, 739, 18697, 9368, 739, 18697, 9376, 739, 18697, 9378, 739, 18697, 9380, 739, 18697, 9382, 739, 18697, 9394, 739, 18697, 9526, 739, 18697, 9530, 739, 18697, 9532, 739, 18697, 9534, 739, 18697, 9536, 739, 18697, 9538, 739, 18697, 9540, 739, 18697, 9544, 739, 18697, 9546, 739, 18697, 9548, 739, 18697, 9550, 739, 18697, 9552, 739, 18697, 9554, 739, 18697, 9556, 739, 18697, 9558, 739, 18697, 9560, 739, 18697, 9568, 739, 18697, 9570, 739, 18697, 9572, 739, 18697, 9584, 739, 18697, 9748, 739, 18697, 9750, 739, 18697, 9752, 739, 18697, 9762, 739, 18697, 9764, 739, 18697, 9766, 739, 18697, 9792, 739, 18697, 9796, 739, 18697, 9798, 739, 18697, 9812, 739, 18697, 9814, 739, 18697, 9816, 739, 18697, 9818, 739, 18697, 9820, 739, 18697, 9834, 739, 18697, 9836, 739, 18697, 9838, 739, 18697, 9840, 739, 18697, 9848, 739, 18697, 9850, 739, 18697, 9904, 739, 18697, 9906, 739, 18697, 9908, 739, 18697, 9912, 739, 18697, 9914, 739, 18697, 9918, 739, 18697, 9920, 739, 18697, 9922, 739, 18697, 9924, 739, 18697, 9926, 739, 18697, 9928, 739, 18697, 9930, 739, 18697, 9932, 739, 18697, 9934, 739, 18697, 9938, 739, 18697, 9940, 739, 18697, 9942, 739, 18697, 9944, 739, 18697, 9946, 739, 18697, 9976, 739, 18697, 9978, 739, 18697, 9984, 739, 18697, 9992, 739, 18697, 10184, 739, 18697, 10186, 739, 18697, 10290, 739, 18697, 10292, 739, 18697, 10294, 739, 18697, 10300, 739, 18697, 10544, 739, 18697, 10546, 739, 18697, 10548, 739, 18697, 10560, 739, 18697, 10562, 739, 18697, 10658, 739, 18697, 10660, 739, 18697, 10688, 739, 18697, 10690, 739, 18697, 10692, 739, 18697, 10696, 739, 18697, 10708, 739, 18697, 10794, 739, 18697, 10796, 739, 18697, 10798, 739, 18697, 10838, 739, 18697, 10840, 739, 18697, 10842, 739, 18697, 10844, 739, 18697, 10854, 739, 18697, 10906, 739, 18697, 10910, 739, 18697, 10912, 739, 18697, 10916, 739, 18697, 10918, 739, 18697, 10920, 739, 18697, 10928, 739, 18697, 10930, 739, 18697, 10932, 739, 18697, 10934, 739, 18697, 10936, 739, 18697, 10938, 739, 18697, 10940, 739, 18697, 10942, 739, 18697, 10948, 739, 18697, 10950, 739, 18697, 10952, 739, 18697, 10954, 739, 18697, 10958, 739, 18697, 10960, 739, 18697, 10966, 739, 18697, 10968, 739, 18697, 10970, 739, 18697, 10976, 739, 18697, 10980, 739, 18697, 10982, 739, 18697, 10984, 739, 18697, 10988, 739, 18697, 10990, 739, 18697, 10992, 739, 18697, 10994, 739, 18697, 10996, 739, 18697, 10998, 739, 18697, 11000, 739, 18697, 11002, 739, 18697, 11006, 739, 18697, 11008, 739, 18697, 11010, 739, 18697, 11014, 739, 18697, 11016, 739, 18697, 11018, 739, 18697, 11020, 739, 18697, 11528, 739, 18697, 11530, 739, 18697, 11532, 739, 18697, 11534, 739, 18697, 11536, 739, 18697, 11538, 739, 18697, 11722, 739, 18697, 11724, 739, 18697, 11726, 739, 18697, 11728, 739, 18697, 11730, 739, 18697, 11874, 739, 18697, 11876, 739, 18697, 11878, 739, 18697, 11880, 739, 18697, 11882, 739, 18697, 12174, 739, 18697, 12176, 739, 18697, 12178, 739, 18697, 12180, 739, 18697, 12182, 739, 18697, 12184, 739, 18697, 12286, 739, 18697, 12288, 739, 18697, 12290, 739, 18697, 12292, 739, 18697, 12294, 739, 18697, 12296, 739, 18697, 12298, 739, 18697, 12300, 739, 18697, 12304, 739, 18697, 12306, 739, 18697, 12308, 739, 18697, 12310, 739, 18697, 12312, 739, 18697, 12314, 739, 18697, 12316, 739, 18697, 12318, 739, 18697, 12342, 739, 18697, 12344, 739, 18697, 12346, 739, 18697, 12348, 739, 18697, 12350, 739, 18697, 12352, 739, 18697, 12406, 739, 18697, 12408, 739, 18697, 12410, 739, 18697, 12412, 739, 18697, 12414, 739, 18697, 12416, 739, 18697, 12722, 739, 18697, 12724, 739, 18697, 12726, 739, 18697, 12728, 739, 18697, 12814, 739, 18697, 12816, 739, 18697, 12818, 739, 18697, 12820, 739, 18697, 12832, 739, 18697, 12836, 739, 18697, 12860, 739, 18697, 12862, 739, 18697, 12882, 739, 18697, 12884, 739, 18697, 12904, 739, 18697, 12906, 739, 18697, 12908, 739, 18697, 12914, 739, 18697, 12918, 739, 18697, 12920, 739, 18697, 12980, 739, 18697, 12982, 739, 18697, 13056, 739, 18697, 13058, 739, 18697, 13060, 739, 18697, 13062, 739, 18697, 13064, 739, 18697, 13068, 739, 18697, 13070, 739, 18697, 13072, 739, 18697, 13074, 739, 18697, 13076, 739, 18697, 13358, 739, 18697, 13360, 739, 18697, 13362, 739, 18697, 13512, 739, 18697, 13514, 739, 18697, 13516, 739, 18697, 13526, 739, 18697, 13602, 739, 18697, 13604, 739, 18697, 13606, 739, 18697, 14200, 739, 18697, 14202, 739, 18697, 14204, 739, 18697, 14206, 739, 18697, 14220, 739, 18697, 14222, 739, 18697, 14224, 739, 18697, 14228, 739, 18697, 14230, 739, 18697, 19371, 8320, 797, 15528, 835, 12005, 634, 835, 22966, 836, 843, 10641, 1216, 850, 857, 20151, 15673, 671, 9787, 1830, 857, 20151, 15673, 671, 10087, 1830, 857, 20151, 15673, 671, 10087, 16946, 857, 20151, 15673, 671, 10087, 19058, 857, 20151, 15673, 671, 11653, 13758, 857, 20151, 15673, 1159, 13622, 857, 20151, 15673, 1159, 13758, 857, 20151, 15673, 1159, 19058, 857, 20151, 15673, 1831, 18836, 857, 20151, 15673, 1831, 19058, 857, 20151, 15673, 2914, 857, 20151, 15673, 6435, 9787, 13622, 857, 20151, 15673, 6435, 10087, 1830, 857, 20151, 15673, 6435, 10087, 18836, 857, 20151, 15673, 6435, 11653, 13758, 857, 20151, 15673, 7438, 857, 20151, 15673, 7439, 18836, 857, 20151, 15673, 7817, 9787, 13622, 857, 20151, 15673, 9374, 857, 20151, 15673, 9375, 671, 11652, 857, 20151, 15673, 9375, 1158, 857, 20151, 15673, 9375, 1830, 857, 20151, 15673, 9375, 2511, 12004, 857, 20151, 15673, 9375, 6435, 11652, 857, 20151, 15673, 9375, 11756, 857, 20151, 15673, 9375, 11888, 857, 20151, 15673, 9375, 12004, 857, 20151, 15673, 9375, 13546, 857, 20151, 15673, 9375, 14486, 857, 20151, 15673, 9375, 14592, 857, 20151, 15673, 9375, 16248, 857, 20151, 15673, 9375, 17463, 11476, 857, 20151, 15673, 9375, 18510, 857, 20151, 15673, 9375, 18922, 857, 20151, 15673, 9375, 19215, 11476, 857, 20151, 15673, 9375, 19407, 11476, 857, 20151, 15673, 9375, 19408, 857, 20151, 15673, 9375, 20375, 11476, 857, 20151, 15673, 9375, 21096, 857, 20151, 15673, 9951, 19058, 857, 20151, 15673, 11436, 857, 20151, 15673, 11437, 18836, 857, 20151, 15673, 11763, 896, 857, 20151, 15673, 11889, 13622, 857, 20151, 15673, 11889, 18836, 857, 20151, 15673, 13144, 857, 20151, 15673, 13145, 18836, 857, 20151, 15673, 13295, 9374, 857, 20151, 15673, 13295, 18836, 857, 20151, 15673, 13547, 896, 857, 20151, 15673, 13623, 13758, 857, 20151, 15673, 13759, 19058, 857, 20151, 15673, 14208, 857, 20151, 15673, 14487, 1830, 857, 20151, 15673, 14487, 9950, 857, 20151, 15673, 14487, 13622, 857, 20151, 15673, 14487, 18836, 857, 20151, 15673, 14487, 18922, 857, 20151, 15673, 14487, 19058, 857, 20151, 15673, 14858, 857, 20151, 15673, 15623, 9374, 857, 20151, 15673, 16249, 18836, 857, 20151, 15673, 16377, 18836, 857, 20151, 15673, 17463, 10524, 857, 20151, 15673, 18923, 896, 857, 20151, 15673, 19215, 10524, 857, 20151, 15673, 19407, 10524, 857, 20151, 15673, 19615, 18836, 857, 20151, 15673, 20375, 10524, 857, 20151, 15673, 21097, 19058, 858, 897, 11692, 898, 916, 929, 15672, 947, 17123, 17254, 947, 17254, 958, 967, 843, 11476, 969, 17997, 671, 12277, 843, 6435, 20181, 12562, 969, 17997, 671, 12277, 843, 7817, 6435, 12562, 969, 17997, 671, 12277, 843, 7817, 12562, 969, 17997, 671, 12277, 843, 13341, 6435, 12562, 969, 17997, 671, 12277, 843, 13341, 12562, 969, 17997, 671, 12277, 843, 20181, 12562, 969, 17997, 671, 12563, 843, 6435, 20181, 12276, 969, 17997, 671, 12563, 843, 7817, 6435, 12276, 969, 17997, 671, 12563, 843, 7817, 12276, 969, 17997, 671, 12563, 843, 13341, 6435, 12276, 969, 17997, 671, 12563, 843, 13341, 12276, 969, 17997, 671, 12563, 843, 20181, 12276, 969, 17997, 671, 14625, 843, 7817, 15572, 969, 17997, 671, 14625, 843, 13341, 15572, 969, 17997, 671, 14625, 843, 20181, 15572, 969, 17997, 671, 15573, 843, 7817, 14624, 969, 17997, 671, 15573, 843, 13341, 14624, 969, 17997, 671, 15573, 843, 20181, 14624, 969, 17997, 6435, 12277, 843, 671, 20181, 12562, 969, 17997, 6435, 12277, 843, 7817, 671, 12562, 969, 17997, 6435, 12277, 843, 7817, 12562, 969, 17997, 6435, 12277, 843, 13341, 671, 12562, 969, 17997, 6435, 12277, 843, 13341, 12562, 969, 17997, 6435, 12277, 843, 20181, 12562, 969, 17997, 6435, 12563, 843, 671, 20181, 12276, 969, 17997, 6435, 12563, 843, 7817, 671, 12276, 969, 17997, 6435, 12563, 843, 7817, 12276, 969, 17997, 6435, 12563, 843, 13341, 671, 12276, 969, 17997, 6435, 12563, 843, 13341, 12276, 969, 17997, 6435, 12563, 843, 20181, 12276, 969, 17997, 6435, 14625, 843, 7817, 15572, 969, 17997, 6435, 14625, 843, 13341, 15572, 969, 17997, 6435, 14625, 843, 20181, 15572, 969, 17997, 6435, 15573, 843, 7817, 14624, 969, 17997, 6435, 15573, 843, 13341, 14624, 969, 17997, 6435, 15573, 843, 20181, 14624, 969, 17997, 7817, 671, 12277, 843, 13341, 6435, 12562, 969, 17997, 7817, 6435, 12277, 843, 13341, 671, 12562, 969, 17997, 7817, 12277, 843, 13341, 671, 12562, 969, 17997, 7817, 12277, 843, 13341, 6435, 12562, 969, 17997, 7817, 12277, 843, 13341, 18847, 12562, 969, 17997, 7817, 12563, 843, 13341, 671, 12276, 969, 17997, 7817, 12563, 843, 13341, 6435, 12276, 969, 17997, 7817, 12563, 843, 13341, 18847, 12276, 969, 17997, 12277, 670, 969, 17997, 12277, 671, 843, 7816, 969, 17997, 12277, 671, 843, 12563, 6434, 969, 17997, 12277, 671, 843, 13340, 969, 17997, 12277, 671, 843, 20180, 969, 17997, 12277, 6434, 969, 17997, 12277, 6435, 843, 7816, 969, 17997, 12277, 6435, 843, 13340, 969, 17997, 12277, 6435, 843, 20180, 969, 17997, 12277, 7816, 969, 17997, 12277, 7817, 843, 12563, 13340, 969, 17997, 12277, 13340, 969, 17997, 12277, 14625, 6287, 18846, 969, 17997, 12277, 14625, 6287, 20180, 969, 17997, 12277, 15781, 6287, 18846, 969, 17997, 12277, 15781, 6287, 20180, 969, 17997, 12277, 18846, 969, 17997, 12277, 18847, 843, 7816, 969, 17997, 12277, 18847, 843, 13340, 969, 17997, 12277, 18847, 843, 20180, 969, 17997, 12277, 19553, 6287, 18846, 969, 17997, 12277, 19553, 6287, 20180, 969, 17997, 12277, 20180, 969, 17997, 12563, 670, 969, 17997, 12563, 671, 843, 7816, 969, 17997, 12563, 671, 843, 12277, 6434, 969, 17997, 12563, 671, 843, 13340, 969, 17997, 12563, 671, 843, 20180, 969, 17997, 12563, 859, 671, 843, 7816, 969, 17997, 12563, 859, 671, 843, 13340, 969, 17997, 12563, 859, 6435, 843, 7816, 969, 17997, 12563, 859, 6435, 843, 13340, 969, 17997, 12563, 6434, 969, 17997, 12563, 6435, 843, 7816, 969, 17997, 12563, 6435, 843, 13340, 969, 17997, 12563, 6435, 843, 20180, 969, 17997, 12563, 7816, 969, 17997, 12563, 7817, 843, 12277, 13340, 969, 17997, 12563, 13340, 969, 17997, 12563, 14625, 6287, 18846, 969, 17997, 12563, 14625, 6287, 20180, 969, 17997, 12563, 15781, 6287, 18846, 969, 17997, 12563, 15781, 6287, 20180, 969, 17997, 12563, 17839, 11772, 969, 17997, 12563, 17839, 13889, 7817, 635, 12589, 13340, 969, 17997, 12563, 17839, 13889, 13341, 635, 12589, 7816, 969, 17997, 12563, 18846, 969, 17997, 12563, 18847, 843, 7816, 969, 17997, 12563, 18847, 843, 13340, 969, 17997, 12563, 18847, 843, 20180, 969, 17997, 12563, 19553, 6287, 18846, 969, 17997, 12563, 19553, 6287, 20180, 969, 17997, 12563, 20180, 969, 17997, 13341, 671, 12277, 843, 7817, 6435, 12562, 969, 17997, 13341, 6435, 12277, 843, 7817, 671, 12562, 969, 17997, 13341, 12277, 843, 7817, 671, 12562, 969, 17997, 13341, 12277, 843, 7817, 6435, 12562, 969, 17997, 13341, 12277, 843, 7817, 18847, 12562, 969, 17997, 13341, 12563, 843, 7817, 671, 12276, 969, 17997, 13341, 12563, 843, 7817, 6435, 12276, 969, 17997, 13341, 12563, 843, 7817, 18847, 12276, 969, 17997, 14625, 671, 843, 7816, 969, 17997, 14625, 671, 843, 13340, 969, 17997, 14625, 671, 843, 20180, 969, 17997, 14625, 6435, 843, 7816, 969, 17997, 14625, 6435, 843, 13340, 969, 17997, 14625, 6435, 843, 20180, 969, 17997, 14625, 18846, 969, 17997, 14625, 18847, 843, 7816, 969, 17997, 14625, 18847, 843, 13340, 969, 17997, 14625, 18847, 843, 20180, 969, 17997, 14625, 20180, 969, 17997, 18847, 12277, 843, 7817, 12562, 969, 17997, 18847, 12277, 843, 13341, 12562, 969, 17997, 18847, 12277, 843, 20181, 12562, 969, 17997, 18847, 12563, 843, 7817, 12276, 969, 17997, 18847, 12563, 843, 13341, 12276, 969, 17997, 18847, 12563, 843, 20181, 12276, 969, 17997, 18847, 14625, 843, 7817, 15572, 969, 17997, 18847, 14625, 843, 13341, 15572, 969, 17997, 18847, 14625, 843, 20181, 15572, 969, 17997, 18847, 15573, 843, 7817, 14624, 969, 17997, 18847, 15573, 843, 13341, 14624, 969, 17997, 18847, 15573, 843, 20181, 14624, 970, 976, 984, 985, 9956, 1017, 17238, 1018, 1019, 6718, 1019, 6719, 10641, 3571, 13568, 1019, 6719, 10641, 13693, 485, 1834, 1042, 1049, 2914, 1073, 15643, 6, 1073, 15643, 14, 1073, 15643, 26, 1073, 15643, 30, 1073, 15643, 32, 1073, 15643, 36, 1073, 15643, 38, 1073, 15643, 272, 1073, 15643, 284, 1073, 15643, 290, 1073, 15643, 526, 1073, 15643, 532, 1073, 15643, 554, 1073, 15643, 594, 1073, 15643, 604, 1073, 15643, 610, 1073, 15643, 616, 1073, 15643, 620, 1073, 15643, 632, 1073, 15643, 702, 1073, 15643, 722, 1073, 15643, 996, 1073, 15643, 1722, 1073, 15643, 1724, 1073, 15643, 1726, 1073, 15643, 1728, 1073, 15643, 3154, 1073, 15643, 3160, 1073, 15643, 3182, 1073, 15643, 7312, 1073, 15643, 7364, 1073, 15643, 7366, 1073, 15643, 7368, 1073, 15643, 7370, 1073, 15643, 10000, 1073, 15643, 12354, 1073, 17091, 968, 1073, 17091, 1084, 1073, 17091, 1206, 1073, 17091, 1267, 2610, 1073, 17091, 1267, 3356, 1073, 17091, 1267, 13736, 1073, 17091, 1332, 1073, 17091, 1336, 1073, 17091, 2439, 2610, 1073, 17091, 2439, 3356, 1073, 17091, 2439, 6778, 1073, 17091, 2439, 13736, 1073, 17091, 2606, 1073, 17091, 2655, 2610, 1073, 17091, 2655, 3356, 1073, 17091, 2878, 1073, 17091, 2882, 1073, 17091, 3136, 1073, 17091, 5844, 1073, 17091, 5855, 485, 11746, 1073, 17091, 5858, 1073, 17091, 6082, 1073, 17091, 6746, 1073, 17091, 6772, 1073, 17091, 7126, 1073, 17091, 7138, 1073, 17091, 7304, 1073, 17091, 7458, 1073, 17091, 7793, 2610, 1073, 17091, 7793, 3356, 1073, 17091, 7793, 6778, 1073, 17091, 7793, 13736, 1073, 17091, 7883, 2610, 1073, 17091, 7883, 3356, 1073, 17091, 8352, 1073, 17091, 8368, 1073, 17091, 8460, 1073, 17091, 9466, 1073, 17091, 9712, 1073, 17091, 9860, 1073, 17091, 10617, 2610, 1073, 17091, 10617, 3356, 1073, 17091, 10629, 2610, 1073, 17091, 10629, 3356, 1073, 17091, 11605, 2610, 1073, 17091, 11605, 3356, 1073, 17091, 11716, 1073, 17091, 11740, 1073, 17091, 11884, 1073, 17091, 12200, 1073, 17091, 12231, 2610, 1073, 17091, 12231, 3356, 1073, 17091, 12231, 13736, 1073, 17091, 12275, 2610, 1073, 17091, 12275, 3356, 1073, 17091, 12485, 2610, 1073, 17091, 12485, 3356, 1073, 17091, 12759, 2610, 1073, 17091, 12759, 3356, 1073, 17091, 13476, 1073, 17091, 13563, 2610, 1073, 17091, 13563, 3356, 1073, 17091, 13572, 1073, 17091, 13575, 2610, 1073, 17091, 13575, 3356, 1073, 17091, 13682, 1073, 17091, 13754, 1073, 17091, 14033, 2610, 1073, 17091, 14033, 3356, 1073, 17091, 14346, 1073, 17091, 15136, 1073, 17091, 15140, 1073, 17091, 15320, 1073, 17091, 15434, 1073, 17091, 15507, 2610, 1073, 17091, 15507, 3356, 1073, 17091, 15507, 13736, 1073, 17091, 15607, 2610, 1073, 17091, 15607, 3356, 1073, 17091, 15740, 1073, 17091, 15812, 1073, 17091, 16164, 1073, 17091, 17758, 1073, 17091, 19984, 1073, 17091, 20407, 7123, 10229, 13818, 1073, 17091, 20407, 7304, 1073, 17091, 20407, 10616, 1073, 17091, 20407, 14044, 1073, 17091, 20407, 15920, 1073, 17091, 21029, 1266, 1073, 17091, 21029, 1384, 1073, 17091, 21029, 3036, 1073, 17091, 21029, 5834, 1073, 17091, 21029, 5978, 1073, 17091, 21029, 6602, 1073, 17091, 21029, 6750, 1073, 17091, 21029, 6782, 1073, 17091, 21029, 6930, 1073, 17091, 21029, 7048, 1073, 17091, 21029, 7812, 1073, 17091, 21029, 7882, 1073, 17091, 21029, 9694, 1073, 17091, 21029, 9860, 1073, 17091, 21029, 10634, 1073, 17091, 21029, 12330, 1073, 17091, 21029, 13482, 1073, 17091, 21029, 13794, 1073, 17091, 21029, 14626, 1073, 17091, 21029, 15600, 1073, 17091, 21029, 15693, 16708, 1073, 17091, 21029, 15812, 1073, 17091, 21127, 6602, 1073, 17091, 21127, 13794, 1073, 17091, 21127, 14626, 1073, 17091, 21127, 15812, 1073, 21295, 23086, 1073, 21295, 23088, 1073, 21295, 23090, 1073, 21295, 23092, 1073, 21295, 23094, 1084, 1085, 6718, 1093, 497, 11571, 15620, 1177, 14662, 1177, 14664, 1177, 14666, 1177, 14668, 1177, 14670, 1177, 14672, 1206, 1207, 6718, 1217, 9286, 1217, 11392, 1217, 12740, 1217, 18386, 1244, 1264, 1265, 485, 9496, 1265, 485, 12652, 1278, 1299, 485, 13264, 1299, 10641, 19407, 11477, 11392, 1336, 1361, 7414, 1361, 16740, 1386, 1397, 834, 1399, 6718, 1400, 1471, 13628, 1685, 1206, 1685, 15314, 1685, 17272, 1685, 17674, 1741, 11768, 1741, 13540, 1741, 14847, 13621, 843, 9304, 1754, 1912, 1939, 9854, 2081, 283, 436, 2081, 283, 468, 2081, 367, 384, 2081, 10219, 2241, 196, 2081, 10219, 2241, 630, 2081, 10219, 2241, 3248, 2081, 10219, 2241, 14446, 2081, 11905, 2610, 2081, 11905, 3076, 2081, 11905, 3356, 2081, 11905, 6756, 2081, 11905, 6778, 2081, 11905, 8780, 2081, 11905, 10900, 2081, 11905, 11978, 2081, 11905, 13450, 2081, 11905, 13736, 2081, 14003, 9855, 0, 2081, 14003, 9855, 8, 2081, 14003, 9855, 16, 2081, 14003, 9855, 28, 2081, 14003, 9855, 40, 2081, 14003, 9855, 48, 2081, 14003, 9855, 58, 2081, 14003, 9855, 72, 2081, 14003, 9855, 78, 2081, 14003, 9855, 102, 2081, 14003, 9855, 192, 2081, 14003, 9855, 308, 2081, 14003, 9855, 676, 2081, 14003, 9855, 750, 2081, 14003, 9855, 2241, 1878, 2081, 14003, 9855, 2241, 1974, 2081, 14999, 28, 2081, 14999, 116, 2081, 14999, 140, 2081, 14999, 166, 2081, 14999, 237, 1362, 2081, 14999, 237, 1390, 2081, 14999, 237, 3200, 2081, 14999, 237, 9974, 2081, 14999, 283, 3200, 2081, 14999, 283, 9974, 2081, 14999, 366, 2081, 14999, 402, 2081, 14999, 403, 7856, 2081, 14999, 403, 7890, 2081, 14999, 436, 2081, 14999, 468, 2081, 14999, 540, 2081, 14999, 580, 2081, 14999, 603, 3200, 2081, 14999, 603, 9974, 2081, 14999, 634, 2081, 14999, 710, 2081, 14999, 742, 2081, 14999, 1921, 3200, 2081, 14999, 1921, 9974, 2081, 14999, 2452, 2081, 14999, 2564, 2081, 14999, 2683, 3200, 2081, 14999, 2683, 9974, 2081, 14999, 3249, 3200, 2081, 14999, 3249, 9974, 2081, 14999, 7655, 258, 2081, 14999, 7655, 2564, 2081, 18016, 2081, 19468, 2081, 19617, 9855, 402, 2081, 19617, 9855, 2564, 2081, 21033, 8320, 2112, 2175, 7854, 2175, 14625, 13261, 19557, 8320, 2175, 17642, 2175, 19913, 15672, 2178, 2180, 2182, 2184, 2242, 2243, 317, 15814, 2243, 317, 17707, 9971, 20218, 2243, 843, 14065, 16497, 12262, 2243, 10641, 1541, 537, 2244, 2243, 10641, 15804, 2243, 16220, 2247, 15673, 1397, 20220, 2341, 11854, 2341, 11905, 2610, 2341, 11905, 3076, 2341, 11905, 3356, 2341, 11905, 6756, 2341, 11905, 6778, 2341, 11905, 8780, 2341, 11905, 10900, 2341, 11905, 11978, 2341, 11905, 13450, 2341, 11905, 13736, 2341, 14625, 11854, 2341, 14999, 0, 2341, 14999, 8, 2341, 14999, 28, 2341, 14999, 106, 2341, 14999, 148, 2341, 14999, 176, 2341, 14999, 366, 2341, 14999, 384, 2341, 14999, 492, 2341, 14999, 498, 2341, 14999, 522, 2341, 14999, 578, 2341, 14999, 580, 2341, 14999, 622, 2341, 14999, 694, 2341, 14999, 742, 2341, 14999, 1052, 2341, 14999, 1126, 2341, 14999, 1584, 2341, 14999, 1592, 2341, 14999, 2078, 2341, 14999, 2312, 2341, 14999, 2450, 2341, 14999, 2470, 2341, 14999, 2680, 2341, 14999, 3052, 2341, 14999, 3230, 2341, 14999, 7636, 2341, 14999, 8312, 2341, 14999, 10148, 2341, 14999, 12446, 2364, 2441, 3197, 2193, 9855, 2068, 2441, 3197, 2193, 9855, 7784, 2441, 3197, 2193, 10143, 11905, 2610, 2441, 3197, 2193, 10219, 15066, 2441, 3197, 2193, 10219, 15068, 2441, 3197, 2193, 11905, 2610, 2441, 3197, 2193, 11905, 3076, 2441, 3197, 2193, 11905, 3356, 2441, 3197, 2193, 11905, 6756, 2441, 3197, 2193, 11905, 6778, 2441, 3197, 2193, 11905, 8780, 2441, 3197, 2193, 11905, 10900, 2441, 3197, 2193, 11905, 11978, 2441, 3197, 2193, 11905, 13450, 2441, 3197, 2193, 11905, 13736, 2441, 3197, 2193, 14003, 9855, 8, 2441, 3197, 2193, 14003, 9855, 28, 2441, 3197, 2193, 14003, 9855, 40, 2441, 3197, 2193, 14003, 9855, 58, 2441, 3197, 2193, 14003, 9855, 66, 2441, 3197, 2193, 14003, 9855, 102, 2441, 3197, 2193, 14003, 9855, 308, 2441, 3197, 2193, 14003, 9855, 334, 2441, 3197, 2193, 14003, 9855, 478, 2441, 3197, 2193, 14003, 9855, 518, 2441, 3197, 2193, 14003, 9855, 656, 2441, 3197, 2193, 14003, 9855, 676, 2441, 3197, 2193, 14003, 9855, 678, 2441, 3197, 2193, 14003, 9855, 788, 2441, 3197, 2193, 14003, 9855, 2586, 2441, 3197, 2193, 14003, 9855, 3390, 2441, 3197, 2193, 14003, 9855, 14003, 19632, 2441, 3197, 2193, 14999, 2175, 106, 2441, 3197, 2193, 14999, 2175, 148, 2441, 3197, 2193, 14999, 2175, 224, 2441, 3197, 2193, 14999, 2175, 266, 2441, 3197, 2193, 14999, 2175, 350, 2441, 3197, 2193, 14999, 2175, 384, 2441, 3197, 2193, 14999, 2175, 416, 2441, 3197, 2193, 14999, 2175, 448, 2441, 3197, 2193, 14999, 2175, 522, 2441, 3197, 2193, 14999, 2175, 556, 2441, 3197, 2193, 14999, 2175, 588, 2441, 3197, 2193, 14999, 2175, 622, 2441, 3197, 2193, 14999, 2175, 680, 2441, 3197, 2193, 14999, 2175, 718, 2441, 3197, 2193, 14999, 2175, 734, 2441, 3197, 2193, 14999, 2175, 2030, 2441, 3197, 2193, 14999, 2175, 2444, 2441, 3197, 2193, 14999, 2175, 2676, 2441, 3197, 2193, 14999, 2175, 3128, 2441, 3197, 2193, 14999, 2175, 3242, 2441, 3197, 2193, 14999, 2175, 3308, 2441, 3197, 2193, 14999, 2175, 3620, 2441, 3197, 2193, 14999, 7171, 106, 2441, 3197, 2193, 14999, 7171, 148, 2441, 3197, 2193, 14999, 7171, 224, 2441, 3197, 2193, 14999, 7171, 266, 2441, 3197, 2193, 14999, 7171, 350, 2441, 3197, 2193, 14999, 7171, 384, 2441, 3197, 2193, 14999, 7171, 416, 2441, 3197, 2193, 14999, 7171, 448, 2441, 3197, 2193, 14999, 7171, 522, 2441, 3197, 2193, 14999, 7171, 556, 2441, 3197, 2193, 14999, 7171, 588, 2441, 3197, 2193, 14999, 7171, 622, 2441, 3197, 2193, 14999, 7171, 680, 2441, 3197, 2193, 14999, 7171, 718, 2441, 3197, 2193, 14999, 7171, 734, 2441, 3197, 2193, 14999, 7171, 2030, 2441, 3197, 2193, 14999, 7171, 2444, 2441, 3197, 2193, 14999, 7171, 2676, 2441, 3197, 2193, 14999, 7171, 3128, 2441, 3197, 2193, 14999, 7171, 3242, 2441, 3197, 2193, 14999, 7171, 3308, 2441, 3197, 2193, 14999, 7171, 3620, 2441, 3197, 2193, 14999, 12085, 2, 2441, 3197, 2193, 14999, 12085, 6, 2441, 3197, 2193, 14999, 12085, 20, 2441, 3197, 2193, 14999, 12085, 24, 2441, 3197, 2193, 14999, 12085, 26, 2441, 3197, 2193, 14999, 12085, 42, 2441, 3197, 2193, 14999, 12085, 456, 2441, 8461, 10641, 6718, 2441, 8461, 15672, 2441, 15537, 9854, 2491, 2175, 10219, 19880, 2491, 7171, 10219, 19880, 2491, 11762, 2491, 11905, 2610, 2491, 11905, 3076, 2491, 11905, 3356, 2491, 11905, 6756, 2491, 11905, 6778, 2491, 11905, 8780, 2491, 11905, 10900, 2491, 11905, 11978, 2491, 11905, 13450, 2491, 11905, 13736, 2491, 14999, 0, 2491, 14999, 8, 2491, 14999, 16, 2491, 14999, 26, 2491, 14999, 28, 2491, 14999, 40, 2491, 14999, 106, 2491, 14999, 148, 2491, 14999, 184, 2491, 14999, 224, 2491, 14999, 266, 2491, 14999, 336, 2491, 14999, 350, 2491, 14999, 384, 2491, 14999, 416, 2491, 14999, 448, 2491, 14999, 449, 15902, 2491, 14999, 498, 2491, 14999, 522, 2491, 14999, 572, 2491, 14999, 588, 2491, 14999, 622, 2491, 14999, 694, 2491, 14999, 734, 2491, 14999, 1044, 2491, 14999, 1458, 2491, 14999, 2556, 2491, 14999, 2557, 15902, 2491, 14999, 2956, 2491, 14999, 7521, 336, 2491, 14999, 7521, 572, 2491, 14999, 7521, 1044, 2491, 14999, 19958, 2491, 15673, 499, 14564, 2491, 15673, 20152, 2491, 19003, 7883, 2175, 10218, 2491, 19003, 7883, 7171, 10218, 2491, 19003, 7883, 15451, 10218, 2491, 19003, 7883, 19969, 10218, 2491, 19003, 13507, 2175, 10218, 2491, 19003, 13507, 7171, 10218, 2491, 19003, 13507, 15451, 10218, 2491, 19003, 14625, 1217, 11392, 2491, 19003, 21157, 8320, 2491, 20212, 2491, 20685, 8320, 2508, 2511, 1, 15651, 484, 2511, 1, 18689, 484, 2511, 81, 16365, 484, 2511, 9854, 2511, 10232, 2511, 11695, 8320, 2511, 12005, 634, 2511, 13758, 2511, 14281, 12005, 634, 2511, 15211, 18683, 484, 2511, 15211, 18683, 485, 505, 12005, 634, 2511, 15621, 12383, 485, 505, 12005, 634, 2511, 15621, 18391, 485, 505, 12005, 634, 2511, 18431, 634, 2511, 19339, 634, 2511, 19408, 2511, 20127, 634, 2511, 21096, 2511, 22971, 12005, 634, 2545, 843, 5854, 2589, 967, 3256, 2589, 5811, 14416, 2589, 6286, 2589, 6774, 2589, 7292, 2589, 11688, 2589, 14283, 485, 11694, 2589, 14403, 5739, 22986, 2589, 14625, 18922, 2589, 17805, 15959, 15232, 2589, 18183, 6774, 2601, 9854, 2603, 6440, 2607, 1912, 2607, 12973, 15999, 14999, 826, 2607, 12973, 15999, 14999, 920, 2607, 12973, 15999, 14999, 1120, 2607, 12973, 15999, 14999, 1128, 2607, 12973, 15999, 14999, 1366, 2607, 12973, 15999, 14999, 1582, 2607, 12973, 15999, 14999, 1608, 2607, 12973, 15999, 14999, 1866, 2607, 12973, 15999, 14999, 2076, 2607, 12973, 15999, 14999, 2764, 2607, 12973, 15999, 14999, 2900, 2607, 12973, 15999, 14999, 3010, 2607, 12973, 15999, 14999, 3194, 2607, 12973, 15999, 14999, 3228, 2607, 12973, 15999, 14999, 3532, 2607, 12973, 15999, 14999, 3696, 2607, 12973, 15999, 14999, 3790, 2607, 12973, 15999, 14999, 5246, 2607, 12973, 15999, 14999, 6584, 2607, 12973, 15999, 14999, 6586, 2607, 12973, 15999, 14999, 6588, 2607, 12973, 15999, 14999, 6958, 2607, 12973, 15999, 14999, 7634, 2607, 12973, 15999, 14999, 8356, 2607, 12973, 15999, 14999, 8848, 2607, 12973, 15999, 14999, 10140, 2607, 12973, 15999, 14999, 10152, 2607, 12973, 15999, 14999, 10890, 2607, 12973, 15999, 14999, 12190, 2607, 12973, 15999, 15233, 2610, 2607, 12973, 15999, 15233, 3232, 2607, 12973, 15999, 15233, 15820, 2607, 13581, 15999, 14999, 226, 2607, 13581, 15999, 14999, 270, 2607, 13581, 15999, 14999, 878, 2607, 13581, 15999, 14999, 2280, 2607, 13581, 15999, 14999, 2536, 2607, 13581, 15999, 14999, 3028, 2607, 13581, 15999, 14999, 3220, 2607, 13581, 15999, 14999, 3532, 2607, 13581, 15999, 14999, 5246, 2607, 13581, 15999, 14999, 5818, 2607, 13581, 15999, 14999, 7156, 2607, 13581, 15999, 14999, 7596, 2607, 13581, 15999, 14999, 9372, 2607, 13581, 15999, 14999, 9486, 2607, 13581, 15999, 14999, 9776, 2607, 13581, 15999, 14999, 10126, 2607, 13581, 15999, 14999, 10146, 2607, 13581, 15999, 14999, 10810, 2607, 13581, 15999, 14999, 10898, 2607, 13581, 15999, 14999, 12192, 2607, 13581, 15999, 14999, 12204, 2607, 13581, 15999, 14999, 12470, 2607, 13581, 15999, 14999, 13400, 2607, 13581, 15999, 14999, 13720, 2607, 13581, 15999, 14999, 14546, 2607, 13581, 15999, 14999, 14576, 2607, 13581, 15999, 14999, 14978, 2607, 13581, 15999, 14999, 15474, 2607, 13581, 15999, 14999, 16244, 2607, 13581, 15999, 15233, 2610, 2607, 13581, 15999, 15233, 12080, 2607, 13581, 15999, 16901, 19352, 2607, 14883, 14999, 0, 2607, 14883, 14999, 8, 2607, 14883, 14999, 16, 2607, 14883, 14999, 28, 2607, 14883, 14999, 40, 2607, 14883, 14999, 110, 2607, 14883, 14999, 154, 2607, 14883, 14999, 186, 2607, 14883, 14999, 198, 2607, 14883, 14999, 200, 2607, 14883, 14999, 202, 2607, 14883, 14999, 208, 2607, 14883, 14999, 210, 2607, 14883, 14999, 270, 2607, 14883, 14999, 308, 2607, 14883, 14999, 350, 2607, 14883, 14999, 354, 2607, 14883, 14999, 370, 2607, 14883, 14999, 528, 2607, 14883, 14999, 626, 2607, 14883, 14999, 676, 2607, 14883, 14999, 682, 2607, 14883, 14999, 754, 2607, 14883, 14999, 1046, 2607, 14883, 14999, 1288, 2607, 14883, 14999, 1316, 2607, 14883, 14999, 1318, 2607, 14883, 14999, 1322, 2607, 14883, 14999, 1916, 2607, 14883, 14999, 2678, 2607, 14883, 14999, 3050, 2607, 14883, 14999, 3244, 2607, 14883, 16899, 2610, 2607, 14883, 16899, 3232, 2607, 14883, 16899, 6756, 2607, 14883, 16899, 12080, 2607, 15317, 14999, 8, 2607, 15317, 14999, 16, 2607, 15317, 14999, 28, 2607, 15317, 14999, 40, 2607, 15317, 14999, 80, 2607, 15317, 14999, 186, 2607, 15317, 14999, 266, 2607, 15317, 14999, 292, 2607, 15317, 14999, 300, 2607, 15317, 14999, 498, 2607, 15317, 14999, 734, 2607, 15317, 14999, 746, 2607, 15317, 14999, 982, 2607, 15317, 14999, 1208, 2607, 15317, 14999, 1440, 2607, 15317, 14999, 2108, 2607, 15317, 14999, 2902, 2607, 15317, 14999, 3068, 2607, 15317, 14999, 3196, 2607, 15317, 14999, 3462, 2607, 15317, 14999, 3680, 2607, 15317, 14999, 3702, 2607, 15317, 14999, 3740, 2607, 15317, 14999, 7684, 2607, 15317, 14999, 9224, 2607, 15317, 14999, 10244, 2607, 15317, 14999, 10556, 2607, 15317, 14999, 10778, 2607, 15317, 14999, 10780, 2607, 15317, 14999, 10896, 2607, 15317, 14999, 10924, 2607, 15317, 14999, 11700, 2607, 15317, 14999, 11942, 2607, 15317, 14999, 11944, 2607, 15317, 14999, 12696, 2607, 15317, 14999, 12838, 2607, 15317, 14999, 13502, 2607, 15317, 14999, 17208, 2607, 15809, 14999, 15269, 0, 2607, 15809, 14999, 15269, 16, 2607, 15809, 14999, 15269, 28, 2607, 15809, 14999, 15269, 60, 2607, 15809, 14999, 15269, 64, 2607, 15809, 14999, 15269, 68, 2607, 15809, 14999, 15269, 76, 2607, 15809, 14999, 15269, 80, 2607, 15809, 14999, 15269, 86, 2607, 15809, 14999, 15269, 88, 2607, 15809, 14999, 15269, 90, 2607, 15809, 14999, 15269, 92, 2607, 15809, 14999, 15269, 102, 2607, 15809, 14999, 15269, 180, 2607, 15809, 14999, 15269, 200, 2607, 15809, 14999, 15269, 206, 2607, 15809, 14999, 15269, 222, 2607, 15809, 14999, 15269, 296, 2607, 15809, 14999, 15269, 322, 2607, 15809, 14999, 15269, 482, 2607, 15809, 14999, 15269, 500, 2607, 15809, 14999, 15269, 502, 2607, 15809, 14999, 15269, 508, 2607, 15809, 14999, 15269, 800, 2607, 15809, 14999, 15269, 802, 2607, 15809, 14999, 15269, 806, 2607, 15809, 14999, 15269, 808, 2607, 15809, 14999, 15269, 810, 2607, 15809, 14999, 15269, 812, 2607, 15809, 14999, 15269, 814, 2607, 15809, 14999, 15269, 816, 2607, 15809, 14999, 15269, 818, 2607, 15809, 14999, 15269, 820, 2607, 15809, 14999, 15269, 864, 2607, 15809, 14999, 15269, 1290, 2607, 15809, 14999, 15269, 1296, 2607, 15809, 14999, 15269, 1300, 2607, 15809, 14999, 15269, 1304, 2607, 15809, 14999, 15269, 1306, 2607, 15809, 14999, 15269, 1318, 2607, 15809, 14999, 15269, 2594, 2607, 15809, 14999, 15269, 5746, 2607, 15809, 14999, 17535, 0, 2607, 15809, 14999, 17535, 8, 2607, 15809, 14999, 17535, 16, 2607, 15809, 14999, 17535, 60, 2607, 15809, 14999, 17535, 64, 2607, 15809, 14999, 17535, 66, 2607, 15809, 14999, 17535, 68, 2607, 15809, 14999, 17535, 76, 2607, 15809, 14999, 17535, 86, 2607, 15809, 14999, 17535, 88, 2607, 15809, 14999, 17535, 92, 2607, 15809, 14999, 17535, 102, 2607, 15809, 14999, 17535, 180, 2607, 15809, 14999, 17535, 222, 2607, 15809, 14999, 17535, 322, 2607, 15809, 14999, 17535, 482, 2607, 15809, 14999, 17535, 502, 2607, 15809, 14999, 17535, 800, 2607, 15809, 14999, 17535, 806, 2607, 15809, 14999, 17535, 808, 2607, 15809, 14999, 17535, 812, 2607, 15809, 14999, 17535, 818, 2607, 15809, 14999, 17535, 820, 2607, 15809, 14999, 17535, 844, 2607, 15809, 14999, 17535, 864, 2607, 15809, 14999, 17535, 1296, 2607, 15809, 14999, 17535, 1304, 2607, 15809, 14999, 17535, 1306, 2607, 15809, 14999, 17535, 1318, 2607, 15809, 14999, 17535, 2594, 2607, 15809, 14999, 17535, 5224, 2607, 17007, 9855, 0, 2607, 17007, 9855, 16, 2607, 17007, 9855, 40, 2607, 17007, 9855, 106, 2607, 17007, 9855, 124, 2607, 17007, 9855, 148, 2607, 17007, 9855, 158, 2607, 17007, 9855, 168, 2607, 17007, 9855, 224, 2607, 17007, 9855, 244, 2607, 17007, 9855, 260, 2607, 17007, 9855, 266, 2607, 17007, 9855, 336, 2607, 17007, 9855, 340, 2607, 17007, 9855, 350, 2607, 17007, 9855, 370, 2607, 17007, 9855, 384, 2607, 17007, 9855, 416, 2607, 17007, 9855, 430, 2607, 17007, 9855, 440, 2607, 17007, 9855, 448, 2607, 17007, 9855, 472, 2607, 17007, 9855, 522, 2607, 17007, 9855, 572, 2607, 17007, 9855, 584, 2607, 17007, 9855, 588, 2607, 17007, 9855, 622, 2607, 17007, 9855, 642, 2607, 17007, 9855, 680, 2607, 17007, 9855, 684, 2607, 17007, 9855, 718, 2607, 17007, 9855, 734, 2607, 17007, 9855, 752, 2607, 17007, 9855, 3048, 2607, 17007, 9855, 3114, 2607, 17007, 9855, 3242, 2607, 17007, 9855, 5724, 2607, 17007, 9855, 16102, 2607, 17007, 9855, 19038, 2607, 17007, 9855, 19900, 2607, 17007, 9855, 20588, 2607, 17007, 9855, 21016, 2607, 17007, 9855, 21018, 2607, 17007, 9855, 21270, 2607, 17007, 10651, 16270, 2607, 17007, 15233, 2610, 2607, 17007, 15233, 3232, 2607, 17007, 15233, 3356, 2607, 17007, 15233, 15820, 2607, 17007, 15233, 16502, 2607, 18451, 17772, 2607, 19335, 13563, 14999, 0, 2607, 19335, 13563, 14999, 8, 2607, 19335, 13563, 14999, 16, 2607, 19335, 13563, 14999, 28, 2607, 19335, 13563, 14999, 40, 2607, 19335, 13563, 14999, 58, 2607, 19335, 13563, 14999, 74, 2607, 19335, 13563, 14999, 178, 2607, 19335, 13563, 14999, 180, 2607, 19335, 13563, 14999, 182, 2607, 19335, 13563, 14999, 184, 2607, 19335, 13563, 14999, 186, 2607, 19335, 13563, 14999, 188, 2607, 19335, 13563, 14999, 190, 2607, 19335, 13563, 14999, 194, 2607, 19335, 13563, 14999, 196, 2607, 19335, 13563, 14999, 198, 2607, 19335, 13563, 14999, 200, 2607, 19335, 13563, 14999, 202, 2607, 19335, 13563, 14999, 206, 2607, 19335, 13563, 14999, 208, 2607, 19335, 13563, 14999, 210, 2607, 19335, 13563, 14999, 212, 2607, 19335, 13563, 14999, 216, 2607, 19335, 13563, 14999, 222, 2607, 19335, 13563, 14999, 308, 2607, 19335, 13563, 14999, 498, 2607, 19335, 13563, 14999, 674, 2607, 19335, 13563, 14999, 676, 2607, 19335, 13563, 14999, 840, 2607, 19335, 13563, 14999, 842, 2607, 19335, 13563, 14999, 1268, 2607, 19335, 13563, 14999, 1270, 2607, 19335, 13563, 14999, 1280, 2607, 19335, 13563, 14999, 1292, 2607, 19335, 13563, 14999, 1294, 2607, 19335, 13563, 14999, 1296, 2607, 19335, 13563, 14999, 1304, 2607, 19335, 13563, 14999, 1306, 2607, 19335, 13563, 14999, 1324, 2607, 19335, 13563, 14999, 1330, 2607, 19335, 13563, 14999, 1342, 2607, 19335, 13563, 14999, 2592, 2607, 19335, 13563, 14999, 3402, 2607, 19335, 13563, 14999, 11745, 8, 2607, 19335, 13563, 14999, 13507, 208, 2607, 19335, 13563, 14999, 19597, 482, 2607, 19335, 13563, 14999, 19597, 656, 2607, 19335, 13563, 14999, 20115, 9854, 2607, 19335, 13563, 14999, 20283, 482, 2607, 19335, 13563, 14999, 20283, 656, 2607, 19335, 15233, 2610, 2607, 19335, 15233, 2611, 16502, 2607, 19335, 15233, 2611, 18744, 2607, 19335, 15233, 3232, 2607, 19335, 15233, 6756, 2607, 19335, 15233, 12080, 2607, 19335, 16111, 14999, 0, 2607, 19335, 16111, 14999, 8, 2607, 19335, 16111, 14999, 16, 2607, 19335, 16111, 14999, 28, 2607, 19335, 16111, 14999, 40, 2607, 19335, 16111, 14999, 58, 2607, 19335, 16111, 14999, 74, 2607, 19335, 16111, 14999, 178, 2607, 19335, 16111, 14999, 180, 2607, 19335, 16111, 14999, 182, 2607, 19335, 16111, 14999, 184, 2607, 19335, 16111, 14999, 186, 2607, 19335, 16111, 14999, 188, 2607, 19335, 16111, 14999, 190, 2607, 19335, 16111, 14999, 194, 2607, 19335, 16111, 14999, 196, 2607, 19335, 16111, 14999, 198, 2607, 19335, 16111, 14999, 200, 2607, 19335, 16111, 14999, 202, 2607, 19335, 16111, 14999, 206, 2607, 19335, 16111, 14999, 208, 2607, 19335, 16111, 14999, 210, 2607, 19335, 16111, 14999, 212, 2607, 19335, 16111, 14999, 216, 2607, 19335, 16111, 14999, 222, 2607, 19335, 16111, 14999, 308, 2607, 19335, 16111, 14999, 498, 2607, 19335, 16111, 14999, 674, 2607, 19335, 16111, 14999, 676, 2607, 19335, 16111, 14999, 840, 2607, 19335, 16111, 14999, 842, 2607, 19335, 16111, 14999, 1268, 2607, 19335, 16111, 14999, 1270, 2607, 19335, 16111, 14999, 1280, 2607, 19335, 16111, 14999, 1292, 2607, 19335, 16111, 14999, 1294, 2607, 19335, 16111, 14999, 1296, 2607, 19335, 16111, 14999, 1304, 2607, 19335, 16111, 14999, 1306, 2607, 19335, 16111, 14999, 1324, 2607, 19335, 16111, 14999, 1330, 2607, 19335, 16111, 14999, 1342, 2607, 19335, 16111, 14999, 2592, 2607, 19335, 16111, 14999, 3402, 2607, 19335, 16111, 14999, 11745, 8, 2607, 19335, 16111, 14999, 13507, 208, 2607, 19335, 16111, 14999, 19597, 482, 2607, 19335, 16111, 14999, 19597, 656, 2607, 19335, 16111, 14999, 20115, 9854, 2607, 19335, 16111, 14999, 20283, 482, 2607, 19335, 16111, 14999, 20283, 656, 2611, 1217, 9175, 3357, 6431, 20876, 2611, 1217, 14984, 2611, 14421, 12762, 2634, 2653, 1065, 1601, 14999, 0, 2653, 1065, 1601, 14999, 8, 2653, 1065, 1601, 14999, 16, 2653, 1065, 1601, 14999, 28, 2653, 1065, 1601, 14999, 40, 2653, 1065, 1601, 14999, 106, 2653, 1065, 1601, 14999, 124, 2653, 1065, 1601, 14999, 148, 2653, 1065, 1601, 14999, 224, 2653, 1065, 1601, 14999, 244, 2653, 1065, 1601, 14999, 266, 2653, 1065, 1601, 14999, 292, 2653, 1065, 1601, 14999, 350, 2653, 1065, 1601, 14999, 384, 2653, 1065, 1601, 14999, 416, 2653, 1065, 1601, 14999, 448, 2653, 1065, 1601, 14999, 522, 2653, 1065, 1601, 14999, 572, 2653, 1065, 1601, 14999, 588, 2653, 1065, 1601, 14999, 622, 2653, 1065, 1601, 14999, 648, 2653, 1065, 1601, 14999, 680, 2653, 1065, 1601, 14999, 752, 2653, 1065, 1601, 14999, 1044, 2653, 1065, 1601, 14999, 1914, 2653, 1065, 1601, 14999, 2444, 2653, 1065, 1601, 14999, 2676, 2653, 1065, 1601, 14999, 3242, 2653, 1065, 1601, 14999, 12085, 20, 2653, 1065, 1601, 14999, 12085, 22, 2653, 1065, 1601, 14999, 12085, 24, 2653, 1065, 1601, 14999, 12085, 26, 2653, 1065, 1601, 14999, 12085, 30, 2653, 1065, 1601, 14999, 12085, 38, 2653, 1065, 1601, 14999, 12085, 44, 2653, 1065, 1601, 14999, 12085, 48, 2653, 1065, 1601, 14999, 12085, 456, 2653, 1065, 1601, 15451, 10218, 2653, 1065, 1601, 15451, 10219, 7882, 2653, 1065, 1601, 15451, 10219, 7883, 12084, 2653, 1065, 1601, 15451, 10219, 12084, 2653, 1065, 1601, 15483, 10218, 2653, 1065, 1601, 15483, 10219, 7882, 2653, 1065, 1601, 15483, 10219, 7883, 12084, 2653, 1065, 1601, 15483, 10219, 12084, 2653, 1065, 1601, 15483, 16449, 9956, 2653, 1065, 1601, 15483, 16449, 9957, 12084, 2653, 1065, 1601, 16449, 9956, 2653, 1065, 1601, 16449, 9957, 12084, 2653, 1065, 1601, 16449, 9957, 17472, 2653, 1065, 1601, 19441, 10218, 2653, 1065, 1601, 19441, 10219, 7883, 12084, 2653, 1065, 1601, 19441, 10219, 12084, 2653, 1065, 1601, 20775, 10218, 2653, 1065, 1601, 20775, 10219, 7882, 2653, 1065, 1601, 20775, 10219, 7883, 12084, 2653, 1065, 1601, 20775, 10219, 12084, 2655, 15390, 2660, 2662, 2669, 9175, 17283, 18026, 2671, 3233, 18745, 9854, 2671, 9854, 2671, 12739, 9854, 2688, 2689, 6718, 2689, 8850, 2709, 20609, 16534, 2709, 20609, 20148, 2711, 485, 6768, 2743, 15029, 317, 1777, 13239, 15672, 2878, 2886, 2897, 11460, 2926, 2928, 2930, 2932, 3043, 12740, 3060, 3077, 17045, 9951, 10641, 15119, 1216, 3077, 17045, 11571, 9950, 3077, 17045, 18461, 9950, 3077, 18453, 11571, 843, 14049, 18072, 3081, 843, 3081, 5862, 3136, 3137, 10641, 6718, 3137, 14369, 11748, 3193, 2175, 7854, 3193, 6793, 9956, 3193, 7817, 11779, 16088, 3193, 7817, 15621, 16088, 3193, 7817, 20846, 3193, 9287, 9854, 3193, 11756, 3193, 11762, 3193, 11905, 2610, 3193, 11905, 3076, 3193, 11905, 3356, 3193, 11905, 6756, 3193, 11905, 6778, 3193, 11905, 8780, 3193, 11905, 10900, 3193, 11905, 11978, 3193, 11905, 13450, 3193, 11905, 13736, 3193, 12233, 14262, 3193, 12541, 13563, 14999, 0, 3193, 12541, 13563, 14999, 2, 3193, 12541, 13563, 14999, 4, 3193, 12541, 13563, 14999, 6, 3193, 12541, 13563, 14999, 8, 3193, 12541, 13563, 14999, 10, 3193, 12541, 13563, 14999, 12, 3193, 12541, 13563, 14999, 14, 3193, 12541, 13563, 14999, 16, 3193, 12541, 13563, 14999, 18, 3193, 12541, 13563, 14999, 20, 3193, 12541, 13563, 14999, 22, 3193, 12541, 13563, 14999, 24, 3193, 12541, 13563, 14999, 26, 3193, 12541, 13563, 14999, 28, 3193, 12541, 13563, 14999, 30, 3193, 12541, 13563, 14999, 32, 3193, 12541, 13563, 14999, 34, 3193, 12541, 13563, 14999, 36, 3193, 12541, 13563, 14999, 38, 3193, 12541, 13563, 14999, 40, 3193, 12541, 13563, 14999, 42, 3193, 12541, 13563, 14999, 44, 3193, 12541, 13563, 14999, 46, 3193, 12541, 13563, 14999, 48, 3193, 12541, 13563, 14999, 50, 3193, 12541, 16111, 14999, 0, 3193, 12541, 16111, 14999, 2, 3193, 12541, 16111, 14999, 4, 3193, 12541, 16111, 14999, 6, 3193, 12541, 16111, 14999, 8, 3193, 12541, 16111, 14999, 10, 3193, 12541, 16111, 14999, 12, 3193, 12541, 16111, 14999, 14, 3193, 12541, 16111, 14999, 16, 3193, 12541, 16111, 14999, 18, 3193, 12541, 16111, 14999, 20, 3193, 12541, 16111, 14999, 22, 3193, 12541, 16111, 14999, 24, 3193, 12541, 16111, 14999, 26, 3193, 12541, 16111, 14999, 28, 3193, 12541, 16111, 14999, 30, 3193, 12541, 16111, 14999, 32, 3193, 12541, 16111, 14999, 34, 3193, 12541, 16111, 14999, 36, 3193, 12541, 16111, 14999, 38, 3193, 12541, 16111, 14999, 40, 3193, 12541, 16111, 14999, 42, 3193, 12541, 16111, 14999, 44, 3193, 12541, 16111, 14999, 46, 3193, 12541, 16111, 14999, 48, 3193, 12541, 16111, 14999, 50, 3193, 13341, 11779, 16088, 3193, 13341, 15621, 16088, 3193, 13341, 20846, 3193, 13582, 3193, 13758, 3193, 14601, 9854, 3193, 14647, 9854, 3193, 15233, 9854, 3193, 17005, 9854, 3193, 17123, 17254, 3193, 17254, 3193, 17642, 3193, 18511, 8320, 3193, 18847, 7854, 3193, 18894, 3193, 19409, 9854, 3193, 19557, 8320, 3193, 19614, 3193, 19880, 3193, 19921, 14262, 3193, 19923, 92, 3193, 20685, 8320, 3193, 21097, 9854, 3193, 21110, 3197, 389, 14999, 0, 3197, 389, 14999, 8, 3197, 389, 14999, 16, 3197, 389, 14999, 28, 3197, 389, 14999, 40, 3197, 389, 14999, 72, 3197, 389, 14999, 184, 3197, 389, 14999, 190, 3197, 389, 14999, 224, 3197, 389, 14999, 266, 3197, 389, 14999, 350, 3197, 389, 14999, 384, 3197, 389, 14999, 416, 3197, 389, 14999, 448, 3197, 389, 14999, 498, 3197, 389, 14999, 522, 3197, 389, 14999, 556, 3197, 389, 14999, 588, 3197, 389, 14999, 622, 3197, 389, 14999, 656, 3197, 389, 14999, 680, 3197, 389, 14999, 718, 3197, 389, 14999, 734, 3197, 389, 14999, 870, 3197, 389, 14999, 1914, 3197, 389, 14999, 2444, 3197, 389, 14999, 2676, 3197, 389, 14999, 3242, 3197, 389, 14999, 3308, 3197, 389, 14999, 10240, 3197, 389, 14999, 15762, 3197, 389, 14999, 15764, 3197, 389, 14999, 15766, 3197, 389, 14999, 15768, 3197, 389, 14999, 15770, 3197, 10143, 7301, 11905, 2610, 3197, 10143, 7301, 11905, 3076, 3197, 10143, 7301, 11905, 3356, 3197, 10143, 7301, 11905, 6756, 3197, 10143, 7301, 11905, 6778, 3197, 10143, 7301, 11905, 8780, 3197, 10143, 7301, 11905, 10900, 3197, 10143, 7301, 11905, 11978, 3197, 10143, 7301, 11905, 13450, 3197, 10143, 7301, 11905, 13736, 3197, 10143, 9855, 573, 7114, 3197, 10143, 9855, 1688, 3197, 10143, 9855, 2241, 3018, 3197, 10143, 9855, 2241, 7592, 3197, 10143, 9855, 2241, 7593, 2072, 3197, 10143, 9855, 2241, 14108, 3197, 10143, 9855, 7128, 3197, 10143, 9855, 7564, 3197, 10143, 9855, 7622, 3197, 10143, 9855, 11636, 3197, 10143, 9855, 12477, 15764, 3197, 10143, 9855, 12477, 15766, 3197, 10143, 9855, 12477, 15768, 3197, 10143, 9855, 13406, 3197, 10143, 9855, 13428, 3197, 10143, 9855, 14052, 3197, 10143, 9855, 14596, 3197, 10143, 9855, 15760, 3197, 10143, 9855, 15762, 3197, 10143, 9855, 16548, 3197, 10143, 9855, 17164, 3197, 10143, 9855, 18543, 17139, 9470, 3197, 10143, 9855, 19387, 12436, 3197, 10143, 9855, 19846, 3197, 10143, 9855, 20378, 3197, 10143, 10143, 11905, 2610, 3197, 10143, 10143, 11905, 3076, 3197, 10143, 10143, 11905, 3356, 3197, 10143, 10143, 11905, 6756, 3197, 10143, 10143, 11905, 6778, 3197, 10143, 10143, 11905, 8780, 3197, 10143, 10143, 11905, 10900, 3197, 10143, 10143, 11905, 11978, 3197, 10143, 10143, 11905, 13450, 3197, 10143, 10143, 11905, 13736, 3197, 10143, 14003, 9855, 0, 3197, 10143, 14003, 9855, 8, 3197, 10143, 14003, 9855, 16, 3197, 10143, 14003, 9855, 28, 3197, 10143, 14003, 9855, 40, 3197, 10143, 14003, 9855, 58, 3197, 10143, 14003, 9855, 66, 3197, 10143, 14003, 9855, 72, 3197, 10143, 14003, 9855, 308, 3197, 10143, 14003, 9855, 479, 11392, 3197, 10143, 14003, 9855, 479, 11552, 3197, 10143, 14003, 9855, 498, 3197, 10143, 14003, 9855, 518, 3197, 10143, 14003, 9855, 656, 3197, 10143, 14003, 9855, 676, 3197, 10143, 14003, 9855, 2241, 3028, 3197, 10143, 14003, 9855, 3428, 3197, 10143, 14003, 9855, 10099, 58, 3197, 10143, 14003, 9855, 10143, 72, 3197, 10143, 14999, 0, 3197, 10143, 14999, 16, 3197, 10143, 14999, 40, 3197, 10143, 14999, 106, 3197, 10143, 14999, 148, 3197, 10143, 14999, 184, 3197, 10143, 14999, 308, 3197, 10143, 14999, 384, 3197, 10143, 14999, 416, 3197, 10143, 14999, 448, 3197, 10143, 14999, 498, 3197, 10143, 14999, 572, 3197, 10143, 14999, 676, 3197, 10143, 14999, 694, 3197, 10143, 14999, 2068, 3197, 10143, 14999, 2152, 3197, 10143, 14999, 2175, 124, 3197, 10143, 14999, 2175, 224, 3197, 10143, 14999, 2175, 266, 3197, 10143, 14999, 2175, 350, 3197, 10143, 14999, 2175, 522, 3197, 10143, 14999, 2175, 588, 3197, 10143, 14999, 2175, 622, 3197, 10143, 14999, 2175, 734, 3197, 10143, 14999, 2175, 1044, 3197, 10143, 14999, 2175, 1914, 3197, 10143, 14999, 2175, 2046, 3197, 10143, 14999, 2175, 2676, 3197, 10143, 14999, 2175, 3242, 3197, 10143, 14999, 2175, 13316, 3197, 10143, 14999, 2192, 3197, 10143, 14999, 2444, 3197, 10143, 14999, 2556, 3197, 10143, 14999, 2970, 3197, 10143, 14999, 7171, 124, 3197, 10143, 14999, 7171, 224, 3197, 10143, 14999, 7171, 266, 3197, 10143, 14999, 7171, 350, 3197, 10143, 14999, 7171, 522, 3197, 10143, 14999, 7171, 588, 3197, 10143, 14999, 7171, 622, 3197, 10143, 14999, 7171, 734, 3197, 10143, 14999, 7171, 1044, 3197, 10143, 14999, 7171, 1914, 3197, 10143, 14999, 7171, 2046, 3197, 10143, 14999, 7171, 2676, 3197, 10143, 14999, 7171, 3048, 3197, 10143, 14999, 7171, 3114, 3197, 10143, 14999, 7171, 3242, 3197, 10143, 14999, 7171, 13316, 3197, 10143, 14999, 9470, 3197, 10143, 14999, 9472, 3197, 10143, 14999, 12235, 588, 3197, 10143, 19003, 22811, 1216, 3197, 10143, 19015, 9855, 106, 3197, 10143, 19015, 9855, 385, 10101, 2072, 3197, 10143, 19015, 9855, 416, 3197, 10143, 19015, 9855, 588, 3197, 10143, 19015, 9855, 2175, 522, 3197, 10143, 19015, 9855, 7171, 13317, 505, 2175, 522, 3197, 10143, 19015, 9855, 12085, 2444, 3197, 10143, 19015, 9855, 15093, 384, 3197, 10143, 19015, 9855, 15093, 572, 3197, 10547, 2241, 7592, 3197, 10547, 2241, 7652, 3197, 10547, 10219, 2241, 196, 3197, 10547, 10219, 2241, 3248, 3197, 10547, 10219, 2241, 9892, 3197, 10547, 10219, 2241, 13050, 3197, 10547, 14003, 8, 3197, 10547, 14003, 16, 3197, 10547, 14003, 28, 3197, 10547, 14003, 40, 3197, 10547, 14003, 58, 3197, 10547, 14003, 78, 3197, 10547, 14003, 80, 3197, 10547, 14003, 102, 3197, 10547, 14003, 292, 3197, 10547, 14003, 648, 3197, 10547, 14003, 656, 3197, 10547, 14003, 870, 3197, 10547, 14003, 3384, 3197, 10547, 14999, 2175, 28, 3197, 10547, 14999, 2175, 116, 3197, 10547, 14999, 2175, 140, 3197, 10547, 14999, 2175, 166, 3197, 10547, 14999, 2175, 236, 3197, 10547, 14999, 2175, 258, 3197, 10547, 14999, 2175, 282, 3197, 10547, 14999, 2175, 366, 3197, 10547, 14999, 2175, 402, 3197, 10547, 14999, 2175, 436, 3197, 10547, 14999, 2175, 468, 3197, 10547, 14999, 2175, 540, 3197, 10547, 14999, 2175, 580, 3197, 10547, 14999, 2175, 602, 3197, 10547, 14999, 2175, 634, 3197, 10547, 14999, 2175, 686, 3197, 10547, 14999, 2175, 742, 3197, 10547, 14999, 2175, 1050, 3197, 10547, 14999, 2175, 1920, 3197, 10547, 14999, 2175, 2452, 3197, 10547, 14999, 2175, 2564, 3197, 10547, 14999, 2175, 2682, 3197, 10547, 14999, 2175, 3248, 3197, 10547, 14999, 2175, 7650, 3197, 10547, 14999, 7171, 28, 3197, 10547, 14999, 7171, 116, 3197, 10547, 14999, 7171, 140, 3197, 10547, 14999, 7171, 166, 3197, 10547, 14999, 7171, 236, 3197, 10547, 14999, 7171, 258, 3197, 10547, 14999, 7171, 282, 3197, 10547, 14999, 7171, 366, 3197, 10547, 14999, 7171, 402, 3197, 10547, 14999, 7171, 436, 3197, 10547, 14999, 7171, 468, 3197, 10547, 14999, 7171, 540, 3197, 10547, 14999, 7171, 580, 3197, 10547, 14999, 7171, 602, 3197, 10547, 14999, 7171, 634, 3197, 10547, 14999, 7171, 686, 3197, 10547, 14999, 7171, 742, 3197, 10547, 14999, 7171, 1050, 3197, 10547, 14999, 7171, 1920, 3197, 10547, 14999, 7171, 2452, 3197, 10547, 14999, 7171, 2564, 3197, 10547, 14999, 7171, 2682, 3197, 10547, 14999, 7171, 3248, 3197, 10547, 14999, 7171, 7650, 3197, 10547, 15673, 283, 1674, 3197, 10547, 15673, 1971, 1970, 3197, 10547, 15673, 1974, 3197, 10547, 15673, 3018, 3197, 10547, 15673, 13050, 3257, 9175, 18172, 3293, 859, 18997, 11477, 10641, 12740, 3293, 859, 21279, 11476, 3293, 859, 21279, 11477, 10641, 9286, 3293, 1598, 3293, 7123, 11571, 14486, 3293, 7123, 17179, 9854, 3293, 7123, 18176, 3293, 7817, 6108, 3293, 7817, 7123, 16088, 3293, 7817, 14518, 3293, 10641, 17463, 11477, 11392, 3293, 11779, 16088, 3293, 13341, 6108, 3293, 13341, 7123, 16088, 3293, 13341, 14518, 3293, 15621, 16088, 3293, 18763, 13483, 16088, 3293, 20846, 3357, 1217, 14984, 3357, 1217, 20876, 3357, 2283, 16497, 12262, 3357, 6431, 9175, 2611, 1217, 20876, 3357, 14067, 16497, 12262, 3357, 14421, 12762, 3357, 14824, 3357, 14889, 17276, 3357, 15601, 16096, 3357, 16727, 505, 18386, 3357, 16727, 843, 18386, 3357, 18915, 15981, 20504, 3357, 20573, 14647, 13532, 3357, 21123, 16727, 504, 3357, 21123, 16727, 842, 3443, 6793, 9956, 3443, 11762, 3443, 11905, 2610, 3443, 11905, 3076, 3443, 11905, 3356, 3443, 11905, 6756, 3443, 11905, 6778, 3443, 11905, 8780, 3443, 11905, 10900, 3443, 11905, 11978, 3443, 11905, 13450, 3443, 11905, 13736, 3443, 15673, 1344, 3443, 15673, 2466, 3443, 15673, 3186, 3443, 15673, 5736, 3443, 15673, 6280, 3443, 15673, 6418, 3443, 15673, 7522, 3443, 15673, 7716, 3443, 15673, 10194, 3443, 15673, 10220, 3443, 15673, 11926, 3443, 15673, 12070, 3443, 15673, 12448, 3443, 18511, 8320, 3443, 18697, 0, 3443, 18697, 8, 3443, 18697, 16, 3443, 18697, 28, 3443, 18697, 40, 3443, 18697, 80, 3443, 18697, 106, 3443, 18697, 110, 3443, 18697, 114, 3443, 18697, 116, 3443, 18697, 120, 3443, 18697, 124, 3443, 18697, 130, 3443, 18697, 134, 3443, 18697, 140, 3443, 18697, 142, 3443, 18697, 148, 3443, 18697, 154, 3443, 18697, 158, 3443, 18697, 166, 3443, 18697, 168, 3443, 18697, 184, 3443, 18697, 202, 3443, 18697, 224, 3443, 18697, 226, 3443, 18697, 230, 3443, 18697, 236, 3443, 18697, 238, 3443, 18697, 244, 3443, 18697, 248, 3443, 18697, 254, 3443, 18697, 258, 3443, 18697, 260, 3443, 18697, 266, 3443, 18697, 270, 3443, 18697, 274, 3443, 18697, 282, 3443, 18697, 286, 3443, 18697, 316, 3443, 18697, 336, 3443, 18697, 338, 3443, 18697, 340, 3443, 18697, 342, 3443, 18697, 344, 3443, 18697, 350, 3443, 18697, 354, 3443, 18697, 358, 3443, 18697, 366, 3443, 18697, 370, 3443, 18697, 384, 3443, 18697, 388, 3443, 18697, 392, 3443, 18697, 402, 3443, 18697, 406, 3443, 18697, 416, 3443, 18697, 424, 3443, 18697, 430, 3443, 18697, 436, 3443, 18697, 440, 3443, 18697, 448, 3443, 18697, 452, 3443, 18697, 456, 3443, 18697, 460, 3443, 18697, 468, 3443, 18697, 472, 3443, 18697, 496, 3443, 18697, 498, 3443, 18697, 522, 3443, 18697, 528, 3443, 18697, 536, 3443, 18697, 540, 3443, 18697, 546, 3443, 18697, 572, 3443, 18697, 574, 3443, 18697, 578, 3443, 18697, 580, 3443, 18697, 584, 3443, 18697, 588, 3443, 18697, 592, 3443, 18697, 598, 3443, 18697, 602, 3443, 18697, 612, 3443, 18697, 622, 3443, 18697, 626, 3443, 18697, 630, 3443, 18697, 634, 3443, 18697, 642, 3443, 18697, 666, 3443, 18697, 680, 3443, 18697, 682, 3443, 18697, 684, 3443, 18697, 686, 3443, 18697, 690, 3443, 18697, 694, 3443, 18697, 700, 3443, 18697, 706, 3443, 18697, 710, 3443, 18697, 712, 3443, 18697, 734, 3443, 18697, 736, 3443, 18697, 738, 3443, 18697, 742, 3443, 18697, 746, 3443, 18697, 752, 3443, 18697, 754, 3443, 18697, 758, 3443, 18697, 760, 3443, 18697, 762, 3443, 18697, 918, 3443, 18697, 932, 3443, 18697, 934, 3443, 18697, 936, 3443, 18697, 938, 3443, 18697, 940, 3443, 18697, 960, 3443, 18697, 1034, 3443, 18697, 1078, 3443, 18697, 1152, 3443, 18697, 1164, 3443, 18697, 1166, 3443, 18697, 1168, 3443, 18697, 1170, 3443, 18697, 1172, 3443, 18697, 1212, 3443, 18697, 1276, 3443, 18697, 1364, 3443, 18697, 1392, 3443, 18697, 1458, 3443, 18697, 1460, 3443, 18697, 1462, 3443, 18697, 1464, 3443, 18697, 1466, 3443, 18697, 1468, 3443, 18697, 1472, 3443, 18697, 1526, 3443, 18697, 1590, 3443, 18697, 1606, 3443, 18697, 1612, 3443, 18697, 1634, 3443, 18697, 1678, 3443, 18697, 1680, 3443, 18697, 1698, 3443, 18697, 1788, 3443, 18697, 1826, 3443, 18697, 1878, 3443, 18697, 1896, 3443, 18697, 1976, 3443, 18697, 1986, 3443, 18697, 1988, 3443, 18697, 1990, 3443, 18697, 1992, 3443, 18697, 1994, 3443, 18697, 2104, 3443, 18697, 2164, 3443, 18697, 2266, 3443, 18697, 2268, 3443, 18697, 2270, 3443, 18697, 2272, 3443, 18697, 2274, 3443, 18697, 2278, 3443, 18697, 2330, 3443, 18697, 2420, 3443, 18697, 2422, 3443, 18697, 2424, 3443, 18697, 2426, 3443, 18697, 2428, 3443, 18697, 2430, 3443, 18697, 2478, 3443, 18697, 2480, 3443, 18697, 2482, 3443, 18697, 2484, 3443, 18697, 2486, 3443, 18697, 2504, 3443, 18697, 2556, 3443, 18697, 2560, 3443, 18697, 2562, 3443, 18697, 2564, 3443, 18697, 2566, 3443, 18697, 2622, 3443, 18697, 2664, 3443, 18697, 2706, 3443, 18697, 2898, 3443, 18697, 2948, 3443, 18697, 3036, 3443, 18697, 3048, 3443, 18697, 3050, 3443, 18697, 3052, 3443, 18697, 3054, 3443, 18697, 3056, 3443, 18697, 3094, 3443, 18697, 3226, 3443, 18697, 3242, 3443, 18697, 3244, 3443, 18697, 3246, 3443, 18697, 3248, 3443, 18697, 3250, 3443, 18697, 3290, 3443, 18697, 3456, 3443, 18697, 3484, 3443, 18697, 3524, 3443, 18697, 3540, 3443, 18697, 3544, 3443, 18697, 3554, 3443, 18697, 3560, 3443, 18697, 3562, 3443, 18697, 3576, 3443, 18697, 3694, 3443, 18697, 3728, 3443, 18697, 3804, 3443, 18697, 3812, 3443, 18697, 3814, 3443, 18697, 3816, 3443, 18697, 3818, 3443, 18697, 3820, 3443, 18697, 3844, 3443, 18697, 5824, 3443, 18697, 5826, 3443, 18697, 6378, 3443, 18697, 6380, 3443, 18697, 6382, 3443, 18697, 6384, 3443, 18697, 6386, 3443, 18697, 6388, 3443, 18697, 6392, 3443, 18697, 6932, 3443, 18697, 6934, 3443, 18697, 6938, 3443, 18697, 6940, 3443, 18697, 7698, 3443, 18697, 7700, 3443, 18697, 7702, 3443, 18697, 7704, 3443, 18697, 8334, 3443, 18697, 8340, 3443, 18697, 8392, 3443, 18697, 8394, 3443, 18697, 8396, 3443, 18697, 8398, 3443, 18697, 8400, 3443, 18697, 8656, 3443, 18697, 8674, 3443, 18697, 8708, 3443, 18697, 8720, 3443, 18697, 8726, 3443, 18697, 8728, 3443, 18697, 8730, 3443, 18697, 8732, 3443, 18697, 8734, 3443, 18697, 8746, 3443, 18697, 8792, 3443, 18697, 8802, 3443, 18697, 8952, 3443, 18697, 8982, 3443, 18697, 9756, 3443, 18697, 9790, 3443, 18697, 10150, 3443, 18697, 10170, 3443, 18697, 10624, 3443, 18697, 10648, 3443, 18697, 10914, 3443, 18697, 10926, 3443, 18697, 11898, 3443, 18697, 11900, 3443, 18697, 12716, 3443, 18697, 12720, 3443, 18697, 12835, 166, 3443, 18697, 12835, 224, 3443, 18697, 12835, 350, 3443, 18697, 12835, 416, 3443, 18697, 12835, 3094, 3443, 18697, 12846, 3443, 18697, 12848, 3443, 18697, 12852, 3443, 18697, 20214, 3561, 9854, 3612, 3699, 9854, 3717, 10750, 3872, 5231, 9855, 13370, 5231, 9855, 13563, 17178, 5231, 9855, 14938, 5231, 9855, 17178, 5231, 11905, 2610, 5231, 11905, 3076, 5231, 11905, 3356, 5231, 11905, 6756, 5231, 11905, 6778, 5231, 11905, 8780, 5231, 11905, 10900, 5231, 11905, 11978, 5231, 11905, 13450, 5231, 11905, 13736, 5231, 14003, 9855, 0, 5231, 14003, 9855, 8, 5231, 14003, 9855, 16, 5231, 14003, 9855, 28, 5231, 14003, 9855, 40, 5231, 14003, 9855, 58, 5231, 14003, 9855, 72, 5231, 14003, 9855, 78, 5231, 14003, 9855, 98, 5231, 14003, 9855, 308, 5231, 14003, 9855, 676, 5231, 14999, 0, 5231, 14999, 106, 5231, 14999, 148, 5231, 14999, 244, 5231, 14999, 266, 5231, 14999, 336, 5231, 14999, 350, 5231, 14999, 384, 5231, 14999, 416, 5231, 14999, 448, 5231, 14999, 522, 5231, 14999, 572, 5231, 14999, 588, 5231, 14999, 622, 5231, 14999, 932, 5231, 14999, 1044, 5231, 14999, 1164, 5231, 14999, 1492, 5231, 14999, 1796, 5231, 14999, 1914, 5231, 14999, 2444, 5231, 14999, 2556, 5231, 14999, 2676, 5231, 14999, 3242, 5231, 14999, 18891, 244, 5231, 14999, 18891, 622, 5231, 15233, 3232, 5231, 15233, 15820, 5231, 15673, 684, 5231, 19015, 9855, 15093, 384, 5231, 19015, 9855, 15093, 572, 5231, 19015, 9855, 15093, 18247, 572, 5247, 15672, 5274, 5303, 15672, 5718, 5719, 11442, 5719, 11706, 5719, 14390, 5719, 15672, 5721, 485, 18026, 5721, 10641, 19407, 11477, 11392, 5738, 5748, 5801, 6718, 5807, 2344, 5808, 5809, 10641, 21033, 15642, 5809, 15672, 5815, 11477, 18471, 19215, 10155, 12973, 6560, 5834, 5845, 5860, 5845, 12274, 5846, 5853, 3077, 15609, 17642, 5853, 6757, 15609, 17642, 5853, 11979, 15609, 17642, 5853, 12237, 11772, 5853, 14049, 14486, 5853, 14049, 15620, 5853, 17154, 5856, 5860, 5867, 485, 16504, 5869, 15672, 5893, 317, 20402, 5899, 13149, 8320, 5957, 3398, 5963, 425, 7126, 5971, 6741, 968, 5971, 12388, 5971, 12389, 17862, 5973, 484, 5975, 18658, 5999, 9854, 6005, 9854, 6011, 11905, 2610, 6011, 11905, 3076, 6011, 11905, 3356, 6011, 11905, 6756, 6011, 11905, 6778, 6011, 11905, 8780, 6011, 11905, 10900, 6011, 11905, 11978, 6011, 11905, 13450, 6011, 11905, 13736, 6011, 14003, 9855, 16, 6011, 14003, 9855, 28, 6011, 14003, 9855, 40, 6011, 14003, 9855, 58, 6011, 14003, 9855, 72, 6011, 14003, 9855, 94, 6011, 14003, 9855, 192, 6011, 14003, 9855, 308, 6011, 14003, 9855, 482, 6011, 14003, 9855, 656, 6011, 14999, 0, 6011, 14999, 8, 6011, 14999, 16, 6011, 14999, 28, 6011, 14999, 40, 6011, 14999, 72, 6011, 14999, 106, 6011, 14999, 148, 6011, 14999, 244, 6011, 14999, 266, 6011, 14999, 336, 6011, 14999, 350, 6011, 14999, 384, 6011, 14999, 416, 6011, 14999, 448, 6011, 14999, 522, 6011, 14999, 572, 6011, 14999, 588, 6011, 14999, 622, 6011, 14999, 680, 6011, 14999, 734, 6011, 14999, 904, 6011, 14999, 932, 6011, 14999, 1044, 6011, 14999, 1142, 6011, 14999, 1164, 6011, 14999, 1492, 6011, 14999, 1796, 6011, 14999, 1914, 6011, 14999, 2342, 6011, 14999, 2444, 6011, 14999, 2456, 6011, 14999, 2532, 6011, 14999, 2676, 6011, 14999, 2716, 6011, 14999, 3114, 6011, 14999, 3242, 6011, 14999, 6036, 6011, 14999, 8760, 6011, 14999, 8768, 6011, 14999, 8770, 6011, 14999, 12085, 12, 6011, 14999, 12085, 20, 6011, 14999, 12085, 22, 6011, 14999, 12085, 26, 6011, 14999, 12085, 30, 6011, 14999, 12085, 34, 6011, 14999, 12085, 38, 6011, 14999, 12085, 48, 6011, 14999, 12085, 132, 6011, 14999, 12085, 456, 6011, 14999, 12085, 608, 6011, 19015, 9855, 384, 6011, 19015, 9855, 572, 6011, 19015, 9855, 694, 6011, 19015, 9855, 734, 6011, 19015, 9855, 12085, 14, 6011, 19015, 9855, 12085, 24, 6011, 19015, 9855, 12085, 456, 6011, 20877, 11854, 6011, 20877, 14625, 11854, 6011, 20877, 15604, 6011, 20877, 15781, 11854, 6106, 6113, 9520, 6283, 13454, 6283, 20456, 6287, 10641, 7817, 15844, 6287, 15672, 6356, 6421, 2511, 12102, 6421, 2511, 13266, 6421, 2511, 14592, 6421, 2511, 14593, 10641, 18543, 18347, 13546, 6421, 2511, 16177, 91, 15100, 6421, 2511, 16177, 91, 15211, 18682, 6421, 2511, 16177, 91, 15211, 18683, 505, 12004, 6421, 2511, 17060, 6421, 2511, 17061, 505, 12004, 6421, 2511, 17310, 6421, 2511, 17311, 505, 12004, 6425, 9854, 6426, 6433, 485, 13198, 6435, 6751, 10092, 6435, 10086, 6435, 10087, 10641, 14487, 11552, 6435, 13341, 17839, 18016, 6435, 18906, 6441, 10641, 20098, 6444, 6561, 15679, 11772, 6601, 9854, 6604, 6719, 9208, 6719, 10641, 469, 7053, 16436, 6719, 10641, 491, 16436, 6719, 10641, 6095, 13654, 6719, 10641, 7885, 485, 17404, 6719, 10641, 9171, 12764, 6719, 10641, 9171, 12765, 843, 6095, 13654, 6719, 10641, 13693, 485, 1834, 6719, 10641, 14525, 1598, 6719, 10641, 16793, 8326, 6719, 10641, 17133, 6604, 6719, 10641, 19665, 15776, 6719, 10641, 19665, 15777, 843, 17519, 1336, 6719, 10641, 19665, 15777, 843, 23135, 6604, 6719, 10641, 20948, 6719, 10641, 21100, 6719, 16778, 6719, 17521, 12764, 6719, 18749, 1, 7678, 6719, 19603, 19047, 6768, 6719, 19611, 317, 6726, 6741, 14732, 6741, 16104, 6745, 14742, 6745, 19542, 6746, 6747, 14644, 6750, 6751, 5959, 10641, 13659, 14570, 6757, 1217, 8320, 6757, 1217, 20876, 6759, 317, 7288, 6775, 843, 12484, 6775, 843, 12485, 10641, 13242, 6779, 1217, 8320, 6779, 1217, 20876, 6779, 7813, 14500, 6779, 14519, 14313, 17753, 21278, 6779, 17045, 11571, 9950, 6779, 20563, 17642, 6779, 22973, 17642, 6779, 23301, 17642, 6783, 6718, 6787, 9306, 6793, 8461, 10641, 6718, 6793, 8461, 15672, 6793, 9956, 6793, 11578, 6793, 13163, 7518, 6798, 6800, 6802, 6804, 6923, 1176, 6950, 6951, 10641, 16476, 6951, 17521, 1694, 6961, 8320, 7040, 7045, 2438, 7046, 7119, 13582, 7127, 10641, 12389, 843, 15119, 16403, 16196, 7131, 6410, 7145, 15672, 7150, 7171, 17501, 9854, 7171, 19913, 15672, 7288, 7518, 7530, 7678, 7679, 8320, 7783, 14364, 7799, 9854, 7801, 17087, 8460, 7801, 17087, 8461, 10641, 6718, 7801, 17087, 8461, 15672, 7813, 20145, 317, 10634, 7817, 843, 13341, 10086, 7817, 843, 13341, 14625, 19808, 7817, 859, 19409, 16088, 7817, 2175, 20309, 16088, 7817, 2611, 14635, 11578, 7817, 2611, 17087, 11578, 7817, 5741, 671, 13341, 5741, 671, 16480, 7817, 5741, 671, 13341, 5741, 6435, 16480, 7817, 5741, 6435, 13341, 5741, 671, 16480, 7817, 5741, 6435, 13341, 5741, 6435, 16480, 7817, 6751, 10092, 7817, 6757, 16357, 11578, 7817, 7123, 11571, 14486, 7817, 7123, 11578, 7817, 7127, 19773, 18514, 7817, 10086, 7817, 11445, 14414, 7817, 11447, 16088, 7817, 11447, 16089, 10641, 1216, 7817, 11477, 10641, 13563, 14486, 7817, 11477, 10641, 16153, 9286, 7817, 11571, 18763, 13483, 16088, 7817, 11571, 20217, 16088, 7817, 11779, 16088, 7817, 11779, 16089, 12589, 7292, 7817, 11779, 16089, 13889, 7292, 7817, 11779, 16089, 15119, 13226, 7817, 12094, 7817, 13163, 7518, 7817, 13341, 10621, 11476, 7817, 13341, 11476, 7817, 13341, 11477, 10641, 14625, 18847, 15642, 7817, 13341, 11477, 10641, 15642, 7817, 13341, 11477, 10641, 18847, 15642, 7817, 13341, 11477, 17369, 13563, 14486, 7817, 13341, 11571, 11476, 7817, 13341, 14049, 11476, 7817, 13341, 14625, 11476, 7817, 13341, 14625, 11477, 10641, 15642, 7817, 13341, 14625, 11477, 10641, 18847, 15642, 7817, 13341, 20377, 11476, 7817, 13341, 20831, 11476, 7817, 13341, 23305, 11476, 7817, 13451, 16357, 11578, 7817, 13737, 16357, 11578, 7817, 13737, 18509, 11578, 7817, 14049, 11779, 16088, 7817, 14049, 14519, 16088, 7817, 14049, 15621, 16088, 7817, 14049, 18763, 13483, 16088, 7817, 14049, 20217, 16088, 7817, 14049, 20846, 7817, 14497, 11994, 7817, 14519, 16088, 7817, 14623, 21237, 16088, 7817, 14625, 11447, 16088, 7817, 14625, 15893, 12072, 7817, 14625, 19557, 8320, 7817, 14625, 20846, 7817, 15211, 14677, 20387, 17074, 7817, 15423, 18381, 16088, 7817, 15573, 19557, 8320, 7817, 15601, 14414, 7817, 15621, 16088, 7817, 15621, 16089, 10641, 10183, 317, 3293, 14518, 7817, 15621, 16089, 10641, 10183, 317, 14393, 14518, 7817, 15621, 16089, 10641, 13290, 7817, 15621, 16089, 10641, 18836, 7817, 15621, 16089, 12589, 14518, 7817, 15621, 16089, 13889, 14518, 7817, 15621, 16089, 19242, 7817, 15893, 12072, 7817, 16122, 7817, 16734, 7817, 17365, 14414, 7817, 17529, 7126, 7817, 18334, 7817, 18555, 887, 19048, 7817, 18599, 41, 16088, 7817, 18763, 13483, 16088, 7817, 18775, 14373, 18847, 896, 7817, 18847, 897, 10641, 13290, 7817, 18847, 969, 7854, 7817, 20387, 17074, 7817, 20846, 7817, 20847, 12589, 7292, 7817, 20847, 13889, 7292, 7817, 20847, 19242, 7817, 21237, 16088, 7817, 22947, 16088, 7855, 19618, 7855, 20745, 2511, 19347, 3245, 9288, 7855, 20745, 10641, 20883, 9219, 14307, 9288, 7855, 20745, 10641, 21207, 9219, 14307, 9288, 7859, 15672, 7861, 6718, 7862, 7865, 9854, 7869, 14999, 0, 7869, 14999, 8, 7869, 14999, 16, 7869, 14999, 28, 7869, 14999, 40, 7869, 14999, 66, 7869, 14999, 106, 7869, 14999, 124, 7869, 14999, 148, 7869, 14999, 214, 7869, 14999, 224, 7869, 14999, 244, 7869, 14999, 266, 7869, 14999, 336, 7869, 14999, 350, 7869, 14999, 384, 7869, 14999, 416, 7869, 14999, 448, 7869, 14999, 482, 7869, 14999, 522, 7869, 14999, 588, 7869, 14999, 622, 7869, 14999, 656, 7869, 14999, 658, 7869, 14999, 694, 7869, 14999, 718, 7869, 14999, 734, 7869, 14999, 752, 7869, 14999, 1044, 7869, 14999, 1254, 7869, 14999, 1492, 7869, 14999, 1620, 7869, 14999, 1914, 7869, 14999, 2444, 7869, 14999, 2676, 7869, 14999, 3048, 7869, 14999, 3242, 7869, 14999, 3308, 7869, 14999, 3812, 7869, 14999, 10219, 449, 540, 7869, 14999, 10219, 2375, 116, 7869, 14999, 10219, 2375, 448, 7869, 14999, 10219, 2375, 630, 7869, 14999, 10219, 2375, 1108, 7869, 14999, 10219, 2375, 1794, 7869, 14999, 10240, 7869, 20877, 6793, 9956, 7869, 20877, 11762, 7876, 7877, 10641, 1761, 2668, 7883, 6287, 6785, 7817, 15101, 485, 14625, 18846, 7883, 7817, 10086, 7883, 7817, 13341, 11476, 7883, 7817, 13341, 14625, 11476, 7883, 13341, 10086, 7883, 17864, 7883, 19407, 11476, 7883, 19407, 11477, 6785, 896, 7883, 19407, 14625, 11476, 7883, 19407, 14625, 11477, 6785, 896, 7883, 19407, 18635, 11476, 7883, 20375, 11476, 7883, 20375, 11477, 6785, 896, 7883, 20375, 14625, 11476, 7883, 20375, 14625, 11477, 6785, 896, 7883, 20375, 18635, 11476, 7893, 12332, 7893, 14998, 8315, 843, 14685, 9854, 8315, 9854, 8315, 10641, 15643, 843, 8315, 843, 14685, 9854, 8315, 10641, 15643, 9854, 8317, 9786, 8329, 8320, 8353, 497, 5858, 8362, 8365, 15672, 8425, 9855, 18521, 17494, 8425, 9855, 18521, 19892, 8425, 9855, 19892, 8425, 10219, 3293, 13340, 8425, 10219, 11392, 8425, 10219, 11552, 8425, 10219, 13340, 8425, 14003, 9855, 0, 8425, 14003, 9855, 8, 8425, 14003, 9855, 16, 8425, 14003, 9855, 26, 8425, 14003, 9855, 28, 8425, 14003, 9855, 40, 8425, 14003, 9855, 44, 8425, 14003, 9855, 48, 8425, 14003, 9855, 58, 8425, 14003, 9855, 66, 8425, 14003, 9855, 72, 8425, 14003, 9855, 80, 8425, 14003, 9855, 94, 8425, 14003, 9855, 192, 8425, 14003, 9855, 202, 8425, 14003, 9855, 208, 8425, 14003, 9855, 292, 8425, 14003, 9855, 300, 8425, 14003, 9855, 308, 8425, 14003, 9855, 318, 8425, 14003, 9855, 330, 8425, 14003, 9855, 456, 8425, 14003, 9855, 498, 8425, 14003, 9855, 510, 8425, 14003, 9855, 648, 8425, 14003, 9855, 676, 8425, 14003, 9855, 710, 8425, 14003, 9855, 738, 8425, 14003, 9855, 804, 8425, 14003, 9855, 824, 8425, 14003, 9855, 844, 8425, 14003, 9855, 1300, 8425, 14003, 9855, 1314, 8425, 14003, 9855, 1738, 8425, 14003, 9855, 1756, 8425, 14003, 9855, 2596, 8425, 14003, 9855, 3382, 8425, 14003, 9855, 3388, 8425, 14003, 9855, 3400, 8425, 14003, 9855, 7412, 8425, 14003, 9855, 10410, 8425, 14003, 9855, 17143, 208, 8425, 14003, 9855, 17143, 1314, 8425, 14999, 70, 8425, 14999, 106, 8425, 14999, 148, 8425, 14999, 224, 8425, 14999, 244, 8425, 14999, 266, 8425, 14999, 350, 8425, 14999, 384, 8425, 14999, 416, 8425, 14999, 448, 8425, 14999, 522, 8425, 14999, 556, 8425, 14999, 588, 8425, 14999, 622, 8425, 14999, 680, 8425, 14999, 694, 8425, 14999, 718, 8425, 14999, 739, 350, 8425, 14999, 739, 522, 8425, 14999, 739, 622, 8425, 14999, 739, 2492, 8425, 14999, 739, 3308, 8425, 14999, 739, 3322, 8425, 14999, 739, 6470, 8425, 14999, 739, 10240, 8425, 14999, 752, 8425, 14999, 1142, 8425, 14999, 1254, 8425, 14999, 1492, 8425, 14999, 1620, 8425, 14999, 2122, 8425, 14999, 2220, 8425, 14999, 2298, 8425, 14999, 2444, 8425, 14999, 2456, 8425, 14999, 2492, 8425, 14999, 2556, 8425, 14999, 2700, 8425, 14999, 2778, 8425, 14999, 3048, 8425, 14999, 3114, 8425, 14999, 3308, 8425, 14999, 3322, 8425, 14999, 3468, 8425, 14999, 3812, 8425, 14999, 3854, 8425, 14999, 3882, 8425, 14999, 6416, 8425, 14999, 6470, 8425, 14999, 6478, 8425, 14999, 7018, 8425, 14999, 7836, 8425, 14999, 8736, 8425, 14999, 8840, 8425, 14999, 8960, 8425, 14999, 10206, 8425, 14999, 10240, 8425, 14999, 10248, 8425, 14999, 10964, 8425, 14999, 11004, 8425, 14999, 11012, 8425, 14999, 11918, 8425, 14999, 13784, 8425, 14999, 14226, 8425, 14999, 15762, 8425, 14999, 15764, 8425, 14999, 15766, 8425, 14999, 15768, 8425, 14999, 15770, 8425, 14999, 15772, 8425, 14999, 15774, 8425, 14999, 16011, 416, 8425, 14999, 16011, 448, 8425, 14999, 16011, 2444, 8425, 14999, 16011, 3882, 8425, 14999, 18521, 10240, 8425, 14999, 18521, 15760, 8425, 14999, 18521, 15762, 8425, 14999, 18521, 15766, 8425, 14999, 18521, 15768, 8425, 14999, 18521, 15770, 8425, 14999, 18521, 15774, 8425, 14999, 21156, 8427, 497, 675, 15672, 8427, 6287, 15672, 8441, 9854, 8444, 8448, 8455, 9855, 7332, 8455, 9855, 15868, 8455, 9855, 17486, 8455, 9855, 17610, 8455, 9855, 20538, 8455, 11854, 8455, 11905, 2610, 8455, 11905, 3076, 8455, 11905, 3356, 8455, 11905, 6756, 8455, 11905, 6778, 8455, 11905, 8780, 8455, 11905, 10900, 8455, 11905, 11978, 8455, 11905, 13450, 8455, 11905, 13736, 8455, 14003, 9855, 8, 8455, 14003, 9855, 16, 8455, 14003, 9855, 28, 8455, 14003, 9855, 40, 8455, 14003, 9855, 58, 8455, 14003, 9855, 72, 8455, 14003, 9855, 94, 8455, 14003, 9855, 308, 8455, 14003, 9855, 676, 8455, 14003, 9855, 17493, 22, 8455, 14003, 9855, 17493, 34, 8455, 14003, 9855, 17493, 396, 8455, 14003, 9855, 17493, 582, 8455, 14625, 11854, 8455, 14999, 0, 8455, 14999, 8, 8455, 14999, 16, 8455, 14999, 28, 8455, 14999, 40, 8455, 14999, 58, 8455, 14999, 72, 8455, 14999, 94, 8455, 14999, 106, 8455, 14999, 124, 8455, 14999, 148, 8455, 14999, 244, 8455, 14999, 266, 8455, 14999, 308, 8455, 14999, 336, 8455, 14999, 350, 8455, 14999, 384, 8455, 14999, 416, 8455, 14999, 448, 8455, 14999, 522, 8455, 14999, 572, 8455, 14999, 588, 8455, 14999, 622, 8455, 14999, 676, 8455, 14999, 680, 8455, 14999, 734, 8455, 14999, 932, 8455, 14999, 1044, 8455, 14999, 1142, 8455, 14999, 1164, 8455, 14999, 1492, 8455, 14999, 1796, 8455, 14999, 1914, 8455, 14999, 2152, 8455, 14999, 2444, 8455, 14999, 2492, 8455, 14999, 2556, 8455, 14999, 2676, 8455, 14999, 3048, 8455, 14999, 3114, 8455, 14999, 3242, 8455, 14999, 3322, 8455, 14999, 6314, 8455, 14999, 10264, 8455, 14999, 17493, 22, 8455, 14999, 17493, 34, 8455, 14999, 17493, 396, 8455, 14999, 17493, 582, 8455, 20989, 9854, 8459, 14414, 8461, 17481, 17724, 8471, 19408, 8471, 21096, 8593, 15370, 8597, 11516, 8600, 8628, 8697, 6718, 8699, 494, 8699, 1449, 14698, 8699, 9855, 12085, 17610, 8699, 9855, 13052, 8699, 9855, 15868, 8699, 9855, 17486, 8699, 9855, 17610, 8699, 9855, 17652, 8699, 9855, 20552, 8699, 11762, 8699, 11854, 8699, 11905, 2610, 8699, 11905, 3076, 8699, 11905, 3356, 8699, 11905, 6756, 8699, 11905, 6778, 8699, 11905, 8780, 8699, 11905, 10900, 8699, 11905, 11978, 8699, 11905, 13450, 8699, 11905, 13736, 8699, 14003, 9855, 8, 8699, 14003, 9855, 16, 8699, 14003, 9855, 28, 8699, 14003, 9855, 40, 8699, 14003, 9855, 58, 8699, 14003, 9855, 72, 8699, 14003, 9855, 94, 8699, 14003, 9855, 308, 8699, 14003, 9855, 676, 8699, 14003, 9855, 17493, 22, 8699, 14003, 9855, 17493, 34, 8699, 14003, 9855, 17493, 396, 8699, 14003, 9855, 17493, 582, 8699, 14625, 11854, 8699, 14999, 0, 8699, 14999, 8, 8699, 14999, 16, 8699, 14999, 28, 8699, 14999, 40, 8699, 14999, 58, 8699, 14999, 72, 8699, 14999, 94, 8699, 14999, 106, 8699, 14999, 124, 8699, 14999, 148, 8699, 14999, 244, 8699, 14999, 266, 8699, 14999, 308, 8699, 14999, 336, 8699, 14999, 350, 8699, 14999, 384, 8699, 14999, 416, 8699, 14999, 448, 8699, 14999, 522, 8699, 14999, 572, 8699, 14999, 588, 8699, 14999, 622, 8699, 14999, 676, 8699, 14999, 694, 8699, 14999, 734, 8699, 14999, 932, 8699, 14999, 1044, 8699, 14999, 1142, 8699, 14999, 1164, 8699, 14999, 1492, 8699, 14999, 1796, 8699, 14999, 1914, 8699, 14999, 2122, 8699, 14999, 2298, 8699, 14999, 2444, 8699, 14999, 2456, 8699, 14999, 2492, 8699, 14999, 2556, 8699, 14999, 2676, 8699, 14999, 2912, 8699, 14999, 3048, 8699, 14999, 3114, 8699, 14999, 3242, 8699, 14999, 3322, 8699, 14999, 6314, 8699, 14999, 8736, 8699, 14999, 8960, 8699, 14999, 10264, 8699, 14999, 17493, 22, 8699, 14999, 17493, 34, 8699, 14999, 17493, 396, 8699, 14999, 17493, 582, 8699, 15566, 8699, 19361, 9854, 8699, 20873, 8320, 8699, 20989, 9854, 8701, 9206, 8850, 8852, 8853, 2638, 8853, 9206, 9156, 9171, 968, 9171, 5860, 9171, 6741, 14732, 9171, 7876, 9171, 12263, 9854, 9171, 14455, 11571, 9950, 9171, 14455, 11772, 9171, 14455, 17642, 9171, 14455, 23301, 17642, 9171, 14732, 9171, 15650, 9171, 16751, 10641, 15423, 6758, 9171, 16751, 10641, 16731, 6758, 9171, 18688, 9206, 9207, 10641, 6118, 9207, 10641, 16153, 10132, 9207, 14675, 670, 9209, 10228, 9209, 14402, 9217, 20529, 8320, 9222, 9231, 9854, 9254, 9265, 485, 2706, 9266, 9269, 19960, 9287, 9854, 9287, 9855, 317, 7817, 7123, 14486, 9287, 9855, 317, 13341, 7123, 14486, 9287, 9855, 317, 18774, 9287, 9855, 10641, 1217, 11552, 9287, 9855, 10641, 11571, 18774, 9287, 9855, 10641, 13563, 14487, 11392, 9287, 9855, 10641, 13759, 11392, 9287, 9855, 10641, 13759, 11552, 9287, 9855, 10641, 19673, 3356, 9287, 9855, 10641, 19921, 14263, 11392, 9287, 9855, 11393, 14647, 9854, 9466, 9495, 9854, 9497, 5730, 9497, 16192, 9502, 9503, 317, 12005, 634, 9503, 11392, 9503, 12005, 634, 9503, 13250, 9503, 18386, 9522, 9567, 11905, 2610, 9567, 11905, 3076, 9567, 11905, 3356, 9567, 11905, 6756, 9567, 11905, 6778, 9567, 11905, 8780, 9567, 11905, 11978, 9567, 11905, 13450, 9567, 11905, 13736, 9567, 15233, 2611, 16502, 9567, 15233, 3077, 16502, 9567, 15233, 3232, 9567, 15233, 3357, 16502, 9567, 15233, 6757, 16502, 9567, 15233, 6779, 16502, 9567, 15233, 8781, 16502, 9567, 15233, 11979, 16502, 9567, 15233, 12080, 9567, 15233, 12108, 9567, 15233, 13451, 16502, 9567, 15233, 13538, 9567, 15233, 13737, 16502, 9567, 15233, 14636, 9567, 15233, 15194, 9567, 15233, 15736, 9567, 15233, 15820, 9567, 15233, 17190, 9567, 18089, 2611, 7122, 9567, 18089, 2611, 13728, 9567, 18089, 2611, 17086, 9567, 18089, 3357, 15734, 9691, 14391, 843, 1092, 9714, 9778, 9855, 485, 3245, 12328, 9865, 10620, 9879, 16740, 9887, 14437, 18330, 9891, 1741, 11768, 9891, 13483, 14723, 6410, 9891, 14856, 9895, 10641, 20375, 11477, 11392, 9897, 17257, 11905, 2610, 9897, 17257, 11905, 3076, 9897, 17257, 11905, 3356, 9897, 17257, 11905, 6756, 9897, 17257, 11905, 6778, 9897, 17257, 11905, 8780, 9897, 17257, 11905, 10900, 9897, 17257, 11905, 11978, 9897, 17257, 11905, 13450, 9897, 17257, 11905, 13736, 9897, 17257, 14999, 70, 9897, 17257, 14999, 190, 9897, 17257, 14999, 306, 9897, 17257, 14999, 486, 9897, 17257, 14999, 658, 9897, 17257, 14999, 888, 9897, 17257, 14999, 1008, 9897, 17257, 14999, 1124, 9897, 17257, 14999, 1274, 9897, 17257, 14999, 1438, 9897, 17257, 14999, 1582, 9897, 17257, 14999, 1782, 9897, 17257, 14999, 1868, 9897, 17257, 14999, 2070, 9897, 17257, 14999, 2236, 9897, 17257, 14999, 2238, 9897, 17257, 14999, 2392, 9897, 17257, 14999, 2640, 9897, 17257, 14999, 2874, 9897, 17257, 14999, 3014, 9897, 17257, 14999, 3194, 9897, 17257, 14999, 3440, 9897, 17257, 14999, 3660, 9897, 17257, 14999, 8704, 9897, 17257, 14999, 8944, 9951, 485, 11866, 9951, 843, 17790, 9951, 14646, 9951, 18386, 10088, 10103, 11934, 10103, 18968, 10108, 10120, 10137, 11905, 2610, 10137, 11905, 3076, 10137, 11905, 3356, 10137, 11905, 6756, 10137, 11905, 6778, 10137, 11905, 8780, 10137, 11905, 10900, 10137, 11905, 11978, 10137, 11905, 13450, 10137, 11905, 13736, 10137, 17803, 15673, 5728, 10137, 18979, 29, 844, 10137, 18979, 117, 14340, 10137, 18979, 167, 1156, 10137, 18979, 167, 11686, 10137, 18979, 237, 224, 10137, 18979, 237, 1350, 10137, 18979, 283, 1636, 10137, 18979, 283, 15206, 10137, 18979, 367, 1870, 10137, 18979, 403, 7856, 10137, 18979, 403, 11720, 10137, 18979, 406, 10137, 18979, 437, 416, 10137, 18979, 469, 472, 10137, 18979, 469, 2432, 10137, 18979, 541, 2700, 10137, 18979, 581, 2966, 10137, 18979, 584, 10137, 18979, 603, 602, 10137, 18979, 603, 3128, 10137, 18979, 603, 9574, 10137, 18979, 603, 9692, 10137, 18979, 635, 3204, 10137, 18979, 635, 13194, 10137, 18979, 711, 10614, 10137, 18979, 743, 3664, 10137, 18979, 743, 10800, 10137, 18979, 1051, 6012, 10137, 18979, 1051, 6044, 10137, 18979, 1051, 11690, 10137, 18979, 1051, 11714, 10137, 18979, 1921, 7636, 10137, 18979, 1921, 7656, 10137, 18979, 1921, 12474, 10137, 18979, 1921, 12478, 10137, 18979, 1921, 17098, 10137, 18979, 2241, 196, 10137, 18979, 2241, 3248, 10137, 18979, 2241, 3306, 10137, 18979, 2241, 17728, 10137, 18979, 2241, 18120, 10137, 18979, 2453, 2454, 10137, 18979, 2683, 9242, 10137, 18979, 2683, 13222, 10137, 18979, 2683, 17156, 10137, 18979, 3249, 10144, 10137, 18979, 3249, 13732, 10137, 18979, 3249, 13740, 10137, 18979, 3249, 15728, 10137, 18979, 3249, 17028, 10137, 18979, 3249, 20274, 10137, 18979, 9701, 0, 10137, 18979, 9701, 8, 10137, 18979, 9701, 16, 10137, 18979, 9701, 28, 10137, 18979, 9701, 40, 10137, 18979, 9701, 58, 10137, 18979, 9701, 66, 10137, 18979, 9701, 73, 16752, 10137, 18979, 9701, 73, 18274, 10137, 18979, 9701, 78, 10137, 18979, 9701, 308, 10137, 18979, 9701, 656, 10137, 18979, 9701, 676, 10137, 18979, 9701, 3386, 10137, 18979, 14932, 10137, 18979, 16416, 10137, 18979, 17026, 10137, 18979, 18276, 10137, 18979, 18360, 10137, 18979, 18864, 10137, 18979, 19422, 10137, 18979, 19496, 10137, 18979, 19866, 10137, 18979, 20762, 10137, 18979, 20944, 10163, 12237, 11772, 10163, 13582, 10163, 17154, 10196, 10197, 3357, 6431, 9175, 2611, 1217, 20876, 10224, 10225, 1016, 10232, 10421, 15672, 10533, 5853, 12237, 11772, 10533, 8471, 19408, 10533, 8471, 21096, 10533, 12277, 3077, 15609, 17642, 10533, 12277, 6757, 15609, 17642, 10533, 12277, 11979, 15609, 17642, 10533, 12277, 11979, 17045, 11571, 9950, 10533, 12277, 12237, 11772, 10533, 12277, 14049, 14486, 10533, 12277, 14049, 15620, 10533, 12277, 17123, 17254, 10533, 12277, 17154, 10533, 12277, 17254, 10621, 6286, 10621, 11477, 18471, 17855, 7816, 10621, 11477, 18471, 17855, 13340, 10623, 2175, 7854, 10623, 6286, 10623, 7854, 10623, 18400, 10629, 15679, 11772, 10635, 11712, 10635, 16079, 6718, 10637, 12212, 10643, 6718, 10651, 14890, 10651, 19619, 15119, 1216, 10901, 14055, 13582, 10901, 14055, 14890, 10901, 14055, 18367, 13582, 10901, 14055, 20284, 10972, 10974, 11395, 11446, 11395, 14262, 11399, 5251, 20214, 11399, 11905, 2610, 11399, 11905, 3076, 11399, 11905, 3356, 11399, 11905, 6756, 11399, 11905, 6778, 11399, 11905, 8780, 11399, 11905, 10900, 11399, 11905, 11978, 11399, 11905, 13450, 11399, 11905, 13736, 11399, 12260, 11399, 13052, 11399, 13563, 14999, 8, 11399, 13563, 14999, 16, 11399, 13563, 14999, 28, 11399, 13563, 14999, 40, 11399, 13563, 14999, 106, 11399, 13563, 14999, 224, 11399, 13563, 14999, 244, 11399, 13563, 14999, 266, 11399, 13563, 14999, 528, 11399, 13563, 14999, 572, 11399, 13563, 14999, 642, 11399, 13563, 14999, 680, 11399, 13563, 14999, 734, 11399, 13563, 14999, 934, 11399, 13563, 14999, 1048, 11399, 13563, 14999, 1164, 11399, 13563, 14999, 1460, 11399, 13563, 14999, 1866, 11399, 13563, 14999, 1914, 11399, 13563, 14999, 1992, 11399, 13563, 14999, 2456, 11399, 13563, 14999, 2536, 11399, 13563, 14999, 2556, 11399, 13563, 14999, 3048, 11399, 13563, 14999, 3532, 11399, 13563, 14999, 3708, 11399, 13563, 14999, 3794, 11399, 13563, 14999, 5250, 11399, 13563, 14999, 7484, 11399, 13563, 14999, 7774, 11399, 13563, 14999, 8434, 11399, 13563, 14999, 9344, 11399, 13563, 14999, 11834, 11399, 13563, 14999, 20408, 11399, 14003, 20214, 11399, 16111, 14999, 8, 11399, 16111, 14999, 16, 11399, 16111, 14999, 28, 11399, 16111, 14999, 40, 11399, 16111, 14999, 106, 11399, 16111, 14999, 224, 11399, 16111, 14999, 244, 11399, 16111, 14999, 266, 11399, 16111, 14999, 528, 11399, 16111, 14999, 572, 11399, 16111, 14999, 642, 11399, 16111, 14999, 680, 11399, 16111, 14999, 734, 11399, 16111, 14999, 934, 11399, 16111, 14999, 1048, 11399, 16111, 14999, 1164, 11399, 16111, 14999, 1460, 11399, 16111, 14999, 1866, 11399, 16111, 14999, 1914, 11399, 16111, 14999, 1992, 11399, 16111, 14999, 2456, 11399, 16111, 14999, 2536, 11399, 16111, 14999, 2556, 11399, 16111, 14999, 3048, 11399, 16111, 14999, 3532, 11399, 16111, 14999, 3708, 11399, 16111, 14999, 3794, 11399, 16111, 14999, 5250, 11399, 16111, 14999, 7484, 11399, 16111, 14999, 7774, 11399, 16111, 14999, 8434, 11399, 16111, 14999, 9344, 11399, 16111, 14999, 11834, 11399, 16111, 14999, 20408, 11399, 16525, 18511, 8320, 11399, 16525, 20685, 8320, 11399, 18105, 19015, 18318, 11399, 19015, 18318, 11399, 20155, 8320, 11423, 11742, 11431, 16818, 11445, 15672, 11446, 11447, 10641, 37, 14874, 11447, 10641, 18836, 11449, 6718, 11470, 11477, 18471, 19215, 10155, 16205, 19406, 11477, 18471, 19215, 10155, 16205, 20374, 11477, 18471, 20375, 10155, 16205, 17462, 11477, 18471, 20375, 10155, 16205, 19214, 11514, 11521, 6793, 9956, 11521, 11756, 11521, 11762, 11521, 14999, 0, 11521, 14999, 16, 11521, 14999, 24, 11521, 14999, 28, 11521, 14999, 40, 11521, 14999, 184, 11521, 14999, 238, 11521, 14999, 350, 11521, 14999, 358, 11521, 14999, 366, 11521, 14999, 370, 11521, 14999, 384, 11521, 14999, 392, 11521, 14999, 406, 11521, 14999, 416, 11521, 14999, 430, 11521, 14999, 436, 11521, 14999, 440, 11521, 14999, 448, 11521, 14999, 460, 11521, 14999, 472, 11521, 14999, 522, 11521, 14999, 536, 11521, 14999, 584, 11521, 14999, 598, 11521, 14999, 630, 11521, 14999, 694, 11521, 14999, 734, 11521, 14999, 1364, 11521, 14999, 1388, 11521, 14999, 1900, 11521, 14999, 1906, 11521, 14999, 1986, 11521, 14999, 2168, 11521, 14999, 2282, 11521, 14999, 2444, 11521, 14999, 2562, 11521, 14999, 2664, 11521, 14999, 2730, 11521, 14999, 2872, 11521, 14999, 2898, 11521, 14999, 2904, 11521, 14999, 2916, 11521, 14999, 3054, 11521, 14999, 3056, 11521, 14999, 3146, 11521, 14999, 3186, 11521, 14999, 3190, 11521, 14999, 3232, 11521, 14999, 3236, 11521, 14999, 3572, 11521, 14999, 3732, 11521, 14999, 3754, 11521, 14999, 7628, 11521, 14999, 7754, 11521, 14999, 8330, 11521, 14999, 8336, 11521, 14999, 8646, 11521, 14999, 8726, 11521, 14999, 8792, 11521, 14999, 8896, 11521, 14999, 8908, 11521, 14999, 8918, 11521, 14999, 8922, 11521, 14999, 9234, 11521, 14999, 9300, 11521, 14999, 9490, 11521, 14999, 9498, 11521, 14999, 9724, 11521, 14999, 9772, 11521, 14999, 12496, 11521, 14999, 12546, 11521, 14999, 12684, 11521, 14999, 12896, 11521, 14999, 12910, 11521, 14999, 13416, 11521, 14999, 13486, 11521, 14999, 14660, 11521, 14999, 14952, 11521, 14999, 16876, 11521, 14999, 17013, 41, 3755, 2388, 11521, 14999, 17013, 406, 11521, 14999, 17013, 523, 18230, 11521, 14999, 17013, 643, 15056, 11521, 14999, 17013, 1882, 11521, 14999, 17013, 1906, 11521, 14999, 17013, 2117, 2024, 11521, 14999, 17013, 2247, 13230, 11521, 14999, 17013, 2329, 18354, 11521, 14999, 17013, 2387, 8384, 11521, 14999, 17013, 2400, 11521, 14999, 17013, 2421, 18230, 11521, 14999, 17013, 2432, 11521, 14999, 17013, 2562, 11521, 14999, 17013, 2569, 8384, 11521, 14999, 17013, 2674, 11521, 14999, 17013, 2705, 523, 2483, 18462, 11521, 14999, 17013, 2705, 523, 2483, 20870, 11521, 14999, 17013, 2705, 8385, 18462, 11521, 14999, 17013, 2705, 8385, 20870, 11521, 14999, 17013, 2736, 11521, 14999, 17013, 2946, 11521, 14999, 17013, 3098, 11521, 14999, 17013, 3102, 11521, 14999, 17013, 3146, 11521, 14999, 17013, 3456, 11521, 14999, 17013, 6748, 11521, 14999, 17013, 7578, 11521, 14999, 17013, 7706, 11521, 14999, 17013, 7722, 11521, 14999, 17013, 8312, 11521, 14999, 17013, 8332, 11521, 14999, 17013, 8776, 11521, 14999, 17013, 8786, 11521, 14999, 17013, 8896, 11521, 14999, 17013, 8906, 11521, 14999, 17013, 8907, 8382, 11521, 14999, 17013, 8907, 8904, 11521, 14999, 17013, 8958, 11521, 14999, 17013, 8973, 20258, 11521, 14999, 17013, 9027, 8380, 11521, 14999, 17013, 9202, 11521, 14999, 17013, 9795, 12991, 3746, 11521, 14999, 17013, 9810, 11521, 14999, 17013, 9868, 11521, 14999, 17013, 10199, 8384, 11521, 14999, 17013, 12169, 1390, 11521, 14999, 17013, 12534, 11521, 14999, 17013, 12590, 11521, 14999, 17013, 12646, 11521, 14999, 17013, 12848, 11521, 14999, 17013, 12869, 8384, 11521, 14999, 17013, 13846, 11521, 14999, 17013, 15034, 11521, 14999, 17013, 15058, 11521, 14999, 17013, 15084, 11521, 14999, 17013, 15112, 11521, 14999, 17013, 15170, 11521, 14999, 17013, 15200, 11521, 14999, 17013, 15212, 11521, 14999, 17013, 15284, 11521, 14999, 17013, 15300, 11521, 14999, 17013, 15547, 523, 2482, 11521, 14999, 17013, 15552, 11521, 14999, 17013, 15588, 11521, 14999, 17013, 15720, 11521, 14999, 17013, 16742, 11521, 14999, 17013, 16764, 11521, 14999, 17013, 16820, 11521, 14999, 17013, 16822, 11521, 14999, 17013, 16884, 11521, 14999, 17013, 16894, 11521, 14999, 17013, 16970, 11521, 14999, 17013, 17186, 11521, 14999, 17013, 17456, 11521, 14999, 17013, 18266, 11521, 14999, 17013, 18268, 11521, 14999, 17013, 19288, 11521, 14999, 17013, 19780, 11521, 14999, 17013, 20200, 11521, 14999, 17013, 20226, 11521, 14999, 17013, 20270, 11521, 14999, 17013, 20278, 11521, 14999, 17013, 20400, 11521, 14999, 17013, 21092, 11521, 14999, 17013, 21148, 11521, 14999, 17013, 21158, 11521, 14999, 17015, 416, 11521, 14999, 17015, 417, 12916, 11521, 14999, 17015, 417, 18364, 11521, 14999, 17015, 643, 12992, 11521, 14999, 17015, 643, 19418, 11521, 14999, 17015, 1364, 11521, 14999, 17015, 1876, 11521, 14999, 17015, 1940, 11521, 14999, 17015, 2077, 12991, 8946, 11521, 14999, 17015, 2116, 11521, 14999, 17015, 2163, 12996, 11521, 14999, 17015, 2267, 15054, 11521, 14999, 17015, 2429, 8784, 11521, 14999, 17015, 2563, 12996, 11521, 14999, 17015, 2696, 11521, 14999, 17015, 3043, 642, 11521, 14999, 17015, 3132, 11521, 14999, 17015, 6738, 11521, 14999, 17015, 8339, 16786, 11521, 14999, 17015, 8378, 11521, 14999, 17015, 8381, 15174, 11521, 14999, 17015, 8385, 15722, 11521, 14999, 17015, 8744, 11521, 14999, 17015, 8894, 11521, 14999, 17015, 9765, 8790, 11521, 14999, 17015, 9846, 11521, 14999, 17015, 10080, 11521, 14999, 17015, 10534, 11521, 14999, 17015, 10741, 18230, 11521, 14999, 17015, 12480, 11521, 14999, 17015, 12678, 11521, 14999, 17015, 12851, 2274, 11521, 14999, 17015, 13001, 15542, 11521, 14999, 17015, 13186, 11521, 14999, 17015, 14076, 11521, 14999, 17015, 14918, 11521, 14999, 17015, 14922, 11521, 14999, 17015, 14968, 11521, 14999, 17015, 15088, 11521, 14999, 17015, 15110, 11521, 14999, 17015, 15172, 11521, 14999, 17015, 15182, 11521, 14999, 17015, 15183, 12536, 11521, 14999, 17015, 15214, 11521, 14999, 17015, 15304, 11521, 14999, 17015, 15926, 11521, 14999, 17015, 16574, 11521, 14999, 17015, 16788, 11521, 14999, 17015, 16875, 8492, 11521, 14999, 17015, 16908, 11521, 14999, 17015, 17078, 11521, 14999, 17015, 17152, 11521, 14999, 17015, 18110, 11521, 14999, 17015, 18326, 11521, 14999, 17015, 19628, 11521, 14999, 17015, 20702, 11521, 14999, 17017, 406, 11521, 14999, 17017, 417, 12992, 11521, 14999, 17017, 417, 16570, 11521, 14999, 17017, 584, 11521, 14999, 17017, 747, 15146, 11521, 14999, 17017, 1404, 11521, 14999, 17017, 1860, 11521, 14999, 17017, 1901, 2092, 11521, 14999, 17017, 1901, 16390, 11521, 14999, 17017, 1906, 11521, 14999, 17017, 2024, 11521, 14999, 17017, 2076, 11521, 14999, 17017, 2082, 11521, 14999, 17017, 2142, 11521, 14999, 17017, 2270, 11521, 14999, 17017, 2400, 11521, 14999, 17017, 2528, 11521, 14999, 17017, 2531, 8338, 11521, 14999, 17017, 2568, 11521, 14999, 17017, 2668, 11521, 14999, 17017, 2692, 11521, 14999, 17017, 3236, 11521, 14999, 17017, 3580, 11521, 14999, 17017, 3648, 11521, 14999, 17017, 3746, 11521, 14999, 17017, 5878, 11521, 14999, 17017, 7012, 11521, 14999, 17017, 7624, 11521, 14999, 17017, 7721, 16884, 11521, 14999, 17017, 8331, 15336, 11521, 14999, 17017, 8331, 21030, 11521, 14999, 17017, 8338, 11521, 14999, 17017, 8342, 11521, 14999, 17017, 8428, 11521, 14999, 17017, 8464, 11521, 14999, 17017, 8648, 11521, 14999, 17017, 8650, 11521, 14999, 17017, 8712, 11521, 14999, 17017, 8734, 11521, 14999, 17017, 8744, 11521, 14999, 17017, 8786, 11521, 14999, 17017, 8898, 11521, 14999, 17017, 8902, 11521, 14999, 17017, 8904, 11521, 14999, 17017, 8910, 11521, 14999, 17017, 8969, 16815, 8376, 11521, 14999, 17017, 9724, 11521, 14999, 17017, 9780, 11521, 14999, 17017, 10199, 3742, 11521, 14999, 17017, 10536, 11521, 14999, 17017, 10784, 11521, 14999, 17017, 12164, 11521, 14999, 17017, 12646, 11521, 14999, 17017, 12672, 11521, 14999, 17017, 12674, 11521, 14999, 17017, 12824, 11521, 14999, 17017, 12830, 11521, 14999, 17017, 12848, 11521, 14999, 17017, 12856, 11521, 14999, 17017, 12866, 11521, 14999, 17017, 12869, 15056, 11521, 14999, 17017, 12896, 11521, 14999, 17017, 12900, 11521, 14999, 17017, 12912, 11521, 14999, 17017, 12984, 11521, 14999, 17017, 12995, 8744, 11521, 14999, 17017, 13066, 11521, 14999, 17017, 13510, 11521, 14999, 17017, 13638, 11521, 14999, 17017, 14140, 11521, 14999, 17017, 14776, 11521, 14999, 17017, 14920, 11521, 14999, 17017, 14958, 11521, 14999, 17017, 15056, 11521, 14999, 17017, 15084, 11521, 14999, 17017, 15086, 11521, 14999, 17017, 15090, 11521, 14999, 17017, 15162, 11521, 14999, 17017, 15180, 11521, 14999, 17017, 15198, 11521, 14999, 17017, 15520, 11521, 14999, 17017, 16572, 11521, 14999, 17017, 16804, 11521, 14999, 17017, 16863, 8946, 11521, 14999, 17017, 16864, 11521, 14999, 17017, 16892, 11521, 14999, 17017, 17034, 11521, 14999, 17017, 17334, 11521, 14999, 17017, 17354, 11521, 14999, 17017, 17382, 11521, 14999, 17017, 18292, 11521, 14999, 17017, 18294, 11521, 14999, 17017, 18342, 11521, 14999, 17017, 18378, 11521, 14999, 17017, 18848, 11521, 14999, 17017, 18854, 11521, 14999, 17017, 19462, 11521, 14999, 17017, 20202, 11521, 14999, 17019, 24, 11521, 14999, 17019, 370, 11521, 14999, 17019, 440, 11521, 14999, 17019, 460, 11521, 14999, 17019, 472, 11521, 14999, 17019, 630, 11521, 14999, 17019, 642, 11521, 14999, 17019, 1344, 11521, 14999, 17019, 1906, 11521, 14999, 17019, 2014, 11521, 14999, 17019, 2020, 11521, 14999, 17019, 2116, 11521, 14999, 17019, 2168, 11521, 14999, 17019, 2198, 11521, 14999, 17019, 2288, 11521, 14999, 17019, 2482, 11521, 14999, 17019, 2562, 11521, 14999, 17019, 2646, 11521, 14999, 17019, 2664, 11521, 14999, 17019, 2694, 11521, 14999, 17019, 2738, 11521, 14999, 17019, 2905, 2606, 11521, 14999, 17019, 2905, 8470, 11521, 14999, 17019, 2916, 11521, 14999, 17019, 3022, 11521, 14999, 17019, 3024, 11521, 14999, 17019, 3056, 11521, 14999, 17019, 3102, 11521, 14999, 17019, 3132, 11521, 14999, 17019, 3146, 11521, 14999, 17019, 3190, 11521, 14999, 17019, 3294, 11521, 14999, 17019, 3526, 11521, 14999, 17019, 3698, 11521, 14999, 17019, 7006, 11521, 14999, 17019, 7624, 11521, 14999, 17019, 7626, 11521, 14999, 17019, 7718, 11521, 14999, 17019, 7754, 11521, 14999, 17019, 7822, 11521, 14999, 17019, 7838, 11521, 14999, 17019, 8330, 11521, 14999, 17019, 8331, 13450, 11521, 14999, 17019, 8344, 11521, 14999, 17019, 8376, 11521, 14999, 17019, 8380, 11521, 14999, 17019, 8384, 11521, 14999, 17019, 8456, 11521, 14999, 17019, 8492, 11521, 14999, 17019, 8648, 11521, 14999, 17019, 8656, 11521, 14999, 17019, 8672, 11521, 14999, 17019, 8788, 11521, 14999, 17019, 8900, 11521, 14999, 17019, 8908, 11521, 14999, 17019, 8918, 11521, 14999, 17019, 8946, 11521, 14999, 17019, 8958, 11521, 14999, 17019, 8990, 11521, 14999, 17019, 9316, 11521, 14999, 17019, 9460, 11521, 14999, 17019, 9756, 11521, 14999, 17019, 9772, 11521, 14999, 17019, 9794, 11521, 14999, 17019, 9962, 11521, 14999, 17019, 10128, 11521, 14999, 17019, 10130, 11521, 14999, 17019, 10292, 11521, 14999, 17019, 10836, 11521, 14999, 17019, 10838, 11521, 14999, 17019, 12465, 12676, 11521, 14999, 17019, 12502, 11521, 14999, 17019, 12546, 11521, 14999, 17019, 12684, 11521, 14999, 17019, 12712, 11521, 14999, 17019, 12714, 11521, 14999, 17019, 12826, 11521, 14999, 17019, 12844, 11521, 14999, 17019, 12864, 11521, 14999, 17019, 12872, 11521, 14999, 17019, 12898, 11521, 14999, 17019, 12902, 11521, 14999, 17019, 12912, 11521, 14999, 17019, 12986, 11521, 14999, 17019, 12990, 11521, 14999, 17019, 12996, 11521, 14999, 17019, 13486, 11521, 14999, 17019, 13694, 11521, 14999, 17019, 14074, 11521, 14999, 17019, 14140, 11521, 14999, 17019, 14778, 11521, 14999, 17019, 15002, 11521, 14999, 17019, 15108, 11521, 14999, 17019, 15114, 11521, 14999, 17019, 15116, 11521, 14999, 17019, 15172, 11521, 14999, 17019, 15176, 11521, 14999, 17019, 15178, 11521, 14999, 17019, 15186, 11521, 14999, 17019, 15188, 11521, 14999, 17019, 15218, 11521, 14999, 17019, 15220, 11521, 14999, 17019, 15326, 11521, 14999, 17019, 15522, 11521, 14999, 17019, 15540, 11521, 14999, 17019, 15720, 11521, 14999, 17019, 16744, 11521, 14999, 17019, 16758, 11521, 14999, 17019, 16806, 11521, 14999, 17019, 16868, 11521, 14999, 17019, 16872, 11521, 14999, 17019, 16882, 11521, 14999, 17019, 17530, 11521, 14999, 17019, 18352, 11521, 14999, 17019, 18358, 11521, 14999, 17019, 19256, 11521, 14999, 17019, 20198, 11521, 14999, 17021, 0, 11521, 14999, 17021, 16, 11521, 14999, 17021, 28, 11521, 14999, 17021, 224, 11521, 14999, 17021, 239, 16, 11521, 14999, 17021, 239, 5962, 11521, 14999, 17021, 239, 15432, 11521, 14999, 17021, 358, 11521, 14999, 17021, 366, 11521, 14999, 17021, 406, 11521, 14999, 17021, 416, 11521, 14999, 17021, 430, 11521, 14999, 17021, 448, 11521, 14999, 17021, 523, 15310, 11521, 14999, 17021, 523, 15354, 11521, 14999, 17021, 536, 11521, 14999, 17021, 540, 11521, 14999, 17021, 546, 11521, 14999, 17021, 1354, 11521, 14999, 17021, 1364, 11521, 14999, 17021, 1388, 11521, 14999, 17021, 1404, 11521, 14999, 17021, 1906, 11521, 14999, 17021, 2024, 11521, 14999, 17021, 2082, 11521, 14999, 17021, 2084, 11521, 14999, 17021, 2162, 11521, 14999, 17021, 2168, 11521, 14999, 17021, 2236, 11521, 14999, 17021, 2246, 11521, 14999, 17021, 2248, 11521, 14999, 17021, 2282, 11521, 14999, 17021, 2328, 11521, 14999, 17021, 2362, 11521, 14999, 17021, 2388, 11521, 14999, 17021, 2444, 11521, 14999, 17021, 2563, 16064, 11521, 14999, 17021, 2563, 16158, 11521, 14999, 17021, 2636, 11521, 14999, 17021, 2730, 11521, 14999, 17021, 2732, 11521, 14999, 17021, 2872, 11521, 14999, 17021, 2884, 11521, 14999, 17021, 3008, 11521, 14999, 17021, 3036, 11521, 14999, 17021, 3042, 11521, 14999, 17021, 3054, 11521, 14999, 17021, 3090, 11521, 14999, 17021, 3186, 11521, 14999, 17021, 3200, 11521, 14999, 17021, 3208, 11521, 14999, 17021, 3232, 11521, 14999, 17021, 3238, 11521, 14999, 17021, 3290, 11521, 14999, 17021, 3294, 11521, 14999, 17021, 3338, 11521, 14999, 17021, 3456, 11521, 14999, 17021, 3482, 11521, 14999, 17021, 3572, 11521, 14999, 17021, 3578, 11521, 14999, 17021, 3672, 11521, 14999, 17021, 3720, 11521, 14999, 17021, 3733, 11766, 11521, 14999, 17021, 3733, 18694, 11521, 14999, 17021, 3748, 11521, 14999, 17021, 3754, 11521, 14999, 17021, 6788, 11521, 14999, 17021, 6936, 11521, 14999, 17021, 7016, 11521, 14999, 17021, 7020, 11521, 14999, 17021, 7628, 11521, 14999, 17021, 7714, 11521, 14999, 17021, 7720, 11521, 14999, 17021, 7774, 11521, 14999, 17021, 7886, 11521, 14999, 17021, 7890, 11521, 14999, 17021, 8312, 11521, 14999, 17021, 8334, 11521, 14999, 17021, 8392, 11521, 14999, 17021, 8428, 11521, 14999, 17021, 8464, 11521, 14999, 17021, 8647, 447, 12334, 11521, 14999, 17021, 8647, 18616, 11521, 14999, 17021, 8650, 11521, 14999, 17021, 8666, 11521, 14999, 17021, 8682, 11521, 14999, 17021, 8742, 11521, 14999, 17021, 8750, 11521, 14999, 17021, 8752, 11521, 14999, 17021, 8792, 11521, 14999, 17021, 8793, 12002, 11521, 14999, 17021, 8828, 11521, 14999, 17021, 8906, 11521, 14999, 17021, 8916, 11521, 14999, 17021, 9006, 11521, 14999, 17021, 9032, 11521, 14999, 17021, 9202, 11521, 14999, 17021, 9226, 11521, 14999, 17021, 9232, 11521, 14999, 17021, 9234, 11521, 14999, 17021, 9258, 11521, 14999, 17021, 9294, 11521, 14999, 17021, 9300, 11521, 14999, 17021, 9302, 11521, 14999, 17021, 9490, 11521, 14999, 17021, 9780, 11521, 14999, 17021, 9794, 11521, 14999, 17021, 10082, 11521, 14999, 17021, 10091, 12996, 11521, 14999, 17021, 10222, 11521, 14999, 17021, 10286, 11521, 14999, 17021, 10630, 11521, 14999, 17021, 10782, 11521, 14999, 17021, 10786, 11521, 14999, 17021, 10792, 11521, 14999, 17021, 10834, 11521, 14999, 17021, 12166, 11521, 14999, 17021, 12194, 11521, 14999, 17021, 12196, 11521, 14999, 17021, 12462, 11521, 14999, 17021, 12498, 11521, 14999, 17021, 12672, 11521, 14999, 17021, 12710, 11521, 14999, 17021, 12718, 11521, 14999, 17021, 12828, 11521, 14999, 17021, 12858, 11521, 14999, 17021, 12870, 11521, 14999, 17021, 12874, 11521, 14999, 17021, 12878, 11521, 14999, 17021, 12900, 11521, 14999, 17021, 12988, 11521, 14999, 17021, 13228, 11521, 14999, 17021, 13636, 11521, 14999, 17021, 13850, 11521, 14999, 17021, 13990, 11521, 14999, 17021, 14122, 11521, 14999, 17021, 14138, 11521, 14999, 17021, 14778, 11521, 14999, 17021, 15000, 11521, 14999, 17021, 15184, 11521, 14999, 17021, 15190, 11521, 14999, 17021, 15212, 11521, 14999, 17021, 15216, 11521, 14999, 17021, 15446, 11521, 14999, 17021, 15722, 11521, 14999, 17021, 15924, 11521, 14999, 17021, 16438, 11521, 14999, 17021, 16858, 11521, 14999, 17021, 16860, 11521, 14999, 17021, 16866, 11521, 14999, 17021, 16870, 11521, 14999, 17021, 16880, 11521, 14999, 17021, 17212, 11521, 14999, 17021, 18350, 11521, 14999, 17021, 18354, 11521, 14999, 17021, 18356, 11521, 14999, 17021, 20277, 8946, 11521, 14999, 17023, 24, 11521, 14999, 17023, 40, 11521, 14999, 17023, 184, 11521, 14999, 17023, 350, 11521, 14999, 17023, 366, 11521, 14999, 17023, 370, 11521, 14999, 17023, 384, 11521, 14999, 17023, 392, 11521, 14999, 17023, 416, 11521, 14999, 17023, 436, 11521, 14999, 17023, 460, 11521, 14999, 17023, 472, 11521, 14999, 17023, 584, 11521, 14999, 17023, 598, 11521, 14999, 17023, 694, 11521, 14999, 17023, 734, 11521, 14999, 17023, 1388, 11521, 14999, 17023, 1900, 11521, 14999, 17023, 1906, 11521, 14999, 17023, 1986, 11521, 14999, 17023, 2168, 11521, 14999, 17023, 2562, 11521, 14999, 17023, 2664, 11521, 14999, 17023, 2898, 11521, 14999, 17023, 2904, 11521, 14999, 17023, 2916, 11521, 14999, 17023, 3054, 11521, 14999, 17023, 3056, 11521, 14999, 17023, 3146, 11521, 14999, 17023, 3186, 11521, 14999, 17023, 3190, 11521, 14999, 17023, 3236, 11521, 14999, 17023, 3572, 11521, 14999, 17023, 3732, 11521, 14999, 17023, 7754, 11521, 14999, 17023, 8330, 11521, 14999, 17023, 8336, 11521, 14999, 17023, 8646, 11521, 14999, 17023, 8726, 11521, 14999, 17023, 8896, 11521, 14999, 17023, 8908, 11521, 14999, 17023, 8922, 11521, 14999, 17023, 9234, 11521, 14999, 17023, 9300, 11521, 14999, 17023, 9490, 11521, 14999, 17023, 9498, 11521, 14999, 17023, 9724, 11521, 14999, 17023, 9772, 11521, 14999, 17023, 10558, 11521, 14999, 17023, 12684, 11521, 14999, 17023, 12896, 11521, 14999, 17023, 12910, 11521, 14999, 17023, 13416, 11521, 14999, 17023, 16876, 11521, 16880, 11521, 18511, 8320, 11521, 19003, 8321, 16592, 11521, 19003, 8321, 19806, 11521, 19614, 11525, 3441, 6793, 9956, 11525, 3441, 14999, 0, 11525, 3441, 14999, 8, 11525, 3441, 14999, 16, 11525, 3441, 14999, 28, 11525, 3441, 14999, 40, 11525, 3441, 14999, 106, 11525, 3441, 14999, 130, 11525, 3441, 14999, 166, 11525, 3441, 14999, 184, 11525, 3441, 14999, 224, 11525, 3441, 14999, 342, 11525, 3441, 14999, 350, 11525, 3441, 14999, 498, 11525, 3441, 14999, 522, 11525, 3441, 14999, 592, 11525, 3441, 14999, 634, 11525, 3441, 14999, 690, 11525, 3441, 14999, 694, 11525, 3441, 14999, 760, 11525, 3441, 14999, 1438, 11525, 3441, 14999, 1466, 11525, 3441, 14999, 2268, 11525, 3441, 14999, 3432, 11525, 3441, 14999, 3710, 11525, 3441, 14999, 6390, 11525, 3441, 14999, 6574, 11525, 3441, 14999, 7334, 11525, 3441, 14999, 7696, 11525, 3441, 14999, 10776, 11525, 3441, 14999, 14022, 11525, 3441, 19003, 2175, 10218, 11525, 3441, 19003, 2303, 10218, 11525, 3441, 19003, 7171, 10218, 11525, 3441, 19003, 16729, 10218, 11525, 3441, 19003, 18145, 10218, 11527, 9855, 13788, 11527, 14003, 9855, 8, 11527, 14003, 9855, 16, 11527, 14003, 9855, 28, 11527, 14003, 9855, 40, 11527, 14003, 9855, 41, 1397, 20405, 588, 11527, 14003, 9855, 184, 11527, 14003, 9855, 7601, 16, 11527, 14003, 9855, 7601, 28, 11527, 14003, 9855, 15293, 8, 11527, 14999, 0, 11527, 14999, 16, 11527, 14999, 40, 11527, 14999, 106, 11527, 14999, 124, 11527, 14999, 148, 11527, 14999, 244, 11527, 14999, 266, 11527, 14999, 336, 11527, 14999, 384, 11527, 14999, 416, 11527, 14999, 448, 11527, 14999, 522, 11527, 14999, 572, 11527, 14999, 588, 11527, 14999, 694, 11527, 14999, 734, 11527, 14999, 2266, 11527, 14999, 2420, 11527, 14999, 2444, 11527, 14999, 2556, 11527, 14999, 7601, 106, 11527, 14999, 15293, 694, 11527, 14999, 18369, 622, 11527, 14999, 18619, 622, 11527, 14999, 20231, 266, 11527, 14999, 20231, 448, 11527, 14999, 20231, 588, 11527, 14999, 20405, 0, 11527, 14999, 20405, 244, 11527, 14999, 20405, 266, 11527, 14999, 20405, 384, 11527, 14999, 20405, 416, 11527, 14999, 20405, 522, 11527, 14999, 20405, 572, 11527, 14999, 20405, 588, 11527, 14999, 20405, 694, 11527, 14999, 20405, 734, 11527, 15673, 11565, 449, 12704, 11527, 15673, 11565, 12422, 11527, 15673, 11565, 18422, 11527, 15673, 11565, 20328, 11527, 18422, 11527, 19015, 9855, 14, 11527, 19015, 9855, 456, 11527, 20304, 11541, 10641, 18832, 11557, 968, 11571, 671, 18471, 17655, 12388, 11571, 2462, 11571, 3137, 10641, 9474, 11571, 6091, 9970, 11571, 6435, 18471, 17655, 12388, 11571, 6758, 11571, 6779, 17045, 9950, 11571, 7131, 13483, 14723, 6410, 11571, 7817, 7797, 12698, 11571, 7817, 18471, 12388, 11571, 7817, 18471, 17655, 12388, 11571, 8461, 15006, 11571, 9950, 11571, 10197, 15620, 11571, 10197, 16248, 11571, 10197, 16732, 11571, 10533, 13563, 15620, 11571, 10533, 13563, 16248, 11571, 10533, 13563, 16732, 11571, 11703, 7672, 11571, 11703, 9220, 11571, 11703, 9518, 11571, 11703, 13286, 11571, 11703, 14382, 11571, 11703, 14950, 11571, 11773, 497, 15544, 11571, 12274, 11571, 12275, 9970, 11571, 12537, 14486, 11571, 12537, 15620, 11571, 12589, 7817, 18774, 11571, 12589, 13341, 18774, 11571, 13341, 18471, 12388, 11571, 13341, 18471, 17655, 12388, 11571, 13501, 13226, 11571, 13545, 843, 19946, 11571, 13563, 9950, 11571, 13563, 15620, 11571, 13563, 16248, 11571, 13563, 16732, 11571, 13585, 9970, 11571, 13816, 11571, 13889, 7817, 18774, 11571, 13889, 13341, 18774, 11571, 14396, 11571, 14455, 14049, 9950, 11571, 14486, 11571, 14487, 1397, 15428, 11571, 14487, 10641, 3357, 14049, 6430, 11571, 14487, 10641, 6435, 11476, 11571, 14487, 10641, 14049, 1217, 13340, 11571, 14537, 17463, 843, 19407, 11476, 11571, 14537, 17463, 843, 20375, 11476, 11571, 14537, 19215, 843, 19407, 11476, 11571, 14537, 19215, 843, 20375, 11476, 11571, 14537, 19407, 843, 17463, 11476, 11571, 14537, 19407, 843, 19215, 11476, 11571, 14537, 20375, 843, 17463, 11476, 11571, 14537, 20375, 843, 19215, 11476, 11571, 14732, 11571, 15095, 13563, 15620, 11571, 15095, 13563, 16248, 11571, 15095, 13563, 16732, 11571, 15095, 15620, 11571, 15095, 16248, 11571, 15095, 16732, 11571, 15095, 20973, 18774, 11571, 15095, 20973, 18775, 16126, 11571, 15095, 22821, 18774, 11571, 15095, 22821, 18775, 16126, 11571, 15095, 22867, 18774, 11571, 15095, 22867, 18775, 16126, 11571, 15095, 23121, 18774, 11571, 15095, 23121, 18775, 16126, 11571, 15469, 18566, 11571, 15620, 11571, 15621, 1397, 9956, 11571, 15621, 14420, 11571, 15621, 16126, 11571, 16248, 11571, 16249, 9970, 11571, 16249, 10641, 6435, 11476, 11571, 16249, 12741, 14049, 46, 11571, 16249, 16126, 11571, 16340, 11571, 16492, 11571, 16732, 11571, 16916, 11571, 17000, 11571, 17084, 11571, 17136, 11571, 17245, 6718, 11571, 17248, 11571, 17443, 7817, 3537, 17392, 11571, 17463, 20683, 18906, 11571, 17995, 2242, 11571, 17995, 7672, 11571, 18072, 11571, 18446, 11571, 18511, 8321, 18392, 11571, 18566, 11571, 18611, 13563, 14486, 11571, 18611, 13563, 15620, 11571, 18847, 16366, 11571, 18847, 19566, 11571, 19215, 20683, 18906, 11571, 19332, 11571, 19407, 14418, 11571, 19407, 20683, 18906, 11571, 19566, 11571, 19772, 11571, 19787, 19772, 11571, 19821, 19569, 15672, 11571, 20181, 16366, 11571, 20375, 11476, 11571, 20375, 14418, 11571, 20375, 18906, 11571, 20375, 20683, 18906, 11571, 20973, 13563, 18774, 11571, 20973, 14625, 18774, 11571, 20973, 18774, 11571, 20973, 19369, 13341, 18774, 11571, 22821, 13563, 18774, 11571, 22821, 14625, 18774, 11571, 22821, 18774, 11571, 22821, 19369, 13341, 18774, 11571, 22867, 13563, 18774, 11571, 22867, 14625, 18774, 11571, 22867, 14625, 18775, 10641, 18847, 896, 11571, 22867, 17046, 11571, 22867, 18774, 11571, 22867, 19369, 13341, 18774, 11571, 22888, 11571, 23121, 13563, 18774, 11571, 23121, 14625, 18774, 11571, 23121, 14625, 18775, 10641, 18847, 896, 11571, 23121, 17046, 11571, 23121, 18446, 11571, 23121, 18774, 11571, 23121, 18775, 10641, 14625, 18847, 896, 11571, 23121, 19369, 13341, 18774, 11575, 15672, 11586, 11594, 11596, 11601, 10641, 10528, 11615, 14003, 9855, 16, 11615, 14003, 9855, 40, 11615, 14999, 0, 11615, 14999, 16, 11615, 14999, 40, 11615, 14999, 106, 11615, 14999, 148, 11615, 14999, 244, 11615, 14999, 266, 11615, 14999, 350, 11615, 14999, 384, 11615, 14999, 416, 11615, 14999, 448, 11615, 14999, 522, 11615, 14999, 572, 11615, 14999, 588, 11615, 14999, 622, 11615, 14999, 694, 11615, 14999, 734, 11615, 14999, 2444, 11625, 317, 20402, 11644, 11646, 11652, 11653, 19361, 13250, 11656, 11684, 11693, 10641, 17463, 13812, 11693, 10641, 17463, 13813, 843, 3699, 9854, 11693, 10641, 19215, 13812, 11695, 8320, 11737, 15499, 15672, 11743, 6719, 2611, 15242, 11743, 6719, 3077, 15242, 11743, 6719, 3233, 15242, 11743, 6719, 3357, 15242, 11743, 6719, 6757, 15242, 11743, 6719, 6779, 15242, 11743, 6719, 8781, 15242, 11743, 6719, 11979, 15242, 11743, 6719, 13451, 15242, 11743, 6719, 13737, 15242, 11743, 6719, 14639, 15242, 11743, 6719, 15819, 15242, 11743, 6719, 20288, 11743, 6719, 20428, 11743, 6719, 20468, 11743, 6719, 20502, 11743, 6719, 20692, 11743, 6719, 20698, 11743, 6719, 20824, 11743, 6719, 21080, 11743, 6719, 21208, 11743, 6719, 21246, 11743, 6719, 22826, 11743, 6719, 22948, 11745, 670, 11748, 11749, 10641, 9466, 11749, 10641, 9886, 11749, 10641, 17384, 11749, 10641, 19414, 11751, 6718, 11756, 11757, 9854, 11757, 14646, 11760, 11762, 11765, 843, 7794, 11773, 485, 18262, 11773, 485, 19372, 11773, 8320, 11773, 15372, 11773, 15373, 10641, 20707, 11552, 11774, 11779, 7888, 11779, 16089, 19242, 11779, 16727, 504, 11779, 16727, 842, 11781, 843, 9496, 11851, 15672, 11856, 11889, 12005, 634, 11905, 2610, 11905, 2611, 6793, 9956, 11905, 2611, 11762, 11905, 3076, 11905, 3077, 6793, 9956, 11905, 3077, 11762, 11905, 3356, 11905, 3357, 6793, 9956, 11905, 3357, 11762, 11905, 6756, 11905, 6757, 6793, 9956, 11905, 6757, 11762, 11905, 6778, 11905, 6779, 6793, 9956, 11905, 6779, 11762, 11905, 8780, 11905, 8781, 6793, 9956, 11905, 8781, 11762, 11905, 10900, 11905, 10901, 6793, 9956, 11905, 10901, 11762, 11905, 11978, 11905, 11979, 6793, 9956, 11905, 11979, 11762, 11905, 13450, 11905, 13451, 6793, 9956, 11905, 13451, 11762, 11905, 13736, 11905, 13737, 6793, 9956, 11905, 13737, 11762, 11913, 8320, 11915, 6718, 11915, 15672, 11930, 11935, 9881, 9854, 11964, 11968, 11969, 12215, 17602, 11969, 12215, 22832, 11969, 12215, 22968, 11969, 14800, 11979, 15609, 17642, 11979, 17045, 11571, 9950, 11979, 17045, 18461, 9950, 11979, 17045, 20885, 11571, 9950, 11979, 18453, 18397, 11571, 18072, 11979, 23301, 19547, 17642, 11981, 15672, 11987, 18319, 20691, 15830, 11987, 18319, 20691, 15832, 11987, 18319, 20691, 15834, 11987, 18319, 20691, 15836, 11987, 18319, 20691, 18822, 11989, 3042, 11989, 3043, 10641, 7817, 11477, 11392, 11989, 3043, 10641, 13341, 11477, 11392, 11989, 3043, 10641, 13563, 14487, 11392, 11989, 3043, 10641, 16946, 11989, 8852, 11989, 8853, 2638, 11989, 8853, 9206, 11989, 9206, 11989, 13176, 11989, 17866, 11993, 15672, 12005, 635, 123, 19964, 12005, 635, 505, 18486, 12005, 635, 505, 18684, 12005, 635, 505, 19408, 12005, 635, 505, 21096, 12005, 843, 18431, 634, 12009, 635, 3245, 7816, 12009, 635, 3245, 13340, 12029, 17780, 12065, 15672, 12074, 12077, 14847, 13621, 843, 5730, 12087, 13239, 12682, 12087, 15645, 16534, 12087, 17087, 8460, 12087, 17087, 8461, 10641, 6718, 12087, 17087, 8461, 15672, 12098, 12111, 10641, 81, 46, 12111, 10641, 13760, 12111, 10641, 17030, 12115, 15558, 12122, 12200, 12205, 15672, 12209, 15672, 12213, 485, 8438, 12215, 10641, 19434, 12233, 14262, 12237, 537, 15672, 12237, 849, 15706, 12237, 1871, 15672, 12237, 2611, 7123, 9854, 12237, 2611, 7123, 9855, 18891, 6776, 12237, 2611, 17087, 9854, 12237, 2681, 15672, 12237, 2915, 10641, 15643, 15672, 12237, 2915, 15672, 12237, 3357, 13133, 9854, 12237, 3357, 15735, 9854, 12237, 5817, 15672, 12237, 6757, 13133, 9854, 12237, 6779, 13133, 9854, 12237, 9155, 9854, 12237, 9176, 12237, 10773, 9854, 12237, 10901, 9854, 12237, 11864, 12237, 11865, 843, 9176, 12237, 11865, 843, 13974, 12237, 11865, 843, 20854, 12237, 12435, 15672, 12237, 12575, 9854, 12237, 12589, 16899, 9854, 12237, 13268, 12237, 13269, 843, 9176, 12237, 13269, 843, 13974, 12237, 13269, 843, 20854, 12237, 13563, 14623, 15043, 13531, 15672, 12237, 13563, 14999, 440, 12237, 13563, 14999, 472, 12237, 13563, 14999, 536, 12237, 13563, 14999, 724, 12237, 13563, 14999, 1048, 12237, 13563, 14999, 1326, 12237, 13563, 14999, 1327, 10641, 9176, 12237, 13563, 14999, 1327, 10641, 9177, 843, 22960, 12237, 13563, 14999, 1327, 10641, 11864, 12237, 13563, 14999, 1327, 10641, 11865, 843, 9176, 12237, 13563, 14999, 1327, 10641, 11865, 843, 9177, 843, 22960, 12237, 13563, 14999, 1327, 10641, 11865, 843, 13974, 12237, 13563, 14999, 1327, 10641, 11865, 843, 13975, 843, 22960, 12237, 13563, 14999, 1327, 10641, 11865, 843, 20854, 12237, 13563, 14999, 1327, 10641, 11865, 843, 20855, 843, 22960, 12237, 13563, 14999, 1327, 10641, 11865, 843, 22960, 12237, 13563, 14999, 1327, 10641, 13268, 12237, 13563, 14999, 1327, 10641, 13269, 843, 9176, 12237, 13563, 14999, 1327, 10641, 13269, 843, 9177, 843, 22960, 12237, 13563, 14999, 1327, 10641, 13269, 843, 13974, 12237, 13563, 14999, 1327, 10641, 13269, 843, 13975, 843, 22960, 12237, 13563, 14999, 1327, 10641, 13269, 843, 20854, 12237, 13563, 14999, 1327, 10641, 13269, 843, 20855, 843, 22960, 12237, 13563, 14999, 1327, 10641, 13269, 843, 22960, 12237, 13563, 14999, 1327, 10641, 13792, 12237, 13563, 14999, 1327, 10641, 13974, 12237, 13563, 14999, 1327, 10641, 13975, 843, 22960, 12237, 13563, 14999, 1327, 10641, 20854, 12237, 13563, 14999, 1327, 10641, 20855, 843, 22960, 12237, 13563, 14999, 1327, 10641, 22960, 12237, 13563, 14999, 2680, 12237, 13563, 14999, 2722, 12237, 13563, 14999, 2914, 12237, 13563, 14999, 2915, 10641, 11864, 12237, 13563, 14999, 2915, 10641, 13268, 12237, 13563, 14999, 3020, 12237, 13563, 14999, 3054, 12237, 13563, 14999, 3216, 12237, 13563, 14999, 5816, 12237, 13563, 14999, 7154, 12237, 13563, 14999, 7438, 12237, 13563, 14999, 7439, 10641, 9176, 12237, 13563, 14999, 7439, 10641, 11864, 12237, 13563, 14999, 7439, 10641, 11865, 843, 9176, 12237, 13563, 14999, 7439, 10641, 11865, 843, 13974, 12237, 13563, 14999, 7439, 10641, 11865, 843, 20854, 12237, 13563, 14999, 7439, 10641, 13268, 12237, 13563, 14999, 7439, 10641, 13269, 843, 9176, 12237, 13563, 14999, 7439, 10641, 13269, 843, 13974, 12237, 13563, 14999, 7439, 10641, 13269, 843, 20854, 12237, 13563, 14999, 7439, 10641, 13792, 12237, 13563, 14999, 7439, 10641, 13974, 12237, 13563, 14999, 7439, 10641, 15050, 12237, 13563, 14999, 7439, 10641, 15876, 12237, 13563, 14999, 7439, 10641, 19062, 12237, 13563, 14999, 7439, 10641, 19063, 843, 9176, 12237, 13563, 14999, 7439, 10641, 19063, 843, 13792, 12237, 13563, 14999, 7439, 10641, 19063, 843, 13974, 12237, 13563, 14999, 7439, 10641, 19063, 843, 20854, 12237, 13563, 14999, 7439, 10641, 20854, 12237, 13563, 14999, 10902, 12237, 13563, 14999, 11436, 12237, 13563, 14999, 11437, 10641, 9176, 12237, 13563, 14999, 11437, 10641, 9177, 843, 22960, 12237, 13563, 14999, 11437, 10641, 11864, 12237, 13563, 14999, 11437, 10641, 11865, 843, 9176, 12237, 13563, 14999, 11437, 10641, 11865, 843, 9177, 843, 22960, 12237, 13563, 14999, 11437, 10641, 11865, 843, 13974, 12237, 13563, 14999, 11437, 10641, 11865, 843, 13975, 843, 22960, 12237, 13563, 14999, 11437, 10641, 11865, 843, 20854, 12237, 13563, 14999, 11437, 10641, 11865, 843, 20855, 843, 22960, 12237, 13563, 14999, 11437, 10641, 11865, 843, 22960, 12237, 13563, 14999, 11437, 10641, 13268, 12237, 13563, 14999, 11437, 10641, 13269, 843, 9176, 12237, 13563, 14999, 11437, 10641, 13269, 843, 9177, 843, 22960, 12237, 13563, 14999, 11437, 10641, 13269, 843, 13974, 12237, 13563, 14999, 11437, 10641, 13269, 843, 13975, 843, 22960, 12237, 13563, 14999, 11437, 10641, 13269, 843, 20854, 12237, 13563, 14999, 11437, 10641, 13269, 843, 20855, 843, 22960, 12237, 13563, 14999, 11437, 10641, 13269, 843, 22960, 12237, 13563, 14999, 11437, 10641, 13792, 12237, 13563, 14999, 11437, 10641, 13974, 12237, 13563, 14999, 11437, 10641, 13975, 843, 22960, 12237, 13563, 14999, 11437, 10641, 15050, 12237, 13563, 14999, 11437, 10641, 15876, 12237, 13563, 14999, 11437, 10641, 20854, 12237, 13563, 14999, 11437, 10641, 20855, 843, 22960, 12237, 13563, 14999, 11437, 10641, 22960, 12237, 13563, 14999, 11888, 12237, 13563, 14999, 12085, 13530, 12237, 13563, 14999, 12156, 12237, 13563, 14999, 12434, 12237, 13563, 14999, 12494, 12237, 13563, 14999, 12528, 12237, 13563, 14999, 13144, 12237, 13563, 14999, 13145, 10641, 9176, 12237, 13563, 14999, 13145, 10641, 9177, 843, 22960, 12237, 13563, 14999, 13145, 10641, 11864, 12237, 13563, 14999, 13145, 10641, 11865, 843, 9176, 12237, 13563, 14999, 13145, 10641, 11865, 843, 9177, 843, 22960, 12237, 13563, 14999, 13145, 10641, 11865, 843, 13974, 12237, 13563, 14999, 13145, 10641, 11865, 843, 13975, 843, 22960, 12237, 13563, 14999, 13145, 10641, 11865, 843, 20854, 12237, 13563, 14999, 13145, 10641, 11865, 843, 20855, 843, 22960, 12237, 13563, 14999, 13145, 10641, 11865, 843, 22960, 12237, 13563, 14999, 13145, 10641, 13268, 12237, 13563, 14999, 13145, 10641, 13269, 843, 9176, 12237, 13563, 14999, 13145, 10641, 13269, 843, 9177, 843, 22960, 12237, 13563, 14999, 13145, 10641, 13269, 843, 13974, 12237, 13563, 14999, 13145, 10641, 13269, 843, 13975, 843, 22960, 12237, 13563, 14999, 13145, 10641, 13269, 843, 20854, 12237, 13563, 14999, 13145, 10641, 13269, 843, 20855, 843, 22960, 12237, 13563, 14999, 13145, 10641, 13269, 843, 22960, 12237, 13563, 14999, 13145, 10641, 13792, 12237, 13563, 14999, 13145, 10641, 13974, 12237, 13563, 14999, 13145, 10641, 13975, 843, 22960, 12237, 13563, 14999, 13145, 10641, 20854, 12237, 13563, 14999, 13145, 10641, 20855, 843, 22960, 12237, 13563, 14999, 13145, 10641, 22960, 12237, 13563, 14999, 13420, 12237, 13563, 14999, 13530, 12237, 13563, 14999, 13718, 12237, 13563, 14999, 15628, 12237, 13563, 14999, 16011, 12494, 12237, 13563, 14999, 16011, 13420, 12237, 13563, 14999, 16252, 12237, 13563, 14999, 16376, 12237, 13563, 14999, 16377, 10641, 9176, 12237, 13563, 14999, 16377, 10641, 11864, 12237, 13563, 14999, 16377, 10641, 11865, 843, 9176, 12237, 13563, 14999, 16377, 10641, 11865, 843, 13974, 12237, 13563, 14999, 16377, 10641, 13268, 12237, 13563, 14999, 16377, 10641, 13269, 843, 9176, 12237, 13563, 14999, 16377, 10641, 13269, 843, 13974, 12237, 13563, 14999, 16377, 10641, 13792, 12237, 13563, 14999, 16377, 10641, 13974, 12237, 13563, 14999, 16926, 12237, 13563, 14999, 16927, 10641, 9176, 12237, 13563, 14999, 16927, 10641, 11864, 12237, 13563, 14999, 16927, 10641, 11865, 843, 9176, 12237, 13563, 14999, 16927, 10641, 11865, 843, 13974, 12237, 13563, 14999, 16927, 10641, 13268, 12237, 13563, 14999, 16927, 10641, 13269, 843, 9176, 12237, 13563, 14999, 16927, 10641, 13269, 843, 13974, 12237, 13563, 14999, 16927, 10641, 13792, 12237, 13563, 14999, 16927, 10641, 13974, 12237, 13563, 14999, 17460, 12237, 13563, 14999, 17461, 10641, 9176, 12237, 13563, 14999, 17461, 10641, 11864, 12237, 13563, 14999, 17461, 10641, 11865, 843, 9176, 12237, 13563, 14999, 17461, 10641, 11865, 843, 13974, 12237, 13563, 14999, 17461, 10641, 11865, 843, 20854, 12237, 13563, 14999, 17461, 10641, 13268, 12237, 13563, 14999, 17461, 10641, 13269, 843, 9176, 12237, 13563, 14999, 17461, 10641, 13269, 843, 13974, 12237, 13563, 14999, 17461, 10641, 13269, 843, 20854, 12237, 13563, 14999, 17461, 10641, 13792, 12237, 13563, 14999, 17461, 10641, 13974, 12237, 13563, 14999, 17461, 10641, 15050, 12237, 13563, 14999, 17461, 10641, 15876, 12237, 13563, 14999, 17461, 10641, 19062, 12237, 13563, 14999, 17461, 10641, 19063, 843, 9176, 12237, 13563, 14999, 17461, 10641, 19063, 843, 13792, 12237, 13563, 14999, 17461, 10641, 19063, 843, 13974, 12237, 13563, 14999, 17461, 10641, 19063, 843, 20854, 12237, 13563, 14999, 17461, 10641, 20854, 12237, 13563, 14999, 20299, 16252, 12237, 13563, 18543, 14623, 15043, 13531, 15672, 12237, 13563, 18543, 15043, 13531, 15672, 12237, 13719, 15672, 12237, 13737, 13133, 9854, 12237, 13737, 18509, 9854, 12237, 13792, 12237, 13974, 12237, 14001, 18371, 18698, 12237, 14001, 18371, 18700, 12237, 14001, 18371, 18702, 12237, 14001, 18371, 18704, 12237, 14001, 18371, 18706, 12237, 14001, 18371, 18708, 12237, 14001, 18371, 18710, 12237, 14001, 18371, 18712, 12237, 14001, 18371, 18714, 12237, 14001, 18371, 19684, 12237, 14001, 18371, 19686, 12237, 14001, 18371, 19688, 12237, 14001, 18371, 19690, 12237, 14001, 18371, 19692, 12237, 14001, 18371, 19694, 12237, 14001, 18371, 19696, 12237, 14001, 18371, 19698, 12237, 14001, 18371, 19700, 12237, 14001, 18371, 19702, 12237, 14001, 18371, 19704, 12237, 14001, 18371, 19706, 12237, 14001, 18371, 19708, 12237, 14001, 18371, 19710, 12237, 14001, 18371, 19712, 12237, 14001, 18371, 19748, 12237, 14001, 18371, 19750, 12237, 14001, 18371, 19752, 12237, 14001, 18371, 19754, 12237, 14001, 18371, 19756, 12237, 14309, 9854, 12237, 14317, 9854, 12237, 14795, 9854, 12237, 14999, 3734, 12237, 14999, 12494, 12237, 14999, 13420, 12237, 14999, 13563, 16111, 536, 12237, 14999, 13563, 16111, 2722, 12237, 14999, 13563, 16111, 2914, 12237, 14999, 13563, 16111, 12156, 12237, 14999, 13563, 16111, 12528, 12237, 14999, 13563, 16111, 13144, 12237, 14999, 15628, 12237, 14999, 16011, 12494, 12237, 14999, 16252, 12237, 15043, 13531, 15672, 12237, 15043, 16377, 15672, 12237, 15277, 9854, 12237, 15673, 3217, 2914, 12237, 15685, 9854, 12237, 15915, 9854, 12237, 16111, 1871, 15672, 12237, 16111, 13719, 15672, 12237, 16111, 14623, 15043, 13531, 15672, 12237, 16111, 14999, 440, 12237, 16111, 14999, 472, 12237, 16111, 14999, 536, 12237, 16111, 14999, 724, 12237, 16111, 14999, 1048, 12237, 16111, 14999, 1326, 12237, 16111, 14999, 1327, 10641, 9176, 12237, 16111, 14999, 1327, 10641, 11864, 12237, 16111, 14999, 1327, 10641, 11865, 843, 9176, 12237, 16111, 14999, 1327, 10641, 11865, 843, 9177, 843, 23114, 12237, 16111, 14999, 1327, 10641, 11865, 843, 13974, 12237, 16111, 14999, 1327, 10641, 11865, 843, 13975, 843, 23114, 12237, 16111, 14999, 1327, 10641, 11865, 843, 20854, 12237, 16111, 14999, 1327, 10641, 11865, 843, 20855, 843, 23114, 12237, 16111, 14999, 1327, 10641, 11865, 843, 23114, 12237, 16111, 14999, 1327, 10641, 13268, 12237, 16111, 14999, 1327, 10641, 13269, 843, 9176, 12237, 16111, 14999, 1327, 10641, 13269, 843, 9177, 843, 23114, 12237, 16111, 14999, 1327, 10641, 13269, 843, 13974, 12237, 16111, 14999, 1327, 10641, 13269, 843, 13975, 843, 23114, 12237, 16111, 14999, 1327, 10641, 13269, 843, 20854, 12237, 16111, 14999, 1327, 10641, 13269, 843, 20855, 843, 23114, 12237, 16111, 14999, 1327, 10641, 13269, 843, 23114, 12237, 16111, 14999, 1327, 10641, 13792, 12237, 16111, 14999, 1327, 10641, 13974, 12237, 16111, 14999, 1327, 10641, 23114, 12237, 16111, 14999, 2680, 12237, 16111, 14999, 2722, 12237, 16111, 14999, 2914, 12237, 16111, 14999, 2915, 10641, 11864, 12237, 16111, 14999, 3020, 12237, 16111, 14999, 3054, 12237, 16111, 14999, 3216, 12237, 16111, 14999, 3734, 12237, 16111, 14999, 5816, 12237, 16111, 14999, 7154, 12237, 16111, 14999, 7438, 12237, 16111, 14999, 7439, 10641, 9176, 12237, 16111, 14999, 7439, 10641, 11864, 12237, 16111, 14999, 7439, 10641, 11865, 843, 9176, 12237, 16111, 14999, 7439, 10641, 11865, 843, 13974, 12237, 16111, 14999, 7439, 10641, 11865, 843, 20854, 12237, 16111, 14999, 7439, 10641, 13268, 12237, 16111, 14999, 7439, 10641, 13269, 843, 9176, 12237, 16111, 14999, 7439, 10641, 13269, 843, 13974, 12237, 16111, 14999, 7439, 10641, 13269, 843, 20854, 12237, 16111, 14999, 7439, 10641, 13792, 12237, 16111, 14999, 7439, 10641, 13974, 12237, 16111, 14999, 7439, 10641, 15050, 12237, 16111, 14999, 7439, 10641, 15876, 12237, 16111, 14999, 7439, 10641, 19062, 12237, 16111, 14999, 10902, 12237, 16111, 14999, 11436, 12237, 16111, 14999, 11437, 10641, 9176, 12237, 16111, 14999, 11437, 10641, 11864, 12237, 16111, 14999, 11437, 10641, 11865, 843, 9176, 12237, 16111, 14999, 11437, 10641, 11865, 843, 9177, 843, 23114, 12237, 16111, 14999, 11437, 10641, 11865, 843, 13974, 12237, 16111, 14999, 11437, 10641, 11865, 843, 13975, 843, 23114, 12237, 16111, 14999, 11437, 10641, 11865, 843, 20854, 12237, 16111, 14999, 11437, 10641, 11865, 843, 20855, 843, 23114, 12237, 16111, 14999, 11437, 10641, 11865, 843, 23114, 12237, 16111, 14999, 11437, 10641, 13268, 12237, 16111, 14999, 11437, 10641, 13269, 843, 9176, 12237, 16111, 14999, 11437, 10641, 13269, 843, 9177, 843, 23114, 12237, 16111, 14999, 11437, 10641, 13269, 843, 13974, 12237, 16111, 14999, 11437, 10641, 13269, 843, 13975, 843, 23114, 12237, 16111, 14999, 11437, 10641, 13269, 843, 20854, 12237, 16111, 14999, 11437, 10641, 13269, 843, 20855, 843, 23114, 12237, 16111, 14999, 11437, 10641, 13269, 843, 23114, 12237, 16111, 14999, 11437, 10641, 13792, 12237, 16111, 14999, 11437, 10641, 13974, 12237, 16111, 14999, 11437, 10641, 15050, 12237, 16111, 14999, 11437, 10641, 15876, 12237, 16111, 14999, 11437, 10641, 23114, 12237, 16111, 14999, 11888, 12237, 16111, 14999, 12156, 12237, 16111, 14999, 12434, 12237, 16111, 14999, 12528, 12237, 16111, 14999, 13144, 12237, 16111, 14999, 13145, 10641, 9176, 12237, 16111, 14999, 13145, 10641, 11864, 12237, 16111, 14999, 13145, 10641, 11865, 843, 9176, 12237, 16111, 14999, 13145, 10641, 11865, 843, 9177, 843, 23114, 12237, 16111, 14999, 13145, 10641, 11865, 843, 13974, 12237, 16111, 14999, 13145, 10641, 11865, 843, 13975, 843, 23114, 12237, 16111, 14999, 13145, 10641, 11865, 843, 20854, 12237, 16111, 14999, 13145, 10641, 11865, 843, 20855, 843, 23114, 12237, 16111, 14999, 13145, 10641, 11865, 843, 23114, 12237, 16111, 14999, 13145, 10641, 13268, 12237, 16111, 14999, 13145, 10641, 13269, 843, 9176, 12237, 16111, 14999, 13145, 10641, 13269, 843, 9177, 843, 23114, 12237, 16111, 14999, 13145, 10641, 13269, 843, 13974, 12237, 16111, 14999, 13145, 10641, 13269, 843, 13975, 843, 23114, 12237, 16111, 14999, 13145, 10641, 13269, 843, 20854, 12237, 16111, 14999, 13145, 10641, 13269, 843, 20855, 843, 23114, 12237, 16111, 14999, 13145, 10641, 13269, 843, 23114, 12237, 16111, 14999, 13145, 10641, 13792, 12237, 16111, 14999, 13145, 10641, 13974, 12237, 16111, 14999, 13145, 10641, 23114, 12237, 16111, 14999, 13530, 12237, 16111, 14999, 13718, 12237, 16111, 14999, 16011, 13420, 12237, 16111, 14999, 16376, 12237, 16111, 14999, 16377, 10641, 9176, 12237, 16111, 14999, 16377, 10641, 11864, 12237, 16111, 14999, 16377, 10641, 11865, 843, 9176, 12237, 16111, 14999, 16377, 10641, 11865, 843, 13974, 12237, 16111, 14999, 16377, 10641, 13268, 12237, 16111, 14999, 16377, 10641, 13269, 843, 9176, 12237, 16111, 14999, 16377, 10641, 13269, 843, 13974, 12237, 16111, 14999, 16377, 10641, 13792, 12237, 16111, 14999, 16377, 10641, 13974, 12237, 16111, 14999, 16926, 12237, 16111, 14999, 16927, 10641, 9176, 12237, 16111, 14999, 16927, 10641, 11864, 12237, 16111, 14999, 16927, 10641, 11865, 843, 9176, 12237, 16111, 14999, 16927, 10641, 11865, 843, 13974, 12237, 16111, 14999, 16927, 10641, 13268, 12237, 16111, 14999, 16927, 10641, 13269, 843, 9176, 12237, 16111, 14999, 16927, 10641, 13269, 843, 13974, 12237, 16111, 14999, 16927, 10641, 13792, 12237, 16111, 14999, 16927, 10641, 13974, 12237, 16111, 14999, 17460, 12237, 16111, 14999, 17461, 10641, 9176, 12237, 16111, 14999, 17461, 10641, 11864, 12237, 16111, 14999, 17461, 10641, 11865, 843, 9176, 12237, 16111, 14999, 17461, 10641, 11865, 843, 13974, 12237, 16111, 14999, 17461, 10641, 11865, 843, 20854, 12237, 16111, 14999, 17461, 10641, 13792, 12237, 16111, 14999, 17461, 10641, 13974, 12237, 16111, 14999, 17461, 10641, 15050, 12237, 16111, 14999, 17461, 10641, 15876, 12237, 16111, 14999, 17461, 10641, 19062, 12237, 16111, 14999, 20299, 16252, 12237, 16111, 15043, 13531, 15672, 12237, 16111, 18543, 14623, 15043, 13531, 15672, 12237, 16111, 18543, 15043, 13531, 15672, 12237, 16339, 9854, 12237, 16596, 12237, 16603, 5745, 9854, 12237, 16831, 14990, 12237, 16899, 9854, 12237, 17461, 10641, 7293, 15672, 12237, 17461, 10641, 11395, 843, 7293, 15672, 12237, 17461, 10641, 19059, 843, 7293, 15672, 12237, 18305, 9854, 12237, 18511, 8320, 12237, 18543, 15043, 16377, 15672, 12237, 18603, 9854, 12237, 18809, 5745, 9854, 12237, 19063, 843, 9176, 12237, 19063, 843, 13974, 12237, 19063, 843, 20854, 12237, 19063, 13792, 12237, 19355, 9854, 12237, 19673, 13563, 14999, 1048, 12237, 19673, 13563, 14999, 2680, 12237, 19673, 13563, 14999, 2914, 12237, 19673, 13563, 14999, 5816, 12237, 19673, 13563, 14999, 12156, 12237, 19855, 11491, 2611, 7122, 12237, 19855, 11491, 2611, 16338, 12237, 19855, 11491, 2611, 16503, 17286, 12237, 19855, 11491, 2611, 16503, 17340, 12237, 19855, 11491, 2611, 17086, 12237, 19855, 11491, 2611, 18745, 17286, 12237, 19855, 11491, 2611, 18745, 17340, 12237, 19855, 11491, 3233, 8450, 12237, 19855, 11491, 3233, 17286, 12237, 19855, 11491, 3233, 17340, 12237, 19855, 11491, 3233, 18745, 17286, 12237, 19855, 11491, 6756, 12237, 19855, 11491, 6757, 16502, 12237, 19855, 11491, 6757, 16503, 17286, 12237, 19855, 11491, 6757, 16503, 17340, 12237, 19855, 11491, 6757, 17286, 12237, 19855, 11491, 6757, 17340, 12237, 19855, 11491, 6757, 18744, 12237, 19855, 11491, 6757, 18745, 17340, 12237, 19855, 11491, 12080, 12237, 19855, 11491, 12081, 17286, 12237, 19855, 11491, 12081, 17340, 12237, 19855, 11491, 12081, 18744, 12237, 19855, 11491, 12081, 18745, 17286, 12237, 19855, 15161, 6757, 16502, 12237, 19855, 16237, 6757, 8450, 12237, 19855, 16491, 2611, 18466, 12237, 19855, 17807, 3357, 17990, 12237, 19855, 18657, 12081, 8450, 12237, 19855, 18739, 2610, 12237, 19855, 18739, 2611, 16502, 12237, 19855, 18739, 2611, 18744, 12237, 19855, 18739, 3232, 12237, 19855, 18739, 3356, 12237, 19855, 18739, 6757, 16502, 12237, 19855, 18739, 6757, 18744, 12237, 19855, 18739, 12080, 12237, 19855, 18739, 13737, 16502, 12237, 19855, 18739, 15736, 12237, 19855, 18973, 6757, 16502, 12237, 19855, 19437, 3232, 12237, 19855, 20123, 3356, 12237, 19855, 20123, 3357, 17990, 12237, 19855, 20123, 6757, 16502, 12237, 19855, 20171, 2610, 12237, 19855, 20171, 3232, 12237, 19855, 20171, 12080, 12237, 19855, 20485, 3232, 12237, 19855, 20485, 3233, 18891, 6776, 12237, 19855, 20485, 6756, 12237, 19855, 20485, 6757, 16502, 12237, 19855, 20485, 12080, 12237, 19855, 20485, 12081, 18891, 6776, 12237, 20854, 12237, 21121, 18371, 18698, 12237, 21121, 18371, 18700, 12237, 21121, 18371, 18704, 12237, 21121, 18371, 18706, 12237, 21121, 18371, 18710, 12237, 21121, 18371, 18712, 12237, 21121, 18371, 19686, 12237, 21121, 18371, 19688, 12237, 21121, 18371, 19690, 12237, 21121, 18371, 19692, 12237, 21121, 18371, 19698, 12237, 21121, 18371, 19700, 12237, 21121, 18371, 19702, 12237, 21121, 18371, 19710, 12237, 21121, 18371, 19712, 12237, 21121, 18371, 19714, 12237, 21121, 18371, 19716, 12237, 21121, 18371, 19718, 12237, 21121, 18371, 19720, 12237, 21121, 18371, 19722, 12237, 21121, 18371, 19724, 12237, 21121, 18371, 19726, 12237, 21121, 18371, 19728, 12237, 21121, 18371, 19730, 12237, 21121, 18371, 19732, 12237, 21121, 18371, 19734, 12237, 21121, 18371, 19736, 12237, 21121, 18371, 19738, 12237, 21121, 18371, 19740, 12237, 21121, 18371, 19742, 12237, 21121, 18371, 19744, 12237, 21121, 18371, 19746, 12237, 21121, 18371, 19748, 12237, 21121, 18371, 19750, 12237, 21121, 18371, 19752, 12237, 21121, 18371, 19754, 12237, 21121, 18371, 19756, 12237, 22960, 12237, 23114, 12239, 5860, 12239, 11460, 12239, 12274, 12239, 13410, 12265, 15321, 17097, 2611, 7126, 12275, 10641, 3265, 497, 3245, 7816, 12275, 10641, 11476, 12275, 10641, 15442, 12275, 19960, 12277, 2175, 14625, 11763, 19557, 8321, 18392, 12277, 2175, 15573, 11763, 19557, 8321, 18392, 12277, 3077, 15609, 17642, 12277, 3077, 17045, 11571, 9950, 12277, 6757, 15609, 17642, 12277, 6757, 17045, 11571, 9950, 12277, 6779, 22973, 17642, 12277, 9171, 14455, 11772, 12277, 9173, 10641, 9173, 14874, 12277, 9287, 9854, 12277, 11477, 13457, 14055, 2610, 12277, 11477, 13457, 14055, 2611, 7122, 12277, 11477, 13457, 14055, 2611, 13728, 12277, 11477, 13457, 14055, 3357, 15734, 12277, 11571, 12274, 12277, 11571, 14537, 17463, 843, 20375, 11476, 12277, 11571, 14537, 19215, 843, 20375, 11476, 12277, 11695, 8320, 12277, 11979, 15609, 17642, 12277, 11979, 17045, 11571, 9950, 12277, 11979, 17045, 18461, 9950, 12277, 11979, 17045, 20885, 11571, 9950, 12277, 11979, 23301, 19547, 17642, 12277, 12237, 11772, 12277, 12275, 20685, 8321, 18392, 12277, 12537, 14486, 12277, 12541, 11772, 12277, 12589, 23123, 14049, 20375, 11476, 12277, 12741, 9854, 12277, 12973, 6561, 11476, 12277, 12973, 6561, 18471, 974, 12277, 12973, 6561, 18471, 10551, 7812, 12277, 12973, 10629, 18471, 974, 12277, 12973, 10629, 18471, 10551, 7812, 12277, 13581, 6561, 11476, 12277, 13581, 6561, 18471, 974, 12277, 13581, 6561, 18471, 10551, 7812, 12277, 13581, 10629, 18471, 974, 12277, 13581, 10629, 18471, 10551, 7812, 12277, 13889, 23123, 14049, 20375, 11476, 12277, 14049, 14486, 12277, 14049, 15620, 12277, 14049, 22821, 18774, 12277, 14343, 46, 12277, 14486, 12277, 14487, 10641, 14487, 14874, 12277, 14487, 10641, 15643, 843, 3357, 6431, 11392, 12277, 14555, 23305, 20375, 11476, 12277, 14601, 9854, 12277, 14625, 11763, 19557, 8321, 18392, 12277, 14625, 15811, 11763, 19557, 8321, 18392, 12277, 15501, 18249, 213, 18392, 12277, 15573, 11763, 19557, 8321, 18392, 12277, 15573, 15811, 11763, 19557, 8321, 18392, 12277, 15819, 17045, 11571, 9950, 12277, 15819, 17045, 18461, 9950, 12277, 16139, 19638, 12277, 16153, 17154, 12277, 17154, 12277, 17260, 12277, 17463, 11477, 10641, 12537, 20683, 18906, 12277, 17463, 11477, 10641, 20683, 18906, 12277, 17642, 12277, 17865, 9854, 12277, 18249, 9171, 213, 18392, 12277, 18397, 11571, 9950, 12277, 18847, 896, 12277, 18895, 18392, 12277, 19215, 11477, 10641, 12537, 20683, 18906, 12277, 19215, 11477, 10641, 20683, 18906, 12277, 19407, 11477, 10641, 12537, 20683, 18906, 12277, 19407, 11477, 10641, 20683, 18906, 12277, 20375, 11476, 12277, 20375, 11477, 10641, 12537, 20683, 18906, 12277, 20375, 11477, 10641, 20683, 18906, 12277, 20377, 20753, 18392, 12277, 20685, 8321, 15672, 12277, 20685, 8321, 18392, 12277, 20753, 18392, 12277, 20985, 20375, 11476, 12277, 21201, 20375, 11476, 12277, 21269, 20375, 11476, 12277, 22867, 11447, 16089, 18392, 12277, 22867, 11447, 19557, 8321, 18392, 12277, 23111, 46, 12277, 23121, 11447, 16089, 18392, 12277, 23121, 11447, 19557, 8321, 18392, 12277, 23255, 12973, 6561, 11476, 12277, 23255, 13581, 6561, 11476, 12277, 23255, 20375, 11476, 12277, 23263, 11571, 20375, 11476, 12277, 23301, 17642, 12277, 23301, 18461, 17642, 12277, 23305, 20375, 11476, 12277, 23439, 20375, 11476, 12320, 12325, 2710, 12330, 12331, 6718, 12331, 15420, 12332, 12334, 12335, 10641, 14754, 12335, 17700, 12335, 18956, 12383, 484, 12383, 485, 505, 21281, 12005, 634, 12387, 10226, 12395, 15673, 1397, 12541, 13563, 16714, 12395, 15673, 1397, 12541, 16111, 16714, 12395, 15673, 1397, 12541, 16714, 12395, 15673, 1397, 16896, 12395, 15673, 1397, 17322, 12402, 12426, 12445, 393, 9855, 1104, 12445, 393, 9855, 9830, 12445, 393, 10219, 11640, 12445, 393, 10219, 11641, 15350, 12445, 393, 10219, 15350, 12445, 393, 11905, 2610, 12445, 393, 11905, 3076, 12445, 393, 11905, 3356, 12445, 393, 11905, 6756, 12445, 393, 11905, 6778, 12445, 393, 11905, 8780, 12445, 393, 11905, 10900, 12445, 393, 11905, 11978, 12445, 393, 11905, 13450, 12445, 393, 11905, 13736, 12445, 393, 14003, 8, 12445, 393, 14003, 28, 12445, 393, 14003, 40, 12445, 393, 14003, 184, 12445, 393, 14003, 656, 12445, 393, 14999, 0, 12445, 393, 14999, 16, 12445, 393, 14999, 106, 12445, 393, 14999, 124, 12445, 393, 14999, 148, 12445, 393, 14999, 244, 12445, 393, 14999, 266, 12445, 393, 14999, 350, 12445, 393, 14999, 384, 12445, 393, 14999, 416, 12445, 393, 14999, 448, 12445, 393, 14999, 482, 12445, 393, 14999, 498, 12445, 393, 14999, 522, 12445, 393, 14999, 572, 12445, 393, 14999, 588, 12445, 393, 14999, 622, 12445, 393, 14999, 680, 12445, 393, 14999, 694, 12445, 393, 14999, 734, 12445, 393, 14999, 752, 12445, 393, 14999, 1692, 12445, 393, 14999, 1914, 12445, 393, 14999, 2444, 12445, 393, 14999, 2556, 12445, 393, 14999, 2676, 12445, 393, 14999, 3048, 12445, 393, 14999, 3242, 12473, 9855, 2111, 3290, 12473, 9855, 7638, 12473, 9855, 11412, 12473, 9855, 11754, 12473, 9855, 13350, 12473, 9855, 14350, 12473, 9855, 14374, 12473, 9855, 14427, 2691, 7730, 12473, 9855, 15329, 8466, 12473, 9855, 15479, 15486, 12473, 9855, 15870, 12473, 9855, 16550, 12473, 9855, 16590, 12473, 9855, 16878, 12473, 9855, 17106, 12473, 9855, 17400, 12473, 9855, 17650, 12473, 9855, 19904, 12473, 9855, 19908, 12473, 9855, 20810, 12473, 9855, 20954, 12473, 9855, 21284, 12473, 9855, 22962, 12473, 11905, 2610, 12473, 11905, 3076, 12473, 11905, 3356, 12473, 11905, 6756, 12473, 11905, 6778, 12473, 11905, 8780, 12473, 11905, 10900, 12473, 11905, 11978, 12473, 11905, 13450, 12473, 11905, 13736, 12473, 14003, 9855, 8, 12473, 14003, 9855, 16, 12473, 14003, 9855, 40, 12473, 14003, 9855, 48, 12473, 14003, 9855, 58, 12473, 14003, 9855, 66, 12473, 14003, 9855, 72, 12473, 14003, 9855, 94, 12473, 14003, 9855, 300, 12473, 14003, 9855, 308, 12473, 14003, 9855, 482, 12473, 14003, 9855, 498, 12473, 14003, 9855, 648, 12473, 14003, 9855, 676, 12473, 14003, 9855, 734, 12473, 14003, 9855, 750, 12473, 14003, 18175, 58, 12473, 14003, 18175, 86, 12473, 14999, 106, 12473, 14999, 124, 12473, 14999, 140, 12473, 14999, 148, 12473, 14999, 166, 12473, 14999, 266, 12473, 14999, 350, 12473, 14999, 366, 12473, 14999, 384, 12473, 14999, 402, 12473, 14999, 436, 12473, 14999, 468, 12473, 14999, 540, 12473, 14999, 556, 12473, 14999, 580, 12473, 14999, 588, 12473, 14999, 622, 12473, 14999, 634, 12473, 14999, 686, 12473, 14999, 742, 12473, 14999, 1044, 12473, 14999, 1050, 12473, 14999, 1914, 12473, 14999, 1920, 12473, 14999, 2452, 12473, 14999, 2498, 12473, 14999, 2564, 12473, 14999, 2676, 12473, 14999, 2682, 12473, 14999, 3048, 12473, 14999, 3120, 12473, 14999, 3242, 12473, 14999, 3248, 12473, 14999, 10264, 12473, 14999, 10270, 12473, 15673, 923, 2940, 12473, 15673, 923, 7682, 12473, 15673, 1133, 2940, 12473, 15673, 1133, 7682, 12473, 15673, 2111, 11489, 922, 12473, 15673, 2111, 11489, 2690, 12473, 15673, 2111, 11489, 3092, 12473, 15673, 2111, 11489, 5880, 12473, 15673, 2111, 11489, 8484, 12473, 15673, 2111, 11489, 9298, 12473, 15673, 2111, 11489, 18480, 12473, 15673, 2111, 11489, 18482, 12473, 15673, 2111, 11489, 19536, 12473, 15673, 2111, 11489, 19538, 12473, 15673, 2691, 2940, 12473, 15673, 2691, 7682, 12473, 15673, 5881, 2940, 12473, 15673, 5881, 7682, 12473, 15673, 8485, 2940, 12473, 15673, 8485, 7682, 12473, 15673, 9299, 2940, 12473, 15673, 9299, 7682, 12473, 15673, 16225, 2940, 12473, 15673, 16225, 7682, 12473, 15673, 16227, 2940, 12473, 15673, 16227, 7682, 12473, 15673, 17813, 2940, 12473, 15673, 17813, 7682, 12473, 15673, 17815, 2940, 12473, 15673, 17815, 7682, 12473, 15673, 17817, 2940, 12473, 15673, 17817, 7682, 12473, 15673, 18481, 2940, 12473, 15673, 18481, 7682, 12473, 15673, 18483, 2940, 12473, 15673, 18483, 7682, 12473, 15673, 19537, 2940, 12473, 15673, 19537, 7682, 12473, 15673, 19539, 2940, 12473, 15673, 19539, 7682, 12473, 15673, 19810, 12473, 15673, 20310, 12473, 17803, 15673, 9500, 12473, 20741, 14003, 412, 12473, 20741, 14003, 558, 12473, 20741, 14003, 560, 12473, 20741, 14003, 568, 12473, 20741, 14003, 586, 12473, 20741, 14003, 2230, 12473, 20741, 14003, 2762, 12473, 20741, 14003, 2766, 12473, 20741, 14003, 2768, 12473, 20741, 14003, 2772, 12473, 20741, 14003, 2794, 12473, 20741, 14003, 2807, 10313, 2610, 12473, 20741, 14003, 2807, 10313, 3356, 12473, 20741, 14003, 2822, 12473, 20741, 14003, 2832, 12473, 20741, 14003, 3004, 12473, 20741, 14003, 9384, 12488, 12516, 12537, 671, 10086, 12537, 2611, 1217, 9175, 3357, 6431, 20876, 12537, 2611, 9503, 9175, 3357, 13343, 20876, 12537, 2897, 14486, 12537, 3357, 6431, 9175, 2611, 1217, 20876, 12537, 3357, 13343, 9175, 2611, 9503, 20876, 12537, 5845, 14486, 12537, 5845, 16248, 12537, 6435, 10086, 12537, 7817, 18775, 18386, 12537, 14486, 12537, 15263, 16248, 12537, 15781, 18847, 897, 18386, 12541, 11772, 12541, 13563, 14999, 0, 12541, 13563, 14999, 1, 10641, 1217, 11392, 12541, 13563, 14999, 1, 10641, 1217, 11393, 843, 15050, 12541, 13563, 14999, 1, 10641, 1217, 11552, 12541, 13563, 14999, 1, 10641, 7293, 11392, 12541, 13563, 14999, 1, 10641, 9503, 11392, 12541, 13563, 14999, 1, 10641, 9503, 11393, 843, 11394, 12541, 13563, 14999, 1, 10641, 9503, 11552, 12541, 13563, 14999, 1, 10641, 11394, 12541, 13563, 14999, 1, 10641, 11596, 12541, 13563, 14999, 1, 10641, 11597, 843, 1217, 11552, 12541, 13563, 14999, 1, 10641, 11597, 843, 7293, 11392, 12541, 13563, 14999, 1, 10641, 11597, 843, 11394, 12541, 13563, 14999, 1, 10641, 11597, 843, 12232, 12541, 13563, 14999, 1, 10641, 11597, 843, 13758, 12541, 13563, 14999, 1, 10641, 11656, 12541, 13563, 14999, 1, 10641, 12232, 12541, 13563, 14999, 1, 10641, 13341, 7123, 9502, 12541, 13563, 14999, 1, 10641, 13758, 12541, 13563, 14999, 1, 10641, 14625, 12232, 12541, 13563, 14999, 1, 10641, 15050, 12541, 13563, 14999, 1, 10641, 15246, 12541, 13563, 14999, 1, 10641, 15642, 12541, 13563, 14999, 1, 10641, 18183, 11596, 12541, 13563, 14999, 1, 10641, 19058, 12541, 13563, 14999, 1, 10641, 19059, 843, 15050, 12541, 13563, 14999, 1, 10641, 19587, 7292, 12541, 13563, 14999, 1, 10641, 19920, 12541, 13563, 14999, 1, 10641, 19921, 843, 1217, 11552, 12541, 13563, 14999, 1, 10641, 19921, 843, 7293, 11392, 12541, 13563, 14999, 1, 10641, 19921, 843, 11394, 12541, 13563, 14999, 1, 10641, 19921, 843, 12232, 12541, 13563, 14999, 1, 10641, 19921, 843, 13758, 12541, 13563, 14999, 1, 23116, 12541, 13563, 14999, 2, 12541, 13563, 14999, 3, 10641, 1217, 11392, 12541, 13563, 14999, 3, 10641, 1217, 11552, 12541, 13563, 14999, 3, 10641, 7292, 12541, 13563, 14999, 3, 10641, 7855, 11552, 12541, 13563, 14999, 3, 10641, 15119, 13758, 12541, 13563, 14999, 3, 10641, 15642, 12541, 13563, 14999, 3, 10641, 15778, 12541, 13563, 14999, 3, 10641, 16959, 7292, 12541, 13563, 14999, 3, 10641, 18074, 12541, 13563, 14999, 4, 12541, 13563, 14999, 5, 10641, 896, 12541, 13563, 14999, 5, 10641, 1217, 11392, 12541, 13563, 14999, 5, 10641, 6118, 12541, 13563, 14999, 5, 10641, 7292, 12541, 13563, 14999, 5, 10641, 11394, 12541, 13563, 14999, 5, 10641, 11656, 12541, 13563, 14999, 5, 10641, 15642, 12541, 13563, 14999, 5, 10641, 16120, 12541, 13563, 14999, 5, 10641, 16121, 843, 11394, 12541, 13563, 14999, 5, 10641, 16959, 7292, 12541, 13563, 14999, 5, 10641, 19920, 12541, 13563, 14999, 6, 12541, 13563, 14999, 7, 10641, 1217, 11392, 12541, 13563, 14999, 7, 10641, 1217, 11552, 12541, 13563, 14999, 7, 10641, 6118, 12541, 13563, 14999, 7, 10641, 7292, 12541, 13563, 14999, 7, 10641, 7293, 843, 10092, 12541, 13563, 14999, 7, 10641, 7855, 11552, 12541, 13563, 14999, 7, 10641, 10092, 12541, 13563, 14999, 7, 10641, 11656, 12541, 13563, 14999, 7, 10641, 15119, 13758, 12541, 13563, 14999, 7, 10641, 15642, 12541, 13563, 14999, 7, 10641, 15778, 12541, 13563, 14999, 7, 10641, 16120, 12541, 13563, 14999, 7, 10641, 16959, 7292, 12541, 13563, 14999, 7, 10641, 19921, 11552, 12541, 13563, 14999, 8, 12541, 13563, 14999, 9, 10641, 1217, 11392, 12541, 13563, 14999, 9, 10641, 1217, 11552, 12541, 13563, 14999, 9, 10641, 7293, 11392, 12541, 13563, 14999, 9, 10641, 11394, 12541, 13563, 14999, 9, 10641, 11596, 12541, 13563, 14999, 9, 10641, 11656, 12541, 13563, 14999, 9, 10641, 12232, 12541, 13563, 14999, 9, 10641, 12974, 12541, 13563, 14999, 9, 10641, 13758, 12541, 13563, 14999, 9, 10641, 13759, 11552, 12541, 13563, 14999, 9, 10641, 14625, 12232, 12541, 13563, 14999, 9, 10641, 15050, 12541, 13563, 14999, 9, 10641, 15051, 843, 11394, 12541, 13563, 14999, 9, 10641, 15051, 843, 12232, 12541, 13563, 14999, 9, 10641, 15246, 12541, 13563, 14999, 9, 10641, 15642, 12541, 13563, 14999, 9, 10641, 16120, 12541, 13563, 14999, 9, 10641, 16121, 843, 11596, 12541, 13563, 14999, 9, 10641, 18074, 12541, 13563, 14999, 9, 10641, 18183, 11596, 12541, 13563, 14999, 9, 10641, 19058, 12541, 13563, 14999, 9, 10641, 19587, 7292, 12541, 13563, 14999, 9, 10641, 19920, 12541, 13563, 14999, 9, 10641, 19921, 843, 1217, 11552, 12541, 13563, 14999, 9, 10641, 19921, 843, 7293, 11392, 12541, 13563, 14999, 9, 10641, 19921, 843, 11394, 12541, 13563, 14999, 9, 10641, 19921, 843, 12232, 12541, 13563, 14999, 9, 10641, 19921, 843, 13758, 12541, 13563, 14999, 9, 10641, 19921, 11552, 12541, 13563, 14999, 10, 12541, 13563, 14999, 11, 10641, 1217, 11392, 12541, 13563, 14999, 11, 10641, 7292, 12541, 13563, 14999, 11, 10641, 15119, 13758, 12541, 13563, 14999, 11, 10641, 15642, 12541, 13563, 14999, 11, 10641, 16959, 7292, 12541, 13563, 14999, 12, 12541, 13563, 14999, 13, 10641, 1217, 11392, 12541, 13563, 14999, 13, 10641, 7292, 12541, 13563, 14999, 13, 10641, 11394, 12541, 13563, 14999, 13, 10641, 11596, 12541, 13563, 14999, 13, 10641, 11656, 12541, 13563, 14999, 13, 10641, 15050, 12541, 13563, 14999, 13, 10641, 15642, 12541, 13563, 14999, 13, 10641, 16120, 12541, 13563, 14999, 13, 10641, 16913, 15642, 12541, 13563, 14999, 13, 10641, 16959, 7292, 12541, 13563, 14999, 13, 10641, 19920, 12541, 13563, 14999, 14, 12541, 13563, 14999, 15, 10641, 1217, 11392, 12541, 13563, 14999, 15, 10641, 1217, 11552, 12541, 13563, 14999, 15, 10641, 7292, 12541, 13563, 14999, 15, 10641, 7855, 11552, 12541, 13563, 14999, 15, 10641, 11597, 11552, 12541, 13563, 14999, 15, 10641, 11656, 12541, 13563, 14999, 15, 10641, 15642, 12541, 13563, 14999, 15, 10641, 16120, 12541, 13563, 14999, 15, 10641, 16959, 7292, 12541, 13563, 14999, 15, 10641, 19056, 12541, 13563, 14999, 15, 10641, 19058, 12541, 13563, 14999, 15, 10641, 19920, 12541, 13563, 14999, 16, 12541, 13563, 14999, 17, 10641, 1217, 11552, 12541, 13563, 14999, 17, 10641, 7293, 11392, 12541, 13563, 14999, 17, 10641, 11394, 12541, 13563, 14999, 17, 10641, 11596, 12541, 13563, 14999, 17, 10641, 11656, 12541, 13563, 14999, 17, 10641, 12232, 12541, 13563, 14999, 17, 10641, 13758, 12541, 13563, 14999, 17, 10641, 13759, 11552, 12541, 13563, 14999, 17, 10641, 14625, 12232, 12541, 13563, 14999, 17, 10641, 15050, 12541, 13563, 14999, 17, 10641, 15246, 12541, 13563, 14999, 17, 10641, 15642, 12541, 13563, 14999, 17, 10641, 18183, 11596, 12541, 13563, 14999, 17, 10641, 19058, 12541, 13563, 14999, 17, 10641, 19059, 843, 11394, 12541, 13563, 14999, 17, 10641, 19587, 7292, 12541, 13563, 14999, 17, 10641, 19920, 12541, 13563, 14999, 18, 12541, 13563, 14999, 19, 10641, 11656, 12541, 13563, 14999, 19, 10641, 15642, 12541, 13563, 14999, 19, 10641, 19920, 12541, 13563, 14999, 19, 10641, 21042, 12541, 13563, 14999, 20, 12541, 13563, 14999, 21, 10641, 1217, 11552, 12541, 13563, 14999, 21, 10641, 7292, 12541, 13563, 14999, 21, 10641, 7855, 11552, 12541, 13563, 14999, 21, 10641, 11394, 12541, 13563, 14999, 21, 10641, 11656, 12541, 13563, 14999, 21, 10641, 15642, 12541, 13563, 14999, 21, 10641, 15643, 843, 17839, 15642, 12541, 13563, 14999, 21, 10641, 16120, 12541, 13563, 14999, 21, 10641, 16913, 15642, 12541, 13563, 14999, 21, 10641, 16959, 7292, 12541, 13563, 14999, 21, 10641, 17839, 15642, 12541, 13563, 14999, 21, 10641, 19056, 12541, 13563, 14999, 22, 12541, 13563, 14999, 23, 10641, 896, 12541, 13563, 14999, 23, 10641, 1217, 11552, 12541, 13563, 14999, 23, 10641, 1217, 11553, 843, 15050, 12541, 13563, 14999, 23, 10641, 5810, 12541, 13563, 14999, 23, 10641, 6118, 12541, 13563, 14999, 23, 10641, 7171, 15642, 12541, 13563, 14999, 23, 10641, 7855, 11552, 12541, 13563, 14999, 23, 10641, 11394, 12541, 13563, 14999, 23, 10641, 11656, 12541, 13563, 14999, 23, 10641, 14625, 896, 12541, 13563, 14999, 23, 10641, 14625, 15119, 13758, 12541, 13563, 14999, 23, 10641, 15119, 1216, 12541, 13563, 14999, 23, 10641, 15119, 9502, 12541, 13563, 14999, 23, 10641, 15119, 13758, 12541, 13563, 14999, 23, 10641, 15642, 12541, 13563, 14999, 23, 10641, 16120, 12541, 13563, 14999, 23, 10641, 16959, 7292, 12541, 13563, 14999, 23, 10641, 18183, 7807, 36, 12541, 13563, 14999, 23, 10641, 19587, 7292, 12541, 13563, 14999, 23, 10641, 19587, 7293, 843, 5810, 12541, 13563, 14999, 23, 10641, 19921, 11552, 12541, 13563, 14999, 24, 12541, 13563, 14999, 25, 10641, 1217, 11392, 12541, 13563, 14999, 25, 10641, 1217, 11552, 12541, 13563, 14999, 25, 10641, 7292, 12541, 13563, 14999, 25, 10641, 11394, 12541, 13563, 14999, 25, 10641, 15119, 13758, 12541, 13563, 14999, 25, 10641, 16959, 7292, 12541, 13563, 14999, 25, 10641, 21042, 12541, 13563, 14999, 26, 12541, 13563, 14999, 27, 10641, 1217, 11392, 12541, 13563, 14999, 27, 10641, 1217, 11552, 12541, 13563, 14999, 27, 10641, 6118, 12541, 13563, 14999, 27, 10641, 7817, 7292, 12541, 13563, 14999, 27, 10641, 7855, 11552, 12541, 13563, 14999, 27, 10641, 7883, 13341, 2106, 12541, 13563, 14999, 27, 10641, 11394, 12541, 13563, 14999, 27, 10641, 11656, 12541, 13563, 14999, 27, 10641, 12232, 12541, 13563, 14999, 27, 10641, 13758, 12541, 13563, 14999, 27, 10641, 15119, 13758, 12541, 13563, 14999, 27, 10641, 16120, 12541, 13563, 14999, 27, 10641, 16913, 15642, 12541, 13563, 14999, 27, 10641, 16959, 7292, 12541, 13563, 14999, 27, 10641, 19056, 12541, 13563, 14999, 27, 10641, 19587, 7292, 12541, 13563, 14999, 27, 10641, 19921, 11552, 12541, 13563, 14999, 27, 10641, 21042, 12541, 13563, 14999, 27, 18485, 123, 19880, 12541, 13563, 14999, 28, 12541, 13563, 14999, 29, 10641, 1217, 11392, 12541, 13563, 14999, 29, 10641, 1217, 11393, 843, 15050, 12541, 13563, 14999, 29, 10641, 1217, 11552, 12541, 13563, 14999, 29, 10641, 2175, 9503, 14874, 12541, 13563, 14999, 29, 10641, 7293, 11392, 12541, 13563, 14999, 29, 10641, 7304, 12541, 13563, 14999, 29, 10641, 7305, 843, 1217, 11552, 12541, 13563, 14999, 29, 10641, 7305, 843, 7293, 11392, 12541, 13563, 14999, 29, 10641, 7305, 843, 11394, 12541, 13563, 14999, 29, 10641, 7305, 843, 12232, 12541, 13563, 14999, 29, 10641, 7305, 843, 13758, 12541, 13563, 14999, 29, 10641, 7883, 15643, 16950, 12541, 13563, 14999, 29, 10641, 7888, 12541, 13563, 14999, 29, 10641, 11394, 12541, 13563, 14999, 29, 10641, 11596, 12541, 13563, 14999, 29, 10641, 11656, 12541, 13563, 14999, 29, 10641, 12232, 12541, 13563, 14999, 29, 10641, 13758, 12541, 13563, 14999, 29, 10641, 13759, 843, 11394, 12541, 13563, 14999, 29, 10641, 13759, 843, 15050, 12541, 13563, 14999, 29, 10641, 13759, 843, 19058, 12541, 13563, 14999, 29, 10641, 14625, 11394, 12541, 13563, 14999, 29, 10641, 14625, 12232, 12541, 13563, 14999, 29, 10641, 15050, 12541, 13563, 14999, 29, 10641, 15051, 843, 11394, 12541, 13563, 14999, 29, 10641, 15051, 843, 12232, 12541, 13563, 14999, 29, 10641, 15246, 12541, 13563, 14999, 29, 10641, 15247, 843, 15050, 12541, 13563, 14999, 29, 10641, 15642, 12541, 13563, 14999, 29, 10641, 15643, 843, 11394, 12541, 13563, 14999, 29, 10641, 18183, 11596, 12541, 13563, 14999, 29, 10641, 19058, 12541, 13563, 14999, 29, 10641, 19059, 843, 15050, 12541, 13563, 14999, 29, 10641, 19920, 12541, 13563, 14999, 29, 10641, 19921, 843, 1217, 11552, 12541, 13563, 14999, 29, 10641, 19921, 843, 7293, 11392, 12541, 13563, 14999, 29, 10641, 19921, 843, 11394, 12541, 13563, 14999, 29, 10641, 19921, 843, 12232, 12541, 13563, 14999, 29, 10641, 19921, 843, 13758, 12541, 13563, 14999, 30, 12541, 13563, 14999, 31, 10641, 1217, 11392, 12541, 13563, 14999, 31, 10641, 7292, 12541, 13563, 14999, 31, 10641, 11394, 12541, 13563, 14999, 31, 10641, 15119, 13758, 12541, 13563, 14999, 31, 10641, 15642, 12541, 13563, 14999, 31, 10641, 15643, 17369, 19056, 12541, 13563, 14999, 31, 10641, 16959, 7292, 12541, 13563, 14999, 31, 10641, 18074, 12541, 13563, 14999, 31, 10641, 18637, 10092, 12541, 13563, 14999, 32, 12541, 13563, 14999, 33, 10641, 7292, 12541, 13563, 14999, 33, 10641, 7293, 10092, 12541, 13563, 14999, 33, 10641, 15643, 17369, 19056, 12541, 13563, 14999, 33, 10641, 17839, 15642, 12541, 13563, 14999, 34, 12541, 13563, 14999, 35, 10641, 1217, 11392, 12541, 13563, 14999, 35, 10641, 1217, 11552, 12541, 13563, 14999, 35, 10641, 1217, 11553, 843, 15050, 12541, 13563, 14999, 35, 10641, 7855, 11552, 12541, 13563, 14999, 35, 10641, 7883, 2106, 12541, 13563, 14999, 35, 10641, 10092, 12541, 13563, 14999, 35, 10641, 11394, 12541, 13563, 14999, 35, 10641, 11656, 12541, 13563, 14999, 35, 10641, 14625, 12232, 12541, 13563, 14999, 35, 10641, 15119, 13758, 12541, 13563, 14999, 35, 10641, 15642, 12541, 13563, 14999, 35, 10641, 16120, 12541, 13563, 14999, 35, 10641, 16913, 15642, 12541, 13563, 14999, 35, 10641, 16959, 7292, 12541, 13563, 14999, 35, 10641, 18068, 12541, 13563, 14999, 35, 10641, 18069, 843, 15119, 13758, 12541, 13563, 14999, 35, 10641, 18183, 11596, 12541, 13563, 14999, 35, 10641, 21042, 12541, 13563, 14999, 35, 17140, 12541, 13563, 14999, 35, 17521, 14816, 12541, 13563, 14999, 36, 12541, 13563, 14999, 37, 10641, 1217, 11392, 12541, 13563, 14999, 37, 10641, 1217, 11552, 12541, 13563, 14999, 37, 10641, 1217, 11553, 843, 1217, 11392, 12541, 13563, 14999, 37, 10641, 7292, 12541, 13563, 14999, 37, 10641, 11394, 12541, 13563, 14999, 37, 10641, 11395, 843, 1217, 11392, 12541, 13563, 14999, 37, 10641, 11656, 12541, 13563, 14999, 37, 10641, 11657, 843, 1217, 11392, 12541, 13563, 14999, 37, 10641, 11763, 11552, 12541, 13563, 14999, 37, 10641, 13653, 10092, 12541, 13563, 14999, 37, 10641, 15119, 13758, 12541, 13563, 14999, 37, 10641, 16120, 12541, 13563, 14999, 37, 10641, 16913, 15642, 12541, 13563, 14999, 37, 10641, 16959, 7292, 12541, 13563, 14999, 37, 10641, 19920, 12541, 13563, 14999, 38, 12541, 13563, 14999, 39, 10641, 1217, 11392, 12541, 13563, 14999, 39, 10641, 1217, 11552, 12541, 13563, 14999, 39, 10641, 6118, 12541, 13563, 14999, 39, 10641, 7292, 12541, 13563, 14999, 39, 10641, 7855, 11552, 12541, 13563, 14999, 39, 10641, 11656, 12541, 13563, 14999, 39, 10641, 11763, 11552, 12541, 13563, 14999, 39, 10641, 15119, 13758, 12541, 13563, 14999, 39, 10641, 15642, 12541, 13563, 14999, 39, 10641, 16120, 12541, 13563, 14999, 39, 10641, 16959, 7292, 12541, 13563, 14999, 39, 10641, 17839, 15642, 12541, 13563, 14999, 39, 10641, 19058, 12541, 13563, 14999, 39, 10641, 19587, 7292, 12541, 13563, 14999, 39, 10641, 19921, 11552, 12541, 13563, 14999, 40, 12541, 13563, 14999, 41, 896, 12541, 13563, 14999, 41, 897, 10641, 13507, 13341, 2106, 12541, 13563, 14999, 41, 10641, 1217, 11552, 12541, 13563, 14999, 41, 10641, 7293, 11392, 12541, 13563, 14999, 41, 10641, 7304, 12541, 13563, 14999, 41, 10641, 7305, 843, 1217, 11552, 12541, 13563, 14999, 41, 10641, 7305, 843, 7293, 11392, 12541, 13563, 14999, 41, 10641, 7305, 843, 11394, 12541, 13563, 14999, 41, 10641, 7305, 843, 12232, 12541, 13563, 14999, 41, 10641, 7305, 843, 13758, 12541, 13563, 14999, 41, 10641, 7817, 7292, 12541, 13563, 14999, 41, 10641, 9503, 11392, 12541, 13563, 14999, 41, 10641, 11394, 12541, 13563, 14999, 41, 10641, 11596, 12541, 13563, 14999, 41, 10641, 11656, 12541, 13563, 14999, 41, 10641, 12232, 12541, 13563, 14999, 41, 10641, 13507, 13341, 2106, 12541, 13563, 14999, 41, 10641, 13758, 12541, 13563, 14999, 41, 10641, 13759, 843, 11394, 12541, 13563, 14999, 41, 10641, 13759, 11552, 12541, 13563, 14999, 41, 10641, 14625, 11394, 12541, 13563, 14999, 41, 10641, 14625, 12232, 12541, 13563, 14999, 41, 10641, 15050, 12541, 13563, 14999, 41, 10641, 15051, 843, 19058, 12541, 13563, 14999, 41, 10641, 15246, 12541, 13563, 14999, 41, 10641, 18183, 11596, 12541, 13563, 14999, 41, 10641, 19058, 12541, 13563, 14999, 41, 10641, 19059, 843, 11394, 12541, 13563, 14999, 41, 10641, 19059, 843, 11656, 12541, 13563, 14999, 41, 10641, 19059, 843, 12232, 12541, 13563, 14999, 41, 10641, 19059, 843, 15050, 12541, 13563, 14999, 41, 10641, 19059, 11552, 12541, 13563, 14999, 41, 10641, 19587, 7292, 12541, 13563, 14999, 41, 10641, 19920, 12541, 13563, 14999, 41, 10641, 19921, 11552, 12541, 13563, 14999, 42, 12541, 13563, 14999, 43, 10641, 1217, 11552, 12541, 13563, 14999, 43, 10641, 6118, 12541, 13563, 14999, 43, 10641, 7292, 12541, 13563, 14999, 43, 10641, 13341, 7292, 12541, 13563, 14999, 43, 10641, 13758, 12541, 13563, 14999, 43, 10641, 16959, 7292, 12541, 13563, 14999, 43, 10641, 17839, 15642, 12541, 13563, 14999, 44, 12541, 13563, 14999, 45, 10641, 1217, 11392, 12541, 13563, 14999, 45, 10641, 1217, 11552, 12541, 13563, 14999, 45, 10641, 7292, 12541, 13563, 14999, 45, 10641, 9503, 11392, 12541, 13563, 14999, 45, 10641, 11394, 12541, 13563, 14999, 45, 10641, 12232, 12541, 13563, 14999, 45, 10641, 19058, 12541, 13563, 14999, 45, 10641, 19920, 12541, 13563, 14999, 46, 12541, 13563, 14999, 47, 10641, 1217, 11392, 12541, 13563, 14999, 47, 10641, 2175, 13341, 9502, 12541, 13563, 14999, 47, 10641, 7883, 7817, 2106, 12541, 13563, 14999, 47, 10641, 7883, 7817, 2107, 843, 2175, 13341, 9502, 12541, 13563, 14999, 47, 10641, 7883, 7817, 2107, 10641, 13448, 12541, 13563, 14999, 47, 10641, 16959, 7292, 12541, 13563, 14999, 47, 10641, 19058, 12541, 13563, 14999, 48, 12541, 13563, 14999, 49, 10641, 1217, 11392, 12541, 13563, 14999, 49, 10641, 1217, 11552, 12541, 13563, 14999, 49, 10641, 7292, 12541, 13563, 14999, 49, 10641, 7293, 11392, 12541, 13563, 14999, 49, 10641, 7888, 12541, 13563, 14999, 49, 10641, 9503, 11392, 12541, 13563, 14999, 49, 10641, 11394, 12541, 13563, 14999, 49, 10641, 12232, 12541, 13563, 14999, 49, 10641, 13507, 13341, 2106, 12541, 13563, 14999, 49, 10641, 13758, 12541, 13563, 14999, 49, 10641, 15050, 12541, 13563, 14999, 49, 10641, 15642, 12541, 13563, 14999, 49, 10641, 19058, 12541, 13563, 14999, 49, 10641, 19920, 12541, 13563, 14999, 50, 12541, 13563, 14999, 51, 10641, 1217, 11392, 12541, 13563, 14999, 51, 10641, 1217, 11552, 12541, 13563, 14999, 51, 10641, 6118, 12541, 13563, 14999, 51, 10641, 7292, 12541, 13563, 14999, 51, 10641, 7855, 11552, 12541, 13563, 14999, 51, 10641, 11394, 12541, 13563, 14999, 51, 10641, 11656, 12541, 13563, 14999, 51, 10641, 13653, 10092, 12541, 13563, 14999, 51, 10641, 15119, 13758, 12541, 13563, 14999, 51, 10641, 15642, 12541, 13563, 14999, 51, 10641, 16959, 7292, 12541, 13563, 14999, 51, 10641, 19056, 12541, 13563, 14999, 51, 10641, 19587, 7292, 12541, 13563, 14999, 51, 10641, 19920, 12541, 13563, 14999, 58, 12541, 13563, 14999, 66, 12541, 13563, 14999, 67, 10641, 11394, 12541, 13563, 14999, 67, 10641, 15050, 12541, 13563, 14999, 82, 12541, 13563, 14999, 94, 12541, 13563, 14999, 96, 12541, 13563, 14999, 97, 10641, 20181, 896, 12541, 13563, 14999, 102, 12541, 13563, 14999, 151, 16254, 12541, 13563, 14999, 172, 12541, 13563, 14999, 173, 10641, 11656, 12541, 13563, 14999, 173, 16254, 12541, 13563, 14999, 173, 16255, 10641, 6118, 12541, 13563, 14999, 212, 12541, 13563, 14999, 288, 12541, 13563, 14999, 326, 12541, 13563, 14999, 394, 12541, 13563, 14999, 405, 16254, 12541, 13563, 14999, 415, 16254, 12541, 13563, 14999, 462, 12541, 13563, 14999, 488, 12541, 13563, 14999, 498, 12541, 13563, 14999, 510, 12541, 13563, 14999, 567, 16254, 12541, 13563, 14999, 625, 16255, 10641, 6118, 12541, 13563, 14999, 629, 10641, 22934, 12541, 13563, 14999, 639, 16254, 12541, 13563, 14999, 644, 12541, 13563, 14999, 656, 12541, 13563, 14999, 660, 12541, 13563, 14999, 664, 12541, 13563, 14999, 668, 12541, 13563, 14999, 692, 12541, 13563, 14999, 1048, 12541, 13563, 14999, 1049, 10641, 2175, 7817, 13448, 12541, 13563, 14999, 1049, 10641, 2175, 13341, 9502, 12541, 13563, 14999, 1076, 12541, 13563, 14999, 1230, 12541, 13563, 14999, 1300, 12541, 13563, 14999, 1301, 10641, 21042, 12541, 13563, 14999, 1318, 12541, 13563, 14999, 1319, 10641, 6118, 12541, 13563, 14999, 1319, 10641, 16959, 7292, 12541, 13563, 14999, 1319, 10641, 19587, 7292, 12541, 13563, 14999, 1328, 12541, 13563, 14999, 1340, 12541, 13563, 14999, 1341, 10641, 6118, 12541, 13563, 14999, 1341, 10641, 10092, 12541, 13563, 14999, 1341, 10641, 11656, 12541, 13563, 14999, 1341, 10641, 19587, 7292, 12541, 13563, 14999, 1341, 18542, 12541, 13563, 14999, 1492, 12541, 13563, 14999, 1996, 12541, 13563, 14999, 2198, 12541, 13563, 14999, 2346, 12541, 13563, 14999, 2534, 12541, 13563, 14999, 2680, 12541, 13563, 14999, 2972, 12541, 13563, 14999, 2973, 17140, 12541, 13563, 14999, 3293, 7123, 28, 12541, 13563, 14999, 3338, 12541, 13563, 14999, 5816, 12541, 13563, 14999, 6373, 16254, 12541, 13563, 14999, 6735, 16254, 12541, 13563, 14999, 7123, 14, 12541, 13563, 14999, 7148, 12541, 13563, 14999, 7149, 10641, 7292, 12541, 13563, 14999, 7438, 12541, 13563, 14999, 7439, 10641, 15642, 12541, 13563, 14999, 7824, 12541, 13563, 14999, 7883, 36, 12541, 13563, 14999, 7883, 37, 10641, 1217, 11392, 12541, 13563, 14999, 7883, 37, 10641, 7171, 15642, 12541, 13563, 14999, 7883, 37, 10641, 17839, 15642, 12541, 13563, 14999, 9171, 8, 12541, 13563, 14999, 9171, 9, 10641, 19587, 7292, 12541, 13563, 14999, 9171, 28, 12541, 13563, 14999, 9171, 29, 10641, 15642, 12541, 13563, 14999, 9171, 29, 10641, 19587, 7292, 12541, 13563, 14999, 9171, 482, 12541, 13563, 14999, 9469, 7304, 12541, 13563, 14999, 10125, 16254, 12541, 13563, 14999, 10219, 3076, 12541, 13563, 14999, 10219, 3356, 12541, 13563, 14999, 10219, 6756, 12541, 13563, 14999, 10530, 12541, 13563, 14999, 10812, 12541, 13563, 14999, 11436, 12541, 13563, 14999, 11437, 10641, 19587, 7292, 12541, 13563, 14999, 11888, 12541, 13563, 14999, 12156, 12541, 13563, 14999, 12557, 10, 12541, 13563, 14999, 13144, 12541, 13563, 14999, 13405, 3680, 12541, 13563, 14999, 13432, 12541, 13563, 14999, 13433, 10641, 7292, 12541, 13563, 14999, 13433, 10641, 19587, 7292, 12541, 13563, 14999, 13469, 36, 12541, 13563, 14999, 13597, 18543, 1318, 12541, 13563, 14999, 13734, 12541, 13563, 14999, 13735, 10641, 15642, 12541, 13563, 14999, 13735, 10641, 15643, 17369, 19056, 12541, 13563, 14999, 14357, 8, 12541, 13563, 14999, 14357, 28, 12541, 13563, 14999, 14357, 11436, 12541, 13563, 14999, 14393, 7123, 28, 12541, 13563, 14999, 14411, 22, 12541, 13563, 14999, 14497, 9171, 8, 12541, 13563, 14999, 14497, 13144, 12541, 13563, 14999, 14497, 18543, 9171, 8, 12541, 13563, 14999, 14625, 34, 12541, 13563, 14999, 14625, 35, 10641, 21042, 12541, 13563, 14999, 14977, 10641, 15642, 12541, 13563, 14999, 15501, 12, 12541, 13563, 14999, 15501, 13, 10641, 21042, 12541, 13563, 14999, 15501, 34, 12541, 13563, 14999, 15501, 35, 10641, 9502, 12541, 13563, 14999, 15811, 0, 12541, 13563, 14999, 15811, 8, 12541, 13563, 14999, 15811, 12, 12541, 13563, 14999, 15811, 14, 12541, 13563, 14999, 15811, 15, 10641, 18068, 12541, 13563, 14999, 15811, 15, 10641, 18069, 843, 10092, 12541, 13563, 14999, 15811, 16, 12541, 13563, 14999, 15811, 20, 12541, 13563, 14999, 15811, 22, 12541, 13563, 14999, 15811, 24, 12541, 13563, 14999, 15811, 25, 10641, 7883, 2106, 12541, 13563, 14999, 15811, 29, 15254, 12541, 13563, 14999, 15811, 29, 15255, 10641, 15642, 12541, 13563, 14999, 15811, 34, 12541, 13563, 14999, 15811, 35, 10641, 7292, 12541, 13563, 14999, 15811, 35, 10641, 7883, 2106, 12541, 13563, 14999, 15811, 35, 10641, 10092, 12541, 13563, 14999, 15811, 38, 12541, 13563, 14999, 15811, 42, 12541, 13563, 14999, 15811, 44, 12541, 13563, 14999, 15811, 48, 12541, 13563, 14999, 15811, 66, 12541, 13563, 14999, 15811, 482, 12541, 13563, 14999, 15811, 483, 10641, 15642, 12541, 13563, 14999, 15811, 483, 10641, 20181, 15642, 12541, 13563, 14999, 15811, 660, 12541, 13563, 14999, 15811, 9171, 8, 12541, 13563, 14999, 15811, 11436, 12541, 13563, 14999, 15811, 11888, 12541, 13563, 14999, 15811, 16527, 12, 12541, 13563, 14999, 16279, 16, 12541, 13563, 14999, 16279, 18, 12541, 13563, 14999, 16279, 19, 10641, 15642, 12541, 13563, 14999, 16279, 19, 10641, 15643, 843, 7292, 12541, 13563, 14999, 16449, 9956, 12541, 13563, 14999, 16527, 6, 12541, 13563, 14999, 16527, 10, 12541, 13563, 14999, 16527, 12, 12541, 13563, 14999, 16527, 34, 12541, 13563, 14999, 16527, 36, 12541, 13563, 14999, 16527, 38, 12541, 13563, 14999, 17297, 34, 12541, 13563, 14999, 17460, 12541, 13563, 14999, 17461, 10641, 15642, 12541, 13563, 14999, 17497, 66, 12541, 13563, 14999, 17497, 482, 12541, 13563, 14999, 17497, 656, 12541, 13563, 14999, 17667, 1318, 12541, 13563, 14999, 18183, 482, 12541, 13563, 14999, 18183, 11436, 12541, 13563, 14999, 18185, 8, 12541, 13563, 14999, 18543, 4, 12541, 13563, 14999, 18543, 5, 10641, 1216, 12541, 13563, 14999, 18543, 8, 12541, 13563, 14999, 18543, 35, 10641, 18068, 12541, 13563, 14999, 18543, 9171, 8, 12541, 13563, 14999, 18543, 9171, 9, 10641, 7292, 12541, 13563, 14999, 18543, 9171, 9, 10641, 19587, 7292, 12541, 13563, 14999, 18558, 12541, 13563, 14999, 18599, 28, 12541, 13563, 14999, 18599, 29, 10641, 15642, 12541, 13563, 14999, 18599, 40, 12541, 13563, 14999, 18599, 9171, 28, 12541, 13563, 14999, 18599, 15811, 24, 12541, 13563, 14999, 18599, 20605, 40, 12541, 13563, 14999, 18721, 2680, 12541, 13563, 14999, 18772, 12541, 13563, 14999, 19034, 12541, 13563, 14999, 19035, 10641, 11762, 12541, 13563, 14999, 20507, 50, 12541, 13563, 14999, 20551, 8, 12541, 13563, 14999, 20551, 28, 12541, 13563, 14999, 20551, 29, 10641, 15642, 12541, 13563, 14999, 21151, 42, 12541, 13563, 14999, 21151, 396, 12541, 13563, 14999, 22825, 826, 12541, 13563, 14999, 22825, 5246, 12541, 13563, 16111, 14999, 17, 10641, 15642, 12541, 13563, 16111, 14999, 41, 10641, 15642, 12541, 13563, 18249, 228, 12541, 13563, 18249, 230, 12541, 13563, 18249, 232, 12541, 13563, 18249, 310, 12541, 13563, 18249, 482, 12541, 13563, 18249, 610, 12541, 13563, 18249, 1370, 12541, 13563, 18249, 1372, 12541, 13563, 18249, 7883, 37, 38, 12541, 14999, 744, 12541, 14999, 826, 12541, 14999, 3357, 10641, 15642, 12541, 14999, 10662, 12541, 14999, 13563, 16111, 0, 12541, 14999, 13563, 16111, 2, 12541, 14999, 13563, 16111, 4, 12541, 14999, 13563, 16111, 6, 12541, 14999, 13563, 16111, 8, 12541, 14999, 13563, 16111, 10, 12541, 14999, 13563, 16111, 12, 12541, 14999, 13563, 16111, 13, 10641, 7292, 12541, 14999, 13563, 16111, 14, 12541, 14999, 13563, 16111, 16, 12541, 14999, 13563, 16111, 18, 12541, 14999, 13563, 16111, 20, 12541, 14999, 13563, 16111, 22, 12541, 14999, 13563, 16111, 23, 10641, 15642, 12541, 14999, 13563, 16111, 24, 12541, 14999, 13563, 16111, 26, 12541, 14999, 13563, 16111, 28, 12541, 14999, 13563, 16111, 30, 12541, 14999, 13563, 16111, 34, 12541, 14999, 13563, 16111, 35, 10641, 13341, 2106, 12541, 14999, 13563, 16111, 36, 12541, 14999, 13563, 16111, 38, 12541, 14999, 13563, 16111, 40, 12541, 14999, 13563, 16111, 42, 12541, 14999, 13563, 16111, 44, 12541, 14999, 13563, 16111, 48, 12541, 14999, 13563, 16111, 50, 12541, 14999, 13563, 16111, 66, 12541, 14999, 13563, 16111, 482, 12541, 14999, 13563, 16111, 510, 12541, 14999, 13563, 16111, 1328, 12541, 14999, 13563, 16111, 1340, 12541, 14999, 13563, 16111, 2972, 12541, 14999, 13563, 16111, 9171, 28, 12541, 14999, 13563, 16111, 14357, 2, 12541, 14999, 13563, 16111, 15811, 8, 12541, 14999, 13563, 16111, 15811, 24, 12541, 14999, 13563, 16111, 15811, 34, 12541, 14999, 13563, 16111, 18183, 34, 12541, 14999, 13563, 16111, 18543, 26, 12541, 14999, 13563, 16111, 18543, 34, 12541, 14999, 14567, 11738, 12541, 14999, 15873, 19399, 17268, 12541, 14999, 16449, 9956, 12541, 14999, 16449, 9957, 10641, 15642, 12541, 14999, 16703, 11738, 12541, 14999, 17599, 11738, 12541, 14999, 17679, 20316, 12541, 14999, 17681, 11738, 12541, 14999, 17681, 20316, 12541, 14999, 18183, 16449, 9956, 12541, 14999, 18183, 16449, 9957, 10641, 15642, 12541, 14999, 18543, 1319, 7888, 12541, 14999, 18543, 16449, 9957, 10641, 15642, 12541, 14999, 19587, 11738, 12541, 14999, 19659, 4, 12541, 14999, 20321, 15873, 19278, 12541, 14999, 20919, 1216, 12541, 16111, 14999, 0, 12541, 16111, 14999, 1, 10641, 1217, 11392, 12541, 16111, 14999, 1, 10641, 1217, 11393, 843, 15050, 12541, 16111, 14999, 1, 10641, 1217, 11552, 12541, 16111, 14999, 1, 10641, 7293, 11392, 12541, 16111, 14999, 1, 10641, 9503, 11392, 12541, 16111, 14999, 1, 10641, 9503, 11393, 843, 11394, 12541, 16111, 14999, 1, 10641, 9503, 11552, 12541, 16111, 14999, 1, 10641, 11394, 12541, 16111, 14999, 1, 10641, 11596, 12541, 16111, 14999, 1, 10641, 11597, 843, 1217, 11552, 12541, 16111, 14999, 1, 10641, 11597, 843, 7293, 11392, 12541, 16111, 14999, 1, 10641, 11597, 843, 11394, 12541, 16111, 14999, 1, 10641, 11597, 843, 12232, 12541, 16111, 14999, 1, 10641, 11597, 843, 13758, 12541, 16111, 14999, 1, 10641, 11656, 12541, 16111, 14999, 1, 10641, 12232, 12541, 16111, 14999, 1, 10641, 13758, 12541, 16111, 14999, 1, 10641, 14625, 12232, 12541, 16111, 14999, 1, 10641, 15050, 12541, 16111, 14999, 1, 10641, 15246, 12541, 16111, 14999, 1, 10641, 15642, 12541, 16111, 14999, 1, 10641, 18183, 11596, 12541, 16111, 14999, 1, 10641, 19058, 12541, 16111, 14999, 1, 10641, 19059, 843, 15050, 12541, 16111, 14999, 1, 10641, 19920, 12541, 16111, 14999, 1, 10641, 19921, 843, 1217, 11552, 12541, 16111, 14999, 1, 10641, 19921, 843, 7293, 11392, 12541, 16111, 14999, 1, 10641, 19921, 843, 11394, 12541, 16111, 14999, 1, 10641, 19921, 843, 12232, 12541, 16111, 14999, 1, 10641, 19921, 843, 13758, 12541, 16111, 14999, 2, 12541, 16111, 14999, 3, 10641, 1217, 11392, 12541, 16111, 14999, 3, 10641, 1217, 11552, 12541, 16111, 14999, 3, 10641, 7292, 12541, 16111, 14999, 3, 10641, 7855, 11552, 12541, 16111, 14999, 3, 10641, 15642, 12541, 16111, 14999, 3, 10641, 15778, 12541, 16111, 14999, 3, 10641, 18074, 12541, 16111, 14999, 4, 12541, 16111, 14999, 5, 10641, 896, 12541, 16111, 14999, 5, 10641, 1217, 11392, 12541, 16111, 14999, 5, 10641, 7292, 12541, 16111, 14999, 5, 10641, 11394, 12541, 16111, 14999, 5, 10641, 11656, 12541, 16111, 14999, 5, 10641, 15642, 12541, 16111, 14999, 5, 10641, 16120, 12541, 16111, 14999, 5, 10641, 16121, 843, 11394, 12541, 16111, 14999, 5, 10641, 19920, 12541, 16111, 14999, 6, 12541, 16111, 14999, 7, 10641, 1217, 11392, 12541, 16111, 14999, 7, 10641, 1217, 11552, 12541, 16111, 14999, 7, 10641, 7292, 12541, 16111, 14999, 7, 10641, 7855, 11552, 12541, 16111, 14999, 7, 10641, 11656, 12541, 16111, 14999, 7, 10641, 13563, 14999, 50, 12541, 16111, 14999, 7, 10641, 13563, 14999, 51, 10641, 11656, 12541, 16111, 14999, 7, 10641, 15642, 12541, 16111, 14999, 7, 10641, 15778, 12541, 16111, 14999, 7, 10641, 16120, 12541, 16111, 14999, 7, 10641, 19921, 11552, 12541, 16111, 14999, 8, 12541, 16111, 14999, 9, 10641, 1217, 11392, 12541, 16111, 14999, 9, 10641, 1217, 11552, 12541, 16111, 14999, 9, 10641, 7293, 11392, 12541, 16111, 14999, 9, 10641, 11394, 12541, 16111, 14999, 9, 10641, 11596, 12541, 16111, 14999, 9, 10641, 11656, 12541, 16111, 14999, 9, 10641, 12232, 12541, 16111, 14999, 9, 10641, 13758, 12541, 16111, 14999, 9, 10641, 13759, 11552, 12541, 16111, 14999, 9, 10641, 14625, 12232, 12541, 16111, 14999, 9, 10641, 15050, 12541, 16111, 14999, 9, 10641, 15051, 843, 11394, 12541, 16111, 14999, 9, 10641, 15051, 843, 12232, 12541, 16111, 14999, 9, 10641, 15246, 12541, 16111, 14999, 9, 10641, 15642, 12541, 16111, 14999, 9, 10641, 16120, 12541, 16111, 14999, 9, 10641, 16121, 843, 11596, 12541, 16111, 14999, 9, 10641, 18183, 11596, 12541, 16111, 14999, 9, 10641, 19058, 12541, 16111, 14999, 9, 10641, 19920, 12541, 16111, 14999, 9, 10641, 19921, 843, 1217, 11552, 12541, 16111, 14999, 9, 10641, 19921, 843, 7293, 11392, 12541, 16111, 14999, 9, 10641, 19921, 843, 11394, 12541, 16111, 14999, 9, 10641, 19921, 843, 12232, 12541, 16111, 14999, 9, 10641, 19921, 843, 13758, 12541, 16111, 14999, 9, 10641, 19921, 11552, 12541, 16111, 14999, 10, 12541, 16111, 14999, 11, 10641, 1217, 11392, 12541, 16111, 14999, 11, 10641, 7292, 12541, 16111, 14999, 11, 10641, 15642, 12541, 16111, 14999, 12, 12541, 16111, 14999, 13, 10641, 1217, 11392, 12541, 16111, 14999, 13, 10641, 7292, 12541, 16111, 14999, 13, 10641, 11394, 12541, 16111, 14999, 13, 10641, 11596, 12541, 16111, 14999, 13, 10641, 11656, 12541, 16111, 14999, 13, 10641, 15050, 12541, 16111, 14999, 13, 10641, 15642, 12541, 16111, 14999, 13, 10641, 16120, 12541, 16111, 14999, 13, 10641, 16913, 15642, 12541, 16111, 14999, 13, 10641, 19920, 12541, 16111, 14999, 14, 12541, 16111, 14999, 15, 10641, 1217, 11392, 12541, 16111, 14999, 15, 10641, 1217, 11552, 12541, 16111, 14999, 15, 10641, 7292, 12541, 16111, 14999, 15, 10641, 11597, 11552, 12541, 16111, 14999, 15, 10641, 11656, 12541, 16111, 14999, 15, 10641, 15642, 12541, 16111, 14999, 15, 10641, 16120, 12541, 16111, 14999, 15, 10641, 19056, 12541, 16111, 14999, 15, 10641, 19058, 12541, 16111, 14999, 15, 10641, 19920, 12541, 16111, 14999, 16, 12541, 16111, 14999, 17, 10641, 1217, 11392, 12541, 16111, 14999, 17, 10641, 1217, 11552, 12541, 16111, 14999, 17, 10641, 7293, 11392, 12541, 16111, 14999, 17, 10641, 11394, 12541, 16111, 14999, 17, 10641, 11596, 12541, 16111, 14999, 17, 10641, 11656, 12541, 16111, 14999, 17, 10641, 12232, 12541, 16111, 14999, 17, 10641, 13758, 12541, 16111, 14999, 17, 10641, 13759, 11552, 12541, 16111, 14999, 17, 10641, 14625, 12232, 12541, 16111, 14999, 17, 10641, 15050, 12541, 16111, 14999, 17, 10641, 15246, 12541, 16111, 14999, 17, 10641, 15642, 12541, 16111, 14999, 17, 10641, 18183, 11596, 12541, 16111, 14999, 17, 10641, 19058, 12541, 16111, 14999, 17, 10641, 19059, 843, 11394, 12541, 16111, 14999, 17, 10641, 19920, 12541, 16111, 14999, 18, 12541, 16111, 14999, 19, 10641, 15642, 12541, 16111, 14999, 19, 10641, 19920, 12541, 16111, 14999, 19, 10641, 21042, 12541, 16111, 14999, 20, 12541, 16111, 14999, 21, 10641, 1217, 11552, 12541, 16111, 14999, 21, 10641, 7292, 12541, 16111, 14999, 21, 10641, 7855, 11552, 12541, 16111, 14999, 21, 10641, 11394, 12541, 16111, 14999, 21, 10641, 11656, 12541, 16111, 14999, 21, 10641, 15642, 12541, 16111, 14999, 21, 10641, 15643, 843, 17839, 15642, 12541, 16111, 14999, 21, 10641, 16120, 12541, 16111, 14999, 21, 10641, 16913, 15642, 12541, 16111, 14999, 21, 10641, 17839, 15642, 12541, 16111, 14999, 21, 10641, 19056, 12541, 16111, 14999, 22, 12541, 16111, 14999, 23, 10641, 896, 12541, 16111, 14999, 23, 10641, 1217, 11552, 12541, 16111, 14999, 23, 10641, 1217, 11553, 843, 15050, 12541, 16111, 14999, 23, 10641, 5810, 12541, 16111, 14999, 23, 10641, 7171, 15642, 12541, 16111, 14999, 23, 10641, 7855, 11552, 12541, 16111, 14999, 23, 10641, 11394, 12541, 16111, 14999, 23, 10641, 11656, 12541, 16111, 14999, 23, 10641, 13563, 14999, 18, 12541, 16111, 14999, 23, 10641, 14625, 896, 12541, 16111, 14999, 23, 10641, 15119, 1216, 12541, 16111, 14999, 23, 10641, 15119, 13758, 12541, 16111, 14999, 23, 10641, 15642, 12541, 16111, 14999, 23, 10641, 16120, 12541, 16111, 14999, 23, 10641, 19921, 11552, 12541, 16111, 14999, 24, 12541, 16111, 14999, 25, 10641, 1217, 11392, 12541, 16111, 14999, 25, 10641, 1217, 11552, 12541, 16111, 14999, 25, 10641, 7292, 12541, 16111, 14999, 25, 10641, 11394, 12541, 16111, 14999, 26, 12541, 16111, 14999, 27, 10641, 1217, 11392, 12541, 16111, 14999, 27, 10641, 1217, 11552, 12541, 16111, 14999, 27, 10641, 7817, 7292, 12541, 16111, 14999, 27, 10641, 7855, 11552, 12541, 16111, 14999, 27, 10641, 7883, 13341, 2106, 12541, 16111, 14999, 27, 10641, 11394, 12541, 16111, 14999, 27, 10641, 11656, 12541, 16111, 14999, 27, 10641, 12232, 12541, 16111, 14999, 27, 10641, 13563, 14999, 18, 12541, 16111, 14999, 27, 10641, 13758, 12541, 16111, 14999, 27, 10641, 16120, 12541, 16111, 14999, 27, 10641, 16913, 15642, 12541, 16111, 14999, 27, 10641, 19056, 12541, 16111, 14999, 27, 10641, 19921, 11552, 12541, 16111, 14999, 28, 12541, 16111, 14999, 29, 10641, 1217, 11392, 12541, 16111, 14999, 29, 10641, 1217, 11393, 843, 15050, 12541, 16111, 14999, 29, 10641, 1217, 11552, 12541, 16111, 14999, 29, 10641, 7293, 11392, 12541, 16111, 14999, 29, 10641, 7304, 12541, 16111, 14999, 29, 10641, 7305, 843, 1217, 11552, 12541, 16111, 14999, 29, 10641, 7305, 843, 7293, 11392, 12541, 16111, 14999, 29, 10641, 7305, 843, 11394, 12541, 16111, 14999, 29, 10641, 7305, 843, 12232, 12541, 16111, 14999, 29, 10641, 7305, 843, 13758, 12541, 16111, 14999, 29, 10641, 7883, 15643, 16950, 12541, 16111, 14999, 29, 10641, 7888, 12541, 16111, 14999, 29, 10641, 11394, 12541, 16111, 14999, 29, 10641, 11596, 12541, 16111, 14999, 29, 10641, 11656, 12541, 16111, 14999, 29, 10641, 12232, 12541, 16111, 14999, 29, 10641, 13758, 12541, 16111, 14999, 29, 10641, 13759, 843, 11394, 12541, 16111, 14999, 29, 10641, 13759, 843, 15050, 12541, 16111, 14999, 29, 10641, 13759, 843, 19058, 12541, 16111, 14999, 29, 10641, 14625, 11394, 12541, 16111, 14999, 29, 10641, 14625, 12232, 12541, 16111, 14999, 29, 10641, 15050, 12541, 16111, 14999, 29, 10641, 15051, 843, 11394, 12541, 16111, 14999, 29, 10641, 15051, 843, 12232, 12541, 16111, 14999, 29, 10641, 15119, 13758, 12541, 16111, 14999, 29, 10641, 15246, 12541, 16111, 14999, 29, 10641, 15247, 843, 15050, 12541, 16111, 14999, 29, 10641, 15642, 12541, 16111, 14999, 29, 10641, 15643, 843, 11394, 12541, 16111, 14999, 29, 10641, 18183, 11596, 12541, 16111, 14999, 29, 10641, 19058, 12541, 16111, 14999, 29, 10641, 19059, 843, 15050, 12541, 16111, 14999, 29, 10641, 19920, 12541, 16111, 14999, 29, 10641, 19921, 843, 1217, 11552, 12541, 16111, 14999, 29, 10641, 19921, 843, 7293, 11392, 12541, 16111, 14999, 29, 10641, 19921, 843, 11394, 12541, 16111, 14999, 29, 10641, 19921, 843, 12232, 12541, 16111, 14999, 29, 10641, 19921, 843, 13758, 12541, 16111, 14999, 30, 12541, 16111, 14999, 31, 10641, 1217, 11392, 12541, 16111, 14999, 31, 10641, 7292, 12541, 16111, 14999, 31, 10641, 11394, 12541, 16111, 14999, 31, 10641, 15642, 12541, 16111, 14999, 31, 10641, 15643, 17369, 19056, 12541, 16111, 14999, 31, 10641, 18074, 12541, 16111, 14999, 31, 10641, 18637, 10092, 12541, 16111, 14999, 32, 12541, 16111, 14999, 33, 10641, 15643, 17369, 19056, 12541, 16111, 14999, 33, 10641, 17839, 15642, 12541, 16111, 14999, 34, 12541, 16111, 14999, 35, 10641, 1217, 11392, 12541, 16111, 14999, 35, 10641, 1217, 11552, 12541, 16111, 14999, 35, 10641, 1217, 11553, 843, 15050, 12541, 16111, 14999, 35, 10641, 7855, 11552, 12541, 16111, 14999, 35, 10641, 10092, 12541, 16111, 14999, 35, 10641, 11394, 12541, 16111, 14999, 35, 10641, 11656, 12541, 16111, 14999, 35, 10641, 14625, 12232, 12541, 16111, 14999, 35, 10641, 15642, 12541, 16111, 14999, 35, 10641, 16120, 12541, 16111, 14999, 35, 10641, 16913, 15642, 12541, 16111, 14999, 35, 10641, 18183, 11596, 12541, 16111, 14999, 35, 17140, 12541, 16111, 14999, 36, 12541, 16111, 14999, 37, 10641, 1217, 11392, 12541, 16111, 14999, 37, 10641, 1217, 11552, 12541, 16111, 14999, 37, 10641, 1217, 11553, 843, 1217, 11392, 12541, 16111, 14999, 37, 10641, 11394, 12541, 16111, 14999, 37, 10641, 11395, 843, 1217, 11392, 12541, 16111, 14999, 37, 10641, 11656, 12541, 16111, 14999, 37, 10641, 11657, 843, 1217, 11392, 12541, 16111, 14999, 37, 10641, 11763, 11552, 12541, 16111, 14999, 37, 10641, 13653, 10092, 12541, 16111, 14999, 37, 10641, 16120, 12541, 16111, 14999, 37, 10641, 16913, 15642, 12541, 16111, 14999, 37, 10641, 19920, 12541, 16111, 14999, 38, 12541, 16111, 14999, 39, 10641, 1217, 11392, 12541, 16111, 14999, 39, 10641, 1217, 11552, 12541, 16111, 14999, 39, 10641, 7292, 12541, 16111, 14999, 39, 10641, 7855, 11552, 12541, 16111, 14999, 39, 10641, 11656, 12541, 16111, 14999, 39, 10641, 11763, 11552, 12541, 16111, 14999, 39, 10641, 15642, 12541, 16111, 14999, 39, 10641, 16120, 12541, 16111, 14999, 39, 10641, 17839, 15642, 12541, 16111, 14999, 39, 10641, 19587, 7292, 12541, 16111, 14999, 39, 10641, 19921, 11552, 12541, 16111, 14999, 40, 12541, 16111, 14999, 41, 896, 12541, 16111, 14999, 41, 10641, 1217, 11552, 12541, 16111, 14999, 41, 10641, 7293, 11392, 12541, 16111, 14999, 41, 10641, 7304, 12541, 16111, 14999, 41, 10641, 7305, 843, 1217, 11552, 12541, 16111, 14999, 41, 10641, 7305, 843, 7293, 11392, 12541, 16111, 14999, 41, 10641, 7305, 843, 11394, 12541, 16111, 14999, 41, 10641, 7305, 843, 12232, 12541, 16111, 14999, 41, 10641, 7305, 843, 13758, 12541, 16111, 14999, 41, 10641, 9503, 11392, 12541, 16111, 14999, 41, 10641, 11394, 12541, 16111, 14999, 41, 10641, 11596, 12541, 16111, 14999, 41, 10641, 11656, 12541, 16111, 14999, 41, 10641, 12232, 12541, 16111, 14999, 41, 10641, 13758, 12541, 16111, 14999, 41, 10641, 13759, 843, 11394, 12541, 16111, 14999, 41, 10641, 13759, 11552, 12541, 16111, 14999, 41, 10641, 14625, 11394, 12541, 16111, 14999, 41, 10641, 14625, 12232, 12541, 16111, 14999, 41, 10641, 15050, 12541, 16111, 14999, 41, 10641, 15051, 843, 19058, 12541, 16111, 14999, 41, 10641, 15246, 12541, 16111, 14999, 41, 10641, 18183, 11596, 12541, 16111, 14999, 41, 10641, 19058, 12541, 16111, 14999, 41, 10641, 19059, 843, 11394, 12541, 16111, 14999, 41, 10641, 19059, 843, 11656, 12541, 16111, 14999, 41, 10641, 19059, 843, 12232, 12541, 16111, 14999, 41, 10641, 19059, 843, 15050, 12541, 16111, 14999, 41, 10641, 19059, 11552, 12541, 16111, 14999, 41, 10641, 19920, 12541, 16111, 14999, 41, 10641, 19921, 11552, 12541, 16111, 14999, 42, 12541, 16111, 14999, 43, 10641, 1217, 11552, 12541, 16111, 14999, 43, 10641, 7292, 12541, 16111, 14999, 43, 10641, 13758, 12541, 16111, 14999, 43, 10641, 17839, 15642, 12541, 16111, 14999, 44, 12541, 16111, 14999, 45, 10641, 1217, 11392, 12541, 16111, 14999, 45, 10641, 1217, 11552, 12541, 16111, 14999, 45, 10641, 7292, 12541, 16111, 14999, 45, 10641, 11394, 12541, 16111, 14999, 45, 10641, 12232, 12541, 16111, 14999, 45, 10641, 19058, 12541, 16111, 14999, 45, 10641, 19920, 12541, 16111, 14999, 46, 12541, 16111, 14999, 47, 10641, 1217, 11392, 12541, 16111, 14999, 47, 10641, 19058, 12541, 16111, 14999, 48, 12541, 16111, 14999, 49, 10641, 1217, 11392, 12541, 16111, 14999, 49, 10641, 1217, 11552, 12541, 16111, 14999, 49, 10641, 7292, 12541, 16111, 14999, 49, 10641, 7293, 11392, 12541, 16111, 14999, 49, 10641, 7888, 12541, 16111, 14999, 49, 10641, 11394, 12541, 16111, 14999, 49, 10641, 12232, 12541, 16111, 14999, 49, 10641, 13758, 12541, 16111, 14999, 49, 10641, 15050, 12541, 16111, 14999, 49, 10641, 15642, 12541, 16111, 14999, 49, 10641, 19058, 12541, 16111, 14999, 49, 10641, 19920, 12541, 16111, 14999, 50, 12541, 16111, 14999, 51, 10641, 1217, 11392, 12541, 16111, 14999, 51, 10641, 1217, 11552, 12541, 16111, 14999, 51, 10641, 7292, 12541, 16111, 14999, 51, 10641, 7855, 11552, 12541, 16111, 14999, 51, 10641, 11394, 12541, 16111, 14999, 51, 10641, 11656, 12541, 16111, 14999, 51, 10641, 13653, 10092, 12541, 16111, 14999, 51, 10641, 15642, 12541, 16111, 14999, 51, 10641, 19056, 12541, 16111, 14999, 51, 10641, 19920, 12541, 16111, 14999, 58, 12541, 16111, 14999, 66, 12541, 16111, 14999, 67, 10641, 11394, 12541, 16111, 14999, 67, 10641, 15050, 12541, 16111, 14999, 82, 12541, 16111, 14999, 94, 12541, 16111, 14999, 96, 12541, 16111, 14999, 97, 10641, 20181, 896, 12541, 16111, 14999, 102, 12541, 16111, 14999, 172, 12541, 16111, 14999, 173, 10641, 11656, 12541, 16111, 14999, 212, 12541, 16111, 14999, 326, 12541, 16111, 14999, 394, 12541, 16111, 14999, 462, 12541, 16111, 14999, 488, 12541, 16111, 14999, 498, 12541, 16111, 14999, 510, 12541, 16111, 14999, 644, 12541, 16111, 14999, 692, 12541, 16111, 14999, 1048, 12541, 16111, 14999, 1076, 12541, 16111, 14999, 1300, 12541, 16111, 14999, 1318, 12541, 16111, 14999, 1328, 12541, 16111, 14999, 1340, 12541, 16111, 14999, 1341, 10641, 11656, 12541, 16111, 14999, 1341, 18542, 12541, 16111, 14999, 1492, 12541, 16111, 14999, 2973, 17140, 12541, 16111, 14999, 5816, 12541, 16111, 14999, 7123, 14, 12541, 16111, 14999, 7148, 12541, 16111, 14999, 7438, 12541, 16111, 14999, 9171, 8, 12541, 16111, 14999, 9171, 28, 12541, 16111, 14999, 10219, 3076, 12541, 16111, 14999, 10219, 3356, 12541, 16111, 14999, 10219, 6756, 12541, 16111, 14999, 10530, 12541, 16111, 14999, 10662, 12541, 16111, 14999, 10812, 12541, 16111, 14999, 11436, 12541, 16111, 14999, 12156, 12541, 16111, 14999, 12340, 12541, 16111, 14999, 13144, 12541, 16111, 14999, 13432, 12541, 16111, 14999, 13469, 36, 12541, 16111, 14999, 13563, 33, 10641, 7293, 10092, 12541, 16111, 14999, 13563, 16111, 16, 12541, 16111, 14999, 13734, 12541, 16111, 14999, 13735, 10641, 15642, 12541, 16111, 14999, 13735, 10641, 15643, 17369, 19056, 12541, 16111, 14999, 14411, 22, 12541, 16111, 14999, 15501, 12, 12541, 16111, 14999, 15811, 0, 12541, 16111, 14999, 15811, 14, 12541, 16111, 14999, 15811, 20, 12541, 16111, 14999, 15811, 22, 12541, 16111, 14999, 15811, 24, 12541, 16111, 14999, 15811, 38, 12541, 16111, 14999, 15811, 42, 12541, 16111, 14999, 15811, 11436, 12541, 16111, 14999, 15811, 16527, 12, 12541, 16111, 14999, 15969, 6, 12541, 16111, 14999, 16449, 9956, 12541, 16111, 14999, 16527, 6, 12541, 16111, 14999, 16527, 10, 12541, 16111, 14999, 16527, 12, 12541, 16111, 14999, 16527, 34, 12541, 16111, 14999, 16527, 36, 12541, 16111, 14999, 16527, 38, 12541, 16111, 14999, 17460, 12541, 16111, 14999, 17497, 66, 12541, 16111, 14999, 17497, 482, 12541, 16111, 14999, 17497, 656, 12541, 16111, 14999, 18543, 5, 10641, 1216, 12541, 16111, 14999, 18543, 8, 12541, 16111, 14999, 18543, 9171, 8, 12541, 16111, 14999, 18558, 12541, 16111, 14999, 18772, 12541, 16111, 14999, 19034, 12541, 16111, 14999, 19035, 10641, 11762, 12541, 16111, 14999, 20507, 50, 12541, 16111, 14999, 21151, 42, 12541, 16111, 14999, 21151, 396, 12541, 16111, 14999, 22825, 826, 12541, 16111, 14999, 22825, 5246, 12541, 16111, 18249, 310, 12541, 16111, 18249, 482, 12541, 19673, 13563, 14999, 0, 12541, 19673, 13563, 14999, 8, 12541, 19673, 13563, 14999, 14, 12541, 19673, 13563, 14999, 16, 12541, 19673, 13563, 14999, 18, 12541, 19673, 13563, 14999, 20, 12541, 19673, 13563, 14999, 22, 12541, 19673, 13563, 14999, 24, 12541, 19673, 13563, 14999, 26, 12541, 19673, 13563, 14999, 28, 12541, 19673, 13563, 14999, 30, 12541, 19673, 13563, 14999, 34, 12541, 19673, 13563, 14999, 36, 12541, 19673, 13563, 14999, 38, 12541, 19673, 13563, 14999, 40, 12541, 19673, 13563, 14999, 42, 12541, 19673, 13563, 14999, 46, 12541, 19673, 13563, 14999, 13432, 12541, 20125, 14999, 17, 12578, 12541, 20125, 14999, 16011, 24, 12541, 20125, 14999, 18183, 24, 12541, 20125, 14999, 18543, 10, 12541, 20125, 14999, 18543, 30, 12541, 20125, 14999, 18599, 16, 12552, 12559, 15582, 12560, 12563, 3077, 15609, 17642, 12563, 6757, 15609, 17642, 12563, 6757, 17045, 11571, 9950, 12563, 6779, 17045, 11571, 6122, 12563, 6779, 17045, 11571, 9950, 12563, 7817, 18763, 13483, 16089, 18392, 12563, 9464, 12563, 11695, 8320, 12563, 11979, 15609, 17642, 12563, 12237, 11772, 12563, 13341, 18763, 13483, 16089, 18392, 12563, 13454, 12563, 13737, 17045, 11571, 9950, 12563, 14049, 15620, 12563, 15819, 17045, 11571, 9950, 12563, 17154, 12563, 18847, 896, 12567, 9855, 2164, 12567, 9855, 9680, 12567, 9855, 19380, 12567, 9855, 19454, 12567, 11905, 2610, 12567, 11905, 3076, 12567, 11905, 3356, 12567, 11905, 6756, 12567, 11905, 6778, 12567, 11905, 8780, 12567, 11905, 10900, 12567, 11905, 11978, 12567, 11905, 13450, 12567, 11905, 13736, 12567, 13563, 14999, 350, 12567, 13563, 14999, 384, 12567, 13563, 14999, 416, 12567, 13563, 14999, 448, 12567, 13563, 14999, 522, 12567, 13563, 14999, 572, 12567, 13563, 14999, 622, 12567, 13563, 14999, 2444, 12567, 13563, 14999, 17610, 12567, 14003, 9855, 0, 12567, 14003, 9855, 8, 12567, 14003, 9855, 16, 12567, 14003, 9855, 28, 12567, 14003, 9855, 40, 12567, 14003, 9855, 72, 12567, 14003, 9855, 94, 12567, 14003, 9855, 184, 12567, 14003, 9855, 498, 12567, 14999, 106, 12567, 14999, 124, 12567, 14999, 148, 12567, 14999, 244, 12567, 14999, 266, 12567, 14999, 336, 12567, 14999, 350, 12567, 14999, 384, 12567, 14999, 416, 12567, 14999, 448, 12567, 14999, 522, 12567, 14999, 572, 12567, 14999, 588, 12567, 14999, 622, 12567, 14999, 694, 12567, 14999, 734, 12567, 14999, 932, 12567, 14999, 1044, 12567, 14999, 1164, 12567, 14999, 1492, 12567, 14999, 1796, 12567, 14999, 1914, 12567, 14999, 2444, 12567, 14999, 2676, 12567, 14999, 3048, 12567, 14999, 3114, 12567, 14999, 3242, 12567, 14999, 3304, 12567, 14999, 3670, 12567, 14999, 7088, 12567, 18511, 8320, 12567, 19667, 14999, 572, 12567, 19667, 14999, 694, 12567, 19667, 14999, 734, 12567, 20685, 8320, 12567, 22955, 14998, 12577, 18767, 9854, 12589, 2611, 14635, 11578, 12589, 2611, 17087, 11578, 12589, 6757, 16357, 11578, 12589, 7123, 11578, 12589, 7123, 14486, 12589, 7123, 16529, 14049, 14486, 12589, 7817, 14526, 12589, 7817, 15306, 12589, 7817, 18085, 2668, 12589, 7817, 18505, 17755, 858, 12589, 7817, 18774, 12589, 7817, 18929, 2668, 12589, 7817, 20296, 12589, 7817, 21207, 21279, 11476, 12589, 11573, 18566, 12589, 13341, 14519, 10641, 1216, 12589, 13341, 15306, 12589, 13341, 18505, 17755, 858, 12589, 13341, 18583, 14049, 14486, 12589, 13341, 18583, 14049, 15620, 12589, 13341, 18774, 12589, 13341, 21207, 18997, 11476, 12589, 13341, 22823, 14049, 15620, 12589, 13451, 16357, 11578, 12589, 13737, 16357, 11578, 12589, 13737, 18509, 11578, 12597, 6718, 12655, 9854, 12661, 7812, 12692, 12695, 16579, 11905, 2610, 12695, 16579, 11905, 3076, 12695, 16579, 11905, 3356, 12695, 16579, 11905, 6756, 12695, 16579, 11905, 6778, 12695, 16579, 11905, 8780, 12695, 16579, 11905, 11978, 12695, 16579, 11905, 13450, 12695, 16579, 11905, 13736, 12695, 16579, 18697, 7915, 358, 12695, 16579, 18697, 7917, 350, 12695, 16579, 18697, 7919, 370, 12695, 16579, 18697, 7921, 706, 12695, 16579, 18697, 7923, 694, 12695, 16579, 18697, 7925, 712, 12695, 16579, 18697, 7927, 2314, 12695, 16579, 18697, 7929, 2242, 12695, 16579, 18697, 7931, 2348, 12695, 16579, 18697, 7933, 114, 12695, 16579, 18697, 7935, 106, 12695, 16579, 18697, 7937, 120, 12695, 16579, 18697, 7939, 16, 12695, 16579, 18697, 7941, 0, 12695, 16579, 18697, 7943, 40, 12695, 16579, 18697, 7945, 158, 12695, 16579, 18697, 7947, 148, 12695, 16579, 18697, 7949, 168, 12695, 16579, 18697, 7951, 598, 12695, 16579, 18697, 7953, 588, 12695, 16579, 18697, 7955, 612, 12695, 16579, 18697, 7957, 630, 12695, 16579, 18697, 7959, 622, 12695, 16579, 18697, 7961, 642, 12695, 16579, 18697, 7963, 392, 12695, 16579, 18697, 7965, 384, 12695, 16579, 18697, 7967, 406, 12695, 16579, 18697, 7969, 340, 12695, 16579, 18697, 7971, 336, 12695, 16579, 18697, 7973, 344, 12695, 16579, 18697, 7975, 738, 12695, 16579, 18697, 7977, 734, 12695, 16579, 18697, 7979, 746, 12695, 16579, 18697, 7981, 230, 12695, 16579, 18697, 7983, 224, 12695, 16579, 18697, 7985, 238, 12695, 16579, 18697, 7987, 2470, 12695, 16579, 18697, 7989, 2396, 12695, 16579, 18697, 7991, 2536, 12695, 16579, 18697, 7993, 1606, 12695, 16579, 18697, 7995, 266, 12695, 16579, 18697, 7997, 1680, 12695, 16579, 18697, 7999, 8726, 12695, 16579, 18697, 8001, 7700, 12695, 16579, 18697, 8003, 710, 12695, 16579, 18697, 8005, 7314, 12695, 16579, 18697, 8007, 8334, 12695, 16579, 18697, 8009, 366, 12695, 16579, 18697, 8011, 3582, 12695, 16579, 18697, 8013, 546, 12695, 16579, 18697, 8015, 528, 12695, 16579, 18697, 8017, 1612, 12695, 16579, 18697, 8019, 1634, 12695, 16579, 18697, 8021, 2164, 12695, 16579, 18697, 8023, 626, 12695, 16579, 18697, 8025, 1458, 12695, 16579, 18697, 8027, 8746, 12695, 16579, 18697, 8029, 8948, 12695, 16579, 18697, 8031, 2282, 12695, 16579, 18697, 8033, 8980, 12695, 16579, 18697, 8035, 3586, 12695, 16579, 18697, 8037, 2266, 12695, 16579, 18697, 8039, 342, 12695, 16579, 18697, 8041, 2426, 12695, 16579, 18697, 8043, 1896, 12695, 16579, 18697, 8045, 540, 12695, 16579, 18697, 8047, 8674, 12695, 16579, 18697, 8049, 536, 12695, 16579, 18697, 8051, 634, 12695, 16579, 18697, 8053, 1464, 12695, 16579, 18697, 8055, 6940, 12695, 16579, 18697, 8057, 2268, 12695, 16579, 18697, 8059, 388, 12695, 16579, 18697, 8061, 1994, 12695, 16579, 18697, 8063, 226, 12695, 16579, 18697, 8065, 1976, 12695, 16579, 18697, 8067, 686, 12695, 16579, 18697, 8069, 1364, 12695, 16579, 18697, 8071, 602, 12695, 16579, 18697, 8073, 736, 12695, 16579, 18697, 8075, 2664, 12695, 16579, 18697, 8077, 8734, 12695, 16579, 18697, 8079, 7140, 12695, 16579, 18697, 8081, 2104, 12695, 16579, 18697, 8083, 682, 12695, 16579, 18697, 8085, 7883, 8728, 12695, 16579, 18697, 8087, 1698, 12695, 16579, 18697, 8089, 236, 12695, 16579, 18697, 8091, 1152, 12695, 16579, 18697, 8093, 8730, 12695, 16579, 18697, 8095, 3226, 12695, 16579, 18697, 8097, 1986, 12695, 16579, 18697, 8099, 6932, 12695, 16579, 18697, 8101, 2328, 12695, 16579, 18697, 8103, 354, 12695, 16579, 18697, 8105, 270, 12695, 16579, 18697, 8107, 110, 12695, 16579, 18697, 8109, 8956, 12695, 16579, 18697, 8111, 522, 12695, 16579, 18697, 8113, 8, 12695, 16579, 18697, 8115, 1350, 12695, 16579, 18697, 8117, 2706, 12695, 16579, 18697, 8119, 960, 12695, 16579, 18697, 8121, 3290, 12695, 16579, 18697, 8123, 7883, 8340, 12695, 16579, 18697, 8125, 7883, 12852, 12695, 16579, 18697, 8127, 1460, 12695, 16579, 18697, 8129, 1988, 12695, 16579, 18697, 8131, 3694, 12695, 16579, 18697, 8133, 7883, 388, 12695, 16579, 18697, 8135, 244, 12695, 16579, 18697, 8137, 7704, 12695, 16579, 18697, 8139, 338, 12695, 16579, 18697, 8141, 3562, 12695, 16579, 18697, 8143, 12846, 12695, 16579, 18697, 8145, 592, 12695, 16579, 18697, 8147, 2432, 12695, 16579, 18697, 8149, 700, 12695, 16579, 18697, 8151, 2422, 12695, 16579, 18697, 8153, 8732, 12695, 16579, 18697, 8155, 742, 12695, 16579, 18697, 8157, 2274, 12695, 16579, 18697, 8159, 2424, 12695, 16579, 18697, 8161, 1462, 12695, 16579, 18697, 8163, 2428, 12695, 16579, 18697, 8165, 3540, 12695, 16579, 18697, 8167, 12854, 12695, 16579, 18697, 8169, 7298, 12695, 16579, 18697, 8171, 2420, 12695, 16579, 18697, 8173, 1590, 12695, 16579, 18697, 8175, 316, 12695, 16579, 18697, 8177, 1990, 12695, 16579, 18697, 8179, 1392, 12695, 16579, 18697, 8181, 8802, 12695, 16579, 18697, 8183, 316, 12695, 16579, 18697, 8185, 3094, 12695, 16579, 18697, 8187, 192, 12695, 16579, 18697, 8189, 116, 12695, 16579, 18697, 8191, 3584, 12695, 16579, 18697, 8193, 282, 12695, 16579, 18697, 8195, 3728, 12695, 16579, 18697, 8197, 7883, 2272, 12695, 16579, 18697, 8199, 3542, 12695, 16579, 18697, 8201, 3484, 12695, 16579, 18697, 8203, 2270, 12695, 16579, 18697, 8205, 8728, 12695, 16579, 18697, 8207, 28, 12695, 16579, 18697, 8209, 1466, 12695, 16579, 18697, 8211, 8792, 12695, 16579, 18697, 8213, 918, 12695, 16579, 18697, 8215, 690, 12695, 16579, 18697, 8217, 2478, 12695, 16579, 18697, 8219, 402, 12695, 16579, 18697, 8221, 8466, 12695, 16579, 18697, 8223, 254, 12695, 16579, 18697, 8225, 12852, 12695, 16579, 18697, 8227, 1788, 12695, 16579, 18697, 8229, 1992, 12695, 16579, 18697, 8231, 12842, 12695, 16579, 18697, 8233, 1826, 12695, 16579, 18697, 8235, 7883, 2268, 12695, 16579, 18697, 8237, 3036, 12695, 16579, 18697, 8239, 184, 12695, 16579, 18697, 8241, 8964, 12695, 16579, 18697, 8243, 498, 12695, 16579, 18697, 8245, 7068, 12695, 16579, 18697, 8247, 7064, 12695, 16579, 18697, 8249, 260, 12695, 16579, 18697, 8251, 2502, 12695, 16579, 18697, 8253, 8992, 12695, 16579, 18697, 8255, 572, 12695, 16579, 18697, 8257, 8340, 12695, 16579, 18697, 8259, 3456, 12695, 16579, 18697, 8261, 2272, 12695, 16579, 18697, 8263, 7883, 342, 12695, 16579, 18697, 8265, 274, 12695, 16579, 18697, 8267, 12880, 12695, 16579, 18697, 8269, 202, 12695, 16579, 18697, 8271, 2006, 12695, 16579, 18697, 8273, 1212, 12695, 16579, 18697, 8275, 166, 12695, 16579, 18697, 8277, 684, 12695, 16579, 18697, 8279, 7883, 8732, 12695, 16579, 18697, 8281, 8720, 12695, 16579, 18697, 8283, 680, 12695, 16579, 18697, 8285, 286, 12695, 16579, 18697, 8287, 8346, 12695, 16579, 18697, 8289, 8334, 12695, 16579, 18697, 8291, 8472, 12695, 16579, 18697, 8293, 1468, 12695, 16579, 18697, 8295, 8656, 12695, 16579, 18697, 8297, 2486, 12695, 16579, 18697, 8299, 1678, 12695, 16579, 18697, 8301, 3574, 12695, 16579, 18697, 8303, 80, 12695, 16579, 18697, 8305, 3062, 12695, 16579, 18697, 8307, 1402, 12695, 16579, 19003, 15233, 3233, 19784, 12695, 16579, 19003, 15233, 10118, 12695, 16579, 19003, 15233, 13696, 12695, 16579, 19003, 15233, 16503, 19784, 12695, 16579, 19003, 15233, 18156, 12695, 16579, 19003, 15233, 18310, 12695, 16579, 19003, 15233, 19784, 12706, 12731, 9854, 12737, 3536, 12741, 9854, 12741, 9855, 317, 18774, 12741, 9855, 10641, 1217, 11552, 12741, 9855, 10641, 11763, 11392, 12741, 9855, 10641, 15451, 6430, 12741, 9855, 10641, 16389, 6430, 12741, 13758, 12753, 886, 12753, 10641, 14058, 12757, 5848, 12757, 17172, 12761, 6790, 12762, 12763, 6718, 12764, 12771, 14424, 12772, 12785, 6761, 9854, 12785, 13469, 9854, 12785, 16839, 9854, 12787, 13765, 18386, 12787, 13884, 12787, 13885, 18387, 10641, 1216, 12787, 13885, 18387, 10641, 9286, 12787, 14049, 18847, 896, 12787, 15621, 13885, 18386, 12787, 15621, 21125, 18386, 12787, 16153, 1217, 18386, 12787, 16153, 9287, 18386, 12787, 16153, 13765, 18386, 12787, 16727, 504, 12787, 16727, 842, 12787, 17074, 12787, 19020, 12787, 19674, 12787, 21124, 12802, 12809, 9854, 12889, 10641, 13614, 12962, 12973, 6561, 843, 13581, 10629, 11476, 12973, 6561, 11476, 12973, 6561, 11477, 843, 13581, 6561, 11476, 12973, 6561, 11477, 10641, 7292, 12973, 6561, 11477, 17793, 12973, 10629, 11476, 12973, 6561, 11477, 17793, 13581, 6561, 11476, 12973, 6561, 11571, 11476, 12973, 6561, 14049, 11476, 12973, 6561, 14625, 11476, 12973, 6561, 18471, 974, 12973, 6561, 18471, 7812, 12973, 6561, 18471, 10551, 7812, 12973, 6561, 20377, 11476, 12973, 6561, 23305, 11476, 12973, 6561, 23305, 11477, 635, 896, 12973, 10629, 843, 13581, 6561, 11476, 12973, 10629, 11476, 12973, 10629, 11477, 635, 7883, 896, 12973, 10629, 11477, 635, 14518, 12973, 10629, 11477, 843, 12973, 6561, 11476, 12973, 10629, 11477, 10641, 7292, 12973, 10629, 11477, 17793, 12973, 6561, 11476, 12973, 10629, 11571, 11476, 12973, 10629, 14049, 11476, 12973, 10629, 14625, 11476, 12973, 10629, 18471, 974, 12973, 10629, 18471, 7812, 12973, 10629, 18471, 10551, 7812, 12973, 10629, 20377, 11476, 12973, 10629, 23305, 11476, 12973, 10629, 23305, 11477, 635, 896, 12973, 12391, 13379, 8320, 12973, 12391, 17087, 8320, 12973, 12391, 18089, 2611, 7122, 12973, 12391, 18089, 2611, 14634, 12973, 12391, 18089, 2611, 17086, 12973, 12391, 18089, 2611, 19636, 12973, 12391, 18089, 13737, 18508, 12973, 12391, 18089, 13737, 20430, 12973, 12391, 18507, 8320, 12973, 12391, 20873, 8320, 13135, 13583, 8320, 13135, 14999, 504, 13135, 14999, 672, 13135, 14999, 2614, 13135, 14999, 5234, 13135, 14999, 6096, 13135, 14999, 6276, 13135, 14999, 7056, 13135, 14999, 7420, 13135, 14999, 7894, 13135, 14999, 8476, 13135, 14999, 8782, 13135, 14999, 9562, 13135, 14999, 9688, 13135, 14999, 10412, 13135, 14999, 11550, 13135, 14999, 11680, 13135, 14999, 12068, 13135, 14999, 13210, 13135, 14999, 13766, 13135, 14999, 15632, 13135, 14999, 16344, 13135, 14999, 16346, 13135, 14999, 16530, 13135, 14999, 16856, 13135, 14999, 18830, 13135, 14999, 20672, 13135, 16397, 8320, 13135, 18543, 16397, 8320, 13141, 2242, 13141, 14064, 13153, 73, 14993, 8320, 13153, 95, 14993, 8320, 13153, 9855, 13052, 13153, 9855, 15868, 13153, 9855, 17486, 13153, 9855, 17610, 13153, 9855, 17652, 13153, 9855, 20552, 13153, 11905, 2610, 13153, 11905, 3076, 13153, 11905, 3356, 13153, 11905, 6756, 13153, 11905, 6778, 13153, 11905, 8780, 13153, 11905, 10900, 13153, 11905, 11978, 13153, 11905, 13450, 13153, 11905, 13736, 13153, 14003, 9855, 8, 13153, 14003, 9855, 16, 13153, 14003, 9855, 28, 13153, 14003, 9855, 40, 13153, 14003, 9855, 58, 13153, 14003, 9855, 72, 13153, 14003, 9855, 94, 13153, 14003, 9855, 308, 13153, 14003, 9855, 676, 13153, 14003, 9855, 17493, 22, 13153, 14003, 9855, 17493, 34, 13153, 14003, 9855, 17493, 396, 13153, 14003, 9855, 17493, 582, 13153, 14880, 13153, 14999, 0, 13153, 14999, 8, 13153, 14999, 16, 13153, 14999, 28, 13153, 14999, 40, 13153, 14999, 58, 13153, 14999, 72, 13153, 14999, 94, 13153, 14999, 106, 13153, 14999, 124, 13153, 14999, 148, 13153, 14999, 244, 13153, 14999, 266, 13153, 14999, 308, 13153, 14999, 336, 13153, 14999, 350, 13153, 14999, 384, 13153, 14999, 416, 13153, 14999, 448, 13153, 14999, 522, 13153, 14999, 572, 13153, 14999, 588, 13153, 14999, 622, 13153, 14999, 676, 13153, 14999, 680, 13153, 14999, 694, 13153, 14999, 734, 13153, 14999, 932, 13153, 14999, 1044, 13153, 14999, 1142, 13153, 14999, 1164, 13153, 14999, 1492, 13153, 14999, 1796, 13153, 14999, 1914, 13153, 14999, 2152, 13153, 14999, 2444, 13153, 14999, 2492, 13153, 14999, 2556, 13153, 14999, 2676, 13153, 14999, 2912, 13153, 14999, 2956, 13153, 14999, 3048, 13153, 14999, 3114, 13153, 14999, 3242, 13153, 14999, 3322, 13153, 14999, 3772, 13153, 14999, 6314, 13153, 14999, 10264, 13153, 14999, 17493, 22, 13153, 14999, 17493, 34, 13153, 14999, 17493, 396, 13153, 14999, 17493, 582, 13153, 18089, 2611, 7122, 13153, 18089, 2611, 14634, 13153, 18089, 2611, 17086, 13153, 18089, 2611, 19636, 13153, 18089, 13737, 18508, 13153, 18089, 13737, 20430, 13155, 13563, 14999, 0, 13155, 13563, 14999, 8, 13155, 13563, 14999, 16, 13155, 13563, 14999, 28, 13155, 13563, 14999, 40, 13155, 13563, 14999, 70, 13155, 13563, 14999, 72, 13155, 13563, 14999, 266, 13155, 13563, 14999, 350, 13155, 13563, 14999, 384, 13155, 13563, 14999, 416, 13155, 13563, 14999, 448, 13155, 13563, 14999, 522, 13155, 13563, 14999, 588, 13155, 13563, 14999, 622, 13155, 13563, 14999, 694, 13155, 13563, 14999, 752, 13155, 13563, 14999, 826, 13155, 13563, 14999, 972, 13155, 13563, 14999, 1044, 13155, 13563, 14999, 1164, 13155, 13563, 14999, 1284, 13155, 13563, 14999, 1492, 13155, 13563, 14999, 1720, 13155, 13563, 14999, 1914, 13155, 13563, 14999, 2056, 13155, 13563, 14999, 2604, 13155, 13563, 14999, 3048, 13155, 13563, 14999, 3308, 13155, 13563, 14999, 3812, 13155, 13563, 14999, 6566, 13155, 13563, 14999, 6568, 13155, 13563, 14999, 6570, 13155, 13563, 14999, 10240, 13155, 13563, 14999, 11972, 13155, 13563, 14999, 11974, 13155, 16111, 14999, 0, 13155, 16111, 14999, 8, 13155, 16111, 14999, 16, 13155, 16111, 14999, 28, 13155, 16111, 14999, 40, 13155, 16111, 14999, 70, 13155, 16111, 14999, 72, 13155, 16111, 14999, 266, 13155, 16111, 14999, 350, 13155, 16111, 14999, 384, 13155, 16111, 14999, 416, 13155, 16111, 14999, 448, 13155, 16111, 14999, 522, 13155, 16111, 14999, 588, 13155, 16111, 14999, 622, 13155, 16111, 14999, 694, 13155, 16111, 14999, 752, 13155, 16111, 14999, 826, 13155, 16111, 14999, 972, 13155, 16111, 14999, 1044, 13155, 16111, 14999, 1164, 13155, 16111, 14999, 1284, 13155, 16111, 14999, 1492, 13155, 16111, 14999, 1720, 13155, 16111, 14999, 1914, 13155, 16111, 14999, 2056, 13155, 16111, 14999, 2604, 13155, 16111, 14999, 3048, 13155, 16111, 14999, 3308, 13155, 16111, 14999, 3812, 13155, 16111, 14999, 6566, 13155, 16111, 14999, 6568, 13155, 16111, 14999, 6570, 13155, 16111, 14999, 10240, 13155, 16111, 14999, 11972, 13155, 16111, 14999, 11974, 13161, 9854, 13174, 13176, 13179, 6718, 13185, 15376, 13199, 15672, 13200, 13239, 485, 17524, 13239, 485, 18179, 9854, 13248, 13254, 13257, 9854, 13259, 497, 15672, 13259, 13551, 15672, 13259, 15253, 15672, 13259, 15672, 13260, 13263, 15499, 15672, 13270, 13306, 13307, 14420, 13318, 13338, 13341, 859, 21097, 16088, 13341, 2175, 20309, 16088, 13341, 2611, 14635, 11578, 13341, 6751, 10092, 13341, 7123, 11571, 14486, 13341, 7123, 11578, 13341, 7127, 19773, 18514, 13341, 10086, 13341, 11445, 14414, 13341, 11446, 13341, 11447, 10641, 858, 13341, 11447, 10641, 19215, 15945, 11476, 13341, 11447, 14623, 21237, 15074, 13341, 11447, 16088, 13341, 11447, 16089, 10641, 1216, 13341, 11447, 17473, 10641, 15620, 13341, 11447, 21237, 15074, 13341, 11477, 10641, 13563, 14486, 13341, 11477, 10641, 16153, 9286, 13341, 11571, 18763, 13483, 16088, 13341, 11571, 20217, 16088, 13341, 11779, 16088, 13341, 11779, 16089, 12589, 7292, 13341, 11779, 16089, 13889, 7292, 13341, 11779, 16089, 15119, 13226, 13341, 12094, 13341, 13163, 7518, 13341, 14049, 11779, 16088, 13341, 14049, 14519, 16088, 13341, 14049, 15621, 16088, 13341, 14049, 18763, 13483, 16088, 13341, 14049, 20217, 16088, 13341, 14049, 20846, 13341, 14519, 16088, 13341, 14623, 21237, 16088, 13341, 14625, 11447, 16088, 13341, 14625, 11477, 10641, 17143, 7138, 13341, 14625, 15893, 12072, 13341, 14625, 19557, 8320, 13341, 14625, 20846, 13341, 15211, 14677, 20387, 17074, 13341, 15423, 18381, 16088, 13341, 15573, 19557, 8320, 13341, 15601, 14414, 13341, 15621, 16088, 13341, 15621, 16089, 10641, 10183, 317, 3293, 14518, 13341, 15621, 16089, 10641, 10183, 317, 14393, 14518, 13341, 15621, 16089, 10641, 13290, 13341, 15621, 16089, 10641, 18836, 13341, 15621, 16089, 12589, 14518, 13341, 15621, 16089, 13889, 14518, 13341, 15621, 16089, 19242, 13341, 15893, 12072, 13341, 16122, 13341, 17262, 13341, 17263, 10641, 2611, 13579, 10620, 13341, 17263, 10641, 13737, 13579, 14036, 13341, 17365, 14414, 13341, 18555, 887, 19048, 13341, 18599, 41, 16088, 13341, 18763, 13483, 16088, 13341, 18774, 13341, 18775, 11393, 7817, 18774, 13341, 18847, 897, 10641, 13290, 13341, 18847, 969, 7854, 13341, 20387, 17074, 13341, 20846, 13341, 20847, 12589, 7292, 13341, 20847, 13889, 7292, 13341, 20847, 19242, 13341, 21237, 16088, 13341, 22947, 16088, 13353, 6718, 13355, 91, 9854, 13355, 13881, 9854, 13355, 16257, 17197, 9854, 13355, 16899, 2610, 13355, 16899, 2611, 16502, 13355, 16899, 2611, 16503, 18744, 13355, 16899, 2611, 18744, 13355, 16899, 2611, 18745, 5, 6, 13355, 16899, 3076, 13355, 16899, 3077, 7803, 6776, 13355, 16899, 3232, 13355, 16899, 3233, 18744, 13355, 16899, 3356, 13355, 16899, 6756, 13355, 16899, 6757, 16502, 13355, 16899, 6757, 18744, 13355, 16899, 6778, 13355, 16899, 8780, 13355, 16899, 11978, 13355, 16899, 12080, 13355, 16899, 12081, 11967, 6776, 13355, 16899, 12081, 18744, 13355, 16899, 13450, 13355, 16899, 13736, 13355, 16899, 14638, 13355, 16899, 15818, 13355, 16899, 18543, 2611, 16502, 13355, 17193, 9854, 13355, 17197, 9854, 13355, 17221, 9854, 13355, 17831, 9854, 13355, 18579, 9854, 13355, 18977, 9854, 13355, 19219, 9854, 13355, 19555, 9854, 13355, 20393, 9854, 13357, 15694, 13357, 17084, 13367, 9854, 13369, 18076, 13377, 11773, 20876, 13377, 14303, 15672, 13377, 14999, 4, 13377, 14999, 6, 13377, 14999, 8, 13377, 14999, 12, 13377, 14999, 20, 13377, 14999, 28, 13377, 14999, 32, 13377, 14999, 42, 13377, 14999, 44, 13377, 14999, 46, 13377, 14999, 48, 13377, 14999, 50, 13377, 14999, 63, 0, 13377, 14999, 482, 13377, 14999, 496, 13377, 14999, 498, 13377, 14999, 507, 28, 13377, 14999, 596, 13377, 14999, 744, 13377, 14999, 1036, 13377, 14999, 1264, 13377, 14999, 1300, 13377, 14999, 1328, 13377, 14999, 1450, 13377, 14999, 1476, 13377, 14999, 1756, 13377, 14999, 1766, 13377, 14999, 5226, 13377, 14999, 5960, 13377, 14999, 6733, 6737, 227, 10, 13377, 14999, 6955, 7095, 12, 13377, 14999, 7443, 327, 1775, 16, 13377, 14999, 7451, 1308, 13377, 14999, 7607, 20, 13377, 14999, 9948, 13377, 14999, 10429, 673, 40, 13377, 14999, 11429, 11998, 13377, 14999, 11455, 0, 13377, 14999, 11674, 13377, 14999, 11841, 6271, 6, 13377, 14999, 11977, 191, 8, 13377, 14999, 12255, 14, 13377, 14999, 12405, 18, 13377, 14999, 12442, 13377, 14999, 13311, 2871, 9479, 34, 13377, 14999, 13529, 23277, 36, 13377, 14999, 13777, 3267, 3367, 38, 13377, 14999, 14079, 10663, 44, 13377, 14999, 14745, 14443, 62, 13377, 14999, 14745, 14443, 190, 13377, 14999, 14745, 14443, 326, 13377, 14999, 14745, 14443, 506, 13377, 14999, 14745, 14443, 5226, 13377, 14999, 14813, 14, 13377, 14999, 14866, 13377, 14999, 14983, 7787, 7879, 22, 13377, 14999, 15065, 2243, 24, 13377, 14999, 15157, 2559, 8607, 26, 13377, 14999, 15256, 13377, 14999, 15323, 15313, 30, 13377, 14999, 15595, 36, 13377, 14999, 16210, 13377, 14999, 16943, 12023, 28, 13377, 14999, 17673, 11559, 16073, 2, 13377, 14999, 17982, 13377, 14999, 17984, 13377, 14999, 17986, 13377, 14999, 18751, 13743, 13734, 13377, 14999, 21114, 13377, 14999, 22927, 0, 13377, 14999, 22928, 13377, 14999, 23103, 66, 13377, 14999, 23104, 13377, 14999, 23127, 28, 13377, 14999, 23129, 36, 13377, 14999, 23131, 38, 13377, 14999, 23275, 28, 13377, 14999, 23293, 24, 13377, 14999, 23295, 26, 13377, 14999, 23413, 24, 13377, 14999, 23479, 14, 13377, 14999, 23501, 14, 13377, 14999, 23521, 2, 13377, 15573, 20876, 13377, 17671, 15672, 13377, 18337, 20876, 13377, 18815, 15672, 13379, 9854, 13466, 13476, 13507, 671, 10086, 13507, 671, 10087, 10641, 18836, 13507, 671, 10087, 11393, 13507, 6435, 10086, 13507, 5815, 11477, 18471, 19215, 10155, 12973, 6560, 13507, 6435, 10086, 13507, 6435, 10087, 10641, 16946, 13507, 7817, 10086, 13507, 17237, 12973, 11476, 13507, 20375, 11477, 11393, 19407, 11476, 13507, 20547, 13581, 11476, 13508, 13542, 13544, 13545, 843, 19946, 13553, 485, 13236, 13558, 13563, 201, 6286, 13563, 3357, 6431, 9175, 2611, 1217, 20876, 13563, 3457, 10641, 18836, 13563, 5845, 16248, 13563, 6793, 9956, 13563, 7817, 11779, 16088, 13563, 7817, 18763, 13483, 16088, 13563, 7817, 20846, 13563, 9287, 9854, 13563, 11756, 13563, 11762, 13563, 13341, 11779, 16088, 13563, 13341, 18763, 13483, 16088, 13563, 13341, 20846, 13563, 13355, 16899, 2610, 13563, 13355, 16899, 2611, 16502, 13563, 13355, 16899, 2611, 18744, 13563, 13355, 16899, 3076, 13563, 13355, 16899, 3232, 13563, 13355, 16899, 3356, 13563, 13355, 16899, 6756, 13563, 13355, 16899, 6757, 16502, 13563, 13355, 16899, 6778, 13563, 13355, 16899, 8780, 13563, 13355, 16899, 11978, 13563, 13355, 16899, 12080, 13563, 13355, 16899, 13450, 13563, 13355, 16899, 13736, 13563, 13355, 16899, 14638, 13563, 13355, 16899, 15818, 13563, 13758, 13563, 14601, 9854, 13563, 14647, 9854, 13563, 15233, 9854, 13563, 15263, 16248, 13563, 16365, 484, 13563, 16365, 485, 10641, 16946, 13563, 16365, 485, 10641, 18847, 897, 93, 1299, 485, 20181, 15642, 13563, 17005, 9854, 13563, 17123, 17254, 13563, 17588, 13563, 17642, 13563, 17783, 91, 15100, 13563, 17783, 10641, 16946, 13563, 17783, 10641, 18847, 897, 93, 1299, 485, 20181, 15642, 13563, 18511, 8320, 13563, 18894, 13563, 19409, 9854, 13563, 19614, 13563, 19923, 92, 13563, 20685, 8320, 13563, 20727, 11762, 13563, 21097, 9854, 13563, 21110, 13565, 17074, 13568, 13570, 13572, 13577, 13293, 15621, 18392, 13577, 13293, 15621, 18393, 317, 11571, 15620, 13579, 19565, 19022, 13581, 6561, 11476, 13581, 6561, 11477, 635, 14518, 13581, 6561, 11477, 843, 13581, 10629, 11476, 13581, 6561, 11477, 10641, 7292, 13581, 6561, 11477, 17793, 12973, 6561, 11476, 13581, 6561, 11571, 11476, 13581, 6561, 14049, 11476, 13581, 6561, 14625, 11476, 13581, 6561, 18471, 974, 13581, 6561, 18471, 7812, 13581, 6561, 18471, 10551, 7812, 13581, 6561, 20377, 11476, 13581, 6561, 23305, 11476, 13581, 6561, 23305, 11477, 635, 896, 13581, 10629, 11476, 13581, 10629, 11477, 843, 12973, 10629, 11476, 13581, 10629, 11477, 10641, 7292, 13581, 10629, 11571, 11476, 13581, 10629, 14049, 11476, 13581, 10629, 14625, 11476, 13581, 10629, 18471, 974, 13581, 10629, 18471, 7812, 13581, 10629, 18471, 10551, 7812, 13581, 10629, 20377, 11476, 13581, 10629, 23305, 11476, 13581, 10629, 23305, 11477, 635, 896, 13582, 13594, 13597, 11571, 20375, 11476, 13598, 13609, 485, 14836, 13609, 485, 20520, 13619, 20224, 13627, 11692, 13648, 13653, 18895, 18392, 13663, 6286, 13683, 15717, 15287, 843, 5730, 13685, 9855, 13052, 13685, 9855, 15868, 13685, 9855, 17486, 13685, 9855, 17610, 13685, 11905, 2610, 13685, 11905, 3076, 13685, 11905, 3356, 13685, 11905, 6756, 13685, 11905, 6778, 13685, 11905, 8780, 13685, 11905, 10900, 13685, 11905, 11978, 13685, 11905, 13450, 13685, 11905, 13736, 13685, 14003, 9855, 8, 13685, 14003, 9855, 16, 13685, 14003, 9855, 28, 13685, 14003, 9855, 40, 13685, 14003, 9855, 58, 13685, 14003, 9855, 72, 13685, 14003, 9855, 94, 13685, 14003, 9855, 308, 13685, 14003, 9855, 676, 13685, 14999, 0, 13685, 14999, 8, 13685, 14999, 16, 13685, 14999, 28, 13685, 14999, 40, 13685, 14999, 58, 13685, 14999, 72, 13685, 14999, 94, 13685, 14999, 106, 13685, 14999, 124, 13685, 14999, 148, 13685, 14999, 244, 13685, 14999, 266, 13685, 14999, 308, 13685, 14999, 336, 13685, 14999, 350, 13685, 14999, 384, 13685, 14999, 416, 13685, 14999, 448, 13685, 14999, 522, 13685, 14999, 572, 13685, 14999, 588, 13685, 14999, 622, 13685, 14999, 676, 13685, 14999, 680, 13685, 14999, 734, 13685, 14999, 932, 13685, 14999, 1044, 13685, 14999, 1142, 13685, 14999, 1164, 13685, 14999, 1492, 13685, 14999, 1796, 13685, 14999, 1914, 13685, 14999, 2444, 13685, 14999, 2492, 13685, 14999, 2556, 13685, 14999, 2676, 13685, 14999, 2956, 13685, 14999, 3048, 13685, 14999, 3242, 13685, 14999, 3322, 13685, 14999, 6314, 13685, 14999, 10264, 13687, 91, 11393, 9854, 13687, 95, 14993, 8320, 13687, 494, 13687, 1141, 9854, 13687, 9855, 15868, 13687, 9855, 17486, 13687, 9855, 17610, 13687, 10773, 9854, 13687, 11887, 9854, 13687, 11905, 2610, 13687, 11905, 3076, 13687, 11905, 3356, 13687, 11905, 6756, 13687, 11905, 6778, 13687, 11905, 8780, 13687, 11905, 10900, 13687, 11905, 11978, 13687, 11905, 13450, 13687, 11905, 13736, 13687, 12755, 9854, 13687, 13379, 9854, 13687, 14003, 9855, 8, 13687, 14003, 9855, 16, 13687, 14003, 9855, 28, 13687, 14003, 9855, 40, 13687, 14003, 9855, 58, 13687, 14003, 9855, 72, 13687, 14003, 9855, 94, 13687, 14003, 9855, 184, 13687, 14003, 9855, 308, 13687, 14003, 9855, 498, 13687, 14003, 9855, 676, 13687, 14529, 9854, 13687, 14999, 0, 13687, 14999, 8, 13687, 14999, 16, 13687, 14999, 28, 13687, 14999, 40, 13687, 14999, 58, 13687, 14999, 72, 13687, 14999, 94, 13687, 14999, 124, 13687, 14999, 184, 13687, 14999, 266, 13687, 14999, 308, 13687, 14999, 336, 13687, 14999, 350, 13687, 14999, 384, 13687, 14999, 416, 13687, 14999, 448, 13687, 14999, 498, 13687, 14999, 522, 13687, 14999, 572, 13687, 14999, 588, 13687, 14999, 622, 13687, 14999, 676, 13687, 14999, 680, 13687, 14999, 734, 13687, 14999, 2152, 13687, 14999, 2444, 13687, 14999, 2492, 13687, 14999, 2556, 13687, 14999, 2956, 13687, 14999, 3048, 13687, 14999, 3114, 13687, 14999, 3322, 13687, 14999, 7874, 13687, 14999, 8842, 13687, 15233, 2611, 16502, 13687, 15233, 2611, 18744, 13687, 15233, 3232, 13687, 15233, 9854, 13707, 9854, 13717, 6421, 2511, 12032, 13717, 14656, 13729, 13239, 12682, 13737, 1217, 20876, 13737, 9475, 7816, 13737, 9475, 11392, 13737, 9475, 11552, 13737, 9475, 13340, 13737, 12573, 19945, 7816, 13737, 12573, 19945, 13340, 13737, 14421, 12762, 13737, 15601, 16096, 13737, 17045, 11571, 9950, 13737, 19407, 14312, 13737, 19465, 19006, 13737, 20375, 14312, 13737, 20573, 14647, 13532, 13737, 20607, 11446, 13754, 13755, 6718, 13757, 20481, 19638, 13758, 13759, 10641, 1217, 11392, 13759, 10641, 1217, 11552, 13759, 10641, 9503, 11392, 13759, 18386, 13759, 18387, 10641, 1217, 11392, 13759, 18387, 10641, 15451, 6430, 13759, 18387, 11393, 19407, 11476, 13759, 18387, 11393, 20375, 11476, 13763, 11742, 13765, 10641, 7817, 7123, 11570, 13765, 10641, 13341, 7123, 11570, 13771, 6718, 13787, 13804, 13801, 15464, 13809, 8321, 9854, 13810, 13848, 13884, 13885, 10641, 12741, 9854, 13885, 10641, 16727, 504, 13885, 10641, 16946, 13885, 11393, 897, 11393, 21124, 13885, 11393, 21124, 13885, 14373, 843, 14889, 10641, 13884, 13889, 2611, 14635, 11578, 13889, 7123, 11578, 13889, 7123, 14486, 13889, 7123, 16529, 14049, 14486, 13889, 7817, 505, 12589, 13341, 11779, 16089, 17178, 13889, 7817, 14519, 10641, 1216, 13889, 7817, 18505, 17755, 858, 13889, 7817, 18774, 13889, 11573, 18566, 13889, 13341, 505, 12589, 7817, 11779, 16089, 17178, 13889, 13341, 15306, 13889, 13341, 18505, 17755, 858, 13889, 13341, 18583, 14049, 14486, 13889, 13341, 18583, 14049, 15620, 13889, 13341, 18774, 13889, 13341, 22823, 14049, 15620, 13983, 9855, 7883, 17610, 13983, 9855, 15461, 7883, 17610, 13983, 9855, 15752, 13983, 9855, 17139, 21004, 13983, 9855, 17487, 15840, 13983, 9855, 17487, 15841, 10641, 10092, 13983, 9855, 17487, 17318, 13983, 9855, 17487, 17608, 13983, 9855, 17487, 17609, 10641, 10092, 13983, 9855, 17611, 18827, 12774, 13983, 9855, 17611, 20978, 13983, 9855, 17611, 20979, 10641, 10092, 13983, 9855, 17611, 21000, 13983, 9855, 17611, 21020, 13983, 9855, 18141, 7883, 17610, 13983, 9855, 18543, 17487, 15840, 13983, 9855, 18543, 17487, 17608, 13983, 9855, 19474, 13983, 9855, 20517, 16809, 17318, 13983, 9855, 20756, 13983, 9855, 20974, 13983, 9855, 21004, 13983, 10219, 1217, 11552, 13983, 10219, 3357, 6431, 11552, 13983, 10219, 9503, 11392, 13983, 10219, 13464, 13983, 10219, 13737, 6431, 11552, 13983, 10219, 14435, 11392, 13983, 10219, 14435, 11552, 13983, 10219, 14625, 9503, 11392, 13983, 10219, 14625, 17318, 13983, 10219, 15781, 17318, 13983, 10219, 16561, 17608, 13983, 10219, 17064, 13983, 10219, 18202, 13983, 10219, 18545, 18205, 20741, 17318, 13983, 10219, 20517, 16561, 20741, 17318, 13983, 10219, 20517, 16561, 20741, 17319, 19608, 13983, 10219, 20517, 19861, 20741, 17318, 13983, 10219, 20517, 20741, 17318, 13983, 10219, 21013, 20741, 17318, 13988, 13993, 6922, 13993, 14424, 13996, 14030, 14033, 9292, 14033, 10620, 14033, 14498, 14033, 16098, 14039, 1019, 6718, 14039, 6718, 14042, 14047, 485, 14578, 14049, 671, 18471, 12388, 14049, 671, 18471, 17655, 12388, 14049, 2462, 14049, 3136, 14049, 3137, 10641, 9474, 14049, 3137, 10641, 13563, 11748, 14049, 3137, 14369, 11748, 14049, 3137, 14369, 11749, 10641, 9466, 14049, 6091, 9970, 14049, 6435, 18471, 7817, 7127, 12388, 14049, 6435, 18471, 12388, 14049, 6435, 18471, 17655, 12388, 14049, 6758, 14049, 6759, 10641, 20181, 15119, 11571, 15640, 14049, 6779, 17045, 6122, 14049, 6779, 17045, 9950, 14049, 7131, 13483, 14723, 6410, 14049, 7817, 7797, 12698, 14049, 7817, 18471, 12388, 14049, 7817, 18471, 17655, 12388, 14049, 9950, 14049, 10533, 13563, 15620, 14049, 11477, 13457, 14055, 2610, 14049, 11477, 13457, 14055, 3357, 15734, 14049, 11703, 7672, 14049, 11703, 9220, 14049, 11703, 9518, 14049, 11703, 13286, 14049, 11703, 14382, 14049, 11703, 14950, 14049, 12275, 9970, 14049, 12277, 11695, 8320, 14049, 12537, 15620, 14049, 12541, 11772, 14049, 13341, 18471, 12388, 14049, 13341, 18471, 17655, 12388, 14049, 13501, 13226, 14049, 13563, 9950, 14049, 13563, 15620, 14049, 13563, 16732, 14049, 13585, 9970, 14049, 14418, 14049, 14486, 14049, 14487, 10641, 1217, 13340, 14049, 14487, 10641, 3357, 6430, 14049, 14487, 10641, 6435, 11476, 14049, 14487, 10641, 12589, 7817, 18504, 14049, 14487, 10641, 12589, 13341, 18504, 14049, 14487, 10641, 13889, 7817, 18504, 14049, 14487, 10641, 13889, 13341, 18504, 14049, 14487, 19937, 11571, 13563, 14486, 14049, 14726, 14049, 15095, 9950, 14049, 15095, 13563, 15620, 14049, 15095, 15620, 14049, 15095, 16248, 14049, 15095, 16732, 14049, 15519, 1216, 14049, 15620, 14049, 15621, 10641, 12589, 7817, 18504, 14049, 15621, 10641, 12589, 13341, 18504, 14049, 15621, 10641, 13889, 7817, 18504, 14049, 15621, 10641, 13889, 13341, 18504, 14049, 15621, 10641, 14455, 18847, 7854, 14049, 15621, 10641, 17143, 16184, 14049, 15621, 10641, 18847, 18943, 7854, 14049, 15621, 10641, 19407, 10182, 14049, 15621, 10641, 20375, 10182, 14049, 15621, 14420, 14049, 15621, 19937, 11571, 10533, 13563, 15620, 14049, 15621, 19937, 11571, 13563, 15620, 14049, 15621, 19937, 11571, 15095, 15620, 14049, 16248, 14049, 16249, 317, 15620, 14049, 16249, 9970, 14049, 16249, 10641, 16127, 1216, 14049, 16249, 19937, 11571, 10533, 13563, 16248, 14049, 16249, 19937, 11571, 13563, 16248, 14049, 16249, 19937, 11571, 15095, 16248, 14049, 16492, 14049, 16733, 19937, 11571, 13563, 16732, 14049, 17000, 14049, 17245, 6718, 14049, 17443, 7817, 3537, 17392, 14049, 17995, 2242, 14049, 17995, 7672, 14049, 18072, 14049, 18095, 6718, 14049, 18446, 14049, 18511, 8321, 18392, 14049, 18566, 14049, 18775, 19937, 13563, 14049, 18774, 14049, 18847, 896, 14049, 18847, 16366, 14049, 18847, 19566, 14049, 19332, 14049, 19566, 14049, 19772, 14049, 19787, 19772, 14049, 19790, 14049, 20181, 16366, 14049, 20685, 8321, 18392, 14049, 20973, 13563, 18774, 14049, 20973, 18774, 14049, 20973, 18775, 10641, 1216, 14049, 22807, 16248, 14049, 22807, 16249, 10641, 19407, 10182, 14049, 22807, 16249, 10641, 20375, 10182, 14049, 22821, 13563, 18774, 14049, 22821, 18774, 14049, 22867, 13563, 18774, 14049, 22867, 17046, 14049, 22867, 18774, 14049, 22888, 14049, 23121, 13563, 18774, 14049, 23121, 17046, 14049, 23121, 18446, 14049, 23121, 18774, 14063, 18212, 14064, 14065, 10641, 11623, 6556, 14069, 2246, 14267, 1221, 16791, 12087, 17308, 14267, 10651, 19619, 1216, 14267, 10651, 19619, 7854, 14267, 11695, 8320, 14267, 15027, 16791, 12087, 17308, 14267, 15233, 2610, 14267, 15233, 2611, 16502, 14267, 15233, 2611, 18744, 14267, 15233, 3076, 14267, 15233, 3077, 16502, 14267, 15233, 3077, 18744, 14267, 15233, 3232, 14267, 15233, 3233, 18744, 14267, 15233, 3356, 14267, 15233, 3357, 16502, 14267, 15233, 3357, 18744, 14267, 15233, 6756, 14267, 15233, 6757, 16502, 14267, 15233, 6757, 18744, 14267, 15233, 6778, 14267, 15233, 6779, 16502, 14267, 15233, 6779, 18744, 14267, 15233, 8780, 14267, 15233, 8781, 16502, 14267, 15233, 8781, 18744, 14267, 15233, 11978, 14267, 15233, 11979, 16502, 14267, 15233, 11979, 18744, 14267, 15233, 12080, 14267, 15233, 12081, 18744, 14267, 15233, 12108, 14267, 15233, 12109, 18744, 14267, 15233, 13450, 14267, 15233, 13451, 16502, 14267, 15233, 13451, 18744, 14267, 15233, 13538, 14267, 15233, 13539, 18744, 14267, 15233, 13736, 14267, 15233, 13737, 16502, 14267, 15233, 13737, 18744, 14267, 15233, 14636, 14267, 15233, 14637, 18744, 14267, 15233, 15194, 14267, 15233, 15195, 18744, 14267, 15233, 15736, 14267, 15233, 15737, 18744, 14267, 15233, 15820, 14267, 15233, 15821, 18744, 14267, 15233, 17190, 14267, 15233, 17191, 18744, 14267, 15891, 5745, 10422, 14267, 15891, 12087, 17308, 14267, 15891, 13729, 17308, 14267, 15891, 14741, 17308, 14267, 15891, 15507, 17308, 14267, 16791, 13729, 17308, 14267, 16791, 15507, 17308, 14269, 17394, 14281, 12005, 505, 12005, 634, 14281, 12005, 634, 14281, 12005, 635, 10641, 19921, 14262, 14284, 14299, 1299, 485, 5308, 14299, 2892, 14299, 6291, 19618, 14299, 6757, 17045, 9950, 14299, 6793, 9956, 14299, 7817, 18907, 11392, 14299, 7817, 18907, 11552, 14299, 8321, 8849, 14782, 14299, 8321, 18599, 8849, 14782, 14299, 9171, 17810, 14299, 9171, 18046, 14299, 9171, 18206, 14299, 9855, 9459, 15983, 5270, 14299, 9855, 12744, 14299, 9855, 13402, 14299, 9855, 13422, 14299, 9855, 14277, 17638, 14299, 9855, 15476, 14299, 9855, 15571, 18894, 14299, 9855, 15571, 21175, 2282, 14299, 9855, 19766, 14299, 9855, 20881, 14276, 14299, 9855, 20905, 14277, 19842, 14299, 10093, 18090, 14299, 10219, 2611, 1217, 11392, 14299, 10219, 2611, 1217, 11552, 14299, 10219, 3357, 6431, 11392, 14299, 10219, 3357, 6431, 11552, 14299, 10219, 7889, 11392, 14299, 10219, 7889, 11552, 14299, 10623, 12261, 11552, 14299, 11762, 14299, 11779, 11852, 14299, 11779, 12066, 14299, 11779, 12440, 14299, 11779, 17810, 14299, 11779, 18046, 14299, 11779, 18206, 14299, 11852, 14299, 11853, 10641, 1216, 14299, 11853, 15093, 6776, 14299, 11853, 18191, 6776, 14299, 11989, 14455, 2175, 9956, 14299, 11989, 14455, 7171, 9956, 14299, 12066, 14299, 12067, 10641, 1217, 11392, 14299, 12067, 10641, 3357, 6430, 14299, 12067, 10641, 9502, 14299, 12067, 15093, 6776, 14299, 12067, 18191, 6776, 14299, 12261, 11392, 14299, 12261, 11552, 14299, 12440, 14299, 12441, 10641, 1217, 11552, 14299, 12441, 15093, 6776, 14299, 12441, 18191, 6776, 14299, 13239, 485, 15470, 14299, 13341, 18907, 11392, 14299, 13341, 18907, 11393, 10641, 1216, 14299, 13341, 18907, 11552, 14299, 13563, 2175, 8356, 14299, 13563, 2175, 8849, 10641, 12440, 14299, 13563, 2175, 9716, 14299, 13563, 3532, 14299, 13563, 3696, 14299, 13563, 7171, 826, 14299, 13563, 7171, 2077, 5246, 14299, 13563, 7171, 2764, 14299, 13563, 7171, 3010, 14299, 13563, 7171, 3194, 14299, 13563, 7171, 3532, 14299, 13563, 7171, 3696, 14299, 13563, 7171, 7464, 14299, 13563, 7171, 8357, 16525, 6776, 14299, 13563, 7171, 8357, 18191, 6776, 14299, 13563, 7171, 8848, 14299, 13563, 7171, 8849, 10641, 12440, 14299, 13563, 7171, 9716, 14299, 13563, 7171, 9855, 13402, 14299, 13563, 7171, 10651, 2792, 14299, 13563, 7171, 10651, 13408, 14299, 13563, 7171, 10651, 14026, 14299, 13563, 7171, 10651, 14296, 14299, 13563, 7171, 10651, 15988, 14299, 13563, 7171, 10651, 17636, 14299, 13563, 7171, 10651, 21010, 14299, 13563, 7171, 10890, 14299, 13563, 7171, 12642, 14299, 13563, 7171, 13737, 6430, 14299, 13563, 7171, 16279, 7139, 485, 7634, 14299, 13563, 7171, 17143, 10900, 14299, 13563, 7171, 17459, 20883, 10900, 14299, 13563, 7171, 18079, 15074, 14299, 13563, 7171, 18249, 2765, 10641, 2077, 10641, 5247, 16754, 14299, 13563, 7171, 18249, 3011, 10641, 2077, 10641, 5247, 16754, 14299, 13563, 7171, 18249, 5247, 10641, 2077, 10641, 3696, 14299, 13563, 11852, 14299, 13563, 12066, 14299, 13563, 12440, 14299, 13617, 485, 2969, 199, 7174, 14299, 13642, 14299, 13643, 15093, 6776, 14299, 13643, 18191, 6776, 14299, 14003, 9855, 1217, 11552, 14299, 14003, 9855, 13563, 43, 11392, 14299, 14003, 9855, 18183, 13563, 43, 11392, 14299, 14625, 13341, 18907, 11392, 14299, 14625, 13341, 18907, 11393, 10641, 1216, 14299, 14999, 8, 14299, 14999, 9, 12085, 6776, 14299, 14999, 9, 15093, 6776, 14299, 14999, 9, 16525, 6776, 14299, 14999, 9, 18191, 6776, 14299, 14999, 40, 14299, 14999, 41, 10641, 12261, 11392, 14299, 14999, 41, 10641, 12261, 11393, 18191, 6776, 14299, 14999, 41, 12085, 6776, 14299, 14999, 41, 18191, 6776, 14299, 14999, 66, 14299, 14999, 456, 14299, 14999, 457, 12085, 6776, 14299, 14999, 457, 15093, 6776, 14299, 14999, 457, 16525, 6776, 14299, 14999, 457, 18191, 6776, 14299, 14999, 482, 14299, 14999, 483, 12085, 6776, 14299, 14999, 483, 18191, 6776, 14299, 14999, 682, 14299, 14999, 683, 12085, 6776, 14299, 14999, 683, 18191, 6776, 14299, 14999, 746, 14299, 14999, 747, 12085, 6776, 14299, 14999, 747, 18191, 6776, 14299, 14999, 826, 14299, 14999, 827, 10641, 3357, 6431, 11392, 14299, 14999, 827, 10641, 3357, 6431, 20505, 11392, 14299, 14999, 827, 10641, 13737, 6431, 11392, 14299, 14999, 827, 10641, 13737, 6431, 11552, 14299, 14999, 827, 10641, 13737, 6431, 18471, 19215, 11392, 14299, 14999, 827, 12085, 6776, 14299, 14999, 827, 15093, 6776, 14299, 14999, 827, 16525, 6776, 14299, 14999, 827, 18191, 6776, 14299, 14999, 920, 14299, 14999, 921, 10641, 1217, 11553, 843, 13737, 6431, 11392, 14299, 14999, 921, 10641, 3357, 6431, 11553, 843, 1217, 11392, 14299, 14999, 921, 10641, 12261, 11392, 14299, 14999, 921, 10641, 13563, 42, 14299, 14999, 921, 10641, 13563, 43, 11552, 14299, 14999, 921, 10641, 13563, 8357, 11392, 14299, 14999, 921, 10641, 13737, 6431, 18471, 17463, 11552, 14299, 14999, 921, 10641, 13737, 6431, 18471, 17463, 11553, 843, 3357, 6431, 11392, 14299, 14999, 921, 10641, 13737, 6431, 21109, 11552, 14299, 14999, 921, 10641, 18183, 13563, 43, 11552, 14299, 14999, 921, 12085, 6776, 14299, 14999, 921, 15093, 6776, 14299, 14999, 921, 16525, 6776, 14299, 14999, 921, 18191, 6776, 14299, 14999, 1120, 14299, 14999, 1121, 10641, 1217, 11552, 14299, 14999, 1121, 12085, 6776, 14299, 14999, 1121, 15093, 6776, 14299, 14999, 1121, 16525, 6776, 14299, 14999, 1121, 18191, 6776, 14299, 14999, 1128, 14299, 14999, 1129, 10641, 1217, 11552, 14299, 14999, 1129, 10641, 1217, 11553, 843, 13563, 3194, 14299, 14999, 1129, 10641, 3357, 6431, 20505, 11553, 843, 13563, 3194, 14299, 14999, 1129, 10641, 6779, 6431, 11392, 14299, 14999, 1129, 10641, 9502, 14299, 14999, 1129, 10641, 13737, 6431, 11393, 19214, 14299, 14999, 1129, 10641, 13737, 6431, 11552, 14299, 14999, 1129, 10641, 18183, 42, 14299, 14999, 1129, 10641, 18183, 13563, 43, 11552, 14299, 14999, 1129, 12085, 6776, 14299, 14999, 1129, 18191, 6776, 14299, 14999, 1228, 14299, 14999, 1229, 12085, 6776, 14299, 14999, 1229, 18191, 6776, 14299, 14999, 1366, 14299, 14999, 1367, 10641, 1217, 11552, 14299, 14999, 1367, 10641, 1217, 11553, 843, 13737, 6431, 11392, 14299, 14999, 1367, 10641, 1217, 12767, 11552, 14299, 14999, 1367, 10641, 3357, 6431, 11552, 14299, 14999, 1367, 10641, 13737, 6431, 11552, 14299, 14999, 1367, 10641, 13737, 6431, 18471, 17463, 11552, 14299, 14999, 1367, 12085, 6776, 14299, 14999, 1367, 15093, 6776, 14299, 14999, 1367, 16525, 6776, 14299, 14999, 1367, 18191, 6776, 14299, 14999, 1434, 14299, 14999, 1435, 10641, 3357, 6431, 11552, 14299, 14999, 1435, 10641, 9502, 14299, 14999, 1435, 10641, 13737, 6431, 11392, 14299, 14999, 1435, 10641, 18183, 15642, 14299, 14999, 1435, 12085, 6776, 14299, 14999, 1435, 15093, 6776, 14299, 14999, 1435, 16525, 6776, 14299, 14999, 1435, 18191, 6776, 14299, 14999, 1582, 14299, 14999, 1583, 10641, 3357, 6431, 11392, 14299, 14999, 1583, 10641, 3357, 6431, 18847, 11392, 14299, 14999, 1583, 10641, 12261, 11392, 14299, 14999, 1583, 10641, 13563, 14299, 14999, 3195, 843, 3357, 6430, 14299, 14999, 1583, 10641, 13563, 14299, 14999, 3195, 11392, 14299, 14999, 1583, 10641, 13563, 14299, 14999, 3195, 11552, 14299, 14999, 1583, 10641, 13737, 6431, 11392, 14299, 14999, 1583, 10641, 13737, 6431, 18471, 17463, 11552, 14299, 14999, 1583, 10641, 18043, 21003, 11905, 6779, 11552, 14299, 14999, 1583, 12085, 6776, 14299, 14999, 1583, 15093, 6776, 14299, 14999, 1583, 16525, 6776, 14299, 14999, 1583, 18191, 6776, 14299, 14999, 1608, 14299, 14999, 1609, 7044, 14299, 14999, 1609, 7045, 10641, 12261, 11392, 14299, 14999, 1609, 7045, 12085, 6776, 14299, 14999, 1609, 7045, 15093, 6776, 14299, 14999, 1609, 7045, 16525, 6776, 14299, 14999, 1609, 7045, 18191, 6776, 14299, 14999, 1609, 10641, 3697, 11392, 14299, 14999, 1609, 10641, 3697, 11393, 12085, 6776, 14299, 14999, 1609, 10641, 3697, 11393, 18191, 6776, 14299, 14999, 1609, 10641, 18183, 42, 14299, 14999, 1609, 12085, 6776, 14299, 14999, 1609, 15093, 6776, 14299, 14999, 1609, 16525, 6776, 14299, 14999, 1609, 18191, 6776, 14299, 14999, 1609, 20612, 14299, 14999, 1609, 20613, 12085, 6776, 14299, 14999, 1609, 20613, 15093, 6776, 14299, 14999, 1609, 20613, 16525, 6776, 14299, 14999, 1609, 20613, 18191, 6776, 14299, 14999, 1790, 14299, 14999, 1791, 12085, 6776, 14299, 14999, 1791, 18191, 6776, 14299, 14999, 1866, 14299, 14999, 1867, 10641, 1217, 11392, 14299, 14999, 1867, 10641, 1217, 11552, 14299, 14999, 1867, 10641, 3357, 6431, 11392, 14299, 14999, 1867, 10641, 9502, 14299, 14999, 1867, 10641, 13737, 6431, 11552, 14299, 14999, 1867, 12085, 6776, 14299, 14999, 1867, 15093, 6776, 14299, 14999, 1867, 16525, 6776, 14299, 14999, 1867, 18191, 6776, 14299, 14999, 2076, 14299, 14999, 2077, 10641, 896, 14299, 14999, 2077, 10641, 1217, 11392, 14299, 14999, 2077, 10641, 13563, 42, 14299, 14999, 2077, 10641, 13737, 6431, 11392, 14299, 14999, 2077, 10641, 13737, 6431, 11552, 14299, 14999, 2077, 10641, 14625, 896, 14299, 14999, 2077, 12085, 6776, 14299, 14999, 2077, 15093, 6776, 14299, 14999, 2077, 16525, 6776, 14299, 14999, 2077, 18191, 6776, 14299, 14999, 2175, 5246, 14299, 14999, 2666, 14299, 14999, 2667, 10641, 13563, 8357, 11392, 14299, 14999, 2667, 12085, 6776, 14299, 14999, 2667, 15093, 6776, 14299, 14999, 2667, 16525, 6776, 14299, 14999, 2667, 18191, 6776, 14299, 14999, 2764, 14299, 14999, 2765, 10641, 1217, 11392, 14299, 14999, 2765, 10641, 1217, 11552, 14299, 14999, 2765, 10641, 13737, 6431, 11392, 14299, 14999, 2765, 12085, 6776, 14299, 14999, 2765, 15093, 6776, 14299, 14999, 2765, 16525, 6776, 14299, 14999, 2765, 18191, 6776, 14299, 14999, 2900, 14299, 14999, 2901, 10641, 1217, 11552, 14299, 14999, 2901, 10641, 1217, 11553, 843, 1217, 11392, 14299, 14999, 2901, 10641, 3357, 6431, 11392, 14299, 14999, 2901, 10641, 3357, 6431, 20505, 11392, 14299, 14999, 2901, 10641, 6779, 6431, 11392, 14299, 14999, 2901, 10641, 7888, 14299, 14999, 2901, 10641, 9502, 14299, 14999, 2901, 10641, 12261, 11392, 14299, 14999, 2901, 10641, 13563, 42, 14299, 14999, 2901, 10641, 13563, 43, 11552, 14299, 14999, 2901, 10641, 13563, 8849, 11392, 14299, 14999, 2901, 10641, 13563, 14299, 14999, 3195, 843, 3357, 6430, 14299, 14999, 2901, 10641, 15642, 14299, 14999, 2901, 10641, 18183, 42, 14299, 14999, 2901, 12085, 6776, 14299, 14999, 2901, 18191, 6776, 14299, 14999, 3010, 14299, 14999, 3011, 10641, 3357, 6431, 11552, 14299, 14999, 3011, 10641, 13737, 6431, 11392, 14299, 14999, 3011, 10641, 13737, 6431, 11552, 14299, 14999, 3011, 12085, 6776, 14299, 14999, 3011, 15093, 6776, 14299, 14999, 3011, 16525, 6776, 14299, 14999, 3011, 18191, 6776, 14299, 14999, 3194, 14299, 14999, 3195, 10641, 3357, 6431, 11392, 14299, 14999, 3195, 10641, 13737, 6431, 11392, 14299, 14999, 3195, 12085, 6776, 14299, 14999, 3195, 15093, 6776, 14299, 14999, 3195, 16525, 6776, 14299, 14999, 3195, 18191, 6776, 14299, 14999, 3228, 14299, 14999, 3229, 10641, 9502, 14299, 14999, 3229, 10641, 13563, 3229, 11392, 14299, 14999, 3229, 10641, 13737, 6431, 11393, 19214, 14299, 14999, 3229, 12085, 6776, 14299, 14999, 3229, 15093, 6776, 14299, 14999, 3229, 16525, 6776, 14299, 14999, 3229, 16768, 14299, 14999, 3229, 16769, 7044, 14299, 14999, 3229, 16769, 12085, 6776, 14299, 14999, 3229, 16769, 18191, 6776, 14299, 14999, 3229, 18191, 6776, 14299, 14999, 3458, 14299, 14999, 3459, 12085, 6776, 14299, 14999, 3459, 15093, 6776, 14299, 14999, 3459, 16525, 6776, 14299, 14999, 3459, 18191, 6776, 14299, 14999, 3532, 14299, 14999, 3533, 10641, 1217, 11392, 14299, 14999, 3533, 10641, 1217, 15900, 14299, 14999, 3533, 10641, 3357, 6431, 11392, 14299, 14999, 3533, 10641, 9502, 14299, 14999, 3533, 10641, 12261, 11392, 14299, 14999, 3533, 10641, 12261, 11393, 12085, 6776, 14299, 14999, 3533, 10641, 12261, 11393, 18191, 6776, 14299, 14999, 3533, 10641, 18043, 21003, 11905, 3357, 11392, 14299, 14999, 3533, 10641, 18043, 21003, 11905, 13737, 11392, 14299, 14999, 3533, 12085, 6776, 14299, 14999, 3533, 18191, 6776, 14299, 14999, 3696, 14299, 14999, 3697, 10641, 3357, 6431, 11553, 843, 1217, 11392, 14299, 14999, 3697, 10641, 3357, 6431, 11553, 843, 12261, 11392, 14299, 14999, 3697, 10641, 3357, 6431, 11553, 843, 13563, 8849, 11392, 14299, 14999, 3697, 10641, 10092, 14299, 14999, 3697, 10641, 12261, 11392, 14299, 14999, 3697, 10641, 12261, 11393, 12085, 6776, 14299, 14999, 3697, 10641, 12261, 11393, 15093, 6776, 14299, 14999, 3697, 10641, 12261, 11393, 16525, 6776, 14299, 14999, 3697, 10641, 12261, 11393, 18191, 6776, 14299, 14999, 3697, 10641, 13563, 42, 14299, 14999, 3697, 10641, 13737, 6431, 11552, 14299, 14999, 3697, 12085, 6776, 14299, 14999, 3697, 14358, 14299, 14999, 3697, 14359, 10641, 12261, 11392, 14299, 14999, 3697, 14359, 10641, 12261, 11393, 12085, 6776, 14299, 14999, 3697, 14359, 10641, 12261, 11393, 18191, 6776, 14299, 14999, 3697, 14359, 10641, 18043, 21003, 11905, 3357, 11392, 14299, 14999, 3697, 14359, 10641, 18043, 21003, 11905, 13737, 11392, 14299, 14999, 3697, 14359, 12085, 6776, 14299, 14999, 3697, 14359, 18191, 6776, 14299, 14999, 3697, 15093, 6776, 14299, 14999, 3697, 16525, 6776, 14299, 14999, 3697, 18191, 6776, 14299, 14999, 3790, 14299, 14999, 3791, 12085, 6776, 14299, 14999, 3791, 15093, 6776, 14299, 14999, 3791, 16525, 6776, 14299, 14999, 3791, 18191, 6776, 14299, 14999, 5246, 14299, 14999, 5247, 10641, 10623, 12261, 11392, 14299, 14999, 5247, 10641, 10623, 12261, 11552, 14299, 14999, 5247, 10641, 12261, 11392, 14299, 14999, 5247, 10641, 12261, 11393, 12085, 6776, 14299, 14999, 5247, 10641, 12261, 11393, 18191, 6776, 14299, 14999, 5247, 10641, 12261, 11552, 14299, 14999, 5247, 10641, 12261, 11553, 12085, 6776, 14299, 14999, 5247, 10641, 12261, 11553, 18191, 6776, 14299, 14999, 5247, 10641, 12643, 11392, 14299, 14999, 5247, 10641, 12643, 11393, 12085, 6776, 14299, 14999, 5247, 10641, 12643, 11393, 18191, 6776, 14299, 14999, 5247, 10641, 18043, 21003, 11905, 3357, 11392, 14299, 14999, 5247, 10641, 18043, 21003, 11905, 13737, 11392, 14299, 14999, 5247, 12085, 6776, 14299, 14999, 5247, 14028, 14299, 14999, 5247, 14029, 12085, 6776, 14299, 14999, 5247, 14029, 18191, 6776, 14299, 14999, 5247, 16754, 14299, 14999, 5247, 16755, 12085, 6776, 14299, 14999, 5247, 16755, 18191, 6776, 14299, 14999, 5247, 18191, 6776, 14299, 14999, 5804, 14299, 14999, 5805, 12085, 6776, 14299, 14999, 5805, 15093, 6776, 14299, 14999, 5805, 16525, 6776, 14299, 14999, 5805, 18191, 6776, 14299, 14999, 6298, 14299, 14999, 6299, 12085, 6776, 14299, 14999, 6299, 18191, 6776, 14299, 14999, 6462, 14299, 14999, 6463, 12085, 6776, 14299, 14999, 6463, 15093, 6776, 14299, 14999, 6463, 16525, 6776, 14299, 14999, 6463, 18191, 6776, 14299, 14999, 7066, 14299, 14999, 7067, 12085, 6776, 14299, 14999, 7067, 15093, 6776, 14299, 14999, 7067, 16525, 6776, 14299, 14999, 7067, 18191, 6776, 14299, 14999, 7171, 12260, 14299, 14999, 7171, 12261, 3532, 14299, 14999, 7171, 12261, 3696, 14299, 14999, 7171, 12261, 5246, 14299, 14999, 7464, 14299, 14999, 7465, 10641, 3357, 6431, 11392, 14299, 14999, 7465, 12085, 6776, 14299, 14999, 7465, 15093, 6776, 14299, 14999, 7465, 16525, 6776, 14299, 14999, 7465, 18191, 6776, 14299, 14999, 7634, 14299, 14999, 7635, 12085, 6776, 14299, 14999, 7635, 15093, 6776, 14299, 14999, 7635, 16525, 6776, 14299, 14999, 7635, 18191, 6776, 14299, 14999, 8320, 14299, 14999, 8356, 14299, 14999, 8357, 10641, 1217, 11392, 14299, 14999, 8357, 10641, 1217, 11552, 14299, 14999, 8357, 10641, 13737, 6431, 11392, 14299, 14999, 8357, 12085, 6776, 14299, 14999, 8357, 15093, 6776, 14299, 14999, 8357, 16525, 6776, 14299, 14999, 8357, 18191, 6776, 14299, 14999, 8848, 14299, 14999, 8849, 10641, 1217, 11552, 14299, 14999, 8849, 10641, 3357, 6431, 11552, 14299, 14999, 8849, 10641, 9502, 14299, 14999, 8849, 10641, 13563, 42, 14299, 14999, 8849, 10641, 13563, 3194, 14299, 14999, 8849, 10641, 13737, 6431, 11392, 14299, 14999, 8849, 12085, 6776, 14299, 14999, 8849, 14782, 14299, 14999, 8849, 14783, 12085, 6776, 14299, 14999, 8849, 14783, 18191, 6776, 14299, 14999, 8849, 15093, 6776, 14299, 14999, 8849, 16525, 6776, 14299, 14999, 8849, 18191, 6776, 14299, 14999, 8954, 14299, 14999, 8955, 12085, 6776, 14299, 14999, 8955, 15093, 6776, 14299, 14999, 8955, 16525, 6776, 14299, 14999, 8955, 18191, 6776, 14299, 14999, 9528, 14299, 14999, 9529, 12085, 6776, 14299, 14999, 9529, 18191, 6776, 14299, 14999, 9716, 14299, 14999, 9717, 10641, 1217, 11553, 843, 1217, 11392, 14299, 14999, 9717, 10641, 3357, 6431, 20505, 11392, 14299, 14999, 9717, 10641, 6779, 6431, 11392, 14299, 14999, 9717, 10641, 13563, 14299, 14999, 3195, 843, 3357, 6430, 14299, 14999, 9717, 10641, 13737, 6431, 11552, 14299, 14999, 9717, 10641, 13737, 6431, 11553, 843, 13737, 6431, 11392, 14299, 14999, 9717, 10641, 18043, 21003, 11905, 6779, 11392, 14299, 14999, 9717, 10641, 18183, 42, 14299, 14999, 9717, 12085, 6776, 14299, 14999, 9717, 15093, 6776, 14299, 14999, 9717, 16525, 6776, 14299, 14999, 9717, 18191, 6776, 14299, 14999, 10140, 14299, 14999, 10141, 12085, 6776, 14299, 14999, 10141, 18191, 6776, 14299, 14999, 10152, 14299, 14999, 10153, 12085, 6776, 14299, 14999, 10153, 15093, 6776, 14299, 14999, 10153, 16525, 6776, 14299, 14999, 10153, 18191, 6776, 14299, 14999, 10262, 14299, 14999, 10263, 12085, 6776, 14299, 14999, 10263, 15093, 6776, 14299, 14999, 10263, 16525, 6776, 14299, 14999, 10263, 18191, 6776, 14299, 14999, 10890, 14299, 14999, 10891, 10641, 18183, 43, 11392, 14299, 14999, 10891, 12085, 6776, 14299, 14999, 10891, 18191, 6776, 14299, 14999, 11548, 14299, 14999, 11549, 12085, 6776, 14299, 14999, 11549, 15093, 6776, 14299, 14999, 11549, 16525, 6776, 14299, 14999, 11549, 18191, 6776, 14299, 14999, 11842, 14299, 14999, 11843, 12085, 6776, 14299, 14999, 11843, 18191, 6776, 14299, 14999, 12065, 3696, 14299, 14999, 12065, 3697, 10641, 3357, 6431, 11392, 14299, 14999, 12065, 3697, 10641, 13737, 6431, 11392, 14299, 14999, 12065, 3697, 10641, 18043, 21003, 11905, 3357, 11392, 14299, 14999, 12065, 3697, 10641, 18043, 21003, 11905, 6779, 11552, 14299, 14999, 12065, 3697, 10641, 18043, 21003, 11905, 13737, 11392, 14299, 14999, 12065, 3697, 10641, 18183, 42, 14299, 14999, 12065, 3697, 12085, 6776, 14299, 14999, 12065, 3697, 15093, 6776, 14299, 14999, 12065, 3697, 16525, 6776, 14299, 14999, 12065, 3697, 18191, 6776, 14299, 14999, 12190, 14299, 14999, 12191, 10641, 1217, 11552, 14299, 14999, 12191, 12085, 6776, 14299, 14999, 12191, 15093, 6776, 14299, 14999, 12191, 16525, 6776, 14299, 14999, 12191, 18191, 6776, 14299, 14999, 12260, 14299, 14999, 12261, 18191, 6776, 14299, 14999, 12452, 14299, 14999, 12453, 10641, 1217, 11392, 14299, 14999, 12453, 10641, 3357, 6431, 11392, 14299, 14999, 12453, 10641, 13737, 6431, 11392, 14299, 14999, 12453, 10641, 13737, 6431, 11552, 14299, 14999, 12453, 10641, 13737, 6431, 18471, 17463, 11552, 14299, 14999, 12453, 12085, 6776, 14299, 14999, 12453, 15093, 6776, 14299, 14999, 12453, 16525, 6776, 14299, 14999, 12453, 18191, 6776, 14299, 14999, 12876, 14299, 14999, 12877, 12085, 6776, 14299, 14999, 12877, 15093, 6776, 14299, 14999, 12877, 16525, 6776, 14299, 14999, 12877, 18191, 6776, 14299, 14999, 13208, 14299, 14999, 13209, 12085, 6776, 14299, 14999, 13209, 15093, 6776, 14299, 14999, 13209, 16525, 6776, 14299, 14999, 13209, 18191, 6776, 14299, 14999, 13348, 14299, 14999, 13349, 12085, 6776, 14299, 14999, 13349, 15093, 6776, 14299, 14999, 13349, 16525, 6776, 14299, 14999, 13349, 18191, 6776, 14299, 14999, 13474, 14299, 14999, 13475, 10641, 1217, 11552, 14299, 14999, 13475, 12085, 6776, 14299, 14999, 13475, 15093, 6776, 14299, 14999, 13475, 16525, 6776, 14299, 14999, 13475, 18191, 6776, 14299, 14999, 13653, 1866, 14299, 14999, 13690, 14299, 14999, 13691, 10641, 1217, 11392, 14299, 14999, 13691, 12085, 6776, 14299, 14999, 13691, 15093, 6776, 14299, 14999, 13691, 16525, 6776, 14299, 14999, 13691, 18191, 6776, 14299, 14999, 13702, 14299, 14999, 13703, 12085, 6776, 14299, 14999, 13703, 15093, 6776, 14299, 14999, 13703, 16525, 6776, 14299, 14999, 13703, 18191, 6776, 14299, 14999, 14556, 14299, 14999, 14557, 12085, 6776, 14299, 14999, 14557, 18191, 6776, 14299, 14999, 15798, 14299, 14999, 15799, 12085, 6776, 14299, 14999, 15799, 15093, 6776, 14299, 14999, 15799, 16525, 6776, 14299, 14999, 15799, 18191, 6776, 14299, 14999, 15843, 14909, 16583, 5247, 16755, 15093, 6776, 14299, 14999, 15843, 14909, 16583, 5247, 16755, 16525, 6776, 14299, 14999, 15969, 1366, 14299, 14999, 15969, 2764, 14299, 14999, 15969, 8848, 14299, 14999, 16279, 920, 14299, 14999, 16279, 1366, 14299, 14999, 16279, 2764, 14299, 14999, 16583, 482, 14299, 14999, 16583, 483, 12085, 6776, 14299, 14999, 16583, 483, 18191, 6776, 14299, 14999, 16583, 746, 14299, 14999, 16583, 747, 12085, 6776, 14299, 14999, 16583, 747, 18191, 6776, 14299, 14999, 17348, 14299, 14999, 17349, 12085, 6776, 14299, 14999, 17349, 15093, 6776, 14299, 14999, 17349, 16525, 6776, 14299, 14999, 17349, 18191, 6776, 14299, 14999, 18205, 3696, 14299, 14999, 18547, 3696, 14299, 14999, 18653, 3532, 14299, 14999, 20937, 5246, 14299, 15053, 11392, 14299, 15233, 8321, 11392, 14299, 15233, 9854, 14299, 15359, 13987, 9854, 14299, 15524, 14299, 15525, 15093, 6776, 14299, 15525, 18191, 6776, 14299, 15673, 1217, 11392, 14299, 15673, 1217, 11552, 14299, 15673, 3357, 6431, 11392, 14299, 15673, 3357, 6431, 11552, 14299, 15673, 3357, 6431, 20505, 11392, 14299, 15673, 3357, 6431, 20505, 11552, 14299, 15673, 6779, 6431, 11392, 14299, 15673, 6779, 6431, 11552, 14299, 15673, 9502, 14299, 15673, 13563, 3195, 11392, 14299, 15673, 13563, 3195, 11552, 14299, 15673, 13737, 6431, 11392, 14299, 15673, 13737, 6431, 11552, 14299, 15673, 13737, 6431, 18471, 19215, 11392, 14299, 15673, 13737, 6431, 18471, 19215, 11552, 14299, 15673, 14625, 18847, 897, 11552, 14299, 15781, 1217, 20877, 8320, 14299, 15811, 11853, 11552, 14299, 16233, 19618, 14299, 17005, 9854, 14299, 17143, 7171, 9957, 10641, 14697, 14454, 14299, 17344, 14299, 17345, 10641, 18047, 11392, 14299, 17810, 14299, 17811, 18191, 6776, 14299, 17859, 1299, 485, 5308, 14299, 18046, 14299, 18047, 18191, 6776, 14299, 18079, 15074, 14299, 18183, 11852, 14299, 18206, 14299, 18207, 18191, 6776, 14299, 18249, 827, 10641, 3697, 12085, 6776, 14299, 18249, 827, 10641, 3697, 18191, 6776, 14299, 18249, 827, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 827, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 827, 10641, 7465, 10641, 8357, 12085, 6776, 14299, 18249, 827, 10641, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 827, 10641, 7465, 16525, 6776, 14299, 18249, 827, 10641, 7465, 18191, 6776, 14299, 18249, 827, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 827, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 827, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 827, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 827, 10641, 8357, 16525, 6776, 14299, 18249, 827, 10641, 8357, 18191, 6776, 14299, 18249, 921, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 921, 10641, 1583, 16525, 6776, 14299, 18249, 921, 10641, 1583, 18191, 6776, 14299, 18249, 921, 10641, 1609, 15093, 6776, 14299, 18249, 921, 10641, 1609, 16525, 6776, 14299, 18249, 921, 10641, 2901, 12085, 6776, 14299, 18249, 921, 10641, 3697, 12085, 6776, 14299, 18249, 921, 10641, 3697, 18191, 6776, 14299, 18249, 921, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 921, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 921, 10641, 7465, 16525, 6776, 14299, 18249, 921, 10641, 7465, 18191, 6776, 14299, 18249, 921, 10641, 7635, 10641, 3697, 12085, 6776, 14299, 18249, 921, 10641, 7635, 16525, 6776, 14299, 18249, 921, 10641, 7635, 18191, 6776, 14299, 18249, 921, 10641, 8357, 12085, 6776, 14299, 18249, 921, 10641, 8357, 15093, 6776, 14299, 18249, 921, 10641, 8357, 16525, 6776, 14299, 18249, 921, 10641, 8357, 18191, 6776, 14299, 18249, 921, 10641, 8849, 12085, 6776, 14299, 18249, 921, 10641, 10891, 12085, 6776, 14299, 18249, 1121, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 1121, 10641, 1583, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1121, 10641, 1583, 16525, 6776, 14299, 18249, 1121, 10641, 1583, 18191, 6776, 14299, 18249, 1121, 10641, 2901, 12085, 6776, 14299, 18249, 1121, 10641, 2901, 18191, 6776, 14299, 18249, 1121, 10641, 3697, 12085, 6776, 14299, 18249, 1121, 10641, 3697, 18191, 6776, 14299, 18249, 1121, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1121, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 1121, 10641, 7465, 16525, 6776, 14299, 18249, 1121, 10641, 7465, 18191, 6776, 14299, 18249, 1121, 10641, 7635, 10641, 8357, 12085, 6776, 14299, 18249, 1121, 10641, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 1121, 10641, 7635, 16525, 6776, 14299, 18249, 1121, 10641, 7635, 18191, 6776, 14299, 18249, 1121, 10641, 8357, 16525, 6776, 14299, 18249, 1121, 10641, 8357, 18191, 6776, 14299, 18249, 1367, 10641, 1583, 16525, 6776, 14299, 18249, 1367, 10641, 1583, 18191, 6776, 14299, 18249, 1367, 10641, 3697, 12085, 6776, 14299, 18249, 1367, 10641, 3697, 18191, 6776, 14299, 18249, 1367, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1367, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 1367, 10641, 7465, 16525, 6776, 14299, 18249, 1367, 10641, 7465, 18191, 6776, 14299, 18249, 1367, 10641, 7635, 10641, 8357, 12085, 6776, 14299, 18249, 1367, 10641, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 1367, 10641, 7635, 16525, 6776, 14299, 18249, 1367, 10641, 7635, 18191, 6776, 14299, 18249, 1367, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 1367, 10641, 8357, 16525, 6776, 14299, 18249, 1367, 10641, 8357, 18191, 6776, 14299, 18249, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 1583, 10641, 3697, 18191, 6776, 14299, 18249, 1583, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1583, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 1583, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 1583, 10641, 7465, 16525, 6776, 14299, 18249, 1583, 10641, 7465, 18191, 6776, 14299, 18249, 1583, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 1583, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 1583, 10641, 8357, 18191, 6776, 14299, 18249, 1609, 10641, 3697, 18191, 6776, 14299, 18249, 1609, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 1609, 10641, 7465, 16525, 6776, 14299, 18249, 1609, 10641, 7465, 18191, 6776, 14299, 18249, 1609, 10641, 8357, 10641, 7465, 16525, 6776, 14299, 18249, 1609, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 1609, 10641, 8357, 16525, 6776, 14299, 18249, 1609, 10641, 8357, 18191, 6776, 14299, 18249, 1609, 10641, 20937, 5247, 16525, 6776, 14299, 18249, 1867, 10641, 1583, 16525, 6776, 14299, 18249, 1867, 10641, 1583, 18191, 6776, 14299, 18249, 1867, 10641, 2077, 12085, 6776, 14299, 18249, 1867, 10641, 2077, 15093, 6776, 14299, 18249, 1867, 10641, 2077, 16525, 6776, 14299, 18249, 1867, 10641, 2077, 18191, 6776, 14299, 18249, 1867, 10641, 3697, 12085, 6776, 14299, 18249, 1867, 10641, 3697, 18191, 6776, 14299, 18249, 1867, 10641, 5247, 12085, 6776, 14299, 18249, 1867, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 1867, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 1867, 10641, 5247, 18191, 6776, 14299, 18249, 1867, 10641, 7465, 16525, 6776, 14299, 18249, 1867, 10641, 7465, 18191, 6776, 14299, 18249, 1867, 10641, 7635, 16525, 6776, 14299, 18249, 1867, 10641, 7635, 18191, 6776, 14299, 18249, 1867, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 1867, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 1867, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 1867, 10641, 8357, 12085, 6776, 14299, 18249, 1867, 10641, 8357, 15093, 6776, 14299, 18249, 1867, 10641, 8357, 16525, 6776, 14299, 18249, 1867, 10641, 8357, 18191, 6776, 14299, 18249, 2077, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 2077, 10641, 1583, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 2077, 10641, 1583, 10641, 8357, 12085, 6776, 14299, 18249, 2077, 10641, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 2077, 10641, 1583, 16525, 6776, 14299, 18249, 2077, 10641, 1583, 18191, 6776, 14299, 18249, 2077, 10641, 1609, 16525, 6776, 14299, 18249, 2077, 10641, 3697, 12085, 6776, 14299, 18249, 2077, 10641, 3697, 18191, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12261, 11393, 12085, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12261, 11393, 18191, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12261, 11553, 12085, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12261, 11553, 18191, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12643, 11393, 12085, 6776, 14299, 18249, 2077, 10641, 5247, 10641, 12643, 11393, 18191, 6776, 14299, 18249, 2077, 10641, 5247, 12085, 6776, 14299, 18249, 2077, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 2077, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 2077, 10641, 5247, 18191, 6776, 14299, 18249, 2077, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 2077, 10641, 7465, 10641, 7465, 12085, 6776, 14299, 18249, 2077, 10641, 7465, 10641, 7465, 16525, 6776, 14299, 18249, 2077, 10641, 7465, 10641, 8357, 12085, 6776, 14299, 18249, 2077, 10641, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 2077, 10641, 7465, 16525, 6776, 14299, 18249, 2077, 10641, 7465, 18191, 6776, 14299, 18249, 2077, 10641, 7635, 10641, 8357, 12085, 6776, 14299, 18249, 2077, 10641, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 2077, 10641, 7635, 16525, 6776, 14299, 18249, 2077, 10641, 7635, 18191, 6776, 14299, 18249, 2077, 10641, 8357, 10641, 1583, 12085, 6776, 14299, 18249, 2077, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 2077, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 2077, 10641, 8357, 12085, 6776, 14299, 18249, 2077, 10641, 8357, 15093, 6776, 14299, 18249, 2077, 10641, 8357, 16525, 6776, 14299, 18249, 2077, 10641, 8357, 18191, 6776, 14299, 18249, 2765, 10641, 1583, 16525, 6776, 14299, 18249, 2765, 10641, 1583, 18191, 6776, 14299, 18249, 2765, 10641, 3697, 12085, 6776, 14299, 18249, 2765, 10641, 3697, 18191, 6776, 14299, 18249, 2765, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 2765, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 2765, 10641, 8357, 10641, 1583, 12085, 6776, 14299, 18249, 2765, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 2765, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 2765, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 2765, 10641, 8357, 16525, 6776, 14299, 18249, 2765, 10641, 8357, 18191, 6776, 14299, 18249, 2901, 10641, 20937, 5247, 18191, 6776, 14299, 18249, 3011, 10641, 1583, 10641, 1583, 12085, 6776, 14299, 18249, 3011, 10641, 1583, 10641, 1583, 16525, 6776, 14299, 18249, 3011, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 3011, 10641, 1583, 16525, 6776, 14299, 18249, 3011, 10641, 1583, 18191, 6776, 14299, 18249, 3011, 10641, 2901, 12085, 6776, 14299, 18249, 3011, 10641, 2901, 18191, 6776, 14299, 18249, 3011, 10641, 3697, 12085, 6776, 14299, 18249, 3011, 10641, 3697, 18191, 6776, 14299, 18249, 3011, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3011, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 3011, 10641, 7635, 16525, 6776, 14299, 18249, 3011, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 3011, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 3011, 10641, 8357, 16525, 6776, 14299, 18249, 3011, 10641, 8357, 18191, 6776, 14299, 18249, 3195, 10641, 1583, 16525, 6776, 14299, 18249, 3195, 10641, 1583, 18191, 6776, 14299, 18249, 3195, 10641, 3697, 12085, 6776, 14299, 18249, 3195, 10641, 3697, 18191, 6776, 14299, 18249, 3195, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3195, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 3195, 10641, 8357, 10641, 1583, 12085, 6776, 14299, 18249, 3195, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 3195, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 3195, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 3195, 10641, 8357, 15093, 6776, 14299, 18249, 3195, 10641, 8357, 16525, 6776, 14299, 18249, 3195, 10641, 8357, 18191, 6776, 14299, 18249, 3229, 10641, 1583, 10641, 7465, 12085, 6776, 14299, 18249, 3229, 10641, 1583, 10641, 7465, 16525, 6776, 14299, 18249, 3229, 10641, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 3229, 10641, 1583, 16525, 6776, 14299, 18249, 3229, 10641, 1583, 18191, 6776, 14299, 18249, 3229, 10641, 1609, 15093, 6776, 14299, 18249, 3229, 10641, 1609, 16525, 6776, 14299, 18249, 3229, 10641, 2901, 12085, 6776, 14299, 18249, 3229, 10641, 3697, 12085, 6776, 14299, 18249, 3229, 10641, 3697, 18191, 6776, 14299, 18249, 3229, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3229, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 3229, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 3229, 10641, 7465, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3229, 10641, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 3229, 10641, 7465, 16525, 6776, 14299, 18249, 3229, 10641, 7465, 18191, 6776, 14299, 18249, 3229, 10641, 7635, 10641, 3697, 12085, 6776, 14299, 18249, 3229, 10641, 7635, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3229, 10641, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 3229, 10641, 7635, 16525, 6776, 14299, 18249, 3229, 10641, 7635, 18191, 6776, 14299, 18249, 3229, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 3229, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 3229, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3229, 10641, 8357, 10641, 7465, 16525, 6776, 14299, 18249, 3229, 10641, 8357, 10641, 7635, 16525, 6776, 14299, 18249, 3229, 10641, 8357, 12085, 6776, 14299, 18249, 3229, 10641, 8357, 15093, 6776, 14299, 18249, 3229, 10641, 8357, 16525, 6776, 14299, 18249, 3229, 10641, 8357, 18191, 6776, 14299, 18249, 3229, 10641, 8849, 12085, 6776, 14299, 18249, 3229, 10641, 10891, 12085, 6776, 14299, 18249, 3697, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 3697, 10641, 1583, 16525, 6776, 14299, 18249, 3697, 10641, 1583, 18191, 6776, 14299, 18249, 3697, 10641, 1609, 15093, 6776, 14299, 18249, 3697, 10641, 1609, 16525, 6776, 14299, 18249, 3697, 10641, 2901, 12085, 6776, 14299, 18249, 3697, 10641, 3697, 12085, 6776, 14299, 18249, 3697, 10641, 3697, 18191, 6776, 14299, 18249, 3697, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3697, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 3697, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 3697, 10641, 7465, 16525, 6776, 14299, 18249, 3697, 10641, 7465, 18191, 6776, 14299, 18249, 3697, 10641, 7635, 16525, 6776, 14299, 18249, 3697, 10641, 7635, 18191, 6776, 14299, 18249, 3697, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 3697, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 3697, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 3697, 10641, 8357, 12085, 6776, 14299, 18249, 3697, 10641, 8357, 15093, 6776, 14299, 18249, 3697, 10641, 8357, 16525, 6776, 14299, 18249, 3697, 10641, 8357, 18191, 6776, 14299, 18249, 3697, 10641, 8849, 12085, 6776, 14299, 18249, 3697, 10641, 10891, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 9, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 9, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 9, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 41, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 41, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 67, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 67, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 483, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 483, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 747, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 747, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 1583, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 1583, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 1609, 15093, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 1609, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 2901, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 3533, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 3533, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 3697, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 3697, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 5247, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 5247, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 7465, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 7465, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 7635, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 8357, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 8357, 15093, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 8357, 16525, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 8357, 18191, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 8849, 12085, 6776, 14299, 18249, 3697, 10641, 12261, 11393, 10641, 10891, 12085, 6776, 14299, 18249, 3791, 10641, 8357, 15093, 6776, 14299, 18249, 3791, 10641, 8357, 16525, 6776, 14299, 18249, 3791, 10641, 8357, 18191, 6776, 14299, 18249, 5247, 10641, 18047, 12085, 6776, 14299, 18249, 5247, 10641, 18047, 18191, 6776, 14299, 18249, 5247, 16755, 10641, 20937, 5247, 12085, 6776, 14299, 18249, 5247, 16755, 10641, 20937, 5247, 18191, 6776, 14299, 18249, 7465, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 7465, 10641, 1583, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 7465, 10641, 1583, 16525, 6776, 14299, 18249, 7465, 10641, 1583, 18191, 6776, 14299, 18249, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 7465, 10641, 3697, 18191, 6776, 14299, 18249, 7465, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 7465, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 7465, 10641, 8357, 10641, 1583, 12085, 6776, 14299, 18249, 7465, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 7465, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 7465, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 7465, 10641, 8357, 18191, 6776, 14299, 18249, 7635, 10641, 1583, 18191, 6776, 14299, 18249, 7635, 10641, 3697, 12085, 6776, 14299, 18249, 7635, 10641, 3697, 18191, 6776, 14299, 18249, 7635, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 7635, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 7635, 10641, 7465, 16525, 6776, 14299, 18249, 7635, 10641, 7465, 18191, 6776, 14299, 18249, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 7635, 10641, 8357, 18191, 6776, 14299, 18249, 8357, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 8357, 10641, 1583, 10641, 7465, 16525, 6776, 14299, 18249, 8357, 10641, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 8357, 10641, 1583, 18191, 6776, 14299, 18249, 8357, 10641, 3697, 18191, 6776, 14299, 18249, 8357, 10641, 5247, 12085, 6776, 14299, 18249, 8357, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 8357, 10641, 7465, 10641, 1583, 16525, 6776, 14299, 18249, 8357, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 8357, 10641, 7465, 10641, 7635, 16525, 6776, 14299, 18249, 8357, 10641, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 8357, 10641, 7465, 16525, 6776, 14299, 18249, 8357, 10641, 7465, 18191, 6776, 14299, 18249, 8357, 10641, 7635, 10641, 3697, 12085, 6776, 14299, 18249, 8357, 10641, 7635, 10641, 7465, 16525, 6776, 14299, 18249, 8357, 10641, 7635, 10641, 8357, 16525, 6776, 14299, 18249, 8357, 10641, 7635, 16525, 6776, 14299, 18249, 8357, 10641, 7635, 18191, 6776, 14299, 18249, 8357, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 8357, 10641, 8357, 18191, 6776, 14299, 18249, 8849, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 8849, 10641, 1583, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 8849, 10641, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 8849, 10641, 1583, 16525, 6776, 14299, 18249, 8849, 10641, 1583, 18191, 6776, 14299, 18249, 8849, 10641, 1609, 15093, 6776, 14299, 18249, 8849, 10641, 1609, 16525, 6776, 14299, 18249, 8849, 10641, 2901, 12085, 6776, 14299, 18249, 8849, 10641, 3697, 12085, 6776, 14299, 18249, 8849, 10641, 3697, 18191, 6776, 14299, 18249, 8849, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 8849, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 1583, 12085, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 1583, 16525, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 8357, 12085, 6776, 14299, 18249, 8849, 10641, 7465, 10641, 8357, 16525, 6776, 14299, 18249, 8849, 10641, 7465, 16525, 6776, 14299, 18249, 8849, 10641, 7465, 18191, 6776, 14299, 18249, 8849, 10641, 7635, 16525, 6776, 14299, 18249, 8849, 10641, 7635, 18191, 6776, 14299, 18249, 8849, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 8849, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 8849, 10641, 8357, 12085, 6776, 14299, 18249, 8849, 10641, 8357, 15093, 6776, 14299, 18249, 8849, 10641, 8357, 16525, 6776, 14299, 18249, 8849, 10641, 8357, 18191, 6776, 14299, 18249, 8849, 10641, 8849, 12085, 6776, 14299, 18249, 8849, 10641, 10891, 12085, 6776, 14299, 18249, 9349, 10431, 91, 16595, 9957, 9855, 18191, 6776, 14299, 18249, 9717, 10641, 1583, 10641, 7465, 16525, 6776, 14299, 18249, 9717, 10641, 1583, 15093, 6776, 14299, 18249, 9717, 10641, 1583, 16525, 6776, 14299, 18249, 9717, 10641, 1583, 18191, 6776, 14299, 18249, 9717, 10641, 1609, 15093, 6776, 14299, 18249, 9717, 10641, 1609, 16525, 6776, 14299, 18249, 9717, 10641, 2901, 12085, 6776, 14299, 18249, 9717, 10641, 2901, 18191, 6776, 14299, 18249, 9717, 10641, 3697, 12085, 6776, 14299, 18249, 9717, 10641, 3697, 18191, 6776, 14299, 18249, 9717, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 9717, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 9717, 10641, 7465, 10641, 1583, 16525, 6776, 14299, 18249, 9717, 10641, 7465, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 9717, 10641, 7465, 15093, 6776, 14299, 18249, 9717, 10641, 7465, 16525, 6776, 14299, 18249, 9717, 10641, 7465, 18191, 6776, 14299, 18249, 9717, 10641, 7635, 10641, 3697, 12085, 6776, 14299, 18249, 9717, 10641, 7635, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 9717, 10641, 7635, 15093, 6776, 14299, 18249, 9717, 10641, 7635, 16525, 6776, 14299, 18249, 9717, 10641, 7635, 18191, 6776, 14299, 18249, 9717, 10641, 8357, 10641, 1583, 12085, 6776, 14299, 18249, 9717, 10641, 8357, 10641, 1583, 16525, 6776, 14299, 18249, 9717, 10641, 8357, 10641, 7465, 16525, 6776, 14299, 18249, 9717, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 9717, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 9717, 10641, 8357, 15093, 6776, 14299, 18249, 9717, 10641, 8357, 16525, 6776, 14299, 18249, 9717, 10641, 8357, 18191, 6776, 14299, 18249, 10141, 10641, 20937, 5247, 18191, 6776, 14299, 18249, 10153, 10641, 1609, 15093, 6776, 14299, 18249, 10153, 10641, 2901, 12085, 6776, 14299, 18249, 10153, 10641, 3697, 12085, 6776, 14299, 18249, 10153, 10641, 3697, 18191, 6776, 14299, 18249, 10153, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 10153, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 10153, 10641, 7465, 18191, 6776, 14299, 18249, 10153, 10641, 8357, 12085, 6776, 14299, 18249, 10153, 10641, 8357, 15093, 6776, 14299, 18249, 10153, 10641, 8357, 16525, 6776, 14299, 18249, 10153, 10641, 8357, 18191, 6776, 14299, 18249, 10153, 10641, 8849, 12085, 6776, 14299, 18249, 10153, 10641, 10891, 12085, 6776, 14299, 18249, 11419, 18191, 6776, 14299, 18249, 11435, 18191, 6776, 14299, 18249, 12191, 10641, 3697, 12085, 6776, 14299, 18249, 12191, 10641, 3697, 18191, 6776, 14299, 18249, 12191, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 12191, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 12191, 10641, 7465, 16525, 6776, 14299, 18249, 12191, 10641, 7465, 18191, 6776, 14299, 18249, 12191, 10641, 8357, 10641, 3697, 12085, 6776, 14299, 18249, 12191, 10641, 8357, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 12191, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 12191, 10641, 8357, 16525, 6776, 14299, 18249, 12191, 10641, 8357, 18191, 6776, 14299, 18249, 13413, 18191, 6776, 14299, 18249, 13415, 10431, 91, 16595, 9957, 9855, 18191, 6776, 14299, 18249, 13415, 18191, 6776, 14299, 18249, 13475, 10641, 1583, 10641, 3697, 12085, 6776, 14299, 18249, 13475, 10641, 1583, 10641, 8357, 12085, 6776, 14299, 18249, 13475, 10641, 1583, 10641, 8357, 16525, 6776, 14299, 18249, 13475, 10641, 1583, 12085, 6776, 14299, 18249, 13475, 10641, 1583, 15093, 6776, 14299, 18249, 13475, 10641, 1583, 16525, 6776, 14299, 18249, 13475, 10641, 1583, 18191, 6776, 14299, 18249, 13475, 10641, 1609, 15093, 6776, 14299, 18249, 13475, 10641, 1609, 16525, 6776, 14299, 18249, 13475, 10641, 2901, 12085, 6776, 14299, 18249, 13475, 10641, 2901, 18191, 6776, 14299, 18249, 13475, 10641, 3697, 12085, 6776, 14299, 18249, 13475, 10641, 3697, 18191, 6776, 14299, 18249, 13475, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 13475, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 13475, 10641, 7465, 10641, 3697, 12085, 6776, 14299, 18249, 13475, 10641, 7465, 12085, 6776, 14299, 18249, 13475, 10641, 7465, 15093, 6776, 14299, 18249, 13475, 10641, 7465, 16525, 6776, 14299, 18249, 13475, 10641, 7465, 18191, 6776, 14299, 18249, 13475, 10641, 7635, 12085, 6776, 14299, 18249, 13475, 10641, 7635, 15093, 6776, 14299, 18249, 13475, 10641, 7635, 16525, 6776, 14299, 18249, 13475, 10641, 7635, 18191, 6776, 14299, 18249, 13475, 10641, 8357, 10641, 7635, 12085, 6776, 14299, 18249, 13475, 10641, 8357, 10641, 7635, 16525, 6776, 14299, 18249, 13475, 10641, 8357, 10641, 8357, 12085, 6776, 14299, 18249, 13475, 10641, 8357, 10641, 8357, 16525, 6776, 14299, 18249, 13475, 10641, 8357, 12085, 6776, 14299, 18249, 13475, 10641, 8357, 15093, 6776, 14299, 18249, 13475, 10641, 8357, 16525, 6776, 14299, 18249, 13475, 10641, 8357, 18191, 6776, 14299, 18249, 14277, 18191, 6776, 14299, 18249, 15427, 18191, 6776, 14299, 18249, 15525, 10641, 11853, 15093, 6776, 14299, 18249, 15525, 10641, 11853, 18191, 6776, 14299, 18249, 15525, 10641, 12067, 15093, 6776, 14299, 18249, 15525, 10641, 12067, 18191, 6776, 14299, 18249, 15525, 10641, 12441, 15093, 6776, 14299, 18249, 15525, 10641, 12441, 18191, 6776, 14299, 18249, 15525, 10641, 17811, 18191, 6776, 14299, 18249, 15525, 10641, 18207, 18191, 6776, 14299, 18249, 15525, 10641, 20937, 5247, 18191, 6776, 14299, 18249, 15843, 16583, 3697, 10641, 12261, 11393, 10641, 5247, 16755, 12085, 6776, 14299, 18249, 15843, 16583, 3697, 10641, 12261, 11393, 10641, 5247, 16755, 16525, 6776, 14299, 18249, 15843, 16583, 3697, 10641, 12261, 11393, 10641, 5247, 16755, 18191, 6776, 14299, 18249, 18321, 18191, 6776, 14299, 18249, 18857, 18191, 6776, 14299, 18249, 18945, 18905, 18902, 14299, 18249, 20905, 14277, 18856, 14299, 18249, 23266, 14299, 18511, 8320, 14299, 18543, 11852, 14299, 18872, 14299, 19614, 14299, 19673, 5246, 14299, 19785, 19618, 14299, 21147, 826, 14299, 21147, 920, 14299, 21147, 1120, 14299, 21147, 1128, 14299, 21147, 1366, 14299, 21147, 1582, 14299, 21147, 1866, 14299, 21147, 2076, 14299, 21147, 2764, 14299, 21147, 2900, 14299, 21147, 3010, 14299, 21147, 3194, 14299, 21147, 3228, 14299, 21147, 3532, 14299, 21147, 3696, 14299, 21147, 3790, 14299, 21147, 5246, 14299, 21147, 7464, 14299, 21147, 7634, 14299, 21147, 8356, 14299, 21147, 8848, 14299, 21147, 9716, 14299, 21147, 10140, 14299, 21147, 10152, 14299, 21147, 10890, 14299, 21147, 12190, 14299, 21147, 13474, 14299, 21147, 15039, 826, 14299, 21147, 15039, 920, 14299, 21147, 15039, 1120, 14299, 21147, 15039, 1128, 14299, 21147, 15039, 1366, 14299, 21147, 15039, 1582, 14299, 21147, 15039, 1608, 14299, 21147, 15039, 2076, 14299, 21147, 15039, 2764, 14299, 21147, 15039, 2900, 14299, 21147, 15039, 3010, 14299, 21147, 15039, 3194, 14299, 21147, 15039, 3228, 14299, 21147, 15039, 3532, 14299, 21147, 15039, 3696, 14299, 21147, 15039, 3790, 14299, 21147, 15039, 5246, 14299, 21147, 15039, 7464, 14299, 21147, 15039, 7634, 14299, 21147, 15039, 8356, 14299, 21147, 15039, 8848, 14299, 21147, 15039, 9716, 14299, 21147, 15039, 10140, 14299, 21147, 15039, 10152, 14299, 21147, 15039, 10890, 14299, 21147, 15039, 12190, 14299, 21147, 15039, 13474, 14299, 21147, 15683, 826, 14299, 21147, 15683, 1120, 14299, 21147, 15683, 1582, 14299, 21147, 15683, 2076, 14299, 21147, 15683, 2764, 14299, 21147, 15683, 3010, 14299, 21147, 15683, 3696, 14299, 21147, 15683, 7464, 14299, 21147, 15683, 7634, 14299, 21147, 15683, 8848, 14299, 21147, 15683, 9716, 14299, 21147, 15683, 12190, 14299, 21147, 15683, 13474, 14299, 21147, 15683, 16279, 2764, 14299, 21147, 15683, 16279, 8848, 14299, 21147, 16279, 920, 14299, 21147, 16279, 1366, 14299, 21147, 16279, 2764, 14299, 21147, 16279, 8848, 14299, 21147, 16525, 826, 14299, 21147, 16525, 920, 14299, 21147, 16525, 1120, 14299, 21147, 16525, 1366, 14299, 21147, 16525, 1582, 14299, 21147, 16525, 1608, 14299, 21147, 16525, 1866, 14299, 21147, 16525, 2076, 14299, 21147, 16525, 2764, 14299, 21147, 16525, 3010, 14299, 21147, 16525, 3228, 14299, 21147, 16525, 3696, 14299, 21147, 16525, 7464, 14299, 21147, 16525, 7634, 14299, 21147, 16525, 8356, 14299, 21147, 16525, 8848, 14299, 21147, 16525, 9716, 14299, 21147, 16525, 10152, 14299, 21147, 16525, 12190, 14299, 21147, 16525, 13474, 14299, 21147, 18387, 1583, 10641, 1128, 14299, 21147, 18387, 8357, 10641, 1583, 10641, 17344, 14299, 21147, 19659, 826, 14299, 21147, 19659, 920, 14299, 21147, 19659, 1120, 14299, 21147, 19659, 1366, 14299, 21147, 19659, 1582, 14299, 21147, 19659, 1608, 14299, 21147, 19659, 1866, 14299, 21147, 19659, 2764, 14299, 21147, 19659, 3010, 14299, 21147, 19659, 3194, 14299, 21147, 19659, 3228, 14299, 21147, 19659, 3696, 14299, 21147, 19659, 3790, 14299, 21147, 19659, 7464, 14299, 21147, 19659, 7634, 14299, 21147, 19659, 8356, 14299, 21147, 19659, 8848, 14299, 21147, 19659, 9716, 14299, 21147, 19659, 10152, 14299, 21147, 19659, 12190, 14299, 21147, 19659, 13474, 14299, 21147, 19659, 16279, 920, 14299, 21147, 19659, 16279, 1366, 14299, 21147, 22819, 826, 14299, 21147, 22819, 920, 14299, 21147, 22819, 1120, 14299, 21147, 22819, 1128, 14299, 21147, 22819, 1366, 14299, 21147, 22819, 1582, 14299, 21147, 22819, 2076, 14299, 21147, 22819, 2764, 14299, 21147, 22819, 2900, 14299, 21147, 22819, 3010, 14299, 21147, 22819, 3194, 14299, 21147, 22819, 3228, 14299, 21147, 22819, 3532, 14299, 21147, 22819, 3696, 14299, 21147, 22819, 3790, 14299, 21147, 22819, 7464, 14299, 21147, 22819, 7634, 14299, 21147, 22819, 8356, 14299, 21147, 22819, 8848, 14299, 21147, 22819, 9716, 14299, 21147, 22819, 10140, 14299, 21147, 22819, 10152, 14299, 21147, 22819, 10890, 14299, 21147, 22819, 12190, 14299, 21147, 22819, 13474, 14319, 16962, 14343, 46, 14343, 968, 14343, 969, 10641, 46, 14343, 969, 10641, 5853, 11694, 14343, 969, 10641, 5853, 15501, 46, 14343, 969, 10641, 11694, 14343, 969, 10641, 12563, 46, 14343, 969, 10641, 14342, 14343, 969, 10641, 15501, 46, 14343, 5853, 15501, 46, 14343, 15501, 46, 14348, 14353, 9288, 14361, 14635, 12976, 14361, 18909, 16831, 12976, 14361, 19637, 12976, 14361, 19969, 16831, 12976, 14378, 14391, 10641, 17051, 6104, 14393, 859, 21279, 11476, 14393, 7123, 11571, 14486, 14393, 7123, 18176, 14393, 7817, 6108, 14393, 7817, 7123, 16088, 14393, 7817, 14518, 14393, 11779, 16088, 14393, 13341, 6108, 14393, 13341, 7123, 16088, 14393, 13341, 14518, 14393, 15621, 16088, 14393, 15621, 16089, 9175, 3293, 15621, 16088, 14393, 18763, 13483, 16088, 14393, 20846, 14396, 14397, 10641, 7817, 7123, 11570, 14397, 10641, 13341, 7123, 11570, 14399, 12216, 14401, 9855, 17486, 14401, 9855, 17610, 14401, 9855, 20552, 14401, 9855, 20756, 14401, 9855, 20974, 14401, 11854, 14401, 11905, 2610, 14401, 11905, 3076, 14401, 11905, 3356, 14401, 11905, 6756, 14401, 11905, 6778, 14401, 11905, 8780, 14401, 11905, 10900, 14401, 11905, 11978, 14401, 11905, 13450, 14401, 11905, 13736, 14401, 14003, 9855, 8, 14401, 14003, 9855, 16, 14401, 14003, 9855, 28, 14401, 14003, 9855, 40, 14401, 14003, 9855, 58, 14401, 14003, 9855, 72, 14401, 14003, 9855, 94, 14401, 14003, 9855, 308, 14401, 14003, 9855, 676, 14401, 14003, 9855, 17493, 22, 14401, 14003, 9855, 17493, 34, 14401, 14003, 9855, 17493, 396, 14401, 14003, 9855, 17493, 582, 14401, 14003, 9855, 20549, 58, 14401, 14625, 11854, 14401, 14999, 0, 14401, 14999, 8, 14401, 14999, 16, 14401, 14999, 28, 14401, 14999, 40, 14401, 14999, 58, 14401, 14999, 72, 14401, 14999, 94, 14401, 14999, 106, 14401, 14999, 124, 14401, 14999, 148, 14401, 14999, 244, 14401, 14999, 266, 14401, 14999, 308, 14401, 14999, 336, 14401, 14999, 350, 14401, 14999, 384, 14401, 14999, 416, 14401, 14999, 448, 14401, 14999, 522, 14401, 14999, 572, 14401, 14999, 588, 14401, 14999, 622, 14401, 14999, 676, 14401, 14999, 680, 14401, 14999, 734, 14401, 14999, 932, 14401, 14999, 1044, 14401, 14999, 1142, 14401, 14999, 1164, 14401, 14999, 1492, 14401, 14999, 1796, 14401, 14999, 1914, 14401, 14999, 2152, 14401, 14999, 2444, 14401, 14999, 2492, 14401, 14999, 2556, 14401, 14999, 2607, 13687, 2956, 14401, 14999, 2607, 13687, 7874, 14401, 14999, 2607, 13687, 8842, 14401, 14999, 2676, 14401, 14999, 3048, 14401, 14999, 3114, 14401, 14999, 3242, 14401, 14999, 3322, 14401, 14999, 6314, 14401, 14999, 10264, 14401, 14999, 17493, 22, 14401, 14999, 17493, 34, 14401, 14999, 17493, 396, 14401, 14999, 17493, 582, 14401, 15233, 2610, 14401, 15233, 2611, 16502, 14401, 15233, 2611, 18744, 14401, 15233, 3076, 14401, 15233, 3232, 14401, 15233, 3356, 14401, 15233, 6756, 14401, 15233, 6778, 14401, 15233, 8780, 14401, 15233, 11978, 14401, 15233, 12080, 14401, 15233, 12108, 14401, 15233, 13450, 14401, 15233, 13538, 14401, 15233, 13736, 14401, 15233, 14636, 14401, 15233, 14890, 14401, 15233, 15194, 14401, 15233, 15736, 14401, 15233, 15820, 14401, 15233, 17190, 14401, 15868, 14401, 20877, 1216, 14401, 20877, 7854, 14401, 20877, 12582, 14401, 20877, 14625, 1216, 14401, 20877, 17791, 896, 14409, 93, 12888, 14411, 896, 14411, 12274, 14411, 14487, 10641, 19477, 11476, 14418, 14419, 18386, 14422, 14424, 14425, 10641, 12090, 14429, 3192, 14430, 14432, 14439, 14999, 0, 14439, 14999, 2, 14439, 14999, 6, 14439, 14999, 8, 14439, 14999, 12, 14439, 14999, 16, 14439, 14999, 20, 14439, 14999, 22, 14439, 14999, 24, 14439, 14999, 26, 14439, 14999, 28, 14439, 14999, 30, 14439, 14999, 32, 14439, 14999, 34, 14439, 14999, 36, 14439, 14999, 38, 14439, 14999, 40, 14439, 14999, 46, 14439, 14999, 54, 14439, 14999, 146, 14439, 14999, 174, 14439, 14999, 242, 14439, 14999, 308, 14439, 14999, 348, 14439, 14999, 386, 14439, 14999, 418, 14439, 14999, 450, 14439, 14999, 456, 14439, 14999, 466, 14439, 14999, 520, 14439, 14999, 582, 14439, 14999, 596, 14439, 14999, 608, 14439, 14999, 610, 14439, 14999, 640, 14439, 14999, 676, 14439, 14999, 2102, 14439, 14999, 2260, 14439, 14999, 2262, 14439, 14999, 2264, 14439, 14999, 3046, 14439, 14999, 3126, 14439, 14999, 3320, 14439, 14999, 3430, 14439, 14999, 5902, 14439, 14999, 5904, 14439, 14999, 10438, 14439, 14999, 10440, 14439, 14999, 10442, 14440, 14444, 14453, 11772, 14455, 7855, 15672, 14458, 14461, 29, 8320, 14461, 95, 8320, 14461, 9855, 17486, 14461, 9855, 17610, 14461, 9855, 20552, 14461, 11854, 14461, 11905, 2610, 14461, 11905, 3076, 14461, 11905, 3356, 14461, 11905, 6756, 14461, 11905, 6778, 14461, 11905, 8780, 14461, 11905, 10900, 14461, 11905, 11978, 14461, 11905, 13450, 14461, 11905, 13736, 14461, 14003, 9855, 0, 14461, 14003, 9855, 8, 14461, 14003, 9855, 16, 14461, 14003, 9855, 28, 14461, 14003, 9855, 40, 14461, 14003, 9855, 72, 14461, 14003, 9855, 94, 14461, 14003, 9855, 308, 14461, 14003, 9855, 488, 14461, 14003, 9855, 676, 14461, 14625, 11854, 14461, 14999, 8, 14461, 14999, 16, 14461, 14999, 40, 14461, 14999, 58, 14461, 14999, 882, 14461, 14999, 1006, 14461, 14999, 1118, 14461, 14999, 1430, 14461, 14999, 1578, 14461, 14999, 1780, 14461, 14999, 1860, 14461, 14999, 2066, 14461, 14999, 2234, 14461, 14999, 2386, 14461, 14999, 2636, 14461, 14999, 2866, 14461, 14999, 3008, 14461, 14999, 3186, 14461, 14999, 3518, 14461, 14999, 3648, 14461, 14999, 5820, 14461, 14999, 6006, 14461, 14999, 6296, 14461, 14999, 6374, 14461, 14999, 7006, 14461, 14999, 7468, 14461, 14999, 7630, 14461, 14999, 8702, 14461, 14999, 8832, 14461, 14999, 8942, 14461, 14999, 9236, 14461, 14999, 10134, 14461, 14999, 10258, 14461, 14999, 10852, 14461, 14999, 11870, 14461, 14999, 13834, 14461, 15868, 14461, 16738, 14461, 17179, 8320, 14461, 18511, 8320, 14469, 14040, 14471, 16076, 14476, 14482, 14484, 14487, 10641, 835, 987, 13889, 7817, 18505, 11570, 14487, 10641, 3357, 20181, 17303, 635, 3245, 13340, 14487, 10641, 7817, 7123, 11570, 14487, 10641, 12589, 7123, 11570, 14487, 10641, 13341, 7123, 11570, 14487, 10641, 13563, 14487, 635, 3245, 13340, 14487, 10641, 13889, 7123, 11570, 14487, 10641, 13889, 13341, 18505, 11570, 14487, 10641, 18847, 6742, 14487, 10641, 20181, 896, 14487, 10641, 21239, 46, 14487, 16269, 123, 20181, 897, 843, 3293, 7123, 16269, 123, 18847, 896, 14489, 10120, 14497, 5860, 14497, 7877, 10641, 1912, 14497, 13885, 10641, 15516, 14497, 13885, 10641, 15517, 843, 13565, 17074, 14497, 15650, 14497, 15651, 505, 12005, 634, 14497, 16751, 10641, 15423, 6758, 14497, 16751, 10641, 16731, 6758, 14497, 18688, 14497, 18689, 505, 12005, 634, 14497, 18832, 14497, 21125, 10641, 15516, 14502, 14511, 9496, 14512, 14517, 2607, 15231, 6793, 9956, 14517, 2607, 15231, 13987, 16270, 14517, 2607, 15231, 14591, 18511, 8320, 14517, 2607, 15231, 18171, 18511, 8320, 14517, 6793, 9956, 14517, 12001, 11905, 2610, 14517, 12001, 11905, 3076, 14517, 12001, 11905, 3356, 14517, 12001, 11905, 6756, 14517, 12001, 11905, 6778, 14517, 12001, 11905, 8780, 14517, 12001, 11905, 11978, 14517, 12001, 11905, 13450, 14517, 12001, 11905, 13736, 14517, 12001, 15233, 2611, 16502, 14517, 12001, 15233, 3077, 16502, 14517, 12001, 15233, 3232, 14517, 12001, 15233, 3357, 16502, 14517, 12001, 15233, 6757, 16502, 14517, 12001, 15233, 6779, 16502, 14517, 12001, 15233, 8781, 16502, 14517, 12001, 15233, 11979, 16502, 14517, 12001, 15233, 12080, 14517, 12001, 15233, 12108, 14517, 12001, 15233, 13451, 16502, 14517, 12001, 15233, 13538, 14517, 12001, 15233, 13737, 16502, 14517, 12001, 15233, 14636, 14517, 12001, 15233, 15194, 14517, 12001, 15233, 15736, 14517, 12001, 15233, 15820, 14517, 12001, 15233, 17190, 14517, 12001, 19785, 8320, 14517, 13563, 14999, 28, 14517, 13563, 14999, 230, 14517, 13563, 14999, 430, 14517, 13563, 14999, 460, 14517, 13563, 14999, 536, 14517, 13563, 14999, 580, 14517, 13563, 14999, 648, 14517, 13563, 14999, 1154, 14517, 13563, 14999, 1282, 14517, 13563, 14999, 1368, 14517, 13563, 14999, 1918, 14517, 13563, 14999, 1998, 14517, 13563, 14999, 2607, 14517, 266, 14517, 13563, 14999, 2607, 14517, 826, 14517, 13563, 14999, 2607, 14517, 1190, 14517, 13563, 14999, 2607, 14517, 1318, 14517, 13563, 14999, 2607, 14517, 1598, 14517, 13563, 14999, 2607, 14517, 1610, 14517, 13563, 14999, 2607, 14517, 2624, 14517, 13563, 14999, 2607, 14517, 7302, 14517, 13563, 14999, 2607, 14517, 9758, 14517, 13563, 14999, 2607, 14517, 13494, 14517, 13563, 14999, 2607, 14517, 14750, 14517, 13563, 14999, 2607, 15231, 2450, 14517, 13563, 14999, 2607, 15231, 2562, 14517, 13563, 14999, 2607, 15231, 3530, 14517, 13563, 14999, 2607, 15231, 13494, 14517, 13563, 14999, 2624, 14517, 13563, 14999, 2722, 14517, 13563, 14999, 3104, 14517, 13563, 14999, 3216, 14517, 13563, 14999, 5248, 14517, 13563, 14999, 7132, 14517, 13563, 14999, 7302, 14517, 13563, 14999, 7594, 14517, 13563, 14999, 7646, 14517, 13563, 14999, 9758, 14517, 13563, 14999, 9862, 14517, 13563, 14999, 10540, 14517, 13563, 14999, 10896, 14517, 13563, 14999, 11848, 14517, 13563, 14999, 12156, 14517, 13563, 14999, 12370, 14517, 13563, 14999, 12542, 14517, 13563, 14999, 13420, 14517, 13563, 14999, 13494, 14517, 13563, 14999, 14750, 14517, 13563, 14999, 15732, 14517, 13563, 14999, 16197, 9758, 14517, 13563, 14999, 17591, 7646, 14517, 13563, 14999, 17689, 7646, 14517, 13563, 14999, 18223, 266, 14517, 13563, 14999, 19061, 460, 14517, 13563, 14999, 19061, 5246, 14517, 13563, 14999, 19061, 7302, 14517, 13563, 14999, 19061, 7594, 14517, 13563, 14999, 22811, 460, 14517, 13563, 14999, 22811, 1282, 14517, 13563, 14999, 22811, 9758, 14517, 13563, 14999, 22811, 14750, 14517, 15673, 431, 580, 14517, 15673, 537, 580, 14517, 15673, 1870, 14517, 15673, 1919, 580, 14517, 15673, 3217, 580, 14517, 15673, 13495, 9862, 14517, 15673, 17290, 14517, 16111, 14999, 28, 14517, 16111, 14999, 230, 14517, 16111, 14999, 430, 14517, 16111, 14999, 460, 14517, 16111, 14999, 536, 14517, 16111, 14999, 580, 14517, 16111, 14999, 648, 14517, 16111, 14999, 1154, 14517, 16111, 14999, 1282, 14517, 16111, 14999, 1368, 14517, 16111, 14999, 1918, 14517, 16111, 14999, 1998, 14517, 16111, 14999, 2607, 14517, 266, 14517, 16111, 14999, 2607, 14517, 826, 14517, 16111, 14999, 2607, 14517, 1190, 14517, 16111, 14999, 2607, 14517, 1318, 14517, 16111, 14999, 2607, 14517, 1598, 14517, 16111, 14999, 2607, 14517, 1610, 14517, 16111, 14999, 2607, 14517, 2624, 14517, 16111, 14999, 2607, 14517, 7302, 14517, 16111, 14999, 2607, 14517, 9758, 14517, 16111, 14999, 2607, 14517, 13494, 14517, 16111, 14999, 2607, 14517, 14750, 14517, 16111, 14999, 2607, 15231, 2450, 14517, 16111, 14999, 2607, 15231, 2562, 14517, 16111, 14999, 2607, 15231, 3530, 14517, 16111, 14999, 2607, 15231, 13494, 14517, 16111, 14999, 2624, 14517, 16111, 14999, 2722, 14517, 16111, 14999, 3104, 14517, 16111, 14999, 3216, 14517, 16111, 14999, 5248, 14517, 16111, 14999, 7132, 14517, 16111, 14999, 7302, 14517, 16111, 14999, 7594, 14517, 16111, 14999, 7646, 14517, 16111, 14999, 9758, 14517, 16111, 14999, 9862, 14517, 16111, 14999, 10540, 14517, 16111, 14999, 10896, 14517, 16111, 14999, 11848, 14517, 16111, 14999, 12156, 14517, 16111, 14999, 12370, 14517, 16111, 14999, 12542, 14517, 16111, 14999, 13420, 14517, 16111, 14999, 13494, 14517, 16111, 14999, 14750, 14517, 16111, 14999, 15732, 14517, 16111, 14999, 16197, 9758, 14517, 16111, 14999, 17591, 7646, 14517, 16111, 14999, 17689, 7646, 14517, 16111, 14999, 18223, 266, 14517, 16111, 14999, 19061, 460, 14517, 16111, 14999, 19061, 5246, 14517, 16111, 14999, 19061, 7302, 14517, 16111, 14999, 19061, 7594, 14517, 16111, 14999, 22811, 460, 14517, 16111, 14999, 22811, 1282, 14517, 16111, 14999, 22811, 9758, 14517, 16111, 14999, 22811, 14750, 14517, 18089, 2611, 7122, 14517, 19003, 461, 11392, 14517, 19003, 18629, 11482, 14517, 19003, 18629, 12556, 14517, 22877, 16270, 14523, 10641, 12274, 14529, 5970, 14533, 1019, 6718, 14533, 6718, 14537, 9953, 19513, 9855, 18392, 14542, 14543, 10641, 7817, 12242, 14543, 10641, 13341, 12242, 14543, 12484, 14550, 14555, 2175, 7854, 14555, 18400, 14555, 23305, 20375, 11476, 14561, 9854, 14561, 16124, 14561, 20136, 14568, 14569, 14878, 14581, 20224, 14587, 1397, 11968, 14587, 1397, 12337, 11968, 14587, 1397, 14997, 3716, 14587, 1397, 14997, 10750, 14587, 1397, 16349, 12336, 14587, 1397, 16349, 14826, 14587, 1397, 16459, 3716, 14587, 1397, 16459, 10750, 14587, 1397, 18137, 11968, 14591, 1638, 14591, 16201, 15673, 6777, 3356, 14601, 9854, 14605, 10189, 18847, 5720, 14605, 10189, 20181, 5720, 14605, 10189, 23146, 14605, 10189, 23148, 14605, 10189, 23150, 14605, 10189, 23152, 14605, 10189, 23154, 14605, 10189, 23156, 14605, 10189, 23158, 14605, 10189, 23160, 14605, 10189, 23162, 14605, 10189, 23164, 14605, 10189, 23166, 14605, 10189, 23168, 14605, 10189, 23170, 14605, 10189, 23172, 14605, 10189, 23174, 14605, 10189, 23176, 14605, 10189, 23178, 14605, 10189, 23180, 14605, 10189, 23182, 14605, 10189, 23184, 14605, 10189, 23186, 14605, 10189, 23188, 14605, 10189, 23190, 14605, 10189, 23192, 14605, 10189, 23194, 14605, 10189, 23196, 14605, 10189, 23198, 14605, 10189, 23200, 14605, 10189, 23202, 14605, 10189, 23204, 14605, 10189, 23206, 14605, 10189, 23208, 14605, 10189, 23210, 14605, 10189, 23212, 14605, 10189, 23214, 14605, 10189, 23216, 14605, 10189, 23218, 14605, 10189, 23220, 14605, 10189, 23222, 14605, 10189, 23224, 14605, 10189, 23226, 14605, 10189, 23228, 14605, 10189, 23230, 14605, 10189, 23232, 14605, 10189, 23234, 14605, 10189, 23236, 14605, 10189, 23238, 14605, 10189, 23240, 14605, 10189, 23242, 14605, 10189, 23314, 14605, 10189, 23316, 14605, 10189, 23318, 14605, 10189, 23320, 14605, 10189, 23322, 14605, 10189, 23324, 14605, 10189, 23326, 14605, 10189, 23328, 14605, 10189, 23330, 14605, 10189, 23332, 14605, 10189, 23334, 14605, 10189, 23336, 14605, 10189, 23338, 14605, 10189, 23340, 14605, 10189, 23342, 14605, 10189, 23344, 14605, 10189, 23346, 14605, 10189, 23348, 14605, 10189, 23350, 14605, 10189, 23352, 14605, 10189, 23354, 14605, 10189, 23356, 14605, 10189, 23358, 14605, 10189, 23360, 14605, 10189, 23362, 14605, 10189, 23364, 14605, 10189, 23366, 14605, 10189, 23368, 14605, 10189, 23370, 14605, 10189, 23372, 14605, 10189, 23374, 14605, 10189, 23376, 14605, 10189, 23378, 14605, 10189, 23380, 14605, 10189, 23382, 14605, 10189, 23384, 14605, 10189, 23386, 14605, 10189, 23388, 14605, 10189, 23390, 14605, 10189, 23392, 14605, 10189, 23394, 14605, 10189, 23396, 14605, 10189, 23398, 14605, 10189, 23400, 14605, 10189, 23402, 14605, 10189, 23404, 14605, 10189, 23406, 14605, 10189, 23408, 14605, 10189, 23410, 14623, 11772, 14623, 12072, 14623, 14486, 14623, 15236, 14623, 15620, 14623, 22947, 15074, 14623, 23121, 11446, 14625, 671, 10086, 14625, 2175, 7854, 14625, 6435, 10086, 14625, 7817, 859, 21097, 16088, 14625, 9286, 14625, 10623, 18400, 14625, 11395, 14262, 14625, 11757, 12004, 14625, 11779, 7888, 14625, 12587, 19557, 8320, 14625, 13260, 14625, 13261, 19557, 8320, 14625, 13341, 859, 19409, 16088, 14625, 13884, 14625, 14542, 14625, 14856, 14625, 15167, 19408, 14625, 15167, 19409, 10641, 18836, 14625, 15167, 21096, 14625, 15621, 13884, 14625, 15621, 21124, 14625, 15643, 2511, 9854, 14625, 15650, 14625, 16153, 11905, 2610, 14625, 16153, 11905, 3076, 14625, 16153, 11905, 3356, 14625, 16153, 11905, 6756, 14625, 16153, 11905, 6778, 14625, 16153, 11905, 8780, 14625, 16153, 11905, 11978, 14625, 16153, 11905, 13450, 14625, 16153, 11905, 13736, 14625, 16153, 15233, 3232, 14625, 16727, 504, 14625, 16727, 842, 14625, 16913, 14856, 14625, 17255, 18386, 14625, 18176, 14625, 18486, 14625, 18511, 8320, 14625, 18684, 14625, 18688, 14625, 18847, 896, 14625, 18847, 897, 7817, 19808, 14625, 18847, 897, 14625, 7817, 19808, 14625, 18847, 897, 14625, 13341, 19808, 14625, 18847, 7854, 14625, 20461, 8320, 14625, 20685, 8320, 14625, 21124, 14625, 23107, 19557, 8320, 14625, 23265, 19557, 8320, 14626, 14627, 6718, 14633, 15672, 14635, 8852, 14647, 9854, 14647, 9855, 843, 17237, 18430, 14647, 9855, 843, 17237, 18431, 10641, 13759, 11392, 14647, 9855, 10641, 1217, 11552, 14647, 9855, 10641, 3357, 6431, 11393, 843, 3357, 6431, 11552, 14647, 9855, 10641, 11621, 11392, 14647, 9855, 11393, 9287, 9854, 14647, 9855, 11393, 13759, 18386, 14647, 9855, 11393, 19407, 11476, 14647, 9855, 11393, 20375, 11476, 14647, 10641, 17642, 14647, 11756, 14652, 14679, 7812, 14680, 14683, 18986, 14685, 9854, 14686, 14689, 14046, 14695, 6286, 14695, 13582, 14703, 9217, 18176, 14705, 7127, 9854, 14717, 14376, 14723, 6410, 14725, 12274, 14726, 14727, 17041, 11650, 14727, 20877, 8320, 14729, 18026, 14732, 14734, 14737, 20838, 14741, 9520, 14747, 12113, 9854, 14747, 12116, 14760, 14769, 13213, 9854, 14785, 13612, 14788, 14793, 14999, 1286, 14793, 14999, 1792, 14793, 14999, 5232, 14793, 14999, 6274, 14793, 14999, 7026, 14793, 14999, 7116, 14793, 14999, 7448, 14793, 14999, 8781, 16502, 14793, 14999, 10426, 14793, 14999, 12062, 14793, 14999, 12340, 14793, 14999, 12378, 14793, 14999, 12500, 14793, 14999, 12524, 14793, 14999, 12656, 14793, 14999, 13156, 14793, 14999, 13308, 14793, 14999, 13426, 14793, 14999, 13704, 14793, 14999, 14060, 14793, 14999, 14272, 14793, 14999, 15158, 14793, 14999, 15194, 14793, 14999, 15738, 14793, 14999, 16032, 14793, 14999, 18408, 14793, 14999, 18502, 14796, 14802, 14814, 14815, 843, 9254, 14815, 843, 15564, 14815, 843, 15912, 14819, 14625, 1217, 10219, 8320, 14819, 14698, 14819, 14999, 0, 14819, 14999, 8, 14819, 14999, 16, 14819, 14999, 28, 14819, 14999, 40, 14819, 14999, 66, 14819, 14999, 204, 14819, 14999, 214, 14819, 14999, 482, 14819, 14999, 694, 14819, 14999, 700, 14819, 14999, 706, 14819, 14999, 734, 14819, 14999, 736, 14819, 14999, 738, 14819, 14999, 742, 14819, 14999, 746, 14819, 14999, 3520, 14819, 14999, 3546, 14819, 14999, 3654, 14819, 14999, 3700, 14819, 14999, 9866, 14819, 14999, 10806, 14819, 14999, 10824, 14819, 14999, 11464, 14819, 14999, 11732, 14819, 14999, 12280, 14819, 14999, 12376, 14819, 14999, 12732, 14819, 14999, 12886, 14819, 14999, 13232, 14819, 14999, 13336, 14819, 14999, 14130, 14819, 14999, 14136, 14819, 14999, 14300, 14819, 14999, 14944, 14819, 14999, 15748, 14819, 14999, 15930, 14819, 14999, 15936, 14819, 14999, 16142, 14819, 14999, 16576, 14819, 14999, 16976, 14819, 14999, 17024, 14819, 14999, 17362, 14819, 14999, 18866, 14819, 14999, 19652, 14819, 14999, 20240, 14819, 14999, 20280, 14819, 14999, 20326, 14819, 14999, 20368, 14819, 14999, 20410, 14819, 14999, 20418, 14819, 14999, 20420, 14819, 14999, 20434, 14819, 14999, 20436, 14819, 14999, 20438, 14819, 14999, 20442, 14819, 14999, 20444, 14819, 14999, 20760, 14819, 14999, 20786, 14819, 14999, 20816, 14819, 14999, 20818, 14819, 14999, 20860, 14819, 14999, 20890, 14819, 14999, 20892, 14819, 14999, 20896, 14819, 14999, 20920, 14819, 14999, 20922, 14819, 14999, 20926, 14819, 14999, 20928, 14819, 14999, 20986, 14819, 14999, 21162, 14819, 14999, 21170, 14819, 14999, 21172, 14819, 14999, 21190, 14819, 14999, 21192, 14819, 14999, 22856, 14819, 14999, 22858, 14819, 14999, 22872, 14819, 14999, 22880, 14819, 14999, 22906, 14819, 14999, 22916, 14819, 14999, 22918, 14819, 14999, 22920, 14819, 14999, 22958, 14819, 14999, 23268, 14819, 14999, 23426, 14819, 14999, 23446, 14819, 14999, 23462, 14819, 14999, 23464, 14819, 14999, 23466, 14819, 14999, 23476, 14819, 14999, 23494, 14819, 15573, 1217, 10219, 8320, 14819, 17749, 9866, 14819, 17749, 11732, 14819, 17749, 12280, 14819, 17749, 12376, 14819, 17749, 12732, 14819, 17749, 12886, 14819, 17749, 13232, 14819, 17749, 13336, 14819, 17749, 14698, 14819, 17749, 14944, 14819, 17749, 15748, 14819, 17749, 16142, 14819, 17749, 16576, 14819, 17749, 16976, 14819, 17749, 17024, 14819, 17749, 17362, 14819, 17749, 18866, 14819, 17749, 19652, 14819, 17749, 20174, 14819, 17749, 20184, 14819, 17749, 20240, 14819, 17749, 20280, 14819, 17749, 20326, 14819, 17749, 20368, 14819, 17749, 20410, 14819, 17749, 20412, 14819, 17749, 20414, 14819, 17749, 20416, 14819, 17749, 20418, 14819, 17749, 20420, 14819, 17749, 20422, 14819, 17749, 20434, 14819, 17749, 20436, 14819, 17749, 20438, 14819, 17749, 20442, 14819, 17749, 20444, 14819, 17749, 20446, 14819, 17749, 20556, 14819, 17749, 20728, 14819, 17749, 20730, 14819, 17749, 20732, 14819, 17749, 20734, 14819, 17749, 20736, 14819, 17749, 20786, 14819, 17749, 20816, 14819, 17749, 20818, 14819, 17749, 20820, 14819, 17749, 20860, 14819, 17749, 20862, 14819, 17749, 20866, 14819, 17749, 20888, 14819, 17749, 20890, 14819, 17749, 20892, 14819, 17749, 20894, 14819, 17749, 20896, 14819, 17749, 20920, 14819, 17749, 20922, 14819, 17749, 20926, 14819, 17749, 20928, 14819, 17749, 20952, 14819, 17749, 20986, 14819, 17749, 21036, 14819, 17749, 21116, 14819, 17749, 21118, 14819, 17749, 21152, 14819, 17749, 21154, 14819, 17749, 21160, 14819, 17749, 21162, 14819, 17749, 21170, 14819, 17749, 21172, 14819, 17749, 21190, 14819, 17749, 21192, 14819, 17749, 21212, 14819, 17749, 21214, 14819, 17749, 21218, 14819, 17749, 21220, 14819, 17749, 21228, 14819, 17749, 21250, 14819, 17749, 21252, 14819, 17749, 21254, 14819, 17749, 21256, 14819, 17749, 21288, 14819, 17749, 21290, 14819, 17749, 22838, 14819, 17749, 22842, 14819, 17749, 22844, 14819, 17749, 22846, 14819, 17749, 22856, 14819, 17749, 22858, 14819, 17749, 22860, 14819, 17749, 22862, 14819, 17749, 22896, 14819, 17749, 22898, 14819, 17749, 22900, 14819, 17749, 22902, 14819, 17749, 22904, 14819, 17749, 22906, 14819, 17749, 22914, 14819, 17749, 22944, 14819, 17749, 23132, 14819, 17749, 23256, 14819, 17749, 23258, 14819, 17749, 23260, 14819, 17749, 23268, 14819, 17749, 23284, 14819, 17749, 23296, 14819, 17749, 23308, 14819, 17749, 23420, 14819, 17749, 23422, 14819, 17749, 23428, 14819, 17749, 23430, 14819, 17749, 23436, 14819, 17749, 23450, 14819, 17749, 23462, 14819, 17749, 23464, 14819, 17749, 23472, 14819, 17749, 23474, 14819, 17749, 23480, 14819, 17749, 23488, 14819, 17749, 23490, 14819, 17749, 23494, 14819, 17749, 23508, 14819, 17749, 23540, 14819, 17749, 23546, 14819, 17749, 23550, 14819, 19375, 9866, 14819, 19375, 11732, 14819, 19375, 12280, 14819, 19375, 12376, 14819, 19375, 12732, 14819, 19375, 12886, 14819, 19375, 13232, 14819, 19375, 13336, 14819, 19375, 14944, 14819, 19375, 15748, 14819, 19375, 16142, 14819, 19375, 16576, 14819, 19375, 16976, 14819, 19375, 17024, 14819, 19375, 17362, 14819, 19375, 18866, 14819, 19375, 19652, 14819, 19375, 20240, 14819, 19375, 20280, 14819, 19375, 20326, 14819, 19375, 20368, 14819, 19375, 20410, 14819, 19375, 20412, 14819, 19375, 20416, 14819, 19375, 20420, 14819, 19375, 20422, 14819, 19375, 20434, 14819, 19375, 20438, 14819, 19375, 20440, 14819, 19375, 20442, 14819, 19375, 20444, 14819, 19375, 20446, 14819, 19375, 20558, 14819, 19375, 20714, 14819, 19375, 20716, 14819, 19375, 20718, 14819, 19375, 20720, 14819, 19375, 20760, 14819, 19375, 20780, 14819, 19375, 20782, 14819, 19375, 20784, 14819, 19375, 20786, 14819, 19375, 20788, 14819, 19375, 20816, 14819, 19375, 20818, 14819, 19375, 20822, 14819, 19375, 20860, 14819, 19375, 20862, 14819, 19375, 20864, 14819, 19375, 20868, 14819, 19375, 20890, 14819, 19375, 20892, 14819, 19375, 20894, 14819, 19375, 20896, 14819, 19375, 20920, 14819, 19375, 20922, 14819, 19375, 20926, 14819, 19375, 20928, 14819, 19375, 20952, 14819, 19375, 20986, 14819, 19375, 21116, 14819, 19375, 21130, 14819, 19375, 21132, 14819, 19375, 21134, 14819, 19375, 21136, 14819, 19375, 21152, 14819, 19375, 21160, 14819, 19375, 21162, 14819, 19375, 21166, 14819, 19375, 21172, 14819, 19375, 21190, 14819, 19375, 21192, 14819, 19375, 21212, 14819, 19375, 21216, 14819, 19375, 21220, 14819, 19375, 21250, 14819, 19375, 21254, 14819, 19375, 21256, 14819, 19375, 22840, 14819, 19375, 22856, 14819, 19375, 22858, 14819, 19375, 22860, 14819, 19375, 22870, 14819, 19375, 22872, 14819, 19375, 22878, 14819, 19375, 22880, 14819, 19375, 22882, 14819, 19375, 22886, 14819, 19375, 22898, 14819, 19375, 22900, 14819, 19375, 22904, 14819, 19375, 22914, 14819, 19375, 22916, 14819, 19375, 22918, 14819, 19375, 22920, 14819, 19375, 22944, 14819, 19375, 22958, 14819, 19375, 23098, 14819, 19375, 23100, 14819, 19375, 23118, 14819, 19375, 23136, 14819, 19375, 23138, 14819, 19375, 23244, 14819, 19375, 23246, 14819, 19375, 23268, 14819, 19375, 23278, 14819, 19375, 23282, 14819, 19375, 23290, 14819, 19375, 23310, 14819, 19375, 23416, 14819, 19375, 23418, 14819, 19375, 23424, 14819, 19375, 23426, 14819, 19375, 23432, 14819, 19375, 23434, 14819, 19375, 23446, 14819, 19375, 23456, 14819, 19375, 23464, 14819, 19375, 23466, 14819, 19375, 23468, 14819, 19375, 23470, 14819, 19375, 23472, 14819, 19375, 23476, 14819, 19375, 23484, 14819, 19375, 23496, 14819, 19375, 23510, 14819, 19375, 23512, 14819, 19375, 23514, 14819, 19375, 23516, 14819, 19375, 23522, 14819, 19375, 23524, 14819, 19375, 23526, 14819, 19375, 23536, 14819, 19375, 23540, 14819, 19375, 23542, 14819, 19375, 23552, 14819, 19375, 23558, 14819, 19377, 0, 14819, 19377, 8, 14819, 19377, 16, 14819, 19377, 28, 14819, 19377, 40, 14819, 19377, 66, 14819, 19377, 204, 14819, 19377, 214, 14819, 19377, 482, 14819, 19377, 694, 14819, 19377, 700, 14819, 19377, 706, 14819, 19377, 734, 14819, 19377, 736, 14819, 19377, 738, 14819, 19377, 742, 14819, 19377, 746, 14819, 19377, 768, 14819, 19377, 770, 14819, 19377, 1730, 14819, 19377, 1732, 14819, 19377, 1734, 14819, 19377, 1736, 14819, 19377, 2578, 14819, 19377, 2580, 14819, 19377, 2582, 14819, 19377, 3378, 14819, 19377, 3380, 14819, 19377, 3520, 14819, 19377, 3546, 14819, 19377, 3654, 14819, 19377, 3700, 14819, 19377, 3894, 14819, 19377, 6578, 14819, 19377, 6580, 14819, 19377, 6592, 14819, 19377, 6594, 14819, 19377, 6596, 14819, 19377, 6598, 14819, 19377, 7372, 14819, 19377, 7374, 14819, 19377, 7376, 14819, 19377, 7378, 14819, 19377, 7380, 14819, 19377, 9046, 14819, 19377, 9048, 14819, 19377, 9050, 14819, 19377, 10322, 14819, 19377, 10324, 14819, 19377, 10726, 14819, 19377, 10728, 14819, 19377, 10790, 14819, 19377, 10804, 14819, 19377, 10806, 14819, 19377, 10808, 14819, 19377, 10820, 14819, 19377, 10822, 14819, 19377, 10824, 14819, 19377, 10826, 14819, 19377, 10828, 14819, 19377, 11464, 14819, 19377, 11996, 14819, 19377, 12024, 14819, 19377, 12026, 14819, 19377, 12356, 14819, 19377, 12358, 14819, 19377, 12360, 14819, 19377, 13078, 14819, 19377, 13080, 14819, 19377, 13082, 14819, 19377, 13860, 14819, 19377, 13862, 14819, 19377, 14096, 14819, 19377, 14112, 14819, 19377, 14114, 14819, 19377, 14126, 14819, 19377, 14128, 14819, 19377, 14130, 14819, 19377, 14132, 14819, 19377, 14134, 14819, 19377, 14136, 14819, 19377, 14698, 14819, 19377, 14860, 14819, 19377, 15922, 14819, 19377, 15930, 14819, 19377, 15932, 14819, 19377, 15936, 14819, 19377, 16000, 14819, 19377, 16002, 14819, 19377, 16004, 14819, 19377, 16006, 14819, 19377, 16506, 14819, 19377, 17444, 14819, 19377, 17622, 14819, 19377, 20432, 14821, 14999, 270, 14821, 14999, 528, 14821, 14999, 878, 14821, 14999, 2280, 14821, 14999, 2536, 14821, 14999, 3220, 14821, 14999, 3532, 14821, 14999, 5818, 14821, 14999, 7156, 14821, 14999, 7596, 14821, 14999, 9372, 14821, 14999, 9776, 14821, 14999, 10126, 14821, 14999, 10810, 14821, 14999, 10898, 14821, 14999, 11424, 14821, 14999, 12204, 14821, 14999, 13400, 14821, 14999, 14978, 14821, 14999, 15474, 14821, 14999, 20590, 14821, 15233, 2610, 14821, 15233, 2611, 16502, 14821, 15233, 3232, 14821, 15233, 6756, 14821, 15233, 15820, 14829, 8321, 12589, 1216, 14829, 8321, 13889, 1216, 14829, 8321, 15079, 14486, 14829, 13251, 3071, 1216, 14829, 13251, 9462, 14829, 13251, 9777, 1216, 14829, 13251, 12269, 13192, 14829, 13251, 12269, 13442, 14829, 13251, 12269, 15408, 14829, 13251, 12284, 14829, 13251, 12322, 14829, 13251, 12323, 12267, 1397, 3452, 14829, 13251, 12702, 14829, 13251, 13192, 14829, 13251, 13442, 14829, 13251, 13488, 14829, 13251, 13826, 14829, 13251, 14541, 505, 12658, 14829, 13251, 15408, 14829, 13251, 15409, 13276, 14829, 13251, 15414, 14829, 13251, 22855, 15858, 14829, 14263, 2608, 14829, 14263, 6358, 14829, 14263, 7424, 14829, 14263, 11487, 14810, 14829, 14263, 11862, 14829, 14263, 12778, 14829, 14263, 13196, 14829, 14263, 13274, 14829, 14263, 13328, 14829, 14263, 13442, 14829, 14263, 13712, 14829, 14263, 14117, 925, 10814, 14829, 14263, 14120, 14829, 14263, 14193, 12146, 14829, 14263, 14193, 13276, 14829, 14263, 14194, 14829, 14263, 14210, 14829, 14263, 14766, 14829, 14263, 14767, 15148, 14829, 14263, 15104, 14829, 14263, 15105, 14910, 14829, 14263, 15302, 14829, 14263, 15411, 9212, 14829, 14263, 15750, 14829, 14263, 16378, 14829, 14263, 17351, 14758, 14829, 14263, 17351, 15412, 14829, 14263, 18272, 14829, 14263, 19286, 14829, 14263, 20394, 14829, 14999, 270, 14829, 14999, 271, 10641, 12658, 14829, 14999, 528, 14829, 14999, 529, 10641, 9462, 14829, 14999, 529, 10641, 14540, 14829, 14999, 928, 14829, 14999, 929, 10641, 9462, 14829, 14999, 929, 10641, 14540, 14829, 14999, 1616, 14829, 14999, 1866, 14829, 14999, 1867, 10641, 9462, 14829, 14999, 1867, 10641, 14540, 14829, 14999, 2280, 14829, 14999, 2281, 10641, 14540, 14829, 14999, 2536, 14829, 14999, 2537, 10641, 14540, 14829, 14999, 2804, 14829, 14999, 2805, 10641, 14540, 14829, 14999, 3218, 14829, 14999, 3219, 10641, 14540, 14829, 14999, 3236, 14829, 14999, 3237, 10641, 14540, 14829, 14999, 3452, 14829, 14999, 3453, 10641, 12322, 14829, 14999, 3453, 10641, 14540, 14829, 14999, 3726, 14829, 14999, 3727, 10641, 12284, 14829, 14999, 3727, 10641, 14540, 14829, 14999, 5246, 14829, 14999, 5247, 10641, 12658, 14829, 14999, 5247, 10641, 13192, 14829, 14999, 5247, 10641, 15408, 14829, 14999, 5312, 14829, 14999, 9486, 14829, 14999, 9487, 10641, 14540, 14829, 14999, 9776, 14829, 14999, 9777, 10641, 3071, 1216, 14829, 14999, 9777, 10641, 9777, 1216, 14829, 14999, 9777, 10641, 14540, 14829, 14999, 9777, 10641, 14541, 843, 3071, 1216, 14829, 14999, 9777, 10641, 14541, 843, 9777, 1216, 14829, 14999, 10633, 270, 14829, 14999, 10633, 1866, 14829, 14999, 10633, 3218, 14829, 14999, 10633, 5246, 14829, 14999, 10633, 9486, 14829, 14999, 10633, 11850, 14829, 14999, 10633, 12085, 2280, 14829, 14999, 10633, 12530, 14829, 14999, 11850, 14829, 14999, 11851, 10641, 14540, 14829, 14999, 12085, 528, 14829, 14999, 12085, 529, 10641, 14540, 14829, 14999, 12085, 1866, 14829, 14999, 12085, 1867, 10641, 14540, 14829, 14999, 12085, 2280, 14829, 14999, 12085, 2536, 14829, 14999, 12085, 13822, 14829, 14999, 12204, 14829, 14999, 12205, 10641, 14540, 14829, 14999, 12530, 14829, 14999, 12531, 10641, 14540, 14829, 14999, 13822, 14829, 14999, 13823, 10641, 14540, 14829, 14999, 14196, 14829, 14999, 14197, 10641, 14540, 14829, 14999, 15474, 14829, 14999, 15475, 10641, 14540, 14829, 14999, 20531, 5312, 14829, 14999, 20531, 9287, 9854, 14829, 18249, 5247, 12530, 14829, 18249, 17537, 3453, 3726, 14829, 18249, 17537, 3727, 3727, 13192, 14829, 18249, 17537, 14625, 3452, 14829, 18249, 17537, 14625, 3726, 14829, 20877, 2537, 16464, 14829, 20877, 3089, 13190, 14829, 20877, 12662, 14829, 20877, 13188, 14829, 20877, 14766, 14829, 20877, 19286, 14835, 10641, 14049, 11772, 14849, 13293, 15621, 18392, 14849, 13293, 15621, 18393, 317, 11571, 15620, 14855, 6718, 14856, 14857, 10641, 19058, 14857, 14418, 14865, 13379, 9854, 14897, 9855, 13052, 14897, 9855, 15868, 14897, 9855, 17486, 14897, 9855, 17610, 14897, 9855, 20552, 14897, 11854, 14897, 14003, 9855, 8, 14897, 14003, 9855, 16, 14897, 14003, 9855, 28, 14897, 14003, 9855, 40, 14897, 14003, 9855, 58, 14897, 14003, 9855, 72, 14897, 14003, 9855, 94, 14897, 14003, 9855, 308, 14897, 14003, 9855, 676, 14897, 14625, 11854, 14897, 14625, 17179, 8320, 14897, 14999, 0, 14897, 14999, 8, 14897, 14999, 16, 14897, 14999, 28, 14897, 14999, 40, 14897, 14999, 58, 14897, 14999, 72, 14897, 14999, 94, 14897, 14999, 106, 14897, 14999, 124, 14897, 14999, 148, 14897, 14999, 244, 14897, 14999, 266, 14897, 14999, 308, 14897, 14999, 336, 14897, 14999, 350, 14897, 14999, 384, 14897, 14999, 416, 14897, 14999, 448, 14897, 14999, 522, 14897, 14999, 572, 14897, 14999, 588, 14897, 14999, 622, 14897, 14999, 676, 14897, 14999, 680, 14897, 14999, 734, 14897, 14999, 932, 14897, 14999, 1044, 14897, 14999, 1142, 14897, 14999, 1164, 14897, 14999, 1492, 14897, 14999, 1796, 14897, 14999, 1914, 14897, 14999, 2444, 14897, 14999, 2492, 14897, 14999, 2556, 14897, 14999, 2676, 14897, 14999, 2912, 14897, 14999, 3048, 14897, 14999, 3114, 14897, 14999, 3242, 14897, 14999, 3322, 14897, 14999, 6314, 14897, 14999, 10264, 14897, 14999, 11868, 14897, 15233, 9854, 14897, 17179, 8320, 14897, 20679, 9854, 14897, 20989, 9854, 14901, 17091, 167, 2510, 14901, 17091, 258, 14901, 17091, 259, 15584, 14901, 17091, 842, 14901, 17091, 874, 14901, 17091, 946, 14901, 17091, 966, 14901, 17091, 1084, 14901, 17091, 1206, 14901, 17091, 1216, 14901, 17091, 1220, 14901, 17091, 1264, 14901, 17091, 1266, 14901, 17091, 1336, 14901, 17091, 1384, 14901, 17091, 1408, 14901, 17091, 1740, 14901, 17091, 1784, 14901, 17091, 2132, 14901, 17091, 2242, 14901, 17091, 2438, 14901, 17091, 2510, 14901, 17091, 2606, 14901, 17091, 2610, 14901, 17091, 2688, 14901, 17091, 2882, 14901, 17091, 2886, 14901, 17091, 2896, 14901, 17091, 2974, 14901, 17091, 3034, 14901, 17091, 3036, 14901, 17091, 3136, 14901, 17091, 3232, 14901, 17091, 3356, 14901, 17091, 3357, 12262, 14901, 17091, 3424, 14901, 17091, 5798, 14901, 17091, 5834, 14901, 17091, 5844, 14901, 17091, 5848, 14901, 17091, 5850, 14901, 17091, 5855, 485, 11746, 14901, 17091, 5858, 14901, 17091, 5978, 14901, 17091, 5980, 14901, 17091, 6082, 14901, 17091, 6084, 14901, 17091, 6086, 14901, 17091, 6356, 14901, 17091, 6408, 14901, 17091, 6426, 14901, 17091, 6435, 968, 14901, 17091, 6440, 14901, 17091, 6602, 14901, 17091, 6718, 14901, 17091, 6722, 14901, 17091, 6746, 14901, 17091, 6750, 14901, 17091, 6772, 14901, 17091, 6782, 14901, 17091, 6930, 14901, 17091, 7048, 14901, 17091, 7118, 14901, 17091, 7123, 10229, 13818, 14901, 17091, 7126, 14901, 17091, 7138, 14901, 17091, 7146, 14901, 17091, 7292, 14901, 17091, 7304, 14901, 17091, 7430, 14901, 17091, 7458, 14901, 17091, 7780, 14901, 17091, 7792, 14901, 17091, 7812, 14901, 17091, 7814, 14901, 17091, 7818, 14901, 17091, 7846, 14901, 17091, 7854, 14901, 17091, 7882, 14901, 17091, 7883, 15636, 14901, 17091, 8352, 14901, 17091, 8460, 14901, 17091, 8850, 14901, 17091, 9171, 968, 14901, 17091, 9278, 14901, 17091, 9466, 14901, 17091, 9496, 14901, 17091, 9516, 14901, 17091, 9694, 14901, 17091, 9712, 14901, 17091, 9720, 14901, 17091, 9860, 14901, 17091, 9874, 14901, 17091, 9954, 14901, 17091, 9956, 14901, 17091, 10098, 14901, 17091, 10188, 14901, 17091, 10228, 14901, 17091, 10616, 14901, 17091, 10617, 19228, 14901, 17091, 10628, 14901, 17091, 10634, 14901, 17091, 10636, 14901, 17091, 10652, 14901, 17091, 10654, 14901, 17091, 11404, 14901, 17091, 11476, 14901, 17091, 11570, 14901, 17091, 11582, 14901, 17091, 11604, 14901, 17091, 11710, 14901, 17091, 11740, 14901, 17091, 11758, 14901, 17091, 11766, 14901, 17091, 11884, 14901, 17091, 11968, 14901, 17091, 11978, 14901, 17091, 11992, 14901, 17091, 12076, 14901, 17091, 12082, 14901, 17091, 12096, 14901, 17091, 12200, 14901, 17091, 12226, 14901, 17091, 12230, 14901, 17091, 12274, 14901, 17091, 12330, 14901, 17091, 12484, 14901, 17091, 12692, 14901, 17091, 12758, 14901, 17091, 12764, 14901, 17091, 13258, 14901, 17091, 13341, 9171, 968, 14901, 17091, 13346, 14901, 17091, 13476, 14901, 17091, 13482, 14901, 17091, 13504, 14901, 17091, 13507, 15683, 5834, 14901, 17091, 13507, 15740, 14901, 17091, 13546, 14901, 17091, 13548, 14901, 17091, 13552, 14901, 17091, 13562, 14901, 17091, 13574, 14901, 17091, 13578, 14901, 17091, 13586, 14901, 17091, 13594, 14901, 17091, 13610, 14901, 17091, 13618, 14901, 17091, 13628, 14901, 17091, 13656, 14901, 17091, 13682, 14901, 17091, 13754, 14901, 17091, 13794, 14901, 17091, 13806, 14901, 17091, 14032, 14901, 17091, 14044, 14901, 17091, 14048, 14901, 17091, 14064, 14901, 17091, 14072, 14901, 17091, 14310, 14901, 17091, 14336, 14901, 17091, 14346, 14901, 17091, 14386, 14901, 17091, 14402, 14901, 17091, 14520, 14901, 17091, 14588, 14901, 17091, 14623, 10120, 14901, 17091, 14623, 11740, 14901, 17091, 14625, 46, 14901, 17091, 14626, 14901, 17091, 14682, 14901, 17091, 14843, 19228, 14901, 17091, 14872, 14901, 17091, 15122, 14901, 17091, 15136, 14901, 17091, 15258, 14901, 17091, 15500, 14901, 17091, 15506, 14901, 17091, 15600, 14901, 17091, 15606, 14901, 17091, 15616, 14901, 17091, 15620, 14901, 17091, 15693, 16708, 14901, 17091, 15776, 14901, 17091, 15784, 14901, 17091, 15804, 14901, 17091, 15812, 14901, 17091, 15854, 14901, 17091, 15888, 14901, 17091, 15920, 14901, 17091, 16094, 14901, 17091, 16164, 14901, 17091, 16170, 14901, 17091, 16380, 14901, 17091, 16396, 14901, 17091, 16470, 14901, 17091, 16708, 14901, 17091, 16824, 14901, 17091, 16930, 14901, 17091, 17072, 14901, 17091, 17170, 14901, 17091, 17482, 14901, 17091, 17722, 14901, 17091, 18092, 14901, 17091, 18316, 14901, 17091, 18330, 14901, 17091, 18494, 14901, 17091, 18596, 14901, 17091, 18650, 14901, 17091, 19228, 14901, 17091, 19984, 14901, 17091, 20106, 14901, 17091, 20610, 14901, 17091, 20901, 10636, 14913, 9854, 14925, 3232, 14931, 9855, 13052, 14931, 9855, 13642, 14931, 9855, 15524, 14931, 9855, 15868, 14931, 9855, 17610, 14931, 10651, 19618, 14931, 11854, 14931, 14003, 9855, 8, 14931, 14003, 9855, 16, 14931, 14003, 9855, 28, 14931, 14003, 9855, 40, 14931, 14003, 9855, 58, 14931, 14003, 9855, 72, 14931, 14003, 9855, 94, 14931, 14003, 9855, 308, 14931, 14625, 11854, 14931, 14625, 17179, 8320, 14931, 14999, 0, 14931, 14999, 8, 14931, 14999, 16, 14931, 14999, 28, 14931, 14999, 40, 14931, 14999, 58, 14931, 14999, 72, 14931, 14999, 94, 14931, 14999, 106, 14931, 14999, 124, 14931, 14999, 148, 14931, 14999, 244, 14931, 14999, 266, 14931, 14999, 336, 14931, 14999, 350, 14931, 14999, 384, 14931, 14999, 416, 14931, 14999, 448, 14931, 14999, 522, 14931, 14999, 572, 14931, 14999, 588, 14931, 14999, 622, 14931, 14999, 680, 14931, 14999, 734, 14931, 14999, 904, 14931, 14999, 932, 14931, 14999, 1044, 14931, 14999, 1142, 14931, 14999, 1164, 14931, 14999, 1482, 14931, 14999, 1492, 14931, 14999, 1812, 14931, 14999, 1914, 14931, 14999, 2152, 14931, 14999, 2444, 14931, 14999, 2492, 14931, 14999, 2556, 14931, 14999, 2676, 14931, 14999, 3242, 14931, 14999, 3322, 14931, 14999, 6306, 14931, 14999, 6314, 14931, 14999, 10264, 14931, 17179, 8320, 14931, 20989, 9854, 14940, 14955, 18643, 15672, 14981, 10144, 14981, 10145, 505, 12005, 634, 14986, 14995, 9855, 2880, 14995, 9855, 13052, 14995, 11905, 2610, 14995, 11905, 3076, 14995, 11905, 3356, 14995, 11905, 6756, 14995, 11905, 6778, 14995, 11905, 8780, 14995, 11905, 10900, 14995, 11905, 11978, 14995, 11905, 13450, 14995, 11905, 13736, 14995, 14003, 9855, 8, 14995, 14003, 9855, 16, 14995, 14003, 9855, 28, 14995, 14003, 9855, 40, 14995, 14003, 9855, 58, 14995, 14003, 9855, 498, 14995, 14003, 9855, 676, 14995, 14999, 0, 14995, 14999, 106, 14995, 14999, 124, 14995, 14999, 148, 14995, 14999, 224, 14995, 14999, 244, 14995, 14999, 266, 14995, 14999, 336, 14995, 14999, 350, 14995, 14999, 384, 14995, 14999, 416, 14995, 14999, 448, 14995, 14999, 522, 14995, 14999, 572, 14995, 14999, 588, 14995, 14999, 622, 14995, 14999, 680, 14995, 14999, 694, 14995, 14999, 734, 14995, 14999, 954, 14995, 14999, 1044, 14995, 14999, 1142, 14995, 14999, 1254, 14995, 14999, 1382, 14995, 14999, 1520, 14995, 14999, 1640, 14995, 14999, 1914, 14995, 14999, 1962, 14995, 14999, 2322, 14995, 14999, 2444, 14995, 14999, 2556, 14995, 14999, 2676, 14995, 14999, 2700, 14995, 14999, 3048, 14995, 14999, 3242, 14995, 14999, 3308, 14995, 14999, 3322, 14995, 14999, 10240, 14995, 14999, 10264, 14995, 19015, 9855, 20, 14995, 19015, 9855, 22, 14995, 19015, 9855, 24, 14995, 19015, 9855, 26, 14995, 19015, 9855, 30, 14995, 19015, 9855, 34, 14995, 19015, 9855, 38, 14995, 19015, 9855, 7592, 14995, 19015, 9855, 16910, 14995, 19667, 14999, 572, 14995, 19667, 14999, 734, 14995, 20877, 8959, 15745, 15680, 14995, 20877, 14456, 14995, 20877, 15680, 14995, 20877, 15794, 14995, 20877, 15795, 14456, 15021, 1, 9855, 4496, 15021, 1, 9855, 4498, 15021, 1, 9855, 4500, 15021, 1, 9855, 4502, 15021, 1, 9855, 4504, 15021, 1, 9855, 4506, 15021, 1, 9855, 4508, 15021, 1, 9855, 4510, 15021, 1, 9855, 4514, 15021, 1, 9855, 4516, 15021, 1, 9855, 4518, 15021, 1, 9855, 4522, 15021, 1, 9855, 4524, 15021, 1, 9855, 4526, 15021, 1, 9855, 4528, 15021, 1, 9855, 4530, 15021, 1, 9855, 4532, 15021, 1, 9855, 4534, 15021, 1, 9855, 4536, 15021, 1, 9855, 4538, 15021, 1, 9855, 4540, 15021, 1, 9855, 4542, 15021, 1, 9855, 4544, 15021, 1, 9855, 4546, 15021, 1, 9855, 4548, 15021, 1, 9855, 4550, 15021, 1, 9855, 4552, 15021, 1, 9855, 4554, 15021, 1, 9855, 4556, 15021, 1, 9855, 4558, 15021, 1, 9855, 4560, 15021, 1, 9855, 4562, 15021, 1, 9855, 4564, 15021, 1, 9855, 4566, 15021, 1, 9855, 4568, 15021, 1, 9855, 4570, 15021, 1, 9855, 4572, 15021, 1, 9855, 4574, 15021, 1, 9855, 4576, 15021, 1, 9855, 4578, 15021, 1, 9855, 4580, 15021, 1, 9855, 4582, 15021, 1, 9855, 4584, 15021, 1, 9855, 4586, 15021, 1, 9855, 4588, 15021, 1, 9855, 4590, 15021, 1, 9855, 4592, 15021, 1, 9855, 4594, 15021, 1, 9855, 4596, 15021, 1, 9855, 4598, 15021, 1, 9855, 4600, 15021, 1, 9855, 4602, 15021, 1, 9855, 4604, 15021, 1, 9855, 4606, 15021, 1, 9855, 4608, 15021, 1, 9855, 4610, 15021, 1, 9855, 4612, 15021, 1, 9855, 4614, 15021, 1, 9855, 4616, 15021, 1, 9855, 4618, 15021, 1, 9855, 4620, 15021, 1, 9855, 4622, 15021, 1, 9855, 4624, 15021, 1, 9855, 4626, 15021, 1, 9855, 4628, 15021, 1, 9855, 4630, 15021, 1, 9855, 4632, 15021, 1, 9855, 4634, 15021, 1, 9855, 4636, 15021, 1, 9855, 4890, 15021, 1, 9855, 4892, 15021, 1, 9855, 4894, 15021, 1, 9855, 4896, 15021, 1, 9855, 4898, 15021, 1, 9855, 4900, 15021, 1, 9855, 4904, 15021, 1, 9855, 4906, 15021, 1, 9855, 4908, 15021, 1, 9855, 4910, 15021, 1, 9855, 4912, 15021, 1, 9855, 4914, 15021, 1, 9855, 4918, 15021, 1, 9855, 4920, 15021, 1, 9855, 4928, 15021, 1, 9855, 4930, 15021, 1, 9855, 4934, 15021, 1, 9855, 4936, 15021, 1, 9855, 4938, 15021, 1, 9855, 4940, 15021, 1, 9855, 4942, 15021, 1, 9855, 4944, 15021, 1, 9855, 4946, 15021, 1, 9855, 4948, 15021, 1, 9855, 4950, 15021, 1, 9855, 4952, 15021, 1, 9855, 4954, 15021, 1, 9855, 4956, 15021, 1, 9855, 4958, 15021, 1, 9855, 4960, 15021, 1, 9855, 4962, 15021, 1, 9855, 4964, 15021, 1, 9855, 4966, 15021, 1, 9855, 4968, 15021, 1, 9855, 4970, 15021, 1, 9855, 4972, 15021, 1, 9855, 4974, 15021, 1, 9855, 4976, 15021, 1, 9855, 4978, 15021, 1, 9855, 4980, 15021, 1, 9855, 4982, 15021, 1, 9855, 4984, 15021, 1, 9855, 4986, 15021, 1, 9855, 4988, 15021, 1, 9855, 4990, 15021, 1, 9855, 4992, 15021, 1, 9855, 4994, 15021, 1, 9855, 4996, 15021, 1, 9855, 4998, 15021, 1, 9855, 5000, 15021, 1, 9855, 5002, 15021, 1, 9855, 5004, 15021, 1, 9855, 5006, 15021, 1, 9855, 5008, 15021, 1, 9855, 5010, 15021, 1, 9855, 5012, 15021, 1, 9855, 5014, 15021, 1, 9855, 5016, 15021, 1, 9855, 5018, 15021, 1, 9855, 5020, 15021, 1, 9855, 5022, 15021, 1, 9855, 5024, 15021, 1, 9855, 5026, 15021, 1, 9855, 5028, 15021, 1, 9855, 5030, 15021, 1, 9855, 5032, 15021, 1, 9855, 5034, 15021, 1, 9855, 5036, 15021, 1, 9855, 5038, 15021, 1, 9855, 5040, 15021, 1, 9855, 5042, 15021, 1, 9855, 5044, 15021, 1, 9855, 5046, 15021, 1, 9855, 5048, 15021, 1, 9855, 5050, 15021, 1, 9855, 5052, 15021, 1, 9855, 5054, 15021, 1, 9855, 5056, 15021, 1, 9855, 5058, 15021, 1, 9855, 5060, 15021, 1, 9855, 5062, 15021, 1, 9855, 5064, 15021, 1, 9855, 5066, 15021, 1, 9855, 5068, 15021, 1, 9855, 5070, 15021, 1, 9855, 5072, 15021, 1, 9855, 5074, 15021, 1, 9855, 5076, 15021, 1, 9855, 5078, 15021, 1, 9855, 5080, 15021, 1, 9855, 5082, 15021, 1, 9855, 5084, 15021, 1, 9855, 5086, 15021, 1, 9855, 5088, 15021, 1, 9855, 5090, 15021, 1, 9855, 5092, 15021, 1, 9855, 5094, 15021, 1, 9855, 5096, 15021, 1, 9855, 5098, 15021, 1, 9855, 5100, 15021, 1, 9855, 5102, 15021, 1, 9855, 5104, 15021, 1, 9855, 5106, 15021, 1, 9855, 5108, 15021, 1, 9855, 5110, 15021, 1, 9855, 5112, 15021, 1, 9855, 5114, 15021, 1, 9855, 5116, 15021, 1, 9855, 5118, 15021, 1, 9855, 5120, 15021, 1, 9855, 5122, 15021, 1, 9855, 5124, 15021, 1, 9855, 5126, 15021, 1, 9855, 5128, 15021, 1, 9855, 5130, 15021, 1, 9855, 5132, 15021, 1, 9855, 5134, 15021, 1, 9855, 5136, 15021, 1, 9855, 5138, 15021, 1, 9855, 5140, 15021, 1, 9855, 5142, 15021, 1, 9855, 5144, 15021, 1, 9855, 5146, 15021, 1, 9855, 5148, 15021, 1, 9855, 5150, 15021, 1, 9855, 5152, 15021, 1, 9855, 5154, 15021, 1, 9855, 5156, 15021, 1, 9855, 5158, 15021, 1, 9855, 5160, 15021, 1, 9855, 5162, 15021, 1, 9855, 5164, 15021, 1, 9855, 5167, 0, 15021, 1, 9855, 5169, 2, 15021, 1, 9855, 5171, 6, 15021, 1, 9855, 5173, 8, 15021, 1, 9855, 5175, 10, 15021, 1, 9855, 5177, 14, 15021, 1, 9855, 5179, 18, 15021, 1, 9855, 5181, 20, 15021, 1, 9855, 5183, 22, 15021, 1, 9855, 5185, 44, 15021, 1, 9855, 5187, 46, 15021, 1, 9855, 5189, 48, 15021, 1, 9855, 5191, 13144, 15021, 1, 9855, 5193, 792, 15021, 1, 9855, 5195, 108, 15021, 1, 9855, 5197, 152, 15021, 1, 9855, 5199, 6606, 15021, 1, 9855, 5201, 338, 15021, 1, 9855, 5202, 15021, 1, 9855, 5204, 15021, 1, 9855, 5206, 15021, 1, 9855, 5208, 15021, 1, 9855, 5210, 15021, 1, 9855, 5212, 15021, 1, 9855, 5214, 15021, 1, 9855, 5216, 15021, 1, 9855, 11044, 15021, 1, 9855, 11102, 15021, 1, 9855, 11106, 15021, 1, 9855, 11132, 15021, 1, 9855, 11134, 15021, 1, 9855, 11136, 15021, 1, 9855, 11138, 15021, 1, 9855, 11140, 15021, 1, 9855, 11142, 15021, 1, 9855, 11244, 15021, 1, 9855, 11246, 15021, 1, 9855, 11248, 15021, 1, 9855, 11250, 15021, 1, 9855, 11252, 15021, 1, 9855, 11254, 15021, 1, 9855, 11256, 15021, 1, 9855, 11258, 15021, 1, 9855, 11260, 15021, 1, 9855, 11262, 15021, 1, 9855, 11264, 15021, 1, 9855, 11266, 15021, 1, 9855, 11268, 15021, 1, 9855, 11270, 15021, 1, 9855, 11272, 15021, 1, 9855, 11274, 15021, 1, 9855, 11276, 15021, 1, 9855, 11278, 15021, 1, 9855, 11280, 15021, 1, 9855, 11282, 15021, 1, 9855, 11284, 15021, 1, 9855, 11286, 15021, 1, 9855, 11288, 15021, 1, 9855, 11290, 15021, 1, 9855, 11292, 15021, 1, 9855, 11294, 15021, 1, 9855, 11296, 15021, 1, 9855, 11298, 15021, 1, 9855, 11300, 15021, 1, 9855, 11302, 15021, 1, 9855, 11304, 15021, 1, 9855, 11306, 15021, 1, 9855, 11308, 15021, 1, 9855, 11310, 15021, 1, 9855, 11312, 15021, 1, 9855, 11314, 15021, 1, 9855, 11316, 15021, 1, 9855, 11318, 15021, 1, 9855, 11320, 15021, 1, 9855, 11322, 15021, 1, 9855, 11324, 15021, 1, 9855, 11326, 15021, 1, 9855, 11328, 15021, 1, 9855, 11330, 15021, 1, 9855, 11332, 15021, 1, 9855, 11334, 15021, 1, 9855, 11336, 15021, 1, 9855, 11338, 15021, 1, 9855, 11340, 15021, 1, 9855, 11342, 15021, 1, 9855, 11344, 15021, 1, 9855, 11346, 15021, 1, 9855, 11348, 15021, 1, 9855, 11350, 15021, 1, 9855, 11352, 15021, 1, 9855, 11354, 15021, 1, 9855, 11356, 15021, 1, 9855, 11358, 15021, 1, 9855, 11360, 15021, 1, 9855, 11362, 15021, 1, 9855, 11364, 15021, 1, 9855, 11366, 15021, 1, 9855, 11368, 15021, 1, 9855, 11370, 15021, 1, 9855, 11372, 15021, 1, 9855, 11374, 15021, 1, 9855, 11376, 15021, 1, 9855, 11378, 15021, 1, 9855, 11380, 15021, 1, 9855, 11382, 15021, 1, 9855, 11384, 15021, 1, 9855, 11386, 15021, 1, 9855, 11388, 15021, 1, 9855, 11390, 15021, 1, 9855, 14237, 376, 15021, 1, 9855, 14239, 378, 15021, 1, 9855, 14241, 380, 15021, 1, 9855, 14243, 382, 15021, 1, 9855, 14248, 15021, 1, 9855, 14250, 15021, 1, 9855, 14252, 15021, 1, 9855, 14254, 15021, 1, 9855, 14256, 15021, 1, 9855, 14258, 15021, 1, 9855, 14260, 15021, 1, 9855, 17542, 15021, 1, 9855, 17544, 15021, 1, 9855, 17546, 15021, 1, 9855, 17548, 15021, 1, 9855, 17550, 15021, 1, 9855, 17552, 15021, 1, 9855, 17554, 15021, 1, 9855, 17556, 15021, 1, 9855, 17558, 15021, 1, 9855, 17560, 15021, 1, 9855, 17562, 15021, 1, 9855, 17564, 15021, 1, 9855, 17566, 15021, 1, 9855, 17568, 15021, 1, 9855, 17570, 15021, 1, 9855, 17572, 15021, 1, 9855, 17574, 15021, 1, 9855, 17576, 15021, 1, 9855, 17578, 15021, 1, 9855, 17580, 15021, 3, 15673, 5348, 15021, 3, 15673, 5350, 15021, 3, 15673, 5356, 15021, 3, 15673, 5380, 15021, 3, 15673, 5404, 15021, 3, 15673, 5408, 15021, 3, 15673, 5422, 15021, 3, 15673, 5436, 15021, 3, 15673, 5438, 15021, 3, 15673, 5468, 15021, 3, 15673, 5474, 15021, 3, 15673, 5476, 15021, 3, 15673, 5480, 15021, 3, 15673, 5484, 15021, 3, 18159, 5491, 2242, 15021, 3, 18159, 5493, 14064, 15021, 3, 18159, 5495, 6356, 15021, 3, 18159, 5497, 12006, 15021, 3, 18159, 5499, 14044, 15021, 3, 18159, 5501, 14354, 15021, 3, 18159, 5503, 13142, 15021, 3, 18159, 5505, 13588, 15021, 3, 18159, 5507, 16214, 15021, 3, 18159, 5513, 2602, 15021, 3, 18159, 5515, 10636, 15021, 3, 18159, 5516, 15021, 3, 18159, 5523, 14412, 15021, 3, 18159, 5525, 7048, 15021, 3, 18159, 5526, 15021, 3, 18159, 5529, 10646, 15021, 3, 18159, 5530, 15021, 3, 18159, 5532, 15021, 3, 18159, 5535, 7304, 15021, 3, 18159, 5536, 15021, 3, 18159, 5538, 15021, 3, 18159, 5540, 15021, 3, 18159, 5546, 15021, 3, 18159, 5548, 15021, 3, 18159, 5551, 11746, 15021, 3, 18159, 5552, 15021, 3, 18159, 5554, 15021, 3, 18159, 5557, 16428, 15021, 3, 18159, 5559, 14304, 15021, 3, 18159, 5560, 15021, 3, 18159, 5562, 15021, 3, 18159, 5564, 15021, 3, 18159, 5566, 15021, 3, 18159, 5568, 15021, 3, 18159, 5570, 15021, 3, 18159, 5572, 15021, 3, 18159, 5574, 15021, 3, 18159, 5576, 15021, 3, 18159, 5579, 12754, 15021, 3, 18159, 5580, 15021, 3, 18159, 5583, 10228, 15021, 3, 18159, 5584, 15021, 3, 18159, 5586, 15021, 3, 18159, 5588, 15021, 3, 18159, 5590, 15021, 3, 18159, 5592, 15021, 3, 18159, 5594, 15021, 3, 18159, 5596, 15021, 3, 18159, 5598, 15021, 3, 18159, 5600, 15021, 3, 18159, 5602, 15021, 3, 18159, 5604, 15021, 3, 18159, 5607, 14834, 15021, 3, 18159, 5649, 19270, 15021, 3, 18159, 5655, 16046, 15021, 3, 18159, 5665, 13586, 15021, 3, 18159, 5667, 11476, 15021, 3, 18159, 5668, 15021, 3, 18159, 5671, 13660, 15021, 3, 18159, 5672, 15021, 3, 18159, 5674, 15021, 3, 18159, 5677, 17513, 16132, 15021, 3, 18159, 5679, 16132, 15021, 3, 18159, 5681, 16133, 12110, 15021, 3, 18159, 5683, 14046, 15021, 3, 18159, 5684, 15021, 3, 18159, 5686, 15021, 3, 18159, 5690, 15021, 3, 18159, 5692, 15021, 3, 18159, 5696, 15021, 3, 18159, 5698, 15021, 3, 18159, 5700, 15021, 3, 18159, 5703, 6284, 15021, 3, 18159, 5704, 15021, 3, 18159, 5706, 15021, 3, 18159, 5708, 15021, 3, 18159, 5710, 15021, 3, 18159, 5712, 15021, 3, 18159, 11495, 8318, 15021, 3, 18159, 11497, 18640, 15021, 3, 18159, 11499, 1332, 15021, 3, 18159, 11501, 2878, 15021, 3, 18159, 11503, 18586, 15021, 3, 18159, 11505, 16486, 15021, 3, 18159, 11507, 3106, 15021, 3, 18159, 11509, 5846, 15021, 3, 18159, 11511, 1084, 15021, 3, 18159, 11513, 5876, 15021, 3, 18159, 15863, 5542, 15021, 3, 18159, 15863, 5608, 15021, 3, 18159, 15863, 5610, 15021, 3, 18159, 15863, 5612, 15021, 3, 18159, 15863, 5614, 15021, 3, 18159, 15863, 5616, 15021, 3, 18159, 15863, 5618, 15021, 3, 18159, 15863, 5620, 15021, 3, 18159, 15863, 5622, 15021, 3, 18159, 15863, 5624, 15021, 3, 18159, 15863, 5626, 15021, 3, 18159, 15863, 5628, 15021, 3, 18159, 15863, 5630, 15021, 3, 18159, 15863, 5632, 15021, 3, 18159, 15863, 5634, 15021, 3, 18159, 15863, 5636, 15021, 3, 18159, 15863, 5638, 15021, 3, 18159, 15863, 5640, 15021, 3, 18159, 15863, 5642, 15021, 3, 18159, 15863, 5644, 15021, 3, 18159, 15863, 5646, 15021, 3, 18159, 15863, 5650, 15021, 3, 18159, 15863, 5652, 15021, 3, 18159, 15863, 5656, 15021, 3, 18159, 15863, 5658, 15021, 3, 18159, 15863, 5660, 15021, 3, 18159, 15863, 5662, 15021, 3, 18159, 15863, 5694, 15021, 3, 18159, 15863, 5714, 15021, 3, 18323, 5509, 7598, 15021, 3, 18323, 5511, 14898, 15021, 3, 18323, 5519, 11466, 15021, 3, 18323, 5521, 8366, 15021, 3, 18323, 5545, 13854, 15021, 3, 18323, 5689, 11908, 15021, 3, 18697, 5315, 148, 15021, 3, 18697, 5317, 580, 15021, 3, 18697, 5319, 522, 15021, 3, 18697, 5321, 626, 15021, 3, 18697, 5323, 634, 15021, 3, 18697, 5325, 448, 15021, 3, 18697, 5327, 158, 15021, 3, 18697, 5329, 0, 15021, 3, 18697, 5331, 592, 15021, 3, 18697, 5333, 40, 15021, 3, 18697, 5335, 540, 15021, 3, 18697, 5337, 602, 15021, 3, 18697, 5339, 424, 15021, 3, 18697, 5341, 166, 15021, 3, 18697, 5343, 436, 15021, 3, 18697, 5345, 556, 15021, 3, 18697, 5347, 752, 15021, 3, 18697, 5353, 760, 15021, 3, 18697, 5355, 560, 15021, 3, 18697, 5359, 440, 15021, 3, 18697, 5361, 452, 15021, 3, 18697, 5363, 54, 15021, 3, 18697, 5365, 584, 15021, 3, 18697, 5367, 574, 15021, 3, 18697, 5369, 16, 15021, 3, 18697, 5371, 2726, 15021, 3, 18697, 5373, 460, 15021, 3, 18697, 5375, 588, 15021, 3, 18697, 5377, 564, 15021, 3, 18697, 5379, 2864, 15021, 3, 18697, 5383, 342, 15021, 3, 18697, 5385, 630, 15021, 3, 18697, 5387, 8, 15021, 3, 18697, 5389, 536, 15021, 3, 18697, 5391, 706, 15021, 3, 18697, 5393, 598, 15021, 3, 18697, 5395, 710, 15021, 3, 18697, 5397, 56, 15021, 3, 18697, 5399, 354, 15021, 3, 18697, 5401, 154, 15021, 3, 18697, 5403, 338, 15021, 3, 18697, 5407, 2548, 15021, 3, 18697, 5411, 546, 15021, 3, 18697, 5413, 168, 15021, 3, 18697, 5415, 468, 15021, 3, 18697, 5417, 578, 15021, 3, 18697, 5419, 694, 15021, 3, 18697, 5421, 472, 15021, 3, 18697, 5425, 336, 15021, 3, 18697, 5427, 612, 15021, 3, 18697, 5429, 622, 15021, 3, 18697, 5431, 572, 15021, 3, 18697, 5433, 28, 15021, 3, 18697, 5435, 2724, 15021, 3, 18697, 5441, 344, 15021, 3, 18697, 5443, 3184, 15021, 3, 18697, 5445, 358, 15021, 3, 18697, 5447, 2936, 15021, 3, 18697, 5449, 642, 15021, 3, 18697, 5451, 366, 15021, 3, 18697, 5453, 1248, 15021, 3, 18697, 5455, 528, 15021, 3, 18697, 5457, 430, 15021, 3, 18697, 5459, 754, 15021, 3, 18697, 5461, 700, 15021, 3, 18697, 5463, 2862, 15021, 3, 18697, 5465, 350, 15021, 3, 18697, 5467, 558, 15021, 3, 18697, 5471, 416, 15021, 3, 18697, 5473, 370, 15021, 3, 18697, 5479, 94, 15021, 3, 18697, 5483, 3352, 15021, 3, 18697, 5487, 1250, 15021, 3, 18697, 5489, 3356, 15025, 20306, 15032, 15041, 14533, 6718, 15047, 14999, 0, 15047, 14999, 2, 15047, 14999, 6, 15047, 14999, 8, 15047, 14999, 12, 15047, 14999, 14, 15047, 14999, 16, 15047, 14999, 18, 15047, 14999, 20, 15047, 14999, 22, 15047, 14999, 24, 15047, 14999, 26, 15047, 14999, 30, 15047, 14999, 32, 15047, 14999, 34, 15047, 14999, 36, 15047, 14999, 38, 15047, 14999, 40, 15047, 14999, 44, 15047, 14999, 46, 15047, 14999, 50, 15047, 14999, 80, 15047, 14999, 112, 15047, 14999, 202, 15047, 14999, 360, 15047, 14999, 434, 15047, 14999, 466, 15047, 14999, 628, 15047, 14999, 640, 15049, 14999, 0, 15049, 14999, 2, 15049, 14999, 4, 15049, 14999, 6, 15049, 14999, 8, 15049, 14999, 10, 15049, 14999, 12, 15049, 14999, 16, 15049, 14999, 20, 15049, 14999, 22, 15049, 14999, 24, 15049, 14999, 26, 15049, 14999, 28, 15049, 14999, 32, 15049, 14999, 34, 15049, 14999, 36, 15049, 14999, 38, 15049, 14999, 40, 15049, 14999, 42, 15049, 14999, 48, 15049, 14999, 80, 15049, 14999, 202, 15049, 14999, 412, 15049, 14999, 466, 15049, 14999, 608, 15049, 14999, 640, 15049, 20479, 8320, 15050, 15095, 3077, 15609, 17642, 15095, 3077, 17045, 11571, 9950, 15095, 5853, 14049, 14486, 15095, 6757, 15609, 17642, 15095, 6779, 17045, 11571, 9950, 15095, 6779, 17045, 18461, 9950, 15095, 7817, 11779, 16089, 18392, 15095, 7817, 20847, 18392, 15095, 11571, 14486, 15095, 11979, 15609, 17642, 15095, 11979, 17045, 11571, 9950, 15095, 12237, 11772, 15095, 13341, 11779, 16089, 18392, 15095, 13341, 20847, 18392, 15095, 13454, 15095, 13563, 14049, 14486, 15095, 13737, 17045, 11571, 9950, 15095, 13737, 17045, 18461, 9950, 15095, 14049, 14486, 15095, 14049, 15620, 15095, 17154, 15095, 18847, 896, 15095, 19267, 7817, 20847, 18392, 15095, 19267, 13341, 20847, 18392, 15095, 21147, 13582, 15095, 22867, 11447, 16089, 18392, 15095, 23121, 11447, 16089, 18392, 15097, 12671, 2199, 7452, 15097, 12671, 5272, 15097, 12671, 5281, 7452, 15097, 12671, 10651, 20357, 8320, 15097, 12671, 11411, 14934, 15097, 12671, 11905, 2610, 15097, 12671, 11905, 3076, 15097, 12671, 11905, 3356, 15097, 12671, 11905, 6756, 15097, 12671, 11905, 6778, 15097, 12671, 11905, 8780, 15097, 12671, 11905, 10900, 15097, 12671, 11905, 11978, 15097, 12671, 11905, 13450, 15097, 12671, 11905, 13736, 15097, 12671, 14003, 9855, 94, 15097, 12671, 14003, 9855, 308, 15097, 12671, 14003, 9855, 676, 15097, 12671, 14003, 9855, 772, 15097, 12671, 14003, 9855, 784, 15097, 12671, 14003, 9855, 5268, 15097, 12671, 14003, 9855, 7428, 15097, 12671, 14003, 9855, 8926, 15097, 12671, 14003, 9855, 9162, 15097, 12671, 14003, 9855, 10418, 15097, 12671, 14003, 9855, 14110, 15097, 12671, 14003, 9855, 15590, 15097, 12671, 14003, 9855, 16136, 15097, 12671, 14003, 9855, 17486, 15097, 12671, 14999, 8, 15097, 12671, 14999, 16, 15097, 12671, 14999, 17, 15036, 15097, 12671, 14999, 28, 15097, 12671, 14999, 106, 15097, 12671, 14999, 448, 15097, 12671, 14999, 449, 15036, 15097, 12671, 14999, 522, 15097, 12671, 14999, 523, 15036, 15097, 12671, 14999, 666, 15097, 12671, 14999, 1044, 15097, 12671, 14999, 1142, 15097, 12671, 14999, 1178, 15097, 12671, 14999, 1524, 15097, 12671, 14999, 1696, 15097, 12671, 14999, 1804, 15097, 12671, 14999, 1972, 15097, 12671, 14999, 1973, 15036, 15097, 12671, 14999, 2072, 15097, 12671, 14999, 2073, 15036, 15097, 12671, 14999, 2318, 15097, 12671, 14999, 2319, 15036, 15097, 12671, 14999, 2492, 15097, 12671, 14999, 2556, 15097, 12671, 14999, 2876, 15097, 12671, 14999, 3018, 15097, 12671, 14999, 3048, 15097, 12671, 14999, 3114, 15097, 12671, 14999, 3260, 15097, 12671, 14999, 3261, 15036, 15097, 12671, 14999, 3322, 15097, 12671, 14999, 3522, 15097, 12671, 14999, 5822, 15097, 12671, 14999, 6038, 15097, 12671, 14999, 6314, 15097, 12671, 14999, 6394, 15097, 12671, 14999, 7022, 15097, 12671, 14999, 7470, 15097, 12671, 14999, 7660, 15097, 12671, 14999, 8756, 15097, 12671, 14999, 8757, 15036, 15097, 12671, 14999, 9240, 15097, 12671, 14999, 10172, 15097, 12671, 14999, 10264, 15097, 12671, 14999, 10750, 15097, 12671, 14999, 11484, 15097, 12671, 15868, 15097, 12671, 17732, 15097, 12671, 17734, 15097, 12671, 18697, 20357, 8320, 15119, 1216, 15127, 13220, 15127, 13221, 2598, 15127, 13221, 10641, 20375, 11477, 93, 7816, 15128, 15131, 20314, 15133, 3357, 3134, 15134, 15135, 6718, 15138, 15141, 18986, 15155, 18367, 13582, 15168, 15209, 8321, 9854, 15211, 18683, 484, 15211, 18683, 485, 505, 12005, 634, 15233, 3233, 6793, 9956, 15233, 9854, 15233, 14639, 6793, 9956, 15233, 15819, 6793, 9956, 15233, 15821, 6793, 9956, 15233, 16401, 6793, 9956, 15233, 17233, 6793, 9956, 15233, 18011, 6793, 9956, 15233, 18087, 6793, 9956, 15233, 18363, 6793, 9956, 15233, 18743, 6793, 9956, 15233, 19623, 6793, 9956, 15235, 9854, 15241, 20887, 18978, 15245, 17700, 15246, 15261, 1912, 15263, 5860, 15271, 7817, 20846, 15271, 13341, 20846, 15279, 10226, 15289, 12303, 6085, 9855, 1346, 15289, 12303, 6085, 9855, 1588, 15289, 12303, 6085, 9855, 1976, 15289, 12303, 6085, 9855, 2040, 15289, 12303, 6085, 9855, 2144, 15289, 12303, 6085, 9855, 3444, 15289, 12303, 6085, 9855, 3508, 15289, 12303, 6085, 9855, 3662, 15289, 12303, 6085, 9855, 7136, 15289, 12303, 6085, 9855, 7632, 15289, 12303, 6085, 9855, 7804, 15289, 12303, 6085, 9855, 8468, 15289, 12303, 6085, 9855, 9238, 15289, 12303, 6085, 9855, 10166, 15289, 12303, 6085, 9855, 10236, 15289, 12303, 6085, 9855, 10254, 15289, 12303, 6085, 9855, 10774, 15289, 12303, 6085, 9855, 14092, 15289, 12303, 6085, 9855, 15790, 15289, 12303, 8321, 1063, 602, 15289, 12303, 8321, 1063, 1676, 15289, 12303, 8321, 1063, 1904, 15289, 12303, 8321, 1063, 3334, 15289, 12303, 8321, 1063, 7642, 15289, 12303, 8321, 1063, 9964, 15289, 12303, 8321, 1063, 10104, 15289, 12303, 9855, 96, 15289, 12303, 9855, 295, 3668, 15289, 12303, 9855, 1063, 2729, 6292, 15289, 12303, 9855, 1063, 6111, 15792, 15289, 12303, 9855, 1063, 7121, 2207, 8913, 8912, 15289, 12303, 9855, 1063, 8867, 3296, 15289, 12303, 9855, 1063, 10247, 2944, 15289, 12303, 9855, 1063, 10308, 15289, 12303, 9855, 1063, 10309, 6064, 15289, 12303, 9855, 1063, 11698, 15289, 12303, 9855, 1644, 15289, 12303, 9855, 2170, 15289, 12303, 9855, 2356, 15289, 12303, 9855, 3216, 15289, 12303, 9855, 3489, 2190, 15289, 12303, 9855, 3489, 6730, 15289, 12303, 9855, 3489, 8876, 15289, 12303, 9855, 3489, 9718, 15289, 12303, 9855, 3489, 10168, 15289, 12303, 9855, 3489, 13722, 15289, 12303, 9855, 3489, 13829, 6000, 15289, 12303, 9855, 3873, 10138, 15289, 12303, 9855, 7280, 15289, 12303, 9855, 8355, 9960, 15289, 12303, 9855, 8355, 13824, 15289, 12303, 9855, 8856, 15289, 12303, 9855, 8914, 15289, 12303, 9855, 10682, 15289, 12303, 9855, 10686, 15289, 12303, 9855, 10706, 15289, 12303, 9855, 14091, 2914, 15289, 12303, 9855, 14091, 3300, 15289, 12303, 9855, 14091, 6720, 15289, 12303, 9855, 14091, 13004, 15289, 12303, 9855, 15825, 6002, 15289, 12303, 9855, 20951, 1644, 15289, 12303, 11905, 2610, 15289, 12303, 11905, 3076, 15289, 12303, 11905, 3356, 15289, 12303, 11905, 6756, 15289, 12303, 11905, 6778, 15289, 12303, 11905, 8780, 15289, 12303, 11905, 10900, 15289, 12303, 11905, 11978, 15289, 12303, 11905, 13450, 15289, 12303, 11905, 13736, 15289, 12303, 14003, 1862, 15289, 12303, 14003, 1888, 15289, 12303, 14003, 1894, 15289, 12303, 14003, 1908, 15289, 12303, 14003, 1926, 15289, 12303, 14003, 1944, 15289, 12303, 14003, 1966, 15289, 12303, 14003, 1982, 15289, 12303, 14003, 2008, 15289, 12303, 14003, 2026, 15289, 12303, 14003, 2034, 15289, 12303, 14003, 2044, 15289, 12303, 14003, 7558, 15289, 12303, 14003, 7566, 15289, 12303, 14003, 7580, 15289, 12303, 14003, 7582, 15289, 12303, 14003, 7604, 15289, 12303, 14003, 7608, 15289, 12303, 14003, 7610, 15289, 12303, 14003, 7614, 15289, 12303, 14003, 7618, 15289, 12303, 14003, 7620, 15289, 12303, 14003, 7662, 15289, 12303, 14003, 7664, 15289, 12303, 14003, 7690, 15289, 12303, 14003, 7692, 15289, 12303, 14003, 7710, 15289, 12303, 14003, 7712, 15289, 12303, 15233, 3233, 17682, 15289, 12303, 15233, 3233, 19784, 15289, 12303, 15233, 10118, 15289, 12303, 15233, 16503, 18310, 15289, 12303, 15233, 18156, 15289, 12303, 15233, 18310, 15289, 12303, 15233, 19802, 15289, 12303, 19015, 94, 15289, 12303, 19015, 1020, 15289, 12303, 19015, 1600, 15289, 12303, 19015, 2090, 15289, 12303, 19015, 2254, 15289, 12303, 19015, 2404, 15289, 12303, 19015, 2888, 15289, 12303, 19015, 3450, 15289, 12303, 19015, 3594, 15289, 12303, 19015, 3682, 15289, 12303, 19015, 6020, 15289, 12303, 19015, 7180, 15289, 12303, 19015, 7258, 15289, 12303, 19015, 8826, 15289, 12303, 19015, 8830, 15289, 12303, 19015, 9354, 15289, 12303, 19015, 12822, 15289, 12303, 19015, 12998, 15289, 12303, 19015, 13002, 15289, 12303, 19015, 13244, 15294, 15306, 15321, 10641, 5730, 15321, 10641, 11581, 7118, 15321, 10641, 14731, 12262, 15321, 10641, 17059, 6718, 15321, 11923, 18970, 15321, 14395, 14558, 15321, 17097, 5865, 12263, 317, 20554, 15321, 18094, 15325, 9854, 15344, 15346, 15349, 17780, 15349, 17781, 9175, 3357, 536, 15357, 19914, 15369, 1016, 15369, 5977, 19589, 12562, 15369, 16922, 15374, 15379, 7304, 15379, 8320, 15379, 8321, 6718, 15380, 15387, 11542, 15388, 15399, 15961, 20772, 15407, 12274, 15418, 15419, 6718, 15421, 1016, 15421, 20266, 15423, 421, 9854, 15423, 423, 9854, 15423, 1216, 15423, 5721, 485, 7126, 15423, 6752, 15423, 7126, 15423, 7127, 10641, 9217, 16065, 15119, 843, 9503, 16402, 15423, 7127, 10641, 16403, 17270, 15423, 11762, 15423, 14623, 22851, 15074, 15423, 15620, 15423, 22851, 15074, 15431, 14003, 9855, 8, 15431, 14003, 9855, 16, 15431, 14003, 9855, 28, 15431, 14003, 9855, 40, 15431, 14003, 9855, 72, 15431, 14003, 9855, 94, 15431, 14003, 9855, 176, 15431, 14003, 9855, 214, 15431, 14999, 0, 15431, 14999, 106, 15431, 14999, 124, 15431, 14999, 148, 15431, 14999, 244, 15431, 14999, 266, 15431, 14999, 336, 15431, 14999, 350, 15431, 14999, 384, 15431, 14999, 416, 15431, 14999, 448, 15431, 14999, 522, 15431, 14999, 572, 15431, 14999, 588, 15431, 14999, 622, 15431, 14999, 694, 15431, 14999, 734, 15431, 14999, 2266, 15431, 14999, 2420, 15431, 14999, 2444, 15431, 14999, 2556, 15431, 14999, 8726, 15431, 14999, 8976, 15431, 15868, 15431, 17179, 8320, 15431, 19015, 9855, 14, 15431, 19015, 9855, 26, 15431, 19015, 9855, 34, 15431, 19015, 9855, 456, 15439, 7816, 15439, 13340, 15439, 15672, 15442, 15443, 11477, 671, 7816, 15443, 11477, 671, 13340, 15443, 11477, 6435, 7816, 15443, 11477, 6435, 13340, 15443, 11477, 7817, 670, 15443, 11477, 7817, 6434, 15443, 11477, 13341, 670, 15443, 11477, 13341, 6434, 15451, 17839, 17793, 13581, 6561, 11476, 15451, 17839, 17793, 16389, 17838, 15456, 15459, 16168, 15462, 15488, 15492, 15496, 15497, 17162, 15498, 15501, 13563, 8, 15501, 13563, 12, 15501, 13563, 22, 15501, 13563, 28, 15501, 16111, 2, 15501, 16111, 8, 15501, 16111, 10, 15501, 16111, 14, 15501, 16111, 16, 15501, 16111, 22, 15501, 16111, 24, 15501, 16111, 30, 15501, 16111, 34, 15501, 18249, 213, 18392, 15502, 15507, 13239, 12682, 15510, 15514, 15519, 1216, 15533, 1740, 15544, 15551, 15560, 15556, 15558, 15573, 12587, 19557, 8320, 15573, 22867, 11447, 19557, 8320, 15573, 23121, 11447, 19557, 8320, 15573, 23265, 19557, 8320, 15579, 6718, 15581, 505, 3112, 15587, 5730, 15601, 16034, 15602, 15603, 3538, 15605, 8853, 2638, 15605, 13482, 15605, 17715, 2638, 15611, 12682, 15621, 1, 9175, 24, 15621, 5, 9175, 356, 15621, 21, 2600, 15621, 25, 2600, 15621, 25, 9175, 36, 15621, 25, 9175, 37, 17274, 15621, 25, 11776, 15621, 25, 17274, 15621, 43, 9175, 24, 15621, 78, 15621, 94, 15621, 118, 15621, 126, 15621, 128, 15621, 138, 15621, 139, 11776, 15621, 139, 17274, 15621, 140, 15621, 148, 15621, 150, 15621, 160, 15621, 162, 15621, 164, 15621, 165, 11776, 15621, 165, 17274, 15621, 216, 15621, 234, 15621, 246, 15621, 264, 15621, 266, 15621, 272, 15621, 284, 15621, 290, 15621, 316, 15621, 330, 15621, 350, 15621, 352, 15621, 356, 15621, 360, 15621, 362, 15621, 364, 15621, 365, 11776, 15621, 365, 16110, 15621, 365, 17274, 15621, 368, 15621, 372, 15621, 374, 15621, 398, 15621, 400, 15621, 410, 15621, 416, 15621, 418, 15621, 419, 13562, 15621, 426, 15621, 432, 15621, 434, 15621, 435, 11776, 15621, 435, 17274, 15621, 438, 15621, 441, 0, 15621, 441, 10, 15621, 441, 12, 15621, 441, 22, 15621, 441, 24, 15621, 441, 36, 15621, 441, 42, 15621, 441, 44, 15621, 442, 15621, 443, 8360, 15621, 444, 15621, 445, 8360, 15621, 448, 15621, 454, 15621, 464, 15621, 470, 15621, 474, 15621, 476, 15621, 512, 15621, 522, 15621, 523, 5266, 15621, 524, 15621, 530, 15621, 534, 15621, 538, 15621, 542, 15621, 544, 15621, 548, 15621, 550, 15621, 606, 15621, 614, 15621, 696, 15621, 896, 15621, 1010, 15621, 1014, 15621, 1092, 15621, 1311, 8597, 12688, 15621, 1311, 8597, 14832, 15621, 1311, 8597, 15676, 15621, 1311, 8597, 17338, 15621, 1312, 15621, 1442, 15621, 1502, 15621, 1534, 15621, 1678, 15621, 1690, 15621, 1924, 15621, 1986, 15621, 2160, 15621, 2300, 15621, 2310, 15621, 2326, 15621, 2338, 15621, 2718, 15621, 2870, 15621, 2871, 9175, 36, 15621, 2871, 9175, 37, 17274, 15621, 3252, 15621, 3288, 15621, 3406, 15621, 5218, 15621, 5836, 15621, 6368, 15621, 6428, 15621, 6772, 15621, 6779, 16184, 15621, 7034, 15621, 7294, 15621, 7434, 15621, 7616, 15621, 7674, 15621, 7817, 9171, 969, 18386, 15621, 8360, 15621, 8446, 15621, 8602, 15621, 9164, 15621, 9166, 15621, 9230, 15621, 9262, 15621, 9480, 15621, 9504, 15621, 9520, 15621, 10641, 3293, 7123, 11570, 15621, 10641, 7817, 7123, 11570, 15621, 10641, 12589, 7817, 17839, 7123, 11570, 15621, 10641, 12589, 13341, 17839, 7123, 11570, 15621, 10641, 13341, 7123, 11570, 15621, 10641, 13889, 7817, 635, 12589, 13341, 6742, 15621, 10641, 13889, 7817, 17839, 7123, 11570, 15621, 10641, 13889, 13341, 635, 12589, 7817, 6742, 15621, 10641, 13889, 13341, 17839, 7123, 11570, 15621, 10641, 14393, 7123, 11570, 15621, 10641, 17839, 19949, 6742, 15621, 10641, 18847, 6742, 15621, 10641, 19019, 16944, 15621, 10641, 20181, 6742, 15621, 10641, 20295, 19949, 6742, 15621, 10830, 15621, 11450, 15621, 11544, 15621, 11836, 15621, 11970, 15621, 12160, 15621, 12162, 15621, 12206, 15621, 12256, 15621, 12326, 15621, 12338, 15621, 12383, 484, 15621, 12383, 485, 505, 2511, 12005, 634, 15621, 12383, 485, 505, 12005, 634, 15621, 12430, 15621, 12450, 15621, 12492, 15621, 12648, 15621, 12650, 15621, 12978, 15621, 13170, 15621, 13206, 15621, 13214, 15621, 13252, 15621, 13341, 9171, 969, 18386, 15621, 13380, 15621, 13444, 15621, 13446, 15621, 14034, 15621, 14098, 15621, 14100, 15621, 14292, 15621, 14320, 15621, 14388, 15621, 14804, 15621, 14838, 15621, 14852, 15621, 14870, 15621, 14956, 15621, 14964, 15621, 15076, 15621, 15308, 15621, 15338, 15621, 15362, 15621, 15694, 15621, 16028, 15621, 16442, 15621, 16556, 15621, 16558, 15621, 16600, 15621, 16732, 15621, 16748, 15621, 16766, 15621, 16794, 15621, 16796, 15621, 16810, 15621, 17128, 15621, 17148, 15621, 17150, 15621, 17230, 15621, 17708, 15621, 18030, 15621, 18147, 7286, 15621, 18154, 15621, 18391, 484, 15621, 18391, 485, 505, 2511, 12005, 634, 15621, 18391, 485, 505, 12005, 634, 15621, 18406, 15621, 18477, 19352, 15621, 18532, 15621, 18560, 15621, 19306, 15621, 19328, 15621, 19388, 15621, 19394, 15621, 19442, 15621, 19524, 15621, 20208, 15621, 20580, 15621, 20758, 15625, 485, 16716, 15635, 18397, 14049, 9950, 15647, 20236, 15651, 484, 15651, 485, 505, 12005, 634, 15651, 485, 505, 12005, 635, 10641, 1217, 11392, 15651, 485, 10641, 2511, 12005, 634, 15651, 485, 11393, 2511, 12005, 634, 15651, 485, 11393, 13759, 18386, 15651, 485, 11393, 14281, 12005, 634, 15651, 485, 11393, 14647, 9854, 15651, 10641, 1216, 15651, 10641, 9287, 9855, 11552, 15651, 10641, 23111, 9855, 11552, 15651, 11393, 15650, 15651, 11393, 18688, 15651, 11393, 20375, 11476, 15661, 9175, 18956, 15664, 15671, 12807, 9855, 16482, 15671, 12807, 9855, 17610, 15671, 12807, 9855, 18006, 15671, 12807, 14003, 9855, 0, 15671, 12807, 14003, 9855, 8, 15671, 12807, 14003, 9855, 16, 15671, 12807, 14003, 9855, 40, 15671, 12807, 14003, 9855, 498, 15671, 12807, 14999, 0, 15671, 12807, 14999, 8, 15671, 12807, 14999, 16, 15671, 12807, 14999, 28, 15671, 12807, 14999, 40, 15671, 12807, 14999, 116, 15671, 12807, 14999, 140, 15671, 12807, 14999, 166, 15671, 12807, 14999, 258, 15671, 12807, 14999, 282, 15671, 12807, 14999, 342, 15671, 12807, 14999, 366, 15671, 12807, 14999, 402, 15671, 12807, 14999, 436, 15671, 12807, 14999, 468, 15671, 12807, 14999, 540, 15671, 12807, 14999, 580, 15671, 12807, 14999, 602, 15671, 12807, 14999, 634, 15671, 12807, 14999, 938, 15671, 12807, 14999, 1050, 15671, 12807, 14999, 1148, 15671, 12807, 14999, 1170, 15671, 12807, 14999, 1498, 15671, 12807, 14999, 1798, 15671, 12807, 14999, 1920, 15671, 12807, 14999, 2682, 15671, 12807, 14999, 2960, 15671, 12807, 14999, 3248, 15671, 12807, 14999, 3330, 15671, 12807, 14999, 6320, 15671, 12807, 14999, 10270, 15671, 12807, 15361, 15066, 15671, 12807, 15361, 15068, 15671, 12807, 15361, 15070, 15671, 12807, 15361, 15072, 15673, 1397, 1299, 485, 10132, 15673, 1397, 1299, 485, 15094, 15673, 1397, 1299, 485, 21258, 15673, 1397, 1299, 485, 21259, 11578, 15673, 1397, 5808, 15673, 1397, 6289, 7859, 14648, 15673, 1397, 6741, 19618, 15673, 1397, 6777, 6728, 15673, 1397, 7855, 6728, 15673, 1397, 8924, 15673, 1397, 10423, 19618, 15673, 1397, 12241, 19618, 15673, 1397, 12667, 16130, 15673, 1397, 13491, 316, 15673, 1397, 13491, 2632, 15673, 1397, 13582, 15673, 1397, 13617, 485, 10132, 15673, 1397, 13617, 485, 16488, 15673, 1397, 14428, 15673, 1397, 14562, 15673, 1397, 14563, 6777, 3356, 15673, 1397, 14573, 16181, 2610, 15673, 1397, 14573, 16181, 3356, 15673, 1397, 14573, 16181, 6778, 15673, 1397, 14573, 16181, 13736, 15673, 1397, 14648, 15673, 1397, 15429, 19618, 15673, 1397, 16370, 15673, 1397, 16854, 15673, 1397, 17721, 15438, 15673, 1397, 18349, 20518, 15673, 1397, 18847, 20462, 15673, 1397, 18924, 15673, 1397, 19599, 15592, 15673, 1397, 20181, 20462, 15673, 1397, 20454, 15673, 1397, 20455, 6777, 3356, 15673, 1397, 20518, 15673, 1397, 20941, 7418, 15679, 1299, 485, 19512, 15679, 3357, 18847, 6431, 11392, 15679, 3357, 18847, 6431, 11552, 15679, 11757, 15577, 7816, 15679, 11757, 15577, 13340, 15679, 12015, 11392, 15679, 12015, 11552, 15679, 12273, 11392, 15679, 12273, 11552, 15679, 12784, 15679, 13321, 11392, 15679, 13321, 11552, 15679, 13382, 15679, 13737, 6431, 11392, 15679, 13737, 6431, 11552, 15679, 14623, 14215, 15990, 15679, 14623, 14215, 20180, 15679, 14999, 8, 15679, 14999, 270, 15679, 14999, 528, 15679, 14999, 2312, 15679, 14999, 2536, 15679, 14999, 3220, 15679, 14999, 3532, 15679, 14999, 5818, 15679, 14999, 7156, 15679, 14999, 7596, 15679, 14999, 9350, 15679, 14999, 9506, 15679, 14999, 9776, 15679, 14999, 10126, 15679, 14999, 10127, 18100, 15679, 14999, 10832, 15679, 14999, 10833, 270, 15679, 14999, 10890, 15679, 14999, 11420, 15679, 14999, 12085, 17182, 15679, 14999, 12150, 15679, 14999, 12151, 18100, 15679, 14999, 13400, 15679, 14999, 14544, 15679, 14999, 14974, 15679, 14999, 16279, 14545, 9506, 15679, 14999, 17007, 11560, 15679, 14999, 17007, 14772, 15679, 14999, 17007, 16242, 15679, 14999, 17182, 15679, 14999, 17253, 226, 15679, 14999, 17253, 12468, 15679, 14999, 17253, 14198, 15679, 14999, 18543, 528, 15679, 14999, 20937, 11420, 15679, 15397, 11392, 15679, 15397, 11552, 15679, 15397, 14622, 15679, 15947, 11392, 15679, 15947, 11552, 15679, 15947, 14622, 15679, 16040, 15679, 16913, 7855, 11392, 15679, 16913, 7855, 11552, 15679, 18051, 1216, 15679, 18131, 15238, 15679, 18131, 19438, 15679, 18131, 19894, 15679, 18552, 15679, 19558, 15679, 19671, 6793, 9956, 15679, 19671, 11756, 15679, 19671, 11757, 15577, 7816, 15679, 19671, 11757, 15577, 13340, 15679, 20181, 11756, 15679, 20574, 15679, 20713, 14622, 15679, 20939, 6793, 9956, 15679, 20939, 11756, 15679, 20939, 11757, 15577, 7816, 15679, 20989, 8320, 15691, 19371, 8320, 15691, 21296, 15691, 21298, 15691, 21300, 15691, 21302, 15691, 21304, 15691, 21306, 15691, 21308, 15691, 21310, 15691, 21312, 15691, 21314, 15691, 21316, 15691, 21318, 15691, 21320, 15691, 21322, 15691, 21324, 15691, 21326, 15691, 21328, 15691, 21330, 15691, 21332, 15691, 21334, 15691, 21336, 15691, 21338, 15691, 21340, 15691, 21342, 15691, 21344, 15691, 21346, 15691, 21348, 15691, 21350, 15691, 21352, 15691, 21354, 15691, 21356, 15691, 21358, 15691, 21360, 15691, 21362, 15691, 21364, 15691, 21366, 15691, 21368, 15691, 21370, 15691, 21372, 15691, 21374, 15691, 21376, 15691, 21378, 15691, 21380, 15691, 21382, 15691, 21384, 15691, 21386, 15691, 21388, 15691, 21390, 15691, 21392, 15691, 21394, 15691, 21396, 15691, 21398, 15691, 21400, 15691, 21402, 15691, 21404, 15691, 21406, 15691, 21408, 15691, 21410, 15691, 21412, 15691, 21414, 15691, 21416, 15691, 21418, 15691, 21420, 15691, 21422, 15691, 21424, 15691, 21426, 15691, 21428, 15691, 21430, 15691, 21432, 15691, 21434, 15691, 21436, 15691, 21438, 15691, 21440, 15691, 21442, 15691, 21444, 15691, 21446, 15691, 21448, 15691, 21450, 15691, 21452, 15691, 21454, 15691, 21456, 15691, 21458, 15691, 21460, 15691, 21462, 15691, 21464, 15691, 21466, 15691, 21468, 15691, 21470, 15691, 21472, 15691, 21474, 15691, 21476, 15691, 21478, 15691, 21480, 15691, 21482, 15691, 21484, 15691, 21486, 15691, 21488, 15691, 21490, 15691, 21492, 15691, 21494, 15691, 21496, 15691, 21498, 15691, 21500, 15691, 21502, 15691, 21504, 15691, 21506, 15691, 21508, 15691, 21510, 15691, 21512, 15691, 21514, 15691, 21516, 15691, 21518, 15691, 21520, 15691, 21522, 15691, 21524, 15691, 21526, 15691, 21528, 15691, 21530, 15691, 21532, 15691, 21534, 15691, 21536, 15691, 21538, 15691, 21540, 15691, 21542, 15691, 21544, 15691, 21546, 15691, 21548, 15691, 21550, 15691, 21552, 15691, 21554, 15691, 21556, 15691, 21558, 15691, 21560, 15691, 21562, 15691, 21564, 15691, 21566, 15691, 21568, 15691, 21570, 15691, 21572, 15691, 21574, 15691, 21576, 15691, 21578, 15691, 21580, 15691, 21582, 15691, 21584, 15691, 21586, 15691, 21588, 15691, 21590, 15691, 21592, 15691, 21594, 15691, 21596, 15691, 21598, 15691, 21600, 15691, 21602, 15691, 21604, 15691, 21606, 15691, 21608, 15691, 21610, 15691, 21612, 15691, 21614, 15691, 21616, 15691, 21618, 15691, 21620, 15691, 21622, 15691, 21624, 15691, 21626, 15691, 21628, 15691, 21630, 15691, 21632, 15691, 21634, 15691, 21636, 15691, 21638, 15691, 21640, 15691, 21642, 15691, 21644, 15691, 21646, 15691, 21648, 15691, 21650, 15691, 21652, 15691, 21654, 15691, 21656, 15691, 21658, 15691, 21660, 15691, 21662, 15691, 21664, 15691, 21666, 15691, 21668, 15691, 21670, 15691, 21672, 15691, 21674, 15691, 21676, 15691, 21678, 15691, 21680, 15691, 21682, 15691, 21684, 15691, 21686, 15691, 21688, 15691, 21690, 15691, 21692, 15691, 21694, 15691, 21696, 15691, 21698, 15691, 21700, 15691, 21702, 15691, 21704, 15691, 21706, 15691, 21708, 15691, 21710, 15691, 21712, 15691, 21714, 15691, 21716, 15691, 21718, 15691, 21720, 15691, 21722, 15691, 21724, 15691, 21726, 15691, 21728, 15691, 21730, 15691, 21732, 15691, 21734, 15691, 21736, 15691, 21738, 15691, 21740, 15691, 21742, 15691, 21744, 15691, 21746, 15691, 21748, 15691, 21750, 15691, 21752, 15691, 21754, 15691, 21756, 15691, 21758, 15691, 21760, 15691, 21762, 15691, 21764, 15691, 21766, 15691, 21768, 15691, 21770, 15691, 21772, 15691, 21774, 15691, 21776, 15691, 21778, 15691, 21780, 15691, 21782, 15691, 21784, 15691, 21786, 15691, 21788, 15691, 21790, 15691, 21792, 15691, 21794, 15691, 21796, 15691, 21798, 15691, 21800, 15691, 21802, 15691, 21804, 15691, 21806, 15691, 21808, 15691, 21810, 15691, 21812, 15691, 21814, 15691, 21816, 15691, 21818, 15691, 21820, 15691, 21822, 15691, 21824, 15691, 21826, 15691, 21828, 15691, 21830, 15691, 21832, 15691, 21834, 15691, 21836, 15691, 21838, 15691, 21840, 15691, 21842, 15691, 21844, 15691, 21846, 15691, 21848, 15691, 21850, 15691, 21852, 15691, 21854, 15691, 21856, 15691, 21858, 15691, 21860, 15691, 21862, 15691, 21864, 15691, 21866, 15691, 21868, 15691, 21870, 15691, 21872, 15691, 21874, 15691, 21876, 15691, 21878, 15691, 21880, 15691, 21882, 15691, 21884, 15691, 21886, 15691, 21888, 15691, 21890, 15691, 21892, 15691, 21894, 15691, 21896, 15691, 21898, 15691, 21900, 15691, 21902, 15691, 21904, 15691, 21906, 15691, 21908, 15691, 21910, 15691, 21912, 15691, 21914, 15691, 21916, 15691, 21918, 15691, 21920, 15691, 21922, 15691, 21924, 15691, 21926, 15691, 21928, 15691, 21930, 15691, 21932, 15691, 21934, 15691, 21936, 15691, 21938, 15691, 21940, 15691, 21942, 15691, 21944, 15691, 21946, 15691, 21948, 15691, 21950, 15691, 21952, 15691, 21954, 15691, 21956, 15691, 21958, 15691, 21960, 15691, 21962, 15691, 21964, 15691, 21966, 15691, 21968, 15691, 21970, 15691, 21972, 15691, 21974, 15691, 21976, 15691, 21978, 15691, 21980, 15691, 21982, 15691, 21984, 15691, 21986, 15691, 21988, 15691, 21990, 15691, 21992, 15691, 21994, 15691, 21996, 15691, 21998, 15691, 22000, 15691, 22002, 15691, 22004, 15691, 22006, 15691, 22008, 15691, 22010, 15691, 22012, 15691, 22014, 15691, 22016, 15691, 22018, 15691, 22020, 15691, 22022, 15691, 22024, 15691, 22026, 15691, 22028, 15691, 22030, 15691, 22032, 15691, 22034, 15691, 22036, 15691, 22038, 15691, 22040, 15691, 22042, 15691, 22044, 15691, 22046, 15691, 22048, 15691, 22050, 15691, 22052, 15691, 22054, 15691, 22056, 15691, 22058, 15691, 22060, 15691, 22062, 15691, 22064, 15691, 22066, 15691, 22068, 15691, 22070, 15691, 22072, 15691, 22074, 15691, 22076, 15691, 22078, 15691, 22080, 15691, 22082, 15691, 22084, 15691, 22086, 15691, 22088, 15691, 22090, 15691, 22092, 15691, 22094, 15691, 22096, 15691, 22098, 15691, 22100, 15691, 22102, 15691, 22104, 15691, 22106, 15691, 22108, 15691, 22110, 15691, 22112, 15691, 22114, 15691, 22116, 15691, 22118, 15691, 22120, 15691, 22122, 15691, 22124, 15691, 22126, 15691, 22128, 15691, 22130, 15691, 22132, 15691, 22134, 15691, 22136, 15691, 22138, 15691, 22140, 15691, 22142, 15691, 22144, 15691, 22146, 15691, 22148, 15691, 22150, 15691, 22152, 15691, 22154, 15691, 22156, 15691, 22158, 15691, 22160, 15691, 22162, 15691, 22164, 15691, 22166, 15691, 22168, 15691, 22170, 15691, 22172, 15691, 22174, 15691, 22176, 15691, 22178, 15691, 22180, 15691, 22182, 15691, 22184, 15691, 22186, 15691, 22188, 15691, 22190, 15691, 22192, 15691, 22194, 15691, 22196, 15691, 22198, 15691, 22200, 15691, 22202, 15691, 22204, 15691, 22206, 15691, 22208, 15691, 22210, 15691, 22212, 15691, 22214, 15691, 22216, 15691, 22218, 15691, 22220, 15691, 22222, 15691, 22224, 15691, 22226, 15691, 22228, 15691, 22230, 15691, 22232, 15691, 22234, 15691, 22236, 15691, 22238, 15691, 22240, 15691, 22242, 15691, 22244, 15691, 22246, 15691, 22248, 15691, 22250, 15691, 22252, 15691, 22254, 15691, 22256, 15691, 22258, 15691, 22260, 15691, 22262, 15691, 22264, 15691, 22266, 15691, 22268, 15691, 22270, 15691, 22272, 15691, 22274, 15691, 22276, 15691, 22278, 15691, 22280, 15691, 22282, 15691, 22284, 15691, 22286, 15691, 22288, 15691, 22290, 15691, 22292, 15691, 22294, 15691, 22296, 15691, 22298, 15691, 22300, 15691, 22302, 15691, 22304, 15691, 22306, 15691, 22308, 15691, 22310, 15691, 22312, 15691, 22314, 15691, 22316, 15691, 22318, 15691, 22320, 15691, 22322, 15691, 22324, 15691, 22326, 15691, 22328, 15691, 22330, 15691, 22332, 15691, 22334, 15691, 22336, 15691, 22338, 15691, 22340, 15691, 22342, 15691, 22344, 15691, 22346, 15691, 22348, 15691, 22350, 15691, 22352, 15691, 22354, 15691, 22356, 15691, 22358, 15691, 22360, 15691, 22362, 15691, 22364, 15691, 22366, 15691, 22368, 15691, 22370, 15691, 22372, 15691, 22374, 15691, 22376, 15691, 22378, 15691, 22380, 15691, 22382, 15691, 22384, 15691, 22386, 15691, 22388, 15691, 22390, 15691, 22392, 15691, 22394, 15691, 22396, 15691, 22398, 15691, 22400, 15691, 22402, 15691, 22404, 15691, 22406, 15691, 22408, 15691, 22410, 15691, 22412, 15691, 22414, 15691, 22416, 15691, 22418, 15691, 22420, 15691, 22422, 15691, 22424, 15691, 22426, 15691, 22428, 15691, 22430, 15691, 22432, 15691, 22434, 15691, 22436, 15691, 22438, 15691, 22440, 15691, 22442, 15691, 22444, 15691, 22446, 15691, 22448, 15691, 22450, 15691, 22452, 15691, 22454, 15691, 22456, 15691, 22458, 15691, 22460, 15691, 22462, 15691, 22464, 15691, 22466, 15691, 22468, 15691, 22470, 15691, 22472, 15691, 22474, 15691, 22476, 15691, 22478, 15691, 22480, 15691, 22482, 15691, 22484, 15691, 22486, 15691, 22488, 15691, 22490, 15691, 22492, 15691, 22494, 15691, 22496, 15691, 22498, 15691, 22500, 15691, 22502, 15691, 22504, 15691, 22506, 15691, 22508, 15691, 22510, 15691, 22512, 15691, 22514, 15691, 22516, 15691, 22518, 15691, 22520, 15691, 22522, 15691, 22524, 15691, 22526, 15691, 22528, 15691, 22530, 15691, 22532, 15691, 22534, 15691, 22536, 15691, 22538, 15691, 22540, 15691, 22542, 15691, 22544, 15691, 22546, 15691, 22548, 15691, 22550, 15691, 22552, 15691, 22554, 15691, 22556, 15691, 22558, 15691, 22560, 15691, 22562, 15691, 22564, 15691, 22566, 15691, 22568, 15691, 22570, 15691, 22572, 15691, 22574, 15691, 22576, 15691, 22578, 15691, 22580, 15691, 22582, 15691, 22584, 15691, 22586, 15691, 22588, 15691, 22590, 15691, 22592, 15691, 22594, 15691, 22596, 15691, 22598, 15691, 22600, 15691, 22602, 15691, 22604, 15691, 22606, 15691, 22608, 15691, 22610, 15691, 22612, 15691, 22614, 15691, 22616, 15691, 22618, 15691, 22620, 15691, 22622, 15691, 22624, 15691, 22626, 15691, 22628, 15691, 22630, 15691, 22632, 15691, 22634, 15691, 22636, 15691, 22638, 15691, 22640, 15691, 22642, 15691, 22644, 15691, 22646, 15691, 22648, 15691, 22650, 15691, 22652, 15691, 22654, 15691, 22656, 15691, 22658, 15691, 22660, 15691, 22662, 15691, 22664, 15691, 22666, 15691, 22668, 15691, 22670, 15691, 22672, 15691, 22674, 15691, 22676, 15691, 22678, 15691, 22680, 15691, 22682, 15691, 22684, 15691, 22686, 15691, 22688, 15691, 22690, 15691, 22692, 15691, 22694, 15691, 22696, 15691, 22698, 15691, 22700, 15691, 22702, 15691, 22704, 15691, 22706, 15691, 22708, 15691, 22710, 15691, 22712, 15691, 22714, 15691, 22716, 15691, 22718, 15691, 22720, 15691, 22722, 15691, 22724, 15691, 22726, 15691, 22728, 15691, 22730, 15691, 22732, 15691, 22734, 15691, 22736, 15691, 22738, 15691, 22740, 15691, 22742, 15691, 22744, 15691, 22746, 15691, 22748, 15691, 22750, 15691, 22752, 15691, 22754, 15691, 22756, 15691, 22758, 15691, 22760, 15691, 22762, 15691, 22764, 15691, 22766, 15691, 22768, 15691, 22770, 15691, 22772, 15691, 22774, 15691, 22776, 15691, 22778, 15691, 22780, 15691, 22782, 15691, 22784, 15691, 22786, 15691, 22788, 15691, 22790, 15691, 22792, 15691, 22794, 15691, 22796, 15691, 22798, 15691, 22800, 15691, 22802, 15691, 22804, 15700, 15703, 17521, 14816, 15713, 73, 14993, 8320, 15713, 9855, 13858, 15713, 9855, 15868, 15713, 9855, 17486, 15713, 9855, 17610, 15713, 9855, 17652, 15713, 9855, 19003, 20553, 11392, 15713, 9855, 20552, 15713, 11905, 2610, 15713, 11905, 3076, 15713, 11905, 3356, 15713, 11905, 6756, 15713, 11905, 6778, 15713, 11905, 8780, 15713, 11905, 10900, 15713, 11905, 11978, 15713, 11905, 13450, 15713, 11905, 13736, 15713, 14003, 9855, 8, 15713, 14003, 9855, 16, 15713, 14003, 9855, 28, 15713, 14003, 9855, 40, 15713, 14003, 9855, 58, 15713, 14003, 9855, 72, 15713, 14003, 9855, 94, 15713, 14003, 9855, 184, 15713, 14003, 9855, 308, 15713, 14003, 9855, 498, 15713, 14003, 9855, 676, 15713, 14003, 9855, 17493, 22, 15713, 14003, 9855, 17493, 34, 15713, 14003, 9855, 17493, 396, 15713, 14003, 9855, 17493, 582, 15713, 14993, 8320, 15713, 14999, 0, 15713, 14999, 8, 15713, 14999, 16, 15713, 14999, 28, 15713, 14999, 40, 15713, 14999, 58, 15713, 14999, 72, 15713, 14999, 94, 15713, 14999, 106, 15713, 14999, 124, 15713, 14999, 148, 15713, 14999, 184, 15713, 14999, 244, 15713, 14999, 266, 15713, 14999, 308, 15713, 14999, 336, 15713, 14999, 350, 15713, 14999, 384, 15713, 14999, 416, 15713, 14999, 448, 15713, 14999, 498, 15713, 14999, 522, 15713, 14999, 572, 15713, 14999, 588, 15713, 14999, 622, 15713, 14999, 676, 15713, 14999, 680, 15713, 14999, 734, 15713, 14999, 932, 15713, 14999, 1044, 15713, 14999, 1142, 15713, 14999, 1164, 15713, 14999, 1254, 15713, 14999, 1492, 15713, 14999, 1796, 15713, 14999, 1914, 15713, 14999, 2152, 15713, 14999, 2444, 15713, 14999, 2492, 15713, 14999, 2556, 15713, 14999, 2676, 15713, 14999, 2956, 15713, 14999, 3048, 15713, 14999, 3114, 15713, 14999, 3242, 15713, 14999, 3308, 15713, 14999, 3322, 15713, 14999, 6314, 15713, 14999, 7874, 15713, 14999, 9542, 15713, 14999, 10264, 15713, 14999, 17493, 22, 15713, 14999, 17493, 34, 15713, 14999, 17493, 396, 15713, 14999, 17493, 582, 15713, 18089, 11905, 2611, 1397, 2591, 15385, 485, 6778, 15713, 18089, 11905, 2611, 1397, 6603, 15385, 485, 6778, 15713, 18089, 11905, 3357, 1397, 2591, 15385, 485, 6778, 15713, 18089, 11905, 3357, 1397, 6603, 15385, 485, 6778, 15713, 18089, 11905, 10901, 1397, 2591, 15385, 485, 6778, 15713, 18089, 11905, 13737, 1397, 2591, 15385, 485, 6778, 15713, 18089, 11905, 13737, 1397, 6603, 15385, 485, 6778, 15717, 17089, 843, 5730, 15727, 13642, 15727, 14999, 634, 15727, 14999, 760, 15727, 14999, 882, 15727, 14999, 1578, 15727, 14999, 2386, 15727, 14999, 2866, 15727, 14999, 3648, 15727, 14999, 3786, 15727, 14999, 5238, 15727, 14999, 7160, 15727, 14999, 7630, 15727, 14999, 10134, 15727, 14999, 10258, 15727, 14999, 11432, 15727, 14999, 12060, 15727, 14999, 12144, 15727, 14999, 12428, 15727, 14999, 12512, 15727, 14999, 12686, 15727, 14999, 12970, 15727, 14999, 13272, 15727, 14999, 13438, 15727, 14999, 13972, 15727, 14999, 14020, 15727, 14999, 14538, 15727, 14999, 14574, 15727, 14999, 14770, 15727, 14999, 15466, 15727, 14999, 15534, 15727, 14999, 15724, 15727, 14999, 17818, 15727, 14999, 18196, 15727, 14999, 18440, 15727, 14999, 18728, 15727, 14999, 18870, 15727, 14999, 18980, 15727, 14999, 19292, 15727, 14999, 19410, 15727, 14999, 19626, 15727, 15952, 15727, 16352, 15727, 16508, 15727, 16914, 15727, 17448, 15727, 18874, 15727, 19222, 15727, 19248, 15727, 19480, 15727, 19486, 15743, 671, 9854, 15743, 6435, 9854, 15746, 15754, 15758, 15776, 15781, 9286, 15781, 11757, 18386, 15781, 13260, 15781, 13758, 15781, 15167, 19408, 15781, 15167, 21096, 15781, 17255, 14381, 18524, 15781, 18176, 15781, 18847, 897, 10641, 20181, 15642, 15781, 18847, 897, 13341, 19808, 15781, 18847, 897, 14381, 18524, 15781, 18847, 897, 19048, 15781, 20181, 897, 10641, 14625, 18847, 15642, 15781, 20181, 897, 10641, 15781, 18847, 15642, 15788, 15803, 9854, 15806, 15811, 491, 7127, 9854, 15811, 2511, 9854, 15811, 11446, 15811, 11571, 13501, 13226, 15811, 11571, 18446, 15811, 11762, 15811, 11905, 3356, 15811, 11905, 13736, 15811, 12237, 13563, 14999, 7438, 15811, 12973, 6561, 18471, 7812, 15811, 12973, 10629, 18471, 7812, 15811, 13563, 10, 15811, 13581, 6561, 18471, 7812, 15811, 13581, 10629, 18471, 7812, 15811, 14049, 13501, 13226, 15811, 14542, 15811, 16111, 10, 15811, 18894, 15811, 19614, 15811, 20377, 16111, 12, 15811, 20377, 16111, 22, 15811, 20377, 16111, 48, 15812, 15819, 17045, 11571, 9950, 15823, 6286, 15848, 15861, 505, 11773, 17074, 15866, 15875, 18176, 15879, 18089, 2611, 7122, 15879, 18089, 2611, 12078, 15879, 18089, 2611, 12890, 15879, 18089, 2611, 13536, 15879, 18089, 2611, 13710, 15879, 18089, 2611, 13728, 15879, 18089, 2611, 14634, 15879, 18089, 2611, 17086, 15879, 18089, 2611, 17188, 15879, 18089, 3357, 14692, 15879, 18089, 3357, 15734, 15879, 18089, 6757, 15574, 15879, 18089, 6757, 16356, 15879, 18089, 6779, 14692, 15879, 18089, 10901, 15734, 15879, 18089, 13451, 16356, 15879, 18089, 13737, 14692, 15879, 18089, 13737, 16356, 15879, 18089, 13737, 18508, 15881, 16441, 8461, 15672, 15881, 17791, 8461, 15672, 15883, 6081, 494, 15883, 6081, 11905, 2610, 15883, 6081, 11905, 3076, 15883, 6081, 11905, 3356, 15883, 6081, 11905, 6756, 15883, 6081, 11905, 6778, 15883, 6081, 11905, 8780, 15883, 6081, 11905, 10900, 15883, 6081, 11905, 11978, 15883, 6081, 11905, 13450, 15883, 6081, 11905, 13736, 15883, 6081, 13563, 14999, 0, 15883, 6081, 13563, 14999, 8, 15883, 6081, 13563, 14999, 28, 15883, 6081, 13563, 14999, 78, 15883, 6081, 13563, 14999, 92, 15883, 6081, 13563, 14999, 120, 15883, 6081, 13563, 14999, 148, 15883, 6081, 13563, 14999, 244, 15883, 6081, 13563, 14999, 308, 15883, 6081, 13563, 14999, 366, 15883, 6081, 13563, 14999, 546, 15883, 6081, 13563, 14999, 652, 15883, 6081, 13563, 14999, 676, 15883, 6081, 13563, 14999, 706, 15883, 6081, 13563, 14999, 734, 15883, 6081, 13563, 14999, 742, 15883, 6081, 13563, 14999, 746, 15883, 6081, 13563, 14999, 844, 15883, 6081, 13563, 14999, 1302, 15883, 6081, 13563, 14999, 1306, 15883, 6081, 13563, 14999, 1596, 15883, 6081, 13563, 14999, 2590, 15883, 6081, 13563, 14999, 3068, 15883, 6081, 13563, 14999, 3324, 15883, 6081, 13563, 14999, 3744, 15883, 6081, 13563, 14999, 7172, 15883, 6081, 13563, 14999, 7290, 15883, 6081, 13563, 14999, 7306, 15883, 6081, 13563, 14999, 8702, 15883, 6081, 13563, 14999, 8926, 15883, 6081, 13563, 14999, 9936, 15883, 6081, 13563, 14999, 10552, 15883, 6081, 15233, 3232, 15883, 6081, 15233, 12080, 15883, 6081, 15233, 12108, 15883, 6081, 15233, 13538, 15883, 6081, 15233, 14636, 15883, 6081, 15233, 15194, 15883, 6081, 15233, 15736, 15883, 6081, 15233, 15820, 15883, 6081, 15233, 17190, 15883, 6081, 16111, 14999, 0, 15883, 6081, 16111, 14999, 8, 15883, 6081, 16111, 14999, 28, 15883, 6081, 16111, 14999, 78, 15883, 6081, 16111, 14999, 92, 15883, 6081, 16111, 14999, 120, 15883, 6081, 16111, 14999, 148, 15883, 6081, 16111, 14999, 244, 15883, 6081, 16111, 14999, 308, 15883, 6081, 16111, 14999, 366, 15883, 6081, 16111, 14999, 546, 15883, 6081, 16111, 14999, 652, 15883, 6081, 16111, 14999, 676, 15883, 6081, 16111, 14999, 706, 15883, 6081, 16111, 14999, 734, 15883, 6081, 16111, 14999, 742, 15883, 6081, 16111, 14999, 746, 15883, 6081, 16111, 14999, 844, 15883, 6081, 16111, 14999, 1302, 15883, 6081, 16111, 14999, 1306, 15883, 6081, 16111, 14999, 1596, 15883, 6081, 16111, 14999, 2590, 15883, 6081, 16111, 14999, 3068, 15883, 6081, 16111, 14999, 3324, 15883, 6081, 16111, 14999, 3744, 15883, 6081, 16111, 14999, 7172, 15883, 6081, 16111, 14999, 7290, 15883, 6081, 16111, 14999, 7306, 15883, 6081, 16111, 14999, 8702, 15883, 6081, 16111, 14999, 8926, 15883, 6081, 16111, 14999, 9936, 15883, 6081, 16111, 14999, 10552, 15885, 7127, 9854, 15885, 11571, 6758, 15885, 14049, 6758, 15887, 16441, 8461, 15672, 15887, 17791, 8461, 15672, 15891, 15004, 15893, 18847, 7854, 15895, 14726, 15905, 1598, 15905, 11588, 15905, 15480, 15905, 16164, 15907, 15672, 15911, 17074, 15912, 15921, 12274, 15948, 15959, 484, 15967, 9854, 15978, 15986, 15995, 10641, 5742, 16019, 9854, 16025, 14999, 0, 16025, 14999, 8, 16025, 14999, 16, 16025, 14999, 28, 16025, 14999, 40, 16025, 14999, 58, 16025, 14999, 66, 16025, 14999, 80, 16025, 14999, 82, 16025, 14999, 110, 16025, 14999, 130, 16025, 14999, 154, 16025, 14999, 184, 16025, 14999, 226, 16025, 14999, 248, 16025, 14999, 270, 16025, 14999, 308, 16025, 14999, 338, 16025, 14999, 354, 16025, 14999, 388, 16025, 14999, 424, 16025, 14999, 452, 16025, 14999, 498, 16025, 14999, 528, 16025, 14999, 574, 16025, 14999, 592, 16025, 14999, 626, 16025, 14999, 676, 16025, 14999, 682, 16025, 14999, 720, 16025, 14999, 736, 16025, 14999, 754, 16025, 14999, 780, 16025, 14999, 782, 16025, 14999, 804, 16025, 14999, 934, 16025, 14999, 1166, 16025, 14999, 1484, 16025, 14999, 1494, 16025, 14999, 1654, 16025, 14999, 2446, 16025, 14999, 2494, 16025, 14999, 2560, 16025, 14999, 3050, 16025, 14999, 3244, 16025, 14999, 3324, 16025, 14999, 3622, 16025, 14999, 3632, 16025, 14999, 3774, 16025, 14999, 3814, 16025, 14999, 8764, 16025, 14999, 8766, 16025, 14999, 9832, 16025, 14999, 9916, 16025, 20989, 8320, 16026, 16031, 11734, 16034, 16046, 16048, 16053, 12274, 16054, 16059, 5808, 16061, 95, 14993, 8320, 16061, 5272, 16061, 9855, 13052, 16061, 9855, 15868, 16061, 9855, 17486, 16061, 9855, 17610, 16061, 9855, 17652, 16061, 9855, 20552, 16061, 11905, 2610, 16061, 11905, 3076, 16061, 11905, 3356, 16061, 11905, 6756, 16061, 11905, 6778, 16061, 11905, 8780, 16061, 11905, 10900, 16061, 11905, 11978, 16061, 11905, 13450, 16061, 11905, 13736, 16061, 12159, 8320, 16061, 13379, 8320, 16061, 13379, 9854, 16061, 14003, 9855, 8, 16061, 14003, 9855, 16, 16061, 14003, 9855, 28, 16061, 14003, 9855, 40, 16061, 14003, 9855, 58, 16061, 14003, 9855, 72, 16061, 14003, 9855, 94, 16061, 14003, 9855, 308, 16061, 14003, 9855, 676, 16061, 14003, 9855, 17493, 22, 16061, 14003, 9855, 17493, 34, 16061, 14003, 9855, 17493, 396, 16061, 14003, 9855, 17493, 582, 16061, 14880, 16061, 14999, 0, 16061, 14999, 8, 16061, 14999, 16, 16061, 14999, 28, 16061, 14999, 40, 16061, 14999, 58, 16061, 14999, 72, 16061, 14999, 94, 16061, 14999, 106, 16061, 14999, 124, 16061, 14999, 148, 16061, 14999, 244, 16061, 14999, 266, 16061, 14999, 308, 16061, 14999, 336, 16061, 14999, 350, 16061, 14999, 384, 16061, 14999, 416, 16061, 14999, 448, 16061, 14999, 522, 16061, 14999, 572, 16061, 14999, 573, 10641, 12589, 17838, 16061, 14999, 573, 10641, 15119, 17838, 16061, 14999, 588, 16061, 14999, 622, 16061, 14999, 676, 16061, 14999, 734, 16061, 14999, 932, 16061, 14999, 1044, 16061, 14999, 1142, 16061, 14999, 1164, 16061, 14999, 1492, 16061, 14999, 1796, 16061, 14999, 1914, 16061, 14999, 2444, 16061, 14999, 2492, 16061, 14999, 2556, 16061, 14999, 2676, 16061, 14999, 2912, 16061, 14999, 2956, 16061, 14999, 3048, 16061, 14999, 3114, 16061, 14999, 3242, 16061, 14999, 3322, 16061, 14999, 3772, 16061, 14999, 6314, 16061, 14999, 10264, 16061, 14999, 14929, 622, 16061, 14999, 17493, 22, 16061, 14999, 17493, 34, 16061, 14999, 17493, 396, 16061, 14999, 17493, 582, 16061, 17803, 19479, 2610, 16061, 17803, 19479, 2611, 7821, 10145, 3245, 20596, 16061, 17803, 19479, 3356, 16061, 17803, 19479, 6778, 16061, 17803, 19479, 13736, 16061, 17803, 20597, 17232, 16063, 9502, 16063, 9503, 10641, 14486, 16064, 16066, 16076, 16084, 16085, 485, 16410, 16086, 16091, 16989, 11574, 16091, 16989, 14606, 16091, 16989, 14608, 16091, 16989, 14610, 16091, 16989, 14612, 16091, 16989, 14614, 16091, 16989, 14616, 16091, 16989, 14618, 16091, 16989, 14620, 16091, 16989, 16280, 16091, 16989, 16282, 16091, 16989, 16284, 16091, 16989, 16286, 16091, 16989, 16288, 16091, 16989, 16290, 16091, 16989, 16292, 16091, 16989, 16294, 16091, 16989, 16296, 16091, 16989, 16298, 16091, 16989, 16300, 16091, 16989, 16302, 16091, 16989, 16304, 16091, 16989, 16306, 16091, 16989, 16308, 16091, 16989, 16310, 16091, 16989, 16312, 16091, 16989, 16314, 16091, 16989, 16316, 16091, 16989, 16318, 16091, 16989, 16320, 16091, 16989, 16322, 16091, 16989, 16324, 16091, 16989, 16326, 16091, 16989, 16328, 16091, 16989, 16330, 16091, 16989, 16332, 16091, 16989, 16334, 16091, 16989, 17870, 16091, 16989, 17872, 16091, 16989, 17874, 16091, 16989, 17876, 16091, 16989, 17878, 16091, 16989, 17880, 16091, 16989, 17882, 16091, 16989, 17884, 16091, 16989, 17886, 16091, 16989, 17888, 16091, 16989, 17890, 16091, 16989, 17892, 16091, 16989, 17894, 16091, 16989, 17896, 16091, 16989, 17898, 16091, 16989, 17900, 16091, 16989, 17902, 16091, 16989, 17904, 16091, 16989, 17906, 16091, 16989, 17908, 16091, 16989, 17910, 16091, 16989, 17912, 16091, 16989, 17914, 16091, 16989, 17916, 16091, 16989, 17918, 16091, 16989, 17920, 16091, 16989, 17922, 16091, 16989, 17924, 16091, 16989, 17926, 16091, 16989, 17928, 16091, 16989, 17930, 16091, 16989, 17932, 16091, 16989, 17934, 16091, 16989, 17936, 16091, 16989, 17938, 16091, 16989, 17940, 16091, 16989, 17942, 16091, 16989, 17944, 16091, 16989, 17946, 16091, 16989, 17948, 16091, 16989, 17950, 16091, 16989, 17952, 16091, 16989, 17954, 16091, 16989, 17956, 16091, 16989, 17958, 16091, 16989, 17960, 16091, 16989, 17962, 16091, 16989, 17964, 16091, 16989, 17966, 16091, 16989, 17968, 16091, 16989, 17970, 16091, 16989, 17972, 16091, 16989, 17974, 16091, 16989, 17976, 16091, 16989, 17978, 16091, 16989, 17980, 16091, 16989, 19074, 16091, 16989, 19076, 16091, 16989, 19078, 16091, 16989, 19080, 16091, 16989, 19082, 16091, 16989, 19084, 16091, 16989, 19086, 16091, 16989, 19088, 16091, 16989, 19090, 16091, 16989, 19092, 16091, 16989, 19094, 16091, 16989, 19096, 16091, 16989, 19098, 16091, 16989, 19100, 16091, 16989, 19102, 16091, 16989, 19104, 16091, 16989, 19106, 16091, 16989, 19108, 16091, 16989, 19110, 16091, 16989, 19112, 16091, 16989, 19114, 16091, 16989, 19116, 16091, 16989, 19118, 16091, 16989, 19120, 16091, 16989, 19122, 16091, 16989, 19124, 16091, 16989, 19126, 16091, 16989, 19128, 16091, 16989, 19130, 16091, 16989, 19132, 16091, 16989, 19134, 16091, 16989, 19136, 16091, 16989, 19138, 16091, 16989, 19140, 16091, 16989, 19142, 16091, 16989, 19144, 16091, 16989, 19146, 16091, 16989, 19148, 16091, 16989, 19150, 16091, 16989, 19152, 16091, 16989, 19154, 16091, 16989, 19156, 16091, 16989, 19158, 16091, 16989, 19160, 16091, 16989, 19162, 16091, 16989, 19164, 16091, 16989, 19166, 16091, 16989, 19168, 16091, 16989, 19170, 16091, 16989, 19172, 16091, 16989, 19174, 16091, 16989, 19176, 16091, 16989, 19178, 16091, 16989, 19180, 16091, 16989, 19182, 16091, 16989, 19184, 16091, 16989, 19186, 16091, 16989, 19188, 16091, 16989, 19190, 16091, 16989, 19192, 16091, 16989, 19194, 16091, 16989, 19196, 16091, 16989, 19198, 16091, 16989, 19200, 16091, 16989, 19202, 16091, 16989, 19204, 16091, 16989, 19206, 16091, 16989, 19208, 16091, 16989, 19210, 16091, 16989, 19212, 16091, 16989, 19986, 16091, 16989, 19988, 16091, 16989, 19990, 16091, 16989, 19992, 16091, 16989, 19994, 16091, 16989, 19996, 16091, 16989, 19998, 16091, 16989, 20000, 16091, 16989, 20002, 16091, 16989, 20004, 16091, 16989, 20006, 16091, 16989, 20008, 16091, 16989, 20010, 16091, 16989, 20012, 16091, 16989, 20014, 16091, 16989, 20016, 16091, 16989, 20018, 16091, 16989, 20020, 16091, 16989, 20022, 16091, 16989, 20024, 16091, 16989, 20026, 16091, 16989, 20028, 16091, 16989, 20030, 16091, 16989, 20032, 16091, 16989, 20034, 16091, 16989, 20036, 16091, 16989, 20038, 16091, 16989, 20040, 16091, 16989, 20042, 16091, 16989, 20044, 16091, 16989, 20046, 16091, 16989, 20048, 16091, 16989, 20050, 16091, 16989, 20052, 16091, 16989, 20054, 16091, 16989, 20056, 16091, 16989, 20058, 16091, 16989, 20060, 16091, 16989, 20062, 16091, 16989, 20064, 16091, 16989, 20066, 16091, 16989, 20068, 16091, 16989, 20070, 16091, 16989, 20072, 16091, 16989, 20074, 16091, 16989, 20076, 16091, 16989, 20078, 16091, 16989, 20080, 16091, 16989, 20082, 16091, 16989, 20084, 16091, 16989, 20086, 16091, 16989, 20088, 16091, 16989, 20090, 16091, 16989, 20092, 16091, 16989, 20094, 16091, 16989, 20096, 16091, 16989, 20614, 16091, 16989, 20616, 16091, 16989, 20618, 16091, 16989, 20620, 16091, 16989, 20622, 16091, 16989, 20624, 16091, 16989, 20626, 16091, 16989, 20628, 16091, 16989, 20630, 16091, 16989, 20632, 16091, 16989, 20634, 16091, 16989, 20636, 16091, 16989, 20638, 16091, 16989, 20640, 16091, 16989, 20642, 16091, 16989, 20644, 16091, 16989, 20646, 16091, 16989, 20648, 16091, 16989, 20650, 16091, 16989, 20652, 16091, 16989, 20654, 16091, 16989, 20656, 16091, 16989, 20658, 16091, 16989, 20660, 16091, 16989, 20662, 16091, 16989, 20664, 16091, 16989, 20666, 16091, 16989, 20668, 16091, 16989, 21062, 16091, 16989, 21064, 16091, 16989, 21066, 16091, 16989, 21068, 16091, 16989, 21070, 16091, 16989, 21072, 16091, 16989, 21074, 16091, 16989, 21076, 16091, 16989, 22816, 16100, 16108, 16117, 9854, 16120, 16135, 11584, 16140, 16153, 46, 16153, 128, 16153, 716, 16153, 1217, 18386, 16153, 5853, 46, 16153, 6286, 16153, 9171, 14455, 11979, 17045, 9950, 16153, 9286, 16153, 9503, 18386, 16153, 11773, 15372, 16153, 11905, 2610, 16153, 11905, 3076, 16153, 11905, 3356, 16153, 11905, 6756, 16153, 11905, 6778, 16153, 11905, 8780, 16153, 11905, 10900, 16153, 11905, 11978, 16153, 11905, 13450, 16153, 11905, 13736, 16153, 12277, 14049, 20375, 11476, 16153, 12541, 13563, 14999, 0, 16153, 12541, 13563, 14999, 2, 16153, 12541, 13563, 14999, 4, 16153, 12541, 13563, 14999, 6, 16153, 12541, 13563, 14999, 8, 16153, 12541, 13563, 14999, 10, 16153, 12541, 13563, 14999, 12, 16153, 12541, 13563, 14999, 14, 16153, 12541, 13563, 14999, 16, 16153, 12541, 13563, 14999, 18, 16153, 12541, 13563, 14999, 20, 16153, 12541, 13563, 14999, 22, 16153, 12541, 13563, 14999, 24, 16153, 12541, 13563, 14999, 26, 16153, 12541, 13563, 14999, 28, 16153, 12541, 13563, 14999, 30, 16153, 12541, 13563, 14999, 32, 16153, 12541, 13563, 14999, 34, 16153, 12541, 13563, 14999, 36, 16153, 12541, 13563, 14999, 38, 16153, 12541, 13563, 14999, 40, 16153, 12541, 13563, 14999, 42, 16153, 12541, 13563, 14999, 44, 16153, 12541, 13563, 14999, 46, 16153, 12541, 13563, 14999, 48, 16153, 12541, 13563, 14999, 50, 16153, 12541, 16111, 14999, 0, 16153, 12541, 16111, 14999, 2, 16153, 12541, 16111, 14999, 4, 16153, 12541, 16111, 14999, 6, 16153, 12541, 16111, 14999, 8, 16153, 12541, 16111, 14999, 10, 16153, 12541, 16111, 14999, 12, 16153, 12541, 16111, 14999, 14, 16153, 12541, 16111, 14999, 16, 16153, 12541, 16111, 14999, 18, 16153, 12541, 16111, 14999, 20, 16153, 12541, 16111, 14999, 22, 16153, 12541, 16111, 14999, 24, 16153, 12541, 16111, 14999, 26, 16153, 12541, 16111, 14999, 28, 16153, 12541, 16111, 14999, 30, 16153, 12541, 16111, 14999, 32, 16153, 12541, 16111, 14999, 34, 16153, 12541, 16111, 14999, 36, 16153, 12541, 16111, 14999, 38, 16153, 12541, 16111, 14999, 40, 16153, 12541, 16111, 14999, 42, 16153, 12541, 16111, 14999, 44, 16153, 12541, 16111, 14999, 46, 16153, 12541, 16111, 14999, 48, 16153, 12541, 16111, 14999, 50, 16153, 12740, 16153, 13764, 16153, 14049, 9950, 16153, 14049, 14418, 16153, 14418, 16153, 14646, 16153, 14819, 9866, 16153, 14819, 9867, 0, 16153, 14819, 11732, 16153, 14819, 11733, 0, 16153, 14819, 12280, 16153, 14819, 12281, 0, 16153, 14819, 12376, 16153, 14819, 12377, 0, 16153, 14819, 12377, 40, 16153, 14819, 12732, 16153, 14819, 12733, 0, 16153, 14819, 12886, 16153, 14819, 12887, 0, 16153, 14819, 13232, 16153, 14819, 13233, 0, 16153, 14819, 13336, 16153, 14819, 13337, 0, 16153, 14819, 14944, 16153, 14819, 14945, 0, 16153, 14819, 15748, 16153, 14819, 15749, 0, 16153, 14819, 16142, 16153, 14819, 16143, 0, 16153, 14819, 16576, 16153, 14819, 16577, 0, 16153, 14819, 17024, 16153, 14819, 17025, 0, 16153, 14819, 17362, 16153, 14819, 17363, 0, 16153, 14883, 12541, 16111, 14999, 4, 16153, 14883, 12541, 16111, 14999, 34, 16153, 14955, 18979, 12424, 16153, 14955, 18979, 14462, 16153, 15233, 3232, 16153, 15233, 3233, 497, 11571, 15620, 16153, 15233, 12080, 16153, 15233, 12081, 497, 11571, 15620, 16153, 15233, 12108, 16153, 15233, 12109, 497, 11571, 15620, 16153, 15233, 12109, 2610, 16153, 15233, 12109, 3076, 16153, 15233, 12109, 3356, 16153, 15233, 12109, 6756, 16153, 15233, 12109, 6778, 16153, 15233, 12109, 8780, 16153, 15233, 12109, 11978, 16153, 15233, 12109, 13450, 16153, 15233, 12109, 13736, 16153, 15233, 13539, 497, 11571, 15620, 16153, 15233, 14637, 497, 11571, 15620, 16153, 15233, 14638, 16153, 15233, 15736, 16153, 15233, 15737, 497, 11571, 15620, 16153, 15233, 15737, 2610, 16153, 15233, 15737, 3076, 16153, 15233, 15737, 3356, 16153, 15233, 15737, 6756, 16153, 15233, 15737, 6778, 16153, 15233, 15737, 8780, 16153, 15233, 15737, 11978, 16153, 15233, 15737, 13450, 16153, 15233, 15737, 13736, 16153, 15233, 15818, 16153, 15233, 15820, 16153, 15233, 15821, 497, 11571, 15620, 16153, 15233, 15821, 2610, 16153, 15233, 15821, 3076, 16153, 15233, 15821, 3356, 16153, 15233, 15821, 6756, 16153, 15233, 15821, 6778, 16153, 15233, 15821, 8780, 16153, 15233, 15821, 11978, 16153, 15233, 15821, 13450, 16153, 15233, 15821, 13736, 16153, 15233, 16400, 16153, 15233, 17191, 497, 11571, 15620, 16153, 15233, 17232, 16153, 15233, 18010, 16153, 15233, 18086, 16153, 15233, 18362, 16153, 15233, 18742, 16153, 15233, 19622, 16153, 15379, 8320, 16153, 17123, 17254, 16153, 17643, 18386, 16153, 17793, 12532, 16153, 17865, 9854, 16153, 17865, 13546, 16153, 18209, 0, 16153, 18209, 8, 16153, 18209, 16, 16153, 18209, 28, 16153, 18209, 40, 16153, 18209, 266, 16153, 18209, 270, 16153, 18209, 274, 16153, 18209, 282, 16153, 18209, 286, 16153, 18209, 350, 16153, 18209, 354, 16153, 18209, 358, 16153, 18209, 366, 16153, 18209, 370, 16153, 18209, 416, 16153, 18209, 424, 16153, 18209, 430, 16153, 18209, 436, 16153, 18209, 440, 16153, 18209, 448, 16153, 18209, 452, 16153, 18209, 460, 16153, 18209, 468, 16153, 18209, 472, 16153, 18209, 572, 16153, 18209, 574, 16153, 18209, 578, 16153, 18209, 580, 16153, 18209, 584, 16153, 18209, 588, 16153, 18209, 592, 16153, 18209, 598, 16153, 18209, 602, 16153, 18209, 612, 16153, 18209, 622, 16153, 18209, 626, 16153, 18209, 630, 16153, 18209, 634, 16153, 18209, 642, 16153, 18209, 694, 16153, 18209, 700, 16153, 18209, 706, 16153, 18209, 710, 16153, 18209, 734, 16153, 18209, 742, 16153, 18209, 746, 16153, 18430, 16153, 18775, 6434, 16153, 18847, 896, 16153, 19341, 2174, 16153, 19341, 2610, 16153, 19341, 3076, 16153, 19341, 3136, 16153, 19341, 3232, 16153, 19341, 3356, 16153, 19341, 6102, 16153, 19341, 6746, 16153, 19341, 6756, 16153, 19341, 6778, 16153, 19341, 7134, 16153, 19341, 7170, 16153, 19341, 7446, 16153, 19341, 7694, 16153, 19341, 7816, 16153, 19341, 8314, 16153, 19341, 8460, 16153, 19341, 8596, 16153, 19341, 8780, 16153, 19341, 9488, 16153, 19341, 10644, 16153, 19341, 11968, 16153, 19341, 11978, 16153, 19341, 12518, 16153, 19341, 12700, 16153, 19341, 12888, 16153, 19341, 13262, 16153, 19341, 13340, 16153, 19341, 13450, 16153, 19341, 13626, 16153, 19341, 13634, 16153, 19341, 13736, 16153, 19341, 14032, 16153, 19341, 14264, 16153, 19341, 14454, 16153, 19341, 14684, 16153, 19341, 15496, 16153, 19341, 15508, 16153, 19341, 16188, 16153, 19341, 17250, 16153, 19341, 17264, 16153, 19341, 17596, 16153, 19341, 18298, 16153, 19341, 18510, 16153, 19341, 18528, 16153, 19341, 18536, 16153, 19341, 18686, 16153, 19341, 18884, 16153, 19341, 18916, 16153, 19341, 19240, 16153, 19341, 19258, 16153, 19341, 19680, 16153, 19341, 20116, 16153, 19341, 21128, 16153, 19341, 22978, 16153, 19408, 16153, 20181, 897, 10641, 12974, 16153, 20743, 15592, 16153, 21096, 16153, 22894, 16153, 23111, 9855, 10641, 19921, 14262, 16153, 23549, 17865, 9854, 16157, 11584, 16173, 13688, 16179, 18176, 16181, 12486, 16182, 16195, 899, 843, 5730, 16197, 12088, 16197, 15668, 16197, 18349, 17275, 12541, 16111, 14999, 30, 16199, 5730, 16206, 16208, 16212, 16217, 18697, 0, 16217, 18697, 8, 16217, 18697, 16, 16217, 18697, 28, 16217, 18697, 40, 16217, 18697, 336, 16217, 18697, 342, 16217, 18697, 350, 16217, 18697, 354, 16217, 18697, 358, 16217, 18697, 366, 16217, 18697, 370, 16217, 18697, 384, 16217, 18697, 388, 16217, 18697, 392, 16217, 18697, 402, 16217, 18697, 406, 16217, 18697, 416, 16217, 18697, 424, 16217, 18697, 430, 16217, 18697, 436, 16217, 18697, 440, 16217, 18697, 448, 16217, 18697, 452, 16217, 18697, 460, 16217, 18697, 468, 16217, 18697, 472, 16217, 18697, 522, 16217, 18697, 528, 16217, 18697, 536, 16217, 18697, 540, 16217, 18697, 546, 16217, 18697, 572, 16217, 18697, 574, 16217, 18697, 578, 16217, 18697, 580, 16217, 18697, 584, 16217, 18697, 588, 16217, 18697, 592, 16217, 18697, 598, 16217, 18697, 602, 16217, 18697, 612, 16217, 18697, 622, 16217, 18697, 626, 16217, 18697, 630, 16217, 18697, 634, 16217, 18697, 642, 16217, 18697, 694, 16217, 18697, 700, 16217, 18697, 706, 16217, 18697, 710, 16217, 18697, 718, 16217, 18697, 720, 16217, 18697, 752, 16217, 18697, 760, 16233, 18041, 15672, 16233, 19619, 1913, 15672, 16239, 13563, 14999, 14, 16239, 13563, 14999, 102, 16239, 13563, 14999, 186, 16239, 13563, 14999, 198, 16239, 13563, 14999, 200, 16239, 13563, 14999, 202, 16239, 13563, 14999, 208, 16239, 13563, 14999, 210, 16239, 13563, 14999, 218, 16239, 13563, 14999, 488, 16239, 13563, 14999, 514, 16239, 13563, 14999, 712, 16239, 13563, 14999, 918, 16239, 13563, 14999, 1152, 16239, 13563, 14999, 1300, 16239, 13563, 14999, 1318, 16239, 13563, 14999, 1328, 16239, 13563, 14999, 1456, 16239, 13563, 14999, 1788, 16239, 13563, 14999, 1892, 16239, 13563, 14999, 2664, 16239, 13563, 14999, 3226, 16239, 13563, 14999, 3456, 16239, 13563, 14999, 3694, 16239, 13563, 14999, 3804, 16239, 13563, 14999, 6024, 16239, 13563, 14999, 7883, 0, 16239, 13563, 14999, 7883, 8, 16239, 13563, 14999, 7883, 16, 16239, 13563, 14999, 7883, 28, 16239, 13563, 14999, 7883, 70, 16239, 13563, 14999, 7883, 498, 16239, 13563, 14999, 10150, 16239, 13563, 14999, 10914, 16239, 13563, 14999, 13507, 0, 16239, 13563, 14999, 13507, 8, 16239, 13563, 14999, 13507, 16, 16239, 13563, 14999, 13507, 28, 16239, 13563, 14999, 13507, 70, 16239, 13563, 14999, 13507, 498, 16239, 16111, 14999, 14, 16239, 16111, 14999, 102, 16239, 16111, 14999, 186, 16239, 16111, 14999, 198, 16239, 16111, 14999, 200, 16239, 16111, 14999, 202, 16239, 16111, 14999, 208, 16239, 16111, 14999, 210, 16239, 16111, 14999, 218, 16239, 16111, 14999, 488, 16239, 16111, 14999, 514, 16239, 16111, 14999, 712, 16239, 16111, 14999, 918, 16239, 16111, 14999, 1152, 16239, 16111, 14999, 1300, 16239, 16111, 14999, 1318, 16239, 16111, 14999, 1328, 16239, 16111, 14999, 1456, 16239, 16111, 14999, 1788, 16239, 16111, 14999, 1892, 16239, 16111, 14999, 2664, 16239, 16111, 14999, 3226, 16239, 16111, 14999, 3456, 16239, 16111, 14999, 3694, 16239, 16111, 14999, 3804, 16239, 16111, 14999, 6024, 16239, 16111, 14999, 7883, 0, 16239, 16111, 14999, 7883, 8, 16239, 16111, 14999, 7883, 16, 16239, 16111, 14999, 7883, 28, 16239, 16111, 14999, 7883, 70, 16239, 16111, 14999, 7883, 498, 16239, 16111, 14999, 10150, 16239, 16111, 14999, 10914, 16239, 16111, 14999, 13507, 0, 16239, 16111, 14999, 13507, 8, 16239, 16111, 14999, 13507, 16, 16239, 16111, 14999, 13507, 28, 16239, 16111, 14999, 13507, 70, 16239, 16111, 14999, 13507, 498, 16241, 15896, 16241, 17772, 16249, 10641, 3293, 7123, 11570, 16249, 10641, 7817, 7123, 11570, 16249, 10641, 13341, 7123, 11570, 16249, 10641, 14393, 7123, 11570, 16249, 13461, 10641, 1, 1217, 14874, 16249, 15694, 16249, 18386, 16261, 16153, 20377, 11905, 2610, 16261, 16153, 20377, 11905, 3076, 16261, 16153, 20377, 11905, 3356, 16261, 16153, 20377, 11905, 6756, 16261, 16153, 20377, 11905, 6778, 16261, 16153, 20377, 11905, 8780, 16261, 16153, 20377, 11905, 10900, 16261, 16153, 20377, 11905, 11978, 16261, 16153, 20377, 11905, 13450, 16261, 16153, 20377, 11905, 13736, 16261, 16153, 20377, 15233, 3232, 16261, 18349, 16153, 11905, 2610, 16261, 18349, 16153, 11905, 3076, 16261, 18349, 16153, 11905, 3356, 16261, 18349, 16153, 11905, 6756, 16261, 18349, 16153, 11905, 6778, 16261, 18349, 16153, 11905, 8780, 16261, 18349, 16153, 11905, 11978, 16261, 18349, 16153, 11905, 13450, 16261, 18349, 16153, 11905, 13736, 16261, 18349, 16153, 15233, 3232, 16261, 18349, 16153, 20377, 11905, 2610, 16261, 18349, 16153, 20377, 11905, 3076, 16261, 18349, 16153, 20377, 11905, 3356, 16261, 18349, 16153, 20377, 11905, 6756, 16261, 18349, 16153, 20377, 11905, 6778, 16261, 18349, 16153, 20377, 11905, 8780, 16261, 18349, 16153, 20377, 11905, 10900, 16261, 18349, 16153, 20377, 11905, 11978, 16261, 18349, 16153, 20377, 11905, 13450, 16261, 18349, 16153, 20377, 11905, 13736, 16261, 18349, 16153, 20377, 15233, 3232, 16272, 16275, 15672, 16276, 16337, 8315, 9854, 16337, 14685, 9854, 16339, 9854, 16340, 16363, 14999, 0, 16363, 14999, 8, 16363, 14999, 16, 16363, 14999, 28, 16363, 14999, 40, 16363, 14999, 48, 16363, 14999, 110, 16363, 14999, 130, 16363, 14999, 154, 16363, 14999, 192, 16363, 14999, 226, 16363, 14999, 248, 16363, 14999, 270, 16363, 14999, 338, 16363, 14999, 354, 16363, 14999, 388, 16363, 14999, 424, 16363, 14999, 448, 16363, 14999, 452, 16363, 14999, 528, 16363, 14999, 558, 16363, 14999, 574, 16363, 14999, 592, 16363, 14999, 626, 16363, 14999, 682, 16363, 14999, 720, 16363, 14999, 754, 16363, 14999, 1046, 16363, 14999, 1166, 16363, 14999, 1494, 16363, 14999, 1518, 16363, 14999, 1916, 16363, 14999, 2154, 16363, 14999, 2422, 16363, 14999, 2480, 16363, 14999, 2958, 16363, 14999, 3050, 16363, 14999, 3244, 16363, 14999, 3814, 16363, 14999, 14774, 16365, 484, 16365, 485, 10641, 1217, 11392, 16365, 485, 10641, 3357, 20181, 17302, 16365, 485, 10641, 7883, 20181, 15642, 16365, 485, 10641, 16946, 16365, 485, 10641, 18836, 16365, 485, 10641, 18847, 897, 93, 1299, 485, 20181, 15642, 16365, 485, 16935, 17462, 16365, 485, 16935, 19214, 16384, 16389, 17839, 317, 14049, 14487, 317, 11571, 15620, 16389, 17839, 17793, 12973, 6561, 11476, 16389, 17839, 17793, 15451, 17838, 16395, 6718, 16404, 16407, 9289, 843, 6750, 16415, 6718, 16418, 16425, 3420, 16451, 9950, 16452, 16457, 95, 14993, 8320, 16457, 494, 16457, 9855, 13052, 16457, 9855, 13246, 16457, 9855, 15868, 16457, 9855, 17486, 16457, 9855, 17610, 16457, 9855, 17652, 16457, 9855, 19003, 17611, 11392, 16457, 9855, 20552, 16457, 14003, 9855, 16, 16457, 14003, 9855, 40, 16457, 14003, 9855, 58, 16457, 14003, 9855, 72, 16457, 14003, 9855, 94, 16457, 14003, 9855, 184, 16457, 14003, 9855, 308, 16457, 14003, 9855, 498, 16457, 14003, 9855, 676, 16457, 14003, 9855, 17493, 22, 16457, 14003, 9855, 17493, 34, 16457, 14003, 9855, 17493, 396, 16457, 14003, 9855, 17493, 582, 16457, 14999, 0, 16457, 14999, 16, 16457, 14999, 40, 16457, 14999, 58, 16457, 14999, 72, 16457, 14999, 94, 16457, 14999, 106, 16457, 14999, 124, 16457, 14999, 148, 16457, 14999, 184, 16457, 14999, 244, 16457, 14999, 266, 16457, 14999, 308, 16457, 14999, 336, 16457, 14999, 350, 16457, 14999, 384, 16457, 14999, 416, 16457, 14999, 448, 16457, 14999, 498, 16457, 14999, 522, 16457, 14999, 572, 16457, 14999, 588, 16457, 14999, 622, 16457, 14999, 676, 16457, 14999, 680, 16457, 14999, 734, 16457, 14999, 932, 16457, 14999, 1044, 16457, 14999, 1142, 16457, 14999, 1164, 16457, 14999, 1492, 16457, 14999, 1796, 16457, 14999, 1914, 16457, 14999, 2152, 16457, 14999, 2444, 16457, 14999, 2492, 16457, 14999, 2556, 16457, 14999, 2676, 16457, 14999, 3048, 16457, 14999, 3114, 16457, 14999, 3242, 16457, 14999, 3322, 16457, 14999, 6314, 16457, 14999, 10264, 16457, 14999, 13983, 14625, 17610, 16457, 14999, 13983, 17610, 16457, 14999, 17493, 22, 16457, 14999, 17493, 34, 16457, 14999, 17493, 396, 16457, 14999, 17493, 582, 16461, 12274, 16463, 9854, 16466, 16473, 6718, 16474, 16479, 9855, 18414, 16479, 14003, 9855, 16, 16479, 14003, 9855, 40, 16479, 14999, 0, 16479, 14999, 16, 16479, 14999, 40, 16479, 14999, 106, 16479, 14999, 148, 16479, 14999, 244, 16479, 14999, 266, 16479, 14999, 350, 16479, 14999, 384, 16479, 14999, 416, 16479, 14999, 448, 16479, 14999, 522, 16479, 14999, 572, 16479, 14999, 588, 16479, 14999, 622, 16479, 14999, 694, 16479, 14999, 734, 16479, 14999, 2444, 16499, 9854, 16501, 6718, 16503, 15365, 15672, 16523, 14299, 6777, 17202, 16523, 19759, 18692, 16529, 14049, 14486, 16529, 14418, 16537, 16698, 16546, 16553, 73, 14993, 8320, 16553, 9855, 13052, 16553, 9855, 15868, 16553, 9855, 17259, 20552, 16553, 9855, 17486, 16553, 9855, 17610, 16553, 9855, 17652, 16553, 9855, 20552, 16553, 9855, 20756, 16553, 9855, 20974, 16553, 11905, 2610, 16553, 11905, 3076, 16553, 11905, 3356, 16553, 11905, 6756, 16553, 11905, 6778, 16553, 11905, 8780, 16553, 11905, 10900, 16553, 11905, 11978, 16553, 11905, 13450, 16553, 11905, 13736, 16553, 14003, 9855, 8, 16553, 14003, 9855, 16, 16553, 14003, 9855, 28, 16553, 14003, 9855, 40, 16553, 14003, 9855, 58, 16553, 14003, 9855, 72, 16553, 14003, 9855, 94, 16553, 14003, 9855, 184, 16553, 14003, 9855, 308, 16553, 14003, 9855, 498, 16553, 14003, 9855, 676, 16553, 14003, 9855, 17493, 22, 16553, 14003, 9855, 17493, 34, 16553, 14003, 9855, 17493, 396, 16553, 14003, 9855, 17493, 582, 16553, 14993, 8320, 16553, 14999, 0, 16553, 14999, 8, 16553, 14999, 16, 16553, 14999, 28, 16553, 14999, 40, 16553, 14999, 58, 16553, 14999, 72, 16553, 14999, 94, 16553, 14999, 106, 16553, 14999, 124, 16553, 14999, 148, 16553, 14999, 184, 16553, 14999, 224, 16553, 14999, 244, 16553, 14999, 266, 16553, 14999, 308, 16553, 14999, 336, 16553, 14999, 350, 16553, 14999, 384, 16553, 14999, 416, 16553, 14999, 448, 16553, 14999, 498, 16553, 14999, 522, 16553, 14999, 572, 16553, 14999, 588, 16553, 14999, 622, 16553, 14999, 676, 16553, 14999, 680, 16553, 14999, 734, 16553, 14999, 932, 16553, 14999, 1044, 16553, 14999, 1142, 16553, 14999, 1164, 16553, 14999, 1492, 16553, 14999, 1796, 16553, 14999, 1914, 16553, 14999, 2152, 16553, 14999, 2444, 16553, 14999, 2492, 16553, 14999, 2556, 16553, 14999, 2676, 16553, 14999, 2956, 16553, 14999, 3048, 16553, 14999, 3114, 16553, 14999, 3242, 16553, 14999, 3322, 16553, 14999, 6314, 16553, 14999, 7874, 16553, 14999, 10264, 16553, 14999, 17493, 22, 16553, 14999, 17493, 34, 16553, 14999, 17493, 396, 16553, 14999, 17493, 582, 16585, 1019, 6719, 10641, 14497, 6604, 16585, 6718, 16585, 6719, 10641, 14497, 6604, 16585, 6719, 10641, 17245, 6604, 16712, 16721, 19413, 9854, 16727, 504, 16727, 505, 10641, 1217, 11392, 16727, 505, 10641, 14625, 16946, 16727, 505, 10641, 14625, 18836, 16727, 505, 10641, 15119, 9952, 16727, 505, 10641, 20181, 6286, 16727, 505, 20833, 16727, 842, 16727, 842, 16727, 843, 10641, 1217, 11392, 16727, 843, 10641, 14625, 16946, 16727, 843, 10641, 14625, 18836, 16727, 843, 10641, 15119, 9952, 16727, 843, 10641, 18836, 16727, 843, 10641, 20181, 6286, 16732, 16733, 16269, 123, 20181, 9564, 16747, 10189, 2611, 485, 16036, 16747, 10189, 2611, 485, 16154, 16747, 10189, 2611, 485, 19918, 16747, 10189, 2897, 14626, 16747, 10189, 3077, 485, 16036, 16747, 10189, 3077, 485, 16154, 16747, 10189, 3077, 485, 19918, 16747, 10189, 3357, 485, 16036, 16747, 10189, 3357, 485, 16154, 16747, 10189, 3357, 485, 19918, 16747, 10189, 5720, 16747, 10189, 6561, 10634, 16747, 10189, 6757, 485, 16036, 16747, 10189, 6757, 485, 16154, 16747, 10189, 6757, 485, 19918, 16747, 10189, 6779, 485, 16036, 16747, 10189, 6779, 485, 16154, 16747, 10189, 6779, 485, 19918, 16747, 10189, 8781, 485, 16036, 16747, 10189, 8781, 485, 16154, 16747, 10189, 8781, 485, 19918, 16747, 10189, 9284, 16747, 10189, 10629, 10634, 16747, 10189, 11979, 485, 16036, 16747, 10189, 11979, 485, 16154, 16747, 10189, 11979, 485, 19918, 16747, 10189, 12239, 14626, 16747, 10189, 12418, 16747, 10189, 12973, 10634, 16747, 10189, 13451, 485, 16036, 16747, 10189, 13451, 485, 16154, 16747, 10189, 13451, 485, 19918, 16747, 10189, 13581, 10634, 16747, 10189, 13737, 485, 16036, 16747, 10189, 13737, 485, 16154, 16747, 10189, 13737, 485, 19918, 16747, 10189, 14049, 14626, 16747, 10189, 14332, 16747, 10189, 14346, 16747, 10189, 15264, 16747, 10189, 15614, 16747, 10189, 15658, 16747, 10189, 15898, 16747, 10189, 21292, 16761, 11772, 16763, 14999, 60, 16763, 14999, 64, 16763, 14999, 68, 16763, 14999, 70, 16763, 14999, 74, 16763, 14999, 76, 16763, 14999, 78, 16763, 14999, 80, 16763, 14999, 84, 16763, 14999, 86, 16763, 14999, 88, 16763, 14999, 90, 16763, 14999, 92, 16763, 14999, 104, 16763, 14999, 316, 16763, 14999, 328, 16763, 14999, 826, 16763, 14999, 864, 16763, 14999, 866, 16763, 14999, 868, 16763, 14999, 1864, 16763, 14999, 5240, 16763, 14999, 12258, 16763, 14999, 17464, 16763, 14999, 18004, 16763, 20155, 8320, 16763, 20523, 8320, 16763, 20876, 16763, 21267, 8320, 16773, 7139, 8320, 16773, 8321, 9742, 16773, 9855, 17610, 16773, 9855, 20552, 16773, 14003, 9855, 8, 16773, 14003, 9855, 16, 16773, 14003, 9855, 28, 16773, 14003, 9855, 40, 16773, 14003, 9855, 58, 16773, 14999, 0, 16773, 14999, 52, 16773, 14999, 106, 16773, 14999, 124, 16773, 14999, 148, 16773, 14999, 244, 16773, 14999, 266, 16773, 14999, 336, 16773, 14999, 350, 16773, 14999, 384, 16773, 14999, 416, 16773, 14999, 448, 16773, 14999, 522, 16773, 14999, 572, 16773, 14999, 588, 16773, 14999, 622, 16773, 14999, 694, 16773, 14999, 734, 16773, 14999, 752, 16773, 14999, 1044, 16773, 14999, 1254, 16773, 14999, 1914, 16773, 14999, 2444, 16773, 14999, 2556, 16773, 14999, 2676, 16773, 14999, 3048, 16773, 14999, 3242, 16773, 14999, 3308, 16773, 14999, 3812, 16773, 14999, 10240, 16773, 19667, 14999, 0, 16773, 19667, 14999, 106, 16773, 19667, 14999, 124, 16773, 19667, 14999, 148, 16773, 19667, 14999, 244, 16773, 19667, 14999, 266, 16773, 19667, 14999, 336, 16773, 19667, 14999, 350, 16773, 19667, 14999, 384, 16773, 19667, 14999, 416, 16773, 19667, 14999, 448, 16773, 19667, 14999, 522, 16773, 19667, 14999, 572, 16773, 19667, 14999, 588, 16773, 19667, 14999, 622, 16773, 19667, 14999, 694, 16773, 19667, 14999, 734, 16773, 19667, 14999, 752, 16773, 19667, 14999, 1044, 16773, 19667, 14999, 1254, 16773, 19667, 14999, 1914, 16773, 19667, 14999, 2444, 16773, 19667, 14999, 2556, 16773, 19667, 14999, 2676, 16773, 19667, 14999, 3048, 16773, 19667, 14999, 3242, 16773, 19667, 14999, 3308, 16773, 19667, 14999, 3812, 16773, 19667, 14999, 10240, 16775, 5293, 17454, 16801, 10641, 8781, 17696, 16802, 16809, 20181, 18016, 16812, 16829, 14999, 0, 16829, 14999, 8, 16829, 14999, 16, 16829, 14999, 40, 16829, 14999, 106, 16829, 14999, 124, 16829, 14999, 148, 16829, 14999, 244, 16829, 14999, 266, 16829, 14999, 336, 16829, 14999, 350, 16829, 14999, 384, 16829, 14999, 416, 16829, 14999, 448, 16829, 14999, 522, 16829, 14999, 572, 16829, 14999, 588, 16829, 14999, 622, 16829, 14999, 680, 16829, 14999, 734, 16829, 14999, 932, 16829, 14999, 1044, 16829, 14999, 1142, 16829, 14999, 1164, 16829, 14999, 1492, 16829, 14999, 1812, 16829, 14999, 1914, 16829, 14999, 2492, 16829, 14999, 2556, 16829, 14999, 2676, 16829, 14999, 2912, 16829, 14999, 2956, 16829, 14999, 3242, 16829, 14999, 3322, 16829, 14999, 6306, 16829, 14999, 6314, 16829, 14999, 10264, 16829, 17179, 8320, 16831, 8852, 16831, 13434, 16831, 15673, 5, 6088, 16831, 15673, 11, 6088, 16831, 15673, 11, 6089, 15275, 5258, 16831, 15673, 11, 6089, 15275, 11524, 16831, 15673, 13, 6088, 16831, 15673, 13, 6089, 15275, 5258, 16831, 15673, 13, 6089, 15275, 11524, 16831, 15673, 47, 18374, 16831, 15673, 50, 16831, 15673, 149, 5968, 16831, 15673, 636, 16831, 15673, 1097, 10192, 16831, 15673, 1129, 13440, 16831, 15673, 1299, 485, 15630, 16831, 15673, 1299, 3256, 16831, 15673, 1299, 5796, 16831, 15673, 1299, 9882, 16831, 15673, 1299, 15332, 16831, 15673, 2611, 16503, 22951, 8852, 16831, 15673, 2611, 16503, 22951, 9488, 16831, 15673, 2673, 20452, 16831, 15673, 6092, 16831, 15673, 6278, 16831, 15673, 6279, 834, 16831, 15673, 6441, 14490, 16831, 15673, 6441, 14492, 16831, 15673, 6761, 670, 16831, 15673, 6761, 6434, 16831, 15673, 6797, 11570, 16831, 15673, 6797, 14048, 16831, 15673, 7123, 8852, 16831, 15673, 7123, 9488, 16831, 15673, 7123, 13205, 8320, 16831, 15673, 7817, 15435, 9854, 16831, 15673, 8461, 18375, 11570, 16831, 15673, 8461, 18375, 14048, 16831, 15673, 8925, 18374, 16831, 15673, 9287, 18374, 16831, 15673, 10296, 16831, 15673, 10297, 670, 16831, 15673, 10297, 13546, 16831, 15673, 10555, 18374, 16831, 15673, 10641, 20688, 16831, 15673, 11547, 3256, 16831, 15673, 11547, 5796, 16831, 15673, 11547, 9882, 16831, 15673, 11547, 15332, 16831, 15673, 11592, 16831, 15673, 11596, 16831, 15673, 11770, 16831, 15673, 12085, 16038, 16831, 15673, 12106, 16831, 15673, 12225, 8853, 469, 13546, 16831, 15673, 12225, 8853, 13546, 16831, 15673, 12578, 16831, 15673, 12579, 18449, 9488, 16831, 15673, 12579, 20191, 9488, 16831, 15673, 12708, 16831, 15673, 12777, 9488, 16831, 15673, 13205, 671, 8320, 16831, 15673, 13205, 8320, 16831, 15673, 13224, 16831, 15673, 13341, 15435, 9854, 16831, 15673, 13440, 16831, 15673, 13469, 670, 16831, 15673, 13469, 6434, 16831, 15673, 13507, 16038, 16831, 15673, 13994, 16831, 15673, 14051, 8852, 16831, 15673, 14051, 9488, 16831, 15673, 14405, 8320, 16831, 15673, 14406, 16831, 15673, 14407, 9488, 16831, 15673, 14487, 47, 18374, 16831, 15673, 14494, 16831, 15673, 14509, 10192, 16831, 15673, 14555, 16038, 16831, 15673, 14561, 13546, 16831, 15673, 14625, 6760, 16831, 15673, 14625, 13468, 16831, 15673, 14625, 16038, 16831, 15673, 14635, 8852, 16831, 15673, 14635, 9488, 16831, 15673, 14937, 5, 6088, 16831, 15673, 14937, 1299, 485, 13226, 16831, 15673, 14937, 6761, 9854, 16831, 15673, 14937, 7123, 8852, 16831, 15673, 14937, 12085, 8852, 16831, 15673, 14937, 14051, 8852, 16831, 15673, 14937, 14635, 8853, 9953, 670, 16831, 15673, 14937, 14635, 8853, 9953, 6434, 16831, 15673, 14937, 17087, 8853, 9953, 670, 16831, 15673, 14937, 17087, 8853, 9953, 6434, 16831, 15673, 14937, 20351, 8320, 16831, 15673, 15082, 16831, 15673, 15124, 16831, 15673, 15125, 9488, 16831, 15673, 15125, 11570, 16831, 15673, 15275, 5258, 16831, 15673, 15275, 11524, 16831, 15673, 15435, 6430, 16831, 15673, 15573, 16038, 16831, 15673, 15621, 2, 16831, 15673, 15621, 18375, 11570, 16831, 15673, 15621, 18375, 14048, 16831, 15673, 15648, 16831, 15673, 15715, 19521, 1089, 20341, 18448, 16831, 15673, 15715, 19521, 1089, 20341, 18449, 21054, 16831, 15673, 15715, 19521, 1089, 20341, 20190, 16831, 15673, 15715, 20739, 1089, 20341, 18448, 16831, 15673, 15715, 20739, 1089, 20341, 20190, 16831, 15673, 15715, 20739, 1089, 20341, 20191, 21054, 16831, 15673, 15715, 20739, 1089, 20341, 20191, 21056, 16831, 15673, 15715, 20739, 1089, 20341, 20191, 21058, 16831, 15673, 16088, 16831, 15673, 16106, 16831, 15673, 16167, 18375, 11570, 16831, 15673, 16167, 18375, 14048, 16831, 15673, 16398, 16831, 15673, 16399, 11552, 16831, 15673, 16839, 670, 16831, 15673, 16839, 6434, 16831, 15673, 17042, 16831, 15673, 17087, 8852, 16831, 15673, 17087, 9488, 16831, 15673, 17087, 10219, 6760, 16831, 15673, 17087, 10219, 13468, 16831, 15673, 17123, 12085, 16038, 16831, 15673, 17762, 16831, 15673, 18065, 19792, 16831, 15673, 18065, 19794, 16831, 15673, 18065, 19796, 16831, 15673, 18183, 10296, 16831, 15673, 18337, 16791, 9488, 16831, 15673, 18375, 11570, 16831, 15673, 18385, 13608, 16831, 15673, 18393, 18664, 16831, 15673, 18393, 18666, 16831, 15673, 18393, 18668, 16831, 15673, 18393, 18670, 16831, 15673, 18393, 18672, 16831, 15673, 18393, 18674, 16831, 15673, 18393, 18676, 16831, 15673, 18393, 18678, 16831, 15673, 18393, 18680, 16831, 15673, 18393, 19660, 16831, 15673, 18393, 19662, 16831, 15673, 18535, 18054, 16831, 15673, 18535, 18056, 16831, 15673, 18535, 18058, 16831, 15673, 18605, 13608, 16831, 15673, 18760, 16831, 15673, 18761, 19584, 16831, 15673, 18775, 18375, 671, 11570, 16831, 15673, 18775, 18375, 671, 13341, 11570, 16831, 15673, 18775, 18375, 671, 13341, 14048, 16831, 15673, 18775, 18375, 671, 14048, 16831, 15673, 18775, 18375, 6435, 11570, 16831, 15673, 18775, 18375, 6435, 14048, 16831, 15673, 18775, 18375, 7817, 11570, 16831, 15673, 18775, 18375, 7817, 14048, 16831, 15673, 18775, 18375, 13341, 11570, 16831, 15673, 18775, 18375, 13341, 14048, 16831, 15673, 18821, 13608, 16831, 15673, 19003, 671, 966, 16831, 15673, 19003, 2922, 16831, 15673, 19003, 5812, 16831, 15673, 19003, 6422, 16831, 15673, 19003, 6435, 966, 16831, 15673, 19003, 6764, 16831, 15673, 19003, 9885, 19530, 16831, 15673, 19003, 9952, 16831, 15673, 19003, 12584, 16831, 15673, 19003, 13566, 16831, 15673, 19003, 14262, 16831, 15673, 19003, 14625, 15776, 16831, 15673, 19003, 14706, 16831, 15673, 19003, 14708, 16831, 15673, 19003, 14710, 16831, 15673, 19003, 14712, 16831, 15673, 19003, 14714, 16831, 15673, 19003, 15718, 16831, 15673, 19003, 15781, 15776, 16831, 15673, 19003, 16770, 16831, 15673, 19003, 18132, 16831, 15673, 19003, 18638, 16831, 15673, 19003, 19792, 16831, 15673, 19003, 19794, 16831, 15673, 19003, 19796, 16831, 15673, 19003, 21015, 1216, 16831, 15673, 19003, 21227, 9952, 16831, 15673, 19003, 22932, 16831, 15673, 19003, 23248, 16831, 15673, 19003, 23414, 16831, 15673, 19024, 16831, 15673, 19263, 13608, 16831, 15673, 19275, 13608, 16831, 15673, 19291, 670, 16831, 15673, 19291, 6434, 16831, 15673, 19301, 5, 6088, 16831, 15673, 19301, 11, 6088, 16831, 15673, 19532, 16831, 15673, 19533, 14718, 16831, 15673, 19606, 16831, 15673, 19607, 14718, 16831, 15673, 19637, 8852, 16831, 15673, 19637, 9488, 16831, 15673, 19887, 670, 16831, 15673, 19887, 6434, 16831, 15673, 20383, 9488, 16831, 15673, 20383, 11570, 16831, 15673, 20383, 14048, 16831, 15673, 20389, 9488, 16831, 15673, 20389, 11570, 16831, 15673, 20389, 14048, 16831, 15673, 20427, 19276, 16831, 15673, 20477, 13608, 16831, 15673, 20592, 16831, 15673, 20697, 19276, 16831, 15673, 20710, 16831, 15673, 20814, 16831, 15673, 20847, 18374, 16831, 15673, 20898, 16831, 15673, 21185, 5258, 16831, 15673, 21185, 11524, 16831, 15673, 21223, 8852, 16831, 15673, 21223, 9488, 16831, 15673, 22941, 8852, 16831, 15673, 22941, 9488, 16831, 15673, 23141, 18375, 6435, 11570, 16831, 15673, 23141, 18375, 6435, 14048, 16831, 18212, 16831, 18213, 10641, 12396, 16833, 3197, 12527, 11905, 2610, 16833, 3197, 12527, 11905, 3076, 16833, 3197, 12527, 11905, 3356, 16833, 3197, 12527, 11905, 6756, 16833, 3197, 12527, 11905, 6778, 16833, 3197, 12527, 11905, 8780, 16833, 3197, 12527, 11905, 10900, 16833, 3197, 12527, 11905, 11978, 16833, 3197, 12527, 11905, 13450, 16833, 3197, 12527, 11905, 13736, 16833, 9747, 11905, 2610, 16833, 9747, 11905, 3076, 16833, 9747, 11905, 3356, 16833, 9747, 11905, 6756, 16833, 9747, 11905, 6778, 16833, 9747, 11905, 8780, 16833, 9747, 11905, 10900, 16833, 9747, 11905, 11978, 16833, 9747, 11905, 13450, 16833, 9747, 11905, 13736, 16833, 9855, 1217, 11552, 16833, 9855, 2645, 12439, 10218, 16833, 9855, 3197, 12527, 15762, 16833, 9855, 3197, 12527, 15768, 16833, 9855, 5294, 16833, 9855, 9747, 3030, 16833, 9855, 9747, 15762, 16833, 9855, 9747, 15764, 16833, 9855, 9747, 15768, 16833, 9855, 9747, 15770, 16833, 9855, 9747, 16191, 15762, 16833, 9855, 9747, 16191, 15764, 16833, 9855, 9747, 16191, 18023, 10218, 16833, 9855, 13375, 16961, 15768, 16833, 9855, 14927, 15760, 16833, 9855, 14927, 15764, 16833, 9855, 15031, 17178, 16833, 9855, 15868, 16833, 9855, 17178, 16833, 9855, 17486, 16833, 9855, 17511, 2753, 12439, 15760, 16833, 9855, 17511, 2753, 12439, 15762, 16833, 9855, 17511, 2753, 12439, 15764, 16833, 9855, 17511, 2753, 12439, 15766, 16833, 9855, 17511, 2753, 12439, 15768, 16833, 9855, 17610, 16833, 10219, 8321, 9731, 12439, 355, 2682, 16833, 10219, 8321, 9731, 12439, 12270, 16833, 11905, 2610, 16833, 11905, 3076, 16833, 11905, 3356, 16833, 11905, 6756, 16833, 11905, 6778, 16833, 11905, 8780, 16833, 11905, 10900, 16833, 11905, 11978, 16833, 11905, 13450, 16833, 11905, 13736, 16833, 14003, 9855, 8, 16833, 14003, 9855, 9, 11392, 16833, 14003, 9855, 16, 16833, 14003, 9855, 40, 16833, 14003, 9855, 58, 16833, 14003, 9855, 72, 16833, 14003, 9855, 308, 16833, 14003, 9855, 676, 16833, 14003, 9855, 2329, 28, 16833, 14003, 9855, 2329, 308, 16833, 14003, 9855, 6953, 12439, 16, 16833, 14003, 9855, 9731, 12439, 214, 16833, 14003, 9855, 9747, 8, 16833, 14003, 9855, 9747, 9, 11392, 16833, 14003, 9855, 9747, 58, 16833, 14003, 9855, 9747, 12085, 48, 16833, 14003, 9855, 10099, 58, 16833, 14003, 9855, 11415, 0, 16833, 14003, 9855, 11415, 72, 16833, 14003, 9855, 12445, 40, 16833, 14003, 9855, 12445, 184, 16833, 14003, 9855, 12445, 482, 16833, 14003, 9855, 17493, 22, 16833, 14003, 9855, 17493, 34, 16833, 14003, 9855, 17493, 396, 16833, 14003, 9855, 17493, 582, 16833, 14003, 9855, 17511, 2753, 12439, 214, 16833, 14003, 9855, 17511, 2753, 12439, 656, 16833, 14999, 0, 16833, 14999, 8, 16833, 14999, 16, 16833, 14999, 28, 16833, 14999, 40, 16833, 14999, 94, 16833, 14999, 106, 16833, 14999, 124, 16833, 14999, 148, 16833, 14999, 244, 16833, 14999, 266, 16833, 14999, 308, 16833, 14999, 336, 16833, 14999, 350, 16833, 14999, 384, 16833, 14999, 416, 16833, 14999, 448, 16833, 14999, 522, 16833, 14999, 572, 16833, 14999, 588, 16833, 14999, 622, 16833, 14999, 676, 16833, 14999, 694, 16833, 14999, 734, 16833, 14999, 932, 16833, 14999, 1044, 16833, 14999, 1142, 16833, 14999, 1164, 16833, 14999, 1492, 16833, 14999, 1796, 16833, 14999, 1914, 16833, 14999, 2152, 16833, 14999, 2329, 8, 16833, 14999, 2329, 904, 16833, 14999, 2329, 906, 16833, 14999, 2329, 1796, 16833, 14999, 2329, 2444, 16833, 14999, 2444, 16833, 14999, 2492, 16833, 14999, 2556, 16833, 14999, 2676, 16833, 14999, 3048, 16833, 14999, 3114, 16833, 14999, 3197, 12527, 106, 16833, 14999, 3197, 12527, 148, 16833, 14999, 3197, 12527, 224, 16833, 14999, 3197, 12527, 244, 16833, 14999, 3197, 12527, 336, 16833, 14999, 3197, 12527, 932, 16833, 14999, 3197, 12527, 1142, 16833, 14999, 3197, 12527, 1164, 16833, 14999, 3197, 12527, 1492, 16833, 14999, 3197, 12527, 1796, 16833, 14999, 3197, 12527, 2152, 16833, 14999, 3197, 12527, 2492, 16833, 14999, 3197, 12527, 2556, 16833, 14999, 3197, 12527, 6314, 16833, 14999, 3242, 16833, 14999, 3322, 16833, 14999, 6314, 16833, 14999, 8844, 16833, 14999, 9731, 12439, 3048, 16833, 14999, 9747, 0, 16833, 14999, 9747, 106, 16833, 14999, 9747, 124, 16833, 14999, 9747, 148, 16833, 14999, 9747, 224, 16833, 14999, 9747, 244, 16833, 14999, 9747, 266, 16833, 14999, 9747, 350, 16833, 14999, 9747, 448, 16833, 14999, 9747, 752, 16833, 14999, 9747, 932, 16833, 14999, 9747, 1044, 16833, 14999, 9747, 1492, 16833, 14999, 9747, 1796, 16833, 14999, 9747, 1914, 16833, 14999, 9747, 2492, 16833, 14999, 9747, 2556, 16833, 14999, 9747, 2676, 16833, 14999, 9747, 3242, 16833, 14999, 9825, 16961, 1044, 16833, 14999, 9825, 16961, 3048, 16833, 14999, 10264, 16833, 14999, 11415, 572, 16833, 14999, 12235, 588, 16833, 14999, 13375, 16961, 224, 16833, 14999, 14927, 124, 16833, 14999, 14927, 224, 16833, 14999, 14927, 244, 16833, 14999, 14927, 266, 16833, 14999, 14927, 336, 16833, 14999, 14927, 448, 16833, 14999, 14927, 572, 16833, 14999, 14927, 588, 16833, 14999, 14927, 718, 16833, 14999, 14927, 752, 16833, 14999, 14927, 1044, 16833, 14999, 14927, 1142, 16833, 14999, 14927, 1164, 16833, 14999, 14927, 1620, 16833, 14999, 14927, 1796, 16833, 14999, 14927, 2556, 16833, 14999, 14927, 3322, 16833, 14999, 14927, 6314, 16833, 14999, 14927, 10264, 16833, 14999, 16351, 2753, 12439, 2492, 16833, 14999, 16351, 2753, 12439, 3764, 16833, 14999, 16351, 2753, 12439, 7024, 16833, 14999, 17493, 22, 16833, 14999, 17493, 34, 16833, 14999, 17493, 396, 16833, 14999, 17493, 582, 16833, 14999, 17511, 2753, 12439, 2746, 16833, 14999, 17511, 2753, 12439, 3242, 16833, 15673, 9747, 2610, 16833, 15673, 9747, 20684, 16833, 15673, 11415, 2610, 16833, 15673, 11415, 3356, 16833, 15673, 11415, 20684, 16833, 15673, 18106, 16833, 15673, 18254, 16833, 15673, 19004, 16833, 15673, 22964, 16833, 18257, 14927, 280, 16833, 18257, 14927, 562, 16833, 18257, 14927, 2586, 16833, 18319, 14999, 9747, 22912, 16833, 18319, 14999, 14927, 22912, 16833, 19015, 9855, 2329, 15093, 384, 16833, 19015, 9855, 2329, 15093, 416, 16833, 19015, 9855, 2329, 15093, 448, 16833, 19015, 9855, 9747, 15093, 694, 16833, 19015, 9855, 15093, 266, 16833, 19015, 9855, 15093, 572, 16833, 19015, 9855, 15093, 694, 16833, 19015, 9855, 15093, 734, 16842, 16845, 14625, 18847, 897, 14625, 13341, 19808, 16847, 1, 15651, 485, 2509, 12005, 634, 16847, 1, 18689, 485, 2509, 12005, 634, 16847, 19409, 2509, 12005, 634, 16847, 19409, 2509, 20127, 634, 16847, 19409, 2509, 21096, 16847, 21097, 2509, 12005, 634, 16847, 21097, 2509, 19408, 16847, 21097, 2509, 20127, 634, 16847, 21281, 2509, 17585, 12005, 634, 16848, 16853, 6718, 16855, 7816, 16855, 13340, 16887, 11905, 15530, 16889, 9854, 16891, 7817, 20385, 10641, 13737, 6430, 16891, 12589, 23123, 14049, 20375, 11476, 16891, 13341, 20385, 10641, 13737, 6430, 16891, 13889, 23123, 14049, 20375, 11476, 16913, 11447, 16935, 670, 16913, 11447, 16935, 6434, 16920, 16937, 6406, 16937, 6407, 7414, 16941, 11905, 2610, 16941, 11905, 3076, 16941, 11905, 3356, 16941, 11905, 6756, 16941, 11905, 6778, 16941, 11905, 8780, 16941, 11905, 10900, 16941, 11905, 11978, 16941, 11905, 13450, 16941, 11905, 13736, 16941, 14999, 0, 16941, 14999, 8, 16941, 14999, 16, 16941, 14999, 28, 16941, 14999, 40, 16941, 14999, 58, 16941, 14999, 106, 16941, 14999, 184, 16941, 14999, 224, 16941, 14999, 244, 16941, 14999, 266, 16941, 14999, 336, 16941, 14999, 498, 16941, 14999, 572, 16941, 14999, 588, 16941, 14999, 622, 16941, 14999, 718, 16941, 14999, 734, 16941, 14999, 1164, 16941, 14999, 1914, 16941, 14999, 3532, 16941, 14999, 5246, 16941, 14999, 5982, 16941, 14999, 6354, 16941, 14999, 7560, 16941, 14999, 7776, 16941, 14999, 8436, 16941, 14999, 8934, 16941, 14999, 9344, 16941, 14999, 13492, 16948, 16952, 16987, 21048, 16994, 16998, 17003, 6718, 17005, 9854, 17033, 9854, 17041, 5971, 795, 485, 11752, 17041, 5971, 795, 485, 14824, 17041, 5971, 795, 485, 15596, 17041, 5971, 795, 485, 17842, 17041, 5971, 2897, 12418, 17041, 5971, 3077, 485, 11752, 17041, 5971, 3077, 485, 14824, 17041, 5971, 3077, 485, 15596, 17041, 5971, 3077, 485, 17842, 17041, 5971, 3233, 485, 11752, 17041, 5971, 3233, 485, 14824, 17041, 5971, 3233, 485, 15596, 17041, 5971, 3233, 485, 17842, 17041, 5971, 3357, 485, 11752, 17041, 5971, 3357, 485, 14824, 17041, 5971, 3357, 485, 15596, 17041, 5971, 3357, 485, 17842, 17041, 5971, 5720, 17041, 5971, 6757, 485, 11752, 17041, 5971, 6757, 485, 14824, 17041, 5971, 6757, 485, 15596, 17041, 5971, 6757, 485, 17842, 17041, 5971, 6770, 17041, 5971, 6779, 485, 11752, 17041, 5971, 6779, 485, 14824, 17041, 5971, 6779, 485, 15596, 17041, 5971, 6779, 485, 17842, 17041, 5971, 7457, 485, 11752, 17041, 5971, 7457, 485, 14824, 17041, 5971, 7457, 485, 15596, 17041, 5971, 7457, 485, 17842, 17041, 5971, 7673, 485, 11752, 17041, 5971, 7673, 485, 14824, 17041, 5971, 7673, 485, 15596, 17041, 5971, 7673, 485, 17842, 17041, 5971, 8781, 485, 11752, 17041, 5971, 8781, 485, 14824, 17041, 5971, 8781, 485, 15596, 17041, 5971, 8781, 485, 17842, 17041, 5971, 11571, 12418, 17041, 5971, 11979, 485, 11752, 17041, 5971, 11979, 485, 14824, 17041, 5971, 11979, 485, 15596, 17041, 5971, 11979, 485, 17842, 17041, 5971, 13287, 485, 11752, 17041, 5971, 13287, 485, 14824, 17041, 5971, 13287, 485, 15596, 17041, 5971, 13287, 485, 17842, 17041, 5971, 13451, 485, 11752, 17041, 5971, 13451, 485, 14824, 17041, 5971, 13451, 485, 15596, 17041, 5971, 13451, 485, 17842, 17041, 5971, 13737, 485, 11752, 17041, 5971, 13737, 485, 14824, 17041, 5971, 13737, 485, 15596, 17041, 5971, 13737, 485, 17842, 17041, 5971, 14049, 12418, 17041, 5971, 14951, 485, 11752, 17041, 5971, 14951, 485, 14824, 17041, 5971, 14951, 485, 15596, 17041, 5971, 14951, 485, 17842, 17041, 5971, 17408, 17041, 5971, 17410, 17041, 5971, 17412, 17041, 5971, 17414, 17041, 5971, 17416, 17041, 5971, 17418, 17041, 5971, 17420, 17041, 5971, 17422, 17041, 5971, 17424, 17041, 5971, 18784, 17041, 5971, 18786, 17041, 5971, 18788, 17041, 5971, 18790, 17041, 5971, 18792, 17041, 5971, 18794, 17041, 5971, 18796, 17041, 5971, 18798, 17041, 5971, 18800, 17041, 5971, 18802, 17041, 5971, 18804, 17041, 5971, 18806, 17048, 17052, 17055, 14033, 15672, 17057, 2106, 17059, 1019, 6718, 17059, 6718, 17070, 17071, 7414, 17077, 16957, 6779, 6431, 10641, 1216, 17077, 16957, 6779, 6431, 10641, 11772, 17077, 16957, 14999, 270, 17077, 16957, 14999, 528, 17077, 16957, 14999, 2536, 17077, 16957, 14999, 3220, 17077, 16957, 14999, 5818, 17077, 16957, 14999, 7156, 17077, 16957, 14999, 7596, 17077, 16957, 14999, 9776, 17077, 16957, 14999, 10810, 17077, 16957, 14999, 11424, 17077, 16957, 14999, 12204, 17077, 16957, 14999, 13400, 17077, 16957, 14999, 14196, 17077, 16957, 14999, 14546, 17077, 16957, 14999, 14978, 17077, 16957, 14999, 15474, 17077, 16957, 14999, 18300, 17077, 16957, 14999, 22956, 17077, 16957, 15233, 2610, 17077, 16957, 15233, 2611, 16502, 17077, 16957, 15233, 3232, 17077, 16957, 15233, 3356, 17077, 16957, 15233, 6778, 17077, 16957, 15233, 13736, 17077, 16957, 15233, 15820, 17077, 16957, 15811, 17179, 8320, 17077, 16957, 17179, 8320, 17084, 17087, 8852, 17091, 15673, 14392, 17093, 1016, 17093, 13806, 17094, 17123, 12563, 6779, 17045, 18461, 9950, 17123, 13759, 18387, 11393, 19407, 11476, 17123, 13759, 18387, 11393, 20375, 11476, 17123, 16135, 11584, 17123, 17254, 17123, 17255, 10641, 20181, 15642, 17123, 17255, 18386, 17123, 17255, 19541, 15650, 17127, 5808, 17131, 13657, 15380, 17133, 497, 3245, 12095, 18228, 17134, 17136, 17139, 12277, 11571, 12275, 14418, 17139, 12563, 6779, 17045, 11571, 6122, 17139, 14049, 6779, 17045, 6122, 17139, 14725, 12275, 14418, 17139, 16111, 32, 17144, 17147, 13497, 10641, 9704, 17154, 17172, 17174, 17179, 9854, 17180, 17185, 8320, 17194, 17201, 2643, 485, 6768, 17205, 494, 17205, 6572, 17205, 9855, 13052, 17205, 9855, 15868, 17205, 9855, 17218, 17205, 9855, 17486, 17205, 9855, 17610, 17205, 9855, 17652, 17205, 9855, 20552, 17205, 9855, 20756, 17205, 9855, 20974, 17205, 11854, 17205, 11905, 2610, 17205, 11905, 3076, 17205, 11905, 3356, 17205, 11905, 6756, 17205, 11905, 6778, 17205, 11905, 8780, 17205, 11905, 10900, 17205, 11905, 11978, 17205, 11905, 13450, 17205, 11905, 13736, 17205, 12035, 13507, 14003, 8320, 17205, 13651, 8320, 17205, 14003, 9855, 8, 17205, 14003, 9855, 16, 17205, 14003, 9855, 28, 17205, 14003, 9855, 40, 17205, 14003, 9855, 58, 17205, 14003, 9855, 72, 17205, 14003, 9855, 94, 17205, 14003, 9855, 308, 17205, 14003, 9855, 676, 17205, 14003, 9855, 17493, 22, 17205, 14003, 9855, 17493, 34, 17205, 14003, 9855, 17493, 396, 17205, 14003, 9855, 17493, 582, 17205, 14003, 18319, 8320, 17205, 14625, 11854, 17205, 14999, 0, 17205, 14999, 8, 17205, 14999, 16, 17205, 14999, 28, 17205, 14999, 40, 17205, 14999, 58, 17205, 14999, 72, 17205, 14999, 94, 17205, 14999, 106, 17205, 14999, 124, 17205, 14999, 148, 17205, 14999, 244, 17205, 14999, 266, 17205, 14999, 308, 17205, 14999, 336, 17205, 14999, 350, 17205, 14999, 384, 17205, 14999, 416, 17205, 14999, 448, 17205, 14999, 522, 17205, 14999, 572, 17205, 14999, 588, 17205, 14999, 622, 17205, 14999, 676, 17205, 14999, 680, 17205, 14999, 734, 17205, 14999, 932, 17205, 14999, 1044, 17205, 14999, 1142, 17205, 14999, 1164, 17205, 14999, 1492, 17205, 14999, 1796, 17205, 14999, 1914, 17205, 14999, 2152, 17205, 14999, 2444, 17205, 14999, 2492, 17205, 14999, 2556, 17205, 14999, 2676, 17205, 14999, 3048, 17205, 14999, 3114, 17205, 14999, 3242, 17205, 14999, 3322, 17205, 14999, 6314, 17205, 14999, 10264, 17205, 14999, 17493, 22, 17205, 14999, 17493, 34, 17205, 14999, 17493, 396, 17205, 14999, 17493, 582, 17205, 15483, 8320, 17205, 17179, 15066, 17205, 17179, 15068, 17205, 19618, 17205, 20166, 17205, 20989, 9854, 17205, 21041, 9854, 17207, 14999, 70, 17207, 14999, 302, 17207, 14999, 496, 17207, 14999, 504, 17207, 14999, 602, 17207, 14999, 670, 17207, 14999, 798, 17207, 14999, 822, 17207, 14999, 828, 17207, 14999, 860, 17207, 14999, 864, 17207, 14999, 872, 17207, 14999, 942, 17207, 14999, 1264, 17207, 14999, 1266, 17207, 14999, 1278, 17207, 14999, 1314, 17207, 14999, 1364, 17207, 14999, 1436, 17207, 14999, 1738, 17207, 14999, 1740, 17207, 14999, 2536, 17207, 14999, 2584, 17207, 14999, 2602, 17207, 14999, 2632, 17207, 14999, 3298, 17207, 14999, 3494, 17207, 14999, 3558, 17207, 14999, 3692, 17207, 14999, 3704, 17207, 14999, 3844, 17207, 14999, 6352, 17207, 14999, 7322, 17207, 14999, 7666, 17207, 14999, 7880, 17207, 14999, 8442, 17207, 14999, 9168, 17207, 14999, 9228, 17207, 14999, 9512, 17207, 14999, 9982, 17207, 14999, 10158, 17207, 14999, 10646, 17207, 14999, 11474, 17207, 14999, 12250, 17207, 14999, 12420, 17207, 14999, 13726, 17207, 14999, 14482, 17207, 14999, 16790, 17217, 17074, 17219, 1299, 485, 10133, 8320, 17219, 9855, 13052, 17219, 9855, 15868, 17219, 9855, 17218, 17219, 9855, 17486, 17219, 9855, 17610, 17219, 9855, 20552, 17219, 11854, 17219, 14003, 9855, 8, 17219, 14003, 9855, 16, 17219, 14003, 9855, 28, 17219, 14003, 9855, 40, 17219, 14003, 9855, 58, 17219, 14003, 9855, 72, 17219, 14003, 9855, 94, 17219, 14003, 9855, 308, 17219, 14003, 9855, 676, 17219, 14003, 9855, 17493, 34, 17219, 14003, 9855, 17493, 582, 17219, 14003, 9855, 18891, 40, 17219, 14003, 9855, 18891, 676, 17219, 14625, 11854, 17219, 14999, 0, 17219, 14999, 8, 17219, 14999, 16, 17219, 14999, 28, 17219, 14999, 40, 17219, 14999, 58, 17219, 14999, 72, 17219, 14999, 94, 17219, 14999, 106, 17219, 14999, 124, 17219, 14999, 148, 17219, 14999, 244, 17219, 14999, 266, 17219, 14999, 308, 17219, 14999, 336, 17219, 14999, 350, 17219, 14999, 384, 17219, 14999, 416, 17219, 14999, 448, 17219, 14999, 522, 17219, 14999, 572, 17219, 14999, 588, 17219, 14999, 622, 17219, 14999, 676, 17219, 14999, 680, 17219, 14999, 734, 17219, 14999, 932, 17219, 14999, 1044, 17219, 14999, 1142, 17219, 14999, 1164, 17219, 14999, 1492, 17219, 14999, 1796, 17219, 14999, 1914, 17219, 14999, 2444, 17219, 14999, 2492, 17219, 14999, 2556, 17219, 14999, 2676, 17219, 14999, 3048, 17219, 14999, 3114, 17219, 14999, 3242, 17219, 14999, 3322, 17219, 14999, 6314, 17219, 14999, 10264, 17219, 14999, 17493, 22, 17219, 14999, 17493, 34, 17219, 14999, 17493, 396, 17219, 14999, 17493, 582, 17219, 14999, 18891, 40, 17219, 14999, 20499, 18891, 16, 17219, 14999, 20499, 18891, 308, 17219, 14999, 21241, 18891, 16, 17219, 17179, 8321, 10641, 9475, 843, 14623, 14625, 19026, 17219, 17179, 8321, 10641, 9475, 843, 14623, 15781, 19026, 17219, 17179, 8321, 10641, 9475, 843, 14623, 19026, 17219, 17179, 8321, 10641, 14625, 19026, 17219, 17179, 8321, 10641, 15781, 19026, 17219, 17179, 8321, 10641, 16155, 843, 3357, 20110, 17219, 17179, 8321, 10641, 16155, 843, 6779, 20110, 17219, 17179, 8321, 10641, 16155, 843, 9474, 17219, 17179, 8321, 10641, 17397, 843, 14623, 19026, 17219, 17179, 8321, 10641, 17397, 843, 18825, 19490, 17219, 17179, 8321, 10641, 18581, 19026, 17219, 17179, 8321, 10641, 19553, 19026, 17219, 17179, 8321, 14625, 9502, 17219, 17179, 8321, 14625, 9503, 10641, 9474, 17219, 19619, 896, 17219, 19619, 1216, 17219, 20357, 15066, 17219, 20357, 15068, 17219, 20357, 15070, 17223, 505, 19408, 17223, 505, 21096, 17223, 11393, 19409, 11393, 14647, 9854, 17223, 11393, 21097, 11393, 14647, 9854, 17223, 12741, 17222, 17227, 7871, 11905, 2610, 17227, 7871, 11905, 3076, 17227, 7871, 11905, 3356, 17227, 7871, 11905, 6756, 17227, 7871, 11905, 6778, 17227, 7871, 11905, 8780, 17227, 7871, 11905, 10900, 17227, 7871, 11905, 11978, 17227, 7871, 11905, 13450, 17227, 7871, 11905, 13736, 17227, 9855, 18886, 17227, 9855, 19834, 17227, 9855, 19874, 17227, 14003, 9855, 6401, 16588, 17227, 14003, 9855, 6401, 18188, 17227, 14003, 9855, 6401, 19494, 17227, 14003, 9855, 6401, 19856, 17227, 14003, 9855, 6401, 20700, 17227, 14003, 9855, 6401, 21090, 17227, 14003, 9855, 12461, 18188, 17227, 14003, 9855, 12461, 19494, 17227, 14003, 9855, 12461, 19856, 17227, 14003, 9855, 12491, 6360, 17227, 14003, 9855, 16588, 17227, 14003, 9855, 16589, 1579, 6401, 19858, 17227, 14003, 9855, 16589, 1579, 19858, 17227, 14003, 9855, 16589, 1579, 20700, 17227, 14003, 9855, 19858, 17227, 14003, 9855, 20700, 17227, 14003, 9855, 21090, 17227, 14999, 5265, 16050, 17227, 14999, 14334, 17227, 14999, 14658, 17227, 14999, 14884, 17227, 14999, 15282, 17227, 14999, 15852, 17227, 14999, 15950, 17227, 14999, 15964, 17227, 14999, 15976, 17227, 14999, 16020, 17227, 14999, 16223, 16704, 17227, 14999, 16223, 16840, 17227, 14999, 16223, 17166, 17227, 14999, 16354, 17227, 14999, 16392, 17227, 14999, 16484, 17227, 14999, 16512, 17227, 14999, 16555, 20272, 17227, 14999, 16784, 17227, 14999, 16932, 17227, 14999, 17104, 17227, 14999, 17159, 16228, 17227, 14999, 17159, 16430, 17227, 14999, 17159, 16542, 17227, 14999, 17159, 17820, 17227, 14999, 17333, 17166, 17227, 14999, 17333, 18563, 20812, 17227, 14999, 17333, 20272, 17227, 14999, 17466, 17227, 14999, 17474, 17227, 14999, 17532, 17227, 14999, 17586, 17227, 14999, 18160, 17227, 14999, 18186, 17227, 14999, 19342, 17227, 14999, 19364, 17227, 14999, 19457, 16704, 17227, 14999, 19457, 16840, 17227, 14999, 19457, 17166, 17227, 14999, 19865, 16050, 17227, 14999, 19865, 16118, 17227, 14999, 19865, 16228, 17227, 14999, 19865, 16430, 17227, 14999, 19865, 16542, 17227, 14999, 19865, 16562, 17227, 14999, 19865, 16990, 17227, 14999, 19865, 17346, 17227, 14999, 19865, 17820, 17227, 14999, 19865, 18810, 17227, 14999, 20777, 16050, 17227, 14999, 20777, 16118, 17227, 14999, 20777, 16228, 17227, 14999, 20777, 16430, 17227, 14999, 20777, 16542, 17227, 14999, 20777, 16562, 17227, 14999, 20777, 16990, 17227, 14999, 20777, 17346, 17227, 14999, 20777, 17820, 17227, 14999, 20777, 18810, 17227, 16011, 11905, 2610, 17227, 16011, 11905, 3076, 17227, 16011, 11905, 3356, 17227, 16011, 11905, 6756, 17227, 16011, 11905, 6778, 17227, 16011, 11905, 8780, 17227, 16011, 11905, 11978, 17227, 16011, 11905, 13450, 17227, 16011, 11905, 13736, 17227, 16011, 15233, 2611, 16502, 17227, 16011, 15233, 2611, 18744, 17227, 16011, 15233, 3232, 17227, 16011, 15233, 12080, 17227, 16011, 15233, 12108, 17227, 16011, 15233, 13538, 17227, 16011, 15233, 14636, 17227, 16011, 15233, 15194, 17227, 16011, 15233, 15736, 17227, 16011, 15233, 15820, 17227, 16011, 15233, 17190, 17227, 20877, 20210, 17233, 17045, 17642, 17237, 12005, 635, 505, 19408, 17237, 12005, 635, 505, 19409, 10641, 1217, 14874, 17237, 12005, 635, 505, 21096, 17237, 12005, 635, 505, 21097, 10641, 1217, 14874, 17237, 12973, 11477, 10641, 14851, 7138, 17237, 12973, 11477, 10641, 20181, 10092, 17241, 12537, 504, 17241, 12537, 842, 17243, 10144, 17243, 10145, 505, 12005, 634, 17245, 1019, 6719, 10641, 9171, 12764, 17245, 1019, 6719, 10641, 21105, 6604, 17245, 6719, 10641, 7124, 17245, 6719, 10641, 9171, 12764, 17245, 6719, 10641, 9171, 12765, 843, 6095, 13654, 17245, 6719, 10641, 9171, 12765, 843, 17245, 6604, 17245, 6719, 10641, 9171, 12765, 843, 23135, 6604, 17245, 6719, 10641, 12328, 17245, 6719, 10641, 17245, 6604, 17245, 6719, 10641, 20456, 17245, 6719, 10641, 21105, 6604, 17247, 15672, 17248, 17249, 17521, 9886, 17254, 17255, 10641, 16946, 17260, 17262, 17263, 10641, 2611, 13579, 10620, 17263, 10641, 13737, 13579, 14036, 17263, 10641, 21033, 15642, 17275, 136, 17275, 268, 17275, 288, 17275, 298, 17275, 442, 17275, 456, 17275, 490, 17275, 590, 17275, 608, 17275, 671, 10641, 20685, 8320, 17275, 688, 17275, 698, 17275, 1073, 17453, 22988, 17275, 1073, 17453, 22990, 17275, 1073, 17453, 22992, 17275, 1073, 17453, 22994, 17275, 1073, 17453, 22996, 17275, 1073, 17453, 22998, 17275, 1073, 17453, 23000, 17275, 1073, 17453, 23002, 17275, 1073, 17453, 23004, 17275, 1073, 17453, 23008, 17275, 1073, 17453, 23010, 17275, 1073, 17453, 23012, 17275, 1073, 17453, 23014, 17275, 1073, 17453, 23016, 17275, 1073, 17453, 23018, 17275, 1073, 17453, 23020, 17275, 1073, 17453, 23022, 17275, 1073, 17453, 23024, 17275, 1073, 17453, 23028, 17275, 1073, 17453, 23030, 17275, 1073, 17453, 23032, 17275, 1073, 17453, 23034, 17275, 1073, 17453, 23036, 17275, 1073, 17453, 23038, 17275, 1073, 17453, 23040, 17275, 1073, 17453, 23044, 17275, 1073, 17453, 23046, 17275, 1073, 17453, 23048, 17275, 1073, 17453, 23050, 17275, 1073, 17453, 23052, 17275, 1073, 17453, 23056, 17275, 1073, 17453, 23058, 17275, 1073, 17453, 23062, 17275, 1073, 17453, 23064, 17275, 1073, 17453, 23066, 17275, 1073, 17453, 23070, 17275, 1073, 17453, 23072, 17275, 1073, 17453, 23074, 17275, 1073, 17453, 23076, 17275, 1073, 17453, 23078, 17275, 1073, 17453, 23080, 17275, 1073, 17453, 23082, 17275, 1073, 17453, 23084, 17275, 1217, 18386, 17275, 1604, 17275, 1912, 17275, 2440, 17275, 2611, 16503, 15821, 30, 17275, 2720, 17275, 3058, 17275, 3100, 17275, 3357, 20, 17275, 3392, 17275, 3480, 17275, 6100, 17275, 6757, 13251, 2610, 17275, 6779, 20, 17275, 6779, 1217, 20876, 17275, 6780, 17275, 9286, 17275, 11979, 20, 17275, 12541, 13563, 14999, 6, 17275, 12541, 16111, 14999, 0, 17275, 12541, 16111, 14999, 2, 17275, 12541, 16111, 14999, 4, 17275, 12541, 16111, 14999, 6, 17275, 12541, 16111, 14999, 8, 17275, 12541, 16111, 14999, 10, 17275, 12541, 16111, 14999, 12, 17275, 12541, 16111, 14999, 14, 17275, 12541, 16111, 14999, 16, 17275, 12541, 16111, 14999, 18, 17275, 12541, 16111, 14999, 20, 17275, 12541, 16111, 14999, 22, 17275, 12541, 16111, 14999, 24, 17275, 12541, 16111, 14999, 26, 17275, 12541, 16111, 14999, 28, 17275, 12541, 16111, 14999, 30, 17275, 12541, 16111, 14999, 32, 17275, 12541, 16111, 14999, 34, 17275, 12541, 16111, 14999, 36, 17275, 12541, 16111, 14999, 38, 17275, 12541, 16111, 14999, 40, 17275, 12541, 16111, 14999, 42, 17275, 12541, 16111, 14999, 44, 17275, 12541, 16111, 14999, 46, 17275, 12541, 16111, 14999, 48, 17275, 12541, 16111, 14999, 50, 17275, 12740, 17275, 13451, 13251, 2610, 17275, 13539, 30, 17275, 13563, 14486, 17275, 13737, 6, 17275, 13764, 17275, 14840, 17275, 15451, 17839, 13546, 17275, 15507, 15498, 17275, 15620, 17275, 16389, 17839, 13546, 17275, 16727, 504, 17275, 16727, 842, 17275, 17154, 17275, 17642, 17275, 18209, 154, 17275, 18209, 588, 17275, 18209, 7686, 17275, 18264, 17275, 20497, 13251, 3356, 17280, 17283, 18026, 17288, 17305, 19264, 17314, 17315, 9175, 19452, 17317, 18176, 17320, 17328, 17330, 17337, 9855, 15868, 17337, 14003, 9855, 16, 17337, 14003, 9855, 40, 17337, 14999, 0, 17337, 14999, 16, 17337, 14999, 40, 17337, 14999, 106, 17337, 14999, 148, 17337, 14999, 244, 17337, 14999, 266, 17337, 14999, 350, 17337, 14999, 384, 17337, 14999, 416, 17337, 14999, 448, 17337, 14999, 522, 17337, 14999, 588, 17337, 14999, 622, 17337, 14999, 694, 17337, 14999, 734, 17337, 14999, 2444, 17365, 16034, 17367, 20957, 19407, 20683, 18906, 17367, 20957, 20375, 18906, 17367, 20957, 20375, 20683, 18906, 17367, 21139, 19215, 20683, 18906, 17367, 22923, 17463, 20683, 18906, 17367, 22975, 20375, 18906, 17371, 11749, 843, 9466, 17373, 371, 585, 1914, 17373, 371, 585, 1915, 5901, 2307, 1012, 17373, 8321, 845, 12467, 7090, 17373, 8321, 845, 12467, 7096, 17373, 8321, 1047, 2294, 17373, 8321, 1545, 13365, 7090, 17373, 8321, 1545, 13365, 7096, 17373, 8321, 2921, 6029, 15619, 9742, 17373, 8321, 3309, 11028, 17373, 8321, 3713, 2295, 13831, 9743, 416, 17373, 8321, 5841, 9789, 255, 2295, 13332, 17373, 8321, 5841, 9789, 3713, 2294, 17373, 8321, 7063, 3713, 2295, 767, 7063, 13831, 416, 17373, 8321, 7063, 3713, 2295, 767, 9511, 5795, 416, 17373, 8321, 7063, 3713, 2295, 19805, 0, 17373, 8321, 7063, 13830, 17373, 8321, 8715, 11627, 2563, 3840, 17373, 8321, 8715, 11627, 9733, 13364, 17373, 8321, 8971, 9742, 17373, 8321, 8971, 13830, 17373, 8321, 8971, 13831, 9742, 17373, 8321, 9493, 7059, 9742, 17373, 8321, 9742, 17373, 8321, 11607, 13364, 17373, 8321, 11609, 9789, 255, 2295, 13332, 17373, 8321, 11611, 3713, 2294, 17373, 8321, 11653, 3713, 2295, 9251, 9743, 416, 17373, 8321, 11653, 11027, 13365, 425, 7883, 1012, 17373, 8321, 11653, 11027, 13365, 5901, 2307, 1012, 17373, 8321, 12747, 3713, 255, 2295, 13332, 17373, 8321, 13431, 9742, 17373, 8321, 13831, 9742, 17373, 8321, 15296, 17373, 8321, 16161, 3713, 2295, 9729, 416, 17373, 8321, 16161, 5871, 15455, 3713, 2295, 9729, 416, 17373, 8321, 16468, 17373, 8321, 16525, 3713, 2295, 8351, 416, 17373, 8321, 16525, 5871, 15455, 3713, 2295, 8351, 416, 17373, 8321, 16707, 12681, 13364, 17373, 8321, 18769, 12681, 13364, 17373, 8321, 19049, 13831, 11612, 17373, 8321, 22853, 13830, 17373, 9855, 1537, 1013, 17124, 17373, 9855, 1537, 2277, 17124, 17373, 9855, 2099, 3309, 1012, 17373, 9855, 2101, 13364, 17373, 9855, 2251, 13832, 17373, 9855, 2563, 3841, 2387, 148, 17373, 9855, 3085, 7808, 17373, 9855, 3677, 13832, 17373, 9855, 8349, 1012, 17373, 9855, 9477, 2391, 6944, 17373, 9855, 9477, 2391, 7060, 17373, 9855, 9477, 2391, 9477, 6412, 17373, 9855, 9477, 2391, 12218, 17373, 9855, 9477, 6413, 6944, 17373, 9855, 9477, 6413, 7060, 17373, 9855, 9477, 6413, 9477, 2390, 17373, 9855, 9477, 6413, 12218, 17373, 9855, 9509, 613, 2445, 580, 17373, 9855, 9511, 5794, 17373, 9855, 10751, 13364, 17373, 9855, 18183, 8349, 1012, 17373, 11905, 2610, 17373, 11905, 3076, 17373, 11905, 3356, 17373, 11905, 6756, 17373, 11905, 6778, 17373, 11905, 7123, 2610, 17373, 11905, 7123, 3076, 17373, 11905, 7123, 3356, 17373, 11905, 7123, 6756, 17373, 11905, 7123, 6778, 17373, 11905, 7123, 8780, 17373, 11905, 7123, 10900, 17373, 11905, 7123, 11978, 17373, 11905, 7123, 13450, 17373, 11905, 7123, 13736, 17373, 11905, 8780, 17373, 11905, 10900, 17373, 11905, 11978, 17373, 11905, 13450, 17373, 11905, 13736, 17373, 14003, 9855, 8, 17373, 14003, 9855, 16, 17373, 14003, 9855, 28, 17373, 14003, 9855, 40, 17373, 14003, 9855, 58, 17373, 14003, 9855, 184, 17373, 14003, 9855, 308, 17373, 14003, 9855, 498, 17373, 14003, 9855, 676, 17373, 14003, 9855, 17493, 22, 17373, 14003, 9855, 17493, 34, 17373, 14003, 9855, 17493, 396, 17373, 14003, 9855, 17493, 582, 17373, 14003, 9855, 18543, 16, 17373, 14003, 9855, 18543, 308, 17373, 14999, 0, 17373, 14999, 52, 17373, 14999, 106, 17373, 14999, 124, 17373, 14999, 148, 17373, 14999, 244, 17373, 14999, 266, 17373, 14999, 336, 17373, 14999, 350, 17373, 14999, 384, 17373, 14999, 416, 17373, 14999, 448, 17373, 14999, 522, 17373, 14999, 572, 17373, 14999, 588, 17373, 14999, 622, 17373, 14999, 694, 17373, 14999, 734, 17373, 14999, 752, 17373, 14999, 932, 17373, 14999, 1044, 17373, 14999, 1142, 17373, 14999, 1164, 17373, 14999, 1254, 17373, 14999, 1492, 17373, 14999, 1914, 17373, 14999, 1952, 17373, 14999, 2444, 17373, 14999, 2492, 17373, 14999, 2556, 17373, 14999, 2676, 17373, 14999, 2956, 17373, 14999, 3048, 17373, 14999, 3114, 17373, 14999, 3242, 17373, 14999, 3308, 17373, 14999, 3322, 17373, 14999, 3812, 17373, 14999, 6314, 17373, 14999, 6470, 17373, 14999, 7708, 17373, 14999, 10240, 17373, 14999, 10264, 17373, 14999, 20141, 572, 17373, 15673, 2509, 120, 17373, 15673, 2509, 121, 5901, 14232, 17373, 15673, 2509, 121, 7061, 14232, 17373, 15673, 2509, 121, 8971, 14232, 17373, 15673, 2895, 2924, 17373, 15673, 2895, 2925, 9493, 7058, 17373, 15673, 6439, 120, 17373, 15673, 9251, 522, 17373, 15673, 13173, 6946, 17373, 18259, 9855, 6009, 13364, 17373, 18259, 9855, 7829, 13364, 17373, 18697, 494, 17373, 19667, 9855, 2099, 3309, 1012, 17373, 19667, 9855, 8349, 1012, 17373, 19667, 9855, 18183, 8349, 1012, 17373, 19667, 14999, 0, 17373, 19667, 14999, 52, 17373, 19667, 14999, 106, 17373, 19667, 14999, 124, 17373, 19667, 14999, 148, 17373, 19667, 14999, 244, 17373, 19667, 14999, 266, 17373, 19667, 14999, 336, 17373, 19667, 14999, 350, 17373, 19667, 14999, 384, 17373, 19667, 14999, 416, 17373, 19667, 14999, 448, 17373, 19667, 14999, 522, 17373, 19667, 14999, 572, 17373, 19667, 14999, 588, 17373, 19667, 14999, 622, 17373, 19667, 14999, 694, 17373, 19667, 14999, 734, 17373, 19667, 14999, 752, 17373, 19667, 14999, 932, 17373, 19667, 14999, 1044, 17373, 19667, 14999, 1142, 17373, 19667, 14999, 1164, 17373, 19667, 14999, 1254, 17373, 19667, 14999, 1492, 17373, 19667, 14999, 1914, 17373, 19667, 14999, 2444, 17373, 19667, 14999, 2492, 17373, 19667, 14999, 2556, 17373, 19667, 14999, 2676, 17373, 19667, 14999, 3048, 17373, 19667, 14999, 3114, 17373, 19667, 14999, 3242, 17373, 19667, 14999, 3308, 17373, 19667, 14999, 3322, 17373, 19667, 14999, 3812, 17373, 19667, 14999, 6314, 17373, 19667, 14999, 6470, 17373, 19667, 14999, 7708, 17373, 19667, 14999, 10240, 17373, 19667, 14999, 10264, 17373, 19667, 14999, 20141, 572, 17373, 19667, 14999, 20141, 694, 17373, 19667, 14999, 20141, 734, 17373, 21007, 9855, 9735, 6943, 11025, 13364, 17373, 21007, 9855, 13437, 15796, 17373, 21007, 9855, 14235, 522, 17373, 21035, 9855, 5967, 10114, 17373, 21035, 9855, 9707, 11022, 17373, 21035, 9855, 12277, 5802, 17373, 21035, 9855, 12563, 5802, 17381, 494, 17381, 5272, 17381, 9855, 13052, 17381, 9855, 15868, 17381, 9855, 17486, 17381, 9855, 17610, 17381, 9855, 17652, 17381, 9855, 20552, 17381, 11905, 2610, 17381, 11905, 3076, 17381, 11905, 3356, 17381, 11905, 6756, 17381, 11905, 6778, 17381, 11905, 8780, 17381, 11905, 10900, 17381, 11905, 11978, 17381, 11905, 13450, 17381, 11905, 13736, 17381, 12246, 17381, 14003, 9855, 8, 17381, 14003, 9855, 16, 17381, 14003, 9855, 28, 17381, 14003, 9855, 40, 17381, 14003, 9855, 58, 17381, 14003, 9855, 72, 17381, 14003, 9855, 94, 17381, 14003, 9855, 308, 17381, 14003, 9855, 676, 17381, 14003, 9855, 13507, 8, 17381, 14003, 9855, 13507, 28, 17381, 14003, 9855, 17493, 22, 17381, 14003, 9855, 17493, 34, 17381, 14003, 9855, 17493, 396, 17381, 14003, 9855, 17493, 582, 17381, 14999, 0, 17381, 14999, 8, 17381, 14999, 16, 17381, 14999, 28, 17381, 14999, 40, 17381, 14999, 58, 17381, 14999, 72, 17381, 14999, 94, 17381, 14999, 106, 17381, 14999, 124, 17381, 14999, 148, 17381, 14999, 244, 17381, 14999, 266, 17381, 14999, 308, 17381, 14999, 336, 17381, 14999, 350, 17381, 14999, 384, 17381, 14999, 416, 17381, 14999, 448, 17381, 14999, 522, 17381, 14999, 572, 17381, 14999, 588, 17381, 14999, 622, 17381, 14999, 676, 17381, 14999, 680, 17381, 14999, 734, 17381, 14999, 932, 17381, 14999, 1044, 17381, 14999, 1142, 17381, 14999, 1164, 17381, 14999, 1492, 17381, 14999, 1796, 17381, 14999, 1914, 17381, 14999, 2444, 17381, 14999, 2492, 17381, 14999, 2556, 17381, 14999, 2676, 17381, 14999, 3048, 17381, 14999, 3114, 17381, 14999, 3242, 17381, 14999, 3322, 17381, 14999, 6314, 17381, 14999, 10264, 17381, 14999, 17493, 22, 17381, 14999, 17493, 34, 17381, 14999, 17493, 396, 17381, 14999, 17493, 582, 17381, 20989, 9854, 17390, 17397, 14640, 17399, 1397, 6746, 17399, 1397, 7788, 17399, 1397, 10634, 17399, 1397, 11968, 17399, 1397, 14032, 17399, 1397, 14826, 17399, 1397, 17370, 17399, 1397, 18330, 17426, 17433, 12212, 17437, 7865, 9854, 17441, 20375, 14312, 17451, 6718, 17463, 3357, 14823, 11476, 17463, 11476, 17463, 11477, 635, 896, 17463, 11477, 6785, 896, 17463, 11477, 10641, 3265, 19406, 17463, 11477, 10641, 3265, 20374, 17463, 11477, 10641, 12537, 18775, 18906, 17463, 11477, 10641, 13563, 18775, 18906, 17463, 11477, 10641, 13563, 20683, 18906, 17463, 11477, 10641, 14625, 15642, 17463, 11477, 10641, 15095, 18775, 18906, 17463, 11477, 10641, 16891, 10092, 17463, 11477, 10641, 20181, 15642, 17463, 11477, 10641, 20683, 18906, 17463, 11477, 19407, 485, 19215, 11476, 17463, 11571, 11476, 17463, 11571, 16153, 14049, 11476, 17463, 12277, 11476, 17463, 12277, 19931, 11476, 17463, 14049, 11476, 17463, 14049, 11477, 497, 18442, 17463, 14049, 11477, 497, 18443, 10641, 18847, 896, 17463, 14049, 11477, 497, 18443, 10641, 20181, 896, 17463, 14049, 11477, 6785, 896, 17463, 14049, 11477, 6785, 897, 10641, 20181, 896, 17463, 14049, 11477, 15901, 18775, 18906, 17463, 14049, 14625, 11476, 17463, 14049, 14625, 11477, 497, 18442, 17463, 14286, 17463, 14555, 11476, 17463, 14625, 11476, 17463, 15291, 14312, 17463, 15456, 17463, 15781, 11476, 17463, 16481, 10641, 5741, 7817, 635, 896, 17463, 16481, 10641, 5741, 7817, 6785, 896, 17463, 16481, 10641, 5741, 7817, 14373, 17463, 16481, 10641, 5741, 13340, 17463, 16481, 10641, 5741, 7817, 14373, 19215, 16481, 10641, 5741, 13340, 17463, 16481, 10641, 5741, 13341, 635, 896, 17463, 16481, 10641, 5741, 13341, 6785, 896, 17463, 16481, 10641, 5741, 19406, 17463, 16481, 10641, 5741, 20374, 17463, 17275, 11476, 17463, 18775, 18906, 17463, 19553, 11476, 17463, 19931, 11476, 17463, 20377, 11476, 17463, 20501, 11477, 6785, 13563, 14486, 17463, 20501, 11477, 10641, 18775, 19890, 17463, 20687, 11476, 17463, 23305, 11476, 17463, 23305, 11477, 635, 896, 17463, 23305, 11477, 10641, 5853, 13456, 17463, 23305, 11477, 10641, 7883, 3265, 19406, 17463, 23305, 11477, 10641, 7883, 3265, 20374, 17463, 23305, 11477, 10641, 10533, 12277, 13456, 17463, 23305, 11477, 10641, 12277, 13456, 17463, 23305, 11477, 10641, 14625, 20181, 15642, 17463, 23305, 11477, 10641, 15095, 13456, 17463, 23305, 11477, 10641, 15155, 13456, 17463, 23305, 11477, 19407, 485, 19215, 23305, 11476, 17463, 23305, 14555, 11476, 17463, 23305, 15291, 14312, 17479, 7126, 17498, 17505, 9854, 17508, 17519, 6718, 17523, 6718, 17527, 17066, 17529, 7126, 17583, 14299, 6777, 17202, 17583, 19759, 18692, 17588, 17589, 17634, 17589, 19054, 17601, 18076, 17605, 9854, 17620, 17631, 6437, 9854, 17631, 6793, 9956, 17631, 11762, 17631, 13563, 14999, 124, 17631, 13563, 14999, 140, 17631, 13563, 14999, 148, 17631, 13563, 14999, 190, 17631, 13563, 14999, 212, 17631, 13563, 14999, 282, 17631, 13563, 14999, 336, 17631, 13563, 14999, 486, 17631, 13563, 14999, 572, 17631, 13563, 14999, 634, 17631, 13563, 14999, 686, 17631, 13563, 14999, 738, 17631, 13563, 14999, 752, 17631, 13563, 14999, 876, 17631, 13563, 14999, 924, 17631, 13563, 14999, 1044, 17631, 13563, 14999, 1268, 17631, 13563, 14999, 1366, 17631, 13563, 14999, 1510, 17631, 13563, 14999, 1758, 17631, 13563, 14999, 1898, 17631, 13563, 14999, 1900, 17631, 13563, 14999, 2282, 17631, 13563, 14999, 2512, 17631, 13563, 14999, 2666, 17631, 13563, 14999, 2900, 17631, 13563, 14999, 3038, 17631, 13563, 14999, 3048, 17631, 13563, 14999, 3464, 17631, 13563, 14999, 3598, 17631, 13563, 14999, 3814, 17631, 13563, 14999, 6026, 17631, 13563, 14999, 7008, 17631, 13563, 14999, 7474, 17631, 13563, 14999, 7872, 17631, 13563, 14999, 9274, 17631, 13563, 14999, 10200, 17631, 13563, 14999, 10802, 17631, 13563, 18249, 1269, 10802, 17631, 13563, 18249, 2283, 1268, 17631, 13563, 18249, 2283, 1758, 17631, 13563, 18249, 2283, 2512, 17631, 13563, 18249, 2283, 3598, 17631, 13563, 18249, 3465, 2512, 17631, 14856, 17631, 16111, 14999, 124, 17631, 16111, 14999, 140, 17631, 16111, 14999, 148, 17631, 16111, 14999, 190, 17631, 16111, 14999, 212, 17631, 16111, 14999, 282, 17631, 16111, 14999, 336, 17631, 16111, 14999, 486, 17631, 16111, 14999, 572, 17631, 16111, 14999, 634, 17631, 16111, 14999, 686, 17631, 16111, 14999, 738, 17631, 16111, 14999, 752, 17631, 16111, 14999, 876, 17631, 16111, 14999, 924, 17631, 16111, 14999, 1044, 17631, 16111, 14999, 1268, 17631, 16111, 14999, 1366, 17631, 16111, 14999, 1510, 17631, 16111, 14999, 1758, 17631, 16111, 14999, 1898, 17631, 16111, 14999, 1900, 17631, 16111, 14999, 2282, 17631, 16111, 14999, 2512, 17631, 16111, 14999, 2666, 17631, 16111, 14999, 2900, 17631, 16111, 14999, 3038, 17631, 16111, 14999, 3048, 17631, 16111, 14999, 3464, 17631, 16111, 14999, 3598, 17631, 16111, 14999, 3814, 17631, 16111, 14999, 6026, 17631, 16111, 14999, 7008, 17631, 16111, 14999, 7474, 17631, 16111, 14999, 7872, 17631, 16111, 14999, 9274, 17631, 16111, 14999, 10200, 17631, 16111, 14999, 10802, 17631, 18021, 8320, 17631, 18319, 14999, 7817, 7123, 9502, 17631, 18511, 8320, 17631, 19880, 17631, 20685, 8320, 17631, 20989, 8320, 17642, 17643, 18386, 17644, 17647, 9786, 17657, 11642, 17659, 11594, 17661, 5223, 5222, 17661, 9855, 3397, 13334, 17661, 9855, 3397, 14434, 17661, 9855, 11568, 17661, 9855, 11678, 17661, 9855, 15662, 17661, 9855, 17118, 17661, 11655, 9858, 17661, 11655, 16984, 17661, 11655, 19502, 17661, 11905, 2610, 17661, 11905, 3076, 17661, 11905, 3356, 17661, 11905, 6756, 17661, 11905, 6778, 17661, 11905, 8780, 17661, 11905, 10900, 17661, 11905, 11978, 17661, 11905, 13450, 17661, 11905, 13736, 17661, 13180, 17661, 14003, 9855, 385, 12554, 17661, 14003, 9855, 385, 12555, 15704, 17661, 14003, 9855, 573, 9482, 17661, 14003, 9855, 573, 9483, 15704, 17661, 14003, 9855, 3396, 17661, 14003, 9855, 3397, 9702, 17661, 14003, 9855, 9972, 17661, 14003, 9855, 9973, 7422, 17661, 14003, 9855, 13216, 17661, 14003, 9855, 13217, 15704, 17661, 14003, 9855, 15686, 17661, 14003, 9855, 15687, 9482, 17661, 14003, 9855, 15687, 9483, 15704, 17661, 14003, 9855, 15687, 15704, 17661, 14003, 9855, 15704, 17661, 14056, 17661, 14999, 106, 17661, 14999, 107, 16566, 17661, 14999, 124, 17661, 14999, 125, 7778, 17661, 14999, 148, 17661, 14999, 149, 8310, 17661, 14999, 149, 12781, 18888, 17661, 14999, 149, 12781, 19420, 17661, 14999, 187, 13424, 17661, 14999, 244, 17661, 14999, 245, 7054, 17661, 14999, 266, 17661, 14999, 336, 17661, 14999, 337, 7466, 17661, 14999, 350, 17661, 14999, 351, 19420, 17661, 14999, 384, 17661, 14999, 385, 12554, 17661, 14999, 385, 12555, 15704, 17661, 14999, 416, 17661, 14999, 448, 17661, 14999, 449, 15424, 17661, 14999, 522, 17661, 14999, 523, 12432, 17661, 14999, 572, 17661, 14999, 573, 9482, 17661, 14999, 573, 9483, 15704, 17661, 14999, 588, 17661, 14999, 589, 9686, 17661, 14999, 589, 9698, 17661, 14999, 622, 17661, 14999, 623, 10106, 17661, 14999, 623, 12538, 17661, 14999, 623, 12781, 19420, 17661, 14999, 683, 13424, 17661, 14999, 694, 17661, 14999, 734, 17661, 14999, 1867, 13424, 17661, 14999, 2444, 17661, 14999, 2556, 17661, 14999, 3795, 13424, 17661, 14999, 7659, 13424, 17661, 14999, 10319, 13424, 17661, 14999, 11416, 17661, 14999, 11417, 15704, 17661, 14999, 11982, 17661, 14999, 12380, 17661, 14999, 12381, 15704, 17661, 14999, 13138, 17661, 14999, 13139, 15704, 17661, 14999, 13876, 17661, 14999, 13877, 15704, 17661, 14999, 14274, 17661, 14999, 14327, 13424, 17661, 15298, 17661, 16831, 15673, 6280, 17661, 16831, 15673, 6281, 6956, 17661, 16831, 15673, 6281, 15662, 17661, 16831, 15673, 6366, 17661, 16831, 15673, 6404, 17661, 16831, 15673, 6424, 17661, 16831, 15673, 6450, 17661, 16831, 15673, 11838, 17661, 16831, 15673, 11844, 17661, 16831, 15673, 11894, 17661, 16831, 15673, 19003, 7050, 17661, 16831, 15673, 19003, 11554, 17661, 16831, 15673, 19003, 11990, 17661, 16831, 15673, 19003, 13700, 17661, 16831, 15673, 19003, 14914, 17661, 16831, 15673, 19003, 14915, 10641, 16544, 17661, 16831, 15673, 19003, 14916, 17661, 16831, 15673, 19003, 14917, 10641, 16544, 17661, 16831, 15673, 19003, 16544, 17661, 16831, 15673, 19401, 9171, 9210, 17661, 16831, 15673, 19401, 9171, 9270, 17661, 16831, 15673, 19401, 9171, 9308, 17661, 16831, 15673, 19401, 14497, 9276, 17661, 16831, 15673, 19401, 14497, 9282, 17661, 16831, 15673, 20371, 9171, 1122, 17661, 16831, 15673, 20371, 9171, 1224, 17661, 16831, 15673, 20371, 14497, 3198, 17661, 16831, 15673, 20371, 14497, 3336, 17661, 18412, 17663, 10641, 3699, 9854, 17663, 10641, 6601, 9854, 17663, 10641, 13257, 9854, 17663, 10641, 14601, 9854, 17664, 17685, 5958, 17686, 17690, 17691, 10084, 17693, 12085, 14999, 14, 17693, 12085, 14999, 20, 17693, 12085, 14999, 30, 17693, 12085, 14999, 38, 17693, 14999, 0, 17693, 14999, 2, 17693, 14999, 4, 17693, 14999, 6, 17693, 14999, 8, 17693, 14999, 10, 17693, 14999, 12, 17693, 14999, 14, 17693, 14999, 16, 17693, 14999, 18, 17693, 14999, 20, 17693, 14999, 22, 17693, 14999, 24, 17693, 14999, 26, 17693, 14999, 28, 17693, 14999, 30, 17693, 14999, 32, 17693, 14999, 34, 17693, 14999, 36, 17693, 14999, 38, 17693, 14999, 40, 17693, 14999, 42, 17693, 14999, 46, 17693, 14999, 50, 17693, 14999, 72, 17693, 14999, 78, 17693, 14999, 80, 17693, 14999, 94, 17693, 14999, 120, 17693, 14999, 132, 17693, 14999, 184, 17693, 14999, 190, 17693, 14999, 192, 17693, 14999, 202, 17693, 14999, 208, 17693, 14999, 252, 17693, 14999, 256, 17693, 14999, 260, 17693, 14999, 306, 17693, 14999, 314, 17693, 14999, 324, 17693, 14999, 330, 17693, 14999, 340, 17693, 14999, 390, 17693, 14999, 456, 17693, 14999, 494, 17693, 14999, 498, 17693, 14999, 510, 17693, 14999, 596, 17693, 14999, 756, 17693, 14999, 758, 17693, 14999, 764, 17693, 14999, 844, 17693, 14999, 846, 17693, 14999, 1300, 17693, 14999, 1302, 17693, 14999, 1762, 17693, 14999, 2448, 17693, 14999, 2612, 17693, 14999, 2614, 17693, 14999, 3404, 17693, 14999, 5236, 17693, 14999, 5304, 17693, 14999, 7432, 17699, 1299, 485, 17178, 17699, 14003, 9855, 8, 17699, 14003, 9855, 16, 17699, 14003, 9855, 28, 17699, 14003, 9855, 40, 17699, 14003, 9855, 66, 17699, 14999, 0, 17699, 14999, 106, 17699, 14999, 124, 17699, 14999, 148, 17699, 14999, 244, 17699, 14999, 266, 17699, 14999, 336, 17699, 14999, 350, 17699, 14999, 384, 17699, 14999, 416, 17699, 14999, 448, 17699, 14999, 522, 17699, 14999, 572, 17699, 14999, 588, 17699, 14999, 622, 17699, 14999, 680, 17699, 14999, 734, 17699, 14999, 2338, 17699, 14999, 2444, 17699, 14999, 2518, 17699, 14999, 2556, 17699, 14999, 8742, 17699, 14999, 8950, 17699, 16964, 17701, 21038, 17702, 17703, 10641, 13579, 14036, 17704, 17712, 17714, 17717, 19683, 0, 17717, 19683, 4, 17717, 19683, 8, 17717, 19683, 10, 17717, 19683, 16, 17717, 19683, 20, 17717, 19683, 22, 17717, 19683, 24, 17717, 19683, 26, 17717, 19683, 28, 17717, 19683, 30, 17717, 19683, 32, 17717, 19683, 34, 17717, 19683, 36, 17717, 19683, 38, 17717, 19683, 48, 17717, 19683, 58, 17717, 19683, 72, 17717, 19683, 80, 17717, 19683, 102, 17717, 19683, 124, 17717, 19683, 130, 17717, 19683, 134, 17717, 19683, 140, 17717, 19683, 202, 17717, 19683, 224, 17717, 19683, 226, 17717, 19683, 230, 17717, 19683, 236, 17717, 19683, 276, 17717, 19683, 308, 17717, 19683, 316, 17717, 19683, 350, 17717, 19683, 354, 17717, 19683, 358, 17717, 19683, 366, 17717, 19683, 374, 17717, 19683, 384, 17717, 19683, 388, 17717, 19683, 390, 17717, 19683, 392, 17717, 19683, 402, 17717, 19683, 416, 17717, 19683, 424, 17717, 19683, 428, 17717, 19683, 430, 17717, 19683, 436, 17717, 19683, 448, 17717, 19683, 452, 17717, 19683, 456, 17717, 19683, 458, 17717, 19683, 460, 17717, 19683, 468, 17717, 19683, 496, 17717, 19683, 498, 17717, 19683, 518, 17717, 19683, 522, 17717, 19683, 528, 17717, 19683, 536, 17717, 19683, 540, 17717, 19683, 556, 17717, 19683, 560, 17717, 19683, 564, 17717, 19683, 572, 17717, 19683, 574, 17717, 19683, 578, 17717, 19683, 580, 17717, 19683, 588, 17717, 19683, 592, 17717, 19683, 596, 17717, 19683, 598, 17717, 19683, 602, 17717, 19683, 616, 17717, 19683, 622, 17717, 19683, 626, 17717, 19683, 628, 17717, 19683, 630, 17717, 19683, 634, 17717, 19683, 694, 17717, 19683, 700, 17717, 19683, 706, 17717, 19683, 710, 17717, 19683, 734, 17717, 19683, 736, 17717, 19683, 738, 17717, 19683, 742, 17717, 19683, 772, 17717, 19683, 788, 17717, 19683, 1006, 17717, 19683, 1049, 9854, 17717, 19683, 1058, 17717, 19683, 1078, 17717, 19683, 1100, 17717, 19683, 1102, 17717, 19683, 1104, 17717, 19683, 1106, 17717, 19683, 1344, 17717, 19683, 1374, 17717, 19683, 1392, 17717, 19683, 1860, 17717, 19683, 1892, 17717, 19683, 1934, 17717, 19683, 1976, 17717, 19683, 2032, 17717, 19683, 2036, 17717, 19683, 2038, 17717, 19683, 2042, 17717, 19683, 2066, 17717, 19683, 2096, 17717, 19683, 2122, 17717, 19683, 2126, 17717, 19683, 2128, 17717, 19683, 2136, 17717, 19683, 2164, 17717, 19683, 2212, 17717, 19683, 2214, 17717, 19683, 2216, 17717, 19683, 2218, 17717, 19683, 2234, 17717, 19683, 2258, 17717, 19683, 2308, 17717, 19683, 2330, 17717, 19683, 2366, 17717, 19683, 2368, 17717, 19683, 2370, 17717, 19683, 2372, 17717, 19683, 2386, 17717, 19683, 2408, 17717, 19683, 2444, 17717, 19683, 2450, 17717, 19683, 2452, 17717, 19683, 2466, 17717, 19683, 2496, 17717, 19683, 2504, 17717, 19683, 2516, 17717, 19683, 2548, 17717, 19683, 2550, 17717, 19683, 2552, 17717, 19683, 2554, 17717, 19683, 2636, 17717, 19683, 2658, 17717, 19683, 2690, 17717, 19683, 2706, 17717, 19683, 2714, 17717, 19683, 2746, 17717, 19683, 2748, 17717, 19683, 2750, 17717, 19683, 2752, 17717, 19683, 2762, 17717, 19683, 2766, 17717, 19683, 2794, 17717, 19683, 2806, 17717, 19683, 2866, 17717, 19683, 2892, 17717, 19683, 2916, 17717, 19683, 2948, 17717, 19683, 2986, 17717, 19683, 2990, 17717, 19683, 2992, 17717, 19683, 3008, 17717, 19683, 3034, 17717, 19683, 3048, 17717, 19683, 3050, 17717, 19683, 3052, 17717, 19683, 3054, 17717, 19683, 3068, 17717, 19683, 3094, 17717, 19683, 3110, 17717, 19683, 3150, 17717, 19683, 3152, 17717, 19683, 3156, 17717, 19683, 3158, 17717, 19683, 3186, 17717, 19683, 3224, 17717, 19683, 3242, 17717, 19683, 3244, 17717, 19683, 3246, 17717, 19683, 3248, 17717, 19683, 3258, 17717, 19683, 3290, 17717, 19683, 3322, 17717, 19683, 3324, 17717, 19683, 3326, 17717, 19683, 3328, 17717, 19683, 3330, 17717, 19683, 3350, 17717, 19683, 3352, 17717, 19683, 3354, 17717, 19683, 3356, 17717, 19683, 3358, 17717, 19683, 3360, 17717, 19683, 3362, 17717, 19683, 3364, 17717, 19683, 3518, 17717, 19683, 3536, 17717, 19683, 3552, 17717, 19683, 3562, 17717, 19683, 3648, 17717, 19683, 3688, 17717, 19683, 3714, 17717, 19683, 3728, 17717, 19683, 3738, 17717, 19683, 3764, 17717, 19683, 3766, 17717, 19683, 3768, 17717, 19683, 3770, 17717, 19683, 5954, 17717, 19683, 6124, 17717, 19683, 6126, 17717, 19683, 6128, 17717, 19683, 6716, 17717, 19683, 6793, 9956, 17717, 19683, 6806, 17717, 19683, 7562, 17717, 19683, 7732, 17717, 19683, 7734, 17717, 19683, 7738, 17717, 19683, 7740, 17717, 19683, 7772, 17717, 19683, 7826, 17717, 19683, 7832, 17717, 19683, 7834, 17717, 19683, 7904, 17717, 19683, 7906, 17717, 19683, 7908, 17717, 19683, 8308, 17717, 19683, 8494, 17717, 19683, 8498, 17717, 19683, 8500, 17717, 19683, 8588, 17717, 19683, 8702, 17717, 19683, 8706, 17717, 19683, 8740, 17717, 19683, 8748, 17717, 19683, 8834, 17717, 19683, 8836, 17717, 19683, 8838, 17717, 19683, 8936, 17717, 19683, 8938, 17717, 19683, 8940, 17717, 19683, 9200, 17717, 19683, 9318, 17717, 19683, 9322, 17717, 19683, 9324, 17717, 19683, 9326, 17717, 19683, 9346, 17717, 19683, 9456, 17717, 19683, 9576, 17717, 19683, 9578, 17717, 19683, 9580, 17717, 19683, 9582, 17717, 19683, 9682, 17717, 19683, 9740, 17717, 19683, 9754, 17717, 19683, 9772, 17717, 19683, 9790, 17717, 19683, 9800, 17717, 19683, 9822, 17717, 19683, 9824, 17717, 19683, 9826, 17717, 19683, 9828, 17717, 19683, 9986, 17717, 19683, 9988, 17717, 19683, 9990, 17717, 19683, 10078, 17717, 19683, 10134, 17717, 19683, 10160, 17717, 19683, 10170, 17717, 19683, 10174, 17717, 19683, 10176, 17717, 19683, 10206, 17717, 19683, 10208, 17717, 19683, 10210, 17717, 19683, 10212, 17717, 19683, 10264, 17717, 19683, 10266, 17717, 19683, 10268, 17717, 19683, 10270, 17717, 19683, 10302, 17717, 19683, 10304, 17717, 19683, 10306, 17717, 19683, 10730, 17717, 19683, 10846, 17717, 19683, 10848, 17717, 19683, 10850, 17717, 19683, 12085, 3293, 7123, 9502, 17717, 19683, 12085, 6435, 10086, 17717, 19683, 12085, 9286, 17717, 19683, 12085, 9502, 17717, 19683, 12085, 11394, 17717, 19683, 12085, 12232, 17717, 19683, 12085, 13341, 7123, 9502, 17717, 19683, 12085, 13507, 20181, 15642, 17717, 19683, 12085, 13563, 9502, 17717, 19683, 12085, 14393, 7123, 9502, 17717, 19683, 12085, 14625, 11394, 17717, 19683, 12085, 14625, 13507, 18847, 17302, 17717, 19683, 12085, 15119, 1216, 17717, 19683, 12085, 15423, 1216, 17717, 19683, 12840, 17717, 19683, 12964, 17717, 19683, 12966, 17717, 19683, 12968, 17717, 19683, 13518, 17717, 19683, 13520, 17717, 19683, 13522, 17717, 19683, 13524, 17717, 19683, 13744, 17717, 19683, 13780, 17717, 19683, 13782, 17717, 19683, 13834, 17717, 19683, 13838, 17717, 19683, 13840, 17717, 19683, 14363, 6365, 22, 17717, 19683, 14363, 6365, 34, 17717, 19683, 14856, 17717, 19683, 15093, 22, 17717, 19683, 15093, 34, 17717, 19683, 15153, 3244, 17717, 19683, 15153, 3246, 17717, 19683, 15153, 10160, 17717, 19683, 15417, 574, 17717, 19683, 15417, 2988, 17717, 19683, 15491, 24, 17717, 19683, 15491, 266, 17717, 19683, 15491, 270, 17717, 19683, 15491, 274, 17717, 19683, 15491, 282, 17717, 19683, 15491, 340, 17717, 19683, 15491, 344, 17717, 19683, 15491, 628, 17717, 19683, 15491, 738, 17717, 19683, 15491, 1680, 17717, 19683, 15491, 1844, 17717, 19683, 15491, 3048, 17717, 19683, 15491, 3050, 17717, 19683, 15491, 3052, 17717, 19683, 15491, 3054, 17717, 19683, 15491, 9790, 17717, 19683, 15491, 9824, 17717, 19683, 15917, 44, 17717, 19683, 15917, 498, 17717, 19683, 15917, 1078, 17717, 19683, 15917, 1976, 17717, 19683, 15917, 2164, 17717, 19683, 15917, 2330, 17717, 19683, 15917, 2504, 17717, 19683, 15917, 2706, 17717, 19683, 15917, 3094, 17717, 19683, 15917, 3290, 17717, 19683, 15917, 3728, 17717, 19683, 15917, 9318, 17717, 19683, 15975, 2, 17717, 19683, 16115, 14, 17717, 19683, 16115, 16, 17717, 19683, 16115, 30, 17717, 19683, 16115, 50, 17717, 19683, 16115, 158, 17717, 19683, 16115, 184, 17717, 19683, 16115, 244, 17717, 19683, 16115, 248, 17717, 19683, 16115, 254, 17717, 19683, 16115, 258, 17717, 19683, 16115, 260, 17717, 19683, 16115, 274, 17717, 19683, 16115, 336, 17717, 19683, 16115, 338, 17717, 19683, 16115, 340, 17717, 19683, 16115, 342, 17717, 19683, 16115, 344, 17717, 19683, 16115, 360, 17717, 19683, 16115, 384, 17717, 19683, 16115, 388, 17717, 19683, 16115, 392, 17717, 19683, 16115, 402, 17717, 19683, 16115, 406, 17717, 19683, 16115, 416, 17717, 19683, 16115, 424, 17717, 19683, 16115, 430, 17717, 19683, 16115, 436, 17717, 19683, 16115, 440, 17717, 19683, 16115, 448, 17717, 19683, 16115, 452, 17717, 19683, 16115, 456, 17717, 19683, 16115, 460, 17717, 19683, 16115, 468, 17717, 19683, 16115, 472, 17717, 19683, 16115, 522, 17717, 19683, 16115, 528, 17717, 19683, 16115, 536, 17717, 19683, 16115, 540, 17717, 19683, 16115, 546, 17717, 19683, 16115, 572, 17717, 19683, 16115, 574, 17717, 19683, 16115, 578, 17717, 19683, 16115, 580, 17717, 19683, 16115, 584, 17717, 19683, 16115, 588, 17717, 19683, 16115, 592, 17717, 19683, 16115, 596, 17717, 19683, 16115, 598, 17717, 19683, 16115, 602, 17717, 19683, 16115, 612, 17717, 19683, 16115, 694, 17717, 19683, 16115, 700, 17717, 19683, 16115, 706, 17717, 19683, 16115, 710, 17717, 19683, 16115, 712, 17717, 19683, 16115, 734, 17717, 19683, 16115, 736, 17717, 19683, 16115, 738, 17717, 19683, 16115, 742, 17717, 19683, 16115, 746, 17717, 19683, 16115, 752, 17717, 19683, 16115, 754, 17717, 19683, 16115, 758, 17717, 19683, 16115, 760, 17717, 19683, 16115, 762, 17717, 19683, 16115, 1044, 17717, 19683, 16115, 1046, 17717, 19683, 16115, 1048, 17717, 19683, 16115, 1050, 17717, 19683, 16115, 1052, 17717, 19683, 16115, 1152, 17717, 19683, 16115, 1194, 17717, 19683, 16115, 1196, 17717, 19683, 16115, 1198, 17717, 19683, 16115, 1200, 17717, 19683, 16115, 1202, 17717, 19683, 16115, 1254, 17717, 19683, 16115, 1256, 17717, 19683, 16115, 1258, 17717, 19683, 16115, 1260, 17717, 19683, 16115, 1262, 17717, 19683, 16115, 1430, 17717, 19683, 16115, 1468, 17717, 19683, 16115, 1492, 17717, 19683, 16115, 1494, 17717, 19683, 16115, 1496, 17717, 19683, 16115, 1498, 17717, 19683, 16115, 1500, 17717, 19683, 16115, 1560, 17717, 19683, 16115, 1566, 17717, 19683, 16115, 1606, 17717, 19683, 16115, 1702, 17717, 19683, 16115, 1704, 17717, 19683, 16115, 1706, 17717, 19683, 16115, 1708, 17717, 19683, 16115, 1710, 17717, 19683, 16115, 1788, 17717, 19683, 16115, 1812, 17717, 19683, 16115, 1814, 17717, 19683, 16115, 1816, 17717, 19683, 16115, 1818, 17717, 19683, 16115, 1820, 17717, 19683, 16115, 1848, 17717, 19683, 16115, 1914, 17717, 19683, 16115, 1916, 17717, 19683, 16115, 1918, 17717, 19683, 16115, 1920, 17717, 19683, 16115, 1922, 17717, 19683, 16115, 1952, 17717, 19683, 16115, 1954, 17717, 19683, 16115, 1956, 17717, 19683, 16115, 1958, 17717, 19683, 16115, 1960, 17717, 19683, 16115, 2104, 17717, 19683, 16115, 2122, 17717, 19683, 16115, 2124, 17717, 19683, 16115, 2126, 17717, 19683, 16115, 2128, 17717, 19683, 16115, 2130, 17717, 19683, 16115, 2278, 17717, 19683, 16115, 2430, 17717, 19683, 16115, 2664, 17717, 19683, 16115, 2898, 17717, 19683, 16115, 3036, 17717, 19683, 16115, 3048, 17717, 19683, 16115, 3050, 17717, 19683, 16115, 3052, 17717, 19683, 16115, 3054, 17717, 19683, 16115, 3056, 17717, 19683, 16115, 3242, 17717, 19683, 16115, 3244, 17717, 19683, 16115, 3246, 17717, 19683, 16115, 3248, 17717, 19683, 16115, 3250, 17717, 19683, 16115, 3274, 17717, 19683, 16115, 3276, 17717, 19683, 16115, 3278, 17717, 19683, 16115, 3280, 17717, 19683, 16115, 3282, 17717, 19683, 16115, 3308, 17717, 19683, 16115, 3310, 17717, 19683, 16115, 3312, 17717, 19683, 16115, 3314, 17717, 19683, 16115, 3316, 17717, 19683, 16115, 3322, 17717, 19683, 16115, 3324, 17717, 19683, 16115, 3328, 17717, 19683, 16115, 3330, 17717, 19683, 16115, 3332, 17717, 19683, 16115, 3540, 17717, 19683, 16115, 3694, 17717, 19683, 16115, 3804, 17717, 19683, 16115, 6024, 17717, 19683, 16115, 6365, 1468, 17717, 19683, 16115, 6414, 17717, 19683, 16115, 6468, 17717, 19683, 16115, 7014, 17717, 19683, 16115, 7336, 17717, 19683, 16115, 7486, 17717, 19683, 16115, 7644, 17717, 19683, 16115, 7680, 17717, 19683, 16115, 7830, 17717, 19683, 16115, 9756, 17717, 19683, 16115, 10150, 17717, 19683, 16115, 10204, 17717, 19683, 16115, 10206, 17717, 19683, 16115, 10208, 17717, 19683, 16115, 10210, 17717, 19683, 16115, 10212, 17717, 19683, 16115, 10214, 17717, 19683, 16115, 10238, 17717, 19683, 16115, 10260, 17717, 19683, 16115, 10274, 17717, 19683, 16115, 10276, 17717, 19683, 16115, 10278, 17717, 19683, 16115, 10280, 17717, 19683, 16115, 10282, 17717, 19683, 16115, 13778, 17717, 19683, 16115, 13842, 17717, 19683, 16115, 14567, 36, 17717, 19683, 16115, 16525, 50, 17717, 19683, 16351, 44, 17717, 19683, 16449, 9956, 17717, 19683, 16837, 3006, 17717, 19683, 16837, 3082, 17717, 19683, 16837, 3518, 17717, 19683, 16837, 3562, 17717, 19683, 16837, 6124, 17717, 19683, 16837, 7732, 17717, 19683, 16837, 8494, 17717, 19683, 16837, 8936, 17717, 19683, 16837, 9710, 17717, 19683, 16837, 9876, 17717, 19683, 16837, 9900, 17717, 19683, 16837, 9958, 17717, 19683, 16837, 9986, 17717, 19683, 16837, 10302, 17717, 19683, 16837, 10846, 17717, 19683, 16903, 14, 17717, 19683, 16903, 266, 17717, 19683, 16903, 270, 17717, 19683, 16903, 274, 17717, 19683, 16903, 282, 17717, 19683, 16903, 1578, 17717, 19683, 16903, 1632, 17717, 19683, 16903, 1680, 17717, 19683, 16905, 14, 17717, 19683, 16925, 4, 17717, 19683, 16925, 20, 17717, 19683, 16925, 24, 17717, 19683, 16925, 26, 17717, 19683, 16925, 30, 17717, 19683, 16925, 36, 17717, 19683, 16925, 38, 17717, 19683, 16925, 596, 17717, 19683, 16925, 2552, 17717, 19683, 16925, 2554, 17717, 19683, 16925, 8938, 17717, 19683, 16925, 8940, 17717, 19683, 17357, 628, 17717, 19683, 17357, 3242, 17717, 19683, 17357, 3244, 17717, 19683, 17357, 3246, 17717, 19683, 17357, 3248, 17717, 19683, 17357, 10134, 17717, 19683, 17357, 10160, 17717, 19683, 17357, 10170, 17717, 19683, 17511, 44, 17717, 19683, 18947, 0, 17717, 19683, 18947, 8, 17717, 19683, 18947, 16, 17717, 19683, 18947, 28, 17717, 19683, 18947, 36, 17717, 19683, 18947, 44, 17717, 19683, 18947, 350, 17717, 19683, 18947, 354, 17717, 19683, 18947, 358, 17717, 19683, 18947, 366, 17717, 19683, 18947, 448, 17717, 19683, 18947, 452, 17717, 19683, 18947, 460, 17717, 19683, 18947, 468, 17717, 19683, 18947, 694, 17717, 19683, 18947, 700, 17717, 19683, 18947, 706, 17717, 19683, 18947, 710, 17717, 19683, 19845, 22, 17717, 19683, 19845, 24, 17717, 19683, 19845, 30, 17717, 19683, 19845, 34, 17717, 19683, 19845, 48, 17717, 19683, 19845, 384, 17717, 19683, 19845, 388, 17717, 19683, 19845, 402, 17717, 19683, 19845, 572, 17717, 19683, 19845, 574, 17717, 19683, 19845, 578, 17717, 19683, 19845, 580, 17717, 19683, 19845, 694, 17717, 19683, 19845, 700, 17717, 19683, 19845, 706, 17717, 19683, 19845, 710, 17717, 19683, 19845, 1100, 17717, 19683, 19845, 1102, 17717, 19683, 19845, 1104, 17717, 19683, 19845, 1106, 17717, 19683, 19845, 2032, 17717, 19683, 19845, 2036, 17717, 19683, 19845, 2038, 17717, 19683, 19845, 2042, 17717, 19683, 19845, 2066, 17717, 19683, 19845, 2164, 17717, 19683, 19845, 2212, 17717, 19683, 19845, 2214, 17717, 19683, 19845, 2216, 17717, 19683, 19845, 2218, 17717, 19683, 19845, 2366, 17717, 19683, 19845, 2368, 17717, 19683, 19845, 2370, 17717, 19683, 19845, 2372, 17717, 19683, 19845, 2548, 17717, 19683, 19845, 2550, 17717, 19683, 19845, 2746, 17717, 19683, 19845, 2748, 17717, 19683, 19845, 2750, 17717, 19683, 19845, 2752, 17717, 19683, 19845, 3150, 17717, 19683, 19845, 3152, 17717, 19683, 19845, 3156, 17717, 19683, 19845, 3158, 17717, 19683, 19845, 3350, 17717, 19683, 19845, 3352, 17717, 19683, 19845, 3354, 17717, 19683, 19845, 3356, 17717, 19683, 19845, 3518, 17717, 19683, 19845, 3552, 17717, 19683, 19845, 3562, 17717, 19683, 19845, 3764, 17717, 19683, 19845, 3766, 17717, 19683, 19845, 3768, 17717, 19683, 19845, 3770, 17717, 19683, 19845, 6124, 17717, 19683, 19845, 6126, 17717, 19683, 19845, 6128, 17717, 19683, 19845, 6806, 17717, 19683, 19845, 7732, 17717, 19683, 19845, 7738, 17717, 19683, 19845, 7740, 17717, 19683, 19845, 7904, 17717, 19683, 19845, 7906, 17717, 19683, 19845, 7908, 17717, 19683, 19845, 8494, 17717, 19683, 19845, 8498, 17717, 19683, 19845, 8500, 17717, 19683, 19845, 8936, 17717, 19683, 19845, 9318, 17717, 19683, 19845, 9322, 17717, 19683, 19845, 9324, 17717, 19683, 19845, 9576, 17717, 19683, 19845, 9822, 17717, 19683, 19845, 9824, 17717, 19683, 19845, 9826, 17717, 19683, 19845, 9828, 17717, 19683, 19845, 9986, 17717, 19683, 19845, 9988, 17717, 19683, 19845, 9990, 17717, 19683, 19845, 10302, 17717, 19683, 19845, 10304, 17717, 19683, 19845, 10306, 17717, 19683, 19845, 10846, 17717, 19683, 19845, 10848, 17717, 19683, 19845, 10850, 17717, 19683, 19845, 13518, 17717, 19683, 19845, 13520, 17717, 19683, 19845, 13522, 17717, 19683, 19845, 13744, 17717, 19683, 19899, 24, 17717, 19683, 19899, 36, 17717, 19683, 19911, 48, 17717, 19683, 20265, 600, 17717, 19683, 20515, 628, 17717, 19683, 20515, 3242, 17717, 19683, 20515, 3244, 17717, 19683, 20515, 3246, 17717, 19683, 20515, 3248, 17717, 19683, 20515, 10174, 17717, 19683, 20515, 10178, 17717, 19683, 20515, 10180, 17717, 19683, 20515, 12085, 628, 17717, 19683, 20515, 13744, 17717, 19683, 20515, 13746, 17717, 19683, 20515, 13748, 17717, 19683, 20515, 13750, 17717, 19683, 21225, 1868, 17717, 19683, 21225, 1898, 17717, 19683, 21225, 1932, 17717, 19683, 21225, 1968, 17719, 12330, 17731, 19432, 17737, 13563, 14999, 0, 17737, 13563, 14999, 8, 17737, 13563, 14999, 16, 17737, 13563, 14999, 28, 17737, 13563, 14999, 36, 17737, 13563, 14999, 40, 17737, 13563, 14999, 42, 17737, 13563, 14999, 148, 17737, 13563, 14999, 154, 17737, 13563, 14999, 158, 17737, 13563, 14999, 166, 17737, 13563, 14999, 168, 17737, 13563, 14999, 170, 17737, 13563, 14999, 244, 17737, 13563, 14999, 248, 17737, 13563, 14999, 254, 17737, 13563, 14999, 258, 17737, 13563, 14999, 260, 17737, 13563, 14999, 262, 17737, 13563, 14999, 266, 17737, 13563, 14999, 270, 17737, 13563, 14999, 274, 17737, 13563, 14999, 282, 17737, 13563, 14999, 286, 17737, 13563, 14999, 288, 17737, 13563, 14999, 350, 17737, 13563, 14999, 384, 17737, 13563, 14999, 388, 17737, 13563, 14999, 392, 17737, 13563, 14999, 402, 17737, 13563, 14999, 406, 17737, 13563, 14999, 408, 17737, 13563, 14999, 416, 17737, 13563, 14999, 424, 17737, 13563, 14999, 430, 17737, 13563, 14999, 436, 17737, 13563, 14999, 440, 17737, 13563, 14999, 442, 17737, 13563, 14999, 448, 17737, 13563, 14999, 452, 17737, 13563, 14999, 460, 17737, 13563, 14999, 468, 17737, 13563, 14999, 472, 17737, 13563, 14999, 474, 17737, 13563, 14999, 588, 17737, 13563, 14999, 592, 17737, 13563, 14999, 598, 17737, 13563, 14999, 602, 17737, 13563, 14999, 612, 17737, 13563, 14999, 614, 17737, 13563, 14999, 622, 17737, 13563, 14999, 626, 17737, 13563, 14999, 630, 17737, 13563, 14999, 694, 17737, 13563, 14999, 700, 17737, 13563, 14999, 706, 17737, 13563, 14999, 710, 17737, 13563, 14999, 712, 17737, 13563, 14999, 714, 17737, 13563, 14999, 734, 17737, 13563, 14999, 736, 17737, 13563, 14999, 738, 17737, 13563, 14999, 742, 17737, 13563, 14999, 746, 17737, 13563, 14999, 748, 17737, 13563, 14999, 1194, 17737, 13563, 14999, 1664, 17737, 13563, 14999, 2392, 17737, 13563, 14999, 2814, 17737, 13563, 14999, 2816, 17737, 13563, 14999, 2820, 17737, 13563, 14999, 2824, 17737, 13563, 14999, 2832, 17737, 13563, 14999, 2834, 17737, 13563, 14999, 3274, 17737, 13563, 14999, 3276, 17737, 13563, 14999, 3278, 17737, 13563, 14999, 3280, 17737, 13563, 14999, 3282, 17737, 13563, 14999, 3284, 17737, 13563, 14999, 3308, 17737, 13563, 14999, 3310, 17737, 13563, 14999, 3312, 17737, 13563, 14999, 3314, 17737, 13563, 14999, 3316, 17737, 13563, 14999, 3318, 17737, 14999, 0, 17737, 14999, 8, 17737, 14999, 16, 17737, 14999, 28, 17737, 14999, 36, 17737, 14999, 40, 17737, 14999, 42, 17737, 14999, 148, 17737, 14999, 154, 17737, 14999, 158, 17737, 14999, 166, 17737, 14999, 168, 17737, 14999, 170, 17737, 14999, 244, 17737, 14999, 248, 17737, 14999, 254, 17737, 14999, 258, 17737, 14999, 260, 17737, 14999, 262, 17737, 14999, 266, 17737, 14999, 270, 17737, 14999, 274, 17737, 14999, 282, 17737, 14999, 286, 17737, 14999, 288, 17737, 14999, 350, 17737, 14999, 384, 17737, 14999, 388, 17737, 14999, 392, 17737, 14999, 402, 17737, 14999, 406, 17737, 14999, 408, 17737, 14999, 416, 17737, 14999, 424, 17737, 14999, 430, 17737, 14999, 436, 17737, 14999, 440, 17737, 14999, 442, 17737, 14999, 448, 17737, 14999, 452, 17737, 14999, 460, 17737, 14999, 468, 17737, 14999, 472, 17737, 14999, 474, 17737, 14999, 588, 17737, 14999, 592, 17737, 14999, 598, 17737, 14999, 602, 17737, 14999, 612, 17737, 14999, 614, 17737, 14999, 622, 17737, 14999, 626, 17737, 14999, 630, 17737, 14999, 694, 17737, 14999, 700, 17737, 14999, 706, 17737, 14999, 710, 17737, 14999, 712, 17737, 14999, 714, 17737, 14999, 734, 17737, 14999, 736, 17737, 14999, 738, 17737, 14999, 742, 17737, 14999, 746, 17737, 14999, 748, 17737, 14999, 1194, 17737, 14999, 1664, 17737, 14999, 2392, 17737, 14999, 2814, 17737, 14999, 2816, 17737, 14999, 2820, 17737, 14999, 2824, 17737, 14999, 2832, 17737, 14999, 2834, 17737, 14999, 3274, 17737, 14999, 3276, 17737, 14999, 3278, 17737, 14999, 3280, 17737, 14999, 3282, 17737, 14999, 3284, 17737, 14999, 3308, 17737, 14999, 3310, 17737, 14999, 3312, 17737, 14999, 3314, 17737, 14999, 3316, 17737, 14999, 3318, 17738, 17740, 17743, 17792, 17744, 17761, 12263, 9854, 17767, 5807, 8474, 17767, 16446, 17769, 12212, 17775, 5730, 17779, 6718, 17783, 91, 15100, 17783, 91, 15211, 18682, 17783, 91, 15211, 18683, 505, 12005, 634, 17783, 10641, 7883, 20181, 15642, 17783, 10641, 16946, 17783, 10641, 18847, 897, 93, 1299, 485, 20181, 15642, 17787, 2943, 10119, 11905, 2610, 17787, 2943, 10119, 11905, 3076, 17787, 2943, 10119, 11905, 3356, 17787, 2943, 10119, 11905, 6756, 17787, 2943, 10119, 11905, 6778, 17787, 2943, 10119, 11905, 8780, 17787, 2943, 10119, 11905, 11978, 17787, 2943, 10119, 11905, 13450, 17787, 2943, 10119, 11905, 13736, 17787, 2943, 10423, 11905, 2610, 17787, 2943, 10423, 11905, 3076, 17787, 2943, 10423, 11905, 3356, 17787, 2943, 10423, 11905, 6756, 17787, 2943, 10423, 11905, 6778, 17787, 2943, 10423, 11905, 8780, 17787, 2943, 10423, 11905, 11978, 17787, 2943, 10423, 11905, 13450, 17787, 2943, 10423, 11905, 13736, 17791, 8460, 17793, 12532, 17797, 9854, 17798, 17803, 9854, 17803, 18038, 17809, 13563, 14999, 0, 17809, 13563, 14999, 1, 10641, 11596, 17809, 13563, 14999, 1, 10641, 19058, 17809, 13563, 14999, 8, 17809, 13563, 14999, 9, 10641, 19058, 17809, 13563, 14999, 16, 17809, 13563, 14999, 17, 10641, 12232, 17809, 13563, 14999, 17, 10641, 15050, 17809, 13563, 14999, 17, 10641, 19058, 17809, 13563, 14999, 28, 17809, 13563, 14999, 29, 10641, 19058, 17809, 13563, 14999, 40, 17809, 13563, 14999, 41, 10641, 14625, 11394, 17809, 13563, 14999, 41, 10641, 15050, 17809, 13563, 14999, 41, 10641, 19058, 17809, 13563, 14999, 110, 17809, 13563, 14999, 154, 17809, 13563, 14999, 186, 17809, 13563, 14999, 198, 17809, 13563, 14999, 199, 10641, 7292, 17809, 13563, 14999, 199, 10641, 10092, 17809, 13563, 14999, 199, 10641, 15119, 7292, 17809, 13563, 14999, 199, 10641, 19056, 17809, 13563, 14999, 200, 17809, 13563, 14999, 201, 10641, 10092, 17809, 13563, 14999, 202, 17809, 13563, 14999, 203, 10641, 7292, 17809, 13563, 14999, 203, 10641, 7817, 7292, 17809, 13563, 14999, 203, 10641, 10092, 17809, 13563, 14999, 203, 10641, 15119, 7292, 17809, 13563, 14999, 203, 10641, 19056, 17809, 13563, 14999, 208, 17809, 13563, 14999, 209, 10641, 10182, 17809, 13563, 14999, 210, 17809, 13563, 14999, 211, 10641, 19056, 17809, 13563, 14999, 266, 17809, 13563, 14999, 267, 10641, 7292, 17809, 13563, 14999, 267, 10641, 15642, 17809, 13563, 14999, 267, 10641, 19056, 17809, 13563, 14999, 300, 17809, 13563, 14999, 301, 10641, 11596, 17809, 13563, 14999, 301, 10641, 12232, 17809, 13563, 14999, 318, 17809, 13563, 14999, 338, 17809, 13563, 14999, 350, 17809, 13563, 14999, 351, 10641, 7292, 17809, 13563, 14999, 351, 10641, 15642, 17809, 13563, 14999, 351, 10641, 18847, 15642, 17809, 13563, 14999, 351, 10641, 19056, 17809, 13563, 14999, 508, 17809, 13563, 14999, 528, 17809, 13563, 14999, 529, 10641, 15119, 7292, 17809, 13563, 14999, 529, 10641, 19056, 17809, 13563, 14999, 556, 17809, 13563, 14999, 626, 17809, 13563, 14999, 627, 10641, 15119, 7292, 17809, 13563, 14999, 627, 10641, 19056, 17809, 13563, 14999, 662, 17809, 13563, 14999, 682, 17809, 13563, 14999, 700, 17809, 13563, 14999, 734, 17809, 13563, 14999, 738, 17809, 13563, 14999, 740, 17809, 13563, 14999, 746, 17809, 13563, 14999, 754, 17809, 13563, 14999, 755, 10641, 19056, 17809, 13563, 14999, 755, 10641, 19058, 17809, 13563, 14999, 947, 3758, 17809, 13563, 14999, 1046, 17809, 13563, 14999, 1047, 10641, 18847, 15642, 17809, 13563, 14999, 1047, 10641, 19056, 17809, 13563, 14999, 1047, 10641, 19058, 17809, 13563, 14999, 1192, 17809, 13563, 14999, 1248, 17809, 13563, 14999, 1256, 17809, 13563, 14999, 1494, 17809, 13563, 14999, 1495, 10641, 15119, 7292, 17809, 13563, 14999, 1495, 10641, 15642, 17809, 13563, 14999, 1495, 10641, 15643, 843, 7292, 17809, 13563, 14999, 1495, 10641, 15844, 17809, 13563, 14999, 1495, 10641, 19056, 17809, 13563, 14999, 1518, 17809, 13563, 14999, 1704, 17809, 13563, 14999, 1950, 17809, 13563, 14999, 1998, 17809, 13563, 14999, 2122, 17809, 13563, 14999, 2150, 17809, 13563, 14999, 2480, 17809, 13563, 14999, 2722, 17809, 13563, 14999, 2912, 17809, 13563, 14999, 3048, 17809, 13563, 14999, 3310, 17809, 13563, 14999, 3352, 17809, 13563, 14999, 3654, 17809, 13563, 14999, 3680, 17809, 13563, 14999, 3814, 17809, 13563, 14999, 3815, 10641, 11596, 17809, 13563, 14999, 3815, 10641, 19056, 17809, 13563, 14999, 3815, 10641, 19058, 17809, 13563, 14999, 5990, 17809, 13563, 14999, 6294, 17809, 13563, 14999, 6472, 17809, 13563, 14999, 6476, 17809, 13563, 14999, 6480, 17809, 13563, 14999, 6754, 17809, 13563, 14999, 7131, 9854, 17809, 13563, 14999, 7438, 17809, 13563, 14999, 7689, 154, 17809, 13563, 14999, 7689, 1192, 17809, 13563, 14999, 7689, 2150, 17809, 13563, 14999, 7689, 2480, 17809, 13563, 14999, 7689, 3078, 17809, 13563, 14999, 7689, 3272, 17809, 13563, 14999, 7689, 3838, 17809, 13563, 14999, 7689, 6474, 17809, 13563, 14999, 9768, 17809, 13563, 14999, 9769, 10641, 19056, 17809, 13563, 14999, 9824, 17809, 13563, 14999, 9891, 154, 17809, 13563, 14999, 9891, 198, 17809, 13563, 14999, 9891, 200, 17809, 13563, 14999, 9891, 9854, 17809, 13563, 14999, 10099, 626, 17809, 13563, 14999, 10099, 3680, 17809, 13563, 14999, 10099, 7131, 9854, 17809, 13563, 14999, 10110, 17809, 13563, 14999, 10242, 17809, 13563, 14999, 10250, 17809, 13563, 14999, 10256, 17809, 13563, 14999, 10633, 210, 17809, 13563, 14999, 10780, 17809, 13563, 14999, 10781, 10641, 5721, 3702, 17809, 13563, 14999, 10781, 10641, 19058, 17809, 13563, 14999, 10946, 17809, 13563, 14999, 11427, 350, 17809, 13563, 14999, 11603, 13144, 17809, 13563, 14999, 11916, 17809, 13563, 14999, 11940, 17809, 13563, 14999, 11948, 17809, 13563, 14999, 12494, 17809, 13563, 14999, 13144, 17809, 13563, 14999, 13145, 10641, 13774, 17809, 13563, 14999, 13357, 13144, 17809, 13563, 14999, 13432, 17809, 13563, 14999, 13433, 10641, 19058, 17809, 13563, 14999, 13472, 17809, 13563, 14999, 13507, 16, 17809, 13563, 14999, 13507, 17, 10641, 10092, 17809, 13563, 14999, 13507, 40, 17809, 13563, 14999, 14357, 28, 17809, 13563, 14999, 14357, 29, 10641, 19058, 17809, 13563, 14999, 14497, 15031, 3758, 17809, 13563, 14999, 14625, 28, 17809, 13563, 14999, 14625, 19447, 28, 17809, 13563, 14999, 15031, 3758, 17809, 13563, 14999, 15155, 28, 17809, 13563, 14999, 15940, 17809, 13563, 14999, 16045, 350, 17809, 13563, 14999, 16075, 3758, 17809, 13563, 14999, 16197, 28, 17809, 13563, 14999, 16538, 17809, 13563, 14999, 16539, 10641, 14625, 12233, 14262, 17809, 13563, 14999, 16853, 3702, 17809, 13563, 14999, 17143, 682, 17809, 13563, 14999, 18185, 0, 17809, 13563, 14999, 18185, 8, 17809, 13563, 14999, 18185, 947, 3758, 17809, 13563, 14999, 18185, 3680, 17809, 13563, 14999, 18185, 14497, 15031, 3758, 17809, 13563, 14999, 18185, 15031, 3758, 17809, 13563, 14999, 18410, 17809, 13563, 14999, 18543, 746, 17809, 13563, 14999, 18543, 754, 17809, 13563, 14999, 18543, 1256, 17809, 13563, 14999, 18543, 3310, 17809, 13563, 14999, 18577, 9854, 17809, 13563, 14999, 18653, 40, 17809, 13563, 14999, 18653, 41, 10641, 15642, 17809, 13563, 14999, 18877, 266, 17809, 13563, 14999, 18877, 1046, 17809, 13563, 14999, 18877, 1047, 10641, 19056, 17809, 13563, 14999, 18877, 1256, 17809, 13563, 14999, 18939, 28, 17809, 13563, 14999, 19447, 28, 17809, 13563, 14999, 19449, 662, 17809, 13563, 14999, 19815, 300, 17809, 13563, 14999, 19817, 662, 17809, 13563, 14999, 20205, 1046, 17809, 13563, 14999, 20771, 154, 17809, 13563, 14999, 21243, 626, 17809, 13563, 14999, 23555, 16, 17809, 13563, 18249, 1, 300, 17809, 13563, 18249, 203, 1494, 17809, 13563, 18249, 627, 3310, 17809, 14906, 17809, 14999, 13563, 16111, 198, 17809, 14999, 18410, 17809, 14999, 20809, 28, 17809, 16111, 14999, 0, 17809, 16111, 14999, 1, 10641, 11596, 17809, 16111, 14999, 1, 10641, 19058, 17809, 16111, 14999, 8, 17809, 16111, 14999, 9, 10641, 19058, 17809, 16111, 14999, 16, 17809, 16111, 14999, 17, 10641, 12232, 17809, 16111, 14999, 17, 10641, 15050, 17809, 16111, 14999, 17, 10641, 19058, 17809, 16111, 14999, 28, 17809, 16111, 14999, 29, 10641, 19058, 17809, 16111, 14999, 40, 17809, 16111, 14999, 41, 10641, 14625, 11394, 17809, 16111, 14999, 41, 10641, 15050, 17809, 16111, 14999, 41, 10641, 19058, 17809, 16111, 14999, 110, 17809, 16111, 14999, 154, 17809, 16111, 14999, 186, 17809, 16111, 14999, 198, 17809, 16111, 14999, 199, 10641, 7292, 17809, 16111, 14999, 199, 10641, 10092, 17809, 16111, 14999, 199, 10641, 15119, 7292, 17809, 16111, 14999, 199, 10641, 19056, 17809, 16111, 14999, 200, 17809, 16111, 14999, 201, 10641, 10092, 17809, 16111, 14999, 202, 17809, 16111, 14999, 203, 10641, 7292, 17809, 16111, 14999, 203, 10641, 7817, 7292, 17809, 16111, 14999, 203, 10641, 10092, 17809, 16111, 14999, 203, 10641, 15119, 7292, 17809, 16111, 14999, 203, 10641, 19056, 17809, 16111, 14999, 208, 17809, 16111, 14999, 209, 10641, 10182, 17809, 16111, 14999, 210, 17809, 16111, 14999, 211, 10641, 19056, 17809, 16111, 14999, 266, 17809, 16111, 14999, 267, 10641, 7292, 17809, 16111, 14999, 267, 10641, 15642, 17809, 16111, 14999, 267, 10641, 19056, 17809, 16111, 14999, 300, 17809, 16111, 14999, 301, 10641, 11596, 17809, 16111, 14999, 301, 10641, 12232, 17809, 16111, 14999, 318, 17809, 16111, 14999, 338, 17809, 16111, 14999, 350, 17809, 16111, 14999, 351, 10641, 7292, 17809, 16111, 14999, 351, 10641, 15642, 17809, 16111, 14999, 351, 10641, 18847, 15642, 17809, 16111, 14999, 351, 10641, 19056, 17809, 16111, 14999, 508, 17809, 16111, 14999, 528, 17809, 16111, 14999, 529, 10641, 15119, 7292, 17809, 16111, 14999, 529, 10641, 19056, 17809, 16111, 14999, 556, 17809, 16111, 14999, 626, 17809, 16111, 14999, 627, 10641, 15119, 7292, 17809, 16111, 14999, 627, 10641, 19056, 17809, 16111, 14999, 662, 17809, 16111, 14999, 682, 17809, 16111, 14999, 700, 17809, 16111, 14999, 734, 17809, 16111, 14999, 738, 17809, 16111, 14999, 740, 17809, 16111, 14999, 746, 17809, 16111, 14999, 754, 17809, 16111, 14999, 755, 10641, 19056, 17809, 16111, 14999, 755, 10641, 19058, 17809, 16111, 14999, 947, 3758, 17809, 16111, 14999, 1046, 17809, 16111, 14999, 1047, 10641, 18847, 15642, 17809, 16111, 14999, 1047, 10641, 19056, 17809, 16111, 14999, 1047, 10641, 19058, 17809, 16111, 14999, 1192, 17809, 16111, 14999, 1248, 17809, 16111, 14999, 1256, 17809, 16111, 14999, 1494, 17809, 16111, 14999, 1495, 10641, 15119, 7292, 17809, 16111, 14999, 1495, 10641, 15642, 17809, 16111, 14999, 1495, 10641, 15643, 843, 7292, 17809, 16111, 14999, 1495, 10641, 15844, 17809, 16111, 14999, 1495, 10641, 19056, 17809, 16111, 14999, 1518, 17809, 16111, 14999, 1704, 17809, 16111, 14999, 1950, 17809, 16111, 14999, 1998, 17809, 16111, 14999, 2122, 17809, 16111, 14999, 2150, 17809, 16111, 14999, 2480, 17809, 16111, 14999, 2722, 17809, 16111, 14999, 2912, 17809, 16111, 14999, 3048, 17809, 16111, 14999, 3310, 17809, 16111, 14999, 3352, 17809, 16111, 14999, 3654, 17809, 16111, 14999, 3680, 17809, 16111, 14999, 3814, 17809, 16111, 14999, 3815, 10641, 11596, 17809, 16111, 14999, 3815, 10641, 19056, 17809, 16111, 14999, 3815, 10641, 19058, 17809, 16111, 14999, 5990, 17809, 16111, 14999, 6294, 17809, 16111, 14999, 6472, 17809, 16111, 14999, 6476, 17809, 16111, 14999, 6480, 17809, 16111, 14999, 6754, 17809, 16111, 14999, 7131, 9854, 17809, 16111, 14999, 7438, 17809, 16111, 14999, 7689, 154, 17809, 16111, 14999, 7689, 1192, 17809, 16111, 14999, 7689, 2150, 17809, 16111, 14999, 7689, 2480, 17809, 16111, 14999, 7689, 3078, 17809, 16111, 14999, 7689, 3272, 17809, 16111, 14999, 7689, 3838, 17809, 16111, 14999, 7689, 6474, 17809, 16111, 14999, 9768, 17809, 16111, 14999, 9769, 10641, 19056, 17809, 16111, 14999, 9824, 17809, 16111, 14999, 9891, 154, 17809, 16111, 14999, 9891, 198, 17809, 16111, 14999, 9891, 200, 17809, 16111, 14999, 9891, 9854, 17809, 16111, 14999, 10110, 17809, 16111, 14999, 10242, 17809, 16111, 14999, 10250, 17809, 16111, 14999, 10256, 17809, 16111, 14999, 10780, 17809, 16111, 14999, 10781, 10641, 5721, 3702, 17809, 16111, 14999, 10781, 10641, 19058, 17809, 16111, 14999, 10946, 17809, 16111, 14999, 11427, 350, 17809, 16111, 14999, 11603, 13144, 17809, 16111, 14999, 11916, 17809, 16111, 14999, 11940, 17809, 16111, 14999, 11948, 17809, 16111, 14999, 12494, 17809, 16111, 14999, 13144, 17809, 16111, 14999, 13145, 10641, 13774, 17809, 16111, 14999, 13357, 13144, 17809, 16111, 14999, 13432, 17809, 16111, 14999, 13433, 10641, 19058, 17809, 16111, 14999, 13472, 17809, 16111, 14999, 13507, 16, 17809, 16111, 14999, 13507, 17, 10641, 10092, 17809, 16111, 14999, 13507, 40, 17809, 16111, 14999, 14357, 28, 17809, 16111, 14999, 14357, 29, 10641, 19058, 17809, 16111, 14999, 14497, 15031, 3758, 17809, 16111, 14999, 14625, 28, 17809, 16111, 14999, 14625, 19447, 28, 17809, 16111, 14999, 15031, 3758, 17809, 16111, 14999, 15940, 17809, 16111, 14999, 16045, 350, 17809, 16111, 14999, 16075, 3758, 17809, 16111, 14999, 16197, 28, 17809, 16111, 14999, 16538, 17809, 16111, 14999, 16539, 10641, 14625, 12233, 14262, 17809, 16111, 14999, 16853, 3702, 17809, 16111, 14999, 18185, 0, 17809, 16111, 14999, 18185, 8, 17809, 16111, 14999, 18185, 947, 3758, 17809, 16111, 14999, 18185, 3680, 17809, 16111, 14999, 18185, 14497, 15031, 3758, 17809, 16111, 14999, 18185, 15031, 3758, 17809, 16111, 14999, 18543, 746, 17809, 16111, 14999, 18543, 754, 17809, 16111, 14999, 18543, 1256, 17809, 16111, 14999, 18543, 3310, 17809, 16111, 14999, 18577, 9854, 17809, 16111, 14999, 18653, 40, 17809, 16111, 14999, 18653, 41, 10641, 15642, 17809, 16111, 14999, 18877, 266, 17809, 16111, 14999, 18877, 1046, 17809, 16111, 14999, 18877, 1047, 10641, 19056, 17809, 16111, 14999, 18877, 1256, 17809, 16111, 14999, 18939, 28, 17809, 16111, 14999, 19447, 28, 17809, 16111, 14999, 19449, 662, 17809, 16111, 14999, 19815, 300, 17809, 16111, 14999, 20205, 1046, 17809, 16111, 14999, 23555, 16, 17809, 16111, 18249, 1, 300, 17809, 16111, 18249, 203, 1494, 17809, 16111, 18249, 627, 3310, 17809, 16992, 17809, 19785, 9854, 17825, 6767, 9873, 15672, 17829, 13816, 17833, 12335, 17700, 17841, 9854, 17857, 1016, 17865, 9854, 17865, 13546, 17865, 13764, 17866, 17867, 10641, 10132, 17867, 10641, 10133, 843, 17030, 17867, 10641, 17030, 17988, 17993, 13251, 20375, 11476, 17999, 6718, 18001, 9855, 29, 10641, 11772, 18001, 11401, 2175, 1216, 18001, 11401, 2175, 7854, 18001, 11401, 2175, 7883, 12232, 18001, 11401, 2175, 10620, 18001, 11401, 2175, 11394, 18001, 11401, 2175, 11476, 18001, 11401, 2175, 12232, 18001, 11401, 2175, 13757, 11394, 18001, 11401, 2175, 14486, 18001, 11401, 2175, 18846, 18001, 11401, 2175, 18847, 15504, 18001, 11401, 2303, 18847, 15504, 18001, 11401, 2303, 20181, 15504, 18001, 11401, 7171, 1216, 18001, 11401, 7171, 7854, 18001, 11401, 7171, 7883, 12232, 18001, 11401, 7171, 10620, 18001, 11401, 7171, 11394, 18001, 11401, 7171, 12232, 18001, 11401, 7171, 13757, 11394, 18001, 11401, 7171, 14486, 18001, 11401, 7171, 18846, 18001, 11401, 7171, 18847, 15504, 18001, 11401, 7817, 20181, 15504, 18001, 11401, 13341, 20181, 15504, 18001, 11401, 17649, 9, 7292, 18001, 11401, 17649, 17, 7292, 18001, 11401, 17649, 10092, 18001, 11401, 17649, 15504, 18001, 11401, 17649, 17342, 18001, 11401, 17649, 17343, 7292, 18001, 11401, 17649, 22869, 15504, 18001, 13725, 14999, 18574, 18001, 14625, 8320, 18001, 14999, 0, 18001, 14999, 2, 18001, 14999, 6, 18001, 14999, 7, 36, 18001, 14999, 8, 18001, 14999, 10, 18001, 14999, 11, 26, 18001, 14999, 12, 18001, 14999, 13, 35, 36, 18001, 14999, 14, 18001, 14999, 16, 18001, 14999, 18, 18001, 14999, 19, 24, 18001, 14999, 19, 25, 36, 18001, 14999, 19, 26, 18001, 14999, 19, 27, 36, 18001, 14999, 19, 36, 18001, 14999, 19, 37, 10641, 1216, 18001, 14999, 19, 10641, 1216, 18001, 14999, 19, 10641, 6431, 14875, 843, 11392, 18001, 14999, 20, 18001, 14999, 21, 24, 18001, 14999, 21, 35, 36, 18001, 14999, 22, 18001, 14999, 24, 18001, 14999, 25, 26, 18001, 14999, 25, 27, 36, 18001, 14999, 25, 36, 18001, 14999, 25, 10641, 1216, 18001, 14999, 26, 18001, 14999, 27, 24, 18001, 14999, 27, 25, 36, 18001, 14999, 27, 36, 18001, 14999, 27, 10641, 1216, 18001, 14999, 28, 18001, 14999, 30, 18001, 14999, 31, 26, 18001, 14999, 34, 18001, 14999, 35, 36, 18001, 14999, 36, 18001, 14999, 37, 18, 18001, 14999, 37, 19, 36, 18001, 14999, 37, 20, 18001, 14999, 37, 21, 34, 18001, 14999, 37, 24, 18001, 14999, 37, 26, 18001, 14999, 37, 30, 18001, 14999, 37, 31, 34, 18001, 14999, 37, 36, 18001, 14999, 37, 38, 18001, 14999, 37, 39, 34, 18001, 14999, 37, 10641, 1216, 18001, 14999, 37, 10641, 1217, 11552, 18001, 14999, 38, 18001, 14999, 39, 35, 36, 18001, 14999, 39, 36, 18001, 14999, 40, 18001, 14999, 41, 26, 18001, 14999, 42, 18001, 14999, 44, 18001, 14999, 45, 34, 18001, 14999, 46, 18001, 14999, 156, 18001, 14999, 184, 18001, 14999, 214, 18001, 14999, 278, 18001, 14999, 300, 18001, 14999, 360, 18001, 14999, 390, 18001, 14999, 478, 18001, 14999, 510, 18001, 14999, 514, 18001, 14999, 576, 18001, 14999, 628, 18001, 14999, 658, 18001, 14999, 660, 18001, 14999, 694, 18001, 14999, 704, 18001, 14999, 706, 18001, 14999, 710, 18001, 14999, 730, 18001, 14999, 736, 18001, 14999, 854, 18001, 14999, 2620, 18001, 14999, 3542, 18001, 14999, 3566, 18001, 14999, 7883, 16, 18001, 14999, 7883, 40, 18001, 14999, 12811, 0, 18001, 14999, 12811, 16, 18001, 14999, 12811, 28, 18001, 14999, 12811, 40, 18001, 14999, 13507, 16, 18001, 14999, 13557, 18, 18001, 14999, 13557, 40, 18001, 14999, 13557, 80, 18001, 14999, 13557, 156, 18001, 14999, 13557, 184, 18001, 14999, 13557, 190, 18001, 14999, 13557, 202, 18001, 14999, 13557, 496, 18001, 14999, 13557, 514, 18001, 14999, 15319, 78, 18001, 14999, 15319, 80, 18001, 14999, 17493, 24, 18001, 14999, 18549, 16, 18001, 14999, 18549, 40, 18001, 20877, 16147, 6793, 9956, 18009, 20173, 3896, 18009, 20173, 3898, 18009, 20173, 3900, 18009, 20173, 3902, 18009, 20173, 3904, 18009, 20173, 3906, 18009, 20173, 3908, 18009, 20173, 3910, 18009, 20173, 3912, 18009, 20173, 3914, 18009, 20173, 3916, 18009, 20173, 3918, 18009, 20173, 3920, 18009, 20173, 3922, 18009, 20173, 3924, 18009, 20173, 3926, 18009, 20173, 3928, 18009, 20173, 3930, 18009, 20173, 3932, 18009, 20173, 3934, 18009, 20173, 3936, 18009, 20173, 3938, 18009, 20173, 3940, 18009, 20173, 3942, 18009, 20173, 3944, 18009, 20173, 3946, 18009, 20173, 3948, 18009, 20173, 3950, 18009, 20173, 3952, 18009, 20173, 3954, 18009, 20173, 3956, 18009, 20173, 3958, 18009, 20173, 3960, 18009, 20173, 3962, 18009, 20173, 3964, 18009, 20173, 3966, 18009, 20173, 3968, 18009, 20173, 3970, 18009, 20173, 3972, 18009, 20173, 3974, 18009, 20173, 3976, 18009, 20173, 3978, 18009, 20173, 3980, 18009, 20173, 3982, 18009, 20173, 3984, 18009, 20173, 3986, 18009, 20173, 3988, 18009, 20173, 3990, 18009, 20173, 3992, 18009, 20173, 3994, 18009, 20173, 3996, 18009, 20173, 3998, 18009, 20173, 4000, 18009, 20173, 4002, 18009, 20173, 4004, 18009, 20173, 4006, 18009, 20173, 4008, 18009, 20173, 4010, 18009, 20173, 4012, 18009, 20173, 4014, 18009, 20173, 4016, 18009, 20173, 4018, 18009, 20173, 4020, 18009, 20173, 4022, 18009, 20173, 4024, 18009, 20173, 4026, 18009, 20173, 4028, 18009, 20173, 4030, 18009, 20173, 4032, 18009, 20173, 4034, 18009, 20173, 5314, 18009, 20173, 5316, 18009, 20173, 5318, 18009, 20173, 5320, 18009, 20173, 5322, 18009, 20173, 5324, 18009, 20173, 5326, 18009, 20173, 5328, 18009, 20173, 5330, 18009, 20173, 5906, 18009, 20173, 5908, 18009, 20173, 5910, 18009, 20173, 5912, 18009, 20173, 5914, 18009, 20173, 5916, 18009, 20173, 5918, 18009, 20173, 5920, 18009, 20173, 5922, 18009, 20173, 5924, 18009, 20173, 5926, 18009, 20173, 5928, 18009, 20173, 5930, 18009, 20173, 5932, 18009, 20173, 5934, 18009, 20173, 5936, 18009, 20173, 5938, 18009, 20173, 5940, 18009, 20173, 5942, 18009, 20173, 5944, 18009, 20173, 5946, 18009, 20173, 5948, 18009, 20173, 5950, 18009, 20173, 5952, 18009, 20173, 6136, 18009, 20173, 6138, 18009, 20173, 6140, 18009, 20173, 6142, 18009, 20173, 6144, 18009, 20173, 6146, 18009, 20173, 6148, 18009, 20173, 6150, 18009, 20173, 6152, 18009, 20173, 6154, 18009, 20173, 6156, 18009, 20173, 6158, 18009, 20173, 6160, 18009, 20173, 6162, 18009, 20173, 6164, 18009, 20173, 6166, 18009, 20173, 6168, 18009, 20173, 6170, 18009, 20173, 6172, 18009, 20173, 6174, 18009, 20173, 6176, 18009, 20173, 6178, 18009, 20173, 6180, 18009, 20173, 6182, 18009, 20173, 6184, 18009, 20173, 6186, 18009, 20173, 6188, 18009, 20173, 6190, 18009, 20173, 6192, 18009, 20173, 6194, 18009, 20173, 6196, 18009, 20173, 6198, 18009, 20173, 6200, 18009, 20173, 6202, 18009, 20173, 6204, 18009, 20173, 6206, 18009, 20173, 6208, 18009, 20173, 6210, 18009, 20173, 6212, 18009, 20173, 6214, 18009, 20173, 6216, 18009, 20173, 6218, 18009, 20173, 6220, 18009, 20173, 6222, 18009, 20173, 6224, 18009, 20173, 6226, 18009, 20173, 6228, 18009, 20173, 6230, 18009, 20173, 6232, 18009, 20173, 6234, 18009, 20173, 6236, 18009, 20173, 6238, 18009, 20173, 6240, 18009, 20173, 6242, 18009, 20173, 6244, 18009, 20173, 6246, 18009, 20173, 6248, 18009, 20173, 6250, 18009, 20173, 6252, 18009, 20173, 6254, 18009, 20173, 6256, 18009, 20173, 6258, 18009, 20173, 6260, 18009, 20173, 6262, 18009, 20173, 6264, 18009, 20173, 6266, 18009, 20173, 6268, 18009, 20173, 6482, 18009, 20173, 6484, 18009, 20173, 6486, 18009, 20173, 6488, 18009, 20173, 6490, 18009, 20173, 6492, 18009, 20173, 6494, 18009, 20173, 6496, 18009, 20173, 6498, 18009, 20173, 6500, 18009, 20173, 6502, 18009, 20173, 6504, 18009, 20173, 6506, 18009, 20173, 6508, 18009, 20173, 6510, 18009, 20173, 6512, 18009, 20173, 6514, 18009, 20173, 6516, 18009, 20173, 6518, 18009, 20173, 6520, 18009, 20173, 6522, 18009, 20173, 6524, 18009, 20173, 6526, 18009, 20173, 6528, 18009, 20173, 6530, 18009, 20173, 6532, 18009, 20173, 6534, 18009, 20173, 6536, 18009, 20173, 6538, 18009, 20173, 6540, 18009, 20173, 6542, 18009, 20173, 6544, 18009, 20173, 6546, 18009, 20173, 6548, 18009, 20173, 6550, 18009, 20173, 6552, 18009, 20173, 6554, 18009, 20173, 6610, 18009, 20173, 6612, 18009, 20173, 6614, 18009, 20173, 6616, 18009, 20173, 6618, 18009, 20173, 6620, 18009, 20173, 6622, 18009, 20173, 6624, 18009, 20173, 6626, 18009, 20173, 6628, 18009, 20173, 6630, 18009, 20173, 6632, 18009, 20173, 6634, 18009, 20173, 6636, 18009, 20173, 6638, 18009, 20173, 6640, 18009, 20173, 6642, 18009, 20173, 6644, 18009, 20173, 6646, 18009, 20173, 6648, 18009, 20173, 6650, 18009, 20173, 6652, 18009, 20173, 6654, 18009, 20173, 6656, 18009, 20173, 6658, 18009, 20173, 6660, 18009, 20173, 6662, 18009, 20173, 6664, 18009, 20173, 6666, 18009, 20173, 6668, 18009, 20173, 6670, 18009, 20173, 6672, 18009, 20173, 6674, 18009, 20173, 6676, 18009, 20173, 6678, 18009, 20173, 6680, 18009, 20173, 6682, 18009, 20173, 6684, 18009, 20173, 6686, 18009, 20173, 6688, 18009, 20173, 6690, 18009, 20173, 6692, 18009, 20173, 6694, 18009, 20173, 6696, 18009, 20173, 6698, 18009, 20173, 6700, 18009, 20173, 6702, 18009, 20173, 6704, 18009, 20173, 6706, 18009, 20173, 6708, 18009, 20173, 6710, 18009, 20173, 6712, 18009, 20173, 6714, 18009, 20173, 6810, 18009, 20173, 6812, 18009, 20173, 6814, 18009, 20173, 6816, 18009, 20173, 6818, 18009, 20173, 6820, 18009, 20173, 6822, 18009, 20173, 6824, 18009, 20173, 6826, 18009, 20173, 6828, 18009, 20173, 6830, 18009, 20173, 6832, 18009, 20173, 6834, 18009, 20173, 6836, 18009, 20173, 6838, 18009, 20173, 6840, 18009, 20173, 6842, 18009, 20173, 6844, 18009, 20173, 6846, 18009, 20173, 6848, 18009, 20173, 6850, 18009, 20173, 6852, 18009, 20173, 6854, 18009, 20173, 6856, 18009, 20173, 6858, 18009, 20173, 6860, 18009, 20173, 6862, 18009, 20173, 6864, 18009, 20173, 6866, 18009, 20173, 6868, 18009, 20173, 6870, 18009, 20173, 6872, 18009, 20173, 6874, 18009, 20173, 6876, 18009, 20173, 6878, 18009, 20173, 6880, 18009, 20173, 6882, 18009, 20173, 6884, 18009, 20173, 6886, 18009, 20173, 6888, 18009, 20173, 6890, 18009, 20173, 6892, 18009, 20173, 6894, 18009, 20173, 6896, 18009, 20173, 6898, 18009, 20173, 6900, 18009, 20173, 6902, 18009, 20173, 6904, 18009, 20173, 6906, 18009, 20173, 6908, 18009, 20173, 6910, 18009, 20173, 6912, 18009, 20173, 6914, 18009, 20173, 6916, 18009, 20173, 7098, 18009, 20173, 7100, 18009, 20173, 7102, 18009, 20173, 7104, 18009, 20173, 7106, 18009, 20173, 7108, 18009, 20173, 7110, 18009, 20173, 7112, 18009, 20173, 7382, 18009, 20173, 7384, 18009, 20173, 7386, 18009, 20173, 7388, 18009, 20173, 7390, 18009, 20173, 7392, 18009, 20173, 7394, 18009, 20173, 7396, 18009, 20173, 7398, 18009, 20173, 7400, 18009, 20173, 7402, 18009, 20173, 7404, 18009, 20173, 7406, 18009, 20173, 7408, 18009, 20173, 7410, 18009, 20173, 7542, 18009, 20173, 7544, 18009, 20173, 7546, 18009, 20173, 7548, 18009, 20173, 7550, 18009, 20173, 7552, 18009, 20173, 7554, 18009, 20173, 7556, 18009, 20173, 7756, 18009, 20173, 7758, 18009, 20173, 7760, 18009, 20173, 7762, 18009, 20173, 7764, 18009, 20173, 7766, 18009, 20173, 7768, 18009, 20173, 7770, 18009, 20173, 7914, 18009, 20173, 7916, 18009, 20173, 7918, 18009, 20173, 7920, 18009, 20173, 7922, 18009, 20173, 7924, 18009, 20173, 7926, 18009, 20173, 7928, 18009, 20173, 7930, 18009, 20173, 7932, 18009, 20173, 7934, 18009, 20173, 7936, 18009, 20173, 7938, 18009, 20173, 7940, 18009, 20173, 7942, 18009, 20173, 7944, 18009, 20173, 7946, 18009, 20173, 7948, 18009, 20173, 7950, 18009, 20173, 7952, 18009, 20173, 7954, 18009, 20173, 7956, 18009, 20173, 7958, 18009, 20173, 7960, 18009, 20173, 7962, 18009, 20173, 7964, 18009, 20173, 7966, 18009, 20173, 7968, 18009, 20173, 7970, 18009, 20173, 7972, 18009, 20173, 7974, 18009, 20173, 7976, 18009, 20173, 7978, 18009, 20173, 7980, 18009, 20173, 7982, 18009, 20173, 7984, 18009, 20173, 7986, 18009, 20173, 7988, 18009, 20173, 7990, 18009, 20173, 7992, 18009, 20173, 7994, 18009, 20173, 7996, 18009, 20173, 7998, 18009, 20173, 8000, 18009, 20173, 8502, 18009, 20173, 8504, 18009, 20173, 8506, 18009, 20173, 8508, 18009, 20173, 8510, 18009, 20173, 8512, 18009, 20173, 8514, 18009, 20173, 8516, 18009, 20173, 8518, 18009, 20173, 8520, 18009, 20173, 8522, 18009, 20173, 8524, 18009, 20173, 8526, 18009, 20173, 8528, 18009, 20173, 8530, 18009, 20173, 8532, 18009, 20173, 8534, 18009, 20173, 8536, 18009, 20173, 8538, 18009, 20173, 8540, 18009, 20173, 8542, 18009, 20173, 8544, 18009, 20173, 8546, 18009, 20173, 8548, 18009, 20173, 8550, 18009, 20173, 8552, 18009, 20173, 8554, 18009, 20173, 8556, 18009, 20173, 8558, 18009, 20173, 8560, 18009, 20173, 8562, 18009, 20173, 8564, 18009, 20173, 8566, 18009, 20173, 8568, 18009, 20173, 8570, 18009, 20173, 8572, 18009, 20173, 8574, 18009, 20173, 8576, 18009, 20173, 8578, 18009, 20173, 8580, 18009, 20173, 8582, 18009, 20173, 8584, 18009, 20173, 9052, 18009, 20173, 9054, 18009, 20173, 9056, 18009, 20173, 9058, 18009, 20173, 9060, 18009, 20173, 9062, 18009, 20173, 9064, 18009, 20173, 9066, 18009, 20173, 9068, 18009, 20173, 9070, 18009, 20173, 9072, 18009, 20173, 9074, 18009, 20173, 9076, 18009, 20173, 9078, 18009, 20173, 9080, 18009, 20173, 9082, 18009, 20173, 9084, 18009, 20173, 9086, 18009, 20173, 9088, 18009, 20173, 9090, 18009, 20173, 9092, 18009, 20173, 9094, 18009, 20173, 9096, 18009, 20173, 9098, 18009, 20173, 9100, 18009, 20173, 9102, 18009, 20173, 9104, 18009, 20173, 9106, 18009, 20173, 9108, 18009, 20173, 9110, 18009, 20173, 9112, 18009, 20173, 9114, 18009, 20173, 9116, 18009, 20173, 9118, 18009, 20173, 9120, 18009, 20173, 9122, 18009, 20173, 9124, 18009, 20173, 9126, 18009, 20173, 9128, 18009, 20173, 9130, 18009, 20173, 9132, 18009, 20173, 9134, 18009, 20173, 9136, 18009, 20173, 9138, 18009, 20173, 9140, 18009, 20173, 9142, 18009, 20173, 9144, 18009, 20173, 9146, 18009, 20173, 9148, 18009, 20173, 9150, 18009, 20173, 9152, 18009, 20173, 9178, 18009, 20173, 9180, 18009, 20173, 9182, 18009, 20173, 9184, 18009, 20173, 9186, 18009, 20173, 9188, 18009, 20173, 9190, 18009, 20173, 9192, 18009, 20173, 9194, 18009, 20173, 9196, 18009, 20173, 9198, 18009, 20173, 9330, 18009, 20173, 9332, 18009, 20173, 9334, 18009, 20173, 9336, 18009, 20173, 9338, 18009, 20173, 9340, 18009, 20173, 9342, 18009, 20173, 9396, 18009, 20173, 9398, 18009, 20173, 9400, 18009, 20173, 9402, 18009, 20173, 9404, 18009, 20173, 9406, 18009, 20173, 9408, 18009, 20173, 9410, 18009, 20173, 9412, 18009, 20173, 9414, 18009, 20173, 9416, 18009, 20173, 9418, 18009, 20173, 9420, 18009, 20173, 9422, 18009, 20173, 9424, 18009, 20173, 9426, 18009, 20173, 9428, 18009, 20173, 9430, 18009, 20173, 9432, 18009, 20173, 9434, 18009, 20173, 9436, 18009, 20173, 9438, 18009, 20173, 9440, 18009, 20173, 9442, 18009, 20173, 9444, 18009, 20173, 9446, 18009, 20173, 9448, 18009, 20173, 9450, 18009, 20173, 9452, 18009, 20173, 9586, 18009, 20173, 9588, 18009, 20173, 9590, 18009, 20173, 9592, 18009, 20173, 9594, 18009, 20173, 9596, 18009, 20173, 9598, 18009, 20173, 9600, 18009, 20173, 9602, 18009, 20173, 9604, 18009, 20173, 9606, 18009, 20173, 9608, 18009, 20173, 9610, 18009, 20173, 9612, 18009, 20173, 9614, 18009, 20173, 9616, 18009, 20173, 9618, 18009, 20173, 9620, 18009, 20173, 9622, 18009, 20173, 9624, 18009, 20173, 9626, 18009, 20173, 9628, 18009, 20173, 9630, 18009, 20173, 9632, 18009, 20173, 9634, 18009, 20173, 9636, 18009, 20173, 9638, 18009, 20173, 9640, 18009, 20173, 9642, 18009, 20173, 9644, 18009, 20173, 9646, 18009, 20173, 9648, 18009, 20173, 9650, 18009, 20173, 9652, 18009, 20173, 9654, 18009, 20173, 9656, 18009, 20173, 9658, 18009, 20173, 9660, 18009, 20173, 9662, 18009, 20173, 9664, 18009, 20173, 9666, 18009, 20173, 9668, 18009, 20173, 9670, 18009, 20173, 9672, 18009, 20173, 9674, 18009, 20173, 9676, 18009, 20173, 10002, 18009, 20173, 10004, 18009, 20173, 10006, 18009, 20173, 10008, 18009, 20173, 10010, 18009, 20173, 10012, 18009, 20173, 10014, 18009, 20173, 10016, 18009, 20173, 10018, 18009, 20173, 10020, 18009, 20173, 10022, 18009, 20173, 10024, 18009, 20173, 10026, 18009, 20173, 10028, 18009, 20173, 10030, 18009, 20173, 10032, 18009, 20173, 10034, 18009, 20173, 10036, 18009, 20173, 10038, 18009, 20173, 10040, 18009, 20173, 10042, 18009, 20173, 10044, 18009, 20173, 10046, 18009, 20173, 10048, 18009, 20173, 10050, 18009, 20173, 10052, 18009, 20173, 10054, 18009, 20173, 10056, 18009, 20173, 10058, 18009, 20173, 10060, 18009, 20173, 10062, 18009, 20173, 10064, 18009, 20173, 10066, 18009, 20173, 10068, 18009, 20173, 10070, 18009, 20173, 10072, 18009, 20173, 10326, 18009, 20173, 10328, 18009, 20173, 10330, 18009, 20173, 10332, 18009, 20173, 10334, 18009, 20173, 10336, 18009, 20173, 10338, 18009, 20173, 10340, 18009, 20173, 10342, 18009, 20173, 10344, 18009, 20173, 10346, 18009, 20173, 10348, 18009, 20173, 10350, 18009, 20173, 10352, 18009, 20173, 10354, 18009, 20173, 10356, 18009, 20173, 10358, 18009, 20173, 10360, 18009, 20173, 10362, 18009, 20173, 10364, 18009, 20173, 10366, 18009, 20173, 10368, 18009, 20173, 10370, 18009, 20173, 10372, 18009, 20173, 10374, 18009, 20173, 10376, 18009, 20173, 10378, 18009, 20173, 10380, 18009, 20173, 10382, 18009, 20173, 10384, 18009, 20173, 10386, 18009, 20173, 10388, 18009, 20173, 10390, 18009, 20173, 10392, 18009, 20173, 10394, 18009, 20173, 10396, 18009, 20173, 10398, 18009, 20173, 10400, 18009, 20173, 10402, 18009, 20173, 10404, 18009, 20173, 10406, 18009, 20173, 10408, 18009, 20173, 10444, 18009, 20173, 10446, 18009, 20173, 10448, 18009, 20173, 10450, 18009, 20173, 10452, 18009, 20173, 10454, 18009, 20173, 10456, 18009, 20173, 10458, 18009, 20173, 10460, 18009, 20173, 10462, 18009, 20173, 10464, 18009, 20173, 10466, 18009, 20173, 10468, 18009, 20173, 10470, 18009, 20173, 10472, 18009, 20173, 10474, 18009, 20173, 10476, 18009, 20173, 10478, 18009, 20173, 10480, 18009, 20173, 10482, 18009, 20173, 10484, 18009, 20173, 10486, 18009, 20173, 10488, 18009, 20173, 10490, 18009, 20173, 10492, 18009, 20173, 10494, 18009, 20173, 10496, 18009, 20173, 10498, 18009, 20173, 10500, 18009, 20173, 10502, 18009, 20173, 10504, 18009, 20173, 10506, 18009, 20173, 10508, 18009, 20173, 10510, 18009, 20173, 10512, 18009, 20173, 10514, 18009, 20173, 10516, 18009, 20173, 10518, 18009, 20173, 10520, 18009, 20173, 10522, 18009, 20173, 10564, 18009, 20173, 10566, 18009, 20173, 10568, 18009, 20173, 10570, 18009, 20173, 10572, 18009, 20173, 10574, 18009, 20173, 10576, 18009, 20173, 10578, 18009, 20173, 10580, 18009, 20173, 10582, 18009, 20173, 10584, 18009, 20173, 10586, 18009, 20173, 10588, 18009, 20173, 10590, 18009, 20173, 10592, 18009, 20173, 10594, 18009, 20173, 10596, 18009, 20173, 10598, 18009, 20173, 10600, 18009, 20173, 10602, 18009, 20173, 10604, 18009, 20173, 10606, 18009, 20173, 10608, 18009, 20173, 10610, 18009, 20173, 10612, 18009, 20173, 10664, 18009, 20173, 10666, 18009, 20173, 10668, 18009, 20173, 10670, 18009, 20173, 10672, 18009, 20173, 10674, 18009, 20173, 10676, 18009, 20173, 10678, 18009, 20173, 10710, 18009, 20173, 10712, 18009, 20173, 10714, 18009, 20173, 10716, 18009, 20173, 10718, 18009, 20173, 10720, 18009, 20173, 10722, 18009, 20173, 10724, 18009, 20173, 10856, 18009, 20173, 10858, 18009, 20173, 10860, 18009, 20173, 10862, 18009, 20173, 10864, 18009, 20173, 10866, 18009, 20173, 10868, 18009, 20173, 10870, 18009, 20173, 10872, 18009, 20173, 10874, 18009, 20173, 10876, 18009, 20173, 10878, 18009, 20173, 10880, 18009, 20173, 10882, 18009, 20173, 10884, 18009, 20173, 10886, 18009, 20173, 11030, 18009, 20173, 11032, 18009, 20173, 11034, 18009, 20173, 11038, 18009, 20173, 11040, 18009, 20173, 11046, 18009, 20173, 11050, 18009, 20173, 11054, 18009, 20173, 11056, 18009, 20173, 11058, 18009, 20173, 11178, 18009, 20173, 11180, 18009, 20173, 11182, 18009, 20173, 11184, 18009, 20173, 11186, 18009, 20173, 11188, 18009, 20173, 11190, 18009, 20173, 11192, 18009, 20173, 11194, 18009, 20173, 11196, 18009, 20173, 11198, 18009, 20173, 11200, 18009, 20173, 11202, 18009, 20173, 11204, 18009, 20173, 11206, 18009, 20173, 11208, 18009, 20173, 11210, 18009, 20173, 11212, 18009, 20173, 11214, 18009, 20173, 11216, 18009, 20173, 11218, 18009, 20173, 11220, 18009, 20173, 11222, 18009, 20173, 11224, 18009, 20173, 11226, 18009, 20173, 11228, 18009, 20173, 11230, 18009, 20173, 11232, 18009, 20173, 11234, 18009, 20173, 11236, 18009, 20173, 11238, 18009, 20173, 11240, 18009, 20173, 11492, 18009, 20173, 11628, 18009, 20173, 11630, 18009, 20173, 11632, 18009, 20173, 11634, 18009, 20173, 11784, 18009, 20173, 11786, 18009, 20173, 11788, 18009, 20173, 11790, 18009, 20173, 11792, 18009, 20173, 11794, 18009, 20173, 11796, 18009, 20173, 11798, 18009, 20173, 11800, 18009, 20173, 11802, 18009, 20173, 11804, 18009, 20173, 11806, 18009, 20173, 11808, 18009, 20173, 11810, 18009, 20173, 11812, 18009, 20173, 11814, 18009, 20173, 11816, 18009, 20173, 11818, 18009, 20173, 11820, 18009, 20173, 11822, 18009, 20173, 11824, 18009, 20173, 11826, 18009, 20173, 11828, 18009, 20173, 11830, 18009, 20173, 11832, 18009, 20173, 11950, 18009, 20173, 11952, 18009, 20173, 11954, 18009, 20173, 11956, 18009, 20173, 11958, 18009, 20173, 11960, 18009, 20173, 11962, 18009, 20173, 12036, 18009, 20173, 12038, 18009, 20173, 12040, 18009, 20173, 12042, 18009, 20173, 12044, 18009, 20173, 12046, 18009, 20173, 12048, 18009, 20173, 12050, 18009, 20173, 12052, 18009, 20173, 12054, 18009, 20173, 12056, 18009, 20173, 12058, 18009, 20173, 12124, 18009, 20173, 12126, 18009, 20173, 12128, 18009, 20173, 12130, 18009, 20173, 12132, 18009, 20173, 12134, 18009, 20173, 12136, 18009, 20173, 12138, 18009, 20173, 12140, 18009, 20173, 12142, 18009, 20173, 12248, 18009, 20173, 12362, 18009, 20173, 12364, 18009, 20173, 12366, 18009, 20173, 12368, 18009, 20173, 12508, 18009, 20173, 12510, 18009, 20173, 12598, 18009, 20173, 12600, 18009, 20173, 12602, 18009, 20173, 12604, 18009, 20173, 12606, 18009, 20173, 12608, 18009, 20173, 12610, 18009, 20173, 12612, 18009, 20173, 12614, 18009, 20173, 12616, 18009, 20173, 12618, 18009, 20173, 12620, 18009, 20173, 12622, 18009, 20173, 12624, 18009, 20173, 12626, 18009, 20173, 12628, 18009, 20173, 12630, 18009, 20173, 12632, 18009, 20173, 12634, 18009, 20173, 12636, 18009, 20173, 12638, 18009, 20173, 12640, 18009, 20173, 12788, 18009, 20173, 12790, 18009, 20173, 12792, 18009, 20173, 12794, 18009, 20173, 12796, 18009, 20173, 12798, 18009, 20173, 12800, 18009, 20173, 12922, 18009, 20173, 12924, 18009, 20173, 12926, 18009, 20173, 12928, 18009, 20173, 12930, 18009, 20173, 12932, 18009, 20173, 12934, 18009, 20173, 12936, 18009, 20173, 12938, 18009, 20173, 12940, 18009, 20173, 12942, 18009, 20173, 12944, 18009, 20173, 12946, 18009, 20173, 12948, 18009, 20173, 12950, 18009, 20173, 12952, 18009, 20173, 12954, 18009, 20173, 12956, 18009, 20173, 12958, 18009, 20173, 12960, 18009, 20173, 13006, 18009, 20173, 13008, 18009, 20173, 13010, 18009, 20173, 13012, 18009, 20173, 13014, 18009, 20173, 13016, 18009, 20173, 13018, 18009, 20173, 13020, 18009, 20173, 13022, 18009, 20173, 13024, 18009, 20173, 13026, 18009, 20173, 13028, 18009, 20173, 13030, 18009, 20173, 13032, 18009, 20173, 13034, 18009, 20173, 13036, 18009, 20173, 13038, 18009, 20173, 13040, 18009, 20173, 13042, 18009, 20173, 13044, 18009, 20173, 13046, 18009, 20173, 13048, 18009, 20173, 13084, 18009, 20173, 13086, 18009, 20173, 13088, 18009, 20173, 13090, 18009, 20173, 13092, 18009, 20173, 13094, 18009, 20173, 13096, 18009, 20173, 13098, 18009, 20173, 13100, 18009, 20173, 13102, 18009, 20173, 13104, 18009, 20173, 13106, 18009, 20173, 13108, 18009, 20173, 13110, 18009, 20173, 13112, 18009, 20173, 13114, 18009, 20173, 13116, 18009, 20173, 13118, 18009, 20173, 13120, 18009, 20173, 13122, 18009, 20173, 13124, 18009, 20173, 13126, 18009, 20173, 13128, 18009, 20173, 13130, 18009, 20173, 13166, 18009, 20173, 13168, 18009, 20173, 13296, 18009, 20173, 13298, 18009, 20173, 13300, 18009, 20173, 13302, 18009, 20173, 13304, 18009, 20173, 13384, 18009, 20173, 13386, 18009, 20173, 13388, 18009, 20173, 13390, 18009, 20173, 13392, 18009, 20173, 13394, 18009, 20173, 13396, 18009, 20173, 13398, 18009, 20173, 13666, 18009, 20173, 13668, 18009, 20173, 13670, 18009, 20173, 13672, 18009, 20173, 13674, 18009, 20173, 13676, 18009, 20173, 13678, 18009, 20173, 13680, 18009, 20173, 13864, 18009, 20173, 13866, 18009, 20173, 13868, 18009, 20173, 13870, 18009, 20173, 13872, 18009, 20173, 13898, 18009, 20173, 13900, 18009, 20173, 13902, 18009, 20173, 13904, 18009, 20173, 13906, 18009, 20173, 13908, 18009, 20173, 13910, 18009, 20173, 13912, 18009, 20173, 13914, 18009, 20173, 13916, 18009, 20173, 13918, 18009, 20173, 13920, 18009, 20173, 13922, 18009, 20173, 13924, 18009, 20173, 13926, 18009, 20173, 13928, 18009, 20173, 13930, 18009, 20173, 13932, 18009, 20173, 13934, 18009, 20173, 13936, 18009, 20173, 13938, 18009, 20173, 13940, 18009, 20173, 13942, 18009, 20173, 13944, 18009, 20173, 13946, 18009, 20173, 13948, 18009, 20173, 13950, 18009, 20173, 13952, 18009, 20173, 13954, 18009, 20173, 13956, 18009, 20173, 13958, 18009, 20173, 13960, 18009, 20173, 13962, 18009, 20173, 13964, 18009, 20173, 13966, 18009, 20173, 13968, 18009, 20173, 13970, 18009, 20173, 14006, 18009, 20173, 14008, 18009, 20173, 14010, 18009, 20173, 14012, 18009, 20173, 14014, 18009, 20173, 14016, 18009, 20173, 14018, 18009, 20173, 14080, 18009, 20173, 14082, 18009, 20173, 14084, 18009, 20173, 14086, 18009, 20173, 14094, 18009, 20173, 14142, 18009, 20173, 14144, 18009, 20173, 14146, 18009, 20173, 14148, 18009, 20173, 14150, 18009, 20173, 14152, 18009, 20173, 14154, 18009, 20173, 14156, 18009, 20173, 14158, 18009, 20173, 14160, 18009, 20173, 14162, 18009, 20173, 14164, 18009, 20173, 14166, 18009, 20173, 14168, 18009, 20173, 14170, 18009, 20173, 14172, 18009, 20173, 14174, 18009, 20173, 14176, 18009, 20173, 14178, 18009, 20173, 14180, 18009, 20173, 14182, 18009, 20173, 14184, 18009, 20173, 14186, 18009, 20173, 14188, 18009, 20173, 14190, 18009, 20173, 14244, 18009, 20173, 14246, 18009, 20173, 15202, 18009, 20173, 15204, 18009, 20173, 15222, 18009, 20173, 15224, 18009, 20173, 15226, 18009, 20173, 15228, 18013, 9280, 18013, 11476, 18013, 12563, 5874, 18013, 13796, 18014, 18021, 15672, 18026, 18027, 10641, 19215, 11477, 11392, 18027, 10641, 19414, 18035, 6793, 9956, 18035, 11756, 18035, 11762, 18035, 11905, 2610, 18035, 11905, 3076, 18035, 11905, 3356, 18035, 11905, 6756, 18035, 11905, 6778, 18035, 11905, 8780, 18035, 11905, 11978, 18035, 11905, 13450, 18035, 11905, 13736, 18035, 13791, 8321, 7726, 18035, 13791, 8321, 11892, 18035, 13791, 8321, 11902, 18035, 13791, 8321, 12278, 18035, 13791, 8321, 12454, 18035, 13791, 8321, 13507, 15444, 18035, 13791, 8321, 14124, 18035, 13791, 8321, 14474, 18035, 13791, 8321, 15444, 18035, 13791, 8321, 20598, 18035, 15233, 3232, 18035, 15233, 3233, 18744, 18035, 15233, 12080, 18035, 15233, 12108, 18035, 15233, 13538, 18035, 15233, 14636, 18035, 15233, 15194, 18035, 15233, 15736, 18035, 15233, 15820, 18035, 15233, 16502, 18035, 15233, 17190, 18035, 17063, 11756, 18035, 17179, 8320, 18035, 18511, 8320, 18035, 18697, 106, 18035, 18697, 110, 18035, 18697, 114, 18035, 18697, 116, 18035, 18697, 120, 18035, 18697, 124, 18035, 18697, 130, 18035, 18697, 134, 18035, 18697, 140, 18035, 18697, 142, 18035, 18697, 148, 18035, 18697, 154, 18035, 18697, 158, 18035, 18697, 166, 18035, 18697, 168, 18035, 18697, 224, 18035, 18697, 226, 18035, 18697, 230, 18035, 18697, 236, 18035, 18697, 238, 18035, 18697, 244, 18035, 18697, 248, 18035, 18697, 254, 18035, 18697, 258, 18035, 18697, 260, 18035, 18697, 266, 18035, 18697, 270, 18035, 18697, 274, 18035, 18697, 282, 18035, 18697, 286, 18035, 18697, 336, 18035, 18697, 338, 18035, 18697, 340, 18035, 18697, 342, 18035, 18697, 344, 18035, 18697, 350, 18035, 18697, 354, 18035, 18697, 358, 18035, 18697, 366, 18035, 18697, 370, 18035, 18697, 384, 18035, 18697, 388, 18035, 18697, 392, 18035, 18697, 402, 18035, 18697, 406, 18035, 18697, 416, 18035, 18697, 424, 18035, 18697, 430, 18035, 18697, 436, 18035, 18697, 440, 18035, 18697, 448, 18035, 18697, 452, 18035, 18697, 460, 18035, 18697, 468, 18035, 18697, 472, 18035, 18697, 522, 18035, 18697, 528, 18035, 18697, 536, 18035, 18697, 540, 18035, 18697, 546, 18035, 18697, 556, 18035, 18697, 558, 18035, 18697, 560, 18035, 18697, 564, 18035, 18697, 568, 18035, 18697, 572, 18035, 18697, 574, 18035, 18697, 578, 18035, 18697, 580, 18035, 18697, 584, 18035, 18697, 588, 18035, 18697, 592, 18035, 18697, 598, 18035, 18697, 602, 18035, 18697, 612, 18035, 18697, 622, 18035, 18697, 626, 18035, 18697, 630, 18035, 18697, 634, 18035, 18697, 642, 18035, 18697, 680, 18035, 18697, 682, 18035, 18697, 684, 18035, 18697, 686, 18035, 18697, 690, 18035, 18697, 694, 18035, 18697, 700, 18035, 18697, 706, 18035, 18697, 710, 18035, 18697, 712, 18035, 18697, 718, 18035, 18697, 720, 18035, 18697, 724, 18035, 18697, 726, 18035, 18697, 728, 18035, 18697, 734, 18035, 18697, 736, 18035, 18697, 738, 18035, 18697, 742, 18035, 18697, 746, 18035, 18697, 752, 18035, 18697, 754, 18035, 18697, 758, 18035, 18697, 760, 18035, 18697, 762, 18035, 18697, 882, 18035, 18697, 904, 18035, 18697, 906, 18035, 18697, 908, 18035, 18697, 910, 18035, 18697, 912, 18035, 18697, 918, 18035, 18697, 956, 18035, 18697, 990, 18035, 18697, 992, 18035, 18697, 994, 18035, 18697, 1006, 18035, 18697, 1024, 18035, 18697, 1026, 18035, 18697, 1028, 18035, 18697, 1030, 18035, 18697, 1032, 18035, 18697, 1034, 18035, 18697, 1044, 18035, 18697, 1046, 18035, 18697, 1048, 18035, 18697, 1050, 18035, 18697, 1052, 18035, 18697, 1074, 18035, 18697, 1100, 18035, 18697, 1118, 18035, 18697, 1142, 18035, 18697, 1144, 18035, 18697, 1146, 18035, 18697, 1148, 18035, 18697, 1150, 18035, 18697, 1152, 18035, 18697, 1204, 18035, 18697, 1246, 18035, 18697, 1256, 18035, 18697, 1258, 18035, 18697, 1260, 18035, 18697, 1262, 18035, 18697, 1344, 18035, 18697, 1364, 18035, 18697, 1414, 18035, 18697, 1416, 18035, 18697, 1418, 18035, 18697, 1420, 18035, 18697, 1430, 18035, 18697, 1468, 18035, 18697, 1482, 18035, 18697, 1484, 18035, 18697, 1486, 18035, 18697, 1488, 18035, 18697, 1490, 18035, 18697, 1522, 18035, 18697, 1560, 18035, 18697, 1562, 18035, 18697, 1564, 18035, 18697, 1568, 18035, 18697, 1570, 18035, 18697, 1572, 18035, 18697, 1574, 18035, 18697, 1576, 18035, 18697, 1578, 18035, 18697, 1606, 18035, 18697, 1620, 18035, 18697, 1622, 18035, 18697, 1624, 18035, 18697, 1626, 18035, 18697, 1628, 18035, 18697, 1670, 18035, 18697, 1780, 18035, 18697, 1788, 18035, 18697, 1824, 18035, 18697, 1848, 18035, 18697, 1860, 18035, 18697, 1896, 18035, 18697, 1964, 18035, 18697, 2032, 18035, 18697, 2036, 18035, 18697, 2038, 18035, 18697, 2046, 18035, 18697, 2048, 18035, 18697, 2050, 18035, 18697, 2052, 18035, 18697, 2054, 18035, 18697, 2056, 18035, 18697, 2058, 18035, 18697, 2060, 18035, 18697, 2062, 18035, 18697, 2064, 18035, 18697, 2066, 18035, 18697, 2104, 18035, 18697, 2158, 18035, 18697, 2212, 18035, 18697, 2234, 18035, 18697, 2278, 18035, 18697, 2324, 18035, 18697, 2366, 18035, 18697, 2368, 18035, 18697, 2370, 18035, 18697, 2374, 18035, 18697, 2386, 18035, 18697, 2430, 18035, 18697, 2500, 18035, 18697, 2548, 18035, 18697, 2556, 18035, 18697, 2560, 18035, 18697, 2562, 18035, 18697, 2564, 18035, 18697, 2566, 18035, 18697, 2636, 18035, 18697, 2664, 18035, 18697, 2676, 18035, 18697, 2678, 18035, 18697, 2680, 18035, 18697, 2682, 18035, 18697, 2684, 18035, 18697, 2702, 18035, 18697, 2746, 18035, 18697, 2748, 18035, 18697, 2750, 18035, 18697, 2762, 18035, 18697, 2776, 18035, 18697, 2780, 18035, 18697, 2782, 18035, 18697, 2784, 18035, 18697, 2786, 18035, 18697, 2788, 18035, 18697, 2802, 18035, 18697, 2838, 18035, 18697, 2840, 18035, 18697, 2842, 18035, 18697, 2844, 18035, 18697, 2846, 18035, 18697, 2848, 18035, 18697, 2850, 18035, 18697, 2858, 18035, 18697, 2866, 18035, 18697, 2898, 18035, 18697, 2938, 18035, 18697, 2986, 18035, 18697, 2994, 18035, 18697, 3008, 18035, 18697, 3036, 18035, 18697, 3048, 18035, 18697, 3050, 18035, 18697, 3052, 18035, 18697, 3054, 18035, 18697, 3056, 18035, 18697, 3086, 18035, 18697, 3114, 18035, 18697, 3116, 18035, 18697, 3118, 18035, 18697, 3120, 18035, 18697, 3122, 18035, 18697, 3150, 18035, 18697, 3172, 18035, 18697, 3174, 18035, 18697, 3176, 18035, 18697, 3178, 18035, 18697, 3180, 18035, 18697, 3186, 18035, 18697, 3226, 18035, 18697, 3242, 18035, 18697, 3244, 18035, 18697, 3246, 18035, 18697, 3248, 18035, 18697, 3250, 18035, 18697, 3286, 18035, 18697, 3308, 18035, 18697, 3310, 18035, 18697, 3312, 18035, 18697, 3314, 18035, 18697, 3316, 18035, 18697, 3350, 18035, 18697, 3368, 18035, 18697, 3370, 18035, 18697, 3372, 18035, 18697, 3374, 18035, 18697, 3376, 18035, 18697, 3438, 18035, 18697, 3456, 18035, 18697, 3506, 18035, 18697, 3518, 18035, 18697, 3540, 18035, 18697, 3556, 18035, 18697, 3590, 18035, 18697, 3596, 18035, 18697, 3608, 18035, 18697, 3624, 18035, 18697, 3626, 18035, 18697, 3628, 18035, 18697, 3630, 18035, 18697, 3632, 18035, 18697, 3634, 18035, 18697, 3636, 18035, 18697, 3644, 18035, 18697, 3648, 18035, 18697, 3694, 18035, 18697, 3724, 18035, 18697, 3786, 18035, 18697, 3804, 18035, 18697, 3812, 18035, 18697, 3814, 18035, 18697, 3816, 18035, 18697, 3818, 18035, 18697, 3820, 18035, 18697, 3842, 18035, 18697, 3870, 18035, 18697, 3882, 18035, 18697, 3884, 18035, 18697, 3886, 18035, 18697, 3888, 18035, 18697, 3890, 18035, 18697, 5750, 18035, 18697, 5758, 18035, 18697, 5894, 18035, 18697, 5984, 18035, 18697, 5986, 18035, 18697, 5988, 18035, 18697, 5990, 18035, 18697, 5992, 18035, 18697, 5994, 18035, 18697, 5996, 18035, 18697, 6006, 18035, 18697, 6024, 18035, 18697, 6042, 18035, 18697, 6062, 18035, 18697, 6296, 18035, 18697, 6308, 18035, 18697, 6316, 18035, 18697, 6318, 18035, 18697, 6320, 18035, 18697, 6322, 18035, 18697, 6332, 18035, 18697, 6350, 18035, 18697, 6464, 18035, 18697, 6468, 18035, 18697, 6808, 18035, 18697, 6962, 18035, 18697, 6970, 18035, 18697, 7000, 18035, 18697, 7002, 18035, 18697, 7004, 18035, 18697, 7082, 18035, 18697, 7084, 18035, 18697, 7086, 18035, 18697, 7092, 18035, 18697, 7160, 18035, 18697, 7162, 18035, 18697, 7164, 18035, 18697, 7732, 18035, 18697, 7736, 18035, 18697, 7742, 18035, 18697, 7744, 18035, 18697, 7746, 18035, 18697, 7748, 18035, 18697, 7750, 18035, 18697, 7752, 18035, 18697, 7754, 18035, 18697, 8496, 18035, 18697, 8942, 18035, 18697, 8952, 18035, 18697, 8978, 18035, 18697, 9002, 18035, 18697, 9236, 18035, 18697, 9246, 18035, 18697, 9248, 18035, 18697, 9252, 18035, 18697, 9320, 18035, 18697, 9352, 18035, 18697, 9356, 18035, 18697, 9358, 18035, 18697, 9360, 18035, 18697, 9362, 18035, 18697, 9386, 18035, 18697, 9388, 18035, 18697, 9390, 18035, 18697, 9392, 18035, 18697, 9740, 18035, 18697, 9756, 18035, 18697, 9784, 18035, 18697, 9822, 18035, 18697, 9902, 18035, 18697, 9910, 18035, 18697, 9994, 18035, 18697, 9996, 18035, 18697, 9998, 18035, 18697, 10134, 18035, 18697, 10150, 18035, 18697, 10164, 18035, 18697, 10174, 18035, 18697, 10234, 18035, 18697, 10238, 18035, 18697, 10252, 18035, 18697, 10266, 18035, 18697, 10268, 18035, 18697, 10270, 18035, 18697, 10272, 18035, 18697, 10314, 18035, 18697, 10316, 18035, 18697, 10320, 18035, 18697, 10698, 18035, 18697, 10700, 18035, 18697, 10702, 18035, 18697, 10704, 18035, 18697, 10904, 18035, 18697, 10914, 18035, 18697, 10944, 18035, 18697, 10978, 18035, 18697, 10986, 18035, 18697, 11660, 18035, 18697, 11662, 18035, 18697, 11664, 18035, 18697, 11666, 18035, 18697, 11668, 18035, 18697, 11670, 18035, 18697, 11672, 18035, 18697, 11870, 18035, 18697, 11872, 18035, 18697, 12186, 18035, 18697, 12188, 18035, 18697, 12504, 18035, 18697, 12506, 18035, 18697, 13280, 18035, 18697, 13282, 18035, 18697, 13834, 18035, 18697, 13836, 18035, 18697, 14448, 18035, 18697, 14450, 18035, 18697, 16449, 0, 18035, 18697, 16449, 8, 18035, 18697, 16449, 16, 18035, 18697, 16449, 28, 18035, 18697, 16449, 40, 18035, 18697, 16449, 58, 18035, 18697, 16449, 184, 18035, 18697, 16449, 478, 18035, 18697, 16449, 694, 18035, 18697, 19613, 990, 18035, 18697, 19613, 1414, 18035, 18697, 19613, 2366, 18035, 18697, 19613, 2746, 18035, 18697, 20321, 0, 18035, 18697, 20321, 8, 18035, 18697, 20321, 16, 18035, 18697, 20321, 28, 18035, 18697, 20321, 40, 18035, 18697, 20321, 58, 18035, 18697, 20321, 184, 18035, 19003, 14003, 14993, 8320, 18035, 19003, 20155, 843, 14003, 14993, 8320, 18035, 19003, 20155, 8320, 18035, 19513, 19618, 18035, 19614, 18035, 19848, 18037, 9297, 15244, 18037, 14444, 18043, 21003, 11905, 2610, 18043, 21003, 11905, 3076, 18043, 21003, 11905, 3356, 18043, 21003, 11905, 6756, 18043, 21003, 11905, 6778, 18043, 21003, 11905, 8780, 18043, 21003, 11905, 10900, 18043, 21003, 11905, 11978, 18043, 21003, 11905, 13450, 18043, 21003, 11905, 13736, 18051, 16939, 19352, 18067, 18620, 18070, 18084, 18089, 13546, 18089, 19479, 2610, 18095, 6719, 10641, 9171, 12764, 18099, 20534, 18109, 13563, 14999, 80, 18109, 13563, 14999, 202, 18109, 13563, 14999, 270, 18109, 13563, 14999, 316, 18109, 13563, 14999, 496, 18109, 13563, 14999, 666, 18109, 13563, 14999, 700, 18109, 13563, 14999, 740, 18109, 13563, 14999, 812, 18109, 13563, 14999, 892, 18109, 13563, 14999, 1012, 18109, 13563, 14999, 1060, 18109, 13563, 14999, 1210, 18109, 13563, 14999, 1446, 18109, 13563, 14999, 1580, 18109, 13563, 14999, 1596, 18109, 13563, 14999, 1630, 18109, 13563, 14999, 1672, 18109, 13563, 14999, 1804, 18109, 13563, 14999, 1878, 18109, 13563, 14999, 2086, 18109, 13563, 14999, 2242, 18109, 13563, 14999, 2402, 18109, 13563, 14999, 2648, 18109, 13563, 14999, 2770, 18109, 13563, 14999, 2872, 18109, 13563, 14999, 3020, 18109, 13563, 14999, 3202, 18109, 13563, 14999, 3210, 18109, 13563, 14999, 3472, 18109, 13563, 14999, 3592, 18109, 13563, 14999, 3806, 18109, 13563, 14999, 6016, 18109, 13563, 14999, 6040, 18109, 13563, 14999, 7010, 18109, 13563, 14999, 7472, 18109, 13563, 14999, 7640, 18109, 13563, 14999, 9244, 18109, 13563, 14999, 9776, 18109, 13563, 14999, 10908, 18109, 14999, 80, 18109, 14999, 202, 18109, 14999, 230, 18109, 14999, 270, 18109, 14999, 316, 18109, 14999, 496, 18109, 14999, 666, 18109, 14999, 700, 18109, 14999, 740, 18109, 14999, 812, 18109, 14999, 826, 18109, 14999, 892, 18109, 14999, 1012, 18109, 14999, 1060, 18109, 14999, 1210, 18109, 14999, 1446, 18109, 14999, 1580, 18109, 14999, 1596, 18109, 14999, 1630, 18109, 14999, 1672, 18109, 14999, 1804, 18109, 14999, 1878, 18109, 14999, 2086, 18109, 14999, 2242, 18109, 14999, 2402, 18109, 14999, 2648, 18109, 14999, 2770, 18109, 14999, 2872, 18109, 14999, 3020, 18109, 14999, 3202, 18109, 14999, 3210, 18109, 14999, 3472, 18109, 14999, 3592, 18109, 14999, 3806, 18109, 14999, 6016, 18109, 14999, 6040, 18109, 14999, 7010, 18109, 14999, 7131, 9854, 18109, 14999, 7472, 18109, 14999, 7640, 18109, 14999, 9244, 18109, 14999, 9776, 18109, 14999, 10908, 18109, 14999, 11984, 18109, 14999, 14971, 9854, 18109, 14999, 15811, 1446, 18109, 16111, 14999, 80, 18109, 16111, 14999, 202, 18109, 16111, 14999, 270, 18109, 16111, 14999, 316, 18109, 16111, 14999, 496, 18109, 16111, 14999, 666, 18109, 16111, 14999, 700, 18109, 16111, 14999, 740, 18109, 16111, 14999, 812, 18109, 16111, 14999, 892, 18109, 16111, 14999, 1012, 18109, 16111, 14999, 1060, 18109, 16111, 14999, 1210, 18109, 16111, 14999, 1446, 18109, 16111, 14999, 1580, 18109, 16111, 14999, 1596, 18109, 16111, 14999, 1630, 18109, 16111, 14999, 1672, 18109, 16111, 14999, 1804, 18109, 16111, 14999, 1878, 18109, 16111, 14999, 2086, 18109, 16111, 14999, 2242, 18109, 16111, 14999, 2402, 18109, 16111, 14999, 2648, 18109, 16111, 14999, 2770, 18109, 16111, 14999, 2872, 18109, 16111, 14999, 3020, 18109, 16111, 14999, 3202, 18109, 16111, 14999, 3210, 18109, 16111, 14999, 3472, 18109, 16111, 14999, 3592, 18109, 16111, 14999, 3806, 18109, 16111, 14999, 6016, 18109, 16111, 14999, 6040, 18109, 16111, 14999, 7010, 18109, 16111, 14999, 7472, 18109, 16111, 14999, 7640, 18109, 16111, 14999, 9244, 18109, 16111, 14999, 9776, 18109, 16111, 14999, 10908, 18109, 19513, 19618, 18115, 1019, 6719, 10641, 17245, 6604, 18115, 6718, 18115, 6719, 10641, 17245, 6604, 18117, 494, 18117, 9855, 13052, 18117, 9855, 15868, 18117, 9855, 17486, 18117, 9855, 17610, 18117, 9855, 17652, 18117, 9855, 20552, 18117, 11905, 2610, 18117, 11905, 3076, 18117, 11905, 3356, 18117, 11905, 6756, 18117, 11905, 6778, 18117, 11905, 8780, 18117, 11905, 10900, 18117, 11905, 11978, 18117, 11905, 13450, 18117, 11905, 13736, 18117, 13379, 9854, 18117, 14003, 9855, 8, 18117, 14003, 9855, 16, 18117, 14003, 9855, 28, 18117, 14003, 9855, 40, 18117, 14003, 9855, 58, 18117, 14003, 9855, 72, 18117, 14003, 9855, 94, 18117, 14003, 9855, 308, 18117, 14003, 9855, 676, 18117, 14003, 9855, 14435, 8, 18117, 14003, 9855, 14435, 28, 18117, 14003, 9855, 17493, 22, 18117, 14003, 9855, 17493, 34, 18117, 14003, 9855, 17493, 396, 18117, 14003, 9855, 17493, 582, 18117, 14003, 14435, 8, 18117, 14003, 14435, 28, 18117, 14999, 0, 18117, 14999, 8, 18117, 14999, 16, 18117, 14999, 28, 18117, 14999, 40, 18117, 14999, 58, 18117, 14999, 72, 18117, 14999, 94, 18117, 14999, 106, 18117, 14999, 124, 18117, 14999, 148, 18117, 14999, 244, 18117, 14999, 266, 18117, 14999, 308, 18117, 14999, 336, 18117, 14999, 350, 18117, 14999, 384, 18117, 14999, 416, 18117, 14999, 448, 18117, 14999, 522, 18117, 14999, 572, 18117, 14999, 588, 18117, 14999, 622, 18117, 14999, 676, 18117, 14999, 680, 18117, 14999, 734, 18117, 14999, 932, 18117, 14999, 1044, 18117, 14999, 1142, 18117, 14999, 1164, 18117, 14999, 1492, 18117, 14999, 1796, 18117, 14999, 1914, 18117, 14999, 2152, 18117, 14999, 2444, 18117, 14999, 2492, 18117, 14999, 2556, 18117, 14999, 2676, 18117, 14999, 3048, 18117, 14999, 3114, 18117, 14999, 3242, 18117, 14999, 3322, 18117, 14999, 3812, 18117, 14999, 6314, 18117, 14999, 10264, 18117, 14999, 17493, 22, 18117, 14999, 17493, 34, 18117, 14999, 17493, 396, 18117, 14999, 17493, 582, 18117, 20989, 9854, 18119, 197, 13146, 18119, 1770, 18119, 3416, 18119, 9855, 5221, 11562, 18119, 9855, 11562, 18119, 9855, 13052, 18119, 9855, 13874, 18119, 9855, 15868, 18119, 9855, 15918, 18119, 9855, 17486, 18119, 11396, 18119, 11905, 2610, 18119, 11905, 3076, 18119, 11905, 3356, 18119, 11905, 6756, 18119, 11905, 6778, 18119, 11905, 8780, 18119, 11905, 10900, 18119, 11905, 11978, 18119, 11905, 13450, 18119, 11905, 13736, 18119, 13768, 18119, 14003, 9855, 16, 18119, 14003, 9855, 40, 18119, 14003, 9855, 58, 18119, 14003, 9855, 72, 18119, 14003, 9855, 94, 18119, 14003, 9855, 184, 18119, 14003, 9855, 308, 18119, 14003, 9855, 498, 18119, 14003, 9855, 676, 18119, 14999, 0, 18119, 14999, 16, 18119, 14999, 40, 18119, 14999, 58, 18119, 14999, 72, 18119, 14999, 94, 18119, 14999, 106, 18119, 14999, 124, 18119, 14999, 148, 18119, 14999, 184, 18119, 14999, 224, 18119, 14999, 244, 18119, 14999, 266, 18119, 14999, 308, 18119, 14999, 336, 18119, 14999, 350, 18119, 14999, 384, 18119, 14999, 416, 18119, 14999, 448, 18119, 14999, 498, 18119, 14999, 522, 18119, 14999, 572, 18119, 14999, 588, 18119, 14999, 622, 18119, 14999, 676, 18119, 14999, 680, 18119, 14999, 734, 18119, 14999, 752, 18119, 14999, 932, 18119, 14999, 1044, 18119, 14999, 1142, 18119, 14999, 1164, 18119, 14999, 1492, 18119, 14999, 1796, 18119, 14999, 1914, 18119, 14999, 2152, 18119, 14999, 2444, 18119, 14999, 2492, 18119, 14999, 2556, 18119, 14999, 2676, 18119, 14999, 2956, 18119, 14999, 3048, 18119, 14999, 3242, 18119, 14999, 3322, 18119, 14999, 6314, 18119, 14999, 7018, 18119, 14999, 7648, 18119, 14999, 10264, 18124, 18127, 16899, 2610, 18127, 16899, 3076, 18127, 16899, 3232, 18127, 16899, 3356, 18127, 16899, 6756, 18127, 16899, 6778, 18127, 16899, 8780, 18127, 16899, 11978, 18127, 16899, 13450, 18127, 16899, 13736, 18127, 16899, 15736, 18127, 16899, 15820, 18135, 11706, 18139, 1397, 3245, 5290, 18139, 1397, 3245, 10626, 18139, 1397, 3245, 14680, 18139, 1397, 3245, 14765, 10634, 18139, 1397, 3245, 14895, 7788, 18139, 1397, 3245, 15955, 14032, 18139, 1397, 3245, 16565, 13625, 18330, 18139, 1397, 3245, 17633, 17370, 18139, 1397, 3245, 17722, 18139, 1397, 3245, 17765, 6746, 18139, 1397, 3245, 17789, 14826, 18139, 1397, 3245, 18285, 15060, 18139, 1397, 3245, 18852, 18139, 1397, 3245, 19563, 11968, 18139, 1397, 10653, 497, 3245, 16230, 18139, 1397, 11403, 19926, 18139, 1397, 12224, 18139, 1397, 12235, 13258, 18139, 1397, 12235, 15688, 18139, 1397, 12235, 20332, 18139, 1397, 12235, 22908, 18139, 1397, 12393, 13820, 18139, 1397, 12765, 16184, 18139, 1397, 13198, 18139, 1397, 13563, 15688, 18139, 1397, 13563, 22908, 18139, 1397, 14367, 19926, 18139, 1397, 14385, 17368, 18139, 1397, 14507, 635, 8358, 18139, 1397, 15438, 18139, 1397, 16497, 18758, 18139, 1397, 16816, 18139, 1397, 17083, 15846, 18139, 1397, 17120, 18139, 1397, 17502, 18139, 1397, 17618, 18139, 1397, 17776, 18139, 1397, 17824, 18139, 1397, 18002, 18139, 1397, 18168, 18139, 1397, 18496, 18139, 1397, 18770, 18139, 1397, 18869, 12100, 18139, 1397, 18878, 18139, 1397, 19041, 485, 3245, 12562, 18139, 1397, 19268, 18139, 1397, 19283, 18758, 18139, 1397, 19356, 18139, 1397, 19358, 18139, 1397, 19651, 11456, 18139, 1397, 19975, 93, 3245, 18930, 18139, 1397, 19976, 18139, 1397, 20118, 18139, 1397, 20138, 18139, 1397, 20222, 18139, 1397, 20290, 18139, 1397, 20292, 18139, 1397, 20364, 18139, 1397, 20448, 18139, 1397, 20594, 18139, 1397, 20602, 18139, 1397, 20828, 18139, 1397, 21024, 18139, 1397, 22808, 18142, 18147, 14999, 0, 18147, 14999, 8, 18147, 14999, 16, 18147, 14999, 26, 18147, 14999, 28, 18147, 14999, 40, 18147, 14999, 106, 18147, 14999, 110, 18147, 14999, 114, 18147, 14999, 116, 18147, 14999, 120, 18147, 14999, 148, 18147, 14999, 154, 18147, 14999, 158, 18147, 14999, 166, 18147, 14999, 168, 18147, 14999, 244, 18147, 14999, 248, 18147, 14999, 254, 18147, 14999, 258, 18147, 14999, 260, 18147, 14999, 266, 18147, 14999, 270, 18147, 14999, 274, 18147, 14999, 282, 18147, 14999, 286, 18147, 14999, 350, 18147, 14999, 354, 18147, 14999, 358, 18147, 14999, 366, 18147, 14999, 370, 18147, 14999, 416, 18147, 14999, 424, 18147, 14999, 430, 18147, 14999, 436, 18147, 14999, 440, 18147, 14999, 448, 18147, 14999, 452, 18147, 14999, 460, 18147, 14999, 468, 18147, 14999, 472, 18147, 14999, 522, 18147, 14999, 528, 18147, 14999, 536, 18147, 14999, 540, 18147, 14999, 546, 18147, 14999, 572, 18147, 14999, 574, 18147, 14999, 578, 18147, 14999, 580, 18147, 14999, 584, 18147, 14999, 588, 18147, 14999, 592, 18147, 14999, 598, 18147, 14999, 602, 18147, 14999, 612, 18147, 14999, 622, 18147, 14999, 626, 18147, 14999, 630, 18147, 14999, 634, 18147, 14999, 642, 18147, 14999, 690, 18147, 14999, 694, 18147, 14999, 700, 18147, 14999, 706, 18147, 14999, 710, 18147, 14999, 734, 18147, 14999, 742, 18147, 14999, 746, 18147, 14999, 752, 18147, 14999, 754, 18147, 14999, 758, 18147, 14999, 760, 18147, 14999, 762, 18147, 14999, 13563, 0, 18147, 14999, 13563, 8, 18147, 14999, 13563, 16, 18147, 14999, 13563, 28, 18147, 14999, 13563, 40, 18147, 14999, 13563, 350, 18147, 14999, 13563, 354, 18147, 14999, 13563, 642, 18147, 14999, 13563, 694, 18147, 14999, 13563, 734, 18147, 14999, 13563, 742, 18147, 14999, 13563, 746, 18147, 14999, 16011, 736, 18147, 15873, 19371, 8320, 18147, 16255, 10816, 18147, 19371, 8320, 18149, 9870, 18150, 18152, 18165, 16009, 14999, 270, 18165, 16009, 14999, 528, 18165, 16009, 14999, 2280, 18165, 16009, 14999, 2536, 18165, 16009, 14999, 3220, 18165, 16009, 14999, 3532, 18165, 16009, 14999, 5312, 18165, 16009, 14999, 5818, 18165, 16009, 14999, 7156, 18165, 16009, 14999, 7596, 18165, 16009, 14999, 9372, 18165, 16009, 14999, 9486, 18165, 16009, 14999, 9776, 18165, 16009, 14999, 10126, 18165, 16009, 14999, 10810, 18165, 16009, 14999, 11424, 18165, 16009, 14999, 12204, 18165, 16009, 14999, 13400, 18165, 16009, 14999, 14196, 18165, 16009, 14999, 14546, 18165, 16009, 14999, 14978, 18165, 16009, 14999, 15474, 18165, 16009, 15233, 2610, 18165, 16009, 15233, 2611, 16502, 18165, 16009, 15233, 2611, 18744, 18165, 16009, 15233, 3232, 18165, 16009, 15233, 3233, 18744, 18165, 16009, 15233, 3356, 18165, 16009, 15233, 13736, 18165, 16009, 15233, 15820, 18165, 16009, 17179, 9854, 18167, 18026, 18169, 6767, 9873, 15672, 18172, 18173, 16845, 10641, 18847, 896, 18176, 18177, 10641, 13765, 9854, 18177, 10641, 13884, 18177, 10641, 14625, 15642, 18177, 10641, 16946, 18177, 10641, 18836, 18177, 10641, 19407, 11477, 10641, 7292, 18177, 10641, 21124, 18177, 14307, 1, 13251, 18386, 18177, 16023, 10641, 13546, 18177, 19242, 18181, 17074, 18183, 2601, 9854, 18183, 7807, 36, 18183, 18511, 8320, 18183, 18840, 18183, 19516, 18183, 20685, 8320, 18183, 20752, 18193, 5739, 15672, 18193, 9158, 18193, 9297, 15244, 18193, 11924, 18193, 14444, 18193, 14786, 18193, 15673, 1397, 17668, 18193, 20195, 18643, 15672, 18195, 7817, 19580, 18195, 9205, 5222, 18195, 9205, 5223, 5222, 18195, 9205, 11438, 18195, 9205, 12594, 18195, 9205, 12644, 18195, 9205, 13773, 17434, 18195, 9205, 14056, 18195, 9205, 15022, 18195, 9205, 15044, 18195, 9205, 16972, 18195, 9205, 17036, 18195, 9205, 19366, 18195, 9855, 11676, 18195, 9855, 11677, 10116, 18195, 9855, 12544, 18195, 9855, 17516, 18195, 9855, 19508, 18195, 11905, 2610, 18195, 11905, 3076, 18195, 11905, 3356, 18195, 11905, 6756, 18195, 11905, 6778, 18195, 11905, 8780, 18195, 11905, 10900, 18195, 11905, 11978, 18195, 11905, 13450, 18195, 11905, 13736, 18195, 13341, 19580, 18195, 14003, 9855, 9972, 18195, 14003, 9855, 9973, 15102, 18195, 14003, 9855, 10656, 18195, 14003, 9855, 10657, 12690, 18195, 14003, 9855, 11911, 8486, 18195, 14003, 9855, 13216, 18195, 14003, 9855, 15686, 18195, 14003, 9855, 15698, 18195, 14003, 9855, 15756, 18195, 14999, 0, 18195, 14999, 8, 18195, 14999, 16, 18195, 14999, 17, 7612, 18195, 14999, 28, 18195, 14999, 40, 18195, 14999, 72, 18195, 14999, 106, 18195, 14999, 107, 12780, 18195, 14999, 124, 18195, 14999, 125, 12780, 18195, 14999, 148, 18195, 14999, 149, 19420, 18195, 14999, 244, 18195, 14999, 245, 12780, 18195, 14999, 266, 18195, 14999, 308, 18195, 14999, 336, 18195, 14999, 337, 19420, 18195, 14999, 350, 18195, 14999, 351, 12780, 18195, 14999, 351, 13424, 18195, 14999, 384, 18195, 14999, 416, 18195, 14999, 448, 18195, 14999, 449, 12780, 18195, 14999, 522, 18195, 14999, 523, 11682, 18195, 14999, 523, 12780, 18195, 14999, 572, 18195, 14999, 573, 11408, 18195, 14999, 588, 18195, 14999, 589, 12780, 18195, 14999, 589, 19420, 18195, 14999, 622, 18195, 14999, 623, 12780, 18195, 14999, 694, 18195, 14999, 734, 18195, 14999, 1142, 18195, 14999, 1143, 19420, 18195, 14999, 2444, 18195, 14999, 2445, 12548, 18195, 14999, 2445, 12549, 17102, 18195, 14999, 2556, 18195, 14999, 2557, 12780, 18195, 14999, 3322, 18195, 14999, 3323, 19420, 18195, 15811, 9205, 17036, 18195, 16974, 18195, 19015, 9855, 11638, 18195, 19015, 9855, 12456, 18195, 19015, 9855, 16996, 18195, 20836, 18198, 18200, 18209, 14999, 0, 18209, 14999, 8, 18209, 14999, 16, 18209, 14999, 26, 18209, 14999, 28, 18209, 14999, 40, 18209, 14999, 106, 18209, 14999, 110, 18209, 14999, 114, 18209, 14999, 116, 18209, 14999, 120, 18209, 14999, 148, 18209, 14999, 154, 18209, 14999, 158, 18209, 14999, 166, 18209, 14999, 168, 18209, 14999, 244, 18209, 14999, 248, 18209, 14999, 254, 18209, 14999, 258, 18209, 14999, 260, 18209, 14999, 266, 18209, 14999, 270, 18209, 14999, 274, 18209, 14999, 282, 18209, 14999, 286, 18209, 14999, 350, 18209, 14999, 354, 18209, 14999, 358, 18209, 14999, 366, 18209, 14999, 370, 18209, 14999, 416, 18209, 14999, 424, 18209, 14999, 430, 18209, 14999, 436, 18209, 14999, 440, 18209, 14999, 448, 18209, 14999, 452, 18209, 14999, 460, 18209, 14999, 468, 18209, 14999, 472, 18209, 14999, 522, 18209, 14999, 528, 18209, 14999, 536, 18209, 14999, 540, 18209, 14999, 546, 18209, 14999, 572, 18209, 14999, 574, 18209, 14999, 578, 18209, 14999, 580, 18209, 14999, 584, 18209, 14999, 588, 18209, 14999, 592, 18209, 14999, 598, 18209, 14999, 602, 18209, 14999, 612, 18209, 14999, 622, 18209, 14999, 626, 18209, 14999, 630, 18209, 14999, 634, 18209, 14999, 642, 18209, 14999, 680, 18209, 14999, 682, 18209, 14999, 684, 18209, 14999, 686, 18209, 14999, 690, 18209, 14999, 694, 18209, 14999, 700, 18209, 14999, 706, 18209, 14999, 710, 18209, 14999, 734, 18209, 14999, 742, 18209, 14999, 746, 18209, 14999, 752, 18209, 14999, 754, 18209, 14999, 758, 18209, 14999, 760, 18209, 14999, 762, 18209, 14999, 13563, 0, 18209, 14999, 13563, 8, 18209, 14999, 13563, 16, 18209, 14999, 13563, 28, 18209, 14999, 13563, 40, 18209, 14999, 13563, 266, 18209, 14999, 13563, 270, 18209, 14999, 13563, 274, 18209, 14999, 13563, 282, 18209, 14999, 13563, 286, 18209, 14999, 13563, 350, 18209, 14999, 13563, 354, 18209, 14999, 13563, 370, 18209, 14999, 13563, 440, 18209, 14999, 13563, 472, 18209, 14999, 13563, 572, 18209, 14999, 13563, 574, 18209, 14999, 13563, 578, 18209, 14999, 13563, 580, 18209, 14999, 13563, 584, 18209, 14999, 13563, 598, 18209, 14999, 13563, 612, 18209, 14999, 13563, 634, 18209, 14999, 13563, 642, 18209, 14999, 13563, 694, 18209, 14999, 13563, 734, 18209, 14999, 13563, 742, 18209, 14999, 13563, 746, 18209, 14999, 16011, 8, 18209, 15119, 1216, 18209, 15873, 19371, 8320, 18209, 16255, 7694, 18209, 19371, 8320, 18212, 18213, 843, 12762, 18225, 3192, 18249, 9171, 213, 18392, 18250, 18260, 18271, 9855, 13052, 18271, 14999, 0, 18271, 14999, 8, 18271, 14999, 16, 18271, 14999, 28, 18271, 14999, 40, 18271, 14999, 106, 18271, 14999, 124, 18271, 14999, 148, 18271, 14999, 244, 18271, 14999, 266, 18271, 14999, 336, 18271, 14999, 350, 18271, 14999, 384, 18271, 14999, 416, 18271, 14999, 448, 18271, 14999, 522, 18271, 14999, 572, 18271, 14999, 588, 18271, 14999, 622, 18271, 14999, 680, 18271, 14999, 932, 18271, 14999, 1044, 18271, 14999, 1142, 18271, 14999, 1164, 18271, 14999, 1492, 18271, 14999, 1796, 18271, 14999, 1914, 18271, 14999, 2492, 18271, 14999, 2556, 18271, 14999, 2676, 18271, 14999, 2956, 18271, 14999, 3242, 18271, 14999, 3322, 18271, 14999, 6314, 18271, 14999, 10264, 18271, 17179, 8320, 18271, 18249, 9802, 18271, 20989, 9854, 18283, 15672, 18290, 18297, 122, 18297, 11446, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 671, 843, 7816, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 671, 843, 13340, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 6435, 843, 7816, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 6435, 843, 13340, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 7817, 843, 670, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 7817, 843, 6434, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 13341, 843, 670, 18297, 11447, 10641, 9171, 863, 14643, 317, 11477, 18471, 13341, 843, 6434, 18297, 11447, 16935, 7816, 18297, 13341, 11447, 10641, 1216, 18303, 16203, 14999, 0, 18303, 16203, 14999, 8, 18303, 16203, 14999, 16, 18303, 16203, 14999, 28, 18303, 16203, 14999, 106, 18303, 16203, 14999, 148, 18303, 16203, 14999, 350, 18303, 16203, 14999, 384, 18303, 16203, 14999, 416, 18303, 16203, 14999, 448, 18303, 16203, 14999, 452, 18303, 16203, 14999, 522, 18303, 16203, 14999, 556, 18303, 16203, 14999, 572, 18303, 16203, 14999, 588, 18303, 16203, 14999, 592, 18303, 16203, 14999, 622, 18303, 16203, 14999, 626, 18303, 16203, 14999, 634, 18303, 16203, 14999, 694, 18303, 16203, 14999, 734, 18303, 16203, 14999, 1620, 18303, 16203, 14999, 1914, 18303, 16203, 14999, 16011, 588, 18303, 16203, 15233, 2610, 18303, 16203, 15233, 2611, 16502, 18303, 16203, 15233, 2611, 16503, 18744, 18303, 16203, 15233, 2611, 18744, 18303, 16203, 15233, 3076, 18303, 16203, 15233, 3077, 16502, 18303, 16203, 15233, 3077, 16503, 18744, 18303, 16203, 15233, 3077, 18744, 18303, 16203, 15233, 3232, 18303, 16203, 15233, 3233, 18744, 18303, 16203, 15233, 3356, 18303, 16203, 15233, 3357, 16502, 18303, 16203, 15233, 3357, 16503, 18744, 18303, 16203, 15233, 3357, 18744, 18303, 16203, 15233, 6756, 18303, 16203, 15233, 6757, 16502, 18303, 16203, 15233, 6757, 16503, 18744, 18303, 16203, 15233, 6757, 18744, 18303, 16203, 15233, 6778, 18303, 16203, 15233, 6779, 16502, 18303, 16203, 15233, 6779, 16503, 18744, 18303, 16203, 15233, 6779, 18744, 18303, 16203, 15233, 8780, 18303, 16203, 15233, 8781, 16502, 18303, 16203, 15233, 8781, 16503, 18744, 18303, 16203, 15233, 8781, 18744, 18303, 16203, 15233, 11978, 18303, 16203, 15233, 11979, 16502, 18303, 16203, 15233, 11979, 16503, 18744, 18303, 16203, 15233, 11979, 18744, 18303, 16203, 15233, 12080, 18303, 16203, 15233, 12081, 18744, 18303, 16203, 15233, 12108, 18303, 16203, 15233, 12109, 18744, 18303, 16203, 15233, 13450, 18303, 16203, 15233, 13451, 16502, 18303, 16203, 15233, 13451, 16503, 18744, 18303, 16203, 15233, 13451, 18744, 18303, 16203, 15233, 13538, 18303, 16203, 15233, 13539, 18744, 18303, 16203, 15233, 13736, 18303, 16203, 15233, 13737, 16502, 18303, 16203, 15233, 13737, 16503, 18744, 18303, 16203, 15233, 13737, 18744, 18303, 16203, 15233, 14637, 18744, 18303, 16203, 15233, 15195, 18744, 18303, 16203, 15233, 15736, 18303, 16203, 15233, 15737, 18744, 18303, 16203, 15233, 15820, 18303, 16203, 15233, 15821, 18744, 18303, 16203, 15233, 17190, 18303, 16203, 15233, 17191, 18744, 18303, 16203, 18089, 2611, 7122, 18303, 16203, 18089, 2611, 17438, 18303, 16203, 18089, 3077, 18816, 18303, 16203, 18089, 3233, 18816, 18303, 16203, 18089, 3357, 18816, 18303, 16203, 18089, 6757, 18816, 18303, 16203, 18089, 6779, 18816, 18303, 16203, 18089, 8781, 18816, 18303, 16203, 18089, 11979, 18816, 18303, 16203, 18089, 13451, 18816, 18303, 16203, 18089, 13737, 18816, 18303, 16203, 18089, 14639, 18816, 18303, 16203, 18257, 1752, 18303, 16203, 18257, 2934, 18303, 21107, 14999, 0, 18303, 21107, 14999, 8, 18303, 21107, 14999, 16, 18303, 21107, 14999, 28, 18303, 21107, 14999, 106, 18303, 21107, 14999, 148, 18303, 21107, 14999, 350, 18303, 21107, 14999, 384, 18303, 21107, 14999, 416, 18303, 21107, 14999, 448, 18303, 21107, 14999, 452, 18303, 21107, 14999, 522, 18303, 21107, 14999, 556, 18303, 21107, 14999, 572, 18303, 21107, 14999, 588, 18303, 21107, 14999, 592, 18303, 21107, 14999, 622, 18303, 21107, 14999, 626, 18303, 21107, 14999, 634, 18303, 21107, 14999, 694, 18303, 21107, 14999, 734, 18303, 21107, 14999, 1620, 18303, 21107, 14999, 1914, 18303, 21107, 14999, 5716, 18303, 21107, 14999, 8586, 18303, 21107, 14999, 8692, 18303, 21107, 14999, 9454, 18303, 21107, 14999, 9678, 18303, 21107, 14999, 10074, 18303, 21107, 14999, 10112, 18303, 21107, 15673, 10542, 18303, 21107, 15673, 15864, 18307, 3357, 15555, 9175, 7882, 18307, 3357, 15555, 14888, 18307, 7883, 9175, 3357, 15554, 18307, 7883, 9175, 13506, 18307, 11596, 18307, 13507, 9175, 7882, 18307, 17402, 18307, 19518, 18307, 19778, 18309, 12682, 18312, 18314, 18319, 11597, 10641, 18183, 11596, 18319, 14999, 671, 10086, 18319, 14999, 671, 18906, 18319, 14999, 674, 18319, 14999, 1217, 13546, 18319, 14999, 1217, 18847, 896, 18319, 14999, 1217, 20181, 896, 18319, 14999, 1299, 2175, 10218, 18319, 14999, 1299, 7171, 10218, 18319, 14999, 2175, 671, 18906, 18319, 14999, 2175, 6435, 18906, 18319, 14999, 2175, 7817, 11476, 18319, 14999, 2175, 7817, 18906, 18319, 14999, 2175, 9502, 18319, 14999, 2175, 10219, 896, 18319, 14999, 2175, 11395, 14262, 18319, 14999, 2175, 12233, 14262, 18319, 14999, 2175, 13341, 18906, 18319, 14999, 2175, 13758, 18319, 14999, 2175, 14623, 10219, 896, 18319, 14999, 2175, 14623, 19405, 10219, 896, 18319, 14999, 2175, 15050, 18319, 14999, 2175, 18183, 20685, 8320, 18319, 14999, 2175, 18847, 7854, 18319, 14999, 2175, 19405, 10219, 896, 18319, 14999, 2175, 19921, 14262, 18319, 14999, 2303, 10219, 896, 18319, 14999, 2303, 14623, 10219, 896, 18319, 14999, 2303, 14623, 19405, 10219, 896, 18319, 14999, 2303, 19405, 10219, 896, 18319, 14999, 3717, 19053, 10219, 8320, 18319, 14999, 6435, 10086, 18319, 14999, 6435, 18906, 18319, 14999, 7123, 20479, 11756, 18319, 14999, 7171, 10219, 896, 18319, 14999, 7171, 14623, 10219, 896, 18319, 14999, 7171, 14623, 19405, 10219, 896, 18319, 14999, 7171, 19405, 10219, 896, 18319, 14999, 7817, 7123, 9502, 18319, 14999, 7817, 18906, 18319, 14999, 9171, 13480, 18319, 14999, 9287, 9854, 18319, 14999, 10751, 19053, 10219, 8320, 18319, 14999, 11395, 14262, 18319, 14999, 11547, 2175, 10218, 18319, 14999, 11547, 7171, 10218, 18319, 14999, 11756, 18319, 14999, 11773, 14262, 18319, 14999, 12233, 14262, 18319, 14999, 12589, 13341, 14519, 11446, 18319, 14999, 12741, 9854, 18319, 14999, 13260, 18319, 14999, 13341, 7123, 9502, 18319, 14999, 13341, 18906, 18319, 14999, 13480, 18319, 14999, 13507, 14647, 9854, 18319, 14999, 13563, 0, 18319, 14999, 13563, 2, 18319, 14999, 13563, 4, 18319, 14999, 13563, 5, 10641, 6118, 18319, 14999, 13563, 6, 18319, 14999, 13563, 8, 18319, 14999, 13563, 10, 18319, 14999, 13563, 12, 18319, 14999, 13563, 14, 18319, 14999, 13563, 15, 10641, 7292, 18319, 14999, 13563, 17, 10641, 15642, 18319, 14999, 13563, 18, 18319, 14999, 13563, 19, 10641, 21042, 18319, 14999, 13563, 20, 18319, 14999, 13563, 22, 18319, 14999, 13563, 23, 10641, 15119, 13758, 18319, 14999, 13563, 23, 10641, 16959, 7292, 18319, 14999, 13563, 23, 10641, 18183, 7807, 36, 18319, 14999, 13563, 23, 10641, 19587, 7292, 18319, 14999, 13563, 24, 18319, 14999, 13563, 25, 10641, 7292, 18319, 14999, 13563, 27, 10641, 7817, 7292, 18319, 14999, 13563, 27, 10641, 19587, 7292, 18319, 14999, 13563, 28, 18319, 14999, 13563, 30, 18319, 14999, 13563, 34, 18319, 14999, 13563, 36, 18319, 14999, 13563, 37, 10641, 7292, 18319, 14999, 13563, 38, 18319, 14999, 13563, 39, 10641, 16959, 7292, 18319, 14999, 13563, 40, 18319, 14999, 13563, 41, 896, 18319, 14999, 13563, 41, 10641, 7817, 7292, 18319, 14999, 13563, 42, 18319, 14999, 13563, 43, 10641, 7292, 18319, 14999, 13563, 44, 18319, 14999, 13563, 46, 18319, 14999, 13563, 48, 18319, 14999, 13563, 50, 18319, 14999, 13563, 51, 10641, 6118, 18319, 14999, 13563, 51, 10641, 19587, 7292, 18319, 14999, 13563, 826, 18319, 14999, 13563, 1048, 18319, 14999, 13563, 1300, 18319, 14999, 13563, 1318, 18319, 14999, 13563, 1328, 18319, 14999, 13563, 1340, 18319, 14999, 13563, 2680, 18319, 14999, 13563, 3293, 7123, 28, 18319, 14999, 13563, 5816, 18319, 14999, 13563, 7148, 18319, 14999, 13563, 7438, 18319, 14999, 13563, 9171, 8, 18319, 14999, 13563, 9171, 28, 18319, 14999, 13563, 11436, 18319, 14999, 13563, 11888, 18319, 14999, 13563, 12156, 18319, 14999, 13563, 12237, 2680, 18319, 14999, 13563, 12237, 12156, 18319, 14999, 13563, 13432, 18319, 14999, 13563, 13718, 18319, 14999, 13563, 14357, 28, 18319, 14999, 13563, 14393, 7123, 28, 18319, 14999, 13563, 15501, 12, 18319, 14999, 13563, 15811, 0, 18319, 14999, 13563, 15811, 14, 18319, 14999, 13563, 15811, 16, 18319, 14999, 13563, 15811, 24, 18319, 14999, 13563, 15811, 25, 10641, 7883, 2106, 18319, 14999, 13563, 15811, 34, 18319, 14999, 13563, 15811, 35, 10641, 7292, 18319, 14999, 13563, 15811, 42, 18319, 14999, 13563, 15811, 66, 18319, 14999, 13563, 15811, 9171, 8, 18319, 14999, 13563, 15811, 11436, 18319, 14999, 13563, 16111, 16, 18319, 14999, 13563, 16111, 17, 10641, 15642, 18319, 14999, 13563, 16111, 22, 18319, 14999, 13563, 16111, 26, 18319, 14999, 13563, 16111, 40, 18319, 14999, 13563, 16111, 18183, 34, 18319, 14999, 13563, 16279, 19, 10641, 15642, 18319, 14999, 13563, 17460, 18319, 14999, 13563, 18249, 482, 18319, 14999, 13563, 18543, 9171, 8, 18319, 14999, 13563, 18543, 16449, 9956, 18319, 14999, 13563, 18599, 40, 18319, 14999, 14625, 13260, 18319, 14999, 14625, 19880, 18319, 14999, 15050, 18319, 14999, 15119, 12233, 14262, 18319, 14999, 15119, 14625, 11395, 14262, 18319, 14999, 15119, 14625, 12233, 14262, 18319, 14999, 15423, 671, 11476, 18319, 14999, 15423, 6435, 11476, 18319, 14999, 15423, 11756, 18319, 14999, 15423, 18183, 20685, 8320, 18319, 14999, 15423, 20685, 8320, 18319, 14999, 15441, 7292, 18319, 14999, 15635, 843, 2175, 10218, 18319, 14999, 15635, 843, 7171, 10218, 18319, 14999, 15811, 11762, 18319, 14999, 16111, 0, 18319, 14999, 16111, 2, 18319, 14999, 16111, 6, 18319, 14999, 16111, 8, 18319, 14999, 16111, 12, 18319, 14999, 16111, 14, 18319, 14999, 16111, 15, 10641, 15642, 18319, 14999, 16111, 16, 18319, 14999, 16111, 18, 18319, 14999, 16111, 20, 18319, 14999, 16111, 22, 18319, 14999, 16111, 24, 18319, 14999, 16111, 26, 18319, 14999, 16111, 28, 18319, 14999, 16111, 30, 18319, 14999, 16111, 34, 18319, 14999, 16111, 38, 18319, 14999, 16111, 40, 18319, 14999, 16111, 42, 18319, 14999, 16111, 44, 18319, 14999, 16111, 66, 18319, 14999, 16111, 510, 18319, 14999, 16111, 14357, 2, 18319, 14999, 16111, 18543, 8, 18319, 14999, 16111, 18543, 26, 18319, 14999, 16127, 7817, 7123, 9502, 18319, 14999, 16127, 13341, 7123, 9502, 18319, 14999, 16145, 10219, 3717, 568, 18319, 14999, 16145, 10219, 3717, 584, 18319, 14999, 16145, 10219, 3717, 9270, 18319, 14999, 16145, 10219, 3717, 13458, 18319, 14999, 16145, 10219, 10751, 568, 18319, 14999, 16145, 10219, 10751, 584, 18319, 14999, 16145, 10219, 10751, 9270, 18319, 14999, 16145, 10219, 10751, 13458, 18319, 14999, 16449, 9956, 18319, 14999, 17494, 18319, 14999, 17809, 202, 18319, 14999, 17809, 7131, 9854, 18319, 14999, 17809, 9891, 9854, 18319, 14999, 18109, 2402, 18319, 14999, 18543, 11762, 18319, 14999, 18543, 16449, 9956, 18319, 14999, 18847, 7854, 18319, 14999, 19245, 10219, 896, 18319, 14999, 19245, 14623, 10219, 896, 18319, 14999, 19245, 14623, 19405, 10219, 896, 18319, 14999, 19245, 19405, 10219, 896, 18319, 14999, 19880, 18319, 14999, 19921, 14262, 18319, 14999, 20133, 10219, 896, 18319, 14999, 20133, 14623, 10219, 896, 18319, 14999, 20133, 14623, 19405, 10219, 896, 18319, 14999, 20133, 19405, 10219, 896, 18319, 14999, 20479, 11756, 18319, 14999, 20968, 18323, 1397, 3716, 18323, 1397, 10750, 18323, 1397, 11968, 18324, 18328, 18330, 18331, 17092, 18331, 17710, 18331, 18934, 18334, 18337, 16831, 12976, 18338, 18339, 13884, 18339, 23110, 18340, 18345, 9214, 18345, 11905, 15530, 18349, 16153, 11905, 10900, 18349, 16153, 12541, 16111, 14999, 0, 18349, 16153, 12541, 16111, 14999, 2, 18349, 16153, 12541, 16111, 14999, 4, 18349, 16153, 12541, 16111, 14999, 6, 18349, 16153, 12541, 16111, 14999, 8, 18349, 16153, 12541, 16111, 14999, 10, 18349, 16153, 12541, 16111, 14999, 12, 18349, 16153, 12541, 16111, 14999, 14, 18349, 16153, 12541, 16111, 14999, 16, 18349, 16153, 12541, 16111, 14999, 18, 18349, 16153, 12541, 16111, 14999, 20, 18349, 16153, 12541, 16111, 14999, 22, 18349, 16153, 12541, 16111, 14999, 24, 18349, 16153, 12541, 16111, 14999, 26, 18349, 16153, 12541, 16111, 14999, 28, 18349, 16153, 12541, 16111, 14999, 30, 18349, 16153, 12541, 16111, 14999, 32, 18349, 16153, 12541, 16111, 14999, 34, 18349, 16153, 12541, 16111, 14999, 36, 18349, 16153, 12541, 16111, 14999, 38, 18349, 16153, 12541, 16111, 14999, 40, 18349, 16153, 12541, 16111, 14999, 42, 18349, 16153, 12541, 16111, 14999, 44, 18349, 16153, 12541, 16111, 14999, 46, 18349, 16153, 12541, 16111, 14999, 48, 18349, 16153, 12541, 16111, 14999, 50, 18349, 16153, 15233, 14638, 18349, 16153, 15233, 15818, 18349, 16153, 15233, 15820, 18349, 16153, 15233, 16400, 18349, 16153, 15233, 17232, 18349, 16153, 15233, 18010, 18349, 16153, 15233, 18086, 18349, 16153, 15233, 18362, 18349, 16153, 15233, 18742, 18349, 16153, 15233, 19622, 18349, 17275, 60, 18349, 17275, 296, 18349, 17275, 522, 18349, 17275, 588, 18349, 17275, 698, 18349, 17275, 11773, 8320, 18349, 17275, 12541, 16111, 14999, 0, 18349, 17275, 12541, 16111, 14999, 2, 18349, 17275, 12541, 16111, 14999, 4, 18349, 17275, 12541, 16111, 14999, 6, 18349, 17275, 12541, 16111, 14999, 8, 18349, 17275, 12541, 16111, 14999, 10, 18349, 17275, 12541, 16111, 14999, 12, 18349, 17275, 12541, 16111, 14999, 14, 18349, 17275, 12541, 16111, 14999, 16, 18349, 17275, 12541, 16111, 14999, 18, 18349, 17275, 12541, 16111, 14999, 20, 18349, 17275, 12541, 16111, 14999, 22, 18349, 17275, 12541, 16111, 14999, 24, 18349, 17275, 12541, 16111, 14999, 26, 18349, 17275, 12541, 16111, 14999, 28, 18349, 17275, 12541, 16111, 14999, 30, 18349, 17275, 12541, 16111, 14999, 32, 18349, 17275, 12541, 16111, 14999, 34, 18349, 17275, 12541, 16111, 14999, 36, 18349, 17275, 12541, 16111, 14999, 38, 18349, 17275, 12541, 16111, 14999, 40, 18349, 17275, 12541, 16111, 14999, 42, 18349, 17275, 12541, 16111, 14999, 44, 18349, 17275, 12541, 16111, 14999, 46, 18349, 17275, 12541, 16111, 14999, 48, 18349, 17275, 12541, 16111, 14999, 50, 18367, 13582, 18372, 18373, 10641, 19963, 11766, 18383, 984, 18383, 6747, 14644, 18383, 10108, 18383, 15369, 1016, 18383, 19902, 18391, 484, 18395, 11772, 18397, 11571, 9950, 18397, 12237, 11772, 18397, 12541, 11772, 18397, 14049, 9950, 18400, 18416, 18431, 634, 18431, 10641, 13759, 18386, 18431, 10641, 20181, 15642, 18439, 16180, 18451, 17772, 18457, 8321, 9742, 18457, 8321, 14625, 9742, 18457, 14625, 7139, 8320, 18457, 14999, 0, 18457, 14999, 8, 18457, 14999, 16, 18457, 14999, 28, 18457, 14999, 40, 18457, 14999, 106, 18457, 14999, 124, 18457, 14999, 148, 18457, 14999, 184, 18457, 14999, 224, 18457, 14999, 244, 18457, 14999, 266, 18457, 14999, 336, 18457, 14999, 350, 18457, 14999, 384, 18457, 14999, 416, 18457, 14999, 448, 18457, 14999, 522, 18457, 14999, 556, 18457, 14999, 572, 18457, 14999, 588, 18457, 14999, 622, 18457, 14999, 694, 18457, 14999, 718, 18457, 14999, 734, 18457, 14999, 752, 18457, 14999, 1044, 18457, 14999, 1142, 18457, 14999, 1254, 18457, 14999, 1482, 18457, 14999, 1914, 18457, 14999, 2444, 18457, 14999, 2492, 18457, 14999, 2556, 18457, 14999, 2676, 18457, 14999, 3048, 18457, 14999, 3242, 18457, 14999, 3308, 18457, 14999, 3322, 18457, 14999, 3812, 18457, 14999, 10240, 18457, 14999, 10264, 18457, 14999, 13563, 0, 18457, 14999, 15873, 266, 18457, 14999, 18891, 734, 18457, 14999, 18911, 224, 18457, 14999, 19839, 3048, 18457, 14999, 20552, 18457, 15573, 7139, 8320, 18457, 19667, 14999, 572, 18457, 19667, 14999, 694, 18457, 19667, 14999, 734, 18457, 20459, 14999, 572, 18459, 6407, 9855, 517, 5720, 18459, 6407, 9855, 918, 18459, 6407, 9855, 966, 18459, 6407, 9855, 1018, 18459, 6407, 9855, 2132, 18459, 6407, 9855, 2878, 18459, 6407, 9855, 3030, 18459, 6407, 9855, 6090, 18459, 6407, 9855, 6098, 18459, 6407, 9855, 6432, 18459, 6407, 9855, 7166, 18459, 6407, 9855, 7304, 18459, 6407, 9855, 7848, 18459, 6407, 9855, 9778, 18459, 6407, 9855, 10550, 18459, 6407, 9855, 10623, 5734, 18459, 6407, 9855, 11476, 18459, 6407, 9855, 11617, 2106, 18459, 6407, 9855, 11710, 18459, 6407, 9855, 11964, 18459, 6407, 9855, 12096, 18459, 6407, 9855, 13241, 10228, 18459, 6407, 9855, 13554, 18459, 6407, 9855, 13563, 874, 18459, 6407, 9855, 13752, 18459, 6407, 9855, 13852, 18459, 6407, 9855, 14064, 18459, 6407, 9855, 14504, 18459, 6407, 9855, 14598, 18459, 6407, 9855, 14798, 18459, 6407, 9855, 14834, 18459, 6407, 9855, 15353, 7138, 18459, 6407, 9855, 15544, 18459, 6407, 9855, 16056, 18459, 6407, 9855, 16112, 18459, 6407, 9855, 16782, 18459, 6407, 9855, 16982, 18459, 6407, 9855, 17136, 18459, 6407, 9855, 18102, 18459, 6407, 9855, 18278, 18459, 6407, 9855, 18654, 18459, 6407, 9855, 18727, 7138, 18459, 6407, 9855, 18948, 18459, 6407, 9855, 18967, 13240, 18459, 6407, 9855, 19003, 16913, 15642, 18459, 6407, 9855, 20312, 18461, 9950, 18475, 15626, 18477, 19352, 18486, 18487, 505, 12005, 634, 18487, 505, 20127, 634, 18487, 987, 2511, 20127, 634, 18487, 11393, 2511, 12005, 634, 18487, 11393, 2511, 14281, 12005, 634, 18487, 11393, 14281, 12005, 634, 18487, 11393, 14647, 9854, 18487, 11393, 20917, 2511, 12005, 634, 18487, 11393, 20917, 14647, 9854, 18487, 13883, 18524, 18489, 14064, 18491, 9206, 18492, 18499, 7854, 18505, 12589, 7816, 18505, 12589, 13340, 18505, 13889, 7816, 18505, 13889, 7817, 843, 12589, 7817, 843, 12589, 13340, 18505, 13889, 7817, 843, 12589, 13340, 18505, 13889, 7817, 843, 13889, 13341, 843, 12589, 7816, 18505, 13889, 7817, 843, 13889, 13341, 843, 12589, 13340, 18505, 13889, 13340, 18505, 13889, 13341, 843, 12589, 7816, 18505, 13889, 13341, 843, 12589, 7817, 843, 12589, 13340, 18511, 8320, 18511, 20685, 8320, 18512, 18519, 13183, 15672, 18523, 19353, 15673, 14999, 0, 18523, 19353, 15673, 14999, 2, 18523, 19353, 15673, 14999, 4, 18523, 19353, 15673, 14999, 6, 18523, 19353, 15673, 14999, 8, 18523, 19353, 15673, 14999, 10, 18523, 19353, 15673, 14999, 12, 18523, 19353, 15673, 14999, 14, 18523, 19353, 15673, 14999, 16, 18523, 19353, 15673, 14999, 18, 18523, 19353, 15673, 14999, 20, 18523, 19353, 15673, 14999, 22, 18523, 19353, 15673, 14999, 24, 18523, 19353, 15673, 14999, 26, 18523, 19353, 15673, 14999, 28, 18523, 19353, 15673, 14999, 30, 18523, 19353, 15673, 14999, 32, 18523, 19353, 15673, 14999, 34, 18523, 19353, 15673, 14999, 36, 18523, 19353, 15673, 14999, 38, 18523, 19353, 15673, 14999, 40, 18523, 19353, 15673, 14999, 42, 18523, 19353, 15673, 14999, 44, 18523, 19353, 15673, 14999, 46, 18523, 19353, 15673, 14999, 48, 18523, 19353, 15673, 14999, 50, 18527, 6718, 18531, 15442, 18538, 18540, 18543, 2511, 9854, 18543, 7127, 10641, 15119, 14701, 18042, 18543, 11446, 18543, 11447, 10641, 18836, 18543, 11762, 18543, 11989, 3042, 18543, 13260, 18543, 13758, 18543, 13759, 14646, 18543, 14625, 13260, 18543, 14625, 13261, 19557, 8320, 18543, 14625, 15643, 2511, 9854, 18543, 14737, 20838, 18543, 15423, 7127, 10641, 16403, 17270, 18543, 15743, 671, 9854, 18543, 15743, 6435, 9854, 18543, 15781, 13260, 18543, 17033, 9854, 18543, 17139, 14725, 12275, 14418, 18543, 17479, 7126, 18543, 18511, 8320, 18543, 19614, 18543, 20377, 16111, 22, 18556, 18568, 18570, 18572, 18583, 14049, 9950, 18583, 14049, 12541, 11772, 18583, 14049, 14486, 18584, 18591, 9950, 18593, 5726, 18593, 17406, 18599, 11571, 671, 18471, 12388, 18599, 11571, 6435, 18471, 12388, 18599, 11571, 7817, 18471, 12388, 18599, 11571, 13341, 18471, 12388, 18599, 14049, 671, 18471, 12388, 18599, 14049, 6435, 18471, 12388, 18599, 14049, 7817, 18471, 12388, 18599, 14049, 13341, 18471, 12388, 18607, 17642, 18609, 6718, 18609, 15672, 18609, 21276, 18611, 17245, 6718, 18611, 18095, 6718, 18613, 6718, 18615, 6718, 18622, 18625, 7139, 317, 20402, 18627, 9854, 18631, 14042, 18645, 5866, 18653, 13372, 18663, 20127, 634, 18684, 18685, 505, 12005, 634, 18685, 505, 20127, 634, 18685, 987, 2511, 20127, 634, 18685, 11393, 2511, 12005, 634, 18685, 11393, 2511, 14281, 12005, 634, 18685, 11393, 14281, 12005, 634, 18685, 11393, 14647, 9854, 18685, 11393, 20917, 2511, 12005, 634, 18685, 11393, 20917, 14647, 9854, 18685, 13883, 18524, 18689, 484, 18689, 485, 505, 12005, 634, 18689, 485, 505, 12005, 635, 10641, 1217, 11392, 18689, 485, 10641, 2511, 12005, 634, 18689, 485, 11393, 2511, 12005, 634, 18689, 485, 11393, 13759, 18386, 18689, 485, 11393, 14281, 12005, 634, 18689, 485, 11393, 14647, 9854, 18689, 10641, 1216, 18689, 10641, 9287, 9855, 11552, 18689, 10641, 23111, 9855, 11552, 18689, 11393, 15650, 18689, 11393, 18688, 18689, 11393, 19407, 11476, 18689, 14373, 843, 14889, 123, 6287, 10641, 15650, 18689, 14373, 15650, 18689, 19541, 17254, 18716, 18719, 14003, 9855, 16, 18719, 14003, 9855, 40, 18719, 14999, 0, 18719, 14999, 16, 18719, 14999, 40, 18719, 14999, 106, 18719, 14999, 148, 18719, 14999, 244, 18719, 14999, 350, 18719, 14999, 384, 18719, 14999, 416, 18719, 14999, 448, 18719, 14999, 522, 18719, 14999, 588, 18719, 14999, 622, 18719, 14999, 694, 18719, 14999, 734, 18719, 14999, 2444, 18723, 10228, 18731, 17714, 18741, 6718, 18747, 6286, 18753, 14999, 734, 18753, 14999, 736, 18753, 14999, 738, 18753, 14999, 742, 18753, 14999, 746, 18753, 14999, 3648, 18753, 14999, 3650, 18753, 14999, 3652, 18753, 14999, 3656, 18753, 14999, 3658, 18753, 14999, 3660, 18753, 14999, 3662, 18753, 14999, 3664, 18753, 14999, 3666, 18753, 14999, 3668, 18753, 14999, 3670, 18753, 14999, 3672, 18753, 14999, 3674, 18753, 14999, 3676, 18753, 14999, 3678, 18753, 14999, 3680, 18753, 14999, 3684, 18753, 14999, 3686, 18753, 14999, 3688, 18753, 14999, 3690, 18753, 14999, 3706, 18753, 14999, 5311, 10742, 18753, 14999, 10732, 18753, 14999, 10734, 18753, 14999, 10736, 18753, 14999, 10738, 18753, 14999, 10742, 18753, 14999, 10746, 18753, 14999, 10748, 18753, 14999, 10752, 18753, 14999, 10754, 18753, 14999, 10756, 18753, 14999, 10758, 18753, 14999, 10762, 18753, 14999, 10768, 18753, 14999, 10770, 18753, 14999, 14102, 18753, 14999, 14104, 18753, 14999, 14106, 18753, 14999, 14371, 15957, 3660, 18753, 14999, 14371, 15957, 3662, 18753, 14999, 15801, 3660, 18753, 14999, 15801, 3664, 18753, 14999, 15801, 3674, 18753, 14999, 15801, 10742, 18753, 14999, 15801, 10744, 18753, 14999, 15801, 10748, 18753, 14999, 15801, 10750, 18753, 14999, 15801, 10768, 18753, 14999, 15973, 10768, 18753, 14999, 20465, 3690, 18753, 18319, 14999, 22865, 8320, 18753, 19015, 14890, 18753, 19619, 8320, 18757, 9855, 212, 18763, 13483, 18951, 1073, 17453, 22990, 18763, 13483, 18951, 1073, 17453, 22994, 18763, 13483, 18951, 1073, 17453, 23006, 18763, 13483, 18951, 1073, 17453, 23026, 18763, 13483, 18951, 1073, 17453, 23034, 18763, 13483, 18951, 1073, 17453, 23042, 18763, 13483, 18951, 1073, 17453, 23054, 18763, 13483, 18951, 1073, 17453, 23060, 18763, 13483, 18951, 1073, 17453, 23068, 18763, 13483, 18951, 12541, 16111, 14999, 36, 18775, 10641, 1217, 11392, 18775, 10641, 15517, 93, 14392, 18775, 10641, 17143, 16184, 18775, 10641, 18836, 18776, 18783, 6750, 18783, 11932, 18829, 10651, 16270, 18829, 14999, 16, 18829, 14999, 40, 18829, 14999, 282, 18829, 14999, 546, 18829, 14999, 634, 18829, 14999, 710, 18829, 14999, 762, 18829, 14999, 826, 18829, 14999, 1866, 18829, 14999, 1914, 18829, 14999, 2280, 18829, 14999, 2536, 18829, 14999, 3122, 18829, 14999, 3236, 18829, 14999, 3726, 18829, 14999, 5256, 18829, 14999, 5816, 18829, 14999, 6376, 18829, 14999, 7308, 18829, 14999, 9370, 18829, 14999, 9684, 18829, 14999, 9776, 18829, 14999, 10902, 18829, 14999, 11888, 18829, 14999, 12154, 18829, 14999, 12190, 18829, 14999, 12528, 18829, 14999, 13314, 18829, 14999, 13418, 18829, 14999, 15730, 18832, 18833, 497, 14800, 18833, 10641, 9467, 11936, 18835, 6718, 18840, 18844, 18847, 897, 10641, 20181, 15642, 18847, 897, 14373, 13341, 18774, 18847, 897, 14625, 7817, 19808, 18847, 897, 15781, 13341, 19808, 18847, 3077, 6430, 18847, 3189, 1912, 18847, 6779, 6430, 18847, 7591, 15435, 8320, 18847, 7591, 15435, 8321, 12589, 7122, 18847, 7591, 15435, 8321, 13889, 7122, 18847, 7591, 15435, 10641, 15873, 13579, 8320, 18847, 7591, 15435, 10641, 15873, 13579, 8321, 13889, 7122, 18847, 7854, 18847, 7855, 10641, 14487, 11392, 18847, 7855, 10641, 14487, 11552, 18847, 7855, 10641, 15119, 1216, 18847, 7855, 19242, 18847, 8315, 10641, 15643, 9854, 18847, 13758, 18847, 15945, 7854, 18847, 17393, 12562, 18847, 18016, 18847, 20727, 19371, 8320, 18851, 15620, 18881, 635, 3245, 17306, 18883, 17374, 18891, 16929, 7817, 3537, 17392, 18892, 18894, 18897, 20173, 3896, 18897, 20173, 3898, 18897, 20173, 3900, 18897, 20173, 3902, 18897, 20173, 3904, 18897, 20173, 3906, 18897, 20173, 3908, 18897, 20173, 3910, 18897, 20173, 3912, 18897, 20173, 3914, 18897, 20173, 3916, 18897, 20173, 3918, 18897, 20173, 3920, 18897, 20173, 3922, 18897, 20173, 3924, 18897, 20173, 3926, 18897, 20173, 3928, 18897, 20173, 3930, 18897, 20173, 3932, 18897, 20173, 3934, 18897, 20173, 3936, 18897, 20173, 3938, 18897, 20173, 3940, 18897, 20173, 3942, 18897, 20173, 3944, 18897, 20173, 3946, 18897, 20173, 3948, 18897, 20173, 3950, 18897, 20173, 3952, 18897, 20173, 3954, 18897, 20173, 3956, 18897, 20173, 3958, 18897, 20173, 3960, 18897, 20173, 3962, 18897, 20173, 3964, 18897, 20173, 3966, 18897, 20173, 3968, 18897, 20173, 3970, 18897, 20173, 3972, 18897, 20173, 3974, 18897, 20173, 3976, 18897, 20173, 3978, 18897, 20173, 3980, 18897, 20173, 3982, 18897, 20173, 3984, 18897, 20173, 3986, 18897, 20173, 3988, 18897, 20173, 3990, 18897, 20173, 3992, 18897, 20173, 3994, 18897, 20173, 3996, 18897, 20173, 3998, 18897, 20173, 4000, 18897, 20173, 4002, 18897, 20173, 4004, 18897, 20173, 4006, 18897, 20173, 4008, 18897, 20173, 4010, 18897, 20173, 4012, 18897, 20173, 4014, 18897, 20173, 4016, 18897, 20173, 4018, 18897, 20173, 4020, 18897, 20173, 4022, 18897, 20173, 4024, 18897, 20173, 4026, 18897, 20173, 4028, 18897, 20173, 4030, 18897, 20173, 4032, 18897, 20173, 4034, 18897, 20173, 4036, 18897, 20173, 4038, 18897, 20173, 4040, 18897, 20173, 4042, 18897, 20173, 4044, 18897, 20173, 4046, 18897, 20173, 4048, 18897, 20173, 4050, 18897, 20173, 4052, 18897, 20173, 4054, 18897, 20173, 4056, 18897, 20173, 4058, 18897, 20173, 4060, 18897, 20173, 4062, 18897, 20173, 4064, 18897, 20173, 4066, 18897, 20173, 4068, 18897, 20173, 4070, 18897, 20173, 4072, 18897, 20173, 4074, 18897, 20173, 4076, 18897, 20173, 4078, 18897, 20173, 4080, 18897, 20173, 4082, 18897, 20173, 4084, 18897, 20173, 4086, 18897, 20173, 4088, 18897, 20173, 4090, 18897, 20173, 4092, 18897, 20173, 4094, 18897, 20173, 4096, 18897, 20173, 4098, 18897, 20173, 4100, 18897, 20173, 4102, 18897, 20173, 4104, 18897, 20173, 4106, 18897, 20173, 4108, 18897, 20173, 4110, 18897, 20173, 4112, 18897, 20173, 4114, 18897, 20173, 4116, 18897, 20173, 4118, 18897, 20173, 4120, 18897, 20173, 4122, 18897, 20173, 4124, 18897, 20173, 4126, 18897, 20173, 4128, 18897, 20173, 4130, 18897, 20173, 4132, 18897, 20173, 4134, 18897, 20173, 4136, 18897, 20173, 4138, 18897, 20173, 4140, 18897, 20173, 4142, 18897, 20173, 4144, 18897, 20173, 4146, 18897, 20173, 4148, 18897, 20173, 4150, 18897, 20173, 4152, 18897, 20173, 4154, 18897, 20173, 4156, 18897, 20173, 4158, 18897, 20173, 4160, 18897, 20173, 4162, 18897, 20173, 4164, 18897, 20173, 4166, 18897, 20173, 4168, 18897, 20173, 4170, 18897, 20173, 4172, 18897, 20173, 4174, 18897, 20173, 4176, 18897, 20173, 4178, 18897, 20173, 4180, 18897, 20173, 4182, 18897, 20173, 4184, 18897, 20173, 4186, 18897, 20173, 4188, 18897, 20173, 4190, 18897, 20173, 4192, 18897, 20173, 4194, 18897, 20173, 4196, 18897, 20173, 4198, 18897, 20173, 4200, 18897, 20173, 4202, 18897, 20173, 4204, 18897, 20173, 4206, 18897, 20173, 4208, 18897, 20173, 4210, 18897, 20173, 4212, 18897, 20173, 4214, 18897, 20173, 4216, 18897, 20173, 4218, 18897, 20173, 4220, 18897, 20173, 4222, 18897, 20173, 4224, 18897, 20173, 4226, 18897, 20173, 4228, 18897, 20173, 4230, 18897, 20173, 4232, 18897, 20173, 4234, 18897, 20173, 4236, 18897, 20173, 4238, 18897, 20173, 4240, 18897, 20173, 4242, 18897, 20173, 4244, 18897, 20173, 4246, 18897, 20173, 4248, 18897, 20173, 4250, 18897, 20173, 4252, 18897, 20173, 4254, 18897, 20173, 4256, 18897, 20173, 4258, 18897, 20173, 4260, 18897, 20173, 4262, 18897, 20173, 4264, 18897, 20173, 4266, 18897, 20173, 4268, 18897, 20173, 4270, 18897, 20173, 4272, 18897, 20173, 4274, 18897, 20173, 4276, 18897, 20173, 4278, 18897, 20173, 4280, 18897, 20173, 4282, 18897, 20173, 4284, 18897, 20173, 4286, 18897, 20173, 4288, 18897, 20173, 4290, 18897, 20173, 4292, 18897, 20173, 4294, 18897, 20173, 4296, 18897, 20173, 4298, 18897, 20173, 4300, 18897, 20173, 4302, 18897, 20173, 4304, 18897, 20173, 4306, 18897, 20173, 4308, 18897, 20173, 4310, 18897, 20173, 4312, 18897, 20173, 4314, 18897, 20173, 4316, 18897, 20173, 4318, 18897, 20173, 4320, 18897, 20173, 4322, 18897, 20173, 4324, 18897, 20173, 4326, 18897, 20173, 4328, 18897, 20173, 4330, 18897, 20173, 4332, 18897, 20173, 4334, 18897, 20173, 4336, 18897, 20173, 4338, 18897, 20173, 4340, 18897, 20173, 4342, 18897, 20173, 4344, 18897, 20173, 4346, 18897, 20173, 4348, 18897, 20173, 4350, 18897, 20173, 4352, 18897, 20173, 4354, 18897, 20173, 4356, 18897, 20173, 4358, 18897, 20173, 4360, 18897, 20173, 4362, 18897, 20173, 4364, 18897, 20173, 4366, 18897, 20173, 4368, 18897, 20173, 4370, 18897, 20173, 4372, 18897, 20173, 4374, 18897, 20173, 4376, 18897, 20173, 4378, 18897, 20173, 4380, 18897, 20173, 4382, 18897, 20173, 4384, 18897, 20173, 4386, 18897, 20173, 4388, 18897, 20173, 4390, 18897, 20173, 4392, 18897, 20173, 4394, 18897, 20173, 4396, 18897, 20173, 4398, 18897, 20173, 4400, 18897, 20173, 4402, 18897, 20173, 4404, 18897, 20173, 4406, 18897, 20173, 4408, 18897, 20173, 4410, 18897, 20173, 4412, 18897, 20173, 4414, 18897, 20173, 4416, 18897, 20173, 4418, 18897, 20173, 4420, 18897, 20173, 4422, 18897, 20173, 4424, 18897, 20173, 4426, 18897, 20173, 4428, 18897, 20173, 4430, 18897, 20173, 4432, 18897, 20173, 4434, 18897, 20173, 4436, 18897, 20173, 4438, 18897, 20173, 4440, 18897, 20173, 4442, 18897, 20173, 4444, 18897, 20173, 4446, 18897, 20173, 4448, 18897, 20173, 4450, 18897, 20173, 4452, 18897, 20173, 4454, 18897, 20173, 4456, 18897, 20173, 4458, 18897, 20173, 4460, 18897, 20173, 4462, 18897, 20173, 4464, 18897, 20173, 4466, 18897, 20173, 4468, 18897, 20173, 4470, 18897, 20173, 4472, 18897, 20173, 4474, 18897, 20173, 4476, 18897, 20173, 4478, 18897, 20173, 4480, 18897, 20173, 4482, 18897, 20173, 4484, 18897, 20173, 4486, 18897, 20173, 4488, 18897, 20173, 4490, 18897, 20173, 4492, 18897, 20173, 4494, 18897, 20173, 4496, 18897, 20173, 4498, 18897, 20173, 4500, 18897, 20173, 4502, 18897, 20173, 4504, 18897, 20173, 4506, 18897, 20173, 4508, 18897, 20173, 4510, 18897, 20173, 4512, 18897, 20173, 4514, 18897, 20173, 4516, 18897, 20173, 4518, 18897, 20173, 4520, 18897, 20173, 4522, 18897, 20173, 4524, 18897, 20173, 4526, 18897, 20173, 4528, 18897, 20173, 4530, 18897, 20173, 4532, 18897, 20173, 4534, 18897, 20173, 4536, 18897, 20173, 4538, 18897, 20173, 4540, 18897, 20173, 4542, 18897, 20173, 4544, 18897, 20173, 4546, 18897, 20173, 4548, 18897, 20173, 4550, 18897, 20173, 4552, 18897, 20173, 4554, 18897, 20173, 4556, 18897, 20173, 4560, 18897, 20173, 4562, 18897, 20173, 4564, 18897, 20173, 4566, 18897, 20173, 4568, 18897, 20173, 4570, 18897, 20173, 4572, 18897, 20173, 4574, 18897, 20173, 4576, 18897, 20173, 4578, 18897, 20173, 4580, 18897, 20173, 4582, 18897, 20173, 4584, 18897, 20173, 4586, 18897, 20173, 4588, 18897, 20173, 4590, 18897, 20173, 4592, 18897, 20173, 4594, 18897, 20173, 4596, 18897, 20173, 4598, 18897, 20173, 4600, 18897, 20173, 4602, 18897, 20173, 4604, 18897, 20173, 4606, 18897, 20173, 4608, 18897, 20173, 4610, 18897, 20173, 4612, 18897, 20173, 4614, 18897, 20173, 4616, 18897, 20173, 4618, 18897, 20173, 4620, 18897, 20173, 4622, 18897, 20173, 4624, 18897, 20173, 4626, 18897, 20173, 4628, 18897, 20173, 4630, 18897, 20173, 4632, 18897, 20173, 4634, 18897, 20173, 4636, 18897, 20173, 4638, 18897, 20173, 4640, 18897, 20173, 4642, 18897, 20173, 4644, 18897, 20173, 4646, 18897, 20173, 4648, 18897, 20173, 4650, 18897, 20173, 4652, 18897, 20173, 4654, 18897, 20173, 4656, 18897, 20173, 4658, 18897, 20173, 4661, 573, 505, 578, 18897, 20173, 4662, 18897, 20173, 4664, 18897, 20173, 4666, 18897, 20173, 4668, 18897, 20173, 4670, 18897, 20173, 4672, 18897, 20173, 4674, 18897, 20173, 4676, 18897, 20173, 4678, 18897, 20173, 4681, 11978, 18897, 20173, 4682, 18897, 20173, 4684, 18897, 20173, 4686, 18897, 20173, 4688, 18897, 20173, 4690, 18897, 20173, 4692, 18897, 20173, 4694, 18897, 20173, 4696, 18897, 20173, 4698, 18897, 20173, 4700, 18897, 20173, 4702, 18897, 20173, 4704, 18897, 20173, 4706, 18897, 20173, 4708, 18897, 20173, 4710, 18897, 20173, 4712, 18897, 20173, 4715, 11547, 18257, 8320, 18897, 20173, 4716, 18897, 20173, 4718, 18897, 20173, 4720, 18897, 20173, 4722, 18897, 20173, 4724, 18897, 20173, 4726, 18897, 20173, 4728, 18897, 20173, 4730, 18897, 20173, 4732, 18897, 20173, 4734, 18897, 20173, 4736, 18897, 20173, 4738, 18897, 20173, 4740, 18897, 20173, 4742, 18897, 20173, 4744, 18897, 20173, 4746, 18897, 20173, 4748, 18897, 20173, 4750, 18897, 20173, 4752, 18897, 20173, 4754, 18897, 20173, 4756, 18897, 20173, 4758, 18897, 20173, 4760, 18897, 20173, 4762, 18897, 20173, 4764, 18897, 20173, 4766, 18897, 20173, 4768, 18897, 20173, 4770, 18897, 20173, 4772, 18897, 20173, 4774, 18897, 20173, 4776, 18897, 20173, 4778, 18897, 20173, 4780, 18897, 20173, 4782, 18897, 20173, 4784, 18897, 20173, 4786, 18897, 20173, 4788, 18897, 20173, 4790, 18897, 20173, 4792, 18897, 20173, 4794, 18897, 20173, 4796, 18897, 20173, 4798, 18897, 20173, 4800, 18897, 20173, 4802, 18897, 20173, 4804, 18897, 20173, 4806, 18897, 20173, 4808, 18897, 20173, 4810, 18897, 20173, 4812, 18897, 20173, 4814, 18897, 20173, 4816, 18897, 20173, 4818, 18897, 20173, 4820, 18897, 20173, 4822, 18897, 20173, 4824, 18897, 20173, 4826, 18897, 20173, 4828, 18897, 20173, 4830, 18897, 20173, 4832, 18897, 20173, 4834, 18897, 20173, 4836, 18897, 20173, 4838, 18897, 20173, 4840, 18897, 20173, 4842, 18897, 20173, 4844, 18897, 20173, 4846, 18897, 20173, 4848, 18897, 20173, 4850, 18897, 20173, 4852, 18897, 20173, 4854, 18897, 20173, 4856, 18897, 20173, 4858, 18897, 20173, 4860, 18897, 20173, 4862, 18897, 20173, 4864, 18897, 20173, 4866, 18897, 20173, 4868, 18897, 20173, 4870, 18897, 20173, 4872, 18897, 20173, 4874, 18897, 20173, 4876, 18897, 20173, 4878, 18897, 20173, 4880, 18897, 20173, 4882, 18897, 20173, 4884, 18897, 20173, 4886, 18897, 20173, 4888, 18897, 20173, 4890, 18897, 20173, 4892, 18897, 20173, 4894, 18897, 20173, 4896, 18897, 20173, 4898, 18897, 20173, 4900, 18897, 20173, 4902, 18897, 20173, 4904, 18897, 20173, 4906, 18897, 20173, 4908, 18897, 20173, 4910, 18897, 20173, 4912, 18897, 20173, 4914, 18897, 20173, 4916, 18897, 20173, 4918, 18897, 20173, 4920, 18897, 20173, 4922, 18897, 20173, 4924, 18897, 20173, 4926, 18897, 20173, 4928, 18897, 20173, 4930, 18897, 20173, 4932, 18897, 20173, 4934, 18897, 20173, 4936, 18897, 20173, 4938, 18897, 20173, 4940, 18897, 20173, 4942, 18897, 20173, 4944, 18897, 20173, 4946, 18897, 20173, 4948, 18897, 20173, 11036, 18897, 20173, 11042, 18897, 20173, 11048, 18897, 20173, 11052, 18897, 20173, 11058, 18897, 20173, 11060, 18897, 20173, 11062, 18897, 20173, 11064, 18897, 20173, 11066, 18897, 20173, 11068, 18897, 20173, 11070, 18897, 20173, 11072, 18897, 20173, 11074, 18897, 20173, 11076, 18897, 20173, 11078, 18897, 20173, 11080, 18897, 20173, 11082, 18897, 20173, 11084, 18897, 20173, 11086, 18897, 20173, 11088, 18897, 20173, 11090, 18897, 20173, 11092, 18897, 20173, 11094, 18897, 20173, 11096, 18897, 20173, 11098, 18897, 20173, 11100, 18897, 20173, 11104, 18897, 20173, 11108, 18897, 20173, 11110, 18897, 20173, 11112, 18897, 20173, 11114, 18897, 20173, 11116, 18897, 20173, 11118, 18897, 20173, 11120, 18897, 20173, 11122, 18897, 20173, 11124, 18897, 20173, 11126, 18897, 20173, 11128, 18897, 20173, 11130, 18897, 20173, 11132, 18897, 20173, 11144, 18897, 20173, 11146, 18897, 20173, 11148, 18897, 20173, 11150, 18897, 20173, 11152, 18897, 20173, 11154, 18897, 20173, 11156, 18897, 20173, 11158, 18897, 20173, 11160, 18897, 20173, 11162, 18897, 20173, 11164, 18897, 20173, 11166, 18897, 20173, 11168, 18897, 20173, 11170, 18897, 20173, 11173, 1299, 18257, 8320, 18897, 20173, 11174, 18897, 20173, 11176, 18899, 6718, 18909, 8846, 18912, 18918, 18921, 15709, 16740, 18927, 17089, 843, 20912, 18933, 1449, 18060, 18933, 1449, 18062, 18933, 9855, 15868, 18933, 9855, 17486, 18933, 9855, 17610, 18933, 9855, 17652, 18933, 9855, 20552, 18933, 10651, 19618, 18933, 11854, 18933, 11905, 2610, 18933, 11905, 3076, 18933, 11905, 3356, 18933, 11905, 6756, 18933, 11905, 6778, 18933, 11905, 8780, 18933, 11905, 10900, 18933, 11905, 11978, 18933, 11905, 13450, 18933, 11905, 13736, 18933, 14003, 9855, 8, 18933, 14003, 9855, 16, 18933, 14003, 9855, 28, 18933, 14003, 9855, 40, 18933, 14003, 9855, 58, 18933, 14003, 9855, 72, 18933, 14003, 9855, 94, 18933, 14003, 9855, 308, 18933, 14003, 9855, 676, 18933, 14003, 9855, 17493, 22, 18933, 14003, 9855, 17493, 34, 18933, 14003, 9855, 17493, 582, 18933, 14625, 11854, 18933, 14999, 0, 18933, 14999, 8, 18933, 14999, 16, 18933, 14999, 28, 18933, 14999, 40, 18933, 14999, 58, 18933, 14999, 72, 18933, 14999, 94, 18933, 14999, 106, 18933, 14999, 124, 18933, 14999, 148, 18933, 14999, 244, 18933, 14999, 266, 18933, 14999, 308, 18933, 14999, 336, 18933, 14999, 350, 18933, 14999, 384, 18933, 14999, 416, 18933, 14999, 448, 18933, 14999, 522, 18933, 14999, 572, 18933, 14999, 588, 18933, 14999, 622, 18933, 14999, 676, 18933, 14999, 680, 18933, 14999, 734, 18933, 14999, 932, 18933, 14999, 1044, 18933, 14999, 1142, 18933, 14999, 1164, 18933, 14999, 1492, 18933, 14999, 1796, 18933, 14999, 1914, 18933, 14999, 2444, 18933, 14999, 2492, 18933, 14999, 2556, 18933, 14999, 2676, 18933, 14999, 3048, 18933, 14999, 3114, 18933, 14999, 3242, 18933, 14999, 3322, 18933, 14999, 6314, 18933, 14999, 10264, 18933, 14999, 17493, 22, 18933, 14999, 17493, 34, 18933, 14999, 17493, 582, 18933, 15233, 2610, 18933, 15233, 3076, 18933, 15233, 3232, 18933, 15233, 3356, 18933, 15233, 6756, 18933, 15233, 6778, 18933, 15233, 8780, 18933, 15233, 11978, 18933, 15233, 12080, 18933, 15233, 12108, 18933, 15233, 13450, 18933, 15233, 13538, 18933, 15233, 13736, 18933, 15233, 14636, 18933, 15233, 15194, 18933, 15233, 15736, 18933, 15233, 15820, 18933, 15233, 17190, 18933, 18157, 10423, 8320, 18934, 18936, 18941, 9854, 18954, 18958, 18961, 16831, 15673, 1252, 18961, 16831, 15673, 1335, 20674, 18961, 16831, 15673, 5278, 18961, 16831, 15673, 7445, 2434, 18961, 16831, 15673, 7445, 17624, 18961, 16831, 15673, 8598, 18961, 16831, 15673, 10157, 1871, 15996, 18961, 16831, 15673, 10230, 18961, 16831, 15673, 10789, 848, 18961, 16831, 15673, 10789, 7602, 18961, 16831, 15673, 11407, 5288, 18961, 16831, 15673, 11407, 8370, 18961, 16831, 15673, 11407, 9291, 5288, 18961, 16831, 15673, 11407, 9291, 12222, 18961, 16831, 15673, 11407, 12222, 18961, 16831, 15673, 11407, 15106, 18961, 16831, 15673, 11407, 17626, 18961, 16831, 15673, 11407, 19294, 18961, 16831, 15673, 11459, 1335, 2434, 18961, 16831, 15673, 11459, 20674, 18961, 16831, 15673, 11468, 18961, 16831, 15673, 11719, 14218, 18961, 16831, 15673, 11719, 14948, 18961, 16831, 15673, 11719, 15598, 18961, 16831, 15673, 11906, 18961, 16831, 15673, 11907, 17624, 18961, 16831, 15673, 12550, 18961, 16831, 15673, 13165, 2434, 18961, 16831, 15673, 13165, 11906, 18961, 16831, 15673, 13165, 20674, 18961, 16831, 15673, 13268, 18961, 16831, 15673, 13330, 18961, 16831, 15673, 13664, 18961, 16831, 15673, 13714, 18961, 16831, 15673, 13715, 14294, 18961, 16831, 15673, 13730, 18961, 16831, 15673, 13980, 18961, 16831, 15673, 14089, 14946, 18961, 16831, 15673, 14552, 18961, 16831, 15673, 14583, 5279, 1253, 17868, 18961, 16831, 15673, 14583, 19069, 221, 17868, 18961, 16831, 15673, 14583, 20483, 9161, 17868, 18961, 16831, 15673, 14583, 20807, 17353, 17868, 18961, 16831, 15673, 14583, 20960, 18961, 16831, 15673, 14583, 22936, 18961, 16831, 15673, 14651, 20840, 18961, 16831, 15673, 14651, 21282, 18961, 16831, 15673, 14691, 17235, 14481, 13978, 18961, 16831, 15673, 14749, 17, 15929, 22936, 18961, 16831, 15673, 14749, 8605, 12372, 18961, 16831, 15673, 14749, 15164, 18961, 16831, 15673, 14749, 16757, 14481, 17848, 18961, 16831, 15673, 14749, 16757, 14481, 20260, 18961, 16831, 15673, 14749, 17235, 14481, 13978, 18961, 16831, 15673, 14749, 17235, 14481, 15674, 18961, 16831, 15673, 14749, 17235, 17847, 158, 18961, 16831, 15673, 14749, 17624, 18961, 16831, 15673, 14749, 17625, 17837, 12374, 18961, 16831, 15673, 14749, 19065, 158, 18961, 16831, 15673, 14749, 19065, 354, 18961, 16831, 15673, 14749, 19065, 461, 848, 18961, 16831, 15673, 14749, 19065, 461, 7602, 18961, 16831, 15673, 14749, 19065, 522, 18961, 16831, 15673, 14749, 19065, 760, 18961, 16831, 15673, 14749, 19065, 8598, 18961, 16831, 15673, 14749, 20109, 18900, 18961, 16831, 15673, 14763, 14582, 18961, 16831, 15673, 14763, 15928, 18961, 16831, 15673, 14791, 2435, 848, 18961, 16831, 15673, 14791, 2435, 7602, 18961, 16831, 15673, 14791, 17624, 18961, 16831, 15673, 14791, 22893, 11896, 18961, 16831, 15673, 14791, 22893, 17628, 18961, 16831, 15673, 14877, 15711, 19336, 18961, 16831, 15673, 14905, 18780, 18961, 16831, 15673, 14946, 18961, 16831, 15673, 14947, 848, 18961, 16831, 15673, 14947, 7602, 18961, 16831, 15673, 14991, 1253, 16148, 18961, 16831, 15673, 14991, 6577, 16150, 18961, 16831, 15673, 14991, 13815, 16148, 18961, 16831, 15673, 14991, 16519, 16150, 18961, 16831, 15673, 14991, 18733, 16148, 18961, 16831, 15673, 15121, 7444, 18961, 16831, 15673, 15249, 2434, 18961, 16831, 15673, 15249, 17624, 18961, 16831, 15673, 15250, 18961, 16831, 15673, 15281, 17624, 18961, 16831, 15673, 15335, 2434, 18961, 16831, 15673, 15335, 17624, 18961, 16831, 15673, 15394, 18961, 16831, 15673, 15512, 18961, 16831, 15673, 15513, 2434, 18961, 16831, 15673, 15628, 18961, 16831, 15673, 15706, 18961, 16831, 15673, 15782, 18961, 16831, 15673, 15857, 2434, 18961, 16831, 15673, 15857, 11906, 18961, 16831, 15673, 15857, 20674, 18961, 16831, 15673, 15929, 5279, 1253, 17868, 18961, 16831, 15673, 15929, 19069, 221, 17868, 18961, 16831, 15673, 15929, 20483, 9161, 17868, 18961, 16831, 15673, 15929, 20807, 17353, 17868, 18961, 16831, 15673, 15929, 20960, 18961, 16831, 15673, 15934, 18961, 16831, 15673, 16015, 158, 18961, 16831, 15673, 16015, 244, 18961, 16831, 15673, 16015, 354, 18961, 16831, 15673, 16015, 460, 18961, 16831, 15673, 16015, 522, 18961, 16831, 15673, 16015, 760, 18961, 16831, 15673, 16015, 3492, 18961, 16831, 15673, 16128, 18961, 16831, 15673, 16250, 18961, 16831, 15673, 16358, 18961, 16831, 15673, 16369, 1871, 14749, 3492, 18961, 16831, 15673, 16510, 18961, 16831, 15673, 16569, 2435, 848, 18961, 16831, 15673, 16569, 2435, 7602, 18961, 16831, 15673, 16569, 2435, 8372, 18961, 16831, 15673, 16569, 17624, 18961, 16831, 15673, 16596, 18961, 16831, 15673, 16599, 2434, 18961, 16831, 15673, 16599, 5254, 18961, 16831, 15673, 16599, 17624, 18961, 16831, 15673, 16604, 18961, 16831, 15673, 16736, 18961, 16831, 15673, 17008, 18961, 16831, 15673, 17010, 18961, 16831, 15673, 17100, 18961, 16831, 15673, 17292, 18961, 16831, 15673, 17293, 17614, 18961, 16831, 15673, 17325, 2434, 18961, 16831, 15673, 17325, 8375, 17294, 18961, 16831, 15673, 17325, 17624, 18961, 16831, 15673, 17326, 18961, 16831, 15673, 17352, 18961, 16831, 15673, 17378, 18961, 16831, 15673, 17471, 17624, 18961, 16831, 15673, 17538, 18961, 16831, 15673, 17613, 2434, 18961, 16831, 15673, 17613, 17624, 18961, 16831, 15673, 17616, 18961, 16831, 15673, 17726, 18961, 16831, 15673, 17747, 2434, 18961, 16831, 15673, 17747, 17624, 18961, 16831, 15673, 17845, 5279, 12734, 18961, 16831, 15673, 17845, 5279, 15098, 18961, 16831, 15673, 17845, 11906, 18961, 16831, 15673, 17845, 17360, 18961, 16831, 15673, 17850, 18961, 16831, 15673, 17851, 22893, 11896, 18961, 16831, 15673, 17851, 22893, 17629, 848, 18961, 16831, 15673, 17851, 22893, 17629, 7602, 18961, 16831, 15673, 17853, 250, 18961, 16831, 15673, 18028, 18961, 16831, 15673, 18162, 18961, 16831, 15673, 18210, 18961, 16831, 15673, 18216, 18961, 16831, 15673, 18217, 5254, 18961, 16831, 15673, 18218, 18961, 16831, 15673, 18220, 18961, 16831, 15673, 18287, 5253, 15393, 12372, 18961, 16831, 15673, 18287, 5253, 17835, 12372, 18961, 16831, 15673, 18287, 13977, 12372, 18961, 16831, 15673, 18287, 15393, 12372, 18961, 16831, 15673, 18287, 15787, 12372, 18961, 16831, 15673, 18287, 16711, 12372, 18961, 16831, 15673, 18287, 17039, 12372, 18961, 16831, 15673, 18287, 17039, 18735, 12372, 18961, 16831, 15673, 18287, 17835, 12372, 18961, 16831, 15673, 18287, 18735, 12372, 18961, 16831, 15673, 18287, 18735, 16711, 12372, 18961, 16831, 15673, 18287, 19798, 18961, 16831, 15673, 18287, 20345, 12372, 18961, 16831, 15673, 18432, 18961, 16831, 15673, 18444, 18961, 16831, 15673, 18445, 2434, 18961, 16831, 15673, 18564, 18961, 16831, 15673, 18601, 14314, 18961, 16831, 15673, 18601, 14315, 16264, 18961, 16831, 15673, 18601, 14315, 18778, 18961, 16831, 15673, 18601, 14315, 20472, 18961, 16831, 15673, 18601, 17360, 18961, 16831, 15673, 18601, 17361, 16264, 18961, 16831, 15673, 18601, 17361, 18778, 18961, 16831, 15673, 18601, 17361, 20472, 18961, 16831, 15673, 18736, 18961, 16831, 15673, 18781, 2434, 18961, 16831, 15673, 18781, 5254, 18961, 16831, 15673, 18781, 17624, 18961, 16831, 15673, 19067, 510, 18961, 16831, 15673, 19232, 18961, 16831, 15673, 19255, 17848, 18961, 16831, 15673, 19255, 20260, 18961, 16831, 15673, 19255, 20942, 18961, 16831, 15673, 19344, 18961, 16831, 15673, 19378, 18961, 16831, 15673, 19382, 18961, 16831, 15673, 19383, 2435, 848, 18961, 16831, 15673, 19383, 2435, 7602, 18961, 16831, 15673, 19383, 2435, 8372, 18961, 16831, 15673, 19383, 17624, 18961, 16831, 15673, 19392, 18961, 16831, 15673, 19493, 2434, 18961, 16831, 15673, 19493, 17624, 18961, 16831, 15673, 19548, 18961, 16831, 15673, 19549, 2434, 18961, 16831, 15673, 19764, 18961, 16831, 15673, 19800, 18961, 16831, 15673, 19852, 18961, 16831, 15673, 19853, 11906, 18961, 16831, 15673, 19870, 18961, 16831, 15673, 19877, 15711, 19336, 18961, 16831, 15673, 19877, 19763, 2434, 18961, 16831, 15673, 19878, 18961, 16831, 15673, 19879, 2434, 18961, 16831, 15673, 19879, 11906, 18961, 16831, 15673, 20102, 18961, 16831, 15673, 20159, 27, 14294, 18961, 16831, 15673, 20159, 27, 16262, 18961, 16831, 15673, 20186, 18961, 16831, 15673, 20188, 18961, 16831, 15673, 20841, 2434, 18961, 16831, 15673, 20841, 17624, 18961, 16831, 15673, 20842, 18961, 16831, 15673, 20843, 2434, 18961, 16831, 15673, 20843, 17624, 18961, 16831, 15673, 20854, 18961, 16831, 15673, 20947, 1320, 18961, 16831, 15673, 20947, 1334, 18961, 16831, 15673, 20998, 18961, 16831, 15673, 21098, 18961, 16831, 15673, 21232, 18961, 16831, 15673, 21282, 18961, 16831, 15673, 22984, 18961, 16831, 15673, 23142, 18961, 16831, 15673, 23144, 18961, 16831, 15673, 23250, 18961, 16831, 15673, 23270, 18961, 16831, 15673, 23272, 18961, 16831, 15673, 23280, 18961, 16831, 15673, 23286, 18961, 16831, 15673, 23288, 18961, 16831, 15673, 23444, 18961, 16831, 15673, 23528, 18961, 16831, 15673, 23538, 18962, 18964, 18975, 17593, 14999, 178, 18975, 17593, 14999, 496, 18975, 17593, 14999, 838, 18975, 17593, 14999, 852, 18975, 17593, 14999, 928, 18975, 17593, 14999, 1016, 18975, 17593, 14999, 1044, 18975, 17593, 14999, 1048, 18975, 17593, 14999, 1136, 18975, 17593, 14999, 1338, 18975, 17593, 14999, 1348, 18975, 17593, 14999, 1510, 18975, 17593, 14999, 1768, 18975, 17593, 14999, 1778, 18975, 17593, 14999, 1884, 18975, 17593, 14999, 1946, 18975, 17593, 14999, 2078, 18975, 17593, 14999, 2248, 18975, 17593, 14999, 2668, 18975, 17593, 14999, 2770, 18975, 17593, 14999, 2774, 18975, 17593, 14999, 2886, 18975, 17593, 14999, 3048, 18975, 17593, 14999, 3212, 18975, 17593, 14999, 3812, 18975, 17593, 14999, 5982, 18975, 17593, 14999, 6018, 18975, 17593, 14999, 6052, 18975, 17593, 14999, 6130, 18975, 17593, 14999, 6132, 18975, 17593, 14999, 6460, 18975, 17593, 14999, 6466, 18975, 17593, 14999, 7158, 18975, 17593, 14999, 7436, 18975, 17593, 14999, 7462, 18975, 17593, 14999, 7476, 18975, 17593, 14999, 7910, 18975, 17593, 14999, 8854, 18975, 17593, 14999, 9274, 18975, 17593, 14999, 9726, 18975, 17593, 14999, 9744, 18975, 17593, 14999, 9800, 18975, 17593, 14999, 10202, 18975, 17593, 14999, 10310, 18975, 17593, 14999, 10538, 18975, 17593, 14999, 10684, 18975, 17593, 14999, 10766, 18975, 17593, 14999, 10818, 18975, 17593, 14999, 10894, 18975, 17593, 14999, 10922, 18975, 17593, 14999, 11946, 18975, 17593, 14999, 12198, 18975, 17593, 17757, 8320, 18979, 3256, 18983, 6758, 18985, 896, 18987, 10228, 18988, 18989, 93, 6458, 18991, 15127, 13220, 18993, 17700, 18994, 18997, 3293, 20385, 11476, 18997, 9171, 14487, 11476, 18997, 13341, 843, 7817, 20385, 14312, 18997, 14497, 14487, 11476, 18997, 14753, 14487, 11476, 18997, 16179, 18176, 18997, 18176, 18997, 19215, 843, 17463, 9171, 14487, 14312, 18997, 20375, 843, 19407, 9171, 14487, 14312, 18997, 20375, 843, 19407, 9171, 14487, 14313, 10641, 16153, 2611, 16950, 18997, 23305, 9171, 14487, 11476, 19001, 15672, 19003, 47, 11392, 19003, 47, 11552, 19003, 327, 11552, 19003, 671, 10087, 11392, 19003, 671, 10087, 11552, 19003, 673, 11392, 19003, 675, 11392, 19003, 1217, 11392, 19003, 1217, 11393, 13340, 19003, 1217, 11552, 19003, 2175, 7854, 19003, 2511, 13759, 11392, 19003, 2607, 15317, 14999, 80, 19003, 2607, 15317, 14999, 1208, 19003, 2607, 15317, 14999, 3068, 19003, 2607, 15317, 14999, 10896, 19003, 2607, 15317, 14999, 12838, 19003, 3589, 11552, 19003, 6435, 10087, 11552, 19003, 6779, 6431, 11392, 19003, 7293, 11392, 19003, 7304, 19003, 7817, 7123, 9503, 11392, 19003, 7817, 7123, 9503, 11552, 19003, 7817, 10087, 11552, 19003, 7817, 11447, 11392, 19003, 7817, 11447, 11552, 19003, 7817, 11477, 11392, 19003, 7817, 11477, 11552, 19003, 7817, 13341, 11477, 11392, 19003, 7817, 13341, 11477, 11552, 19003, 7817, 16481, 11392, 19003, 7817, 18907, 11392, 19003, 7817, 18907, 11552, 19003, 7883, 14625, 17255, 16950, 19003, 7883, 15643, 16950, 19003, 7883, 17255, 16950, 19003, 7883, 18847, 7855, 16950, 19003, 9171, 8321, 11552, 19003, 9287, 9855, 11552, 19003, 9503, 11392, 19003, 9503, 11552, 19003, 9503, 16950, 19003, 10633, 14409, 11392, 19003, 11395, 10219, 8320, 19003, 11395, 14262, 19003, 11395, 14263, 11552, 19003, 11596, 19003, 11597, 11552, 19003, 11656, 19003, 11657, 11552, 19003, 11763, 11392, 19003, 11763, 11393, 13340, 19003, 11763, 11552, 19003, 12233, 10219, 8320, 19003, 12233, 14262, 19003, 12233, 14263, 11552, 19003, 12237, 16596, 19003, 12237, 16831, 17402, 19003, 12237, 16831, 19518, 19003, 12237, 16831, 19778, 19003, 12237, 19063, 13792, 19003, 12237, 20854, 19003, 12237, 22960, 19003, 12541, 13563, 14999, 0, 19003, 12541, 13563, 14999, 1, 10641, 19058, 19003, 12541, 13563, 14999, 2, 19003, 12541, 13563, 14999, 4, 19003, 12541, 13563, 14999, 5, 16120, 19003, 12541, 13563, 14999, 6, 19003, 12541, 13563, 14999, 8, 19003, 12541, 13563, 14999, 10, 19003, 12541, 13563, 14999, 12, 19003, 12541, 13563, 14999, 14, 19003, 12541, 13563, 14999, 16, 19003, 12541, 13563, 14999, 20, 19003, 12541, 13563, 14999, 22, 19003, 12541, 13563, 14999, 23, 10641, 14625, 15119, 13758, 19003, 12541, 13563, 14999, 24, 19003, 12541, 13563, 14999, 26, 19003, 12541, 13563, 14999, 28, 19003, 12541, 13563, 14999, 29, 10641, 12563, 22977, 15642, 19003, 12541, 13563, 14999, 29, 10641, 19058, 19003, 12541, 13563, 14999, 30, 19003, 12541, 13563, 14999, 34, 19003, 12541, 13563, 14999, 35, 11552, 19003, 12541, 13563, 14999, 35, 17140, 19003, 12541, 13563, 14999, 36, 19003, 12541, 13563, 14999, 38, 19003, 12541, 13563, 14999, 40, 19003, 12541, 13563, 14999, 41, 10641, 12563, 22977, 15642, 19003, 12541, 13563, 14999, 41, 10641, 19058, 19003, 12541, 13563, 14999, 42, 19003, 12541, 13563, 14999, 44, 19003, 12541, 13563, 14999, 46, 19003, 12541, 13563, 14999, 50, 19003, 12541, 13563, 14999, 66, 19003, 12541, 13563, 14999, 82, 19003, 12541, 13563, 14999, 96, 19003, 12541, 13563, 14999, 1318, 19003, 12541, 13563, 14999, 1328, 19003, 12541, 13563, 14999, 5816, 19003, 12541, 13563, 14999, 7883, 36, 19003, 12541, 13563, 14999, 11436, 19003, 12541, 13563, 14999, 13432, 19003, 12541, 13563, 14999, 16527, 6, 19003, 12541, 13563, 14999, 19267, 9171, 1, 11392, 19003, 12541, 14999, 13563, 16111, 12, 19003, 12541, 14999, 13563, 16111, 22, 19003, 12541, 14999, 13563, 16111, 24, 19003, 12541, 14999, 13563, 16111, 26, 19003, 12541, 14999, 13563, 16111, 34, 19003, 12563, 22977, 15643, 11552, 19003, 12741, 9855, 11552, 19003, 13341, 7123, 9503, 11392, 19003, 13341, 7123, 9503, 11552, 19003, 13341, 10087, 11552, 19003, 13341, 11477, 11392, 19003, 13341, 11477, 11552, 19003, 13341, 16481, 11392, 19003, 13341, 18907, 843, 671, 18907, 11552, 19003, 13341, 18907, 843, 6435, 18907, 11552, 19003, 13341, 18907, 11392, 19003, 13341, 18907, 11552, 19003, 13507, 15643, 16950, 19003, 13507, 17255, 16950, 19003, 13507, 18847, 7855, 16950, 19003, 13573, 11552, 19003, 13737, 6431, 11392, 19003, 13758, 19003, 13759, 7817, 7123, 11552, 19003, 13759, 11552, 19003, 13759, 13341, 7123, 11552, 19003, 13759, 16950, 19003, 14281, 12005, 635, 11392, 19003, 14281, 12005, 635, 11552, 19003, 14409, 11392, 19003, 14409, 11552, 19003, 14623, 11395, 14262, 19003, 14623, 12233, 14262, 19003, 14625, 2175, 7854, 19003, 14625, 9171, 8321, 11552, 19003, 14625, 9503, 11552, 19003, 14625, 11395, 14262, 19003, 14625, 11596, 19003, 14625, 11597, 11552, 19003, 14625, 12233, 14262, 19003, 14625, 13758, 19003, 14625, 13759, 7817, 7122, 19003, 14625, 13759, 13341, 7122, 19003, 14625, 15050, 19003, 14625, 15051, 11552, 19003, 14625, 18183, 11596, 19003, 14625, 18183, 11597, 11552, 19003, 14625, 18400, 19003, 14625, 18847, 7855, 11392, 19003, 14625, 18847, 7855, 11552, 19003, 14625, 18847, 15643, 16950, 19003, 14625, 19921, 11392, 19003, 14625, 20375, 11477, 11552, 19003, 14625, 20845, 11392, 19003, 14647, 9855, 11552, 19003, 15050, 19003, 15051, 7817, 7122, 19003, 15051, 7817, 7123, 11552, 19003, 15051, 11552, 19003, 15051, 13341, 7122, 19003, 15051, 13341, 7123, 11552, 19003, 15246, 19003, 15247, 11392, 19003, 15621, 11552, 19003, 15645, 22977, 15643, 11552, 19003, 15781, 1216, 19003, 15781, 18838, 19003, 15811, 11763, 11392, 19003, 15893, 7855, 11552, 19003, 15945, 11392, 19003, 15945, 11552, 19003, 15993, 15672, 19003, 16120, 19003, 16337, 19921, 14262, 19003, 16398, 19003, 16457, 11905, 2610, 19003, 16457, 11905, 3076, 19003, 16457, 11905, 3356, 19003, 16457, 11905, 6756, 19003, 16457, 11905, 6778, 19003, 16457, 11905, 10900, 19003, 16457, 11905, 13736, 19003, 16457, 14999, 0, 19003, 16457, 14999, 350, 19003, 16457, 14999, 448, 19003, 16457, 14999, 522, 19003, 16457, 14999, 684, 19003, 17123, 17255, 16950, 19003, 17177, 11552, 19003, 17463, 11477, 11552, 19003, 17643, 11392, 19003, 17643, 11552, 19003, 17809, 3233, 18311, 9854, 19003, 17809, 11865, 18468, 19003, 17809, 13269, 18468, 19003, 17809, 13774, 19003, 17809, 13775, 7817, 7122, 19003, 17809, 13775, 13341, 7122, 19003, 17809, 14004, 19003, 17809, 14906, 19003, 17809, 14999, 0, 19003, 17809, 14999, 16, 19003, 17809, 14999, 28, 19003, 17809, 14999, 40, 19003, 17809, 14999, 110, 19003, 17809, 14999, 154, 19003, 17809, 14999, 186, 19003, 17809, 14999, 198, 19003, 17809, 14999, 200, 19003, 17809, 14999, 202, 19003, 17809, 14999, 208, 19003, 17809, 14999, 210, 19003, 17809, 14999, 266, 19003, 17809, 14999, 300, 19003, 17809, 14999, 350, 19003, 17809, 14999, 528, 19003, 17809, 14999, 626, 19003, 17809, 14999, 682, 19003, 17809, 14999, 738, 19003, 17809, 14999, 746, 19003, 17809, 14999, 754, 19003, 17809, 14999, 947, 3758, 19003, 17809, 14999, 1046, 19003, 17809, 14999, 1494, 19003, 17809, 14999, 3048, 19003, 17809, 14999, 3310, 19003, 17809, 14999, 3680, 19003, 17809, 14999, 3814, 19003, 17809, 14999, 6754, 19003, 17809, 14999, 7131, 9854, 19003, 17809, 14999, 9891, 9854, 19003, 17809, 14999, 10780, 19003, 17809, 14999, 11916, 19003, 17809, 14999, 12012, 19003, 17809, 14999, 13144, 19003, 17809, 14999, 13472, 19003, 17809, 14999, 15031, 3758, 19003, 17809, 14999, 18185, 0, 19003, 17809, 14999, 18185, 8, 19003, 17809, 14999, 18185, 947, 3758, 19003, 17809, 14999, 19449, 662, 19003, 17809, 14999, 19815, 300, 19003, 17809, 16503, 18311, 9854, 19003, 17809, 16503, 19785, 9854, 19003, 17809, 16992, 19003, 17809, 18311, 9854, 19003, 17809, 18472, 19003, 17809, 18745, 18311, 9854, 19003, 17809, 23112, 19003, 17827, 8320, 19003, 18113, 14890, 19003, 18172, 19003, 18183, 11596, 19003, 18183, 11597, 11552, 19003, 18183, 14409, 11552, 19003, 18183, 14625, 5287, 11552, 19003, 18249, 7817, 7122, 19003, 18249, 7817, 7123, 11552, 19003, 18249, 13341, 7122, 19003, 18249, 13341, 7123, 11552, 19003, 18400, 19003, 18543, 11763, 11392, 19003, 18847, 7855, 11392, 19003, 18847, 7855, 11552, 19003, 18847, 13758, 19003, 18997, 9503, 16950, 19003, 18997, 11477, 11392, 19003, 19058, 19003, 19059, 11552, 19003, 19215, 11476, 19003, 19227, 14486, 19003, 19227, 14487, 18922, 19003, 19227, 14924, 19003, 19227, 15498, 19003, 19227, 15620, 19003, 19227, 15847, 18471, 18774, 19003, 19227, 16248, 19003, 19407, 11477, 16950, 19003, 19407, 16481, 10641, 5741, 19214, 19003, 19587, 7293, 11552, 19003, 19921, 14262, 19003, 19921, 14263, 11552, 19003, 19935, 15050, 19003, 19935, 15051, 11552, 19003, 19971, 9855, 17652, 19003, 19971, 11905, 2610, 19003, 19971, 11905, 3076, 19003, 19971, 11905, 3356, 19003, 19971, 11905, 6756, 19003, 19971, 11905, 6778, 19003, 19971, 11905, 8780, 19003, 19971, 11905, 10900, 19003, 19971, 11905, 11978, 19003, 19971, 11905, 13450, 19003, 19971, 11905, 13736, 19003, 19971, 14999, 0, 19003, 19971, 14999, 40, 19003, 19971, 14999, 350, 19003, 19971, 14999, 448, 19003, 19971, 14999, 522, 19003, 19971, 14999, 572, 19003, 19971, 14999, 684, 19003, 20157, 14999, 16, 19003, 20157, 14999, 742, 19003, 20157, 14999, 746, 19003, 20157, 14999, 880, 19003, 20157, 14999, 947, 3758, 19003, 20157, 14999, 2616, 19003, 20157, 14999, 3048, 19003, 20157, 14999, 3312, 19003, 20157, 14999, 3394, 19003, 20157, 14999, 5872, 19003, 20157, 14999, 6754, 19003, 20157, 14999, 7152, 19003, 20157, 14999, 7454, 19003, 20157, 14999, 7584, 19003, 20157, 14999, 9804, 19003, 20157, 14999, 10526, 19003, 20157, 14999, 10760, 19003, 20157, 14999, 10778, 19003, 20157, 14999, 10780, 19003, 20157, 14999, 11920, 19003, 20157, 14999, 12118, 19003, 20157, 14999, 12812, 19003, 20157, 14999, 13344, 19003, 20157, 14999, 13560, 19003, 20157, 14999, 13563, 3758, 19003, 20157, 14999, 14118, 19003, 20157, 14999, 14478, 19003, 20157, 14999, 14594, 19003, 20157, 14999, 15366, 19003, 20157, 14999, 15816, 19003, 20157, 14999, 15938, 19003, 20157, 14999, 16444, 19003, 20157, 14999, 16525, 7454, 19003, 20157, 14999, 16533, 947, 3758, 19003, 20157, 14999, 16533, 13563, 3758, 19003, 20157, 14999, 16724, 19003, 20157, 14999, 16834, 19003, 20157, 14999, 17540, 19003, 20179, 11392, 19003, 20375, 16481, 10641, 5741, 19214, 19003, 20461, 8320, 19003, 20552, 19003, 20835, 7293, 11552, 19003, 20845, 11392, 19003, 20845, 11552, 19003, 20845, 16950, 19003, 20992, 19003, 21026, 19003, 21094, 19003, 21140, 19003, 21142, 19003, 21144, 19003, 21279, 9503, 16950, 19003, 21279, 11477, 11392, 19003, 22980, 19003, 23448, 19003, 23454, 19003, 23459, 15873, 13579, 8320, 19003, 23459, 20909, 13579, 8320, 19009, 10641, 1217, 11392, 19023, 9854, 19028, 19030, 19037, 9855, 0, 19037, 9855, 1, 13765, 0, 19037, 9855, 1, 13765, 266, 19037, 9855, 1, 13765, 884, 19037, 9855, 1, 13765, 1748, 19037, 9855, 1, 13765, 3012, 19037, 9855, 1, 13765, 6927, 10122, 19037, 9855, 1, 13765, 8490, 19037, 9855, 1, 13765, 12523, 7070, 19037, 9855, 8, 19037, 9855, 9, 9175, 9, 2537, 9175, 2536, 19037, 9855, 9, 13765, 2646, 19037, 9855, 16, 19037, 9855, 17, 0, 19037, 9855, 40, 19037, 9855, 41, 40, 19037, 9855, 41, 41, 40, 19037, 9855, 41, 1542, 19037, 9855, 41, 9175, 41, 41, 18543, 9175, 41, 18542, 19037, 9855, 41, 9175, 41, 523, 9175, 523, 1451, 9175, 1450, 19037, 9855, 41, 9175, 41, 3143, 9175, 3142, 19037, 9855, 54, 19037, 9855, 60, 19037, 9855, 61, 7070, 19037, 9855, 61, 13765, 41, 9287, 41, 9287, 40, 19037, 9855, 61, 13765, 266, 19037, 9855, 61, 13765, 1442, 19037, 9855, 61, 13765, 1749, 7070, 19037, 9855, 61, 13765, 2536, 19037, 9855, 61, 13765, 2537, 10122, 19037, 9855, 61, 13765, 5296, 19037, 9855, 61, 13765, 6447, 7070, 19037, 9855, 61, 13765, 6927, 10122, 19037, 9855, 61, 13765, 7426, 19037, 9855, 61, 13765, 9806, 19037, 9855, 61, 13765, 12520, 19037, 9855, 61, 13765, 13484, 19037, 9855, 64, 19037, 9855, 65, 13765, 6590, 19037, 9855, 74, 19037, 9855, 75, 13765, 12010, 19037, 9855, 75, 13765, 13499, 9287, 7042, 19037, 9855, 76, 19037, 9855, 77, 13765, 76, 19037, 9855, 77, 13765, 266, 19037, 9855, 77, 13765, 358, 19037, 9855, 77, 13765, 3050, 19037, 9855, 77, 13765, 3426, 19037, 9855, 77, 13765, 6402, 19037, 9855, 77, 13765, 7042, 19037, 9855, 77, 13765, 7572, 19037, 9855, 80, 19037, 9855, 81, 9175, 80, 19037, 9855, 81, 9287, 8591, 17274, 19037, 9855, 81, 9287, 8591, 18389, 81, 9287, 8590, 19037, 9855, 81, 13737, 13764, 19037, 9855, 106, 19037, 9855, 114, 19037, 9855, 115, 13765, 0, 19037, 9855, 115, 13765, 1450, 19037, 9855, 115, 13765, 1749, 7070, 19037, 9855, 120, 19037, 9855, 121, 9175, 121, 60, 19037, 9855, 121, 9175, 121, 666, 19037, 9855, 121, 9175, 121, 13765, 2382, 19037, 9855, 121, 17793, 120, 19037, 9855, 148, 19037, 9855, 149, 13765, 10094, 19037, 9855, 158, 19037, 9855, 168, 19037, 9855, 169, 7070, 19037, 9855, 169, 9175, 168, 19037, 9855, 169, 17210, 19037, 9855, 174, 19037, 9855, 175, 13765, 1, 9287, 267, 9287, 148, 19037, 9855, 175, 13765, 40, 19037, 9855, 175, 13765, 430, 19037, 9855, 175, 13765, 1450, 19037, 9855, 175, 13765, 2022, 19037, 9855, 175, 13765, 2646, 19037, 9855, 175, 13765, 3016, 19037, 9855, 175, 13765, 3050, 19037, 9855, 198, 19037, 9855, 202, 19037, 9855, 203, 13765, 424, 19037, 9855, 203, 13765, 6926, 19037, 9855, 203, 13765, 6927, 10122, 19037, 9855, 203, 17274, 19037, 9855, 203, 17793, 202, 19037, 9855, 203, 18389, 202, 19037, 9855, 244, 19037, 9855, 245, 7070, 19037, 9855, 254, 19037, 9855, 255, 13765, 8, 19037, 9855, 255, 13765, 40, 19037, 9855, 255, 17793, 254, 19037, 9855, 260, 19037, 9855, 261, 17793, 260, 19037, 9855, 266, 19037, 9855, 267, 7070, 19037, 9855, 267, 10122, 19037, 9855, 267, 10123, 7070, 19037, 9855, 274, 19037, 9855, 275, 13765, 40, 19037, 9855, 275, 13765, 864, 19037, 9855, 275, 13765, 865, 9175, 275, 13765, 864, 19037, 9855, 275, 13765, 884, 19037, 9855, 275, 13765, 1432, 19037, 9855, 275, 13765, 1936, 19037, 9855, 275, 13765, 2536, 19037, 9855, 275, 13765, 3050, 19037, 9855, 275, 13765, 5296, 19037, 9855, 275, 13765, 6408, 19037, 9855, 286, 19037, 9855, 294, 19037, 9855, 304, 19037, 9855, 312, 19037, 9855, 313, 13765, 6927, 10122, 19037, 9855, 314, 19037, 9855, 315, 13765, 10094, 19037, 9855, 315, 17274, 19037, 9855, 315, 17793, 314, 19037, 9855, 315, 18389, 314, 19037, 9855, 316, 19037, 9855, 324, 19037, 9855, 350, 19037, 9855, 351, 13765, 0, 19037, 9855, 351, 13765, 40, 19037, 9855, 351, 13765, 41, 41, 40, 19037, 9855, 351, 13765, 64, 19037, 9855, 351, 13765, 65, 9287, 2000, 19037, 9855, 351, 13765, 114, 19037, 9855, 351, 13765, 120, 19037, 9855, 351, 13765, 244, 19037, 9855, 351, 13765, 254, 19037, 9855, 351, 13765, 260, 19037, 9855, 351, 13765, 275, 13765, 5296, 19037, 9855, 351, 13765, 314, 19037, 9855, 351, 13765, 350, 19037, 9855, 351, 13765, 358, 19037, 9855, 351, 13765, 392, 19037, 9855, 351, 13765, 406, 19037, 9855, 351, 13765, 424, 19037, 9855, 351, 13765, 425, 9287, 168, 19037, 9855, 351, 13765, 425, 9287, 254, 19037, 9855, 351, 13765, 425, 9287, 626, 19037, 9855, 351, 13765, 430, 19037, 9855, 351, 13765, 431, 9287, 13054, 19037, 9855, 351, 13765, 452, 19037, 9855, 351, 13765, 522, 19037, 9855, 351, 13765, 536, 19037, 9855, 351, 13765, 584, 19037, 9855, 351, 13765, 588, 19037, 9855, 351, 13765, 642, 19037, 9855, 351, 13765, 646, 19037, 9855, 351, 13765, 654, 19037, 9855, 351, 13765, 672, 19037, 9855, 351, 13765, 758, 19037, 9855, 351, 13765, 884, 19037, 9855, 351, 13765, 896, 19037, 9855, 351, 13765, 1442, 19037, 9855, 351, 13765, 1450, 19037, 9855, 351, 13765, 1451, 9287, 9737, 9287, 0, 19037, 9855, 351, 13765, 1542, 19037, 9855, 351, 13765, 1748, 19037, 9855, 351, 13765, 1872, 19037, 9855, 351, 13765, 1928, 19037, 9855, 351, 13765, 2198, 19037, 9855, 351, 13765, 2536, 19037, 9855, 351, 13765, 3026, 19037, 9855, 351, 13765, 3048, 19037, 9855, 351, 13765, 3050, 19037, 9855, 351, 13765, 3056, 19037, 9855, 351, 13765, 3066, 19037, 9855, 351, 13765, 3210, 19037, 9855, 351, 13765, 3412, 19037, 9855, 351, 13765, 3426, 19037, 9855, 351, 13765, 5296, 19037, 9855, 351, 13765, 5298, 19037, 9855, 351, 13765, 6590, 19037, 9855, 351, 13765, 6927, 10122, 19037, 9855, 351, 13765, 7036, 19037, 9855, 351, 13765, 7042, 19037, 9855, 351, 13765, 7043, 9287, 3026, 19037, 9855, 351, 13765, 7043, 17793, 7042, 19037, 9855, 351, 13765, 7078, 19037, 9855, 351, 13765, 9770, 19037, 9855, 351, 13765, 9808, 19037, 9855, 351, 13765, 10417, 13765, 522, 19037, 9855, 351, 13765, 11452, 19037, 9855, 351, 13765, 11518, 19037, 9855, 351, 13765, 12010, 19037, 9855, 351, 13765, 13640, 19037, 9855, 358, 19037, 9855, 359, 13765, 40, 19037, 9855, 359, 13765, 654, 19037, 9855, 359, 13765, 884, 19037, 9855, 370, 19037, 9855, 371, 9175, 275, 13765, 5297, 371, 9175, 275, 13765, 5296, 19037, 9855, 384, 19037, 9855, 392, 19037, 9855, 406, 19037, 9855, 407, 13765, 884, 19037, 9855, 416, 19037, 9855, 417, 7070, 19037, 9855, 417, 13765, 10094, 19037, 9855, 424, 19037, 9855, 430, 19037, 9855, 431, 9287, 3784, 19037, 9855, 440, 19037, 9855, 441, 9175, 440, 19037, 9855, 448, 19037, 9855, 452, 19037, 9855, 453, 13765, 0, 19037, 9855, 453, 13765, 654, 19037, 9855, 453, 17210, 19037, 9855, 460, 19037, 9855, 461, 13765, 8, 19037, 9855, 472, 19037, 9855, 522, 19037, 9855, 536, 19037, 9855, 537, 13765, 0, 19037, 9855, 537, 13765, 8, 19037, 9855, 537, 13765, 16, 19037, 9855, 537, 13765, 40, 19037, 9855, 537, 13765, 60, 19037, 9855, 537, 13765, 114, 19037, 9855, 537, 13765, 120, 19037, 9855, 537, 13765, 294, 19037, 9855, 537, 13765, 646, 19037, 9855, 537, 17793, 536, 19037, 9855, 572, 19037, 9855, 578, 19037, 9855, 584, 19037, 9855, 588, 19037, 9855, 598, 19037, 9855, 599, 7070, 19037, 9855, 599, 13765, 10094, 19037, 9855, 612, 19037, 9855, 613, 9175, 612, 19037, 9855, 622, 19037, 9855, 623, 7070, 19037, 9855, 623, 13765, 274, 19037, 9855, 623, 13765, 430, 19037, 9855, 623, 17642, 19037, 9855, 626, 19037, 9855, 627, 7070, 19037, 9855, 630, 19037, 9855, 631, 10122, 19037, 9855, 642, 19037, 9855, 646, 19037, 9855, 650, 19037, 9855, 654, 19037, 9855, 655, 7070, 19037, 9855, 655, 13765, 41, 9287, 41, 9287, 40, 19037, 9855, 655, 13765, 41, 9287, 41, 9287, 41, 7070, 19037, 9855, 655, 13765, 430, 19037, 9855, 655, 13765, 884, 19037, 9855, 655, 14960, 19037, 9855, 655, 17210, 19037, 9855, 655, 17211, 13765, 884, 19037, 9855, 664, 19037, 9855, 665, 13765, 40, 19037, 9855, 665, 13765, 424, 19037, 9855, 665, 13765, 425, 9287, 148, 19037, 9855, 665, 13765, 9736, 19037, 9855, 665, 13765, 12520, 19037, 9855, 666, 19037, 9855, 667, 7070, 19037, 9855, 672, 19037, 9855, 673, 17210, 19037, 9855, 673, 17793, 672, 19037, 9855, 752, 19037, 9855, 753, 10122, 19037, 9855, 753, 17275, 13765, 2022, 19037, 9855, 758, 19037, 9855, 759, 9175, 758, 19037, 9855, 762, 19037, 9855, 763, 9175, 763, 9287, 3026, 19037, 9855, 790, 19037, 9855, 791, 13765, 0, 19037, 9855, 791, 13765, 425, 9287, 202, 19037, 9855, 791, 13765, 6927, 10122, 19037, 9855, 791, 13765, 9736, 19037, 9855, 791, 13765, 10094, 19037, 9855, 791, 13765, 11518, 19037, 9855, 864, 19037, 9855, 865, 7569, 10122, 19037, 9855, 865, 9175, 865, 9175, 864, 19037, 9855, 865, 9175, 865, 9175, 865, 17793, 865, 9175, 865, 9175, 864, 19037, 9855, 865, 9175, 865, 10289, 9175, 10289, 10289, 9175, 10289, 2646, 19037, 9855, 865, 10957, 10122, 19037, 9855, 884, 19037, 9855, 885, 13765, 6409, 10122, 19037, 9855, 890, 19037, 9855, 891, 9175, 890, 19037, 9855, 896, 19037, 9855, 982, 19037, 9855, 1122, 19037, 9855, 1123, 13765, 2022, 19037, 9855, 1123, 14943, 13765, 1, 9287, 8324, 19037, 9855, 1123, 14943, 13765, 114, 19037, 9855, 1123, 14943, 13765, 244, 19037, 9855, 1123, 14943, 13765, 245, 9287, 8324, 19037, 9855, 1123, 14943, 13765, 254, 19037, 9855, 1123, 14943, 13765, 266, 19037, 9855, 1123, 14943, 13765, 324, 19037, 9855, 1123, 14943, 13765, 325, 9287, 406, 19037, 9855, 1123, 14943, 13765, 384, 19037, 9855, 1123, 14943, 13765, 406, 19037, 9855, 1123, 14943, 13765, 407, 9287, 12668, 19037, 9855, 1123, 14943, 13765, 452, 19037, 9855, 1123, 14943, 13765, 598, 19037, 9855, 1123, 14943, 13765, 647, 9287, 7036, 19037, 9855, 1123, 14943, 13765, 647, 9287, 8324, 19037, 9855, 1123, 14943, 13765, 1542, 19037, 9855, 1123, 14943, 13765, 1872, 19037, 9855, 1123, 14943, 13765, 2198, 19037, 9855, 1123, 14943, 13765, 2647, 9287, 2646, 19037, 9855, 1123, 14943, 13765, 3426, 19037, 9855, 1123, 14943, 13765, 5262, 19037, 9855, 1123, 14943, 13765, 7036, 19037, 9855, 1123, 14943, 13765, 10094, 19037, 9855, 1123, 14943, 13765, 11518, 19037, 9855, 1130, 19037, 9855, 1134, 19037, 9855, 1174, 19037, 9855, 1180, 19037, 9855, 1181, 13765, 41, 41, 40, 19037, 9855, 1181, 13765, 1748, 19037, 9855, 1181, 13765, 3050, 19037, 9855, 1182, 19037, 9855, 1183, 14903, 41, 7071, 6408, 19037, 9855, 1222, 19037, 9855, 1223, 13765, 3050, 19037, 9855, 1223, 13765, 6590, 19037, 9855, 1224, 19037, 9855, 1225, 13765, 244, 19037, 9855, 1225, 13765, 254, 19037, 9855, 1225, 13765, 266, 19037, 9855, 1225, 13765, 274, 19037, 9855, 1225, 13765, 430, 19037, 9855, 1225, 13765, 460, 19037, 9855, 1225, 13765, 536, 19037, 9855, 1225, 13765, 599, 7070, 19037, 9855, 1225, 13765, 864, 19037, 9855, 1225, 13765, 865, 93, 7816, 19037, 9855, 1225, 13765, 1182, 19037, 9855, 1225, 13765, 1232, 19037, 9855, 1225, 13765, 1749, 7070, 19037, 9855, 1225, 13765, 2022, 19037, 9855, 1225, 13765, 2076, 19037, 9855, 1225, 13765, 2077, 13765, 2022, 19037, 9855, 1225, 13765, 2195, 9287, 7042, 19037, 9855, 1225, 13765, 2284, 19037, 9855, 1225, 13765, 3050, 19037, 9855, 1225, 13765, 7037, 7070, 19037, 9855, 1225, 13765, 7042, 19037, 9855, 1225, 13765, 8324, 19037, 9855, 1225, 13765, 11452, 19037, 9855, 1225, 13765, 12010, 19037, 9855, 1225, 13765, 14902, 19037, 9855, 1225, 13765, 14960, 19037, 9855, 1225, 13765, 14961, 9287, 14902, 19037, 9855, 1225, 13765, 16608, 19037, 9855, 1226, 19037, 9855, 1232, 19037, 9855, 1428, 19037, 9855, 1429, 9175, 1428, 19037, 9855, 1429, 13765, 1, 9287, 149, 9287, 266, 19037, 9855, 1429, 13765, 1, 9287, 266, 19037, 9855, 1429, 13765, 1, 9287, 1748, 19037, 9855, 1429, 13765, 40, 19037, 9855, 1429, 13765, 80, 19037, 9855, 1429, 13765, 81, 9287, 1873, 9287, 0, 19037, 9855, 1429, 13765, 148, 19037, 9855, 1429, 13765, 158, 19037, 9855, 1429, 13765, 198, 19037, 9855, 1429, 13765, 199, 9287, 384, 19037, 9855, 1429, 13765, 202, 19037, 9855, 1429, 13765, 203, 13765, 6927, 10122, 19037, 9855, 1429, 13765, 244, 19037, 9855, 1429, 13765, 254, 19037, 9855, 1429, 13765, 267, 9287, 0, 19037, 9855, 1429, 13765, 267, 9287, 407, 9287, 6590, 19037, 9855, 1429, 13765, 275, 9287, 392, 19037, 9855, 1429, 13765, 384, 19037, 9855, 1429, 13765, 425, 9287, 202, 19037, 9855, 1429, 13765, 430, 19037, 9855, 1429, 13765, 452, 19037, 9855, 1429, 13765, 453, 9287, 174, 19037, 9855, 1429, 13765, 453, 9287, 254, 19037, 9855, 1429, 13765, 522, 19037, 9855, 1429, 13765, 654, 19037, 9855, 1429, 13765, 655, 9287, 168, 19037, 9855, 1429, 13765, 791, 10123, 9287, 3188, 19037, 9855, 1429, 13765, 864, 19037, 9855, 1429, 13765, 884, 19037, 9855, 1429, 13765, 897, 9287, 572, 19037, 9855, 1429, 13765, 982, 19037, 9855, 1429, 13765, 983, 9287, 572, 19037, 9855, 1429, 13765, 1181, 7070, 19037, 9855, 1429, 13765, 1181, 13765, 3050, 19037, 9855, 1429, 13765, 1222, 19037, 9855, 1429, 13765, 1225, 13765, 1749, 7070, 19037, 9855, 1429, 13765, 1225, 13765, 14902, 19037, 9855, 1429, 13765, 1450, 19037, 9855, 1429, 13765, 1451, 9287, 158, 19037, 9855, 1429, 13765, 1451, 9287, 452, 19037, 9855, 1429, 13765, 1504, 19037, 9855, 1429, 13765, 1505, 9287, 0, 19037, 9855, 1429, 13765, 1586, 19037, 9855, 1429, 13765, 1587, 9287, 384, 19037, 9855, 1429, 13765, 1749, 7070, 19037, 9855, 1429, 13765, 1773, 9287, 287, 9287, 864, 19037, 9855, 1429, 13765, 1872, 19037, 9855, 1429, 13765, 1928, 19037, 9855, 1429, 13765, 1929, 9287, 2074, 19037, 9855, 1429, 13765, 2001, 9287, 80, 19037, 9855, 1429, 13765, 2076, 19037, 9855, 1429, 13765, 2077, 13765, 2022, 19037, 9855, 1429, 13765, 2194, 19037, 9855, 1429, 13765, 2536, 19037, 9855, 1429, 13765, 2537, 9175, 2536, 19037, 9855, 1429, 13765, 3016, 19037, 9855, 1429, 13765, 3026, 19037, 9855, 1429, 13765, 3050, 19037, 9855, 1429, 13765, 3051, 9287, 3344, 19037, 9855, 1429, 13765, 3134, 19037, 9855, 1429, 13765, 5296, 19037, 9855, 1429, 13765, 5297, 9287, 1442, 19037, 9855, 1429, 13765, 6582, 19037, 9855, 1429, 13765, 6927, 10122, 19037, 9855, 1429, 13765, 7037, 9287, 612, 19037, 9855, 1429, 13765, 7316, 19037, 9855, 1429, 13765, 8490, 19037, 9855, 1429, 13765, 9770, 19037, 9855, 1429, 13765, 9774, 19037, 9855, 1429, 13765, 10094, 19037, 9855, 1429, 13765, 10962, 19037, 9855, 1429, 13765, 14338, 19037, 9855, 1429, 13765, 14902, 19037, 9855, 1429, 13765, 14961, 9287, 14902, 19037, 9855, 1432, 19037, 9855, 1433, 9175, 1433, 1451, 9175, 1450, 19037, 9855, 1442, 19037, 9855, 1443, 1433, 9175, 1433, 1451, 9175, 1450, 19037, 9855, 1444, 19037, 9855, 1446, 19037, 9855, 1450, 19037, 9855, 1504, 19037, 9855, 1505, 9175, 1504, 19037, 9855, 1505, 17793, 1504, 19037, 9855, 1508, 19037, 9855, 1538, 19037, 9855, 1539, 7070, 19037, 9855, 1539, 13765, 1749, 7070, 19037, 9855, 1539, 13765, 1872, 19037, 9855, 1539, 13765, 1873, 13765, 1749, 7070, 19037, 9855, 1539, 13765, 2536, 19037, 9855, 1539, 13765, 3017, 9287, 10288, 19037, 9855, 1542, 19037, 9855, 1543, 9175, 1543, 12592, 19037, 9855, 1543, 9287, 7043, 13765, 10094, 19037, 9855, 1543, 13765, 1, 9287, 2022, 19037, 9855, 1543, 13765, 2022, 19037, 9855, 1546, 19037, 9855, 1548, 19037, 9855, 1549, 13765, 3050, 19037, 9855, 1554, 19037, 9855, 1586, 19037, 9855, 1748, 19037, 9855, 1749, 578, 19037, 9855, 1749, 1174, 19037, 9855, 1749, 7070, 19037, 9855, 1749, 9175, 1749, 9783, 9175, 9783, 655, 9175, 654, 19037, 9855, 1750, 19037, 9855, 1772, 19037, 9855, 1858, 19037, 9855, 1859, 17793, 1858, 19037, 9855, 1862, 19037, 9855, 1872, 19037, 9855, 1873, 13765, 1749, 7070, 19037, 9855, 1874, 19037, 9855, 1875, 13765, 884, 19037, 9855, 1875, 17793, 1874, 19037, 9855, 1881, 16360, 19037, 9855, 1928, 19037, 9855, 1936, 19037, 9855, 2000, 19037, 9855, 2002, 19037, 9855, 2003, 17473, 6776, 19037, 9855, 2004, 19037, 9855, 2012, 19037, 9855, 2013, 7070, 19037, 9855, 2014, 19037, 9855, 2022, 19037, 9855, 2023, 18389, 2022, 19037, 9855, 2074, 19037, 9855, 2075, 13765, 2074, 19037, 9855, 2076, 19037, 9855, 2077, 13765, 2022, 19037, 9855, 2077, 13765, 2023, 9287, 584, 19037, 9855, 2138, 19037, 9855, 2186, 19037, 9855, 2187, 7071, 13765, 864, 19037, 9855, 2187, 10122, 19037, 9855, 2187, 13765, 76, 19037, 9855, 2187, 13765, 275, 13765, 884, 19037, 9855, 2187, 13765, 314, 19037, 9855, 2187, 13765, 358, 19037, 9855, 2187, 13765, 385, 9287, 864, 19037, 9855, 2187, 13765, 425, 9287, 202, 19037, 9855, 2187, 13765, 452, 19037, 9855, 2187, 13765, 472, 19037, 9855, 2187, 13765, 599, 9287, 864, 19037, 9855, 2187, 13765, 884, 19037, 9855, 2187, 13765, 1586, 19037, 9855, 2187, 13765, 2646, 19037, 9855, 2187, 13765, 2647, 9287, 2647, 9287, 2188, 19037, 9855, 2187, 13765, 3056, 19037, 9855, 2187, 13765, 6408, 19037, 9855, 2187, 13765, 6590, 19037, 9855, 2187, 13765, 6591, 9287, 2074, 19037, 9855, 2187, 13765, 6591, 10122, 19037, 9855, 2187, 13765, 6927, 10122, 19037, 9855, 2187, 13765, 7570, 19037, 9855, 2187, 13765, 7572, 19037, 9855, 2187, 13765, 7573, 9287, 864, 19037, 9855, 2187, 13765, 9857, 9287, 120, 19037, 9855, 2187, 13765, 10094, 19037, 9855, 2187, 13765, 10288, 19037, 9855, 2187, 13765, 12520, 19037, 9855, 2187, 17210, 19037, 9855, 2187, 17211, 13765, 884, 19037, 9855, 2187, 17274, 19037, 9855, 2187, 17793, 2186, 19037, 9855, 2187, 18389, 2186, 19037, 9855, 2188, 19037, 9855, 2194, 19037, 9855, 2196, 19037, 9855, 2198, 19037, 9855, 2199, 9175, 2198, 19037, 9855, 2199, 9175, 2199, 1451, 9175, 1450, 19037, 9855, 2232, 19037, 9855, 2238, 19037, 9855, 2250, 19037, 9855, 2284, 19037, 9855, 2314, 19037, 9855, 2344, 19037, 9855, 2345, 7070, 19037, 9855, 2382, 19037, 9855, 2384, 19037, 9855, 2394, 19037, 9855, 2395, 16906, 19037, 9855, 2458, 19037, 9855, 2468, 19037, 9855, 2469, 13765, 1451, 9287, 6927, 10122, 19037, 9855, 2469, 13765, 6927, 10122, 19037, 9855, 2470, 19037, 9855, 2536, 19037, 9855, 2537, 9175, 2536, 19037, 9855, 2537, 10122, 19037, 9855, 2537, 12523, 13765, 1450, 19037, 9855, 2537, 12523, 13765, 3016, 19037, 9855, 2537, 12523, 13765, 3017, 9175, 2537, 12523, 13765, 3016, 19037, 9855, 2537, 12523, 13765, 3426, 19037, 9855, 2537, 12523, 13765, 8324, 19037, 9855, 2537, 17793, 2536, 19037, 9855, 2537, 17793, 2537, 12523, 9175, 12522, 19037, 9855, 2638, 19037, 9855, 2642, 19037, 9855, 2646, 19037, 9855, 2868, 19037, 9855, 3012, 19037, 9855, 3013, 7070, 19037, 9855, 3013, 7071, 13765, 266, 19037, 9855, 3013, 9175, 3012, 19037, 9855, 3013, 13765, 0, 19037, 9855, 3013, 13765, 168, 19037, 9855, 3013, 13765, 202, 19037, 9855, 3013, 13765, 266, 19037, 9855, 3013, 13765, 430, 19037, 9855, 3013, 13765, 646, 19037, 9855, 3013, 13765, 650, 19037, 9855, 3013, 13765, 664, 19037, 9855, 3013, 13765, 672, 19037, 9855, 3013, 13765, 1222, 19037, 9855, 3013, 13765, 1749, 7070, 19037, 9855, 3013, 13765, 1872, 19037, 9855, 3013, 13765, 2022, 19037, 9855, 3013, 13765, 2198, 19037, 9855, 3013, 13765, 2536, 19037, 9855, 3013, 13765, 3016, 19037, 9855, 3013, 13765, 3051, 93, 7816, 19037, 9855, 3013, 13765, 3188, 19037, 9855, 3013, 13765, 3426, 19037, 9855, 3013, 13765, 9770, 19037, 9855, 3013, 13765, 10094, 19037, 9855, 3013, 16906, 19037, 9855, 3016, 19037, 9855, 3017, 12521, 13765, 5296, 19037, 9855, 3026, 19037, 9855, 3048, 19037, 9855, 3050, 19037, 9855, 3051, 286, 19037, 9855, 3051, 9175, 3050, 19037, 9855, 3051, 9175, 3051, 1433, 9175, 1433, 1451, 9175, 1450, 19037, 9855, 3051, 9175, 3051, 3189, 9175, 3189, 1451, 9175, 1450, 19037, 9855, 3051, 9287, 3026, 19037, 9855, 3051, 9287, 7316, 19037, 9855, 3051, 9287, 8594, 19037, 9855, 3056, 19037, 9855, 3057, 9175, 18183, 3056, 19037, 9855, 3066, 19037, 9855, 3130, 19037, 9855, 3134, 19037, 9855, 3142, 19037, 9855, 3188, 19037, 9855, 3189, 9175, 3189, 461, 9175, 461, 6409, 9175, 6408, 19037, 9855, 3189, 17274, 19037, 9855, 3192, 19037, 9855, 3193, 13765, 114, 19037, 9855, 3193, 13765, 654, 19037, 9855, 3193, 13765, 1542, 19037, 9855, 3193, 13765, 3050, 19037, 9855, 3193, 13765, 3056, 19037, 9855, 3193, 13765, 10288, 19037, 9855, 3210, 19037, 9855, 3254, 19037, 9855, 3260, 19037, 9855, 3266, 19037, 9855, 3267, 9175, 3266, 19037, 9855, 3267, 9175, 3267, 1433, 9175, 1433, 1451, 9175, 1450, 19037, 9855, 3267, 13765, 10094, 19037, 9855, 3336, 19037, 9855, 3338, 19037, 9855, 3339, 13765, 6927, 10122, 19037, 9855, 3339, 13765, 13737, 6408, 19037, 9855, 3344, 19037, 9855, 3345, 9175, 3345, 753, 9175, 752, 19037, 9855, 3412, 19037, 9855, 3413, 13765, 1, 9287, 266, 19037, 9855, 3413, 13765, 1, 9287, 448, 19037, 9855, 3413, 13765, 76, 19037, 9855, 3413, 13765, 266, 19037, 9855, 3413, 13765, 646, 19037, 9855, 3413, 13765, 647, 9287, 114, 19037, 9855, 3413, 13765, 647, 9287, 864, 19037, 9855, 3413, 13765, 654, 19037, 9855, 3413, 13765, 2536, 19037, 9855, 3413, 18182, 19037, 9855, 3414, 19037, 9855, 3418, 19037, 9855, 3422, 19037, 9855, 3423, 13765, 0, 19037, 9855, 3423, 13765, 41, 9287, 1542, 19037, 9855, 3423, 13765, 244, 19037, 9855, 3423, 13765, 260, 19037, 9855, 3423, 13765, 266, 19037, 9855, 3423, 13765, 314, 19037, 9855, 3423, 13765, 358, 19037, 9855, 3423, 13765, 522, 19037, 9855, 3423, 13765, 642, 19037, 9855, 3423, 13765, 654, 19037, 9855, 3423, 13765, 896, 19037, 9855, 3423, 13765, 1232, 19037, 9855, 3423, 13765, 1442, 19037, 9855, 3423, 13765, 1450, 19037, 9855, 3423, 13765, 1748, 19037, 9855, 3423, 13765, 1772, 19037, 9855, 3423, 13765, 2188, 19037, 9855, 3423, 13765, 2198, 19037, 9855, 3423, 13765, 2314, 19037, 9855, 3423, 13765, 3050, 19037, 9855, 3423, 13765, 6927, 10122, 19037, 9855, 3423, 13765, 9852, 19037, 9855, 3423, 13765, 11858, 19037, 9855, 3423, 13765, 13892, 19037, 9855, 3423, 13765, 14324, 19037, 9855, 3423, 13765, 16692, 19037, 9855, 3426, 19037, 9855, 3427, 13765, 0, 19037, 9855, 3427, 13765, 370, 19037, 9855, 3427, 13765, 2022, 19037, 9855, 3427, 13765, 10094, 19037, 9855, 3434, 19037, 9855, 3435, 13765, 14902, 19037, 9855, 3436, 19037, 9855, 3784, 19037, 9855, 3788, 19037, 9855, 3802, 19037, 9855, 3824, 19037, 9855, 3826, 19037, 9855, 3827, 7569, 10122, 19037, 9855, 3830, 19037, 9855, 3856, 19037, 9855, 3857, 13765, 0, 19037, 9855, 3857, 13765, 13737, 6409, 10122, 19037, 9855, 3858, 19037, 9855, 5244, 19037, 9855, 5262, 19037, 9855, 5263, 13765, 2010, 19037, 9855, 5263, 13765, 3050, 19037, 9855, 5276, 19037, 9855, 5284, 19037, 9855, 5285, 13765, 2022, 19037, 9855, 5296, 19037, 9855, 5722, 19037, 9855, 5886, 19037, 9855, 6272, 19037, 9855, 6402, 19037, 9855, 6403, 13765, 654, 19037, 9855, 6408, 19037, 9855, 6409, 9287, 3056, 19037, 9855, 6442, 19037, 9855, 6446, 19037, 9855, 6447, 7070, 19037, 9855, 6447, 7071, 7070, 19037, 9855, 6448, 19037, 9855, 6454, 19037, 9855, 6562, 19037, 9855, 6564, 19037, 9855, 6582, 19037, 9855, 6590, 19037, 9855, 6591, 17793, 6590, 19037, 9855, 6608, 19037, 9855, 6609, 13765, 0, 19037, 9855, 6609, 13765, 1, 9287, 2074, 19037, 9855, 6609, 13765, 1, 9287, 2075, 13765, 2074, 19037, 9855, 6609, 13765, 80, 19037, 9855, 6609, 13765, 266, 19037, 9855, 6609, 13765, 267, 7070, 19037, 9855, 6609, 13765, 384, 19037, 9855, 6609, 13765, 392, 19037, 9855, 6609, 13765, 406, 19037, 9855, 6609, 13765, 612, 19037, 9855, 6609, 13765, 646, 19037, 9855, 6609, 13765, 654, 19037, 9855, 6609, 13765, 884, 19037, 9855, 6609, 13765, 1542, 19037, 9855, 6609, 13765, 1749, 7070, 19037, 9855, 6609, 13765, 2000, 19037, 9855, 6609, 13765, 2075, 13765, 2074, 19037, 9855, 6609, 13765, 3050, 19037, 9855, 6609, 13765, 6447, 7070, 19037, 9855, 6609, 13765, 6447, 7071, 7070, 19037, 9855, 6609, 13765, 14902, 19037, 9855, 6609, 13765, 14903, 17274, 19037, 9855, 6609, 17211, 13765, 274, 19037, 9855, 6609, 17211, 13765, 384, 19037, 9855, 6609, 17211, 13765, 424, 19037, 9855, 6609, 17211, 13765, 612, 19037, 9855, 6609, 17211, 13765, 864, 19037, 9855, 6609, 17211, 13765, 1749, 7070, 19037, 9855, 6609, 17211, 13765, 2074, 19037, 9855, 6609, 17211, 13765, 2284, 19037, 9855, 6918, 19037, 9855, 6919, 17139, 15195, 16234, 19037, 9855, 6919, 17793, 6918, 19037, 9855, 6926, 19037, 9855, 6927, 9175, 6926, 19037, 9855, 6927, 10122, 19037, 9855, 6927, 17793, 6926, 19037, 9855, 6928, 19037, 9855, 6948, 19037, 9855, 7036, 19037, 9855, 7037, 7070, 19037, 9855, 7038, 19037, 9855, 7039, 13765, 1, 9287, 1748, 19037, 9855, 7039, 13765, 407, 9287, 1748, 19037, 9855, 7039, 13765, 522, 19037, 9855, 7039, 13765, 1748, 19037, 9855, 7039, 13765, 6927, 10122, 19037, 9855, 7042, 19037, 9855, 7043, 10122, 19037, 9855, 7043, 13765, 884, 19037, 9855, 7043, 13765, 7043, 17793, 7042, 19037, 9855, 7043, 13765, 10094, 19037, 9855, 7043, 17793, 7042, 19037, 9855, 7078, 19037, 9855, 7316, 19037, 9855, 7317, 13765, 80, 19037, 9855, 7317, 13765, 654, 19037, 9855, 7317, 13765, 1586, 19037, 9855, 7317, 13765, 7866, 19037, 9855, 7317, 13765, 14902, 19037, 9855, 7318, 19037, 9855, 7330, 19037, 9855, 7416, 19037, 9855, 7417, 9175, 7417, 982, 19037, 9855, 7417, 9175, 7417, 17274, 19037, 9855, 7426, 19037, 9855, 7570, 19037, 9855, 7572, 19037, 9855, 7574, 19037, 9855, 7576, 19037, 9855, 7577, 9175, 7576, 19037, 9855, 7586, 19037, 9855, 7588, 19037, 9855, 7676, 19037, 9855, 7866, 19037, 9855, 8324, 19037, 9855, 8368, 19037, 9855, 8490, 19037, 9855, 8491, 9175, 8490, 19037, 9855, 8491, 9175, 8491, 13765, 1, 9287, 448, 19037, 9855, 8491, 9175, 8491, 13765, 244, 19037, 9855, 8491, 9175, 8491, 13765, 1872, 19037, 9855, 8491, 13765, 0, 19037, 9855, 8491, 13765, 752, 19037, 9855, 8491, 13765, 2022, 19037, 9855, 8491, 17793, 8490, 19037, 9855, 8590, 19037, 9855, 8591, 13765, 3057, 10122, 19037, 9855, 8591, 18182, 19037, 9855, 8591, 18389, 8590, 19037, 9855, 8594, 19037, 9855, 8778, 19037, 9855, 8920, 19037, 9855, 8921, 9175, 8921, 983, 9175, 982, 19037, 9855, 8921, 10122, 19037, 9855, 8921, 17139, 15195, 16234, 19037, 9855, 9272, 19037, 9855, 9736, 19037, 9855, 9737, 13765, 0, 19037, 9855, 9737, 13765, 40, 19037, 9855, 9737, 13765, 41, 9287, 0, 19037, 9855, 9737, 13765, 452, 19037, 9855, 9737, 13765, 884, 19037, 9855, 9737, 13765, 3344, 19037, 9855, 9737, 13765, 7042, 19037, 9855, 9737, 13765, 9806, 19037, 9855, 9738, 19037, 9855, 9739, 10122, 19037, 9855, 9760, 19037, 9855, 9770, 19037, 9855, 9771, 13765, 0, 19037, 9855, 9771, 13765, 314, 19037, 9855, 9774, 19037, 9855, 9775, 13765, 0, 19037, 9855, 9775, 13765, 890, 19037, 9855, 9775, 13765, 1182, 19037, 9855, 9775, 13765, 1450, 19037, 9855, 9775, 13765, 1748, 19037, 9855, 9775, 13765, 1749, 7070, 19037, 9855, 9775, 13765, 2196, 19037, 9855, 9775, 13765, 2344, 19037, 9855, 9775, 13765, 3016, 19037, 9855, 9775, 13765, 11618, 19037, 9855, 9775, 13765, 14960, 19037, 9855, 9782, 19037, 9855, 9783, 9175, 9783, 983, 9175, 982, 19037, 9855, 9783, 10122, 19037, 9855, 9806, 19037, 9855, 9807, 9287, 175, 13765, 80, 19037, 9855, 9807, 9287, 1225, 13765, 460, 19037, 9855, 9852, 19037, 9855, 9853, 9175, 9853, 9806, 19037, 9855, 9856, 19037, 9855, 9968, 19037, 9855, 9980, 19037, 9855, 10094, 19037, 9855, 10095, 9287, 3012, 19037, 9855, 10288, 19037, 9855, 10414, 19037, 9855, 10416, 19037, 9855, 10417, 13765, 522, 19037, 9855, 10417, 13765, 14902, 19037, 9855, 10424, 19037, 9855, 10432, 19037, 9855, 10434, 19037, 9855, 10892, 19037, 9855, 10962, 19037, 9855, 11424, 19037, 9855, 11452, 19037, 9855, 11472, 19037, 9855, 11478, 19037, 9855, 11518, 19037, 9855, 11522, 19037, 9855, 11618, 19037, 9855, 11619, 9175, 11618, 19037, 9855, 11858, 19037, 9855, 11860, 19037, 9855, 11938, 19037, 9855, 12010, 19037, 9855, 12011, 46, 19037, 9855, 12148, 19037, 9855, 12202, 19037, 9855, 12210, 19037, 9855, 12244, 19037, 9855, 12458, 19037, 9855, 12482, 19037, 9855, 12520, 19037, 9855, 12521, 13765, 0, 19037, 9855, 12521, 13765, 1, 9287, 149, 9287, 266, 19037, 9855, 12521, 13765, 1, 9287, 1450, 19037, 9855, 12521, 13765, 1, 9287, 2074, 19037, 9855, 12521, 13765, 40, 19037, 9855, 12521, 13765, 41, 9287, 0, 19037, 9855, 12521, 13765, 41, 9287, 41, 9287, 40, 19037, 9855, 12521, 13765, 76, 19037, 9855, 12521, 13765, 80, 19037, 9855, 12521, 13765, 114, 19037, 9855, 12521, 13765, 202, 19037, 9855, 12521, 13765, 244, 19037, 9855, 12521, 13765, 254, 19037, 9855, 12521, 13765, 266, 19037, 9855, 12521, 13765, 275, 13765, 2536, 19037, 9855, 12521, 13765, 314, 19037, 9855, 12521, 13765, 315, 9287, 266, 19037, 9855, 12521, 13765, 315, 9287, 406, 19037, 9855, 12521, 13765, 358, 19037, 9855, 12521, 13765, 406, 19037, 9855, 12521, 13765, 424, 19037, 9855, 12521, 13765, 425, 9287, 202, 19037, 9855, 12521, 13765, 452, 19037, 9855, 12521, 13765, 627, 9287, 1, 9287, 613, 9287, 448, 19037, 9855, 12521, 13765, 647, 9287, 864, 19037, 9855, 12521, 13765, 654, 19037, 9855, 12521, 13765, 763, 9175, 762, 19037, 9855, 12521, 13765, 865, 10957, 10122, 19037, 9855, 12521, 13765, 884, 19037, 9855, 12521, 13765, 1134, 19037, 9855, 12521, 13765, 1450, 19037, 9855, 12521, 13765, 1542, 19037, 9855, 12521, 13765, 1543, 9287, 1542, 19037, 9855, 12521, 13765, 1586, 19037, 9855, 12521, 13765, 1749, 7070, 19037, 9855, 12521, 13765, 1936, 19037, 9855, 12521, 13765, 2000, 19037, 9855, 12521, 13765, 2012, 19037, 9855, 12521, 13765, 2013, 9287, 275, 9287, 0, 19037, 9855, 12521, 13765, 2196, 19037, 9855, 12521, 13765, 3051, 9287, 3134, 19037, 9855, 12521, 13765, 3134, 19037, 9855, 12521, 13765, 3192, 19037, 9855, 12521, 13765, 3426, 19037, 9855, 12521, 13765, 7866, 19037, 9855, 12521, 13765, 8490, 19037, 9855, 12521, 13765, 9806, 19037, 9855, 12521, 13765, 9807, 9287, 9806, 19037, 9855, 12521, 13765, 10094, 19037, 9855, 12521, 13765, 12520, 19037, 9855, 12521, 13765, 13499, 9287, 7043, 9287, 12010, 19037, 9855, 12521, 13765, 13499, 9287, 7043, 10122, 19037, 9855, 12521, 17274, 19037, 9855, 12522, 19037, 9855, 12523, 7070, 19037, 9855, 12523, 7071, 9175, 12523, 7071, 3050, 19037, 9855, 12523, 13765, 3050, 19037, 9855, 12523, 13765, 3051, 9287, 3134, 19037, 9855, 12592, 19037, 9855, 12593, 9175, 12592, 19037, 9855, 12593, 17210, 19037, 9855, 12593, 18389, 12592, 19037, 9855, 12668, 19037, 9855, 12782, 19037, 9855, 12783, 7070, 19037, 9855, 12783, 13765, 0, 19037, 9855, 12783, 13765, 1, 9287, 158, 19037, 9855, 12783, 13765, 158, 19037, 9855, 12783, 13765, 752, 19037, 9855, 12804, 19037, 9855, 12892, 19037, 9855, 13054, 19037, 9855, 13055, 791, 13765, 114, 19037, 9855, 13055, 791, 13765, 384, 19037, 9855, 13055, 791, 13765, 452, 19037, 9855, 13055, 791, 13765, 646, 19037, 9855, 13055, 791, 13765, 1224, 19037, 9855, 13055, 791, 13765, 1542, 19037, 9855, 13055, 791, 13765, 1749, 7070, 19037, 9855, 13055, 791, 13765, 7572, 19037, 9855, 13055, 791, 13765, 13534, 19037, 9855, 13055, 791, 13765, 14324, 19037, 9855, 13055, 14943, 13765, 114, 19037, 9855, 13055, 14943, 13765, 115, 40, 19037, 9855, 13218, 19037, 9855, 13219, 17642, 19037, 9855, 13234, 19037, 9855, 13235, 13765, 654, 19037, 9855, 13235, 13765, 752, 19037, 9855, 13235, 13765, 1874, 19037, 9855, 13235, 18389, 13234, 19037, 9855, 13452, 19037, 9855, 13462, 19037, 9855, 13478, 19037, 9855, 13484, 19037, 9855, 13498, 19037, 9855, 13534, 19037, 9855, 13640, 19037, 9855, 13878, 19037, 9855, 13892, 19037, 9855, 13893, 13765, 40, 19037, 9855, 13896, 19037, 9855, 14216, 19037, 9855, 14324, 19037, 9855, 14338, 19037, 9855, 14339, 13765, 460, 19037, 9855, 14339, 13765, 752, 19037, 9855, 14339, 13765, 790, 19037, 9855, 14756, 19037, 9855, 14806, 19037, 9855, 14902, 19037, 9855, 14903, 9175, 14903, 12521, 13765, 41, 9175, 12521, 13765, 40, 19037, 9855, 14903, 12521, 13765, 41, 9175, 12521, 13765, 40, 19037, 9855, 14942, 19037, 9855, 14943, 9175, 14942, 19037, 9855, 14960, 19037, 9855, 14962, 19037, 9855, 14972, 19037, 9855, 15008, 19037, 9855, 15144, 19037, 9855, 15150, 19037, 9855, 15192, 19037, 9855, 15193, 13765, 40, 19037, 9855, 15193, 13765, 41, 9287, 40, 19037, 9855, 15193, 13765, 80, 19037, 9855, 15193, 13765, 254, 19037, 9855, 15193, 13765, 274, 19037, 9855, 15193, 13765, 425, 9287, 6927, 10122, 19037, 9855, 15193, 13765, 452, 19037, 9855, 15193, 13765, 647, 9287, 864, 19037, 9855, 15193, 13765, 864, 19037, 9855, 15193, 13765, 865, 9287, 864, 19037, 9855, 15193, 13765, 890, 19037, 9855, 15193, 13765, 1181, 7070, 19037, 9855, 15193, 13765, 1542, 19037, 9855, 15193, 13765, 1546, 19037, 9855, 15193, 13765, 2536, 19037, 9855, 15193, 13765, 2647, 9287, 2646, 19037, 9855, 15193, 13765, 3050, 19037, 9855, 15193, 13765, 3051, 9287, 1, 80, 19037, 9855, 15193, 13765, 3051, 9287, 864, 19037, 9855, 15193, 13765, 3051, 9287, 865, 9287, 864, 19037, 9855, 15193, 13765, 3426, 19037, 9855, 15193, 13765, 7042, 19037, 9855, 15193, 13765, 8324, 19037, 9855, 15193, 13765, 12458, 19037, 9855, 15193, 13765, 13892, 19037, 9855, 15193, 13765, 16616, 19037, 9855, 15484, 19037, 9855, 15538, 19037, 9855, 15548, 19037, 9855, 15562, 19037, 9855, 15656, 19037, 9855, 15850, 19037, 9855, 16434, 19037, 9855, 16435, 13765, 40, 19037, 9855, 16435, 13765, 2022, 19037, 9855, 16606, 19037, 9855, 16610, 19037, 9855, 16612, 19037, 9855, 16614, 19037, 9855, 16616, 19037, 9855, 16618, 19037, 9855, 16620, 19037, 9855, 16623, 9175, 16623, 7070, 19037, 9855, 16624, 19037, 9855, 16627, 9175, 16626, 19037, 9855, 16628, 19037, 9855, 16630, 19037, 9855, 16632, 19037, 9855, 16634, 19037, 9855, 16636, 19037, 9855, 16638, 19037, 9855, 16640, 19037, 9855, 16642, 19037, 9855, 16644, 19037, 9855, 16646, 19037, 9855, 16648, 19037, 9855, 16650, 19037, 9855, 16652, 19037, 9855, 16654, 19037, 9855, 16656, 19037, 9855, 16658, 19037, 9855, 16660, 19037, 9855, 16662, 19037, 9855, 16664, 19037, 9855, 16665, 13765, 260, 19037, 9855, 16665, 13765, 647, 9287, 106, 19037, 9855, 16665, 13765, 1748, 19037, 9855, 16665, 13765, 2647, 9287, 2188, 19037, 9855, 16665, 13765, 2647, 9287, 2647, 9287, 2188, 19037, 9855, 16666, 19037, 9855, 16668, 19037, 9855, 16670, 19037, 9855, 16672, 19037, 9855, 16674, 19037, 9855, 16676, 19037, 9855, 16678, 19037, 9855, 16680, 19037, 9855, 16682, 19037, 9855, 16684, 19037, 9855, 16686, 19037, 9855, 16687, 13765, 384, 19037, 9855, 16687, 13765, 626, 19037, 9855, 16687, 13765, 646, 19037, 9855, 16687, 13765, 654, 19037, 9855, 16687, 13765, 864, 19037, 9855, 16687, 13765, 884, 19037, 9855, 16687, 13765, 2000, 19037, 9855, 16687, 13765, 3210, 19037, 9855, 16687, 13765, 6447, 7071, 7070, 19037, 9855, 16687, 13765, 13892, 19037, 9855, 16688, 19037, 9855, 16690, 19037, 9855, 16691, 13765, 244, 19037, 9855, 16691, 13765, 460, 19037, 9855, 16691, 13765, 654, 19037, 9855, 16691, 13765, 1222, 19037, 9855, 16691, 13765, 1748, 19037, 9855, 16691, 13765, 1749, 7070, 19037, 9855, 16691, 13765, 2647, 9287, 2647, 9287, 2188, 19037, 9855, 16691, 13765, 13485, 9287, 358, 19037, 9855, 16691, 13765, 13892, 19037, 9855, 16694, 19037, 9855, 16696, 19037, 9855, 18588, 19037, 16901, 9855, 2607, 17641, 2611, 13536, 19037, 16901, 9855, 2607, 17641, 2611, 17086, 19037, 16901, 9855, 2611, 5732, 19037, 16901, 9855, 2611, 5888, 19037, 16901, 9855, 2611, 7123, 1554, 19037, 16901, 9855, 2611, 12020, 19037, 16901, 9855, 2611, 12170, 19037, 16901, 9855, 2611, 12172, 19037, 16901, 9855, 2611, 13470, 19037, 16901, 9855, 2611, 13729, 6408, 19037, 16901, 9855, 2611, 13729, 17473, 6777, 0, 19037, 16901, 9855, 2611, 14635, 864, 19037, 16901, 9855, 2611, 17087, 864, 19037, 16901, 9855, 2611, 17087, 1554, 19037, 16901, 9855, 3077, 40, 19037, 16901, 9855, 3077, 41, 17473, 6776, 19037, 16901, 9855, 3077, 864, 19037, 16901, 9855, 3077, 865, 10122, 19037, 16901, 9855, 3077, 6408, 19037, 16901, 9855, 3077, 12170, 19037, 16901, 9855, 3077, 13462, 19037, 16901, 9855, 3077, 17473, 6777, 5300, 19037, 16901, 9855, 3357, 864, 19037, 16901, 9855, 3357, 865, 10122, 19037, 16901, 9855, 3357, 5732, 19037, 16901, 9855, 3357, 5888, 19037, 16901, 9855, 3357, 12020, 19037, 16901, 9855, 3357, 12170, 19037, 16901, 9855, 3357, 12172, 19037, 16901, 9855, 3357, 13462, 19037, 16901, 9855, 3357, 13470, 19037, 16901, 9855, 3357, 15735, 6408, 19037, 16901, 9855, 3357, 15735, 17473, 6777, 0, 19037, 16901, 9855, 6757, 40, 19037, 16901, 9855, 6757, 41, 17473, 6776, 19037, 16901, 9855, 6757, 864, 19037, 16901, 9855, 6757, 865, 10122, 19037, 16901, 9855, 6757, 5732, 19037, 16901, 9855, 6757, 5733, 17473, 6776, 19037, 16901, 9855, 6757, 5888, 19037, 16901, 9855, 6757, 6408, 19037, 16901, 9855, 6757, 12170, 19037, 16901, 9855, 6757, 12172, 19037, 16901, 9855, 6757, 13462, 19037, 16901, 9855, 6757, 13470, 19037, 16901, 9855, 6757, 15575, 6408, 19037, 16901, 9855, 6779, 40, 19037, 16901, 9855, 6779, 41, 17473, 6776, 19037, 16901, 9855, 6779, 864, 19037, 16901, 9855, 6779, 865, 10122, 19037, 16901, 9855, 6779, 5732, 19037, 16901, 9855, 6779, 5733, 17473, 6776, 19037, 16901, 9855, 6779, 5888, 19037, 16901, 9855, 6779, 6408, 19037, 16901, 9855, 6779, 12170, 19037, 16901, 9855, 6779, 12172, 19037, 16901, 9855, 6779, 13462, 19037, 16901, 9855, 6779, 13470, 19037, 16901, 9855, 6779, 17473, 6777, 12570, 19037, 16901, 9855, 6779, 17473, 6777, 12571, 0, 19037, 16901, 9855, 6779, 17473, 6777, 12571, 2, 19037, 16901, 9855, 6779, 17473, 6777, 15010, 19037, 16901, 9855, 8781, 40, 19037, 16901, 9855, 8781, 41, 17473, 6776, 19037, 16901, 9855, 8781, 864, 19037, 16901, 9855, 8781, 6408, 19037, 16901, 9855, 8781, 12170, 19037, 16901, 9855, 8781, 13462, 19037, 16901, 9855, 8781, 17473, 6777, 14862, 19037, 16901, 9855, 8781, 17473, 6777, 14863, 0, 19037, 16901, 9855, 8781, 17473, 6777, 16514, 19037, 16901, 9855, 8781, 17473, 6777, 16516, 19037, 16901, 9855, 11979, 40, 19037, 16901, 9855, 11979, 41, 17473, 6776, 19037, 16901, 9855, 11979, 864, 19037, 16901, 9855, 11979, 6408, 19037, 16901, 9855, 11979, 12170, 19037, 16901, 9855, 11979, 13462, 19037, 16901, 9855, 11979, 17473, 6777, 10436, 19037, 16901, 9855, 11979, 17473, 6777, 13894, 19037, 16901, 9855, 13451, 40, 19037, 16901, 9855, 13451, 41, 17473, 6776, 19037, 16901, 9855, 13451, 864, 19037, 16901, 9855, 13451, 6408, 19037, 16901, 9855, 13451, 12170, 19037, 16901, 9855, 13451, 13462, 19037, 16901, 9855, 13451, 17473, 6777, 7427, 0, 19037, 16901, 9855, 13451, 17473, 6777, 7427, 2, 19037, 16901, 9855, 13451, 17473, 6777, 12384, 19037, 16901, 9855, 13463, 13765, 1443, 9287, 2314, 19037, 16901, 9855, 13463, 13765, 1443, 9287, 6408, 19037, 16901, 9855, 13737, 864, 19037, 16901, 9855, 13737, 865, 10122, 19037, 16901, 9855, 13737, 5732, 19037, 16901, 9855, 13737, 5888, 19037, 16901, 9855, 13737, 5889, 17473, 6776, 19037, 16901, 9855, 13737, 6408, 19037, 16901, 9855, 13737, 12170, 19037, 16901, 9855, 13737, 12172, 19037, 16901, 9855, 13737, 13462, 19037, 16901, 9855, 13737, 13463, 17473, 6776, 19037, 16901, 9855, 13737, 13470, 19037, 16901, 9855, 13737, 13471, 17473, 6776, 19037, 16901, 9855, 13737, 17473, 6777, 12016, 19037, 16901, 9855, 13737, 17473, 6777, 12018, 19037, 16901, 9855, 16361, 2611, 13728, 19037, 16901, 9855, 16361, 3357, 15734, 19037, 16901, 9855, 16361, 12080, 19037, 16901, 9855, 16361, 12108, 19037, 16901, 9855, 19470, 19037, 16901, 9855, 19472, 19037, 20877, 9855, 2607, 17641, 10651, 16270, 19037, 20877, 9855, 17839, 11756, 19037, 20877, 9855, 17839, 18776, 19037, 20877, 9855, 17839, 19550, 19037, 20877, 9855, 18847, 11756, 19045, 10228, 19051, 15673, 12563, 671, 843, 20180, 19051, 15673, 12563, 671, 843, 20181, 10641, 10620, 19051, 15673, 12563, 671, 843, 20181, 10641, 14486, 19051, 15673, 12563, 671, 843, 20181, 10641, 18774, 19051, 15673, 12563, 6435, 843, 20180, 19051, 15673, 12563, 6435, 843, 20181, 10641, 10620, 19051, 15673, 12563, 6435, 843, 20181, 10641, 14486, 19051, 15673, 12563, 6435, 843, 20181, 10641, 18774, 19051, 15673, 12563, 18847, 843, 3293, 7816, 19051, 15673, 12563, 18847, 843, 3293, 13340, 19051, 15673, 12563, 18847, 843, 10620, 19051, 15673, 12563, 18847, 843, 14393, 7816, 19051, 15673, 12563, 18847, 843, 14393, 13340, 19051, 15673, 12563, 18847, 10641, 14486, 19051, 15673, 12563, 18847, 10641, 18774, 19058, 19071, 15266, 19215, 3357, 14823, 11476, 19215, 11476, 19215, 11477, 635, 896, 19215, 11477, 6785, 896, 19215, 11477, 10641, 3265, 19406, 19215, 11477, 10641, 3265, 20374, 19215, 11477, 10641, 12537, 18775, 18906, 19215, 11477, 10641, 13563, 18775, 18906, 19215, 11477, 10641, 13563, 20683, 18906, 19215, 11477, 10641, 14519, 19406, 19215, 11477, 10641, 14625, 15642, 19215, 11477, 10641, 15095, 18775, 18906, 19215, 11477, 10641, 16891, 10092, 19215, 11477, 10641, 20181, 15642, 19215, 11477, 10641, 20683, 18906, 19215, 11477, 19407, 485, 17463, 11476, 19215, 11571, 11476, 19215, 11571, 16153, 14049, 11476, 19215, 12277, 11476, 19215, 12277, 19931, 11476, 19215, 14049, 11476, 19215, 14049, 11477, 15901, 18775, 18906, 19215, 14286, 19215, 14555, 11476, 19215, 14625, 11476, 19215, 15291, 14312, 19215, 15456, 19215, 15781, 11476, 19215, 15945, 11476, 19215, 16481, 10641, 5741, 7817, 635, 896, 19215, 16481, 10641, 5741, 7817, 6785, 896, 19215, 16481, 10641, 5741, 7817, 14373, 17463, 16481, 10641, 5741, 13340, 19215, 16481, 10641, 5741, 7817, 14373, 19215, 16481, 10641, 5741, 13340, 19215, 16481, 10641, 5741, 13341, 635, 896, 19215, 16481, 10641, 5741, 13341, 6785, 896, 19215, 16481, 10641, 5741, 19406, 19215, 16481, 10641, 5741, 20374, 19215, 17275, 11476, 19215, 18775, 18906, 19215, 19553, 11476, 19215, 19931, 11476, 19215, 20377, 11476, 19215, 20501, 11477, 10641, 18775, 19890, 19215, 20687, 11476, 19215, 23305, 11476, 19215, 23305, 11477, 635, 896, 19215, 23305, 11477, 10641, 5853, 13456, 19215, 23305, 11477, 10641, 7883, 3265, 19406, 19215, 23305, 11477, 10641, 7883, 3265, 20374, 19215, 23305, 11477, 10641, 10533, 12277, 13456, 19215, 23305, 11477, 10641, 12277, 13456, 19215, 23305, 11477, 10641, 14625, 20181, 15642, 19215, 23305, 11477, 10641, 15095, 13456, 19215, 23305, 11477, 10641, 15155, 13456, 19215, 23305, 11477, 19407, 485, 17463, 23305, 11476, 19215, 23305, 14555, 11476, 19215, 23305, 15291, 14312, 19215, 23305, 15945, 11476, 19217, 11642, 19221, 16186, 19235, 15672, 19236, 19239, 10228, 19247, 12277, 3077, 15609, 17642, 19247, 12277, 6757, 15609, 17642, 19247, 12277, 12237, 11772, 19247, 12277, 14049, 14486, 19247, 12277, 14049, 15620, 19247, 12277, 17154, 19253, 9854, 19260, 19281, 2175, 7854, 19281, 2511, 9854, 19281, 3561, 9854, 19281, 3699, 9854, 19281, 6005, 9854, 19281, 6793, 9956, 19281, 7817, 11779, 16088, 19281, 7817, 14049, 20846, 19281, 7817, 15621, 16088, 19281, 7817, 20846, 19281, 9287, 9854, 19281, 11756, 19281, 11762, 19281, 11905, 2610, 19281, 11905, 3076, 19281, 11905, 3356, 19281, 11905, 6756, 19281, 11905, 6778, 19281, 11905, 8780, 19281, 11905, 10900, 19281, 11905, 11978, 19281, 11905, 13450, 19281, 11905, 13736, 19281, 12233, 14262, 19281, 12541, 13563, 14999, 0, 19281, 12541, 13563, 14999, 2, 19281, 12541, 13563, 14999, 4, 19281, 12541, 13563, 14999, 6, 19281, 12541, 13563, 14999, 8, 19281, 12541, 13563, 14999, 10, 19281, 12541, 13563, 14999, 12, 19281, 12541, 13563, 14999, 14, 19281, 12541, 13563, 14999, 16, 19281, 12541, 13563, 14999, 18, 19281, 12541, 13563, 14999, 20, 19281, 12541, 13563, 14999, 22, 19281, 12541, 13563, 14999, 24, 19281, 12541, 13563, 14999, 26, 19281, 12541, 13563, 14999, 28, 19281, 12541, 13563, 14999, 30, 19281, 12541, 13563, 14999, 32, 19281, 12541, 13563, 14999, 34, 19281, 12541, 13563, 14999, 36, 19281, 12541, 13563, 14999, 38, 19281, 12541, 13563, 14999, 40, 19281, 12541, 13563, 14999, 42, 19281, 12541, 13563, 14999, 44, 19281, 12541, 13563, 14999, 46, 19281, 12541, 13563, 14999, 48, 19281, 12541, 13563, 14999, 50, 19281, 12541, 16111, 14999, 0, 19281, 12541, 16111, 14999, 2, 19281, 12541, 16111, 14999, 4, 19281, 12541, 16111, 14999, 6, 19281, 12541, 16111, 14999, 8, 19281, 12541, 16111, 14999, 10, 19281, 12541, 16111, 14999, 12, 19281, 12541, 16111, 14999, 14, 19281, 12541, 16111, 14999, 16, 19281, 12541, 16111, 14999, 18, 19281, 12541, 16111, 14999, 20, 19281, 12541, 16111, 14999, 22, 19281, 12541, 16111, 14999, 24, 19281, 12541, 16111, 14999, 26, 19281, 12541, 16111, 14999, 28, 19281, 12541, 16111, 14999, 30, 19281, 12541, 16111, 14999, 32, 19281, 12541, 16111, 14999, 34, 19281, 12541, 16111, 14999, 36, 19281, 12541, 16111, 14999, 38, 19281, 12541, 16111, 14999, 40, 19281, 12541, 16111, 14999, 42, 19281, 12541, 16111, 14999, 44, 19281, 12541, 16111, 14999, 46, 19281, 12541, 16111, 14999, 48, 19281, 12541, 16111, 14999, 50, 19281, 13257, 9854, 19281, 13341, 11779, 16088, 19281, 13341, 14049, 20846, 19281, 13341, 15621, 16088, 19281, 13341, 20846, 19281, 13758, 19281, 14411, 896, 19281, 14601, 9854, 19281, 14647, 9854, 19281, 15050, 19281, 15233, 9854, 19281, 17005, 9854, 19281, 17123, 17254, 19281, 17254, 19281, 17642, 19281, 18511, 8320, 19281, 18847, 7854, 19281, 18894, 19281, 19409, 9854, 19281, 19557, 8320, 19281, 19614, 19281, 19880, 19281, 19921, 14262, 19281, 19923, 92, 19281, 20685, 8320, 19281, 21097, 9854, 19281, 21110, 19285, 20342, 19303, 6718, 19304, 19309, 7817, 14519, 16088, 19309, 11571, 15620, 19309, 12105, 12563, 18846, 19309, 13341, 14519, 16088, 19309, 14049, 14486, 19309, 14819, 14698, 19309, 14819, 14999, 0, 19309, 14819, 14999, 8, 19309, 14819, 14999, 16, 19309, 14819, 14999, 28, 19309, 14819, 14999, 40, 19309, 14819, 14999, 66, 19309, 14819, 14999, 204, 19309, 14819, 14999, 214, 19309, 14819, 14999, 482, 19309, 14819, 14999, 694, 19309, 14819, 14999, 700, 19309, 14819, 14999, 706, 19309, 14819, 14999, 734, 19309, 14819, 14999, 736, 19309, 14819, 14999, 738, 19309, 14819, 14999, 742, 19309, 14819, 14999, 746, 19309, 14819, 14999, 3520, 19309, 14819, 14999, 3546, 19309, 14819, 14999, 3654, 19309, 14819, 14999, 3700, 19309, 14819, 14999, 9866, 19309, 14819, 14999, 11732, 19309, 14819, 14999, 12280, 19309, 14819, 14999, 12376, 19309, 14819, 14999, 12732, 19309, 14819, 14999, 12886, 19309, 14819, 14999, 13232, 19309, 14819, 14999, 13336, 19309, 14819, 14999, 14944, 19309, 14819, 14999, 15748, 19309, 14819, 14999, 16142, 19309, 14819, 14999, 16576, 19309, 14819, 14999, 17024, 19309, 14819, 14999, 17362, 19309, 14819, 14999, 19652, 19309, 14819, 14999, 20326, 19309, 14819, 14999, 20368, 19309, 14819, 14999, 20434, 19309, 14819, 14999, 20444, 19309, 14819, 14999, 20760, 19309, 14819, 14999, 20816, 19309, 14819, 14999, 20818, 19309, 14819, 14999, 20890, 19309, 14819, 14999, 20892, 19309, 14819, 14999, 20896, 19309, 14819, 14999, 20926, 19309, 14819, 14999, 20928, 19309, 14819, 14999, 21190, 19309, 14819, 14999, 22918, 19309, 14819, 14999, 22920, 19309, 17463, 11476, 19309, 18209, 14999, 0, 19309, 18209, 14999, 8, 19309, 18209, 14999, 16, 19309, 18209, 14999, 26, 19309, 18209, 14999, 28, 19309, 18209, 14999, 40, 19309, 18209, 14999, 266, 19309, 18209, 14999, 270, 19309, 18209, 14999, 274, 19309, 18209, 14999, 282, 19309, 18209, 14999, 286, 19309, 18209, 14999, 350, 19309, 18209, 14999, 354, 19309, 18209, 14999, 358, 19309, 18209, 14999, 366, 19309, 18209, 14999, 370, 19309, 18209, 14999, 416, 19309, 18209, 14999, 424, 19309, 18209, 14999, 430, 19309, 18209, 14999, 436, 19309, 18209, 14999, 440, 19309, 18209, 14999, 448, 19309, 18209, 14999, 452, 19309, 18209, 14999, 460, 19309, 18209, 14999, 468, 19309, 18209, 14999, 472, 19309, 18209, 14999, 572, 19309, 18209, 14999, 574, 19309, 18209, 14999, 578, 19309, 18209, 14999, 580, 19309, 18209, 14999, 584, 19309, 18209, 14999, 588, 19309, 18209, 14999, 592, 19309, 18209, 14999, 598, 19309, 18209, 14999, 602, 19309, 18209, 14999, 612, 19309, 18209, 14999, 622, 19309, 18209, 14999, 626, 19309, 18209, 14999, 630, 19309, 18209, 14999, 634, 19309, 18209, 14999, 642, 19309, 18209, 14999, 694, 19309, 18209, 14999, 710, 19309, 18209, 14999, 734, 19309, 18209, 14999, 742, 19309, 18209, 14999, 746, 19309, 18209, 14999, 13563, 0, 19309, 18209, 14999, 13563, 8, 19309, 18209, 14999, 13563, 16, 19309, 18209, 14999, 13563, 28, 19309, 18209, 14999, 13563, 40, 19309, 18209, 14999, 13563, 642, 19309, 18209, 14999, 13563, 734, 19309, 18209, 14999, 13563, 742, 19309, 18209, 14999, 13563, 746, 19309, 18209, 15119, 1216, 19309, 18209, 15873, 13579, 8320, 19309, 18209, 20909, 13579, 8320, 19309, 19215, 11476, 19309, 19407, 11476, 19309, 20375, 11476, 19309, 20727, 6793, 9956, 19309, 20727, 11762, 19309, 23459, 19545, 13579, 8320, 19310, 19322, 19324, 19327, 19297, 15672, 19331, 19013, 15080, 19332, 19333, 10641, 16413, 9696, 19339, 634, 19339, 635, 843, 17237, 18430, 19339, 10641, 1217, 11392, 19349, 90, 19350, 19361, 15672, 19363, 9286, 19363, 13764, 19363, 19618, 19385, 9855, 13052, 19385, 9855, 15868, 19385, 9855, 17610, 19385, 11905, 2610, 19385, 11905, 3076, 19385, 11905, 3356, 19385, 11905, 6756, 19385, 11905, 6778, 19385, 11905, 8780, 19385, 11905, 10900, 19385, 11905, 11978, 19385, 11905, 13450, 19385, 11905, 13736, 19385, 14003, 9855, 8, 19385, 14003, 9855, 16, 19385, 14003, 9855, 28, 19385, 14003, 9855, 40, 19385, 14003, 9855, 58, 19385, 14003, 9855, 72, 19385, 14003, 9855, 94, 19385, 14003, 9855, 308, 19385, 14003, 9855, 676, 19385, 14999, 0, 19385, 14999, 8, 19385, 14999, 16, 19385, 14999, 28, 19385, 14999, 40, 19385, 14999, 58, 19385, 14999, 72, 19385, 14999, 94, 19385, 14999, 106, 19385, 14999, 124, 19385, 14999, 148, 19385, 14999, 244, 19385, 14999, 266, 19385, 14999, 308, 19385, 14999, 336, 19385, 14999, 350, 19385, 14999, 384, 19385, 14999, 416, 19385, 14999, 448, 19385, 14999, 522, 19385, 14999, 572, 19385, 14999, 588, 19385, 14999, 622, 19385, 14999, 676, 19385, 14999, 680, 19385, 14999, 734, 19385, 14999, 904, 19385, 14999, 932, 19385, 14999, 1044, 19385, 14999, 1142, 19385, 14999, 1164, 19385, 14999, 1482, 19385, 14999, 1492, 19385, 14999, 1796, 19385, 14999, 1812, 19385, 14999, 1914, 19385, 14999, 2444, 19385, 14999, 2492, 19385, 14999, 2556, 19385, 14999, 2676, 19385, 14999, 2956, 19385, 14999, 3048, 19385, 14999, 3242, 19385, 14999, 3322, 19385, 14999, 6306, 19385, 14999, 6314, 19385, 14999, 10264, 19390, 19403, 859, 21279, 11476, 19407, 3293, 15527, 14049, 11476, 19407, 3357, 14823, 11476, 19407, 10621, 11476, 19407, 11476, 19407, 11477, 635, 896, 19407, 11477, 635, 897, 9175, 20375, 11477, 635, 896, 19407, 11477, 635, 11571, 16248, 19407, 11477, 6785, 896, 19407, 11477, 6785, 897, 635, 11571, 16248, 19407, 11477, 9175, 20375, 11476, 19407, 11477, 10641, 3265, 17462, 19407, 11477, 10641, 3265, 19214, 19407, 11477, 10641, 7292, 19407, 11477, 10641, 7888, 19407, 11477, 10641, 9287, 11552, 19407, 11477, 10641, 10092, 19407, 11477, 10641, 10093, 10641, 14625, 18847, 15642, 19407, 11477, 10641, 10093, 10641, 18847, 15642, 19407, 11477, 10641, 12537, 18775, 18906, 19407, 11477, 10641, 13563, 18775, 18906, 19407, 11477, 10641, 13563, 20683, 18906, 19407, 11477, 10641, 14623, 9952, 19407, 11477, 10641, 14625, 18847, 15642, 19407, 11477, 10641, 15095, 18775, 18906, 19407, 11477, 10641, 15642, 19407, 11477, 10641, 16891, 10092, 19407, 11477, 10641, 18847, 15642, 19407, 11477, 10641, 20683, 18906, 19407, 11477, 11393, 13507, 20375, 11476, 19407, 11477, 11393, 13759, 18386, 19407, 11477, 11393, 14281, 12005, 634, 19407, 11477, 11393, 17123, 13759, 18386, 19407, 11477, 11393, 17123, 14281, 12005, 634, 19407, 11477, 17369, 46, 19407, 11477, 17369, 15650, 19407, 11477, 17369, 19408, 19407, 11571, 11476, 19407, 11571, 16153, 14049, 11476, 19407, 12277, 11476, 19407, 12277, 19931, 11476, 19407, 14049, 11476, 19407, 14049, 11477, 15901, 18775, 18906, 19407, 14555, 11476, 19407, 14625, 6287, 11476, 19407, 14625, 11476, 19407, 14625, 11477, 6785, 896, 19407, 14625, 11477, 10641, 15642, 19407, 14625, 11477, 10641, 18847, 15642, 19407, 14625, 19888, 19407, 15291, 14312, 19407, 15456, 19407, 15781, 6287, 11476, 19407, 15781, 11476, 19407, 16481, 9175, 20375, 16480, 19407, 16481, 10641, 5741, 671, 635, 896, 19407, 16481, 10641, 5741, 671, 6785, 896, 19407, 16481, 10641, 5741, 671, 11393, 7883, 6286, 19407, 16481, 10641, 5741, 671, 11393, 19407, 16481, 10641, 5741, 6434, 19407, 16481, 10641, 5741, 671, 11393, 20375, 16481, 10641, 5741, 670, 19407, 16481, 10641, 5741, 6435, 635, 896, 19407, 16481, 10641, 5741, 6435, 6785, 896, 19407, 16481, 10641, 5741, 6435, 11393, 20375, 16481, 10641, 5741, 6434, 19407, 16481, 10641, 5741, 6435, 11553, 7883, 6286, 19407, 16481, 10641, 5741, 17462, 19407, 16481, 10641, 5741, 19214, 19407, 17275, 11476, 19407, 18635, 11476, 19407, 18775, 18906, 19407, 19553, 11476, 19407, 19888, 19407, 19931, 11476, 19407, 20377, 11476, 19407, 20501, 11477, 6785, 896, 19407, 20501, 11477, 10641, 10092, 19407, 20501, 11477, 10641, 10093, 10641, 14625, 18847, 15642, 19407, 20501, 11477, 10641, 10093, 10641, 18847, 15642, 19407, 20501, 11477, 10641, 14625, 18847, 15642, 19407, 20501, 11477, 10641, 18775, 19890, 19407, 20501, 11477, 10641, 18847, 15642, 19407, 20501, 15781, 6287, 11476, 19407, 20545, 18583, 14049, 11476, 19407, 20687, 11476, 19407, 20769, 14049, 11476, 19407, 20831, 11476, 19407, 21089, 18583, 14049, 11476, 19407, 21199, 14049, 11476, 19407, 21287, 14049, 11476, 19407, 23305, 11476, 19407, 23305, 11477, 635, 896, 19407, 23305, 11477, 9175, 20375, 23305, 11476, 19407, 23305, 11477, 10641, 5853, 13456, 19407, 23305, 11477, 10641, 7883, 3265, 17462, 19407, 23305, 11477, 10641, 7883, 3265, 19214, 19407, 23305, 11477, 10641, 10533, 12277, 13456, 19407, 23305, 11477, 10641, 12277, 13456, 19407, 23305, 11477, 10641, 14625, 18847, 15642, 19407, 23305, 11477, 10641, 14625, 20181, 15642, 19407, 23305, 11477, 10641, 15095, 13456, 19407, 23305, 11477, 10641, 15155, 13456, 19407, 23305, 14555, 11476, 19407, 23305, 15291, 14312, 19409, 505, 12005, 634, 19409, 505, 17237, 12005, 634, 19409, 505, 17237, 12005, 635, 10641, 1217, 11392, 19409, 505, 17237, 12005, 635, 10641, 1217, 11393, 13340, 19409, 505, 17237, 12005, 635, 10641, 1217, 14874, 19409, 505, 20127, 634, 19409, 505, 20536, 19409, 505, 21096, 19409, 843, 2511, 20536, 19409, 843, 20917, 2511, 12005, 634, 19409, 987, 2511, 12005, 634, 19409, 987, 2511, 20127, 634, 19409, 9175, 12005, 634, 19409, 9854, 19409, 10641, 1216, 19409, 10641, 14487, 14874, 19409, 10641, 18511, 8321, 11392, 19409, 11393, 17223, 505, 12004, 19409, 11393, 17223, 11393, 21096, 19409, 11393, 17237, 12005, 11393, 21097, 11393, 17237, 12004, 19409, 11393, 19407, 11476, 19409, 11393, 20671, 12005, 11393, 21096, 19409, 11393, 21097, 11393, 20671, 12004, 19409, 12005, 635, 505, 21096, 19409, 14497, 123, 11782, 19409, 14497, 123, 11783, 11393, 17237, 12004, 19414, 19415, 8458, 19415, 8459, 14414, 19425, 95, 14993, 8320, 19425, 6291, 8320, 19425, 9855, 9212, 19425, 9855, 15868, 19425, 9855, 17486, 19425, 9855, 17610, 19425, 9855, 17652, 19425, 9855, 20552, 19425, 11905, 2610, 19425, 11905, 3076, 19425, 11905, 3356, 19425, 11905, 6756, 19425, 11905, 6778, 19425, 11905, 8780, 19425, 11905, 10900, 19425, 11905, 11978, 19425, 11905, 13450, 19425, 11905, 13736, 19425, 14003, 9855, 8, 19425, 14003, 9855, 16, 19425, 14003, 9855, 28, 19425, 14003, 9855, 40, 19425, 14003, 9855, 58, 19425, 14003, 9855, 72, 19425, 14003, 9855, 94, 19425, 14003, 9855, 184, 19425, 14003, 9855, 308, 19425, 14003, 9855, 498, 19425, 14003, 9855, 676, 19425, 14003, 9855, 17493, 22, 19425, 14003, 9855, 17493, 34, 19425, 14003, 9855, 17493, 396, 19425, 14003, 9855, 17493, 582, 19425, 14999, 0, 19425, 14999, 8, 19425, 14999, 16, 19425, 14999, 28, 19425, 14999, 40, 19425, 14999, 58, 19425, 14999, 72, 19425, 14999, 94, 19425, 14999, 106, 19425, 14999, 124, 19425, 14999, 148, 19425, 14999, 184, 19425, 14999, 244, 19425, 14999, 266, 19425, 14999, 308, 19425, 14999, 336, 19425, 14999, 350, 19425, 14999, 384, 19425, 14999, 416, 19425, 14999, 448, 19425, 14999, 498, 19425, 14999, 522, 19425, 14999, 572, 19425, 14999, 588, 19425, 14999, 622, 19425, 14999, 676, 19425, 14999, 680, 19425, 14999, 734, 19425, 14999, 932, 19425, 14999, 1044, 19425, 14999, 1142, 19425, 14999, 1164, 19425, 14999, 1217, 9484, 19425, 14999, 1492, 19425, 14999, 1796, 19425, 14999, 1914, 19425, 14999, 2152, 19425, 14999, 2444, 19425, 14999, 2492, 19425, 14999, 2556, 19425, 14999, 2676, 19425, 14999, 2956, 19425, 14999, 3048, 19425, 14999, 3114, 19425, 14999, 3242, 19425, 14999, 3322, 19425, 14999, 6314, 19425, 14999, 7874, 19425, 14999, 8842, 19425, 14999, 10264, 19425, 14999, 10284, 19425, 14999, 14473, 20, 19425, 14999, 14473, 22, 19425, 14999, 14473, 24, 19425, 14999, 14473, 26, 19425, 14999, 14473, 48, 19425, 14999, 14473, 396, 19425, 14999, 14473, 466, 19425, 14999, 14473, 582, 19425, 14999, 14473, 2156, 19425, 14999, 16011, 308, 19425, 14999, 17493, 22, 19425, 14999, 17493, 34, 19425, 14999, 17493, 396, 19425, 14999, 17493, 582, 19425, 15233, 2611, 16502, 19425, 15233, 2611, 18744, 19425, 15233, 3232, 19425, 18089, 2611, 7122, 19425, 18089, 2611, 12078, 19425, 18089, 2611, 13710, 19425, 18089, 2611, 14634, 19425, 18089, 2611, 17086, 19425, 18089, 2611, 18082, 19425, 18089, 2611, 19636, 19425, 18089, 2611, 19812, 19425, 18089, 2611, 23560, 19425, 18089, 13737, 18508, 19425, 18089, 13737, 20100, 19425, 18089, 13737, 20430, 19425, 18089, 13737, 20490, 19429, 16939, 19352, 19445, 6779, 6430, 19445, 6781, 19825, 18575, 2610, 19445, 6781, 19825, 18575, 3356, 19445, 6781, 19825, 18575, 13736, 19445, 6793, 9956, 19445, 9843, 18697, 17695, 15074, 19445, 10217, 9891, 14856, 19445, 11566, 19445, 11567, 10641, 14625, 18392, 19445, 11567, 10641, 18392, 19445, 11756, 19445, 11762, 19445, 11905, 2610, 19445, 11905, 3076, 19445, 11905, 3356, 19445, 11905, 6756, 19445, 11905, 6778, 19445, 11905, 8780, 19445, 11905, 10900, 19445, 11905, 11978, 19445, 11905, 13450, 19445, 11905, 13736, 19445, 13659, 11566, 19445, 13659, 11567, 10641, 14625, 18392, 19445, 13659, 11567, 10641, 18392, 19445, 14003, 19618, 19445, 14625, 11567, 10641, 18392, 19445, 14999, 0, 19445, 14999, 8, 19445, 14999, 16, 19445, 14999, 28, 19445, 14999, 40, 19445, 14999, 106, 19445, 14999, 148, 19445, 14999, 184, 19445, 14999, 224, 19445, 14999, 244, 19445, 14999, 336, 19445, 14999, 350, 19445, 14999, 384, 19445, 14999, 416, 19445, 14999, 448, 19445, 14999, 482, 19445, 14999, 522, 19445, 14999, 556, 19445, 14999, 572, 19445, 14999, 588, 19445, 14999, 622, 19445, 14999, 656, 19445, 14999, 694, 19445, 14999, 734, 19445, 14999, 752, 19445, 14999, 833, 6921, 0, 19445, 14999, 833, 6921, 16, 19445, 14999, 833, 6921, 70, 19445, 14999, 833, 6921, 124, 19445, 14999, 833, 6921, 148, 19445, 14999, 833, 6921, 350, 19445, 14999, 833, 6921, 522, 19445, 14999, 833, 6921, 622, 19445, 14999, 833, 6921, 752, 19445, 14999, 833, 6921, 1142, 19445, 14999, 833, 6921, 2444, 19445, 14999, 833, 6921, 2492, 19445, 14999, 833, 6921, 2676, 19445, 14999, 833, 6921, 3114, 19445, 14999, 833, 6921, 3322, 19445, 14999, 833, 6921, 3812, 19445, 14999, 833, 6921, 7123, 40, 19445, 14999, 833, 6921, 7123, 734, 19445, 14999, 833, 6921, 10264, 19445, 14999, 833, 6921, 13737, 14344, 19445, 14999, 833, 6921, 14344, 19445, 14999, 833, 6921, 14548, 19445, 14999, 833, 6921, 16218, 19445, 14999, 833, 6921, 17446, 19445, 14999, 833, 6921, 17487, 2610, 19445, 14999, 833, 6921, 17611, 2610, 19445, 14999, 833, 6921, 18183, 17446, 19445, 14999, 844, 19445, 14999, 1044, 19445, 14999, 1048, 19445, 14999, 1578, 19445, 14999, 1914, 19445, 14999, 2122, 19445, 14999, 3048, 19445, 14999, 3308, 19445, 14999, 3816, 19445, 14999, 3852, 19445, 14999, 9843, 8, 19445, 14999, 9843, 16, 19445, 14999, 9843, 40, 19445, 14999, 9843, 148, 19445, 14999, 9843, 224, 19445, 14999, 9843, 244, 19445, 14999, 9843, 266, 19445, 14999, 9843, 334, 19445, 14999, 9843, 336, 19445, 14999, 9843, 350, 19445, 14999, 9843, 522, 19445, 14999, 9843, 622, 19445, 14999, 9843, 656, 19445, 14999, 9843, 752, 19445, 14999, 9843, 844, 19445, 14999, 9843, 1044, 19445, 14999, 9843, 1430, 19445, 14999, 9843, 1578, 19445, 14999, 9843, 2866, 19445, 14999, 9843, 3048, 19445, 14999, 9843, 3308, 19445, 14999, 9843, 3812, 19445, 14999, 10217, 8, 19445, 14999, 10217, 16, 19445, 14999, 10217, 28, 19445, 14999, 10217, 40, 19445, 14999, 10217, 106, 19445, 14999, 10217, 148, 19445, 14999, 10217, 244, 19445, 14999, 10217, 336, 19445, 14999, 10217, 350, 19445, 14999, 10217, 416, 19445, 14999, 10217, 482, 19445, 14999, 10217, 522, 19445, 14999, 10217, 556, 19445, 14999, 10217, 622, 19445, 14999, 10217, 656, 19445, 14999, 10217, 694, 19445, 14999, 10217, 734, 19445, 14999, 10217, 833, 6921, 622, 19445, 14999, 10217, 833, 6921, 3812, 19445, 14999, 10217, 844, 19445, 14999, 10217, 1044, 19445, 14999, 10217, 1254, 19445, 14999, 10217, 1430, 19445, 14999, 10217, 1578, 19445, 14999, 10217, 1800, 19445, 14999, 10217, 2460, 19445, 14999, 10217, 3308, 19445, 14999, 10217, 7883, 14003, 9854, 19445, 14999, 15063, 16, 19445, 14999, 15063, 224, 19445, 14999, 15063, 350, 19445, 14999, 15063, 572, 19445, 14999, 15063, 833, 6921, 124, 19445, 14999, 15063, 833, 6921, 622, 19445, 14999, 15063, 833, 6921, 752, 19445, 14999, 15063, 833, 6921, 932, 19445, 14999, 15063, 833, 6921, 1108, 19445, 14999, 15063, 833, 6921, 1164, 19445, 14999, 15063, 833, 6921, 1492, 19445, 14999, 15063, 833, 6921, 1796, 19445, 14999, 15063, 833, 6921, 2122, 19445, 14999, 15063, 833, 6921, 2444, 19445, 14999, 15063, 833, 6921, 3114, 19445, 14999, 15063, 833, 6921, 3322, 19445, 14999, 15063, 833, 6921, 3812, 19445, 14999, 15063, 833, 6921, 6314, 19445, 14999, 15063, 3812, 19445, 15063, 6793, 9956, 19445, 15063, 11762, 19445, 15196, 19445, 15781, 11567, 10641, 18392, 19445, 15811, 13659, 11567, 10641, 14625, 18392, 19445, 17139, 11566, 19445, 17139, 11567, 10641, 14625, 18392, 19445, 17139, 11567, 10641, 18392, 19445, 18016, 19445, 18183, 11566, 19445, 18183, 11567, 10641, 14625, 18392, 19459, 14999, 270, 19459, 14999, 528, 19459, 14999, 2280, 19459, 14999, 2536, 19459, 14999, 3220, 19459, 14999, 3532, 19459, 14999, 5312, 19459, 14999, 5818, 19459, 14999, 7156, 19459, 14999, 7596, 19459, 14999, 9372, 19459, 14999, 9486, 19459, 14999, 9776, 19459, 14999, 10126, 19459, 14999, 10810, 19459, 14999, 11424, 19459, 14999, 12085, 270, 19459, 14999, 12085, 2280, 19459, 14999, 12085, 2536, 19459, 14999, 12085, 5818, 19459, 14999, 12085, 7596, 19459, 14999, 12085, 9776, 19459, 14999, 12085, 10810, 19459, 14999, 12085, 11424, 19459, 14999, 12085, 14978, 19459, 14999, 12204, 19459, 14999, 13400, 19459, 14999, 14196, 19459, 14999, 14546, 19459, 14999, 14978, 19459, 14999, 15474, 19459, 15233, 2610, 19459, 15233, 2611, 16502, 19459, 15233, 3232, 19459, 15233, 3356, 19459, 15233, 6756, 19459, 15233, 6778, 19459, 15233, 13736, 19459, 15233, 15820, 19459, 19033, 15233, 6778, 19461, 6718, 19466, 19485, 9854, 19488, 19499, 14999, 270, 19499, 14999, 528, 19499, 14999, 2280, 19499, 14999, 2536, 19499, 14999, 3220, 19499, 14999, 3532, 19499, 14999, 5312, 19499, 14999, 5818, 19499, 14999, 7156, 19499, 14999, 7596, 19499, 14999, 9372, 19499, 14999, 9486, 19499, 14999, 9776, 19499, 14999, 10126, 19499, 14999, 10810, 19499, 14999, 11424, 19499, 14999, 12085, 2536, 19499, 14999, 12204, 19499, 14999, 13400, 19499, 14999, 14196, 19499, 14999, 14546, 19499, 14999, 14978, 19499, 14999, 15474, 19499, 15233, 2610, 19499, 15233, 3232, 19499, 15233, 3356, 19499, 15233, 6756, 19499, 15233, 6778, 19499, 15233, 13736, 19499, 15233, 15820, 19499, 22867, 16408, 19499, 23121, 16408, 19510, 19513, 19618, 19515, 9778, 19516, 19523, 13183, 9854, 19526, 19528, 19529, 10641, 3227, 3292, 19553, 13260, 19553, 18177, 18386, 19557, 8320, 19569, 15673, 1397, 15827, 18464, 19569, 15673, 1397, 15829, 18464, 19569, 15673, 1397, 15831, 18464, 19569, 15673, 1397, 15833, 18464, 19569, 15673, 1397, 15835, 18464, 19569, 15673, 1397, 15837, 18464, 19569, 15673, 1397, 15839, 18464, 19569, 15673, 1397, 16433, 19430, 19571, 8320, 19589, 14824, 19591, 18181, 17074, 19593, 19466, 19599, 8321, 316, 19599, 8321, 14540, 19599, 8321, 16520, 19599, 8321, 16850, 19599, 8321, 19482, 19599, 8321, 20121, 3760, 19599, 14003, 9855, 0, 19599, 14003, 9855, 8, 19599, 14003, 9855, 16, 19599, 14003, 9855, 28, 19599, 14003, 9855, 40, 19599, 14003, 9855, 58, 19599, 14003, 9855, 7883, 0, 19599, 14003, 9855, 7883, 8, 19599, 14003, 9855, 7883, 16, 19599, 14003, 9855, 7883, 40, 19599, 14003, 9855, 7883, 58, 19599, 14003, 9855, 13507, 0, 19599, 14003, 9855, 13642, 19599, 14003, 9855, 18403, 0, 19599, 14003, 9855, 18403, 58, 19599, 14999, 230, 19599, 14999, 316, 19599, 14999, 328, 19599, 14999, 334, 19599, 14999, 882, 19599, 14999, 950, 19599, 14999, 2312, 19599, 14999, 2536, 19599, 14999, 2818, 19599, 14999, 3268, 19599, 14999, 3760, 19599, 14999, 3806, 19599, 14999, 5242, 19599, 14999, 7560, 19599, 14999, 9506, 19599, 14999, 9746, 19599, 14999, 10076, 19599, 14999, 11846, 19599, 14999, 12152, 19599, 14999, 12514, 19599, 14999, 17224, 19599, 14999, 17428, 19599, 18319, 14999, 16, 19599, 18319, 14999, 13507, 0, 19599, 18319, 14999, 20121, 3760, 19599, 20877, 900, 19599, 20877, 3089, 18288, 19599, 20877, 10298, 19599, 20877, 10888, 19599, 20877, 11440, 19599, 20877, 13284, 19599, 20877, 14212, 19599, 20877, 14270, 19599, 20877, 14290, 19599, 20877, 14328, 19599, 20877, 16012, 19599, 20877, 16799, 13284, 19599, 20877, 16850, 19599, 20877, 20396, 19599, 20989, 8320, 19600, 19601, 15994, 19604, 19614, 19630, 19635, 14739, 671, 9954, 19635, 14739, 6435, 9954, 19635, 14739, 14999, 16948, 19635, 14739, 19941, 16948, 19638, 19640, 19643, 12274, 19644, 19647, 11446, 19647, 11447, 16935, 670, 19647, 11447, 16935, 7816, 19649, 13655, 15672, 19654, 19673, 2610, 19673, 3076, 19673, 3356, 19673, 6756, 19673, 6778, 19673, 7817, 20846, 19673, 8780, 19673, 9287, 9854, 19673, 10900, 19673, 11978, 19673, 12740, 19673, 13341, 20846, 19673, 13450, 19673, 13736, 19673, 14647, 9854, 19675, 3292, 19675, 10641, 18176, 19675, 14392, 19677, 9855, 15868, 19677, 9855, 16966, 19677, 9855, 18428, 19677, 9855, 19504, 19677, 9855, 19506, 19677, 11905, 2610, 19677, 11905, 3076, 19677, 11905, 3356, 19677, 11905, 6756, 19677, 11905, 6778, 19677, 11905, 8780, 19677, 11905, 10900, 19677, 11905, 11978, 19677, 11905, 13450, 19677, 11905, 13736, 19677, 14003, 9855, 16968, 19677, 14003, 9855, 16980, 19677, 14003, 9855, 18418, 19677, 14003, 9855, 18424, 19677, 14003, 9855, 20300, 19677, 14003, 9855, 20302, 19677, 14999, 0, 19677, 14999, 8, 19677, 14999, 16, 19677, 14999, 28, 19677, 14999, 40, 19677, 14999, 66, 19677, 14999, 106, 19677, 14999, 124, 19677, 14999, 148, 19677, 14999, 214, 19677, 14999, 224, 19677, 14999, 244, 19677, 14999, 266, 19677, 14999, 336, 19677, 14999, 350, 19677, 14999, 384, 19677, 14999, 416, 19677, 14999, 448, 19677, 14999, 522, 19677, 14999, 556, 19677, 14999, 572, 19677, 14999, 588, 19677, 14999, 622, 19677, 14999, 680, 19677, 14999, 694, 19677, 14999, 718, 19677, 14999, 734, 19677, 14999, 752, 19677, 14999, 932, 19677, 14999, 1914, 19677, 14999, 2118, 19677, 14999, 2444, 19677, 14999, 2556, 19677, 14999, 2908, 19677, 14999, 3162, 19677, 14999, 12085, 20, 19677, 14999, 12085, 24, 19677, 17652, 19677, 19015, 9855, 16978, 19677, 19015, 9855, 18426, 19677, 19015, 9855, 18437, 416, 19677, 19015, 9855, 18437, 694, 19677, 19015, 9855, 19500, 19677, 20877, 11565, 107, 17160, 19677, 20877, 11565, 149, 17160, 19677, 20877, 11565, 351, 17160, 19677, 20877, 11565, 2119, 17160, 19677, 20877, 11565, 11638, 19677, 20877, 11565, 13646, 19677, 20877, 11565, 17080, 19677, 20877, 11565, 18420, 19678, 19760, 19768, 19773, 497, 3293, 485, 12750, 19773, 9854, 19773, 18253, 9854, 19773, 18514, 19773, 18515, 10641, 9206, 19773, 18516, 19774, 19777, 1397, 497, 3245, 13984, 19777, 1397, 1834, 19777, 1397, 2093, 505, 12748, 19777, 1397, 5853, 20360, 19777, 1397, 6558, 19777, 1397, 6793, 14486, 19777, 1397, 11928, 19777, 1397, 12221, 635, 8358, 19777, 1397, 12392, 19777, 1397, 12742, 19777, 1397, 13322, 19777, 1397, 13632, 19777, 1397, 13886, 19777, 1397, 14030, 19777, 1397, 14322, 19777, 1397, 14454, 19777, 1397, 14464, 19777, 1397, 14497, 12764, 19777, 1397, 14630, 19777, 1397, 14720, 19777, 1397, 14988, 19777, 1397, 15404, 19777, 1397, 15452, 19777, 1397, 15962, 19777, 1397, 16042, 19777, 1397, 16162, 19777, 1397, 16174, 19777, 1397, 16258, 19777, 1397, 16386, 19777, 1397, 16497, 5720, 19777, 1397, 16565, 13562, 19777, 1397, 16580, 19777, 1397, 16780, 19777, 1397, 16790, 19777, 1397, 16954, 19777, 1397, 16988, 19777, 1397, 17116, 19777, 1397, 17228, 19777, 1397, 17502, 19777, 1397, 18032, 19777, 1397, 18096, 19777, 1397, 18128, 19777, 1397, 18168, 19777, 1397, 18538, 19777, 1397, 18648, 19777, 1397, 18660, 19777, 1397, 18843, 505, 17506, 19777, 1397, 18953, 2632, 19777, 1397, 18998, 19777, 1397, 19016, 19777, 1397, 19040, 19777, 1397, 19054, 19777, 1397, 19230, 19777, 1397, 19268, 19777, 1397, 19272, 19777, 1397, 19282, 19777, 1397, 19283, 316, 19777, 1397, 19298, 19777, 1397, 19396, 19777, 1397, 19582, 19777, 1397, 19624, 19777, 1397, 19926, 19777, 1397, 19928, 19777, 1397, 19938, 19777, 1397, 19982, 19777, 1397, 20112, 19777, 1397, 20130, 19777, 1397, 20290, 19777, 1397, 20358, 19777, 1397, 20524, 19777, 1397, 20576, 19777, 1397, 20676, 19777, 1397, 20704, 19777, 1397, 20852, 19777, 1397, 20990, 19777, 1397, 21046, 19777, 1397, 21050, 19777, 1397, 21052, 19777, 1397, 21272, 19777, 1397, 22813, 505, 19980, 19777, 1397, 22828, 19782, 19788, 19821, 19569, 15672, 19823, 20849, 15672, 19829, 8452, 19850, 19863, 15673, 1397, 828, 19863, 15673, 1397, 1548, 19863, 15673, 1397, 2602, 19863, 15673, 1397, 2711, 11480, 19863, 15673, 1397, 3263, 2626, 19863, 15673, 1397, 3534, 19863, 15673, 1397, 5260, 19863, 15673, 1397, 5283, 13324, 19863, 15673, 1397, 5283, 13998, 19863, 15673, 1397, 5283, 17110, 19863, 15673, 1397, 5283, 17488, 19863, 15673, 1397, 5749, 485, 8322, 19863, 15673, 1397, 5749, 485, 17468, 19863, 15673, 1397, 5964, 19863, 15673, 1397, 6746, 19863, 15673, 1397, 7048, 19863, 15673, 1397, 7123, 6436, 19863, 15673, 1397, 7123, 13160, 19863, 15673, 1397, 7310, 19863, 15673, 1397, 7441, 2626, 19863, 15673, 1397, 7441, 13150, 19863, 15673, 1397, 7811, 2626, 19863, 15673, 1397, 9515, 9694, 19863, 15673, 1397, 9515, 15472, 19863, 15673, 1397, 9694, 19863, 15673, 1397, 9695, 485, 14515, 20532, 19863, 15673, 1397, 9695, 485, 17606, 19863, 15673, 1397, 9888, 19863, 15673, 1397, 11480, 19863, 15673, 1397, 11571, 15654, 19863, 15673, 1397, 11590, 19863, 15673, 1397, 11598, 19863, 15673, 1397, 11649, 16826, 19863, 15673, 1397, 11968, 19863, 15673, 1397, 12331, 6450, 19863, 15673, 1397, 12754, 19863, 15673, 1397, 12888, 19863, 15673, 1397, 12894, 19863, 15673, 1397, 13289, 7852, 19863, 15673, 1397, 13856, 19863, 15673, 1397, 13890, 19863, 15673, 1397, 14032, 19863, 15673, 1397, 14278, 19863, 15673, 1397, 14515, 2626, 19863, 15673, 1397, 14515, 20532, 19863, 15673, 1397, 14531, 485, 7440, 19863, 15673, 1397, 14531, 485, 14514, 19863, 15673, 1397, 14531, 485, 17784, 19863, 15673, 1397, 15382, 19863, 15673, 1397, 15402, 19863, 15673, 1397, 15436, 19863, 15673, 1397, 15568, 19863, 15673, 1397, 15606, 19863, 15673, 1397, 15654, 19863, 15673, 1397, 15696, 19863, 15673, 1397, 15978, 19863, 15673, 1397, 15984, 19863, 15673, 1397, 16016, 19863, 15673, 1397, 16071, 2626, 19863, 15673, 1397, 16080, 19863, 15673, 1397, 16082, 19863, 15673, 1397, 16266, 19863, 15673, 1397, 16803, 19668, 19863, 15673, 1397, 16803, 20930, 19863, 15673, 1397, 16803, 20932, 19863, 15673, 1397, 17108, 19863, 15673, 1397, 17112, 19863, 15673, 1397, 17113, 485, 7440, 19863, 15673, 1397, 17113, 485, 17606, 19863, 15673, 1397, 17113, 485, 19872, 19863, 15673, 1397, 17169, 485, 7524, 19863, 15673, 1397, 17285, 17396, 19863, 15673, 1397, 17299, 13645, 17298, 19863, 15673, 1397, 17299, 13645, 19656, 19863, 15673, 1397, 17396, 19863, 15673, 1397, 17484, 19863, 15673, 1397, 17485, 485, 17606, 19863, 15673, 1397, 17490, 19863, 15673, 1397, 17594, 19863, 15673, 1397, 17607, 2626, 19863, 15673, 1397, 17712, 19863, 15673, 1397, 17750, 19863, 15673, 1397, 17794, 19863, 15673, 1397, 17860, 19863, 15673, 1397, 18479, 11598, 19863, 15673, 1397, 18724, 19863, 15673, 1397, 18754, 19863, 15673, 1397, 19042, 19863, 15673, 1397, 19416, 19863, 15673, 1397, 19426, 19863, 15673, 1397, 19560, 19863, 15673, 1397, 19572, 19863, 15673, 1397, 19574, 19863, 15673, 1397, 19576, 19863, 15673, 1397, 19669, 485, 9695, 485, 14514, 19863, 15673, 1397, 19669, 485, 9695, 485, 17606, 19863, 15673, 1397, 19669, 485, 14514, 19863, 15673, 1397, 19669, 485, 17606, 19863, 15673, 1397, 19826, 19863, 15673, 1397, 19830, 19863, 15673, 1397, 19832, 19863, 15673, 1397, 19836, 19863, 15673, 1397, 19884, 19863, 15673, 1397, 19950, 19863, 15673, 1397, 19952, 19863, 15673, 1397, 19954, 19863, 15673, 1397, 19956, 19863, 15673, 1397, 19978, 19863, 15673, 1397, 20542, 19863, 15673, 1397, 20755, 2626, 19863, 15673, 1397, 20874, 19863, 15673, 1397, 20934, 19863, 15673, 1397, 21169, 15654, 19863, 15673, 1397, 21182, 19863, 15673, 1397, 21186, 19863, 15673, 1397, 21204, 19880, 19883, 3245, 12568, 19897, 6718, 19902, 19907, 843, 7296, 19917, 2175, 7854, 19917, 18400, 19921, 14262, 19923, 92, 19923, 12741, 9854, 19924, 19933, 6718, 19943, 19819, 15672, 19967, 13630, 19969, 8846, 19971, 494, 19971, 1449, 14698, 19971, 7461, 494, 19971, 9855, 7171, 17259, 1216, 19971, 9855, 13052, 19971, 9855, 14625, 20553, 15868, 19971, 9855, 15868, 19971, 9855, 17218, 19971, 9855, 17259, 20552, 19971, 9855, 17486, 19971, 9855, 17610, 19971, 9855, 17652, 19971, 9855, 18183, 20552, 19971, 9855, 18500, 19971, 9855, 20552, 19971, 9855, 20553, 3356, 19971, 9855, 20553, 13736, 19971, 9855, 20553, 15868, 19971, 9855, 20553, 17652, 19971, 11395, 14262, 19971, 11652, 19971, 11854, 19971, 11905, 2610, 19971, 11905, 3076, 19971, 11905, 3356, 19971, 11905, 6756, 19971, 11905, 6778, 19971, 11905, 8780, 19971, 11905, 10900, 19971, 11905, 11978, 19971, 11905, 13450, 19971, 11905, 13736, 19971, 12233, 14262, 19971, 14003, 9855, 8, 19971, 14003, 9855, 16, 19971, 14003, 9855, 28, 19971, 14003, 9855, 40, 19971, 14003, 9855, 58, 19971, 14003, 9855, 72, 19971, 14003, 9855, 94, 19971, 14003, 9855, 98, 19971, 14003, 9855, 308, 19971, 14003, 9855, 482, 19971, 14003, 9855, 656, 19971, 14003, 9855, 676, 19971, 14003, 9855, 2618, 19971, 14003, 9855, 3428, 19971, 14003, 9855, 13507, 8, 19971, 14003, 9855, 13507, 28, 19971, 14003, 9855, 14435, 8, 19971, 14003, 9855, 14435, 28, 19971, 14003, 9855, 14435, 7883, 8, 19971, 14003, 9855, 17493, 22, 19971, 14003, 9855, 17493, 34, 19971, 14003, 9855, 17493, 396, 19971, 14003, 9855, 17493, 582, 19971, 14003, 9855, 22911, 8, 19971, 14625, 11854, 19971, 14999, 0, 19971, 14999, 8, 19971, 14999, 16, 19971, 14999, 28, 19971, 14999, 40, 19971, 14999, 58, 19971, 14999, 72, 19971, 14999, 94, 19971, 14999, 98, 19971, 14999, 106, 19971, 14999, 124, 19971, 14999, 148, 19971, 14999, 224, 19971, 14999, 244, 19971, 14999, 266, 19971, 14999, 308, 19971, 14999, 336, 19971, 14999, 350, 19971, 14999, 384, 19971, 14999, 416, 19971, 14999, 448, 19971, 14999, 482, 19971, 14999, 522, 19971, 14999, 556, 19971, 14999, 572, 19971, 14999, 588, 19971, 14999, 622, 19971, 14999, 656, 19971, 14999, 676, 19971, 14999, 680, 19971, 14999, 734, 19971, 14999, 752, 19971, 14999, 904, 19971, 14999, 932, 19971, 14999, 1044, 19971, 14999, 1142, 19971, 14999, 1164, 19971, 14999, 1482, 19971, 14999, 1492, 19971, 14999, 1796, 19971, 14999, 1812, 19971, 14999, 1914, 19971, 14999, 2152, 19971, 14999, 2444, 19971, 14999, 2492, 19971, 14999, 2556, 19971, 14999, 2618, 19971, 14999, 2676, 19971, 14999, 2912, 19971, 14999, 2956, 19971, 14999, 3048, 19971, 14999, 3114, 19971, 14999, 3242, 19971, 14999, 3322, 19971, 14999, 3428, 19971, 14999, 3772, 19971, 14999, 3812, 19971, 14999, 6306, 19971, 14999, 6314, 19971, 14999, 7018, 19971, 14999, 7648, 19971, 14999, 7874, 19971, 14999, 8842, 19971, 14999, 10264, 19971, 14999, 11868, 19971, 14999, 12277, 734, 19971, 14999, 13507, 0, 19971, 14999, 13507, 8, 19971, 14999, 13507, 28, 19971, 14999, 14435, 0, 19971, 14999, 14435, 8, 19971, 14999, 14435, 28, 19971, 14999, 16449, 9956, 19971, 14999, 16777, 1142, 19971, 14999, 17493, 22, 19971, 14999, 17493, 34, 19971, 14999, 17493, 396, 19971, 14999, 17493, 582, 19971, 15635, 9855, 15840, 19971, 15635, 9855, 17608, 19971, 20166, 19971, 20989, 9854, 19973, 16064, 20105, 21124, 20127, 634, 20127, 10641, 6779, 6431, 11392, 20134, 20146, 20157, 13563, 14999, 16, 20157, 13563, 14999, 528, 20157, 13563, 14999, 742, 20157, 13563, 14999, 746, 20157, 13563, 14999, 880, 20157, 13563, 14999, 947, 3758, 20157, 13563, 14999, 2616, 20157, 13563, 14999, 2630, 20157, 13563, 14999, 3048, 20157, 13563, 14999, 3312, 20157, 13563, 14999, 3394, 20157, 13563, 14999, 5872, 20157, 13563, 14999, 6754, 20157, 13563, 14999, 7152, 20157, 13563, 14999, 7454, 20157, 13563, 14999, 7584, 20157, 13563, 14999, 9804, 20157, 13563, 14999, 10526, 20157, 13563, 14999, 10760, 20157, 13563, 14999, 10778, 20157, 13563, 14999, 10780, 20157, 13563, 14999, 11920, 20157, 13563, 14999, 11940, 20157, 13563, 14999, 12118, 20157, 13563, 14999, 12812, 20157, 13563, 14999, 13344, 20157, 13563, 14999, 13560, 20157, 13563, 14999, 13563, 3758, 20157, 13563, 14999, 13563, 3759, 10641, 10092, 20157, 13563, 14999, 14118, 20157, 13563, 14999, 14478, 20157, 13563, 14999, 14594, 20157, 13563, 14999, 15366, 20157, 13563, 14999, 15816, 20157, 13563, 14999, 15938, 20157, 13563, 14999, 16444, 20157, 13563, 14999, 16525, 7454, 20157, 13563, 14999, 16533, 947, 3758, 20157, 13563, 14999, 16533, 13563, 3758, 20157, 13563, 14999, 16538, 20157, 13563, 14999, 16724, 20157, 13563, 14999, 16834, 20157, 13563, 14999, 17214, 20157, 13563, 14999, 17267, 266, 20157, 13563, 14999, 17540, 20157, 13563, 14999, 18227, 16834, 20157, 13563, 14999, 20487, 0, 20157, 16111, 14999, 16, 20157, 16111, 14999, 528, 20157, 16111, 14999, 742, 20157, 16111, 14999, 746, 20157, 16111, 14999, 880, 20157, 16111, 14999, 947, 3758, 20157, 16111, 14999, 2616, 20157, 16111, 14999, 2630, 20157, 16111, 14999, 3048, 20157, 16111, 14999, 3312, 20157, 16111, 14999, 3394, 20157, 16111, 14999, 5872, 20157, 16111, 14999, 6754, 20157, 16111, 14999, 7152, 20157, 16111, 14999, 7454, 20157, 16111, 14999, 7584, 20157, 16111, 14999, 9804, 20157, 16111, 14999, 10526, 20157, 16111, 14999, 10760, 20157, 16111, 14999, 10778, 20157, 16111, 14999, 10780, 20157, 16111, 14999, 11920, 20157, 16111, 14999, 11940, 20157, 16111, 14999, 12118, 20157, 16111, 14999, 12812, 20157, 16111, 14999, 13344, 20157, 16111, 14999, 13560, 20157, 16111, 14999, 13563, 3758, 20157, 16111, 14999, 13563, 3759, 10641, 10092, 20157, 16111, 14999, 14118, 20157, 16111, 14999, 14478, 20157, 16111, 14999, 14594, 20157, 16111, 14999, 15366, 20157, 16111, 14999, 15816, 20157, 16111, 14999, 15938, 20157, 16111, 14999, 16444, 20157, 16111, 14999, 16525, 7454, 20157, 16111, 14999, 16533, 947, 3758, 20157, 16111, 14999, 16533, 13563, 3758, 20157, 16111, 14999, 16538, 20157, 16111, 14999, 16724, 20157, 16111, 14999, 16834, 20157, 16111, 14999, 17214, 20157, 16111, 14999, 17267, 266, 20157, 16111, 14999, 17540, 20157, 16111, 14999, 18227, 16834, 20157, 16111, 14999, 20487, 0, 20161, 1014, 20168, 20177, 13810, 20177, 13811, 10641, 14419, 8850, 20178, 20181, 896, 20181, 3189, 1912, 20181, 7855, 19242, 20181, 8315, 10641, 15643, 9854, 20181, 9709, 15012, 20181, 9709, 15014, 20181, 9709, 15016, 20181, 9709, 15018, 20181, 11571, 16492, 20181, 11571, 16916, 20181, 17393, 12562, 20181, 18016, 20183, 15672, 20193, 18172, 20207, 9855, 897, 11392, 20207, 9855, 1217, 11552, 20207, 9855, 11658, 20207, 9855, 14625, 9503, 11552, 20207, 9855, 17486, 20207, 9855, 17610, 20207, 11905, 2610, 20207, 11905, 3356, 20207, 11905, 6778, 20207, 11905, 13736, 20207, 14003, 9855, 8, 20207, 14003, 9855, 16, 20207, 14003, 9855, 28, 20207, 14003, 9855, 40, 20207, 14003, 9855, 17493, 34, 20207, 14003, 14993, 8320, 20207, 14999, 0, 20207, 14999, 106, 20207, 14999, 124, 20207, 14999, 148, 20207, 14999, 244, 20207, 14999, 266, 20207, 14999, 336, 20207, 14999, 350, 20207, 14999, 384, 20207, 14999, 416, 20207, 14999, 448, 20207, 14999, 522, 20207, 14999, 572, 20207, 14999, 588, 20207, 14999, 622, 20207, 14999, 680, 20207, 14999, 734, 20207, 14999, 752, 20207, 14999, 932, 20207, 14999, 1044, 20207, 14999, 1142, 20207, 14999, 1164, 20207, 14999, 1492, 20207, 14999, 1914, 20207, 14999, 1952, 20207, 14999, 2492, 20207, 14999, 2556, 20207, 14999, 2676, 20207, 14999, 3048, 20207, 14999, 3114, 20207, 14999, 3242, 20207, 14999, 3322, 20207, 14999, 6314, 20207, 14999, 10264, 20207, 14999, 13844, 20207, 15233, 2611, 16502, 20207, 15233, 2611, 18744, 20207, 15233, 3232, 20207, 15233, 15820, 20207, 15868, 20207, 20877, 1216, 20207, 20877, 11854, 20207, 20877, 12572, 20207, 20877, 12582, 20207, 20877, 13563, 14486, 20207, 20877, 14486, 20207, 20877, 14625, 11854, 20207, 20877, 17791, 896, 20207, 20877, 18280, 20233, 9855, 654, 20233, 14999, 226, 20233, 14999, 270, 20233, 14999, 528, 20233, 14999, 2280, 20233, 14999, 2536, 20233, 14999, 3220, 20233, 14999, 3532, 20233, 14999, 5312, 20233, 14999, 5818, 20233, 14999, 7156, 20233, 14999, 7596, 20233, 14999, 9372, 20233, 14999, 9486, 20233, 14999, 9776, 20233, 14999, 10126, 20233, 14999, 10680, 20233, 14999, 10694, 20233, 14999, 10810, 20233, 14999, 11242, 20233, 14999, 11424, 20233, 14999, 11560, 20233, 14999, 12204, 20233, 14999, 12400, 20233, 14999, 12468, 20233, 14999, 13278, 20233, 14999, 13400, 20233, 14999, 13600, 20233, 14999, 14196, 20233, 14999, 14546, 20233, 14999, 14780, 20233, 14999, 14886, 20233, 14999, 14978, 20233, 14999, 15474, 20233, 14999, 15942, 20233, 14999, 16246, 20233, 14999, 17358, 20233, 15233, 2610, 20233, 15233, 2611, 16502, 20233, 15233, 3232, 20233, 15233, 6756, 20233, 15233, 15820, 20233, 20877, 1216, 20233, 20877, 1217, 15901, 1216, 20233, 20877, 3357, 6430, 20233, 20877, 7855, 14698, 20233, 20877, 9950, 20233, 20877, 14625, 1217, 15901, 1216, 20233, 20877, 16408, 20233, 20989, 8321, 11392, 20233, 20989, 8321, 11552, 20236, 20238, 20263, 15672, 20286, 20290, 20312, 20319, 5292, 20323, 14625, 20876, 20323, 15573, 20876, 20325, 10651, 19618, 20325, 14999, 270, 20325, 14999, 528, 20325, 14999, 826, 20325, 14999, 830, 20325, 14999, 928, 20325, 14999, 1616, 20325, 14999, 1866, 20325, 14999, 2280, 20325, 14999, 2536, 20325, 14999, 2804, 20325, 14999, 3216, 20325, 14999, 3236, 20325, 14999, 3530, 20325, 14999, 3726, 20325, 14999, 3792, 20325, 14999, 6362, 20325, 14999, 6924, 20325, 14999, 7790, 20325, 14999, 9524, 20325, 14999, 9684, 20325, 14999, 9722, 20325, 14999, 9776, 20325, 15233, 2610, 20325, 15233, 2611, 16502, 20325, 15233, 3232, 20325, 15233, 3356, 20325, 15233, 13736, 20325, 15233, 15820, 20331, 9854, 20335, 9854, 20338, 20342, 20347, 18177, 18386, 20349, 12005, 634, 20353, 9854, 20363, 7817, 16372, 20363, 7817, 16374, 20366, 20373, 859, 18997, 11476, 20375, 3293, 15527, 14049, 11476, 20375, 3357, 14823, 11476, 20375, 10621, 11476, 20375, 11476, 20375, 11477, 635, 896, 20375, 11477, 635, 11571, 16248, 20375, 11477, 6785, 896, 20375, 11477, 6785, 897, 635, 11571, 16248, 20375, 11477, 9175, 19407, 11476, 20375, 11477, 10641, 3265, 17462, 20375, 11477, 10641, 3265, 19214, 20375, 11477, 10641, 7292, 20375, 11477, 10641, 7888, 20375, 11477, 10641, 9287, 11552, 20375, 11477, 10641, 10092, 20375, 11477, 10641, 10093, 10641, 14625, 18847, 15642, 20375, 11477, 10641, 10093, 10641, 18847, 15642, 20375, 11477, 10641, 12537, 18775, 18906, 20375, 11477, 10641, 13563, 18775, 18906, 20375, 11477, 10641, 13563, 20683, 18906, 20375, 11477, 10641, 14519, 19214, 20375, 11477, 10641, 14623, 9952, 20375, 11477, 10641, 14625, 18847, 15642, 20375, 11477, 10641, 15095, 18775, 18906, 20375, 11477, 10641, 15642, 20375, 11477, 10641, 16891, 10092, 20375, 11477, 10641, 18847, 15642, 20375, 11477, 10641, 20683, 18906, 20375, 11477, 11393, 13507, 19407, 11476, 20375, 11477, 11393, 13759, 18386, 20375, 11477, 11393, 14281, 12005, 634, 20375, 11477, 11393, 17123, 13759, 18386, 20375, 11477, 11393, 17123, 14281, 12005, 634, 20375, 11477, 17369, 46, 20375, 11477, 17369, 18688, 20375, 11477, 17369, 21096, 20375, 11571, 11476, 20375, 11571, 16153, 14049, 11476, 20375, 12277, 11476, 20375, 12277, 19931, 11476, 20375, 14049, 11476, 20375, 14049, 11477, 6785, 10618, 20375, 14049, 11477, 15901, 18775, 18906, 20375, 14393, 15527, 14049, 11476, 20375, 14555, 11476, 20375, 14625, 6287, 11476, 20375, 14625, 11476, 20375, 14625, 11477, 6785, 896, 20375, 14625, 11477, 10641, 15642, 20375, 14625, 11477, 10641, 18847, 15642, 20375, 14625, 19888, 20375, 15291, 14312, 20375, 15456, 20375, 15781, 6287, 11476, 20375, 15781, 11476, 20375, 16481, 9175, 19407, 16480, 20375, 16481, 10641, 5741, 671, 635, 896, 20375, 16481, 10641, 5741, 671, 6785, 896, 20375, 16481, 10641, 5741, 671, 11393, 7883, 6286, 20375, 16481, 10641, 5741, 671, 11393, 19407, 16481, 10641, 5741, 670, 20375, 16481, 10641, 5741, 671, 11393, 20375, 16481, 10641, 5741, 6434, 20375, 16481, 10641, 5741, 6435, 635, 896, 20375, 16481, 10641, 5741, 6435, 6785, 896, 20375, 16481, 10641, 5741, 6435, 11393, 19407, 16481, 10641, 5741, 6434, 20375, 16481, 10641, 5741, 6435, 11553, 7883, 6286, 20375, 16481, 10641, 5741, 17462, 20375, 16481, 10641, 5741, 19214, 20375, 17275, 11476, 20375, 18635, 11476, 20375, 18775, 18906, 20375, 19553, 11476, 20375, 19888, 20375, 19931, 11476, 20375, 20377, 11476, 20375, 20501, 11477, 6785, 896, 20375, 20501, 11477, 10641, 10092, 20375, 20501, 11477, 10641, 10093, 10641, 14625, 18847, 15642, 20375, 20501, 11477, 10641, 10093, 10641, 18847, 15642, 20375, 20501, 11477, 10641, 14625, 18847, 15642, 20375, 20501, 11477, 10641, 18775, 19890, 20375, 20501, 11477, 10641, 18847, 15642, 20375, 20501, 15781, 6287, 11476, 20375, 20545, 18583, 14049, 11476, 20375, 20687, 11476, 20375, 20769, 14049, 11476, 20375, 20831, 11476, 20375, 21089, 18583, 14049, 11476, 20375, 21199, 14049, 11476, 20375, 23305, 11476, 20375, 23305, 11477, 635, 896, 20375, 23305, 11477, 9175, 19407, 23305, 11476, 20375, 23305, 11477, 10641, 5853, 13456, 20375, 23305, 11477, 10641, 7883, 3265, 17462, 20375, 23305, 11477, 10641, 7883, 3265, 19214, 20375, 23305, 11477, 10641, 10533, 12277, 13456, 20375, 23305, 11477, 10641, 12277, 13456, 20375, 23305, 11477, 10641, 14625, 18847, 15642, 20375, 23305, 11477, 10641, 14625, 20181, 15642, 20375, 23305, 11477, 10641, 15095, 13456, 20375, 23305, 11477, 10641, 15155, 13456, 20375, 23305, 14555, 11476, 20375, 23305, 15291, 14312, 20377, 12277, 2175, 14625, 11763, 19557, 8321, 18392, 20377, 12277, 14625, 11763, 19557, 8321, 18392, 20377, 12277, 14625, 15811, 11763, 19557, 8321, 18392, 20377, 20753, 18392, 20381, 9855, 15868, 20381, 9855, 17486, 20381, 9855, 17610, 20381, 9855, 20552, 20381, 11854, 20381, 11905, 2610, 20381, 11905, 3076, 20381, 11905, 3356, 20381, 11905, 6756, 20381, 11905, 6778, 20381, 11905, 8780, 20381, 11905, 10900, 20381, 11905, 11978, 20381, 11905, 13450, 20381, 11905, 13736, 20381, 14003, 9855, 8, 20381, 14003, 9855, 16, 20381, 14003, 9855, 28, 20381, 14003, 9855, 40, 20381, 14003, 9855, 58, 20381, 14003, 9855, 72, 20381, 14003, 9855, 94, 20381, 14003, 9855, 184, 20381, 14003, 9855, 308, 20381, 14003, 9855, 498, 20381, 14003, 9855, 676, 20381, 14003, 9855, 17493, 22, 20381, 14003, 9855, 17493, 34, 20381, 14003, 9855, 17493, 396, 20381, 14003, 9855, 17493, 582, 20381, 14625, 11854, 20381, 14999, 0, 20381, 14999, 8, 20381, 14999, 16, 20381, 14999, 28, 20381, 14999, 40, 20381, 14999, 58, 20381, 14999, 72, 20381, 14999, 94, 20381, 14999, 106, 20381, 14999, 124, 20381, 14999, 148, 20381, 14999, 184, 20381, 14999, 244, 20381, 14999, 266, 20381, 14999, 308, 20381, 14999, 336, 20381, 14999, 350, 20381, 14999, 384, 20381, 14999, 416, 20381, 14999, 448, 20381, 14999, 498, 20381, 14999, 522, 20381, 14999, 572, 20381, 14999, 588, 20381, 14999, 622, 20381, 14999, 676, 20381, 14999, 680, 20381, 14999, 734, 20381, 14999, 932, 20381, 14999, 1044, 20381, 14999, 1142, 20381, 14999, 1164, 20381, 14999, 1492, 20381, 14999, 1796, 20381, 14999, 1914, 20381, 14999, 2152, 20381, 14999, 2444, 20381, 14999, 2492, 20381, 14999, 2556, 20381, 14999, 2676, 20381, 14999, 3048, 20381, 14999, 3114, 20381, 14999, 3242, 20381, 14999, 3322, 20381, 14999, 6314, 20381, 14999, 10264, 20381, 14999, 17493, 22, 20381, 14999, 17493, 34, 20381, 14999, 17493, 396, 20381, 14999, 17493, 582, 20381, 19015, 9855, 12252, 20387, 17075, 10641, 14393, 14496, 20399, 9171, 968, 20403, 485, 12398, 20425, 13582, 20450, 20461, 17092, 20466, 20479, 6759, 497, 9296, 20479, 13372, 20479, 14418, 20488, 20508, 20510, 20513, 15672, 20531, 1913, 15672, 20541, 12580, 20545, 18583, 14049, 20375, 11476, 20547, 13581, 11477, 10641, 14851, 10092, 20547, 13581, 11477, 10641, 20181, 10092, 20561, 18098, 20567, 15672, 20568, 20570, 20579, 13630, 20583, 634, 20584, 20586, 20671, 12005, 635, 505, 19408, 20671, 12005, 635, 505, 21096, 20671, 17237, 12005, 635, 505, 19408, 20671, 17237, 12005, 635, 505, 21096, 20671, 17237, 19409, 505, 12005, 634, 20671, 17237, 21097, 505, 12005, 634, 20681, 634, 20685, 8320, 20685, 18511, 8320, 20695, 13582, 20723, 9786, 20725, 13250, 20727, 6793, 9956, 20727, 7123, 6743, 13582, 20727, 11762, 20727, 12559, 10219, 8320, 20727, 13582, 20727, 15233, 10900, 20727, 15451, 10219, 8320, 20727, 16161, 8320, 20727, 18025, 10219, 8320, 20727, 19053, 10219, 8320, 20727, 19371, 8320, 20727, 19771, 7855, 6729, 19619, 15672, 20727, 19771, 15673, 1397, 1141, 2610, 20727, 19771, 15673, 1397, 1141, 3076, 20727, 19771, 15673, 1397, 1141, 3232, 20727, 19771, 15673, 1397, 1141, 3356, 20727, 19771, 15673, 1397, 1141, 6756, 20727, 19771, 15673, 1397, 1141, 6778, 20727, 19771, 15673, 1397, 1141, 8780, 20727, 19771, 15673, 1397, 1141, 11978, 20727, 19771, 15673, 1397, 1141, 13450, 20727, 19771, 15673, 1397, 1141, 13736, 20727, 19771, 15673, 1397, 1141, 14638, 20727, 19771, 15673, 1397, 1141, 15736, 20727, 19771, 15673, 1397, 1141, 15818, 20727, 19771, 15673, 1397, 1141, 15820, 20727, 19771, 15673, 1397, 1141, 16400, 20727, 19771, 15673, 1397, 1141, 17232, 20727, 19771, 15673, 1397, 1141, 18010, 20727, 19771, 15673, 1397, 1141, 18086, 20727, 19771, 15673, 1397, 1141, 18362, 20727, 19771, 15673, 1397, 1141, 18742, 20727, 19771, 15673, 1397, 1141, 19622, 20727, 19771, 15673, 1397, 1141, 20474, 20727, 19771, 15673, 1397, 1141, 20492, 20727, 19771, 15673, 1397, 1141, 20494, 20727, 19771, 15673, 1397, 1141, 20496, 20727, 19771, 15673, 1397, 1141, 20962, 20727, 19771, 15673, 1397, 1141, 20964, 20727, 19771, 15673, 1397, 1141, 20966, 20727, 19771, 15673, 1397, 1141, 21260, 20727, 19771, 15673, 1397, 1141, 21262, 20727, 19771, 15673, 1397, 1141, 21264, 20727, 19771, 15673, 1397, 2258, 20727, 19771, 15673, 1397, 7311, 2610, 20727, 19771, 15673, 1397, 7311, 3076, 20727, 19771, 15673, 1397, 7311, 3232, 20727, 19771, 15673, 1397, 7311, 3356, 20727, 19771, 15673, 1397, 7311, 6756, 20727, 19771, 15673, 1397, 7311, 6778, 20727, 19771, 15673, 1397, 7311, 8780, 20727, 19771, 15673, 1397, 7311, 10900, 20727, 19771, 15673, 1397, 7311, 11978, 20727, 19771, 15673, 1397, 7311, 13450, 20727, 19771, 15673, 1397, 7311, 13736, 20727, 19771, 15673, 1397, 7311, 14638, 20727, 19771, 15673, 1397, 7311, 15818, 20727, 19771, 15673, 1397, 7311, 15820, 20727, 19771, 15673, 1397, 7311, 16400, 20727, 19771, 15673, 1397, 7311, 17232, 20727, 19771, 15673, 1397, 7311, 18010, 20727, 19771, 15673, 1397, 7311, 18086, 20727, 19771, 15673, 1397, 7311, 18362, 20727, 19771, 15673, 1397, 7311, 18742, 20727, 19771, 15673, 1397, 7311, 19622, 20727, 19771, 15673, 1397, 7311, 20492, 20727, 19771, 15673, 1397, 7311, 20496, 20727, 19771, 15673, 1397, 7311, 20964, 20727, 19771, 15673, 1397, 7311, 21264, 20727, 19771, 15673, 1397, 7526, 20727, 19771, 15673, 1397, 7528, 20727, 19771, 15673, 1397, 11462, 20727, 19771, 15673, 1397, 12664, 20727, 19771, 15673, 1397, 14330, 20727, 19771, 15673, 1397, 16540, 20727, 19771, 15673, 1397, 16918, 20727, 19771, 15673, 1397, 17822, 20727, 19771, 15673, 1397, 18048, 20727, 19771, 15673, 1397, 18376, 20727, 19771, 15673, 1397, 19620, 20727, 19825, 19352, 20727, 19869, 2243, 8320, 20727, 19869, 2611, 8320, 20727, 19869, 3293, 8320, 20727, 19869, 3357, 8320, 20727, 19869, 6779, 8320, 20727, 19869, 11969, 8320, 20727, 19869, 12087, 8320, 20727, 19869, 13729, 8320, 20727, 19869, 13737, 8320, 20727, 19869, 14393, 8320, 20727, 19869, 14741, 8320, 20727, 19869, 14827, 8320, 20727, 19869, 15119, 8320, 20727, 19869, 15507, 8320, 20727, 19869, 16723, 8320, 20727, 19869, 17123, 8320, 20727, 20601, 18979, 6793, 18690, 20727, 20601, 18979, 7817, 635, 13340, 20727, 20601, 18979, 7817, 635, 15119, 843, 13340, 20727, 20601, 18979, 11393, 635, 11552, 20727, 20601, 18979, 11393, 635, 15119, 843, 11552, 20727, 20601, 18979, 18398, 20727, 20601, 18979, 18691, 6785, 7816, 20727, 20601, 18979, 18691, 6785, 11392, 20727, 20601, 18979, 18691, 6785, 11552, 20727, 20601, 18979, 18691, 6785, 12589, 7816, 20727, 20601, 18979, 18691, 6785, 13889, 7816, 20727, 20601, 18979, 18691, 6785, 13889, 13340, 20743, 6371, 15320, 20743, 15592, 20746, 20749, 19869, 14284, 20749, 19869, 19618, 20749, 19869, 20470, 20751, 14685, 843, 8315, 9854, 20752, 20765, 6752, 20765, 15667, 9854, 20765, 15667, 9855, 10641, 6430, 20765, 17631, 18033, 9854, 20767, 20197, 19516, 20769, 14049, 20375, 11476, 20779, 11742, 20805, 6718, 20827, 14033, 15672, 20838, 20849, 9854, 20857, 6718, 20858, 20877, 13582, 20879, 9854, 20887, 18978, 20902, 20907, 15134, 20910, 20915, 829, 5843, 13563, 19594, 20915, 829, 9967, 13563, 19594, 20915, 829, 16079, 2632, 20915, 829, 17313, 316, 20915, 1337, 10638, 20915, 1337, 11577, 15572, 20915, 1337, 11577, 18336, 20915, 2141, 12589, 9175, 13888, 20915, 2141, 13889, 9175, 12588, 20915, 2969, 15572, 20915, 2969, 16064, 20915, 2969, 18336, 20915, 6556, 20915, 6605, 7123, 9170, 20915, 6605, 7123, 14496, 20915, 6605, 9170, 20915, 6605, 10633, 9170, 20915, 6605, 14496, 20915, 6605, 18632, 20915, 6605, 18859, 18332, 20915, 6719, 19073, 18477, 8851, 671, 505, 6434, 20915, 6719, 19073, 18477, 8851, 671, 505, 6435, 17376, 20915, 6719, 19073, 18477, 8851, 16421, 17376, 20915, 6743, 20242, 20915, 6743, 20244, 20915, 6743, 20246, 20915, 6743, 20248, 20915, 6743, 20250, 20915, 6793, 9956, 20915, 7118, 20915, 7138, 20915, 7139, 2918, 20915, 7139, 18333, 14486, 20915, 7139, 23503, 10190, 20915, 7139, 23503, 11782, 20915, 7139, 23503, 18652, 20915, 7139, 23533, 11782, 20915, 7139, 23533, 18652, 20915, 7851, 18232, 20915, 7851, 18234, 20915, 7851, 18236, 20915, 7851, 18238, 20915, 7851, 18240, 20915, 7851, 18242, 20915, 7851, 18244, 20915, 7851, 20564, 20915, 7863, 17069, 18758, 20915, 8694, 20915, 8851, 16174, 20915, 8851, 16852, 20915, 8851, 17514, 20915, 8851, 18862, 20915, 11605, 15572, 20915, 11605, 16064, 20915, 11605, 18336, 20915, 11756, 20915, 11762, 20915, 12093, 12537, 15572, 20915, 12093, 12537, 18336, 20915, 12093, 13563, 15572, 20915, 12093, 13563, 18336, 20915, 12093, 20390, 20915, 12229, 15572, 20915, 12229, 16064, 20915, 12229, 18336, 20915, 12765, 7678, 20915, 12765, 7679, 16420, 20915, 12765, 7679, 18860, 20915, 12765, 9171, 9172, 20915, 12765, 9171, 9173, 10764, 20915, 12765, 9171, 9173, 18860, 20915, 12765, 9171, 14486, 20915, 12765, 9171, 16420, 20915, 12765, 9171, 18860, 20915, 12765, 9171, 19566, 20915, 12765, 9171, 19567, 10764, 20915, 12765, 9171, 19567, 18860, 20915, 12765, 12122, 20915, 12765, 12123, 9170, 20915, 12765, 12123, 18860, 20915, 12765, 13568, 20915, 12765, 13569, 9170, 20915, 12765, 13569, 18860, 20915, 12765, 13708, 20915, 12765, 13709, 15652, 20915, 12765, 13709, 16420, 20915, 12765, 14497, 16174, 20915, 12765, 14497, 16420, 20915, 12765, 14497, 16852, 20915, 12765, 16184, 20915, 12765, 18863, 14624, 20915, 12765, 18863, 15572, 20915, 13698, 20915, 13699, 497, 7862, 20915, 13699, 497, 7863, 18332, 20915, 13699, 497, 15776, 20915, 13699, 497, 15777, 18332, 20915, 13699, 5839, 7862, 20915, 13699, 18332, 20915, 13709, 14467, 2174, 20915, 13709, 14467, 7170, 20915, 13709, 14467, 15118, 20915, 13803, 15572, 20915, 13803, 16064, 20915, 13803, 18336, 20915, 13889, 5851, 17377, 6785, 1637, 14892, 20915, 14405, 14654, 20915, 14405, 14868, 20915, 14467, 15400, 20915, 14467, 15652, 20915, 14467, 16852, 20915, 14629, 18045, 671, 16852, 20915, 14629, 18045, 6435, 16852, 20915, 14629, 18045, 16853, 670, 20915, 14629, 18045, 16853, 6434, 20915, 14700, 20915, 15639, 15572, 20915, 15639, 16064, 20915, 15639, 18336, 20915, 15777, 3265, 16065, 7862, 20915, 15777, 3265, 18765, 14875, 12764, 20915, 15777, 12769, 15971, 11696, 20915, 15777, 14455, 14875, 12764, 20915, 15777, 14455, 18647, 2632, 20915, 15777, 14875, 12765, 17114, 20915, 15777, 16719, 7862, 20915, 15777, 18647, 2633, 1356, 20915, 16343, 6724, 20915, 16343, 9880, 20915, 16343, 12031, 13159, 10192, 20915, 16343, 13708, 20915, 16343, 16454, 20915, 16343, 17114, 20915, 16343, 18907, 12536, 20915, 16343, 18907, 13562, 20915, 16343, 21210, 20915, 16343, 21211, 20526, 20915, 17279, 12093, 20526, 20915, 17279, 12537, 15572, 20915, 17279, 12537, 18336, 20915, 17279, 13563, 15572, 20915, 17279, 13563, 18336, 20915, 17279, 20390, 20915, 17317, 16064, 20915, 17317, 17322, 20915, 18045, 18653, 670, 20915, 18045, 18653, 6434, 20915, 18045, 18653, 16852, 20915, 18081, 16174, 20915, 18081, 16852, 20915, 18081, 18860, 20915, 18122, 20915, 18123, 469, 13738, 20915, 18123, 6757, 16403, 15612, 20915, 18123, 6757, 16403, 15613, 9170, 20915, 18123, 9170, 20915, 18123, 9171, 469, 13738, 20915, 18123, 9171, 13739, 9844, 20915, 18123, 9171, 13739, 16420, 20915, 18123, 12388, 20915, 18123, 12389, 9503, 15030, 20915, 18123, 12389, 13738, 20915, 18123, 12389, 13739, 9170, 20915, 18123, 13739, 9844, 20915, 18123, 13739, 16420, 20915, 18123, 15119, 9503, 15030, 20915, 18253, 7139, 8694, 20915, 18253, 11890, 20915, 18253, 12565, 14584, 20915, 18253, 13798, 20915, 18253, 14054, 20915, 18253, 14830, 20915, 18551, 20242, 20915, 18551, 20244, 20915, 18551, 20246, 20915, 18551, 20248, 20915, 18551, 20250, 20915, 18551, 20252, 20915, 18551, 20254, 20915, 18551, 20256, 20915, 18551, 20790, 20915, 18551, 20792, 20915, 18551, 20794, 20915, 18551, 20796, 20915, 18551, 20798, 20915, 18551, 20800, 20915, 18551, 20802, 20915, 18595, 1637, 13590, 20915, 18595, 1637, 19534, 20915, 18595, 17377, 6785, 14024, 20915, 19251, 670, 20915, 19251, 6434, 20915, 19251, 20144, 20915, 19312, 20915, 19313, 469, 13738, 20915, 19313, 6779, 16403, 19010, 20915, 19313, 12389, 13739, 11783, 13739, 14874, 20915, 19313, 13739, 9844, 20915, 19313, 13739, 16420, 20915, 19313, 15119, 9503, 15031, 19010, 20915, 19313, 15119, 9503, 15031, 19011, 9844, 20915, 19314, 20915, 19315, 6779, 16403, 19011, 5814, 20915, 19315, 7142, 20915, 19315, 9503, 670, 20915, 19315, 9503, 6434, 20915, 19315, 9503, 12388, 20915, 19315, 9503, 13738, 20915, 19315, 9503, 15030, 20915, 19315, 9503, 15118, 20915, 19315, 9503, 15119, 15423, 18214, 20915, 19315, 9503, 15119, 19010, 20915, 19315, 9503, 15423, 16586, 20915, 19315, 12388, 20915, 19315, 12389, 671, 15119, 14844, 20915, 19315, 12389, 671, 15119, 14845, 13739, 9844, 20915, 19315, 12389, 671, 15119, 14845, 13739, 19010, 20915, 19315, 12389, 5814, 20915, 19315, 12389, 5815, 9175, 15118, 20915, 19315, 12389, 9503, 15030, 20915, 19315, 12389, 13739, 7292, 20915, 19315, 12389, 13739, 9844, 20915, 19315, 12389, 13739, 9845, 5865, 5814, 20915, 19315, 12389, 13739, 9845, 12389, 5814, 20915, 19315, 12389, 13739, 9845, 12389, 12282, 20915, 19315, 12389, 13739, 9845, 13739, 5814, 20915, 19315, 12389, 13739, 9845, 13739, 17838, 20915, 19315, 12389, 13739, 9845, 13739, 19010, 20915, 19315, 12389, 13739, 11783, 13739, 13882, 20915, 19315, 12389, 13739, 11783, 13739, 14874, 20915, 19315, 12389, 13739, 14289, 317, 15119, 670, 20915, 19315, 12389, 13739, 14289, 2633, 15119, 670, 20915, 19315, 12389, 13739, 14486, 20915, 19315, 12389, 13739, 14535, 15119, 670, 20915, 19315, 12389, 13739, 14851, 15119, 670, 20915, 19315, 12389, 13739, 14851, 15119, 14844, 20915, 19315, 12389, 13739, 16153, 15119, 670, 20915, 19315, 12389, 13739, 16421, 12389, 5814, 20915, 19315, 12389, 13739, 16421, 12389, 18652, 20915, 19315, 12389, 13739, 17800, 20915, 19315, 12389, 14534, 20915, 19315, 12389, 14844, 20915, 19315, 12389, 14845, 2174, 20915, 19315, 12389, 14845, 15119, 670, 20915, 19315, 12389, 14845, 15119, 671, 13739, 9844, 20915, 19315, 12389, 15118, 20915, 19315, 12389, 15119, 671, 15613, 13739, 16420, 20915, 19315, 12389, 15119, 5814, 20915, 19315, 12389, 15119, 5815, 13739, 18652, 20915, 19315, 12389, 15119, 9502, 20915, 19315, 12389, 15119, 9503, 5814, 20915, 19315, 12389, 15119, 9503, 19010, 20915, 19315, 12389, 15119, 11773, 15030, 20915, 19315, 12389, 15119, 13738, 20915, 19315, 12389, 15119, 13739, 5814, 20915, 19315, 12389, 15119, 13739, 14288, 20915, 19315, 12389, 15119, 13739, 14289, 2632, 20915, 19315, 12389, 15119, 13739, 14534, 20915, 19315, 12389, 15119, 13739, 14844, 20915, 19315, 12389, 15119, 13739, 14850, 20915, 19315, 12389, 15119, 13739, 16152, 20915, 19315, 12389, 15119, 13739, 19011, 14844, 20915, 19315, 12389, 15119, 14844, 20915, 19315, 12389, 15119, 14845, 15613, 13739, 9844, 20915, 19315, 12389, 15119, 15030, 20915, 19315, 12389, 15119, 15423, 18214, 20915, 19315, 12389, 15119, 16196, 20915, 19315, 12389, 15119, 16197, 13739, 9844, 20915, 19315, 12389, 15119, 18653, 13739, 5814, 20915, 19315, 12389, 15119, 19010, 20915, 19315, 12389, 15119, 19011, 12389, 5814, 20915, 19315, 12389, 15119, 19011, 13739, 9844, 20915, 19315, 12389, 15119, 19011, 13739, 9845, 5814, 20915, 19315, 12389, 15119, 19011, 13739, 9845, 19010, 20915, 19315, 12389, 15119, 19011, 13739, 16420, 20915, 19315, 12389, 15119, 19011, 14534, 20915, 19315, 12389, 15119, 19011, 14535, 13739, 16420, 20915, 19315, 12389, 15119, 19011, 14844, 20915, 19315, 12389, 15119, 19011, 14845, 13739, 9844, 20915, 19315, 12389, 15119, 19011, 15119, 5814, 20915, 19315, 12389, 15423, 16586, 20915, 19315, 13738, 20915, 19315, 13739, 7142, 20915, 19315, 13739, 9175, 3357, 16402, 20915, 19315, 13739, 9175, 6779, 15423, 18214, 20915, 19315, 13739, 9845, 5814, 20915, 19315, 13739, 9845, 17838, 20915, 19315, 13739, 9845, 19010, 20915, 19315, 13739, 13883, 3357, 16402, 20915, 19315, 13739, 13883, 6779, 16402, 20915, 19315, 13739, 13883, 12389, 5814, 20915, 19315, 13739, 13883, 13737, 16402, 20915, 19315, 13739, 13883, 15031, 670, 20915, 19315, 13739, 16065, 9503, 15030, 20915, 19315, 13739, 16065, 12389, 15118, 20915, 19315, 13739, 16065, 12389, 15119, 18652, 20915, 19315, 13739, 16065, 15119, 9502, 20915, 19315, 13739, 16420, 20915, 19315, 15031, 670, 20915, 19315, 15031, 5814, 20915, 19315, 15031, 6434, 20915, 19315, 15031, 6435, 15273, 16152, 20915, 19315, 15031, 6435, 15449, 14536, 20915, 19315, 15031, 6435, 15449, 18652, 20915, 19315, 15031, 12388, 20915, 19315, 15031, 12389, 13738, 20915, 19315, 15031, 13738, 20915, 19315, 15031, 15423, 16586, 20915, 19315, 15031, 17387, 13738, 20915, 19315, 15119, 670, 20915, 19315, 15119, 671, 13739, 9844, 20915, 19315, 15119, 5815, 9175, 12388, 20915, 19315, 15119, 6434, 20915, 19315, 15119, 9503, 15030, 20915, 19315, 15119, 13739, 14289, 2633, 12389, 670, 20915, 19315, 15119, 13739, 14289, 2633, 12389, 16196, 20915, 19315, 15119, 13739, 14289, 12389, 670, 20915, 19315, 15119, 13739, 14535, 12389, 670, 20915, 19315, 15119, 13739, 14851, 12389, 670, 20915, 19315, 15119, 13739, 15030, 20915, 19315, 15119, 13739, 16153, 12389, 670, 20915, 19315, 15119, 13739, 16153, 12389, 14844, 20915, 19315, 15119, 15030, 20915, 19315, 15119, 15423, 16586, 20915, 19316, 20915, 19317, 6757, 16403, 15612, 20915, 19317, 6757, 16403, 15613, 5814, 20915, 19317, 6757, 16403, 15613, 6779, 5814, 20915, 19317, 6757, 16403, 15613, 13739, 16420, 20915, 19317, 6757, 16403, 15613, 14844, 20915, 19317, 6757, 16403, 15613, 14845, 469, 13738, 20915, 19317, 6757, 16403, 15613, 14845, 13739, 9844, 20915, 19317, 6779, 16402, 20915, 19317, 6779, 16403, 5814, 20915, 19317, 6779, 16403, 14844, 20915, 19317, 6779, 16403, 19010, 20915, 19317, 6779, 16403, 19011, 13592, 20915, 19317, 7142, 20915, 19317, 7143, 6757, 16403, 15612, 20915, 19317, 7143, 6757, 16403, 15613, 5814, 20915, 19317, 7143, 6757, 16403, 15613, 6779, 5814, 20915, 19317, 7143, 13739, 9844, 20915, 19317, 13593, 12389, 13739, 9844, 20915, 19317, 13593, 14454, 20915, 19317, 13593, 14455, 13739, 9844, 20915, 19317, 13593, 14455, 13739, 9845, 5814, 20915, 19317, 13593, 15030, 20915, 19317, 13739, 5814, 20915, 19317, 13739, 9844, 20915, 19317, 13739, 16420, 20915, 19317, 16065, 9209, 16382, 20915, 19318, 20915, 19319, 9503, 13738, 20915, 19319, 12389, 9503, 15031, 316, 20915, 19319, 12389, 9503, 15031, 2632, 20915, 19319, 12389, 9503, 15031, 13882, 20915, 19319, 15119, 9503, 15031, 19010, 20915, 19319, 15119, 9503, 15031, 19011, 316, 20915, 19319, 15119, 9503, 15031, 19011, 2632, 20915, 19319, 15119, 13738, 20915, 19319, 17800, 20915, 19320, 20915, 19321, 469, 13738, 20915, 19321, 6757, 16403, 15612, 20915, 19321, 9503, 15030, 20915, 19321, 12388, 20915, 19321, 13739, 9844, 20915, 19321, 13739, 16420, 20915, 19321, 15031, 670, 20915, 19614, 20915, 19841, 18595, 1637, 8462, 20915, 20128, 20915, 20143, 18595, 1637, 8462, 20915, 20162, 20915, 20163, 9503, 6435, 15119, 13739, 12389, 11772, 20915, 20163, 9503, 15030, 20915, 20163, 12388, 20915, 20163, 12389, 9503, 15030, 20915, 20163, 12389, 9503, 15031, 2632, 20915, 20163, 12389, 13738, 20915, 20163, 12389, 13739, 316, 20915, 20163, 12389, 13739, 2632, 20915, 20163, 12389, 15119, 9502, 20915, 20163, 12389, 15119, 15030, 20915, 20163, 15031, 670, 20915, 20163, 15031, 12388, 20915, 20163, 15031, 12389, 13739, 12389, 13738, 20915, 20163, 15031, 12389, 13739, 12389, 13739, 2632, 20915, 20163, 15119, 9503, 15030, 20915, 20163, 15119, 9503, 15031, 316, 20915, 20163, 15119, 9503, 15031, 2632, 20915, 20164, 20915, 20165, 469, 13738, 20915, 20165, 6757, 16403, 15613, 9170, 20915, 20165, 6779, 16403, 19010, 20915, 20165, 9170, 20915, 20165, 9171, 469, 13738, 20915, 20165, 9171, 13739, 9844, 20915, 20165, 9171, 13739, 16420, 20915, 20165, 9502, 20915, 20165, 9503, 6435, 12389, 13739, 7293, 15118, 20915, 20165, 12388, 20915, 20165, 12389, 9503, 15030, 20915, 20165, 12389, 13738, 20915, 20165, 12389, 13739, 9170, 20915, 20165, 12389, 13739, 9844, 20915, 20165, 12389, 13739, 12536, 20915, 20165, 12389, 13739, 13562, 20915, 20165, 12389, 14844, 20915, 20165, 12389, 15119, 9502, 20915, 20165, 12389, 15119, 9503, 19010, 20915, 20165, 12389, 15119, 15030, 20915, 20165, 13562, 20915, 20165, 13739, 9844, 20915, 20165, 13739, 9845, 18765, 12388, 20915, 20165, 13739, 16065, 15119, 9502, 20915, 20165, 15030, 20915, 20165, 15031, 12388, 20915, 20165, 15031, 12389, 13738, 20915, 20165, 15031, 13738, 20915, 20165, 15118, 20915, 20165, 15119, 9503, 15030, 20915, 20708, 20915, 20709, 9503, 15030, 20915, 20709, 12388, 20915, 20709, 12389, 5814, 20915, 20709, 12389, 9503, 15030, 20915, 20709, 12389, 12282, 20915, 20709, 12389, 15118, 20915, 20709, 12389, 15119, 9502, 20915, 20709, 12389, 15119, 11773, 15030, 20915, 20709, 12389, 15119, 13738, 20915, 20709, 12389, 15119, 15030, 20915, 20709, 12389, 15119, 16196, 20915, 20709, 15031, 670, 20915, 20709, 15031, 12388, 20915, 20709, 15119, 670, 20915, 20709, 15119, 9503, 15030, 20915, 20709, 15119, 9503, 15031, 5814, 20915, 20846, 20915, 22836, 20915, 22837, 9170, 20915, 22837, 12389, 9503, 15031, 496, 20915, 22837, 15119, 9503, 15031, 496, 20915, 23109, 671, 6435, 12536, 20915, 23109, 671, 6435, 13562, 20915, 23109, 671, 6435, 20527, 12536, 20915, 23109, 671, 6435, 20527, 13562, 20915, 23109, 671, 20390, 20915, 23109, 6435, 20390, 20915, 23109, 9845, 635, 9845, 18566, 20915, 23303, 14537, 5812, 20915, 23303, 18653, 17300, 20915, 23441, 18818, 20915, 23443, 863, 15605, 14624, 20915, 23443, 863, 15605, 15572, 20915, 23443, 863, 15605, 15780, 20915, 23443, 17198, 20915, 23443, 23519, 14624, 20915, 23443, 23519, 15572, 20915, 23443, 23519, 20526, 20915, 23443, 23545, 14624, 20915, 23443, 23545, 15572, 20915, 23443, 23545, 20526, 20915, 23453, 14536, 20915, 23453, 17752, 20915, 23453, 18652, 20915, 23453, 18653, 14624, 20915, 23453, 18653, 20526, 20915, 23461, 5307, 12536, 20915, 23461, 5307, 13562, 20915, 23461, 5307, 15094, 20915, 23461, 5307, 16700, 20915, 23461, 16065, 5307, 12536, 20915, 23461, 16065, 5307, 13562, 20915, 23461, 16065, 5307, 15094, 20915, 23461, 16065, 5307, 16700, 20915, 23461, 16065, 17389, 12536, 20915, 23461, 16065, 17389, 13562, 20915, 23461, 16065, 17389, 15094, 20915, 23461, 16065, 17389, 16700, 20915, 23461, 17389, 12536, 20915, 23461, 17389, 13562, 20915, 23461, 17389, 15094, 20915, 23461, 17389, 16700, 20915, 23487, 17198, 20915, 23487, 23519, 14624, 20915, 23487, 23519, 15572, 20915, 23487, 23519, 20526, 20915, 23487, 23545, 14624, 20915, 23487, 23545, 15572, 20915, 23487, 23545, 20526, 20915, 23493, 14536, 20915, 23493, 18652, 20915, 23493, 18653, 14624, 20915, 23493, 18653, 20526, 20915, 23499, 13582, 20915, 23503, 863, 14487, 13563, 14624, 20915, 23503, 863, 14487, 13563, 15572, 20915, 23503, 863, 14487, 15095, 14624, 20915, 23503, 863, 14487, 15095, 15572, 20915, 23503, 969, 12536, 20915, 23503, 969, 13562, 20915, 23503, 969, 15094, 20915, 23503, 1786, 20915, 23503, 5813, 12536, 20915, 23503, 5813, 13562, 20915, 23503, 5813, 15094, 20915, 23503, 7321, 12536, 20915, 23503, 7321, 13562, 20915, 23503, 7321, 15094, 20915, 23503, 7321, 16495, 11704, 20915, 23503, 7321, 16495, 12121, 10618, 20915, 23503, 7889, 12536, 20915, 23503, 7889, 13562, 20915, 23503, 7889, 13563, 14624, 20915, 23503, 7889, 15094, 20915, 23503, 7889, 16495, 11704, 20915, 23503, 7889, 16495, 12121, 10618, 20915, 23503, 10621, 11783, 14625, 12536, 20915, 23503, 10621, 11783, 14625, 13562, 20915, 23503, 10621, 11783, 14625, 15094, 20915, 23503, 10621, 11783, 15781, 12536, 20915, 23503, 10621, 11783, 15781, 13562, 20915, 23503, 10621, 11783, 15781, 15094, 20915, 23503, 10621, 16495, 11704, 20915, 23503, 10621, 16495, 12121, 10618, 20915, 23503, 10621, 17839, 9219, 12536, 20915, 23503, 10621, 17839, 9219, 13562, 20915, 23503, 10621, 17839, 9219, 15094, 20915, 23503, 11695, 12536, 20915, 23503, 11695, 13562, 20915, 23503, 11695, 15094, 20915, 23503, 11772, 20915, 23503, 11783, 10155, 18652, 20915, 23503, 11783, 16495, 11704, 20915, 23503, 11783, 16495, 12121, 10618, 20915, 23503, 11783, 17087, 12536, 20915, 23503, 11783, 17087, 13562, 20915, 23503, 11783, 17087, 15094, 20915, 23503, 11783, 17087, 16700, 20915, 23503, 11783, 20707, 12536, 20915, 23503, 11783, 20707, 13562, 20915, 23503, 11783, 20707, 15094, 20915, 23503, 11783, 20707, 16700, 20915, 23503, 11783, 22943, 14487, 13562, 20915, 23503, 11783, 22943, 14487, 15094, 20915, 23503, 13203, 12536, 20915, 23503, 13203, 13562, 20915, 23503, 13203, 15094, 20915, 23503, 14071, 14487, 12121, 14624, 20915, 23503, 14071, 14487, 12121, 15572, 20915, 23503, 14519, 12536, 20915, 23503, 14519, 13562, 20915, 23503, 14519, 15094, 20915, 23503, 14519, 18550, 20915, 23503, 14537, 11773, 13562, 20915, 23503, 14537, 11773, 15094, 20915, 23503, 14625, 14071, 6762, 20915, 23503, 14625, 18652, 20915, 23503, 14625, 20526, 20915, 23503, 14625, 20527, 14071, 6762, 20915, 23503, 14701, 16155, 14624, 20915, 23503, 14701, 16155, 15572, 20915, 23503, 14701, 16174, 20915, 23503, 15573, 14071, 6762, 20915, 23503, 15573, 18653, 12536, 20915, 23503, 15573, 18653, 13562, 20915, 23503, 15573, 18653, 15094, 20915, 23503, 15573, 18653, 16700, 20915, 23503, 15781, 14071, 6762, 20915, 23503, 15781, 18653, 18332, 20915, 23503, 15781, 20526, 20915, 23503, 15781, 20527, 14071, 6762, 20915, 23503, 15945, 12536, 20915, 23503, 15945, 13562, 20915, 23503, 15945, 15094, 20915, 23503, 17198, 20915, 23519, 14624, 20915, 23519, 14625, 16495, 11704, 20915, 23519, 14625, 16495, 12121, 10618, 20915, 23519, 15572, 20915, 23519, 15573, 16495, 11704, 20915, 23519, 15573, 16495, 12121, 10618, 20915, 23519, 18890, 20915, 23519, 20527, 16495, 11704, 20915, 23519, 20527, 16495, 12121, 10618, 20915, 23531, 13582, 20915, 23533, 863, 14487, 16495, 10619, 12537, 14624, 20915, 23533, 863, 14487, 16495, 10619, 12537, 15572, 20915, 23533, 863, 14487, 16495, 10619, 13563, 14624, 20915, 23533, 863, 14487, 16495, 10619, 13563, 15572, 20915, 23533, 863, 14487, 16495, 10619, 15095, 14624, 20915, 23533, 863, 14487, 16495, 10619, 15095, 15572, 20915, 23533, 969, 12536, 20915, 23533, 969, 13562, 20915, 23533, 969, 15094, 20915, 23533, 1786, 20915, 23533, 5812, 20915, 23533, 7321, 13562, 20915, 23533, 7321, 16495, 12095, 12537, 14624, 20915, 23533, 7321, 16495, 12095, 13563, 14624, 20915, 23533, 7321, 16495, 12095, 15781, 12537, 15780, 20915, 23533, 7321, 16495, 12095, 15781, 13563, 15780, 20915, 23533, 7321, 16495, 16123, 12537, 14624, 20915, 23533, 7321, 16495, 16123, 12537, 15780, 20915, 23533, 7321, 16495, 16123, 13563, 14624, 20915, 23533, 7321, 16495, 16123, 13563, 15780, 20915, 23533, 7889, 13562, 20915, 23533, 7889, 16495, 12095, 12537, 14624, 20915, 23533, 7889, 16495, 12095, 12537, 15572, 20915, 23533, 7889, 16495, 12095, 13563, 14624, 20915, 23533, 7889, 16495, 12095, 13563, 15572, 20915, 23533, 7889, 16495, 16123, 12537, 14624, 20915, 23533, 7889, 16495, 16123, 12537, 15572, 20915, 23533, 7889, 16495, 16123, 13563, 14624, 20915, 23533, 7889, 16495, 16123, 13563, 15572, 20915, 23533, 10621, 12536, 20915, 23533, 10621, 13562, 20915, 23533, 10621, 13572, 20915, 23533, 10621, 16495, 12095, 12536, 20915, 23533, 10621, 16495, 12095, 13562, 20915, 23533, 10621, 16495, 16123, 12536, 20915, 23533, 10621, 16495, 16123, 13562, 20915, 23533, 11694, 20915, 23533, 11772, 20915, 23533, 11783, 12536, 20915, 23533, 11783, 13562, 20915, 23533, 11783, 15094, 20915, 23533, 11783, 16495, 12095, 12536, 20915, 23533, 11783, 16495, 12095, 13562, 20915, 23533, 11783, 16495, 16123, 12536, 20915, 23533, 11783, 16495, 16123, 13562, 20915, 23533, 11783, 16700, 20915, 23533, 11783, 17770, 20915, 23533, 13203, 12536, 20915, 23533, 13203, 13562, 20915, 23533, 13203, 15094, 20915, 23533, 14071, 14487, 16495, 10619, 14624, 20915, 23533, 14071, 14487, 16495, 10619, 15572, 20915, 23533, 14519, 12536, 20915, 23533, 14519, 13562, 20915, 23533, 14519, 15094, 20915, 23533, 14625, 14071, 6762, 20915, 23533, 14625, 18652, 20915, 23533, 14625, 20526, 20915, 23533, 14625, 20527, 14071, 6762, 20915, 23533, 14701, 16155, 16495, 10619, 14624, 20915, 23533, 14701, 16155, 16495, 10619, 15572, 20915, 23533, 14701, 16174, 20915, 23533, 15573, 14071, 6762, 20915, 23533, 15573, 18653, 12536, 20915, 23533, 15573, 18653, 13562, 20915, 23533, 15573, 18653, 15094, 20915, 23533, 15573, 18653, 16700, 20915, 23533, 15781, 14071, 6762, 20915, 23533, 15781, 18653, 18332, 20915, 23533, 15781, 20527, 14071, 6762, 20915, 23533, 15781, 20527, 18332, 20915, 23533, 15945, 12536, 20915, 23533, 15945, 13562, 20915, 23533, 15945, 15094, 20915, 23533, 17199, 18430, 20915, 23545, 14624, 20915, 23545, 14625, 16495, 12094, 20915, 23545, 14625, 16495, 16122, 20915, 23545, 15572, 20915, 23545, 15573, 16495, 12094, 20915, 23545, 15573, 16495, 16122, 20915, 23545, 20526, 20915, 23545, 20527, 16495, 12094, 20915, 23545, 20527, 16495, 16122, 20924, 20937, 2610, 20937, 3076, 20937, 3356, 20937, 6756, 20937, 6778, 20937, 7817, 20846, 20937, 8780, 20937, 9287, 9854, 20937, 10900, 20937, 11978, 20937, 12541, 13563, 14999, 16, 20937, 12541, 13563, 14999, 26, 20937, 12740, 20937, 13341, 20846, 20937, 13450, 20937, 13736, 20937, 14647, 9854, 20948, 20959, 21124, 20971, 9854, 20973, 2897, 18774, 20973, 13563, 2897, 18774, 20973, 13563, 17588, 20973, 17588, 20973, 18309, 17588, 20973, 18775, 10641, 7817, 7123, 11570, 20973, 18775, 10641, 13341, 7123, 11570, 20977, 6718, 20980, 20983, 18019, 18098, 20985, 12973, 6561, 5741, 11476, 20985, 12973, 6561, 10533, 12277, 5741, 11476, 20985, 12973, 6561, 12277, 5741, 11476, 20985, 12973, 6561, 12563, 5741, 11476, 20985, 12973, 6561, 15095, 5741, 11476, 20985, 12973, 10629, 5741, 11476, 20985, 12973, 10629, 10533, 12277, 5741, 11476, 20985, 12973, 10629, 12277, 5741, 11476, 20985, 12973, 10629, 12563, 5741, 11476, 20985, 12973, 10629, 15095, 5741, 11476, 20985, 13581, 6561, 5741, 11476, 20985, 13581, 6561, 10533, 12277, 5741, 11476, 20985, 13581, 6561, 12277, 5741, 11476, 20985, 13581, 6561, 12563, 5741, 11476, 20985, 13581, 6561, 15095, 5741, 11476, 20985, 13581, 10629, 5741, 11476, 20985, 13581, 10629, 10533, 12277, 5741, 11476, 20985, 13581, 10629, 12277, 5741, 11476, 20985, 13581, 10629, 12563, 5741, 11476, 20985, 13581, 10629, 15095, 5741, 11476, 20985, 17463, 5741, 11476, 20985, 17463, 10533, 12277, 5741, 11476, 20985, 17463, 12277, 5741, 11476, 20985, 17463, 12563, 5741, 11476, 20985, 17463, 15095, 5741, 11476, 20985, 19215, 5741, 11476, 20985, 19215, 10533, 12277, 5741, 11476, 20985, 19215, 12277, 5741, 11476, 20985, 19215, 12563, 5741, 11476, 20985, 19215, 15095, 5741, 11476, 20985, 19407, 5741, 11476, 20985, 19407, 10533, 12277, 5741, 11476, 20985, 19407, 12277, 5741, 11476, 20985, 19407, 12563, 5741, 11476, 20985, 19407, 15095, 5741, 11476, 20985, 20375, 5741, 11476, 20985, 20375, 10533, 12277, 5741, 11476, 20985, 20375, 12277, 5741, 11476, 20985, 20375, 12563, 5741, 11476, 20985, 20375, 15095, 5741, 11476, 20994, 20997, 505, 19020, 21003, 2671, 3233, 18745, 9854, 21003, 2671, 12739, 9854, 21003, 6113, 9520, 21003, 11905, 2610, 21003, 11905, 3076, 21003, 11905, 3356, 21003, 11905, 6756, 21003, 11905, 6778, 21003, 11905, 8780, 21003, 11905, 10900, 21003, 11905, 11978, 21003, 11905, 13450, 21003, 11905, 13736, 21003, 14741, 9520, 21009, 15673, 1397, 15848, 21023, 16111, 4, 21023, 16111, 14, 21023, 16111, 16, 21023, 16111, 34, 21023, 16111, 50, 21033, 46, 21039, 9854, 21039, 15908, 21044, 21061, 987, 18527, 6718, 21061, 6718, 21079, 18334, 21083, 11571, 14486, 21083, 11571, 15620, 21083, 11571, 16248, 21083, 14049, 14486, 21083, 14049, 15620, 21083, 14049, 16248, 21084, 21087, 5719, 11706, 21089, 18583, 14049, 20375, 11476, 21097, 505, 12005, 634, 21097, 505, 17237, 12005, 634, 21097, 505, 17237, 12005, 635, 10641, 1217, 11392, 21097, 505, 17237, 12005, 635, 10641, 1217, 11393, 7816, 21097, 505, 17237, 12005, 635, 10641, 1217, 14874, 21097, 505, 19408, 21097, 505, 20127, 634, 21097, 505, 20536, 21097, 843, 2511, 20536, 21097, 843, 20917, 2511, 12005, 634, 21097, 987, 2511, 12005, 634, 21097, 987, 2511, 20127, 634, 21097, 9175, 12005, 634, 21097, 9854, 21097, 10641, 1216, 21097, 10641, 14487, 14874, 21097, 10641, 18511, 8321, 11392, 21097, 11393, 17223, 505, 12004, 21097, 11393, 17223, 11393, 19408, 21097, 11393, 17237, 12005, 11393, 19409, 11393, 17237, 12004, 21097, 11393, 19409, 11393, 20671, 12004, 21097, 11393, 20375, 11476, 21097, 11393, 20671, 12005, 11393, 19408, 21097, 12005, 635, 505, 19408, 21097, 14373, 19408, 21097, 14497, 123, 11782, 21097, 14497, 123, 11783, 11393, 17237, 12004, 21097, 20833, 19408, 21103, 15134, 21110, 21112, 21124, 21125, 10641, 1216, 21125, 10641, 16727, 842, 21125, 10641, 16946, 21125, 11393, 897, 11393, 13884, 21125, 11393, 13884, 21125, 14373, 843, 14889, 10641, 21124, 21147, 5853, 537, 15672, 21147, 5853, 2681, 15672, 21147, 5853, 2915, 15672, 21147, 5853, 11905, 2610, 21147, 5853, 11905, 3076, 21147, 5853, 11905, 3356, 21147, 5853, 11905, 6756, 21147, 5853, 11905, 6778, 21147, 5853, 11905, 8780, 21147, 5853, 11905, 10900, 21147, 5853, 11905, 11978, 21147, 5853, 11905, 13450, 21147, 5853, 11905, 13736, 21147, 5853, 12435, 15672, 21147, 5853, 12802, 21147, 5853, 13563, 0, 21147, 5853, 13563, 2, 21147, 5853, 13563, 4, 21147, 5853, 13563, 6, 21147, 5853, 13563, 8, 21147, 5853, 13563, 10, 21147, 5853, 13563, 12, 21147, 5853, 13563, 14, 21147, 5853, 13563, 16, 21147, 5853, 13563, 18, 21147, 5853, 13563, 20, 21147, 5853, 13563, 22, 21147, 5853, 13563, 24, 21147, 5853, 13563, 26, 21147, 5853, 13563, 28, 21147, 5853, 13563, 30, 21147, 5853, 13563, 32, 21147, 5853, 13563, 34, 21147, 5853, 13563, 36, 21147, 5853, 13563, 38, 21147, 5853, 13563, 40, 21147, 5853, 13563, 42, 21147, 5853, 13563, 44, 21147, 5853, 13563, 46, 21147, 5853, 13563, 48, 21147, 5853, 13563, 50, 21147, 5853, 13563, 440, 21147, 5853, 13563, 472, 21147, 5853, 13563, 536, 21147, 5853, 13563, 724, 21147, 5853, 13563, 1048, 21147, 5853, 13563, 1326, 21147, 5853, 13563, 2680, 21147, 5853, 13563, 2722, 21147, 5853, 13563, 2914, 21147, 5853, 13563, 3216, 21147, 5853, 13563, 5816, 21147, 5853, 13563, 7438, 21147, 5853, 13563, 10902, 21147, 5853, 13563, 11436, 21147, 5853, 13563, 11888, 21147, 5853, 13563, 12085, 13530, 21147, 5853, 13563, 12156, 21147, 5853, 13563, 12434, 21147, 5853, 13563, 12528, 21147, 5853, 13563, 13144, 21147, 5853, 13563, 13530, 21147, 5853, 13563, 13718, 21147, 5853, 13563, 16252, 21147, 5853, 13563, 16376, 21147, 5853, 13563, 16926, 21147, 5853, 13563, 17460, 21147, 5853, 13719, 15672, 21147, 5853, 14883, 537, 15672, 21147, 5853, 14883, 2681, 15672, 21147, 5853, 14883, 2915, 15672, 21147, 5853, 14883, 12435, 15672, 21147, 5853, 14883, 12802, 21147, 5853, 14883, 13563, 0, 21147, 5853, 14883, 13563, 2, 21147, 5853, 14883, 13563, 4, 21147, 5853, 14883, 13563, 6, 21147, 5853, 14883, 13563, 8, 21147, 5853, 14883, 13563, 10, 21147, 5853, 14883, 13563, 12, 21147, 5853, 14883, 13563, 14, 21147, 5853, 14883, 13563, 16, 21147, 5853, 14883, 13563, 18, 21147, 5853, 14883, 13563, 20, 21147, 5853, 14883, 13563, 22, 21147, 5853, 14883, 13563, 24, 21147, 5853, 14883, 13563, 26, 21147, 5853, 14883, 13563, 28, 21147, 5853, 14883, 13563, 30, 21147, 5853, 14883, 13563, 32, 21147, 5853, 14883, 13563, 34, 21147, 5853, 14883, 13563, 36, 21147, 5853, 14883, 13563, 38, 21147, 5853, 14883, 13563, 40, 21147, 5853, 14883, 13563, 42, 21147, 5853, 14883, 13563, 44, 21147, 5853, 14883, 13563, 46, 21147, 5853, 14883, 13563, 48, 21147, 5853, 14883, 13563, 50, 21147, 5853, 14883, 13563, 440, 21147, 5853, 14883, 13563, 472, 21147, 5853, 14883, 13563, 536, 21147, 5853, 14883, 13563, 724, 21147, 5853, 14883, 13563, 1048, 21147, 5853, 14883, 13563, 1326, 21147, 5853, 14883, 13563, 2680, 21147, 5853, 14883, 13563, 2722, 21147, 5853, 14883, 13563, 2914, 21147, 5853, 14883, 13563, 3216, 21147, 5853, 14883, 13563, 5816, 21147, 5853, 14883, 13563, 7438, 21147, 5853, 14883, 13563, 10902, 21147, 5853, 14883, 13563, 11436, 21147, 5853, 14883, 13563, 11888, 21147, 5853, 14883, 13563, 12085, 13530, 21147, 5853, 14883, 13563, 12156, 21147, 5853, 14883, 13563, 12434, 21147, 5853, 14883, 13563, 12528, 21147, 5853, 14883, 13563, 13144, 21147, 5853, 14883, 13563, 13530, 21147, 5853, 14883, 13563, 13718, 21147, 5853, 14883, 13563, 16376, 21147, 5853, 14883, 13563, 16926, 21147, 5853, 14883, 13563, 17460, 21147, 5853, 14883, 13719, 15672, 21147, 5853, 14883, 16111, 0, 21147, 5853, 14883, 16111, 2, 21147, 5853, 14883, 16111, 4, 21147, 5853, 14883, 16111, 6, 21147, 5853, 14883, 16111, 8, 21147, 5853, 14883, 16111, 10, 21147, 5853, 14883, 16111, 12, 21147, 5853, 14883, 16111, 14, 21147, 5853, 14883, 16111, 16, 21147, 5853, 14883, 16111, 18, 21147, 5853, 14883, 16111, 20, 21147, 5853, 14883, 16111, 22, 21147, 5853, 14883, 16111, 24, 21147, 5853, 14883, 16111, 26, 21147, 5853, 14883, 16111, 28, 21147, 5853, 14883, 16111, 30, 21147, 5853, 14883, 16111, 32, 21147, 5853, 14883, 16111, 34, 21147, 5853, 14883, 16111, 36, 21147, 5853, 14883, 16111, 38, 21147, 5853, 14883, 16111, 40, 21147, 5853, 14883, 16111, 42, 21147, 5853, 14883, 16111, 44, 21147, 5853, 14883, 16111, 46, 21147, 5853, 14883, 16111, 48, 21147, 5853, 14883, 16111, 50, 21147, 5853, 14883, 16111, 440, 21147, 5853, 14883, 16111, 472, 21147, 5853, 14883, 16111, 536, 21147, 5853, 14883, 16111, 724, 21147, 5853, 14883, 16111, 1048, 21147, 5853, 14883, 16111, 1326, 21147, 5853, 14883, 16111, 2680, 21147, 5853, 14883, 16111, 2722, 21147, 5853, 14883, 16111, 2914, 21147, 5853, 14883, 16111, 3216, 21147, 5853, 14883, 16111, 5816, 21147, 5853, 14883, 16111, 7438, 21147, 5853, 14883, 16111, 10902, 21147, 5853, 14883, 16111, 11436, 21147, 5853, 14883, 16111, 11888, 21147, 5853, 14883, 16111, 12156, 21147, 5853, 14883, 16111, 12434, 21147, 5853, 14883, 16111, 12528, 21147, 5853, 14883, 16111, 13144, 21147, 5853, 14883, 16111, 13530, 21147, 5853, 14883, 16111, 13718, 21147, 5853, 14883, 16111, 13719, 15672, 21147, 5853, 14883, 16111, 16376, 21147, 5853, 14883, 16111, 16926, 21147, 5853, 14883, 16111, 17460, 21147, 5853, 14883, 16377, 15672, 21147, 5853, 14883, 16987, 21048, 21147, 5853, 15501, 13563, 0, 21147, 5853, 15501, 13563, 2, 21147, 5853, 15501, 13563, 4, 21147, 5853, 15501, 13563, 6, 21147, 5853, 15501, 13563, 8, 21147, 5853, 15501, 13563, 10, 21147, 5853, 15501, 13563, 12, 21147, 5853, 15501, 13563, 14, 21147, 5853, 15501, 13563, 16, 21147, 5853, 15501, 13563, 18, 21147, 5853, 15501, 13563, 20, 21147, 5853, 15501, 13563, 22, 21147, 5853, 15501, 13563, 24, 21147, 5853, 15501, 13563, 26, 21147, 5853, 15501, 13563, 28, 21147, 5853, 15501, 13563, 30, 21147, 5853, 15501, 13563, 32, 21147, 5853, 15501, 13563, 34, 21147, 5853, 15501, 13563, 36, 21147, 5853, 15501, 13563, 38, 21147, 5853, 15501, 13563, 40, 21147, 5853, 15501, 13563, 42, 21147, 5853, 15501, 13563, 44, 21147, 5853, 15501, 13563, 46, 21147, 5853, 15501, 13563, 48, 21147, 5853, 15501, 13563, 50, 21147, 5853, 15501, 16111, 0, 21147, 5853, 15501, 16111, 2, 21147, 5853, 15501, 16111, 4, 21147, 5853, 15501, 16111, 6, 21147, 5853, 15501, 16111, 8, 21147, 5853, 15501, 16111, 10, 21147, 5853, 15501, 16111, 12, 21147, 5853, 15501, 16111, 14, 21147, 5853, 15501, 16111, 16, 21147, 5853, 15501, 16111, 18, 21147, 5853, 15501, 16111, 20, 21147, 5853, 15501, 16111, 22, 21147, 5853, 15501, 16111, 24, 21147, 5853, 15501, 16111, 26, 21147, 5853, 15501, 16111, 28, 21147, 5853, 15501, 16111, 30, 21147, 5853, 15501, 16111, 32, 21147, 5853, 15501, 16111, 34, 21147, 5853, 15501, 16111, 36, 21147, 5853, 15501, 16111, 38, 21147, 5853, 15501, 16111, 40, 21147, 5853, 15501, 16111, 42, 21147, 5853, 15501, 16111, 44, 21147, 5853, 15501, 16111, 46, 21147, 5853, 15501, 16111, 48, 21147, 5853, 15501, 16111, 50, 21147, 5853, 16111, 0, 21147, 5853, 16111, 2, 21147, 5853, 16111, 4, 21147, 5853, 16111, 6, 21147, 5853, 16111, 8, 21147, 5853, 16111, 10, 21147, 5853, 16111, 12, 21147, 5853, 16111, 14, 21147, 5853, 16111, 16, 21147, 5853, 16111, 18, 21147, 5853, 16111, 20, 21147, 5853, 16111, 22, 21147, 5853, 16111, 24, 21147, 5853, 16111, 26, 21147, 5853, 16111, 28, 21147, 5853, 16111, 30, 21147, 5853, 16111, 32, 21147, 5853, 16111, 34, 21147, 5853, 16111, 36, 21147, 5853, 16111, 38, 21147, 5853, 16111, 40, 21147, 5853, 16111, 42, 21147, 5853, 16111, 44, 21147, 5853, 16111, 46, 21147, 5853, 16111, 48, 21147, 5853, 16111, 50, 21147, 5853, 16111, 440, 21147, 5853, 16111, 472, 21147, 5853, 16111, 536, 21147, 5853, 16111, 724, 21147, 5853, 16111, 1048, 21147, 5853, 16111, 1326, 21147, 5853, 16111, 2680, 21147, 5853, 16111, 2722, 21147, 5853, 16111, 2914, 21147, 5853, 16111, 3216, 21147, 5853, 16111, 5816, 21147, 5853, 16111, 7438, 21147, 5853, 16111, 10902, 21147, 5853, 16111, 11436, 21147, 5853, 16111, 11888, 21147, 5853, 16111, 12156, 21147, 5853, 16111, 12434, 21147, 5853, 16111, 12528, 21147, 5853, 16111, 13144, 21147, 5853, 16111, 13530, 21147, 5853, 16111, 13718, 21147, 5853, 16111, 13719, 15672, 21147, 5853, 16111, 16252, 21147, 5853, 16111, 16376, 21147, 5853, 16111, 16926, 21147, 5853, 16111, 17460, 21147, 5853, 16377, 15672, 21147, 5853, 16423, 13563, 0, 21147, 5853, 16423, 13563, 2, 21147, 5853, 16423, 13563, 4, 21147, 5853, 16423, 13563, 6, 21147, 5853, 16423, 13563, 8, 21147, 5853, 16423, 13563, 10, 21147, 5853, 16423, 13563, 12, 21147, 5853, 16423, 13563, 14, 21147, 5853, 16423, 13563, 16, 21147, 5853, 16423, 13563, 18, 21147, 5853, 16423, 13563, 20, 21147, 5853, 16423, 13563, 22, 21147, 5853, 16423, 13563, 24, 21147, 5853, 16423, 13563, 26, 21147, 5853, 16423, 13563, 28, 21147, 5853, 16423, 13563, 30, 21147, 5853, 16423, 13563, 32, 21147, 5853, 16423, 13563, 34, 21147, 5853, 16423, 13563, 36, 21147, 5853, 16423, 13563, 38, 21147, 5853, 16423, 13563, 40, 21147, 5853, 16423, 13563, 42, 21147, 5853, 16423, 13563, 44, 21147, 5853, 16423, 13563, 46, 21147, 5853, 16423, 13563, 48, 21147, 5853, 16423, 13563, 50, 21147, 5853, 16423, 16111, 0, 21147, 5853, 16423, 16111, 2, 21147, 5853, 16423, 16111, 4, 21147, 5853, 16423, 16111, 6, 21147, 5853, 16423, 16111, 8, 21147, 5853, 16423, 16111, 10, 21147, 5853, 16423, 16111, 12, 21147, 5853, 16423, 16111, 14, 21147, 5853, 16423, 16111, 16, 21147, 5853, 16423, 16111, 18, 21147, 5853, 16423, 16111, 20, 21147, 5853, 16423, 16111, 22, 21147, 5853, 16423, 16111, 24, 21147, 5853, 16423, 16111, 26, 21147, 5853, 16423, 16111, 28, 21147, 5853, 16423, 16111, 30, 21147, 5853, 16423, 16111, 32, 21147, 5853, 16423, 16111, 34, 21147, 5853, 16423, 16111, 36, 21147, 5853, 16423, 16111, 38, 21147, 5853, 16423, 16111, 40, 21147, 5853, 16423, 16111, 42, 21147, 5853, 16423, 16111, 44, 21147, 5853, 16423, 16111, 46, 21147, 5853, 16423, 16111, 48, 21147, 5853, 16423, 16111, 50, 21147, 5853, 16987, 21048, 21147, 7817, 11447, 16088, 21147, 7817, 14049, 15621, 16088, 21147, 7817, 14049, 18763, 13483, 16088, 21147, 7817, 14625, 11447, 16088, 21147, 7817, 19267, 20846, 21147, 13341, 11447, 16088, 21147, 13341, 14049, 15621, 16088, 21147, 13341, 14049, 18763, 13483, 16088, 21147, 13341, 14625, 11447, 16088, 21147, 13341, 19267, 20846, 21147, 14883, 537, 15672, 21147, 14883, 2681, 15672, 21147, 14883, 2915, 15672, 21147, 14883, 12435, 15672, 21147, 14883, 12802, 21147, 14883, 13563, 0, 21147, 14883, 13563, 2, 21147, 14883, 13563, 4, 21147, 14883, 13563, 6, 21147, 14883, 13563, 8, 21147, 14883, 13563, 10, 21147, 14883, 13563, 12, 21147, 14883, 13563, 16, 21147, 14883, 13563, 18, 21147, 14883, 13563, 20, 21147, 14883, 13563, 22, 21147, 14883, 13563, 24, 21147, 14883, 13563, 26, 21147, 14883, 13563, 28, 21147, 14883, 13563, 30, 21147, 14883, 13563, 32, 21147, 14883, 13563, 34, 21147, 14883, 13563, 36, 21147, 14883, 13563, 38, 21147, 14883, 13563, 40, 21147, 14883, 13563, 42, 21147, 14883, 13563, 44, 21147, 14883, 13563, 46, 21147, 14883, 13563, 48, 21147, 14883, 13563, 50, 21147, 14883, 13563, 440, 21147, 14883, 13563, 472, 21147, 14883, 13563, 536, 21147, 14883, 13563, 724, 21147, 14883, 13563, 1048, 21147, 14883, 13563, 1326, 21147, 14883, 13563, 2680, 21147, 14883, 13563, 2722, 21147, 14883, 13563, 2914, 21147, 14883, 13563, 3216, 21147, 14883, 13563, 5816, 21147, 14883, 13563, 7438, 21147, 14883, 13563, 10902, 21147, 14883, 13563, 11436, 21147, 14883, 13563, 11888, 21147, 14883, 13563, 12085, 13530, 21147, 14883, 13563, 12156, 21147, 14883, 13563, 12434, 21147, 14883, 13563, 12528, 21147, 14883, 13563, 13144, 21147, 14883, 13563, 13530, 21147, 14883, 13563, 13718, 21147, 14883, 13563, 16279, 16, 21147, 14883, 13563, 16279, 18, 21147, 14883, 13563, 16376, 21147, 14883, 13563, 16926, 21147, 14883, 13563, 17460, 21147, 14883, 13719, 15672, 21147, 14883, 16111, 0, 21147, 14883, 16111, 2, 21147, 14883, 16111, 4, 21147, 14883, 16111, 6, 21147, 14883, 16111, 8, 21147, 14883, 16111, 10, 21147, 14883, 16111, 12, 21147, 14883, 16111, 14, 21147, 14883, 16111, 16, 21147, 14883, 16111, 18, 21147, 14883, 16111, 20, 21147, 14883, 16111, 22, 21147, 14883, 16111, 24, 21147, 14883, 16111, 26, 21147, 14883, 16111, 28, 21147, 14883, 16111, 30, 21147, 14883, 16111, 32, 21147, 14883, 16111, 34, 21147, 14883, 16111, 36, 21147, 14883, 16111, 38, 21147, 14883, 16111, 40, 21147, 14883, 16111, 42, 21147, 14883, 16111, 44, 21147, 14883, 16111, 46, 21147, 14883, 16111, 48, 21147, 14883, 16111, 50, 21147, 14883, 16111, 440, 21147, 14883, 16111, 472, 21147, 14883, 16111, 536, 21147, 14883, 16111, 724, 21147, 14883, 16111, 1048, 21147, 14883, 16111, 1326, 21147, 14883, 16111, 2680, 21147, 14883, 16111, 2722, 21147, 14883, 16111, 2914, 21147, 14883, 16111, 3216, 21147, 14883, 16111, 5816, 21147, 14883, 16111, 7438, 21147, 14883, 16111, 10902, 21147, 14883, 16111, 11436, 21147, 14883, 16111, 11888, 21147, 14883, 16111, 12156, 21147, 14883, 16111, 12434, 21147, 14883, 16111, 12528, 21147, 14883, 16111, 13144, 21147, 14883, 16111, 13530, 21147, 14883, 16111, 13718, 21147, 14883, 16111, 13719, 15672, 21147, 14883, 16111, 16376, 21147, 14883, 16111, 16926, 21147, 14883, 16111, 17460, 21147, 14883, 16377, 15672, 21147, 14883, 16987, 21048, 21147, 15451, 17838, 21147, 15501, 13563, 0, 21147, 15501, 13563, 2, 21147, 15501, 13563, 4, 21147, 15501, 13563, 6, 21147, 15501, 13563, 10, 21147, 15501, 13563, 14, 21147, 15501, 13563, 16, 21147, 15501, 13563, 18, 21147, 15501, 13563, 20, 21147, 15501, 13563, 22, 21147, 15501, 13563, 24, 21147, 15501, 13563, 26, 21147, 15501, 13563, 30, 21147, 15501, 13563, 32, 21147, 15501, 13563, 34, 21147, 15501, 13563, 36, 21147, 15501, 13563, 38, 21147, 15501, 13563, 40, 21147, 15501, 13563, 42, 21147, 15501, 13563, 44, 21147, 15501, 13563, 46, 21147, 15501, 13563, 48, 21147, 15501, 13563, 50, 21147, 15501, 16111, 0, 21147, 15501, 16111, 4, 21147, 15501, 16111, 6, 21147, 15501, 16111, 12, 21147, 15501, 16111, 18, 21147, 15501, 16111, 20, 21147, 15501, 16111, 26, 21147, 15501, 16111, 28, 21147, 15501, 16111, 30, 21147, 15501, 16111, 32, 21147, 15501, 16111, 36, 21147, 15501, 16111, 38, 21147, 15501, 16111, 40, 21147, 15501, 16111, 42, 21147, 15501, 16111, 44, 21147, 15501, 16111, 46, 21147, 15501, 16111, 48, 21147, 15501, 16111, 50, 21147, 16389, 17838, 21147, 16423, 13563, 0, 21147, 16423, 13563, 2, 21147, 16423, 13563, 4, 21147, 16423, 13563, 6, 21147, 16423, 13563, 8, 21147, 16423, 13563, 10, 21147, 16423, 13563, 12, 21147, 16423, 13563, 14, 21147, 16423, 13563, 16, 21147, 16423, 13563, 18, 21147, 16423, 13563, 20, 21147, 16423, 13563, 22, 21147, 16423, 13563, 24, 21147, 16423, 13563, 26, 21147, 16423, 13563, 28, 21147, 16423, 13563, 30, 21147, 16423, 13563, 32, 21147, 16423, 13563, 34, 21147, 16423, 13563, 36, 21147, 16423, 13563, 38, 21147, 16423, 13563, 40, 21147, 16423, 13563, 42, 21147, 16423, 13563, 44, 21147, 16423, 13563, 46, 21147, 16423, 13563, 48, 21147, 16423, 13563, 50, 21147, 16423, 16111, 0, 21147, 16423, 16111, 2, 21147, 16423, 16111, 6, 21147, 16423, 16111, 8, 21147, 16423, 16111, 10, 21147, 16423, 16111, 12, 21147, 16423, 16111, 18, 21147, 16423, 16111, 20, 21147, 16423, 16111, 22, 21147, 16423, 16111, 24, 21147, 16423, 16111, 26, 21147, 16423, 16111, 28, 21147, 16423, 16111, 30, 21147, 16423, 16111, 32, 21147, 16423, 16111, 36, 21147, 16423, 16111, 38, 21147, 16423, 16111, 40, 21147, 16423, 16111, 42, 21147, 16423, 16111, 44, 21147, 16423, 16111, 46, 21147, 16423, 16111, 48, 21147, 19451, 11905, 2610, 21147, 19451, 11905, 3076, 21147, 19451, 11905, 3356, 21147, 19451, 11905, 6756, 21147, 19451, 11905, 6778, 21147, 19451, 11905, 8780, 21147, 19451, 11905, 10900, 21147, 19451, 11905, 11978, 21147, 19451, 11905, 13450, 21147, 19451, 11905, 13736, 21147, 19451, 13563, 0, 21147, 19451, 13563, 2, 21147, 19451, 13563, 4, 21147, 19451, 13563, 6, 21147, 19451, 13563, 8, 21147, 19451, 13563, 10, 21147, 19451, 13563, 12, 21147, 19451, 13563, 14, 21147, 19451, 13563, 16, 21147, 19451, 13563, 18, 21147, 19451, 13563, 20, 21147, 19451, 13563, 22, 21147, 19451, 13563, 24, 21147, 19451, 13563, 26, 21147, 19451, 13563, 28, 21147, 19451, 13563, 30, 21147, 19451, 13563, 32, 21147, 19451, 13563, 34, 21147, 19451, 13563, 36, 21147, 19451, 13563, 38, 21147, 19451, 13563, 40, 21147, 19451, 13563, 42, 21147, 19451, 13563, 44, 21147, 19451, 13563, 46, 21147, 19451, 13563, 48, 21147, 19451, 13563, 50, 21147, 19451, 16111, 0, 21147, 19451, 16111, 2, 21147, 19451, 16111, 4, 21147, 19451, 16111, 6, 21147, 19451, 16111, 8, 21147, 19451, 16111, 10, 21147, 19451, 16111, 12, 21147, 19451, 16111, 14, 21147, 19451, 16111, 16, 21147, 19451, 16111, 18, 21147, 19451, 16111, 20, 21147, 19451, 16111, 22, 21147, 19451, 16111, 24, 21147, 19451, 16111, 26, 21147, 19451, 16111, 28, 21147, 19451, 16111, 30, 21147, 19451, 16111, 32, 21147, 19451, 16111, 34, 21147, 19451, 16111, 36, 21147, 19451, 16111, 38, 21147, 19451, 16111, 40, 21147, 19451, 16111, 42, 21147, 19451, 16111, 44, 21147, 19451, 16111, 46, 21147, 19451, 16111, 48, 21147, 19451, 16111, 50, 21147, 20377, 5853, 537, 15672, 21147, 20377, 5853, 2681, 15672, 21147, 20377, 5853, 2915, 15672, 21147, 20377, 5853, 11905, 2610, 21147, 20377, 5853, 11905, 3076, 21147, 20377, 5853, 11905, 3356, 21147, 20377, 5853, 11905, 6756, 21147, 20377, 5853, 11905, 6778, 21147, 20377, 5853, 11905, 8780, 21147, 20377, 5853, 11905, 10900, 21147, 20377, 5853, 11905, 11978, 21147, 20377, 5853, 11905, 13450, 21147, 20377, 5853, 11905, 13736, 21147, 20377, 5853, 12435, 15672, 21147, 20377, 5853, 12802, 21147, 20377, 5853, 13563, 0, 21147, 20377, 5853, 13563, 2, 21147, 20377, 5853, 13563, 4, 21147, 20377, 5853, 13563, 6, 21147, 20377, 5853, 13563, 8, 21147, 20377, 5853, 13563, 10, 21147, 20377, 5853, 13563, 12, 21147, 20377, 5853, 13563, 14, 21147, 20377, 5853, 13563, 16, 21147, 20377, 5853, 13563, 18, 21147, 20377, 5853, 13563, 20, 21147, 20377, 5853, 13563, 22, 21147, 20377, 5853, 13563, 24, 21147, 20377, 5853, 13563, 26, 21147, 20377, 5853, 13563, 28, 21147, 20377, 5853, 13563, 30, 21147, 20377, 5853, 13563, 32, 21147, 20377, 5853, 13563, 34, 21147, 20377, 5853, 13563, 36, 21147, 20377, 5853, 13563, 38, 21147, 20377, 5853, 13563, 40, 21147, 20377, 5853, 13563, 42, 21147, 20377, 5853, 13563, 44, 21147, 20377, 5853, 13563, 46, 21147, 20377, 5853, 13563, 48, 21147, 20377, 5853, 13563, 50, 21147, 20377, 5853, 13563, 440, 21147, 20377, 5853, 13563, 472, 21147, 20377, 5853, 13563, 536, 21147, 20377, 5853, 13563, 724, 21147, 20377, 5853, 13563, 1048, 21147, 20377, 5853, 13563, 1326, 21147, 20377, 5853, 13563, 2680, 21147, 20377, 5853, 13563, 2722, 21147, 20377, 5853, 13563, 2914, 21147, 20377, 5853, 13563, 3216, 21147, 20377, 5853, 13563, 5816, 21147, 20377, 5853, 13563, 7438, 21147, 20377, 5853, 13563, 10902, 21147, 20377, 5853, 13563, 11436, 21147, 20377, 5853, 13563, 11888, 21147, 20377, 5853, 13563, 12085, 13530, 21147, 20377, 5853, 13563, 12156, 21147, 20377, 5853, 13563, 12434, 21147, 20377, 5853, 13563, 12528, 21147, 20377, 5853, 13563, 13144, 21147, 20377, 5853, 13563, 13530, 21147, 20377, 5853, 13563, 13718, 21147, 20377, 5853, 13563, 16376, 21147, 20377, 5853, 13563, 16926, 21147, 20377, 5853, 13563, 17460, 21147, 20377, 5853, 13719, 15672, 21147, 20377, 5853, 14883, 537, 15672, 21147, 20377, 5853, 14883, 2681, 15672, 21147, 20377, 5853, 14883, 2915, 15672, 21147, 20377, 5853, 14883, 12435, 15672, 21147, 20377, 5853, 14883, 12802, 21147, 20377, 5853, 14883, 13563, 0, 21147, 20377, 5853, 14883, 13563, 2, 21147, 20377, 5853, 14883, 13563, 4, 21147, 20377, 5853, 14883, 13563, 6, 21147, 20377, 5853, 14883, 13563, 8, 21147, 20377, 5853, 14883, 13563, 10, 21147, 20377, 5853, 14883, 13563, 12, 21147, 20377, 5853, 14883, 13563, 14, 21147, 20377, 5853, 14883, 13563, 16, 21147, 20377, 5853, 14883, 13563, 18, 21147, 20377, 5853, 14883, 13563, 20, 21147, 20377, 5853, 14883, 13563, 22, 21147, 20377, 5853, 14883, 13563, 24, 21147, 20377, 5853, 14883, 13563, 26, 21147, 20377, 5853, 14883, 13563, 28, 21147, 20377, 5853, 14883, 13563, 30, 21147, 20377, 5853, 14883, 13563, 32, 21147, 20377, 5853, 14883, 13563, 34, 21147, 20377, 5853, 14883, 13563, 36, 21147, 20377, 5853, 14883, 13563, 38, 21147, 20377, 5853, 14883, 13563, 40, 21147, 20377, 5853, 14883, 13563, 42, 21147, 20377, 5853, 14883, 13563, 44, 21147, 20377, 5853, 14883, 13563, 46, 21147, 20377, 5853, 14883, 13563, 48, 21147, 20377, 5853, 14883, 13563, 50, 21147, 20377, 5853, 14883, 13563, 440, 21147, 20377, 5853, 14883, 13563, 472, 21147, 20377, 5853, 14883, 13563, 536, 21147, 20377, 5853, 14883, 13563, 724, 21147, 20377, 5853, 14883, 13563, 1048, 21147, 20377, 5853, 14883, 13563, 1326, 21147, 20377, 5853, 14883, 13563, 2680, 21147, 20377, 5853, 14883, 13563, 2722, 21147, 20377, 5853, 14883, 13563, 2914, 21147, 20377, 5853, 14883, 13563, 3216, 21147, 20377, 5853, 14883, 13563, 5816, 21147, 20377, 5853, 14883, 13563, 7438, 21147, 20377, 5853, 14883, 13563, 10902, 21147, 20377, 5853, 14883, 13563, 11436, 21147, 20377, 5853, 14883, 13563, 11888, 21147, 20377, 5853, 14883, 13563, 12085, 13530, 21147, 20377, 5853, 14883, 13563, 12156, 21147, 20377, 5853, 14883, 13563, 12434, 21147, 20377, 5853, 14883, 13563, 12528, 21147, 20377, 5853, 14883, 13563, 13144, 21147, 20377, 5853, 14883, 13563, 13530, 21147, 20377, 5853, 14883, 13563, 13718, 21147, 20377, 5853, 14883, 13563, 16376, 21147, 20377, 5853, 14883, 13563, 16926, 21147, 20377, 5853, 14883, 13563, 17460, 21147, 20377, 5853, 14883, 13719, 15672, 21147, 20377, 5853, 14883, 16111, 0, 21147, 20377, 5853, 14883, 16111, 2, 21147, 20377, 5853, 14883, 16111, 4, 21147, 20377, 5853, 14883, 16111, 6, 21147, 20377, 5853, 14883, 16111, 8, 21147, 20377, 5853, 14883, 16111, 10, 21147, 20377, 5853, 14883, 16111, 12, 21147, 20377, 5853, 14883, 16111, 14, 21147, 20377, 5853, 14883, 16111, 16, 21147, 20377, 5853, 14883, 16111, 18, 21147, 20377, 5853, 14883, 16111, 20, 21147, 20377, 5853, 14883, 16111, 22, 21147, 20377, 5853, 14883, 16111, 24, 21147, 20377, 5853, 14883, 16111, 26, 21147, 20377, 5853, 14883, 16111, 28, 21147, 20377, 5853, 14883, 16111, 30, 21147, 20377, 5853, 14883, 16111, 32, 21147, 20377, 5853, 14883, 16111, 34, 21147, 20377, 5853, 14883, 16111, 36, 21147, 20377, 5853, 14883, 16111, 38, 21147, 20377, 5853, 14883, 16111, 40, 21147, 20377, 5853, 14883, 16111, 42, 21147, 20377, 5853, 14883, 16111, 44, 21147, 20377, 5853, 14883, 16111, 46, 21147, 20377, 5853, 14883, 16111, 48, 21147, 20377, 5853, 14883, 16111, 50, 21147, 20377, 5853, 14883, 16111, 440, 21147, 20377, 5853, 14883, 16111, 472, 21147, 20377, 5853, 14883, 16111, 536, 21147, 20377, 5853, 14883, 16111, 724, 21147, 20377, 5853, 14883, 16111, 1048, 21147, 20377, 5853, 14883, 16111, 1326, 21147, 20377, 5853, 14883, 16111, 2680, 21147, 20377, 5853, 14883, 16111, 2722, 21147, 20377, 5853, 14883, 16111, 2914, 21147, 20377, 5853, 14883, 16111, 3216, 21147, 20377, 5853, 14883, 16111, 5816, 21147, 20377, 5853, 14883, 16111, 7438, 21147, 20377, 5853, 14883, 16111, 10902, 21147, 20377, 5853, 14883, 16111, 11436, 21147, 20377, 5853, 14883, 16111, 11888, 21147, 20377, 5853, 14883, 16111, 12156, 21147, 20377, 5853, 14883, 16111, 12434, 21147, 20377, 5853, 14883, 16111, 12528, 21147, 20377, 5853, 14883, 16111, 13144, 21147, 20377, 5853, 14883, 16111, 13530, 21147, 20377, 5853, 14883, 16111, 13718, 21147, 20377, 5853, 14883, 16111, 13719, 15672, 21147, 20377, 5853, 14883, 16111, 16376, 21147, 20377, 5853, 14883, 16111, 16926, 21147, 20377, 5853, 14883, 16111, 17460, 21147, 20377, 5853, 14883, 16377, 15672, 21147, 20377, 5853, 14883, 16987, 21048, 21147, 20377, 5853, 16111, 0, 21147, 20377, 5853, 16111, 2, 21147, 20377, 5853, 16111, 4, 21147, 20377, 5853, 16111, 6, 21147, 20377, 5853, 16111, 8, 21147, 20377, 5853, 16111, 10, 21147, 20377, 5853, 16111, 12, 21147, 20377, 5853, 16111, 14, 21147, 20377, 5853, 16111, 16, 21147, 20377, 5853, 16111, 18, 21147, 20377, 5853, 16111, 20, 21147, 20377, 5853, 16111, 22, 21147, 20377, 5853, 16111, 24, 21147, 20377, 5853, 16111, 26, 21147, 20377, 5853, 16111, 28, 21147, 20377, 5853, 16111, 30, 21147, 20377, 5853, 16111, 32, 21147, 20377, 5853, 16111, 34, 21147, 20377, 5853, 16111, 36, 21147, 20377, 5853, 16111, 38, 21147, 20377, 5853, 16111, 40, 21147, 20377, 5853, 16111, 42, 21147, 20377, 5853, 16111, 44, 21147, 20377, 5853, 16111, 46, 21147, 20377, 5853, 16111, 48, 21147, 20377, 5853, 16111, 50, 21147, 20377, 5853, 16111, 440, 21147, 20377, 5853, 16111, 472, 21147, 20377, 5853, 16111, 536, 21147, 20377, 5853, 16111, 724, 21147, 20377, 5853, 16111, 1048, 21147, 20377, 5853, 16111, 1326, 21147, 20377, 5853, 16111, 2680, 21147, 20377, 5853, 16111, 2722, 21147, 20377, 5853, 16111, 2914, 21147, 20377, 5853, 16111, 3216, 21147, 20377, 5853, 16111, 5816, 21147, 20377, 5853, 16111, 7438, 21147, 20377, 5853, 16111, 10902, 21147, 20377, 5853, 16111, 11436, 21147, 20377, 5853, 16111, 11888, 21147, 20377, 5853, 16111, 12156, 21147, 20377, 5853, 16111, 12434, 21147, 20377, 5853, 16111, 12528, 21147, 20377, 5853, 16111, 13144, 21147, 20377, 5853, 16111, 13530, 21147, 20377, 5853, 16111, 13718, 21147, 20377, 5853, 16111, 13719, 15672, 21147, 20377, 5853, 16111, 16376, 21147, 20377, 5853, 16111, 16926, 21147, 20377, 5853, 16111, 17460, 21147, 20377, 5853, 16377, 15672, 21147, 20377, 5853, 16987, 21048, 21147, 20377, 11905, 2610, 21147, 20377, 11905, 3076, 21147, 20377, 11905, 3356, 21147, 20377, 11905, 6756, 21147, 20377, 11905, 6778, 21147, 20377, 11905, 8780, 21147, 20377, 11905, 10900, 21147, 20377, 11905, 11978, 21147, 20377, 11905, 13450, 21147, 20377, 11905, 13736, 21147, 20377, 13563, 0, 21147, 20377, 13563, 2, 21147, 20377, 13563, 4, 21147, 20377, 13563, 6, 21147, 20377, 13563, 8, 21147, 20377, 13563, 10, 21147, 20377, 13563, 12, 21147, 20377, 13563, 14, 21147, 20377, 13563, 16, 21147, 20377, 13563, 18, 21147, 20377, 13563, 20, 21147, 20377, 13563, 22, 21147, 20377, 13563, 24, 21147, 20377, 13563, 26, 21147, 20377, 13563, 28, 21147, 20377, 13563, 30, 21147, 20377, 13563, 32, 21147, 20377, 13563, 34, 21147, 20377, 13563, 36, 21147, 20377, 13563, 38, 21147, 20377, 13563, 40, 21147, 20377, 13563, 42, 21147, 20377, 13563, 44, 21147, 20377, 13563, 46, 21147, 20377, 13563, 48, 21147, 20377, 13563, 50, 21147, 20377, 14883, 13563, 0, 21147, 20377, 14883, 13563, 2, 21147, 20377, 14883, 13563, 4, 21147, 20377, 14883, 13563, 6, 21147, 20377, 14883, 13563, 8, 21147, 20377, 14883, 13563, 10, 21147, 20377, 14883, 13563, 12, 21147, 20377, 14883, 13563, 14, 21147, 20377, 14883, 13563, 16, 21147, 20377, 14883, 13563, 18, 21147, 20377, 14883, 13563, 20, 21147, 20377, 14883, 13563, 22, 21147, 20377, 14883, 13563, 24, 21147, 20377, 14883, 13563, 26, 21147, 20377, 14883, 13563, 28, 21147, 20377, 14883, 13563, 30, 21147, 20377, 14883, 13563, 32, 21147, 20377, 14883, 13563, 34, 21147, 20377, 14883, 13563, 36, 21147, 20377, 14883, 13563, 38, 21147, 20377, 14883, 13563, 40, 21147, 20377, 14883, 13563, 42, 21147, 20377, 14883, 13563, 44, 21147, 20377, 14883, 13563, 46, 21147, 20377, 14883, 13563, 48, 21147, 20377, 14883, 13563, 50, 21147, 20377, 14883, 16111, 0, 21147, 20377, 14883, 16111, 2, 21147, 20377, 14883, 16111, 4, 21147, 20377, 14883, 16111, 6, 21147, 20377, 14883, 16111, 8, 21147, 20377, 14883, 16111, 10, 21147, 20377, 14883, 16111, 12, 21147, 20377, 14883, 16111, 14, 21147, 20377, 14883, 16111, 16, 21147, 20377, 14883, 16111, 18, 21147, 20377, 14883, 16111, 20, 21147, 20377, 14883, 16111, 22, 21147, 20377, 14883, 16111, 24, 21147, 20377, 14883, 16111, 26, 21147, 20377, 14883, 16111, 28, 21147, 20377, 14883, 16111, 30, 21147, 20377, 14883, 16111, 32, 21147, 20377, 14883, 16111, 34, 21147, 20377, 14883, 16111, 36, 21147, 20377, 14883, 16111, 38, 21147, 20377, 14883, 16111, 40, 21147, 20377, 14883, 16111, 42, 21147, 20377, 14883, 16111, 44, 21147, 20377, 14883, 16111, 46, 21147, 20377, 14883, 16111, 48, 21147, 20377, 14883, 16111, 50, 21147, 20377, 16111, 0, 21147, 20377, 16111, 2, 21147, 20377, 16111, 4, 21147, 20377, 16111, 6, 21147, 20377, 16111, 8, 21147, 20377, 16111, 10, 21147, 20377, 16111, 12, 21147, 20377, 16111, 14, 21147, 20377, 16111, 16, 21147, 20377, 16111, 18, 21147, 20377, 16111, 20, 21147, 20377, 16111, 22, 21147, 20377, 16111, 24, 21147, 20377, 16111, 26, 21147, 20377, 16111, 28, 21147, 20377, 16111, 30, 21147, 20377, 16111, 32, 21147, 20377, 16111, 34, 21147, 20377, 16111, 36, 21147, 20377, 16111, 38, 21147, 20377, 16111, 40, 21147, 20377, 16111, 42, 21147, 20377, 16111, 44, 21147, 20377, 16111, 46, 21147, 20377, 16111, 48, 21147, 20377, 16111, 50, 21147, 22819, 11905, 2610, 21147, 22819, 11905, 3076, 21147, 22819, 11905, 3356, 21147, 22819, 11905, 6756, 21147, 22819, 11905, 6778, 21147, 22819, 11905, 8780, 21147, 22819, 11905, 10900, 21147, 22819, 11905, 11978, 21147, 22819, 11905, 13450, 21147, 22819, 11905, 13736, 21147, 22819, 13563, 0, 21147, 22819, 13563, 2, 21147, 22819, 13563, 4, 21147, 22819, 13563, 6, 21147, 22819, 13563, 8, 21147, 22819, 13563, 10, 21147, 22819, 13563, 12, 21147, 22819, 13563, 14, 21147, 22819, 13563, 16, 21147, 22819, 13563, 18, 21147, 22819, 13563, 20, 21147, 22819, 13563, 22, 21147, 22819, 13563, 24, 21147, 22819, 13563, 26, 21147, 22819, 13563, 28, 21147, 22819, 13563, 30, 21147, 22819, 13563, 32, 21147, 22819, 13563, 34, 21147, 22819, 13563, 36, 21147, 22819, 13563, 38, 21147, 22819, 13563, 40, 21147, 22819, 13563, 42, 21147, 22819, 13563, 44, 21147, 22819, 13563, 46, 21147, 22819, 13563, 48, 21147, 22819, 13563, 50, 21147, 22819, 16111, 0, 21147, 22819, 16111, 2, 21147, 22819, 16111, 6, 21147, 22819, 16111, 8, 21147, 22819, 16111, 10, 21147, 22819, 16111, 12, 21147, 22819, 16111, 16, 21147, 22819, 16111, 18, 21147, 22819, 16111, 20, 21147, 22819, 16111, 22, 21147, 22819, 16111, 24, 21147, 22819, 16111, 28, 21147, 22819, 16111, 36, 21147, 22819, 16111, 38, 21147, 22819, 16111, 40, 21147, 22819, 16111, 42, 21147, 22819, 16111, 44, 21147, 22819, 16111, 46, 21147, 22819, 16111, 48, 21165, 14856, 21177, 10096, 21179, 6777, 1397, 18847, 201, 6286, 21179, 6777, 1397, 18847, 203, 6286, 21179, 6777, 1397, 18847, 2175, 7854, 21179, 6777, 1397, 18847, 3357, 1217, 14984, 21179, 6777, 1397, 18847, 7817, 11447, 16088, 21179, 6777, 1397, 18847, 7817, 11571, 20217, 16088, 21179, 6777, 1397, 18847, 7817, 11779, 16088, 21179, 6777, 1397, 18847, 7817, 14049, 14519, 16088, 21179, 6777, 1397, 18847, 7817, 14049, 20217, 16088, 21179, 6777, 1397, 18847, 7817, 14519, 16088, 21179, 6777, 1397, 18847, 7817, 14625, 11447, 16088, 21179, 6777, 1397, 18847, 7817, 15621, 16088, 21179, 6777, 1397, 18847, 7817, 18763, 13483, 16088, 21179, 6777, 1397, 18847, 7817, 20846, 21179, 6777, 1397, 18847, 10623, 2175, 7854, 21179, 6777, 1397, 18847, 11756, 21179, 6777, 1397, 18847, 11762, 21179, 6777, 1397, 18847, 13341, 11447, 16088, 21179, 6777, 1397, 18847, 13341, 11571, 20217, 16088, 21179, 6777, 1397, 18847, 13341, 11779, 16088, 21179, 6777, 1397, 18847, 13341, 14049, 14519, 16088, 21179, 6777, 1397, 18847, 13341, 14049, 20217, 16088, 21179, 6777, 1397, 18847, 13341, 14049, 20217, 16092, 21179, 6777, 1397, 18847, 13341, 14519, 16088, 21179, 6777, 1397, 18847, 13341, 14625, 11447, 16088, 21179, 6777, 1397, 18847, 13341, 15621, 16088, 21179, 6777, 1397, 18847, 13341, 18763, 13483, 16088, 21179, 6777, 1397, 18847, 13341, 20846, 21179, 6777, 1397, 18847, 18511, 8320, 21179, 6777, 1397, 18847, 19614, 21179, 6777, 1397, 18847, 20181, 18016, 21179, 6777, 1397, 18847, 20685, 8320, 21179, 6777, 1397, 18847, 20727, 6793, 9956, 21179, 6777, 1397, 18847, 20727, 11762, 21181, 634, 21189, 17476, 21195, 6752, 21195, 15667, 9854, 21195, 15667, 9855, 10641, 6430, 21195, 17631, 18033, 9854, 21197, 20197, 19516, 21199, 14049, 20375, 11476, 21202, 21231, 6793, 9956, 21234, 21245, 13582, 21248, 21269, 20375, 11476, 21275, 6718, 21279, 3293, 20385, 11476, 21279, 9171, 14487, 11476, 21279, 14497, 14487, 11476, 21279, 14753, 14487, 11476, 21279, 16179, 18176, 21279, 19215, 843, 17463, 9171, 14487, 14312, 21279, 20744, 21279, 23305, 3293, 18825, 11476, 21279, 23305, 7817, 18825, 11476, 21279, 23305, 9171, 14487, 11476, 21279, 23305, 13341, 18825, 11476, 21279, 23305, 14393, 18825, 11476, 21281, 987, 2511, 17585, 12005, 634, 21281, 12005, 505, 12005, 634, 21281, 12005, 634, 21281, 12005, 635, 505, 3245, 12383, 484, 22815, 19819, 15672, 22819, 12787, 19674, 22819, 13563, 536, 22819, 13563, 12156, 22819, 14883, 13563, 6, 22819, 14883, 13563, 8, 22819, 14883, 13563, 16, 22819, 14883, 13563, 18, 22819, 14883, 16111, 6, 22819, 16111, 4, 22819, 16111, 14, 22819, 16111, 26, 22819, 16111, 30, 22819, 16111, 32, 22819, 16111, 34, 22819, 16111, 50, 22819, 16111, 536, 22819, 16111, 12156, 22821, 2897, 18774, 22821, 13563, 2897, 18774, 22821, 18775, 10641, 7817, 7123, 11570, 22821, 18775, 10641, 13341, 7123, 11570, 22831, 9854, 22835, 12005, 634, 22835, 20127, 634, 22849, 16957, 14999, 270, 22849, 16957, 14999, 528, 22849, 16957, 14999, 2536, 22849, 16957, 14999, 3220, 22849, 16957, 14999, 5818, 22849, 16957, 14999, 7156, 22849, 16957, 14999, 7596, 22849, 16957, 14999, 9776, 22849, 16957, 14999, 10126, 22849, 16957, 14999, 10810, 22849, 16957, 14999, 11424, 22849, 16957, 14999, 12204, 22849, 16957, 14999, 13400, 22849, 16957, 14999, 14196, 22849, 16957, 14999, 14546, 22849, 16957, 14999, 14978, 22849, 16957, 14999, 15474, 22849, 16957, 14999, 18300, 22849, 16957, 14999, 22956, 22849, 16957, 15233, 2610, 22849, 16957, 15233, 2611, 16502, 22849, 16957, 15233, 2611, 18744, 22849, 16957, 15233, 3232, 22849, 16957, 15233, 3356, 22849, 16957, 15233, 6778, 22849, 16957, 15233, 13736, 22849, 16957, 15233, 15820, 22849, 18435, 14999, 270, 22849, 18435, 14999, 528, 22849, 18435, 14999, 2280, 22849, 18435, 14999, 2536, 22849, 18435, 14999, 3220, 22849, 18435, 14999, 3532, 22849, 18435, 14999, 5312, 22849, 18435, 14999, 5818, 22849, 18435, 14999, 7156, 22849, 18435, 14999, 7596, 22849, 18435, 14999, 9372, 22849, 18435, 14999, 9486, 22849, 18435, 14999, 9776, 22849, 18435, 14999, 10126, 22849, 18435, 14999, 10810, 22849, 18435, 14999, 11424, 22849, 18435, 14999, 12204, 22849, 18435, 14999, 13400, 22849, 18435, 14999, 14196, 22849, 18435, 14999, 14546, 22849, 18435, 14999, 14978, 22849, 18435, 14999, 15474, 22849, 18435, 15233, 2610, 22849, 18435, 15233, 2611, 16502, 22849, 18435, 15233, 2611, 18744, 22849, 18435, 15233, 3232, 22849, 18435, 15233, 3356, 22849, 18435, 15233, 6778, 22849, 18435, 15233, 13736, 22849, 18435, 15233, 15820, 22867, 11447, 16088, 22867, 14537, 11447, 16088, 22867, 14625, 11447, 19557, 8320, 22867, 20229, 12212, 22869, 8320, 22869, 16534, 22869, 18404, 22869, 19224, 22875, 9854, 22885, 20375, 11476, 22891, 11905, 2610, 22891, 11905, 3076, 22891, 11905, 3356, 22891, 11905, 6756, 22891, 11905, 6778, 22891, 11905, 8780, 22891, 11905, 11978, 22891, 11905, 13450, 22891, 11905, 13736, 22891, 12541, 13563, 14999, 0, 22891, 12541, 13563, 14999, 2, 22891, 12541, 13563, 14999, 4, 22891, 12541, 13563, 14999, 6, 22891, 12541, 13563, 14999, 8, 22891, 12541, 13563, 14999, 10, 22891, 12541, 13563, 14999, 12, 22891, 12541, 13563, 14999, 14, 22891, 12541, 13563, 14999, 16, 22891, 12541, 13563, 14999, 18, 22891, 12541, 13563, 14999, 20, 22891, 12541, 13563, 14999, 22, 22891, 12541, 13563, 14999, 24, 22891, 12541, 13563, 14999, 26, 22891, 12541, 13563, 14999, 28, 22891, 12541, 13563, 14999, 30, 22891, 12541, 13563, 14999, 32, 22891, 12541, 13563, 14999, 34, 22891, 12541, 13563, 14999, 36, 22891, 12541, 13563, 14999, 38, 22891, 12541, 13563, 14999, 40, 22891, 12541, 13563, 14999, 42, 22891, 12541, 13563, 14999, 44, 22891, 12541, 13563, 14999, 46, 22891, 12541, 13563, 14999, 48, 22891, 12541, 13563, 14999, 50, 22891, 12541, 16111, 14999, 0, 22891, 12541, 16111, 14999, 2, 22891, 12541, 16111, 14999, 4, 22891, 12541, 16111, 14999, 6, 22891, 12541, 16111, 14999, 8, 22891, 12541, 16111, 14999, 10, 22891, 12541, 16111, 14999, 12, 22891, 12541, 16111, 14999, 14, 22891, 12541, 16111, 14999, 16, 22891, 12541, 16111, 14999, 18, 22891, 12541, 16111, 14999, 20, 22891, 12541, 16111, 14999, 22, 22891, 12541, 16111, 14999, 24, 22891, 12541, 16111, 14999, 26, 22891, 12541, 16111, 14999, 28, 22891, 12541, 16111, 14999, 30, 22891, 12541, 16111, 14999, 32, 22891, 12541, 16111, 14999, 34, 22891, 12541, 16111, 14999, 36, 22891, 12541, 16111, 14999, 38, 22891, 12541, 16111, 14999, 40, 22891, 12541, 16111, 14999, 42, 22891, 12541, 16111, 14999, 44, 22891, 12541, 16111, 14999, 46, 22891, 12541, 16111, 14999, 48, 22891, 12541, 16111, 14999, 50, 22891, 14819, 9866, 22891, 14819, 9867, 0, 22891, 14819, 11732, 22891, 14819, 11733, 0, 22891, 14819, 11733, 40, 22891, 14819, 12280, 22891, 14819, 12281, 0, 22891, 14819, 12376, 22891, 14819, 12377, 0, 22891, 14819, 12732, 22891, 14819, 12733, 0, 22891, 14819, 12886, 22891, 14819, 12887, 0, 22891, 14819, 13232, 22891, 14819, 13233, 0, 22891, 14819, 13336, 22891, 14819, 13337, 0, 22891, 14819, 14944, 22891, 14819, 14945, 0, 22891, 14819, 15748, 22891, 14819, 15749, 0, 22891, 14819, 16142, 22891, 14819, 16143, 0, 22891, 14819, 16576, 22891, 14819, 16577, 0, 22891, 14819, 17024, 22891, 14819, 17025, 0, 22891, 14819, 17362, 22891, 14819, 17363, 0, 22891, 14955, 18979, 29, 286, 22891, 14955, 18979, 13136, 22891, 15233, 3232, 22891, 15233, 14638, 22891, 15233, 15818, 22891, 15233, 15820, 22891, 15233, 16400, 22891, 15233, 17232, 22891, 15233, 18010, 22891, 15233, 18086, 22891, 15233, 18362, 22891, 15233, 18742, 22891, 15233, 19622, 22891, 19341, 2610, 22891, 19341, 3076, 22891, 19341, 3136, 22891, 19341, 3232, 22891, 19341, 3356, 22891, 19341, 5962, 22891, 19341, 6746, 22891, 19341, 6756, 22891, 19341, 6778, 22891, 19341, 7134, 22891, 19341, 8460, 22891, 19341, 8596, 22891, 19341, 8780, 22891, 19341, 9488, 22891, 19341, 9720, 22891, 19341, 10644, 22891, 19341, 11968, 22891, 19341, 11978, 22891, 19341, 12518, 22891, 19341, 12700, 22891, 19341, 13322, 22891, 19341, 13450, 22891, 19341, 13626, 22891, 19341, 13634, 22891, 19341, 13736, 22891, 19341, 14032, 22891, 19341, 17250, 22891, 19341, 17264, 22891, 19341, 17596, 22891, 19341, 18052, 22891, 19341, 18536, 22891, 19341, 19258, 22891, 19341, 19578, 22891, 19341, 19680, 22891, 19341, 20116, 22891, 19341, 22978, 22894, 22895, 10641, 36, 22925, 8320, 22925, 16534, 22925, 18404, 22925, 19224, 22931, 15134, 22938, 22952, 22971, 12005, 634, 22973, 17642, 22983, 6718, 23096, 23111, 46, 23111, 9854, 23111, 9855, 317, 7817, 7123, 14486, 23111, 9855, 317, 13341, 7123, 14486, 23111, 9855, 317, 14625, 14486, 23111, 9855, 317, 18774, 23111, 9855, 10641, 1217, 11392, 23111, 9855, 10641, 18836, 23121, 11447, 16088, 23121, 14537, 11447, 16088, 23121, 14625, 11447, 19557, 8320, 23121, 20229, 12212, 23124, 23255, 12973, 6561, 11476, 23255, 13581, 6561, 11476, 23255, 20375, 11476, 23299, 20375, 11476, 23301, 17642, 23305, 20375, 11476, 23307, 20375, 11476, 23313, 11430, 23459, 14625, 14856, 23459, 15873, 13579, 8320, 23459, 19545, 13579, 8320, 23459, 20909, 13579, 8320, 23483, 15672, 23505, 17588, 23507, 13183, 15672, 23535, 14809, 15672, 23535, 14967, 15672, 23557, 15672, 23563, 15672, }; static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_name_to_index[29282] = { { 0x1CA1, 0 }, { 0x2526, 4 }, { 0x1EB0, 7 }, { 0x1E88, 12 }, { 0x24E1, 16 }, { 0x24E3, 21 }, { 0x24DB, 26 }, { 0x24DC, 29 }, { 0x25BF, 33 }, { 0x24E2, 37 }, { 0x24E4, 42 }, { 0x25BE, 47 }, { 0x257A, 51 }, { 0x257B, 55 }, { 0x2579, 59 }, { 0x2598, 63 }, { 0x1F6F, 67 }, { 0x6FEA, 69 }, { 0x1BC8, 73 }, { 0x1BB5, 75 }, { 0x1BB7, 77 }, { 0x1BC7, 79 }, { 0x1BB4, 81 }, { 0x1BB6, 83 }, { 0x6E59, 85 }, { 0x222E, 90 }, { 0x6FE6, 92 }, { 0x6E30, 95 }, { 0x6EAD, 98 }, { 0x6FE8, 100 }, { 0x6FEE, 103 }, { 0x6FF2, 105 }, { 0x6D87, 107 }, { 0x188E, 110 }, { 0x1893, 114 }, { 0x1867, 117 }, { 0x186C, 121 }, { 0x1868, 125 }, { 0x186B, 129 }, { 0x186A, 133 }, { 0x186F, 137 }, { 0x1866, 141 }, { 0x186E, 145 }, { 0x186D, 149 }, { 0x1869, 153 }, { 0x1891, 157 }, { 0x1872, 160 }, { 0x1874, 164 }, { 0x1871, 168 }, { 0x1887, 172 }, { 0x1885, 176 }, { 0x187C, 180 }, { 0x187E, 184 }, { 0x187B, 188 }, { 0x1870, 192 }, { 0x1884, 196 }, { 0x187A, 200 }, { 0x1889, 204 }, { 0x187F, 208 }, { 0x188B, 212 }, { 0x188D, 216 }, { 0x188C, 220 }, { 0x1880, 224 }, { 0x1881, 228 }, { 0x1883, 232 }, { 0x1877, 236 }, { 0x1876, 240 }, { 0x1878, 244 }, { 0x1879, 248 }, { 0x1873, 252 }, { 0x1886, 256 }, { 0x1888, 260 }, { 0x187D, 264 }, { 0x1875, 268 }, { 0x188A, 272 }, { 0x1882, 276 }, { 0x188F, 280 }, { 0x1892, 284 }, { 0x1890, 287 }, { 0x1895, 291 }, { 0x1894, 296 }, { 0x6E84, 300 }, { 0x6E56, 302 }, { 0x2321, 311 }, { 0x6D3D, 315 }, { 0x0000, 316 }, { 0x24AB, 317 }, { 0x24A7, 324 }, { 0x24A6, 331 }, { 0x24A9, 338 }, { 0x1D1E, 345 }, { 0x1D31, 348 }, { 0x2667, 353 }, { 0x1D7C, 357 }, { 0x1D5E, 361 }, { 0x7138, 365 }, { 0x26BF, 369 }, { 0x24D8, 373 }, { 0x1E2E, 376 }, { 0x2339, 378 }, { 0x2517, 383 }, { 0x1E79, 387 }, { 0x1E8C, 391 }, { 0x270F, 393 }, { 0x1EAD, 399 }, { 0x1C14, 405 }, { 0x3367, 406 }, { 0x3364, 409 }, { 0x334C, 412 }, { 0x335E, 415 }, { 0x3371, 418 }, { 0x333C, 421 }, { 0x3343, 424 }, { 0x3354, 427 }, { 0x3353, 430 }, { 0x3363, 433 }, { 0x3348, 436 }, { 0x335D, 439 }, { 0x3350, 442 }, { 0x336E, 445 }, { 0x3369, 448 }, { 0x333F, 451 }, { 0x334E, 454 }, { 0x3342, 457 }, { 0x3361, 460 }, { 0x3358, 463 }, { 0x3360, 466 }, { 0x333D, 469 }, { 0x3366, 472 }, { 0x3345, 475 }, { 0x3347, 478 }, { 0x3349, 481 }, { 0x3357, 484 }, { 0x333B, 487 }, { 0x335B, 490 }, { 0x3340, 493 }, { 0x334B, 496 }, { 0x335C, 499 }, { 0x335A, 502 }, { 0x3359, 505 }, { 0x3356, 508 }, { 0x334D, 511 }, { 0x336C, 514 }, { 0x3346, 517 }, { 0x3368, 520 }, { 0x334F, 523 }, { 0x3341, 526 }, { 0x3351, 529 }, { 0x3344, 532 }, { 0x336A, 535 }, { 0x334A, 538 }, { 0x3362, 541 }, { 0x3355, 544 }, { 0x3370, 547 }, { 0x333E, 550 }, { 0x3352, 553 }, { 0x335F, 556 }, { 0x336B, 559 }, { 0x336D, 562 }, { 0x3365, 565 }, { 0x336F, 568 }, { 0x2EB8, 571 }, { 0x2EC2, 574 }, { 0x2EB0, 577 }, { 0x2EBF, 580 }, { 0x2EB9, 583 }, { 0x2EB6, 586 }, { 0x2EB7, 589 }, { 0x2ECE, 592 }, { 0x2ED8, 595 }, { 0x2EC6, 598 }, { 0x2ED5, 601 }, { 0x2EDC, 604 }, { 0x2EE2, 607 }, { 0x3166, 610 }, { 0x3170, 613 }, { 0x315E, 616 }, { 0x316D, 619 }, { 0x3174, 622 }, { 0x317A, 625 }, { 0x2FB7, 628 }, { 0x2FC0, 631 }, { 0x2FB0, 634 }, { 0x2FBD, 637 }, { 0x2FC4, 640 }, { 0x2EC1, 643 }, { 0x2F81, 646 }, { 0x2F7D, 649 }, { 0x2F84, 652 }, { 0x2F88, 655 }, { 0x2F8E, 658 }, { 0x3092, 661 }, { 0x309E, 664 }, { 0x308A, 667 }, { 0x309A, 670 }, { 0x30A2, 673 }, { 0x3121, 676 }, { 0x312C, 679 }, { 0x3129, 682 }, { 0x2EB4, 685 }, { 0x2EB1, 688 }, { 0x2EAE, 691 }, { 0x2EAF, 694 }, { 0x3290, 697 }, { 0x329C, 700 }, { 0x32A0, 703 }, { 0x32A6, 706 }, { 0x30AF, 709 }, { 0x30BA, 712 }, { 0x30A8, 715 }, { 0x30B6, 718 }, { 0x30BE, 721 }, { 0x306F, 724 }, { 0x307A, 727 }, { 0x3067, 730 }, { 0x3077, 733 }, { 0x307E, 736 }, { 0x3084, 739 }, { 0x2F65, 742 }, { 0x2F70, 745 }, { 0x2F5E, 748 }, { 0x2F6D, 751 }, { 0x2F73, 754 }, { 0x2F79, 757 }, { 0x3033, 760 }, { 0x303D, 763 }, { 0x302D, 766 }, { 0x303A, 769 }, { 0x3041, 772 }, { 0x2EC0, 775 }, { 0x2EBD, 778 }, { 0x2EBE, 781 }, { 0x2EEF, 784 }, { 0x2EE8, 787 }, { 0x2EF6, 790 }, { 0x2EFA, 793 }, { 0x2F00, 796 }, { 0x32AC, 799 }, { 0x32B8, 802 }, { 0x32BC, 805 }, { 0x32C2, 808 }, { 0x3276, 811 }, { 0x3280, 814 }, { 0x327D, 817 }, { 0x3284, 820 }, { 0x328A, 823 }, { 0x31C0, 826 }, { 0x31CA, 829 }, { 0x31B9, 832 }, { 0x31C7, 835 }, { 0x31CE, 838 }, { 0x31D4, 841 }, { 0x2FD1, 844 }, { 0x2FDC, 847 }, { 0x2FCA, 850 }, { 0x2FD9, 853 }, { 0x2FE0, 856 }, { 0x2EBB, 859 }, { 0x2F9A, 862 }, { 0x2F92, 865 }, { 0x2F9E, 868 }, { 0x2FA4, 871 }, { 0x2FAA, 874 }, { 0x3130, 877 }, { 0x3139, 880 }, { 0x3136, 883 }, { 0x2EC3, 886 }, { 0x330D, 889 }, { 0x3317, 892 }, { 0x331B, 895 }, { 0x3321, 898 }, { 0x332D, 901 }, { 0x3331, 904 }, { 0x3337, 907 }, { 0x3144, 910 }, { 0x314E, 913 }, { 0x313D, 916 }, { 0x314B, 919 }, { 0x3152, 922 }, { 0x3158, 925 }, { 0x2ECF, 928 }, { 0x2ECC, 931 }, { 0x2ECD, 934 }, { 0x2F0E, 937 }, { 0x2F18, 940 }, { 0x2F06, 943 }, { 0x2F15, 946 }, { 0x2F1C, 949 }, { 0x2F22, 952 }, { 0x2ED9, 955 }, { 0x2ED7, 958 }, { 0x2ECA, 961 }, { 0x2EC7, 964 }, { 0x2EC4, 967 }, { 0x2EC5, 970 }, { 0x2ED6, 973 }, { 0x2ED3, 976 }, { 0x2ED4, 979 }, { 0x2ED1, 982 }, { 0x2EDD, 985 }, { 0x2EDF, 988 }, { 0x2EDA, 991 }, { 0x2EDB, 994 }, { 0x2EE3, 997 }, { 0x2EE5, 1000 }, { 0x2EE0, 1003 }, { 0x2EE1, 1006 }, { 0x3167, 1009 }, { 0x3164, 1012 }, { 0x3165, 1015 }, { 0x3171, 1018 }, { 0x316F, 1021 }, { 0x3211, 1024 }, { 0x321D, 1027 }, { 0x3219, 1030 }, { 0x3220, 1033 }, { 0x3226, 1036 }, { 0x3162, 1039 }, { 0x315F, 1042 }, { 0x315C, 1045 }, { 0x315D, 1048 }, { 0x316E, 1051 }, { 0x316B, 1054 }, { 0x316C, 1057 }, { 0x3169, 1060 }, { 0x3175, 1063 }, { 0x3177, 1066 }, { 0x3172, 1069 }, { 0x3173, 1072 }, { 0x317B, 1075 }, { 0x317D, 1078 }, { 0x3178, 1081 }, { 0x3179, 1084 }, { 0x2FB8, 1087 }, { 0x2FB5, 1090 }, { 0x2FB6, 1093 }, { 0x2FED, 1096 }, { 0x2FF7, 1099 }, { 0x2FE6, 1102 }, { 0x2FF4, 1105 }, { 0x2FFB, 1108 }, { 0x2FC1, 1111 }, { 0x2FBF, 1114 }, { 0x2FB3, 1117 }, { 0x2FB1, 1120 }, { 0x2FAE, 1123 }, { 0x2FAF, 1126 }, { 0x2FBE, 1129 }, { 0x2FBB, 1132 }, { 0x2FBC, 1135 }, { 0x2FBA, 1138 }, { 0x2FC5, 1141 }, { 0x2FC7, 1144 }, { 0x2FC2, 1147 }, { 0x2FC3, 1150 }, { 0x2F82, 1153 }, { 0x2F7F, 1156 }, { 0x2F80, 1159 }, { 0x2F7E, 1162 }, { 0x2F7B, 1165 }, { 0x2F7C, 1168 }, { 0x2F85, 1171 }, { 0x2F83, 1174 }, { 0x2F89, 1177 }, { 0x2F8B, 1180 }, { 0x2F86, 1183 }, { 0x2F87, 1186 }, { 0x2F8F, 1189 }, { 0x2F8C, 1192 }, { 0x2F8D, 1195 }, { 0x3093, 1198 }, { 0x3090, 1201 }, { 0x3091, 1204 }, { 0x309F, 1207 }, { 0x309C, 1210 }, { 0x309D, 1213 }, { 0x30CA, 1216 }, { 0x30D6, 1219 }, { 0x30C4, 1222 }, { 0x30D2, 1225 }, { 0x30DA, 1228 }, { 0x308E, 1231 }, { 0x308B, 1234 }, { 0x3088, 1237 }, { 0x3089, 1240 }, { 0x309B, 1243 }, { 0x3098, 1246 }, { 0x3099, 1249 }, { 0x3096, 1252 }, { 0x30A3, 1255 }, { 0x30A5, 1258 }, { 0x30A0, 1261 }, { 0x30A1, 1264 }, { 0x3122, 1267 }, { 0x311F, 1270 }, { 0x3120, 1273 }, { 0x312D, 1276 }, { 0x312B, 1279 }, { 0x311E, 1282 }, { 0x311C, 1285 }, { 0x304E, 1288 }, { 0x3057, 1291 }, { 0x3047, 1294 }, { 0x3054, 1297 }, { 0x305B, 1300 }, { 0x3061, 1303 }, { 0x2F48, 1306 }, { 0x2F41, 1309 }, { 0x2F4F, 1312 }, { 0x2F53, 1315 }, { 0x2F58, 1318 }, { 0x3020, 1321 }, { 0x3028, 1324 }, { 0x3018, 1327 }, { 0x312A, 1330 }, { 0x3127, 1333 }, { 0x3128, 1336 }, { 0x3125, 1339 }, { 0x30FE, 1342 }, { 0x3109, 1345 }, { 0x30F6, 1348 }, { 0x3106, 1351 }, { 0x2EB5, 1354 }, { 0x2EB2, 1357 }, { 0x2EB3, 1360 }, { 0x3294, 1363 }, { 0x3291, 1366 }, { 0x328E, 1369 }, { 0x328F, 1372 }, { 0x32C8, 1375 }, { 0x32D3, 1378 }, { 0x32D7, 1381 }, { 0x32DD, 1384 }, { 0x329D, 1387 }, { 0x329A, 1390 }, { 0x329B, 1393 }, { 0x3298, 1396 }, { 0x32A1, 1399 }, { 0x32A3, 1402 }, { 0x329E, 1405 }, { 0x329F, 1408 }, { 0x32A7, 1411 }, { 0x32A9, 1414 }, { 0x32A4, 1417 }, { 0x32A5, 1420 }, { 0x30B0, 1423 }, { 0x30AD, 1426 }, { 0x30AE, 1429 }, { 0x30BB, 1432 }, { 0x30B8, 1435 }, { 0x30B9, 1438 }, { 0x30AB, 1441 }, { 0x30A9, 1444 }, { 0x30A6, 1447 }, { 0x30A7, 1450 }, { 0x30B7, 1453 }, { 0x30B4, 1456 }, { 0x30B5, 1459 }, { 0x30B2, 1462 }, { 0x30BF, 1465 }, { 0x30C1, 1468 }, { 0x30BC, 1471 }, { 0x30BD, 1474 }, { 0x3070, 1477 }, { 0x306D, 1480 }, { 0x306E, 1483 }, { 0x307B, 1486 }, { 0x3079, 1489 }, { 0x306B, 1492 }, { 0x3068, 1495 }, { 0x3065, 1498 }, { 0x3066, 1501 }, { 0x3078, 1504 }, { 0x3075, 1507 }, { 0x3076, 1510 }, { 0x3073, 1513 }, { 0x307F, 1516 }, { 0x3081, 1519 }, { 0x307C, 1522 }, { 0x307D, 1525 }, { 0x3085, 1528 }, { 0x3087, 1531 }, { 0x3082, 1534 }, { 0x3083, 1537 }, { 0x2F66, 1540 }, { 0x2F63, 1543 }, { 0x2F64, 1546 }, { 0x2F6F, 1549 }, { 0x30E2, 1552 }, { 0x30EC, 1555 }, { 0x30E9, 1558 }, { 0x30F0, 1561 }, { 0x2F61, 1564 }, { 0x2F5F, 1567 }, { 0x2F5C, 1570 }, { 0x2F5D, 1573 }, { 0x2F6E, 1576 }, { 0x2F6B, 1579 }, { 0x2F6C, 1582 }, { 0x2F69, 1585 }, { 0x2F74, 1588 }, { 0x2F76, 1591 }, { 0x2F71, 1594 }, { 0x2F72, 1597 }, { 0x2F7A, 1600 }, { 0x2F77, 1603 }, { 0x2F78, 1606 }, { 0x3034, 1609 }, { 0x3032, 1612 }, { 0x2F2D, 1615 }, { 0x2F26, 1618 }, { 0x2F31, 1621 }, { 0x2F35, 1624 }, { 0x2F3B, 1627 }, { 0x3007, 1630 }, { 0x300E, 1633 }, { 0x3001, 1636 }, { 0x300B, 1639 }, { 0x3012, 1642 }, { 0x303E, 1645 }, { 0x303C, 1648 }, { 0x3110, 1651 }, { 0x311A, 1654 }, { 0x3117, 1657 }, { 0x3030, 1660 }, { 0x302E, 1663 }, { 0x302B, 1666 }, { 0x302C, 1669 }, { 0x32E1, 1672 }, { 0x32EB, 1675 }, { 0x32EE, 1678 }, { 0x32F4, 1681 }, { 0x303B, 1684 }, { 0x3038, 1687 }, { 0x3039, 1690 }, { 0x3244, 1693 }, { 0x324B, 1696 }, { 0x3247, 1699 }, { 0x324F, 1702 }, { 0x3255, 1705 }, { 0x3036, 1708 }, { 0x3042, 1711 }, { 0x3044, 1714 }, { 0x303F, 1717 }, { 0x3040, 1720 }, { 0x32FA, 1723 }, { 0x3305, 1726 }, { 0x3309, 1729 }, { 0x31A4, 1732 }, { 0x31AB, 1735 }, { 0x319D, 1738 }, { 0x31AD, 1741 }, { 0x31B3, 1744 }, { 0x2EF0, 1747 }, { 0x2EED, 1750 }, { 0x2EEE, 1753 }, { 0x2EEB, 1756 }, { 0x2EE9, 1759 }, { 0x2EE6, 1762 }, { 0x2EE7, 1765 }, { 0x2EF7, 1768 }, { 0x2EF4, 1771 }, { 0x2EF5, 1774 }, { 0x2EF2, 1777 }, { 0x2EFB, 1780 }, { 0x2EFD, 1783 }, { 0x2EF8, 1786 }, { 0x2EF9, 1789 }, { 0x2F01, 1792 }, { 0x2F03, 1795 }, { 0x2EFE, 1798 }, { 0x2EFF, 1801 }, { 0x32B0, 1804 }, { 0x32AD, 1807 }, { 0x32AA, 1810 }, { 0x32AB, 1813 }, { 0x32B9, 1816 }, { 0x32B6, 1819 }, { 0x32B7, 1822 }, { 0x32B4, 1825 }, { 0x32BD, 1828 }, { 0x32BF, 1831 }, { 0x32BA, 1834 }, { 0x32BB, 1837 }, { 0x32C3, 1840 }, { 0x32C5, 1843 }, { 0x32C0, 1846 }, { 0x32C1, 1849 }, { 0x3277, 1852 }, { 0x3274, 1855 }, { 0x3275, 1858 }, { 0x3281, 1861 }, { 0x327F, 1864 }, { 0x327E, 1867 }, { 0x327B, 1870 }, { 0x327C, 1873 }, { 0x322B, 1876 }, { 0x3234, 1879 }, { 0x3230, 1882 }, { 0x3238, 1885 }, { 0x323E, 1888 }, { 0x3279, 1891 }, { 0x3285, 1894 }, { 0x3287, 1897 }, { 0x3282, 1900 }, { 0x3283, 1903 }, { 0x328B, 1906 }, { 0x328D, 1909 }, { 0x3288, 1912 }, { 0x3289, 1915 }, { 0x31C1, 1918 }, { 0x31BE, 1921 }, { 0x31BF, 1924 }, { 0x31CB, 1927 }, { 0x31C9, 1930 }, { 0x325B, 1933 }, { 0x3266, 1936 }, { 0x3262, 1939 }, { 0x326A, 1942 }, { 0x3270, 1945 }, { 0x31BC, 1948 }, { 0x31BA, 1951 }, { 0x31B7, 1954 }, { 0x31B8, 1957 }, { 0x31C8, 1960 }, { 0x31C5, 1963 }, { 0x31C6, 1966 }, { 0x31E1, 1969 }, { 0x31E8, 1972 }, { 0x31DA, 1975 }, { 0x31E5, 1978 }, { 0x31EC, 1981 }, { 0x31F0, 1984 }, { 0x31C3, 1987 }, { 0x31CF, 1990 }, { 0x31D1, 1993 }, { 0x31CC, 1996 }, { 0x31CD, 1999 }, { 0x31D5, 2002 }, { 0x31D7, 2005 }, { 0x31D2, 2008 }, { 0x31D3, 2011 }, { 0x2FD2, 2014 }, { 0x2FCF, 2017 }, { 0x2FD0, 2020 }, { 0x2FDD, 2023 }, { 0x2FDB, 2026 }, { 0x2FCD, 2029 }, { 0x2FCB, 2032 }, { 0x2FC8, 2035 }, { 0x2FC9, 2038 }, { 0x2FDA, 2041 }, { 0x2FD7, 2044 }, { 0x2FD8, 2047 }, { 0x2FD5, 2050 }, { 0x2FE1, 2053 }, { 0x2FE3, 2056 }, { 0x2FDE, 2059 }, { 0x2FDF, 2062 }, { 0x2EBC, 2065 }, { 0x2EBA, 2068 }, { 0x2F9B, 2071 }, { 0x2F98, 2074 }, { 0x2F99, 2077 }, { 0x2FA1, 2080 }, { 0x2FA0, 2083 }, { 0x2F96, 2086 }, { 0x2F93, 2089 }, { 0x2F90, 2092 }, { 0x2F91, 2095 }, { 0x2F9F, 2098 }, { 0x2F9C, 2101 }, { 0x2F9D, 2104 }, { 0x2FA5, 2107 }, { 0x2FA7, 2110 }, { 0x2FA2, 2113 }, { 0x2FA3, 2116 }, { 0x2FAB, 2119 }, { 0x2FAD, 2122 }, { 0x2FA8, 2125 }, { 0x2FA9, 2128 }, { 0x3131, 2131 }, { 0x312E, 2134 }, { 0x312F, 2137 }, { 0x313A, 2140 }, { 0x3138, 2143 }, { 0x3137, 2146 }, { 0x3135, 2149 }, { 0x3133, 2152 }, { 0x3311, 2155 }, { 0x330E, 2158 }, { 0x330B, 2161 }, { 0x330C, 2164 }, { 0x3318, 2167 }, { 0x3315, 2170 }, { 0x3316, 2173 }, { 0x3314, 2176 }, { 0x331C, 2179 }, { 0x331E, 2182 }, { 0x3319, 2185 }, { 0x331A, 2188 }, { 0x3325, 2191 }, { 0x3322, 2194 }, { 0x331F, 2197 }, { 0x3320, 2200 }, { 0x332E, 2203 }, { 0x332B, 2206 }, { 0x332C, 2209 }, { 0x3329, 2212 }, { 0x3332, 2215 }, { 0x3334, 2218 }, { 0x332F, 2221 }, { 0x3330, 2224 }, { 0x3338, 2227 }, { 0x333A, 2230 }, { 0x3335, 2233 }, { 0x3336, 2236 }, { 0x3145, 2239 }, { 0x3142, 2242 }, { 0x3143, 2245 }, { 0x314F, 2248 }, { 0x314D, 2251 }, { 0x31F6, 2254 }, { 0x3201, 2257 }, { 0x31FD, 2260 }, { 0x3205, 2263 }, { 0x320B, 2266 }, { 0x3140, 2269 }, { 0x313E, 2272 }, { 0x313B, 2275 }, { 0x313C, 2278 }, { 0x314C, 2281 }, { 0x3149, 2284 }, { 0x314A, 2287 }, { 0x3147, 2290 }, { 0x3153, 2293 }, { 0x3155, 2296 }, { 0x3150, 2299 }, { 0x3151, 2302 }, { 0x3159, 2305 }, { 0x315B, 2308 }, { 0x3156, 2311 }, { 0x3157, 2314 }, { 0x3188, 2317 }, { 0x318E, 2320 }, { 0x3180, 2323 }, { 0x318B, 2326 }, { 0x3191, 2329 }, { 0x3197, 2332 }, { 0x2F0F, 2335 }, { 0x2F0C, 2338 }, { 0x2F0D, 2341 }, { 0x2F19, 2344 }, { 0x2F17, 2347 }, { 0x2F0A, 2350 }, { 0x2F07, 2353 }, { 0x2F04, 2356 }, { 0x2F05, 2359 }, { 0x2F16, 2362 }, { 0x2F13, 2365 }, { 0x2F14, 2368 }, { 0x2F11, 2371 }, { 0x2F1D, 2374 }, { 0x2F1F, 2377 }, { 0x2F1A, 2380 }, { 0x2F1B, 2383 }, { 0x2F23, 2386 }, { 0x2F20, 2389 }, { 0x2F21, 2392 }, { 0x2ECB, 2395 }, { 0x2EC8, 2398 }, { 0x2EC9, 2401 }, { 0x2ED2, 2404 }, { 0x2ED0, 2407 }, { 0x2EDE, 2410 }, { 0x2EE4, 2413 }, { 0x3212, 2416 }, { 0x320F, 2419 }, { 0x3210, 2422 }, { 0x321E, 2425 }, { 0x321B, 2428 }, { 0x321C, 2431 }, { 0x321A, 2434 }, { 0x3217, 2437 }, { 0x3218, 2440 }, { 0x3215, 2443 }, { 0x3221, 2446 }, { 0x3223, 2449 }, { 0x321F, 2452 }, { 0x3227, 2455 }, { 0x3229, 2458 }, { 0x3224, 2461 }, { 0x3225, 2464 }, { 0x3163, 2467 }, { 0x3160, 2470 }, { 0x3161, 2473 }, { 0x316A, 2476 }, { 0x3168, 2479 }, { 0x3176, 2482 }, { 0x317C, 2485 }, { 0x2FEE, 2488 }, { 0x2FEB, 2491 }, { 0x2FEC, 2494 }, { 0x2FF8, 2497 }, { 0x2FF6, 2500 }, { 0x2FE9, 2503 }, { 0x2FE7, 2506 }, { 0x2FE4, 2509 }, { 0x2FE5, 2512 }, { 0x2FF5, 2515 }, { 0x2FF2, 2518 }, { 0x2FF3, 2521 }, { 0x2FF0, 2524 }, { 0x2FFC, 2527 }, { 0x2FFE, 2530 }, { 0x2FF9, 2533 }, { 0x2FFA, 2536 }, { 0x2FB4, 2539 }, { 0x2FB2, 2542 }, { 0x2FB9, 2545 }, { 0x2FC6, 2548 }, { 0x2F8A, 2551 }, { 0x30CB, 2554 }, { 0x30C8, 2557 }, { 0x30C9, 2560 }, { 0x30D7, 2563 }, { 0x30D4, 2566 }, { 0x30D5, 2569 }, { 0x30C6, 2572 }, { 0x30C2, 2575 }, { 0x30C3, 2578 }, { 0x30D3, 2581 }, { 0x30D0, 2584 }, { 0x30D1, 2587 }, { 0x30CE, 2590 }, { 0x30DB, 2593 }, { 0x30DD, 2596 }, { 0x30D8, 2599 }, { 0x30D9, 2602 }, { 0x308F, 2605 }, { 0x308C, 2608 }, { 0x308D, 2611 }, { 0x3097, 2614 }, { 0x3094, 2617 }, { 0x3095, 2620 }, { 0x30A4, 2623 }, { 0x311D, 2626 }, { 0x304F, 2629 }, { 0x304C, 2632 }, { 0x304D, 2635 }, { 0x3058, 2638 }, { 0x3056, 2641 }, { 0x304A, 2644 }, { 0x3048, 2647 }, { 0x3045, 2650 }, { 0x3046, 2653 }, { 0x3055, 2656 }, { 0x3053, 2659 }, { 0x3051, 2662 }, { 0x305C, 2665 }, { 0x305E, 2668 }, { 0x3059, 2671 }, { 0x305A, 2674 }, { 0x3062, 2677 }, { 0x3064, 2680 }, { 0x305F, 2683 }, { 0x3060, 2686 }, { 0x2F49, 2689 }, { 0x2F46, 2692 }, { 0x2F47, 2695 }, { 0x2F44, 2698 }, { 0x2F42, 2701 }, { 0x2F3F, 2704 }, { 0x2F40, 2707 }, { 0x2F50, 2710 }, { 0x2F4D, 2713 }, { 0x2F4E, 2716 }, { 0x2F4B, 2719 }, { 0x2F54, 2722 }, { 0x2F56, 2725 }, { 0x2F51, 2728 }, { 0x2F52, 2731 }, { 0x2F59, 2734 }, { 0x2F5B, 2737 }, { 0x2F57, 2740 }, { 0x3021, 2743 }, { 0x301E, 2746 }, { 0x301F, 2749 }, { 0x3029, 2752 }, { 0x3027, 2755 }, { 0x301C, 2758 }, { 0x3019, 2761 }, { 0x3016, 2764 }, { 0x3017, 2767 }, { 0x3026, 2770 }, { 0x3024, 2773 }, { 0x3025, 2776 }, { 0x3023, 2779 }, { 0x302A, 2782 }, { 0x3126, 2785 }, { 0x3123, 2788 }, { 0x3124, 2791 }, { 0x30FF, 2794 }, { 0x30FC, 2797 }, { 0x30FD, 2800 }, { 0x310A, 2803 }, { 0x3108, 2806 }, { 0x30FA, 2809 }, { 0x30F7, 2812 }, { 0x30F4, 2815 }, { 0x30F5, 2818 }, { 0x3107, 2821 }, { 0x3104, 2824 }, { 0x3105, 2827 }, { 0x3102, 2830 }, { 0x3295, 2833 }, { 0x3292, 2836 }, { 0x3293, 2839 }, { 0x32CC, 2842 }, { 0x32C9, 2845 }, { 0x32C6, 2848 }, { 0x32C7, 2851 }, { 0x32D4, 2854 }, { 0x32D1, 2857 }, { 0x32D2, 2860 }, { 0x32CF, 2863 }, { 0x32D8, 2866 }, { 0x32DA, 2869 }, { 0x32D5, 2872 }, { 0x32D6, 2875 }, { 0x32DE, 2878 }, { 0x32DB, 2881 }, { 0x32DC, 2884 }, { 0x3299, 2887 }, { 0x3296, 2890 }, { 0x3297, 2893 }, { 0x32A2, 2896 }, { 0x32A8, 2899 }, { 0x30AC, 2902 }, { 0x30AA, 2905 }, { 0x30B3, 2908 }, { 0x30B1, 2911 }, { 0x30C0, 2914 }, { 0x306C, 2917 }, { 0x3069, 2920 }, { 0x306A, 2923 }, { 0x3074, 2926 }, { 0x3071, 2929 }, { 0x3072, 2932 }, { 0x3080, 2935 }, { 0x3086, 2938 }, { 0x30E3, 2941 }, { 0x30E0, 2944 }, { 0x30E1, 2947 }, { 0x30ED, 2950 }, { 0x30EB, 2953 }, { 0x30DF, 2956 }, { 0x30EA, 2959 }, { 0x30E7, 2962 }, { 0x30E8, 2965 }, { 0x30E5, 2968 }, { 0x30F1, 2971 }, { 0x30F3, 2974 }, { 0x30EE, 2977 }, { 0x30EF, 2980 }, { 0x2F62, 2983 }, { 0x2F60, 2986 }, { 0x2F6A, 2989 }, { 0x2F67, 2992 }, { 0x2F68, 2995 }, { 0x2F75, 2998 }, { 0x2F2E, 3001 }, { 0x2F2B, 3004 }, { 0x2F2C, 3007 }, { 0x2F29, 3010 }, { 0x2F27, 3013 }, { 0x2F24, 3016 }, { 0x2F25, 3019 }, { 0x2F32, 3022 }, { 0x2F2F, 3025 }, { 0x2F30, 3028 }, { 0x2F36, 3031 }, { 0x2F38, 3034 }, { 0x2F33, 3037 }, { 0x2F34, 3040 }, { 0x2F3C, 3043 }, { 0x2F3E, 3046 }, { 0x2F39, 3049 }, { 0x2F3A, 3052 }, { 0x3008, 3055 }, { 0x3005, 3058 }, { 0x3006, 3061 }, { 0x300F, 3064 }, { 0x300D, 3067 }, { 0x3004, 3070 }, { 0x3002, 3073 }, { 0x2FFF, 3076 }, { 0x3000, 3079 }, { 0x300C, 3082 }, { 0x3009, 3085 }, { 0x300A, 3088 }, { 0x3013, 3091 }, { 0x3015, 3094 }, { 0x3010, 3097 }, { 0x3011, 3100 }, { 0x3111, 3103 }, { 0x310E, 3106 }, { 0x310F, 3109 }, { 0x311B, 3112 }, { 0x3119, 3115 }, { 0x310C, 3118 }, { 0x3118, 3121 }, { 0x3115, 3124 }, { 0x3116, 3127 }, { 0x3114, 3130 }, { 0x3031, 3133 }, { 0x302F, 3136 }, { 0x32E5, 3139 }, { 0x32E2, 3142 }, { 0x32DF, 3145 }, { 0x32E0, 3148 }, { 0x32EC, 3151 }, { 0x32E9, 3154 }, { 0x32EA, 3157 }, { 0x32E8, 3160 }, { 0x32EF, 3163 }, { 0x32F1, 3166 }, { 0x32ED, 3169 }, { 0x32F5, 3172 }, { 0x32F7, 3175 }, { 0x32F2, 3178 }, { 0x32F3, 3181 }, { 0x3245, 3184 }, { 0x3242, 3187 }, { 0x3243, 3190 }, { 0x324C, 3193 }, { 0x3249, 3196 }, { 0x324A, 3199 }, { 0x3248, 3202 }, { 0x3246, 3205 }, { 0x3250, 3208 }, { 0x3252, 3211 }, { 0x324D, 3214 }, { 0x324E, 3217 }, { 0x3256, 3220 }, { 0x3258, 3223 }, { 0x3253, 3226 }, { 0x3254, 3229 }, { 0x3037, 3232 }, { 0x3035, 3235 }, { 0x3043, 3238 }, { 0x32FE, 3241 }, { 0x32FB, 3244 }, { 0x32F8, 3247 }, { 0x32F9, 3250 }, { 0x3306, 3253 }, { 0x3303, 3256 }, { 0x3304, 3259 }, { 0x3301, 3262 }, { 0x330A, 3265 }, { 0x3307, 3268 }, { 0x3308, 3271 }, { 0x31A5, 3274 }, { 0x31A2, 3277 }, { 0x31A3, 3280 }, { 0x31AA, 3283 }, { 0x31A0, 3286 }, { 0x319E, 3289 }, { 0x319B, 3292 }, { 0x319C, 3295 }, { 0x31A9, 3298 }, { 0x31A8, 3301 }, { 0x31A7, 3304 }, { 0x31AE, 3307 }, { 0x31B0, 3310 }, { 0x31AC, 3313 }, { 0x31B4, 3316 }, { 0x31B6, 3319 }, { 0x31B1, 3322 }, { 0x31B2, 3325 }, { 0x2EEC, 3328 }, { 0x2EEA, 3331 }, { 0x2EF3, 3334 }, { 0x2EF1, 3337 }, { 0x2EFC, 3340 }, { 0x2F02, 3343 }, { 0x32B1, 3346 }, { 0x32AE, 3349 }, { 0x32AF, 3352 }, { 0x32B5, 3355 }, { 0x32B2, 3358 }, { 0x32B3, 3361 }, { 0x32BE, 3364 }, { 0x32C4, 3367 }, { 0x322A, 3370 }, { 0x3235, 3373 }, { 0x3232, 3376 }, { 0x3233, 3379 }, { 0x3231, 3382 }, { 0x322E, 3385 }, { 0x322F, 3388 }, { 0x322D, 3391 }, { 0x3239, 3394 }, { 0x323B, 3397 }, { 0x3236, 3400 }, { 0x3237, 3403 }, { 0x323F, 3406 }, { 0x3241, 3409 }, { 0x323C, 3412 }, { 0x323D, 3415 }, { 0x327A, 3418 }, { 0x3278, 3421 }, { 0x3286, 3424 }, { 0x328C, 3427 }, { 0x325C, 3430 }, { 0x3259, 3433 }, { 0x325A, 3436 }, { 0x3267, 3439 }, { 0x3264, 3442 }, { 0x3265, 3445 }, { 0x3263, 3448 }, { 0x3260, 3451 }, { 0x3261, 3454 }, { 0x325E, 3457 }, { 0x326B, 3460 }, { 0x326D, 3463 }, { 0x3268, 3466 }, { 0x3269, 3469 }, { 0x3271, 3472 }, { 0x3273, 3475 }, { 0x326E, 3478 }, { 0x326F, 3481 }, { 0x31BD, 3484 }, { 0x31BB, 3487 }, { 0x31E2, 3490 }, { 0x31DF, 3493 }, { 0x31E0, 3496 }, { 0x31E9, 3499 }, { 0x31E7, 3502 }, { 0x31DD, 3505 }, { 0x31DB, 3508 }, { 0x31D8, 3511 }, { 0x31D9, 3514 }, { 0x31E6, 3517 }, { 0x31E3, 3520 }, { 0x31E4, 3523 }, { 0x31ED, 3526 }, { 0x31EA, 3529 }, { 0x31EB, 3532 }, { 0x31F1, 3535 }, { 0x31F3, 3538 }, { 0x31EE, 3541 }, { 0x31EF, 3544 }, { 0x31C4, 3547 }, { 0x31C2, 3550 }, { 0x31D0, 3553 }, { 0x31D6, 3556 }, { 0x2FCE, 3559 }, { 0x2FCC, 3562 }, { 0x2FD6, 3565 }, { 0x2FD3, 3568 }, { 0x2FD4, 3571 }, { 0x2FE2, 3574 }, { 0x2F97, 3577 }, { 0x2F94, 3580 }, { 0x2F95, 3583 }, { 0x2FA6, 3586 }, { 0x2FAC, 3589 }, { 0x3134, 3592 }, { 0x3132, 3595 }, { 0x3312, 3598 }, { 0x330F, 3601 }, { 0x3310, 3604 }, { 0x3313, 3607 }, { 0x331D, 3610 }, { 0x3326, 3613 }, { 0x3323, 3616 }, { 0x3324, 3619 }, { 0x332A, 3622 }, { 0x3327, 3625 }, { 0x3328, 3628 }, { 0x3333, 3631 }, { 0x3339, 3634 }, { 0x31F7, 3637 }, { 0x31F4, 3640 }, { 0x31F5, 3643 }, { 0x3202, 3646 }, { 0x31FF, 3649 }, { 0x3200, 3652 }, { 0x31FE, 3655 }, { 0x31FB, 3658 }, { 0x31FC, 3661 }, { 0x31F9, 3664 }, { 0x3206, 3667 }, { 0x3208, 3670 }, { 0x3203, 3673 }, { 0x3204, 3676 }, { 0x320C, 3679 }, { 0x320E, 3682 }, { 0x3209, 3685 }, { 0x320A, 3688 }, { 0x3141, 3691 }, { 0x313F, 3694 }, { 0x3148, 3697 }, { 0x3146, 3700 }, { 0x3154, 3703 }, { 0x315A, 3706 }, { 0x3189, 3709 }, { 0x3186, 3712 }, { 0x3187, 3715 }, { 0x318F, 3718 }, { 0x318D, 3721 }, { 0x3184, 3724 }, { 0x3181, 3727 }, { 0x317E, 3730 }, { 0x317F, 3733 }, { 0x318C, 3736 }, { 0x318A, 3739 }, { 0x3192, 3742 }, { 0x3194, 3745 }, { 0x3190, 3748 }, { 0x3198, 3751 }, { 0x319A, 3754 }, { 0x3195, 3757 }, { 0x3196, 3760 }, { 0x2F0B, 3763 }, { 0x2F08, 3766 }, { 0x2F09, 3769 }, { 0x2F12, 3772 }, { 0x2F10, 3775 }, { 0x2F1E, 3778 }, { 0x3216, 3781 }, { 0x3213, 3784 }, { 0x3214, 3787 }, { 0x3222, 3790 }, { 0x3228, 3793 }, { 0x2FEA, 3796 }, { 0x2FE8, 3799 }, { 0x2FF1, 3802 }, { 0x2FEF, 3805 }, { 0x2FFD, 3808 }, { 0x30C7, 3811 }, { 0x30C5, 3814 }, { 0x30CF, 3817 }, { 0x30CC, 3820 }, { 0x30CD, 3823 }, { 0x30DC, 3826 }, { 0x304B, 3829 }, { 0x3049, 3832 }, { 0x3052, 3835 }, { 0x3050, 3838 }, { 0x305D, 3841 }, { 0x3063, 3844 }, { 0x2F45, 3847 }, { 0x2F43, 3850 }, { 0x2F4C, 3853 }, { 0x2F4A, 3856 }, { 0x2F55, 3859 }, { 0x2F5A, 3862 }, { 0x301D, 3865 }, { 0x301A, 3868 }, { 0x301B, 3871 }, { 0x3022, 3874 }, { 0x30FB, 3877 }, { 0x30F8, 3880 }, { 0x30F9, 3883 }, { 0x3103, 3886 }, { 0x3100, 3889 }, { 0x3101, 3892 }, { 0x32CD, 3895 }, { 0x32CA, 3898 }, { 0x32CB, 3901 }, { 0x32D0, 3904 }, { 0x32CE, 3907 }, { 0x32D9, 3910 }, { 0x30DE, 3913 }, { 0x30E6, 3916 }, { 0x30E4, 3919 }, { 0x30F2, 3922 }, { 0x2F2A, 3925 }, { 0x2F28, 3928 }, { 0x2F37, 3931 }, { 0x2F3D, 3934 }, { 0x3003, 3937 }, { 0x3014, 3940 }, { 0x310D, 3943 }, { 0x310B, 3946 }, { 0x3112, 3949 }, { 0x3113, 3952 }, { 0x32E6, 3955 }, { 0x32E3, 3958 }, { 0x32E4, 3961 }, { 0x32E7, 3964 }, { 0x32F0, 3967 }, { 0x32F6, 3970 }, { 0x3251, 3973 }, { 0x3257, 3976 }, { 0x32FF, 3979 }, { 0x32FC, 3982 }, { 0x32FD, 3985 }, { 0x3302, 3988 }, { 0x3300, 3991 }, { 0x31A1, 3994 }, { 0x319F, 3997 }, { 0x31A6, 4000 }, { 0x31AF, 4003 }, { 0x31B5, 4006 }, { 0x322C, 4009 }, { 0x323A, 4012 }, { 0x3240, 4015 }, { 0x325F, 4018 }, { 0x325D, 4021 }, { 0x326C, 4024 }, { 0x3272, 4027 }, { 0x31DE, 4030 }, { 0x31DC, 4033 }, { 0x31F2, 4036 }, { 0x31FA, 4039 }, { 0x31F8, 4042 }, { 0x3207, 4045 }, { 0x320D, 4048 }, { 0x3185, 4051 }, { 0x3182, 4054 }, { 0x3183, 4057 }, { 0x3193, 4060 }, { 0x3199, 4063 }, { 0x2EC3, 4066 }, { 0x2186, 4070 }, { 0x1DD5, 4072 }, { 0x1EB7, 4075 }, { 0x05B2, 4077 }, { 0x232B, 4078 }, { 0x6D57, 4081 }, { 0x1EE6, 4082 }, { 0x1EDE, 4088 }, { 0x1EDA, 4094 }, { 0x1EEA, 4100 }, { 0x1EFB, 4106 }, { 0x1EDB, 4112 }, { 0x1EF4, 4117 }, { 0x1EEB, 4122 }, { 0x1EE4, 4127 }, { 0x1EED, 4132 }, { 0x1EFD, 4137 }, { 0x1EEF, 4141 }, { 0x1ED7, 4147 }, { 0x1ED3, 4153 }, { 0x1EFA, 4159 }, { 0x1EFC, 4165 }, { 0x1F01, 4169 }, { 0x1EF0, 4174 }, { 0x1F1E, 4180 }, { 0x1EDC, 4184 }, { 0x1EDD, 4190 }, { 0x1EC4, 4195 }, { 0x1EF8, 4200 }, { 0x1ED5, 4206 }, { 0x1EE9, 4212 }, { 0x1ED6, 4217 }, { 0x1EC1, 4222 }, { 0x1ECA, 4227 }, { 0x1EC5, 4232 }, { 0x1EC2, 4237 }, { 0x1EC3, 4242 }, { 0x1ED9, 4247 }, { 0x1EF9, 4253 }, { 0x1ECB, 4258 }, { 0x1EE0, 4263 }, { 0x1ED0, 4269 }, { 0x1ECC, 4275 }, { 0x1ED1, 4280 }, { 0x1ECD, 4286 }, { 0x1EEC, 4291 }, { 0x1F03, 4296 }, { 0x1EFF, 4300 }, { 0x1EF3, 4305 }, { 0x1ED4, 4310 }, { 0x1EE2, 4315 }, { 0x1EFE, 4320 }, { 0x1F02, 4324 }, { 0x1EE7, 4329 }, { 0x1EE1, 4334 }, { 0x1EC8, 4339 }, { 0x1EF6, 4344 }, { 0x1EF1, 4349 }, { 0x1EF5, 4354 }, { 0x1EC7, 4358 }, { 0x1EE8, 4363 }, { 0x1EC6, 4368 }, { 0x1EE5, 4373 }, { 0x1ED2, 4378 }, { 0x1EEE, 4383 }, { 0x1EBF, 4388 }, { 0x1EC0, 4392 }, { 0x1EE3, 4397 }, { 0x1F00, 4402 }, { 0x1ED8, 4407 }, { 0x1EC9, 4412 }, { 0x1EDF, 4417 }, { 0x1ECE, 4422 }, { 0x1EF7, 4427 }, { 0x1ECF, 4432 }, { 0x1EF2, 4437 }, { 0x1E9B, 4442 }, { 0x6E05, 4443 }, { 0x71C5, 4445 }, { 0x700A, 4446 }, { 0x1CC3, 4447 }, { 0x2553, 4449 }, { 0x2552, 4452 }, { 0x3D8A, 4454 }, { 0x6D34, 4455 }, { 0x209A, 4458 }, { 0x2080, 4466 }, { 0x2074, 4474 }, { 0x2078, 4481 }, { 0x2070, 4489 }, { 0x2092, 4496 }, { 0x20A2, 4503 }, { 0x2084, 4511 }, { 0x2073, 4519 }, { 0x207C, 4526 }, { 0x206F, 4534 }, { 0x2091, 4541 }, { 0x20B6, 4548 }, { 0x20B3, 4555 }, { 0x20C2, 4562 }, { 0x20B5, 4569 }, { 0x20B2, 4576 }, { 0x20C1, 4583 }, { 0x209B, 4590 }, { 0x2081, 4598 }, { 0x206C, 4606 }, { 0x2079, 4613 }, { 0x2068, 4621 }, { 0x208A, 4628 }, { 0x20A1, 4635 }, { 0x2083, 4643 }, { 0x206B, 4651 }, { 0x207B, 4658 }, { 0x2067, 4666 }, { 0x2089, 4673 }, { 0x20B0, 4680 }, { 0x20AD, 4687 }, { 0x20BF, 4694 }, { 0x20AF, 4701 }, { 0x20AC, 4708 }, { 0x20BE, 4715 }, { 0x209D, 4722 }, { 0x209F, 4731 }, { 0x208F, 4740 }, { 0x2087, 4748 }, { 0x2097, 4756 }, { 0x2094, 4764 }, { 0x208C, 4772 }, { 0x20A4, 4780 }, { 0x20D3, 4788 }, { 0x2075, 4792 }, { 0x20D9, 4798 }, { 0x2071, 4805 }, { 0x2095, 4811 }, { 0x20D5, 4817 }, { 0x206D, 4821 }, { 0x2069, 4827 }, { 0x208D, 4833 }, { 0x20D2, 4839 }, { 0x20D8, 4843 }, { 0x20D4, 4850 }, { 0x20A9, 4854 }, { 0x20A7, 4860 }, { 0x2061, 4866 }, { 0x205F, 4872 }, { 0x205D, 4878 }, { 0x2085, 4882 }, { 0x207D, 4888 }, { 0x20A5, 4894 }, { 0x2065, 4900 }, { 0x2063, 4906 }, { 0x205B, 4912 }, { 0x20CF, 4916 }, { 0x2072, 4920 }, { 0x20D7, 4926 }, { 0x206E, 4933 }, { 0x208E, 4939 }, { 0x20C9, 4945 }, { 0x20CA, 4952 }, { 0x20C8, 4959 }, { 0x20C7, 4966 }, { 0x20D1, 4973 }, { 0x206A, 4977 }, { 0x2066, 4983 }, { 0x2086, 4989 }, { 0x20CE, 4995 }, { 0x20D6, 4999 }, { 0x20D0, 5006 }, { 0x20A8, 5010 }, { 0x20A6, 5016 }, { 0x2060, 5022 }, { 0x205E, 5028 }, { 0x20CD, 5034 }, { 0x20CC, 5039 }, { 0x20CB, 5048 }, { 0x205C, 5057 }, { 0x207E, 5061 }, { 0x2076, 5067 }, { 0x2096, 5073 }, { 0x2064, 5079 }, { 0x2062, 5085 }, { 0x205A, 5091 }, { 0x209E, 5095 }, { 0x20A0, 5104 }, { 0x2090, 5113 }, { 0x2088, 5121 }, { 0x2098, 5129 }, { 0x2093, 5137 }, { 0x208B, 5145 }, { 0x20A3, 5153 }, { 0x20B7, 5161 }, { 0x20B4, 5167 }, { 0x20C3, 5173 }, { 0x20B1, 5179 }, { 0x20AE, 5185 }, { 0x20C0, 5191 }, { 0x20AB, 5197 }, { 0x20BD, 5201 }, { 0x20BA, 5207 }, { 0x20C6, 5213 }, { 0x20AA, 5219 }, { 0x2082, 5223 }, { 0x207A, 5230 }, { 0x209C, 5237 }, { 0x207F, 5244 }, { 0x2077, 5251 }, { 0x2099, 5258 }, { 0x20BC, 5265 }, { 0x20B9, 5272 }, { 0x20C5, 5279 }, { 0x20BB, 5286 }, { 0x20B8, 5293 }, { 0x20C4, 5300 }, { 0x6DA1, 5307 }, { 0x6D56, 5308 }, { 0x6FC7, 5309 }, { 0x6FCA, 5310 }, { 0x222A, 5312 }, { 0x6D43, 5314 }, { 0x6D6C, 5315 }, { 0x6F77, 5317 }, { 0x6F74, 5322 }, { 0x030E, 5328 }, { 0x2181, 5329 }, { 0x2C50, 5331 }, { 0x2C4C, 5334 }, { 0x2C4B, 5337 }, { 0x2C4E, 5340 }, { 0x2C5F, 5343 }, { 0x2C4D, 5346 }, { 0x2C3C, 5349 }, { 0x2C52, 5352 }, { 0x2C43, 5355 }, { 0x2C51, 5358 }, { 0x2C57, 5361 }, { 0x2C5E, 5364 }, { 0x2C58, 5367 }, { 0x2C56, 5370 }, { 0x2C4F, 5373 }, { 0x2C55, 5376 }, { 0x2C40, 5379 }, { 0x2C53, 5382 }, { 0x2C59, 5385 }, { 0x2C3D, 5388 }, { 0x2C3E, 5391 }, { 0x2C3F, 5394 }, { 0x2C42, 5397 }, { 0x2C46, 5400 }, { 0x2C49, 5403 }, { 0x2C41, 5406 }, { 0x2C5B, 5409 }, { 0x2C54, 5412 }, { 0x2C5A, 5415 }, { 0x2C48, 5418 }, { 0x2C5C, 5421 }, { 0x2C44, 5424 }, { 0x2C47, 5427 }, { 0x2C4A, 5430 }, { 0x2C45, 5433 }, { 0x2C5D, 5436 }, { 0x293E, 5439 }, { 0x295E, 5442 }, { 0x295F, 5445 }, { 0x2994, 5448 }, { 0x2995, 5452 }, { 0x2996, 5456 }, { 0x296F, 5460 }, { 0x2962, 5463 }, { 0x2968, 5466 }, { 0x2969, 5470 }, { 0x296B, 5474 }, { 0x296A, 5478 }, { 0x2970, 5482 }, { 0x295B, 5485 }, { 0x295C, 5489 }, { 0x296E, 5493 }, { 0x2951, 5496 }, { 0x2953, 5499 }, { 0x298F, 5502 }, { 0x2961, 5505 }, { 0x299A, 5510 }, { 0x2986, 5513 }, { 0x295A, 5516 }, { 0x2981, 5519 }, { 0x2950, 5522 }, { 0x2998, 5525 }, { 0x297E, 5528 }, { 0x2960, 5531 }, { 0x2946, 5534 }, { 0x2947, 5538 }, { 0x2949, 5542 }, { 0x2948, 5546 }, { 0x2988, 5550 }, { 0x2989, 5554 }, { 0x2973, 5558 }, { 0x296C, 5561 }, { 0x2954, 5564 }, { 0x298E, 5567 }, { 0x2943, 5570 }, { 0x2966, 5573 }, { 0x2984, 5576 }, { 0x2985, 5580 }, { 0x297A, 5584 }, { 0x297B, 5588 }, { 0x2971, 5592 }, { 0x2972, 5596 }, { 0x2952, 5600 }, { 0x2939, 5603 }, { 0x2955, 5606 }, { 0x299B, 5609 }, { 0x2975, 5612 }, { 0x2976, 5616 }, { 0x2977, 5620 }, { 0x294E, 5624 }, { 0x294F, 5628 }, { 0x2940, 5632 }, { 0x2941, 5636 }, { 0x298C, 5640 }, { 0x298D, 5644 }, { 0x296D, 5648 }, { 0x2944, 5651 }, { 0x2945, 5655 }, { 0x294A, 5659 }, { 0x294C, 5662 }, { 0x294D, 5666 }, { 0x293F, 5670 }, { 0x2978, 5673 }, { 0x2958, 5676 }, { 0x2959, 5680 }, { 0x2965, 5684 }, { 0x2974, 5687 }, { 0x2956, 5690 }, { 0x293D, 5693 }, { 0x2938, 5696 }, { 0x293A, 5699 }, { 0x293B, 5703 }, { 0x293C, 5707 }, { 0x2963, 5711 }, { 0x2964, 5715 }, { 0x294B, 5719 }, { 0x29A8, 5722 }, { 0x2979, 5725 }, { 0x2957, 5728 }, { 0x2942, 5731 }, { 0x295D, 5734 }, { 0x297D, 5740 }, { 0x2983, 5744 }, { 0x299F, 5748 }, { 0x29A0, 5752 }, { 0x2997, 5756 }, { 0x2993, 5760 }, { 0x297C, 5764 }, { 0x299D, 5768 }, { 0x2982, 5772 }, { 0x29A3, 5776 }, { 0x299C, 5780 }, { 0x29A1, 5784 }, { 0x298B, 5788 }, { 0x2987, 5792 }, { 0x2991, 5796 }, { 0x298A, 5800 }, { 0x299E, 5804 }, { 0x2967, 5808 }, { 0x2992, 5812 }, { 0x2999, 5816 }, { 0x2980, 5820 }, { 0x29A5, 5824 }, { 0x29A7, 5828 }, { 0x297F, 5832 }, { 0x2990, 5836 }, { 0x29AA, 5841 }, { 0x29A2, 5845 }, { 0x29A4, 5849 }, { 0x29A6, 5853 }, { 0x29A9, 5857 }, { 0x3A08, 5861 }, { 0x3A09, 5864 }, { 0x3A0A, 5867 }, { 0x3A0B, 5870 }, { 0x3A0C, 5873 }, { 0x6D3F, 5876 }, { 0x6D69, 5877 }, { 0x2258, 5879 }, { 0x21DA, 5883 }, { 0x21DB, 5885 }, { 0x21DC, 5887 }, { 0x21DD, 5889 }, { 0x21DE, 5891 }, { 0x21DF, 5893 }, { 0x6D50, 5895 }, { 0x6D71, 5896 }, { 0x1D9D, 5898 }, { 0x0298, 5900 }, { 0x1DC1, 5902 }, { 0x1E4E, 5904 }, { 0x6DFB, 5906 }, { 0x6D7D, 5907 }, { 0x6C79, 5908 }, { 0x6C78, 5911 }, { 0x71B9, 5914 }, { 0x1D97, 5915 }, { 0x6E55, 5918 }, { 0x6D7C, 5923 }, { 0x6EF2, 5924 }, { 0x6E1B, 5926 }, { 0x6C66, 5928 }, { 0x1D89, 5929 }, { 0x71C8, 5931 }, { 0x1C1B, 5933 }, { 0x6DC9, 5934 }, { 0x6C68, 5936 }, { 0x6C71, 5938 }, { 0x21C2, 5940 }, { 0x216F, 5942 }, { 0x6CA3, 5944 }, { 0x2252, 5946 }, { 0x6D0D, 5948 }, { 0x6DBA, 5953 }, { 0x6E4C, 5954 }, { 0x1C5A, 5955 }, { 0x0C60, 5957 }, { 0x0C5F, 5960 }, { 0x0C4E, 5963 }, { 0x0C4F, 5966 }, { 0x0C51, 5970 }, { 0x0C50, 5974 }, { 0x0C52, 5978 }, { 0x0C56, 5982 }, { 0x0C5B, 5985 }, { 0x0C57, 5988 }, { 0x0C5A, 5991 }, { 0x0C59, 5994 }, { 0x0C5E, 5997 }, { 0x0C55, 6000 }, { 0x0C5D, 6003 }, { 0x0C5C, 6006 }, { 0x0C58, 6009 }, { 0x0C3C, 6012 }, { 0x0C49, 6016 }, { 0x0C40, 6020 }, { 0x0C4B, 6024 }, { 0x0C44, 6028 }, { 0x0C42, 6032 }, { 0x0C3E, 6036 }, { 0x0C4D, 6040 }, { 0x0C3F, 6044 }, { 0x0C4C, 6048 }, { 0x0C4A, 6052 }, { 0x0C41, 6056 }, { 0x0C45, 6060 }, { 0x0C43, 6064 }, { 0x0C3D, 6068 }, { 0x0C46, 6073 }, { 0x0C39, 6078 }, { 0x0C2C, 6081 }, { 0x0C24, 6084 }, { 0x0C27, 6087 }, { 0x0C31, 6090 }, { 0x0C2F, 6094 }, { 0x0C2F, 6098 }, { 0x0C31, 6102 }, { 0x0C3A, 6106 }, { 0x0C38, 6110 }, { 0x0C20, 6114 }, { 0x0C35, 6117 }, { 0x0C34, 6120 }, { 0x0C35, 6124 }, { 0x0C32, 6128 }, { 0x0C2B, 6131 }, { 0x0C2D, 6134 }, { 0x0C34, 6137 }, { 0x0C25, 6140 }, { 0x0C37, 6144 }, { 0x0C28, 6148 }, { 0x0C36, 6151 }, { 0x0C33, 6154 }, { 0x0C22, 6157 }, { 0x0C21, 6161 }, { 0x0C23, 6165 }, { 0x0C26, 6168 }, { 0x0C30, 6171 }, { 0x0C2E, 6175 }, { 0x0C2A, 6179 }, { 0x0C29, 6183 }, { 0x0C61, 6187 }, { 0x0C62, 6191 }, { 0x0C3B, 6195 }, { 0x0C54, 6197 }, { 0x0C47, 6199 }, { 0x0C48, 6203 }, { 0x0C53, 6207 }, { 0x21A6, 6210 }, { 0x003F, 6211 }, { 0x2AAC, 6213 }, { 0x1C02, 6218 }, { 0x6E40, 6220 }, { 0x1BDE, 6223 }, { 0x1C19, 6224 }, { 0x1BC2, 6225 }, { 0x1BE1, 6226 }, { 0x6DA3, 6227 }, { 0x7199, 6228 }, { 0x6EAF, 6231 }, { 0x6DA6, 6236 }, { 0x6DAD, 6241 }, { 0x6DAE, 6246 }, { 0x6EB5, 6249 }, { 0x2249, 6251 }, { 0x5ABC, 6255 }, { 0x5AB3, 6257 }, { 0x5AB8, 6260 }, { 0x5AB4, 6263 }, { 0x5AB7, 6266 }, { 0x5AB6, 6269 }, { 0x5ABB, 6272 }, { 0x5AB2, 6275 }, { 0x5ABA, 6278 }, { 0x5AB9, 6281 }, { 0x5AB5, 6284 }, { 0x5ABD, 6287 }, { 0x5A99, 6290 }, { 0x5AAB, 6293 }, { 0x5AA5, 6296 }, { 0x5A97, 6299 }, { 0x5A98, 6302 }, { 0x5AA9, 6305 }, { 0x5AAC, 6308 }, { 0x5AAE, 6311 }, { 0x5AA0, 6314 }, { 0x5AA4, 6317 }, { 0x5AA3, 6320 }, { 0x5AB0, 6323 }, { 0x5AA6, 6326 }, { 0x5A93, 6329 }, { 0x5AAA, 6332 }, { 0x5A95, 6335 }, { 0x5A9E, 6338 }, { 0x5A9D, 6341 }, { 0x5AAF, 6344 }, { 0x5A9C, 6347 }, { 0x5AAD, 6350 }, { 0x5A96, 6353 }, { 0x5A94, 6356 }, { 0x5AA2, 6359 }, { 0x5A9A, 6362 }, { 0x5AA7, 6365 }, { 0x5AB1, 6368 }, { 0x5A9B, 6371 }, { 0x5AA1, 6374 }, { 0x5AA8, 6377 }, { 0x5A9F, 6380 }, { 0x14D1, 6383 }, { 0x165D, 6384 }, { 0x165E, 6389 }, { 0x165C, 6394 }, { 0x1650, 6400 }, { 0x1651, 6405 }, { 0x1653, 6410 }, { 0x1658, 6415 }, { 0x1654, 6420 }, { 0x1657, 6425 }, { 0x1656, 6430 }, { 0x165B, 6435 }, { 0x1652, 6440 }, { 0x165A, 6445 }, { 0x1659, 6450 }, { 0x1655, 6455 }, { 0x163D, 6460 }, { 0x163F, 6466 }, { 0x163B, 6472 }, { 0x1639, 6478 }, { 0x163E, 6484 }, { 0x1642, 6490 }, { 0x163A, 6496 }, { 0x1648, 6502 }, { 0x1640, 6508 }, { 0x1645, 6514 }, { 0x1641, 6520 }, { 0x163C, 6526 }, { 0x1644, 6532 }, { 0x1643, 6538 }, { 0x1646, 6544 }, { 0x1647, 6550 }, { 0x1638, 6556 }, { 0x1631, 6563 }, { 0x1630, 6569 }, { 0x1629, 6575 }, { 0x162F, 6581 }, { 0x1611, 6587 }, { 0x162B, 6593 }, { 0x1625, 6599 }, { 0x161F, 6605 }, { 0x1623, 6611 }, { 0x160D, 6617 }, { 0x1618, 6623 }, { 0x161D, 6629 }, { 0x162A, 6635 }, { 0x1612, 6641 }, { 0x1619, 6647 }, { 0x1634, 6653 }, { 0x1613, 6659 }, { 0x1624, 6665 }, { 0x1637, 6671 }, { 0x161E, 6677 }, { 0x1617, 6683 }, { 0x1635, 6689 }, { 0x162E, 6695 }, { 0x162D, 6701 }, { 0x1626, 6707 }, { 0x162C, 6713 }, { 0x160E, 6719 }, { 0x1628, 6725 }, { 0x1622, 6731 }, { 0x161C, 6737 }, { 0x1620, 6743 }, { 0x160C, 6749 }, { 0x1615, 6755 }, { 0x161A, 6761 }, { 0x1627, 6767 }, { 0x160F, 6773 }, { 0x1616, 6779 }, { 0x1632, 6785 }, { 0x1610, 6791 }, { 0x1621, 6797 }, { 0x1636, 6803 }, { 0x161B, 6809 }, { 0x1614, 6815 }, { 0x1633, 6821 }, { 0x164F, 6827 }, { 0x164E, 6833 }, { 0x164D, 6839 }, { 0x164C, 6845 }, { 0x164B, 6851 }, { 0x1649, 6857 }, { 0x164A, 6863 }, { 0x6C55, 6869 }, { 0x6C4C, 6873 }, { 0x1C57, 6876 }, { 0x0779, 6879 }, { 0x0778, 6883 }, { 0x077C, 6887 }, { 0x0745, 6889 }, { 0x074A, 6892 }, { 0x0746, 6895 }, { 0x0749, 6898 }, { 0x0748, 6901 }, { 0x074D, 6904 }, { 0x0744, 6907 }, { 0x074C, 6910 }, { 0x074B, 6913 }, { 0x0747, 6916 }, { 0x074E, 6919 }, { 0x0751, 6922 }, { 0x0750, 6925 }, { 0x0756, 6928 }, { 0x0754, 6931 }, { 0x0752, 6934 }, { 0x0757, 6937 }, { 0x075C, 6940 }, { 0x074F, 6943 }, { 0x0761, 6946 }, { 0x0768, 6949 }, { 0x075A, 6952 }, { 0x0762, 6955 }, { 0x0763, 6958 }, { 0x0765, 6961 }, { 0x0767, 6964 }, { 0x0764, 6967 }, { 0x0753, 6971 }, { 0x0758, 6974 }, { 0x075D, 6977 }, { 0x075F, 6980 }, { 0x0759, 6983 }, { 0x0769, 6986 }, { 0x076A, 6989 }, { 0x075B, 6992 }, { 0x0760, 6995 }, { 0x0766, 6998 }, { 0x076B, 7001 }, { 0x075E, 7005 }, { 0x076C, 7008 }, { 0x076E, 7012 }, { 0x076D, 7016 }, { 0x0755, 7020 }, { 0x077A, 7023 }, { 0x077B, 7027 }, { 0x0774, 7030 }, { 0x0773, 7035 }, { 0x0775, 7040 }, { 0x0772, 7045 }, { 0x0770, 7050 }, { 0x076F, 7055 }, { 0x0771, 7060 }, { 0x0777, 7065 }, { 0x0776, 7070 }, { 0x077E, 7074 }, { 0x077D, 7076 }, { 0x1E46, 7079 }, { 0x1E0D, 7080 }, { 0x1E0E, 7084 }, { 0x1D92, 7088 }, { 0x006B, 7092 }, { 0x1E36, 7094 }, { 0x1F04, 7096 }, { 0x1DE9, 7099 }, { 0x1DCA, 7102 }, { 0x1DD2, 7104 }, { 0x1E73, 7108 }, { 0x1E75, 7112 }, { 0x1E6B, 7119 }, { 0x1E6C, 7126 }, { 0x1DAF, 7133 }, { 0x1DEB, 7136 }, { 0x1DF7, 7139 }, { 0x1DF6, 7141 }, { 0x1DF8, 7144 }, { 0x1DCD, 7146 }, { 0x6E64, 7150 }, { 0x1FB4, 7153 }, { 0x1FB3, 7156 }, { 0x1FB7, 7159 }, { 0x1FB1, 7161 }, { 0x1FAF, 7163 }, { 0x1FB0, 7165 }, { 0x1FB6, 7167 }, { 0x1FB5, 7171 }, { 0x1FB9, 7175 }, { 0x1FB8, 7178 }, { 0x1FB2, 7182 }, { 0x1CB3, 7185 }, { 0x7010, 7187 }, { 0x6F18, 7189 }, { 0x45AB, 7191 }, { 0x45A1, 7196 }, { 0x45AC, 7201 }, { 0x45AE, 7206 }, { 0x45A9, 7211 }, { 0x459B, 7216 }, { 0x4599, 7221 }, { 0x45A4, 7226 }, { 0x459A, 7231 }, { 0x459D, 7236 }, { 0x45A0, 7241 }, { 0x45A7, 7246 }, { 0x45B0, 7251 }, { 0x45A2, 7256 }, { 0x459E, 7261 }, { 0x45B3, 7266 }, { 0x45B5, 7271 }, { 0x45AA, 7276 }, { 0x45A3, 7281 }, { 0x459F, 7286 }, { 0x45A8, 7291 }, { 0x45AD, 7296 }, { 0x45A6, 7301 }, { 0x459C, 7306 }, { 0x45A5, 7311 }, { 0x45B2, 7316 }, { 0x45B4, 7321 }, { 0x45B1, 7326 }, { 0x45AF, 7331 }, { 0x45B6, 7336 }, { 0x45B7, 7341 }, { 0x45B8, 7346 }, { 0x4589, 7351 }, { 0x4579, 7356 }, { 0x458B, 7361 }, { 0x457C, 7366 }, { 0x4585, 7371 }, { 0x4583, 7376 }, { 0x4582, 7381 }, { 0x457E, 7386 }, { 0x458A, 7391 }, { 0x4581, 7396 }, { 0x457B, 7401 }, { 0x4584, 7406 }, { 0x457D, 7411 }, { 0x4580, 7416 }, { 0x457F, 7421 }, { 0x4590, 7426 }, { 0x4594, 7431 }, { 0x4593, 7436 }, { 0x4591, 7441 }, { 0x458F, 7446 }, { 0x458D, 7451 }, { 0x4586, 7456 }, { 0x4587, 7461 }, { 0x4595, 7466 }, { 0x458E, 7471 }, { 0x458C, 7476 }, { 0x457A, 7481 }, { 0x4588, 7486 }, { 0x4592, 7491 }, { 0x4596, 7496 }, { 0x4597, 7501 }, { 0x4598, 7506 }, { 0x4071, 7511 }, { 0x4075, 7515 }, { 0x407A, 7519 }, { 0x4080, 7523 }, { 0x4087, 7527 }, { 0x4072, 7531 }, { 0x4074, 7535 }, { 0x408B, 7539 }, { 0x407C, 7543 }, { 0x407D, 7547 }, { 0x407E, 7551 }, { 0x4084, 7555 }, { 0x4085, 7559 }, { 0x4078, 7563 }, { 0x408E, 7567 }, { 0x407B, 7571 }, { 0x4073, 7575 }, { 0x4083, 7579 }, { 0x4081, 7583 }, { 0x4086, 7587 }, { 0x408F, 7591 }, { 0x4076, 7595 }, { 0x4077, 7599 }, { 0x408D, 7603 }, { 0x4088, 7607 }, { 0x408C, 7611 }, { 0x407F, 7615 }, { 0x4090, 7619 }, { 0x408A, 7623 }, { 0x4089, 7627 }, { 0x4082, 7631 }, { 0x4079, 7635 }, { 0x4091, 7639 }, { 0x4093, 7643 }, { 0x4092, 7647 }, { 0x4094, 7651 }, { 0x40B4, 7655 }, { 0x40B9, 7659 }, { 0x40C9, 7663 }, { 0x40C3, 7667 }, { 0x40B0, 7671 }, { 0x40CB, 7675 }, { 0x40CC, 7679 }, { 0x40D5, 7683 }, { 0x40D2, 7687 }, { 0x40CA, 7691 }, { 0x40D4, 7695 }, { 0x40D3, 7699 }, { 0x40B1, 7703 }, { 0x40B3, 7707 }, { 0x40B2, 7711 }, { 0x40BB, 7715 }, { 0x40C0, 7719 }, { 0x40C1, 7723 }, { 0x40C2, 7727 }, { 0x40CE, 7731 }, { 0x40D1, 7735 }, { 0x40CF, 7739 }, { 0x40C7, 7743 }, { 0x40BA, 7747 }, { 0x40BF, 7751 }, { 0x40CD, 7755 }, { 0x40BE, 7759 }, { 0x40D0, 7763 }, { 0x40C8, 7767 }, { 0x40B7, 7771 }, { 0x40B5, 7775 }, { 0x40C4, 7779 }, { 0x40B6, 7783 }, { 0x40B8, 7787 }, { 0x40BC, 7791 }, { 0x40BD, 7795 }, { 0x40C5, 7799 }, { 0x40C6, 7803 }, { 0x467F, 7807 }, { 0x4682, 7812 }, { 0x4685, 7817 }, { 0x4688, 7822 }, { 0x4690, 7827 }, { 0x468C, 7832 }, { 0x469D, 7837 }, { 0x46A2, 7842 }, { 0x46B3, 7847 }, { 0x46B9, 7852 }, { 0x46BC, 7857 }, { 0x46C2, 7862 }, { 0x4695, 7867 }, { 0x46B1, 7872 }, { 0x46A1, 7877 }, { 0x46AE, 7882 }, { 0x4693, 7887 }, { 0x46B0, 7892 }, { 0x46B5, 7897 }, { 0x4686, 7902 }, { 0x46AF, 7907 }, { 0x46B7, 7912 }, { 0x46C6, 7917 }, { 0x468A, 7922 }, { 0x4692, 7927 }, { 0x468E, 7932 }, { 0x4699, 7937 }, { 0x469F, 7942 }, { 0x46A3, 7947 }, { 0x46BB, 7952 }, { 0x46BD, 7957 }, { 0x46C4, 7962 }, { 0x4697, 7967 }, { 0x46BE, 7972 }, { 0x46A0, 7977 }, { 0x46A7, 7982 }, { 0x46AC, 7987 }, { 0x46A5, 7992 }, { 0x46A9, 7997 }, { 0x46C0, 8002 }, { 0x469B, 8007 }, { 0x46C7, 8012 }, { 0x4680, 8017 }, { 0x4684, 8022 }, { 0x4683, 8027 }, { 0x4689, 8032 }, { 0x4691, 8037 }, { 0x4681, 8042 }, { 0x468D, 8047 }, { 0x469E, 8052 }, { 0x46B4, 8057 }, { 0x46BA, 8062 }, { 0x46C3, 8067 }, { 0x4696, 8072 }, { 0x46B2, 8077 }, { 0x4694, 8082 }, { 0x46B6, 8087 }, { 0x4687, 8092 }, { 0x46B8, 8097 }, { 0x468B, 8102 }, { 0x468F, 8107 }, { 0x469A, 8112 }, { 0x46A4, 8117 }, { 0x46C5, 8122 }, { 0x4698, 8127 }, { 0x46AB, 8132 }, { 0x46BF, 8137 }, { 0x46A8, 8142 }, { 0x46A6, 8147 }, { 0x46AA, 8152 }, { 0x46C1, 8157 }, { 0x469C, 8162 }, { 0x46AD, 8167 }, { 0x40FA, 8172 }, { 0x40FB, 8176 }, { 0x40FC, 8180 }, { 0x410C, 8184 }, { 0x4102, 8188 }, { 0x4107, 8192 }, { 0x4108, 8196 }, { 0x4109, 8200 }, { 0x410D, 8204 }, { 0x40FF, 8208 }, { 0x4100, 8212 }, { 0x411D, 8216 }, { 0x4103, 8220 }, { 0x4104, 8224 }, { 0x40FD, 8228 }, { 0x40FE, 8232 }, { 0x4118, 8236 }, { 0x4110, 8240 }, { 0x4111, 8244 }, { 0x4112, 8248 }, { 0x410E, 8252 }, { 0x410F, 8256 }, { 0x410B, 8260 }, { 0x4116, 8264 }, { 0x4117, 8268 }, { 0x4119, 8272 }, { 0x4105, 8276 }, { 0x4106, 8280 }, { 0x4114, 8284 }, { 0x4115, 8288 }, { 0x4101, 8292 }, { 0x4113, 8296 }, { 0x411A, 8300 }, { 0x411B, 8304 }, { 0x411C, 8308 }, { 0x410A, 8312 }, { 0x4124, 8316 }, { 0x4125, 8320 }, { 0x4122, 8324 }, { 0x411E, 8328 }, { 0x4123, 8332 }, { 0x411F, 8336 }, { 0x4120, 8340 }, { 0x4121, 8344 }, { 0x4126, 8348 }, { 0x4127, 8352 }, { 0x4129, 8356 }, { 0x4128, 8360 }, { 0x412A, 8364 }, { 0x412B, 8368 }, { 0x6EEE, 8372 }, { 0x46FB, 8375 }, { 0x4704, 8380 }, { 0x470B, 8385 }, { 0x4716, 8390 }, { 0x4725, 8395 }, { 0x46FC, 8400 }, { 0x470F, 8405 }, { 0x46FD, 8410 }, { 0x46FF, 8415 }, { 0x4702, 8420 }, { 0x4706, 8425 }, { 0x4707, 8430 }, { 0x4708, 8435 }, { 0x470A, 8440 }, { 0x470D, 8445 }, { 0x470E, 8450 }, { 0x4711, 8455 }, { 0x4713, 8460 }, { 0x4714, 8465 }, { 0x471B, 8470 }, { 0x471D, 8475 }, { 0x471F, 8480 }, { 0x4721, 8485 }, { 0x4729, 8490 }, { 0x472A, 8495 }, { 0x470C, 8500 }, { 0x4717, 8505 }, { 0x472D, 8510 }, { 0x4726, 8515 }, { 0x46FE, 8520 }, { 0x4703, 8525 }, { 0x4724, 8530 }, { 0x4701, 8535 }, { 0x4709, 8540 }, { 0x4712, 8545 }, { 0x471C, 8550 }, { 0x4700, 8555 }, { 0x4722, 8560 }, { 0x4715, 8565 }, { 0x4720, 8570 }, { 0x4723, 8575 }, { 0x472B, 8580 }, { 0x471A, 8585 }, { 0x4710, 8590 }, { 0x4705, 8595 }, { 0x471E, 8601 }, { 0x4719, 8607 }, { 0x4728, 8613 }, { 0x472C, 8619 }, { 0x4718, 8625 }, { 0x4727, 8631 }, { 0x472E, 8637 }, { 0x4732, 8641 }, { 0x4733, 8646 }, { 0x4730, 8651 }, { 0x472F, 8655 }, { 0x4731, 8659 }, { 0x46C8, 8663 }, { 0x46D1, 8668 }, { 0x46D8, 8673 }, { 0x46E3, 8678 }, { 0x46F2, 8683 }, { 0x46C9, 8688 }, { 0x46DC, 8693 }, { 0x46CA, 8698 }, { 0x46CC, 8703 }, { 0x46CF, 8708 }, { 0x46D3, 8713 }, { 0x46D4, 8718 }, { 0x46D5, 8723 }, { 0x46D7, 8728 }, { 0x46DA, 8733 }, { 0x46DB, 8738 }, { 0x46DE, 8743 }, { 0x46E0, 8748 }, { 0x46E1, 8753 }, { 0x46E8, 8758 }, { 0x46EA, 8763 }, { 0x46EC, 8768 }, { 0x46EE, 8773 }, { 0x46F6, 8778 }, { 0x46F7, 8783 }, { 0x46D9, 8788 }, { 0x46E4, 8793 }, { 0x46FA, 8798 }, { 0x46F3, 8803 }, { 0x46CB, 8808 }, { 0x46D0, 8813 }, { 0x46F1, 8818 }, { 0x46CE, 8823 }, { 0x46D6, 8828 }, { 0x46DF, 8833 }, { 0x46E9, 8838 }, { 0x46CD, 8843 }, { 0x46EF, 8848 }, { 0x46E2, 8853 }, { 0x46ED, 8858 }, { 0x46F0, 8863 }, { 0x46F8, 8868 }, { 0x46E7, 8873 }, { 0x46DD, 8878 }, { 0x46D2, 8883 }, { 0x46EB, 8889 }, { 0x46E6, 8895 }, { 0x46F5, 8901 }, { 0x46F9, 8907 }, { 0x46E5, 8913 }, { 0x46F4, 8919 }, { 0x291E, 8925 }, { 0x1BD8, 8931 }, { 0x6EEA, 8934 }, { 0x71C7, 8937 }, { 0x4C49, 8938 }, { 0x4C4A, 8943 }, { 0x4C4B, 8948 }, { 0x4C4C, 8953 }, { 0x4C4D, 8958 }, { 0x4C40, 8963 }, { 0x4C41, 8968 }, { 0x4C38, 8973 }, { 0x4C47, 8978 }, { 0x4C3D, 8983 }, { 0x4C3C, 8988 }, { 0x4C4F, 8993 }, { 0x4C35, 8998 }, { 0x4C36, 9003 }, { 0x4C37, 9008 }, { 0x4C44, 9013 }, { 0x4C34, 9018 }, { 0x4C46, 9023 }, { 0x4C3F, 9028 }, { 0x4C42, 9033 }, { 0x4C4E, 9038 }, { 0x4C3A, 9043 }, { 0x4C39, 9048 }, { 0x4C48, 9053 }, { 0x4C3E, 9058 }, { 0x4C3B, 9063 }, { 0x4C45, 9068 }, { 0x4C43, 9073 }, { 0x4C51, 9078 }, { 0x4C55, 9084 }, { 0x4C53, 9090 }, { 0x4C54, 9096 }, { 0x4C50, 9102 }, { 0x4C52, 9108 }, { 0x4C56, 9114 }, { 0x4C58, 9120 }, { 0x4C57, 9126 }, { 0x4C5A, 9132 }, { 0x4C59, 9137 }, { 0x4C5C, 9143 }, { 0x4C5D, 9150 }, { 0x4C60, 9156 }, { 0x4C5F, 9161 }, { 0x4C61, 9167 }, { 0x4C62, 9174 }, { 0x4C5B, 9180 }, { 0x4C5E, 9186 }, { 0x4C69, 9193 }, { 0x4C6C, 9198 }, { 0x4C64, 9204 }, { 0x4C63, 9210 }, { 0x4C65, 9215 }, { 0x4C66, 9222 }, { 0x4C68, 9228 }, { 0x4C67, 9233 }, { 0x4C6A, 9239 }, { 0x4C6B, 9246 }, { 0x6D79, 9252 }, { 0x1BE0, 9254 }, { 0x1C1C, 9255 }, { 0x6EC1, 9256 }, { 0x1BE5, 9260 }, { 0x1CD9, 9264 }, { 0x1BE4, 9266 }, { 0x6D51, 9269 }, { 0x6D72, 9270 }, { 0x6D78, 9272 }, { 0x1C1C, 9274 }, { 0x1BE0, 9277 }, { 0x6CAD, 9280 }, { 0x6FE9, 9283 }, { 0x6D4A, 9289 }, { 0x6D3B, 9290 }, { 0x6C89, 9291 }, { 0x1BDF, 9293 }, { 0x1C1A, 9294 }, { 0x1BC3, 9295 }, { 0x1BE2, 9296 }, { 0x1D9F, 9297 }, { 0x006C, 9299 }, { 0x6E6A, 9300 }, { 0x2290, 9306 }, { 0x70E3, 9310 }, { 0x2298, 9314 }, { 0x6CFA, 9320 }, { 0x2163, 9324 }, { 0x6C59, 9325 }, { 0x221F, 9328 }, { 0x7211, 9331 }, { 0x71E0, 9334 }, { 0x722D, 9337 }, { 0x720D, 9341 }, { 0x71DA, 9345 }, { 0x71DD, 9348 }, { 0x71EC, 9351 }, { 0x71DE, 9353 }, { 0x71E3, 9355 }, { 0x71E8, 9358 }, { 0x71E4, 9361 }, { 0x71E7, 9364 }, { 0x71E6, 9367 }, { 0x71EB, 9370 }, { 0x71E2, 9373 }, { 0x71EA, 9376 }, { 0x71E9, 9379 }, { 0x71E5, 9382 }, { 0x7212, 9385 }, { 0x7213, 9388 }, { 0x7214, 9393 }, { 0x7215, 9398 }, { 0x7216, 9403 }, { 0x7217, 9408 }, { 0x7218, 9413 }, { 0x7219, 9418 }, { 0x721A, 9423 }, { 0x721B, 9428 }, { 0x721C, 9433 }, { 0x721D, 9438 }, { 0x721E, 9443 }, { 0x721F, 9448 }, { 0x7220, 9453 }, { 0x7221, 9458 }, { 0x7222, 9463 }, { 0x7223, 9468 }, { 0x7224, 9473 }, { 0x7225, 9478 }, { 0x7226, 9483 }, { 0x7227, 9488 }, { 0x7228, 9493 }, { 0x7229, 9498 }, { 0x722A, 9503 }, { 0x722B, 9508 }, { 0x722C, 9513 }, { 0x71F3, 9518 }, { 0x71F4, 9523 }, { 0x71F5, 9528 }, { 0x71F6, 9533 }, { 0x71F7, 9538 }, { 0x71F8, 9543 }, { 0x71F9, 9548 }, { 0x71FA, 9553 }, { 0x71FB, 9558 }, { 0x71FC, 9563 }, { 0x71FD, 9568 }, { 0x71FE, 9573 }, { 0x71FF, 9578 }, { 0x7200, 9583 }, { 0x7201, 9588 }, { 0x7202, 9593 }, { 0x7203, 9598 }, { 0x7204, 9603 }, { 0x7205, 9608 }, { 0x7206, 9613 }, { 0x7207, 9618 }, { 0x7208, 9623 }, { 0x7209, 9628 }, { 0x720A, 9633 }, { 0x720B, 9638 }, { 0x720C, 9643 }, { 0x722F, 9648 }, { 0x720F, 9652 }, { 0x71DB, 9656 }, { 0x71D2, 9659 }, { 0x7230, 9661 }, { 0x71D6, 9663 }, { 0x71EF, 9666 }, { 0x71D5, 9669 }, { 0x71D7, 9672 }, { 0x720E, 9675 }, { 0x71E1, 9678 }, { 0x71DC, 9680 }, { 0x71F1, 9682 }, { 0x722E, 9685 }, { 0x71D8, 9688 }, { 0x71EE, 9690 }, { 0x71D4, 9693 }, { 0x71ED, 9696 }, { 0x71D9, 9698 }, { 0x7210, 9700 }, { 0x71F2, 9703 }, { 0x71D3, 9706 }, { 0x71F0, 9709 }, { 0x71DF, 9712 }, { 0x15FC, 9714 }, { 0x1604, 9718 }, { 0x15FD, 9722 }, { 0x1602, 9726 }, { 0x1600, 9730 }, { 0x1606, 9734 }, { 0x15FE, 9738 }, { 0x15FF, 9742 }, { 0x15F5, 9746 }, { 0x15F7, 9750 }, { 0x15E9, 9754 }, { 0x15F1, 9758 }, { 0x15F4, 9762 }, { 0x15FB, 9766 }, { 0x1601, 9770 }, { 0x15F2, 9774 }, { 0x15F8, 9778 }, { 0x15ED, 9782 }, { 0x15EF, 9786 }, { 0x1603, 9790 }, { 0x15F6, 9794 }, { 0x15EA, 9798 }, { 0x15EE, 9802 }, { 0x1605, 9806 }, { 0x15F9, 9810 }, { 0x15EB, 9814 }, { 0x15F3, 9818 }, { 0x15F0, 9822 }, { 0x15EC, 9826 }, { 0x15FA, 9830 }, { 0x1607, 9834 }, { 0x1608, 9838 }, { 0x1609, 9842 }, { 0x160A, 9846 }, { 0x160B, 9850 }, { 0x16FB, 9854 }, { 0x1700, 9859 }, { 0x16FC, 9864 }, { 0x16FF, 9869 }, { 0x16FE, 9874 }, { 0x1703, 9879 }, { 0x16FA, 9884 }, { 0x1702, 9889 }, { 0x1701, 9894 }, { 0x16FD, 9899 }, { 0x16F6, 9904 }, { 0x1712, 9909 }, { 0x16F7, 9913 }, { 0x16F0, 9918 }, { 0x16D5, 9923 }, { 0x1715, 9929 }, { 0x171A, 9934 }, { 0x1716, 9938 }, { 0x1711, 9942 }, { 0x171B, 9946 }, { 0x16F3, 9950 }, { 0x16F4, 9955 }, { 0x16F5, 9960 }, { 0x16DC, 9965 }, { 0x1710, 9969 }, { 0x170E, 9973 }, { 0x1713, 9977 }, { 0x16F1, 9981 }, { 0x16F2, 9985 }, { 0x1717, 9989 }, { 0x1718, 9993 }, { 0x1714, 9997 }, { 0x16F8, 10003 }, { 0x170F, 10008 }, { 0x1719, 10012 }, { 0x1705, 10016 }, { 0x170A, 10021 }, { 0x1706, 10026 }, { 0x1709, 10031 }, { 0x1708, 10036 }, { 0x170D, 10041 }, { 0x1704, 10046 }, { 0x170C, 10051 }, { 0x170B, 10056 }, { 0x1707, 10061 }, { 0x16DD, 10066 }, { 0x16EA, 10071 }, { 0x16E1, 10076 }, { 0x16E7, 10081 }, { 0x16E5, 10086 }, { 0x16DF, 10091 }, { 0x16EB, 10096 }, { 0x16ED, 10101 }, { 0x16E2, 10106 }, { 0x16EF, 10111 }, { 0x16E8, 10117 }, { 0x16EC, 10123 }, { 0x16E9, 10128 }, { 0x16E3, 10133 }, { 0x16E6, 10138 }, { 0x16DE, 10143 }, { 0x16E4, 10149 }, { 0x16E0, 10154 }, { 0x16EE, 10160 }, { 0x16C8, 10166 }, { 0x16CA, 10170 }, { 0x16CC, 10174 }, { 0x16B4, 10178 }, { 0x16AC, 10182 }, { 0x16CE, 10186 }, { 0x16CB, 10190 }, { 0x16C0, 10194 }, { 0x16BB, 10198 }, { 0x16B3, 10202 }, { 0x16CF, 10206 }, { 0x16BE, 10210 }, { 0x16CD, 10214 }, { 0x16C2, 10218 }, { 0x16D0, 10222 }, { 0x16C7, 10226 }, { 0x16A6, 10230 }, { 0x16B9, 10235 }, { 0x16C9, 10240 }, { 0x16A0, 10245 }, { 0x16B8, 10250 }, { 0x16A7, 10255 }, { 0x16B1, 10260 }, { 0x16BC, 10265 }, { 0x16A8, 10270 }, { 0x16A2, 10275 }, { 0x16A1, 10280 }, { 0x16BA, 10285 }, { 0x16B2, 10290 }, { 0x16AD, 10295 }, { 0x16C1, 10300 }, { 0x16A3, 10304 }, { 0x16A9, 10308 }, { 0x16BF, 10312 }, { 0x16A4, 10316 }, { 0x16B7, 10321 }, { 0x16C6, 10326 }, { 0x169D, 10331 }, { 0x16B5, 10336 }, { 0x16C5, 10341 }, { 0x16AF, 10346 }, { 0x16BD, 10351 }, { 0x16A5, 10356 }, { 0x169E, 10361 }, { 0x169F, 10366 }, { 0x16B6, 10371 }, { 0x16C3, 10376 }, { 0x16C4, 10381 }, { 0x16B0, 10386 }, { 0x16AB, 10391 }, { 0x16AE, 10396 }, { 0x16AA, 10400 }, { 0x16D1, 10404 }, { 0x16F9, 10409 }, { 0x16DA, 10414 }, { 0x16D4, 10419 }, { 0x16D9, 10426 }, { 0x16DB, 10431 }, { 0x16D7, 10436 }, { 0x16D8, 10442 }, { 0x16D6, 10451 }, { 0x16D3, 10457 }, { 0x16D2, 10463 }, { 0x38B3, 10469 }, { 0x38BA, 10473 }, { 0x38C2, 10477 }, { 0x38C4, 10482 }, { 0x38C5, 10487 }, { 0x38C3, 10492 }, { 0x38B8, 10497 }, { 0x38B5, 10501 }, { 0x38B9, 10505 }, { 0x38B7, 10509 }, { 0x38B4, 10513 }, { 0x38C1, 10517 }, { 0x38C0, 10521 }, { 0x38BF, 10525 }, { 0x38BB, 10529 }, { 0x38BD, 10533 }, { 0x38B6, 10537 }, { 0x38BE, 10541 }, { 0x38BC, 10545 }, { 0x38B1, 10549 }, { 0x389D, 10554 }, { 0x388D, 10559 }, { 0x3895, 10564 }, { 0x38A3, 10569 }, { 0x3889, 10574 }, { 0x38AF, 10579 }, { 0x3883, 10584 }, { 0x38AB, 10589 }, { 0x38A5, 10594 }, { 0x389B, 10599 }, { 0x389F, 10604 }, { 0x38A9, 10609 }, { 0x3891, 10614 }, { 0x3897, 10619 }, { 0x38AD, 10624 }, { 0x38A7, 10629 }, { 0x388F, 10634 }, { 0x3885, 10639 }, { 0x388B, 10644 }, { 0x3893, 10649 }, { 0x38A1, 10654 }, { 0x3899, 10659 }, { 0x3887, 10664 }, { 0x38B2, 10669 }, { 0x389E, 10674 }, { 0x388E, 10679 }, { 0x3896, 10684 }, { 0x38A4, 10689 }, { 0x388A, 10694 }, { 0x38B0, 10699 }, { 0x3884, 10704 }, { 0x38AC, 10709 }, { 0x38A6, 10714 }, { 0x389C, 10719 }, { 0x38A0, 10724 }, { 0x38AA, 10729 }, { 0x3892, 10734 }, { 0x3898, 10739 }, { 0x38AE, 10744 }, { 0x38A8, 10749 }, { 0x3890, 10754 }, { 0x3886, 10759 }, { 0x388C, 10764 }, { 0x3894, 10769 }, { 0x38A2, 10774 }, { 0x389A, 10779 }, { 0x3888, 10784 }, { 0x38C9, 10789 }, { 0x38CA, 10794 }, { 0x38C6, 10799 }, { 0x38C8, 10803 }, { 0x38C7, 10807 }, { 0x2537, 10811 }, { 0x2496, 10814 }, { 0x2494, 10820 }, { 0x2497, 10824 }, { 0x6CE4, 10830 }, { 0x271C, 10832 }, { 0x292C, 10836 }, { 0x1EA9, 10840 }, { 0x1E98, 10843 }, { 0x2915, 10846 }, { 0x1EA5, 10850 }, { 0x6E58, 10853 }, { 0x1F67, 10858 }, { 0x1E97, 10861 }, { 0x2916, 10864 }, { 0x1EA6, 10868 }, { 0x1F3D, 10871 }, { 0x1F69, 10874 }, { 0x1F65, 10878 }, { 0x1BD9, 10880 }, { 0x1C0E, 10883 }, { 0x6DA7, 10886 }, { 0x291D, 10890 }, { 0x6DA8, 10896 }, { 0x6EEB, 10900 }, { 0x6DD0, 10903 }, { 0x2523, 10905 }, { 0x6F25, 10908 }, { 0x2562, 10911 }, { 0x2561, 10915 }, { 0x1C05, 10919 }, { 0x25CF, 10923 }, { 0x25B0, 10927 }, { 0x25AF, 10931 }, { 0x34B0, 10935 }, { 0x34AF, 10938 }, { 0x34C3, 10940 }, { 0x34C8, 10943 }, { 0x34C4, 10946 }, { 0x34C7, 10949 }, { 0x34C6, 10952 }, { 0x34CB, 10955 }, { 0x34C2, 10958 }, { 0x34CA, 10961 }, { 0x34C9, 10964 }, { 0x34C5, 10967 }, { 0x34BA, 10970 }, { 0x34B8, 10973 }, { 0x34BB, 10976 }, { 0x34B9, 10979 }, { 0x34BC, 10982 }, { 0x34C0, 10985 }, { 0x34C1, 10988 }, { 0x34BE, 10991 }, { 0x34B7, 10994 }, { 0x34BF, 10997 }, { 0x34BD, 11000 }, { 0x34B5, 11003 }, { 0x34B6, 11006 }, { 0x34B1, 11009 }, { 0x33EB, 11012 }, { 0x3483, 11015 }, { 0x33C6, 11018 }, { 0x345C, 11021 }, { 0x3437, 11024 }, { 0x33EC, 11027 }, { 0x33F4, 11030 }, { 0x348C, 11033 }, { 0x33CE, 11036 }, { 0x3465, 11039 }, { 0x343F, 11042 }, { 0x3408, 11045 }, { 0x34A1, 11048 }, { 0x33E1, 11051 }, { 0x3479, 11054 }, { 0x3452, 11057 }, { 0x3402, 11060 }, { 0x349B, 11063 }, { 0x33DB, 11066 }, { 0x3473, 11069 }, { 0x344C, 11072 }, { 0x33A2, 11075 }, { 0x3484, 11078 }, { 0x33FA, 11081 }, { 0x3493, 11084 }, { 0x33D3, 11087 }, { 0x346B, 11090 }, { 0x3444, 11093 }, { 0x340F, 11096 }, { 0x34A8, 11099 }, { 0x33E7, 11102 }, { 0x347F, 11105 }, { 0x3458, 11108 }, { 0x33EE, 11111 }, { 0x3486, 11114 }, { 0x33C8, 11117 }, { 0x345F, 11120 }, { 0x3439, 11123 }, { 0x33C7, 11126 }, { 0x3409, 11129 }, { 0x34A2, 11132 }, { 0x33E2, 11135 }, { 0x347A, 11138 }, { 0x3453, 11141 }, { 0x340C, 11144 }, { 0x34A5, 11147 }, { 0x33E5, 11150 }, { 0x347D, 11153 }, { 0x3456, 11156 }, { 0x3400, 11159 }, { 0x3499, 11162 }, { 0x33D9, 11165 }, { 0x3471, 11168 }, { 0x344A, 11171 }, { 0x3410, 11174 }, { 0x34AA, 11177 }, { 0x33E8, 11180 }, { 0x3480, 11183 }, { 0x3459, 11186 }, { 0x3411, 11189 }, { 0x34AB, 11192 }, { 0x34AD, 11195 }, { 0x33E9, 11198 }, { 0x3481, 11201 }, { 0x345A, 11204 }, { 0x345D, 11207 }, { 0x3413, 11210 }, { 0x33F2, 11213 }, { 0x348A, 11216 }, { 0x33CC, 11219 }, { 0x3463, 11222 }, { 0x343D, 11225 }, { 0x3401, 11228 }, { 0x349A, 11231 }, { 0x33DA, 11234 }, { 0x3472, 11237 }, { 0x344B, 11240 }, { 0x3404, 11243 }, { 0x349D, 11246 }, { 0x33DD, 11249 }, { 0x3475, 11252 }, { 0x344E, 11255 }, { 0x33FC, 11258 }, { 0x3495, 11261 }, { 0x33D5, 11264 }, { 0x346D, 11267 }, { 0x3446, 11270 }, { 0x3438, 11273 }, { 0x33FB, 11276 }, { 0x3494, 11279 }, { 0x33D4, 11282 }, { 0x346C, 11285 }, { 0x3445, 11288 }, { 0x33F0, 11291 }, { 0x3488, 11294 }, { 0x33CA, 11297 }, { 0x3461, 11300 }, { 0x343B, 11303 }, { 0x340B, 11306 }, { 0x34A4, 11309 }, { 0x33E4, 11312 }, { 0x347C, 11315 }, { 0x3455, 11318 }, { 0x3406, 11321 }, { 0x349F, 11324 }, { 0x33DF, 11327 }, { 0x3477, 11330 }, { 0x3450, 11333 }, { 0x33A9, 11336 }, { 0x33F3, 11339 }, { 0x348B, 11342 }, { 0x33CD, 11345 }, { 0x3464, 11348 }, { 0x343E, 11351 }, { 0x341A, 11354 }, { 0x33BC, 11357 }, { 0x342D, 11360 }, { 0x33B6, 11363 }, { 0x33FE, 11366 }, { 0x3497, 11369 }, { 0x33D7, 11372 }, { 0x346F, 11375 }, { 0x3448, 11378 }, { 0x3427, 11381 }, { 0x33A3, 11384 }, { 0x33AE, 11387 }, { 0x341F, 11390 }, { 0x33F9, 11393 }, { 0x3491, 11396 }, { 0x33D2, 11399 }, { 0x3469, 11402 }, { 0x3443, 11405 }, { 0x33C2, 11408 }, { 0x34A9, 11411 }, { 0x3433, 11414 }, { 0x33EF, 11417 }, { 0x33A4, 11420 }, { 0x3487, 11423 }, { 0x33C9, 11426 }, { 0x3460, 11429 }, { 0x3415, 11432 }, { 0x343A, 11435 }, { 0x33BD, 11438 }, { 0x342E, 11441 }, { 0x340D, 11444 }, { 0x33C0, 11447 }, { 0x3431, 11450 }, { 0x33F6, 11453 }, { 0x348E, 11456 }, { 0x33D0, 11459 }, { 0x3467, 11462 }, { 0x3441, 11465 }, { 0x33B4, 11468 }, { 0x3425, 11471 }, { 0x33F5, 11474 }, { 0x348D, 11477 }, { 0x33CF, 11480 }, { 0x3466, 11483 }, { 0x3440, 11486 }, { 0x33C3, 11489 }, { 0x3434, 11492 }, { 0x3403, 11495 }, { 0x349C, 11498 }, { 0x33DC, 11501 }, { 0x3474, 11504 }, { 0x344D, 11507 }, { 0x33C4, 11510 }, { 0x340A, 11513 }, { 0x34A3, 11516 }, { 0x33E3, 11519 }, { 0x347B, 11522 }, { 0x3454, 11525 }, { 0x3435, 11528 }, { 0x3412, 11531 }, { 0x34AC, 11534 }, { 0x33EA, 11537 }, { 0x3482, 11540 }, { 0x345B, 11543 }, { 0x3414, 11546 }, { 0x33A7, 11549 }, { 0x3418, 11552 }, { 0x33B5, 11555 }, { 0x3426, 11558 }, { 0x33B8, 11561 }, { 0x3405, 11564 }, { 0x349E, 11567 }, { 0x33DE, 11570 }, { 0x3476, 11573 }, { 0x344F, 11576 }, { 0x3429, 11579 }, { 0x33B0, 11582 }, { 0x33FD, 11585 }, { 0x3496, 11588 }, { 0x33D6, 11591 }, { 0x346E, 11594 }, { 0x3447, 11597 }, { 0x3421, 11600 }, { 0x33AF, 11603 }, { 0x3420, 11606 }, { 0x33F1, 11609 }, { 0x33A5, 11612 }, { 0x3489, 11615 }, { 0x33CB, 11618 }, { 0x3462, 11621 }, { 0x3416, 11624 }, { 0x343C, 11627 }, { 0x33BF, 11630 }, { 0x3430, 11633 }, { 0x33BA, 11636 }, { 0x3407, 11639 }, { 0x34A0, 11642 }, { 0x33E0, 11645 }, { 0x3478, 11648 }, { 0x3451, 11651 }, { 0x342B, 11654 }, { 0x33A8, 11657 }, { 0x3419, 11660 }, { 0x33B2, 11663 }, { 0x33FF, 11666 }, { 0x3498, 11669 }, { 0x33D8, 11672 }, { 0x3470, 11675 }, { 0x3449, 11678 }, { 0x3423, 11681 }, { 0x33AD, 11684 }, { 0x3492, 11687 }, { 0x346A, 11690 }, { 0x341E, 11693 }, { 0x33F7, 11696 }, { 0x33AB, 11699 }, { 0x348F, 11702 }, { 0x341C, 11705 }, { 0x33AA, 11708 }, { 0x341B, 11711 }, { 0x33F8, 11714 }, { 0x3490, 11717 }, { 0x33D1, 11720 }, { 0x3468, 11723 }, { 0x3442, 11726 }, { 0x33B7, 11729 }, { 0x3428, 11732 }, { 0x33ED, 11735 }, { 0x3485, 11738 }, { 0x340E, 11741 }, { 0x34A6, 11744 }, { 0x33E6, 11747 }, { 0x347E, 11750 }, { 0x3457, 11753 }, { 0x345E, 11756 }, { 0x33BE, 11759 }, { 0x342F, 11762 }, { 0x33C5, 11765 }, { 0x3436, 11768 }, { 0x33B9, 11771 }, { 0x342A, 11774 }, { 0x33B1, 11777 }, { 0x3422, 11780 }, { 0x33A6, 11783 }, { 0x3417, 11786 }, { 0x33BB, 11789 }, { 0x342C, 11792 }, { 0x33B3, 11795 }, { 0x3424, 11798 }, { 0x33AC, 11801 }, { 0x341D, 11804 }, { 0x34CD, 11807 }, { 0x34B2, 11811 }, { 0x34B3, 11815 }, { 0x34CC, 11819 }, { 0x34B4, 11823 }, { 0x33C1, 11827 }, { 0x34A7, 11830 }, { 0x3432, 11833 }, { 0x34AE, 11836 }, { 0x1C56, 11839 }, { 0x1E44, 11841 }, { 0x0064, 11842 }, { 0x2189, 11844 }, { 0x1BC1, 11846 }, { 0x4BDE, 11847 }, { 0x4BDC, 11850 }, { 0x4BCF, 11854 }, { 0x4BDD, 11857 }, { 0x4BD1, 11860 }, { 0x4BD6, 11863 }, { 0x4BD2, 11866 }, { 0x4BD5, 11869 }, { 0x4BD4, 11872 }, { 0x4BD9, 11875 }, { 0x4BD0, 11878 }, { 0x4BD8, 11881 }, { 0x4BD7, 11884 }, { 0x4BD3, 11887 }, { 0x4BC4, 11890 }, { 0x4BCA, 11894 }, { 0x4BC6, 11898 }, { 0x4BCC, 11902 }, { 0x4BC8, 11906 }, { 0x4BC5, 11910 }, { 0x4BCD, 11914 }, { 0x4BCE, 11918 }, { 0x4BCB, 11922 }, { 0x4BC7, 11926 }, { 0x4BC9, 11930 }, { 0x4BB9, 11934 }, { 0x4BAF, 11937 }, { 0x4BBA, 11940 }, { 0x4BBC, 11943 }, { 0x4BB8, 11946 }, { 0x4BB1, 11949 }, { 0x4BA7, 11952 }, { 0x4BB5, 11955 }, { 0x4BB0, 11958 }, { 0x4BAA, 11961 }, { 0x4BAD, 11964 }, { 0x4BB4, 11967 }, { 0x4BB6, 11970 }, { 0x4BAB, 11973 }, { 0x4BBF, 11976 }, { 0x4BB2, 11979 }, { 0x4BBB, 11982 }, { 0x4BBE, 11985 }, { 0x4BC0, 11988 }, { 0x4BA8, 11991 }, { 0x4BA9, 11994 }, { 0x4BB7, 11997 }, { 0x4BAE, 12000 }, { 0x4BB3, 12003 }, { 0x4BBD, 12006 }, { 0x4BAC, 12010 }, { 0x4BDA, 12014 }, { 0x4BDB, 12017 }, { 0x4BDF, 12020 }, { 0x4BC1, 12023 }, { 0x4BC2, 12028 }, { 0x4BC3, 12033 }, { 0x1CC2, 12039 }, { 0x217F, 12041 }, { 0x21F5, 12042 }, { 0x6DB1, 12044 }, { 0x6DB7, 12045 }, { 0x6D5F, 12047 }, { 0x6CB7, 12049 }, { 0x6FF7, 12051 }, { 0x6EBD, 12053 }, { 0x6E54, 12056 }, { 0x6D21, 12061 }, { 0x6FFB, 12062 }, { 0x6D76, 12063 }, { 0x6CB5, 12065 }, { 0x6E4F, 12067 }, { 0x6E50, 12068 }, { 0x1F07, 12072 }, { 0x26B8, 12074 }, { 0x6D61, 12081 }, { 0x6E13, 12082 }, { 0x6DD4, 12084 }, { 0x6D52, 12086 }, { 0x70CD, 12087 }, { 0x70C7, 12091 }, { 0x70D3, 12095 }, { 0x70BA, 12099 }, { 0x709C, 12102 }, { 0x70A6, 12105 }, { 0x70C1, 12108 }, { 0x6DDE, 12110 }, { 0x6EA9, 12111 }, { 0x6E8A, 12112 }, { 0x7004, 12115 }, { 0x6D9F, 12117 }, { 0x3D8A, 12120 }, { 0x1C93, 12123 }, { 0x7188, 12125 }, { 0x6EFE, 12128 }, { 0x6E02, 12131 }, { 0x6EFD, 12133 }, { 0x1C92, 12136 }, { 0x6CCA, 12138 }, { 0x1C62, 12140 }, { 0x0061, 12142 }, { 0x3856, 12144 }, { 0x385B, 12147 }, { 0x3857, 12150 }, { 0x385A, 12153 }, { 0x3859, 12156 }, { 0x385E, 12159 }, { 0x3855, 12162 }, { 0x385D, 12165 }, { 0x385C, 12168 }, { 0x3858, 12171 }, { 0x383A, 12174 }, { 0x383F, 12178 }, { 0x383D, 12182 }, { 0x3839, 12186 }, { 0x3840, 12190 }, { 0x3841, 12194 }, { 0x383C, 12198 }, { 0x383B, 12202 }, { 0x383E, 12206 }, { 0x3842, 12210 }, { 0x3810, 12214 }, { 0x3813, 12217 }, { 0x3811, 12220 }, { 0x3815, 12223 }, { 0x3812, 12226 }, { 0x3814, 12229 }, { 0x382D, 12232 }, { 0x3825, 12235 }, { 0x3818, 12238 }, { 0x3838, 12241 }, { 0x381E, 12244 }, { 0x3816, 12247 }, { 0x3834, 12250 }, { 0x3830, 12253 }, { 0x3828, 12256 }, { 0x382A, 12259 }, { 0x3833, 12262 }, { 0x3837, 12265 }, { 0x3823, 12268 }, { 0x3835, 12271 }, { 0x3832, 12274 }, { 0x3831, 12277 }, { 0x382E, 12280 }, { 0x381C, 12283 }, { 0x3829, 12286 }, { 0x3826, 12289 }, { 0x3819, 12292 }, { 0x381F, 12295 }, { 0x3817, 12298 }, { 0x382F, 12301 }, { 0x381B, 12304 }, { 0x3821, 12307 }, { 0x3827, 12310 }, { 0x382C, 12313 }, { 0x382B, 12316 }, { 0x3836, 12319 }, { 0x3824, 12322 }, { 0x381D, 12325 }, { 0x381A, 12328 }, { 0x3822, 12331 }, { 0x3820, 12334 }, { 0x3848, 12337 }, { 0x3847, 12341 }, { 0x3851, 12345 }, { 0x384D, 12349 }, { 0x384E, 12353 }, { 0x3850, 12357 }, { 0x384C, 12361 }, { 0x384F, 12365 }, { 0x384B, 12369 }, { 0x3849, 12373 }, { 0x3852, 12377 }, { 0x3845, 12381 }, { 0x3844, 12385 }, { 0x3846, 12389 }, { 0x3843, 12393 }, { 0x3854, 12397 }, { 0x3853, 12402 }, { 0x384A, 12407 }, { 0x3860, 12412 }, { 0x3861, 12415 }, { 0x385F, 12419 }, { 0x3862, 12422 }, { 0x71BE, 12426 }, { 0x1DA4, 12427 }, { 0x20ED, 12429 }, { 0x6EB1, 12431 }, { 0x2936, 12433 }, { 0x6DE3, 12437 }, { 0x71CA, 12439 }, { 0x1E37, 12440 }, { 0x1E35, 12443 }, { 0x1DAD, 12446 }, { 0x2648, 12449 }, { 0x1D95, 12456 }, { 0x1E74, 12461 }, { 0x1E76, 12467 }, { 0x1E09, 12475 }, { 0x1E69, 12478 }, { 0x1E0A, 12483 }, { 0x1E6A, 12486 }, { 0x1C58, 12491 }, { 0x6FE5, 12493 }, { 0x6E85, 12494 }, { 0x24D9, 12497 }, { 0x1E2D, 12500 }, { 0x264B, 12502 }, { 0x1E7A, 12507 }, { 0x1E8D, 12511 }, { 0x71A4, 12513 }, { 0x71C4, 12516 }, { 0x21CB, 12517 }, { 0x1C59, 12520 }, { 0x6D7B, 12522 }, { 0x7194, 12523 }, { 0x6F80, 12525 }, { 0x6F81, 12530 }, { 0x6F4E, 12534 }, { 0x6F5F, 12538 }, { 0x6F69, 12543 }, { 0x6F6B, 12547 }, { 0x6F3D, 12554 }, { 0x718E, 12559 }, { 0x6F72, 12563 }, { 0x6F7F, 12567 }, { 0x6F56, 12571 }, { 0x6F57, 12575 }, { 0x6F58, 12582 }, { 0x7181, 12589 }, { 0x7184, 12592 }, { 0x6DC1, 12595 }, { 0x6F71, 12597 }, { 0x6F53, 12600 }, { 0x6F46, 12604 }, { 0x6F6C, 12608 }, { 0x6DFC, 12612 }, { 0x6EFF, 12614 }, { 0x6CD9, 12616 }, { 0x6E38, 12618 }, { 0x6E60, 12620 }, { 0x6FCD, 12621 }, { 0x6D5A, 12623 }, { 0x6CA0, 12624 }, { 0x2920, 12629 }, { 0x1C0D, 12632 }, { 0x224D, 12635 }, { 0x6CAF, 12638 }, { 0x6CB8, 12641 }, { 0x1C0F, 12646 }, { 0x1C0C, 12649 }, { 0x6C7B, 12652 }, { 0x26EC, 12655 }, { 0x70DC, 12660 }, { 0x227F, 12664 }, { 0x227D, 12667 }, { 0x227C, 12670 }, { 0x6D73, 12673 }, { 0x2257, 12675 }, { 0x6C58, 12677 }, { 0x6C50, 12681 }, { 0x000E, 12684 }, { 0x20E2, 12686 }, { 0x2331, 12688 }, { 0x1F64, 12691 }, { 0x14CE, 12692 }, { 0x14CF, 12693 }, { 0x14D0, 12694 }, { 0x6CED, 12695 }, { 0x21F3, 12697 }, { 0x2248, 12698 }, { 0x2247, 12701 }, { 0x2AA0, 12704 }, { 0x6DA2, 12706 }, { 0x71A8, 12707 }, { 0x6D4B, 12709 }, { 0x1BBE, 12710 }, { 0x718D, 12712 }, { 0x6EEF, 12719 }, { 0x1F11, 12721 }, { 0x6C7A, 12723 }, { 0x21FB, 12724 }, { 0x6E41, 12727 }, { 0x6EAE, 12730 }, { 0x2577, 12731 }, { 0x220F, 12732 }, { 0x6DCA, 12733 }, { 0x6DC6, 12734 }, { 0x6D59, 12736 }, { 0x1C6B, 12738 }, { 0x2198, 12740 }, { 0x6C57, 12743 }, { 0x6C52, 12748 }, { 0x6C7E, 12752 }, { 0x2335, 12756 }, { 0x2334, 12760 }, { 0x24ED, 12765 }, { 0x290F, 12769 }, { 0x20E9, 12773 }, { 0x20E8, 12777 }, { 0x24A8, 12781 }, { 0x24A4, 12788 }, { 0x24A5, 12795 }, { 0x24AA, 12802 }, { 0x24D6, 12809 }, { 0x20E5, 12812 }, { 0x2130, 12816 }, { 0x20E6, 12820 }, { 0x6EB6, 12823 }, { 0x1E2C, 12827 }, { 0x6F29, 12829 }, { 0x2A95, 12832 }, { 0x24EB, 12835 }, { 0x268A, 12840 }, { 0x268C, 12845 }, { 0x24F1, 12850 }, { 0x2A9D, 12855 }, { 0x005B, 12859 }, { 0x1F32, 12862 }, { 0x1F30, 12867 }, { 0x1F31, 12872 }, { 0x1E93, 12877 }, { 0x232F, 12879 }, { 0x1D36, 12882 }, { 0x1D1D, 12886 }, { 0x1D85, 12889 }, { 0x1D37, 12896 }, { 0x1D82, 12901 }, { 0x24A2, 12907 }, { 0x2666, 12913 }, { 0x265E, 12917 }, { 0x1D5D, 12921 }, { 0x1D57, 12925 }, { 0x245E, 12931 }, { 0x7137, 12938 }, { 0x1D88, 12942 }, { 0x26BE, 12946 }, { 0x20E3, 12950 }, { 0x20E7, 12954 }, { 0x20E4, 12958 }, { 0x24DD, 12962 }, { 0x2A9B, 12966 }, { 0x2AA7, 12970 }, { 0x2AA5, 12974 }, { 0x2AA3, 12979 }, { 0x24DF, 12983 }, { 0x2236, 12986 }, { 0x2A99, 12989 }, { 0x28F7, 12992 }, { 0x2A97, 12996 }, { 0x2534, 13000 }, { 0x1BD0, 13004 }, { 0x291B, 13008 }, { 0x1E52, 13011 }, { 0x28FF, 13016 }, { 0x1BCC, 13020 }, { 0x6F23, 13024 }, { 0x003B, 13027 }, { 0x24E7, 13030 }, { 0x24E9, 13038 }, { 0x1BF9, 13046 }, { 0x24E5, 13051 }, { 0x1F2C, 13056 }, { 0x1F2A, 13061 }, { 0x1F2B, 13066 }, { 0x2532, 13070 }, { 0x1E91, 13073 }, { 0x7000, 13075 }, { 0x6F27, 13077 }, { 0x6EC9, 13080 }, { 0x2336, 13083 }, { 0x231F, 13085 }, { 0x2919, 13089 }, { 0x2AA1, 13093 }, { 0x2529, 13097 }, { 0x2913, 13102 }, { 0x1F41, 13107 }, { 0x1E54, 13111 }, { 0x0008, 13114 }, { 0x1F26, 13116 }, { 0x1F24, 13120 }, { 0x1F25, 13124 }, { 0x28F5, 13127 }, { 0x28FC, 13130 }, { 0x1BDC, 13133 }, { 0x256E, 13135 }, { 0x256C, 13141 }, { 0x256D, 13148 }, { 0x6E52, 13155 }, { 0x71BF, 13157 }, { 0x6F1D, 13159 }, { 0x1C51, 13160 }, { 0x3390, 13162 }, { 0x3392, 13165 }, { 0x3394, 13168 }, { 0x3395, 13171 }, { 0x3396, 13174 }, { 0x3391, 13177 }, { 0x3372, 13180 }, { 0x337C, 13183 }, { 0x3375, 13186 }, { 0x3393, 13189 }, { 0x338B, 13192 }, { 0x3378, 13195 }, { 0x3388, 13198 }, { 0x337B, 13201 }, { 0x3379, 13204 }, { 0x3383, 13207 }, { 0x3381, 13210 }, { 0x3382, 13213 }, { 0x3399, 13216 }, { 0x3373, 13219 }, { 0x3384, 13222 }, { 0x3376, 13225 }, { 0x3397, 13228 }, { 0x3398, 13231 }, { 0x338C, 13234 }, { 0x3389, 13237 }, { 0x338E, 13240 }, { 0x3386, 13243 }, { 0x337D, 13246 }, { 0x337E, 13249 }, { 0x338F, 13252 }, { 0x338A, 13255 }, { 0x337A, 13258 }, { 0x3387, 13261 }, { 0x3374, 13264 }, { 0x338D, 13267 }, { 0x3377, 13270 }, { 0x337F, 13273 }, { 0x3385, 13276 }, { 0x339B, 13279 }, { 0x339D, 13284 }, { 0x339E, 13289 }, { 0x339A, 13294 }, { 0x339C, 13299 }, { 0x339F, 13304 }, { 0x3380, 13309 }, { 0x33A1, 13312 }, { 0x33A0, 13316 }, { 0x6E4D, 13319 }, { 0x6E4A, 13320 }, { 0x2640, 13324 }, { 0x2338, 13332 }, { 0x2351, 13335 }, { 0x2354, 13339 }, { 0x2337, 13344 }, { 0x2326, 13347 }, { 0x234F, 13349 }, { 0x2355, 13352 }, { 0x2352, 13357 }, { 0x2357, 13361 }, { 0x268D, 13367 }, { 0x2350, 13371 }, { 0x2356, 13374 }, { 0x2353, 13379 }, { 0x2358, 13383 }, { 0x2359, 13389 }, { 0x6D24, 13393 }, { 0x6DC7, 13395 }, { 0x21FF, 13397 }, { 0x219C, 13401 }, { 0x2201, 13403 }, { 0x2200, 13411 }, { 0x6D99, 13415 }, { 0x2AC9, 13417 }, { 0x6C91, 13419 }, { 0x6E18, 13422 }, { 0x6FF4, 13423 }, { 0x5BA8, 13425 }, { 0x5BA9, 13429 }, { 0x5BA7, 13433 }, { 0x5BD6, 13436 }, { 0x5BD7, 13440 }, { 0x5BD8, 13443 }, { 0x5BD5, 13446 }, { 0x5BAA, 13449 }, { 0x5BB3, 13453 }, { 0x5BB7, 13457 }, { 0x5BD3, 13461 }, { 0x5BAF, 13465 }, { 0x5BC0, 13469 }, { 0x5BB2, 13473 }, { 0x5BC7, 13477 }, { 0x5BAB, 13481 }, { 0x5BC9, 13485 }, { 0x5BCF, 13489 }, { 0x5BAD, 13493 }, { 0x5BD1, 13497 }, { 0x5BD0, 13501 }, { 0x5BB4, 13505 }, { 0x5BCD, 13509 }, { 0x5BB8, 13513 }, { 0x5BBC, 13517 }, { 0x5BBD, 13521 }, { 0x5BBB, 13525 }, { 0x5BBE, 13529 }, { 0x5BD4, 13533 }, { 0x5BB0, 13537 }, { 0x5BD2, 13541 }, { 0x5BC1, 13545 }, { 0x5BC4, 13549 }, { 0x5BB1, 13553 }, { 0x5BC8, 13557 }, { 0x5BCA, 13561 }, { 0x5BAC, 13565 }, { 0x5BAE, 13569 }, { 0x5BB5, 13573 }, { 0x5BCB, 13577 }, { 0x5BB9, 13581 }, { 0x5BBF, 13585 }, { 0x5BB6, 13589 }, { 0x5BC2, 13593 }, { 0x5BC5, 13597 }, { 0x5BC6, 13601 }, { 0x5BBA, 13605 }, { 0x5BC3, 13609 }, { 0x5BCE, 13613 }, { 0x5BCC, 13618 }, { 0x5BA4, 13623 }, { 0x5B62, 13626 }, { 0x5B6C, 13629 }, { 0x5B68, 13632 }, { 0x5B80, 13635 }, { 0x5B87, 13638 }, { 0x5B7F, 13641 }, { 0x5B77, 13644 }, { 0x5B65, 13647 }, { 0x5B71, 13650 }, { 0x5B61, 13653 }, { 0x5B82, 13656 }, { 0x5B9B, 13659 }, { 0x5B6B, 13662 }, { 0x5B69, 13665 }, { 0x5BA3, 13668 }, { 0x5B88, 13671 }, { 0x5B81, 13674 }, { 0x5B63, 13678 }, { 0x5B6E, 13682 }, { 0x5B73, 13686 }, { 0x5B9A, 13690 }, { 0x5B6D, 13694 }, { 0x5B92, 13698 }, { 0x5B91, 13702 }, { 0x5B9C, 13706 }, { 0x5B70, 13709 }, { 0x5B99, 13712 }, { 0x5B89, 13715 }, { 0x5BA5, 13718 }, { 0x5B79, 13721 }, { 0x5B78, 13724 }, { 0x5B66, 13727 }, { 0x5B84, 13730 }, { 0x5B72, 13733 }, { 0x5B75, 13736 }, { 0x5B8D, 13739 }, { 0x5B64, 13742 }, { 0x5B83, 13745 }, { 0x5B94, 13748 }, { 0x5B95, 13751 }, { 0x5B98, 13754 }, { 0x5B6F, 13757 }, { 0x5B6A, 13760 }, { 0x5B96, 13763 }, { 0x5B9D, 13766 }, { 0x5B9E, 13769 }, { 0x5B7C, 13772 }, { 0x5B90, 13775 }, { 0x5B8C, 13778 }, { 0x5B8A, 13781 }, { 0x5B7A, 13784 }, { 0x5B85, 13787 }, { 0x5B76, 13790 }, { 0x5B8E, 13793 }, { 0x5B7B, 13796 }, { 0x5B8F, 13799 }, { 0x5B8B, 13802 }, { 0x5B97, 13805 }, { 0x5B9F, 13808 }, { 0x5BA1, 13811 }, { 0x5B7E, 13814 }, { 0x5B7D, 13817 }, { 0x5BA2, 13820 }, { 0x5BD9, 13823 }, { 0x5BDA, 13826 }, { 0x5BDB, 13829 }, { 0x5BDC, 13832 }, { 0x5BDD, 13835 }, { 0x5BDE, 13838 }, { 0x5BDF, 13841 }, { 0x5B67, 13844 }, { 0x5B74, 13848 }, { 0x5B86, 13852 }, { 0x5BA0, 13856 }, { 0x5B93, 13860 }, { 0x5BE0, 13864 }, { 0x5BE1, 13868 }, { 0x5BE2, 13872 }, { 0x5BE3, 13876 }, { 0x5BE4, 13880 }, { 0x5BE5, 13884 }, { 0x5BA6, 13888 }, { 0x1FB7, 13891 }, { 0x1FB8, 13895 }, { 0x1C52, 13898 }, { 0x2559, 13900 }, { 0x1C13, 13901 }, { 0x4B4D, 13902 }, { 0x4B48, 13905 }, { 0x4B47, 13908 }, { 0x4B46, 13911 }, { 0x4B49, 13914 }, { 0x4B4A, 13917 }, { 0x4B4F, 13919 }, { 0x4B54, 13922 }, { 0x4B50, 13925 }, { 0x4B53, 13928 }, { 0x4B52, 13931 }, { 0x4B57, 13934 }, { 0x4B4E, 13937 }, { 0x4B56, 13940 }, { 0x4B55, 13943 }, { 0x4B51, 13946 }, { 0x4B42, 13949 }, { 0x4B3A, 13953 }, { 0x4B44, 13957 }, { 0x4B3C, 13961 }, { 0x4B39, 13965 }, { 0x4B43, 13969 }, { 0x4B45, 13973 }, { 0x4B3B, 13977 }, { 0x4B3D, 13981 }, { 0x4B40, 13985 }, { 0x4B3E, 13990 }, { 0x4B41, 13995 }, { 0x4B3F, 14000 }, { 0x4B4B, 14005 }, { 0x4B09, 14008 }, { 0x4B13, 14011 }, { 0x4B0B, 14014 }, { 0x4B15, 14017 }, { 0x4B0D, 14020 }, { 0x4B0A, 14023 }, { 0x4B14, 14026 }, { 0x4B16, 14029 }, { 0x4B2D, 14032 }, { 0x4B1C, 14035 }, { 0x4B28, 14038 }, { 0x4B19, 14041 }, { 0x4B37, 14044 }, { 0x4B0C, 14047 }, { 0x4B1E, 14050 }, { 0x4B17, 14053 }, { 0x4B32, 14056 }, { 0x4B2F, 14059 }, { 0x4B2A, 14062 }, { 0x4B2B, 14065 }, { 0x4B31, 14068 }, { 0x4B36, 14071 }, { 0x4B26, 14074 }, { 0x4B0E, 14077 }, { 0x4B33, 14080 }, { 0x4B30, 14083 }, { 0x4B2E, 14086 }, { 0x4B1D, 14089 }, { 0x4B23, 14092 }, { 0x4B29, 14095 }, { 0x4B1A, 14098 }, { 0x4B1F, 14101 }, { 0x4B18, 14104 }, { 0x4B38, 14107 }, { 0x4B1B, 14110 }, { 0x4B25, 14113 }, { 0x4B20, 14116 }, { 0x4B2C, 14119 }, { 0x4B34, 14122 }, { 0x4B35, 14125 }, { 0x4B27, 14128 }, { 0x4B21, 14131 }, { 0x4B24, 14134 }, { 0x4B22, 14137 }, { 0x4B11, 14140 }, { 0x4B0F, 14144 }, { 0x4B12, 14148 }, { 0x4B10, 14152 }, { 0x4B4C, 14156 }, { 0x6F2B, 14159 }, { 0x6CCC, 14161 }, { 0x1DF3, 14164 }, { 0x1DF4, 14166 }, { 0x6DC0, 14168 }, { 0x6E16, 14170 }, { 0x1E45, 14172 }, { 0x005F, 14173 }, { 0x7182, 14174 }, { 0x4A48, 14176 }, { 0x4A4D, 14178 }, { 0x4A47, 14181 }, { 0x4A45, 14185 }, { 0x4A41, 14188 }, { 0x4A44, 14191 }, { 0x4A43, 14194 }, { 0x4A46, 14197 }, { 0x4A42, 14200 }, { 0x4A4C, 14203 }, { 0x4A4A, 14205 }, { 0x4A50, 14207 }, { 0x4A55, 14210 }, { 0x4A51, 14213 }, { 0x4A54, 14216 }, { 0x4A53, 14219 }, { 0x4A58, 14222 }, { 0x4A4F, 14225 }, { 0x4A57, 14228 }, { 0x4A56, 14231 }, { 0x4A52, 14234 }, { 0x4A3D, 14237 }, { 0x4A35, 14241 }, { 0x4A3F, 14245 }, { 0x4A37, 14249 }, { 0x4A34, 14253 }, { 0x4A3E, 14257 }, { 0x4A40, 14261 }, { 0x4A36, 14265 }, { 0x4A38, 14269 }, { 0x4A3B, 14273 }, { 0x4A39, 14278 }, { 0x4A3C, 14283 }, { 0x4A3A, 14288 }, { 0x4A4B, 14293 }, { 0x49FF, 14296 }, { 0x4A09, 14299 }, { 0x4A01, 14302 }, { 0x4A0B, 14305 }, { 0x4A03, 14308 }, { 0x4A00, 14311 }, { 0x4A0A, 14314 }, { 0x4A0C, 14317 }, { 0x4A26, 14320 }, { 0x4A13, 14323 }, { 0x4A20, 14326 }, { 0x4A0F, 14329 }, { 0x4A33, 14332 }, { 0x4A02, 14335 }, { 0x4A15, 14338 }, { 0x4A0D, 14341 }, { 0x4A2D, 14344 }, { 0x4A28, 14347 }, { 0x4A22, 14350 }, { 0x4A24, 14353 }, { 0x4A2B, 14356 }, { 0x4A32, 14359 }, { 0x4A1E, 14362 }, { 0x4A04, 14365 }, { 0x4A2F, 14368 }, { 0x4A2A, 14371 }, { 0x4A27, 14374 }, { 0x4A14, 14377 }, { 0x4A1B, 14380 }, { 0x4A21, 14383 }, { 0x4A10, 14386 }, { 0x4A16, 14389 }, { 0x4A0E, 14392 }, { 0x4A2E, 14395 }, { 0x4A29, 14398 }, { 0x4A11, 14401 }, { 0x4A23, 14404 }, { 0x4A1D, 14407 }, { 0x4A17, 14410 }, { 0x4A25, 14413 }, { 0x4A2C, 14416 }, { 0x4A30, 14419 }, { 0x4A31, 14422 }, { 0x4A1F, 14425 }, { 0x4A19, 14428 }, { 0x4A1C, 14431 }, { 0x4A12, 14434 }, { 0x4A18, 14437 }, { 0x4A1A, 14440 }, { 0x4A07, 14443 }, { 0x4A05, 14447 }, { 0x4A08, 14451 }, { 0x4A06, 14455 }, { 0x4A49, 14459 }, { 0x4A5A, 14461 }, { 0x4A59, 14464 }, { 0x4A4E, 14467 }, { 0x1F21, 14470 }, { 0x6D7E, 14472 }, { 0x6F03, 14473 }, { 0x6F05, 14474 }, { 0x6F04, 14476 }, { 0x6C9D, 14478 }, { 0x1FAB, 14479 }, { 0x6E11, 14481 }, { 0x6DFD, 14483 }, { 0x6E4E, 14486 }, { 0x6D8B, 14488 }, { 0x2285, 14491 }, { 0x2275, 14495 }, { 0x228C, 14498 }, { 0x2296, 14501 }, { 0x6EFC, 14505 }, { 0x231D, 14507 }, { 0x6E27, 14509 }, { 0x6E28, 14514 }, { 0x231E, 14519 }, { 0x6F0A, 14521 }, { 0x6DFE, 14522 }, { 0x6F1A, 14525 }, { 0x6DFF, 14529 }, { 0x6C6F, 14532 }, { 0x290C, 14534 }, { 0x2ACA, 14536 }, { 0x6C8B, 14539 }, { 0x1C5E, 14540 }, { 0x2229, 14542 }, { 0x6DE4, 14543 }, { 0x6DC5, 14546 }, { 0x6CC8, 14547 }, { 0x000B, 14549 }, { 0x2587, 14551 }, { 0x2588, 14557 }, { 0x2593, 14563 }, { 0x257F, 14567 }, { 0x2582, 14572 }, { 0x257C, 14577 }, { 0x257E, 14583 }, { 0x2580, 14588 }, { 0x2581, 14593 }, { 0x257D, 14598 }, { 0x25CC, 14604 }, { 0x2220, 14609 }, { 0x3CA8, 14610 }, { 0x6C94, 14612 }, { 0x6C93, 14614 }, { 0x6DC8, 14616 }, { 0x1DDF, 14617 }, { 0x0299, 14621 }, { 0x1DE0, 14623 }, { 0x2923, 14626 }, { 0x1DA1, 14628 }, { 0x6C74, 14630 }, { 0x4734, 14631 }, { 0x4739, 14634 }, { 0x4735, 14637 }, { 0x4738, 14640 }, { 0x4737, 14643 }, { 0x473C, 14646 }, { 0x473B, 14649 }, { 0x473A, 14652 }, { 0x4736, 14655 }, { 0x4746, 14658 }, { 0x474B, 14662 }, { 0x473D, 14666 }, { 0x4747, 14669 }, { 0x474A, 14673 }, { 0x4749, 14677 }, { 0x474E, 14681 }, { 0x474D, 14685 }, { 0x4741, 14689 }, { 0x4740, 14692 }, { 0x474C, 14695 }, { 0x4742, 14699 }, { 0x4748, 14702 }, { 0x4744, 14706 }, { 0x4745, 14709 }, { 0x473F, 14712 }, { 0x473E, 14715 }, { 0x4743, 14718 }, { 0x474F, 14721 }, { 0x4751, 14725 }, { 0x4750, 14729 }, { 0x4752, 14733 }, { 0x6CB1, 14737 }, { 0x6DF5, 14741 }, { 0x6FDD, 14742 }, { 0x7187, 14743 }, { 0x1DC8, 14747 }, { 0x6CEB, 14749 }, { 0x6D0F, 14751 }, { 0x6CA1, 14754 }, { 0x6EE7, 14757 }, { 0x006C, 14761 }, { 0x6E57, 14763 }, { 0x481C, 14768 }, { 0x4821, 14772 }, { 0x481D, 14776 }, { 0x4820, 14780 }, { 0x481F, 14784 }, { 0x4824, 14788 }, { 0x481B, 14792 }, { 0x4823, 14796 }, { 0x4822, 14800 }, { 0x481E, 14804 }, { 0x4814, 14808 }, { 0x4819, 14812 }, { 0x4816, 14816 }, { 0x4818, 14820 }, { 0x4817, 14824 }, { 0x4804, 14828 }, { 0x4805, 14832 }, { 0x4806, 14836 }, { 0x4815, 14840 }, { 0x4807, 14844 }, { 0x4810, 14848 }, { 0x4812, 14852 }, { 0x4811, 14856 }, { 0x480A, 14860 }, { 0x481A, 14864 }, { 0x4808, 14868 }, { 0x480B, 14872 }, { 0x480D, 14876 }, { 0x480F, 14880 }, { 0x4802, 14884 }, { 0x4803, 14888 }, { 0x480C, 14892 }, { 0x480E, 14896 }, { 0x4809, 14900 }, { 0x4813, 14904 }, { 0x227B, 14908 }, { 0x2184, 14911 }, { 0x1DE4, 14914 }, { 0x1E4F, 14916 }, { 0x6C69, 14918 }, { 0x2261, 14919 }, { 0x6EE8, 14921 }, { 0x6FD0, 14923 }, { 0x2254, 14924 }, { 0x0C15, 14925 }, { 0x0C1A, 14928 }, { 0x0C16, 14931 }, { 0x0C19, 14934 }, { 0x0C18, 14937 }, { 0x0C1D, 14940 }, { 0x0C14, 14943 }, { 0x0C1C, 14946 }, { 0x0C1B, 14949 }, { 0x0C17, 14952 }, { 0x0C03, 14955 }, { 0x0BF5, 14959 }, { 0x0BE2, 14963 }, { 0x0BDC, 14967 }, { 0x0BD6, 14971 }, { 0x0BE5, 14975 }, { 0x0BE7, 14979 }, { 0x0BF3, 14983 }, { 0x0BF6, 14987 }, { 0x0BC9, 14991 }, { 0x0BED, 14995 }, { 0x0BF4, 14999 }, { 0x0BEE, 15003 }, { 0x0BE9, 15006 }, { 0x0BE1, 15010 }, { 0x0BDB, 15014 }, { 0x0BE3, 15018 }, { 0x0BEB, 15022 }, { 0x0BEC, 15026 }, { 0x0BD3, 15029 }, { 0x0BF2, 15033 }, { 0x0BF1, 15037 }, { 0x0BF0, 15041 }, { 0x0BDD, 15045 }, { 0x0BD7, 15049 }, { 0x0BEF, 15053 }, { 0x0BEA, 15057 }, { 0x0BD5, 15061 }, { 0x0BD0, 15065 }, { 0x0BD4, 15069 }, { 0x0BD2, 15073 }, { 0x0BD1, 15077 }, { 0x0BCA, 15081 }, { 0x0BCD, 15085 }, { 0x0BCB, 15089 }, { 0x0BCC, 15093 }, { 0x0BCE, 15097 }, { 0x0C0C, 15101 }, { 0x0C0D, 15105 }, { 0x0C0E, 15109 }, { 0x0C0F, 15113 }, { 0x0BF9, 15117 }, { 0x0BCF, 15121 }, { 0x0BE6, 15125 }, { 0x0BE4, 15129 }, { 0x0BE8, 15133 }, { 0x0BD8, 15137 }, { 0x0BE0, 15141 }, { 0x0BDE, 15145 }, { 0x0BDF, 15149 }, { 0x0BDA, 15153 }, { 0x0BD9, 15157 }, { 0x0BF8, 15161 }, { 0x0C04, 15165 }, { 0x0BFC, 15169 }, { 0x0C06, 15173 }, { 0x0C00, 15177 }, { 0x0BFA, 15181 }, { 0x0C05, 15185 }, { 0x0C07, 15189 }, { 0x0C08, 15194 }, { 0x0BFB, 15199 }, { 0x0BFD, 15203 }, { 0x0BFE, 15207 }, { 0x0C01, 15211 }, { 0x0BFF, 15215 }, { 0x0C1F, 15219 }, { 0x0C13, 15222 }, { 0x0C02, 15225 }, { 0x0C0A, 15228 }, { 0x0C11, 15231 }, { 0x0C12, 15234 }, { 0x0C0B, 15237 }, { 0x0BF7, 15240 }, { 0x0C1E, 15243 }, { 0x0C09, 15246 }, { 0x0C10, 15249 }, { 0x70B7, 15252 }, { 0x1BBD, 15255 }, { 0x70BE, 15257 }, { 0x2558, 15259 }, { 0x4623, 15260 }, { 0x6FC5, 15267 }, { 0x6FC6, 15268 }, { 0x1E31, 15270 }, { 0x1F15, 15271 }, { 0x70BB, 15273 }, { 0x1E61, 15277 }, { 0x1E62, 15280 }, { 0x70CF, 15283 }, { 0x70C9, 15288 }, { 0x70D5, 15293 }, { 0x70E6, 15298 }, { 0x70BC, 15304 }, { 0x709E, 15308 }, { 0x70A8, 15312 }, { 0x6FB8, 15316 }, { 0x70C3, 15320 }, { 0x6FB7, 15323 }, { 0x2AA9, 15326 }, { 0x2699, 15328 }, { 0x248D, 15333 }, { 0x3CE3, 15338 }, { 0x2ABD, 15341 }, { 0x1E90, 15343 }, { 0x3CDF, 15345 }, { 0x21CA, 15347 }, { 0x6CCB, 15350 }, { 0x6C67, 15352 }, { 0x6CB2, 15355 }, { 0x6D75, 15357 }, { 0x1C14, 15359 }, { 0x2924, 15361 }, { 0x1BBF, 15365 }, { 0x1BC1, 15368 }, { 0x3D8A, 15371 }, { 0x1BC0, 15375 }, { 0x1BC0, 15378 }, { 0x1BBF, 15379 }, { 0x24F9, 15380 }, { 0x0073, 15382 }, { 0x69BE, 15384 }, { 0x69C6, 15387 }, { 0x69CB, 15390 }, { 0x69C7, 15393 }, { 0x69CA, 15396 }, { 0x69C9, 15399 }, { 0x69CE, 15402 }, { 0x69C5, 15405 }, { 0x69CD, 15408 }, { 0x69CC, 15411 }, { 0x69C8, 15414 }, { 0x69C1, 15417 }, { 0x69C4, 15419 }, { 0x69A5, 15421 }, { 0x69A7, 15425 }, { 0x69A8, 15429 }, { 0x69AF, 15433 }, { 0x69A0, 15437 }, { 0x69A6, 15441 }, { 0x69B4, 15445 }, { 0x69B2, 15449 }, { 0x69A2, 15453 }, { 0x69A4, 15457 }, { 0x69B6, 15461 }, { 0x69B8, 15465 }, { 0x69AE, 15469 }, { 0x69A3, 15473 }, { 0x69B1, 15477 }, { 0x69A9, 15481 }, { 0x69BA, 15485 }, { 0x69AD, 15489 }, { 0x69B9, 15493 }, { 0x69BC, 15497 }, { 0x69B7, 15501 }, { 0x69AC, 15505 }, { 0x69B5, 15509 }, { 0x69BD, 15513 }, { 0x69AB, 15517 }, { 0x69AA, 15521 }, { 0x69BB, 15525 }, { 0x699C, 15529 }, { 0x69B0, 15533 }, { 0x699E, 15537 }, { 0x699F, 15541 }, { 0x69B3, 15545 }, { 0x699D, 15549 }, { 0x69A1, 15553 }, { 0x69BF, 15557 }, { 0x6983, 15560 }, { 0x6985, 15564 }, { 0x6986, 15568 }, { 0x698D, 15572 }, { 0x697E, 15576 }, { 0x6984, 15580 }, { 0x6992, 15584 }, { 0x6990, 15588 }, { 0x6980, 15592 }, { 0x6982, 15596 }, { 0x6994, 15600 }, { 0x6996, 15604 }, { 0x698C, 15608 }, { 0x6981, 15612 }, { 0x698F, 15616 }, { 0x6987, 15620 }, { 0x6998, 15624 }, { 0x698B, 15628 }, { 0x6997, 15632 }, { 0x699A, 15636 }, { 0x6995, 15640 }, { 0x698A, 15644 }, { 0x6993, 15648 }, { 0x699B, 15652 }, { 0x6989, 15656 }, { 0x6988, 15660 }, { 0x6999, 15664 }, { 0x697A, 15668 }, { 0x698E, 15672 }, { 0x697C, 15676 }, { 0x697D, 15680 }, { 0x6991, 15684 }, { 0x697B, 15688 }, { 0x697F, 15692 }, { 0x69D0, 15696 }, { 0x69CF, 15700 }, { 0x69C3, 15704 }, { 0x69C2, 15708 }, { 0x69C0, 15711 }, { 0x1F79, 15714 }, { 0x6DB9, 15716 }, { 0x6DDD, 15718 }, { 0x1DA9, 15720 }, { 0x24F8, 15721 }, { 0x24FE, 15725 }, { 0x6F5B, 15728 }, { 0x21A2, 15730 }, { 0x2490, 15731 }, { 0x2491, 15737 }, { 0x248E, 15743 }, { 0x248F, 15749 }, { 0x71B2, 15755 }, { 0x3581, 15756 }, { 0x3582, 15759 }, { 0x3583, 15761 }, { 0x352E, 15763 }, { 0x3537, 15766 }, { 0x3541, 15769 }, { 0x3535, 15772 }, { 0x3530, 15775 }, { 0x3532, 15778 }, { 0x3566, 15781 }, { 0x352F, 15784 }, { 0x3573, 15787 }, { 0x356D, 15790 }, { 0x3531, 15793 }, { 0x3538, 15796 }, { 0x356A, 15799 }, { 0x355B, 15802 }, { 0x3571, 15805 }, { 0x355C, 15808 }, { 0x3574, 15811 }, { 0x3543, 15814 }, { 0x3569, 15817 }, { 0x355D, 15820 }, { 0x354B, 15823 }, { 0x3539, 15826 }, { 0x356B, 15829 }, { 0x355A, 15832 }, { 0x3545, 15835 }, { 0x3572, 15838 }, { 0x3568, 15841 }, { 0x3550, 15844 }, { 0x3559, 15847 }, { 0x3567, 15850 }, { 0x3560, 15853 }, { 0x3549, 15856 }, { 0x3577, 15859 }, { 0x356C, 15862 }, { 0x3570, 15865 }, { 0x3563, 15868 }, { 0x3536, 15871 }, { 0x3558, 15874 }, { 0x3556, 15877 }, { 0x355F, 15880 }, { 0x3533, 15883 }, { 0x356F, 15886 }, { 0x353A, 15889 }, { 0x3564, 15892 }, { 0x354E, 15895 }, { 0x3542, 15898 }, { 0x353E, 15901 }, { 0x3534, 15904 }, { 0x3578, 15907 }, { 0x3576, 15910 }, { 0x3557, 15913 }, { 0x354D, 15916 }, { 0x354F, 15919 }, { 0x3552, 15922 }, { 0x3548, 15925 }, { 0x3575, 15928 }, { 0x356E, 15931 }, { 0x353F, 15934 }, { 0x3562, 15937 }, { 0x3554, 15940 }, { 0x3551, 15943 }, { 0x3555, 15946 }, { 0x3579, 15949 }, { 0x354A, 15952 }, { 0x3553, 15955 }, { 0x3565, 15958 }, { 0x355E, 15961 }, { 0x353B, 15964 }, { 0x3547, 15967 }, { 0x3544, 15970 }, { 0x357C, 15973 }, { 0x353C, 15976 }, { 0x353D, 15979 }, { 0x3540, 15982 }, { 0x354C, 15985 }, { 0x357A, 15988 }, { 0x3546, 15991 }, { 0x357B, 15994 }, { 0x357D, 15997 }, { 0x3561, 16000 }, { 0x587A, 16003 }, { 0x58AD, 16009 }, { 0x5882, 16013 }, { 0x5866, 16018 }, { 0x58AA, 16023 }, { 0x588D, 16027 }, { 0x5872, 16031 }, { 0x5897, 16036 }, { 0x5878, 16041 }, { 0x585E, 16046 }, { 0x58AF, 16051 }, { 0x5883, 16055 }, { 0x58AE, 16060 }, { 0x58A9, 16064 }, { 0x5861, 16068 }, { 0x5884, 16073 }, { 0x5864, 16077 }, { 0x5863, 16084 }, { 0x585D, 16091 }, { 0x585C, 16097 }, { 0x5887, 16103 }, { 0x5894, 16107 }, { 0x5896, 16111 }, { 0x58A5, 16115 }, { 0x586F, 16119 }, { 0x58AC, 16123 }, { 0x5893, 16127 }, { 0x5881, 16131 }, { 0x5895, 16135 }, { 0x588F, 16139 }, { 0x58A8, 16143 }, { 0x58B0, 16147 }, { 0x5886, 16151 }, { 0x58A1, 16155 }, { 0x58AB, 16159 }, { 0x5899, 16163 }, { 0x5873, 16167 }, { 0x587C, 16172 }, { 0x58A3, 16177 }, { 0x589B, 16181 }, { 0x5879, 16186 }, { 0x58A6, 16191 }, { 0x589A, 16195 }, { 0x5891, 16201 }, { 0x587D, 16205 }, { 0x5860, 16209 }, { 0x585B, 16214 }, { 0x5871, 16219 }, { 0x5889, 16223 }, { 0x58A0, 16227 }, { 0x589F, 16231 }, { 0x585A, 16235 }, { 0x5888, 16240 }, { 0x5892, 16244 }, { 0x588C, 16248 }, { 0x58A2, 16252 }, { 0x587E, 16256 }, { 0x5867, 16260 }, { 0x586E, 16264 }, { 0x58A7, 16268 }, { 0x589C, 16272 }, { 0x5875, 16276 }, { 0x5862, 16280 }, { 0x5898, 16286 }, { 0x588A, 16290 }, { 0x58A4, 16294 }, { 0x5874, 16298 }, { 0x5869, 16302 }, { 0x5890, 16306 }, { 0x5880, 16310 }, { 0x589D, 16314 }, { 0x586C, 16318 }, { 0x5877, 16322 }, { 0x586B, 16326 }, { 0x589E, 16330 }, { 0x5885, 16334 }, { 0x5868, 16338 }, { 0x5876, 16342 }, { 0x588B, 16346 }, { 0x586D, 16350 }, { 0x5865, 16354 }, { 0x586A, 16358 }, { 0x5870, 16362 }, { 0x585F, 16366 }, { 0x587B, 16370 }, { 0x587F, 16374 }, { 0x588E, 16378 }, { 0x58E6, 16382 }, { 0x58E2, 16386 }, { 0x58E1, 16391 }, { 0x58C2, 16396 }, { 0x58B2, 16401 }, { 0x58DF, 16406 }, { 0x58BA, 16410 }, { 0x58E7, 16414 }, { 0x58BD, 16418 }, { 0x58E3, 16424 }, { 0x58B5, 16428 }, { 0x58B6, 16433 }, { 0x58BF, 16438 }, { 0x58C7, 16443 }, { 0x58C1, 16448 }, { 0x58B4, 16452 }, { 0x58D7, 16457 }, { 0x58DD, 16461 }, { 0x58C6, 16465 }, { 0x58D3, 16470 }, { 0x58DC, 16474 }, { 0x58C5, 16479 }, { 0x58E8, 16484 }, { 0x58E5, 16488 }, { 0x58C3, 16492 }, { 0x58B3, 16497 }, { 0x58D2, 16501 }, { 0x58CD, 16505 }, { 0x58BC, 16509 }, { 0x58B7, 16514 }, { 0x58DE, 16518 }, { 0x58CF, 16522 }, { 0x58BE, 16527 }, { 0x58CC, 16532 }, { 0x58D0, 16536 }, { 0x58E0, 16540 }, { 0x58C8, 16544 }, { 0x58CB, 16548 }, { 0x58D8, 16552 }, { 0x58D6, 16556 }, { 0x58E4, 16560 }, { 0x58D4, 16564 }, { 0x58D5, 16568 }, { 0x58B1, 16573 }, { 0x58BB, 16577 }, { 0x58B8, 16581 }, { 0x58CA, 16585 }, { 0x58B9, 16589 }, { 0x58CE, 16593 }, { 0x58DA, 16598 }, { 0x58DB, 16602 }, { 0x58D1, 16606 }, { 0x58C9, 16610 }, { 0x58D9, 16614 }, { 0x58C4, 16618 }, { 0x58C0, 16622 }, { 0x5927, 16626 }, { 0x5932, 16630 }, { 0x590D, 16635 }, { 0x591D, 16640 }, { 0x58FC, 16644 }, { 0x5916, 16649 }, { 0x5903, 16653 }, { 0x5943, 16657 }, { 0x5944, 16662 }, { 0x5923, 16667 }, { 0x5928, 16671 }, { 0x591F, 16675 }, { 0x5910, 16679 }, { 0x5947, 16683 }, { 0x5937, 16687 }, { 0x5946, 16691 }, { 0x5918, 16695 }, { 0x58F4, 16699 }, { 0x58EA, 16704 }, { 0x5949, 16708 }, { 0x5948, 16712 }, { 0x594A, 16716 }, { 0x592B, 16720 }, { 0x5933, 16724 }, { 0x58EB, 16728 }, { 0x591A, 16732 }, { 0x58FA, 16736 }, { 0x593C, 16740 }, { 0x592F, 16744 }, { 0x593D, 16749 }, { 0x58F8, 16754 }, { 0x5900, 16759 }, { 0x58FE, 16763 }, { 0x5940, 16767 }, { 0x5941, 16771 }, { 0x5931, 16775 }, { 0x5934, 16779 }, { 0x5945, 16783 }, { 0x5924, 16787 }, { 0x592A, 16791 }, { 0x5929, 16795 }, { 0x592D, 16799 }, { 0x5930, 16803 }, { 0x590E, 16807 }, { 0x592E, 16811 }, { 0x58F3, 16815 }, { 0x5904, 16821 }, { 0x5942, 16825 }, { 0x5908, 16829 }, { 0x590B, 16834 }, { 0x5901, 16838 }, { 0x58F2, 16842 }, { 0x5925, 16846 }, { 0x58F5, 16850 }, { 0x593B, 16854 }, { 0x5917, 16858 }, { 0x5905, 16862 }, { 0x58ED, 16866 }, { 0x5915, 16870 }, { 0x58EF, 16874 }, { 0x58E9, 16878 }, { 0x591E, 16883 }, { 0x593F, 16887 }, { 0x5907, 16891 }, { 0x5919, 16895 }, { 0x5921, 16899 }, { 0x58FD, 16904 }, { 0x5935, 16908 }, { 0x5909, 16912 }, { 0x593E, 16916 }, { 0x58F0, 16920 }, { 0x58FB, 16924 }, { 0x5902, 16928 }, { 0x5938, 16932 }, { 0x5939, 16936 }, { 0x591C, 16940 }, { 0x5926, 16944 }, { 0x58F7, 16948 }, { 0x590F, 16952 }, { 0x5922, 16956 }, { 0x5936, 16960 }, { 0x593A, 16964 }, { 0x5912, 16968 }, { 0x590A, 16972 }, { 0x592C, 16977 }, { 0x58FF, 16981 }, { 0x58F6, 16985 }, { 0x5906, 16989 }, { 0x5914, 16993 }, { 0x5920, 16997 }, { 0x58F1, 17001 }, { 0x5911, 17005 }, { 0x590C, 17009 }, { 0x5913, 17013 }, { 0x591B, 17017 }, { 0x58EC, 17021 }, { 0x58EE, 17025 }, { 0x58F9, 17029 }, { 0x59AB, 17033 }, { 0x59A3, 17037 }, { 0x59AD, 17041 }, { 0x59B5, 17045 }, { 0x59B1, 17049 }, { 0x59BB, 17053 }, { 0x596B, 17057 }, { 0x59BF, 17061 }, { 0x595E, 17065 }, { 0x5994, 17069 }, { 0x5999, 17073 }, { 0x598A, 17077 }, { 0x59B9, 17081 }, { 0x5978, 17085 }, { 0x5977, 17089 }, { 0x594D, 17093 }, { 0x59A7, 17097 }, { 0x598F, 17101 }, { 0x59B4, 17105 }, { 0x5987, 17109 }, { 0x59B7, 17113 }, { 0x59A4, 17117 }, { 0x59BA, 17122 }, { 0x59A8, 17127 }, { 0x5961, 17131 }, { 0x59BE, 17135 }, { 0x59B2, 17139 }, { 0x597E, 17143 }, { 0x595D, 17147 }, { 0x59AC, 17151 }, { 0x59A5, 17155 }, { 0x59A6, 17159 }, { 0x594C, 17163 }, { 0x5967, 17167 }, { 0x596C, 17171 }, { 0x5980, 17175 }, { 0x5986, 17179 }, { 0x5960, 17183 }, { 0x59B0, 17187 }, { 0x599E, 17191 }, { 0x5950, 17195 }, { 0x597A, 17199 }, { 0x59BD, 17203 }, { 0x594B, 17208 }, { 0x5998, 17212 }, { 0x5965, 17216 }, { 0x594E, 17220 }, { 0x5973, 17224 }, { 0x59B8, 17228 }, { 0x5991, 17232 }, { 0x596F, 17236 }, { 0x5972, 17240 }, { 0x595C, 17244 }, { 0x599A, 17248 }, { 0x59B3, 17252 }, { 0x59BC, 17256 }, { 0x5954, 17260 }, { 0x597C, 17264 }, { 0x5989, 17268 }, { 0x5975, 17272 }, { 0x5981, 17276 }, { 0x5957, 17280 }, { 0x59AE, 17284 }, { 0x59B6, 17288 }, { 0x5993, 17292 }, { 0x599B, 17296 }, { 0x595A, 17300 }, { 0x5997, 17304 }, { 0x598E, 17308 }, { 0x5990, 17312 }, { 0x5969, 17316 }, { 0x597B, 17321 }, { 0x59A9, 17325 }, { 0x59AA, 17329 }, { 0x5962, 17333 }, { 0x598C, 17337 }, { 0x5963, 17341 }, { 0x599D, 17345 }, { 0x5958, 17349 }, { 0x5956, 17353 }, { 0x5951, 17357 }, { 0x594F, 17361 }, { 0x59A1, 17365 }, { 0x5952, 17369 }, { 0x59A0, 17373 }, { 0x5992, 17377 }, { 0x59AF, 17381 }, { 0x5982, 17385 }, { 0x5955, 17389 }, { 0x597F, 17393 }, { 0x59A2, 17397 }, { 0x5971, 17401 }, { 0x5984, 17405 }, { 0x5974, 17409 }, { 0x5976, 17413 }, { 0x598B, 17417 }, { 0x5995, 17421 }, { 0x599F, 17425 }, { 0x5996, 17429 }, { 0x596D, 17433 }, { 0x5979, 17437 }, { 0x5985, 17441 }, { 0x5988, 17445 }, { 0x5966, 17449 }, { 0x595B, 17453 }, { 0x597D, 17457 }, { 0x599C, 17461 }, { 0x5964, 17465 }, { 0x5970, 17469 }, { 0x598D, 17473 }, { 0x596A, 17477 }, { 0x5968, 17481 }, { 0x595F, 17485 }, { 0x5953, 17489 }, { 0x5983, 17493 }, { 0x596E, 17497 }, { 0x5959, 17501 }, { 0x5A2F, 17505 }, { 0x5A32, 17509 }, { 0x5A31, 17513 }, { 0x5A15, 17517 }, { 0x5A22, 17521 }, { 0x5A2C, 17526 }, { 0x5A4F, 17531 }, { 0x5A58, 17536 }, { 0x5A53, 17540 }, { 0x5A47, 17544 }, { 0x5A55, 17548 }, { 0x5A48, 17552 }, { 0x5A50, 17556 }, { 0x5A2B, 17560 }, { 0x5A34, 17565 }, { 0x5A51, 17570 }, { 0x59F2, 17574 }, { 0x59FA, 17578 }, { 0x5A5B, 17582 }, { 0x5A45, 17586 }, { 0x5A2D, 17590 }, { 0x5A0E, 17594 }, { 0x5A11, 17598 }, { 0x5A26, 17602 }, { 0x59C3, 17606 }, { 0x5A33, 17610 }, { 0x59D5, 17614 }, { 0x5A52, 17618 }, { 0x5A12, 17622 }, { 0x59E5, 17626 }, { 0x5A56, 17630 }, { 0x5A54, 17634 }, { 0x5A59, 17638 }, { 0x5A23, 17642 }, { 0x5A1F, 17646 }, { 0x5A4C, 17650 }, { 0x5A1A, 17654 }, { 0x5A07, 17659 }, { 0x59C6, 17664 }, { 0x5A43, 17668 }, { 0x59EB, 17672 }, { 0x5A4A, 17676 }, { 0x59C8, 17680 }, { 0x59DF, 17684 }, { 0x59D0, 17688 }, { 0x59EA, 17692 }, { 0x5A4D, 17696 }, { 0x59C7, 17700 }, { 0x5A35, 17704 }, { 0x59CC, 17708 }, { 0x5A36, 17712 }, { 0x5A5A, 17716 }, { 0x5A57, 17720 }, { 0x59D3, 17724 }, { 0x5A30, 17728 }, { 0x5A04, 17732 }, { 0x5A46, 17736 }, { 0x59C4, 17740 }, { 0x5A44, 17744 }, { 0x59CF, 17748 }, { 0x5A06, 17752 }, { 0x5A08, 17756 }, { 0x5A3D, 17760 }, { 0x5A3C, 17765 }, { 0x5A3F, 17770 }, { 0x5A3E, 17774 }, { 0x5A1E, 17778 }, { 0x5A03, 17782 }, { 0x5A14, 17786 }, { 0x5A5C, 17790 }, { 0x5A40, 17794 }, { 0x5A05, 17798 }, { 0x59D4, 17802 }, { 0x59F9, 17806 }, { 0x59C5, 17810 }, { 0x59E6, 17814 }, { 0x59D8, 17818 }, { 0x5A00, 17822 }, { 0x59E1, 17826 }, { 0x5A1D, 17830 }, { 0x5A20, 17834 }, { 0x5A37, 17838 }, { 0x59EC, 17844 }, { 0x59C0, 17849 }, { 0x59E8, 17853 }, { 0x59CA, 17857 }, { 0x59CD, 17861 }, { 0x59D7, 17865 }, { 0x59DA, 17869 }, { 0x5A2E, 17873 }, { 0x5A42, 17877 }, { 0x5A02, 17882 }, { 0x5A28, 17886 }, { 0x5A16, 17890 }, { 0x5A01, 17894 }, { 0x5A1B, 17898 }, { 0x59D2, 17902 }, { 0x59DE, 17906 }, { 0x5A17, 17910 }, { 0x5A41, 17914 }, { 0x5A27, 17918 }, { 0x5A1C, 17922 }, { 0x59CB, 17926 }, { 0x5A24, 17930 }, { 0x5A49, 17934 }, { 0x5A38, 17938 }, { 0x5A4E, 17942 }, { 0x59FB, 17946 }, { 0x59E9, 17950 }, { 0x59C1, 17955 }, { 0x59F0, 17959 }, { 0x59F8, 17963 }, { 0x5A18, 17967 }, { 0x5A39, 17971 }, { 0x59EE, 17975 }, { 0x5A0C, 17979 }, { 0x5A0F, 17983 }, { 0x59EF, 17987 }, { 0x59E2, 17991 }, { 0x59F4, 17995 }, { 0x59CE, 17999 }, { 0x59C2, 18003 }, { 0x5A09, 18007 }, { 0x59FF, 18011 }, { 0x5A0A, 18015 }, { 0x5A2A, 18019 }, { 0x5A25, 18023 }, { 0x5A10, 18027 }, { 0x5A3A, 18031 }, { 0x59DD, 18035 }, { 0x59DB, 18039 }, { 0x5A0B, 18043 }, { 0x59F5, 18047 }, { 0x59F3, 18051 }, { 0x59F7, 18055 }, { 0x59F1, 18059 }, { 0x5A3B, 18063 }, { 0x5A21, 18067 }, { 0x5A0D, 18071 }, { 0x59D9, 18075 }, { 0x5A4B, 18079 }, { 0x59D6, 18083 }, { 0x59C9, 18087 }, { 0x59DC, 18091 }, { 0x59F6, 18095 }, { 0x5A29, 18099 }, { 0x59FC, 18103 }, { 0x59E7, 18107 }, { 0x5A19, 18111 }, { 0x59E0, 18115 }, { 0x5A13, 18119 }, { 0x59E4, 18123 }, { 0x59FE, 18127 }, { 0x59FD, 18131 }, { 0x59D1, 18135 }, { 0x59E3, 18139 }, { 0x59ED, 18143 }, { 0x5A6B, 18148 }, { 0x5A5E, 18152 }, { 0x5A60, 18156 }, { 0x5A5D, 18160 }, { 0x5A89, 18164 }, { 0x5A5F, 18168 }, { 0x5A64, 18172 }, { 0x5A87, 18176 }, { 0x5A8C, 18180 }, { 0x5A8D, 18184 }, { 0x5A7E, 18188 }, { 0x5A73, 18192 }, { 0x5A7D, 18196 }, { 0x5A6E, 18200 }, { 0x5A86, 18204 }, { 0x5A77, 18208 }, { 0x5A85, 18212 }, { 0x5A80, 18216 }, { 0x5A71, 18220 }, { 0x5A90, 18224 }, { 0x5A88, 18228 }, { 0x5A63, 18232 }, { 0x5A7C, 18236 }, { 0x5A61, 18240 }, { 0x5A8B, 18244 }, { 0x5A65, 18248 }, { 0x5A83, 18252 }, { 0x5A76, 18256 }, { 0x5A6C, 18260 }, { 0x5A68, 18264 }, { 0x5A62, 18268 }, { 0x5A8F, 18272 }, { 0x5A7B, 18276 }, { 0x5A75, 18280 }, { 0x5A70, 18284 }, { 0x5A8E, 18288 }, { 0x5A8A, 18292 }, { 0x5A69, 18296 }, { 0x5A82, 18300 }, { 0x5A78, 18304 }, { 0x5A7A, 18308 }, { 0x5A72, 18312 }, { 0x5A79, 18316 }, { 0x5A84, 18320 }, { 0x5A7F, 18324 }, { 0x5A66, 18328 }, { 0x5A6F, 18332 }, { 0x5A6D, 18336 }, { 0x5A92, 18340 }, { 0x5A67, 18344 }, { 0x5A6A, 18348 }, { 0x5A74, 18352 }, { 0x5A91, 18356 }, { 0x5A81, 18360 }, { 0x3580, 18364 }, { 0x3585, 18366 }, { 0x357E, 18369 }, { 0x357F, 18373 }, { 0x3584, 18377 }, { 0x5AE1, 18379 }, { 0x5AD5, 18383 }, { 0x5ADA, 18387 }, { 0x5ADB, 18391 }, { 0x5AD6, 18395 }, { 0x5AD8, 18399 }, { 0x5AD0, 18403 }, { 0x5ACD, 18407 }, { 0x5ACC, 18411 }, { 0x5AD9, 18415 }, { 0x5AC1, 18419 }, { 0x5AC7, 18423 }, { 0x5ABF, 18427 }, { 0x5AD7, 18431 }, { 0x5AD3, 18435 }, { 0x5AC0, 18439 }, { 0x5ACF, 18443 }, { 0x5AD1, 18447 }, { 0x5AC9, 18451 }, { 0x5ACA, 18455 }, { 0x5AC4, 18459 }, { 0x5ACB, 18463 }, { 0x5AC2, 18467 }, { 0x5ACE, 18471 }, { 0x5AC3, 18475 }, { 0x5AC5, 18479 }, { 0x5ABE, 18483 }, { 0x5AC8, 18487 }, { 0x5AC6, 18491 }, { 0x5AD2, 18495 }, { 0x5AD4, 18499 }, { 0x5ADD, 18503 }, { 0x5ADE, 18508 }, { 0x5ADC, 18513 }, { 0x5ADF, 18518 }, { 0x5AE0, 18523 }, { 0x180A, 18528 }, { 0x180B, 18531 }, { 0x180E, 18535 }, { 0x1810, 18539 }, { 0x1812, 18543 }, { 0x1813, 18547 }, { 0x180D, 18554 }, { 0x180F, 18558 }, { 0x1811, 18563 }, { 0x180C, 18568 }, { 0x17E4, 18573 }, { 0x1808, 18576 }, { 0x1809, 18579 }, { 0x17E9, 18582 }, { 0x1805, 18585 }, { 0x17F5, 18588 }, { 0x17F2, 18591 }, { 0x17E6, 18594 }, { 0x17F4, 18597 }, { 0x1802, 18600 }, { 0x17F8, 18603 }, { 0x17ED, 18606 }, { 0x17EB, 18609 }, { 0x17F6, 18612 }, { 0x17FC, 18615 }, { 0x17EF, 18618 }, { 0x17FF, 18621 }, { 0x1807, 18624 }, { 0x1806, 18627 }, { 0x1801, 18630 }, { 0x1804, 18633 }, { 0x17EA, 18636 }, { 0x17F1, 18640 }, { 0x17FB, 18644 }, { 0x17FA, 18648 }, { 0x17E8, 18652 }, { 0x17EE, 18656 }, { 0x17FE, 18660 }, { 0x17E5, 18664 }, { 0x17F3, 18668 }, { 0x17E7, 18672 }, { 0x1803, 18676 }, { 0x17F9, 18680 }, { 0x17EC, 18684 }, { 0x17F7, 18688 }, { 0x17FD, 18692 }, { 0x17F0, 18696 }, { 0x1800, 18700 }, { 0x1818, 18704 }, { 0x181A, 18709 }, { 0x181B, 18713 }, { 0x1819, 18717 }, { 0x1816, 18721 }, { 0x1815, 18723 }, { 0x1814, 18727 }, { 0x1817, 18731 }, { 0x6D11, 18733 }, { 0x6CAC, 18736 }, { 0x6EDD, 18738 }, { 0x226C, 18743 }, { 0x215A, 18745 }, { 0x21BD, 18749 }, { 0x6EDE, 18752 }, { 0x21EB, 18757 }, { 0x2280, 18759 }, { 0x6EE5, 18763 }, { 0x2232, 18768 }, { 0x2174, 18772 }, { 0x6ED7, 18776 }, { 0x2212, 18781 }, { 0x215F, 18784 }, { 0x70A2, 18786 }, { 0x70AD, 18789 }, { 0x70B3, 18792 }, { 0x2677, 18795 }, { 0x70AE, 18799 }, { 0x70B4, 18803 }, { 0x21B4, 18807 }, { 0x21B9, 18810 }, { 0x21B6, 18813 }, { 0x21B5, 18816 }, { 0x21B7, 18819 }, { 0x21B8, 18822 }, { 0x2242, 18825 }, { 0x6EDF, 18829 }, { 0x21BF, 18831 }, { 0x267E, 18834 }, { 0x2675, 18837 }, { 0x213D, 18840 }, { 0x213C, 18844 }, { 0x2175, 18848 }, { 0x6ED8, 18852 }, { 0x2171, 18857 }, { 0x6EAC, 18860 }, { 0x26AB, 18864 }, { 0x2104, 18867 }, { 0x2683, 18870 }, { 0x2684, 18873 }, { 0x21BA, 18876 }, { 0x2239, 18879 }, { 0x213E, 18881 }, { 0x213F, 18885 }, { 0x252D, 18889 }, { 0x2286, 18891 }, { 0x2129, 18895 }, { 0x1F83, 18897 }, { 0x21E3, 18901 }, { 0x2547, 18907 }, { 0x21E2, 18912 }, { 0x2700, 18918 }, { 0x2701, 18924 }, { 0x26FE, 18930 }, { 0x26FF, 18936 }, { 0x2702, 18942 }, { 0x2704, 18948 }, { 0x2703, 18954 }, { 0x2705, 18960 }, { 0x6EFA, 18966 }, { 0x2158, 18968 }, { 0x70AF, 18972 }, { 0x70B5, 18976 }, { 0x2156, 18980 }, { 0x267F, 18983 }, { 0x2681, 18986 }, { 0x1F7F, 18989 }, { 0x2718, 18993 }, { 0x1F80, 18998 }, { 0x2719, 19002 }, { 0x1F7D, 19007 }, { 0x271A, 19011 }, { 0x1F7E, 19016 }, { 0x271B, 19020 }, { 0x225A, 19025 }, { 0x20FA, 19028 }, { 0x1F82, 19030 }, { 0x6E6D, 19034 }, { 0x2713, 19037 }, { 0x2120, 19040 }, { 0x21C0, 19042 }, { 0x2544, 19045 }, { 0x22B0, 19050 }, { 0x2714, 19055 }, { 0x6C5D, 19058 }, { 0x267C, 19060 }, { 0x2545, 19062 }, { 0x2717, 19064 }, { 0x6D2D, 19066 }, { 0x6EC3, 19068 }, { 0x6D31, 19070 }, { 0x2195, 19072 }, { 0x2221, 19075 }, { 0x2230, 19077 }, { 0x26F3, 19082 }, { 0x221C, 19086 }, { 0x221D, 19089 }, { 0x2299, 19092 }, { 0x2679, 19094 }, { 0x22AD, 19096 }, { 0x225C, 19100 }, { 0x709A, 19102 }, { 0x70A3, 19106 }, { 0x2688, 19110 }, { 0x2108, 19113 }, { 0x26F5, 19116 }, { 0x2531, 19120 }, { 0x1C00, 19122 }, { 0x26F2, 19125 }, { 0x2106, 19129 }, { 0x2168, 19131 }, { 0x6EBA, 19133 }, { 0x21D5, 19136 }, { 0x2686, 19140 }, { 0x22FB, 19143 }, { 0x1C01, 19146 }, { 0x22FE, 19149 }, { 0x26F4, 19152 }, { 0x210E, 19156 }, { 0x1F74, 19160 }, { 0x210C, 19164 }, { 0x7097, 19167 }, { 0x2118, 19172 }, { 0x1F75, 19176 }, { 0x2116, 19180 }, { 0x7099, 19183 }, { 0x211C, 19188 }, { 0x1F73, 19192 }, { 0x1F77, 19196 }, { 0x211E, 19203 }, { 0x211A, 19206 }, { 0x7096, 19209 }, { 0x210A, 19214 }, { 0x2112, 19216 }, { 0x1F72, 19220 }, { 0x1F76, 19224 }, { 0x2114, 19231 }, { 0x26AD, 19234 }, { 0x2110, 19237 }, { 0x1F78, 19240 }, { 0x7098, 19247 }, { 0x1FAA, 19252 }, { 0x6E15, 19254 }, { 0x6C99, 19255 }, { 0x0297, 19256 }, { 0x6DAB, 19257 }, { 0x143D, 19260 }, { 0x143E, 19264 }, { 0x142B, 19268 }, { 0x142C, 19271 }, { 0x142D, 19274 }, { 0x1435, 19277 }, { 0x1432, 19280 }, { 0x142F, 19283 }, { 0x143C, 19286 }, { 0x142E, 19289 }, { 0x1439, 19292 }, { 0x1436, 19295 }, { 0x1433, 19298 }, { 0x1434, 19301 }, { 0x1438, 19304 }, { 0x143B, 19307 }, { 0x1431, 19310 }, { 0x143A, 19313 }, { 0x1437, 19316 }, { 0x1430, 19319 }, { 0x6DA0, 19322 }, { 0x6CA7, 19325 }, { 0x7021, 19326 }, { 0x1BEC, 19327 }, { 0x1BF5, 19328 }, { 0x0286, 19331 }, { 0x220D, 19332 }, { 0x6E03, 19333 }, { 0x6DF4, 19337 }, { 0x6E04, 19344 }, { 0x226D, 19348 }, { 0x1F23, 19350 }, { 0x6E8B, 19353 }, { 0x6E90, 19357 }, { 0x6E94, 19361 }, { 0x6E8C, 19365 }, { 0x6E8F, 19369 }, { 0x6E8E, 19373 }, { 0x6E93, 19377 }, { 0x6E92, 19381 }, { 0x6E91, 19385 }, { 0x6E8D, 19389 }, { 0x6E95, 19393 }, { 0x6E96, 19397 }, { 0x6E97, 19401 }, { 0x6E9C, 19404 }, { 0x6EA0, 19407 }, { 0x6E98, 19410 }, { 0x6E9B, 19413 }, { 0x6E9A, 19416 }, { 0x6E9F, 19419 }, { 0x6E9E, 19422 }, { 0x6E9D, 19425 }, { 0x6E99, 19428 }, { 0x6EA1, 19431 }, { 0x6EA2, 19434 }, { 0x1C04, 19437 }, { 0x215B, 19439 }, { 0x6C62, 19440 }, { 0x6C63, 19443 }, { 0x6C65, 19446 }, { 0x6C64, 19449 }, { 0x718F, 19452 }, { 0x001A, 19454 }, { 0x1C4E, 19455 }, { 0x1DDD, 19457 }, { 0x215E, 19459 }, { 0x000C, 19460 }, { 0x7006, 19461 }, { 0x2182, 19464 }, { 0x2183, 19467 }, { 0x22A6, 19470 }, { 0x6E7D, 19472 }, { 0x6E7C, 19474 }, { 0x6D8C, 19479 }, { 0x230A, 19480 }, { 0x1F33, 19482 }, { 0x1E57, 19485 }, { 0x1E58, 19488 }, { 0x6C96, 19491 }, { 0x1CC5, 19494 }, { 0x6C9C, 19496 }, { 0x1DE5, 19497 }, { 0x0011, 19500 }, { 0x1FE2, 19502 }, { 0x6B44, 19506 }, { 0x0016, 19509 }, { 0x1FE7, 19511 }, { 0x6B49, 19515 }, { 0x0012, 19518 }, { 0x1FE3, 19520 }, { 0x6B45, 19524 }, { 0x0015, 19527 }, { 0x1FE6, 19529 }, { 0x6B48, 19533 }, { 0x0014, 19536 }, { 0x1FE5, 19538 }, { 0x6B47, 19542 }, { 0x0019, 19545 }, { 0x1FEA, 19547 }, { 0x6B4C, 19551 }, { 0x0010, 19554 }, { 0x6B42, 19556 }, { 0x6B43, 19560 }, { 0x0018, 19563 }, { 0x1FE9, 19565 }, { 0x6B4B, 19569 }, { 0x0017, 19572 }, { 0x1FE8, 19574 }, { 0x6B4A, 19578 }, { 0x0013, 19581 }, { 0x1FE4, 19583 }, { 0x6B46, 19587 }, { 0x2A90, 19590 }, { 0x6F70, 19592 }, { 0x6DE6, 19594 }, { 0x6D92, 19596 }, { 0x2234, 19597 }, { 0x71C3, 19600 }, { 0x219B, 19601 }, { 0x6C49, 19602 }, { 0x6C48, 19605 }, { 0x6C4A, 19608 }, { 0x1F63, 19611 }, { 0x228D, 19613 }, { 0x228E, 19616 }, { 0x228F, 19620 }, { 0x2291, 19624 }, { 0x229B, 19629 }, { 0x22A4, 19634 }, { 0x1F58, 19638 }, { 0x6D37, 19640 }, { 0x6D38, 19644 }, { 0x6D39, 19648 }, { 0x6D3A, 19652 }, { 0x6D36, 19656 }, { 0x1D8E, 19660 }, { 0x250E, 19662 }, { 0x250D, 19668 }, { 0x250C, 19674 }, { 0x250B, 19680 }, { 0x6F00, 19684 }, { 0x6F02, 19686 }, { 0x6F01, 19689 }, { 0x6F07, 19692 }, { 0x6F08, 19694 }, { 0x6F06, 19696 }, { 0x1F0F, 19698 }, { 0x1DE6, 19700 }, { 0x1E67, 19704 }, { 0x1E68, 19708 }, { 0x1E65, 19712 }, { 0x1E66, 19716 }, { 0x1E5E, 19720 }, { 0x1EB4, 19724 }, { 0x1EAF, 19728 }, { 0x1C94, 19732 }, { 0x2185, 19734 }, { 0x224E, 19736 }, { 0x6D0C, 19737 }, { 0x71AA, 19742 }, { 0x1C1B, 19745 }, { 0x2197, 19748 }, { 0x6C56, 19751 }, { 0x6C4E, 19756 }, { 0x6C3C, 19760 }, { 0x6EF9, 19761 }, { 0x6EF8, 19765 }, { 0x6EF7, 19768 }, { 0x6C9F, 19771 }, { 0x1EAB, 19773 }, { 0x6DB6, 19774 }, { 0x1CC4, 19775 }, { 0x7005, 19777 }, { 0x71BA, 19779 }, { 0x6C4B, 19782 }, { 0x0040, 19785 }, { 0x038C, 19787 }, { 0x0340, 19790 }, { 0x038D, 19793 }, { 0x3FB2, 19796 }, { 0x3FB3, 19800 }, { 0x3FC8, 19806 }, { 0x038B, 19810 }, { 0x03B2, 19813 }, { 0x03A7, 19818 }, { 0x3FBA, 19821 }, { 0x3FB4, 19825 }, { 0x0386, 19829 }, { 0x3FBD, 19832 }, { 0x3FBC, 19836 }, { 0x3FB9, 19840 }, { 0x1BB2, 19843 }, { 0x3FB6, 19845 }, { 0x3FC7, 19848 }, { 0x1BB3, 19851 }, { 0x1B96, 19853 }, { 0x1B95, 19857 }, { 0x1B97, 19861 }, { 0x03A6, 19865 }, { 0x3FC0, 19868 }, { 0x0334, 19871 }, { 0x1B7B, 19875 }, { 0x1B89, 19877 }, { 0x1B88, 19881 }, { 0x1B8A, 19885 }, { 0x0339, 19889 }, { 0x0372, 19895 }, { 0x0373, 19899 }, { 0x0376, 19903 }, { 0x0374, 19907 }, { 0x037D, 19911 }, { 0x036D, 19915 }, { 0x1B34, 19919 }, { 0x1B80, 19925 }, { 0x1AE8, 19933 }, { 0x1AEC, 19939 }, { 0x1B52, 19947 }, { 0x1AEA, 19957 }, { 0x1B50, 19965 }, { 0x1AEE, 19975 }, { 0x1B54, 19983 }, { 0x1B4E, 19993 }, { 0x1AE7, 20001 }, { 0x1AEB, 20007 }, { 0x1B51, 20015 }, { 0x1AE9, 20025 }, { 0x1B4F, 20033 }, { 0x1AED, 20043 }, { 0x1B53, 20051 }, { 0x1B4D, 20061 }, { 0x0364, 20069 }, { 0x1B33, 20075 }, { 0x1B7E, 20081 }, { 0x1B81, 20089 }, { 0x1B82, 20095 }, { 0x1B7F, 20103 }, { 0x037C, 20109 }, { 0x037E, 20113 }, { 0x0377, 20117 }, { 0x1B9D, 20121 }, { 0x1B9C, 20127 }, { 0x03B1, 20133 }, { 0x03AE, 20137 }, { 0x037A, 20141 }, { 0x0368, 20145 }, { 0x0330, 20149 }, { 0x036F, 20153 }, { 0x1B36, 20157 }, { 0x1AF8, 20163 }, { 0x1AFC, 20169 }, { 0x1AFA, 20177 }, { 0x1AFE, 20185 }, { 0x1AF7, 20193 }, { 0x1AFB, 20199 }, { 0x1AF9, 20207 }, { 0x1AFD, 20215 }, { 0x0365, 20223 }, { 0x1B35, 20229 }, { 0x1B8C, 20235 }, { 0x1B8B, 20241 }, { 0x0380, 20247 }, { 0x1B8E, 20253 }, { 0x0347, 20261 }, { 0x1B8D, 20269 }, { 0x1B90, 20277 }, { 0x1B8F, 20285 }, { 0x036C, 20291 }, { 0x0367, 20295 }, { 0x1B30, 20299 }, { 0x1B71, 20305 }, { 0x1ACC, 20313 }, { 0x1AD0, 20319 }, { 0x1B42, 20327 }, { 0x1ACE, 20337 }, { 0x1B40, 20345 }, { 0x1AD2, 20355 }, { 0x1B44, 20363 }, { 0x1B3E, 20373 }, { 0x1ACB, 20381 }, { 0x1ACF, 20387 }, { 0x1B41, 20395 }, { 0x1ACD, 20405 }, { 0x1B3F, 20413 }, { 0x1AD1, 20423 }, { 0x1B43, 20431 }, { 0x1B3D, 20441 }, { 0x0362, 20449 }, { 0x1B2F, 20455 }, { 0x1B6F, 20461 }, { 0x1B6E, 20469 }, { 0x1B6D, 20475 }, { 0x1B72, 20481 }, { 0x1B73, 20487 }, { 0x1B70, 20495 }, { 0x036A, 20501 }, { 0x0378, 20505 }, { 0x0369, 20510 }, { 0x0370, 20514 }, { 0x0395, 20518 }, { 0x0371, 20522 }, { 0x037F, 20526 }, { 0x1B3C, 20530 }, { 0x1BAA, 20536 }, { 0x1B20, 20544 }, { 0x1B24, 20550 }, { 0x1B62, 20558 }, { 0x1B22, 20568 }, { 0x1B60, 20576 }, { 0x1B26, 20586 }, { 0x1B64, 20594 }, { 0x1B5E, 20604 }, { 0x1B1F, 20612 }, { 0x1B23, 20618 }, { 0x1B61, 20626 }, { 0x1B21, 20636 }, { 0x1B5F, 20644 }, { 0x1B25, 20654 }, { 0x1B63, 20662 }, { 0x1B5D, 20672 }, { 0x0384, 20680 }, { 0x1B3B, 20686 }, { 0x1BA8, 20692 }, { 0x1BAB, 20700 }, { 0x1BAC, 20706 }, { 0x1BA9, 20714 }, { 0x0397, 20720 }, { 0x0379, 20724 }, { 0x036E, 20728 }, { 0x0391, 20732 }, { 0x038F, 20736 }, { 0x0332, 20741 }, { 0x0393, 20746 }, { 0x036B, 20750 }, { 0x1B32, 20754 }, { 0x1ADC, 20760 }, { 0x1AE0, 20766 }, { 0x1ADE, 20774 }, { 0x1ADB, 20782 }, { 0x1ADF, 20788 }, { 0x1ADD, 20796 }, { 0x0363, 20804 }, { 0x1B31, 20810 }, { 0x0375, 20816 }, { 0x1B38, 20820 }, { 0x1B08, 20826 }, { 0x1B0C, 20832 }, { 0x1B0A, 20840 }, { 0x1B07, 20848 }, { 0x1B0B, 20854 }, { 0x1B09, 20862 }, { 0x0382, 20870 }, { 0x1B37, 20876 }, { 0x037B, 20882 }, { 0x1B3A, 20886 }, { 0x1B14, 20892 }, { 0x1B18, 20898 }, { 0x1B16, 20906 }, { 0x1B1A, 20914 }, { 0x1B13, 20922 }, { 0x1B17, 20928 }, { 0x1B15, 20936 }, { 0x1B19, 20944 }, { 0x0383, 20952 }, { 0x1B39, 20958 }, { 0x1B99, 20964 }, { 0x1B98, 20970 }, { 0x0381, 20976 }, { 0x1B9B, 20982 }, { 0x0366, 20990 }, { 0x1B9A, 20998 }, { 0x1B9F, 21006 }, { 0x1B9E, 21014 }, { 0x0336, 21020 }, { 0x033A, 21025 }, { 0x0338, 21032 }, { 0x0387, 21038 }, { 0x3FBB, 21041 }, { 0x3FB5, 21045 }, { 0x033D, 21049 }, { 0x1BA7, 21051 }, { 0x614C, 21053 }, { 0x614D, 21057 }, { 0x614E, 21061 }, { 0x614F, 21065 }, { 0x6150, 21069 }, { 0x6151, 21073 }, { 0x6152, 21077 }, { 0x6153, 21081 }, { 0x6154, 21085 }, { 0x6155, 21089 }, { 0x6156, 21093 }, { 0x6157, 21097 }, { 0x6158, 21101 }, { 0x6159, 21105 }, { 0x615A, 21109 }, { 0x615B, 21113 }, { 0x615C, 21117 }, { 0x615D, 21121 }, { 0x615E, 21125 }, { 0x615F, 21129 }, { 0x6160, 21133 }, { 0x6161, 21137 }, { 0x6162, 21141 }, { 0x6163, 21145 }, { 0x6164, 21149 }, { 0x6165, 21153 }, { 0x6166, 21157 }, { 0x6167, 21161 }, { 0x6168, 21165 }, { 0x3FC4, 21169 }, { 0x3FC3, 21172 }, { 0x3FC5, 21175 }, { 0x03A9, 21178 }, { 0x0394, 21181 }, { 0x0396, 21184 }, { 0x18F8, 21187 }, { 0x18FA, 21192 }, { 0x18F9, 21197 }, { 0x18F6, 21202 }, { 0x18F7, 21207 }, { 0x3937, 21212 }, { 0x0390, 21217 }, { 0x038E, 21220 }, { 0x0392, 21224 }, { 0x03A8, 21227 }, { 0x03AB, 21231 }, { 0x3FC1, 21235 }, { 0x3FD8, 21238 }, { 0x3FB7, 21242 }, { 0x3FC2, 21245 }, { 0x0385, 21248 }, { 0x03AA, 21252 }, { 0x03B4, 21256 }, { 0x0353, 21262 }, { 0x0354, 21266 }, { 0x0357, 21270 }, { 0x0355, 21274 }, { 0x035D, 21278 }, { 0x034E, 21282 }, { 0x1B86, 21286 }, { 0x1AF0, 21292 }, { 0x1AF4, 21298 }, { 0x1B5A, 21306 }, { 0x1AF2, 21316 }, { 0x1B58, 21324 }, { 0x1AF6, 21334 }, { 0x1B5C, 21342 }, { 0x1B56, 21352 }, { 0x1AEF, 21360 }, { 0x1AF3, 21366 }, { 0x1B59, 21374 }, { 0x1AF1, 21384 }, { 0x1B57, 21392 }, { 0x1AF5, 21402 }, { 0x1B5B, 21410 }, { 0x1B55, 21420 }, { 0x0342, 21428 }, { 0x1B85, 21434 }, { 0x1B87, 21440 }, { 0x035C, 21446 }, { 0x035E, 21450 }, { 0x0358, 21454 }, { 0x1BA4, 21458 }, { 0x03B0, 21464 }, { 0x03AD, 21468 }, { 0x035A, 21472 }, { 0x033C, 21476 }, { 0x0349, 21480 }, { 0x032F, 21484 }, { 0x0350, 21488 }, { 0x1B94, 21492 }, { 0x1B00, 21498 }, { 0x1B04, 21504 }, { 0x1B02, 21512 }, { 0x1B06, 21520 }, { 0x1AFF, 21528 }, { 0x1B03, 21534 }, { 0x1B01, 21542 }, { 0x1B05, 21550 }, { 0x0343, 21558 }, { 0x1B93, 21564 }, { 0x1B92, 21570 }, { 0x1B91, 21576 }, { 0x0360, 21582 }, { 0x034D, 21588 }, { 0x0348, 21592 }, { 0x1B77, 21596 }, { 0x1AD4, 21602 }, { 0x1AD8, 21608 }, { 0x1B4A, 21616 }, { 0x1AD6, 21626 }, { 0x1B48, 21634 }, { 0x1ADA, 21644 }, { 0x1B4C, 21652 }, { 0x1B46, 21662 }, { 0x1AD3, 21670 }, { 0x1AD7, 21676 }, { 0x1B49, 21684 }, { 0x1AD5, 21694 }, { 0x1B47, 21702 }, { 0x1AD9, 21712 }, { 0x1B4B, 21720 }, { 0x1B45, 21730 }, { 0x033F, 21738 }, { 0x1B76, 21744 }, { 0x1B75, 21750 }, { 0x1B74, 21756 }, { 0x1B78, 21762 }, { 0x034B, 21768 }, { 0x034A, 21772 }, { 0x0351, 21776 }, { 0x0352, 21780 }, { 0x035F, 21784 }, { 0x1BB0, 21788 }, { 0x1B28, 21794 }, { 0x1B2C, 21800 }, { 0x1B6A, 21808 }, { 0x1B2A, 21818 }, { 0x1B68, 21826 }, { 0x1B2E, 21836 }, { 0x1B6C, 21844 }, { 0x1B66, 21854 }, { 0x1B27, 21862 }, { 0x1B2B, 21868 }, { 0x1B69, 21876 }, { 0x1B29, 21886 }, { 0x1B67, 21894 }, { 0x1B2D, 21904 }, { 0x1B6B, 21912 }, { 0x1B65, 21922 }, { 0x0346, 21930 }, { 0x1BAF, 21936 }, { 0x1BB1, 21942 }, { 0x0359, 21948 }, { 0x034F, 21952 }, { 0x0331, 21956 }, { 0x034C, 21961 }, { 0x1B84, 21965 }, { 0x1AE2, 21971 }, { 0x1AE6, 21977 }, { 0x1AE4, 21985 }, { 0x1AE1, 21993 }, { 0x1AE5, 21999 }, { 0x1AE3, 22007 }, { 0x0341, 22015 }, { 0x1B83, 22021 }, { 0x0356, 22027 }, { 0x1BAE, 22031 }, { 0x1B0E, 22037 }, { 0x1B12, 22043 }, { 0x1B10, 22051 }, { 0x1B0D, 22059 }, { 0x1B11, 22065 }, { 0x1B0F, 22073 }, { 0x0344, 22081 }, { 0x1BAD, 22087 }, { 0x035B, 22093 }, { 0x1BA3, 22097 }, { 0x1B1B, 22103 }, { 0x1B1D, 22109 }, { 0x1B1C, 22117 }, { 0x1B1E, 22125 }, { 0x0345, 22133 }, { 0x1BA2, 22139 }, { 0x1BA1, 22145 }, { 0x1BA0, 22151 }, { 0x0361, 22157 }, { 0x0335, 22163 }, { 0x03AF, 22168 }, { 0x03B5, 22173 }, { 0x03B3, 22180 }, { 0x3FB8, 22186 }, { 0x1B79, 22189 }, { 0x3FBF, 22191 }, { 0x6191, 22195 }, { 0x0333, 22198 }, { 0x0388, 22201 }, { 0x0389, 22206 }, { 0x038A, 22213 }, { 0x3FBE, 22220 }, { 0x033B, 22223 }, { 0x03AC, 22226 }, { 0x3FC9, 22231 }, { 0x3FC6, 22234 }, { 0x1BA6, 22238 }, { 0x1BA5, 22242 }, { 0x1B7D, 22246 }, { 0x033E, 22250 }, { 0x3FCA, 22253 }, { 0x193A, 22256 }, { 0x1939, 22261 }, { 0x1938, 22266 }, { 0x1936, 22271 }, { 0x1937, 22276 }, { 0x3F7E, 22281 }, { 0x3F7F, 22286 }, { 0x3F8F, 22291 }, { 0x3F88, 22297 }, { 0x3F7D, 22303 }, { 0x3F91, 22308 }, { 0x3F8A, 22314 }, { 0x3F94, 22320 }, { 0x3F8D, 22325 }, { 0x3F86, 22330 }, { 0x3F92, 22335 }, { 0x3F80, 22341 }, { 0x3F82, 22345 }, { 0x3F90, 22350 }, { 0x3F89, 22356 }, { 0x3F8C, 22362 }, { 0x3F85, 22367 }, { 0x3F83, 22372 }, { 0x3F8B, 22377 }, { 0x3F81, 22383 }, { 0x3F8E, 22387 }, { 0x3F87, 22392 }, { 0x3F84, 22397 }, { 0x3F93, 22402 }, { 0x3FAD, 22408 }, { 0x3FB0, 22413 }, { 0x3F95, 22418 }, { 0x3F9A, 22423 }, { 0x3FB1, 22428 }, { 0x3F96, 22433 }, { 0x3FA7, 22437 }, { 0x3FAE, 22442 }, { 0x3FA1, 22447 }, { 0x3F99, 22451 }, { 0x3FAB, 22455 }, { 0x3FAF, 22460 }, { 0x3FA6, 22465 }, { 0x3FA8, 22469 }, { 0x3FA2, 22474 }, { 0x3FAC, 22478 }, { 0x3FA0, 22483 }, { 0x3F98, 22487 }, { 0x3F9B, 22491 }, { 0x3FA9, 22496 }, { 0x3F97, 22501 }, { 0x3F9F, 22505 }, { 0x3FA5, 22509 }, { 0x3F9D, 22513 }, { 0x3F9E, 22517 }, { 0x3F9C, 22523 }, { 0x3FAA, 22527 }, { 0x3FA3, 22532 }, { 0x3FA4, 22536 }, { 0x1B7C, 22542 }, { 0x6169, 22544 }, { 0x616A, 22548 }, { 0x616B, 22552 }, { 0x616C, 22556 }, { 0x616D, 22560 }, { 0x616E, 22564 }, { 0x616F, 22568 }, { 0x6170, 22572 }, { 0x6171, 22576 }, { 0x6172, 22580 }, { 0x6173, 22584 }, { 0x6174, 22588 }, { 0x6175, 22592 }, { 0x6176, 22596 }, { 0x6177, 22600 }, { 0x6178, 22604 }, { 0x6179, 22608 }, { 0x617A, 22612 }, { 0x617B, 22616 }, { 0x617C, 22620 }, { 0x617D, 22624 }, { 0x617E, 22628 }, { 0x617F, 22632 }, { 0x6180, 22636 }, { 0x6181, 22640 }, { 0x6182, 22644 }, { 0x6183, 22648 }, { 0x6184, 22652 }, { 0x6185, 22656 }, { 0x6186, 22660 }, { 0x6187, 22664 }, { 0x6188, 22668 }, { 0x6189, 22672 }, { 0x618A, 22676 }, { 0x618B, 22680 }, { 0x618C, 22684 }, { 0x618D, 22688 }, { 0x0337, 22692 }, { 0x1B7A, 22694 }, { 0x6E12, 22696 }, { 0x6C8A, 22698 }, { 0x6DD5, 22700 }, { 0x71B6, 22702 }, { 0x6F86, 22704 }, { 0x6CCF, 22709 }, { 0x6DD3, 22715 }, { 0x6DD8, 22718 }, { 0x6DDA, 22721 }, { 0x22BA, 22723 }, { 0x22B9, 22730 }, { 0x70CE, 22737 }, { 0x70E2, 22741 }, { 0x70C8, 22746 }, { 0x70E0, 22750 }, { 0x227E, 22755 }, { 0x2276, 22759 }, { 0x26B0, 22763 }, { 0x22EF, 22768 }, { 0x716D, 22771 }, { 0x716F, 22776 }, { 0x7170, 22782 }, { 0x716E, 22788 }, { 0x22BE, 22794 }, { 0x2300, 22797 }, { 0x22FF, 22804 }, { 0x226E, 22811 }, { 0x70D4, 22814 }, { 0x70E5, 22818 }, { 0x70E7, 22823 }, { 0x2292, 22828 }, { 0x22A5, 22834 }, { 0x2274, 22839 }, { 0x22BD, 22842 }, { 0x26AF, 22847 }, { 0x6E82, 22850 }, { 0x2307, 22853 }, { 0x22F0, 22859 }, { 0x22F4, 22862 }, { 0x6FA1, 22866 }, { 0x6F99, 22871 }, { 0x6F9F, 22877 }, { 0x6F97, 22882 }, { 0x22F2, 22888 }, { 0x6FA2, 22892 }, { 0x6F9A, 22897 }, { 0x6FA0, 22903 }, { 0x6F98, 22908 }, { 0x2308, 22914 }, { 0x709D, 22920 }, { 0x70A7, 22923 }, { 0x2235, 22926 }, { 0x2272, 22930 }, { 0x26B2, 22933 }, { 0x26B1, 22935 }, { 0x223D, 22940 }, { 0x22FA, 22948 }, { 0x6DED, 22953 }, { 0x22B8, 22956 }, { 0x22B7, 22962 }, { 0x6FAC, 22969 }, { 0x22B6, 22974 }, { 0x22B5, 22980 }, { 0x70E9, 22987 }, { 0x70EA, 22992 }, { 0x22A0, 22997 }, { 0x26B3, 23000 }, { 0x70C2, 23003 }, { 0x22A2, 23005 }, { 0x7104, 23007 }, { 0x7100, 23014 }, { 0x228B, 23020 }, { 0x22F1, 23022 }, { 0x6FAE, 23025 }, { 0x2288, 23030 }, { 0x22B4, 23034 }, { 0x6FAF, 23037 }, { 0x7106, 23040 }, { 0x7102, 23047 }, { 0x7103, 23053 }, { 0x70FF, 23060 }, { 0x22F3, 23066 }, { 0x7105, 23069 }, { 0x7101, 23076 }, { 0x6FB6, 23082 }, { 0x22B1, 23086 }, { 0x22BC, 23090 }, { 0x6FB4, 23094 }, { 0x22EE, 23097 }, { 0x22F6, 23101 }, { 0x2317, 23105 }, { 0x22CA, 23109 }, { 0x22C8, 23114 }, { 0x2270, 23120 }, { 0x22CB, 23123 }, { 0x22C9, 23128 }, { 0x2313, 23134 }, { 0x2311, 23139 }, { 0x2312, 23144 }, { 0x2302, 23148 }, { 0x2297, 23153 }, { 0x229D, 23156 }, { 0x22F8, 23160 }, { 0x2315, 23164 }, { 0x6E65, 23168 }, { 0x6CAA, 23169 }, { 0x6D49, 23171 }, { 0x6D6F, 23172 }, { 0x6D02, 23174 }, { 0x6D23, 23176 }, { 0x1E8B, 23177 }, { 0x6D1C, 23178 }, { 0x6D1B, 23181 }, { 0x6D13, 23183 }, { 0x1E40, 23185 }, { 0x1DDC, 23187 }, { 0x6E20, 23193 }, { 0x6E5C, 23195 }, { 0x6E5B, 23201 }, { 0x6E5F, 23207 }, { 0x6E5D, 23212 }, { 0x6E5E, 23216 }, { 0x6D91, 23220 }, { 0x6E86, 23221 }, { 0x3752, 23222 }, { 0x3753, 23226 }, { 0x3750, 23230 }, { 0x3751, 23234 }, { 0x374F, 23239 }, { 0x3725, 23243 }, { 0x372A, 23247 }, { 0x3726, 23251 }, { 0x3729, 23255 }, { 0x3728, 23259 }, { 0x372D, 23263 }, { 0x3724, 23267 }, { 0x372C, 23271 }, { 0x372B, 23275 }, { 0x3727, 23279 }, { 0x374B, 23283 }, { 0x374E, 23287 }, { 0x374C, 23291 }, { 0x374D, 23295 }, { 0x374A, 23299 }, { 0x3746, 23303 }, { 0x3748, 23307 }, { 0x373D, 23311 }, { 0x3745, 23315 }, { 0x373C, 23319 }, { 0x3730, 23323 }, { 0x3743, 23327 }, { 0x372E, 23331 }, { 0x3740, 23335 }, { 0x373B, 23339 }, { 0x3738, 23343 }, { 0x3747, 23347 }, { 0x3749, 23351 }, { 0x3739, 23355 }, { 0x373E, 23359 }, { 0x3732, 23363 }, { 0x3736, 23367 }, { 0x3744, 23371 }, { 0x3741, 23375 }, { 0x373F, 23379 }, { 0x3734, 23383 }, { 0x3737, 23387 }, { 0x372F, 23391 }, { 0x3731, 23395 }, { 0x3735, 23399 }, { 0x373A, 23403 }, { 0x3733, 23407 }, { 0x3742, 23411 }, { 0x14A8, 23415 }, { 0x14A5, 23419 }, { 0x14A0, 23422 }, { 0x14A3, 23425 }, { 0x149D, 23428 }, { 0x149C, 23431 }, { 0x14A9, 23434 }, { 0x14A7, 23437 }, { 0x14AA, 23442 }, { 0x14A1, 23446 }, { 0x14A2, 23450 }, { 0x149F, 23453 }, { 0x14AB, 23456 }, { 0x1497, 23459 }, { 0x1498, 23462 }, { 0x149B, 23465 }, { 0x14AE, 23468 }, { 0x14A6, 23471 }, { 0x14A4, 23474 }, { 0x149A, 23477 }, { 0x149E, 23480 }, { 0x14AD, 23483 }, { 0x1499, 23486 }, { 0x14B0, 23489 }, { 0x14B5, 23492 }, { 0x14B1, 23495 }, { 0x14B4, 23498 }, { 0x14B3, 23501 }, { 0x14B8, 23504 }, { 0x14AF, 23507 }, { 0x14B7, 23510 }, { 0x14B6, 23513 }, { 0x14B2, 23516 }, { 0x1492, 23519 }, { 0x1488, 23523 }, { 0x148C, 23527 }, { 0x148A, 23531 }, { 0x1487, 23535 }, { 0x1493, 23539 }, { 0x1494, 23543 }, { 0x1496, 23547 }, { 0x1491, 23551 }, { 0x1489, 23555 }, { 0x148F, 23559 }, { 0x1495, 23563 }, { 0x148E, 23567 }, { 0x148D, 23571 }, { 0x1490, 23575 }, { 0x148B, 23579 }, { 0x1486, 23583 }, { 0x1485, 23587 }, { 0x1465, 23591 }, { 0x1456, 23594 }, { 0x1458, 23597 }, { 0x145B, 23600 }, { 0x145D, 23603 }, { 0x1471, 23606 }, { 0x1451, 23609 }, { 0x1453, 23612 }, { 0x1472, 23615 }, { 0x146C, 23618 }, { 0x1469, 23621 }, { 0x1464, 23624 }, { 0x1467, 23627 }, { 0x1473, 23630 }, { 0x146B, 23633 }, { 0x1470, 23636 }, { 0x1460, 23639 }, { 0x1462, 23642 }, { 0x146D, 23645 }, { 0x146A, 23648 }, { 0x1457, 23651 }, { 0x1459, 23654 }, { 0x1452, 23657 }, { 0x1454, 23660 }, { 0x1455, 23663 }, { 0x145F, 23666 }, { 0x145A, 23669 }, { 0x1466, 23672 }, { 0x1468, 23675 }, { 0x146E, 23678 }, { 0x146F, 23681 }, { 0x1461, 23684 }, { 0x1463, 23687 }, { 0x145C, 23690 }, { 0x145E, 23693 }, { 0x1672, 23696 }, { 0x1662, 23700 }, { 0x1679, 23704 }, { 0x1669, 23708 }, { 0x14BC, 23712 }, { 0x14BB, 23717 }, { 0x14B9, 23722 }, { 0x14BD, 23727 }, { 0x14BA, 23732 }, { 0x14BE, 23737 }, { 0x14C1, 23742 }, { 0x14C0, 23747 }, { 0x14C2, 23752 }, { 0x14BF, 23757 }, { 0x1671, 23762 }, { 0x1661, 23766 }, { 0x1673, 23770 }, { 0x1663, 23774 }, { 0x1670, 23778 }, { 0x1660, 23782 }, { 0x1674, 23786 }, { 0x1664, 23790 }, { 0x167C, 23794 }, { 0x166C, 23798 }, { 0x167B, 23802 }, { 0x166B, 23806 }, { 0x167D, 23810 }, { 0x166D, 23814 }, { 0x167A, 23818 }, { 0x166A, 23822 }, { 0x167E, 23826 }, { 0x166E, 23830 }, { 0x1677, 23834 }, { 0x1667, 23838 }, { 0x1676, 23842 }, { 0x1666, 23846 }, { 0x1678, 23850 }, { 0x1668, 23854 }, { 0x1675, 23858 }, { 0x1665, 23862 }, { 0x166F, 23866 }, { 0x165F, 23869 }, { 0x14AC, 23872 }, { 0x147E, 23876 }, { 0x1480, 23880 }, { 0x1476, 23884 }, { 0x1478, 23888 }, { 0x147C, 23892 }, { 0x147F, 23896 }, { 0x1475, 23900 }, { 0x1481, 23904 }, { 0x1474, 23908 }, { 0x1484, 23912 }, { 0x1477, 23916 }, { 0x1482, 23920 }, { 0x1483, 23926 }, { 0x1479, 23932 }, { 0x147A, 23936 }, { 0x147D, 23940 }, { 0x147B, 23944 }, { 0x6D63, 23948 }, { 0x6D32, 23949 }, { 0x2332, 23950 }, { 0x4626, 23953 }, { 0x4628, 23960 }, { 0x6E6F, 23967 }, { 0x4625, 23970 }, { 0x4627, 23977 }, { 0x6E70, 23984 }, { 0x6E72, 23987 }, { 0x2333, 23990 }, { 0x2578, 23993 }, { 0x2149, 23997 }, { 0x6E71, 23999 }, { 0x2656, 24002 }, { 0x2277, 24007 }, { 0x0041, 24009 }, { 0x01E6, 24013 }, { 0x01A0, 24020 }, { 0x1A6C, 24029 }, { 0x1A6E, 24036 }, { 0x00A4, 24043 }, { 0x01BA, 24050 }, { 0x19CC, 24059 }, { 0x00A0, 24066 }, { 0x00C2, 24072 }, { 0x1A82, 24078 }, { 0x1A7E, 24087 }, { 0x1A7A, 24096 }, { 0x1A7C, 24104 }, { 0x1A80, 24112 }, { 0x018D, 24120 }, { 0x009F, 24126 }, { 0x1A65, 24132 }, { 0x00A2, 24140 }, { 0x01C0, 24146 }, { 0x00C0, 24153 }, { 0x00C4, 24159 }, { 0x278B, 24165 }, { 0x01C2, 24171 }, { 0x00A3, 24178 }, { 0x019E, 24184 }, { 0x195F, 24192 }, { 0x00A1, 24199 }, { 0x1A78, 24205 }, { 0x1A74, 24214 }, { 0x1A70, 24223 }, { 0x1A72, 24231 }, { 0x1A76, 24239 }, { 0x3903, 24247 }, { 0x0042, 24252 }, { 0x19CE, 24256 }, { 0x19D0, 24263 }, { 0x0212, 24270 }, { 0x19D2, 24276 }, { 0x193C, 24283 }, { 0x013F, 24290 }, { 0x0142, 24296 }, { 0x1950, 24302 }, { 0x361D, 24309 }, { 0x0043, 24315 }, { 0x3619, 24319 }, { 0x00CA, 24325 }, { 0x0214, 24332 }, { 0x0147, 24338 }, { 0x00C6, 24344 }, { 0x00CC, 24350 }, { 0x01FB, 24356 }, { 0x00A6, 24362 }, { 0x19D4, 24368 }, { 0x361A, 24376 }, { 0x00C8, 24383 }, { 0x0044, 24389 }, { 0x19D6, 24393 }, { 0x19D8, 24400 }, { 0x01E0, 24407 }, { 0x0216, 24413 }, { 0x1961, 24419 }, { 0x19DA, 24427 }, { 0x0215, 24434 }, { 0x00CE, 24440 }, { 0x193D, 24446 }, { 0x00D0, 24453 }, { 0x014B, 24459 }, { 0x19DC, 24465 }, { 0x1951, 24471 }, { 0x19DE, 24478 }, { 0x0045, 24485 }, { 0x00D6, 24489 }, { 0x1A84, 24496 }, { 0x1A86, 24503 }, { 0x00A8, 24510 }, { 0x00D4, 24516 }, { 0x00DA, 24522 }, { 0x00A7, 24528 }, { 0x279E, 24534 }, { 0x1A88, 24540 }, { 0x19E6, 24546 }, { 0x01C4, 24553 }, { 0x00D2, 24560 }, { 0x19E2, 24566 }, { 0x19E0, 24574 }, { 0x00D8, 24582 }, { 0x0206, 24588 }, { 0x01E8, 24594 }, { 0x19E8, 24600 }, { 0x3906, 24608 }, { 0x01C6, 24614 }, { 0x00AA, 24621 }, { 0x1962, 24627 }, { 0x00A9, 24634 }, { 0x1A92, 24640 }, { 0x1A8E, 24649 }, { 0x1A8A, 24658 }, { 0x1A8C, 24666 }, { 0x1A90, 24674 }, { 0x19E4, 24682 }, { 0x0046, 24689 }, { 0x19EA, 24693 }, { 0x0151, 24700 }, { 0x193E, 24706 }, { 0x361F, 24713 }, { 0x1952, 24719 }, { 0x0047, 24726 }, { 0x00E0, 24730 }, { 0x021F, 24737 }, { 0x01B4, 24743 }, { 0x00DE, 24749 }, { 0x01A6, 24755 }, { 0x19EC, 24761 }, { 0x01A4, 24767 }, { 0x00E2, 24773 }, { 0x3627, 24779 }, { 0x1953, 24786 }, { 0x00DC, 24793 }, { 0x0048, 24799 }, { 0x19EE, 24803 }, { 0x19F0, 24810 }, { 0x0225, 24817 }, { 0x1A61, 24823 }, { 0x19F6, 24830 }, { 0x01DE, 24837 }, { 0x00E6, 24843 }, { 0x19F4, 24849 }, { 0x361B, 24855 }, { 0x278E, 24862 }, { 0x19F2, 24868 }, { 0x00E4, 24874 }, { 0x0049, 24880 }, { 0x1A96, 24884 }, { 0x1A94, 24891 }, { 0x00AC, 24898 }, { 0x00EC, 24904 }, { 0x018F, 24910 }, { 0x00AB, 24916 }, { 0x00E8, 24922 }, { 0x19F8, 24928 }, { 0x01C8, 24935 }, { 0x00EA, 24942 }, { 0x00EE, 24948 }, { 0x0227, 24954 }, { 0x01CA, 24960 }, { 0x00AE, 24967 }, { 0x19FA, 24973 }, { 0x1966, 24981 }, { 0x00AD, 24988 }, { 0x004A, 24994 }, { 0x01AF, 24998 }, { 0x0208, 25004 }, { 0x00F4, 25010 }, { 0x025C, 25016 }, { 0x004B, 25022 }, { 0x19FE, 25026 }, { 0x0158, 25033 }, { 0x1A00, 25039 }, { 0x19FC, 25046 }, { 0x01A8, 25052 }, { 0x35C7, 25058 }, { 0x35CB, 25064 }, { 0x00F6, 25073 }, { 0x3629, 25079 }, { 0x1954, 25086 }, { 0x35C9, 25093 }, { 0x2790, 25100 }, { 0x004C, 25106 }, { 0x0159, 25110 }, { 0x1A02, 25116 }, { 0x1A04, 25123 }, { 0x022B, 25132 }, { 0x01F3, 25138 }, { 0x35CF, 25144 }, { 0x1A06, 25151 }, { 0x00F9, 25158 }, { 0x00FD, 25164 }, { 0x2787, 25170 }, { 0x390A, 25177 }, { 0x00FF, 25185 }, { 0x390B, 25192 }, { 0x022A, 25199 }, { 0x0101, 25206 }, { 0x00FB, 25212 }, { 0x1955, 25218 }, { 0x3909, 25225 }, { 0x022C, 25233 }, { 0x3614, 25240 }, { 0x1A08, 25249 }, { 0x004D, 25256 }, { 0x1A0C, 25260 }, { 0x1A0E, 25267 }, { 0x0230, 25274 }, { 0x1A0A, 25280 }, { 0x193F, 25286 }, { 0x1956, 25293 }, { 0x390C, 25300 }, { 0x004E, 25306 }, { 0x1A10, 25310 }, { 0x1A12, 25317 }, { 0x01F4, 25324 }, { 0x0231, 25330 }, { 0x1A14, 25337 }, { 0x015D, 25344 }, { 0x0103, 25352 }, { 0x0107, 25358 }, { 0x01B8, 25364 }, { 0x00B0, 25370 }, { 0x1940, 25376 }, { 0x0105, 25383 }, { 0x362B, 25389 }, { 0x1957, 25396 }, { 0x3617, 25403 }, { 0x0232, 25409 }, { 0x1A16, 25416 }, { 0x390D, 25423 }, { 0x0108, 25429 }, { 0x004F, 25436 }, { 0x01EE, 25440 }, { 0x01F0, 25447 }, { 0x1A98, 25456 }, { 0x27A0, 25463 }, { 0x1A9A, 25471 }, { 0x0160, 25478 }, { 0x1AAE, 25484 }, { 0x1AAA, 25493 }, { 0x1AA6, 25502 }, { 0x1AA8, 25510 }, { 0x1AAC, 25518 }, { 0x35D1, 25526 }, { 0x35D3, 25534 }, { 0x00B2, 25540 }, { 0x010E, 25546 }, { 0x0191, 25552 }, { 0x00B1, 25558 }, { 0x00B4, 25564 }, { 0x1A18, 25570 }, { 0x01EC, 25578 }, { 0x1A1A, 25586 }, { 0x0110, 25594 }, { 0x01CC, 25601 }, { 0x010C, 25608 }, { 0x1A1E, 25614 }, { 0x1A1C, 25622 }, { 0x01AA, 25630 }, { 0x01AC, 25636 }, { 0x00B7, 25644 }, { 0x01BE, 25650 }, { 0x01CE, 25658 }, { 0x00B5, 25665 }, { 0x01EA, 25671 }, { 0x00B3, 25679 }, { 0x1AA4, 25685 }, { 0x1AA0, 25694 }, { 0x1A9C, 25703 }, { 0x1A9E, 25711 }, { 0x1AA2, 25719 }, { 0x0050, 25727 }, { 0x1A22, 25731 }, { 0x0164, 25738 }, { 0x1A20, 25744 }, { 0x1941, 25750 }, { 0x194D, 25757 }, { 0x35D7, 25763 }, { 0x1958, 25771 }, { 0x35D9, 25778 }, { 0x35DB, 25784 }, { 0x0051, 25791 }, { 0x025F, 25795 }, { 0x020A, 25801 }, { 0x35DD, 25808 }, { 0x35DF, 25816 }, { 0x0052, 25823 }, { 0x1A24, 25827 }, { 0x1A26, 25834 }, { 0x1A28, 25841 }, { 0x1A2A, 25850 }, { 0x023B, 25857 }, { 0x023C, 25864 }, { 0x0114, 25870 }, { 0x0118, 25876 }, { 0x01D0, 25882 }, { 0x1942, 25889 }, { 0x020C, 25896 }, { 0x0116, 25902 }, { 0x362D, 25908 }, { 0x1959, 25915 }, { 0x023D, 25922 }, { 0x1943, 25928 }, { 0x01D2, 25937 }, { 0x391B, 25944 }, { 0x35E1, 25950 }, { 0x3919, 25955 }, { 0x0053, 25961 }, { 0x1A2C, 25965 }, { 0x1A2E, 25972 }, { 0x1A34, 25979 }, { 0x0241, 25989 }, { 0x011A, 25995 }, { 0x1A30, 26001 }, { 0x0120, 26010 }, { 0x1A32, 26016 }, { 0x01D8, 26025 }, { 0x01FE, 26032 }, { 0x1944, 26039 }, { 0x011E, 26046 }, { 0x362F, 26052 }, { 0x195A, 26059 }, { 0x011C, 26066 }, { 0x0054, 26072 }, { 0x1A36, 26076 }, { 0x1A38, 26083 }, { 0x01F5, 26090 }, { 0x016C, 26096 }, { 0x1A3A, 26102 }, { 0x0124, 26109 }, { 0x01DA, 26115 }, { 0x1945, 26122 }, { 0x0126, 26129 }, { 0x0122, 26135 }, { 0x016A, 26141 }, { 0x278C, 26148 }, { 0x1A62, 26155 }, { 0x0247, 26161 }, { 0x1A3C, 26168 }, { 0x0055, 26175 }, { 0x0248, 26179 }, { 0x3921, 26184 }, { 0x1AB0, 26193 }, { 0x1AB2, 26200 }, { 0x016F, 26207 }, { 0x1ABC, 26213 }, { 0x1AB8, 26222 }, { 0x1AB4, 26231 }, { 0x1AB6, 26239 }, { 0x1ABA, 26247 }, { 0x3924, 26255 }, { 0x012E, 26262 }, { 0x00B9, 26269 }, { 0x012C, 26275 }, { 0x0193, 26281 }, { 0x00B8, 26287 }, { 0x3920, 26293 }, { 0x0128, 26301 }, { 0x1A44, 26307 }, { 0x1A40, 26315 }, { 0x0130, 26322 }, { 0x01D4, 26329 }, { 0x012A, 26336 }, { 0x1A46, 26342 }, { 0x0132, 26350 }, { 0x01D6, 26356 }, { 0x00BB, 26363 }, { 0x0197, 26369 }, { 0x0199, 26377 }, { 0x019B, 26385 }, { 0x0195, 26393 }, { 0x1A3E, 26401 }, { 0x1969, 26408 }, { 0x00BA, 26415 }, { 0x1A42, 26421 }, { 0x0056, 26428 }, { 0x1A4A, 26432 }, { 0x279A, 26439 }, { 0x024A, 26445 }, { 0x2797, 26451 }, { 0x1A48, 26458 }, { 0x195C, 26464 }, { 0x35E5, 26471 }, { 0x0057, 26478 }, { 0x1A52, 26482 }, { 0x1A54, 26489 }, { 0x2799, 26496 }, { 0x1A63, 26502 }, { 0x1A4E, 26509 }, { 0x1A4C, 26515 }, { 0x1A50, 26521 }, { 0x0134, 26527 }, { 0x0058, 26533 }, { 0x1A56, 26537 }, { 0x3928, 26544 }, { 0x3929, 26552 }, { 0x392A, 26560 }, { 0x392B, 26572 }, { 0x195D, 26582 }, { 0x1A58, 26589 }, { 0x0059, 26595 }, { 0x1A5A, 26599 }, { 0x1AC0, 26606 }, { 0x0173, 26613 }, { 0x1AC2, 26619 }, { 0x1ACA, 26626 }, { 0x1A64, 26632 }, { 0x00BC, 26639 }, { 0x1ABE, 26645 }, { 0x392C, 26651 }, { 0x1AC4, 26659 }, { 0x01F2, 26665 }, { 0x020E, 26671 }, { 0x00BE, 26677 }, { 0x0136, 26683 }, { 0x005A, 26689 }, { 0x013B, 26693 }, { 0x1A5E, 26700 }, { 0x0250, 26707 }, { 0x01E4, 26713 }, { 0x1A60, 26719 }, { 0x0139, 26726 }, { 0x013D, 26732 }, { 0x01FF, 26738 }, { 0x1946, 26745 }, { 0x0175, 26752 }, { 0x195E, 26758 }, { 0x2792, 26765 }, { 0x024F, 26771 }, { 0x1A5C, 26778 }, { 0x35B9, 26784 }, { 0x00A5, 26788 }, { 0x01BC, 26792 }, { 0x01A2, 26798 }, { 0x35BB, 26804 }, { 0x35BD, 26808 }, { 0x35BF, 26812 }, { 0x35C1, 26816 }, { 0x35C3, 26823 }, { 0x01F7, 26827 }, { 0x01B2, 26832 }, { 0x0185, 26836 }, { 0x0262, 26842 }, { 0x0264, 26847 }, { 0x35F1, 26854 }, { 0x0154, 26858 }, { 0x35F3, 26862 }, { 0x0188, 26866 }, { 0x0269, 26870 }, { 0x026A, 26875 }, { 0x018B, 26880 }, { 0x0162, 26884 }, { 0x35D5, 26888 }, { 0x01E2, 26892 }, { 0x01F8, 26896 }, { 0x0267, 26901 }, { 0x194A, 26908 }, { 0x0265, 26914 }, { 0x35AF, 26919 }, { 0x193B, 26923 }, { 0x3922, 26927 }, { 0x35FE, 26931 }, { 0x3935, 26935 }, { 0x35E7, 26939 }, { 0x3925, 26943 }, { 0x3927, 26947 }, { 0x3926, 26955 }, { 0x35F5, 26963 }, { 0x35F7, 26967 }, { 0x010A, 26971 }, { 0x390E, 26975 }, { 0x0242, 26981 }, { 0x0245, 26985 }, { 0x195B, 26991 }, { 0x1968, 26998 }, { 0x00AF, 27005 }, { 0x0251, 27009 }, { 0x0252, 27013 }, { 0x0179, 27019 }, { 0x01AE, 27025 }, { 0x196A, 27031 }, { 0x0178, 27038 }, { 0x0162, 27043 }, { 0x00F7, 27047 }, { 0x35F8, 27051 }, { 0x35F9, 27055 }, { 0x35FA, 27059 }, { 0x0237, 27063 }, { 0x35FB, 27067 }, { 0x35E3, 27071 }, { 0x18E6, 27076 }, { 0x35FD, 27082 }, { 0x363A, 27086 }, { 0x0263, 27090 }, { 0x0268, 27095 }, { 0x279C, 27100 }, { 0x35AD, 27105 }, { 0x0226, 27109 }, { 0x0228, 27115 }, { 0x194C, 27119 }, { 0x022D, 27125 }, { 0x013E, 27129 }, { 0x1A66, 27134 }, { 0x1A68, 27142 }, { 0x1A67, 27150 }, { 0x021A, 27158 }, { 0x1963, 27163 }, { 0x0213, 27171 }, { 0x3911, 27176 }, { 0x1967, 27183 }, { 0x3934, 27191 }, { 0x0223, 27196 }, { 0x0266, 27201 }, { 0x0144, 27206 }, { 0x0167, 27211 }, { 0x017C, 27216 }, { 0x35EF, 27221 }, { 0x01DC, 27225 }, { 0x0210, 27229 }, { 0x1960, 27233 }, { 0x1A6A, 27240 }, { 0x0222, 27244 }, { 0x3907, 27248 }, { 0x363C, 27253 }, { 0x3932, 27257 }, { 0x0218, 27262 }, { 0x0219, 27266 }, { 0x1965, 27272 }, { 0x009E, 27279 }, { 0x0244, 27284 }, { 0x00BD, 27290 }, { 0x35EB, 27294 }, { 0x35ED, 27300 }, { 0x3905, 27308 }, { 0x0234, 27313 }, { 0x3902, 27318 }, { 0x18E7, 27323 }, { 0x35CD, 27329 }, { 0x0259, 27334 }, { 0x0236, 27340 }, { 0x021D, 27345 }, { 0x391A, 27352 }, { 0x391C, 27357 }, { 0x015A, 27364 }, { 0x0220, 27370 }, { 0x3908, 27375 }, { 0x391D, 27382 }, { 0x391E, 27387 }, { 0x020F, 27394 }, { 0x019C, 27399 }, { 0x1947, 27404 }, { 0x0224, 27409 }, { 0x026D, 27414 }, { 0x026E, 27421 }, { 0x18D9, 27430 }, { 0x025D, 27435 }, { 0x3607, 27440 }, { 0x022E, 27445 }, { 0x022F, 27450 }, { 0x3915, 27458 }, { 0x3916, 27464 }, { 0x0238, 27472 }, { 0x023A, 27477 }, { 0x0239, 27484 }, { 0x279F, 27492 }, { 0x0246, 27499 }, { 0x024B, 27504 }, { 0x024C, 27509 }, { 0x024D, 27514 }, { 0x18D2, 27519 }, { 0x18E4, 27524 }, { 0x3913, 27529 }, { 0x3914, 27536 }, { 0x3923, 27544 }, { 0x18D8, 27549 }, { 0x0211, 27555 }, { 0x014C, 27560 }, { 0x3605, 27565 }, { 0x00F0, 27571 }, { 0x01F6, 27576 }, { 0x021E, 27581 }, { 0x0243, 27588 }, { 0x0201, 27597 }, { 0x3600, 27602 }, { 0x3602, 27607 }, { 0x1949, 27612 }, { 0x3609, 27617 }, { 0x360B, 27622 }, { 0x360D, 27627 }, { 0x3917, 27632 }, { 0x0249, 27637 }, { 0x194F, 27641 }, { 0x3621, 27647 }, { 0x3623, 27652 }, { 0x3625, 27657 }, { 0x391F, 27662 }, { 0x3912, 27667 }, { 0x3936, 27672 }, { 0x3933, 27677 }, { 0x1D11, 27682 }, { 0x35C5, 27687 }, { 0x0217, 27694 }, { 0x023E, 27699 }, { 0x021B, 27706 }, { 0x021C, 27712 }, { 0x1964, 27720 }, { 0x3612, 27729 }, { 0x18E1, 27733 }, { 0x18E3, 27738 }, { 0x18ED, 27745 }, { 0x18E2, 27750 }, { 0x18EF, 27756 }, { 0x18EE, 27762 }, { 0x279D, 27768 }, { 0x35B1, 27773 }, { 0x35B3, 27777 }, { 0x35B5, 27781 }, { 0x35E9, 27787 }, { 0x3904, 27792 }, { 0x390F, 27797 }, { 0x3910, 27802 }, { 0x1AC8, 27809 }, { 0x1AC6, 27814 }, { 0x35AB, 27819 }, { 0x35A9, 27824 }, { 0x194B, 27829 }, { 0x194E, 27836 }, { 0x3A0D, 27843 }, { 0x3A0E, 27847 }, { 0x3A0F, 27851 }, { 0x00F2, 27855 }, { 0x0112, 27859 }, { 0x3A13, 27863 }, { 0x3A10, 27867 }, { 0x3A11, 27871 }, { 0x3A12, 27875 }, { 0x0165, 27881 }, { 0x18F5, 27884 }, { 0x017A, 27887 }, { 0x017E, 27892 }, { 0x18D0, 27895 }, { 0x0258, 27900 }, { 0x18D4, 27905 }, { 0x18D5, 27910 }, { 0x18D7, 27915 }, { 0x35B6, 27920 }, { 0x0221, 27925 }, { 0x025A, 27930 }, { 0x025B, 27937 }, { 0x0229, 27942 }, { 0x18DA, 27947 }, { 0x18DB, 27952 }, { 0x025E, 27957 }, { 0x18DC, 27962 }, { 0x18DD, 27969 }, { 0x0233, 27974 }, { 0x18DF, 27979 }, { 0x18E8, 27984 }, { 0x023F, 27989 }, { 0x3918, 27994 }, { 0x35B7, 28002 }, { 0x18EB, 28007 }, { 0x18EC, 28012 }, { 0x18F0, 28017 }, { 0x18F1, 28022 }, { 0x024E, 28027 }, { 0x18F2, 28032 }, { 0x18D1, 28037 }, { 0x0235, 28042 }, { 0x18E5, 28047 }, { 0x18D6, 28052 }, { 0x18F3, 28057 }, { 0x35FC, 28062 }, { 0x18E0, 28067 }, { 0x18D3, 28073 }, { 0x27A1, 28079 }, { 0x3640, 28085 }, { 0x18EA, 28091 }, { 0x0240, 28097 }, { 0x18DE, 28103 }, { 0x18E9, 28109 }, { 0x017F, 28115 }, { 0x18F4, 28119 }, { 0x0253, 28124 }, { 0x0260, 28128 }, { 0x0180, 28134 }, { 0x0181, 28138 }, { 0x026C, 28142 }, { 0x0257, 28146 }, { 0x026B, 28150 }, { 0x0255, 28154 }, { 0x017D, 28159 }, { 0x0169, 28166 }, { 0x0261, 28171 }, { 0x0182, 28178 }, { 0x0256, 28182 }, { 0x0254, 28186 }, { 0x3615, 28191 }, { 0x0021, 28195 }, { 0x01E5, 28199 }, { 0x019F, 28206 }, { 0x1A6B, 28215 }, { 0x1A6D, 28222 }, { 0x0084, 28229 }, { 0x01B9, 28236 }, { 0x19CB, 28245 }, { 0x0080, 28252 }, { 0x00C1, 28258 }, { 0x1A81, 28264 }, { 0x1A7D, 28273 }, { 0x1A79, 28282 }, { 0x1A7B, 28290 }, { 0x1A7F, 28298 }, { 0x018C, 28306 }, { 0x007F, 28312 }, { 0x0082, 28318 }, { 0x01BF, 28324 }, { 0x00BF, 28331 }, { 0x00C3, 28337 }, { 0x01F9, 28343 }, { 0x01C1, 28349 }, { 0x0083, 28356 }, { 0x019D, 28362 }, { 0x0081, 28370 }, { 0x1A77, 28376 }, { 0x1A73, 28385 }, { 0x1A6F, 28394 }, { 0x1A71, 28402 }, { 0x1A75, 28410 }, { 0x0022, 28418 }, { 0x19CD, 28422 }, { 0x19CF, 28429 }, { 0x0140, 28436 }, { 0x19D1, 28442 }, { 0x0202, 28449 }, { 0x0141, 28455 }, { 0x361C, 28461 }, { 0x0023, 28467 }, { 0x3618, 28471 }, { 0x00C9, 28477 }, { 0x0146, 28484 }, { 0x00C5, 28490 }, { 0x00CB, 28496 }, { 0x01FA, 28502 }, { 0x0086, 28508 }, { 0x19D3, 28514 }, { 0x00C7, 28522 }, { 0x0024, 28528 }, { 0x19D5, 28532 }, { 0x19D7, 28539 }, { 0x0149, 28546 }, { 0x19D9, 28552 }, { 0x00CD, 28559 }, { 0x01B1, 28565 }, { 0x0184, 28573 }, { 0x00CF, 28583 }, { 0x014A, 28589 }, { 0x19DB, 28595 }, { 0x19DD, 28601 }, { 0x0025, 28608 }, { 0x00D5, 28612 }, { 0x1A83, 28619 }, { 0x1A85, 28626 }, { 0x0088, 28633 }, { 0x00D3, 28639 }, { 0x00D9, 28645 }, { 0x0087, 28651 }, { 0x1A87, 28657 }, { 0x19E5, 28663 }, { 0x01C3, 28670 }, { 0x00D1, 28677 }, { 0x19E1, 28683 }, { 0x19DF, 28691 }, { 0x00D7, 28699 }, { 0x0205, 28705 }, { 0x01E7, 28711 }, { 0x19E7, 28717 }, { 0x01C5, 28725 }, { 0x008A, 28732 }, { 0x0089, 28738 }, { 0x1A91, 28744 }, { 0x1A8D, 28753 }, { 0x1A89, 28762 }, { 0x1A8B, 28770 }, { 0x1A8F, 28778 }, { 0x19E3, 28786 }, { 0x0026, 28793 }, { 0x19E9, 28797 }, { 0x0150, 28804 }, { 0x361E, 28810 }, { 0x0027, 28816 }, { 0x00DF, 28820 }, { 0x0152, 28827 }, { 0x01B3, 28833 }, { 0x00DD, 28839 }, { 0x01A5, 28845 }, { 0x19EB, 28851 }, { 0x01A3, 28857 }, { 0x00E1, 28863 }, { 0x3626, 28869 }, { 0x00DB, 28876 }, { 0x0028, 28882 }, { 0x19ED, 28886 }, { 0x19EF, 28893 }, { 0x3630, 28900 }, { 0x19F5, 28906 }, { 0x01DD, 28913 }, { 0x00E5, 28919 }, { 0x19F3, 28925 }, { 0x278D, 28931 }, { 0x19F1, 28937 }, { 0x00E3, 28943 }, { 0x0029, 28949 }, { 0x00EF, 28953 }, { 0x1A95, 28960 }, { 0x1A93, 28967 }, { 0x008C, 28974 }, { 0x00EB, 28980 }, { 0x018E, 28986 }, { 0x008B, 28992 }, { 0x00E7, 28998 }, { 0x19F7, 29004 }, { 0x01C7, 29011 }, { 0x00E9, 29018 }, { 0x00ED, 29024 }, { 0x0156, 29030 }, { 0x01C9, 29036 }, { 0x008E, 29043 }, { 0x19F9, 29049 }, { 0x008D, 29057 }, { 0x002A, 29063 }, { 0x0207, 29067 }, { 0x00F3, 29073 }, { 0x3637, 29079 }, { 0x002B, 29085 }, { 0x19FD, 29089 }, { 0x0157, 29096 }, { 0x19FF, 29102 }, { 0x19FB, 29109 }, { 0x01A7, 29115 }, { 0x35C6, 29121 }, { 0x35CA, 29127 }, { 0x00F5, 29136 }, { 0x3628, 29142 }, { 0x35C8, 29149 }, { 0x278F, 29156 }, { 0x002C, 29162 }, { 0x01FC, 29166 }, { 0x1A01, 29172 }, { 0x1A03, 29179 }, { 0x3633, 29188 }, { 0x35CE, 29194 }, { 0x1A05, 29201 }, { 0x00F8, 29208 }, { 0x00FC, 29214 }, { 0x0187, 29220 }, { 0x2786, 29228 }, { 0x00FE, 29235 }, { 0x2788, 29242 }, { 0x0100, 29249 }, { 0x00FA, 29255 }, { 0x1A07, 29261 }, { 0x002D, 29268 }, { 0x1A0B, 29272 }, { 0x1A0D, 29279 }, { 0x2794, 29286 }, { 0x1A09, 29292 }, { 0x002E, 29298 }, { 0x1A0F, 29302 }, { 0x1A11, 29309 }, { 0x015C, 29316 }, { 0x1A13, 29323 }, { 0x01DF, 29330 }, { 0x0102, 29338 }, { 0x0106, 29344 }, { 0x01B7, 29350 }, { 0x018A, 29356 }, { 0x0090, 29364 }, { 0x0104, 29370 }, { 0x362A, 29376 }, { 0x3616, 29383 }, { 0x1A15, 29389 }, { 0x002F, 29396 }, { 0x01ED, 29400 }, { 0x01EF, 29407 }, { 0x1A97, 29416 }, { 0x1A99, 29423 }, { 0x015F, 29430 }, { 0x1AAD, 29436 }, { 0x1AA9, 29445 }, { 0x1AA5, 29454 }, { 0x1AA7, 29462 }, { 0x1AAB, 29470 }, { 0x35D0, 29478 }, { 0x35D2, 29486 }, { 0x0092, 29492 }, { 0x010D, 29498 }, { 0x0190, 29504 }, { 0x0091, 29510 }, { 0x0094, 29516 }, { 0x1A17, 29522 }, { 0x01EB, 29530 }, { 0x1A19, 29538 }, { 0x010F, 29546 }, { 0x01CB, 29553 }, { 0x010B, 29560 }, { 0x1A1D, 29566 }, { 0x1A1B, 29574 }, { 0x015E, 29582 }, { 0x01A9, 29589 }, { 0x01AB, 29595 }, { 0x0097, 29603 }, { 0x01BD, 29609 }, { 0x01CD, 29617 }, { 0x0095, 29624 }, { 0x01E9, 29630 }, { 0x0093, 29638 }, { 0x1AA3, 29644 }, { 0x1A9F, 29653 }, { 0x1A9B, 29662 }, { 0x1A9D, 29670 }, { 0x1AA1, 29678 }, { 0x0030, 29686 }, { 0x1A21, 29690 }, { 0x0163, 29697 }, { 0x1A1F, 29703 }, { 0x2789, 29709 }, { 0x35D6, 29715 }, { 0x35D8, 29723 }, { 0x35DA, 29729 }, { 0x0031, 29736 }, { 0x35DC, 29740 }, { 0x35DE, 29748 }, { 0x0032, 29755 }, { 0x1A23, 29759 }, { 0x1A25, 29766 }, { 0x1A27, 29773 }, { 0x1A29, 29782 }, { 0x278A, 29789 }, { 0x0113, 29795 }, { 0x0117, 29801 }, { 0x01CF, 29807 }, { 0x020B, 29814 }, { 0x0115, 29820 }, { 0x362C, 29826 }, { 0x01D1, 29833 }, { 0x35E0, 29840 }, { 0x0033, 29845 }, { 0x1A2B, 29849 }, { 0x1A2D, 29856 }, { 0x1A33, 29863 }, { 0x0119, 29873 }, { 0x1A2F, 29879 }, { 0x011F, 29888 }, { 0x1A31, 29894 }, { 0x01D7, 29903 }, { 0x27A4, 29910 }, { 0x011D, 29917 }, { 0x362E, 29923 }, { 0x011B, 29930 }, { 0x0034, 29936 }, { 0x1A35, 29940 }, { 0x1A37, 29947 }, { 0x016B, 29954 }, { 0x1A39, 29960 }, { 0x0123, 29967 }, { 0x01D9, 29973 }, { 0x0125, 29980 }, { 0x0121, 29986 }, { 0x01FD, 29992 }, { 0x016D, 29999 }, { 0x1A3B, 30006 }, { 0x0035, 30013 }, { 0x0203, 30017 }, { 0x1AAF, 30022 }, { 0x1AB1, 30029 }, { 0x016E, 30036 }, { 0x1ABB, 30042 }, { 0x1AB7, 30051 }, { 0x1AB3, 30060 }, { 0x1AB5, 30068 }, { 0x1AB9, 30076 }, { 0x012D, 30084 }, { 0x0099, 30091 }, { 0x012B, 30097 }, { 0x0192, 30103 }, { 0x0098, 30109 }, { 0x0127, 30115 }, { 0x1A43, 30121 }, { 0x1A3F, 30129 }, { 0x012F, 30136 }, { 0x01D3, 30143 }, { 0x0129, 30150 }, { 0x1A45, 30156 }, { 0x0131, 30164 }, { 0x01D5, 30170 }, { 0x009B, 30177 }, { 0x0196, 30183 }, { 0x0198, 30191 }, { 0x019A, 30199 }, { 0x0194, 30207 }, { 0x1A3D, 30215 }, { 0x009A, 30222 }, { 0x1A41, 30228 }, { 0x0036, 30235 }, { 0x1A49, 30239 }, { 0x0171, 30246 }, { 0x1A47, 30252 }, { 0x35E4, 30258 }, { 0x0037, 30265 }, { 0x1A51, 30269 }, { 0x1A53, 30276 }, { 0x2798, 30283 }, { 0x1A4D, 30289 }, { 0x1A4B, 30295 }, { 0x1A4F, 30301 }, { 0x0133, 30307 }, { 0x0038, 30313 }, { 0x1A55, 30317 }, { 0x1A57, 30324 }, { 0x0039, 30330 }, { 0x1A59, 30334 }, { 0x1ABF, 30341 }, { 0x0172, 30348 }, { 0x1AC1, 30354 }, { 0x1AC9, 30361 }, { 0x009C, 30367 }, { 0x1ABD, 30373 }, { 0x1AC3, 30379 }, { 0x01F1, 30385 }, { 0x020D, 30391 }, { 0x0137, 30397 }, { 0x0135, 30403 }, { 0x003A, 30409 }, { 0x013A, 30413 }, { 0x1A5D, 30420 }, { 0x01E3, 30427 }, { 0x1A5F, 30433 }, { 0x0138, 30440 }, { 0x013C, 30446 }, { 0x27A5, 30452 }, { 0x0174, 30459 }, { 0x2791, 30465 }, { 0x1A5B, 30471 }, { 0x35B8, 30477 }, { 0x0085, 30481 }, { 0x01BB, 30485 }, { 0x01A1, 30491 }, { 0x35BA, 30497 }, { 0x35BC, 30501 }, { 0x35BE, 30505 }, { 0x35C0, 30509 }, { 0x35C2, 30516 }, { 0x01B0, 30520 }, { 0x0183, 30524 }, { 0x35F0, 30530 }, { 0x35F2, 30534 }, { 0x0186, 30538 }, { 0x0189, 30542 }, { 0x0161, 30546 }, { 0x35D4, 30550 }, { 0x01E1, 30554 }, { 0x35AE, 30558 }, { 0x35E6, 30562 }, { 0x3638, 30566 }, { 0x35F4, 30570 }, { 0x0109, 30574 }, { 0x0168, 30578 }, { 0x008F, 30582 }, { 0x0176, 30586 }, { 0x01AD, 30590 }, { 0x0177, 30596 }, { 0x0161, 30601 }, { 0x35E2, 30605 }, { 0x3639, 30610 }, { 0x279B, 30614 }, { 0x35AC, 30619 }, { 0x0155, 30623 }, { 0x014F, 30627 }, { 0x0145, 30632 }, { 0x0143, 30637 }, { 0x0166, 30642 }, { 0x017B, 30647 }, { 0x35EE, 30652 }, { 0x01B6, 30656 }, { 0x01DB, 30660 }, { 0x2793, 30664 }, { 0x0153, 30668 }, { 0x01B5, 30672 }, { 0x363B, 30676 }, { 0x014E, 30680 }, { 0x1A69, 30684 }, { 0x0209, 30689 }, { 0x3634, 30697 }, { 0x009D, 30703 }, { 0x35EA, 30707 }, { 0x35EC, 30713 }, { 0x35CC, 30721 }, { 0x3632, 30726 }, { 0x2795, 30731 }, { 0x3613, 30736 }, { 0x3635, 30741 }, { 0x3606, 30746 }, { 0x015B, 30751 }, { 0x3636, 30756 }, { 0x0204, 30761 }, { 0x2796, 30766 }, { 0x3604, 30771 }, { 0x0148, 30777 }, { 0x0200, 30782 }, { 0x35FF, 30787 }, { 0x3601, 30792 }, { 0x3603, 30797 }, { 0x3608, 30802 }, { 0x360A, 30807 }, { 0x360C, 30812 }, { 0x0170, 30817 }, { 0x3620, 30821 }, { 0x3622, 30826 }, { 0x3624, 30831 }, { 0x35C4, 30836 }, { 0x014D, 30843 }, { 0x3631, 30848 }, { 0x3611, 30854 }, { 0x35B0, 30858 }, { 0x35B2, 30862 }, { 0x35B4, 30866 }, { 0x35E8, 30872 }, { 0x1AC7, 30877 }, { 0x1AC5, 30882 }, { 0x35AA, 30887 }, { 0x35A8, 30892 }, { 0x00F1, 30897 }, { 0x0111, 30901 }, { 0x1C40, 30905 }, { 0x1C41, 30910 }, { 0x1C45, 30915 }, { 0x1932, 30920 }, { 0x27A2, 30925 }, { 0x1C46, 30930 }, { 0x1C47, 30935 }, { 0x1C48, 30940 }, { 0x1C49, 30945 }, { 0x1C42, 30950 }, { 0x1C4A, 30955 }, { 0x1933, 30960 }, { 0x1C4B, 30965 }, { 0x1C4C, 30970 }, { 0x1934, 30975 }, { 0x1935, 30980 }, { 0x1C43, 30985 }, { 0x1C44, 30990 }, { 0x3644, 30995 }, { 0x3645, 31000 }, { 0x3643, 31005 }, { 0x3641, 31010 }, { 0x3642, 31015 }, { 0x363D, 31020 }, { 0x6C86, 31025 }, { 0x6CD5, 31026 }, { 0x21A8, 31028 }, { 0x70CB, 31029 }, { 0x70C5, 31033 }, { 0x70DF, 31037 }, { 0x271E, 31042 }, { 0x70DA, 31047 }, { 0x22CC, 31052 }, { 0x6FC3, 31058 }, { 0x6F33, 31060 }, { 0x70D1, 31063 }, { 0x70B8, 31067 }, { 0x22CD, 31070 }, { 0x20EB, 31076 }, { 0x70D6, 31078 }, { 0x70A4, 31083 }, { 0x70E8, 31086 }, { 0x70BF, 31091 }, { 0x22B2, 31093 }, { 0x15DC, 31096 }, { 0x15DB, 31099 }, { 0x15DA, 31102 }, { 0x15D9, 31105 }, { 0x15E0, 31108 }, { 0x15E5, 31111 }, { 0x15E1, 31114 }, { 0x15E4, 31117 }, { 0x15E3, 31120 }, { 0x15E8, 31123 }, { 0x15DF, 31126 }, { 0x15E7, 31129 }, { 0x15E6, 31132 }, { 0x15E2, 31135 }, { 0x15D0, 31138 }, { 0x15D8, 31142 }, { 0x15D6, 31146 }, { 0x15D4, 31150 }, { 0x15D5, 31154 }, { 0x15D7, 31158 }, { 0x15D3, 31162 }, { 0x15D1, 31166 }, { 0x15D2, 31170 }, { 0x15C4, 31174 }, { 0x15CB, 31178 }, { 0x15C5, 31182 }, { 0x15CC, 31186 }, { 0x15C6, 31190 }, { 0x15C8, 31194 }, { 0x15CA, 31198 }, { 0x15C7, 31202 }, { 0x15C9, 31206 }, { 0x15B7, 31210 }, { 0x15AB, 31213 }, { 0x15B2, 31216 }, { 0x15A8, 31219 }, { 0x15C1, 31222 }, { 0x15AD, 31225 }, { 0x15A6, 31228 }, { 0x15BC, 31231 }, { 0x15B9, 31234 }, { 0x15B4, 31237 }, { 0x15B5, 31240 }, { 0x15BB, 31243 }, { 0x15C0, 31246 }, { 0x15B0, 31249 }, { 0x15BD, 31252 }, { 0x15BA, 31255 }, { 0x15B8, 31258 }, { 0x15AC, 31261 }, { 0x15B3, 31264 }, { 0x15A9, 31267 }, { 0x15AE, 31270 }, { 0x15A7, 31273 }, { 0x15AA, 31276 }, { 0x15B6, 31279 }, { 0x15BE, 31282 }, { 0x15BF, 31285 }, { 0x15B1, 31288 }, { 0x15C3, 31291 }, { 0x15AF, 31294 }, { 0x15C2, 31297 }, { 0x15DE, 31300 }, { 0x15CE, 31303 }, { 0x15CF, 31307 }, { 0x15CD, 31311 }, { 0x15DD, 31315 }, { 0x15A5, 31318 }, { 0x1C63, 31321 }, { 0x20DB, 31324 }, { 0x20DC, 31328 }, { 0x20DF, 31332 }, { 0x20DE, 31336 }, { 0x213B, 31339 }, { 0x2135, 31342 }, { 0x6EC8, 31347 }, { 0x6EC4, 31350 }, { 0x6EC6, 31353 }, { 0x2139, 31357 }, { 0x2154, 31362 }, { 0x6EC5, 31365 }, { 0x6EC7, 31369 }, { 0x2499, 31372 }, { 0x225D, 31377 }, { 0x232D, 31380 }, { 0x2268, 31385 }, { 0x2138, 31388 }, { 0x6E79, 31393 }, { 0x22AB, 31398 }, { 0x2159, 31403 }, { 0x2498, 31406 }, { 0x22A9, 31411 }, { 0x20E1, 31416 }, { 0x20DD, 31420 }, { 0x20E0, 31424 }, { 0x7193, 31428 }, { 0x1C69, 31430 }, { 0x6C7C, 31432 }, { 0x6C83, 31434 }, { 0x696A, 31435 }, { 0x696F, 31439 }, { 0x696B, 31443 }, { 0x696E, 31447 }, { 0x696D, 31451 }, { 0x6972, 31455 }, { 0x6971, 31459 }, { 0x6970, 31463 }, { 0x696C, 31467 }, { 0x68A5, 31471 }, { 0x68A6, 31476 }, { 0x68A7, 31481 }, { 0x68AD, 31486 }, { 0x68AE, 31491 }, { 0x68AF, 31496 }, { 0x68B9, 31501 }, { 0x68BA, 31506 }, { 0x68BB, 31511 }, { 0x68C0, 31516 }, { 0x68C1, 31521 }, { 0x68C2, 31526 }, { 0x68C7, 31531 }, { 0x68C8, 31536 }, { 0x68C9, 31541 }, { 0x68E3, 31546 }, { 0x68E4, 31551 }, { 0x68E5, 31556 }, { 0x68D3, 31561 }, { 0x68D4, 31566 }, { 0x68D5, 31571 }, { 0x68E9, 31576 }, { 0x68EA, 31581 }, { 0x68EB, 31586 }, { 0x68DB, 31591 }, { 0x68DC, 31596 }, { 0x68DD, 31601 }, { 0x68F0, 31606 }, { 0x68F1, 31611 }, { 0x68F2, 31616 }, { 0x68F8, 31621 }, { 0x68F9, 31626 }, { 0x68FA, 31631 }, { 0x68FF, 31636 }, { 0x6900, 31641 }, { 0x6901, 31646 }, { 0x6908, 31651 }, { 0x6909, 31656 }, { 0x690A, 31661 }, { 0x6910, 31666 }, { 0x690E, 31671 }, { 0x6912, 31676 }, { 0x691D, 31681 }, { 0x6947, 31686 }, { 0x68B3, 31691 }, { 0x691B, 31696 }, { 0x693B, 31701 }, { 0x68AB, 31706 }, { 0x68B7, 31711 }, { 0x6933, 31716 }, { 0x6935, 31721 }, { 0x6919, 31726 }, { 0x6916, 31731 }, { 0x68E0, 31736 }, { 0x68ED, 31741 }, { 0x694C, 31746 }, { 0x692F, 31751 }, { 0x6966, 31756 }, { 0x68BC, 31761 }, { 0x6969, 31766 }, { 0x68B6, 31771 }, { 0x6939, 31776 }, { 0x68F6, 31781 }, { 0x6959, 31786 }, { 0x68A8, 31791 }, { 0x6937, 31796 }, { 0x6958, 31801 }, { 0x6931, 31806 }, { 0x68EF, 31811 }, { 0x6951, 31816 }, { 0x6950, 31821 }, { 0x693D, 31826 }, { 0x68DF, 31831 }, { 0x6946, 31836 }, { 0x6903, 31841 }, { 0x68AA, 31846 }, { 0x6964, 31851 }, { 0x6902, 31856 }, { 0x68D9, 31861 }, { 0x68FC, 31866 }, { 0x6934, 31871 }, { 0x691E, 31876 }, { 0x6914, 31881 }, { 0x68DE, 31886 }, { 0x6962, 31891 }, { 0x6925, 31896 }, { 0x6918, 31902 }, { 0x6905, 31907 }, { 0x68E6, 31912 }, { 0x691C, 31917 }, { 0x68EC, 31922 }, { 0x6945, 31927 }, { 0x694E, 31932 }, { 0x68BD, 31937 }, { 0x68A9, 31942 }, { 0x6911, 31947 }, { 0x68C4, 31952 }, { 0x6968, 31957 }, { 0x6932, 31962 }, { 0x68CB, 31967 }, { 0x6907, 31972 }, { 0x6936, 31977 }, { 0x68C5, 31982 }, { 0x68EE, 31987 }, { 0x6942, 31992 }, { 0x6926, 31998 }, { 0x694F, 32004 }, { 0x6948, 32009 }, { 0x68FB, 32014 }, { 0x68E2, 32019 }, { 0x6929, 32025 }, { 0x6949, 32030 }, { 0x68F4, 32035 }, { 0x68B2, 32040 }, { 0x691F, 32045 }, { 0x68D7, 32050 }, { 0x690B, 32055 }, { 0x68B1, 32060 }, { 0x6957, 32065 }, { 0x6922, 32070 }, { 0x68FE, 32075 }, { 0x693A, 32080 }, { 0x6953, 32085 }, { 0x694B, 32090 }, { 0x6955, 32095 }, { 0x68B0, 32100 }, { 0x6924, 32105 }, { 0x6915, 32110 }, { 0x6954, 32115 }, { 0x6917, 32120 }, { 0x68CF, 32125 }, { 0x6944, 32130 }, { 0x6904, 32135 }, { 0x695D, 32140 }, { 0x68D0, 32145 }, { 0x68D8, 32150 }, { 0x68CE, 32155 }, { 0x68C6, 32160 }, { 0x68B8, 32165 }, { 0x6913, 32170 }, { 0x68FD, 32175 }, { 0x6943, 32180 }, { 0x68B5, 32186 }, { 0x6963, 32191 }, { 0x6938, 32196 }, { 0x6920, 32201 }, { 0x68CD, 32206 }, { 0x694D, 32211 }, { 0x695C, 32216 }, { 0x68C3, 32221 }, { 0x6960, 32226 }, { 0x695A, 32231 }, { 0x68E1, 32236 }, { 0x68BE, 32241 }, { 0x6928, 32246 }, { 0x6921, 32251 }, { 0x68F3, 32256 }, { 0x694A, 32261 }, { 0x6923, 32266 }, { 0x68F5, 32271 }, { 0x6941, 32276 }, { 0x68D6, 32282 }, { 0x68CA, 32287 }, { 0x6965, 32292 }, { 0x68CC, 32297 }, { 0x692C, 32302 }, { 0x692D, 32307 }, { 0x692A, 32312 }, { 0x690C, 32317 }, { 0x6967, 32322 }, { 0x6952, 32327 }, { 0x693E, 32332 }, { 0x6961, 32337 }, { 0x693F, 32342 }, { 0x68F7, 32347 }, { 0x690D, 32353 }, { 0x6930, 32358 }, { 0x68D2, 32363 }, { 0x68AC, 32368 }, { 0x68E7, 32373 }, { 0x68E8, 32378 }, { 0x695E, 32383 }, { 0x6927, 32388 }, { 0x692E, 32394 }, { 0x695F, 32399 }, { 0x690F, 32404 }, { 0x6940, 32409 }, { 0x693C, 32414 }, { 0x68BF, 32419 }, { 0x692B, 32424 }, { 0x6956, 32429 }, { 0x695B, 32434 }, { 0x691A, 32439 }, { 0x68B4, 32444 }, { 0x68D1, 32449 }, { 0x68DA, 32454 }, { 0x6906, 32459 }, { 0x6977, 32464 }, { 0x6974, 32470 }, { 0x6973, 32475 }, { 0x6978, 32480 }, { 0x6975, 32486 }, { 0x6979, 32491 }, { 0x6976, 32496 }, { 0x6FC2, 32501 }, { 0x0074, 32502 }, { 0x6C47, 32504 }, { 0x1D9B, 32506 }, { 0x2594, 32508 }, { 0x2584, 32512 }, { 0x2583, 32517 }, { 0x2586, 32522 }, { 0x2585, 32527 }, { 0x1DCB, 32532 }, { 0x6DEB, 32534 }, { 0x6DF3, 32536 }, { 0x7013, 32539 }, { 0x7020, 32541 }, { 0x6F36, 32543 }, { 0x6D3C, 32545 }, { 0x6D68, 32546 }, { 0x6D7F, 32548 }, { 0x6CE0, 32549 }, { 0x6F3A, 32551 }, { 0x21C7, 32552 }, { 0x21C9, 32555 }, { 0x21C8, 32558 }, { 0x2563, 32561 }, { 0x1E4C, 32564 }, { 0x255D, 32566 }, { 0x255E, 32571 }, { 0x2659, 32576 }, { 0x2560, 32580 }, { 0x255F, 32584 }, { 0x255A, 32588 }, { 0x255B, 32592 }, { 0x255C, 32596 }, { 0x1E4A, 32600 }, { 0x1E49, 32603 }, { 0x1D98, 32606 }, { 0x1D99, 32608 }, { 0x1D9A, 32610 }, { 0x1E4B, 32612 }, { 0x1D90, 32614 }, { 0x1C53, 32615 }, { 0x6C3E, 32617 }, { 0x1BE3, 32620 }, { 0x247C, 32621 }, { 0x1D20, 32627 }, { 0x2482, 32630 }, { 0x247E, 32637 }, { 0x248B, 32642 }, { 0x2488, 32649 }, { 0x2662, 32656 }, { 0x265A, 32660 }, { 0x1D60, 32664 }, { 0x6F9D, 32668 }, { 0x6F8D, 32672 }, { 0x6F95, 32676 }, { 0x7134, 32681 }, { 0x26C1, 32685 }, { 0x26CF, 32689 }, { 0x247B, 32695 }, { 0x1D1F, 32701 }, { 0x1D41, 32704 }, { 0x1D7A, 32710 }, { 0x2481, 32715 }, { 0x247D, 32722 }, { 0x248C, 32727 }, { 0x2663, 32734 }, { 0x265B, 32738 }, { 0x1D5F, 32742 }, { 0x6F9B, 32746 }, { 0x6F8B, 32750 }, { 0x6F93, 32754 }, { 0x7133, 32759 }, { 0x26C0, 32763 }, { 0x26CE, 32767 }, { 0x367A, 32773 }, { 0x3678, 32777 }, { 0x3673, 32781 }, { 0x3676, 32786 }, { 0x3672, 32791 }, { 0x3675, 32796 }, { 0x3674, 32801 }, { 0x3677, 32806 }, { 0x367B, 32811 }, { 0x3679, 32815 }, { 0x138A, 32819 }, { 0x13A0, 32822 }, { 0x139C, 32825 }, { 0x139B, 32828 }, { 0x139A, 32831 }, { 0x1393, 32834 }, { 0x1391, 32837 }, { 0x1396, 32840 }, { 0x13A2, 32843 }, { 0x138C, 32846 }, { 0x1395, 32849 }, { 0x138F, 32852 }, { 0x1399, 32855 }, { 0x138E, 32858 }, { 0x1390, 32861 }, { 0x138B, 32864 }, { 0x1394, 32867 }, { 0x138D, 32870 }, { 0x13A4, 32873 }, { 0x1392, 32876 }, { 0x1398, 32879 }, { 0x139F, 32882 }, { 0x139D, 32885 }, { 0x139E, 32888 }, { 0x1397, 32891 }, { 0x13A1, 32894 }, { 0x13A3, 32897 }, { 0x13A5, 32900 }, { 0x13A6, 32903 }, { 0x6DAF, 32907 }, { 0x6DB0, 32909 }, { 0x09E2, 32911 }, { 0x09E3, 32915 }, { 0x09D4, 32919 }, { 0x09E1, 32922 }, { 0x09A5, 32925 }, { 0x09A4, 32928 }, { 0x09D5, 32931 }, { 0x09A3, 32934 }, { 0x09EC, 32937 }, { 0x09F1, 32940 }, { 0x09ED, 32943 }, { 0x09F0, 32946 }, { 0x09EF, 32949 }, { 0x09F4, 32952 }, { 0x09EB, 32955 }, { 0x09F3, 32958 }, { 0x09F2, 32961 }, { 0x09EE, 32964 }, { 0x09DD, 32967 }, { 0x09D7, 32971 }, { 0x09DF, 32975 }, { 0x09D9, 32979 }, { 0x09D6, 32983 }, { 0x09DE, 32987 }, { 0x09E0, 32991 }, { 0x09D8, 32995 }, { 0x09DA, 32999 }, { 0x09E9, 33003 }, { 0x09DB, 33008 }, { 0x09EA, 33013 }, { 0x09DC, 33018 }, { 0x09F5, 33023 }, { 0x09A6, 33025 }, { 0x09AE, 33028 }, { 0x09A8, 33031 }, { 0x09B0, 33034 }, { 0x09AA, 33037 }, { 0x09A7, 33040 }, { 0x09AF, 33043 }, { 0x09B1, 33046 }, { 0x09C8, 33049 }, { 0x09B7, 33052 }, { 0x09C3, 33055 }, { 0x09B4, 33058 }, { 0x09D3, 33061 }, { 0x09A9, 33064 }, { 0x09B9, 33067 }, { 0x09B2, 33070 }, { 0x09CD, 33073 }, { 0x09CA, 33076 }, { 0x09C5, 33079 }, { 0x09C6, 33082 }, { 0x09CC, 33085 }, { 0x09D2, 33088 }, { 0x09C1, 33091 }, { 0x09AB, 33094 }, { 0x09CF, 33097 }, { 0x09F6, 33100 }, { 0x09CB, 33103 }, { 0x09C9, 33106 }, { 0x09B8, 33109 }, { 0x09BE, 33112 }, { 0x09C4, 33115 }, { 0x09B5, 33118 }, { 0x09BA, 33121 }, { 0x09B3, 33124 }, { 0x09CE, 33127 }, { 0x09B6, 33130 }, { 0x09C0, 33133 }, { 0x09BB, 33136 }, { 0x09C7, 33139 }, { 0x09E5, 33142 }, { 0x09E4, 33145 }, { 0x09D0, 33148 }, { 0x09D1, 33151 }, { 0x09C2, 33154 }, { 0x09BC, 33157 }, { 0x09E6, 33160 }, { 0x09BF, 33163 }, { 0x09BD, 33166 }, { 0x09AD, 33169 }, { 0x09AC, 33173 }, { 0x09E8, 33177 }, { 0x09E7, 33181 }, { 0x09F8, 33185 }, { 0x09FB, 33189 }, { 0x09F7, 33193 }, { 0x09FA, 33197 }, { 0x09F9, 33201 }, { 0x09FC, 33205 }, { 0x41F8, 33209 }, { 0x41FF, 33213 }, { 0x4203, 33217 }, { 0x420A, 33221 }, { 0x4216, 33225 }, { 0x41FB, 33229 }, { 0x41F9, 33233 }, { 0x4201, 33237 }, { 0x4204, 33241 }, { 0x4207, 33245 }, { 0x4208, 33249 }, { 0x4209, 33253 }, { 0x420C, 33257 }, { 0x420E, 33261 }, { 0x4210, 33265 }, { 0x4217, 33269 }, { 0x421A, 33273 }, { 0x41FA, 33277 }, { 0x41FC, 33281 }, { 0x41FD, 33285 }, { 0x4215, 33289 }, { 0x4200, 33293 }, { 0x4219, 33297 }, { 0x4202, 33301 }, { 0x4218, 33305 }, { 0x4206, 33309 }, { 0x420B, 33313 }, { 0x420F, 33317 }, { 0x4212, 33321 }, { 0x421B, 33325 }, { 0x4205, 33329 }, { 0x420D, 33333 }, { 0x4211, 33337 }, { 0x4214, 33341 }, { 0x41FE, 33345 }, { 0x4213, 33349 }, { 0x41D4, 33353 }, { 0x41DB, 33357 }, { 0x41DF, 33361 }, { 0x41E6, 33365 }, { 0x41F2, 33369 }, { 0x41D7, 33373 }, { 0x41D5, 33377 }, { 0x41DD, 33381 }, { 0x41E0, 33385 }, { 0x41E3, 33389 }, { 0x41E4, 33393 }, { 0x41E5, 33397 }, { 0x41E8, 33401 }, { 0x41EA, 33405 }, { 0x41EC, 33409 }, { 0x41F3, 33413 }, { 0x41F6, 33417 }, { 0x41D6, 33421 }, { 0x41D8, 33425 }, { 0x41D9, 33429 }, { 0x41F1, 33433 }, { 0x41DC, 33437 }, { 0x41F5, 33441 }, { 0x41DE, 33445 }, { 0x41F4, 33449 }, { 0x41E2, 33453 }, { 0x41E7, 33457 }, { 0x41EB, 33461 }, { 0x41EE, 33465 }, { 0x41F7, 33469 }, { 0x41E1, 33473 }, { 0x41E9, 33477 }, { 0x41ED, 33481 }, { 0x41F0, 33485 }, { 0x41DA, 33489 }, { 0x41EF, 33493 }, { 0x1CB2, 33497 }, { 0x6E1A, 33499 }, { 0x6F0B, 33500 }, { 0x6D77, 33501 }, { 0x6CC4, 33503 }, { 0x2188, 33505 }, { 0x6C8C, 33507 }, { 0x700B, 33508 }, { 0x1EA1, 33511 }, { 0x21A1, 33515 }, { 0x6D98, 33516 }, { 0x0062, 33517 }, { 0x1F86, 33519 }, { 0x1F87, 33522 }, { 0x1F85, 33525 }, { 0x1F84, 33528 }, { 0x1BE6, 33530 }, { 0x1F22, 33531 }, { 0x6D96, 33534 }, { 0x6E36, 33535 }, { 0x6E53, 33536 }, { 0x1DBF, 33538 }, { 0x71A9, 33539 }, { 0x24EE, 33540 }, { 0x2910, 33544 }, { 0x20EF, 33548 }, { 0x24D7, 33552 }, { 0x2131, 33555 }, { 0x20EA, 33559 }, { 0x6EB8, 33562 }, { 0x1E2B, 33566 }, { 0x6F2A, 33568 }, { 0x1DA8, 33571 }, { 0x1E47, 33573 }, { 0x1F05, 33577 }, { 0x28F4, 33583 }, { 0x2A96, 33588 }, { 0x24EC, 33591 }, { 0x24F6, 33596 }, { 0x28F3, 33601 }, { 0x1D7D, 33605 }, { 0x234E, 33610 }, { 0x24F2, 33615 }, { 0x2A9E, 33620 }, { 0x005D, 33624 }, { 0x1F36, 33627 }, { 0x1F34, 33632 }, { 0x1F35, 33637 }, { 0x1E94, 33642 }, { 0x2330, 33644 }, { 0x24DE, 33647 }, { 0x2A9C, 33651 }, { 0x2AA8, 33655 }, { 0x2AA6, 33659 }, { 0x2AA4, 33664 }, { 0x24E0, 33668 }, { 0x2A9A, 33671 }, { 0x28F8, 33674 }, { 0x2A98, 33678 }, { 0x24CA, 33682 }, { 0x2535, 33688 }, { 0x1BD1, 33692 }, { 0x291C, 33696 }, { 0x1E53, 33699 }, { 0x2900, 33704 }, { 0x1BCD, 33708 }, { 0x6F24, 33712 }, { 0x003D, 33715 }, { 0x24EA, 33718 }, { 0x24E8, 33726 }, { 0x1BFA, 33734 }, { 0x24E6, 33739 }, { 0x1F2F, 33744 }, { 0x1F2D, 33749 }, { 0x1F2E, 33754 }, { 0x2533, 33758 }, { 0x1E92, 33761 }, { 0x6EA3, 33763 }, { 0x6EA4, 33765 }, { 0x6EA5, 33771 }, { 0x6F28, 33777 }, { 0x2320, 33780 }, { 0x291A, 33784 }, { 0x2AA2, 33788 }, { 0x1E48, 33792 }, { 0x2528, 33794 }, { 0x2914, 33799 }, { 0x1F42, 33804 }, { 0x1E55, 33808 }, { 0x0009, 33811 }, { 0x1F29, 33813 }, { 0x1F27, 33817 }, { 0x1F28, 33821 }, { 0x28F6, 33824 }, { 0x28FD, 33827 }, { 0x7185, 33830 }, { 0x3FD6, 33832 }, { 0x3FCD, 33835 }, { 0x3FD0, 33838 }, { 0x1CED, 33842 }, { 0x1CFA, 33845 }, { 0x1D15, 33849 }, { 0x1CFC, 33854 }, { 0x1D0D, 33858 }, { 0x1CF2, 33864 }, { 0x1D12, 33867 }, { 0x1CF6, 33872 }, { 0x1D0F, 33875 }, { 0x1CEE, 33879 }, { 0x1CF1, 33882 }, { 0x1CFB, 33885 }, { 0x1D0E, 33889 }, { 0x1CF0, 33893 }, { 0x1CF5, 33896 }, { 0x1CF4, 33899 }, { 0x1CF9, 33902 }, { 0x1D13, 33905 }, { 0x1D14, 33910 }, { 0x1CF3, 33914 }, { 0x1CEF, 33917 }, { 0x1CF7, 33920 }, { 0x1CF8, 33923 }, { 0x1D10, 33926 }, { 0x3FCC, 33931 }, { 0x3FCF, 33934 }, { 0x3FD1, 33937 }, { 0x3FD2, 33940 }, { 0x3FCE, 33943 }, { 0x3FD7, 33946 }, { 0x3FD5, 33949 }, { 0x3FD3, 33952 }, { 0x3FD4, 33955 }, { 0x70A1, 33958 }, { 0x6E08, 33960 }, { 0x1C6A, 33962 }, { 0x6D04, 33964 }, { 0x13F4, 33966 }, { 0x13F5, 33969 }, { 0x13D4, 33972 }, { 0x13D8, 33975 }, { 0x13C9, 33978 }, { 0x13BC, 33981 }, { 0x13F8, 33984 }, { 0x13B5, 33987 }, { 0x13F0, 33990 }, { 0x13A8, 33993 }, { 0x13AC, 33996 }, { 0x13F1, 33999 }, { 0x13AB, 34002 }, { 0x13D5, 34005 }, { 0x13B1, 34008 }, { 0x13B6, 34012 }, { 0x13B7, 34015 }, { 0x13FA, 34018 }, { 0x13B0, 34021 }, { 0x13F9, 34025 }, { 0x13AA, 34028 }, { 0x13BA, 34031 }, { 0x13E7, 34034 }, { 0x13BD, 34037 }, { 0x13AE, 34040 }, { 0x13BF, 34043 }, { 0x13CB, 34046 }, { 0x13E4, 34049 }, { 0x13E8, 34052 }, { 0x13B2, 34055 }, { 0x13EA, 34058 }, { 0x13A7, 34061 }, { 0x13BE, 34067 }, { 0x13C8, 34072 }, { 0x13CE, 34078 }, { 0x13BB, 34082 }, { 0x13EC, 34086 }, { 0x13A9, 34089 }, { 0x13D0, 34094 }, { 0x13AF, 34098 }, { 0x13EB, 34102 }, { 0x13E5, 34105 }, { 0x13DD, 34110 }, { 0x13C2, 34115 }, { 0x13CA, 34119 }, { 0x13B9, 34123 }, { 0x13B8, 34126 }, { 0x13D2, 34132 }, { 0x13D6, 34137 }, { 0x13C0, 34143 }, { 0x13FE, 34148 }, { 0x13FD, 34153 }, { 0x13FC, 34158 }, { 0x13FB, 34163 }, { 0x13FF, 34168 }, { 0x13C1, 34173 }, { 0x13E3, 34177 }, { 0x13E1, 34180 }, { 0x13DE, 34186 }, { 0x13C5, 34191 }, { 0x13DC, 34197 }, { 0x13CF, 34200 }, { 0x13D1, 34205 }, { 0x13E9, 34209 }, { 0x13E6, 34212 }, { 0x13D9, 34217 }, { 0x13E2, 34223 }, { 0x13C7, 34226 }, { 0x13DB, 34229 }, { 0x13AD, 34232 }, { 0x13EF, 34237 }, { 0x13CD, 34240 }, { 0x13EE, 34244 }, { 0x13CC, 34247 }, { 0x13ED, 34251 }, { 0x13B4, 34254 }, { 0x13D3, 34258 }, { 0x13D7, 34262 }, { 0x13B3, 34266 }, { 0x13E0, 34270 }, { 0x13C6, 34274 }, { 0x13DF, 34278 }, { 0x13C4, 34282 }, { 0x13C3, 34286 }, { 0x13DA, 34290 }, { 0x13F2, 34294 }, { 0x13F7, 34297 }, { 0x13F3, 34300 }, { 0x13F6, 34303 }, { 0x1C55, 34306 }, { 0x71C6, 34308 }, { 0x6D4C, 34309 }, { 0x263A, 34310 }, { 0x2642, 34313 }, { 0x2643, 34318 }, { 0x26B9, 34325 }, { 0x2639, 34333 }, { 0x2641, 34336 }, { 0x2638, 34341 }, { 0x26A8, 34344 }, { 0x249E, 34348 }, { 0x26A9, 34354 }, { 0x719B, 34358 }, { 0x2251, 34359 }, { 0x6DBB, 34360 }, { 0x217A, 34361 }, { 0x6C90, 34364 }, { 0x1EBC, 34367 }, { 0x3CEB, 34368 }, { 0x4624, 34371 }, { 0x25BB, 34378 }, { 0x6E74, 34382 }, { 0x3CE6, 34385 }, { 0x3CEE, 34388 }, { 0x3CF0, 34392 }, { 0x3CEC, 34397 }, { 0x3CF5, 34400 }, { 0x3CE8, 34403 }, { 0x3CE4, 34405 }, { 0x3CEF, 34407 }, { 0x3CF1, 34411 }, { 0x3CED, 34416 }, { 0x1CFD, 34419 }, { 0x1D0A, 34423 }, { 0x1D0C, 34428 }, { 0x1D02, 34433 }, { 0x1D06, 34437 }, { 0x1CFE, 34441 }, { 0x1D01, 34445 }, { 0x1D0B, 34449 }, { 0x1D00, 34454 }, { 0x1D05, 34458 }, { 0x1D04, 34462 }, { 0x1D09, 34466 }, { 0x1D03, 34470 }, { 0x1CFF, 34474 }, { 0x1D07, 34478 }, { 0x1D08, 34482 }, { 0x029B, 34486 }, { 0x3CFB, 34488 }, { 0x3CF9, 34491 }, { 0x3CF2, 34494 }, { 0x6E73, 34497 }, { 0x1D93, 34500 }, { 0x1E80, 34503 }, { 0x1E7D, 34508 }, { 0x3CFC, 34519 }, { 0x3CFA, 34522 }, { 0x7017, 34525 }, { 0x3CF4, 34527 }, { 0x1D96, 34529 }, { 0x1E87, 34533 }, { 0x1E85, 34537 }, { 0x3CE9, 34547 }, { 0x3CF3, 34550 }, { 0x3CF7, 34552 }, { 0x3CE7, 34555 }, { 0x3CFD, 34557 }, { 0x3CEA, 34560 }, { 0x3CE5, 34563 }, { 0x3CF8, 34566 }, { 0x3CF6, 34569 }, { 0x258D, 34571 }, { 0x1EAC, 34573 }, { 0x6D47, 34574 }, { 0x6D48, 34575 }, { 0x6FA5, 34576 }, { 0x6FA6, 34580 }, { 0x1CA4, 34587 }, { 0x1D21, 34590 }, { 0x1D7B, 34593 }, { 0x2483, 34598 }, { 0x247F, 34605 }, { 0x2487, 34610 }, { 0x2664, 34617 }, { 0x265C, 34621 }, { 0x1D61, 34625 }, { 0x6F9E, 34629 }, { 0x6F8E, 34633 }, { 0x6F96, 34637 }, { 0x7135, 34642 }, { 0x26C2, 34646 }, { 0x26D0, 34650 }, { 0x1D22, 34656 }, { 0x2484, 34659 }, { 0x2480, 34666 }, { 0x2665, 34671 }, { 0x265D, 34675 }, { 0x1D62, 34679 }, { 0x6F9C, 34683 }, { 0x6F8C, 34687 }, { 0x6F94, 34691 }, { 0x7136, 34696 }, { 0x26C3, 34700 }, { 0x26D1, 34704 }, { 0x0000, 34710 }, { 0x71A7, 34711 }, { 0x2301, 34712 }, { 0x71CF, 34716 }, { 0x21F4, 34717 }, { 0x21EF, 34720 }, { 0x6FBD, 34723 }, { 0x6F1B, 34725 }, { 0x6C9E, 34727 }, { 0x6FB0, 34728 }, { 0x1C07, 34731 }, { 0x6D0E, 34733 }, { 0x4B9C, 34738 }, { 0x4B9B, 34741 }, { 0x4B91, 34744 }, { 0x4B90, 34747 }, { 0x4B9E, 34750 }, { 0x4BA3, 34753 }, { 0x4B9F, 34756 }, { 0x4BA2, 34759 }, { 0x4BA1, 34762 }, { 0x4BA6, 34765 }, { 0x4B9D, 34768 }, { 0x4BA5, 34771 }, { 0x4BA4, 34774 }, { 0x4BA0, 34777 }, { 0x4B97, 34780 }, { 0x4B93, 34784 }, { 0x4B99, 34788 }, { 0x4B95, 34792 }, { 0x4B92, 34796 }, { 0x4B98, 34800 }, { 0x4B9A, 34804 }, { 0x4B94, 34808 }, { 0x4B96, 34812 }, { 0x4B65, 34816 }, { 0x4B6B, 34819 }, { 0x4B67, 34822 }, { 0x4B6D, 34825 }, { 0x4B69, 34828 }, { 0x4B66, 34831 }, { 0x4B6C, 34834 }, { 0x4B6E, 34837 }, { 0x4B85, 34840 }, { 0x4B74, 34843 }, { 0x4B80, 34846 }, { 0x4B71, 34849 }, { 0x4B8E, 34852 }, { 0x4B68, 34855 }, { 0x4B76, 34858 }, { 0x4B6F, 34861 }, { 0x4B8A, 34864 }, { 0x4B87, 34867 }, { 0x4B82, 34870 }, { 0x4B83, 34873 }, { 0x4B89, 34876 }, { 0x4B8D, 34879 }, { 0x4B7E, 34882 }, { 0x4B6A, 34885 }, { 0x4B8B, 34888 }, { 0x4B88, 34891 }, { 0x4B86, 34894 }, { 0x4B75, 34897 }, { 0x4B7B, 34900 }, { 0x4B81, 34903 }, { 0x4B72, 34906 }, { 0x4B77, 34909 }, { 0x4B70, 34912 }, { 0x4B73, 34915 }, { 0x4B7D, 34918 }, { 0x4B78, 34921 }, { 0x4B84, 34924 }, { 0x4B8F, 34927 }, { 0x4B8C, 34930 }, { 0x4B7F, 34933 }, { 0x4B79, 34936 }, { 0x4B7C, 34939 }, { 0x4B7A, 34942 }, { 0x0A42, 34945 }, { 0x0A2F, 34949 }, { 0x0A2E, 34953 }, { 0x0A3D, 34955 }, { 0x0A2D, 34958 }, { 0x09FE, 34961 }, { 0x09FD, 34964 }, { 0x0A3F, 34967 }, { 0x0A40, 34970 }, { 0x0A31, 34973 }, { 0x0A36, 34976 }, { 0x0A32, 34979 }, { 0x0A35, 34982 }, { 0x0A34, 34985 }, { 0x0A39, 34988 }, { 0x0A30, 34991 }, { 0x0A38, 34994 }, { 0x0A37, 34997 }, { 0x0A33, 35000 }, { 0x0A3E, 35003 }, { 0x0A43, 35006 }, { 0x0A27, 35009 }, { 0x0A23, 35013 }, { 0x0A2A, 35017 }, { 0x0A25, 35021 }, { 0x0A22, 35025 }, { 0x0A29, 35029 }, { 0x0A2C, 35033 }, { 0x0A28, 35037 }, { 0x0A24, 35041 }, { 0x0A2B, 35045 }, { 0x0A26, 35049 }, { 0x0A41, 35053 }, { 0x09FF, 35056 }, { 0x0A05, 35059 }, { 0x0A01, 35062 }, { 0x0A08, 35065 }, { 0x0A03, 35068 }, { 0x0A00, 35071 }, { 0x0A07, 35074 }, { 0x0A0A, 35077 }, { 0x0A0D, 35080 }, { 0x0A06, 35083 }, { 0x0A21, 35086 }, { 0x0A02, 35089 }, { 0x0A0E, 35092 }, { 0x0A0B, 35095 }, { 0x0A1A, 35098 }, { 0x0A16, 35101 }, { 0x0A13, 35104 }, { 0x0A09, 35107 }, { 0x0A15, 35110 }, { 0x0A18, 35113 }, { 0x0A20, 35116 }, { 0x0A12, 35119 }, { 0x0A04, 35122 }, { 0x0A1D, 35125 }, { 0x0A17, 35128 }, { 0x0A1B, 35131 }, { 0x0A0C, 35134 }, { 0x0A11, 35137 }, { 0x0A0F, 35140 }, { 0x0A19, 35143 }, { 0x0A1E, 35146 }, { 0x0A1F, 35149 }, { 0x0A10, 35152 }, { 0x0A1C, 35155 }, { 0x0A14, 35158 }, { 0x0A3B, 35161 }, { 0x0A3C, 35165 }, { 0x0A3A, 35169 }, { 0x0A44, 35172 }, { 0x1C65, 35175 }, { 0x1D8D, 35177 }, { 0x1D8C, 35181 }, { 0x71AC, 35183 }, { 0x1C0A, 35186 }, { 0x6F21, 35189 }, { 0x6F1F, 35192 }, { 0x6F20, 35195 }, { 0x6F22, 35198 }, { 0x21F9, 35201 }, { 0x21F8, 35205 }, { 0x6EEC, 35209 }, { 0x6F26, 35212 }, { 0x70D8, 35215 }, { 0x268B, 35219 }, { 0x6EE2, 35222 }, { 0x1D7F, 35225 }, { 0x25D0, 35228 }, { 0x231A, 35232 }, { 0x6D40, 35235 }, { 0x6D6A, 35236 }, { 0x229F, 35238 }, { 0x005E, 35241 }, { 0x2911, 35242 }, { 0x2912, 35246 }, { 0x290E, 35250 }, { 0x1DC5, 35254 }, { 0x25C4, 35256 }, { 0x25C5, 35261 }, { 0x26A3, 35266 }, { 0x24CC, 35271 }, { 0x1F7B, 35276 }, { 0x252E, 35278 }, { 0x252F, 35283 }, { 0x6F66, 35288 }, { 0x6F37, 35290 }, { 0x1EB9, 35292 }, { 0x1CAF, 35294 }, { 0x6FC1, 35297 }, { 0x6C72, 35298 }, { 0x1DB3, 35299 }, { 0x259B, 35300 }, { 0x259F, 35304 }, { 0x259C, 35308 }, { 0x25A2, 35311 }, { 0x25A0, 35316 }, { 0x25A4, 35319 }, { 0x20EE, 35325 }, { 0x20DA, 35329 }, { 0x213A, 35332 }, { 0x2134, 35335 }, { 0x1F39, 35340 }, { 0x232E, 35348 }, { 0x2136, 35353 }, { 0x2152, 35358 }, { 0x225B, 35361 }, { 0x1F3A, 35364 }, { 0x226A, 35372 }, { 0x2137, 35375 }, { 0x6E7A, 35380 }, { 0x22AC, 35385 }, { 0x2153, 35390 }, { 0x22AA, 35393 }, { 0x18C6, 35398 }, { 0x18C7, 35402 }, { 0x18C4, 35407 }, { 0x18CA, 35410 }, { 0x18BA, 35414 }, { 0x18BE, 35418 }, { 0x18B9, 35424 }, { 0x18BC, 35428 }, { 0x18BF, 35432 }, { 0x18C8, 35438 }, { 0x18C2, 35443 }, { 0x18C3, 35447 }, { 0x18C0, 35453 }, { 0x18C1, 35457 }, { 0x18C5, 35461 }, { 0x18BB, 35466 }, { 0x18BD, 35471 }, { 0x18AA, 35476 }, { 0x18AB, 35479 }, { 0x18CC, 35484 }, { 0x18CD, 35487 }, { 0x18C9, 35490 }, { 0x18B4, 35493 }, { 0x18B5, 35497 }, { 0x18CE, 35502 }, { 0x18A8, 35506 }, { 0x18B6, 35509 }, { 0x18CB, 35514 }, { 0x18AF, 35518 }, { 0x18CF, 35522 }, { 0x18B1, 35527 }, { 0x18B2, 35531 }, { 0x18B3, 35535 }, { 0x18A9, 35539 }, { 0x18A7, 35542 }, { 0x18B7, 35545 }, { 0x18AE, 35551 }, { 0x18B0, 35557 }, { 0x18AC, 35564 }, { 0x18AD, 35570 }, { 0x18B8, 35575 }, { 0x2210, 35580 }, { 0x6CE9, 35581 }, { 0x6E34, 35583 }, { 0x21A7, 35585 }, { 0x1EA3, 35586 }, { 0x71A1, 35587 }, { 0x6C45, 35589 }, { 0x6FF9, 35591 }, { 0x6D3E, 35593 }, { 0x6F7B, 35595 }, { 0x6F64, 35598 }, { 0x6D46, 35600 }, { 0x2192, 35601 }, { 0x2177, 35604 }, { 0x6D81, 35608 }, { 0x226B, 35613 }, { 0x6C5E, 35615 }, { 0x2196, 35617 }, { 0x6C5F, 35621 }, { 0x6C60, 35626 }, { 0x6C61, 35630 }, { 0x21C1, 35636 }, { 0x6ED2, 35639 }, { 0x2179, 35645 }, { 0x6D82, 35649 }, { 0x21EA, 35654 }, { 0x2259, 35656 }, { 0x2720, 35663 }, { 0x2281, 35667 }, { 0x6EE6, 35671 }, { 0x2233, 35676 }, { 0x2176, 35680 }, { 0x6D83, 35684 }, { 0x2160, 35689 }, { 0x2678, 35691 }, { 0x717D, 35695 }, { 0x717E, 35700 }, { 0x21AE, 35706 }, { 0x21B3, 35709 }, { 0x21B0, 35712 }, { 0x21AF, 35715 }, { 0x21B1, 35718 }, { 0x21B2, 35721 }, { 0x21BB, 35724 }, { 0x225F, 35727 }, { 0x2676, 35731 }, { 0x6E81, 35734 }, { 0x2178, 35737 }, { 0x6D84, 35741 }, { 0x2170, 35746 }, { 0x26AC, 35749 }, { 0x2105, 35752 }, { 0x2685, 35755 }, { 0x21BE, 35758 }, { 0x2140, 35761 }, { 0x2125, 35763 }, { 0x21E0, 35765 }, { 0x21E1, 35770 }, { 0x2546, 35775 }, { 0x214F, 35780 }, { 0x2150, 35786 }, { 0x214E, 35792 }, { 0x2151, 35798 }, { 0x70A0, 35804 }, { 0x6DE9, 35810 }, { 0x26AA, 35812 }, { 0x2157, 35815 }, { 0x2155, 35819 }, { 0x2680, 35822 }, { 0x2682, 35825 }, { 0x3CDA, 35828 }, { 0x20FB, 35831 }, { 0x214B, 35833 }, { 0x214C, 35839 }, { 0x214A, 35845 }, { 0x214D, 35851 }, { 0x1F0E, 35857 }, { 0x20FC, 35863 }, { 0x2145, 35868 }, { 0x233E, 35874 }, { 0x233F, 35879 }, { 0x6E6E, 35884 }, { 0x70AA, 35887 }, { 0x20FD, 35894 }, { 0x70AB, 35900 }, { 0x2121, 35906 }, { 0x2225, 35908 }, { 0x21BC, 35912 }, { 0x232A, 35915 }, { 0x70B0, 35920 }, { 0x2122, 35927 }, { 0x70B1, 35933 }, { 0x267B, 35939 }, { 0x70B6, 35941 }, { 0x6D2C, 35947 }, { 0x2194, 35949 }, { 0x2231, 35952 }, { 0x221A, 35957 }, { 0x221B, 35960 }, { 0x229A, 35963 }, { 0x2193, 35965 }, { 0x267A, 35968 }, { 0x22AE, 35970 }, { 0x225E, 35974 }, { 0x231B, 35976 }, { 0x2658, 35982 }, { 0x2689, 35985 }, { 0x2109, 35988 }, { 0x2530, 35991 }, { 0x2107, 35993 }, { 0x2169, 35995 }, { 0x6EB9, 35997 }, { 0x1F6B, 36000 }, { 0x2687, 36002 }, { 0x22AF, 36005 }, { 0x210F, 36009 }, { 0x210D, 36013 }, { 0x2146, 36016 }, { 0x233B, 36021 }, { 0x233C, 36024 }, { 0x233D, 36030 }, { 0x2119, 36036 }, { 0x2117, 36040 }, { 0x211D, 36043 }, { 0x211F, 36047 }, { 0x211B, 36050 }, { 0x210B, 36053 }, { 0x2113, 36055 }, { 0x2115, 36059 }, { 0x26AE, 36062 }, { 0x2111, 36065 }, { 0x6EE9, 36068 }, { 0x6DA4, 36070 }, { 0x6DAA, 36071 }, { 0x6F35, 36075 }, { 0x3F79, 36077 }, { 0x3F45, 36082 }, { 0x3F44, 36086 }, { 0x3F46, 36090 }, { 0x3F7A, 36093 }, { 0x3F47, 36098 }, { 0x3F59, 36101 }, { 0x3F62, 36105 }, { 0x3F4C, 36109 }, { 0x3F5E, 36112 }, { 0x3F67, 36116 }, { 0x3F50, 36120 }, { 0x3F6B, 36123 }, { 0x3F48, 36127 }, { 0x3F5A, 36130 }, { 0x3F63, 36134 }, { 0x3F4B, 36138 }, { 0x3F5D, 36141 }, { 0x3F66, 36145 }, { 0x3F4A, 36149 }, { 0x3F5C, 36152 }, { 0x3F65, 36156 }, { 0x3F4F, 36160 }, { 0x3F61, 36163 }, { 0x3F6A, 36167 }, { 0x3F4E, 36171 }, { 0x3F60, 36174 }, { 0x3F69, 36178 }, { 0x3F54, 36182 }, { 0x3F6F, 36185 }, { 0x3F53, 36189 }, { 0x3F6E, 36192 }, { 0x3F4D, 36196 }, { 0x3F5F, 36199 }, { 0x3F68, 36203 }, { 0x3F55, 36207 }, { 0x3F70, 36210 }, { 0x3F49, 36214 }, { 0x3F5B, 36217 }, { 0x3F64, 36221 }, { 0x3F57, 36225 }, { 0x3F72, 36228 }, { 0x3F58, 36232 }, { 0x3F73, 36235 }, { 0x3F52, 36239 }, { 0x3F6D, 36242 }, { 0x3F51, 36246 }, { 0x3F6C, 36249 }, { 0x3F56, 36253 }, { 0x3F71, 36256 }, { 0x3F74, 36260 }, { 0x3F75, 36264 }, { 0x3F77, 36268 }, { 0x3F78, 36272 }, { 0x3F76, 36276 }, { 0x3F7C, 36280 }, { 0x3F7B, 36284 }, { 0x6FDC, 36288 }, { 0x1DD3, 36290 }, { 0x1DD1, 36295 }, { 0x25C9, 36298 }, { 0x21ED, 36304 }, { 0x0672, 36305 }, { 0x059E, 36309 }, { 0x05A3, 36311 }, { 0x0602, 36314 }, { 0x0669, 36318 }, { 0x0819, 36321 }, { 0x081B, 36325 }, { 0x05ED, 36329 }, { 0x0821, 36333 }, { 0x0813, 36338 }, { 0x0812, 36341 }, { 0x0814, 36344 }, { 0x05A9, 36347 }, { 0x05A5, 36352 }, { 0x0599, 36355 }, { 0x0597, 36358 }, { 0x05A7, 36361 }, { 0x059A, 36365 }, { 0x0692, 36368 }, { 0x0693, 36372 }, { 0x05AA, 36377 }, { 0x05A8, 36380 }, { 0x05A6, 36384 }, { 0x3D01, 36389 }, { 0x080C, 36392 }, { 0x080F, 36397 }, { 0x080D, 36402 }, { 0x0810, 36407 }, { 0x080E, 36412 }, { 0x0811, 36416 }, { 0x05F4, 36420 }, { 0x05A2, 36424 }, { 0x0807, 36426 }, { 0x0806, 36429 }, { 0x0808, 36432 }, { 0x080A, 36435 }, { 0x0809, 36438 }, { 0x080B, 36441 }, { 0x05E4, 36444 }, { 0x0820, 36446 }, { 0x3D06, 36450 }, { 0x3D05, 36454 }, { 0x067F, 36458 }, { 0x0680, 36463 }, { 0x05E3, 36468 }, { 0x0817, 36470 }, { 0x05F3, 36475 }, { 0x0816, 36480 }, { 0x3D04, 36484 }, { 0x3D03, 36488 }, { 0x05E9, 36492 }, { 0x05EA, 36495 }, { 0x05E5, 36498 }, { 0x0818, 36500 }, { 0x3D08, 36505 }, { 0x3D07, 36509 }, { 0x067E, 36513 }, { 0x081A, 36517 }, { 0x081F, 36521 }, { 0x081C, 36527 }, { 0x0682, 36531 }, { 0x07FB, 36535 }, { 0x0678, 36541 }, { 0x067A, 36545 }, { 0x067B, 36548 }, { 0x07F8, 36551 }, { 0x066E, 36555 }, { 0x07F9, 36560 }, { 0x07F7, 36564 }, { 0x05AB, 36568 }, { 0x0815, 36572 }, { 0x067C, 36576 }, { 0x066F, 36580 }, { 0x066D, 36584 }, { 0x0677, 36590 }, { 0x067D, 36596 }, { 0x07FA, 36600 }, { 0x0671, 36606 }, { 0x0803, 36610 }, { 0x0800, 36615 }, { 0x07FF, 36620 }, { 0x0801, 36625 }, { 0x07F6, 36630 }, { 0x07FE, 36635 }, { 0x07FD, 36640 }, { 0x07FC, 36645 }, { 0x05AD, 36650 }, { 0x0679, 36654 }, { 0x0670, 36658 }, { 0x0676, 36663 }, { 0x0674, 36670 }, { 0x0675, 36675 }, { 0x0802, 36681 }, { 0x066C, 36686 }, { 0x066B, 36696 }, { 0x05AC, 36706 }, { 0x05AF, 36715 }, { 0x05AE, 36718 }, { 0x05B0, 36721 }, { 0x0673, 36724 }, { 0x05E7, 36730 }, { 0x3D0C, 36732 }, { 0x3D0B, 36736 }, { 0x05F1, 36740 }, { 0x05EF, 36745 }, { 0x05F0, 36751 }, { 0x081D, 36758 }, { 0x081E, 36763 }, { 0x0665, 36770 }, { 0x3ACB, 36773 }, { 0x3ACD, 36778 }, { 0x3ACC, 36783 }, { 0x3ACA, 36788 }, { 0x065C, 36793 }, { 0x060C, 36796 }, { 0x3AC3, 36802 }, { 0x3ABE, 36810 }, { 0x3ABD, 36815 }, { 0x066A, 36820 }, { 0x0642, 36823 }, { 0x3ABA, 36826 }, { 0x3ABC, 36831 }, { 0x3ABB, 36836 }, { 0x3AB9, 36841 }, { 0x065B, 36846 }, { 0x3AC0, 36849 }, { 0x3ABF, 36854 }, { 0x0660, 36859 }, { 0x3AC5, 36862 }, { 0x3AC4, 36867 }, { 0x065D, 36872 }, { 0x3AC2, 36875 }, { 0x3AC1, 36880 }, { 0x05CE, 36885 }, { 0x06EF, 36888 }, { 0x06F1, 36895 }, { 0x0635, 36903 }, { 0x07EC, 36910 }, { 0x06F0, 36917 }, { 0x3D57, 36926 }, { 0x3D59, 36931 }, { 0x3D58, 36936 }, { 0x3D56, 36941 }, { 0x05BD, 36946 }, { 0x06E3, 36949 }, { 0x06E6, 36959 }, { 0x07DA, 36969 }, { 0x06E8, 36975 }, { 0x07D9, 36981 }, { 0x07EE, 36988 }, { 0x06E4, 36995 }, { 0x06E5, 37004 }, { 0x06E2, 37017 }, { 0x06E7, 37025 }, { 0x3D1D, 37033 }, { 0x3D1F, 37038 }, { 0x3D1E, 37043 }, { 0x3D1C, 37048 }, { 0x05CB, 37053 }, { 0x0690, 37056 }, { 0x3D4B, 37062 }, { 0x3D4D, 37067 }, { 0x3D4C, 37072 }, { 0x3D4A, 37077 }, { 0x05C4, 37082 }, { 0x061F, 37085 }, { 0x0620, 37091 }, { 0x06EB, 37100 }, { 0x0625, 37111 }, { 0x061E, 37118 }, { 0x0624, 37123 }, { 0x07E7, 37131 }, { 0x0683, 37138 }, { 0x06EC, 37144 }, { 0x3D37, 37152 }, { 0x3D36, 37157 }, { 0x0623, 37162 }, { 0x3A7E, 37165 }, { 0x3A7D, 37170 }, { 0x05D6, 37175 }, { 0x0638, 37178 }, { 0x07DD, 37184 }, { 0x0637, 37194 }, { 0x06F2, 37201 }, { 0x063A, 37208 }, { 0x06F3, 37215 }, { 0x3D5F, 37224 }, { 0x3D61, 37229 }, { 0x3D60, 37234 }, { 0x3D5E, 37239 }, { 0x0644, 37244 }, { 0x0647, 37247 }, { 0x0645, 37254 }, { 0x0649, 37259 }, { 0x07E9, 37266 }, { 0x3A8A, 37272 }, { 0x3A8C, 37277 }, { 0x3A8B, 37282 }, { 0x3A89, 37287 }, { 0x05C2, 37292 }, { 0x06E9, 37295 }, { 0x0617, 37302 }, { 0x0616, 37310 }, { 0x0701, 37316 }, { 0x0704, 37327 }, { 0x0700, 37336 }, { 0x061A, 37345 }, { 0x06EA, 37352 }, { 0x070E, 37361 }, { 0x3D2F, 37370 }, { 0x3D31, 37375 }, { 0x3D30, 37380 }, { 0x3D2E, 37385 }, { 0x05DC, 37390 }, { 0x0656, 37393 }, { 0x0657, 37397 }, { 0x3A9E, 37404 }, { 0x3AA0, 37410 }, { 0x3A9F, 37416 }, { 0x3A9D, 37422 }, { 0x0655, 37428 }, { 0x3A9C, 37434 }, { 0x3A9B, 37442 }, { 0x0694, 37450 }, { 0x3D77, 37456 }, { 0x3D79, 37461 }, { 0x3D78, 37466 }, { 0x3D76, 37471 }, { 0x0653, 37476 }, { 0x3AA2, 37480 }, { 0x3AA4, 37486 }, { 0x3AA3, 37492 }, { 0x3AA1, 37498 }, { 0x062D, 37504 }, { 0x3A82, 37507 }, { 0x3A81, 37512 }, { 0x05D8, 37517 }, { 0x0641, 37520 }, { 0x07ED, 37526 }, { 0x0711, 37532 }, { 0x0640, 37539 }, { 0x0643, 37544 }, { 0x3D67, 37551 }, { 0x3D69, 37556 }, { 0x3D68, 37561 }, { 0x3D66, 37566 }, { 0x05D9, 37571 }, { 0x06FC, 37574 }, { 0x064B, 37579 }, { 0x064A, 37585 }, { 0x064C, 37591 }, { 0x064D, 37598 }, { 0x07DF, 37605 }, { 0x3D6B, 37611 }, { 0x3D6D, 37616 }, { 0x3D6C, 37621 }, { 0x3D6A, 37626 }, { 0x07E6, 37631 }, { 0x0613, 37635 }, { 0x07EF, 37638 }, { 0x3A4E, 37645 }, { 0x3A50, 37650 }, { 0x3A4F, 37655 }, { 0x3A4D, 37660 }, { 0x05D7, 37665 }, { 0x063C, 37668 }, { 0x07DE, 37674 }, { 0x063D, 37680 }, { 0x3D63, 37687 }, { 0x3D65, 37692 }, { 0x3D64, 37697 }, { 0x3D62, 37702 }, { 0x05C6, 37707 }, { 0x0629, 37710 }, { 0x062B, 37716 }, { 0x062C, 37725 }, { 0x06FD, 37732 }, { 0x062E, 37740 }, { 0x07E3, 37747 }, { 0x0628, 37752 }, { 0x06FE, 37757 }, { 0x0627, 37763 }, { 0x062A, 37769 }, { 0x07F1, 37776 }, { 0x0703, 37783 }, { 0x06ED, 37794 }, { 0x0684, 37799 }, { 0x3D3B, 37805 }, { 0x3D3A, 37810 }, { 0x05CA, 37815 }, { 0x0632, 37818 }, { 0x0633, 37825 }, { 0x07E8, 37832 }, { 0x3D47, 37839 }, { 0x3D49, 37844 }, { 0x3D48, 37849 }, { 0x3D46, 37854 }, { 0x05CC, 37859 }, { 0x07DC, 37862 }, { 0x0634, 37869 }, { 0x3D4F, 37876 }, { 0x3D51, 37881 }, { 0x3D50, 37886 }, { 0x3D4E, 37891 }, { 0x05BF, 37896 }, { 0x0611, 37899 }, { 0x07F0, 37904 }, { 0x0612, 37911 }, { 0x3D23, 37919 }, { 0x3D25, 37924 }, { 0x3D24, 37929 }, { 0x05BE, 37934 }, { 0x0658, 37938 }, { 0x3D21, 37943 }, { 0x3D20, 37949 }, { 0x3D22, 37955 }, { 0x0639, 37960 }, { 0x3A62, 37963 }, { 0x3A64, 37968 }, { 0x3A63, 37973 }, { 0x3A61, 37978 }, { 0x05DD, 37983 }, { 0x0664, 37986 }, { 0x07E4, 37992 }, { 0x065F, 37998 }, { 0x0659, 38005 }, { 0x05B9, 38010 }, { 0x3D13, 38016 }, { 0x3D12, 38024 }, { 0x070A, 38032 }, { 0x070B, 38041 }, { 0x3D7B, 38050 }, { 0x3D7A, 38055 }, { 0x05DF, 38060 }, { 0x07E2, 38063 }, { 0x07E1, 38073 }, { 0x07F2, 38083 }, { 0x0662, 38094 }, { 0x05BB, 38099 }, { 0x3D17, 38105 }, { 0x3D19, 38113 }, { 0x3D18, 38121 }, { 0x3D16, 38129 }, { 0x0663, 38137 }, { 0x0666, 38143 }, { 0x3D7F, 38150 }, { 0x0667, 38155 }, { 0x0668, 38159 }, { 0x3AA8, 38166 }, { 0x3AA7, 38175 }, { 0x070C, 38184 }, { 0x070D, 38194 }, { 0x3AA6, 38204 }, { 0x3AA5, 38210 }, { 0x3D81, 38216 }, { 0x3D80, 38221 }, { 0x3D7E, 38226 }, { 0x05CD, 38231 }, { 0x3D53, 38234 }, { 0x3D55, 38239 }, { 0x3D54, 38244 }, { 0x3D52, 38249 }, { 0x05BC, 38254 }, { 0x0607, 38257 }, { 0x0608, 38264 }, { 0x05B8, 38271 }, { 0x3D11, 38277 }, { 0x3D10, 38285 }, { 0x05BA, 38293 }, { 0x3D15, 38299 }, { 0x3D14, 38307 }, { 0x05B7, 38315 }, { 0x3D0F, 38321 }, { 0x3D0E, 38329 }, { 0x0705, 38337 }, { 0x0706, 38346 }, { 0x3D1B, 38355 }, { 0x0606, 38360 }, { 0x3A48, 38364 }, { 0x3A47, 38370 }, { 0x05DE, 38376 }, { 0x3D7D, 38380 }, { 0x3D7C, 38386 }, { 0x3D1A, 38392 }, { 0x0610, 38397 }, { 0x3A4A, 38400 }, { 0x3A4C, 38405 }, { 0x3A4B, 38410 }, { 0x3A49, 38415 }, { 0x061D, 38420 }, { 0x3A80, 38423 }, { 0x3A7F, 38428 }, { 0x0619, 38433 }, { 0x3A6A, 38436 }, { 0x3A6C, 38441 }, { 0x3A6B, 38446 }, { 0x3A69, 38451 }, { 0x0648, 38456 }, { 0x3A8E, 38459 }, { 0x3A90, 38464 }, { 0x3A8F, 38469 }, { 0x3A8D, 38474 }, { 0x0609, 38479 }, { 0x060B, 38483 }, { 0x060D, 38488 }, { 0x060A, 38493 }, { 0x05C1, 38498 }, { 0x07DB, 38501 }, { 0x3D2B, 38508 }, { 0x3D2D, 38513 }, { 0x3D2C, 38518 }, { 0x3D2A, 38523 }, { 0x05C3, 38528 }, { 0x3D33, 38531 }, { 0x3D35, 38536 }, { 0x3D34, 38541 }, { 0x3D32, 38546 }, { 0x05B2, 38551 }, { 0x05DA, 38554 }, { 0x06F7, 38557 }, { 0x06F8, 38563 }, { 0x07E0, 38569 }, { 0x3D6F, 38576 }, { 0x3D71, 38581 }, { 0x3D70, 38586 }, { 0x3D6E, 38591 }, { 0x05DB, 38596 }, { 0x064E, 38599 }, { 0x06F9, 38605 }, { 0x0651, 38612 }, { 0x06FB, 38617 }, { 0x06FA, 38623 }, { 0x0652, 38629 }, { 0x3D73, 38636 }, { 0x064F, 38641 }, { 0x3A96, 38645 }, { 0x3A95, 38651 }, { 0x3D75, 38657 }, { 0x3D74, 38662 }, { 0x3D72, 38667 }, { 0x0618, 38672 }, { 0x3A6E, 38675 }, { 0x3A70, 38680 }, { 0x3A6F, 38685 }, { 0x3A6D, 38690 }, { 0x0626, 38695 }, { 0x3A84, 38698 }, { 0x3A83, 38703 }, { 0x05C8, 38708 }, { 0x062F, 38711 }, { 0x06FF, 38720 }, { 0x06EE, 38728 }, { 0x0702, 38735 }, { 0x0630, 38746 }, { 0x0631, 38753 }, { 0x070F, 38764 }, { 0x0710, 38773 }, { 0x3D3F, 38779 }, { 0x3D41, 38784 }, { 0x3D40, 38789 }, { 0x3D3E, 38794 }, { 0x05C5, 38799 }, { 0x3D39, 38802 }, { 0x3D38, 38807 }, { 0x05C0, 38812 }, { 0x3D27, 38815 }, { 0x3D29, 38820 }, { 0x3D28, 38825 }, { 0x3D26, 38830 }, { 0x060E, 38835 }, { 0x3A5E, 38838 }, { 0x3A60, 38843 }, { 0x3A5F, 38848 }, { 0x3A5D, 38853 }, { 0x05C7, 38858 }, { 0x07EB, 38861 }, { 0x3D3D, 38868 }, { 0x3D3C, 38873 }, { 0x0615, 38878 }, { 0x3A52, 38881 }, { 0x3A54, 38886 }, { 0x3A53, 38891 }, { 0x3A51, 38896 }, { 0x0621, 38901 }, { 0x3A7C, 38904 }, { 0x3A7B, 38909 }, { 0x0661, 38914 }, { 0x05D3, 38918 }, { 0x05D4, 38926 }, { 0x0707, 38934 }, { 0x0709, 38944 }, { 0x0708, 38954 }, { 0x05D2, 38964 }, { 0x3AE3, 38971 }, { 0x3AE5, 38977 }, { 0x3AE4, 38983 }, { 0x3AE2, 38989 }, { 0x05CF, 38995 }, { 0x0691, 38998 }, { 0x3D5B, 39004 }, { 0x3D5D, 39009 }, { 0x3D5C, 39014 }, { 0x3D5A, 39019 }, { 0x05B6, 39024 }, { 0x3D0D, 39027 }, { 0x063E, 39032 }, { 0x06F4, 39035 }, { 0x05D0, 39041 }, { 0x06F5, 39048 }, { 0x05D1, 39055 }, { 0x06F6, 39062 }, { 0x3A86, 39071 }, { 0x3A88, 39076 }, { 0x3A87, 39081 }, { 0x3A85, 39086 }, { 0x0646, 39091 }, { 0x3A92, 39094 }, { 0x3A94, 39099 }, { 0x3A93, 39104 }, { 0x3A91, 39109 }, { 0x063B, 39114 }, { 0x3A66, 39117 }, { 0x3A68, 39122 }, { 0x3A67, 39127 }, { 0x3A65, 39132 }, { 0x0650, 39137 }, { 0x3A98, 39140 }, { 0x3A9A, 39145 }, { 0x3A99, 39150 }, { 0x3A97, 39155 }, { 0x05C9, 39160 }, { 0x068F, 39163 }, { 0x3D43, 39169 }, { 0x3D45, 39174 }, { 0x3D44, 39179 }, { 0x3D42, 39184 }, { 0x063F, 39189 }, { 0x061B, 39193 }, { 0x0654, 39196 }, { 0x3A72, 39202 }, { 0x3A74, 39207 }, { 0x3A73, 39212 }, { 0x3A71, 39217 }, { 0x0614, 39222 }, { 0x3A5A, 39225 }, { 0x3A5C, 39230 }, { 0x3A5B, 39235 }, { 0x3A59, 39240 }, { 0x0622, 39245 }, { 0x3A7A, 39248 }, { 0x3A79, 39253 }, { 0x060F, 39258 }, { 0x3A56, 39261 }, { 0x3A58, 39266 }, { 0x3A57, 39271 }, { 0x3A55, 39276 }, { 0x3ACF, 39281 }, { 0x3ACE, 39290 }, { 0x07F3, 39299 }, { 0x07F4, 39303 }, { 0x07F5, 39307 }, { 0x0603, 39311 }, { 0x0636, 39315 }, { 0x0604, 39319 }, { 0x065A, 39323 }, { 0x3AC7, 39327 }, { 0x3AC6, 39333 }, { 0x065E, 39339 }, { 0x3AC9, 39343 }, { 0x3AC8, 39349 }, { 0x061C, 39355 }, { 0x3A76, 39358 }, { 0x3A78, 39363 }, { 0x3A77, 39368 }, { 0x3A75, 39373 }, { 0x05B5, 39378 }, { 0x07E5, 39382 }, { 0x07EA, 39386 }, { 0x0605, 39390 }, { 0x05E8, 39394 }, { 0x059B, 39397 }, { 0x0596, 39401 }, { 0x05A4, 39404 }, { 0x05E6, 39408 }, { 0x3D0A, 39410 }, { 0x3D09, 39414 }, { 0x3AA9, 39418 }, { 0x3AAA, 39422 }, { 0x3AAB, 39426 }, { 0x3AAC, 39431 }, { 0x3AB4, 39436 }, { 0x3AB5, 39442 }, { 0x3AB1, 39448 }, { 0x3AB2, 39453 }, { 0x3AB6, 39458 }, { 0x3AB7, 39461 }, { 0x3AB8, 39466 }, { 0x3AAD, 39471 }, { 0x3AAE, 39476 }, { 0x3AAF, 39481 }, { 0x3AB0, 39488 }, { 0x3AB3, 39495 }, { 0x05B3, 39501 }, { 0x0805, 39506 }, { 0x0600, 39510 }, { 0x05FF, 39513 }, { 0x0681, 39516 }, { 0x05D5, 39523 }, { 0x3CFF, 39525 }, { 0x05E1, 39530 }, { 0x3D00, 39532 }, { 0x0804, 39536 }, { 0x05E0, 39541 }, { 0x3CFE, 39543 }, { 0x0598, 39547 }, { 0x05EC, 39550 }, { 0x05E2, 39553 }, { 0x3D02, 39555 }, { 0x3BFA, 39559 }, { 0x3BDE, 39566 }, { 0x3BF9, 39573 }, { 0x3BDD, 39581 }, { 0x3C4B, 39589 }, { 0x3C98, 39598 }, { 0x3BA0, 39607 }, { 0x3B0F, 39614 }, { 0x3C8A, 39621 }, { 0x3C4E, 39630 }, { 0x3C4C, 39640 }, { 0x3C4D, 39649 }, { 0x3BA1, 39658 }, { 0x3B10, 39665 }, { 0x3C96, 39672 }, { 0x3B83, 39681 }, { 0x3AEC, 39688 }, { 0x3BC8, 39695 }, { 0x3B86, 39702 }, { 0x3B50, 39709 }, { 0x3B55, 39716 }, { 0x3AF0, 39723 }, { 0x3B54, 39730 }, { 0x3AEF, 39738 }, { 0x3B82, 39746 }, { 0x3AEB, 39753 }, { 0x3C72, 39760 }, { 0x3B84, 39769 }, { 0x3AED, 39776 }, { 0x3B52, 39783 }, { 0x3BC7, 39790 }, { 0x3B85, 39797 }, { 0x3AEE, 39804 }, { 0x3B53, 39811 }, { 0x3B51, 39818 }, { 0x3C7F, 39825 }, { 0x3C44, 39834 }, { 0x3B9B, 39844 }, { 0x3B09, 39851 }, { 0x3C12, 39858 }, { 0x3BF6, 39865 }, { 0x3C0A, 39872 }, { 0x3BEE, 39879 }, { 0x3C09, 39886 }, { 0x3BED, 39894 }, { 0x3B9A, 39902 }, { 0x3B08, 39909 }, { 0x3C45, 39916 }, { 0x3C46, 39925 }, { 0x3B9C, 39934 }, { 0x3B0A, 39941 }, { 0x3B9D, 39948 }, { 0x3B0B, 39955 }, { 0x3BA5, 39962 }, { 0x3B14, 39969 }, { 0x3B63, 39976 }, { 0x3B18, 39983 }, { 0x3B62, 39990 }, { 0x3B17, 39998 }, { 0x3BA4, 40006 }, { 0x3B13, 40013 }, { 0x3C52, 40020 }, { 0x3C53, 40029 }, { 0x3BA6, 40038 }, { 0x3B15, 40045 }, { 0x3C95, 40052 }, { 0x3BA7, 40061 }, { 0x3B16, 40068 }, { 0x3C02, 40075 }, { 0x3BE6, 40082 }, { 0x3C01, 40089 }, { 0x3BE5, 40097 }, { 0x3C93, 40105 }, { 0x3B8F, 40114 }, { 0x3AFD, 40121 }, { 0x3C30, 40128 }, { 0x3C31, 40137 }, { 0x3B90, 40147 }, { 0x3AFE, 40154 }, { 0x3B3A, 40161 }, { 0x3B39, 40168 }, { 0x3BBD, 40176 }, { 0x3B37, 40183 }, { 0x3C67, 40190 }, { 0x3C68, 40199 }, { 0x3BBE, 40208 }, { 0x3B38, 40215 }, { 0x3BBF, 40222 }, { 0x3BAB, 40230 }, { 0x3B1F, 40237 }, { 0x3B67, 40244 }, { 0x3BD1, 40251 }, { 0x3BAD, 40258 }, { 0x3B21, 40265 }, { 0x3B6A, 40272 }, { 0x3B24, 40279 }, { 0x3B66, 40286 }, { 0x3B69, 40293 }, { 0x3B23, 40301 }, { 0x3B1D, 40309 }, { 0x3BAA, 40316 }, { 0x3B1E, 40323 }, { 0x3BAC, 40330 }, { 0x3B20, 40337 }, { 0x3C8B, 40344 }, { 0x3C8F, 40353 }, { 0x3C97, 40362 }, { 0x3B68, 40371 }, { 0x3BD2, 40378 }, { 0x3BAE, 40385 }, { 0x3B22, 40392 }, { 0x3C57, 40399 }, { 0x3C58, 40408 }, { 0x3C56, 40418 }, { 0x3C89, 40427 }, { 0x3BB0, 40436 }, { 0x3B26, 40443 }, { 0x3BB3, 40450 }, { 0x3B6D, 40457 }, { 0x3B2A, 40464 }, { 0x3D85, 40471 }, { 0x3D84, 40481 }, { 0x3D87, 40491 }, { 0x3D86, 40501 }, { 0x3D83, 40511 }, { 0x3D82, 40521 }, { 0x3D89, 40531 }, { 0x3B6C, 40538 }, { 0x3B29, 40546 }, { 0x3D88, 40554 }, { 0x3C80, 40561 }, { 0x3C5A, 40570 }, { 0x3C59, 40579 }, { 0x3C90, 40588 }, { 0x3C8E, 40597 }, { 0x3BAF, 40606 }, { 0x3B25, 40613 }, { 0x3C5B, 40620 }, { 0x3C5C, 40629 }, { 0x3BB1, 40638 }, { 0x3B27, 40645 }, { 0x3C5D, 40652 }, { 0x3C5E, 40661 }, { 0x3C81, 40670 }, { 0x3B6B, 40679 }, { 0x3BD3, 40686 }, { 0x3BB2, 40693 }, { 0x3B28, 40700 }, { 0x3BA8, 40707 }, { 0x3B19, 40714 }, { 0x3B65, 40721 }, { 0x3B1C, 40728 }, { 0x3B64, 40735 }, { 0x3B1B, 40743 }, { 0x3C54, 40751 }, { 0x3C88, 40760 }, { 0x3C86, 40769 }, { 0x3C55, 40778 }, { 0x3BA9, 40787 }, { 0x3B1A, 40794 }, { 0x3B42, 40801 }, { 0x3C3A, 40809 }, { 0x3C3B, 40818 }, { 0x3C7D, 40827 }, { 0x3B97, 40836 }, { 0x3B06, 40843 }, { 0x3C11, 40850 }, { 0x3BF5, 40857 }, { 0x3C08, 40864 }, { 0x3BEC, 40871 }, { 0x3C07, 40878 }, { 0x3BEB, 40886 }, { 0x3B98, 40894 }, { 0x3C3C, 40901 }, { 0x3C99, 40910 }, { 0x3B99, 40919 }, { 0x3B07, 40926 }, { 0x3B9E, 40933 }, { 0x3B0C, 40940 }, { 0x3BF8, 40947 }, { 0x3BDC, 40954 }, { 0x3BF7, 40961 }, { 0x3BDB, 40969 }, { 0x3C47, 40977 }, { 0x3C48, 40986 }, { 0x3C4A, 40995 }, { 0x3C49, 41004 }, { 0x3C20, 41013 }, { 0x3C19, 41020 }, { 0x3B0D, 41027 }, { 0x3C27, 41034 }, { 0x3C28, 41043 }, { 0x3C29, 41052 }, { 0x3B88, 41061 }, { 0x3AF2, 41068 }, { 0x3BCA, 41075 }, { 0x3B8B, 41082 }, { 0x3B56, 41089 }, { 0x3B5B, 41096 }, { 0x3AF6, 41103 }, { 0x3B5A, 41110 }, { 0x3AF5, 41118 }, { 0x3C73, 41126 }, { 0x3C74, 41135 }, { 0x3C26, 41145 }, { 0x3B87, 41154 }, { 0x3AF1, 41161 }, { 0x3C75, 41168 }, { 0x3C76, 41177 }, { 0x3C2A, 41187 }, { 0x3B89, 41196 }, { 0x3AF3, 41203 }, { 0x3C2C, 41210 }, { 0x3C77, 41219 }, { 0x3C78, 41228 }, { 0x3C2B, 41238 }, { 0x3C2D, 41247 }, { 0x3B58, 41256 }, { 0x3BC9, 41263 }, { 0x3B8A, 41270 }, { 0x3AF4, 41277 }, { 0x3B59, 41284 }, { 0x3B57, 41291 }, { 0x3C82, 41298 }, { 0x3BC1, 41307 }, { 0x3B3C, 41314 }, { 0x3BD7, 41321 }, { 0x3BC4, 41328 }, { 0x3B77, 41335 }, { 0x3B7C, 41342 }, { 0x3B40, 41349 }, { 0x3B7B, 41356 }, { 0x3B3F, 41364 }, { 0x3C83, 41372 }, { 0x3BC0, 41381 }, { 0x3B3B, 41388 }, { 0x3BC2, 41395 }, { 0x3B3D, 41402 }, { 0x3C84, 41409 }, { 0x3C70, 41418 }, { 0x3C71, 41427 }, { 0x3B79, 41436 }, { 0x3BD6, 41443 }, { 0x3BC3, 41450 }, { 0x3B3E, 41457 }, { 0x3B7A, 41464 }, { 0x3B78, 41471 }, { 0x3ADD, 41478 }, { 0x3ADE, 41488 }, { 0x3ADC, 41498 }, { 0x3AD7, 41508 }, { 0x3AD6, 41518 }, { 0x3AD3, 41528 }, { 0x3AD2, 41538 }, { 0x3AD9, 41548 }, { 0x3AD8, 41558 }, { 0x3ADB, 41568 }, { 0x3ADA, 41578 }, { 0x3B7E, 41588 }, { 0x3AE7, 41598 }, { 0x3BC6, 41608 }, { 0x3B81, 41618 }, { 0x3B4A, 41628 }, { 0x3AD5, 41638 }, { 0x3AD4, 41648 }, { 0x3B4F, 41658 }, { 0x3AEA, 41668 }, { 0x3AD1, 41678 }, { 0x3B4E, 41688 }, { 0x3AE9, 41699 }, { 0x3AD0, 41710 }, { 0x3B7D, 41720 }, { 0x3AE6, 41730 }, { 0x3B7F, 41740 }, { 0x3B4C, 41750 }, { 0x3BC5, 41760 }, { 0x3B80, 41770 }, { 0x3AE8, 41780 }, { 0x3B4D, 41790 }, { 0x3B4B, 41800 }, { 0x3C21, 41810 }, { 0x3B9F, 41817 }, { 0x3B0E, 41824 }, { 0x3C22, 41831 }, { 0x3C23, 41838 }, { 0x3B76, 41845 }, { 0x3B43, 41854 }, { 0x3C92, 41863 }, { 0x3C7A, 41872 }, { 0x3B8D, 41882 }, { 0x3AFB, 41889 }, { 0x3C04, 41896 }, { 0x3BE8, 41903 }, { 0x3C03, 41910 }, { 0x3BE7, 41918 }, { 0x3C2E, 41926 }, { 0x3C2F, 41935 }, { 0x3C79, 41944 }, { 0x3C7B, 41953 }, { 0x3B8E, 41963 }, { 0x3AFC, 41970 }, { 0x3B00, 41977 }, { 0x3C06, 41984 }, { 0x3BEA, 41991 }, { 0x3C05, 41998 }, { 0x3BE9, 42006 }, { 0x3B91, 42014 }, { 0x3AFF, 42021 }, { 0x3B92, 42028 }, { 0x3B01, 42035 }, { 0x3C61, 42042 }, { 0x3C5F, 42051 }, { 0x3C60, 42060 }, { 0x3BB5, 42069 }, { 0x3B2C, 42076 }, { 0x3B30, 42083 }, { 0x3B6E, 42090 }, { 0x3B2F, 42097 }, { 0x3C62, 42105 }, { 0x3C94, 42114 }, { 0x3C66, 42123 }, { 0x3C63, 42132 }, { 0x3BB4, 42141 }, { 0x3B2B, 42148 }, { 0x3C8D, 42155 }, { 0x3C64, 42164 }, { 0x3C65, 42173 }, { 0x3BB6, 42182 }, { 0x3B2D, 42189 }, { 0x3C85, 42196 }, { 0x3B6F, 42205 }, { 0x3BB7, 42212 }, { 0x3B2E, 42219 }, { 0x3C87, 42226 }, { 0x3C6A, 42235 }, { 0x3C69, 42245 }, { 0x3BB9, 42254 }, { 0x3B32, 42261 }, { 0x3BD5, 42268 }, { 0x3BBC, 42275 }, { 0x3B70, 42282 }, { 0x3B75, 42289 }, { 0x3B36, 42296 }, { 0x3B74, 42303 }, { 0x3B35, 42311 }, { 0x3C91, 42319 }, { 0x3C8C, 42328 }, { 0x3C9B, 42337 }, { 0x3C6D, 42346 }, { 0x3C6B, 42356 }, { 0x3C6C, 42365 }, { 0x3BB8, 42374 }, { 0x3B31, 42381 }, { 0x3BBA, 42388 }, { 0x3B33, 42395 }, { 0x3C6E, 42402 }, { 0x3C6F, 42411 }, { 0x3B72, 42421 }, { 0x3BD4, 42428 }, { 0x3BBB, 42435 }, { 0x3B34, 42442 }, { 0x3B73, 42449 }, { 0x3B71, 42456 }, { 0x3C9D, 42463 }, { 0x3C32, 42473 }, { 0x3C1B, 42482 }, { 0x3B94, 42489 }, { 0x3B03, 42496 }, { 0x3BCE, 42503 }, { 0x3C17, 42510 }, { 0x3C10, 42517 }, { 0x3BF4, 42524 }, { 0x3BFE, 42531 }, { 0x3BE2, 42538 }, { 0x3BFD, 42545 }, { 0x3BE1, 42553 }, { 0x3C33, 42561 }, { 0x3C34, 42570 }, { 0x3C1A, 42580 }, { 0x3B93, 42587 }, { 0x3B02, 42594 }, { 0x3C9A, 42601 }, { 0x3C7C, 42610 }, { 0x3C1C, 42620 }, { 0x3B95, 42627 }, { 0x3B04, 42634 }, { 0x3C35, 42641 }, { 0x3C36, 42650 }, { 0x3C37, 42659 }, { 0x3C38, 42668 }, { 0x3C39, 42677 }, { 0x3BCD, 42686 }, { 0x3B96, 42693 }, { 0x3B05, 42700 }, { 0x3B41, 42707 }, { 0x3BCC, 42715 }, { 0x3B5C, 42722 }, { 0x3B61, 42729 }, { 0x3AFA, 42736 }, { 0x3B60, 42743 }, { 0x3AF9, 42751 }, { 0x3AF7, 42759 }, { 0x3B5E, 42766 }, { 0x3BCB, 42773 }, { 0x3B8C, 42780 }, { 0x3AF8, 42787 }, { 0x3B5F, 42794 }, { 0x3B5D, 42801 }, { 0x3C9F, 42808 }, { 0x3C9E, 42813 }, { 0x3BFC, 42818 }, { 0x3BE0, 42825 }, { 0x3BFB, 42832 }, { 0x3BDF, 42840 }, { 0x3BA2, 42848 }, { 0x3B11, 42855 }, { 0x3C50, 42862 }, { 0x3C51, 42871 }, { 0x3C4F, 42881 }, { 0x3BA3, 42890 }, { 0x3B12, 42897 }, { 0x3CA1, 42904 }, { 0x3C9C, 42909 }, { 0x3CA5, 42919 }, { 0x3C7E, 42924 }, { 0x3C3D, 42933 }, { 0x3C3E, 42942 }, { 0x3C0C, 42951 }, { 0x3C1E, 42958 }, { 0x3C14, 42965 }, { 0x3BF0, 42972 }, { 0x3BD0, 42979 }, { 0x3C18, 42986 }, { 0x3C0F, 42993 }, { 0x3BF3, 43000 }, { 0x3C00, 43007 }, { 0x3BE4, 43014 }, { 0x3BFF, 43021 }, { 0x3BE3, 43029 }, { 0x3C3F, 43037 }, { 0x3C0B, 43046 }, { 0x3C1D, 43053 }, { 0x3C13, 43060 }, { 0x3BEF, 43067 }, { 0x3C0D, 43074 }, { 0x3C1F, 43081 }, { 0x3C15, 43088 }, { 0x3BF1, 43095 }, { 0x3C40, 43102 }, { 0x3C41, 43111 }, { 0x3C42, 43120 }, { 0x3C43, 43129 }, { 0x3C0E, 43138 }, { 0x3BCF, 43145 }, { 0x3C16, 43152 }, { 0x3BF2, 43159 }, { 0x3CA3, 43166 }, { 0x3CA2, 43171 }, { 0x3BD9, 43176 }, { 0x3B47, 43183 }, { 0x3BD8, 43190 }, { 0x3B46, 43197 }, { 0x3BDA, 43204 }, { 0x3B48, 43211 }, { 0x3B44, 43218 }, { 0x3B45, 43225 }, { 0x3B49, 43232 }, { 0x3AE0, 43240 }, { 0x3AE1, 43253 }, { 0x3ADF, 43266 }, { 0x3CA0, 43279 }, { 0x3CA4, 43284 }, { 0x3CA9, 43289 }, { 0x3CA6, 43294 }, { 0x3CA7, 43299 }, { 0x05B4, 43302 }, { 0x05F2, 43305 }, { 0x05EE, 43308 }, { 0x05B1, 43310 }, { 0x05EB, 43312 }, { 0x0601, 43315 }, { 0x69DF, 43318 }, { 0x69D2, 43321 }, { 0x69E9, 43324 }, { 0x69D4, 43327 }, { 0x69E0, 43330 }, { 0x69D7, 43333 }, { 0x69DA, 43336 }, { 0x69DB, 43339 }, { 0x69E2, 43342 }, { 0x69E3, 43345 }, { 0x69E1, 43348 }, { 0x69D8, 43351 }, { 0x69E5, 43354 }, { 0x69D5, 43357 }, { 0x69D9, 43360 }, { 0x69EA, 43363 }, { 0x69D1, 43366 }, { 0x69D3, 43369 }, { 0x69E7, 43372 }, { 0x69DC, 43375 }, { 0x69DD, 43378 }, { 0x69DE, 43381 }, { 0x69E8, 43384 }, { 0x69E6, 43387 }, { 0x69D6, 43390 }, { 0x69EB, 43393 }, { 0x69E4, 43396 }, { 0x6A38, 43399 }, { 0x6A2B, 43403 }, { 0x6A42, 43407 }, { 0x6A2D, 43411 }, { 0x6A39, 43415 }, { 0x6A31, 43419 }, { 0x6A2E, 43423 }, { 0x6A34, 43427 }, { 0x6A3B, 43431 }, { 0x6A3C, 43435 }, { 0x6A3A, 43439 }, { 0x6A32, 43443 }, { 0x6A3E, 43447 }, { 0x6A2F, 43451 }, { 0x6A33, 43455 }, { 0x6A43, 43459 }, { 0x6A2A, 43463 }, { 0x6A2C, 43467 }, { 0x6A40, 43471 }, { 0x6A35, 43475 }, { 0x6A36, 43479 }, { 0x6A37, 43483 }, { 0x6A41, 43487 }, { 0x6A3F, 43491 }, { 0x6A30, 43495 }, { 0x6A44, 43499 }, { 0x6A3D, 43503 }, { 0x6A0A, 43507 }, { 0x6A0F, 43511 }, { 0x6A05, 43515 }, { 0x6A07, 43519 }, { 0x6A0C, 43523 }, { 0x6A0B, 43527 }, { 0x6A06, 43531 }, { 0x6A04, 43535 }, { 0x6A0E, 43539 }, { 0x6A08, 43543 }, { 0x6A09, 43547 }, { 0x6A10, 43551 }, { 0x6A0D, 43555 }, { 0x6A12, 43559 }, { 0x6A11, 43564 }, { 0x69EC, 43569 }, { 0x69EE, 43573 }, { 0x69EF, 43577 }, { 0x69ED, 43581 }, { 0x69FA, 43585 }, { 0x69F0, 43589 }, { 0x6A02, 43593 }, { 0x69FB, 43597 }, { 0x69F3, 43601 }, { 0x69F2, 43605 }, { 0x69F5, 43609 }, { 0x69F6, 43613 }, { 0x69FD, 43617 }, { 0x69FC, 43621 }, { 0x69FF, 43625 }, { 0x69F4, 43629 }, { 0x69F1, 43633 }, { 0x6A01, 43637 }, { 0x69F7, 43641 }, { 0x69F8, 43645 }, { 0x69F9, 43649 }, { 0x6A00, 43653 }, { 0x6A03, 43657 }, { 0x69FE, 43661 }, { 0x6A5F, 43665 }, { 0x6A5E, 43671 }, { 0x6A1D, 43679 }, { 0x6A13, 43683 }, { 0x6A25, 43687 }, { 0x6A1E, 43691 }, { 0x6A16, 43695 }, { 0x6A15, 43699 }, { 0x6A19, 43703 }, { 0x6A20, 43707 }, { 0x6A1F, 43711 }, { 0x6A17, 43715 }, { 0x6A22, 43719 }, { 0x6A18, 43723 }, { 0x6A26, 43727 }, { 0x6A14, 43731 }, { 0x6A24, 43735 }, { 0x6A1A, 43739 }, { 0x6A1B, 43743 }, { 0x6A1C, 43747 }, { 0x6A23, 43751 }, { 0x6A27, 43755 }, { 0x6A21, 43759 }, { 0x6A28, 43763 }, { 0x6A29, 43768 }, { 0x6A51, 43773 }, { 0x6A45, 43777 }, { 0x6A5B, 43781 }, { 0x6A47, 43785 }, { 0x6A52, 43789 }, { 0x6A4A, 43793 }, { 0x6A4D, 43797 }, { 0x6A54, 43801 }, { 0x6A55, 43805 }, { 0x6A53, 43809 }, { 0x6A4B, 43813 }, { 0x6A57, 43817 }, { 0x6A48, 43821 }, { 0x6A4C, 43825 }, { 0x6A5C, 43829 }, { 0x6A46, 43833 }, { 0x6A59, 43837 }, { 0x6A4E, 43841 }, { 0x6A4F, 43845 }, { 0x6A50, 43849 }, { 0x6A5A, 43853 }, { 0x6A58, 43857 }, { 0x6A49, 43861 }, { 0x6A5D, 43865 }, { 0x6A56, 43869 }, { 0x6CE3, 43873 }, { 0x2271, 43875 }, { 0x216A, 43877 }, { 0x216C, 43879 }, { 0x6F34, 43883 }, { 0x6F32, 43888 }, { 0x216B, 43894 }, { 0x2710, 43898 }, { 0x6F2E, 43903 }, { 0x6F30, 43907 }, { 0x6F31, 43912 }, { 0x6F2F, 43916 }, { 0x6C87, 43919 }, { 0x6DC3, 43920 }, { 0x21C5, 43922 }, { 0x6CD7, 43925 }, { 0x21C6, 43929 }, { 0x6CD8, 43932 }, { 0x6D94, 43936 }, { 0x6CB9, 43937 }, { 0x2495, 43941 }, { 0x271D, 43945 }, { 0x1EAA, 43949 }, { 0x1E96, 43952 }, { 0x2917, 43955 }, { 0x1EA7, 43959 }, { 0x1F68, 43962 }, { 0x1E95, 43965 }, { 0x2918, 43968 }, { 0x1EA8, 43972 }, { 0x1F3E, 43975 }, { 0x1F3F, 43978 }, { 0x1F6A, 43985 }, { 0x1F66, 43989 }, { 0x1E51, 43991 }, { 0x252B, 43992 }, { 0x252C, 43997 }, { 0x71AD, 44002 }, { 0x4755, 44004 }, { 0x4754, 44007 }, { 0x4753, 44010 }, { 0x4756, 44013 }, { 0x4757, 44016 }, { 0x479A, 44019 }, { 0x47B6, 44021 }, { 0x47BB, 44024 }, { 0x47B7, 44027 }, { 0x47BA, 44030 }, { 0x47B9, 44033 }, { 0x47BE, 44036 }, { 0x47B5, 44039 }, { 0x47BD, 44042 }, { 0x47BC, 44045 }, { 0x47B8, 44048 }, { 0x4795, 44051 }, { 0x478D, 44055 }, { 0x4797, 44059 }, { 0x478F, 44063 }, { 0x478B, 44067 }, { 0x4796, 44071 }, { 0x4798, 44075 }, { 0x478E, 44079 }, { 0x4790, 44083 }, { 0x4793, 44087 }, { 0x4791, 44092 }, { 0x4794, 44097 }, { 0x4792, 44102 }, { 0x478C, 44107 }, { 0x479B, 44112 }, { 0x4758, 44115 }, { 0x4762, 44118 }, { 0x475A, 44121 }, { 0x4764, 44124 }, { 0x475C, 44127 }, { 0x4759, 44130 }, { 0x4763, 44133 }, { 0x4765, 44136 }, { 0x477C, 44139 }, { 0x476B, 44142 }, { 0x4777, 44145 }, { 0x4768, 44148 }, { 0x4786, 44151 }, { 0x475B, 44154 }, { 0x476D, 44157 }, { 0x4766, 44160 }, { 0x4781, 44163 }, { 0x477E, 44166 }, { 0x4779, 44169 }, { 0x477A, 44172 }, { 0x4780, 44175 }, { 0x4785, 44178 }, { 0x4775, 44181 }, { 0x475D, 44184 }, { 0x4782, 44187 }, { 0x477F, 44190 }, { 0x477D, 44193 }, { 0x476C, 44196 }, { 0x4772, 44199 }, { 0x4778, 44202 }, { 0x4769, 44205 }, { 0x476E, 44208 }, { 0x4767, 44211 }, { 0x4787, 44214 }, { 0x476A, 44217 }, { 0x4774, 44220 }, { 0x476F, 44223 }, { 0x4789, 44226 }, { 0x4788, 44231 }, { 0x478A, 44236 }, { 0x477B, 44241 }, { 0x4783, 44244 }, { 0x4784, 44247 }, { 0x4776, 44250 }, { 0x4770, 44253 }, { 0x4773, 44256 }, { 0x4771, 44259 }, { 0x4760, 44262 }, { 0x475E, 44266 }, { 0x4761, 44270 }, { 0x475F, 44274 }, { 0x47A1, 44278 }, { 0x47B3, 44281 }, { 0x47B4, 44285 }, { 0x47A6, 44289 }, { 0x47AA, 44292 }, { 0x47A2, 44295 }, { 0x47A5, 44298 }, { 0x47A4, 44301 }, { 0x47A9, 44304 }, { 0x47A8, 44307 }, { 0x47AE, 44310 }, { 0x47AD, 44313 }, { 0x47A7, 44316 }, { 0x47AF, 44319 }, { 0x47A3, 44322 }, { 0x47B1, 44325 }, { 0x47BF, 44328 }, { 0x47B2, 44331 }, { 0x47AC, 44334 }, { 0x47AB, 44337 }, { 0x47B0, 44340 }, { 0x4799, 44343 }, { 0x479C, 44345 }, { 0x479E, 44348 }, { 0x47A0, 44351 }, { 0x479D, 44354 }, { 0x479F, 44358 }, { 0x6C44, 44362 }, { 0x0065, 44365 }, { 0x6DCF, 44367 }, { 0x1F14, 44369 }, { 0x1BD6, 44374 }, { 0x1DA2, 44375 }, { 0x6C70, 44377 }, { 0x6E32, 44378 }, { 0x6E33, 44379 }, { 0x7231, 44382 }, { 0x21A5, 44384 }, { 0x6EAA, 44385 }, { 0x4024, 44386 }, { 0x402D, 44389 }, { 0x4026, 44392 }, { 0x403E, 44395 }, { 0x4044, 44398 }, { 0x403D, 44401 }, { 0x4040, 44404 }, { 0x4027, 44407 }, { 0x402E, 44410 }, { 0x4039, 44413 }, { 0x402F, 44416 }, { 0x403B, 44419 }, { 0x402C, 44422 }, { 0x4029, 44425 }, { 0x4034, 44428 }, { 0x4031, 44431 }, { 0x4036, 44434 }, { 0x4038, 44437 }, { 0x402B, 44440 }, { 0x4030, 44443 }, { 0x4053, 44446 }, { 0x4045, 44449 }, { 0x4049, 44452 }, { 0x4041, 44455 }, { 0x402A, 44458 }, { 0x404E, 44461 }, { 0x4042, 44464 }, { 0x4048, 44467 }, { 0x4037, 44470 }, { 0x4025, 44473 }, { 0x404D, 44476 }, { 0x4032, 44479 }, { 0x403C, 44482 }, { 0x4046, 44485 }, { 0x404B, 44488 }, { 0x4043, 44491 }, { 0x4052, 44494 }, { 0x404F, 44497 }, { 0x4050, 44500 }, { 0x4051, 44503 }, { 0x4033, 44506 }, { 0x4047, 44509 }, { 0x403A, 44512 }, { 0x4028, 44515 }, { 0x4035, 44518 }, { 0x404A, 44521 }, { 0x404C, 44524 }, { 0x4054, 44527 }, { 0x403F, 44530 }, { 0x71B4, 44533 }, { 0x2245, 44534 }, { 0x6E83, 44535 }, { 0x1C91, 44537 }, { 0x222D, 44540 }, { 0x4856, 44541 }, { 0x4857, 44544 }, { 0x4827, 44547 }, { 0x4826, 44550 }, { 0x4825, 44553 }, { 0x4865, 44556 }, { 0x485B, 44558 }, { 0x4860, 44561 }, { 0x485C, 44564 }, { 0x485F, 44567 }, { 0x485E, 44570 }, { 0x4863, 44573 }, { 0x485A, 44576 }, { 0x4862, 44579 }, { 0x4861, 44582 }, { 0x485D, 44585 }, { 0x484C, 44588 }, { 0x4851, 44592 }, { 0x484D, 44596 }, { 0x4853, 44600 }, { 0x484F, 44604 }, { 0x4852, 44608 }, { 0x4854, 44612 }, { 0x484E, 44616 }, { 0x4855, 44620 }, { 0x4850, 44624 }, { 0x4866, 44628 }, { 0x482B, 44631 }, { 0x4829, 44634 }, { 0x482A, 44637 }, { 0x4828, 44640 }, { 0x4842, 44643 }, { 0x4831, 44646 }, { 0x483D, 44649 }, { 0x482E, 44652 }, { 0x484B, 44655 }, { 0x4833, 44658 }, { 0x482C, 44661 }, { 0x4848, 44664 }, { 0x4844, 44667 }, { 0x483F, 44670 }, { 0x4840, 44673 }, { 0x4847, 44676 }, { 0x484A, 44679 }, { 0x483B, 44682 }, { 0x4849, 44685 }, { 0x4846, 44688 }, { 0x4843, 44691 }, { 0x4832, 44694 }, { 0x4838, 44697 }, { 0x483E, 44700 }, { 0x482F, 44703 }, { 0x4834, 44706 }, { 0x482D, 44709 }, { 0x4830, 44712 }, { 0x483A, 44715 }, { 0x4835, 44718 }, { 0x4841, 44721 }, { 0x483C, 44724 }, { 0x4836, 44727 }, { 0x4845, 44730 }, { 0x4839, 44733 }, { 0x4837, 44736 }, { 0x4858, 44739 }, { 0x4859, 44741 }, { 0x4864, 44743 }, { 0x4867, 44746 }, { 0x71D0, 44749 }, { 0x6C73, 44751 }, { 0x2211, 44753 }, { 0x2244, 44754 }, { 0x6CE1, 44755 }, { 0x212F, 44756 }, { 0x251D, 44764 }, { 0x212A, 44772 }, { 0x212C, 44777 }, { 0x212B, 44782 }, { 0x251C, 44787 }, { 0x212D, 44794 }, { 0x212E, 44799 }, { 0x2127, 44805 }, { 0x250F, 44809 }, { 0x2515, 44813 }, { 0x2514, 44817 }, { 0x6CE5, 44829 }, { 0x6E10, 44831 }, { 0x6E4B, 44833 }, { 0x25A6, 44837 }, { 0x25AA, 44841 }, { 0x2629, 44848 }, { 0x262B, 44850 }, { 0x6E26, 44855 }, { 0x6E25, 44860 }, { 0x262A, 44865 }, { 0x262C, 44867 }, { 0x6C3D, 44872 }, { 0x25A7, 44874 }, { 0x220A, 44878 }, { 0x6C95, 44879 }, { 0x6CA5, 44881 }, { 0x281A, 44882 }, { 0x281D, 44887 }, { 0x281B, 44892 }, { 0x281C, 44898 }, { 0x281F, 44904 }, { 0x4056, 44907 }, { 0x405B, 44911 }, { 0x4057, 44915 }, { 0x405A, 44919 }, { 0x4059, 44923 }, { 0x405E, 44927 }, { 0x405D, 44931 }, { 0x405C, 44935 }, { 0x4058, 44939 }, { 0x4068, 44943 }, { 0x406D, 44948 }, { 0x405F, 44953 }, { 0x4069, 44957 }, { 0x406C, 44962 }, { 0x406B, 44967 }, { 0x4070, 44972 }, { 0x406F, 44977 }, { 0x4063, 44982 }, { 0x4062, 44986 }, { 0x406E, 44990 }, { 0x4064, 44995 }, { 0x406A, 44999 }, { 0x4066, 45004 }, { 0x4067, 45008 }, { 0x4061, 45012 }, { 0x4060, 45016 }, { 0x4065, 45020 }, { 0x4055, 45024 }, { 0x27C5, 45028 }, { 0x27D1, 45032 }, { 0x27BF, 45036 }, { 0x27C1, 45040 }, { 0x27C7, 45044 }, { 0x27C9, 45048 }, { 0x27CF, 45052 }, { 0x03A5, 45056 }, { 0x27AF, 45060 }, { 0x039B, 45064 }, { 0x27D3, 45068 }, { 0x27C3, 45072 }, { 0x27F5, 45076 }, { 0x27DB, 45082 }, { 0x27FF, 45088 }, { 0x27ED, 45094 }, { 0x27FB, 45100 }, { 0x27F9, 45106 }, { 0x27E5, 45112 }, { 0x27F3, 45118 }, { 0x27EB, 45124 }, { 0x2801, 45130 }, { 0x27FD, 45136 }, { 0x2805, 45142 }, { 0x2807, 45148 }, { 0x2809, 45154 }, { 0x2803, 45160 }, { 0x27D7, 45166 }, { 0x27D5, 45170 }, { 0x27B1, 45174 }, { 0x27CD, 45178 }, { 0x27A7, 45182 }, { 0x27B5, 45186 }, { 0x039F, 45190 }, { 0x27BB, 45194 }, { 0x039D, 45198 }, { 0x0399, 45202 }, { 0x27CB, 45206 }, { 0x27A9, 45210 }, { 0x27B3, 45214 }, { 0x27AD, 45218 }, { 0x27AB, 45222 }, { 0x27B9, 45226 }, { 0x27BD, 45230 }, { 0x27E7, 45234 }, { 0x03A3, 45238 }, { 0x03A1, 45242 }, { 0x27B7, 45246 }, { 0x27E9, 45250 }, { 0x27EF, 45255 }, { 0x2819, 45260 }, { 0x27F7, 45265 }, { 0x27E1, 45270 }, { 0x27D9, 45275 }, { 0x27F1, 45280 }, { 0x27DF, 45285 }, { 0x27E3, 45290 }, { 0x27DD, 45295 }, { 0x2812, 45300 }, { 0x2814, 45305 }, { 0x280B, 45310 }, { 0x280C, 45314 }, { 0x280A, 45318 }, { 0x280F, 45321 }, { 0x280E, 45325 }, { 0x2810, 45329 }, { 0x280D, 45333 }, { 0x27C4, 45336 }, { 0x27D0, 45340 }, { 0x27BE, 45344 }, { 0x27C0, 45348 }, { 0x27C6, 45352 }, { 0x27C8, 45356 }, { 0x27CE, 45360 }, { 0x03A4, 45364 }, { 0x27AE, 45368 }, { 0x039A, 45372 }, { 0x27D2, 45376 }, { 0x27C2, 45380 }, { 0x27F4, 45384 }, { 0x27DA, 45390 }, { 0x27FE, 45396 }, { 0x27EC, 45402 }, { 0x27FA, 45408 }, { 0x27F8, 45414 }, { 0x27E4, 45420 }, { 0x27F2, 45426 }, { 0x27EA, 45432 }, { 0x2800, 45438 }, { 0x27FC, 45444 }, { 0x2804, 45450 }, { 0x2806, 45456 }, { 0x2808, 45462 }, { 0x2802, 45468 }, { 0x27D6, 45474 }, { 0x27D4, 45478 }, { 0x27B0, 45482 }, { 0x27CC, 45486 }, { 0x27A6, 45490 }, { 0x27B4, 45494 }, { 0x039E, 45498 }, { 0x27BA, 45502 }, { 0x039C, 45506 }, { 0x0398, 45510 }, { 0x27CA, 45514 }, { 0x27A8, 45518 }, { 0x27B2, 45522 }, { 0x27AC, 45526 }, { 0x27AA, 45530 }, { 0x27B8, 45534 }, { 0x27BC, 45538 }, { 0x27E6, 45542 }, { 0x03A2, 45546 }, { 0x03A0, 45550 }, { 0x27B6, 45554 }, { 0x27E8, 45558 }, { 0x27EE, 45563 }, { 0x2818, 45568 }, { 0x27F6, 45573 }, { 0x27E0, 45578 }, { 0x27D8, 45583 }, { 0x27F0, 45588 }, { 0x27DE, 45593 }, { 0x27E2, 45598 }, { 0x27DC, 45603 }, { 0x2811, 45608 }, { 0x2813, 45613 }, { 0x281E, 45618 }, { 0x2815, 45622 }, { 0x2816, 45626 }, { 0x2817, 45630 }, { 0x2820, 45634 }, { 0x6DCC, 45637 }, { 0x6DEE, 45640 }, { 0x6F7A, 45642 }, { 0x6F5D, 45645 }, { 0x22BB, 45647 }, { 0x1BD4, 45652 }, { 0x2929, 45653 }, { 0x292A, 45657 }, { 0x6F1C, 45661 }, { 0x6DBE, 45663 }, { 0x3CE1, 45664 }, { 0x3CDD, 45667 }, { 0x22F9, 45669 }, { 0x006F, 45673 }, { 0x1C90, 45675 }, { 0x1C96, 45677 }, { 0x6D17, 45679 }, { 0x6D18, 45680 }, { 0x701D, 45682 }, { 0x6197, 45684 }, { 0x6194, 45687 }, { 0x21E7, 45691 }, { 0x21E8, 45695 }, { 0x6196, 45699 }, { 0x6195, 45703 }, { 0x21E9, 45707 }, { 0x21E6, 45711 }, { 0x6193, 45715 }, { 0x6CEA, 45719 }, { 0x1F1C, 45721 }, { 0x0004, 45726 }, { 0x6ABE, 45728 }, { 0x6A8C, 45732 }, { 0x6ABF, 45736 }, { 0x6AC0, 45739 }, { 0x6AC1, 45742 }, { 0x6AC2, 45745 }, { 0x6AC3, 45748 }, { 0x6AC4, 45751 }, { 0x6AC5, 45754 }, { 0x6AC6, 45757 }, { 0x6AC7, 45760 }, { 0x6AC8, 45763 }, { 0x6AC9, 45766 }, { 0x6ACA, 45769 }, { 0x6ACB, 45772 }, { 0x6ACC, 45775 }, { 0x6ACD, 45778 }, { 0x6ACE, 45781 }, { 0x6ACF, 45784 }, { 0x6AD0, 45787 }, { 0x6AD1, 45790 }, { 0x6AD2, 45793 }, { 0x6AD3, 45796 }, { 0x6AD4, 45799 }, { 0x6AD5, 45802 }, { 0x6AD6, 45805 }, { 0x6AD7, 45808 }, { 0x6AD8, 45811 }, { 0x6AD9, 45814 }, { 0x6ADA, 45817 }, { 0x6ADB, 45820 }, { 0x6ADC, 45823 }, { 0x6ADD, 45826 }, { 0x6ADE, 45829 }, { 0x6ADF, 45832 }, { 0x6AE0, 45835 }, { 0x6AE1, 45838 }, { 0x6AE2, 45841 }, { 0x6AE3, 45844 }, { 0x6AE4, 45847 }, { 0x6AE5, 45850 }, { 0x6AE6, 45853 }, { 0x6AE7, 45856 }, { 0x6AE8, 45859 }, { 0x6AE9, 45862 }, { 0x6AEA, 45865 }, { 0x6AEB, 45868 }, { 0x6AEC, 45871 }, { 0x6AED, 45874 }, { 0x6AEE, 45877 }, { 0x6AEF, 45880 }, { 0x6A8D, 45883 }, { 0x6A8E, 45886 }, { 0x6A8F, 45889 }, { 0x6A90, 45892 }, { 0x6A91, 45895 }, { 0x6A92, 45898 }, { 0x6A93, 45901 }, { 0x6A94, 45904 }, { 0x6A95, 45907 }, { 0x6A96, 45910 }, { 0x6A97, 45913 }, { 0x6A98, 45916 }, { 0x6A99, 45919 }, { 0x6A9A, 45922 }, { 0x6A9B, 45925 }, { 0x6A9C, 45928 }, { 0x6A9D, 45931 }, { 0x6A9E, 45934 }, { 0x6A9F, 45937 }, { 0x6AA0, 45940 }, { 0x6AA1, 45943 }, { 0x6AA2, 45946 }, { 0x6AA3, 45949 }, { 0x6AA4, 45952 }, { 0x6AA5, 45955 }, { 0x6AA6, 45958 }, { 0x6AA7, 45961 }, { 0x6AA8, 45964 }, { 0x6AA9, 45967 }, { 0x6AAA, 45970 }, { 0x6AAB, 45973 }, { 0x6AAC, 45976 }, { 0x6AAD, 45979 }, { 0x6AAE, 45982 }, { 0x6AAF, 45985 }, { 0x6AB0, 45988 }, { 0x6AB1, 45991 }, { 0x6AB2, 45994 }, { 0x6AB3, 45997 }, { 0x6AB4, 46000 }, { 0x6AB5, 46003 }, { 0x6AB6, 46006 }, { 0x6AB7, 46009 }, { 0x6AB8, 46012 }, { 0x6AB9, 46015 }, { 0x6ABA, 46018 }, { 0x6ABB, 46021 }, { 0x6ABC, 46024 }, { 0x6ABD, 46027 }, { 0x1C10, 46030 }, { 0x24F3, 46032 }, { 0x2126, 46034 }, { 0x2906, 46036 }, { 0x2674, 46038 }, { 0x28FB, 46040 }, { 0x2909, 46043 }, { 0x2645, 46046 }, { 0x1BCB, 46049 }, { 0x2644, 46052 }, { 0x24EF, 46055 }, { 0x2554, 46060 }, { 0x3CE0, 46062 }, { 0x029C, 46065 }, { 0x25CE, 46068 }, { 0x2319, 46071 }, { 0x1BD2, 46074 }, { 0x1BE7, 46078 }, { 0x2AAB, 46080 }, { 0x24F0, 46084 }, { 0x1E5C, 46089 }, { 0x1BD5, 46091 }, { 0x2933, 46093 }, { 0x25FB, 46095 }, { 0x25FD, 46098 }, { 0x25FC, 46103 }, { 0x25A9, 46106 }, { 0x25A8, 46109 }, { 0x2646, 46112 }, { 0x1E59, 46116 }, { 0x204F, 46118 }, { 0x2054, 46122 }, { 0x2050, 46126 }, { 0x2053, 46130 }, { 0x2052, 46134 }, { 0x2057, 46138 }, { 0x2056, 46142 }, { 0x2055, 46146 }, { 0x2051, 46150 }, { 0x2058, 46154 }, { 0x25AE, 46158 }, { 0x25AD, 46161 }, { 0x290A, 46164 }, { 0x2657, 46167 }, { 0x1DB5, 46170 }, { 0x2615, 46172 }, { 0x1BFB, 46174 }, { 0x2616, 46177 }, { 0x1E5A, 46179 }, { 0x1F81, 46181 }, { 0x263D, 46184 }, { 0x263F, 46189 }, { 0x1E34, 46195 }, { 0x1BCA, 46201 }, { 0x2937, 46204 }, { 0x1BF0, 46207 }, { 0x1E5B, 46210 }, { 0x2935, 46212 }, { 0x1BD3, 46216 }, { 0x6D44, 46220 }, { 0x6D6D, 46221 }, { 0x6E22, 46223 }, { 0x21C4, 46225 }, { 0x001D, 46227 }, { 0x253D, 46229 }, { 0x253E, 46234 }, { 0x25C0, 46242 }, { 0x25D1, 46247 }, { 0x2608, 46257 }, { 0x25CB, 46262 }, { 0x25CD, 46267 }, { 0x269A, 46272 }, { 0x24CB, 46277 }, { 0x25C8, 46282 }, { 0x1DDE, 46285 }, { 0x1DC2, 46287 }, { 0x6C7D, 46288 }, { 0x6DA5, 46290 }, { 0x6CC0, 46291 }, { 0x219A, 46293 }, { 0x719E, 46295 }, { 0x6CDC, 46296 }, { 0x1BC6, 46298 }, { 0x1BBB, 46300 }, { 0x2567, 46302 }, { 0x6D85, 46305 }, { 0x6DE5, 46308 }, { 0x6DF9, 46310 }, { 0x22C0, 46312 }, { 0x21F2, 46314 }, { 0x6CEF, 46315 }, { 0x1C09, 46318 }, { 0x6EC0, 46321 }, { 0x6EFB, 46323 }, { 0x1E32, 46324 }, { 0x2903, 46325 }, { 0x1DA5, 46327 }, { 0x1C50, 46329 }, { 0x6C9A, 46332 }, { 0x21A4, 46334 }, { 0x1C5D, 46335 }, { 0x2540, 46338 }, { 0x6D07, 46340 }, { 0x409E, 46341 }, { 0x40A3, 46344 }, { 0x4095, 46347 }, { 0x4098, 46350 }, { 0x4097, 46353 }, { 0x409C, 46356 }, { 0x409B, 46359 }, { 0x40AF, 46362 }, { 0x40A4, 46366 }, { 0x40AB, 46369 }, { 0x40AD, 46372 }, { 0x40AC, 46375 }, { 0x409F, 46378 }, { 0x40A0, 46381 }, { 0x40A1, 46384 }, { 0x40AE, 46387 }, { 0x40A7, 46390 }, { 0x40A8, 46393 }, { 0x40A9, 46396 }, { 0x40AA, 46399 }, { 0x4099, 46402 }, { 0x40A2, 46405 }, { 0x40A6, 46408 }, { 0x409D, 46411 }, { 0x4096, 46414 }, { 0x40A5, 46417 }, { 0x409A, 46420 }, { 0x6C82, 46423 }, { 0x6CF3, 46424 }, { 0x6E63, 46425 }, { 0x21EC, 46426 }, { 0x2187, 46429 }, { 0x700E, 46432 }, { 0x2ABC, 46435 }, { 0x2BE6, 46440 }, { 0x2BD1, 46442 }, { 0x2BD6, 46445 }, { 0x2BE5, 46448 }, { 0x2BD9, 46451 }, { 0x2BDE, 46454 }, { 0x2BD2, 46457 }, { 0x2BD5, 46460 }, { 0x2BE3, 46463 }, { 0x2BDC, 46466 }, { 0x2BDA, 46469 }, { 0x2BE0, 46472 }, { 0x2BE1, 46475 }, { 0x2BD3, 46478 }, { 0x2BD8, 46481 }, { 0x2BE4, 46484 }, { 0x2BDD, 46487 }, { 0x2BE2, 46490 }, { 0x2BDB, 46493 }, { 0x2BDF, 46496 }, { 0x2BD4, 46499 }, { 0x2BD7, 46502 }, { 0x2BC7, 46505 }, { 0x2C0B, 46508 }, { 0x2C0E, 46511 }, { 0x2C0F, 46514 }, { 0x2BCA, 46517 }, { 0x2BD0, 46520 }, { 0x2BC9, 46523 }, { 0x2BC3, 46526 }, { 0x2BB6, 46529 }, { 0x2BC4, 46532 }, { 0x2BBB, 46535 }, { 0x2C09, 46538 }, { 0x2C0D, 46541 }, { 0x2C10, 46544 }, { 0x2BB3, 46547 }, { 0x2BB9, 46550 }, { 0x2C0A, 46553 }, { 0x2C0C, 46556 }, { 0x2BCC, 46559 }, { 0x2BCD, 46562 }, { 0x2C01, 46565 }, { 0x2BCF, 46568 }, { 0x2BCE, 46571 }, { 0x2C03, 46574 }, { 0x2BC8, 46577 }, { 0x2BF1, 46580 }, { 0x2BE9, 46583 }, { 0x2BC6, 46586 }, { 0x2BBF, 46589 }, { 0x2C00, 46592 }, { 0x2BFD, 46595 }, { 0x2BFF, 46598 }, { 0x2BCB, 46601 }, { 0x2C07, 46604 }, { 0x2C02, 46607 }, { 0x2BE7, 46610 }, { 0x2BC5, 46613 }, { 0x2BB5, 46616 }, { 0x2BF0, 46619 }, { 0x2BB7, 46622 }, { 0x2BB8, 46625 }, { 0x2BF8, 46628 }, { 0x2BC2, 46631 }, { 0x2BBD, 46634 }, { 0x2BBE, 46637 }, { 0x2BFC, 46640 }, { 0x2BFE, 46643 }, { 0x2BB4, 46646 }, { 0x2BBA, 46649 }, { 0x2C08, 46652 }, { 0x2BE8, 46655 }, { 0x2BF4, 46658 }, { 0x2BF5, 46661 }, { 0x2BBC, 46664 }, { 0x2BEC, 46667 }, { 0x2BF3, 46670 }, { 0x2BFA, 46673 }, { 0x2BF2, 46676 }, { 0x2BEA, 46679 }, { 0x2BF9, 46682 }, { 0x2BEE, 46685 }, { 0x2BC1, 46688 }, { 0x2BC0, 46691 }, { 0x2C04, 46694 }, { 0x2C06, 46697 }, { 0x2BED, 46700 }, { 0x2C05, 46703 }, { 0x2BF6, 46706 }, { 0x2BF7, 46709 }, { 0x2BEB, 46712 }, { 0x2BEF, 46715 }, { 0x2BFB, 46718 }, { 0x2ABB, 46721 }, { 0x0E37, 46726 }, { 0x0E3A, 46729 }, { 0x0E40, 46732 }, { 0x0E39, 46735 }, { 0x0E34, 46738 }, { 0x0E30, 46741 }, { 0x0E35, 46744 }, { 0x0E33, 46747 }, { 0x0E8D, 46750 }, { 0x0E2E, 46753 }, { 0x0E31, 46756 }, { 0x0E3C, 46759 }, { 0x0E3D, 46762 }, { 0x0E6E, 46765 }, { 0x0E3F, 46768 }, { 0x0E3E, 46771 }, { 0x0E7A, 46774 }, { 0x0E38, 46777 }, { 0x3794, 46780 }, { 0x0E73, 46783 }, { 0x378A, 46786 }, { 0x0E89, 46789 }, { 0x0E4F, 46792 }, { 0x3785, 46795 }, { 0x0E64, 46798 }, { 0x0E69, 46801 }, { 0x0E63, 46804 }, { 0x0E5F, 46807 }, { 0x0E5C, 46810 }, { 0x0E60, 46813 }, { 0x0E5E, 46816 }, { 0x0E3B, 46819 }, { 0x0E86, 46822 }, { 0x0E75, 46825 }, { 0x0E42, 46828 }, { 0x0E36, 46831 }, { 0x0E47, 46834 }, { 0x0E7B, 46837 }, { 0x0E76, 46840 }, { 0x3790, 46843 }, { 0x0E71, 46846 }, { 0x0E72, 46849 }, { 0x378F, 46852 }, { 0x0E4A, 46855 }, { 0x0E8A, 46858 }, { 0x0E8B, 46861 }, { 0x0E44, 46864 }, { 0x0E55, 46867 }, { 0x378D, 46870 }, { 0x0E4D, 46873 }, { 0x3786, 46876 }, { 0x0E48, 46879 }, { 0x3781, 46882 }, { 0x0E46, 46885 }, { 0x3782, 46888 }, { 0x0E5B, 46891 }, { 0x0E5D, 46894 }, { 0x0E2F, 46897 }, { 0x0E32, 46900 }, { 0x377B, 46903 }, { 0x0E87, 46906 }, { 0x0E6A, 46909 }, { 0x0E6F, 46912 }, { 0x0E70, 46915 }, { 0x3788, 46918 }, { 0x3789, 46921 }, { 0x0E41, 46924 }, { 0x0E43, 46927 }, { 0x0E4C, 46930 }, { 0x0E4E, 46933 }, { 0x377D, 46936 }, { 0x377F, 46939 }, { 0x0E65, 46942 }, { 0x0E66, 46945 }, { 0x0E68, 46948 }, { 0x0E67, 46951 }, { 0x3792, 46954 }, { 0x377C, 46957 }, { 0x3779, 46960 }, { 0x377A, 46963 }, { 0x0E8C, 46966 }, { 0x0E81, 46969 }, { 0x0E7C, 46972 }, { 0x0E77, 46975 }, { 0x0E74, 46978 }, { 0x0E79, 46981 }, { 0x0E78, 46984 }, { 0x0E4B, 46987 }, { 0x0E59, 46990 }, { 0x0E49, 46993 }, { 0x0E88, 46996 }, { 0x3793, 46999 }, { 0x0E84, 47002 }, { 0x0E56, 47005 }, { 0x378C, 47008 }, { 0x0E58, 47011 }, { 0x0E57, 47014 }, { 0x3787, 47017 }, { 0x0E45, 47020 }, { 0x0E62, 47023 }, { 0x0E6C, 47026 }, { 0x0E80, 47029 }, { 0x0E82, 47032 }, { 0x0E85, 47035 }, { 0x0E53, 47038 }, { 0x378E, 47041 }, { 0x0E7E, 47044 }, { 0x0E54, 47047 }, { 0x0E52, 47050 }, { 0x3783, 47053 }, { 0x3791, 47056 }, { 0x3795, 47059 }, { 0x0E6B, 47062 }, { 0x0E50, 47065 }, { 0x0E51, 47068 }, { 0x377E, 47071 }, { 0x3780, 47074 }, { 0x0E61, 47077 }, { 0x0E83, 47080 }, { 0x0E7D, 47083 }, { 0x0E5A, 47086 }, { 0x378B, 47089 }, { 0x3784, 47092 }, { 0x0E6D, 47095 }, { 0x0E7F, 47098 }, { 0x0EE8, 47101 }, { 0x0EEB, 47104 }, { 0x0EF0, 47107 }, { 0x0EEA, 47110 }, { 0x0EE5, 47113 }, { 0x0ED9, 47116 }, { 0x0EE6, 47119 }, { 0x0EDD, 47122 }, { 0x0ED6, 47125 }, { 0x0EDC, 47128 }, { 0x0EEC, 47131 }, { 0x0EED, 47134 }, { 0x0F19, 47137 }, { 0x0EEF, 47140 }, { 0x0EEE, 47143 }, { 0x0F1E, 47146 }, { 0x0EE9, 47149 }, { 0x0F0B, 47152 }, { 0x0EF5, 47155 }, { 0x0EE7, 47158 }, { 0x0EE1, 47161 }, { 0x39FB, 47164 }, { 0x39FE, 47167 }, { 0x39F6, 47170 }, { 0x0F18, 47173 }, { 0x0F17, 47176 }, { 0x3A05, 47179 }, { 0x0F1C, 47182 }, { 0x39EC, 47185 }, { 0x0F2D, 47188 }, { 0x39F2, 47191 }, { 0x0EFE, 47194 }, { 0x3A03, 47197 }, { 0x0F25, 47200 }, { 0x0F23, 47203 }, { 0x0F26, 47206 }, { 0x0F24, 47209 }, { 0x0ED8, 47212 }, { 0x39EE, 47215 }, { 0x0F0F, 47218 }, { 0x39EA, 47221 }, { 0x0F0A, 47224 }, { 0x0F09, 47227 }, { 0x0EDA, 47230 }, { 0x0EDB, 47233 }, { 0x39D7, 47236 }, { 0x39F4, 47239 }, { 0x0F13, 47242 }, { 0x39F1, 47245 }, { 0x0F11, 47248 }, { 0x0EE4, 47251 }, { 0x0EDF, 47254 }, { 0x0EFB, 47257 }, { 0x0EE0, 47260 }, { 0x0F15, 47263 }, { 0x0F16, 47266 }, { 0x0ED7, 47269 }, { 0x39D9, 47272 }, { 0x39DC, 47275 }, { 0x0F27, 47278 }, { 0x0F1A, 47281 }, { 0x0F2C, 47284 }, { 0x0F28, 47287 }, { 0x0F29, 47290 }, { 0x0EF1, 47293 }, { 0x0F08, 47296 }, { 0x0EF3, 47299 }, { 0x0EF4, 47302 }, { 0x3A06, 47305 }, { 0x39EF, 47308 }, { 0x0EDE, 47311 }, { 0x0EFC, 47314 }, { 0x39FC, 47317 }, { 0x39FA, 47320 }, { 0x39FD, 47323 }, { 0x39DE, 47326 }, { 0x39DB, 47329 }, { 0x0EF9, 47332 }, { 0x0F1D, 47335 }, { 0x0F10, 47338 }, { 0x0F14, 47341 }, { 0x39E9, 47344 }, { 0x0F0E, 47347 }, { 0x0F0D, 47350 }, { 0x39D8, 47353 }, { 0x0EF6, 47356 }, { 0x0EF7, 47359 }, { 0x39FF, 47362 }, { 0x0F21, 47365 }, { 0x39F5, 47368 }, { 0x0F12, 47371 }, { 0x0F06, 47374 }, { 0x0F05, 47377 }, { 0x0EE3, 47380 }, { 0x0EE2, 47383 }, { 0x0EF8, 47386 }, { 0x0F1F, 47389 }, { 0x0F2A, 47392 }, { 0x0F2B, 47395 }, { 0x39E7, 47398 }, { 0x39DF, 47401 }, { 0x39E0, 47404 }, { 0x3A02, 47407 }, { 0x3A01, 47410 }, { 0x0F22, 47413 }, { 0x0F0C, 47416 }, { 0x3A07, 47419 }, { 0x0F04, 47422 }, { 0x3A04, 47425 }, { 0x39ED, 47428 }, { 0x39EB, 47431 }, { 0x0F00, 47434 }, { 0x0F01, 47437 }, { 0x39F8, 47440 }, { 0x39F9, 47443 }, { 0x0F20, 47446 }, { 0x0F1B, 47449 }, { 0x39F3, 47452 }, { 0x0EFA, 47455 }, { 0x39E4, 47458 }, { 0x0F02, 47461 }, { 0x39E1, 47464 }, { 0x0F07, 47467 }, { 0x39DA, 47470 }, { 0x0EF2, 47473 }, { 0x39E2, 47476 }, { 0x0EFF, 47479 }, { 0x39E5, 47482 }, { 0x0EFD, 47485 }, { 0x39F7, 47488 }, { 0x39E3, 47491 }, { 0x39DD, 47494 }, { 0x39F0, 47497 }, { 0x0F03, 47500 }, { 0x39E6, 47503 }, { 0x3A00, 47506 }, { 0x39E8, 47509 }, { 0x0E8F, 47512 }, { 0x0E94, 47515 }, { 0x0EA3, 47518 }, { 0x0E97, 47521 }, { 0x0E9C, 47524 }, { 0x0E90, 47527 }, { 0x0E93, 47530 }, { 0x0EA1, 47533 }, { 0x0E9A, 47536 }, { 0x0E98, 47539 }, { 0x0E9E, 47542 }, { 0x0E9F, 47545 }, { 0x0E91, 47548 }, { 0x0E96, 47551 }, { 0x0EA2, 47554 }, { 0x0E9B, 47557 }, { 0x0EA0, 47560 }, { 0x0EA4, 47563 }, { 0x0EA5, 47566 }, { 0x0EC6, 47569 }, { 0x39D4, 47572 }, { 0x0EC8, 47575 }, { 0x0EC9, 47578 }, { 0x0EAE, 47581 }, { 0x0EB0, 47584 }, { 0x0EB1, 47587 }, { 0x0EB7, 47590 }, { 0x0EBB, 47593 }, { 0x0E99, 47596 }, { 0x0E9D, 47599 }, { 0x0E92, 47602 }, { 0x0E95, 47605 }, { 0x0ED1, 47608 }, { 0x0EA8, 47611 }, { 0x0EA9, 47614 }, { 0x39C9, 47617 }, { 0x39CB, 47620 }, { 0x39CC, 47623 }, { 0x0EC3, 47626 }, { 0x0ECA, 47629 }, { 0x0EC7, 47632 }, { 0x39D0, 47635 }, { 0x39D2, 47638 }, { 0x39D3, 47641 }, { 0x0EAD, 47644 }, { 0x0ED4, 47647 }, { 0x0EAF, 47650 }, { 0x0EB8, 47653 }, { 0x0EBA, 47656 }, { 0x0EA6, 47659 }, { 0x0ED2, 47662 }, { 0x0EC5, 47665 }, { 0x39C2, 47668 }, { 0x0EB6, 47671 }, { 0x0EB5, 47674 }, { 0x0EBC, 47677 }, { 0x0EBE, 47680 }, { 0x0EC2, 47683 }, { 0x39C8, 47686 }, { 0x0EC1, 47689 }, { 0x0ECC, 47692 }, { 0x0EAA, 47695 }, { 0x39CA, 47698 }, { 0x0EC4, 47701 }, { 0x39D1, 47704 }, { 0x39CE, 47707 }, { 0x39CF, 47710 }, { 0x39C1, 47713 }, { 0x0ED5, 47716 }, { 0x39C0, 47719 }, { 0x39C6, 47722 }, { 0x39C5, 47725 }, { 0x0EA7, 47728 }, { 0x0EAB, 47731 }, { 0x0EAC, 47734 }, { 0x39C3, 47737 }, { 0x39C4, 47740 }, { 0x0EB2, 47743 }, { 0x39C7, 47746 }, { 0x0EBD, 47749 }, { 0x0EC0, 47752 }, { 0x0E8E, 47755 }, { 0x39CD, 47758 }, { 0x0ED3, 47761 }, { 0x0EB3, 47764 }, { 0x0EB4, 47767 }, { 0x0EBF, 47770 }, { 0x39D5, 47773 }, { 0x39D6, 47776 }, { 0x0ECF, 47779 }, { 0x0ECE, 47782 }, { 0x0ECB, 47785 }, { 0x0EB9, 47788 }, { 0x0ECD, 47791 }, { 0x0ED0, 47794 }, { 0x4470, 47797 }, { 0x447C, 47800 }, { 0x447B, 47803 }, { 0x4478, 47806 }, { 0x4479, 47809 }, { 0x4480, 47812 }, { 0x4471, 47815 }, { 0x446D, 47818 }, { 0x4473, 47821 }, { 0x4476, 47824 }, { 0x447E, 47827 }, { 0x447F, 47830 }, { 0x4474, 47833 }, { 0x4475, 47836 }, { 0x4472, 47839 }, { 0x446C, 47842 }, { 0x446E, 47845 }, { 0x447D, 47848 }, { 0x4477, 47851 }, { 0x447A, 47854 }, { 0x446F, 47857 }, { 0x4481, 47860 }, { 0x4485, 47863 }, { 0x4483, 47867 }, { 0x4482, 47870 }, { 0x4484, 47873 }, { 0x0573, 47876 }, { 0x0572, 47880 }, { 0x055D, 47884 }, { 0x0570, 47888 }, { 0x056D, 47892 }, { 0x056F, 47895 }, { 0x0560, 47899 }, { 0x055F, 47903 }, { 0x0561, 47907 }, { 0x0562, 47911 }, { 0x0567, 47914 }, { 0x0568, 47917 }, { 0x056B, 47923 }, { 0x0565, 47926 }, { 0x0564, 47929 }, { 0x055E, 47932 }, { 0x0563, 47935 }, { 0x056A, 47938 }, { 0x0566, 47943 }, { 0x0575, 47946 }, { 0x0569, 47950 }, { 0x3A1A, 47953 }, { 0x0559, 47957 }, { 0x055B, 47960 }, { 0x055A, 47963 }, { 0x0550, 47966 }, { 0x0555, 47970 }, { 0x0551, 47973 }, { 0x054F, 47976 }, { 0x0556, 47979 }, { 0x0545, 47982 }, { 0x0540, 47985 }, { 0x0549, 47988 }, { 0x0558, 47991 }, { 0x0548, 47996 }, { 0x0543, 47999 }, { 0x0542, 48003 }, { 0x0546, 48007 }, { 0x055C, 48010 }, { 0x054A, 48013 }, { 0x054B, 48016 }, { 0x0553, 48020 }, { 0x0554, 48023 }, { 0x0547, 48027 }, { 0x054D, 48030 }, { 0x0544, 48034 }, { 0x053F, 48037 }, { 0x054E, 48040 }, { 0x0557, 48044 }, { 0x0552, 48048 }, { 0x054C, 48051 }, { 0x0541, 48054 }, { 0x057A, 48057 }, { 0x3A30, 48060 }, { 0x058A, 48065 }, { 0x3A45, 48068 }, { 0x3A3C, 48073 }, { 0x0577, 48078 }, { 0x3A43, 48081 }, { 0x3A2D, 48086 }, { 0x057D, 48091 }, { 0x0581, 48094 }, { 0x3A44, 48097 }, { 0x3A36, 48102 }, { 0x0584, 48107 }, { 0x3A38, 48110 }, { 0x0586, 48115 }, { 0x3A39, 48118 }, { 0x058D, 48123 }, { 0x3A3E, 48126 }, { 0x0590, 48131 }, { 0x3A41, 48134 }, { 0x057E, 48139 }, { 0x3A33, 48142 }, { 0x057B, 48147 }, { 0x3A42, 48150 }, { 0x3A31, 48155 }, { 0x057F, 48160 }, { 0x3A19, 48163 }, { 0x3A34, 48168 }, { 0x0576, 48173 }, { 0x3A2C, 48176 }, { 0x3A2A, 48181 }, { 0x3A2B, 48186 }, { 0x0588, 48191 }, { 0x058E, 48194 }, { 0x3A3F, 48197 }, { 0x058F, 48202 }, { 0x3A27, 48205 }, { 0x3A26, 48211 }, { 0x3A40, 48217 }, { 0x3A29, 48222 }, { 0x3A28, 48230 }, { 0x3A1F, 48238 }, { 0x3A20, 48242 }, { 0x3A24, 48246 }, { 0x3A1D, 48250 }, { 0x3A23, 48254 }, { 0x3A1E, 48258 }, { 0x3A22, 48262 }, { 0x3A21, 48267 }, { 0x0579, 48271 }, { 0x3A2F, 48274 }, { 0x0589, 48279 }, { 0x3A3B, 48283 }, { 0x0580, 48289 }, { 0x3A35, 48293 }, { 0x0583, 48299 }, { 0x0585, 48303 }, { 0x058B, 48307 }, { 0x0578, 48311 }, { 0x3A2E, 48314 }, { 0x0582, 48319 }, { 0x3A37, 48322 }, { 0x058C, 48327 }, { 0x3A3D, 48330 }, { 0x057C, 48335 }, { 0x3A32, 48338 }, { 0x0587, 48343 }, { 0x3A3A, 48346 }, { 0x3A1C, 48351 }, { 0x3A25, 48355 }, { 0x3A46, 48360 }, { 0x0592, 48364 }, { 0x3A1B, 48369 }, { 0x0591, 48375 }, { 0x0593, 48380 }, { 0x0574, 48385 }, { 0x0571, 48389 }, { 0x056C, 48393 }, { 0x056E, 48396 }, { 0x0594, 48399 }, { 0x0595, 48402 }, { 0x222B, 48405 }, { 0x6FA3, 48409 }, { 0x6FA4, 48413 }, { 0x6F6A, 48420 }, { 0x1BC4, 48422 }, { 0x290D, 48423 }, { 0x1BF7, 48426 }, { 0x1C66, 48428 }, { 0x47FA, 48431 }, { 0x47F9, 48434 }, { 0x47C2, 48437 }, { 0x47C1, 48440 }, { 0x47C0, 48443 }, { 0x4800, 48446 }, { 0x47F5, 48448 }, { 0x47F1, 48452 }, { 0x47F7, 48456 }, { 0x47F3, 48460 }, { 0x47F0, 48464 }, { 0x47F6, 48468 }, { 0x47F8, 48472 }, { 0x47F2, 48476 }, { 0x47F4, 48480 }, { 0x4801, 48484 }, { 0x47FF, 48487 }, { 0x47C3, 48491 }, { 0x47C9, 48494 }, { 0x47C5, 48497 }, { 0x47CB, 48500 }, { 0x47C7, 48503 }, { 0x47C4, 48506 }, { 0x47CA, 48509 }, { 0x47CC, 48512 }, { 0x47E5, 48515 }, { 0x47D2, 48518 }, { 0x47E0, 48521 }, { 0x47CF, 48524 }, { 0x47EF, 48527 }, { 0x47C6, 48530 }, { 0x47D4, 48533 }, { 0x47CD, 48536 }, { 0x47EA, 48539 }, { 0x47E7, 48542 }, { 0x47E2, 48545 }, { 0x47E3, 48548 }, { 0x47E9, 48551 }, { 0x47EE, 48554 }, { 0x47DE, 48557 }, { 0x47C8, 48560 }, { 0x47EB, 48563 }, { 0x47E8, 48566 }, { 0x47E6, 48569 }, { 0x47D3, 48572 }, { 0x47D9, 48575 }, { 0x47E1, 48578 }, { 0x47D0, 48581 }, { 0x47D5, 48584 }, { 0x47CE, 48587 }, { 0x47D1, 48590 }, { 0x47DD, 48593 }, { 0x47D6, 48596 }, { 0x47E4, 48599 }, { 0x47DC, 48602 }, { 0x47EC, 48605 }, { 0x47ED, 48608 }, { 0x47DF, 48611 }, { 0x47D7, 48614 }, { 0x47DB, 48617 }, { 0x47D8, 48620 }, { 0x47DA, 48623 }, { 0x47FD, 48626 }, { 0x47FE, 48629 }, { 0x47FC, 48632 }, { 0x47FB, 48635 }, { 0x29FA, 48638 }, { 0x29CC, 48642 }, { 0x29CD, 48645 }, { 0x2A28, 48649 }, { 0x29EF, 48652 }, { 0x29CF, 48655 }, { 0x29E3, 48658 }, { 0x2A07, 48661 }, { 0x2A08, 48664 }, { 0x29AD, 48667 }, { 0x29DD, 48670 }, { 0x2A2A, 48673 }, { 0x2A62, 48676 }, { 0x2A17, 48679 }, { 0x2A61, 48682 }, { 0x29FC, 48685 }, { 0x29B9, 48688 }, { 0x2A23, 48691 }, { 0x29B2, 48694 }, { 0x29B3, 48697 }, { 0x2A24, 48700 }, { 0x29F1, 48703 }, { 0x2A27, 48706 }, { 0x29AB, 48709 }, { 0x2A42, 48712 }, { 0x29EC, 48715 }, { 0x2A7A, 48718 }, { 0x2A45, 48721 }, { 0x2A46, 48724 }, { 0x29F3, 48727 }, { 0x2A3D, 48730 }, { 0x29F2, 48733 }, { 0x29C2, 48736 }, { 0x29B1, 48739 }, { 0x29E1, 48742 }, { 0x2A0F, 48746 }, { 0x2A41, 48749 }, { 0x2A6E, 48752 }, { 0x2A58, 48755 }, { 0x2A33, 48758 }, { 0x2A48, 48761 }, { 0x2A11, 48764 }, { 0x2A66, 48769 }, { 0x2A49, 48772 }, { 0x2A1E, 48775 }, { 0x2A4D, 48778 }, { 0x29FD, 48781 }, { 0x2A01, 48784 }, { 0x2A70, 48787 }, { 0x2A16, 48790 }, { 0x29E9, 48793 }, { 0x29B7, 48796 }, { 0x2A79, 48800 }, { 0x2A7C, 48803 }, { 0x2A5A, 48806 }, { 0x2A06, 48809 }, { 0x2A00, 48812 }, { 0x2A6D, 48815 }, { 0x2A47, 48818 }, { 0x2A77, 48821 }, { 0x2A53, 48824 }, { 0x2A51, 48827 }, { 0x2A68, 48830 }, { 0x2A04, 48833 }, { 0x29EA, 48838 }, { 0x2A63, 48841 }, { 0x2A72, 48844 }, { 0x29B0, 48847 }, { 0x2A3E, 48850 }, { 0x29D3, 48853 }, { 0x2A0A, 48856 }, { 0x29F6, 48859 }, { 0x29D5, 48862 }, { 0x2A5F, 48865 }, { 0x2A5D, 48868 }, { 0x29B4, 48871 }, { 0x2A0E, 48874 }, { 0x29AC, 48877 }, { 0x2A52, 48880 }, { 0x29E0, 48883 }, { 0x2A2C, 48887 }, { 0x29F4, 48890 }, { 0x2A7B, 48893 }, { 0x29BB, 48896 }, { 0x2A29, 48900 }, { 0x2A57, 48903 }, { 0x2A21, 48906 }, { 0x29D2, 48909 }, { 0x2A6F, 48912 }, { 0x29C4, 48915 }, { 0x2A2E, 48918 }, { 0x2A22, 48921 }, { 0x2A15, 48924 }, { 0x29E6, 48927 }, { 0x29F7, 48930 }, { 0x2A67, 48933 }, { 0x2A0C, 48936 }, { 0x29F5, 48939 }, { 0x2A4C, 48942 }, { 0x2A3A, 48945 }, { 0x2A3C, 48949 }, { 0x2A60, 48952 }, { 0x2A4E, 48955 }, { 0x29DA, 48958 }, { 0x29BE, 48961 }, { 0x29C7, 48964 }, { 0x2A19, 48967 }, { 0x2A75, 48970 }, { 0x2A39, 48973 }, { 0x2A2B, 48976 }, { 0x29D1, 48979 }, { 0x29C5, 48982 }, { 0x2A35, 48985 }, { 0x29B8, 48988 }, { 0x29F8, 48991 }, { 0x29CA, 48994 }, { 0x29B6, 48997 }, { 0x29B5, 49000 }, { 0x2A10, 49003 }, { 0x2A69, 49006 }, { 0x2A80, 49009 }, { 0x2A6C, 49012 }, { 0x2A1D, 49015 }, { 0x2A36, 49018 }, { 0x29E7, 49021 }, { 0x2A65, 49024 }, { 0x29BC, 49027 }, { 0x2A0B, 49030 }, { 0x2A54, 49033 }, { 0x29C8, 49036 }, { 0x29BD, 49039 }, { 0x29C0, 49042 }, { 0x29D9, 49047 }, { 0x2A25, 49050 }, { 0x2A44, 49053 }, { 0x29E2, 49056 }, { 0x2A56, 49059 }, { 0x29DE, 49064 }, { 0x29AE, 49068 }, { 0x2A55, 49071 }, { 0x2A05, 49074 }, { 0x29D4, 49077 }, { 0x29E4, 49080 }, { 0x2A5E, 49083 }, { 0x2A18, 49086 }, { 0x29BF, 49089 }, { 0x2A1F, 49092 }, { 0x29FE, 49095 }, { 0x2A1A, 49098 }, { 0x2A0D, 49101 }, { 0x29BA, 49104 }, { 0x2A37, 49107 }, { 0x2A7D, 49110 }, { 0x2A1C, 49113 }, { 0x29FF, 49116 }, { 0x2A71, 49119 }, { 0x2A14, 49122 }, { 0x29D0, 49125 }, { 0x2A59, 49128 }, { 0x2A2F, 49131 }, { 0x2A43, 49134 }, { 0x2A20, 49137 }, { 0x2A4A, 49140 }, { 0x29EB, 49143 }, { 0x29D6, 49146 }, { 0x29EE, 49149 }, { 0x2A13, 49152 }, { 0x29DF, 49156 }, { 0x2A03, 49160 }, { 0x2A7E, 49164 }, { 0x2A02, 49167 }, { 0x29C1, 49170 }, { 0x2A38, 49174 }, { 0x2A74, 49177 }, { 0x2A30, 49180 }, { 0x2A32, 49183 }, { 0x29ED, 49186 }, { 0x29AF, 49189 }, { 0x2A3F, 49192 }, { 0x2A1B, 49195 }, { 0x29D7, 49198 }, { 0x29F0, 49201 }, { 0x2A5C, 49204 }, { 0x2A31, 49208 }, { 0x2A78, 49211 }, { 0x29DC, 49214 }, { 0x2A7F, 49217 }, { 0x2A40, 49220 }, { 0x29F9, 49223 }, { 0x2A73, 49226 }, { 0x29E5, 49229 }, { 0x2A3B, 49232 }, { 0x29FB, 49235 }, { 0x29CE, 49238 }, { 0x2A26, 49241 }, { 0x29E8, 49244 }, { 0x2A5B, 49247 }, { 0x2A4B, 49250 }, { 0x29DB, 49253 }, { 0x29C6, 49256 }, { 0x29CB, 49259 }, { 0x2A50, 49262 }, { 0x2A6B, 49265 }, { 0x2A64, 49268 }, { 0x2A2D, 49271 }, { 0x29D8, 49274 }, { 0x2A09, 49277 }, { 0x2A12, 49280 }, { 0x2A34, 49283 }, { 0x29C9, 49286 }, { 0x29C3, 49289 }, { 0x2A76, 49292 }, { 0x2A4F, 49295 }, { 0x2A6A, 49298 }, { 0x1CB7, 49302 }, { 0x6E5A, 49304 }, { 0x4936, 49306 }, { 0x493E, 49309 }, { 0x4937, 49312 }, { 0x4935, 49315 }, { 0x4934, 49318 }, { 0x493A, 49321 }, { 0x4938, 49324 }, { 0x4930, 49326 }, { 0x492D, 49330 }, { 0x4932, 49334 }, { 0x492F, 49338 }, { 0x492C, 49342 }, { 0x4931, 49346 }, { 0x4933, 49350 }, { 0x492E, 49354 }, { 0x4939, 49358 }, { 0x493C, 49361 }, { 0x4901, 49365 }, { 0x4905, 49368 }, { 0x4903, 49371 }, { 0x4907, 49374 }, { 0x4904, 49377 }, { 0x4902, 49380 }, { 0x4906, 49383 }, { 0x4908, 49386 }, { 0x4921, 49389 }, { 0x490F, 49392 }, { 0x491B, 49395 }, { 0x490B, 49398 }, { 0x492A, 49401 }, { 0x4911, 49404 }, { 0x4909, 49407 }, { 0x4927, 49410 }, { 0x4924, 49413 }, { 0x491E, 49416 }, { 0x491F, 49419 }, { 0x4926, 49422 }, { 0x4929, 49425 }, { 0x4919, 49428 }, { 0x4928, 49431 }, { 0x4925, 49434 }, { 0x4922, 49437 }, { 0x4923, 49440 }, { 0x4910, 49443 }, { 0x4916, 49446 }, { 0x491D, 49449 }, { 0x490C, 49452 }, { 0x490D, 49455 }, { 0x4912, 49458 }, { 0x490A, 49461 }, { 0x492B, 49464 }, { 0x490E, 49467 }, { 0x4918, 49470 }, { 0x4913, 49473 }, { 0x4920, 49476 }, { 0x491A, 49479 }, { 0x4914, 49482 }, { 0x491C, 49485 }, { 0x4917, 49488 }, { 0x4915, 49491 }, { 0x493B, 49494 }, { 0x493D, 49497 }, { 0x6D93, 49500 }, { 0x2CEE, 49501 }, { 0x2605, 49504 }, { 0x2607, 49506 }, { 0x6E0D, 49511 }, { 0x1852, 49512 }, { 0x1853, 49515 }, { 0x185A, 49518 }, { 0x185F, 49521 }, { 0x185B, 49524 }, { 0x185E, 49527 }, { 0x185D, 49530 }, { 0x1862, 49533 }, { 0x1859, 49536 }, { 0x1861, 49539 }, { 0x1860, 49542 }, { 0x185C, 49545 }, { 0x1848, 49548 }, { 0x1843, 49552 }, { 0x1844, 49556 }, { 0x1846, 49560 }, { 0x1842, 49564 }, { 0x1845, 49568 }, { 0x1847, 49572 }, { 0x183F, 49576 }, { 0x182F, 49579 }, { 0x1822, 49582 }, { 0x1828, 49585 }, { 0x182D, 49588 }, { 0x181F, 49591 }, { 0x1839, 49594 }, { 0x1824, 49597 }, { 0x181C, 49600 }, { 0x1838, 49603 }, { 0x1831, 49606 }, { 0x1829, 49609 }, { 0x182A, 49612 }, { 0x1837, 49615 }, { 0x183C, 49618 }, { 0x1826, 49621 }, { 0x183B, 49624 }, { 0x183E, 49627 }, { 0x1836, 49630 }, { 0x1830, 49633 }, { 0x1823, 49636 }, { 0x1865, 49639 }, { 0x1835, 49642 }, { 0x182E, 49645 }, { 0x1820, 49648 }, { 0x183A, 49651 }, { 0x181E, 49654 }, { 0x181D, 49657 }, { 0x1832, 49660 }, { 0x1821, 49663 }, { 0x1825, 49666 }, { 0x182C, 49669 }, { 0x182B, 49672 }, { 0x183D, 49675 }, { 0x1827, 49678 }, { 0x1833, 49681 }, { 0x1863, 49684 }, { 0x1834, 49687 }, { 0x1864, 49690 }, { 0x1849, 49693 }, { 0x184B, 49697 }, { 0x184A, 49701 }, { 0x184C, 49705 }, { 0x184D, 49709 }, { 0x184E, 49713 }, { 0x184F, 49717 }, { 0x1851, 49721 }, { 0x1850, 49725 }, { 0x1841, 49729 }, { 0x1840, 49733 }, { 0x1855, 49737 }, { 0x1856, 49742 }, { 0x1854, 49745 }, { 0x1858, 49748 }, { 0x1857, 49751 }, { 0x42CE, 49755 }, { 0x42CF, 49759 }, { 0x42D0, 49763 }, { 0x42D1, 49767 }, { 0x42D2, 49771 }, { 0x42D3, 49775 }, { 0x42D4, 49779 }, { 0x42D5, 49783 }, { 0x42D9, 49787 }, { 0x42DA, 49791 }, { 0x42DB, 49795 }, { 0x42DF, 49799 }, { 0x42E0, 49803 }, { 0x42E1, 49807 }, { 0x42E2, 49811 }, { 0x42E3, 49815 }, { 0x42E4, 49819 }, { 0x42E5, 49823 }, { 0x42E6, 49827 }, { 0x42E7, 49831 }, { 0x42E8, 49835 }, { 0x42E9, 49839 }, { 0x42EA, 49843 }, { 0x42EB, 49847 }, { 0x42EC, 49851 }, { 0x42ED, 49855 }, { 0x42EE, 49859 }, { 0x42EF, 49863 }, { 0x42F0, 49867 }, { 0x42F1, 49871 }, { 0x42F2, 49875 }, { 0x42F3, 49879 }, { 0x42F4, 49883 }, { 0x42F5, 49887 }, { 0x42F6, 49891 }, { 0x42F7, 49895 }, { 0x42F8, 49899 }, { 0x42F9, 49903 }, { 0x42FA, 49907 }, { 0x42FB, 49911 }, { 0x42FC, 49915 }, { 0x42FD, 49919 }, { 0x42FE, 49923 }, { 0x42FF, 49927 }, { 0x4300, 49931 }, { 0x4301, 49935 }, { 0x4302, 49939 }, { 0x4303, 49943 }, { 0x4304, 49947 }, { 0x4305, 49951 }, { 0x4306, 49955 }, { 0x4307, 49959 }, { 0x4308, 49963 }, { 0x4309, 49967 }, { 0x430A, 49971 }, { 0x430B, 49975 }, { 0x430C, 49979 }, { 0x430D, 49983 }, { 0x430E, 49987 }, { 0x430F, 49991 }, { 0x4310, 49995 }, { 0x4311, 49999 }, { 0x4312, 50003 }, { 0x4313, 50007 }, { 0x4314, 50011 }, { 0x4315, 50015 }, { 0x4316, 50019 }, { 0x4317, 50023 }, { 0x4318, 50027 }, { 0x432C, 50031 }, { 0x432D, 50035 }, { 0x432E, 50039 }, { 0x432F, 50043 }, { 0x4330, 50047 }, { 0x4331, 50051 }, { 0x4332, 50055 }, { 0x4333, 50059 }, { 0x4334, 50063 }, { 0x4335, 50067 }, { 0x4336, 50071 }, { 0x4337, 50075 }, { 0x4338, 50079 }, { 0x4339, 50083 }, { 0x433A, 50087 }, { 0x433B, 50091 }, { 0x433C, 50095 }, { 0x433D, 50099 }, { 0x433E, 50103 }, { 0x433F, 50107 }, { 0x4340, 50111 }, { 0x4341, 50115 }, { 0x4342, 50119 }, { 0x4343, 50123 }, { 0x4344, 50127 }, { 0x4345, 50131 }, { 0x4346, 50135 }, { 0x4347, 50139 }, { 0x4348, 50143 }, { 0x4349, 50147 }, { 0x434A, 50151 }, { 0x434B, 50155 }, { 0x434C, 50159 }, { 0x434D, 50163 }, { 0x434E, 50167 }, { 0x434F, 50171 }, { 0x4350, 50175 }, { 0x4351, 50179 }, { 0x4352, 50183 }, { 0x4353, 50187 }, { 0x4354, 50191 }, { 0x4355, 50195 }, { 0x4356, 50199 }, { 0x4357, 50203 }, { 0x4358, 50207 }, { 0x4359, 50211 }, { 0x435A, 50215 }, { 0x435B, 50219 }, { 0x435C, 50223 }, { 0x435D, 50227 }, { 0x435E, 50231 }, { 0x435F, 50235 }, { 0x4360, 50239 }, { 0x4361, 50243 }, { 0x4362, 50247 }, { 0x4363, 50251 }, { 0x4364, 50255 }, { 0x4365, 50259 }, { 0x4366, 50263 }, { 0x4367, 50267 }, { 0x4368, 50271 }, { 0x4369, 50275 }, { 0x436A, 50279 }, { 0x436B, 50283 }, { 0x436C, 50287 }, { 0x436D, 50291 }, { 0x436E, 50295 }, { 0x436F, 50299 }, { 0x4370, 50303 }, { 0x4371, 50307 }, { 0x4372, 50311 }, { 0x4373, 50315 }, { 0x4374, 50319 }, { 0x4375, 50323 }, { 0x4376, 50327 }, { 0x4377, 50331 }, { 0x4378, 50335 }, { 0x4379, 50339 }, { 0x437A, 50343 }, { 0x437B, 50347 }, { 0x437C, 50351 }, { 0x437D, 50355 }, { 0x437E, 50359 }, { 0x437F, 50363 }, { 0x4380, 50367 }, { 0x4381, 50371 }, { 0x4382, 50375 }, { 0x4383, 50379 }, { 0x4384, 50383 }, { 0x4385, 50387 }, { 0x4386, 50391 }, { 0x4387, 50395 }, { 0x4388, 50399 }, { 0x4389, 50403 }, { 0x438A, 50407 }, { 0x438B, 50411 }, { 0x438C, 50415 }, { 0x438D, 50419 }, { 0x438E, 50423 }, { 0x438F, 50427 }, { 0x4390, 50431 }, { 0x4391, 50435 }, { 0x4392, 50439 }, { 0x4393, 50443 }, { 0x4394, 50447 }, { 0x4395, 50451 }, { 0x4396, 50455 }, { 0x4397, 50459 }, { 0x4398, 50463 }, { 0x4399, 50467 }, { 0x439A, 50471 }, { 0x439B, 50475 }, { 0x439C, 50479 }, { 0x439D, 50483 }, { 0x439E, 50487 }, { 0x439F, 50491 }, { 0x43A0, 50495 }, { 0x43A1, 50499 }, { 0x43A2, 50503 }, { 0x43A3, 50507 }, { 0x43A4, 50511 }, { 0x43A5, 50515 }, { 0x43A6, 50519 }, { 0x43A7, 50523 }, { 0x43A8, 50527 }, { 0x43A9, 50531 }, { 0x43AA, 50535 }, { 0x43AB, 50539 }, { 0x43AC, 50543 }, { 0x43AD, 50547 }, { 0x43AE, 50551 }, { 0x43AF, 50555 }, { 0x43B0, 50559 }, { 0x43B1, 50564 }, { 0x43B2, 50569 }, { 0x43B3, 50574 }, { 0x43B4, 50579 }, { 0x43B5, 50584 }, { 0x43B6, 50589 }, { 0x43B7, 50594 }, { 0x43B8, 50599 }, { 0x43BD, 50604 }, { 0x43BE, 50609 }, { 0x43BF, 50614 }, { 0x43C0, 50619 }, { 0x43C1, 50624 }, { 0x43C2, 50629 }, { 0x43C3, 50634 }, { 0x43C4, 50639 }, { 0x43C5, 50644 }, { 0x43C6, 50649 }, { 0x43C7, 50653 }, { 0x43C8, 50657 }, { 0x43C9, 50661 }, { 0x43CA, 50665 }, { 0x43CB, 50669 }, { 0x43CC, 50673 }, { 0x43CD, 50677 }, { 0x4294, 50681 }, { 0x42C3, 50685 }, { 0x42C8, 50689 }, { 0x42D6, 50693 }, { 0x42D7, 50697 }, { 0x42D8, 50701 }, { 0x42DC, 50705 }, { 0x42DD, 50709 }, { 0x42DE, 50713 }, { 0x4279, 50717 }, { 0x427A, 50721 }, { 0x427B, 50725 }, { 0x427C, 50729 }, { 0x427D, 50733 }, { 0x427E, 50737 }, { 0x427F, 50741 }, { 0x4280, 50745 }, { 0x4281, 50749 }, { 0x4282, 50753 }, { 0x4283, 50757 }, { 0x4284, 50761 }, { 0x4285, 50765 }, { 0x4286, 50769 }, { 0x4287, 50773 }, { 0x4288, 50777 }, { 0x428B, 50781 }, { 0x428E, 50785 }, { 0x4290, 50789 }, { 0x4291, 50793 }, { 0x4292, 50797 }, { 0x4293, 50801 }, { 0x4295, 50805 }, { 0x4296, 50809 }, { 0x4297, 50813 }, { 0x4298, 50817 }, { 0x4299, 50821 }, { 0x429A, 50825 }, { 0x429B, 50829 }, { 0x429C, 50833 }, { 0x429D, 50837 }, { 0x429E, 50841 }, { 0x429F, 50845 }, { 0x42A0, 50849 }, { 0x42A1, 50853 }, { 0x42A2, 50857 }, { 0x42A3, 50861 }, { 0x42A4, 50865 }, { 0x42A5, 50869 }, { 0x42A6, 50873 }, { 0x42A7, 50877 }, { 0x42A8, 50881 }, { 0x42A9, 50885 }, { 0x42AA, 50889 }, { 0x42AB, 50893 }, { 0x42AC, 50897 }, { 0x42AD, 50901 }, { 0x42AE, 50905 }, { 0x42AF, 50909 }, { 0x42B0, 50913 }, { 0x42B1, 50917 }, { 0x42B2, 50921 }, { 0x42B3, 50925 }, { 0x42B4, 50929 }, { 0x42B5, 50933 }, { 0x42B6, 50937 }, { 0x42B7, 50941 }, { 0x42B8, 50945 }, { 0x42B9, 50949 }, { 0x42BA, 50953 }, { 0x42BB, 50957 }, { 0x42BC, 50961 }, { 0x42BD, 50965 }, { 0x42BE, 50969 }, { 0x42BF, 50973 }, { 0x42C1, 50977 }, { 0x42C2, 50981 }, { 0x42C4, 50985 }, { 0x42C5, 50989 }, { 0x42C9, 50993 }, { 0x42CA, 50997 }, { 0x42CB, 51001 }, { 0x42CC, 51005 }, { 0x42CD, 51009 }, { 0x43B9, 51013 }, { 0x43BA, 51018 }, { 0x43BB, 51023 }, { 0x43BC, 51028 }, { 0x4289, 51033 }, { 0x428A, 51037 }, { 0x428C, 51041 }, { 0x428D, 51045 }, { 0x428F, 51049 }, { 0x42C6, 51053 }, { 0x42C7, 51057 }, { 0x42C0, 51061 }, { 0x4319, 51065 }, { 0x431A, 51069 }, { 0x431B, 51073 }, { 0x431C, 51077 }, { 0x431D, 51081 }, { 0x431E, 51085 }, { 0x431F, 51089 }, { 0x4320, 51093 }, { 0x4321, 51097 }, { 0x4322, 51101 }, { 0x4323, 51105 }, { 0x4324, 51109 }, { 0x4325, 51113 }, { 0x4326, 51117 }, { 0x4327, 51121 }, { 0x4328, 51125 }, { 0x4329, 51129 }, { 0x432A, 51133 }, { 0x432B, 51137 }, { 0x3EBB, 51141 }, { 0x3EBC, 51145 }, { 0x3EBD, 51149 }, { 0x3EBE, 51153 }, { 0x3EBF, 51157 }, { 0x3EC0, 51161 }, { 0x3EC1, 51165 }, { 0x3EC2, 51169 }, { 0x3EC3, 51173 }, { 0x3EC4, 51177 }, { 0x3EC5, 51181 }, { 0x3EC6, 51185 }, { 0x3EC7, 51189 }, { 0x3EC8, 51193 }, { 0x3EC9, 51197 }, { 0x3ECA, 51202 }, { 0x3ECB, 51207 }, { 0x3ECC, 51212 }, { 0x3ED7, 51217 }, { 0x3ED8, 51222 }, { 0x3ED9, 51227 }, { 0x3EDA, 51232 }, { 0x3EDB, 51237 }, { 0x3EDE, 51242 }, { 0x3EDF, 51247 }, { 0x3EE0, 51252 }, { 0x3EE3, 51256 }, { 0x3EE4, 51261 }, { 0x3EE5, 51266 }, { 0x3EE6, 51270 }, { 0x3EE7, 51275 }, { 0x3EE8, 51279 }, { 0x3EE9, 51283 }, { 0x3EEA, 51288 }, { 0x3EEB, 51292 }, { 0x3EEC, 51296 }, { 0x3EEE, 51300 }, { 0x3EEF, 51304 }, { 0x3EF0, 51308 }, { 0x3EF1, 51313 }, { 0x3EF2, 51317 }, { 0x3EF3, 51321 }, { 0x3EF4, 51326 }, { 0x3EF5, 51331 }, { 0x3EF6, 51335 }, { 0x3EF7, 51339 }, { 0x3EF8, 51343 }, { 0x3EF9, 51347 }, { 0x3EFA, 51351 }, { 0x3EFB, 51355 }, { 0x3EFC, 51359 }, { 0x3EFD, 51363 }, { 0x3EFE, 51367 }, { 0x3EFF, 51372 }, { 0x3F00, 51376 }, { 0x3F01, 51381 }, { 0x3F02, 51385 }, { 0x3F03, 51389 }, { 0x3F04, 51393 }, { 0x3F05, 51397 }, { 0x3F06, 51401 }, { 0x3F07, 51405 }, { 0x3F08, 51409 }, { 0x3F09, 51413 }, { 0x3F0A, 51417 }, { 0x3F0B, 51421 }, { 0x3F0C, 51425 }, { 0x3F0D, 51430 }, { 0x3F0E, 51435 }, { 0x3F0F, 51440 }, { 0x3F10, 51445 }, { 0x3F11, 51450 }, { 0x3F12, 51454 }, { 0x3F13, 51459 }, { 0x3F14, 51463 }, { 0x3F15, 51467 }, { 0x3F16, 51473 }, { 0x3F17, 51478 }, { 0x3F18, 51484 }, { 0x3F19, 51489 }, { 0x3F1A, 51493 }, { 0x3F1C, 51497 }, { 0x3F1D, 51501 }, { 0x3F1E, 51505 }, { 0x3F1F, 51509 }, { 0x3F20, 51513 }, { 0x3F21, 51517 }, { 0x3F22, 51522 }, { 0x3F23, 51526 }, { 0x3F24, 51530 }, { 0x3F25, 51534 }, { 0x3F26, 51538 }, { 0x3ECD, 51542 }, { 0x3ECE, 51547 }, { 0x3ECF, 51552 }, { 0x3ED0, 51557 }, { 0x3ED1, 51562 }, { 0x3ED2, 51567 }, { 0x3ED3, 51572 }, { 0x3ED4, 51577 }, { 0x3ED5, 51582 }, { 0x3ED6, 51587 }, { 0x3F27, 51592 }, { 0x3F28, 51597 }, { 0x3F29, 51602 }, { 0x3F2A, 51607 }, { 0x3F2B, 51612 }, { 0x3F2C, 51617 }, { 0x3F2D, 51622 }, { 0x3F2E, 51627 }, { 0x3F2F, 51632 }, { 0x3F30, 51637 }, { 0x3F31, 51642 }, { 0x3F32, 51647 }, { 0x3F33, 51652 }, { 0x3F34, 51657 }, { 0x3F35, 51662 }, { 0x3F36, 51667 }, { 0x3F37, 51672 }, { 0x3F38, 51677 }, { 0x3F39, 51682 }, { 0x3F3A, 51687 }, { 0x3F3B, 51692 }, { 0x3F3C, 51697 }, { 0x3F3D, 51702 }, { 0x3F3E, 51707 }, { 0x3F3F, 51712 }, { 0x3F40, 51717 }, { 0x3F41, 51722 }, { 0x3F42, 51727 }, { 0x3F43, 51732 }, { 0x3EDC, 51737 }, { 0x3EDD, 51742 }, { 0x3EE1, 51747 }, { 0x3EE2, 51752 }, { 0x3EED, 51757 }, { 0x3F1B, 51762 }, { 0x3E76, 51767 }, { 0x3E9A, 51772 }, { 0x3E8E, 51777 }, { 0x3EA2, 51782 }, { 0x3EA4, 51787 }, { 0x3E89, 51792 }, { 0x3E78, 51797 }, { 0x3E71, 51802 }, { 0x3E9D, 51807 }, { 0x3E75, 51812 }, { 0x3E91, 51817 }, { 0x3E9F, 51822 }, { 0x3E85, 51827 }, { 0x3E79, 51832 }, { 0x3E87, 51837 }, { 0x3E93, 51842 }, { 0x3EAA, 51847 }, { 0x3EAC, 51852 }, { 0x3E95, 51857 }, { 0x3E88, 51862 }, { 0x3E8A, 51867 }, { 0x3EAD, 51872 }, { 0x3E9B, 51877 }, { 0x3E98, 51882 }, { 0x3E73, 51887 }, { 0x3EB3, 51892 }, { 0x3E8B, 51897 }, { 0x3E9C, 51902 }, { 0x3E96, 51907 }, { 0x3EB6, 51912 }, { 0x3E7D, 51917 }, { 0x3EA3, 51922 }, { 0x3E72, 51927 }, { 0x3E90, 51932 }, { 0x3EA8, 51937 }, { 0x3E9E, 51942 }, { 0x3EA9, 51947 }, { 0x3EAE, 51952 }, { 0x3E80, 51957 }, { 0x3E77, 51962 }, { 0x3E7C, 51967 }, { 0x3EB2, 51972 }, { 0x3E92, 51977 }, { 0x3E7A, 51982 }, { 0x3E8C, 51987 }, { 0x3E99, 51992 }, { 0x3EA6, 51997 }, { 0x3E8D, 52002 }, { 0x3E7B, 52007 }, { 0x3EA0, 52012 }, { 0x3EA1, 52017 }, { 0x3E97, 52022 }, { 0x3E74, 52027 }, { 0x3EB4, 52032 }, { 0x3E7E, 52037 }, { 0x3EB8, 52042 }, { 0x3E81, 52047 }, { 0x3EB7, 52052 }, { 0x3EA5, 52057 }, { 0x3E82, 52062 }, { 0x3EB0, 52067 }, { 0x3E8F, 52072 }, { 0x3E86, 52077 }, { 0x3EAB, 52082 }, { 0x3EA7, 52087 }, { 0x3EB5, 52092 }, { 0x3E7F, 52097 }, { 0x3E94, 52102 }, { 0x3E84, 52107 }, { 0x3E83, 52112 }, { 0x3EAF, 52117 }, { 0x3EB9, 52122 }, { 0x3EB1, 52127 }, { 0x3EBA, 52132 }, { 0x6EC2, 52137 }, { 0x71CC, 52139 }, { 0x6F68, 52140 }, { 0x4007, 52143 }, { 0x4009, 52146 }, { 0x400C, 52149 }, { 0x4008, 52152 }, { 0x400B, 52155 }, { 0x4022, 52158 }, { 0x400D, 52161 }, { 0x4011, 52164 }, { 0x4012, 52167 }, { 0x4014, 52170 }, { 0x4015, 52173 }, { 0x4016, 52176 }, { 0x401A, 52179 }, { 0x4013, 52182 }, { 0x401C, 52185 }, { 0x401D, 52188 }, { 0x401E, 52191 }, { 0x4019, 52194 }, { 0x400E, 52197 }, { 0x4023, 52200 }, { 0x400F, 52203 }, { 0x4020, 52206 }, { 0x400A, 52209 }, { 0x4021, 52212 }, { 0x401B, 52215 }, { 0x4017, 52218 }, { 0x4018, 52221 }, { 0x4010, 52224 }, { 0x401F, 52227 }, { 0x44A3, 52230 }, { 0x44A4, 52233 }, { 0x44BC, 52236 }, { 0x44A6, 52239 }, { 0x44A7, 52242 }, { 0x44B4, 52245 }, { 0x44A5, 52248 }, { 0x44A9, 52251 }, { 0x44AB, 52254 }, { 0x44AC, 52257 }, { 0x44AD, 52260 }, { 0x44AE, 52263 }, { 0x44AF, 52266 }, { 0x44B5, 52269 }, { 0x44B0, 52272 }, { 0x44B6, 52275 }, { 0x44B2, 52278 }, { 0x44B3, 52281 }, { 0x44A8, 52284 }, { 0x44AA, 52287 }, { 0x44B8, 52290 }, { 0x44B9, 52293 }, { 0x44BA, 52296 }, { 0x44BB, 52299 }, { 0x44B1, 52302 }, { 0x44B7, 52305 }, { 0x44BD, 52308 }, { 0x006E, 52311 }, { 0x70CC, 52312 }, { 0x70E1, 52316 }, { 0x709B, 52321 }, { 0x70C6, 52325 }, { 0x70DB, 52329 }, { 0x70DD, 52334 }, { 0x22CE, 52339 }, { 0x22C2, 52344 }, { 0x2205, 52348 }, { 0x70D2, 52351 }, { 0x70E4, 52355 }, { 0x70B9, 52360 }, { 0x22CF, 52363 }, { 0x22C3, 52368 }, { 0x20EC, 52372 }, { 0x2206, 52374 }, { 0x70D7, 52378 }, { 0x70D9, 52383 }, { 0x2204, 52388 }, { 0x70A5, 52391 }, { 0x70C0, 52394 }, { 0x22B3, 52396 }, { 0x22C4, 52399 }, { 0x22C5, 52404 }, { 0x1C13, 52409 }, { 0x22C6, 52412 }, { 0x22C7, 52417 }, { 0x39B4, 52422 }, { 0x38DD, 52426 }, { 0x39B5, 52429 }, { 0x38DF, 52433 }, { 0x38DC, 52438 }, { 0x39B7, 52442 }, { 0x39BC, 52446 }, { 0x39B8, 52450 }, { 0x39BB, 52454 }, { 0x39BA, 52458 }, { 0x39BF, 52462 }, { 0x39B6, 52466 }, { 0x39BE, 52470 }, { 0x39BD, 52474 }, { 0x39B9, 52478 }, { 0x38D9, 52482 }, { 0x38D6, 52487 }, { 0x38D7, 52492 }, { 0x38D8, 52497 }, { 0x38DA, 52502 }, { 0x39AD, 52507 }, { 0x39AC, 52512 }, { 0x39B2, 52517 }, { 0x39AB, 52522 }, { 0x39B0, 52527 }, { 0x39AE, 52532 }, { 0x39AF, 52537 }, { 0x39B1, 52542 }, { 0x38E0, 52547 }, { 0x38CB, 52552 }, { 0x3997, 52556 }, { 0x39AA, 52560 }, { 0x38CC, 52565 }, { 0x399D, 52569 }, { 0x398D, 52573 }, { 0x39A7, 52577 }, { 0x398C, 52582 }, { 0x39A6, 52586 }, { 0x3996, 52591 }, { 0x38CD, 52595 }, { 0x38D1, 52599 }, { 0x399F, 52603 }, { 0x399A, 52607 }, { 0x3995, 52611 }, { 0x399E, 52615 }, { 0x3988, 52619 }, { 0x39A3, 52623 }, { 0x398A, 52628 }, { 0x39A4, 52632 }, { 0x398B, 52637 }, { 0x39A5, 52641 }, { 0x38D3, 52646 }, { 0x38CE, 52650 }, { 0x399C, 52654 }, { 0x3989, 52658 }, { 0x38D4, 52662 }, { 0x38D5, 52666 }, { 0x398F, 52670 }, { 0x39A8, 52674 }, { 0x38CF, 52679 }, { 0x3993, 52683 }, { 0x39A2, 52687 }, { 0x398E, 52691 }, { 0x38D2, 52695 }, { 0x39A1, 52699 }, { 0x39A0, 52703 }, { 0x399B, 52707 }, { 0x3990, 52711 }, { 0x3991, 52715 }, { 0x39A9, 52719 }, { 0x3998, 52724 }, { 0x3992, 52728 }, { 0x38D0, 52732 }, { 0x3994, 52736 }, { 0x3999, 52740 }, { 0x38E1, 52744 }, { 0x38DB, 52747 }, { 0x39B3, 52750 }, { 0x38DE, 52753 }, { 0x0076, 52758 }, { 0x6E2C, 52760 }, { 0x6E2F, 52762 }, { 0x6E2D, 52765 }, { 0x1E30, 52772 }, { 0x719F, 52773 }, { 0x2564, 52775 }, { 0x6D4D, 52778 }, { 0x6D70, 52779 }, { 0x6E87, 52781 }, { 0x719A, 52782 }, { 0x1BE3, 52784 }, { 0x220C, 52787 }, { 0x1C68, 52788 }, { 0x1E3B, 52791 }, { 0x1E3D, 52794 }, { 0x1FEB, 52800 }, { 0x0003, 52804 }, { 0x1FEC, 52806 }, { 0x1FED, 52810 }, { 0x1FF5, 52814 }, { 0x1FF0, 52818 }, { 0x1FF1, 52822 }, { 0x1FF3, 52826 }, { 0x1FEF, 52830 }, { 0x1FF4, 52834 }, { 0x1FEE, 52838 }, { 0x1FF2, 52842 }, { 0x1CA3, 52846 }, { 0x3E6F, 52848 }, { 0x6D1D, 52851 }, { 0x029A, 52853 }, { 0x1EAE, 52854 }, { 0x6E14, 52856 }, { 0x3C24, 52858 }, { 0x3C25, 52861 }, { 0x6E1F, 52864 }, { 0x5B5C, 52866 }, { 0x5B5A, 52871 }, { 0x5B53, 52876 }, { 0x5B5F, 52881 }, { 0x5B50, 52886 }, { 0x5B5B, 52891 }, { 0x5B60, 52896 }, { 0x5B5D, 52901 }, { 0x5B54, 52906 }, { 0x5B59, 52911 }, { 0x5B51, 52916 }, { 0x5B55, 52921 }, { 0x5B58, 52926 }, { 0x5B56, 52931 }, { 0x5B57, 52936 }, { 0x5B5E, 52941 }, { 0x5B4F, 52946 }, { 0x5B52, 52951 }, { 0x5B4E, 52956 }, { 0x5B13, 52961 }, { 0x5B17, 52966 }, { 0x5B14, 52971 }, { 0x5B12, 52976 }, { 0x5B15, 52981 }, { 0x5B16, 52986 }, { 0x5B18, 52991 }, { 0x5B42, 52996 }, { 0x5B25, 53000 }, { 0x5B4C, 53005 }, { 0x5B49, 53011 }, { 0x5B48, 53017 }, { 0x5B4D, 53025 }, { 0x5B27, 53031 }, { 0x5B4A, 53037 }, { 0x5B4B, 53042 }, { 0x5B1B, 53048 }, { 0x5B3B, 53053 }, { 0x5B46, 53057 }, { 0x5B47, 53061 }, { 0x5B45, 53065 }, { 0x5B39, 53069 }, { 0x5B1D, 53074 }, { 0x5B24, 53079 }, { 0x5B22, 53084 }, { 0x5B19, 53089 }, { 0x5B1C, 53094 }, { 0x5B1A, 53099 }, { 0x5B3D, 53105 }, { 0x5B3E, 53110 }, { 0x5B23, 53114 }, { 0x5B44, 53119 }, { 0x5B3F, 53124 }, { 0x5B41, 53128 }, { 0x5B26, 53132 }, { 0x5B40, 53136 }, { 0x5B3A, 53140 }, { 0x5B1F, 53144 }, { 0x5B20, 53149 }, { 0x5B21, 53154 }, { 0x5B1E, 53159 }, { 0x5B43, 53164 }, { 0x5B3C, 53169 }, { 0x5B29, 53174 }, { 0x5B2E, 53178 }, { 0x5B2A, 53182 }, { 0x5B2D, 53186 }, { 0x5B2C, 53190 }, { 0x5B31, 53194 }, { 0x5B28, 53198 }, { 0x5B30, 53202 }, { 0x5B2F, 53206 }, { 0x5B2B, 53210 }, { 0x5AF8, 53214 }, { 0x5AF9, 53218 }, { 0x5AEA, 53222 }, { 0x5AEB, 53226 }, { 0x5AE4, 53230 }, { 0x5AE5, 53234 }, { 0x5AF4, 53238 }, { 0x5AF5, 53242 }, { 0x5AE8, 53246 }, { 0x5AE9, 53250 }, { 0x5AFA, 53254 }, { 0x5AFB, 53258 }, { 0x5AFC, 53262 }, { 0x5AFD, 53266 }, { 0x5AEC, 53270 }, { 0x5AED, 53274 }, { 0x5AE6, 53278 }, { 0x5AE7, 53282 }, { 0x5AF0, 53286 }, { 0x5AF1, 53290 }, { 0x5AE2, 53294 }, { 0x5AE3, 53298 }, { 0x5AF6, 53302 }, { 0x5AF7, 53306 }, { 0x5AEE, 53310 }, { 0x5AEF, 53314 }, { 0x5AF2, 53318 }, { 0x5AF3, 53322 }, { 0x5B37, 53326 }, { 0x5B34, 53331 }, { 0x5B32, 53336 }, { 0x5B36, 53340 }, { 0x5B33, 53345 }, { 0x5B35, 53349 }, { 0x5B38, 53353 }, { 0x5B0F, 53357 }, { 0x5B11, 53361 }, { 0x5B01, 53365 }, { 0x5B00, 53369 }, { 0x5B08, 53373 }, { 0x5B0E, 53377 }, { 0x5B03, 53381 }, { 0x5AFE, 53385 }, { 0x5B10, 53389 }, { 0x5B06, 53393 }, { 0x5B09, 53397 }, { 0x5B07, 53401 }, { 0x5B0B, 53405 }, { 0x5B04, 53409 }, { 0x5B02, 53413 }, { 0x5B05, 53417 }, { 0x5B0A, 53421 }, { 0x5B0D, 53425 }, { 0x5AFF, 53429 }, { 0x5B0C, 53433 }, { 0x220E, 53437 }, { 0x2269, 53438 }, { 0x2253, 53439 }, { 0x6DAC, 53442 }, { 0x6F8A, 53446 }, { 0x6F89, 53450 }, { 0x719C, 53454 }, { 0x6F82, 53457 }, { 0x6F87, 53460 }, { 0x6F88, 53466 }, { 0x1C54, 53468 }, { 0x21AD, 53470 }, { 0x6E66, 53471 }, { 0x1C9B, 53472 }, { 0x1C9C, 53474 }, { 0x6EE4, 53479 }, { 0x6FCE, 53481 }, { 0x6FE3, 53483 }, { 0x6DA9, 53487 }, { 0x6D64, 53489 }, { 0x6E2A, 53490 }, { 0x2A9F, 53492 }, { 0x2AAD, 53494 }, { 0x71B3, 53497 }, { 0x6E3A, 53498 }, { 0x7198, 53500 }, { 0x6E1D, 53501 }, { 0x6DD7, 53504 }, { 0x6D42, 53506 }, { 0x6D6B, 53507 }, { 0x6D09, 53509 }, { 0x6D08, 53511 }, { 0x6BA8, 53513 }, { 0x6BA9, 53516 }, { 0x2926, 53519 }, { 0x7189, 53521 }, { 0x2264, 53525 }, { 0x2265, 53527 }, { 0x6ED1, 53529 }, { 0x6ECB, 53538 }, { 0x2927, 53543 }, { 0x28FA, 53545 }, { 0x28FE, 53549 }, { 0x28F9, 53551 }, { 0x376D, 53554 }, { 0x376B, 53558 }, { 0x376F, 53562 }, { 0x376C, 53566 }, { 0x376E, 53570 }, { 0x3770, 53574 }, { 0x3772, 53578 }, { 0x3771, 53582 }, { 0x376A, 53586 }, { 0x375B, 53589 }, { 0x375D, 53592 }, { 0x3758, 53595 }, { 0x3755, 53598 }, { 0x3765, 53601 }, { 0x375E, 53604 }, { 0x3754, 53607 }, { 0x3762, 53610 }, { 0x375C, 53613 }, { 0x3759, 53616 }, { 0x375A, 53619 }, { 0x3761, 53622 }, { 0x3760, 53625 }, { 0x3757, 53628 }, { 0x3764, 53631 }, { 0x3763, 53634 }, { 0x3766, 53637 }, { 0x3768, 53640 }, { 0x3756, 53643 }, { 0x375F, 53646 }, { 0x3767, 53649 }, { 0x3769, 53652 }, { 0x3777, 53655 }, { 0x3778, 53657 }, { 0x3776, 53660 }, { 0x3774, 53664 }, { 0x3775, 53668 }, { 0x3773, 53672 }, { 0x26E8, 53676 }, { 0x26E9, 53678 }, { 0x1F57, 53680 }, { 0x6CBB, 53682 }, { 0x2708, 53683 }, { 0x2709, 53687 }, { 0x2706, 53691 }, { 0x2707, 53695 }, { 0x270A, 53699 }, { 0x270C, 53703 }, { 0x270B, 53707 }, { 0x270D, 53711 }, { 0x248A, 53715 }, { 0x2485, 53721 }, { 0x6FBB, 53726 }, { 0x6CDD, 53727 }, { 0x6CFE, 53729 }, { 0x219E, 53730 }, { 0x21F0, 53731 }, { 0x6D26, 53732 }, { 0x6CCD, 53733 }, { 0x6EF0, 53735 }, { 0x1CBC, 53736 }, { 0x1C97, 53739 }, { 0x1CA0, 53742 }, { 0x1CC1, 53745 }, { 0x1CB9, 53748 }, { 0x1CBD, 53751 }, { 0x1CBE, 53754 }, { 0x1C98, 53757 }, { 0x1C9D, 53760 }, { 0x1C9F, 53763 }, { 0x1CC0, 53766 }, { 0x1CA5, 53769 }, { 0x1CA8, 53772 }, { 0x6FAB, 53775 }, { 0x6E17, 53779 }, { 0x71AB, 53780 }, { 0x1E9D, 53783 }, { 0x7197, 53784 }, { 0x3CD9, 53785 }, { 0x6CA2, 53787 }, { 0x700F, 53789 }, { 0x2243, 53790 }, { 0x6FFA, 53792 }, { 0x71CE, 53793 }, { 0x1BCE, 53794 }, { 0x1BED, 53798 }, { 0x1BEE, 53803 }, { 0x1BCF, 53808 }, { 0x6F65, 53812 }, { 0x6EB0, 53814 }, { 0x2217, 53817 }, { 0x6DE7, 53819 }, { 0x6EB2, 53821 }, { 0x6EB3, 53822 }, { 0x6F0D, 53824 }, { 0x6D55, 53827 }, { 0x6F0E, 53829 }, { 0x6D00, 53832 }, { 0x2E4D, 53834 }, { 0x2E34, 53838 }, { 0x2E2E, 53842 }, { 0x2E2F, 53845 }, { 0x2E15, 53848 }, { 0x2E16, 53852 }, { 0x2E13, 53857 }, { 0x2E0F, 53860 }, { 0x2E4C, 53863 }, { 0x2E30, 53867 }, { 0x2DE1, 53869 }, { 0x2E31, 53871 }, { 0x2E32, 53873 }, { 0x2E33, 53875 }, { 0x2E0B, 53877 }, { 0x2E12, 53879 }, { 0x2E0E, 53882 }, { 0x2E35, 53885 }, { 0x2DE0, 53887 }, { 0x2E36, 53889 }, { 0x6BCA, 53891 }, { 0x2E05, 53893 }, { 0x2DE5, 53895 }, { 0x2DE7, 53897 }, { 0x2DE6, 53900 }, { 0x2D3D, 53903 }, { 0x2E07, 53905 }, { 0x2DF5, 53907 }, { 0x2E37, 53909 }, { 0x2E38, 53911 }, { 0x2D3B, 53913 }, { 0x2E39, 53915 }, { 0x2DFE, 53917 }, { 0x2E3A, 53919 }, { 0x2DE8, 53921 }, { 0x2DF2, 53923 }, { 0x2DF3, 53925 }, { 0x2DFD, 53927 }, { 0x2E3B, 53929 }, { 0x2E06, 53931 }, { 0x2E0C, 53933 }, { 0x2E14, 53935 }, { 0x2E3C, 53938 }, { 0x2E10, 53941 }, { 0x2E3D, 53944 }, { 0x2E26, 53946 }, { 0x2E2C, 53948 }, { 0x2E3E, 53950 }, { 0x2E3F, 53952 }, { 0x2E41, 53954 }, { 0x2DF1, 53956 }, { 0x2DF4, 53958 }, { 0x2E42, 53960 }, { 0x2DFC, 53963 }, { 0x2E04, 53965 }, { 0x2E0A, 53967 }, { 0x2E11, 53969 }, { 0x2E0D, 53972 }, { 0x2E21, 53975 }, { 0x2DF0, 53977 }, { 0x2DFA, 53980 }, { 0x2DFB, 53983 }, { 0x2E03, 53986 }, { 0x2E09, 53989 }, { 0x2E20, 53992 }, { 0x2E24, 53995 }, { 0x2E2A, 53998 }, { 0x2E25, 54001 }, { 0x2E27, 54003 }, { 0x2E2B, 54006 }, { 0x2E2D, 54008 }, { 0x2DEF, 54011 }, { 0x2DF9, 54013 }, { 0x2E08, 54015 }, { 0x2E1F, 54017 }, { 0x2E23, 54019 }, { 0x2E29, 54021 }, { 0x2DE3, 54023 }, { 0x2E17, 54025 }, { 0x2DEE, 54027 }, { 0x2DE4, 54030 }, { 0x2DF8, 54032 }, { 0x2E45, 54034 }, { 0x2E46, 54036 }, { 0x2E48, 54038 }, { 0x2E1E, 54040 }, { 0x2E22, 54042 }, { 0x2E28, 54044 }, { 0x2E49, 54046 }, { 0x2E4A, 54048 }, { 0x2E4B, 54050 }, { 0x2DE2, 54052 }, { 0x2DF6, 54054 }, { 0x1E1C, 54056 }, { 0x1E1D, 54058 }, { 0x2DEC, 54060 }, { 0x2DE9, 54064 }, { 0x2DEA, 54068 }, { 0x2DEB, 54072 }, { 0x2D3C, 54076 }, { 0x2E6D, 54078 }, { 0x2E01, 54080 }, { 0x2E1A, 54082 }, { 0x2DAD, 54084 }, { 0x2DDF, 54086 }, { 0x2DFF, 54088 }, { 0x2E18, 54090 }, { 0x2E40, 54092 }, { 0x2E00, 54094 }, { 0x2E43, 54096 }, { 0x2E44, 54098 }, { 0x2E19, 54100 }, { 0x2E47, 54102 }, { 0x2E1B, 54104 }, { 0x2E1C, 54106 }, { 0x2E1D, 54110 }, { 0x2E02, 54115 }, { 0x2D95, 54117 }, { 0x2D74, 54119 }, { 0x2D71, 54121 }, { 0x2D9F, 54123 }, { 0x2D93, 54125 }, { 0x2D94, 54127 }, { 0x1F56, 54129 }, { 0x2250, 54131 }, { 0x2D7E, 54134 }, { 0x2DB0, 54136 }, { 0x2D73, 54138 }, { 0x2DF7, 54140 }, { 0x2D82, 54142 }, { 0x2627, 54144 }, { 0x2DB9, 54149 }, { 0x2DB7, 54151 }, { 0x2D96, 54153 }, { 0x2D77, 54155 }, { 0x2D78, 54157 }, { 0x2DA5, 54159 }, { 0x2D9E, 54161 }, { 0x2DC3, 54163 }, { 0x2DC0, 54165 }, { 0x1DA3, 54167 }, { 0x266C, 54169 }, { 0x2141, 54174 }, { 0x266F, 54179 }, { 0x2144, 54186 }, { 0x2142, 54193 }, { 0x2101, 54198 }, { 0x2143, 54206 }, { 0x2102, 54213 }, { 0x266E, 54221 }, { 0x266D, 54228 }, { 0x2103, 54233 }, { 0x20FF, 54238 }, { 0x253A, 54242 }, { 0x20FE, 54246 }, { 0x2100, 54250 }, { 0x2DBE, 54255 }, { 0x2D70, 54257 }, { 0x2DAA, 54259 }, { 0x2D92, 54261 }, { 0x2D76, 54263 }, { 0x2D7D, 54265 }, { 0x2D7C, 54267 }, { 0x2D7F, 54269 }, { 0x2D98, 54271 }, { 0x2DAF, 54273 }, { 0x2DA3, 54275 }, { 0x1E18, 54277 }, { 0x1E6D, 54280 }, { 0x1E1A, 54287 }, { 0x2D79, 54293 }, { 0x2D8A, 54295 }, { 0x2D8C, 54297 }, { 0x2DB3, 54299 }, { 0x2DB2, 54301 }, { 0x2D97, 54303 }, { 0x2D9A, 54305 }, { 0x2DA9, 54307 }, { 0x2DA8, 54309 }, { 0x2DAE, 54311 }, { 0x2628, 54313 }, { 0x2DC1, 54318 }, { 0x2D90, 54320 }, { 0x2D91, 54322 }, { 0x2DC5, 54324 }, { 0x2DBC, 54326 }, { 0x2DBD, 54328 }, { 0x2D6E, 54330 }, { 0x2D6F, 54332 }, { 0x2DAC, 54334 }, { 0x2D86, 54336 }, { 0x2DA7, 54338 }, { 0x2DA1, 54340 }, { 0x2D72, 54342 }, { 0x2D8B, 54344 }, { 0x2D80, 54346 }, { 0x2DB4, 54348 }, { 0x2DA6, 54350 }, { 0x2D9D, 54352 }, { 0x2DAB, 54354 }, { 0x70AC, 54356 }, { 0x2D9B, 54358 }, { 0x2D81, 54360 }, { 0x2D7A, 54362 }, { 0x2D7B, 54364 }, { 0x2D89, 54366 }, { 0x1E9A, 54368 }, { 0x2DB1, 54370 }, { 0x2DB5, 54372 }, { 0x2DBB, 54374 }, { 0x2DBA, 54376 }, { 0x2DB6, 54378 }, { 0x2DBF, 54380 }, { 0x2DC2, 54382 }, { 0x2D8D, 54384 }, { 0x2D8F, 54386 }, { 0x2DA2, 54388 }, { 0x2D75, 54390 }, { 0x6C01, 54392 }, { 0x2DA0, 54395 }, { 0x1E19, 54397 }, { 0x1E6E, 54400 }, { 0x1E1B, 54407 }, { 0x2D99, 54413 }, { 0x2722, 54415 }, { 0x2DC4, 54418 }, { 0x2D8E, 54420 }, { 0x2D87, 54422 }, { 0x2DA4, 54424 }, { 0x2D85, 54426 }, { 0x2D88, 54428 }, { 0x2DB8, 54430 }, { 0x2D9C, 54432 }, { 0x2D83, 54434 }, { 0x2DED, 54436 }, { 0x2D84, 54438 }, { 0x6F38, 54440 }, { 0x2283, 54443 }, { 0x6CD4, 54447 }, { 0x1E0B, 54449 }, { 0x1E0F, 54451 }, { 0x261D, 54456 }, { 0x1E13, 54464 }, { 0x2625, 54470 }, { 0x2621, 54476 }, { 0x2623, 54481 }, { 0x261F, 54487 }, { 0x2617, 54492 }, { 0x2619, 54495 }, { 0x261B, 54500 }, { 0x262F, 54505 }, { 0x262D, 54508 }, { 0x24D3, 54511 }, { 0x6C42, 54515 }, { 0x6CFF, 54518 }, { 0x364C, 54519 }, { 0x3651, 54523 }, { 0x3648, 54527 }, { 0x3669, 54531 }, { 0x366C, 54536 }, { 0x366A, 54541 }, { 0x366B, 54546 }, { 0x366D, 54551 }, { 0x3646, 54556 }, { 0x364A, 54560 }, { 0x3647, 54564 }, { 0x364B, 54568 }, { 0x3649, 54572 }, { 0x3661, 54576 }, { 0x3652, 54580 }, { 0x365C, 54584 }, { 0x364F, 54588 }, { 0x3668, 54592 }, { 0x3654, 54596 }, { 0x364D, 54600 }, { 0x3665, 54604 }, { 0x3663, 54608 }, { 0x365E, 54612 }, { 0x365F, 54616 }, { 0x3664, 54620 }, { 0x3667, 54624 }, { 0x365A, 54628 }, { 0x3662, 54632 }, { 0x3653, 54636 }, { 0x3658, 54640 }, { 0x365D, 54644 }, { 0x3650, 54648 }, { 0x3655, 54652 }, { 0x364E, 54656 }, { 0x3660, 54660 }, { 0x3666, 54664 }, { 0x365B, 54668 }, { 0x3656, 54672 }, { 0x3659, 54676 }, { 0x3657, 54680 }, { 0x366E, 54684 }, { 0x366F, 54688 }, { 0x3670, 54692 }, { 0x3671, 54696 }, { 0x1F8B, 54700 }, { 0x1FA1, 54705 }, { 0x1F8C, 54710 }, { 0x1F9F, 54715 }, { 0x1F8F, 54721 }, { 0x1F98, 54724 }, { 0x1FA4, 54729 }, { 0x1F94, 54733 }, { 0x1F92, 54737 }, { 0x1F88, 54741 }, { 0x1FA7, 54744 }, { 0x1FA5, 54748 }, { 0x6E80, 54752 }, { 0x1F97, 54756 }, { 0x1F96, 54760 }, { 0x1FA8, 54764 }, { 0x1F8A, 54767 }, { 0x1F89, 54772 }, { 0x1FA0, 54777 }, { 0x1FA9, 54780 }, { 0x1FAD, 54783 }, { 0x1F99, 54788 }, { 0x1F9A, 54793 }, { 0x1F9C, 54798 }, { 0x1F9B, 54803 }, { 0x1FA3, 54808 }, { 0x1FA6, 54811 }, { 0x1F8D, 54815 }, { 0x1FAC, 54818 }, { 0x1F95, 54821 }, { 0x1F9D, 54825 }, { 0x1F93, 54829 }, { 0x1F90, 54833 }, { 0x1CDC, 54836 }, { 0x1F91, 54840 }, { 0x1FA2, 54844 }, { 0x1FAE, 54847 }, { 0x1F8E, 54852 }, { 0x1F9E, 54855 }, { 0x0695, 54859 }, { 0x06D7, 54863 }, { 0x06D8, 54868 }, { 0x069B, 54873 }, { 0x069C, 54877 }, { 0x06D1, 54881 }, { 0x06D2, 54884 }, { 0x06CE, 54887 }, { 0x06CF, 54890 }, { 0x06DD, 54893 }, { 0x06CA, 54895 }, { 0x06CB, 54898 }, { 0x06D3, 54901 }, { 0x06D9, 54903 }, { 0x06DA, 54907 }, { 0x06CD, 54911 }, { 0x06CC, 54915 }, { 0x06B9, 54919 }, { 0x06AB, 54922 }, { 0x06BA, 54925 }, { 0x06B5, 54928 }, { 0x06B6, 54931 }, { 0x06C0, 54934 }, { 0x06AC, 54937 }, { 0x06A6, 54940 }, { 0x06AE, 54943 }, { 0x06B3, 54946 }, { 0x06BD, 54949 }, { 0x06BE, 54952 }, { 0x06BF, 54955 }, { 0x06AF, 54958 }, { 0x06B0, 54961 }, { 0x06B1, 54965 }, { 0x06B2, 54968 }, { 0x06AD, 54972 }, { 0x06A4, 54975 }, { 0x06B8, 54978 }, { 0x06A7, 54982 }, { 0x06A8, 54985 }, { 0x06BC, 54989 }, { 0x06A9, 54992 }, { 0x06B4, 54995 }, { 0x06AA, 54998 }, { 0x06C1, 55003 }, { 0x06C2, 55007 }, { 0x06C3, 55011 }, { 0x06B7, 55015 }, { 0x06E1, 55018 }, { 0x06E0, 55022 }, { 0x06DF, 55026 }, { 0x06BB, 55030 }, { 0x06A5, 55034 }, { 0x06C4, 55038 }, { 0x06C5, 55041 }, { 0x06C6, 55044 }, { 0x06C7, 55047 }, { 0x06C8, 55050 }, { 0x06C9, 55053 }, { 0x06DE, 55056 }, { 0x06DB, 55058 }, { 0x06DC, 55062 }, { 0x06D4, 55066 }, { 0x06A0, 55069 }, { 0x06A1, 55072 }, { 0x06A2, 55075 }, { 0x06D6, 55078 }, { 0x06D5, 55080 }, { 0x0697, 55082 }, { 0x0699, 55086 }, { 0x069E, 55089 }, { 0x069E, 55094 }, { 0x069A, 55099 }, { 0x069F, 55102 }, { 0x06D0, 55104 }, { 0x0696, 55107 }, { 0x0698, 55111 }, { 0x069D, 55114 }, { 0x06A3, 55119 }, { 0x5BE6, 55122 }, { 0x5BE7, 55125 }, { 0x5BE8, 55127 }, { 0x5BE9, 55129 }, { 0x5BEA, 55131 }, { 0x5BEB, 55133 }, { 0x5BEC, 55135 }, { 0x5BED, 55137 }, { 0x5BEE, 55139 }, { 0x5BEF, 55141 }, { 0x5BF0, 55143 }, { 0x5BF1, 55145 }, { 0x5BF2, 55147 }, { 0x5BF3, 55149 }, { 0x5BF4, 55151 }, { 0x5BF5, 55153 }, { 0x5BF6, 55155 }, { 0x5BF7, 55157 }, { 0x5BF8, 55159 }, { 0x5BF9, 55161 }, { 0x5BFA, 55163 }, { 0x5BFB, 55165 }, { 0x5BFC, 55167 }, { 0x5BFD, 55169 }, { 0x5BFE, 55171 }, { 0x5BFF, 55173 }, { 0x5C00, 55175 }, { 0x5C01, 55177 }, { 0x5C02, 55179 }, { 0x5C03, 55181 }, { 0x5C04, 55183 }, { 0x5C05, 55185 }, { 0x5C06, 55187 }, { 0x5C07, 55189 }, { 0x5C08, 55191 }, { 0x5C09, 55193 }, { 0x5C0A, 55195 }, { 0x5C0B, 55197 }, { 0x5C0C, 55199 }, { 0x5C0D, 55201 }, { 0x5C0E, 55203 }, { 0x5C0F, 55205 }, { 0x5C10, 55207 }, { 0x5C11, 55209 }, { 0x5C12, 55211 }, { 0x5C13, 55213 }, { 0x5C14, 55215 }, { 0x5C15, 55217 }, { 0x5C16, 55219 }, { 0x5C17, 55221 }, { 0x5C18, 55223 }, { 0x5C19, 55225 }, { 0x5C1A, 55227 }, { 0x5C1B, 55229 }, { 0x5C1C, 55231 }, { 0x5C1D, 55233 }, { 0x5C1E, 55235 }, { 0x5C1F, 55237 }, { 0x5C20, 55239 }, { 0x5C21, 55241 }, { 0x5C22, 55243 }, { 0x5C23, 55245 }, { 0x5C24, 55247 }, { 0x5C25, 55249 }, { 0x5C26, 55251 }, { 0x5C27, 55253 }, { 0x5C28, 55255 }, { 0x5C29, 55257 }, { 0x5C2A, 55259 }, { 0x5C2B, 55261 }, { 0x5C2C, 55263 }, { 0x5C2D, 55265 }, { 0x5C2E, 55267 }, { 0x5C2F, 55269 }, { 0x5C30, 55271 }, { 0x5C31, 55273 }, { 0x5C32, 55275 }, { 0x5C33, 55277 }, { 0x5C34, 55279 }, { 0x5C35, 55281 }, { 0x5C36, 55283 }, { 0x5C37, 55285 }, { 0x5C38, 55287 }, { 0x5C39, 55289 }, { 0x5C3A, 55291 }, { 0x5C3B, 55293 }, { 0x5C3C, 55295 }, { 0x5C3D, 55297 }, { 0x5C3E, 55299 }, { 0x5C3F, 55301 }, { 0x5C40, 55303 }, { 0x5C41, 55305 }, { 0x5C42, 55307 }, { 0x5C43, 55309 }, { 0x5C44, 55311 }, { 0x5C45, 55313 }, { 0x5C46, 55315 }, { 0x5C47, 55317 }, { 0x5C48, 55319 }, { 0x5C49, 55321 }, { 0x5C4A, 55323 }, { 0x5C4B, 55325 }, { 0x5C4C, 55327 }, { 0x5C4D, 55329 }, { 0x5C4E, 55331 }, { 0x5C4F, 55333 }, { 0x5C50, 55335 }, { 0x5C51, 55337 }, { 0x5C52, 55339 }, { 0x5C53, 55341 }, { 0x5C54, 55343 }, { 0x5C55, 55345 }, { 0x5C56, 55347 }, { 0x5C57, 55349 }, { 0x5C58, 55351 }, { 0x5C59, 55353 }, { 0x5C5A, 55355 }, { 0x5C5B, 55357 }, { 0x5C5C, 55359 }, { 0x5C5D, 55361 }, { 0x5C5E, 55363 }, { 0x5C5F, 55365 }, { 0x5C60, 55367 }, { 0x5C61, 55369 }, { 0x5C62, 55371 }, { 0x5C63, 55373 }, { 0x5C64, 55375 }, { 0x5C65, 55377 }, { 0x5C66, 55379 }, { 0x5C67, 55381 }, { 0x5C68, 55383 }, { 0x5C69, 55385 }, { 0x5C6A, 55387 }, { 0x5C6B, 55389 }, { 0x5C6C, 55391 }, { 0x5C6D, 55393 }, { 0x5C6E, 55395 }, { 0x5C6F, 55397 }, { 0x5C70, 55399 }, { 0x5C71, 55401 }, { 0x5C72, 55403 }, { 0x5C73, 55405 }, { 0x5C74, 55407 }, { 0x5C75, 55409 }, { 0x5C76, 55411 }, { 0x5C77, 55413 }, { 0x5C78, 55415 }, { 0x5C79, 55417 }, { 0x5C7A, 55419 }, { 0x5C7B, 55421 }, { 0x5C7C, 55423 }, { 0x5C7D, 55425 }, { 0x5C7E, 55427 }, { 0x5C7F, 55429 }, { 0x5C80, 55431 }, { 0x5C81, 55433 }, { 0x5C82, 55435 }, { 0x5C83, 55437 }, { 0x5C84, 55439 }, { 0x5C85, 55441 }, { 0x5C86, 55443 }, { 0x5C87, 55445 }, { 0x5C88, 55447 }, { 0x5C89, 55449 }, { 0x5C8A, 55451 }, { 0x5C8B, 55453 }, { 0x5C8C, 55455 }, { 0x5C8D, 55457 }, { 0x5C8E, 55459 }, { 0x5C8F, 55461 }, { 0x5C90, 55463 }, { 0x5C91, 55465 }, { 0x5C92, 55467 }, { 0x5C93, 55469 }, { 0x5C94, 55471 }, { 0x5C95, 55473 }, { 0x5C96, 55475 }, { 0x5C97, 55477 }, { 0x5C98, 55479 }, { 0x5C99, 55481 }, { 0x5C9A, 55483 }, { 0x5C9B, 55485 }, { 0x5C9C, 55487 }, { 0x5C9D, 55489 }, { 0x5C9E, 55491 }, { 0x5C9F, 55493 }, { 0x5CA0, 55495 }, { 0x5CA1, 55497 }, { 0x5CA2, 55499 }, { 0x5CA3, 55501 }, { 0x5CA4, 55503 }, { 0x5CA5, 55505 }, { 0x5CA6, 55507 }, { 0x5CA7, 55509 }, { 0x5CA8, 55511 }, { 0x5CA9, 55513 }, { 0x5CAA, 55515 }, { 0x5CAB, 55517 }, { 0x5CAC, 55519 }, { 0x5CAD, 55521 }, { 0x5CAE, 55523 }, { 0x5CAF, 55525 }, { 0x5CB0, 55527 }, { 0x5CB1, 55529 }, { 0x5CB2, 55531 }, { 0x5CB3, 55533 }, { 0x5CB4, 55535 }, { 0x5CB5, 55537 }, { 0x5CB6, 55539 }, { 0x5CB7, 55541 }, { 0x5CB8, 55543 }, { 0x5CB9, 55545 }, { 0x5CBA, 55547 }, { 0x5CBB, 55549 }, { 0x5CBC, 55551 }, { 0x5CBD, 55553 }, { 0x5CBE, 55555 }, { 0x5CBF, 55557 }, { 0x5CC0, 55559 }, { 0x5CC1, 55561 }, { 0x5CC2, 55563 }, { 0x5CC3, 55565 }, { 0x5CC4, 55567 }, { 0x5CC5, 55569 }, { 0x5CC6, 55571 }, { 0x5CC7, 55573 }, { 0x5CC8, 55575 }, { 0x5CC9, 55577 }, { 0x5CCA, 55579 }, { 0x5CCB, 55581 }, { 0x5CCC, 55583 }, { 0x5CCD, 55585 }, { 0x5CCE, 55587 }, { 0x5CCF, 55589 }, { 0x5CD0, 55591 }, { 0x5CD1, 55593 }, { 0x5CD2, 55595 }, { 0x5CD3, 55597 }, { 0x5CD4, 55599 }, { 0x5CD5, 55601 }, { 0x5CD6, 55603 }, { 0x5CD7, 55605 }, { 0x5CD8, 55607 }, { 0x5CD9, 55609 }, { 0x5CDA, 55611 }, { 0x5CDB, 55613 }, { 0x5CDC, 55615 }, { 0x5CDD, 55617 }, { 0x5CDE, 55619 }, { 0x5CDF, 55621 }, { 0x5CE0, 55623 }, { 0x5CE1, 55625 }, { 0x5CE2, 55627 }, { 0x5CE3, 55629 }, { 0x5CE4, 55631 }, { 0x5CE5, 55633 }, { 0x5CE6, 55635 }, { 0x5CE7, 55637 }, { 0x5CE8, 55639 }, { 0x5CE9, 55641 }, { 0x5CEA, 55643 }, { 0x5CEB, 55645 }, { 0x5CEC, 55647 }, { 0x5CED, 55649 }, { 0x5CEE, 55651 }, { 0x5CEF, 55653 }, { 0x5CF0, 55655 }, { 0x5CF1, 55657 }, { 0x5CF2, 55659 }, { 0x5CF3, 55661 }, { 0x5CF4, 55663 }, { 0x5CF5, 55665 }, { 0x5CF6, 55667 }, { 0x5CF7, 55669 }, { 0x5CF8, 55671 }, { 0x5CF9, 55673 }, { 0x5CFA, 55675 }, { 0x5CFB, 55677 }, { 0x5CFC, 55679 }, { 0x5CFD, 55681 }, { 0x5CFE, 55683 }, { 0x5CFF, 55685 }, { 0x5D00, 55687 }, { 0x5D01, 55689 }, { 0x5D02, 55691 }, { 0x5D03, 55693 }, { 0x5D04, 55695 }, { 0x5D05, 55697 }, { 0x5D06, 55699 }, { 0x5D07, 55701 }, { 0x5D08, 55703 }, { 0x5D09, 55705 }, { 0x5D0A, 55707 }, { 0x5D0B, 55709 }, { 0x5D0C, 55711 }, { 0x5D0D, 55713 }, { 0x5D0E, 55715 }, { 0x5D0F, 55717 }, { 0x5D10, 55719 }, { 0x5D11, 55721 }, { 0x5D12, 55723 }, { 0x5D13, 55725 }, { 0x5D14, 55727 }, { 0x5D15, 55729 }, { 0x5D16, 55731 }, { 0x5D17, 55733 }, { 0x5D18, 55735 }, { 0x5D19, 55737 }, { 0x5D1A, 55739 }, { 0x5D1B, 55741 }, { 0x5D1C, 55743 }, { 0x5D1D, 55745 }, { 0x5D1E, 55747 }, { 0x5D1F, 55749 }, { 0x5D20, 55751 }, { 0x5D21, 55753 }, { 0x5D22, 55755 }, { 0x5D23, 55757 }, { 0x5D24, 55759 }, { 0x5D25, 55761 }, { 0x5D26, 55763 }, { 0x5D27, 55765 }, { 0x5D28, 55767 }, { 0x5D29, 55769 }, { 0x5D2A, 55771 }, { 0x5D2B, 55773 }, { 0x5D2C, 55775 }, { 0x5D2D, 55777 }, { 0x5D2E, 55779 }, { 0x5D2F, 55781 }, { 0x5D30, 55783 }, { 0x5D31, 55785 }, { 0x5D32, 55787 }, { 0x5D33, 55789 }, { 0x5D34, 55791 }, { 0x5D35, 55793 }, { 0x5D36, 55795 }, { 0x5D37, 55797 }, { 0x5D38, 55799 }, { 0x5D39, 55801 }, { 0x5D3A, 55803 }, { 0x5D3B, 55805 }, { 0x5D3C, 55807 }, { 0x5D3D, 55809 }, { 0x5D3E, 55811 }, { 0x5D3F, 55813 }, { 0x5D40, 55815 }, { 0x5D41, 55817 }, { 0x5D42, 55819 }, { 0x5D43, 55821 }, { 0x5D44, 55823 }, { 0x5D45, 55825 }, { 0x5D46, 55827 }, { 0x5D47, 55829 }, { 0x5D48, 55831 }, { 0x5D49, 55833 }, { 0x5D4A, 55835 }, { 0x5D4B, 55837 }, { 0x5D4C, 55839 }, { 0x5D4D, 55841 }, { 0x5D4E, 55843 }, { 0x5D4F, 55845 }, { 0x5D50, 55847 }, { 0x5D51, 55849 }, { 0x5D52, 55851 }, { 0x5D53, 55853 }, { 0x5D54, 55855 }, { 0x5D55, 55857 }, { 0x5D56, 55859 }, { 0x5D57, 55861 }, { 0x5D58, 55863 }, { 0x5D59, 55865 }, { 0x5D5A, 55867 }, { 0x5D5B, 55869 }, { 0x5D5C, 55871 }, { 0x5D5D, 55873 }, { 0x5D5E, 55875 }, { 0x5D5F, 55877 }, { 0x5D60, 55879 }, { 0x5D61, 55881 }, { 0x5D62, 55883 }, { 0x5D63, 55885 }, { 0x5D64, 55887 }, { 0x5D65, 55889 }, { 0x5D66, 55891 }, { 0x5D67, 55893 }, { 0x5D68, 55895 }, { 0x5D69, 55897 }, { 0x5D6A, 55899 }, { 0x5D6B, 55901 }, { 0x5D6C, 55903 }, { 0x5D6D, 55905 }, { 0x5D6E, 55907 }, { 0x5D6F, 55909 }, { 0x5D70, 55911 }, { 0x5D71, 55913 }, { 0x5D72, 55915 }, { 0x5D73, 55917 }, { 0x5D74, 55919 }, { 0x5D75, 55921 }, { 0x5D76, 55923 }, { 0x5D77, 55925 }, { 0x5D78, 55927 }, { 0x5D79, 55929 }, { 0x5D7A, 55931 }, { 0x5D7B, 55933 }, { 0x5D7C, 55935 }, { 0x5D7D, 55937 }, { 0x5D7E, 55939 }, { 0x5D7F, 55941 }, { 0x5D80, 55943 }, { 0x5D81, 55945 }, { 0x5D82, 55947 }, { 0x5D83, 55949 }, { 0x5D84, 55951 }, { 0x5D85, 55953 }, { 0x5D86, 55955 }, { 0x5D87, 55957 }, { 0x5D88, 55959 }, { 0x5D89, 55961 }, { 0x5D8A, 55963 }, { 0x5D8B, 55965 }, { 0x5D8C, 55967 }, { 0x5D8D, 55969 }, { 0x5D8E, 55971 }, { 0x5D8F, 55973 }, { 0x5D90, 55975 }, { 0x5D91, 55977 }, { 0x5D92, 55979 }, { 0x5D93, 55981 }, { 0x5D94, 55983 }, { 0x5D95, 55985 }, { 0x5D96, 55987 }, { 0x5D97, 55989 }, { 0x5D98, 55991 }, { 0x5D99, 55993 }, { 0x5D9A, 55995 }, { 0x5D9B, 55997 }, { 0x5D9C, 55999 }, { 0x5D9D, 56001 }, { 0x5D9E, 56003 }, { 0x5D9F, 56005 }, { 0x5DA0, 56007 }, { 0x5DA1, 56009 }, { 0x5DA2, 56011 }, { 0x5DA3, 56013 }, { 0x5DA4, 56015 }, { 0x5DA5, 56017 }, { 0x5DA6, 56019 }, { 0x5DA7, 56021 }, { 0x5DA8, 56023 }, { 0x5DA9, 56025 }, { 0x5DAA, 56027 }, { 0x5DAB, 56029 }, { 0x5DAC, 56031 }, { 0x5DAD, 56033 }, { 0x5DAE, 56035 }, { 0x5DAF, 56037 }, { 0x5DB0, 56039 }, { 0x5DB1, 56041 }, { 0x5DB2, 56043 }, { 0x5DB3, 56045 }, { 0x5DB4, 56047 }, { 0x5DB5, 56049 }, { 0x5DB6, 56051 }, { 0x5DB7, 56053 }, { 0x5DB8, 56055 }, { 0x5DB9, 56057 }, { 0x5DBA, 56059 }, { 0x5DBB, 56061 }, { 0x5DBC, 56063 }, { 0x5DBD, 56065 }, { 0x5DBE, 56067 }, { 0x5DBF, 56069 }, { 0x5DC0, 56071 }, { 0x5DC1, 56073 }, { 0x5DC2, 56075 }, { 0x5DC3, 56077 }, { 0x5DC4, 56079 }, { 0x5DC5, 56081 }, { 0x5DC6, 56083 }, { 0x5DC7, 56085 }, { 0x5DC8, 56087 }, { 0x5DC9, 56089 }, { 0x5DCA, 56091 }, { 0x5DCB, 56093 }, { 0x5DCC, 56095 }, { 0x5DCD, 56097 }, { 0x5DCE, 56099 }, { 0x5DCF, 56101 }, { 0x5DD0, 56103 }, { 0x5DD1, 56105 }, { 0x5DD2, 56107 }, { 0x5DD3, 56109 }, { 0x5DD4, 56111 }, { 0x5DD5, 56113 }, { 0x5DD6, 56115 }, { 0x5DD7, 56117 }, { 0x5DD8, 56119 }, { 0x5DD9, 56121 }, { 0x5DDA, 56123 }, { 0x5DDB, 56125 }, { 0x5DDC, 56127 }, { 0x5DDD, 56129 }, { 0x5DDE, 56131 }, { 0x5DDF, 56133 }, { 0x5DE0, 56135 }, { 0x5DE1, 56137 }, { 0x5DE2, 56139 }, { 0x5DE3, 56141 }, { 0x5DE4, 56143 }, { 0x5DE5, 56145 }, { 0x5DE6, 56147 }, { 0x5DE7, 56149 }, { 0x5DE8, 56151 }, { 0x5DE9, 56153 }, { 0x5DEA, 56155 }, { 0x5DEB, 56157 }, { 0x5DEC, 56159 }, { 0x5DED, 56161 }, { 0x5DEE, 56163 }, { 0x5DEF, 56165 }, { 0x5DF0, 56167 }, { 0x5DF1, 56169 }, { 0x5DF2, 56171 }, { 0x5DF3, 56173 }, { 0x5DF4, 56175 }, { 0x5DF5, 56177 }, { 0x5DF6, 56179 }, { 0x5DF7, 56181 }, { 0x5DF8, 56183 }, { 0x5DF9, 56185 }, { 0x5DFA, 56187 }, { 0x5DFB, 56189 }, { 0x5DFC, 56191 }, { 0x5DFD, 56193 }, { 0x5DFE, 56195 }, { 0x5DFF, 56197 }, { 0x5E00, 56199 }, { 0x5E01, 56201 }, { 0x5E02, 56203 }, { 0x5E03, 56205 }, { 0x5E04, 56207 }, { 0x5E05, 56209 }, { 0x5E06, 56211 }, { 0x5E07, 56213 }, { 0x5E08, 56215 }, { 0x5E09, 56217 }, { 0x5E0A, 56219 }, { 0x5E0B, 56221 }, { 0x5E0C, 56223 }, { 0x5E0D, 56225 }, { 0x5E0E, 56227 }, { 0x5E0F, 56229 }, { 0x5E10, 56231 }, { 0x5E11, 56233 }, { 0x5E12, 56235 }, { 0x5E13, 56237 }, { 0x5E14, 56239 }, { 0x5E15, 56241 }, { 0x5E16, 56243 }, { 0x5E17, 56245 }, { 0x5E18, 56247 }, { 0x5E19, 56249 }, { 0x5E1A, 56251 }, { 0x5E1B, 56253 }, { 0x5E1C, 56255 }, { 0x5E1D, 56257 }, { 0x5E1E, 56259 }, { 0x5E1F, 56261 }, { 0x5E20, 56263 }, { 0x5E21, 56265 }, { 0x5E22, 56267 }, { 0x5E23, 56269 }, { 0x5E24, 56271 }, { 0x5E25, 56273 }, { 0x5E26, 56275 }, { 0x5E27, 56277 }, { 0x5E28, 56279 }, { 0x5E29, 56281 }, { 0x5E2A, 56283 }, { 0x5E2B, 56285 }, { 0x5E2C, 56287 }, { 0x5E2D, 56289 }, { 0x5E2E, 56291 }, { 0x5E2F, 56293 }, { 0x5E30, 56295 }, { 0x5E31, 56297 }, { 0x5E32, 56299 }, { 0x5E33, 56301 }, { 0x5E34, 56303 }, { 0x5E35, 56305 }, { 0x5E36, 56307 }, { 0x5E37, 56309 }, { 0x5E38, 56311 }, { 0x5E39, 56313 }, { 0x5E3A, 56315 }, { 0x5E3B, 56317 }, { 0x5E3C, 56319 }, { 0x5E3D, 56321 }, { 0x5E3E, 56323 }, { 0x5E3F, 56325 }, { 0x5E40, 56327 }, { 0x5E41, 56329 }, { 0x5E42, 56331 }, { 0x5E43, 56333 }, { 0x5E44, 56335 }, { 0x5E45, 56337 }, { 0x5E46, 56339 }, { 0x5E47, 56341 }, { 0x5E48, 56343 }, { 0x5E49, 56345 }, { 0x5E4A, 56347 }, { 0x5E4B, 56349 }, { 0x5E4C, 56351 }, { 0x5E4D, 56353 }, { 0x5E4E, 56355 }, { 0x5E4F, 56357 }, { 0x5E50, 56359 }, { 0x5E51, 56361 }, { 0x5E52, 56363 }, { 0x5E53, 56365 }, { 0x5E54, 56367 }, { 0x5E55, 56369 }, { 0x5E56, 56371 }, { 0x5E57, 56373 }, { 0x5E58, 56375 }, { 0x5E59, 56377 }, { 0x5E5A, 56379 }, { 0x5E5B, 56381 }, { 0x5E5C, 56383 }, { 0x5E5D, 56385 }, { 0x5E5E, 56387 }, { 0x5E5F, 56389 }, { 0x5E60, 56391 }, { 0x5E61, 56393 }, { 0x5E62, 56395 }, { 0x5E63, 56397 }, { 0x5E64, 56399 }, { 0x5E65, 56401 }, { 0x5E66, 56403 }, { 0x5E67, 56405 }, { 0x5E68, 56407 }, { 0x5E69, 56409 }, { 0x5E6A, 56411 }, { 0x5E6B, 56413 }, { 0x5E6C, 56415 }, { 0x5E6D, 56417 }, { 0x5E6E, 56419 }, { 0x5E6F, 56421 }, { 0x5E70, 56423 }, { 0x5E71, 56425 }, { 0x5E72, 56427 }, { 0x5E73, 56429 }, { 0x5E74, 56431 }, { 0x5E75, 56433 }, { 0x5E76, 56435 }, { 0x5E77, 56437 }, { 0x5E78, 56439 }, { 0x5E79, 56441 }, { 0x5E7A, 56443 }, { 0x5E7B, 56445 }, { 0x5E7C, 56447 }, { 0x5E7D, 56449 }, { 0x5E7E, 56451 }, { 0x5E7F, 56453 }, { 0x5E80, 56455 }, { 0x5E81, 56457 }, { 0x5E82, 56459 }, { 0x5E83, 56461 }, { 0x5E84, 56463 }, { 0x5E85, 56465 }, { 0x5E86, 56467 }, { 0x5E87, 56469 }, { 0x5E88, 56471 }, { 0x5E89, 56473 }, { 0x5E8A, 56475 }, { 0x5E8B, 56477 }, { 0x5E8C, 56479 }, { 0x5E8D, 56481 }, { 0x5E8E, 56483 }, { 0x5E8F, 56485 }, { 0x5E90, 56487 }, { 0x5E91, 56489 }, { 0x5E92, 56491 }, { 0x5E93, 56493 }, { 0x5E94, 56495 }, { 0x5E95, 56497 }, { 0x5E96, 56499 }, { 0x5E97, 56501 }, { 0x5E98, 56503 }, { 0x5E99, 56505 }, { 0x5E9A, 56507 }, { 0x5E9B, 56509 }, { 0x5E9C, 56511 }, { 0x5E9D, 56513 }, { 0x5E9E, 56515 }, { 0x5E9F, 56517 }, { 0x5EA0, 56519 }, { 0x5EA1, 56521 }, { 0x5EA2, 56523 }, { 0x5EA3, 56525 }, { 0x5EA4, 56527 }, { 0x5EA5, 56529 }, { 0x5EA6, 56531 }, { 0x5EA7, 56533 }, { 0x5EA8, 56535 }, { 0x5EA9, 56537 }, { 0x5EAA, 56539 }, { 0x5EAB, 56541 }, { 0x5EAC, 56543 }, { 0x5EAD, 56545 }, { 0x5EAE, 56547 }, { 0x5EAF, 56549 }, { 0x5EB0, 56551 }, { 0x5EB1, 56553 }, { 0x5EB2, 56555 }, { 0x5EB3, 56557 }, { 0x5EB4, 56559 }, { 0x5EB5, 56561 }, { 0x5EB6, 56563 }, { 0x5EB7, 56565 }, { 0x5EB8, 56567 }, { 0x5EB9, 56569 }, { 0x5EBA, 56571 }, { 0x5EBB, 56573 }, { 0x5EBC, 56575 }, { 0x5EBD, 56577 }, { 0x5EBE, 56579 }, { 0x5EBF, 56581 }, { 0x5EC0, 56583 }, { 0x5EC1, 56585 }, { 0x5EC2, 56587 }, { 0x5EC3, 56589 }, { 0x5EC4, 56591 }, { 0x5EC5, 56593 }, { 0x5EC6, 56595 }, { 0x5EC7, 56597 }, { 0x5EC8, 56599 }, { 0x5EC9, 56601 }, { 0x5ECA, 56603 }, { 0x5ECB, 56605 }, { 0x5ECC, 56607 }, { 0x5ECD, 56609 }, { 0x5ECE, 56611 }, { 0x5ECF, 56613 }, { 0x5ED0, 56615 }, { 0x5ED1, 56617 }, { 0x5ED2, 56619 }, { 0x5ED3, 56621 }, { 0x5ED4, 56623 }, { 0x5ED5, 56625 }, { 0x5ED6, 56627 }, { 0x5ED7, 56629 }, { 0x5ED8, 56631 }, { 0x5ED9, 56633 }, { 0x21A3, 56635 }, { 0x6CB0, 56636 }, { 0x0A8B, 56639 }, { 0x0AA4, 56643 }, { 0x0A89, 56646 }, { 0x0A48, 56649 }, { 0x0A47, 56652 }, { 0x0A7B, 56655 }, { 0x0A45, 56658 }, { 0x0A46, 56663 }, { 0x0A94, 56666 }, { 0x0A99, 56669 }, { 0x0A95, 56672 }, { 0x0A98, 56675 }, { 0x0A97, 56678 }, { 0x0A9C, 56681 }, { 0x0A93, 56684 }, { 0x0A9B, 56687 }, { 0x0A9A, 56690 }, { 0x0A96, 56693 }, { 0x0A83, 56696 }, { 0x0A7D, 56700 }, { 0x0A86, 56704 }, { 0x0A7F, 56708 }, { 0x0A7C, 56712 }, { 0x0A85, 56716 }, { 0x0A88, 56720 }, { 0x0A84, 56724 }, { 0x0A7E, 56728 }, { 0x0A87, 56732 }, { 0x0A80, 56736 }, { 0x0A91, 56740 }, { 0x0A81, 56745 }, { 0x0A92, 56750 }, { 0x0A82, 56755 }, { 0x0A8A, 56760 }, { 0x0A49, 56763 }, { 0x0A51, 56766 }, { 0x0A4B, 56769 }, { 0x0A54, 56772 }, { 0x0A4D, 56775 }, { 0x0A4A, 56778 }, { 0x0A53, 56781 }, { 0x0A56, 56784 }, { 0x0A6D, 56787 }, { 0x0A5C, 56790 }, { 0x0A68, 56793 }, { 0x0A52, 56796 }, { 0x0A59, 56799 }, { 0x0A7A, 56802 }, { 0x0A4C, 56805 }, { 0x0A5E, 56808 }, { 0x0A57, 56811 }, { 0x0A73, 56814 }, { 0x0A6F, 56817 }, { 0x0A6A, 56820 }, { 0x0A55, 56823 }, { 0x0A6B, 56826 }, { 0x0A71, 56829 }, { 0x0A79, 56832 }, { 0x0A66, 56835 }, { 0x0A4E, 56838 }, { 0x0A76, 56841 }, { 0x0A70, 56844 }, { 0x0A6E, 56847 }, { 0x0A5D, 56850 }, { 0x0A63, 56853 }, { 0x0A69, 56856 }, { 0x0A8D, 56859 }, { 0x0A5A, 56862 }, { 0x0A5F, 56865 }, { 0x0A58, 56868 }, { 0x0A74, 56871 }, { 0x0A5B, 56874 }, { 0x0A65, 56877 }, { 0x0A60, 56880 }, { 0x0A6C, 56883 }, { 0x0A72, 56886 }, { 0x0A77, 56889 }, { 0x0A78, 56892 }, { 0x0A67, 56895 }, { 0x0A8C, 56898 }, { 0x0A61, 56901 }, { 0x0A64, 56904 }, { 0x0A75, 56907 }, { 0x0A8E, 56910 }, { 0x0A62, 56913 }, { 0x0A50, 56916 }, { 0x0A4F, 56920 }, { 0x0A90, 56924 }, { 0x0A8F, 56928 }, { 0x0A9E, 56932 }, { 0x0AA1, 56941 }, { 0x0A9F, 56950 }, { 0x0AA2, 56959 }, { 0x0A9D, 56968 }, { 0x0AA0, 56977 }, { 0x0AA3, 56986 }, { 0x6CF9, 56995 }, { 0x0742, 56999 }, { 0x0732, 57001 }, { 0x0733, 57004 }, { 0x0716, 57007 }, { 0x0712, 57010 }, { 0x0743, 57013 }, { 0x0715, 57016 }, { 0x0726, 57019 }, { 0x072E, 57022 }, { 0x0734, 57025 }, { 0x072B, 57028 }, { 0x072C, 57031 }, { 0x071E, 57034 }, { 0x072A, 57037 }, { 0x0719, 57040 }, { 0x071C, 57043 }, { 0x0720, 57046 }, { 0x0718, 57049 }, { 0x071F, 57052 }, { 0x071B, 57055 }, { 0x0714, 57058 }, { 0x0736, 57061 }, { 0x0722, 57064 }, { 0x071A, 57067 }, { 0x0737, 57070 }, { 0x0731, 57073 }, { 0x071D, 57076 }, { 0x0735, 57079 }, { 0x0730, 57082 }, { 0x072F, 57085 }, { 0x072D, 57088 }, { 0x0723, 57091 }, { 0x0728, 57094 }, { 0x0727, 57097 }, { 0x0725, 57100 }, { 0x0724, 57103 }, { 0x0729, 57106 }, { 0x0721, 57109 }, { 0x0717, 57112 }, { 0x0713, 57115 }, { 0x0738, 57118 }, { 0x073E, 57120 }, { 0x073A, 57122 }, { 0x0740, 57124 }, { 0x073C, 57126 }, { 0x0739, 57128 }, { 0x073B, 57130 }, { 0x073F, 57132 }, { 0x0741, 57134 }, { 0x073D, 57136 }, { 0x6D88, 57138 }, { 0x6D89, 57141 }, { 0x6CE6, 57144 }, { 0x6FF8, 57145 }, { 0x6C80, 57146 }, { 0x6D80, 57147 }, { 0x2555, 57148 }, { 0x2650, 57150 }, { 0x1BE8, 57153 }, { 0x1DD4, 57155 }, { 0x2651, 57157 }, { 0x2652, 57160 }, { 0x2655, 57163 }, { 0x1DB6, 57167 }, { 0x264F, 57169 }, { 0x1E33, 57175 }, { 0x264E, 57180 }, { 0x24DA, 57185 }, { 0x25C2, 57189 }, { 0x25C3, 57196 }, { 0x6D01, 57203 }, { 0x1C5B, 57204 }, { 0x71C1, 57206 }, { 0x6ECA, 57207 }, { 0x1EA2, 57211 }, { 0x24FC, 57214 }, { 0x2224, 57216 }, { 0x2715, 57220 }, { 0x2925, 57223 }, { 0x1D17, 57225 }, { 0x1D18, 57228 }, { 0x1CB6, 57231 }, { 0x6F91, 57236 }, { 0x6F8F, 57241 }, { 0x1CDB, 57246 }, { 0x6F92, 57249 }, { 0x6F90, 57254 }, { 0x2223, 57259 }, { 0x292B, 57263 }, { 0x1CBF, 57265 }, { 0x1CD8, 57268 }, { 0x2928, 57270 }, { 0x1CCE, 57272 }, { 0x1CCF, 57276 }, { 0x1CD1, 57280 }, { 0x6D5D, 57284 }, { 0x2293, 57285 }, { 0x292D, 57289 }, { 0x219F, 57291 }, { 0x2589, 57292 }, { 0x6CF6, 57296 }, { 0x1DB9, 57297 }, { 0x007C, 57299 }, { 0x1CE2, 57303 }, { 0x1CDE, 57307 }, { 0x1CE6, 57311 }, { 0x1CDF, 57315 }, { 0x1CE0, 57319 }, { 0x1CE8, 57323 }, { 0x007B, 57327 }, { 0x1CDD, 57331 }, { 0x1CE3, 57335 }, { 0x1CE1, 57339 }, { 0x1CE7, 57343 }, { 0x1CEA, 57347 }, { 0x1CE5, 57351 }, { 0x1D16, 57355 }, { 0x1CEB, 57359 }, { 0x1CE4, 57363 }, { 0x1CE9, 57367 }, { 0x007D, 57371 }, { 0x6C51, 57375 }, { 0x6C53, 57379 }, { 0x4C33, 57383 }, { 0x4C21, 57386 }, { 0x4C26, 57390 }, { 0x4C22, 57394 }, { 0x4C25, 57398 }, { 0x4C24, 57402 }, { 0x4C29, 57406 }, { 0x4C20, 57410 }, { 0x4C28, 57414 }, { 0x4C27, 57418 }, { 0x4C23, 57422 }, { 0x4C01, 57426 }, { 0x4C08, 57431 }, { 0x4C09, 57436 }, { 0x4C16, 57441 }, { 0x4C15, 57446 }, { 0x4C17, 57451 }, { 0x4C14, 57456 }, { 0x4C0B, 57461 }, { 0x4C06, 57466 }, { 0x4C0C, 57471 }, { 0x4C18, 57476 }, { 0x4C0F, 57481 }, { 0x4C07, 57486 }, { 0x4C02, 57491 }, { 0x4C04, 57496 }, { 0x4C05, 57501 }, { 0x4C03, 57506 }, { 0x4C0A, 57511 }, { 0x4C10, 57516 }, { 0x4C0D, 57521 }, { 0x4C1C, 57526 }, { 0x4C11, 57531 }, { 0x4C1E, 57536 }, { 0x4C12, 57541 }, { 0x4C0E, 57546 }, { 0x4C19, 57551 }, { 0x4C1A, 57556 }, { 0x4C1B, 57561 }, { 0x4C00, 57566 }, { 0x4C13, 57571 }, { 0x4C1D, 57576 }, { 0x4C1F, 57581 }, { 0x4C2A, 57586 }, { 0x4C2E, 57590 }, { 0x4C2D, 57594 }, { 0x4C2F, 57598 }, { 0x4C31, 57602 }, { 0x4C32, 57606 }, { 0x4C2C, 57610 }, { 0x4C2B, 57614 }, { 0x4C30, 57618 }, { 0x4BE1, 57622 }, { 0x4BE8, 57627 }, { 0x4BE9, 57632 }, { 0x4BF6, 57637 }, { 0x4BF5, 57642 }, { 0x4BF7, 57647 }, { 0x4BF4, 57652 }, { 0x4BEB, 57657 }, { 0x4BE6, 57662 }, { 0x4BEC, 57667 }, { 0x4BF8, 57672 }, { 0x4BEF, 57677 }, { 0x4BE7, 57682 }, { 0x4BE2, 57687 }, { 0x4BE4, 57692 }, { 0x4BE5, 57697 }, { 0x4BE3, 57702 }, { 0x4BEA, 57707 }, { 0x4BF0, 57712 }, { 0x4BED, 57717 }, { 0x4BFC, 57722 }, { 0x4BF1, 57727 }, { 0x4BFE, 57732 }, { 0x4BF2, 57737 }, { 0x4BEE, 57742 }, { 0x4BF9, 57747 }, { 0x4BFA, 57752 }, { 0x4BFB, 57757 }, { 0x4BE0, 57762 }, { 0x4BF3, 57767 }, { 0x4BFD, 57772 }, { 0x4BFF, 57777 }, { 0x6D86, 57782 }, { 0x6D2F, 57785 }, { 0x6D2E, 57788 }, { 0x6C4F, 57791 }, { 0x6C4D, 57795 }, { 0x6D06, 57799 }, { 0x2931, 57801 }, { 0x71A3, 57804 }, { 0x6D8D, 57806 }, { 0x6D9D, 57808 }, { 0x6D9C, 57810 }, { 0x6D95, 57812 }, { 0x6FF5, 57814 }, { 0x1DC9, 57816 }, { 0x6E62, 57818 }, { 0x6DD6, 57819 }, { 0x3D8A, 57821 }, { 0x1C8D, 57822 }, { 0x05A1, 57824 }, { 0x21F1, 57826 }, { 0x6D35, 57827 }, { 0x6E31, 57828 }, { 0x1C60, 57831 }, { 0x45EC, 57833 }, { 0x45F4, 57836 }, { 0x45F8, 57839 }, { 0x45F6, 57842 }, { 0x45FA, 57845 }, { 0x45ED, 57848 }, { 0x45F2, 57851 }, { 0x45F0, 57854 }, { 0x45EE, 57857 }, { 0x460C, 57860 }, { 0x4603, 57863 }, { 0x4607, 57866 }, { 0x45F5, 57869 }, { 0x460B, 57872 }, { 0x4600, 57875 }, { 0x4621, 57878 }, { 0x45F9, 57881 }, { 0x4604, 57884 }, { 0x45FC, 57887 }, { 0x461A, 57890 }, { 0x4614, 57893 }, { 0x4611, 57896 }, { 0x45F7, 57899 }, { 0x460A, 57902 }, { 0x4619, 57905 }, { 0x461B, 57908 }, { 0x4605, 57911 }, { 0x45FB, 57914 }, { 0x4618, 57917 }, { 0x45FD, 57920 }, { 0x4617, 57923 }, { 0x461C, 57926 }, { 0x45F1, 57929 }, { 0x45EF, 57932 }, { 0x45F3, 57935 }, { 0x460D, 57938 }, { 0x4608, 57941 }, { 0x4601, 57944 }, { 0x4602, 57947 }, { 0x4615, 57950 }, { 0x460E, 57953 }, { 0x4613, 57956 }, { 0x4612, 57959 }, { 0x461D, 57962 }, { 0x4606, 57965 }, { 0x4609, 57968 }, { 0x45FF, 57971 }, { 0x45FE, 57974 }, { 0x4616, 57977 }, { 0x461E, 57980 }, { 0x4610, 57983 }, { 0x460F, 57986 }, { 0x461F, 57989 }, { 0x4620, 57992 }, { 0x4622, 57995 }, { 0x71B0, 57998 }, { 0x6FFF, 57999 }, { 0x6CC3, 58001 }, { 0x6FFC, 58002 }, { 0x6E46, 58003 }, { 0x6DCE, 58004 }, { 0x1DBE, 58006 }, { 0x7009, 58007 }, { 0x08E1, 58009 }, { 0x08A2, 58013 }, { 0x08D2, 58015 }, { 0x08DF, 58018 }, { 0x08A5, 58021 }, { 0x08A4, 58024 }, { 0x08D3, 58027 }, { 0x08A3, 58030 }, { 0x08EA, 58033 }, { 0x08EF, 58036 }, { 0x08EB, 58039 }, { 0x08EE, 58042 }, { 0x08ED, 58045 }, { 0x08F2, 58048 }, { 0x08E9, 58051 }, { 0x08F1, 58054 }, { 0x08F0, 58057 }, { 0x08EC, 58060 }, { 0x08FE, 58063 }, { 0x08F5, 58066 }, { 0x08F6, 58069 }, { 0x08DB, 58072 }, { 0x08D5, 58076 }, { 0x08DD, 58080 }, { 0x08D7, 58084 }, { 0x08D4, 58088 }, { 0x08DC, 58092 }, { 0x08DE, 58096 }, { 0x08D6, 58100 }, { 0x08D8, 58104 }, { 0x08E7, 58108 }, { 0x08D9, 58113 }, { 0x08E8, 58118 }, { 0x08DA, 58123 }, { 0x08FD, 58128 }, { 0x08A6, 58130 }, { 0x08AE, 58133 }, { 0x08A8, 58136 }, { 0x08B0, 58139 }, { 0x08AA, 58142 }, { 0x08A7, 58145 }, { 0x08AF, 58148 }, { 0x08B1, 58151 }, { 0x08C8, 58154 }, { 0x08B7, 58157 }, { 0x08C3, 58160 }, { 0x08B4, 58163 }, { 0x08D1, 58166 }, { 0x08A9, 58169 }, { 0x08B9, 58172 }, { 0x08B2, 58175 }, { 0x08CD, 58178 }, { 0x08CA, 58181 }, { 0x08C5, 58184 }, { 0x08C6, 58187 }, { 0x08CC, 58190 }, { 0x08F4, 58193 }, { 0x08F3, 58199 }, { 0x08D0, 58205 }, { 0x08C1, 58208 }, { 0x08AB, 58211 }, { 0x08CB, 58214 }, { 0x08C9, 58217 }, { 0x08B8, 58220 }, { 0x08BE, 58223 }, { 0x08C4, 58226 }, { 0x08B5, 58229 }, { 0x08BA, 58232 }, { 0x08B3, 58235 }, { 0x08B6, 58238 }, { 0x08C0, 58241 }, { 0x08BB, 58244 }, { 0x08C7, 58247 }, { 0x08E3, 58250 }, { 0x08E2, 58253 }, { 0x08CE, 58256 }, { 0x08CF, 58259 }, { 0x08C2, 58262 }, { 0x08BC, 58265 }, { 0x08E4, 58268 }, { 0x08BF, 58271 }, { 0x08BD, 58274 }, { 0x08E0, 58277 }, { 0x08AD, 58281 }, { 0x08AC, 58285 }, { 0x08E6, 58289 }, { 0x08E5, 58293 }, { 0x08F7, 58297 }, { 0x08FB, 58301 }, { 0x08F8, 58309 }, { 0x08FA, 58313 }, { 0x08F9, 58317 }, { 0x08FC, 58321 }, { 0x1EB5, 58325 }, { 0x1F6C, 58327 }, { 0x1DF5, 58331 }, { 0x6FED, 58332 }, { 0x6C77, 58333 }, { 0x6DCB, 58334 }, { 0x6CD0, 58335 }, { 0x6CEE, 58338 }, { 0x235A, 58339 }, { 0x235B, 58342 }, { 0x235C, 58345 }, { 0x235E, 58348 }, { 0x2362, 58351 }, { 0x236A, 58354 }, { 0x237A, 58357 }, { 0x239A, 58360 }, { 0x23DA, 58363 }, { 0x235D, 58366 }, { 0x235F, 58369 }, { 0x2363, 58372 }, { 0x236B, 58375 }, { 0x237B, 58378 }, { 0x239B, 58381 }, { 0x23DB, 58384 }, { 0x2360, 58387 }, { 0x2364, 58390 }, { 0x236C, 58393 }, { 0x237C, 58396 }, { 0x239C, 58399 }, { 0x23DC, 58402 }, { 0x2366, 58405 }, { 0x236E, 58408 }, { 0x237E, 58411 }, { 0x239E, 58414 }, { 0x23DE, 58417 }, { 0x2372, 58420 }, { 0x2382, 58423 }, { 0x23A2, 58426 }, { 0x23E2, 58429 }, { 0x238A, 58432 }, { 0x23AA, 58435 }, { 0x23EA, 58438 }, { 0x23BA, 58441 }, { 0x23FA, 58444 }, { 0x241A, 58447 }, { 0x2361, 58450 }, { 0x2365, 58453 }, { 0x236D, 58456 }, { 0x237D, 58459 }, { 0x239D, 58462 }, { 0x23DD, 58465 }, { 0x2367, 58468 }, { 0x236F, 58471 }, { 0x237F, 58474 }, { 0x239F, 58477 }, { 0x23DF, 58480 }, { 0x2373, 58483 }, { 0x2383, 58486 }, { 0x23A3, 58489 }, { 0x23E3, 58492 }, { 0x238B, 58495 }, { 0x23AB, 58498 }, { 0x23EB, 58501 }, { 0x23BB, 58504 }, { 0x23FB, 58507 }, { 0x241B, 58510 }, { 0x2368, 58513 }, { 0x2370, 58516 }, { 0x2380, 58519 }, { 0x23A0, 58522 }, { 0x23E0, 58525 }, { 0x2374, 58528 }, { 0x2384, 58531 }, { 0x23A4, 58534 }, { 0x23E4, 58537 }, { 0x238C, 58540 }, { 0x23AC, 58543 }, { 0x23EC, 58546 }, { 0x23BC, 58549 }, { 0x23FC, 58552 }, { 0x241C, 58555 }, { 0x2376, 58558 }, { 0x2386, 58561 }, { 0x23A6, 58564 }, { 0x23E6, 58567 }, { 0x238E, 58570 }, { 0x23AE, 58573 }, { 0x23EE, 58576 }, { 0x23BE, 58579 }, { 0x23FE, 58582 }, { 0x241E, 58585 }, { 0x2392, 58588 }, { 0x23B2, 58591 }, { 0x23F2, 58594 }, { 0x23C2, 58597 }, { 0x2402, 58600 }, { 0x2422, 58603 }, { 0x23CA, 58606 }, { 0x240A, 58609 }, { 0x242A, 58612 }, { 0x243A, 58615 }, { 0x2369, 58618 }, { 0x2371, 58621 }, { 0x2381, 58624 }, { 0x23A1, 58627 }, { 0x23E1, 58630 }, { 0x2375, 58633 }, { 0x2385, 58636 }, { 0x23A5, 58639 }, { 0x23E5, 58642 }, { 0x238D, 58645 }, { 0x23AD, 58648 }, { 0x23ED, 58651 }, { 0x23BD, 58654 }, { 0x23FD, 58657 }, { 0x241D, 58660 }, { 0x2377, 58663 }, { 0x2387, 58666 }, { 0x23A7, 58669 }, { 0x23E7, 58672 }, { 0x238F, 58675 }, { 0x23AF, 58678 }, { 0x23EF, 58681 }, { 0x23BF, 58684 }, { 0x23FF, 58687 }, { 0x241F, 58690 }, { 0x2393, 58693 }, { 0x23B3, 58696 }, { 0x23F3, 58699 }, { 0x23C3, 58702 }, { 0x2403, 58705 }, { 0x2423, 58708 }, { 0x23CB, 58711 }, { 0x240B, 58714 }, { 0x242B, 58717 }, { 0x243B, 58720 }, { 0x2378, 58723 }, { 0x2388, 58726 }, { 0x23A8, 58729 }, { 0x23E8, 58732 }, { 0x2390, 58735 }, { 0x23B0, 58738 }, { 0x23F0, 58741 }, { 0x23C0, 58744 }, { 0x2400, 58747 }, { 0x2420, 58750 }, { 0x2394, 58753 }, { 0x23B4, 58756 }, { 0x23F4, 58759 }, { 0x23C4, 58762 }, { 0x2404, 58765 }, { 0x2424, 58768 }, { 0x23CC, 58771 }, { 0x240C, 58774 }, { 0x242C, 58777 }, { 0x243C, 58780 }, { 0x2396, 58783 }, { 0x23B6, 58786 }, { 0x23F6, 58789 }, { 0x23C6, 58792 }, { 0x2406, 58795 }, { 0x2426, 58798 }, { 0x23CE, 58801 }, { 0x240E, 58804 }, { 0x242E, 58807 }, { 0x243E, 58810 }, { 0x23D2, 58813 }, { 0x2412, 58816 }, { 0x2432, 58819 }, { 0x2442, 58822 }, { 0x244A, 58825 }, { 0x2379, 58828 }, { 0x2389, 58831 }, { 0x23A9, 58834 }, { 0x23E9, 58837 }, { 0x2391, 58840 }, { 0x23B1, 58843 }, { 0x23F1, 58846 }, { 0x23C1, 58849 }, { 0x2401, 58852 }, { 0x2421, 58855 }, { 0x2395, 58858 }, { 0x23B5, 58861 }, { 0x23F5, 58864 }, { 0x23C5, 58867 }, { 0x2405, 58870 }, { 0x2425, 58873 }, { 0x23CD, 58876 }, { 0x240D, 58879 }, { 0x242D, 58882 }, { 0x243D, 58885 }, { 0x2397, 58888 }, { 0x23B7, 58891 }, { 0x23F7, 58894 }, { 0x23C7, 58897 }, { 0x2407, 58900 }, { 0x2427, 58903 }, { 0x23CF, 58906 }, { 0x240F, 58909 }, { 0x242F, 58912 }, { 0x243F, 58915 }, { 0x23D3, 58918 }, { 0x2413, 58921 }, { 0x2433, 58924 }, { 0x2443, 58927 }, { 0x244B, 58930 }, { 0x2398, 58933 }, { 0x23B8, 58936 }, { 0x23F8, 58939 }, { 0x23C8, 58942 }, { 0x2408, 58945 }, { 0x2428, 58948 }, { 0x23D0, 58951 }, { 0x2410, 58954 }, { 0x2430, 58957 }, { 0x2440, 58960 }, { 0x23D4, 58963 }, { 0x2414, 58966 }, { 0x2434, 58969 }, { 0x2444, 58972 }, { 0x244C, 58975 }, { 0x23D6, 58978 }, { 0x2416, 58981 }, { 0x2436, 58984 }, { 0x2446, 58987 }, { 0x244E, 58990 }, { 0x2452, 58993 }, { 0x2399, 58996 }, { 0x23B9, 58999 }, { 0x23F9, 59002 }, { 0x23C9, 59005 }, { 0x2409, 59008 }, { 0x2429, 59011 }, { 0x23D1, 59014 }, { 0x2411, 59017 }, { 0x2431, 59020 }, { 0x2441, 59023 }, { 0x23D5, 59026 }, { 0x2415, 59029 }, { 0x2435, 59032 }, { 0x2445, 59035 }, { 0x244D, 59038 }, { 0x23D7, 59041 }, { 0x2417, 59044 }, { 0x2437, 59047 }, { 0x2447, 59050 }, { 0x244F, 59053 }, { 0x2453, 59056 }, { 0x23D8, 59059 }, { 0x2418, 59062 }, { 0x2438, 59065 }, { 0x2448, 59068 }, { 0x2450, 59071 }, { 0x2454, 59074 }, { 0x2456, 59077 }, { 0x23D9, 59080 }, { 0x2419, 59083 }, { 0x2439, 59086 }, { 0x2449, 59089 }, { 0x2451, 59092 }, { 0x2455, 59095 }, { 0x2457, 59098 }, { 0x2458, 59101 }, { 0x2459, 59104 }, { 0x6C6A, 59107 }, { 0x6D10, 59108 }, { 0x217B, 59109 }, { 0x0077, 59111 }, { 0x6FB9, 59112 }, { 0x6D4F, 59114 }, { 0x2711, 59115 }, { 0x6B6C, 59117 }, { 0x6B6D, 59119 }, { 0x1E22, 59121 }, { 0x2712, 59124 }, { 0x1E26, 59127 }, { 0x229C, 59129 }, { 0x1E1E, 59135 }, { 0x1E23, 59137 }, { 0x6E7B, 59140 }, { 0x1FBA, 59143 }, { 0x1FBF, 59146 }, { 0x1FBB, 59149 }, { 0x1FBE, 59152 }, { 0x1FBD, 59155 }, { 0x1FC2, 59158 }, { 0x2044, 59161 }, { 0x1FC1, 59164 }, { 0x1FC0, 59167 }, { 0x1FBC, 59170 }, { 0x230C, 59173 }, { 0x202A, 59178 }, { 0x202B, 59183 }, { 0x202C, 59188 }, { 0x202D, 59193 }, { 0x202E, 59198 }, { 0x202F, 59203 }, { 0x2030, 59208 }, { 0x2031, 59213 }, { 0x2032, 59218 }, { 0x2033, 59223 }, { 0x2034, 59228 }, { 0x2035, 59233 }, { 0x2036, 59238 }, { 0x2037, 59243 }, { 0x2038, 59248 }, { 0x2039, 59253 }, { 0x203A, 59258 }, { 0x203B, 59263 }, { 0x203C, 59268 }, { 0x203D, 59273 }, { 0x203E, 59278 }, { 0x203F, 59283 }, { 0x2040, 59288 }, { 0x2041, 59293 }, { 0x2042, 59298 }, { 0x2043, 59303 }, { 0x2010, 59308 }, { 0x2011, 59313 }, { 0x2012, 59318 }, { 0x2013, 59323 }, { 0x2014, 59328 }, { 0x2015, 59333 }, { 0x2016, 59338 }, { 0x2017, 59343 }, { 0x2018, 59348 }, { 0x2019, 59353 }, { 0x201A, 59358 }, { 0x201B, 59363 }, { 0x201C, 59368 }, { 0x201D, 59373 }, { 0x201E, 59378 }, { 0x201F, 59383 }, { 0x2020, 59388 }, { 0x2021, 59393 }, { 0x2022, 59398 }, { 0x2023, 59403 }, { 0x2024, 59408 }, { 0x2025, 59413 }, { 0x2026, 59418 }, { 0x2027, 59423 }, { 0x2028, 59428 }, { 0x2029, 59433 }, { 0x1E1F, 59438 }, { 0x1E20, 59440 }, { 0x2284, 59442 }, { 0x2518, 59445 }, { 0x2519, 59448 }, { 0x1E25, 59450 }, { 0x2CD5, 59452 }, { 0x2CE3, 59455 }, { 0x2CD7, 59459 }, { 0x2CE5, 59462 }, { 0x2CDC, 59466 }, { 0x2CEA, 59469 }, { 0x2CD6, 59473 }, { 0x2CE4, 59476 }, { 0x2CED, 59480 }, { 0x2CD3, 59484 }, { 0x2CE1, 59487 }, { 0x2CD0, 59491 }, { 0x2CDE, 59494 }, { 0x2CD4, 59498 }, { 0x2CE2, 59501 }, { 0x2CD2, 59505 }, { 0x2CE0, 59508 }, { 0x2CCF, 59512 }, { 0x2CDD, 59515 }, { 0x2CD1, 59519 }, { 0x2CDF, 59522 }, { 0x2CD8, 59526 }, { 0x2CE6, 59529 }, { 0x2CD9, 59533 }, { 0x2CE7, 59536 }, { 0x2CDB, 59540 }, { 0x2CE9, 59543 }, { 0x2CDA, 59547 }, { 0x2CE8, 59550 }, { 0x6B6A, 59554 }, { 0x6B6B, 59560 }, { 0x2CEC, 59566 }, { 0x2CEB, 59570 }, { 0x1FC3, 59574 }, { 0x2CB7, 59577 }, { 0x2D2E, 59583 }, { 0x2CBB, 59586 }, { 0x2D24, 59592 }, { 0x2CBA, 59595 }, { 0x2D25, 59601 }, { 0x2D2A, 59605 }, { 0x2D26, 59609 }, { 0x2D29, 59613 }, { 0x2D28, 59617 }, { 0x2D2D, 59621 }, { 0x2D2C, 59625 }, { 0x2D2B, 59629 }, { 0x2D27, 59633 }, { 0x2CBC, 59637 }, { 0x2CBE, 59643 }, { 0x1FC4, 59649 }, { 0x2CC9, 59652 }, { 0x2CB9, 59655 }, { 0x2CCA, 59661 }, { 0x2D20, 59665 }, { 0x2CCB, 59669 }, { 0x2CCE, 59673 }, { 0x2CCD, 59677 }, { 0x2D23, 59681 }, { 0x2D22, 59685 }, { 0x2D21, 59689 }, { 0x2CCC, 59693 }, { 0x1FC5, 59697 }, { 0x1FCD, 59700 }, { 0x2CB8, 59703 }, { 0x2CC0, 59709 }, { 0x2CC5, 59713 }, { 0x2CC1, 59717 }, { 0x2CC4, 59721 }, { 0x2CC3, 59725 }, { 0x2CC8, 59729 }, { 0x2CC7, 59733 }, { 0x2CC6, 59737 }, { 0x2CC2, 59741 }, { 0x1FC8, 59745 }, { 0x2CBD, 59748 }, { 0x1FC9, 59754 }, { 0x1FCB, 59757 }, { 0x1FC7, 59760 }, { 0x1FCC, 59763 }, { 0x1FC6, 59766 }, { 0x1FCA, 59769 }, { 0x2AC3, 59772 }, { 0x2512, 59775 }, { 0x1E24, 59778 }, { 0x222C, 59781 }, { 0x2592, 59784 }, { 0x1E21, 59787 }, { 0x2D3F, 59790 }, { 0x2D42, 59793 }, { 0x2D40, 59796 }, { 0x2D43, 59799 }, { 0x2D41, 59802 }, { 0x2D58, 59805 }, { 0x2D5B, 59808 }, { 0x2D59, 59811 }, { 0x2D5C, 59814 }, { 0x2D5A, 59817 }, { 0x2D44, 59820 }, { 0x2D47, 59823 }, { 0x2D45, 59826 }, { 0x2D48, 59829 }, { 0x2D46, 59832 }, { 0x2D5D, 59835 }, { 0x2D60, 59838 }, { 0x2D5E, 59841 }, { 0x2D61, 59844 }, { 0x2D5F, 59847 }, { 0x2D53, 59850 }, { 0x2D56, 59853 }, { 0x2D54, 59856 }, { 0x2D57, 59859 }, { 0x2D55, 59862 }, { 0x2D65, 59865 }, { 0x2D68, 59868 }, { 0x2D66, 59871 }, { 0x2D69, 59874 }, { 0x2D67, 59877 }, { 0x2D49, 59880 }, { 0x2D4C, 59883 }, { 0x2D4A, 59886 }, { 0x2D4D, 59889 }, { 0x2D4B, 59892 }, { 0x2D4E, 59895 }, { 0x2D51, 59898 }, { 0x2D4F, 59901 }, { 0x2D52, 59904 }, { 0x2D50, 59907 }, { 0x2D6A, 59910 }, { 0x2D6C, 59913 }, { 0x2D6B, 59916 }, { 0x2D6D, 59919 }, { 0x2D62, 59922 }, { 0x2D64, 59925 }, { 0x2D63, 59928 }, { 0x2511, 59931 }, { 0x1F13, 59933 }, { 0x2510, 59936 }, { 0x2D15, 59939 }, { 0x2CEF, 59942 }, { 0x2CF4, 59945 }, { 0x2CFF, 59948 }, { 0x2CF8, 59951 }, { 0x2CF0, 59954 }, { 0x2D11, 59957 }, { 0x2CFA, 59960 }, { 0x2CF3, 59963 }, { 0x2CF2, 59966 }, { 0x2D01, 59969 }, { 0x2D13, 59972 }, { 0x2D0F, 59975 }, { 0x2CB6, 59978 }, { 0x2D16, 59981 }, { 0x2D09, 59984 }, { 0x2CF9, 59987 }, { 0x2D03, 59990 }, { 0x2CF7, 59993 }, { 0x2D10, 59996 }, { 0x2CFC, 59999 }, { 0x2CFE, 60002 }, { 0x2CF6, 60005 }, { 0x2D07, 60008 }, { 0x2CFD, 60011 }, { 0x2D1F, 60014 }, { 0x2D0D, 60017 }, { 0x2D17, 60020 }, { 0x2CF5, 60023 }, { 0x2D00, 60026 }, { 0x2D1A, 60029 }, { 0x2CF1, 60032 }, { 0x2CFB, 60035 }, { 0x6C3A, 60038 }, { 0x2D14, 60041 }, { 0x2D0A, 60044 }, { 0x2CB5, 60047 }, { 0x2D08, 60050 }, { 0x2D12, 60053 }, { 0x2D02, 60056 }, { 0x2D04, 60059 }, { 0x2D1E, 60062 }, { 0x2D18, 60065 }, { 0x2CB3, 60068 }, { 0x2D19, 60071 }, { 0x2D1D, 60074 }, { 0x2D0B, 60077 }, { 0x6C39, 60080 }, { 0x2D0E, 60083 }, { 0x2D0C, 60086 }, { 0x2D05, 60089 }, { 0x2D1B, 60092 }, { 0x2D1C, 60095 }, { 0x2CB4, 60098 }, { 0x2D06, 60101 }, { 0x251A, 60104 }, { 0x1F12, 60106 }, { 0x7003, 60111 }, { 0x251B, 60114 }, { 0x2513, 60116 }, { 0x2590, 60118 }, { 0x2516, 60124 }, { 0x6CE7, 60128 }, { 0x1EBB, 60130 }, { 0x1DB7, 60132 }, { 0x6CD6, 60134 }, { 0x6CAE, 60136 }, { 0x6D0A, 60137 }, { 0x6CC7, 60141 }, { 0x21EE, 60143 }, { 0x6BC4, 60145 }, { 0x6E69, 60152 }, { 0x6CA9, 60154 }, { 0x6FFE, 60155 }, { 0x6C3B, 60156 }, { 0x43CE, 60157 }, { 0x43CF, 60160 }, { 0x43D0, 60163 }, { 0x43D1, 60166 }, { 0x43D2, 60169 }, { 0x43D3, 60172 }, { 0x43D4, 60175 }, { 0x43D5, 60178 }, { 0x43D6, 60181 }, { 0x43D7, 60184 }, { 0x43D8, 60187 }, { 0x43D9, 60190 }, { 0x43DA, 60193 }, { 0x43DB, 60196 }, { 0x43DC, 60199 }, { 0x43DD, 60202 }, { 0x43DE, 60205 }, { 0x43DF, 60208 }, { 0x43E0, 60211 }, { 0x43E1, 60214 }, { 0x43E2, 60217 }, { 0x43E3, 60220 }, { 0x43E4, 60223 }, { 0x43E5, 60226 }, { 0x43E6, 60229 }, { 0x43E7, 60232 }, { 0x43E8, 60235 }, { 0x43E9, 60238 }, { 0x43EA, 60241 }, { 0x43EB, 60244 }, { 0x43EC, 60247 }, { 0x43ED, 60250 }, { 0x43EE, 60253 }, { 0x43EF, 60256 }, { 0x43F0, 60259 }, { 0x43F1, 60262 }, { 0x43F2, 60265 }, { 0x43F3, 60268 }, { 0x43F4, 60271 }, { 0x43F5, 60274 }, { 0x43F6, 60277 }, { 0x43F7, 60280 }, { 0x43F8, 60283 }, { 0x43F9, 60286 }, { 0x43FA, 60289 }, { 0x43FB, 60292 }, { 0x43FC, 60295 }, { 0x43FD, 60298 }, { 0x43FE, 60301 }, { 0x43FF, 60304 }, { 0x4400, 60307 }, { 0x4401, 60310 }, { 0x4402, 60313 }, { 0x4403, 60316 }, { 0x4404, 60319 }, { 0x1F71, 60322 }, { 0x1F1F, 60325 }, { 0x4164, 60329 }, { 0x4160, 60333 }, { 0x416D, 60337 }, { 0x4176, 60341 }, { 0x4177, 60345 }, { 0x4178, 60349 }, { 0x4175, 60353 }, { 0x4171, 60357 }, { 0x417B, 60361 }, { 0x417A, 60365 }, { 0x4161, 60369 }, { 0x4162, 60373 }, { 0x4166, 60377 }, { 0x4168, 60381 }, { 0x4179, 60385 }, { 0x4173, 60389 }, { 0x416F, 60393 }, { 0x416C, 60397 }, { 0x416A, 60401 }, { 0x416B, 60405 }, { 0x4165, 60409 }, { 0x4167, 60413 }, { 0x416E, 60417 }, { 0x4163, 60421 }, { 0x4172, 60425 }, { 0x4169, 60429 }, { 0x4156, 60433 }, { 0x4155, 60438 }, { 0x4154, 60443 }, { 0x4158, 60448 }, { 0x4157, 60453 }, { 0x4159, 60458 }, { 0x4170, 60463 }, { 0x4174, 60467 }, { 0x415C, 60471 }, { 0x415B, 60476 }, { 0x415A, 60481 }, { 0x415E, 60486 }, { 0x415D, 60491 }, { 0x415F, 60496 }, { 0x413C, 60501 }, { 0x4138, 60505 }, { 0x4145, 60509 }, { 0x414E, 60513 }, { 0x414F, 60517 }, { 0x4150, 60521 }, { 0x414D, 60525 }, { 0x4149, 60529 }, { 0x4153, 60533 }, { 0x4152, 60537 }, { 0x4139, 60541 }, { 0x413A, 60545 }, { 0x413E, 60549 }, { 0x4140, 60553 }, { 0x4151, 60557 }, { 0x414B, 60561 }, { 0x4147, 60565 }, { 0x4144, 60569 }, { 0x4142, 60573 }, { 0x4143, 60577 }, { 0x413D, 60581 }, { 0x413F, 60585 }, { 0x4146, 60589 }, { 0x413B, 60593 }, { 0x414A, 60597 }, { 0x4141, 60601 }, { 0x412E, 60605 }, { 0x412D, 60610 }, { 0x412C, 60615 }, { 0x4130, 60620 }, { 0x412F, 60625 }, { 0x4131, 60630 }, { 0x4148, 60635 }, { 0x414C, 60639 }, { 0x4134, 60643 }, { 0x4133, 60648 }, { 0x4132, 60653 }, { 0x4136, 60658 }, { 0x4135, 60663 }, { 0x4137, 60668 }, { 0x6F0F, 60673 }, { 0x6EE0, 60675 }, { 0x2672, 60677 }, { 0x2670, 60682 }, { 0x2671, 60687 }, { 0x2673, 60692 }, { 0x6DDB, 60697 }, { 0x70B2, 60703 }, { 0x1E4D, 60705 }, { 0x22DA, 60707 }, { 0x22DF, 60712 }, { 0x22DB, 60717 }, { 0x22DE, 60722 }, { 0x22DD, 60727 }, { 0x22E2, 60732 }, { 0x6B4D, 60737 }, { 0x22E1, 60742 }, { 0x22E0, 60747 }, { 0x22DC, 60752 }, { 0x22E3, 60757 }, { 0x22D0, 60762 }, { 0x22D5, 60767 }, { 0x22D1, 60772 }, { 0x22D4, 60777 }, { 0x22D3, 60782 }, { 0x22D8, 60787 }, { 0x22D7, 60792 }, { 0x22D6, 60797 }, { 0x22D2, 60802 }, { 0x22D9, 60807 }, { 0x22E4, 60812 }, { 0x22E9, 60818 }, { 0x22E5, 60824 }, { 0x22E8, 60830 }, { 0x22E7, 60836 }, { 0x22EC, 60842 }, { 0x6B4E, 60848 }, { 0x22EB, 60854 }, { 0x22EA, 60860 }, { 0x22E6, 60866 }, { 0x22ED, 60872 }, { 0x1DAC, 60878 }, { 0x2208, 60879 }, { 0x6D67, 60881 }, { 0x21FD, 60882 }, { 0x21FC, 60885 }, { 0x1C5C, 60888 }, { 0x6DE2, 60890 }, { 0x421C, 60891 }, { 0x4224, 60894 }, { 0x4229, 60897 }, { 0x4232, 60900 }, { 0x423B, 60903 }, { 0x423E, 60906 }, { 0x421D, 60909 }, { 0x421E, 60912 }, { 0x4220, 60915 }, { 0x4223, 60918 }, { 0x4225, 60921 }, { 0x4226, 60924 }, { 0x4228, 60927 }, { 0x422A, 60930 }, { 0x422B, 60933 }, { 0x422C, 60936 }, { 0x422E, 60939 }, { 0x4230, 60942 }, { 0x422F, 60945 }, { 0x4233, 60948 }, { 0x4234, 60951 }, { 0x4235, 60954 }, { 0x4237, 60957 }, { 0x4239, 60960 }, { 0x423C, 60963 }, { 0x423D, 60966 }, { 0x423F, 60969 }, { 0x421F, 60972 }, { 0x4222, 60975 }, { 0x4241, 60978 }, { 0x4227, 60981 }, { 0x4243, 60984 }, { 0x422D, 60987 }, { 0x4221, 60990 }, { 0x4231, 60993 }, { 0x4236, 60996 }, { 0x4238, 60999 }, { 0x423A, 61002 }, { 0x4240, 61005 }, { 0x4242, 61008 }, { 0x1D91, 61011 }, { 0x1E7E, 61013 }, { 0x1E82, 61018 }, { 0x1E7B, 61024 }, { 0x1E7F, 61030 }, { 0x1E81, 61034 }, { 0x1E7C, 61038 }, { 0x232C, 61048 }, { 0x2633, 61052 }, { 0x6D28, 61056 }, { 0x2238, 61057 }, { 0x2489, 61065 }, { 0x2486, 61071 }, { 0x6F63, 61076 }, { 0x2123, 61078 }, { 0x6CDE, 61079 }, { 0x6F6E, 61083 }, { 0x2636, 61085 }, { 0x220B, 61086 }, { 0x6C5A, 61088 }, { 0x71CB, 61090 }, { 0x49EB, 61091 }, { 0x49EA, 61095 }, { 0x49DC, 61097 }, { 0x49EC, 61100 }, { 0x49E9, 61103 }, { 0x49AD, 61106 }, { 0x49AC, 61109 }, { 0x49DD, 61112 }, { 0x49AA, 61115 }, { 0x49AB, 61120 }, { 0x49DF, 61123 }, { 0x49E1, 61127 }, { 0x49DE, 61131 }, { 0x49E6, 61135 }, { 0x49E8, 61139 }, { 0x49E5, 61143 }, { 0x49E0, 61147 }, { 0x49E7, 61151 }, { 0x49E2, 61155 }, { 0x49F1, 61159 }, { 0x49E3, 61164 }, { 0x49F2, 61169 }, { 0x49E4, 61174 }, { 0x49AE, 61179 }, { 0x49B0, 61182 }, { 0x49B2, 61185 }, { 0x49AF, 61188 }, { 0x49B7, 61191 }, { 0x49B9, 61194 }, { 0x49D0, 61197 }, { 0x49BF, 61200 }, { 0x49CB, 61203 }, { 0x49B6, 61206 }, { 0x49BC, 61209 }, { 0x49DB, 61212 }, { 0x49B1, 61215 }, { 0x49C1, 61218 }, { 0x49BA, 61221 }, { 0x49D5, 61224 }, { 0x49D2, 61227 }, { 0x49CD, 61230 }, { 0x49B8, 61233 }, { 0x49CE, 61236 }, { 0x49D4, 61239 }, { 0x49DA, 61242 }, { 0x49C9, 61245 }, { 0x49B3, 61248 }, { 0x49D7, 61251 }, { 0x49D3, 61254 }, { 0x49D1, 61257 }, { 0x49C0, 61260 }, { 0x49C6, 61263 }, { 0x49CC, 61266 }, { 0x49BD, 61269 }, { 0x49C2, 61272 }, { 0x49BB, 61275 }, { 0x49D6, 61278 }, { 0x49BE, 61281 }, { 0x49C8, 61284 }, { 0x49C3, 61287 }, { 0x49CF, 61290 }, { 0x49D8, 61293 }, { 0x49D9, 61296 }, { 0x49CA, 61299 }, { 0x49C4, 61302 }, { 0x49C7, 61305 }, { 0x49C5, 61308 }, { 0x49EE, 61311 }, { 0x49ED, 61316 }, { 0x49B5, 61320 }, { 0x49B4, 61324 }, { 0x49F0, 61328 }, { 0x49EF, 61332 }, { 0x6DD2, 61336 }, { 0x1C5F, 61338 }, { 0x6DC2, 61340 }, { 0x6D74, 61341 }, { 0x6D97, 61343 }, { 0x1428, 61344 }, { 0x1426, 61347 }, { 0x1427, 61351 }, { 0x1414, 61355 }, { 0x1415, 61358 }, { 0x1416, 61361 }, { 0x141E, 61364 }, { 0x141B, 61367 }, { 0x1418, 61370 }, { 0x1425, 61373 }, { 0x1417, 61376 }, { 0x1422, 61379 }, { 0x141F, 61382 }, { 0x141C, 61385 }, { 0x141D, 61388 }, { 0x1421, 61391 }, { 0x1424, 61394 }, { 0x141A, 61397 }, { 0x1423, 61400 }, { 0x1420, 61403 }, { 0x1419, 61406 }, { 0x1C61, 61409 }, { 0x7186, 61411 }, { 0x6DEA, 61413 }, { 0x1C1F, 61416 }, { 0x1C1D, 61420 }, { 0x2133, 61423 }, { 0x2132, 61426 }, { 0x6D29, 61428 }, { 0x219D, 61430 }, { 0x0AEB, 61431 }, { 0x0ADA, 61435 }, { 0x0AE9, 61438 }, { 0x0AA5, 61441 }, { 0x0AA8, 61445 }, { 0x0AA7, 61448 }, { 0x0ADB, 61451 }, { 0x0AA6, 61454 }, { 0x0AFB, 61457 }, { 0x0AFC, 61460 }, { 0x0AF2, 61463 }, { 0x0AF7, 61466 }, { 0x0AF3, 61469 }, { 0x0AF6, 61472 }, { 0x0AF5, 61475 }, { 0x0AFA, 61478 }, { 0x0AF1, 61481 }, { 0x0AF9, 61484 }, { 0x0AF8, 61487 }, { 0x0AF4, 61490 }, { 0x0AE3, 61493 }, { 0x0ADD, 61497 }, { 0x0AE6, 61501 }, { 0x0ADF, 61505 }, { 0x0ADC, 61509 }, { 0x0AE5, 61513 }, { 0x0AE8, 61517 }, { 0x0AE4, 61521 }, { 0x0ADE, 61525 }, { 0x0AE7, 61529 }, { 0x0AE0, 61533 }, { 0x0AEF, 61537 }, { 0x0AE1, 61542 }, { 0x0AF0, 61547 }, { 0x0AE2, 61552 }, { 0x0AEA, 61557 }, { 0x0AA9, 61560 }, { 0x0AB1, 61563 }, { 0x0AAB, 61566 }, { 0x0AB4, 61569 }, { 0x0AAD, 61572 }, { 0x0AAA, 61575 }, { 0x0AB3, 61578 }, { 0x0AB6, 61581 }, { 0x0ACD, 61584 }, { 0x0ABC, 61587 }, { 0x0AC8, 61590 }, { 0x0AB2, 61593 }, { 0x0AEC, 61596 }, { 0x0AB9, 61599 }, { 0x0AD9, 61602 }, { 0x0AAC, 61605 }, { 0x0ABE, 61608 }, { 0x0AB7, 61611 }, { 0x0AD3, 61614 }, { 0x0ACF, 61617 }, { 0x0ACA, 61620 }, { 0x0AB5, 61623 }, { 0x0ACB, 61626 }, { 0x0AD1, 61629 }, { 0x0AD8, 61632 }, { 0x0AC6, 61635 }, { 0x0AAE, 61638 }, { 0x0AD5, 61641 }, { 0x0AD0, 61644 }, { 0x0ACE, 61647 }, { 0x0ABD, 61650 }, { 0x0AC3, 61653 }, { 0x0AC9, 61656 }, { 0x0ABA, 61659 }, { 0x0ABF, 61662 }, { 0x0AB8, 61665 }, { 0x0AD4, 61668 }, { 0x0ABB, 61671 }, { 0x0AC5, 61674 }, { 0x0AC0, 61677 }, { 0x0ACC, 61680 }, { 0x0AD2, 61683 }, { 0x0AD6, 61686 }, { 0x0AD7, 61689 }, { 0x0AC7, 61692 }, { 0x0AC1, 61695 }, { 0x0AC4, 61698 }, { 0x0AEC, 61701 }, { 0x0AC2, 61704 }, { 0x0AB0, 61707 }, { 0x0AAF, 61711 }, { 0x0AEE, 61715 }, { 0x0AED, 61719 }, { 0x6F78, 61723 }, { 0x6F52, 61729 }, { 0x6F55, 61731 }, { 0x6F54, 61736 }, { 0x6D41, 61741 }, { 0x2D3E, 61742 }, { 0x1DB1, 61745 }, { 0x25AC, 61747 }, { 0x25BC, 61752 }, { 0x25BD, 61757 }, { 0x25B5, 61762 }, { 0x25B7, 61767 }, { 0x25B3, 61772 }, { 0x1DB0, 61777 }, { 0x25AB, 61779 }, { 0x25B8, 61784 }, { 0x25BA, 61789 }, { 0x25B4, 61794 }, { 0x25B9, 61799 }, { 0x25B6, 61803 }, { 0x2124, 61808 }, { 0x233A, 61809 }, { 0x6A70, 61814 }, { 0x6A79, 61819 }, { 0x6A67, 61824 }, { 0x6A64, 61829 }, { 0x6A75, 61833 }, { 0x6A7E, 61838 }, { 0x6A6C, 61843 }, { 0x6A71, 61848 }, { 0x6A7A, 61853 }, { 0x6A68, 61858 }, { 0x6A8B, 61863 }, { 0x6A60, 61866 }, { 0x6A74, 61870 }, { 0x6A7D, 61875 }, { 0x6A6B, 61880 }, { 0x6A73, 61885 }, { 0x6A7C, 61890 }, { 0x6A6A, 61895 }, { 0x6A78, 61900 }, { 0x6A81, 61905 }, { 0x6A6F, 61910 }, { 0x6A82, 61915 }, { 0x6A62, 61918 }, { 0x6A77, 61922 }, { 0x6A80, 61927 }, { 0x6A6E, 61932 }, { 0x6A65, 61937 }, { 0x6A8A, 61941 }, { 0x6A63, 61944 }, { 0x6A76, 61948 }, { 0x6A7F, 61953 }, { 0x6A6D, 61958 }, { 0x6A61, 61963 }, { 0x6A72, 61967 }, { 0x6A7B, 61972 }, { 0x6A69, 61977 }, { 0x6A66, 61982 }, { 0x6A88, 61986 }, { 0x6A84, 61989 }, { 0x6A83, 61992 }, { 0x6A86, 61995 }, { 0x6A87, 61998 }, { 0x6A89, 62001 }, { 0x6A85, 62004 }, { 0x227A, 62007 }, { 0x07BD, 62009 }, { 0x07BF, 62012 }, { 0x07BE, 62015 }, { 0x07C0, 62018 }, { 0x07C6, 62021 }, { 0x07C7, 62024 }, { 0x07C8, 62027 }, { 0x07C9, 62030 }, { 0x07CC, 62033 }, { 0x07CE, 62036 }, { 0x07CF, 62039 }, { 0x07CA, 62042 }, { 0x07D1, 62045 }, { 0x07C2, 62048 }, { 0x07CB, 62051 }, { 0x07C3, 62054 }, { 0x07D4, 62057 }, { 0x07D0, 62060 }, { 0x07CD, 62063 }, { 0x07C4, 62066 }, { 0x07D3, 62069 }, { 0x07C5, 62072 }, { 0x07BC, 62075 }, { 0x07C1, 62078 }, { 0x07D2, 62081 }, { 0x07D7, 62084 }, { 0x07D5, 62087 }, { 0x07D8, 62090 }, { 0x07D6, 62092 }, { 0x4CCE, 62095 }, { 0x4CCF, 62098 }, { 0x4D10, 62101 }, { 0x4D11, 62104 }, { 0x4D0E, 62107 }, { 0x4D0C, 62111 }, { 0x4D0F, 62115 }, { 0x4D0D, 62119 }, { 0x4D0B, 62123 }, { 0x4CED, 62127 }, { 0x4CE6, 62130 }, { 0x4CDE, 62133 }, { 0x4CD4, 62136 }, { 0x4CDA, 62139 }, { 0x4CD2, 62142 }, { 0x4CEC, 62145 }, { 0x4CD6, 62148 }, { 0x4CD0, 62151 }, { 0x4CE9, 62154 }, { 0x4CDF, 62157 }, { 0x4CDB, 62160 }, { 0x4CDC, 62163 }, { 0x4CE8, 62166 }, { 0x4CEB, 62169 }, { 0x4CD8, 62172 }, { 0x4CE3, 62175 }, { 0x4CE7, 62178 }, { 0x4CE5, 62181 }, { 0x4CD5, 62184 }, { 0x4CE2, 62187 }, { 0x4CD1, 62190 }, { 0x4CD3, 62193 }, { 0x4CD7, 62196 }, { 0x4CDD, 62199 }, { 0x4CEA, 62202 }, { 0x4CD9, 62205 }, { 0x4CE0, 62208 }, { 0x4CE4, 62211 }, { 0x4CE1, 62214 }, { 0x4D0A, 62217 }, { 0x4CFC, 62221 }, { 0x4CF2, 62225 }, { 0x4CF8, 62229 }, { 0x4CF0, 62233 }, { 0x4D09, 62237 }, { 0x4CF4, 62241 }, { 0x4CEE, 62245 }, { 0x4D06, 62249 }, { 0x4CFD, 62253 }, { 0x4CF9, 62257 }, { 0x4CFA, 62261 }, { 0x4D05, 62265 }, { 0x4D08, 62269 }, { 0x4CF6, 62273 }, { 0x4D01, 62277 }, { 0x4D04, 62281 }, { 0x4D03, 62285 }, { 0x4CF3, 62289 }, { 0x4D00, 62293 }, { 0x4CEF, 62297 }, { 0x4CF1, 62301 }, { 0x4CF5, 62305 }, { 0x4CFB, 62309 }, { 0x4D07, 62313 }, { 0x4CF7, 62317 }, { 0x4CFE, 62321 }, { 0x4D02, 62325 }, { 0x4CFF, 62329 }, { 0x71AE, 62333 }, { 0x6E89, 62336 }, { 0x2199, 62340 }, { 0x1E78, 62341 }, { 0x6FCB, 62344 }, { 0x493F, 62345 }, { 0x4942, 62348 }, { 0x4940, 62351 }, { 0x4941, 62354 }, { 0x4959, 62357 }, { 0x4947, 62360 }, { 0x4954, 62363 }, { 0x4945, 62366 }, { 0x4961, 62369 }, { 0x4949, 62372 }, { 0x4943, 62375 }, { 0x495E, 62378 }, { 0x495B, 62381 }, { 0x4956, 62384 }, { 0x4957, 62387 }, { 0x495D, 62390 }, { 0x4960, 62393 }, { 0x4952, 62396 }, { 0x495F, 62399 }, { 0x495C, 62402 }, { 0x495A, 62405 }, { 0x4948, 62408 }, { 0x494E, 62411 }, { 0x4955, 62414 }, { 0x4946, 62417 }, { 0x494A, 62420 }, { 0x4944, 62423 }, { 0x4951, 62426 }, { 0x494B, 62429 }, { 0x4958, 62432 }, { 0x4963, 62435 }, { 0x4962, 62438 }, { 0x4953, 62441 }, { 0x494C, 62444 }, { 0x494F, 62447 }, { 0x4950, 62450 }, { 0x494D, 62453 }, { 0x4964, 62456 }, { 0x6CF0, 62459 }, { 0x6CF7, 62461 }, { 0x6086, 62463 }, { 0x6087, 62467 }, { 0x6088, 62471 }, { 0x6089, 62477 }, { 0x6083, 62483 }, { 0x6084, 62487 }, { 0x6085, 62493 }, { 0x60A6, 62499 }, { 0x60F1, 62503 }, { 0x606F, 62506 }, { 0x60F9, 62510 }, { 0x6098, 62513 }, { 0x606E, 62517 }, { 0x610B, 62521 }, { 0x60D9, 62526 }, { 0x60D7, 62530 }, { 0x60DB, 62534 }, { 0x60DD, 62538 }, { 0x60C7, 62542 }, { 0x60A5, 62548 }, { 0x6140, 62554 }, { 0x6071, 62558 }, { 0x6117, 62561 }, { 0x6118, 62564 }, { 0x608A, 62568 }, { 0x608B, 62572 }, { 0x608F, 62576 }, { 0x6090, 62580 }, { 0x6123, 62584 }, { 0x6122, 62588 }, { 0x60C1, 62592 }, { 0x609F, 62596 }, { 0x6113, 62600 }, { 0x606B, 62605 }, { 0x60B6, 62610 }, { 0x60B5, 62615 }, { 0x60BC, 62620 }, { 0x60A7, 62624 }, { 0x60FA, 62628 }, { 0x60FD, 62631 }, { 0x60FC, 62635 }, { 0x60BA, 62639 }, { 0x6116, 62643 }, { 0x60D8, 62647 }, { 0x60D6, 62651 }, { 0x60DA, 62655 }, { 0x60DC, 62659 }, { 0x6079, 62663 }, { 0x60BF, 62666 }, { 0x6132, 62669 }, { 0x6067, 62672 }, { 0x60F4, 62676 }, { 0x60F8, 62679 }, { 0x60F7, 62685 }, { 0x611A, 62690 }, { 0x6124, 62693 }, { 0x6125, 62698 }, { 0x60F3, 62703 }, { 0x609D, 62706 }, { 0x6112, 62710 }, { 0x6111, 62715 }, { 0x60F2, 62719 }, { 0x606C, 62722 }, { 0x6070, 62727 }, { 0x6093, 62730 }, { 0x6094, 62734 }, { 0x606A, 62738 }, { 0x6136, 62742 }, { 0x60C0, 62745 }, { 0x609E, 62749 }, { 0x6077, 62753 }, { 0x611B, 62757 }, { 0x6126, 62760 }, { 0x60A8, 62764 }, { 0x6138, 62769 }, { 0x6097, 62772 }, { 0x6069, 62776 }, { 0x610C, 62780 }, { 0x608E, 62784 }, { 0x608D, 62788 }, { 0x6066, 62792 }, { 0x60C3, 62796 }, { 0x60A1, 62800 }, { 0x6141, 62804 }, { 0x6142, 62809 }, { 0x614B, 62815 }, { 0x6146, 62820 }, { 0x6143, 62825 }, { 0x6145, 62830 }, { 0x614A, 62835 }, { 0x6149, 62842 }, { 0x6148, 62849 }, { 0x6147, 62856 }, { 0x6144, 62863 }, { 0x6119, 62868 }, { 0x611E, 62871 }, { 0x6128, 62874 }, { 0x611F, 62878 }, { 0x6099, 62882 }, { 0x609A, 62886 }, { 0x606D, 62890 }, { 0x6065, 62894 }, { 0x6135, 62898 }, { 0x60AA, 62902 }, { 0x60A9, 62907 }, { 0x60F0, 62912 }, { 0x612A, 62915 }, { 0x612C, 62922 }, { 0x612B, 62930 }, { 0x612D, 62937 }, { 0x612E, 62944 }, { 0x612F, 62951 }, { 0x6130, 62959 }, { 0x6131, 62967 }, { 0x607A, 62975 }, { 0x6078, 62978 }, { 0x60BE, 62981 }, { 0x60BD, 62986 }, { 0x6075, 62991 }, { 0x6076, 62994 }, { 0x6091, 62998 }, { 0x6092, 63002 }, { 0x6137, 63006 }, { 0x60C2, 63009 }, { 0x60A0, 63013 }, { 0x6096, 63017 }, { 0x6095, 63022 }, { 0x6068, 63027 }, { 0x613A, 63032 }, { 0x60CD, 63035 }, { 0x60CE, 63039 }, { 0x60CF, 63043 }, { 0x60FB, 63047 }, { 0x608C, 63051 }, { 0x60BB, 63056 }, { 0x607B, 63060 }, { 0x60FE, 63064 }, { 0x60FF, 63068 }, { 0x6100, 63072 }, { 0x6101, 63076 }, { 0x6102, 63080 }, { 0x6103, 63084 }, { 0x6104, 63088 }, { 0x6105, 63092 }, { 0x6106, 63096 }, { 0x6107, 63100 }, { 0x6108, 63104 }, { 0x6072, 63108 }, { 0x6073, 63112 }, { 0x6074, 63116 }, { 0x6080, 63120 }, { 0x613B, 63124 }, { 0x613F, 63127 }, { 0x60AC, 63131 }, { 0x60B4, 63137 }, { 0x60B3, 63144 }, { 0x60AB, 63151 }, { 0x60B2, 63157 }, { 0x60B1, 63163 }, { 0x60AE, 63169 }, { 0x60AD, 63175 }, { 0x60B0, 63181 }, { 0x60AF, 63187 }, { 0x607C, 63193 }, { 0x610E, 63197 }, { 0x60E9, 63202 }, { 0x60EC, 63206 }, { 0x60E8, 63210 }, { 0x610D, 63214 }, { 0x60EA, 63219 }, { 0x6110, 63223 }, { 0x60C8, 63228 }, { 0x60E5, 63232 }, { 0x60EB, 63236 }, { 0x60DE, 63240 }, { 0x60ED, 63244 }, { 0x60D1, 63249 }, { 0x60D2, 63253 }, { 0x60D3, 63257 }, { 0x60D4, 63261 }, { 0x60D5, 63265 }, { 0x60E0, 63269 }, { 0x60EE, 63273 }, { 0x60E2, 63278 }, { 0x610F, 63282 }, { 0x60DF, 63286 }, { 0x60CA, 63290 }, { 0x60CB, 63294 }, { 0x60CC, 63298 }, { 0x60D0, 63302 }, { 0x60C9, 63307 }, { 0x60E1, 63312 }, { 0x60E4, 63316 }, { 0x60E3, 63320 }, { 0x60F5, 63324 }, { 0x607F, 63327 }, { 0x607E, 63331 }, { 0x6114, 63335 }, { 0x6115, 63339 }, { 0x6133, 63343 }, { 0x6134, 63348 }, { 0x613C, 63353 }, { 0x613D, 63356 }, { 0x6139, 63360 }, { 0x613E, 63363 }, { 0x60C4, 63367 }, { 0x60A2, 63371 }, { 0x60E6, 63375 }, { 0x60E7, 63379 }, { 0x6127, 63383 }, { 0x611D, 63387 }, { 0x611C, 63391 }, { 0x6129, 63395 }, { 0x6121, 63399 }, { 0x6120, 63403 }, { 0x6081, 63407 }, { 0x607D, 63411 }, { 0x60F6, 63415 }, { 0x6082, 63418 }, { 0x6109, 63422 }, { 0x610A, 63425 }, { 0x60B9, 63428 }, { 0x60EF, 63432 }, { 0x609B, 63435 }, { 0x609C, 63439 }, { 0x60C6, 63443 }, { 0x60A4, 63447 }, { 0x60C5, 63451 }, { 0x60A3, 63455 }, { 0x60B8, 63459 }, { 0x60B7, 63465 }, { 0x6CF4, 63471 }, { 0x6CD3, 63473 }, { 0x3802, 63477 }, { 0x3807, 63482 }, { 0x3803, 63487 }, { 0x3806, 63492 }, { 0x3805, 63497 }, { 0x380A, 63502 }, { 0x3801, 63507 }, { 0x3809, 63512 }, { 0x3808, 63517 }, { 0x3804, 63522 }, { 0x0DC7, 63527 }, { 0x0DCC, 63531 }, { 0x0DC8, 63535 }, { 0x0DCB, 63539 }, { 0x0DCA, 63543 }, { 0x0DCF, 63547 }, { 0x0DC6, 63551 }, { 0x0DCE, 63555 }, { 0x0DCD, 63559 }, { 0x0DC9, 63563 }, { 0x0D6D, 63567 }, { 0x387E, 63571 }, { 0x387F, 63576 }, { 0x3880, 63581 }, { 0x0D70, 63586 }, { 0x37F6, 63589 }, { 0x0DBD, 63593 }, { 0x0DBE, 63597 }, { 0x0DBF, 63601 }, { 0x0DC0, 63605 }, { 0x0DC1, 63609 }, { 0x0DC2, 63614 }, { 0x0DC3, 63619 }, { 0x0DC5, 63625 }, { 0x0DD0, 63630 }, { 0x0DD1, 63634 }, { 0x0D80, 63638 }, { 0x0D6F, 63642 }, { 0x0D81, 63645 }, { 0x0D6E, 63648 }, { 0x0D9F, 63651 }, { 0x0DA0, 63657 }, { 0x0DA1, 63663 }, { 0x0DA2, 63669 }, { 0x0DA3, 63675 }, { 0x0D6C, 63681 }, { 0x0D9A, 63684 }, { 0x0D99, 63691 }, { 0x0D77, 63697 }, { 0x0D7C, 63700 }, { 0x0D78, 63703 }, { 0x0D7B, 63706 }, { 0x0D7A, 63709 }, { 0x0D7F, 63712 }, { 0x0D76, 63715 }, { 0x0D7E, 63718 }, { 0x0D7D, 63721 }, { 0x0D79, 63724 }, { 0x0D67, 63727 }, { 0x0D6B, 63731 }, { 0x0D63, 63736 }, { 0x0D65, 63740 }, { 0x0D62, 63744 }, { 0x0D68, 63748 }, { 0x0D64, 63752 }, { 0x0D66, 63756 }, { 0x0D6A, 63760 }, { 0x0D69, 63765 }, { 0x0DA7, 63770 }, { 0x0D98, 63776 }, { 0x0DBA, 63782 }, { 0x0DBB, 63787 }, { 0x0DB9, 63793 }, { 0x0DBC, 63798 }, { 0x0D61, 63804 }, { 0x0DD2, 63809 }, { 0x0DD3, 63814 }, { 0x0DA9, 63819 }, { 0x0DAA, 63824 }, { 0x0DA8, 63829 }, { 0x0D8E, 63834 }, { 0x0D8C, 63839 }, { 0x0D8F, 63844 }, { 0x0D8D, 63849 }, { 0x0D9D, 63854 }, { 0x0D9E, 63861 }, { 0x0D57, 63868 }, { 0x0D5D, 63871 }, { 0x0D59, 63874 }, { 0x0D5F, 63877 }, { 0x0D5B, 63880 }, { 0x0D60, 63883 }, { 0x0D4D, 63886 }, { 0x0D3B, 63889 }, { 0x0D48, 63892 }, { 0x0D38, 63895 }, { 0x0D55, 63898 }, { 0x0D5A, 63901 }, { 0x0D3D, 63904 }, { 0x0D36, 63907 }, { 0x0D52, 63910 }, { 0x0D4F, 63913 }, { 0x0D4A, 63916 }, { 0x0D4B, 63919 }, { 0x0D51, 63922 }, { 0x0D54, 63925 }, { 0x0D46, 63928 }, { 0x0D5C, 63931 }, { 0x0D53, 63934 }, { 0x0D50, 63937 }, { 0x0D4E, 63940 }, { 0x0D3C, 63943 }, { 0x0D43, 63946 }, { 0x0D49, 63949 }, { 0x0D39, 63952 }, { 0x0D3E, 63955 }, { 0x0D37, 63958 }, { 0x0D56, 63961 }, { 0x0D5E, 63964 }, { 0x0D92, 63968 }, { 0x0D93, 63972 }, { 0x0D91, 63976 }, { 0x0D90, 63980 }, { 0x0D3A, 63984 }, { 0x0D45, 63987 }, { 0x0D3F, 63990 }, { 0x0D4C, 63993 }, { 0x0D86, 63996 }, { 0x0D87, 63999 }, { 0x380E, 64002 }, { 0x380C, 64007 }, { 0x37F9, 64012 }, { 0x37FA, 64017 }, { 0x37FC, 64022 }, { 0x380F, 64027 }, { 0x37FE, 64032 }, { 0x380D, 64037 }, { 0x37FB, 64042 }, { 0x37FD, 64047 }, { 0x380B, 64052 }, { 0x3800, 64057 }, { 0x37F8, 64062 }, { 0x37FF, 64067 }, { 0x0D47, 64072 }, { 0x0D41, 64075 }, { 0x0D44, 64078 }, { 0x0D40, 64081 }, { 0x0D97, 64084 }, { 0x0D58, 64089 }, { 0x0DB5, 64093 }, { 0x0DAE, 64097 }, { 0x0DB1, 64101 }, { 0x0DB4, 64105 }, { 0x0DAD, 64109 }, { 0x0DB7, 64113 }, { 0x0DAB, 64117 }, { 0x0DB2, 64121 }, { 0x0DAF, 64125 }, { 0x37F5, 64129 }, { 0x37F2, 64133 }, { 0x37F1, 64137 }, { 0x37F3, 64141 }, { 0x0DAC, 64145 }, { 0x37F4, 64149 }, { 0x0DB0, 64153 }, { 0x0DB3, 64157 }, { 0x0DB6, 64161 }, { 0x3881, 64165 }, { 0x3882, 64170 }, { 0x0D42, 64175 }, { 0x387D, 64178 }, { 0x0D75, 64182 }, { 0x0DC4, 64186 }, { 0x3864, 64191 }, { 0x3872, 64195 }, { 0x3863, 64199 }, { 0x3870, 64203 }, { 0x3866, 64207 }, { 0x386E, 64211 }, { 0x3876, 64215 }, { 0x386F, 64219 }, { 0x3874, 64223 }, { 0x3875, 64227 }, { 0x3865, 64231 }, { 0x386B, 64235 }, { 0x386D, 64239 }, { 0x3871, 64243 }, { 0x3867, 64247 }, { 0x3868, 64251 }, { 0x3869, 64255 }, { 0x386C, 64259 }, { 0x386A, 64263 }, { 0x0DA4, 64267 }, { 0x0DA5, 64273 }, { 0x0DA6, 64279 }, { 0x0D8A, 64285 }, { 0x0D88, 64289 }, { 0x0D8B, 64293 }, { 0x0D89, 64297 }, { 0x0D9C, 64301 }, { 0x0D9B, 64307 }, { 0x0DD4, 64313 }, { 0x0DD5, 64317 }, { 0x387B, 64321 }, { 0x387C, 64325 }, { 0x387A, 64329 }, { 0x0D85, 64333 }, { 0x0D82, 64336 }, { 0x0D83, 64339 }, { 0x0D84, 64342 }, { 0x3879, 64345 }, { 0x3878, 64349 }, { 0x3877, 64353 }, { 0x37F7, 64357 }, { 0x3873, 64362 }, { 0x0D96, 64367 }, { 0x0D95, 64373 }, { 0x0D94, 64379 }, { 0x0DB8, 64385 }, { 0x0D74, 64391 }, { 0x0D72, 64396 }, { 0x0D73, 64401 }, { 0x0D71, 64406 }, { 0x6D8F, 64411 }, { 0x1E38, 64412 }, { 0x1E11, 64419 }, { 0x1E12, 64426 }, { 0x1DF9, 64433 }, { 0x1DFD, 64438 }, { 0x1E01, 64443 }, { 0x1DFA, 64447 }, { 0x1E02, 64452 }, { 0x1DFE, 64456 }, { 0x1DD0, 64461 }, { 0x21A0, 64467 }, { 0x6F4B, 64468 }, { 0x26EA, 64470 }, { 0x26EB, 64472 }, { 0x1C22, 64474 }, { 0x3FCB, 64477 }, { 0x6E7E, 64479 }, { 0x2309, 64485 }, { 0x6E7F, 64491 }, { 0x230B, 64497 }, { 0x2500, 64503 }, { 0x2501, 64507 }, { 0x6D54, 64511 }, { 0x6DFA, 64512 }, { 0x6EF3, 64514 }, { 0x41CB, 64517 }, { 0x41D0, 64520 }, { 0x41CC, 64523 }, { 0x41CF, 64526 }, { 0x41CE, 64529 }, { 0x41D3, 64532 }, { 0x41CA, 64535 }, { 0x41D2, 64538 }, { 0x41D1, 64541 }, { 0x41CD, 64544 }, { 0x41C2, 64547 }, { 0x41C3, 64550 }, { 0x41C4, 64553 }, { 0x41C5, 64556 }, { 0x41C6, 64559 }, { 0x41C7, 64562 }, { 0x41AD, 64565 }, { 0x41C8, 64568 }, { 0x41B9, 64571 }, { 0x41B8, 64574 }, { 0x41C0, 64577 }, { 0x41AF, 64580 }, { 0x41C9, 64583 }, { 0x41B3, 64586 }, { 0x41B4, 64589 }, { 0x41AE, 64592 }, { 0x41B0, 64595 }, { 0x41C1, 64598 }, { 0x41B6, 64601 }, { 0x41B1, 64604 }, { 0x41BF, 64607 }, { 0x41AC, 64610 }, { 0x41B7, 64613 }, { 0x41B2, 64616 }, { 0x41BB, 64619 }, { 0x41BC, 64622 }, { 0x41BD, 64625 }, { 0x41BE, 64628 }, { 0x41BA, 64631 }, { 0x41B5, 64634 }, { 0x6F12, 64637 }, { 0x6E21, 64638 }, { 0x1D8B, 64639 }, { 0x71BB, 64641 }, { 0x6D62, 64642 }, { 0x6F4F, 64643 }, { 0x0005, 64645 }, { 0x0075, 64647 }, { 0x6B1D, 64649 }, { 0x6AFF, 64654 }, { 0x6AF1, 64659 }, { 0x6B0E, 64664 }, { 0x6B0D, 64669 }, { 0x6B22, 64673 }, { 0x6B04, 64678 }, { 0x6AF6, 64683 }, { 0x6B13, 64688 }, { 0x6B26, 64693 }, { 0x6B08, 64698 }, { 0x6AFA, 64703 }, { 0x6B17, 64708 }, { 0x6B1E, 64713 }, { 0x6B00, 64718 }, { 0x6AF2, 64723 }, { 0x6B0F, 64728 }, { 0x6AF0, 64733 }, { 0x6B21, 64736 }, { 0x6B03, 64741 }, { 0x6AF5, 64746 }, { 0x6B12, 64751 }, { 0x6B2C, 64756 }, { 0x6B20, 64759 }, { 0x6B02, 64764 }, { 0x6AF4, 64769 }, { 0x6B11, 64774 }, { 0x6B27, 64779 }, { 0x6B09, 64784 }, { 0x6AFB, 64789 }, { 0x6B18, 64794 }, { 0x6B2A, 64799 }, { 0x6B0C, 64804 }, { 0x6AFE, 64809 }, { 0x6B1B, 64814 }, { 0x6B25, 64819 }, { 0x6B07, 64824 }, { 0x6AF9, 64829 }, { 0x6B16, 64834 }, { 0x6B1C, 64839 }, { 0x6B24, 64843 }, { 0x6B06, 64848 }, { 0x6AF8, 64853 }, { 0x6B15, 64858 }, { 0x6B29, 64863 }, { 0x6B0B, 64868 }, { 0x6AFD, 64873 }, { 0x6B1A, 64878 }, { 0x6B23, 64883 }, { 0x6B05, 64888 }, { 0x6AF7, 64893 }, { 0x6B14, 64898 }, { 0x6B1F, 64903 }, { 0x6B01, 64908 }, { 0x6AF3, 64913 }, { 0x6B10, 64918 }, { 0x6B2B, 64923 }, { 0x6B28, 64927 }, { 0x6B0A, 64932 }, { 0x6AFC, 64937 }, { 0x6B19, 64942 }, { 0x6B2D, 64947 }, { 0x6B2E, 64950 }, { 0x6B2F, 64953 }, { 0x6B30, 64956 }, { 0x6B31, 64959 }, { 0x6B32, 64962 }, { 0x6B33, 64965 }, { 0x6B34, 64968 }, { 0x6B35, 64971 }, { 0x6B36, 64974 }, { 0x6B37, 64977 }, { 0x6B38, 64980 }, { 0x6B39, 64983 }, { 0x6B3A, 64986 }, { 0x6B3B, 64989 }, { 0x6B3C, 64992 }, { 0x6B3D, 64995 }, { 0x6B3E, 64998 }, { 0x6B3F, 65001 }, { 0x6B40, 65004 }, { 0x6B41, 65007 }, { 0x6CBA, 65010 }, { 0x6E29, 65011 }, { 0x6FEB, 65012 }, { 0x6C92, 65015 }, { 0x6F79, 65017 }, { 0x6F5C, 65020 }, { 0x6EE3, 65022 }, { 0x6EF1, 65023 }, { 0x4677, 65025 }, { 0x4676, 65031 }, { 0x4666, 65037 }, { 0x4670, 65041 }, { 0x466E, 65045 }, { 0x4673, 65049 }, { 0x4663, 65053 }, { 0x4669, 65057 }, { 0x466B, 65061 }, { 0x4672, 65065 }, { 0x466A, 65069 }, { 0x4662, 65073 }, { 0x4664, 65077 }, { 0x4671, 65081 }, { 0x4668, 65085 }, { 0x4665, 65089 }, { 0x466C, 65093 }, { 0x466F, 65097 }, { 0x466D, 65101 }, { 0x4667, 65105 }, { 0x4678, 65109 }, { 0x467E, 65113 }, { 0x467C, 65118 }, { 0x4679, 65122 }, { 0x467B, 65126 }, { 0x467A, 65130 }, { 0x467D, 65134 }, { 0x4675, 65138 }, { 0x4674, 65143 }, { 0x6E07, 65147 }, { 0x21C3, 65148 }, { 0x1F40, 65150 }, { 0x6FBE, 65153 }, { 0x7012, 65155 }, { 0x6C43, 65157 }, { 0x70DE, 65158 }, { 0x269B, 65164 }, { 0x26A1, 65170 }, { 0x6FBA, 65176 }, { 0x003C, 65179 }, { 0x2551, 65181 }, { 0x254F, 65186 }, { 0x2322, 65189 }, { 0x6EA8, 65193 }, { 0x6C9B, 65195 }, { 0x7191, 65198 }, { 0x6D4E, 65203 }, { 0x6D30, 65204 }, { 0x22BF, 65205 }, { 0x271F, 65210 }, { 0x2721, 65216 }, { 0x22C1, 65221 }, { 0x1CC7, 65225 }, { 0x6FDE, 65228 }, { 0x6CF8, 65229 }, { 0x216D, 65233 }, { 0x701F, 65234 }, { 0x1C95, 65235 }, { 0x0066, 65236 }, { 0x1E9C, 65238 }, { 0x1CAD, 65239 }, { 0x2213, 65241 }, { 0x71B7, 65242 }, { 0x48D3, 65246 }, { 0x48E7, 65248 }, { 0x48D9, 65250 }, { 0x48CF, 65253 }, { 0x48E8, 65256 }, { 0x4891, 65259 }, { 0x4890, 65262 }, { 0x48D0, 65265 }, { 0x488F, 65268 }, { 0x48D1, 65271 }, { 0x48D2, 65274 }, { 0x48D4, 65277 }, { 0x48DE, 65279 }, { 0x48E3, 65282 }, { 0x48DF, 65285 }, { 0x48E2, 65288 }, { 0x48E1, 65291 }, { 0x48E6, 65294 }, { 0x48DD, 65297 }, { 0x48E5, 65300 }, { 0x48E4, 65303 }, { 0x48E0, 65306 }, { 0x48DB, 65309 }, { 0x48DC, 65314 }, { 0x48CB, 65317 }, { 0x48C3, 65321 }, { 0x48CD, 65325 }, { 0x48C5, 65329 }, { 0x48C2, 65333 }, { 0x48CC, 65337 }, { 0x48CE, 65341 }, { 0x48C4, 65345 }, { 0x48C6, 65349 }, { 0x48C9, 65353 }, { 0x48C7, 65358 }, { 0x48CA, 65363 }, { 0x48C8, 65368 }, { 0x48DA, 65373 }, { 0x48D5, 65377 }, { 0x4892, 65380 }, { 0x489C, 65383 }, { 0x4894, 65386 }, { 0x489E, 65389 }, { 0x4896, 65392 }, { 0x4893, 65395 }, { 0x489D, 65398 }, { 0x489F, 65401 }, { 0x48B6, 65404 }, { 0x48A5, 65407 }, { 0x48B1, 65410 }, { 0x48A2, 65413 }, { 0x48C1, 65416 }, { 0x4895, 65419 }, { 0x48A7, 65422 }, { 0x48A0, 65425 }, { 0x48BB, 65428 }, { 0x48B8, 65431 }, { 0x48B3, 65434 }, { 0x48B4, 65437 }, { 0x48BA, 65440 }, { 0x48C0, 65443 }, { 0x48AF, 65446 }, { 0x4897, 65449 }, { 0x48BD, 65452 }, { 0x48B9, 65455 }, { 0x48B7, 65458 }, { 0x48A6, 65461 }, { 0x48AC, 65464 }, { 0x48B2, 65467 }, { 0x48A3, 65470 }, { 0x48A8, 65473 }, { 0x48A1, 65476 }, { 0x48BC, 65479 }, { 0x48A4, 65482 }, { 0x48AE, 65485 }, { 0x48A9, 65488 }, { 0x48B5, 65491 }, { 0x48BE, 65494 }, { 0x48BF, 65497 }, { 0x48B0, 65500 }, { 0x48AA, 65503 }, { 0x48AD, 65506 }, { 0x48AB, 65509 }, { 0x489A, 65512 }, { 0x4898, 65516 }, { 0x489B, 65520 }, { 0x4899, 65524 }, { 0x48D8, 65528 }, { 0x48EB, 65531 }, { 0x48EC, 65534 }, { 0x48D7, 65537 }, { 0x48E9, 65539 }, { 0x48D6, 65541 }, { 0x48EA, 65544 }, { 0x4199, 65547 }, { 0x4192, 65550 }, { 0x4196, 65553 }, { 0x41A5, 65556 }, { 0x4181, 65559 }, { 0x419F, 65562 }, { 0x4195, 65565 }, { 0x419D, 65568 }, { 0x41A6, 65571 }, { 0x41A4, 65574 }, { 0x4194, 65577 }, { 0x41A3, 65580 }, { 0x4186, 65583 }, { 0x41A9, 65586 }, { 0x419C, 65589 }, { 0x4193, 65592 }, { 0x41A7, 65595 }, { 0x417F, 65598 }, { 0x4188, 65601 }, { 0x41AA, 65604 }, { 0x419E, 65607 }, { 0x419B, 65610 }, { 0x41A0, 65613 }, { 0x41A2, 65616 }, { 0x4198, 65619 }, { 0x417D, 65622 }, { 0x4189, 65625 }, { 0x418E, 65628 }, { 0x4184, 65631 }, { 0x41AB, 65634 }, { 0x418B, 65637 }, { 0x4187, 65640 }, { 0x4185, 65643 }, { 0x417E, 65646 }, { 0x4190, 65649 }, { 0x4191, 65652 }, { 0x41A1, 65655 }, { 0x417C, 65658 }, { 0x419A, 65661 }, { 0x4182, 65664 }, { 0x418A, 65667 }, { 0x4197, 65670 }, { 0x41A8, 65673 }, { 0x418F, 65676 }, { 0x418D, 65679 }, { 0x4180, 65682 }, { 0x4183, 65685 }, { 0x418C, 65688 }, { 0x253C, 65691 }, { 0x4AF4, 65693 }, { 0x4AEB, 65698 }, { 0x4AEA, 65701 }, { 0x4AEC, 65704 }, { 0x4AE9, 65707 }, { 0x4AE8, 65710 }, { 0x4AE7, 65713 }, { 0x4AED, 65716 }, { 0x4AE3, 65718 }, { 0x4ADD, 65722 }, { 0x4AE5, 65726 }, { 0x4ADF, 65730 }, { 0x4ADC, 65734 }, { 0x4AE4, 65738 }, { 0x4AE6, 65742 }, { 0x4ADE, 65746 }, { 0x4AE0, 65750 }, { 0x4AE1, 65754 }, { 0x4AE2, 65759 }, { 0x4B07, 65764 }, { 0x4B08, 65769 }, { 0x4AEE, 65774 }, { 0x4AAD, 65777 }, { 0x4AB7, 65780 }, { 0x4AAF, 65783 }, { 0x4AB9, 65786 }, { 0x4AB1, 65789 }, { 0x4AAE, 65792 }, { 0x4AB8, 65795 }, { 0x4ABA, 65798 }, { 0x4AD1, 65801 }, { 0x4AC0, 65804 }, { 0x4ACC, 65807 }, { 0x4ABD, 65810 }, { 0x4ADB, 65813 }, { 0x4AB0, 65816 }, { 0x4AC2, 65819 }, { 0x4ABB, 65822 }, { 0x4AD6, 65825 }, { 0x4AD3, 65828 }, { 0x4ACE, 65831 }, { 0x4ACF, 65834 }, { 0x4AD5, 65837 }, { 0x4ADA, 65840 }, { 0x4ACA, 65843 }, { 0x4AB2, 65846 }, { 0x4AD7, 65849 }, { 0x4AD4, 65852 }, { 0x4AD2, 65855 }, { 0x4AC1, 65858 }, { 0x4AC7, 65861 }, { 0x4ACD, 65864 }, { 0x4ABE, 65867 }, { 0x4AC3, 65870 }, { 0x4ABC, 65873 }, { 0x4ABF, 65876 }, { 0x4AC9, 65879 }, { 0x4AC4, 65882 }, { 0x4AD0, 65885 }, { 0x4AD8, 65888 }, { 0x4AD9, 65891 }, { 0x4ACB, 65894 }, { 0x4AC5, 65897 }, { 0x4AC8, 65900 }, { 0x4AC6, 65903 }, { 0x4AB5, 65906 }, { 0x4AB3, 65910 }, { 0x4AB6, 65914 }, { 0x4AB4, 65918 }, { 0x4B06, 65922 }, { 0x4B04, 65926 }, { 0x4B05, 65931 }, { 0x4B03, 65936 }, { 0x4AF8, 65941 }, { 0x4AF9, 65950 }, { 0x4AF7, 65959 }, { 0x4AFC, 65967 }, { 0x4AFD, 65973 }, { 0x4B01, 65979 }, { 0x4B02, 65987 }, { 0x4B00, 65995 }, { 0x4AF6, 66002 }, { 0x4AF5, 66010 }, { 0x4AFF, 66018 }, { 0x4AFE, 66024 }, { 0x4AFA, 66030 }, { 0x4AFB, 66035 }, { 0x4AF0, 66042 }, { 0x4AEF, 66045 }, { 0x4AF1, 66048 }, { 0x4AF2, 66051 }, { 0x4AF3, 66054 }, { 0x25F7, 66057 }, { 0x25F8, 66060 }, { 0x25F9, 66063 }, { 0x25FA, 66069 }, { 0x25C6, 66075 }, { 0x0BBD, 66078 }, { 0x0BC2, 66082 }, { 0x0BBE, 66086 }, { 0x0BC1, 66090 }, { 0x0BC0, 66094 }, { 0x0BC5, 66098 }, { 0x0BBC, 66102 }, { 0x0BC4, 66106 }, { 0x0BC3, 66110 }, { 0x0BBF, 66114 }, { 0x0BAC, 66118 }, { 0x0B70, 66121 }, { 0x0B6F, 66124 }, { 0x0BB6, 66127 }, { 0x0BB1, 66132 }, { 0x0BB3, 66137 }, { 0x0BAF, 66142 }, { 0x0BC7, 66147 }, { 0x0BC6, 66152 }, { 0x0BB0, 66157 }, { 0x0BB2, 66162 }, { 0x0BAE, 66167 }, { 0x0BB7, 66172 }, { 0x0BB5, 66177 }, { 0x0BB9, 66181 }, { 0x0BB8, 66188 }, { 0x0BBA, 66194 }, { 0x0BAD, 66200 }, { 0x0BBB, 66204 }, { 0x0BB4, 66208 }, { 0x0BA1, 66212 }, { 0x0B71, 66216 }, { 0x0B7D, 66219 }, { 0x0B75, 66222 }, { 0x0B80, 66225 }, { 0x0B77, 66228 }, { 0x0B72, 66231 }, { 0x0B73, 66234 }, { 0x0B7F, 66237 }, { 0x0B82, 66240 }, { 0x0BA4, 66243 }, { 0x0B9A, 66247 }, { 0x0BA8, 66251 }, { 0x0B7E, 66255 }, { 0x0BAB, 66258 }, { 0x0BA9, 66261 }, { 0x0B76, 66264 }, { 0x0B87, 66267 }, { 0x0BA0, 66271 }, { 0x0B81, 66274 }, { 0x0BA3, 66277 }, { 0x0B9B, 66280 }, { 0x0B88, 66284 }, { 0x0B8F, 66288 }, { 0x0B95, 66292 }, { 0x0BA6, 66296 }, { 0x0B8E, 66300 }, { 0x0B8D, 66305 }, { 0x0B78, 66309 }, { 0x0BA5, 66312 }, { 0x0BA2, 66315 }, { 0x0B74, 66318 }, { 0x0B7B, 66321 }, { 0x0B79, 66324 }, { 0x0B7C, 66327 }, { 0x0B7A, 66330 }, { 0x0BAA, 66333 }, { 0x0B94, 66337 }, { 0x0BA7, 66341 }, { 0x0B9E, 66345 }, { 0x0B89, 66349 }, { 0x0B98, 66353 }, { 0x0B85, 66357 }, { 0x0B8B, 66361 }, { 0x0B83, 66365 }, { 0x0B9C, 66369 }, { 0x0B96, 66373 }, { 0x0B92, 66377 }, { 0x0B90, 66381 }, { 0x0B9F, 66385 }, { 0x0B8A, 66389 }, { 0x0B99, 66393 }, { 0x0B86, 66397 }, { 0x0B8C, 66401 }, { 0x0B84, 66405 }, { 0x0B9D, 66409 }, { 0x0B97, 66413 }, { 0x0B93, 66417 }, { 0x0B91, 66421 }, { 0x48ED, 66425 }, { 0x48F2, 66429 }, { 0x48EE, 66433 }, { 0x48F1, 66437 }, { 0x48F0, 66441 }, { 0x48F5, 66445 }, { 0x48F4, 66449 }, { 0x48F3, 66453 }, { 0x48EF, 66457 }, { 0x48FF, 66461 }, { 0x4900, 66466 }, { 0x48F6, 66471 }, { 0x48FA, 66475 }, { 0x48F9, 66479 }, { 0x48FB, 66483 }, { 0x48FD, 66487 }, { 0x48FE, 66491 }, { 0x48F8, 66495 }, { 0x48F7, 66499 }, { 0x48FC, 66503 }, { 0x0BC8, 66507 }, { 0x2294, 66510 }, { 0x25EF, 66513 }, { 0x25F1, 66518 }, { 0x25F0, 66526 }, { 0x25F2, 66531 }, { 0x26B4, 66539 }, { 0x26B6, 66545 }, { 0x25B1, 66551 }, { 0x25B2, 66554 }, { 0x2604, 66557 }, { 0x2606, 66559 }, { 0x6F75, 66564 }, { 0x6F76, 66570 }, { 0x6F42, 66576 }, { 0x6F3E, 66580 }, { 0x6F40, 66585 }, { 0x6F3F, 66593 }, { 0x6F41, 66601 }, { 0x6F43, 66609 }, { 0x6F45, 66613 }, { 0x6F49, 66618 }, { 0x6F48, 66622 }, { 0x6FE7, 66627 }, { 0x215D, 66629 }, { 0x221E, 66630 }, { 0x000F, 66633 }, { 0x2550, 66634 }, { 0x22A1, 66637 }, { 0x6E43, 66638 }, { 0x6E44, 66639 }, { 0x6E45, 66644 }, { 0x6E42, 66649 }, { 0x6BCB, 66653 }, { 0x6BE0, 66655 }, { 0x6B88, 66657 }, { 0x6BCE, 66659 }, { 0x6B89, 66661 }, { 0x6BD0, 66663 }, { 0x6BD1, 66665 }, { 0x6B8A, 66667 }, { 0x6B8B, 66669 }, { 0x6BD3, 66671 }, { 0x6BD4, 66676 }, { 0x6B8D, 66678 }, { 0x6C1D, 66680 }, { 0x6C1E, 66684 }, { 0x6C21, 66688 }, { 0x6C08, 66692 }, { 0x6C0C, 66696 }, { 0x6C12, 66700 }, { 0x6C14, 66704 }, { 0x6C10, 66708 }, { 0x6C2D, 66712 }, { 0x6C06, 66716 }, { 0x6C22, 66720 }, { 0x6C28, 66724 }, { 0x6C19, 66728 }, { 0x6C2E, 66732 }, { 0x6C18, 66736 }, { 0x6C09, 66740 }, { 0x6C0B, 66744 }, { 0x6C05, 66748 }, { 0x6C20, 66752 }, { 0x6C11, 66756 }, { 0x6C04, 66760 }, { 0x6C25, 66764 }, { 0x6C1B, 66768 }, { 0x6C23, 66772 }, { 0x6C1C, 66776 }, { 0x6C0F, 66780 }, { 0x6C13, 66784 }, { 0x6C0D, 66788 }, { 0x6C2B, 66792 }, { 0x6C2A, 66796 }, { 0x6C29, 66800 }, { 0x6C1A, 66804 }, { 0x6C0E, 66808 }, { 0x6C16, 66812 }, { 0x6C2C, 66816 }, { 0x6C26, 66820 }, { 0x6C27, 66824 }, { 0x6C15, 66828 }, { 0x6C0A, 66832 }, { 0x6C17, 66836 }, { 0x6C24, 66840 }, { 0x6C1F, 66844 }, { 0x6C2F, 66848 }, { 0x1E2A, 66852 }, { 0x6BE1, 66855 }, { 0x2219, 66857 }, { 0x6BCF, 66859 }, { 0x6BDE, 66861 }, { 0x6B8C, 66866 }, { 0x6BE4, 66868 }, { 0x6BD2, 66870 }, { 0x6BD7, 66872 }, { 0x6BE5, 66875 }, { 0x6BE6, 66877 }, { 0x6BCC, 66879 }, { 0x6BDA, 66881 }, { 0x6BD8, 66885 }, { 0x291F, 66888 }, { 0x6BCD, 66892 }, { 0x1E27, 66894 }, { 0x6BD9, 66896 }, { 0x6BDF, 66899 }, { 0x6B6E, 66904 }, { 0x6B6F, 66909 }, { 0x6B70, 66914 }, { 0x6B71, 66919 }, { 0x6B72, 66924 }, { 0x6B73, 66929 }, { 0x6B74, 66934 }, { 0x6B75, 66939 }, { 0x6B76, 66944 }, { 0x6B77, 66949 }, { 0x6B78, 66954 }, { 0x6B79, 66959 }, { 0x6B7A, 66964 }, { 0x6B7B, 66969 }, { 0x6B7C, 66974 }, { 0x6B7D, 66979 }, { 0x6B7E, 66984 }, { 0x6B7F, 66989 }, { 0x6B80, 66994 }, { 0x6B81, 66999 }, { 0x6B82, 67004 }, { 0x6B83, 67009 }, { 0x6B84, 67014 }, { 0x6B85, 67019 }, { 0x6B86, 67024 }, { 0x6B87, 67029 }, { 0x1E28, 67034 }, { 0x6BDB, 67036 }, { 0x6BDD, 67040 }, { 0x2521, 67043 }, { 0x6BD5, 67046 }, { 0x1E29, 67049 }, { 0x6BE2, 67051 }, { 0x251E, 67053 }, { 0x6BD6, 67057 }, { 0x2522, 67060 }, { 0x251F, 67062 }, { 0x2329, 67066 }, { 0x2328, 67069 }, { 0x2237, 67072 }, { 0x2520, 67074 }, { 0x6C07, 67076 }, { 0x6C03, 67079 }, { 0x6C02, 67082 }, { 0x6BE3, 67085 }, { 0x6BDC, 67087 }, { 0x6D1A, 67091 }, { 0x6EBE, 67092 }, { 0x6FC4, 67094 }, { 0x71B8, 67095 }, { 0x6C40, 67097 }, { 0x6C3F, 67098 }, { 0x1DB8, 67101 }, { 0x6D05, 67103 }, { 0x6DC4, 67104 }, { 0x6D90, 67105 }, { 0x1413, 67106 }, { 0x1411, 67109 }, { 0x1412, 67113 }, { 0x1400, 67117 }, { 0x1401, 67120 }, { 0x1402, 67123 }, { 0x140A, 67126 }, { 0x1407, 67129 }, { 0x1404, 67132 }, { 0x1410, 67135 }, { 0x1403, 67138 }, { 0x140D, 67141 }, { 0x140B, 67144 }, { 0x1408, 67147 }, { 0x1409, 67150 }, { 0x140F, 67153 }, { 0x1406, 67156 }, { 0x140E, 67159 }, { 0x140C, 67162 }, { 0x1405, 67165 }, { 0x6DE8, 67168 }, { 0x26EE, 67170 }, { 0x22FC, 67175 }, { 0x26F0, 67179 }, { 0x26F1, 67184 }, { 0x26EF, 67189 }, { 0x22FD, 67194 }, { 0x2222, 67198 }, { 0x0D1A, 67202 }, { 0x0D1B, 67206 }, { 0x0CA0, 67213 }, { 0x0C9F, 67218 }, { 0x0C9B, 67223 }, { 0x0C9E, 67227 }, { 0x0C9D, 67232 }, { 0x0C74, 67237 }, { 0x0C9C, 67243 }, { 0x0C6A, 67247 }, { 0x0D2B, 67254 }, { 0x0C6D, 67261 }, { 0x0C66, 67267 }, { 0x0C65, 67276 }, { 0x0C64, 67285 }, { 0x0C77, 67292 }, { 0x0C98, 67296 }, { 0x0C9A, 67302 }, { 0x0C71, 67308 }, { 0x0D2D, 67312 }, { 0x0C73, 67316 }, { 0x0C75, 67321 }, { 0x0C70, 67326 }, { 0x0C97, 67329 }, { 0x0D2B, 67333 }, { 0x0C6C, 67340 }, { 0x0C69, 67345 }, { 0x0C76, 67353 }, { 0x0C99, 67361 }, { 0x0D2C, 67369 }, { 0x0C6B, 67376 }, { 0x0C72, 67380 }, { 0x0CE3, 67384 }, { 0x0C68, 67387 }, { 0x0D2F, 67394 }, { 0x0CE2, 67403 }, { 0x0C67, 67406 }, { 0x0D2E, 67413 }, { 0x0D34, 67422 }, { 0x0D35, 67427 }, { 0x0C6F, 67432 }, { 0x0C6E, 67437 }, { 0x0CE8, 67441 }, { 0x0CE9, 67446 }, { 0x0CE6, 67451 }, { 0x0CE4, 67456 }, { 0x0CA2, 67460 }, { 0x0CE0, 67464 }, { 0x0CE1, 67470 }, { 0x0CA1, 67474 }, { 0x0CE7, 67478 }, { 0x0C80, 67482 }, { 0x0D2A, 67487 }, { 0x0D29, 67492 }, { 0x0C81, 67498 }, { 0x0C7D, 67503 }, { 0x0C7F, 67508 }, { 0x0C82, 67513 }, { 0x0C7E, 67519 }, { 0x0CDC, 67524 }, { 0x0CDD, 67530 }, { 0x0CE5, 67534 }, { 0x0CEA, 67538 }, { 0x0C84, 67543 }, { 0x0C89, 67546 }, { 0x0C85, 67549 }, { 0x0C88, 67552 }, { 0x0C87, 67555 }, { 0x0C8D, 67558 }, { 0x0C92, 67562 }, { 0x0C8E, 67566 }, { 0x0C91, 67570 }, { 0x0C90, 67574 }, { 0x0C95, 67578 }, { 0x0C96, 67582 }, { 0x0C94, 67586 }, { 0x0C93, 67590 }, { 0x0C8F, 67594 }, { 0x0C8C, 67598 }, { 0x0C83, 67601 }, { 0x0C8B, 67604 }, { 0x0C8A, 67607 }, { 0x0C86, 67610 }, { 0x0CD8, 67613 }, { 0x0CD0, 67617 }, { 0x0CDA, 67621 }, { 0x0CD2, 67625 }, { 0x0CCF, 67629 }, { 0x0CD9, 67633 }, { 0x0CD1, 67637 }, { 0x0CDB, 67641 }, { 0x0CD3, 67645 }, { 0x0CD6, 67649 }, { 0x0CD4, 67654 }, { 0x0CD7, 67659 }, { 0x0CD5, 67664 }, { 0x0CDE, 67669 }, { 0x0CDF, 67674 }, { 0x0CCA, 67679 }, { 0x0CC2, 67682 }, { 0x0CB8, 67685 }, { 0x0CA8, 67688 }, { 0x0CB3, 67691 }, { 0x0CA5, 67694 }, { 0x0CC9, 67697 }, { 0x0CAA, 67700 }, { 0x0CA3, 67703 }, { 0x0CC5, 67706 }, { 0x0CBA, 67709 }, { 0x0CB5, 67712 }, { 0x0CB6, 67715 }, { 0x0CC4, 67718 }, { 0x0CC8, 67721 }, { 0x0CB1, 67724 }, { 0x0CBF, 67727 }, { 0x0CC3, 67730 }, { 0x0CC1, 67733 }, { 0x0CB9, 67736 }, { 0x0CA9, 67739 }, { 0x0CAE, 67742 }, { 0x0CB4, 67745 }, { 0x0CBD, 67748 }, { 0x0CA6, 67751 }, { 0x0CA4, 67754 }, { 0x0CCD, 67757 }, { 0x0CA7, 67760 }, { 0x0CB0, 67763 }, { 0x0CAB, 67766 }, { 0x0CB7, 67769 }, { 0x0CCE, 67772 }, { 0x0CC6, 67775 }, { 0x0CC7, 67778 }, { 0x0CB2, 67781 }, { 0x0CBB, 67784 }, { 0x0CAC, 67787 }, { 0x0CC0, 67790 }, { 0x0CAF, 67793 }, { 0x0CBE, 67796 }, { 0x0CCB, 67799 }, { 0x0CBC, 67802 }, { 0x0CAD, 67805 }, { 0x0CCC, 67808 }, { 0x0D25, 67812 }, { 0x0D28, 67816 }, { 0x0D27, 67822 }, { 0x0D26, 67828 }, { 0x0D21, 67834 }, { 0x0D23, 67838 }, { 0x0D20, 67844 }, { 0x0D24, 67848 }, { 0x0D22, 67852 }, { 0x0C78, 67856 }, { 0x0C79, 67861 }, { 0x0C63, 67866 }, { 0x0CEB, 67869 }, { 0x0CEC, 67875 }, { 0x0CED, 67880 }, { 0x0D15, 67886 }, { 0x0D0D, 67890 }, { 0x0D03, 67894 }, { 0x0CF3, 67898 }, { 0x0CFE, 67902 }, { 0x0CF0, 67906 }, { 0x0D14, 67910 }, { 0x0CF5, 67914 }, { 0x0CEE, 67918 }, { 0x0D10, 67922 }, { 0x0D05, 67926 }, { 0x0D00, 67930 }, { 0x0D01, 67934 }, { 0x0D0F, 67938 }, { 0x0D13, 67942 }, { 0x0CFC, 67946 }, { 0x0D0A, 67950 }, { 0x0D0E, 67954 }, { 0x0D0C, 67958 }, { 0x0D04, 67962 }, { 0x0CF4, 67966 }, { 0x0CF9, 67970 }, { 0x0CFF, 67974 }, { 0x0D08, 67978 }, { 0x0CF1, 67982 }, { 0x0CEF, 67986 }, { 0x0CF2, 67990 }, { 0x0CFB, 67994 }, { 0x0CF6, 67998 }, { 0x0D02, 68002 }, { 0x0D11, 68006 }, { 0x0D12, 68010 }, { 0x0CFD, 68014 }, { 0x0D06, 68018 }, { 0x0CF7, 68022 }, { 0x0D0B, 68026 }, { 0x0CFA, 68030 }, { 0x0D09, 68034 }, { 0x0D16, 68038 }, { 0x0D07, 68042 }, { 0x0CF8, 68046 }, { 0x0D19, 68050 }, { 0x0D17, 68055 }, { 0x0D18, 68060 }, { 0x0C7A, 68065 }, { 0x0C7C, 68072 }, { 0x0C7B, 68077 }, { 0x0D1E, 68082 }, { 0x0D1F, 68087 }, { 0x0D1C, 68092 }, { 0x0D1D, 68097 }, { 0x4AA2, 68102 }, { 0x4A5B, 68104 }, { 0x4A9E, 68106 }, { 0x4A9D, 68109 }, { 0x4A9C, 68112 }, { 0x4A9B, 68115 }, { 0x4A9F, 68118 }, { 0x4A9A, 68121 }, { 0x4AA4, 68124 }, { 0x4AA9, 68127 }, { 0x4AA5, 68130 }, { 0x4AA8, 68133 }, { 0x4AA7, 68136 }, { 0x4AAC, 68139 }, { 0x4AA3, 68142 }, { 0x4AAB, 68145 }, { 0x4AAA, 68148 }, { 0x4AA6, 68151 }, { 0x4AA0, 68154 }, { 0x4A94, 68156 }, { 0x4A8C, 68160 }, { 0x4A97, 68164 }, { 0x4A8E, 68168 }, { 0x4A8B, 68172 }, { 0x4A96, 68176 }, { 0x4A99, 68180 }, { 0x4A8D, 68184 }, { 0x4A8F, 68188 }, { 0x4A95, 68192 }, { 0x4A98, 68197 }, { 0x4A92, 68202 }, { 0x4A90, 68207 }, { 0x4A93, 68212 }, { 0x4A91, 68217 }, { 0x4A5C, 68222 }, { 0x4A66, 68225 }, { 0x4A5E, 68228 }, { 0x4A68, 68231 }, { 0x4A60, 68234 }, { 0x4A5D, 68237 }, { 0x4A67, 68240 }, { 0x4A69, 68243 }, { 0x4A80, 68246 }, { 0x4A6F, 68249 }, { 0x4A7B, 68252 }, { 0x4A6C, 68255 }, { 0x4A8A, 68258 }, { 0x4A5F, 68261 }, { 0x4A71, 68264 }, { 0x4A6A, 68267 }, { 0x4A85, 68270 }, { 0x4A82, 68273 }, { 0x4A7D, 68276 }, { 0x4A7E, 68279 }, { 0x4A84, 68282 }, { 0x4A89, 68285 }, { 0x4A79, 68288 }, { 0x4A61, 68291 }, { 0x4A86, 68294 }, { 0x4A83, 68297 }, { 0x4A81, 68300 }, { 0x4A70, 68303 }, { 0x4A76, 68306 }, { 0x4A7C, 68309 }, { 0x4A6D, 68312 }, { 0x4A72, 68315 }, { 0x4A6B, 68318 }, { 0x4A6E, 68321 }, { 0x4A78, 68324 }, { 0x4A73, 68327 }, { 0x4A7F, 68330 }, { 0x4A87, 68333 }, { 0x4A88, 68336 }, { 0x4A7A, 68339 }, { 0x4A74, 68342 }, { 0x4A77, 68345 }, { 0x4A75, 68348 }, { 0x4A64, 68351 }, { 0x4A62, 68355 }, { 0x4A65, 68359 }, { 0x4A63, 68363 }, { 0x4AA1, 68367 }, { 0x6FD7, 68370 }, { 0x6E6C, 68371 }, { 0x218C, 68373 }, { 0x218B, 68376 }, { 0x218E, 68379 }, { 0x2191, 68382 }, { 0x218F, 68385 }, { 0x218A, 68388 }, { 0x218D, 68391 }, { 0x2190, 68394 }, { 0x6CF5, 68397 }, { 0x71A6, 68398 }, { 0x1C67, 68400 }, { 0x6E3B, 68403 }, { 0x71C2, 68406 }, { 0x1D28, 68408 }, { 0x1D1A, 68412 }, { 0x246C, 68414 }, { 0x1D2E, 68418 }, { 0x1D39, 68422 }, { 0x1D3A, 68427 }, { 0x70F4, 68432 }, { 0x70EC, 68438 }, { 0x70F8, 68444 }, { 0x1D67, 68450 }, { 0x70F0, 68455 }, { 0x716A, 68461 }, { 0x2463, 68466 }, { 0x70FC, 68471 }, { 0x1D4E, 68476 }, { 0x2660, 68482 }, { 0x26E1, 68485 }, { 0x712C, 68490 }, { 0x7128, 68493 }, { 0x1D70, 68497 }, { 0x1D74, 68500 }, { 0x1D76, 68505 }, { 0x1D75, 68513 }, { 0x1D73, 68521 }, { 0x270E, 68526 }, { 0x7166, 68534 }, { 0x1D77, 68540 }, { 0x1D78, 68544 }, { 0x2908, 68550 }, { 0x1D6A, 68552 }, { 0x1D5A, 68555 }, { 0x1D51, 68558 }, { 0x6FA8, 68561 }, { 0x2464, 68563 }, { 0x24B2, 68566 }, { 0x24BA, 68573 }, { 0x24BD, 68580 }, { 0x24C8, 68591 }, { 0x24AE, 68602 }, { 0x24B6, 68609 }, { 0x1D48, 68616 }, { 0x1D47, 68621 }, { 0x7120, 68626 }, { 0x7162, 68629 }, { 0x234A, 68632 }, { 0x7124, 68635 }, { 0x7130, 68638 }, { 0x24A3, 68641 }, { 0x2725, 68647 }, { 0x711C, 68653 }, { 0x26BB, 68656 }, { 0x26CB, 68659 }, { 0x7110, 68664 }, { 0x26F8, 68670 }, { 0x26F9, 68677 }, { 0x7118, 68684 }, { 0x7114, 68691 }, { 0x26D3, 68697 }, { 0x710C, 68704 }, { 0x7108, 68710 }, { 0x26D9, 68716 }, { 0x26C5, 68724 }, { 0x26DD, 68728 }, { 0x2266, 68732 }, { 0x6C46, 68734 }, { 0x21FA, 68735 }, { 0x6DCD, 68737 }, { 0x6F44, 68738 }, { 0x6F5A, 68740 }, { 0x6CBC, 68742 }, { 0x2267, 68744 }, { 0x1C20, 68746 }, { 0x1C1E, 68750 }, { 0x2262, 68753 }, { 0x701A, 68754 }, { 0x7019, 68756 }, { 0x6D03, 68758 }, { 0x1CB8, 68760 }, { 0x21AC, 68762 }, { 0x053E, 68763 }, { 0x053A, 68766 }, { 0x0510, 68769 }, { 0x0520, 68771 }, { 0x0533, 68775 }, { 0x0516, 68779 }, { 0x0519, 68783 }, { 0x051A, 68787 }, { 0x0522, 68791 }, { 0x0523, 68795 }, { 0x0537, 68799 }, { 0x052E, 68803 }, { 0x051B, 68807 }, { 0x052A, 68811 }, { 0x0527, 68815 }, { 0x0518, 68819 }, { 0x0513, 68823 }, { 0x0514, 68827 }, { 0x052B, 68831 }, { 0x0517, 68835 }, { 0x0538, 68839 }, { 0x0515, 68843 }, { 0x051D, 68847 }, { 0x0536, 68851 }, { 0x0521, 68855 }, { 0x0526, 68859 }, { 0x0528, 68863 }, { 0x052C, 68867 }, { 0x0532, 68871 }, { 0x052F, 68875 }, { 0x0529, 68879 }, { 0x0530, 68883 }, { 0x051F, 68887 }, { 0x051C, 68891 }, { 0x0525, 68895 }, { 0x0524, 68899 }, { 0x052D, 68903 }, { 0x051E, 68907 }, { 0x0535, 68911 }, { 0x0531, 68915 }, { 0x0534, 68919 }, { 0x0539, 68923 }, { 0x3A15, 68928 }, { 0x3A16, 68933 }, { 0x3A14, 68938 }, { 0x3A18, 68943 }, { 0x3A17, 68948 }, { 0x053B, 68953 }, { 0x04F3, 68955 }, { 0x0506, 68959 }, { 0x04E9, 68963 }, { 0x04EC, 68967 }, { 0x04ED, 68971 }, { 0x04F5, 68975 }, { 0x04F6, 68979 }, { 0x050A, 68983 }, { 0x0501, 68987 }, { 0x04EE, 68991 }, { 0x04FD, 68995 }, { 0x04FA, 68999 }, { 0x04EB, 69003 }, { 0x04E6, 69007 }, { 0x04E7, 69011 }, { 0x04FE, 69015 }, { 0x04EA, 69019 }, { 0x050B, 69023 }, { 0x04E8, 69027 }, { 0x04F0, 69031 }, { 0x0509, 69035 }, { 0x04F4, 69039 }, { 0x04F9, 69043 }, { 0x04FB, 69047 }, { 0x04FF, 69051 }, { 0x0505, 69055 }, { 0x0502, 69059 }, { 0x04FC, 69063 }, { 0x0503, 69067 }, { 0x04F2, 69071 }, { 0x04EF, 69075 }, { 0x04F8, 69079 }, { 0x04F7, 69083 }, { 0x0500, 69087 }, { 0x04F1, 69091 }, { 0x0508, 69095 }, { 0x0504, 69099 }, { 0x0507, 69103 }, { 0x050E, 69107 }, { 0x050C, 69110 }, { 0x0511, 69116 }, { 0x050D, 69119 }, { 0x050F, 69121 }, { 0x0512, 69124 }, { 0x000A, 69127 }, { 0x1DA0, 69128 }, { 0x1BF6, 69130 }, { 0x6D9A, 69131 }, { 0x6D66, 69133 }, { 0x71B5, 69135 }, { 0x176F, 69137 }, { 0x172B, 69140 }, { 0x172C, 69144 }, { 0x172F, 69148 }, { 0x172D, 69151 }, { 0x172E, 69154 }, { 0x175F, 69157 }, { 0x1785, 69160 }, { 0x1786, 69163 }, { 0x1784, 69166 }, { 0x1778, 69169 }, { 0x177D, 69172 }, { 0x1779, 69175 }, { 0x177C, 69178 }, { 0x177B, 69181 }, { 0x1780, 69184 }, { 0x1777, 69187 }, { 0x177F, 69190 }, { 0x177E, 69193 }, { 0x177A, 69196 }, { 0x1781, 69199 }, { 0x1767, 69201 }, { 0x1768, 69206 }, { 0x1765, 69212 }, { 0x1766, 69217 }, { 0x1761, 69223 }, { 0x1762, 69227 }, { 0x1763, 69232 }, { 0x1764, 69236 }, { 0x176D, 69241 }, { 0x176E, 69245 }, { 0x1769, 69250 }, { 0x176A, 69254 }, { 0x176C, 69259 }, { 0x176B, 69265 }, { 0x1760, 69270 }, { 0x1783, 69274 }, { 0x1754, 69276 }, { 0x1755, 69279 }, { 0x1743, 69283 }, { 0x1744, 69286 }, { 0x174F, 69290 }, { 0x1750, 69293 }, { 0x174A, 69297 }, { 0x174B, 69302 }, { 0x1773, 69307 }, { 0x1740, 69311 }, { 0x1741, 69314 }, { 0x175E, 69318 }, { 0x1745, 69321 }, { 0x1746, 69324 }, { 0x173E, 69328 }, { 0x173F, 69331 }, { 0x1759, 69335 }, { 0x1738, 69338 }, { 0x1739, 69342 }, { 0x1756, 69347 }, { 0x1751, 69350 }, { 0x174C, 69353 }, { 0x1752, 69357 }, { 0x1753, 69360 }, { 0x1758, 69364 }, { 0x1736, 69367 }, { 0x1737, 69371 }, { 0x175D, 69376 }, { 0x175B, 69379 }, { 0x175C, 69383 }, { 0x174D, 69387 }, { 0x174E, 69390 }, { 0x1748, 69394 }, { 0x1749, 69398 }, { 0x1774, 69403 }, { 0x175A, 69407 }, { 0x1757, 69410 }, { 0x1770, 69413 }, { 0x1742, 69417 }, { 0x1747, 69420 }, { 0x1775, 69423 }, { 0x1771, 69427 }, { 0x1772, 69431 }, { 0x1730, 69435 }, { 0x1731, 69438 }, { 0x173A, 69442 }, { 0x1732, 69445 }, { 0x1733, 69448 }, { 0x173C, 69452 }, { 0x173D, 69455 }, { 0x1734, 69459 }, { 0x1735, 69462 }, { 0x173B, 69466 }, { 0x1776, 69469 }, { 0x1782, 69473 }, { 0x178B, 69475 }, { 0x1791, 69479 }, { 0x178C, 69484 }, { 0x1789, 69489 }, { 0x178D, 69493 }, { 0x1788, 69497 }, { 0x178A, 69501 }, { 0x178E, 69505 }, { 0x1790, 69509 }, { 0x178F, 69513 }, { 0x179A, 69517 }, { 0x1799, 69522 }, { 0x1793, 69527 }, { 0x1792, 69532 }, { 0x1795, 69537 }, { 0x1798, 69542 }, { 0x1794, 69549 }, { 0x1797, 69554 }, { 0x1796, 69561 }, { 0x179F, 69566 }, { 0x17A3, 69572 }, { 0x17A0, 69578 }, { 0x17A1, 69584 }, { 0x17A2, 69590 }, { 0x179C, 69596 }, { 0x179B, 69602 }, { 0x179E, 69608 }, { 0x179D, 69614 }, { 0x1787, 69620 }, { 0x6DEF, 69622 }, { 0x6DF1, 69626 }, { 0x6DF2, 69630 }, { 0x6DF0, 69634 }, { 0x2218, 69638 }, { 0x6CBD, 69639 }, { 0x6D5C, 69641 }, { 0x6E51, 69642 }, { 0x6E0C, 69643 }, { 0x2C38, 69645 }, { 0x2C37, 69649 }, { 0x2C35, 69653 }, { 0x2C36, 69657 }, { 0x2B9F, 69661 }, { 0x2B8A, 69664 }, { 0x2B9D, 69667 }, { 0x2B8E, 69670 }, { 0x2BA1, 69673 }, { 0x2B8D, 69676 }, { 0x2B92, 69679 }, { 0x2B94, 69682 }, { 0x2BAC, 69685 }, { 0x2B95, 69688 }, { 0x2B93, 69691 }, { 0x2B91, 69694 }, { 0x2B8C, 69697 }, { 0x2B90, 69700 }, { 0x2BA0, 69703 }, { 0x2B8B, 69706 }, { 0x2B96, 69709 }, { 0x2B9B, 69712 }, { 0x2B9E, 69715 }, { 0x2B8F, 69718 }, { 0x2BAD, 69721 }, { 0x2BAF, 69724 }, { 0x2B97, 69727 }, { 0x2B9C, 69730 }, { 0x2BA3, 69733 }, { 0x2C31, 69736 }, { 0x2BA7, 69739 }, { 0x2BA5, 69742 }, { 0x2C21, 69745 }, { 0x2B99, 69748 }, { 0x2C25, 69751 }, { 0x2BA2, 69754 }, { 0x2BA4, 69757 }, { 0x2BA8, 69760 }, { 0x2BAB, 69763 }, { 0x2C39, 69766 }, { 0x2BB1, 69769 }, { 0x2C24, 69772 }, { 0x2BB2, 69775 }, { 0x2C2D, 69778 }, { 0x2C29, 69781 }, { 0x2BAE, 69784 }, { 0x2C23, 69787 }, { 0x2C3A, 69790 }, { 0x2BB0, 69793 }, { 0x2C32, 69796 }, { 0x2C27, 69799 }, { 0x2BA6, 69802 }, { 0x2B9A, 69805 }, { 0x2B98, 69808 }, { 0x2C22, 69811 }, { 0x2C3B, 69814 }, { 0x2BA9, 69817 }, { 0x2C2A, 69820 }, { 0x2BAA, 69823 }, { 0x2C26, 69826 }, { 0x2C2B, 69829 }, { 0x2C2E, 69832 }, { 0x2C33, 69835 }, { 0x2C28, 69838 }, { 0x2C2C, 69841 }, { 0x2C2F, 69844 }, { 0x2C30, 69847 }, { 0x2C34, 69850 }, { 0x169C, 69853 }, { 0x1698, 69857 }, { 0x1696, 69861 }, { 0x1699, 69865 }, { 0x1697, 69869 }, { 0x169A, 69873 }, { 0x1694, 69877 }, { 0x1684, 69880 }, { 0x168B, 69883 }, { 0x1688, 69886 }, { 0x1680, 69889 }, { 0x1695, 69892 }, { 0x168C, 69895 }, { 0x167F, 69898 }, { 0x1691, 69901 }, { 0x1685, 69904 }, { 0x1689, 69907 }, { 0x1683, 69910 }, { 0x1690, 69913 }, { 0x1693, 69916 }, { 0x1687, 69919 }, { 0x1692, 69922 }, { 0x168F, 69925 }, { 0x1686, 69928 }, { 0x1681, 69931 }, { 0x168A, 69934 }, { 0x168D, 69937 }, { 0x1682, 69940 }, { 0x168E, 69943 }, { 0x169B, 69946 }, { 0x6D12, 69948 }, { 0x6EA6, 69950 }, { 0x6EA7, 69951 }, { 0x2128, 69955 }, { 0x217E, 69956 }, { 0x6E00, 69957 }, { 0x1114, 69958 }, { 0x11AB, 69961 }, { 0x110B, 69964 }, { 0x1267, 69967 }, { 0x110D, 69970 }, { 0x118D, 69973 }, { 0x11F4, 69976 }, { 0x11C5, 69979 }, { 0x11DA, 69982 }, { 0x110F, 69985 }, { 0x1153, 69988 }, { 0x128F, 69991 }, { 0x125A, 69994 }, { 0x120F, 69997 }, { 0x1170, 70000 }, { 0x1248, 70003 }, { 0x1115, 70006 }, { 0x1126, 70009 }, { 0x1138, 70012 }, { 0x1560, 70015 }, { 0x119A, 70018 }, { 0x1193, 70021 }, { 0x1195, 70024 }, { 0x1197, 70027 }, { 0x1135, 70030 }, { 0x1263, 70033 }, { 0x125D, 70036 }, { 0x125F, 70039 }, { 0x1261, 70042 }, { 0x1287, 70045 }, { 0x110E, 70048 }, { 0x1136, 70051 }, { 0x117C, 70054 }, { 0x1175, 70057 }, { 0x1177, 70060 }, { 0x1179, 70063 }, { 0x118E, 70066 }, { 0x11E4, 70069 }, { 0x11DD, 70072 }, { 0x12B0, 70075 }, { 0x11DF, 70078 }, { 0x11E1, 70081 }, { 0x11B4, 70084 }, { 0x11AD, 70087 }, { 0x11C7, 70090 }, { 0x11AF, 70093 }, { 0x11B1, 70096 }, { 0x11D1, 70099 }, { 0x11CA, 70102 }, { 0x129F, 70105 }, { 0x11DC, 70108 }, { 0x11CC, 70111 }, { 0x11CE, 70114 }, { 0x1137, 70117 }, { 0x1110, 70120 }, { 0x155F, 70123 }, { 0x1142, 70126 }, { 0x1139, 70129 }, { 0x113B, 70132 }, { 0x113D, 70135 }, { 0x128D, 70138 }, { 0x1289, 70141 }, { 0x128B, 70144 }, { 0x1255, 70147 }, { 0x124C, 70150 }, { 0x1250, 70153 }, { 0x1252, 70156 }, { 0x11FE, 70159 }, { 0x11F7, 70162 }, { 0x122F, 70165 }, { 0x11F9, 70168 }, { 0x11FB, 70171 }, { 0x1211, 70174 }, { 0x115F, 70177 }, { 0x1156, 70180 }, { 0x1274, 70183 }, { 0x1158, 70186 }, { 0x115A, 70189 }, { 0x1121, 70192 }, { 0x1116, 70195 }, { 0x1118, 70198 }, { 0x111C, 70201 }, { 0x1237, 70204 }, { 0x1230, 70207 }, { 0x1232, 70210 }, { 0x1234, 70213 }, { 0x110C, 70216 }, { 0x1561, 70219 }, { 0x119B, 70222 }, { 0x1377, 70225 }, { 0x1196, 70229 }, { 0x1198, 70232 }, { 0x11A6, 70235 }, { 0x119C, 70238 }, { 0x119E, 70241 }, { 0x11A2, 70244 }, { 0x1264, 70247 }, { 0x1260, 70250 }, { 0x1262, 70253 }, { 0x117D, 70256 }, { 0x1567, 70259 }, { 0x1178, 70262 }, { 0x117A, 70265 }, { 0x1188, 70268 }, { 0x117E, 70271 }, { 0x1180, 70274 }, { 0x1184, 70277 }, { 0x11E5, 70280 }, { 0x156C, 70283 }, { 0x12AE, 70286 }, { 0x12AA, 70289 }, { 0x12AC, 70292 }, { 0x11E0, 70295 }, { 0x11E2, 70298 }, { 0x11F0, 70301 }, { 0x11E6, 70304 }, { 0x11E8, 70307 }, { 0x11EC, 70310 }, { 0x11B5, 70313 }, { 0x1569, 70316 }, { 0x11B0, 70319 }, { 0x11B2, 70322 }, { 0x11C0, 70325 }, { 0x11B6, 70328 }, { 0x11B8, 70331 }, { 0x11BC, 70334 }, { 0x11D2, 70337 }, { 0x156B, 70340 }, { 0x129D, 70343 }, { 0x1299, 70346 }, { 0x129B, 70349 }, { 0x11CD, 70352 }, { 0x12A0, 70355 }, { 0x11CF, 70358 }, { 0x156A, 70361 }, { 0x11D5, 70364 }, { 0x11D3, 70367 }, { 0x1575, 70370 }, { 0x1579, 70373 }, { 0x1143, 70376 }, { 0x1564, 70379 }, { 0x113C, 70382 }, { 0x113E, 70385 }, { 0x1563, 70388 }, { 0x114E, 70391 }, { 0x1144, 70394 }, { 0x1146, 70397 }, { 0x114A, 70400 }, { 0x128E, 70403 }, { 0x1379, 70406 }, { 0x128A, 70409 }, { 0x128C, 70412 }, { 0x1256, 70415 }, { 0x1574, 70418 }, { 0x1251, 70421 }, { 0x1253, 70424 }, { 0x1582, 70427 }, { 0x157E, 70430 }, { 0x1580, 70433 }, { 0x11FF, 70436 }, { 0x156E, 70439 }, { 0x121F, 70442 }, { 0x121A, 70445 }, { 0x121B, 70448 }, { 0x121D, 70451 }, { 0x11FA, 70454 }, { 0x11FC, 70457 }, { 0x156D, 70460 }, { 0x120A, 70463 }, { 0x1200, 70466 }, { 0x1202, 70469 }, { 0x1206, 70472 }, { 0x1160, 70475 }, { 0x1566, 70478 }, { 0x1270, 70481 }, { 0x1268, 70484 }, { 0x126A, 70487 }, { 0x126E, 70490 }, { 0x1159, 70493 }, { 0x115B, 70496 }, { 0x1174, 70499 }, { 0x1171, 70502 }, { 0x1279, 70505 }, { 0x1172, 70508 }, { 0x1173, 70511 }, { 0x116B, 70514 }, { 0x1161, 70517 }, { 0x1163, 70520 }, { 0x1167, 70523 }, { 0x127D, 70526 }, { 0x127A, 70529 }, { 0x127B, 70532 }, { 0x127C, 70535 }, { 0x1123, 70538 }, { 0x1562, 70541 }, { 0x111A, 70544 }, { 0x111E, 70547 }, { 0x1238, 70550 }, { 0x1573, 70553 }, { 0x1233, 70556 }, { 0x1235, 70559 }, { 0x1572, 70562 }, { 0x1243, 70565 }, { 0x1239, 70568 }, { 0x123B, 70571 }, { 0x123F, 70574 }, { 0x1194, 70577 }, { 0x11A8, 70580 }, { 0x11A0, 70583 }, { 0x11A4, 70586 }, { 0x125E, 70589 }, { 0x1378, 70592 }, { 0x1265, 70596 }, { 0x1176, 70599 }, { 0x118A, 70602 }, { 0x1568, 70605 }, { 0x1182, 70608 }, { 0x1186, 70611 }, { 0x11DE, 70614 }, { 0x12AF, 70617 }, { 0x12AB, 70620 }, { 0x12AD, 70623 }, { 0x11F2, 70626 }, { 0x11EA, 70629 }, { 0x11EE, 70632 }, { 0x11AE, 70635 }, { 0x11C2, 70638 }, { 0x11BA, 70641 }, { 0x11BE, 70644 }, { 0x11CB, 70647 }, { 0x129E, 70650 }, { 0x137A, 70653 }, { 0x129A, 70656 }, { 0x129C, 70659 }, { 0x137F, 70662 }, { 0x137B, 70665 }, { 0x137D, 70668 }, { 0x11D7, 70671 }, { 0x1577, 70674 }, { 0x157B, 70677 }, { 0x113A, 70680 }, { 0x1150, 70683 }, { 0x1148, 70686 }, { 0x114C, 70689 }, { 0x1565, 70692 }, { 0x1288, 70695 }, { 0x124F, 70698 }, { 0x1258, 70701 }, { 0x157D, 70704 }, { 0x157F, 70707 }, { 0x1581, 70710 }, { 0x11F8, 70713 }, { 0x1220, 70716 }, { 0x1570, 70719 }, { 0x121C, 70722 }, { 0x121E, 70725 }, { 0x156F, 70728 }, { 0x122B, 70731 }, { 0x1221, 70734 }, { 0x1223, 70737 }, { 0x1227, 70740 }, { 0x120C, 70743 }, { 0x1204, 70746 }, { 0x1208, 70749 }, { 0x1157, 70752 }, { 0x1271, 70755 }, { 0x126C, 70758 }, { 0x126F, 70761 }, { 0x1593, 70764 }, { 0x1592, 70767 }, { 0x1293, 70770 }, { 0x1290, 70773 }, { 0x1291, 70776 }, { 0x1292, 70779 }, { 0x1278, 70782 }, { 0x1275, 70785 }, { 0x1276, 70788 }, { 0x1277, 70791 }, { 0x116D, 70794 }, { 0x1165, 70797 }, { 0x1169, 70800 }, { 0x1231, 70803 }, { 0x1245, 70806 }, { 0x123D, 70809 }, { 0x1241, 70812 }, { 0x112C, 70815 }, { 0x1134, 70821 }, { 0x1133, 70826 }, { 0x112E, 70830 }, { 0x1129, 70834 }, { 0x112A, 70838 }, { 0x112D, 70842 }, { 0x1132, 70848 }, { 0x158D, 70854 }, { 0x112B, 70859 }, { 0x112F, 70865 }, { 0x1130, 70870 }, { 0x1131, 70877 }, { 0x158E, 70882 }, { 0x1298, 70887 }, { 0x1380, 70890 }, { 0x137C, 70893 }, { 0x137E, 70896 }, { 0x122D, 70899 }, { 0x1225, 70902 }, { 0x1229, 70905 }, { 0x1571, 70908 }, { 0x1272, 70911 }, { 0x1598, 70914 }, { 0x1597, 70917 }, { 0x1596, 70920 }, { 0x1595, 70923 }, { 0x1594, 70926 }, { 0x15A2, 70929 }, { 0x15A3, 70934 }, { 0x110A, 70939 }, { 0x11F6, 70942 }, { 0x125C, 70946 }, { 0x1269, 70950 }, { 0x126B, 70954 }, { 0x126D, 70958 }, { 0x124D, 70962 }, { 0x158F, 70966 }, { 0x11C9, 70970 }, { 0x12CD, 70974 }, { 0x12CA, 70978 }, { 0x12CB, 70982 }, { 0x12CC, 70986 }, { 0x1324, 70990 }, { 0x131F, 70994 }, { 0x11AC, 70998 }, { 0x124B, 71002 }, { 0x159B, 71006 }, { 0x15A0, 71010 }, { 0x12A4, 71014 }, { 0x12A1, 71018 }, { 0x12A2, 71022 }, { 0x12A3, 71026 }, { 0x159A, 71030 }, { 0x1599, 71034 }, { 0x1127, 71038 }, { 0x1111, 71042 }, { 0x1199, 71046 }, { 0x117B, 71050 }, { 0x11E3, 71054 }, { 0x11B3, 71058 }, { 0x11D0, 71062 }, { 0x113F, 71066 }, { 0x11FD, 71070 }, { 0x115C, 71074 }, { 0x1236, 71078 }, { 0x1152, 71082 }, { 0x12B9, 71086 }, { 0x1155, 71090 }, { 0x1113, 71094 }, { 0x12F8, 71098 }, { 0x1350, 71102 }, { 0x115E, 71106 }, { 0x1112, 71110 }, { 0x12FE, 71114 }, { 0x12FB, 71118 }, { 0x12FD, 71122 }, { 0x12FA, 71126 }, { 0x12F9, 71130 }, { 0x1141, 71134 }, { 0x1325, 71138 }, { 0x1321, 71142 }, { 0x1323, 71146 }, { 0x1320, 71150 }, { 0x131E, 71154 }, { 0x130B, 71158 }, { 0x1331, 71162 }, { 0x132E, 71166 }, { 0x1330, 71170 }, { 0x132D, 71174 }, { 0x132C, 71178 }, { 0x1317, 71182 }, { 0x1314, 71186 }, { 0x1316, 71190 }, { 0x1313, 71194 }, { 0x1312, 71198 }, { 0x1311, 71202 }, { 0x130E, 71206 }, { 0x11DB, 71210 }, { 0x1310, 71214 }, { 0x130D, 71218 }, { 0x130C, 71222 }, { 0x12F7, 71226 }, { 0x12F4, 71230 }, { 0x12F6, 71234 }, { 0x12F3, 71238 }, { 0x12F2, 71242 }, { 0x12D9, 71246 }, { 0x12D6, 71250 }, { 0x12D8, 71254 }, { 0x12D5, 71258 }, { 0x12D4, 71262 }, { 0x135D, 71266 }, { 0x135A, 71270 }, { 0x1364, 71274 }, { 0x135C, 71278 }, { 0x1359, 71282 }, { 0x1358, 71286 }, { 0x12DF, 71290 }, { 0x12DC, 71294 }, { 0x12DE, 71298 }, { 0x12DB, 71302 }, { 0x12DA, 71306 }, { 0x131D, 71310 }, { 0x131A, 71314 }, { 0x131C, 71318 }, { 0x1319, 71322 }, { 0x1318, 71326 }, { 0x134F, 71330 }, { 0x134C, 71334 }, { 0x134E, 71338 }, { 0x134B, 71342 }, { 0x134A, 71346 }, { 0x1370, 71350 }, { 0x136D, 71354 }, { 0x136F, 71358 }, { 0x136C, 71362 }, { 0x136B, 71366 }, { 0x115D, 71370 }, { 0x1337, 71374 }, { 0x1334, 71378 }, { 0x1336, 71382 }, { 0x1333, 71386 }, { 0x1332, 71390 }, { 0x1357, 71394 }, { 0x1354, 71398 }, { 0x1356, 71402 }, { 0x1353, 71406 }, { 0x1352, 71410 }, { 0x159E, 71414 }, { 0x12FC, 71418 }, { 0x12D3, 71422 }, { 0x12D0, 71426 }, { 0x12D2, 71430 }, { 0x12CF, 71434 }, { 0x12CE, 71438 }, { 0x159F, 71442 }, { 0x159C, 71446 }, { 0x1140, 71450 }, { 0x12E5, 71454 }, { 0x12E2, 71458 }, { 0x12E4, 71462 }, { 0x12E1, 71466 }, { 0x12E0, 71470 }, { 0x1322, 71474 }, { 0x132B, 71478 }, { 0x1328, 71482 }, { 0x132A, 71486 }, { 0x1327, 71490 }, { 0x1326, 71494 }, { 0x15A1, 71498 }, { 0x1304, 71502 }, { 0x1301, 71506 }, { 0x1303, 71510 }, { 0x1300, 71514 }, { 0x12FF, 71518 }, { 0x130A, 71522 }, { 0x1307, 71526 }, { 0x1309, 71530 }, { 0x1306, 71534 }, { 0x1305, 71538 }, { 0x132F, 71542 }, { 0x133D, 71546 }, { 0x133A, 71550 }, { 0x133C, 71554 }, { 0x1339, 71558 }, { 0x1338, 71562 }, { 0x1315, 71566 }, { 0x130F, 71570 }, { 0x12F5, 71574 }, { 0x12D7, 71578 }, { 0x135B, 71582 }, { 0x1363, 71586 }, { 0x1360, 71590 }, { 0x1362, 71594 }, { 0x135F, 71598 }, { 0x135E, 71602 }, { 0x12EB, 71606 }, { 0x12E8, 71610 }, { 0x12EA, 71614 }, { 0x12E7, 71618 }, { 0x12E6, 71622 }, { 0x1349, 71626 }, { 0x1346, 71630 }, { 0x1348, 71634 }, { 0x1345, 71638 }, { 0x1344, 71642 }, { 0x136A, 71646 }, { 0x1367, 71650 }, { 0x1369, 71654 }, { 0x1366, 71658 }, { 0x1365, 71662 }, { 0x12F1, 71666 }, { 0x12EE, 71670 }, { 0x12F0, 71674 }, { 0x12ED, 71678 }, { 0x12EC, 71682 }, { 0x12DD, 71686 }, { 0x131B, 71690 }, { 0x134D, 71694 }, { 0x136E, 71698 }, { 0x159D, 71702 }, { 0x1335, 71707 }, { 0x1355, 71711 }, { 0x12D1, 71715 }, { 0x12E3, 71719 }, { 0x1329, 71723 }, { 0x1302, 71727 }, { 0x1308, 71731 }, { 0x133B, 71735 }, { 0x1361, 71739 }, { 0x12E9, 71743 }, { 0x1347, 71747 }, { 0x1343, 71751 }, { 0x1340, 71755 }, { 0x1342, 71759 }, { 0x133F, 71763 }, { 0x133E, 71767 }, { 0x1368, 71771 }, { 0x12EF, 71775 }, { 0x1376, 71779 }, { 0x1373, 71783 }, { 0x1375, 71787 }, { 0x1372, 71791 }, { 0x1371, 71795 }, { 0x1341, 71799 }, { 0x1374, 71803 }, { 0x15A4, 71807 }, { 0x1351, 71812 }, { 0x158B, 71817 }, { 0x1128, 71821 }, { 0x1215, 71825 }, { 0x1214, 71829 }, { 0x1125, 71833 }, { 0x1120, 71837 }, { 0x11AA, 71841 }, { 0x118C, 71845 }, { 0x11C4, 71849 }, { 0x11D9, 71853 }, { 0x1219, 71857 }, { 0x1218, 71861 }, { 0x1216, 71865 }, { 0x1217, 71869 }, { 0x120E, 71873 }, { 0x116F, 71877 }, { 0x1247, 71881 }, { 0x1285, 71885 }, { 0x1283, 71889 }, { 0x127E, 71893 }, { 0x127F, 71897 }, { 0x1281, 71901 }, { 0x1284, 71905 }, { 0x1280, 71909 }, { 0x1282, 71913 }, { 0x1286, 71917 }, { 0x1586, 71921 }, { 0x1585, 71925 }, { 0x1587, 71929 }, { 0x1588, 71933 }, { 0x1583, 71937 }, { 0x1589, 71941 }, { 0x1584, 71945 }, { 0x158A, 71949 }, { 0x1576, 71953 }, { 0x157A, 71957 }, { 0x1578, 71961 }, { 0x157C, 71965 }, { 0x12B8, 71969 }, { 0x12B6, 71973 }, { 0x12B1, 71977 }, { 0x12B2, 71981 }, { 0x12B4, 71985 }, { 0x12B7, 71989 }, { 0x12B3, 71993 }, { 0x12B5, 71997 }, { 0x158C, 72001 }, { 0x12BD, 72005 }, { 0x12BA, 72009 }, { 0x12BB, 72013 }, { 0x12BC, 72017 }, { 0x1212, 72021 }, { 0x1389, 72025 }, { 0x12C9, 72029 }, { 0x12C6, 72033 }, { 0x12C7, 72037 }, { 0x12C8, 72041 }, { 0x12C5, 72045 }, { 0x12C2, 72049 }, { 0x12C3, 72053 }, { 0x12C4, 72057 }, { 0x12C1, 72061 }, { 0x12BE, 72065 }, { 0x12BF, 72069 }, { 0x12C0, 72073 }, { 0x11F5, 72077 }, { 0x11C6, 72081 }, { 0x1154, 72085 }, { 0x125B, 72089 }, { 0x124A, 72093 }, { 0x1257, 72097 }, { 0x124E, 72101 }, { 0x1254, 72105 }, { 0x1297, 72109 }, { 0x1294, 72113 }, { 0x1295, 72117 }, { 0x1296, 72121 }, { 0x1122, 72125 }, { 0x1117, 72129 }, { 0x1119, 72133 }, { 0x111D, 72137 }, { 0x11A7, 72141 }, { 0x119D, 72145 }, { 0x119F, 72149 }, { 0x11A3, 72153 }, { 0x1189, 72157 }, { 0x117F, 72161 }, { 0x1181, 72165 }, { 0x1185, 72169 }, { 0x1591, 72173 }, { 0x1590, 72177 }, { 0x11F1, 72181 }, { 0x11E7, 72185 }, { 0x11E9, 72189 }, { 0x11ED, 72193 }, { 0x11C1, 72197 }, { 0x11B7, 72201 }, { 0x11B9, 72205 }, { 0x11BD, 72209 }, { 0x11D6, 72213 }, { 0x11D4, 72217 }, { 0x114F, 72221 }, { 0x1145, 72225 }, { 0x1147, 72229 }, { 0x114B, 72233 }, { 0x120B, 72237 }, { 0x1201, 72241 }, { 0x1203, 72245 }, { 0x1207, 72249 }, { 0x116C, 72253 }, { 0x1162, 72257 }, { 0x1164, 72261 }, { 0x1168, 72265 }, { 0x1124, 72269 }, { 0x111B, 72273 }, { 0x111F, 72277 }, { 0x1244, 72281 }, { 0x123A, 72285 }, { 0x123C, 72289 }, { 0x1240, 72293 }, { 0x11A9, 72297 }, { 0x11A1, 72301 }, { 0x11A5, 72305 }, { 0x1266, 72309 }, { 0x118B, 72313 }, { 0x1183, 72317 }, { 0x1187, 72321 }, { 0x11F3, 72325 }, { 0x11EB, 72329 }, { 0x11EF, 72333 }, { 0x11C3, 72337 }, { 0x11BB, 72341 }, { 0x11BF, 72345 }, { 0x11D8, 72349 }, { 0x1151, 72353 }, { 0x1149, 72357 }, { 0x114D, 72361 }, { 0x1259, 72365 }, { 0x122C, 72369 }, { 0x1222, 72373 }, { 0x1224, 72377 }, { 0x1228, 72381 }, { 0x120D, 72385 }, { 0x1205, 72389 }, { 0x1209, 72393 }, { 0x116E, 72397 }, { 0x1166, 72401 }, { 0x116A, 72405 }, { 0x1246, 72409 }, { 0x123E, 72413 }, { 0x1242, 72417 }, { 0x122E, 72421 }, { 0x1226, 72425 }, { 0x122A, 72429 }, { 0x1273, 72433 }, { 0x11C8, 72437 }, { 0x1210, 72441 }, { 0x1249, 72445 }, { 0x1213, 72449 }, { 0x12A9, 72453 }, { 0x12A8, 72457 }, { 0x12A5, 72461 }, { 0x12A6, 72465 }, { 0x12A7, 72469 }, { 0x1386, 72473 }, { 0x1382, 72477 }, { 0x1384, 72481 }, { 0x1388, 72485 }, { 0x1387, 72490 }, { 0x1381, 72494 }, { 0x1383, 72498 }, { 0x1385, 72502 }, { 0x1192, 72506 }, { 0x118F, 72510 }, { 0x1190, 72514 }, { 0x1191, 72518 }, { 0x6CDB, 72522 }, { 0x6E1E, 72524 }, { 0x3938, 72526 }, { 0x3939, 72530 }, { 0x393A, 72534 }, { 0x393B, 72538 }, { 0x3965, 72542 }, { 0x393C, 72546 }, { 0x393D, 72550 }, { 0x396B, 72554 }, { 0x396D, 72558 }, { 0x396F, 72562 }, { 0x3971, 72566 }, { 0x3972, 72570 }, { 0x3973, 72574 }, { 0x393E, 72578 }, { 0x3940, 72582 }, { 0x3941, 72586 }, { 0x3942, 72590 }, { 0x3943, 72594 }, { 0x3944, 72598 }, { 0x3945, 72602 }, { 0x3946, 72606 }, { 0x3947, 72610 }, { 0x3948, 72614 }, { 0x3949, 72618 }, { 0x394A, 72622 }, { 0x393F, 72626 }, { 0x394B, 72630 }, { 0x394C, 72634 }, { 0x394D, 72638 }, { 0x394E, 72642 }, { 0x394F, 72646 }, { 0x3950, 72650 }, { 0x3951, 72654 }, { 0x3952, 72658 }, { 0x3953, 72662 }, { 0x3954, 72666 }, { 0x3955, 72670 }, { 0x1109, 72674 }, { 0x3956, 72678 }, { 0x3959, 72682 }, { 0x395A, 72686 }, { 0x395B, 72690 }, { 0x395C, 72694 }, { 0x395D, 72698 }, { 0x3964, 72702 }, { 0x3966, 72706 }, { 0x3967, 72710 }, { 0x3968, 72714 }, { 0x3969, 72718 }, { 0x396A, 72722 }, { 0x396C, 72726 }, { 0x396E, 72730 }, { 0x3970, 72734 }, { 0x3981, 72738 }, { 0x3982, 72742 }, { 0x3983, 72746 }, { 0x3984, 72750 }, { 0x3985, 72754 }, { 0x3986, 72758 }, { 0x3987, 72762 }, { 0x1104, 72766 }, { 0x1105, 72770 }, { 0x1106, 72774 }, { 0x1107, 72778 }, { 0x1108, 72782 }, { 0x3974, 72786 }, { 0x3957, 72790 }, { 0x3958, 72794 }, { 0x395E, 72798 }, { 0x395F, 72802 }, { 0x3960, 72806 }, { 0x3961, 72810 }, { 0x3962, 72814 }, { 0x3963, 72818 }, { 0x3975, 72822 }, { 0x3976, 72826 }, { 0x3977, 72830 }, { 0x3978, 72834 }, { 0x3979, 72838 }, { 0x397A, 72842 }, { 0x397B, 72846 }, { 0x397C, 72850 }, { 0x397D, 72854 }, { 0x397E, 72858 }, { 0x397F, 72862 }, { 0x3980, 72866 }, { 0x10AE, 72870 }, { 0x10AF, 72873 }, { 0x10B0, 72876 }, { 0x10B1, 72879 }, { 0x10DB, 72882 }, { 0x10B2, 72885 }, { 0x10B3, 72888 }, { 0x10E1, 72891 }, { 0x10E3, 72894 }, { 0x10E5, 72897 }, { 0x10E7, 72900 }, { 0x10E8, 72903 }, { 0x10E9, 72906 }, { 0x10B4, 72909 }, { 0x10B6, 72912 }, { 0x10B7, 72915 }, { 0x10B8, 72918 }, { 0x10B9, 72921 }, { 0x10BA, 72924 }, { 0x10BB, 72927 }, { 0x10BC, 72930 }, { 0x10BD, 72933 }, { 0x10BE, 72936 }, { 0x10BF, 72939 }, { 0x10C0, 72942 }, { 0x10B5, 72945 }, { 0x10C1, 72948 }, { 0x10C2, 72951 }, { 0x10C3, 72954 }, { 0x10C4, 72957 }, { 0x10C5, 72960 }, { 0x10C6, 72963 }, { 0x10C7, 72966 }, { 0x10C8, 72969 }, { 0x10C9, 72972 }, { 0x10CA, 72975 }, { 0x10CB, 72978 }, { 0x1103, 72981 }, { 0x10CC, 72984 }, { 0x10CF, 72987 }, { 0x10D0, 72990 }, { 0x10D1, 72993 }, { 0x10D2, 72996 }, { 0x10D3, 72999 }, { 0x10DA, 73002 }, { 0x10DC, 73005 }, { 0x10DD, 73008 }, { 0x10DE, 73011 }, { 0x10DF, 73014 }, { 0x10E0, 73017 }, { 0x10E2, 73020 }, { 0x10E4, 73023 }, { 0x10E6, 73026 }, { 0x10F7, 73029 }, { 0x10F8, 73032 }, { 0x10F9, 73035 }, { 0x10FA, 73038 }, { 0x10FB, 73041 }, { 0x10FC, 73044 }, { 0x10FD, 73047 }, { 0x10FE, 73050 }, { 0x10FF, 73053 }, { 0x1100, 73056 }, { 0x1101, 73059 }, { 0x1102, 73062 }, { 0x10EA, 73065 }, { 0x10CD, 73068 }, { 0x10CE, 73071 }, { 0x10D4, 73074 }, { 0x10D5, 73077 }, { 0x10D6, 73080 }, { 0x10D7, 73083 }, { 0x10D8, 73086 }, { 0x10D9, 73089 }, { 0x10EB, 73092 }, { 0x10EC, 73095 }, { 0x10ED, 73098 }, { 0x10EE, 73101 }, { 0x10EF, 73104 }, { 0x10F0, 73107 }, { 0x10F1, 73110 }, { 0x10F2, 73113 }, { 0x10F3, 73116 }, { 0x10F4, 73119 }, { 0x10F5, 73122 }, { 0x10F6, 73125 }, { 0x6C8D, 73128 }, { 0x6C6B, 73129 }, { 0x6FF3, 73130 }, { 0x6D7A, 73132 }, { 0x6D8A, 73133 }, { 0x6CB6, 73136 }, { 0x71A5, 73139 }, { 0x6CB3, 73141 }, { 0x6CC5, 73143 }, { 0x6F50, 73145 }, { 0x1D94, 73147 }, { 0x1E3C, 73150 }, { 0x1E3E, 73154 }, { 0x1E83, 73161 }, { 0x1E86, 73166 }, { 0x1E84, 73169 }, { 0x61F2, 73178 }, { 0x61F7, 73183 }, { 0x61F3, 73188 }, { 0x61F6, 73193 }, { 0x61F5, 73198 }, { 0x61FA, 73203 }, { 0x61F9, 73208 }, { 0x61F8, 73213 }, { 0x61F4, 73218 }, { 0x61E9, 73223 }, { 0x61EE, 73228 }, { 0x61EA, 73233 }, { 0x61ED, 73238 }, { 0x61EC, 73243 }, { 0x61F1, 73248 }, { 0x61F0, 73253 }, { 0x61EF, 73258 }, { 0x61EB, 73263 }, { 0x6C54, 73268 }, { 0x2226, 73270 }, { 0x1C4F, 73272 }, { 0x71B1, 73274 }, { 0x0063, 73275 }, { 0x6DEC, 73277 }, { 0x03E6, 73279 }, { 0x0487, 73283 }, { 0x0489, 73289 }, { 0x0403, 73295 }, { 0x04A3, 73299 }, { 0x03EE, 73305 }, { 0x0413, 73309 }, { 0x0499, 73315 }, { 0x049B, 73321 }, { 0x03F4, 73327 }, { 0x049D, 73331 }, { 0x03F9, 73337 }, { 0x04A9, 73341 }, { 0x04A5, 73348 }, { 0x04A7, 73354 }, { 0x03E7, 73360 }, { 0x03EA, 73364 }, { 0x03FA, 73368 }, { 0x03F1, 73372 }, { 0x04C9, 73376 }, { 0x047C, 73382 }, { 0x04D7, 73388 }, { 0x04E5, 73395 }, { 0x03F2, 73401 }, { 0x0484, 73405 }, { 0x03F3, 73411 }, { 0x047E, 73415 }, { 0x04DF, 73421 }, { 0x0480, 73428 }, { 0x04D9, 73434 }, { 0x0459, 73441 }, { 0x03F6, 73447 }, { 0x0445, 73451 }, { 0x03F7, 73457 }, { 0x0461, 73461 }, { 0x03FB, 73467 }, { 0x04B3, 73471 }, { 0x04B5, 73477 }, { 0x0469, 73483 }, { 0x03EB, 73489 }, { 0x048D, 73493 }, { 0x0406, 73499 }, { 0x0407, 73505 }, { 0x040E, 73509 }, { 0x03F0, 73513 }, { 0x047A, 73517 }, { 0x0455, 73523 }, { 0x0453, 73529 }, { 0x0451, 73536 }, { 0x0435, 73542 }, { 0x03F5, 73546 }, { 0x045D, 73550 }, { 0x04DB, 73557 }, { 0x04D1, 73563 }, { 0x03F8, 73567 }, { 0x3519, 73571 }, { 0x0463, 73578 }, { 0x042F, 73584 }, { 0x03E8, 73588 }, { 0x04D3, 73592 }, { 0x0405, 73596 }, { 0x040D, 73600 }, { 0x34ED, 73604 }, { 0x0404, 73608 }, { 0x03ED, 73612 }, { 0x044F, 73616 }, { 0x0495, 73622 }, { 0x0421, 73628 }, { 0x03FD, 73633 }, { 0x046F, 73637 }, { 0x046D, 73644 }, { 0x04AB, 73650 }, { 0x0408, 73656 }, { 0x350F, 73660 }, { 0x040B, 73664 }, { 0x03E9, 73668 }, { 0x044B, 73672 }, { 0x0449, 73679 }, { 0x04B1, 73685 }, { 0x0447, 73693 }, { 0x04AD, 73699 }, { 0x0409, 73705 }, { 0x3523, 73709 }, { 0x0412, 73713 }, { 0x0425, 73717 }, { 0x04CB, 73721 }, { 0x040F, 73725 }, { 0x0410, 73729 }, { 0x0427, 73733 }, { 0x04CD, 73737 }, { 0x03FE, 73741 }, { 0x03FC, 73745 }, { 0x351B, 73749 }, { 0x04CF, 73753 }, { 0x0419, 73757 }, { 0x03EC, 73761 }, { 0x0478, 73765 }, { 0x044D, 73771 }, { 0x0493, 73777 }, { 0x3515, 73783 }, { 0x04E3, 73787 }, { 0x0415, 73791 }, { 0x3511, 73795 }, { 0x3517, 73799 }, { 0x0429, 73803 }, { 0x0400, 73807 }, { 0x34D5, 73812 }, { 0x04B7, 73816 }, { 0x04B9, 73821 }, { 0x04BF, 73826 }, { 0x04C1, 73831 }, { 0x04C3, 73836 }, { 0x04C5, 73841 }, { 0x04BB, 73846 }, { 0x04BD, 73851 }, { 0x0471, 73856 }, { 0x04DD, 73860 }, { 0x3525, 73866 }, { 0x34F1, 73870 }, { 0x34F3, 73875 }, { 0x34F5, 73880 }, { 0x0402, 73885 }, { 0x189A, 73890 }, { 0x189D, 73895 }, { 0x189C, 73900 }, { 0x3521, 73906 }, { 0x0411, 73910 }, { 0x351F, 73914 }, { 0x351D, 73918 }, { 0x1899, 73922 }, { 0x0401, 73927 }, { 0x34DF, 73931 }, { 0x04AF, 73938 }, { 0x3513, 73944 }, { 0x04D5, 73948 }, { 0x34DB, 73953 }, { 0x34D7, 73958 }, { 0x34D1, 73962 }, { 0x04E1, 73966 }, { 0x0437, 73970 }, { 0x0417, 73974 }, { 0x0433, 73978 }, { 0x0431, 73984 }, { 0x048F, 73989 }, { 0x0491, 73993 }, { 0x03FF, 73999 }, { 0x03EF, 74003 }, { 0x0441, 74008 }, { 0x0414, 74015 }, { 0x049F, 74020 }, { 0x04A1, 74025 }, { 0x34E7, 74032 }, { 0x3527, 74038 }, { 0x34FB, 74043 }, { 0x041D, 74049 }, { 0x1898, 74054 }, { 0x34CF, 74059 }, { 0x0457, 74063 }, { 0x34E9, 74068 }, { 0x3529, 74073 }, { 0x042B, 74078 }, { 0x042D, 74082 }, { 0x34DD, 74090 }, { 0x1896, 74095 }, { 0x34E5, 74100 }, { 0x041B, 74105 }, { 0x0423, 74110 }, { 0x34E1, 74116 }, { 0x34EB, 74121 }, { 0x041F, 74128 }, { 0x0485, 74134 }, { 0x34E3, 74138 }, { 0x04C7, 74143 }, { 0x34D3, 74148 }, { 0x34EF, 74153 }, { 0x0443, 74158 }, { 0x0465, 74163 }, { 0x0467, 74168 }, { 0x045F, 74175 }, { 0x0473, 74180 }, { 0x0475, 74185 }, { 0x0497, 74192 }, { 0x34F9, 74197 }, { 0x34F7, 74202 }, { 0x34D9, 74207 }, { 0x040A, 74212 }, { 0x189E, 74217 }, { 0x0482, 74222 }, { 0x1897, 74227 }, { 0x189B, 74232 }, { 0x040C, 74237 }, { 0x048B, 74242 }, { 0x045B, 74247 }, { 0x046B, 74252 }, { 0x350C, 74257 }, { 0x18FB, 74259 }, { 0x0476, 74264 }, { 0x34FC, 74267 }, { 0x03C6, 74271 }, { 0x0486, 74275 }, { 0x0488, 74281 }, { 0x03E3, 74287 }, { 0x04A2, 74291 }, { 0x03CE, 74297 }, { 0x03C3, 74301 }, { 0x0498, 74307 }, { 0x049A, 74313 }, { 0x03D4, 74319 }, { 0x049C, 74323 }, { 0x03D9, 74329 }, { 0x04A8, 74333 }, { 0x04A4, 74340 }, { 0x04A6, 74346 }, { 0x03C7, 74352 }, { 0x03CA, 74356 }, { 0x03DA, 74360 }, { 0x03D1, 74364 }, { 0x04C8, 74368 }, { 0x047B, 74374 }, { 0x04D6, 74380 }, { 0x04E4, 74387 }, { 0x03D2, 74393 }, { 0x0483, 74397 }, { 0x03D3, 74403 }, { 0x047D, 74407 }, { 0x04DE, 74413 }, { 0x047F, 74420 }, { 0x04D8, 74426 }, { 0x0458, 74433 }, { 0x03D6, 74439 }, { 0x0444, 74443 }, { 0x03D7, 74449 }, { 0x0460, 74453 }, { 0x03DB, 74459 }, { 0x04B2, 74463 }, { 0x04B4, 74469 }, { 0x0468, 74475 }, { 0x03CB, 74481 }, { 0x048C, 74485 }, { 0x03B6, 74491 }, { 0x03B7, 74497 }, { 0x03BE, 74501 }, { 0x03D0, 74505 }, { 0x0479, 74509 }, { 0x0454, 74515 }, { 0x0452, 74521 }, { 0x0450, 74528 }, { 0x0434, 74534 }, { 0x03D5, 74538 }, { 0x045C, 74542 }, { 0x04DA, 74549 }, { 0x04D0, 74555 }, { 0x03D8, 74559 }, { 0x3518, 74563 }, { 0x0462, 74570 }, { 0x042E, 74576 }, { 0x03C8, 74580 }, { 0x04D2, 74584 }, { 0x03E5, 74588 }, { 0x03BD, 74592 }, { 0x34EC, 74596 }, { 0x03E4, 74600 }, { 0x03CD, 74604 }, { 0x044E, 74608 }, { 0x0494, 74614 }, { 0x0420, 74620 }, { 0x03DD, 74625 }, { 0x046E, 74629 }, { 0x046C, 74636 }, { 0x04AA, 74642 }, { 0x03B8, 74648 }, { 0x350E, 74652 }, { 0x03BB, 74656 }, { 0x03C9, 74660 }, { 0x044A, 74664 }, { 0x0448, 74671 }, { 0x04B0, 74677 }, { 0x0446, 74685 }, { 0x04AC, 74691 }, { 0x03B9, 74697 }, { 0x3522, 74701 }, { 0x03C2, 74705 }, { 0x0424, 74709 }, { 0x04CA, 74713 }, { 0x03BF, 74717 }, { 0x03C0, 74721 }, { 0x0426, 74725 }, { 0x04CC, 74729 }, { 0x03DE, 74733 }, { 0x03DC, 74737 }, { 0x351A, 74741 }, { 0x04CE, 74745 }, { 0x0418, 74749 }, { 0x03CC, 74753 }, { 0x0477, 74757 }, { 0x044C, 74763 }, { 0x0492, 74769 }, { 0x3514, 74775 }, { 0x04E2, 74779 }, { 0x03C5, 74783 }, { 0x3510, 74787 }, { 0x3516, 74791 }, { 0x0428, 74795 }, { 0x03E0, 74799 }, { 0x34D4, 74804 }, { 0x04B6, 74808 }, { 0x04B8, 74813 }, { 0x04BE, 74818 }, { 0x04C0, 74823 }, { 0x04C2, 74828 }, { 0x04C4, 74833 }, { 0x04BA, 74838 }, { 0x04BC, 74843 }, { 0x0470, 74848 }, { 0x04DC, 74852 }, { 0x3524, 74858 }, { 0x34F0, 74862 }, { 0x34F2, 74867 }, { 0x34F4, 74872 }, { 0x03E2, 74877 }, { 0x3520, 74882 }, { 0x03C1, 74886 }, { 0x351E, 74890 }, { 0x351C, 74894 }, { 0x03E1, 74898 }, { 0x34DE, 74902 }, { 0x04AE, 74909 }, { 0x3512, 74915 }, { 0x04D4, 74919 }, { 0x34DA, 74924 }, { 0x34D6, 74929 }, { 0x34D0, 74933 }, { 0x04E0, 74937 }, { 0x0436, 74941 }, { 0x0416, 74945 }, { 0x0432, 74949 }, { 0x0430, 74955 }, { 0x048E, 74960 }, { 0x0490, 74964 }, { 0x03DF, 74970 }, { 0x03CF, 74974 }, { 0x0440, 74979 }, { 0x03C4, 74986 }, { 0x049E, 74991 }, { 0x04A0, 74996 }, { 0x34E6, 75003 }, { 0x3526, 75009 }, { 0x34FA, 75014 }, { 0x041C, 75020 }, { 0x34CE, 75025 }, { 0x0456, 75029 }, { 0x34E8, 75034 }, { 0x3528, 75039 }, { 0x042A, 75044 }, { 0x042C, 75048 }, { 0x34DC, 75056 }, { 0x34E4, 75061 }, { 0x041A, 75066 }, { 0x0422, 75071 }, { 0x34E0, 75077 }, { 0x34EA, 75082 }, { 0x041E, 75089 }, { 0x34E2, 75095 }, { 0x04C6, 75100 }, { 0x34D2, 75105 }, { 0x34EE, 75110 }, { 0x0442, 75115 }, { 0x0464, 75120 }, { 0x0466, 75125 }, { 0x045E, 75132 }, { 0x0472, 75137 }, { 0x0474, 75142 }, { 0x0496, 75149 }, { 0x34F8, 75154 }, { 0x34F6, 75159 }, { 0x34D8, 75164 }, { 0x03BA, 75169 }, { 0x0481, 75174 }, { 0x03BC, 75179 }, { 0x048A, 75184 }, { 0x045A, 75189 }, { 0x046A, 75194 }, { 0x350D, 75199 }, { 0x0438, 75201 }, { 0x6F16, 75204 }, { 0x6FD5, 75208 }, { 0x6D15, 75210 }, { 0x1E89, 75213 }, { 0x2227, 75215 }, { 0x00B6, 75217 }, { 0x1D9E, 75219 }, { 0x1E50, 75221 }, { 0x6F09, 75223 }, { 0x6EF4, 75224 }, { 0x6EF5, 75227 }, { 0x6EF6, 75232 }, { 0x6CA4, 75235 }, { 0x22F5, 75236 }, { 0x7192, 75240 }, { 0x5F67, 75242 }, { 0x5F61, 75247 }, { 0x5F63, 75251 }, { 0x5F60, 75255 }, { 0x5F64, 75260 }, { 0x5F5D, 75264 }, { 0x5F66, 75268 }, { 0x5F5F, 75272 }, { 0x5F5E, 75276 }, { 0x5F62, 75281 }, { 0x5F65, 75285 }, { 0x5F4A, 75289 }, { 0x5F4B, 75294 }, { 0x5F48, 75299 }, { 0x5F58, 75304 }, { 0x5F5A, 75308 }, { 0x5F57, 75312 }, { 0x5F5B, 75317 }, { 0x5F54, 75321 }, { 0x5F56, 75325 }, { 0x5F55, 75329 }, { 0x5F59, 75334 }, { 0x5F5C, 75338 }, { 0x5F4C, 75342 }, { 0x5F47, 75347 }, { 0x5F49, 75352 }, { 0x5F51, 75357 }, { 0x5F52, 75362 }, { 0x5F50, 75367 }, { 0x5F4D, 75371 }, { 0x5F4F, 75375 }, { 0x5F53, 75379 }, { 0x5F4E, 75384 }, { 0x5F68, 75389 }, { 0x5F69, 75393 }, { 0x5F1D, 75396 }, { 0x5EE3, 75399 }, { 0x5EE4, 75402 }, { 0x5EE9, 75405 }, { 0x5F23, 75409 }, { 0x5EE0, 75412 }, { 0x5EEA, 75415 }, { 0x5EE6, 75419 }, { 0x5F1A, 75422 }, { 0x5EDC, 75427 }, { 0x5F22, 75430 }, { 0x5EF7, 75433 }, { 0x5EFB, 75436 }, { 0x5F09, 75440 }, { 0x5F0C, 75445 }, { 0x5F0D, 75449 }, { 0x5F05, 75454 }, { 0x5F0B, 75458 }, { 0x5EFF, 75464 }, { 0x5F00, 75469 }, { 0x5EE1, 75477 }, { 0x5EEB, 75480 }, { 0x5F19, 75484 }, { 0x5EE2, 75489 }, { 0x5EF5, 75492 }, { 0x5EF9, 75495 }, { 0x5F07, 75499 }, { 0x5F03, 75504 }, { 0x5EFD, 75508 }, { 0x5EF6, 75513 }, { 0x5EFA, 75516 }, { 0x5F08, 75520 }, { 0x5F04, 75525 }, { 0x5EFE, 75529 }, { 0x5F20, 75534 }, { 0x5EDE, 75537 }, { 0x5EE8, 75540 }, { 0x5EE7, 75544 }, { 0x5EEC, 75547 }, { 0x5EF8, 75551 }, { 0x5EFC, 75554 }, { 0x5F0A, 75558 }, { 0x5F1B, 75563 }, { 0x5F1C, 75567 }, { 0x5F18, 75572 }, { 0x5F17, 75576 }, { 0x5F10, 75580 }, { 0x5F11, 75584 }, { 0x5F06, 75589 }, { 0x5F0E, 75593 }, { 0x5F0F, 75597 }, { 0x5F01, 75602 }, { 0x5F02, 75607 }, { 0x5EDF, 75613 }, { 0x5F13, 75616 }, { 0x5F12, 75621 }, { 0x5F2D, 75625 }, { 0x5F30, 75628 }, { 0x5EE5, 75632 }, { 0x5F14, 75635 }, { 0x5F16, 75638 }, { 0x5EDD, 75642 }, { 0x5EEF, 75645 }, { 0x5F27, 75648 }, { 0x5F2E, 75651 }, { 0x5EF2, 75654 }, { 0x5F24, 75657 }, { 0x5EF0, 75660 }, { 0x5EF3, 75663 }, { 0x5F1F, 75666 }, { 0x5F37, 75669 }, { 0x5F36, 75672 }, { 0x5EF4, 75675 }, { 0x5EED, 75678 }, { 0x5F33, 75681 }, { 0x5F26, 75684 }, { 0x5F38, 75687 }, { 0x5F15, 75690 }, { 0x5F3A, 75693 }, { 0x5F39, 75696 }, { 0x5F2F, 75699 }, { 0x5F2C, 75702 }, { 0x5F21, 75705 }, { 0x5F35, 75708 }, { 0x5F3B, 75711 }, { 0x5F3C, 75714 }, { 0x5F2B, 75717 }, { 0x5F31, 75721 }, { 0x5F40, 75725 }, { 0x5F3F, 75729 }, { 0x5F3E, 75733 }, { 0x5F3D, 75737 }, { 0x5F25, 75741 }, { 0x5EF1, 75745 }, { 0x5F34, 75749 }, { 0x5F44, 75753 }, { 0x5EEE, 75757 }, { 0x5F2A, 75761 }, { 0x5F28, 75765 }, { 0x5F43, 75769 }, { 0x5F45, 75773 }, { 0x5F1E, 75777 }, { 0x5F42, 75781 }, { 0x5F41, 75785 }, { 0x5F46, 75789 }, { 0x5F29, 75793 }, { 0x5F32, 75797 }, { 0x5F6A, 75801 }, { 0x51E4, 75806 }, { 0x51E5, 75809 }, { 0x51E6, 75812 }, { 0x51E7, 75815 }, { 0x51E8, 75818 }, { 0x51EA, 75821 }, { 0x51ED, 75824 }, { 0x51EE, 75827 }, { 0x51EF, 75830 }, { 0x51F0, 75833 }, { 0x51F1, 75836 }, { 0x51F2, 75839 }, { 0x51F3, 75842 }, { 0x51F4, 75845 }, { 0x51F6, 75848 }, { 0x51F7, 75851 }, { 0x51F8, 75854 }, { 0x51FA, 75857 }, { 0x51FB, 75860 }, { 0x51FC, 75863 }, { 0x51FD, 75866 }, { 0x51FE, 75869 }, { 0x51FF, 75872 }, { 0x5200, 75875 }, { 0x5201, 75878 }, { 0x5202, 75881 }, { 0x5203, 75884 }, { 0x5204, 75887 }, { 0x5205, 75890 }, { 0x5206, 75893 }, { 0x5207, 75896 }, { 0x5208, 75899 }, { 0x520A, 75902 }, { 0x520B, 75905 }, { 0x520C, 75908 }, { 0x520D, 75911 }, { 0x520E, 75914 }, { 0x520F, 75917 }, { 0x5210, 75920 }, { 0x5211, 75923 }, { 0x5213, 75926 }, { 0x5214, 75929 }, { 0x5216, 75932 }, { 0x5218, 75935 }, { 0x5219, 75938 }, { 0x521B, 75941 }, { 0x521C, 75944 }, { 0x521D, 75947 }, { 0x521E, 75950 }, { 0x521F, 75953 }, { 0x5220, 75956 }, { 0x5221, 75959 }, { 0x5222, 75962 }, { 0x5223, 75965 }, { 0x5224, 75968 }, { 0x5225, 75971 }, { 0x5226, 75974 }, { 0x5227, 75977 }, { 0x5228, 75980 }, { 0x5229, 75983 }, { 0x522A, 75986 }, { 0x522B, 75989 }, { 0x522C, 75992 }, { 0x522D, 75995 }, { 0x522E, 75998 }, { 0x522F, 76001 }, { 0x5230, 76004 }, { 0x5231, 76007 }, { 0x5232, 76010 }, { 0x5233, 76013 }, { 0x5234, 76016 }, { 0x5235, 76019 }, { 0x5236, 76022 }, { 0x5237, 76025 }, { 0x5238, 76028 }, { 0x523A, 76031 }, { 0x523B, 76034 }, { 0x523C, 76037 }, { 0x523D, 76040 }, { 0x523E, 76043 }, { 0x523F, 76046 }, { 0x5243, 76049 }, { 0x5244, 76052 }, { 0x5245, 76055 }, { 0x5246, 76058 }, { 0x5247, 76061 }, { 0x5248, 76064 }, { 0x5249, 76067 }, { 0x524A, 76070 }, { 0x524C, 76073 }, { 0x524D, 76076 }, { 0x524E, 76079 }, { 0x524F, 76082 }, { 0x5250, 76085 }, { 0x5251, 76088 }, { 0x5252, 76091 }, { 0x5253, 76094 }, { 0x5254, 76097 }, { 0x5255, 76100 }, { 0x5256, 76103 }, { 0x5257, 76106 }, { 0x5258, 76109 }, { 0x5259, 76112 }, { 0x525A, 76115 }, { 0x525B, 76118 }, { 0x525C, 76121 }, { 0x525D, 76124 }, { 0x525E, 76127 }, { 0x525F, 76130 }, { 0x5260, 76133 }, { 0x5261, 76136 }, { 0x5263, 76139 }, { 0x5264, 76142 }, { 0x5265, 76145 }, { 0x5266, 76148 }, { 0x5267, 76151 }, { 0x5268, 76154 }, { 0x5269, 76157 }, { 0x526A, 76160 }, { 0x526B, 76163 }, { 0x526C, 76166 }, { 0x526D, 76169 }, { 0x526E, 76172 }, { 0x526F, 76175 }, { 0x5270, 76178 }, { 0x5271, 76181 }, { 0x5272, 76184 }, { 0x5273, 76187 }, { 0x5274, 76190 }, { 0x5275, 76193 }, { 0x5277, 76196 }, { 0x5278, 76199 }, { 0x5279, 76202 }, { 0x527A, 76205 }, { 0x527C, 76208 }, { 0x527D, 76211 }, { 0x527E, 76214 }, { 0x5280, 76217 }, { 0x5281, 76220 }, { 0x5282, 76223 }, { 0x5283, 76226 }, { 0x5284, 76229 }, { 0x5285, 76232 }, { 0x5286, 76235 }, { 0x5287, 76238 }, { 0x5288, 76241 }, { 0x5289, 76244 }, { 0x528A, 76247 }, { 0x528B, 76250 }, { 0x528D, 76253 }, { 0x528E, 76256 }, { 0x5290, 76259 }, { 0x5291, 76262 }, { 0x529B, 76265 }, { 0x529C, 76268 }, { 0x529E, 76271 }, { 0x529F, 76274 }, { 0x52A1, 76277 }, { 0x52A2, 76280 }, { 0x52A3, 76283 }, { 0x52A4, 76286 }, { 0x52A5, 76289 }, { 0x52A6, 76292 }, { 0x52A7, 76295 }, { 0x52A8, 76298 }, { 0x52A9, 76301 }, { 0x52AA, 76304 }, { 0x52AB, 76307 }, { 0x52AC, 76310 }, { 0x52AD, 76313 }, { 0x52B6, 76316 }, { 0x52B7, 76319 }, { 0x52B8, 76322 }, { 0x52B9, 76325 }, { 0x52BA, 76328 }, { 0x52BB, 76331 }, { 0x52BC, 76334 }, { 0x52BD, 76337 }, { 0x52BF, 76340 }, { 0x52C1, 76343 }, { 0x52C2, 76346 }, { 0x52C3, 76349 }, { 0x52C4, 76352 }, { 0x52C5, 76355 }, { 0x52C6, 76358 }, { 0x52C7, 76361 }, { 0x52C9, 76364 }, { 0x52CB, 76367 }, { 0x52CC, 76370 }, { 0x52CD, 76373 }, { 0x52CF, 76376 }, { 0x52D0, 76379 }, { 0x52D1, 76382 }, { 0x52D2, 76385 }, { 0x52D3, 76388 }, { 0x52D4, 76391 }, { 0x52D5, 76394 }, { 0x52D6, 76397 }, { 0x52D8, 76400 }, { 0x52D9, 76403 }, { 0x52DA, 76406 }, { 0x52DB, 76409 }, { 0x52DC, 76412 }, { 0x52DD, 76415 }, { 0x52DF, 76418 }, { 0x52E0, 76421 }, { 0x52E1, 76424 }, { 0x52E2, 76427 }, { 0x52E4, 76430 }, { 0x52E5, 76433 }, { 0x52E6, 76436 }, { 0x52E7, 76439 }, { 0x52E8, 76442 }, { 0x52E9, 76445 }, { 0x52EA, 76448 }, { 0x52EB, 76451 }, { 0x52EC, 76454 }, { 0x52ED, 76457 }, { 0x52EE, 76460 }, { 0x52EF, 76463 }, { 0x52F1, 76466 }, { 0x52F2, 76469 }, { 0x52F3, 76472 }, { 0x52F4, 76475 }, { 0x52F5, 76478 }, { 0x52F6, 76481 }, { 0x52F7, 76484 }, { 0x52F8, 76487 }, { 0x52FA, 76490 }, { 0x52FB, 76493 }, { 0x52FC, 76496 }, { 0x52FD, 76499 }, { 0x52FE, 76502 }, { 0x52FF, 76505 }, { 0x5300, 76508 }, { 0x5301, 76511 }, { 0x5302, 76514 }, { 0x5303, 76517 }, { 0x5305, 76520 }, { 0x5306, 76523 }, { 0x5307, 76526 }, { 0x5308, 76529 }, { 0x5309, 76532 }, { 0x530A, 76535 }, { 0x530C, 76538 }, { 0x530E, 76541 }, { 0x530F, 76544 }, { 0x5310, 76547 }, { 0x5311, 76550 }, { 0x5312, 76553 }, { 0x5313, 76556 }, { 0x5314, 76559 }, { 0x5316, 76562 }, { 0x5318, 76565 }, { 0x531A, 76568 }, { 0x531B, 76571 }, { 0x531C, 76574 }, { 0x531D, 76577 }, { 0x5321, 76580 }, { 0x5322, 76583 }, { 0x5323, 76586 }, { 0x5324, 76589 }, { 0x5325, 76592 }, { 0x5326, 76595 }, { 0x5327, 76598 }, { 0x5328, 76601 }, { 0x532A, 76604 }, { 0x532D, 76607 }, { 0x532E, 76610 }, { 0x532F, 76613 }, { 0x5330, 76616 }, { 0x5332, 76619 }, { 0x5333, 76622 }, { 0x5334, 76625 }, { 0x5335, 76628 }, { 0x5336, 76631 }, { 0x5337, 76634 }, { 0x5338, 76637 }, { 0x5339, 76640 }, { 0x533A, 76643 }, { 0x533C, 76646 }, { 0x533D, 76649 }, { 0x533E, 76652 }, { 0x533F, 76655 }, { 0x5340, 76658 }, { 0x5341, 76661 }, { 0x5343, 76664 }, { 0x5344, 76667 }, { 0x5345, 76670 }, { 0x5346, 76673 }, { 0x5347, 76676 }, { 0x5348, 76679 }, { 0x5349, 76682 }, { 0x534A, 76685 }, { 0x534B, 76688 }, { 0x534C, 76691 }, { 0x534E, 76694 }, { 0x5350, 76697 }, { 0x5351, 76700 }, { 0x5352, 76703 }, { 0x5353, 76706 }, { 0x5354, 76709 }, { 0x5355, 76712 }, { 0x5357, 76715 }, { 0x5358, 76718 }, { 0x535A, 76721 }, { 0x535B, 76724 }, { 0x535C, 76727 }, { 0x535D, 76730 }, { 0x535E, 76733 }, { 0x535F, 76736 }, { 0x5360, 76739 }, { 0x5361, 76742 }, { 0x5362, 76745 }, { 0x5363, 76748 }, { 0x5364, 76751 }, { 0x5365, 76754 }, { 0x5366, 76757 }, { 0x5367, 76760 }, { 0x5368, 76763 }, { 0x536A, 76766 }, { 0x536B, 76769 }, { 0x536C, 76772 }, { 0x536D, 76775 }, { 0x536E, 76778 }, { 0x536F, 76781 }, { 0x5370, 76784 }, { 0x5372, 76787 }, { 0x5373, 76790 }, { 0x5374, 76793 }, { 0x5375, 76796 }, { 0x5377, 76799 }, { 0x5379, 76802 }, { 0x537B, 76805 }, { 0x537C, 76808 }, { 0x537D, 76811 }, { 0x537E, 76814 }, { 0x537F, 76817 }, { 0x5380, 76820 }, { 0x5381, 76823 }, { 0x5382, 76826 }, { 0x5383, 76829 }, { 0x5384, 76832 }, { 0x5385, 76835 }, { 0x5386, 76838 }, { 0x5387, 76841 }, { 0x5388, 76844 }, { 0x538A, 76847 }, { 0x538B, 76850 }, { 0x538C, 76853 }, { 0x538D, 76856 }, { 0x538F, 76859 }, { 0x5390, 76862 }, { 0x5391, 76865 }, { 0x5394, 76868 }, { 0x5395, 76871 }, { 0x5397, 76874 }, { 0x5398, 76877 }, { 0x5399, 76880 }, { 0x539A, 76883 }, { 0x539B, 76886 }, { 0x539C, 76889 }, { 0x539D, 76892 }, { 0x539F, 76895 }, { 0x53A0, 76898 }, { 0x53A9, 76901 }, { 0x53AA, 76904 }, { 0x53AB, 76907 }, { 0x53AD, 76910 }, { 0x53AF, 76913 }, { 0x53B1, 76916 }, { 0x53B2, 76919 }, { 0x53B3, 76922 }, { 0x53B4, 76925 }, { 0x53B5, 76928 }, { 0x53B7, 76931 }, { 0x53B8, 76934 }, { 0x53BA, 76937 }, { 0x53BB, 76940 }, { 0x53BC, 76943 }, { 0x53BD, 76946 }, { 0x53BF, 76949 }, { 0x53C0, 76952 }, { 0x53C1, 76955 }, { 0x53C3, 76958 }, { 0x53C4, 76961 }, { 0x53C7, 76964 }, { 0x53C8, 76967 }, { 0x53C9, 76970 }, { 0x53CA, 76973 }, { 0x53CB, 76976 }, { 0x53CC, 76979 }, { 0x53CD, 76982 }, { 0x53CF, 76985 }, { 0x53D0, 76988 }, { 0x53D1, 76991 }, { 0x53D2, 76994 }, { 0x53D3, 76997 }, { 0x53D4, 77000 }, { 0x53D5, 77003 }, { 0x53D6, 77006 }, { 0x53D7, 77009 }, { 0x53D8, 77012 }, { 0x53D9, 77015 }, { 0x53DA, 77018 }, { 0x53DB, 77021 }, { 0x53DC, 77024 }, { 0x53DD, 77027 }, { 0x53DE, 77030 }, { 0x53DF, 77033 }, { 0x53E0, 77036 }, { 0x53E1, 77039 }, { 0x53E2, 77042 }, { 0x53E3, 77045 }, { 0x53E4, 77048 }, { 0x53E7, 77051 }, { 0x53E8, 77054 }, { 0x53E9, 77057 }, { 0x53EA, 77060 }, { 0x53EB, 77063 }, { 0x53EC, 77066 }, { 0x53ED, 77069 }, { 0x53EF, 77072 }, { 0x53F0, 77075 }, { 0x53F1, 77078 }, { 0x53F2, 77081 }, { 0x53F3, 77084 }, { 0x53F4, 77087 }, { 0x53F5, 77090 }, { 0x53F6, 77093 }, { 0x53F8, 77096 }, { 0x53FA, 77099 }, { 0x53FC, 77102 }, { 0x53FD, 77105 }, { 0x53FF, 77108 }, { 0x5400, 77111 }, { 0x5401, 77114 }, { 0x5402, 77117 }, { 0x5403, 77120 }, { 0x5434, 77123 }, { 0x5436, 77126 }, { 0x5437, 77129 }, { 0x5438, 77132 }, { 0x5439, 77135 }, { 0x543B, 77138 }, { 0x5442, 77141 }, { 0x5443, 77144 }, { 0x5444, 77147 }, { 0x5445, 77150 }, { 0x5449, 77153 }, { 0x544A, 77156 }, { 0x544B, 77159 }, { 0x544C, 77162 }, { 0x544D, 77165 }, { 0x544E, 77168 }, { 0x544F, 77171 }, { 0x5450, 77174 }, { 0x5451, 77177 }, { 0x5453, 77180 }, { 0x5455, 77183 }, { 0x5456, 77186 }, { 0x5457, 77189 }, { 0x5458, 77192 }, { 0x545A, 77195 }, { 0x545C, 77198 }, { 0x545D, 77201 }, { 0x545E, 77204 }, { 0x545F, 77207 }, { 0x5461, 77210 }, { 0x5463, 77213 }, { 0x5464, 77216 }, { 0x5465, 77219 }, { 0x5467, 77222 }, { 0x5468, 77225 }, { 0x5469, 77228 }, { 0x546E, 77231 }, { 0x546F, 77234 }, { 0x5470, 77237 }, { 0x5471, 77240 }, { 0x5472, 77243 }, { 0x5473, 77246 }, { 0x5474, 77249 }, { 0x5475, 77252 }, { 0x5476, 77255 }, { 0x5477, 77258 }, { 0x5478, 77261 }, { 0x5479, 77264 }, { 0x547A, 77267 }, { 0x547B, 77270 }, { 0x547E, 77273 }, { 0x547F, 77276 }, { 0x5481, 77279 }, { 0x5482, 77282 }, { 0x5484, 77285 }, { 0x5485, 77288 }, { 0x5486, 77291 }, { 0x5487, 77294 }, { 0x5488, 77297 }, { 0x5489, 77300 }, { 0x548A, 77303 }, { 0x548B, 77306 }, { 0x548C, 77309 }, { 0x548D, 77312 }, { 0x548E, 77315 }, { 0x548F, 77318 }, { 0x5490, 77321 }, { 0x5491, 77324 }, { 0x5492, 77327 }, { 0x5493, 77330 }, { 0x5494, 77333 }, { 0x5496, 77336 }, { 0x5499, 77339 }, { 0x549A, 77342 }, { 0x549B, 77345 }, { 0x549C, 77348 }, { 0x549D, 77351 }, { 0x549E, 77354 }, { 0x549F, 77357 }, { 0x54A1, 77360 }, { 0x54A2, 77363 }, { 0x54A3, 77366 }, { 0x54A4, 77369 }, { 0x54A5, 77372 }, { 0x54A6, 77375 }, { 0x54A8, 77378 }, { 0x54A9, 77381 }, { 0x54AA, 77384 }, { 0x54AB, 77387 }, { 0x54AC, 77390 }, { 0x54AD, 77393 }, { 0x54AE, 77396 }, { 0x54AF, 77399 }, { 0x54B0, 77402 }, { 0x54B1, 77405 }, { 0x54B2, 77408 }, { 0x54B3, 77411 }, { 0x54B4, 77414 }, { 0x54B5, 77417 }, { 0x54B6, 77420 }, { 0x54B8, 77423 }, { 0x54B9, 77426 }, { 0x54BA, 77429 }, { 0x54BB, 77432 }, { 0x54BD, 77435 }, { 0x54BE, 77438 }, { 0x54BF, 77441 }, { 0x54C0, 77444 }, { 0x54C1, 77447 }, { 0x54C2, 77450 }, { 0x54C3, 77453 }, { 0x54C4, 77456 }, { 0x54C7, 77459 }, { 0x54C8, 77462 }, { 0x54C9, 77465 }, { 0x54CB, 77468 }, { 0x54CC, 77471 }, { 0x54CD, 77474 }, { 0x54CE, 77477 }, { 0x54CF, 77480 }, { 0x54D0, 77483 }, { 0x54D1, 77486 }, { 0x54D2, 77489 }, { 0x54D3, 77492 }, { 0x54D6, 77495 }, { 0x54D7, 77498 }, { 0x54D8, 77501 }, { 0x54D9, 77504 }, { 0x54DA, 77507 }, { 0x54DB, 77510 }, { 0x54DC, 77513 }, { 0x54DD, 77516 }, { 0x54DE, 77519 }, { 0x54E0, 77522 }, { 0x54E1, 77525 }, { 0x54E2, 77528 }, { 0x54E3, 77531 }, { 0x54E4, 77534 }, { 0x54E5, 77537 }, { 0x54E6, 77540 }, { 0x54E7, 77543 }, { 0x54E8, 77546 }, { 0x54E9, 77549 }, { 0x54EA, 77552 }, { 0x54EB, 77555 }, { 0x54EC, 77558 }, { 0x54ED, 77561 }, { 0x54EF, 77564 }, { 0x54F0, 77567 }, { 0x54F1, 77570 }, { 0x54F2, 77573 }, { 0x54F4, 77576 }, { 0x54F6, 77579 }, { 0x54F8, 77582 }, { 0x54F9, 77585 }, { 0x54FB, 77588 }, { 0x54FC, 77591 }, { 0x54FD, 77594 }, { 0x54FE, 77597 }, { 0x54FF, 77600 }, { 0x5501, 77603 }, { 0x5502, 77606 }, { 0x5503, 77609 }, { 0x5504, 77612 }, { 0x5505, 77615 }, { 0x5506, 77618 }, { 0x5507, 77621 }, { 0x5508, 77624 }, { 0x5509, 77627 }, { 0x550A, 77630 }, { 0x550B, 77633 }, { 0x550C, 77636 }, { 0x550D, 77639 }, { 0x550E, 77642 }, { 0x550F, 77645 }, { 0x5510, 77648 }, { 0x5512, 77651 }, { 0x5514, 77654 }, { 0x5515, 77657 }, { 0x5516, 77660 }, { 0x5517, 77663 }, { 0x5518, 77666 }, { 0x5519, 77669 }, { 0x551A, 77672 }, { 0x551B, 77675 }, { 0x551C, 77678 }, { 0x551F, 77681 }, { 0x5520, 77684 }, { 0x5521, 77687 }, { 0x5522, 77690 }, { 0x5523, 77693 }, { 0x5524, 77696 }, { 0x5525, 77699 }, { 0x5526, 77702 }, { 0x5527, 77705 }, { 0x5528, 77708 }, { 0x5529, 77711 }, { 0x552A, 77714 }, { 0x552B, 77717 }, { 0x552C, 77720 }, { 0x552D, 77723 }, { 0x552E, 77726 }, { 0x552F, 77729 }, { 0x5531, 77732 }, { 0x5532, 77735 }, { 0x5533, 77738 }, { 0x5534, 77741 }, { 0x5535, 77744 }, { 0x5536, 77747 }, { 0x5538, 77750 }, { 0x5539, 77753 }, { 0x553A, 77756 }, { 0x553C, 77759 }, { 0x553D, 77762 }, { 0x553E, 77765 }, { 0x553F, 77768 }, { 0x5540, 77771 }, { 0x5541, 77774 }, { 0x5542, 77777 }, { 0x5543, 77780 }, { 0x5544, 77783 }, { 0x5545, 77786 }, { 0x5546, 77789 }, { 0x5550, 77792 }, { 0x5552, 77795 }, { 0x5553, 77798 }, { 0x5554, 77801 }, { 0x5555, 77804 }, { 0x5556, 77807 }, { 0x5559, 77810 }, { 0x555A, 77813 }, { 0x555B, 77816 }, { 0x555C, 77819 }, { 0x5560, 77822 }, { 0x5563, 77825 }, { 0x5564, 77828 }, { 0x5565, 77831 }, { 0x5566, 77834 }, { 0x5567, 77837 }, { 0x5568, 77840 }, { 0x5569, 77843 }, { 0x556A, 77846 }, { 0x5577, 77849 }, { 0x5578, 77852 }, { 0x5579, 77855 }, { 0x557B, 77858 }, { 0x557C, 77861 }, { 0x557D, 77864 }, { 0x557E, 77867 }, { 0x557F, 77870 }, { 0x5581, 77873 }, { 0x5583, 77876 }, { 0x5585, 77879 }, { 0x5587, 77882 }, { 0x5588, 77885 }, { 0x558A, 77888 }, { 0x558B, 77891 }, { 0x558C, 77894 }, { 0x558D, 77897 }, { 0x558F, 77900 }, { 0x5590, 77903 }, { 0x5591, 77906 }, { 0x5593, 77909 }, { 0x5594, 77912 }, { 0x5595, 77915 }, { 0x5597, 77918 }, { 0x5598, 77921 }, { 0x5599, 77924 }, { 0x559A, 77927 }, { 0x559B, 77930 }, { 0x559C, 77933 }, { 0x559E, 77936 }, { 0x55A0, 77939 }, { 0x55A1, 77942 }, { 0x55A2, 77945 }, { 0x55A3, 77948 }, { 0x55A5, 77951 }, { 0x55A6, 77954 }, { 0x55A7, 77957 }, { 0x55A9, 77960 }, { 0x55AB, 77963 }, { 0x55AC, 77966 }, { 0x55AD, 77969 }, { 0x55AE, 77972 }, { 0x55AF, 77975 }, { 0x55B0, 77978 }, { 0x55B2, 77981 }, { 0x55B3, 77984 }, { 0x55B4, 77987 }, { 0x55B5, 77990 }, { 0x55B6, 77993 }, { 0x55B9, 77996 }, { 0x55BA, 77999 }, { 0x55BC, 78002 }, { 0x55BD, 78005 }, { 0x55BF, 78008 }, { 0x55C1, 78011 }, { 0x55C2, 78014 }, { 0x55C3, 78017 }, { 0x55C4, 78020 }, { 0x55C5, 78023 }, { 0x55C6, 78026 }, { 0x55C7, 78029 }, { 0x55C8, 78032 }, { 0x55C9, 78035 }, { 0x55CE, 78038 }, { 0x55D1, 78041 }, { 0x55D3, 78044 }, { 0x55D5, 78047 }, { 0x55D6, 78050 }, { 0x55D7, 78053 }, { 0x55D8, 78056 }, { 0x55D9, 78059 }, { 0x55DA, 78062 }, { 0x55DB, 78065 }, { 0x55DC, 78068 }, { 0x55DD, 78071 }, { 0x55DE, 78074 }, { 0x55E8, 78077 }, { 0x51E9, 78080 }, { 0x51EB, 78083 }, { 0x51EC, 78086 }, { 0x51F5, 78089 }, { 0x51F9, 78092 }, { 0x5209, 78095 }, { 0x5212, 78098 }, { 0x5215, 78101 }, { 0x5217, 78104 }, { 0x521A, 78107 }, { 0x55F1, 78110 }, { 0x55F2, 78113 }, { 0x55F3, 78116 }, { 0x55F4, 78119 }, { 0x55F5, 78122 }, { 0x55F6, 78125 }, { 0x55F7, 78128 }, { 0x55FA, 78131 }, { 0x55FB, 78134 }, { 0x55FC, 78137 }, { 0x55FD, 78140 }, { 0x55FE, 78143 }, { 0x55FF, 78146 }, { 0x5600, 78149 }, { 0x5601, 78152 }, { 0x5602, 78155 }, { 0x5603, 78158 }, { 0x5604, 78161 }, { 0x5605, 78164 }, { 0x5606, 78167 }, { 0x5607, 78170 }, { 0x5608, 78173 }, { 0x5609, 78176 }, { 0x560A, 78179 }, { 0x560B, 78182 }, { 0x560C, 78185 }, { 0x560D, 78188 }, { 0x560E, 78191 }, { 0x560F, 78194 }, { 0x5610, 78197 }, { 0x5611, 78200 }, { 0x5612, 78203 }, { 0x5239, 78206 }, { 0x5240, 78209 }, { 0x5241, 78212 }, { 0x5242, 78215 }, { 0x524B, 78218 }, { 0x5262, 78221 }, { 0x5276, 78224 }, { 0x527B, 78227 }, { 0x527F, 78230 }, { 0x528C, 78233 }, { 0x528F, 78236 }, { 0x5292, 78239 }, { 0x5293, 78242 }, { 0x5294, 78245 }, { 0x5295, 78248 }, { 0x5296, 78251 }, { 0x5297, 78254 }, { 0x5298, 78257 }, { 0x5299, 78260 }, { 0x529A, 78263 }, { 0x529D, 78266 }, { 0x52A0, 78269 }, { 0x52AE, 78272 }, { 0x52AF, 78275 }, { 0x52B0, 78278 }, { 0x52B1, 78281 }, { 0x52B2, 78284 }, { 0x52B3, 78287 }, { 0x52B4, 78290 }, { 0x52B5, 78293 }, { 0x52BE, 78296 }, { 0x52C0, 78299 }, { 0x52C8, 78302 }, { 0x52CA, 78305 }, { 0x52CE, 78308 }, { 0x52D7, 78311 }, { 0x52DE, 78314 }, { 0x52E3, 78317 }, { 0x52F0, 78320 }, { 0x52F9, 78323 }, { 0x5304, 78326 }, { 0x530B, 78329 }, { 0x530D, 78332 }, { 0x5315, 78335 }, { 0x5317, 78338 }, { 0x5319, 78341 }, { 0x531E, 78344 }, { 0x531F, 78347 }, { 0x5320, 78350 }, { 0x5329, 78353 }, { 0x532B, 78356 }, { 0x532C, 78359 }, { 0x5331, 78362 }, { 0x533B, 78365 }, { 0x5342, 78368 }, { 0x534D, 78371 }, { 0x534F, 78374 }, { 0x5356, 78377 }, { 0x5359, 78380 }, { 0x5369, 78383 }, { 0x5371, 78386 }, { 0x5376, 78389 }, { 0x5378, 78392 }, { 0x537A, 78395 }, { 0x5389, 78398 }, { 0x538E, 78401 }, { 0x5392, 78404 }, { 0x5393, 78407 }, { 0x5396, 78410 }, { 0x539E, 78413 }, { 0x53A1, 78416 }, { 0x53A2, 78419 }, { 0x53A3, 78422 }, { 0x53A4, 78425 }, { 0x53A5, 78428 }, { 0x53A6, 78431 }, { 0x53A7, 78434 }, { 0x53A8, 78437 }, { 0x53AC, 78440 }, { 0x53AE, 78443 }, { 0x53B0, 78446 }, { 0x53B6, 78449 }, { 0x53B9, 78452 }, { 0x53BE, 78455 }, { 0x53C2, 78458 }, { 0x53C5, 78461 }, { 0x53C6, 78464 }, { 0x53CE, 78467 }, { 0x53E5, 78470 }, { 0x53E6, 78473 }, { 0x53EE, 78476 }, { 0x53F7, 78479 }, { 0x53F9, 78482 }, { 0x53FB, 78485 }, { 0x53FE, 78488 }, { 0x5404, 78491 }, { 0x5405, 78494 }, { 0x5406, 78497 }, { 0x5407, 78500 }, { 0x5408, 78503 }, { 0x540A, 78506 }, { 0x540B, 78509 }, { 0x540C, 78512 }, { 0x540D, 78515 }, { 0x540E, 78518 }, { 0x540F, 78521 }, { 0x5410, 78524 }, { 0x5411, 78527 }, { 0x5412, 78530 }, { 0x5413, 78533 }, { 0x5414, 78536 }, { 0x5415, 78539 }, { 0x5417, 78542 }, { 0x5418, 78545 }, { 0x5419, 78548 }, { 0x541A, 78551 }, { 0x541B, 78554 }, { 0x541C, 78557 }, { 0x541D, 78560 }, { 0x541E, 78563 }, { 0x541F, 78566 }, { 0x5420, 78569 }, { 0x5421, 78572 }, { 0x5422, 78575 }, { 0x5423, 78578 }, { 0x5425, 78581 }, { 0x5427, 78584 }, { 0x5428, 78587 }, { 0x5429, 78590 }, { 0x542A, 78593 }, { 0x542B, 78596 }, { 0x542C, 78599 }, { 0x542D, 78602 }, { 0x542F, 78605 }, { 0x5430, 78608 }, { 0x5431, 78611 }, { 0x5432, 78614 }, { 0x5435, 78617 }, { 0x543A, 78620 }, { 0x543C, 78623 }, { 0x543D, 78626 }, { 0x543E, 78629 }, { 0x543F, 78632 }, { 0x5440, 78635 }, { 0x5441, 78638 }, { 0x5446, 78641 }, { 0x5447, 78644 }, { 0x5448, 78647 }, { 0x5452, 78650 }, { 0x5454, 78653 }, { 0x5459, 78656 }, { 0x545B, 78659 }, { 0x5460, 78662 }, { 0x5462, 78665 }, { 0x5466, 78668 }, { 0x546A, 78671 }, { 0x546B, 78674 }, { 0x546C, 78677 }, { 0x546D, 78680 }, { 0x547C, 78683 }, { 0x547D, 78686 }, { 0x5480, 78689 }, { 0x5483, 78692 }, { 0x5495, 78695 }, { 0x5497, 78698 }, { 0x5498, 78701 }, { 0x54A0, 78704 }, { 0x54A7, 78707 }, { 0x54B7, 78710 }, { 0x54BC, 78713 }, { 0x54C5, 78716 }, { 0x54C6, 78719 }, { 0x54CA, 78722 }, { 0x54D4, 78725 }, { 0x54D5, 78728 }, { 0x54DF, 78731 }, { 0x54EE, 78734 }, { 0x54F3, 78737 }, { 0x54F5, 78740 }, { 0x54F7, 78743 }, { 0x54FA, 78746 }, { 0x5500, 78749 }, { 0x5511, 78752 }, { 0x5513, 78755 }, { 0x551D, 78758 }, { 0x551E, 78761 }, { 0x5530, 78764 }, { 0x5537, 78767 }, { 0x553B, 78770 }, { 0x5547, 78773 }, { 0x5548, 78776 }, { 0x5549, 78779 }, { 0x554A, 78782 }, { 0x554B, 78785 }, { 0x554C, 78788 }, { 0x554D, 78791 }, { 0x554E, 78794 }, { 0x554F, 78797 }, { 0x5551, 78800 }, { 0x5557, 78803 }, { 0x5558, 78806 }, { 0x555D, 78809 }, { 0x555E, 78812 }, { 0x555F, 78815 }, { 0x5561, 78818 }, { 0x5562, 78821 }, { 0x556B, 78824 }, { 0x556C, 78827 }, { 0x556D, 78830 }, { 0x556E, 78833 }, { 0x556F, 78836 }, { 0x5570, 78839 }, { 0x5571, 78842 }, { 0x5572, 78845 }, { 0x5573, 78848 }, { 0x5574, 78851 }, { 0x5575, 78854 }, { 0x5576, 78857 }, { 0x557A, 78860 }, { 0x5580, 78863 }, { 0x5582, 78866 }, { 0x5584, 78869 }, { 0x5586, 78872 }, { 0x5589, 78875 }, { 0x558E, 78878 }, { 0x5592, 78881 }, { 0x5596, 78884 }, { 0x559D, 78887 }, { 0x559F, 78890 }, { 0x55A4, 78893 }, { 0x55A8, 78896 }, { 0x55AA, 78899 }, { 0x55B1, 78902 }, { 0x55B7, 78905 }, { 0x55B8, 78908 }, { 0x55BB, 78911 }, { 0x55BE, 78914 }, { 0x55C0, 78917 }, { 0x55CA, 78920 }, { 0x55CB, 78923 }, { 0x55CC, 78926 }, { 0x55CD, 78929 }, { 0x55CF, 78932 }, { 0x55D0, 78935 }, { 0x55D2, 78938 }, { 0x55D4, 78941 }, { 0x55DF, 78944 }, { 0x55E0, 78947 }, { 0x55E1, 78950 }, { 0x55E2, 78953 }, { 0x55E3, 78956 }, { 0x55E4, 78959 }, { 0x55E5, 78962 }, { 0x55E6, 78965 }, { 0x55E7, 78968 }, { 0x55E9, 78971 }, { 0x55EA, 78974 }, { 0x55EB, 78977 }, { 0x55EC, 78980 }, { 0x55ED, 78983 }, { 0x55EE, 78986 }, { 0x55EF, 78989 }, { 0x55F0, 78992 }, { 0x55F8, 78995 }, { 0x55F9, 78998 }, { 0x5409, 79001 }, { 0x5416, 79004 }, { 0x5424, 79007 }, { 0x5426, 79010 }, { 0x542E, 79013 }, { 0x5433, 79016 }, { 0x6E47, 79019 }, { 0x1E8A, 79021 }, { 0x6DDC, 79023 }, { 0x6E61, 79026 }, { 0x6D53, 79028 }, { 0x1F0C, 79029 }, { 0x2263, 79031 }, { 0x6E24, 79032 }, { 0x6EBF, 79037 }, { 0x1079, 79040 }, { 0x107C, 79043 }, { 0x107A, 79045 }, { 0x1080, 79047 }, { 0x1085, 79050 }, { 0x1081, 79053 }, { 0x1084, 79056 }, { 0x1083, 79059 }, { 0x1088, 79062 }, { 0x1087, 79065 }, { 0x1086, 79068 }, { 0x1082, 79071 }, { 0x10AD, 79074 }, { 0x10A5, 79078 }, { 0x10A8, 79082 }, { 0x10AB, 79086 }, { 0x10A9, 79090 }, { 0x10A7, 79094 }, { 0x10A4, 79099 }, { 0x10AA, 79103 }, { 0x10A6, 79107 }, { 0x10AC, 79111 }, { 0x1089, 79115 }, { 0x1093, 79118 }, { 0x108D, 79122 }, { 0x108C, 79125 }, { 0x108E, 79128 }, { 0x1090, 79131 }, { 0x1091, 79134 }, { 0x108B, 79137 }, { 0x108A, 79140 }, { 0x1092, 79143 }, { 0x108F, 79146 }, { 0x107D, 79149 }, { 0x1077, 79152 }, { 0x107E, 79155 }, { 0x0F87, 79158 }, { 0x0F8C, 79161 }, { 0x0F89, 79164 }, { 0x0F8D, 79167 }, { 0x0F88, 79170 }, { 0x0F9F, 79173 }, { 0x0FA4, 79176 }, { 0x0FA1, 79179 }, { 0x0FA5, 79182 }, { 0x0FA0, 79185 }, { 0x100C, 79188 }, { 0x1011, 79191 }, { 0x100E, 79194 }, { 0x1012, 79197 }, { 0x100D, 79200 }, { 0x1061, 79203 }, { 0x1066, 79206 }, { 0x1063, 79209 }, { 0x1067, 79212 }, { 0x1062, 79215 }, { 0x1024, 79218 }, { 0x1029, 79221 }, { 0x1026, 79224 }, { 0x102A, 79227 }, { 0x1025, 79230 }, { 0x0F2E, 79233 }, { 0x0F33, 79236 }, { 0x0F30, 79239 }, { 0x0F34, 79242 }, { 0x0F2F, 79245 }, { 0x101C, 79248 }, { 0x1021, 79251 }, { 0x101E, 79254 }, { 0x1022, 79257 }, { 0x101D, 79260 }, { 0x0FCC, 79263 }, { 0x0FD1, 79266 }, { 0x0FCE, 79269 }, { 0x0FD2, 79272 }, { 0x0FCD, 79275 }, { 0x0F36, 79278 }, { 0x0F3B, 79281 }, { 0x0F38, 79284 }, { 0x0F3C, 79287 }, { 0x0F37, 79290 }, { 0x0F46, 79293 }, { 0x0F4B, 79296 }, { 0x0F48, 79299 }, { 0x0F4C, 79302 }, { 0x0F47, 79305 }, { 0x0FB4, 79308 }, { 0x0FB9, 79311 }, { 0x0FB6, 79314 }, { 0x0FBA, 79317 }, { 0x0FB5, 79320 }, { 0x1069, 79323 }, { 0x106E, 79326 }, { 0x106B, 79329 }, { 0x106F, 79332 }, { 0x106A, 79335 }, { 0x0F6E, 79338 }, { 0x0F73, 79341 }, { 0x0F70, 79344 }, { 0x0F74, 79347 }, { 0x0F6F, 79350 }, { 0x0F56, 79353 }, { 0x0F5B, 79356 }, { 0x0F58, 79359 }, { 0x0F5C, 79362 }, { 0x0F57, 79365 }, { 0x0F5E, 79368 }, { 0x0F63, 79371 }, { 0x0F60, 79374 }, { 0x0F64, 79377 }, { 0x0F5F, 79380 }, { 0x0F97, 79383 }, { 0x0F9C, 79386 }, { 0x0F99, 79389 }, { 0x0F9D, 79392 }, { 0x0F98, 79395 }, { 0x0F8F, 79398 }, { 0x0F94, 79401 }, { 0x0F91, 79404 }, { 0x0F95, 79407 }, { 0x0F90, 79410 }, { 0x0FE5, 79413 }, { 0x0FEA, 79416 }, { 0x0FE7, 79419 }, { 0x0FEB, 79422 }, { 0x0FE6, 79425 }, { 0x0FA7, 79428 }, { 0x0FAC, 79431 }, { 0x0FA9, 79434 }, { 0x0FAD, 79437 }, { 0x0FA8, 79440 }, { 0x1004, 79443 }, { 0x1009, 79446 }, { 0x1006, 79449 }, { 0x100A, 79452 }, { 0x1005, 79455 }, { 0x0FF4, 79458 }, { 0x0FF9, 79461 }, { 0x0FF6, 79464 }, { 0x0FFA, 79467 }, { 0x0FF5, 79470 }, { 0x0F8A, 79473 }, { 0x38FB, 79476 }, { 0x3900, 79479 }, { 0x38FD, 79482 }, { 0x3901, 79485 }, { 0x38FC, 79488 }, { 0x0F8B, 79491 }, { 0x2889, 79494 }, { 0x0F8E, 79497 }, { 0x109B, 79500 }, { 0x1099, 79503 }, { 0x0FA2, 79506 }, { 0x28A2, 79509 }, { 0x28A7, 79512 }, { 0x28A4, 79515 }, { 0x28A8, 79518 }, { 0x28A3, 79521 }, { 0x0FA3, 79524 }, { 0x1041, 79527 }, { 0x1046, 79530 }, { 0x1043, 79533 }, { 0x1047, 79536 }, { 0x1042, 79539 }, { 0x288B, 79542 }, { 0x0FA6, 79545 }, { 0x100F, 79548 }, { 0x1014, 79551 }, { 0x1019, 79554 }, { 0x1016, 79557 }, { 0x101A, 79560 }, { 0x1015, 79563 }, { 0x1010, 79566 }, { 0x2890, 79569 }, { 0x1013, 79572 }, { 0x38F2, 79575 }, { 0x38EF, 79578 }, { 0x38F3, 79581 }, { 0x38EE, 79584 }, { 0x1064, 79587 }, { 0x1065, 79590 }, { 0x1068, 79593 }, { 0x109F, 79596 }, { 0x109D, 79599 }, { 0x1073, 79602 }, { 0x1027, 79605 }, { 0x1028, 79608 }, { 0x1031, 79611 }, { 0x1036, 79614 }, { 0x1033, 79617 }, { 0x1037, 79620 }, { 0x1032, 79623 }, { 0x102B, 79626 }, { 0x102C, 79629 }, { 0x1030, 79632 }, { 0x102D, 79635 }, { 0x28CC, 79638 }, { 0x28D1, 79641 }, { 0x28CE, 79644 }, { 0x28D2, 79647 }, { 0x28CD, 79650 }, { 0x0F31, 79653 }, { 0x0F32, 79656 }, { 0x0F3E, 79659 }, { 0x0F43, 79662 }, { 0x0F40, 79665 }, { 0x0F44, 79668 }, { 0x0F3F, 79671 }, { 0x0F35, 79674 }, { 0x101F, 79677 }, { 0x1020, 79680 }, { 0x2892, 79683 }, { 0x1023, 79686 }, { 0x0FCF, 79689 }, { 0x0FD0, 79692 }, { 0x0FD3, 79695 }, { 0x0FD4, 79698 }, { 0x0FD8, 79701 }, { 0x0FD5, 79704 }, { 0x0FD9, 79707 }, { 0x0FDE, 79710 }, { 0x0FDB, 79713 }, { 0x0FDF, 79716 }, { 0x0FDA, 79719 }, { 0x28BE, 79722 }, { 0x28C3, 79725 }, { 0x28C0, 79728 }, { 0x28C4, 79731 }, { 0x28BF, 79734 }, { 0x0F39, 79737 }, { 0x0F3A, 79740 }, { 0x2884, 79743 }, { 0x0F3D, 79746 }, { 0x0F49, 79749 }, { 0x0F4A, 79752 }, { 0x2885, 79755 }, { 0x0F4D, 79758 }, { 0x1097, 79761 }, { 0x1095, 79764 }, { 0x1072, 79767 }, { 0x0FB7, 79770 }, { 0x0FB8, 79773 }, { 0x288C, 79776 }, { 0x0FBB, 79779 }, { 0x0FBC, 79782 }, { 0x0FC1, 79785 }, { 0x0FBE, 79788 }, { 0x0FC2, 79791 }, { 0x0FBD, 79794 }, { 0x106C, 79797 }, { 0x106D, 79800 }, { 0x1049, 79803 }, { 0x104E, 79806 }, { 0x104B, 79809 }, { 0x104F, 79812 }, { 0x104A, 79815 }, { 0x2896, 79818 }, { 0x1070, 79821 }, { 0x10A3, 79824 }, { 0x10A1, 79827 }, { 0x0F71, 79830 }, { 0x0F72, 79833 }, { 0x0F7B, 79836 }, { 0x0F80, 79839 }, { 0x0F7D, 79842 }, { 0x0F81, 79845 }, { 0x0F7C, 79848 }, { 0x0F75, 79851 }, { 0x0F76, 79854 }, { 0x0F7A, 79857 }, { 0x0F77, 79860 }, { 0x28B7, 79863 }, { 0x28BC, 79866 }, { 0x28B9, 79869 }, { 0x28BD, 79872 }, { 0x28B8, 79875 }, { 0x0F59, 79878 }, { 0x0F5A, 79881 }, { 0x2886, 79884 }, { 0x0F5D, 79887 }, { 0x1071, 79890 }, { 0x0F61, 79893 }, { 0x0F62, 79896 }, { 0x0F66, 79899 }, { 0x0F6B, 79902 }, { 0x0F68, 79905 }, { 0x0F6C, 79908 }, { 0x0F67, 79911 }, { 0x2887, 79914 }, { 0x289B, 79917 }, { 0x28A0, 79920 }, { 0x289D, 79923 }, { 0x28A1, 79926 }, { 0x289C, 79929 }, { 0x0F65, 79932 }, { 0x0F4E, 79935 }, { 0x0F53, 79938 }, { 0x0F50, 79941 }, { 0x0F54, 79944 }, { 0x0F4F, 79947 }, { 0x0F9A, 79950 }, { 0x0F9B, 79953 }, { 0x1039, 79956 }, { 0x103E, 79959 }, { 0x103B, 79962 }, { 0x103F, 79965 }, { 0x103A, 79968 }, { 0x288A, 79971 }, { 0x1051, 79974 }, { 0x1056, 79977 }, { 0x1053, 79980 }, { 0x1057, 79983 }, { 0x1052, 79986 }, { 0x0F9E, 79989 }, { 0x1059, 79992 }, { 0x105E, 79995 }, { 0x105B, 79998 }, { 0x105F, 80001 }, { 0x105A, 80004 }, { 0x0F92, 80007 }, { 0x0F93, 80010 }, { 0x0F96, 80013 }, { 0x0FE8, 80016 }, { 0x0FE9, 80019 }, { 0x0FEC, 80022 }, { 0x0FAA, 80025 }, { 0x0FAB, 80028 }, { 0x0FAE, 80031 }, { 0x0FAF, 80034 }, { 0x0FB3, 80037 }, { 0x0FB0, 80040 }, { 0x28C5, 80043 }, { 0x28CA, 80046 }, { 0x28C7, 80049 }, { 0x28CB, 80052 }, { 0x28C6, 80055 }, { 0x1007, 80058 }, { 0x1008, 80061 }, { 0x100B, 80064 }, { 0x0FF7, 80067 }, { 0x0FF8, 80070 }, { 0x0FFC, 80073 }, { 0x1001, 80076 }, { 0x0FFE, 80079 }, { 0x1002, 80082 }, { 0x0FFD, 80085 }, { 0x288F, 80088 }, { 0x0FFB, 80091 }, { 0x28A9, 80094 }, { 0x28AE, 80097 }, { 0x28AB, 80100 }, { 0x28AF, 80103 }, { 0x28AA, 80106 }, { 0x38FE, 80109 }, { 0x38FF, 80112 }, { 0x109A, 80115 }, { 0x28A5, 80118 }, { 0x28A6, 80121 }, { 0x28B0, 80124 }, { 0x28B5, 80127 }, { 0x28B2, 80130 }, { 0x28B6, 80133 }, { 0x28B1, 80136 }, { 0x1044, 80139 }, { 0x1045, 80142 }, { 0x2894, 80145 }, { 0x1048, 80148 }, { 0x1017, 80151 }, { 0x1018, 80154 }, { 0x38EC, 80157 }, { 0x38E9, 80160 }, { 0x38ED, 80163 }, { 0x38E8, 80166 }, { 0x2891, 80169 }, { 0x101B, 80172 }, { 0x38F0, 80175 }, { 0x38F1, 80178 }, { 0x109E, 80181 }, { 0x1034, 80184 }, { 0x1035, 80187 }, { 0x2897, 80190 }, { 0x289A, 80193 }, { 0x2898, 80196 }, { 0x102E, 80199 }, { 0x102F, 80202 }, { 0x28CF, 80205 }, { 0x28D0, 80208 }, { 0x0F41, 80211 }, { 0x0F42, 80214 }, { 0x0F45, 80217 }, { 0x0FD6, 80220 }, { 0x0FD7, 80223 }, { 0x0FDC, 80226 }, { 0x0FDD, 80229 }, { 0x0FE0, 80232 }, { 0x0FE4, 80235 }, { 0x0FE1, 80238 }, { 0x28C1, 80241 }, { 0x28C2, 80244 }, { 0x1096, 80247 }, { 0x0FBF, 80250 }, { 0x0FC0, 80253 }, { 0x288D, 80256 }, { 0x0FC3, 80259 }, { 0x104C, 80262 }, { 0x104D, 80265 }, { 0x2895, 80268 }, { 0x1050, 80271 }, { 0x10A2, 80274 }, { 0x0F7E, 80277 }, { 0x0F7F, 80280 }, { 0x0F82, 80283 }, { 0x0F86, 80286 }, { 0x0F83, 80289 }, { 0x0F78, 80292 }, { 0x0F79, 80295 }, { 0x28BA, 80298 }, { 0x28BB, 80301 }, { 0x0F69, 80304 }, { 0x0F6A, 80307 }, { 0x2888, 80310 }, { 0x0F6D, 80313 }, { 0x289E, 80316 }, { 0x289F, 80319 }, { 0x0F51, 80322 }, { 0x0F52, 80325 }, { 0x0F55, 80328 }, { 0x103C, 80331 }, { 0x103D, 80334 }, { 0x2893, 80337 }, { 0x1040, 80340 }, { 0x1054, 80343 }, { 0x1055, 80346 }, { 0x1058, 80349 }, { 0x38E6, 80352 }, { 0x38E3, 80355 }, { 0x38E7, 80358 }, { 0x38E2, 80361 }, { 0x105C, 80364 }, { 0x105D, 80367 }, { 0x1060, 80370 }, { 0x0FB1, 80373 }, { 0x0FB2, 80376 }, { 0x28C8, 80379 }, { 0x28C9, 80382 }, { 0x0FFF, 80385 }, { 0x1000, 80388 }, { 0x1003, 80391 }, { 0x28AC, 80394 }, { 0x28AD, 80397 }, { 0x28B3, 80400 }, { 0x28B4, 80403 }, { 0x38F4, 80406 }, { 0x38F9, 80409 }, { 0x38F6, 80412 }, { 0x38FA, 80415 }, { 0x38F5, 80418 }, { 0x38EA, 80421 }, { 0x38EB, 80424 }, { 0x1038, 80427 }, { 0x2899, 80430 }, { 0x0FE2, 80433 }, { 0x0FE3, 80436 }, { 0x0F84, 80439 }, { 0x0F85, 80442 }, { 0x38E4, 80445 }, { 0x38E5, 80448 }, { 0x38F7, 80451 }, { 0x38F8, 80454 }, { 0x0FC4, 80457 }, { 0x0FC9, 80461 }, { 0x0FC6, 80465 }, { 0x0FCA, 80469 }, { 0x0FC5, 80473 }, { 0x0FC7, 80477 }, { 0x0FC8, 80481 }, { 0x288E, 80485 }, { 0x0FCB, 80489 }, { 0x1098, 80493 }, { 0x109C, 80497 }, { 0x1094, 80501 }, { 0x10A0, 80505 }, { 0x0FED, 80509 }, { 0x0FF2, 80513 }, { 0x0FEF, 80517 }, { 0x0FF3, 80521 }, { 0x0FEE, 80525 }, { 0x0FF0, 80529 }, { 0x0FF1, 80533 }, { 0x1075, 80537 }, { 0x1074, 80542 }, { 0x1076, 80549 }, { 0x107F, 80553 }, { 0x107B, 80556 }, { 0x1078, 80558 }, { 0x6D1F, 80560 }, { 0x6D2B, 80563 }, { 0x0686, 80565 }, { 0x068B, 80569 }, { 0x0687, 80573 }, { 0x068A, 80577 }, { 0x0689, 80581 }, { 0x068E, 80585 }, { 0x0685, 80589 }, { 0x068D, 80593 }, { 0x068C, 80597 }, { 0x0688, 80601 }, { 0x0069, 80605 }, { 0x6CC2, 80608 }, { 0x1F6E, 80610 }, { 0x224C, 80611 }, { 0x1BF8, 80612 }, { 0x1CEC, 80614 }, { 0x6F61, 80617 }, { 0x1C15, 80622 }, { 0x2821, 80624 }, { 0x2825, 80628 }, { 0x2842, 80632 }, { 0x2829, 80636 }, { 0x282E, 80640 }, { 0x2834, 80644 }, { 0x2844, 80648 }, { 0x2847, 80652 }, { 0x2848, 80656 }, { 0x2822, 80660 }, { 0x283B, 80664 }, { 0x283D, 80668 }, { 0x2824, 80672 }, { 0x2823, 80676 }, { 0x2841, 80680 }, { 0x2845, 80684 }, { 0x2843, 80688 }, { 0x2846, 80692 }, { 0x283C, 80696 }, { 0x282A, 80700 }, { 0x282B, 80704 }, { 0x282C, 80708 }, { 0x282D, 80712 }, { 0x282F, 80716 }, { 0x2838, 80720 }, { 0x2831, 80724 }, { 0x2832, 80728 }, { 0x2828, 80732 }, { 0x2833, 80736 }, { 0x2826, 80740 }, { 0x283F, 80744 }, { 0x2827, 80748 }, { 0x283E, 80752 }, { 0x283A, 80756 }, { 0x2837, 80760 }, { 0x2840, 80764 }, { 0x2836, 80768 }, { 0x2835, 80772 }, { 0x2839, 80776 }, { 0x2830, 80780 }, { 0x0DFE, 80784 }, { 0x0E02, 80787 }, { 0x0E24, 80790 }, { 0x0E1F, 80793 }, { 0x0E06, 80796 }, { 0x0E0B, 80799 }, { 0x0E11, 80802 }, { 0x0E21, 80805 }, { 0x0E25, 80808 }, { 0x0E2B, 80811 }, { 0x0E28, 80814 }, { 0x0DFF, 80817 }, { 0x0E18, 80820 }, { 0x0E1A, 80823 }, { 0x0E01, 80826 }, { 0x0E00, 80829 }, { 0x0E1E, 80832 }, { 0x0E22, 80835 }, { 0x0E20, 80838 }, { 0x0E23, 80841 }, { 0x0E19, 80844 }, { 0x0E07, 80847 }, { 0x0E08, 80850 }, { 0x0E09, 80853 }, { 0x0E0A, 80856 }, { 0x0E0C, 80859 }, { 0x0E15, 80862 }, { 0x0E0E, 80865 }, { 0x0E0F, 80868 }, { 0x0E05, 80871 }, { 0x0E10, 80874 }, { 0x0E03, 80877 }, { 0x0E1C, 80880 }, { 0x0E04, 80883 }, { 0x0E1B, 80886 }, { 0x0E17, 80889 }, { 0x0E14, 80892 }, { 0x0E2C, 80895 }, { 0x0E1D, 80899 }, { 0x0E13, 80902 }, { 0x0E12, 80905 }, { 0x0E16, 80908 }, { 0x0E0D, 80911 }, { 0x0E26, 80914 }, { 0x0E2D, 80917 }, { 0x0E27, 80921 }, { 0x0DD6, 80925 }, { 0x0DDA, 80929 }, { 0x0DF7, 80933 }, { 0x0DDE, 80937 }, { 0x0DE3, 80941 }, { 0x0DE9, 80945 }, { 0x0DF9, 80949 }, { 0x0DFC, 80953 }, { 0x0DFD, 80957 }, { 0x0DD7, 80961 }, { 0x0DF0, 80965 }, { 0x0DF2, 80969 }, { 0x0DD9, 80973 }, { 0x0DD8, 80977 }, { 0x0DF6, 80981 }, { 0x0DFA, 80985 }, { 0x0DF8, 80989 }, { 0x0DFB, 80993 }, { 0x0DF1, 80997 }, { 0x0DDF, 81001 }, { 0x0DE0, 81005 }, { 0x0DE1, 81009 }, { 0x0DE2, 81013 }, { 0x0DE4, 81017 }, { 0x0DED, 81021 }, { 0x0DE6, 81025 }, { 0x0DE7, 81029 }, { 0x0DDD, 81033 }, { 0x0DE8, 81037 }, { 0x0DDB, 81041 }, { 0x0DF4, 81045 }, { 0x0DDC, 81049 }, { 0x0DF3, 81053 }, { 0x0DEF, 81057 }, { 0x0DEC, 81061 }, { 0x0DF5, 81065 }, { 0x0DEB, 81069 }, { 0x0DEA, 81073 }, { 0x0DEE, 81077 }, { 0x0DE5, 81081 }, { 0x0E29, 81085 }, { 0x6F73, 81088 }, { 0x6F3B, 81094 }, { 0x6F3C, 81096 }, { 0x0991, 81101 }, { 0x0981, 81103 }, { 0x0990, 81106 }, { 0x0950, 81109 }, { 0x094F, 81112 }, { 0x0982, 81115 }, { 0x094E, 81118 }, { 0x0997, 81121 }, { 0x099C, 81124 }, { 0x0998, 81127 }, { 0x099B, 81130 }, { 0x099A, 81133 }, { 0x099F, 81136 }, { 0x0996, 81139 }, { 0x099E, 81142 }, { 0x099D, 81145 }, { 0x0999, 81148 }, { 0x09A1, 81151 }, { 0x098B, 81154 }, { 0x0984, 81158 }, { 0x098E, 81162 }, { 0x0986, 81166 }, { 0x0983, 81170 }, { 0x098C, 81174 }, { 0x098F, 81178 }, { 0x0985, 81182 }, { 0x0987, 81186 }, { 0x098A, 81190 }, { 0x098D, 81195 }, { 0x0994, 81200 }, { 0x0988, 81205 }, { 0x0995, 81210 }, { 0x0989, 81215 }, { 0x0959, 81220 }, { 0x095C, 81224 }, { 0x0951, 81228 }, { 0x095A, 81231 }, { 0x0953, 81234 }, { 0x095D, 81237 }, { 0x0955, 81240 }, { 0x0952, 81243 }, { 0x095B, 81246 }, { 0x095E, 81249 }, { 0x0975, 81252 }, { 0x0964, 81255 }, { 0x0970, 81258 }, { 0x0961, 81261 }, { 0x0980, 81264 }, { 0x0954, 81267 }, { 0x0966, 81270 }, { 0x095F, 81273 }, { 0x097A, 81276 }, { 0x0977, 81279 }, { 0x0972, 81282 }, { 0x0973, 81285 }, { 0x0979, 81288 }, { 0x097F, 81291 }, { 0x096E, 81294 }, { 0x0956, 81297 }, { 0x097C, 81300 }, { 0x0978, 81303 }, { 0x0976, 81306 }, { 0x0965, 81309 }, { 0x096B, 81312 }, { 0x0971, 81315 }, { 0x0962, 81318 }, { 0x0967, 81321 }, { 0x0960, 81324 }, { 0x097B, 81327 }, { 0x0963, 81330 }, { 0x096D, 81333 }, { 0x0968, 81336 }, { 0x0974, 81339 }, { 0x097D, 81342 }, { 0x097E, 81345 }, { 0x096F, 81348 }, { 0x0969, 81351 }, { 0x09A2, 81354 }, { 0x096C, 81357 }, { 0x096A, 81360 }, { 0x0958, 81363 }, { 0x0957, 81367 }, { 0x0993, 81371 }, { 0x0992, 81375 }, { 0x09A0, 81379 }, { 0x094C, 81382 }, { 0x094A, 81385 }, { 0x094B, 81387 }, { 0x08FF, 81389 }, { 0x0900, 81393 }, { 0x092D, 81396 }, { 0x0938, 81399 }, { 0x0937, 81402 }, { 0x094D, 81405 }, { 0x0901, 81408 }, { 0x0949, 81411 }, { 0x093F, 81413 }, { 0x0944, 81416 }, { 0x0940, 81419 }, { 0x0943, 81422 }, { 0x0942, 81425 }, { 0x0947, 81428 }, { 0x093E, 81431 }, { 0x0946, 81434 }, { 0x0945, 81437 }, { 0x0941, 81440 }, { 0x0948, 81443 }, { 0x092F, 81445 }, { 0x0931, 81449 }, { 0x092E, 81453 }, { 0x0934, 81457 }, { 0x0936, 81461 }, { 0x0933, 81465 }, { 0x0930, 81469 }, { 0x0935, 81473 }, { 0x0932, 81477 }, { 0x0902, 81481 }, { 0x0904, 81484 }, { 0x0906, 81487 }, { 0x0903, 81490 }, { 0x0909, 81493 }, { 0x090B, 81496 }, { 0x0922, 81499 }, { 0x0911, 81502 }, { 0x091D, 81505 }, { 0x0908, 81508 }, { 0x093D, 81511 }, { 0x090E, 81514 }, { 0x092C, 81517 }, { 0x0905, 81520 }, { 0x0913, 81523 }, { 0x090C, 81526 }, { 0x0927, 81529 }, { 0x0924, 81532 }, { 0x091F, 81535 }, { 0x090A, 81538 }, { 0x0920, 81541 }, { 0x0926, 81544 }, { 0x092B, 81547 }, { 0x091B, 81550 }, { 0x0907, 81553 }, { 0x0929, 81556 }, { 0x0925, 81559 }, { 0x093B, 81562 }, { 0x0923, 81565 }, { 0x0912, 81568 }, { 0x0918, 81571 }, { 0x091E, 81574 }, { 0x090F, 81577 }, { 0x0914, 81580 }, { 0x090D, 81583 }, { 0x0928, 81586 }, { 0x0910, 81589 }, { 0x091A, 81592 }, { 0x0915, 81595 }, { 0x0921, 81598 }, { 0x093C, 81601 }, { 0x092A, 81604 }, { 0x091C, 81607 }, { 0x0916, 81610 }, { 0x0919, 81613 }, { 0x093A, 81616 }, { 0x0939, 81619 }, { 0x0917, 81622 }, { 0x71A2, 81625 }, { 0x2AAE, 81626 }, { 0x2AB3, 81629 }, { 0x2AC5, 81632 }, { 0x2AAF, 81635 }, { 0x2AB2, 81638 }, { 0x2AB1, 81641 }, { 0x2AB6, 81644 }, { 0x2AB5, 81647 }, { 0x2AB4, 81650 }, { 0x2AB0, 81653 }, { 0x2AC7, 81656 }, { 0x2AC6, 81659 }, { 0x6D5E, 81662 }, { 0x2E74, 81664 }, { 0x2E9D, 81668 }, { 0x2E92, 81672 }, { 0x2EA6, 81676 }, { 0x2EA7, 81681 }, { 0x2E8A, 81686 }, { 0x2EA1, 81691 }, { 0x2EA0, 81697 }, { 0x2E9F, 81702 }, { 0x2E8B, 81706 }, { 0x2E6E, 81711 }, { 0x2EA3, 81716 }, { 0x2EA5, 81721 }, { 0x2E6F, 81725 }, { 0x2E7F, 81730 }, { 0x2EAC, 81736 }, { 0x2E83, 81740 }, { 0x2E8F, 81743 }, { 0x2E87, 81747 }, { 0x2E7B, 81751 }, { 0x2E89, 81755 }, { 0x2EAA, 81759 }, { 0x2E88, 81763 }, { 0x2E78, 81767 }, { 0x2E76, 81770 }, { 0x2EAB, 81774 }, { 0x2EAD, 81778 }, { 0x2E82, 81782 }, { 0x2E99, 81786 }, { 0x2E85, 81791 }, { 0x2E75, 81794 }, { 0x2E7C, 81798 }, { 0x2E9B, 81801 }, { 0x2E8E, 81805 }, { 0x2E72, 81808 }, { 0x2E80, 81811 }, { 0x2E73, 81814 }, { 0x2E96, 81817 }, { 0x2E8D, 81820 }, { 0x2E97, 81823 }, { 0x2E90, 81826 }, { 0x2E77, 81829 }, { 0x2E71, 81832 }, { 0x2EA4, 81836 }, { 0x2E91, 81839 }, { 0x2E7E, 81845 }, { 0x2E9A, 81848 }, { 0x2E8C, 81852 }, { 0x2E86, 81855 }, { 0x2E84, 81858 }, { 0x2E70, 81862 }, { 0x2EA8, 81868 }, { 0x2E7D, 81871 }, { 0x2E7A, 81874 }, { 0x2EA9, 81877 }, { 0x2E93, 81880 }, { 0x2E9C, 81883 }, { 0x2E9E, 81886 }, { 0x2E79, 81889 }, { 0x2E95, 81892 }, { 0x2EA2, 81895 }, { 0x2E94, 81898 }, { 0x2E98, 81901 }, { 0x2E81, 81904 }, { 0x6C75, 81907 }, { 0x2ACE, 81908 }, { 0x2AD4, 81911 }, { 0x2AD0, 81914 }, { 0x2B1F, 81917 }, { 0x2AD6, 81920 }, { 0x2AD2, 81923 }, { 0x2AFC, 81926 }, { 0x2B05, 81929 }, { 0x2AFF, 81932 }, { 0x2B08, 81935 }, { 0x2B02, 81938 }, { 0x2AEC, 81941 }, { 0x2AF3, 81944 }, { 0x2AEE, 81947 }, { 0x2AF5, 81950 }, { 0x2AF1, 81953 }, { 0x2AD8, 81956 }, { 0x2ADE, 81959 }, { 0x2ADA, 81962 }, { 0x2AE0, 81965 }, { 0x2ADC, 81968 }, { 0x2AFB, 81971 }, { 0x2B04, 81974 }, { 0x2AFE, 81977 }, { 0x2B07, 81980 }, { 0x2B01, 81983 }, { 0x2AD7, 81986 }, { 0x2ADD, 81989 }, { 0x2AD9, 81992 }, { 0x2ADF, 81995 }, { 0x2ADB, 81998 }, { 0x2B0A, 82001 }, { 0x2B0D, 82004 }, { 0x2B0B, 82007 }, { 0x2B0E, 82010 }, { 0x2B0C, 82013 }, { 0x2AF6, 82016 }, { 0x2AF9, 82019 }, { 0x2AF7, 82022 }, { 0x2AFA, 82025 }, { 0x2AF8, 82028 }, { 0x2AFD, 82031 }, { 0x2B06, 82034 }, { 0x2B00, 82037 }, { 0x2B09, 82040 }, { 0x2B03, 82043 }, { 0x2B15, 82046 }, { 0x2B18, 82049 }, { 0x2B16, 82052 }, { 0x2B19, 82055 }, { 0x2B17, 82058 }, { 0x2AE1, 82061 }, { 0x2AE7, 82064 }, { 0x2AE3, 82067 }, { 0x2AE9, 82070 }, { 0x2AE5, 82073 }, { 0x2AEB, 82076 }, { 0x2AF2, 82079 }, { 0x2AED, 82082 }, { 0x2AF4, 82085 }, { 0x2AF0, 82088 }, { 0x2B20, 82091 }, { 0x2B1B, 82094 }, { 0x2B1D, 82097 }, { 0x2B1C, 82100 }, { 0x2B1E, 82103 }, { 0x2B10, 82106 }, { 0x2B14, 82109 }, { 0x2B12, 82112 }, { 0x2AE2, 82115 }, { 0x2AE8, 82118 }, { 0x2AE4, 82121 }, { 0x2AEA, 82124 }, { 0x2AE6, 82127 }, { 0x2ACD, 82130 }, { 0x2AD3, 82134 }, { 0x2ACF, 82138 }, { 0x2AD5, 82142 }, { 0x2AD1, 82146 }, { 0x2B21, 82150 }, { 0x2B22, 82154 }, { 0x2AEF, 82158 }, { 0x2B1A, 82162 }, { 0x2B0F, 82166 }, { 0x2B13, 82170 }, { 0x2B11, 82174 }, { 0x5EDB, 82178 }, { 0x2B28, 82182 }, { 0x2B29, 82186 }, { 0x2B27, 82189 }, { 0x2246, 82192 }, { 0x6D58, 82194 }, { 0x6D20, 82195 }, { 0x4409, 82196 }, { 0x4415, 82200 }, { 0x4411, 82204 }, { 0x4412, 82208 }, { 0x441A, 82212 }, { 0x440A, 82216 }, { 0x4414, 82220 }, { 0x4406, 82224 }, { 0x440C, 82228 }, { 0x440F, 82232 }, { 0x4417, 82236 }, { 0x4418, 82240 }, { 0x4419, 82244 }, { 0x440D, 82248 }, { 0x440E, 82252 }, { 0x4405, 82256 }, { 0x4407, 82260 }, { 0x4416, 82264 }, { 0x440B, 82268 }, { 0x4408, 82272 }, { 0x4410, 82276 }, { 0x4413, 82280 }, { 0x441C, 82284 }, { 0x4421, 82288 }, { 0x4422, 82293 }, { 0x441F, 82298 }, { 0x4423, 82302 }, { 0x441D, 82307 }, { 0x441E, 82311 }, { 0x4420, 82315 }, { 0x441B, 82319 }, { 0x6E23, 82323 }, { 0x6F15, 82325 }, { 0x1DA7, 82329 }, { 0x2538, 82330 }, { 0x1DB4, 82335 }, { 0x2572, 82336 }, { 0x2574, 82340 }, { 0x2568, 82343 }, { 0x2575, 82347 }, { 0x2576, 82350 }, { 0x2571, 82353 }, { 0x2573, 82359 }, { 0x256F, 82362 }, { 0x2569, 82367 }, { 0x1F37, 82371 }, { 0x2596, 82373 }, { 0x1CB4, 82375 }, { 0x1DC7, 82378 }, { 0x007E, 82381 }, { 0x1C08, 82384 }, { 0x2241, 82386 }, { 0x0060, 82388 }, { 0x290B, 82391 }, { 0x2255, 82393 }, { 0x6DB4, 82396 }, { 0x6D1E, 82398 }, { 0x6CC9, 82401 }, { 0x6D2A, 82403 }, { 0x6DB5, 82405 }, { 0x6E6B, 82407 }, { 0x2A91, 82411 }, { 0x37D7, 82415 }, { 0x37E0, 82418 }, { 0x37E1, 82421 }, { 0x37D9, 82425 }, { 0x37DB, 82428 }, { 0x37DA, 82431 }, { 0x37EF, 82434 }, { 0x37DC, 82438 }, { 0x37DE, 82441 }, { 0x37DF, 82444 }, { 0x37DD, 82447 }, { 0x37E2, 82450 }, { 0x37F0, 82453 }, { 0x3797, 82456 }, { 0x37C9, 82459 }, { 0x3798, 82463 }, { 0x3799, 82466 }, { 0x3796, 82469 }, { 0x37E6, 82472 }, { 0x37EB, 82475 }, { 0x37E7, 82478 }, { 0x37EA, 82481 }, { 0x37E9, 82484 }, { 0x37EE, 82487 }, { 0x37E5, 82490 }, { 0x37ED, 82493 }, { 0x37EC, 82496 }, { 0x37E8, 82499 }, { 0x37D8, 82502 }, { 0x37CE, 82505 }, { 0x37CF, 82509 }, { 0x37CC, 82514 }, { 0x37CD, 82518 }, { 0x37D1, 82523 }, { 0x37D2, 82528 }, { 0x37D0, 82532 }, { 0x37CA, 82536 }, { 0x37CB, 82540 }, { 0x379A, 82544 }, { 0x37A2, 82547 }, { 0x379C, 82550 }, { 0x379B, 82553 }, { 0x37A4, 82557 }, { 0x379E, 82560 }, { 0x37A3, 82563 }, { 0x37BD, 82566 }, { 0x37BE, 82569 }, { 0x37AB, 82573 }, { 0x37AC, 82576 }, { 0x37B8, 82580 }, { 0x37B9, 82583 }, { 0x37A8, 82587 }, { 0x37A9, 82590 }, { 0x37C8, 82594 }, { 0x379D, 82597 }, { 0x37AD, 82600 }, { 0x37AF, 82603 }, { 0x37A5, 82607 }, { 0x37A7, 82610 }, { 0x37A6, 82614 }, { 0x37C3, 82618 }, { 0x37BF, 82621 }, { 0x37BA, 82624 }, { 0x37B5, 82627 }, { 0x37BB, 82631 }, { 0x379F, 82634 }, { 0x37BC, 82638 }, { 0x37C1, 82642 }, { 0x37C2, 82645 }, { 0x37C7, 82649 }, { 0x37C5, 82652 }, { 0x37C6, 82656 }, { 0x37B6, 82660 }, { 0x37B7, 82663 }, { 0x37C4, 82667 }, { 0x37C0, 82670 }, { 0x37B3, 82673 }, { 0x37B4, 82676 }, { 0x37AA, 82680 }, { 0x37A0, 82683 }, { 0x37A1, 82687 }, { 0x37B0, 82692 }, { 0x37AE, 82695 }, { 0x37B1, 82699 }, { 0x37B2, 82702 }, { 0x37E3, 82706 }, { 0x37D6, 82710 }, { 0x37D5, 82712 }, { 0x37D3, 82716 }, { 0x37D4, 82720 }, { 0x37E4, 82724 }, { 0x6EB4, 82726 }, { 0x719D, 82727 }, { 0x2B2C, 82728 }, { 0x2B32, 82731 }, { 0x2B2E, 82734 }, { 0x2B7D, 82737 }, { 0x2B34, 82740 }, { 0x2B30, 82743 }, { 0x2B5A, 82746 }, { 0x2B63, 82749 }, { 0x2B5D, 82752 }, { 0x2B66, 82755 }, { 0x2B60, 82758 }, { 0x2B4A, 82761 }, { 0x2B51, 82764 }, { 0x2B4C, 82767 }, { 0x2B53, 82770 }, { 0x2B4F, 82773 }, { 0x2B36, 82776 }, { 0x2B3C, 82779 }, { 0x2B38, 82782 }, { 0x2B3E, 82785 }, { 0x2B3A, 82788 }, { 0x2B59, 82791 }, { 0x2B62, 82794 }, { 0x2B5C, 82797 }, { 0x2B65, 82800 }, { 0x2B5F, 82803 }, { 0x2B35, 82806 }, { 0x2B3B, 82809 }, { 0x2B37, 82812 }, { 0x2B3D, 82815 }, { 0x2B39, 82818 }, { 0x2B68, 82821 }, { 0x2B6B, 82824 }, { 0x2B69, 82827 }, { 0x2B6C, 82830 }, { 0x2B6A, 82833 }, { 0x2B54, 82836 }, { 0x2B57, 82839 }, { 0x2B55, 82842 }, { 0x2B58, 82845 }, { 0x2B56, 82848 }, { 0x2B5B, 82851 }, { 0x2B64, 82854 }, { 0x2B5E, 82857 }, { 0x2B67, 82860 }, { 0x2B61, 82863 }, { 0x2B73, 82866 }, { 0x2B76, 82869 }, { 0x2B74, 82872 }, { 0x2B77, 82875 }, { 0x2B75, 82878 }, { 0x2B3F, 82881 }, { 0x2B45, 82884 }, { 0x2B41, 82887 }, { 0x2B47, 82890 }, { 0x2B43, 82893 }, { 0x2B49, 82896 }, { 0x2B50, 82899 }, { 0x2B4B, 82902 }, { 0x2B52, 82905 }, { 0x2B4E, 82908 }, { 0x2B81, 82911 }, { 0x2B83, 82914 }, { 0x2B82, 82917 }, { 0x2B84, 82920 }, { 0x2B7E, 82923 }, { 0x2B79, 82926 }, { 0x2B7B, 82929 }, { 0x2B7A, 82932 }, { 0x2B7C, 82935 }, { 0x2B6E, 82938 }, { 0x2B72, 82941 }, { 0x2B70, 82944 }, { 0x2B40, 82947 }, { 0x2B46, 82950 }, { 0x2B42, 82953 }, { 0x2B48, 82956 }, { 0x2B44, 82959 }, { 0x2B2B, 82962 }, { 0x2B31, 82966 }, { 0x2B2D, 82970 }, { 0x2B33, 82974 }, { 0x2B2F, 82978 }, { 0x2C65, 82982 }, { 0x2C68, 82986 }, { 0x2C66, 82990 }, { 0x2C69, 82994 }, { 0x2C67, 82998 }, { 0x2B7F, 83002 }, { 0x2B80, 83006 }, { 0x2C60, 83010 }, { 0x2C6A, 83014 }, { 0x2C64, 83018 }, { 0x2C6B, 83022 }, { 0x2C6E, 83026 }, { 0x2C6C, 83030 }, { 0x2C6F, 83034 }, { 0x2C6D, 83038 }, { 0x2C61, 83042 }, { 0x2C62, 83046 }, { 0x2C63, 83050 }, { 0x2B4D, 83054 }, { 0x2B78, 83058 }, { 0x2B6D, 83062 }, { 0x2B71, 83066 }, { 0x2B6F, 83070 }, { 0x5EDA, 83074 }, { 0x2B85, 83078 }, { 0x2B88, 83081 }, { 0x2B89, 83085 }, { 0x2B87, 83088 }, { 0x1EB1, 83091 }, { 0x6EE1, 83092 }, { 0x71D1, 83095 }, { 0x6FAD, 83097 }, { 0x6DBF, 83101 }, { 0x6CA8, 83102 }, { 0x488B, 83103 }, { 0x4868, 83106 }, { 0x486B, 83109 }, { 0x4869, 83112 }, { 0x486C, 83115 }, { 0x486A, 83118 }, { 0x4882, 83121 }, { 0x4871, 83124 }, { 0x487D, 83127 }, { 0x486F, 83130 }, { 0x4889, 83133 }, { 0x4873, 83136 }, { 0x486D, 83139 }, { 0x4886, 83142 }, { 0x4884, 83145 }, { 0x487F, 83148 }, { 0x4880, 83151 }, { 0x4885, 83154 }, { 0x4888, 83157 }, { 0x487B, 83160 }, { 0x4887, 83163 }, { 0x4883, 83166 }, { 0x4872, 83169 }, { 0x4878, 83172 }, { 0x487E, 83175 }, { 0x4870, 83178 }, { 0x4874, 83181 }, { 0x486E, 83184 }, { 0x487A, 83187 }, { 0x4875, 83190 }, { 0x4881, 83193 }, { 0x488A, 83196 }, { 0x487C, 83199 }, { 0x4876, 83202 }, { 0x4879, 83205 }, { 0x4877, 83208 }, { 0x488D, 83211 }, { 0x488E, 83214 }, { 0x488C, 83217 }, { 0x2207, 83220 }, { 0x6F11, 83222 }, { 0x1DE7, 83223 }, { 0x1DAA, 83225 }, { 0x2503, 83227 }, { 0x2502, 83239 }, { 0x2505, 83251 }, { 0x2504, 83263 }, { 0x2507, 83275 }, { 0x2509, 83287 }, { 0x2506, 83299 }, { 0x2508, 83311 }, { 0x24F5, 83323 }, { 0x24F7, 83327 }, { 0x44DE, 83332 }, { 0x44DF, 83336 }, { 0x44E0, 83340 }, { 0x44E1, 83344 }, { 0x44E4, 83348 }, { 0x44F5, 83352 }, { 0x44F0, 83356 }, { 0x44EA, 83360 }, { 0x44E6, 83364 }, { 0x44E7, 83368 }, { 0x44E8, 83372 }, { 0x44E5, 83376 }, { 0x44F1, 83380 }, { 0x44E9, 83384 }, { 0x44ED, 83388 }, { 0x44EF, 83392 }, { 0x44F2, 83396 }, { 0x44F3, 83400 }, { 0x44F4, 83404 }, { 0x44E3, 83408 }, { 0x44E2, 83412 }, { 0x44EC, 83416 }, { 0x44EB, 83420 }, { 0x44EE, 83424 }, { 0x44FA, 83429 }, { 0x450A, 83433 }, { 0x4525, 83438 }, { 0x4513, 83444 }, { 0x44FF, 83449 }, { 0x450F, 83453 }, { 0x452A, 83458 }, { 0x4518, 83464 }, { 0x4503, 83469 }, { 0x451C, 83473 }, { 0x44FB, 83478 }, { 0x450B, 83482 }, { 0x4526, 83487 }, { 0x4514, 83493 }, { 0x44FE, 83498 }, { 0x450E, 83502 }, { 0x4529, 83507 }, { 0x4517, 83513 }, { 0x44FD, 83518 }, { 0x450D, 83522 }, { 0x4528, 83527 }, { 0x4516, 83533 }, { 0x4502, 83538 }, { 0x4512, 83542 }, { 0x452D, 83547 }, { 0x451B, 83553 }, { 0x4501, 83558 }, { 0x4511, 83562 }, { 0x452C, 83567 }, { 0x451A, 83573 }, { 0x4507, 83578 }, { 0x4520, 83582 }, { 0x4506, 83587 }, { 0x451F, 83591 }, { 0x4500, 83596 }, { 0x4510, 83600 }, { 0x452B, 83605 }, { 0x4519, 83611 }, { 0x4508, 83616 }, { 0x4521, 83620 }, { 0x44FC, 83625 }, { 0x450C, 83629 }, { 0x4527, 83634 }, { 0x4515, 83640 }, { 0x4523, 83645 }, { 0x4524, 83650 }, { 0x4505, 83655 }, { 0x451E, 83659 }, { 0x4504, 83664 }, { 0x451D, 83668 }, { 0x4509, 83673 }, { 0x4522, 83677 }, { 0x44F7, 83682 }, { 0x452E, 83687 }, { 0x4533, 83692 }, { 0x4537, 83697 }, { 0x452F, 83702 }, { 0x4532, 83707 }, { 0x4531, 83712 }, { 0x4536, 83717 }, { 0x4535, 83722 }, { 0x4534, 83727 }, { 0x4530, 83732 }, { 0x44F6, 83737 }, { 0x44F9, 83742 }, { 0x44F8, 83746 }, { 0x44BE, 83750 }, { 0x44BF, 83754 }, { 0x44C0, 83758 }, { 0x44C1, 83762 }, { 0x44C4, 83766 }, { 0x44DB, 83770 }, { 0x44D4, 83774 }, { 0x44CE, 83778 }, { 0x44C7, 83782 }, { 0x44C8, 83786 }, { 0x44CA, 83790 }, { 0x44C6, 83794 }, { 0x44D5, 83798 }, { 0x44CC, 83802 }, { 0x44D1, 83806 }, { 0x44D3, 83810 }, { 0x44D6, 83814 }, { 0x44D8, 83818 }, { 0x44DA, 83822 }, { 0x44C3, 83826 }, { 0x44C2, 83830 }, { 0x44D0, 83834 }, { 0x44CF, 83838 }, { 0x44C5, 83842 }, { 0x44C9, 83846 }, { 0x44CB, 83850 }, { 0x44CD, 83854 }, { 0x44D2, 83858 }, { 0x44D7, 83862 }, { 0x44D9, 83866 }, { 0x44DC, 83870 }, { 0x44DD, 83874 }, { 0x1F5E, 83878 }, { 0x1F5F, 83883 }, { 0x1F5D, 83887 }, { 0x1F5B, 83892 }, { 0x1F5A, 83896 }, { 0x1F5C, 83898 }, { 0x1F60, 83902 }, { 0x1F62, 83904 }, { 0x1F61, 83906 }, { 0x6CD1, 83908 }, { 0x6DF8, 83910 }, { 0x6F10, 83911 }, { 0x392D, 83912 }, { 0x0293, 83917 }, { 0x0283, 83921 }, { 0x35F6, 83925 }, { 0x359E, 83928 }, { 0x359D, 83932 }, { 0x359F, 83937 }, { 0x02BB, 83942 }, { 0x02B9, 83947 }, { 0x02AF, 83952 }, { 0x02AE, 83957 }, { 0x02BE, 83962 }, { 0x02B0, 83967 }, { 0x02B2, 83972 }, { 0x02A7, 83976 }, { 0x028E, 83981 }, { 0x028D, 83986 }, { 0x02B1, 83991 }, { 0x02B6, 83996 }, { 0x3591, 84000 }, { 0x3596, 84006 }, { 0x028C, 84013 }, { 0x35A5, 84017 }, { 0x028B, 84023 }, { 0x359B, 84028 }, { 0x360E, 84034 }, { 0x02A6, 84039 }, { 0x3590, 84044 }, { 0x3595, 84050 }, { 0x359A, 84057 }, { 0x02A9, 84063 }, { 0x0294, 84069 }, { 0x0284, 84073 }, { 0x0290, 84077 }, { 0x02A5, 84082 }, { 0x358F, 84087 }, { 0x3594, 84093 }, { 0x3599, 84100 }, { 0x027E, 84106 }, { 0x0281, 84111 }, { 0x02BD, 84115 }, { 0x0295, 84119 }, { 0x02AA, 84123 }, { 0x0289, 84129 }, { 0x02BA, 84133 }, { 0x02B8, 84138 }, { 0x360F, 84143 }, { 0x029E, 84146 }, { 0x028A, 84150 }, { 0x35A0, 84154 }, { 0x0296, 84160 }, { 0x0278, 84164 }, { 0x027D, 84167 }, { 0x0282, 84172 }, { 0x02BC, 84176 }, { 0x3610, 84179 }, { 0x1913, 84184 }, { 0x1917, 84188 }, { 0x196C, 84192 }, { 0x196D, 84196 }, { 0x1918, 84202 }, { 0x1919, 84206 }, { 0x1970, 84210 }, { 0x191D, 84214 }, { 0x026F, 84218 }, { 0x0270, 84222 }, { 0x1974, 84228 }, { 0x0271, 84234 }, { 0x1978, 84238 }, { 0x191F, 84244 }, { 0x02A0, 84248 }, { 0x3930, 84252 }, { 0x197A, 84259 }, { 0x392F, 84266 }, { 0x1979, 84274 }, { 0x1920, 84281 }, { 0x197C, 84285 }, { 0x197E, 84291 }, { 0x197F, 84298 }, { 0x1922, 84305 }, { 0x1926, 84309 }, { 0x0272, 84313 }, { 0x02A1, 84317 }, { 0x1983, 84321 }, { 0x1927, 84327 }, { 0x1985, 84331 }, { 0x1928, 84338 }, { 0x1986, 84342 }, { 0x3931, 84347 }, { 0x192B, 84354 }, { 0x1989, 84358 }, { 0x0276, 84364 }, { 0x02A2, 84368 }, { 0x0277, 84372 }, { 0x198B, 84376 }, { 0x198D, 84380 }, { 0x198C, 84386 }, { 0x192C, 84393 }, { 0x1931, 84397 }, { 0x1921, 84401 }, { 0x1984, 84405 }, { 0x196E, 84409 }, { 0x198E, 84413 }, { 0x1982, 84417 }, { 0x1924, 84421 }, { 0x192D, 84427 }, { 0x392E, 84431 }, { 0x1975, 84435 }, { 0x191B, 84439 }, { 0x1923, 84444 }, { 0x1915, 84449 }, { 0x192F, 84453 }, { 0x029F, 84457 }, { 0x1930, 84461 }, { 0x192E, 84466 }, { 0x191A, 84471 }, { 0x198F, 84475 }, { 0x1981, 84479 }, { 0x1925, 84484 }, { 0x1972, 84490 }, { 0x1914, 84495 }, { 0x1973, 84500 }, { 0x191E, 84505 }, { 0x192A, 84510 }, { 0x197D, 84515 }, { 0x0273, 84523 }, { 0x0274, 84528 }, { 0x198A, 84535 }, { 0x1916, 84540 }, { 0x191C, 84545 }, { 0x196B, 84551 }, { 0x1976, 84556 }, { 0x1977, 84561 }, { 0x197B, 84568 }, { 0x1980, 84573 }, { 0x1988, 84578 }, { 0x0275, 84583 }, { 0x1971, 84589 }, { 0x1987, 84596 }, { 0x363F, 84600 }, { 0x196F, 84605 }, { 0x02A3, 84611 }, { 0x1929, 84617 }, { 0x0279, 84622 }, { 0x02AD, 84626 }, { 0x0288, 84630 }, { 0x02B3, 84633 }, { 0x02B5, 84638 }, { 0x02B4, 84644 }, { 0x35A1, 84650 }, { 0x35A2, 84655 }, { 0x02B7, 84660 }, { 0x35A4, 84664 }, { 0x35A3, 84670 }, { 0x029D, 84675 }, { 0x35A7, 84679 }, { 0x35A6, 84685 }, { 0x027A, 84691 }, { 0x18FC, 84695 }, { 0x18FE, 84699 }, { 0x1900, 84703 }, { 0x1901, 84707 }, { 0x1903, 84711 }, { 0x1904, 84715 }, { 0x363E, 84719 }, { 0x1905, 84725 }, { 0x1906, 84729 }, { 0x1907, 84733 }, { 0x1908, 84737 }, { 0x1909, 84741 }, { 0x190A, 84745 }, { 0x190C, 84749 }, { 0x190E, 84753 }, { 0x190F, 84757 }, { 0x1910, 84761 }, { 0x1911, 84765 }, { 0x27A3, 84769 }, { 0x1912, 84773 }, { 0x18FD, 84777 }, { 0x190D, 84781 }, { 0x18FF, 84785 }, { 0x1902, 84790 }, { 0x190B, 84795 }, { 0x0292, 84800 }, { 0x0291, 84806 }, { 0x358A, 84812 }, { 0x358C, 84818 }, { 0x3586, 84824 }, { 0x3588, 84830 }, { 0x358B, 84836 }, { 0x358D, 84842 }, { 0x3587, 84848 }, { 0x3589, 84854 }, { 0x027F, 84860 }, { 0x02AB, 84864 }, { 0x1948, 84867 }, { 0x352A, 84871 }, { 0x352B, 84876 }, { 0x0E2A, 84881 }, { 0x027C, 84885 }, { 0x0280, 84889 }, { 0x0287, 84894 }, { 0x02A8, 84898 }, { 0x3592, 84903 }, { 0x3597, 84909 }, { 0x359C, 84916 }, { 0x027B, 84922 }, { 0x0285, 84925 }, { 0x02A4, 84929 }, { 0x358E, 84934 }, { 0x3593, 84940 }, { 0x3598, 84947 }, { 0x028F, 84953 }, { 0x02AC, 84957 }, { 0x21E5, 84960 }, { 0x21E4, 84963 }, { 0x6192, 84966 }, { 0x6FD8, 84969 }, { 0x7011, 84970 }, { 0x224A, 84971 }, { 0x6FD9, 84972 }, { 0x6FDB, 84974 }, { 0x6FF0, 84976 }, { 0x1E41, 84978 }, { 0x6CF1, 84979 }, { 0x1E15, 84982 }, { 0x1E17, 84983 }, { 0x1E16, 84985 }, { 0x6C7F, 84987 }, { 0x6D19, 84988 }, { 0x1C21, 84990 }, { 0x2059, 84993 }, { 0x6B8E, 84997 }, { 0x6B8F, 85003 }, { 0x6B90, 85009 }, { 0x6B91, 85015 }, { 0x6B92, 85021 }, { 0x6B93, 85027 }, { 0x6B94, 85033 }, { 0x6B95, 85039 }, { 0x6B96, 85045 }, { 0x6B97, 85051 }, { 0x6B98, 85057 }, { 0x6B99, 85063 }, { 0x6B9A, 85069 }, { 0x6B9B, 85075 }, { 0x6B9C, 85081 }, { 0x6B9D, 85087 }, { 0x6B9E, 85093 }, { 0x6B9F, 85099 }, { 0x6BA0, 85105 }, { 0x6BA1, 85111 }, { 0x6BA2, 85117 }, { 0x6BA3, 85123 }, { 0x6BA4, 85129 }, { 0x6BA5, 85135 }, { 0x6BA6, 85141 }, { 0x6BA7, 85147 }, { 0x2045, 85153 }, { 0x2046, 85157 }, { 0x204E, 85161 }, { 0x2049, 85165 }, { 0x204A, 85169 }, { 0x204C, 85173 }, { 0x2048, 85177 }, { 0x204D, 85181 }, { 0x2047, 85185 }, { 0x204B, 85189 }, { 0x6BC8, 85193 }, { 0x6BC5, 85196 }, { 0x6BC6, 85199 }, { 0x6BC7, 85202 }, { 0x6BC9, 85205 }, { 0x22A8, 85208 }, { 0x6BAA, 85212 }, { 0x6BAB, 85218 }, { 0x6BAC, 85224 }, { 0x6BAD, 85230 }, { 0x6BAE, 85236 }, { 0x6BAF, 85242 }, { 0x6BB0, 85248 }, { 0x6BB1, 85254 }, { 0x6BB2, 85260 }, { 0x6BB3, 85266 }, { 0x6BB4, 85272 }, { 0x6BB5, 85278 }, { 0x6BB6, 85284 }, { 0x6BB7, 85290 }, { 0x6BB8, 85296 }, { 0x6BB9, 85302 }, { 0x6BBA, 85308 }, { 0x6BBB, 85314 }, { 0x6BBC, 85320 }, { 0x6BBD, 85326 }, { 0x6BBE, 85332 }, { 0x6BBF, 85338 }, { 0x6BC0, 85344 }, { 0x6BC1, 85350 }, { 0x6BC2, 85356 }, { 0x6BC3, 85362 }, { 0x005F, 85368 }, { 0x6E0E, 85370 }, { 0x6E0F, 85371 }, { 0x6FC8, 85375 }, { 0x701C, 85377 }, { 0x6FD1, 85380 }, { 0x6FCF, 85382 }, { 0x6FD3, 85385 }, { 0x1E3F, 85387 }, { 0x2180, 85389 }, { 0x2287, 85391 }, { 0x2273, 85394 }, { 0x2279, 85397 }, { 0x21F7, 85400 }, { 0x1BF2, 85403 }, { 0x71BD, 85404 }, { 0x1DAE, 85405 }, { 0x264D, 85407 }, { 0x264C, 85411 }, { 0x6FFD, 85415 }, { 0x6DF6, 85417 }, { 0x36B2, 85419 }, { 0x36B3, 85422 }, { 0x36B1, 85426 }, { 0x3699, 85430 }, { 0x369C, 85433 }, { 0x369A, 85436 }, { 0x369D, 85439 }, { 0x369B, 85442 }, { 0x368A, 85445 }, { 0x3680, 85448 }, { 0x3686, 85451 }, { 0x36A2, 85454 }, { 0x36A0, 85457 }, { 0x367E, 85460 }, { 0x3698, 85463 }, { 0x3682, 85466 }, { 0x367C, 85469 }, { 0x3695, 85472 }, { 0x368B, 85475 }, { 0x3687, 85478 }, { 0x3688, 85481 }, { 0x369E, 85484 }, { 0x3694, 85487 }, { 0x3697, 85490 }, { 0x3684, 85493 }, { 0x368F, 85496 }, { 0x369F, 85499 }, { 0x3693, 85502 }, { 0x3691, 85505 }, { 0x3681, 85508 }, { 0x36A7, 85511 }, { 0x368E, 85514 }, { 0x36A1, 85517 }, { 0x367D, 85520 }, { 0x367F, 85523 }, { 0x36A8, 85526 }, { 0x3683, 85529 }, { 0x3689, 85532 }, { 0x3696, 85535 }, { 0x3685, 85538 }, { 0x368C, 85541 }, { 0x36A5, 85544 }, { 0x3690, 85547 }, { 0x368D, 85550 }, { 0x36A6, 85553 }, { 0x3692, 85556 }, { 0x36AB, 85560 }, { 0x36A9, 85564 }, { 0x36AC, 85568 }, { 0x36AA, 85572 }, { 0x36AF, 85576 }, { 0x36B0, 85579 }, { 0x36AD, 85583 }, { 0x36A3, 85587 }, { 0x36A4, 85591 }, { 0x36AE, 85595 }, { 0x4000, 85599 }, { 0x3FFA, 85604 }, { 0x3FE3, 85608 }, { 0x3FF5, 85612 }, { 0x3FE9, 85616 }, { 0x3FF6, 85620 }, { 0x3FE8, 85624 }, { 0x3FE5, 85628 }, { 0x3FED, 85632 }, { 0x3FF8, 85636 }, { 0x3FF3, 85640 }, { 0x3FF2, 85644 }, { 0x3FFF, 85648 }, { 0x3FF1, 85652 }, { 0x3FFC, 85656 }, { 0x4005, 85660 }, { 0x3FE2, 85665 }, { 0x3FF4, 85669 }, { 0x3FDD, 85674 }, { 0x3FF7, 85678 }, { 0x4001, 85682 }, { 0x3FFB, 85686 }, { 0x3FEE, 85691 }, { 0x4004, 85695 }, { 0x3FE1, 85700 }, { 0x3FF9, 85704 }, { 0x3FDE, 85708 }, { 0x3FEF, 85712 }, { 0x3FEC, 85716 }, { 0x4002, 85720 }, { 0x3FDF, 85724 }, { 0x3FDA, 85728 }, { 0x3FE4, 85733 }, { 0x3FF0, 85737 }, { 0x3FDC, 85741 }, { 0x3FE7, 85745 }, { 0x3FFD, 85749 }, { 0x3FFE, 85753 }, { 0x3FE0, 85757 }, { 0x3FE6, 85761 }, { 0x4003, 85765 }, { 0x3FDB, 85769 }, { 0x3FEA, 85774 }, { 0x3FEB, 85778 }, { 0x4006, 85783 }, { 0x3FD9, 85789 }, { 0x2289, 85793 }, { 0x6E39, 85795 }, { 0x1E9F, 85797 }, { 0x1E03, 85799 }, { 0x1E05, 85800 }, { 0x1E07, 85804 }, { 0x1E71, 85808 }, { 0x260F, 85813 }, { 0x2613, 85818 }, { 0x2611, 85824 }, { 0x260D, 85829 }, { 0x260B, 85833 }, { 0x2609, 85839 }, { 0x1E39, 85844 }, { 0x7196, 85847 }, { 0x1F20, 85849 }, { 0x6DB3, 85851 }, { 0x1CD7, 85852 }, { 0x20F0, 85854 }, { 0x20F1, 85857 }, { 0x20F2, 85860 }, { 0x20F3, 85863 }, { 0x20F4, 85872 }, { 0x20F5, 85878 }, { 0x20F6, 85887 }, { 0x20F7, 85896 }, { 0x20F8, 85899 }, { 0x20F9, 85905 }, { 0x001F, 85914 }, { 0x1BFC, 85916 }, { 0x2215, 85919 }, { 0x21D6, 85920 }, { 0x6BE7, 85923 }, { 0x6BE8, 85928 }, { 0x6BE9, 85933 }, { 0x6BEA, 85938 }, { 0x6BEB, 85943 }, { 0x6BEC, 85948 }, { 0x6BED, 85953 }, { 0x6BEE, 85958 }, { 0x6BEF, 85963 }, { 0x6BF0, 85968 }, { 0x6BF1, 85973 }, { 0x6BF2, 85978 }, { 0x6BF3, 85983 }, { 0x6BF4, 85988 }, { 0x6BF5, 85993 }, { 0x6BF6, 85998 }, { 0x6BF7, 86003 }, { 0x6BF8, 86008 }, { 0x6BF9, 86013 }, { 0x6BFA, 86018 }, { 0x6BFB, 86023 }, { 0x6BFC, 86028 }, { 0x6BFD, 86033 }, { 0x6BFE, 86038 }, { 0x6BFF, 86043 }, { 0x6C00, 86048 }, { 0x6F47, 86053 }, { 0x6CD2, 86055 }, { 0x1CAC, 86057 }, { 0x6FF6, 86058 }, { 0x1E99, 86059 }, { 0x6ED0, 86062 }, { 0x24FD, 86068 }, { 0x24FF, 86070 }, { 0x2934, 86074 }, { 0x250A, 86076 }, { 0x1BE9, 86079 }, { 0x1DC6, 86081 }, { 0x1E56, 86083 }, { 0x1BEA, 86086 }, { 0x2AAA, 86089 }, { 0x2647, 86094 }, { 0x2904, 86099 }, { 0x6ECC, 86102 }, { 0x6ECD, 86108 }, { 0x6ECE, 86112 }, { 0x1BEB, 86116 }, { 0x1BFF, 86119 }, { 0x2173, 86122 }, { 0x6ECF, 86127 }, { 0x2921, 86130 }, { 0x1C03, 86133 }, { 0x1CD0, 86135 }, { 0x224F, 86139 }, { 0x71C0, 86140 }, { 0x21A9, 86141 }, { 0x6C6C, 86142 }, { 0x228A, 86143 }, { 0x2278, 86146 }, { 0x22A7, 86150 }, { 0x2172, 86153 }, { 0x6C5B, 86154 }, { 0x7008, 86156 }, { 0x700D, 86158 }, { 0x6EDB, 86160 }, { 0x6EDC, 86165 }, { 0x6ED5, 86170 }, { 0x6ED6, 86175 }, { 0x6ED9, 86180 }, { 0x6EDA, 86185 }, { 0x6ED3, 86190 }, { 0x6ED4, 86195 }, { 0x3501, 86200 }, { 0x6F6F, 86202 }, { 0x6DDF, 86204 }, { 0x7007, 86206 }, { 0x6F7D, 86208 }, { 0x6F7C, 86211 }, { 0x6F4A, 86214 }, { 0x7195, 86216 }, { 0x2282, 86218 }, { 0x6F1E, 86219 }, { 0x1C64, 86223 }, { 0x6D6E, 86225 }, { 0x6C97, 86227 }, { 0x6E0A, 86229 }, { 0x1DEC, 86231 }, { 0x1E04, 86234 }, { 0x1E06, 86235 }, { 0x1E08, 86239 }, { 0x1E72, 86243 }, { 0x2610, 86248 }, { 0x2614, 86253 }, { 0x2612, 86259 }, { 0x260E, 86264 }, { 0x260C, 86268 }, { 0x260A, 86274 }, { 0x1E3A, 86279 }, { 0x1E0C, 86282 }, { 0x1E10, 86284 }, { 0x261E, 86289 }, { 0x1E14, 86297 }, { 0x2626, 86303 }, { 0x2622, 86309 }, { 0x2624, 86314 }, { 0x2620, 86320 }, { 0x2618, 86325 }, { 0x261A, 86328 }, { 0x261C, 86333 }, { 0x262E, 86338 }, { 0x2630, 86341 }, { 0x24D5, 86344 }, { 0x2632, 86348 }, { 0x2631, 86356 }, { 0x2323, 86359 }, { 0x1EB8, 86362 }, { 0x144F, 86363 }, { 0x1450, 86367 }, { 0x143F, 86371 }, { 0x1440, 86374 }, { 0x1441, 86377 }, { 0x1449, 86380 }, { 0x1446, 86383 }, { 0x1443, 86386 }, { 0x1442, 86389 }, { 0x144C, 86392 }, { 0x144A, 86395 }, { 0x1447, 86398 }, { 0x1448, 86401 }, { 0x144E, 86404 }, { 0x1445, 86407 }, { 0x144D, 86410 }, { 0x144B, 86413 }, { 0x1444, 86416 }, { 0x6CC6, 86419 }, { 0x6E01, 86421 }, { 0x7183, 86423 }, { 0x292E, 86425 }, { 0x2849, 86427 }, { 0x287F, 86430 }, { 0x2862, 86433 }, { 0x2880, 86436 }, { 0x286C, 86439 }, { 0x285D, 86442 }, { 0x284A, 86445 }, { 0x2850, 86448 }, { 0x2855, 86451 }, { 0x284C, 86454 }, { 0x2859, 86457 }, { 0x284F, 86460 }, { 0x2856, 86463 }, { 0x2866, 86466 }, { 0x2867, 86469 }, { 0x2868, 86472 }, { 0x286B, 86475 }, { 0x2860, 86478 }, { 0x286D, 86481 }, { 0x2872, 86484 }, { 0x2875, 86487 }, { 0x2879, 86490 }, { 0x287A, 86493 }, { 0x287B, 86496 }, { 0x287C, 86499 }, { 0x2854, 86502 }, { 0x2871, 86505 }, { 0x284B, 86509 }, { 0x2877, 86512 }, { 0x2852, 86515 }, { 0x2851, 86518 }, { 0x286F, 86521 }, { 0x285C, 86524 }, { 0x285E, 86527 }, { 0x286E, 86530 }, { 0x2874, 86533 }, { 0x2873, 86536 }, { 0x2876, 86539 }, { 0x2878, 86542 }, { 0x2863, 86545 }, { 0x287E, 86548 }, { 0x2853, 86551 }, { 0x284D, 86554 }, { 0x2858, 86557 }, { 0x285A, 86560 }, { 0x284E, 86565 }, { 0x285B, 86570 }, { 0x2857, 86574 }, { 0x2861, 86578 }, { 0x2870, 86582 }, { 0x2869, 86586 }, { 0x285F, 86590 }, { 0x286A, 86594 }, { 0x2865, 86598 }, { 0x2864, 86602 }, { 0x287D, 86606 }, { 0x2881, 86610 }, { 0x2883, 86615 }, { 0x2882, 86618 }, { 0x1BFE, 86621 }, { 0x6C31, 86624 }, { 0x6C32, 86630 }, { 0x6C37, 86636 }, { 0x6C33, 86642 }, { 0x6C35, 86648 }, { 0x6C38, 86654 }, { 0x6C30, 86660 }, { 0x6C34, 86666 }, { 0x6C36, 86672 }, { 0x6B69, 86678 }, { 0x2524, 86685 }, { 0x2527, 86689 }, { 0x7001, 86694 }, { 0x2525, 86698 }, { 0x1C11, 86701 }, { 0x6D5B, 86702 }, { 0x6CB4, 86704 }, { 0x40F9, 86706 }, { 0x40F6, 86709 }, { 0x40F7, 86712 }, { 0x40E0, 86715 }, { 0x40EF, 86718 }, { 0x40F5, 86721 }, { 0x40E1, 86724 }, { 0x40EC, 86727 }, { 0x40EE, 86730 }, { 0x40E6, 86733 }, { 0x40DE, 86736 }, { 0x40E9, 86739 }, { 0x40EB, 86742 }, { 0x40F8, 86745 }, { 0x40E4, 86748 }, { 0x40E5, 86751 }, { 0x40DB, 86754 }, { 0x40DC, 86757 }, { 0x40EA, 86760 }, { 0x40E3, 86763 }, { 0x40F1, 86766 }, { 0x40F0, 86769 }, { 0x40E7, 86772 }, { 0x40E2, 86775 }, { 0x40DF, 86778 }, { 0x40DD, 86781 }, { 0x40F4, 86784 }, { 0x40E8, 86787 }, { 0x40F2, 86790 }, { 0x40ED, 86793 }, { 0x40F3, 86796 }, { 0x215C, 86799 }, { 0x224B, 86800 }, { 0x216E, 86803 }, { 0x6F4D, 86807 }, { 0x1BF3, 86809 }, { 0x1CB0, 86810 }, { 0x2324, 86811 }, { 0x252A, 86816 }, { 0x263E, 86821 }, { 0x263C, 86826 }, { 0x2930, 86831 }, { 0x26D7, 86834 }, { 0x1C12, 86837 }, { 0x2ABE, 86840 }, { 0x2AC2, 86844 }, { 0x2AC0, 86850 }, { 0x2ABF, 86856 }, { 0x2AC1, 86863 }, { 0x005C, 86872 }, { 0x2649, 86874 }, { 0x264A, 86879 }, { 0x1F08, 86884 }, { 0x1F59, 86889 }, { 0x2202, 86892 }, { 0x2922, 86897 }, { 0x24F4, 86899 }, { 0x6FE1, 86902 }, { 0x1E77, 86905 }, { 0x2AC8, 86907 }, { 0x1EA0, 86911 }, { 0x1C8E, 86913 }, { 0x6CDA, 86917 }, { 0x222F, 86919 }, { 0x6FCC, 86924 }, { 0x0006, 86925 }, { 0x5613, 86926 }, { 0x5614, 86929 }, { 0x5615, 86932 }, { 0x5616, 86935 }, { 0x5617, 86938 }, { 0x5618, 86941 }, { 0x5619, 86944 }, { 0x561A, 86947 }, { 0x561B, 86950 }, { 0x561C, 86953 }, { 0x561E, 86956 }, { 0x561F, 86959 }, { 0x5620, 86962 }, { 0x5621, 86965 }, { 0x5622, 86968 }, { 0x5623, 86971 }, { 0x5624, 86974 }, { 0x5625, 86977 }, { 0x5626, 86980 }, { 0x5627, 86983 }, { 0x5628, 86986 }, { 0x5629, 86989 }, { 0x562A, 86992 }, { 0x562B, 86995 }, { 0x562C, 86998 }, { 0x562D, 87001 }, { 0x562F, 87004 }, { 0x5630, 87007 }, { 0x5631, 87010 }, { 0x5632, 87013 }, { 0x5633, 87016 }, { 0x5634, 87019 }, { 0x5635, 87022 }, { 0x5636, 87025 }, { 0x5637, 87028 }, { 0x5638, 87031 }, { 0x5639, 87034 }, { 0x563A, 87037 }, { 0x563B, 87040 }, { 0x563D, 87043 }, { 0x563E, 87046 }, { 0x5640, 87049 }, { 0x5641, 87052 }, { 0x5642, 87055 }, { 0x5643, 87058 }, { 0x5645, 87061 }, { 0x5648, 87064 }, { 0x5649, 87067 }, { 0x564A, 87070 }, { 0x564B, 87073 }, { 0x564C, 87076 }, { 0x564D, 87079 }, { 0x564E, 87082 }, { 0x564F, 87085 }, { 0x5650, 87088 }, { 0x5651, 87091 }, { 0x5652, 87094 }, { 0x5653, 87097 }, { 0x5654, 87100 }, { 0x5655, 87103 }, { 0x5656, 87106 }, { 0x5657, 87109 }, { 0x5658, 87112 }, { 0x5659, 87115 }, { 0x565A, 87118 }, { 0x565B, 87121 }, { 0x565F, 87124 }, { 0x5660, 87127 }, { 0x5661, 87130 }, { 0x5662, 87133 }, { 0x5663, 87136 }, { 0x5664, 87139 }, { 0x5665, 87142 }, { 0x5666, 87145 }, { 0x5667, 87148 }, { 0x5668, 87151 }, { 0x5669, 87154 }, { 0x566A, 87157 }, { 0x566B, 87160 }, { 0x566C, 87163 }, { 0x566D, 87166 }, { 0x566E, 87169 }, { 0x566F, 87172 }, { 0x5670, 87175 }, { 0x5671, 87178 }, { 0x5672, 87181 }, { 0x5673, 87184 }, { 0x5674, 87187 }, { 0x5675, 87190 }, { 0x5676, 87193 }, { 0x5677, 87196 }, { 0x5678, 87199 }, { 0x5679, 87202 }, { 0x567A, 87205 }, { 0x567B, 87208 }, { 0x567C, 87211 }, { 0x567D, 87214 }, { 0x567F, 87217 }, { 0x5681, 87220 }, { 0x5682, 87223 }, { 0x5684, 87226 }, { 0x5686, 87229 }, { 0x5688, 87232 }, { 0x5689, 87235 }, { 0x568D, 87238 }, { 0x5690, 87241 }, { 0x5691, 87244 }, { 0x5695, 87247 }, { 0x5696, 87250 }, { 0x5697, 87253 }, { 0x569A, 87256 }, { 0x569B, 87259 }, { 0x569C, 87262 }, { 0x569D, 87265 }, { 0x569E, 87268 }, { 0x56A0, 87271 }, { 0x56A1, 87274 }, { 0x56A2, 87277 }, { 0x56A3, 87280 }, { 0x56A4, 87283 }, { 0x56A5, 87286 }, { 0x56A6, 87289 }, { 0x56A7, 87292 }, { 0x56A8, 87295 }, { 0x56A9, 87298 }, { 0x56AB, 87301 }, { 0x56AC, 87304 }, { 0x56AD, 87307 }, { 0x56AE, 87310 }, { 0x56AF, 87313 }, { 0x56B0, 87316 }, { 0x56B1, 87319 }, { 0x56B2, 87322 }, { 0x56B3, 87325 }, { 0x56B4, 87328 }, { 0x56B6, 87331 }, { 0x56B7, 87334 }, { 0x56B8, 87337 }, { 0x56B9, 87340 }, { 0x56BA, 87343 }, { 0x56BB, 87346 }, { 0x56BC, 87349 }, { 0x56BD, 87352 }, { 0x56BE, 87355 }, { 0x56BF, 87358 }, { 0x56C0, 87361 }, { 0x56C1, 87364 }, { 0x56C2, 87367 }, { 0x56C3, 87370 }, { 0x56C4, 87373 }, { 0x56C5, 87376 }, { 0x56C6, 87379 }, { 0x56C7, 87382 }, { 0x56C8, 87385 }, { 0x56C9, 87388 }, { 0x56CA, 87391 }, { 0x56CB, 87394 }, { 0x56CC, 87397 }, { 0x56CD, 87400 }, { 0x56CE, 87403 }, { 0x56CF, 87406 }, { 0x56D0, 87409 }, { 0x56D1, 87412 }, { 0x56D2, 87415 }, { 0x56D3, 87418 }, { 0x56D4, 87421 }, { 0x56D5, 87424 }, { 0x56D6, 87427 }, { 0x56D7, 87430 }, { 0x56D8, 87433 }, { 0x56D9, 87436 }, { 0x56DA, 87439 }, { 0x56DB, 87442 }, { 0x56DC, 87445 }, { 0x56DD, 87448 }, { 0x56DE, 87451 }, { 0x56DF, 87454 }, { 0x56E0, 87457 }, { 0x56E1, 87460 }, { 0x56E2, 87463 }, { 0x56E3, 87466 }, { 0x56E4, 87469 }, { 0x56E5, 87472 }, { 0x56E6, 87475 }, { 0x56E7, 87478 }, { 0x56E8, 87481 }, { 0x56E9, 87484 }, { 0x56EA, 87487 }, { 0x56EB, 87490 }, { 0x56EC, 87493 }, { 0x56ED, 87496 }, { 0x56EE, 87499 }, { 0x56EF, 87502 }, { 0x56F0, 87505 }, { 0x56F1, 87508 }, { 0x56F2, 87511 }, { 0x56F3, 87514 }, { 0x56F4, 87517 }, { 0x56F5, 87520 }, { 0x56F6, 87523 }, { 0x56F7, 87526 }, { 0x56F8, 87529 }, { 0x56FB, 87532 }, { 0x56FC, 87535 }, { 0x56FD, 87538 }, { 0x56FE, 87541 }, { 0x56FF, 87544 }, { 0x5701, 87547 }, { 0x5702, 87550 }, { 0x5704, 87553 }, { 0x5705, 87556 }, { 0x5706, 87559 }, { 0x5707, 87562 }, { 0x5708, 87565 }, { 0x5709, 87568 }, { 0x570B, 87571 }, { 0x570D, 87574 }, { 0x570E, 87577 }, { 0x570F, 87580 }, { 0x5710, 87583 }, { 0x5711, 87586 }, { 0x5712, 87589 }, { 0x5713, 87592 }, { 0x5714, 87595 }, { 0x5715, 87598 }, { 0x5716, 87601 }, { 0x5717, 87604 }, { 0x5719, 87607 }, { 0x571A, 87610 }, { 0x571B, 87613 }, { 0x571C, 87616 }, { 0x571D, 87619 }, { 0x571E, 87622 }, { 0x571F, 87625 }, { 0x5720, 87628 }, { 0x5721, 87631 }, { 0x5722, 87634 }, { 0x5723, 87637 }, { 0x5724, 87640 }, { 0x5725, 87643 }, { 0x5726, 87646 }, { 0x5727, 87649 }, { 0x5728, 87652 }, { 0x5729, 87655 }, { 0x572A, 87658 }, { 0x572B, 87661 }, { 0x572C, 87664 }, { 0x572D, 87667 }, { 0x572E, 87670 }, { 0x572F, 87673 }, { 0x5730, 87676 }, { 0x5731, 87679 }, { 0x5732, 87682 }, { 0x5733, 87685 }, { 0x5734, 87688 }, { 0x5735, 87691 }, { 0x5736, 87694 }, { 0x5737, 87697 }, { 0x5738, 87700 }, { 0x5739, 87703 }, { 0x573A, 87706 }, { 0x573B, 87709 }, { 0x573C, 87712 }, { 0x573D, 87715 }, { 0x573E, 87718 }, { 0x573F, 87721 }, { 0x5740, 87724 }, { 0x5742, 87727 }, { 0x5743, 87730 }, { 0x5744, 87733 }, { 0x5745, 87736 }, { 0x5746, 87739 }, { 0x5747, 87742 }, { 0x5748, 87745 }, { 0x5749, 87748 }, { 0x574A, 87751 }, { 0x574B, 87754 }, { 0x574C, 87757 }, { 0x574D, 87760 }, { 0x574E, 87763 }, { 0x574F, 87766 }, { 0x5750, 87769 }, { 0x5751, 87772 }, { 0x5752, 87775 }, { 0x5753, 87778 }, { 0x5754, 87781 }, { 0x5755, 87784 }, { 0x5756, 87787 }, { 0x5757, 87790 }, { 0x5759, 87793 }, { 0x575A, 87796 }, { 0x575B, 87799 }, { 0x575C, 87802 }, { 0x575D, 87805 }, { 0x575F, 87808 }, { 0x5760, 87811 }, { 0x5761, 87814 }, { 0x5762, 87817 }, { 0x5763, 87820 }, { 0x5765, 87823 }, { 0x5766, 87826 }, { 0x5767, 87829 }, { 0x5768, 87832 }, { 0x5769, 87835 }, { 0x576A, 87838 }, { 0x576B, 87841 }, { 0x576C, 87844 }, { 0x576D, 87847 }, { 0x576E, 87850 }, { 0x5770, 87853 }, { 0x5771, 87856 }, { 0x5772, 87859 }, { 0x5773, 87862 }, { 0x5774, 87865 }, { 0x5775, 87868 }, { 0x5776, 87871 }, { 0x5777, 87874 }, { 0x5778, 87877 }, { 0x5779, 87880 }, { 0x577A, 87883 }, { 0x577B, 87886 }, { 0x577C, 87889 }, { 0x577D, 87892 }, { 0x577E, 87895 }, { 0x577F, 87898 }, { 0x5780, 87901 }, { 0x5781, 87904 }, { 0x5782, 87907 }, { 0x5783, 87910 }, { 0x5785, 87913 }, { 0x5786, 87916 }, { 0x578A, 87919 }, { 0x578B, 87922 }, { 0x578C, 87925 }, { 0x578D, 87928 }, { 0x5791, 87931 }, { 0x5792, 87934 }, { 0x5793, 87937 }, { 0x5794, 87940 }, { 0x5795, 87943 }, { 0x5796, 87946 }, { 0x5797, 87949 }, { 0x5798, 87952 }, { 0x5799, 87955 }, { 0x579A, 87958 }, { 0x579B, 87961 }, { 0x579C, 87964 }, { 0x579D, 87967 }, { 0x579E, 87970 }, { 0x579F, 87973 }, { 0x57A0, 87976 }, { 0x57A1, 87979 }, { 0x57A2, 87982 }, { 0x57A3, 87985 }, { 0x57A4, 87988 }, { 0x57A5, 87991 }, { 0x57A6, 87994 }, { 0x57A7, 87997 }, { 0x57A9, 88000 }, { 0x57AA, 88003 }, { 0x57AB, 88006 }, { 0x57AC, 88009 }, { 0x57AD, 88012 }, { 0x57AF, 88015 }, { 0x57B0, 88018 }, { 0x57B1, 88021 }, { 0x57B2, 88024 }, { 0x57B4, 88027 }, { 0x57B5, 88030 }, { 0x57B6, 88033 }, { 0x57B8, 88036 }, { 0x57B9, 88039 }, { 0x57BA, 88042 }, { 0x57BB, 88045 }, { 0x57BC, 88048 }, { 0x57BD, 88051 }, { 0x57BE, 88054 }, { 0x57BF, 88057 }, { 0x57C0, 88060 }, { 0x57C1, 88063 }, { 0x57C3, 88066 }, { 0x57C4, 88069 }, { 0x57C6, 88075 }, { 0x57C7, 88078 }, { 0x57C8, 88081 }, { 0x57CA, 88084 }, { 0x57CB, 88087 }, { 0x57CC, 88090 }, { 0x57CD, 88093 }, { 0x57CE, 88096 }, { 0x57CF, 88099 }, { 0x57D0, 88102 }, { 0x57D1, 88106 }, { 0x57D2, 88109 }, { 0x57D3, 88112 }, { 0x57D4, 88115 }, { 0x57D5, 88118 }, { 0x57D6, 88121 }, { 0x57D7, 88124 }, { 0x57D8, 88127 }, { 0x57D9, 88130 }, { 0x57DA, 88133 }, { 0x57DB, 88136 }, { 0x57DC, 88139 }, { 0x57DD, 88142 }, { 0x57DE, 88145 }, { 0x57DF, 88148 }, { 0x57E0, 88151 }, { 0x57E1, 88154 }, { 0x57E3, 88160 }, { 0x57E4, 88163 }, { 0x57E5, 88166 }, { 0x57E6, 88169 }, { 0x57E7, 88172 }, { 0x57E8, 88175 }, { 0x57E9, 88178 }, { 0x57EA, 88181 }, { 0x57EB, 88184 }, { 0x57EC, 88187 }, { 0x57ED, 88190 }, { 0x57EE, 88193 }, { 0x57EF, 88196 }, { 0x57F0, 88199 }, { 0x57F1, 88202 }, { 0x57F2, 88205 }, { 0x57F3, 88208 }, { 0x57F4, 88211 }, { 0x57F5, 88214 }, { 0x57F6, 88217 }, { 0x57F7, 88220 }, { 0x57F8, 88223 }, { 0x57F9, 88226 }, { 0x57FA, 88229 }, { 0x57FB, 88232 }, { 0x57FC, 88235 }, { 0x57FD, 88238 }, { 0x57FE, 88241 }, { 0x57FF, 88244 }, { 0x5800, 88247 }, { 0x5801, 88250 }, { 0x5802, 88253 }, { 0x5803, 88256 }, { 0x5804, 88259 }, { 0x5805, 88262 }, { 0x5806, 88265 }, { 0x5807, 88268 }, { 0x5808, 88271 }, { 0x5809, 88274 }, { 0x580A, 88277 }, { 0x580C, 88280 }, { 0x580D, 88283 }, { 0x580E, 88286 }, { 0x580F, 88289 }, { 0x5810, 88292 }, { 0x5811, 88295 }, { 0x5812, 88298 }, { 0x5814, 88301 }, { 0x5815, 88304 }, { 0x5816, 88307 }, { 0x5817, 88310 }, { 0x5818, 88313 }, { 0x5819, 88316 }, { 0x581A, 88319 }, { 0x581B, 88322 }, { 0x581C, 88325 }, { 0x581D, 88328 }, { 0x581E, 88331 }, { 0x581F, 88334 }, { 0x5820, 88337 }, { 0x5821, 88340 }, { 0x5822, 88343 }, { 0x5823, 88346 }, { 0x5824, 88349 }, { 0x5825, 88352 }, { 0x5826, 88355 }, { 0x5827, 88358 }, { 0x5828, 88361 }, { 0x5829, 88364 }, { 0x582A, 88367 }, { 0x582B, 88370 }, { 0x582C, 88373 }, { 0x582D, 88376 }, { 0x582E, 88379 }, { 0x582F, 88382 }, { 0x5830, 88385 }, { 0x5831, 88388 }, { 0x5832, 88391 }, { 0x5833, 88394 }, { 0x5834, 88397 }, { 0x5835, 88400 }, { 0x5836, 88403 }, { 0x5837, 88406 }, { 0x5838, 88409 }, { 0x5839, 88412 }, { 0x583A, 88415 }, { 0x583B, 88418 }, { 0x583C, 88421 }, { 0x583D, 88424 }, { 0x583E, 88427 }, { 0x583F, 88430 }, { 0x5840, 88433 }, { 0x5841, 88436 }, { 0x5842, 88439 }, { 0x5843, 88442 }, { 0x5844, 88445 }, { 0x5845, 88448 }, { 0x5846, 88451 }, { 0x5847, 88454 }, { 0x5848, 88457 }, { 0x5849, 88460 }, { 0x584A, 88463 }, { 0x584B, 88466 }, { 0x584C, 88469 }, { 0x584D, 88472 }, { 0x584E, 88475 }, { 0x584F, 88478 }, { 0x5850, 88481 }, { 0x5851, 88484 }, { 0x5852, 88487 }, { 0x5853, 88490 }, { 0x5854, 88493 }, { 0x5855, 88496 }, { 0x5856, 88499 }, { 0x5857, 88502 }, { 0x5858, 88505 }, { 0x5859, 88508 }, { 0x561D, 88511 }, { 0x562E, 88514 }, { 0x563C, 88517 }, { 0x563F, 88520 }, { 0x5644, 88523 }, { 0x5646, 88526 }, { 0x5647, 88529 }, { 0x565C, 88532 }, { 0x565D, 88535 }, { 0x565E, 88538 }, { 0x567E, 88541 }, { 0x5680, 88544 }, { 0x5683, 88547 }, { 0x5685, 88550 }, { 0x5687, 88553 }, { 0x568A, 88556 }, { 0x568B, 88559 }, { 0x568C, 88562 }, { 0x568E, 88565 }, { 0x568F, 88568 }, { 0x5692, 88571 }, { 0x5693, 88574 }, { 0x5694, 88577 }, { 0x5698, 88580 }, { 0x5699, 88583 }, { 0x569F, 88586 }, { 0x56AA, 88589 }, { 0x56B5, 88592 }, { 0x56F9, 88595 }, { 0x56FA, 88598 }, { 0x5700, 88601 }, { 0x5703, 88604 }, { 0x570A, 88607 }, { 0x570C, 88610 }, { 0x5718, 88613 }, { 0x5741, 88616 }, { 0x5758, 88619 }, { 0x575E, 88622 }, { 0x5764, 88625 }, { 0x576F, 88628 }, { 0x5784, 88631 }, { 0x5787, 88634 }, { 0x5788, 88637 }, { 0x5789, 88640 }, { 0x578E, 88643 }, { 0x578F, 88646 }, { 0x5790, 88649 }, { 0x57A8, 88652 }, { 0x57AE, 88655 }, { 0x57B3, 88658 }, { 0x57B7, 88661 }, { 0x57C2, 88664 }, { 0x57C5, 88667 }, { 0x57C9, 88670 }, { 0x57E2, 88673 }, { 0x580B, 88679 }, { 0x5813, 88682 }, { 0x6F62, 88685 }, { 0x2164, 88687 }, { 0x1E2F, 88689 }, { 0x6C81, 88690 }, { 0x6D22, 88691 }, { 0x6D33, 88694 }, { 0x4CAF, 88698 }, { 0x4CB0, 88701 }, { 0x4CAA, 88704 }, { 0x4CA9, 88707 }, { 0x4CA8, 88710 }, { 0x4CAB, 88713 }, { 0x4CA7, 88716 }, { 0x4CAE, 88719 }, { 0x4CAC, 88722 }, { 0x4CB2, 88724 }, { 0x4CB7, 88727 }, { 0x4CB3, 88730 }, { 0x4CB6, 88733 }, { 0x4CB5, 88736 }, { 0x4CBA, 88739 }, { 0x4CB1, 88742 }, { 0x4CB9, 88745 }, { 0x4CB8, 88748 }, { 0x4CB4, 88751 }, { 0x4CA3, 88754 }, { 0x4C9C, 88758 }, { 0x4CA5, 88762 }, { 0x4C9E, 88766 }, { 0x4C9B, 88770 }, { 0x4CA4, 88774 }, { 0x4CA6, 88778 }, { 0x4C9D, 88782 }, { 0x4C9F, 88786 }, { 0x4CA2, 88790 }, { 0x4CA0, 88795 }, { 0x4CA1, 88800 }, { 0x4CAD, 88805 }, { 0x4C6D, 88808 }, { 0x4C76, 88811 }, { 0x4C6F, 88814 }, { 0x4C78, 88817 }, { 0x4C71, 88820 }, { 0x4C6E, 88823 }, { 0x4C77, 88826 }, { 0x4C79, 88829 }, { 0x4C90, 88832 }, { 0x4C7F, 88835 }, { 0x4C8B, 88838 }, { 0x4C7C, 88841 }, { 0x4C9A, 88844 }, { 0x4C70, 88847 }, { 0x4C81, 88850 }, { 0x4C7A, 88853 }, { 0x4C95, 88856 }, { 0x4C92, 88859 }, { 0x4C8D, 88862 }, { 0x4C8E, 88865 }, { 0x4C94, 88868 }, { 0x4C99, 88871 }, { 0x4C89, 88874 }, { 0x4C72, 88877 }, { 0x4C96, 88880 }, { 0x4C93, 88883 }, { 0x4C91, 88886 }, { 0x4C80, 88889 }, { 0x4C86, 88892 }, { 0x4C8C, 88895 }, { 0x4C7D, 88898 }, { 0x4C82, 88901 }, { 0x4C7B, 88904 }, { 0x4C7E, 88907 }, { 0x4C88, 88910 }, { 0x4C83, 88913 }, { 0x4C8F, 88916 }, { 0x4C97, 88919 }, { 0x4C98, 88922 }, { 0x4C8A, 88925 }, { 0x4C84, 88928 }, { 0x4C87, 88931 }, { 0x4C85, 88934 }, { 0x4C75, 88937 }, { 0x4C73, 88941 }, { 0x4C74, 88945 }, { 0x4CBB, 88949 }, { 0x4CC0, 88952 }, { 0x4CC4, 88955 }, { 0x4CBC, 88958 }, { 0x4CBF, 88961 }, { 0x4CBE, 88964 }, { 0x4CC3, 88967 }, { 0x4CC2, 88970 }, { 0x4CC8, 88973 }, { 0x4CC7, 88976 }, { 0x4CC1, 88979 }, { 0x4CC9, 88982 }, { 0x4CBD, 88985 }, { 0x4CCB, 88988 }, { 0x4CCC, 88991 }, { 0x4CC6, 88994 }, { 0x4CC5, 88997 }, { 0x4CCA, 89000 }, { 0x4CCD, 89003 }, { 0x6FEF, 89007 }, { 0x6CEC, 89008 }, { 0x217D, 89009 }, { 0x6DF7, 89011 }, { 0x71C9, 89012 }, { 0x5F9E, 89013 }, { 0x5F7D, 89017 }, { 0x5FF4, 89022 }, { 0x5FB5, 89026 }, { 0x5F89, 89031 }, { 0x5FAF, 89036 }, { 0x5FE8, 89040 }, { 0x5F9F, 89046 }, { 0x5FEC, 89050 }, { 0x5FEB, 89055 }, { 0x600B, 89060 }, { 0x600D, 89065 }, { 0x6009, 89070 }, { 0x6010, 89076 }, { 0x600E, 89082 }, { 0x600C, 89087 }, { 0x600A, 89092 }, { 0x600F, 89097 }, { 0x5FA2, 89102 }, { 0x5F7C, 89108 }, { 0x6006, 89113 }, { 0x6037, 89117 }, { 0x6038, 89122 }, { 0x6039, 89127 }, { 0x5FF5, 89132 }, { 0x5FEF, 89136 }, { 0x5F9D, 89141 }, { 0x5FB7, 89145 }, { 0x5F73, 89150 }, { 0x5F72, 89155 }, { 0x5F6F, 89160 }, { 0x5F94, 89164 }, { 0x5FD5, 89168 }, { 0x5F9C, 89172 }, { 0x5FE7, 89176 }, { 0x5F83, 89181 }, { 0x5F88, 89185 }, { 0x5FD9, 89189 }, { 0x5F70, 89194 }, { 0x603F, 89198 }, { 0x6041, 89205 }, { 0x6042, 89212 }, { 0x6040, 89219 }, { 0x603D, 89226 }, { 0x603E, 89231 }, { 0x5FCF, 89236 }, { 0x5FE3, 89241 }, { 0x6034, 89246 }, { 0x603A, 89253 }, { 0x602B, 89260 }, { 0x6036, 89266 }, { 0x6032, 89271 }, { 0x6033, 89278 }, { 0x6034, 89285 }, { 0x6035, 89292 }, { 0x602D, 89299 }, { 0x5FA3, 89306 }, { 0x6028, 89311 }, { 0x602C, 89318 }, { 0x602E, 89324 }, { 0x6031, 89330 }, { 0x6030, 89337 }, { 0x6029, 89344 }, { 0x602F, 89350 }, { 0x602A, 89356 }, { 0x603B, 89362 }, { 0x6047, 89368 }, { 0x6048, 89373 }, { 0x5FFE, 89378 }, { 0x6064, 89384 }, { 0x5F85, 89390 }, { 0x6000, 89395 }, { 0x5FFF, 89401 }, { 0x601B, 89407 }, { 0x5FA6, 89413 }, { 0x5F93, 89418 }, { 0x5FEE, 89422 }, { 0x6063, 89427 }, { 0x5FFA, 89432 }, { 0x5FF9, 89438 }, { 0x5FFB, 89444 }, { 0x5FFD, 89450 }, { 0x5FFC, 89456 }, { 0x5FC6, 89462 }, { 0x5FB6, 89467 }, { 0x5F84, 89472 }, { 0x5FCA, 89477 }, { 0x5F8F, 89481 }, { 0x5FC8, 89486 }, { 0x5F95, 89491 }, { 0x5F86, 89496 }, { 0x5F98, 89500 }, { 0x5FD8, 89504 }, { 0x6057, 89509 }, { 0x5F7E, 89513 }, { 0x5FF6, 89517 }, { 0x5FC7, 89521 }, { 0x5F75, 89526 }, { 0x5F74, 89531 }, { 0x6043, 89536 }, { 0x6045, 89543 }, { 0x6046, 89550 }, { 0x6044, 89557 }, { 0x603C, 89564 }, { 0x5FBF, 89569 }, { 0x605B, 89573 }, { 0x605A, 89578 }, { 0x605C, 89583 }, { 0x605E, 89588 }, { 0x6058, 89593 }, { 0x605D, 89598 }, { 0x6059, 89603 }, { 0x5FC5, 89608 }, { 0x6008, 89612 }, { 0x5FC4, 89616 }, { 0x6025, 89620 }, { 0x5FAE, 89627 }, { 0x5FBE, 89631 }, { 0x6062, 89637 }, { 0x6060, 89643 }, { 0x5F8A, 89649 }, { 0x5FF8, 89654 }, { 0x5FF2, 89658 }, { 0x5FF1, 89663 }, { 0x5FF0, 89668 }, { 0x5FD0, 89673 }, { 0x5FCC, 89677 }, { 0x5FB0, 89681 }, { 0x5FB8, 89685 }, { 0x5FAB, 89689 }, { 0x5FED, 89693 }, { 0x5F8E, 89697 }, { 0x5FD4, 89702 }, { 0x5F9A, 89707 }, { 0x5F99, 89713 }, { 0x5F82, 89718 }, { 0x5FA0, 89722 }, { 0x5F96, 89726 }, { 0x5F90, 89730 }, { 0x5FC2, 89735 }, { 0x5FF3, 89739 }, { 0x5F91, 89744 }, { 0x5F92, 89749 }, { 0x5F87, 89753 }, { 0x5FD6, 89757 }, { 0x5FAA, 89762 }, { 0x6049, 89767 }, { 0x604A, 89773 }, { 0x604B, 89779 }, { 0x604C, 89784 }, { 0x6001, 89789 }, { 0x6004, 89793 }, { 0x6003, 89799 }, { 0x6002, 89806 }, { 0x6055, 89813 }, { 0x5FD7, 89818 }, { 0x6026, 89822 }, { 0x5F76, 89826 }, { 0x5FA9, 89830 }, { 0x5FB1, 89834 }, { 0x5FB9, 89839 }, { 0x5F7B, 89843 }, { 0x6012, 89847 }, { 0x6014, 89854 }, { 0x6020, 89861 }, { 0x6011, 89867 }, { 0x6015, 89873 }, { 0x6019, 89879 }, { 0x601A, 89885 }, { 0x6022, 89891 }, { 0x6013, 89898 }, { 0x6017, 89904 }, { 0x6018, 89910 }, { 0x6016, 89917 }, { 0x6021, 89922 }, { 0x5F8D, 89928 }, { 0x5FA7, 89932 }, { 0x5FBC, 89936 }, { 0x5F8C, 89941 }, { 0x6051, 89945 }, { 0x6052, 89950 }, { 0x6053, 89956 }, { 0x6054, 89962 }, { 0x604D, 89968 }, { 0x604E, 89973 }, { 0x604F, 89979 }, { 0x6050, 89985 }, { 0x5FF7, 89991 }, { 0x5FD2, 89995 }, { 0x5FB2, 90000 }, { 0x5FA5, 90005 }, { 0x6056, 90010 }, { 0x5FEA, 90015 }, { 0x601F, 90019 }, { 0x601E, 90024 }, { 0x601D, 90029 }, { 0x5FA4, 90034 }, { 0x5FE9, 90038 }, { 0x5F7F, 90042 }, { 0x5FBD, 90046 }, { 0x6061, 90052 }, { 0x605F, 90058 }, { 0x5F8B, 90064 }, { 0x5FA1, 90069 }, { 0x5FE4, 90073 }, { 0x5F9B, 90078 }, { 0x5FA8, 90083 }, { 0x5FC9, 90087 }, { 0x5F77, 90092 }, { 0x6005, 90096 }, { 0x5F79, 90100 }, { 0x5F7A, 90104 }, { 0x5FCB, 90109 }, { 0x601C, 90113 }, { 0x5FC1, 90119 }, { 0x5F80, 90125 }, { 0x5FC0, 90129 }, { 0x5F81, 90134 }, { 0x5FD3, 90139 }, { 0x6023, 90143 }, { 0x6024, 90149 }, { 0x6007, 90155 }, { 0x6027, 90159 }, { 0x5FCE, 90163 }, { 0x5FAC, 90168 }, { 0x5F78, 90173 }, { 0x5FCD, 90177 }, { 0x5FAD, 90182 }, { 0x5F71, 90187 }, { 0x5FE5, 90191 }, { 0x5FE6, 90196 }, { 0x5F97, 90201 }, { 0x5FB4, 90205 }, { 0x5FB3, 90209 }, { 0x5FE2, 90213 }, { 0x5FE1, 90217 }, { 0x5FDC, 90221 }, { 0x5FDF, 90225 }, { 0x5FD1, 90229 }, { 0x5FBB, 90233 }, { 0x5FC3, 90237 }, { 0x5FBA, 90241 }, { 0x5FDB, 90245 }, { 0x5FE0, 90249 }, { 0x5FDA, 90253 }, { 0x5FDD, 90257 }, { 0x5FDE, 90261 }, { 0x2932, 90265 }, { 0x21AB, 90266 }, { 0x4248, 90267 }, { 0x4266, 90271 }, { 0x4244, 90275 }, { 0x425C, 90279 }, { 0x4245, 90283 }, { 0x4256, 90287 }, { 0x424D, 90291 }, { 0x425E, 90295 }, { 0x4247, 90299 }, { 0x424A, 90303 }, { 0x4268, 90307 }, { 0x4246, 90311 }, { 0x4250, 90315 }, { 0x4272, 90319 }, { 0x4258, 90323 }, { 0x4277, 90327 }, { 0x4252, 90331 }, { 0x4260, 90335 }, { 0x426B, 90339 }, { 0x4261, 90343 }, { 0x425B, 90347 }, { 0x426D, 90351 }, { 0x4251, 90355 }, { 0x424C, 90359 }, { 0x424F, 90363 }, { 0x4274, 90367 }, { 0x426A, 90371 }, { 0x425D, 90375 }, { 0x4273, 90379 }, { 0x425F, 90383 }, { 0x4255, 90387 }, { 0x4269, 90391 }, { 0x425A, 90395 }, { 0x4253, 90399 }, { 0x4265, 90403 }, { 0x4257, 90407 }, { 0x4259, 90411 }, { 0x4262, 90415 }, { 0x4276, 90419 }, { 0x426E, 90423 }, { 0x4264, 90427 }, { 0x4271, 90431 }, { 0x4270, 90435 }, { 0x4267, 90439 }, { 0x426F, 90443 }, { 0x4254, 90447 }, { 0x4275, 90451 }, { 0x424E, 90455 }, { 0x4249, 90459 }, { 0x424B, 90463 }, { 0x4263, 90467 }, { 0x426C, 90471 }, { 0x4278, 90475 }, { 0x1BF4, 90479 }, { 0x6CFC, 90481 }, { 0x6CA6, 90483 }, { 0x6CBF, 90485 }, { 0x6D14, 90487 }, { 0x6C41, 90488 }, { 0x6EBC, 90491 }, { 0x6D16, 90494 }, { 0x6E06, 90496 }, { 0x1D40, 90497 }, { 0x1D44, 90501 }, { 0x6F13, 90505 }, { 0x249B, 90511 }, { 0x234D, 90515 }, { 0x1DBB, 90519 }, { 0x1DBA, 90522 }, { 0x6E3E, 90524 }, { 0x6E3C, 90531 }, { 0x6E3D, 90538 }, { 0x26C8, 90549 }, { 0x6DE0, 90554 }, { 0x02FC, 90556 }, { 0x0312, 90559 }, { 0x19A0, 90562 }, { 0x19C5, 90565 }, { 0x02DC, 90569 }, { 0x19A1, 90573 }, { 0x19A2, 90576 }, { 0x02C6, 90579 }, { 0x0317, 90582 }, { 0x02E2, 90586 }, { 0x02F1, 90589 }, { 0x0309, 90592 }, { 0x40D6, 90596 }, { 0x40D7, 90601 }, { 0x40DA, 90606 }, { 0x40D8, 90611 }, { 0x40D9, 90616 }, { 0x1721, 90621 }, { 0x02DD, 90624 }, { 0x1C78, 90628 }, { 0x02C8, 90632 }, { 0x02DA, 90635 }, { 0x0310, 90637 }, { 0x02DB, 90642 }, { 0x02D7, 90647 }, { 0x02D9, 90651 }, { 0x0308, 90655 }, { 0x1C72, 90659 }, { 0x1C8A, 90663 }, { 0x1C7D, 90667 }, { 0x030C, 90672 }, { 0x1C6C, 90677 }, { 0x19C9, 90681 }, { 0x0313, 90685 }, { 0x1C87, 90689 }, { 0x02F5, 90694 }, { 0x02F7, 90698 }, { 0x1C6E, 90702 }, { 0x1723, 90707 }, { 0x02DE, 90711 }, { 0x02C9, 90715 }, { 0x02E4, 90718 }, { 0x1C74, 90721 }, { 0x1C85, 90724 }, { 0x0300, 90728 }, { 0x02C0, 90732 }, { 0x02D6, 90735 }, { 0x02C5, 90739 }, { 0x02ED, 90741 }, { 0x02CB, 90744 }, { 0x02EB, 90746 }, { 0x02D2, 90749 }, { 0x02D4, 90752 }, { 0x02E5, 90756 }, { 0x02FF, 90759 }, { 0x02BF, 90763 }, { 0x02D5, 90766 }, { 0x0302, 90770 }, { 0x618E, 90773 }, { 0x6190, 90777 }, { 0x618F, 90781 }, { 0x0303, 90785 }, { 0x0301, 90789 }, { 0x0304, 90792 }, { 0x0322, 90795 }, { 0x19C2, 90800 }, { 0x19B8, 90807 }, { 0x0327, 90812 }, { 0x19A7, 90817 }, { 0x0328, 90823 }, { 0x0323, 90828 }, { 0x19BB, 90833 }, { 0x19AA, 90838 }, { 0x0329, 90843 }, { 0x0324, 90848 }, { 0x19AC, 90853 }, { 0x19AD, 90858 }, { 0x19BC, 90863 }, { 0x032A, 90872 }, { 0x19B0, 90877 }, { 0x0325, 90882 }, { 0x19BD, 90887 }, { 0x19C3, 90896 }, { 0x19BE, 90903 }, { 0x032B, 90908 }, { 0x199A, 90913 }, { 0x19B3, 90919 }, { 0x19B4, 90925 }, { 0x032C, 90930 }, { 0x0326, 90935 }, { 0x19C0, 90940 }, { 0x19C4, 90949 }, { 0x032D, 90956 }, { 0x19C1, 90961 }, { 0x032E, 90966 }, { 0x19B6, 90971 }, { 0x19A4, 90976 }, { 0x19A5, 90981 }, { 0x19A6, 90986 }, { 0x19BF, 90991 }, { 0x19A9, 90996 }, { 0x19B9, 91001 }, { 0x19B5, 91006 }, { 0x19B7, 91012 }, { 0x19BA, 91017 }, { 0x19A8, 91022 }, { 0x19A3, 91028 }, { 0x19AB, 91036 }, { 0x19AE, 91042 }, { 0x19AF, 91048 }, { 0x19B1, 91054 }, { 0x19B2, 91060 }, { 0x1725, 91066 }, { 0x02DF, 91071 }, { 0x0316, 91075 }, { 0x02F8, 91080 }, { 0x02D8, 91085 }, { 0x1C73, 91089 }, { 0x1C8B, 91093 }, { 0x1C6D, 91097 }, { 0x0315, 91101 }, { 0x19CA, 91108 }, { 0x030F, 91115 }, { 0x0314, 91119 }, { 0x02F4, 91123 }, { 0x02F6, 91127 }, { 0x1C6F, 91131 }, { 0x1992, 91136 }, { 0x1C77, 91139 }, { 0x02C2, 91143 }, { 0x3CBD, 91145 }, { 0x02EF, 91150 }, { 0x3CBE, 91153 }, { 0x02F3, 91158 }, { 0x030B, 91161 }, { 0x19C8, 91166 }, { 0x0305, 91171 }, { 0x02E9, 91174 }, { 0x1991, 91177 }, { 0x1990, 91181 }, { 0x02F2, 91185 }, { 0x1724, 91189 }, { 0x0319, 91194 }, { 0x02CA, 91198 }, { 0x031C, 91202 }, { 0x031B, 91205 }, { 0x02CE, 91209 }, { 0x031F, 91213 }, { 0x3CB6, 91216 }, { 0x3CB7, 91221 }, { 0x031D, 91226 }, { 0x031E, 91229 }, { 0x0320, 91233 }, { 0x19C7, 91237 }, { 0x02FE, 91242 }, { 0x02CD, 91245 }, { 0x0307, 91250 }, { 0x1C82, 91255 }, { 0x199D, 91260 }, { 0x0321, 91264 }, { 0x1728, 91269 }, { 0x0306, 91273 }, { 0x02C3, 91277 }, { 0x3CB8, 91279 }, { 0x3CBF, 91283 }, { 0x02F0, 91288 }, { 0x3CB9, 91291 }, { 0x3CC0, 91295 }, { 0x02E7, 91300 }, { 0x199E, 91302 }, { 0x02FA, 91305 }, { 0x1726, 91308 }, { 0x1720, 91313 }, { 0x1C84, 91316 }, { 0x02D1, 91319 }, { 0x1722, 91323 }, { 0x031A, 91327 }, { 0x199F, 91330 }, { 0x1C83, 91333 }, { 0x02E6, 91336 }, { 0x171C, 91338 }, { 0x0311, 91342 }, { 0x49F4, 91344 }, { 0x49F9, 91348 }, { 0x49F5, 91352 }, { 0x49F8, 91356 }, { 0x49F7, 91360 }, { 0x49F3, 91364 }, { 0x49F6, 91368 }, { 0x49FA, 91372 }, { 0x49FB, 91376 }, { 0x49FC, 91380 }, { 0x49FE, 91384 }, { 0x49FD, 91388 }, { 0x1C81, 91392 }, { 0x02FB, 91396 }, { 0x030D, 91399 }, { 0x1C8C, 91403 }, { 0x0318, 91406 }, { 0x34FE, 91409 }, { 0x043B, 91414 }, { 0x043C, 91418 }, { 0x0439, 91422 }, { 0x3CC2, 91425 }, { 0x3CC3, 91430 }, { 0x34FD, 91435 }, { 0x350A, 91438 }, { 0x28E9, 91441 }, { 0x3503, 91445 }, { 0x28DD, 91449 }, { 0x3505, 91453 }, { 0x28D3, 91457 }, { 0x28D6, 91461 }, { 0x352C, 91465 }, { 0x28DA, 91469 }, { 0x28DB, 91473 }, { 0x28DC, 91477 }, { 0x28DF, 91481 }, { 0x28E0, 91485 }, { 0x28E2, 91489 }, { 0x28EA, 91493 }, { 0x28D9, 91497 }, { 0x28DE, 91501 }, { 0x28E1, 91505 }, { 0x28D4, 91509 }, { 0x3504, 91513 }, { 0x28EE, 91517 }, { 0x28D8, 91521 }, { 0x28F1, 91525 }, { 0x28E4, 91530 }, { 0x28D5, 91534 }, { 0x28E5, 91538 }, { 0x28E3, 91542 }, { 0x28ED, 91546 }, { 0x28D7, 91550 }, { 0x28E7, 91554 }, { 0x3506, 91558 }, { 0x3508, 91563 }, { 0x3507, 91568 }, { 0x28EB, 91572 }, { 0x28E8, 91576 }, { 0x3509, 91580 }, { 0x28E6, 91584 }, { 0x28F0, 91588 }, { 0x28EF, 91593 }, { 0x352D, 91598 }, { 0x28F2, 91603 }, { 0x28EC, 91609 }, { 0x3502, 91614 }, { 0x34FF, 91619 }, { 0x043E, 91624 }, { 0x350B, 91629 }, { 0x043F, 91632 }, { 0x043D, 91636 }, { 0x3500, 91639 }, { 0x043A, 91644 }, { 0x19C6, 91647 }, { 0x030E, 91650 }, { 0x171E, 91653 }, { 0x02D0, 91655 }, { 0x02EE, 91658 }, { 0x02F9, 91662 }, { 0x02EA, 91666 }, { 0x3CB4, 91671 }, { 0x3CBB, 91675 }, { 0x3CB5, 91680 }, { 0x3CBC, 91684 }, { 0x02C4, 91689 }, { 0x02D3, 91691 }, { 0x02CC, 91695 }, { 0x02E8, 91699 }, { 0x02FD, 91703 }, { 0x1C75, 91706 }, { 0x1C71, 91710 }, { 0x02C7, 91714 }, { 0x02E3, 91716 }, { 0x171F, 91719 }, { 0x1C79, 91722 }, { 0x1C7C, 91725 }, { 0x1C7F, 91729 }, { 0x1C7E, 91732 }, { 0x1C7A, 91735 }, { 0x1C80, 91738 }, { 0x1C7B, 91743 }, { 0x1C86, 91746 }, { 0x1C89, 91750 }, { 0x02E1, 91756 }, { 0x02C1, 91760 }, { 0x02EC, 91763 }, { 0x3CBA, 91767 }, { 0x3CC1, 91770 }, { 0x3717, 91774 }, { 0x3707, 91778 }, { 0x370C, 91782 }, { 0x3708, 91786 }, { 0x370B, 91790 }, { 0x370A, 91794 }, { 0x370F, 91798 }, { 0x3706, 91802 }, { 0x370E, 91806 }, { 0x370D, 91810 }, { 0x3709, 91814 }, { 0x3710, 91818 }, { 0x3711, 91822 }, { 0x3712, 91826 }, { 0x3713, 91830 }, { 0x3714, 91834 }, { 0x3715, 91838 }, { 0x3716, 91842 }, { 0x6889, 91846 }, { 0x68A0, 91850 }, { 0x689E, 91854 }, { 0x687F, 91858 }, { 0x68A2, 91862 }, { 0x688F, 91867 }, { 0x689A, 91871 }, { 0x6898, 91875 }, { 0x6894, 91879 }, { 0x6880, 91883 }, { 0x68A4, 91887 }, { 0x6896, 91891 }, { 0x6887, 91895 }, { 0x688B, 91899 }, { 0x6897, 91903 }, { 0x6881, 91907 }, { 0x689D, 91911 }, { 0x689C, 91915 }, { 0x689B, 91919 }, { 0x6883, 91923 }, { 0x6895, 91927 }, { 0x688E, 91931 }, { 0x6891, 91935 }, { 0x6892, 91939 }, { 0x689F, 91943 }, { 0x6884, 91948 }, { 0x6899, 91952 }, { 0x688A, 91956 }, { 0x6890, 91960 }, { 0x6893, 91964 }, { 0x6886, 91968 }, { 0x6882, 91972 }, { 0x6888, 91976 }, { 0x68A3, 91981 }, { 0x68A1, 91987 }, { 0x688C, 91993 }, { 0x688D, 91997 }, { 0x6885, 92001 }, { 0x030A, 92005 }, { 0x1C88, 92008 }, { 0x1993, 92014 }, { 0x02CF, 92017 }, { 0x02E0, 92019 }, { 0x1727, 92023 }, { 0x1729, 92026 }, { 0x172A, 92029 }, { 0x1997, 92032 }, { 0x199B, 92034 }, { 0x1995, 92036 }, { 0x1994, 92038 }, { 0x199C, 92040 }, { 0x1996, 92042 }, { 0x1C76, 92044 }, { 0x1C70, 92048 }, { 0x171D, 92052 }, { 0x1999, 92054 }, { 0x1998, 92056 }, { 0x2B23, 92058 }, { 0x2B24, 92063 }, { 0x25C7, 92068 }, { 0x0068, 92072 }, { 0x6D45, 92074 }, { 0x71AF, 92075 }, { 0x4D12, 92076 }, { 0x4D13, 92079 }, { 0x4D16, 92084 }, { 0x4D14, 92089 }, { 0x4D17, 92094 }, { 0x4D1A, 92099 }, { 0x4D15, 92104 }, { 0x4D19, 92110 }, { 0x4D18, 92115 }, { 0x4D9C, 92121 }, { 0x4D9E, 92124 }, { 0x4D9D, 92132 }, { 0x4E51, 92137 }, { 0x4E52, 92140 }, { 0x501D, 92144 }, { 0x50AB, 92147 }, { 0x501F, 92151 }, { 0x501E, 92156 }, { 0x5022, 92160 }, { 0x5020, 92170 }, { 0x5021, 92181 }, { 0x4D1B, 92189 }, { 0x4D1C, 92192 }, { 0x4D27, 92195 }, { 0x4D26, 92199 }, { 0x4D21, 92208 }, { 0x4D1F, 92213 }, { 0x4D22, 92218 }, { 0x5082, 92224 }, { 0x5120, 92229 }, { 0x4D1D, 92235 }, { 0x4D1E, 92240 }, { 0x4D20, 92246 }, { 0x4D23, 92252 }, { 0x5121, 92257 }, { 0x4D24, 92262 }, { 0x4D25, 92267 }, { 0x4D2E, 92272 }, { 0x5122, 92275 }, { 0x4D2F, 92280 }, { 0x4D30, 92283 }, { 0x4D31, 92288 }, { 0x4D32, 92295 }, { 0x4D33, 92298 }, { 0x4D36, 92303 }, { 0x4D38, 92308 }, { 0x4D39, 92313 }, { 0x4D3A, 92318 }, { 0x4D34, 92323 }, { 0x4D35, 92328 }, { 0x4D37, 92333 }, { 0x4D3F, 92338 }, { 0x4D40, 92341 }, { 0x4D43, 92346 }, { 0x4D42, 92352 }, { 0x4D41, 92361 }, { 0x4D52, 92366 }, { 0x4D5B, 92369 }, { 0x4D5C, 92372 }, { 0x4D5D, 92377 }, { 0x4D5E, 92382 }, { 0x4D5F, 92388 }, { 0x4D60, 92391 }, { 0x4D61, 92397 }, { 0x5127, 92403 }, { 0x4D62, 92410 }, { 0x4D67, 92415 }, { 0x5128, 92418 }, { 0x4D84, 92423 }, { 0x4D8C, 92426 }, { 0x4D8E, 92429 }, { 0x4D8D, 92433 }, { 0x4D8F, 92438 }, { 0x4D9F, 92442 }, { 0x4DA0, 92445 }, { 0x4DA5, 92454 }, { 0x4DA2, 92459 }, { 0x4DA1, 92464 }, { 0x5149, 92469 }, { 0x514A, 92474 }, { 0x4DA3, 92479 }, { 0x4DA4, 92484 }, { 0x4DA8, 92489 }, { 0x4DA9, 92492 }, { 0x4DAC, 92495 }, { 0x4DAA, 92500 }, { 0x4DAB, 92505 }, { 0x4DAF, 92511 }, { 0x4DAD, 92515 }, { 0x4DAE, 92520 }, { 0x4DC7, 92525 }, { 0x4DC8, 92528 }, { 0x4E12, 92532 }, { 0x4E13, 92535 }, { 0x4E14, 92540 }, { 0x4E15, 92545 }, { 0x4E28, 92550 }, { 0x4E29, 92553 }, { 0x4E3B, 92558 }, { 0x4E3D, 92561 }, { 0x4E3C, 92565 }, { 0x516E, 92569 }, { 0x4E3F, 92574 }, { 0x4E48, 92577 }, { 0x4E40, 92582 }, { 0x516F, 92587 }, { 0x4E42, 92596 }, { 0x4E44, 92601 }, { 0x4E45, 92606 }, { 0x4E46, 92611 }, { 0x4E47, 92616 }, { 0x4E41, 92621 }, { 0x4E43, 92626 }, { 0x4E49, 92631 }, { 0x4E53, 92634 }, { 0x4E57, 92637 }, { 0x4E5D, 92640 }, { 0x4E5E, 92643 }, { 0x4E60, 92649 }, { 0x4E61, 92652 }, { 0x4E64, 92657 }, { 0x4E62, 92661 }, { 0x4E63, 92666 }, { 0x4E66, 92671 }, { 0x4E67, 92674 }, { 0x4E69, 92677 }, { 0x4E6A, 92680 }, { 0x4E99, 92685 }, { 0x5172, 92690 }, { 0x4E6B, 92697 }, { 0x4E6C, 92702 }, { 0x4E71, 92709 }, { 0x5170, 92714 }, { 0x4E74, 92719 }, { 0x4E79, 92724 }, { 0x4E7D, 92729 }, { 0x5094, 92734 }, { 0x4E80, 92741 }, { 0x5171, 92746 }, { 0x4E82, 92751 }, { 0x4E84, 92756 }, { 0x4E85, 92761 }, { 0x4E86, 92766 }, { 0x4E87, 92771 }, { 0x4E88, 92778 }, { 0x4E89, 92785 }, { 0x4E8A, 92792 }, { 0x4E8B, 92797 }, { 0x4E8C, 92804 }, { 0x5096, 92809 }, { 0x4E8E, 92814 }, { 0x4E8F, 92819 }, { 0x4E90, 92824 }, { 0x5098, 92829 }, { 0x4E9A, 92834 }, { 0x4E9B, 92839 }, { 0x5173, 92844 }, { 0x4E9E, 92849 }, { 0x4E6E, 92854 }, { 0x4E70, 92859 }, { 0x4E75, 92864 }, { 0x4E77, 92869 }, { 0x4E78, 92874 }, { 0x5093, 92883 }, { 0x4E7F, 92888 }, { 0x4E81, 92893 }, { 0x4E83, 92898 }, { 0x5095, 92903 }, { 0x4E8D, 92908 }, { 0x4E91, 92913 }, { 0x4E92, 92918 }, { 0x4E93, 92923 }, { 0x4E95, 92928 }, { 0x4E96, 92933 }, { 0x4E98, 92938 }, { 0x5099, 92943 }, { 0x4E9D, 92948 }, { 0x4E6D, 92953 }, { 0x5091, 92958 }, { 0x4E73, 92963 }, { 0x4E76, 92968 }, { 0x4E7A, 92974 }, { 0x5092, 92979 }, { 0x4E7B, 92984 }, { 0x4E7C, 92991 }, { 0x4E7E, 92998 }, { 0x4E94, 93003 }, { 0x5097, 93008 }, { 0x4E9C, 93013 }, { 0x5090, 93020 }, { 0x4E6F, 93025 }, { 0x4E72, 93030 }, { 0x4E97, 93035 }, { 0x4EB2, 93040 }, { 0x4EB4, 93043 }, { 0x4EB5, 93048 }, { 0x4EB3, 93053 }, { 0x4EBC, 93058 }, { 0x4EBD, 93061 }, { 0x4EC9, 93073 }, { 0x4F09, 93076 }, { 0x4F0D, 93079 }, { 0x4F0E, 93082 }, { 0x4F32, 93087 }, { 0x4F34, 93090 }, { 0x4F33, 93094 }, { 0x4F3A, 93099 }, { 0x4F3C, 93102 }, { 0x51BF, 93105 }, { 0x4F3E, 93110 }, { 0x4F3F, 93113 }, { 0x4F50, 93118 }, { 0x4F5A, 93121 }, { 0x4F5B, 93124 }, { 0x4F5C, 93129 }, { 0x4F5D, 93134 }, { 0x4F5E, 93138 }, { 0x4F5F, 93141 }, { 0x4F73, 93146 }, { 0x4F8C, 93149 }, { 0x4F91, 93152 }, { 0x4F92, 93155 }, { 0x4F96, 93160 }, { 0x4F97, 93165 }, { 0x4F99, 93170 }, { 0x4F93, 93175 }, { 0x4F94, 93180 }, { 0x4F95, 93185 }, { 0x4F98, 93190 }, { 0x4F9A, 93195 }, { 0x4F9B, 93200 }, { 0x4FA1, 93205 }, { 0x4FA3, 93208 }, { 0x4FA4, 93211 }, { 0x4FA5, 93214 }, { 0x4FED, 93217 }, { 0x4FEE, 93220 }, { 0x51D8, 93224 }, { 0x4FF4, 93229 }, { 0x4FF5, 93232 }, { 0x4FFD, 93237 }, { 0x5001, 93240 }, { 0x4FFF, 93244 }, { 0x5000, 93249 }, { 0x4FFE, 93254 }, { 0x500E, 93258 }, { 0x500F, 93261 }, { 0x5010, 93265 }, { 0x5011, 93268 }, { 0x5017, 93272 }, { 0x5023, 93275 }, { 0x5024, 93278 }, { 0x5025, 93281 }, { 0x502B, 93284 }, { 0x5029, 93288 }, { 0x502A, 93297 }, { 0x5028, 93307 }, { 0x5027, 93312 }, { 0x5026, 93317 }, { 0x502C, 93321 }, { 0x502D, 93325 }, { 0x502F, 93331 }, { 0x5033, 93334 }, { 0x50AA, 93339 }, { 0x5031, 93344 }, { 0x5032, 93351 }, { 0x5030, 93356 }, { 0x5038, 93361 }, { 0x5039, 93364 }, { 0x503A, 93368 }, { 0x503C, 93371 }, { 0x503B, 93375 }, { 0x506F, 93380 }, { 0x5070, 93383 }, { 0x5071, 93387 }, { 0x5075, 93393 }, { 0x5076, 93396 }, { 0x507C, 93401 }, { 0x51E2, 93404 }, { 0x4D28, 93411 }, { 0x5083, 93414 }, { 0x4D2B, 93419 }, { 0x4D2A, 93426 }, { 0x4D2C, 93432 }, { 0x4D2D, 93437 }, { 0x4D29, 93442 }, { 0x4D4A, 93447 }, { 0x4D4C, 93450 }, { 0x4D4E, 93455 }, { 0x4D4F, 93462 }, { 0x4D4D, 93475 }, { 0x4D4B, 93487 }, { 0x4D53, 93492 }, { 0x5123, 93495 }, { 0x4D56, 93501 }, { 0x4D57, 93504 }, { 0x4D59, 93509 }, { 0x4D65, 93512 }, { 0x4D68, 93515 }, { 0x5129, 93518 }, { 0x4D69, 93523 }, { 0x4D6C, 93531 }, { 0x4D6D, 93537 }, { 0x4D6E, 93543 }, { 0x4D6F, 93551 }, { 0x4D72, 93557 }, { 0x4D73, 93563 }, { 0x4D74, 93569 }, { 0x4D76, 93577 }, { 0x4D77, 93583 }, { 0x4D78, 93589 }, { 0x4D7A, 93597 }, { 0x4D7C, 93603 }, { 0x4D7E, 93609 }, { 0x5085, 93617 }, { 0x4D71, 93625 }, { 0x4D75, 93631 }, { 0x4D79, 93637 }, { 0x4D7B, 93643 }, { 0x4D7F, 93651 }, { 0x4D6A, 93657 }, { 0x4D70, 93663 }, { 0x4D7D, 93669 }, { 0x4D6B, 93675 }, { 0x4D80, 93681 }, { 0x4D81, 93684 }, { 0x4D85, 93687 }, { 0x4D86, 93690 }, { 0x512B, 93693 }, { 0x512A, 93700 }, { 0x4D87, 93705 }, { 0x4D89, 93710 }, { 0x4D8A, 93713 }, { 0x4D90, 93720 }, { 0x5088, 93723 }, { 0x4D91, 93728 }, { 0x4D93, 93733 }, { 0x5133, 93736 }, { 0x5134, 93741 }, { 0x5137, 93746 }, { 0x5138, 93751 }, { 0x5144, 93756 }, { 0x5145, 93761 }, { 0x5146, 93766 }, { 0x5148, 93771 }, { 0x512E, 93777 }, { 0x512F, 93782 }, { 0x5130, 93789 }, { 0x5131, 93794 }, { 0x5139, 93799 }, { 0x513B, 93805 }, { 0x513F, 93810 }, { 0x5140, 93815 }, { 0x5141, 93822 }, { 0x5143, 93829 }, { 0x5147, 93834 }, { 0x5135, 93839 }, { 0x5136, 93845 }, { 0x5142, 93850 }, { 0x512D, 93855 }, { 0x5132, 93860 }, { 0x513A, 93865 }, { 0x513C, 93870 }, { 0x513D, 93875 }, { 0x513E, 93882 }, { 0x4D95, 93887 }, { 0x4D96, 93890 }, { 0x4DC9, 93893 }, { 0x4DFF, 93896 }, { 0x4DCA, 93901 }, { 0x4DCB, 93910 }, { 0x4DCC, 93917 }, { 0x4DFC, 93924 }, { 0x4DCE, 93929 }, { 0x508B, 93934 }, { 0x4DD5, 93943 }, { 0x4DD6, 93948 }, { 0x4DD9, 93953 }, { 0x4DDA, 93958 }, { 0x4DDB, 93965 }, { 0x4DDC, 93970 }, { 0x515B, 93978 }, { 0x4DDF, 93983 }, { 0x515E, 93988 }, { 0x4DE3, 93995 }, { 0x4DE6, 94004 }, { 0x4DEF, 94011 }, { 0x4DF0, 94016 }, { 0x4DF1, 94023 }, { 0x5164, 94028 }, { 0x5165, 94033 }, { 0x5166, 94040 }, { 0x4DF4, 94047 }, { 0x4DFD, 94052 }, { 0x4DFE, 94057 }, { 0x4DCD, 94064 }, { 0x4DCF, 94072 }, { 0x4DD1, 94077 }, { 0x4DD2, 94082 }, { 0x4DD3, 94089 }, { 0x4DD4, 94094 }, { 0x5157, 94101 }, { 0x4DD7, 94107 }, { 0x4DD8, 94114 }, { 0x5158, 94119 }, { 0x5159, 94127 }, { 0x4DDE, 94134 }, { 0x515C, 94139 }, { 0x515D, 94146 }, { 0x4DE0, 94153 }, { 0x4DE1, 94158 }, { 0x4DE4, 94165 }, { 0x4DE5, 94170 }, { 0x4DE8, 94177 }, { 0x4DE9, 94183 }, { 0x4DEA, 94192 }, { 0x4DEC, 94197 }, { 0x4DED, 94202 }, { 0x4DEE, 94209 }, { 0x5160, 94216 }, { 0x5161, 94221 }, { 0x5162, 94228 }, { 0x4DF2, 94233 }, { 0x4DF3, 94238 }, { 0x4DF5, 94245 }, { 0x4DF6, 94250 }, { 0x4DF7, 94255 }, { 0x4DF8, 94260 }, { 0x4DFA, 94267 }, { 0x508C, 94272 }, { 0x4DD0, 94277 }, { 0x515A, 94284 }, { 0x4DDD, 94289 }, { 0x4DE2, 94295 }, { 0x4DE7, 94302 }, { 0x5163, 94307 }, { 0x4DF9, 94312 }, { 0x5167, 94317 }, { 0x4DFB, 94322 }, { 0x5168, 94327 }, { 0x5156, 94332 }, { 0x4DEB, 94337 }, { 0x515F, 94342 }, { 0x4E02, 94349 }, { 0x4E03, 94352 }, { 0x4E04, 94360 }, { 0x4E05, 94363 }, { 0x4E07, 94372 }, { 0x4E08, 94375 }, { 0x4E0D, 94378 }, { 0x4E16, 94381 }, { 0x4E17, 94384 }, { 0x4E18, 94389 }, { 0x508E, 94394 }, { 0x4E2A, 94397 }, { 0x4E2F, 94400 }, { 0x516C, 94404 }, { 0x4E2B, 94410 }, { 0x4E2C, 94415 }, { 0x4E2D, 94423 }, { 0x4E2E, 94428 }, { 0x4E30, 94435 }, { 0x4E33, 94438 }, { 0x516D, 94444 }, { 0x4E31, 94451 }, { 0x4E32, 94458 }, { 0x4E34, 94463 }, { 0x4E35, 94466 }, { 0x4E36, 94469 }, { 0x4E37, 94474 }, { 0x4E3E, 94477 }, { 0x4E58, 94480 }, { 0x4E5A, 94483 }, { 0x4E59, 94487 }, { 0x4E5C, 94491 }, { 0x4E5B, 94495 }, { 0x4E5F, 94506 }, { 0x4E68, 94509 }, { 0x4E9F, 94512 }, { 0x4EA0, 94515 }, { 0x4EA1, 94520 }, { 0x4EA7, 94523 }, { 0x4EA8, 94526 }, { 0x4EA9, 94532 }, { 0x4EAA, 94535 }, { 0x4EAB, 94540 }, { 0x5081, 94545 }, { 0x4EB6, 94549 }, { 0x4EB7, 94552 }, { 0x4EBE, 94555 }, { 0x4EBF, 94558 }, { 0x4EC0, 94561 }, { 0x4EC1, 94566 }, { 0x4EC2, 94569 }, { 0x4EC3, 94572 }, { 0x4EC4, 94576 }, { 0x4EC5, 94579 }, { 0x4EC6, 94582 }, { 0x4F04, 94587 }, { 0x4F05, 94590 }, { 0x4F06, 94595 }, { 0x4F07, 94598 }, { 0x4F08, 94603 }, { 0x4F0A, 94610 }, { 0x4F0F, 94613 }, { 0x51B9, 94616 }, { 0x4F23, 94622 }, { 0x4F10, 94626 }, { 0x4F15, 94631 }, { 0x4F16, 94638 }, { 0x4F1A, 94643 }, { 0x4F1B, 94648 }, { 0x4F1D, 94655 }, { 0x4F1E, 94662 }, { 0x4F1F, 94667 }, { 0x4F20, 94672 }, { 0x4F11, 94679 }, { 0x51BB, 94684 }, { 0x51BC, 94689 }, { 0x51BD, 94694 }, { 0x509D, 94703 }, { 0x51BA, 94708 }, { 0x4F12, 94713 }, { 0x509C, 94718 }, { 0x4F13, 94725 }, { 0x4F14, 94731 }, { 0x4F17, 94737 }, { 0x4F18, 94742 }, { 0x4F19, 94747 }, { 0x4F21, 94754 }, { 0x51BE, 94761 }, { 0x4F22, 94766 }, { 0x4F1C, 94771 }, { 0x4F27, 94776 }, { 0x509B, 94780 }, { 0x4F26, 94786 }, { 0x4F24, 94790 }, { 0x4F25, 94795 }, { 0x4F28, 94800 }, { 0x4F2D, 94803 }, { 0x4F2E, 94806 }, { 0x4F2F, 94809 }, { 0x4F30, 94812 }, { 0x4F31, 94817 }, { 0x4F35, 94825 }, { 0x4F36, 94828 }, { 0x4F37, 94831 }, { 0x4F3B, 94834 }, { 0x4F3D, 94837 }, { 0x4F40, 94840 }, { 0x4F41, 94843 }, { 0x4F51, 94847 }, { 0x50A0, 94850 }, { 0x4F58, 94853 }, { 0x4F57, 94856 }, { 0x4F60, 94860 }, { 0x4F61, 94863 }, { 0x4F63, 94866 }, { 0x4F62, 94874 }, { 0x50A1, 94880 }, { 0x4F75, 94883 }, { 0x4F7C, 94886 }, { 0x4F7B, 94891 }, { 0x4F76, 94895 }, { 0x4F78, 94901 }, { 0x4F79, 94907 }, { 0x4F7A, 94918 }, { 0x4F77, 94924 }, { 0x4F7D, 94930 }, { 0x4F7E, 94935 }, { 0x4F8D, 94943 }, { 0x4F8E, 94946 }, { 0x4F8F, 94949 }, { 0x4FA2, 94952 }, { 0x4FA7, 94955 }, { 0x4FBA, 94958 }, { 0x51CD, 94962 }, { 0x4FB9, 94968 }, { 0x4FA8, 94973 }, { 0x4FA9, 94978 }, { 0x51CE, 94983 }, { 0x4FAB, 94988 }, { 0x4FAF, 94993 }, { 0x4FB4, 94998 }, { 0x4FB5, 95003 }, { 0x4FB6, 95008 }, { 0x4FB7, 95013 }, { 0x4FAA, 95018 }, { 0x50A8, 95023 }, { 0x4FAC, 95029 }, { 0x4FAD, 95034 }, { 0x4FAE, 95039 }, { 0x4FB0, 95044 }, { 0x4FB1, 95049 }, { 0x51CF, 95054 }, { 0x4FB3, 95061 }, { 0x4FB8, 95066 }, { 0x4FB2, 95071 }, { 0x51D0, 95076 }, { 0x4FA6, 95081 }, { 0x4FBB, 95085 }, { 0x4FBC, 95088 }, { 0x4FBE, 95094 }, { 0x4FBF, 95097 }, { 0x4FCC, 95100 }, { 0x4FCD, 95103 }, { 0x51D2, 95107 }, { 0x4FCE, 95112 }, { 0x4FCF, 95123 }, { 0x51D5, 95134 }, { 0x51D3, 95139 }, { 0x51D4, 95144 }, { 0x4FE9, 95149 }, { 0x4FEA, 95152 }, { 0x4FEF, 95158 }, { 0x4FF6, 95161 }, { 0x4FF9, 95164 }, { 0x4FFB, 95167 }, { 0x5002, 95170 }, { 0x5003, 95173 }, { 0x5004, 95184 }, { 0x5005, 95188 }, { 0x5006, 95191 }, { 0x500B, 95196 }, { 0x5007, 95201 }, { 0x5008, 95206 }, { 0x5009, 95211 }, { 0x500A, 95216 }, { 0x500D, 95221 }, { 0x50A9, 95224 }, { 0x5012, 95227 }, { 0x5013, 95230 }, { 0x5015, 95233 }, { 0x5016, 95238 }, { 0x5014, 95249 }, { 0x5019, 95254 }, { 0x501A, 95257 }, { 0x51DA, 95260 }, { 0x51DB, 95266 }, { 0x501B, 95272 }, { 0x501C, 95275 }, { 0x503D, 95283 }, { 0x503E, 95286 }, { 0x503F, 95293 }, { 0x5040, 95300 }, { 0x5041, 95305 }, { 0x5043, 95310 }, { 0x5045, 95315 }, { 0x5044, 95322 }, { 0x51DD, 95329 }, { 0x5042, 95334 }, { 0x51DC, 95339 }, { 0x5046, 95343 }, { 0x5047, 95346 }, { 0x5049, 95349 }, { 0x504A, 95352 }, { 0x505E, 95357 }, { 0x504E, 95364 }, { 0x5052, 95369 }, { 0x5053, 95374 }, { 0x5055, 95379 }, { 0x5057, 95384 }, { 0x505A, 95389 }, { 0x505D, 95394 }, { 0x505F, 95399 }, { 0x504C, 95404 }, { 0x504D, 95409 }, { 0x504F, 95414 }, { 0x5051, 95419 }, { 0x5054, 95424 }, { 0x5056, 95429 }, { 0x51E0, 95434 }, { 0x5058, 95439 }, { 0x5059, 95444 }, { 0x505B, 95449 }, { 0x5050, 95454 }, { 0x505C, 95460 }, { 0x51DE, 95465 }, { 0x5060, 95470 }, { 0x504B, 95475 }, { 0x51DF, 95480 }, { 0x5063, 95485 }, { 0x5064, 95488 }, { 0x5065, 95493 }, { 0x5066, 95498 }, { 0x5067, 95503 }, { 0x506C, 95508 }, { 0x506D, 95511 }, { 0x506E, 95516 }, { 0x51E1, 95519 }, { 0x5072, 95522 }, { 0x5074, 95525 }, { 0x5077, 95528 }, { 0x5078, 95531 }, { 0x5079, 95534 }, { 0x507A, 95539 }, { 0x507D, 95542 }, { 0x507E, 95545 }, { 0x51E3, 95550 }, { 0x5080, 95557 }, { 0x4D3B, 95560 }, { 0x4D3D, 95563 }, { 0x5084, 95566 }, { 0x4D3E, 95571 }, { 0x4D45, 95576 }, { 0x4D46, 95579 }, { 0x4D47, 95582 }, { 0x4D50, 95587 }, { 0x4D54, 95590 }, { 0x4D66, 95593 }, { 0x5086, 95596 }, { 0x4D88, 95599 }, { 0x512C, 95602 }, { 0x4D8B, 95607 }, { 0x5087, 95610 }, { 0x4D92, 95615 }, { 0x4D97, 95618 }, { 0x4D98, 95621 }, { 0x4D99, 95625 }, { 0x4D9A, 95630 }, { 0x4D9B, 95633 }, { 0x4DA6, 95636 }, { 0x4DA7, 95639 }, { 0x4DB0, 95642 }, { 0x4DB2, 95645 }, { 0x514C, 95648 }, { 0x4DB3, 95653 }, { 0x4DB4, 95656 }, { 0x4DB5, 95661 }, { 0x4DB6, 95668 }, { 0x4DB7, 95677 }, { 0x4DBB, 95682 }, { 0x4DBC, 95687 }, { 0x4DC1, 95693 }, { 0x4DC3, 95698 }, { 0x4DC4, 95703 }, { 0x5155, 95708 }, { 0x4DC5, 95713 }, { 0x4DC6, 95718 }, { 0x4DB8, 95723 }, { 0x5089, 95728 }, { 0x4DBD, 95733 }, { 0x4DC0, 95739 }, { 0x4DC2, 95744 }, { 0x508A, 95751 }, { 0x4DB9, 95756 }, { 0x4DBA, 95762 }, { 0x4DBE, 95769 }, { 0x4DBF, 95774 }, { 0x514E, 95780 }, { 0x5150, 95786 }, { 0x5152, 95792 }, { 0x5154, 95798 }, { 0x514D, 95804 }, { 0x514F, 95810 }, { 0x5151, 95817 }, { 0x5153, 95823 }, { 0x4E00, 95829 }, { 0x5169, 95832 }, { 0x4E01, 95838 }, { 0x4E09, 95843 }, { 0x4E0B, 95846 }, { 0x4E0A, 95851 }, { 0x4E0C, 95855 }, { 0x4E0E, 95860 }, { 0x508D, 95863 }, { 0x4E1A, 95866 }, { 0x4E1B, 95869 }, { 0x4E1C, 95873 }, { 0x4E1D, 95876 }, { 0x4E20, 95883 }, { 0x4E21, 95890 }, { 0x4E1F, 95895 }, { 0x4E1E, 95900 }, { 0x4E23, 95906 }, { 0x4E27, 95909 }, { 0x4E25, 95913 }, { 0x516B, 95918 }, { 0x4E26, 95925 }, { 0x4E24, 95930 }, { 0x4E38, 95935 }, { 0x4E4A, 95938 }, { 0x4E4B, 95941 }, { 0x4E4F, 95946 }, { 0x4E4C, 95951 }, { 0x4E4E, 95956 }, { 0x4E4D, 95961 }, { 0x4E50, 95966 }, { 0x508F, 95969 }, { 0x4E54, 95972 }, { 0x4E55, 95975 }, { 0x4E56, 95981 }, { 0x4E65, 95987 }, { 0x4EA2, 95990 }, { 0x4EA3, 95993 }, { 0x4EA4, 95996 }, { 0x4EA5, 95999 }, { 0x4EA6, 96002 }, { 0x4EAC, 96007 }, { 0x4EAD, 96010 }, { 0x4EB9, 96013 }, { 0x4F0C, 96016 }, { 0x4F38, 96019 }, { 0x509E, 96022 }, { 0x4F44, 96025 }, { 0x4F48, 96028 }, { 0x4F49, 96033 }, { 0x51C0, 96042 }, { 0x51C1, 96049 }, { 0x4F45, 96056 }, { 0x4F47, 96061 }, { 0x4F46, 96066 }, { 0x4F4A, 96071 }, { 0x4F52, 96076 }, { 0x4F54, 96079 }, { 0x4F53, 96085 }, { 0x4F55, 96089 }, { 0x4F59, 96094 }, { 0x50A2, 96097 }, { 0x4F74, 96100 }, { 0x4FE7, 96103 }, { 0x4FE6, 96111 }, { 0x50A5, 96115 }, { 0x50A7, 96121 }, { 0x4FC0, 96124 }, { 0x4FC1, 96127 }, { 0x4FC7, 96132 }, { 0x4FC8, 96137 }, { 0x4FC4, 96144 }, { 0x4FC2, 96149 }, { 0x4FC6, 96154 }, { 0x4FC3, 96159 }, { 0x4FC5, 96164 }, { 0x4FC9, 96169 }, { 0x51D1, 96172 }, { 0x4FD1, 96176 }, { 0x4FD5, 96179 }, { 0x4FD6, 96182 }, { 0x4FD7, 96187 }, { 0x4FD8, 96192 }, { 0x4FD9, 96195 }, { 0x4FDA, 96200 }, { 0x4FDC, 96205 }, { 0x4FDD, 96210 }, { 0x4FDE, 96215 }, { 0x4FDF, 96220 }, { 0x4FE1, 96226 }, { 0x4FE2, 96231 }, { 0x4FE3, 96236 }, { 0x4FDB, 96241 }, { 0x4FE0, 96246 }, { 0x4FE5, 96251 }, { 0x4FE7, 96254 }, { 0x4FE6, 96262 }, { 0x4FEB, 96266 }, { 0x51D7, 96269 }, { 0x51D6, 96276 }, { 0x4FF0, 96283 }, { 0x4FF1, 96286 }, { 0x4FF2, 96292 }, { 0x4FF7, 96295 }, { 0x4FFC, 96298 }, { 0x500C, 96301 }, { 0x51D9, 96304 }, { 0x5018, 96309 }, { 0x502E, 96312 }, { 0x5035, 96315 }, { 0x5037, 96318 }, { 0x5036, 96323 }, { 0x5048, 96328 }, { 0x5069, 96331 }, { 0x5068, 96334 }, { 0x5073, 96337 }, { 0x507B, 96340 }, { 0x4D3C, 96343 }, { 0x4D44, 96346 }, { 0x4D48, 96349 }, { 0x4D49, 96352 }, { 0x4D58, 96355 }, { 0x4D5A, 96358 }, { 0x4D63, 96361 }, { 0x4D64, 96364 }, { 0x4D82, 96369 }, { 0x4D83, 96372 }, { 0x4D94, 96375 }, { 0x4DB1, 96378 }, { 0x514B, 96381 }, { 0x4E06, 96385 }, { 0x4E19, 96388 }, { 0x4E22, 96391 }, { 0x4E39, 96394 }, { 0x4EB1, 96397 }, { 0x4EB8, 96400 }, { 0x4ECA, 96403 }, { 0x4ECB, 96406 }, { 0x4ECC, 96411 }, { 0x4ECD, 96420 }, { 0x4ECE, 96427 }, { 0x4EF7, 96434 }, { 0x4EF8, 96439 }, { 0x4EF9, 96446 }, { 0x4ECF, 96455 }, { 0x4ED0, 96460 }, { 0x4ED3, 96465 }, { 0x4ED5, 96470 }, { 0x4ED6, 96475 }, { 0x509A, 96480 }, { 0x4EDA, 96485 }, { 0x4EDC, 96490 }, { 0x4EDE, 96497 }, { 0x4EDF, 96502 }, { 0x4EE0, 96509 }, { 0x4EE1, 96516 }, { 0x4EE8, 96521 }, { 0x4EEA, 96526 }, { 0x4EEB, 96531 }, { 0x4EED, 96538 }, { 0x4EF6, 96543 }, { 0x4EFA, 96554 }, { 0x4EFB, 96561 }, { 0x5174, 96566 }, { 0x4ED1, 96573 }, { 0x4ED2, 96580 }, { 0x4ED4, 96585 }, { 0x4ED7, 96590 }, { 0x4ED8, 96595 }, { 0x4ED9, 96600 }, { 0x4EDB, 96607 }, { 0x4EDD, 96612 }, { 0x4EE2, 96618 }, { 0x4EE3, 96623 }, { 0x4EE4, 96628 }, { 0x4EE5, 96633 }, { 0x4EE9, 96642 }, { 0x4EEE, 96647 }, { 0x4EF3, 96654 }, { 0x4EF4, 96659 }, { 0x4EFC, 96664 }, { 0x4EE7, 96669 }, { 0x4EEC, 96674 }, { 0x4EF1, 96679 }, { 0x4EF2, 96684 }, { 0x4EF5, 96691 }, { 0x4EE6, 96696 }, { 0x4EEF, 96701 }, { 0x4EF0, 96710 }, { 0x4EFD, 96718 }, { 0x4EFE, 96722 }, { 0x4F01, 96725 }, { 0x4F02, 96729 }, { 0x4EFF, 96737 }, { 0x4F00, 96742 }, { 0x4F29, 96749 }, { 0x4F2A, 96752 }, { 0x4F2C, 96757 }, { 0x4F2B, 96761 }, { 0x4F39, 96766 }, { 0x4F4B, 96769 }, { 0x4F4F, 96772 }, { 0x4F4C, 96776 }, { 0x4F4D, 96781 }, { 0x4F4E, 96788 }, { 0x509F, 96793 }, { 0x4F56, 96798 }, { 0x4F72, 96801 }, { 0x4F7F, 96804 }, { 0x4F81, 96807 }, { 0x4F86, 96813 }, { 0x4F87, 96819 }, { 0x4F89, 96825 }, { 0x4F82, 96831 }, { 0x4F83, 96837 }, { 0x4F84, 96843 }, { 0x4F85, 96850 }, { 0x4F88, 96856 }, { 0x4F80, 96862 }, { 0x4F8A, 96868 }, { 0x4F8B, 96874 }, { 0x4F90, 96881 }, { 0x50A6, 96884 }, { 0x4F9C, 96888 }, { 0x4F9E, 96891 }, { 0x4F9F, 96896 }, { 0x4F9D, 96901 }, { 0x4FA0, 96906 }, { 0x4FCA, 96911 }, { 0x4FCB, 96914 }, { 0x4FD0, 96917 }, { 0x4FD2, 96920 }, { 0x4FE8, 96923 }, { 0x4FF3, 96926 }, { 0x4FF8, 96929 }, { 0x5034, 96932 }, { 0x5061, 96935 }, { 0x5062, 96938 }, { 0x506B, 96943 }, { 0x507F, 96946 }, { 0x4D51, 96949 }, { 0x4D55, 96952 }, { 0x5125, 96955 }, { 0x5126, 96960 }, { 0x5124, 96965 }, { 0x4E0F, 96970 }, { 0x4E3A, 96973 }, { 0x4EAE, 96976 }, { 0x4EB0, 96979 }, { 0x4EAF, 96991 }, { 0x4EBA, 97001 }, { 0x4EBB, 97004 }, { 0x4EC7, 97009 }, { 0x4EC8, 97012 }, { 0x4F03, 97015 }, { 0x4F0B, 97018 }, { 0x4F42, 97021 }, { 0x4F43, 97024 }, { 0x4F64, 97027 }, { 0x51CA, 97030 }, { 0x51CB, 97035 }, { 0x4F65, 97042 }, { 0x50A4, 97047 }, { 0x51C5, 97052 }, { 0x4F69, 97057 }, { 0x4F6A, 97065 }, { 0x4F70, 97070 }, { 0x4F66, 97077 }, { 0x4F67, 97082 }, { 0x50A3, 97089 }, { 0x51C2, 97094 }, { 0x4F68, 97100 }, { 0x51C4, 97105 }, { 0x4F6B, 97110 }, { 0x51C9, 97115 }, { 0x4F6C, 97122 }, { 0x4F6D, 97127 }, { 0x4F6E, 97135 }, { 0x4F6F, 97142 }, { 0x4F71, 97151 }, { 0x51C3, 97156 }, { 0x51C8, 97161 }, { 0x51C6, 97166 }, { 0x51CC, 97171 }, { 0x51C7, 97176 }, { 0x4FBD, 97181 }, { 0x4FD3, 97184 }, { 0x4FE4, 97187 }, { 0x4FEC, 97190 }, { 0x4FFA, 97193 }, { 0x506A, 97196 }, { 0x4E10, 97199 }, { 0x516A, 97202 }, { 0x4E11, 97207 }, { 0x5175, 97212 }, { 0x5176, 97215 }, { 0x5177, 97218 }, { 0x5178, 97221 }, { 0x5179, 97224 }, { 0x517A, 97227 }, { 0x517B, 97230 }, { 0x517C, 97233 }, { 0x517D, 97239 }, { 0x517E, 97242 }, { 0x517F, 97247 }, { 0x5180, 97250 }, { 0x5181, 97253 }, { 0x5182, 97256 }, { 0x5183, 97259 }, { 0x5184, 97262 }, { 0x5185, 97265 }, { 0x5186, 97268 }, { 0x5187, 97271 }, { 0x5188, 97274 }, { 0x5189, 97277 }, { 0x518A, 97280 }, { 0x518B, 97283 }, { 0x518C, 97286 }, { 0x518D, 97289 }, { 0x518E, 97292 }, { 0x518F, 97295 }, { 0x5190, 97298 }, { 0x5191, 97301 }, { 0x5192, 97304 }, { 0x5196, 97309 }, { 0x5193, 97316 }, { 0x5194, 97321 }, { 0x5195, 97328 }, { 0x5197, 97337 }, { 0x5198, 97340 }, { 0x5199, 97343 }, { 0x519A, 97346 }, { 0x519B, 97349 }, { 0x519C, 97352 }, { 0x519D, 97355 }, { 0x519E, 97358 }, { 0x519F, 97361 }, { 0x51A0, 97364 }, { 0x51A1, 97367 }, { 0x51A6, 97370 }, { 0x51A8, 97375 }, { 0x51A9, 97380 }, { 0x51AA, 97385 }, { 0x51A2, 97390 }, { 0x51A3, 97395 }, { 0x51A5, 97400 }, { 0x51A7, 97405 }, { 0x51A4, 97410 }, { 0x51AB, 97417 }, { 0x51AC, 97422 }, { 0x51AD, 97425 }, { 0x51AF, 97428 }, { 0x51B2, 97433 }, { 0x51B5, 97438 }, { 0x51AE, 97443 }, { 0x51B0, 97448 }, { 0x51B1, 97453 }, { 0x51B3, 97459 }, { 0x51B4, 97468 }, { 0x51B6, 97475 }, { 0x51B7, 97480 }, { 0x51B8, 97483 }, { 0x4FD4, 97486 }, { 0x510D, 97489 }, { 0x510E, 97496 }, { 0x50FB, 97503 }, { 0x50E0, 97508 }, { 0x5110, 97513 }, { 0x5104, 97519 }, { 0x50C1, 97524 }, { 0x50CA, 97529 }, { 0x50D8, 97534 }, { 0x5106, 97539 }, { 0x5109, 97545 }, { 0x510B, 97553 }, { 0x510C, 97559 }, { 0x510F, 97565 }, { 0x50BD, 97571 }, { 0x5117, 97576 }, { 0x50B0, 97583 }, { 0x50FA, 97588 }, { 0x50B7, 97594 }, { 0x50C6, 97599 }, { 0x50D4, 97604 }, { 0x50EC, 97609 }, { 0x50AC, 97616 }, { 0x50F6, 97621 }, { 0x50FC, 97627 }, { 0x50E1, 97632 }, { 0x5105, 97637 }, { 0x50C2, 97642 }, { 0x50CB, 97647 }, { 0x50CF, 97652 }, { 0x50D9, 97657 }, { 0x5107, 97662 }, { 0x510A, 97668 }, { 0x50BC, 97676 }, { 0x5116, 97681 }, { 0x50AF, 97688 }, { 0x50F9, 97693 }, { 0x5100, 97699 }, { 0x5101, 97704 }, { 0x50E5, 97711 }, { 0x50B6, 97716 }, { 0x50C5, 97721 }, { 0x50CE, 97726 }, { 0x50D3, 97731 }, { 0x50DD, 97736 }, { 0x5108, 97741 }, { 0x50BB, 97747 }, { 0x5115, 97752 }, { 0x50AE, 97759 }, { 0x50F8, 97764 }, { 0x50FE, 97770 }, { 0x50FF, 97775 }, { 0x50E4, 97782 }, { 0x50B5, 97787 }, { 0x50C4, 97792 }, { 0x50CD, 97797 }, { 0x50D2, 97802 }, { 0x50DC, 97807 }, { 0x50E8, 97812 }, { 0x50EA, 97819 }, { 0x50EB, 97827 }, { 0x50E9, 97835 }, { 0x50C0, 97842 }, { 0x511A, 97847 }, { 0x50B3, 97854 }, { 0x50BA, 97859 }, { 0x50C9, 97864 }, { 0x50D7, 97869 }, { 0x50F2, 97874 }, { 0x50F5, 97881 }, { 0x50F3, 97889 }, { 0x50F4, 97896 }, { 0x50BF, 97903 }, { 0x5119, 97908 }, { 0x50B2, 97915 }, { 0x50B9, 97920 }, { 0x50C8, 97925 }, { 0x50D6, 97930 }, { 0x50F0, 97935 }, { 0x50F1, 97942 }, { 0x50BE, 97949 }, { 0x5118, 97954 }, { 0x50B1, 97961 }, { 0x50B8, 97966 }, { 0x50C7, 97971 }, { 0x50D5, 97976 }, { 0x50EE, 97981 }, { 0x50EF, 97989 }, { 0x50ED, 97997 }, { 0x50DF, 98004 }, { 0x50DE, 98012 }, { 0x50AD, 98020 }, { 0x50F7, 98025 }, { 0x50FD, 98031 }, { 0x50E2, 98036 }, { 0x50E3, 98041 }, { 0x50B4, 98048 }, { 0x50C3, 98053 }, { 0x50CC, 98058 }, { 0x50D0, 98063 }, { 0x50D1, 98068 }, { 0x50DA, 98075 }, { 0x50DB, 98080 }, { 0x50E6, 98087 }, { 0x50E7, 98094 }, { 0x5111, 98101 }, { 0x5112, 98107 }, { 0x5114, 98113 }, { 0x5113, 98118 }, { 0x5103, 98123 }, { 0x5102, 98127 }, { 0x511B, 98131 }, { 0x511D, 98138 }, { 0x511E, 98143 }, { 0x511F, 98148 }, { 0x511C, 98153 }, { 0x6C6E, 98158 }, { 0x1F53, 98160 }, { 0x1F51, 98166 }, { 0x1F4B, 98174 }, { 0x1F4E, 98182 }, { 0x1F52, 98190 }, { 0x1F50, 98196 }, { 0x1F4A, 98204 }, { 0x1F4D, 98212 }, { 0x1F54, 98220 }, { 0x1F47, 98227 }, { 0x1F4F, 98234 }, { 0x1F55, 98240 }, { 0x1F48, 98247 }, { 0x1F49, 98254 }, { 0x1F4C, 98260 }, { 0x0067, 98266 }, { 0x1EBA, 98267 }, { 0x1D2A, 98269 }, { 0x1D1C, 98273 }, { 0x246D, 98275 }, { 0x1D30, 98279 }, { 0x1D3B, 98283 }, { 0x1D3C, 98288 }, { 0x70F6, 98293 }, { 0x70EE, 98299 }, { 0x70FA, 98305 }, { 0x1D3E, 98311 }, { 0x1D68, 98316 }, { 0x70F2, 98321 }, { 0x716C, 98327 }, { 0x2462, 98332 }, { 0x70FE, 98337 }, { 0x1D7E, 98342 }, { 0x2661, 98348 }, { 0x26E3, 98351 }, { 0x712E, 98356 }, { 0x712A, 98359 }, { 0x1D72, 98363 }, { 0x7168, 98366 }, { 0x2907, 98372 }, { 0x1D6C, 98374 }, { 0x1D5C, 98377 }, { 0x1D53, 98380 }, { 0x6FAA, 98383 }, { 0x2465, 98385 }, { 0x1D38, 98388 }, { 0x24B3, 98391 }, { 0x24BB, 98398 }, { 0x24C9, 98405 }, { 0x24BF, 98416 }, { 0x24AF, 98427 }, { 0x24B7, 98434 }, { 0x1D4C, 98441 }, { 0x1D4B, 98446 }, { 0x7122, 98451 }, { 0x7164, 98454 }, { 0x234B, 98457 }, { 0x7126, 98460 }, { 0x7132, 98463 }, { 0x2727, 98466 }, { 0x711E, 98472 }, { 0x26BD, 98475 }, { 0x26CD, 98478 }, { 0x7112, 98483 }, { 0x26F6, 98489 }, { 0x26F7, 98496 }, { 0x711A, 98503 }, { 0x7116, 98510 }, { 0x26D5, 98516 }, { 0x710E, 98523 }, { 0x710A, 98529 }, { 0x26DB, 98535 }, { 0x26C7, 98543 }, { 0x26DF, 98547 }, { 0x26A7, 98551 }, { 0x6D65, 98555 }, { 0x2901, 98557 }, { 0x1CBB, 98559 }, { 0x1DE2, 98561 }, { 0x6C6D, 98562 }, { 0x70D0, 98564 }, { 0x70CA, 98569 }, { 0x70BD, 98574 }, { 0x709F, 98578 }, { 0x70A9, 98582 }, { 0x70C4, 98586 }, { 0x1CC8, 98589 }, { 0x6CC1, 98591 }, { 0x3DC9, 98592 }, { 0x3E60, 98595 }, { 0x3E64, 98598 }, { 0x3E63, 98601 }, { 0x3E5E, 98604 }, { 0x3D98, 98607 }, { 0x3DE5, 98610 }, { 0x3DE9, 98614 }, { 0x3DC5, 98618 }, { 0x3D92, 98622 }, { 0x3D95, 98625 }, { 0x3DA4, 98628 }, { 0x3D96, 98630 }, { 0x3D9B, 98632 }, { 0x3DA0, 98635 }, { 0x3D9C, 98638 }, { 0x3D9F, 98641 }, { 0x3D9E, 98644 }, { 0x3DA3, 98647 }, { 0x3D9A, 98650 }, { 0x3DA2, 98653 }, { 0x3DA1, 98656 }, { 0x3D9D, 98659 }, { 0x3DCA, 98662 }, { 0x3DCB, 98665 }, { 0x3DCC, 98670 }, { 0x3DCD, 98675 }, { 0x3DCE, 98680 }, { 0x3DCF, 98685 }, { 0x3DD0, 98690 }, { 0x3DD1, 98695 }, { 0x3DD2, 98700 }, { 0x3DD3, 98705 }, { 0x3DD4, 98710 }, { 0x3DD5, 98715 }, { 0x3DD6, 98720 }, { 0x3DD7, 98725 }, { 0x3DD8, 98730 }, { 0x3DD9, 98735 }, { 0x3DDA, 98740 }, { 0x3DDB, 98745 }, { 0x3DDC, 98750 }, { 0x3DDD, 98755 }, { 0x3DDE, 98760 }, { 0x3DDF, 98765 }, { 0x3DE0, 98770 }, { 0x3DE1, 98775 }, { 0x3DE2, 98780 }, { 0x3DE3, 98785 }, { 0x3DE4, 98790 }, { 0x3DAB, 98795 }, { 0x3DAC, 98800 }, { 0x3DAD, 98805 }, { 0x3DAE, 98810 }, { 0x3DAF, 98815 }, { 0x3DB0, 98820 }, { 0x3DB1, 98825 }, { 0x3DB2, 98830 }, { 0x3DB3, 98835 }, { 0x3DB4, 98840 }, { 0x3DB5, 98845 }, { 0x3DB6, 98850 }, { 0x3DB7, 98855 }, { 0x3DB8, 98860 }, { 0x3DB9, 98865 }, { 0x3DBA, 98870 }, { 0x3DBB, 98875 }, { 0x3DBC, 98880 }, { 0x3DBD, 98885 }, { 0x3DBE, 98890 }, { 0x3DBF, 98895 }, { 0x3DC0, 98900 }, { 0x3DC1, 98905 }, { 0x3DC2, 98910 }, { 0x3DC3, 98915 }, { 0x3DC4, 98920 }, { 0x3E5F, 98925 }, { 0x3DE7, 98928 }, { 0x3DEA, 98932 }, { 0x3DC7, 98936 }, { 0x3D93, 98940 }, { 0x3DE8, 98943 }, { 0x3E62, 98945 }, { 0x3D8E, 98948 }, { 0x3DA7, 98951 }, { 0x3E61, 98954 }, { 0x3D8D, 98956 }, { 0x3D8F, 98959 }, { 0x3DC6, 98962 }, { 0x3D99, 98965 }, { 0x3D94, 98967 }, { 0x3DA9, 98969 }, { 0x3DE6, 98972 }, { 0x3D90, 98975 }, { 0x3DA6, 98977 }, { 0x3D8C, 98980 }, { 0x3DA5, 98983 }, { 0x3D91, 98985 }, { 0x3DC8, 98987 }, { 0x3DAA, 98990 }, { 0x3D8B, 98993 }, { 0x3DA8, 98996 }, { 0x3D97, 98999 }, { 0x1DC3, 99001 }, { 0x6F67, 99003 }, { 0x6DBD, 99005 }, { 0x3DEC, 99006 }, { 0x3E6A, 99010 }, { 0x3E65, 99013 }, { 0x3DED, 99017 }, { 0x3E6B, 99021 }, { 0x3E2A, 99024 }, { 0x3E49, 99027 }, { 0x3E4E, 99031 }, { 0x3E5D, 99035 }, { 0x3E51, 99039 }, { 0x3E56, 99043 }, { 0x3E4A, 99047 }, { 0x3E4D, 99051 }, { 0x3E5B, 99055 }, { 0x3E54, 99059 }, { 0x3E52, 99063 }, { 0x3E58, 99067 }, { 0x3E59, 99071 }, { 0x3E4B, 99075 }, { 0x3E50, 99079 }, { 0x3E5C, 99083 }, { 0x3E55, 99087 }, { 0x3E5A, 99091 }, { 0x3E53, 99095 }, { 0x3E57, 99099 }, { 0x3E4C, 99103 }, { 0x3E4F, 99107 }, { 0x3E3F, 99111 }, { 0x3E42, 99115 }, { 0x3E48, 99119 }, { 0x3E41, 99123 }, { 0x3E3B, 99127 }, { 0x3E2E, 99131 }, { 0x3E3C, 99135 }, { 0x3E33, 99139 }, { 0x3E2B, 99143 }, { 0x3E31, 99147 }, { 0x3E44, 99151 }, { 0x3E45, 99155 }, { 0x3E47, 99159 }, { 0x3E46, 99163 }, { 0x3E40, 99167 }, { 0x3E3E, 99171 }, { 0x3E37, 99175 }, { 0x3E43, 99179 }, { 0x3E3D, 99183 }, { 0x3E2D, 99187 }, { 0x3E2F, 99191 }, { 0x3E30, 99195 }, { 0x3E3A, 99199 }, { 0x3E35, 99203 }, { 0x3E36, 99207 }, { 0x3E2C, 99211 }, { 0x3E32, 99215 }, { 0x3E34, 99219 }, { 0x3E39, 99223 }, { 0x3E38, 99227 }, { 0x3E67, 99231 }, { 0x3DFB, 99234 }, { 0x3DFE, 99238 }, { 0x3DFC, 99242 }, { 0x3E27, 99246 }, { 0x3DFF, 99250 }, { 0x3DFD, 99254 }, { 0x3E14, 99258 }, { 0x3E17, 99262 }, { 0x3E15, 99266 }, { 0x3E18, 99270 }, { 0x3E16, 99274 }, { 0x3E00, 99278 }, { 0x3E03, 99282 }, { 0x3E01, 99286 }, { 0x3E04, 99290 }, { 0x3E02, 99294 }, { 0x3E19, 99298 }, { 0x3E1C, 99302 }, { 0x3E1A, 99306 }, { 0x3E1D, 99310 }, { 0x3E1B, 99314 }, { 0x3E0F, 99318 }, { 0x3E12, 99322 }, { 0x3E10, 99326 }, { 0x3E13, 99330 }, { 0x3E11, 99334 }, { 0x3E21, 99338 }, { 0x3E24, 99342 }, { 0x3E22, 99346 }, { 0x3E25, 99350 }, { 0x3E23, 99354 }, { 0x3E05, 99358 }, { 0x3E08, 99362 }, { 0x3E06, 99366 }, { 0x3E09, 99370 }, { 0x3E07, 99374 }, { 0x3E0A, 99378 }, { 0x3E0D, 99382 }, { 0x3E0B, 99386 }, { 0x3E0E, 99390 }, { 0x3E0C, 99394 }, { 0x3E26, 99398 }, { 0x3DF0, 99402 }, { 0x3E1E, 99406 }, { 0x3E20, 99410 }, { 0x3E1F, 99414 }, { 0x3DF1, 99418 }, { 0x3DF4, 99423 }, { 0x3DF2, 99428 }, { 0x3DF5, 99433 }, { 0x3DF3, 99438 }, { 0x3DF9, 99443 }, { 0x3DF6, 99448 }, { 0x3DF8, 99453 }, { 0x3DF7, 99458 }, { 0x3DEF, 99463 }, { 0x3E28, 99467 }, { 0x3E29, 99472 }, { 0x3E69, 99477 }, { 0x3E66, 99480 }, { 0x3E68, 99483 }, { 0x3DEB, 99486 }, { 0x3DEE, 99490 }, { 0x3DFA, 99493 }, { 0x6C8F, 99498 }, { 0x718C, 99499 }, { 0x6CE2, 99500 }, { 0x2256, 99501 }, { 0x1E42, 99504 }, { 0x1EA4, 99507 }, { 0x1F7C, 99508 }, { 0x1DEA, 99512 }, { 0x253F, 99514 }, { 0x25C1, 99519 }, { 0x253B, 99523 }, { 0x1D8F, 99525 }, { 0x1F09, 99526 }, { 0x1C18, 99528 }, { 0x1C16, 99530 }, { 0x1C17, 99532 }, { 0x499E, 99534 }, { 0x499F, 99537 }, { 0x4994, 99540 }, { 0x49A1, 99543 }, { 0x49A6, 99546 }, { 0x49A2, 99549 }, { 0x49A5, 99552 }, { 0x49A4, 99555 }, { 0x49A9, 99558 }, { 0x49A0, 99561 }, { 0x49A8, 99564 }, { 0x49A7, 99567 }, { 0x49A3, 99570 }, { 0x499A, 99573 }, { 0x4996, 99577 }, { 0x499C, 99581 }, { 0x4998, 99585 }, { 0x4995, 99589 }, { 0x499B, 99593 }, { 0x499D, 99597 }, { 0x4997, 99601 }, { 0x4999, 99605 }, { 0x4965, 99609 }, { 0x496B, 99612 }, { 0x4967, 99615 }, { 0x496D, 99618 }, { 0x4969, 99621 }, { 0x4966, 99624 }, { 0x496C, 99627 }, { 0x496E, 99630 }, { 0x4989, 99633 }, { 0x4975, 99636 }, { 0x4984, 99639 }, { 0x4971, 99642 }, { 0x4993, 99645 }, { 0x4968, 99648 }, { 0x4977, 99651 }, { 0x496F, 99654 }, { 0x498F, 99657 }, { 0x498C, 99660 }, { 0x4986, 99663 }, { 0x4987, 99666 }, { 0x498E, 99669 }, { 0x4992, 99672 }, { 0x4982, 99675 }, { 0x496A, 99678 }, { 0x4990, 99681 }, { 0x498D, 99684 }, { 0x498A, 99687 }, { 0x498B, 99690 }, { 0x4976, 99693 }, { 0x497D, 99696 }, { 0x4985, 99699 }, { 0x4972, 99702 }, { 0x4973, 99705 }, { 0x4979, 99708 }, { 0x4978, 99711 }, { 0x4970, 99714 }, { 0x4974, 99717 }, { 0x4981, 99720 }, { 0x497A, 99723 }, { 0x4988, 99726 }, { 0x497F, 99729 }, { 0x4991, 99732 }, { 0x4983, 99735 }, { 0x497B, 99738 }, { 0x497E, 99741 }, { 0x4980, 99744 }, { 0x497C, 99747 }, { 0x71BC, 99750 }, { 0x2493, 99751 }, { 0x7173, 99755 }, { 0x1D27, 99760 }, { 0x1D25, 99764 }, { 0x1D19, 99767 }, { 0x1D6D, 99769 }, { 0x1D42, 99773 }, { 0x2477, 99782 }, { 0x1D2D, 99787 }, { 0x2479, 99791 }, { 0x1D4F, 99798 }, { 0x266B, 99803 }, { 0x266A, 99808 }, { 0x1D32, 99813 }, { 0x1D34, 99817 }, { 0x24A0, 99821 }, { 0x1D2B, 99826 }, { 0x2694, 99830 }, { 0x2693, 99838 }, { 0x70F3, 99845 }, { 0x70EB, 99851 }, { 0x70F7, 99857 }, { 0x2692, 99863 }, { 0x1D83, 99868 }, { 0x70EF, 99874 }, { 0x1D23, 99880 }, { 0x7169, 99884 }, { 0x1D80, 99889 }, { 0x70FB, 99894 }, { 0x249D, 99899 }, { 0x24CD, 99905 }, { 0x26A4, 99910 }, { 0x26A5, 99916 }, { 0x269C, 99922 }, { 0x2698, 99929 }, { 0x24D4, 99933 }, { 0x24D1, 99937 }, { 0x265F, 99941 }, { 0x26E0, 99944 }, { 0x712B, 99949 }, { 0x7127, 99952 }, { 0x1D6F, 99956 }, { 0x7165, 99959 }, { 0x1D69, 99965 }, { 0x2466, 99968 }, { 0x1D59, 99972 }, { 0x2460, 99975 }, { 0x1D56, 99980 }, { 0x245C, 99985 }, { 0x2475, 99991 }, { 0x1D50, 99994 }, { 0x6FA7, 99997 }, { 0x2468, 99999 }, { 0x1D63, 100003 }, { 0x1D54, 100006 }, { 0x24AC, 100011 }, { 0x24B4, 100018 }, { 0x24C4, 100025 }, { 0x24BC, 100033 }, { 0x24C0, 100044 }, { 0x24B0, 100055 }, { 0x24B8, 100062 }, { 0x24C1, 100069 }, { 0x24C5, 100080 }, { 0x1D45, 100088 }, { 0x1D46, 100093 }, { 0x711F, 100098 }, { 0x1D65, 100101 }, { 0x7161, 100104 }, { 0x269F, 100107 }, { 0x2473, 100110 }, { 0x7123, 100112 }, { 0x712F, 100115 }, { 0x2690, 100118 }, { 0x2695, 100123 }, { 0x2697, 100128 }, { 0x2696, 100137 }, { 0x268F, 100145 }, { 0x2724, 100152 }, { 0x268E, 100158 }, { 0x2691, 100164 }, { 0x7179, 100169 }, { 0x711B, 100174 }, { 0x7175, 100177 }, { 0x1D86, 100181 }, { 0x717B, 100184 }, { 0x7177, 100189 }, { 0x7171, 100193 }, { 0x26BA, 100197 }, { 0x26CA, 100200 }, { 0x26D8, 100205 }, { 0x710F, 100212 }, { 0x26FA, 100218 }, { 0x26FC, 100225 }, { 0x7117, 100232 }, { 0x7113, 100239 }, { 0x26D2, 100245 }, { 0x26D2, 100252 }, { 0x710B, 100259 }, { 0x7107, 100265 }, { 0x26C4, 100271 }, { 0x26DC, 100275 }, { 0x1DED, 100279 }, { 0x25D7, 100283 }, { 0x25DB, 100288 }, { 0x25DD, 100296 }, { 0x25D9, 100305 }, { 0x1DFB, 100313 }, { 0x25DF, 100317 }, { 0x1DFF, 100320 }, { 0x25E3, 100323 }, { 0x25E1, 100327 }, { 0x1DF1, 100333 }, { 0x1E6F, 100338 }, { 0x1DEF, 100343 }, { 0x001C, 100347 }, { 0x1E5F, 100349 }, { 0x25D3, 100352 }, { 0x25D5, 100356 }, { 0x25E7, 100361 }, { 0x25E9, 100366 }, { 0x25ED, 100371 }, { 0x24D0, 100380 }, { 0x25E5, 100384 }, { 0x25EB, 100390 }, { 0x1E63, 100396 }, { 0x2600, 100401 }, { 0x2602, 100405 }, { 0x2161, 100412 }, { 0x6F2D, 100413 }, { 0x6F2C, 100415 }, { 0x0B48, 100418 }, { 0x0B68, 100422 }, { 0x0B44, 100425 }, { 0x0B42, 100428 }, { 0x0AFF, 100431 }, { 0x0AFE, 100434 }, { 0x0B34, 100437 }, { 0x0AFD, 100440 }, { 0x0B56, 100443 }, { 0x0B5B, 100446 }, { 0x0B57, 100449 }, { 0x0B5A, 100452 }, { 0x0B59, 100455 }, { 0x0B5E, 100458 }, { 0x0B55, 100461 }, { 0x0B5D, 100464 }, { 0x0B5C, 100467 }, { 0x0B58, 100470 }, { 0x0B3C, 100473 }, { 0x0B36, 100477 }, { 0x0B3F, 100481 }, { 0x0B38, 100485 }, { 0x0B35, 100489 }, { 0x0B3E, 100493 }, { 0x0B41, 100497 }, { 0x0B3D, 100501 }, { 0x0B37, 100505 }, { 0x0B40, 100509 }, { 0x0B39, 100513 }, { 0x0B53, 100517 }, { 0x0B3A, 100522 }, { 0x0B54, 100527 }, { 0x0B3B, 100532 }, { 0x0B00, 100537 }, { 0x0B08, 100540 }, { 0x0B02, 100543 }, { 0x0B0B, 100546 }, { 0x0B04, 100549 }, { 0x0B01, 100552 }, { 0x0B0A, 100555 }, { 0x0B0D, 100558 }, { 0x0B25, 100561 }, { 0x0B13, 100564 }, { 0x0B1F, 100567 }, { 0x0B09, 100570 }, { 0x0B10, 100573 }, { 0x0B32, 100576 }, { 0x0B03, 100579 }, { 0x0B15, 100582 }, { 0x0B0E, 100585 }, { 0x0B2B, 100588 }, { 0x0B27, 100591 }, { 0x0B21, 100594 }, { 0x0B0C, 100597 }, { 0x0B23, 100600 }, { 0x0B29, 100603 }, { 0x0B31, 100606 }, { 0x0B1D, 100609 }, { 0x0B05, 100612 }, { 0x0B2E, 100615 }, { 0x0B28, 100618 }, { 0x0B26, 100621 }, { 0x0B14, 100624 }, { 0x0B1A, 100627 }, { 0x0B20, 100630 }, { 0x0B43, 100633 }, { 0x0B11, 100637 }, { 0x0B16, 100640 }, { 0x0B0F, 100643 }, { 0x0B2C, 100646 }, { 0x0B12, 100649 }, { 0x0B1C, 100652 }, { 0x0B17, 100655 }, { 0x0B24, 100658 }, { 0x0B2A, 100661 }, { 0x0B2F, 100664 }, { 0x0B30, 100667 }, { 0x0B1E, 100670 }, { 0x0B18, 100673 }, { 0x0B1B, 100676 }, { 0x0B2D, 100679 }, { 0x0B22, 100682 }, { 0x0B19, 100685 }, { 0x0B33, 100688 }, { 0x0B6E, 100691 }, { 0x0B6C, 100695 }, { 0x0B45, 100699 }, { 0x0B6A, 100703 }, { 0x0B46, 100707 }, { 0x0B6D, 100711 }, { 0x0B69, 100715 }, { 0x0B6B, 100719 }, { 0x0B47, 100723 }, { 0x0B50, 100727 }, { 0x0B07, 100731 }, { 0x0B06, 100735 }, { 0x0B52, 100739 }, { 0x0B51, 100743 }, { 0x0B60, 100747 }, { 0x0B61, 100751 }, { 0x0B5F, 100755 }, { 0x0B63, 100758 }, { 0x0B4F, 100762 }, { 0x0B4D, 100766 }, { 0x0B66, 100770 }, { 0x0B62, 100774 }, { 0x0B4A, 100778 }, { 0x0B65, 100782 }, { 0x0B4C, 100786 }, { 0x0B49, 100790 }, { 0x0B64, 100794 }, { 0x0B4B, 100798 }, { 0x0B67, 100802 }, { 0x0B4E, 100806 }, { 0x0079, 100810 }, { 0x14C8, 100813 }, { 0x14CE, 100816 }, { 0x14CF, 100821 }, { 0x14D0, 100826 }, { 0x14C6, 100831 }, { 0x14CA, 100834 }, { 0x14C9, 100839 }, { 0x14C3, 100843 }, { 0x4B5C, 100845 }, { 0x4B58, 100850 }, { 0x14C7, 100854 }, { 0x14C5, 100856 }, { 0x14D3, 100858 }, { 0x14D8, 100861 }, { 0x14D4, 100864 }, { 0x14D7, 100867 }, { 0x14D6, 100870 }, { 0x14DB, 100873 }, { 0x14D2, 100876 }, { 0x14DA, 100879 }, { 0x14D9, 100882 }, { 0x14D5, 100885 }, { 0x4B61, 100888 }, { 0x4B63, 100891 }, { 0x4B62, 100897 }, { 0x14D1, 100902 }, { 0x4B5A, 100905 }, { 0x14DC, 100910 }, { 0x14DD, 100913 }, { 0x14DE, 100916 }, { 0x14DF, 100919 }, { 0x14E0, 100922 }, { 0x14E6, 100925 }, { 0x14EF, 100928 }, { 0x14E3, 100931 }, { 0x14F5, 100934 }, { 0x14E9, 100937 }, { 0x14F1, 100940 }, { 0x14F6, 100943 }, { 0x14EB, 100946 }, { 0x14EA, 100949 }, { 0x14E4, 100952 }, { 0x14E1, 100955 }, { 0x14E7, 100958 }, { 0x14E8, 100961 }, { 0x14F3, 100964 }, { 0x14EC, 100967 }, { 0x14EE, 100970 }, { 0x14E2, 100973 }, { 0x14F4, 100976 }, { 0x14F2, 100979 }, { 0x14F9, 100982 }, { 0x153B, 100985 }, { 0x153C, 100990 }, { 0x154B, 100995 }, { 0x153F, 101000 }, { 0x1545, 101005 }, { 0x153D, 101010 }, { 0x1546, 101015 }, { 0x1544, 101020 }, { 0x154A, 101025 }, { 0x1542, 101030 }, { 0x153E, 101035 }, { 0x1543, 101040 }, { 0x1547, 101045 }, { 0x1548, 101050 }, { 0x1540, 101055 }, { 0x1549, 101060 }, { 0x155A, 101065 }, { 0x155B, 101071 }, { 0x1541, 101077 }, { 0x153A, 101082 }, { 0x1539, 101088 }, { 0x1536, 101093 }, { 0x155D, 101098 }, { 0x1537, 101103 }, { 0x1535, 101108 }, { 0x1534, 101114 }, { 0x1538, 101120 }, { 0x14E5, 101126 }, { 0x14F0, 101129 }, { 0x14FE, 101132 }, { 0x14FA, 101135 }, { 0x14F7, 101138 }, { 0x14FC, 101141 }, { 0x14ED, 101144 }, { 0x14F8, 101147 }, { 0x14FD, 101150 }, { 0x14FB, 101153 }, { 0x1519, 101156 }, { 0x151A, 101160 }, { 0x151D, 101164 }, { 0x1525, 101168 }, { 0x1527, 101172 }, { 0x1520, 101176 }, { 0x1521, 101180 }, { 0x151B, 101184 }, { 0x1526, 101188 }, { 0x151F, 101192 }, { 0x1522, 101196 }, { 0x1524, 101200 }, { 0x151C, 101204 }, { 0x152B, 101208 }, { 0x151E, 101212 }, { 0x152D, 101216 }, { 0x1528, 101220 }, { 0x1529, 101224 }, { 0x152C, 101228 }, { 0x1523, 101232 }, { 0x152A, 101236 }, { 0x152E, 101240 }, { 0x1500, 101244 }, { 0x1501, 101248 }, { 0x1502, 101252 }, { 0x1503, 101256 }, { 0x1507, 101260 }, { 0x150D, 101264 }, { 0x150A, 101268 }, { 0x150F, 101272 }, { 0x1513, 101276 }, { 0x150B, 101280 }, { 0x1504, 101284 }, { 0x1508, 101288 }, { 0x1509, 101292 }, { 0x150C, 101296 }, { 0x1505, 101300 }, { 0x1512, 101304 }, { 0x1511, 101308 }, { 0x154C, 101312 }, { 0x154D, 101318 }, { 0x1506, 101324 }, { 0x150E, 101328 }, { 0x1518, 101332 }, { 0x1514, 101336 }, { 0x1515, 101340 }, { 0x1516, 101344 }, { 0x1517, 101348 }, { 0x1510, 101352 }, { 0x14FF, 101356 }, { 0x152F, 101362 }, { 0x1532, 101366 }, { 0x1530, 101370 }, { 0x1531, 101374 }, { 0x1550, 101378 }, { 0x1554, 101384 }, { 0x1559, 101390 }, { 0x155C, 101396 }, { 0x1557, 101402 }, { 0x1555, 101408 }, { 0x154E, 101414 }, { 0x1551, 101420 }, { 0x155E, 101426 }, { 0x154F, 101432 }, { 0x1556, 101438 }, { 0x1552, 101444 }, { 0x1558, 101450 }, { 0x1553, 101456 }, { 0x1533, 101462 }, { 0x14CC, 101466 }, { 0x14CB, 101470 }, { 0x14CD, 101473 }, { 0x4B5B, 101475 }, { 0x4B64, 101480 }, { 0x4B59, 101487 }, { 0x4B5E, 101490 }, { 0x4B5D, 101496 }, { 0x14C4, 101501 }, { 0x4B5F, 101503 }, { 0x4B60, 101506 }, { 0x444B, 101512 }, { 0x445C, 101515 }, { 0x4457, 101518 }, { 0x4459, 101521 }, { 0x4462, 101524 }, { 0x444C, 101527 }, { 0x445B, 101530 }, { 0x4447, 101533 }, { 0x444E, 101536 }, { 0x4453, 101539 }, { 0x445E, 101542 }, { 0x445F, 101545 }, { 0x4461, 101548 }, { 0x444F, 101551 }, { 0x4451, 101554 }, { 0x4445, 101557 }, { 0x444A, 101560 }, { 0x4456, 101564 }, { 0x4458, 101568 }, { 0x4446, 101572 }, { 0x4452, 101576 }, { 0x4460, 101580 }, { 0x4450, 101584 }, { 0x4444, 101588 }, { 0x4454, 101592 }, { 0x4448, 101596 }, { 0x445D, 101599 }, { 0x444D, 101602 }, { 0x4449, 101605 }, { 0x4455, 101608 }, { 0x445A, 101611 }, { 0x4463, 101614 }, { 0x446B, 101617 }, { 0x4469, 101621 }, { 0x4464, 101624 }, { 0x4468, 101627 }, { 0x4466, 101630 }, { 0x4465, 101633 }, { 0x446A, 101636 }, { 0x4467, 101639 }, { 0x7190, 101643 }, { 0x6E2B, 101645 }, { 0x700C, 101646 }, { 0x2228, 101648 }, { 0x4428, 101649 }, { 0x4435, 101652 }, { 0x4430, 101655 }, { 0x4432, 101658 }, { 0x443A, 101661 }, { 0x4429, 101664 }, { 0x4434, 101667 }, { 0x4425, 101670 }, { 0x442B, 101673 }, { 0x442E, 101676 }, { 0x4437, 101679 }, { 0x4438, 101682 }, { 0x4439, 101685 }, { 0x442C, 101688 }, { 0x442D, 101691 }, { 0x4424, 101694 }, { 0x4431, 101697 }, { 0x4426, 101701 }, { 0x4436, 101704 }, { 0x442A, 101707 }, { 0x4427, 101710 }, { 0x442F, 101713 }, { 0x4433, 101716 }, { 0x443D, 101719 }, { 0x4442, 101722 }, { 0x443E, 101725 }, { 0x4441, 101728 }, { 0x4440, 101731 }, { 0x443F, 101734 }, { 0x4443, 101737 }, { 0x443B, 101740 }, { 0x443C, 101743 }, { 0x6E09, 101746 }, { 0x1BDD, 101747 }, { 0x701E, 101749 }, { 0x223E, 101751 }, { 0x21D8, 101752 }, { 0x6C88, 101755 }, { 0x1E5D, 101756 }, { 0x2634, 101757 }, { 0x1C0B, 101761 }, { 0x2566, 101763 }, { 0x0002, 101766 }, { 0x21CD, 101768 }, { 0x21CE, 101773 }, { 0x21CF, 101778 }, { 0x21D0, 101783 }, { 0x21D1, 101788 }, { 0x21D2, 101793 }, { 0x21D3, 101798 }, { 0x21D4, 101803 }, { 0x1BEF, 101808 }, { 0x6DD9, 101810 }, { 0x2597, 101812 }, { 0x6F19, 101815 }, { 0x0795, 101817 }, { 0x0798, 101820 }, { 0x0796, 101823 }, { 0x07AC, 101826 }, { 0x0797, 101829 }, { 0x079A, 101832 }, { 0x07A2, 101836 }, { 0x079C, 101840 }, { 0x07A9, 101844 }, { 0x07AA, 101848 }, { 0x07A6, 101852 }, { 0x079F, 101856 }, { 0x07A1, 101860 }, { 0x079B, 101865 }, { 0x07A8, 101870 }, { 0x07A5, 101875 }, { 0x079E, 101880 }, { 0x07A4, 101885 }, { 0x07AB, 101890 }, { 0x07A0, 101894 }, { 0x079D, 101899 }, { 0x078F, 101904 }, { 0x078E, 101907 }, { 0x0786, 101910 }, { 0x0783, 101913 }, { 0x0784, 101916 }, { 0x0780, 101919 }, { 0x078B, 101922 }, { 0x078C, 101925 }, { 0x0791, 101928 }, { 0x0787, 101931 }, { 0x0788, 101934 }, { 0x0785, 101937 }, { 0x077F, 101940 }, { 0x0789, 101943 }, { 0x0792, 101946 }, { 0x0793, 101949 }, { 0x0794, 101952 }, { 0x0782, 101955 }, { 0x0781, 101958 }, { 0x078A, 101961 }, { 0x078D, 101964 }, { 0x0790, 101967 }, { 0x07A7, 101970 }, { 0x07A3, 101974 }, { 0x0799, 101979 }, { 0x07B0, 101984 }, { 0x07BA, 101987 }, { 0x07B8, 101991 }, { 0x07B7, 101994 }, { 0x07AF, 101997 }, { 0x07B6, 102000 }, { 0x07B5, 102003 }, { 0x07AE, 102006 }, { 0x07BB, 102009 }, { 0x07B1, 102012 }, { 0x07B9, 102015 }, { 0x07B4, 102018 }, { 0x07AD, 102022 }, { 0x07B2, 102025 }, { 0x07B3, 102028 }, { 0x701B, 102031 }, { 0x6E1C, 102032 }, { 0x6CF2, 102034 }, { 0x001B, 102035 }, { 0x6CAB, 102036 }, { 0x5F6E, 102037 }, { 0x5F6D, 102041 }, { 0x5F6B, 102045 }, { 0x5F6C, 102049 }, { 0x229E, 102053 }, { 0x6C98, 102054 }, { 0x6DD1, 102055 }, { 0x6FDF, 102057 }, { 0x1DAB, 102058 }, { 0x24FB, 102060 }, { 0x24FA, 102064 }, { 0x6DE1, 102068 }, { 0x1F7A, 102071 }, { 0x1C32, 102072 }, { 0x1C37, 102074 }, { 0x1C33, 102076 }, { 0x1C36, 102078 }, { 0x1C35, 102080 }, { 0x1C3E, 102082 }, { 0x1C3A, 102085 }, { 0x1C3B, 102087 }, { 0x1C31, 102090 }, { 0x1C39, 102092 }, { 0x1C3C, 102094 }, { 0x1C3F, 102096 }, { 0x1C38, 102099 }, { 0x1C34, 102101 }, { 0x1C3D, 102103 }, { 0x1F3B, 102106 }, { 0x2565, 102108 }, { 0x1F3C, 102111 }, { 0x17CF, 102113 }, { 0x17CE, 102116 }, { 0x17A4, 102119 }, { 0x17A5, 102122 }, { 0x17A6, 102125 }, { 0x17D5, 102128 }, { 0x17DA, 102131 }, { 0x17D6, 102134 }, { 0x17D9, 102137 }, { 0x17D8, 102140 }, { 0x17DD, 102143 }, { 0x17D4, 102146 }, { 0x17DC, 102149 }, { 0x17DB, 102152 }, { 0x17D7, 102155 }, { 0x17CC, 102158 }, { 0x17C9, 102162 }, { 0x17C8, 102166 }, { 0x17CB, 102170 }, { 0x17CA, 102174 }, { 0x17CD, 102178 }, { 0x17A7, 102182 }, { 0x17AC, 102185 }, { 0x17A8, 102188 }, { 0x17AB, 102191 }, { 0x17A9, 102194 }, { 0x17AA, 102197 }, { 0x17BC, 102200 }, { 0x17B2, 102203 }, { 0x17B7, 102206 }, { 0x17AD, 102209 }, { 0x17BA, 102212 }, { 0x17B0, 102215 }, { 0x17C4, 102218 }, { 0x17B3, 102221 }, { 0x17AE, 102224 }, { 0x17C0, 102227 }, { 0x17BD, 102230 }, { 0x17B8, 102233 }, { 0x17B9, 102236 }, { 0x17AF, 102239 }, { 0x17BF, 102242 }, { 0x17C2, 102245 }, { 0x17B6, 102248 }, { 0x17BB, 102251 }, { 0x17C1, 102254 }, { 0x17C3, 102257 }, { 0x17BE, 102260 }, { 0x17B4, 102263 }, { 0x17E1, 102266 }, { 0x17D2, 102269 }, { 0x17E0, 102272 }, { 0x17B1, 102275 }, { 0x17B5, 102278 }, { 0x17DF, 102281 }, { 0x17D3, 102284 }, { 0x17E2, 102287 }, { 0x17E3, 102291 }, { 0x17DE, 102295 }, { 0x17C7, 102297 }, { 0x17C6, 102301 }, { 0x17D0, 102305 }, { 0x17D1, 102310 }, { 0x17C5, 102315 }, { 0x18A6, 102319 }, { 0x18A5, 102324 }, { 0x18A4, 102329 }, { 0x18A3, 102334 }, { 0x18A2, 102339 }, { 0x189F, 102343 }, { 0x18A1, 102347 }, { 0x18A0, 102351 }, { 0x6C76, 102355 }, { 0x6E88, 102356 }, { 0x6C85, 102357 }, { 0x6EBB, 102358 }, { 0x1CAE, 102363 }, { 0x2260, 102365 }, { 0x6E19, 102368 }, { 0x6EB7, 102370 }, { 0x1E9E, 102374 }, { 0x6E68, 102376 }, { 0x61E5, 102377 }, { 0x61AF, 102382 }, { 0x61BF, 102385 }, { 0x61B5, 102390 }, { 0x61AE, 102394 }, { 0x6199, 102397 }, { 0x61D5, 102401 }, { 0x61C1, 102404 }, { 0x61D8, 102409 }, { 0x619A, 102412 }, { 0x61A6, 102415 }, { 0x61C3, 102418 }, { 0x61CD, 102421 }, { 0x61D6, 102424 }, { 0x619E, 102427 }, { 0x6198, 102430 }, { 0x61B3, 102433 }, { 0x61CF, 102436 }, { 0x61B2, 102440 }, { 0x61C8, 102443 }, { 0x61B7, 102446 }, { 0x61BC, 102449 }, { 0x61C7, 102452 }, { 0x61AB, 102455 }, { 0x619B, 102458 }, { 0x61E1, 102461 }, { 0x61A7, 102464 }, { 0x61DB, 102467 }, { 0x61E2, 102470 }, { 0x61A8, 102473 }, { 0x619C, 102477 }, { 0x61B9, 102481 }, { 0x61D2, 102484 }, { 0x61CB, 102487 }, { 0x61B6, 102490 }, { 0x61C6, 102493 }, { 0x61AC, 102496 }, { 0x61D7, 102499 }, { 0x61A9, 102502 }, { 0x61CC, 102505 }, { 0x61BD, 102508 }, { 0x61DF, 102511 }, { 0x61A4, 102514 }, { 0x61C0, 102517 }, { 0x61DE, 102520 }, { 0x61BB, 102523 }, { 0x61C9, 102526 }, { 0x61A0, 102531 }, { 0x61B8, 102535 }, { 0x61CA, 102538 }, { 0x61DA, 102541 }, { 0x61D9, 102544 }, { 0x61B1, 102547 }, { 0x61AA, 102550 }, { 0x61E8, 102553 }, { 0x61BA, 102556 }, { 0x61D1, 102559 }, { 0x61C4, 102563 }, { 0x61E7, 102566 }, { 0x61BE, 102569 }, { 0x61DD, 102572 }, { 0x61E0, 102575 }, { 0x61E4, 102578 }, { 0x61B0, 102581 }, { 0x61A2, 102584 }, { 0x61C2, 102587 }, { 0x61DC, 102590 }, { 0x619F, 102593 }, { 0x61AD, 102596 }, { 0x61E3, 102599 }, { 0x619D, 102602 }, { 0x61C5, 102605 }, { 0x61D0, 102608 }, { 0x61A5, 102611 }, { 0x61D3, 102614 }, { 0x61B4, 102617 }, { 0x61E6, 102620 }, { 0x61CE, 102623 }, { 0x61A3, 102626 }, { 0x61A1, 102629 }, { 0x61D4, 102634 }, { 0x1DBD, 102637 }, { 0x6EED, 102638 }, { 0x21CC, 102639 }, { 0x2209, 102642 }, { 0x6E2E, 102645 }, { 0x71A0, 102647 }, { 0x7023, 102648 }, { 0x706B, 102652 }, { 0x7068, 102656 }, { 0x707A, 102660 }, { 0x704B, 102665 }, { 0x706C, 102670 }, { 0x7067, 102674 }, { 0x7028, 102678 }, { 0x702A, 102683 }, { 0x7029, 102688 }, { 0x702B, 102693 }, { 0x708D, 102698 }, { 0x708E, 102704 }, { 0x706E, 102710 }, { 0x7024, 102714 }, { 0x703C, 102718 }, { 0x7094, 102722 }, { 0x7095, 102727 }, { 0x7090, 102732 }, { 0x703E, 102736 }, { 0x703F, 102741 }, { 0x704C, 102746 }, { 0x703A, 102751 }, { 0x703B, 102756 }, { 0x7036, 102761 }, { 0x7048, 102765 }, { 0x704F, 102772 }, { 0x7076, 102778 }, { 0x7079, 102782 }, { 0x7031, 102786 }, { 0x7064, 102791 }, { 0x707B, 102795 }, { 0x7070, 102799 }, { 0x7025, 102804 }, { 0x7078, 102808 }, { 0x7093, 102813 }, { 0x7091, 102817 }, { 0x7037, 102821 }, { 0x7063, 102825 }, { 0x706F, 102830 }, { 0x7077, 102834 }, { 0x7026, 102838 }, { 0x7058, 102842 }, { 0x7042, 102846 }, { 0x7047, 102851 }, { 0x7040, 102856 }, { 0x7045, 102862 }, { 0x7046, 102868 }, { 0x706D, 102874 }, { 0x7085, 102878 }, { 0x708F, 102882 }, { 0x703D, 102886 }, { 0x7069, 102890 }, { 0x702F, 102894 }, { 0x7061, 102898 }, { 0x708C, 102902 }, { 0x707D, 102906 }, { 0x705C, 102910 }, { 0x7060, 102914 }, { 0x7065, 102919 }, { 0x7066, 102923 }, { 0x7082, 102927 }, { 0x7032, 102931 }, { 0x7033, 102936 }, { 0x7034, 102941 }, { 0x705D, 102946 }, { 0x7054, 102950 }, { 0x7041, 102954 }, { 0x7052, 102960 }, { 0x7053, 102966 }, { 0x7071, 102972 }, { 0x7074, 102978 }, { 0x707E, 102983 }, { 0x707F, 102989 }, { 0x7073, 102995 }, { 0x702C, 102999 }, { 0x7051, 103003 }, { 0x7038, 103009 }, { 0x7059, 103013 }, { 0x704D, 103017 }, { 0x7072, 103022 }, { 0x7035, 103026 }, { 0x7087, 103030 }, { 0x7083, 103034 }, { 0x707C, 103038 }, { 0x7062, 103043 }, { 0x706A, 103047 }, { 0x7092, 103051 }, { 0x7075, 103055 }, { 0x705A, 103059 }, { 0x705E, 103063 }, { 0x7055, 103067 }, { 0x7056, 103071 }, { 0x7057, 103075 }, { 0x7049, 103079 }, { 0x7050, 103087 }, { 0x7044, 103095 }, { 0x704E, 103101 }, { 0x704A, 103107 }, { 0x702D, 103111 }, { 0x702E, 103115 }, { 0x7039, 103119 }, { 0x7027, 103123 }, { 0x7088, 103127 }, { 0x7089, 103131 }, { 0x708A, 103135 }, { 0x708B, 103139 }, { 0x7084, 103143 }, { 0x705F, 103147 }, { 0x7043, 103151 }, { 0x7081, 103156 }, { 0x7080, 103160 }, { 0x7030, 103164 }, { 0x7086, 103169 }, { 0x7022, 103173 }, { 0x705B, 103177 }, { 0x0007, 103181 }, { 0x1DD9, 103182 }, { 0x6F6D, 103185 }, { 0x6FD2, 103187 }, { 0x6CFB, 103188 }, { 0x3CE2, 103191 }, { 0x3CDE, 103194 }, { 0x003E, 103196 }, { 0x0020, 103198 }, { 0x1C06, 103200 }, { 0x1D8A, 103203 }, { 0x6F51, 103204 }, { 0x1F0A, 103206 }, { 0x6D27, 103209 }, { 0x2165, 103211 }, { 0x0872, 103213 }, { 0x371F, 103215 }, { 0x3723, 103218 }, { 0x0893, 103221 }, { 0x085E, 103226 }, { 0x371A, 103229 }, { 0x086F, 103234 }, { 0x3722, 103237 }, { 0x3718, 103240 }, { 0x0825, 103244 }, { 0x0824, 103247 }, { 0x085F, 103250 }, { 0x0822, 103253 }, { 0x371E, 103257 }, { 0x0823, 103260 }, { 0x371B, 103263 }, { 0x371C, 103267 }, { 0x3719, 103271 }, { 0x371D, 103275 }, { 0x0876, 103279 }, { 0x3720, 103282 }, { 0x0886, 103284 }, { 0x0889, 103286 }, { 0x088E, 103289 }, { 0x088A, 103292 }, { 0x088D, 103295 }, { 0x088C, 103298 }, { 0x0891, 103301 }, { 0x0888, 103304 }, { 0x0890, 103307 }, { 0x088F, 103310 }, { 0x088B, 103313 }, { 0x0875, 103316 }, { 0x0869, 103319 }, { 0x0861, 103323 }, { 0x086D, 103327 }, { 0x0863, 103331 }, { 0x0860, 103335 }, { 0x086A, 103339 }, { 0x086E, 103343 }, { 0x0871, 103347 }, { 0x0862, 103351 }, { 0x085C, 103355 }, { 0x0878, 103359 }, { 0x0864, 103363 }, { 0x085D, 103367 }, { 0x0879, 103371 }, { 0x0868, 103375 }, { 0x086C, 103380 }, { 0x0867, 103385 }, { 0x086B, 103390 }, { 0x0877, 103395 }, { 0x0884, 103401 }, { 0x0865, 103406 }, { 0x0885, 103411 }, { 0x0866, 103416 }, { 0x0870, 103421 }, { 0x0887, 103426 }, { 0x0827, 103429 }, { 0x0831, 103432 }, { 0x0829, 103435 }, { 0x0835, 103438 }, { 0x082B, 103441 }, { 0x0828, 103444 }, { 0x0832, 103447 }, { 0x0836, 103450 }, { 0x0897, 103453 }, { 0x084E, 103456 }, { 0x083C, 103459 }, { 0x0848, 103462 }, { 0x0880, 103465 }, { 0x0839, 103468 }, { 0x085B, 103471 }, { 0x082A, 103474 }, { 0x083E, 103477 }, { 0x0837, 103480 }, { 0x0854, 103483 }, { 0x0850, 103486 }, { 0x084A, 103489 }, { 0x0895, 103492 }, { 0x084C, 103495 }, { 0x087A, 103498 }, { 0x0852, 103501 }, { 0x085A, 103504 }, { 0x0846, 103507 }, { 0x0898, 103510 }, { 0x082C, 103513 }, { 0x0857, 103516 }, { 0x0851, 103519 }, { 0x087D, 103522 }, { 0x08A1, 103525 }, { 0x084F, 103528 }, { 0x083D, 103531 }, { 0x0843, 103534 }, { 0x0849, 103537 }, { 0x089D, 103540 }, { 0x083A, 103543 }, { 0x083F, 103546 }, { 0x089E, 103549 }, { 0x0838, 103552 }, { 0x0855, 103555 }, { 0x083B, 103558 }, { 0x0845, 103561 }, { 0x0840, 103564 }, { 0x0896, 103567 }, { 0x084D, 103570 }, { 0x087F, 103573 }, { 0x0853, 103576 }, { 0x0858, 103579 }, { 0x0859, 103582 }, { 0x0847, 103585 }, { 0x0841, 103588 }, { 0x0899, 103591 }, { 0x0881, 103594 }, { 0x089B, 103597 }, { 0x08A0, 103600 }, { 0x0844, 103603 }, { 0x087C, 103606 }, { 0x087B, 103609 }, { 0x0856, 103612 }, { 0x084B, 103615 }, { 0x0842, 103618 }, { 0x087E, 103621 }, { 0x089C, 103624 }, { 0x0826, 103628 }, { 0x0830, 103632 }, { 0x0834, 103636 }, { 0x0894, 103640 }, { 0x082F, 103644 }, { 0x0833, 103648 }, { 0x089F, 103652 }, { 0x089A, 103656 }, { 0x082E, 103660 }, { 0x082D, 103664 }, { 0x0883, 103668 }, { 0x0882, 103672 }, { 0x0873, 103676 }, { 0x0874, 103680 }, { 0x3721, 103684 }, { 0x0892, 103686 }, { 0x1DD8, 103689 }, { 0x1F70, 103691 }, { 0x1DD6, 103693 }, { 0x25D2, 103695 }, { 0x6D8E, 103700 }, { 0x6D9E, 103701 }, { 0x2762, 103702 }, { 0x2771, 103706 }, { 0x277D, 103710 }, { 0x277A, 103714 }, { 0x2757, 103718 }, { 0x277F, 103722 }, { 0x2768, 103727 }, { 0x2770, 103731 }, { 0x2775, 103735 }, { 0x2773, 103739 }, { 0x276D, 103743 }, { 0x2758, 103747 }, { 0x2781, 103751 }, { 0x276F, 103755 }, { 0x2760, 103759 }, { 0x2764, 103763 }, { 0x2772, 103767 }, { 0x2759, 103771 }, { 0x2778, 103775 }, { 0x2777, 103779 }, { 0x2776, 103783 }, { 0x275B, 103787 }, { 0x275E, 103791 }, { 0x276E, 103795 }, { 0x2767, 103799 }, { 0x276A, 103803 }, { 0x276B, 103807 }, { 0x277B, 103811 }, { 0x277C, 103816 }, { 0x275C, 103823 }, { 0x2774, 103827 }, { 0x2763, 103831 }, { 0x2769, 103835 }, { 0x276C, 103839 }, { 0x275F, 103843 }, { 0x275A, 103847 }, { 0x2761, 103851 }, { 0x2780, 103856 }, { 0x277E, 103862 }, { 0x2782, 103868 }, { 0x2765, 103872 }, { 0x2766, 103876 }, { 0x2783, 103880 }, { 0x2779, 103884 }, { 0x275D, 103889 }, { 0x2785, 103893 }, { 0x2784, 103898 }, { 0x2733, 103903 }, { 0x2742, 103907 }, { 0x274E, 103911 }, { 0x274B, 103915 }, { 0x2728, 103919 }, { 0x2750, 103923 }, { 0x2739, 103928 }, { 0x2741, 103932 }, { 0x2746, 103936 }, { 0x2744, 103940 }, { 0x273E, 103944 }, { 0x2729, 103948 }, { 0x2752, 103952 }, { 0x2740, 103956 }, { 0x2731, 103960 }, { 0x2735, 103964 }, { 0x2743, 103968 }, { 0x272A, 103972 }, { 0x2749, 103976 }, { 0x2748, 103980 }, { 0x2747, 103984 }, { 0x272C, 103988 }, { 0x272F, 103992 }, { 0x273F, 103996 }, { 0x2738, 104000 }, { 0x273B, 104004 }, { 0x273C, 104008 }, { 0x274C, 104012 }, { 0x274D, 104017 }, { 0x272D, 104024 }, { 0x2745, 104028 }, { 0x2734, 104032 }, { 0x273A, 104036 }, { 0x273D, 104040 }, { 0x2730, 104044 }, { 0x272B, 104048 }, { 0x2732, 104052 }, { 0x2751, 104057 }, { 0x274F, 104063 }, { 0x2753, 104069 }, { 0x2736, 104073 }, { 0x2737, 104077 }, { 0x2754, 104081 }, { 0x274A, 104085 }, { 0x272E, 104090 }, { 0x2756, 104094 }, { 0x2755, 104099 }, { 0x6CCE, 104104 }, { 0x6FBC, 104106 }, { 0x6FBF, 104107 }, { 0x6FC0, 104109 }, { 0x1DC4, 104114 }, { 0x1BC9, 104115 }, { 0x26D6, 104117 }, { 0x1F38, 104120 }, { 0x2203, 104123 }, { 0x1F43, 104128 }, { 0x1F44, 104131 }, { 0x1F45, 104134 }, { 0x1F46, 104137 }, { 0x267D, 104140 }, { 0x2716, 104143 }, { 0x6FE0, 104146 }, { 0x1BDA, 104149 }, { 0x1F17, 104151 }, { 0x2536, 104153 }, { 0x4564, 104155 }, { 0x4566, 104159 }, { 0x4565, 104163 }, { 0x453F, 104166 }, { 0x4541, 104171 }, { 0x4540, 104174 }, { 0x4568, 104177 }, { 0x4569, 104180 }, { 0x456B, 104183 }, { 0x456A, 104186 }, { 0x453C, 104189 }, { 0x4539, 104193 }, { 0x453D, 104197 }, { 0x453A, 104201 }, { 0x453B, 104205 }, { 0x453E, 104210 }, { 0x4538, 104214 }, { 0x4556, 104217 }, { 0x4546, 104220 }, { 0x4551, 104223 }, { 0x4544, 104226 }, { 0x4561, 104229 }, { 0x4548, 104232 }, { 0x4542, 104235 }, { 0x455B, 104238 }, { 0x4558, 104241 }, { 0x4553, 104244 }, { 0x4554, 104247 }, { 0x455A, 104250 }, { 0x455F, 104253 }, { 0x454F, 104256 }, { 0x455C, 104259 }, { 0x4559, 104262 }, { 0x4560, 104265 }, { 0x4557, 104268 }, { 0x4547, 104271 }, { 0x454C, 104274 }, { 0x4552, 104277 }, { 0x4545, 104280 }, { 0x4543, 104283 }, { 0x4562, 104286 }, { 0x454E, 104289 }, { 0x4549, 104292 }, { 0x4555, 104295 }, { 0x455D, 104298 }, { 0x455E, 104301 }, { 0x4550, 104304 }, { 0x454A, 104307 }, { 0x454D, 104310 }, { 0x454B, 104313 }, { 0x4563, 104316 }, { 0x456E, 104319 }, { 0x456F, 104323 }, { 0x456C, 104327 }, { 0x456D, 104330 }, { 0x4567, 104333 }, { 0x4570, 104335 }, { 0x4576, 104338 }, { 0x4578, 104341 }, { 0x4575, 104344 }, { 0x4571, 104347 }, { 0x4572, 104351 }, { 0x4577, 104354 }, { 0x4573, 104358 }, { 0x4574, 104362 }, { 0x45C1, 104365 }, { 0x45D5, 104368 }, { 0x45BF, 104371 }, { 0x45D4, 104374 }, { 0x45CF, 104377 }, { 0x45D0, 104380 }, { 0x45DD, 104383 }, { 0x45C0, 104386 }, { 0x45D2, 104389 }, { 0x45BA, 104392 }, { 0x45C6, 104395 }, { 0x45C9, 104398 }, { 0x45D7, 104401 }, { 0x45DA, 104404 }, { 0x45DB, 104407 }, { 0x45C7, 104410 }, { 0x45CA, 104413 }, { 0x45D8, 104416 }, { 0x45C8, 104419 }, { 0x45D3, 104422 }, { 0x45B9, 104425 }, { 0x45BB, 104428 }, { 0x45BC, 104431 }, { 0x45C4, 104434 }, { 0x45CB, 104437 }, { 0x45D9, 104440 }, { 0x45D6, 104443 }, { 0x45DC, 104446 }, { 0x45C2, 104449 }, { 0x45BE, 104452 }, { 0x45BD, 104455 }, { 0x45C5, 104458 }, { 0x45CC, 104461 }, { 0x45D1, 104464 }, { 0x45C3, 104467 }, { 0x45CD, 104470 }, { 0x45CE, 104473 }, { 0x45E0, 104476 }, { 0x45E4, 104479 }, { 0x45E2, 104483 }, { 0x45E1, 104486 }, { 0x45E3, 104489 }, { 0x45E9, 104492 }, { 0x45E8, 104495 }, { 0x45EA, 104500 }, { 0x45EB, 104504 }, { 0x45E5, 104508 }, { 0x45E7, 104511 }, { 0x45E6, 104517 }, { 0x45DE, 104520 }, { 0x45DF, 104524 }, { 0x6CDF, 104528 }, { 0x6E67, 104529 }, { 0x1F16, 104530 }, { 0x2637, 104532 }, { 0x2167, 104533 }, { 0x6FF1, 104534 }, { 0x6CE8, 104535 }, { 0x142A, 104537 }, { 0x1429, 104540 }, { 0x44A2, 104543 }, { 0x448A, 104546 }, { 0x4496, 104549 }, { 0x4495, 104552 }, { 0x4486, 104555 }, { 0x4487, 104558 }, { 0x448D, 104561 }, { 0x4490, 104564 }, { 0x4492, 104567 }, { 0x4493, 104570 }, { 0x4498, 104573 }, { 0x449B, 104576 }, { 0x448E, 104579 }, { 0x448B, 104582 }, { 0x448F, 104585 }, { 0x448C, 104588 }, { 0x4489, 104591 }, { 0x4488, 104594 }, { 0x4491, 104597 }, { 0x4499, 104600 }, { 0x4497, 104603 }, { 0x4494, 104606 }, { 0x449A, 104609 }, { 0x449C, 104612 }, { 0x449F, 104615 }, { 0x449D, 104619 }, { 0x44A0, 104622 }, { 0x44A1, 104625 }, { 0x449E, 104628 }, { 0x0070, 104631 }, { 0x7002, 104633 }, { 0x1E8E, 104635 }, { 0x1DC0, 104636 }, { 0x2570, 104637 }, { 0x1DE8, 104640 }, { 0x006D, 104643 }, { 0x223A, 104645 }, { 0x223B, 104648 }, { 0x71CD, 104651 }, { 0x2492, 104652 }, { 0x7174, 104656 }, { 0x1D29, 104661 }, { 0x1D26, 104665 }, { 0x1D1B, 104668 }, { 0x1D6E, 104670 }, { 0x2478, 104674 }, { 0x1D2F, 104679 }, { 0x247A, 104683 }, { 0x1D4D, 104690 }, { 0x2669, 104695 }, { 0x2668, 104700 }, { 0x1D33, 104705 }, { 0x1D35, 104709 }, { 0x249F, 104713 }, { 0x1D2C, 104718 }, { 0x246F, 104722 }, { 0x246E, 104730 }, { 0x70F5, 104737 }, { 0x70ED, 104743 }, { 0x70F9, 104749 }, { 0x1D3D, 104755 }, { 0x246B, 104760 }, { 0x1D84, 104765 }, { 0x70F1, 104771 }, { 0x1D24, 104777 }, { 0x716B, 104781 }, { 0x1D81, 104786 }, { 0x70FD, 104791 }, { 0x249C, 104796 }, { 0x24CE, 104802 }, { 0x24CF, 104807 }, { 0x26A6, 104813 }, { 0x26A2, 104819 }, { 0x24A1, 104826 }, { 0x269E, 104830 }, { 0x269D, 104834 }, { 0x26ED, 104838 }, { 0x26E2, 104841 }, { 0x712D, 104846 }, { 0x7129, 104849 }, { 0x1D71, 104853 }, { 0x1D79, 104856 }, { 0x7167, 104861 }, { 0x7172, 104867 }, { 0x1D6B, 104872 }, { 0x2467, 104875 }, { 0x1D5B, 104879 }, { 0x2461, 104882 }, { 0x1D58, 104887 }, { 0x245D, 104892 }, { 0x2476, 104898 }, { 0x1D52, 104901 }, { 0x6FA9, 104904 }, { 0x2469, 104906 }, { 0x1D64, 104910 }, { 0x1D55, 104913 }, { 0x24AD, 104918 }, { 0x24B5, 104925 }, { 0x24C6, 104932 }, { 0x24C2, 104940 }, { 0x24BE, 104951 }, { 0x24B1, 104962 }, { 0x24B9, 104969 }, { 0x24C3, 104976 }, { 0x24C7, 104987 }, { 0x1D49, 104995 }, { 0x1D4A, 105000 }, { 0x7121, 105005 }, { 0x1D66, 105008 }, { 0x7163, 105011 }, { 0x26A0, 105014 }, { 0x2474, 105017 }, { 0x7125, 105019 }, { 0x7131, 105022 }, { 0x245F, 105025 }, { 0x2470, 105030 }, { 0x2472, 105035 }, { 0x2471, 105044 }, { 0x245B, 105052 }, { 0x2726, 105059 }, { 0x245A, 105065 }, { 0x246A, 105071 }, { 0x717A, 105076 }, { 0x711D, 105081 }, { 0x7178, 105084 }, { 0x1D87, 105088 }, { 0x717C, 105091 }, { 0x7176, 105096 }, { 0x26BC, 105100 }, { 0x26CC, 105103 }, { 0x26DA, 105108 }, { 0x7111, 105115 }, { 0x26FB, 105121 }, { 0x26FD, 105128 }, { 0x7119, 105135 }, { 0x7115, 105142 }, { 0x26D4, 105148 }, { 0x26D4, 105155 }, { 0x710D, 105162 }, { 0x7109, 105168 }, { 0x26C6, 105174 }, { 0x26DE, 105178 }, { 0x6FB3, 105182 }, { 0x6FB2, 105190 }, { 0x6FB1, 105197 }, { 0x6FB5, 105205 }, { 0x36F8, 105208 }, { 0x36B5, 105211 }, { 0x36B4, 105214 }, { 0x36F9, 105217 }, { 0x36FA, 105220 }, { 0x36FD, 105222 }, { 0x3702, 105225 }, { 0x36FE, 105228 }, { 0x3701, 105231 }, { 0x3700, 105234 }, { 0x3705, 105237 }, { 0x36FC, 105240 }, { 0x3704, 105243 }, { 0x3703, 105246 }, { 0x36FF, 105249 }, { 0x36F2, 105252 }, { 0x36EA, 105256 }, { 0x36F5, 105260 }, { 0x36EC, 105264 }, { 0x36E9, 105268 }, { 0x36F4, 105272 }, { 0x36F7, 105276 }, { 0x36F3, 105280 }, { 0x36EB, 105284 }, { 0x36F6, 105288 }, { 0x36ED, 105292 }, { 0x36F0, 105296 }, { 0x36EE, 105301 }, { 0x36F1, 105306 }, { 0x36EF, 105311 }, { 0x36FB, 105316 }, { 0x36B6, 105319 }, { 0x36C0, 105322 }, { 0x36B8, 105325 }, { 0x36C3, 105328 }, { 0x36BA, 105331 }, { 0x36B7, 105334 }, { 0x36C2, 105337 }, { 0x36C5, 105340 }, { 0x36DC, 105343 }, { 0x36CB, 105346 }, { 0x36D7, 105349 }, { 0x36C1, 105352 }, { 0x36C8, 105355 }, { 0x36E6, 105358 }, { 0x36B9, 105361 }, { 0x36CD, 105364 }, { 0x36C6, 105367 }, { 0x36E1, 105370 }, { 0x36DE, 105373 }, { 0x36D9, 105376 }, { 0x36C4, 105379 }, { 0x36DA, 105382 }, { 0x36E0, 105385 }, { 0x36E5, 105388 }, { 0x36D5, 105391 }, { 0x36BB, 105394 }, { 0x36E2, 105397 }, { 0x36DF, 105400 }, { 0x36DD, 105403 }, { 0x36CC, 105406 }, { 0x36D2, 105409 }, { 0x36D8, 105412 }, { 0x36C9, 105415 }, { 0x36CE, 105418 }, { 0x36C7, 105421 }, { 0x36E7, 105424 }, { 0x36CA, 105427 }, { 0x36D4, 105430 }, { 0x36CF, 105433 }, { 0x36DB, 105436 }, { 0x36E3, 105439 }, { 0x36E4, 105442 }, { 0x36D6, 105445 }, { 0x36D0, 105448 }, { 0x36D3, 105451 }, { 0x36D1, 105454 }, { 0x36BE, 105457 }, { 0x36BC, 105461 }, { 0x36BF, 105465 }, { 0x36BD, 105469 }, { 0x36E8, 105473 }, { 0x258C, 105477 }, { 0x1F06, 105482 }, { 0x6F39, 105485 }, { 0x1BBA, 105488 }, { 0x6C8E, 105490 }, { 0x6FDA, 105491 }, { 0x6E35, 105493 }, { 0x6FE4, 105494 }, { 0x6E0B, 105498 }, { 0x1BD7, 105500 }, { 0x6FC9, 105502 }, { 0x6D0B, 105503 }, { 0x6C84, 105504 }, { 0x21D9, 105505 }, { 0x1F10, 105507 }, { 0x6FD6, 105510 }, { 0x2305, 105512 }, { 0x26B5, 105517 }, { 0x26B7, 105523 }, { 0x256A, 105529 }, { 0x1F0D, 105531 }, { 0x6F17, 105533 }, { 0x2166, 105534 }, { 0x6D25, 105535 }, { 0x1DE1, 105537 }, { 0x1EBD, 105539 }, { 0x1EBE, 105540 }, { 0x25F3, 105541 }, { 0x25F4, 105546 }, { 0x25F5, 105551 }, { 0x25F6, 105557 }, { 0x2653, 105563 }, { 0x2654, 105569 }, { 0x1DE3, 105575 }, { 0x0001, 105577 }, { 0x1BFD, 105579 }, { 0x1BB9, 105582 }, { 0x6D9B, 105584 }, { 0x1BDB, 105586 }, { 0x2A8F, 105588 }, { 0x2ACC, 105591 }, { 0x2A8E, 105595 }, { 0x2AB7, 105597 }, { 0x2A8D, 105601 }, { 0x2A94, 105603 }, { 0x2AB8, 105606 }, { 0x2A93, 105610 }, { 0x2ABA, 105613 }, { 0x2AB9, 105617 }, { 0x2A92, 105621 }, { 0x2AC4, 105624 }, { 0x2E4E, 105630 }, { 0x2E53, 105636 }, { 0x2E57, 105642 }, { 0x2E4F, 105648 }, { 0x2E52, 105654 }, { 0x2E51, 105660 }, { 0x2E56, 105666 }, { 0x2E55, 105672 }, { 0x2E54, 105678 }, { 0x2E50, 105684 }, { 0x2E58, 105690 }, { 0x2E6B, 105696 }, { 0x2E59, 105702 }, { 0x2E61, 105708 }, { 0x2E5C, 105714 }, { 0x2E5D, 105720 }, { 0x2E5F, 105726 }, { 0x2E5B, 105732 }, { 0x2E60, 105738 }, { 0x2E5A, 105744 }, { 0x2E5E, 105750 }, { 0x2E6C, 105756 }, { 0x2E62, 105762 }, { 0x2E67, 105768 }, { 0x2E63, 105774 }, { 0x2E66, 105780 }, { 0x2E65, 105786 }, { 0x2E6A, 105792 }, { 0x2E69, 105798 }, { 0x2E68, 105804 }, { 0x2E64, 105810 }, { 0x2D33, 105816 }, { 0x2DC7, 105821 }, { 0x2DCC, 105827 }, { 0x2DD0, 105833 }, { 0x2DC8, 105839 }, { 0x2DCB, 105845 }, { 0x2DCA, 105851 }, { 0x2DCF, 105857 }, { 0x2DC6, 105863 }, { 0x2DCE, 105869 }, { 0x2DCD, 105875 }, { 0x2DC9, 105881 }, { 0x2DD1, 105887 }, { 0x2DD2, 105893 }, { 0x2DDA, 105899 }, { 0x2DD5, 105905 }, { 0x2DD6, 105911 }, { 0x2DD8, 105917 }, { 0x2DD4, 105923 }, { 0x2DD9, 105929 }, { 0x2DD3, 105935 }, { 0x2DD7, 105941 }, { 0x2DDB, 105947 }, { 0x2DDC, 105953 }, { 0x2DDE, 105959 }, { 0x2DDD, 105965 }, { 0x2D35, 105971 }, { 0x2D34, 105976 }, { 0x2D32, 105981 }, { 0x2D31, 105986 }, { 0x2D36, 105991 }, { 0x2D2F, 105996 }, { 0x2D38, 106001 }, { 0x2D3A, 106006 }, { 0x2D30, 106011 }, { 0x2D39, 106016 }, { 0x2D37, 106021 }, { 0x2ACB, 106026 }, { 0x2C20, 106029 }, { 0x2C13, 106033 }, { 0x2C17, 106037 }, { 0x2C14, 106041 }, { 0x2C16, 106045 }, { 0x2C1F, 106049 }, { 0x2C1A, 106053 }, { 0x2C1C, 106057 }, { 0x2C15, 106061 }, { 0x2C19, 106065 }, { 0x2C1D, 106069 }, { 0x2C1E, 106073 }, { 0x2C18, 106077 }, { 0x2C1B, 106081 }, { 0x2C11, 106085 }, { 0x2C12, 106089 }, { 0x2A85, 106093 }, { 0x2A81, 106098 }, { 0x2A83, 106104 }, { 0x2A82, 106112 }, { 0x2A84, 106118 }, { 0x2A8C, 106126 }, { 0x2A88, 106130 }, { 0x2A86, 106136 }, { 0x2A87, 106142 }, { 0x2A8B, 106148 }, { 0x2A89, 106155 }, { 0x2A8A, 106162 }, { 0x6DBC, 106169 }, { 0x1CC6, 106172 }, { 0x1E43, 106174 }, { 0x3E6C, 106175 }, { 0x3E6D, 106178 }, { 0x3E6E, 106181 }, { 0x21FE, 106184 }, { 0x1BF1, 106189 }, { 0x718A, 106190 }, { 0x0D31, 106192 }, { 0x0D33, 106195 }, { 0x053D, 106200 }, { 0x2240, 106204 }, { 0x2304, 106207 }, { 0x6EAB, 106211 }, { 0x7180, 106213 }, { 0x6FEC, 106215 }, { 0x2902, 106218 }, { 0x2CBF, 106219 }, { 0x6F5E, 106221 }, { 0x1E8F, 106223 }, { 0x1BBC, 106224 }, { 0x217C, 106226 }, { 0x3E70, 106228 }, { 0x21AA, 106230 }, { 0x6F83, 106231 }, { 0x2214, 106233 }, { 0x6816, 106234 }, { 0x6817, 106239 }, { 0x6814, 106244 }, { 0x6815, 106248 }, { 0x67FC, 106252 }, { 0x67F6, 106255 }, { 0x67F7, 106259 }, { 0x6833, 106263 }, { 0x6834, 106268 }, { 0x66F0, 106273 }, { 0x66F2, 106276 }, { 0x66F1, 106279 }, { 0x680F, 106282 }, { 0x67F8, 106284 }, { 0x67FA, 106288 }, { 0x67F3, 106292 }, { 0x67F9, 106295 }, { 0x67F5, 106299 }, { 0x67F4, 106302 }, { 0x67FB, 106305 }, { 0x67E7, 106309 }, { 0x67E8, 106317 }, { 0x67E6, 106326 }, { 0x686B, 106333 }, { 0x686C, 106336 }, { 0x686D, 106339 }, { 0x686E, 106342 }, { 0x686F, 106345 }, { 0x6867, 106348 }, { 0x684A, 106351 }, { 0x67DE, 106353 }, { 0x67DF, 106355 }, { 0x67E5, 106358 }, { 0x67E1, 106362 }, { 0x67E3, 106366 }, { 0x67E0, 106370 }, { 0x67E4, 106374 }, { 0x67E2, 106378 }, { 0x6856, 106382 }, { 0x6857, 106385 }, { 0x6858, 106388 }, { 0x6859, 106391 }, { 0x685A, 106394 }, { 0x685B, 106397 }, { 0x685C, 106400 }, { 0x6855, 106403 }, { 0x6832, 106406 }, { 0x6849, 106410 }, { 0x6811, 106412 }, { 0x6810, 106415 }, { 0x6813, 106418 }, { 0x6812, 106421 }, { 0x66ED, 106424 }, { 0x66EF, 106427 }, { 0x66EE, 106430 }, { 0x6869, 106433 }, { 0x6866, 106435 }, { 0x66FA, 106437 }, { 0x66FC, 106441 }, { 0x66FB, 106445 }, { 0x66FD, 106449 }, { 0x66FE, 106453 }, { 0x66E7, 106456 }, { 0x66E9, 106459 }, { 0x66E8, 106462 }, { 0x682C, 106465 }, { 0x682D, 106468 }, { 0x682E, 106472 }, { 0x6826, 106476 }, { 0x6828, 106480 }, { 0x6827, 106485 }, { 0x6823, 106490 }, { 0x6824, 106494 }, { 0x6825, 106498 }, { 0x6829, 106502 }, { 0x682B, 106506 }, { 0x682A, 106511 }, { 0x6820, 106516 }, { 0x6822, 106519 }, { 0x6821, 106523 }, { 0x681D, 106527 }, { 0x681F, 106530 }, { 0x681E, 106534 }, { 0x682F, 106538 }, { 0x6831, 106541 }, { 0x6830, 106545 }, { 0x681C, 106549 }, { 0x681B, 106553 }, { 0x681A, 106557 }, { 0x6835, 106561 }, { 0x6837, 106564 }, { 0x6836, 106568 }, { 0x6840, 106572 }, { 0x6844, 106574 }, { 0x6845, 106578 }, { 0x6842, 106583 }, { 0x6843, 106587 }, { 0x6846, 106592 }, { 0x6841, 106596 }, { 0x680E, 106599 }, { 0x680C, 106603 }, { 0x680D, 106607 }, { 0x66E4, 106611 }, { 0x66E6, 106614 }, { 0x66E5, 106617 }, { 0x6854, 106620 }, { 0x6819, 106627 }, { 0x6818, 106630 }, { 0x6809, 106633 }, { 0x680B, 106636 }, { 0x680A, 106639 }, { 0x67EE, 106642 }, { 0x67ED, 106647 }, { 0x67EF, 106652 }, { 0x67EC, 106657 }, { 0x685D, 106662 }, { 0x66EA, 106664 }, { 0x66EC, 106667 }, { 0x66EB, 106670 }, { 0x683A, 106673 }, { 0x683B, 106678 }, { 0x683D, 106684 }, { 0x683F, 106689 }, { 0x683E, 106694 }, { 0x683C, 106699 }, { 0x6839, 106704 }, { 0x6838, 106708 }, { 0x67D6, 106713 }, { 0x67D7, 106716 }, { 0x67DC, 106719 }, { 0x67D8, 106724 }, { 0x67DD, 106727 }, { 0x67D9, 106730 }, { 0x67D5, 106733 }, { 0x67D4, 106737 }, { 0x67DA, 106741 }, { 0x67DB, 106744 }, { 0x66FF, 106748 }, { 0x66F5, 106752 }, { 0x66F7, 106756 }, { 0x66F6, 106760 }, { 0x66F8, 106764 }, { 0x66F9, 106768 }, { 0x66F4, 106771 }, { 0x66F3, 106774 }, { 0x67E9, 106777 }, { 0x67EB, 106781 }, { 0x67EA, 106785 }, { 0x67F1, 106789 }, { 0x67F0, 106792 }, { 0x67F2, 106795 }, { 0x664C, 106798 }, { 0x6650, 106800 }, { 0x6632, 106804 }, { 0x6633, 106809 }, { 0x664B, 106815 }, { 0x664F, 106818 }, { 0x664D, 106823 }, { 0x6651, 106828 }, { 0x65E1, 106833 }, { 0x669F, 106836 }, { 0x66CB, 106841 }, { 0x66CC, 106845 }, { 0x664E, 106850 }, { 0x6652, 106854 }, { 0x66AF, 106858 }, { 0x6863, 106863 }, { 0x6862, 106867 }, { 0x6865, 106870 }, { 0x6864, 106874 }, { 0x6861, 106877 }, { 0x6860, 106880 }, { 0x6870, 106883 }, { 0x6871, 106886 }, { 0x6872, 106889 }, { 0x6873, 106892 }, { 0x6874, 106895 }, { 0x6875, 106898 }, { 0x6876, 106901 }, { 0x6877, 106904 }, { 0x6878, 106907 }, { 0x6879, 106910 }, { 0x687A, 106913 }, { 0x687B, 106916 }, { 0x687C, 106919 }, { 0x687D, 106922 }, { 0x687E, 106925 }, { 0x684C, 106928 }, { 0x684D, 106932 }, { 0x6850, 106936 }, { 0x67FD, 106941 }, { 0x67FE, 106944 }, { 0x67FF, 106947 }, { 0x6645, 106950 }, { 0x6647, 106952 }, { 0x6628, 106956 }, { 0x66C8, 106961 }, { 0x6646, 106968 }, { 0x6648, 106972 }, { 0x66B5, 106976 }, { 0x66B6, 106982 }, { 0x66E2, 106989 }, { 0x6629, 106991 }, { 0x66E3, 106997 }, { 0x668D, 107000 }, { 0x668A, 107004 }, { 0x6696, 107008 }, { 0x6697, 107012 }, { 0x668F, 107016 }, { 0x6693, 107020 }, { 0x6695, 107024 }, { 0x6694, 107030 }, { 0x668E, 107035 }, { 0x65DF, 107040 }, { 0x65F2, 107043 }, { 0x6603, 107049 }, { 0x6604, 107057 }, { 0x65E5, 107065 }, { 0x65FC, 107069 }, { 0x6699, 107075 }, { 0x66C5, 107080 }, { 0x66BB, 107085 }, { 0x66C1, 107090 }, { 0x66C0, 107097 }, { 0x66C2, 107104 }, { 0x66BF, 107111 }, { 0x66BD, 107118 }, { 0x66BE, 107125 }, { 0x66C9, 107132 }, { 0x66C7, 107139 }, { 0x661A, 107146 }, { 0x6619, 107154 }, { 0x66CA, 107162 }, { 0x6616, 107167 }, { 0x6610, 107174 }, { 0x6622, 107181 }, { 0x661B, 107188 }, { 0x66C4, 107195 }, { 0x66C3, 107202 }, { 0x66C6, 107209 }, { 0x65E9, 107214 }, { 0x65EA, 107218 }, { 0x65EB, 107222 }, { 0x65F3, 107227 }, { 0x6605, 107233 }, { 0x65ED, 107241 }, { 0x6606, 107245 }, { 0x65EF, 107253 }, { 0x6600, 107258 }, { 0x6665, 107265 }, { 0x666A, 107270 }, { 0x666B, 107276 }, { 0x6688, 107282 }, { 0x65FD, 107288 }, { 0x6601, 107293 }, { 0x661E, 107299 }, { 0x661D, 107305 }, { 0x6607, 107312 }, { 0x660A, 107318 }, { 0x6609, 107324 }, { 0x6608, 107330 }, { 0x661C, 107336 }, { 0x65F1, 107343 }, { 0x6602, 107348 }, { 0x6683, 107356 }, { 0x65F0, 107361 }, { 0x65F9, 107367 }, { 0x6612, 107372 }, { 0x65FF, 107379 }, { 0x65F4, 107386 }, { 0x65F5, 107391 }, { 0x660C, 107398 }, { 0x660E, 107405 }, { 0x660D, 107413 }, { 0x6613, 107421 }, { 0x65F7, 107428 }, { 0x6614, 107434 }, { 0x65F8, 107442 }, { 0x6611, 107448 }, { 0x65F6, 107456 }, { 0x65E8, 107463 }, { 0x66D4, 107468 }, { 0x66D5, 107471 }, { 0x66DE, 107475 }, { 0x66E1, 107481 }, { 0x66D8, 107488 }, { 0x66D6, 107493 }, { 0x66D7, 107498 }, { 0x66DD, 107503 }, { 0x66E0, 107509 }, { 0x65E7, 107515 }, { 0x66DF, 107521 }, { 0x6672, 107527 }, { 0x66DC, 107533 }, { 0x66DA, 107539 }, { 0x660B, 107545 }, { 0x66DB, 107552 }, { 0x66D9, 107558 }, { 0x6671, 107562 }, { 0x6677, 107566 }, { 0x666D, 107570 }, { 0x6670, 107574 }, { 0x666F, 107580 }, { 0x666E, 107586 }, { 0x667F, 107592 }, { 0x667B, 107596 }, { 0x6679, 107601 }, { 0x6676, 107605 }, { 0x6678, 107610 }, { 0x66A5, 107615 }, { 0x66A8, 107619 }, { 0x65FB, 107625 }, { 0x66A3, 107631 }, { 0x66AC, 107635 }, { 0x661F, 107640 }, { 0x6620, 107648 }, { 0x6621, 107656 }, { 0x6615, 107663 }, { 0x660F, 107670 }, { 0x66AA, 107677 }, { 0x6617, 107682 }, { 0x6618, 107689 }, { 0x66AB, 107696 }, { 0x66A7, 107700 }, { 0x6639, 107705 }, { 0x662B, 107707 }, { 0x662F, 107712 }, { 0x662D, 107718 }, { 0x6631, 107725 }, { 0x6636, 107732 }, { 0x6638, 107738 }, { 0x6637, 107746 }, { 0x6623, 107754 }, { 0x6624, 107758 }, { 0x6625, 107763 }, { 0x6626, 107768 }, { 0x6627, 107773 }, { 0x663B, 107779 }, { 0x662C, 107782 }, { 0x6630, 107788 }, { 0x662E, 107795 }, { 0x663D, 107803 }, { 0x6640, 107808 }, { 0x6641, 107814 }, { 0x6642, 107818 }, { 0x6643, 107824 }, { 0x6644, 107831 }, { 0x663E, 107835 }, { 0x663C, 107839 }, { 0x663F, 107843 }, { 0x663A, 107847 }, { 0x664A, 107852 }, { 0x6698, 107854 }, { 0x669D, 107858 }, { 0x669C, 107864 }, { 0x669E, 107870 }, { 0x66B9, 107876 }, { 0x66B8, 107882 }, { 0x66B7, 107889 }, { 0x66A9, 107896 }, { 0x6649, 107900 }, { 0x6656, 107903 }, { 0x6658, 107905 }, { 0x6635, 107909 }, { 0x6691, 107914 }, { 0x65E2, 107918 }, { 0x6657, 107921 }, { 0x6659, 107925 }, { 0x6674, 107929 }, { 0x6868, 107933 }, { 0x684E, 107935 }, { 0x684B, 107940 }, { 0x684F, 107942 }, { 0x6664, 107947 }, { 0x668C, 107949 }, { 0x6692, 107957 }, { 0x65E4, 107961 }, { 0x66A2, 107964 }, { 0x66A1, 107969 }, { 0x66D3, 107975 }, { 0x66D2, 107979 }, { 0x66D1, 107984 }, { 0x6668, 107989 }, { 0x6687, 107994 }, { 0x6675, 107999 }, { 0x6682, 108003 }, { 0x667E, 108007 }, { 0x667D, 108014 }, { 0x66B3, 108022 }, { 0x66B2, 108027 }, { 0x66B1, 108033 }, { 0x665C, 108039 }, { 0x6661, 108041 }, { 0x6634, 108045 }, { 0x662A, 108051 }, { 0x665A, 108056 }, { 0x6660, 108059 }, { 0x665E, 108064 }, { 0x665B, 108069 }, { 0x6686, 108074 }, { 0x668B, 108077 }, { 0x65E3, 108085 }, { 0x66A0, 108088 }, { 0x66CF, 108093 }, { 0x66CD, 108097 }, { 0x66BC, 108102 }, { 0x66CE, 108107 }, { 0x66D0, 108112 }, { 0x66BA, 108117 }, { 0x6667, 108121 }, { 0x666C, 108126 }, { 0x6685, 108132 }, { 0x665D, 108137 }, { 0x665F, 108140 }, { 0x6662, 108144 }, { 0x6663, 108150 }, { 0x6669, 108156 }, { 0x6681, 108159 }, { 0x667C, 108163 }, { 0x667A, 108168 }, { 0x66A4, 108172 }, { 0x66B0, 108175 }, { 0x6655, 108180 }, { 0x6690, 108182 }, { 0x65E0, 108186 }, { 0x65E6, 108189 }, { 0x669A, 108193 }, { 0x65EC, 108198 }, { 0x65EE, 108202 }, { 0x6666, 108206 }, { 0x6689, 108211 }, { 0x65FE, 108217 }, { 0x6684, 108222 }, { 0x65FA, 108227 }, { 0x6673, 108232 }, { 0x6680, 108236 }, { 0x66A6, 108240 }, { 0x66AD, 108244 }, { 0x66B4, 108249 }, { 0x686A, 108255 }, { 0x6654, 108257 }, { 0x6653, 108259 }, { 0x669B, 108262 }, { 0x66AE, 108268 }, { 0x6700, 108274 }, { 0x6701, 108279 }, { 0x6704, 108284 }, { 0x6705, 108290 }, { 0x6702, 108296 }, { 0x6703, 108300 }, { 0x6706, 108304 }, { 0x6852, 108310 }, { 0x6851, 108314 }, { 0x6853, 108318 }, { 0x6732, 108321 }, { 0x6731, 108326 }, { 0x6733, 108331 }, { 0x6730, 108336 }, { 0x672B, 108339 }, { 0x672A, 108343 }, { 0x672C, 108347 }, { 0x672E, 108351 }, { 0x672D, 108355 }, { 0x672F, 108359 }, { 0x6806, 108363 }, { 0x6808, 108366 }, { 0x6800, 108369 }, { 0x6801, 108372 }, { 0x6802, 108376 }, { 0x6736, 108380 }, { 0x6734, 108384 }, { 0x6735, 108388 }, { 0x6737, 108392 }, { 0x673E, 108396 }, { 0x673C, 108401 }, { 0x673D, 108406 }, { 0x673F, 108411 }, { 0x6742, 108416 }, { 0x6740, 108421 }, { 0x6741, 108426 }, { 0x6743, 108431 }, { 0x673A, 108436 }, { 0x6738, 108440 }, { 0x6739, 108444 }, { 0x673B, 108448 }, { 0x6766, 108452 }, { 0x6764, 108455 }, { 0x6763, 108459 }, { 0x6765, 108463 }, { 0x6761, 108467 }, { 0x6760, 108471 }, { 0x6762, 108475 }, { 0x6807, 108479 }, { 0x6803, 108482 }, { 0x6804, 108485 }, { 0x6805, 108489 }, { 0x685E, 108493 }, { 0x67C4, 108496 }, { 0x67C2, 108502 }, { 0x67C5, 108508 }, { 0x67C3, 108514 }, { 0x6723, 108520 }, { 0x6721, 108524 }, { 0x6722, 108528 }, { 0x6847, 108532 }, { 0x6719, 108535 }, { 0x6717, 108539 }, { 0x6718, 108543 }, { 0x6773, 108547 }, { 0x6771, 108551 }, { 0x6772, 108555 }, { 0x678D, 108559 }, { 0x6786, 108564 }, { 0x6776, 108570 }, { 0x6774, 108574 }, { 0x6777, 108578 }, { 0x6775, 108583 }, { 0x678E, 108587 }, { 0x6787, 108592 }, { 0x677A, 108598 }, { 0x6778, 108604 }, { 0x6779, 108610 }, { 0x677D, 108616 }, { 0x677B, 108622 }, { 0x677C, 108628 }, { 0x678F, 108634 }, { 0x6788, 108639 }, { 0x6795, 108645 }, { 0x6793, 108651 }, { 0x6794, 108657 }, { 0x6720, 108663 }, { 0x671E, 108667 }, { 0x671F, 108671 }, { 0x6712, 108675 }, { 0x677E, 108678 }, { 0x678C, 108683 }, { 0x6785, 108688 }, { 0x6769, 108694 }, { 0x6767, 108699 }, { 0x6768, 108704 }, { 0x676A, 108709 }, { 0x676D, 108714 }, { 0x676B, 108719 }, { 0x676C, 108724 }, { 0x676E, 108729 }, { 0x676F, 108734 }, { 0x6770, 108740 }, { 0x6729, 108746 }, { 0x6727, 108750 }, { 0x6728, 108754 }, { 0x67CD, 108758 }, { 0x67CC, 108764 }, { 0x671C, 108770 }, { 0x671A, 108774 }, { 0x671B, 108778 }, { 0x671D, 108782 }, { 0x677F, 108786 }, { 0x6780, 108791 }, { 0x670F, 108796 }, { 0x670E, 108801 }, { 0x6710, 108805 }, { 0x6711, 108809 }, { 0x67D1, 108815 }, { 0x67D0, 108820 }, { 0x6707, 108825 }, { 0x670D, 108829 }, { 0x670B, 108834 }, { 0x6709, 108839 }, { 0x670A, 108844 }, { 0x670C, 108849 }, { 0x6714, 108854 }, { 0x6713, 108859 }, { 0x6715, 108864 }, { 0x6716, 108868 }, { 0x6726, 108874 }, { 0x6724, 108878 }, { 0x6725, 108882 }, { 0x6784, 108886 }, { 0x6782, 108889 }, { 0x6791, 108892 }, { 0x678A, 108897 }, { 0x6781, 108903 }, { 0x6790, 108906 }, { 0x6789, 108911 }, { 0x6783, 108917 }, { 0x6792, 108920 }, { 0x678B, 108925 }, { 0x685F, 108931 }, { 0x67CB, 108934 }, { 0x67C8, 108942 }, { 0x67C9, 108950 }, { 0x67C6, 108958 }, { 0x67CA, 108966 }, { 0x67C7, 108974 }, { 0x6759, 108982 }, { 0x6757, 108986 }, { 0x6758, 108990 }, { 0x6848, 108994 }, { 0x6752, 108997 }, { 0x67B9, 109000 }, { 0x67A8, 109004 }, { 0x67A7, 109011 }, { 0x67AA, 109018 }, { 0x67A9, 109026 }, { 0x6799, 109034 }, { 0x679B, 109041 }, { 0x6798, 109048 }, { 0x679A, 109055 }, { 0x67BA, 109062 }, { 0x67AE, 109066 }, { 0x67AC, 109073 }, { 0x67AD, 109080 }, { 0x67AB, 109087 }, { 0x679F, 109094 }, { 0x679D, 109101 }, { 0x679E, 109108 }, { 0x679C, 109115 }, { 0x67BD, 109122 }, { 0x67BC, 109126 }, { 0x67BB, 109130 }, { 0x67B0, 109134 }, { 0x67AF, 109140 }, { 0x67A1, 109146 }, { 0x67A0, 109152 }, { 0x6756, 109158 }, { 0x674D, 109161 }, { 0x67B6, 109164 }, { 0x67B4, 109168 }, { 0x67B5, 109172 }, { 0x67A6, 109176 }, { 0x67A5, 109182 }, { 0x6797, 109188 }, { 0x6796, 109194 }, { 0x67B7, 109200 }, { 0x67B8, 109204 }, { 0x675F, 109208 }, { 0x675D, 109212 }, { 0x675E, 109216 }, { 0x67CF, 109220 }, { 0x67CE, 109227 }, { 0x6755, 109234 }, { 0x6753, 109238 }, { 0x6754, 109242 }, { 0x674A, 109246 }, { 0x6749, 109251 }, { 0x674B, 109255 }, { 0x674C, 109259 }, { 0x67D3, 109265 }, { 0x67D2, 109272 }, { 0x6708, 109279 }, { 0x6748, 109283 }, { 0x6746, 109288 }, { 0x6744, 109293 }, { 0x6745, 109298 }, { 0x6747, 109303 }, { 0x674F, 109308 }, { 0x674E, 109313 }, { 0x6751, 109318 }, { 0x6750, 109324 }, { 0x675C, 109329 }, { 0x675A, 109333 }, { 0x675B, 109337 }, { 0x67C1, 109341 }, { 0x67BF, 109345 }, { 0x67B2, 109348 }, { 0x67A3, 109353 }, { 0x67BE, 109358 }, { 0x67B1, 109361 }, { 0x67A2, 109366 }, { 0x67C0, 109371 }, { 0x67B3, 109374 }, { 0x67A4, 109379 }, { 0x6CFD, 109384 }, { 0x0078, 109385 }, { 0x1C27, 109387 }, { 0x0071, 109389 }, { 0x1C26, 109391 }, { 0x1C25, 109393 }, { 0x1C2E, 109395 }, { 0x1C2A, 109398 }, { 0x1C2B, 109400 }, { 0x1C23, 109403 }, { 0x1C29, 109405 }, { 0x1C24, 109407 }, { 0x1C30, 109412 }, { 0x1C2C, 109417 }, { 0x1C2F, 109419 }, { 0x1C28, 109422 }, { 0x0072, 109424 }, { 0x1C2D, 109426 }, { 0x6C5C, 109429 }, { 0x2635, 109430 }, { 0x2723, 109432 }, { 0x6E75, 109434 }, { 0x6E77, 109437 }, { 0x7016, 109441 }, { 0x7015, 109444 }, { 0x7014, 109446 }, { 0x2147, 109449 }, { 0x2148, 109455 }, { 0x6F7E, 109461 }, { 0x6F0C, 109463 }, { 0x1CA5, 109464 }, { 0x7146, 109467 }, { 0x715E, 109472 }, { 0x7156, 109479 }, { 0x713E, 109485 }, { 0x714E, 109491 }, { 0x7145, 109497 }, { 0x715D, 109502 }, { 0x7155, 109509 }, { 0x713D, 109515 }, { 0x714D, 109521 }, { 0x7147, 109527 }, { 0x715F, 109532 }, { 0x7157, 109539 }, { 0x713F, 109545 }, { 0x714F, 109551 }, { 0x7148, 109557 }, { 0x7160, 109562 }, { 0x7158, 109569 }, { 0x7140, 109575 }, { 0x7150, 109581 }, { 0x7142, 109587 }, { 0x715A, 109591 }, { 0x7152, 109597 }, { 0x713A, 109602 }, { 0x714A, 109607 }, { 0x7144, 109612 }, { 0x715C, 109616 }, { 0x7154, 109622 }, { 0x713C, 109627 }, { 0x714C, 109632 }, { 0x7141, 109637 }, { 0x7159, 109641 }, { 0x7151, 109647 }, { 0x7139, 109652 }, { 0x7149, 109657 }, { 0x7143, 109662 }, { 0x715B, 109666 }, { 0x7153, 109672 }, { 0x713B, 109677 }, { 0x714B, 109682 }, { 0x1CDA, 109687 }, { 0x2599, 109688 }, { 0x05A0, 109691 }, { 0x059F, 109696 }, { 0x059C, 109700 }, { 0x05F6, 109703 }, { 0x05FB, 109706 }, { 0x05F7, 109709 }, { 0x05FA, 109712 }, { 0x05F9, 109715 }, { 0x05FE, 109718 }, { 0x05F5, 109721 }, { 0x05FD, 109724 }, { 0x05FC, 109727 }, { 0x05F8, 109730 }, { 0x059D, 109733 }, { 0x223C, 109736 }, { 0x1CBA, 109740 }, { 0x1C99, 109743 }, { 0x1C9E, 109746 }, { 0x1CA9, 109749 }, { 0x1CB5, 109752 }, { 0x6F14, 109755 }, { 0x6FE2, 109757 }, { 0x6DB2, 109759 }, { 0x1EB6, 109761 }, { 0x6F60, 109762 }, { 0x6F59, 109766 }, { 0x2539, 109768 }, { 0x254D, 109770 }, { 0x2549, 109773 }, { 0x254B, 109776 }, { 0x254C, 109779 }, { 0x2548, 109782 }, { 0x254A, 109785 }, { 0x21F6, 109788 }, { 0x6D60, 109789 }, { 0x2306, 109792 }, { 0x1DEE, 109797 }, { 0x25D8, 109801 }, { 0x25DC, 109806 }, { 0x25DE, 109814 }, { 0x25DA, 109823 }, { 0x1E00, 109831 }, { 0x1DFC, 109834 }, { 0x25E0, 109838 }, { 0x25E4, 109841 }, { 0x25E2, 109845 }, { 0x1DF2, 109851 }, { 0x1E70, 109856 }, { 0x1DF0, 109861 }, { 0x001E, 109865 }, { 0x1E60, 109867 }, { 0x25D4, 109870 }, { 0x25D6, 109874 }, { 0x25E8, 109879 }, { 0x25EA, 109884 }, { 0x25EE, 109889 }, { 0x25EC, 109898 }, { 0x24D2, 109904 }, { 0x25E6, 109908 }, { 0x1E64, 109914 }, { 0x25FF, 109919 }, { 0x2601, 109922 }, { 0x2603, 109926 }, { 0x25FE, 109933 }, { 0x6F84, 109936 }, { 0x000D, 109938 }, { 0x2905, 109939 }, { 0x1DB2, 109940 }, { 0x259A, 109941 }, { 0x259E, 109944 }, { 0x259D, 109948 }, { 0x25A3, 109951 }, { 0x25A1, 109956 }, { 0x25A5, 109959 }, { 0x64C2, 109965 }, { 0x64C0, 109969 }, { 0x64C1, 109973 }, { 0x65AE, 109977 }, { 0x65B3, 109981 }, { 0x65AF, 109985 }, { 0x65B2, 109989 }, { 0x65B1, 109993 }, { 0x65B6, 109997 }, { 0x65AD, 110001 }, { 0x65B5, 110005 }, { 0x65B4, 110009 }, { 0x65B0, 110013 }, { 0x64BF, 110017 }, { 0x64A2, 110021 }, { 0x6215, 110024 }, { 0x6216, 110028 }, { 0x6217, 110032 }, { 0x6218, 110036 }, { 0x6219, 110040 }, { 0x621A, 110044 }, { 0x621B, 110048 }, { 0x621C, 110052 }, { 0x621D, 110056 }, { 0x621E, 110060 }, { 0x621F, 110064 }, { 0x6220, 110068 }, { 0x6221, 110072 }, { 0x6222, 110076 }, { 0x6223, 110080 }, { 0x6224, 110084 }, { 0x6225, 110088 }, { 0x6226, 110092 }, { 0x6227, 110096 }, { 0x6228, 110100 }, { 0x6229, 110104 }, { 0x622A, 110108 }, { 0x622B, 110112 }, { 0x622C, 110116 }, { 0x622D, 110120 }, { 0x622E, 110124 }, { 0x64AE, 110128 }, { 0x64AF, 110132 }, { 0x64B2, 110136 }, { 0x64B0, 110140 }, { 0x64B9, 110144 }, { 0x64A9, 110148 }, { 0x64B8, 110152 }, { 0x64BA, 110156 }, { 0x64B3, 110160 }, { 0x64B6, 110164 }, { 0x64A4, 110168 }, { 0x64AB, 110172 }, { 0x64A8, 110176 }, { 0x64A3, 110180 }, { 0x64A6, 110184 }, { 0x64B4, 110188 }, { 0x64A5, 110193 }, { 0x64AC, 110197 }, { 0x64AD, 110201 }, { 0x64BB, 110205 }, { 0x64B5, 110209 }, { 0x64AA, 110213 }, { 0x65AC, 110217 }, { 0x64A7, 110221 }, { 0x64B1, 110225 }, { 0x64B7, 110229 }, { 0x64BE, 110233 }, { 0x6536, 110237 }, { 0x6534, 110242 }, { 0x6535, 110247 }, { 0x6533, 110252 }, { 0x6516, 110257 }, { 0x627C, 110261 }, { 0x627D, 110266 }, { 0x627E, 110271 }, { 0x627F, 110276 }, { 0x6280, 110281 }, { 0x6281, 110286 }, { 0x6282, 110291 }, { 0x6283, 110296 }, { 0x6284, 110301 }, { 0x6285, 110306 }, { 0x6286, 110311 }, { 0x6287, 110316 }, { 0x6288, 110321 }, { 0x6289, 110326 }, { 0x628A, 110331 }, { 0x628B, 110336 }, { 0x628C, 110341 }, { 0x628D, 110346 }, { 0x628E, 110351 }, { 0x628F, 110356 }, { 0x6290, 110361 }, { 0x6291, 110366 }, { 0x6292, 110371 }, { 0x6293, 110376 }, { 0x6294, 110381 }, { 0x6295, 110386 }, { 0x6522, 110391 }, { 0x6523, 110396 }, { 0x6526, 110401 }, { 0x6524, 110406 }, { 0x652D, 110411 }, { 0x651D, 110416 }, { 0x652C, 110421 }, { 0x652E, 110426 }, { 0x6527, 110431 }, { 0x652A, 110436 }, { 0x6518, 110441 }, { 0x651F, 110446 }, { 0x651C, 110451 }, { 0x6517, 110456 }, { 0x651A, 110461 }, { 0x6528, 110466 }, { 0x6519, 110472 }, { 0x6520, 110477 }, { 0x6521, 110482 }, { 0x652F, 110487 }, { 0x6529, 110492 }, { 0x651E, 110497 }, { 0x651B, 110502 }, { 0x6525, 110507 }, { 0x652B, 110512 }, { 0x6532, 110517 }, { 0x6262, 110522 }, { 0x6263, 110527 }, { 0x6264, 110532 }, { 0x6265, 110537 }, { 0x6266, 110542 }, { 0x6267, 110547 }, { 0x6268, 110552 }, { 0x6269, 110557 }, { 0x626A, 110562 }, { 0x626B, 110567 }, { 0x626C, 110572 }, { 0x626D, 110577 }, { 0x626E, 110582 }, { 0x626F, 110587 }, { 0x6270, 110592 }, { 0x6271, 110597 }, { 0x6272, 110602 }, { 0x6273, 110607 }, { 0x6274, 110612 }, { 0x6275, 110617 }, { 0x6276, 110622 }, { 0x6277, 110627 }, { 0x6278, 110632 }, { 0x6279, 110637 }, { 0x627A, 110642 }, { 0x627B, 110647 }, { 0x6508, 110652 }, { 0x6509, 110657 }, { 0x650C, 110662 }, { 0x650A, 110667 }, { 0x6513, 110672 }, { 0x6503, 110677 }, { 0x6512, 110682 }, { 0x6514, 110687 }, { 0x650D, 110692 }, { 0x6510, 110697 }, { 0x64FE, 110702 }, { 0x6505, 110707 }, { 0x6502, 110712 }, { 0x64FD, 110717 }, { 0x6500, 110722 }, { 0x64FF, 110727 }, { 0x6506, 110732 }, { 0x6507, 110737 }, { 0x6515, 110742 }, { 0x650F, 110747 }, { 0x6504, 110752 }, { 0x650E, 110757 }, { 0x6501, 110763 }, { 0x650B, 110768 }, { 0x6511, 110773 }, { 0x6531, 110778 }, { 0x6530, 110783 }, { 0x62D9, 110788 }, { 0x62DA, 110793 }, { 0x62DB, 110798 }, { 0x62DC, 110803 }, { 0x62DD, 110808 }, { 0x62DE, 110813 }, { 0x62DF, 110818 }, { 0x62E0, 110823 }, { 0x62E1, 110828 }, { 0x62E2, 110833 }, { 0x62E3, 110838 }, { 0x62E4, 110843 }, { 0x62E5, 110848 }, { 0x62E6, 110853 }, { 0x62E7, 110858 }, { 0x62E8, 110863 }, { 0x62E9, 110868 }, { 0x62EA, 110873 }, { 0x62EB, 110878 }, { 0x62EC, 110883 }, { 0x62ED, 110888 }, { 0x62EE, 110893 }, { 0x62EF, 110898 }, { 0x62F0, 110903 }, { 0x62F1, 110908 }, { 0x62F2, 110913 }, { 0x62BF, 110918 }, { 0x62C0, 110923 }, { 0x62C1, 110928 }, { 0x62C2, 110933 }, { 0x62C3, 110938 }, { 0x62C4, 110943 }, { 0x62C5, 110948 }, { 0x62C6, 110953 }, { 0x62C7, 110958 }, { 0x62C8, 110963 }, { 0x62C9, 110968 }, { 0x62CA, 110973 }, { 0x62CB, 110978 }, { 0x62CC, 110983 }, { 0x62CD, 110988 }, { 0x62CE, 110993 }, { 0x62CF, 110998 }, { 0x62D0, 111003 }, { 0x62D1, 111008 }, { 0x62D2, 111013 }, { 0x62D3, 111018 }, { 0x62D4, 111023 }, { 0x62D5, 111028 }, { 0x62D6, 111033 }, { 0x62D7, 111038 }, { 0x62D8, 111043 }, { 0x61FB, 111048 }, { 0x61FC, 111052 }, { 0x61FD, 111056 }, { 0x61FE, 111060 }, { 0x61FF, 111064 }, { 0x6200, 111068 }, { 0x6201, 111072 }, { 0x6202, 111076 }, { 0x6203, 111080 }, { 0x6204, 111084 }, { 0x6205, 111088 }, { 0x6206, 111092 }, { 0x6207, 111096 }, { 0x6208, 111100 }, { 0x6209, 111104 }, { 0x620A, 111108 }, { 0x620B, 111112 }, { 0x620C, 111116 }, { 0x620D, 111120 }, { 0x620E, 111124 }, { 0x620F, 111128 }, { 0x6210, 111132 }, { 0x6211, 111136 }, { 0x6212, 111140 }, { 0x6213, 111144 }, { 0x6214, 111148 }, { 0x6494, 111152 }, { 0x6495, 111156 }, { 0x6498, 111160 }, { 0x6496, 111164 }, { 0x649F, 111168 }, { 0x648F, 111172 }, { 0x649E, 111176 }, { 0x64A0, 111180 }, { 0x6499, 111184 }, { 0x649C, 111188 }, { 0x648A, 111192 }, { 0x6491, 111196 }, { 0x648E, 111200 }, { 0x6489, 111204 }, { 0x648C, 111208 }, { 0x648B, 111212 }, { 0x6492, 111216 }, { 0x6493, 111220 }, { 0x64A1, 111224 }, { 0x649B, 111228 }, { 0x6490, 111232 }, { 0x649A, 111236 }, { 0x65AB, 111241 }, { 0x648D, 111245 }, { 0x6497, 111249 }, { 0x649D, 111253 }, { 0x64BD, 111257 }, { 0x6369, 111261 }, { 0x636A, 111266 }, { 0x636B, 111271 }, { 0x636C, 111276 }, { 0x636D, 111281 }, { 0x636E, 111286 }, { 0x636F, 111291 }, { 0x6370, 111296 }, { 0x6371, 111301 }, { 0x6372, 111306 }, { 0x6373, 111311 }, { 0x6374, 111316 }, { 0x6375, 111321 }, { 0x6376, 111326 }, { 0x6377, 111331 }, { 0x6378, 111336 }, { 0x6379, 111341 }, { 0x637A, 111346 }, { 0x637B, 111351 }, { 0x637C, 111356 }, { 0x637D, 111361 }, { 0x637E, 111366 }, { 0x637F, 111371 }, { 0x6380, 111376 }, { 0x6381, 111381 }, { 0x6382, 111386 }, { 0x634F, 111391 }, { 0x6350, 111396 }, { 0x6351, 111401 }, { 0x6352, 111406 }, { 0x6353, 111411 }, { 0x6354, 111416 }, { 0x6355, 111421 }, { 0x6356, 111426 }, { 0x6357, 111431 }, { 0x6358, 111436 }, { 0x6359, 111441 }, { 0x635A, 111446 }, { 0x635B, 111451 }, { 0x635C, 111456 }, { 0x635D, 111461 }, { 0x635E, 111466 }, { 0x635F, 111471 }, { 0x6360, 111476 }, { 0x6361, 111481 }, { 0x6362, 111486 }, { 0x6363, 111491 }, { 0x6364, 111496 }, { 0x6365, 111501 }, { 0x6366, 111506 }, { 0x6367, 111511 }, { 0x6368, 111516 }, { 0x64BC, 111521 }, { 0x2342, 111525 }, { 0x2340, 111529 }, { 0x2346, 111534 }, { 0x2344, 111540 }, { 0x2348, 111545 }, { 0x2343, 111549 }, { 0x2341, 111553 }, { 0x2347, 111558 }, { 0x2345, 111564 }, { 0x2349, 111569 }, { 0x64FC, 111573 }, { 0x64FA, 111577 }, { 0x64FB, 111581 }, { 0x64F9, 111585 }, { 0x64DC, 111589 }, { 0x6249, 111592 }, { 0x624A, 111596 }, { 0x624B, 111600 }, { 0x624C, 111604 }, { 0x624D, 111608 }, { 0x624E, 111612 }, { 0x624F, 111616 }, { 0x6250, 111620 }, { 0x6251, 111624 }, { 0x6252, 111628 }, { 0x6253, 111632 }, { 0x6254, 111636 }, { 0x6255, 111640 }, { 0x6256, 111644 }, { 0x6257, 111648 }, { 0x6258, 111652 }, { 0x6259, 111656 }, { 0x625A, 111660 }, { 0x625B, 111664 }, { 0x625C, 111668 }, { 0x625D, 111672 }, { 0x625E, 111676 }, { 0x625F, 111680 }, { 0x6260, 111684 }, { 0x6261, 111688 }, { 0x64E8, 111692 }, { 0x64E9, 111696 }, { 0x64EC, 111700 }, { 0x64EA, 111704 }, { 0x64F3, 111708 }, { 0x64E3, 111712 }, { 0x64F2, 111716 }, { 0x64F4, 111720 }, { 0x64ED, 111724 }, { 0x64F0, 111728 }, { 0x64DE, 111732 }, { 0x64E5, 111736 }, { 0x64E2, 111740 }, { 0x64DD, 111744 }, { 0x64E0, 111748 }, { 0x64EE, 111752 }, { 0x64DF, 111757 }, { 0x64E6, 111761 }, { 0x64E7, 111765 }, { 0x64F5, 111769 }, { 0x64EF, 111773 }, { 0x64E4, 111777 }, { 0x6487, 111781 }, { 0x6488, 111786 }, { 0x64E1, 111791 }, { 0x64EB, 111795 }, { 0x64F1, 111799 }, { 0x64F8, 111803 }, { 0x622F, 111807 }, { 0x6230, 111811 }, { 0x6231, 111815 }, { 0x6232, 111819 }, { 0x6233, 111823 }, { 0x6234, 111827 }, { 0x6235, 111831 }, { 0x6236, 111835 }, { 0x6237, 111839 }, { 0x6238, 111843 }, { 0x6239, 111847 }, { 0x623A, 111851 }, { 0x623B, 111855 }, { 0x623C, 111859 }, { 0x623D, 111863 }, { 0x623E, 111867 }, { 0x623F, 111871 }, { 0x6240, 111875 }, { 0x6241, 111879 }, { 0x6242, 111883 }, { 0x6243, 111887 }, { 0x6244, 111891 }, { 0x6245, 111895 }, { 0x6246, 111899 }, { 0x6247, 111903 }, { 0x6248, 111907 }, { 0x64CE, 111911 }, { 0x64CF, 111915 }, { 0x64D2, 111919 }, { 0x64D0, 111923 }, { 0x64D9, 111927 }, { 0x64C9, 111931 }, { 0x64D8, 111935 }, { 0x64DA, 111939 }, { 0x64D3, 111943 }, { 0x64D6, 111947 }, { 0x64C4, 111951 }, { 0x64CB, 111955 }, { 0x64C8, 111959 }, { 0x64C3, 111963 }, { 0x64C6, 111967 }, { 0x64C5, 111971 }, { 0x64CC, 111975 }, { 0x64CD, 111979 }, { 0x64DB, 111983 }, { 0x64D5, 111987 }, { 0x64CA, 111991 }, { 0x64D4, 111995 }, { 0x64C7, 112000 }, { 0x64D1, 112004 }, { 0x64D7, 112008 }, { 0x64F7, 112012 }, { 0x64F6, 112016 }, { 0x2325, 112020 }, { 0x62A8, 112023 }, { 0x62A9, 112027 }, { 0x62AA, 112031 }, { 0x62AB, 112035 }, { 0x62AC, 112039 }, { 0x62AD, 112043 }, { 0x62AE, 112047 }, { 0x62AF, 112051 }, { 0x62B0, 112055 }, { 0x62B1, 112059 }, { 0x62B2, 112063 }, { 0x62B3, 112067 }, { 0x62B4, 112071 }, { 0x62B5, 112075 }, { 0x62B6, 112079 }, { 0x62B7, 112083 }, { 0x62B8, 112087 }, { 0x62B9, 112091 }, { 0x62BA, 112095 }, { 0x62BB, 112099 }, { 0x62BC, 112103 }, { 0x62BD, 112107 }, { 0x62BE, 112111 }, { 0x6296, 112115 }, { 0x6297, 112119 }, { 0x6298, 112123 }, { 0x6299, 112127 }, { 0x629A, 112131 }, { 0x629B, 112135 }, { 0x629C, 112139 }, { 0x629D, 112143 }, { 0x629E, 112147 }, { 0x629F, 112151 }, { 0x62A0, 112155 }, { 0x62A1, 112159 }, { 0x62A2, 112163 }, { 0x62A3, 112167 }, { 0x62A4, 112171 }, { 0x62A5, 112175 }, { 0x62A6, 112179 }, { 0x62A7, 112183 }, { 0x2327, 112187 }, { 0x6308, 112190 }, { 0x6309, 112194 }, { 0x630A, 112198 }, { 0x630B, 112202 }, { 0x630C, 112206 }, { 0x630D, 112210 }, { 0x630E, 112214 }, { 0x630F, 112218 }, { 0x6310, 112222 }, { 0x6311, 112226 }, { 0x6312, 112230 }, { 0x6313, 112234 }, { 0x6314, 112238 }, { 0x6315, 112242 }, { 0x6316, 112246 }, { 0x6317, 112250 }, { 0x6318, 112254 }, { 0x6319, 112258 }, { 0x631A, 112262 }, { 0x631B, 112266 }, { 0x631C, 112270 }, { 0x631D, 112274 }, { 0x631E, 112278 }, { 0x631F, 112282 }, { 0x6320, 112286 }, { 0x6321, 112290 }, { 0x62F3, 112294 }, { 0x62F4, 112298 }, { 0x62F5, 112302 }, { 0x62F6, 112306 }, { 0x62F7, 112310 }, { 0x62F8, 112314 }, { 0x62F9, 112318 }, { 0x62FA, 112322 }, { 0x62FB, 112326 }, { 0x62FC, 112330 }, { 0x62FD, 112334 }, { 0x62FE, 112338 }, { 0x62FF, 112342 }, { 0x6300, 112346 }, { 0x6301, 112350 }, { 0x6302, 112354 }, { 0x6303, 112358 }, { 0x6304, 112362 }, { 0x6305, 112366 }, { 0x6306, 112370 }, { 0x6307, 112374 }, { 0x65D6, 112378 }, { 0x65DB, 112382 }, { 0x65D7, 112386 }, { 0x65DA, 112390 }, { 0x65D9, 112394 }, { 0x65DE, 112398 }, { 0x65D5, 112402 }, { 0x65DD, 112406 }, { 0x65DC, 112410 }, { 0x65D8, 112414 }, { 0x646D, 112418 }, { 0x646E, 112422 }, { 0x646F, 112426 }, { 0x6470, 112430 }, { 0x6471, 112434 }, { 0x6472, 112438 }, { 0x6473, 112442 }, { 0x6474, 112446 }, { 0x6475, 112450 }, { 0x6476, 112454 }, { 0x6477, 112458 }, { 0x6478, 112462 }, { 0x6479, 112466 }, { 0x647A, 112470 }, { 0x647B, 112474 }, { 0x647C, 112478 }, { 0x647D, 112482 }, { 0x647E, 112486 }, { 0x647F, 112490 }, { 0x6480, 112494 }, { 0x6481, 112498 }, { 0x6482, 112502 }, { 0x6483, 112506 }, { 0x6484, 112510 }, { 0x6485, 112514 }, { 0x6486, 112518 }, { 0x6453, 112522 }, { 0x6454, 112526 }, { 0x6455, 112530 }, { 0x6456, 112534 }, { 0x6457, 112538 }, { 0x6458, 112542 }, { 0x6459, 112546 }, { 0x645A, 112550 }, { 0x645B, 112554 }, { 0x645C, 112558 }, { 0x645D, 112562 }, { 0x645E, 112566 }, { 0x645F, 112570 }, { 0x6460, 112574 }, { 0x6461, 112578 }, { 0x6462, 112582 }, { 0x6463, 112586 }, { 0x6464, 112590 }, { 0x6465, 112594 }, { 0x6466, 112598 }, { 0x6467, 112602 }, { 0x6468, 112606 }, { 0x6469, 112610 }, { 0x646A, 112614 }, { 0x646B, 112618 }, { 0x646C, 112622 }, { 0x6570, 112626 }, { 0x656E, 112631 }, { 0x656F, 112636 }, { 0x65CC, 112641 }, { 0x65D1, 112646 }, { 0x65CD, 112651 }, { 0x65D0, 112656 }, { 0x65CF, 112661 }, { 0x65D4, 112666 }, { 0x65CB, 112671 }, { 0x65D3, 112676 }, { 0x65D2, 112681 }, { 0x65CE, 112686 }, { 0x656D, 112691 }, { 0x6550, 112696 }, { 0x63D1, 112700 }, { 0x63D2, 112705 }, { 0x63D3, 112710 }, { 0x63D4, 112715 }, { 0x63D5, 112720 }, { 0x63D6, 112725 }, { 0x63D7, 112730 }, { 0x63D8, 112735 }, { 0x63D9, 112740 }, { 0x63DA, 112745 }, { 0x63DB, 112750 }, { 0x63DC, 112755 }, { 0x63DD, 112760 }, { 0x63DE, 112765 }, { 0x63DF, 112770 }, { 0x63E0, 112775 }, { 0x63E1, 112780 }, { 0x63E2, 112785 }, { 0x63E3, 112790 }, { 0x63E4, 112795 }, { 0x63E5, 112800 }, { 0x63E6, 112805 }, { 0x63E7, 112810 }, { 0x63E8, 112815 }, { 0x63E9, 112820 }, { 0x63EA, 112825 }, { 0x655C, 112830 }, { 0x655D, 112835 }, { 0x6560, 112840 }, { 0x655E, 112845 }, { 0x6567, 112850 }, { 0x6557, 112855 }, { 0x6566, 112860 }, { 0x6568, 112865 }, { 0x6561, 112870 }, { 0x6564, 112875 }, { 0x6552, 112880 }, { 0x6559, 112885 }, { 0x6556, 112890 }, { 0x6551, 112895 }, { 0x6554, 112900 }, { 0x6562, 112905 }, { 0x6553, 112911 }, { 0x655A, 112916 }, { 0x655B, 112921 }, { 0x6569, 112926 }, { 0x6563, 112931 }, { 0x6558, 112936 }, { 0x6555, 112941 }, { 0x655F, 112946 }, { 0x6565, 112951 }, { 0x656C, 112956 }, { 0x65AA, 112961 }, { 0x65A8, 112967 }, { 0x65A9, 112973 }, { 0x65A7, 112979 }, { 0x658A, 112985 }, { 0x6439, 112990 }, { 0x643A, 112996 }, { 0x643B, 113002 }, { 0x643C, 113008 }, { 0x643D, 113014 }, { 0x643E, 113020 }, { 0x643F, 113026 }, { 0x6440, 113032 }, { 0x6441, 113038 }, { 0x6442, 113044 }, { 0x6443, 113050 }, { 0x6444, 113056 }, { 0x6445, 113062 }, { 0x6446, 113068 }, { 0x6447, 113074 }, { 0x6448, 113080 }, { 0x6449, 113086 }, { 0x644A, 113092 }, { 0x644B, 113098 }, { 0x644C, 113104 }, { 0x644D, 113110 }, { 0x644E, 113116 }, { 0x644F, 113122 }, { 0x6450, 113128 }, { 0x6451, 113134 }, { 0x6452, 113140 }, { 0x6596, 113146 }, { 0x6597, 113152 }, { 0x659A, 113158 }, { 0x6598, 113164 }, { 0x65A1, 113170 }, { 0x6591, 113176 }, { 0x65A0, 113182 }, { 0x65A2, 113188 }, { 0x659B, 113194 }, { 0x659E, 113200 }, { 0x658C, 113206 }, { 0x6593, 113212 }, { 0x6590, 113218 }, { 0x658B, 113224 }, { 0x658E, 113230 }, { 0x659C, 113236 }, { 0x658D, 113243 }, { 0x6594, 113249 }, { 0x6595, 113255 }, { 0x65A3, 113261 }, { 0x659D, 113267 }, { 0x6592, 113273 }, { 0x658F, 113279 }, { 0x6599, 113285 }, { 0x659F, 113291 }, { 0x65A6, 113297 }, { 0x641F, 113303 }, { 0x6420, 113309 }, { 0x6421, 113315 }, { 0x6422, 113321 }, { 0x6423, 113327 }, { 0x6424, 113333 }, { 0x6425, 113339 }, { 0x6426, 113345 }, { 0x6427, 113351 }, { 0x6428, 113357 }, { 0x6429, 113363 }, { 0x642A, 113369 }, { 0x642B, 113375 }, { 0x642C, 113381 }, { 0x642D, 113387 }, { 0x642E, 113393 }, { 0x642F, 113399 }, { 0x6430, 113405 }, { 0x6431, 113411 }, { 0x6432, 113417 }, { 0x6433, 113423 }, { 0x6434, 113429 }, { 0x6435, 113435 }, { 0x6436, 113441 }, { 0x6437, 113447 }, { 0x6438, 113453 }, { 0x657C, 113459 }, { 0x657D, 113465 }, { 0x6580, 113471 }, { 0x657E, 113477 }, { 0x6587, 113483 }, { 0x6577, 113489 }, { 0x6586, 113495 }, { 0x6588, 113501 }, { 0x6581, 113507 }, { 0x6584, 113513 }, { 0x6572, 113519 }, { 0x6579, 113525 }, { 0x6576, 113531 }, { 0x6571, 113537 }, { 0x6574, 113543 }, { 0x6573, 113549 }, { 0x657A, 113555 }, { 0x657B, 113561 }, { 0x6589, 113567 }, { 0x6583, 113573 }, { 0x6578, 113579 }, { 0x6582, 113585 }, { 0x6575, 113592 }, { 0x657F, 113598 }, { 0x6585, 113604 }, { 0x65A5, 113610 }, { 0x65A4, 113616 }, { 0x63B7, 113622 }, { 0x63B8, 113627 }, { 0x63B9, 113632 }, { 0x63BA, 113637 }, { 0x63BB, 113642 }, { 0x63BC, 113647 }, { 0x63BD, 113652 }, { 0x63BE, 113657 }, { 0x63BF, 113662 }, { 0x63C0, 113667 }, { 0x63C1, 113672 }, { 0x63C2, 113677 }, { 0x63C3, 113682 }, { 0x63C4, 113687 }, { 0x63C5, 113692 }, { 0x63C6, 113697 }, { 0x63C7, 113702 }, { 0x63C8, 113707 }, { 0x63C9, 113712 }, { 0x63CA, 113717 }, { 0x63CB, 113722 }, { 0x63CC, 113727 }, { 0x63CD, 113732 }, { 0x63CE, 113737 }, { 0x63CF, 113742 }, { 0x63D0, 113747 }, { 0x6542, 113752 }, { 0x6543, 113757 }, { 0x6546, 113762 }, { 0x6544, 113767 }, { 0x654D, 113772 }, { 0x653D, 113777 }, { 0x654C, 113782 }, { 0x654E, 113787 }, { 0x6547, 113792 }, { 0x654A, 113797 }, { 0x6538, 113802 }, { 0x653F, 113807 }, { 0x653C, 113812 }, { 0x6537, 113817 }, { 0x653A, 113822 }, { 0x6539, 113827 }, { 0x6540, 113832 }, { 0x6541, 113837 }, { 0x654F, 113842 }, { 0x6549, 113847 }, { 0x653E, 113852 }, { 0x6548, 113857 }, { 0x653B, 113863 }, { 0x6545, 113868 }, { 0x654B, 113873 }, { 0x656B, 113878 }, { 0x656A, 113883 }, { 0x65C2, 113888 }, { 0x65C7, 113892 }, { 0x65C3, 113896 }, { 0x65C6, 113900 }, { 0x65C5, 113904 }, { 0x65CA, 113908 }, { 0x65C1, 113912 }, { 0x65C9, 113916 }, { 0x65C8, 113920 }, { 0x65C4, 113924 }, { 0x639D, 113928 }, { 0x639E, 113932 }, { 0x639F, 113936 }, { 0x63A0, 113940 }, { 0x63A1, 113944 }, { 0x63A2, 113948 }, { 0x63A3, 113952 }, { 0x63A4, 113956 }, { 0x63A5, 113960 }, { 0x63A6, 113964 }, { 0x63A7, 113968 }, { 0x63A8, 113972 }, { 0x63A9, 113976 }, { 0x63AA, 113980 }, { 0x63AB, 113984 }, { 0x63AC, 113988 }, { 0x63AD, 113992 }, { 0x63AE, 113996 }, { 0x63AF, 114000 }, { 0x63B0, 114004 }, { 0x63B1, 114008 }, { 0x63B2, 114012 }, { 0x63B3, 114016 }, { 0x63B4, 114020 }, { 0x63B5, 114024 }, { 0x63B6, 114028 }, { 0x6405, 114032 }, { 0x6406, 114037 }, { 0x6407, 114042 }, { 0x6408, 114047 }, { 0x6409, 114052 }, { 0x640A, 114057 }, { 0x640B, 114062 }, { 0x640C, 114067 }, { 0x640D, 114072 }, { 0x640E, 114077 }, { 0x640F, 114082 }, { 0x6410, 114087 }, { 0x6411, 114092 }, { 0x6412, 114097 }, { 0x6413, 114102 }, { 0x6414, 114107 }, { 0x6415, 114112 }, { 0x6416, 114117 }, { 0x6417, 114122 }, { 0x6418, 114127 }, { 0x6419, 114132 }, { 0x641A, 114137 }, { 0x641B, 114142 }, { 0x641C, 114147 }, { 0x641D, 114152 }, { 0x641E, 114157 }, { 0x63EB, 114162 }, { 0x63EC, 114167 }, { 0x63ED, 114172 }, { 0x63EE, 114177 }, { 0x63EF, 114182 }, { 0x63F0, 114187 }, { 0x63F1, 114192 }, { 0x63F2, 114197 }, { 0x63F3, 114202 }, { 0x63F4, 114207 }, { 0x63F5, 114212 }, { 0x63F6, 114217 }, { 0x63F7, 114222 }, { 0x63F8, 114227 }, { 0x63F9, 114232 }, { 0x63FA, 114237 }, { 0x63FB, 114242 }, { 0x63FC, 114247 }, { 0x63FD, 114252 }, { 0x63FE, 114257 }, { 0x63FF, 114262 }, { 0x6400, 114267 }, { 0x6401, 114272 }, { 0x6402, 114277 }, { 0x6403, 114282 }, { 0x6404, 114287 }, { 0x6383, 114292 }, { 0x6384, 114296 }, { 0x6385, 114300 }, { 0x6386, 114304 }, { 0x6387, 114308 }, { 0x6388, 114312 }, { 0x6389, 114316 }, { 0x638A, 114320 }, { 0x638B, 114324 }, { 0x638C, 114328 }, { 0x638D, 114332 }, { 0x638E, 114336 }, { 0x638F, 114340 }, { 0x6390, 114344 }, { 0x6391, 114348 }, { 0x6392, 114352 }, { 0x6393, 114356 }, { 0x6394, 114360 }, { 0x6395, 114364 }, { 0x6396, 114368 }, { 0x6397, 114372 }, { 0x6398, 114376 }, { 0x6399, 114380 }, { 0x639A, 114384 }, { 0x639B, 114388 }, { 0x639C, 114392 }, { 0x65B8, 114396 }, { 0x65BD, 114400 }, { 0x65B9, 114404 }, { 0x65BC, 114408 }, { 0x65BB, 114412 }, { 0x65C0, 114416 }, { 0x65B7, 114420 }, { 0x65BF, 114424 }, { 0x65BE, 114428 }, { 0x65BA, 114432 }, { 0x6335, 114436 }, { 0x6336, 114440 }, { 0x6337, 114444 }, { 0x6338, 114448 }, { 0x6339, 114452 }, { 0x633A, 114456 }, { 0x633B, 114460 }, { 0x633C, 114464 }, { 0x633D, 114468 }, { 0x633E, 114472 }, { 0x633F, 114476 }, { 0x6340, 114480 }, { 0x6341, 114484 }, { 0x6342, 114488 }, { 0x6343, 114492 }, { 0x6344, 114496 }, { 0x6345, 114500 }, { 0x6346, 114504 }, { 0x6347, 114508 }, { 0x6348, 114512 }, { 0x6349, 114516 }, { 0x634A, 114520 }, { 0x634B, 114524 }, { 0x634C, 114528 }, { 0x634D, 114532 }, { 0x634E, 114536 }, { 0x6322, 114540 }, { 0x6323, 114544 }, { 0x6324, 114548 }, { 0x6325, 114552 }, { 0x6326, 114556 }, { 0x6327, 114560 }, { 0x6328, 114564 }, { 0x6329, 114568 }, { 0x632A, 114572 }, { 0x632B, 114576 }, { 0x632C, 114580 }, { 0x632D, 114584 }, { 0x632E, 114588 }, { 0x632F, 114592 }, { 0x6330, 114596 }, { 0x6331, 114600 }, { 0x6332, 114604 }, { 0x6333, 114608 }, { 0x6334, 114612 }, { 0x1BC5, 114616 }, { 0x1CAB, 114618 }, { 0x3CC5, 114620 }, { 0x3CC6, 114626 }, { 0x3CC7, 114632 }, { 0x3CC4, 114638 }, { 0x3CD3, 114645 }, { 0x3CCF, 114652 }, { 0x3CCB, 114660 }, { 0x3CD7, 114667 }, { 0x3CB1, 114675 }, { 0x3CD5, 114683 }, { 0x3CD1, 114690 }, { 0x3CDB, 114698 }, { 0x3CCD, 114705 }, { 0x3CC9, 114713 }, { 0x3CC8, 114719 }, { 0x3CAD, 114726 }, { 0x3CAA, 114731 }, { 0x3CD4, 114736 }, { 0x3CD0, 114743 }, { 0x3CCC, 114751 }, { 0x3CD8, 114758 }, { 0x3CB2, 114766 }, { 0x3CB2, 114774 }, { 0x3CD6, 114782 }, { 0x3CD2, 114789 }, { 0x3CDC, 114797 }, { 0x3CCE, 114804 }, { 0x3CCA, 114812 }, { 0x3CB0, 114818 }, { 0x3CAE, 114824 }, { 0x3CB3, 114829 }, { 0x3CAF, 114835 }, { 0x3CAC, 114841 }, { 0x3CAB, 114848 }, { 0x1DA6, 114854 }, { 0x6FD4, 114856 }, { 0x718B, 114858 }, { 0x0D30, 114860 }, { 0x0D32, 114863 }, { 0x053C, 114868 }, { 0x223F, 114872 }, { 0x2303, 114875 }, { 0x254E, 114879 }, { 0x292F, 114880 }, { 0x1F6D, 114883 }, { 0x1BB8, 114884 }, { 0x2162, 114886 }, { 0x2316, 114887 }, { 0x717F, 114890 }, { 0x1D3F, 114892 }, { 0x1D43, 114896 }, { 0x249A, 114900 }, { 0x234C, 114904 }, { 0x1DBC, 114908 }, { 0x6E3F, 114911 }, { 0x256B, 114918 }, { 0x26E7, 114920 }, { 0x26E6, 114925 }, { 0x26C9, 114930 }, { 0x26E4, 114935 }, { 0x26E5, 114940 }, { 0x1DCF, 114945 }, { 0x25CA, 114951 }, { 0x1DCE, 114956 }, { 0x1DDB, 114959 }, { 0x1F0B, 114966 }, { 0x1CCD, 114969 }, { 0x1CC9, 114972 }, { 0x1CCA, 114975 }, { 0x1CD3, 114978 }, { 0x1CD4, 114982 }, { 0x1CD5, 114986 }, { 0x1CD6, 114990 }, { 0x1CD2, 114994 }, { 0x1C8F, 114998 }, { 0x1C9A, 115001 }, { 0x1CA2, 115004 }, { 0x1CA6, 115007 }, { 0x1CA7, 115010 }, { 0x1CAA, 115013 }, { 0x1CB1, 115016 }, { 0x1CCC, 115019 }, { 0x1CCB, 115022 }, { 0x6E76, 115025 }, { 0x6E78, 115028 }, { 0x2542, 115032 }, { 0x2543, 115038 }, { 0x1C4D, 115044 }, { 0x1DDA, 115046 }, { 0x1DD7, 115049 }, { 0x464B, 115052 }, { 0x4656, 115056 }, { 0x4654, 115060 }, { 0x4659, 115064 }, { 0x4648, 115068 }, { 0x464E, 115072 }, { 0x4651, 115076 }, { 0x4658, 115080 }, { 0x464F, 115084 }, { 0x4650, 115088 }, { 0x4647, 115092 }, { 0x4649, 115096 }, { 0x4657, 115100 }, { 0x464D, 115104 }, { 0x464A, 115108 }, { 0x4652, 115112 }, { 0x4655, 115116 }, { 0x4653, 115120 }, { 0x464C, 115124 }, { 0x465A, 115128 }, { 0x4660, 115132 }, { 0x4661, 115137 }, { 0x465E, 115142 }, { 0x465B, 115146 }, { 0x465D, 115150 }, { 0x465C, 115154 }, { 0x465F, 115158 }, { 0x462D, 115162 }, { 0x4639, 115166 }, { 0x4635, 115170 }, { 0x4636, 115174 }, { 0x463E, 115178 }, { 0x462E, 115182 }, { 0x4638, 115186 }, { 0x462A, 115190 }, { 0x4630, 115194 }, { 0x4633, 115198 }, { 0x463B, 115202 }, { 0x463C, 115206 }, { 0x463D, 115210 }, { 0x4631, 115214 }, { 0x4632, 115218 }, { 0x4629, 115222 }, { 0x462B, 115226 }, { 0x463A, 115230 }, { 0x462F, 115234 }, { 0x462C, 115238 }, { 0x4634, 115242 }, { 0x4637, 115246 }, { 0x463F, 115250 }, { 0x4645, 115254 }, { 0x4646, 115259 }, { 0x4643, 115264 }, { 0x4640, 115268 }, { 0x4642, 115272 }, { 0x4641, 115276 }, { 0x4644, 115280 }, { 0x1EB2, 115284 }, { 0x2556, 115287 }, { 0x006A, 115291 }, { 0x6E48, 115296 }, { 0x1BC2, 115299 }, { 0x1C19, 115301 }, { 0x1BE1, 115303 }, { 0x1BDE, 115305 }, { 0x1D9C, 115307 }, { 0x2318, 115309 }, { 0x1FCE, 115312 }, { 0x1FD3, 115315 }, { 0x1FCF, 115318 }, { 0x1FD2, 115321 }, { 0x1FD1, 115324 }, { 0x1FD6, 115327 }, { 0x1FD5, 115330 }, { 0x1FD4, 115333 }, { 0x1FD0, 115336 }, { 0x1FF6, 115339 }, { 0x1FF7, 115344 }, { 0x1FF8, 115349 }, { 0x1FF9, 115354 }, { 0x1FFA, 115359 }, { 0x1FFB, 115364 }, { 0x1FFC, 115369 }, { 0x1FFD, 115374 }, { 0x1FFE, 115379 }, { 0x1FFF, 115384 }, { 0x2000, 115389 }, { 0x2001, 115394 }, { 0x2002, 115399 }, { 0x2003, 115404 }, { 0x2004, 115409 }, { 0x2005, 115414 }, { 0x2006, 115419 }, { 0x2007, 115424 }, { 0x2008, 115429 }, { 0x2009, 115434 }, { 0x200A, 115439 }, { 0x200B, 115444 }, { 0x200C, 115449 }, { 0x200D, 115454 }, { 0x200E, 115459 }, { 0x200F, 115464 }, { 0x6B4F, 115469 }, { 0x6B50, 115474 }, { 0x6B51, 115479 }, { 0x6B52, 115484 }, { 0x6B53, 115489 }, { 0x6B54, 115494 }, { 0x6B55, 115499 }, { 0x6B56, 115504 }, { 0x6B57, 115509 }, { 0x6B58, 115514 }, { 0x6B59, 115519 }, { 0x6B5A, 115524 }, { 0x6B5B, 115529 }, { 0x6B5C, 115534 }, { 0x6B5D, 115539 }, { 0x6B5E, 115544 }, { 0x6B5F, 115549 }, { 0x6B60, 115554 }, { 0x6B61, 115559 }, { 0x6B62, 115564 }, { 0x6B63, 115569 }, { 0x6B64, 115574 }, { 0x6B65, 115579 }, { 0x6B66, 115584 }, { 0x6B67, 115589 }, { 0x6B68, 115594 }, { 0x2C76, 115599 }, { 0x2C84, 115602 }, { 0x2C78, 115606 }, { 0x2C86, 115609 }, { 0x2C8C, 115613 }, { 0x2C7D, 115617 }, { 0x2C8B, 115620 }, { 0x2C77, 115624 }, { 0x2C85, 115627 }, { 0x2C74, 115631 }, { 0x2C82, 115634 }, { 0x2C71, 115638 }, { 0x2C7F, 115641 }, { 0x2C75, 115645 }, { 0x2C83, 115648 }, { 0x2C73, 115652 }, { 0x2C81, 115655 }, { 0x2C70, 115659 }, { 0x2C7E, 115662 }, { 0x2C72, 115666 }, { 0x2C80, 115669 }, { 0x2C79, 115673 }, { 0x2C87, 115676 }, { 0x2C7A, 115680 }, { 0x2C88, 115683 }, { 0x2C7C, 115687 }, { 0x2C8A, 115690 }, { 0x2C7B, 115694 }, { 0x2C89, 115697 }, { 0x2C8E, 115701 }, { 0x2C8D, 115706 }, { 0x1FD7, 115710 }, { 0x1FD8, 115713 }, { 0x1FD9, 115716 }, { 0x1FE1, 115719 }, { 0x1FDC, 115722 }, { 0x1FDD, 115725 }, { 0x1FDF, 115728 }, { 0x1FDB, 115731 }, { 0x1FE0, 115734 }, { 0x1FDA, 115737 }, { 0x1FDE, 115740 }, { 0x2C8F, 115743 }, { 0x2C94, 115746 }, { 0x2C9F, 115749 }, { 0x2C98, 115752 }, { 0x2C90, 115755 }, { 0x2CA9, 115758 }, { 0x2C9A, 115761 }, { 0x2C93, 115764 }, { 0x2C92, 115767 }, { 0x2CA1, 115770 }, { 0x2C99, 115773 }, { 0x2CA3, 115776 }, { 0x2C97, 115779 }, { 0x2CB0, 115782 }, { 0x2CB1, 115785 }, { 0x2C9C, 115788 }, { 0x2C9E, 115791 }, { 0x2C96, 115794 }, { 0x2CA7, 115797 }, { 0x2C9D, 115800 }, { 0x2CB2, 115803 }, { 0x2C95, 115806 }, { 0x2CA0, 115809 }, { 0x2CAA, 115812 }, { 0x2C91, 115815 }, { 0x2C9B, 115818 }, { 0x2CA2, 115821 }, { 0x2CA4, 115824 }, { 0x2CAE, 115827 }, { 0x2CAF, 115830 }, { 0x2CAD, 115833 }, { 0x2CA5, 115836 }, { 0x2CA8, 115839 }, { 0x2CAB, 115842 }, { 0x2CAC, 115845 }, { 0x2CA6, 115848 }, { 0x231C, 115851 }, { 0x263B, 115852 }, { 0x1BC3, 115855 }, { 0x1C1A, 115857 }, { 0x1BE2, 115859 }, { 0x1BDF, 115861 }, { 0x6F85, 115863 }, { 0x2541, 115865 }, { 0x6E37, 115866 }, { 0x1DCC, 115867 }, { 0x22A3, 115870 }, { 0x6F4C, 115872 }, { 0x6CBE, 115874 }, { 0x226F, 115875 }, { 0x0096, 115877 }, { 0x258E, 115879 }, { 0x258F, 115885 }, { 0x2591, 115891 }, { 0x2595, 115896 }, { 0x258A, 115900 }, { 0x258B, 115905 }, { 0x1EB3, 115909 }, { 0x2557, 115912 }, { 0x007A, 115916 }, { 0x6E49, 115921 }, { 0x2216, 115924 }, { 0x2310, 115925 }, { 0x230E, 115929 }, { 0x230F, 115933 }, { 0x2314, 115936 }, { 0x2295, 115939 }, { 0x22F7, 115941 }, { 0x230D, 115944 }, { 0x6DB8, 115947 }, { 0x2B2A, 115949 }, { 0x2B25, 115952 }, { 0x2B86, 115956 }, { 0x2B26, 115960 }, { 0x1F1D, 115964 }, { 0x7018, 115966 }, { 0x21D7, 115968 }, { 0x1F18, 115971 }, { 0x1F19, 115974 }, { 0x1F1B, 115977 }, { 0x1F1A, 115979 }, }; static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_index_to_name[29234] = { { 0x0000, 34710 }, { 0x0001, 105577 }, { 0x0002, 101766 }, { 0x0003, 52804 }, { 0x0004, 45726 }, { 0x0005, 64645 }, { 0x0006, 86925 }, { 0x0007, 103181 }, { 0x0008, 13114 }, { 0x0009, 33811 }, { 0x000A, 69127 }, { 0x000B, 14549 }, { 0x000C, 19460 }, { 0x000D, 109938 }, { 0x000E, 12684 }, { 0x000F, 66633 }, { 0x0010, 19554 }, { 0x0011, 19500 }, { 0x0012, 19518 }, { 0x0013, 19581 }, { 0x0014, 19536 }, { 0x0015, 19527 }, { 0x0016, 19509 }, { 0x0017, 19572 }, { 0x0018, 19563 }, { 0x0019, 19545 }, { 0x001A, 19454 }, { 0x001B, 102035 }, { 0x001C, 100347 }, { 0x001D, 46227 }, { 0x001E, 109865 }, { 0x001F, 85914 }, { 0x0020, 103198 }, { 0x0021, 28195 }, { 0x0022, 28418 }, { 0x0023, 28467 }, { 0x0024, 28528 }, { 0x0025, 28608 }, { 0x0026, 28793 }, { 0x0027, 28816 }, { 0x0028, 28882 }, { 0x0029, 28949 }, { 0x002A, 29063 }, { 0x002B, 29085 }, { 0x002C, 29162 }, { 0x002D, 29268 }, { 0x002E, 29298 }, { 0x002F, 29396 }, { 0x0030, 29686 }, { 0x0031, 29736 }, { 0x0032, 29755 }, { 0x0033, 29845 }, { 0x0034, 29936 }, { 0x0035, 30013 }, { 0x0036, 30235 }, { 0x0037, 30265 }, { 0x0038, 30313 }, { 0x0039, 30330 }, { 0x003A, 30409 }, { 0x003B, 13027 }, { 0x003C, 65179 }, { 0x003D, 33715 }, { 0x003E, 103196 }, { 0x003F, 6211 }, { 0x0040, 19785 }, { 0x0041, 24009 }, { 0x0042, 24252 }, { 0x0043, 24315 }, { 0x0044, 24389 }, { 0x0045, 24485 }, { 0x0046, 24689 }, { 0x0047, 24726 }, { 0x0048, 24799 }, { 0x0049, 24880 }, { 0x004A, 24994 }, { 0x004B, 25022 }, { 0x004C, 25106 }, { 0x004D, 25256 }, { 0x004E, 25306 }, { 0x004F, 25436 }, { 0x0050, 25727 }, { 0x0051, 25791 }, { 0x0052, 25823 }, { 0x0053, 25961 }, { 0x0054, 26072 }, { 0x0055, 26175 }, { 0x0056, 26428 }, { 0x0057, 26478 }, { 0x0058, 26533 }, { 0x0059, 26595 }, { 0x005A, 26689 }, { 0x005B, 12859 }, { 0x005C, 86872 }, { 0x005D, 33624 }, { 0x005E, 35241 }, { 0x005F, 85368 }, { 0x0060, 82388 }, { 0x0061, 12142 }, { 0x0062, 33517 }, { 0x0063, 73275 }, { 0x0064, 11842 }, { 0x0065, 44365 }, { 0x0066, 65236 }, { 0x0067, 98266 }, { 0x0068, 92072 }, { 0x0069, 80605 }, { 0x006A, 115291 }, { 0x006B, 7092 }, { 0x006C, 14761 }, { 0x006D, 104643 }, { 0x006E, 52311 }, { 0x006F, 45673 }, { 0x0070, 104631 }, { 0x0071, 109389 }, { 0x0072, 109424 }, { 0x0073, 15382 }, { 0x0074, 32502 }, { 0x0075, 64647 }, { 0x0076, 52758 }, { 0x0077, 59111 }, { 0x0078, 109385 }, { 0x0079, 100810 }, { 0x007A, 115916 }, { 0x007B, 57327 }, { 0x007C, 57299 }, { 0x007D, 57371 }, { 0x007E, 82381 }, { 0x007F, 28312 }, { 0x0080, 28252 }, { 0x0081, 28370 }, { 0x0082, 28318 }, { 0x0083, 28356 }, { 0x0084, 28229 }, { 0x0085, 30481 }, { 0x0086, 28508 }, { 0x0087, 28651 }, { 0x0088, 28633 }, { 0x0089, 28738 }, { 0x008A, 28732 }, { 0x008B, 28992 }, { 0x008C, 28974 }, { 0x008D, 29057 }, { 0x008E, 29043 }, { 0x008F, 30582 }, { 0x0090, 29364 }, { 0x0091, 29510 }, { 0x0092, 29492 }, { 0x0093, 29638 }, { 0x0094, 29516 }, { 0x0095, 29624 }, { 0x0096, 115877 }, { 0x0097, 29603 }, { 0x0098, 30109 }, { 0x0099, 30091 }, { 0x009A, 30222 }, { 0x009B, 30177 }, { 0x009C, 30367 }, { 0x009D, 30703 }, { 0x009E, 27279 }, { 0x009F, 24126 }, { 0x00A0, 24066 }, { 0x00A1, 24199 }, { 0x00A2, 24140 }, { 0x00A3, 24178 }, { 0x00A4, 24043 }, { 0x00A5, 26788 }, { 0x00A6, 24362 }, { 0x00A7, 24528 }, { 0x00A8, 24510 }, { 0x00A9, 24634 }, { 0x00AA, 24621 }, { 0x00AB, 24916 }, { 0x00AC, 24898 }, { 0x00AD, 24988 }, { 0x00AE, 24967 }, { 0x00AF, 27005 }, { 0x00B0, 25370 }, { 0x00B1, 25558 }, { 0x00B2, 25540 }, { 0x00B3, 25679 }, { 0x00B4, 25564 }, { 0x00B5, 25665 }, { 0x00B6, 75217 }, { 0x00B7, 25644 }, { 0x00B8, 26287 }, { 0x00B9, 26269 }, { 0x00BA, 26415 }, { 0x00BB, 26363 }, { 0x00BC, 26639 }, { 0x00BD, 27290 }, { 0x00BE, 26677 }, { 0x00BF, 28331 }, { 0x00C0, 24153 }, { 0x00C1, 28258 }, { 0x00C2, 24072 }, { 0x00C3, 28337 }, { 0x00C4, 24159 }, { 0x00C5, 28490 }, { 0x00C6, 24344 }, { 0x00C7, 28522 }, { 0x00C8, 24383 }, { 0x00C9, 28477 }, { 0x00CA, 24325 }, { 0x00CB, 28496 }, { 0x00CC, 24350 }, { 0x00CD, 28559 }, { 0x00CE, 24440 }, { 0x00CF, 28583 }, { 0x00D0, 24453 }, { 0x00D1, 28677 }, { 0x00D2, 24560 }, { 0x00D3, 28639 }, { 0x00D4, 24516 }, { 0x00D5, 28612 }, { 0x00D6, 24489 }, { 0x00D7, 28699 }, { 0x00D8, 24582 }, { 0x00D9, 28645 }, { 0x00DA, 24522 }, { 0x00DB, 28876 }, { 0x00DC, 24793 }, { 0x00DD, 28839 }, { 0x00DE, 24749 }, { 0x00DF, 28820 }, { 0x00E0, 24730 }, { 0x00E1, 28863 }, { 0x00E2, 24773 }, { 0x00E3, 28943 }, { 0x00E4, 24874 }, { 0x00E5, 28919 }, { 0x00E6, 24843 }, { 0x00E7, 28998 }, { 0x00E8, 24922 }, { 0x00E9, 29018 }, { 0x00EA, 24942 }, { 0x00EB, 28980 }, { 0x00EC, 24904 }, { 0x00ED, 29024 }, { 0x00EE, 24948 }, { 0x00EF, 28953 }, { 0x00F0, 27571 }, { 0x00F1, 30897 }, { 0x00F2, 27855 }, { 0x00F3, 29073 }, { 0x00F4, 25010 }, { 0x00F5, 29136 }, { 0x00F6, 25073 }, { 0x00F7, 27047 }, { 0x00F8, 29208 }, { 0x00F9, 25158 }, { 0x00FA, 29255 }, { 0x00FB, 25212 }, { 0x00FC, 29214 }, { 0x00FD, 25164 }, { 0x00FE, 29235 }, { 0x00FF, 25185 }, { 0x0100, 29249 }, { 0x0101, 25206 }, { 0x0102, 29338 }, { 0x0103, 25352 }, { 0x0104, 29370 }, { 0x0105, 25383 }, { 0x0106, 29344 }, { 0x0107, 25358 }, { 0x0108, 25429 }, { 0x0109, 30574 }, { 0x010A, 26971 }, { 0x010B, 29560 }, { 0x010C, 25608 }, { 0x010D, 29498 }, { 0x010E, 25546 }, { 0x010F, 29546 }, { 0x0110, 25594 }, { 0x0111, 30901 }, { 0x0112, 27859 }, { 0x0113, 29795 }, { 0x0114, 25870 }, { 0x0115, 29820 }, { 0x0116, 25902 }, { 0x0117, 29801 }, { 0x0118, 25876 }, { 0x0119, 29873 }, { 0x011A, 25995 }, { 0x011B, 29930 }, { 0x011C, 26066 }, { 0x011D, 29917 }, { 0x011E, 26046 }, { 0x011F, 29888 }, { 0x0120, 26010 }, { 0x0121, 29986 }, { 0x0122, 26135 }, { 0x0123, 29967 }, { 0x0124, 26109 }, { 0x0125, 29980 }, { 0x0126, 26129 }, { 0x0127, 30115 }, { 0x0128, 26301 }, { 0x0129, 30150 }, { 0x012A, 26336 }, { 0x012B, 30097 }, { 0x012C, 26275 }, { 0x012D, 30084 }, { 0x012E, 26262 }, { 0x012F, 30136 }, { 0x0130, 26322 }, { 0x0131, 30164 }, { 0x0132, 26350 }, { 0x0133, 30307 }, { 0x0134, 26527 }, { 0x0135, 30403 }, { 0x0136, 26683 }, { 0x0137, 30397 }, { 0x0138, 30440 }, { 0x0139, 26726 }, { 0x013A, 30413 }, { 0x013B, 26693 }, { 0x013C, 30446 }, { 0x013D, 26732 }, { 0x013E, 27129 }, { 0x013F, 24290 }, { 0x0140, 28436 }, { 0x0141, 28455 }, { 0x0142, 24296 }, { 0x0143, 30637 }, { 0x0144, 27206 }, { 0x0145, 30632 }, { 0x0146, 28484 }, { 0x0147, 24338 }, { 0x0148, 30777 }, { 0x0149, 28546 }, { 0x014A, 28589 }, { 0x014B, 24459 }, { 0x014C, 27560 }, { 0x014D, 30843 }, { 0x014E, 30680 }, { 0x014F, 30627 }, { 0x0150, 28804 }, { 0x0151, 24700 }, { 0x0152, 28827 }, { 0x0153, 30668 }, { 0x0154, 26858 }, { 0x0155, 30623 }, { 0x0156, 29030 }, { 0x0157, 29096 }, { 0x0158, 25033 }, { 0x0159, 25110 }, { 0x015A, 27364 }, { 0x015B, 30751 }, { 0x015C, 29316 }, { 0x015D, 25344 }, { 0x015E, 29582 }, { 0x015F, 29430 }, { 0x0160, 25478 }, { 0x0161, 30546 }, { 0x0162, 26884 }, { 0x0163, 29697 }, { 0x0164, 25738 }, { 0x0165, 27881 }, { 0x0166, 30642 }, { 0x0167, 27211 }, { 0x0168, 30578 }, { 0x0169, 28166 }, { 0x016A, 26141 }, { 0x016B, 29954 }, { 0x016C, 26096 }, { 0x016D, 29999 }, { 0x016E, 30036 }, { 0x016F, 26207 }, { 0x0170, 30817 }, { 0x0171, 30246 }, { 0x0172, 30348 }, { 0x0173, 26613 }, { 0x0174, 30459 }, { 0x0175, 26752 }, { 0x0176, 30586 }, { 0x0177, 30596 }, { 0x0178, 27038 }, { 0x0179, 27019 }, { 0x017A, 27887 }, { 0x017B, 30647 }, { 0x017C, 27216 }, { 0x017D, 28159 }, { 0x017E, 27892 }, { 0x017F, 28115 }, { 0x0180, 28134 }, { 0x0181, 28138 }, { 0x0182, 28178 }, { 0x0183, 30524 }, { 0x0184, 28573 }, { 0x0185, 26836 }, { 0x0186, 30538 }, { 0x0187, 29220 }, { 0x0188, 26866 }, { 0x0189, 30542 }, { 0x018A, 29356 }, { 0x018B, 26880 }, { 0x018C, 28306 }, { 0x018D, 24120 }, { 0x018E, 28986 }, { 0x018F, 24910 }, { 0x0190, 29504 }, { 0x0191, 25552 }, { 0x0192, 30103 }, { 0x0193, 26281 }, { 0x0194, 30207 }, { 0x0195, 26393 }, { 0x0196, 30183 }, { 0x0197, 26369 }, { 0x0198, 30191 }, { 0x0199, 26377 }, { 0x019A, 30199 }, { 0x019B, 26385 }, { 0x019C, 27399 }, { 0x019D, 28362 }, { 0x019E, 24184 }, { 0x019F, 28206 }, { 0x01A0, 24020 }, { 0x01A1, 30491 }, { 0x01A2, 26798 }, { 0x01A3, 28857 }, { 0x01A4, 24767 }, { 0x01A5, 28845 }, { 0x01A6, 24755 }, { 0x01A7, 29115 }, { 0x01A8, 25052 }, { 0x01A9, 29589 }, { 0x01AA, 25630 }, { 0x01AB, 29595 }, { 0x01AC, 25636 }, { 0x01AD, 30590 }, { 0x01AE, 27025 }, { 0x01AF, 24998 }, { 0x01B0, 30520 }, { 0x01B1, 28565 }, { 0x01B2, 26832 }, { 0x01B3, 28833 }, { 0x01B4, 24743 }, { 0x01B5, 30672 }, { 0x01B6, 30656 }, { 0x01B7, 29350 }, { 0x01B8, 25364 }, { 0x01B9, 28236 }, { 0x01BA, 24050 }, { 0x01BB, 30485 }, { 0x01BC, 26792 }, { 0x01BD, 29609 }, { 0x01BE, 25650 }, { 0x01BF, 28324 }, { 0x01C0, 24146 }, { 0x01C1, 28349 }, { 0x01C2, 24171 }, { 0x01C3, 28670 }, { 0x01C4, 24553 }, { 0x01C5, 28725 }, { 0x01C6, 24614 }, { 0x01C7, 29011 }, { 0x01C8, 24935 }, { 0x01C9, 29036 }, { 0x01CA, 24960 }, { 0x01CB, 29553 }, { 0x01CC, 25601 }, { 0x01CD, 29617 }, { 0x01CE, 25658 }, { 0x01CF, 29807 }, { 0x01D0, 25882 }, { 0x01D1, 29833 }, { 0x01D2, 25937 }, { 0x01D3, 30143 }, { 0x01D4, 26329 }, { 0x01D5, 30170 }, { 0x01D6, 26356 }, { 0x01D7, 29903 }, { 0x01D8, 26025 }, { 0x01D9, 29973 }, { 0x01DA, 26115 }, { 0x01DB, 30660 }, { 0x01DC, 27225 }, { 0x01DD, 28913 }, { 0x01DE, 24837 }, { 0x01DF, 29330 }, { 0x01E0, 24407 }, { 0x01E1, 30554 }, { 0x01E2, 26892 }, { 0x01E3, 30427 }, { 0x01E4, 26713 }, { 0x01E5, 28199 }, { 0x01E6, 24013 }, { 0x01E7, 28711 }, { 0x01E8, 24594 }, { 0x01E9, 29630 }, { 0x01EA, 25671 }, { 0x01EB, 29530 }, { 0x01EC, 25578 }, { 0x01ED, 29400 }, { 0x01EE, 25440 }, { 0x01EF, 29407 }, { 0x01F0, 25447 }, { 0x01F1, 30385 }, { 0x01F2, 26665 }, { 0x01F3, 25138 }, { 0x01F4, 25324 }, { 0x01F5, 26090 }, { 0x01F6, 27576 }, { 0x01F7, 26827 }, { 0x01F8, 26896 }, { 0x01F9, 28343 }, { 0x01FA, 28502 }, { 0x01FB, 24356 }, { 0x01FC, 29166 }, { 0x01FD, 29992 }, { 0x01FE, 26032 }, { 0x01FF, 26738 }, { 0x0200, 30782 }, { 0x0201, 27597 }, { 0x0202, 28449 }, { 0x0203, 30017 }, { 0x0204, 30761 }, { 0x0205, 28705 }, { 0x0206, 24588 }, { 0x0207, 29067 }, { 0x0208, 25004 }, { 0x0209, 30689 }, { 0x020A, 25801 }, { 0x020B, 29814 }, { 0x020C, 25896 }, { 0x020D, 30391 }, { 0x020E, 26671 }, { 0x020F, 27394 }, { 0x0210, 27229 }, { 0x0211, 27555 }, { 0x0212, 24270 }, { 0x0213, 27171 }, { 0x0214, 24332 }, { 0x0215, 24434 }, { 0x0216, 24413 }, { 0x0217, 27694 }, { 0x0218, 27262 }, { 0x0219, 27266 }, { 0x021A, 27158 }, { 0x021B, 27706 }, { 0x021C, 27712 }, { 0x021D, 27345 }, { 0x021E, 27581 }, { 0x021F, 24737 }, { 0x0220, 27370 }, { 0x0221, 27925 }, { 0x0222, 27244 }, { 0x0223, 27196 }, { 0x0224, 27409 }, { 0x0225, 24817 }, { 0x0226, 27109 }, { 0x0227, 24954 }, { 0x0228, 27115 }, { 0x0229, 27942 }, { 0x022A, 25199 }, { 0x022B, 25132 }, { 0x022C, 25233 }, { 0x022D, 27125 }, { 0x022E, 27445 }, { 0x022F, 27450 }, { 0x0230, 25274 }, { 0x0231, 25330 }, { 0x0232, 25409 }, { 0x0233, 27974 }, { 0x0234, 27313 }, { 0x0235, 28042 }, { 0x0236, 27340 }, { 0x0237, 27063 }, { 0x0238, 27472 }, { 0x0239, 27484 }, { 0x023A, 27477 }, { 0x023B, 25857 }, { 0x023C, 25864 }, { 0x023D, 25922 }, { 0x023E, 27699 }, { 0x023F, 27989 }, { 0x0240, 28097 }, { 0x0241, 25989 }, { 0x0242, 26981 }, { 0x0243, 27588 }, { 0x0244, 27284 }, { 0x0245, 26985 }, { 0x0246, 27499 }, { 0x0247, 26161 }, { 0x0248, 26179 }, { 0x0249, 27637 }, { 0x024A, 26445 }, { 0x024B, 27504 }, { 0x024C, 27509 }, { 0x024D, 27514 }, { 0x024E, 28027 }, { 0x024F, 26771 }, { 0x0250, 26707 }, { 0x0251, 27009 }, { 0x0252, 27013 }, { 0x0253, 28124 }, { 0x0254, 28186 }, { 0x0255, 28154 }, { 0x0256, 28182 }, { 0x0257, 28146 }, { 0x0258, 27900 }, { 0x0259, 27334 }, { 0x025A, 27930 }, { 0x025B, 27937 }, { 0x025C, 25016 }, { 0x025D, 27435 }, { 0x025E, 27957 }, { 0x025F, 25795 }, { 0x0260, 28128 }, { 0x0261, 28171 }, { 0x0262, 26842 }, { 0x0263, 27090 }, { 0x0264, 26847 }, { 0x0265, 26914 }, { 0x0266, 27201 }, { 0x0267, 26901 }, { 0x0268, 27095 }, { 0x0269, 26870 }, { 0x026A, 26875 }, { 0x026B, 28150 }, { 0x026C, 28142 }, { 0x026D, 27414 }, { 0x026E, 27421 }, { 0x026F, 84218 }, { 0x0270, 84222 }, { 0x0271, 84234 }, { 0x0272, 84313 }, { 0x0273, 84523 }, { 0x0274, 84528 }, { 0x0275, 84583 }, { 0x0276, 84364 }, { 0x0277, 84372 }, { 0x0278, 84164 }, { 0x0279, 84622 }, { 0x027A, 84691 }, { 0x027B, 84922 }, { 0x027C, 84885 }, { 0x027D, 84167 }, { 0x027E, 84106 }, { 0x027F, 84860 }, { 0x0280, 84889 }, { 0x0281, 84111 }, { 0x0282, 84172 }, { 0x0283, 83921 }, { 0x0284, 84073 }, { 0x0285, 84925 }, { 0x0286, 19331 }, { 0x0287, 84894 }, { 0x0288, 84630 }, { 0x0289, 84129 }, { 0x028A, 84150 }, { 0x028B, 84023 }, { 0x028C, 84013 }, { 0x028D, 83986 }, { 0x028E, 83981 }, { 0x028F, 84953 }, { 0x0290, 84077 }, { 0x0291, 84806 }, { 0x0292, 84800 }, { 0x0293, 83917 }, { 0x0294, 84069 }, { 0x0295, 84119 }, { 0x0296, 84160 }, { 0x0297, 19256 }, { 0x0298, 5900 }, { 0x0299, 14621 }, { 0x029A, 52853 }, { 0x029B, 34486 }, { 0x029C, 46065 }, { 0x029D, 84675 }, { 0x029E, 84146 }, { 0x029F, 84457 }, { 0x02A0, 84248 }, { 0x02A1, 84317 }, { 0x02A2, 84368 }, { 0x02A3, 84611 }, { 0x02A4, 84929 }, { 0x02A5, 84082 }, { 0x02A6, 84039 }, { 0x02A7, 83976 }, { 0x02A8, 84898 }, { 0x02A9, 84063 }, { 0x02AA, 84123 }, { 0x02AB, 84864 }, { 0x02AC, 84957 }, { 0x02AD, 84626 }, { 0x02AE, 83957 }, { 0x02AF, 83952 }, { 0x02B0, 83967 }, { 0x02B1, 83991 }, { 0x02B2, 83972 }, { 0x02B3, 84633 }, { 0x02B4, 84644 }, { 0x02B5, 84638 }, { 0x02B6, 83996 }, { 0x02B7, 84660 }, { 0x02B8, 84138 }, { 0x02B9, 83947 }, { 0x02BA, 84133 }, { 0x02BB, 83942 }, { 0x02BC, 84176 }, { 0x02BD, 84115 }, { 0x02BE, 83962 }, { 0x02BF, 90763 }, { 0x02C0, 90732 }, { 0x02C1, 91760 }, { 0x02C2, 91143 }, { 0x02C3, 91277 }, { 0x02C4, 91689 }, { 0x02C5, 90739 }, { 0x02C6, 90579 }, { 0x02C7, 91714 }, { 0x02C8, 90632 }, { 0x02C9, 90715 }, { 0x02CA, 91198 }, { 0x02CB, 90744 }, { 0x02CC, 91695 }, { 0x02CD, 91245 }, { 0x02CE, 91209 }, { 0x02CF, 92017 }, { 0x02D0, 91655 }, { 0x02D1, 91319 }, { 0x02D2, 90749 }, { 0x02D3, 91691 }, { 0x02D4, 90752 }, { 0x02D5, 90766 }, { 0x02D6, 90735 }, { 0x02D7, 90647 }, { 0x02D8, 91085 }, { 0x02D9, 90651 }, { 0x02DA, 90635 }, { 0x02DB, 90642 }, { 0x02DC, 90569 }, { 0x02DD, 90624 }, { 0x02DE, 90711 }, { 0x02DF, 91071 }, { 0x02E0, 92019 }, { 0x02E1, 91756 }, { 0x02E2, 90586 }, { 0x02E3, 91716 }, { 0x02E4, 90718 }, { 0x02E5, 90756 }, { 0x02E6, 91336 }, { 0x02E7, 91300 }, { 0x02E8, 91699 }, { 0x02E9, 91174 }, { 0x02EA, 91666 }, { 0x02EB, 90746 }, { 0x02EC, 91763 }, { 0x02ED, 90741 }, { 0x02EE, 91658 }, { 0x02EF, 91150 }, { 0x02F0, 91288 }, { 0x02F1, 90589 }, { 0x02F2, 91185 }, { 0x02F3, 91158 }, { 0x02F4, 91123 }, { 0x02F5, 90694 }, { 0x02F6, 91127 }, { 0x02F7, 90698 }, { 0x02F8, 91080 }, { 0x02F9, 91662 }, { 0x02FA, 91305 }, { 0x02FB, 91396 }, { 0x02FC, 90556 }, { 0x02FD, 91703 }, { 0x02FE, 91242 }, { 0x02FF, 90759 }, { 0x0300, 90728 }, { 0x0301, 90789 }, { 0x0302, 90770 }, { 0x0303, 90785 }, { 0x0304, 90792 }, { 0x0305, 91171 }, { 0x0306, 91273 }, { 0x0307, 91250 }, { 0x0308, 90655 }, { 0x0309, 90592 }, { 0x030A, 92005 }, { 0x030B, 91161 }, { 0x030C, 90672 }, { 0x030D, 91399 }, { 0x030E, 91650 }, { 0x030F, 91115 }, { 0x0310, 90637 }, { 0x0311, 91342 }, { 0x0312, 90559 }, { 0x0313, 90685 }, { 0x0314, 91119 }, { 0x0315, 91101 }, { 0x0316, 91075 }, { 0x0317, 90582 }, { 0x0318, 91406 }, { 0x0319, 91194 }, { 0x031A, 91327 }, { 0x031B, 91205 }, { 0x031C, 91202 }, { 0x031D, 91226 }, { 0x031E, 91229 }, { 0x031F, 91213 }, { 0x0320, 91233 }, { 0x0321, 91264 }, { 0x0322, 90795 }, { 0x0323, 90828 }, { 0x0324, 90848 }, { 0x0325, 90882 }, { 0x0326, 90935 }, { 0x0327, 90812 }, { 0x0328, 90823 }, { 0x0329, 90843 }, { 0x032A, 90872 }, { 0x032B, 90908 }, { 0x032C, 90930 }, { 0x032D, 90956 }, { 0x032E, 90966 }, { 0x032F, 21484 }, { 0x0330, 20149 }, { 0x0331, 21956 }, { 0x0332, 20741 }, { 0x0333, 22198 }, { 0x0334, 19871 }, { 0x0335, 22163 }, { 0x0336, 21020 }, { 0x0337, 22692 }, { 0x0338, 21032 }, { 0x0339, 19889 }, { 0x033A, 21025 }, { 0x033B, 22223 }, { 0x033C, 21476 }, { 0x033D, 21049 }, { 0x033E, 22250 }, { 0x033F, 21738 }, { 0x0340, 19790 }, { 0x0341, 22015 }, { 0x0342, 21428 }, { 0x0343, 21558 }, { 0x0344, 22081 }, { 0x0345, 22133 }, { 0x0346, 21930 }, { 0x0347, 20261 }, { 0x0348, 21592 }, { 0x0349, 21480 }, { 0x034A, 21772 }, { 0x034B, 21768 }, { 0x034C, 21961 }, { 0x034D, 21588 }, { 0x034E, 21282 }, { 0x034F, 21952 }, { 0x0350, 21488 }, { 0x0351, 21776 }, { 0x0352, 21780 }, { 0x0353, 21262 }, { 0x0354, 21266 }, { 0x0355, 21274 }, { 0x0356, 22027 }, { 0x0357, 21270 }, { 0x0358, 21454 }, { 0x0359, 21948 }, { 0x035A, 21472 }, { 0x035B, 22093 }, { 0x035C, 21446 }, { 0x035D, 21278 }, { 0x035E, 21450 }, { 0x035F, 21784 }, { 0x0360, 21582 }, { 0x0361, 22157 }, { 0x0362, 20449 }, { 0x0363, 20804 }, { 0x0364, 20069 }, { 0x0365, 20223 }, { 0x0366, 20990 }, { 0x0367, 20295 }, { 0x0368, 20145 }, { 0x0369, 20510 }, { 0x036A, 20501 }, { 0x036B, 20750 }, { 0x036C, 20291 }, { 0x036D, 19915 }, { 0x036E, 20728 }, { 0x036F, 20153 }, { 0x0370, 20514 }, { 0x0371, 20522 }, { 0x0372, 19895 }, { 0x0373, 19899 }, { 0x0374, 19907 }, { 0x0375, 20816 }, { 0x0376, 19903 }, { 0x0377, 20117 }, { 0x0378, 20505 }, { 0x0379, 20724 }, { 0x037A, 20141 }, { 0x037B, 20882 }, { 0x037C, 20109 }, { 0x037D, 19911 }, { 0x037E, 20113 }, { 0x037F, 20526 }, { 0x0380, 20247 }, { 0x0381, 20976 }, { 0x0382, 20870 }, { 0x0383, 20952 }, { 0x0384, 20680 }, { 0x0385, 21248 }, { 0x0386, 19829 }, { 0x0387, 21038 }, { 0x0388, 22201 }, { 0x0389, 22206 }, { 0x038A, 22213 }, { 0x038B, 19810 }, { 0x038C, 19787 }, { 0x038D, 19793 }, { 0x038E, 21220 }, { 0x038F, 20736 }, { 0x0390, 21217 }, { 0x0391, 20732 }, { 0x0392, 21224 }, { 0x0393, 20746 }, { 0x0394, 21181 }, { 0x0395, 20518 }, { 0x0396, 21184 }, { 0x0397, 20720 }, { 0x0398, 45510 }, { 0x0399, 45202 }, { 0x039A, 45372 }, { 0x039B, 45064 }, { 0x039C, 45506 }, { 0x039D, 45198 }, { 0x039E, 45498 }, { 0x039F, 45190 }, { 0x03A0, 45550 }, { 0x03A1, 45242 }, { 0x03A2, 45546 }, { 0x03A3, 45238 }, { 0x03A4, 45364 }, { 0x03A5, 45056 }, { 0x03A6, 19865 }, { 0x03A7, 19818 }, { 0x03A8, 21227 }, { 0x03A9, 21178 }, { 0x03AA, 21252 }, { 0x03AB, 21231 }, { 0x03AC, 22226 }, { 0x03AD, 21468 }, { 0x03AE, 20137 }, { 0x03AF, 22168 }, { 0x03B0, 21464 }, { 0x03B1, 20133 }, { 0x03B2, 19813 }, { 0x03B3, 22180 }, { 0x03B4, 21256 }, { 0x03B5, 22173 }, { 0x03B6, 74491 }, { 0x03B7, 74497 }, { 0x03B8, 74648 }, { 0x03B9, 74697 }, { 0x03BA, 75169 }, { 0x03BB, 74656 }, { 0x03BC, 75179 }, { 0x03BD, 74592 }, { 0x03BE, 74501 }, { 0x03BF, 74717 }, { 0x03C0, 74721 }, { 0x03C1, 74886 }, { 0x03C2, 74705 }, { 0x03C3, 74301 }, { 0x03C4, 74986 }, { 0x03C5, 74783 }, { 0x03C6, 74271 }, { 0x03C7, 74352 }, { 0x03C8, 74580 }, { 0x03C9, 74660 }, { 0x03CA, 74356 }, { 0x03CB, 74481 }, { 0x03CC, 74753 }, { 0x03CD, 74604 }, { 0x03CE, 74297 }, { 0x03CF, 74974 }, { 0x03D0, 74505 }, { 0x03D1, 74364 }, { 0x03D2, 74393 }, { 0x03D3, 74403 }, { 0x03D4, 74319 }, { 0x03D5, 74538 }, { 0x03D6, 74439 }, { 0x03D7, 74449 }, { 0x03D8, 74559 }, { 0x03D9, 74329 }, { 0x03DA, 74360 }, { 0x03DB, 74459 }, { 0x03DC, 74737 }, { 0x03DD, 74625 }, { 0x03DE, 74733 }, { 0x03DF, 74970 }, { 0x03E0, 74799 }, { 0x03E1, 74898 }, { 0x03E2, 74877 }, { 0x03E3, 74287 }, { 0x03E4, 74600 }, { 0x03E5, 74588 }, { 0x03E6, 73279 }, { 0x03E7, 73360 }, { 0x03E8, 73588 }, { 0x03E9, 73668 }, { 0x03EA, 73364 }, { 0x03EB, 73489 }, { 0x03EC, 73761 }, { 0x03ED, 73612 }, { 0x03EE, 73305 }, { 0x03EF, 74003 }, { 0x03F0, 73513 }, { 0x03F1, 73372 }, { 0x03F2, 73401 }, { 0x03F3, 73411 }, { 0x03F4, 73327 }, { 0x03F5, 73546 }, { 0x03F6, 73447 }, { 0x03F7, 73457 }, { 0x03F8, 73567 }, { 0x03F9, 73337 }, { 0x03FA, 73368 }, { 0x03FB, 73467 }, { 0x03FC, 73745 }, { 0x03FD, 73633 }, { 0x03FE, 73741 }, { 0x03FF, 73999 }, { 0x0400, 73807 }, { 0x0401, 73927 }, { 0x0402, 73885 }, { 0x0403, 73295 }, { 0x0404, 73608 }, { 0x0405, 73596 }, { 0x0406, 73499 }, { 0x0407, 73505 }, { 0x0408, 73656 }, { 0x0409, 73705 }, { 0x040A, 74212 }, { 0x040B, 73664 }, { 0x040C, 74237 }, { 0x040D, 73600 }, { 0x040E, 73509 }, { 0x040F, 73725 }, { 0x0410, 73729 }, { 0x0411, 73910 }, { 0x0412, 73713 }, { 0x0413, 73309 }, { 0x0414, 74015 }, { 0x0415, 73791 }, { 0x0416, 74945 }, { 0x0417, 73974 }, { 0x0418, 74749 }, { 0x0419, 73757 }, { 0x041A, 75066 }, { 0x041B, 74105 }, { 0x041C, 75020 }, { 0x041D, 74049 }, { 0x041E, 75089 }, { 0x041F, 74128 }, { 0x0420, 74620 }, { 0x0421, 73628 }, { 0x0422, 75071 }, { 0x0423, 74110 }, { 0x0424, 74709 }, { 0x0425, 73717 }, { 0x0426, 74725 }, { 0x0427, 73733 }, { 0x0428, 74795 }, { 0x0429, 73803 }, { 0x042A, 75044 }, { 0x042B, 74078 }, { 0x042C, 75048 }, { 0x042D, 74082 }, { 0x042E, 74576 }, { 0x042F, 73584 }, { 0x0430, 74955 }, { 0x0431, 73984 }, { 0x0432, 74949 }, { 0x0433, 73978 }, { 0x0434, 74534 }, { 0x0435, 73542 }, { 0x0436, 74941 }, { 0x0437, 73970 }, { 0x0438, 75201 }, { 0x0439, 91422 }, { 0x043A, 91644 }, { 0x043B, 91414 }, { 0x043C, 91418 }, { 0x043D, 91636 }, { 0x043E, 91624 }, { 0x043F, 91632 }, { 0x0440, 74979 }, { 0x0441, 74008 }, { 0x0442, 75115 }, { 0x0443, 74158 }, { 0x0444, 74443 }, { 0x0445, 73451 }, { 0x0446, 74685 }, { 0x0447, 73693 }, { 0x0448, 74671 }, { 0x0449, 73679 }, { 0x044A, 74664 }, { 0x044B, 73672 }, { 0x044C, 74763 }, { 0x044D, 73771 }, { 0x044E, 74608 }, { 0x044F, 73616 }, { 0x0450, 74528 }, { 0x0451, 73536 }, { 0x0452, 74521 }, { 0x0453, 73529 }, { 0x0454, 74515 }, { 0x0455, 73523 }, { 0x0456, 75029 }, { 0x0457, 74063 }, { 0x0458, 74433 }, { 0x0459, 73441 }, { 0x045A, 75189 }, { 0x045B, 74247 }, { 0x045C, 74542 }, { 0x045D, 73550 }, { 0x045E, 75132 }, { 0x045F, 74175 }, { 0x0460, 74453 }, { 0x0461, 73461 }, { 0x0462, 74570 }, { 0x0463, 73578 }, { 0x0464, 75120 }, { 0x0465, 74163 }, { 0x0466, 75125 }, { 0x0467, 74168 }, { 0x0468, 74475 }, { 0x0469, 73483 }, { 0x046A, 75194 }, { 0x046B, 74252 }, { 0x046C, 74636 }, { 0x046D, 73644 }, { 0x046E, 74629 }, { 0x046F, 73637 }, { 0x0470, 74848 }, { 0x0471, 73856 }, { 0x0472, 75137 }, { 0x0473, 74180 }, { 0x0474, 75142 }, { 0x0475, 74185 }, { 0x0476, 74264 }, { 0x0477, 74757 }, { 0x0478, 73765 }, { 0x0479, 74509 }, { 0x047A, 73517 }, { 0x047B, 74374 }, { 0x047C, 73382 }, { 0x047D, 74407 }, { 0x047E, 73415 }, { 0x047F, 74420 }, { 0x0480, 73428 }, { 0x0481, 75174 }, { 0x0482, 74222 }, { 0x0483, 74397 }, { 0x0484, 73405 }, { 0x0485, 74134 }, { 0x0486, 74275 }, { 0x0487, 73283 }, { 0x0488, 74281 }, { 0x0489, 73289 }, { 0x048A, 75184 }, { 0x048B, 74242 }, { 0x048C, 74485 }, { 0x048D, 73493 }, { 0x048E, 74960 }, { 0x048F, 73989 }, { 0x0490, 74964 }, { 0x0491, 73993 }, { 0x0492, 74769 }, { 0x0493, 73777 }, { 0x0494, 74614 }, { 0x0495, 73622 }, { 0x0496, 75149 }, { 0x0497, 74192 }, { 0x0498, 74307 }, { 0x0499, 73315 }, { 0x049A, 74313 }, { 0x049B, 73321 }, { 0x049C, 74323 }, { 0x049D, 73331 }, { 0x049E, 74991 }, { 0x049F, 74020 }, { 0x04A0, 74996 }, { 0x04A1, 74025 }, { 0x04A2, 74291 }, { 0x04A3, 73299 }, { 0x04A4, 74340 }, { 0x04A5, 73348 }, { 0x04A6, 74346 }, { 0x04A7, 73354 }, { 0x04A8, 74333 }, { 0x04A9, 73341 }, { 0x04AA, 74642 }, { 0x04AB, 73650 }, { 0x04AC, 74691 }, { 0x04AD, 73699 }, { 0x04AE, 74909 }, { 0x04AF, 73938 }, { 0x04B0, 74677 }, { 0x04B1, 73685 }, { 0x04B2, 74463 }, { 0x04B3, 73471 }, { 0x04B4, 74469 }, { 0x04B5, 73477 }, { 0x04B6, 74808 }, { 0x04B7, 73816 }, { 0x04B8, 74813 }, { 0x04B9, 73821 }, { 0x04BA, 74838 }, { 0x04BB, 73846 }, { 0x04BC, 74843 }, { 0x04BD, 73851 }, { 0x04BE, 74818 }, { 0x04BF, 73826 }, { 0x04C0, 74823 }, { 0x04C1, 73831 }, { 0x04C2, 74828 }, { 0x04C3, 73836 }, { 0x04C4, 74833 }, { 0x04C5, 73841 }, { 0x04C6, 75100 }, { 0x04C7, 74143 }, { 0x04C8, 74368 }, { 0x04C9, 73376 }, { 0x04CA, 74713 }, { 0x04CB, 73721 }, { 0x04CC, 74729 }, { 0x04CD, 73737 }, { 0x04CE, 74745 }, { 0x04CF, 73753 }, { 0x04D0, 74555 }, { 0x04D1, 73563 }, { 0x04D2, 74584 }, { 0x04D3, 73592 }, { 0x04D4, 74919 }, { 0x04D5, 73948 }, { 0x04D6, 74380 }, { 0x04D7, 73388 }, { 0x04D8, 74426 }, { 0x04D9, 73434 }, { 0x04DA, 74549 }, { 0x04DB, 73557 }, { 0x04DC, 74852 }, { 0x04DD, 73860 }, { 0x04DE, 74413 }, { 0x04DF, 73421 }, { 0x04E0, 74937 }, { 0x04E1, 73966 }, { 0x04E2, 74779 }, { 0x04E3, 73787 }, { 0x04E4, 74387 }, { 0x04E5, 73395 }, { 0x04E6, 69007 }, { 0x04E7, 69011 }, { 0x04E8, 69027 }, { 0x04E9, 68963 }, { 0x04EA, 69019 }, { 0x04EB, 69003 }, { 0x04EC, 68967 }, { 0x04ED, 68971 }, { 0x04EE, 68991 }, { 0x04EF, 69075 }, { 0x04F0, 69031 }, { 0x04F1, 69091 }, { 0x04F2, 69071 }, { 0x04F3, 68955 }, { 0x04F4, 69039 }, { 0x04F5, 68975 }, { 0x04F6, 68979 }, { 0x04F7, 69083 }, { 0x04F8, 69079 }, { 0x04F9, 69043 }, { 0x04FA, 68999 }, { 0x04FB, 69047 }, { 0x04FC, 69063 }, { 0x04FD, 68995 }, { 0x04FE, 69015 }, { 0x04FF, 69051 }, { 0x0500, 69087 }, { 0x0501, 68987 }, { 0x0502, 69059 }, { 0x0503, 69067 }, { 0x0504, 69099 }, { 0x0505, 69055 }, { 0x0506, 68959 }, { 0x0507, 69103 }, { 0x0508, 69095 }, { 0x0509, 69035 }, { 0x050A, 68983 }, { 0x050B, 69023 }, { 0x050C, 69110 }, { 0x050D, 69119 }, { 0x050E, 69107 }, { 0x050F, 69121 }, { 0x0510, 68769 }, { 0x0511, 69116 }, { 0x0512, 69124 }, { 0x0513, 68823 }, { 0x0514, 68827 }, { 0x0515, 68843 }, { 0x0516, 68779 }, { 0x0517, 68835 }, { 0x0518, 68819 }, { 0x0519, 68783 }, { 0x051A, 68787 }, { 0x051B, 68807 }, { 0x051C, 68891 }, { 0x051D, 68847 }, { 0x051E, 68907 }, { 0x051F, 68887 }, { 0x0520, 68771 }, { 0x0521, 68855 }, { 0x0522, 68791 }, { 0x0523, 68795 }, { 0x0524, 68899 }, { 0x0525, 68895 }, { 0x0526, 68859 }, { 0x0527, 68815 }, { 0x0528, 68863 }, { 0x0529, 68879 }, { 0x052A, 68811 }, { 0x052B, 68831 }, { 0x052C, 68867 }, { 0x052D, 68903 }, { 0x052E, 68803 }, { 0x052F, 68875 }, { 0x0530, 68883 }, { 0x0531, 68915 }, { 0x0532, 68871 }, { 0x0533, 68775 }, { 0x0534, 68919 }, { 0x0535, 68911 }, { 0x0536, 68851 }, { 0x0537, 68799 }, { 0x0538, 68839 }, { 0x0539, 68923 }, { 0x053A, 68766 }, { 0x053B, 68953 }, { 0x053C, 114868 }, { 0x053D, 106200 }, { 0x053E, 68763 }, { 0x053F, 48037 }, { 0x0540, 47985 }, { 0x0541, 48054 }, { 0x0542, 48003 }, { 0x0543, 47999 }, { 0x0544, 48034 }, { 0x0545, 47982 }, { 0x0546, 48007 }, { 0x0547, 48027 }, { 0x0548, 47996 }, { 0x0549, 47988 }, { 0x054A, 48013 }, { 0x054B, 48016 }, { 0x054C, 48051 }, { 0x054D, 48030 }, { 0x054E, 48040 }, { 0x054F, 47976 }, { 0x0550, 47966 }, { 0x0551, 47973 }, { 0x0552, 48048 }, { 0x0553, 48020 }, { 0x0554, 48023 }, { 0x0555, 47970 }, { 0x0556, 47979 }, { 0x0557, 48044 }, { 0x0558, 47991 }, { 0x0559, 47957 }, { 0x055A, 47963 }, { 0x055B, 47960 }, { 0x055C, 48010 }, { 0x055D, 47884 }, { 0x055E, 47932 }, { 0x055F, 47903 }, { 0x0560, 47899 }, { 0x0561, 47907 }, { 0x0562, 47911 }, { 0x0563, 47935 }, { 0x0564, 47929 }, { 0x0565, 47926 }, { 0x0566, 47943 }, { 0x0567, 47914 }, { 0x0568, 47917 }, { 0x0569, 47950 }, { 0x056A, 47938 }, { 0x056B, 47923 }, { 0x056C, 48393 }, { 0x056D, 47892 }, { 0x056E, 48396 }, { 0x056F, 47895 }, { 0x0570, 47888 }, { 0x0571, 48389 }, { 0x0572, 47880 }, { 0x0573, 47876 }, { 0x0574, 48385 }, { 0x0575, 47946 }, { 0x0576, 48173 }, { 0x0577, 48078 }, { 0x0578, 48311 }, { 0x0579, 48271 }, { 0x057A, 48057 }, { 0x057B, 48147 }, { 0x057C, 48335 }, { 0x057D, 48091 }, { 0x057E, 48139 }, { 0x057F, 48160 }, { 0x0580, 48289 }, { 0x0581, 48094 }, { 0x0582, 48319 }, { 0x0583, 48299 }, { 0x0584, 48107 }, { 0x0585, 48303 }, { 0x0586, 48115 }, { 0x0587, 48343 }, { 0x0588, 48191 }, { 0x0589, 48279 }, { 0x058A, 48065 }, { 0x058B, 48307 }, { 0x058C, 48327 }, { 0x058D, 48123 }, { 0x058E, 48194 }, { 0x058F, 48202 }, { 0x0590, 48131 }, { 0x0591, 48375 }, { 0x0592, 48364 }, { 0x0593, 48380 }, { 0x0594, 48399 }, { 0x0595, 48402 }, { 0x0596, 39401 }, { 0x0597, 36358 }, { 0x0598, 39547 }, { 0x0599, 36355 }, { 0x059A, 36365 }, { 0x059B, 39397 }, { 0x059C, 109700 }, { 0x059D, 109733 }, { 0x059E, 36309 }, { 0x059F, 109696 }, { 0x05A0, 109691 }, { 0x05A1, 57824 }, { 0x05A2, 36424 }, { 0x05A3, 36311 }, { 0x05A4, 39404 }, { 0x05A5, 36352 }, { 0x05A6, 36384 }, { 0x05A7, 36361 }, { 0x05A8, 36380 }, { 0x05A9, 36347 }, { 0x05AA, 36377 }, { 0x05AB, 36568 }, { 0x05AC, 36706 }, { 0x05AD, 36650 }, { 0x05AE, 36718 }, { 0x05AF, 36715 }, { 0x05B0, 36721 }, { 0x05B1, 43310 }, { 0x05B2, 38551 }, { 0x05B3, 39501 }, { 0x05B4, 43302 }, { 0x05B5, 39378 }, { 0x05B6, 39024 }, { 0x05B7, 38315 }, { 0x05B8, 38271 }, { 0x05B9, 38010 }, { 0x05BA, 38293 }, { 0x05BB, 38099 }, { 0x05BC, 38254 }, { 0x05BD, 36946 }, { 0x05BE, 37934 }, { 0x05BF, 37896 }, { 0x05C0, 38812 }, { 0x05C1, 38498 }, { 0x05C2, 37292 }, { 0x05C3, 38528 }, { 0x05C4, 37082 }, { 0x05C5, 38799 }, { 0x05C6, 37707 }, { 0x05C7, 38858 }, { 0x05C8, 38708 }, { 0x05C9, 39160 }, { 0x05CA, 37815 }, { 0x05CB, 37053 }, { 0x05CC, 37859 }, { 0x05CD, 38231 }, { 0x05CE, 36885 }, { 0x05CF, 38995 }, { 0x05D0, 39041 }, { 0x05D1, 39055 }, { 0x05D2, 38964 }, { 0x05D3, 38918 }, { 0x05D4, 38926 }, { 0x05D5, 39523 }, { 0x05D6, 37175 }, { 0x05D7, 37665 }, { 0x05D8, 37517 }, { 0x05D9, 37571 }, { 0x05DA, 38554 }, { 0x05DB, 38596 }, { 0x05DC, 37390 }, { 0x05DD, 37983 }, { 0x05DE, 38376 }, { 0x05DF, 38060 }, { 0x05E0, 39541 }, { 0x05E1, 39530 }, { 0x05E2, 39553 }, { 0x05E3, 36468 }, { 0x05E4, 36444 }, { 0x05E5, 36498 }, { 0x05E6, 39408 }, { 0x05E7, 36730 }, { 0x05E8, 39394 }, { 0x05E9, 36492 }, { 0x05EA, 36495 }, { 0x05EB, 43312 }, { 0x05EC, 39550 }, { 0x05ED, 36329 }, { 0x05EE, 43308 }, { 0x05EF, 36745 }, { 0x05F0, 36751 }, { 0x05F1, 36740 }, { 0x05F2, 43305 }, { 0x05F3, 36475 }, { 0x05F4, 36420 }, { 0x05F5, 109721 }, { 0x05F6, 109703 }, { 0x05F7, 109709 }, { 0x05F8, 109730 }, { 0x05F9, 109715 }, { 0x05FA, 109712 }, { 0x05FB, 109706 }, { 0x05FC, 109727 }, { 0x05FD, 109724 }, { 0x05FE, 109718 }, { 0x05FF, 39513 }, { 0x0600, 39510 }, { 0x0601, 43315 }, { 0x0602, 36314 }, { 0x0603, 39311 }, { 0x0604, 39319 }, { 0x0605, 39390 }, { 0x0606, 38360 }, { 0x0607, 38257 }, { 0x0608, 38264 }, { 0x0609, 38479 }, { 0x060A, 38493 }, { 0x060B, 38483 }, { 0x060C, 36796 }, { 0x060D, 38488 }, { 0x060E, 38835 }, { 0x060F, 39258 }, { 0x0610, 38397 }, { 0x0611, 37899 }, { 0x0612, 37911 }, { 0x0613, 37635 }, { 0x0614, 39222 }, { 0x0615, 38878 }, { 0x0616, 37310 }, { 0x0617, 37302 }, { 0x0618, 38672 }, { 0x0619, 38433 }, { 0x061A, 37345 }, { 0x061B, 39193 }, { 0x061C, 39355 }, { 0x061D, 38420 }, { 0x061E, 37118 }, { 0x061F, 37085 }, { 0x0620, 37091 }, { 0x0621, 38901 }, { 0x0622, 39245 }, { 0x0623, 37162 }, { 0x0624, 37123 }, { 0x0625, 37111 }, { 0x0626, 38695 }, { 0x0627, 37763 }, { 0x0628, 37752 }, { 0x0629, 37710 }, { 0x062A, 37769 }, { 0x062B, 37716 }, { 0x062C, 37725 }, { 0x062D, 37504 }, { 0x062E, 37740 }, { 0x062F, 38711 }, { 0x0630, 38746 }, { 0x0631, 38753 }, { 0x0632, 37818 }, { 0x0633, 37825 }, { 0x0634, 37869 }, { 0x0635, 36903 }, { 0x0636, 39315 }, { 0x0637, 37194 }, { 0x0638, 37178 }, { 0x0639, 37960 }, { 0x063A, 37208 }, { 0x063B, 39114 }, { 0x063C, 37668 }, { 0x063D, 37680 }, { 0x063E, 39032 }, { 0x063F, 39189 }, { 0x0640, 37539 }, { 0x0641, 37520 }, { 0x0642, 36823 }, { 0x0643, 37544 }, { 0x0644, 37244 }, { 0x0645, 37254 }, { 0x0646, 39091 }, { 0x0647, 37247 }, { 0x0648, 38456 }, { 0x0649, 37259 }, { 0x064A, 37585 }, { 0x064B, 37579 }, { 0x064C, 37591 }, { 0x064D, 37598 }, { 0x064E, 38599 }, { 0x064F, 38641 }, { 0x0650, 39137 }, { 0x0651, 38612 }, { 0x0652, 38629 }, { 0x0653, 37476 }, { 0x0654, 39196 }, { 0x0655, 37428 }, { 0x0656, 37393 }, { 0x0657, 37397 }, { 0x0658, 37938 }, { 0x0659, 38005 }, { 0x065A, 39323 }, { 0x065B, 36846 }, { 0x065C, 36793 }, { 0x065D, 36872 }, { 0x065E, 39339 }, { 0x065F, 37998 }, { 0x0660, 36859 }, { 0x0661, 38914 }, { 0x0662, 38094 }, { 0x0663, 38137 }, { 0x0664, 37986 }, { 0x0665, 36770 }, { 0x0666, 38143 }, { 0x0667, 38155 }, { 0x0668, 38159 }, { 0x0669, 36318 }, { 0x066A, 36820 }, { 0x066B, 36696 }, { 0x066C, 36686 }, { 0x066D, 36584 }, { 0x066E, 36555 }, { 0x066F, 36580 }, { 0x0670, 36658 }, { 0x0671, 36606 }, { 0x0672, 36305 }, { 0x0673, 36724 }, { 0x0674, 36670 }, { 0x0675, 36675 }, { 0x0676, 36663 }, { 0x0677, 36590 }, { 0x0678, 36541 }, { 0x0679, 36654 }, { 0x067A, 36545 }, { 0x067B, 36548 }, { 0x067C, 36576 }, { 0x067D, 36596 }, { 0x067E, 36513 }, { 0x067F, 36458 }, { 0x0680, 36463 }, { 0x0681, 39516 }, { 0x0682, 36531 }, { 0x0683, 37138 }, { 0x0684, 37799 }, { 0x0685, 80589 }, { 0x0686, 80565 }, { 0x0687, 80573 }, { 0x0688, 80601 }, { 0x0689, 80581 }, { 0x068A, 80577 }, { 0x068B, 80569 }, { 0x068C, 80597 }, { 0x068D, 80593 }, { 0x068E, 80585 }, { 0x068F, 39163 }, { 0x0690, 37056 }, { 0x0691, 38998 }, { 0x0692, 36368 }, { 0x0693, 36372 }, { 0x0694, 37450 }, { 0x0695, 54859 }, { 0x0696, 55107 }, { 0x0697, 55082 }, { 0x0698, 55111 }, { 0x0699, 55086 }, { 0x069A, 55099 }, { 0x069B, 54873 }, { 0x069C, 54877 }, { 0x069D, 55114 }, { 0x069E, 55094 }, { 0x069F, 55102 }, { 0x06A0, 55069 }, { 0x06A1, 55072 }, { 0x06A2, 55075 }, { 0x06A3, 55119 }, { 0x06A4, 54975 }, { 0x06A5, 55034 }, { 0x06A6, 54940 }, { 0x06A7, 54982 }, { 0x06A8, 54985 }, { 0x06A9, 54992 }, { 0x06AA, 54998 }, { 0x06AB, 54922 }, { 0x06AC, 54937 }, { 0x06AD, 54972 }, { 0x06AE, 54943 }, { 0x06AF, 54958 }, { 0x06B0, 54961 }, { 0x06B1, 54965 }, { 0x06B2, 54968 }, { 0x06B3, 54946 }, { 0x06B4, 54995 }, { 0x06B5, 54928 }, { 0x06B6, 54931 }, { 0x06B7, 55015 }, { 0x06B8, 54978 }, { 0x06B9, 54919 }, { 0x06BA, 54925 }, { 0x06BB, 55030 }, { 0x06BC, 54989 }, { 0x06BD, 54949 }, { 0x06BE, 54952 }, { 0x06BF, 54955 }, { 0x06C0, 54934 }, { 0x06C1, 55003 }, { 0x06C2, 55007 }, { 0x06C3, 55011 }, { 0x06C4, 55038 }, { 0x06C5, 55041 }, { 0x06C6, 55044 }, { 0x06C7, 55047 }, { 0x06C8, 55050 }, { 0x06C9, 55053 }, { 0x06CA, 54895 }, { 0x06CB, 54898 }, { 0x06CC, 54915 }, { 0x06CD, 54911 }, { 0x06CE, 54887 }, { 0x06CF, 54890 }, { 0x06D0, 55104 }, { 0x06D1, 54881 }, { 0x06D2, 54884 }, { 0x06D3, 54901 }, { 0x06D4, 55066 }, { 0x06D5, 55080 }, { 0x06D6, 55078 }, { 0x06D7, 54863 }, { 0x06D8, 54868 }, { 0x06D9, 54903 }, { 0x06DA, 54907 }, { 0x06DB, 55058 }, { 0x06DC, 55062 }, { 0x06DD, 54893 }, { 0x06DE, 55056 }, { 0x06DF, 55026 }, { 0x06E0, 55022 }, { 0x06E1, 55018 }, { 0x06E2, 37017 }, { 0x06E3, 36949 }, { 0x06E4, 36995 }, { 0x06E5, 37004 }, { 0x06E6, 36959 }, { 0x06E7, 37025 }, { 0x06E8, 36975 }, { 0x06E9, 37295 }, { 0x06EA, 37352 }, { 0x06EB, 37100 }, { 0x06EC, 37144 }, { 0x06ED, 37794 }, { 0x06EE, 38728 }, { 0x06EF, 36888 }, { 0x06F0, 36917 }, { 0x06F1, 36895 }, { 0x06F2, 37201 }, { 0x06F3, 37215 }, { 0x06F4, 39035 }, { 0x06F5, 39048 }, { 0x06F6, 39062 }, { 0x06F7, 38557 }, { 0x06F8, 38563 }, { 0x06F9, 38605 }, { 0x06FA, 38623 }, { 0x06FB, 38617 }, { 0x06FC, 37574 }, { 0x06FD, 37732 }, { 0x06FE, 37757 }, { 0x06FF, 38720 }, { 0x0700, 37336 }, { 0x0701, 37316 }, { 0x0702, 38735 }, { 0x0703, 37783 }, { 0x0704, 37327 }, { 0x0705, 38337 }, { 0x0706, 38346 }, { 0x0707, 38934 }, { 0x0708, 38954 }, { 0x0709, 38944 }, { 0x070A, 38032 }, { 0x070B, 38041 }, { 0x070C, 38184 }, { 0x070D, 38194 }, { 0x070E, 37361 }, { 0x070F, 38764 }, { 0x0710, 38773 }, { 0x0711, 37532 }, { 0x0712, 57010 }, { 0x0713, 57115 }, { 0x0714, 57058 }, { 0x0715, 57016 }, { 0x0716, 57007 }, { 0x0717, 57112 }, { 0x0718, 57049 }, { 0x0719, 57040 }, { 0x071A, 57067 }, { 0x071B, 57055 }, { 0x071C, 57043 }, { 0x071D, 57076 }, { 0x071E, 57034 }, { 0x071F, 57052 }, { 0x0720, 57046 }, { 0x0721, 57109 }, { 0x0722, 57064 }, { 0x0723, 57091 }, { 0x0724, 57103 }, { 0x0725, 57100 }, { 0x0726, 57019 }, { 0x0727, 57097 }, { 0x0728, 57094 }, { 0x0729, 57106 }, { 0x072A, 57037 }, { 0x072B, 57028 }, { 0x072C, 57031 }, { 0x072D, 57088 }, { 0x072E, 57022 }, { 0x072F, 57085 }, { 0x0730, 57082 }, { 0x0731, 57073 }, { 0x0732, 57001 }, { 0x0733, 57004 }, { 0x0734, 57025 }, { 0x0735, 57079 }, { 0x0736, 57061 }, { 0x0737, 57070 }, { 0x0738, 57118 }, { 0x0739, 57128 }, { 0x073A, 57122 }, { 0x073B, 57130 }, { 0x073C, 57126 }, { 0x073D, 57136 }, { 0x073E, 57120 }, { 0x073F, 57132 }, { 0x0740, 57124 }, { 0x0741, 57134 }, { 0x0742, 56999 }, { 0x0743, 57013 }, { 0x0744, 6907 }, { 0x0745, 6889 }, { 0x0746, 6895 }, { 0x0747, 6916 }, { 0x0748, 6901 }, { 0x0749, 6898 }, { 0x074A, 6892 }, { 0x074B, 6913 }, { 0x074C, 6910 }, { 0x074D, 6904 }, { 0x074E, 6919 }, { 0x074F, 6943 }, { 0x0750, 6925 }, { 0x0751, 6922 }, { 0x0752, 6934 }, { 0x0753, 6971 }, { 0x0754, 6931 }, { 0x0755, 7020 }, { 0x0756, 6928 }, { 0x0757, 6937 }, { 0x0758, 6974 }, { 0x0759, 6983 }, { 0x075A, 6952 }, { 0x075B, 6992 }, { 0x075C, 6940 }, { 0x075D, 6977 }, { 0x075E, 7005 }, { 0x075F, 6980 }, { 0x0760, 6995 }, { 0x0761, 6946 }, { 0x0762, 6955 }, { 0x0763, 6958 }, { 0x0764, 6967 }, { 0x0765, 6961 }, { 0x0766, 6998 }, { 0x0767, 6964 }, { 0x0768, 6949 }, { 0x0769, 6986 }, { 0x076A, 6989 }, { 0x076B, 7001 }, { 0x076C, 7008 }, { 0x076D, 7016 }, { 0x076E, 7012 }, { 0x076F, 7055 }, { 0x0770, 7050 }, { 0x0771, 7060 }, { 0x0772, 7045 }, { 0x0773, 7035 }, { 0x0774, 7030 }, { 0x0775, 7040 }, { 0x0776, 7070 }, { 0x0777, 7065 }, { 0x0778, 6883 }, { 0x0779, 6879 }, { 0x077A, 7023 }, { 0x077B, 7027 }, { 0x077C, 6887 }, { 0x077D, 7076 }, { 0x077E, 7074 }, { 0x077F, 101940 }, { 0x0780, 101919 }, { 0x0781, 101958 }, { 0x0782, 101955 }, { 0x0783, 101913 }, { 0x0784, 101916 }, { 0x0785, 101937 }, { 0x0786, 101910 }, { 0x0787, 101931 }, { 0x0788, 101934 }, { 0x0789, 101943 }, { 0x078A, 101961 }, { 0x078B, 101922 }, { 0x078C, 101925 }, { 0x078D, 101964 }, { 0x078E, 101907 }, { 0x078F, 101904 }, { 0x0790, 101967 }, { 0x0791, 101928 }, { 0x0792, 101946 }, { 0x0793, 101949 }, { 0x0794, 101952 }, { 0x0795, 101817 }, { 0x0796, 101823 }, { 0x0797, 101829 }, { 0x0798, 101820 }, { 0x0799, 101979 }, { 0x079A, 101832 }, { 0x079B, 101865 }, { 0x079C, 101840 }, { 0x079D, 101899 }, { 0x079E, 101880 }, { 0x079F, 101856 }, { 0x07A0, 101894 }, { 0x07A1, 101860 }, { 0x07A2, 101836 }, { 0x07A3, 101974 }, { 0x07A4, 101885 }, { 0x07A5, 101875 }, { 0x07A6, 101852 }, { 0x07A7, 101970 }, { 0x07A8, 101870 }, { 0x07A9, 101844 }, { 0x07AA, 101848 }, { 0x07AB, 101890 }, { 0x07AC, 101826 }, { 0x07AD, 102022 }, { 0x07AE, 102006 }, { 0x07AF, 101997 }, { 0x07B0, 101984 }, { 0x07B1, 102012 }, { 0x07B2, 102025 }, { 0x07B3, 102028 }, { 0x07B4, 102018 }, { 0x07B5, 102003 }, { 0x07B6, 102000 }, { 0x07B7, 101994 }, { 0x07B8, 101991 }, { 0x07B9, 102015 }, { 0x07BA, 101987 }, { 0x07BB, 102009 }, { 0x07BC, 62075 }, { 0x07BD, 62009 }, { 0x07BE, 62015 }, { 0x07BF, 62012 }, { 0x07C0, 62018 }, { 0x07C1, 62078 }, { 0x07C2, 62048 }, { 0x07C3, 62054 }, { 0x07C4, 62066 }, { 0x07C5, 62072 }, { 0x07C6, 62021 }, { 0x07C7, 62024 }, { 0x07C8, 62027 }, { 0x07C9, 62030 }, { 0x07CA, 62042 }, { 0x07CB, 62051 }, { 0x07CC, 62033 }, { 0x07CD, 62063 }, { 0x07CE, 62036 }, { 0x07CF, 62039 }, { 0x07D0, 62060 }, { 0x07D1, 62045 }, { 0x07D2, 62081 }, { 0x07D3, 62069 }, { 0x07D4, 62057 }, { 0x07D5, 62087 }, { 0x07D6, 62092 }, { 0x07D7, 62084 }, { 0x07D8, 62090 }, { 0x07D9, 36981 }, { 0x07DA, 36969 }, { 0x07DB, 38501 }, { 0x07DC, 37862 }, { 0x07DD, 37184 }, { 0x07DE, 37674 }, { 0x07DF, 37605 }, { 0x07E0, 38569 }, { 0x07E1, 38073 }, { 0x07E2, 38063 }, { 0x07E3, 37747 }, { 0x07E4, 37992 }, { 0x07E5, 39382 }, { 0x07E6, 37631 }, { 0x07E7, 37131 }, { 0x07E8, 37832 }, { 0x07E9, 37266 }, { 0x07EA, 39386 }, { 0x07EB, 38861 }, { 0x07EC, 36910 }, { 0x07ED, 37526 }, { 0x07EE, 36988 }, { 0x07EF, 37638 }, { 0x07F0, 37904 }, { 0x07F1, 37776 }, { 0x07F2, 38083 }, { 0x07F3, 39299 }, { 0x07F4, 39303 }, { 0x07F5, 39307 }, { 0x07F6, 36630 }, { 0x07F7, 36564 }, { 0x07F8, 36551 }, { 0x07F9, 36560 }, { 0x07FA, 36600 }, { 0x07FB, 36535 }, { 0x07FC, 36645 }, { 0x07FD, 36640 }, { 0x07FE, 36635 }, { 0x07FF, 36620 }, { 0x0800, 36615 }, { 0x0801, 36625 }, { 0x0802, 36681 }, { 0x0803, 36610 }, { 0x0804, 39536 }, { 0x0805, 39506 }, { 0x0806, 36429 }, { 0x0807, 36426 }, { 0x0808, 36432 }, { 0x0809, 36438 }, { 0x080A, 36435 }, { 0x080B, 36441 }, { 0x080C, 36392 }, { 0x080D, 36402 }, { 0x080E, 36412 }, { 0x080F, 36397 }, { 0x0810, 36407 }, { 0x0811, 36416 }, { 0x0812, 36341 }, { 0x0813, 36338 }, { 0x0814, 36344 }, { 0x0815, 36572 }, { 0x0816, 36480 }, { 0x0817, 36470 }, { 0x0818, 36500 }, { 0x0819, 36321 }, { 0x081A, 36517 }, { 0x081B, 36325 }, { 0x081C, 36527 }, { 0x081D, 36758 }, { 0x081E, 36763 }, { 0x081F, 36521 }, { 0x0820, 36446 }, { 0x0821, 36333 }, { 0x0822, 103253 }, { 0x0823, 103260 }, { 0x0824, 103247 }, { 0x0825, 103244 }, { 0x0826, 103628 }, { 0x0827, 103429 }, { 0x0828, 103444 }, { 0x0829, 103435 }, { 0x082A, 103474 }, { 0x082B, 103441 }, { 0x082C, 103513 }, { 0x082D, 103664 }, { 0x082E, 103660 }, { 0x082F, 103644 }, { 0x0830, 103632 }, { 0x0831, 103432 }, { 0x0832, 103447 }, { 0x0833, 103648 }, { 0x0834, 103636 }, { 0x0835, 103438 }, { 0x0836, 103450 }, { 0x0837, 103480 }, { 0x0838, 103552 }, { 0x0839, 103468 }, { 0x083A, 103543 }, { 0x083B, 103558 }, { 0x083C, 103459 }, { 0x083D, 103531 }, { 0x083E, 103477 }, { 0x083F, 103546 }, { 0x0840, 103564 }, { 0x0841, 103588 }, { 0x0842, 103618 }, { 0x0843, 103534 }, { 0x0844, 103603 }, { 0x0845, 103561 }, { 0x0846, 103507 }, { 0x0847, 103585 }, { 0x0848, 103462 }, { 0x0849, 103537 }, { 0x084A, 103489 }, { 0x084B, 103615 }, { 0x084C, 103495 }, { 0x084D, 103570 }, { 0x084E, 103456 }, { 0x084F, 103528 }, { 0x0850, 103486 }, { 0x0851, 103519 }, { 0x0852, 103501 }, { 0x0853, 103576 }, { 0x0854, 103483 }, { 0x0855, 103555 }, { 0x0856, 103612 }, { 0x0857, 103516 }, { 0x0858, 103579 }, { 0x0859, 103582 }, { 0x085A, 103504 }, { 0x085B, 103471 }, { 0x085C, 103355 }, { 0x085D, 103367 }, { 0x085E, 103226 }, { 0x085F, 103250 }, { 0x0860, 103335 }, { 0x0861, 103323 }, { 0x0862, 103351 }, { 0x0863, 103331 }, { 0x0864, 103363 }, { 0x0865, 103406 }, { 0x0866, 103416 }, { 0x0867, 103385 }, { 0x0868, 103375 }, { 0x0869, 103319 }, { 0x086A, 103339 }, { 0x086B, 103390 }, { 0x086C, 103380 }, { 0x086D, 103327 }, { 0x086E, 103343 }, { 0x086F, 103234 }, { 0x0870, 103421 }, { 0x0871, 103347 }, { 0x0872, 103213 }, { 0x0873, 103676 }, { 0x0874, 103680 }, { 0x0875, 103316 }, { 0x0876, 103279 }, { 0x0877, 103395 }, { 0x0878, 103359 }, { 0x0879, 103371 }, { 0x087A, 103498 }, { 0x087B, 103609 }, { 0x087C, 103606 }, { 0x087D, 103522 }, { 0x087E, 103621 }, { 0x087F, 103573 }, { 0x0880, 103465 }, { 0x0881, 103594 }, { 0x0882, 103672 }, { 0x0883, 103668 }, { 0x0884, 103401 }, { 0x0885, 103411 }, { 0x0886, 103284 }, { 0x0887, 103426 }, { 0x0888, 103304 }, { 0x0889, 103286 }, { 0x088A, 103292 }, { 0x088B, 103313 }, { 0x088C, 103298 }, { 0x088D, 103295 }, { 0x088E, 103289 }, { 0x088F, 103310 }, { 0x0890, 103307 }, { 0x0891, 103301 }, { 0x0892, 103686 }, { 0x0893, 103221 }, { 0x0894, 103640 }, { 0x0895, 103492 }, { 0x0896, 103567 }, { 0x0897, 103453 }, { 0x0898, 103510 }, { 0x0899, 103591 }, { 0x089A, 103656 }, { 0x089B, 103597 }, { 0x089C, 103624 }, { 0x089D, 103540 }, { 0x089E, 103549 }, { 0x089F, 103652 }, { 0x08A0, 103600 }, { 0x08A1, 103525 }, { 0x08A2, 58013 }, { 0x08A3, 58030 }, { 0x08A4, 58024 }, { 0x08A5, 58021 }, { 0x08A6, 58130 }, { 0x08A7, 58145 }, { 0x08A8, 58136 }, { 0x08A9, 58169 }, { 0x08AA, 58142 }, { 0x08AB, 58211 }, { 0x08AC, 58285 }, { 0x08AD, 58281 }, { 0x08AE, 58133 }, { 0x08AF, 58148 }, { 0x08B0, 58139 }, { 0x08B1, 58151 }, { 0x08B2, 58175 }, { 0x08B3, 58235 }, { 0x08B4, 58163 }, { 0x08B5, 58229 }, { 0x08B6, 58238 }, { 0x08B7, 58157 }, { 0x08B8, 58220 }, { 0x08B9, 58172 }, { 0x08BA, 58232 }, { 0x08BB, 58244 }, { 0x08BC, 58265 }, { 0x08BD, 58274 }, { 0x08BE, 58223 }, { 0x08BF, 58271 }, { 0x08C0, 58241 }, { 0x08C1, 58208 }, { 0x08C2, 58262 }, { 0x08C3, 58160 }, { 0x08C4, 58226 }, { 0x08C5, 58184 }, { 0x08C6, 58187 }, { 0x08C7, 58247 }, { 0x08C8, 58154 }, { 0x08C9, 58217 }, { 0x08CA, 58181 }, { 0x08CB, 58214 }, { 0x08CC, 58190 }, { 0x08CD, 58178 }, { 0x08CE, 58256 }, { 0x08CF, 58259 }, { 0x08D0, 58205 }, { 0x08D1, 58166 }, { 0x08D2, 58015 }, { 0x08D3, 58027 }, { 0x08D4, 58088 }, { 0x08D5, 58076 }, { 0x08D6, 58100 }, { 0x08D7, 58084 }, { 0x08D8, 58104 }, { 0x08D9, 58113 }, { 0x08DA, 58123 }, { 0x08DB, 58072 }, { 0x08DC, 58092 }, { 0x08DD, 58080 }, { 0x08DE, 58096 }, { 0x08DF, 58018 }, { 0x08E0, 58277 }, { 0x08E1, 58009 }, { 0x08E2, 58253 }, { 0x08E3, 58250 }, { 0x08E4, 58268 }, { 0x08E5, 58293 }, { 0x08E6, 58289 }, { 0x08E7, 58108 }, { 0x08E8, 58118 }, { 0x08E9, 58051 }, { 0x08EA, 58033 }, { 0x08EB, 58039 }, { 0x08EC, 58060 }, { 0x08ED, 58045 }, { 0x08EE, 58042 }, { 0x08EF, 58036 }, { 0x08F0, 58057 }, { 0x08F1, 58054 }, { 0x08F2, 58048 }, { 0x08F3, 58199 }, { 0x08F4, 58193 }, { 0x08F5, 58066 }, { 0x08F6, 58069 }, { 0x08F7, 58297 }, { 0x08F8, 58309 }, { 0x08F9, 58317 }, { 0x08FA, 58313 }, { 0x08FB, 58301 }, { 0x08FC, 58321 }, { 0x08FD, 58128 }, { 0x08FE, 58063 }, { 0x08FF, 81389 }, { 0x0900, 81393 }, { 0x0901, 81408 }, { 0x0902, 81481 }, { 0x0903, 81490 }, { 0x0904, 81484 }, { 0x0905, 81520 }, { 0x0906, 81487 }, { 0x0907, 81553 }, { 0x0908, 81508 }, { 0x0909, 81493 }, { 0x090A, 81538 }, { 0x090B, 81496 }, { 0x090C, 81526 }, { 0x090D, 81583 }, { 0x090E, 81514 }, { 0x090F, 81577 }, { 0x0910, 81589 }, { 0x0911, 81502 }, { 0x0912, 81568 }, { 0x0913, 81523 }, { 0x0914, 81580 }, { 0x0915, 81595 }, { 0x0916, 81610 }, { 0x0917, 81622 }, { 0x0918, 81571 }, { 0x0919, 81613 }, { 0x091A, 81592 }, { 0x091B, 81550 }, { 0x091C, 81607 }, { 0x091D, 81505 }, { 0x091E, 81574 }, { 0x091F, 81535 }, { 0x0920, 81541 }, { 0x0921, 81598 }, { 0x0922, 81499 }, { 0x0923, 81565 }, { 0x0924, 81532 }, { 0x0925, 81559 }, { 0x0926, 81544 }, { 0x0927, 81529 }, { 0x0928, 81586 }, { 0x0929, 81556 }, { 0x092A, 81604 }, { 0x092B, 81547 }, { 0x092C, 81517 }, { 0x092D, 81396 }, { 0x092E, 81453 }, { 0x092F, 81445 }, { 0x0930, 81469 }, { 0x0931, 81449 }, { 0x0932, 81477 }, { 0x0933, 81465 }, { 0x0934, 81457 }, { 0x0935, 81473 }, { 0x0936, 81461 }, { 0x0937, 81402 }, { 0x0938, 81399 }, { 0x0939, 81619 }, { 0x093A, 81616 }, { 0x093B, 81562 }, { 0x093C, 81601 }, { 0x093D, 81511 }, { 0x093E, 81431 }, { 0x093F, 81413 }, { 0x0940, 81419 }, { 0x0941, 81440 }, { 0x0942, 81425 }, { 0x0943, 81422 }, { 0x0944, 81416 }, { 0x0945, 81437 }, { 0x0946, 81434 }, { 0x0947, 81428 }, { 0x0948, 81443 }, { 0x0949, 81411 }, { 0x094A, 81385 }, { 0x094B, 81387 }, { 0x094C, 81382 }, { 0x094D, 81405 }, { 0x094E, 81118 }, { 0x094F, 81112 }, { 0x0950, 81109 }, { 0x0951, 81228 }, { 0x0952, 81243 }, { 0x0953, 81234 }, { 0x0954, 81267 }, { 0x0955, 81240 }, { 0x0956, 81297 }, { 0x0957, 81367 }, { 0x0958, 81363 }, { 0x0959, 81220 }, { 0x095A, 81231 }, { 0x095B, 81246 }, { 0x095C, 81224 }, { 0x095D, 81237 }, { 0x095E, 81249 }, { 0x095F, 81273 }, { 0x0960, 81324 }, { 0x0961, 81261 }, { 0x0962, 81318 }, { 0x0963, 81330 }, { 0x0964, 81255 }, { 0x0965, 81309 }, { 0x0966, 81270 }, { 0x0967, 81321 }, { 0x0968, 81336 }, { 0x0969, 81351 }, { 0x096A, 81360 }, { 0x096B, 81312 }, { 0x096C, 81357 }, { 0x096D, 81333 }, { 0x096E, 81294 }, { 0x096F, 81348 }, { 0x0970, 81258 }, { 0x0971, 81315 }, { 0x0972, 81282 }, { 0x0973, 81285 }, { 0x0974, 81339 }, { 0x0975, 81252 }, { 0x0976, 81306 }, { 0x0977, 81279 }, { 0x0978, 81303 }, { 0x0979, 81288 }, { 0x097A, 81276 }, { 0x097B, 81327 }, { 0x097C, 81300 }, { 0x097D, 81342 }, { 0x097E, 81345 }, { 0x097F, 81291 }, { 0x0980, 81264 }, { 0x0981, 81103 }, { 0x0982, 81115 }, { 0x0983, 81170 }, { 0x0984, 81158 }, { 0x0985, 81182 }, { 0x0986, 81166 }, { 0x0987, 81186 }, { 0x0988, 81205 }, { 0x0989, 81215 }, { 0x098A, 81190 }, { 0x098B, 81154 }, { 0x098C, 81174 }, { 0x098D, 81195 }, { 0x098E, 81162 }, { 0x098F, 81178 }, { 0x0990, 81106 }, { 0x0991, 81101 }, { 0x0992, 81375 }, { 0x0993, 81371 }, { 0x0994, 81200 }, { 0x0995, 81210 }, { 0x0996, 81139 }, { 0x0997, 81121 }, { 0x0998, 81127 }, { 0x0999, 81148 }, { 0x099A, 81133 }, { 0x099B, 81130 }, { 0x099C, 81124 }, { 0x099D, 81145 }, { 0x099E, 81142 }, { 0x099F, 81136 }, { 0x09A0, 81379 }, { 0x09A1, 81151 }, { 0x09A2, 81354 }, { 0x09A3, 32934 }, { 0x09A4, 32928 }, { 0x09A5, 32925 }, { 0x09A6, 33025 }, { 0x09A7, 33040 }, { 0x09A8, 33031 }, { 0x09A9, 33064 }, { 0x09AA, 33037 }, { 0x09AB, 33094 }, { 0x09AC, 33173 }, { 0x09AD, 33169 }, { 0x09AE, 33028 }, { 0x09AF, 33043 }, { 0x09B0, 33034 }, { 0x09B1, 33046 }, { 0x09B2, 33070 }, { 0x09B3, 33124 }, { 0x09B4, 33058 }, { 0x09B5, 33118 }, { 0x09B6, 33130 }, { 0x09B7, 33052 }, { 0x09B8, 33109 }, { 0x09B9, 33067 }, { 0x09BA, 33121 }, { 0x09BB, 33136 }, { 0x09BC, 33157 }, { 0x09BD, 33166 }, { 0x09BE, 33112 }, { 0x09BF, 33163 }, { 0x09C0, 33133 }, { 0x09C1, 33091 }, { 0x09C2, 33154 }, { 0x09C3, 33055 }, { 0x09C4, 33115 }, { 0x09C5, 33079 }, { 0x09C6, 33082 }, { 0x09C7, 33139 }, { 0x09C8, 33049 }, { 0x09C9, 33106 }, { 0x09CA, 33076 }, { 0x09CB, 33103 }, { 0x09CC, 33085 }, { 0x09CD, 33073 }, { 0x09CE, 33127 }, { 0x09CF, 33097 }, { 0x09D0, 33148 }, { 0x09D1, 33151 }, { 0x09D2, 33088 }, { 0x09D3, 33061 }, { 0x09D4, 32919 }, { 0x09D5, 32931 }, { 0x09D6, 32983 }, { 0x09D7, 32971 }, { 0x09D8, 32995 }, { 0x09D9, 32979 }, { 0x09DA, 32999 }, { 0x09DB, 33008 }, { 0x09DC, 33018 }, { 0x09DD, 32967 }, { 0x09DE, 32987 }, { 0x09DF, 32975 }, { 0x09E0, 32991 }, { 0x09E1, 32922 }, { 0x09E2, 32911 }, { 0x09E3, 32915 }, { 0x09E4, 33145 }, { 0x09E5, 33142 }, { 0x09E6, 33160 }, { 0x09E7, 33181 }, { 0x09E8, 33177 }, { 0x09E9, 33003 }, { 0x09EA, 33013 }, { 0x09EB, 32955 }, { 0x09EC, 32937 }, { 0x09ED, 32943 }, { 0x09EE, 32964 }, { 0x09EF, 32949 }, { 0x09F0, 32946 }, { 0x09F1, 32940 }, { 0x09F2, 32961 }, { 0x09F3, 32958 }, { 0x09F4, 32952 }, { 0x09F5, 33023 }, { 0x09F6, 33100 }, { 0x09F7, 33193 }, { 0x09F8, 33185 }, { 0x09F9, 33201 }, { 0x09FA, 33197 }, { 0x09FB, 33189 }, { 0x09FC, 33205 }, { 0x09FD, 34964 }, { 0x09FE, 34961 }, { 0x09FF, 35056 }, { 0x0A00, 35071 }, { 0x0A01, 35062 }, { 0x0A02, 35089 }, { 0x0A03, 35068 }, { 0x0A04, 35122 }, { 0x0A05, 35059 }, { 0x0A06, 35083 }, { 0x0A07, 35074 }, { 0x0A08, 35065 }, { 0x0A09, 35107 }, { 0x0A0A, 35077 }, { 0x0A0B, 35095 }, { 0x0A0C, 35134 }, { 0x0A0D, 35080 }, { 0x0A0E, 35092 }, { 0x0A0F, 35140 }, { 0x0A10, 35152 }, { 0x0A11, 35137 }, { 0x0A12, 35119 }, { 0x0A13, 35104 }, { 0x0A14, 35158 }, { 0x0A15, 35110 }, { 0x0A16, 35101 }, { 0x0A17, 35128 }, { 0x0A18, 35113 }, { 0x0A19, 35143 }, { 0x0A1A, 35098 }, { 0x0A1B, 35131 }, { 0x0A1C, 35155 }, { 0x0A1D, 35125 }, { 0x0A1E, 35146 }, { 0x0A1F, 35149 }, { 0x0A20, 35116 }, { 0x0A21, 35086 }, { 0x0A22, 35025 }, { 0x0A23, 35013 }, { 0x0A24, 35041 }, { 0x0A25, 35021 }, { 0x0A26, 35049 }, { 0x0A27, 35009 }, { 0x0A28, 35037 }, { 0x0A29, 35029 }, { 0x0A2A, 35017 }, { 0x0A2B, 35045 }, { 0x0A2C, 35033 }, { 0x0A2D, 34958 }, { 0x0A2E, 34953 }, { 0x0A2F, 34949 }, { 0x0A30, 34991 }, { 0x0A31, 34973 }, { 0x0A32, 34979 }, { 0x0A33, 35000 }, { 0x0A34, 34985 }, { 0x0A35, 34982 }, { 0x0A36, 34976 }, { 0x0A37, 34997 }, { 0x0A38, 34994 }, { 0x0A39, 34988 }, { 0x0A3A, 35169 }, { 0x0A3B, 35161 }, { 0x0A3C, 35165 }, { 0x0A3D, 34955 }, { 0x0A3E, 35003 }, { 0x0A3F, 34967 }, { 0x0A40, 34970 }, { 0x0A41, 35053 }, { 0x0A42, 34945 }, { 0x0A43, 35006 }, { 0x0A44, 35172 }, { 0x0A45, 56658 }, { 0x0A46, 56663 }, { 0x0A47, 56652 }, { 0x0A48, 56649 }, { 0x0A49, 56763 }, { 0x0A4A, 56778 }, { 0x0A4B, 56769 }, { 0x0A4C, 56805 }, { 0x0A4D, 56775 }, { 0x0A4E, 56838 }, { 0x0A4F, 56920 }, { 0x0A50, 56916 }, { 0x0A51, 56766 }, { 0x0A52, 56796 }, { 0x0A53, 56781 }, { 0x0A54, 56772 }, { 0x0A55, 56823 }, { 0x0A56, 56784 }, { 0x0A57, 56811 }, { 0x0A58, 56868 }, { 0x0A59, 56799 }, { 0x0A5A, 56862 }, { 0x0A5B, 56874 }, { 0x0A5C, 56790 }, { 0x0A5D, 56850 }, { 0x0A5E, 56808 }, { 0x0A5F, 56865 }, { 0x0A60, 56880 }, { 0x0A61, 56901 }, { 0x0A62, 56913 }, { 0x0A63, 56853 }, { 0x0A64, 56904 }, { 0x0A65, 56877 }, { 0x0A66, 56835 }, { 0x0A67, 56895 }, { 0x0A68, 56793 }, { 0x0A69, 56856 }, { 0x0A6A, 56820 }, { 0x0A6B, 56826 }, { 0x0A6C, 56883 }, { 0x0A6D, 56787 }, { 0x0A6E, 56847 }, { 0x0A6F, 56817 }, { 0x0A70, 56844 }, { 0x0A71, 56829 }, { 0x0A72, 56886 }, { 0x0A73, 56814 }, { 0x0A74, 56871 }, { 0x0A75, 56907 }, { 0x0A76, 56841 }, { 0x0A77, 56889 }, { 0x0A78, 56892 }, { 0x0A79, 56832 }, { 0x0A7A, 56802 }, { 0x0A7B, 56655 }, { 0x0A7C, 56712 }, { 0x0A7D, 56700 }, { 0x0A7E, 56728 }, { 0x0A7F, 56708 }, { 0x0A80, 56736 }, { 0x0A81, 56745 }, { 0x0A82, 56755 }, { 0x0A83, 56696 }, { 0x0A84, 56724 }, { 0x0A85, 56716 }, { 0x0A86, 56704 }, { 0x0A87, 56732 }, { 0x0A88, 56720 }, { 0x0A89, 56646 }, { 0x0A8A, 56760 }, { 0x0A8B, 56639 }, { 0x0A8C, 56898 }, { 0x0A8D, 56859 }, { 0x0A8E, 56910 }, { 0x0A8F, 56928 }, { 0x0A90, 56924 }, { 0x0A91, 56740 }, { 0x0A92, 56750 }, { 0x0A93, 56684 }, { 0x0A94, 56666 }, { 0x0A95, 56672 }, { 0x0A96, 56693 }, { 0x0A97, 56678 }, { 0x0A98, 56675 }, { 0x0A99, 56669 }, { 0x0A9A, 56690 }, { 0x0A9B, 56687 }, { 0x0A9C, 56681 }, { 0x0A9D, 56968 }, { 0x0A9E, 56932 }, { 0x0A9F, 56950 }, { 0x0AA0, 56977 }, { 0x0AA1, 56941 }, { 0x0AA2, 56959 }, { 0x0AA3, 56986 }, { 0x0AA4, 56643 }, { 0x0AA5, 61441 }, { 0x0AA6, 61454 }, { 0x0AA7, 61448 }, { 0x0AA8, 61445 }, { 0x0AA9, 61560 }, { 0x0AAA, 61575 }, { 0x0AAB, 61566 }, { 0x0AAC, 61605 }, { 0x0AAD, 61572 }, { 0x0AAE, 61638 }, { 0x0AAF, 61711 }, { 0x0AB0, 61707 }, { 0x0AB1, 61563 }, { 0x0AB2, 61593 }, { 0x0AB3, 61578 }, { 0x0AB4, 61569 }, { 0x0AB5, 61623 }, { 0x0AB6, 61581 }, { 0x0AB7, 61611 }, { 0x0AB8, 61665 }, { 0x0AB9, 61599 }, { 0x0ABA, 61659 }, { 0x0ABB, 61671 }, { 0x0ABC, 61587 }, { 0x0ABD, 61650 }, { 0x0ABE, 61608 }, { 0x0ABF, 61662 }, { 0x0AC0, 61677 }, { 0x0AC1, 61695 }, { 0x0AC2, 61704 }, { 0x0AC3, 61653 }, { 0x0AC4, 61698 }, { 0x0AC5, 61674 }, { 0x0AC6, 61635 }, { 0x0AC7, 61692 }, { 0x0AC8, 61590 }, { 0x0AC9, 61656 }, { 0x0ACA, 61620 }, { 0x0ACB, 61626 }, { 0x0ACC, 61680 }, { 0x0ACD, 61584 }, { 0x0ACE, 61647 }, { 0x0ACF, 61617 }, { 0x0AD0, 61644 }, { 0x0AD1, 61629 }, { 0x0AD2, 61683 }, { 0x0AD3, 61614 }, { 0x0AD4, 61668 }, { 0x0AD5, 61641 }, { 0x0AD6, 61686 }, { 0x0AD7, 61689 }, { 0x0AD8, 61632 }, { 0x0AD9, 61602 }, { 0x0ADA, 61435 }, { 0x0ADB, 61451 }, { 0x0ADC, 61509 }, { 0x0ADD, 61497 }, { 0x0ADE, 61525 }, { 0x0ADF, 61505 }, { 0x0AE0, 61533 }, { 0x0AE1, 61542 }, { 0x0AE2, 61552 }, { 0x0AE3, 61493 }, { 0x0AE4, 61521 }, { 0x0AE5, 61513 }, { 0x0AE6, 61501 }, { 0x0AE7, 61529 }, { 0x0AE8, 61517 }, { 0x0AE9, 61438 }, { 0x0AEA, 61557 }, { 0x0AEB, 61431 }, { 0x0AEC, 61596 }, { 0x0AED, 61719 }, { 0x0AEE, 61715 }, { 0x0AEF, 61537 }, { 0x0AF0, 61547 }, { 0x0AF1, 61481 }, { 0x0AF2, 61463 }, { 0x0AF3, 61469 }, { 0x0AF4, 61490 }, { 0x0AF5, 61475 }, { 0x0AF6, 61472 }, { 0x0AF7, 61466 }, { 0x0AF8, 61487 }, { 0x0AF9, 61484 }, { 0x0AFA, 61478 }, { 0x0AFB, 61457 }, { 0x0AFC, 61460 }, { 0x0AFD, 100440 }, { 0x0AFE, 100434 }, { 0x0AFF, 100431 }, { 0x0B00, 100537 }, { 0x0B01, 100552 }, { 0x0B02, 100543 }, { 0x0B03, 100579 }, { 0x0B04, 100549 }, { 0x0B05, 100612 }, { 0x0B06, 100735 }, { 0x0B07, 100731 }, { 0x0B08, 100540 }, { 0x0B09, 100570 }, { 0x0B0A, 100555 }, { 0x0B0B, 100546 }, { 0x0B0C, 100597 }, { 0x0B0D, 100558 }, { 0x0B0E, 100585 }, { 0x0B0F, 100643 }, { 0x0B10, 100573 }, { 0x0B11, 100637 }, { 0x0B12, 100649 }, { 0x0B13, 100564 }, { 0x0B14, 100624 }, { 0x0B15, 100582 }, { 0x0B16, 100640 }, { 0x0B17, 100655 }, { 0x0B18, 100673 }, { 0x0B19, 100685 }, { 0x0B1A, 100627 }, { 0x0B1B, 100676 }, { 0x0B1C, 100652 }, { 0x0B1D, 100609 }, { 0x0B1E, 100670 }, { 0x0B1F, 100567 }, { 0x0B20, 100630 }, { 0x0B21, 100594 }, { 0x0B22, 100682 }, { 0x0B23, 100600 }, { 0x0B24, 100658 }, { 0x0B25, 100561 }, { 0x0B26, 100621 }, { 0x0B27, 100591 }, { 0x0B28, 100618 }, { 0x0B29, 100603 }, { 0x0B2A, 100661 }, { 0x0B2B, 100588 }, { 0x0B2C, 100646 }, { 0x0B2D, 100679 }, { 0x0B2E, 100615 }, { 0x0B2F, 100664 }, { 0x0B30, 100667 }, { 0x0B31, 100606 }, { 0x0B32, 100576 }, { 0x0B33, 100688 }, { 0x0B34, 100437 }, { 0x0B35, 100489 }, { 0x0B36, 100477 }, { 0x0B37, 100505 }, { 0x0B38, 100485 }, { 0x0B39, 100513 }, { 0x0B3A, 100522 }, { 0x0B3B, 100532 }, { 0x0B3C, 100473 }, { 0x0B3D, 100501 }, { 0x0B3E, 100493 }, { 0x0B3F, 100481 }, { 0x0B40, 100509 }, { 0x0B41, 100497 }, { 0x0B42, 100428 }, { 0x0B43, 100633 }, { 0x0B44, 100425 }, { 0x0B45, 100699 }, { 0x0B46, 100707 }, { 0x0B47, 100723 }, { 0x0B48, 100418 }, { 0x0B49, 100790 }, { 0x0B4A, 100778 }, { 0x0B4B, 100798 }, { 0x0B4C, 100786 }, { 0x0B4D, 100766 }, { 0x0B4E, 100806 }, { 0x0B4F, 100762 }, { 0x0B50, 100727 }, { 0x0B51, 100743 }, { 0x0B52, 100739 }, { 0x0B53, 100517 }, { 0x0B54, 100527 }, { 0x0B55, 100461 }, { 0x0B56, 100443 }, { 0x0B57, 100449 }, { 0x0B58, 100470 }, { 0x0B59, 100455 }, { 0x0B5A, 100452 }, { 0x0B5B, 100446 }, { 0x0B5C, 100467 }, { 0x0B5D, 100464 }, { 0x0B5E, 100458 }, { 0x0B5F, 100755 }, { 0x0B60, 100747 }, { 0x0B61, 100751 }, { 0x0B62, 100774 }, { 0x0B63, 100758 }, { 0x0B64, 100794 }, { 0x0B65, 100782 }, { 0x0B66, 100770 }, { 0x0B67, 100802 }, { 0x0B68, 100422 }, { 0x0B69, 100715 }, { 0x0B6A, 100703 }, { 0x0B6B, 100719 }, { 0x0B6C, 100695 }, { 0x0B6D, 100711 }, { 0x0B6E, 100691 }, { 0x0B6F, 66124 }, { 0x0B70, 66121 }, { 0x0B71, 66216 }, { 0x0B72, 66231 }, { 0x0B73, 66234 }, { 0x0B74, 66318 }, { 0x0B75, 66222 }, { 0x0B76, 66264 }, { 0x0B77, 66228 }, { 0x0B78, 66309 }, { 0x0B79, 66324 }, { 0x0B7A, 66330 }, { 0x0B7B, 66321 }, { 0x0B7C, 66327 }, { 0x0B7D, 66219 }, { 0x0B7E, 66255 }, { 0x0B7F, 66237 }, { 0x0B80, 66225 }, { 0x0B81, 66274 }, { 0x0B82, 66240 }, { 0x0B83, 66365 }, { 0x0B84, 66405 }, { 0x0B85, 66357 }, { 0x0B86, 66397 }, { 0x0B87, 66267 }, { 0x0B88, 66284 }, { 0x0B89, 66349 }, { 0x0B8A, 66389 }, { 0x0B8B, 66361 }, { 0x0B8C, 66401 }, { 0x0B8D, 66305 }, { 0x0B8E, 66300 }, { 0x0B8F, 66288 }, { 0x0B90, 66381 }, { 0x0B91, 66421 }, { 0x0B92, 66377 }, { 0x0B93, 66417 }, { 0x0B94, 66337 }, { 0x0B95, 66292 }, { 0x0B96, 66373 }, { 0x0B97, 66413 }, { 0x0B98, 66353 }, { 0x0B99, 66393 }, { 0x0B9A, 66247 }, { 0x0B9B, 66280 }, { 0x0B9C, 66369 }, { 0x0B9D, 66409 }, { 0x0B9E, 66345 }, { 0x0B9F, 66385 }, { 0x0BA0, 66271 }, { 0x0BA1, 66212 }, { 0x0BA2, 66315 }, { 0x0BA3, 66277 }, { 0x0BA4, 66243 }, { 0x0BA5, 66312 }, { 0x0BA6, 66296 }, { 0x0BA7, 66341 }, { 0x0BA8, 66251 }, { 0x0BA9, 66261 }, { 0x0BAA, 66333 }, { 0x0BAB, 66258 }, { 0x0BAC, 66118 }, { 0x0BAD, 66200 }, { 0x0BAE, 66167 }, { 0x0BAF, 66142 }, { 0x0BB0, 66157 }, { 0x0BB1, 66132 }, { 0x0BB2, 66162 }, { 0x0BB3, 66137 }, { 0x0BB4, 66208 }, { 0x0BB5, 66177 }, { 0x0BB6, 66127 }, { 0x0BB7, 66172 }, { 0x0BB8, 66188 }, { 0x0BB9, 66181 }, { 0x0BBA, 66194 }, { 0x0BBB, 66204 }, { 0x0BBC, 66102 }, { 0x0BBD, 66078 }, { 0x0BBE, 66086 }, { 0x0BBF, 66114 }, { 0x0BC0, 66094 }, { 0x0BC1, 66090 }, { 0x0BC2, 66082 }, { 0x0BC3, 66110 }, { 0x0BC4, 66106 }, { 0x0BC5, 66098 }, { 0x0BC6, 66152 }, { 0x0BC7, 66147 }, { 0x0BC8, 66507 }, { 0x0BC9, 14991 }, { 0x0BCA, 15081 }, { 0x0BCB, 15089 }, { 0x0BCC, 15093 }, { 0x0BCD, 15085 }, { 0x0BCE, 15097 }, { 0x0BCF, 15121 }, { 0x0BD0, 15065 }, { 0x0BD1, 15077 }, { 0x0BD2, 15073 }, { 0x0BD3, 15029 }, { 0x0BD4, 15069 }, { 0x0BD5, 15061 }, { 0x0BD6, 14971 }, { 0x0BD7, 15049 }, { 0x0BD8, 15137 }, { 0x0BD9, 15157 }, { 0x0BDA, 15153 }, { 0x0BDB, 15014 }, { 0x0BDC, 14967 }, { 0x0BDD, 15045 }, { 0x0BDE, 15145 }, { 0x0BDF, 15149 }, { 0x0BE0, 15141 }, { 0x0BE1, 15010 }, { 0x0BE2, 14963 }, { 0x0BE3, 15018 }, { 0x0BE4, 15129 }, { 0x0BE5, 14975 }, { 0x0BE6, 15125 }, { 0x0BE7, 14979 }, { 0x0BE8, 15133 }, { 0x0BE9, 15006 }, { 0x0BEA, 15057 }, { 0x0BEB, 15022 }, { 0x0BEC, 15026 }, { 0x0BED, 14995 }, { 0x0BEE, 15003 }, { 0x0BEF, 15053 }, { 0x0BF0, 15041 }, { 0x0BF1, 15037 }, { 0x0BF2, 15033 }, { 0x0BF3, 14983 }, { 0x0BF4, 14999 }, { 0x0BF5, 14959 }, { 0x0BF6, 14987 }, { 0x0BF7, 15240 }, { 0x0BF8, 15161 }, { 0x0BF9, 15117 }, { 0x0BFA, 15181 }, { 0x0BFB, 15199 }, { 0x0BFC, 15169 }, { 0x0BFD, 15203 }, { 0x0BFE, 15207 }, { 0x0BFF, 15215 }, { 0x0C00, 15177 }, { 0x0C01, 15211 }, { 0x0C02, 15225 }, { 0x0C03, 14955 }, { 0x0C04, 15165 }, { 0x0C05, 15185 }, { 0x0C06, 15173 }, { 0x0C07, 15189 }, { 0x0C08, 15194 }, { 0x0C09, 15246 }, { 0x0C0A, 15228 }, { 0x0C0B, 15237 }, { 0x0C0C, 15101 }, { 0x0C0D, 15105 }, { 0x0C0E, 15109 }, { 0x0C0F, 15113 }, { 0x0C10, 15249 }, { 0x0C11, 15231 }, { 0x0C12, 15234 }, { 0x0C13, 15222 }, { 0x0C14, 14943 }, { 0x0C15, 14925 }, { 0x0C16, 14931 }, { 0x0C17, 14952 }, { 0x0C18, 14937 }, { 0x0C19, 14934 }, { 0x0C1A, 14928 }, { 0x0C1B, 14949 }, { 0x0C1C, 14946 }, { 0x0C1D, 14940 }, { 0x0C1E, 15243 }, { 0x0C1F, 15219 }, { 0x0C20, 6114 }, { 0x0C21, 6161 }, { 0x0C22, 6157 }, { 0x0C23, 6165 }, { 0x0C24, 6084 }, { 0x0C25, 6140 }, { 0x0C26, 6168 }, { 0x0C27, 6087 }, { 0x0C28, 6148 }, { 0x0C29, 6183 }, { 0x0C2A, 6179 }, { 0x0C2B, 6131 }, { 0x0C2C, 6081 }, { 0x0C2D, 6134 }, { 0x0C2E, 6175 }, { 0x0C2F, 6098 }, { 0x0C30, 6171 }, { 0x0C31, 6102 }, { 0x0C32, 6128 }, { 0x0C33, 6154 }, { 0x0C34, 6120 }, { 0x0C35, 6124 }, { 0x0C36, 6151 }, { 0x0C37, 6144 }, { 0x0C38, 6110 }, { 0x0C39, 6078 }, { 0x0C3A, 6106 }, { 0x0C3B, 6195 }, { 0x0C3C, 6012 }, { 0x0C3D, 6068 }, { 0x0C3E, 6036 }, { 0x0C3F, 6044 }, { 0x0C40, 6020 }, { 0x0C41, 6056 }, { 0x0C42, 6032 }, { 0x0C43, 6064 }, { 0x0C44, 6028 }, { 0x0C45, 6060 }, { 0x0C46, 6073 }, { 0x0C47, 6199 }, { 0x0C48, 6203 }, { 0x0C49, 6016 }, { 0x0C4A, 6052 }, { 0x0C4B, 6024 }, { 0x0C4C, 6048 }, { 0x0C4D, 6040 }, { 0x0C4E, 5963 }, { 0x0C4F, 5966 }, { 0x0C50, 5974 }, { 0x0C51, 5970 }, { 0x0C52, 5978 }, { 0x0C53, 6207 }, { 0x0C54, 6197 }, { 0x0C55, 6000 }, { 0x0C56, 5982 }, { 0x0C57, 5988 }, { 0x0C58, 6009 }, { 0x0C59, 5994 }, { 0x0C5A, 5991 }, { 0x0C5B, 5985 }, { 0x0C5C, 6006 }, { 0x0C5D, 6003 }, { 0x0C5E, 5997 }, { 0x0C5F, 5960 }, { 0x0C60, 5957 }, { 0x0C61, 6187 }, { 0x0C62, 6191 }, { 0x0C63, 67866 }, { 0x0C64, 67285 }, { 0x0C65, 67276 }, { 0x0C66, 67267 }, { 0x0C67, 67406 }, { 0x0C68, 67387 }, { 0x0C69, 67345 }, { 0x0C6A, 67247 }, { 0x0C6B, 67376 }, { 0x0C6C, 67340 }, { 0x0C6D, 67261 }, { 0x0C6E, 67437 }, { 0x0C6F, 67432 }, { 0x0C70, 67326 }, { 0x0C71, 67308 }, { 0x0C72, 67380 }, { 0x0C73, 67316 }, { 0x0C74, 67237 }, { 0x0C75, 67321 }, { 0x0C76, 67353 }, { 0x0C77, 67292 }, { 0x0C78, 67856 }, { 0x0C79, 67861 }, { 0x0C7A, 68065 }, { 0x0C7B, 68077 }, { 0x0C7C, 68072 }, { 0x0C7D, 67503 }, { 0x0C7E, 67519 }, { 0x0C7F, 67508 }, { 0x0C80, 67482 }, { 0x0C81, 67498 }, { 0x0C82, 67513 }, { 0x0C83, 67601 }, { 0x0C84, 67543 }, { 0x0C85, 67549 }, { 0x0C86, 67610 }, { 0x0C87, 67555 }, { 0x0C88, 67552 }, { 0x0C89, 67546 }, { 0x0C8A, 67607 }, { 0x0C8B, 67604 }, { 0x0C8C, 67598 }, { 0x0C8D, 67558 }, { 0x0C8E, 67566 }, { 0x0C8F, 67594 }, { 0x0C90, 67574 }, { 0x0C91, 67570 }, { 0x0C92, 67562 }, { 0x0C93, 67590 }, { 0x0C94, 67586 }, { 0x0C95, 67578 }, { 0x0C96, 67582 }, { 0x0C97, 67329 }, { 0x0C98, 67296 }, { 0x0C99, 67361 }, { 0x0C9A, 67302 }, { 0x0C9B, 67223 }, { 0x0C9C, 67243 }, { 0x0C9D, 67232 }, { 0x0C9E, 67227 }, { 0x0C9F, 67218 }, { 0x0CA0, 67213 }, { 0x0CA1, 67474 }, { 0x0CA2, 67460 }, { 0x0CA3, 67703 }, { 0x0CA4, 67754 }, { 0x0CA5, 67694 }, { 0x0CA6, 67751 }, { 0x0CA7, 67760 }, { 0x0CA8, 67688 }, { 0x0CA9, 67739 }, { 0x0CAA, 67700 }, { 0x0CAB, 67766 }, { 0x0CAC, 67787 }, { 0x0CAD, 67805 }, { 0x0CAE, 67742 }, { 0x0CAF, 67793 }, { 0x0CB0, 67763 }, { 0x0CB1, 67724 }, { 0x0CB2, 67781 }, { 0x0CB3, 67691 }, { 0x0CB4, 67745 }, { 0x0CB5, 67712 }, { 0x0CB6, 67715 }, { 0x0CB7, 67769 }, { 0x0CB8, 67685 }, { 0x0CB9, 67736 }, { 0x0CBA, 67709 }, { 0x0CBB, 67784 }, { 0x0CBC, 67802 }, { 0x0CBD, 67748 }, { 0x0CBE, 67796 }, { 0x0CBF, 67727 }, { 0x0CC0, 67790 }, { 0x0CC1, 67733 }, { 0x0CC2, 67682 }, { 0x0CC3, 67730 }, { 0x0CC4, 67718 }, { 0x0CC5, 67706 }, { 0x0CC6, 67775 }, { 0x0CC7, 67778 }, { 0x0CC8, 67721 }, { 0x0CC9, 67697 }, { 0x0CCA, 67679 }, { 0x0CCB, 67799 }, { 0x0CCC, 67808 }, { 0x0CCD, 67757 }, { 0x0CCE, 67772 }, { 0x0CCF, 67629 }, { 0x0CD0, 67617 }, { 0x0CD1, 67637 }, { 0x0CD2, 67625 }, { 0x0CD3, 67645 }, { 0x0CD4, 67654 }, { 0x0CD5, 67664 }, { 0x0CD6, 67649 }, { 0x0CD7, 67659 }, { 0x0CD8, 67613 }, { 0x0CD9, 67633 }, { 0x0CDA, 67621 }, { 0x0CDB, 67641 }, { 0x0CDC, 67524 }, { 0x0CDD, 67530 }, { 0x0CDE, 67669 }, { 0x0CDF, 67674 }, { 0x0CE0, 67464 }, { 0x0CE1, 67470 }, { 0x0CE2, 67403 }, { 0x0CE3, 67384 }, { 0x0CE4, 67456 }, { 0x0CE5, 67534 }, { 0x0CE6, 67451 }, { 0x0CE7, 67478 }, { 0x0CE8, 67441 }, { 0x0CE9, 67446 }, { 0x0CEA, 67538 }, { 0x0CEB, 67869 }, { 0x0CEC, 67875 }, { 0x0CED, 67880 }, { 0x0CEE, 67918 }, { 0x0CEF, 67986 }, { 0x0CF0, 67906 }, { 0x0CF1, 67982 }, { 0x0CF2, 67990 }, { 0x0CF3, 67898 }, { 0x0CF4, 67966 }, { 0x0CF5, 67914 }, { 0x0CF6, 67998 }, { 0x0CF7, 68022 }, { 0x0CF8, 68046 }, { 0x0CF9, 67970 }, { 0x0CFA, 68030 }, { 0x0CFB, 67994 }, { 0x0CFC, 67946 }, { 0x0CFD, 68014 }, { 0x0CFE, 67902 }, { 0x0CFF, 67974 }, { 0x0D00, 67930 }, { 0x0D01, 67934 }, { 0x0D02, 68002 }, { 0x0D03, 67894 }, { 0x0D04, 67962 }, { 0x0D05, 67926 }, { 0x0D06, 68018 }, { 0x0D07, 68042 }, { 0x0D08, 67978 }, { 0x0D09, 68034 }, { 0x0D0A, 67950 }, { 0x0D0B, 68026 }, { 0x0D0C, 67958 }, { 0x0D0D, 67890 }, { 0x0D0E, 67954 }, { 0x0D0F, 67938 }, { 0x0D10, 67922 }, { 0x0D11, 68006 }, { 0x0D12, 68010 }, { 0x0D13, 67942 }, { 0x0D14, 67910 }, { 0x0D15, 67886 }, { 0x0D16, 68038 }, { 0x0D17, 68055 }, { 0x0D18, 68060 }, { 0x0D19, 68050 }, { 0x0D1A, 67202 }, { 0x0D1B, 67206 }, { 0x0D1C, 68092 }, { 0x0D1D, 68097 }, { 0x0D1E, 68082 }, { 0x0D1F, 68087 }, { 0x0D20, 67844 }, { 0x0D21, 67834 }, { 0x0D22, 67852 }, { 0x0D23, 67838 }, { 0x0D24, 67848 }, { 0x0D25, 67812 }, { 0x0D26, 67828 }, { 0x0D27, 67822 }, { 0x0D28, 67816 }, { 0x0D29, 67492 }, { 0x0D2A, 67487 }, { 0x0D2B, 67333 }, { 0x0D2C, 67369 }, { 0x0D2D, 67312 }, { 0x0D2E, 67413 }, { 0x0D2F, 67394 }, { 0x0D30, 114860 }, { 0x0D31, 106192 }, { 0x0D32, 114863 }, { 0x0D33, 106195 }, { 0x0D34, 67422 }, { 0x0D35, 67427 }, { 0x0D36, 63907 }, { 0x0D37, 63958 }, { 0x0D38, 63895 }, { 0x0D39, 63952 }, { 0x0D3A, 63984 }, { 0x0D3B, 63889 }, { 0x0D3C, 63943 }, { 0x0D3D, 63904 }, { 0x0D3E, 63955 }, { 0x0D3F, 63990 }, { 0x0D40, 64081 }, { 0x0D41, 64075 }, { 0x0D42, 64175 }, { 0x0D43, 63946 }, { 0x0D44, 64078 }, { 0x0D45, 63987 }, { 0x0D46, 63928 }, { 0x0D47, 64072 }, { 0x0D48, 63892 }, { 0x0D49, 63949 }, { 0x0D4A, 63916 }, { 0x0D4B, 63919 }, { 0x0D4C, 63993 }, { 0x0D4D, 63886 }, { 0x0D4E, 63940 }, { 0x0D4F, 63913 }, { 0x0D50, 63937 }, { 0x0D51, 63922 }, { 0x0D52, 63910 }, { 0x0D53, 63934 }, { 0x0D54, 63925 }, { 0x0D55, 63898 }, { 0x0D56, 63961 }, { 0x0D57, 63868 }, { 0x0D58, 64089 }, { 0x0D59, 63874 }, { 0x0D5A, 63901 }, { 0x0D5B, 63880 }, { 0x0D5C, 63931 }, { 0x0D5D, 63871 }, { 0x0D5E, 63964 }, { 0x0D5F, 63877 }, { 0x0D60, 63883 }, { 0x0D61, 63804 }, { 0x0D62, 63744 }, { 0x0D63, 63736 }, { 0x0D64, 63752 }, { 0x0D65, 63740 }, { 0x0D66, 63756 }, { 0x0D67, 63727 }, { 0x0D68, 63748 }, { 0x0D69, 63765 }, { 0x0D6A, 63760 }, { 0x0D6B, 63731 }, { 0x0D6C, 63681 }, { 0x0D6D, 63567 }, { 0x0D6E, 63648 }, { 0x0D6F, 63642 }, { 0x0D70, 63586 }, { 0x0D71, 64406 }, { 0x0D72, 64396 }, { 0x0D73, 64401 }, { 0x0D74, 64391 }, { 0x0D75, 64182 }, { 0x0D76, 63715 }, { 0x0D77, 63697 }, { 0x0D78, 63703 }, { 0x0D79, 63724 }, { 0x0D7A, 63709 }, { 0x0D7B, 63706 }, { 0x0D7C, 63700 }, { 0x0D7D, 63721 }, { 0x0D7E, 63718 }, { 0x0D7F, 63712 }, { 0x0D80, 63638 }, { 0x0D81, 63645 }, { 0x0D82, 64336 }, { 0x0D83, 64339 }, { 0x0D84, 64342 }, { 0x0D85, 64333 }, { 0x0D86, 63996 }, { 0x0D87, 63999 }, { 0x0D88, 64289 }, { 0x0D89, 64297 }, { 0x0D8A, 64285 }, { 0x0D8B, 64293 }, { 0x0D8C, 63839 }, { 0x0D8D, 63849 }, { 0x0D8E, 63834 }, { 0x0D8F, 63844 }, { 0x0D90, 63980 }, { 0x0D91, 63976 }, { 0x0D92, 63968 }, { 0x0D93, 63972 }, { 0x0D94, 64379 }, { 0x0D95, 64373 }, { 0x0D96, 64367 }, { 0x0D97, 64084 }, { 0x0D98, 63776 }, { 0x0D99, 63691 }, { 0x0D9A, 63684 }, { 0x0D9B, 64307 }, { 0x0D9C, 64301 }, { 0x0D9D, 63854 }, { 0x0D9E, 63861 }, { 0x0D9F, 63651 }, { 0x0DA0, 63657 }, { 0x0DA1, 63663 }, { 0x0DA2, 63669 }, { 0x0DA3, 63675 }, { 0x0DA4, 64267 }, { 0x0DA5, 64273 }, { 0x0DA6, 64279 }, { 0x0DA7, 63770 }, { 0x0DA8, 63829 }, { 0x0DA9, 63819 }, { 0x0DAA, 63824 }, { 0x0DAB, 64117 }, { 0x0DAC, 64145 }, { 0x0DAD, 64109 }, { 0x0DAE, 64097 }, { 0x0DAF, 64125 }, { 0x0DB0, 64153 }, { 0x0DB1, 64101 }, { 0x0DB2, 64121 }, { 0x0DB3, 64157 }, { 0x0DB4, 64105 }, { 0x0DB5, 64093 }, { 0x0DB6, 64161 }, { 0x0DB7, 64113 }, { 0x0DB8, 64385 }, { 0x0DB9, 63793 }, { 0x0DBA, 63782 }, { 0x0DBB, 63787 }, { 0x0DBC, 63798 }, { 0x0DBD, 63593 }, { 0x0DBE, 63597 }, { 0x0DBF, 63601 }, { 0x0DC0, 63605 }, { 0x0DC1, 63609 }, { 0x0DC2, 63614 }, { 0x0DC3, 63619 }, { 0x0DC4, 64186 }, { 0x0DC5, 63625 }, { 0x0DC6, 63551 }, { 0x0DC7, 63527 }, { 0x0DC8, 63535 }, { 0x0DC9, 63563 }, { 0x0DCA, 63543 }, { 0x0DCB, 63539 }, { 0x0DCC, 63531 }, { 0x0DCD, 63559 }, { 0x0DCE, 63555 }, { 0x0DCF, 63547 }, { 0x0DD0, 63630 }, { 0x0DD1, 63634 }, { 0x0DD2, 63809 }, { 0x0DD3, 63814 }, { 0x0DD4, 64313 }, { 0x0DD5, 64317 }, { 0x0DD6, 80925 }, { 0x0DD7, 80961 }, { 0x0DD8, 80977 }, { 0x0DD9, 80973 }, { 0x0DDA, 80929 }, { 0x0DDB, 81041 }, { 0x0DDC, 81049 }, { 0x0DDD, 81033 }, { 0x0DDE, 80937 }, { 0x0DDF, 81001 }, { 0x0DE0, 81005 }, { 0x0DE1, 81009 }, { 0x0DE2, 81013 }, { 0x0DE3, 80941 }, { 0x0DE4, 81017 }, { 0x0DE5, 81081 }, { 0x0DE6, 81025 }, { 0x0DE7, 81029 }, { 0x0DE8, 81037 }, { 0x0DE9, 80945 }, { 0x0DEA, 81073 }, { 0x0DEB, 81069 }, { 0x0DEC, 81061 }, { 0x0DED, 81021 }, { 0x0DEE, 81077 }, { 0x0DEF, 81057 }, { 0x0DF0, 80965 }, { 0x0DF1, 80997 }, { 0x0DF2, 80969 }, { 0x0DF3, 81053 }, { 0x0DF4, 81045 }, { 0x0DF5, 81065 }, { 0x0DF6, 80981 }, { 0x0DF7, 80933 }, { 0x0DF8, 80989 }, { 0x0DF9, 80949 }, { 0x0DFA, 80985 }, { 0x0DFB, 80993 }, { 0x0DFC, 80953 }, { 0x0DFD, 80957 }, { 0x0DFE, 80784 }, { 0x0DFF, 80817 }, { 0x0E00, 80829 }, { 0x0E01, 80826 }, { 0x0E02, 80787 }, { 0x0E03, 80877 }, { 0x0E04, 80883 }, { 0x0E05, 80871 }, { 0x0E06, 80796 }, { 0x0E07, 80847 }, { 0x0E08, 80850 }, { 0x0E09, 80853 }, { 0x0E0A, 80856 }, { 0x0E0B, 80799 }, { 0x0E0C, 80859 }, { 0x0E0D, 80911 }, { 0x0E0E, 80865 }, { 0x0E0F, 80868 }, { 0x0E10, 80874 }, { 0x0E11, 80802 }, { 0x0E12, 80905 }, { 0x0E13, 80902 }, { 0x0E14, 80892 }, { 0x0E15, 80862 }, { 0x0E16, 80908 }, { 0x0E17, 80889 }, { 0x0E18, 80820 }, { 0x0E19, 80844 }, { 0x0E1A, 80823 }, { 0x0E1B, 80886 }, { 0x0E1C, 80880 }, { 0x0E1D, 80899 }, { 0x0E1E, 80832 }, { 0x0E1F, 80793 }, { 0x0E20, 80838 }, { 0x0E21, 80805 }, { 0x0E22, 80835 }, { 0x0E23, 80841 }, { 0x0E24, 80790 }, { 0x0E25, 80808 }, { 0x0E26, 80914 }, { 0x0E27, 80921 }, { 0x0E28, 80814 }, { 0x0E29, 81085 }, { 0x0E2A, 84881 }, { 0x0E2B, 80811 }, { 0x0E2C, 80895 }, { 0x0E2D, 80917 }, { 0x0E2E, 46753 }, { 0x0E2F, 46897 }, { 0x0E30, 46741 }, { 0x0E31, 46756 }, { 0x0E32, 46900 }, { 0x0E33, 46747 }, { 0x0E34, 46738 }, { 0x0E35, 46744 }, { 0x0E36, 46831 }, { 0x0E37, 46726 }, { 0x0E38, 46777 }, { 0x0E39, 46735 }, { 0x0E3A, 46729 }, { 0x0E3B, 46819 }, { 0x0E3C, 46759 }, { 0x0E3D, 46762 }, { 0x0E3E, 46771 }, { 0x0E3F, 46768 }, { 0x0E40, 46732 }, { 0x0E41, 46924 }, { 0x0E42, 46828 }, { 0x0E43, 46927 }, { 0x0E44, 46864 }, { 0x0E45, 47020 }, { 0x0E46, 46885 }, { 0x0E47, 46834 }, { 0x0E48, 46879 }, { 0x0E49, 46993 }, { 0x0E4A, 46855 }, { 0x0E4B, 46987 }, { 0x0E4C, 46930 }, { 0x0E4D, 46873 }, { 0x0E4E, 46933 }, { 0x0E4F, 46792 }, { 0x0E50, 47065 }, { 0x0E51, 47068 }, { 0x0E52, 47050 }, { 0x0E53, 47038 }, { 0x0E54, 47047 }, { 0x0E55, 46867 }, { 0x0E56, 47005 }, { 0x0E57, 47014 }, { 0x0E58, 47011 }, { 0x0E59, 46990 }, { 0x0E5A, 47086 }, { 0x0E5B, 46891 }, { 0x0E5C, 46810 }, { 0x0E5D, 46894 }, { 0x0E5E, 46816 }, { 0x0E5F, 46807 }, { 0x0E60, 46813 }, { 0x0E61, 47077 }, { 0x0E62, 47023 }, { 0x0E63, 46804 }, { 0x0E64, 46798 }, { 0x0E65, 46942 }, { 0x0E66, 46945 }, { 0x0E67, 46951 }, { 0x0E68, 46948 }, { 0x0E69, 46801 }, { 0x0E6A, 46909 }, { 0x0E6B, 47062 }, { 0x0E6C, 47026 }, { 0x0E6D, 47095 }, { 0x0E6E, 46765 }, { 0x0E6F, 46912 }, { 0x0E70, 46915 }, { 0x0E71, 46846 }, { 0x0E72, 46849 }, { 0x0E73, 46783 }, { 0x0E74, 46978 }, { 0x0E75, 46825 }, { 0x0E76, 46840 }, { 0x0E77, 46975 }, { 0x0E78, 46984 }, { 0x0E79, 46981 }, { 0x0E7A, 46774 }, { 0x0E7B, 46837 }, { 0x0E7C, 46972 }, { 0x0E7D, 47083 }, { 0x0E7E, 47044 }, { 0x0E7F, 47098 }, { 0x0E80, 47029 }, { 0x0E81, 46969 }, { 0x0E82, 47032 }, { 0x0E83, 47080 }, { 0x0E84, 47002 }, { 0x0E85, 47035 }, { 0x0E86, 46822 }, { 0x0E87, 46906 }, { 0x0E88, 46996 }, { 0x0E89, 46789 }, { 0x0E8A, 46858 }, { 0x0E8B, 46861 }, { 0x0E8C, 46966 }, { 0x0E8D, 46750 }, { 0x0E8E, 47755 }, { 0x0E8F, 47512 }, { 0x0E90, 47527 }, { 0x0E91, 47548 }, { 0x0E92, 47602 }, { 0x0E93, 47530 }, { 0x0E94, 47515 }, { 0x0E95, 47605 }, { 0x0E96, 47551 }, { 0x0E97, 47521 }, { 0x0E98, 47539 }, { 0x0E99, 47596 }, { 0x0E9A, 47536 }, { 0x0E9B, 47557 }, { 0x0E9C, 47524 }, { 0x0E9D, 47599 }, { 0x0E9E, 47542 }, { 0x0E9F, 47545 }, { 0x0EA0, 47560 }, { 0x0EA1, 47533 }, { 0x0EA2, 47554 }, { 0x0EA3, 47518 }, { 0x0EA4, 47563 }, { 0x0EA5, 47566 }, { 0x0EA6, 47659 }, { 0x0EA7, 47728 }, { 0x0EA8, 47611 }, { 0x0EA9, 47614 }, { 0x0EAA, 47695 }, { 0x0EAB, 47731 }, { 0x0EAC, 47734 }, { 0x0EAD, 47644 }, { 0x0EAE, 47581 }, { 0x0EAF, 47650 }, { 0x0EB0, 47584 }, { 0x0EB1, 47587 }, { 0x0EB2, 47743 }, { 0x0EB3, 47764 }, { 0x0EB4, 47767 }, { 0x0EB5, 47674 }, { 0x0EB6, 47671 }, { 0x0EB7, 47590 }, { 0x0EB8, 47653 }, { 0x0EB9, 47788 }, { 0x0EBA, 47656 }, { 0x0EBB, 47593 }, { 0x0EBC, 47677 }, { 0x0EBD, 47749 }, { 0x0EBE, 47680 }, { 0x0EBF, 47770 }, { 0x0EC0, 47752 }, { 0x0EC1, 47689 }, { 0x0EC2, 47683 }, { 0x0EC3, 47626 }, { 0x0EC4, 47701 }, { 0x0EC5, 47665 }, { 0x0EC6, 47569 }, { 0x0EC7, 47632 }, { 0x0EC8, 47575 }, { 0x0EC9, 47578 }, { 0x0ECA, 47629 }, { 0x0ECB, 47785 }, { 0x0ECC, 47692 }, { 0x0ECD, 47791 }, { 0x0ECE, 47782 }, { 0x0ECF, 47779 }, { 0x0ED0, 47794 }, { 0x0ED1, 47608 }, { 0x0ED2, 47662 }, { 0x0ED3, 47761 }, { 0x0ED4, 47647 }, { 0x0ED5, 47716 }, { 0x0ED6, 47125 }, { 0x0ED7, 47269 }, { 0x0ED8, 47212 }, { 0x0ED9, 47116 }, { 0x0EDA, 47230 }, { 0x0EDB, 47233 }, { 0x0EDC, 47128 }, { 0x0EDD, 47122 }, { 0x0EDE, 47311 }, { 0x0EDF, 47254 }, { 0x0EE0, 47260 }, { 0x0EE1, 47161 }, { 0x0EE2, 47383 }, { 0x0EE3, 47380 }, { 0x0EE4, 47251 }, { 0x0EE5, 47113 }, { 0x0EE6, 47119 }, { 0x0EE7, 47158 }, { 0x0EE8, 47101 }, { 0x0EE9, 47149 }, { 0x0EEA, 47110 }, { 0x0EEB, 47104 }, { 0x0EEC, 47131 }, { 0x0EED, 47134 }, { 0x0EEE, 47143 }, { 0x0EEF, 47140 }, { 0x0EF0, 47107 }, { 0x0EF1, 47293 }, { 0x0EF2, 47473 }, { 0x0EF3, 47299 }, { 0x0EF4, 47302 }, { 0x0EF5, 47155 }, { 0x0EF6, 47356 }, { 0x0EF7, 47359 }, { 0x0EF8, 47386 }, { 0x0EF9, 47332 }, { 0x0EFA, 47455 }, { 0x0EFB, 47257 }, { 0x0EFC, 47314 }, { 0x0EFD, 47485 }, { 0x0EFE, 47194 }, { 0x0EFF, 47479 }, { 0x0F00, 47434 }, { 0x0F01, 47437 }, { 0x0F02, 47461 }, { 0x0F03, 47500 }, { 0x0F04, 47422 }, { 0x0F05, 47377 }, { 0x0F06, 47374 }, { 0x0F07, 47467 }, { 0x0F08, 47296 }, { 0x0F09, 47227 }, { 0x0F0A, 47224 }, { 0x0F0B, 47152 }, { 0x0F0C, 47416 }, { 0x0F0D, 47350 }, { 0x0F0E, 47347 }, { 0x0F0F, 47218 }, { 0x0F10, 47338 }, { 0x0F11, 47248 }, { 0x0F12, 47371 }, { 0x0F13, 47242 }, { 0x0F14, 47341 }, { 0x0F15, 47263 }, { 0x0F16, 47266 }, { 0x0F17, 47176 }, { 0x0F18, 47173 }, { 0x0F19, 47137 }, { 0x0F1A, 47281 }, { 0x0F1B, 47449 }, { 0x0F1C, 47182 }, { 0x0F1D, 47335 }, { 0x0F1E, 47146 }, { 0x0F1F, 47389 }, { 0x0F20, 47446 }, { 0x0F21, 47365 }, { 0x0F22, 47413 }, { 0x0F23, 47203 }, { 0x0F24, 47209 }, { 0x0F25, 47200 }, { 0x0F26, 47206 }, { 0x0F27, 47278 }, { 0x0F28, 47287 }, { 0x0F29, 47290 }, { 0x0F2A, 47392 }, { 0x0F2B, 47395 }, { 0x0F2C, 47284 }, { 0x0F2D, 47188 }, { 0x0F2E, 79233 }, { 0x0F2F, 79245 }, { 0x0F30, 79239 }, { 0x0F31, 79653 }, { 0x0F32, 79656 }, { 0x0F33, 79236 }, { 0x0F34, 79242 }, { 0x0F35, 79674 }, { 0x0F36, 79278 }, { 0x0F37, 79290 }, { 0x0F38, 79284 }, { 0x0F39, 79737 }, { 0x0F3A, 79740 }, { 0x0F3B, 79281 }, { 0x0F3C, 79287 }, { 0x0F3D, 79746 }, { 0x0F3E, 79659 }, { 0x0F3F, 79671 }, { 0x0F40, 79665 }, { 0x0F41, 80211 }, { 0x0F42, 80214 }, { 0x0F43, 79662 }, { 0x0F44, 79668 }, { 0x0F45, 80217 }, { 0x0F46, 79293 }, { 0x0F47, 79305 }, { 0x0F48, 79299 }, { 0x0F49, 79749 }, { 0x0F4A, 79752 }, { 0x0F4B, 79296 }, { 0x0F4C, 79302 }, { 0x0F4D, 79758 }, { 0x0F4E, 79935 }, { 0x0F4F, 79947 }, { 0x0F50, 79941 }, { 0x0F51, 80322 }, { 0x0F52, 80325 }, { 0x0F53, 79938 }, { 0x0F54, 79944 }, { 0x0F55, 80328 }, { 0x0F56, 79353 }, { 0x0F57, 79365 }, { 0x0F58, 79359 }, { 0x0F59, 79878 }, { 0x0F5A, 79881 }, { 0x0F5B, 79356 }, { 0x0F5C, 79362 }, { 0x0F5D, 79887 }, { 0x0F5E, 79368 }, { 0x0F5F, 79380 }, { 0x0F60, 79374 }, { 0x0F61, 79893 }, { 0x0F62, 79896 }, { 0x0F63, 79371 }, { 0x0F64, 79377 }, { 0x0F65, 79932 }, { 0x0F66, 79899 }, { 0x0F67, 79911 }, { 0x0F68, 79905 }, { 0x0F69, 80304 }, { 0x0F6A, 80307 }, { 0x0F6B, 79902 }, { 0x0F6C, 79908 }, { 0x0F6D, 80313 }, { 0x0F6E, 79338 }, { 0x0F6F, 79350 }, { 0x0F70, 79344 }, { 0x0F71, 79830 }, { 0x0F72, 79833 }, { 0x0F73, 79341 }, { 0x0F74, 79347 }, { 0x0F75, 79851 }, { 0x0F76, 79854 }, { 0x0F77, 79860 }, { 0x0F78, 80292 }, { 0x0F79, 80295 }, { 0x0F7A, 79857 }, { 0x0F7B, 79836 }, { 0x0F7C, 79848 }, { 0x0F7D, 79842 }, { 0x0F7E, 80277 }, { 0x0F7F, 80280 }, { 0x0F80, 79839 }, { 0x0F81, 79845 }, { 0x0F82, 80283 }, { 0x0F83, 80289 }, { 0x0F84, 80439 }, { 0x0F85, 80442 }, { 0x0F86, 80286 }, { 0x0F87, 79158 }, { 0x0F88, 79170 }, { 0x0F89, 79164 }, { 0x0F8A, 79473 }, { 0x0F8B, 79491 }, { 0x0F8C, 79161 }, { 0x0F8D, 79167 }, { 0x0F8E, 79497 }, { 0x0F8F, 79398 }, { 0x0F90, 79410 }, { 0x0F91, 79404 }, { 0x0F92, 80007 }, { 0x0F93, 80010 }, { 0x0F94, 79401 }, { 0x0F95, 79407 }, { 0x0F96, 80013 }, { 0x0F97, 79383 }, { 0x0F98, 79395 }, { 0x0F99, 79389 }, { 0x0F9A, 79950 }, { 0x0F9B, 79953 }, { 0x0F9C, 79386 }, { 0x0F9D, 79392 }, { 0x0F9E, 79989 }, { 0x0F9F, 79173 }, { 0x0FA0, 79185 }, { 0x0FA1, 79179 }, { 0x0FA2, 79506 }, { 0x0FA3, 79524 }, { 0x0FA4, 79176 }, { 0x0FA5, 79182 }, { 0x0FA6, 79545 }, { 0x0FA7, 79428 }, { 0x0FA8, 79440 }, { 0x0FA9, 79434 }, { 0x0FAA, 80025 }, { 0x0FAB, 80028 }, { 0x0FAC, 79431 }, { 0x0FAD, 79437 }, { 0x0FAE, 80031 }, { 0x0FAF, 80034 }, { 0x0FB0, 80040 }, { 0x0FB1, 80373 }, { 0x0FB2, 80376 }, { 0x0FB3, 80037 }, { 0x0FB4, 79308 }, { 0x0FB5, 79320 }, { 0x0FB6, 79314 }, { 0x0FB7, 79770 }, { 0x0FB8, 79773 }, { 0x0FB9, 79311 }, { 0x0FBA, 79317 }, { 0x0FBB, 79779 }, { 0x0FBC, 79782 }, { 0x0FBD, 79794 }, { 0x0FBE, 79788 }, { 0x0FBF, 80250 }, { 0x0FC0, 80253 }, { 0x0FC1, 79785 }, { 0x0FC2, 79791 }, { 0x0FC3, 80259 }, { 0x0FC4, 80457 }, { 0x0FC5, 80473 }, { 0x0FC6, 80465 }, { 0x0FC7, 80477 }, { 0x0FC8, 80481 }, { 0x0FC9, 80461 }, { 0x0FCA, 80469 }, { 0x0FCB, 80489 }, { 0x0FCC, 79263 }, { 0x0FCD, 79275 }, { 0x0FCE, 79269 }, { 0x0FCF, 79689 }, { 0x0FD0, 79692 }, { 0x0FD1, 79266 }, { 0x0FD2, 79272 }, { 0x0FD3, 79695 }, { 0x0FD4, 79698 }, { 0x0FD5, 79704 }, { 0x0FD6, 80220 }, { 0x0FD7, 80223 }, { 0x0FD8, 79701 }, { 0x0FD9, 79707 }, { 0x0FDA, 79719 }, { 0x0FDB, 79713 }, { 0x0FDC, 80226 }, { 0x0FDD, 80229 }, { 0x0FDE, 79710 }, { 0x0FDF, 79716 }, { 0x0FE0, 80232 }, { 0x0FE1, 80238 }, { 0x0FE2, 80433 }, { 0x0FE3, 80436 }, { 0x0FE4, 80235 }, { 0x0FE5, 79413 }, { 0x0FE6, 79425 }, { 0x0FE7, 79419 }, { 0x0FE8, 80016 }, { 0x0FE9, 80019 }, { 0x0FEA, 79416 }, { 0x0FEB, 79422 }, { 0x0FEC, 80022 }, { 0x0FED, 80509 }, { 0x0FEE, 80525 }, { 0x0FEF, 80517 }, { 0x0FF0, 80529 }, { 0x0FF1, 80533 }, { 0x0FF2, 80513 }, { 0x0FF3, 80521 }, { 0x0FF4, 79458 }, { 0x0FF5, 79470 }, { 0x0FF6, 79464 }, { 0x0FF7, 80067 }, { 0x0FF8, 80070 }, { 0x0FF9, 79461 }, { 0x0FFA, 79467 }, { 0x0FFB, 80091 }, { 0x0FFC, 80073 }, { 0x0FFD, 80085 }, { 0x0FFE, 80079 }, { 0x0FFF, 80385 }, { 0x1000, 80388 }, { 0x1001, 80076 }, { 0x1002, 80082 }, { 0x1003, 80391 }, { 0x1004, 79443 }, { 0x1005, 79455 }, { 0x1006, 79449 }, { 0x1007, 80058 }, { 0x1008, 80061 }, { 0x1009, 79446 }, { 0x100A, 79452 }, { 0x100B, 80064 }, { 0x100C, 79188 }, { 0x100D, 79200 }, { 0x100E, 79194 }, { 0x100F, 79548 }, { 0x1010, 79566 }, { 0x1011, 79191 }, { 0x1012, 79197 }, { 0x1013, 79572 }, { 0x1014, 79551 }, { 0x1015, 79563 }, { 0x1016, 79557 }, { 0x1017, 80151 }, { 0x1018, 80154 }, { 0x1019, 79554 }, { 0x101A, 79560 }, { 0x101B, 80172 }, { 0x101C, 79248 }, { 0x101D, 79260 }, { 0x101E, 79254 }, { 0x101F, 79677 }, { 0x1020, 79680 }, { 0x1021, 79251 }, { 0x1022, 79257 }, { 0x1023, 79686 }, { 0x1024, 79218 }, { 0x1025, 79230 }, { 0x1026, 79224 }, { 0x1027, 79605 }, { 0x1028, 79608 }, { 0x1029, 79221 }, { 0x102A, 79227 }, { 0x102B, 79626 }, { 0x102C, 79629 }, { 0x102D, 79635 }, { 0x102E, 80199 }, { 0x102F, 80202 }, { 0x1030, 79632 }, { 0x1031, 79611 }, { 0x1032, 79623 }, { 0x1033, 79617 }, { 0x1034, 80184 }, { 0x1035, 80187 }, { 0x1036, 79614 }, { 0x1037, 79620 }, { 0x1038, 80427 }, { 0x1039, 79956 }, { 0x103A, 79968 }, { 0x103B, 79962 }, { 0x103C, 80331 }, { 0x103D, 80334 }, { 0x103E, 79959 }, { 0x103F, 79965 }, { 0x1040, 80340 }, { 0x1041, 79527 }, { 0x1042, 79539 }, { 0x1043, 79533 }, { 0x1044, 80139 }, { 0x1045, 80142 }, { 0x1046, 79530 }, { 0x1047, 79536 }, { 0x1048, 80148 }, { 0x1049, 79803 }, { 0x104A, 79815 }, { 0x104B, 79809 }, { 0x104C, 80262 }, { 0x104D, 80265 }, { 0x104E, 79806 }, { 0x104F, 79812 }, { 0x1050, 80271 }, { 0x1051, 79974 }, { 0x1052, 79986 }, { 0x1053, 79980 }, { 0x1054, 80343 }, { 0x1055, 80346 }, { 0x1056, 79977 }, { 0x1057, 79983 }, { 0x1058, 80349 }, { 0x1059, 79992 }, { 0x105A, 80004 }, { 0x105B, 79998 }, { 0x105C, 80364 }, { 0x105D, 80367 }, { 0x105E, 79995 }, { 0x105F, 80001 }, { 0x1060, 80370 }, { 0x1061, 79203 }, { 0x1062, 79215 }, { 0x1063, 79209 }, { 0x1064, 79587 }, { 0x1065, 79590 }, { 0x1066, 79206 }, { 0x1067, 79212 }, { 0x1068, 79593 }, { 0x1069, 79323 }, { 0x106A, 79335 }, { 0x106B, 79329 }, { 0x106C, 79797 }, { 0x106D, 79800 }, { 0x106E, 79326 }, { 0x106F, 79332 }, { 0x1070, 79821 }, { 0x1071, 79890 }, { 0x1072, 79767 }, { 0x1073, 79602 }, { 0x1074, 80542 }, { 0x1075, 80537 }, { 0x1076, 80549 }, { 0x1077, 79152 }, { 0x1078, 80558 }, { 0x1079, 79040 }, { 0x107A, 79045 }, { 0x107B, 80556 }, { 0x107C, 79043 }, { 0x107D, 79149 }, { 0x107E, 79155 }, { 0x107F, 80553 }, { 0x1080, 79047 }, { 0x1081, 79053 }, { 0x1082, 79071 }, { 0x1083, 79059 }, { 0x1084, 79056 }, { 0x1085, 79050 }, { 0x1086, 79068 }, { 0x1087, 79065 }, { 0x1088, 79062 }, { 0x1089, 79115 }, { 0x108A, 79140 }, { 0x108B, 79137 }, { 0x108C, 79125 }, { 0x108D, 79122 }, { 0x108E, 79128 }, { 0x108F, 79146 }, { 0x1090, 79131 }, { 0x1091, 79134 }, { 0x1092, 79143 }, { 0x1093, 79118 }, { 0x1094, 80501 }, { 0x1095, 79764 }, { 0x1096, 80247 }, { 0x1097, 79761 }, { 0x1098, 80493 }, { 0x1099, 79503 }, { 0x109A, 80115 }, { 0x109B, 79500 }, { 0x109C, 80497 }, { 0x109D, 79599 }, { 0x109E, 80181 }, { 0x109F, 79596 }, { 0x10A0, 80505 }, { 0x10A1, 79827 }, { 0x10A2, 80274 }, { 0x10A3, 79824 }, { 0x10A4, 79099 }, { 0x10A5, 79078 }, { 0x10A6, 79107 }, { 0x10A7, 79094 }, { 0x10A8, 79082 }, { 0x10A9, 79090 }, { 0x10AA, 79103 }, { 0x10AB, 79086 }, { 0x10AC, 79111 }, { 0x10AD, 79074 }, { 0x10AE, 72870 }, { 0x10AF, 72873 }, { 0x10B0, 72876 }, { 0x10B1, 72879 }, { 0x10B2, 72885 }, { 0x10B3, 72888 }, { 0x10B4, 72909 }, { 0x10B5, 72945 }, { 0x10B6, 72912 }, { 0x10B7, 72915 }, { 0x10B8, 72918 }, { 0x10B9, 72921 }, { 0x10BA, 72924 }, { 0x10BB, 72927 }, { 0x10BC, 72930 }, { 0x10BD, 72933 }, { 0x10BE, 72936 }, { 0x10BF, 72939 }, { 0x10C0, 72942 }, { 0x10C1, 72948 }, { 0x10C2, 72951 }, { 0x10C3, 72954 }, { 0x10C4, 72957 }, { 0x10C5, 72960 }, { 0x10C6, 72963 }, { 0x10C7, 72966 }, { 0x10C8, 72969 }, { 0x10C9, 72972 }, { 0x10CA, 72975 }, { 0x10CB, 72978 }, { 0x10CC, 72984 }, { 0x10CD, 73068 }, { 0x10CE, 73071 }, { 0x10CF, 72987 }, { 0x10D0, 72990 }, { 0x10D1, 72993 }, { 0x10D2, 72996 }, { 0x10D3, 72999 }, { 0x10D4, 73074 }, { 0x10D5, 73077 }, { 0x10D6, 73080 }, { 0x10D7, 73083 }, { 0x10D8, 73086 }, { 0x10D9, 73089 }, { 0x10DA, 73002 }, { 0x10DB, 72882 }, { 0x10DC, 73005 }, { 0x10DD, 73008 }, { 0x10DE, 73011 }, { 0x10DF, 73014 }, { 0x10E0, 73017 }, { 0x10E1, 72891 }, { 0x10E2, 73020 }, { 0x10E3, 72894 }, { 0x10E4, 73023 }, { 0x10E5, 72897 }, { 0x10E6, 73026 }, { 0x10E7, 72900 }, { 0x10E8, 72903 }, { 0x10E9, 72906 }, { 0x10EA, 73065 }, { 0x10EB, 73092 }, { 0x10EC, 73095 }, { 0x10ED, 73098 }, { 0x10EE, 73101 }, { 0x10EF, 73104 }, { 0x10F0, 73107 }, { 0x10F1, 73110 }, { 0x10F2, 73113 }, { 0x10F3, 73116 }, { 0x10F4, 73119 }, { 0x10F5, 73122 }, { 0x10F6, 73125 }, { 0x10F7, 73029 }, { 0x10F8, 73032 }, { 0x10F9, 73035 }, { 0x10FA, 73038 }, { 0x10FB, 73041 }, { 0x10FC, 73044 }, { 0x10FD, 73047 }, { 0x10FE, 73050 }, { 0x10FF, 73053 }, { 0x1100, 73056 }, { 0x1101, 73059 }, { 0x1102, 73062 }, { 0x1103, 72981 }, { 0x1104, 72766 }, { 0x1105, 72770 }, { 0x1106, 72774 }, { 0x1107, 72778 }, { 0x1108, 72782 }, { 0x1109, 72674 }, { 0x110A, 70939 }, { 0x110B, 69964 }, { 0x110C, 70216 }, { 0x110D, 69970 }, { 0x110E, 70048 }, { 0x110F, 69985 }, { 0x1110, 70120 }, { 0x1111, 71042 }, { 0x1112, 71110 }, { 0x1113, 71094 }, { 0x1114, 69958 }, { 0x1115, 70006 }, { 0x1116, 70195 }, { 0x1117, 72129 }, { 0x1118, 70198 }, { 0x1119, 72133 }, { 0x111A, 70544 }, { 0x111B, 72273 }, { 0x111C, 70201 }, { 0x111D, 72137 }, { 0x111E, 70547 }, { 0x111F, 72277 }, { 0x1120, 71837 }, { 0x1121, 70192 }, { 0x1122, 72125 }, { 0x1123, 70538 }, { 0x1124, 72269 }, { 0x1125, 71833 }, { 0x1126, 70009 }, { 0x1127, 71038 }, { 0x1128, 71821 }, { 0x1129, 70834 }, { 0x112A, 70838 }, { 0x112B, 70859 }, { 0x112C, 70815 }, { 0x112D, 70842 }, { 0x112E, 70830 }, { 0x112F, 70865 }, { 0x1130, 70870 }, { 0x1131, 70877 }, { 0x1132, 70848 }, { 0x1133, 70826 }, { 0x1134, 70821 }, { 0x1135, 70030 }, { 0x1136, 70051 }, { 0x1137, 70117 }, { 0x1138, 70012 }, { 0x1139, 70129 }, { 0x113A, 70680 }, { 0x113B, 70132 }, { 0x113C, 70382 }, { 0x113D, 70135 }, { 0x113E, 70385 }, { 0x113F, 71066 }, { 0x1140, 71450 }, { 0x1141, 71134 }, { 0x1142, 70126 }, { 0x1143, 70376 }, { 0x1144, 70394 }, { 0x1145, 72225 }, { 0x1146, 70397 }, { 0x1147, 72229 }, { 0x1148, 70686 }, { 0x1149, 72357 }, { 0x114A, 70400 }, { 0x114B, 72233 }, { 0x114C, 70689 }, { 0x114D, 72361 }, { 0x114E, 70391 }, { 0x114F, 72221 }, { 0x1150, 70683 }, { 0x1151, 72353 }, { 0x1152, 71082 }, { 0x1153, 69988 }, { 0x1154, 72085 }, { 0x1155, 71090 }, { 0x1156, 70180 }, { 0x1157, 70752 }, { 0x1158, 70186 }, { 0x1159, 70493 }, { 0x115A, 70189 }, { 0x115B, 70496 }, { 0x115C, 71074 }, { 0x115D, 71370 }, { 0x115E, 71106 }, { 0x115F, 70177 }, { 0x1160, 70475 }, { 0x1161, 70517 }, { 0x1162, 72257 }, { 0x1163, 70520 }, { 0x1164, 72261 }, { 0x1165, 70797 }, { 0x1166, 72401 }, { 0x1167, 70523 }, { 0x1168, 72265 }, { 0x1169, 70800 }, { 0x116A, 72405 }, { 0x116B, 70514 }, { 0x116C, 72253 }, { 0x116D, 70794 }, { 0x116E, 72397 }, { 0x116F, 71877 }, { 0x1170, 70000 }, { 0x1171, 70502 }, { 0x1172, 70508 }, { 0x1173, 70511 }, { 0x1174, 70499 }, { 0x1175, 70057 }, { 0x1176, 70599 }, { 0x1177, 70060 }, { 0x1178, 70262 }, { 0x1179, 70063 }, { 0x117A, 70265 }, { 0x117B, 71050 }, { 0x117C, 70054 }, { 0x117D, 70256 }, { 0x117E, 70271 }, { 0x117F, 72161 }, { 0x1180, 70274 }, { 0x1181, 72165 }, { 0x1182, 70608 }, { 0x1183, 72317 }, { 0x1184, 70277 }, { 0x1185, 72169 }, { 0x1186, 70611 }, { 0x1187, 72321 }, { 0x1188, 70268 }, { 0x1189, 72157 }, { 0x118A, 70602 }, { 0x118B, 72313 }, { 0x118C, 71845 }, { 0x118D, 69973 }, { 0x118E, 70066 }, { 0x118F, 72510 }, { 0x1190, 72514 }, { 0x1191, 72518 }, { 0x1192, 72506 }, { 0x1193, 70021 }, { 0x1194, 70577 }, { 0x1195, 70024 }, { 0x1196, 70229 }, { 0x1197, 70027 }, { 0x1198, 70232 }, { 0x1199, 71046 }, { 0x119A, 70018 }, { 0x119B, 70222 }, { 0x119C, 70238 }, { 0x119D, 72145 }, { 0x119E, 70241 }, { 0x119F, 72149 }, { 0x11A0, 70583 }, { 0x11A1, 72301 }, { 0x11A2, 70244 }, { 0x11A3, 72153 }, { 0x11A4, 70586 }, { 0x11A5, 72305 }, { 0x11A6, 70235 }, { 0x11A7, 72141 }, { 0x11A8, 70580 }, { 0x11A9, 72297 }, { 0x11AA, 71841 }, { 0x11AB, 69961 }, { 0x11AC, 70998 }, { 0x11AD, 70087 }, { 0x11AE, 70635 }, { 0x11AF, 70093 }, { 0x11B0, 70319 }, { 0x11B1, 70096 }, { 0x11B2, 70322 }, { 0x11B3, 71058 }, { 0x11B4, 70084 }, { 0x11B5, 70313 }, { 0x11B6, 70328 }, { 0x11B7, 72201 }, { 0x11B8, 70331 }, { 0x11B9, 72205 }, { 0x11BA, 70641 }, { 0x11BB, 72341 }, { 0x11BC, 70334 }, { 0x11BD, 72209 }, { 0x11BE, 70644 }, { 0x11BF, 72345 }, { 0x11C0, 70325 }, { 0x11C1, 72197 }, { 0x11C2, 70638 }, { 0x11C3, 72337 }, { 0x11C4, 71849 }, { 0x11C5, 69979 }, { 0x11C6, 72081 }, { 0x11C7, 70090 }, { 0x11C8, 72437 }, { 0x11C9, 70970 }, { 0x11CA, 70102 }, { 0x11CB, 70647 }, { 0x11CC, 70111 }, { 0x11CD, 70352 }, { 0x11CE, 70114 }, { 0x11CF, 70358 }, { 0x11D0, 71062 }, { 0x11D1, 70099 }, { 0x11D2, 70337 }, { 0x11D3, 70367 }, { 0x11D4, 72217 }, { 0x11D5, 70364 }, { 0x11D6, 72213 }, { 0x11D7, 70671 }, { 0x11D8, 72349 }, { 0x11D9, 71853 }, { 0x11DA, 69982 }, { 0x11DB, 71210 }, { 0x11DC, 70108 }, { 0x11DD, 70072 }, { 0x11DE, 70614 }, { 0x11DF, 70078 }, { 0x11E0, 70295 }, { 0x11E1, 70081 }, { 0x11E2, 70298 }, { 0x11E3, 71054 }, { 0x11E4, 70069 }, { 0x11E5, 70280 }, { 0x11E6, 70304 }, { 0x11E7, 72185 }, { 0x11E8, 70307 }, { 0x11E9, 72189 }, { 0x11EA, 70629 }, { 0x11EB, 72329 }, { 0x11EC, 70310 }, { 0x11ED, 72193 }, { 0x11EE, 70632 }, { 0x11EF, 72333 }, { 0x11F0, 70301 }, { 0x11F1, 72181 }, { 0x11F2, 70626 }, { 0x11F3, 72325 }, { 0x11F4, 69976 }, { 0x11F5, 72077 }, { 0x11F6, 70942 }, { 0x11F7, 70162 }, { 0x11F8, 70713 }, { 0x11F9, 70168 }, { 0x11FA, 70454 }, { 0x11FB, 70171 }, { 0x11FC, 70457 }, { 0x11FD, 71070 }, { 0x11FE, 70159 }, { 0x11FF, 70436 }, { 0x1200, 70466 }, { 0x1201, 72241 }, { 0x1202, 70469 }, { 0x1203, 72245 }, { 0x1204, 70746 }, { 0x1205, 72389 }, { 0x1206, 70472 }, { 0x1207, 72249 }, { 0x1208, 70749 }, { 0x1209, 72393 }, { 0x120A, 70463 }, { 0x120B, 72237 }, { 0x120C, 70743 }, { 0x120D, 72385 }, { 0x120E, 71873 }, { 0x120F, 69997 }, { 0x1210, 72441 }, { 0x1211, 70174 }, { 0x1212, 72021 }, { 0x1213, 72449 }, { 0x1214, 71829 }, { 0x1215, 71825 }, { 0x1216, 71865 }, { 0x1217, 71869 }, { 0x1218, 71861 }, { 0x1219, 71857 }, { 0x121A, 70445 }, { 0x121B, 70448 }, { 0x121C, 70722 }, { 0x121D, 70451 }, { 0x121E, 70725 }, { 0x121F, 70442 }, { 0x1220, 70716 }, { 0x1221, 70734 }, { 0x1222, 72373 }, { 0x1223, 70737 }, { 0x1224, 72377 }, { 0x1225, 70902 }, { 0x1226, 72425 }, { 0x1227, 70740 }, { 0x1228, 72381 }, { 0x1229, 70905 }, { 0x122A, 72429 }, { 0x122B, 70731 }, { 0x122C, 72369 }, { 0x122D, 70899 }, { 0x122E, 72421 }, { 0x122F, 70165 }, { 0x1230, 70207 }, { 0x1231, 70803 }, { 0x1232, 70210 }, { 0x1233, 70556 }, { 0x1234, 70213 }, { 0x1235, 70559 }, { 0x1236, 71078 }, { 0x1237, 70204 }, { 0x1238, 70550 }, { 0x1239, 70568 }, { 0x123A, 72285 }, { 0x123B, 70571 }, { 0x123C, 72289 }, { 0x123D, 70809 }, { 0x123E, 72413 }, { 0x123F, 70574 }, { 0x1240, 72293 }, { 0x1241, 70812 }, { 0x1242, 72417 }, { 0x1243, 70565 }, { 0x1244, 72281 }, { 0x1245, 70806 }, { 0x1246, 72409 }, { 0x1247, 71881 }, { 0x1248, 70003 }, { 0x1249, 72445 }, { 0x124A, 72093 }, { 0x124B, 71002 }, { 0x124C, 70150 }, { 0x124D, 70962 }, { 0x124E, 72101 }, { 0x124F, 70698 }, { 0x1250, 70153 }, { 0x1251, 70421 }, { 0x1252, 70156 }, { 0x1253, 70424 }, { 0x1254, 72105 }, { 0x1255, 70147 }, { 0x1256, 70415 }, { 0x1257, 72097 }, { 0x1258, 70701 }, { 0x1259, 72365 }, { 0x125A, 69994 }, { 0x125B, 72089 }, { 0x125C, 70946 }, { 0x125D, 70036 }, { 0x125E, 70589 }, { 0x125F, 70039 }, { 0x1260, 70250 }, { 0x1261, 70042 }, { 0x1262, 70253 }, { 0x1263, 70033 }, { 0x1264, 70247 }, { 0x1265, 70596 }, { 0x1266, 72309 }, { 0x1267, 69967 }, { 0x1268, 70484 }, { 0x1269, 70950 }, { 0x126A, 70487 }, { 0x126B, 70954 }, { 0x126C, 70758 }, { 0x126D, 70958 }, { 0x126E, 70490 }, { 0x126F, 70761 }, { 0x1270, 70481 }, { 0x1271, 70755 }, { 0x1272, 70911 }, { 0x1273, 72433 }, { 0x1274, 70183 }, { 0x1275, 70785 }, { 0x1276, 70788 }, { 0x1277, 70791 }, { 0x1278, 70782 }, { 0x1279, 70505 }, { 0x127A, 70529 }, { 0x127B, 70532 }, { 0x127C, 70535 }, { 0x127D, 70526 }, { 0x127E, 71893 }, { 0x127F, 71897 }, { 0x1280, 71909 }, { 0x1281, 71901 }, { 0x1282, 71913 }, { 0x1283, 71889 }, { 0x1284, 71905 }, { 0x1285, 71885 }, { 0x1286, 71917 }, { 0x1287, 70045 }, { 0x1288, 70695 }, { 0x1289, 70141 }, { 0x128A, 70409 }, { 0x128B, 70144 }, { 0x128C, 70412 }, { 0x128D, 70138 }, { 0x128E, 70403 }, { 0x128F, 69991 }, { 0x1290, 70773 }, { 0x1291, 70776 }, { 0x1292, 70779 }, { 0x1293, 70770 }, { 0x1294, 72113 }, { 0x1295, 72117 }, { 0x1296, 72121 }, { 0x1297, 72109 }, { 0x1298, 70887 }, { 0x1299, 70346 }, { 0x129A, 70656 }, { 0x129B, 70349 }, { 0x129C, 70659 }, { 0x129D, 70343 }, { 0x129E, 70650 }, { 0x129F, 70105 }, { 0x12A0, 70355 }, { 0x12A1, 71018 }, { 0x12A2, 71022 }, { 0x12A3, 71026 }, { 0x12A4, 71014 }, { 0x12A5, 72461 }, { 0x12A6, 72465 }, { 0x12A7, 72469 }, { 0x12A8, 72457 }, { 0x12A9, 72453 }, { 0x12AA, 70289 }, { 0x12AB, 70620 }, { 0x12AC, 70292 }, { 0x12AD, 70623 }, { 0x12AE, 70286 }, { 0x12AF, 70617 }, { 0x12B0, 70075 }, { 0x12B1, 71977 }, { 0x12B2, 71981 }, { 0x12B3, 71993 }, { 0x12B4, 71985 }, { 0x12B5, 71997 }, { 0x12B6, 71973 }, { 0x12B7, 71989 }, { 0x12B8, 71969 }, { 0x12B9, 71086 }, { 0x12BA, 72009 }, { 0x12BB, 72013 }, { 0x12BC, 72017 }, { 0x12BD, 72005 }, { 0x12BE, 72065 }, { 0x12BF, 72069 }, { 0x12C0, 72073 }, { 0x12C1, 72061 }, { 0x12C2, 72049 }, { 0x12C3, 72053 }, { 0x12C4, 72057 }, { 0x12C5, 72045 }, { 0x12C6, 72033 }, { 0x12C7, 72037 }, { 0x12C8, 72041 }, { 0x12C9, 72029 }, { 0x12CA, 70978 }, { 0x12CB, 70982 }, { 0x12CC, 70986 }, { 0x12CD, 70974 }, { 0x12CE, 71438 }, { 0x12CF, 71434 }, { 0x12D0, 71426 }, { 0x12D1, 71715 }, { 0x12D2, 71430 }, { 0x12D3, 71422 }, { 0x12D4, 71262 }, { 0x12D5, 71258 }, { 0x12D6, 71250 }, { 0x12D7, 71578 }, { 0x12D8, 71254 }, { 0x12D9, 71246 }, { 0x12DA, 71306 }, { 0x12DB, 71302 }, { 0x12DC, 71294 }, { 0x12DD, 71686 }, { 0x12DE, 71298 }, { 0x12DF, 71290 }, { 0x12E0, 71470 }, { 0x12E1, 71466 }, { 0x12E2, 71458 }, { 0x12E3, 71719 }, { 0x12E4, 71462 }, { 0x12E5, 71454 }, { 0x12E6, 71622 }, { 0x12E7, 71618 }, { 0x12E8, 71610 }, { 0x12E9, 71743 }, { 0x12EA, 71614 }, { 0x12EB, 71606 }, { 0x12EC, 71682 }, { 0x12ED, 71678 }, { 0x12EE, 71670 }, { 0x12EF, 71775 }, { 0x12F0, 71674 }, { 0x12F1, 71666 }, { 0x12F2, 71242 }, { 0x12F3, 71238 }, { 0x12F4, 71230 }, { 0x12F5, 71574 }, { 0x12F6, 71234 }, { 0x12F7, 71226 }, { 0x12F8, 71098 }, { 0x12F9, 71130 }, { 0x12FA, 71126 }, { 0x12FB, 71118 }, { 0x12FC, 71418 }, { 0x12FD, 71122 }, { 0x12FE, 71114 }, { 0x12FF, 71518 }, { 0x1300, 71514 }, { 0x1301, 71506 }, { 0x1302, 71727 }, { 0x1303, 71510 }, { 0x1304, 71502 }, { 0x1305, 71538 }, { 0x1306, 71534 }, { 0x1307, 71526 }, { 0x1308, 71731 }, { 0x1309, 71530 }, { 0x130A, 71522 }, { 0x130B, 71158 }, { 0x130C, 71222 }, { 0x130D, 71218 }, { 0x130E, 71206 }, { 0x130F, 71570 }, { 0x1310, 71214 }, { 0x1311, 71202 }, { 0x1312, 71198 }, { 0x1313, 71194 }, { 0x1314, 71186 }, { 0x1315, 71566 }, { 0x1316, 71190 }, { 0x1317, 71182 }, { 0x1318, 71326 }, { 0x1319, 71322 }, { 0x131A, 71314 }, { 0x131B, 71690 }, { 0x131C, 71318 }, { 0x131D, 71310 }, { 0x131E, 71154 }, { 0x131F, 70994 }, { 0x1320, 71150 }, { 0x1321, 71142 }, { 0x1322, 71474 }, { 0x1323, 71146 }, { 0x1324, 70990 }, { 0x1325, 71138 }, { 0x1326, 71494 }, { 0x1327, 71490 }, { 0x1328, 71482 }, { 0x1329, 71723 }, { 0x132A, 71486 }, { 0x132B, 71478 }, { 0x132C, 71178 }, { 0x132D, 71174 }, { 0x132E, 71166 }, { 0x132F, 71542 }, { 0x1330, 71170 }, { 0x1331, 71162 }, { 0x1332, 71390 }, { 0x1333, 71386 }, { 0x1334, 71378 }, { 0x1335, 71707 }, { 0x1336, 71382 }, { 0x1337, 71374 }, { 0x1338, 71562 }, { 0x1339, 71558 }, { 0x133A, 71550 }, { 0x133B, 71735 }, { 0x133C, 71554 }, { 0x133D, 71546 }, { 0x133E, 71767 }, { 0x133F, 71763 }, { 0x1340, 71755 }, { 0x1341, 71799 }, { 0x1342, 71759 }, { 0x1343, 71751 }, { 0x1344, 71642 }, { 0x1345, 71638 }, { 0x1346, 71630 }, { 0x1347, 71747 }, { 0x1348, 71634 }, { 0x1349, 71626 }, { 0x134A, 71346 }, { 0x134B, 71342 }, { 0x134C, 71334 }, { 0x134D, 71694 }, { 0x134E, 71338 }, { 0x134F, 71330 }, { 0x1350, 71102 }, { 0x1351, 71812 }, { 0x1352, 71410 }, { 0x1353, 71406 }, { 0x1354, 71398 }, { 0x1355, 71711 }, { 0x1356, 71402 }, { 0x1357, 71394 }, { 0x1358, 71286 }, { 0x1359, 71282 }, { 0x135A, 71270 }, { 0x135B, 71582 }, { 0x135C, 71278 }, { 0x135D, 71266 }, { 0x135E, 71602 }, { 0x135F, 71598 }, { 0x1360, 71590 }, { 0x1361, 71739 }, { 0x1362, 71594 }, { 0x1363, 71586 }, { 0x1364, 71274 }, { 0x1365, 71662 }, { 0x1366, 71658 }, { 0x1367, 71650 }, { 0x1368, 71771 }, { 0x1369, 71654 }, { 0x136A, 71646 }, { 0x136B, 71366 }, { 0x136C, 71362 }, { 0x136D, 71354 }, { 0x136E, 71698 }, { 0x136F, 71358 }, { 0x1370, 71350 }, { 0x1371, 71795 }, { 0x1372, 71791 }, { 0x1373, 71783 }, { 0x1374, 71803 }, { 0x1375, 71787 }, { 0x1376, 71779 }, { 0x1377, 70225 }, { 0x1378, 70592 }, { 0x1379, 70406 }, { 0x137A, 70653 }, { 0x137B, 70665 }, { 0x137C, 70893 }, { 0x137D, 70668 }, { 0x137E, 70896 }, { 0x137F, 70662 }, { 0x1380, 70890 }, { 0x1381, 72494 }, { 0x1382, 72477 }, { 0x1383, 72498 }, { 0x1384, 72481 }, { 0x1385, 72502 }, { 0x1386, 72473 }, { 0x1387, 72490 }, { 0x1388, 72485 }, { 0x1389, 72025 }, { 0x138A, 32819 }, { 0x138B, 32864 }, { 0x138C, 32846 }, { 0x138D, 32870 }, { 0x138E, 32858 }, { 0x138F, 32852 }, { 0x1390, 32861 }, { 0x1391, 32837 }, { 0x1392, 32876 }, { 0x1393, 32834 }, { 0x1394, 32867 }, { 0x1395, 32849 }, { 0x1396, 32840 }, { 0x1397, 32891 }, { 0x1398, 32879 }, { 0x1399, 32855 }, { 0x139A, 32831 }, { 0x139B, 32828 }, { 0x139C, 32825 }, { 0x139D, 32885 }, { 0x139E, 32888 }, { 0x139F, 32882 }, { 0x13A0, 32822 }, { 0x13A1, 32894 }, { 0x13A2, 32843 }, { 0x13A3, 32897 }, { 0x13A4, 32873 }, { 0x13A5, 32900 }, { 0x13A6, 32903 }, { 0x13A7, 34061 }, { 0x13A8, 33993 }, { 0x13A9, 34089 }, { 0x13AA, 34028 }, { 0x13AB, 34002 }, { 0x13AC, 33996 }, { 0x13AD, 34232 }, { 0x13AE, 34040 }, { 0x13AF, 34098 }, { 0x13B0, 34021 }, { 0x13B1, 34008 }, { 0x13B2, 34055 }, { 0x13B3, 34266 }, { 0x13B4, 34254 }, { 0x13B5, 33987 }, { 0x13B6, 34012 }, { 0x13B7, 34015 }, { 0x13B8, 34126 }, { 0x13B9, 34123 }, { 0x13BA, 34031 }, { 0x13BB, 34082 }, { 0x13BC, 33981 }, { 0x13BD, 34037 }, { 0x13BE, 34067 }, { 0x13BF, 34043 }, { 0x13C0, 34143 }, { 0x13C1, 34173 }, { 0x13C2, 34115 }, { 0x13C3, 34286 }, { 0x13C4, 34282 }, { 0x13C5, 34191 }, { 0x13C6, 34274 }, { 0x13C7, 34226 }, { 0x13C8, 34072 }, { 0x13C9, 33978 }, { 0x13CA, 34119 }, { 0x13CB, 34046 }, { 0x13CC, 34247 }, { 0x13CD, 34240 }, { 0x13CE, 34078 }, { 0x13CF, 34200 }, { 0x13D0, 34094 }, { 0x13D1, 34205 }, { 0x13D2, 34132 }, { 0x13D3, 34258 }, { 0x13D4, 33972 }, { 0x13D5, 34005 }, { 0x13D6, 34137 }, { 0x13D7, 34262 }, { 0x13D8, 33975 }, { 0x13D9, 34217 }, { 0x13DA, 34290 }, { 0x13DB, 34229 }, { 0x13DC, 34197 }, { 0x13DD, 34110 }, { 0x13DE, 34186 }, { 0x13DF, 34278 }, { 0x13E0, 34270 }, { 0x13E1, 34180 }, { 0x13E2, 34223 }, { 0x13E3, 34177 }, { 0x13E4, 34049 }, { 0x13E5, 34105 }, { 0x13E6, 34212 }, { 0x13E7, 34034 }, { 0x13E8, 34052 }, { 0x13E9, 34209 }, { 0x13EA, 34058 }, { 0x13EB, 34102 }, { 0x13EC, 34086 }, { 0x13ED, 34251 }, { 0x13EE, 34244 }, { 0x13EF, 34237 }, { 0x13F0, 33990 }, { 0x13F1, 33999 }, { 0x13F2, 34294 }, { 0x13F3, 34300 }, { 0x13F4, 33966 }, { 0x13F5, 33969 }, { 0x13F6, 34303 }, { 0x13F7, 34297 }, { 0x13F8, 33984 }, { 0x13F9, 34025 }, { 0x13FA, 34018 }, { 0x13FB, 34163 }, { 0x13FC, 34158 }, { 0x13FD, 34153 }, { 0x13FE, 34148 }, { 0x13FF, 34168 }, { 0x1400, 67117 }, { 0x1401, 67120 }, { 0x1402, 67123 }, { 0x1403, 67138 }, { 0x1404, 67132 }, { 0x1405, 67165 }, { 0x1406, 67156 }, { 0x1407, 67129 }, { 0x1408, 67147 }, { 0x1409, 67150 }, { 0x140A, 67126 }, { 0x140B, 67144 }, { 0x140C, 67162 }, { 0x140D, 67141 }, { 0x140E, 67159 }, { 0x140F, 67153 }, { 0x1410, 67135 }, { 0x1411, 67109 }, { 0x1412, 67113 }, { 0x1413, 67106 }, { 0x1414, 61355 }, { 0x1415, 61358 }, { 0x1416, 61361 }, { 0x1417, 61376 }, { 0x1418, 61370 }, { 0x1419, 61406 }, { 0x141A, 61397 }, { 0x141B, 61367 }, { 0x141C, 61385 }, { 0x141D, 61388 }, { 0x141E, 61364 }, { 0x141F, 61382 }, { 0x1420, 61403 }, { 0x1421, 61391 }, { 0x1422, 61379 }, { 0x1423, 61400 }, { 0x1424, 61394 }, { 0x1425, 61373 }, { 0x1426, 61347 }, { 0x1427, 61351 }, { 0x1428, 61344 }, { 0x1429, 104540 }, { 0x142A, 104537 }, { 0x142B, 19268 }, { 0x142C, 19271 }, { 0x142D, 19274 }, { 0x142E, 19289 }, { 0x142F, 19283 }, { 0x1430, 19319 }, { 0x1431, 19310 }, { 0x1432, 19280 }, { 0x1433, 19298 }, { 0x1434, 19301 }, { 0x1435, 19277 }, { 0x1436, 19295 }, { 0x1437, 19316 }, { 0x1438, 19304 }, { 0x1439, 19292 }, { 0x143A, 19313 }, { 0x143B, 19307 }, { 0x143C, 19286 }, { 0x143D, 19260 }, { 0x143E, 19264 }, { 0x143F, 86371 }, { 0x1440, 86374 }, { 0x1441, 86377 }, { 0x1442, 86389 }, { 0x1443, 86386 }, { 0x1444, 86416 }, { 0x1445, 86407 }, { 0x1446, 86383 }, { 0x1447, 86398 }, { 0x1448, 86401 }, { 0x1449, 86380 }, { 0x144A, 86395 }, { 0x144B, 86413 }, { 0x144C, 86392 }, { 0x144D, 86410 }, { 0x144E, 86404 }, { 0x144F, 86363 }, { 0x1450, 86367 }, { 0x1451, 23609 }, { 0x1452, 23657 }, { 0x1453, 23612 }, { 0x1454, 23660 }, { 0x1455, 23663 }, { 0x1456, 23594 }, { 0x1457, 23651 }, { 0x1458, 23597 }, { 0x1459, 23654 }, { 0x145A, 23669 }, { 0x145B, 23600 }, { 0x145C, 23690 }, { 0x145D, 23603 }, { 0x145E, 23693 }, { 0x145F, 23666 }, { 0x1460, 23639 }, { 0x1461, 23684 }, { 0x1462, 23642 }, { 0x1463, 23687 }, { 0x1464, 23624 }, { 0x1465, 23591 }, { 0x1466, 23672 }, { 0x1467, 23627 }, { 0x1468, 23675 }, { 0x1469, 23621 }, { 0x146A, 23648 }, { 0x146B, 23633 }, { 0x146C, 23618 }, { 0x146D, 23645 }, { 0x146E, 23678 }, { 0x146F, 23681 }, { 0x1470, 23636 }, { 0x1471, 23606 }, { 0x1472, 23615 }, { 0x1473, 23630 }, { 0x1474, 23908 }, { 0x1475, 23900 }, { 0x1476, 23884 }, { 0x1477, 23916 }, { 0x1478, 23888 }, { 0x1479, 23932 }, { 0x147A, 23936 }, { 0x147B, 23944 }, { 0x147C, 23892 }, { 0x147D, 23940 }, { 0x147E, 23876 }, { 0x147F, 23896 }, { 0x1480, 23880 }, { 0x1481, 23904 }, { 0x1482, 23920 }, { 0x1483, 23926 }, { 0x1484, 23912 }, { 0x1485, 23587 }, { 0x1486, 23583 }, { 0x1487, 23535 }, { 0x1488, 23523 }, { 0x1489, 23555 }, { 0x148A, 23531 }, { 0x148B, 23579 }, { 0x148C, 23527 }, { 0x148D, 23571 }, { 0x148E, 23567 }, { 0x148F, 23559 }, { 0x1490, 23575 }, { 0x1491, 23551 }, { 0x1492, 23519 }, { 0x1493, 23539 }, { 0x1494, 23543 }, { 0x1495, 23563 }, { 0x1496, 23547 }, { 0x1497, 23459 }, { 0x1498, 23462 }, { 0x1499, 23486 }, { 0x149A, 23477 }, { 0x149B, 23465 }, { 0x149C, 23431 }, { 0x149D, 23428 }, { 0x149E, 23480 }, { 0x149F, 23453 }, { 0x14A0, 23422 }, { 0x14A1, 23446 }, { 0x14A2, 23450 }, { 0x14A3, 23425 }, { 0x14A4, 23474 }, { 0x14A5, 23419 }, { 0x14A6, 23471 }, { 0x14A7, 23437 }, { 0x14A8, 23415 }, { 0x14A9, 23434 }, { 0x14AA, 23442 }, { 0x14AB, 23456 }, { 0x14AC, 23872 }, { 0x14AD, 23483 }, { 0x14AE, 23468 }, { 0x14AF, 23507 }, { 0x14B0, 23489 }, { 0x14B1, 23495 }, { 0x14B2, 23516 }, { 0x14B3, 23501 }, { 0x14B4, 23498 }, { 0x14B5, 23492 }, { 0x14B6, 23513 }, { 0x14B7, 23510 }, { 0x14B8, 23504 }, { 0x14B9, 23722 }, { 0x14BA, 23732 }, { 0x14BB, 23717 }, { 0x14BC, 23712 }, { 0x14BD, 23727 }, { 0x14BE, 23737 }, { 0x14BF, 23757 }, { 0x14C0, 23747 }, { 0x14C1, 23742 }, { 0x14C2, 23752 }, { 0x14C3, 100843 }, { 0x14C4, 101501 }, { 0x14C5, 100856 }, { 0x14C6, 100831 }, { 0x14C7, 100854 }, { 0x14C8, 100813 }, { 0x14C9, 100839 }, { 0x14CA, 100834 }, { 0x14CB, 101470 }, { 0x14CC, 101466 }, { 0x14CD, 101473 }, { 0x14CE, 100816 }, { 0x14CF, 100821 }, { 0x14D0, 100826 }, { 0x14D1, 100902 }, { 0x14D2, 100876 }, { 0x14D3, 100858 }, { 0x14D4, 100864 }, { 0x14D5, 100885 }, { 0x14D6, 100870 }, { 0x14D7, 100867 }, { 0x14D8, 100861 }, { 0x14D9, 100882 }, { 0x14DA, 100879 }, { 0x14DB, 100873 }, { 0x14DC, 100910 }, { 0x14DD, 100913 }, { 0x14DE, 100916 }, { 0x14DF, 100919 }, { 0x14E0, 100922 }, { 0x14E1, 100955 }, { 0x14E2, 100973 }, { 0x14E3, 100931 }, { 0x14E4, 100952 }, { 0x14E5, 101126 }, { 0x14E6, 100925 }, { 0x14E7, 100958 }, { 0x14E8, 100961 }, { 0x14E9, 100937 }, { 0x14EA, 100949 }, { 0x14EB, 100946 }, { 0x14EC, 100967 }, { 0x14ED, 101144 }, { 0x14EE, 100970 }, { 0x14EF, 100928 }, { 0x14F0, 101129 }, { 0x14F1, 100940 }, { 0x14F2, 100979 }, { 0x14F3, 100964 }, { 0x14F4, 100976 }, { 0x14F5, 100934 }, { 0x14F6, 100943 }, { 0x14F7, 101138 }, { 0x14F8, 101147 }, { 0x14F9, 100982 }, { 0x14FA, 101135 }, { 0x14FB, 101153 }, { 0x14FC, 101141 }, { 0x14FD, 101150 }, { 0x14FE, 101132 }, { 0x14FF, 101356 }, { 0x1500, 101244 }, { 0x1501, 101248 }, { 0x1502, 101252 }, { 0x1503, 101256 }, { 0x1504, 101284 }, { 0x1505, 101300 }, { 0x1506, 101324 }, { 0x1507, 101260 }, { 0x1508, 101288 }, { 0x1509, 101292 }, { 0x150A, 101268 }, { 0x150B, 101280 }, { 0x150C, 101296 }, { 0x150D, 101264 }, { 0x150E, 101328 }, { 0x150F, 101272 }, { 0x1510, 101352 }, { 0x1511, 101308 }, { 0x1512, 101304 }, { 0x1513, 101276 }, { 0x1514, 101336 }, { 0x1515, 101340 }, { 0x1516, 101344 }, { 0x1517, 101348 }, { 0x1518, 101332 }, { 0x1519, 101156 }, { 0x151A, 101160 }, { 0x151B, 101184 }, { 0x151C, 101204 }, { 0x151D, 101164 }, { 0x151E, 101212 }, { 0x151F, 101192 }, { 0x1520, 101176 }, { 0x1521, 101180 }, { 0x1522, 101196 }, { 0x1523, 101232 }, { 0x1524, 101200 }, { 0x1525, 101168 }, { 0x1526, 101188 }, { 0x1527, 101172 }, { 0x1528, 101220 }, { 0x1529, 101224 }, { 0x152A, 101236 }, { 0x152B, 101208 }, { 0x152C, 101228 }, { 0x152D, 101216 }, { 0x152E, 101240 }, { 0x152F, 101362 }, { 0x1530, 101370 }, { 0x1531, 101374 }, { 0x1532, 101366 }, { 0x1533, 101462 }, { 0x1534, 101114 }, { 0x1535, 101108 }, { 0x1536, 101093 }, { 0x1537, 101103 }, { 0x1538, 101120 }, { 0x1539, 101088 }, { 0x153A, 101082 }, { 0x153B, 100985 }, { 0x153C, 100990 }, { 0x153D, 101010 }, { 0x153E, 101035 }, { 0x153F, 101000 }, { 0x1540, 101055 }, { 0x1541, 101077 }, { 0x1542, 101030 }, { 0x1543, 101040 }, { 0x1544, 101020 }, { 0x1545, 101005 }, { 0x1546, 101015 }, { 0x1547, 101045 }, { 0x1548, 101050 }, { 0x1549, 101060 }, { 0x154A, 101025 }, { 0x154B, 100995 }, { 0x154C, 101312 }, { 0x154D, 101318 }, { 0x154E, 101414 }, { 0x154F, 101432 }, { 0x1550, 101378 }, { 0x1551, 101420 }, { 0x1552, 101444 }, { 0x1553, 101456 }, { 0x1554, 101384 }, { 0x1555, 101408 }, { 0x1556, 101438 }, { 0x1557, 101402 }, { 0x1558, 101450 }, { 0x1559, 101390 }, { 0x155A, 101065 }, { 0x155B, 101071 }, { 0x155C, 101396 }, { 0x155D, 101098 }, { 0x155E, 101426 }, { 0x155F, 70123 }, { 0x1560, 70015 }, { 0x1561, 70219 }, { 0x1562, 70541 }, { 0x1563, 70388 }, { 0x1564, 70379 }, { 0x1565, 70692 }, { 0x1566, 70478 }, { 0x1567, 70259 }, { 0x1568, 70605 }, { 0x1569, 70316 }, { 0x156A, 70361 }, { 0x156B, 70340 }, { 0x156C, 70283 }, { 0x156D, 70460 }, { 0x156E, 70439 }, { 0x156F, 70728 }, { 0x1570, 70719 }, { 0x1571, 70908 }, { 0x1572, 70562 }, { 0x1573, 70553 }, { 0x1574, 70418 }, { 0x1575, 70370 }, { 0x1576, 71953 }, { 0x1577, 70674 }, { 0x1578, 71961 }, { 0x1579, 70373 }, { 0x157A, 71957 }, { 0x157B, 70677 }, { 0x157C, 71965 }, { 0x157D, 70704 }, { 0x157E, 70430 }, { 0x157F, 70707 }, { 0x1580, 70433 }, { 0x1581, 70710 }, { 0x1582, 70427 }, { 0x1583, 71937 }, { 0x1584, 71945 }, { 0x1585, 71925 }, { 0x1586, 71921 }, { 0x1587, 71929 }, { 0x1588, 71933 }, { 0x1589, 71941 }, { 0x158A, 71949 }, { 0x158B, 71817 }, { 0x158C, 72001 }, { 0x158D, 70854 }, { 0x158E, 70882 }, { 0x158F, 70966 }, { 0x1590, 72177 }, { 0x1591, 72173 }, { 0x1592, 70767 }, { 0x1593, 70764 }, { 0x1594, 70926 }, { 0x1595, 70923 }, { 0x1596, 70920 }, { 0x1597, 70917 }, { 0x1598, 70914 }, { 0x1599, 71034 }, { 0x159A, 71030 }, { 0x159B, 71006 }, { 0x159C, 71446 }, { 0x159D, 71702 }, { 0x159E, 71414 }, { 0x159F, 71442 }, { 0x15A0, 71010 }, { 0x15A1, 71498 }, { 0x15A2, 70929 }, { 0x15A3, 70934 }, { 0x15A4, 71807 }, { 0x15A5, 31318 }, { 0x15A6, 31228 }, { 0x15A7, 31273 }, { 0x15A8, 31219 }, { 0x15A9, 31267 }, { 0x15AA, 31276 }, { 0x15AB, 31213 }, { 0x15AC, 31261 }, { 0x15AD, 31225 }, { 0x15AE, 31270 }, { 0x15AF, 31294 }, { 0x15B0, 31249 }, { 0x15B1, 31288 }, { 0x15B2, 31216 }, { 0x15B3, 31264 }, { 0x15B4, 31237 }, { 0x15B5, 31240 }, { 0x15B6, 31279 }, { 0x15B7, 31210 }, { 0x15B8, 31258 }, { 0x15B9, 31234 }, { 0x15BA, 31255 }, { 0x15BB, 31243 }, { 0x15BC, 31231 }, { 0x15BD, 31252 }, { 0x15BE, 31282 }, { 0x15BF, 31285 }, { 0x15C0, 31246 }, { 0x15C1, 31222 }, { 0x15C2, 31297 }, { 0x15C3, 31291 }, { 0x15C4, 31174 }, { 0x15C5, 31182 }, { 0x15C6, 31190 }, { 0x15C7, 31202 }, { 0x15C8, 31194 }, { 0x15C9, 31206 }, { 0x15CA, 31198 }, { 0x15CB, 31178 }, { 0x15CC, 31186 }, { 0x15CD, 31311 }, { 0x15CE, 31303 }, { 0x15CF, 31307 }, { 0x15D0, 31138 }, { 0x15D1, 31166 }, { 0x15D2, 31170 }, { 0x15D3, 31162 }, { 0x15D4, 31150 }, { 0x15D5, 31154 }, { 0x15D6, 31146 }, { 0x15D7, 31158 }, { 0x15D8, 31142 }, { 0x15D9, 31105 }, { 0x15DA, 31102 }, { 0x15DB, 31099 }, { 0x15DC, 31096 }, { 0x15DD, 31315 }, { 0x15DE, 31300 }, { 0x15DF, 31126 }, { 0x15E0, 31108 }, { 0x15E1, 31114 }, { 0x15E2, 31135 }, { 0x15E3, 31120 }, { 0x15E4, 31117 }, { 0x15E5, 31111 }, { 0x15E6, 31132 }, { 0x15E7, 31129 }, { 0x15E8, 31123 }, { 0x15E9, 9754 }, { 0x15EA, 9798 }, { 0x15EB, 9814 }, { 0x15EC, 9826 }, { 0x15ED, 9782 }, { 0x15EE, 9802 }, { 0x15EF, 9786 }, { 0x15F0, 9822 }, { 0x15F1, 9758 }, { 0x15F2, 9774 }, { 0x15F3, 9818 }, { 0x15F4, 9762 }, { 0x15F5, 9746 }, { 0x15F6, 9794 }, { 0x15F7, 9750 }, { 0x15F8, 9778 }, { 0x15F9, 9810 }, { 0x15FA, 9830 }, { 0x15FB, 9766 }, { 0x15FC, 9714 }, { 0x15FD, 9722 }, { 0x15FE, 9738 }, { 0x15FF, 9742 }, { 0x1600, 9730 }, { 0x1601, 9770 }, { 0x1602, 9726 }, { 0x1603, 9790 }, { 0x1604, 9718 }, { 0x1605, 9806 }, { 0x1606, 9734 }, { 0x1607, 9834 }, { 0x1608, 9838 }, { 0x1609, 9842 }, { 0x160A, 9846 }, { 0x160B, 9850 }, { 0x160C, 6749 }, { 0x160D, 6617 }, { 0x160E, 6719 }, { 0x160F, 6773 }, { 0x1610, 6791 }, { 0x1611, 6587 }, { 0x1612, 6641 }, { 0x1613, 6659 }, { 0x1614, 6815 }, { 0x1615, 6755 }, { 0x1616, 6779 }, { 0x1617, 6683 }, { 0x1618, 6623 }, { 0x1619, 6647 }, { 0x161A, 6761 }, { 0x161B, 6809 }, { 0x161C, 6737 }, { 0x161D, 6629 }, { 0x161E, 6677 }, { 0x161F, 6605 }, { 0x1620, 6743 }, { 0x1621, 6797 }, { 0x1622, 6731 }, { 0x1623, 6611 }, { 0x1624, 6665 }, { 0x1625, 6599 }, { 0x1626, 6707 }, { 0x1627, 6767 }, { 0x1628, 6725 }, { 0x1629, 6575 }, { 0x162A, 6635 }, { 0x162B, 6593 }, { 0x162C, 6713 }, { 0x162D, 6701 }, { 0x162E, 6695 }, { 0x162F, 6581 }, { 0x1630, 6569 }, { 0x1631, 6563 }, { 0x1632, 6785 }, { 0x1633, 6821 }, { 0x1634, 6653 }, { 0x1635, 6689 }, { 0x1636, 6803 }, { 0x1637, 6671 }, { 0x1638, 6556 }, { 0x1639, 6478 }, { 0x163A, 6496 }, { 0x163B, 6472 }, { 0x163C, 6526 }, { 0x163D, 6460 }, { 0x163E, 6484 }, { 0x163F, 6466 }, { 0x1640, 6508 }, { 0x1641, 6520 }, { 0x1642, 6490 }, { 0x1643, 6538 }, { 0x1644, 6532 }, { 0x1645, 6514 }, { 0x1646, 6544 }, { 0x1647, 6550 }, { 0x1648, 6502 }, { 0x1649, 6857 }, { 0x164A, 6863 }, { 0x164B, 6851 }, { 0x164C, 6845 }, { 0x164D, 6839 }, { 0x164E, 6833 }, { 0x164F, 6827 }, { 0x1650, 6400 }, { 0x1651, 6405 }, { 0x1652, 6440 }, { 0x1653, 6410 }, { 0x1654, 6420 }, { 0x1655, 6455 }, { 0x1656, 6430 }, { 0x1657, 6425 }, { 0x1658, 6415 }, { 0x1659, 6450 }, { 0x165A, 6445 }, { 0x165B, 6435 }, { 0x165C, 6394 }, { 0x165D, 6384 }, { 0x165E, 6389 }, { 0x165F, 23869 }, { 0x1660, 23782 }, { 0x1661, 23766 }, { 0x1662, 23700 }, { 0x1663, 23774 }, { 0x1664, 23790 }, { 0x1665, 23862 }, { 0x1666, 23846 }, { 0x1667, 23838 }, { 0x1668, 23854 }, { 0x1669, 23708 }, { 0x166A, 23822 }, { 0x166B, 23806 }, { 0x166C, 23798 }, { 0x166D, 23814 }, { 0x166E, 23830 }, { 0x166F, 23866 }, { 0x1670, 23778 }, { 0x1671, 23762 }, { 0x1672, 23696 }, { 0x1673, 23770 }, { 0x1674, 23786 }, { 0x1675, 23858 }, { 0x1676, 23842 }, { 0x1677, 23834 }, { 0x1678, 23850 }, { 0x1679, 23704 }, { 0x167A, 23818 }, { 0x167B, 23802 }, { 0x167C, 23794 }, { 0x167D, 23810 }, { 0x167E, 23826 }, { 0x167F, 69898 }, { 0x1680, 69889 }, { 0x1681, 69931 }, { 0x1682, 69940 }, { 0x1683, 69910 }, { 0x1684, 69880 }, { 0x1685, 69904 }, { 0x1686, 69928 }, { 0x1687, 69919 }, { 0x1688, 69886 }, { 0x1689, 69907 }, { 0x168A, 69934 }, { 0x168B, 69883 }, { 0x168C, 69895 }, { 0x168D, 69937 }, { 0x168E, 69943 }, { 0x168F, 69925 }, { 0x1690, 69913 }, { 0x1691, 69901 }, { 0x1692, 69922 }, { 0x1693, 69916 }, { 0x1694, 69877 }, { 0x1695, 69892 }, { 0x1696, 69861 }, { 0x1697, 69869 }, { 0x1698, 69857 }, { 0x1699, 69865 }, { 0x169A, 69873 }, { 0x169B, 69946 }, { 0x169C, 69853 }, { 0x169D, 10331 }, { 0x169E, 10361 }, { 0x169F, 10366 }, { 0x16A0, 10245 }, { 0x16A1, 10280 }, { 0x16A2, 10275 }, { 0x16A3, 10304 }, { 0x16A4, 10316 }, { 0x16A5, 10356 }, { 0x16A6, 10230 }, { 0x16A7, 10255 }, { 0x16A8, 10270 }, { 0x16A9, 10308 }, { 0x16AA, 10400 }, { 0x16AB, 10391 }, { 0x16AC, 10182 }, { 0x16AD, 10295 }, { 0x16AE, 10396 }, { 0x16AF, 10346 }, { 0x16B0, 10386 }, { 0x16B1, 10260 }, { 0x16B2, 10290 }, { 0x16B3, 10202 }, { 0x16B4, 10178 }, { 0x16B5, 10336 }, { 0x16B6, 10371 }, { 0x16B7, 10321 }, { 0x16B8, 10250 }, { 0x16B9, 10235 }, { 0x16BA, 10285 }, { 0x16BB, 10198 }, { 0x16BC, 10265 }, { 0x16BD, 10351 }, { 0x16BE, 10210 }, { 0x16BF, 10312 }, { 0x16C0, 10194 }, { 0x16C1, 10300 }, { 0x16C2, 10218 }, { 0x16C3, 10376 }, { 0x16C4, 10381 }, { 0x16C5, 10341 }, { 0x16C6, 10326 }, { 0x16C7, 10226 }, { 0x16C8, 10166 }, { 0x16C9, 10240 }, { 0x16CA, 10170 }, { 0x16CB, 10190 }, { 0x16CC, 10174 }, { 0x16CD, 10214 }, { 0x16CE, 10186 }, { 0x16CF, 10206 }, { 0x16D0, 10222 }, { 0x16D1, 10404 }, { 0x16D2, 10463 }, { 0x16D3, 10457 }, { 0x16D4, 10419 }, { 0x16D5, 9923 }, { 0x16D6, 10451 }, { 0x16D7, 10436 }, { 0x16D8, 10442 }, { 0x16D9, 10426 }, { 0x16DA, 10414 }, { 0x16DB, 10431 }, { 0x16DC, 9965 }, { 0x16DD, 10066 }, { 0x16DE, 10143 }, { 0x16DF, 10091 }, { 0x16E0, 10154 }, { 0x16E1, 10076 }, { 0x16E2, 10106 }, { 0x16E3, 10133 }, { 0x16E4, 10149 }, { 0x16E5, 10086 }, { 0x16E6, 10138 }, { 0x16E7, 10081 }, { 0x16E8, 10117 }, { 0x16E9, 10128 }, { 0x16EA, 10071 }, { 0x16EB, 10096 }, { 0x16EC, 10123 }, { 0x16ED, 10101 }, { 0x16EE, 10160 }, { 0x16EF, 10111 }, { 0x16F0, 9918 }, { 0x16F1, 9981 }, { 0x16F2, 9985 }, { 0x16F3, 9950 }, { 0x16F4, 9955 }, { 0x16F5, 9960 }, { 0x16F6, 9904 }, { 0x16F7, 9913 }, { 0x16F8, 10003 }, { 0x16F9, 10409 }, { 0x16FA, 9884 }, { 0x16FB, 9854 }, { 0x16FC, 9864 }, { 0x16FD, 9899 }, { 0x16FE, 9874 }, { 0x16FF, 9869 }, { 0x1700, 9859 }, { 0x1701, 9894 }, { 0x1702, 9889 }, { 0x1703, 9879 }, { 0x1704, 10046 }, { 0x1705, 10016 }, { 0x1706, 10026 }, { 0x1707, 10061 }, { 0x1708, 10036 }, { 0x1709, 10031 }, { 0x170A, 10021 }, { 0x170B, 10056 }, { 0x170C, 10051 }, { 0x170D, 10041 }, { 0x170E, 9973 }, { 0x170F, 10008 }, { 0x1710, 9969 }, { 0x1711, 9942 }, { 0x1712, 9909 }, { 0x1713, 9977 }, { 0x1714, 9997 }, { 0x1715, 9929 }, { 0x1716, 9938 }, { 0x1717, 9989 }, { 0x1718, 9993 }, { 0x1719, 10012 }, { 0x171A, 9934 }, { 0x171B, 9946 }, { 0x171C, 91338 }, { 0x171D, 92052 }, { 0x171E, 91653 }, { 0x171F, 91719 }, { 0x1720, 91313 }, { 0x1721, 90621 }, { 0x1722, 91323 }, { 0x1723, 90707 }, { 0x1724, 91189 }, { 0x1725, 91066 }, { 0x1726, 91308 }, { 0x1727, 92023 }, { 0x1728, 91269 }, { 0x1729, 92026 }, { 0x172A, 92029 }, { 0x172B, 69140 }, { 0x172C, 69144 }, { 0x172D, 69151 }, { 0x172E, 69154 }, { 0x172F, 69148 }, { 0x1730, 69435 }, { 0x1731, 69438 }, { 0x1732, 69445 }, { 0x1733, 69448 }, { 0x1734, 69459 }, { 0x1735, 69462 }, { 0x1736, 69367 }, { 0x1737, 69371 }, { 0x1738, 69338 }, { 0x1739, 69342 }, { 0x173A, 69442 }, { 0x173B, 69466 }, { 0x173C, 69452 }, { 0x173D, 69455 }, { 0x173E, 69328 }, { 0x173F, 69331 }, { 0x1740, 69311 }, { 0x1741, 69314 }, { 0x1742, 69417 }, { 0x1743, 69283 }, { 0x1744, 69286 }, { 0x1745, 69321 }, { 0x1746, 69324 }, { 0x1747, 69420 }, { 0x1748, 69394 }, { 0x1749, 69398 }, { 0x174A, 69297 }, { 0x174B, 69302 }, { 0x174C, 69353 }, { 0x174D, 69387 }, { 0x174E, 69390 }, { 0x174F, 69290 }, { 0x1750, 69293 }, { 0x1751, 69350 }, { 0x1752, 69357 }, { 0x1753, 69360 }, { 0x1754, 69276 }, { 0x1755, 69279 }, { 0x1756, 69347 }, { 0x1757, 69410 }, { 0x1758, 69364 }, { 0x1759, 69335 }, { 0x175A, 69407 }, { 0x175B, 69379 }, { 0x175C, 69383 }, { 0x175D, 69376 }, { 0x175E, 69318 }, { 0x175F, 69157 }, { 0x1760, 69270 }, { 0x1761, 69223 }, { 0x1762, 69227 }, { 0x1763, 69232 }, { 0x1764, 69236 }, { 0x1765, 69212 }, { 0x1766, 69217 }, { 0x1767, 69201 }, { 0x1768, 69206 }, { 0x1769, 69250 }, { 0x176A, 69254 }, { 0x176B, 69265 }, { 0x176C, 69259 }, { 0x176D, 69241 }, { 0x176E, 69245 }, { 0x176F, 69137 }, { 0x1770, 69413 }, { 0x1771, 69427 }, { 0x1772, 69431 }, { 0x1773, 69307 }, { 0x1774, 69403 }, { 0x1775, 69423 }, { 0x1776, 69469 }, { 0x1777, 69187 }, { 0x1778, 69169 }, { 0x1779, 69175 }, { 0x177A, 69196 }, { 0x177B, 69181 }, { 0x177C, 69178 }, { 0x177D, 69172 }, { 0x177E, 69193 }, { 0x177F, 69190 }, { 0x1780, 69184 }, { 0x1781, 69199 }, { 0x1782, 69473 }, { 0x1783, 69274 }, { 0x1784, 69166 }, { 0x1785, 69160 }, { 0x1786, 69163 }, { 0x1787, 69620 }, { 0x1788, 69497 }, { 0x1789, 69489 }, { 0x178A, 69501 }, { 0x178B, 69475 }, { 0x178C, 69484 }, { 0x178D, 69493 }, { 0x178E, 69505 }, { 0x178F, 69513 }, { 0x1790, 69509 }, { 0x1791, 69479 }, { 0x1792, 69532 }, { 0x1793, 69527 }, { 0x1794, 69549 }, { 0x1795, 69537 }, { 0x1796, 69561 }, { 0x1797, 69554 }, { 0x1798, 69542 }, { 0x1799, 69522 }, { 0x179A, 69517 }, { 0x179B, 69602 }, { 0x179C, 69596 }, { 0x179D, 69614 }, { 0x179E, 69608 }, { 0x179F, 69566 }, { 0x17A0, 69578 }, { 0x17A1, 69584 }, { 0x17A2, 69590 }, { 0x17A3, 69572 }, { 0x17A4, 102119 }, { 0x17A5, 102122 }, { 0x17A6, 102125 }, { 0x17A7, 102182 }, { 0x17A8, 102188 }, { 0x17A9, 102194 }, { 0x17AA, 102197 }, { 0x17AB, 102191 }, { 0x17AC, 102185 }, { 0x17AD, 102209 }, { 0x17AE, 102224 }, { 0x17AF, 102239 }, { 0x17B0, 102215 }, { 0x17B1, 102275 }, { 0x17B2, 102203 }, { 0x17B3, 102221 }, { 0x17B4, 102263 }, { 0x17B5, 102278 }, { 0x17B6, 102248 }, { 0x17B7, 102206 }, { 0x17B8, 102233 }, { 0x17B9, 102236 }, { 0x17BA, 102212 }, { 0x17BB, 102251 }, { 0x17BC, 102200 }, { 0x17BD, 102230 }, { 0x17BE, 102260 }, { 0x17BF, 102242 }, { 0x17C0, 102227 }, { 0x17C1, 102254 }, { 0x17C2, 102245 }, { 0x17C3, 102257 }, { 0x17C4, 102218 }, { 0x17C5, 102315 }, { 0x17C6, 102301 }, { 0x17C7, 102297 }, { 0x17C8, 102166 }, { 0x17C9, 102162 }, { 0x17CA, 102174 }, { 0x17CB, 102170 }, { 0x17CC, 102158 }, { 0x17CD, 102178 }, { 0x17CE, 102116 }, { 0x17CF, 102113 }, { 0x17D0, 102305 }, { 0x17D1, 102310 }, { 0x17D2, 102269 }, { 0x17D3, 102284 }, { 0x17D4, 102146 }, { 0x17D5, 102128 }, { 0x17D6, 102134 }, { 0x17D7, 102155 }, { 0x17D8, 102140 }, { 0x17D9, 102137 }, { 0x17DA, 102131 }, { 0x17DB, 102152 }, { 0x17DC, 102149 }, { 0x17DD, 102143 }, { 0x17DE, 102295 }, { 0x17DF, 102281 }, { 0x17E0, 102272 }, { 0x17E1, 102266 }, { 0x17E2, 102287 }, { 0x17E3, 102291 }, { 0x17E4, 18573 }, { 0x17E5, 18664 }, { 0x17E6, 18594 }, { 0x17E7, 18672 }, { 0x17E8, 18652 }, { 0x17E9, 18582 }, { 0x17EA, 18636 }, { 0x17EB, 18609 }, { 0x17EC, 18684 }, { 0x17ED, 18606 }, { 0x17EE, 18656 }, { 0x17EF, 18618 }, { 0x17F0, 18696 }, { 0x17F1, 18640 }, { 0x17F2, 18591 }, { 0x17F3, 18668 }, { 0x17F4, 18597 }, { 0x17F5, 18588 }, { 0x17F6, 18612 }, { 0x17F7, 18688 }, { 0x17F8, 18603 }, { 0x17F9, 18680 }, { 0x17FA, 18648 }, { 0x17FB, 18644 }, { 0x17FC, 18615 }, { 0x17FD, 18692 }, { 0x17FE, 18660 }, { 0x17FF, 18621 }, { 0x1800, 18700 }, { 0x1801, 18630 }, { 0x1802, 18600 }, { 0x1803, 18676 }, { 0x1804, 18633 }, { 0x1805, 18585 }, { 0x1806, 18627 }, { 0x1807, 18624 }, { 0x1808, 18576 }, { 0x1809, 18579 }, { 0x180A, 18528 }, { 0x180B, 18531 }, { 0x180C, 18568 }, { 0x180D, 18554 }, { 0x180E, 18535 }, { 0x180F, 18558 }, { 0x1810, 18539 }, { 0x1811, 18563 }, { 0x1812, 18543 }, { 0x1813, 18547 }, { 0x1814, 18727 }, { 0x1815, 18723 }, { 0x1816, 18721 }, { 0x1817, 18731 }, { 0x1818, 18704 }, { 0x1819, 18717 }, { 0x181A, 18709 }, { 0x181B, 18713 }, { 0x181C, 49600 }, { 0x181D, 49657 }, { 0x181E, 49654 }, { 0x181F, 49591 }, { 0x1820, 49648 }, { 0x1821, 49663 }, { 0x1822, 49582 }, { 0x1823, 49636 }, { 0x1824, 49597 }, { 0x1825, 49666 }, { 0x1826, 49621 }, { 0x1827, 49678 }, { 0x1828, 49585 }, { 0x1829, 49609 }, { 0x182A, 49612 }, { 0x182B, 49672 }, { 0x182C, 49669 }, { 0x182D, 49588 }, { 0x182E, 49645 }, { 0x182F, 49579 }, { 0x1830, 49633 }, { 0x1831, 49606 }, { 0x1832, 49660 }, { 0x1833, 49681 }, { 0x1834, 49687 }, { 0x1835, 49642 }, { 0x1836, 49630 }, { 0x1837, 49615 }, { 0x1838, 49603 }, { 0x1839, 49594 }, { 0x183A, 49651 }, { 0x183B, 49624 }, { 0x183C, 49618 }, { 0x183D, 49675 }, { 0x183E, 49627 }, { 0x183F, 49576 }, { 0x1840, 49733 }, { 0x1841, 49729 }, { 0x1842, 49564 }, { 0x1843, 49552 }, { 0x1844, 49556 }, { 0x1845, 49568 }, { 0x1846, 49560 }, { 0x1847, 49572 }, { 0x1848, 49548 }, { 0x1849, 49693 }, { 0x184A, 49701 }, { 0x184B, 49697 }, { 0x184C, 49705 }, { 0x184D, 49709 }, { 0x184E, 49713 }, { 0x184F, 49717 }, { 0x1850, 49725 }, { 0x1851, 49721 }, { 0x1852, 49512 }, { 0x1853, 49515 }, { 0x1854, 49745 }, { 0x1855, 49737 }, { 0x1856, 49742 }, { 0x1857, 49751 }, { 0x1858, 49748 }, { 0x1859, 49536 }, { 0x185A, 49518 }, { 0x185B, 49524 }, { 0x185C, 49545 }, { 0x185D, 49530 }, { 0x185E, 49527 }, { 0x185F, 49521 }, { 0x1860, 49542 }, { 0x1861, 49539 }, { 0x1862, 49533 }, { 0x1863, 49684 }, { 0x1864, 49690 }, { 0x1865, 49639 }, { 0x1866, 141 }, { 0x1867, 117 }, { 0x1868, 125 }, { 0x1869, 153 }, { 0x186A, 133 }, { 0x186B, 129 }, { 0x186C, 121 }, { 0x186D, 149 }, { 0x186E, 145 }, { 0x186F, 137 }, { 0x1870, 192 }, { 0x1871, 168 }, { 0x1872, 160 }, { 0x1873, 252 }, { 0x1874, 164 }, { 0x1875, 268 }, { 0x1876, 240 }, { 0x1877, 236 }, { 0x1878, 244 }, { 0x1879, 248 }, { 0x187A, 200 }, { 0x187B, 188 }, { 0x187C, 180 }, { 0x187D, 264 }, { 0x187E, 184 }, { 0x187F, 208 }, { 0x1880, 224 }, { 0x1881, 228 }, { 0x1882, 276 }, { 0x1883, 232 }, { 0x1884, 196 }, { 0x1885, 176 }, { 0x1886, 256 }, { 0x1887, 172 }, { 0x1888, 260 }, { 0x1889, 204 }, { 0x188A, 272 }, { 0x188B, 212 }, { 0x188C, 220 }, { 0x188D, 216 }, { 0x188E, 110 }, { 0x188F, 280 }, { 0x1890, 287 }, { 0x1891, 157 }, { 0x1892, 284 }, { 0x1893, 114 }, { 0x1894, 296 }, { 0x1895, 291 }, { 0x1896, 74095 }, { 0x1897, 74227 }, { 0x1898, 74054 }, { 0x1899, 73922 }, { 0x189A, 73890 }, { 0x189B, 74232 }, { 0x189C, 73900 }, { 0x189D, 73895 }, { 0x189E, 74217 }, { 0x189F, 102343 }, { 0x18A0, 102351 }, { 0x18A1, 102347 }, { 0x18A2, 102339 }, { 0x18A3, 102334 }, { 0x18A4, 102329 }, { 0x18A5, 102324 }, { 0x18A6, 102319 }, { 0x18A7, 35542 }, { 0x18A8, 35506 }, { 0x18A9, 35539 }, { 0x18AA, 35476 }, { 0x18AB, 35479 }, { 0x18AC, 35564 }, { 0x18AD, 35570 }, { 0x18AE, 35551 }, { 0x18AF, 35518 }, { 0x18B0, 35557 }, { 0x18B1, 35527 }, { 0x18B2, 35531 }, { 0x18B3, 35535 }, { 0x18B4, 35493 }, { 0x18B5, 35497 }, { 0x18B6, 35509 }, { 0x18B7, 35545 }, { 0x18B8, 35575 }, { 0x18B9, 35424 }, { 0x18BA, 35414 }, { 0x18BB, 35466 }, { 0x18BC, 35428 }, { 0x18BD, 35471 }, { 0x18BE, 35418 }, { 0x18BF, 35432 }, { 0x18C0, 35453 }, { 0x18C1, 35457 }, { 0x18C2, 35443 }, { 0x18C3, 35447 }, { 0x18C4, 35407 }, { 0x18C5, 35461 }, { 0x18C6, 35398 }, { 0x18C7, 35402 }, { 0x18C8, 35438 }, { 0x18C9, 35490 }, { 0x18CA, 35410 }, { 0x18CB, 35514 }, { 0x18CC, 35484 }, { 0x18CD, 35487 }, { 0x18CE, 35502 }, { 0x18CF, 35522 }, { 0x18D0, 27895 }, { 0x18D1, 28037 }, { 0x18D2, 27519 }, { 0x18D3, 28073 }, { 0x18D4, 27905 }, { 0x18D5, 27910 }, { 0x18D6, 28052 }, { 0x18D7, 27915 }, { 0x18D8, 27549 }, { 0x18D9, 27430 }, { 0x18DA, 27947 }, { 0x18DB, 27952 }, { 0x18DC, 27962 }, { 0x18DD, 27969 }, { 0x18DE, 28103 }, { 0x18DF, 27979 }, { 0x18E0, 28067 }, { 0x18E1, 27733 }, { 0x18E2, 27750 }, { 0x18E3, 27738 }, { 0x18E4, 27524 }, { 0x18E5, 28047 }, { 0x18E6, 27076 }, { 0x18E7, 27323 }, { 0x18E8, 27984 }, { 0x18E9, 28109 }, { 0x18EA, 28091 }, { 0x18EB, 28007 }, { 0x18EC, 28012 }, { 0x18ED, 27745 }, { 0x18EE, 27762 }, { 0x18EF, 27756 }, { 0x18F0, 28017 }, { 0x18F1, 28022 }, { 0x18F2, 28032 }, { 0x18F3, 28057 }, { 0x18F4, 28119 }, { 0x18F5, 27884 }, { 0x18F6, 21202 }, { 0x18F7, 21207 }, { 0x18F8, 21187 }, { 0x18F9, 21197 }, { 0x18FA, 21192 }, { 0x18FB, 74259 }, { 0x18FC, 84695 }, { 0x18FD, 84777 }, { 0x18FE, 84699 }, { 0x18FF, 84785 }, { 0x1900, 84703 }, { 0x1901, 84707 }, { 0x1902, 84790 }, { 0x1903, 84711 }, { 0x1904, 84715 }, { 0x1905, 84725 }, { 0x1906, 84729 }, { 0x1907, 84733 }, { 0x1908, 84737 }, { 0x1909, 84741 }, { 0x190A, 84745 }, { 0x190B, 84795 }, { 0x190C, 84749 }, { 0x190D, 84781 }, { 0x190E, 84753 }, { 0x190F, 84757 }, { 0x1910, 84761 }, { 0x1911, 84765 }, { 0x1912, 84773 }, { 0x1913, 84184 }, { 0x1914, 84495 }, { 0x1915, 84449 }, { 0x1916, 84540 }, { 0x1917, 84188 }, { 0x1918, 84202 }, { 0x1919, 84206 }, { 0x191A, 84471 }, { 0x191B, 84439 }, { 0x191C, 84545 }, { 0x191D, 84214 }, { 0x191E, 84505 }, { 0x191F, 84244 }, { 0x1920, 84281 }, { 0x1921, 84401 }, { 0x1922, 84305 }, { 0x1923, 84444 }, { 0x1924, 84421 }, { 0x1925, 84484 }, { 0x1926, 84309 }, { 0x1927, 84327 }, { 0x1928, 84338 }, { 0x1929, 84617 }, { 0x192A, 84510 }, { 0x192B, 84354 }, { 0x192C, 84393 }, { 0x192D, 84427 }, { 0x192E, 84466 }, { 0x192F, 84453 }, { 0x1930, 84461 }, { 0x1931, 84397 }, { 0x1932, 30920 }, { 0x1933, 30960 }, { 0x1934, 30975 }, { 0x1935, 30980 }, { 0x1936, 22271 }, { 0x1937, 22276 }, { 0x1938, 22266 }, { 0x1939, 22261 }, { 0x193A, 22256 }, { 0x193B, 26923 }, { 0x193C, 24283 }, { 0x193D, 24446 }, { 0x193E, 24706 }, { 0x193F, 25286 }, { 0x1940, 25376 }, { 0x1941, 25750 }, { 0x1942, 25889 }, { 0x1943, 25928 }, { 0x1944, 26039 }, { 0x1945, 26122 }, { 0x1946, 26745 }, { 0x1947, 27404 }, { 0x1948, 84867 }, { 0x1949, 27612 }, { 0x194A, 26908 }, { 0x194B, 27829 }, { 0x194C, 27119 }, { 0x194D, 25757 }, { 0x194E, 27836 }, { 0x194F, 27641 }, { 0x1950, 24302 }, { 0x1951, 24471 }, { 0x1952, 24719 }, { 0x1953, 24786 }, { 0x1954, 25086 }, { 0x1955, 25218 }, { 0x1956, 25293 }, { 0x1957, 25396 }, { 0x1958, 25771 }, { 0x1959, 25915 }, { 0x195A, 26059 }, { 0x195B, 26991 }, { 0x195C, 26464 }, { 0x195D, 26582 }, { 0x195E, 26758 }, { 0x195F, 24192 }, { 0x1960, 27233 }, { 0x1961, 24419 }, { 0x1962, 24627 }, { 0x1963, 27163 }, { 0x1964, 27720 }, { 0x1965, 27272 }, { 0x1966, 24981 }, { 0x1967, 27183 }, { 0x1968, 26998 }, { 0x1969, 26408 }, { 0x196A, 27031 }, { 0x196B, 84551 }, { 0x196C, 84192 }, { 0x196D, 84196 }, { 0x196E, 84409 }, { 0x196F, 84605 }, { 0x1970, 84210 }, { 0x1971, 84589 }, { 0x1972, 84490 }, { 0x1973, 84500 }, { 0x1974, 84228 }, { 0x1975, 84435 }, { 0x1976, 84556 }, { 0x1977, 84561 }, { 0x1978, 84238 }, { 0x1979, 84274 }, { 0x197A, 84259 }, { 0x197B, 84568 }, { 0x197C, 84285 }, { 0x197D, 84515 }, { 0x197E, 84291 }, { 0x197F, 84298 }, { 0x1980, 84573 }, { 0x1981, 84479 }, { 0x1982, 84417 }, { 0x1983, 84321 }, { 0x1984, 84405 }, { 0x1985, 84331 }, { 0x1986, 84342 }, { 0x1987, 84596 }, { 0x1988, 84578 }, { 0x1989, 84358 }, { 0x198A, 84535 }, { 0x198B, 84376 }, { 0x198C, 84386 }, { 0x198D, 84380 }, { 0x198E, 84413 }, { 0x198F, 84475 }, { 0x1990, 91181 }, { 0x1991, 91177 }, { 0x1992, 91136 }, { 0x1993, 92014 }, { 0x1994, 92038 }, { 0x1995, 92036 }, { 0x1996, 92042 }, { 0x1997, 92032 }, { 0x1998, 92056 }, { 0x1999, 92054 }, { 0x199A, 90913 }, { 0x199B, 92034 }, { 0x199C, 92040 }, { 0x199D, 91260 }, { 0x199E, 91302 }, { 0x199F, 91330 }, { 0x19A0, 90562 }, { 0x19A1, 90573 }, { 0x19A2, 90576 }, { 0x19A3, 91028 }, { 0x19A4, 90976 }, { 0x19A5, 90981 }, { 0x19A6, 90986 }, { 0x19A7, 90817 }, { 0x19A8, 91022 }, { 0x19A9, 90996 }, { 0x19AA, 90838 }, { 0x19AB, 91036 }, { 0x19AC, 90853 }, { 0x19AD, 90858 }, { 0x19AE, 91042 }, { 0x19AF, 91048 }, { 0x19B0, 90877 }, { 0x19B1, 91054 }, { 0x19B2, 91060 }, { 0x19B3, 90919 }, { 0x19B4, 90925 }, { 0x19B5, 91006 }, { 0x19B6, 90971 }, { 0x19B7, 91012 }, { 0x19B8, 90807 }, { 0x19B9, 91001 }, { 0x19BA, 91017 }, { 0x19BB, 90833 }, { 0x19BC, 90863 }, { 0x19BD, 90887 }, { 0x19BE, 90903 }, { 0x19BF, 90991 }, { 0x19C0, 90940 }, { 0x19C1, 90961 }, { 0x19C2, 90800 }, { 0x19C3, 90896 }, { 0x19C4, 90949 }, { 0x19C5, 90565 }, { 0x19C6, 91647 }, { 0x19C7, 91237 }, { 0x19C8, 91166 }, { 0x19C9, 90681 }, { 0x19CA, 91108 }, { 0x19CB, 28245 }, { 0x19CC, 24059 }, { 0x19CD, 28422 }, { 0x19CE, 24256 }, { 0x19CF, 28429 }, { 0x19D0, 24263 }, { 0x19D1, 28442 }, { 0x19D2, 24276 }, { 0x19D3, 28514 }, { 0x19D4, 24368 }, { 0x19D5, 28532 }, { 0x19D6, 24393 }, { 0x19D7, 28539 }, { 0x19D8, 24400 }, { 0x19D9, 28552 }, { 0x19DA, 24427 }, { 0x19DB, 28595 }, { 0x19DC, 24465 }, { 0x19DD, 28601 }, { 0x19DE, 24478 }, { 0x19DF, 28691 }, { 0x19E0, 24574 }, { 0x19E1, 28683 }, { 0x19E2, 24566 }, { 0x19E3, 28786 }, { 0x19E4, 24682 }, { 0x19E5, 28663 }, { 0x19E6, 24546 }, { 0x19E7, 28717 }, { 0x19E8, 24600 }, { 0x19E9, 28797 }, { 0x19EA, 24693 }, { 0x19EB, 28851 }, { 0x19EC, 24761 }, { 0x19ED, 28886 }, { 0x19EE, 24803 }, { 0x19EF, 28893 }, { 0x19F0, 24810 }, { 0x19F1, 28937 }, { 0x19F2, 24868 }, { 0x19F3, 28925 }, { 0x19F4, 24849 }, { 0x19F5, 28906 }, { 0x19F6, 24830 }, { 0x19F7, 29004 }, { 0x19F8, 24928 }, { 0x19F9, 29049 }, { 0x19FA, 24973 }, { 0x19FB, 29109 }, { 0x19FC, 25046 }, { 0x19FD, 29089 }, { 0x19FE, 25026 }, { 0x19FF, 29102 }, { 0x1A00, 25039 }, { 0x1A01, 29172 }, { 0x1A02, 25116 }, { 0x1A03, 29179 }, { 0x1A04, 25123 }, { 0x1A05, 29201 }, { 0x1A06, 25151 }, { 0x1A07, 29261 }, { 0x1A08, 25249 }, { 0x1A09, 29292 }, { 0x1A0A, 25280 }, { 0x1A0B, 29272 }, { 0x1A0C, 25260 }, { 0x1A0D, 29279 }, { 0x1A0E, 25267 }, { 0x1A0F, 29302 }, { 0x1A10, 25310 }, { 0x1A11, 29309 }, { 0x1A12, 25317 }, { 0x1A13, 29323 }, { 0x1A14, 25337 }, { 0x1A15, 29389 }, { 0x1A16, 25416 }, { 0x1A17, 29522 }, { 0x1A18, 25570 }, { 0x1A19, 29538 }, { 0x1A1A, 25586 }, { 0x1A1B, 29574 }, { 0x1A1C, 25622 }, { 0x1A1D, 29566 }, { 0x1A1E, 25614 }, { 0x1A1F, 29703 }, { 0x1A20, 25744 }, { 0x1A21, 29690 }, { 0x1A22, 25731 }, { 0x1A23, 29759 }, { 0x1A24, 25827 }, { 0x1A25, 29766 }, { 0x1A26, 25834 }, { 0x1A27, 29773 }, { 0x1A28, 25841 }, { 0x1A29, 29782 }, { 0x1A2A, 25850 }, { 0x1A2B, 29849 }, { 0x1A2C, 25965 }, { 0x1A2D, 29856 }, { 0x1A2E, 25972 }, { 0x1A2F, 29879 }, { 0x1A30, 26001 }, { 0x1A31, 29894 }, { 0x1A32, 26016 }, { 0x1A33, 29863 }, { 0x1A34, 25979 }, { 0x1A35, 29940 }, { 0x1A36, 26076 }, { 0x1A37, 29947 }, { 0x1A38, 26083 }, { 0x1A39, 29960 }, { 0x1A3A, 26102 }, { 0x1A3B, 30006 }, { 0x1A3C, 26168 }, { 0x1A3D, 30215 }, { 0x1A3E, 26401 }, { 0x1A3F, 30129 }, { 0x1A40, 26315 }, { 0x1A41, 30228 }, { 0x1A42, 26421 }, { 0x1A43, 30121 }, { 0x1A44, 26307 }, { 0x1A45, 30156 }, { 0x1A46, 26342 }, { 0x1A47, 30252 }, { 0x1A48, 26458 }, { 0x1A49, 30239 }, { 0x1A4A, 26432 }, { 0x1A4B, 30295 }, { 0x1A4C, 26515 }, { 0x1A4D, 30289 }, { 0x1A4E, 26509 }, { 0x1A4F, 30301 }, { 0x1A50, 26521 }, { 0x1A51, 30269 }, { 0x1A52, 26482 }, { 0x1A53, 30276 }, { 0x1A54, 26489 }, { 0x1A55, 30317 }, { 0x1A56, 26537 }, { 0x1A57, 30324 }, { 0x1A58, 26589 }, { 0x1A59, 30334 }, { 0x1A5A, 26599 }, { 0x1A5B, 30471 }, { 0x1A5C, 26778 }, { 0x1A5D, 30420 }, { 0x1A5E, 26700 }, { 0x1A5F, 30433 }, { 0x1A60, 26719 }, { 0x1A61, 24823 }, { 0x1A62, 26155 }, { 0x1A63, 26502 }, { 0x1A64, 26632 }, { 0x1A65, 24132 }, { 0x1A66, 27134 }, { 0x1A67, 27150 }, { 0x1A68, 27142 }, { 0x1A69, 30684 }, { 0x1A6A, 27240 }, { 0x1A6B, 28215 }, { 0x1A6C, 24029 }, { 0x1A6D, 28222 }, { 0x1A6E, 24036 }, { 0x1A6F, 28394 }, { 0x1A70, 24223 }, { 0x1A71, 28402 }, { 0x1A72, 24231 }, { 0x1A73, 28385 }, { 0x1A74, 24214 }, { 0x1A75, 28410 }, { 0x1A76, 24239 }, { 0x1A77, 28376 }, { 0x1A78, 24205 }, { 0x1A79, 28282 }, { 0x1A7A, 24096 }, { 0x1A7B, 28290 }, { 0x1A7C, 24104 }, { 0x1A7D, 28273 }, { 0x1A7E, 24087 }, { 0x1A7F, 28298 }, { 0x1A80, 24112 }, { 0x1A81, 28264 }, { 0x1A82, 24078 }, { 0x1A83, 28619 }, { 0x1A84, 24496 }, { 0x1A85, 28626 }, { 0x1A86, 24503 }, { 0x1A87, 28657 }, { 0x1A88, 24540 }, { 0x1A89, 28762 }, { 0x1A8A, 24658 }, { 0x1A8B, 28770 }, { 0x1A8C, 24666 }, { 0x1A8D, 28753 }, { 0x1A8E, 24649 }, { 0x1A8F, 28778 }, { 0x1A90, 24674 }, { 0x1A91, 28744 }, { 0x1A92, 24640 }, { 0x1A93, 28967 }, { 0x1A94, 24891 }, { 0x1A95, 28960 }, { 0x1A96, 24884 }, { 0x1A97, 29416 }, { 0x1A98, 25456 }, { 0x1A99, 29423 }, { 0x1A9A, 25471 }, { 0x1A9B, 29662 }, { 0x1A9C, 25703 }, { 0x1A9D, 29670 }, { 0x1A9E, 25711 }, { 0x1A9F, 29653 }, { 0x1AA0, 25694 }, { 0x1AA1, 29678 }, { 0x1AA2, 25719 }, { 0x1AA3, 29644 }, { 0x1AA4, 25685 }, { 0x1AA5, 29454 }, { 0x1AA6, 25502 }, { 0x1AA7, 29462 }, { 0x1AA8, 25510 }, { 0x1AA9, 29445 }, { 0x1AAA, 25493 }, { 0x1AAB, 29470 }, { 0x1AAC, 25518 }, { 0x1AAD, 29436 }, { 0x1AAE, 25484 }, { 0x1AAF, 30022 }, { 0x1AB0, 26193 }, { 0x1AB1, 30029 }, { 0x1AB2, 26200 }, { 0x1AB3, 30060 }, { 0x1AB4, 26231 }, { 0x1AB5, 30068 }, { 0x1AB6, 26239 }, { 0x1AB7, 30051 }, { 0x1AB8, 26222 }, { 0x1AB9, 30076 }, { 0x1ABA, 26247 }, { 0x1ABB, 30042 }, { 0x1ABC, 26213 }, { 0x1ABD, 30373 }, { 0x1ABE, 26645 }, { 0x1ABF, 30341 }, { 0x1AC0, 26606 }, { 0x1AC1, 30354 }, { 0x1AC2, 26619 }, { 0x1AC3, 30379 }, { 0x1AC4, 26659 }, { 0x1AC5, 30882 }, { 0x1AC6, 27814 }, { 0x1AC7, 30877 }, { 0x1AC8, 27809 }, { 0x1AC9, 30361 }, { 0x1ACA, 26626 }, { 0x1ACB, 20381 }, { 0x1ACC, 20313 }, { 0x1ACD, 20405 }, { 0x1ACE, 20337 }, { 0x1ACF, 20387 }, { 0x1AD0, 20319 }, { 0x1AD1, 20423 }, { 0x1AD2, 20355 }, { 0x1AD3, 21670 }, { 0x1AD4, 21602 }, { 0x1AD5, 21694 }, { 0x1AD6, 21626 }, { 0x1AD7, 21676 }, { 0x1AD8, 21608 }, { 0x1AD9, 21712 }, { 0x1ADA, 21644 }, { 0x1ADB, 20782 }, { 0x1ADC, 20760 }, { 0x1ADD, 20796 }, { 0x1ADE, 20774 }, { 0x1ADF, 20788 }, { 0x1AE0, 20766 }, { 0x1AE1, 21993 }, { 0x1AE2, 21971 }, { 0x1AE3, 22007 }, { 0x1AE4, 21985 }, { 0x1AE5, 21999 }, { 0x1AE6, 21977 }, { 0x1AE7, 20001 }, { 0x1AE8, 19933 }, { 0x1AE9, 20025 }, { 0x1AEA, 19957 }, { 0x1AEB, 20007 }, { 0x1AEC, 19939 }, { 0x1AED, 20043 }, { 0x1AEE, 19975 }, { 0x1AEF, 21360 }, { 0x1AF0, 21292 }, { 0x1AF1, 21384 }, { 0x1AF2, 21316 }, { 0x1AF3, 21366 }, { 0x1AF4, 21298 }, { 0x1AF5, 21402 }, { 0x1AF6, 21334 }, { 0x1AF7, 20193 }, { 0x1AF8, 20163 }, { 0x1AF9, 20207 }, { 0x1AFA, 20177 }, { 0x1AFB, 20199 }, { 0x1AFC, 20169 }, { 0x1AFD, 20215 }, { 0x1AFE, 20185 }, { 0x1AFF, 21528 }, { 0x1B00, 21498 }, { 0x1B01, 21542 }, { 0x1B02, 21512 }, { 0x1B03, 21534 }, { 0x1B04, 21504 }, { 0x1B05, 21550 }, { 0x1B06, 21520 }, { 0x1B07, 20848 }, { 0x1B08, 20826 }, { 0x1B09, 20862 }, { 0x1B0A, 20840 }, { 0x1B0B, 20854 }, { 0x1B0C, 20832 }, { 0x1B0D, 22059 }, { 0x1B0E, 22037 }, { 0x1B0F, 22073 }, { 0x1B10, 22051 }, { 0x1B11, 22065 }, { 0x1B12, 22043 }, { 0x1B13, 20922 }, { 0x1B14, 20892 }, { 0x1B15, 20936 }, { 0x1B16, 20906 }, { 0x1B17, 20928 }, { 0x1B18, 20898 }, { 0x1B19, 20944 }, { 0x1B1A, 20914 }, { 0x1B1B, 22103 }, { 0x1B1C, 22117 }, { 0x1B1D, 22109 }, { 0x1B1E, 22125 }, { 0x1B1F, 20612 }, { 0x1B20, 20544 }, { 0x1B21, 20636 }, { 0x1B22, 20568 }, { 0x1B23, 20618 }, { 0x1B24, 20550 }, { 0x1B25, 20654 }, { 0x1B26, 20586 }, { 0x1B27, 21862 }, { 0x1B28, 21794 }, { 0x1B29, 21886 }, { 0x1B2A, 21818 }, { 0x1B2B, 21868 }, { 0x1B2C, 21800 }, { 0x1B2D, 21904 }, { 0x1B2E, 21836 }, { 0x1B2F, 20455 }, { 0x1B30, 20299 }, { 0x1B31, 20810 }, { 0x1B32, 20754 }, { 0x1B33, 20075 }, { 0x1B34, 19919 }, { 0x1B35, 20229 }, { 0x1B36, 20157 }, { 0x1B37, 20876 }, { 0x1B38, 20820 }, { 0x1B39, 20958 }, { 0x1B3A, 20886 }, { 0x1B3B, 20686 }, { 0x1B3C, 20530 }, { 0x1B3D, 20441 }, { 0x1B3E, 20373 }, { 0x1B3F, 20413 }, { 0x1B40, 20345 }, { 0x1B41, 20395 }, { 0x1B42, 20327 }, { 0x1B43, 20431 }, { 0x1B44, 20363 }, { 0x1B45, 21730 }, { 0x1B46, 21662 }, { 0x1B47, 21702 }, { 0x1B48, 21634 }, { 0x1B49, 21684 }, { 0x1B4A, 21616 }, { 0x1B4B, 21720 }, { 0x1B4C, 21652 }, { 0x1B4D, 20061 }, { 0x1B4E, 19993 }, { 0x1B4F, 20033 }, { 0x1B50, 19965 }, { 0x1B51, 20015 }, { 0x1B52, 19947 }, { 0x1B53, 20051 }, { 0x1B54, 19983 }, { 0x1B55, 21420 }, { 0x1B56, 21352 }, { 0x1B57, 21392 }, { 0x1B58, 21324 }, { 0x1B59, 21374 }, { 0x1B5A, 21306 }, { 0x1B5B, 21410 }, { 0x1B5C, 21342 }, { 0x1B5D, 20672 }, { 0x1B5E, 20604 }, { 0x1B5F, 20644 }, { 0x1B60, 20576 }, { 0x1B61, 20626 }, { 0x1B62, 20558 }, { 0x1B63, 20662 }, { 0x1B64, 20594 }, { 0x1B65, 21922 }, { 0x1B66, 21854 }, { 0x1B67, 21894 }, { 0x1B68, 21826 }, { 0x1B69, 21876 }, { 0x1B6A, 21808 }, { 0x1B6B, 21912 }, { 0x1B6C, 21844 }, { 0x1B6D, 20475 }, { 0x1B6E, 20469 }, { 0x1B6F, 20461 }, { 0x1B70, 20495 }, { 0x1B71, 20305 }, { 0x1B72, 20481 }, { 0x1B73, 20487 }, { 0x1B74, 21756 }, { 0x1B75, 21750 }, { 0x1B76, 21744 }, { 0x1B77, 21596 }, { 0x1B78, 21762 }, { 0x1B79, 22189 }, { 0x1B7A, 22694 }, { 0x1B7B, 19875 }, { 0x1B7C, 22542 }, { 0x1B7D, 22246 }, { 0x1B7E, 20081 }, { 0x1B7F, 20103 }, { 0x1B80, 19925 }, { 0x1B81, 20089 }, { 0x1B82, 20095 }, { 0x1B83, 22021 }, { 0x1B84, 21965 }, { 0x1B85, 21434 }, { 0x1B86, 21286 }, { 0x1B87, 21440 }, { 0x1B88, 19881 }, { 0x1B89, 19877 }, { 0x1B8A, 19885 }, { 0x1B8B, 20241 }, { 0x1B8C, 20235 }, { 0x1B8D, 20269 }, { 0x1B8E, 20253 }, { 0x1B8F, 20285 }, { 0x1B90, 20277 }, { 0x1B91, 21576 }, { 0x1B92, 21570 }, { 0x1B93, 21564 }, { 0x1B94, 21492 }, { 0x1B95, 19857 }, { 0x1B96, 19853 }, { 0x1B97, 19861 }, { 0x1B98, 20970 }, { 0x1B99, 20964 }, { 0x1B9A, 20998 }, { 0x1B9B, 20982 }, { 0x1B9C, 20127 }, { 0x1B9D, 20121 }, { 0x1B9E, 21014 }, { 0x1B9F, 21006 }, { 0x1BA0, 22151 }, { 0x1BA1, 22145 }, { 0x1BA2, 22139 }, { 0x1BA3, 22097 }, { 0x1BA4, 21458 }, { 0x1BA5, 22242 }, { 0x1BA6, 22238 }, { 0x1BA7, 21051 }, { 0x1BA8, 20692 }, { 0x1BA9, 20714 }, { 0x1BAA, 20536 }, { 0x1BAB, 20700 }, { 0x1BAC, 20706 }, { 0x1BAD, 22087 }, { 0x1BAE, 22031 }, { 0x1BAF, 21936 }, { 0x1BB0, 21788 }, { 0x1BB1, 21942 }, { 0x1BB2, 19843 }, { 0x1BB3, 19851 }, { 0x1BB4, 81 }, { 0x1BB5, 75 }, { 0x1BB6, 83 }, { 0x1BB7, 77 }, { 0x1BB8, 114884 }, { 0x1BB9, 105582 }, { 0x1BBA, 105488 }, { 0x1BBB, 46300 }, { 0x1BBC, 106224 }, { 0x1BBD, 15255 }, { 0x1BBE, 12710 }, { 0x1BBF, 15365 }, { 0x1BC0, 15375 }, { 0x1BC1, 15368 }, { 0x1BC2, 115299 }, { 0x1BC3, 115855 }, { 0x1BC4, 48422 }, { 0x1BC5, 114616 }, { 0x1BC6, 46298 }, { 0x1BC7, 79 }, { 0x1BC8, 73 }, { 0x1BC9, 104115 }, { 0x1BCA, 46201 }, { 0x1BCB, 46049 }, { 0x1BCC, 13020 }, { 0x1BCD, 33708 }, { 0x1BCE, 53794 }, { 0x1BCF, 53808 }, { 0x1BD0, 13004 }, { 0x1BD1, 33692 }, { 0x1BD2, 46074 }, { 0x1BD3, 46216 }, { 0x1BD4, 45652 }, { 0x1BD5, 46091 }, { 0x1BD6, 44374 }, { 0x1BD7, 105500 }, { 0x1BD8, 8931 }, { 0x1BD9, 10880 }, { 0x1BDA, 104149 }, { 0x1BDB, 105586 }, { 0x1BDC, 13133 }, { 0x1BDD, 101747 }, { 0x1BDE, 115305 }, { 0x1BDF, 115861 }, { 0x1BE0, 9277 }, { 0x1BE1, 115303 }, { 0x1BE2, 115859 }, { 0x1BE3, 52784 }, { 0x1BE4, 9266 }, { 0x1BE5, 9260 }, { 0x1BE6, 33530 }, { 0x1BE7, 46078 }, { 0x1BE8, 57153 }, { 0x1BE9, 86079 }, { 0x1BEA, 86086 }, { 0x1BEB, 86116 }, { 0x1BEC, 19327 }, { 0x1BED, 53798 }, { 0x1BEE, 53803 }, { 0x1BEF, 101808 }, { 0x1BF0, 46207 }, { 0x1BF1, 106189 }, { 0x1BF2, 85403 }, { 0x1BF3, 86809 }, { 0x1BF4, 90479 }, { 0x1BF5, 19328 }, { 0x1BF6, 69130 }, { 0x1BF7, 48426 }, { 0x1BF8, 80612 }, { 0x1BF9, 13046 }, { 0x1BFA, 33734 }, { 0x1BFB, 46174 }, { 0x1BFC, 85916 }, { 0x1BFD, 105579 }, { 0x1BFE, 86621 }, { 0x1BFF, 86119 }, { 0x1C00, 19122 }, { 0x1C01, 19146 }, { 0x1C02, 6218 }, { 0x1C03, 86133 }, { 0x1C04, 19437 }, { 0x1C05, 10919 }, { 0x1C06, 103200 }, { 0x1C07, 34731 }, { 0x1C08, 82384 }, { 0x1C09, 46318 }, { 0x1C0A, 35186 }, { 0x1C0B, 101761 }, { 0x1C0C, 12649 }, { 0x1C0D, 12632 }, { 0x1C0E, 10883 }, { 0x1C0F, 12646 }, { 0x1C10, 46030 }, { 0x1C11, 86701 }, { 0x1C12, 86837 }, { 0x1C13, 52409 }, { 0x1C14, 15359 }, { 0x1C15, 80622 }, { 0x1C16, 99530 }, { 0x1C17, 99532 }, { 0x1C18, 99528 }, { 0x1C19, 115301 }, { 0x1C1A, 115857 }, { 0x1C1B, 19745 }, { 0x1C1C, 9274 }, { 0x1C1D, 61420 }, { 0x1C1E, 68750 }, { 0x1C1F, 61416 }, { 0x1C20, 68746 }, { 0x1C21, 84990 }, { 0x1C22, 64474 }, { 0x1C23, 109403 }, { 0x1C24, 109407 }, { 0x1C25, 109393 }, { 0x1C26, 109391 }, { 0x1C27, 109387 }, { 0x1C28, 109422 }, { 0x1C29, 109405 }, { 0x1C2A, 109398 }, { 0x1C2B, 109400 }, { 0x1C2C, 109417 }, { 0x1C2D, 109426 }, { 0x1C2E, 109395 }, { 0x1C2F, 109419 }, { 0x1C30, 109412 }, { 0x1C31, 102090 }, { 0x1C32, 102072 }, { 0x1C33, 102076 }, { 0x1C34, 102101 }, { 0x1C35, 102080 }, { 0x1C36, 102078 }, { 0x1C37, 102074 }, { 0x1C38, 102099 }, { 0x1C39, 102092 }, { 0x1C3A, 102085 }, { 0x1C3B, 102087 }, { 0x1C3C, 102094 }, { 0x1C3D, 102103 }, { 0x1C3E, 102082 }, { 0x1C3F, 102096 }, { 0x1C40, 30905 }, { 0x1C41, 30910 }, { 0x1C42, 30950 }, { 0x1C43, 30985 }, { 0x1C44, 30990 }, { 0x1C45, 30915 }, { 0x1C46, 30930 }, { 0x1C47, 30935 }, { 0x1C48, 30940 }, { 0x1C49, 30945 }, { 0x1C4A, 30955 }, { 0x1C4B, 30965 }, { 0x1C4C, 30970 }, { 0x1C4D, 115044 }, { 0x1C4E, 19455 }, { 0x1C4F, 73272 }, { 0x1C50, 46329 }, { 0x1C51, 13160 }, { 0x1C52, 13898 }, { 0x1C53, 32615 }, { 0x1C54, 53468 }, { 0x1C55, 34306 }, { 0x1C56, 11839 }, { 0x1C57, 6876 }, { 0x1C58, 12491 }, { 0x1C59, 12520 }, { 0x1C5A, 5955 }, { 0x1C5B, 57204 }, { 0x1C5C, 60888 }, { 0x1C5D, 46335 }, { 0x1C5E, 14540 }, { 0x1C5F, 61338 }, { 0x1C60, 57831 }, { 0x1C61, 61409 }, { 0x1C62, 12140 }, { 0x1C63, 31321 }, { 0x1C64, 86223 }, { 0x1C65, 35175 }, { 0x1C66, 48428 }, { 0x1C67, 68400 }, { 0x1C68, 52788 }, { 0x1C69, 31430 }, { 0x1C6A, 33962 }, { 0x1C6B, 12738 }, { 0x1C6C, 90677 }, { 0x1C6D, 91097 }, { 0x1C6E, 90702 }, { 0x1C6F, 91131 }, { 0x1C70, 92048 }, { 0x1C71, 91710 }, { 0x1C72, 90659 }, { 0x1C73, 91089 }, { 0x1C74, 90721 }, { 0x1C75, 91706 }, { 0x1C76, 92044 }, { 0x1C77, 91139 }, { 0x1C78, 90628 }, { 0x1C79, 91722 }, { 0x1C7A, 91735 }, { 0x1C7B, 91743 }, { 0x1C7C, 91725 }, { 0x1C7D, 90667 }, { 0x1C7E, 91732 }, { 0x1C7F, 91729 }, { 0x1C80, 91738 }, { 0x1C81, 91392 }, { 0x1C82, 91255 }, { 0x1C83, 91333 }, { 0x1C84, 91316 }, { 0x1C85, 90724 }, { 0x1C86, 91746 }, { 0x1C87, 90689 }, { 0x1C88, 92008 }, { 0x1C89, 91750 }, { 0x1C8A, 90663 }, { 0x1C8B, 91093 }, { 0x1C8C, 91403 }, { 0x1C8D, 57822 }, { 0x1C8E, 86913 }, { 0x1C8F, 114998 }, { 0x1C90, 45675 }, { 0x1C91, 44537 }, { 0x1C92, 12136 }, { 0x1C93, 12123 }, { 0x1C94, 19732 }, { 0x1C95, 65235 }, { 0x1C96, 45677 }, { 0x1C97, 53739 }, { 0x1C98, 53757 }, { 0x1C99, 109743 }, { 0x1C9A, 115001 }, { 0x1C9B, 53472 }, { 0x1C9C, 53474 }, { 0x1C9D, 53760 }, { 0x1C9E, 109746 }, { 0x1C9F, 53763 }, { 0x1CA0, 53742 }, { 0x1CA1, 0 }, { 0x1CA2, 115004 }, { 0x1CA3, 52846 }, { 0x1CA4, 34587 }, { 0x1CA5, 53769 }, { 0x1CA6, 115007 }, { 0x1CA7, 115010 }, { 0x1CA8, 53772 }, { 0x1CA9, 109749 }, { 0x1CAA, 115013 }, { 0x1CAB, 114618 }, { 0x1CAC, 86057 }, { 0x1CAD, 65239 }, { 0x1CAE, 102363 }, { 0x1CAF, 35294 }, { 0x1CB0, 86810 }, { 0x1CB1, 115016 }, { 0x1CB2, 33497 }, { 0x1CB3, 7185 }, { 0x1CB4, 82375 }, { 0x1CB5, 109752 }, { 0x1CB6, 57231 }, { 0x1CB7, 49302 }, { 0x1CB8, 68760 }, { 0x1CB9, 53748 }, { 0x1CBA, 109740 }, { 0x1CBB, 98559 }, { 0x1CBC, 53736 }, { 0x1CBD, 53751 }, { 0x1CBE, 53754 }, { 0x1CBF, 57265 }, { 0x1CC0, 53766 }, { 0x1CC1, 53745 }, { 0x1CC2, 12039 }, { 0x1CC3, 4447 }, { 0x1CC4, 19775 }, { 0x1CC5, 19494 }, { 0x1CC6, 106172 }, { 0x1CC7, 65225 }, { 0x1CC8, 98589 }, { 0x1CC9, 114972 }, { 0x1CCA, 114975 }, { 0x1CCB, 115022 }, { 0x1CCC, 115019 }, { 0x1CCD, 114969 }, { 0x1CCE, 57272 }, { 0x1CCF, 57276 }, { 0x1CD0, 86135 }, { 0x1CD1, 57280 }, { 0x1CD2, 114994 }, { 0x1CD3, 114978 }, { 0x1CD4, 114982 }, { 0x1CD5, 114986 }, { 0x1CD6, 114990 }, { 0x1CD7, 85852 }, { 0x1CD8, 57268 }, { 0x1CD9, 9264 }, { 0x1CDA, 109687 }, { 0x1CDB, 57246 }, { 0x1CDC, 54836 }, { 0x1CDD, 57331 }, { 0x1CDE, 57307 }, { 0x1CDF, 57315 }, { 0x1CE0, 57319 }, { 0x1CE1, 57339 }, { 0x1CE2, 57303 }, { 0x1CE3, 57335 }, { 0x1CE4, 57363 }, { 0x1CE5, 57351 }, { 0x1CE6, 57311 }, { 0x1CE7, 57343 }, { 0x1CE8, 57323 }, { 0x1CE9, 57367 }, { 0x1CEA, 57347 }, { 0x1CEB, 57359 }, { 0x1CEC, 80614 }, { 0x1CED, 33842 }, { 0x1CEE, 33879 }, { 0x1CEF, 33917 }, { 0x1CF0, 33893 }, { 0x1CF1, 33882 }, { 0x1CF2, 33864 }, { 0x1CF3, 33914 }, { 0x1CF4, 33899 }, { 0x1CF5, 33896 }, { 0x1CF6, 33872 }, { 0x1CF7, 33920 }, { 0x1CF8, 33923 }, { 0x1CF9, 33902 }, { 0x1CFA, 33845 }, { 0x1CFB, 33885 }, { 0x1CFC, 33854 }, { 0x1CFD, 34419 }, { 0x1CFE, 34441 }, { 0x1CFF, 34474 }, { 0x1D00, 34454 }, { 0x1D01, 34445 }, { 0x1D02, 34433 }, { 0x1D03, 34470 }, { 0x1D04, 34462 }, { 0x1D05, 34458 }, { 0x1D06, 34437 }, { 0x1D07, 34478 }, { 0x1D08, 34482 }, { 0x1D09, 34466 }, { 0x1D0A, 34423 }, { 0x1D0B, 34449 }, { 0x1D0C, 34428 }, { 0x1D0D, 33858 }, { 0x1D0E, 33889 }, { 0x1D0F, 33875 }, { 0x1D10, 33926 }, { 0x1D11, 27682 }, { 0x1D12, 33867 }, { 0x1D13, 33905 }, { 0x1D14, 33910 }, { 0x1D15, 33849 }, { 0x1D16, 57355 }, { 0x1D17, 57225 }, { 0x1D18, 57228 }, { 0x1D19, 99767 }, { 0x1D1A, 68412 }, { 0x1D1B, 104668 }, { 0x1D1C, 98273 }, { 0x1D1D, 12886 }, { 0x1D1E, 345 }, { 0x1D1F, 32701 }, { 0x1D20, 32627 }, { 0x1D21, 34590 }, { 0x1D22, 34656 }, { 0x1D23, 99880 }, { 0x1D24, 104777 }, { 0x1D25, 99764 }, { 0x1D26, 104665 }, { 0x1D27, 99760 }, { 0x1D28, 68408 }, { 0x1D29, 104661 }, { 0x1D2A, 98269 }, { 0x1D2B, 99826 }, { 0x1D2C, 104718 }, { 0x1D2D, 99787 }, { 0x1D2E, 68418 }, { 0x1D2F, 104679 }, { 0x1D30, 98279 }, { 0x1D31, 348 }, { 0x1D32, 99813 }, { 0x1D33, 104705 }, { 0x1D34, 99817 }, { 0x1D35, 104709 }, { 0x1D36, 12882 }, { 0x1D37, 12896 }, { 0x1D38, 98388 }, { 0x1D39, 68422 }, { 0x1D3A, 68427 }, { 0x1D3B, 98283 }, { 0x1D3C, 98288 }, { 0x1D3D, 104755 }, { 0x1D3E, 98311 }, { 0x1D3F, 114892 }, { 0x1D40, 90497 }, { 0x1D41, 32704 }, { 0x1D42, 99773 }, { 0x1D43, 114896 }, { 0x1D44, 90501 }, { 0x1D45, 100088 }, { 0x1D46, 100093 }, { 0x1D47, 68621 }, { 0x1D48, 68616 }, { 0x1D49, 104995 }, { 0x1D4A, 105000 }, { 0x1D4B, 98446 }, { 0x1D4C, 98441 }, { 0x1D4D, 104690 }, { 0x1D4E, 68476 }, { 0x1D4F, 99798 }, { 0x1D50, 99994 }, { 0x1D51, 68558 }, { 0x1D52, 104901 }, { 0x1D53, 98380 }, { 0x1D54, 100006 }, { 0x1D55, 104913 }, { 0x1D56, 99980 }, { 0x1D57, 12925 }, { 0x1D58, 104887 }, { 0x1D59, 99972 }, { 0x1D5A, 68555 }, { 0x1D5B, 104879 }, { 0x1D5C, 98377 }, { 0x1D5D, 12921 }, { 0x1D5E, 361 }, { 0x1D5F, 32742 }, { 0x1D60, 32664 }, { 0x1D61, 34625 }, { 0x1D62, 34679 }, { 0x1D63, 100003 }, { 0x1D64, 104910 }, { 0x1D65, 100101 }, { 0x1D66, 105008 }, { 0x1D67, 68450 }, { 0x1D68, 98316 }, { 0x1D69, 99965 }, { 0x1D6A, 68552 }, { 0x1D6B, 104872 }, { 0x1D6C, 98374 }, { 0x1D6D, 99769 }, { 0x1D6E, 104670 }, { 0x1D6F, 99956 }, { 0x1D70, 68497 }, { 0x1D71, 104853 }, { 0x1D72, 98363 }, { 0x1D73, 68521 }, { 0x1D74, 68500 }, { 0x1D75, 68513 }, { 0x1D76, 68505 }, { 0x1D77, 68540 }, { 0x1D78, 68544 }, { 0x1D79, 104856 }, { 0x1D7A, 32710 }, { 0x1D7B, 34593 }, { 0x1D7C, 357 }, { 0x1D7D, 33605 }, { 0x1D7E, 98342 }, { 0x1D7F, 35225 }, { 0x1D80, 99889 }, { 0x1D81, 104786 }, { 0x1D82, 12901 }, { 0x1D83, 99868 }, { 0x1D84, 104765 }, { 0x1D85, 12889 }, { 0x1D86, 100181 }, { 0x1D87, 105088 }, { 0x1D88, 12942 }, { 0x1D89, 5929 }, { 0x1D8A, 103203 }, { 0x1D8B, 64639 }, { 0x1D8C, 35181 }, { 0x1D8D, 35177 }, { 0x1D8E, 19660 }, { 0x1D8F, 99525 }, { 0x1D90, 32614 }, { 0x1D91, 61011 }, { 0x1D92, 7088 }, { 0x1D93, 34500 }, { 0x1D94, 73147 }, { 0x1D95, 12456 }, { 0x1D96, 34529 }, { 0x1D97, 5915 }, { 0x1D98, 32606 }, { 0x1D99, 32608 }, { 0x1D9A, 32610 }, { 0x1D9B, 32506 }, { 0x1D9C, 115307 }, { 0x1D9D, 5898 }, { 0x1D9E, 75219 }, { 0x1D9F, 9297 }, { 0x1DA0, 69128 }, { 0x1DA1, 14628 }, { 0x1DA2, 44375 }, { 0x1DA3, 54167 }, { 0x1DA4, 12427 }, { 0x1DA5, 46327 }, { 0x1DA6, 114854 }, { 0x1DA7, 82329 }, { 0x1DA8, 33571 }, { 0x1DA9, 15720 }, { 0x1DAA, 83225 }, { 0x1DAB, 102058 }, { 0x1DAC, 60878 }, { 0x1DAD, 12446 }, { 0x1DAE, 85405 }, { 0x1DAF, 7133 }, { 0x1DB0, 61777 }, { 0x1DB1, 61745 }, { 0x1DB2, 109940 }, { 0x1DB3, 35299 }, { 0x1DB4, 82335 }, { 0x1DB5, 46170 }, { 0x1DB6, 57167 }, { 0x1DB7, 60132 }, { 0x1DB8, 67101 }, { 0x1DB9, 57297 }, { 0x1DBA, 90522 }, { 0x1DBB, 90519 }, { 0x1DBC, 114908 }, { 0x1DBD, 102637 }, { 0x1DBE, 58006 }, { 0x1DBF, 33538 }, { 0x1DC0, 104636 }, { 0x1DC1, 5902 }, { 0x1DC2, 46287 }, { 0x1DC3, 99001 }, { 0x1DC4, 104114 }, { 0x1DC5, 35254 }, { 0x1DC6, 86081 }, { 0x1DC7, 82378 }, { 0x1DC8, 14747 }, { 0x1DC9, 57816 }, { 0x1DCA, 7102 }, { 0x1DCB, 32532 }, { 0x1DCC, 115867 }, { 0x1DCD, 7146 }, { 0x1DCE, 114956 }, { 0x1DCF, 114945 }, { 0x1DD0, 64461 }, { 0x1DD1, 36295 }, { 0x1DD2, 7104 }, { 0x1DD3, 36290 }, { 0x1DD4, 57155 }, { 0x1DD5, 4072 }, { 0x1DD6, 103693 }, { 0x1DD7, 115049 }, { 0x1DD8, 103689 }, { 0x1DD9, 103182 }, { 0x1DDA, 115046 }, { 0x1DDB, 114959 }, { 0x1DDC, 23187 }, { 0x1DDD, 19457 }, { 0x1DDE, 46285 }, { 0x1DDF, 14617 }, { 0x1DE0, 14623 }, { 0x1DE1, 105537 }, { 0x1DE2, 98561 }, { 0x1DE3, 105575 }, { 0x1DE4, 14914 }, { 0x1DE5, 19497 }, { 0x1DE6, 19700 }, { 0x1DE7, 83223 }, { 0x1DE8, 104640 }, { 0x1DE9, 7099 }, { 0x1DEA, 99512 }, { 0x1DEB, 7136 }, { 0x1DEC, 86231 }, { 0x1DED, 100279 }, { 0x1DEE, 109797 }, { 0x1DEF, 100343 }, { 0x1DF0, 109861 }, { 0x1DF1, 100333 }, { 0x1DF2, 109851 }, { 0x1DF3, 14164 }, { 0x1DF4, 14166 }, { 0x1DF5, 58331 }, { 0x1DF6, 7141 }, { 0x1DF7, 7139 }, { 0x1DF8, 7144 }, { 0x1DF9, 64433 }, { 0x1DFA, 64447 }, { 0x1DFB, 100313 }, { 0x1DFC, 109834 }, { 0x1DFD, 64438 }, { 0x1DFE, 64456 }, { 0x1DFF, 100320 }, { 0x1E00, 109831 }, { 0x1E01, 64443 }, { 0x1E02, 64452 }, { 0x1E03, 85799 }, { 0x1E04, 86234 }, { 0x1E05, 85800 }, { 0x1E06, 86235 }, { 0x1E07, 85804 }, { 0x1E08, 86239 }, { 0x1E09, 12475 }, { 0x1E0A, 12483 }, { 0x1E0B, 54449 }, { 0x1E0C, 86282 }, { 0x1E0D, 7080 }, { 0x1E0E, 7084 }, { 0x1E0F, 54451 }, { 0x1E10, 86284 }, { 0x1E11, 64419 }, { 0x1E12, 64426 }, { 0x1E13, 54464 }, { 0x1E14, 86297 }, { 0x1E15, 84982 }, { 0x1E16, 84985 }, { 0x1E17, 84983 }, { 0x1E18, 54277 }, { 0x1E19, 54397 }, { 0x1E1A, 54287 }, { 0x1E1B, 54407 }, { 0x1E1C, 54056 }, { 0x1E1D, 54058 }, { 0x1E1E, 59135 }, { 0x1E1F, 59438 }, { 0x1E20, 59440 }, { 0x1E21, 59787 }, { 0x1E22, 59121 }, { 0x1E23, 59137 }, { 0x1E24, 59778 }, { 0x1E25, 59450 }, { 0x1E26, 59127 }, { 0x1E27, 66894 }, { 0x1E28, 67034 }, { 0x1E29, 67049 }, { 0x1E2A, 66852 }, { 0x1E2B, 33566 }, { 0x1E2C, 12827 }, { 0x1E2D, 12500 }, { 0x1E2E, 376 }, { 0x1E2F, 88689 }, { 0x1E30, 52772 }, { 0x1E31, 15270 }, { 0x1E32, 46324 }, { 0x1E33, 57175 }, { 0x1E34, 46195 }, { 0x1E35, 12443 }, { 0x1E36, 7094 }, { 0x1E37, 12440 }, { 0x1E38, 64412 }, { 0x1E39, 85844 }, { 0x1E3A, 86279 }, { 0x1E3B, 52791 }, { 0x1E3C, 73150 }, { 0x1E3D, 52794 }, { 0x1E3E, 73154 }, { 0x1E3F, 85387 }, { 0x1E40, 23185 }, { 0x1E41, 84978 }, { 0x1E42, 99504 }, { 0x1E43, 106174 }, { 0x1E44, 11841 }, { 0x1E45, 14172 }, { 0x1E46, 7079 }, { 0x1E47, 33573 }, { 0x1E48, 33792 }, { 0x1E49, 32603 }, { 0x1E4A, 32600 }, { 0x1E4B, 32612 }, { 0x1E4C, 32564 }, { 0x1E4D, 60705 }, { 0x1E4E, 5904 }, { 0x1E4F, 14916 }, { 0x1E50, 75221 }, { 0x1E51, 43991 }, { 0x1E52, 13011 }, { 0x1E53, 33699 }, { 0x1E54, 13111 }, { 0x1E55, 33808 }, { 0x1E56, 86083 }, { 0x1E57, 19485 }, { 0x1E58, 19488 }, { 0x1E59, 46116 }, { 0x1E5A, 46179 }, { 0x1E5B, 46210 }, { 0x1E5C, 46089 }, { 0x1E5D, 101756 }, { 0x1E5E, 19720 }, { 0x1E5F, 100349 }, { 0x1E60, 109867 }, { 0x1E61, 15277 }, { 0x1E62, 15280 }, { 0x1E63, 100396 }, { 0x1E64, 109914 }, { 0x1E65, 19712 }, { 0x1E66, 19716 }, { 0x1E67, 19704 }, { 0x1E68, 19708 }, { 0x1E69, 12478 }, { 0x1E6A, 12486 }, { 0x1E6B, 7119 }, { 0x1E6C, 7126 }, { 0x1E6D, 54280 }, { 0x1E6E, 54400 }, { 0x1E6F, 100338 }, { 0x1E70, 109856 }, { 0x1E71, 85808 }, { 0x1E72, 86243 }, { 0x1E73, 7108 }, { 0x1E74, 12461 }, { 0x1E75, 7112 }, { 0x1E76, 12467 }, { 0x1E77, 86905 }, { 0x1E78, 62341 }, { 0x1E79, 387 }, { 0x1E7A, 12507 }, { 0x1E7B, 61024 }, { 0x1E7C, 61038 }, { 0x1E7D, 34508 }, { 0x1E7E, 61013 }, { 0x1E7F, 61030 }, { 0x1E80, 34503 }, { 0x1E81, 61034 }, { 0x1E82, 61018 }, { 0x1E83, 73161 }, { 0x1E84, 73169 }, { 0x1E85, 34537 }, { 0x1E86, 73166 }, { 0x1E87, 34533 }, { 0x1E88, 12 }, { 0x1E89, 75213 }, { 0x1E8A, 79021 }, { 0x1E8B, 23177 }, { 0x1E8C, 391 }, { 0x1E8D, 12511 }, { 0x1E8E, 104635 }, { 0x1E8F, 106223 }, { 0x1E90, 15343 }, { 0x1E91, 13073 }, { 0x1E92, 33761 }, { 0x1E93, 12877 }, { 0x1E94, 33642 }, { 0x1E95, 43965 }, { 0x1E96, 43952 }, { 0x1E97, 10861 }, { 0x1E98, 10843 }, { 0x1E99, 86059 }, { 0x1E9A, 54368 }, { 0x1E9B, 4442 }, { 0x1E9C, 65238 }, { 0x1E9D, 53783 }, { 0x1E9E, 102374 }, { 0x1E9F, 85797 }, { 0x1EA0, 86911 }, { 0x1EA1, 33511 }, { 0x1EA2, 57211 }, { 0x1EA3, 35586 }, { 0x1EA4, 99507 }, { 0x1EA5, 10850 }, { 0x1EA6, 10868 }, { 0x1EA7, 43959 }, { 0x1EA8, 43972 }, { 0x1EA9, 10840 }, { 0x1EAA, 43949 }, { 0x1EAB, 19773 }, { 0x1EAC, 34573 }, { 0x1EAD, 399 }, { 0x1EAE, 52854 }, { 0x1EAF, 19728 }, { 0x1EB0, 7 }, { 0x1EB1, 83091 }, { 0x1EB2, 115284 }, { 0x1EB3, 115909 }, { 0x1EB4, 19724 }, { 0x1EB5, 58325 }, { 0x1EB6, 109761 }, { 0x1EB7, 4075 }, { 0x1EB8, 86362 }, { 0x1EB9, 35292 }, { 0x1EBA, 98267 }, { 0x1EBB, 60130 }, { 0x1EBC, 34367 }, { 0x1EBD, 105539 }, { 0x1EBE, 105540 }, { 0x1EBF, 4388 }, { 0x1EC0, 4392 }, { 0x1EC1, 4222 }, { 0x1EC2, 4237 }, { 0x1EC3, 4242 }, { 0x1EC4, 4195 }, { 0x1EC5, 4232 }, { 0x1EC6, 4368 }, { 0x1EC7, 4358 }, { 0x1EC8, 4339 }, { 0x1EC9, 4412 }, { 0x1ECA, 4227 }, { 0x1ECB, 4258 }, { 0x1ECC, 4275 }, { 0x1ECD, 4286 }, { 0x1ECE, 4422 }, { 0x1ECF, 4432 }, { 0x1ED0, 4269 }, { 0x1ED1, 4280 }, { 0x1ED2, 4378 }, { 0x1ED3, 4153 }, { 0x1ED4, 4310 }, { 0x1ED5, 4206 }, { 0x1ED6, 4217 }, { 0x1ED7, 4147 }, { 0x1ED8, 4407 }, { 0x1ED9, 4247 }, { 0x1EDA, 4094 }, { 0x1EDB, 4112 }, { 0x1EDC, 4184 }, { 0x1EDD, 4190 }, { 0x1EDE, 4088 }, { 0x1EDF, 4417 }, { 0x1EE0, 4263 }, { 0x1EE1, 4334 }, { 0x1EE2, 4315 }, { 0x1EE3, 4397 }, { 0x1EE4, 4127 }, { 0x1EE5, 4373 }, { 0x1EE6, 4082 }, { 0x1EE7, 4329 }, { 0x1EE8, 4363 }, { 0x1EE9, 4212 }, { 0x1EEA, 4100 }, { 0x1EEB, 4122 }, { 0x1EEC, 4291 }, { 0x1EED, 4132 }, { 0x1EEE, 4383 }, { 0x1EEF, 4141 }, { 0x1EF0, 4174 }, { 0x1EF1, 4349 }, { 0x1EF2, 4437 }, { 0x1EF3, 4305 }, { 0x1EF4, 4117 }, { 0x1EF5, 4354 }, { 0x1EF6, 4344 }, { 0x1EF7, 4427 }, { 0x1EF8, 4200 }, { 0x1EF9, 4253 }, { 0x1EFA, 4159 }, { 0x1EFB, 4106 }, { 0x1EFC, 4165 }, { 0x1EFD, 4137 }, { 0x1EFE, 4320 }, { 0x1EFF, 4300 }, { 0x1F00, 4402 }, { 0x1F01, 4169 }, { 0x1F02, 4324 }, { 0x1F03, 4296 }, { 0x1F04, 7096 }, { 0x1F05, 33577 }, { 0x1F06, 105482 }, { 0x1F07, 12072 }, { 0x1F08, 86884 }, { 0x1F09, 99526 }, { 0x1F0A, 103206 }, { 0x1F0B, 114966 }, { 0x1F0C, 79029 }, { 0x1F0D, 105531 }, { 0x1F0E, 35857 }, { 0x1F0F, 19698 }, { 0x1F10, 105507 }, { 0x1F11, 12721 }, { 0x1F12, 60106 }, { 0x1F13, 59933 }, { 0x1F14, 44369 }, { 0x1F15, 15271 }, { 0x1F16, 104530 }, { 0x1F17, 104151 }, { 0x1F18, 115971 }, { 0x1F19, 115974 }, { 0x1F1A, 115979 }, { 0x1F1B, 115977 }, { 0x1F1C, 45721 }, { 0x1F1D, 115964 }, { 0x1F1E, 4180 }, { 0x1F1F, 60325 }, { 0x1F20, 85849 }, { 0x1F21, 14470 }, { 0x1F22, 33531 }, { 0x1F23, 19350 }, { 0x1F24, 13120 }, { 0x1F25, 13124 }, { 0x1F26, 13116 }, { 0x1F27, 33817 }, { 0x1F28, 33821 }, { 0x1F29, 33813 }, { 0x1F2A, 13061 }, { 0x1F2B, 13066 }, { 0x1F2C, 13056 }, { 0x1F2D, 33749 }, { 0x1F2E, 33754 }, { 0x1F2F, 33744 }, { 0x1F30, 12867 }, { 0x1F31, 12872 }, { 0x1F32, 12862 }, { 0x1F33, 19482 }, { 0x1F34, 33632 }, { 0x1F35, 33637 }, { 0x1F36, 33627 }, { 0x1F37, 82371 }, { 0x1F38, 104120 }, { 0x1F39, 35340 }, { 0x1F3A, 35364 }, { 0x1F3B, 102106 }, { 0x1F3C, 102111 }, { 0x1F3D, 10871 }, { 0x1F3E, 43975 }, { 0x1F3F, 43978 }, { 0x1F40, 65150 }, { 0x1F41, 13107 }, { 0x1F42, 33804 }, { 0x1F43, 104128 }, { 0x1F44, 104131 }, { 0x1F45, 104134 }, { 0x1F46, 104137 }, { 0x1F47, 98227 }, { 0x1F48, 98247 }, { 0x1F49, 98254 }, { 0x1F4A, 98204 }, { 0x1F4B, 98174 }, { 0x1F4C, 98260 }, { 0x1F4D, 98212 }, { 0x1F4E, 98182 }, { 0x1F4F, 98234 }, { 0x1F50, 98196 }, { 0x1F51, 98166 }, { 0x1F52, 98190 }, { 0x1F53, 98160 }, { 0x1F54, 98220 }, { 0x1F55, 98240 }, { 0x1F56, 54129 }, { 0x1F57, 53680 }, { 0x1F58, 19638 }, { 0x1F59, 86889 }, { 0x1F5A, 83896 }, { 0x1F5B, 83892 }, { 0x1F5C, 83898 }, { 0x1F5D, 83887 }, { 0x1F5E, 83878 }, { 0x1F5F, 83883 }, { 0x1F60, 83902 }, { 0x1F61, 83906 }, { 0x1F62, 83904 }, { 0x1F63, 19611 }, { 0x1F64, 12691 }, { 0x1F65, 10878 }, { 0x1F66, 43989 }, { 0x1F67, 10858 }, { 0x1F68, 43962 }, { 0x1F69, 10874 }, { 0x1F6A, 43985 }, { 0x1F6B, 36000 }, { 0x1F6C, 58327 }, { 0x1F6D, 114883 }, { 0x1F6E, 80610 }, { 0x1F6F, 67 }, { 0x1F70, 103691 }, { 0x1F71, 60322 }, { 0x1F72, 19220 }, { 0x1F73, 19192 }, { 0x1F74, 19160 }, { 0x1F75, 19176 }, { 0x1F76, 19224 }, { 0x1F77, 19196 }, { 0x1F78, 19240 }, { 0x1F79, 15714 }, { 0x1F7A, 102071 }, { 0x1F7B, 35276 }, { 0x1F7C, 99508 }, { 0x1F7D, 19007 }, { 0x1F7E, 19016 }, { 0x1F7F, 18989 }, { 0x1F80, 18998 }, { 0x1F81, 46181 }, { 0x1F82, 19030 }, { 0x1F83, 18897 }, { 0x1F84, 33528 }, { 0x1F85, 33525 }, { 0x1F86, 33519 }, { 0x1F87, 33522 }, { 0x1F88, 54741 }, { 0x1F89, 54772 }, { 0x1F8A, 54767 }, { 0x1F8B, 54700 }, { 0x1F8C, 54710 }, { 0x1F8D, 54815 }, { 0x1F8E, 54852 }, { 0x1F8F, 54721 }, { 0x1F90, 54833 }, { 0x1F91, 54840 }, { 0x1F92, 54737 }, { 0x1F93, 54829 }, { 0x1F94, 54733 }, { 0x1F95, 54821 }, { 0x1F96, 54760 }, { 0x1F97, 54756 }, { 0x1F98, 54724 }, { 0x1F99, 54788 }, { 0x1F9A, 54793 }, { 0x1F9B, 54803 }, { 0x1F9C, 54798 }, { 0x1F9D, 54825 }, { 0x1F9E, 54855 }, { 0x1F9F, 54715 }, { 0x1FA0, 54777 }, { 0x1FA1, 54705 }, { 0x1FA2, 54844 }, { 0x1FA3, 54808 }, { 0x1FA4, 54729 }, { 0x1FA5, 54748 }, { 0x1FA6, 54811 }, { 0x1FA7, 54744 }, { 0x1FA8, 54764 }, { 0x1FA9, 54780 }, { 0x1FAA, 19252 }, { 0x1FAB, 14479 }, { 0x1FAC, 54818 }, { 0x1FAD, 54783 }, { 0x1FAE, 54847 }, { 0x1FAF, 7163 }, { 0x1FB0, 7165 }, { 0x1FB1, 7161 }, { 0x1FB2, 7182 }, { 0x1FB3, 7156 }, { 0x1FB4, 7153 }, { 0x1FB5, 7171 }, { 0x1FB6, 7167 }, { 0x1FB7, 7159 }, { 0x1FB8, 7178 }, { 0x1FB9, 7175 }, { 0x1FBA, 59143 }, { 0x1FBB, 59149 }, { 0x1FBC, 59170 }, { 0x1FBD, 59155 }, { 0x1FBE, 59152 }, { 0x1FBF, 59146 }, { 0x1FC0, 59167 }, { 0x1FC1, 59164 }, { 0x1FC2, 59158 }, { 0x1FC3, 59574 }, { 0x1FC4, 59649 }, { 0x1FC5, 59697 }, { 0x1FC6, 59766 }, { 0x1FC7, 59760 }, { 0x1FC8, 59745 }, { 0x1FC9, 59754 }, { 0x1FCA, 59769 }, { 0x1FCB, 59757 }, { 0x1FCC, 59763 }, { 0x1FCD, 59700 }, { 0x1FCE, 115312 }, { 0x1FCF, 115318 }, { 0x1FD0, 115336 }, { 0x1FD1, 115324 }, { 0x1FD2, 115321 }, { 0x1FD3, 115315 }, { 0x1FD4, 115333 }, { 0x1FD5, 115330 }, { 0x1FD6, 115327 }, { 0x1FD7, 115710 }, { 0x1FD8, 115713 }, { 0x1FD9, 115716 }, { 0x1FDA, 115737 }, { 0x1FDB, 115731 }, { 0x1FDC, 115722 }, { 0x1FDD, 115725 }, { 0x1FDE, 115740 }, { 0x1FDF, 115728 }, { 0x1FE0, 115734 }, { 0x1FE1, 115719 }, { 0x1FE2, 19502 }, { 0x1FE3, 19520 }, { 0x1FE4, 19583 }, { 0x1FE5, 19538 }, { 0x1FE6, 19529 }, { 0x1FE7, 19511 }, { 0x1FE8, 19574 }, { 0x1FE9, 19565 }, { 0x1FEA, 19547 }, { 0x1FEB, 52800 }, { 0x1FEC, 52806 }, { 0x1FED, 52810 }, { 0x1FEE, 52838 }, { 0x1FEF, 52830 }, { 0x1FF0, 52818 }, { 0x1FF1, 52822 }, { 0x1FF2, 52842 }, { 0x1FF3, 52826 }, { 0x1FF4, 52834 }, { 0x1FF5, 52814 }, { 0x1FF6, 115339 }, { 0x1FF7, 115344 }, { 0x1FF8, 115349 }, { 0x1FF9, 115354 }, { 0x1FFA, 115359 }, { 0x1FFB, 115364 }, { 0x1FFC, 115369 }, { 0x1FFD, 115374 }, { 0x1FFE, 115379 }, { 0x1FFF, 115384 }, { 0x2000, 115389 }, { 0x2001, 115394 }, { 0x2002, 115399 }, { 0x2003, 115404 }, { 0x2004, 115409 }, { 0x2005, 115414 }, { 0x2006, 115419 }, { 0x2007, 115424 }, { 0x2008, 115429 }, { 0x2009, 115434 }, { 0x200A, 115439 }, { 0x200B, 115444 }, { 0x200C, 115449 }, { 0x200D, 115454 }, { 0x200E, 115459 }, { 0x200F, 115464 }, { 0x2010, 59308 }, { 0x2011, 59313 }, { 0x2012, 59318 }, { 0x2013, 59323 }, { 0x2014, 59328 }, { 0x2015, 59333 }, { 0x2016, 59338 }, { 0x2017, 59343 }, { 0x2018, 59348 }, { 0x2019, 59353 }, { 0x201A, 59358 }, { 0x201B, 59363 }, { 0x201C, 59368 }, { 0x201D, 59373 }, { 0x201E, 59378 }, { 0x201F, 59383 }, { 0x2020, 59388 }, { 0x2021, 59393 }, { 0x2022, 59398 }, { 0x2023, 59403 }, { 0x2024, 59408 }, { 0x2025, 59413 }, { 0x2026, 59418 }, { 0x2027, 59423 }, { 0x2028, 59428 }, { 0x2029, 59433 }, { 0x202A, 59178 }, { 0x202B, 59183 }, { 0x202C, 59188 }, { 0x202D, 59193 }, { 0x202E, 59198 }, { 0x202F, 59203 }, { 0x2030, 59208 }, { 0x2031, 59213 }, { 0x2032, 59218 }, { 0x2033, 59223 }, { 0x2034, 59228 }, { 0x2035, 59233 }, { 0x2036, 59238 }, { 0x2037, 59243 }, { 0x2038, 59248 }, { 0x2039, 59253 }, { 0x203A, 59258 }, { 0x203B, 59263 }, { 0x203C, 59268 }, { 0x203D, 59273 }, { 0x203E, 59278 }, { 0x203F, 59283 }, { 0x2040, 59288 }, { 0x2041, 59293 }, { 0x2042, 59298 }, { 0x2043, 59303 }, { 0x2044, 59161 }, { 0x2045, 85153 }, { 0x2046, 85157 }, { 0x2047, 85185 }, { 0x2048, 85177 }, { 0x2049, 85165 }, { 0x204A, 85169 }, { 0x204B, 85189 }, { 0x204C, 85173 }, { 0x204D, 85181 }, { 0x204E, 85161 }, { 0x204F, 46118 }, { 0x2050, 46126 }, { 0x2051, 46150 }, { 0x2052, 46134 }, { 0x2053, 46130 }, { 0x2054, 46122 }, { 0x2055, 46146 }, { 0x2056, 46142 }, { 0x2057, 46138 }, { 0x2058, 46154 }, { 0x2059, 84993 }, { 0x205A, 5091 }, { 0x205B, 4912 }, { 0x205C, 5057 }, { 0x205D, 4878 }, { 0x205E, 5028 }, { 0x205F, 4872 }, { 0x2060, 5022 }, { 0x2061, 4866 }, { 0x2062, 5085 }, { 0x2063, 4906 }, { 0x2064, 5079 }, { 0x2065, 4900 }, { 0x2066, 4983 }, { 0x2067, 4666 }, { 0x2068, 4621 }, { 0x2069, 4827 }, { 0x206A, 4977 }, { 0x206B, 4651 }, { 0x206C, 4606 }, { 0x206D, 4821 }, { 0x206E, 4933 }, { 0x206F, 4534 }, { 0x2070, 4489 }, { 0x2071, 4805 }, { 0x2072, 4920 }, { 0x2073, 4519 }, { 0x2074, 4474 }, { 0x2075, 4792 }, { 0x2076, 5067 }, { 0x2077, 5251 }, { 0x2078, 4481 }, { 0x2079, 4613 }, { 0x207A, 5230 }, { 0x207B, 4658 }, { 0x207C, 4526 }, { 0x207D, 4888 }, { 0x207E, 5061 }, { 0x207F, 5244 }, { 0x2080, 4466 }, { 0x2081, 4598 }, { 0x2082, 5223 }, { 0x2083, 4643 }, { 0x2084, 4511 }, { 0x2085, 4882 }, { 0x2086, 4989 }, { 0x2087, 4748 }, { 0x2088, 5121 }, { 0x2089, 4673 }, { 0x208A, 4628 }, { 0x208B, 5145 }, { 0x208C, 4772 }, { 0x208D, 4833 }, { 0x208E, 4939 }, { 0x208F, 4740 }, { 0x2090, 5113 }, { 0x2091, 4541 }, { 0x2092, 4496 }, { 0x2093, 5137 }, { 0x2094, 4764 }, { 0x2095, 4811 }, { 0x2096, 5073 }, { 0x2097, 4756 }, { 0x2098, 5129 }, { 0x2099, 5258 }, { 0x209A, 4458 }, { 0x209B, 4590 }, { 0x209C, 5237 }, { 0x209D, 4722 }, { 0x209E, 5095 }, { 0x209F, 4731 }, { 0x20A0, 5104 }, { 0x20A1, 4635 }, { 0x20A2, 4503 }, { 0x20A3, 5153 }, { 0x20A4, 4780 }, { 0x20A5, 4894 }, { 0x20A6, 5016 }, { 0x20A7, 4860 }, { 0x20A8, 5010 }, { 0x20A9, 4854 }, { 0x20AA, 5219 }, { 0x20AB, 5197 }, { 0x20AC, 4708 }, { 0x20AD, 4687 }, { 0x20AE, 5185 }, { 0x20AF, 4701 }, { 0x20B0, 4680 }, { 0x20B1, 5179 }, { 0x20B2, 4576 }, { 0x20B3, 4555 }, { 0x20B4, 5167 }, { 0x20B5, 4569 }, { 0x20B6, 4548 }, { 0x20B7, 5161 }, { 0x20B8, 5293 }, { 0x20B9, 5272 }, { 0x20BA, 5207 }, { 0x20BB, 5286 }, { 0x20BC, 5265 }, { 0x20BD, 5201 }, { 0x20BE, 4715 }, { 0x20BF, 4694 }, { 0x20C0, 5191 }, { 0x20C1, 4583 }, { 0x20C2, 4562 }, { 0x20C3, 5173 }, { 0x20C4, 5300 }, { 0x20C5, 5279 }, { 0x20C6, 5213 }, { 0x20C7, 4966 }, { 0x20C8, 4959 }, { 0x20C9, 4945 }, { 0x20CA, 4952 }, { 0x20CB, 5048 }, { 0x20CC, 5039 }, { 0x20CD, 5034 }, { 0x20CE, 4995 }, { 0x20CF, 4916 }, { 0x20D0, 5006 }, { 0x20D1, 4973 }, { 0x20D2, 4839 }, { 0x20D3, 4788 }, { 0x20D4, 4850 }, { 0x20D5, 4817 }, { 0x20D6, 4999 }, { 0x20D7, 4926 }, { 0x20D8, 4843 }, { 0x20D9, 4798 }, { 0x20DA, 35329 }, { 0x20DB, 31324 }, { 0x20DC, 31328 }, { 0x20DD, 31420 }, { 0x20DE, 31336 }, { 0x20DF, 31332 }, { 0x20E0, 31424 }, { 0x20E1, 31416 }, { 0x20E2, 12686 }, { 0x20E3, 12950 }, { 0x20E4, 12958 }, { 0x20E5, 12812 }, { 0x20E6, 12820 }, { 0x20E7, 12954 }, { 0x20E8, 12777 }, { 0x20E9, 12773 }, { 0x20EA, 33559 }, { 0x20EB, 31076 }, { 0x20EC, 52372 }, { 0x20ED, 12429 }, { 0x20EE, 35325 }, { 0x20EF, 33548 }, { 0x20F0, 85854 }, { 0x20F1, 85857 }, { 0x20F2, 85860 }, { 0x20F3, 85863 }, { 0x20F4, 85872 }, { 0x20F5, 85878 }, { 0x20F6, 85887 }, { 0x20F7, 85896 }, { 0x20F8, 85899 }, { 0x20F9, 85905 }, { 0x20FA, 19028 }, { 0x20FB, 35831 }, { 0x20FC, 35863 }, { 0x20FD, 35894 }, { 0x20FE, 54246 }, { 0x20FF, 54238 }, { 0x2100, 54250 }, { 0x2101, 54198 }, { 0x2102, 54213 }, { 0x2103, 54233 }, { 0x2104, 18867 }, { 0x2105, 35752 }, { 0x2106, 19129 }, { 0x2107, 35993 }, { 0x2108, 19113 }, { 0x2109, 35988 }, { 0x210A, 19214 }, { 0x210B, 36053 }, { 0x210C, 19164 }, { 0x210D, 36013 }, { 0x210E, 19156 }, { 0x210F, 36009 }, { 0x2110, 19237 }, { 0x2111, 36065 }, { 0x2112, 19216 }, { 0x2113, 36055 }, { 0x2114, 19231 }, { 0x2115, 36059 }, { 0x2116, 19180 }, { 0x2117, 36040 }, { 0x2118, 19172 }, { 0x2119, 36036 }, { 0x211A, 19206 }, { 0x211B, 36050 }, { 0x211C, 19188 }, { 0x211D, 36043 }, { 0x211E, 19203 }, { 0x211F, 36047 }, { 0x2120, 19040 }, { 0x2121, 35906 }, { 0x2122, 35927 }, { 0x2123, 61078 }, { 0x2124, 61808 }, { 0x2125, 35763 }, { 0x2126, 46034 }, { 0x2127, 44805 }, { 0x2128, 69955 }, { 0x2129, 18895 }, { 0x212A, 44772 }, { 0x212B, 44782 }, { 0x212C, 44777 }, { 0x212D, 44794 }, { 0x212E, 44799 }, { 0x212F, 44756 }, { 0x2130, 12816 }, { 0x2131, 33555 }, { 0x2132, 61426 }, { 0x2133, 61423 }, { 0x2134, 35335 }, { 0x2135, 31342 }, { 0x2136, 35353 }, { 0x2137, 35375 }, { 0x2138, 31388 }, { 0x2139, 31357 }, { 0x213A, 35332 }, { 0x213B, 31339 }, { 0x213C, 18844 }, { 0x213D, 18840 }, { 0x213E, 18881 }, { 0x213F, 18885 }, { 0x2140, 35761 }, { 0x2141, 54174 }, { 0x2142, 54193 }, { 0x2143, 54206 }, { 0x2144, 54186 }, { 0x2145, 35868 }, { 0x2146, 36016 }, { 0x2147, 109449 }, { 0x2148, 109455 }, { 0x2149, 23997 }, { 0x214A, 35845 }, { 0x214B, 35833 }, { 0x214C, 35839 }, { 0x214D, 35851 }, { 0x214E, 35792 }, { 0x214F, 35780 }, { 0x2150, 35786 }, { 0x2151, 35798 }, { 0x2152, 35358 }, { 0x2153, 35390 }, { 0x2154, 31362 }, { 0x2155, 35819 }, { 0x2156, 18980 }, { 0x2157, 35815 }, { 0x2158, 18968 }, { 0x2159, 31403 }, { 0x215A, 18745 }, { 0x215B, 19439 }, { 0x215C, 86799 }, { 0x215D, 66629 }, { 0x215E, 19459 }, { 0x215F, 18784 }, { 0x2160, 35689 }, { 0x2161, 100412 }, { 0x2162, 114886 }, { 0x2163, 9324 }, { 0x2164, 88687 }, { 0x2165, 103211 }, { 0x2166, 105534 }, { 0x2167, 104533 }, { 0x2168, 19131 }, { 0x2169, 35995 }, { 0x216A, 43877 }, { 0x216B, 43894 }, { 0x216C, 43879 }, { 0x216D, 65233 }, { 0x216E, 86803 }, { 0x216F, 5942 }, { 0x2170, 35746 }, { 0x2171, 18857 }, { 0x2172, 86153 }, { 0x2173, 86122 }, { 0x2174, 18772 }, { 0x2175, 18848 }, { 0x2176, 35680 }, { 0x2177, 35604 }, { 0x2178, 35737 }, { 0x2179, 35645 }, { 0x217A, 34361 }, { 0x217B, 59109 }, { 0x217C, 106226 }, { 0x217D, 89009 }, { 0x217E, 69956 }, { 0x217F, 12041 }, { 0x2180, 85389 }, { 0x2181, 5329 }, { 0x2182, 19464 }, { 0x2183, 19467 }, { 0x2184, 14911 }, { 0x2185, 19734 }, { 0x2186, 4070 }, { 0x2187, 46429 }, { 0x2188, 33505 }, { 0x2189, 11844 }, { 0x218A, 68388 }, { 0x218B, 68376 }, { 0x218C, 68373 }, { 0x218D, 68391 }, { 0x218E, 68379 }, { 0x218F, 68385 }, { 0x2190, 68394 }, { 0x2191, 68382 }, { 0x2192, 35601 }, { 0x2193, 35965 }, { 0x2194, 35949 }, { 0x2195, 19072 }, { 0x2196, 35617 }, { 0x2197, 19748 }, { 0x2198, 12740 }, { 0x2199, 62340 }, { 0x219A, 46293 }, { 0x219B, 19601 }, { 0x219C, 13401 }, { 0x219D, 61430 }, { 0x219E, 53730 }, { 0x219F, 57291 }, { 0x21A0, 64467 }, { 0x21A1, 33515 }, { 0x21A2, 15730 }, { 0x21A3, 56635 }, { 0x21A4, 46334 }, { 0x21A5, 44384 }, { 0x21A6, 6210 }, { 0x21A7, 35585 }, { 0x21A8, 31028 }, { 0x21A9, 86141 }, { 0x21AA, 106230 }, { 0x21AB, 90266 }, { 0x21AC, 68762 }, { 0x21AD, 53470 }, { 0x21AE, 35706 }, { 0x21AF, 35715 }, { 0x21B0, 35712 }, { 0x21B1, 35718 }, { 0x21B2, 35721 }, { 0x21B3, 35709 }, { 0x21B4, 18807 }, { 0x21B5, 18816 }, { 0x21B6, 18813 }, { 0x21B7, 18819 }, { 0x21B8, 18822 }, { 0x21B9, 18810 }, { 0x21BA, 18876 }, { 0x21BB, 35724 }, { 0x21BC, 35912 }, { 0x21BD, 18749 }, { 0x21BE, 35758 }, { 0x21BF, 18831 }, { 0x21C0, 19042 }, { 0x21C1, 35636 }, { 0x21C2, 5940 }, { 0x21C3, 65148 }, { 0x21C4, 46225 }, { 0x21C5, 43922 }, { 0x21C6, 43929 }, { 0x21C7, 32552 }, { 0x21C8, 32558 }, { 0x21C9, 32555 }, { 0x21CA, 15347 }, { 0x21CB, 12517 }, { 0x21CC, 102639 }, { 0x21CD, 101768 }, { 0x21CE, 101773 }, { 0x21CF, 101778 }, { 0x21D0, 101783 }, { 0x21D1, 101788 }, { 0x21D2, 101793 }, { 0x21D3, 101798 }, { 0x21D4, 101803 }, { 0x21D5, 19136 }, { 0x21D6, 85920 }, { 0x21D7, 115968 }, { 0x21D8, 101752 }, { 0x21D9, 105505 }, { 0x21DA, 5883 }, { 0x21DB, 5885 }, { 0x21DC, 5887 }, { 0x21DD, 5889 }, { 0x21DE, 5891 }, { 0x21DF, 5893 }, { 0x21E0, 35765 }, { 0x21E1, 35770 }, { 0x21E2, 18912 }, { 0x21E3, 18901 }, { 0x21E4, 84963 }, { 0x21E5, 84960 }, { 0x21E6, 45711 }, { 0x21E7, 45691 }, { 0x21E8, 45695 }, { 0x21E9, 45707 }, { 0x21EA, 35654 }, { 0x21EB, 18757 }, { 0x21EC, 46426 }, { 0x21ED, 36304 }, { 0x21EE, 60143 }, { 0x21EF, 34720 }, { 0x21F0, 53731 }, { 0x21F1, 57826 }, { 0x21F2, 46314 }, { 0x21F3, 12697 }, { 0x21F4, 34717 }, { 0x21F5, 12042 }, { 0x21F6, 109788 }, { 0x21F7, 85400 }, { 0x21F8, 35205 }, { 0x21F9, 35201 }, { 0x21FA, 68735 }, { 0x21FB, 12724 }, { 0x21FC, 60885 }, { 0x21FD, 60882 }, { 0x21FE, 106184 }, { 0x21FF, 13397 }, { 0x2200, 13411 }, { 0x2201, 13403 }, { 0x2202, 86892 }, { 0x2203, 104123 }, { 0x2204, 52388 }, { 0x2205, 52348 }, { 0x2206, 52374 }, { 0x2207, 83220 }, { 0x2208, 60879 }, { 0x2209, 102642 }, { 0x220A, 44878 }, { 0x220B, 61086 }, { 0x220C, 52787 }, { 0x220D, 19332 }, { 0x220E, 53437 }, { 0x220F, 12732 }, { 0x2210, 35580 }, { 0x2211, 44753 }, { 0x2212, 18781 }, { 0x2213, 65241 }, { 0x2214, 106233 }, { 0x2215, 85919 }, { 0x2216, 115924 }, { 0x2217, 53817 }, { 0x2218, 69638 }, { 0x2219, 66857 }, { 0x221A, 35957 }, { 0x221B, 35960 }, { 0x221C, 19086 }, { 0x221D, 19089 }, { 0x221E, 66630 }, { 0x221F, 9328 }, { 0x2220, 14609 }, { 0x2221, 19075 }, { 0x2222, 67198 }, { 0x2223, 57259 }, { 0x2224, 57216 }, { 0x2225, 35908 }, { 0x2226, 73270 }, { 0x2227, 75215 }, { 0x2228, 101648 }, { 0x2229, 14542 }, { 0x222A, 5312 }, { 0x222B, 48405 }, { 0x222C, 59781 }, { 0x222D, 44540 }, { 0x222E, 90 }, { 0x222F, 86919 }, { 0x2230, 19077 }, { 0x2231, 35952 }, { 0x2232, 18768 }, { 0x2233, 35676 }, { 0x2234, 19597 }, { 0x2235, 22926 }, { 0x2236, 12986 }, { 0x2237, 67072 }, { 0x2238, 61057 }, { 0x2239, 18879 }, { 0x223A, 104645 }, { 0x223B, 104648 }, { 0x223C, 109736 }, { 0x223D, 22940 }, { 0x223E, 101751 }, { 0x223F, 114872 }, { 0x2240, 106204 }, { 0x2241, 82386 }, { 0x2242, 18825 }, { 0x2243, 53790 }, { 0x2244, 44754 }, { 0x2245, 44534 }, { 0x2246, 82192 }, { 0x2247, 12701 }, { 0x2248, 12698 }, { 0x2249, 6251 }, { 0x224A, 84971 }, { 0x224B, 86800 }, { 0x224C, 80611 }, { 0x224D, 12635 }, { 0x224E, 19736 }, { 0x224F, 86139 }, { 0x2250, 54131 }, { 0x2251, 34359 }, { 0x2252, 5946 }, { 0x2253, 53439 }, { 0x2254, 14924 }, { 0x2255, 82393 }, { 0x2256, 99501 }, { 0x2257, 12675 }, { 0x2258, 5879 }, { 0x2259, 35656 }, { 0x225A, 19025 }, { 0x225B, 35361 }, { 0x225C, 19100 }, { 0x225D, 31377 }, { 0x225E, 35974 }, { 0x225F, 35727 }, { 0x2260, 102365 }, { 0x2261, 14919 }, { 0x2262, 68753 }, { 0x2263, 79031 }, { 0x2264, 53525 }, { 0x2265, 53527 }, { 0x2266, 68732 }, { 0x2267, 68744 }, { 0x2268, 31385 }, { 0x2269, 53438 }, { 0x226A, 35372 }, { 0x226B, 35613 }, { 0x226C, 18743 }, { 0x226D, 19348 }, { 0x226E, 22811 }, { 0x226F, 115875 }, { 0x2270, 23120 }, { 0x2271, 43875 }, { 0x2272, 22930 }, { 0x2273, 85394 }, { 0x2274, 22839 }, { 0x2275, 14495 }, { 0x2276, 22759 }, { 0x2277, 24007 }, { 0x2278, 86146 }, { 0x2279, 85397 }, { 0x227A, 62007 }, { 0x227B, 14908 }, { 0x227C, 12670 }, { 0x227D, 12667 }, { 0x227E, 22755 }, { 0x227F, 12664 }, { 0x2280, 18759 }, { 0x2281, 35667 }, { 0x2282, 86218 }, { 0x2283, 54443 }, { 0x2284, 59442 }, { 0x2285, 14491 }, { 0x2286, 18891 }, { 0x2287, 85391 }, { 0x2288, 23030 }, { 0x2289, 85793 }, { 0x228A, 86143 }, { 0x228B, 23020 }, { 0x228C, 14498 }, { 0x228D, 19613 }, { 0x228E, 19616 }, { 0x228F, 19620 }, { 0x2290, 9306 }, { 0x2291, 19624 }, { 0x2292, 22828 }, { 0x2293, 57285 }, { 0x2294, 66510 }, { 0x2295, 115939 }, { 0x2296, 14501 }, { 0x2297, 23153 }, { 0x2298, 9314 }, { 0x2299, 19092 }, { 0x229A, 35963 }, { 0x229B, 19629 }, { 0x229C, 59129 }, { 0x229D, 23156 }, { 0x229E, 102053 }, { 0x229F, 35238 }, { 0x22A0, 22997 }, { 0x22A1, 66637 }, { 0x22A2, 23005 }, { 0x22A3, 115870 }, { 0x22A4, 19634 }, { 0x22A5, 22834 }, { 0x22A6, 19470 }, { 0x22A7, 86150 }, { 0x22A8, 85208 }, { 0x22A9, 31411 }, { 0x22AA, 35393 }, { 0x22AB, 31398 }, { 0x22AC, 35385 }, { 0x22AD, 19096 }, { 0x22AE, 35970 }, { 0x22AF, 36005 }, { 0x22B0, 19050 }, { 0x22B1, 23086 }, { 0x22B2, 31093 }, { 0x22B3, 52396 }, { 0x22B4, 23034 }, { 0x22B5, 22980 }, { 0x22B6, 22974 }, { 0x22B7, 22962 }, { 0x22B8, 22956 }, { 0x22B9, 22730 }, { 0x22BA, 22723 }, { 0x22BB, 45647 }, { 0x22BC, 23090 }, { 0x22BD, 22842 }, { 0x22BE, 22794 }, { 0x22BF, 65205 }, { 0x22C0, 46312 }, { 0x22C1, 65221 }, { 0x22C2, 52344 }, { 0x22C3, 52368 }, { 0x22C4, 52399 }, { 0x22C5, 52404 }, { 0x22C6, 52412 }, { 0x22C7, 52417 }, { 0x22C8, 23114 }, { 0x22C9, 23128 }, { 0x22CA, 23109 }, { 0x22CB, 23123 }, { 0x22CC, 31052 }, { 0x22CD, 31070 }, { 0x22CE, 52339 }, { 0x22CF, 52363 }, { 0x22D0, 60762 }, { 0x22D1, 60772 }, { 0x22D2, 60802 }, { 0x22D3, 60782 }, { 0x22D4, 60777 }, { 0x22D5, 60767 }, { 0x22D6, 60797 }, { 0x22D7, 60792 }, { 0x22D8, 60787 }, { 0x22D9, 60807 }, { 0x22DA, 60707 }, { 0x22DB, 60717 }, { 0x22DC, 60752 }, { 0x22DD, 60727 }, { 0x22DE, 60722 }, { 0x22DF, 60712 }, { 0x22E0, 60747 }, { 0x22E1, 60742 }, { 0x22E2, 60732 }, { 0x22E3, 60757 }, { 0x22E4, 60812 }, { 0x22E5, 60824 }, { 0x22E6, 60866 }, { 0x22E7, 60836 }, { 0x22E8, 60830 }, { 0x22E9, 60818 }, { 0x22EA, 60860 }, { 0x22EB, 60854 }, { 0x22EC, 60842 }, { 0x22ED, 60872 }, { 0x22EE, 23097 }, { 0x22EF, 22768 }, { 0x22F0, 22859 }, { 0x22F1, 23022 }, { 0x22F2, 22888 }, { 0x22F3, 23066 }, { 0x22F4, 22862 }, { 0x22F5, 75236 }, { 0x22F6, 23101 }, { 0x22F7, 115941 }, { 0x22F8, 23160 }, { 0x22F9, 45669 }, { 0x22FA, 22948 }, { 0x22FB, 19143 }, { 0x22FC, 67175 }, { 0x22FD, 67194 }, { 0x22FE, 19149 }, { 0x22FF, 22804 }, { 0x2300, 22797 }, { 0x2301, 34712 }, { 0x2302, 23148 }, { 0x2303, 114875 }, { 0x2304, 106207 }, { 0x2305, 105512 }, { 0x2306, 109792 }, { 0x2307, 22853 }, { 0x2308, 22914 }, { 0x2309, 64485 }, { 0x230A, 19480 }, { 0x230B, 64497 }, { 0x230C, 59173 }, { 0x230D, 115944 }, { 0x230E, 115929 }, { 0x230F, 115933 }, { 0x2310, 115925 }, { 0x2311, 23139 }, { 0x2312, 23144 }, { 0x2313, 23134 }, { 0x2314, 115936 }, { 0x2315, 23164 }, { 0x2316, 114887 }, { 0x2317, 23105 }, { 0x2318, 115309 }, { 0x2319, 46071 }, { 0x231A, 35232 }, { 0x231B, 35976 }, { 0x231C, 115851 }, { 0x231D, 14507 }, { 0x231E, 14519 }, { 0x231F, 13085 }, { 0x2320, 33780 }, { 0x2321, 311 }, { 0x2322, 65189 }, { 0x2323, 86359 }, { 0x2324, 86811 }, { 0x2325, 112020 }, { 0x2326, 13347 }, { 0x2327, 112187 }, { 0x2328, 67069 }, { 0x2329, 67066 }, { 0x232A, 35915 }, { 0x232B, 4078 }, { 0x232C, 61048 }, { 0x232D, 31380 }, { 0x232E, 35348 }, { 0x232F, 12879 }, { 0x2330, 33644 }, { 0x2331, 12688 }, { 0x2332, 23950 }, { 0x2333, 23990 }, { 0x2334, 12760 }, { 0x2335, 12756 }, { 0x2336, 13083 }, { 0x2337, 13344 }, { 0x2338, 13332 }, { 0x2339, 378 }, { 0x233A, 61809 }, { 0x233B, 36021 }, { 0x233C, 36024 }, { 0x233D, 36030 }, { 0x233E, 35874 }, { 0x233F, 35879 }, { 0x2340, 111529 }, { 0x2341, 111553 }, { 0x2342, 111525 }, { 0x2343, 111549 }, { 0x2344, 111540 }, { 0x2345, 111564 }, { 0x2346, 111534 }, { 0x2347, 111558 }, { 0x2348, 111545 }, { 0x2349, 111569 }, { 0x234A, 68632 }, { 0x234B, 98457 }, { 0x234C, 114904 }, { 0x234D, 90515 }, { 0x234E, 33610 }, { 0x234F, 13349 }, { 0x2350, 13371 }, { 0x2351, 13335 }, { 0x2352, 13357 }, { 0x2353, 13379 }, { 0x2354, 13339 }, { 0x2355, 13352 }, { 0x2356, 13374 }, { 0x2357, 13361 }, { 0x2358, 13383 }, { 0x2359, 13389 }, { 0x235A, 58339 }, { 0x235B, 58342 }, { 0x235C, 58345 }, { 0x235D, 58366 }, { 0x235E, 58348 }, { 0x235F, 58369 }, { 0x2360, 58387 }, { 0x2361, 58450 }, { 0x2362, 58351 }, { 0x2363, 58372 }, { 0x2364, 58390 }, { 0x2365, 58453 }, { 0x2366, 58405 }, { 0x2367, 58468 }, { 0x2368, 58513 }, { 0x2369, 58618 }, { 0x236A, 58354 }, { 0x236B, 58375 }, { 0x236C, 58393 }, { 0x236D, 58456 }, { 0x236E, 58408 }, { 0x236F, 58471 }, { 0x2370, 58516 }, { 0x2371, 58621 }, { 0x2372, 58420 }, { 0x2373, 58483 }, { 0x2374, 58528 }, { 0x2375, 58633 }, { 0x2376, 58558 }, { 0x2377, 58663 }, { 0x2378, 58723 }, { 0x2379, 58828 }, { 0x237A, 58357 }, { 0x237B, 58378 }, { 0x237C, 58396 }, { 0x237D, 58459 }, { 0x237E, 58411 }, { 0x237F, 58474 }, { 0x2380, 58519 }, { 0x2381, 58624 }, { 0x2382, 58423 }, { 0x2383, 58486 }, { 0x2384, 58531 }, { 0x2385, 58636 }, { 0x2386, 58561 }, { 0x2387, 58666 }, { 0x2388, 58726 }, { 0x2389, 58831 }, { 0x238A, 58432 }, { 0x238B, 58495 }, { 0x238C, 58540 }, { 0x238D, 58645 }, { 0x238E, 58570 }, { 0x238F, 58675 }, { 0x2390, 58735 }, { 0x2391, 58840 }, { 0x2392, 58588 }, { 0x2393, 58693 }, { 0x2394, 58753 }, { 0x2395, 58858 }, { 0x2396, 58783 }, { 0x2397, 58888 }, { 0x2398, 58933 }, { 0x2399, 58996 }, { 0x239A, 58360 }, { 0x239B, 58381 }, { 0x239C, 58399 }, { 0x239D, 58462 }, { 0x239E, 58414 }, { 0x239F, 58477 }, { 0x23A0, 58522 }, { 0x23A1, 58627 }, { 0x23A2, 58426 }, { 0x23A3, 58489 }, { 0x23A4, 58534 }, { 0x23A5, 58639 }, { 0x23A6, 58564 }, { 0x23A7, 58669 }, { 0x23A8, 58729 }, { 0x23A9, 58834 }, { 0x23AA, 58435 }, { 0x23AB, 58498 }, { 0x23AC, 58543 }, { 0x23AD, 58648 }, { 0x23AE, 58573 }, { 0x23AF, 58678 }, { 0x23B0, 58738 }, { 0x23B1, 58843 }, { 0x23B2, 58591 }, { 0x23B3, 58696 }, { 0x23B4, 58756 }, { 0x23B5, 58861 }, { 0x23B6, 58786 }, { 0x23B7, 58891 }, { 0x23B8, 58936 }, { 0x23B9, 58999 }, { 0x23BA, 58441 }, { 0x23BB, 58504 }, { 0x23BC, 58549 }, { 0x23BD, 58654 }, { 0x23BE, 58579 }, { 0x23BF, 58684 }, { 0x23C0, 58744 }, { 0x23C1, 58849 }, { 0x23C2, 58597 }, { 0x23C3, 58702 }, { 0x23C4, 58762 }, { 0x23C5, 58867 }, { 0x23C6, 58792 }, { 0x23C7, 58897 }, { 0x23C8, 58942 }, { 0x23C9, 59005 }, { 0x23CA, 58606 }, { 0x23CB, 58711 }, { 0x23CC, 58771 }, { 0x23CD, 58876 }, { 0x23CE, 58801 }, { 0x23CF, 58906 }, { 0x23D0, 58951 }, { 0x23D1, 59014 }, { 0x23D2, 58813 }, { 0x23D3, 58918 }, { 0x23D4, 58963 }, { 0x23D5, 59026 }, { 0x23D6, 58978 }, { 0x23D7, 59041 }, { 0x23D8, 59059 }, { 0x23D9, 59080 }, { 0x23DA, 58363 }, { 0x23DB, 58384 }, { 0x23DC, 58402 }, { 0x23DD, 58465 }, { 0x23DE, 58417 }, { 0x23DF, 58480 }, { 0x23E0, 58525 }, { 0x23E1, 58630 }, { 0x23E2, 58429 }, { 0x23E3, 58492 }, { 0x23E4, 58537 }, { 0x23E5, 58642 }, { 0x23E6, 58567 }, { 0x23E7, 58672 }, { 0x23E8, 58732 }, { 0x23E9, 58837 }, { 0x23EA, 58438 }, { 0x23EB, 58501 }, { 0x23EC, 58546 }, { 0x23ED, 58651 }, { 0x23EE, 58576 }, { 0x23EF, 58681 }, { 0x23F0, 58741 }, { 0x23F1, 58846 }, { 0x23F2, 58594 }, { 0x23F3, 58699 }, { 0x23F4, 58759 }, { 0x23F5, 58864 }, { 0x23F6, 58789 }, { 0x23F7, 58894 }, { 0x23F8, 58939 }, { 0x23F9, 59002 }, { 0x23FA, 58444 }, { 0x23FB, 58507 }, { 0x23FC, 58552 }, { 0x23FD, 58657 }, { 0x23FE, 58582 }, { 0x23FF, 58687 }, { 0x2400, 58747 }, { 0x2401, 58852 }, { 0x2402, 58600 }, { 0x2403, 58705 }, { 0x2404, 58765 }, { 0x2405, 58870 }, { 0x2406, 58795 }, { 0x2407, 58900 }, { 0x2408, 58945 }, { 0x2409, 59008 }, { 0x240A, 58609 }, { 0x240B, 58714 }, { 0x240C, 58774 }, { 0x240D, 58879 }, { 0x240E, 58804 }, { 0x240F, 58909 }, { 0x2410, 58954 }, { 0x2411, 59017 }, { 0x2412, 58816 }, { 0x2413, 58921 }, { 0x2414, 58966 }, { 0x2415, 59029 }, { 0x2416, 58981 }, { 0x2417, 59044 }, { 0x2418, 59062 }, { 0x2419, 59083 }, { 0x241A, 58447 }, { 0x241B, 58510 }, { 0x241C, 58555 }, { 0x241D, 58660 }, { 0x241E, 58585 }, { 0x241F, 58690 }, { 0x2420, 58750 }, { 0x2421, 58855 }, { 0x2422, 58603 }, { 0x2423, 58708 }, { 0x2424, 58768 }, { 0x2425, 58873 }, { 0x2426, 58798 }, { 0x2427, 58903 }, { 0x2428, 58948 }, { 0x2429, 59011 }, { 0x242A, 58612 }, { 0x242B, 58717 }, { 0x242C, 58777 }, { 0x242D, 58882 }, { 0x242E, 58807 }, { 0x242F, 58912 }, { 0x2430, 58957 }, { 0x2431, 59020 }, { 0x2432, 58819 }, { 0x2433, 58924 }, { 0x2434, 58969 }, { 0x2435, 59032 }, { 0x2436, 58984 }, { 0x2437, 59047 }, { 0x2438, 59065 }, { 0x2439, 59086 }, { 0x243A, 58615 }, { 0x243B, 58720 }, { 0x243C, 58780 }, { 0x243D, 58885 }, { 0x243E, 58810 }, { 0x243F, 58915 }, { 0x2440, 58960 }, { 0x2441, 59023 }, { 0x2442, 58822 }, { 0x2443, 58927 }, { 0x2444, 58972 }, { 0x2445, 59035 }, { 0x2446, 58987 }, { 0x2447, 59050 }, { 0x2448, 59068 }, { 0x2449, 59089 }, { 0x244A, 58825 }, { 0x244B, 58930 }, { 0x244C, 58975 }, { 0x244D, 59038 }, { 0x244E, 58990 }, { 0x244F, 59053 }, { 0x2450, 59071 }, { 0x2451, 59092 }, { 0x2452, 58993 }, { 0x2453, 59056 }, { 0x2454, 59074 }, { 0x2455, 59095 }, { 0x2456, 59077 }, { 0x2457, 59098 }, { 0x2458, 59101 }, { 0x2459, 59104 }, { 0x245A, 105065 }, { 0x245B, 105052 }, { 0x245C, 99985 }, { 0x245D, 104892 }, { 0x245E, 12931 }, { 0x245F, 105025 }, { 0x2460, 99975 }, { 0x2461, 104882 }, { 0x2462, 98332 }, { 0x2463, 68466 }, { 0x2464, 68563 }, { 0x2465, 98385 }, { 0x2466, 99968 }, { 0x2467, 104875 }, { 0x2468, 99999 }, { 0x2469, 104906 }, { 0x246A, 105071 }, { 0x246B, 104760 }, { 0x246C, 68414 }, { 0x246D, 98275 }, { 0x246E, 104730 }, { 0x246F, 104722 }, { 0x2470, 105030 }, { 0x2471, 105044 }, { 0x2472, 105035 }, { 0x2473, 100110 }, { 0x2474, 105017 }, { 0x2475, 99991 }, { 0x2476, 104898 }, { 0x2477, 99782 }, { 0x2478, 104674 }, { 0x2479, 99791 }, { 0x247A, 104683 }, { 0x247B, 32695 }, { 0x247C, 32621 }, { 0x247D, 32722 }, { 0x247E, 32637 }, { 0x247F, 34605 }, { 0x2480, 34666 }, { 0x2481, 32715 }, { 0x2482, 32630 }, { 0x2483, 34598 }, { 0x2484, 34659 }, { 0x2485, 53721 }, { 0x2486, 61071 }, { 0x2487, 34610 }, { 0x2488, 32649 }, { 0x2489, 61065 }, { 0x248A, 53715 }, { 0x248B, 32642 }, { 0x248C, 32727 }, { 0x248D, 15333 }, { 0x248E, 15743 }, { 0x248F, 15749 }, { 0x2490, 15731 }, { 0x2491, 15737 }, { 0x2492, 104652 }, { 0x2493, 99751 }, { 0x2494, 10820 }, { 0x2495, 43941 }, { 0x2496, 10814 }, { 0x2497, 10824 }, { 0x2498, 31406 }, { 0x2499, 31372 }, { 0x249A, 114900 }, { 0x249B, 90511 }, { 0x249C, 104796 }, { 0x249D, 99899 }, { 0x249E, 34348 }, { 0x249F, 104713 }, { 0x24A0, 99821 }, { 0x24A1, 104826 }, { 0x24A2, 12907 }, { 0x24A3, 68641 }, { 0x24A4, 12788 }, { 0x24A5, 12795 }, { 0x24A6, 331 }, { 0x24A7, 324 }, { 0x24A8, 12781 }, { 0x24A9, 338 }, { 0x24AA, 12802 }, { 0x24AB, 317 }, { 0x24AC, 100011 }, { 0x24AD, 104918 }, { 0x24AE, 68602 }, { 0x24AF, 98427 }, { 0x24B0, 100055 }, { 0x24B1, 104962 }, { 0x24B2, 68566 }, { 0x24B3, 98391 }, { 0x24B4, 100018 }, { 0x24B5, 104925 }, { 0x24B6, 68609 }, { 0x24B7, 98434 }, { 0x24B8, 100062 }, { 0x24B9, 104969 }, { 0x24BA, 68573 }, { 0x24BB, 98398 }, { 0x24BC, 100033 }, { 0x24BD, 68580 }, { 0x24BE, 104951 }, { 0x24BF, 98416 }, { 0x24C0, 100044 }, { 0x24C1, 100069 }, { 0x24C2, 104940 }, { 0x24C3, 104976 }, { 0x24C4, 100025 }, { 0x24C5, 100080 }, { 0x24C6, 104932 }, { 0x24C7, 104987 }, { 0x24C8, 68591 }, { 0x24C9, 98405 }, { 0x24CA, 33682 }, { 0x24CB, 46277 }, { 0x24CC, 35271 }, { 0x24CD, 99905 }, { 0x24CE, 104802 }, { 0x24CF, 104807 }, { 0x24D0, 100380 }, { 0x24D1, 99937 }, { 0x24D2, 109904 }, { 0x24D3, 54511 }, { 0x24D4, 99933 }, { 0x24D5, 86344 }, { 0x24D6, 12809 }, { 0x24D7, 33552 }, { 0x24D8, 373 }, { 0x24D9, 12497 }, { 0x24DA, 57185 }, { 0x24DB, 26 }, { 0x24DC, 29 }, { 0x24DD, 12962 }, { 0x24DE, 33647 }, { 0x24DF, 12983 }, { 0x24E0, 33668 }, { 0x24E1, 16 }, { 0x24E2, 37 }, { 0x24E3, 21 }, { 0x24E4, 42 }, { 0x24E5, 13051 }, { 0x24E6, 33739 }, { 0x24E7, 13030 }, { 0x24E8, 33726 }, { 0x24E9, 13038 }, { 0x24EA, 33718 }, { 0x24EB, 12835 }, { 0x24EC, 33591 }, { 0x24ED, 12765 }, { 0x24EE, 33540 }, { 0x24EF, 46055 }, { 0x24F0, 46084 }, { 0x24F1, 12850 }, { 0x24F2, 33615 }, { 0x24F3, 46032 }, { 0x24F4, 86899 }, { 0x24F5, 83323 }, { 0x24F6, 33596 }, { 0x24F7, 83327 }, { 0x24F8, 15721 }, { 0x24F9, 15380 }, { 0x24FA, 102064 }, { 0x24FB, 102060 }, { 0x24FC, 57214 }, { 0x24FD, 86068 }, { 0x24FE, 15725 }, { 0x24FF, 86070 }, { 0x2500, 64503 }, { 0x2501, 64507 }, { 0x2502, 83239 }, { 0x2503, 83227 }, { 0x2504, 83263 }, { 0x2505, 83251 }, { 0x2506, 83299 }, { 0x2507, 83275 }, { 0x2508, 83311 }, { 0x2509, 83287 }, { 0x250A, 86076 }, { 0x250B, 19680 }, { 0x250C, 19674 }, { 0x250D, 19668 }, { 0x250E, 19662 }, { 0x250F, 44809 }, { 0x2510, 59936 }, { 0x2511, 59931 }, { 0x2512, 59775 }, { 0x2513, 60116 }, { 0x2514, 44817 }, { 0x2515, 44813 }, { 0x2516, 60124 }, { 0x2517, 383 }, { 0x2518, 59445 }, { 0x2519, 59448 }, { 0x251A, 60104 }, { 0x251B, 60114 }, { 0x251C, 44787 }, { 0x251D, 44764 }, { 0x251E, 67053 }, { 0x251F, 67062 }, { 0x2520, 67074 }, { 0x2521, 67043 }, { 0x2522, 67060 }, { 0x2523, 10905 }, { 0x2524, 86685 }, { 0x2525, 86698 }, { 0x2526, 4 }, { 0x2527, 86689 }, { 0x2528, 33794 }, { 0x2529, 13097 }, { 0x252A, 86816 }, { 0x252B, 43992 }, { 0x252C, 43997 }, { 0x252D, 18889 }, { 0x252E, 35278 }, { 0x252F, 35283 }, { 0x2530, 35991 }, { 0x2531, 19120 }, { 0x2532, 13070 }, { 0x2533, 33758 }, { 0x2534, 13000 }, { 0x2535, 33688 }, { 0x2536, 104153 }, { 0x2537, 10811 }, { 0x2538, 82330 }, { 0x2539, 109768 }, { 0x253A, 54242 }, { 0x253B, 99523 }, { 0x253C, 65691 }, { 0x253D, 46229 }, { 0x253E, 46234 }, { 0x253F, 99514 }, { 0x2540, 46338 }, { 0x2541, 115865 }, { 0x2542, 115032 }, { 0x2543, 115038 }, { 0x2544, 19045 }, { 0x2545, 19062 }, { 0x2546, 35775 }, { 0x2547, 18907 }, { 0x2548, 109782 }, { 0x2549, 109773 }, { 0x254A, 109785 }, { 0x254B, 109776 }, { 0x254C, 109779 }, { 0x254D, 109770 }, { 0x254E, 114879 }, { 0x254F, 65186 }, { 0x2550, 66634 }, { 0x2551, 65181 }, { 0x2552, 4452 }, { 0x2553, 4449 }, { 0x2554, 46060 }, { 0x2555, 57148 }, { 0x2556, 115287 }, { 0x2557, 115912 }, { 0x2558, 15259 }, { 0x2559, 13900 }, { 0x255A, 32588 }, { 0x255B, 32592 }, { 0x255C, 32596 }, { 0x255D, 32566 }, { 0x255E, 32571 }, { 0x255F, 32584 }, { 0x2560, 32580 }, { 0x2561, 10915 }, { 0x2562, 10911 }, { 0x2563, 32561 }, { 0x2564, 52775 }, { 0x2565, 102108 }, { 0x2566, 101763 }, { 0x2567, 46302 }, { 0x2568, 82343 }, { 0x2569, 82367 }, { 0x256A, 105529 }, { 0x256B, 114918 }, { 0x256C, 13141 }, { 0x256D, 13148 }, { 0x256E, 13135 }, { 0x256F, 82362 }, { 0x2570, 104637 }, { 0x2571, 82353 }, { 0x2572, 82336 }, { 0x2573, 82359 }, { 0x2574, 82340 }, { 0x2575, 82347 }, { 0x2576, 82350 }, { 0x2577, 12731 }, { 0x2578, 23993 }, { 0x2579, 59 }, { 0x257A, 51 }, { 0x257B, 55 }, { 0x257C, 14577 }, { 0x257D, 14598 }, { 0x257E, 14583 }, { 0x257F, 14567 }, { 0x2580, 14588 }, { 0x2581, 14593 }, { 0x2582, 14572 }, { 0x2583, 32517 }, { 0x2584, 32512 }, { 0x2585, 32527 }, { 0x2586, 32522 }, { 0x2587, 14551 }, { 0x2588, 14557 }, { 0x2589, 57292 }, { 0x258A, 115900 }, { 0x258B, 115905 }, { 0x258C, 105477 }, { 0x258D, 34571 }, { 0x258E, 115879 }, { 0x258F, 115885 }, { 0x2590, 60118 }, { 0x2591, 115891 }, { 0x2592, 59784 }, { 0x2593, 14563 }, { 0x2594, 32508 }, { 0x2595, 115896 }, { 0x2596, 82373 }, { 0x2597, 101812 }, { 0x2598, 63 }, { 0x2599, 109688 }, { 0x259A, 109941 }, { 0x259B, 35300 }, { 0x259C, 35308 }, { 0x259D, 109948 }, { 0x259E, 109944 }, { 0x259F, 35304 }, { 0x25A0, 35316 }, { 0x25A1, 109956 }, { 0x25A2, 35311 }, { 0x25A3, 109951 }, { 0x25A4, 35319 }, { 0x25A5, 109959 }, { 0x25A6, 44837 }, { 0x25A7, 44874 }, { 0x25A8, 46109 }, { 0x25A9, 46106 }, { 0x25AA, 44841 }, { 0x25AB, 61779 }, { 0x25AC, 61747 }, { 0x25AD, 46161 }, { 0x25AE, 46158 }, { 0x25AF, 10931 }, { 0x25B0, 10927 }, { 0x25B1, 66551 }, { 0x25B2, 66554 }, { 0x25B3, 61772 }, { 0x25B4, 61794 }, { 0x25B5, 61762 }, { 0x25B6, 61803 }, { 0x25B7, 61767 }, { 0x25B8, 61784 }, { 0x25B9, 61799 }, { 0x25BA, 61789 }, { 0x25BB, 34378 }, { 0x25BC, 61752 }, { 0x25BD, 61757 }, { 0x25BE, 47 }, { 0x25BF, 33 }, { 0x25C0, 46242 }, { 0x25C1, 99519 }, { 0x25C2, 57189 }, { 0x25C3, 57196 }, { 0x25C4, 35256 }, { 0x25C5, 35261 }, { 0x25C6, 66075 }, { 0x25C7, 92068 }, { 0x25C8, 46282 }, { 0x25C9, 36298 }, { 0x25CA, 114951 }, { 0x25CB, 46262 }, { 0x25CC, 14604 }, { 0x25CD, 46267 }, { 0x25CE, 46068 }, { 0x25CF, 10923 }, { 0x25D0, 35228 }, { 0x25D1, 46247 }, { 0x25D2, 103695 }, { 0x25D3, 100352 }, { 0x25D4, 109870 }, { 0x25D5, 100356 }, { 0x25D6, 109874 }, { 0x25D7, 100283 }, { 0x25D8, 109801 }, { 0x25D9, 100305 }, { 0x25DA, 109823 }, { 0x25DB, 100288 }, { 0x25DC, 109806 }, { 0x25DD, 100296 }, { 0x25DE, 109814 }, { 0x25DF, 100317 }, { 0x25E0, 109838 }, { 0x25E1, 100327 }, { 0x25E2, 109845 }, { 0x25E3, 100323 }, { 0x25E4, 109841 }, { 0x25E5, 100384 }, { 0x25E6, 109908 }, { 0x25E7, 100361 }, { 0x25E8, 109879 }, { 0x25E9, 100366 }, { 0x25EA, 109884 }, { 0x25EB, 100390 }, { 0x25EC, 109898 }, { 0x25ED, 100371 }, { 0x25EE, 109889 }, { 0x25EF, 66513 }, { 0x25F0, 66526 }, { 0x25F1, 66518 }, { 0x25F2, 66531 }, { 0x25F3, 105541 }, { 0x25F4, 105546 }, { 0x25F5, 105551 }, { 0x25F6, 105557 }, { 0x25F7, 66057 }, { 0x25F8, 66060 }, { 0x25F9, 66063 }, { 0x25FA, 66069 }, { 0x25FB, 46095 }, { 0x25FC, 46103 }, { 0x25FD, 46098 }, { 0x25FE, 109933 }, { 0x25FF, 109919 }, { 0x2600, 100401 }, { 0x2601, 109922 }, { 0x2602, 100405 }, { 0x2603, 109926 }, { 0x2604, 66557 }, { 0x2605, 49504 }, { 0x2606, 66559 }, { 0x2607, 49506 }, { 0x2608, 46257 }, { 0x2609, 85839 }, { 0x260A, 86274 }, { 0x260B, 85833 }, { 0x260C, 86268 }, { 0x260D, 85829 }, { 0x260E, 86264 }, { 0x260F, 85813 }, { 0x2610, 86248 }, { 0x2611, 85824 }, { 0x2612, 86259 }, { 0x2613, 85818 }, { 0x2614, 86253 }, { 0x2615, 46172 }, { 0x2616, 46177 }, { 0x2617, 54492 }, { 0x2618, 86325 }, { 0x2619, 54495 }, { 0x261A, 86328 }, { 0x261B, 54500 }, { 0x261C, 86333 }, { 0x261D, 54456 }, { 0x261E, 86289 }, { 0x261F, 54487 }, { 0x2620, 86320 }, { 0x2621, 54476 }, { 0x2622, 86309 }, { 0x2623, 54481 }, { 0x2624, 86314 }, { 0x2625, 54470 }, { 0x2626, 86303 }, { 0x2627, 54144 }, { 0x2628, 54313 }, { 0x2629, 44848 }, { 0x262A, 44865 }, { 0x262B, 44850 }, { 0x262C, 44867 }, { 0x262D, 54508 }, { 0x262E, 86338 }, { 0x262F, 54505 }, { 0x2630, 86341 }, { 0x2631, 86356 }, { 0x2632, 86348 }, { 0x2633, 61052 }, { 0x2634, 101757 }, { 0x2635, 109430 }, { 0x2636, 61085 }, { 0x2637, 104532 }, { 0x2638, 34341 }, { 0x2639, 34333 }, { 0x263A, 34310 }, { 0x263B, 115852 }, { 0x263C, 86826 }, { 0x263D, 46184 }, { 0x263E, 86821 }, { 0x263F, 46189 }, { 0x2640, 13324 }, { 0x2641, 34336 }, { 0x2642, 34313 }, { 0x2643, 34318 }, { 0x2644, 46052 }, { 0x2645, 46046 }, { 0x2646, 46112 }, { 0x2647, 86094 }, { 0x2648, 12449 }, { 0x2649, 86874 }, { 0x264A, 86879 }, { 0x264B, 12502 }, { 0x264C, 85411 }, { 0x264D, 85407 }, { 0x264E, 57180 }, { 0x264F, 57169 }, { 0x2650, 57150 }, { 0x2651, 57157 }, { 0x2652, 57160 }, { 0x2653, 105563 }, { 0x2654, 105569 }, { 0x2655, 57163 }, { 0x2656, 24002 }, { 0x2657, 46167 }, { 0x2658, 35982 }, { 0x2659, 32576 }, { 0x265A, 32660 }, { 0x265B, 32738 }, { 0x265C, 34621 }, { 0x265D, 34675 }, { 0x265E, 12917 }, { 0x265F, 99941 }, { 0x2660, 68482 }, { 0x2661, 98348 }, { 0x2662, 32656 }, { 0x2663, 32734 }, { 0x2664, 34617 }, { 0x2665, 34671 }, { 0x2666, 12913 }, { 0x2667, 353 }, { 0x2668, 104700 }, { 0x2669, 104695 }, { 0x266A, 99808 }, { 0x266B, 99803 }, { 0x266C, 54169 }, { 0x266D, 54228 }, { 0x266E, 54221 }, { 0x266F, 54179 }, { 0x2670, 60682 }, { 0x2671, 60687 }, { 0x2672, 60677 }, { 0x2673, 60692 }, { 0x2674, 46038 }, { 0x2675, 18837 }, { 0x2676, 35731 }, { 0x2677, 18795 }, { 0x2678, 35691 }, { 0x2679, 19094 }, { 0x267A, 35968 }, { 0x267B, 35939 }, { 0x267C, 19060 }, { 0x267D, 104140 }, { 0x267E, 18834 }, { 0x267F, 18983 }, { 0x2680, 35822 }, { 0x2681, 18986 }, { 0x2682, 35825 }, { 0x2683, 18870 }, { 0x2684, 18873 }, { 0x2685, 35755 }, { 0x2686, 19140 }, { 0x2687, 36002 }, { 0x2688, 19110 }, { 0x2689, 35985 }, { 0x268A, 12840 }, { 0x268B, 35219 }, { 0x268C, 12845 }, { 0x268D, 13367 }, { 0x268E, 100158 }, { 0x268F, 100145 }, { 0x2690, 100118 }, { 0x2691, 100164 }, { 0x2692, 99863 }, { 0x2693, 99838 }, { 0x2694, 99830 }, { 0x2695, 100123 }, { 0x2696, 100137 }, { 0x2697, 100128 }, { 0x2698, 99929 }, { 0x2699, 15328 }, { 0x269A, 46272 }, { 0x269B, 65164 }, { 0x269C, 99922 }, { 0x269D, 104834 }, { 0x269E, 104830 }, { 0x269F, 100107 }, { 0x26A0, 105014 }, { 0x26A1, 65170 }, { 0x26A2, 104819 }, { 0x26A3, 35266 }, { 0x26A4, 99910 }, { 0x26A5, 99916 }, { 0x26A6, 104813 }, { 0x26A7, 98551 }, { 0x26A8, 34344 }, { 0x26A9, 34354 }, { 0x26AA, 35812 }, { 0x26AB, 18864 }, { 0x26AC, 35749 }, { 0x26AD, 19234 }, { 0x26AE, 36062 }, { 0x26AF, 22847 }, { 0x26B0, 22763 }, { 0x26B1, 22935 }, { 0x26B2, 22933 }, { 0x26B3, 23000 }, { 0x26B4, 66539 }, { 0x26B5, 105517 }, { 0x26B6, 66545 }, { 0x26B7, 105523 }, { 0x26B8, 12074 }, { 0x26B9, 34325 }, { 0x26BA, 100197 }, { 0x26BB, 68656 }, { 0x26BC, 105100 }, { 0x26BD, 98475 }, { 0x26BE, 12946 }, { 0x26BF, 369 }, { 0x26C0, 32763 }, { 0x26C1, 32685 }, { 0x26C2, 34646 }, { 0x26C3, 34700 }, { 0x26C4, 100271 }, { 0x26C5, 68724 }, { 0x26C6, 105174 }, { 0x26C7, 98543 }, { 0x26C8, 90549 }, { 0x26C9, 114930 }, { 0x26CA, 100200 }, { 0x26CB, 68659 }, { 0x26CC, 105103 }, { 0x26CD, 98478 }, { 0x26CE, 32767 }, { 0x26CF, 32689 }, { 0x26D0, 34650 }, { 0x26D1, 34704 }, { 0x26D2, 100252 }, { 0x26D3, 68697 }, { 0x26D4, 105155 }, { 0x26D5, 98516 }, { 0x26D6, 104117 }, { 0x26D7, 86834 }, { 0x26D8, 100205 }, { 0x26D9, 68716 }, { 0x26DA, 105108 }, { 0x26DB, 98535 }, { 0x26DC, 100275 }, { 0x26DD, 68728 }, { 0x26DE, 105178 }, { 0x26DF, 98547 }, { 0x26E0, 99944 }, { 0x26E1, 68485 }, { 0x26E2, 104841 }, { 0x26E3, 98351 }, { 0x26E4, 114935 }, { 0x26E5, 114940 }, { 0x26E6, 114925 }, { 0x26E7, 114920 }, { 0x26E8, 53676 }, { 0x26E9, 53678 }, { 0x26EA, 64470 }, { 0x26EB, 64472 }, { 0x26EC, 12655 }, { 0x26ED, 104838 }, { 0x26EE, 67170 }, { 0x26EF, 67189 }, { 0x26F0, 67179 }, { 0x26F1, 67184 }, { 0x26F2, 19125 }, { 0x26F3, 19082 }, { 0x26F4, 19152 }, { 0x26F5, 19116 }, { 0x26F6, 98489 }, { 0x26F7, 98496 }, { 0x26F8, 68670 }, { 0x26F9, 68677 }, { 0x26FA, 100218 }, { 0x26FB, 105121 }, { 0x26FC, 100225 }, { 0x26FD, 105128 }, { 0x26FE, 18930 }, { 0x26FF, 18936 }, { 0x2700, 18918 }, { 0x2701, 18924 }, { 0x2702, 18942 }, { 0x2703, 18954 }, { 0x2704, 18948 }, { 0x2705, 18960 }, { 0x2706, 53691 }, { 0x2707, 53695 }, { 0x2708, 53683 }, { 0x2709, 53687 }, { 0x270A, 53699 }, { 0x270B, 53707 }, { 0x270C, 53703 }, { 0x270D, 53711 }, { 0x270E, 68526 }, { 0x270F, 393 }, { 0x2710, 43898 }, { 0x2711, 59115 }, { 0x2712, 59124 }, { 0x2713, 19037 }, { 0x2714, 19055 }, { 0x2715, 57220 }, { 0x2716, 104143 }, { 0x2717, 19064 }, { 0x2718, 18993 }, { 0x2719, 19002 }, { 0x271A, 19011 }, { 0x271B, 19020 }, { 0x271C, 10832 }, { 0x271D, 43945 }, { 0x271E, 31042 }, { 0x271F, 65210 }, { 0x2720, 35663 }, { 0x2721, 65216 }, { 0x2722, 54415 }, { 0x2723, 109432 }, { 0x2724, 100152 }, { 0x2725, 68647 }, { 0x2726, 105059 }, { 0x2727, 98466 }, { 0x2728, 103919 }, { 0x2729, 103948 }, { 0x272A, 103972 }, { 0x272B, 104048 }, { 0x272C, 103988 }, { 0x272D, 104024 }, { 0x272E, 104090 }, { 0x272F, 103992 }, { 0x2730, 104044 }, { 0x2731, 103960 }, { 0x2732, 104052 }, { 0x2733, 103903 }, { 0x2734, 104032 }, { 0x2735, 103964 }, { 0x2736, 104073 }, { 0x2737, 104077 }, { 0x2738, 104000 }, { 0x2739, 103928 }, { 0x273A, 104036 }, { 0x273B, 104004 }, { 0x273C, 104008 }, { 0x273D, 104040 }, { 0x273E, 103944 }, { 0x273F, 103996 }, { 0x2740, 103956 }, { 0x2741, 103932 }, { 0x2742, 103907 }, { 0x2743, 103968 }, { 0x2744, 103940 }, { 0x2745, 104028 }, { 0x2746, 103936 }, { 0x2747, 103984 }, { 0x2748, 103980 }, { 0x2749, 103976 }, { 0x274A, 104085 }, { 0x274B, 103915 }, { 0x274C, 104012 }, { 0x274D, 104017 }, { 0x274E, 103911 }, { 0x274F, 104063 }, { 0x2750, 103923 }, { 0x2751, 104057 }, { 0x2752, 103952 }, { 0x2753, 104069 }, { 0x2754, 104081 }, { 0x2755, 104099 }, { 0x2756, 104094 }, { 0x2757, 103718 }, { 0x2758, 103747 }, { 0x2759, 103771 }, { 0x275A, 103847 }, { 0x275B, 103787 }, { 0x275C, 103823 }, { 0x275D, 103889 }, { 0x275E, 103791 }, { 0x275F, 103843 }, { 0x2760, 103759 }, { 0x2761, 103851 }, { 0x2762, 103702 }, { 0x2763, 103831 }, { 0x2764, 103763 }, { 0x2765, 103872 }, { 0x2766, 103876 }, { 0x2767, 103799 }, { 0x2768, 103727 }, { 0x2769, 103835 }, { 0x276A, 103803 }, { 0x276B, 103807 }, { 0x276C, 103839 }, { 0x276D, 103743 }, { 0x276E, 103795 }, { 0x276F, 103755 }, { 0x2770, 103731 }, { 0x2771, 103706 }, { 0x2772, 103767 }, { 0x2773, 103739 }, { 0x2774, 103827 }, { 0x2775, 103735 }, { 0x2776, 103783 }, { 0x2777, 103779 }, { 0x2778, 103775 }, { 0x2779, 103884 }, { 0x277A, 103714 }, { 0x277B, 103811 }, { 0x277C, 103816 }, { 0x277D, 103710 }, { 0x277E, 103862 }, { 0x277F, 103722 }, { 0x2780, 103856 }, { 0x2781, 103751 }, { 0x2782, 103868 }, { 0x2783, 103880 }, { 0x2784, 103898 }, { 0x2785, 103893 }, { 0x2786, 29228 }, { 0x2787, 25170 }, { 0x2788, 29242 }, { 0x2789, 29709 }, { 0x278A, 29789 }, { 0x278B, 24165 }, { 0x278C, 26148 }, { 0x278D, 28931 }, { 0x278E, 24862 }, { 0x278F, 29156 }, { 0x2790, 25100 }, { 0x2791, 30465 }, { 0x2792, 26765 }, { 0x2793, 30664 }, { 0x2794, 29286 }, { 0x2795, 30731 }, { 0x2796, 30766 }, { 0x2797, 26451 }, { 0x2798, 30283 }, { 0x2799, 26496 }, { 0x279A, 26439 }, { 0x279B, 30614 }, { 0x279C, 27100 }, { 0x279D, 27768 }, { 0x279E, 24534 }, { 0x279F, 27492 }, { 0x27A0, 25463 }, { 0x27A1, 28079 }, { 0x27A2, 30925 }, { 0x27A3, 84769 }, { 0x27A4, 29910 }, { 0x27A5, 30452 }, { 0x27A6, 45490 }, { 0x27A7, 45182 }, { 0x27A8, 45518 }, { 0x27A9, 45210 }, { 0x27AA, 45530 }, { 0x27AB, 45222 }, { 0x27AC, 45526 }, { 0x27AD, 45218 }, { 0x27AE, 45368 }, { 0x27AF, 45060 }, { 0x27B0, 45482 }, { 0x27B1, 45174 }, { 0x27B2, 45522 }, { 0x27B3, 45214 }, { 0x27B4, 45494 }, { 0x27B5, 45186 }, { 0x27B6, 45554 }, { 0x27B7, 45246 }, { 0x27B8, 45534 }, { 0x27B9, 45226 }, { 0x27BA, 45502 }, { 0x27BB, 45194 }, { 0x27BC, 45538 }, { 0x27BD, 45230 }, { 0x27BE, 45344 }, { 0x27BF, 45036 }, { 0x27C0, 45348 }, { 0x27C1, 45040 }, { 0x27C2, 45380 }, { 0x27C3, 45072 }, { 0x27C4, 45336 }, { 0x27C5, 45028 }, { 0x27C6, 45352 }, { 0x27C7, 45044 }, { 0x27C8, 45356 }, { 0x27C9, 45048 }, { 0x27CA, 45514 }, { 0x27CB, 45206 }, { 0x27CC, 45486 }, { 0x27CD, 45178 }, { 0x27CE, 45360 }, { 0x27CF, 45052 }, { 0x27D0, 45340 }, { 0x27D1, 45032 }, { 0x27D2, 45376 }, { 0x27D3, 45068 }, { 0x27D4, 45478 }, { 0x27D5, 45170 }, { 0x27D6, 45474 }, { 0x27D7, 45166 }, { 0x27D8, 45583 }, { 0x27D9, 45275 }, { 0x27DA, 45390 }, { 0x27DB, 45082 }, { 0x27DC, 45603 }, { 0x27DD, 45295 }, { 0x27DE, 45593 }, { 0x27DF, 45285 }, { 0x27E0, 45578 }, { 0x27E1, 45270 }, { 0x27E2, 45598 }, { 0x27E3, 45290 }, { 0x27E4, 45420 }, { 0x27E5, 45112 }, { 0x27E6, 45542 }, { 0x27E7, 45234 }, { 0x27E8, 45558 }, { 0x27E9, 45250 }, { 0x27EA, 45432 }, { 0x27EB, 45124 }, { 0x27EC, 45402 }, { 0x27ED, 45094 }, { 0x27EE, 45563 }, { 0x27EF, 45255 }, { 0x27F0, 45588 }, { 0x27F1, 45280 }, { 0x27F2, 45426 }, { 0x27F3, 45118 }, { 0x27F4, 45384 }, { 0x27F5, 45076 }, { 0x27F6, 45573 }, { 0x27F7, 45265 }, { 0x27F8, 45414 }, { 0x27F9, 45106 }, { 0x27FA, 45408 }, { 0x27FB, 45100 }, { 0x27FC, 45444 }, { 0x27FD, 45136 }, { 0x27FE, 45396 }, { 0x27FF, 45088 }, { 0x2800, 45438 }, { 0x2801, 45130 }, { 0x2802, 45468 }, { 0x2803, 45160 }, { 0x2804, 45450 }, { 0x2805, 45142 }, { 0x2806, 45456 }, { 0x2807, 45148 }, { 0x2808, 45462 }, { 0x2809, 45154 }, { 0x280A, 45318 }, { 0x280B, 45310 }, { 0x280C, 45314 }, { 0x280D, 45333 }, { 0x280E, 45325 }, { 0x280F, 45321 }, { 0x2810, 45329 }, { 0x2811, 45608 }, { 0x2812, 45300 }, { 0x2813, 45613 }, { 0x2814, 45305 }, { 0x2815, 45622 }, { 0x2816, 45626 }, { 0x2817, 45630 }, { 0x2818, 45568 }, { 0x2819, 45260 }, { 0x281A, 44882 }, { 0x281B, 44892 }, { 0x281C, 44898 }, { 0x281D, 44887 }, { 0x281E, 45618 }, { 0x281F, 44904 }, { 0x2820, 45634 }, { 0x2821, 80624 }, { 0x2822, 80660 }, { 0x2823, 80676 }, { 0x2824, 80672 }, { 0x2825, 80628 }, { 0x2826, 80740 }, { 0x2827, 80748 }, { 0x2828, 80732 }, { 0x2829, 80636 }, { 0x282A, 80700 }, { 0x282B, 80704 }, { 0x282C, 80708 }, { 0x282D, 80712 }, { 0x282E, 80640 }, { 0x282F, 80716 }, { 0x2830, 80780 }, { 0x2831, 80724 }, { 0x2832, 80728 }, { 0x2833, 80736 }, { 0x2834, 80644 }, { 0x2835, 80772 }, { 0x2836, 80768 }, { 0x2837, 80760 }, { 0x2838, 80720 }, { 0x2839, 80776 }, { 0x283A, 80756 }, { 0x283B, 80664 }, { 0x283C, 80696 }, { 0x283D, 80668 }, { 0x283E, 80752 }, { 0x283F, 80744 }, { 0x2840, 80764 }, { 0x2841, 80680 }, { 0x2842, 80632 }, { 0x2843, 80688 }, { 0x2844, 80648 }, { 0x2845, 80684 }, { 0x2846, 80692 }, { 0x2847, 80652 }, { 0x2848, 80656 }, { 0x2849, 86427 }, { 0x284A, 86445 }, { 0x284B, 86509 }, { 0x284C, 86454 }, { 0x284D, 86554 }, { 0x284E, 86565 }, { 0x284F, 86460 }, { 0x2850, 86448 }, { 0x2851, 86518 }, { 0x2852, 86515 }, { 0x2853, 86551 }, { 0x2854, 86502 }, { 0x2855, 86451 }, { 0x2856, 86463 }, { 0x2857, 86574 }, { 0x2858, 86557 }, { 0x2859, 86457 }, { 0x285A, 86560 }, { 0x285B, 86570 }, { 0x285C, 86524 }, { 0x285D, 86442 }, { 0x285E, 86527 }, { 0x285F, 86590 }, { 0x2860, 86478 }, { 0x2861, 86578 }, { 0x2862, 86433 }, { 0x2863, 86545 }, { 0x2864, 86602 }, { 0x2865, 86598 }, { 0x2866, 86466 }, { 0x2867, 86469 }, { 0x2868, 86472 }, { 0x2869, 86586 }, { 0x286A, 86594 }, { 0x286B, 86475 }, { 0x286C, 86439 }, { 0x286D, 86481 }, { 0x286E, 86530 }, { 0x286F, 86521 }, { 0x2870, 86582 }, { 0x2871, 86505 }, { 0x2872, 86484 }, { 0x2873, 86536 }, { 0x2874, 86533 }, { 0x2875, 86487 }, { 0x2876, 86539 }, { 0x2877, 86512 }, { 0x2878, 86542 }, { 0x2879, 86490 }, { 0x287A, 86493 }, { 0x287B, 86496 }, { 0x287C, 86499 }, { 0x287D, 86606 }, { 0x287E, 86548 }, { 0x287F, 86430 }, { 0x2880, 86436 }, { 0x2881, 86610 }, { 0x2882, 86618 }, { 0x2883, 86615 }, { 0x2884, 79743 }, { 0x2885, 79755 }, { 0x2886, 79884 }, { 0x2887, 79914 }, { 0x2888, 80310 }, { 0x2889, 79494 }, { 0x288A, 79971 }, { 0x288B, 79542 }, { 0x288C, 79776 }, { 0x288D, 80256 }, { 0x288E, 80485 }, { 0x288F, 80088 }, { 0x2890, 79569 }, { 0x2891, 80169 }, { 0x2892, 79683 }, { 0x2893, 80337 }, { 0x2894, 80145 }, { 0x2895, 80268 }, { 0x2896, 79818 }, { 0x2897, 80190 }, { 0x2898, 80196 }, { 0x2899, 80430 }, { 0x289A, 80193 }, { 0x289B, 79917 }, { 0x289C, 79929 }, { 0x289D, 79923 }, { 0x289E, 80316 }, { 0x289F, 80319 }, { 0x28A0, 79920 }, { 0x28A1, 79926 }, { 0x28A2, 79509 }, { 0x28A3, 79521 }, { 0x28A4, 79515 }, { 0x28A5, 80118 }, { 0x28A6, 80121 }, { 0x28A7, 79512 }, { 0x28A8, 79518 }, { 0x28A9, 80094 }, { 0x28AA, 80106 }, { 0x28AB, 80100 }, { 0x28AC, 80394 }, { 0x28AD, 80397 }, { 0x28AE, 80097 }, { 0x28AF, 80103 }, { 0x28B0, 80124 }, { 0x28B1, 80136 }, { 0x28B2, 80130 }, { 0x28B3, 80400 }, { 0x28B4, 80403 }, { 0x28B5, 80127 }, { 0x28B6, 80133 }, { 0x28B7, 79863 }, { 0x28B8, 79875 }, { 0x28B9, 79869 }, { 0x28BA, 80298 }, { 0x28BB, 80301 }, { 0x28BC, 79866 }, { 0x28BD, 79872 }, { 0x28BE, 79722 }, { 0x28BF, 79734 }, { 0x28C0, 79728 }, { 0x28C1, 80241 }, { 0x28C2, 80244 }, { 0x28C3, 79725 }, { 0x28C4, 79731 }, { 0x28C5, 80043 }, { 0x28C6, 80055 }, { 0x28C7, 80049 }, { 0x28C8, 80379 }, { 0x28C9, 80382 }, { 0x28CA, 80046 }, { 0x28CB, 80052 }, { 0x28CC, 79638 }, { 0x28CD, 79650 }, { 0x28CE, 79644 }, { 0x28CF, 80205 }, { 0x28D0, 80208 }, { 0x28D1, 79641 }, { 0x28D2, 79647 }, { 0x28D3, 91457 }, { 0x28D4, 91509 }, { 0x28D5, 91534 }, { 0x28D6, 91461 }, { 0x28D7, 91550 }, { 0x28D8, 91521 }, { 0x28D9, 91497 }, { 0x28DA, 91469 }, { 0x28DB, 91473 }, { 0x28DC, 91477 }, { 0x28DD, 91449 }, { 0x28DE, 91501 }, { 0x28DF, 91481 }, { 0x28E0, 91485 }, { 0x28E1, 91505 }, { 0x28E2, 91489 }, { 0x28E3, 91542 }, { 0x28E4, 91530 }, { 0x28E5, 91538 }, { 0x28E6, 91584 }, { 0x28E7, 91554 }, { 0x28E8, 91576 }, { 0x28E9, 91441 }, { 0x28EA, 91493 }, { 0x28EB, 91572 }, { 0x28EC, 91609 }, { 0x28ED, 91546 }, { 0x28EE, 91517 }, { 0x28EF, 91593 }, { 0x28F0, 91588 }, { 0x28F1, 91525 }, { 0x28F2, 91603 }, { 0x28F3, 33601 }, { 0x28F4, 33583 }, { 0x28F5, 13127 }, { 0x28F6, 33824 }, { 0x28F7, 12992 }, { 0x28F8, 33674 }, { 0x28F9, 53551 }, { 0x28FA, 53545 }, { 0x28FB, 46040 }, { 0x28FC, 13130 }, { 0x28FD, 33827 }, { 0x28FE, 53549 }, { 0x28FF, 13016 }, { 0x2900, 33704 }, { 0x2901, 98557 }, { 0x2902, 106218 }, { 0x2903, 46325 }, { 0x2904, 86099 }, { 0x2905, 109939 }, { 0x2906, 46036 }, { 0x2907, 98372 }, { 0x2908, 68550 }, { 0x2909, 46043 }, { 0x290A, 46164 }, { 0x290B, 82391 }, { 0x290C, 14534 }, { 0x290D, 48423 }, { 0x290E, 35250 }, { 0x290F, 12769 }, { 0x2910, 33544 }, { 0x2911, 35242 }, { 0x2912, 35246 }, { 0x2913, 13102 }, { 0x2914, 33799 }, { 0x2915, 10846 }, { 0x2916, 10864 }, { 0x2917, 43955 }, { 0x2918, 43968 }, { 0x2919, 13089 }, { 0x291A, 33784 }, { 0x291B, 13008 }, { 0x291C, 33696 }, { 0x291D, 10890 }, { 0x291E, 8925 }, { 0x291F, 66888 }, { 0x2920, 12629 }, { 0x2921, 86130 }, { 0x2922, 86897 }, { 0x2923, 14626 }, { 0x2924, 15361 }, { 0x2925, 57223 }, { 0x2926, 53519 }, { 0x2927, 53543 }, { 0x2928, 57270 }, { 0x2929, 45653 }, { 0x292A, 45657 }, { 0x292B, 57263 }, { 0x292C, 10836 }, { 0x292D, 57289 }, { 0x292E, 86425 }, { 0x292F, 114880 }, { 0x2930, 86831 }, { 0x2931, 57801 }, { 0x2932, 90265 }, { 0x2933, 46093 }, { 0x2934, 86074 }, { 0x2935, 46212 }, { 0x2936, 12433 }, { 0x2937, 46204 }, { 0x2938, 5696 }, { 0x2939, 5603 }, { 0x293A, 5699 }, { 0x293B, 5703 }, { 0x293C, 5707 }, { 0x293D, 5693 }, { 0x293E, 5439 }, { 0x293F, 5670 }, { 0x2940, 5632 }, { 0x2941, 5636 }, { 0x2942, 5731 }, { 0x2943, 5570 }, { 0x2944, 5651 }, { 0x2945, 5655 }, { 0x2946, 5534 }, { 0x2947, 5538 }, { 0x2948, 5546 }, { 0x2949, 5542 }, { 0x294A, 5659 }, { 0x294B, 5719 }, { 0x294C, 5662 }, { 0x294D, 5666 }, { 0x294E, 5624 }, { 0x294F, 5628 }, { 0x2950, 5522 }, { 0x2951, 5496 }, { 0x2952, 5600 }, { 0x2953, 5499 }, { 0x2954, 5564 }, { 0x2955, 5606 }, { 0x2956, 5690 }, { 0x2957, 5728 }, { 0x2958, 5676 }, { 0x2959, 5680 }, { 0x295A, 5516 }, { 0x295B, 5485 }, { 0x295C, 5489 }, { 0x295D, 5734 }, { 0x295E, 5442 }, { 0x295F, 5445 }, { 0x2960, 5531 }, { 0x2961, 5505 }, { 0x2962, 5463 }, { 0x2963, 5711 }, { 0x2964, 5715 }, { 0x2965, 5684 }, { 0x2966, 5573 }, { 0x2967, 5808 }, { 0x2968, 5466 }, { 0x2969, 5470 }, { 0x296A, 5478 }, { 0x296B, 5474 }, { 0x296C, 5561 }, { 0x296D, 5648 }, { 0x296E, 5493 }, { 0x296F, 5460 }, { 0x2970, 5482 }, { 0x2971, 5592 }, { 0x2972, 5596 }, { 0x2973, 5558 }, { 0x2974, 5687 }, { 0x2975, 5612 }, { 0x2976, 5616 }, { 0x2977, 5620 }, { 0x2978, 5673 }, { 0x2979, 5725 }, { 0x297A, 5584 }, { 0x297B, 5588 }, { 0x297C, 5764 }, { 0x297D, 5740 }, { 0x297E, 5528 }, { 0x297F, 5832 }, { 0x2980, 5820 }, { 0x2981, 5519 }, { 0x2982, 5772 }, { 0x2983, 5744 }, { 0x2984, 5576 }, { 0x2985, 5580 }, { 0x2986, 5513 }, { 0x2987, 5792 }, { 0x2988, 5550 }, { 0x2989, 5554 }, { 0x298A, 5800 }, { 0x298B, 5788 }, { 0x298C, 5640 }, { 0x298D, 5644 }, { 0x298E, 5567 }, { 0x298F, 5502 }, { 0x2990, 5836 }, { 0x2991, 5796 }, { 0x2992, 5812 }, { 0x2993, 5760 }, { 0x2994, 5448 }, { 0x2995, 5452 }, { 0x2996, 5456 }, { 0x2997, 5756 }, { 0x2998, 5525 }, { 0x2999, 5816 }, { 0x299A, 5510 }, { 0x299B, 5609 }, { 0x299C, 5780 }, { 0x299D, 5768 }, { 0x299E, 5804 }, { 0x299F, 5748 }, { 0x29A0, 5752 }, { 0x29A1, 5784 }, { 0x29A2, 5845 }, { 0x29A3, 5776 }, { 0x29A4, 5849 }, { 0x29A5, 5824 }, { 0x29A6, 5853 }, { 0x29A7, 5828 }, { 0x29A8, 5722 }, { 0x29A9, 5857 }, { 0x29AA, 5841 }, { 0x29AB, 48709 }, { 0x29AC, 48877 }, { 0x29AD, 48667 }, { 0x29AE, 49068 }, { 0x29AF, 49189 }, { 0x29B0, 48847 }, { 0x29B1, 48739 }, { 0x29B2, 48694 }, { 0x29B3, 48697 }, { 0x29B4, 48871 }, { 0x29B5, 49000 }, { 0x29B6, 48997 }, { 0x29B7, 48796 }, { 0x29B8, 48988 }, { 0x29B9, 48688 }, { 0x29BA, 49104 }, { 0x29BB, 48896 }, { 0x29BC, 49027 }, { 0x29BD, 49039 }, { 0x29BE, 48961 }, { 0x29BF, 49089 }, { 0x29C0, 49042 }, { 0x29C1, 49170 }, { 0x29C2, 48736 }, { 0x29C3, 49289 }, { 0x29C4, 48915 }, { 0x29C5, 48982 }, { 0x29C6, 49256 }, { 0x29C7, 48964 }, { 0x29C8, 49036 }, { 0x29C9, 49286 }, { 0x29CA, 48994 }, { 0x29CB, 49259 }, { 0x29CC, 48642 }, { 0x29CD, 48645 }, { 0x29CE, 49238 }, { 0x29CF, 48655 }, { 0x29D0, 49125 }, { 0x29D1, 48979 }, { 0x29D2, 48909 }, { 0x29D3, 48853 }, { 0x29D4, 49077 }, { 0x29D5, 48862 }, { 0x29D6, 49146 }, { 0x29D7, 49198 }, { 0x29D8, 49274 }, { 0x29D9, 49047 }, { 0x29DA, 48958 }, { 0x29DB, 49253 }, { 0x29DC, 49214 }, { 0x29DD, 48670 }, { 0x29DE, 49064 }, { 0x29DF, 49156 }, { 0x29E0, 48883 }, { 0x29E1, 48742 }, { 0x29E2, 49056 }, { 0x29E3, 48658 }, { 0x29E4, 49080 }, { 0x29E5, 49229 }, { 0x29E6, 48927 }, { 0x29E7, 49021 }, { 0x29E8, 49244 }, { 0x29E9, 48793 }, { 0x29EA, 48838 }, { 0x29EB, 49143 }, { 0x29EC, 48715 }, { 0x29ED, 49186 }, { 0x29EE, 49149 }, { 0x29EF, 48652 }, { 0x29F0, 49201 }, { 0x29F1, 48703 }, { 0x29F2, 48733 }, { 0x29F3, 48727 }, { 0x29F4, 48890 }, { 0x29F5, 48939 }, { 0x29F6, 48859 }, { 0x29F7, 48930 }, { 0x29F8, 48991 }, { 0x29F9, 49223 }, { 0x29FA, 48638 }, { 0x29FB, 49235 }, { 0x29FC, 48685 }, { 0x29FD, 48781 }, { 0x29FE, 49095 }, { 0x29FF, 49116 }, { 0x2A00, 48812 }, { 0x2A01, 48784 }, { 0x2A02, 49167 }, { 0x2A03, 49160 }, { 0x2A04, 48833 }, { 0x2A05, 49074 }, { 0x2A06, 48809 }, { 0x2A07, 48661 }, { 0x2A08, 48664 }, { 0x2A09, 49277 }, { 0x2A0A, 48856 }, { 0x2A0B, 49030 }, { 0x2A0C, 48936 }, { 0x2A0D, 49101 }, { 0x2A0E, 48874 }, { 0x2A0F, 48746 }, { 0x2A10, 49003 }, { 0x2A11, 48764 }, { 0x2A12, 49280 }, { 0x2A13, 49152 }, { 0x2A14, 49122 }, { 0x2A15, 48924 }, { 0x2A16, 48790 }, { 0x2A17, 48679 }, { 0x2A18, 49086 }, { 0x2A19, 48967 }, { 0x2A1A, 49098 }, { 0x2A1B, 49195 }, { 0x2A1C, 49113 }, { 0x2A1D, 49015 }, { 0x2A1E, 48775 }, { 0x2A1F, 49092 }, { 0x2A20, 49137 }, { 0x2A21, 48906 }, { 0x2A22, 48921 }, { 0x2A23, 48691 }, { 0x2A24, 48700 }, { 0x2A25, 49050 }, { 0x2A26, 49241 }, { 0x2A27, 48706 }, { 0x2A28, 48649 }, { 0x2A29, 48900 }, { 0x2A2A, 48673 }, { 0x2A2B, 48976 }, { 0x2A2C, 48887 }, { 0x2A2D, 49271 }, { 0x2A2E, 48918 }, { 0x2A2F, 49131 }, { 0x2A30, 49180 }, { 0x2A31, 49208 }, { 0x2A32, 49183 }, { 0x2A33, 48758 }, { 0x2A34, 49283 }, { 0x2A35, 48985 }, { 0x2A36, 49018 }, { 0x2A37, 49107 }, { 0x2A38, 49174 }, { 0x2A39, 48973 }, { 0x2A3A, 48945 }, { 0x2A3B, 49232 }, { 0x2A3C, 48949 }, { 0x2A3D, 48730 }, { 0x2A3E, 48850 }, { 0x2A3F, 49192 }, { 0x2A40, 49220 }, { 0x2A41, 48749 }, { 0x2A42, 48712 }, { 0x2A43, 49134 }, { 0x2A44, 49053 }, { 0x2A45, 48721 }, { 0x2A46, 48724 }, { 0x2A47, 48818 }, { 0x2A48, 48761 }, { 0x2A49, 48772 }, { 0x2A4A, 49140 }, { 0x2A4B, 49250 }, { 0x2A4C, 48942 }, { 0x2A4D, 48778 }, { 0x2A4E, 48955 }, { 0x2A4F, 49295 }, { 0x2A50, 49262 }, { 0x2A51, 48827 }, { 0x2A52, 48880 }, { 0x2A53, 48824 }, { 0x2A54, 49033 }, { 0x2A55, 49071 }, { 0x2A56, 49059 }, { 0x2A57, 48903 }, { 0x2A58, 48755 }, { 0x2A59, 49128 }, { 0x2A5A, 48806 }, { 0x2A5B, 49247 }, { 0x2A5C, 49204 }, { 0x2A5D, 48868 }, { 0x2A5E, 49083 }, { 0x2A5F, 48865 }, { 0x2A60, 48952 }, { 0x2A61, 48682 }, { 0x2A62, 48676 }, { 0x2A63, 48841 }, { 0x2A64, 49268 }, { 0x2A65, 49024 }, { 0x2A66, 48769 }, { 0x2A67, 48933 }, { 0x2A68, 48830 }, { 0x2A69, 49006 }, { 0x2A6A, 49298 }, { 0x2A6B, 49265 }, { 0x2A6C, 49012 }, { 0x2A6D, 48815 }, { 0x2A6E, 48752 }, { 0x2A6F, 48912 }, { 0x2A70, 48787 }, { 0x2A71, 49119 }, { 0x2A72, 48844 }, { 0x2A73, 49226 }, { 0x2A74, 49177 }, { 0x2A75, 48970 }, { 0x2A76, 49292 }, { 0x2A77, 48821 }, { 0x2A78, 49211 }, { 0x2A79, 48800 }, { 0x2A7A, 48718 }, { 0x2A7B, 48893 }, { 0x2A7C, 48803 }, { 0x2A7D, 49110 }, { 0x2A7E, 49164 }, { 0x2A7F, 49217 }, { 0x2A80, 49009 }, { 0x2A81, 106098 }, { 0x2A82, 106112 }, { 0x2A83, 106104 }, { 0x2A84, 106118 }, { 0x2A85, 106093 }, { 0x2A86, 106136 }, { 0x2A87, 106142 }, { 0x2A88, 106130 }, { 0x2A89, 106155 }, { 0x2A8A, 106162 }, { 0x2A8B, 106148 }, { 0x2A8C, 106126 }, { 0x2A8D, 105601 }, { 0x2A8E, 105595 }, { 0x2A8F, 105588 }, { 0x2A90, 19590 }, { 0x2A91, 82411 }, { 0x2A92, 105621 }, { 0x2A93, 105610 }, { 0x2A94, 105603 }, { 0x2A95, 12832 }, { 0x2A96, 33588 }, { 0x2A97, 12996 }, { 0x2A98, 33678 }, { 0x2A99, 12989 }, { 0x2A9A, 33671 }, { 0x2A9B, 12966 }, { 0x2A9C, 33651 }, { 0x2A9D, 12855 }, { 0x2A9E, 33620 }, { 0x2A9F, 53492 }, { 0x2AA0, 12704 }, { 0x2AA1, 13093 }, { 0x2AA2, 33788 }, { 0x2AA3, 12979 }, { 0x2AA4, 33664 }, { 0x2AA5, 12974 }, { 0x2AA6, 33659 }, { 0x2AA7, 12970 }, { 0x2AA8, 33655 }, { 0x2AA9, 15326 }, { 0x2AAA, 86089 }, { 0x2AAB, 46080 }, { 0x2AAC, 6213 }, { 0x2AAD, 53494 }, { 0x2AAE, 81626 }, { 0x2AAF, 81635 }, { 0x2AB0, 81653 }, { 0x2AB1, 81641 }, { 0x2AB2, 81638 }, { 0x2AB3, 81629 }, { 0x2AB4, 81650 }, { 0x2AB5, 81647 }, { 0x2AB6, 81644 }, { 0x2AB7, 105597 }, { 0x2AB8, 105606 }, { 0x2AB9, 105617 }, { 0x2ABA, 105613 }, { 0x2ABB, 46721 }, { 0x2ABC, 46435 }, { 0x2ABD, 15341 }, { 0x2ABE, 86840 }, { 0x2ABF, 86856 }, { 0x2AC0, 86850 }, { 0x2AC1, 86863 }, { 0x2AC2, 86844 }, { 0x2AC3, 59772 }, { 0x2AC4, 105624 }, { 0x2AC5, 81632 }, { 0x2AC6, 81659 }, { 0x2AC7, 81656 }, { 0x2AC8, 86907 }, { 0x2AC9, 13417 }, { 0x2ACA, 14536 }, { 0x2ACB, 106026 }, { 0x2ACC, 105591 }, { 0x2ACD, 82130 }, { 0x2ACE, 81908 }, { 0x2ACF, 82138 }, { 0x2AD0, 81914 }, { 0x2AD1, 82146 }, { 0x2AD2, 81923 }, { 0x2AD3, 82134 }, { 0x2AD4, 81911 }, { 0x2AD5, 82142 }, { 0x2AD6, 81920 }, { 0x2AD7, 81986 }, { 0x2AD8, 81956 }, { 0x2AD9, 81992 }, { 0x2ADA, 81962 }, { 0x2ADB, 81998 }, { 0x2ADC, 81968 }, { 0x2ADD, 81989 }, { 0x2ADE, 81959 }, { 0x2ADF, 81995 }, { 0x2AE0, 81965 }, { 0x2AE1, 82061 }, { 0x2AE2, 82115 }, { 0x2AE3, 82067 }, { 0x2AE4, 82121 }, { 0x2AE5, 82073 }, { 0x2AE6, 82127 }, { 0x2AE7, 82064 }, { 0x2AE8, 82118 }, { 0x2AE9, 82070 }, { 0x2AEA, 82124 }, { 0x2AEB, 82076 }, { 0x2AEC, 81941 }, { 0x2AED, 82082 }, { 0x2AEE, 81947 }, { 0x2AEF, 82158 }, { 0x2AF0, 82088 }, { 0x2AF1, 81953 }, { 0x2AF2, 82079 }, { 0x2AF3, 81944 }, { 0x2AF4, 82085 }, { 0x2AF5, 81950 }, { 0x2AF6, 82016 }, { 0x2AF7, 82022 }, { 0x2AF8, 82028 }, { 0x2AF9, 82019 }, { 0x2AFA, 82025 }, { 0x2AFB, 81971 }, { 0x2AFC, 81926 }, { 0x2AFD, 82031 }, { 0x2AFE, 81977 }, { 0x2AFF, 81932 }, { 0x2B00, 82037 }, { 0x2B01, 81983 }, { 0x2B02, 81938 }, { 0x2B03, 82043 }, { 0x2B04, 81974 }, { 0x2B05, 81929 }, { 0x2B06, 82034 }, { 0x2B07, 81980 }, { 0x2B08, 81935 }, { 0x2B09, 82040 }, { 0x2B0A, 82001 }, { 0x2B0B, 82007 }, { 0x2B0C, 82013 }, { 0x2B0D, 82004 }, { 0x2B0E, 82010 }, { 0x2B0F, 82166 }, { 0x2B10, 82106 }, { 0x2B11, 82174 }, { 0x2B12, 82112 }, { 0x2B13, 82170 }, { 0x2B14, 82109 }, { 0x2B15, 82046 }, { 0x2B16, 82052 }, { 0x2B17, 82058 }, { 0x2B18, 82049 }, { 0x2B19, 82055 }, { 0x2B1A, 82162 }, { 0x2B1B, 82094 }, { 0x2B1C, 82100 }, { 0x2B1D, 82097 }, { 0x2B1E, 82103 }, { 0x2B1F, 81917 }, { 0x2B20, 82091 }, { 0x2B21, 82150 }, { 0x2B22, 82154 }, { 0x2B23, 92058 }, { 0x2B24, 92063 }, { 0x2B25, 115952 }, { 0x2B26, 115960 }, { 0x2B27, 82189 }, { 0x2B28, 82182 }, { 0x2B29, 82186 }, { 0x2B2A, 115949 }, { 0x2B2B, 82962 }, { 0x2B2C, 82728 }, { 0x2B2D, 82970 }, { 0x2B2E, 82734 }, { 0x2B2F, 82978 }, { 0x2B30, 82743 }, { 0x2B31, 82966 }, { 0x2B32, 82731 }, { 0x2B33, 82974 }, { 0x2B34, 82740 }, { 0x2B35, 82806 }, { 0x2B36, 82776 }, { 0x2B37, 82812 }, { 0x2B38, 82782 }, { 0x2B39, 82818 }, { 0x2B3A, 82788 }, { 0x2B3B, 82809 }, { 0x2B3C, 82779 }, { 0x2B3D, 82815 }, { 0x2B3E, 82785 }, { 0x2B3F, 82881 }, { 0x2B40, 82947 }, { 0x2B41, 82887 }, { 0x2B42, 82953 }, { 0x2B43, 82893 }, { 0x2B44, 82959 }, { 0x2B45, 82884 }, { 0x2B46, 82950 }, { 0x2B47, 82890 }, { 0x2B48, 82956 }, { 0x2B49, 82896 }, { 0x2B4A, 82761 }, { 0x2B4B, 82902 }, { 0x2B4C, 82767 }, { 0x2B4D, 83054 }, { 0x2B4E, 82908 }, { 0x2B4F, 82773 }, { 0x2B50, 82899 }, { 0x2B51, 82764 }, { 0x2B52, 82905 }, { 0x2B53, 82770 }, { 0x2B54, 82836 }, { 0x2B55, 82842 }, { 0x2B56, 82848 }, { 0x2B57, 82839 }, { 0x2B58, 82845 }, { 0x2B59, 82791 }, { 0x2B5A, 82746 }, { 0x2B5B, 82851 }, { 0x2B5C, 82797 }, { 0x2B5D, 82752 }, { 0x2B5E, 82857 }, { 0x2B5F, 82803 }, { 0x2B60, 82758 }, { 0x2B61, 82863 }, { 0x2B62, 82794 }, { 0x2B63, 82749 }, { 0x2B64, 82854 }, { 0x2B65, 82800 }, { 0x2B66, 82755 }, { 0x2B67, 82860 }, { 0x2B68, 82821 }, { 0x2B69, 82827 }, { 0x2B6A, 82833 }, { 0x2B6B, 82824 }, { 0x2B6C, 82830 }, { 0x2B6D, 83062 }, { 0x2B6E, 82938 }, { 0x2B6F, 83070 }, { 0x2B70, 82944 }, { 0x2B71, 83066 }, { 0x2B72, 82941 }, { 0x2B73, 82866 }, { 0x2B74, 82872 }, { 0x2B75, 82878 }, { 0x2B76, 82869 }, { 0x2B77, 82875 }, { 0x2B78, 83058 }, { 0x2B79, 82926 }, { 0x2B7A, 82932 }, { 0x2B7B, 82929 }, { 0x2B7C, 82935 }, { 0x2B7D, 82737 }, { 0x2B7E, 82923 }, { 0x2B7F, 83002 }, { 0x2B80, 83006 }, { 0x2B81, 82911 }, { 0x2B82, 82917 }, { 0x2B83, 82914 }, { 0x2B84, 82920 }, { 0x2B85, 83078 }, { 0x2B86, 115956 }, { 0x2B87, 83088 }, { 0x2B88, 83081 }, { 0x2B89, 83085 }, { 0x2B8A, 69664 }, { 0x2B8B, 69706 }, { 0x2B8C, 69697 }, { 0x2B8D, 69676 }, { 0x2B8E, 69670 }, { 0x2B8F, 69718 }, { 0x2B90, 69700 }, { 0x2B91, 69694 }, { 0x2B92, 69679 }, { 0x2B93, 69691 }, { 0x2B94, 69682 }, { 0x2B95, 69688 }, { 0x2B96, 69709 }, { 0x2B97, 69727 }, { 0x2B98, 69808 }, { 0x2B99, 69748 }, { 0x2B9A, 69805 }, { 0x2B9B, 69712 }, { 0x2B9C, 69730 }, { 0x2B9D, 69667 }, { 0x2B9E, 69715 }, { 0x2B9F, 69661 }, { 0x2BA0, 69703 }, { 0x2BA1, 69673 }, { 0x2BA2, 69754 }, { 0x2BA3, 69733 }, { 0x2BA4, 69757 }, { 0x2BA5, 69742 }, { 0x2BA6, 69802 }, { 0x2BA7, 69739 }, { 0x2BA8, 69760 }, { 0x2BA9, 69817 }, { 0x2BAA, 69823 }, { 0x2BAB, 69763 }, { 0x2BAC, 69685 }, { 0x2BAD, 69721 }, { 0x2BAE, 69784 }, { 0x2BAF, 69724 }, { 0x2BB0, 69793 }, { 0x2BB1, 69769 }, { 0x2BB2, 69775 }, { 0x2BB3, 46547 }, { 0x2BB4, 46646 }, { 0x2BB5, 46616 }, { 0x2BB6, 46529 }, { 0x2BB7, 46622 }, { 0x2BB8, 46625 }, { 0x2BB9, 46550 }, { 0x2BBA, 46649 }, { 0x2BBB, 46535 }, { 0x2BBC, 46664 }, { 0x2BBD, 46634 }, { 0x2BBE, 46637 }, { 0x2BBF, 46589 }, { 0x2BC0, 46691 }, { 0x2BC1, 46688 }, { 0x2BC2, 46631 }, { 0x2BC3, 46526 }, { 0x2BC4, 46532 }, { 0x2BC5, 46613 }, { 0x2BC6, 46586 }, { 0x2BC7, 46505 }, { 0x2BC8, 46577 }, { 0x2BC9, 46523 }, { 0x2BCA, 46517 }, { 0x2BCB, 46601 }, { 0x2BCC, 46559 }, { 0x2BCD, 46562 }, { 0x2BCE, 46571 }, { 0x2BCF, 46568 }, { 0x2BD0, 46520 }, { 0x2BD1, 46442 }, { 0x2BD2, 46457 }, { 0x2BD3, 46478 }, { 0x2BD4, 46499 }, { 0x2BD5, 46460 }, { 0x2BD6, 46445 }, { 0x2BD7, 46502 }, { 0x2BD8, 46481 }, { 0x2BD9, 46451 }, { 0x2BDA, 46469 }, { 0x2BDB, 46493 }, { 0x2BDC, 46466 }, { 0x2BDD, 46487 }, { 0x2BDE, 46454 }, { 0x2BDF, 46496 }, { 0x2BE0, 46472 }, { 0x2BE1, 46475 }, { 0x2BE2, 46490 }, { 0x2BE3, 46463 }, { 0x2BE4, 46484 }, { 0x2BE5, 46448 }, { 0x2BE6, 46440 }, { 0x2BE7, 46610 }, { 0x2BE8, 46655 }, { 0x2BE9, 46583 }, { 0x2BEA, 46679 }, { 0x2BEB, 46712 }, { 0x2BEC, 46667 }, { 0x2BED, 46700 }, { 0x2BEE, 46685 }, { 0x2BEF, 46715 }, { 0x2BF0, 46619 }, { 0x2BF1, 46580 }, { 0x2BF2, 46676 }, { 0x2BF3, 46670 }, { 0x2BF4, 46658 }, { 0x2BF5, 46661 }, { 0x2BF6, 46706 }, { 0x2BF7, 46709 }, { 0x2BF8, 46628 }, { 0x2BF9, 46682 }, { 0x2BFA, 46673 }, { 0x2BFB, 46718 }, { 0x2BFC, 46640 }, { 0x2BFD, 46595 }, { 0x2BFE, 46643 }, { 0x2BFF, 46598 }, { 0x2C00, 46592 }, { 0x2C01, 46565 }, { 0x2C02, 46607 }, { 0x2C03, 46574 }, { 0x2C04, 46694 }, { 0x2C05, 46703 }, { 0x2C06, 46697 }, { 0x2C07, 46604 }, { 0x2C08, 46652 }, { 0x2C09, 46538 }, { 0x2C0A, 46553 }, { 0x2C0B, 46508 }, { 0x2C0C, 46556 }, { 0x2C0D, 46541 }, { 0x2C0E, 46511 }, { 0x2C0F, 46514 }, { 0x2C10, 46544 }, { 0x2C11, 106085 }, { 0x2C12, 106089 }, { 0x2C13, 106033 }, { 0x2C14, 106041 }, { 0x2C15, 106061 }, { 0x2C16, 106045 }, { 0x2C17, 106037 }, { 0x2C18, 106077 }, { 0x2C19, 106065 }, { 0x2C1A, 106053 }, { 0x2C1B, 106081 }, { 0x2C1C, 106057 }, { 0x2C1D, 106069 }, { 0x2C1E, 106073 }, { 0x2C1F, 106049 }, { 0x2C20, 106029 }, { 0x2C21, 69745 }, { 0x2C22, 69811 }, { 0x2C23, 69787 }, { 0x2C24, 69772 }, { 0x2C25, 69751 }, { 0x2C26, 69826 }, { 0x2C27, 69799 }, { 0x2C28, 69838 }, { 0x2C29, 69781 }, { 0x2C2A, 69820 }, { 0x2C2B, 69829 }, { 0x2C2C, 69841 }, { 0x2C2D, 69778 }, { 0x2C2E, 69832 }, { 0x2C2F, 69844 }, { 0x2C30, 69847 }, { 0x2C31, 69736 }, { 0x2C32, 69796 }, { 0x2C33, 69835 }, { 0x2C34, 69850 }, { 0x2C35, 69653 }, { 0x2C36, 69657 }, { 0x2C37, 69649 }, { 0x2C38, 69645 }, { 0x2C39, 69766 }, { 0x2C3A, 69790 }, { 0x2C3B, 69814 }, { 0x2C3C, 5349 }, { 0x2C3D, 5388 }, { 0x2C3E, 5391 }, { 0x2C3F, 5394 }, { 0x2C40, 5379 }, { 0x2C41, 5406 }, { 0x2C42, 5397 }, { 0x2C43, 5355 }, { 0x2C44, 5424 }, { 0x2C45, 5433 }, { 0x2C46, 5400 }, { 0x2C47, 5427 }, { 0x2C48, 5418 }, { 0x2C49, 5403 }, { 0x2C4A, 5430 }, { 0x2C4B, 5337 }, { 0x2C4C, 5334 }, { 0x2C4D, 5346 }, { 0x2C4E, 5340 }, { 0x2C4F, 5373 }, { 0x2C50, 5331 }, { 0x2C51, 5358 }, { 0x2C52, 5352 }, { 0x2C53, 5382 }, { 0x2C54, 5412 }, { 0x2C55, 5376 }, { 0x2C56, 5370 }, { 0x2C57, 5361 }, { 0x2C58, 5367 }, { 0x2C59, 5385 }, { 0x2C5A, 5415 }, { 0x2C5B, 5409 }, { 0x2C5C, 5421 }, { 0x2C5D, 5436 }, { 0x2C5E, 5364 }, { 0x2C5F, 5343 }, { 0x2C60, 83010 }, { 0x2C61, 83042 }, { 0x2C62, 83046 }, { 0x2C63, 83050 }, { 0x2C64, 83018 }, { 0x2C65, 82982 }, { 0x2C66, 82990 }, { 0x2C67, 82998 }, { 0x2C68, 82986 }, { 0x2C69, 82994 }, { 0x2C6A, 83014 }, { 0x2C6B, 83022 }, { 0x2C6C, 83030 }, { 0x2C6D, 83038 }, { 0x2C6E, 83026 }, { 0x2C6F, 83034 }, { 0x2C70, 115659 }, { 0x2C71, 115638 }, { 0x2C72, 115666 }, { 0x2C73, 115652 }, { 0x2C74, 115631 }, { 0x2C75, 115645 }, { 0x2C76, 115599 }, { 0x2C77, 115624 }, { 0x2C78, 115606 }, { 0x2C79, 115673 }, { 0x2C7A, 115680 }, { 0x2C7B, 115694 }, { 0x2C7C, 115687 }, { 0x2C7D, 115617 }, { 0x2C7E, 115662 }, { 0x2C7F, 115641 }, { 0x2C80, 115669 }, { 0x2C81, 115655 }, { 0x2C82, 115634 }, { 0x2C83, 115648 }, { 0x2C84, 115602 }, { 0x2C85, 115627 }, { 0x2C86, 115609 }, { 0x2C87, 115676 }, { 0x2C88, 115683 }, { 0x2C89, 115697 }, { 0x2C8A, 115690 }, { 0x2C8B, 115620 }, { 0x2C8C, 115613 }, { 0x2C8D, 115706 }, { 0x2C8E, 115701 }, { 0x2C8F, 115743 }, { 0x2C90, 115755 }, { 0x2C91, 115815 }, { 0x2C92, 115767 }, { 0x2C93, 115764 }, { 0x2C94, 115746 }, { 0x2C95, 115806 }, { 0x2C96, 115794 }, { 0x2C97, 115779 }, { 0x2C98, 115752 }, { 0x2C99, 115773 }, { 0x2C9A, 115761 }, { 0x2C9B, 115818 }, { 0x2C9C, 115788 }, { 0x2C9D, 115800 }, { 0x2C9E, 115791 }, { 0x2C9F, 115749 }, { 0x2CA0, 115809 }, { 0x2CA1, 115770 }, { 0x2CA2, 115821 }, { 0x2CA3, 115776 }, { 0x2CA4, 115824 }, { 0x2CA5, 115836 }, { 0x2CA6, 115848 }, { 0x2CA7, 115797 }, { 0x2CA8, 115839 }, { 0x2CA9, 115758 }, { 0x2CAA, 115812 }, { 0x2CAB, 115842 }, { 0x2CAC, 115845 }, { 0x2CAD, 115833 }, { 0x2CAE, 115827 }, { 0x2CAF, 115830 }, { 0x2CB0, 115782 }, { 0x2CB1, 115785 }, { 0x2CB2, 115803 }, { 0x2CB3, 60068 }, { 0x2CB4, 60098 }, { 0x2CB5, 60047 }, { 0x2CB6, 59978 }, { 0x2CB7, 59577 }, { 0x2CB8, 59703 }, { 0x2CB9, 59655 }, { 0x2CBA, 59595 }, { 0x2CBB, 59586 }, { 0x2CBC, 59637 }, { 0x2CBD, 59748 }, { 0x2CBE, 59643 }, { 0x2CBF, 106219 }, { 0x2CC0, 59709 }, { 0x2CC1, 59717 }, { 0x2CC2, 59741 }, { 0x2CC3, 59725 }, { 0x2CC4, 59721 }, { 0x2CC5, 59713 }, { 0x2CC6, 59737 }, { 0x2CC7, 59733 }, { 0x2CC8, 59729 }, { 0x2CC9, 59652 }, { 0x2CCA, 59661 }, { 0x2CCB, 59669 }, { 0x2CCC, 59693 }, { 0x2CCD, 59677 }, { 0x2CCE, 59673 }, { 0x2CCF, 59512 }, { 0x2CD0, 59491 }, { 0x2CD1, 59519 }, { 0x2CD2, 59505 }, { 0x2CD3, 59484 }, { 0x2CD4, 59498 }, { 0x2CD5, 59452 }, { 0x2CD6, 59473 }, { 0x2CD7, 59459 }, { 0x2CD8, 59526 }, { 0x2CD9, 59533 }, { 0x2CDA, 59547 }, { 0x2CDB, 59540 }, { 0x2CDC, 59466 }, { 0x2CDD, 59515 }, { 0x2CDE, 59494 }, { 0x2CDF, 59522 }, { 0x2CE0, 59508 }, { 0x2CE1, 59487 }, { 0x2CE2, 59501 }, { 0x2CE3, 59455 }, { 0x2CE4, 59476 }, { 0x2CE5, 59462 }, { 0x2CE6, 59529 }, { 0x2CE7, 59536 }, { 0x2CE8, 59550 }, { 0x2CE9, 59543 }, { 0x2CEA, 59469 }, { 0x2CEB, 59570 }, { 0x2CEC, 59566 }, { 0x2CED, 59480 }, { 0x2CEE, 49501 }, { 0x2CEF, 59942 }, { 0x2CF0, 59954 }, { 0x2CF1, 60032 }, { 0x2CF2, 59966 }, { 0x2CF3, 59963 }, { 0x2CF4, 59945 }, { 0x2CF5, 60023 }, { 0x2CF6, 60005 }, { 0x2CF7, 59993 }, { 0x2CF8, 59951 }, { 0x2CF9, 59987 }, { 0x2CFA, 59960 }, { 0x2CFB, 60035 }, { 0x2CFC, 59999 }, { 0x2CFD, 60011 }, { 0x2CFE, 60002 }, { 0x2CFF, 59948 }, { 0x2D00, 60026 }, { 0x2D01, 59969 }, { 0x2D02, 60056 }, { 0x2D03, 59990 }, { 0x2D04, 60059 }, { 0x2D05, 60089 }, { 0x2D06, 60101 }, { 0x2D07, 60008 }, { 0x2D08, 60050 }, { 0x2D09, 59984 }, { 0x2D0A, 60044 }, { 0x2D0B, 60077 }, { 0x2D0C, 60086 }, { 0x2D0D, 60017 }, { 0x2D0E, 60083 }, { 0x2D0F, 59975 }, { 0x2D10, 59996 }, { 0x2D11, 59957 }, { 0x2D12, 60053 }, { 0x2D13, 59972 }, { 0x2D14, 60041 }, { 0x2D15, 59939 }, { 0x2D16, 59981 }, { 0x2D17, 60020 }, { 0x2D18, 60065 }, { 0x2D19, 60071 }, { 0x2D1A, 60029 }, { 0x2D1B, 60092 }, { 0x2D1C, 60095 }, { 0x2D1D, 60074 }, { 0x2D1E, 60062 }, { 0x2D1F, 60014 }, { 0x2D20, 59665 }, { 0x2D21, 59689 }, { 0x2D22, 59685 }, { 0x2D23, 59681 }, { 0x2D24, 59592 }, { 0x2D25, 59601 }, { 0x2D26, 59609 }, { 0x2D27, 59633 }, { 0x2D28, 59617 }, { 0x2D29, 59613 }, { 0x2D2A, 59605 }, { 0x2D2B, 59629 }, { 0x2D2C, 59625 }, { 0x2D2D, 59621 }, { 0x2D2E, 59583 }, { 0x2D2F, 105996 }, { 0x2D30, 106011 }, { 0x2D31, 105986 }, { 0x2D32, 105981 }, { 0x2D33, 105816 }, { 0x2D34, 105976 }, { 0x2D35, 105971 }, { 0x2D36, 105991 }, { 0x2D37, 106021 }, { 0x2D38, 106001 }, { 0x2D39, 106016 }, { 0x2D3A, 106006 }, { 0x2D3B, 53913 }, { 0x2D3C, 54076 }, { 0x2D3D, 53903 }, { 0x2D3E, 61742 }, { 0x2D3F, 59790 }, { 0x2D40, 59796 }, { 0x2D41, 59802 }, { 0x2D42, 59793 }, { 0x2D43, 59799 }, { 0x2D44, 59820 }, { 0x2D45, 59826 }, { 0x2D46, 59832 }, { 0x2D47, 59823 }, { 0x2D48, 59829 }, { 0x2D49, 59880 }, { 0x2D4A, 59886 }, { 0x2D4B, 59892 }, { 0x2D4C, 59883 }, { 0x2D4D, 59889 }, { 0x2D4E, 59895 }, { 0x2D4F, 59901 }, { 0x2D50, 59907 }, { 0x2D51, 59898 }, { 0x2D52, 59904 }, { 0x2D53, 59850 }, { 0x2D54, 59856 }, { 0x2D55, 59862 }, { 0x2D56, 59853 }, { 0x2D57, 59859 }, { 0x2D58, 59805 }, { 0x2D59, 59811 }, { 0x2D5A, 59817 }, { 0x2D5B, 59808 }, { 0x2D5C, 59814 }, { 0x2D5D, 59835 }, { 0x2D5E, 59841 }, { 0x2D5F, 59847 }, { 0x2D60, 59838 }, { 0x2D61, 59844 }, { 0x2D62, 59922 }, { 0x2D63, 59928 }, { 0x2D64, 59925 }, { 0x2D65, 59865 }, { 0x2D66, 59871 }, { 0x2D67, 59877 }, { 0x2D68, 59868 }, { 0x2D69, 59874 }, { 0x2D6A, 59910 }, { 0x2D6B, 59916 }, { 0x2D6C, 59913 }, { 0x2D6D, 59919 }, { 0x2D6E, 54330 }, { 0x2D6F, 54332 }, { 0x2D70, 54257 }, { 0x2D71, 54121 }, { 0x2D72, 54342 }, { 0x2D73, 54138 }, { 0x2D74, 54119 }, { 0x2D75, 54390 }, { 0x2D76, 54263 }, { 0x2D77, 54155 }, { 0x2D78, 54157 }, { 0x2D79, 54293 }, { 0x2D7A, 54362 }, { 0x2D7B, 54364 }, { 0x2D7C, 54267 }, { 0x2D7D, 54265 }, { 0x2D7E, 54134 }, { 0x2D7F, 54269 }, { 0x2D80, 54346 }, { 0x2D81, 54360 }, { 0x2D82, 54142 }, { 0x2D83, 54434 }, { 0x2D84, 54438 }, { 0x2D85, 54426 }, { 0x2D86, 54336 }, { 0x2D87, 54422 }, { 0x2D88, 54428 }, { 0x2D89, 54366 }, { 0x2D8A, 54295 }, { 0x2D8B, 54344 }, { 0x2D8C, 54297 }, { 0x2D8D, 54384 }, { 0x2D8E, 54420 }, { 0x2D8F, 54386 }, { 0x2D90, 54320 }, { 0x2D91, 54322 }, { 0x2D92, 54261 }, { 0x2D93, 54125 }, { 0x2D94, 54127 }, { 0x2D95, 54117 }, { 0x2D96, 54153 }, { 0x2D97, 54303 }, { 0x2D98, 54271 }, { 0x2D99, 54413 }, { 0x2D9A, 54305 }, { 0x2D9B, 54358 }, { 0x2D9C, 54432 }, { 0x2D9D, 54352 }, { 0x2D9E, 54161 }, { 0x2D9F, 54123 }, { 0x2DA0, 54395 }, { 0x2DA1, 54340 }, { 0x2DA2, 54388 }, { 0x2DA3, 54275 }, { 0x2DA4, 54424 }, { 0x2DA5, 54159 }, { 0x2DA6, 54350 }, { 0x2DA7, 54338 }, { 0x2DA8, 54309 }, { 0x2DA9, 54307 }, { 0x2DAA, 54259 }, { 0x2DAB, 54354 }, { 0x2DAC, 54334 }, { 0x2DAD, 54084 }, { 0x2DAE, 54311 }, { 0x2DAF, 54273 }, { 0x2DB0, 54136 }, { 0x2DB1, 54370 }, { 0x2DB2, 54301 }, { 0x2DB3, 54299 }, { 0x2DB4, 54348 }, { 0x2DB5, 54372 }, { 0x2DB6, 54378 }, { 0x2DB7, 54151 }, { 0x2DB8, 54430 }, { 0x2DB9, 54149 }, { 0x2DBA, 54376 }, { 0x2DBB, 54374 }, { 0x2DBC, 54326 }, { 0x2DBD, 54328 }, { 0x2DBE, 54255 }, { 0x2DBF, 54380 }, { 0x2DC0, 54165 }, { 0x2DC1, 54318 }, { 0x2DC2, 54382 }, { 0x2DC3, 54163 }, { 0x2DC4, 54418 }, { 0x2DC5, 54324 }, { 0x2DC6, 105863 }, { 0x2DC7, 105821 }, { 0x2DC8, 105839 }, { 0x2DC9, 105881 }, { 0x2DCA, 105851 }, { 0x2DCB, 105845 }, { 0x2DCC, 105827 }, { 0x2DCD, 105875 }, { 0x2DCE, 105869 }, { 0x2DCF, 105857 }, { 0x2DD0, 105833 }, { 0x2DD1, 105887 }, { 0x2DD2, 105893 }, { 0x2DD3, 105935 }, { 0x2DD4, 105923 }, { 0x2DD5, 105905 }, { 0x2DD6, 105911 }, { 0x2DD7, 105941 }, { 0x2DD8, 105917 }, { 0x2DD9, 105929 }, { 0x2DDA, 105899 }, { 0x2DDB, 105947 }, { 0x2DDC, 105953 }, { 0x2DDD, 105965 }, { 0x2DDE, 105959 }, { 0x2DDF, 54086 }, { 0x2DE0, 53887 }, { 0x2DE1, 53869 }, { 0x2DE2, 54052 }, { 0x2DE3, 54023 }, { 0x2DE4, 54030 }, { 0x2DE5, 53895 }, { 0x2DE6, 53900 }, { 0x2DE7, 53897 }, { 0x2DE8, 53921 }, { 0x2DE9, 54064 }, { 0x2DEA, 54068 }, { 0x2DEB, 54072 }, { 0x2DEC, 54060 }, { 0x2DED, 54436 }, { 0x2DEE, 54027 }, { 0x2DEF, 54011 }, { 0x2DF0, 53977 }, { 0x2DF1, 53956 }, { 0x2DF2, 53923 }, { 0x2DF3, 53925 }, { 0x2DF4, 53958 }, { 0x2DF5, 53907 }, { 0x2DF6, 54054 }, { 0x2DF7, 54140 }, { 0x2DF8, 54032 }, { 0x2DF9, 54013 }, { 0x2DFA, 53980 }, { 0x2DFB, 53983 }, { 0x2DFC, 53963 }, { 0x2DFD, 53927 }, { 0x2DFE, 53917 }, { 0x2DFF, 54088 }, { 0x2E00, 54094 }, { 0x2E01, 54080 }, { 0x2E02, 54115 }, { 0x2E03, 53986 }, { 0x2E04, 53965 }, { 0x2E05, 53893 }, { 0x2E06, 53931 }, { 0x2E07, 53905 }, { 0x2E08, 54015 }, { 0x2E09, 53989 }, { 0x2E0A, 53967 }, { 0x2E0B, 53877 }, { 0x2E0C, 53933 }, { 0x2E0D, 53972 }, { 0x2E0E, 53882 }, { 0x2E0F, 53860 }, { 0x2E10, 53941 }, { 0x2E11, 53969 }, { 0x2E12, 53879 }, { 0x2E13, 53857 }, { 0x2E14, 53935 }, { 0x2E15, 53848 }, { 0x2E16, 53852 }, { 0x2E17, 54025 }, { 0x2E18, 54090 }, { 0x2E19, 54100 }, { 0x2E1A, 54082 }, { 0x2E1B, 54104 }, { 0x2E1C, 54106 }, { 0x2E1D, 54110 }, { 0x2E1E, 54040 }, { 0x2E1F, 54017 }, { 0x2E20, 53992 }, { 0x2E21, 53975 }, { 0x2E22, 54042 }, { 0x2E23, 54019 }, { 0x2E24, 53995 }, { 0x2E25, 54001 }, { 0x2E26, 53946 }, { 0x2E27, 54003 }, { 0x2E28, 54044 }, { 0x2E29, 54021 }, { 0x2E2A, 53998 }, { 0x2E2B, 54006 }, { 0x2E2C, 53948 }, { 0x2E2D, 54008 }, { 0x2E2E, 53842 }, { 0x2E2F, 53845 }, { 0x2E30, 53867 }, { 0x2E31, 53871 }, { 0x2E32, 53873 }, { 0x2E33, 53875 }, { 0x2E34, 53838 }, { 0x2E35, 53885 }, { 0x2E36, 53889 }, { 0x2E37, 53909 }, { 0x2E38, 53911 }, { 0x2E39, 53915 }, { 0x2E3A, 53919 }, { 0x2E3B, 53929 }, { 0x2E3C, 53938 }, { 0x2E3D, 53944 }, { 0x2E3E, 53950 }, { 0x2E3F, 53952 }, { 0x2E40, 54092 }, { 0x2E41, 53954 }, { 0x2E42, 53960 }, { 0x2E43, 54096 }, { 0x2E44, 54098 }, { 0x2E45, 54034 }, { 0x2E46, 54036 }, { 0x2E47, 54102 }, { 0x2E48, 54038 }, { 0x2E49, 54046 }, { 0x2E4A, 54048 }, { 0x2E4B, 54050 }, { 0x2E4C, 53863 }, { 0x2E4D, 53834 }, { 0x2E4E, 105630 }, { 0x2E4F, 105648 }, { 0x2E50, 105684 }, { 0x2E51, 105660 }, { 0x2E52, 105654 }, { 0x2E53, 105636 }, { 0x2E54, 105678 }, { 0x2E55, 105672 }, { 0x2E56, 105666 }, { 0x2E57, 105642 }, { 0x2E58, 105690 }, { 0x2E59, 105702 }, { 0x2E5A, 105744 }, { 0x2E5B, 105732 }, { 0x2E5C, 105714 }, { 0x2E5D, 105720 }, { 0x2E5E, 105750 }, { 0x2E5F, 105726 }, { 0x2E60, 105738 }, { 0x2E61, 105708 }, { 0x2E62, 105762 }, { 0x2E63, 105774 }, { 0x2E64, 105810 }, { 0x2E65, 105786 }, { 0x2E66, 105780 }, { 0x2E67, 105768 }, { 0x2E68, 105804 }, { 0x2E69, 105798 }, { 0x2E6A, 105792 }, { 0x2E6B, 105696 }, { 0x2E6C, 105756 }, { 0x2E6D, 54078 }, { 0x2E6E, 81711 }, { 0x2E6F, 81725 }, { 0x2E70, 81862 }, { 0x2E71, 81832 }, { 0x2E72, 81808 }, { 0x2E73, 81814 }, { 0x2E74, 81664 }, { 0x2E75, 81794 }, { 0x2E76, 81770 }, { 0x2E77, 81829 }, { 0x2E78, 81767 }, { 0x2E79, 81889 }, { 0x2E7A, 81874 }, { 0x2E7B, 81751 }, { 0x2E7C, 81798 }, { 0x2E7D, 81871 }, { 0x2E7E, 81845 }, { 0x2E7F, 81730 }, { 0x2E80, 81811 }, { 0x2E81, 81904 }, { 0x2E82, 81782 }, { 0x2E83, 81740 }, { 0x2E84, 81858 }, { 0x2E85, 81791 }, { 0x2E86, 81855 }, { 0x2E87, 81747 }, { 0x2E88, 81763 }, { 0x2E89, 81755 }, { 0x2E8A, 81686 }, { 0x2E8B, 81706 }, { 0x2E8C, 81852 }, { 0x2E8D, 81820 }, { 0x2E8E, 81805 }, { 0x2E8F, 81743 }, { 0x2E90, 81826 }, { 0x2E91, 81839 }, { 0x2E92, 81672 }, { 0x2E93, 81880 }, { 0x2E94, 81898 }, { 0x2E95, 81892 }, { 0x2E96, 81817 }, { 0x2E97, 81823 }, { 0x2E98, 81901 }, { 0x2E99, 81786 }, { 0x2E9A, 81848 }, { 0x2E9B, 81801 }, { 0x2E9C, 81883 }, { 0x2E9D, 81668 }, { 0x2E9E, 81886 }, { 0x2E9F, 81702 }, { 0x2EA0, 81697 }, { 0x2EA1, 81691 }, { 0x2EA2, 81895 }, { 0x2EA3, 81716 }, { 0x2EA4, 81836 }, { 0x2EA5, 81721 }, { 0x2EA6, 81676 }, { 0x2EA7, 81681 }, { 0x2EA8, 81868 }, { 0x2EA9, 81877 }, { 0x2EAA, 81759 }, { 0x2EAB, 81774 }, { 0x2EAC, 81736 }, { 0x2EAD, 81778 }, { 0x2EAE, 691 }, { 0x2EAF, 694 }, { 0x2EB0, 577 }, { 0x2EB1, 688 }, { 0x2EB2, 1357 }, { 0x2EB3, 1360 }, { 0x2EB4, 685 }, { 0x2EB5, 1354 }, { 0x2EB6, 586 }, { 0x2EB7, 589 }, { 0x2EB8, 571 }, { 0x2EB9, 583 }, { 0x2EBA, 2068 }, { 0x2EBB, 859 }, { 0x2EBC, 2065 }, { 0x2EBD, 778 }, { 0x2EBE, 781 }, { 0x2EBF, 580 }, { 0x2EC0, 775 }, { 0x2EC1, 643 }, { 0x2EC2, 574 }, { 0x2EC3, 886 }, { 0x2EC4, 967 }, { 0x2EC5, 970 }, { 0x2EC6, 598 }, { 0x2EC7, 964 }, { 0x2EC8, 2398 }, { 0x2EC9, 2401 }, { 0x2ECA, 961 }, { 0x2ECB, 2395 }, { 0x2ECC, 931 }, { 0x2ECD, 934 }, { 0x2ECE, 592 }, { 0x2ECF, 928 }, { 0x2ED0, 2407 }, { 0x2ED1, 982 }, { 0x2ED2, 2404 }, { 0x2ED3, 976 }, { 0x2ED4, 979 }, { 0x2ED5, 601 }, { 0x2ED6, 973 }, { 0x2ED7, 958 }, { 0x2ED8, 595 }, { 0x2ED9, 955 }, { 0x2EDA, 991 }, { 0x2EDB, 994 }, { 0x2EDC, 604 }, { 0x2EDD, 985 }, { 0x2EDE, 2410 }, { 0x2EDF, 988 }, { 0x2EE0, 1003 }, { 0x2EE1, 1006 }, { 0x2EE2, 607 }, { 0x2EE3, 997 }, { 0x2EE4, 2413 }, { 0x2EE5, 1000 }, { 0x2EE6, 1762 }, { 0x2EE7, 1765 }, { 0x2EE8, 787 }, { 0x2EE9, 1759 }, { 0x2EEA, 3331 }, { 0x2EEB, 1756 }, { 0x2EEC, 3328 }, { 0x2EED, 1750 }, { 0x2EEE, 1753 }, { 0x2EEF, 784 }, { 0x2EF0, 1747 }, { 0x2EF1, 3337 }, { 0x2EF2, 1777 }, { 0x2EF3, 3334 }, { 0x2EF4, 1771 }, { 0x2EF5, 1774 }, { 0x2EF6, 790 }, { 0x2EF7, 1768 }, { 0x2EF8, 1786 }, { 0x2EF9, 1789 }, { 0x2EFA, 793 }, { 0x2EFB, 1780 }, { 0x2EFC, 3340 }, { 0x2EFD, 1783 }, { 0x2EFE, 1798 }, { 0x2EFF, 1801 }, { 0x2F00, 796 }, { 0x2F01, 1792 }, { 0x2F02, 3343 }, { 0x2F03, 1795 }, { 0x2F04, 2356 }, { 0x2F05, 2359 }, { 0x2F06, 943 }, { 0x2F07, 2353 }, { 0x2F08, 3766 }, { 0x2F09, 3769 }, { 0x2F0A, 2350 }, { 0x2F0B, 3763 }, { 0x2F0C, 2338 }, { 0x2F0D, 2341 }, { 0x2F0E, 937 }, { 0x2F0F, 2335 }, { 0x2F10, 3775 }, { 0x2F11, 2371 }, { 0x2F12, 3772 }, { 0x2F13, 2365 }, { 0x2F14, 2368 }, { 0x2F15, 946 }, { 0x2F16, 2362 }, { 0x2F17, 2347 }, { 0x2F18, 940 }, { 0x2F19, 2344 }, { 0x2F1A, 2380 }, { 0x2F1B, 2383 }, { 0x2F1C, 949 }, { 0x2F1D, 2374 }, { 0x2F1E, 3778 }, { 0x2F1F, 2377 }, { 0x2F20, 2389 }, { 0x2F21, 2392 }, { 0x2F22, 952 }, { 0x2F23, 2386 }, { 0x2F24, 3016 }, { 0x2F25, 3019 }, { 0x2F26, 1618 }, { 0x2F27, 3013 }, { 0x2F28, 3928 }, { 0x2F29, 3010 }, { 0x2F2A, 3925 }, { 0x2F2B, 3004 }, { 0x2F2C, 3007 }, { 0x2F2D, 1615 }, { 0x2F2E, 3001 }, { 0x2F2F, 3025 }, { 0x2F30, 3028 }, { 0x2F31, 1621 }, { 0x2F32, 3022 }, { 0x2F33, 3037 }, { 0x2F34, 3040 }, { 0x2F35, 1624 }, { 0x2F36, 3031 }, { 0x2F37, 3931 }, { 0x2F38, 3034 }, { 0x2F39, 3049 }, { 0x2F3A, 3052 }, { 0x2F3B, 1627 }, { 0x2F3C, 3043 }, { 0x2F3D, 3934 }, { 0x2F3E, 3046 }, { 0x2F3F, 2704 }, { 0x2F40, 2707 }, { 0x2F41, 1309 }, { 0x2F42, 2701 }, { 0x2F43, 3850 }, { 0x2F44, 2698 }, { 0x2F45, 3847 }, { 0x2F46, 2692 }, { 0x2F47, 2695 }, { 0x2F48, 1306 }, { 0x2F49, 2689 }, { 0x2F4A, 3856 }, { 0x2F4B, 2719 }, { 0x2F4C, 3853 }, { 0x2F4D, 2713 }, { 0x2F4E, 2716 }, { 0x2F4F, 1312 }, { 0x2F50, 2710 }, { 0x2F51, 2728 }, { 0x2F52, 2731 }, { 0x2F53, 1315 }, { 0x2F54, 2722 }, { 0x2F55, 3859 }, { 0x2F56, 2725 }, { 0x2F57, 2740 }, { 0x2F58, 1318 }, { 0x2F59, 2734 }, { 0x2F5A, 3862 }, { 0x2F5B, 2737 }, { 0x2F5C, 1570 }, { 0x2F5D, 1573 }, { 0x2F5E, 748 }, { 0x2F5F, 1567 }, { 0x2F60, 2986 }, { 0x2F61, 1564 }, { 0x2F62, 2983 }, { 0x2F63, 1543 }, { 0x2F64, 1546 }, { 0x2F65, 742 }, { 0x2F66, 1540 }, { 0x2F67, 2992 }, { 0x2F68, 2995 }, { 0x2F69, 1585 }, { 0x2F6A, 2989 }, { 0x2F6B, 1579 }, { 0x2F6C, 1582 }, { 0x2F6D, 751 }, { 0x2F6E, 1576 }, { 0x2F6F, 1549 }, { 0x2F70, 745 }, { 0x2F71, 1594 }, { 0x2F72, 1597 }, { 0x2F73, 754 }, { 0x2F74, 1588 }, { 0x2F75, 2998 }, { 0x2F76, 1591 }, { 0x2F77, 1603 }, { 0x2F78, 1606 }, { 0x2F79, 757 }, { 0x2F7A, 1600 }, { 0x2F7B, 1165 }, { 0x2F7C, 1168 }, { 0x2F7D, 649 }, { 0x2F7E, 1162 }, { 0x2F7F, 1156 }, { 0x2F80, 1159 }, { 0x2F81, 646 }, { 0x2F82, 1153 }, { 0x2F83, 1174 }, { 0x2F84, 652 }, { 0x2F85, 1171 }, { 0x2F86, 1183 }, { 0x2F87, 1186 }, { 0x2F88, 655 }, { 0x2F89, 1177 }, { 0x2F8A, 2551 }, { 0x2F8B, 1180 }, { 0x2F8C, 1192 }, { 0x2F8D, 1195 }, { 0x2F8E, 658 }, { 0x2F8F, 1189 }, { 0x2F90, 2092 }, { 0x2F91, 2095 }, { 0x2F92, 865 }, { 0x2F93, 2089 }, { 0x2F94, 3580 }, { 0x2F95, 3583 }, { 0x2F96, 2086 }, { 0x2F97, 3577 }, { 0x2F98, 2074 }, { 0x2F99, 2077 }, { 0x2F9A, 862 }, { 0x2F9B, 2071 }, { 0x2F9C, 2101 }, { 0x2F9D, 2104 }, { 0x2F9E, 868 }, { 0x2F9F, 2098 }, { 0x2FA0, 2083 }, { 0x2FA1, 2080 }, { 0x2FA2, 2113 }, { 0x2FA3, 2116 }, { 0x2FA4, 871 }, { 0x2FA5, 2107 }, { 0x2FA6, 3586 }, { 0x2FA7, 2110 }, { 0x2FA8, 2125 }, { 0x2FA9, 2128 }, { 0x2FAA, 874 }, { 0x2FAB, 2119 }, { 0x2FAC, 3589 }, { 0x2FAD, 2122 }, { 0x2FAE, 1123 }, { 0x2FAF, 1126 }, { 0x2FB0, 634 }, { 0x2FB1, 1120 }, { 0x2FB2, 2542 }, { 0x2FB3, 1117 }, { 0x2FB4, 2539 }, { 0x2FB5, 1090 }, { 0x2FB6, 1093 }, { 0x2FB7, 628 }, { 0x2FB8, 1087 }, { 0x2FB9, 2545 }, { 0x2FBA, 1138 }, { 0x2FBB, 1132 }, { 0x2FBC, 1135 }, { 0x2FBD, 637 }, { 0x2FBE, 1129 }, { 0x2FBF, 1114 }, { 0x2FC0, 631 }, { 0x2FC1, 1111 }, { 0x2FC2, 1147 }, { 0x2FC3, 1150 }, { 0x2FC4, 640 }, { 0x2FC5, 1141 }, { 0x2FC6, 2548 }, { 0x2FC7, 1144 }, { 0x2FC8, 2035 }, { 0x2FC9, 2038 }, { 0x2FCA, 850 }, { 0x2FCB, 2032 }, { 0x2FCC, 3562 }, { 0x2FCD, 2029 }, { 0x2FCE, 3559 }, { 0x2FCF, 2017 }, { 0x2FD0, 2020 }, { 0x2FD1, 844 }, { 0x2FD2, 2014 }, { 0x2FD3, 3568 }, { 0x2FD4, 3571 }, { 0x2FD5, 2050 }, { 0x2FD6, 3565 }, { 0x2FD7, 2044 }, { 0x2FD8, 2047 }, { 0x2FD9, 853 }, { 0x2FDA, 2041 }, { 0x2FDB, 2026 }, { 0x2FDC, 847 }, { 0x2FDD, 2023 }, { 0x2FDE, 2059 }, { 0x2FDF, 2062 }, { 0x2FE0, 856 }, { 0x2FE1, 2053 }, { 0x2FE2, 3574 }, { 0x2FE3, 2056 }, { 0x2FE4, 2509 }, { 0x2FE5, 2512 }, { 0x2FE6, 1102 }, { 0x2FE7, 2506 }, { 0x2FE8, 3799 }, { 0x2FE9, 2503 }, { 0x2FEA, 3796 }, { 0x2FEB, 2491 }, { 0x2FEC, 2494 }, { 0x2FED, 1096 }, { 0x2FEE, 2488 }, { 0x2FEF, 3805 }, { 0x2FF0, 2524 }, { 0x2FF1, 3802 }, { 0x2FF2, 2518 }, { 0x2FF3, 2521 }, { 0x2FF4, 1105 }, { 0x2FF5, 2515 }, { 0x2FF6, 2500 }, { 0x2FF7, 1099 }, { 0x2FF8, 2497 }, { 0x2FF9, 2533 }, { 0x2FFA, 2536 }, { 0x2FFB, 1108 }, { 0x2FFC, 2527 }, { 0x2FFD, 3808 }, { 0x2FFE, 2530 }, { 0x2FFF, 3076 }, { 0x3000, 3079 }, { 0x3001, 1636 }, { 0x3002, 3073 }, { 0x3003, 3937 }, { 0x3004, 3070 }, { 0x3005, 3058 }, { 0x3006, 3061 }, { 0x3007, 1630 }, { 0x3008, 3055 }, { 0x3009, 3085 }, { 0x300A, 3088 }, { 0x300B, 1639 }, { 0x300C, 3082 }, { 0x300D, 3067 }, { 0x300E, 1633 }, { 0x300F, 3064 }, { 0x3010, 3097 }, { 0x3011, 3100 }, { 0x3012, 1642 }, { 0x3013, 3091 }, { 0x3014, 3940 }, { 0x3015, 3094 }, { 0x3016, 2764 }, { 0x3017, 2767 }, { 0x3018, 1327 }, { 0x3019, 2761 }, { 0x301A, 3868 }, { 0x301B, 3871 }, { 0x301C, 2758 }, { 0x301D, 3865 }, { 0x301E, 2746 }, { 0x301F, 2749 }, { 0x3020, 1321 }, { 0x3021, 2743 }, { 0x3022, 3874 }, { 0x3023, 2779 }, { 0x3024, 2773 }, { 0x3025, 2776 }, { 0x3026, 2770 }, { 0x3027, 2755 }, { 0x3028, 1324 }, { 0x3029, 2752 }, { 0x302A, 2782 }, { 0x302B, 1666 }, { 0x302C, 1669 }, { 0x302D, 766 }, { 0x302E, 1663 }, { 0x302F, 3136 }, { 0x3030, 1660 }, { 0x3031, 3133 }, { 0x3032, 1612 }, { 0x3033, 760 }, { 0x3034, 1609 }, { 0x3035, 3235 }, { 0x3036, 1708 }, { 0x3037, 3232 }, { 0x3038, 1687 }, { 0x3039, 1690 }, { 0x303A, 769 }, { 0x303B, 1684 }, { 0x303C, 1648 }, { 0x303D, 763 }, { 0x303E, 1645 }, { 0x303F, 1717 }, { 0x3040, 1720 }, { 0x3041, 772 }, { 0x3042, 1711 }, { 0x3043, 3238 }, { 0x3044, 1714 }, { 0x3045, 2650 }, { 0x3046, 2653 }, { 0x3047, 1294 }, { 0x3048, 2647 }, { 0x3049, 3832 }, { 0x304A, 2644 }, { 0x304B, 3829 }, { 0x304C, 2632 }, { 0x304D, 2635 }, { 0x304E, 1288 }, { 0x304F, 2629 }, { 0x3050, 3838 }, { 0x3051, 2662 }, { 0x3052, 3835 }, { 0x3053, 2659 }, { 0x3054, 1297 }, { 0x3055, 2656 }, { 0x3056, 2641 }, { 0x3057, 1291 }, { 0x3058, 2638 }, { 0x3059, 2671 }, { 0x305A, 2674 }, { 0x305B, 1300 }, { 0x305C, 2665 }, { 0x305D, 3841 }, { 0x305E, 2668 }, { 0x305F, 2683 }, { 0x3060, 2686 }, { 0x3061, 1303 }, { 0x3062, 2677 }, { 0x3063, 3844 }, { 0x3064, 2680 }, { 0x3065, 1498 }, { 0x3066, 1501 }, { 0x3067, 730 }, { 0x3068, 1495 }, { 0x3069, 2920 }, { 0x306A, 2923 }, { 0x306B, 1492 }, { 0x306C, 2917 }, { 0x306D, 1480 }, { 0x306E, 1483 }, { 0x306F, 724 }, { 0x3070, 1477 }, { 0x3071, 2929 }, { 0x3072, 2932 }, { 0x3073, 1513 }, { 0x3074, 2926 }, { 0x3075, 1507 }, { 0x3076, 1510 }, { 0x3077, 733 }, { 0x3078, 1504 }, { 0x3079, 1489 }, { 0x307A, 727 }, { 0x307B, 1486 }, { 0x307C, 1522 }, { 0x307D, 1525 }, { 0x307E, 736 }, { 0x307F, 1516 }, { 0x3080, 2935 }, { 0x3081, 1519 }, { 0x3082, 1534 }, { 0x3083, 1537 }, { 0x3084, 739 }, { 0x3085, 1528 }, { 0x3086, 2938 }, { 0x3087, 1531 }, { 0x3088, 1237 }, { 0x3089, 1240 }, { 0x308A, 667 }, { 0x308B, 1234 }, { 0x308C, 2608 }, { 0x308D, 2611 }, { 0x308E, 1231 }, { 0x308F, 2605 }, { 0x3090, 1201 }, { 0x3091, 1204 }, { 0x3092, 661 }, { 0x3093, 1198 }, { 0x3094, 2617 }, { 0x3095, 2620 }, { 0x3096, 1252 }, { 0x3097, 2614 }, { 0x3098, 1246 }, { 0x3099, 1249 }, { 0x309A, 670 }, { 0x309B, 1243 }, { 0x309C, 1210 }, { 0x309D, 1213 }, { 0x309E, 664 }, { 0x309F, 1207 }, { 0x30A0, 1261 }, { 0x30A1, 1264 }, { 0x30A2, 673 }, { 0x30A3, 1255 }, { 0x30A4, 2623 }, { 0x30A5, 1258 }, { 0x30A6, 1447 }, { 0x30A7, 1450 }, { 0x30A8, 715 }, { 0x30A9, 1444 }, { 0x30AA, 2905 }, { 0x30AB, 1441 }, { 0x30AC, 2902 }, { 0x30AD, 1426 }, { 0x30AE, 1429 }, { 0x30AF, 709 }, { 0x30B0, 1423 }, { 0x30B1, 2911 }, { 0x30B2, 1462 }, { 0x30B3, 2908 }, { 0x30B4, 1456 }, { 0x30B5, 1459 }, { 0x30B6, 718 }, { 0x30B7, 1453 }, { 0x30B8, 1435 }, { 0x30B9, 1438 }, { 0x30BA, 712 }, { 0x30BB, 1432 }, { 0x30BC, 1471 }, { 0x30BD, 1474 }, { 0x30BE, 721 }, { 0x30BF, 1465 }, { 0x30C0, 2914 }, { 0x30C1, 1468 }, { 0x30C2, 2575 }, { 0x30C3, 2578 }, { 0x30C4, 1222 }, { 0x30C5, 3814 }, { 0x30C6, 2572 }, { 0x30C7, 3811 }, { 0x30C8, 2557 }, { 0x30C9, 2560 }, { 0x30CA, 1216 }, { 0x30CB, 2554 }, { 0x30CC, 3820 }, { 0x30CD, 3823 }, { 0x30CE, 2590 }, { 0x30CF, 3817 }, { 0x30D0, 2584 }, { 0x30D1, 2587 }, { 0x30D2, 1225 }, { 0x30D3, 2581 }, { 0x30D4, 2566 }, { 0x30D5, 2569 }, { 0x30D6, 1219 }, { 0x30D7, 2563 }, { 0x30D8, 2599 }, { 0x30D9, 2602 }, { 0x30DA, 1228 }, { 0x30DB, 2593 }, { 0x30DC, 3826 }, { 0x30DD, 2596 }, { 0x30DE, 3913 }, { 0x30DF, 2956 }, { 0x30E0, 2944 }, { 0x30E1, 2947 }, { 0x30E2, 1552 }, { 0x30E3, 2941 }, { 0x30E4, 3919 }, { 0x30E5, 2968 }, { 0x30E6, 3916 }, { 0x30E7, 2962 }, { 0x30E8, 2965 }, { 0x30E9, 1558 }, { 0x30EA, 2959 }, { 0x30EB, 2953 }, { 0x30EC, 1555 }, { 0x30ED, 2950 }, { 0x30EE, 2977 }, { 0x30EF, 2980 }, { 0x30F0, 1561 }, { 0x30F1, 2971 }, { 0x30F2, 3922 }, { 0x30F3, 2974 }, { 0x30F4, 2815 }, { 0x30F5, 2818 }, { 0x30F6, 1348 }, { 0x30F7, 2812 }, { 0x30F8, 3880 }, { 0x30F9, 3883 }, { 0x30FA, 2809 }, { 0x30FB, 3877 }, { 0x30FC, 2797 }, { 0x30FD, 2800 }, { 0x30FE, 1342 }, { 0x30FF, 2794 }, { 0x3100, 3889 }, { 0x3101, 3892 }, { 0x3102, 2830 }, { 0x3103, 3886 }, { 0x3104, 2824 }, { 0x3105, 2827 }, { 0x3106, 1351 }, { 0x3107, 2821 }, { 0x3108, 2806 }, { 0x3109, 1345 }, { 0x310A, 2803 }, { 0x310B, 3946 }, { 0x310C, 3118 }, { 0x310D, 3943 }, { 0x310E, 3106 }, { 0x310F, 3109 }, { 0x3110, 1651 }, { 0x3111, 3103 }, { 0x3112, 3949 }, { 0x3113, 3952 }, { 0x3114, 3130 }, { 0x3115, 3124 }, { 0x3116, 3127 }, { 0x3117, 1657 }, { 0x3118, 3121 }, { 0x3119, 3115 }, { 0x311A, 1654 }, { 0x311B, 3112 }, { 0x311C, 1285 }, { 0x311D, 2626 }, { 0x311E, 1282 }, { 0x311F, 1270 }, { 0x3120, 1273 }, { 0x3121, 676 }, { 0x3122, 1267 }, { 0x3123, 2788 }, { 0x3124, 2791 }, { 0x3125, 1339 }, { 0x3126, 2785 }, { 0x3127, 1333 }, { 0x3128, 1336 }, { 0x3129, 682 }, { 0x312A, 1330 }, { 0x312B, 1279 }, { 0x312C, 679 }, { 0x312D, 1276 }, { 0x312E, 2134 }, { 0x312F, 2137 }, { 0x3130, 877 }, { 0x3131, 2131 }, { 0x3132, 3595 }, { 0x3133, 2152 }, { 0x3134, 3592 }, { 0x3135, 2149 }, { 0x3136, 883 }, { 0x3137, 2146 }, { 0x3138, 2143 }, { 0x3139, 880 }, { 0x313A, 2140 }, { 0x313B, 2275 }, { 0x313C, 2278 }, { 0x313D, 916 }, { 0x313E, 2272 }, { 0x313F, 3694 }, { 0x3140, 2269 }, { 0x3141, 3691 }, { 0x3142, 2242 }, { 0x3143, 2245 }, { 0x3144, 910 }, { 0x3145, 2239 }, { 0x3146, 3700 }, { 0x3147, 2290 }, { 0x3148, 3697 }, { 0x3149, 2284 }, { 0x314A, 2287 }, { 0x314B, 919 }, { 0x314C, 2281 }, { 0x314D, 2251 }, { 0x314E, 913 }, { 0x314F, 2248 }, { 0x3150, 2299 }, { 0x3151, 2302 }, { 0x3152, 922 }, { 0x3153, 2293 }, { 0x3154, 3703 }, { 0x3155, 2296 }, { 0x3156, 2311 }, { 0x3157, 2314 }, { 0x3158, 925 }, { 0x3159, 2305 }, { 0x315A, 3706 }, { 0x315B, 2308 }, { 0x315C, 1045 }, { 0x315D, 1048 }, { 0x315E, 616 }, { 0x315F, 1042 }, { 0x3160, 2470 }, { 0x3161, 2473 }, { 0x3162, 1039 }, { 0x3163, 2467 }, { 0x3164, 1012 }, { 0x3165, 1015 }, { 0x3166, 610 }, { 0x3167, 1009 }, { 0x3168, 2479 }, { 0x3169, 1060 }, { 0x316A, 2476 }, { 0x316B, 1054 }, { 0x316C, 1057 }, { 0x316D, 619 }, { 0x316E, 1051 }, { 0x316F, 1021 }, { 0x3170, 613 }, { 0x3171, 1018 }, { 0x3172, 1069 }, { 0x3173, 1072 }, { 0x3174, 622 }, { 0x3175, 1063 }, { 0x3176, 2482 }, { 0x3177, 1066 }, { 0x3178, 1081 }, { 0x3179, 1084 }, { 0x317A, 625 }, { 0x317B, 1075 }, { 0x317C, 2485 }, { 0x317D, 1078 }, { 0x317E, 3730 }, { 0x317F, 3733 }, { 0x3180, 2323 }, { 0x3181, 3727 }, { 0x3182, 4054 }, { 0x3183, 4057 }, { 0x3184, 3724 }, { 0x3185, 4051 }, { 0x3186, 3712 }, { 0x3187, 3715 }, { 0x3188, 2317 }, { 0x3189, 3709 }, { 0x318A, 3739 }, { 0x318B, 2326 }, { 0x318C, 3736 }, { 0x318D, 3721 }, { 0x318E, 2320 }, { 0x318F, 3718 }, { 0x3190, 3748 }, { 0x3191, 2329 }, { 0x3192, 3742 }, { 0x3193, 4060 }, { 0x3194, 3745 }, { 0x3195, 3757 }, { 0x3196, 3760 }, { 0x3197, 2332 }, { 0x3198, 3751 }, { 0x3199, 4063 }, { 0x319A, 3754 }, { 0x319B, 3292 }, { 0x319C, 3295 }, { 0x319D, 1738 }, { 0x319E, 3289 }, { 0x319F, 3997 }, { 0x31A0, 3286 }, { 0x31A1, 3994 }, { 0x31A2, 3277 }, { 0x31A3, 3280 }, { 0x31A4, 1732 }, { 0x31A5, 3274 }, { 0x31A6, 4000 }, { 0x31A7, 3304 }, { 0x31A8, 3301 }, { 0x31A9, 3298 }, { 0x31AA, 3283 }, { 0x31AB, 1735 }, { 0x31AC, 3313 }, { 0x31AD, 1741 }, { 0x31AE, 3307 }, { 0x31AF, 4003 }, { 0x31B0, 3310 }, { 0x31B1, 3322 }, { 0x31B2, 3325 }, { 0x31B3, 1744 }, { 0x31B4, 3316 }, { 0x31B5, 4006 }, { 0x31B6, 3319 }, { 0x31B7, 1954 }, { 0x31B8, 1957 }, { 0x31B9, 832 }, { 0x31BA, 1951 }, { 0x31BB, 3487 }, { 0x31BC, 1948 }, { 0x31BD, 3484 }, { 0x31BE, 1921 }, { 0x31BF, 1924 }, { 0x31C0, 826 }, { 0x31C1, 1918 }, { 0x31C2, 3550 }, { 0x31C3, 1987 }, { 0x31C4, 3547 }, { 0x31C5, 1963 }, { 0x31C6, 1966 }, { 0x31C7, 835 }, { 0x31C8, 1960 }, { 0x31C9, 1930 }, { 0x31CA, 829 }, { 0x31CB, 1927 }, { 0x31CC, 1996 }, { 0x31CD, 1999 }, { 0x31CE, 838 }, { 0x31CF, 1990 }, { 0x31D0, 3553 }, { 0x31D1, 1993 }, { 0x31D2, 2008 }, { 0x31D3, 2011 }, { 0x31D4, 841 }, { 0x31D5, 2002 }, { 0x31D6, 3556 }, { 0x31D7, 2005 }, { 0x31D8, 3511 }, { 0x31D9, 3514 }, { 0x31DA, 1975 }, { 0x31DB, 3508 }, { 0x31DC, 4033 }, { 0x31DD, 3505 }, { 0x31DE, 4030 }, { 0x31DF, 3493 }, { 0x31E0, 3496 }, { 0x31E1, 1969 }, { 0x31E2, 3490 }, { 0x31E3, 3520 }, { 0x31E4, 3523 }, { 0x31E5, 1978 }, { 0x31E6, 3517 }, { 0x31E7, 3502 }, { 0x31E8, 1972 }, { 0x31E9, 3499 }, { 0x31EA, 3529 }, { 0x31EB, 3532 }, { 0x31EC, 1981 }, { 0x31ED, 3526 }, { 0x31EE, 3541 }, { 0x31EF, 3544 }, { 0x31F0, 1984 }, { 0x31F1, 3535 }, { 0x31F2, 4036 }, { 0x31F3, 3538 }, { 0x31F4, 3640 }, { 0x31F5, 3643 }, { 0x31F6, 2254 }, { 0x31F7, 3637 }, { 0x31F8, 4042 }, { 0x31F9, 3664 }, { 0x31FA, 4039 }, { 0x31FB, 3658 }, { 0x31FC, 3661 }, { 0x31FD, 2260 }, { 0x31FE, 3655 }, { 0x31FF, 3649 }, { 0x3200, 3652 }, { 0x3201, 2257 }, { 0x3202, 3646 }, { 0x3203, 3673 }, { 0x3204, 3676 }, { 0x3205, 2263 }, { 0x3206, 3667 }, { 0x3207, 4045 }, { 0x3208, 3670 }, { 0x3209, 3685 }, { 0x320A, 3688 }, { 0x320B, 2266 }, { 0x320C, 3679 }, { 0x320D, 4048 }, { 0x320E, 3682 }, { 0x320F, 2419 }, { 0x3210, 2422 }, { 0x3211, 1024 }, { 0x3212, 2416 }, { 0x3213, 3784 }, { 0x3214, 3787 }, { 0x3215, 2443 }, { 0x3216, 3781 }, { 0x3217, 2437 }, { 0x3218, 2440 }, { 0x3219, 1030 }, { 0x321A, 2434 }, { 0x321B, 2428 }, { 0x321C, 2431 }, { 0x321D, 1027 }, { 0x321E, 2425 }, { 0x321F, 2452 }, { 0x3220, 1033 }, { 0x3221, 2446 }, { 0x3222, 3790 }, { 0x3223, 2449 }, { 0x3224, 2461 }, { 0x3225, 2464 }, { 0x3226, 1036 }, { 0x3227, 2455 }, { 0x3228, 3793 }, { 0x3229, 2458 }, { 0x322A, 3370 }, { 0x322B, 1876 }, { 0x322C, 4009 }, { 0x322D, 3391 }, { 0x322E, 3385 }, { 0x322F, 3388 }, { 0x3230, 1882 }, { 0x3231, 3382 }, { 0x3232, 3376 }, { 0x3233, 3379 }, { 0x3234, 1879 }, { 0x3235, 3373 }, { 0x3236, 3400 }, { 0x3237, 3403 }, { 0x3238, 1885 }, { 0x3239, 3394 }, { 0x323A, 4012 }, { 0x323B, 3397 }, { 0x323C, 3412 }, { 0x323D, 3415 }, { 0x323E, 1888 }, { 0x323F, 3406 }, { 0x3240, 4015 }, { 0x3241, 3409 }, { 0x3242, 3187 }, { 0x3243, 3190 }, { 0x3244, 1693 }, { 0x3245, 3184 }, { 0x3246, 3205 }, { 0x3247, 1699 }, { 0x3248, 3202 }, { 0x3249, 3196 }, { 0x324A, 3199 }, { 0x324B, 1696 }, { 0x324C, 3193 }, { 0x324D, 3214 }, { 0x324E, 3217 }, { 0x324F, 1702 }, { 0x3250, 3208 }, { 0x3251, 3973 }, { 0x3252, 3211 }, { 0x3253, 3226 }, { 0x3254, 3229 }, { 0x3255, 1705 }, { 0x3256, 3220 }, { 0x3257, 3976 }, { 0x3258, 3223 }, { 0x3259, 3433 }, { 0x325A, 3436 }, { 0x325B, 1933 }, { 0x325C, 3430 }, { 0x325D, 4021 }, { 0x325E, 3457 }, { 0x325F, 4018 }, { 0x3260, 3451 }, { 0x3261, 3454 }, { 0x3262, 1939 }, { 0x3263, 3448 }, { 0x3264, 3442 }, { 0x3265, 3445 }, { 0x3266, 1936 }, { 0x3267, 3439 }, { 0x3268, 3466 }, { 0x3269, 3469 }, { 0x326A, 1942 }, { 0x326B, 3460 }, { 0x326C, 4024 }, { 0x326D, 3463 }, { 0x326E, 3478 }, { 0x326F, 3481 }, { 0x3270, 1945 }, { 0x3271, 3472 }, { 0x3272, 4027 }, { 0x3273, 3475 }, { 0x3274, 1855 }, { 0x3275, 1858 }, { 0x3276, 811 }, { 0x3277, 1852 }, { 0x3278, 3421 }, { 0x3279, 1891 }, { 0x327A, 3418 }, { 0x327B, 1870 }, { 0x327C, 1873 }, { 0x327D, 817 }, { 0x327E, 1867 }, { 0x327F, 1864 }, { 0x3280, 814 }, { 0x3281, 1861 }, { 0x3282, 1900 }, { 0x3283, 1903 }, { 0x3284, 820 }, { 0x3285, 1894 }, { 0x3286, 3424 }, { 0x3287, 1897 }, { 0x3288, 1912 }, { 0x3289, 1915 }, { 0x328A, 823 }, { 0x328B, 1906 }, { 0x328C, 3427 }, { 0x328D, 1909 }, { 0x328E, 1369 }, { 0x328F, 1372 }, { 0x3290, 697 }, { 0x3291, 1366 }, { 0x3292, 2836 }, { 0x3293, 2839 }, { 0x3294, 1363 }, { 0x3295, 2833 }, { 0x3296, 2890 }, { 0x3297, 2893 }, { 0x3298, 1396 }, { 0x3299, 2887 }, { 0x329A, 1390 }, { 0x329B, 1393 }, { 0x329C, 700 }, { 0x329D, 1387 }, { 0x329E, 1405 }, { 0x329F, 1408 }, { 0x32A0, 703 }, { 0x32A1, 1399 }, { 0x32A2, 2896 }, { 0x32A3, 1402 }, { 0x32A4, 1417 }, { 0x32A5, 1420 }, { 0x32A6, 706 }, { 0x32A7, 1411 }, { 0x32A8, 2899 }, { 0x32A9, 1414 }, { 0x32AA, 1810 }, { 0x32AB, 1813 }, { 0x32AC, 799 }, { 0x32AD, 1807 }, { 0x32AE, 3349 }, { 0x32AF, 3352 }, { 0x32B0, 1804 }, { 0x32B1, 3346 }, { 0x32B2, 3358 }, { 0x32B3, 3361 }, { 0x32B4, 1825 }, { 0x32B5, 3355 }, { 0x32B6, 1819 }, { 0x32B7, 1822 }, { 0x32B8, 802 }, { 0x32B9, 1816 }, { 0x32BA, 1834 }, { 0x32BB, 1837 }, { 0x32BC, 805 }, { 0x32BD, 1828 }, { 0x32BE, 3364 }, { 0x32BF, 1831 }, { 0x32C0, 1846 }, { 0x32C1, 1849 }, { 0x32C2, 808 }, { 0x32C3, 1840 }, { 0x32C4, 3367 }, { 0x32C5, 1843 }, { 0x32C6, 2848 }, { 0x32C7, 2851 }, { 0x32C8, 1375 }, { 0x32C9, 2845 }, { 0x32CA, 3898 }, { 0x32CB, 3901 }, { 0x32CC, 2842 }, { 0x32CD, 3895 }, { 0x32CE, 3907 }, { 0x32CF, 2863 }, { 0x32D0, 3904 }, { 0x32D1, 2857 }, { 0x32D2, 2860 }, { 0x32D3, 1378 }, { 0x32D4, 2854 }, { 0x32D5, 2872 }, { 0x32D6, 2875 }, { 0x32D7, 1381 }, { 0x32D8, 2866 }, { 0x32D9, 3910 }, { 0x32DA, 2869 }, { 0x32DB, 2881 }, { 0x32DC, 2884 }, { 0x32DD, 1384 }, { 0x32DE, 2878 }, { 0x32DF, 3145 }, { 0x32E0, 3148 }, { 0x32E1, 1672 }, { 0x32E2, 3142 }, { 0x32E3, 3958 }, { 0x32E4, 3961 }, { 0x32E5, 3139 }, { 0x32E6, 3955 }, { 0x32E7, 3964 }, { 0x32E8, 3160 }, { 0x32E9, 3154 }, { 0x32EA, 3157 }, { 0x32EB, 1675 }, { 0x32EC, 3151 }, { 0x32ED, 3169 }, { 0x32EE, 1678 }, { 0x32EF, 3163 }, { 0x32F0, 3967 }, { 0x32F1, 3166 }, { 0x32F2, 3178 }, { 0x32F3, 3181 }, { 0x32F4, 1681 }, { 0x32F5, 3172 }, { 0x32F6, 3970 }, { 0x32F7, 3175 }, { 0x32F8, 3247 }, { 0x32F9, 3250 }, { 0x32FA, 1723 }, { 0x32FB, 3244 }, { 0x32FC, 3982 }, { 0x32FD, 3985 }, { 0x32FE, 3241 }, { 0x32FF, 3979 }, { 0x3300, 3991 }, { 0x3301, 3262 }, { 0x3302, 3988 }, { 0x3303, 3256 }, { 0x3304, 3259 }, { 0x3305, 1726 }, { 0x3306, 3253 }, { 0x3307, 3268 }, { 0x3308, 3271 }, { 0x3309, 1729 }, { 0x330A, 3265 }, { 0x330B, 2161 }, { 0x330C, 2164 }, { 0x330D, 889 }, { 0x330E, 2158 }, { 0x330F, 3601 }, { 0x3310, 3604 }, { 0x3311, 2155 }, { 0x3312, 3598 }, { 0x3313, 3607 }, { 0x3314, 2176 }, { 0x3315, 2170 }, { 0x3316, 2173 }, { 0x3317, 892 }, { 0x3318, 2167 }, { 0x3319, 2185 }, { 0x331A, 2188 }, { 0x331B, 895 }, { 0x331C, 2179 }, { 0x331D, 3610 }, { 0x331E, 2182 }, { 0x331F, 2197 }, { 0x3320, 2200 }, { 0x3321, 898 }, { 0x3322, 2194 }, { 0x3323, 3616 }, { 0x3324, 3619 }, { 0x3325, 2191 }, { 0x3326, 3613 }, { 0x3327, 3625 }, { 0x3328, 3628 }, { 0x3329, 2212 }, { 0x332A, 3622 }, { 0x332B, 2206 }, { 0x332C, 2209 }, { 0x332D, 901 }, { 0x332E, 2203 }, { 0x332F, 2221 }, { 0x3330, 2224 }, { 0x3331, 904 }, { 0x3332, 2215 }, { 0x3333, 3631 }, { 0x3334, 2218 }, { 0x3335, 2233 }, { 0x3336, 2236 }, { 0x3337, 907 }, { 0x3338, 2227 }, { 0x3339, 3634 }, { 0x333A, 2230 }, { 0x333B, 487 }, { 0x333C, 421 }, { 0x333D, 469 }, { 0x333E, 550 }, { 0x333F, 451 }, { 0x3340, 493 }, { 0x3341, 526 }, { 0x3342, 457 }, { 0x3343, 424 }, { 0x3344, 532 }, { 0x3345, 475 }, { 0x3346, 517 }, { 0x3347, 478 }, { 0x3348, 436 }, { 0x3349, 481 }, { 0x334A, 538 }, { 0x334B, 496 }, { 0x334C, 412 }, { 0x334D, 511 }, { 0x334E, 454 }, { 0x334F, 523 }, { 0x3350, 442 }, { 0x3351, 529 }, { 0x3352, 553 }, { 0x3353, 430 }, { 0x3354, 427 }, { 0x3355, 544 }, { 0x3356, 508 }, { 0x3357, 484 }, { 0x3358, 463 }, { 0x3359, 505 }, { 0x335A, 502 }, { 0x335B, 490 }, { 0x335C, 499 }, { 0x335D, 439 }, { 0x335E, 415 }, { 0x335F, 556 }, { 0x3360, 466 }, { 0x3361, 460 }, { 0x3362, 541 }, { 0x3363, 433 }, { 0x3364, 409 }, { 0x3365, 565 }, { 0x3366, 472 }, { 0x3367, 406 }, { 0x3368, 520 }, { 0x3369, 448 }, { 0x336A, 535 }, { 0x336B, 559 }, { 0x336C, 514 }, { 0x336D, 562 }, { 0x336E, 445 }, { 0x336F, 568 }, { 0x3370, 547 }, { 0x3371, 418 }, { 0x3372, 13180 }, { 0x3373, 13219 }, { 0x3374, 13264 }, { 0x3375, 13186 }, { 0x3376, 13225 }, { 0x3377, 13270 }, { 0x3378, 13195 }, { 0x3379, 13204 }, { 0x337A, 13258 }, { 0x337B, 13201 }, { 0x337C, 13183 }, { 0x337D, 13246 }, { 0x337E, 13249 }, { 0x337F, 13273 }, { 0x3380, 13309 }, { 0x3381, 13210 }, { 0x3382, 13213 }, { 0x3383, 13207 }, { 0x3384, 13222 }, { 0x3385, 13276 }, { 0x3386, 13243 }, { 0x3387, 13261 }, { 0x3388, 13198 }, { 0x3389, 13237 }, { 0x338A, 13255 }, { 0x338B, 13192 }, { 0x338C, 13234 }, { 0x338D, 13267 }, { 0x338E, 13240 }, { 0x338F, 13252 }, { 0x3390, 13162 }, { 0x3391, 13177 }, { 0x3392, 13165 }, { 0x3393, 13189 }, { 0x3394, 13168 }, { 0x3395, 13171 }, { 0x3396, 13174 }, { 0x3397, 13228 }, { 0x3398, 13231 }, { 0x3399, 13216 }, { 0x339A, 13294 }, { 0x339B, 13279 }, { 0x339C, 13299 }, { 0x339D, 13284 }, { 0x339E, 13289 }, { 0x339F, 13304 }, { 0x33A0, 13316 }, { 0x33A1, 13312 }, { 0x33A2, 11075 }, { 0x33A3, 11384 }, { 0x33A4, 11420 }, { 0x33A5, 11612 }, { 0x33A6, 11783 }, { 0x33A7, 11549 }, { 0x33A8, 11657 }, { 0x33A9, 11336 }, { 0x33AA, 11708 }, { 0x33AB, 11699 }, { 0x33AC, 11801 }, { 0x33AD, 11684 }, { 0x33AE, 11387 }, { 0x33AF, 11603 }, { 0x33B0, 11582 }, { 0x33B1, 11777 }, { 0x33B2, 11663 }, { 0x33B3, 11795 }, { 0x33B4, 11468 }, { 0x33B5, 11555 }, { 0x33B6, 11363 }, { 0x33B7, 11729 }, { 0x33B8, 11561 }, { 0x33B9, 11771 }, { 0x33BA, 11636 }, { 0x33BB, 11789 }, { 0x33BC, 11357 }, { 0x33BD, 11438 }, { 0x33BE, 11759 }, { 0x33BF, 11630 }, { 0x33C0, 11447 }, { 0x33C1, 11827 }, { 0x33C2, 11408 }, { 0x33C3, 11489 }, { 0x33C4, 11510 }, { 0x33C5, 11765 }, { 0x33C6, 11018 }, { 0x33C7, 11126 }, { 0x33C8, 11117 }, { 0x33C9, 11426 }, { 0x33CA, 11297 }, { 0x33CB, 11618 }, { 0x33CC, 11219 }, { 0x33CD, 11345 }, { 0x33CE, 11036 }, { 0x33CF, 11480 }, { 0x33D0, 11459 }, { 0x33D1, 11720 }, { 0x33D2, 11399 }, { 0x33D3, 11087 }, { 0x33D4, 11282 }, { 0x33D5, 11264 }, { 0x33D6, 11591 }, { 0x33D7, 11372 }, { 0x33D8, 11672 }, { 0x33D9, 11165 }, { 0x33DA, 11234 }, { 0x33DB, 11066 }, { 0x33DC, 11501 }, { 0x33DD, 11249 }, { 0x33DE, 11570 }, { 0x33DF, 11327 }, { 0x33E0, 11645 }, { 0x33E1, 11051 }, { 0x33E2, 11135 }, { 0x33E3, 11519 }, { 0x33E4, 11312 }, { 0x33E5, 11150 }, { 0x33E6, 11747 }, { 0x33E7, 11102 }, { 0x33E8, 11180 }, { 0x33E9, 11198 }, { 0x33EA, 11537 }, { 0x33EB, 11012 }, { 0x33EC, 11027 }, { 0x33ED, 11735 }, { 0x33EE, 11111 }, { 0x33EF, 11417 }, { 0x33F0, 11291 }, { 0x33F1, 11609 }, { 0x33F2, 11213 }, { 0x33F3, 11339 }, { 0x33F4, 11030 }, { 0x33F5, 11474 }, { 0x33F6, 11453 }, { 0x33F7, 11696 }, { 0x33F8, 11714 }, { 0x33F9, 11393 }, { 0x33FA, 11081 }, { 0x33FB, 11276 }, { 0x33FC, 11258 }, { 0x33FD, 11585 }, { 0x33FE, 11366 }, { 0x33FF, 11666 }, { 0x3400, 11159 }, { 0x3401, 11228 }, { 0x3402, 11060 }, { 0x3403, 11495 }, { 0x3404, 11243 }, { 0x3405, 11564 }, { 0x3406, 11321 }, { 0x3407, 11639 }, { 0x3408, 11045 }, { 0x3409, 11129 }, { 0x340A, 11513 }, { 0x340B, 11306 }, { 0x340C, 11144 }, { 0x340D, 11444 }, { 0x340E, 11741 }, { 0x340F, 11096 }, { 0x3410, 11174 }, { 0x3411, 11189 }, { 0x3412, 11531 }, { 0x3413, 11210 }, { 0x3414, 11546 }, { 0x3415, 11432 }, { 0x3416, 11624 }, { 0x3417, 11786 }, { 0x3418, 11552 }, { 0x3419, 11660 }, { 0x341A, 11354 }, { 0x341B, 11711 }, { 0x341C, 11705 }, { 0x341D, 11804 }, { 0x341E, 11693 }, { 0x341F, 11390 }, { 0x3420, 11606 }, { 0x3421, 11600 }, { 0x3422, 11780 }, { 0x3423, 11681 }, { 0x3424, 11798 }, { 0x3425, 11471 }, { 0x3426, 11558 }, { 0x3427, 11381 }, { 0x3428, 11732 }, { 0x3429, 11579 }, { 0x342A, 11774 }, { 0x342B, 11654 }, { 0x342C, 11792 }, { 0x342D, 11360 }, { 0x342E, 11441 }, { 0x342F, 11762 }, { 0x3430, 11633 }, { 0x3431, 11450 }, { 0x3432, 11833 }, { 0x3433, 11414 }, { 0x3434, 11492 }, { 0x3435, 11528 }, { 0x3436, 11768 }, { 0x3437, 11024 }, { 0x3438, 11273 }, { 0x3439, 11123 }, { 0x343A, 11435 }, { 0x343B, 11303 }, { 0x343C, 11627 }, { 0x343D, 11225 }, { 0x343E, 11351 }, { 0x343F, 11042 }, { 0x3440, 11486 }, { 0x3441, 11465 }, { 0x3442, 11726 }, { 0x3443, 11405 }, { 0x3444, 11093 }, { 0x3445, 11288 }, { 0x3446, 11270 }, { 0x3447, 11597 }, { 0x3448, 11378 }, { 0x3449, 11678 }, { 0x344A, 11171 }, { 0x344B, 11240 }, { 0x344C, 11072 }, { 0x344D, 11507 }, { 0x344E, 11255 }, { 0x344F, 11576 }, { 0x3450, 11333 }, { 0x3451, 11651 }, { 0x3452, 11057 }, { 0x3453, 11141 }, { 0x3454, 11525 }, { 0x3455, 11318 }, { 0x3456, 11156 }, { 0x3457, 11753 }, { 0x3458, 11108 }, { 0x3459, 11186 }, { 0x345A, 11204 }, { 0x345B, 11543 }, { 0x345C, 11021 }, { 0x345D, 11207 }, { 0x345E, 11756 }, { 0x345F, 11120 }, { 0x3460, 11429 }, { 0x3461, 11300 }, { 0x3462, 11621 }, { 0x3463, 11222 }, { 0x3464, 11348 }, { 0x3465, 11039 }, { 0x3466, 11483 }, { 0x3467, 11462 }, { 0x3468, 11723 }, { 0x3469, 11402 }, { 0x346A, 11690 }, { 0x346B, 11090 }, { 0x346C, 11285 }, { 0x346D, 11267 }, { 0x346E, 11594 }, { 0x346F, 11375 }, { 0x3470, 11675 }, { 0x3471, 11168 }, { 0x3472, 11237 }, { 0x3473, 11069 }, { 0x3474, 11504 }, { 0x3475, 11252 }, { 0x3476, 11573 }, { 0x3477, 11330 }, { 0x3478, 11648 }, { 0x3479, 11054 }, { 0x347A, 11138 }, { 0x347B, 11522 }, { 0x347C, 11315 }, { 0x347D, 11153 }, { 0x347E, 11750 }, { 0x347F, 11105 }, { 0x3480, 11183 }, { 0x3481, 11201 }, { 0x3482, 11540 }, { 0x3483, 11015 }, { 0x3484, 11078 }, { 0x3485, 11738 }, { 0x3486, 11114 }, { 0x3487, 11423 }, { 0x3488, 11294 }, { 0x3489, 11615 }, { 0x348A, 11216 }, { 0x348B, 11342 }, { 0x348C, 11033 }, { 0x348D, 11477 }, { 0x348E, 11456 }, { 0x348F, 11702 }, { 0x3490, 11717 }, { 0x3491, 11396 }, { 0x3492, 11687 }, { 0x3493, 11084 }, { 0x3494, 11279 }, { 0x3495, 11261 }, { 0x3496, 11588 }, { 0x3497, 11369 }, { 0x3498, 11669 }, { 0x3499, 11162 }, { 0x349A, 11231 }, { 0x349B, 11063 }, { 0x349C, 11498 }, { 0x349D, 11246 }, { 0x349E, 11567 }, { 0x349F, 11324 }, { 0x34A0, 11642 }, { 0x34A1, 11048 }, { 0x34A2, 11132 }, { 0x34A3, 11516 }, { 0x34A4, 11309 }, { 0x34A5, 11147 }, { 0x34A6, 11744 }, { 0x34A7, 11830 }, { 0x34A8, 11099 }, { 0x34A9, 11411 }, { 0x34AA, 11177 }, { 0x34AB, 11192 }, { 0x34AC, 11534 }, { 0x34AD, 11195 }, { 0x34AE, 11836 }, { 0x34AF, 10938 }, { 0x34B0, 10935 }, { 0x34B1, 11009 }, { 0x34B2, 11811 }, { 0x34B3, 11815 }, { 0x34B4, 11823 }, { 0x34B5, 11003 }, { 0x34B6, 11006 }, { 0x34B7, 10994 }, { 0x34B8, 10973 }, { 0x34B9, 10979 }, { 0x34BA, 10970 }, { 0x34BB, 10976 }, { 0x34BC, 10982 }, { 0x34BD, 11000 }, { 0x34BE, 10991 }, { 0x34BF, 10997 }, { 0x34C0, 10985 }, { 0x34C1, 10988 }, { 0x34C2, 10958 }, { 0x34C3, 10940 }, { 0x34C4, 10946 }, { 0x34C5, 10967 }, { 0x34C6, 10952 }, { 0x34C7, 10949 }, { 0x34C8, 10943 }, { 0x34C9, 10964 }, { 0x34CA, 10961 }, { 0x34CB, 10955 }, { 0x34CC, 11819 }, { 0x34CD, 11807 }, { 0x34CE, 75025 }, { 0x34CF, 74059 }, { 0x34D0, 74933 }, { 0x34D1, 73962 }, { 0x34D2, 75105 }, { 0x34D3, 74148 }, { 0x34D4, 74804 }, { 0x34D5, 73812 }, { 0x34D6, 74929 }, { 0x34D7, 73958 }, { 0x34D8, 75164 }, { 0x34D9, 74207 }, { 0x34DA, 74924 }, { 0x34DB, 73953 }, { 0x34DC, 75056 }, { 0x34DD, 74090 }, { 0x34DE, 74902 }, { 0x34DF, 73931 }, { 0x34E0, 75077 }, { 0x34E1, 74116 }, { 0x34E2, 75095 }, { 0x34E3, 74138 }, { 0x34E4, 75061 }, { 0x34E5, 74100 }, { 0x34E6, 75003 }, { 0x34E7, 74032 }, { 0x34E8, 75034 }, { 0x34E9, 74068 }, { 0x34EA, 75082 }, { 0x34EB, 74121 }, { 0x34EC, 74596 }, { 0x34ED, 73604 }, { 0x34EE, 75110 }, { 0x34EF, 74153 }, { 0x34F0, 74862 }, { 0x34F1, 73870 }, { 0x34F2, 74867 }, { 0x34F3, 73875 }, { 0x34F4, 74872 }, { 0x34F5, 73880 }, { 0x34F6, 75159 }, { 0x34F7, 74202 }, { 0x34F8, 75154 }, { 0x34F9, 74197 }, { 0x34FA, 75014 }, { 0x34FB, 74043 }, { 0x34FC, 74267 }, { 0x34FD, 91435 }, { 0x34FE, 91409 }, { 0x34FF, 91619 }, { 0x3500, 91639 }, { 0x3501, 86200 }, { 0x3502, 91614 }, { 0x3503, 91445 }, { 0x3504, 91513 }, { 0x3505, 91453 }, { 0x3506, 91558 }, { 0x3507, 91568 }, { 0x3508, 91563 }, { 0x3509, 91580 }, { 0x350A, 91438 }, { 0x350B, 91629 }, { 0x350C, 74257 }, { 0x350D, 75199 }, { 0x350E, 74652 }, { 0x350F, 73660 }, { 0x3510, 74787 }, { 0x3511, 73795 }, { 0x3512, 74915 }, { 0x3513, 73944 }, { 0x3514, 74775 }, { 0x3515, 73783 }, { 0x3516, 74791 }, { 0x3517, 73799 }, { 0x3518, 74563 }, { 0x3519, 73571 }, { 0x351A, 74741 }, { 0x351B, 73749 }, { 0x351C, 74894 }, { 0x351D, 73918 }, { 0x351E, 74890 }, { 0x351F, 73914 }, { 0x3520, 74882 }, { 0x3521, 73906 }, { 0x3522, 74701 }, { 0x3523, 73709 }, { 0x3524, 74858 }, { 0x3525, 73866 }, { 0x3526, 75009 }, { 0x3527, 74038 }, { 0x3528, 75039 }, { 0x3529, 74073 }, { 0x352A, 84871 }, { 0x352B, 84876 }, { 0x352C, 91465 }, { 0x352D, 91598 }, { 0x352E, 15763 }, { 0x352F, 15784 }, { 0x3530, 15775 }, { 0x3531, 15793 }, { 0x3532, 15778 }, { 0x3533, 15883 }, { 0x3534, 15904 }, { 0x3535, 15772 }, { 0x3536, 15871 }, { 0x3537, 15766 }, { 0x3538, 15796 }, { 0x3539, 15826 }, { 0x353A, 15889 }, { 0x353B, 15964 }, { 0x353C, 15976 }, { 0x353D, 15979 }, { 0x353E, 15901 }, { 0x353F, 15934 }, { 0x3540, 15982 }, { 0x3541, 15769 }, { 0x3542, 15898 }, { 0x3543, 15814 }, { 0x3544, 15970 }, { 0x3545, 15835 }, { 0x3546, 15991 }, { 0x3547, 15967 }, { 0x3548, 15925 }, { 0x3549, 15856 }, { 0x354A, 15952 }, { 0x354B, 15823 }, { 0x354C, 15985 }, { 0x354D, 15916 }, { 0x354E, 15895 }, { 0x354F, 15919 }, { 0x3550, 15844 }, { 0x3551, 15943 }, { 0x3552, 15922 }, { 0x3553, 15955 }, { 0x3554, 15940 }, { 0x3555, 15946 }, { 0x3556, 15877 }, { 0x3557, 15913 }, { 0x3558, 15874 }, { 0x3559, 15847 }, { 0x355A, 15832 }, { 0x355B, 15802 }, { 0x355C, 15808 }, { 0x355D, 15820 }, { 0x355E, 15961 }, { 0x355F, 15880 }, { 0x3560, 15853 }, { 0x3561, 16000 }, { 0x3562, 15937 }, { 0x3563, 15868 }, { 0x3564, 15892 }, { 0x3565, 15958 }, { 0x3566, 15781 }, { 0x3567, 15850 }, { 0x3568, 15841 }, { 0x3569, 15817 }, { 0x356A, 15799 }, { 0x356B, 15829 }, { 0x356C, 15862 }, { 0x356D, 15790 }, { 0x356E, 15931 }, { 0x356F, 15886 }, { 0x3570, 15865 }, { 0x3571, 15805 }, { 0x3572, 15838 }, { 0x3573, 15787 }, { 0x3574, 15811 }, { 0x3575, 15928 }, { 0x3576, 15910 }, { 0x3577, 15859 }, { 0x3578, 15907 }, { 0x3579, 15949 }, { 0x357A, 15988 }, { 0x357B, 15994 }, { 0x357C, 15973 }, { 0x357D, 15997 }, { 0x357E, 18369 }, { 0x357F, 18373 }, { 0x3580, 18364 }, { 0x3581, 15756 }, { 0x3582, 15759 }, { 0x3583, 15761 }, { 0x3584, 18377 }, { 0x3585, 18366 }, { 0x3586, 84824 }, { 0x3587, 84848 }, { 0x3588, 84830 }, { 0x3589, 84854 }, { 0x358A, 84812 }, { 0x358B, 84836 }, { 0x358C, 84818 }, { 0x358D, 84842 }, { 0x358E, 84934 }, { 0x358F, 84087 }, { 0x3590, 84044 }, { 0x3591, 84000 }, { 0x3592, 84903 }, { 0x3593, 84940 }, { 0x3594, 84093 }, { 0x3595, 84050 }, { 0x3596, 84006 }, { 0x3597, 84909 }, { 0x3598, 84947 }, { 0x3599, 84100 }, { 0x359A, 84057 }, { 0x359B, 84028 }, { 0x359C, 84916 }, { 0x359D, 83932 }, { 0x359E, 83928 }, { 0x359F, 83937 }, { 0x35A0, 84154 }, { 0x35A1, 84650 }, { 0x35A2, 84655 }, { 0x35A3, 84670 }, { 0x35A4, 84664 }, { 0x35A5, 84017 }, { 0x35A6, 84685 }, { 0x35A7, 84679 }, { 0x35A8, 30892 }, { 0x35A9, 27824 }, { 0x35AA, 30887 }, { 0x35AB, 27819 }, { 0x35AC, 30619 }, { 0x35AD, 27105 }, { 0x35AE, 30558 }, { 0x35AF, 26919 }, { 0x35B0, 30858 }, { 0x35B1, 27773 }, { 0x35B2, 30862 }, { 0x35B3, 27777 }, { 0x35B4, 30866 }, { 0x35B5, 27781 }, { 0x35B6, 27920 }, { 0x35B7, 28002 }, { 0x35B8, 30477 }, { 0x35B9, 26784 }, { 0x35BA, 30497 }, { 0x35BB, 26804 }, { 0x35BC, 30501 }, { 0x35BD, 26808 }, { 0x35BE, 30505 }, { 0x35BF, 26812 }, { 0x35C0, 30509 }, { 0x35C1, 26816 }, { 0x35C2, 30516 }, { 0x35C3, 26823 }, { 0x35C4, 30836 }, { 0x35C5, 27687 }, { 0x35C6, 29121 }, { 0x35C7, 25058 }, { 0x35C8, 29149 }, { 0x35C9, 25093 }, { 0x35CA, 29127 }, { 0x35CB, 25064 }, { 0x35CC, 30721 }, { 0x35CD, 27329 }, { 0x35CE, 29194 }, { 0x35CF, 25144 }, { 0x35D0, 29478 }, { 0x35D1, 25526 }, { 0x35D2, 29486 }, { 0x35D3, 25534 }, { 0x35D4, 30550 }, { 0x35D5, 26888 }, { 0x35D6, 29715 }, { 0x35D7, 25763 }, { 0x35D8, 29723 }, { 0x35D9, 25778 }, { 0x35DA, 29729 }, { 0x35DB, 25784 }, { 0x35DC, 29740 }, { 0x35DD, 25808 }, { 0x35DE, 29748 }, { 0x35DF, 25816 }, { 0x35E0, 29840 }, { 0x35E1, 25950 }, { 0x35E2, 30605 }, { 0x35E3, 27071 }, { 0x35E4, 30258 }, { 0x35E5, 26471 }, { 0x35E6, 30562 }, { 0x35E7, 26939 }, { 0x35E8, 30872 }, { 0x35E9, 27787 }, { 0x35EA, 30707 }, { 0x35EB, 27294 }, { 0x35EC, 30713 }, { 0x35ED, 27300 }, { 0x35EE, 30652 }, { 0x35EF, 27221 }, { 0x35F0, 30530 }, { 0x35F1, 26854 }, { 0x35F2, 30534 }, { 0x35F3, 26862 }, { 0x35F4, 30570 }, { 0x35F5, 26963 }, { 0x35F6, 83925 }, { 0x35F7, 26967 }, { 0x35F8, 27051 }, { 0x35F9, 27055 }, { 0x35FA, 27059 }, { 0x35FB, 27067 }, { 0x35FC, 28062 }, { 0x35FD, 27082 }, { 0x35FE, 26931 }, { 0x35FF, 30787 }, { 0x3600, 27602 }, { 0x3601, 30792 }, { 0x3602, 27607 }, { 0x3603, 30797 }, { 0x3604, 30771 }, { 0x3605, 27565 }, { 0x3606, 30746 }, { 0x3607, 27440 }, { 0x3608, 30802 }, { 0x3609, 27617 }, { 0x360A, 30807 }, { 0x360B, 27622 }, { 0x360C, 30812 }, { 0x360D, 27627 }, { 0x360E, 84034 }, { 0x360F, 84143 }, { 0x3610, 84179 }, { 0x3611, 30854 }, { 0x3612, 27729 }, { 0x3613, 30736 }, { 0x3614, 25240 }, { 0x3615, 28191 }, { 0x3616, 29383 }, { 0x3617, 25403 }, { 0x3618, 28471 }, { 0x3619, 24319 }, { 0x361A, 24376 }, { 0x361B, 24855 }, { 0x361C, 28461 }, { 0x361D, 24309 }, { 0x361E, 28810 }, { 0x361F, 24713 }, { 0x3620, 30821 }, { 0x3621, 27647 }, { 0x3622, 30826 }, { 0x3623, 27652 }, { 0x3624, 30831 }, { 0x3625, 27657 }, { 0x3626, 28869 }, { 0x3627, 24779 }, { 0x3628, 29142 }, { 0x3629, 25079 }, { 0x362A, 29376 }, { 0x362B, 25389 }, { 0x362C, 29826 }, { 0x362D, 25908 }, { 0x362E, 29923 }, { 0x362F, 26052 }, { 0x3630, 28900 }, { 0x3631, 30848 }, { 0x3632, 30726 }, { 0x3633, 29188 }, { 0x3634, 30697 }, { 0x3635, 30741 }, { 0x3636, 30756 }, { 0x3637, 29079 }, { 0x3638, 30566 }, { 0x3639, 30610 }, { 0x363A, 27086 }, { 0x363B, 30676 }, { 0x363C, 27253 }, { 0x363D, 31020 }, { 0x363E, 84719 }, { 0x363F, 84600 }, { 0x3640, 28085 }, { 0x3641, 31010 }, { 0x3642, 31015 }, { 0x3643, 31005 }, { 0x3644, 30995 }, { 0x3645, 31000 }, { 0x3646, 54556 }, { 0x3647, 54564 }, { 0x3648, 54527 }, { 0x3649, 54572 }, { 0x364A, 54560 }, { 0x364B, 54568 }, { 0x364C, 54519 }, { 0x364D, 54600 }, { 0x364E, 54656 }, { 0x364F, 54588 }, { 0x3650, 54648 }, { 0x3651, 54523 }, { 0x3652, 54580 }, { 0x3653, 54636 }, { 0x3654, 54596 }, { 0x3655, 54652 }, { 0x3656, 54672 }, { 0x3657, 54680 }, { 0x3658, 54640 }, { 0x3659, 54676 }, { 0x365A, 54628 }, { 0x365B, 54668 }, { 0x365C, 54584 }, { 0x365D, 54644 }, { 0x365E, 54612 }, { 0x365F, 54616 }, { 0x3660, 54660 }, { 0x3661, 54576 }, { 0x3662, 54632 }, { 0x3663, 54608 }, { 0x3664, 54620 }, { 0x3665, 54604 }, { 0x3666, 54664 }, { 0x3667, 54624 }, { 0x3668, 54592 }, { 0x3669, 54531 }, { 0x366A, 54541 }, { 0x366B, 54546 }, { 0x366C, 54536 }, { 0x366D, 54551 }, { 0x366E, 54684 }, { 0x366F, 54688 }, { 0x3670, 54692 }, { 0x3671, 54696 }, { 0x3672, 32791 }, { 0x3673, 32781 }, { 0x3674, 32801 }, { 0x3675, 32796 }, { 0x3676, 32786 }, { 0x3677, 32806 }, { 0x3678, 32777 }, { 0x3679, 32815 }, { 0x367A, 32773 }, { 0x367B, 32811 }, { 0x367C, 85469 }, { 0x367D, 85520 }, { 0x367E, 85460 }, { 0x367F, 85523 }, { 0x3680, 85448 }, { 0x3681, 85508 }, { 0x3682, 85466 }, { 0x3683, 85529 }, { 0x3684, 85493 }, { 0x3685, 85538 }, { 0x3686, 85451 }, { 0x3687, 85478 }, { 0x3688, 85481 }, { 0x3689, 85532 }, { 0x368A, 85445 }, { 0x368B, 85475 }, { 0x368C, 85541 }, { 0x368D, 85550 }, { 0x368E, 85514 }, { 0x368F, 85496 }, { 0x3690, 85547 }, { 0x3691, 85505 }, { 0x3692, 85556 }, { 0x3693, 85502 }, { 0x3694, 85487 }, { 0x3695, 85472 }, { 0x3696, 85535 }, { 0x3697, 85490 }, { 0x3698, 85463 }, { 0x3699, 85430 }, { 0x369A, 85436 }, { 0x369B, 85442 }, { 0x369C, 85433 }, { 0x369D, 85439 }, { 0x369E, 85484 }, { 0x369F, 85499 }, { 0x36A0, 85457 }, { 0x36A1, 85517 }, { 0x36A2, 85454 }, { 0x36A3, 85587 }, { 0x36A4, 85591 }, { 0x36A5, 85544 }, { 0x36A6, 85553 }, { 0x36A7, 85511 }, { 0x36A8, 85526 }, { 0x36A9, 85564 }, { 0x36AA, 85572 }, { 0x36AB, 85560 }, { 0x36AC, 85568 }, { 0x36AD, 85583 }, { 0x36AE, 85595 }, { 0x36AF, 85576 }, { 0x36B0, 85579 }, { 0x36B1, 85426 }, { 0x36B2, 85419 }, { 0x36B3, 85422 }, { 0x36B4, 105214 }, { 0x36B5, 105211 }, { 0x36B6, 105319 }, { 0x36B7, 105334 }, { 0x36B8, 105325 }, { 0x36B9, 105361 }, { 0x36BA, 105331 }, { 0x36BB, 105394 }, { 0x36BC, 105461 }, { 0x36BD, 105469 }, { 0x36BE, 105457 }, { 0x36BF, 105465 }, { 0x36C0, 105322 }, { 0x36C1, 105352 }, { 0x36C2, 105337 }, { 0x36C3, 105328 }, { 0x36C4, 105379 }, { 0x36C5, 105340 }, { 0x36C6, 105367 }, { 0x36C7, 105421 }, { 0x36C8, 105355 }, { 0x36C9, 105415 }, { 0x36CA, 105427 }, { 0x36CB, 105346 }, { 0x36CC, 105406 }, { 0x36CD, 105364 }, { 0x36CE, 105418 }, { 0x36CF, 105433 }, { 0x36D0, 105448 }, { 0x36D1, 105454 }, { 0x36D2, 105409 }, { 0x36D3, 105451 }, { 0x36D4, 105430 }, { 0x36D5, 105391 }, { 0x36D6, 105445 }, { 0x36D7, 105349 }, { 0x36D8, 105412 }, { 0x36D9, 105376 }, { 0x36DA, 105382 }, { 0x36DB, 105436 }, { 0x36DC, 105343 }, { 0x36DD, 105403 }, { 0x36DE, 105373 }, { 0x36DF, 105400 }, { 0x36E0, 105385 }, { 0x36E1, 105370 }, { 0x36E2, 105397 }, { 0x36E3, 105439 }, { 0x36E4, 105442 }, { 0x36E5, 105388 }, { 0x36E6, 105358 }, { 0x36E7, 105424 }, { 0x36E8, 105473 }, { 0x36E9, 105268 }, { 0x36EA, 105256 }, { 0x36EB, 105284 }, { 0x36EC, 105264 }, { 0x36ED, 105292 }, { 0x36EE, 105301 }, { 0x36EF, 105311 }, { 0x36F0, 105296 }, { 0x36F1, 105306 }, { 0x36F2, 105252 }, { 0x36F3, 105280 }, { 0x36F4, 105272 }, { 0x36F5, 105260 }, { 0x36F6, 105288 }, { 0x36F7, 105276 }, { 0x36F8, 105208 }, { 0x36F9, 105217 }, { 0x36FA, 105220 }, { 0x36FB, 105316 }, { 0x36FC, 105240 }, { 0x36FD, 105222 }, { 0x36FE, 105228 }, { 0x36FF, 105249 }, { 0x3700, 105234 }, { 0x3701, 105231 }, { 0x3702, 105225 }, { 0x3703, 105246 }, { 0x3704, 105243 }, { 0x3705, 105237 }, { 0x3706, 91802 }, { 0x3707, 91778 }, { 0x3708, 91786 }, { 0x3709, 91814 }, { 0x370A, 91794 }, { 0x370B, 91790 }, { 0x370C, 91782 }, { 0x370D, 91810 }, { 0x370E, 91806 }, { 0x370F, 91798 }, { 0x3710, 91818 }, { 0x3711, 91822 }, { 0x3712, 91826 }, { 0x3713, 91830 }, { 0x3714, 91834 }, { 0x3715, 91838 }, { 0x3716, 91842 }, { 0x3717, 91774 }, { 0x3718, 103240 }, { 0x3719, 103271 }, { 0x371A, 103229 }, { 0x371B, 103263 }, { 0x371C, 103267 }, { 0x371D, 103275 }, { 0x371E, 103257 }, { 0x371F, 103215 }, { 0x3720, 103282 }, { 0x3721, 103684 }, { 0x3722, 103237 }, { 0x3723, 103218 }, { 0x3724, 23267 }, { 0x3725, 23243 }, { 0x3726, 23251 }, { 0x3727, 23279 }, { 0x3728, 23259 }, { 0x3729, 23255 }, { 0x372A, 23247 }, { 0x372B, 23275 }, { 0x372C, 23271 }, { 0x372D, 23263 }, { 0x372E, 23331 }, { 0x372F, 23391 }, { 0x3730, 23323 }, { 0x3731, 23395 }, { 0x3732, 23363 }, { 0x3733, 23407 }, { 0x3734, 23383 }, { 0x3735, 23399 }, { 0x3736, 23367 }, { 0x3737, 23387 }, { 0x3738, 23343 }, { 0x3739, 23355 }, { 0x373A, 23403 }, { 0x373B, 23339 }, { 0x373C, 23319 }, { 0x373D, 23311 }, { 0x373E, 23359 }, { 0x373F, 23379 }, { 0x3740, 23335 }, { 0x3741, 23375 }, { 0x3742, 23411 }, { 0x3743, 23327 }, { 0x3744, 23371 }, { 0x3745, 23315 }, { 0x3746, 23303 }, { 0x3747, 23347 }, { 0x3748, 23307 }, { 0x3749, 23351 }, { 0x374A, 23299 }, { 0x374B, 23283 }, { 0x374C, 23291 }, { 0x374D, 23295 }, { 0x374E, 23287 }, { 0x374F, 23239 }, { 0x3750, 23230 }, { 0x3751, 23234 }, { 0x3752, 23222 }, { 0x3753, 23226 }, { 0x3754, 53607 }, { 0x3755, 53598 }, { 0x3756, 53643 }, { 0x3757, 53628 }, { 0x3758, 53595 }, { 0x3759, 53616 }, { 0x375A, 53619 }, { 0x375B, 53589 }, { 0x375C, 53613 }, { 0x375D, 53592 }, { 0x375E, 53604 }, { 0x375F, 53646 }, { 0x3760, 53625 }, { 0x3761, 53622 }, { 0x3762, 53610 }, { 0x3763, 53634 }, { 0x3764, 53631 }, { 0x3765, 53601 }, { 0x3766, 53637 }, { 0x3767, 53649 }, { 0x3768, 53640 }, { 0x3769, 53652 }, { 0x376A, 53586 }, { 0x376B, 53558 }, { 0x376C, 53566 }, { 0x376D, 53554 }, { 0x376E, 53570 }, { 0x376F, 53562 }, { 0x3770, 53574 }, { 0x3771, 53582 }, { 0x3772, 53578 }, { 0x3773, 53672 }, { 0x3774, 53664 }, { 0x3775, 53668 }, { 0x3776, 53660 }, { 0x3777, 53655 }, { 0x3778, 53657 }, { 0x3779, 46960 }, { 0x377A, 46963 }, { 0x377B, 46903 }, { 0x377C, 46957 }, { 0x377D, 46936 }, { 0x377E, 47071 }, { 0x377F, 46939 }, { 0x3780, 47074 }, { 0x3781, 46882 }, { 0x3782, 46888 }, { 0x3783, 47053 }, { 0x3784, 47092 }, { 0x3785, 46795 }, { 0x3786, 46876 }, { 0x3787, 47017 }, { 0x3788, 46918 }, { 0x3789, 46921 }, { 0x378A, 46786 }, { 0x378B, 47089 }, { 0x378C, 47008 }, { 0x378D, 46870 }, { 0x378E, 47041 }, { 0x378F, 46852 }, { 0x3790, 46843 }, { 0x3791, 47056 }, { 0x3792, 46954 }, { 0x3793, 46999 }, { 0x3794, 46780 }, { 0x3795, 47059 }, { 0x3796, 82469 }, { 0x3797, 82456 }, { 0x3798, 82463 }, { 0x3799, 82466 }, { 0x379A, 82544 }, { 0x379B, 82553 }, { 0x379C, 82550 }, { 0x379D, 82597 }, { 0x379E, 82560 }, { 0x379F, 82634 }, { 0x37A0, 82683 }, { 0x37A1, 82687 }, { 0x37A2, 82547 }, { 0x37A3, 82563 }, { 0x37A4, 82557 }, { 0x37A5, 82607 }, { 0x37A6, 82614 }, { 0x37A7, 82610 }, { 0x37A8, 82587 }, { 0x37A9, 82590 }, { 0x37AA, 82680 }, { 0x37AB, 82573 }, { 0x37AC, 82576 }, { 0x37AD, 82600 }, { 0x37AE, 82695 }, { 0x37AF, 82603 }, { 0x37B0, 82692 }, { 0x37B1, 82699 }, { 0x37B2, 82702 }, { 0x37B3, 82673 }, { 0x37B4, 82676 }, { 0x37B5, 82627 }, { 0x37B6, 82660 }, { 0x37B7, 82663 }, { 0x37B8, 82580 }, { 0x37B9, 82583 }, { 0x37BA, 82624 }, { 0x37BB, 82631 }, { 0x37BC, 82638 }, { 0x37BD, 82566 }, { 0x37BE, 82569 }, { 0x37BF, 82621 }, { 0x37C0, 82670 }, { 0x37C1, 82642 }, { 0x37C2, 82645 }, { 0x37C3, 82618 }, { 0x37C4, 82667 }, { 0x37C5, 82652 }, { 0x37C6, 82656 }, { 0x37C7, 82649 }, { 0x37C8, 82594 }, { 0x37C9, 82459 }, { 0x37CA, 82536 }, { 0x37CB, 82540 }, { 0x37CC, 82514 }, { 0x37CD, 82518 }, { 0x37CE, 82505 }, { 0x37CF, 82509 }, { 0x37D0, 82532 }, { 0x37D1, 82523 }, { 0x37D2, 82528 }, { 0x37D3, 82716 }, { 0x37D4, 82720 }, { 0x37D5, 82712 }, { 0x37D6, 82710 }, { 0x37D7, 82415 }, { 0x37D8, 82502 }, { 0x37D9, 82425 }, { 0x37DA, 82431 }, { 0x37DB, 82428 }, { 0x37DC, 82438 }, { 0x37DD, 82447 }, { 0x37DE, 82441 }, { 0x37DF, 82444 }, { 0x37E0, 82418 }, { 0x37E1, 82421 }, { 0x37E2, 82450 }, { 0x37E3, 82706 }, { 0x37E4, 82724 }, { 0x37E5, 82490 }, { 0x37E6, 82472 }, { 0x37E7, 82478 }, { 0x37E8, 82499 }, { 0x37E9, 82484 }, { 0x37EA, 82481 }, { 0x37EB, 82475 }, { 0x37EC, 82496 }, { 0x37ED, 82493 }, { 0x37EE, 82487 }, { 0x37EF, 82434 }, { 0x37F0, 82453 }, { 0x37F1, 64137 }, { 0x37F2, 64133 }, { 0x37F3, 64141 }, { 0x37F4, 64149 }, { 0x37F5, 64129 }, { 0x37F6, 63589 }, { 0x37F7, 64357 }, { 0x37F8, 64062 }, { 0x37F9, 64012 }, { 0x37FA, 64017 }, { 0x37FB, 64042 }, { 0x37FC, 64022 }, { 0x37FD, 64047 }, { 0x37FE, 64032 }, { 0x37FF, 64067 }, { 0x3800, 64057 }, { 0x3801, 63507 }, { 0x3802, 63477 }, { 0x3803, 63487 }, { 0x3804, 63522 }, { 0x3805, 63497 }, { 0x3806, 63492 }, { 0x3807, 63482 }, { 0x3808, 63517 }, { 0x3809, 63512 }, { 0x380A, 63502 }, { 0x380B, 64052 }, { 0x380C, 64007 }, { 0x380D, 64037 }, { 0x380E, 64002 }, { 0x380F, 64027 }, { 0x3810, 12214 }, { 0x3811, 12220 }, { 0x3812, 12226 }, { 0x3813, 12217 }, { 0x3814, 12229 }, { 0x3815, 12223 }, { 0x3816, 12247 }, { 0x3817, 12298 }, { 0x3818, 12238 }, { 0x3819, 12292 }, { 0x381A, 12328 }, { 0x381B, 12304 }, { 0x381C, 12283 }, { 0x381D, 12325 }, { 0x381E, 12244 }, { 0x381F, 12295 }, { 0x3820, 12334 }, { 0x3821, 12307 }, { 0x3822, 12331 }, { 0x3823, 12268 }, { 0x3824, 12322 }, { 0x3825, 12235 }, { 0x3826, 12289 }, { 0x3827, 12310 }, { 0x3828, 12256 }, { 0x3829, 12286 }, { 0x382A, 12259 }, { 0x382B, 12316 }, { 0x382C, 12313 }, { 0x382D, 12232 }, { 0x382E, 12280 }, { 0x382F, 12301 }, { 0x3830, 12253 }, { 0x3831, 12277 }, { 0x3832, 12274 }, { 0x3833, 12262 }, { 0x3834, 12250 }, { 0x3835, 12271 }, { 0x3836, 12319 }, { 0x3837, 12265 }, { 0x3838, 12241 }, { 0x3839, 12186 }, { 0x383A, 12174 }, { 0x383B, 12202 }, { 0x383C, 12198 }, { 0x383D, 12182 }, { 0x383E, 12206 }, { 0x383F, 12178 }, { 0x3840, 12190 }, { 0x3841, 12194 }, { 0x3842, 12210 }, { 0x3843, 12393 }, { 0x3844, 12385 }, { 0x3845, 12381 }, { 0x3846, 12389 }, { 0x3847, 12341 }, { 0x3848, 12337 }, { 0x3849, 12373 }, { 0x384A, 12407 }, { 0x384B, 12369 }, { 0x384C, 12361 }, { 0x384D, 12349 }, { 0x384E, 12353 }, { 0x384F, 12365 }, { 0x3850, 12357 }, { 0x3851, 12345 }, { 0x3852, 12377 }, { 0x3853, 12402 }, { 0x3854, 12397 }, { 0x3855, 12162 }, { 0x3856, 12144 }, { 0x3857, 12150 }, { 0x3858, 12171 }, { 0x3859, 12156 }, { 0x385A, 12153 }, { 0x385B, 12147 }, { 0x385C, 12168 }, { 0x385D, 12165 }, { 0x385E, 12159 }, { 0x385F, 12419 }, { 0x3860, 12412 }, { 0x3861, 12415 }, { 0x3862, 12422 }, { 0x3863, 64199 }, { 0x3864, 64191 }, { 0x3865, 64231 }, { 0x3866, 64207 }, { 0x3867, 64247 }, { 0x3868, 64251 }, { 0x3869, 64255 }, { 0x386A, 64263 }, { 0x386B, 64235 }, { 0x386C, 64259 }, { 0x386D, 64239 }, { 0x386E, 64211 }, { 0x386F, 64219 }, { 0x3870, 64203 }, { 0x3871, 64243 }, { 0x3872, 64195 }, { 0x3873, 64362 }, { 0x3874, 64223 }, { 0x3875, 64227 }, { 0x3876, 64215 }, { 0x3877, 64353 }, { 0x3878, 64349 }, { 0x3879, 64345 }, { 0x387A, 64329 }, { 0x387B, 64321 }, { 0x387C, 64325 }, { 0x387D, 64178 }, { 0x387E, 63571 }, { 0x387F, 63576 }, { 0x3880, 63581 }, { 0x3881, 64165 }, { 0x3882, 64170 }, { 0x3883, 10584 }, { 0x3884, 10704 }, { 0x3885, 10639 }, { 0x3886, 10759 }, { 0x3887, 10664 }, { 0x3888, 10784 }, { 0x3889, 10574 }, { 0x388A, 10694 }, { 0x388B, 10644 }, { 0x388C, 10764 }, { 0x388D, 10559 }, { 0x388E, 10679 }, { 0x388F, 10634 }, { 0x3890, 10754 }, { 0x3891, 10614 }, { 0x3892, 10734 }, { 0x3893, 10649 }, { 0x3894, 10769 }, { 0x3895, 10564 }, { 0x3896, 10684 }, { 0x3897, 10619 }, { 0x3898, 10739 }, { 0x3899, 10659 }, { 0x389A, 10779 }, { 0x389B, 10599 }, { 0x389C, 10719 }, { 0x389D, 10554 }, { 0x389E, 10674 }, { 0x389F, 10604 }, { 0x38A0, 10724 }, { 0x38A1, 10654 }, { 0x38A2, 10774 }, { 0x38A3, 10569 }, { 0x38A4, 10689 }, { 0x38A5, 10594 }, { 0x38A6, 10714 }, { 0x38A7, 10629 }, { 0x38A8, 10749 }, { 0x38A9, 10609 }, { 0x38AA, 10729 }, { 0x38AB, 10589 }, { 0x38AC, 10709 }, { 0x38AD, 10624 }, { 0x38AE, 10744 }, { 0x38AF, 10579 }, { 0x38B0, 10699 }, { 0x38B1, 10549 }, { 0x38B2, 10669 }, { 0x38B3, 10469 }, { 0x38B4, 10513 }, { 0x38B5, 10501 }, { 0x38B6, 10537 }, { 0x38B7, 10509 }, { 0x38B8, 10497 }, { 0x38B9, 10505 }, { 0x38BA, 10473 }, { 0x38BB, 10529 }, { 0x38BC, 10545 }, { 0x38BD, 10533 }, { 0x38BE, 10541 }, { 0x38BF, 10525 }, { 0x38C0, 10521 }, { 0x38C1, 10517 }, { 0x38C2, 10477 }, { 0x38C3, 10492 }, { 0x38C4, 10482 }, { 0x38C5, 10487 }, { 0x38C6, 10799 }, { 0x38C7, 10807 }, { 0x38C8, 10803 }, { 0x38C9, 10789 }, { 0x38CA, 10794 }, { 0x38CB, 52552 }, { 0x38CC, 52565 }, { 0x38CD, 52595 }, { 0x38CE, 52650 }, { 0x38CF, 52679 }, { 0x38D0, 52732 }, { 0x38D1, 52599 }, { 0x38D2, 52695 }, { 0x38D3, 52646 }, { 0x38D4, 52662 }, { 0x38D5, 52666 }, { 0x38D6, 52487 }, { 0x38D7, 52492 }, { 0x38D8, 52497 }, { 0x38D9, 52482 }, { 0x38DA, 52502 }, { 0x38DB, 52747 }, { 0x38DC, 52438 }, { 0x38DD, 52426 }, { 0x38DE, 52753 }, { 0x38DF, 52433 }, { 0x38E0, 52547 }, { 0x38E1, 52744 }, { 0x38E2, 80361 }, { 0x38E3, 80355 }, { 0x38E4, 80445 }, { 0x38E5, 80448 }, { 0x38E6, 80352 }, { 0x38E7, 80358 }, { 0x38E8, 80166 }, { 0x38E9, 80160 }, { 0x38EA, 80421 }, { 0x38EB, 80424 }, { 0x38EC, 80157 }, { 0x38ED, 80163 }, { 0x38EE, 79584 }, { 0x38EF, 79578 }, { 0x38F0, 80175 }, { 0x38F1, 80178 }, { 0x38F2, 79575 }, { 0x38F3, 79581 }, { 0x38F4, 80406 }, { 0x38F5, 80418 }, { 0x38F6, 80412 }, { 0x38F7, 80451 }, { 0x38F8, 80454 }, { 0x38F9, 80409 }, { 0x38FA, 80415 }, { 0x38FB, 79476 }, { 0x38FC, 79488 }, { 0x38FD, 79482 }, { 0x38FE, 80109 }, { 0x38FF, 80112 }, { 0x3900, 79479 }, { 0x3901, 79485 }, { 0x3902, 27318 }, { 0x3903, 24247 }, { 0x3904, 27792 }, { 0x3905, 27308 }, { 0x3906, 24608 }, { 0x3907, 27248 }, { 0x3908, 27375 }, { 0x3909, 25225 }, { 0x390A, 25177 }, { 0x390B, 25192 }, { 0x390C, 25300 }, { 0x390D, 25423 }, { 0x390E, 26975 }, { 0x390F, 27797 }, { 0x3910, 27802 }, { 0x3911, 27176 }, { 0x3912, 27667 }, { 0x3913, 27529 }, { 0x3914, 27536 }, { 0x3915, 27458 }, { 0x3916, 27464 }, { 0x3917, 27632 }, { 0x3918, 27994 }, { 0x3919, 25955 }, { 0x391A, 27352 }, { 0x391B, 25944 }, { 0x391C, 27357 }, { 0x391D, 27382 }, { 0x391E, 27387 }, { 0x391F, 27662 }, { 0x3920, 26293 }, { 0x3921, 26184 }, { 0x3922, 26927 }, { 0x3923, 27544 }, { 0x3924, 26255 }, { 0x3925, 26943 }, { 0x3926, 26955 }, { 0x3927, 26947 }, { 0x3928, 26544 }, { 0x3929, 26552 }, { 0x392A, 26560 }, { 0x392B, 26572 }, { 0x392C, 26651 }, { 0x392D, 83912 }, { 0x392E, 84431 }, { 0x392F, 84266 }, { 0x3930, 84252 }, { 0x3931, 84347 }, { 0x3932, 27257 }, { 0x3933, 27677 }, { 0x3934, 27191 }, { 0x3935, 26935 }, { 0x3936, 27672 }, { 0x3937, 21212 }, { 0x3938, 72526 }, { 0x3939, 72530 }, { 0x393A, 72534 }, { 0x393B, 72538 }, { 0x393C, 72546 }, { 0x393D, 72550 }, { 0x393E, 72578 }, { 0x393F, 72626 }, { 0x3940, 72582 }, { 0x3941, 72586 }, { 0x3942, 72590 }, { 0x3943, 72594 }, { 0x3944, 72598 }, { 0x3945, 72602 }, { 0x3946, 72606 }, { 0x3947, 72610 }, { 0x3948, 72614 }, { 0x3949, 72618 }, { 0x394A, 72622 }, { 0x394B, 72630 }, { 0x394C, 72634 }, { 0x394D, 72638 }, { 0x394E, 72642 }, { 0x394F, 72646 }, { 0x3950, 72650 }, { 0x3951, 72654 }, { 0x3952, 72658 }, { 0x3953, 72662 }, { 0x3954, 72666 }, { 0x3955, 72670 }, { 0x3956, 72678 }, { 0x3957, 72790 }, { 0x3958, 72794 }, { 0x3959, 72682 }, { 0x395A, 72686 }, { 0x395B, 72690 }, { 0x395C, 72694 }, { 0x395D, 72698 }, { 0x395E, 72798 }, { 0x395F, 72802 }, { 0x3960, 72806 }, { 0x3961, 72810 }, { 0x3962, 72814 }, { 0x3963, 72818 }, { 0x3964, 72702 }, { 0x3965, 72542 }, { 0x3966, 72706 }, { 0x3967, 72710 }, { 0x3968, 72714 }, { 0x3969, 72718 }, { 0x396A, 72722 }, { 0x396B, 72554 }, { 0x396C, 72726 }, { 0x396D, 72558 }, { 0x396E, 72730 }, { 0x396F, 72562 }, { 0x3970, 72734 }, { 0x3971, 72566 }, { 0x3972, 72570 }, { 0x3973, 72574 }, { 0x3974, 72786 }, { 0x3975, 72822 }, { 0x3976, 72826 }, { 0x3977, 72830 }, { 0x3978, 72834 }, { 0x3979, 72838 }, { 0x397A, 72842 }, { 0x397B, 72846 }, { 0x397C, 72850 }, { 0x397D, 72854 }, { 0x397E, 72858 }, { 0x397F, 72862 }, { 0x3980, 72866 }, { 0x3981, 72738 }, { 0x3982, 72742 }, { 0x3983, 72746 }, { 0x3984, 72750 }, { 0x3985, 72754 }, { 0x3986, 72758 }, { 0x3987, 72762 }, { 0x3988, 52619 }, { 0x3989, 52658 }, { 0x398A, 52628 }, { 0x398B, 52637 }, { 0x398C, 52582 }, { 0x398D, 52573 }, { 0x398E, 52691 }, { 0x398F, 52670 }, { 0x3990, 52711 }, { 0x3991, 52715 }, { 0x3992, 52728 }, { 0x3993, 52683 }, { 0x3994, 52736 }, { 0x3995, 52611 }, { 0x3996, 52591 }, { 0x3997, 52556 }, { 0x3998, 52724 }, { 0x3999, 52740 }, { 0x399A, 52607 }, { 0x399B, 52707 }, { 0x399C, 52654 }, { 0x399D, 52569 }, { 0x399E, 52615 }, { 0x399F, 52603 }, { 0x39A0, 52703 }, { 0x39A1, 52699 }, { 0x39A2, 52687 }, { 0x39A3, 52623 }, { 0x39A4, 52632 }, { 0x39A5, 52641 }, { 0x39A6, 52586 }, { 0x39A7, 52577 }, { 0x39A8, 52674 }, { 0x39A9, 52719 }, { 0x39AA, 52560 }, { 0x39AB, 52522 }, { 0x39AC, 52512 }, { 0x39AD, 52507 }, { 0x39AE, 52532 }, { 0x39AF, 52537 }, { 0x39B0, 52527 }, { 0x39B1, 52542 }, { 0x39B2, 52517 }, { 0x39B3, 52750 }, { 0x39B4, 52422 }, { 0x39B5, 52429 }, { 0x39B6, 52466 }, { 0x39B7, 52442 }, { 0x39B8, 52450 }, { 0x39B9, 52478 }, { 0x39BA, 52458 }, { 0x39BB, 52454 }, { 0x39BC, 52446 }, { 0x39BD, 52474 }, { 0x39BE, 52470 }, { 0x39BF, 52462 }, { 0x39C0, 47719 }, { 0x39C1, 47713 }, { 0x39C2, 47668 }, { 0x39C3, 47737 }, { 0x39C4, 47740 }, { 0x39C5, 47725 }, { 0x39C6, 47722 }, { 0x39C7, 47746 }, { 0x39C8, 47686 }, { 0x39C9, 47617 }, { 0x39CA, 47698 }, { 0x39CB, 47620 }, { 0x39CC, 47623 }, { 0x39CD, 47758 }, { 0x39CE, 47707 }, { 0x39CF, 47710 }, { 0x39D0, 47635 }, { 0x39D1, 47704 }, { 0x39D2, 47638 }, { 0x39D3, 47641 }, { 0x39D4, 47572 }, { 0x39D5, 47773 }, { 0x39D6, 47776 }, { 0x39D7, 47236 }, { 0x39D8, 47353 }, { 0x39D9, 47272 }, { 0x39DA, 47470 }, { 0x39DB, 47329 }, { 0x39DC, 47275 }, { 0x39DD, 47494 }, { 0x39DE, 47326 }, { 0x39DF, 47401 }, { 0x39E0, 47404 }, { 0x39E1, 47464 }, { 0x39E2, 47476 }, { 0x39E3, 47491 }, { 0x39E4, 47458 }, { 0x39E5, 47482 }, { 0x39E6, 47503 }, { 0x39E7, 47398 }, { 0x39E8, 47509 }, { 0x39E9, 47344 }, { 0x39EA, 47221 }, { 0x39EB, 47431 }, { 0x39EC, 47185 }, { 0x39ED, 47428 }, { 0x39EE, 47215 }, { 0x39EF, 47308 }, { 0x39F0, 47497 }, { 0x39F1, 47245 }, { 0x39F2, 47191 }, { 0x39F3, 47452 }, { 0x39F4, 47239 }, { 0x39F5, 47368 }, { 0x39F6, 47170 }, { 0x39F7, 47488 }, { 0x39F8, 47440 }, { 0x39F9, 47443 }, { 0x39FA, 47320 }, { 0x39FB, 47164 }, { 0x39FC, 47317 }, { 0x39FD, 47323 }, { 0x39FE, 47167 }, { 0x39FF, 47362 }, { 0x3A00, 47506 }, { 0x3A01, 47410 }, { 0x3A02, 47407 }, { 0x3A03, 47197 }, { 0x3A04, 47425 }, { 0x3A05, 47179 }, { 0x3A06, 47305 }, { 0x3A07, 47419 }, { 0x3A08, 5861 }, { 0x3A09, 5864 }, { 0x3A0A, 5867 }, { 0x3A0B, 5870 }, { 0x3A0C, 5873 }, { 0x3A0D, 27843 }, { 0x3A0E, 27847 }, { 0x3A0F, 27851 }, { 0x3A10, 27867 }, { 0x3A11, 27871 }, { 0x3A12, 27875 }, { 0x3A13, 27863 }, { 0x3A14, 68938 }, { 0x3A15, 68928 }, { 0x3A16, 68933 }, { 0x3A17, 68948 }, { 0x3A18, 68943 }, { 0x3A19, 48163 }, { 0x3A1A, 47953 }, { 0x3A1B, 48369 }, { 0x3A1C, 48351 }, { 0x3A1D, 48250 }, { 0x3A1E, 48258 }, { 0x3A1F, 48238 }, { 0x3A20, 48242 }, { 0x3A21, 48267 }, { 0x3A22, 48262 }, { 0x3A23, 48254 }, { 0x3A24, 48246 }, { 0x3A25, 48355 }, { 0x3A26, 48211 }, { 0x3A27, 48205 }, { 0x3A28, 48230 }, { 0x3A29, 48222 }, { 0x3A2A, 48181 }, { 0x3A2B, 48186 }, { 0x3A2C, 48176 }, { 0x3A2D, 48086 }, { 0x3A2E, 48314 }, { 0x3A2F, 48274 }, { 0x3A30, 48060 }, { 0x3A31, 48155 }, { 0x3A32, 48338 }, { 0x3A33, 48142 }, { 0x3A34, 48168 }, { 0x3A35, 48293 }, { 0x3A36, 48102 }, { 0x3A37, 48322 }, { 0x3A38, 48110 }, { 0x3A39, 48118 }, { 0x3A3A, 48346 }, { 0x3A3B, 48283 }, { 0x3A3C, 48073 }, { 0x3A3D, 48330 }, { 0x3A3E, 48126 }, { 0x3A3F, 48197 }, { 0x3A40, 48217 }, { 0x3A41, 48134 }, { 0x3A42, 48150 }, { 0x3A43, 48081 }, { 0x3A44, 48097 }, { 0x3A45, 48068 }, { 0x3A46, 48360 }, { 0x3A47, 38370 }, { 0x3A48, 38364 }, { 0x3A49, 38415 }, { 0x3A4A, 38400 }, { 0x3A4B, 38410 }, { 0x3A4C, 38405 }, { 0x3A4D, 37660 }, { 0x3A4E, 37645 }, { 0x3A4F, 37655 }, { 0x3A50, 37650 }, { 0x3A51, 38896 }, { 0x3A52, 38881 }, { 0x3A53, 38891 }, { 0x3A54, 38886 }, { 0x3A55, 39276 }, { 0x3A56, 39261 }, { 0x3A57, 39271 }, { 0x3A58, 39266 }, { 0x3A59, 39240 }, { 0x3A5A, 39225 }, { 0x3A5B, 39235 }, { 0x3A5C, 39230 }, { 0x3A5D, 38853 }, { 0x3A5E, 38838 }, { 0x3A5F, 38848 }, { 0x3A60, 38843 }, { 0x3A61, 37978 }, { 0x3A62, 37963 }, { 0x3A63, 37973 }, { 0x3A64, 37968 }, { 0x3A65, 39132 }, { 0x3A66, 39117 }, { 0x3A67, 39127 }, { 0x3A68, 39122 }, { 0x3A69, 38451 }, { 0x3A6A, 38436 }, { 0x3A6B, 38446 }, { 0x3A6C, 38441 }, { 0x3A6D, 38690 }, { 0x3A6E, 38675 }, { 0x3A6F, 38685 }, { 0x3A70, 38680 }, { 0x3A71, 39217 }, { 0x3A72, 39202 }, { 0x3A73, 39212 }, { 0x3A74, 39207 }, { 0x3A75, 39373 }, { 0x3A76, 39358 }, { 0x3A77, 39368 }, { 0x3A78, 39363 }, { 0x3A79, 39253 }, { 0x3A7A, 39248 }, { 0x3A7B, 38909 }, { 0x3A7C, 38904 }, { 0x3A7D, 37170 }, { 0x3A7E, 37165 }, { 0x3A7F, 38428 }, { 0x3A80, 38423 }, { 0x3A81, 37512 }, { 0x3A82, 37507 }, { 0x3A83, 38703 }, { 0x3A84, 38698 }, { 0x3A85, 39086 }, { 0x3A86, 39071 }, { 0x3A87, 39081 }, { 0x3A88, 39076 }, { 0x3A89, 37287 }, { 0x3A8A, 37272 }, { 0x3A8B, 37282 }, { 0x3A8C, 37277 }, { 0x3A8D, 38474 }, { 0x3A8E, 38459 }, { 0x3A8F, 38469 }, { 0x3A90, 38464 }, { 0x3A91, 39109 }, { 0x3A92, 39094 }, { 0x3A93, 39104 }, { 0x3A94, 39099 }, { 0x3A95, 38651 }, { 0x3A96, 38645 }, { 0x3A97, 39155 }, { 0x3A98, 39140 }, { 0x3A99, 39150 }, { 0x3A9A, 39145 }, { 0x3A9B, 37442 }, { 0x3A9C, 37434 }, { 0x3A9D, 37422 }, { 0x3A9E, 37404 }, { 0x3A9F, 37416 }, { 0x3AA0, 37410 }, { 0x3AA1, 37498 }, { 0x3AA2, 37480 }, { 0x3AA3, 37492 }, { 0x3AA4, 37486 }, { 0x3AA5, 38210 }, { 0x3AA6, 38204 }, { 0x3AA7, 38175 }, { 0x3AA8, 38166 }, { 0x3AA9, 39418 }, { 0x3AAA, 39422 }, { 0x3AAB, 39426 }, { 0x3AAC, 39431 }, { 0x3AAD, 39471 }, { 0x3AAE, 39476 }, { 0x3AAF, 39481 }, { 0x3AB0, 39488 }, { 0x3AB1, 39448 }, { 0x3AB2, 39453 }, { 0x3AB3, 39495 }, { 0x3AB4, 39436 }, { 0x3AB5, 39442 }, { 0x3AB6, 39458 }, { 0x3AB7, 39461 }, { 0x3AB8, 39466 }, { 0x3AB9, 36841 }, { 0x3ABA, 36826 }, { 0x3ABB, 36836 }, { 0x3ABC, 36831 }, { 0x3ABD, 36815 }, { 0x3ABE, 36810 }, { 0x3ABF, 36854 }, { 0x3AC0, 36849 }, { 0x3AC1, 36880 }, { 0x3AC2, 36875 }, { 0x3AC3, 36802 }, { 0x3AC4, 36867 }, { 0x3AC5, 36862 }, { 0x3AC6, 39333 }, { 0x3AC7, 39327 }, { 0x3AC8, 39349 }, { 0x3AC9, 39343 }, { 0x3ACA, 36788 }, { 0x3ACB, 36773 }, { 0x3ACC, 36783 }, { 0x3ACD, 36778 }, { 0x3ACE, 39290 }, { 0x3ACF, 39281 }, { 0x3AD0, 41710 }, { 0x3AD1, 41678 }, { 0x3AD2, 41538 }, { 0x3AD3, 41528 }, { 0x3AD4, 41648 }, { 0x3AD5, 41638 }, { 0x3AD6, 41518 }, { 0x3AD7, 41508 }, { 0x3AD8, 41558 }, { 0x3AD9, 41548 }, { 0x3ADA, 41578 }, { 0x3ADB, 41568 }, { 0x3ADC, 41498 }, { 0x3ADD, 41478 }, { 0x3ADE, 41488 }, { 0x3ADF, 43266 }, { 0x3AE0, 43240 }, { 0x3AE1, 43253 }, { 0x3AE2, 38989 }, { 0x3AE3, 38971 }, { 0x3AE4, 38983 }, { 0x3AE5, 38977 }, { 0x3AE6, 41730 }, { 0x3AE7, 41598 }, { 0x3AE8, 41780 }, { 0x3AE9, 41699 }, { 0x3AEA, 41668 }, { 0x3AEB, 39753 }, { 0x3AEC, 39688 }, { 0x3AED, 39776 }, { 0x3AEE, 39804 }, { 0x3AEF, 39738 }, { 0x3AF0, 39723 }, { 0x3AF1, 41161 }, { 0x3AF2, 41068 }, { 0x3AF3, 41203 }, { 0x3AF4, 41277 }, { 0x3AF5, 41118 }, { 0x3AF6, 41103 }, { 0x3AF7, 42759 }, { 0x3AF8, 42787 }, { 0x3AF9, 42751 }, { 0x3AFA, 42736 }, { 0x3AFB, 41889 }, { 0x3AFC, 41970 }, { 0x3AFD, 40121 }, { 0x3AFE, 40154 }, { 0x3AFF, 42021 }, { 0x3B00, 41977 }, { 0x3B01, 42035 }, { 0x3B02, 42594 }, { 0x3B03, 42496 }, { 0x3B04, 42634 }, { 0x3B05, 42700 }, { 0x3B06, 40843 }, { 0x3B07, 40926 }, { 0x3B08, 39909 }, { 0x3B09, 39851 }, { 0x3B0A, 39941 }, { 0x3B0B, 39955 }, { 0x3B0C, 40940 }, { 0x3B0D, 41027 }, { 0x3B0E, 41824 }, { 0x3B0F, 39614 }, { 0x3B10, 39665 }, { 0x3B11, 42855 }, { 0x3B12, 42897 }, { 0x3B13, 40013 }, { 0x3B14, 39969 }, { 0x3B15, 40045 }, { 0x3B16, 40068 }, { 0x3B17, 39998 }, { 0x3B18, 39983 }, { 0x3B19, 40714 }, { 0x3B1A, 40794 }, { 0x3B1B, 40743 }, { 0x3B1C, 40728 }, { 0x3B1D, 40309 }, { 0x3B1E, 40323 }, { 0x3B1F, 40237 }, { 0x3B20, 40337 }, { 0x3B21, 40265 }, { 0x3B22, 40392 }, { 0x3B23, 40301 }, { 0x3B24, 40279 }, { 0x3B25, 40613 }, { 0x3B26, 40443 }, { 0x3B27, 40645 }, { 0x3B28, 40700 }, { 0x3B29, 40546 }, { 0x3B2A, 40464 }, { 0x3B2B, 42148 }, { 0x3B2C, 42076 }, { 0x3B2D, 42189 }, { 0x3B2E, 42219 }, { 0x3B2F, 42097 }, { 0x3B30, 42083 }, { 0x3B31, 42381 }, { 0x3B32, 42261 }, { 0x3B33, 42395 }, { 0x3B34, 42442 }, { 0x3B35, 42311 }, { 0x3B36, 42296 }, { 0x3B37, 40183 }, { 0x3B38, 40215 }, { 0x3B39, 40168 }, { 0x3B3A, 40161 }, { 0x3B3B, 41388 }, { 0x3B3C, 41314 }, { 0x3B3D, 41402 }, { 0x3B3E, 41457 }, { 0x3B3F, 41364 }, { 0x3B40, 41349 }, { 0x3B41, 42707 }, { 0x3B42, 40801 }, { 0x3B43, 41854 }, { 0x3B44, 43218 }, { 0x3B45, 43225 }, { 0x3B46, 43197 }, { 0x3B47, 43183 }, { 0x3B48, 43211 }, { 0x3B49, 43232 }, { 0x3B4A, 41628 }, { 0x3B4B, 41800 }, { 0x3B4C, 41750 }, { 0x3B4D, 41790 }, { 0x3B4E, 41688 }, { 0x3B4F, 41658 }, { 0x3B50, 39709 }, { 0x3B51, 39818 }, { 0x3B52, 39783 }, { 0x3B53, 39811 }, { 0x3B54, 39730 }, { 0x3B55, 39716 }, { 0x3B56, 41089 }, { 0x3B57, 41291 }, { 0x3B58, 41256 }, { 0x3B59, 41284 }, { 0x3B5A, 41110 }, { 0x3B5B, 41096 }, { 0x3B5C, 42722 }, { 0x3B5D, 42801 }, { 0x3B5E, 42766 }, { 0x3B5F, 42794 }, { 0x3B60, 42743 }, { 0x3B61, 42729 }, { 0x3B62, 39990 }, { 0x3B63, 39976 }, { 0x3B64, 40735 }, { 0x3B65, 40721 }, { 0x3B66, 40286 }, { 0x3B67, 40244 }, { 0x3B68, 40371 }, { 0x3B69, 40293 }, { 0x3B6A, 40272 }, { 0x3B6B, 40679 }, { 0x3B6C, 40538 }, { 0x3B6D, 40457 }, { 0x3B6E, 42090 }, { 0x3B6F, 42205 }, { 0x3B70, 42282 }, { 0x3B71, 42456 }, { 0x3B72, 42421 }, { 0x3B73, 42449 }, { 0x3B74, 42303 }, { 0x3B75, 42289 }, { 0x3B76, 41845 }, { 0x3B77, 41335 }, { 0x3B78, 41471 }, { 0x3B79, 41436 }, { 0x3B7A, 41464 }, { 0x3B7B, 41356 }, { 0x3B7C, 41342 }, { 0x3B7D, 41720 }, { 0x3B7E, 41588 }, { 0x3B7F, 41740 }, { 0x3B80, 41770 }, { 0x3B81, 41618 }, { 0x3B82, 39746 }, { 0x3B83, 39681 }, { 0x3B84, 39769 }, { 0x3B85, 39797 }, { 0x3B86, 39702 }, { 0x3B87, 41154 }, { 0x3B88, 41061 }, { 0x3B89, 41196 }, { 0x3B8A, 41270 }, { 0x3B8B, 41082 }, { 0x3B8C, 42780 }, { 0x3B8D, 41882 }, { 0x3B8E, 41963 }, { 0x3B8F, 40114 }, { 0x3B90, 40147 }, { 0x3B91, 42014 }, { 0x3B92, 42028 }, { 0x3B93, 42587 }, { 0x3B94, 42489 }, { 0x3B95, 42627 }, { 0x3B96, 42693 }, { 0x3B97, 40836 }, { 0x3B98, 40894 }, { 0x3B99, 40919 }, { 0x3B9A, 39902 }, { 0x3B9B, 39844 }, { 0x3B9C, 39934 }, { 0x3B9D, 39948 }, { 0x3B9E, 40933 }, { 0x3B9F, 41817 }, { 0x3BA0, 39607 }, { 0x3BA1, 39658 }, { 0x3BA2, 42848 }, { 0x3BA3, 42890 }, { 0x3BA4, 40006 }, { 0x3BA5, 39962 }, { 0x3BA6, 40038 }, { 0x3BA7, 40061 }, { 0x3BA8, 40707 }, { 0x3BA9, 40787 }, { 0x3BAA, 40316 }, { 0x3BAB, 40230 }, { 0x3BAC, 40330 }, { 0x3BAD, 40258 }, { 0x3BAE, 40385 }, { 0x3BAF, 40606 }, { 0x3BB0, 40436 }, { 0x3BB1, 40638 }, { 0x3BB2, 40693 }, { 0x3BB3, 40450 }, { 0x3BB4, 42141 }, { 0x3BB5, 42069 }, { 0x3BB6, 42182 }, { 0x3BB7, 42212 }, { 0x3BB8, 42374 }, { 0x3BB9, 42254 }, { 0x3BBA, 42388 }, { 0x3BBB, 42435 }, { 0x3BBC, 42275 }, { 0x3BBD, 40176 }, { 0x3BBE, 40208 }, { 0x3BBF, 40222 }, { 0x3BC0, 41381 }, { 0x3BC1, 41307 }, { 0x3BC2, 41395 }, { 0x3BC3, 41450 }, { 0x3BC4, 41328 }, { 0x3BC5, 41760 }, { 0x3BC6, 41608 }, { 0x3BC7, 39790 }, { 0x3BC8, 39695 }, { 0x3BC9, 41263 }, { 0x3BCA, 41075 }, { 0x3BCB, 42773 }, { 0x3BCC, 42715 }, { 0x3BCD, 42686 }, { 0x3BCE, 42503 }, { 0x3BCF, 43145 }, { 0x3BD0, 42979 }, { 0x3BD1, 40251 }, { 0x3BD2, 40378 }, { 0x3BD3, 40686 }, { 0x3BD4, 42428 }, { 0x3BD5, 42268 }, { 0x3BD6, 41443 }, { 0x3BD7, 41321 }, { 0x3BD8, 43190 }, { 0x3BD9, 43176 }, { 0x3BDA, 43204 }, { 0x3BDB, 40969 }, { 0x3BDC, 40954 }, { 0x3BDD, 39581 }, { 0x3BDE, 39566 }, { 0x3BDF, 42840 }, { 0x3BE0, 42825 }, { 0x3BE1, 42553 }, { 0x3BE2, 42538 }, { 0x3BE3, 43029 }, { 0x3BE4, 43014 }, { 0x3BE5, 40097 }, { 0x3BE6, 40082 }, { 0x3BE7, 41918 }, { 0x3BE8, 41903 }, { 0x3BE9, 42006 }, { 0x3BEA, 41991 }, { 0x3BEB, 40886 }, { 0x3BEC, 40871 }, { 0x3BED, 39894 }, { 0x3BEE, 39879 }, { 0x3BEF, 43067 }, { 0x3BF0, 42972 }, { 0x3BF1, 43095 }, { 0x3BF2, 43159 }, { 0x3BF3, 43000 }, { 0x3BF4, 42524 }, { 0x3BF5, 40857 }, { 0x3BF6, 39865 }, { 0x3BF7, 40961 }, { 0x3BF8, 40947 }, { 0x3BF9, 39573 }, { 0x3BFA, 39559 }, { 0x3BFB, 42832 }, { 0x3BFC, 42818 }, { 0x3BFD, 42545 }, { 0x3BFE, 42531 }, { 0x3BFF, 43021 }, { 0x3C00, 43007 }, { 0x3C01, 40089 }, { 0x3C02, 40075 }, { 0x3C03, 41910 }, { 0x3C04, 41896 }, { 0x3C05, 41998 }, { 0x3C06, 41984 }, { 0x3C07, 40878 }, { 0x3C08, 40864 }, { 0x3C09, 39886 }, { 0x3C0A, 39872 }, { 0x3C0B, 43046 }, { 0x3C0C, 42951 }, { 0x3C0D, 43074 }, { 0x3C0E, 43138 }, { 0x3C0F, 42993 }, { 0x3C10, 42517 }, { 0x3C11, 40850 }, { 0x3C12, 39858 }, { 0x3C13, 43060 }, { 0x3C14, 42965 }, { 0x3C15, 43088 }, { 0x3C16, 43152 }, { 0x3C17, 42510 }, { 0x3C18, 42986 }, { 0x3C19, 41020 }, { 0x3C1A, 42580 }, { 0x3C1B, 42482 }, { 0x3C1C, 42620 }, { 0x3C1D, 43053 }, { 0x3C1E, 42958 }, { 0x3C1F, 43081 }, { 0x3C20, 41013 }, { 0x3C21, 41810 }, { 0x3C22, 41831 }, { 0x3C23, 41838 }, { 0x3C24, 52858 }, { 0x3C25, 52861 }, { 0x3C26, 41145 }, { 0x3C27, 41034 }, { 0x3C28, 41043 }, { 0x3C29, 41052 }, { 0x3C2A, 41187 }, { 0x3C2B, 41238 }, { 0x3C2C, 41210 }, { 0x3C2D, 41247 }, { 0x3C2E, 41926 }, { 0x3C2F, 41935 }, { 0x3C30, 40128 }, { 0x3C31, 40137 }, { 0x3C32, 42473 }, { 0x3C33, 42561 }, { 0x3C34, 42570 }, { 0x3C35, 42641 }, { 0x3C36, 42650 }, { 0x3C37, 42659 }, { 0x3C38, 42668 }, { 0x3C39, 42677 }, { 0x3C3A, 40809 }, { 0x3C3B, 40818 }, { 0x3C3C, 40901 }, { 0x3C3D, 42933 }, { 0x3C3E, 42942 }, { 0x3C3F, 43037 }, { 0x3C40, 43102 }, { 0x3C41, 43111 }, { 0x3C42, 43120 }, { 0x3C43, 43129 }, { 0x3C44, 39834 }, { 0x3C45, 39916 }, { 0x3C46, 39925 }, { 0x3C47, 40977 }, { 0x3C48, 40986 }, { 0x3C49, 41004 }, { 0x3C4A, 40995 }, { 0x3C4B, 39589 }, { 0x3C4C, 39640 }, { 0x3C4D, 39649 }, { 0x3C4E, 39630 }, { 0x3C4F, 42881 }, { 0x3C50, 42862 }, { 0x3C51, 42871 }, { 0x3C52, 40020 }, { 0x3C53, 40029 }, { 0x3C54, 40751 }, { 0x3C55, 40778 }, { 0x3C56, 40418 }, { 0x3C57, 40399 }, { 0x3C58, 40408 }, { 0x3C59, 40579 }, { 0x3C5A, 40570 }, { 0x3C5B, 40620 }, { 0x3C5C, 40629 }, { 0x3C5D, 40652 }, { 0x3C5E, 40661 }, { 0x3C5F, 42051 }, { 0x3C60, 42060 }, { 0x3C61, 42042 }, { 0x3C62, 42105 }, { 0x3C63, 42132 }, { 0x3C64, 42164 }, { 0x3C65, 42173 }, { 0x3C66, 42123 }, { 0x3C67, 40190 }, { 0x3C68, 40199 }, { 0x3C69, 42245 }, { 0x3C6A, 42235 }, { 0x3C6B, 42356 }, { 0x3C6C, 42365 }, { 0x3C6D, 42346 }, { 0x3C6E, 42402 }, { 0x3C6F, 42411 }, { 0x3C70, 41418 }, { 0x3C71, 41427 }, { 0x3C72, 39760 }, { 0x3C73, 41126 }, { 0x3C74, 41135 }, { 0x3C75, 41168 }, { 0x3C76, 41177 }, { 0x3C77, 41219 }, { 0x3C78, 41228 }, { 0x3C79, 41944 }, { 0x3C7A, 41872 }, { 0x3C7B, 41953 }, { 0x3C7C, 42610 }, { 0x3C7D, 40827 }, { 0x3C7E, 42924 }, { 0x3C7F, 39825 }, { 0x3C80, 40561 }, { 0x3C81, 40670 }, { 0x3C82, 41298 }, { 0x3C83, 41372 }, { 0x3C84, 41409 }, { 0x3C85, 42196 }, { 0x3C86, 40769 }, { 0x3C87, 42226 }, { 0x3C88, 40760 }, { 0x3C89, 40427 }, { 0x3C8A, 39621 }, { 0x3C8B, 40344 }, { 0x3C8C, 42328 }, { 0x3C8D, 42155 }, { 0x3C8E, 40597 }, { 0x3C8F, 40353 }, { 0x3C90, 40588 }, { 0x3C91, 42319 }, { 0x3C92, 41863 }, { 0x3C93, 40105 }, { 0x3C94, 42114 }, { 0x3C95, 40052 }, { 0x3C96, 39672 }, { 0x3C97, 40362 }, { 0x3C98, 39598 }, { 0x3C99, 40910 }, { 0x3C9A, 42601 }, { 0x3C9B, 42337 }, { 0x3C9C, 42909 }, { 0x3C9D, 42463 }, { 0x3C9E, 42813 }, { 0x3C9F, 42808 }, { 0x3CA0, 43279 }, { 0x3CA1, 42904 }, { 0x3CA2, 43171 }, { 0x3CA3, 43166 }, { 0x3CA4, 43284 }, { 0x3CA5, 42919 }, { 0x3CA6, 43294 }, { 0x3CA7, 43299 }, { 0x3CA8, 14610 }, { 0x3CA9, 43289 }, { 0x3CAA, 114731 }, { 0x3CAB, 114848 }, { 0x3CAC, 114841 }, { 0x3CAD, 114726 }, { 0x3CAE, 114824 }, { 0x3CAF, 114835 }, { 0x3CB0, 114818 }, { 0x3CB1, 114675 }, { 0x3CB2, 114774 }, { 0x3CB3, 114829 }, { 0x3CB4, 91671 }, { 0x3CB5, 91680 }, { 0x3CB6, 91216 }, { 0x3CB7, 91221 }, { 0x3CB8, 91279 }, { 0x3CB9, 91291 }, { 0x3CBA, 91767 }, { 0x3CBB, 91675 }, { 0x3CBC, 91684 }, { 0x3CBD, 91145 }, { 0x3CBE, 91153 }, { 0x3CBF, 91283 }, { 0x3CC0, 91295 }, { 0x3CC1, 91770 }, { 0x3CC2, 91425 }, { 0x3CC3, 91430 }, { 0x3CC4, 114638 }, { 0x3CC5, 114620 }, { 0x3CC6, 114626 }, { 0x3CC7, 114632 }, { 0x3CC8, 114719 }, { 0x3CC9, 114713 }, { 0x3CCA, 114812 }, { 0x3CCB, 114660 }, { 0x3CCC, 114751 }, { 0x3CCD, 114705 }, { 0x3CCE, 114804 }, { 0x3CCF, 114652 }, { 0x3CD0, 114743 }, { 0x3CD1, 114690 }, { 0x3CD2, 114789 }, { 0x3CD3, 114645 }, { 0x3CD4, 114736 }, { 0x3CD5, 114683 }, { 0x3CD6, 114782 }, { 0x3CD7, 114667 }, { 0x3CD8, 114758 }, { 0x3CD9, 53785 }, { 0x3CDA, 35828 }, { 0x3CDB, 114698 }, { 0x3CDC, 114797 }, { 0x3CDD, 45667 }, { 0x3CDE, 103194 }, { 0x3CDF, 15345 }, { 0x3CE0, 46062 }, { 0x3CE1, 45664 }, { 0x3CE2, 103191 }, { 0x3CE3, 15338 }, { 0x3CE4, 34405 }, { 0x3CE5, 34563 }, { 0x3CE6, 34385 }, { 0x3CE7, 34555 }, { 0x3CE8, 34403 }, { 0x3CE9, 34547 }, { 0x3CEA, 34560 }, { 0x3CEB, 34368 }, { 0x3CEC, 34397 }, { 0x3CED, 34416 }, { 0x3CEE, 34388 }, { 0x3CEF, 34407 }, { 0x3CF0, 34392 }, { 0x3CF1, 34411 }, { 0x3CF2, 34494 }, { 0x3CF3, 34550 }, { 0x3CF4, 34527 }, { 0x3CF5, 34400 }, { 0x3CF6, 34569 }, { 0x3CF7, 34552 }, { 0x3CF8, 34566 }, { 0x3CF9, 34491 }, { 0x3CFA, 34522 }, { 0x3CFB, 34488 }, { 0x3CFC, 34519 }, { 0x3CFD, 34557 }, { 0x3CFE, 39543 }, { 0x3CFF, 39525 }, { 0x3D00, 39532 }, { 0x3D01, 36389 }, { 0x3D02, 39555 }, { 0x3D03, 36488 }, { 0x3D04, 36484 }, { 0x3D05, 36454 }, { 0x3D06, 36450 }, { 0x3D07, 36509 }, { 0x3D08, 36505 }, { 0x3D09, 39414 }, { 0x3D0A, 39410 }, { 0x3D0B, 36736 }, { 0x3D0C, 36732 }, { 0x3D0D, 39027 }, { 0x3D0E, 38329 }, { 0x3D0F, 38321 }, { 0x3D10, 38285 }, { 0x3D11, 38277 }, { 0x3D12, 38024 }, { 0x3D13, 38016 }, { 0x3D14, 38307 }, { 0x3D15, 38299 }, { 0x3D16, 38129 }, { 0x3D17, 38105 }, { 0x3D18, 38121 }, { 0x3D19, 38113 }, { 0x3D1A, 38392 }, { 0x3D1B, 38355 }, { 0x3D1C, 37048 }, { 0x3D1D, 37033 }, { 0x3D1E, 37043 }, { 0x3D1F, 37038 }, { 0x3D20, 37949 }, { 0x3D21, 37943 }, { 0x3D22, 37955 }, { 0x3D23, 37919 }, { 0x3D24, 37929 }, { 0x3D25, 37924 }, { 0x3D26, 38830 }, { 0x3D27, 38815 }, { 0x3D28, 38825 }, { 0x3D29, 38820 }, { 0x3D2A, 38523 }, { 0x3D2B, 38508 }, { 0x3D2C, 38518 }, { 0x3D2D, 38513 }, { 0x3D2E, 37385 }, { 0x3D2F, 37370 }, { 0x3D30, 37380 }, { 0x3D31, 37375 }, { 0x3D32, 38546 }, { 0x3D33, 38531 }, { 0x3D34, 38541 }, { 0x3D35, 38536 }, { 0x3D36, 37157 }, { 0x3D37, 37152 }, { 0x3D38, 38807 }, { 0x3D39, 38802 }, { 0x3D3A, 37810 }, { 0x3D3B, 37805 }, { 0x3D3C, 38873 }, { 0x3D3D, 38868 }, { 0x3D3E, 38794 }, { 0x3D3F, 38779 }, { 0x3D40, 38789 }, { 0x3D41, 38784 }, { 0x3D42, 39184 }, { 0x3D43, 39169 }, { 0x3D44, 39179 }, { 0x3D45, 39174 }, { 0x3D46, 37854 }, { 0x3D47, 37839 }, { 0x3D48, 37849 }, { 0x3D49, 37844 }, { 0x3D4A, 37077 }, { 0x3D4B, 37062 }, { 0x3D4C, 37072 }, { 0x3D4D, 37067 }, { 0x3D4E, 37891 }, { 0x3D4F, 37876 }, { 0x3D50, 37886 }, { 0x3D51, 37881 }, { 0x3D52, 38249 }, { 0x3D53, 38234 }, { 0x3D54, 38244 }, { 0x3D55, 38239 }, { 0x3D56, 36941 }, { 0x3D57, 36926 }, { 0x3D58, 36936 }, { 0x3D59, 36931 }, { 0x3D5A, 39019 }, { 0x3D5B, 39004 }, { 0x3D5C, 39014 }, { 0x3D5D, 39009 }, { 0x3D5E, 37239 }, { 0x3D5F, 37224 }, { 0x3D60, 37234 }, { 0x3D61, 37229 }, { 0x3D62, 37702 }, { 0x3D63, 37687 }, { 0x3D64, 37697 }, { 0x3D65, 37692 }, { 0x3D66, 37566 }, { 0x3D67, 37551 }, { 0x3D68, 37561 }, { 0x3D69, 37556 }, { 0x3D6A, 37626 }, { 0x3D6B, 37611 }, { 0x3D6C, 37621 }, { 0x3D6D, 37616 }, { 0x3D6E, 38591 }, { 0x3D6F, 38576 }, { 0x3D70, 38586 }, { 0x3D71, 38581 }, { 0x3D72, 38667 }, { 0x3D73, 38636 }, { 0x3D74, 38662 }, { 0x3D75, 38657 }, { 0x3D76, 37471 }, { 0x3D77, 37456 }, { 0x3D78, 37466 }, { 0x3D79, 37461 }, { 0x3D7A, 38055 }, { 0x3D7B, 38050 }, { 0x3D7C, 38386 }, { 0x3D7D, 38380 }, { 0x3D7E, 38226 }, { 0x3D7F, 38150 }, { 0x3D80, 38221 }, { 0x3D81, 38216 }, { 0x3D82, 40521 }, { 0x3D83, 40511 }, { 0x3D84, 40481 }, { 0x3D85, 40471 }, { 0x3D86, 40501 }, { 0x3D87, 40491 }, { 0x3D88, 40554 }, { 0x3D89, 40531 }, { 0x3D8A, 15371 }, { 0x3D8B, 98993 }, { 0x3D8C, 98980 }, { 0x3D8D, 98956 }, { 0x3D8E, 98948 }, { 0x3D8F, 98959 }, { 0x3D90, 98975 }, { 0x3D91, 98985 }, { 0x3D92, 98622 }, { 0x3D93, 98940 }, { 0x3D94, 98967 }, { 0x3D95, 98625 }, { 0x3D96, 98630 }, { 0x3D97, 98999 }, { 0x3D98, 98607 }, { 0x3D99, 98965 }, { 0x3D9A, 98650 }, { 0x3D9B, 98632 }, { 0x3D9C, 98638 }, { 0x3D9D, 98659 }, { 0x3D9E, 98644 }, { 0x3D9F, 98641 }, { 0x3DA0, 98635 }, { 0x3DA1, 98656 }, { 0x3DA2, 98653 }, { 0x3DA3, 98647 }, { 0x3DA4, 98628 }, { 0x3DA5, 98983 }, { 0x3DA6, 98977 }, { 0x3DA7, 98951 }, { 0x3DA8, 98996 }, { 0x3DA9, 98969 }, { 0x3DAA, 98990 }, { 0x3DAB, 98795 }, { 0x3DAC, 98800 }, { 0x3DAD, 98805 }, { 0x3DAE, 98810 }, { 0x3DAF, 98815 }, { 0x3DB0, 98820 }, { 0x3DB1, 98825 }, { 0x3DB2, 98830 }, { 0x3DB3, 98835 }, { 0x3DB4, 98840 }, { 0x3DB5, 98845 }, { 0x3DB6, 98850 }, { 0x3DB7, 98855 }, { 0x3DB8, 98860 }, { 0x3DB9, 98865 }, { 0x3DBA, 98870 }, { 0x3DBB, 98875 }, { 0x3DBC, 98880 }, { 0x3DBD, 98885 }, { 0x3DBE, 98890 }, { 0x3DBF, 98895 }, { 0x3DC0, 98900 }, { 0x3DC1, 98905 }, { 0x3DC2, 98910 }, { 0x3DC3, 98915 }, { 0x3DC4, 98920 }, { 0x3DC5, 98618 }, { 0x3DC6, 98962 }, { 0x3DC7, 98936 }, { 0x3DC8, 98987 }, { 0x3DC9, 98592 }, { 0x3DCA, 98662 }, { 0x3DCB, 98665 }, { 0x3DCC, 98670 }, { 0x3DCD, 98675 }, { 0x3DCE, 98680 }, { 0x3DCF, 98685 }, { 0x3DD0, 98690 }, { 0x3DD1, 98695 }, { 0x3DD2, 98700 }, { 0x3DD3, 98705 }, { 0x3DD4, 98710 }, { 0x3DD5, 98715 }, { 0x3DD6, 98720 }, { 0x3DD7, 98725 }, { 0x3DD8, 98730 }, { 0x3DD9, 98735 }, { 0x3DDA, 98740 }, { 0x3DDB, 98745 }, { 0x3DDC, 98750 }, { 0x3DDD, 98755 }, { 0x3DDE, 98760 }, { 0x3DDF, 98765 }, { 0x3DE0, 98770 }, { 0x3DE1, 98775 }, { 0x3DE2, 98780 }, { 0x3DE3, 98785 }, { 0x3DE4, 98790 }, { 0x3DE5, 98610 }, { 0x3DE6, 98972 }, { 0x3DE7, 98928 }, { 0x3DE8, 98943 }, { 0x3DE9, 98614 }, { 0x3DEA, 98932 }, { 0x3DEB, 99486 }, { 0x3DEC, 99006 }, { 0x3DED, 99017 }, { 0x3DEE, 99490 }, { 0x3DEF, 99463 }, { 0x3DF0, 99402 }, { 0x3DF1, 99418 }, { 0x3DF2, 99428 }, { 0x3DF3, 99438 }, { 0x3DF4, 99423 }, { 0x3DF5, 99433 }, { 0x3DF6, 99448 }, { 0x3DF7, 99458 }, { 0x3DF8, 99453 }, { 0x3DF9, 99443 }, { 0x3DFA, 99493 }, { 0x3DFB, 99234 }, { 0x3DFC, 99242 }, { 0x3DFD, 99254 }, { 0x3DFE, 99238 }, { 0x3DFF, 99250 }, { 0x3E00, 99278 }, { 0x3E01, 99286 }, { 0x3E02, 99294 }, { 0x3E03, 99282 }, { 0x3E04, 99290 }, { 0x3E05, 99358 }, { 0x3E06, 99366 }, { 0x3E07, 99374 }, { 0x3E08, 99362 }, { 0x3E09, 99370 }, { 0x3E0A, 99378 }, { 0x3E0B, 99386 }, { 0x3E0C, 99394 }, { 0x3E0D, 99382 }, { 0x3E0E, 99390 }, { 0x3E0F, 99318 }, { 0x3E10, 99326 }, { 0x3E11, 99334 }, { 0x3E12, 99322 }, { 0x3E13, 99330 }, { 0x3E14, 99258 }, { 0x3E15, 99266 }, { 0x3E16, 99274 }, { 0x3E17, 99262 }, { 0x3E18, 99270 }, { 0x3E19, 99298 }, { 0x3E1A, 99306 }, { 0x3E1B, 99314 }, { 0x3E1C, 99302 }, { 0x3E1D, 99310 }, { 0x3E1E, 99406 }, { 0x3E1F, 99414 }, { 0x3E20, 99410 }, { 0x3E21, 99338 }, { 0x3E22, 99346 }, { 0x3E23, 99354 }, { 0x3E24, 99342 }, { 0x3E25, 99350 }, { 0x3E26, 99398 }, { 0x3E27, 99246 }, { 0x3E28, 99467 }, { 0x3E29, 99472 }, { 0x3E2A, 99024 }, { 0x3E2B, 99143 }, { 0x3E2C, 99211 }, { 0x3E2D, 99187 }, { 0x3E2E, 99131 }, { 0x3E2F, 99191 }, { 0x3E30, 99195 }, { 0x3E31, 99147 }, { 0x3E32, 99215 }, { 0x3E33, 99139 }, { 0x3E34, 99219 }, { 0x3E35, 99203 }, { 0x3E36, 99207 }, { 0x3E37, 99175 }, { 0x3E38, 99227 }, { 0x3E39, 99223 }, { 0x3E3A, 99199 }, { 0x3E3B, 99127 }, { 0x3E3C, 99135 }, { 0x3E3D, 99183 }, { 0x3E3E, 99171 }, { 0x3E3F, 99111 }, { 0x3E40, 99167 }, { 0x3E41, 99123 }, { 0x3E42, 99115 }, { 0x3E43, 99179 }, { 0x3E44, 99151 }, { 0x3E45, 99155 }, { 0x3E46, 99163 }, { 0x3E47, 99159 }, { 0x3E48, 99119 }, { 0x3E49, 99027 }, { 0x3E4A, 99047 }, { 0x3E4B, 99075 }, { 0x3E4C, 99103 }, { 0x3E4D, 99051 }, { 0x3E4E, 99031 }, { 0x3E4F, 99107 }, { 0x3E50, 99079 }, { 0x3E51, 99039 }, { 0x3E52, 99063 }, { 0x3E53, 99095 }, { 0x3E54, 99059 }, { 0x3E55, 99087 }, { 0x3E56, 99043 }, { 0x3E57, 99099 }, { 0x3E58, 99067 }, { 0x3E59, 99071 }, { 0x3E5A, 99091 }, { 0x3E5B, 99055 }, { 0x3E5C, 99083 }, { 0x3E5D, 99035 }, { 0x3E5E, 98604 }, { 0x3E5F, 98925 }, { 0x3E60, 98595 }, { 0x3E61, 98954 }, { 0x3E62, 98945 }, { 0x3E63, 98601 }, { 0x3E64, 98598 }, { 0x3E65, 99013 }, { 0x3E66, 99480 }, { 0x3E67, 99231 }, { 0x3E68, 99483 }, { 0x3E69, 99477 }, { 0x3E6A, 99010 }, { 0x3E6B, 99021 }, { 0x3E6C, 106175 }, { 0x3E6D, 106178 }, { 0x3E6E, 106181 }, { 0x3E6F, 52848 }, { 0x3E70, 106228 }, { 0x3E71, 51802 }, { 0x3E72, 51927 }, { 0x3E73, 51887 }, { 0x3E74, 52027 }, { 0x3E75, 51812 }, { 0x3E76, 51767 }, { 0x3E77, 51962 }, { 0x3E78, 51797 }, { 0x3E79, 51832 }, { 0x3E7A, 51982 }, { 0x3E7B, 52007 }, { 0x3E7C, 51967 }, { 0x3E7D, 51917 }, { 0x3E7E, 52037 }, { 0x3E7F, 52097 }, { 0x3E80, 51957 }, { 0x3E81, 52047 }, { 0x3E82, 52062 }, { 0x3E83, 52112 }, { 0x3E84, 52107 }, { 0x3E85, 51827 }, { 0x3E86, 52077 }, { 0x3E87, 51837 }, { 0x3E88, 51862 }, { 0x3E89, 51792 }, { 0x3E8A, 51867 }, { 0x3E8B, 51897 }, { 0x3E8C, 51987 }, { 0x3E8D, 52002 }, { 0x3E8E, 51777 }, { 0x3E8F, 52072 }, { 0x3E90, 51932 }, { 0x3E91, 51817 }, { 0x3E92, 51977 }, { 0x3E93, 51842 }, { 0x3E94, 52102 }, { 0x3E95, 51857 }, { 0x3E96, 51907 }, { 0x3E97, 52022 }, { 0x3E98, 51882 }, { 0x3E99, 51992 }, { 0x3E9A, 51772 }, { 0x3E9B, 51877 }, { 0x3E9C, 51902 }, { 0x3E9D, 51807 }, { 0x3E9E, 51942 }, { 0x3E9F, 51822 }, { 0x3EA0, 52012 }, { 0x3EA1, 52017 }, { 0x3EA2, 51782 }, { 0x3EA3, 51922 }, { 0x3EA4, 51787 }, { 0x3EA5, 52057 }, { 0x3EA6, 51997 }, { 0x3EA7, 52087 }, { 0x3EA8, 51937 }, { 0x3EA9, 51947 }, { 0x3EAA, 51847 }, { 0x3EAB, 52082 }, { 0x3EAC, 51852 }, { 0x3EAD, 51872 }, { 0x3EAE, 51952 }, { 0x3EAF, 52117 }, { 0x3EB0, 52067 }, { 0x3EB1, 52127 }, { 0x3EB2, 51972 }, { 0x3EB3, 51892 }, { 0x3EB4, 52032 }, { 0x3EB5, 52092 }, { 0x3EB6, 51912 }, { 0x3EB7, 52052 }, { 0x3EB8, 52042 }, { 0x3EB9, 52122 }, { 0x3EBA, 52132 }, { 0x3EBB, 51141 }, { 0x3EBC, 51145 }, { 0x3EBD, 51149 }, { 0x3EBE, 51153 }, { 0x3EBF, 51157 }, { 0x3EC0, 51161 }, { 0x3EC1, 51165 }, { 0x3EC2, 51169 }, { 0x3EC3, 51173 }, { 0x3EC4, 51177 }, { 0x3EC5, 51181 }, { 0x3EC6, 51185 }, { 0x3EC7, 51189 }, { 0x3EC8, 51193 }, { 0x3EC9, 51197 }, { 0x3ECA, 51202 }, { 0x3ECB, 51207 }, { 0x3ECC, 51212 }, { 0x3ECD, 51542 }, { 0x3ECE, 51547 }, { 0x3ECF, 51552 }, { 0x3ED0, 51557 }, { 0x3ED1, 51562 }, { 0x3ED2, 51567 }, { 0x3ED3, 51572 }, { 0x3ED4, 51577 }, { 0x3ED5, 51582 }, { 0x3ED6, 51587 }, { 0x3ED7, 51217 }, { 0x3ED8, 51222 }, { 0x3ED9, 51227 }, { 0x3EDA, 51232 }, { 0x3EDB, 51237 }, { 0x3EDC, 51737 }, { 0x3EDD, 51742 }, { 0x3EDE, 51242 }, { 0x3EDF, 51247 }, { 0x3EE0, 51252 }, { 0x3EE1, 51747 }, { 0x3EE2, 51752 }, { 0x3EE3, 51256 }, { 0x3EE4, 51261 }, { 0x3EE5, 51266 }, { 0x3EE6, 51270 }, { 0x3EE7, 51275 }, { 0x3EE8, 51279 }, { 0x3EE9, 51283 }, { 0x3EEA, 51288 }, { 0x3EEB, 51292 }, { 0x3EEC, 51296 }, { 0x3EED, 51757 }, { 0x3EEE, 51300 }, { 0x3EEF, 51304 }, { 0x3EF0, 51308 }, { 0x3EF1, 51313 }, { 0x3EF2, 51317 }, { 0x3EF3, 51321 }, { 0x3EF4, 51326 }, { 0x3EF5, 51331 }, { 0x3EF6, 51335 }, { 0x3EF7, 51339 }, { 0x3EF8, 51343 }, { 0x3EF9, 51347 }, { 0x3EFA, 51351 }, { 0x3EFB, 51355 }, { 0x3EFC, 51359 }, { 0x3EFD, 51363 }, { 0x3EFE, 51367 }, { 0x3EFF, 51372 }, { 0x3F00, 51376 }, { 0x3F01, 51381 }, { 0x3F02, 51385 }, { 0x3F03, 51389 }, { 0x3F04, 51393 }, { 0x3F05, 51397 }, { 0x3F06, 51401 }, { 0x3F07, 51405 }, { 0x3F08, 51409 }, { 0x3F09, 51413 }, { 0x3F0A, 51417 }, { 0x3F0B, 51421 }, { 0x3F0C, 51425 }, { 0x3F0D, 51430 }, { 0x3F0E, 51435 }, { 0x3F0F, 51440 }, { 0x3F10, 51445 }, { 0x3F11, 51450 }, { 0x3F12, 51454 }, { 0x3F13, 51459 }, { 0x3F14, 51463 }, { 0x3F15, 51467 }, { 0x3F16, 51473 }, { 0x3F17, 51478 }, { 0x3F18, 51484 }, { 0x3F19, 51489 }, { 0x3F1A, 51493 }, { 0x3F1B, 51762 }, { 0x3F1C, 51497 }, { 0x3F1D, 51501 }, { 0x3F1E, 51505 }, { 0x3F1F, 51509 }, { 0x3F20, 51513 }, { 0x3F21, 51517 }, { 0x3F22, 51522 }, { 0x3F23, 51526 }, { 0x3F24, 51530 }, { 0x3F25, 51534 }, { 0x3F26, 51538 }, { 0x3F27, 51592 }, { 0x3F28, 51597 }, { 0x3F29, 51602 }, { 0x3F2A, 51607 }, { 0x3F2B, 51612 }, { 0x3F2C, 51617 }, { 0x3F2D, 51622 }, { 0x3F2E, 51627 }, { 0x3F2F, 51632 }, { 0x3F30, 51637 }, { 0x3F31, 51642 }, { 0x3F32, 51647 }, { 0x3F33, 51652 }, { 0x3F34, 51657 }, { 0x3F35, 51662 }, { 0x3F36, 51667 }, { 0x3F37, 51672 }, { 0x3F38, 51677 }, { 0x3F39, 51682 }, { 0x3F3A, 51687 }, { 0x3F3B, 51692 }, { 0x3F3C, 51697 }, { 0x3F3D, 51702 }, { 0x3F3E, 51707 }, { 0x3F3F, 51712 }, { 0x3F40, 51717 }, { 0x3F41, 51722 }, { 0x3F42, 51727 }, { 0x3F43, 51732 }, { 0x3F44, 36086 }, { 0x3F45, 36082 }, { 0x3F46, 36090 }, { 0x3F47, 36098 }, { 0x3F48, 36127 }, { 0x3F49, 36214 }, { 0x3F4A, 36149 }, { 0x3F4B, 36138 }, { 0x3F4C, 36109 }, { 0x3F4D, 36196 }, { 0x3F4E, 36171 }, { 0x3F4F, 36160 }, { 0x3F50, 36120 }, { 0x3F51, 36246 }, { 0x3F52, 36239 }, { 0x3F53, 36189 }, { 0x3F54, 36182 }, { 0x3F55, 36207 }, { 0x3F56, 36253 }, { 0x3F57, 36225 }, { 0x3F58, 36232 }, { 0x3F59, 36101 }, { 0x3F5A, 36130 }, { 0x3F5B, 36217 }, { 0x3F5C, 36152 }, { 0x3F5D, 36141 }, { 0x3F5E, 36112 }, { 0x3F5F, 36199 }, { 0x3F60, 36174 }, { 0x3F61, 36163 }, { 0x3F62, 36105 }, { 0x3F63, 36134 }, { 0x3F64, 36221 }, { 0x3F65, 36156 }, { 0x3F66, 36145 }, { 0x3F67, 36116 }, { 0x3F68, 36203 }, { 0x3F69, 36178 }, { 0x3F6A, 36167 }, { 0x3F6B, 36123 }, { 0x3F6C, 36249 }, { 0x3F6D, 36242 }, { 0x3F6E, 36192 }, { 0x3F6F, 36185 }, { 0x3F70, 36210 }, { 0x3F71, 36256 }, { 0x3F72, 36228 }, { 0x3F73, 36235 }, { 0x3F74, 36260 }, { 0x3F75, 36264 }, { 0x3F76, 36276 }, { 0x3F77, 36268 }, { 0x3F78, 36272 }, { 0x3F79, 36077 }, { 0x3F7A, 36093 }, { 0x3F7B, 36284 }, { 0x3F7C, 36280 }, { 0x3F7D, 22303 }, { 0x3F7E, 22281 }, { 0x3F7F, 22286 }, { 0x3F80, 22341 }, { 0x3F81, 22383 }, { 0x3F82, 22345 }, { 0x3F83, 22372 }, { 0x3F84, 22397 }, { 0x3F85, 22367 }, { 0x3F86, 22330 }, { 0x3F87, 22392 }, { 0x3F88, 22297 }, { 0x3F89, 22356 }, { 0x3F8A, 22314 }, { 0x3F8B, 22377 }, { 0x3F8C, 22362 }, { 0x3F8D, 22325 }, { 0x3F8E, 22387 }, { 0x3F8F, 22291 }, { 0x3F90, 22350 }, { 0x3F91, 22308 }, { 0x3F92, 22335 }, { 0x3F93, 22402 }, { 0x3F94, 22320 }, { 0x3F95, 22418 }, { 0x3F96, 22433 }, { 0x3F97, 22501 }, { 0x3F98, 22487 }, { 0x3F99, 22451 }, { 0x3F9A, 22423 }, { 0x3F9B, 22491 }, { 0x3F9C, 22523 }, { 0x3F9D, 22513 }, { 0x3F9E, 22517 }, { 0x3F9F, 22505 }, { 0x3FA0, 22483 }, { 0x3FA1, 22447 }, { 0x3FA2, 22474 }, { 0x3FA3, 22532 }, { 0x3FA4, 22536 }, { 0x3FA5, 22509 }, { 0x3FA6, 22465 }, { 0x3FA7, 22437 }, { 0x3FA8, 22469 }, { 0x3FA9, 22496 }, { 0x3FAA, 22527 }, { 0x3FAB, 22455 }, { 0x3FAC, 22478 }, { 0x3FAD, 22408 }, { 0x3FAE, 22442 }, { 0x3FAF, 22460 }, { 0x3FB0, 22413 }, { 0x3FB1, 22428 }, { 0x3FB2, 19796 }, { 0x3FB3, 19800 }, { 0x3FB4, 19825 }, { 0x3FB5, 21045 }, { 0x3FB6, 19845 }, { 0x3FB7, 21242 }, { 0x3FB8, 22186 }, { 0x3FB9, 19840 }, { 0x3FBA, 19821 }, { 0x3FBB, 21041 }, { 0x3FBC, 19836 }, { 0x3FBD, 19832 }, { 0x3FBE, 22220 }, { 0x3FBF, 22191 }, { 0x3FC0, 19868 }, { 0x3FC1, 21235 }, { 0x3FC2, 21245 }, { 0x3FC3, 21172 }, { 0x3FC4, 21169 }, { 0x3FC5, 21175 }, { 0x3FC6, 22234 }, { 0x3FC7, 19848 }, { 0x3FC8, 19806 }, { 0x3FC9, 22231 }, { 0x3FCA, 22253 }, { 0x3FCB, 64477 }, { 0x3FCC, 33931 }, { 0x3FCD, 33835 }, { 0x3FCE, 33943 }, { 0x3FCF, 33934 }, { 0x3FD0, 33838 }, { 0x3FD1, 33937 }, { 0x3FD2, 33940 }, { 0x3FD3, 33952 }, { 0x3FD4, 33955 }, { 0x3FD5, 33949 }, { 0x3FD6, 33832 }, { 0x3FD7, 33946 }, { 0x3FD8, 21238 }, { 0x3FD9, 85789 }, { 0x3FDA, 85728 }, { 0x3FDB, 85769 }, { 0x3FDC, 85741 }, { 0x3FDD, 85674 }, { 0x3FDE, 85708 }, { 0x3FDF, 85724 }, { 0x3FE0, 85757 }, { 0x3FE1, 85700 }, { 0x3FE2, 85665 }, { 0x3FE3, 85608 }, { 0x3FE4, 85733 }, { 0x3FE5, 85628 }, { 0x3FE6, 85761 }, { 0x3FE7, 85745 }, { 0x3FE8, 85624 }, { 0x3FE9, 85616 }, { 0x3FEA, 85774 }, { 0x3FEB, 85778 }, { 0x3FEC, 85716 }, { 0x3FED, 85632 }, { 0x3FEE, 85691 }, { 0x3FEF, 85712 }, { 0x3FF0, 85737 }, { 0x3FF1, 85652 }, { 0x3FF2, 85644 }, { 0x3FF3, 85640 }, { 0x3FF4, 85669 }, { 0x3FF5, 85612 }, { 0x3FF6, 85620 }, { 0x3FF7, 85678 }, { 0x3FF8, 85636 }, { 0x3FF9, 85704 }, { 0x3FFA, 85604 }, { 0x3FFB, 85686 }, { 0x3FFC, 85656 }, { 0x3FFD, 85749 }, { 0x3FFE, 85753 }, { 0x3FFF, 85648 }, { 0x4000, 85599 }, { 0x4001, 85682 }, { 0x4002, 85720 }, { 0x4003, 85765 }, { 0x4004, 85695 }, { 0x4005, 85660 }, { 0x4006, 85783 }, { 0x4007, 52143 }, { 0x4008, 52152 }, { 0x4009, 52146 }, { 0x400A, 52209 }, { 0x400B, 52155 }, { 0x400C, 52149 }, { 0x400D, 52161 }, { 0x400E, 52197 }, { 0x400F, 52203 }, { 0x4010, 52224 }, { 0x4011, 52164 }, { 0x4012, 52167 }, { 0x4013, 52182 }, { 0x4014, 52170 }, { 0x4015, 52173 }, { 0x4016, 52176 }, { 0x4017, 52218 }, { 0x4018, 52221 }, { 0x4019, 52194 }, { 0x401A, 52179 }, { 0x401B, 52215 }, { 0x401C, 52185 }, { 0x401D, 52188 }, { 0x401E, 52191 }, { 0x401F, 52227 }, { 0x4020, 52206 }, { 0x4021, 52212 }, { 0x4022, 52158 }, { 0x4023, 52200 }, { 0x4024, 44386 }, { 0x4025, 44473 }, { 0x4026, 44392 }, { 0x4027, 44407 }, { 0x4028, 44515 }, { 0x4029, 44425 }, { 0x402A, 44458 }, { 0x402B, 44440 }, { 0x402C, 44422 }, { 0x402D, 44389 }, { 0x402E, 44410 }, { 0x402F, 44416 }, { 0x4030, 44443 }, { 0x4031, 44431 }, { 0x4032, 44479 }, { 0x4033, 44506 }, { 0x4034, 44428 }, { 0x4035, 44518 }, { 0x4036, 44434 }, { 0x4037, 44470 }, { 0x4038, 44437 }, { 0x4039, 44413 }, { 0x403A, 44512 }, { 0x403B, 44419 }, { 0x403C, 44482 }, { 0x403D, 44401 }, { 0x403E, 44395 }, { 0x403F, 44530 }, { 0x4040, 44404 }, { 0x4041, 44455 }, { 0x4042, 44464 }, { 0x4043, 44491 }, { 0x4044, 44398 }, { 0x4045, 44449 }, { 0x4046, 44485 }, { 0x4047, 44509 }, { 0x4048, 44467 }, { 0x4049, 44452 }, { 0x404A, 44521 }, { 0x404B, 44488 }, { 0x404C, 44524 }, { 0x404D, 44476 }, { 0x404E, 44461 }, { 0x404F, 44497 }, { 0x4050, 44500 }, { 0x4051, 44503 }, { 0x4052, 44494 }, { 0x4053, 44446 }, { 0x4054, 44527 }, { 0x4055, 45024 }, { 0x4056, 44907 }, { 0x4057, 44915 }, { 0x4058, 44939 }, { 0x4059, 44923 }, { 0x405A, 44919 }, { 0x405B, 44911 }, { 0x405C, 44935 }, { 0x405D, 44931 }, { 0x405E, 44927 }, { 0x405F, 44953 }, { 0x4060, 45016 }, { 0x4061, 45012 }, { 0x4062, 44986 }, { 0x4063, 44982 }, { 0x4064, 44995 }, { 0x4065, 45020 }, { 0x4066, 45004 }, { 0x4067, 45008 }, { 0x4068, 44943 }, { 0x4069, 44957 }, { 0x406A, 44999 }, { 0x406B, 44967 }, { 0x406C, 44962 }, { 0x406D, 44948 }, { 0x406E, 44990 }, { 0x406F, 44977 }, { 0x4070, 44972 }, { 0x4071, 7511 }, { 0x4072, 7531 }, { 0x4073, 7575 }, { 0x4074, 7535 }, { 0x4075, 7515 }, { 0x4076, 7595 }, { 0x4077, 7599 }, { 0x4078, 7563 }, { 0x4079, 7635 }, { 0x407A, 7519 }, { 0x407B, 7571 }, { 0x407C, 7543 }, { 0x407D, 7547 }, { 0x407E, 7551 }, { 0x407F, 7615 }, { 0x4080, 7523 }, { 0x4081, 7583 }, { 0x4082, 7631 }, { 0x4083, 7579 }, { 0x4084, 7555 }, { 0x4085, 7559 }, { 0x4086, 7587 }, { 0x4087, 7527 }, { 0x4088, 7607 }, { 0x4089, 7627 }, { 0x408A, 7623 }, { 0x408B, 7539 }, { 0x408C, 7611 }, { 0x408D, 7603 }, { 0x408E, 7567 }, { 0x408F, 7591 }, { 0x4090, 7619 }, { 0x4091, 7639 }, { 0x4092, 7647 }, { 0x4093, 7643 }, { 0x4094, 7651 }, { 0x4095, 46347 }, { 0x4096, 46414 }, { 0x4097, 46353 }, { 0x4098, 46350 }, { 0x4099, 46402 }, { 0x409A, 46420 }, { 0x409B, 46359 }, { 0x409C, 46356 }, { 0x409D, 46411 }, { 0x409E, 46341 }, { 0x409F, 46378 }, { 0x40A0, 46381 }, { 0x40A1, 46384 }, { 0x40A2, 46405 }, { 0x40A3, 46344 }, { 0x40A4, 46366 }, { 0x40A5, 46417 }, { 0x40A6, 46408 }, { 0x40A7, 46390 }, { 0x40A8, 46393 }, { 0x40A9, 46396 }, { 0x40AA, 46399 }, { 0x40AB, 46369 }, { 0x40AC, 46375 }, { 0x40AD, 46372 }, { 0x40AE, 46387 }, { 0x40AF, 46362 }, { 0x40B0, 7671 }, { 0x40B1, 7703 }, { 0x40B2, 7711 }, { 0x40B3, 7707 }, { 0x40B4, 7655 }, { 0x40B5, 7775 }, { 0x40B6, 7783 }, { 0x40B7, 7771 }, { 0x40B8, 7787 }, { 0x40B9, 7659 }, { 0x40BA, 7747 }, { 0x40BB, 7715 }, { 0x40BC, 7791 }, { 0x40BD, 7795 }, { 0x40BE, 7759 }, { 0x40BF, 7751 }, { 0x40C0, 7719 }, { 0x40C1, 7723 }, { 0x40C2, 7727 }, { 0x40C3, 7667 }, { 0x40C4, 7779 }, { 0x40C5, 7799 }, { 0x40C6, 7803 }, { 0x40C7, 7743 }, { 0x40C8, 7767 }, { 0x40C9, 7663 }, { 0x40CA, 7691 }, { 0x40CB, 7675 }, { 0x40CC, 7679 }, { 0x40CD, 7755 }, { 0x40CE, 7731 }, { 0x40CF, 7739 }, { 0x40D0, 7763 }, { 0x40D1, 7735 }, { 0x40D2, 7687 }, { 0x40D3, 7699 }, { 0x40D4, 7695 }, { 0x40D5, 7683 }, { 0x40D6, 90596 }, { 0x40D7, 90601 }, { 0x40D8, 90611 }, { 0x40D9, 90616 }, { 0x40DA, 90606 }, { 0x40DB, 86754 }, { 0x40DC, 86757 }, { 0x40DD, 86781 }, { 0x40DE, 86736 }, { 0x40DF, 86778 }, { 0x40E0, 86715 }, { 0x40E1, 86724 }, { 0x40E2, 86775 }, { 0x40E3, 86763 }, { 0x40E4, 86748 }, { 0x40E5, 86751 }, { 0x40E6, 86733 }, { 0x40E7, 86772 }, { 0x40E8, 86787 }, { 0x40E9, 86739 }, { 0x40EA, 86760 }, { 0x40EB, 86742 }, { 0x40EC, 86727 }, { 0x40ED, 86793 }, { 0x40EE, 86730 }, { 0x40EF, 86718 }, { 0x40F0, 86769 }, { 0x40F1, 86766 }, { 0x40F2, 86790 }, { 0x40F3, 86796 }, { 0x40F4, 86784 }, { 0x40F5, 86721 }, { 0x40F6, 86709 }, { 0x40F7, 86712 }, { 0x40F8, 86745 }, { 0x40F9, 86706 }, { 0x40FA, 8172 }, { 0x40FB, 8176 }, { 0x40FC, 8180 }, { 0x40FD, 8228 }, { 0x40FE, 8232 }, { 0x40FF, 8208 }, { 0x4100, 8212 }, { 0x4101, 8292 }, { 0x4102, 8188 }, { 0x4103, 8220 }, { 0x4104, 8224 }, { 0x4105, 8276 }, { 0x4106, 8280 }, { 0x4107, 8192 }, { 0x4108, 8196 }, { 0x4109, 8200 }, { 0x410A, 8312 }, { 0x410B, 8260 }, { 0x410C, 8184 }, { 0x410D, 8204 }, { 0x410E, 8252 }, { 0x410F, 8256 }, { 0x4110, 8240 }, { 0x4111, 8244 }, { 0x4112, 8248 }, { 0x4113, 8296 }, { 0x4114, 8284 }, { 0x4115, 8288 }, { 0x4116, 8264 }, { 0x4117, 8268 }, { 0x4118, 8236 }, { 0x4119, 8272 }, { 0x411A, 8300 }, { 0x411B, 8304 }, { 0x411C, 8308 }, { 0x411D, 8216 }, { 0x411E, 8328 }, { 0x411F, 8336 }, { 0x4120, 8340 }, { 0x4121, 8344 }, { 0x4122, 8324 }, { 0x4123, 8332 }, { 0x4124, 8316 }, { 0x4125, 8320 }, { 0x4126, 8348 }, { 0x4127, 8352 }, { 0x4128, 8360 }, { 0x4129, 8356 }, { 0x412A, 8364 }, { 0x412B, 8368 }, { 0x412C, 60615 }, { 0x412D, 60610 }, { 0x412E, 60605 }, { 0x412F, 60625 }, { 0x4130, 60620 }, { 0x4131, 60630 }, { 0x4132, 60653 }, { 0x4133, 60648 }, { 0x4134, 60643 }, { 0x4135, 60663 }, { 0x4136, 60658 }, { 0x4137, 60668 }, { 0x4138, 60505 }, { 0x4139, 60541 }, { 0x413A, 60545 }, { 0x413B, 60593 }, { 0x413C, 60501 }, { 0x413D, 60581 }, { 0x413E, 60549 }, { 0x413F, 60585 }, { 0x4140, 60553 }, { 0x4141, 60601 }, { 0x4142, 60573 }, { 0x4143, 60577 }, { 0x4144, 60569 }, { 0x4145, 60509 }, { 0x4146, 60589 }, { 0x4147, 60565 }, { 0x4148, 60635 }, { 0x4149, 60529 }, { 0x414A, 60597 }, { 0x414B, 60561 }, { 0x414C, 60639 }, { 0x414D, 60525 }, { 0x414E, 60513 }, { 0x414F, 60517 }, { 0x4150, 60521 }, { 0x4151, 60557 }, { 0x4152, 60537 }, { 0x4153, 60533 }, { 0x4154, 60443 }, { 0x4155, 60438 }, { 0x4156, 60433 }, { 0x4157, 60453 }, { 0x4158, 60448 }, { 0x4159, 60458 }, { 0x415A, 60481 }, { 0x415B, 60476 }, { 0x415C, 60471 }, { 0x415D, 60491 }, { 0x415E, 60486 }, { 0x415F, 60496 }, { 0x4160, 60333 }, { 0x4161, 60369 }, { 0x4162, 60373 }, { 0x4163, 60421 }, { 0x4164, 60329 }, { 0x4165, 60409 }, { 0x4166, 60377 }, { 0x4167, 60413 }, { 0x4168, 60381 }, { 0x4169, 60429 }, { 0x416A, 60401 }, { 0x416B, 60405 }, { 0x416C, 60397 }, { 0x416D, 60337 }, { 0x416E, 60417 }, { 0x416F, 60393 }, { 0x4170, 60463 }, { 0x4171, 60357 }, { 0x4172, 60425 }, { 0x4173, 60389 }, { 0x4174, 60467 }, { 0x4175, 60353 }, { 0x4176, 60341 }, { 0x4177, 60345 }, { 0x4178, 60349 }, { 0x4179, 60385 }, { 0x417A, 60365 }, { 0x417B, 60361 }, { 0x417C, 65658 }, { 0x417D, 65622 }, { 0x417E, 65646 }, { 0x417F, 65598 }, { 0x4180, 65682 }, { 0x4181, 65559 }, { 0x4182, 65664 }, { 0x4183, 65685 }, { 0x4184, 65631 }, { 0x4185, 65643 }, { 0x4186, 65583 }, { 0x4187, 65640 }, { 0x4188, 65601 }, { 0x4189, 65625 }, { 0x418A, 65667 }, { 0x418B, 65637 }, { 0x418C, 65688 }, { 0x418D, 65679 }, { 0x418E, 65628 }, { 0x418F, 65676 }, { 0x4190, 65649 }, { 0x4191, 65652 }, { 0x4192, 65550 }, { 0x4193, 65592 }, { 0x4194, 65577 }, { 0x4195, 65565 }, { 0x4196, 65553 }, { 0x4197, 65670 }, { 0x4198, 65619 }, { 0x4199, 65547 }, { 0x419A, 65661 }, { 0x419B, 65610 }, { 0x419C, 65589 }, { 0x419D, 65568 }, { 0x419E, 65607 }, { 0x419F, 65562 }, { 0x41A0, 65613 }, { 0x41A1, 65655 }, { 0x41A2, 65616 }, { 0x41A3, 65580 }, { 0x41A4, 65574 }, { 0x41A5, 65556 }, { 0x41A6, 65571 }, { 0x41A7, 65595 }, { 0x41A8, 65673 }, { 0x41A9, 65586 }, { 0x41AA, 65604 }, { 0x41AB, 65634 }, { 0x41AC, 64610 }, { 0x41AD, 64565 }, { 0x41AE, 64592 }, { 0x41AF, 64580 }, { 0x41B0, 64595 }, { 0x41B1, 64604 }, { 0x41B2, 64616 }, { 0x41B3, 64586 }, { 0x41B4, 64589 }, { 0x41B5, 64634 }, { 0x41B6, 64601 }, { 0x41B7, 64613 }, { 0x41B8, 64574 }, { 0x41B9, 64571 }, { 0x41BA, 64631 }, { 0x41BB, 64619 }, { 0x41BC, 64622 }, { 0x41BD, 64625 }, { 0x41BE, 64628 }, { 0x41BF, 64607 }, { 0x41C0, 64577 }, { 0x41C1, 64598 }, { 0x41C2, 64547 }, { 0x41C3, 64550 }, { 0x41C4, 64553 }, { 0x41C5, 64556 }, { 0x41C6, 64559 }, { 0x41C7, 64562 }, { 0x41C8, 64568 }, { 0x41C9, 64583 }, { 0x41CA, 64535 }, { 0x41CB, 64517 }, { 0x41CC, 64523 }, { 0x41CD, 64544 }, { 0x41CE, 64529 }, { 0x41CF, 64526 }, { 0x41D0, 64520 }, { 0x41D1, 64541 }, { 0x41D2, 64538 }, { 0x41D3, 64532 }, { 0x41D4, 33353 }, { 0x41D5, 33377 }, { 0x41D6, 33421 }, { 0x41D7, 33373 }, { 0x41D8, 33425 }, { 0x41D9, 33429 }, { 0x41DA, 33489 }, { 0x41DB, 33357 }, { 0x41DC, 33437 }, { 0x41DD, 33381 }, { 0x41DE, 33445 }, { 0x41DF, 33361 }, { 0x41E0, 33385 }, { 0x41E1, 33473 }, { 0x41E2, 33453 }, { 0x41E3, 33389 }, { 0x41E4, 33393 }, { 0x41E5, 33397 }, { 0x41E6, 33365 }, { 0x41E7, 33457 }, { 0x41E8, 33401 }, { 0x41E9, 33477 }, { 0x41EA, 33405 }, { 0x41EB, 33461 }, { 0x41EC, 33409 }, { 0x41ED, 33481 }, { 0x41EE, 33465 }, { 0x41EF, 33493 }, { 0x41F0, 33485 }, { 0x41F1, 33433 }, { 0x41F2, 33369 }, { 0x41F3, 33413 }, { 0x41F4, 33449 }, { 0x41F5, 33441 }, { 0x41F6, 33417 }, { 0x41F7, 33469 }, { 0x41F8, 33209 }, { 0x41F9, 33233 }, { 0x41FA, 33277 }, { 0x41FB, 33229 }, { 0x41FC, 33281 }, { 0x41FD, 33285 }, { 0x41FE, 33345 }, { 0x41FF, 33213 }, { 0x4200, 33293 }, { 0x4201, 33237 }, { 0x4202, 33301 }, { 0x4203, 33217 }, { 0x4204, 33241 }, { 0x4205, 33329 }, { 0x4206, 33309 }, { 0x4207, 33245 }, { 0x4208, 33249 }, { 0x4209, 33253 }, { 0x420A, 33221 }, { 0x420B, 33313 }, { 0x420C, 33257 }, { 0x420D, 33333 }, { 0x420E, 33261 }, { 0x420F, 33317 }, { 0x4210, 33265 }, { 0x4211, 33337 }, { 0x4212, 33321 }, { 0x4213, 33349 }, { 0x4214, 33341 }, { 0x4215, 33289 }, { 0x4216, 33225 }, { 0x4217, 33269 }, { 0x4218, 33305 }, { 0x4219, 33297 }, { 0x421A, 33273 }, { 0x421B, 33325 }, { 0x421C, 60891 }, { 0x421D, 60909 }, { 0x421E, 60912 }, { 0x421F, 60972 }, { 0x4220, 60915 }, { 0x4221, 60990 }, { 0x4222, 60975 }, { 0x4223, 60918 }, { 0x4224, 60894 }, { 0x4225, 60921 }, { 0x4226, 60924 }, { 0x4227, 60981 }, { 0x4228, 60927 }, { 0x4229, 60897 }, { 0x422A, 60930 }, { 0x422B, 60933 }, { 0x422C, 60936 }, { 0x422D, 60987 }, { 0x422E, 60939 }, { 0x422F, 60945 }, { 0x4230, 60942 }, { 0x4231, 60993 }, { 0x4232, 60900 }, { 0x4233, 60948 }, { 0x4234, 60951 }, { 0x4235, 60954 }, { 0x4236, 60996 }, { 0x4237, 60957 }, { 0x4238, 60999 }, { 0x4239, 60960 }, { 0x423A, 61002 }, { 0x423B, 60903 }, { 0x423C, 60963 }, { 0x423D, 60966 }, { 0x423E, 60906 }, { 0x423F, 60969 }, { 0x4240, 61005 }, { 0x4241, 60978 }, { 0x4242, 61008 }, { 0x4243, 60984 }, { 0x4244, 90275 }, { 0x4245, 90283 }, { 0x4246, 90311 }, { 0x4247, 90299 }, { 0x4248, 90267 }, { 0x4249, 90459 }, { 0x424A, 90303 }, { 0x424B, 90463 }, { 0x424C, 90359 }, { 0x424D, 90291 }, { 0x424E, 90455 }, { 0x424F, 90363 }, { 0x4250, 90315 }, { 0x4251, 90355 }, { 0x4252, 90331 }, { 0x4253, 90399 }, { 0x4254, 90447 }, { 0x4255, 90387 }, { 0x4256, 90287 }, { 0x4257, 90407 }, { 0x4258, 90323 }, { 0x4259, 90411 }, { 0x425A, 90395 }, { 0x425B, 90347 }, { 0x425C, 90279 }, { 0x425D, 90375 }, { 0x425E, 90295 }, { 0x425F, 90383 }, { 0x4260, 90335 }, { 0x4261, 90343 }, { 0x4262, 90415 }, { 0x4263, 90467 }, { 0x4264, 90427 }, { 0x4265, 90403 }, { 0x4266, 90271 }, { 0x4267, 90439 }, { 0x4268, 90307 }, { 0x4269, 90391 }, { 0x426A, 90371 }, { 0x426B, 90339 }, { 0x426C, 90471 }, { 0x426D, 90351 }, { 0x426E, 90423 }, { 0x426F, 90443 }, { 0x4270, 90435 }, { 0x4271, 90431 }, { 0x4272, 90319 }, { 0x4273, 90379 }, { 0x4274, 90367 }, { 0x4275, 90451 }, { 0x4276, 90419 }, { 0x4277, 90327 }, { 0x4278, 90475 }, { 0x4279, 50717 }, { 0x427A, 50721 }, { 0x427B, 50725 }, { 0x427C, 50729 }, { 0x427D, 50733 }, { 0x427E, 50737 }, { 0x427F, 50741 }, { 0x4280, 50745 }, { 0x4281, 50749 }, { 0x4282, 50753 }, { 0x4283, 50757 }, { 0x4284, 50761 }, { 0x4285, 50765 }, { 0x4286, 50769 }, { 0x4287, 50773 }, { 0x4288, 50777 }, { 0x4289, 51033 }, { 0x428A, 51037 }, { 0x428B, 50781 }, { 0x428C, 51041 }, { 0x428D, 51045 }, { 0x428E, 50785 }, { 0x428F, 51049 }, { 0x4290, 50789 }, { 0x4291, 50793 }, { 0x4292, 50797 }, { 0x4293, 50801 }, { 0x4294, 50681 }, { 0x4295, 50805 }, { 0x4296, 50809 }, { 0x4297, 50813 }, { 0x4298, 50817 }, { 0x4299, 50821 }, { 0x429A, 50825 }, { 0x429B, 50829 }, { 0x429C, 50833 }, { 0x429D, 50837 }, { 0x429E, 50841 }, { 0x429F, 50845 }, { 0x42A0, 50849 }, { 0x42A1, 50853 }, { 0x42A2, 50857 }, { 0x42A3, 50861 }, { 0x42A4, 50865 }, { 0x42A5, 50869 }, { 0x42A6, 50873 }, { 0x42A7, 50877 }, { 0x42A8, 50881 }, { 0x42A9, 50885 }, { 0x42AA, 50889 }, { 0x42AB, 50893 }, { 0x42AC, 50897 }, { 0x42AD, 50901 }, { 0x42AE, 50905 }, { 0x42AF, 50909 }, { 0x42B0, 50913 }, { 0x42B1, 50917 }, { 0x42B2, 50921 }, { 0x42B3, 50925 }, { 0x42B4, 50929 }, { 0x42B5, 50933 }, { 0x42B6, 50937 }, { 0x42B7, 50941 }, { 0x42B8, 50945 }, { 0x42B9, 50949 }, { 0x42BA, 50953 }, { 0x42BB, 50957 }, { 0x42BC, 50961 }, { 0x42BD, 50965 }, { 0x42BE, 50969 }, { 0x42BF, 50973 }, { 0x42C0, 51061 }, { 0x42C1, 50977 }, { 0x42C2, 50981 }, { 0x42C3, 50685 }, { 0x42C4, 50985 }, { 0x42C5, 50989 }, { 0x42C6, 51053 }, { 0x42C7, 51057 }, { 0x42C8, 50689 }, { 0x42C9, 50993 }, { 0x42CA, 50997 }, { 0x42CB, 51001 }, { 0x42CC, 51005 }, { 0x42CD, 51009 }, { 0x42CE, 49755 }, { 0x42CF, 49759 }, { 0x42D0, 49763 }, { 0x42D1, 49767 }, { 0x42D2, 49771 }, { 0x42D3, 49775 }, { 0x42D4, 49779 }, { 0x42D5, 49783 }, { 0x42D6, 50693 }, { 0x42D7, 50697 }, { 0x42D8, 50701 }, { 0x42D9, 49787 }, { 0x42DA, 49791 }, { 0x42DB, 49795 }, { 0x42DC, 50705 }, { 0x42DD, 50709 }, { 0x42DE, 50713 }, { 0x42DF, 49799 }, { 0x42E0, 49803 }, { 0x42E1, 49807 }, { 0x42E2, 49811 }, { 0x42E3, 49815 }, { 0x42E4, 49819 }, { 0x42E5, 49823 }, { 0x42E6, 49827 }, { 0x42E7, 49831 }, { 0x42E8, 49835 }, { 0x42E9, 49839 }, { 0x42EA, 49843 }, { 0x42EB, 49847 }, { 0x42EC, 49851 }, { 0x42ED, 49855 }, { 0x42EE, 49859 }, { 0x42EF, 49863 }, { 0x42F0, 49867 }, { 0x42F1, 49871 }, { 0x42F2, 49875 }, { 0x42F3, 49879 }, { 0x42F4, 49883 }, { 0x42F5, 49887 }, { 0x42F6, 49891 }, { 0x42F7, 49895 }, { 0x42F8, 49899 }, { 0x42F9, 49903 }, { 0x42FA, 49907 }, { 0x42FB, 49911 }, { 0x42FC, 49915 }, { 0x42FD, 49919 }, { 0x42FE, 49923 }, { 0x42FF, 49927 }, { 0x4300, 49931 }, { 0x4301, 49935 }, { 0x4302, 49939 }, { 0x4303, 49943 }, { 0x4304, 49947 }, { 0x4305, 49951 }, { 0x4306, 49955 }, { 0x4307, 49959 }, { 0x4308, 49963 }, { 0x4309, 49967 }, { 0x430A, 49971 }, { 0x430B, 49975 }, { 0x430C, 49979 }, { 0x430D, 49983 }, { 0x430E, 49987 }, { 0x430F, 49991 }, { 0x4310, 49995 }, { 0x4311, 49999 }, { 0x4312, 50003 }, { 0x4313, 50007 }, { 0x4314, 50011 }, { 0x4315, 50015 }, { 0x4316, 50019 }, { 0x4317, 50023 }, { 0x4318, 50027 }, { 0x4319, 51065 }, { 0x431A, 51069 }, { 0x431B, 51073 }, { 0x431C, 51077 }, { 0x431D, 51081 }, { 0x431E, 51085 }, { 0x431F, 51089 }, { 0x4320, 51093 }, { 0x4321, 51097 }, { 0x4322, 51101 }, { 0x4323, 51105 }, { 0x4324, 51109 }, { 0x4325, 51113 }, { 0x4326, 51117 }, { 0x4327, 51121 }, { 0x4328, 51125 }, { 0x4329, 51129 }, { 0x432A, 51133 }, { 0x432B, 51137 }, { 0x432C, 50031 }, { 0x432D, 50035 }, { 0x432E, 50039 }, { 0x432F, 50043 }, { 0x4330, 50047 }, { 0x4331, 50051 }, { 0x4332, 50055 }, { 0x4333, 50059 }, { 0x4334, 50063 }, { 0x4335, 50067 }, { 0x4336, 50071 }, { 0x4337, 50075 }, { 0x4338, 50079 }, { 0x4339, 50083 }, { 0x433A, 50087 }, { 0x433B, 50091 }, { 0x433C, 50095 }, { 0x433D, 50099 }, { 0x433E, 50103 }, { 0x433F, 50107 }, { 0x4340, 50111 }, { 0x4341, 50115 }, { 0x4342, 50119 }, { 0x4343, 50123 }, { 0x4344, 50127 }, { 0x4345, 50131 }, { 0x4346, 50135 }, { 0x4347, 50139 }, { 0x4348, 50143 }, { 0x4349, 50147 }, { 0x434A, 50151 }, { 0x434B, 50155 }, { 0x434C, 50159 }, { 0x434D, 50163 }, { 0x434E, 50167 }, { 0x434F, 50171 }, { 0x4350, 50175 }, { 0x4351, 50179 }, { 0x4352, 50183 }, { 0x4353, 50187 }, { 0x4354, 50191 }, { 0x4355, 50195 }, { 0x4356, 50199 }, { 0x4357, 50203 }, { 0x4358, 50207 }, { 0x4359, 50211 }, { 0x435A, 50215 }, { 0x435B, 50219 }, { 0x435C, 50223 }, { 0x435D, 50227 }, { 0x435E, 50231 }, { 0x435F, 50235 }, { 0x4360, 50239 }, { 0x4361, 50243 }, { 0x4362, 50247 }, { 0x4363, 50251 }, { 0x4364, 50255 }, { 0x4365, 50259 }, { 0x4366, 50263 }, { 0x4367, 50267 }, { 0x4368, 50271 }, { 0x4369, 50275 }, { 0x436A, 50279 }, { 0x436B, 50283 }, { 0x436C, 50287 }, { 0x436D, 50291 }, { 0x436E, 50295 }, { 0x436F, 50299 }, { 0x4370, 50303 }, { 0x4371, 50307 }, { 0x4372, 50311 }, { 0x4373, 50315 }, { 0x4374, 50319 }, { 0x4375, 50323 }, { 0x4376, 50327 }, { 0x4377, 50331 }, { 0x4378, 50335 }, { 0x4379, 50339 }, { 0x437A, 50343 }, { 0x437B, 50347 }, { 0x437C, 50351 }, { 0x437D, 50355 }, { 0x437E, 50359 }, { 0x437F, 50363 }, { 0x4380, 50367 }, { 0x4381, 50371 }, { 0x4382, 50375 }, { 0x4383, 50379 }, { 0x4384, 50383 }, { 0x4385, 50387 }, { 0x4386, 50391 }, { 0x4387, 50395 }, { 0x4388, 50399 }, { 0x4389, 50403 }, { 0x438A, 50407 }, { 0x438B, 50411 }, { 0x438C, 50415 }, { 0x438D, 50419 }, { 0x438E, 50423 }, { 0x438F, 50427 }, { 0x4390, 50431 }, { 0x4391, 50435 }, { 0x4392, 50439 }, { 0x4393, 50443 }, { 0x4394, 50447 }, { 0x4395, 50451 }, { 0x4396, 50455 }, { 0x4397, 50459 }, { 0x4398, 50463 }, { 0x4399, 50467 }, { 0x439A, 50471 }, { 0x439B, 50475 }, { 0x439C, 50479 }, { 0x439D, 50483 }, { 0x439E, 50487 }, { 0x439F, 50491 }, { 0x43A0, 50495 }, { 0x43A1, 50499 }, { 0x43A2, 50503 }, { 0x43A3, 50507 }, { 0x43A4, 50511 }, { 0x43A5, 50515 }, { 0x43A6, 50519 }, { 0x43A7, 50523 }, { 0x43A8, 50527 }, { 0x43A9, 50531 }, { 0x43AA, 50535 }, { 0x43AB, 50539 }, { 0x43AC, 50543 }, { 0x43AD, 50547 }, { 0x43AE, 50551 }, { 0x43AF, 50555 }, { 0x43B0, 50559 }, { 0x43B1, 50564 }, { 0x43B2, 50569 }, { 0x43B3, 50574 }, { 0x43B4, 50579 }, { 0x43B5, 50584 }, { 0x43B6, 50589 }, { 0x43B7, 50594 }, { 0x43B8, 50599 }, { 0x43B9, 51013 }, { 0x43BA, 51018 }, { 0x43BB, 51023 }, { 0x43BC, 51028 }, { 0x43BD, 50604 }, { 0x43BE, 50609 }, { 0x43BF, 50614 }, { 0x43C0, 50619 }, { 0x43C1, 50624 }, { 0x43C2, 50629 }, { 0x43C3, 50634 }, { 0x43C4, 50639 }, { 0x43C5, 50644 }, { 0x43C6, 50649 }, { 0x43C7, 50653 }, { 0x43C8, 50657 }, { 0x43C9, 50661 }, { 0x43CA, 50665 }, { 0x43CB, 50669 }, { 0x43CC, 50673 }, { 0x43CD, 50677 }, { 0x43CE, 60157 }, { 0x43CF, 60160 }, { 0x43D0, 60163 }, { 0x43D1, 60166 }, { 0x43D2, 60169 }, { 0x43D3, 60172 }, { 0x43D4, 60175 }, { 0x43D5, 60178 }, { 0x43D6, 60181 }, { 0x43D7, 60184 }, { 0x43D8, 60187 }, { 0x43D9, 60190 }, { 0x43DA, 60193 }, { 0x43DB, 60196 }, { 0x43DC, 60199 }, { 0x43DD, 60202 }, { 0x43DE, 60205 }, { 0x43DF, 60208 }, { 0x43E0, 60211 }, { 0x43E1, 60214 }, { 0x43E2, 60217 }, { 0x43E3, 60220 }, { 0x43E4, 60223 }, { 0x43E5, 60226 }, { 0x43E6, 60229 }, { 0x43E7, 60232 }, { 0x43E8, 60235 }, { 0x43E9, 60238 }, { 0x43EA, 60241 }, { 0x43EB, 60244 }, { 0x43EC, 60247 }, { 0x43ED, 60250 }, { 0x43EE, 60253 }, { 0x43EF, 60256 }, { 0x43F0, 60259 }, { 0x43F1, 60262 }, { 0x43F2, 60265 }, { 0x43F3, 60268 }, { 0x43F4, 60271 }, { 0x43F5, 60274 }, { 0x43F6, 60277 }, { 0x43F7, 60280 }, { 0x43F8, 60283 }, { 0x43F9, 60286 }, { 0x43FA, 60289 }, { 0x43FB, 60292 }, { 0x43FC, 60295 }, { 0x43FD, 60298 }, { 0x43FE, 60301 }, { 0x43FF, 60304 }, { 0x4400, 60307 }, { 0x4401, 60310 }, { 0x4402, 60313 }, { 0x4403, 60316 }, { 0x4404, 60319 }, { 0x4405, 82256 }, { 0x4406, 82224 }, { 0x4407, 82260 }, { 0x4408, 82272 }, { 0x4409, 82196 }, { 0x440A, 82216 }, { 0x440B, 82268 }, { 0x440C, 82228 }, { 0x440D, 82248 }, { 0x440E, 82252 }, { 0x440F, 82232 }, { 0x4410, 82276 }, { 0x4411, 82204 }, { 0x4412, 82208 }, { 0x4413, 82280 }, { 0x4414, 82220 }, { 0x4415, 82200 }, { 0x4416, 82264 }, { 0x4417, 82236 }, { 0x4418, 82240 }, { 0x4419, 82244 }, { 0x441A, 82212 }, { 0x441B, 82319 }, { 0x441C, 82284 }, { 0x441D, 82307 }, { 0x441E, 82311 }, { 0x441F, 82298 }, { 0x4420, 82315 }, { 0x4421, 82288 }, { 0x4422, 82293 }, { 0x4423, 82302 }, { 0x4424, 101694 }, { 0x4425, 101670 }, { 0x4426, 101701 }, { 0x4427, 101710 }, { 0x4428, 101649 }, { 0x4429, 101664 }, { 0x442A, 101707 }, { 0x442B, 101673 }, { 0x442C, 101688 }, { 0x442D, 101691 }, { 0x442E, 101676 }, { 0x442F, 101713 }, { 0x4430, 101655 }, { 0x4431, 101697 }, { 0x4432, 101658 }, { 0x4433, 101716 }, { 0x4434, 101667 }, { 0x4435, 101652 }, { 0x4436, 101704 }, { 0x4437, 101679 }, { 0x4438, 101682 }, { 0x4439, 101685 }, { 0x443A, 101661 }, { 0x443B, 101740 }, { 0x443C, 101743 }, { 0x443D, 101719 }, { 0x443E, 101725 }, { 0x443F, 101734 }, { 0x4440, 101731 }, { 0x4441, 101728 }, { 0x4442, 101722 }, { 0x4443, 101737 }, { 0x4444, 101588 }, { 0x4445, 101557 }, { 0x4446, 101572 }, { 0x4447, 101533 }, { 0x4448, 101596 }, { 0x4449, 101605 }, { 0x444A, 101560 }, { 0x444B, 101512 }, { 0x444C, 101527 }, { 0x444D, 101602 }, { 0x444E, 101536 }, { 0x444F, 101551 }, { 0x4450, 101584 }, { 0x4451, 101554 }, { 0x4452, 101576 }, { 0x4453, 101539 }, { 0x4454, 101592 }, { 0x4455, 101608 }, { 0x4456, 101564 }, { 0x4457, 101518 }, { 0x4458, 101568 }, { 0x4459, 101521 }, { 0x445A, 101611 }, { 0x445B, 101530 }, { 0x445C, 101515 }, { 0x445D, 101599 }, { 0x445E, 101542 }, { 0x445F, 101545 }, { 0x4460, 101580 }, { 0x4461, 101548 }, { 0x4462, 101524 }, { 0x4463, 101614 }, { 0x4464, 101624 }, { 0x4465, 101633 }, { 0x4466, 101630 }, { 0x4467, 101639 }, { 0x4468, 101627 }, { 0x4469, 101621 }, { 0x446A, 101636 }, { 0x446B, 101617 }, { 0x446C, 47842 }, { 0x446D, 47818 }, { 0x446E, 47845 }, { 0x446F, 47857 }, { 0x4470, 47797 }, { 0x4471, 47815 }, { 0x4472, 47839 }, { 0x4473, 47821 }, { 0x4474, 47833 }, { 0x4475, 47836 }, { 0x4476, 47824 }, { 0x4477, 47851 }, { 0x4478, 47806 }, { 0x4479, 47809 }, { 0x447A, 47854 }, { 0x447B, 47803 }, { 0x447C, 47800 }, { 0x447D, 47848 }, { 0x447E, 47827 }, { 0x447F, 47830 }, { 0x4480, 47812 }, { 0x4481, 47860 }, { 0x4482, 47870 }, { 0x4483, 47867 }, { 0x4484, 47873 }, { 0x4485, 47863 }, { 0x4486, 104555 }, { 0x4487, 104558 }, { 0x4488, 104594 }, { 0x4489, 104591 }, { 0x448A, 104546 }, { 0x448B, 104582 }, { 0x448C, 104588 }, { 0x448D, 104561 }, { 0x448E, 104579 }, { 0x448F, 104585 }, { 0x4490, 104564 }, { 0x4491, 104597 }, { 0x4492, 104567 }, { 0x4493, 104570 }, { 0x4494, 104606 }, { 0x4495, 104552 }, { 0x4496, 104549 }, { 0x4497, 104603 }, { 0x4498, 104573 }, { 0x4499, 104600 }, { 0x449A, 104609 }, { 0x449B, 104576 }, { 0x449C, 104612 }, { 0x449D, 104619 }, { 0x449E, 104628 }, { 0x449F, 104615 }, { 0x44A0, 104622 }, { 0x44A1, 104625 }, { 0x44A2, 104543 }, { 0x44A3, 52230 }, { 0x44A4, 52233 }, { 0x44A5, 52248 }, { 0x44A6, 52239 }, { 0x44A7, 52242 }, { 0x44A8, 52284 }, { 0x44A9, 52251 }, { 0x44AA, 52287 }, { 0x44AB, 52254 }, { 0x44AC, 52257 }, { 0x44AD, 52260 }, { 0x44AE, 52263 }, { 0x44AF, 52266 }, { 0x44B0, 52272 }, { 0x44B1, 52302 }, { 0x44B2, 52278 }, { 0x44B3, 52281 }, { 0x44B4, 52245 }, { 0x44B5, 52269 }, { 0x44B6, 52275 }, { 0x44B7, 52305 }, { 0x44B8, 52290 }, { 0x44B9, 52293 }, { 0x44BA, 52296 }, { 0x44BB, 52299 }, { 0x44BC, 52236 }, { 0x44BD, 52308 }, { 0x44BE, 83750 }, { 0x44BF, 83754 }, { 0x44C0, 83758 }, { 0x44C1, 83762 }, { 0x44C2, 83830 }, { 0x44C3, 83826 }, { 0x44C4, 83766 }, { 0x44C5, 83842 }, { 0x44C6, 83794 }, { 0x44C7, 83782 }, { 0x44C8, 83786 }, { 0x44C9, 83846 }, { 0x44CA, 83790 }, { 0x44CB, 83850 }, { 0x44CC, 83802 }, { 0x44CD, 83854 }, { 0x44CE, 83778 }, { 0x44CF, 83838 }, { 0x44D0, 83834 }, { 0x44D1, 83806 }, { 0x44D2, 83858 }, { 0x44D3, 83810 }, { 0x44D4, 83774 }, { 0x44D5, 83798 }, { 0x44D6, 83814 }, { 0x44D7, 83862 }, { 0x44D8, 83818 }, { 0x44D9, 83866 }, { 0x44DA, 83822 }, { 0x44DB, 83770 }, { 0x44DC, 83870 }, { 0x44DD, 83874 }, { 0x44DE, 83332 }, { 0x44DF, 83336 }, { 0x44E0, 83340 }, { 0x44E1, 83344 }, { 0x44E2, 83412 }, { 0x44E3, 83408 }, { 0x44E4, 83348 }, { 0x44E5, 83376 }, { 0x44E6, 83364 }, { 0x44E7, 83368 }, { 0x44E8, 83372 }, { 0x44E9, 83384 }, { 0x44EA, 83360 }, { 0x44EB, 83420 }, { 0x44EC, 83416 }, { 0x44ED, 83388 }, { 0x44EE, 83424 }, { 0x44EF, 83392 }, { 0x44F0, 83356 }, { 0x44F1, 83380 }, { 0x44F2, 83396 }, { 0x44F3, 83400 }, { 0x44F4, 83404 }, { 0x44F5, 83352 }, { 0x44F6, 83737 }, { 0x44F7, 83682 }, { 0x44F8, 83746 }, { 0x44F9, 83742 }, { 0x44FA, 83429 }, { 0x44FB, 83478 }, { 0x44FC, 83625 }, { 0x44FD, 83518 }, { 0x44FE, 83498 }, { 0x44FF, 83449 }, { 0x4500, 83596 }, { 0x4501, 83558 }, { 0x4502, 83538 }, { 0x4503, 83469 }, { 0x4504, 83664 }, { 0x4505, 83655 }, { 0x4506, 83587 }, { 0x4507, 83578 }, { 0x4508, 83616 }, { 0x4509, 83673 }, { 0x450A, 83433 }, { 0x450B, 83482 }, { 0x450C, 83629 }, { 0x450D, 83522 }, { 0x450E, 83502 }, { 0x450F, 83453 }, { 0x4510, 83600 }, { 0x4511, 83562 }, { 0x4512, 83542 }, { 0x4513, 83444 }, { 0x4514, 83493 }, { 0x4515, 83640 }, { 0x4516, 83533 }, { 0x4517, 83513 }, { 0x4518, 83464 }, { 0x4519, 83611 }, { 0x451A, 83573 }, { 0x451B, 83553 }, { 0x451C, 83473 }, { 0x451D, 83668 }, { 0x451E, 83659 }, { 0x451F, 83591 }, { 0x4520, 83582 }, { 0x4521, 83620 }, { 0x4522, 83677 }, { 0x4523, 83645 }, { 0x4524, 83650 }, { 0x4525, 83438 }, { 0x4526, 83487 }, { 0x4527, 83634 }, { 0x4528, 83527 }, { 0x4529, 83507 }, { 0x452A, 83458 }, { 0x452B, 83605 }, { 0x452C, 83567 }, { 0x452D, 83547 }, { 0x452E, 83687 }, { 0x452F, 83702 }, { 0x4530, 83732 }, { 0x4531, 83712 }, { 0x4532, 83707 }, { 0x4533, 83692 }, { 0x4534, 83727 }, { 0x4535, 83722 }, { 0x4536, 83717 }, { 0x4537, 83697 }, { 0x4538, 104214 }, { 0x4539, 104193 }, { 0x453A, 104201 }, { 0x453B, 104205 }, { 0x453C, 104189 }, { 0x453D, 104197 }, { 0x453E, 104210 }, { 0x453F, 104166 }, { 0x4540, 104174 }, { 0x4541, 104171 }, { 0x4542, 104235 }, { 0x4543, 104283 }, { 0x4544, 104226 }, { 0x4545, 104280 }, { 0x4546, 104220 }, { 0x4547, 104271 }, { 0x4548, 104232 }, { 0x4549, 104292 }, { 0x454A, 104307 }, { 0x454B, 104313 }, { 0x454C, 104274 }, { 0x454D, 104310 }, { 0x454E, 104289 }, { 0x454F, 104256 }, { 0x4550, 104304 }, { 0x4551, 104223 }, { 0x4552, 104277 }, { 0x4553, 104244 }, { 0x4554, 104247 }, { 0x4555, 104295 }, { 0x4556, 104217 }, { 0x4557, 104268 }, { 0x4558, 104241 }, { 0x4559, 104262 }, { 0x455A, 104250 }, { 0x455B, 104238 }, { 0x455C, 104259 }, { 0x455D, 104298 }, { 0x455E, 104301 }, { 0x455F, 104253 }, { 0x4560, 104265 }, { 0x4561, 104229 }, { 0x4562, 104286 }, { 0x4563, 104316 }, { 0x4564, 104155 }, { 0x4565, 104163 }, { 0x4566, 104159 }, { 0x4567, 104333 }, { 0x4568, 104177 }, { 0x4569, 104180 }, { 0x456A, 104186 }, { 0x456B, 104183 }, { 0x456C, 104327 }, { 0x456D, 104330 }, { 0x456E, 104319 }, { 0x456F, 104323 }, { 0x4570, 104335 }, { 0x4571, 104347 }, { 0x4572, 104351 }, { 0x4573, 104358 }, { 0x4574, 104362 }, { 0x4575, 104344 }, { 0x4576, 104338 }, { 0x4577, 104354 }, { 0x4578, 104341 }, { 0x4579, 7356 }, { 0x457A, 7481 }, { 0x457B, 7401 }, { 0x457C, 7366 }, { 0x457D, 7411 }, { 0x457E, 7386 }, { 0x457F, 7421 }, { 0x4580, 7416 }, { 0x4581, 7396 }, { 0x4582, 7381 }, { 0x4583, 7376 }, { 0x4584, 7406 }, { 0x4585, 7371 }, { 0x4586, 7456 }, { 0x4587, 7461 }, { 0x4588, 7486 }, { 0x4589, 7351 }, { 0x458A, 7391 }, { 0x458B, 7361 }, { 0x458C, 7476 }, { 0x458D, 7451 }, { 0x458E, 7471 }, { 0x458F, 7446 }, { 0x4590, 7426 }, { 0x4591, 7441 }, { 0x4592, 7491 }, { 0x4593, 7436 }, { 0x4594, 7431 }, { 0x4595, 7466 }, { 0x4596, 7496 }, { 0x4597, 7501 }, { 0x4598, 7506 }, { 0x4599, 7221 }, { 0x459A, 7231 }, { 0x459B, 7216 }, { 0x459C, 7306 }, { 0x459D, 7236 }, { 0x459E, 7261 }, { 0x459F, 7286 }, { 0x45A0, 7241 }, { 0x45A1, 7196 }, { 0x45A2, 7256 }, { 0x45A3, 7281 }, { 0x45A4, 7226 }, { 0x45A5, 7311 }, { 0x45A6, 7301 }, { 0x45A7, 7246 }, { 0x45A8, 7291 }, { 0x45A9, 7211 }, { 0x45AA, 7276 }, { 0x45AB, 7191 }, { 0x45AC, 7201 }, { 0x45AD, 7296 }, { 0x45AE, 7206 }, { 0x45AF, 7331 }, { 0x45B0, 7251 }, { 0x45B1, 7326 }, { 0x45B2, 7316 }, { 0x45B3, 7266 }, { 0x45B4, 7321 }, { 0x45B5, 7271 }, { 0x45B6, 7336 }, { 0x45B7, 7341 }, { 0x45B8, 7346 }, { 0x45B9, 104425 }, { 0x45BA, 104392 }, { 0x45BB, 104428 }, { 0x45BC, 104431 }, { 0x45BD, 104455 }, { 0x45BE, 104452 }, { 0x45BF, 104371 }, { 0x45C0, 104386 }, { 0x45C1, 104365 }, { 0x45C2, 104449 }, { 0x45C3, 104467 }, { 0x45C4, 104434 }, { 0x45C5, 104458 }, { 0x45C6, 104395 }, { 0x45C7, 104410 }, { 0x45C8, 104419 }, { 0x45C9, 104398 }, { 0x45CA, 104413 }, { 0x45CB, 104437 }, { 0x45CC, 104461 }, { 0x45CD, 104470 }, { 0x45CE, 104473 }, { 0x45CF, 104377 }, { 0x45D0, 104380 }, { 0x45D1, 104464 }, { 0x45D2, 104389 }, { 0x45D3, 104422 }, { 0x45D4, 104374 }, { 0x45D5, 104368 }, { 0x45D6, 104443 }, { 0x45D7, 104401 }, { 0x45D8, 104416 }, { 0x45D9, 104440 }, { 0x45DA, 104404 }, { 0x45DB, 104407 }, { 0x45DC, 104446 }, { 0x45DD, 104383 }, { 0x45DE, 104520 }, { 0x45DF, 104524 }, { 0x45E0, 104476 }, { 0x45E1, 104486 }, { 0x45E2, 104483 }, { 0x45E3, 104489 }, { 0x45E4, 104479 }, { 0x45E5, 104508 }, { 0x45E6, 104517 }, { 0x45E7, 104511 }, { 0x45E8, 104495 }, { 0x45E9, 104492 }, { 0x45EA, 104500 }, { 0x45EB, 104504 }, { 0x45EC, 57833 }, { 0x45ED, 57848 }, { 0x45EE, 57857 }, { 0x45EF, 57932 }, { 0x45F0, 57854 }, { 0x45F1, 57929 }, { 0x45F2, 57851 }, { 0x45F3, 57935 }, { 0x45F4, 57836 }, { 0x45F5, 57869 }, { 0x45F6, 57842 }, { 0x45F7, 57899 }, { 0x45F8, 57839 }, { 0x45F9, 57881 }, { 0x45FA, 57845 }, { 0x45FB, 57914 }, { 0x45FC, 57887 }, { 0x45FD, 57920 }, { 0x45FE, 57974 }, { 0x45FF, 57971 }, { 0x4600, 57875 }, { 0x4601, 57944 }, { 0x4602, 57947 }, { 0x4603, 57863 }, { 0x4604, 57884 }, { 0x4605, 57911 }, { 0x4606, 57965 }, { 0x4607, 57866 }, { 0x4608, 57941 }, { 0x4609, 57968 }, { 0x460A, 57902 }, { 0x460B, 57872 }, { 0x460C, 57860 }, { 0x460D, 57938 }, { 0x460E, 57953 }, { 0x460F, 57986 }, { 0x4610, 57983 }, { 0x4611, 57896 }, { 0x4612, 57959 }, { 0x4613, 57956 }, { 0x4614, 57893 }, { 0x4615, 57950 }, { 0x4616, 57977 }, { 0x4617, 57923 }, { 0x4618, 57917 }, { 0x4619, 57905 }, { 0x461A, 57890 }, { 0x461B, 57908 }, { 0x461C, 57926 }, { 0x461D, 57962 }, { 0x461E, 57980 }, { 0x461F, 57989 }, { 0x4620, 57992 }, { 0x4621, 57878 }, { 0x4622, 57995 }, { 0x4623, 15260 }, { 0x4624, 34371 }, { 0x4625, 23970 }, { 0x4626, 23953 }, { 0x4627, 23977 }, { 0x4628, 23960 }, { 0x4629, 115222 }, { 0x462A, 115190 }, { 0x462B, 115226 }, { 0x462C, 115238 }, { 0x462D, 115162 }, { 0x462E, 115182 }, { 0x462F, 115234 }, { 0x4630, 115194 }, { 0x4631, 115214 }, { 0x4632, 115218 }, { 0x4633, 115198 }, { 0x4634, 115242 }, { 0x4635, 115170 }, { 0x4636, 115174 }, { 0x4637, 115246 }, { 0x4638, 115186 }, { 0x4639, 115166 }, { 0x463A, 115230 }, { 0x463B, 115202 }, { 0x463C, 115206 }, { 0x463D, 115210 }, { 0x463E, 115178 }, { 0x463F, 115250 }, { 0x4640, 115268 }, { 0x4641, 115276 }, { 0x4642, 115272 }, { 0x4643, 115264 }, { 0x4644, 115280 }, { 0x4645, 115254 }, { 0x4646, 115259 }, { 0x4647, 115092 }, { 0x4648, 115068 }, { 0x4649, 115096 }, { 0x464A, 115108 }, { 0x464B, 115052 }, { 0x464C, 115124 }, { 0x464D, 115104 }, { 0x464E, 115072 }, { 0x464F, 115084 }, { 0x4650, 115088 }, { 0x4651, 115076 }, { 0x4652, 115112 }, { 0x4653, 115120 }, { 0x4654, 115060 }, { 0x4655, 115116 }, { 0x4656, 115056 }, { 0x4657, 115100 }, { 0x4658, 115080 }, { 0x4659, 115064 }, { 0x465A, 115128 }, { 0x465B, 115146 }, { 0x465C, 115154 }, { 0x465D, 115150 }, { 0x465E, 115142 }, { 0x465F, 115158 }, { 0x4660, 115132 }, { 0x4661, 115137 }, { 0x4662, 65073 }, { 0x4663, 65053 }, { 0x4664, 65077 }, { 0x4665, 65089 }, { 0x4666, 65037 }, { 0x4667, 65105 }, { 0x4668, 65085 }, { 0x4669, 65057 }, { 0x466A, 65069 }, { 0x466B, 65061 }, { 0x466C, 65093 }, { 0x466D, 65101 }, { 0x466E, 65045 }, { 0x466F, 65097 }, { 0x4670, 65041 }, { 0x4671, 65081 }, { 0x4672, 65065 }, { 0x4673, 65049 }, { 0x4674, 65143 }, { 0x4675, 65138 }, { 0x4676, 65031 }, { 0x4677, 65025 }, { 0x4678, 65109 }, { 0x4679, 65122 }, { 0x467A, 65130 }, { 0x467B, 65126 }, { 0x467C, 65118 }, { 0x467D, 65134 }, { 0x467E, 65113 }, { 0x467F, 7807 }, { 0x4680, 8017 }, { 0x4681, 8042 }, { 0x4682, 7812 }, { 0x4683, 8027 }, { 0x4684, 8022 }, { 0x4685, 7817 }, { 0x4686, 7902 }, { 0x4687, 8092 }, { 0x4688, 7822 }, { 0x4689, 8032 }, { 0x468A, 7922 }, { 0x468B, 8102 }, { 0x468C, 7832 }, { 0x468D, 8047 }, { 0x468E, 7932 }, { 0x468F, 8107 }, { 0x4690, 7827 }, { 0x4691, 8037 }, { 0x4692, 7927 }, { 0x4693, 7887 }, { 0x4694, 8082 }, { 0x4695, 7867 }, { 0x4696, 8072 }, { 0x4697, 7967 }, { 0x4698, 8127 }, { 0x4699, 7937 }, { 0x469A, 8112 }, { 0x469B, 8007 }, { 0x469C, 8162 }, { 0x469D, 7837 }, { 0x469E, 8052 }, { 0x469F, 7942 }, { 0x46A0, 7977 }, { 0x46A1, 7877 }, { 0x46A2, 7842 }, { 0x46A3, 7947 }, { 0x46A4, 8117 }, { 0x46A5, 7992 }, { 0x46A6, 8147 }, { 0x46A7, 7982 }, { 0x46A8, 8142 }, { 0x46A9, 7997 }, { 0x46AA, 8152 }, { 0x46AB, 8132 }, { 0x46AC, 7987 }, { 0x46AD, 8167 }, { 0x46AE, 7882 }, { 0x46AF, 7907 }, { 0x46B0, 7892 }, { 0x46B1, 7872 }, { 0x46B2, 8077 }, { 0x46B3, 7847 }, { 0x46B4, 8057 }, { 0x46B5, 7897 }, { 0x46B6, 8087 }, { 0x46B7, 7912 }, { 0x46B8, 8097 }, { 0x46B9, 7852 }, { 0x46BA, 8062 }, { 0x46BB, 7952 }, { 0x46BC, 7857 }, { 0x46BD, 7957 }, { 0x46BE, 7972 }, { 0x46BF, 8137 }, { 0x46C0, 8002 }, { 0x46C1, 8157 }, { 0x46C2, 7862 }, { 0x46C3, 8067 }, { 0x46C4, 7962 }, { 0x46C5, 8122 }, { 0x46C6, 7917 }, { 0x46C7, 8012 }, { 0x46C8, 8663 }, { 0x46C9, 8688 }, { 0x46CA, 8698 }, { 0x46CB, 8808 }, { 0x46CC, 8703 }, { 0x46CD, 8843 }, { 0x46CE, 8823 }, { 0x46CF, 8708 }, { 0x46D0, 8813 }, { 0x46D1, 8668 }, { 0x46D2, 8883 }, { 0x46D3, 8713 }, { 0x46D4, 8718 }, { 0x46D5, 8723 }, { 0x46D6, 8828 }, { 0x46D7, 8728 }, { 0x46D8, 8673 }, { 0x46D9, 8788 }, { 0x46DA, 8733 }, { 0x46DB, 8738 }, { 0x46DC, 8693 }, { 0x46DD, 8878 }, { 0x46DE, 8743 }, { 0x46DF, 8833 }, { 0x46E0, 8748 }, { 0x46E1, 8753 }, { 0x46E2, 8853 }, { 0x46E3, 8678 }, { 0x46E4, 8793 }, { 0x46E5, 8913 }, { 0x46E6, 8895 }, { 0x46E7, 8873 }, { 0x46E8, 8758 }, { 0x46E9, 8838 }, { 0x46EA, 8763 }, { 0x46EB, 8889 }, { 0x46EC, 8768 }, { 0x46ED, 8858 }, { 0x46EE, 8773 }, { 0x46EF, 8848 }, { 0x46F0, 8863 }, { 0x46F1, 8818 }, { 0x46F2, 8683 }, { 0x46F3, 8803 }, { 0x46F4, 8919 }, { 0x46F5, 8901 }, { 0x46F6, 8778 }, { 0x46F7, 8783 }, { 0x46F8, 8868 }, { 0x46F9, 8907 }, { 0x46FA, 8798 }, { 0x46FB, 8375 }, { 0x46FC, 8400 }, { 0x46FD, 8410 }, { 0x46FE, 8520 }, { 0x46FF, 8415 }, { 0x4700, 8555 }, { 0x4701, 8535 }, { 0x4702, 8420 }, { 0x4703, 8525 }, { 0x4704, 8380 }, { 0x4705, 8595 }, { 0x4706, 8425 }, { 0x4707, 8430 }, { 0x4708, 8435 }, { 0x4709, 8540 }, { 0x470A, 8440 }, { 0x470B, 8385 }, { 0x470C, 8500 }, { 0x470D, 8445 }, { 0x470E, 8450 }, { 0x470F, 8405 }, { 0x4710, 8590 }, { 0x4711, 8455 }, { 0x4712, 8545 }, { 0x4713, 8460 }, { 0x4714, 8465 }, { 0x4715, 8565 }, { 0x4716, 8390 }, { 0x4717, 8505 }, { 0x4718, 8625 }, { 0x4719, 8607 }, { 0x471A, 8585 }, { 0x471B, 8470 }, { 0x471C, 8550 }, { 0x471D, 8475 }, { 0x471E, 8601 }, { 0x471F, 8480 }, { 0x4720, 8570 }, { 0x4721, 8485 }, { 0x4722, 8560 }, { 0x4723, 8575 }, { 0x4724, 8530 }, { 0x4725, 8395 }, { 0x4726, 8515 }, { 0x4727, 8631 }, { 0x4728, 8613 }, { 0x4729, 8490 }, { 0x472A, 8495 }, { 0x472B, 8580 }, { 0x472C, 8619 }, { 0x472D, 8510 }, { 0x472E, 8637 }, { 0x472F, 8655 }, { 0x4730, 8651 }, { 0x4731, 8659 }, { 0x4732, 8641 }, { 0x4733, 8646 }, { 0x4734, 14631 }, { 0x4735, 14637 }, { 0x4736, 14655 }, { 0x4737, 14643 }, { 0x4738, 14640 }, { 0x4739, 14634 }, { 0x473A, 14652 }, { 0x473B, 14649 }, { 0x473C, 14646 }, { 0x473D, 14666 }, { 0x473E, 14715 }, { 0x473F, 14712 }, { 0x4740, 14692 }, { 0x4741, 14689 }, { 0x4742, 14699 }, { 0x4743, 14718 }, { 0x4744, 14706 }, { 0x4745, 14709 }, { 0x4746, 14658 }, { 0x4747, 14669 }, { 0x4748, 14702 }, { 0x4749, 14677 }, { 0x474A, 14673 }, { 0x474B, 14662 }, { 0x474C, 14695 }, { 0x474D, 14685 }, { 0x474E, 14681 }, { 0x474F, 14721 }, { 0x4750, 14729 }, { 0x4751, 14725 }, { 0x4752, 14733 }, { 0x4753, 44010 }, { 0x4754, 44007 }, { 0x4755, 44004 }, { 0x4756, 44013 }, { 0x4757, 44016 }, { 0x4758, 44115 }, { 0x4759, 44130 }, { 0x475A, 44121 }, { 0x475B, 44154 }, { 0x475C, 44127 }, { 0x475D, 44184 }, { 0x475E, 44266 }, { 0x475F, 44274 }, { 0x4760, 44262 }, { 0x4761, 44270 }, { 0x4762, 44118 }, { 0x4763, 44133 }, { 0x4764, 44124 }, { 0x4765, 44136 }, { 0x4766, 44160 }, { 0x4767, 44211 }, { 0x4768, 44148 }, { 0x4769, 44205 }, { 0x476A, 44217 }, { 0x476B, 44142 }, { 0x476C, 44196 }, { 0x476D, 44157 }, { 0x476E, 44208 }, { 0x476F, 44223 }, { 0x4770, 44253 }, { 0x4771, 44259 }, { 0x4772, 44199 }, { 0x4773, 44256 }, { 0x4774, 44220 }, { 0x4775, 44181 }, { 0x4776, 44250 }, { 0x4777, 44145 }, { 0x4778, 44202 }, { 0x4779, 44169 }, { 0x477A, 44172 }, { 0x477B, 44241 }, { 0x477C, 44139 }, { 0x477D, 44193 }, { 0x477E, 44166 }, { 0x477F, 44190 }, { 0x4780, 44175 }, { 0x4781, 44163 }, { 0x4782, 44187 }, { 0x4783, 44244 }, { 0x4784, 44247 }, { 0x4785, 44178 }, { 0x4786, 44151 }, { 0x4787, 44214 }, { 0x4788, 44231 }, { 0x4789, 44226 }, { 0x478A, 44236 }, { 0x478B, 44067 }, { 0x478C, 44107 }, { 0x478D, 44055 }, { 0x478E, 44079 }, { 0x478F, 44063 }, { 0x4790, 44083 }, { 0x4791, 44092 }, { 0x4792, 44102 }, { 0x4793, 44087 }, { 0x4794, 44097 }, { 0x4795, 44051 }, { 0x4796, 44071 }, { 0x4797, 44059 }, { 0x4798, 44075 }, { 0x4799, 44343 }, { 0x479A, 44019 }, { 0x479B, 44112 }, { 0x479C, 44345 }, { 0x479D, 44354 }, { 0x479E, 44348 }, { 0x479F, 44358 }, { 0x47A0, 44351 }, { 0x47A1, 44278 }, { 0x47A2, 44295 }, { 0x47A3, 44322 }, { 0x47A4, 44301 }, { 0x47A5, 44298 }, { 0x47A6, 44289 }, { 0x47A7, 44316 }, { 0x47A8, 44307 }, { 0x47A9, 44304 }, { 0x47AA, 44292 }, { 0x47AB, 44337 }, { 0x47AC, 44334 }, { 0x47AD, 44313 }, { 0x47AE, 44310 }, { 0x47AF, 44319 }, { 0x47B0, 44340 }, { 0x47B1, 44325 }, { 0x47B2, 44331 }, { 0x47B3, 44281 }, { 0x47B4, 44285 }, { 0x47B5, 44039 }, { 0x47B6, 44021 }, { 0x47B7, 44027 }, { 0x47B8, 44048 }, { 0x47B9, 44033 }, { 0x47BA, 44030 }, { 0x47BB, 44024 }, { 0x47BC, 44045 }, { 0x47BD, 44042 }, { 0x47BE, 44036 }, { 0x47BF, 44328 }, { 0x47C0, 48443 }, { 0x47C1, 48440 }, { 0x47C2, 48437 }, { 0x47C3, 48491 }, { 0x47C4, 48506 }, { 0x47C5, 48497 }, { 0x47C6, 48530 }, { 0x47C7, 48503 }, { 0x47C8, 48560 }, { 0x47C9, 48494 }, { 0x47CA, 48509 }, { 0x47CB, 48500 }, { 0x47CC, 48512 }, { 0x47CD, 48536 }, { 0x47CE, 48587 }, { 0x47CF, 48524 }, { 0x47D0, 48581 }, { 0x47D1, 48590 }, { 0x47D2, 48518 }, { 0x47D3, 48572 }, { 0x47D4, 48533 }, { 0x47D5, 48584 }, { 0x47D6, 48596 }, { 0x47D7, 48614 }, { 0x47D8, 48620 }, { 0x47D9, 48575 }, { 0x47DA, 48623 }, { 0x47DB, 48617 }, { 0x47DC, 48602 }, { 0x47DD, 48593 }, { 0x47DE, 48557 }, { 0x47DF, 48611 }, { 0x47E0, 48521 }, { 0x47E1, 48578 }, { 0x47E2, 48545 }, { 0x47E3, 48548 }, { 0x47E4, 48599 }, { 0x47E5, 48515 }, { 0x47E6, 48569 }, { 0x47E7, 48542 }, { 0x47E8, 48566 }, { 0x47E9, 48551 }, { 0x47EA, 48539 }, { 0x47EB, 48563 }, { 0x47EC, 48605 }, { 0x47ED, 48608 }, { 0x47EE, 48554 }, { 0x47EF, 48527 }, { 0x47F0, 48464 }, { 0x47F1, 48452 }, { 0x47F2, 48476 }, { 0x47F3, 48460 }, { 0x47F4, 48480 }, { 0x47F5, 48448 }, { 0x47F6, 48468 }, { 0x47F7, 48456 }, { 0x47F8, 48472 }, { 0x47F9, 48434 }, { 0x47FA, 48431 }, { 0x47FB, 48635 }, { 0x47FC, 48632 }, { 0x47FD, 48626 }, { 0x47FE, 48629 }, { 0x47FF, 48487 }, { 0x4800, 48446 }, { 0x4801, 48484 }, { 0x4802, 14884 }, { 0x4803, 14888 }, { 0x4804, 14828 }, { 0x4805, 14832 }, { 0x4806, 14836 }, { 0x4807, 14844 }, { 0x4808, 14868 }, { 0x4809, 14900 }, { 0x480A, 14860 }, { 0x480B, 14872 }, { 0x480C, 14892 }, { 0x480D, 14876 }, { 0x480E, 14896 }, { 0x480F, 14880 }, { 0x4810, 14848 }, { 0x4811, 14856 }, { 0x4812, 14852 }, { 0x4813, 14904 }, { 0x4814, 14808 }, { 0x4815, 14840 }, { 0x4816, 14816 }, { 0x4817, 14824 }, { 0x4818, 14820 }, { 0x4819, 14812 }, { 0x481A, 14864 }, { 0x481B, 14792 }, { 0x481C, 14768 }, { 0x481D, 14776 }, { 0x481E, 14804 }, { 0x481F, 14784 }, { 0x4820, 14780 }, { 0x4821, 14772 }, { 0x4822, 14800 }, { 0x4823, 14796 }, { 0x4824, 14788 }, { 0x4825, 44553 }, { 0x4826, 44550 }, { 0x4827, 44547 }, { 0x4828, 44640 }, { 0x4829, 44634 }, { 0x482A, 44637 }, { 0x482B, 44631 }, { 0x482C, 44661 }, { 0x482D, 44709 }, { 0x482E, 44652 }, { 0x482F, 44703 }, { 0x4830, 44712 }, { 0x4831, 44646 }, { 0x4832, 44694 }, { 0x4833, 44658 }, { 0x4834, 44706 }, { 0x4835, 44718 }, { 0x4836, 44727 }, { 0x4837, 44736 }, { 0x4838, 44697 }, { 0x4839, 44733 }, { 0x483A, 44715 }, { 0x483B, 44682 }, { 0x483C, 44724 }, { 0x483D, 44649 }, { 0x483E, 44700 }, { 0x483F, 44670 }, { 0x4840, 44673 }, { 0x4841, 44721 }, { 0x4842, 44643 }, { 0x4843, 44691 }, { 0x4844, 44667 }, { 0x4845, 44730 }, { 0x4846, 44688 }, { 0x4847, 44676 }, { 0x4848, 44664 }, { 0x4849, 44685 }, { 0x484A, 44679 }, { 0x484B, 44655 }, { 0x484C, 44588 }, { 0x484D, 44596 }, { 0x484E, 44616 }, { 0x484F, 44604 }, { 0x4850, 44624 }, { 0x4851, 44592 }, { 0x4852, 44608 }, { 0x4853, 44600 }, { 0x4854, 44612 }, { 0x4855, 44620 }, { 0x4856, 44541 }, { 0x4857, 44544 }, { 0x4858, 44739 }, { 0x4859, 44741 }, { 0x485A, 44576 }, { 0x485B, 44558 }, { 0x485C, 44564 }, { 0x485D, 44585 }, { 0x485E, 44570 }, { 0x485F, 44567 }, { 0x4860, 44561 }, { 0x4861, 44582 }, { 0x4862, 44579 }, { 0x4863, 44573 }, { 0x4864, 44743 }, { 0x4865, 44556 }, { 0x4866, 44628 }, { 0x4867, 44746 }, { 0x4868, 83106 }, { 0x4869, 83112 }, { 0x486A, 83118 }, { 0x486B, 83109 }, { 0x486C, 83115 }, { 0x486D, 83139 }, { 0x486E, 83184 }, { 0x486F, 83130 }, { 0x4870, 83178 }, { 0x4871, 83124 }, { 0x4872, 83169 }, { 0x4873, 83136 }, { 0x4874, 83181 }, { 0x4875, 83190 }, { 0x4876, 83202 }, { 0x4877, 83208 }, { 0x4878, 83172 }, { 0x4879, 83205 }, { 0x487A, 83187 }, { 0x487B, 83160 }, { 0x487C, 83199 }, { 0x487D, 83127 }, { 0x487E, 83175 }, { 0x487F, 83148 }, { 0x4880, 83151 }, { 0x4881, 83193 }, { 0x4882, 83121 }, { 0x4883, 83166 }, { 0x4884, 83145 }, { 0x4885, 83154 }, { 0x4886, 83142 }, { 0x4887, 83163 }, { 0x4888, 83157 }, { 0x4889, 83133 }, { 0x488A, 83196 }, { 0x488B, 83103 }, { 0x488C, 83217 }, { 0x488D, 83211 }, { 0x488E, 83214 }, { 0x488F, 65268 }, { 0x4890, 65262 }, { 0x4891, 65259 }, { 0x4892, 65380 }, { 0x4893, 65395 }, { 0x4894, 65386 }, { 0x4895, 65419 }, { 0x4896, 65392 }, { 0x4897, 65449 }, { 0x4898, 65516 }, { 0x4899, 65524 }, { 0x489A, 65512 }, { 0x489B, 65520 }, { 0x489C, 65383 }, { 0x489D, 65398 }, { 0x489E, 65389 }, { 0x489F, 65401 }, { 0x48A0, 65425 }, { 0x48A1, 65476 }, { 0x48A2, 65413 }, { 0x48A3, 65470 }, { 0x48A4, 65482 }, { 0x48A5, 65407 }, { 0x48A6, 65461 }, { 0x48A7, 65422 }, { 0x48A8, 65473 }, { 0x48A9, 65488 }, { 0x48AA, 65503 }, { 0x48AB, 65509 }, { 0x48AC, 65464 }, { 0x48AD, 65506 }, { 0x48AE, 65485 }, { 0x48AF, 65446 }, { 0x48B0, 65500 }, { 0x48B1, 65410 }, { 0x48B2, 65467 }, { 0x48B3, 65434 }, { 0x48B4, 65437 }, { 0x48B5, 65491 }, { 0x48B6, 65404 }, { 0x48B7, 65458 }, { 0x48B8, 65431 }, { 0x48B9, 65455 }, { 0x48BA, 65440 }, { 0x48BB, 65428 }, { 0x48BC, 65479 }, { 0x48BD, 65452 }, { 0x48BE, 65494 }, { 0x48BF, 65497 }, { 0x48C0, 65443 }, { 0x48C1, 65416 }, { 0x48C2, 65333 }, { 0x48C3, 65321 }, { 0x48C4, 65345 }, { 0x48C5, 65329 }, { 0x48C6, 65349 }, { 0x48C7, 65358 }, { 0x48C8, 65368 }, { 0x48C9, 65353 }, { 0x48CA, 65363 }, { 0x48CB, 65317 }, { 0x48CC, 65337 }, { 0x48CD, 65325 }, { 0x48CE, 65341 }, { 0x48CF, 65253 }, { 0x48D0, 65265 }, { 0x48D1, 65271 }, { 0x48D2, 65274 }, { 0x48D3, 65246 }, { 0x48D4, 65277 }, { 0x48D5, 65377 }, { 0x48D6, 65541 }, { 0x48D7, 65537 }, { 0x48D8, 65528 }, { 0x48D9, 65250 }, { 0x48DA, 65373 }, { 0x48DB, 65309 }, { 0x48DC, 65314 }, { 0x48DD, 65297 }, { 0x48DE, 65279 }, { 0x48DF, 65285 }, { 0x48E0, 65306 }, { 0x48E1, 65291 }, { 0x48E2, 65288 }, { 0x48E3, 65282 }, { 0x48E4, 65303 }, { 0x48E5, 65300 }, { 0x48E6, 65294 }, { 0x48E7, 65248 }, { 0x48E8, 65256 }, { 0x48E9, 65539 }, { 0x48EA, 65544 }, { 0x48EB, 65531 }, { 0x48EC, 65534 }, { 0x48ED, 66425 }, { 0x48EE, 66433 }, { 0x48EF, 66457 }, { 0x48F0, 66441 }, { 0x48F1, 66437 }, { 0x48F2, 66429 }, { 0x48F3, 66453 }, { 0x48F4, 66449 }, { 0x48F5, 66445 }, { 0x48F6, 66471 }, { 0x48F7, 66499 }, { 0x48F8, 66495 }, { 0x48F9, 66479 }, { 0x48FA, 66475 }, { 0x48FB, 66483 }, { 0x48FC, 66503 }, { 0x48FD, 66487 }, { 0x48FE, 66491 }, { 0x48FF, 66461 }, { 0x4900, 66466 }, { 0x4901, 49365 }, { 0x4902, 49380 }, { 0x4903, 49371 }, { 0x4904, 49377 }, { 0x4905, 49368 }, { 0x4906, 49383 }, { 0x4907, 49374 }, { 0x4908, 49386 }, { 0x4909, 49407 }, { 0x490A, 49461 }, { 0x490B, 49398 }, { 0x490C, 49452 }, { 0x490D, 49455 }, { 0x490E, 49467 }, { 0x490F, 49392 }, { 0x4910, 49443 }, { 0x4911, 49404 }, { 0x4912, 49458 }, { 0x4913, 49473 }, { 0x4914, 49482 }, { 0x4915, 49491 }, { 0x4916, 49446 }, { 0x4917, 49488 }, { 0x4918, 49470 }, { 0x4919, 49428 }, { 0x491A, 49479 }, { 0x491B, 49395 }, { 0x491C, 49485 }, { 0x491D, 49449 }, { 0x491E, 49416 }, { 0x491F, 49419 }, { 0x4920, 49476 }, { 0x4921, 49389 }, { 0x4922, 49437 }, { 0x4923, 49440 }, { 0x4924, 49413 }, { 0x4925, 49434 }, { 0x4926, 49422 }, { 0x4927, 49410 }, { 0x4928, 49431 }, { 0x4929, 49425 }, { 0x492A, 49401 }, { 0x492B, 49464 }, { 0x492C, 49342 }, { 0x492D, 49330 }, { 0x492E, 49354 }, { 0x492F, 49338 }, { 0x4930, 49326 }, { 0x4931, 49346 }, { 0x4932, 49334 }, { 0x4933, 49350 }, { 0x4934, 49318 }, { 0x4935, 49315 }, { 0x4936, 49306 }, { 0x4937, 49312 }, { 0x4938, 49324 }, { 0x4939, 49358 }, { 0x493A, 49321 }, { 0x493B, 49494 }, { 0x493C, 49361 }, { 0x493D, 49497 }, { 0x493E, 49309 }, { 0x493F, 62345 }, { 0x4940, 62351 }, { 0x4941, 62354 }, { 0x4942, 62348 }, { 0x4943, 62375 }, { 0x4944, 62423 }, { 0x4945, 62366 }, { 0x4946, 62417 }, { 0x4947, 62360 }, { 0x4948, 62408 }, { 0x4949, 62372 }, { 0x494A, 62420 }, { 0x494B, 62429 }, { 0x494C, 62444 }, { 0x494D, 62453 }, { 0x494E, 62411 }, { 0x494F, 62447 }, { 0x4950, 62450 }, { 0x4951, 62426 }, { 0x4952, 62396 }, { 0x4953, 62441 }, { 0x4954, 62363 }, { 0x4955, 62414 }, { 0x4956, 62384 }, { 0x4957, 62387 }, { 0x4958, 62432 }, { 0x4959, 62357 }, { 0x495A, 62405 }, { 0x495B, 62381 }, { 0x495C, 62402 }, { 0x495D, 62390 }, { 0x495E, 62378 }, { 0x495F, 62399 }, { 0x4960, 62393 }, { 0x4961, 62369 }, { 0x4962, 62438 }, { 0x4963, 62435 }, { 0x4964, 62456 }, { 0x4965, 99609 }, { 0x4966, 99624 }, { 0x4967, 99615 }, { 0x4968, 99648 }, { 0x4969, 99621 }, { 0x496A, 99678 }, { 0x496B, 99612 }, { 0x496C, 99627 }, { 0x496D, 99618 }, { 0x496E, 99630 }, { 0x496F, 99654 }, { 0x4970, 99714 }, { 0x4971, 99642 }, { 0x4972, 99702 }, { 0x4973, 99705 }, { 0x4974, 99717 }, { 0x4975, 99636 }, { 0x4976, 99693 }, { 0x4977, 99651 }, { 0x4978, 99711 }, { 0x4979, 99708 }, { 0x497A, 99723 }, { 0x497B, 99738 }, { 0x497C, 99747 }, { 0x497D, 99696 }, { 0x497E, 99741 }, { 0x497F, 99729 }, { 0x4980, 99744 }, { 0x4981, 99720 }, { 0x4982, 99675 }, { 0x4983, 99735 }, { 0x4984, 99639 }, { 0x4985, 99699 }, { 0x4986, 99663 }, { 0x4987, 99666 }, { 0x4988, 99726 }, { 0x4989, 99633 }, { 0x498A, 99687 }, { 0x498B, 99690 }, { 0x498C, 99660 }, { 0x498D, 99684 }, { 0x498E, 99669 }, { 0x498F, 99657 }, { 0x4990, 99681 }, { 0x4991, 99732 }, { 0x4992, 99672 }, { 0x4993, 99645 }, { 0x4994, 99540 }, { 0x4995, 99589 }, { 0x4996, 99577 }, { 0x4997, 99601 }, { 0x4998, 99585 }, { 0x4999, 99605 }, { 0x499A, 99573 }, { 0x499B, 99593 }, { 0x499C, 99581 }, { 0x499D, 99597 }, { 0x499E, 99534 }, { 0x499F, 99537 }, { 0x49A0, 99561 }, { 0x49A1, 99543 }, { 0x49A2, 99549 }, { 0x49A3, 99570 }, { 0x49A4, 99555 }, { 0x49A5, 99552 }, { 0x49A6, 99546 }, { 0x49A7, 99567 }, { 0x49A8, 99564 }, { 0x49A9, 99558 }, { 0x49AA, 61115 }, { 0x49AB, 61120 }, { 0x49AC, 61109 }, { 0x49AD, 61106 }, { 0x49AE, 61179 }, { 0x49AF, 61188 }, { 0x49B0, 61182 }, { 0x49B1, 61215 }, { 0x49B2, 61185 }, { 0x49B3, 61248 }, { 0x49B4, 61324 }, { 0x49B5, 61320 }, { 0x49B6, 61206 }, { 0x49B7, 61191 }, { 0x49B8, 61233 }, { 0x49B9, 61194 }, { 0x49BA, 61221 }, { 0x49BB, 61275 }, { 0x49BC, 61209 }, { 0x49BD, 61269 }, { 0x49BE, 61281 }, { 0x49BF, 61200 }, { 0x49C0, 61260 }, { 0x49C1, 61218 }, { 0x49C2, 61272 }, { 0x49C3, 61287 }, { 0x49C4, 61302 }, { 0x49C5, 61308 }, { 0x49C6, 61263 }, { 0x49C7, 61305 }, { 0x49C8, 61284 }, { 0x49C9, 61245 }, { 0x49CA, 61299 }, { 0x49CB, 61203 }, { 0x49CC, 61266 }, { 0x49CD, 61230 }, { 0x49CE, 61236 }, { 0x49CF, 61290 }, { 0x49D0, 61197 }, { 0x49D1, 61257 }, { 0x49D2, 61227 }, { 0x49D3, 61254 }, { 0x49D4, 61239 }, { 0x49D5, 61224 }, { 0x49D6, 61278 }, { 0x49D7, 61251 }, { 0x49D8, 61293 }, { 0x49D9, 61296 }, { 0x49DA, 61242 }, { 0x49DB, 61212 }, { 0x49DC, 61097 }, { 0x49DD, 61112 }, { 0x49DE, 61131 }, { 0x49DF, 61123 }, { 0x49E0, 61147 }, { 0x49E1, 61127 }, { 0x49E2, 61155 }, { 0x49E3, 61164 }, { 0x49E4, 61174 }, { 0x49E5, 61143 }, { 0x49E6, 61135 }, { 0x49E7, 61151 }, { 0x49E8, 61139 }, { 0x49E9, 61103 }, { 0x49EA, 61095 }, { 0x49EB, 61091 }, { 0x49EC, 61100 }, { 0x49ED, 61316 }, { 0x49EE, 61311 }, { 0x49EF, 61332 }, { 0x49F0, 61328 }, { 0x49F1, 61159 }, { 0x49F2, 61169 }, { 0x49F3, 91364 }, { 0x49F4, 91344 }, { 0x49F5, 91352 }, { 0x49F6, 91368 }, { 0x49F7, 91360 }, { 0x49F8, 91356 }, { 0x49F9, 91348 }, { 0x49FA, 91372 }, { 0x49FB, 91376 }, { 0x49FC, 91380 }, { 0x49FD, 91388 }, { 0x49FE, 91384 }, { 0x49FF, 14296 }, { 0x4A00, 14311 }, { 0x4A01, 14302 }, { 0x4A02, 14335 }, { 0x4A03, 14308 }, { 0x4A04, 14365 }, { 0x4A05, 14447 }, { 0x4A06, 14455 }, { 0x4A07, 14443 }, { 0x4A08, 14451 }, { 0x4A09, 14299 }, { 0x4A0A, 14314 }, { 0x4A0B, 14305 }, { 0x4A0C, 14317 }, { 0x4A0D, 14341 }, { 0x4A0E, 14392 }, { 0x4A0F, 14329 }, { 0x4A10, 14386 }, { 0x4A11, 14401 }, { 0x4A12, 14434 }, { 0x4A13, 14323 }, { 0x4A14, 14377 }, { 0x4A15, 14338 }, { 0x4A16, 14389 }, { 0x4A17, 14410 }, { 0x4A18, 14437 }, { 0x4A19, 14428 }, { 0x4A1A, 14440 }, { 0x4A1B, 14380 }, { 0x4A1C, 14431 }, { 0x4A1D, 14407 }, { 0x4A1E, 14362 }, { 0x4A1F, 14425 }, { 0x4A20, 14326 }, { 0x4A21, 14383 }, { 0x4A22, 14350 }, { 0x4A23, 14404 }, { 0x4A24, 14353 }, { 0x4A25, 14413 }, { 0x4A26, 14320 }, { 0x4A27, 14374 }, { 0x4A28, 14347 }, { 0x4A29, 14398 }, { 0x4A2A, 14371 }, { 0x4A2B, 14356 }, { 0x4A2C, 14416 }, { 0x4A2D, 14344 }, { 0x4A2E, 14395 }, { 0x4A2F, 14368 }, { 0x4A30, 14419 }, { 0x4A31, 14422 }, { 0x4A32, 14359 }, { 0x4A33, 14332 }, { 0x4A34, 14253 }, { 0x4A35, 14241 }, { 0x4A36, 14265 }, { 0x4A37, 14249 }, { 0x4A38, 14269 }, { 0x4A39, 14278 }, { 0x4A3A, 14288 }, { 0x4A3B, 14273 }, { 0x4A3C, 14283 }, { 0x4A3D, 14237 }, { 0x4A3E, 14257 }, { 0x4A3F, 14245 }, { 0x4A40, 14261 }, { 0x4A41, 14188 }, { 0x4A42, 14200 }, { 0x4A43, 14194 }, { 0x4A44, 14191 }, { 0x4A45, 14185 }, { 0x4A46, 14197 }, { 0x4A47, 14181 }, { 0x4A48, 14176 }, { 0x4A49, 14459 }, { 0x4A4A, 14205 }, { 0x4A4B, 14293 }, { 0x4A4C, 14203 }, { 0x4A4D, 14178 }, { 0x4A4E, 14467 }, { 0x4A4F, 14225 }, { 0x4A50, 14207 }, { 0x4A51, 14213 }, { 0x4A52, 14234 }, { 0x4A53, 14219 }, { 0x4A54, 14216 }, { 0x4A55, 14210 }, { 0x4A56, 14231 }, { 0x4A57, 14228 }, { 0x4A58, 14222 }, { 0x4A59, 14464 }, { 0x4A5A, 14461 }, { 0x4A5B, 68104 }, { 0x4A5C, 68222 }, { 0x4A5D, 68237 }, { 0x4A5E, 68228 }, { 0x4A5F, 68261 }, { 0x4A60, 68234 }, { 0x4A61, 68291 }, { 0x4A62, 68355 }, { 0x4A63, 68363 }, { 0x4A64, 68351 }, { 0x4A65, 68359 }, { 0x4A66, 68225 }, { 0x4A67, 68240 }, { 0x4A68, 68231 }, { 0x4A69, 68243 }, { 0x4A6A, 68267 }, { 0x4A6B, 68318 }, { 0x4A6C, 68255 }, { 0x4A6D, 68312 }, { 0x4A6E, 68321 }, { 0x4A6F, 68249 }, { 0x4A70, 68303 }, { 0x4A71, 68264 }, { 0x4A72, 68315 }, { 0x4A73, 68327 }, { 0x4A74, 68342 }, { 0x4A75, 68348 }, { 0x4A76, 68306 }, { 0x4A77, 68345 }, { 0x4A78, 68324 }, { 0x4A79, 68288 }, { 0x4A7A, 68339 }, { 0x4A7B, 68252 }, { 0x4A7C, 68309 }, { 0x4A7D, 68276 }, { 0x4A7E, 68279 }, { 0x4A7F, 68330 }, { 0x4A80, 68246 }, { 0x4A81, 68300 }, { 0x4A82, 68273 }, { 0x4A83, 68297 }, { 0x4A84, 68282 }, { 0x4A85, 68270 }, { 0x4A86, 68294 }, { 0x4A87, 68333 }, { 0x4A88, 68336 }, { 0x4A89, 68285 }, { 0x4A8A, 68258 }, { 0x4A8B, 68172 }, { 0x4A8C, 68160 }, { 0x4A8D, 68184 }, { 0x4A8E, 68168 }, { 0x4A8F, 68188 }, { 0x4A90, 68207 }, { 0x4A91, 68217 }, { 0x4A92, 68202 }, { 0x4A93, 68212 }, { 0x4A94, 68156 }, { 0x4A95, 68192 }, { 0x4A96, 68176 }, { 0x4A97, 68164 }, { 0x4A98, 68197 }, { 0x4A99, 68180 }, { 0x4A9A, 68121 }, { 0x4A9B, 68115 }, { 0x4A9C, 68112 }, { 0x4A9D, 68109 }, { 0x4A9E, 68106 }, { 0x4A9F, 68118 }, { 0x4AA0, 68154 }, { 0x4AA1, 68367 }, { 0x4AA2, 68102 }, { 0x4AA3, 68142 }, { 0x4AA4, 68124 }, { 0x4AA5, 68130 }, { 0x4AA6, 68151 }, { 0x4AA7, 68136 }, { 0x4AA8, 68133 }, { 0x4AA9, 68127 }, { 0x4AAA, 68148 }, { 0x4AAB, 68145 }, { 0x4AAC, 68139 }, { 0x4AAD, 65777 }, { 0x4AAE, 65792 }, { 0x4AAF, 65783 }, { 0x4AB0, 65816 }, { 0x4AB1, 65789 }, { 0x4AB2, 65846 }, { 0x4AB3, 65910 }, { 0x4AB4, 65918 }, { 0x4AB5, 65906 }, { 0x4AB6, 65914 }, { 0x4AB7, 65780 }, { 0x4AB8, 65795 }, { 0x4AB9, 65786 }, { 0x4ABA, 65798 }, { 0x4ABB, 65822 }, { 0x4ABC, 65873 }, { 0x4ABD, 65810 }, { 0x4ABE, 65867 }, { 0x4ABF, 65876 }, { 0x4AC0, 65804 }, { 0x4AC1, 65858 }, { 0x4AC2, 65819 }, { 0x4AC3, 65870 }, { 0x4AC4, 65882 }, { 0x4AC5, 65897 }, { 0x4AC6, 65903 }, { 0x4AC7, 65861 }, { 0x4AC8, 65900 }, { 0x4AC9, 65879 }, { 0x4ACA, 65843 }, { 0x4ACB, 65894 }, { 0x4ACC, 65807 }, { 0x4ACD, 65864 }, { 0x4ACE, 65831 }, { 0x4ACF, 65834 }, { 0x4AD0, 65885 }, { 0x4AD1, 65801 }, { 0x4AD2, 65855 }, { 0x4AD3, 65828 }, { 0x4AD4, 65852 }, { 0x4AD5, 65837 }, { 0x4AD6, 65825 }, { 0x4AD7, 65849 }, { 0x4AD8, 65888 }, { 0x4AD9, 65891 }, { 0x4ADA, 65840 }, { 0x4ADB, 65813 }, { 0x4ADC, 65734 }, { 0x4ADD, 65722 }, { 0x4ADE, 65746 }, { 0x4ADF, 65730 }, { 0x4AE0, 65750 }, { 0x4AE1, 65754 }, { 0x4AE2, 65759 }, { 0x4AE3, 65718 }, { 0x4AE4, 65738 }, { 0x4AE5, 65726 }, { 0x4AE6, 65742 }, { 0x4AE7, 65713 }, { 0x4AE8, 65710 }, { 0x4AE9, 65707 }, { 0x4AEA, 65701 }, { 0x4AEB, 65698 }, { 0x4AEC, 65704 }, { 0x4AED, 65716 }, { 0x4AEE, 65774 }, { 0x4AEF, 66045 }, { 0x4AF0, 66042 }, { 0x4AF1, 66048 }, { 0x4AF2, 66051 }, { 0x4AF3, 66054 }, { 0x4AF4, 65693 }, { 0x4AF5, 66010 }, { 0x4AF6, 66002 }, { 0x4AF7, 65959 }, { 0x4AF8, 65941 }, { 0x4AF9, 65950 }, { 0x4AFA, 66030 }, { 0x4AFB, 66035 }, { 0x4AFC, 65967 }, { 0x4AFD, 65973 }, { 0x4AFE, 66024 }, { 0x4AFF, 66018 }, { 0x4B00, 65995 }, { 0x4B01, 65979 }, { 0x4B02, 65987 }, { 0x4B03, 65936 }, { 0x4B04, 65926 }, { 0x4B05, 65931 }, { 0x4B06, 65922 }, { 0x4B07, 65764 }, { 0x4B08, 65769 }, { 0x4B09, 14008 }, { 0x4B0A, 14023 }, { 0x4B0B, 14014 }, { 0x4B0C, 14047 }, { 0x4B0D, 14020 }, { 0x4B0E, 14077 }, { 0x4B0F, 14144 }, { 0x4B10, 14152 }, { 0x4B11, 14140 }, { 0x4B12, 14148 }, { 0x4B13, 14011 }, { 0x4B14, 14026 }, { 0x4B15, 14017 }, { 0x4B16, 14029 }, { 0x4B17, 14053 }, { 0x4B18, 14104 }, { 0x4B19, 14041 }, { 0x4B1A, 14098 }, { 0x4B1B, 14110 }, { 0x4B1C, 14035 }, { 0x4B1D, 14089 }, { 0x4B1E, 14050 }, { 0x4B1F, 14101 }, { 0x4B20, 14116 }, { 0x4B21, 14131 }, { 0x4B22, 14137 }, { 0x4B23, 14092 }, { 0x4B24, 14134 }, { 0x4B25, 14113 }, { 0x4B26, 14074 }, { 0x4B27, 14128 }, { 0x4B28, 14038 }, { 0x4B29, 14095 }, { 0x4B2A, 14062 }, { 0x4B2B, 14065 }, { 0x4B2C, 14119 }, { 0x4B2D, 14032 }, { 0x4B2E, 14086 }, { 0x4B2F, 14059 }, { 0x4B30, 14083 }, { 0x4B31, 14068 }, { 0x4B32, 14056 }, { 0x4B33, 14080 }, { 0x4B34, 14122 }, { 0x4B35, 14125 }, { 0x4B36, 14071 }, { 0x4B37, 14044 }, { 0x4B38, 14107 }, { 0x4B39, 13965 }, { 0x4B3A, 13953 }, { 0x4B3B, 13977 }, { 0x4B3C, 13961 }, { 0x4B3D, 13981 }, { 0x4B3E, 13990 }, { 0x4B3F, 14000 }, { 0x4B40, 13985 }, { 0x4B41, 13995 }, { 0x4B42, 13949 }, { 0x4B43, 13969 }, { 0x4B44, 13957 }, { 0x4B45, 13973 }, { 0x4B46, 13911 }, { 0x4B47, 13908 }, { 0x4B48, 13905 }, { 0x4B49, 13914 }, { 0x4B4A, 13917 }, { 0x4B4B, 14005 }, { 0x4B4C, 14156 }, { 0x4B4D, 13902 }, { 0x4B4E, 13937 }, { 0x4B4F, 13919 }, { 0x4B50, 13925 }, { 0x4B51, 13946 }, { 0x4B52, 13931 }, { 0x4B53, 13928 }, { 0x4B54, 13922 }, { 0x4B55, 13943 }, { 0x4B56, 13940 }, { 0x4B57, 13934 }, { 0x4B58, 100850 }, { 0x4B59, 101487 }, { 0x4B5A, 100905 }, { 0x4B5B, 101475 }, { 0x4B5C, 100845 }, { 0x4B5D, 101496 }, { 0x4B5E, 101490 }, { 0x4B5F, 101503 }, { 0x4B60, 101506 }, { 0x4B61, 100888 }, { 0x4B62, 100897 }, { 0x4B63, 100891 }, { 0x4B64, 101480 }, { 0x4B65, 34816 }, { 0x4B66, 34831 }, { 0x4B67, 34822 }, { 0x4B68, 34855 }, { 0x4B69, 34828 }, { 0x4B6A, 34885 }, { 0x4B6B, 34819 }, { 0x4B6C, 34834 }, { 0x4B6D, 34825 }, { 0x4B6E, 34837 }, { 0x4B6F, 34861 }, { 0x4B70, 34912 }, { 0x4B71, 34849 }, { 0x4B72, 34906 }, { 0x4B73, 34915 }, { 0x4B74, 34843 }, { 0x4B75, 34897 }, { 0x4B76, 34858 }, { 0x4B77, 34909 }, { 0x4B78, 34921 }, { 0x4B79, 34936 }, { 0x4B7A, 34942 }, { 0x4B7B, 34900 }, { 0x4B7C, 34939 }, { 0x4B7D, 34918 }, { 0x4B7E, 34882 }, { 0x4B7F, 34933 }, { 0x4B80, 34846 }, { 0x4B81, 34903 }, { 0x4B82, 34870 }, { 0x4B83, 34873 }, { 0x4B84, 34924 }, { 0x4B85, 34840 }, { 0x4B86, 34894 }, { 0x4B87, 34867 }, { 0x4B88, 34891 }, { 0x4B89, 34876 }, { 0x4B8A, 34864 }, { 0x4B8B, 34888 }, { 0x4B8C, 34930 }, { 0x4B8D, 34879 }, { 0x4B8E, 34852 }, { 0x4B8F, 34927 }, { 0x4B90, 34747 }, { 0x4B91, 34744 }, { 0x4B92, 34796 }, { 0x4B93, 34784 }, { 0x4B94, 34808 }, { 0x4B95, 34792 }, { 0x4B96, 34812 }, { 0x4B97, 34780 }, { 0x4B98, 34800 }, { 0x4B99, 34788 }, { 0x4B9A, 34804 }, { 0x4B9B, 34741 }, { 0x4B9C, 34738 }, { 0x4B9D, 34768 }, { 0x4B9E, 34750 }, { 0x4B9F, 34756 }, { 0x4BA0, 34777 }, { 0x4BA1, 34762 }, { 0x4BA2, 34759 }, { 0x4BA3, 34753 }, { 0x4BA4, 34774 }, { 0x4BA5, 34771 }, { 0x4BA6, 34765 }, { 0x4BA7, 11952 }, { 0x4BA8, 11991 }, { 0x4BA9, 11994 }, { 0x4BAA, 11961 }, { 0x4BAB, 11973 }, { 0x4BAC, 12010 }, { 0x4BAD, 11964 }, { 0x4BAE, 12000 }, { 0x4BAF, 11937 }, { 0x4BB0, 11958 }, { 0x4BB1, 11949 }, { 0x4BB2, 11979 }, { 0x4BB3, 12003 }, { 0x4BB4, 11967 }, { 0x4BB5, 11955 }, { 0x4BB6, 11970 }, { 0x4BB7, 11997 }, { 0x4BB8, 11946 }, { 0x4BB9, 11934 }, { 0x4BBA, 11940 }, { 0x4BBB, 11982 }, { 0x4BBC, 11943 }, { 0x4BBD, 12006 }, { 0x4BBE, 11985 }, { 0x4BBF, 11976 }, { 0x4BC0, 11988 }, { 0x4BC1, 12023 }, { 0x4BC2, 12028 }, { 0x4BC3, 12033 }, { 0x4BC4, 11890 }, { 0x4BC5, 11910 }, { 0x4BC6, 11898 }, { 0x4BC7, 11926 }, { 0x4BC8, 11906 }, { 0x4BC9, 11930 }, { 0x4BCA, 11894 }, { 0x4BCB, 11922 }, { 0x4BCC, 11902 }, { 0x4BCD, 11914 }, { 0x4BCE, 11918 }, { 0x4BCF, 11854 }, { 0x4BD0, 11878 }, { 0x4BD1, 11860 }, { 0x4BD2, 11866 }, { 0x4BD3, 11887 }, { 0x4BD4, 11872 }, { 0x4BD5, 11869 }, { 0x4BD6, 11863 }, { 0x4BD7, 11884 }, { 0x4BD8, 11881 }, { 0x4BD9, 11875 }, { 0x4BDA, 12014 }, { 0x4BDB, 12017 }, { 0x4BDC, 11850 }, { 0x4BDD, 11857 }, { 0x4BDE, 11847 }, { 0x4BDF, 12020 }, { 0x4BE0, 57762 }, { 0x4BE1, 57622 }, { 0x4BE2, 57687 }, { 0x4BE3, 57702 }, { 0x4BE4, 57692 }, { 0x4BE5, 57697 }, { 0x4BE6, 57662 }, { 0x4BE7, 57682 }, { 0x4BE8, 57627 }, { 0x4BE9, 57632 }, { 0x4BEA, 57707 }, { 0x4BEB, 57657 }, { 0x4BEC, 57667 }, { 0x4BED, 57717 }, { 0x4BEE, 57742 }, { 0x4BEF, 57677 }, { 0x4BF0, 57712 }, { 0x4BF1, 57727 }, { 0x4BF2, 57737 }, { 0x4BF3, 57767 }, { 0x4BF4, 57652 }, { 0x4BF5, 57642 }, { 0x4BF6, 57637 }, { 0x4BF7, 57647 }, { 0x4BF8, 57672 }, { 0x4BF9, 57747 }, { 0x4BFA, 57752 }, { 0x4BFB, 57757 }, { 0x4BFC, 57722 }, { 0x4BFD, 57772 }, { 0x4BFE, 57732 }, { 0x4BFF, 57777 }, { 0x4C00, 57566 }, { 0x4C01, 57426 }, { 0x4C02, 57491 }, { 0x4C03, 57506 }, { 0x4C04, 57496 }, { 0x4C05, 57501 }, { 0x4C06, 57466 }, { 0x4C07, 57486 }, { 0x4C08, 57431 }, { 0x4C09, 57436 }, { 0x4C0A, 57511 }, { 0x4C0B, 57461 }, { 0x4C0C, 57471 }, { 0x4C0D, 57521 }, { 0x4C0E, 57546 }, { 0x4C0F, 57481 }, { 0x4C10, 57516 }, { 0x4C11, 57531 }, { 0x4C12, 57541 }, { 0x4C13, 57571 }, { 0x4C14, 57456 }, { 0x4C15, 57446 }, { 0x4C16, 57441 }, { 0x4C17, 57451 }, { 0x4C18, 57476 }, { 0x4C19, 57551 }, { 0x4C1A, 57556 }, { 0x4C1B, 57561 }, { 0x4C1C, 57526 }, { 0x4C1D, 57576 }, { 0x4C1E, 57536 }, { 0x4C1F, 57581 }, { 0x4C20, 57410 }, { 0x4C21, 57386 }, { 0x4C22, 57394 }, { 0x4C23, 57422 }, { 0x4C24, 57402 }, { 0x4C25, 57398 }, { 0x4C26, 57390 }, { 0x4C27, 57418 }, { 0x4C28, 57414 }, { 0x4C29, 57406 }, { 0x4C2A, 57586 }, { 0x4C2B, 57614 }, { 0x4C2C, 57610 }, { 0x4C2D, 57594 }, { 0x4C2E, 57590 }, { 0x4C2F, 57598 }, { 0x4C30, 57618 }, { 0x4C31, 57602 }, { 0x4C32, 57606 }, { 0x4C33, 57383 }, { 0x4C34, 9018 }, { 0x4C35, 8998 }, { 0x4C36, 9003 }, { 0x4C37, 9008 }, { 0x4C38, 8973 }, { 0x4C39, 9048 }, { 0x4C3A, 9043 }, { 0x4C3B, 9063 }, { 0x4C3C, 8988 }, { 0x4C3D, 8983 }, { 0x4C3E, 9058 }, { 0x4C3F, 9028 }, { 0x4C40, 8963 }, { 0x4C41, 8968 }, { 0x4C42, 9033 }, { 0x4C43, 9073 }, { 0x4C44, 9013 }, { 0x4C45, 9068 }, { 0x4C46, 9023 }, { 0x4C47, 8978 }, { 0x4C48, 9053 }, { 0x4C49, 8938 }, { 0x4C4A, 8943 }, { 0x4C4B, 8948 }, { 0x4C4C, 8953 }, { 0x4C4D, 8958 }, { 0x4C4E, 9038 }, { 0x4C4F, 8993 }, { 0x4C50, 9102 }, { 0x4C51, 9078 }, { 0x4C52, 9108 }, { 0x4C53, 9090 }, { 0x4C54, 9096 }, { 0x4C55, 9084 }, { 0x4C56, 9114 }, { 0x4C57, 9126 }, { 0x4C58, 9120 }, { 0x4C59, 9137 }, { 0x4C5A, 9132 }, { 0x4C5B, 9180 }, { 0x4C5C, 9143 }, { 0x4C5D, 9150 }, { 0x4C5E, 9186 }, { 0x4C5F, 9161 }, { 0x4C60, 9156 }, { 0x4C61, 9167 }, { 0x4C62, 9174 }, { 0x4C63, 9210 }, { 0x4C64, 9204 }, { 0x4C65, 9215 }, { 0x4C66, 9222 }, { 0x4C67, 9233 }, { 0x4C68, 9228 }, { 0x4C69, 9193 }, { 0x4C6A, 9239 }, { 0x4C6B, 9246 }, { 0x4C6C, 9198 }, { 0x4C6D, 88808 }, { 0x4C6E, 88823 }, { 0x4C6F, 88814 }, { 0x4C70, 88847 }, { 0x4C71, 88820 }, { 0x4C72, 88877 }, { 0x4C73, 88941 }, { 0x4C74, 88945 }, { 0x4C75, 88937 }, { 0x4C76, 88811 }, { 0x4C77, 88826 }, { 0x4C78, 88817 }, { 0x4C79, 88829 }, { 0x4C7A, 88853 }, { 0x4C7B, 88904 }, { 0x4C7C, 88841 }, { 0x4C7D, 88898 }, { 0x4C7E, 88907 }, { 0x4C7F, 88835 }, { 0x4C80, 88889 }, { 0x4C81, 88850 }, { 0x4C82, 88901 }, { 0x4C83, 88913 }, { 0x4C84, 88928 }, { 0x4C85, 88934 }, { 0x4C86, 88892 }, { 0x4C87, 88931 }, { 0x4C88, 88910 }, { 0x4C89, 88874 }, { 0x4C8A, 88925 }, { 0x4C8B, 88838 }, { 0x4C8C, 88895 }, { 0x4C8D, 88862 }, { 0x4C8E, 88865 }, { 0x4C8F, 88916 }, { 0x4C90, 88832 }, { 0x4C91, 88886 }, { 0x4C92, 88859 }, { 0x4C93, 88883 }, { 0x4C94, 88868 }, { 0x4C95, 88856 }, { 0x4C96, 88880 }, { 0x4C97, 88919 }, { 0x4C98, 88922 }, { 0x4C99, 88871 }, { 0x4C9A, 88844 }, { 0x4C9B, 88770 }, { 0x4C9C, 88758 }, { 0x4C9D, 88782 }, { 0x4C9E, 88766 }, { 0x4C9F, 88786 }, { 0x4CA0, 88795 }, { 0x4CA1, 88800 }, { 0x4CA2, 88790 }, { 0x4CA3, 88754 }, { 0x4CA4, 88774 }, { 0x4CA5, 88762 }, { 0x4CA6, 88778 }, { 0x4CA7, 88716 }, { 0x4CA8, 88710 }, { 0x4CA9, 88707 }, { 0x4CAA, 88704 }, { 0x4CAB, 88713 }, { 0x4CAC, 88722 }, { 0x4CAD, 88805 }, { 0x4CAE, 88719 }, { 0x4CAF, 88698 }, { 0x4CB0, 88701 }, { 0x4CB1, 88742 }, { 0x4CB2, 88724 }, { 0x4CB3, 88730 }, { 0x4CB4, 88751 }, { 0x4CB5, 88736 }, { 0x4CB6, 88733 }, { 0x4CB7, 88727 }, { 0x4CB8, 88748 }, { 0x4CB9, 88745 }, { 0x4CBA, 88739 }, { 0x4CBB, 88949 }, { 0x4CBC, 88958 }, { 0x4CBD, 88985 }, { 0x4CBE, 88964 }, { 0x4CBF, 88961 }, { 0x4CC0, 88952 }, { 0x4CC1, 88979 }, { 0x4CC2, 88970 }, { 0x4CC3, 88967 }, { 0x4CC4, 88955 }, { 0x4CC5, 88997 }, { 0x4CC6, 88994 }, { 0x4CC7, 88976 }, { 0x4CC8, 88973 }, { 0x4CC9, 88982 }, { 0x4CCA, 89000 }, { 0x4CCB, 88988 }, { 0x4CCC, 88991 }, { 0x4CCD, 89003 }, { 0x4CCE, 62095 }, { 0x4CCF, 62098 }, { 0x4CD0, 62151 }, { 0x4CD1, 62190 }, { 0x4CD2, 62142 }, { 0x4CD3, 62193 }, { 0x4CD4, 62136 }, { 0x4CD5, 62184 }, { 0x4CD6, 62148 }, { 0x4CD7, 62196 }, { 0x4CD8, 62172 }, { 0x4CD9, 62205 }, { 0x4CDA, 62139 }, { 0x4CDB, 62160 }, { 0x4CDC, 62163 }, { 0x4CDD, 62199 }, { 0x4CDE, 62133 }, { 0x4CDF, 62157 }, { 0x4CE0, 62208 }, { 0x4CE1, 62214 }, { 0x4CE2, 62187 }, { 0x4CE3, 62175 }, { 0x4CE4, 62211 }, { 0x4CE5, 62181 }, { 0x4CE6, 62130 }, { 0x4CE7, 62178 }, { 0x4CE8, 62166 }, { 0x4CE9, 62154 }, { 0x4CEA, 62202 }, { 0x4CEB, 62169 }, { 0x4CEC, 62145 }, { 0x4CED, 62127 }, { 0x4CEE, 62245 }, { 0x4CEF, 62297 }, { 0x4CF0, 62233 }, { 0x4CF1, 62301 }, { 0x4CF2, 62225 }, { 0x4CF3, 62289 }, { 0x4CF4, 62241 }, { 0x4CF5, 62305 }, { 0x4CF6, 62273 }, { 0x4CF7, 62317 }, { 0x4CF8, 62229 }, { 0x4CF9, 62257 }, { 0x4CFA, 62261 }, { 0x4CFB, 62309 }, { 0x4CFC, 62221 }, { 0x4CFD, 62253 }, { 0x4CFE, 62321 }, { 0x4CFF, 62329 }, { 0x4D00, 62293 }, { 0x4D01, 62277 }, { 0x4D02, 62325 }, { 0x4D03, 62285 }, { 0x4D04, 62281 }, { 0x4D05, 62265 }, { 0x4D06, 62249 }, { 0x4D07, 62313 }, { 0x4D08, 62269 }, { 0x4D09, 62237 }, { 0x4D0A, 62217 }, { 0x4D0B, 62123 }, { 0x4D0C, 62111 }, { 0x4D0D, 62119 }, { 0x4D0E, 62107 }, { 0x4D0F, 62115 }, { 0x4D10, 62101 }, { 0x4D11, 62104 }, { 0x4D12, 92076 }, { 0x4D13, 92079 }, { 0x4D14, 92089 }, { 0x4D15, 92104 }, { 0x4D16, 92084 }, { 0x4D17, 92094 }, { 0x4D18, 92115 }, { 0x4D19, 92110 }, { 0x4D1A, 92099 }, { 0x4D1B, 92189 }, { 0x4D1C, 92192 }, { 0x4D1D, 92235 }, { 0x4D1E, 92240 }, { 0x4D1F, 92213 }, { 0x4D20, 92246 }, { 0x4D21, 92208 }, { 0x4D22, 92218 }, { 0x4D23, 92252 }, { 0x4D24, 92262 }, { 0x4D25, 92267 }, { 0x4D26, 92199 }, { 0x4D27, 92195 }, { 0x4D28, 93411 }, { 0x4D29, 93442 }, { 0x4D2A, 93426 }, { 0x4D2B, 93419 }, { 0x4D2C, 93432 }, { 0x4D2D, 93437 }, { 0x4D2E, 92272 }, { 0x4D2F, 92280 }, { 0x4D30, 92283 }, { 0x4D31, 92288 }, { 0x4D32, 92295 }, { 0x4D33, 92298 }, { 0x4D34, 92323 }, { 0x4D35, 92328 }, { 0x4D36, 92303 }, { 0x4D37, 92333 }, { 0x4D38, 92308 }, { 0x4D39, 92313 }, { 0x4D3A, 92318 }, { 0x4D3B, 95560 }, { 0x4D3C, 96343 }, { 0x4D3D, 95563 }, { 0x4D3E, 95571 }, { 0x4D3F, 92338 }, { 0x4D40, 92341 }, { 0x4D41, 92361 }, { 0x4D42, 92352 }, { 0x4D43, 92346 }, { 0x4D44, 96346 }, { 0x4D45, 95576 }, { 0x4D46, 95579 }, { 0x4D47, 95582 }, { 0x4D48, 96349 }, { 0x4D49, 96352 }, { 0x4D4A, 93447 }, { 0x4D4B, 93487 }, { 0x4D4C, 93450 }, { 0x4D4D, 93475 }, { 0x4D4E, 93455 }, { 0x4D4F, 93462 }, { 0x4D50, 95587 }, { 0x4D51, 96949 }, { 0x4D52, 92366 }, { 0x4D53, 93492 }, { 0x4D54, 95590 }, { 0x4D55, 96952 }, { 0x4D56, 93501 }, { 0x4D57, 93504 }, { 0x4D58, 96355 }, { 0x4D59, 93509 }, { 0x4D5A, 96358 }, { 0x4D5B, 92369 }, { 0x4D5C, 92372 }, { 0x4D5D, 92377 }, { 0x4D5E, 92382 }, { 0x4D5F, 92388 }, { 0x4D60, 92391 }, { 0x4D61, 92397 }, { 0x4D62, 92410 }, { 0x4D63, 96361 }, { 0x4D64, 96364 }, { 0x4D65, 93512 }, { 0x4D66, 95593 }, { 0x4D67, 92415 }, { 0x4D68, 93515 }, { 0x4D69, 93523 }, { 0x4D6A, 93657 }, { 0x4D6B, 93675 }, { 0x4D6C, 93531 }, { 0x4D6D, 93537 }, { 0x4D6E, 93543 }, { 0x4D6F, 93551 }, { 0x4D70, 93663 }, { 0x4D71, 93625 }, { 0x4D72, 93557 }, { 0x4D73, 93563 }, { 0x4D74, 93569 }, { 0x4D75, 93631 }, { 0x4D76, 93577 }, { 0x4D77, 93583 }, { 0x4D78, 93589 }, { 0x4D79, 93637 }, { 0x4D7A, 93597 }, { 0x4D7B, 93643 }, { 0x4D7C, 93603 }, { 0x4D7D, 93669 }, { 0x4D7E, 93609 }, { 0x4D7F, 93651 }, { 0x4D80, 93681 }, { 0x4D81, 93684 }, { 0x4D82, 96369 }, { 0x4D83, 96372 }, { 0x4D84, 92423 }, { 0x4D85, 93687 }, { 0x4D86, 93690 }, { 0x4D87, 93705 }, { 0x4D88, 95599 }, { 0x4D89, 93710 }, { 0x4D8A, 93713 }, { 0x4D8B, 95607 }, { 0x4D8C, 92426 }, { 0x4D8D, 92433 }, { 0x4D8E, 92429 }, { 0x4D8F, 92438 }, { 0x4D90, 93720 }, { 0x4D91, 93728 }, { 0x4D92, 95615 }, { 0x4D93, 93733 }, { 0x4D94, 96375 }, { 0x4D95, 93887 }, { 0x4D96, 93890 }, { 0x4D97, 95618 }, { 0x4D98, 95621 }, { 0x4D99, 95625 }, { 0x4D9A, 95630 }, { 0x4D9B, 95633 }, { 0x4D9C, 92121 }, { 0x4D9D, 92132 }, { 0x4D9E, 92124 }, { 0x4D9F, 92442 }, { 0x4DA0, 92445 }, { 0x4DA1, 92464 }, { 0x4DA2, 92459 }, { 0x4DA3, 92479 }, { 0x4DA4, 92484 }, { 0x4DA5, 92454 }, { 0x4DA6, 95636 }, { 0x4DA7, 95639 }, { 0x4DA8, 92489 }, { 0x4DA9, 92492 }, { 0x4DAA, 92500 }, { 0x4DAB, 92505 }, { 0x4DAC, 92495 }, { 0x4DAD, 92515 }, { 0x4DAE, 92520 }, { 0x4DAF, 92511 }, { 0x4DB0, 95642 }, { 0x4DB1, 96378 }, { 0x4DB2, 95645 }, { 0x4DB3, 95653 }, { 0x4DB4, 95656 }, { 0x4DB5, 95661 }, { 0x4DB6, 95668 }, { 0x4DB7, 95677 }, { 0x4DB8, 95723 }, { 0x4DB9, 95756 }, { 0x4DBA, 95762 }, { 0x4DBB, 95682 }, { 0x4DBC, 95687 }, { 0x4DBD, 95733 }, { 0x4DBE, 95769 }, { 0x4DBF, 95774 }, { 0x4DC0, 95739 }, { 0x4DC1, 95693 }, { 0x4DC2, 95744 }, { 0x4DC3, 95698 }, { 0x4DC4, 95703 }, { 0x4DC5, 95713 }, { 0x4DC6, 95718 }, { 0x4DC7, 92525 }, { 0x4DC8, 92528 }, { 0x4DC9, 93893 }, { 0x4DCA, 93901 }, { 0x4DCB, 93910 }, { 0x4DCC, 93917 }, { 0x4DCD, 94064 }, { 0x4DCE, 93929 }, { 0x4DCF, 94072 }, { 0x4DD0, 94277 }, { 0x4DD1, 94077 }, { 0x4DD2, 94082 }, { 0x4DD3, 94089 }, { 0x4DD4, 94094 }, { 0x4DD5, 93943 }, { 0x4DD6, 93948 }, { 0x4DD7, 94107 }, { 0x4DD8, 94114 }, { 0x4DD9, 93953 }, { 0x4DDA, 93958 }, { 0x4DDB, 93965 }, { 0x4DDC, 93970 }, { 0x4DDD, 94289 }, { 0x4DDE, 94134 }, { 0x4DDF, 93983 }, { 0x4DE0, 94153 }, { 0x4DE1, 94158 }, { 0x4DE2, 94295 }, { 0x4DE3, 93995 }, { 0x4DE4, 94165 }, { 0x4DE5, 94170 }, { 0x4DE6, 94004 }, { 0x4DE7, 94302 }, { 0x4DE8, 94177 }, { 0x4DE9, 94183 }, { 0x4DEA, 94192 }, { 0x4DEB, 94337 }, { 0x4DEC, 94197 }, { 0x4DED, 94202 }, { 0x4DEE, 94209 }, { 0x4DEF, 94011 }, { 0x4DF0, 94016 }, { 0x4DF1, 94023 }, { 0x4DF2, 94233 }, { 0x4DF3, 94238 }, { 0x4DF4, 94047 }, { 0x4DF5, 94245 }, { 0x4DF6, 94250 }, { 0x4DF7, 94255 }, { 0x4DF8, 94260 }, { 0x4DF9, 94312 }, { 0x4DFA, 94267 }, { 0x4DFB, 94322 }, { 0x4DFC, 93924 }, { 0x4DFD, 94052 }, { 0x4DFE, 94057 }, { 0x4DFF, 93896 }, { 0x4E00, 95829 }, { 0x4E01, 95838 }, { 0x4E02, 94349 }, { 0x4E03, 94352 }, { 0x4E04, 94360 }, { 0x4E05, 94363 }, { 0x4E06, 96385 }, { 0x4E07, 94372 }, { 0x4E08, 94375 }, { 0x4E09, 95843 }, { 0x4E0A, 95851 }, { 0x4E0B, 95846 }, { 0x4E0C, 95855 }, { 0x4E0D, 94378 }, { 0x4E0E, 95860 }, { 0x4E0F, 96970 }, { 0x4E10, 97199 }, { 0x4E11, 97207 }, { 0x4E12, 92532 }, { 0x4E13, 92535 }, { 0x4E14, 92540 }, { 0x4E15, 92545 }, { 0x4E16, 94381 }, { 0x4E17, 94384 }, { 0x4E18, 94389 }, { 0x4E19, 96388 }, { 0x4E1A, 95866 }, { 0x4E1B, 95869 }, { 0x4E1C, 95873 }, { 0x4E1D, 95876 }, { 0x4E1E, 95900 }, { 0x4E1F, 95895 }, { 0x4E20, 95883 }, { 0x4E21, 95890 }, { 0x4E22, 96391 }, { 0x4E23, 95906 }, { 0x4E24, 95930 }, { 0x4E25, 95913 }, { 0x4E26, 95925 }, { 0x4E27, 95909 }, { 0x4E28, 92550 }, { 0x4E29, 92553 }, { 0x4E2A, 94397 }, { 0x4E2B, 94410 }, { 0x4E2C, 94415 }, { 0x4E2D, 94423 }, { 0x4E2E, 94428 }, { 0x4E2F, 94400 }, { 0x4E30, 94435 }, { 0x4E31, 94451 }, { 0x4E32, 94458 }, { 0x4E33, 94438 }, { 0x4E34, 94463 }, { 0x4E35, 94466 }, { 0x4E36, 94469 }, { 0x4E37, 94474 }, { 0x4E38, 95935 }, { 0x4E39, 96394 }, { 0x4E3A, 96973 }, { 0x4E3B, 92558 }, { 0x4E3C, 92565 }, { 0x4E3D, 92561 }, { 0x4E3E, 94477 }, { 0x4E3F, 92574 }, { 0x4E40, 92582 }, { 0x4E41, 92621 }, { 0x4E42, 92596 }, { 0x4E43, 92626 }, { 0x4E44, 92601 }, { 0x4E45, 92606 }, { 0x4E46, 92611 }, { 0x4E47, 92616 }, { 0x4E48, 92577 }, { 0x4E49, 92631 }, { 0x4E4A, 95938 }, { 0x4E4B, 95941 }, { 0x4E4C, 95951 }, { 0x4E4D, 95961 }, { 0x4E4E, 95956 }, { 0x4E4F, 95946 }, { 0x4E50, 95966 }, { 0x4E51, 92137 }, { 0x4E52, 92140 }, { 0x4E53, 92634 }, { 0x4E54, 95972 }, { 0x4E55, 95975 }, { 0x4E56, 95981 }, { 0x4E57, 92637 }, { 0x4E58, 94480 }, { 0x4E59, 94487 }, { 0x4E5A, 94483 }, { 0x4E5B, 94495 }, { 0x4E5C, 94491 }, { 0x4E5D, 92640 }, { 0x4E5E, 92643 }, { 0x4E5F, 94506 }, { 0x4E60, 92649 }, { 0x4E61, 92652 }, { 0x4E62, 92661 }, { 0x4E63, 92666 }, { 0x4E64, 92657 }, { 0x4E65, 95987 }, { 0x4E66, 92671 }, { 0x4E67, 92674 }, { 0x4E68, 94509 }, { 0x4E69, 92677 }, { 0x4E6A, 92680 }, { 0x4E6B, 92697 }, { 0x4E6C, 92702 }, { 0x4E6D, 92953 }, { 0x4E6E, 92854 }, { 0x4E6F, 93025 }, { 0x4E70, 92859 }, { 0x4E71, 92709 }, { 0x4E72, 93030 }, { 0x4E73, 92963 }, { 0x4E74, 92719 }, { 0x4E75, 92864 }, { 0x4E76, 92968 }, { 0x4E77, 92869 }, { 0x4E78, 92874 }, { 0x4E79, 92724 }, { 0x4E7A, 92974 }, { 0x4E7B, 92984 }, { 0x4E7C, 92991 }, { 0x4E7D, 92729 }, { 0x4E7E, 92998 }, { 0x4E7F, 92888 }, { 0x4E80, 92741 }, { 0x4E81, 92893 }, { 0x4E82, 92751 }, { 0x4E83, 92898 }, { 0x4E84, 92756 }, { 0x4E85, 92761 }, { 0x4E86, 92766 }, { 0x4E87, 92771 }, { 0x4E88, 92778 }, { 0x4E89, 92785 }, { 0x4E8A, 92792 }, { 0x4E8B, 92797 }, { 0x4E8C, 92804 }, { 0x4E8D, 92908 }, { 0x4E8E, 92814 }, { 0x4E8F, 92819 }, { 0x4E90, 92824 }, { 0x4E91, 92913 }, { 0x4E92, 92918 }, { 0x4E93, 92923 }, { 0x4E94, 93003 }, { 0x4E95, 92928 }, { 0x4E96, 92933 }, { 0x4E97, 93035 }, { 0x4E98, 92938 }, { 0x4E99, 92685 }, { 0x4E9A, 92834 }, { 0x4E9B, 92839 }, { 0x4E9C, 93013 }, { 0x4E9D, 92948 }, { 0x4E9E, 92849 }, { 0x4E9F, 94512 }, { 0x4EA0, 94515 }, { 0x4EA1, 94520 }, { 0x4EA2, 95990 }, { 0x4EA3, 95993 }, { 0x4EA4, 95996 }, { 0x4EA5, 95999 }, { 0x4EA6, 96002 }, { 0x4EA7, 94523 }, { 0x4EA8, 94526 }, { 0x4EA9, 94532 }, { 0x4EAA, 94535 }, { 0x4EAB, 94540 }, { 0x4EAC, 96007 }, { 0x4EAD, 96010 }, { 0x4EAE, 96976 }, { 0x4EAF, 96991 }, { 0x4EB0, 96979 }, { 0x4EB1, 96397 }, { 0x4EB2, 93040 }, { 0x4EB3, 93053 }, { 0x4EB4, 93043 }, { 0x4EB5, 93048 }, { 0x4EB6, 94549 }, { 0x4EB7, 94552 }, { 0x4EB8, 96400 }, { 0x4EB9, 96013 }, { 0x4EBA, 97001 }, { 0x4EBB, 97004 }, { 0x4EBC, 93058 }, { 0x4EBD, 93061 }, { 0x4EBE, 94555 }, { 0x4EBF, 94558 }, { 0x4EC0, 94561 }, { 0x4EC1, 94566 }, { 0x4EC2, 94569 }, { 0x4EC3, 94572 }, { 0x4EC4, 94576 }, { 0x4EC5, 94579 }, { 0x4EC6, 94582 }, { 0x4EC7, 97009 }, { 0x4EC8, 97012 }, { 0x4EC9, 93073 }, { 0x4ECA, 96403 }, { 0x4ECB, 96406 }, { 0x4ECC, 96411 }, { 0x4ECD, 96420 }, { 0x4ECE, 96427 }, { 0x4ECF, 96455 }, { 0x4ED0, 96460 }, { 0x4ED1, 96573 }, { 0x4ED2, 96580 }, { 0x4ED3, 96465 }, { 0x4ED4, 96585 }, { 0x4ED5, 96470 }, { 0x4ED6, 96475 }, { 0x4ED7, 96590 }, { 0x4ED8, 96595 }, { 0x4ED9, 96600 }, { 0x4EDA, 96485 }, { 0x4EDB, 96607 }, { 0x4EDC, 96490 }, { 0x4EDD, 96612 }, { 0x4EDE, 96497 }, { 0x4EDF, 96502 }, { 0x4EE0, 96509 }, { 0x4EE1, 96516 }, { 0x4EE2, 96618 }, { 0x4EE3, 96623 }, { 0x4EE4, 96628 }, { 0x4EE5, 96633 }, { 0x4EE6, 96696 }, { 0x4EE7, 96669 }, { 0x4EE8, 96521 }, { 0x4EE9, 96642 }, { 0x4EEA, 96526 }, { 0x4EEB, 96531 }, { 0x4EEC, 96674 }, { 0x4EED, 96538 }, { 0x4EEE, 96647 }, { 0x4EEF, 96701 }, { 0x4EF0, 96710 }, { 0x4EF1, 96679 }, { 0x4EF2, 96684 }, { 0x4EF3, 96654 }, { 0x4EF4, 96659 }, { 0x4EF5, 96691 }, { 0x4EF6, 96543 }, { 0x4EF7, 96434 }, { 0x4EF8, 96439 }, { 0x4EF9, 96446 }, { 0x4EFA, 96554 }, { 0x4EFB, 96561 }, { 0x4EFC, 96664 }, { 0x4EFD, 96718 }, { 0x4EFE, 96722 }, { 0x4EFF, 96737 }, { 0x4F00, 96742 }, { 0x4F01, 96725 }, { 0x4F02, 96729 }, { 0x4F03, 97015 }, { 0x4F04, 94587 }, { 0x4F05, 94590 }, { 0x4F06, 94595 }, { 0x4F07, 94598 }, { 0x4F08, 94603 }, { 0x4F09, 93076 }, { 0x4F0A, 94610 }, { 0x4F0B, 97018 }, { 0x4F0C, 96016 }, { 0x4F0D, 93079 }, { 0x4F0E, 93082 }, { 0x4F0F, 94613 }, { 0x4F10, 94626 }, { 0x4F11, 94679 }, { 0x4F12, 94713 }, { 0x4F13, 94725 }, { 0x4F14, 94731 }, { 0x4F15, 94631 }, { 0x4F16, 94638 }, { 0x4F17, 94737 }, { 0x4F18, 94742 }, { 0x4F19, 94747 }, { 0x4F1A, 94643 }, { 0x4F1B, 94648 }, { 0x4F1C, 94771 }, { 0x4F1D, 94655 }, { 0x4F1E, 94662 }, { 0x4F1F, 94667 }, { 0x4F20, 94672 }, { 0x4F21, 94754 }, { 0x4F22, 94766 }, { 0x4F23, 94622 }, { 0x4F24, 94790 }, { 0x4F25, 94795 }, { 0x4F26, 94786 }, { 0x4F27, 94776 }, { 0x4F28, 94800 }, { 0x4F29, 96749 }, { 0x4F2A, 96752 }, { 0x4F2B, 96761 }, { 0x4F2C, 96757 }, { 0x4F2D, 94803 }, { 0x4F2E, 94806 }, { 0x4F2F, 94809 }, { 0x4F30, 94812 }, { 0x4F31, 94817 }, { 0x4F32, 93087 }, { 0x4F33, 93094 }, { 0x4F34, 93090 }, { 0x4F35, 94825 }, { 0x4F36, 94828 }, { 0x4F37, 94831 }, { 0x4F38, 96019 }, { 0x4F39, 96766 }, { 0x4F3A, 93099 }, { 0x4F3B, 94834 }, { 0x4F3C, 93102 }, { 0x4F3D, 94837 }, { 0x4F3E, 93110 }, { 0x4F3F, 93113 }, { 0x4F40, 94840 }, { 0x4F41, 94843 }, { 0x4F42, 97021 }, { 0x4F43, 97024 }, { 0x4F44, 96025 }, { 0x4F45, 96056 }, { 0x4F46, 96066 }, { 0x4F47, 96061 }, { 0x4F48, 96028 }, { 0x4F49, 96033 }, { 0x4F4A, 96071 }, { 0x4F4B, 96769 }, { 0x4F4C, 96776 }, { 0x4F4D, 96781 }, { 0x4F4E, 96788 }, { 0x4F4F, 96772 }, { 0x4F50, 93118 }, { 0x4F51, 94847 }, { 0x4F52, 96076 }, { 0x4F53, 96085 }, { 0x4F54, 96079 }, { 0x4F55, 96089 }, { 0x4F56, 96798 }, { 0x4F57, 94856 }, { 0x4F58, 94853 }, { 0x4F59, 96094 }, { 0x4F5A, 93121 }, { 0x4F5B, 93124 }, { 0x4F5C, 93129 }, { 0x4F5D, 93134 }, { 0x4F5E, 93138 }, { 0x4F5F, 93141 }, { 0x4F60, 94860 }, { 0x4F61, 94863 }, { 0x4F62, 94874 }, { 0x4F63, 94866 }, { 0x4F64, 97027 }, { 0x4F65, 97042 }, { 0x4F66, 97077 }, { 0x4F67, 97082 }, { 0x4F68, 97100 }, { 0x4F69, 97057 }, { 0x4F6A, 97065 }, { 0x4F6B, 97110 }, { 0x4F6C, 97122 }, { 0x4F6D, 97127 }, { 0x4F6E, 97135 }, { 0x4F6F, 97142 }, { 0x4F70, 97070 }, { 0x4F71, 97151 }, { 0x4F72, 96801 }, { 0x4F73, 93146 }, { 0x4F74, 96100 }, { 0x4F75, 94883 }, { 0x4F76, 94895 }, { 0x4F77, 94924 }, { 0x4F78, 94901 }, { 0x4F79, 94907 }, { 0x4F7A, 94918 }, { 0x4F7B, 94891 }, { 0x4F7C, 94886 }, { 0x4F7D, 94930 }, { 0x4F7E, 94935 }, { 0x4F7F, 96804 }, { 0x4F80, 96862 }, { 0x4F81, 96807 }, { 0x4F82, 96831 }, { 0x4F83, 96837 }, { 0x4F84, 96843 }, { 0x4F85, 96850 }, { 0x4F86, 96813 }, { 0x4F87, 96819 }, { 0x4F88, 96856 }, { 0x4F89, 96825 }, { 0x4F8A, 96868 }, { 0x4F8B, 96874 }, { 0x4F8C, 93149 }, { 0x4F8D, 94943 }, { 0x4F8E, 94946 }, { 0x4F8F, 94949 }, { 0x4F90, 96881 }, { 0x4F91, 93152 }, { 0x4F92, 93155 }, { 0x4F93, 93175 }, { 0x4F94, 93180 }, { 0x4F95, 93185 }, { 0x4F96, 93160 }, { 0x4F97, 93165 }, { 0x4F98, 93190 }, { 0x4F99, 93170 }, { 0x4F9A, 93195 }, { 0x4F9B, 93200 }, { 0x4F9C, 96888 }, { 0x4F9D, 96901 }, { 0x4F9E, 96891 }, { 0x4F9F, 96896 }, { 0x4FA0, 96906 }, { 0x4FA1, 93205 }, { 0x4FA2, 94952 }, { 0x4FA3, 93208 }, { 0x4FA4, 93211 }, { 0x4FA5, 93214 }, { 0x4FA6, 95081 }, { 0x4FA7, 94955 }, { 0x4FA8, 94973 }, { 0x4FA9, 94978 }, { 0x4FAA, 95018 }, { 0x4FAB, 94988 }, { 0x4FAC, 95029 }, { 0x4FAD, 95034 }, { 0x4FAE, 95039 }, { 0x4FAF, 94993 }, { 0x4FB0, 95044 }, { 0x4FB1, 95049 }, { 0x4FB2, 95071 }, { 0x4FB3, 95061 }, { 0x4FB4, 94998 }, { 0x4FB5, 95003 }, { 0x4FB6, 95008 }, { 0x4FB7, 95013 }, { 0x4FB8, 95066 }, { 0x4FB9, 94968 }, { 0x4FBA, 94958 }, { 0x4FBB, 95085 }, { 0x4FBC, 95088 }, { 0x4FBD, 97181 }, { 0x4FBE, 95094 }, { 0x4FBF, 95097 }, { 0x4FC0, 96124 }, { 0x4FC1, 96127 }, { 0x4FC2, 96149 }, { 0x4FC3, 96159 }, { 0x4FC4, 96144 }, { 0x4FC5, 96164 }, { 0x4FC6, 96154 }, { 0x4FC7, 96132 }, { 0x4FC8, 96137 }, { 0x4FC9, 96169 }, { 0x4FCA, 96911 }, { 0x4FCB, 96914 }, { 0x4FCC, 95100 }, { 0x4FCD, 95103 }, { 0x4FCE, 95112 }, { 0x4FCF, 95123 }, { 0x4FD0, 96917 }, { 0x4FD1, 96176 }, { 0x4FD2, 96920 }, { 0x4FD3, 97184 }, { 0x4FD4, 97486 }, { 0x4FD5, 96179 }, { 0x4FD6, 96182 }, { 0x4FD7, 96187 }, { 0x4FD8, 96192 }, { 0x4FD9, 96195 }, { 0x4FDA, 96200 }, { 0x4FDB, 96241 }, { 0x4FDC, 96205 }, { 0x4FDD, 96210 }, { 0x4FDE, 96215 }, { 0x4FDF, 96220 }, { 0x4FE0, 96246 }, { 0x4FE1, 96226 }, { 0x4FE2, 96231 }, { 0x4FE3, 96236 }, { 0x4FE4, 97187 }, { 0x4FE5, 96251 }, { 0x4FE6, 96262 }, { 0x4FE7, 96254 }, { 0x4FE8, 96923 }, { 0x4FE9, 95149 }, { 0x4FEA, 95152 }, { 0x4FEB, 96266 }, { 0x4FEC, 97190 }, { 0x4FED, 93217 }, { 0x4FEE, 93220 }, { 0x4FEF, 95158 }, { 0x4FF0, 96283 }, { 0x4FF1, 96286 }, { 0x4FF2, 96292 }, { 0x4FF3, 96926 }, { 0x4FF4, 93229 }, { 0x4FF5, 93232 }, { 0x4FF6, 95161 }, { 0x4FF7, 96295 }, { 0x4FF8, 96929 }, { 0x4FF9, 95164 }, { 0x4FFA, 97193 }, { 0x4FFB, 95167 }, { 0x4FFC, 96298 }, { 0x4FFD, 93237 }, { 0x4FFE, 93254 }, { 0x4FFF, 93244 }, { 0x5000, 93249 }, { 0x5001, 93240 }, { 0x5002, 95170 }, { 0x5003, 95173 }, { 0x5004, 95184 }, { 0x5005, 95188 }, { 0x5006, 95191 }, { 0x5007, 95201 }, { 0x5008, 95206 }, { 0x5009, 95211 }, { 0x500A, 95216 }, { 0x500B, 95196 }, { 0x500C, 96301 }, { 0x500D, 95221 }, { 0x500E, 93258 }, { 0x500F, 93261 }, { 0x5010, 93265 }, { 0x5011, 93268 }, { 0x5012, 95227 }, { 0x5013, 95230 }, { 0x5014, 95249 }, { 0x5015, 95233 }, { 0x5016, 95238 }, { 0x5017, 93272 }, { 0x5018, 96309 }, { 0x5019, 95254 }, { 0x501A, 95257 }, { 0x501B, 95272 }, { 0x501C, 95275 }, { 0x501D, 92144 }, { 0x501E, 92156 }, { 0x501F, 92151 }, { 0x5020, 92170 }, { 0x5021, 92181 }, { 0x5022, 92160 }, { 0x5023, 93275 }, { 0x5024, 93278 }, { 0x5025, 93281 }, { 0x5026, 93317 }, { 0x5027, 93312 }, { 0x5028, 93307 }, { 0x5029, 93288 }, { 0x502A, 93297 }, { 0x502B, 93284 }, { 0x502C, 93321 }, { 0x502D, 93325 }, { 0x502E, 96312 }, { 0x502F, 93331 }, { 0x5030, 93356 }, { 0x5031, 93344 }, { 0x5032, 93351 }, { 0x5033, 93334 }, { 0x5034, 96932 }, { 0x5035, 96315 }, { 0x5036, 96323 }, { 0x5037, 96318 }, { 0x5038, 93361 }, { 0x5039, 93364 }, { 0x503A, 93368 }, { 0x503B, 93375 }, { 0x503C, 93371 }, { 0x503D, 95283 }, { 0x503E, 95286 }, { 0x503F, 95293 }, { 0x5040, 95300 }, { 0x5041, 95305 }, { 0x5042, 95334 }, { 0x5043, 95310 }, { 0x5044, 95322 }, { 0x5045, 95315 }, { 0x5046, 95343 }, { 0x5047, 95346 }, { 0x5048, 96328 }, { 0x5049, 95349 }, { 0x504A, 95352 }, { 0x504B, 95475 }, { 0x504C, 95404 }, { 0x504D, 95409 }, { 0x504E, 95364 }, { 0x504F, 95414 }, { 0x5050, 95454 }, { 0x5051, 95419 }, { 0x5052, 95369 }, { 0x5053, 95374 }, { 0x5054, 95424 }, { 0x5055, 95379 }, { 0x5056, 95429 }, { 0x5057, 95384 }, { 0x5058, 95439 }, { 0x5059, 95444 }, { 0x505A, 95389 }, { 0x505B, 95449 }, { 0x505C, 95460 }, { 0x505D, 95394 }, { 0x505E, 95357 }, { 0x505F, 95399 }, { 0x5060, 95470 }, { 0x5061, 96935 }, { 0x5062, 96938 }, { 0x5063, 95485 }, { 0x5064, 95488 }, { 0x5065, 95493 }, { 0x5066, 95498 }, { 0x5067, 95503 }, { 0x5068, 96334 }, { 0x5069, 96331 }, { 0x506A, 97196 }, { 0x506B, 96943 }, { 0x506C, 95508 }, { 0x506D, 95511 }, { 0x506E, 95516 }, { 0x506F, 93380 }, { 0x5070, 93383 }, { 0x5071, 93387 }, { 0x5072, 95522 }, { 0x5073, 96337 }, { 0x5074, 95525 }, { 0x5075, 93393 }, { 0x5076, 93396 }, { 0x5077, 95528 }, { 0x5078, 95531 }, { 0x5079, 95534 }, { 0x507A, 95539 }, { 0x507B, 96340 }, { 0x507C, 93401 }, { 0x507D, 95542 }, { 0x507E, 95545 }, { 0x507F, 96946 }, { 0x5080, 95557 }, { 0x5081, 94545 }, { 0x5082, 92224 }, { 0x5083, 93414 }, { 0x5084, 95566 }, { 0x5085, 93617 }, { 0x5086, 95596 }, { 0x5087, 95610 }, { 0x5088, 93723 }, { 0x5089, 95728 }, { 0x508A, 95751 }, { 0x508B, 93934 }, { 0x508C, 94272 }, { 0x508D, 95863 }, { 0x508E, 94394 }, { 0x508F, 95969 }, { 0x5090, 93020 }, { 0x5091, 92958 }, { 0x5092, 92979 }, { 0x5093, 92883 }, { 0x5094, 92734 }, { 0x5095, 92903 }, { 0x5096, 92809 }, { 0x5097, 93008 }, { 0x5098, 92829 }, { 0x5099, 92943 }, { 0x509A, 96480 }, { 0x509B, 94780 }, { 0x509C, 94718 }, { 0x509D, 94703 }, { 0x509E, 96022 }, { 0x509F, 96793 }, { 0x50A0, 94850 }, { 0x50A1, 94880 }, { 0x50A2, 96097 }, { 0x50A3, 97089 }, { 0x50A4, 97047 }, { 0x50A5, 96115 }, { 0x50A6, 96884 }, { 0x50A7, 96121 }, { 0x50A8, 95023 }, { 0x50A9, 95224 }, { 0x50AA, 93339 }, { 0x50AB, 92147 }, { 0x50AC, 97616 }, { 0x50AD, 98020 }, { 0x50AE, 97759 }, { 0x50AF, 97688 }, { 0x50B0, 97583 }, { 0x50B1, 97961 }, { 0x50B2, 97915 }, { 0x50B3, 97854 }, { 0x50B4, 98048 }, { 0x50B5, 97787 }, { 0x50B6, 97716 }, { 0x50B7, 97594 }, { 0x50B8, 97966 }, { 0x50B9, 97920 }, { 0x50BA, 97859 }, { 0x50BB, 97747 }, { 0x50BC, 97676 }, { 0x50BD, 97571 }, { 0x50BE, 97949 }, { 0x50BF, 97903 }, { 0x50C0, 97842 }, { 0x50C1, 97524 }, { 0x50C2, 97642 }, { 0x50C3, 98053 }, { 0x50C4, 97792 }, { 0x50C5, 97721 }, { 0x50C6, 97599 }, { 0x50C7, 97971 }, { 0x50C8, 97925 }, { 0x50C9, 97864 }, { 0x50CA, 97529 }, { 0x50CB, 97647 }, { 0x50CC, 98058 }, { 0x50CD, 97797 }, { 0x50CE, 97726 }, { 0x50CF, 97652 }, { 0x50D0, 98063 }, { 0x50D1, 98068 }, { 0x50D2, 97802 }, { 0x50D3, 97731 }, { 0x50D4, 97604 }, { 0x50D5, 97976 }, { 0x50D6, 97930 }, { 0x50D7, 97869 }, { 0x50D8, 97534 }, { 0x50D9, 97657 }, { 0x50DA, 98075 }, { 0x50DB, 98080 }, { 0x50DC, 97807 }, { 0x50DD, 97736 }, { 0x50DE, 98012 }, { 0x50DF, 98004 }, { 0x50E0, 97508 }, { 0x50E1, 97632 }, { 0x50E2, 98036 }, { 0x50E3, 98041 }, { 0x50E4, 97782 }, { 0x50E5, 97711 }, { 0x50E6, 98087 }, { 0x50E7, 98094 }, { 0x50E8, 97812 }, { 0x50E9, 97835 }, { 0x50EA, 97819 }, { 0x50EB, 97827 }, { 0x50EC, 97609 }, { 0x50ED, 97997 }, { 0x50EE, 97981 }, { 0x50EF, 97989 }, { 0x50F0, 97935 }, { 0x50F1, 97942 }, { 0x50F2, 97874 }, { 0x50F3, 97889 }, { 0x50F4, 97896 }, { 0x50F5, 97881 }, { 0x50F6, 97621 }, { 0x50F7, 98025 }, { 0x50F8, 97764 }, { 0x50F9, 97693 }, { 0x50FA, 97588 }, { 0x50FB, 97503 }, { 0x50FC, 97627 }, { 0x50FD, 98031 }, { 0x50FE, 97770 }, { 0x50FF, 97775 }, { 0x5100, 97699 }, { 0x5101, 97704 }, { 0x5102, 98127 }, { 0x5103, 98123 }, { 0x5104, 97519 }, { 0x5105, 97637 }, { 0x5106, 97539 }, { 0x5107, 97662 }, { 0x5108, 97741 }, { 0x5109, 97545 }, { 0x510A, 97668 }, { 0x510B, 97553 }, { 0x510C, 97559 }, { 0x510D, 97489 }, { 0x510E, 97496 }, { 0x510F, 97565 }, { 0x5110, 97513 }, { 0x5111, 98101 }, { 0x5112, 98107 }, { 0x5113, 98118 }, { 0x5114, 98113 }, { 0x5115, 97752 }, { 0x5116, 97681 }, { 0x5117, 97576 }, { 0x5118, 97954 }, { 0x5119, 97908 }, { 0x511A, 97847 }, { 0x511B, 98131 }, { 0x511C, 98153 }, { 0x511D, 98138 }, { 0x511E, 98143 }, { 0x511F, 98148 }, { 0x5120, 92229 }, { 0x5121, 92257 }, { 0x5122, 92275 }, { 0x5123, 93495 }, { 0x5124, 96965 }, { 0x5125, 96955 }, { 0x5126, 96960 }, { 0x5127, 92403 }, { 0x5128, 92418 }, { 0x5129, 93518 }, { 0x512A, 93700 }, { 0x512B, 93693 }, { 0x512C, 95602 }, { 0x512D, 93855 }, { 0x512E, 93777 }, { 0x512F, 93782 }, { 0x5130, 93789 }, { 0x5131, 93794 }, { 0x5132, 93860 }, { 0x5133, 93736 }, { 0x5134, 93741 }, { 0x5135, 93839 }, { 0x5136, 93845 }, { 0x5137, 93746 }, { 0x5138, 93751 }, { 0x5139, 93799 }, { 0x513A, 93865 }, { 0x513B, 93805 }, { 0x513C, 93870 }, { 0x513D, 93875 }, { 0x513E, 93882 }, { 0x513F, 93810 }, { 0x5140, 93815 }, { 0x5141, 93822 }, { 0x5142, 93850 }, { 0x5143, 93829 }, { 0x5144, 93756 }, { 0x5145, 93761 }, { 0x5146, 93766 }, { 0x5147, 93834 }, { 0x5148, 93771 }, { 0x5149, 92469 }, { 0x514A, 92474 }, { 0x514B, 96381 }, { 0x514C, 95648 }, { 0x514D, 95804 }, { 0x514E, 95780 }, { 0x514F, 95810 }, { 0x5150, 95786 }, { 0x5151, 95817 }, { 0x5152, 95792 }, { 0x5153, 95823 }, { 0x5154, 95798 }, { 0x5155, 95708 }, { 0x5156, 94332 }, { 0x5157, 94101 }, { 0x5158, 94119 }, { 0x5159, 94127 }, { 0x515A, 94284 }, { 0x515B, 93978 }, { 0x515C, 94139 }, { 0x515D, 94146 }, { 0x515E, 93988 }, { 0x515F, 94342 }, { 0x5160, 94216 }, { 0x5161, 94221 }, { 0x5162, 94228 }, { 0x5163, 94307 }, { 0x5164, 94028 }, { 0x5165, 94033 }, { 0x5166, 94040 }, { 0x5167, 94317 }, { 0x5168, 94327 }, { 0x5169, 95832 }, { 0x516A, 97202 }, { 0x516B, 95918 }, { 0x516C, 94404 }, { 0x516D, 94444 }, { 0x516E, 92569 }, { 0x516F, 92587 }, { 0x5170, 92714 }, { 0x5171, 92746 }, { 0x5172, 92690 }, { 0x5173, 92844 }, { 0x5174, 96566 }, { 0x5175, 97212 }, { 0x5176, 97215 }, { 0x5177, 97218 }, { 0x5178, 97221 }, { 0x5179, 97224 }, { 0x517A, 97227 }, { 0x517B, 97230 }, { 0x517C, 97233 }, { 0x517D, 97239 }, { 0x517E, 97242 }, { 0x517F, 97247 }, { 0x5180, 97250 }, { 0x5181, 97253 }, { 0x5182, 97256 }, { 0x5183, 97259 }, { 0x5184, 97262 }, { 0x5185, 97265 }, { 0x5186, 97268 }, { 0x5187, 97271 }, { 0x5188, 97274 }, { 0x5189, 97277 }, { 0x518A, 97280 }, { 0x518B, 97283 }, { 0x518C, 97286 }, { 0x518D, 97289 }, { 0x518E, 97292 }, { 0x518F, 97295 }, { 0x5190, 97298 }, { 0x5191, 97301 }, { 0x5192, 97304 }, { 0x5193, 97316 }, { 0x5194, 97321 }, { 0x5195, 97328 }, { 0x5196, 97309 }, { 0x5197, 97337 }, { 0x5198, 97340 }, { 0x5199, 97343 }, { 0x519A, 97346 }, { 0x519B, 97349 }, { 0x519C, 97352 }, { 0x519D, 97355 }, { 0x519E, 97358 }, { 0x519F, 97361 }, { 0x51A0, 97364 }, { 0x51A1, 97367 }, { 0x51A2, 97390 }, { 0x51A3, 97395 }, { 0x51A4, 97410 }, { 0x51A5, 97400 }, { 0x51A6, 97370 }, { 0x51A7, 97405 }, { 0x51A8, 97375 }, { 0x51A9, 97380 }, { 0x51AA, 97385 }, { 0x51AB, 97417 }, { 0x51AC, 97422 }, { 0x51AD, 97425 }, { 0x51AE, 97443 }, { 0x51AF, 97428 }, { 0x51B0, 97448 }, { 0x51B1, 97453 }, { 0x51B2, 97433 }, { 0x51B3, 97459 }, { 0x51B4, 97468 }, { 0x51B5, 97438 }, { 0x51B6, 97475 }, { 0x51B7, 97480 }, { 0x51B8, 97483 }, { 0x51B9, 94616 }, { 0x51BA, 94708 }, { 0x51BB, 94684 }, { 0x51BC, 94689 }, { 0x51BD, 94694 }, { 0x51BE, 94761 }, { 0x51BF, 93105 }, { 0x51C0, 96042 }, { 0x51C1, 96049 }, { 0x51C2, 97094 }, { 0x51C3, 97156 }, { 0x51C4, 97105 }, { 0x51C5, 97052 }, { 0x51C6, 97166 }, { 0x51C7, 97176 }, { 0x51C8, 97161 }, { 0x51C9, 97115 }, { 0x51CA, 97030 }, { 0x51CB, 97035 }, { 0x51CC, 97171 }, { 0x51CD, 94962 }, { 0x51CE, 94983 }, { 0x51CF, 95054 }, { 0x51D0, 95076 }, { 0x51D1, 96172 }, { 0x51D2, 95107 }, { 0x51D3, 95139 }, { 0x51D4, 95144 }, { 0x51D5, 95134 }, { 0x51D6, 96276 }, { 0x51D7, 96269 }, { 0x51D8, 93224 }, { 0x51D9, 96304 }, { 0x51DA, 95260 }, { 0x51DB, 95266 }, { 0x51DC, 95339 }, { 0x51DD, 95329 }, { 0x51DE, 95465 }, { 0x51DF, 95480 }, { 0x51E0, 95434 }, { 0x51E1, 95519 }, { 0x51E2, 93404 }, { 0x51E3, 95550 }, { 0x51E4, 75806 }, { 0x51E5, 75809 }, { 0x51E6, 75812 }, { 0x51E7, 75815 }, { 0x51E8, 75818 }, { 0x51E9, 78080 }, { 0x51EA, 75821 }, { 0x51EB, 78083 }, { 0x51EC, 78086 }, { 0x51ED, 75824 }, { 0x51EE, 75827 }, { 0x51EF, 75830 }, { 0x51F0, 75833 }, { 0x51F1, 75836 }, { 0x51F2, 75839 }, { 0x51F3, 75842 }, { 0x51F4, 75845 }, { 0x51F5, 78089 }, { 0x51F6, 75848 }, { 0x51F7, 75851 }, { 0x51F8, 75854 }, { 0x51F9, 78092 }, { 0x51FA, 75857 }, { 0x51FB, 75860 }, { 0x51FC, 75863 }, { 0x51FD, 75866 }, { 0x51FE, 75869 }, { 0x51FF, 75872 }, { 0x5200, 75875 }, { 0x5201, 75878 }, { 0x5202, 75881 }, { 0x5203, 75884 }, { 0x5204, 75887 }, { 0x5205, 75890 }, { 0x5206, 75893 }, { 0x5207, 75896 }, { 0x5208, 75899 }, { 0x5209, 78095 }, { 0x520A, 75902 }, { 0x520B, 75905 }, { 0x520C, 75908 }, { 0x520D, 75911 }, { 0x520E, 75914 }, { 0x520F, 75917 }, { 0x5210, 75920 }, { 0x5211, 75923 }, { 0x5212, 78098 }, { 0x5213, 75926 }, { 0x5214, 75929 }, { 0x5215, 78101 }, { 0x5216, 75932 }, { 0x5217, 78104 }, { 0x5218, 75935 }, { 0x5219, 75938 }, { 0x521A, 78107 }, { 0x521B, 75941 }, { 0x521C, 75944 }, { 0x521D, 75947 }, { 0x521E, 75950 }, { 0x521F, 75953 }, { 0x5220, 75956 }, { 0x5221, 75959 }, { 0x5222, 75962 }, { 0x5223, 75965 }, { 0x5224, 75968 }, { 0x5225, 75971 }, { 0x5226, 75974 }, { 0x5227, 75977 }, { 0x5228, 75980 }, { 0x5229, 75983 }, { 0x522A, 75986 }, { 0x522B, 75989 }, { 0x522C, 75992 }, { 0x522D, 75995 }, { 0x522E, 75998 }, { 0x522F, 76001 }, { 0x5230, 76004 }, { 0x5231, 76007 }, { 0x5232, 76010 }, { 0x5233, 76013 }, { 0x5234, 76016 }, { 0x5235, 76019 }, { 0x5236, 76022 }, { 0x5237, 76025 }, { 0x5238, 76028 }, { 0x5239, 78206 }, { 0x523A, 76031 }, { 0x523B, 76034 }, { 0x523C, 76037 }, { 0x523D, 76040 }, { 0x523E, 76043 }, { 0x523F, 76046 }, { 0x5240, 78209 }, { 0x5241, 78212 }, { 0x5242, 78215 }, { 0x5243, 76049 }, { 0x5244, 76052 }, { 0x5245, 76055 }, { 0x5246, 76058 }, { 0x5247, 76061 }, { 0x5248, 76064 }, { 0x5249, 76067 }, { 0x524A, 76070 }, { 0x524B, 78218 }, { 0x524C, 76073 }, { 0x524D, 76076 }, { 0x524E, 76079 }, { 0x524F, 76082 }, { 0x5250, 76085 }, { 0x5251, 76088 }, { 0x5252, 76091 }, { 0x5253, 76094 }, { 0x5254, 76097 }, { 0x5255, 76100 }, { 0x5256, 76103 }, { 0x5257, 76106 }, { 0x5258, 76109 }, { 0x5259, 76112 }, { 0x525A, 76115 }, { 0x525B, 76118 }, { 0x525C, 76121 }, { 0x525D, 76124 }, { 0x525E, 76127 }, { 0x525F, 76130 }, { 0x5260, 76133 }, { 0x5261, 76136 }, { 0x5262, 78221 }, { 0x5263, 76139 }, { 0x5264, 76142 }, { 0x5265, 76145 }, { 0x5266, 76148 }, { 0x5267, 76151 }, { 0x5268, 76154 }, { 0x5269, 76157 }, { 0x526A, 76160 }, { 0x526B, 76163 }, { 0x526C, 76166 }, { 0x526D, 76169 }, { 0x526E, 76172 }, { 0x526F, 76175 }, { 0x5270, 76178 }, { 0x5271, 76181 }, { 0x5272, 76184 }, { 0x5273, 76187 }, { 0x5274, 76190 }, { 0x5275, 76193 }, { 0x5276, 78224 }, { 0x5277, 76196 }, { 0x5278, 76199 }, { 0x5279, 76202 }, { 0x527A, 76205 }, { 0x527B, 78227 }, { 0x527C, 76208 }, { 0x527D, 76211 }, { 0x527E, 76214 }, { 0x527F, 78230 }, { 0x5280, 76217 }, { 0x5281, 76220 }, { 0x5282, 76223 }, { 0x5283, 76226 }, { 0x5284, 76229 }, { 0x5285, 76232 }, { 0x5286, 76235 }, { 0x5287, 76238 }, { 0x5288, 76241 }, { 0x5289, 76244 }, { 0x528A, 76247 }, { 0x528B, 76250 }, { 0x528C, 78233 }, { 0x528D, 76253 }, { 0x528E, 76256 }, { 0x528F, 78236 }, { 0x5290, 76259 }, { 0x5291, 76262 }, { 0x5292, 78239 }, { 0x5293, 78242 }, { 0x5294, 78245 }, { 0x5295, 78248 }, { 0x5296, 78251 }, { 0x5297, 78254 }, { 0x5298, 78257 }, { 0x5299, 78260 }, { 0x529A, 78263 }, { 0x529B, 76265 }, { 0x529C, 76268 }, { 0x529D, 78266 }, { 0x529E, 76271 }, { 0x529F, 76274 }, { 0x52A0, 78269 }, { 0x52A1, 76277 }, { 0x52A2, 76280 }, { 0x52A3, 76283 }, { 0x52A4, 76286 }, { 0x52A5, 76289 }, { 0x52A6, 76292 }, { 0x52A7, 76295 }, { 0x52A8, 76298 }, { 0x52A9, 76301 }, { 0x52AA, 76304 }, { 0x52AB, 76307 }, { 0x52AC, 76310 }, { 0x52AD, 76313 }, { 0x52AE, 78272 }, { 0x52AF, 78275 }, { 0x52B0, 78278 }, { 0x52B1, 78281 }, { 0x52B2, 78284 }, { 0x52B3, 78287 }, { 0x52B4, 78290 }, { 0x52B5, 78293 }, { 0x52B6, 76316 }, { 0x52B7, 76319 }, { 0x52B8, 76322 }, { 0x52B9, 76325 }, { 0x52BA, 76328 }, { 0x52BB, 76331 }, { 0x52BC, 76334 }, { 0x52BD, 76337 }, { 0x52BE, 78296 }, { 0x52BF, 76340 }, { 0x52C0, 78299 }, { 0x52C1, 76343 }, { 0x52C2, 76346 }, { 0x52C3, 76349 }, { 0x52C4, 76352 }, { 0x52C5, 76355 }, { 0x52C6, 76358 }, { 0x52C7, 76361 }, { 0x52C8, 78302 }, { 0x52C9, 76364 }, { 0x52CA, 78305 }, { 0x52CB, 76367 }, { 0x52CC, 76370 }, { 0x52CD, 76373 }, { 0x52CE, 78308 }, { 0x52CF, 76376 }, { 0x52D0, 76379 }, { 0x52D1, 76382 }, { 0x52D2, 76385 }, { 0x52D3, 76388 }, { 0x52D4, 76391 }, { 0x52D5, 76394 }, { 0x52D6, 76397 }, { 0x52D7, 78311 }, { 0x52D8, 76400 }, { 0x52D9, 76403 }, { 0x52DA, 76406 }, { 0x52DB, 76409 }, { 0x52DC, 76412 }, { 0x52DD, 76415 }, { 0x52DE, 78314 }, { 0x52DF, 76418 }, { 0x52E0, 76421 }, { 0x52E1, 76424 }, { 0x52E2, 76427 }, { 0x52E3, 78317 }, { 0x52E4, 76430 }, { 0x52E5, 76433 }, { 0x52E6, 76436 }, { 0x52E7, 76439 }, { 0x52E8, 76442 }, { 0x52E9, 76445 }, { 0x52EA, 76448 }, { 0x52EB, 76451 }, { 0x52EC, 76454 }, { 0x52ED, 76457 }, { 0x52EE, 76460 }, { 0x52EF, 76463 }, { 0x52F0, 78320 }, { 0x52F1, 76466 }, { 0x52F2, 76469 }, { 0x52F3, 76472 }, { 0x52F4, 76475 }, { 0x52F5, 76478 }, { 0x52F6, 76481 }, { 0x52F7, 76484 }, { 0x52F8, 76487 }, { 0x52F9, 78323 }, { 0x52FA, 76490 }, { 0x52FB, 76493 }, { 0x52FC, 76496 }, { 0x52FD, 76499 }, { 0x52FE, 76502 }, { 0x52FF, 76505 }, { 0x5300, 76508 }, { 0x5301, 76511 }, { 0x5302, 76514 }, { 0x5303, 76517 }, { 0x5304, 78326 }, { 0x5305, 76520 }, { 0x5306, 76523 }, { 0x5307, 76526 }, { 0x5308, 76529 }, { 0x5309, 76532 }, { 0x530A, 76535 }, { 0x530B, 78329 }, { 0x530C, 76538 }, { 0x530D, 78332 }, { 0x530E, 76541 }, { 0x530F, 76544 }, { 0x5310, 76547 }, { 0x5311, 76550 }, { 0x5312, 76553 }, { 0x5313, 76556 }, { 0x5314, 76559 }, { 0x5315, 78335 }, { 0x5316, 76562 }, { 0x5317, 78338 }, { 0x5318, 76565 }, { 0x5319, 78341 }, { 0x531A, 76568 }, { 0x531B, 76571 }, { 0x531C, 76574 }, { 0x531D, 76577 }, { 0x531E, 78344 }, { 0x531F, 78347 }, { 0x5320, 78350 }, { 0x5321, 76580 }, { 0x5322, 76583 }, { 0x5323, 76586 }, { 0x5324, 76589 }, { 0x5325, 76592 }, { 0x5326, 76595 }, { 0x5327, 76598 }, { 0x5328, 76601 }, { 0x5329, 78353 }, { 0x532A, 76604 }, { 0x532B, 78356 }, { 0x532C, 78359 }, { 0x532D, 76607 }, { 0x532E, 76610 }, { 0x532F, 76613 }, { 0x5330, 76616 }, { 0x5331, 78362 }, { 0x5332, 76619 }, { 0x5333, 76622 }, { 0x5334, 76625 }, { 0x5335, 76628 }, { 0x5336, 76631 }, { 0x5337, 76634 }, { 0x5338, 76637 }, { 0x5339, 76640 }, { 0x533A, 76643 }, { 0x533B, 78365 }, { 0x533C, 76646 }, { 0x533D, 76649 }, { 0x533E, 76652 }, { 0x533F, 76655 }, { 0x5340, 76658 }, { 0x5341, 76661 }, { 0x5342, 78368 }, { 0x5343, 76664 }, { 0x5344, 76667 }, { 0x5345, 76670 }, { 0x5346, 76673 }, { 0x5347, 76676 }, { 0x5348, 76679 }, { 0x5349, 76682 }, { 0x534A, 76685 }, { 0x534B, 76688 }, { 0x534C, 76691 }, { 0x534D, 78371 }, { 0x534E, 76694 }, { 0x534F, 78374 }, { 0x5350, 76697 }, { 0x5351, 76700 }, { 0x5352, 76703 }, { 0x5353, 76706 }, { 0x5354, 76709 }, { 0x5355, 76712 }, { 0x5356, 78377 }, { 0x5357, 76715 }, { 0x5358, 76718 }, { 0x5359, 78380 }, { 0x535A, 76721 }, { 0x535B, 76724 }, { 0x535C, 76727 }, { 0x535D, 76730 }, { 0x535E, 76733 }, { 0x535F, 76736 }, { 0x5360, 76739 }, { 0x5361, 76742 }, { 0x5362, 76745 }, { 0x5363, 76748 }, { 0x5364, 76751 }, { 0x5365, 76754 }, { 0x5366, 76757 }, { 0x5367, 76760 }, { 0x5368, 76763 }, { 0x5369, 78383 }, { 0x536A, 76766 }, { 0x536B, 76769 }, { 0x536C, 76772 }, { 0x536D, 76775 }, { 0x536E, 76778 }, { 0x536F, 76781 }, { 0x5370, 76784 }, { 0x5371, 78386 }, { 0x5372, 76787 }, { 0x5373, 76790 }, { 0x5374, 76793 }, { 0x5375, 76796 }, { 0x5376, 78389 }, { 0x5377, 76799 }, { 0x5378, 78392 }, { 0x5379, 76802 }, { 0x537A, 78395 }, { 0x537B, 76805 }, { 0x537C, 76808 }, { 0x537D, 76811 }, { 0x537E, 76814 }, { 0x537F, 76817 }, { 0x5380, 76820 }, { 0x5381, 76823 }, { 0x5382, 76826 }, { 0x5383, 76829 }, { 0x5384, 76832 }, { 0x5385, 76835 }, { 0x5386, 76838 }, { 0x5387, 76841 }, { 0x5388, 76844 }, { 0x5389, 78398 }, { 0x538A, 76847 }, { 0x538B, 76850 }, { 0x538C, 76853 }, { 0x538D, 76856 }, { 0x538E, 78401 }, { 0x538F, 76859 }, { 0x5390, 76862 }, { 0x5391, 76865 }, { 0x5392, 78404 }, { 0x5393, 78407 }, { 0x5394, 76868 }, { 0x5395, 76871 }, { 0x5396, 78410 }, { 0x5397, 76874 }, { 0x5398, 76877 }, { 0x5399, 76880 }, { 0x539A, 76883 }, { 0x539B, 76886 }, { 0x539C, 76889 }, { 0x539D, 76892 }, { 0x539E, 78413 }, { 0x539F, 76895 }, { 0x53A0, 76898 }, { 0x53A1, 78416 }, { 0x53A2, 78419 }, { 0x53A3, 78422 }, { 0x53A4, 78425 }, { 0x53A5, 78428 }, { 0x53A6, 78431 }, { 0x53A7, 78434 }, { 0x53A8, 78437 }, { 0x53A9, 76901 }, { 0x53AA, 76904 }, { 0x53AB, 76907 }, { 0x53AC, 78440 }, { 0x53AD, 76910 }, { 0x53AE, 78443 }, { 0x53AF, 76913 }, { 0x53B0, 78446 }, { 0x53B1, 76916 }, { 0x53B2, 76919 }, { 0x53B3, 76922 }, { 0x53B4, 76925 }, { 0x53B5, 76928 }, { 0x53B6, 78449 }, { 0x53B7, 76931 }, { 0x53B8, 76934 }, { 0x53B9, 78452 }, { 0x53BA, 76937 }, { 0x53BB, 76940 }, { 0x53BC, 76943 }, { 0x53BD, 76946 }, { 0x53BE, 78455 }, { 0x53BF, 76949 }, { 0x53C0, 76952 }, { 0x53C1, 76955 }, { 0x53C2, 78458 }, { 0x53C3, 76958 }, { 0x53C4, 76961 }, { 0x53C5, 78461 }, { 0x53C6, 78464 }, { 0x53C7, 76964 }, { 0x53C8, 76967 }, { 0x53C9, 76970 }, { 0x53CA, 76973 }, { 0x53CB, 76976 }, { 0x53CC, 76979 }, { 0x53CD, 76982 }, { 0x53CE, 78467 }, { 0x53CF, 76985 }, { 0x53D0, 76988 }, { 0x53D1, 76991 }, { 0x53D2, 76994 }, { 0x53D3, 76997 }, { 0x53D4, 77000 }, { 0x53D5, 77003 }, { 0x53D6, 77006 }, { 0x53D7, 77009 }, { 0x53D8, 77012 }, { 0x53D9, 77015 }, { 0x53DA, 77018 }, { 0x53DB, 77021 }, { 0x53DC, 77024 }, { 0x53DD, 77027 }, { 0x53DE, 77030 }, { 0x53DF, 77033 }, { 0x53E0, 77036 }, { 0x53E1, 77039 }, { 0x53E2, 77042 }, { 0x53E3, 77045 }, { 0x53E4, 77048 }, { 0x53E5, 78470 }, { 0x53E6, 78473 }, { 0x53E7, 77051 }, { 0x53E8, 77054 }, { 0x53E9, 77057 }, { 0x53EA, 77060 }, { 0x53EB, 77063 }, { 0x53EC, 77066 }, { 0x53ED, 77069 }, { 0x53EE, 78476 }, { 0x53EF, 77072 }, { 0x53F0, 77075 }, { 0x53F1, 77078 }, { 0x53F2, 77081 }, { 0x53F3, 77084 }, { 0x53F4, 77087 }, { 0x53F5, 77090 }, { 0x53F6, 77093 }, { 0x53F7, 78479 }, { 0x53F8, 77096 }, { 0x53F9, 78482 }, { 0x53FA, 77099 }, { 0x53FB, 78485 }, { 0x53FC, 77102 }, { 0x53FD, 77105 }, { 0x53FE, 78488 }, { 0x53FF, 77108 }, { 0x5400, 77111 }, { 0x5401, 77114 }, { 0x5402, 77117 }, { 0x5403, 77120 }, { 0x5404, 78491 }, { 0x5405, 78494 }, { 0x5406, 78497 }, { 0x5407, 78500 }, { 0x5408, 78503 }, { 0x5409, 79001 }, { 0x540A, 78506 }, { 0x540B, 78509 }, { 0x540C, 78512 }, { 0x540D, 78515 }, { 0x540E, 78518 }, { 0x540F, 78521 }, { 0x5410, 78524 }, { 0x5411, 78527 }, { 0x5412, 78530 }, { 0x5413, 78533 }, { 0x5414, 78536 }, { 0x5415, 78539 }, { 0x5416, 79004 }, { 0x5417, 78542 }, { 0x5418, 78545 }, { 0x5419, 78548 }, { 0x541A, 78551 }, { 0x541B, 78554 }, { 0x541C, 78557 }, { 0x541D, 78560 }, { 0x541E, 78563 }, { 0x541F, 78566 }, { 0x5420, 78569 }, { 0x5421, 78572 }, { 0x5422, 78575 }, { 0x5423, 78578 }, { 0x5424, 79007 }, { 0x5425, 78581 }, { 0x5426, 79010 }, { 0x5427, 78584 }, { 0x5428, 78587 }, { 0x5429, 78590 }, { 0x542A, 78593 }, { 0x542B, 78596 }, { 0x542C, 78599 }, { 0x542D, 78602 }, { 0x542E, 79013 }, { 0x542F, 78605 }, { 0x5430, 78608 }, { 0x5431, 78611 }, { 0x5432, 78614 }, { 0x5433, 79016 }, { 0x5434, 77123 }, { 0x5435, 78617 }, { 0x5436, 77126 }, { 0x5437, 77129 }, { 0x5438, 77132 }, { 0x5439, 77135 }, { 0x543A, 78620 }, { 0x543B, 77138 }, { 0x543C, 78623 }, { 0x543D, 78626 }, { 0x543E, 78629 }, { 0x543F, 78632 }, { 0x5440, 78635 }, { 0x5441, 78638 }, { 0x5442, 77141 }, { 0x5443, 77144 }, { 0x5444, 77147 }, { 0x5445, 77150 }, { 0x5446, 78641 }, { 0x5447, 78644 }, { 0x5448, 78647 }, { 0x5449, 77153 }, { 0x544A, 77156 }, { 0x544B, 77159 }, { 0x544C, 77162 }, { 0x544D, 77165 }, { 0x544E, 77168 }, { 0x544F, 77171 }, { 0x5450, 77174 }, { 0x5451, 77177 }, { 0x5452, 78650 }, { 0x5453, 77180 }, { 0x5454, 78653 }, { 0x5455, 77183 }, { 0x5456, 77186 }, { 0x5457, 77189 }, { 0x5458, 77192 }, { 0x5459, 78656 }, { 0x545A, 77195 }, { 0x545B, 78659 }, { 0x545C, 77198 }, { 0x545D, 77201 }, { 0x545E, 77204 }, { 0x545F, 77207 }, { 0x5460, 78662 }, { 0x5461, 77210 }, { 0x5462, 78665 }, { 0x5463, 77213 }, { 0x5464, 77216 }, { 0x5465, 77219 }, { 0x5466, 78668 }, { 0x5467, 77222 }, { 0x5468, 77225 }, { 0x5469, 77228 }, { 0x546A, 78671 }, { 0x546B, 78674 }, { 0x546C, 78677 }, { 0x546D, 78680 }, { 0x546E, 77231 }, { 0x546F, 77234 }, { 0x5470, 77237 }, { 0x5471, 77240 }, { 0x5472, 77243 }, { 0x5473, 77246 }, { 0x5474, 77249 }, { 0x5475, 77252 }, { 0x5476, 77255 }, { 0x5477, 77258 }, { 0x5478, 77261 }, { 0x5479, 77264 }, { 0x547A, 77267 }, { 0x547B, 77270 }, { 0x547C, 78683 }, { 0x547D, 78686 }, { 0x547E, 77273 }, { 0x547F, 77276 }, { 0x5480, 78689 }, { 0x5481, 77279 }, { 0x5482, 77282 }, { 0x5483, 78692 }, { 0x5484, 77285 }, { 0x5485, 77288 }, { 0x5486, 77291 }, { 0x5487, 77294 }, { 0x5488, 77297 }, { 0x5489, 77300 }, { 0x548A, 77303 }, { 0x548B, 77306 }, { 0x548C, 77309 }, { 0x548D, 77312 }, { 0x548E, 77315 }, { 0x548F, 77318 }, { 0x5490, 77321 }, { 0x5491, 77324 }, { 0x5492, 77327 }, { 0x5493, 77330 }, { 0x5494, 77333 }, { 0x5495, 78695 }, { 0x5496, 77336 }, { 0x5497, 78698 }, { 0x5498, 78701 }, { 0x5499, 77339 }, { 0x549A, 77342 }, { 0x549B, 77345 }, { 0x549C, 77348 }, { 0x549D, 77351 }, { 0x549E, 77354 }, { 0x549F, 77357 }, { 0x54A0, 78704 }, { 0x54A1, 77360 }, { 0x54A2, 77363 }, { 0x54A3, 77366 }, { 0x54A4, 77369 }, { 0x54A5, 77372 }, { 0x54A6, 77375 }, { 0x54A7, 78707 }, { 0x54A8, 77378 }, { 0x54A9, 77381 }, { 0x54AA, 77384 }, { 0x54AB, 77387 }, { 0x54AC, 77390 }, { 0x54AD, 77393 }, { 0x54AE, 77396 }, { 0x54AF, 77399 }, { 0x54B0, 77402 }, { 0x54B1, 77405 }, { 0x54B2, 77408 }, { 0x54B3, 77411 }, { 0x54B4, 77414 }, { 0x54B5, 77417 }, { 0x54B6, 77420 }, { 0x54B7, 78710 }, { 0x54B8, 77423 }, { 0x54B9, 77426 }, { 0x54BA, 77429 }, { 0x54BB, 77432 }, { 0x54BC, 78713 }, { 0x54BD, 77435 }, { 0x54BE, 77438 }, { 0x54BF, 77441 }, { 0x54C0, 77444 }, { 0x54C1, 77447 }, { 0x54C2, 77450 }, { 0x54C3, 77453 }, { 0x54C4, 77456 }, { 0x54C5, 78716 }, { 0x54C6, 78719 }, { 0x54C7, 77459 }, { 0x54C8, 77462 }, { 0x54C9, 77465 }, { 0x54CA, 78722 }, { 0x54CB, 77468 }, { 0x54CC, 77471 }, { 0x54CD, 77474 }, { 0x54CE, 77477 }, { 0x54CF, 77480 }, { 0x54D0, 77483 }, { 0x54D1, 77486 }, { 0x54D2, 77489 }, { 0x54D3, 77492 }, { 0x54D4, 78725 }, { 0x54D5, 78728 }, { 0x54D6, 77495 }, { 0x54D7, 77498 }, { 0x54D8, 77501 }, { 0x54D9, 77504 }, { 0x54DA, 77507 }, { 0x54DB, 77510 }, { 0x54DC, 77513 }, { 0x54DD, 77516 }, { 0x54DE, 77519 }, { 0x54DF, 78731 }, { 0x54E0, 77522 }, { 0x54E1, 77525 }, { 0x54E2, 77528 }, { 0x54E3, 77531 }, { 0x54E4, 77534 }, { 0x54E5, 77537 }, { 0x54E6, 77540 }, { 0x54E7, 77543 }, { 0x54E8, 77546 }, { 0x54E9, 77549 }, { 0x54EA, 77552 }, { 0x54EB, 77555 }, { 0x54EC, 77558 }, { 0x54ED, 77561 }, { 0x54EE, 78734 }, { 0x54EF, 77564 }, { 0x54F0, 77567 }, { 0x54F1, 77570 }, { 0x54F2, 77573 }, { 0x54F3, 78737 }, { 0x54F4, 77576 }, { 0x54F5, 78740 }, { 0x54F6, 77579 }, { 0x54F7, 78743 }, { 0x54F8, 77582 }, { 0x54F9, 77585 }, { 0x54FA, 78746 }, { 0x54FB, 77588 }, { 0x54FC, 77591 }, { 0x54FD, 77594 }, { 0x54FE, 77597 }, { 0x54FF, 77600 }, { 0x5500, 78749 }, { 0x5501, 77603 }, { 0x5502, 77606 }, { 0x5503, 77609 }, { 0x5504, 77612 }, { 0x5505, 77615 }, { 0x5506, 77618 }, { 0x5507, 77621 }, { 0x5508, 77624 }, { 0x5509, 77627 }, { 0x550A, 77630 }, { 0x550B, 77633 }, { 0x550C, 77636 }, { 0x550D, 77639 }, { 0x550E, 77642 }, { 0x550F, 77645 }, { 0x5510, 77648 }, { 0x5511, 78752 }, { 0x5512, 77651 }, { 0x5513, 78755 }, { 0x5514, 77654 }, { 0x5515, 77657 }, { 0x5516, 77660 }, { 0x5517, 77663 }, { 0x5518, 77666 }, { 0x5519, 77669 }, { 0x551A, 77672 }, { 0x551B, 77675 }, { 0x551C, 77678 }, { 0x551D, 78758 }, { 0x551E, 78761 }, { 0x551F, 77681 }, { 0x5520, 77684 }, { 0x5521, 77687 }, { 0x5522, 77690 }, { 0x5523, 77693 }, { 0x5524, 77696 }, { 0x5525, 77699 }, { 0x5526, 77702 }, { 0x5527, 77705 }, { 0x5528, 77708 }, { 0x5529, 77711 }, { 0x552A, 77714 }, { 0x552B, 77717 }, { 0x552C, 77720 }, { 0x552D, 77723 }, { 0x552E, 77726 }, { 0x552F, 77729 }, { 0x5530, 78764 }, { 0x5531, 77732 }, { 0x5532, 77735 }, { 0x5533, 77738 }, { 0x5534, 77741 }, { 0x5535, 77744 }, { 0x5536, 77747 }, { 0x5537, 78767 }, { 0x5538, 77750 }, { 0x5539, 77753 }, { 0x553A, 77756 }, { 0x553B, 78770 }, { 0x553C, 77759 }, { 0x553D, 77762 }, { 0x553E, 77765 }, { 0x553F, 77768 }, { 0x5540, 77771 }, { 0x5541, 77774 }, { 0x5542, 77777 }, { 0x5543, 77780 }, { 0x5544, 77783 }, { 0x5545, 77786 }, { 0x5546, 77789 }, { 0x5547, 78773 }, { 0x5548, 78776 }, { 0x5549, 78779 }, { 0x554A, 78782 }, { 0x554B, 78785 }, { 0x554C, 78788 }, { 0x554D, 78791 }, { 0x554E, 78794 }, { 0x554F, 78797 }, { 0x5550, 77792 }, { 0x5551, 78800 }, { 0x5552, 77795 }, { 0x5553, 77798 }, { 0x5554, 77801 }, { 0x5555, 77804 }, { 0x5556, 77807 }, { 0x5557, 78803 }, { 0x5558, 78806 }, { 0x5559, 77810 }, { 0x555A, 77813 }, { 0x555B, 77816 }, { 0x555C, 77819 }, { 0x555D, 78809 }, { 0x555E, 78812 }, { 0x555F, 78815 }, { 0x5560, 77822 }, { 0x5561, 78818 }, { 0x5562, 78821 }, { 0x5563, 77825 }, { 0x5564, 77828 }, { 0x5565, 77831 }, { 0x5566, 77834 }, { 0x5567, 77837 }, { 0x5568, 77840 }, { 0x5569, 77843 }, { 0x556A, 77846 }, { 0x556B, 78824 }, { 0x556C, 78827 }, { 0x556D, 78830 }, { 0x556E, 78833 }, { 0x556F, 78836 }, { 0x5570, 78839 }, { 0x5571, 78842 }, { 0x5572, 78845 }, { 0x5573, 78848 }, { 0x5574, 78851 }, { 0x5575, 78854 }, { 0x5576, 78857 }, { 0x5577, 77849 }, { 0x5578, 77852 }, { 0x5579, 77855 }, { 0x557A, 78860 }, { 0x557B, 77858 }, { 0x557C, 77861 }, { 0x557D, 77864 }, { 0x557E, 77867 }, { 0x557F, 77870 }, { 0x5580, 78863 }, { 0x5581, 77873 }, { 0x5582, 78866 }, { 0x5583, 77876 }, { 0x5584, 78869 }, { 0x5585, 77879 }, { 0x5586, 78872 }, { 0x5587, 77882 }, { 0x5588, 77885 }, { 0x5589, 78875 }, { 0x558A, 77888 }, { 0x558B, 77891 }, { 0x558C, 77894 }, { 0x558D, 77897 }, { 0x558E, 78878 }, { 0x558F, 77900 }, { 0x5590, 77903 }, { 0x5591, 77906 }, { 0x5592, 78881 }, { 0x5593, 77909 }, { 0x5594, 77912 }, { 0x5595, 77915 }, { 0x5596, 78884 }, { 0x5597, 77918 }, { 0x5598, 77921 }, { 0x5599, 77924 }, { 0x559A, 77927 }, { 0x559B, 77930 }, { 0x559C, 77933 }, { 0x559D, 78887 }, { 0x559E, 77936 }, { 0x559F, 78890 }, { 0x55A0, 77939 }, { 0x55A1, 77942 }, { 0x55A2, 77945 }, { 0x55A3, 77948 }, { 0x55A4, 78893 }, { 0x55A5, 77951 }, { 0x55A6, 77954 }, { 0x55A7, 77957 }, { 0x55A8, 78896 }, { 0x55A9, 77960 }, { 0x55AA, 78899 }, { 0x55AB, 77963 }, { 0x55AC, 77966 }, { 0x55AD, 77969 }, { 0x55AE, 77972 }, { 0x55AF, 77975 }, { 0x55B0, 77978 }, { 0x55B1, 78902 }, { 0x55B2, 77981 }, { 0x55B3, 77984 }, { 0x55B4, 77987 }, { 0x55B5, 77990 }, { 0x55B6, 77993 }, { 0x55B7, 78905 }, { 0x55B8, 78908 }, { 0x55B9, 77996 }, { 0x55BA, 77999 }, { 0x55BB, 78911 }, { 0x55BC, 78002 }, { 0x55BD, 78005 }, { 0x55BE, 78914 }, { 0x55BF, 78008 }, { 0x55C0, 78917 }, { 0x55C1, 78011 }, { 0x55C2, 78014 }, { 0x55C3, 78017 }, { 0x55C4, 78020 }, { 0x55C5, 78023 }, { 0x55C6, 78026 }, { 0x55C7, 78029 }, { 0x55C8, 78032 }, { 0x55C9, 78035 }, { 0x55CA, 78920 }, { 0x55CB, 78923 }, { 0x55CC, 78926 }, { 0x55CD, 78929 }, { 0x55CE, 78038 }, { 0x55CF, 78932 }, { 0x55D0, 78935 }, { 0x55D1, 78041 }, { 0x55D2, 78938 }, { 0x55D3, 78044 }, { 0x55D4, 78941 }, { 0x55D5, 78047 }, { 0x55D6, 78050 }, { 0x55D7, 78053 }, { 0x55D8, 78056 }, { 0x55D9, 78059 }, { 0x55DA, 78062 }, { 0x55DB, 78065 }, { 0x55DC, 78068 }, { 0x55DD, 78071 }, { 0x55DE, 78074 }, { 0x55DF, 78944 }, { 0x55E0, 78947 }, { 0x55E1, 78950 }, { 0x55E2, 78953 }, { 0x55E3, 78956 }, { 0x55E4, 78959 }, { 0x55E5, 78962 }, { 0x55E6, 78965 }, { 0x55E7, 78968 }, { 0x55E8, 78077 }, { 0x55E9, 78971 }, { 0x55EA, 78974 }, { 0x55EB, 78977 }, { 0x55EC, 78980 }, { 0x55ED, 78983 }, { 0x55EE, 78986 }, { 0x55EF, 78989 }, { 0x55F0, 78992 }, { 0x55F1, 78110 }, { 0x55F2, 78113 }, { 0x55F3, 78116 }, { 0x55F4, 78119 }, { 0x55F5, 78122 }, { 0x55F6, 78125 }, { 0x55F7, 78128 }, { 0x55F8, 78995 }, { 0x55F9, 78998 }, { 0x55FA, 78131 }, { 0x55FB, 78134 }, { 0x55FC, 78137 }, { 0x55FD, 78140 }, { 0x55FE, 78143 }, { 0x55FF, 78146 }, { 0x5600, 78149 }, { 0x5601, 78152 }, { 0x5602, 78155 }, { 0x5603, 78158 }, { 0x5604, 78161 }, { 0x5605, 78164 }, { 0x5606, 78167 }, { 0x5607, 78170 }, { 0x5608, 78173 }, { 0x5609, 78176 }, { 0x560A, 78179 }, { 0x560B, 78182 }, { 0x560C, 78185 }, { 0x560D, 78188 }, { 0x560E, 78191 }, { 0x560F, 78194 }, { 0x5610, 78197 }, { 0x5611, 78200 }, { 0x5612, 78203 }, { 0x5613, 86926 }, { 0x5614, 86929 }, { 0x5615, 86932 }, { 0x5616, 86935 }, { 0x5617, 86938 }, { 0x5618, 86941 }, { 0x5619, 86944 }, { 0x561A, 86947 }, { 0x561B, 86950 }, { 0x561C, 86953 }, { 0x561D, 88511 }, { 0x561E, 86956 }, { 0x561F, 86959 }, { 0x5620, 86962 }, { 0x5621, 86965 }, { 0x5622, 86968 }, { 0x5623, 86971 }, { 0x5624, 86974 }, { 0x5625, 86977 }, { 0x5626, 86980 }, { 0x5627, 86983 }, { 0x5628, 86986 }, { 0x5629, 86989 }, { 0x562A, 86992 }, { 0x562B, 86995 }, { 0x562C, 86998 }, { 0x562D, 87001 }, { 0x562E, 88514 }, { 0x562F, 87004 }, { 0x5630, 87007 }, { 0x5631, 87010 }, { 0x5632, 87013 }, { 0x5633, 87016 }, { 0x5634, 87019 }, { 0x5635, 87022 }, { 0x5636, 87025 }, { 0x5637, 87028 }, { 0x5638, 87031 }, { 0x5639, 87034 }, { 0x563A, 87037 }, { 0x563B, 87040 }, { 0x563C, 88517 }, { 0x563D, 87043 }, { 0x563E, 87046 }, { 0x563F, 88520 }, { 0x5640, 87049 }, { 0x5641, 87052 }, { 0x5642, 87055 }, { 0x5643, 87058 }, { 0x5644, 88523 }, { 0x5645, 87061 }, { 0x5646, 88526 }, { 0x5647, 88529 }, { 0x5648, 87064 }, { 0x5649, 87067 }, { 0x564A, 87070 }, { 0x564B, 87073 }, { 0x564C, 87076 }, { 0x564D, 87079 }, { 0x564E, 87082 }, { 0x564F, 87085 }, { 0x5650, 87088 }, { 0x5651, 87091 }, { 0x5652, 87094 }, { 0x5653, 87097 }, { 0x5654, 87100 }, { 0x5655, 87103 }, { 0x5656, 87106 }, { 0x5657, 87109 }, { 0x5658, 87112 }, { 0x5659, 87115 }, { 0x565A, 87118 }, { 0x565B, 87121 }, { 0x565C, 88532 }, { 0x565D, 88535 }, { 0x565E, 88538 }, { 0x565F, 87124 }, { 0x5660, 87127 }, { 0x5661, 87130 }, { 0x5662, 87133 }, { 0x5663, 87136 }, { 0x5664, 87139 }, { 0x5665, 87142 }, { 0x5666, 87145 }, { 0x5667, 87148 }, { 0x5668, 87151 }, { 0x5669, 87154 }, { 0x566A, 87157 }, { 0x566B, 87160 }, { 0x566C, 87163 }, { 0x566D, 87166 }, { 0x566E, 87169 }, { 0x566F, 87172 }, { 0x5670, 87175 }, { 0x5671, 87178 }, { 0x5672, 87181 }, { 0x5673, 87184 }, { 0x5674, 87187 }, { 0x5675, 87190 }, { 0x5676, 87193 }, { 0x5677, 87196 }, { 0x5678, 87199 }, { 0x5679, 87202 }, { 0x567A, 87205 }, { 0x567B, 87208 }, { 0x567C, 87211 }, { 0x567D, 87214 }, { 0x567E, 88541 }, { 0x567F, 87217 }, { 0x5680, 88544 }, { 0x5681, 87220 }, { 0x5682, 87223 }, { 0x5683, 88547 }, { 0x5684, 87226 }, { 0x5685, 88550 }, { 0x5686, 87229 }, { 0x5687, 88553 }, { 0x5688, 87232 }, { 0x5689, 87235 }, { 0x568A, 88556 }, { 0x568B, 88559 }, { 0x568C, 88562 }, { 0x568D, 87238 }, { 0x568E, 88565 }, { 0x568F, 88568 }, { 0x5690, 87241 }, { 0x5691, 87244 }, { 0x5692, 88571 }, { 0x5693, 88574 }, { 0x5694, 88577 }, { 0x5695, 87247 }, { 0x5696, 87250 }, { 0x5697, 87253 }, { 0x5698, 88580 }, { 0x5699, 88583 }, { 0x569A, 87256 }, { 0x569B, 87259 }, { 0x569C, 87262 }, { 0x569D, 87265 }, { 0x569E, 87268 }, { 0x569F, 88586 }, { 0x56A0, 87271 }, { 0x56A1, 87274 }, { 0x56A2, 87277 }, { 0x56A3, 87280 }, { 0x56A4, 87283 }, { 0x56A5, 87286 }, { 0x56A6, 87289 }, { 0x56A7, 87292 }, { 0x56A8, 87295 }, { 0x56A9, 87298 }, { 0x56AA, 88589 }, { 0x56AB, 87301 }, { 0x56AC, 87304 }, { 0x56AD, 87307 }, { 0x56AE, 87310 }, { 0x56AF, 87313 }, { 0x56B0, 87316 }, { 0x56B1, 87319 }, { 0x56B2, 87322 }, { 0x56B3, 87325 }, { 0x56B4, 87328 }, { 0x56B5, 88592 }, { 0x56B6, 87331 }, { 0x56B7, 87334 }, { 0x56B8, 87337 }, { 0x56B9, 87340 }, { 0x56BA, 87343 }, { 0x56BB, 87346 }, { 0x56BC, 87349 }, { 0x56BD, 87352 }, { 0x56BE, 87355 }, { 0x56BF, 87358 }, { 0x56C0, 87361 }, { 0x56C1, 87364 }, { 0x56C2, 87367 }, { 0x56C3, 87370 }, { 0x56C4, 87373 }, { 0x56C5, 87376 }, { 0x56C6, 87379 }, { 0x56C7, 87382 }, { 0x56C8, 87385 }, { 0x56C9, 87388 }, { 0x56CA, 87391 }, { 0x56CB, 87394 }, { 0x56CC, 87397 }, { 0x56CD, 87400 }, { 0x56CE, 87403 }, { 0x56CF, 87406 }, { 0x56D0, 87409 }, { 0x56D1, 87412 }, { 0x56D2, 87415 }, { 0x56D3, 87418 }, { 0x56D4, 87421 }, { 0x56D5, 87424 }, { 0x56D6, 87427 }, { 0x56D7, 87430 }, { 0x56D8, 87433 }, { 0x56D9, 87436 }, { 0x56DA, 87439 }, { 0x56DB, 87442 }, { 0x56DC, 87445 }, { 0x56DD, 87448 }, { 0x56DE, 87451 }, { 0x56DF, 87454 }, { 0x56E0, 87457 }, { 0x56E1, 87460 }, { 0x56E2, 87463 }, { 0x56E3, 87466 }, { 0x56E4, 87469 }, { 0x56E5, 87472 }, { 0x56E6, 87475 }, { 0x56E7, 87478 }, { 0x56E8, 87481 }, { 0x56E9, 87484 }, { 0x56EA, 87487 }, { 0x56EB, 87490 }, { 0x56EC, 87493 }, { 0x56ED, 87496 }, { 0x56EE, 87499 }, { 0x56EF, 87502 }, { 0x56F0, 87505 }, { 0x56F1, 87508 }, { 0x56F2, 87511 }, { 0x56F3, 87514 }, { 0x56F4, 87517 }, { 0x56F5, 87520 }, { 0x56F6, 87523 }, { 0x56F7, 87526 }, { 0x56F8, 87529 }, { 0x56F9, 88595 }, { 0x56FA, 88598 }, { 0x56FB, 87532 }, { 0x56FC, 87535 }, { 0x56FD, 87538 }, { 0x56FE, 87541 }, { 0x56FF, 87544 }, { 0x5700, 88601 }, { 0x5701, 87547 }, { 0x5702, 87550 }, { 0x5703, 88604 }, { 0x5704, 87553 }, { 0x5705, 87556 }, { 0x5706, 87559 }, { 0x5707, 87562 }, { 0x5708, 87565 }, { 0x5709, 87568 }, { 0x570A, 88607 }, { 0x570B, 87571 }, { 0x570C, 88610 }, { 0x570D, 87574 }, { 0x570E, 87577 }, { 0x570F, 87580 }, { 0x5710, 87583 }, { 0x5711, 87586 }, { 0x5712, 87589 }, { 0x5713, 87592 }, { 0x5714, 87595 }, { 0x5715, 87598 }, { 0x5716, 87601 }, { 0x5717, 87604 }, { 0x5718, 88613 }, { 0x5719, 87607 }, { 0x571A, 87610 }, { 0x571B, 87613 }, { 0x571C, 87616 }, { 0x571D, 87619 }, { 0x571E, 87622 }, { 0x571F, 87625 }, { 0x5720, 87628 }, { 0x5721, 87631 }, { 0x5722, 87634 }, { 0x5723, 87637 }, { 0x5724, 87640 }, { 0x5725, 87643 }, { 0x5726, 87646 }, { 0x5727, 87649 }, { 0x5728, 87652 }, { 0x5729, 87655 }, { 0x572A, 87658 }, { 0x572B, 87661 }, { 0x572C, 87664 }, { 0x572D, 87667 }, { 0x572E, 87670 }, { 0x572F, 87673 }, { 0x5730, 87676 }, { 0x5731, 87679 }, { 0x5732, 87682 }, { 0x5733, 87685 }, { 0x5734, 87688 }, { 0x5735, 87691 }, { 0x5736, 87694 }, { 0x5737, 87697 }, { 0x5738, 87700 }, { 0x5739, 87703 }, { 0x573A, 87706 }, { 0x573B, 87709 }, { 0x573C, 87712 }, { 0x573D, 87715 }, { 0x573E, 87718 }, { 0x573F, 87721 }, { 0x5740, 87724 }, { 0x5741, 88616 }, { 0x5742, 87727 }, { 0x5743, 87730 }, { 0x5744, 87733 }, { 0x5745, 87736 }, { 0x5746, 87739 }, { 0x5747, 87742 }, { 0x5748, 87745 }, { 0x5749, 87748 }, { 0x574A, 87751 }, { 0x574B, 87754 }, { 0x574C, 87757 }, { 0x574D, 87760 }, { 0x574E, 87763 }, { 0x574F, 87766 }, { 0x5750, 87769 }, { 0x5751, 87772 }, { 0x5752, 87775 }, { 0x5753, 87778 }, { 0x5754, 87781 }, { 0x5755, 87784 }, { 0x5756, 87787 }, { 0x5757, 87790 }, { 0x5758, 88619 }, { 0x5759, 87793 }, { 0x575A, 87796 }, { 0x575B, 87799 }, { 0x575C, 87802 }, { 0x575D, 87805 }, { 0x575E, 88622 }, { 0x575F, 87808 }, { 0x5760, 87811 }, { 0x5761, 87814 }, { 0x5762, 87817 }, { 0x5763, 87820 }, { 0x5764, 88625 }, { 0x5765, 87823 }, { 0x5766, 87826 }, { 0x5767, 87829 }, { 0x5768, 87832 }, { 0x5769, 87835 }, { 0x576A, 87838 }, { 0x576B, 87841 }, { 0x576C, 87844 }, { 0x576D, 87847 }, { 0x576E, 87850 }, { 0x576F, 88628 }, { 0x5770, 87853 }, { 0x5771, 87856 }, { 0x5772, 87859 }, { 0x5773, 87862 }, { 0x5774, 87865 }, { 0x5775, 87868 }, { 0x5776, 87871 }, { 0x5777, 87874 }, { 0x5778, 87877 }, { 0x5779, 87880 }, { 0x577A, 87883 }, { 0x577B, 87886 }, { 0x577C, 87889 }, { 0x577D, 87892 }, { 0x577E, 87895 }, { 0x577F, 87898 }, { 0x5780, 87901 }, { 0x5781, 87904 }, { 0x5782, 87907 }, { 0x5783, 87910 }, { 0x5784, 88631 }, { 0x5785, 87913 }, { 0x5786, 87916 }, { 0x5787, 88634 }, { 0x5788, 88637 }, { 0x5789, 88640 }, { 0x578A, 87919 }, { 0x578B, 87922 }, { 0x578C, 87925 }, { 0x578D, 87928 }, { 0x578E, 88643 }, { 0x578F, 88646 }, { 0x5790, 88649 }, { 0x5791, 87931 }, { 0x5792, 87934 }, { 0x5793, 87937 }, { 0x5794, 87940 }, { 0x5795, 87943 }, { 0x5796, 87946 }, { 0x5797, 87949 }, { 0x5798, 87952 }, { 0x5799, 87955 }, { 0x579A, 87958 }, { 0x579B, 87961 }, { 0x579C, 87964 }, { 0x579D, 87967 }, { 0x579E, 87970 }, { 0x579F, 87973 }, { 0x57A0, 87976 }, { 0x57A1, 87979 }, { 0x57A2, 87982 }, { 0x57A3, 87985 }, { 0x57A4, 87988 }, { 0x57A5, 87991 }, { 0x57A6, 87994 }, { 0x57A7, 87997 }, { 0x57A8, 88652 }, { 0x57A9, 88000 }, { 0x57AA, 88003 }, { 0x57AB, 88006 }, { 0x57AC, 88009 }, { 0x57AD, 88012 }, { 0x57AE, 88655 }, { 0x57AF, 88015 }, { 0x57B0, 88018 }, { 0x57B1, 88021 }, { 0x57B2, 88024 }, { 0x57B3, 88658 }, { 0x57B4, 88027 }, { 0x57B5, 88030 }, { 0x57B6, 88033 }, { 0x57B7, 88661 }, { 0x57B8, 88036 }, { 0x57B9, 88039 }, { 0x57BA, 88042 }, { 0x57BB, 88045 }, { 0x57BC, 88048 }, { 0x57BD, 88051 }, { 0x57BE, 88054 }, { 0x57BF, 88057 }, { 0x57C0, 88060 }, { 0x57C1, 88063 }, { 0x57C2, 88664 }, { 0x57C3, 88066 }, { 0x57C4, 88069 }, { 0x57C5, 88667 }, { 0x57C6, 88075 }, { 0x57C7, 88078 }, { 0x57C8, 88081 }, { 0x57C9, 88670 }, { 0x57CA, 88084 }, { 0x57CB, 88087 }, { 0x57CC, 88090 }, { 0x57CD, 88093 }, { 0x57CE, 88096 }, { 0x57CF, 88099 }, { 0x57D0, 88102 }, { 0x57D1, 88106 }, { 0x57D2, 88109 }, { 0x57D3, 88112 }, { 0x57D4, 88115 }, { 0x57D5, 88118 }, { 0x57D6, 88121 }, { 0x57D7, 88124 }, { 0x57D8, 88127 }, { 0x57D9, 88130 }, { 0x57DA, 88133 }, { 0x57DB, 88136 }, { 0x57DC, 88139 }, { 0x57DD, 88142 }, { 0x57DE, 88145 }, { 0x57DF, 88148 }, { 0x57E0, 88151 }, { 0x57E1, 88154 }, { 0x57E2, 88673 }, { 0x57E3, 88160 }, { 0x57E4, 88163 }, { 0x57E5, 88166 }, { 0x57E6, 88169 }, { 0x57E7, 88172 }, { 0x57E8, 88175 }, { 0x57E9, 88178 }, { 0x57EA, 88181 }, { 0x57EB, 88184 }, { 0x57EC, 88187 }, { 0x57ED, 88190 }, { 0x57EE, 88193 }, { 0x57EF, 88196 }, { 0x57F0, 88199 }, { 0x57F1, 88202 }, { 0x57F2, 88205 }, { 0x57F3, 88208 }, { 0x57F4, 88211 }, { 0x57F5, 88214 }, { 0x57F6, 88217 }, { 0x57F7, 88220 }, { 0x57F8, 88223 }, { 0x57F9, 88226 }, { 0x57FA, 88229 }, { 0x57FB, 88232 }, { 0x57FC, 88235 }, { 0x57FD, 88238 }, { 0x57FE, 88241 }, { 0x57FF, 88244 }, { 0x5800, 88247 }, { 0x5801, 88250 }, { 0x5802, 88253 }, { 0x5803, 88256 }, { 0x5804, 88259 }, { 0x5805, 88262 }, { 0x5806, 88265 }, { 0x5807, 88268 }, { 0x5808, 88271 }, { 0x5809, 88274 }, { 0x580A, 88277 }, { 0x580B, 88679 }, { 0x580C, 88280 }, { 0x580D, 88283 }, { 0x580E, 88286 }, { 0x580F, 88289 }, { 0x5810, 88292 }, { 0x5811, 88295 }, { 0x5812, 88298 }, { 0x5813, 88682 }, { 0x5814, 88301 }, { 0x5815, 88304 }, { 0x5816, 88307 }, { 0x5817, 88310 }, { 0x5818, 88313 }, { 0x5819, 88316 }, { 0x581A, 88319 }, { 0x581B, 88322 }, { 0x581C, 88325 }, { 0x581D, 88328 }, { 0x581E, 88331 }, { 0x581F, 88334 }, { 0x5820, 88337 }, { 0x5821, 88340 }, { 0x5822, 88343 }, { 0x5823, 88346 }, { 0x5824, 88349 }, { 0x5825, 88352 }, { 0x5826, 88355 }, { 0x5827, 88358 }, { 0x5828, 88361 }, { 0x5829, 88364 }, { 0x582A, 88367 }, { 0x582B, 88370 }, { 0x582C, 88373 }, { 0x582D, 88376 }, { 0x582E, 88379 }, { 0x582F, 88382 }, { 0x5830, 88385 }, { 0x5831, 88388 }, { 0x5832, 88391 }, { 0x5833, 88394 }, { 0x5834, 88397 }, { 0x5835, 88400 }, { 0x5836, 88403 }, { 0x5837, 88406 }, { 0x5838, 88409 }, { 0x5839, 88412 }, { 0x583A, 88415 }, { 0x583B, 88418 }, { 0x583C, 88421 }, { 0x583D, 88424 }, { 0x583E, 88427 }, { 0x583F, 88430 }, { 0x5840, 88433 }, { 0x5841, 88436 }, { 0x5842, 88439 }, { 0x5843, 88442 }, { 0x5844, 88445 }, { 0x5845, 88448 }, { 0x5846, 88451 }, { 0x5847, 88454 }, { 0x5848, 88457 }, { 0x5849, 88460 }, { 0x584A, 88463 }, { 0x584B, 88466 }, { 0x584C, 88469 }, { 0x584D, 88472 }, { 0x584E, 88475 }, { 0x584F, 88478 }, { 0x5850, 88481 }, { 0x5851, 88484 }, { 0x5852, 88487 }, { 0x5853, 88490 }, { 0x5854, 88493 }, { 0x5855, 88496 }, { 0x5856, 88499 }, { 0x5857, 88502 }, { 0x5858, 88505 }, { 0x5859, 88508 }, { 0x585A, 16235 }, { 0x585B, 16214 }, { 0x585C, 16097 }, { 0x585D, 16091 }, { 0x585E, 16046 }, { 0x585F, 16366 }, { 0x5860, 16209 }, { 0x5861, 16068 }, { 0x5862, 16280 }, { 0x5863, 16084 }, { 0x5864, 16077 }, { 0x5865, 16354 }, { 0x5866, 16018 }, { 0x5867, 16260 }, { 0x5868, 16338 }, { 0x5869, 16302 }, { 0x586A, 16358 }, { 0x586B, 16326 }, { 0x586C, 16318 }, { 0x586D, 16350 }, { 0x586E, 16264 }, { 0x586F, 16119 }, { 0x5870, 16362 }, { 0x5871, 16219 }, { 0x5872, 16031 }, { 0x5873, 16167 }, { 0x5874, 16298 }, { 0x5875, 16276 }, { 0x5876, 16342 }, { 0x5877, 16322 }, { 0x5878, 16041 }, { 0x5879, 16186 }, { 0x587A, 16003 }, { 0x587B, 16370 }, { 0x587C, 16172 }, { 0x587D, 16205 }, { 0x587E, 16256 }, { 0x587F, 16374 }, { 0x5880, 16310 }, { 0x5881, 16131 }, { 0x5882, 16013 }, { 0x5883, 16055 }, { 0x5884, 16073 }, { 0x5885, 16334 }, { 0x5886, 16151 }, { 0x5887, 16103 }, { 0x5888, 16240 }, { 0x5889, 16223 }, { 0x588A, 16290 }, { 0x588B, 16346 }, { 0x588C, 16248 }, { 0x588D, 16027 }, { 0x588E, 16378 }, { 0x588F, 16139 }, { 0x5890, 16306 }, { 0x5891, 16201 }, { 0x5892, 16244 }, { 0x5893, 16127 }, { 0x5894, 16107 }, { 0x5895, 16135 }, { 0x5896, 16111 }, { 0x5897, 16036 }, { 0x5898, 16286 }, { 0x5899, 16163 }, { 0x589A, 16195 }, { 0x589B, 16181 }, { 0x589C, 16272 }, { 0x589D, 16314 }, { 0x589E, 16330 }, { 0x589F, 16231 }, { 0x58A0, 16227 }, { 0x58A1, 16155 }, { 0x58A2, 16252 }, { 0x58A3, 16177 }, { 0x58A4, 16294 }, { 0x58A5, 16115 }, { 0x58A6, 16191 }, { 0x58A7, 16268 }, { 0x58A8, 16143 }, { 0x58A9, 16064 }, { 0x58AA, 16023 }, { 0x58AB, 16159 }, { 0x58AC, 16123 }, { 0x58AD, 16009 }, { 0x58AE, 16060 }, { 0x58AF, 16051 }, { 0x58B0, 16147 }, { 0x58B1, 16573 }, { 0x58B2, 16401 }, { 0x58B3, 16497 }, { 0x58B4, 16452 }, { 0x58B5, 16428 }, { 0x58B6, 16433 }, { 0x58B7, 16514 }, { 0x58B8, 16581 }, { 0x58B9, 16589 }, { 0x58BA, 16410 }, { 0x58BB, 16577 }, { 0x58BC, 16509 }, { 0x58BD, 16418 }, { 0x58BE, 16527 }, { 0x58BF, 16438 }, { 0x58C0, 16622 }, { 0x58C1, 16448 }, { 0x58C2, 16396 }, { 0x58C3, 16492 }, { 0x58C4, 16618 }, { 0x58C5, 16479 }, { 0x58C6, 16465 }, { 0x58C7, 16443 }, { 0x58C8, 16544 }, { 0x58C9, 16610 }, { 0x58CA, 16585 }, { 0x58CB, 16548 }, { 0x58CC, 16532 }, { 0x58CD, 16505 }, { 0x58CE, 16593 }, { 0x58CF, 16522 }, { 0x58D0, 16536 }, { 0x58D1, 16606 }, { 0x58D2, 16501 }, { 0x58D3, 16470 }, { 0x58D4, 16564 }, { 0x58D5, 16568 }, { 0x58D6, 16556 }, { 0x58D7, 16457 }, { 0x58D8, 16552 }, { 0x58D9, 16614 }, { 0x58DA, 16598 }, { 0x58DB, 16602 }, { 0x58DC, 16474 }, { 0x58DD, 16461 }, { 0x58DE, 16518 }, { 0x58DF, 16406 }, { 0x58E0, 16540 }, { 0x58E1, 16391 }, { 0x58E2, 16386 }, { 0x58E3, 16424 }, { 0x58E4, 16560 }, { 0x58E5, 16488 }, { 0x58E6, 16382 }, { 0x58E7, 16414 }, { 0x58E8, 16484 }, { 0x58E9, 16878 }, { 0x58EA, 16704 }, { 0x58EB, 16728 }, { 0x58EC, 17021 }, { 0x58ED, 16866 }, { 0x58EE, 17025 }, { 0x58EF, 16874 }, { 0x58F0, 16920 }, { 0x58F1, 17001 }, { 0x58F2, 16842 }, { 0x58F3, 16815 }, { 0x58F4, 16699 }, { 0x58F5, 16850 }, { 0x58F6, 16985 }, { 0x58F7, 16948 }, { 0x58F8, 16754 }, { 0x58F9, 17029 }, { 0x58FA, 16736 }, { 0x58FB, 16924 }, { 0x58FC, 16644 }, { 0x58FD, 16904 }, { 0x58FE, 16763 }, { 0x58FF, 16981 }, { 0x5900, 16759 }, { 0x5901, 16838 }, { 0x5902, 16928 }, { 0x5903, 16653 }, { 0x5904, 16821 }, { 0x5905, 16862 }, { 0x5906, 16989 }, { 0x5907, 16891 }, { 0x5908, 16829 }, { 0x5909, 16912 }, { 0x590A, 16972 }, { 0x590B, 16834 }, { 0x590C, 17009 }, { 0x590D, 16635 }, { 0x590E, 16807 }, { 0x590F, 16952 }, { 0x5910, 16679 }, { 0x5911, 17005 }, { 0x5912, 16968 }, { 0x5913, 17013 }, { 0x5914, 16993 }, { 0x5915, 16870 }, { 0x5916, 16649 }, { 0x5917, 16858 }, { 0x5918, 16695 }, { 0x5919, 16895 }, { 0x591A, 16732 }, { 0x591B, 17017 }, { 0x591C, 16940 }, { 0x591D, 16640 }, { 0x591E, 16883 }, { 0x591F, 16675 }, { 0x5920, 16997 }, { 0x5921, 16899 }, { 0x5922, 16956 }, { 0x5923, 16667 }, { 0x5924, 16787 }, { 0x5925, 16846 }, { 0x5926, 16944 }, { 0x5927, 16626 }, { 0x5928, 16671 }, { 0x5929, 16795 }, { 0x592A, 16791 }, { 0x592B, 16720 }, { 0x592C, 16977 }, { 0x592D, 16799 }, { 0x592E, 16811 }, { 0x592F, 16744 }, { 0x5930, 16803 }, { 0x5931, 16775 }, { 0x5932, 16630 }, { 0x5933, 16724 }, { 0x5934, 16779 }, { 0x5935, 16908 }, { 0x5936, 16960 }, { 0x5937, 16687 }, { 0x5938, 16932 }, { 0x5939, 16936 }, { 0x593A, 16964 }, { 0x593B, 16854 }, { 0x593C, 16740 }, { 0x593D, 16749 }, { 0x593E, 16916 }, { 0x593F, 16887 }, { 0x5940, 16767 }, { 0x5941, 16771 }, { 0x5942, 16825 }, { 0x5943, 16657 }, { 0x5944, 16662 }, { 0x5945, 16783 }, { 0x5946, 16691 }, { 0x5947, 16683 }, { 0x5948, 16712 }, { 0x5949, 16708 }, { 0x594A, 16716 }, { 0x594B, 17208 }, { 0x594C, 17163 }, { 0x594D, 17093 }, { 0x594E, 17220 }, { 0x594F, 17361 }, { 0x5950, 17195 }, { 0x5951, 17357 }, { 0x5952, 17369 }, { 0x5953, 17489 }, { 0x5954, 17260 }, { 0x5955, 17389 }, { 0x5956, 17353 }, { 0x5957, 17280 }, { 0x5958, 17349 }, { 0x5959, 17501 }, { 0x595A, 17300 }, { 0x595B, 17453 }, { 0x595C, 17244 }, { 0x595D, 17147 }, { 0x595E, 17065 }, { 0x595F, 17485 }, { 0x5960, 17183 }, { 0x5961, 17131 }, { 0x5962, 17333 }, { 0x5963, 17341 }, { 0x5964, 17465 }, { 0x5965, 17216 }, { 0x5966, 17449 }, { 0x5967, 17167 }, { 0x5968, 17481 }, { 0x5969, 17316 }, { 0x596A, 17477 }, { 0x596B, 17057 }, { 0x596C, 17171 }, { 0x596D, 17433 }, { 0x596E, 17497 }, { 0x596F, 17236 }, { 0x5970, 17469 }, { 0x5971, 17401 }, { 0x5972, 17240 }, { 0x5973, 17224 }, { 0x5974, 17409 }, { 0x5975, 17272 }, { 0x5976, 17413 }, { 0x5977, 17089 }, { 0x5978, 17085 }, { 0x5979, 17437 }, { 0x597A, 17199 }, { 0x597B, 17321 }, { 0x597C, 17264 }, { 0x597D, 17457 }, { 0x597E, 17143 }, { 0x597F, 17393 }, { 0x5980, 17175 }, { 0x5981, 17276 }, { 0x5982, 17385 }, { 0x5983, 17493 }, { 0x5984, 17405 }, { 0x5985, 17441 }, { 0x5986, 17179 }, { 0x5987, 17109 }, { 0x5988, 17445 }, { 0x5989, 17268 }, { 0x598A, 17077 }, { 0x598B, 17417 }, { 0x598C, 17337 }, { 0x598D, 17473 }, { 0x598E, 17308 }, { 0x598F, 17101 }, { 0x5990, 17312 }, { 0x5991, 17232 }, { 0x5992, 17377 }, { 0x5993, 17292 }, { 0x5994, 17069 }, { 0x5995, 17421 }, { 0x5996, 17429 }, { 0x5997, 17304 }, { 0x5998, 17212 }, { 0x5999, 17073 }, { 0x599A, 17248 }, { 0x599B, 17296 }, { 0x599C, 17461 }, { 0x599D, 17345 }, { 0x599E, 17191 }, { 0x599F, 17425 }, { 0x59A0, 17373 }, { 0x59A1, 17365 }, { 0x59A2, 17397 }, { 0x59A3, 17037 }, { 0x59A4, 17117 }, { 0x59A5, 17155 }, { 0x59A6, 17159 }, { 0x59A7, 17097 }, { 0x59A8, 17127 }, { 0x59A9, 17325 }, { 0x59AA, 17329 }, { 0x59AB, 17033 }, { 0x59AC, 17151 }, { 0x59AD, 17041 }, { 0x59AE, 17284 }, { 0x59AF, 17381 }, { 0x59B0, 17187 }, { 0x59B1, 17049 }, { 0x59B2, 17139 }, { 0x59B3, 17252 }, { 0x59B4, 17105 }, { 0x59B5, 17045 }, { 0x59B6, 17288 }, { 0x59B7, 17113 }, { 0x59B8, 17228 }, { 0x59B9, 17081 }, { 0x59BA, 17122 }, { 0x59BB, 17053 }, { 0x59BC, 17256 }, { 0x59BD, 17203 }, { 0x59BE, 17135 }, { 0x59BF, 17061 }, { 0x59C0, 17849 }, { 0x59C1, 17955 }, { 0x59C2, 18003 }, { 0x59C3, 17606 }, { 0x59C4, 17740 }, { 0x59C5, 17810 }, { 0x59C6, 17664 }, { 0x59C7, 17700 }, { 0x59C8, 17680 }, { 0x59C9, 18087 }, { 0x59CA, 17857 }, { 0x59CB, 17926 }, { 0x59CC, 17708 }, { 0x59CD, 17861 }, { 0x59CE, 17999 }, { 0x59CF, 17748 }, { 0x59D0, 17688 }, { 0x59D1, 18135 }, { 0x59D2, 17902 }, { 0x59D3, 17724 }, { 0x59D4, 17802 }, { 0x59D5, 17614 }, { 0x59D6, 18083 }, { 0x59D7, 17865 }, { 0x59D8, 17818 }, { 0x59D9, 18075 }, { 0x59DA, 17869 }, { 0x59DB, 18039 }, { 0x59DC, 18091 }, { 0x59DD, 18035 }, { 0x59DE, 17906 }, { 0x59DF, 17684 }, { 0x59E0, 18115 }, { 0x59E1, 17826 }, { 0x59E2, 17991 }, { 0x59E3, 18139 }, { 0x59E4, 18123 }, { 0x59E5, 17626 }, { 0x59E6, 17814 }, { 0x59E7, 18107 }, { 0x59E8, 17853 }, { 0x59E9, 17950 }, { 0x59EA, 17692 }, { 0x59EB, 17672 }, { 0x59EC, 17844 }, { 0x59ED, 18143 }, { 0x59EE, 17975 }, { 0x59EF, 17987 }, { 0x59F0, 17959 }, { 0x59F1, 18059 }, { 0x59F2, 17574 }, { 0x59F3, 18051 }, { 0x59F4, 17995 }, { 0x59F5, 18047 }, { 0x59F6, 18095 }, { 0x59F7, 18055 }, { 0x59F8, 17963 }, { 0x59F9, 17806 }, { 0x59FA, 17578 }, { 0x59FB, 17946 }, { 0x59FC, 18103 }, { 0x59FD, 18131 }, { 0x59FE, 18127 }, { 0x59FF, 18011 }, { 0x5A00, 17822 }, { 0x5A01, 17894 }, { 0x5A02, 17882 }, { 0x5A03, 17782 }, { 0x5A04, 17732 }, { 0x5A05, 17798 }, { 0x5A06, 17752 }, { 0x5A07, 17659 }, { 0x5A08, 17756 }, { 0x5A09, 18007 }, { 0x5A0A, 18015 }, { 0x5A0B, 18043 }, { 0x5A0C, 17979 }, { 0x5A0D, 18071 }, { 0x5A0E, 17594 }, { 0x5A0F, 17983 }, { 0x5A10, 18027 }, { 0x5A11, 17598 }, { 0x5A12, 17622 }, { 0x5A13, 18119 }, { 0x5A14, 17786 }, { 0x5A15, 17517 }, { 0x5A16, 17890 }, { 0x5A17, 17910 }, { 0x5A18, 17967 }, { 0x5A19, 18111 }, { 0x5A1A, 17654 }, { 0x5A1B, 17898 }, { 0x5A1C, 17922 }, { 0x5A1D, 17830 }, { 0x5A1E, 17778 }, { 0x5A1F, 17646 }, { 0x5A20, 17834 }, { 0x5A21, 18067 }, { 0x5A22, 17521 }, { 0x5A23, 17642 }, { 0x5A24, 17930 }, { 0x5A25, 18023 }, { 0x5A26, 17602 }, { 0x5A27, 17918 }, { 0x5A28, 17886 }, { 0x5A29, 18099 }, { 0x5A2A, 18019 }, { 0x5A2B, 17560 }, { 0x5A2C, 17526 }, { 0x5A2D, 17590 }, { 0x5A2E, 17873 }, { 0x5A2F, 17505 }, { 0x5A30, 17728 }, { 0x5A31, 17513 }, { 0x5A32, 17509 }, { 0x5A33, 17610 }, { 0x5A34, 17565 }, { 0x5A35, 17704 }, { 0x5A36, 17712 }, { 0x5A37, 17838 }, { 0x5A38, 17938 }, { 0x5A39, 17971 }, { 0x5A3A, 18031 }, { 0x5A3B, 18063 }, { 0x5A3C, 17765 }, { 0x5A3D, 17760 }, { 0x5A3E, 17774 }, { 0x5A3F, 17770 }, { 0x5A40, 17794 }, { 0x5A41, 17914 }, { 0x5A42, 17877 }, { 0x5A43, 17668 }, { 0x5A44, 17744 }, { 0x5A45, 17586 }, { 0x5A46, 17736 }, { 0x5A47, 17544 }, { 0x5A48, 17552 }, { 0x5A49, 17934 }, { 0x5A4A, 17676 }, { 0x5A4B, 18079 }, { 0x5A4C, 17650 }, { 0x5A4D, 17696 }, { 0x5A4E, 17942 }, { 0x5A4F, 17531 }, { 0x5A50, 17556 }, { 0x5A51, 17570 }, { 0x5A52, 17618 }, { 0x5A53, 17540 }, { 0x5A54, 17634 }, { 0x5A55, 17548 }, { 0x5A56, 17630 }, { 0x5A57, 17720 }, { 0x5A58, 17536 }, { 0x5A59, 17638 }, { 0x5A5A, 17716 }, { 0x5A5B, 17582 }, { 0x5A5C, 17790 }, { 0x5A5D, 18160 }, { 0x5A5E, 18152 }, { 0x5A5F, 18168 }, { 0x5A60, 18156 }, { 0x5A61, 18240 }, { 0x5A62, 18268 }, { 0x5A63, 18232 }, { 0x5A64, 18172 }, { 0x5A65, 18248 }, { 0x5A66, 18328 }, { 0x5A67, 18344 }, { 0x5A68, 18264 }, { 0x5A69, 18296 }, { 0x5A6A, 18348 }, { 0x5A6B, 18148 }, { 0x5A6C, 18260 }, { 0x5A6D, 18336 }, { 0x5A6E, 18200 }, { 0x5A6F, 18332 }, { 0x5A70, 18284 }, { 0x5A71, 18220 }, { 0x5A72, 18312 }, { 0x5A73, 18192 }, { 0x5A74, 18352 }, { 0x5A75, 18280 }, { 0x5A76, 18256 }, { 0x5A77, 18208 }, { 0x5A78, 18304 }, { 0x5A79, 18316 }, { 0x5A7A, 18308 }, { 0x5A7B, 18276 }, { 0x5A7C, 18236 }, { 0x5A7D, 18196 }, { 0x5A7E, 18188 }, { 0x5A7F, 18324 }, { 0x5A80, 18216 }, { 0x5A81, 18360 }, { 0x5A82, 18300 }, { 0x5A83, 18252 }, { 0x5A84, 18320 }, { 0x5A85, 18212 }, { 0x5A86, 18204 }, { 0x5A87, 18176 }, { 0x5A88, 18228 }, { 0x5A89, 18164 }, { 0x5A8A, 18292 }, { 0x5A8B, 18244 }, { 0x5A8C, 18180 }, { 0x5A8D, 18184 }, { 0x5A8E, 18288 }, { 0x5A8F, 18272 }, { 0x5A90, 18224 }, { 0x5A91, 18356 }, { 0x5A92, 18340 }, { 0x5A93, 6329 }, { 0x5A94, 6356 }, { 0x5A95, 6335 }, { 0x5A96, 6353 }, { 0x5A97, 6299 }, { 0x5A98, 6302 }, { 0x5A99, 6290 }, { 0x5A9A, 6362 }, { 0x5A9B, 6371 }, { 0x5A9C, 6347 }, { 0x5A9D, 6341 }, { 0x5A9E, 6338 }, { 0x5A9F, 6380 }, { 0x5AA0, 6314 }, { 0x5AA1, 6374 }, { 0x5AA2, 6359 }, { 0x5AA3, 6320 }, { 0x5AA4, 6317 }, { 0x5AA5, 6296 }, { 0x5AA6, 6326 }, { 0x5AA7, 6365 }, { 0x5AA8, 6377 }, { 0x5AA9, 6305 }, { 0x5AAA, 6332 }, { 0x5AAB, 6293 }, { 0x5AAC, 6308 }, { 0x5AAD, 6350 }, { 0x5AAE, 6311 }, { 0x5AAF, 6344 }, { 0x5AB0, 6323 }, { 0x5AB1, 6368 }, { 0x5AB2, 6275 }, { 0x5AB3, 6257 }, { 0x5AB4, 6263 }, { 0x5AB5, 6284 }, { 0x5AB6, 6269 }, { 0x5AB7, 6266 }, { 0x5AB8, 6260 }, { 0x5AB9, 6281 }, { 0x5ABA, 6278 }, { 0x5ABB, 6272 }, { 0x5ABC, 6255 }, { 0x5ABD, 6287 }, { 0x5ABE, 18483 }, { 0x5ABF, 18427 }, { 0x5AC0, 18439 }, { 0x5AC1, 18419 }, { 0x5AC2, 18467 }, { 0x5AC3, 18475 }, { 0x5AC4, 18459 }, { 0x5AC5, 18479 }, { 0x5AC6, 18491 }, { 0x5AC7, 18423 }, { 0x5AC8, 18487 }, { 0x5AC9, 18451 }, { 0x5ACA, 18455 }, { 0x5ACB, 18463 }, { 0x5ACC, 18411 }, { 0x5ACD, 18407 }, { 0x5ACE, 18471 }, { 0x5ACF, 18443 }, { 0x5AD0, 18403 }, { 0x5AD1, 18447 }, { 0x5AD2, 18495 }, { 0x5AD3, 18435 }, { 0x5AD4, 18499 }, { 0x5AD5, 18383 }, { 0x5AD6, 18395 }, { 0x5AD7, 18431 }, { 0x5AD8, 18399 }, { 0x5AD9, 18415 }, { 0x5ADA, 18387 }, { 0x5ADB, 18391 }, { 0x5ADC, 18513 }, { 0x5ADD, 18503 }, { 0x5ADE, 18508 }, { 0x5ADF, 18518 }, { 0x5AE0, 18523 }, { 0x5AE1, 18379 }, { 0x5AE2, 53294 }, { 0x5AE3, 53298 }, { 0x5AE4, 53230 }, { 0x5AE5, 53234 }, { 0x5AE6, 53278 }, { 0x5AE7, 53282 }, { 0x5AE8, 53246 }, { 0x5AE9, 53250 }, { 0x5AEA, 53222 }, { 0x5AEB, 53226 }, { 0x5AEC, 53270 }, { 0x5AED, 53274 }, { 0x5AEE, 53310 }, { 0x5AEF, 53314 }, { 0x5AF0, 53286 }, { 0x5AF1, 53290 }, { 0x5AF2, 53318 }, { 0x5AF3, 53322 }, { 0x5AF4, 53238 }, { 0x5AF5, 53242 }, { 0x5AF6, 53302 }, { 0x5AF7, 53306 }, { 0x5AF8, 53214 }, { 0x5AF9, 53218 }, { 0x5AFA, 53254 }, { 0x5AFB, 53258 }, { 0x5AFC, 53262 }, { 0x5AFD, 53266 }, { 0x5AFE, 53385 }, { 0x5AFF, 53429 }, { 0x5B00, 53369 }, { 0x5B01, 53365 }, { 0x5B02, 53413 }, { 0x5B03, 53381 }, { 0x5B04, 53409 }, { 0x5B05, 53417 }, { 0x5B06, 53393 }, { 0x5B07, 53401 }, { 0x5B08, 53373 }, { 0x5B09, 53397 }, { 0x5B0A, 53421 }, { 0x5B0B, 53405 }, { 0x5B0C, 53433 }, { 0x5B0D, 53425 }, { 0x5B0E, 53377 }, { 0x5B0F, 53357 }, { 0x5B10, 53389 }, { 0x5B11, 53361 }, { 0x5B12, 52976 }, { 0x5B13, 52961 }, { 0x5B14, 52971 }, { 0x5B15, 52981 }, { 0x5B16, 52986 }, { 0x5B17, 52966 }, { 0x5B18, 52991 }, { 0x5B19, 53089 }, { 0x5B1A, 53099 }, { 0x5B1B, 53048 }, { 0x5B1C, 53094 }, { 0x5B1D, 53074 }, { 0x5B1E, 53159 }, { 0x5B1F, 53144 }, { 0x5B20, 53149 }, { 0x5B21, 53154 }, { 0x5B22, 53084 }, { 0x5B23, 53114 }, { 0x5B24, 53079 }, { 0x5B25, 53000 }, { 0x5B26, 53132 }, { 0x5B27, 53031 }, { 0x5B28, 53198 }, { 0x5B29, 53174 }, { 0x5B2A, 53182 }, { 0x5B2B, 53210 }, { 0x5B2C, 53190 }, { 0x5B2D, 53186 }, { 0x5B2E, 53178 }, { 0x5B2F, 53206 }, { 0x5B30, 53202 }, { 0x5B31, 53194 }, { 0x5B32, 53336 }, { 0x5B33, 53345 }, { 0x5B34, 53331 }, { 0x5B35, 53349 }, { 0x5B36, 53340 }, { 0x5B37, 53326 }, { 0x5B38, 53353 }, { 0x5B39, 53069 }, { 0x5B3A, 53140 }, { 0x5B3B, 53053 }, { 0x5B3C, 53169 }, { 0x5B3D, 53105 }, { 0x5B3E, 53110 }, { 0x5B3F, 53124 }, { 0x5B40, 53136 }, { 0x5B41, 53128 }, { 0x5B42, 52996 }, { 0x5B43, 53164 }, { 0x5B44, 53119 }, { 0x5B45, 53065 }, { 0x5B46, 53057 }, { 0x5B47, 53061 }, { 0x5B48, 53017 }, { 0x5B49, 53011 }, { 0x5B4A, 53037 }, { 0x5B4B, 53042 }, { 0x5B4C, 53005 }, { 0x5B4D, 53025 }, { 0x5B4E, 52956 }, { 0x5B4F, 52946 }, { 0x5B50, 52886 }, { 0x5B51, 52916 }, { 0x5B52, 52951 }, { 0x5B53, 52876 }, { 0x5B54, 52906 }, { 0x5B55, 52921 }, { 0x5B56, 52931 }, { 0x5B57, 52936 }, { 0x5B58, 52926 }, { 0x5B59, 52911 }, { 0x5B5A, 52871 }, { 0x5B5B, 52891 }, { 0x5B5C, 52866 }, { 0x5B5D, 52901 }, { 0x5B5E, 52941 }, { 0x5B5F, 52881 }, { 0x5B60, 52896 }, { 0x5B61, 13653 }, { 0x5B62, 13626 }, { 0x5B63, 13678 }, { 0x5B64, 13742 }, { 0x5B65, 13647 }, { 0x5B66, 13727 }, { 0x5B67, 13844 }, { 0x5B68, 13632 }, { 0x5B69, 13665 }, { 0x5B6A, 13760 }, { 0x5B6B, 13662 }, { 0x5B6C, 13629 }, { 0x5B6D, 13694 }, { 0x5B6E, 13682 }, { 0x5B6F, 13757 }, { 0x5B70, 13709 }, { 0x5B71, 13650 }, { 0x5B72, 13733 }, { 0x5B73, 13686 }, { 0x5B74, 13848 }, { 0x5B75, 13736 }, { 0x5B76, 13790 }, { 0x5B77, 13644 }, { 0x5B78, 13724 }, { 0x5B79, 13721 }, { 0x5B7A, 13784 }, { 0x5B7B, 13796 }, { 0x5B7C, 13772 }, { 0x5B7D, 13817 }, { 0x5B7E, 13814 }, { 0x5B7F, 13641 }, { 0x5B80, 13635 }, { 0x5B81, 13674 }, { 0x5B82, 13656 }, { 0x5B83, 13745 }, { 0x5B84, 13730 }, { 0x5B85, 13787 }, { 0x5B86, 13852 }, { 0x5B87, 13638 }, { 0x5B88, 13671 }, { 0x5B89, 13715 }, { 0x5B8A, 13781 }, { 0x5B8B, 13802 }, { 0x5B8C, 13778 }, { 0x5B8D, 13739 }, { 0x5B8E, 13793 }, { 0x5B8F, 13799 }, { 0x5B90, 13775 }, { 0x5B91, 13702 }, { 0x5B92, 13698 }, { 0x5B93, 13860 }, { 0x5B94, 13748 }, { 0x5B95, 13751 }, { 0x5B96, 13763 }, { 0x5B97, 13805 }, { 0x5B98, 13754 }, { 0x5B99, 13712 }, { 0x5B9A, 13690 }, { 0x5B9B, 13659 }, { 0x5B9C, 13706 }, { 0x5B9D, 13766 }, { 0x5B9E, 13769 }, { 0x5B9F, 13808 }, { 0x5BA0, 13856 }, { 0x5BA1, 13811 }, { 0x5BA2, 13820 }, { 0x5BA3, 13668 }, { 0x5BA4, 13623 }, { 0x5BA5, 13718 }, { 0x5BA6, 13888 }, { 0x5BA7, 13433 }, { 0x5BA8, 13425 }, { 0x5BA9, 13429 }, { 0x5BAA, 13449 }, { 0x5BAB, 13481 }, { 0x5BAC, 13565 }, { 0x5BAD, 13493 }, { 0x5BAE, 13569 }, { 0x5BAF, 13465 }, { 0x5BB0, 13537 }, { 0x5BB1, 13553 }, { 0x5BB2, 13473 }, { 0x5BB3, 13453 }, { 0x5BB4, 13505 }, { 0x5BB5, 13573 }, { 0x5BB6, 13589 }, { 0x5BB7, 13457 }, { 0x5BB8, 13513 }, { 0x5BB9, 13581 }, { 0x5BBA, 13605 }, { 0x5BBB, 13525 }, { 0x5BBC, 13517 }, { 0x5BBD, 13521 }, { 0x5BBE, 13529 }, { 0x5BBF, 13585 }, { 0x5BC0, 13469 }, { 0x5BC1, 13545 }, { 0x5BC2, 13593 }, { 0x5BC3, 13609 }, { 0x5BC4, 13549 }, { 0x5BC5, 13597 }, { 0x5BC6, 13601 }, { 0x5BC7, 13477 }, { 0x5BC8, 13557 }, { 0x5BC9, 13485 }, { 0x5BCA, 13561 }, { 0x5BCB, 13577 }, { 0x5BCC, 13618 }, { 0x5BCD, 13509 }, { 0x5BCE, 13613 }, { 0x5BCF, 13489 }, { 0x5BD0, 13501 }, { 0x5BD1, 13497 }, { 0x5BD2, 13541 }, { 0x5BD3, 13461 }, { 0x5BD4, 13533 }, { 0x5BD5, 13446 }, { 0x5BD6, 13436 }, { 0x5BD7, 13440 }, { 0x5BD8, 13443 }, { 0x5BD9, 13823 }, { 0x5BDA, 13826 }, { 0x5BDB, 13829 }, { 0x5BDC, 13832 }, { 0x5BDD, 13835 }, { 0x5BDE, 13838 }, { 0x5BDF, 13841 }, { 0x5BE0, 13864 }, { 0x5BE1, 13868 }, { 0x5BE2, 13872 }, { 0x5BE3, 13876 }, { 0x5BE4, 13880 }, { 0x5BE5, 13884 }, { 0x5BE6, 55122 }, { 0x5BE7, 55125 }, { 0x5BE8, 55127 }, { 0x5BE9, 55129 }, { 0x5BEA, 55131 }, { 0x5BEB, 55133 }, { 0x5BEC, 55135 }, { 0x5BED, 55137 }, { 0x5BEE, 55139 }, { 0x5BEF, 55141 }, { 0x5BF0, 55143 }, { 0x5BF1, 55145 }, { 0x5BF2, 55147 }, { 0x5BF3, 55149 }, { 0x5BF4, 55151 }, { 0x5BF5, 55153 }, { 0x5BF6, 55155 }, { 0x5BF7, 55157 }, { 0x5BF8, 55159 }, { 0x5BF9, 55161 }, { 0x5BFA, 55163 }, { 0x5BFB, 55165 }, { 0x5BFC, 55167 }, { 0x5BFD, 55169 }, { 0x5BFE, 55171 }, { 0x5BFF, 55173 }, { 0x5C00, 55175 }, { 0x5C01, 55177 }, { 0x5C02, 55179 }, { 0x5C03, 55181 }, { 0x5C04, 55183 }, { 0x5C05, 55185 }, { 0x5C06, 55187 }, { 0x5C07, 55189 }, { 0x5C08, 55191 }, { 0x5C09, 55193 }, { 0x5C0A, 55195 }, { 0x5C0B, 55197 }, { 0x5C0C, 55199 }, { 0x5C0D, 55201 }, { 0x5C0E, 55203 }, { 0x5C0F, 55205 }, { 0x5C10, 55207 }, { 0x5C11, 55209 }, { 0x5C12, 55211 }, { 0x5C13, 55213 }, { 0x5C14, 55215 }, { 0x5C15, 55217 }, { 0x5C16, 55219 }, { 0x5C17, 55221 }, { 0x5C18, 55223 }, { 0x5C19, 55225 }, { 0x5C1A, 55227 }, { 0x5C1B, 55229 }, { 0x5C1C, 55231 }, { 0x5C1D, 55233 }, { 0x5C1E, 55235 }, { 0x5C1F, 55237 }, { 0x5C20, 55239 }, { 0x5C21, 55241 }, { 0x5C22, 55243 }, { 0x5C23, 55245 }, { 0x5C24, 55247 }, { 0x5C25, 55249 }, { 0x5C26, 55251 }, { 0x5C27, 55253 }, { 0x5C28, 55255 }, { 0x5C29, 55257 }, { 0x5C2A, 55259 }, { 0x5C2B, 55261 }, { 0x5C2C, 55263 }, { 0x5C2D, 55265 }, { 0x5C2E, 55267 }, { 0x5C2F, 55269 }, { 0x5C30, 55271 }, { 0x5C31, 55273 }, { 0x5C32, 55275 }, { 0x5C33, 55277 }, { 0x5C34, 55279 }, { 0x5C35, 55281 }, { 0x5C36, 55283 }, { 0x5C37, 55285 }, { 0x5C38, 55287 }, { 0x5C39, 55289 }, { 0x5C3A, 55291 }, { 0x5C3B, 55293 }, { 0x5C3C, 55295 }, { 0x5C3D, 55297 }, { 0x5C3E, 55299 }, { 0x5C3F, 55301 }, { 0x5C40, 55303 }, { 0x5C41, 55305 }, { 0x5C42, 55307 }, { 0x5C43, 55309 }, { 0x5C44, 55311 }, { 0x5C45, 55313 }, { 0x5C46, 55315 }, { 0x5C47, 55317 }, { 0x5C48, 55319 }, { 0x5C49, 55321 }, { 0x5C4A, 55323 }, { 0x5C4B, 55325 }, { 0x5C4C, 55327 }, { 0x5C4D, 55329 }, { 0x5C4E, 55331 }, { 0x5C4F, 55333 }, { 0x5C50, 55335 }, { 0x5C51, 55337 }, { 0x5C52, 55339 }, { 0x5C53, 55341 }, { 0x5C54, 55343 }, { 0x5C55, 55345 }, { 0x5C56, 55347 }, { 0x5C57, 55349 }, { 0x5C58, 55351 }, { 0x5C59, 55353 }, { 0x5C5A, 55355 }, { 0x5C5B, 55357 }, { 0x5C5C, 55359 }, { 0x5C5D, 55361 }, { 0x5C5E, 55363 }, { 0x5C5F, 55365 }, { 0x5C60, 55367 }, { 0x5C61, 55369 }, { 0x5C62, 55371 }, { 0x5C63, 55373 }, { 0x5C64, 55375 }, { 0x5C65, 55377 }, { 0x5C66, 55379 }, { 0x5C67, 55381 }, { 0x5C68, 55383 }, { 0x5C69, 55385 }, { 0x5C6A, 55387 }, { 0x5C6B, 55389 }, { 0x5C6C, 55391 }, { 0x5C6D, 55393 }, { 0x5C6E, 55395 }, { 0x5C6F, 55397 }, { 0x5C70, 55399 }, { 0x5C71, 55401 }, { 0x5C72, 55403 }, { 0x5C73, 55405 }, { 0x5C74, 55407 }, { 0x5C75, 55409 }, { 0x5C76, 55411 }, { 0x5C77, 55413 }, { 0x5C78, 55415 }, { 0x5C79, 55417 }, { 0x5C7A, 55419 }, { 0x5C7B, 55421 }, { 0x5C7C, 55423 }, { 0x5C7D, 55425 }, { 0x5C7E, 55427 }, { 0x5C7F, 55429 }, { 0x5C80, 55431 }, { 0x5C81, 55433 }, { 0x5C82, 55435 }, { 0x5C83, 55437 }, { 0x5C84, 55439 }, { 0x5C85, 55441 }, { 0x5C86, 55443 }, { 0x5C87, 55445 }, { 0x5C88, 55447 }, { 0x5C89, 55449 }, { 0x5C8A, 55451 }, { 0x5C8B, 55453 }, { 0x5C8C, 55455 }, { 0x5C8D, 55457 }, { 0x5C8E, 55459 }, { 0x5C8F, 55461 }, { 0x5C90, 55463 }, { 0x5C91, 55465 }, { 0x5C92, 55467 }, { 0x5C93, 55469 }, { 0x5C94, 55471 }, { 0x5C95, 55473 }, { 0x5C96, 55475 }, { 0x5C97, 55477 }, { 0x5C98, 55479 }, { 0x5C99, 55481 }, { 0x5C9A, 55483 }, { 0x5C9B, 55485 }, { 0x5C9C, 55487 }, { 0x5C9D, 55489 }, { 0x5C9E, 55491 }, { 0x5C9F, 55493 }, { 0x5CA0, 55495 }, { 0x5CA1, 55497 }, { 0x5CA2, 55499 }, { 0x5CA3, 55501 }, { 0x5CA4, 55503 }, { 0x5CA5, 55505 }, { 0x5CA6, 55507 }, { 0x5CA7, 55509 }, { 0x5CA8, 55511 }, { 0x5CA9, 55513 }, { 0x5CAA, 55515 }, { 0x5CAB, 55517 }, { 0x5CAC, 55519 }, { 0x5CAD, 55521 }, { 0x5CAE, 55523 }, { 0x5CAF, 55525 }, { 0x5CB0, 55527 }, { 0x5CB1, 55529 }, { 0x5CB2, 55531 }, { 0x5CB3, 55533 }, { 0x5CB4, 55535 }, { 0x5CB5, 55537 }, { 0x5CB6, 55539 }, { 0x5CB7, 55541 }, { 0x5CB8, 55543 }, { 0x5CB9, 55545 }, { 0x5CBA, 55547 }, { 0x5CBB, 55549 }, { 0x5CBC, 55551 }, { 0x5CBD, 55553 }, { 0x5CBE, 55555 }, { 0x5CBF, 55557 }, { 0x5CC0, 55559 }, { 0x5CC1, 55561 }, { 0x5CC2, 55563 }, { 0x5CC3, 55565 }, { 0x5CC4, 55567 }, { 0x5CC5, 55569 }, { 0x5CC6, 55571 }, { 0x5CC7, 55573 }, { 0x5CC8, 55575 }, { 0x5CC9, 55577 }, { 0x5CCA, 55579 }, { 0x5CCB, 55581 }, { 0x5CCC, 55583 }, { 0x5CCD, 55585 }, { 0x5CCE, 55587 }, { 0x5CCF, 55589 }, { 0x5CD0, 55591 }, { 0x5CD1, 55593 }, { 0x5CD2, 55595 }, { 0x5CD3, 55597 }, { 0x5CD4, 55599 }, { 0x5CD5, 55601 }, { 0x5CD6, 55603 }, { 0x5CD7, 55605 }, { 0x5CD8, 55607 }, { 0x5CD9, 55609 }, { 0x5CDA, 55611 }, { 0x5CDB, 55613 }, { 0x5CDC, 55615 }, { 0x5CDD, 55617 }, { 0x5CDE, 55619 }, { 0x5CDF, 55621 }, { 0x5CE0, 55623 }, { 0x5CE1, 55625 }, { 0x5CE2, 55627 }, { 0x5CE3, 55629 }, { 0x5CE4, 55631 }, { 0x5CE5, 55633 }, { 0x5CE6, 55635 }, { 0x5CE7, 55637 }, { 0x5CE8, 55639 }, { 0x5CE9, 55641 }, { 0x5CEA, 55643 }, { 0x5CEB, 55645 }, { 0x5CEC, 55647 }, { 0x5CED, 55649 }, { 0x5CEE, 55651 }, { 0x5CEF, 55653 }, { 0x5CF0, 55655 }, { 0x5CF1, 55657 }, { 0x5CF2, 55659 }, { 0x5CF3, 55661 }, { 0x5CF4, 55663 }, { 0x5CF5, 55665 }, { 0x5CF6, 55667 }, { 0x5CF7, 55669 }, { 0x5CF8, 55671 }, { 0x5CF9, 55673 }, { 0x5CFA, 55675 }, { 0x5CFB, 55677 }, { 0x5CFC, 55679 }, { 0x5CFD, 55681 }, { 0x5CFE, 55683 }, { 0x5CFF, 55685 }, { 0x5D00, 55687 }, { 0x5D01, 55689 }, { 0x5D02, 55691 }, { 0x5D03, 55693 }, { 0x5D04, 55695 }, { 0x5D05, 55697 }, { 0x5D06, 55699 }, { 0x5D07, 55701 }, { 0x5D08, 55703 }, { 0x5D09, 55705 }, { 0x5D0A, 55707 }, { 0x5D0B, 55709 }, { 0x5D0C, 55711 }, { 0x5D0D, 55713 }, { 0x5D0E, 55715 }, { 0x5D0F, 55717 }, { 0x5D10, 55719 }, { 0x5D11, 55721 }, { 0x5D12, 55723 }, { 0x5D13, 55725 }, { 0x5D14, 55727 }, { 0x5D15, 55729 }, { 0x5D16, 55731 }, { 0x5D17, 55733 }, { 0x5D18, 55735 }, { 0x5D19, 55737 }, { 0x5D1A, 55739 }, { 0x5D1B, 55741 }, { 0x5D1C, 55743 }, { 0x5D1D, 55745 }, { 0x5D1E, 55747 }, { 0x5D1F, 55749 }, { 0x5D20, 55751 }, { 0x5D21, 55753 }, { 0x5D22, 55755 }, { 0x5D23, 55757 }, { 0x5D24, 55759 }, { 0x5D25, 55761 }, { 0x5D26, 55763 }, { 0x5D27, 55765 }, { 0x5D28, 55767 }, { 0x5D29, 55769 }, { 0x5D2A, 55771 }, { 0x5D2B, 55773 }, { 0x5D2C, 55775 }, { 0x5D2D, 55777 }, { 0x5D2E, 55779 }, { 0x5D2F, 55781 }, { 0x5D30, 55783 }, { 0x5D31, 55785 }, { 0x5D32, 55787 }, { 0x5D33, 55789 }, { 0x5D34, 55791 }, { 0x5D35, 55793 }, { 0x5D36, 55795 }, { 0x5D37, 55797 }, { 0x5D38, 55799 }, { 0x5D39, 55801 }, { 0x5D3A, 55803 }, { 0x5D3B, 55805 }, { 0x5D3C, 55807 }, { 0x5D3D, 55809 }, { 0x5D3E, 55811 }, { 0x5D3F, 55813 }, { 0x5D40, 55815 }, { 0x5D41, 55817 }, { 0x5D42, 55819 }, { 0x5D43, 55821 }, { 0x5D44, 55823 }, { 0x5D45, 55825 }, { 0x5D46, 55827 }, { 0x5D47, 55829 }, { 0x5D48, 55831 }, { 0x5D49, 55833 }, { 0x5D4A, 55835 }, { 0x5D4B, 55837 }, { 0x5D4C, 55839 }, { 0x5D4D, 55841 }, { 0x5D4E, 55843 }, { 0x5D4F, 55845 }, { 0x5D50, 55847 }, { 0x5D51, 55849 }, { 0x5D52, 55851 }, { 0x5D53, 55853 }, { 0x5D54, 55855 }, { 0x5D55, 55857 }, { 0x5D56, 55859 }, { 0x5D57, 55861 }, { 0x5D58, 55863 }, { 0x5D59, 55865 }, { 0x5D5A, 55867 }, { 0x5D5B, 55869 }, { 0x5D5C, 55871 }, { 0x5D5D, 55873 }, { 0x5D5E, 55875 }, { 0x5D5F, 55877 }, { 0x5D60, 55879 }, { 0x5D61, 55881 }, { 0x5D62, 55883 }, { 0x5D63, 55885 }, { 0x5D64, 55887 }, { 0x5D65, 55889 }, { 0x5D66, 55891 }, { 0x5D67, 55893 }, { 0x5D68, 55895 }, { 0x5D69, 55897 }, { 0x5D6A, 55899 }, { 0x5D6B, 55901 }, { 0x5D6C, 55903 }, { 0x5D6D, 55905 }, { 0x5D6E, 55907 }, { 0x5D6F, 55909 }, { 0x5D70, 55911 }, { 0x5D71, 55913 }, { 0x5D72, 55915 }, { 0x5D73, 55917 }, { 0x5D74, 55919 }, { 0x5D75, 55921 }, { 0x5D76, 55923 }, { 0x5D77, 55925 }, { 0x5D78, 55927 }, { 0x5D79, 55929 }, { 0x5D7A, 55931 }, { 0x5D7B, 55933 }, { 0x5D7C, 55935 }, { 0x5D7D, 55937 }, { 0x5D7E, 55939 }, { 0x5D7F, 55941 }, { 0x5D80, 55943 }, { 0x5D81, 55945 }, { 0x5D82, 55947 }, { 0x5D83, 55949 }, { 0x5D84, 55951 }, { 0x5D85, 55953 }, { 0x5D86, 55955 }, { 0x5D87, 55957 }, { 0x5D88, 55959 }, { 0x5D89, 55961 }, { 0x5D8A, 55963 }, { 0x5D8B, 55965 }, { 0x5D8C, 55967 }, { 0x5D8D, 55969 }, { 0x5D8E, 55971 }, { 0x5D8F, 55973 }, { 0x5D90, 55975 }, { 0x5D91, 55977 }, { 0x5D92, 55979 }, { 0x5D93, 55981 }, { 0x5D94, 55983 }, { 0x5D95, 55985 }, { 0x5D96, 55987 }, { 0x5D97, 55989 }, { 0x5D98, 55991 }, { 0x5D99, 55993 }, { 0x5D9A, 55995 }, { 0x5D9B, 55997 }, { 0x5D9C, 55999 }, { 0x5D9D, 56001 }, { 0x5D9E, 56003 }, { 0x5D9F, 56005 }, { 0x5DA0, 56007 }, { 0x5DA1, 56009 }, { 0x5DA2, 56011 }, { 0x5DA3, 56013 }, { 0x5DA4, 56015 }, { 0x5DA5, 56017 }, { 0x5DA6, 56019 }, { 0x5DA7, 56021 }, { 0x5DA8, 56023 }, { 0x5DA9, 56025 }, { 0x5DAA, 56027 }, { 0x5DAB, 56029 }, { 0x5DAC, 56031 }, { 0x5DAD, 56033 }, { 0x5DAE, 56035 }, { 0x5DAF, 56037 }, { 0x5DB0, 56039 }, { 0x5DB1, 56041 }, { 0x5DB2, 56043 }, { 0x5DB3, 56045 }, { 0x5DB4, 56047 }, { 0x5DB5, 56049 }, { 0x5DB6, 56051 }, { 0x5DB7, 56053 }, { 0x5DB8, 56055 }, { 0x5DB9, 56057 }, { 0x5DBA, 56059 }, { 0x5DBB, 56061 }, { 0x5DBC, 56063 }, { 0x5DBD, 56065 }, { 0x5DBE, 56067 }, { 0x5DBF, 56069 }, { 0x5DC0, 56071 }, { 0x5DC1, 56073 }, { 0x5DC2, 56075 }, { 0x5DC3, 56077 }, { 0x5DC4, 56079 }, { 0x5DC5, 56081 }, { 0x5DC6, 56083 }, { 0x5DC7, 56085 }, { 0x5DC8, 56087 }, { 0x5DC9, 56089 }, { 0x5DCA, 56091 }, { 0x5DCB, 56093 }, { 0x5DCC, 56095 }, { 0x5DCD, 56097 }, { 0x5DCE, 56099 }, { 0x5DCF, 56101 }, { 0x5DD0, 56103 }, { 0x5DD1, 56105 }, { 0x5DD2, 56107 }, { 0x5DD3, 56109 }, { 0x5DD4, 56111 }, { 0x5DD5, 56113 }, { 0x5DD6, 56115 }, { 0x5DD7, 56117 }, { 0x5DD8, 56119 }, { 0x5DD9, 56121 }, { 0x5DDA, 56123 }, { 0x5DDB, 56125 }, { 0x5DDC, 56127 }, { 0x5DDD, 56129 }, { 0x5DDE, 56131 }, { 0x5DDF, 56133 }, { 0x5DE0, 56135 }, { 0x5DE1, 56137 }, { 0x5DE2, 56139 }, { 0x5DE3, 56141 }, { 0x5DE4, 56143 }, { 0x5DE5, 56145 }, { 0x5DE6, 56147 }, { 0x5DE7, 56149 }, { 0x5DE8, 56151 }, { 0x5DE9, 56153 }, { 0x5DEA, 56155 }, { 0x5DEB, 56157 }, { 0x5DEC, 56159 }, { 0x5DED, 56161 }, { 0x5DEE, 56163 }, { 0x5DEF, 56165 }, { 0x5DF0, 56167 }, { 0x5DF1, 56169 }, { 0x5DF2, 56171 }, { 0x5DF3, 56173 }, { 0x5DF4, 56175 }, { 0x5DF5, 56177 }, { 0x5DF6, 56179 }, { 0x5DF7, 56181 }, { 0x5DF8, 56183 }, { 0x5DF9, 56185 }, { 0x5DFA, 56187 }, { 0x5DFB, 56189 }, { 0x5DFC, 56191 }, { 0x5DFD, 56193 }, { 0x5DFE, 56195 }, { 0x5DFF, 56197 }, { 0x5E00, 56199 }, { 0x5E01, 56201 }, { 0x5E02, 56203 }, { 0x5E03, 56205 }, { 0x5E04, 56207 }, { 0x5E05, 56209 }, { 0x5E06, 56211 }, { 0x5E07, 56213 }, { 0x5E08, 56215 }, { 0x5E09, 56217 }, { 0x5E0A, 56219 }, { 0x5E0B, 56221 }, { 0x5E0C, 56223 }, { 0x5E0D, 56225 }, { 0x5E0E, 56227 }, { 0x5E0F, 56229 }, { 0x5E10, 56231 }, { 0x5E11, 56233 }, { 0x5E12, 56235 }, { 0x5E13, 56237 }, { 0x5E14, 56239 }, { 0x5E15, 56241 }, { 0x5E16, 56243 }, { 0x5E17, 56245 }, { 0x5E18, 56247 }, { 0x5E19, 56249 }, { 0x5E1A, 56251 }, { 0x5E1B, 56253 }, { 0x5E1C, 56255 }, { 0x5E1D, 56257 }, { 0x5E1E, 56259 }, { 0x5E1F, 56261 }, { 0x5E20, 56263 }, { 0x5E21, 56265 }, { 0x5E22, 56267 }, { 0x5E23, 56269 }, { 0x5E24, 56271 }, { 0x5E25, 56273 }, { 0x5E26, 56275 }, { 0x5E27, 56277 }, { 0x5E28, 56279 }, { 0x5E29, 56281 }, { 0x5E2A, 56283 }, { 0x5E2B, 56285 }, { 0x5E2C, 56287 }, { 0x5E2D, 56289 }, { 0x5E2E, 56291 }, { 0x5E2F, 56293 }, { 0x5E30, 56295 }, { 0x5E31, 56297 }, { 0x5E32, 56299 }, { 0x5E33, 56301 }, { 0x5E34, 56303 }, { 0x5E35, 56305 }, { 0x5E36, 56307 }, { 0x5E37, 56309 }, { 0x5E38, 56311 }, { 0x5E39, 56313 }, { 0x5E3A, 56315 }, { 0x5E3B, 56317 }, { 0x5E3C, 56319 }, { 0x5E3D, 56321 }, { 0x5E3E, 56323 }, { 0x5E3F, 56325 }, { 0x5E40, 56327 }, { 0x5E41, 56329 }, { 0x5E42, 56331 }, { 0x5E43, 56333 }, { 0x5E44, 56335 }, { 0x5E45, 56337 }, { 0x5E46, 56339 }, { 0x5E47, 56341 }, { 0x5E48, 56343 }, { 0x5E49, 56345 }, { 0x5E4A, 56347 }, { 0x5E4B, 56349 }, { 0x5E4C, 56351 }, { 0x5E4D, 56353 }, { 0x5E4E, 56355 }, { 0x5E4F, 56357 }, { 0x5E50, 56359 }, { 0x5E51, 56361 }, { 0x5E52, 56363 }, { 0x5E53, 56365 }, { 0x5E54, 56367 }, { 0x5E55, 56369 }, { 0x5E56, 56371 }, { 0x5E57, 56373 }, { 0x5E58, 56375 }, { 0x5E59, 56377 }, { 0x5E5A, 56379 }, { 0x5E5B, 56381 }, { 0x5E5C, 56383 }, { 0x5E5D, 56385 }, { 0x5E5E, 56387 }, { 0x5E5F, 56389 }, { 0x5E60, 56391 }, { 0x5E61, 56393 }, { 0x5E62, 56395 }, { 0x5E63, 56397 }, { 0x5E64, 56399 }, { 0x5E65, 56401 }, { 0x5E66, 56403 }, { 0x5E67, 56405 }, { 0x5E68, 56407 }, { 0x5E69, 56409 }, { 0x5E6A, 56411 }, { 0x5E6B, 56413 }, { 0x5E6C, 56415 }, { 0x5E6D, 56417 }, { 0x5E6E, 56419 }, { 0x5E6F, 56421 }, { 0x5E70, 56423 }, { 0x5E71, 56425 }, { 0x5E72, 56427 }, { 0x5E73, 56429 }, { 0x5E74, 56431 }, { 0x5E75, 56433 }, { 0x5E76, 56435 }, { 0x5E77, 56437 }, { 0x5E78, 56439 }, { 0x5E79, 56441 }, { 0x5E7A, 56443 }, { 0x5E7B, 56445 }, { 0x5E7C, 56447 }, { 0x5E7D, 56449 }, { 0x5E7E, 56451 }, { 0x5E7F, 56453 }, { 0x5E80, 56455 }, { 0x5E81, 56457 }, { 0x5E82, 56459 }, { 0x5E83, 56461 }, { 0x5E84, 56463 }, { 0x5E85, 56465 }, { 0x5E86, 56467 }, { 0x5E87, 56469 }, { 0x5E88, 56471 }, { 0x5E89, 56473 }, { 0x5E8A, 56475 }, { 0x5E8B, 56477 }, { 0x5E8C, 56479 }, { 0x5E8D, 56481 }, { 0x5E8E, 56483 }, { 0x5E8F, 56485 }, { 0x5E90, 56487 }, { 0x5E91, 56489 }, { 0x5E92, 56491 }, { 0x5E93, 56493 }, { 0x5E94, 56495 }, { 0x5E95, 56497 }, { 0x5E96, 56499 }, { 0x5E97, 56501 }, { 0x5E98, 56503 }, { 0x5E99, 56505 }, { 0x5E9A, 56507 }, { 0x5E9B, 56509 }, { 0x5E9C, 56511 }, { 0x5E9D, 56513 }, { 0x5E9E, 56515 }, { 0x5E9F, 56517 }, { 0x5EA0, 56519 }, { 0x5EA1, 56521 }, { 0x5EA2, 56523 }, { 0x5EA3, 56525 }, { 0x5EA4, 56527 }, { 0x5EA5, 56529 }, { 0x5EA6, 56531 }, { 0x5EA7, 56533 }, { 0x5EA8, 56535 }, { 0x5EA9, 56537 }, { 0x5EAA, 56539 }, { 0x5EAB, 56541 }, { 0x5EAC, 56543 }, { 0x5EAD, 56545 }, { 0x5EAE, 56547 }, { 0x5EAF, 56549 }, { 0x5EB0, 56551 }, { 0x5EB1, 56553 }, { 0x5EB2, 56555 }, { 0x5EB3, 56557 }, { 0x5EB4, 56559 }, { 0x5EB5, 56561 }, { 0x5EB6, 56563 }, { 0x5EB7, 56565 }, { 0x5EB8, 56567 }, { 0x5EB9, 56569 }, { 0x5EBA, 56571 }, { 0x5EBB, 56573 }, { 0x5EBC, 56575 }, { 0x5EBD, 56577 }, { 0x5EBE, 56579 }, { 0x5EBF, 56581 }, { 0x5EC0, 56583 }, { 0x5EC1, 56585 }, { 0x5EC2, 56587 }, { 0x5EC3, 56589 }, { 0x5EC4, 56591 }, { 0x5EC5, 56593 }, { 0x5EC6, 56595 }, { 0x5EC7, 56597 }, { 0x5EC8, 56599 }, { 0x5EC9, 56601 }, { 0x5ECA, 56603 }, { 0x5ECB, 56605 }, { 0x5ECC, 56607 }, { 0x5ECD, 56609 }, { 0x5ECE, 56611 }, { 0x5ECF, 56613 }, { 0x5ED0, 56615 }, { 0x5ED1, 56617 }, { 0x5ED2, 56619 }, { 0x5ED3, 56621 }, { 0x5ED4, 56623 }, { 0x5ED5, 56625 }, { 0x5ED6, 56627 }, { 0x5ED7, 56629 }, { 0x5ED8, 56631 }, { 0x5ED9, 56633 }, { 0x5EDA, 83074 }, { 0x5EDB, 82178 }, { 0x5EDC, 75427 }, { 0x5EDD, 75642 }, { 0x5EDE, 75537 }, { 0x5EDF, 75613 }, { 0x5EE0, 75412 }, { 0x5EE1, 75477 }, { 0x5EE2, 75489 }, { 0x5EE3, 75399 }, { 0x5EE4, 75402 }, { 0x5EE5, 75632 }, { 0x5EE6, 75419 }, { 0x5EE7, 75544 }, { 0x5EE8, 75540 }, { 0x5EE9, 75405 }, { 0x5EEA, 75415 }, { 0x5EEB, 75480 }, { 0x5EEC, 75547 }, { 0x5EED, 75678 }, { 0x5EEE, 75757 }, { 0x5EEF, 75645 }, { 0x5EF0, 75660 }, { 0x5EF1, 75745 }, { 0x5EF2, 75654 }, { 0x5EF3, 75663 }, { 0x5EF4, 75675 }, { 0x5EF5, 75492 }, { 0x5EF6, 75513 }, { 0x5EF7, 75433 }, { 0x5EF8, 75551 }, { 0x5EF9, 75495 }, { 0x5EFA, 75516 }, { 0x5EFB, 75436 }, { 0x5EFC, 75554 }, { 0x5EFD, 75508 }, { 0x5EFE, 75529 }, { 0x5EFF, 75464 }, { 0x5F00, 75469 }, { 0x5F01, 75602 }, { 0x5F02, 75607 }, { 0x5F03, 75504 }, { 0x5F04, 75525 }, { 0x5F05, 75454 }, { 0x5F06, 75589 }, { 0x5F07, 75499 }, { 0x5F08, 75520 }, { 0x5F09, 75440 }, { 0x5F0A, 75558 }, { 0x5F0B, 75458 }, { 0x5F0C, 75445 }, { 0x5F0D, 75449 }, { 0x5F0E, 75593 }, { 0x5F0F, 75597 }, { 0x5F10, 75580 }, { 0x5F11, 75584 }, { 0x5F12, 75621 }, { 0x5F13, 75616 }, { 0x5F14, 75635 }, { 0x5F15, 75690 }, { 0x5F16, 75638 }, { 0x5F17, 75576 }, { 0x5F18, 75572 }, { 0x5F19, 75484 }, { 0x5F1A, 75422 }, { 0x5F1B, 75563 }, { 0x5F1C, 75567 }, { 0x5F1D, 75396 }, { 0x5F1E, 75777 }, { 0x5F1F, 75666 }, { 0x5F20, 75534 }, { 0x5F21, 75705 }, { 0x5F22, 75430 }, { 0x5F23, 75409 }, { 0x5F24, 75657 }, { 0x5F25, 75741 }, { 0x5F26, 75684 }, { 0x5F27, 75648 }, { 0x5F28, 75765 }, { 0x5F29, 75793 }, { 0x5F2A, 75761 }, { 0x5F2B, 75717 }, { 0x5F2C, 75702 }, { 0x5F2D, 75625 }, { 0x5F2E, 75651 }, { 0x5F2F, 75699 }, { 0x5F30, 75628 }, { 0x5F31, 75721 }, { 0x5F32, 75797 }, { 0x5F33, 75681 }, { 0x5F34, 75749 }, { 0x5F35, 75708 }, { 0x5F36, 75672 }, { 0x5F37, 75669 }, { 0x5F38, 75687 }, { 0x5F39, 75696 }, { 0x5F3A, 75693 }, { 0x5F3B, 75711 }, { 0x5F3C, 75714 }, { 0x5F3D, 75737 }, { 0x5F3E, 75733 }, { 0x5F3F, 75729 }, { 0x5F40, 75725 }, { 0x5F41, 75785 }, { 0x5F42, 75781 }, { 0x5F43, 75769 }, { 0x5F44, 75753 }, { 0x5F45, 75773 }, { 0x5F46, 75789 }, { 0x5F47, 75347 }, { 0x5F48, 75299 }, { 0x5F49, 75352 }, { 0x5F4A, 75289 }, { 0x5F4B, 75294 }, { 0x5F4C, 75342 }, { 0x5F4D, 75371 }, { 0x5F4E, 75384 }, { 0x5F4F, 75375 }, { 0x5F50, 75367 }, { 0x5F51, 75357 }, { 0x5F52, 75362 }, { 0x5F53, 75379 }, { 0x5F54, 75321 }, { 0x5F55, 75329 }, { 0x5F56, 75325 }, { 0x5F57, 75312 }, { 0x5F58, 75304 }, { 0x5F59, 75334 }, { 0x5F5A, 75308 }, { 0x5F5B, 75317 }, { 0x5F5C, 75338 }, { 0x5F5D, 75264 }, { 0x5F5E, 75276 }, { 0x5F5F, 75272 }, { 0x5F60, 75255 }, { 0x5F61, 75247 }, { 0x5F62, 75281 }, { 0x5F63, 75251 }, { 0x5F64, 75260 }, { 0x5F65, 75285 }, { 0x5F66, 75268 }, { 0x5F67, 75242 }, { 0x5F68, 75389 }, { 0x5F69, 75393 }, { 0x5F6A, 75801 }, { 0x5F6B, 102045 }, { 0x5F6C, 102049 }, { 0x5F6D, 102041 }, { 0x5F6E, 102037 }, { 0x5F6F, 89160 }, { 0x5F70, 89194 }, { 0x5F71, 90187 }, { 0x5F72, 89155 }, { 0x5F73, 89150 }, { 0x5F74, 89531 }, { 0x5F75, 89526 }, { 0x5F76, 89826 }, { 0x5F77, 90092 }, { 0x5F78, 90173 }, { 0x5F79, 90100 }, { 0x5F7A, 90104 }, { 0x5F7B, 89843 }, { 0x5F7C, 89108 }, { 0x5F7D, 89017 }, { 0x5F7E, 89513 }, { 0x5F7F, 90042 }, { 0x5F80, 90125 }, { 0x5F81, 90134 }, { 0x5F82, 89718 }, { 0x5F83, 89181 }, { 0x5F84, 89472 }, { 0x5F85, 89390 }, { 0x5F86, 89496 }, { 0x5F87, 89753 }, { 0x5F88, 89185 }, { 0x5F89, 89031 }, { 0x5F8A, 89649 }, { 0x5F8B, 90064 }, { 0x5F8C, 89941 }, { 0x5F8D, 89928 }, { 0x5F8E, 89697 }, { 0x5F8F, 89481 }, { 0x5F90, 89730 }, { 0x5F91, 89744 }, { 0x5F92, 89749 }, { 0x5F93, 89418 }, { 0x5F94, 89164 }, { 0x5F95, 89491 }, { 0x5F96, 89726 }, { 0x5F97, 90201 }, { 0x5F98, 89500 }, { 0x5F99, 89713 }, { 0x5F9A, 89707 }, { 0x5F9B, 90078 }, { 0x5F9C, 89172 }, { 0x5F9D, 89141 }, { 0x5F9E, 89013 }, { 0x5F9F, 89046 }, { 0x5FA0, 89722 }, { 0x5FA1, 90069 }, { 0x5FA2, 89102 }, { 0x5FA3, 89306 }, { 0x5FA4, 90034 }, { 0x5FA5, 90005 }, { 0x5FA6, 89413 }, { 0x5FA7, 89932 }, { 0x5FA8, 90083 }, { 0x5FA9, 89830 }, { 0x5FAA, 89762 }, { 0x5FAB, 89689 }, { 0x5FAC, 90168 }, { 0x5FAD, 90182 }, { 0x5FAE, 89627 }, { 0x5FAF, 89036 }, { 0x5FB0, 89681 }, { 0x5FB1, 89834 }, { 0x5FB2, 90000 }, { 0x5FB3, 90209 }, { 0x5FB4, 90205 }, { 0x5FB5, 89026 }, { 0x5FB6, 89467 }, { 0x5FB7, 89145 }, { 0x5FB8, 89685 }, { 0x5FB9, 89839 }, { 0x5FBA, 90241 }, { 0x5FBB, 90233 }, { 0x5FBC, 89936 }, { 0x5FBD, 90046 }, { 0x5FBE, 89631 }, { 0x5FBF, 89569 }, { 0x5FC0, 90129 }, { 0x5FC1, 90119 }, { 0x5FC2, 89735 }, { 0x5FC3, 90237 }, { 0x5FC4, 89616 }, { 0x5FC5, 89608 }, { 0x5FC6, 89462 }, { 0x5FC7, 89521 }, { 0x5FC8, 89486 }, { 0x5FC9, 90087 }, { 0x5FCA, 89477 }, { 0x5FCB, 90109 }, { 0x5FCC, 89677 }, { 0x5FCD, 90177 }, { 0x5FCE, 90163 }, { 0x5FCF, 89236 }, { 0x5FD0, 89673 }, { 0x5FD1, 90229 }, { 0x5FD2, 89995 }, { 0x5FD3, 90139 }, { 0x5FD4, 89702 }, { 0x5FD5, 89168 }, { 0x5FD6, 89757 }, { 0x5FD7, 89818 }, { 0x5FD8, 89504 }, { 0x5FD9, 89189 }, { 0x5FDA, 90253 }, { 0x5FDB, 90245 }, { 0x5FDC, 90221 }, { 0x5FDD, 90257 }, { 0x5FDE, 90261 }, { 0x5FDF, 90225 }, { 0x5FE0, 90249 }, { 0x5FE1, 90217 }, { 0x5FE2, 90213 }, { 0x5FE3, 89241 }, { 0x5FE4, 90073 }, { 0x5FE5, 90191 }, { 0x5FE6, 90196 }, { 0x5FE7, 89176 }, { 0x5FE8, 89040 }, { 0x5FE9, 90038 }, { 0x5FEA, 90015 }, { 0x5FEB, 89055 }, { 0x5FEC, 89050 }, { 0x5FED, 89693 }, { 0x5FEE, 89422 }, { 0x5FEF, 89136 }, { 0x5FF0, 89668 }, { 0x5FF1, 89663 }, { 0x5FF2, 89658 }, { 0x5FF3, 89739 }, { 0x5FF4, 89022 }, { 0x5FF5, 89132 }, { 0x5FF6, 89517 }, { 0x5FF7, 89991 }, { 0x5FF8, 89654 }, { 0x5FF9, 89438 }, { 0x5FFA, 89432 }, { 0x5FFB, 89444 }, { 0x5FFC, 89456 }, { 0x5FFD, 89450 }, { 0x5FFE, 89378 }, { 0x5FFF, 89401 }, { 0x6000, 89395 }, { 0x6001, 89789 }, { 0x6002, 89806 }, { 0x6003, 89799 }, { 0x6004, 89793 }, { 0x6005, 90096 }, { 0x6006, 89113 }, { 0x6007, 90155 }, { 0x6008, 89612 }, { 0x6009, 89070 }, { 0x600A, 89092 }, { 0x600B, 89060 }, { 0x600C, 89087 }, { 0x600D, 89065 }, { 0x600E, 89082 }, { 0x600F, 89097 }, { 0x6010, 89076 }, { 0x6011, 89867 }, { 0x6012, 89847 }, { 0x6013, 89898 }, { 0x6014, 89854 }, { 0x6015, 89873 }, { 0x6016, 89917 }, { 0x6017, 89904 }, { 0x6018, 89910 }, { 0x6019, 89879 }, { 0x601A, 89885 }, { 0x601B, 89407 }, { 0x601C, 90113 }, { 0x601D, 90029 }, { 0x601E, 90024 }, { 0x601F, 90019 }, { 0x6020, 89861 }, { 0x6021, 89922 }, { 0x6022, 89891 }, { 0x6023, 90143 }, { 0x6024, 90149 }, { 0x6025, 89620 }, { 0x6026, 89822 }, { 0x6027, 90159 }, { 0x6028, 89311 }, { 0x6029, 89344 }, { 0x602A, 89356 }, { 0x602B, 89260 }, { 0x602C, 89318 }, { 0x602D, 89299 }, { 0x602E, 89324 }, { 0x602F, 89350 }, { 0x6030, 89337 }, { 0x6031, 89330 }, { 0x6032, 89271 }, { 0x6033, 89278 }, { 0x6034, 89246 }, { 0x6035, 89292 }, { 0x6036, 89266 }, { 0x6037, 89117 }, { 0x6038, 89122 }, { 0x6039, 89127 }, { 0x603A, 89253 }, { 0x603B, 89362 }, { 0x603C, 89564 }, { 0x603D, 89226 }, { 0x603E, 89231 }, { 0x603F, 89198 }, { 0x6040, 89219 }, { 0x6041, 89205 }, { 0x6042, 89212 }, { 0x6043, 89536 }, { 0x6044, 89557 }, { 0x6045, 89543 }, { 0x6046, 89550 }, { 0x6047, 89368 }, { 0x6048, 89373 }, { 0x6049, 89767 }, { 0x604A, 89773 }, { 0x604B, 89779 }, { 0x604C, 89784 }, { 0x604D, 89968 }, { 0x604E, 89973 }, { 0x604F, 89979 }, { 0x6050, 89985 }, { 0x6051, 89945 }, { 0x6052, 89950 }, { 0x6053, 89956 }, { 0x6054, 89962 }, { 0x6055, 89813 }, { 0x6056, 90010 }, { 0x6057, 89509 }, { 0x6058, 89593 }, { 0x6059, 89603 }, { 0x605A, 89578 }, { 0x605B, 89573 }, { 0x605C, 89583 }, { 0x605D, 89598 }, { 0x605E, 89588 }, { 0x605F, 90058 }, { 0x6060, 89643 }, { 0x6061, 90052 }, { 0x6062, 89637 }, { 0x6063, 89427 }, { 0x6064, 89384 }, { 0x6065, 62894 }, { 0x6066, 62792 }, { 0x6067, 62672 }, { 0x6068, 63027 }, { 0x6069, 62776 }, { 0x606A, 62738 }, { 0x606B, 62605 }, { 0x606C, 62722 }, { 0x606D, 62890 }, { 0x606E, 62517 }, { 0x606F, 62506 }, { 0x6070, 62727 }, { 0x6071, 62558 }, { 0x6072, 63108 }, { 0x6073, 63112 }, { 0x6074, 63116 }, { 0x6075, 62991 }, { 0x6076, 62994 }, { 0x6077, 62753 }, { 0x6078, 62978 }, { 0x6079, 62663 }, { 0x607A, 62975 }, { 0x607B, 63060 }, { 0x607C, 63193 }, { 0x607D, 63411 }, { 0x607E, 63331 }, { 0x607F, 63327 }, { 0x6080, 63120 }, { 0x6081, 63407 }, { 0x6082, 63418 }, { 0x6083, 62483 }, { 0x6084, 62487 }, { 0x6085, 62493 }, { 0x6086, 62463 }, { 0x6087, 62467 }, { 0x6088, 62471 }, { 0x6089, 62477 }, { 0x608A, 62568 }, { 0x608B, 62572 }, { 0x608C, 63051 }, { 0x608D, 62788 }, { 0x608E, 62784 }, { 0x608F, 62576 }, { 0x6090, 62580 }, { 0x6091, 62998 }, { 0x6092, 63002 }, { 0x6093, 62730 }, { 0x6094, 62734 }, { 0x6095, 63022 }, { 0x6096, 63017 }, { 0x6097, 62772 }, { 0x6098, 62513 }, { 0x6099, 62882 }, { 0x609A, 62886 }, { 0x609B, 63435 }, { 0x609C, 63439 }, { 0x609D, 62706 }, { 0x609E, 62749 }, { 0x609F, 62596 }, { 0x60A0, 63013 }, { 0x60A1, 62800 }, { 0x60A2, 63371 }, { 0x60A3, 63455 }, { 0x60A4, 63447 }, { 0x60A5, 62548 }, { 0x60A6, 62499 }, { 0x60A7, 62624 }, { 0x60A8, 62764 }, { 0x60A9, 62907 }, { 0x60AA, 62902 }, { 0x60AB, 63151 }, { 0x60AC, 63131 }, { 0x60AD, 63175 }, { 0x60AE, 63169 }, { 0x60AF, 63187 }, { 0x60B0, 63181 }, { 0x60B1, 63163 }, { 0x60B2, 63157 }, { 0x60B3, 63144 }, { 0x60B4, 63137 }, { 0x60B5, 62615 }, { 0x60B6, 62610 }, { 0x60B7, 63465 }, { 0x60B8, 63459 }, { 0x60B9, 63428 }, { 0x60BA, 62639 }, { 0x60BB, 63056 }, { 0x60BC, 62620 }, { 0x60BD, 62986 }, { 0x60BE, 62981 }, { 0x60BF, 62666 }, { 0x60C0, 62745 }, { 0x60C1, 62592 }, { 0x60C2, 63009 }, { 0x60C3, 62796 }, { 0x60C4, 63367 }, { 0x60C5, 63451 }, { 0x60C6, 63443 }, { 0x60C7, 62542 }, { 0x60C8, 63228 }, { 0x60C9, 63307 }, { 0x60CA, 63290 }, { 0x60CB, 63294 }, { 0x60CC, 63298 }, { 0x60CD, 63035 }, { 0x60CE, 63039 }, { 0x60CF, 63043 }, { 0x60D0, 63302 }, { 0x60D1, 63249 }, { 0x60D2, 63253 }, { 0x60D3, 63257 }, { 0x60D4, 63261 }, { 0x60D5, 63265 }, { 0x60D6, 62651 }, { 0x60D7, 62530 }, { 0x60D8, 62647 }, { 0x60D9, 62526 }, { 0x60DA, 62655 }, { 0x60DB, 62534 }, { 0x60DC, 62659 }, { 0x60DD, 62538 }, { 0x60DE, 63240 }, { 0x60DF, 63286 }, { 0x60E0, 63269 }, { 0x60E1, 63312 }, { 0x60E2, 63278 }, { 0x60E3, 63320 }, { 0x60E4, 63316 }, { 0x60E5, 63232 }, { 0x60E6, 63375 }, { 0x60E7, 63379 }, { 0x60E8, 63210 }, { 0x60E9, 63202 }, { 0x60EA, 63219 }, { 0x60EB, 63236 }, { 0x60EC, 63206 }, { 0x60ED, 63244 }, { 0x60EE, 63273 }, { 0x60EF, 63432 }, { 0x60F0, 62912 }, { 0x60F1, 62503 }, { 0x60F2, 62719 }, { 0x60F3, 62703 }, { 0x60F4, 62676 }, { 0x60F5, 63324 }, { 0x60F6, 63415 }, { 0x60F7, 62685 }, { 0x60F8, 62679 }, { 0x60F9, 62510 }, { 0x60FA, 62628 }, { 0x60FB, 63047 }, { 0x60FC, 62635 }, { 0x60FD, 62631 }, { 0x60FE, 63064 }, { 0x60FF, 63068 }, { 0x6100, 63072 }, { 0x6101, 63076 }, { 0x6102, 63080 }, { 0x6103, 63084 }, { 0x6104, 63088 }, { 0x6105, 63092 }, { 0x6106, 63096 }, { 0x6107, 63100 }, { 0x6108, 63104 }, { 0x6109, 63422 }, { 0x610A, 63425 }, { 0x610B, 62521 }, { 0x610C, 62780 }, { 0x610D, 63214 }, { 0x610E, 63197 }, { 0x610F, 63282 }, { 0x6110, 63223 }, { 0x6111, 62715 }, { 0x6112, 62710 }, { 0x6113, 62600 }, { 0x6114, 63335 }, { 0x6115, 63339 }, { 0x6116, 62643 }, { 0x6117, 62561 }, { 0x6118, 62564 }, { 0x6119, 62868 }, { 0x611A, 62690 }, { 0x611B, 62757 }, { 0x611C, 63391 }, { 0x611D, 63387 }, { 0x611E, 62871 }, { 0x611F, 62878 }, { 0x6120, 63403 }, { 0x6121, 63399 }, { 0x6122, 62588 }, { 0x6123, 62584 }, { 0x6124, 62693 }, { 0x6125, 62698 }, { 0x6126, 62760 }, { 0x6127, 63383 }, { 0x6128, 62874 }, { 0x6129, 63395 }, { 0x612A, 62915 }, { 0x612B, 62930 }, { 0x612C, 62922 }, { 0x612D, 62937 }, { 0x612E, 62944 }, { 0x612F, 62951 }, { 0x6130, 62959 }, { 0x6131, 62967 }, { 0x6132, 62669 }, { 0x6133, 63343 }, { 0x6134, 63348 }, { 0x6135, 62898 }, { 0x6136, 62742 }, { 0x6137, 63006 }, { 0x6138, 62769 }, { 0x6139, 63360 }, { 0x613A, 63032 }, { 0x613B, 63124 }, { 0x613C, 63353 }, { 0x613D, 63356 }, { 0x613E, 63363 }, { 0x613F, 63127 }, { 0x6140, 62554 }, { 0x6141, 62804 }, { 0x6142, 62809 }, { 0x6143, 62825 }, { 0x6144, 62863 }, { 0x6145, 62830 }, { 0x6146, 62820 }, { 0x6147, 62856 }, { 0x6148, 62849 }, { 0x6149, 62842 }, { 0x614A, 62835 }, { 0x614B, 62815 }, { 0x614C, 21053 }, { 0x614D, 21057 }, { 0x614E, 21061 }, { 0x614F, 21065 }, { 0x6150, 21069 }, { 0x6151, 21073 }, { 0x6152, 21077 }, { 0x6153, 21081 }, { 0x6154, 21085 }, { 0x6155, 21089 }, { 0x6156, 21093 }, { 0x6157, 21097 }, { 0x6158, 21101 }, { 0x6159, 21105 }, { 0x615A, 21109 }, { 0x615B, 21113 }, { 0x615C, 21117 }, { 0x615D, 21121 }, { 0x615E, 21125 }, { 0x615F, 21129 }, { 0x6160, 21133 }, { 0x6161, 21137 }, { 0x6162, 21141 }, { 0x6163, 21145 }, { 0x6164, 21149 }, { 0x6165, 21153 }, { 0x6166, 21157 }, { 0x6167, 21161 }, { 0x6168, 21165 }, { 0x6169, 22544 }, { 0x616A, 22548 }, { 0x616B, 22552 }, { 0x616C, 22556 }, { 0x616D, 22560 }, { 0x616E, 22564 }, { 0x616F, 22568 }, { 0x6170, 22572 }, { 0x6171, 22576 }, { 0x6172, 22580 }, { 0x6173, 22584 }, { 0x6174, 22588 }, { 0x6175, 22592 }, { 0x6176, 22596 }, { 0x6177, 22600 }, { 0x6178, 22604 }, { 0x6179, 22608 }, { 0x617A, 22612 }, { 0x617B, 22616 }, { 0x617C, 22620 }, { 0x617D, 22624 }, { 0x617E, 22628 }, { 0x617F, 22632 }, { 0x6180, 22636 }, { 0x6181, 22640 }, { 0x6182, 22644 }, { 0x6183, 22648 }, { 0x6184, 22652 }, { 0x6185, 22656 }, { 0x6186, 22660 }, { 0x6187, 22664 }, { 0x6188, 22668 }, { 0x6189, 22672 }, { 0x618A, 22676 }, { 0x618B, 22680 }, { 0x618C, 22684 }, { 0x618D, 22688 }, { 0x618E, 90773 }, { 0x618F, 90781 }, { 0x6190, 90777 }, { 0x6191, 22195 }, { 0x6192, 84966 }, { 0x6193, 45715 }, { 0x6194, 45687 }, { 0x6195, 45703 }, { 0x6196, 45699 }, { 0x6197, 45684 }, { 0x6198, 102430 }, { 0x6199, 102397 }, { 0x619A, 102412 }, { 0x619B, 102458 }, { 0x619C, 102477 }, { 0x619D, 102602 }, { 0x619E, 102427 }, { 0x619F, 102593 }, { 0x61A0, 102531 }, { 0x61A1, 102629 }, { 0x61A2, 102584 }, { 0x61A3, 102626 }, { 0x61A4, 102514 }, { 0x61A5, 102611 }, { 0x61A6, 102415 }, { 0x61A7, 102464 }, { 0x61A8, 102473 }, { 0x61A9, 102502 }, { 0x61AA, 102550 }, { 0x61AB, 102455 }, { 0x61AC, 102496 }, { 0x61AD, 102596 }, { 0x61AE, 102394 }, { 0x61AF, 102382 }, { 0x61B0, 102581 }, { 0x61B1, 102547 }, { 0x61B2, 102440 }, { 0x61B3, 102433 }, { 0x61B4, 102617 }, { 0x61B5, 102390 }, { 0x61B6, 102490 }, { 0x61B7, 102446 }, { 0x61B8, 102535 }, { 0x61B9, 102481 }, { 0x61BA, 102556 }, { 0x61BB, 102523 }, { 0x61BC, 102449 }, { 0x61BD, 102508 }, { 0x61BE, 102569 }, { 0x61BF, 102385 }, { 0x61C0, 102517 }, { 0x61C1, 102404 }, { 0x61C2, 102587 }, { 0x61C3, 102418 }, { 0x61C4, 102563 }, { 0x61C5, 102605 }, { 0x61C6, 102493 }, { 0x61C7, 102452 }, { 0x61C8, 102443 }, { 0x61C9, 102526 }, { 0x61CA, 102538 }, { 0x61CB, 102487 }, { 0x61CC, 102505 }, { 0x61CD, 102421 }, { 0x61CE, 102623 }, { 0x61CF, 102436 }, { 0x61D0, 102608 }, { 0x61D1, 102559 }, { 0x61D2, 102484 }, { 0x61D3, 102614 }, { 0x61D4, 102634 }, { 0x61D5, 102401 }, { 0x61D6, 102424 }, { 0x61D7, 102499 }, { 0x61D8, 102409 }, { 0x61D9, 102544 }, { 0x61DA, 102541 }, { 0x61DB, 102467 }, { 0x61DC, 102590 }, { 0x61DD, 102572 }, { 0x61DE, 102520 }, { 0x61DF, 102511 }, { 0x61E0, 102575 }, { 0x61E1, 102461 }, { 0x61E2, 102470 }, { 0x61E3, 102599 }, { 0x61E4, 102578 }, { 0x61E5, 102377 }, { 0x61E6, 102620 }, { 0x61E7, 102566 }, { 0x61E8, 102553 }, { 0x61E9, 73223 }, { 0x61EA, 73233 }, { 0x61EB, 73263 }, { 0x61EC, 73243 }, { 0x61ED, 73238 }, { 0x61EE, 73228 }, { 0x61EF, 73258 }, { 0x61F0, 73253 }, { 0x61F1, 73248 }, { 0x61F2, 73178 }, { 0x61F3, 73188 }, { 0x61F4, 73218 }, { 0x61F5, 73198 }, { 0x61F6, 73193 }, { 0x61F7, 73183 }, { 0x61F8, 73213 }, { 0x61F9, 73208 }, { 0x61FA, 73203 }, { 0x61FB, 111048 }, { 0x61FC, 111052 }, { 0x61FD, 111056 }, { 0x61FE, 111060 }, { 0x61FF, 111064 }, { 0x6200, 111068 }, { 0x6201, 111072 }, { 0x6202, 111076 }, { 0x6203, 111080 }, { 0x6204, 111084 }, { 0x6205, 111088 }, { 0x6206, 111092 }, { 0x6207, 111096 }, { 0x6208, 111100 }, { 0x6209, 111104 }, { 0x620A, 111108 }, { 0x620B, 111112 }, { 0x620C, 111116 }, { 0x620D, 111120 }, { 0x620E, 111124 }, { 0x620F, 111128 }, { 0x6210, 111132 }, { 0x6211, 111136 }, { 0x6212, 111140 }, { 0x6213, 111144 }, { 0x6214, 111148 }, { 0x6215, 110024 }, { 0x6216, 110028 }, { 0x6217, 110032 }, { 0x6218, 110036 }, { 0x6219, 110040 }, { 0x621A, 110044 }, { 0x621B, 110048 }, { 0x621C, 110052 }, { 0x621D, 110056 }, { 0x621E, 110060 }, { 0x621F, 110064 }, { 0x6220, 110068 }, { 0x6221, 110072 }, { 0x6222, 110076 }, { 0x6223, 110080 }, { 0x6224, 110084 }, { 0x6225, 110088 }, { 0x6226, 110092 }, { 0x6227, 110096 }, { 0x6228, 110100 }, { 0x6229, 110104 }, { 0x622A, 110108 }, { 0x622B, 110112 }, { 0x622C, 110116 }, { 0x622D, 110120 }, { 0x622E, 110124 }, { 0x622F, 111807 }, { 0x6230, 111811 }, { 0x6231, 111815 }, { 0x6232, 111819 }, { 0x6233, 111823 }, { 0x6234, 111827 }, { 0x6235, 111831 }, { 0x6236, 111835 }, { 0x6237, 111839 }, { 0x6238, 111843 }, { 0x6239, 111847 }, { 0x623A, 111851 }, { 0x623B, 111855 }, { 0x623C, 111859 }, { 0x623D, 111863 }, { 0x623E, 111867 }, { 0x623F, 111871 }, { 0x6240, 111875 }, { 0x6241, 111879 }, { 0x6242, 111883 }, { 0x6243, 111887 }, { 0x6244, 111891 }, { 0x6245, 111895 }, { 0x6246, 111899 }, { 0x6247, 111903 }, { 0x6248, 111907 }, { 0x6249, 111592 }, { 0x624A, 111596 }, { 0x624B, 111600 }, { 0x624C, 111604 }, { 0x624D, 111608 }, { 0x624E, 111612 }, { 0x624F, 111616 }, { 0x6250, 111620 }, { 0x6251, 111624 }, { 0x6252, 111628 }, { 0x6253, 111632 }, { 0x6254, 111636 }, { 0x6255, 111640 }, { 0x6256, 111644 }, { 0x6257, 111648 }, { 0x6258, 111652 }, { 0x6259, 111656 }, { 0x625A, 111660 }, { 0x625B, 111664 }, { 0x625C, 111668 }, { 0x625D, 111672 }, { 0x625E, 111676 }, { 0x625F, 111680 }, { 0x6260, 111684 }, { 0x6261, 111688 }, { 0x6262, 110522 }, { 0x6263, 110527 }, { 0x6264, 110532 }, { 0x6265, 110537 }, { 0x6266, 110542 }, { 0x6267, 110547 }, { 0x6268, 110552 }, { 0x6269, 110557 }, { 0x626A, 110562 }, { 0x626B, 110567 }, { 0x626C, 110572 }, { 0x626D, 110577 }, { 0x626E, 110582 }, { 0x626F, 110587 }, { 0x6270, 110592 }, { 0x6271, 110597 }, { 0x6272, 110602 }, { 0x6273, 110607 }, { 0x6274, 110612 }, { 0x6275, 110617 }, { 0x6276, 110622 }, { 0x6277, 110627 }, { 0x6278, 110632 }, { 0x6279, 110637 }, { 0x627A, 110642 }, { 0x627B, 110647 }, { 0x627C, 110261 }, { 0x627D, 110266 }, { 0x627E, 110271 }, { 0x627F, 110276 }, { 0x6280, 110281 }, { 0x6281, 110286 }, { 0x6282, 110291 }, { 0x6283, 110296 }, { 0x6284, 110301 }, { 0x6285, 110306 }, { 0x6286, 110311 }, { 0x6287, 110316 }, { 0x6288, 110321 }, { 0x6289, 110326 }, { 0x628A, 110331 }, { 0x628B, 110336 }, { 0x628C, 110341 }, { 0x628D, 110346 }, { 0x628E, 110351 }, { 0x628F, 110356 }, { 0x6290, 110361 }, { 0x6291, 110366 }, { 0x6292, 110371 }, { 0x6293, 110376 }, { 0x6294, 110381 }, { 0x6295, 110386 }, { 0x6296, 112115 }, { 0x6297, 112119 }, { 0x6298, 112123 }, { 0x6299, 112127 }, { 0x629A, 112131 }, { 0x629B, 112135 }, { 0x629C, 112139 }, { 0x629D, 112143 }, { 0x629E, 112147 }, { 0x629F, 112151 }, { 0x62A0, 112155 }, { 0x62A1, 112159 }, { 0x62A2, 112163 }, { 0x62A3, 112167 }, { 0x62A4, 112171 }, { 0x62A5, 112175 }, { 0x62A6, 112179 }, { 0x62A7, 112183 }, { 0x62A8, 112023 }, { 0x62A9, 112027 }, { 0x62AA, 112031 }, { 0x62AB, 112035 }, { 0x62AC, 112039 }, { 0x62AD, 112043 }, { 0x62AE, 112047 }, { 0x62AF, 112051 }, { 0x62B0, 112055 }, { 0x62B1, 112059 }, { 0x62B2, 112063 }, { 0x62B3, 112067 }, { 0x62B4, 112071 }, { 0x62B5, 112075 }, { 0x62B6, 112079 }, { 0x62B7, 112083 }, { 0x62B8, 112087 }, { 0x62B9, 112091 }, { 0x62BA, 112095 }, { 0x62BB, 112099 }, { 0x62BC, 112103 }, { 0x62BD, 112107 }, { 0x62BE, 112111 }, { 0x62BF, 110918 }, { 0x62C0, 110923 }, { 0x62C1, 110928 }, { 0x62C2, 110933 }, { 0x62C3, 110938 }, { 0x62C4, 110943 }, { 0x62C5, 110948 }, { 0x62C6, 110953 }, { 0x62C7, 110958 }, { 0x62C8, 110963 }, { 0x62C9, 110968 }, { 0x62CA, 110973 }, { 0x62CB, 110978 }, { 0x62CC, 110983 }, { 0x62CD, 110988 }, { 0x62CE, 110993 }, { 0x62CF, 110998 }, { 0x62D0, 111003 }, { 0x62D1, 111008 }, { 0x62D2, 111013 }, { 0x62D3, 111018 }, { 0x62D4, 111023 }, { 0x62D5, 111028 }, { 0x62D6, 111033 }, { 0x62D7, 111038 }, { 0x62D8, 111043 }, { 0x62D9, 110788 }, { 0x62DA, 110793 }, { 0x62DB, 110798 }, { 0x62DC, 110803 }, { 0x62DD, 110808 }, { 0x62DE, 110813 }, { 0x62DF, 110818 }, { 0x62E0, 110823 }, { 0x62E1, 110828 }, { 0x62E2, 110833 }, { 0x62E3, 110838 }, { 0x62E4, 110843 }, { 0x62E5, 110848 }, { 0x62E6, 110853 }, { 0x62E7, 110858 }, { 0x62E8, 110863 }, { 0x62E9, 110868 }, { 0x62EA, 110873 }, { 0x62EB, 110878 }, { 0x62EC, 110883 }, { 0x62ED, 110888 }, { 0x62EE, 110893 }, { 0x62EF, 110898 }, { 0x62F0, 110903 }, { 0x62F1, 110908 }, { 0x62F2, 110913 }, { 0x62F3, 112294 }, { 0x62F4, 112298 }, { 0x62F5, 112302 }, { 0x62F6, 112306 }, { 0x62F7, 112310 }, { 0x62F8, 112314 }, { 0x62F9, 112318 }, { 0x62FA, 112322 }, { 0x62FB, 112326 }, { 0x62FC, 112330 }, { 0x62FD, 112334 }, { 0x62FE, 112338 }, { 0x62FF, 112342 }, { 0x6300, 112346 }, { 0x6301, 112350 }, { 0x6302, 112354 }, { 0x6303, 112358 }, { 0x6304, 112362 }, { 0x6305, 112366 }, { 0x6306, 112370 }, { 0x6307, 112374 }, { 0x6308, 112190 }, { 0x6309, 112194 }, { 0x630A, 112198 }, { 0x630B, 112202 }, { 0x630C, 112206 }, { 0x630D, 112210 }, { 0x630E, 112214 }, { 0x630F, 112218 }, { 0x6310, 112222 }, { 0x6311, 112226 }, { 0x6312, 112230 }, { 0x6313, 112234 }, { 0x6314, 112238 }, { 0x6315, 112242 }, { 0x6316, 112246 }, { 0x6317, 112250 }, { 0x6318, 112254 }, { 0x6319, 112258 }, { 0x631A, 112262 }, { 0x631B, 112266 }, { 0x631C, 112270 }, { 0x631D, 112274 }, { 0x631E, 112278 }, { 0x631F, 112282 }, { 0x6320, 112286 }, { 0x6321, 112290 }, { 0x6322, 114540 }, { 0x6323, 114544 }, { 0x6324, 114548 }, { 0x6325, 114552 }, { 0x6326, 114556 }, { 0x6327, 114560 }, { 0x6328, 114564 }, { 0x6329, 114568 }, { 0x632A, 114572 }, { 0x632B, 114576 }, { 0x632C, 114580 }, { 0x632D, 114584 }, { 0x632E, 114588 }, { 0x632F, 114592 }, { 0x6330, 114596 }, { 0x6331, 114600 }, { 0x6332, 114604 }, { 0x6333, 114608 }, { 0x6334, 114612 }, { 0x6335, 114436 }, { 0x6336, 114440 }, { 0x6337, 114444 }, { 0x6338, 114448 }, { 0x6339, 114452 }, { 0x633A, 114456 }, { 0x633B, 114460 }, { 0x633C, 114464 }, { 0x633D, 114468 }, { 0x633E, 114472 }, { 0x633F, 114476 }, { 0x6340, 114480 }, { 0x6341, 114484 }, { 0x6342, 114488 }, { 0x6343, 114492 }, { 0x6344, 114496 }, { 0x6345, 114500 }, { 0x6346, 114504 }, { 0x6347, 114508 }, { 0x6348, 114512 }, { 0x6349, 114516 }, { 0x634A, 114520 }, { 0x634B, 114524 }, { 0x634C, 114528 }, { 0x634D, 114532 }, { 0x634E, 114536 }, { 0x634F, 111391 }, { 0x6350, 111396 }, { 0x6351, 111401 }, { 0x6352, 111406 }, { 0x6353, 111411 }, { 0x6354, 111416 }, { 0x6355, 111421 }, { 0x6356, 111426 }, { 0x6357, 111431 }, { 0x6358, 111436 }, { 0x6359, 111441 }, { 0x635A, 111446 }, { 0x635B, 111451 }, { 0x635C, 111456 }, { 0x635D, 111461 }, { 0x635E, 111466 }, { 0x635F, 111471 }, { 0x6360, 111476 }, { 0x6361, 111481 }, { 0x6362, 111486 }, { 0x6363, 111491 }, { 0x6364, 111496 }, { 0x6365, 111501 }, { 0x6366, 111506 }, { 0x6367, 111511 }, { 0x6368, 111516 }, { 0x6369, 111261 }, { 0x636A, 111266 }, { 0x636B, 111271 }, { 0x636C, 111276 }, { 0x636D, 111281 }, { 0x636E, 111286 }, { 0x636F, 111291 }, { 0x6370, 111296 }, { 0x6371, 111301 }, { 0x6372, 111306 }, { 0x6373, 111311 }, { 0x6374, 111316 }, { 0x6375, 111321 }, { 0x6376, 111326 }, { 0x6377, 111331 }, { 0x6378, 111336 }, { 0x6379, 111341 }, { 0x637A, 111346 }, { 0x637B, 111351 }, { 0x637C, 111356 }, { 0x637D, 111361 }, { 0x637E, 111366 }, { 0x637F, 111371 }, { 0x6380, 111376 }, { 0x6381, 111381 }, { 0x6382, 111386 }, { 0x6383, 114292 }, { 0x6384, 114296 }, { 0x6385, 114300 }, { 0x6386, 114304 }, { 0x6387, 114308 }, { 0x6388, 114312 }, { 0x6389, 114316 }, { 0x638A, 114320 }, { 0x638B, 114324 }, { 0x638C, 114328 }, { 0x638D, 114332 }, { 0x638E, 114336 }, { 0x638F, 114340 }, { 0x6390, 114344 }, { 0x6391, 114348 }, { 0x6392, 114352 }, { 0x6393, 114356 }, { 0x6394, 114360 }, { 0x6395, 114364 }, { 0x6396, 114368 }, { 0x6397, 114372 }, { 0x6398, 114376 }, { 0x6399, 114380 }, { 0x639A, 114384 }, { 0x639B, 114388 }, { 0x639C, 114392 }, { 0x639D, 113928 }, { 0x639E, 113932 }, { 0x639F, 113936 }, { 0x63A0, 113940 }, { 0x63A1, 113944 }, { 0x63A2, 113948 }, { 0x63A3, 113952 }, { 0x63A4, 113956 }, { 0x63A5, 113960 }, { 0x63A6, 113964 }, { 0x63A7, 113968 }, { 0x63A8, 113972 }, { 0x63A9, 113976 }, { 0x63AA, 113980 }, { 0x63AB, 113984 }, { 0x63AC, 113988 }, { 0x63AD, 113992 }, { 0x63AE, 113996 }, { 0x63AF, 114000 }, { 0x63B0, 114004 }, { 0x63B1, 114008 }, { 0x63B2, 114012 }, { 0x63B3, 114016 }, { 0x63B4, 114020 }, { 0x63B5, 114024 }, { 0x63B6, 114028 }, { 0x63B7, 113622 }, { 0x63B8, 113627 }, { 0x63B9, 113632 }, { 0x63BA, 113637 }, { 0x63BB, 113642 }, { 0x63BC, 113647 }, { 0x63BD, 113652 }, { 0x63BE, 113657 }, { 0x63BF, 113662 }, { 0x63C0, 113667 }, { 0x63C1, 113672 }, { 0x63C2, 113677 }, { 0x63C3, 113682 }, { 0x63C4, 113687 }, { 0x63C5, 113692 }, { 0x63C6, 113697 }, { 0x63C7, 113702 }, { 0x63C8, 113707 }, { 0x63C9, 113712 }, { 0x63CA, 113717 }, { 0x63CB, 113722 }, { 0x63CC, 113727 }, { 0x63CD, 113732 }, { 0x63CE, 113737 }, { 0x63CF, 113742 }, { 0x63D0, 113747 }, { 0x63D1, 112700 }, { 0x63D2, 112705 }, { 0x63D3, 112710 }, { 0x63D4, 112715 }, { 0x63D5, 112720 }, { 0x63D6, 112725 }, { 0x63D7, 112730 }, { 0x63D8, 112735 }, { 0x63D9, 112740 }, { 0x63DA, 112745 }, { 0x63DB, 112750 }, { 0x63DC, 112755 }, { 0x63DD, 112760 }, { 0x63DE, 112765 }, { 0x63DF, 112770 }, { 0x63E0, 112775 }, { 0x63E1, 112780 }, { 0x63E2, 112785 }, { 0x63E3, 112790 }, { 0x63E4, 112795 }, { 0x63E5, 112800 }, { 0x63E6, 112805 }, { 0x63E7, 112810 }, { 0x63E8, 112815 }, { 0x63E9, 112820 }, { 0x63EA, 112825 }, { 0x63EB, 114162 }, { 0x63EC, 114167 }, { 0x63ED, 114172 }, { 0x63EE, 114177 }, { 0x63EF, 114182 }, { 0x63F0, 114187 }, { 0x63F1, 114192 }, { 0x63F2, 114197 }, { 0x63F3, 114202 }, { 0x63F4, 114207 }, { 0x63F5, 114212 }, { 0x63F6, 114217 }, { 0x63F7, 114222 }, { 0x63F8, 114227 }, { 0x63F9, 114232 }, { 0x63FA, 114237 }, { 0x63FB, 114242 }, { 0x63FC, 114247 }, { 0x63FD, 114252 }, { 0x63FE, 114257 }, { 0x63FF, 114262 }, { 0x6400, 114267 }, { 0x6401, 114272 }, { 0x6402, 114277 }, { 0x6403, 114282 }, { 0x6404, 114287 }, { 0x6405, 114032 }, { 0x6406, 114037 }, { 0x6407, 114042 }, { 0x6408, 114047 }, { 0x6409, 114052 }, { 0x640A, 114057 }, { 0x640B, 114062 }, { 0x640C, 114067 }, { 0x640D, 114072 }, { 0x640E, 114077 }, { 0x640F, 114082 }, { 0x6410, 114087 }, { 0x6411, 114092 }, { 0x6412, 114097 }, { 0x6413, 114102 }, { 0x6414, 114107 }, { 0x6415, 114112 }, { 0x6416, 114117 }, { 0x6417, 114122 }, { 0x6418, 114127 }, { 0x6419, 114132 }, { 0x641A, 114137 }, { 0x641B, 114142 }, { 0x641C, 114147 }, { 0x641D, 114152 }, { 0x641E, 114157 }, { 0x641F, 113303 }, { 0x6420, 113309 }, { 0x6421, 113315 }, { 0x6422, 113321 }, { 0x6423, 113327 }, { 0x6424, 113333 }, { 0x6425, 113339 }, { 0x6426, 113345 }, { 0x6427, 113351 }, { 0x6428, 113357 }, { 0x6429, 113363 }, { 0x642A, 113369 }, { 0x642B, 113375 }, { 0x642C, 113381 }, { 0x642D, 113387 }, { 0x642E, 113393 }, { 0x642F, 113399 }, { 0x6430, 113405 }, { 0x6431, 113411 }, { 0x6432, 113417 }, { 0x6433, 113423 }, { 0x6434, 113429 }, { 0x6435, 113435 }, { 0x6436, 113441 }, { 0x6437, 113447 }, { 0x6438, 113453 }, { 0x6439, 112990 }, { 0x643A, 112996 }, { 0x643B, 113002 }, { 0x643C, 113008 }, { 0x643D, 113014 }, { 0x643E, 113020 }, { 0x643F, 113026 }, { 0x6440, 113032 }, { 0x6441, 113038 }, { 0x6442, 113044 }, { 0x6443, 113050 }, { 0x6444, 113056 }, { 0x6445, 113062 }, { 0x6446, 113068 }, { 0x6447, 113074 }, { 0x6448, 113080 }, { 0x6449, 113086 }, { 0x644A, 113092 }, { 0x644B, 113098 }, { 0x644C, 113104 }, { 0x644D, 113110 }, { 0x644E, 113116 }, { 0x644F, 113122 }, { 0x6450, 113128 }, { 0x6451, 113134 }, { 0x6452, 113140 }, { 0x6453, 112522 }, { 0x6454, 112526 }, { 0x6455, 112530 }, { 0x6456, 112534 }, { 0x6457, 112538 }, { 0x6458, 112542 }, { 0x6459, 112546 }, { 0x645A, 112550 }, { 0x645B, 112554 }, { 0x645C, 112558 }, { 0x645D, 112562 }, { 0x645E, 112566 }, { 0x645F, 112570 }, { 0x6460, 112574 }, { 0x6461, 112578 }, { 0x6462, 112582 }, { 0x6463, 112586 }, { 0x6464, 112590 }, { 0x6465, 112594 }, { 0x6466, 112598 }, { 0x6467, 112602 }, { 0x6468, 112606 }, { 0x6469, 112610 }, { 0x646A, 112614 }, { 0x646B, 112618 }, { 0x646C, 112622 }, { 0x646D, 112418 }, { 0x646E, 112422 }, { 0x646F, 112426 }, { 0x6470, 112430 }, { 0x6471, 112434 }, { 0x6472, 112438 }, { 0x6473, 112442 }, { 0x6474, 112446 }, { 0x6475, 112450 }, { 0x6476, 112454 }, { 0x6477, 112458 }, { 0x6478, 112462 }, { 0x6479, 112466 }, { 0x647A, 112470 }, { 0x647B, 112474 }, { 0x647C, 112478 }, { 0x647D, 112482 }, { 0x647E, 112486 }, { 0x647F, 112490 }, { 0x6480, 112494 }, { 0x6481, 112498 }, { 0x6482, 112502 }, { 0x6483, 112506 }, { 0x6484, 112510 }, { 0x6485, 112514 }, { 0x6486, 112518 }, { 0x6487, 111781 }, { 0x6488, 111786 }, { 0x6489, 111204 }, { 0x648A, 111192 }, { 0x648B, 111212 }, { 0x648C, 111208 }, { 0x648D, 111245 }, { 0x648E, 111200 }, { 0x648F, 111172 }, { 0x6490, 111232 }, { 0x6491, 111196 }, { 0x6492, 111216 }, { 0x6493, 111220 }, { 0x6494, 111152 }, { 0x6495, 111156 }, { 0x6496, 111164 }, { 0x6497, 111249 }, { 0x6498, 111160 }, { 0x6499, 111184 }, { 0x649A, 111236 }, { 0x649B, 111228 }, { 0x649C, 111188 }, { 0x649D, 111253 }, { 0x649E, 111176 }, { 0x649F, 111168 }, { 0x64A0, 111180 }, { 0x64A1, 111224 }, { 0x64A2, 110021 }, { 0x64A3, 110180 }, { 0x64A4, 110168 }, { 0x64A5, 110193 }, { 0x64A6, 110184 }, { 0x64A7, 110221 }, { 0x64A8, 110176 }, { 0x64A9, 110148 }, { 0x64AA, 110213 }, { 0x64AB, 110172 }, { 0x64AC, 110197 }, { 0x64AD, 110201 }, { 0x64AE, 110128 }, { 0x64AF, 110132 }, { 0x64B0, 110140 }, { 0x64B1, 110225 }, { 0x64B2, 110136 }, { 0x64B3, 110160 }, { 0x64B4, 110188 }, { 0x64B5, 110209 }, { 0x64B6, 110164 }, { 0x64B7, 110229 }, { 0x64B8, 110152 }, { 0x64B9, 110144 }, { 0x64BA, 110156 }, { 0x64BB, 110205 }, { 0x64BC, 111521 }, { 0x64BD, 111257 }, { 0x64BE, 110233 }, { 0x64BF, 110017 }, { 0x64C0, 109969 }, { 0x64C1, 109973 }, { 0x64C2, 109965 }, { 0x64C3, 111963 }, { 0x64C4, 111951 }, { 0x64C5, 111971 }, { 0x64C6, 111967 }, { 0x64C7, 112000 }, { 0x64C8, 111959 }, { 0x64C9, 111931 }, { 0x64CA, 111991 }, { 0x64CB, 111955 }, { 0x64CC, 111975 }, { 0x64CD, 111979 }, { 0x64CE, 111911 }, { 0x64CF, 111915 }, { 0x64D0, 111923 }, { 0x64D1, 112004 }, { 0x64D2, 111919 }, { 0x64D3, 111943 }, { 0x64D4, 111995 }, { 0x64D5, 111987 }, { 0x64D6, 111947 }, { 0x64D7, 112008 }, { 0x64D8, 111935 }, { 0x64D9, 111927 }, { 0x64DA, 111939 }, { 0x64DB, 111983 }, { 0x64DC, 111589 }, { 0x64DD, 111744 }, { 0x64DE, 111732 }, { 0x64DF, 111757 }, { 0x64E0, 111748 }, { 0x64E1, 111791 }, { 0x64E2, 111740 }, { 0x64E3, 111712 }, { 0x64E4, 111777 }, { 0x64E5, 111736 }, { 0x64E6, 111761 }, { 0x64E7, 111765 }, { 0x64E8, 111692 }, { 0x64E9, 111696 }, { 0x64EA, 111704 }, { 0x64EB, 111795 }, { 0x64EC, 111700 }, { 0x64ED, 111724 }, { 0x64EE, 111752 }, { 0x64EF, 111773 }, { 0x64F0, 111728 }, { 0x64F1, 111799 }, { 0x64F2, 111716 }, { 0x64F3, 111708 }, { 0x64F4, 111720 }, { 0x64F5, 111769 }, { 0x64F6, 112016 }, { 0x64F7, 112012 }, { 0x64F8, 111803 }, { 0x64F9, 111585 }, { 0x64FA, 111577 }, { 0x64FB, 111581 }, { 0x64FC, 111573 }, { 0x64FD, 110717 }, { 0x64FE, 110702 }, { 0x64FF, 110727 }, { 0x6500, 110722 }, { 0x6501, 110763 }, { 0x6502, 110712 }, { 0x6503, 110677 }, { 0x6504, 110752 }, { 0x6505, 110707 }, { 0x6506, 110732 }, { 0x6507, 110737 }, { 0x6508, 110652 }, { 0x6509, 110657 }, { 0x650A, 110667 }, { 0x650B, 110768 }, { 0x650C, 110662 }, { 0x650D, 110692 }, { 0x650E, 110757 }, { 0x650F, 110747 }, { 0x6510, 110697 }, { 0x6511, 110773 }, { 0x6512, 110682 }, { 0x6513, 110672 }, { 0x6514, 110687 }, { 0x6515, 110742 }, { 0x6516, 110257 }, { 0x6517, 110456 }, { 0x6518, 110441 }, { 0x6519, 110472 }, { 0x651A, 110461 }, { 0x651B, 110502 }, { 0x651C, 110451 }, { 0x651D, 110416 }, { 0x651E, 110497 }, { 0x651F, 110446 }, { 0x6520, 110477 }, { 0x6521, 110482 }, { 0x6522, 110391 }, { 0x6523, 110396 }, { 0x6524, 110406 }, { 0x6525, 110507 }, { 0x6526, 110401 }, { 0x6527, 110431 }, { 0x6528, 110466 }, { 0x6529, 110492 }, { 0x652A, 110436 }, { 0x652B, 110512 }, { 0x652C, 110421 }, { 0x652D, 110411 }, { 0x652E, 110426 }, { 0x652F, 110487 }, { 0x6530, 110783 }, { 0x6531, 110778 }, { 0x6532, 110517 }, { 0x6533, 110252 }, { 0x6534, 110242 }, { 0x6535, 110247 }, { 0x6536, 110237 }, { 0x6537, 113817 }, { 0x6538, 113802 }, { 0x6539, 113827 }, { 0x653A, 113822 }, { 0x653B, 113863 }, { 0x653C, 113812 }, { 0x653D, 113777 }, { 0x653E, 113852 }, { 0x653F, 113807 }, { 0x6540, 113832 }, { 0x6541, 113837 }, { 0x6542, 113752 }, { 0x6543, 113757 }, { 0x6544, 113767 }, { 0x6545, 113868 }, { 0x6546, 113762 }, { 0x6547, 113792 }, { 0x6548, 113857 }, { 0x6549, 113847 }, { 0x654A, 113797 }, { 0x654B, 113873 }, { 0x654C, 113782 }, { 0x654D, 113772 }, { 0x654E, 113787 }, { 0x654F, 113842 }, { 0x6550, 112696 }, { 0x6551, 112895 }, { 0x6552, 112880 }, { 0x6553, 112911 }, { 0x6554, 112900 }, { 0x6555, 112941 }, { 0x6556, 112890 }, { 0x6557, 112855 }, { 0x6558, 112936 }, { 0x6559, 112885 }, { 0x655A, 112916 }, { 0x655B, 112921 }, { 0x655C, 112830 }, { 0x655D, 112835 }, { 0x655E, 112845 }, { 0x655F, 112946 }, { 0x6560, 112840 }, { 0x6561, 112870 }, { 0x6562, 112905 }, { 0x6563, 112931 }, { 0x6564, 112875 }, { 0x6565, 112951 }, { 0x6566, 112860 }, { 0x6567, 112850 }, { 0x6568, 112865 }, { 0x6569, 112926 }, { 0x656A, 113883 }, { 0x656B, 113878 }, { 0x656C, 112956 }, { 0x656D, 112691 }, { 0x656E, 112631 }, { 0x656F, 112636 }, { 0x6570, 112626 }, { 0x6571, 113537 }, { 0x6572, 113519 }, { 0x6573, 113549 }, { 0x6574, 113543 }, { 0x6575, 113592 }, { 0x6576, 113531 }, { 0x6577, 113489 }, { 0x6578, 113579 }, { 0x6579, 113525 }, { 0x657A, 113555 }, { 0x657B, 113561 }, { 0x657C, 113459 }, { 0x657D, 113465 }, { 0x657E, 113477 }, { 0x657F, 113598 }, { 0x6580, 113471 }, { 0x6581, 113507 }, { 0x6582, 113585 }, { 0x6583, 113573 }, { 0x6584, 113513 }, { 0x6585, 113604 }, { 0x6586, 113495 }, { 0x6587, 113483 }, { 0x6588, 113501 }, { 0x6589, 113567 }, { 0x658A, 112985 }, { 0x658B, 113224 }, { 0x658C, 113206 }, { 0x658D, 113243 }, { 0x658E, 113230 }, { 0x658F, 113279 }, { 0x6590, 113218 }, { 0x6591, 113176 }, { 0x6592, 113273 }, { 0x6593, 113212 }, { 0x6594, 113249 }, { 0x6595, 113255 }, { 0x6596, 113146 }, { 0x6597, 113152 }, { 0x6598, 113164 }, { 0x6599, 113285 }, { 0x659A, 113158 }, { 0x659B, 113194 }, { 0x659C, 113236 }, { 0x659D, 113267 }, { 0x659E, 113200 }, { 0x659F, 113291 }, { 0x65A0, 113182 }, { 0x65A1, 113170 }, { 0x65A2, 113188 }, { 0x65A3, 113261 }, { 0x65A4, 113616 }, { 0x65A5, 113610 }, { 0x65A6, 113297 }, { 0x65A7, 112979 }, { 0x65A8, 112967 }, { 0x65A9, 112973 }, { 0x65AA, 112961 }, { 0x65AB, 111241 }, { 0x65AC, 110217 }, { 0x65AD, 110001 }, { 0x65AE, 109977 }, { 0x65AF, 109985 }, { 0x65B0, 110013 }, { 0x65B1, 109993 }, { 0x65B2, 109989 }, { 0x65B3, 109981 }, { 0x65B4, 110009 }, { 0x65B5, 110005 }, { 0x65B6, 109997 }, { 0x65B7, 114420 }, { 0x65B8, 114396 }, { 0x65B9, 114404 }, { 0x65BA, 114432 }, { 0x65BB, 114412 }, { 0x65BC, 114408 }, { 0x65BD, 114400 }, { 0x65BE, 114428 }, { 0x65BF, 114424 }, { 0x65C0, 114416 }, { 0x65C1, 113912 }, { 0x65C2, 113888 }, { 0x65C3, 113896 }, { 0x65C4, 113924 }, { 0x65C5, 113904 }, { 0x65C6, 113900 }, { 0x65C7, 113892 }, { 0x65C8, 113920 }, { 0x65C9, 113916 }, { 0x65CA, 113908 }, { 0x65CB, 112671 }, { 0x65CC, 112641 }, { 0x65CD, 112651 }, { 0x65CE, 112686 }, { 0x65CF, 112661 }, { 0x65D0, 112656 }, { 0x65D1, 112646 }, { 0x65D2, 112681 }, { 0x65D3, 112676 }, { 0x65D4, 112666 }, { 0x65D5, 112402 }, { 0x65D6, 112378 }, { 0x65D7, 112386 }, { 0x65D8, 112414 }, { 0x65D9, 112394 }, { 0x65DA, 112390 }, { 0x65DB, 112382 }, { 0x65DC, 112410 }, { 0x65DD, 112406 }, { 0x65DE, 112398 }, { 0x65DF, 107040 }, { 0x65E0, 108186 }, { 0x65E1, 106833 }, { 0x65E2, 107918 }, { 0x65E3, 108085 }, { 0x65E4, 107961 }, { 0x65E5, 107065 }, { 0x65E6, 108189 }, { 0x65E7, 107515 }, { 0x65E8, 107463 }, { 0x65E9, 107214 }, { 0x65EA, 107218 }, { 0x65EB, 107222 }, { 0x65EC, 108198 }, { 0x65ED, 107241 }, { 0x65EE, 108202 }, { 0x65EF, 107253 }, { 0x65F0, 107361 }, { 0x65F1, 107343 }, { 0x65F2, 107043 }, { 0x65F3, 107227 }, { 0x65F4, 107386 }, { 0x65F5, 107391 }, { 0x65F6, 107456 }, { 0x65F7, 107428 }, { 0x65F8, 107442 }, { 0x65F9, 107367 }, { 0x65FA, 108227 }, { 0x65FB, 107625 }, { 0x65FC, 107069 }, { 0x65FD, 107288 }, { 0x65FE, 108217 }, { 0x65FF, 107379 }, { 0x6600, 107258 }, { 0x6601, 107293 }, { 0x6602, 107348 }, { 0x6603, 107049 }, { 0x6604, 107057 }, { 0x6605, 107233 }, { 0x6606, 107245 }, { 0x6607, 107312 }, { 0x6608, 107330 }, { 0x6609, 107324 }, { 0x660A, 107318 }, { 0x660B, 107545 }, { 0x660C, 107398 }, { 0x660D, 107413 }, { 0x660E, 107405 }, { 0x660F, 107670 }, { 0x6610, 107174 }, { 0x6611, 107448 }, { 0x6612, 107372 }, { 0x6613, 107421 }, { 0x6614, 107434 }, { 0x6615, 107663 }, { 0x6616, 107167 }, { 0x6617, 107682 }, { 0x6618, 107689 }, { 0x6619, 107154 }, { 0x661A, 107146 }, { 0x661B, 107188 }, { 0x661C, 107336 }, { 0x661D, 107305 }, { 0x661E, 107299 }, { 0x661F, 107640 }, { 0x6620, 107648 }, { 0x6621, 107656 }, { 0x6622, 107181 }, { 0x6623, 107754 }, { 0x6624, 107758 }, { 0x6625, 107763 }, { 0x6626, 107768 }, { 0x6627, 107773 }, { 0x6628, 106956 }, { 0x6629, 106991 }, { 0x662A, 108051 }, { 0x662B, 107707 }, { 0x662C, 107782 }, { 0x662D, 107718 }, { 0x662E, 107795 }, { 0x662F, 107712 }, { 0x6630, 107788 }, { 0x6631, 107725 }, { 0x6632, 106804 }, { 0x6633, 106809 }, { 0x6634, 108045 }, { 0x6635, 107909 }, { 0x6636, 107732 }, { 0x6637, 107746 }, { 0x6638, 107738 }, { 0x6639, 107705 }, { 0x663A, 107847 }, { 0x663B, 107779 }, { 0x663C, 107839 }, { 0x663D, 107803 }, { 0x663E, 107835 }, { 0x663F, 107843 }, { 0x6640, 107808 }, { 0x6641, 107814 }, { 0x6642, 107818 }, { 0x6643, 107824 }, { 0x6644, 107831 }, { 0x6645, 106950 }, { 0x6646, 106968 }, { 0x6647, 106952 }, { 0x6648, 106972 }, { 0x6649, 107900 }, { 0x664A, 107852 }, { 0x664B, 106815 }, { 0x664C, 106798 }, { 0x664D, 106823 }, { 0x664E, 106850 }, { 0x664F, 106818 }, { 0x6650, 106800 }, { 0x6651, 106828 }, { 0x6652, 106854 }, { 0x6653, 108259 }, { 0x6654, 108257 }, { 0x6655, 108180 }, { 0x6656, 107903 }, { 0x6657, 107921 }, { 0x6658, 107905 }, { 0x6659, 107925 }, { 0x665A, 108056 }, { 0x665B, 108069 }, { 0x665C, 108039 }, { 0x665D, 108137 }, { 0x665E, 108064 }, { 0x665F, 108140 }, { 0x6660, 108059 }, { 0x6661, 108041 }, { 0x6662, 108144 }, { 0x6663, 108150 }, { 0x6664, 107947 }, { 0x6665, 107265 }, { 0x6666, 108206 }, { 0x6667, 108121 }, { 0x6668, 107989 }, { 0x6669, 108156 }, { 0x666A, 107270 }, { 0x666B, 107276 }, { 0x666C, 108126 }, { 0x666D, 107570 }, { 0x666E, 107586 }, { 0x666F, 107580 }, { 0x6670, 107574 }, { 0x6671, 107562 }, { 0x6672, 107527 }, { 0x6673, 108232 }, { 0x6674, 107929 }, { 0x6675, 107999 }, { 0x6676, 107605 }, { 0x6677, 107566 }, { 0x6678, 107610 }, { 0x6679, 107601 }, { 0x667A, 108168 }, { 0x667B, 107596 }, { 0x667C, 108163 }, { 0x667D, 108014 }, { 0x667E, 108007 }, { 0x667F, 107592 }, { 0x6680, 108236 }, { 0x6681, 108159 }, { 0x6682, 108003 }, { 0x6683, 107356 }, { 0x6684, 108222 }, { 0x6685, 108132 }, { 0x6686, 108074 }, { 0x6687, 107994 }, { 0x6688, 107282 }, { 0x6689, 108211 }, { 0x668A, 107004 }, { 0x668B, 108077 }, { 0x668C, 107949 }, { 0x668D, 107000 }, { 0x668E, 107035 }, { 0x668F, 107016 }, { 0x6690, 108182 }, { 0x6691, 107914 }, { 0x6692, 107957 }, { 0x6693, 107020 }, { 0x6694, 107030 }, { 0x6695, 107024 }, { 0x6696, 107008 }, { 0x6697, 107012 }, { 0x6698, 107854 }, { 0x6699, 107075 }, { 0x669A, 108193 }, { 0x669B, 108262 }, { 0x669C, 107864 }, { 0x669D, 107858 }, { 0x669E, 107870 }, { 0x669F, 106836 }, { 0x66A0, 108088 }, { 0x66A1, 107969 }, { 0x66A2, 107964 }, { 0x66A3, 107631 }, { 0x66A4, 108172 }, { 0x66A5, 107615 }, { 0x66A6, 108240 }, { 0x66A7, 107700 }, { 0x66A8, 107619 }, { 0x66A9, 107896 }, { 0x66AA, 107677 }, { 0x66AB, 107696 }, { 0x66AC, 107635 }, { 0x66AD, 108244 }, { 0x66AE, 108268 }, { 0x66AF, 106858 }, { 0x66B0, 108175 }, { 0x66B1, 108033 }, { 0x66B2, 108027 }, { 0x66B3, 108022 }, { 0x66B4, 108249 }, { 0x66B5, 106976 }, { 0x66B6, 106982 }, { 0x66B7, 107889 }, { 0x66B8, 107882 }, { 0x66B9, 107876 }, { 0x66BA, 108117 }, { 0x66BB, 107085 }, { 0x66BC, 108102 }, { 0x66BD, 107118 }, { 0x66BE, 107125 }, { 0x66BF, 107111 }, { 0x66C0, 107097 }, { 0x66C1, 107090 }, { 0x66C2, 107104 }, { 0x66C3, 107202 }, { 0x66C4, 107195 }, { 0x66C5, 107080 }, { 0x66C6, 107209 }, { 0x66C7, 107139 }, { 0x66C8, 106961 }, { 0x66C9, 107132 }, { 0x66CA, 107162 }, { 0x66CB, 106841 }, { 0x66CC, 106845 }, { 0x66CD, 108097 }, { 0x66CE, 108107 }, { 0x66CF, 108093 }, { 0x66D0, 108112 }, { 0x66D1, 107984 }, { 0x66D2, 107979 }, { 0x66D3, 107975 }, { 0x66D4, 107468 }, { 0x66D5, 107471 }, { 0x66D6, 107493 }, { 0x66D7, 107498 }, { 0x66D8, 107488 }, { 0x66D9, 107558 }, { 0x66DA, 107539 }, { 0x66DB, 107552 }, { 0x66DC, 107533 }, { 0x66DD, 107503 }, { 0x66DE, 107475 }, { 0x66DF, 107521 }, { 0x66E0, 107509 }, { 0x66E1, 107481 }, { 0x66E2, 106989 }, { 0x66E3, 106997 }, { 0x66E4, 106611 }, { 0x66E5, 106617 }, { 0x66E6, 106614 }, { 0x66E7, 106456 }, { 0x66E8, 106462 }, { 0x66E9, 106459 }, { 0x66EA, 106664 }, { 0x66EB, 106670 }, { 0x66EC, 106667 }, { 0x66ED, 106424 }, { 0x66EE, 106430 }, { 0x66EF, 106427 }, { 0x66F0, 106273 }, { 0x66F1, 106279 }, { 0x66F2, 106276 }, { 0x66F3, 106774 }, { 0x66F4, 106771 }, { 0x66F5, 106752 }, { 0x66F6, 106760 }, { 0x66F7, 106756 }, { 0x66F8, 106764 }, { 0x66F9, 106768 }, { 0x66FA, 106437 }, { 0x66FB, 106445 }, { 0x66FC, 106441 }, { 0x66FD, 106449 }, { 0x66FE, 106453 }, { 0x66FF, 106748 }, { 0x6700, 108274 }, { 0x6701, 108279 }, { 0x6702, 108296 }, { 0x6703, 108300 }, { 0x6704, 108284 }, { 0x6705, 108290 }, { 0x6706, 108304 }, { 0x6707, 108825 }, { 0x6708, 109279 }, { 0x6709, 108839 }, { 0x670A, 108844 }, { 0x670B, 108834 }, { 0x670C, 108849 }, { 0x670D, 108829 }, { 0x670E, 108801 }, { 0x670F, 108796 }, { 0x6710, 108805 }, { 0x6711, 108809 }, { 0x6712, 108675 }, { 0x6713, 108859 }, { 0x6714, 108854 }, { 0x6715, 108864 }, { 0x6716, 108868 }, { 0x6717, 108539 }, { 0x6718, 108543 }, { 0x6719, 108535 }, { 0x671A, 108774 }, { 0x671B, 108778 }, { 0x671C, 108770 }, { 0x671D, 108782 }, { 0x671E, 108667 }, { 0x671F, 108671 }, { 0x6720, 108663 }, { 0x6721, 108524 }, { 0x6722, 108528 }, { 0x6723, 108520 }, { 0x6724, 108878 }, { 0x6725, 108882 }, { 0x6726, 108874 }, { 0x6727, 108750 }, { 0x6728, 108754 }, { 0x6729, 108746 }, { 0x672A, 108343 }, { 0x672B, 108339 }, { 0x672C, 108347 }, { 0x672D, 108355 }, { 0x672E, 108351 }, { 0x672F, 108359 }, { 0x6730, 108336 }, { 0x6731, 108326 }, { 0x6732, 108321 }, { 0x6733, 108331 }, { 0x6734, 108384 }, { 0x6735, 108388 }, { 0x6736, 108380 }, { 0x6737, 108392 }, { 0x6738, 108440 }, { 0x6739, 108444 }, { 0x673A, 108436 }, { 0x673B, 108448 }, { 0x673C, 108401 }, { 0x673D, 108406 }, { 0x673E, 108396 }, { 0x673F, 108411 }, { 0x6740, 108421 }, { 0x6741, 108426 }, { 0x6742, 108416 }, { 0x6743, 108431 }, { 0x6744, 109293 }, { 0x6745, 109298 }, { 0x6746, 109288 }, { 0x6747, 109303 }, { 0x6748, 109283 }, { 0x6749, 109251 }, { 0x674A, 109246 }, { 0x674B, 109255 }, { 0x674C, 109259 }, { 0x674D, 109161 }, { 0x674E, 109313 }, { 0x674F, 109308 }, { 0x6750, 109324 }, { 0x6751, 109318 }, { 0x6752, 108997 }, { 0x6753, 109238 }, { 0x6754, 109242 }, { 0x6755, 109234 }, { 0x6756, 109158 }, { 0x6757, 108986 }, { 0x6758, 108990 }, { 0x6759, 108982 }, { 0x675A, 109333 }, { 0x675B, 109337 }, { 0x675C, 109329 }, { 0x675D, 109212 }, { 0x675E, 109216 }, { 0x675F, 109208 }, { 0x6760, 108471 }, { 0x6761, 108467 }, { 0x6762, 108475 }, { 0x6763, 108459 }, { 0x6764, 108455 }, { 0x6765, 108463 }, { 0x6766, 108452 }, { 0x6767, 108699 }, { 0x6768, 108704 }, { 0x6769, 108694 }, { 0x676A, 108709 }, { 0x676B, 108719 }, { 0x676C, 108724 }, { 0x676D, 108714 }, { 0x676E, 108729 }, { 0x676F, 108734 }, { 0x6770, 108740 }, { 0x6771, 108551 }, { 0x6772, 108555 }, { 0x6773, 108547 }, { 0x6774, 108574 }, { 0x6775, 108583 }, { 0x6776, 108570 }, { 0x6777, 108578 }, { 0x6778, 108604 }, { 0x6779, 108610 }, { 0x677A, 108598 }, { 0x677B, 108622 }, { 0x677C, 108628 }, { 0x677D, 108616 }, { 0x677E, 108678 }, { 0x677F, 108786 }, { 0x6780, 108791 }, { 0x6781, 108903 }, { 0x6782, 108889 }, { 0x6783, 108917 }, { 0x6784, 108886 }, { 0x6785, 108688 }, { 0x6786, 108564 }, { 0x6787, 108592 }, { 0x6788, 108639 }, { 0x6789, 108911 }, { 0x678A, 108897 }, { 0x678B, 108925 }, { 0x678C, 108683 }, { 0x678D, 108559 }, { 0x678E, 108587 }, { 0x678F, 108634 }, { 0x6790, 108906 }, { 0x6791, 108892 }, { 0x6792, 108920 }, { 0x6793, 108651 }, { 0x6794, 108657 }, { 0x6795, 108645 }, { 0x6796, 109194 }, { 0x6797, 109188 }, { 0x6798, 109048 }, { 0x6799, 109034 }, { 0x679A, 109055 }, { 0x679B, 109041 }, { 0x679C, 109115 }, { 0x679D, 109101 }, { 0x679E, 109108 }, { 0x679F, 109094 }, { 0x67A0, 109152 }, { 0x67A1, 109146 }, { 0x67A2, 109366 }, { 0x67A3, 109353 }, { 0x67A4, 109379 }, { 0x67A5, 109182 }, { 0x67A6, 109176 }, { 0x67A7, 109011 }, { 0x67A8, 109004 }, { 0x67A9, 109026 }, { 0x67AA, 109018 }, { 0x67AB, 109087 }, { 0x67AC, 109073 }, { 0x67AD, 109080 }, { 0x67AE, 109066 }, { 0x67AF, 109140 }, { 0x67B0, 109134 }, { 0x67B1, 109361 }, { 0x67B2, 109348 }, { 0x67B3, 109374 }, { 0x67B4, 109168 }, { 0x67B5, 109172 }, { 0x67B6, 109164 }, { 0x67B7, 109200 }, { 0x67B8, 109204 }, { 0x67B9, 109000 }, { 0x67BA, 109062 }, { 0x67BB, 109130 }, { 0x67BC, 109126 }, { 0x67BD, 109122 }, { 0x67BE, 109358 }, { 0x67BF, 109345 }, { 0x67C0, 109371 }, { 0x67C1, 109341 }, { 0x67C2, 108502 }, { 0x67C3, 108514 }, { 0x67C4, 108496 }, { 0x67C5, 108508 }, { 0x67C6, 108958 }, { 0x67C7, 108974 }, { 0x67C8, 108942 }, { 0x67C9, 108950 }, { 0x67CA, 108966 }, { 0x67CB, 108934 }, { 0x67CC, 108764 }, { 0x67CD, 108758 }, { 0x67CE, 109227 }, { 0x67CF, 109220 }, { 0x67D0, 108820 }, { 0x67D1, 108815 }, { 0x67D2, 109272 }, { 0x67D3, 109265 }, { 0x67D4, 106737 }, { 0x67D5, 106733 }, { 0x67D6, 106713 }, { 0x67D7, 106716 }, { 0x67D8, 106724 }, { 0x67D9, 106730 }, { 0x67DA, 106741 }, { 0x67DB, 106744 }, { 0x67DC, 106719 }, { 0x67DD, 106727 }, { 0x67DE, 106353 }, { 0x67DF, 106355 }, { 0x67E0, 106370 }, { 0x67E1, 106362 }, { 0x67E2, 106378 }, { 0x67E3, 106366 }, { 0x67E4, 106374 }, { 0x67E5, 106358 }, { 0x67E6, 106326 }, { 0x67E7, 106309 }, { 0x67E8, 106317 }, { 0x67E9, 106777 }, { 0x67EA, 106785 }, { 0x67EB, 106781 }, { 0x67EC, 106657 }, { 0x67ED, 106647 }, { 0x67EE, 106642 }, { 0x67EF, 106652 }, { 0x67F0, 106792 }, { 0x67F1, 106789 }, { 0x67F2, 106795 }, { 0x67F3, 106292 }, { 0x67F4, 106302 }, { 0x67F5, 106299 }, { 0x67F6, 106255 }, { 0x67F7, 106259 }, { 0x67F8, 106284 }, { 0x67F9, 106295 }, { 0x67FA, 106288 }, { 0x67FB, 106305 }, { 0x67FC, 106252 }, { 0x67FD, 106941 }, { 0x67FE, 106944 }, { 0x67FF, 106947 }, { 0x6800, 108369 }, { 0x6801, 108372 }, { 0x6802, 108376 }, { 0x6803, 108482 }, { 0x6804, 108485 }, { 0x6805, 108489 }, { 0x6806, 108363 }, { 0x6807, 108479 }, { 0x6808, 108366 }, { 0x6809, 106633 }, { 0x680A, 106639 }, { 0x680B, 106636 }, { 0x680C, 106603 }, { 0x680D, 106607 }, { 0x680E, 106599 }, { 0x680F, 106282 }, { 0x6810, 106415 }, { 0x6811, 106412 }, { 0x6812, 106421 }, { 0x6813, 106418 }, { 0x6814, 106244 }, { 0x6815, 106248 }, { 0x6816, 106234 }, { 0x6817, 106239 }, { 0x6818, 106630 }, { 0x6819, 106627 }, { 0x681A, 106557 }, { 0x681B, 106553 }, { 0x681C, 106549 }, { 0x681D, 106527 }, { 0x681E, 106534 }, { 0x681F, 106530 }, { 0x6820, 106516 }, { 0x6821, 106523 }, { 0x6822, 106519 }, { 0x6823, 106490 }, { 0x6824, 106494 }, { 0x6825, 106498 }, { 0x6826, 106476 }, { 0x6827, 106485 }, { 0x6828, 106480 }, { 0x6829, 106502 }, { 0x682A, 106511 }, { 0x682B, 106506 }, { 0x682C, 106465 }, { 0x682D, 106468 }, { 0x682E, 106472 }, { 0x682F, 106538 }, { 0x6830, 106545 }, { 0x6831, 106541 }, { 0x6832, 106406 }, { 0x6833, 106263 }, { 0x6834, 106268 }, { 0x6835, 106561 }, { 0x6836, 106568 }, { 0x6837, 106564 }, { 0x6838, 106708 }, { 0x6839, 106704 }, { 0x683A, 106673 }, { 0x683B, 106678 }, { 0x683C, 106699 }, { 0x683D, 106684 }, { 0x683E, 106694 }, { 0x683F, 106689 }, { 0x6840, 106572 }, { 0x6841, 106596 }, { 0x6842, 106583 }, { 0x6843, 106587 }, { 0x6844, 106574 }, { 0x6845, 106578 }, { 0x6846, 106592 }, { 0x6847, 108532 }, { 0x6848, 108994 }, { 0x6849, 106410 }, { 0x684A, 106351 }, { 0x684B, 107940 }, { 0x684C, 106928 }, { 0x684D, 106932 }, { 0x684E, 107935 }, { 0x684F, 107942 }, { 0x6850, 106936 }, { 0x6851, 108314 }, { 0x6852, 108310 }, { 0x6853, 108318 }, { 0x6854, 106620 }, { 0x6855, 106403 }, { 0x6856, 106382 }, { 0x6857, 106385 }, { 0x6858, 106388 }, { 0x6859, 106391 }, { 0x685A, 106394 }, { 0x685B, 106397 }, { 0x685C, 106400 }, { 0x685D, 106662 }, { 0x685E, 108493 }, { 0x685F, 108931 }, { 0x6860, 106880 }, { 0x6861, 106877 }, { 0x6862, 106867 }, { 0x6863, 106863 }, { 0x6864, 106874 }, { 0x6865, 106870 }, { 0x6866, 106435 }, { 0x6867, 106348 }, { 0x6868, 107933 }, { 0x6869, 106433 }, { 0x686A, 108255 }, { 0x686B, 106333 }, { 0x686C, 106336 }, { 0x686D, 106339 }, { 0x686E, 106342 }, { 0x686F, 106345 }, { 0x6870, 106883 }, { 0x6871, 106886 }, { 0x6872, 106889 }, { 0x6873, 106892 }, { 0x6874, 106895 }, { 0x6875, 106898 }, { 0x6876, 106901 }, { 0x6877, 106904 }, { 0x6878, 106907 }, { 0x6879, 106910 }, { 0x687A, 106913 }, { 0x687B, 106916 }, { 0x687C, 106919 }, { 0x687D, 106922 }, { 0x687E, 106925 }, { 0x687F, 91858 }, { 0x6880, 91883 }, { 0x6881, 91907 }, { 0x6882, 91972 }, { 0x6883, 91923 }, { 0x6884, 91948 }, { 0x6885, 92001 }, { 0x6886, 91968 }, { 0x6887, 91895 }, { 0x6888, 91976 }, { 0x6889, 91846 }, { 0x688A, 91956 }, { 0x688B, 91899 }, { 0x688C, 91993 }, { 0x688D, 91997 }, { 0x688E, 91931 }, { 0x688F, 91867 }, { 0x6890, 91960 }, { 0x6891, 91935 }, { 0x6892, 91939 }, { 0x6893, 91964 }, { 0x6894, 91879 }, { 0x6895, 91927 }, { 0x6896, 91891 }, { 0x6897, 91903 }, { 0x6898, 91875 }, { 0x6899, 91952 }, { 0x689A, 91871 }, { 0x689B, 91919 }, { 0x689C, 91915 }, { 0x689D, 91911 }, { 0x689E, 91854 }, { 0x689F, 91943 }, { 0x68A0, 91850 }, { 0x68A1, 91987 }, { 0x68A2, 91862 }, { 0x68A3, 91981 }, { 0x68A4, 91887 }, { 0x68A5, 31471 }, { 0x68A6, 31476 }, { 0x68A7, 31481 }, { 0x68A8, 31791 }, { 0x68A9, 31942 }, { 0x68AA, 31846 }, { 0x68AB, 31706 }, { 0x68AC, 32368 }, { 0x68AD, 31486 }, { 0x68AE, 31491 }, { 0x68AF, 31496 }, { 0x68B0, 32100 }, { 0x68B1, 32060 }, { 0x68B2, 32040 }, { 0x68B3, 31691 }, { 0x68B4, 32444 }, { 0x68B5, 32186 }, { 0x68B6, 31771 }, { 0x68B7, 31711 }, { 0x68B8, 32165 }, { 0x68B9, 31501 }, { 0x68BA, 31506 }, { 0x68BB, 31511 }, { 0x68BC, 31761 }, { 0x68BD, 31937 }, { 0x68BE, 32241 }, { 0x68BF, 32419 }, { 0x68C0, 31516 }, { 0x68C1, 31521 }, { 0x68C2, 31526 }, { 0x68C3, 32221 }, { 0x68C4, 31952 }, { 0x68C5, 31982 }, { 0x68C6, 32160 }, { 0x68C7, 31531 }, { 0x68C8, 31536 }, { 0x68C9, 31541 }, { 0x68CA, 32287 }, { 0x68CB, 31967 }, { 0x68CC, 32297 }, { 0x68CD, 32206 }, { 0x68CE, 32155 }, { 0x68CF, 32125 }, { 0x68D0, 32145 }, { 0x68D1, 32449 }, { 0x68D2, 32363 }, { 0x68D3, 31561 }, { 0x68D4, 31566 }, { 0x68D5, 31571 }, { 0x68D6, 32282 }, { 0x68D7, 32050 }, { 0x68D8, 32150 }, { 0x68D9, 31861 }, { 0x68DA, 32454 }, { 0x68DB, 31591 }, { 0x68DC, 31596 }, { 0x68DD, 31601 }, { 0x68DE, 31886 }, { 0x68DF, 31831 }, { 0x68E0, 31736 }, { 0x68E1, 32236 }, { 0x68E2, 32019 }, { 0x68E3, 31546 }, { 0x68E4, 31551 }, { 0x68E5, 31556 }, { 0x68E6, 31912 }, { 0x68E7, 32373 }, { 0x68E8, 32378 }, { 0x68E9, 31576 }, { 0x68EA, 31581 }, { 0x68EB, 31586 }, { 0x68EC, 31922 }, { 0x68ED, 31741 }, { 0x68EE, 31987 }, { 0x68EF, 31811 }, { 0x68F0, 31606 }, { 0x68F1, 31611 }, { 0x68F2, 31616 }, { 0x68F3, 32256 }, { 0x68F4, 32035 }, { 0x68F5, 32271 }, { 0x68F6, 31781 }, { 0x68F7, 32347 }, { 0x68F8, 31621 }, { 0x68F9, 31626 }, { 0x68FA, 31631 }, { 0x68FB, 32014 }, { 0x68FC, 31866 }, { 0x68FD, 32175 }, { 0x68FE, 32075 }, { 0x68FF, 31636 }, { 0x6900, 31641 }, { 0x6901, 31646 }, { 0x6902, 31856 }, { 0x6903, 31841 }, { 0x6904, 32135 }, { 0x6905, 31907 }, { 0x6906, 32459 }, { 0x6907, 31972 }, { 0x6908, 31651 }, { 0x6909, 31656 }, { 0x690A, 31661 }, { 0x690B, 32055 }, { 0x690C, 32317 }, { 0x690D, 32353 }, { 0x690E, 31671 }, { 0x690F, 32404 }, { 0x6910, 31666 }, { 0x6911, 31947 }, { 0x6912, 31676 }, { 0x6913, 32170 }, { 0x6914, 31881 }, { 0x6915, 32110 }, { 0x6916, 31731 }, { 0x6917, 32120 }, { 0x6918, 31902 }, { 0x6919, 31726 }, { 0x691A, 32439 }, { 0x691B, 31696 }, { 0x691C, 31917 }, { 0x691D, 31681 }, { 0x691E, 31876 }, { 0x691F, 32045 }, { 0x6920, 32201 }, { 0x6921, 32251 }, { 0x6922, 32070 }, { 0x6923, 32266 }, { 0x6924, 32105 }, { 0x6925, 31896 }, { 0x6926, 31998 }, { 0x6927, 32388 }, { 0x6928, 32246 }, { 0x6929, 32025 }, { 0x692A, 32312 }, { 0x692B, 32424 }, { 0x692C, 32302 }, { 0x692D, 32307 }, { 0x692E, 32394 }, { 0x692F, 31751 }, { 0x6930, 32358 }, { 0x6931, 31806 }, { 0x6932, 31962 }, { 0x6933, 31716 }, { 0x6934, 31871 }, { 0x6935, 31721 }, { 0x6936, 31977 }, { 0x6937, 31796 }, { 0x6938, 32196 }, { 0x6939, 31776 }, { 0x693A, 32080 }, { 0x693B, 31701 }, { 0x693C, 32414 }, { 0x693D, 31826 }, { 0x693E, 32332 }, { 0x693F, 32342 }, { 0x6940, 32409 }, { 0x6941, 32276 }, { 0x6942, 31992 }, { 0x6943, 32180 }, { 0x6944, 32130 }, { 0x6945, 31927 }, { 0x6946, 31836 }, { 0x6947, 31686 }, { 0x6948, 32009 }, { 0x6949, 32030 }, { 0x694A, 32261 }, { 0x694B, 32090 }, { 0x694C, 31746 }, { 0x694D, 32211 }, { 0x694E, 31932 }, { 0x694F, 32004 }, { 0x6950, 31821 }, { 0x6951, 31816 }, { 0x6952, 32327 }, { 0x6953, 32085 }, { 0x6954, 32115 }, { 0x6955, 32095 }, { 0x6956, 32429 }, { 0x6957, 32065 }, { 0x6958, 31801 }, { 0x6959, 31786 }, { 0x695A, 32231 }, { 0x695B, 32434 }, { 0x695C, 32216 }, { 0x695D, 32140 }, { 0x695E, 32383 }, { 0x695F, 32399 }, { 0x6960, 32226 }, { 0x6961, 32337 }, { 0x6962, 31891 }, { 0x6963, 32191 }, { 0x6964, 31851 }, { 0x6965, 32292 }, { 0x6966, 31756 }, { 0x6967, 32322 }, { 0x6968, 31957 }, { 0x6969, 31766 }, { 0x696A, 31435 }, { 0x696B, 31443 }, { 0x696C, 31467 }, { 0x696D, 31451 }, { 0x696E, 31447 }, { 0x696F, 31439 }, { 0x6970, 31463 }, { 0x6971, 31459 }, { 0x6972, 31455 }, { 0x6973, 32475 }, { 0x6974, 32470 }, { 0x6975, 32486 }, { 0x6976, 32496 }, { 0x6977, 32464 }, { 0x6978, 32480 }, { 0x6979, 32491 }, { 0x697A, 15668 }, { 0x697B, 15688 }, { 0x697C, 15676 }, { 0x697D, 15680 }, { 0x697E, 15576 }, { 0x697F, 15692 }, { 0x6980, 15592 }, { 0x6981, 15612 }, { 0x6982, 15596 }, { 0x6983, 15560 }, { 0x6984, 15580 }, { 0x6985, 15564 }, { 0x6986, 15568 }, { 0x6987, 15620 }, { 0x6988, 15660 }, { 0x6989, 15656 }, { 0x698A, 15644 }, { 0x698B, 15628 }, { 0x698C, 15608 }, { 0x698D, 15572 }, { 0x698E, 15672 }, { 0x698F, 15616 }, { 0x6990, 15588 }, { 0x6991, 15684 }, { 0x6992, 15584 }, { 0x6993, 15648 }, { 0x6994, 15600 }, { 0x6995, 15640 }, { 0x6996, 15604 }, { 0x6997, 15632 }, { 0x6998, 15624 }, { 0x6999, 15664 }, { 0x699A, 15636 }, { 0x699B, 15652 }, { 0x699C, 15529 }, { 0x699D, 15549 }, { 0x699E, 15537 }, { 0x699F, 15541 }, { 0x69A0, 15437 }, { 0x69A1, 15553 }, { 0x69A2, 15453 }, { 0x69A3, 15473 }, { 0x69A4, 15457 }, { 0x69A5, 15421 }, { 0x69A6, 15441 }, { 0x69A7, 15425 }, { 0x69A8, 15429 }, { 0x69A9, 15481 }, { 0x69AA, 15521 }, { 0x69AB, 15517 }, { 0x69AC, 15505 }, { 0x69AD, 15489 }, { 0x69AE, 15469 }, { 0x69AF, 15433 }, { 0x69B0, 15533 }, { 0x69B1, 15477 }, { 0x69B2, 15449 }, { 0x69B3, 15545 }, { 0x69B4, 15445 }, { 0x69B5, 15509 }, { 0x69B6, 15461 }, { 0x69B7, 15501 }, { 0x69B8, 15465 }, { 0x69B9, 15493 }, { 0x69BA, 15485 }, { 0x69BB, 15525 }, { 0x69BC, 15497 }, { 0x69BD, 15513 }, { 0x69BE, 15384 }, { 0x69BF, 15557 }, { 0x69C0, 15711 }, { 0x69C1, 15417 }, { 0x69C2, 15708 }, { 0x69C3, 15704 }, { 0x69C4, 15419 }, { 0x69C5, 15405 }, { 0x69C6, 15387 }, { 0x69C7, 15393 }, { 0x69C8, 15414 }, { 0x69C9, 15399 }, { 0x69CA, 15396 }, { 0x69CB, 15390 }, { 0x69CC, 15411 }, { 0x69CD, 15408 }, { 0x69CE, 15402 }, { 0x69CF, 15700 }, { 0x69D0, 15696 }, { 0x69D1, 43366 }, { 0x69D2, 43321 }, { 0x69D3, 43369 }, { 0x69D4, 43327 }, { 0x69D5, 43357 }, { 0x69D6, 43390 }, { 0x69D7, 43333 }, { 0x69D8, 43351 }, { 0x69D9, 43360 }, { 0x69DA, 43336 }, { 0x69DB, 43339 }, { 0x69DC, 43375 }, { 0x69DD, 43378 }, { 0x69DE, 43381 }, { 0x69DF, 43318 }, { 0x69E0, 43330 }, { 0x69E1, 43348 }, { 0x69E2, 43342 }, { 0x69E3, 43345 }, { 0x69E4, 43396 }, { 0x69E5, 43354 }, { 0x69E6, 43387 }, { 0x69E7, 43372 }, { 0x69E8, 43384 }, { 0x69E9, 43324 }, { 0x69EA, 43363 }, { 0x69EB, 43393 }, { 0x69EC, 43569 }, { 0x69ED, 43581 }, { 0x69EE, 43573 }, { 0x69EF, 43577 }, { 0x69F0, 43589 }, { 0x69F1, 43633 }, { 0x69F2, 43605 }, { 0x69F3, 43601 }, { 0x69F4, 43629 }, { 0x69F5, 43609 }, { 0x69F6, 43613 }, { 0x69F7, 43641 }, { 0x69F8, 43645 }, { 0x69F9, 43649 }, { 0x69FA, 43585 }, { 0x69FB, 43597 }, { 0x69FC, 43621 }, { 0x69FD, 43617 }, { 0x69FE, 43661 }, { 0x69FF, 43625 }, { 0x6A00, 43653 }, { 0x6A01, 43637 }, { 0x6A02, 43593 }, { 0x6A03, 43657 }, { 0x6A04, 43535 }, { 0x6A05, 43515 }, { 0x6A06, 43531 }, { 0x6A07, 43519 }, { 0x6A08, 43543 }, { 0x6A09, 43547 }, { 0x6A0A, 43507 }, { 0x6A0B, 43527 }, { 0x6A0C, 43523 }, { 0x6A0D, 43555 }, { 0x6A0E, 43539 }, { 0x6A0F, 43511 }, { 0x6A10, 43551 }, { 0x6A11, 43564 }, { 0x6A12, 43559 }, { 0x6A13, 43683 }, { 0x6A14, 43731 }, { 0x6A15, 43699 }, { 0x6A16, 43695 }, { 0x6A17, 43715 }, { 0x6A18, 43723 }, { 0x6A19, 43703 }, { 0x6A1A, 43739 }, { 0x6A1B, 43743 }, { 0x6A1C, 43747 }, { 0x6A1D, 43679 }, { 0x6A1E, 43691 }, { 0x6A1F, 43711 }, { 0x6A20, 43707 }, { 0x6A21, 43759 }, { 0x6A22, 43719 }, { 0x6A23, 43751 }, { 0x6A24, 43735 }, { 0x6A25, 43687 }, { 0x6A26, 43727 }, { 0x6A27, 43755 }, { 0x6A28, 43763 }, { 0x6A29, 43768 }, { 0x6A2A, 43463 }, { 0x6A2B, 43403 }, { 0x6A2C, 43467 }, { 0x6A2D, 43411 }, { 0x6A2E, 43423 }, { 0x6A2F, 43451 }, { 0x6A30, 43495 }, { 0x6A31, 43419 }, { 0x6A32, 43443 }, { 0x6A33, 43455 }, { 0x6A34, 43427 }, { 0x6A35, 43475 }, { 0x6A36, 43479 }, { 0x6A37, 43483 }, { 0x6A38, 43399 }, { 0x6A39, 43415 }, { 0x6A3A, 43439 }, { 0x6A3B, 43431 }, { 0x6A3C, 43435 }, { 0x6A3D, 43503 }, { 0x6A3E, 43447 }, { 0x6A3F, 43491 }, { 0x6A40, 43471 }, { 0x6A41, 43487 }, { 0x6A42, 43407 }, { 0x6A43, 43459 }, { 0x6A44, 43499 }, { 0x6A45, 43777 }, { 0x6A46, 43833 }, { 0x6A47, 43785 }, { 0x6A48, 43821 }, { 0x6A49, 43861 }, { 0x6A4A, 43793 }, { 0x6A4B, 43813 }, { 0x6A4C, 43825 }, { 0x6A4D, 43797 }, { 0x6A4E, 43841 }, { 0x6A4F, 43845 }, { 0x6A50, 43849 }, { 0x6A51, 43773 }, { 0x6A52, 43789 }, { 0x6A53, 43809 }, { 0x6A54, 43801 }, { 0x6A55, 43805 }, { 0x6A56, 43869 }, { 0x6A57, 43817 }, { 0x6A58, 43857 }, { 0x6A59, 43837 }, { 0x6A5A, 43853 }, { 0x6A5B, 43781 }, { 0x6A5C, 43829 }, { 0x6A5D, 43865 }, { 0x6A5E, 43671 }, { 0x6A5F, 43665 }, { 0x6A60, 61866 }, { 0x6A61, 61963 }, { 0x6A62, 61918 }, { 0x6A63, 61944 }, { 0x6A64, 61829 }, { 0x6A65, 61937 }, { 0x6A66, 61982 }, { 0x6A67, 61824 }, { 0x6A68, 61858 }, { 0x6A69, 61977 }, { 0x6A6A, 61895 }, { 0x6A6B, 61880 }, { 0x6A6C, 61843 }, { 0x6A6D, 61958 }, { 0x6A6E, 61932 }, { 0x6A6F, 61910 }, { 0x6A70, 61814 }, { 0x6A71, 61848 }, { 0x6A72, 61967 }, { 0x6A73, 61885 }, { 0x6A74, 61870 }, { 0x6A75, 61833 }, { 0x6A76, 61948 }, { 0x6A77, 61922 }, { 0x6A78, 61900 }, { 0x6A79, 61819 }, { 0x6A7A, 61853 }, { 0x6A7B, 61972 }, { 0x6A7C, 61890 }, { 0x6A7D, 61875 }, { 0x6A7E, 61838 }, { 0x6A7F, 61953 }, { 0x6A80, 61927 }, { 0x6A81, 61905 }, { 0x6A82, 61915 }, { 0x6A83, 61992 }, { 0x6A84, 61989 }, { 0x6A85, 62004 }, { 0x6A86, 61995 }, { 0x6A87, 61998 }, { 0x6A88, 61986 }, { 0x6A89, 62001 }, { 0x6A8A, 61941 }, { 0x6A8B, 61863 }, { 0x6A8C, 45732 }, { 0x6A8D, 45883 }, { 0x6A8E, 45886 }, { 0x6A8F, 45889 }, { 0x6A90, 45892 }, { 0x6A91, 45895 }, { 0x6A92, 45898 }, { 0x6A93, 45901 }, { 0x6A94, 45904 }, { 0x6A95, 45907 }, { 0x6A96, 45910 }, { 0x6A97, 45913 }, { 0x6A98, 45916 }, { 0x6A99, 45919 }, { 0x6A9A, 45922 }, { 0x6A9B, 45925 }, { 0x6A9C, 45928 }, { 0x6A9D, 45931 }, { 0x6A9E, 45934 }, { 0x6A9F, 45937 }, { 0x6AA0, 45940 }, { 0x6AA1, 45943 }, { 0x6AA2, 45946 }, { 0x6AA3, 45949 }, { 0x6AA4, 45952 }, { 0x6AA5, 45955 }, { 0x6AA6, 45958 }, { 0x6AA7, 45961 }, { 0x6AA8, 45964 }, { 0x6AA9, 45967 }, { 0x6AAA, 45970 }, { 0x6AAB, 45973 }, { 0x6AAC, 45976 }, { 0x6AAD, 45979 }, { 0x6AAE, 45982 }, { 0x6AAF, 45985 }, { 0x6AB0, 45988 }, { 0x6AB1, 45991 }, { 0x6AB2, 45994 }, { 0x6AB3, 45997 }, { 0x6AB4, 46000 }, { 0x6AB5, 46003 }, { 0x6AB6, 46006 }, { 0x6AB7, 46009 }, { 0x6AB8, 46012 }, { 0x6AB9, 46015 }, { 0x6ABA, 46018 }, { 0x6ABB, 46021 }, { 0x6ABC, 46024 }, { 0x6ABD, 46027 }, { 0x6ABE, 45728 }, { 0x6ABF, 45736 }, { 0x6AC0, 45739 }, { 0x6AC1, 45742 }, { 0x6AC2, 45745 }, { 0x6AC3, 45748 }, { 0x6AC4, 45751 }, { 0x6AC5, 45754 }, { 0x6AC6, 45757 }, { 0x6AC7, 45760 }, { 0x6AC8, 45763 }, { 0x6AC9, 45766 }, { 0x6ACA, 45769 }, { 0x6ACB, 45772 }, { 0x6ACC, 45775 }, { 0x6ACD, 45778 }, { 0x6ACE, 45781 }, { 0x6ACF, 45784 }, { 0x6AD0, 45787 }, { 0x6AD1, 45790 }, { 0x6AD2, 45793 }, { 0x6AD3, 45796 }, { 0x6AD4, 45799 }, { 0x6AD5, 45802 }, { 0x6AD6, 45805 }, { 0x6AD7, 45808 }, { 0x6AD8, 45811 }, { 0x6AD9, 45814 }, { 0x6ADA, 45817 }, { 0x6ADB, 45820 }, { 0x6ADC, 45823 }, { 0x6ADD, 45826 }, { 0x6ADE, 45829 }, { 0x6ADF, 45832 }, { 0x6AE0, 45835 }, { 0x6AE1, 45838 }, { 0x6AE2, 45841 }, { 0x6AE3, 45844 }, { 0x6AE4, 45847 }, { 0x6AE5, 45850 }, { 0x6AE6, 45853 }, { 0x6AE7, 45856 }, { 0x6AE8, 45859 }, { 0x6AE9, 45862 }, { 0x6AEA, 45865 }, { 0x6AEB, 45868 }, { 0x6AEC, 45871 }, { 0x6AED, 45874 }, { 0x6AEE, 45877 }, { 0x6AEF, 45880 }, { 0x6AF0, 64733 }, { 0x6AF1, 64659 }, { 0x6AF2, 64723 }, { 0x6AF3, 64913 }, { 0x6AF4, 64769 }, { 0x6AF5, 64746 }, { 0x6AF6, 64683 }, { 0x6AF7, 64893 }, { 0x6AF8, 64853 }, { 0x6AF9, 64829 }, { 0x6AFA, 64703 }, { 0x6AFB, 64789 }, { 0x6AFC, 64937 }, { 0x6AFD, 64873 }, { 0x6AFE, 64809 }, { 0x6AFF, 64654 }, { 0x6B00, 64718 }, { 0x6B01, 64908 }, { 0x6B02, 64764 }, { 0x6B03, 64741 }, { 0x6B04, 64678 }, { 0x6B05, 64888 }, { 0x6B06, 64848 }, { 0x6B07, 64824 }, { 0x6B08, 64698 }, { 0x6B09, 64784 }, { 0x6B0A, 64932 }, { 0x6B0B, 64868 }, { 0x6B0C, 64804 }, { 0x6B0D, 64669 }, { 0x6B0E, 64664 }, { 0x6B0F, 64728 }, { 0x6B10, 64918 }, { 0x6B11, 64774 }, { 0x6B12, 64751 }, { 0x6B13, 64688 }, { 0x6B14, 64898 }, { 0x6B15, 64858 }, { 0x6B16, 64834 }, { 0x6B17, 64708 }, { 0x6B18, 64794 }, { 0x6B19, 64942 }, { 0x6B1A, 64878 }, { 0x6B1B, 64814 }, { 0x6B1C, 64839 }, { 0x6B1D, 64649 }, { 0x6B1E, 64713 }, { 0x6B1F, 64903 }, { 0x6B20, 64759 }, { 0x6B21, 64736 }, { 0x6B22, 64673 }, { 0x6B23, 64883 }, { 0x6B24, 64843 }, { 0x6B25, 64819 }, { 0x6B26, 64693 }, { 0x6B27, 64779 }, { 0x6B28, 64927 }, { 0x6B29, 64863 }, { 0x6B2A, 64799 }, { 0x6B2B, 64923 }, { 0x6B2C, 64756 }, { 0x6B2D, 64947 }, { 0x6B2E, 64950 }, { 0x6B2F, 64953 }, { 0x6B30, 64956 }, { 0x6B31, 64959 }, { 0x6B32, 64962 }, { 0x6B33, 64965 }, { 0x6B34, 64968 }, { 0x6B35, 64971 }, { 0x6B36, 64974 }, { 0x6B37, 64977 }, { 0x6B38, 64980 }, { 0x6B39, 64983 }, { 0x6B3A, 64986 }, { 0x6B3B, 64989 }, { 0x6B3C, 64992 }, { 0x6B3D, 64995 }, { 0x6B3E, 64998 }, { 0x6B3F, 65001 }, { 0x6B40, 65004 }, { 0x6B41, 65007 }, { 0x6B42, 19556 }, { 0x6B43, 19560 }, { 0x6B44, 19506 }, { 0x6B45, 19524 }, { 0x6B46, 19587 }, { 0x6B47, 19542 }, { 0x6B48, 19533 }, { 0x6B49, 19515 }, { 0x6B4A, 19578 }, { 0x6B4B, 19569 }, { 0x6B4C, 19551 }, { 0x6B4D, 60737 }, { 0x6B4E, 60848 }, { 0x6B4F, 115469 }, { 0x6B50, 115474 }, { 0x6B51, 115479 }, { 0x6B52, 115484 }, { 0x6B53, 115489 }, { 0x6B54, 115494 }, { 0x6B55, 115499 }, { 0x6B56, 115504 }, { 0x6B57, 115509 }, { 0x6B58, 115514 }, { 0x6B59, 115519 }, { 0x6B5A, 115524 }, { 0x6B5B, 115529 }, { 0x6B5C, 115534 }, { 0x6B5D, 115539 }, { 0x6B5E, 115544 }, { 0x6B5F, 115549 }, { 0x6B60, 115554 }, { 0x6B61, 115559 }, { 0x6B62, 115564 }, { 0x6B63, 115569 }, { 0x6B64, 115574 }, { 0x6B65, 115579 }, { 0x6B66, 115584 }, { 0x6B67, 115589 }, { 0x6B68, 115594 }, { 0x6B69, 86678 }, { 0x6B6A, 59554 }, { 0x6B6B, 59560 }, { 0x6B6C, 59117 }, { 0x6B6D, 59119 }, { 0x6B6E, 66904 }, { 0x6B6F, 66909 }, { 0x6B70, 66914 }, { 0x6B71, 66919 }, { 0x6B72, 66924 }, { 0x6B73, 66929 }, { 0x6B74, 66934 }, { 0x6B75, 66939 }, { 0x6B76, 66944 }, { 0x6B77, 66949 }, { 0x6B78, 66954 }, { 0x6B79, 66959 }, { 0x6B7A, 66964 }, { 0x6B7B, 66969 }, { 0x6B7C, 66974 }, { 0x6B7D, 66979 }, { 0x6B7E, 66984 }, { 0x6B7F, 66989 }, { 0x6B80, 66994 }, { 0x6B81, 66999 }, { 0x6B82, 67004 }, { 0x6B83, 67009 }, { 0x6B84, 67014 }, { 0x6B85, 67019 }, { 0x6B86, 67024 }, { 0x6B87, 67029 }, { 0x6B88, 66657 }, { 0x6B89, 66661 }, { 0x6B8A, 66667 }, { 0x6B8B, 66669 }, { 0x6B8C, 66866 }, { 0x6B8D, 66678 }, { 0x6B8E, 84997 }, { 0x6B8F, 85003 }, { 0x6B90, 85009 }, { 0x6B91, 85015 }, { 0x6B92, 85021 }, { 0x6B93, 85027 }, { 0x6B94, 85033 }, { 0x6B95, 85039 }, { 0x6B96, 85045 }, { 0x6B97, 85051 }, { 0x6B98, 85057 }, { 0x6B99, 85063 }, { 0x6B9A, 85069 }, { 0x6B9B, 85075 }, { 0x6B9C, 85081 }, { 0x6B9D, 85087 }, { 0x6B9E, 85093 }, { 0x6B9F, 85099 }, { 0x6BA0, 85105 }, { 0x6BA1, 85111 }, { 0x6BA2, 85117 }, { 0x6BA3, 85123 }, { 0x6BA4, 85129 }, { 0x6BA5, 85135 }, { 0x6BA6, 85141 }, { 0x6BA7, 85147 }, { 0x6BA8, 53513 }, { 0x6BA9, 53516 }, { 0x6BAA, 85212 }, { 0x6BAB, 85218 }, { 0x6BAC, 85224 }, { 0x6BAD, 85230 }, { 0x6BAE, 85236 }, { 0x6BAF, 85242 }, { 0x6BB0, 85248 }, { 0x6BB1, 85254 }, { 0x6BB2, 85260 }, { 0x6BB3, 85266 }, { 0x6BB4, 85272 }, { 0x6BB5, 85278 }, { 0x6BB6, 85284 }, { 0x6BB7, 85290 }, { 0x6BB8, 85296 }, { 0x6BB9, 85302 }, { 0x6BBA, 85308 }, { 0x6BBB, 85314 }, { 0x6BBC, 85320 }, { 0x6BBD, 85326 }, { 0x6BBE, 85332 }, { 0x6BBF, 85338 }, { 0x6BC0, 85344 }, { 0x6BC1, 85350 }, { 0x6BC2, 85356 }, { 0x6BC3, 85362 }, { 0x6BC4, 60145 }, { 0x6BC5, 85196 }, { 0x6BC6, 85199 }, { 0x6BC7, 85202 }, { 0x6BC8, 85193 }, { 0x6BC9, 85205 }, { 0x6BCA, 53891 }, { 0x6BCB, 66653 }, { 0x6BCC, 66879 }, { 0x6BCD, 66892 }, { 0x6BCE, 66659 }, { 0x6BCF, 66859 }, { 0x6BD0, 66663 }, { 0x6BD1, 66665 }, { 0x6BD2, 66870 }, { 0x6BD3, 66671 }, { 0x6BD4, 66676 }, { 0x6BD5, 67046 }, { 0x6BD6, 67057 }, { 0x6BD7, 66872 }, { 0x6BD8, 66885 }, { 0x6BD9, 66896 }, { 0x6BDA, 66881 }, { 0x6BDB, 67036 }, { 0x6BDC, 67087 }, { 0x6BDD, 67040 }, { 0x6BDE, 66861 }, { 0x6BDF, 66899 }, { 0x6BE0, 66655 }, { 0x6BE1, 66855 }, { 0x6BE2, 67051 }, { 0x6BE3, 67085 }, { 0x6BE4, 66868 }, { 0x6BE5, 66875 }, { 0x6BE6, 66877 }, { 0x6BE7, 85923 }, { 0x6BE8, 85928 }, { 0x6BE9, 85933 }, { 0x6BEA, 85938 }, { 0x6BEB, 85943 }, { 0x6BEC, 85948 }, { 0x6BED, 85953 }, { 0x6BEE, 85958 }, { 0x6BEF, 85963 }, { 0x6BF0, 85968 }, { 0x6BF1, 85973 }, { 0x6BF2, 85978 }, { 0x6BF3, 85983 }, { 0x6BF4, 85988 }, { 0x6BF5, 85993 }, { 0x6BF6, 85998 }, { 0x6BF7, 86003 }, { 0x6BF8, 86008 }, { 0x6BF9, 86013 }, { 0x6BFA, 86018 }, { 0x6BFB, 86023 }, { 0x6BFC, 86028 }, { 0x6BFD, 86033 }, { 0x6BFE, 86038 }, { 0x6BFF, 86043 }, { 0x6C00, 86048 }, { 0x6C01, 54392 }, { 0x6C02, 67082 }, { 0x6C03, 67079 }, { 0x6C04, 66760 }, { 0x6C05, 66748 }, { 0x6C06, 66716 }, { 0x6C07, 67076 }, { 0x6C08, 66692 }, { 0x6C09, 66740 }, { 0x6C0A, 66832 }, { 0x6C0B, 66744 }, { 0x6C0C, 66696 }, { 0x6C0D, 66788 }, { 0x6C0E, 66808 }, { 0x6C0F, 66780 }, { 0x6C10, 66708 }, { 0x6C11, 66756 }, { 0x6C12, 66700 }, { 0x6C13, 66784 }, { 0x6C14, 66704 }, { 0x6C15, 66828 }, { 0x6C16, 66812 }, { 0x6C17, 66836 }, { 0x6C18, 66736 }, { 0x6C19, 66728 }, { 0x6C1A, 66804 }, { 0x6C1B, 66768 }, { 0x6C1C, 66776 }, { 0x6C1D, 66680 }, { 0x6C1E, 66684 }, { 0x6C1F, 66844 }, { 0x6C20, 66752 }, { 0x6C21, 66688 }, { 0x6C22, 66720 }, { 0x6C23, 66772 }, { 0x6C24, 66840 }, { 0x6C25, 66764 }, { 0x6C26, 66820 }, { 0x6C27, 66824 }, { 0x6C28, 66724 }, { 0x6C29, 66800 }, { 0x6C2A, 66796 }, { 0x6C2B, 66792 }, { 0x6C2C, 66816 }, { 0x6C2D, 66712 }, { 0x6C2E, 66732 }, { 0x6C2F, 66848 }, { 0x6C30, 86660 }, { 0x6C31, 86624 }, { 0x6C32, 86630 }, { 0x6C33, 86642 }, { 0x6C34, 86666 }, { 0x6C35, 86648 }, { 0x6C36, 86672 }, { 0x6C37, 86636 }, { 0x6C38, 86654 }, { 0x6C39, 60080 }, { 0x6C3A, 60038 }, { 0x6C3B, 60156 }, { 0x6C3C, 19760 }, { 0x6C3D, 44872 }, { 0x6C3E, 32617 }, { 0x6C3F, 67098 }, { 0x6C40, 67097 }, { 0x6C41, 90488 }, { 0x6C42, 54515 }, { 0x6C43, 65157 }, { 0x6C44, 44362 }, { 0x6C45, 35589 }, { 0x6C46, 68734 }, { 0x6C47, 32504 }, { 0x6C48, 19605 }, { 0x6C49, 19602 }, { 0x6C4A, 19608 }, { 0x6C4B, 19782 }, { 0x6C4C, 6873 }, { 0x6C4D, 57795 }, { 0x6C4E, 19756 }, { 0x6C4F, 57791 }, { 0x6C50, 12681 }, { 0x6C51, 57375 }, { 0x6C52, 12748 }, { 0x6C53, 57379 }, { 0x6C54, 73268 }, { 0x6C55, 6869 }, { 0x6C56, 19751 }, { 0x6C57, 12743 }, { 0x6C58, 12677 }, { 0x6C59, 9325 }, { 0x6C5A, 61088 }, { 0x6C5B, 86154 }, { 0x6C5C, 109429 }, { 0x6C5D, 19058 }, { 0x6C5E, 35615 }, { 0x6C5F, 35621 }, { 0x6C60, 35626 }, { 0x6C61, 35630 }, { 0x6C62, 19440 }, { 0x6C63, 19443 }, { 0x6C64, 19449 }, { 0x6C65, 19446 }, { 0x6C66, 5928 }, { 0x6C67, 15352 }, { 0x6C68, 5936 }, { 0x6C69, 14918 }, { 0x6C6A, 59107 }, { 0x6C6B, 73129 }, { 0x6C6C, 86142 }, { 0x6C6D, 98562 }, { 0x6C6E, 98158 }, { 0x6C6F, 14532 }, { 0x6C70, 44377 }, { 0x6C71, 5938 }, { 0x6C72, 35298 }, { 0x6C73, 44751 }, { 0x6C74, 14630 }, { 0x6C75, 81907 }, { 0x6C76, 102355 }, { 0x6C77, 58333 }, { 0x6C78, 5911 }, { 0x6C79, 5908 }, { 0x6C7A, 12723 }, { 0x6C7B, 12652 }, { 0x6C7C, 31432 }, { 0x6C7D, 46288 }, { 0x6C7E, 12752 }, { 0x6C7F, 84987 }, { 0x6C80, 57146 }, { 0x6C81, 88690 }, { 0x6C82, 46423 }, { 0x6C83, 31434 }, { 0x6C84, 105504 }, { 0x6C85, 102357 }, { 0x6C86, 31025 }, { 0x6C87, 43919 }, { 0x6C88, 101755 }, { 0x6C89, 9291 }, { 0x6C8A, 22698 }, { 0x6C8B, 14539 }, { 0x6C8C, 33507 }, { 0x6C8D, 73128 }, { 0x6C8E, 105490 }, { 0x6C8F, 99498 }, { 0x6C90, 34364 }, { 0x6C91, 13419 }, { 0x6C92, 65015 }, { 0x6C93, 14614 }, { 0x6C94, 14612 }, { 0x6C95, 44879 }, { 0x6C96, 19491 }, { 0x6C97, 86227 }, { 0x6C98, 102054 }, { 0x6C99, 19255 }, { 0x6C9A, 46332 }, { 0x6C9B, 65195 }, { 0x6C9C, 19496 }, { 0x6C9D, 14478 }, { 0x6C9E, 34727 }, { 0x6C9F, 19771 }, { 0x6CA0, 12624 }, { 0x6CA1, 14754 }, { 0x6CA2, 53787 }, { 0x6CA3, 5944 }, { 0x6CA4, 75235 }, { 0x6CA5, 44881 }, { 0x6CA6, 90483 }, { 0x6CA7, 19325 }, { 0x6CA8, 83102 }, { 0x6CA9, 60154 }, { 0x6CAA, 23169 }, { 0x6CAB, 102036 }, { 0x6CAC, 18736 }, { 0x6CAD, 9280 }, { 0x6CAE, 60136 }, { 0x6CAF, 12638 }, { 0x6CB0, 56636 }, { 0x6CB1, 14737 }, { 0x6CB2, 15355 }, { 0x6CB3, 73141 }, { 0x6CB4, 86704 }, { 0x6CB5, 12065 }, { 0x6CB6, 73136 }, { 0x6CB7, 12049 }, { 0x6CB8, 12641 }, { 0x6CB9, 43937 }, { 0x6CBA, 65010 }, { 0x6CBB, 53682 }, { 0x6CBC, 68742 }, { 0x6CBD, 69639 }, { 0x6CBE, 115874 }, { 0x6CBF, 90485 }, { 0x6CC0, 46291 }, { 0x6CC1, 98591 }, { 0x6CC2, 80608 }, { 0x6CC3, 58001 }, { 0x6CC4, 33503 }, { 0x6CC5, 73143 }, { 0x6CC6, 86419 }, { 0x6CC7, 60141 }, { 0x6CC8, 14547 }, { 0x6CC9, 82401 }, { 0x6CCA, 12138 }, { 0x6CCB, 15350 }, { 0x6CCC, 14161 }, { 0x6CCD, 53733 }, { 0x6CCE, 104104 }, { 0x6CCF, 22709 }, { 0x6CD0, 58335 }, { 0x6CD1, 83908 }, { 0x6CD2, 86055 }, { 0x6CD3, 63473 }, { 0x6CD4, 54447 }, { 0x6CD5, 31026 }, { 0x6CD6, 60134 }, { 0x6CD7, 43925 }, { 0x6CD8, 43932 }, { 0x6CD9, 12616 }, { 0x6CDA, 86917 }, { 0x6CDB, 72522 }, { 0x6CDC, 46296 }, { 0x6CDD, 53727 }, { 0x6CDE, 61079 }, { 0x6CDF, 104528 }, { 0x6CE0, 32549 }, { 0x6CE1, 44755 }, { 0x6CE2, 99500 }, { 0x6CE3, 43873 }, { 0x6CE4, 10830 }, { 0x6CE5, 44829 }, { 0x6CE6, 57144 }, { 0x6CE7, 60128 }, { 0x6CE8, 104535 }, { 0x6CE9, 35581 }, { 0x6CEA, 45719 }, { 0x6CEB, 14749 }, { 0x6CEC, 89008 }, { 0x6CED, 12695 }, { 0x6CEE, 58338 }, { 0x6CEF, 46315 }, { 0x6CF0, 62459 }, { 0x6CF1, 84979 }, { 0x6CF2, 102034 }, { 0x6CF3, 46424 }, { 0x6CF4, 63471 }, { 0x6CF5, 68397 }, { 0x6CF6, 57296 }, { 0x6CF7, 62461 }, { 0x6CF8, 65229 }, { 0x6CF9, 56995 }, { 0x6CFA, 9320 }, { 0x6CFB, 103188 }, { 0x6CFC, 90481 }, { 0x6CFD, 109384 }, { 0x6CFE, 53729 }, { 0x6CFF, 54518 }, { 0x6D00, 53832 }, { 0x6D01, 57203 }, { 0x6D02, 23174 }, { 0x6D03, 68758 }, { 0x6D04, 33964 }, { 0x6D05, 67103 }, { 0x6D06, 57799 }, { 0x6D07, 46340 }, { 0x6D08, 53511 }, { 0x6D09, 53509 }, { 0x6D0A, 60137 }, { 0x6D0B, 105503 }, { 0x6D0C, 19737 }, { 0x6D0D, 5948 }, { 0x6D0E, 34733 }, { 0x6D0F, 14751 }, { 0x6D10, 59108 }, { 0x6D11, 18733 }, { 0x6D12, 69948 }, { 0x6D13, 23183 }, { 0x6D14, 90487 }, { 0x6D15, 75210 }, { 0x6D16, 90494 }, { 0x6D17, 45679 }, { 0x6D18, 45680 }, { 0x6D19, 84988 }, { 0x6D1A, 67091 }, { 0x6D1B, 23181 }, { 0x6D1C, 23178 }, { 0x6D1D, 52851 }, { 0x6D1E, 82398 }, { 0x6D1F, 80560 }, { 0x6D20, 82195 }, { 0x6D21, 12061 }, { 0x6D22, 88691 }, { 0x6D23, 23176 }, { 0x6D24, 13393 }, { 0x6D25, 105535 }, { 0x6D26, 53732 }, { 0x6D27, 103209 }, { 0x6D28, 61056 }, { 0x6D29, 61428 }, { 0x6D2A, 82403 }, { 0x6D2B, 80563 }, { 0x6D2C, 35947 }, { 0x6D2D, 19066 }, { 0x6D2E, 57788 }, { 0x6D2F, 57785 }, { 0x6D30, 65204 }, { 0x6D31, 19070 }, { 0x6D32, 23949 }, { 0x6D33, 88694 }, { 0x6D34, 4455 }, { 0x6D35, 57827 }, { 0x6D36, 19656 }, { 0x6D37, 19640 }, { 0x6D38, 19644 }, { 0x6D39, 19648 }, { 0x6D3A, 19652 }, { 0x6D3B, 9290 }, { 0x6D3C, 32545 }, { 0x6D3D, 315 }, { 0x6D3E, 35593 }, { 0x6D3F, 5876 }, { 0x6D40, 35235 }, { 0x6D41, 61741 }, { 0x6D42, 53506 }, { 0x6D43, 5314 }, { 0x6D44, 46220 }, { 0x6D45, 92074 }, { 0x6D46, 35600 }, { 0x6D47, 34574 }, { 0x6D48, 34575 }, { 0x6D49, 23171 }, { 0x6D4A, 9289 }, { 0x6D4B, 12709 }, { 0x6D4C, 34309 }, { 0x6D4D, 52778 }, { 0x6D4E, 65203 }, { 0x6D4F, 59114 }, { 0x6D50, 5895 }, { 0x6D51, 9269 }, { 0x6D52, 12086 }, { 0x6D53, 79028 }, { 0x6D54, 64511 }, { 0x6D55, 53827 }, { 0x6D56, 5308 }, { 0x6D57, 4081 }, { 0x6D58, 82194 }, { 0x6D59, 12736 }, { 0x6D5A, 12623 }, { 0x6D5B, 86702 }, { 0x6D5C, 69641 }, { 0x6D5D, 57284 }, { 0x6D5E, 81662 }, { 0x6D5F, 12047 }, { 0x6D60, 109789 }, { 0x6D61, 12081 }, { 0x6D62, 64642 }, { 0x6D63, 23948 }, { 0x6D64, 53489 }, { 0x6D65, 98555 }, { 0x6D66, 69133 }, { 0x6D67, 60881 }, { 0x6D68, 32546 }, { 0x6D69, 5877 }, { 0x6D6A, 35236 }, { 0x6D6B, 53507 }, { 0x6D6C, 5315 }, { 0x6D6D, 46221 }, { 0x6D6E, 86225 }, { 0x6D6F, 23172 }, { 0x6D70, 52779 }, { 0x6D71, 5896 }, { 0x6D72, 9270 }, { 0x6D73, 12673 }, { 0x6D74, 61341 }, { 0x6D75, 15357 }, { 0x6D76, 12063 }, { 0x6D77, 33501 }, { 0x6D78, 9272 }, { 0x6D79, 9252 }, { 0x6D7A, 73132 }, { 0x6D7B, 12522 }, { 0x6D7C, 5923 }, { 0x6D7D, 5907 }, { 0x6D7E, 14472 }, { 0x6D7F, 32548 }, { 0x6D80, 57147 }, { 0x6D81, 35608 }, { 0x6D82, 35649 }, { 0x6D83, 35684 }, { 0x6D84, 35741 }, { 0x6D85, 46305 }, { 0x6D86, 57782 }, { 0x6D87, 107 }, { 0x6D88, 57138 }, { 0x6D89, 57141 }, { 0x6D8A, 73133 }, { 0x6D8B, 14488 }, { 0x6D8C, 19479 }, { 0x6D8D, 57806 }, { 0x6D8E, 103700 }, { 0x6D8F, 64411 }, { 0x6D90, 67105 }, { 0x6D91, 23220 }, { 0x6D92, 19596 }, { 0x6D93, 49500 }, { 0x6D94, 43936 }, { 0x6D95, 57812 }, { 0x6D96, 33534 }, { 0x6D97, 61343 }, { 0x6D98, 33516 }, { 0x6D99, 13415 }, { 0x6D9A, 69131 }, { 0x6D9B, 105584 }, { 0x6D9C, 57810 }, { 0x6D9D, 57808 }, { 0x6D9E, 103701 }, { 0x6D9F, 12117 }, { 0x6DA0, 19322 }, { 0x6DA1, 5307 }, { 0x6DA2, 12706 }, { 0x6DA3, 6227 }, { 0x6DA4, 36070 }, { 0x6DA5, 46290 }, { 0x6DA6, 6236 }, { 0x6DA7, 10886 }, { 0x6DA8, 10896 }, { 0x6DA9, 53487 }, { 0x6DAA, 36071 }, { 0x6DAB, 19257 }, { 0x6DAC, 53442 }, { 0x6DAD, 6241 }, { 0x6DAE, 6246 }, { 0x6DAF, 32907 }, { 0x6DB0, 32909 }, { 0x6DB1, 12044 }, { 0x6DB2, 109759 }, { 0x6DB3, 85851 }, { 0x6DB4, 82396 }, { 0x6DB5, 82405 }, { 0x6DB6, 19774 }, { 0x6DB7, 12045 }, { 0x6DB8, 115947 }, { 0x6DB9, 15716 }, { 0x6DBA, 5953 }, { 0x6DBB, 34360 }, { 0x6DBC, 106169 }, { 0x6DBD, 99005 }, { 0x6DBE, 45663 }, { 0x6DBF, 83101 }, { 0x6DC0, 14168 }, { 0x6DC1, 12595 }, { 0x6DC2, 61340 }, { 0x6DC3, 43920 }, { 0x6DC4, 67104 }, { 0x6DC5, 14546 }, { 0x6DC6, 12734 }, { 0x6DC7, 13395 }, { 0x6DC8, 14616 }, { 0x6DC9, 5934 }, { 0x6DCA, 12733 }, { 0x6DCB, 58334 }, { 0x6DCC, 45637 }, { 0x6DCD, 68737 }, { 0x6DCE, 58004 }, { 0x6DCF, 44367 }, { 0x6DD0, 10903 }, { 0x6DD1, 102055 }, { 0x6DD2, 61336 }, { 0x6DD3, 22715 }, { 0x6DD4, 12084 }, { 0x6DD5, 22700 }, { 0x6DD6, 57819 }, { 0x6DD7, 53504 }, { 0x6DD8, 22718 }, { 0x6DD9, 101810 }, { 0x6DDA, 22721 }, { 0x6DDB, 60697 }, { 0x6DDC, 79023 }, { 0x6DDD, 15718 }, { 0x6DDE, 12110 }, { 0x6DDF, 86204 }, { 0x6DE0, 90554 }, { 0x6DE1, 102068 }, { 0x6DE2, 60890 }, { 0x6DE3, 12437 }, { 0x6DE4, 14543 }, { 0x6DE5, 46308 }, { 0x6DE6, 19594 }, { 0x6DE7, 53819 }, { 0x6DE8, 67168 }, { 0x6DE9, 35810 }, { 0x6DEA, 61413 }, { 0x6DEB, 32534 }, { 0x6DEC, 73277 }, { 0x6DED, 22953 }, { 0x6DEE, 45640 }, { 0x6DEF, 69622 }, { 0x6DF0, 69634 }, { 0x6DF1, 69626 }, { 0x6DF2, 69630 }, { 0x6DF3, 32536 }, { 0x6DF4, 19337 }, { 0x6DF5, 14741 }, { 0x6DF6, 85417 }, { 0x6DF7, 89011 }, { 0x6DF8, 83910 }, { 0x6DF9, 46310 }, { 0x6DFA, 64512 }, { 0x6DFB, 5906 }, { 0x6DFC, 12612 }, { 0x6DFD, 14483 }, { 0x6DFE, 14522 }, { 0x6DFF, 14529 }, { 0x6E00, 69957 }, { 0x6E01, 86421 }, { 0x6E02, 12131 }, { 0x6E03, 19333 }, { 0x6E04, 19344 }, { 0x6E05, 4443 }, { 0x6E06, 90496 }, { 0x6E07, 65147 }, { 0x6E08, 33960 }, { 0x6E09, 101746 }, { 0x6E0A, 86229 }, { 0x6E0B, 105498 }, { 0x6E0C, 69643 }, { 0x6E0D, 49511 }, { 0x6E0E, 85370 }, { 0x6E0F, 85371 }, { 0x6E10, 44831 }, { 0x6E11, 14481 }, { 0x6E12, 22696 }, { 0x6E13, 12082 }, { 0x6E14, 52856 }, { 0x6E15, 19254 }, { 0x6E16, 14170 }, { 0x6E17, 53779 }, { 0x6E18, 13422 }, { 0x6E19, 102368 }, { 0x6E1A, 33499 }, { 0x6E1B, 5926 }, { 0x6E1C, 102032 }, { 0x6E1D, 53501 }, { 0x6E1E, 72524 }, { 0x6E1F, 52864 }, { 0x6E20, 23193 }, { 0x6E21, 64638 }, { 0x6E22, 46223 }, { 0x6E23, 82323 }, { 0x6E24, 79032 }, { 0x6E25, 44860 }, { 0x6E26, 44855 }, { 0x6E27, 14509 }, { 0x6E28, 14514 }, { 0x6E29, 65011 }, { 0x6E2A, 53490 }, { 0x6E2B, 101645 }, { 0x6E2C, 52760 }, { 0x6E2D, 52765 }, { 0x6E2E, 102645 }, { 0x6E2F, 52762 }, { 0x6E30, 95 }, { 0x6E31, 57828 }, { 0x6E32, 44378 }, { 0x6E33, 44379 }, { 0x6E34, 35583 }, { 0x6E35, 105493 }, { 0x6E36, 33535 }, { 0x6E37, 115866 }, { 0x6E38, 12618 }, { 0x6E39, 85795 }, { 0x6E3A, 53498 }, { 0x6E3B, 68403 }, { 0x6E3C, 90531 }, { 0x6E3D, 90538 }, { 0x6E3E, 90524 }, { 0x6E3F, 114911 }, { 0x6E40, 6220 }, { 0x6E41, 12727 }, { 0x6E42, 66649 }, { 0x6E43, 66638 }, { 0x6E44, 66639 }, { 0x6E45, 66644 }, { 0x6E46, 58003 }, { 0x6E47, 79019 }, { 0x6E48, 115296 }, { 0x6E49, 115921 }, { 0x6E4A, 13320 }, { 0x6E4B, 44833 }, { 0x6E4C, 5954 }, { 0x6E4D, 13319 }, { 0x6E4E, 14486 }, { 0x6E4F, 12067 }, { 0x6E50, 12068 }, { 0x6E51, 69642 }, { 0x6E52, 13155 }, { 0x6E53, 33536 }, { 0x6E54, 12056 }, { 0x6E55, 5918 }, { 0x6E56, 302 }, { 0x6E57, 14763 }, { 0x6E58, 10853 }, { 0x6E59, 85 }, { 0x6E5A, 49304 }, { 0x6E5B, 23201 }, { 0x6E5C, 23195 }, { 0x6E5D, 23212 }, { 0x6E5E, 23216 }, { 0x6E5F, 23207 }, { 0x6E60, 12620 }, { 0x6E61, 79026 }, { 0x6E62, 57818 }, { 0x6E63, 46425 }, { 0x6E64, 7150 }, { 0x6E65, 23168 }, { 0x6E66, 53471 }, { 0x6E67, 104529 }, { 0x6E68, 102376 }, { 0x6E69, 60152 }, { 0x6E6A, 9300 }, { 0x6E6B, 82407 }, { 0x6E6C, 68371 }, { 0x6E6D, 19034 }, { 0x6E6E, 35884 }, { 0x6E6F, 23967 }, { 0x6E70, 23984 }, { 0x6E71, 23999 }, { 0x6E72, 23987 }, { 0x6E73, 34497 }, { 0x6E74, 34382 }, { 0x6E75, 109434 }, { 0x6E76, 115025 }, { 0x6E77, 109437 }, { 0x6E78, 115028 }, { 0x6E79, 31393 }, { 0x6E7A, 35380 }, { 0x6E7B, 59140 }, { 0x6E7C, 19474 }, { 0x6E7D, 19472 }, { 0x6E7E, 64479 }, { 0x6E7F, 64491 }, { 0x6E80, 54752 }, { 0x6E81, 35734 }, { 0x6E82, 22850 }, { 0x6E83, 44535 }, { 0x6E84, 300 }, { 0x6E85, 12494 }, { 0x6E86, 23221 }, { 0x6E87, 52781 }, { 0x6E88, 102356 }, { 0x6E89, 62336 }, { 0x6E8A, 12112 }, { 0x6E8B, 19353 }, { 0x6E8C, 19365 }, { 0x6E8D, 19389 }, { 0x6E8E, 19373 }, { 0x6E8F, 19369 }, { 0x6E90, 19357 }, { 0x6E91, 19385 }, { 0x6E92, 19381 }, { 0x6E93, 19377 }, { 0x6E94, 19361 }, { 0x6E95, 19393 }, { 0x6E96, 19397 }, { 0x6E97, 19401 }, { 0x6E98, 19410 }, { 0x6E99, 19428 }, { 0x6E9A, 19416 }, { 0x6E9B, 19413 }, { 0x6E9C, 19404 }, { 0x6E9D, 19425 }, { 0x6E9E, 19422 }, { 0x6E9F, 19419 }, { 0x6EA0, 19407 }, { 0x6EA1, 19431 }, { 0x6EA2, 19434 }, { 0x6EA3, 33763 }, { 0x6EA4, 33765 }, { 0x6EA5, 33771 }, { 0x6EA6, 69950 }, { 0x6EA7, 69951 }, { 0x6EA8, 65193 }, { 0x6EA9, 12111 }, { 0x6EAA, 44385 }, { 0x6EAB, 106211 }, { 0x6EAC, 18860 }, { 0x6EAD, 98 }, { 0x6EAE, 12730 }, { 0x6EAF, 6231 }, { 0x6EB0, 53814 }, { 0x6EB1, 12431 }, { 0x6EB2, 53821 }, { 0x6EB3, 53822 }, { 0x6EB4, 82726 }, { 0x6EB5, 6249 }, { 0x6EB6, 12823 }, { 0x6EB7, 102370 }, { 0x6EB8, 33562 }, { 0x6EB9, 35997 }, { 0x6EBA, 19133 }, { 0x6EBB, 102358 }, { 0x6EBC, 90491 }, { 0x6EBD, 12053 }, { 0x6EBE, 67092 }, { 0x6EBF, 79037 }, { 0x6EC0, 46321 }, { 0x6EC1, 9256 }, { 0x6EC2, 52137 }, { 0x6EC3, 19068 }, { 0x6EC4, 31350 }, { 0x6EC5, 31365 }, { 0x6EC6, 31353 }, { 0x6EC7, 31369 }, { 0x6EC8, 31347 }, { 0x6EC9, 13080 }, { 0x6ECA, 57207 }, { 0x6ECB, 53538 }, { 0x6ECC, 86102 }, { 0x6ECD, 86108 }, { 0x6ECE, 86112 }, { 0x6ECF, 86127 }, { 0x6ED0, 86062 }, { 0x6ED1, 53529 }, { 0x6ED2, 35639 }, { 0x6ED3, 86190 }, { 0x6ED4, 86195 }, { 0x6ED5, 86170 }, { 0x6ED6, 86175 }, { 0x6ED7, 18776 }, { 0x6ED8, 18852 }, { 0x6ED9, 86180 }, { 0x6EDA, 86185 }, { 0x6EDB, 86160 }, { 0x6EDC, 86165 }, { 0x6EDD, 18738 }, { 0x6EDE, 18752 }, { 0x6EDF, 18829 }, { 0x6EE0, 60675 }, { 0x6EE1, 83092 }, { 0x6EE2, 35222 }, { 0x6EE3, 65022 }, { 0x6EE4, 53479 }, { 0x6EE5, 18763 }, { 0x6EE6, 35671 }, { 0x6EE7, 14757 }, { 0x6EE8, 14921 }, { 0x6EE9, 36068 }, { 0x6EEA, 8934 }, { 0x6EEB, 10900 }, { 0x6EEC, 35209 }, { 0x6EED, 102638 }, { 0x6EEE, 8372 }, { 0x6EEF, 12719 }, { 0x6EF0, 53735 }, { 0x6EF1, 65023 }, { 0x6EF2, 5924 }, { 0x6EF3, 64514 }, { 0x6EF4, 75224 }, { 0x6EF5, 75227 }, { 0x6EF6, 75232 }, { 0x6EF7, 19768 }, { 0x6EF8, 19765 }, { 0x6EF9, 19761 }, { 0x6EFA, 18966 }, { 0x6EFB, 46323 }, { 0x6EFC, 14505 }, { 0x6EFD, 12133 }, { 0x6EFE, 12128 }, { 0x6EFF, 12614 }, { 0x6F00, 19684 }, { 0x6F01, 19689 }, { 0x6F02, 19686 }, { 0x6F03, 14473 }, { 0x6F04, 14476 }, { 0x6F05, 14474 }, { 0x6F06, 19696 }, { 0x6F07, 19692 }, { 0x6F08, 19694 }, { 0x6F09, 75223 }, { 0x6F0A, 14521 }, { 0x6F0B, 33500 }, { 0x6F0C, 109463 }, { 0x6F0D, 53824 }, { 0x6F0E, 53829 }, { 0x6F0F, 60673 }, { 0x6F10, 83911 }, { 0x6F11, 83222 }, { 0x6F12, 64637 }, { 0x6F13, 90505 }, { 0x6F14, 109755 }, { 0x6F15, 82325 }, { 0x6F16, 75204 }, { 0x6F17, 105533 }, { 0x6F18, 7189 }, { 0x6F19, 101815 }, { 0x6F1A, 14525 }, { 0x6F1B, 34725 }, { 0x6F1C, 45661 }, { 0x6F1D, 13159 }, { 0x6F1E, 86219 }, { 0x6F1F, 35192 }, { 0x6F20, 35195 }, { 0x6F21, 35189 }, { 0x6F22, 35198 }, { 0x6F23, 13024 }, { 0x6F24, 33712 }, { 0x6F25, 10908 }, { 0x6F26, 35212 }, { 0x6F27, 13077 }, { 0x6F28, 33777 }, { 0x6F29, 12829 }, { 0x6F2A, 33568 }, { 0x6F2B, 14159 }, { 0x6F2C, 100415 }, { 0x6F2D, 100413 }, { 0x6F2E, 43903 }, { 0x6F2F, 43916 }, { 0x6F30, 43907 }, { 0x6F31, 43912 }, { 0x6F32, 43888 }, { 0x6F33, 31060 }, { 0x6F34, 43883 }, { 0x6F35, 36075 }, { 0x6F36, 32543 }, { 0x6F37, 35290 }, { 0x6F38, 54440 }, { 0x6F39, 105485 }, { 0x6F3A, 32551 }, { 0x6F3B, 81094 }, { 0x6F3C, 81096 }, { 0x6F3D, 12554 }, { 0x6F3E, 66580 }, { 0x6F3F, 66593 }, { 0x6F40, 66585 }, { 0x6F41, 66601 }, { 0x6F42, 66576 }, { 0x6F43, 66609 }, { 0x6F44, 68738 }, { 0x6F45, 66613 }, { 0x6F46, 12604 }, { 0x6F47, 86053 }, { 0x6F48, 66622 }, { 0x6F49, 66618 }, { 0x6F4A, 86214 }, { 0x6F4B, 64468 }, { 0x6F4C, 115872 }, { 0x6F4D, 86807 }, { 0x6F4E, 12534 }, { 0x6F4F, 64643 }, { 0x6F50, 73145 }, { 0x6F51, 103204 }, { 0x6F52, 61729 }, { 0x6F53, 12600 }, { 0x6F54, 61736 }, { 0x6F55, 61731 }, { 0x6F56, 12571 }, { 0x6F57, 12575 }, { 0x6F58, 12582 }, { 0x6F59, 109766 }, { 0x6F5A, 68740 }, { 0x6F5B, 15728 }, { 0x6F5C, 65020 }, { 0x6F5D, 45645 }, { 0x6F5E, 106221 }, { 0x6F5F, 12538 }, { 0x6F60, 109762 }, { 0x6F61, 80617 }, { 0x6F62, 88685 }, { 0x6F63, 61076 }, { 0x6F64, 35598 }, { 0x6F65, 53812 }, { 0x6F66, 35288 }, { 0x6F67, 99003 }, { 0x6F68, 52140 }, { 0x6F69, 12543 }, { 0x6F6A, 48420 }, { 0x6F6B, 12547 }, { 0x6F6C, 12608 }, { 0x6F6D, 103185 }, { 0x6F6E, 61083 }, { 0x6F6F, 86202 }, { 0x6F70, 19592 }, { 0x6F71, 12597 }, { 0x6F72, 12563 }, { 0x6F73, 81088 }, { 0x6F74, 5322 }, { 0x6F75, 66564 }, { 0x6F76, 66570 }, { 0x6F77, 5317 }, { 0x6F78, 61723 }, { 0x6F79, 65017 }, { 0x6F7A, 45642 }, { 0x6F7B, 35595 }, { 0x6F7C, 86211 }, { 0x6F7D, 86208 }, { 0x6F7E, 109461 }, { 0x6F7F, 12567 }, { 0x6F80, 12525 }, { 0x6F81, 12530 }, { 0x6F82, 53457 }, { 0x6F83, 106231 }, { 0x6F84, 109936 }, { 0x6F85, 115863 }, { 0x6F86, 22704 }, { 0x6F87, 53460 }, { 0x6F88, 53466 }, { 0x6F89, 53450 }, { 0x6F8A, 53446 }, { 0x6F8B, 32750 }, { 0x6F8C, 34687 }, { 0x6F8D, 32672 }, { 0x6F8E, 34633 }, { 0x6F8F, 57241 }, { 0x6F90, 57254 }, { 0x6F91, 57236 }, { 0x6F92, 57249 }, { 0x6F93, 32754 }, { 0x6F94, 34691 }, { 0x6F95, 32676 }, { 0x6F96, 34637 }, { 0x6F97, 22882 }, { 0x6F98, 22908 }, { 0x6F99, 22871 }, { 0x6F9A, 22897 }, { 0x6F9B, 32746 }, { 0x6F9C, 34683 }, { 0x6F9D, 32668 }, { 0x6F9E, 34629 }, { 0x6F9F, 22877 }, { 0x6FA0, 22903 }, { 0x6FA1, 22866 }, { 0x6FA2, 22892 }, { 0x6FA3, 48409 }, { 0x6FA4, 48413 }, { 0x6FA5, 34576 }, { 0x6FA6, 34580 }, { 0x6FA7, 99997 }, { 0x6FA8, 68561 }, { 0x6FA9, 104904 }, { 0x6FAA, 98383 }, { 0x6FAB, 53775 }, { 0x6FAC, 22969 }, { 0x6FAD, 83097 }, { 0x6FAE, 23025 }, { 0x6FAF, 23037 }, { 0x6FB0, 34728 }, { 0x6FB1, 105197 }, { 0x6FB2, 105190 }, { 0x6FB3, 105182 }, { 0x6FB4, 23094 }, { 0x6FB5, 105205 }, { 0x6FB6, 23082 }, { 0x6FB7, 15323 }, { 0x6FB8, 15316 }, { 0x6FB9, 59112 }, { 0x6FBA, 65176 }, { 0x6FBB, 53726 }, { 0x6FBC, 104106 }, { 0x6FBD, 34723 }, { 0x6FBE, 65153 }, { 0x6FBF, 104107 }, { 0x6FC0, 104109 }, { 0x6FC1, 35297 }, { 0x6FC2, 32501 }, { 0x6FC3, 31058 }, { 0x6FC4, 67094 }, { 0x6FC5, 15267 }, { 0x6FC6, 15268 }, { 0x6FC7, 5309 }, { 0x6FC8, 85375 }, { 0x6FC9, 105502 }, { 0x6FCA, 5310 }, { 0x6FCB, 62344 }, { 0x6FCC, 86924 }, { 0x6FCD, 12621 }, { 0x6FCE, 53481 }, { 0x6FCF, 85382 }, { 0x6FD0, 14923 }, { 0x6FD1, 85380 }, { 0x6FD2, 103187 }, { 0x6FD3, 85385 }, { 0x6FD4, 114856 }, { 0x6FD5, 75208 }, { 0x6FD6, 105510 }, { 0x6FD7, 68370 }, { 0x6FD8, 84969 }, { 0x6FD9, 84972 }, { 0x6FDA, 105491 }, { 0x6FDB, 84974 }, { 0x6FDC, 36288 }, { 0x6FDD, 14742 }, { 0x6FDE, 65228 }, { 0x6FDF, 102057 }, { 0x6FE0, 104146 }, { 0x6FE1, 86902 }, { 0x6FE2, 109757 }, { 0x6FE3, 53483 }, { 0x6FE4, 105494 }, { 0x6FE5, 12493 }, { 0x6FE6, 92 }, { 0x6FE7, 66627 }, { 0x6FE8, 100 }, { 0x6FE9, 9283 }, { 0x6FEA, 69 }, { 0x6FEB, 65012 }, { 0x6FEC, 106215 }, { 0x6FED, 58332 }, { 0x6FEE, 103 }, { 0x6FEF, 89007 }, { 0x6FF0, 84976 }, { 0x6FF1, 104534 }, { 0x6FF2, 105 }, { 0x6FF3, 73130 }, { 0x6FF4, 13423 }, { 0x6FF5, 57814 }, { 0x6FF6, 86058 }, { 0x6FF7, 12051 }, { 0x6FF8, 57145 }, { 0x6FF9, 35591 }, { 0x6FFA, 53792 }, { 0x6FFB, 12062 }, { 0x6FFC, 58002 }, { 0x6FFD, 85415 }, { 0x6FFE, 60155 }, { 0x6FFF, 57999 }, { 0x7000, 13075 }, { 0x7001, 86694 }, { 0x7002, 104633 }, { 0x7003, 60111 }, { 0x7004, 12115 }, { 0x7005, 19777 }, { 0x7006, 19461 }, { 0x7007, 86206 }, { 0x7008, 86156 }, { 0x7009, 58007 }, { 0x700A, 4446 }, { 0x700B, 33508 }, { 0x700C, 101646 }, { 0x700D, 86158 }, { 0x700E, 46432 }, { 0x700F, 53789 }, { 0x7010, 7187 }, { 0x7011, 84970 }, { 0x7012, 65155 }, { 0x7013, 32539 }, { 0x7014, 109446 }, { 0x7015, 109444 }, { 0x7016, 109441 }, { 0x7017, 34525 }, { 0x7018, 115966 }, { 0x7019, 68756 }, { 0x701A, 68754 }, { 0x701B, 102031 }, { 0x701C, 85377 }, { 0x701D, 45682 }, { 0x701E, 101749 }, { 0x701F, 65234 }, { 0x7020, 32541 }, { 0x7021, 19326 }, { 0x7022, 103173 }, { 0x7023, 102648 }, { 0x7024, 102714 }, { 0x7025, 102804 }, { 0x7026, 102838 }, { 0x7027, 103123 }, { 0x7028, 102678 }, { 0x7029, 102688 }, { 0x702A, 102683 }, { 0x702B, 102693 }, { 0x702C, 102999 }, { 0x702D, 103111 }, { 0x702E, 103115 }, { 0x702F, 102894 }, { 0x7030, 103164 }, { 0x7031, 102786 }, { 0x7032, 102931 }, { 0x7033, 102936 }, { 0x7034, 102941 }, { 0x7035, 103026 }, { 0x7036, 102761 }, { 0x7037, 102821 }, { 0x7038, 103009 }, { 0x7039, 103119 }, { 0x703A, 102751 }, { 0x703B, 102756 }, { 0x703C, 102718 }, { 0x703D, 102886 }, { 0x703E, 102736 }, { 0x703F, 102741 }, { 0x7040, 102856 }, { 0x7041, 102954 }, { 0x7042, 102846 }, { 0x7043, 103151 }, { 0x7044, 103095 }, { 0x7045, 102862 }, { 0x7046, 102868 }, { 0x7047, 102851 }, { 0x7048, 102765 }, { 0x7049, 103079 }, { 0x704A, 103107 }, { 0x704B, 102665 }, { 0x704C, 102746 }, { 0x704D, 103017 }, { 0x704E, 103101 }, { 0x704F, 102772 }, { 0x7050, 103087 }, { 0x7051, 103003 }, { 0x7052, 102960 }, { 0x7053, 102966 }, { 0x7054, 102950 }, { 0x7055, 103067 }, { 0x7056, 103071 }, { 0x7057, 103075 }, { 0x7058, 102842 }, { 0x7059, 103013 }, { 0x705A, 103059 }, { 0x705B, 103177 }, { 0x705C, 102910 }, { 0x705D, 102946 }, { 0x705E, 103063 }, { 0x705F, 103147 }, { 0x7060, 102914 }, { 0x7061, 102898 }, { 0x7062, 103043 }, { 0x7063, 102825 }, { 0x7064, 102791 }, { 0x7065, 102919 }, { 0x7066, 102923 }, { 0x7067, 102674 }, { 0x7068, 102656 }, { 0x7069, 102890 }, { 0x706A, 103047 }, { 0x706B, 102652 }, { 0x706C, 102670 }, { 0x706D, 102874 }, { 0x706E, 102710 }, { 0x706F, 102830 }, { 0x7070, 102799 }, { 0x7071, 102972 }, { 0x7072, 103022 }, { 0x7073, 102995 }, { 0x7074, 102978 }, { 0x7075, 103055 }, { 0x7076, 102778 }, { 0x7077, 102834 }, { 0x7078, 102808 }, { 0x7079, 102782 }, { 0x707A, 102660 }, { 0x707B, 102795 }, { 0x707C, 103038 }, { 0x707D, 102906 }, { 0x707E, 102983 }, { 0x707F, 102989 }, { 0x7080, 103160 }, { 0x7081, 103156 }, { 0x7082, 102927 }, { 0x7083, 103034 }, { 0x7084, 103143 }, { 0x7085, 102878 }, { 0x7086, 103169 }, { 0x7087, 103030 }, { 0x7088, 103127 }, { 0x7089, 103131 }, { 0x708A, 103135 }, { 0x708B, 103139 }, { 0x708C, 102902 }, { 0x708D, 102698 }, { 0x708E, 102704 }, { 0x708F, 102882 }, { 0x7090, 102732 }, { 0x7091, 102817 }, { 0x7092, 103051 }, { 0x7093, 102813 }, { 0x7094, 102722 }, { 0x7095, 102727 }, { 0x7096, 19209 }, { 0x7097, 19167 }, { 0x7098, 19247 }, { 0x7099, 19183 }, { 0x709A, 19102 }, { 0x709B, 52321 }, { 0x709C, 12102 }, { 0x709D, 22920 }, { 0x709E, 15308 }, { 0x709F, 98578 }, { 0x70A0, 35804 }, { 0x70A1, 33958 }, { 0x70A2, 18786 }, { 0x70A3, 19106 }, { 0x70A4, 31083 }, { 0x70A5, 52391 }, { 0x70A6, 12105 }, { 0x70A7, 22923 }, { 0x70A8, 15312 }, { 0x70A9, 98582 }, { 0x70AA, 35887 }, { 0x70AB, 35900 }, { 0x70AC, 54356 }, { 0x70AD, 18789 }, { 0x70AE, 18799 }, { 0x70AF, 18972 }, { 0x70B0, 35920 }, { 0x70B1, 35933 }, { 0x70B2, 60703 }, { 0x70B3, 18792 }, { 0x70B4, 18803 }, { 0x70B5, 18976 }, { 0x70B6, 35941 }, { 0x70B7, 15252 }, { 0x70B8, 31067 }, { 0x70B9, 52360 }, { 0x70BA, 12099 }, { 0x70BB, 15273 }, { 0x70BC, 15304 }, { 0x70BD, 98574 }, { 0x70BE, 15257 }, { 0x70BF, 31091 }, { 0x70C0, 52394 }, { 0x70C1, 12108 }, { 0x70C2, 23003 }, { 0x70C3, 15320 }, { 0x70C4, 98586 }, { 0x70C5, 31033 }, { 0x70C6, 52325 }, { 0x70C7, 12091 }, { 0x70C8, 22746 }, { 0x70C9, 15288 }, { 0x70CA, 98569 }, { 0x70CB, 31029 }, { 0x70CC, 52312 }, { 0x70CD, 12087 }, { 0x70CE, 22737 }, { 0x70CF, 15283 }, { 0x70D0, 98564 }, { 0x70D1, 31063 }, { 0x70D2, 52351 }, { 0x70D3, 12095 }, { 0x70D4, 22814 }, { 0x70D5, 15293 }, { 0x70D6, 31078 }, { 0x70D7, 52378 }, { 0x70D8, 35215 }, { 0x70D9, 52383 }, { 0x70DA, 31047 }, { 0x70DB, 52329 }, { 0x70DC, 12660 }, { 0x70DD, 52334 }, { 0x70DE, 65158 }, { 0x70DF, 31037 }, { 0x70E0, 22750 }, { 0x70E1, 52316 }, { 0x70E2, 22741 }, { 0x70E3, 9310 }, { 0x70E4, 52355 }, { 0x70E5, 22818 }, { 0x70E6, 15298 }, { 0x70E7, 22823 }, { 0x70E8, 31086 }, { 0x70E9, 22987 }, { 0x70EA, 22992 }, { 0x70EB, 99851 }, { 0x70EC, 68438 }, { 0x70ED, 104743 }, { 0x70EE, 98299 }, { 0x70EF, 99874 }, { 0x70F0, 68455 }, { 0x70F1, 104771 }, { 0x70F2, 98321 }, { 0x70F3, 99845 }, { 0x70F4, 68432 }, { 0x70F5, 104737 }, { 0x70F6, 98293 }, { 0x70F7, 99857 }, { 0x70F8, 68444 }, { 0x70F9, 104749 }, { 0x70FA, 98305 }, { 0x70FB, 99894 }, { 0x70FC, 68471 }, { 0x70FD, 104791 }, { 0x70FE, 98337 }, { 0x70FF, 23060 }, { 0x7100, 23014 }, { 0x7101, 23076 }, { 0x7102, 23047 }, { 0x7103, 23053 }, { 0x7104, 23007 }, { 0x7105, 23069 }, { 0x7106, 23040 }, { 0x7107, 100265 }, { 0x7108, 68710 }, { 0x7109, 105168 }, { 0x710A, 98529 }, { 0x710B, 100259 }, { 0x710C, 68704 }, { 0x710D, 105162 }, { 0x710E, 98523 }, { 0x710F, 100212 }, { 0x7110, 68664 }, { 0x7111, 105115 }, { 0x7112, 98483 }, { 0x7113, 100239 }, { 0x7114, 68691 }, { 0x7115, 105142 }, { 0x7116, 98510 }, { 0x7117, 100232 }, { 0x7118, 68684 }, { 0x7119, 105135 }, { 0x711A, 98503 }, { 0x711B, 100174 }, { 0x711C, 68653 }, { 0x711D, 105081 }, { 0x711E, 98472 }, { 0x711F, 100098 }, { 0x7120, 68626 }, { 0x7121, 105005 }, { 0x7122, 98451 }, { 0x7123, 100112 }, { 0x7124, 68635 }, { 0x7125, 105019 }, { 0x7126, 98460 }, { 0x7127, 99952 }, { 0x7128, 68493 }, { 0x7129, 104849 }, { 0x712A, 98359 }, { 0x712B, 99949 }, { 0x712C, 68490 }, { 0x712D, 104846 }, { 0x712E, 98356 }, { 0x712F, 100115 }, { 0x7130, 68638 }, { 0x7131, 105022 }, { 0x7132, 98463 }, { 0x7133, 32759 }, { 0x7134, 32681 }, { 0x7135, 34642 }, { 0x7136, 34696 }, { 0x7137, 12938 }, { 0x7138, 365 }, { 0x7139, 109652 }, { 0x713A, 109602 }, { 0x713B, 109677 }, { 0x713C, 109627 }, { 0x713D, 109515 }, { 0x713E, 109485 }, { 0x713F, 109545 }, { 0x7140, 109575 }, { 0x7141, 109637 }, { 0x7142, 109587 }, { 0x7143, 109662 }, { 0x7144, 109612 }, { 0x7145, 109497 }, { 0x7146, 109467 }, { 0x7147, 109527 }, { 0x7148, 109557 }, { 0x7149, 109657 }, { 0x714A, 109607 }, { 0x714B, 109682 }, { 0x714C, 109632 }, { 0x714D, 109521 }, { 0x714E, 109491 }, { 0x714F, 109551 }, { 0x7150, 109581 }, { 0x7151, 109647 }, { 0x7152, 109597 }, { 0x7153, 109672 }, { 0x7154, 109622 }, { 0x7155, 109509 }, { 0x7156, 109479 }, { 0x7157, 109539 }, { 0x7158, 109569 }, { 0x7159, 109641 }, { 0x715A, 109591 }, { 0x715B, 109666 }, { 0x715C, 109616 }, { 0x715D, 109502 }, { 0x715E, 109472 }, { 0x715F, 109532 }, { 0x7160, 109562 }, { 0x7161, 100104 }, { 0x7162, 68629 }, { 0x7163, 105011 }, { 0x7164, 98454 }, { 0x7165, 99959 }, { 0x7166, 68534 }, { 0x7167, 104861 }, { 0x7168, 98366 }, { 0x7169, 99884 }, { 0x716A, 68461 }, { 0x716B, 104781 }, { 0x716C, 98327 }, { 0x716D, 22771 }, { 0x716E, 22788 }, { 0x716F, 22776 }, { 0x7170, 22782 }, { 0x7171, 100193 }, { 0x7172, 104867 }, { 0x7173, 99755 }, { 0x7174, 104656 }, { 0x7175, 100177 }, { 0x7176, 105096 }, { 0x7177, 100189 }, { 0x7178, 105084 }, { 0x7179, 100169 }, { 0x717A, 105076 }, { 0x717B, 100184 }, { 0x717C, 105091 }, { 0x717D, 35695 }, { 0x717E, 35700 }, { 0x717F, 114890 }, { 0x7180, 106213 }, { 0x7181, 12589 }, { 0x7182, 14174 }, { 0x7183, 86423 }, { 0x7184, 12592 }, { 0x7185, 33830 }, { 0x7186, 61411 }, { 0x7187, 14743 }, { 0x7188, 12125 }, { 0x7189, 53521 }, { 0x718A, 106190 }, { 0x718B, 114858 }, { 0x718C, 99499 }, { 0x718D, 12712 }, { 0x718E, 12559 }, { 0x718F, 19452 }, { 0x7190, 101643 }, { 0x7191, 65198 }, { 0x7192, 75240 }, { 0x7193, 31428 }, { 0x7194, 12523 }, { 0x7195, 86216 }, { 0x7196, 85847 }, { 0x7197, 53784 }, { 0x7198, 53500 }, { 0x7199, 6228 }, { 0x719A, 52782 }, { 0x719B, 34358 }, { 0x719C, 53454 }, { 0x719D, 82727 }, { 0x719E, 46295 }, { 0x719F, 52773 }, { 0x71A0, 102647 }, { 0x71A1, 35587 }, { 0x71A2, 81625 }, { 0x71A3, 57804 }, { 0x71A4, 12513 }, { 0x71A5, 73139 }, { 0x71A6, 68398 }, { 0x71A7, 34711 }, { 0x71A8, 12707 }, { 0x71A9, 33539 }, { 0x71AA, 19742 }, { 0x71AB, 53780 }, { 0x71AC, 35183 }, { 0x71AD, 44002 }, { 0x71AE, 62333 }, { 0x71AF, 92075 }, { 0x71B0, 57998 }, { 0x71B1, 73274 }, { 0x71B2, 15755 }, { 0x71B3, 53497 }, { 0x71B4, 44533 }, { 0x71B5, 69135 }, { 0x71B6, 22702 }, { 0x71B7, 65242 }, { 0x71B8, 67095 }, { 0x71B9, 5914 }, { 0x71BA, 19779 }, { 0x71BB, 64641 }, { 0x71BC, 99750 }, { 0x71BD, 85404 }, { 0x71BE, 12426 }, { 0x71BF, 13157 }, { 0x71C0, 86140 }, { 0x71C1, 57206 }, { 0x71C2, 68406 }, { 0x71C3, 19600 }, { 0x71C4, 12516 }, { 0x71C5, 4445 }, { 0x71C6, 34308 }, { 0x71C7, 8937 }, { 0x71C8, 5931 }, { 0x71C9, 89012 }, { 0x71CA, 12439 }, { 0x71CB, 61090 }, { 0x71CC, 52139 }, { 0x71CD, 104651 }, { 0x71CE, 53793 }, { 0x71CF, 34716 }, { 0x71D0, 44749 }, { 0x71D1, 83095 }, { 0x71D2, 9659 }, { 0x71D3, 9706 }, { 0x71D4, 9693 }, { 0x71D5, 9669 }, { 0x71D6, 9663 }, { 0x71D7, 9672 }, { 0x71D8, 9688 }, { 0x71D9, 9698 }, { 0x71DA, 9345 }, { 0x71DB, 9656 }, { 0x71DC, 9680 }, { 0x71DD, 9348 }, { 0x71DE, 9353 }, { 0x71DF, 9712 }, { 0x71E0, 9334 }, { 0x71E1, 9678 }, { 0x71E2, 9373 }, { 0x71E3, 9355 }, { 0x71E4, 9361 }, { 0x71E5, 9382 }, { 0x71E6, 9367 }, { 0x71E7, 9364 }, { 0x71E8, 9358 }, { 0x71E9, 9379 }, { 0x71EA, 9376 }, { 0x71EB, 9370 }, { 0x71EC, 9351 }, { 0x71ED, 9696 }, { 0x71EE, 9690 }, { 0x71EF, 9666 }, { 0x71F0, 9709 }, { 0x71F1, 9682 }, { 0x71F2, 9703 }, { 0x71F3, 9518 }, { 0x71F4, 9523 }, { 0x71F5, 9528 }, { 0x71F6, 9533 }, { 0x71F7, 9538 }, { 0x71F8, 9543 }, { 0x71F9, 9548 }, { 0x71FA, 9553 }, { 0x71FB, 9558 }, { 0x71FC, 9563 }, { 0x71FD, 9568 }, { 0x71FE, 9573 }, { 0x71FF, 9578 }, { 0x7200, 9583 }, { 0x7201, 9588 }, { 0x7202, 9593 }, { 0x7203, 9598 }, { 0x7204, 9603 }, { 0x7205, 9608 }, { 0x7206, 9613 }, { 0x7207, 9618 }, { 0x7208, 9623 }, { 0x7209, 9628 }, { 0x720A, 9633 }, { 0x720B, 9638 }, { 0x720C, 9643 }, { 0x720D, 9341 }, { 0x720E, 9675 }, { 0x720F, 9652 }, { 0x7210, 9700 }, { 0x7211, 9331 }, { 0x7212, 9385 }, { 0x7213, 9388 }, { 0x7214, 9393 }, { 0x7215, 9398 }, { 0x7216, 9403 }, { 0x7217, 9408 }, { 0x7218, 9413 }, { 0x7219, 9418 }, { 0x721A, 9423 }, { 0x721B, 9428 }, { 0x721C, 9433 }, { 0x721D, 9438 }, { 0x721E, 9443 }, { 0x721F, 9448 }, { 0x7220, 9453 }, { 0x7221, 9458 }, { 0x7222, 9463 }, { 0x7223, 9468 }, { 0x7224, 9473 }, { 0x7225, 9478 }, { 0x7226, 9483 }, { 0x7227, 9488 }, { 0x7228, 9493 }, { 0x7229, 9498 }, { 0x722A, 9503 }, { 0x722B, 9508 }, { 0x722C, 9513 }, { 0x722D, 9337 }, { 0x722E, 9685 }, { 0x722F, 9648 }, { 0x7230, 9661 }, { 0x7231, 44382 }, }; #define UNICODE_CHARNAME_MAX_LENGTH 83 #define UNICODE_CHARNAME_MAX_WORDS 13 static const struct { uint16_t index; uint32_t gap; uint16_t length; } unicode_ranges[629] = { { 0, 32, 95 }, { 95, 65, 728 }, { 823, 67, 6 }, { 829, 71, 7 }, { 836, 72, 1 }, { 837, 73, 20 }, { 857, 74, 397 }, { 1254, 75, 38 }, { 1292, 77, 7 }, { 1299, 78, 39 }, { 1338, 79, 2 }, { 1340, 81, 3 }, { 1343, 82, 55 }, { 1398, 90, 27 }, { 1425, 95, 5 }, { 1430, 106, 29 }, { 1459, 107, 240 }, { 1699, 108, 60 }, { 1759, 110, 101 }, { 1860, 124, 59 }, { 1919, 129, 46 }, { 1965, 131, 15 }, { 1980, 132, 28 }, { 2008, 134, 1 }, { 2009, 199, 21 }, { 2030, 200, 8 }, { 2038, 222, 176 }, { 2214, 223, 8 }, { 2222, 225, 2 }, { 2224, 227, 22 }, { 2246, 228, 7 }, { 2253, 229, 1 }, { 2254, 232, 4 }, { 2258, 234, 9 }, { 2267, 236, 2 }, { 2269, 238, 4 }, { 2273, 246, 1 }, { 2274, 250, 2 }, { 2276, 251, 5 }, { 2281, 253, 22 }, { 2303, 258, 3 }, { 2306, 259, 6 }, { 2312, 263, 2 }, { 2314, 265, 22 }, { 2336, 266, 7 }, { 2343, 267, 2 }, { 2345, 268, 2 }, { 2347, 269, 2 }, { 2349, 271, 1 }, { 2350, 272, 5 }, { 2355, 276, 2 }, { 2357, 278, 3 }, { 2360, 281, 1 }, { 2361, 288, 4 }, { 2365, 289, 1 }, { 2366, 296, 16 }, { 2382, 307, 3 }, { 2385, 308, 9 }, { 2394, 309, 3 }, { 2397, 310, 22 }, { 2419, 311, 7 }, { 2426, 312, 2 }, { 2428, 313, 5 }, { 2433, 315, 10 }, { 2443, 316, 3 }, { 2446, 317, 3 }, { 2449, 319, 1 }, { 2450, 334, 4 }, { 2454, 336, 12 }, { 2466, 343, 1 }, { 2467, 350, 3 }, { 2470, 351, 8 }, { 2478, 353, 2 }, { 2480, 355, 22 }, { 2502, 356, 7 }, { 2509, 357, 2 }, { 2511, 358, 5 }, { 2516, 360, 9 }, { 2525, 362, 2 }, { 2527, 364, 3 }, { 2530, 372, 2 }, { 2532, 376, 2 }, { 2534, 377, 5 }, { 2539, 379, 18 }, { 2557, 389, 2 }, { 2559, 390, 6 }, { 2565, 393, 3 }, { 2568, 394, 4 }, { 2572, 397, 2 }, { 2574, 398, 1 }, { 2575, 399, 2 }, { 2577, 402, 2 }, { 2579, 405, 3 }, { 2582, 408, 12 }, { 2594, 412, 5 }, { 2599, 415, 3 }, { 2602, 416, 4 }, { 2606, 418, 1 }, { 2607, 424, 1 }, { 2608, 438, 21 }, { 2629, 443, 4 }, { 2633, 444, 8 }, { 2641, 445, 3 }, { 2644, 446, 23 }, { 2667, 447, 16 }, { 2683, 450, 8 }, { 2691, 451, 3 }, { 2694, 452, 4 }, { 2698, 459, 2 }, { 2700, 460, 3 }, { 2703, 465, 4 }, { 2707, 467, 10 }, { 2717, 475, 12 }, { 2729, 476, 8 }, { 2737, 477, 3 }, { 2740, 478, 23 }, { 2763, 479, 10 }, { 2773, 480, 5 }, { 2778, 482, 9 }, { 2787, 483, 3 }, { 2790, 484, 4 }, { 2794, 491, 2 }, { 2796, 498, 1 }, { 2797, 499, 4 }, { 2801, 501, 10 }, { 2811, 502, 2 }, { 2813, 516, 3 }, { 2816, 517, 8 }, { 2824, 518, 3 }, { 2827, 519, 41 }, { 2868, 521, 8 }, { 2876, 522, 3 }, { 2879, 523, 6 }, { 2885, 527, 16 }, { 2901, 529, 26 }, { 2927, 531, 2 }, { 2929, 532, 18 }, { 2947, 535, 24 }, { 2971, 536, 9 }, { 2980, 537, 1 }, { 2981, 539, 7 }, { 2988, 542, 1 }, { 2989, 546, 6 }, { 2995, 547, 1 }, { 2996, 548, 8 }, { 3004, 554, 10 }, { 3014, 556, 3 }, { 3017, 568, 58 }, { 3075, 572, 29 }, { 3104, 609, 2 }, { 3106, 610, 1 }, { 3107, 612, 2 }, { 3109, 613, 1 }, { 3110, 615, 1 }, { 3111, 621, 4 }, { 3115, 622, 7 }, { 3122, 623, 3 }, { 3125, 624, 1 }, { 3126, 625, 1 }, { 3127, 627, 2 }, { 3129, 628, 13 }, { 3142, 629, 3 }, { 3145, 631, 5 }, { 3150, 632, 1 }, { 3151, 633, 6 }, { 3157, 635, 10 }, { 3167, 637, 4 }, { 3171, 669, 72 }, { 3243, 670, 36 }, { 3279, 674, 39 }, { 3318, 675, 36 }, { 3354, 676, 15 }, { 3369, 677, 13 }, { 3382, 714, 198 }, { 3580, 715, 1 }, { 3581, 720, 1 }, { 3582, 722, 377 }, { 3959, 723, 4 }, { 3963, 725, 7 }, { 3970, 726, 1 }, { 3971, 727, 4 }, { 3975, 729, 41 }, { 4016, 730, 4 }, { 4020, 732, 33 }, { 4053, 733, 4 }, { 4057, 735, 7 }, { 4064, 736, 1 }, { 4065, 737, 4 }, { 4069, 739, 15 }, { 4084, 740, 57 }, { 4141, 741, 4 }, { 4145, 743, 67 }, { 4212, 745, 32 }, { 4244, 748, 26 }, { 4270, 754, 86 }, { 4356, 756, 6 }, { 4362, 758, 669 }, { 5031, 761, 89 }, { 5120, 768, 13 }, { 5133, 769, 7 }, { 5140, 780, 23 }, { 5163, 789, 20 }, { 5183, 801, 13 }, { 5196, 802, 3 }, { 5199, 803, 2 }, { 5201, 815, 94 }, { 5295, 817, 10 }, { 5305, 823, 10 }, { 5315, 829, 15 }, { 5330, 830, 10 }, { 5340, 836, 88 }, { 5428, 844, 43 }, { 5471, 849, 70 }, { 5541, 859, 31 }, { 5572, 860, 12 }, { 5584, 864, 12 }, { 5596, 868, 1 }, { 5597, 871, 42 }, { 5639, 873, 5 }, { 5644, 884, 44 }, { 5688, 888, 26 }, { 5714, 894, 11 }, { 5725, 897, 62 }, { 5787, 899, 65 }, { 5852, 900, 29 }, { 5881, 902, 11 }, { 5892, 908, 10 }, { 5902, 914, 14 }, { 5916, 916, 15 }, { 5931, 981, 76 }, { 6007, 985, 45 }, { 6052, 988, 116 }, { 6168, 996, 60 }, { 6228, 999, 15 }, { 6243, 1002, 60 }, { 6303, 1057, 8 }, { 6311, 1065, 39 }, { 6350, 1066, 2 }, { 6352, 1072, 246 }, { 6598, 1077, 283 }, { 6881, 1079, 6 }, { 6887, 1081, 38 }, { 6925, 1083, 6 }, { 6931, 1085, 8 }, { 6939, 1086, 1 }, { 6940, 1087, 1 }, { 6941, 1088, 1 }, { 6942, 1089, 31 }, { 6973, 1091, 53 }, { 7026, 1092, 15 }, { 7041, 1093, 14 }, { 7055, 1095, 6 }, { 7061, 1096, 19 }, { 7080, 1098, 3 }, { 7083, 1099, 9 }, { 7092, 1100, 101 }, { 7193, 1101, 12 }, { 7205, 1103, 27 }, { 7232, 1104, 13 }, { 7245, 1107, 31 }, { 7276, 1124, 33 }, { 7309, 1139, 140 }, { 7449, 1143, 623 }, { 8072, 1144, 39 }, { 8111, 1169, 11 }, { 8122, 1190, 1812 }, { 9934, 1192, 32 }, { 9966, 1194, 34 }, { 10000, 1197, 12 }, { 10012, 1198, 8 }, { 10020, 1224, 4 }, { 10024, 1240, 47 }, { 10071, 1241, 47 }, { 10118, 1242, 148 }, { 10266, 1247, 45 }, { 10311, 1248, 1 }, { 10312, 1253, 1 }, { 10313, 1255, 56 }, { 10369, 1262, 2 }, { 10371, 1276, 24 }, { 10395, 1285, 7 }, { 10402, 1286, 7 }, { 10409, 1287, 7 }, { 10416, 1288, 7 }, { 10423, 1289, 7 }, { 10430, 1290, 7 }, { 10437, 1291, 7 }, { 10444, 1292, 7 }, { 10451, 1293, 101 }, { 10552, 1352, 26 }, { 10578, 1353, 89 }, { 10667, 1365, 214 }, { 10881, 1391, 12 }, { 10893, 1395, 64 }, { 10957, 1396, 86 }, { 11043, 1398, 103 }, { 11146, 1403, 41 }, { 11187, 1406, 94 }, { 11281, 1407, 43 }, { 11324, 1412, 36 }, { 11360, 1424, 47 }, { 11407, 1425, 223 }, { 11630, 1426, 256 }, { 11886, 8018, 64 }, { 11950, 29010, 1165 }, { 13115, 29013, 55 }, { 13170, 29022, 348 }, { 13518, 29042, 184 }, { 13702, 29050, 175 }, { 13877, 29051, 8 }, { 13885, 29114, 53 }, { 13938, 29118, 10 }, { 13948, 29124, 56 }, { 14004, 29132, 70 }, { 14074, 29140, 12 }, { 14086, 29146, 30 }, { 14116, 29148, 84 }, { 14200, 29159, 30 }, { 14230, 29162, 78 }, { 14308, 29163, 11 }, { 14319, 29167, 33 }, { 14352, 29168, 55 }, { 14407, 29177, 14 }, { 14421, 29179, 10 }, { 14431, 29181, 103 }, { 14534, 29205, 28 }, { 14562, 29215, 6 }, { 14568, 29217, 6 }, { 14574, 29219, 6 }, { 14580, 29228, 7 }, { 14587, 29229, 7 }, { 14594, 29230, 54 }, { 14648, 29240, 126 }, { 14774, 29242, 10 }, { 14784, 40432, 23 }, { 14807, 40436, 49 }, { 14856, 49190, 2 }, { 14858, 49249, 3 }, { 14861, 49395, 7 }, { 14868, 49407, 5 }, { 14873, 49412, 26 }, { 14899, 49413, 5 }, { 14904, 49414, 1 }, { 14905, 49415, 2 }, { 14907, 49416, 2 }, { 14909, 49417, 124 }, { 15033, 49434, 365 }, { 15398, 49450, 64 }, { 15462, 49452, 54 }, { 15516, 49492, 14 }, { 15530, 49510, 10 }, { 15540, 49516, 51 }, { 15591, 49517, 19 }, { 15610, 49518, 4 }, { 15614, 49522, 5 }, { 15619, 49523, 135 }, { 15754, 49525, 1 }, { 15755, 49526, 190 }, { 15945, 49529, 6 }, { 15951, 49531, 6 }, { 15957, 49533, 6 }, { 15963, 49535, 3 }, { 15966, 49538, 7 }, { 15973, 49539, 7 }, { 15980, 49549, 5 }, { 15985, 49551, 12 }, { 15997, 49552, 26 }, { 16023, 49553, 19 }, { 16042, 49554, 2 }, { 16044, 49555, 15 }, { 16059, 49557, 14 }, { 16073, 49591, 123 }, { 16196, 49596, 3 }, { 16199, 49600, 45 }, { 16244, 49603, 88 }, { 16332, 49604, 12 }, { 16344, 49608, 1 }, { 16345, 49655, 46 }, { 16391, 49785, 29 }, { 16420, 49788, 49 }, { 16469, 49803, 28 }, { 16497, 49807, 36 }, { 16533, 49819, 27 }, { 16560, 49824, 43 }, { 16603, 49829, 30 }, { 16633, 49830, 37 }, { 16670, 49834, 14 }, { 16684, 49876, 158 }, { 16842, 49878, 10 }, { 16852, 49884, 36 }, { 16888, 49888, 36 }, { 16924, 49892, 40 }, { 16964, 49900, 52 }, { 17016, 49911, 1 }, { 17017, 50055, 311 }, { 17328, 50064, 22 }, { 17350, 50074, 8 }, { 17358, 50226, 6 }, { 17364, 50228, 1 }, { 17365, 50229, 44 }, { 17409, 50230, 2 }, { 17411, 50233, 1 }, { 17412, 50235, 23 }, { 17435, 50236, 72 }, { 17507, 50244, 9 }, { 17516, 50292, 19 }, { 17535, 50293, 2 }, { 17537, 50298, 33 }, { 17570, 50301, 27 }, { 17597, 50306, 1 }, { 17598, 50370, 56 }, { 17654, 50374, 20 }, { 17674, 50376, 50 }, { 17724, 50377, 2 }, { 17726, 50382, 8 }, { 17734, 50383, 3 }, { 17737, 50384, 27 }, { 17764, 50388, 3 }, { 17767, 50392, 9 }, { 17776, 50400, 9 }, { 17785, 50407, 64 }, { 17849, 50439, 39 }, { 17888, 50443, 12 }, { 17900, 50452, 54 }, { 17954, 50455, 29 }, { 17983, 50457, 27 }, { 18010, 50462, 26 }, { 18036, 50469, 4 }, { 18040, 50481, 7 }, { 18047, 50561, 73 }, { 18120, 50616, 51 }, { 18171, 50629, 51 }, { 18222, 50636, 6 }, { 18228, 50988, 31 }, { 18259, 51373, 78 }, { 18337, 51377, 30 }, { 18367, 51392, 67 }, { 18434, 51406, 25 }, { 18459, 51413, 10 }, { 18469, 51419, 53 }, { 18522, 51420, 14 }, { 18536, 51432, 39 }, { 18575, 51441, 78 }, { 18653, 51443, 16 }, { 18669, 51444, 20 }, { 18689, 51455, 18 }, { 18707, 51456, 44 }, { 18751, 51521, 7 }, { 18758, 51522, 1 }, { 18759, 51523, 4 }, { 18763, 51524, 15 }, { 18778, 51525, 11 }, { 18789, 51531, 59 }, { 18848, 51536, 10 }, { 18858, 51542, 4 }, { 18862, 51543, 8 }, { 18870, 51545, 2 }, { 18872, 51547, 22 }, { 18894, 51548, 7 }, { 18901, 51549, 2 }, { 18903, 51550, 5 }, { 18908, 51552, 9 }, { 18917, 51554, 2 }, { 18919, 51556, 3 }, { 18922, 51558, 1 }, { 18923, 51564, 1 }, { 18924, 51569, 7 }, { 18931, 51571, 7 }, { 18938, 51574, 5 }, { 18943, 51713, 90 }, { 19033, 51714, 1 }, { 19034, 51715, 1 }, { 19035, 51749, 72 }, { 19107, 51757, 10 }, { 19117, 51923, 54 }, { 19171, 51925, 38 }, { 19209, 51959, 69 }, { 19278, 51970, 10 }, { 19288, 51976, 13 }, { 19301, 51995, 56 }, { 19357, 52003, 10 }, { 19367, 52057, 26 }, { 19393, 52060, 15 }, { 19408, 52064, 16 }, { 19424, 52416, 83 }, { 19507, 52428, 1 }, { 19508, 52876, 57 }, { 19565, 53139, 9 }, { 19574, 53140, 45 }, { 19619, 53141, 14 }, { 19633, 53151, 29 }, { 19662, 53154, 32 }, { 19694, 53156, 22 }, { 19716, 53157, 14 }, { 19730, 53998, 922 }, { 20652, 54100, 111 }, { 20763, 54101, 5 }, { 20768, 54112, 196 }, { 20964, 56860, 1071 }, { 22035, 60909, 583 }, { 22618, 69542, 569 }, { 23187, 69549, 31 }, { 23218, 69550, 10 }, { 23228, 69554, 2 }, { 23230, 69650, 30 }, { 23260, 69652, 6 }, { 23266, 69662, 70 }, { 23336, 69672, 10 }, { 23346, 69673, 7 }, { 23353, 69674, 21 }, { 23374, 69679, 19 }, { 23393, 70559, 69 }, { 23462, 70570, 47 }, { 23509, 70586, 17 }, { 23526, 70650, 1 }, { 23527, 76825, 755 }, { 24282, 86310, 2 }, { 24284, 89380, 107 }, { 24391, 89385, 13 }, { 24404, 89388, 9 }, { 24413, 89395, 10 }, { 24423, 89397, 8 }, { 24431, 94353, 246 }, { 24677, 94363, 39 }, { 24716, 94365, 192 }, { 24908, 94388, 70 }, { 24978, 94574, 87 }, { 25065, 94583, 18 }, { 25083, 94725, 85 }, { 25168, 94726, 71 }, { 25239, 94727, 2 }, { 25241, 94729, 1 }, { 25242, 94731, 2 }, { 25244, 94733, 4 }, { 25248, 94734, 12 }, { 25260, 94735, 1 }, { 25261, 94736, 7 }, { 25268, 94737, 65 }, { 25333, 94738, 4 }, { 25337, 94740, 8 }, { 25345, 94741, 7 }, { 25352, 94742, 28 }, { 25380, 94743, 4 }, { 25384, 94744, 5 }, { 25389, 94745, 1 }, { 25390, 94748, 7 }, { 25397, 94749, 340 }, { 25737, 94751, 292 }, { 26029, 94753, 702 }, { 26731, 94768, 5 }, { 26736, 94769, 15 }, { 26751, 96129, 7 }, { 26758, 96130, 17 }, { 26775, 96132, 7 }, { 26782, 96133, 2 }, { 26784, 96134, 5 }, { 26789, 98139, 197 }, { 26986, 98141, 16 }, { 27002, 98182, 75 }, { 27077, 98187, 10 }, { 27087, 98191, 2 }, { 27089, 99375, 4 }, { 27093, 99376, 27 }, { 27120, 99377, 2 }, { 27122, 99378, 1 }, { 27123, 99380, 1 }, { 27124, 99381, 10 }, { 27134, 99382, 4 }, { 27138, 99383, 1 }, { 27139, 99384, 1 }, { 27140, 99390, 1 }, { 27141, 99394, 1 }, { 27142, 99395, 1 }, { 27143, 99396, 1 }, { 27144, 99397, 3 }, { 27147, 99398, 2 }, { 27149, 99399, 1 }, { 27150, 99401, 1 }, { 27151, 99402, 1 }, { 27152, 99403, 1 }, { 27153, 99404, 1 }, { 27154, 99405, 1 }, { 27155, 99406, 2 }, { 27157, 99407, 1 }, { 27158, 99409, 4 }, { 27162, 99410, 7 }, { 27169, 99411, 4 }, { 27173, 99412, 4 }, { 27177, 99413, 1 }, { 27178, 99414, 10 }, { 27188, 99415, 17 }, { 27205, 99420, 3 }, { 27208, 99421, 5 }, { 27213, 99422, 17 }, { 27230, 99474, 2 }, { 27232, 99744, 44 }, { 27276, 99748, 100 }, { 27376, 99760, 15 }, { 27391, 99762, 15 }, { 27406, 99763, 15 }, { 27421, 99764, 37 }, { 27458, 99774, 13 }, { 27471, 99777, 31 }, { 27502, 99778, 60 }, { 27562, 99782, 61 }, { 27623, 99839, 29 }, { 27652, 99852, 44 }, { 27696, 99856, 9 }, { 27705, 99863, 2 }, { 27707, 100037, 979 }, { 28686, 100050, 13 }, { 28699, 100053, 7 }, { 28706, 100062, 116 }, { 28822, 100074, 85 }, { 28907, 100117, 12 }, { 28919, 100121, 56 }, { 28975, 100129, 10 }, { 28985, 100135, 40 }, { 29025, 100143, 30 }, { 29055, 100241, 15 }, { 29070, 100242, 8 }, { 29078, 100250, 1 }, { 29079, 100252, 12 }, { 29091, 100253, 12 }, { 29103, 100257, 15 }, { 29118, 100290, 18 }, { 29136, 100336, 1 }, { 29137, 888368, 1 }, { 29138, 888398, 96 }, }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm.in.h������������������������������������������������������������0000664�0000000�0000000�00000024550�14110572173�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization forms (composition and decomposition) of Unicode strings. Copyright (C) 2001-2002, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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 _UNINORM_H #define _UNINORM_H /* Get size_t. */ #include <stddef.h> #include "unitypes.h" #ifdef __cplusplus extern "C" { #endif /* Conventions: All functions prefixed with u8_ operate on UTF-8 encoded strings. Their unit is an uint8_t (1 byte). All functions prefixed with u16_ operate on UTF-16 encoded strings. Their unit is an uint16_t (a 2-byte word). All functions prefixed with u32_ operate on UCS-4 encoded strings. Their unit is an uint32_t (a 4-byte word). All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly n units. Functions returning a string result take a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ enum { UC_DECOMP_CANONICAL,/* Canonical decomposition. */ UC_DECOMP_FONT, /* <font> A font variant (e.g. a blackletter form). */ UC_DECOMP_NOBREAK, /* <noBreak> A no-break version of a space or hyphen. */ UC_DECOMP_INITIAL, /* <initial> An initial presentation form (Arabic). */ UC_DECOMP_MEDIAL, /* <medial> A medial presentation form (Arabic). */ UC_DECOMP_FINAL, /* <final> A final presentation form (Arabic). */ UC_DECOMP_ISOLATED,/* <isolated> An isolated presentation form (Arabic). */ UC_DECOMP_CIRCLE, /* <circle> An encircled form. */ UC_DECOMP_SUPER, /* <super> A superscript form. */ UC_DECOMP_SUB, /* <sub> A subscript form. */ UC_DECOMP_VERTICAL,/* <vertical> A vertical layout presentation form. */ UC_DECOMP_WIDE, /* <wide> A wide (or zenkaku) compatibility character. */ UC_DECOMP_NARROW, /* <narrow> A narrow (or hankaku) compatibility character. */ UC_DECOMP_SMALL, /* <small> A small variant form (CNS compatibility). */ UC_DECOMP_SQUARE, /* <square> A CJK squared font variant. */ UC_DECOMP_FRACTION,/* <fraction> A vulgar fraction form. */ UC_DECOMP_COMPAT /* <compat> Otherwise unspecified compatibility character. */ }; /* Maximum size of decomposition of a single Unicode character. */ #define UC_DECOMPOSITION_MAX_LENGTH 32 /* Return the character decomposition mapping of a Unicode character. DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. When a decomposition exists, DECOMPOSITION[0..N-1] and *DECOMP_TAG are filled and N is returned. Otherwise -1 is returned. */ extern int uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition); /* Return the canonical character decomposition mapping of a Unicode character. DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. When a decomposition exists, DECOMPOSITION[0..N-1] is filled and N is returned. Otherwise -1 is returned. */ extern int uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition); /* Attempt to combine the Unicode characters uc1, uc2. uc1 is known to have canonical combining class 0. Return the combination of uc1 and uc2, if it exists. Return 0 otherwise. Not all decompositions can be recombined using this function. See the Unicode file CompositionExclusions.txt for details. */ extern ucs4_t uc_composition (ucs4_t uc1, ucs4_t uc2) _UC_ATTRIBUTE_CONST; /* An object of type uninorm_t denotes a Unicode normalization form. */ struct unicode_normalization_form; typedef const struct unicode_normalization_form *uninorm_t; /* UNINORM_NFD: Normalization form D: canonical decomposition. */ extern const struct unicode_normalization_form uninorm_nfd; #define UNINORM_NFD (&uninorm_nfd) /* UNINORM_NFC: Normalization form C: canonical decomposition, then canonical composition. */ extern const struct unicode_normalization_form uninorm_nfc; #define UNINORM_NFC (&uninorm_nfc) /* UNINORM_NFKD: Normalization form KD: compatibility decomposition. */ extern const struct unicode_normalization_form uninorm_nfkd; #define UNINORM_NFKD (&uninorm_nfkd) /* UNINORM_NFKC: Normalization form KC: compatibility decomposition, then canonical composition. */ extern const struct unicode_normalization_form uninorm_nfkc; #define UNINORM_NFKC (&uninorm_nfkc) /* Test whether a normalization form does compatibility decomposition. */ #define uninorm_is_compat_decomposing(nf) \ ((* (const unsigned int *) (nf) >> 0) & 1) /* Test whether a normalization form includes canonical composition. */ #define uninorm_is_composing(nf) \ ((* (const unsigned int *) (nf) >> 1) & 1) /* Return the decomposing variant of a normalization form. This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. */ extern uninorm_t uninorm_decomposing_form (uninorm_t nf) _UC_ATTRIBUTE_PURE; /* Return the specified normalization form of a string. */ extern uint8_t * u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in normalization. NF must be either UNINORM_NFD or UNINORM_NFKD. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp); /* Converts the string S of length N to a NUL-terminated byte sequence, in such a way that comparing uN_normxfrm (S1) and uN_normxfrm (S2) with uN_cmp2() is equivalent to comparing S1 and S2 with uN_normcoll(). NF must be either UNINORM_NFC or UNINORM_NFKC. */ extern char * u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in normalization, using the collation rules of the current locale. NF must be either UNINORM_NFC or UNINORM_NFKC. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp); /* Normalization of a stream of Unicode characters. A "stream of Unicode characters" is essentially a function that accepts an ucs4_t argument repeatedly, optionally combined with a function that "flushes" the stream. */ /* Data type of a stream of Unicode characters that normalizes its input according to a given normalization form and passes the normalized character sequence to the encapsulated stream of Unicode characters. */ struct uninorm_filter; /* Bring data buffered in the filter to its destination, the encapsulated stream, then close and free the filter. Return 0 if successful, or -1 with errno set upon failure. */ extern int uninorm_filter_free (struct uninorm_filter *filter); /* Create and return a normalization filter for Unicode characters. The pair (stream_func, stream_data) is the encapsulated stream. stream_func (stream_data, uc) receives the Unicode character uc and returns 0 if successful, or -1 with errno set upon failure. Return the new filter, or NULL with errno set upon failure. */ extern struct uninorm_filter * uninorm_filter_create (uninorm_t nf, int (*stream_func) (void *stream_data, ucs4_t uc), void *stream_data) _GL_ATTRIBUTE_DEALLOC (uninorm_filter_free, 1); /* Stuff a Unicode character into a normalizing filter. Return 0 if successful, or -1 with errno set upon failure. */ extern int uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc); /* Bring data buffered in the filter to its destination, the encapsulated stream. Return 0 if successful, or -1 with errno set upon failure. Note! If after calling this function, additional characters are written into the filter, the resulting character sequence in the encapsulated stream will not necessarily be normalized. */ extern int uninorm_filter_flush (struct uninorm_filter *filter); #ifdef __cplusplus } #endif #endif /* _UNINORM_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016534�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/canonical-decomposition.c���������������������������������������0000664�0000000�0000000�00000006371�14110572173�0023510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <stdlib.h> #include "uninorm/decomposition-table.h" int uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition) { if (uc >= 0xAC00 && uc < 0xD7A4) { /* Hangul syllable. See Unicode standard, chapter 3, section "Hangul Syllable Decomposition", See also the clarification at <https://www.unicode.org/versions/Unicode5.1.0/>, section "Clarification of Hangul Jamo Handling". */ unsigned int t; uc -= 0xAC00; t = uc % 28; if (t == 0) { unsigned int v, l; uc = uc / 28; v = uc % 21; l = uc / 21; decomposition[0] = 0x1100 + l; decomposition[1] = 0x1161 + v; return 2; } else { #if 1 /* Return the pairwise decomposition, not the full decomposition. */ decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ decomposition[1] = 0x11A7 + t; return 2; #else unsigned int v, l; uc = uc / 28; v = uc % 21; l = uc / 21; decomposition[0] = 0x1100 + l; decomposition[1] = 0x1161 + v; decomposition[2] = 0x11A7 + t; return 3; #endif } } else if (uc < 0x110000) { unsigned short entry = decomp_index (uc); /* An entry of (unsigned short)(-1) denotes an absent entry. Otherwise, bit 15 of the entry tells whether the decomposition is a canonical one. */ if (entry < 0x8000) { const unsigned char *p; unsigned int element; unsigned int length; p = &gl_uninorm_decomp_chars_table[3 * entry]; element = (p[0] << 16) | (p[1] << 8) | p[2]; /* The first element has 5 bits for the decomposition type. */ if (((element >> 18) & 0x1f) != UC_DECOMP_CANONICAL) abort (); length = 1; for (;;) { /* Every element has an 18 bits wide Unicode code point. */ *decomposition = element & 0x3ffff; /* Bit 23 tells whether there are more elements, */ if ((element & (1 << 23)) == 0) break; p += 3; element = (p[0] << 16) | (p[1] << 8) | p[2]; decomposition++; length++; } return length; } } return -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/compat-decomposition.c������������������������������������������0000664�0000000�0000000�00000002652�14110572173�0023042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compatibility decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "decompose-internal.h" #include "uninorm.h" int uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition) { int tag; return uc_decomposition (uc, &tag, decomposition); } ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/composition-table.gperf�����������������������������������������0000664�0000000�0000000�00000102432�14110572173�0023213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Canonical composition of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2009 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/>. */ struct composition_rule { char codes[6]; }; %struct-type %language=ANSI-C %define slot-name codes %define hash-function-name gl_uninorm_compose_hash %define lookup-function-name gl_uninorm_compose_lookup %compare-lengths %compare-strncmp %readonly-tables %omit-struct-type %% "\x00\x00\x41\x00\x03\x00", 0x00c0 "\x00\x00\x41\x00\x03\x01", 0x00c1 "\x00\x00\x41\x00\x03\x02", 0x00c2 "\x00\x00\x41\x00\x03\x03", 0x00c3 "\x00\x00\x41\x00\x03\x08", 0x00c4 "\x00\x00\x41\x00\x03\x0a", 0x00c5 "\x00\x00\x43\x00\x03\x27", 0x00c7 "\x00\x00\x45\x00\x03\x00", 0x00c8 "\x00\x00\x45\x00\x03\x01", 0x00c9 "\x00\x00\x45\x00\x03\x02", 0x00ca "\x00\x00\x45\x00\x03\x08", 0x00cb "\x00\x00\x49\x00\x03\x00", 0x00cc "\x00\x00\x49\x00\x03\x01", 0x00cd "\x00\x00\x49\x00\x03\x02", 0x00ce "\x00\x00\x49\x00\x03\x08", 0x00cf "\x00\x00\x4e\x00\x03\x03", 0x00d1 "\x00\x00\x4f\x00\x03\x00", 0x00d2 "\x00\x00\x4f\x00\x03\x01", 0x00d3 "\x00\x00\x4f\x00\x03\x02", 0x00d4 "\x00\x00\x4f\x00\x03\x03", 0x00d5 "\x00\x00\x4f\x00\x03\x08", 0x00d6 "\x00\x00\x55\x00\x03\x00", 0x00d9 "\x00\x00\x55\x00\x03\x01", 0x00da "\x00\x00\x55\x00\x03\x02", 0x00db "\x00\x00\x55\x00\x03\x08", 0x00dc "\x00\x00\x59\x00\x03\x01", 0x00dd "\x00\x00\x61\x00\x03\x00", 0x00e0 "\x00\x00\x61\x00\x03\x01", 0x00e1 "\x00\x00\x61\x00\x03\x02", 0x00e2 "\x00\x00\x61\x00\x03\x03", 0x00e3 "\x00\x00\x61\x00\x03\x08", 0x00e4 "\x00\x00\x61\x00\x03\x0a", 0x00e5 "\x00\x00\x63\x00\x03\x27", 0x00e7 "\x00\x00\x65\x00\x03\x00", 0x00e8 "\x00\x00\x65\x00\x03\x01", 0x00e9 "\x00\x00\x65\x00\x03\x02", 0x00ea "\x00\x00\x65\x00\x03\x08", 0x00eb "\x00\x00\x69\x00\x03\x00", 0x00ec "\x00\x00\x69\x00\x03\x01", 0x00ed "\x00\x00\x69\x00\x03\x02", 0x00ee "\x00\x00\x69\x00\x03\x08", 0x00ef "\x00\x00\x6e\x00\x03\x03", 0x00f1 "\x00\x00\x6f\x00\x03\x00", 0x00f2 "\x00\x00\x6f\x00\x03\x01", 0x00f3 "\x00\x00\x6f\x00\x03\x02", 0x00f4 "\x00\x00\x6f\x00\x03\x03", 0x00f5 "\x00\x00\x6f\x00\x03\x08", 0x00f6 "\x00\x00\x75\x00\x03\x00", 0x00f9 "\x00\x00\x75\x00\x03\x01", 0x00fa "\x00\x00\x75\x00\x03\x02", 0x00fb "\x00\x00\x75\x00\x03\x08", 0x00fc "\x00\x00\x79\x00\x03\x01", 0x00fd "\x00\x00\x79\x00\x03\x08", 0x00ff "\x00\x00\x41\x00\x03\x04", 0x0100 "\x00\x00\x61\x00\x03\x04", 0x0101 "\x00\x00\x41\x00\x03\x06", 0x0102 "\x00\x00\x61\x00\x03\x06", 0x0103 "\x00\x00\x41\x00\x03\x28", 0x0104 "\x00\x00\x61\x00\x03\x28", 0x0105 "\x00\x00\x43\x00\x03\x01", 0x0106 "\x00\x00\x63\x00\x03\x01", 0x0107 "\x00\x00\x43\x00\x03\x02", 0x0108 "\x00\x00\x63\x00\x03\x02", 0x0109 "\x00\x00\x43\x00\x03\x07", 0x010a "\x00\x00\x63\x00\x03\x07", 0x010b "\x00\x00\x43\x00\x03\x0c", 0x010c "\x00\x00\x63\x00\x03\x0c", 0x010d "\x00\x00\x44\x00\x03\x0c", 0x010e "\x00\x00\x64\x00\x03\x0c", 0x010f "\x00\x00\x45\x00\x03\x04", 0x0112 "\x00\x00\x65\x00\x03\x04", 0x0113 "\x00\x00\x45\x00\x03\x06", 0x0114 "\x00\x00\x65\x00\x03\x06", 0x0115 "\x00\x00\x45\x00\x03\x07", 0x0116 "\x00\x00\x65\x00\x03\x07", 0x0117 "\x00\x00\x45\x00\x03\x28", 0x0118 "\x00\x00\x65\x00\x03\x28", 0x0119 "\x00\x00\x45\x00\x03\x0c", 0x011a "\x00\x00\x65\x00\x03\x0c", 0x011b "\x00\x00\x47\x00\x03\x02", 0x011c "\x00\x00\x67\x00\x03\x02", 0x011d "\x00\x00\x47\x00\x03\x06", 0x011e "\x00\x00\x67\x00\x03\x06", 0x011f "\x00\x00\x47\x00\x03\x07", 0x0120 "\x00\x00\x67\x00\x03\x07", 0x0121 "\x00\x00\x47\x00\x03\x27", 0x0122 "\x00\x00\x67\x00\x03\x27", 0x0123 "\x00\x00\x48\x00\x03\x02", 0x0124 "\x00\x00\x68\x00\x03\x02", 0x0125 "\x00\x00\x49\x00\x03\x03", 0x0128 "\x00\x00\x69\x00\x03\x03", 0x0129 "\x00\x00\x49\x00\x03\x04", 0x012a "\x00\x00\x69\x00\x03\x04", 0x012b "\x00\x00\x49\x00\x03\x06", 0x012c "\x00\x00\x69\x00\x03\x06", 0x012d "\x00\x00\x49\x00\x03\x28", 0x012e "\x00\x00\x69\x00\x03\x28", 0x012f "\x00\x00\x49\x00\x03\x07", 0x0130 "\x00\x00\x4a\x00\x03\x02", 0x0134 "\x00\x00\x6a\x00\x03\x02", 0x0135 "\x00\x00\x4b\x00\x03\x27", 0x0136 "\x00\x00\x6b\x00\x03\x27", 0x0137 "\x00\x00\x4c\x00\x03\x01", 0x0139 "\x00\x00\x6c\x00\x03\x01", 0x013a "\x00\x00\x4c\x00\x03\x27", 0x013b "\x00\x00\x6c\x00\x03\x27", 0x013c "\x00\x00\x4c\x00\x03\x0c", 0x013d "\x00\x00\x6c\x00\x03\x0c", 0x013e "\x00\x00\x4e\x00\x03\x01", 0x0143 "\x00\x00\x6e\x00\x03\x01", 0x0144 "\x00\x00\x4e\x00\x03\x27", 0x0145 "\x00\x00\x6e\x00\x03\x27", 0x0146 "\x00\x00\x4e\x00\x03\x0c", 0x0147 "\x00\x00\x6e\x00\x03\x0c", 0x0148 "\x00\x00\x4f\x00\x03\x04", 0x014c "\x00\x00\x6f\x00\x03\x04", 0x014d "\x00\x00\x4f\x00\x03\x06", 0x014e "\x00\x00\x6f\x00\x03\x06", 0x014f "\x00\x00\x4f\x00\x03\x0b", 0x0150 "\x00\x00\x6f\x00\x03\x0b", 0x0151 "\x00\x00\x52\x00\x03\x01", 0x0154 "\x00\x00\x72\x00\x03\x01", 0x0155 "\x00\x00\x52\x00\x03\x27", 0x0156 "\x00\x00\x72\x00\x03\x27", 0x0157 "\x00\x00\x52\x00\x03\x0c", 0x0158 "\x00\x00\x72\x00\x03\x0c", 0x0159 "\x00\x00\x53\x00\x03\x01", 0x015a "\x00\x00\x73\x00\x03\x01", 0x015b "\x00\x00\x53\x00\x03\x02", 0x015c "\x00\x00\x73\x00\x03\x02", 0x015d "\x00\x00\x53\x00\x03\x27", 0x015e "\x00\x00\x73\x00\x03\x27", 0x015f "\x00\x00\x53\x00\x03\x0c", 0x0160 "\x00\x00\x73\x00\x03\x0c", 0x0161 "\x00\x00\x54\x00\x03\x27", 0x0162 "\x00\x00\x74\x00\x03\x27", 0x0163 "\x00\x00\x54\x00\x03\x0c", 0x0164 "\x00\x00\x74\x00\x03\x0c", 0x0165 "\x00\x00\x55\x00\x03\x03", 0x0168 "\x00\x00\x75\x00\x03\x03", 0x0169 "\x00\x00\x55\x00\x03\x04", 0x016a "\x00\x00\x75\x00\x03\x04", 0x016b "\x00\x00\x55\x00\x03\x06", 0x016c "\x00\x00\x75\x00\x03\x06", 0x016d "\x00\x00\x55\x00\x03\x0a", 0x016e "\x00\x00\x75\x00\x03\x0a", 0x016f "\x00\x00\x55\x00\x03\x0b", 0x0170 "\x00\x00\x75\x00\x03\x0b", 0x0171 "\x00\x00\x55\x00\x03\x28", 0x0172 "\x00\x00\x75\x00\x03\x28", 0x0173 "\x00\x00\x57\x00\x03\x02", 0x0174 "\x00\x00\x77\x00\x03\x02", 0x0175 "\x00\x00\x59\x00\x03\x02", 0x0176 "\x00\x00\x79\x00\x03\x02", 0x0177 "\x00\x00\x59\x00\x03\x08", 0x0178 "\x00\x00\x5a\x00\x03\x01", 0x0179 "\x00\x00\x7a\x00\x03\x01", 0x017a "\x00\x00\x5a\x00\x03\x07", 0x017b "\x00\x00\x7a\x00\x03\x07", 0x017c "\x00\x00\x5a\x00\x03\x0c", 0x017d "\x00\x00\x7a\x00\x03\x0c", 0x017e "\x00\x00\x4f\x00\x03\x1b", 0x01a0 "\x00\x00\x6f\x00\x03\x1b", 0x01a1 "\x00\x00\x55\x00\x03\x1b", 0x01af "\x00\x00\x75\x00\x03\x1b", 0x01b0 "\x00\x00\x41\x00\x03\x0c", 0x01cd "\x00\x00\x61\x00\x03\x0c", 0x01ce "\x00\x00\x49\x00\x03\x0c", 0x01cf "\x00\x00\x69\x00\x03\x0c", 0x01d0 "\x00\x00\x4f\x00\x03\x0c", 0x01d1 "\x00\x00\x6f\x00\x03\x0c", 0x01d2 "\x00\x00\x55\x00\x03\x0c", 0x01d3 "\x00\x00\x75\x00\x03\x0c", 0x01d4 "\x00\x00\xdc\x00\x03\x04", 0x01d5 "\x00\x00\xfc\x00\x03\x04", 0x01d6 "\x00\x00\xdc\x00\x03\x01", 0x01d7 "\x00\x00\xfc\x00\x03\x01", 0x01d8 "\x00\x00\xdc\x00\x03\x0c", 0x01d9 "\x00\x00\xfc\x00\x03\x0c", 0x01da "\x00\x00\xdc\x00\x03\x00", 0x01db "\x00\x00\xfc\x00\x03\x00", 0x01dc "\x00\x00\xc4\x00\x03\x04", 0x01de "\x00\x00\xe4\x00\x03\x04", 0x01df "\x00\x02\x26\x00\x03\x04", 0x01e0 "\x00\x02\x27\x00\x03\x04", 0x01e1 "\x00\x00\xc6\x00\x03\x04", 0x01e2 "\x00\x00\xe6\x00\x03\x04", 0x01e3 "\x00\x00\x47\x00\x03\x0c", 0x01e6 "\x00\x00\x67\x00\x03\x0c", 0x01e7 "\x00\x00\x4b\x00\x03\x0c", 0x01e8 "\x00\x00\x6b\x00\x03\x0c", 0x01e9 "\x00\x00\x4f\x00\x03\x28", 0x01ea "\x00\x00\x6f\x00\x03\x28", 0x01eb "\x00\x01\xea\x00\x03\x04", 0x01ec "\x00\x01\xeb\x00\x03\x04", 0x01ed "\x00\x01\xb7\x00\x03\x0c", 0x01ee "\x00\x02\x92\x00\x03\x0c", 0x01ef "\x00\x00\x6a\x00\x03\x0c", 0x01f0 "\x00\x00\x47\x00\x03\x01", 0x01f4 "\x00\x00\x67\x00\x03\x01", 0x01f5 "\x00\x00\x4e\x00\x03\x00", 0x01f8 "\x00\x00\x6e\x00\x03\x00", 0x01f9 "\x00\x00\xc5\x00\x03\x01", 0x01fa "\x00\x00\xe5\x00\x03\x01", 0x01fb "\x00\x00\xc6\x00\x03\x01", 0x01fc "\x00\x00\xe6\x00\x03\x01", 0x01fd "\x00\x00\xd8\x00\x03\x01", 0x01fe "\x00\x00\xf8\x00\x03\x01", 0x01ff "\x00\x00\x41\x00\x03\x0f", 0x0200 "\x00\x00\x61\x00\x03\x0f", 0x0201 "\x00\x00\x41\x00\x03\x11", 0x0202 "\x00\x00\x61\x00\x03\x11", 0x0203 "\x00\x00\x45\x00\x03\x0f", 0x0204 "\x00\x00\x65\x00\x03\x0f", 0x0205 "\x00\x00\x45\x00\x03\x11", 0x0206 "\x00\x00\x65\x00\x03\x11", 0x0207 "\x00\x00\x49\x00\x03\x0f", 0x0208 "\x00\x00\x69\x00\x03\x0f", 0x0209 "\x00\x00\x49\x00\x03\x11", 0x020a "\x00\x00\x69\x00\x03\x11", 0x020b "\x00\x00\x4f\x00\x03\x0f", 0x020c "\x00\x00\x6f\x00\x03\x0f", 0x020d "\x00\x00\x4f\x00\x03\x11", 0x020e "\x00\x00\x6f\x00\x03\x11", 0x020f "\x00\x00\x52\x00\x03\x0f", 0x0210 "\x00\x00\x72\x00\x03\x0f", 0x0211 "\x00\x00\x52\x00\x03\x11", 0x0212 "\x00\x00\x72\x00\x03\x11", 0x0213 "\x00\x00\x55\x00\x03\x0f", 0x0214 "\x00\x00\x75\x00\x03\x0f", 0x0215 "\x00\x00\x55\x00\x03\x11", 0x0216 "\x00\x00\x75\x00\x03\x11", 0x0217 "\x00\x00\x53\x00\x03\x26", 0x0218 "\x00\x00\x73\x00\x03\x26", 0x0219 "\x00\x00\x54\x00\x03\x26", 0x021a "\x00\x00\x74\x00\x03\x26", 0x021b "\x00\x00\x48\x00\x03\x0c", 0x021e "\x00\x00\x68\x00\x03\x0c", 0x021f "\x00\x00\x41\x00\x03\x07", 0x0226 "\x00\x00\x61\x00\x03\x07", 0x0227 "\x00\x00\x45\x00\x03\x27", 0x0228 "\x00\x00\x65\x00\x03\x27", 0x0229 "\x00\x00\xd6\x00\x03\x04", 0x022a "\x00\x00\xf6\x00\x03\x04", 0x022b "\x00\x00\xd5\x00\x03\x04", 0x022c "\x00\x00\xf5\x00\x03\x04", 0x022d "\x00\x00\x4f\x00\x03\x07", 0x022e "\x00\x00\x6f\x00\x03\x07", 0x022f "\x00\x02\x2e\x00\x03\x04", 0x0230 "\x00\x02\x2f\x00\x03\x04", 0x0231 "\x00\x00\x59\x00\x03\x04", 0x0232 "\x00\x00\x79\x00\x03\x04", 0x0233 "\x00\x00\xa8\x00\x03\x01", 0x0385 "\x00\x03\x91\x00\x03\x01", 0x0386 "\x00\x03\x95\x00\x03\x01", 0x0388 "\x00\x03\x97\x00\x03\x01", 0x0389 "\x00\x03\x99\x00\x03\x01", 0x038a "\x00\x03\x9f\x00\x03\x01", 0x038c "\x00\x03\xa5\x00\x03\x01", 0x038e "\x00\x03\xa9\x00\x03\x01", 0x038f "\x00\x03\xca\x00\x03\x01", 0x0390 "\x00\x03\x99\x00\x03\x08", 0x03aa "\x00\x03\xa5\x00\x03\x08", 0x03ab "\x00\x03\xb1\x00\x03\x01", 0x03ac "\x00\x03\xb5\x00\x03\x01", 0x03ad "\x00\x03\xb7\x00\x03\x01", 0x03ae "\x00\x03\xb9\x00\x03\x01", 0x03af "\x00\x03\xcb\x00\x03\x01", 0x03b0 "\x00\x03\xb9\x00\x03\x08", 0x03ca "\x00\x03\xc5\x00\x03\x08", 0x03cb "\x00\x03\xbf\x00\x03\x01", 0x03cc "\x00\x03\xc5\x00\x03\x01", 0x03cd "\x00\x03\xc9\x00\x03\x01", 0x03ce "\x00\x03\xd2\x00\x03\x01", 0x03d3 "\x00\x03\xd2\x00\x03\x08", 0x03d4 "\x00\x04\x15\x00\x03\x00", 0x0400 "\x00\x04\x15\x00\x03\x08", 0x0401 "\x00\x04\x13\x00\x03\x01", 0x0403 "\x00\x04\x06\x00\x03\x08", 0x0407 "\x00\x04\x1a\x00\x03\x01", 0x040c "\x00\x04\x18\x00\x03\x00", 0x040d "\x00\x04\x23\x00\x03\x06", 0x040e "\x00\x04\x18\x00\x03\x06", 0x0419 "\x00\x04\x38\x00\x03\x06", 0x0439 "\x00\x04\x35\x00\x03\x00", 0x0450 "\x00\x04\x35\x00\x03\x08", 0x0451 "\x00\x04\x33\x00\x03\x01", 0x0453 "\x00\x04\x56\x00\x03\x08", 0x0457 "\x00\x04\x3a\x00\x03\x01", 0x045c "\x00\x04\x38\x00\x03\x00", 0x045d "\x00\x04\x43\x00\x03\x06", 0x045e "\x00\x04\x74\x00\x03\x0f", 0x0476 "\x00\x04\x75\x00\x03\x0f", 0x0477 "\x00\x04\x16\x00\x03\x06", 0x04c1 "\x00\x04\x36\x00\x03\x06", 0x04c2 "\x00\x04\x10\x00\x03\x06", 0x04d0 "\x00\x04\x30\x00\x03\x06", 0x04d1 "\x00\x04\x10\x00\x03\x08", 0x04d2 "\x00\x04\x30\x00\x03\x08", 0x04d3 "\x00\x04\x15\x00\x03\x06", 0x04d6 "\x00\x04\x35\x00\x03\x06", 0x04d7 "\x00\x04\xd8\x00\x03\x08", 0x04da "\x00\x04\xd9\x00\x03\x08", 0x04db "\x00\x04\x16\x00\x03\x08", 0x04dc "\x00\x04\x36\x00\x03\x08", 0x04dd "\x00\x04\x17\x00\x03\x08", 0x04de "\x00\x04\x37\x00\x03\x08", 0x04df "\x00\x04\x18\x00\x03\x04", 0x04e2 "\x00\x04\x38\x00\x03\x04", 0x04e3 "\x00\x04\x18\x00\x03\x08", 0x04e4 "\x00\x04\x38\x00\x03\x08", 0x04e5 "\x00\x04\x1e\x00\x03\x08", 0x04e6 "\x00\x04\x3e\x00\x03\x08", 0x04e7 "\x00\x04\xe8\x00\x03\x08", 0x04ea "\x00\x04\xe9\x00\x03\x08", 0x04eb "\x00\x04\x2d\x00\x03\x08", 0x04ec "\x00\x04\x4d\x00\x03\x08", 0x04ed "\x00\x04\x23\x00\x03\x04", 0x04ee "\x00\x04\x43\x00\x03\x04", 0x04ef "\x00\x04\x23\x00\x03\x08", 0x04f0 "\x00\x04\x43\x00\x03\x08", 0x04f1 "\x00\x04\x23\x00\x03\x0b", 0x04f2 "\x00\x04\x43\x00\x03\x0b", 0x04f3 "\x00\x04\x27\x00\x03\x08", 0x04f4 "\x00\x04\x47\x00\x03\x08", 0x04f5 "\x00\x04\x2b\x00\x03\x08", 0x04f8 "\x00\x04\x4b\x00\x03\x08", 0x04f9 "\x00\x06\x27\x00\x06\x53", 0x0622 "\x00\x06\x27\x00\x06\x54", 0x0623 "\x00\x06\x48\x00\x06\x54", 0x0624 "\x00\x06\x27\x00\x06\x55", 0x0625 "\x00\x06\x4a\x00\x06\x54", 0x0626 "\x00\x06\xd5\x00\x06\x54", 0x06c0 "\x00\x06\xc1\x00\x06\x54", 0x06c2 "\x00\x06\xd2\x00\x06\x54", 0x06d3 "\x00\x09\x28\x00\x09\x3c", 0x0929 "\x00\x09\x30\x00\x09\x3c", 0x0931 "\x00\x09\x33\x00\x09\x3c", 0x0934 "\x00\x09\xc7\x00\x09\xbe", 0x09cb "\x00\x09\xc7\x00\x09\xd7", 0x09cc "\x00\x0b\x47\x00\x0b\x56", 0x0b48 "\x00\x0b\x47\x00\x0b\x3e", 0x0b4b "\x00\x0b\x47\x00\x0b\x57", 0x0b4c "\x00\x0b\x92\x00\x0b\xd7", 0x0b94 "\x00\x0b\xc6\x00\x0b\xbe", 0x0bca "\x00\x0b\xc7\x00\x0b\xbe", 0x0bcb "\x00\x0b\xc6\x00\x0b\xd7", 0x0bcc "\x00\x0c\x46\x00\x0c\x56", 0x0c48 "\x00\x0c\xbf\x00\x0c\xd5", 0x0cc0 "\x00\x0c\xc6\x00\x0c\xd5", 0x0cc7 "\x00\x0c\xc6\x00\x0c\xd6", 0x0cc8 "\x00\x0c\xc6\x00\x0c\xc2", 0x0cca "\x00\x0c\xca\x00\x0c\xd5", 0x0ccb "\x00\x0d\x46\x00\x0d\x3e", 0x0d4a "\x00\x0d\x47\x00\x0d\x3e", 0x0d4b "\x00\x0d\x46\x00\x0d\x57", 0x0d4c "\x00\x0d\xd9\x00\x0d\xca", 0x0dda "\x00\x0d\xd9\x00\x0d\xcf", 0x0ddc "\x00\x0d\xdc\x00\x0d\xca", 0x0ddd "\x00\x0d\xd9\x00\x0d\xdf", 0x0dde "\x00\x10\x25\x00\x10\x2e", 0x1026 "\x00\x1b\x05\x00\x1b\x35", 0x1b06 "\x00\x1b\x07\x00\x1b\x35", 0x1b08 "\x00\x1b\x09\x00\x1b\x35", 0x1b0a "\x00\x1b\x0b\x00\x1b\x35", 0x1b0c "\x00\x1b\x0d\x00\x1b\x35", 0x1b0e "\x00\x1b\x11\x00\x1b\x35", 0x1b12 "\x00\x1b\x3a\x00\x1b\x35", 0x1b3b "\x00\x1b\x3c\x00\x1b\x35", 0x1b3d "\x00\x1b\x3e\x00\x1b\x35", 0x1b40 "\x00\x1b\x3f\x00\x1b\x35", 0x1b41 "\x00\x1b\x42\x00\x1b\x35", 0x1b43 "\x00\x00\x41\x00\x03\x25", 0x1e00 "\x00\x00\x61\x00\x03\x25", 0x1e01 "\x00\x00\x42\x00\x03\x07", 0x1e02 "\x00\x00\x62\x00\x03\x07", 0x1e03 "\x00\x00\x42\x00\x03\x23", 0x1e04 "\x00\x00\x62\x00\x03\x23", 0x1e05 "\x00\x00\x42\x00\x03\x31", 0x1e06 "\x00\x00\x62\x00\x03\x31", 0x1e07 "\x00\x00\xc7\x00\x03\x01", 0x1e08 "\x00\x00\xe7\x00\x03\x01", 0x1e09 "\x00\x00\x44\x00\x03\x07", 0x1e0a "\x00\x00\x64\x00\x03\x07", 0x1e0b "\x00\x00\x44\x00\x03\x23", 0x1e0c "\x00\x00\x64\x00\x03\x23", 0x1e0d "\x00\x00\x44\x00\x03\x31", 0x1e0e "\x00\x00\x64\x00\x03\x31", 0x1e0f "\x00\x00\x44\x00\x03\x27", 0x1e10 "\x00\x00\x64\x00\x03\x27", 0x1e11 "\x00\x00\x44\x00\x03\x2d", 0x1e12 "\x00\x00\x64\x00\x03\x2d", 0x1e13 "\x00\x01\x12\x00\x03\x00", 0x1e14 "\x00\x01\x13\x00\x03\x00", 0x1e15 "\x00\x01\x12\x00\x03\x01", 0x1e16 "\x00\x01\x13\x00\x03\x01", 0x1e17 "\x00\x00\x45\x00\x03\x2d", 0x1e18 "\x00\x00\x65\x00\x03\x2d", 0x1e19 "\x00\x00\x45\x00\x03\x30", 0x1e1a "\x00\x00\x65\x00\x03\x30", 0x1e1b "\x00\x02\x28\x00\x03\x06", 0x1e1c "\x00\x02\x29\x00\x03\x06", 0x1e1d "\x00\x00\x46\x00\x03\x07", 0x1e1e "\x00\x00\x66\x00\x03\x07", 0x1e1f "\x00\x00\x47\x00\x03\x04", 0x1e20 "\x00\x00\x67\x00\x03\x04", 0x1e21 "\x00\x00\x48\x00\x03\x07", 0x1e22 "\x00\x00\x68\x00\x03\x07", 0x1e23 "\x00\x00\x48\x00\x03\x23", 0x1e24 "\x00\x00\x68\x00\x03\x23", 0x1e25 "\x00\x00\x48\x00\x03\x08", 0x1e26 "\x00\x00\x68\x00\x03\x08", 0x1e27 "\x00\x00\x48\x00\x03\x27", 0x1e28 "\x00\x00\x68\x00\x03\x27", 0x1e29 "\x00\x00\x48\x00\x03\x2e", 0x1e2a "\x00\x00\x68\x00\x03\x2e", 0x1e2b "\x00\x00\x49\x00\x03\x30", 0x1e2c "\x00\x00\x69\x00\x03\x30", 0x1e2d "\x00\x00\xcf\x00\x03\x01", 0x1e2e "\x00\x00\xef\x00\x03\x01", 0x1e2f "\x00\x00\x4b\x00\x03\x01", 0x1e30 "\x00\x00\x6b\x00\x03\x01", 0x1e31 "\x00\x00\x4b\x00\x03\x23", 0x1e32 "\x00\x00\x6b\x00\x03\x23", 0x1e33 "\x00\x00\x4b\x00\x03\x31", 0x1e34 "\x00\x00\x6b\x00\x03\x31", 0x1e35 "\x00\x00\x4c\x00\x03\x23", 0x1e36 "\x00\x00\x6c\x00\x03\x23", 0x1e37 "\x00\x1e\x36\x00\x03\x04", 0x1e38 "\x00\x1e\x37\x00\x03\x04", 0x1e39 "\x00\x00\x4c\x00\x03\x31", 0x1e3a "\x00\x00\x6c\x00\x03\x31", 0x1e3b "\x00\x00\x4c\x00\x03\x2d", 0x1e3c "\x00\x00\x6c\x00\x03\x2d", 0x1e3d "\x00\x00\x4d\x00\x03\x01", 0x1e3e "\x00\x00\x6d\x00\x03\x01", 0x1e3f "\x00\x00\x4d\x00\x03\x07", 0x1e40 "\x00\x00\x6d\x00\x03\x07", 0x1e41 "\x00\x00\x4d\x00\x03\x23", 0x1e42 "\x00\x00\x6d\x00\x03\x23", 0x1e43 "\x00\x00\x4e\x00\x03\x07", 0x1e44 "\x00\x00\x6e\x00\x03\x07", 0x1e45 "\x00\x00\x4e\x00\x03\x23", 0x1e46 "\x00\x00\x6e\x00\x03\x23", 0x1e47 "\x00\x00\x4e\x00\x03\x31", 0x1e48 "\x00\x00\x6e\x00\x03\x31", 0x1e49 "\x00\x00\x4e\x00\x03\x2d", 0x1e4a "\x00\x00\x6e\x00\x03\x2d", 0x1e4b "\x00\x00\xd5\x00\x03\x01", 0x1e4c "\x00\x00\xf5\x00\x03\x01", 0x1e4d "\x00\x00\xd5\x00\x03\x08", 0x1e4e "\x00\x00\xf5\x00\x03\x08", 0x1e4f "\x00\x01\x4c\x00\x03\x00", 0x1e50 "\x00\x01\x4d\x00\x03\x00", 0x1e51 "\x00\x01\x4c\x00\x03\x01", 0x1e52 "\x00\x01\x4d\x00\x03\x01", 0x1e53 "\x00\x00\x50\x00\x03\x01", 0x1e54 "\x00\x00\x70\x00\x03\x01", 0x1e55 "\x00\x00\x50\x00\x03\x07", 0x1e56 "\x00\x00\x70\x00\x03\x07", 0x1e57 "\x00\x00\x52\x00\x03\x07", 0x1e58 "\x00\x00\x72\x00\x03\x07", 0x1e59 "\x00\x00\x52\x00\x03\x23", 0x1e5a "\x00\x00\x72\x00\x03\x23", 0x1e5b "\x00\x1e\x5a\x00\x03\x04", 0x1e5c "\x00\x1e\x5b\x00\x03\x04", 0x1e5d "\x00\x00\x52\x00\x03\x31", 0x1e5e "\x00\x00\x72\x00\x03\x31", 0x1e5f "\x00\x00\x53\x00\x03\x07", 0x1e60 "\x00\x00\x73\x00\x03\x07", 0x1e61 "\x00\x00\x53\x00\x03\x23", 0x1e62 "\x00\x00\x73\x00\x03\x23", 0x1e63 "\x00\x01\x5a\x00\x03\x07", 0x1e64 "\x00\x01\x5b\x00\x03\x07", 0x1e65 "\x00\x01\x60\x00\x03\x07", 0x1e66 "\x00\x01\x61\x00\x03\x07", 0x1e67 "\x00\x1e\x62\x00\x03\x07", 0x1e68 "\x00\x1e\x63\x00\x03\x07", 0x1e69 "\x00\x00\x54\x00\x03\x07", 0x1e6a "\x00\x00\x74\x00\x03\x07", 0x1e6b "\x00\x00\x54\x00\x03\x23", 0x1e6c "\x00\x00\x74\x00\x03\x23", 0x1e6d "\x00\x00\x54\x00\x03\x31", 0x1e6e "\x00\x00\x74\x00\x03\x31", 0x1e6f "\x00\x00\x54\x00\x03\x2d", 0x1e70 "\x00\x00\x74\x00\x03\x2d", 0x1e71 "\x00\x00\x55\x00\x03\x24", 0x1e72 "\x00\x00\x75\x00\x03\x24", 0x1e73 "\x00\x00\x55\x00\x03\x30", 0x1e74 "\x00\x00\x75\x00\x03\x30", 0x1e75 "\x00\x00\x55\x00\x03\x2d", 0x1e76 "\x00\x00\x75\x00\x03\x2d", 0x1e77 "\x00\x01\x68\x00\x03\x01", 0x1e78 "\x00\x01\x69\x00\x03\x01", 0x1e79 "\x00\x01\x6a\x00\x03\x08", 0x1e7a "\x00\x01\x6b\x00\x03\x08", 0x1e7b "\x00\x00\x56\x00\x03\x03", 0x1e7c "\x00\x00\x76\x00\x03\x03", 0x1e7d "\x00\x00\x56\x00\x03\x23", 0x1e7e "\x00\x00\x76\x00\x03\x23", 0x1e7f "\x00\x00\x57\x00\x03\x00", 0x1e80 "\x00\x00\x77\x00\x03\x00", 0x1e81 "\x00\x00\x57\x00\x03\x01", 0x1e82 "\x00\x00\x77\x00\x03\x01", 0x1e83 "\x00\x00\x57\x00\x03\x08", 0x1e84 "\x00\x00\x77\x00\x03\x08", 0x1e85 "\x00\x00\x57\x00\x03\x07", 0x1e86 "\x00\x00\x77\x00\x03\x07", 0x1e87 "\x00\x00\x57\x00\x03\x23", 0x1e88 "\x00\x00\x77\x00\x03\x23", 0x1e89 "\x00\x00\x58\x00\x03\x07", 0x1e8a "\x00\x00\x78\x00\x03\x07", 0x1e8b "\x00\x00\x58\x00\x03\x08", 0x1e8c "\x00\x00\x78\x00\x03\x08", 0x1e8d "\x00\x00\x59\x00\x03\x07", 0x1e8e "\x00\x00\x79\x00\x03\x07", 0x1e8f "\x00\x00\x5a\x00\x03\x02", 0x1e90 "\x00\x00\x7a\x00\x03\x02", 0x1e91 "\x00\x00\x5a\x00\x03\x23", 0x1e92 "\x00\x00\x7a\x00\x03\x23", 0x1e93 "\x00\x00\x5a\x00\x03\x31", 0x1e94 "\x00\x00\x7a\x00\x03\x31", 0x1e95 "\x00\x00\x68\x00\x03\x31", 0x1e96 "\x00\x00\x74\x00\x03\x08", 0x1e97 "\x00\x00\x77\x00\x03\x0a", 0x1e98 "\x00\x00\x79\x00\x03\x0a", 0x1e99 "\x00\x01\x7f\x00\x03\x07", 0x1e9b "\x00\x00\x41\x00\x03\x23", 0x1ea0 "\x00\x00\x61\x00\x03\x23", 0x1ea1 "\x00\x00\x41\x00\x03\x09", 0x1ea2 "\x00\x00\x61\x00\x03\x09", 0x1ea3 "\x00\x00\xc2\x00\x03\x01", 0x1ea4 "\x00\x00\xe2\x00\x03\x01", 0x1ea5 "\x00\x00\xc2\x00\x03\x00", 0x1ea6 "\x00\x00\xe2\x00\x03\x00", 0x1ea7 "\x00\x00\xc2\x00\x03\x09", 0x1ea8 "\x00\x00\xe2\x00\x03\x09", 0x1ea9 "\x00\x00\xc2\x00\x03\x03", 0x1eaa "\x00\x00\xe2\x00\x03\x03", 0x1eab "\x00\x1e\xa0\x00\x03\x02", 0x1eac "\x00\x1e\xa1\x00\x03\x02", 0x1ead "\x00\x01\x02\x00\x03\x01", 0x1eae "\x00\x01\x03\x00\x03\x01", 0x1eaf "\x00\x01\x02\x00\x03\x00", 0x1eb0 "\x00\x01\x03\x00\x03\x00", 0x1eb1 "\x00\x01\x02\x00\x03\x09", 0x1eb2 "\x00\x01\x03\x00\x03\x09", 0x1eb3 "\x00\x01\x02\x00\x03\x03", 0x1eb4 "\x00\x01\x03\x00\x03\x03", 0x1eb5 "\x00\x1e\xa0\x00\x03\x06", 0x1eb6 "\x00\x1e\xa1\x00\x03\x06", 0x1eb7 "\x00\x00\x45\x00\x03\x23", 0x1eb8 "\x00\x00\x65\x00\x03\x23", 0x1eb9 "\x00\x00\x45\x00\x03\x09", 0x1eba "\x00\x00\x65\x00\x03\x09", 0x1ebb "\x00\x00\x45\x00\x03\x03", 0x1ebc "\x00\x00\x65\x00\x03\x03", 0x1ebd "\x00\x00\xca\x00\x03\x01", 0x1ebe "\x00\x00\xea\x00\x03\x01", 0x1ebf "\x00\x00\xca\x00\x03\x00", 0x1ec0 "\x00\x00\xea\x00\x03\x00", 0x1ec1 "\x00\x00\xca\x00\x03\x09", 0x1ec2 "\x00\x00\xea\x00\x03\x09", 0x1ec3 "\x00\x00\xca\x00\x03\x03", 0x1ec4 "\x00\x00\xea\x00\x03\x03", 0x1ec5 "\x00\x1e\xb8\x00\x03\x02", 0x1ec6 "\x00\x1e\xb9\x00\x03\x02", 0x1ec7 "\x00\x00\x49\x00\x03\x09", 0x1ec8 "\x00\x00\x69\x00\x03\x09", 0x1ec9 "\x00\x00\x49\x00\x03\x23", 0x1eca "\x00\x00\x69\x00\x03\x23", 0x1ecb "\x00\x00\x4f\x00\x03\x23", 0x1ecc "\x00\x00\x6f\x00\x03\x23", 0x1ecd "\x00\x00\x4f\x00\x03\x09", 0x1ece "\x00\x00\x6f\x00\x03\x09", 0x1ecf "\x00\x00\xd4\x00\x03\x01", 0x1ed0 "\x00\x00\xf4\x00\x03\x01", 0x1ed1 "\x00\x00\xd4\x00\x03\x00", 0x1ed2 "\x00\x00\xf4\x00\x03\x00", 0x1ed3 "\x00\x00\xd4\x00\x03\x09", 0x1ed4 "\x00\x00\xf4\x00\x03\x09", 0x1ed5 "\x00\x00\xd4\x00\x03\x03", 0x1ed6 "\x00\x00\xf4\x00\x03\x03", 0x1ed7 "\x00\x1e\xcc\x00\x03\x02", 0x1ed8 "\x00\x1e\xcd\x00\x03\x02", 0x1ed9 "\x00\x01\xa0\x00\x03\x01", 0x1eda "\x00\x01\xa1\x00\x03\x01", 0x1edb "\x00\x01\xa0\x00\x03\x00", 0x1edc "\x00\x01\xa1\x00\x03\x00", 0x1edd "\x00\x01\xa0\x00\x03\x09", 0x1ede "\x00\x01\xa1\x00\x03\x09", 0x1edf "\x00\x01\xa0\x00\x03\x03", 0x1ee0 "\x00\x01\xa1\x00\x03\x03", 0x1ee1 "\x00\x01\xa0\x00\x03\x23", 0x1ee2 "\x00\x01\xa1\x00\x03\x23", 0x1ee3 "\x00\x00\x55\x00\x03\x23", 0x1ee4 "\x00\x00\x75\x00\x03\x23", 0x1ee5 "\x00\x00\x55\x00\x03\x09", 0x1ee6 "\x00\x00\x75\x00\x03\x09", 0x1ee7 "\x00\x01\xaf\x00\x03\x01", 0x1ee8 "\x00\x01\xb0\x00\x03\x01", 0x1ee9 "\x00\x01\xaf\x00\x03\x00", 0x1eea "\x00\x01\xb0\x00\x03\x00", 0x1eeb "\x00\x01\xaf\x00\x03\x09", 0x1eec "\x00\x01\xb0\x00\x03\x09", 0x1eed "\x00\x01\xaf\x00\x03\x03", 0x1eee "\x00\x01\xb0\x00\x03\x03", 0x1eef "\x00\x01\xaf\x00\x03\x23", 0x1ef0 "\x00\x01\xb0\x00\x03\x23", 0x1ef1 "\x00\x00\x59\x00\x03\x00", 0x1ef2 "\x00\x00\x79\x00\x03\x00", 0x1ef3 "\x00\x00\x59\x00\x03\x23", 0x1ef4 "\x00\x00\x79\x00\x03\x23", 0x1ef5 "\x00\x00\x59\x00\x03\x09", 0x1ef6 "\x00\x00\x79\x00\x03\x09", 0x1ef7 "\x00\x00\x59\x00\x03\x03", 0x1ef8 "\x00\x00\x79\x00\x03\x03", 0x1ef9 "\x00\x03\xb1\x00\x03\x13", 0x1f00 "\x00\x03\xb1\x00\x03\x14", 0x1f01 "\x00\x1f\x00\x00\x03\x00", 0x1f02 "\x00\x1f\x01\x00\x03\x00", 0x1f03 "\x00\x1f\x00\x00\x03\x01", 0x1f04 "\x00\x1f\x01\x00\x03\x01", 0x1f05 "\x00\x1f\x00\x00\x03\x42", 0x1f06 "\x00\x1f\x01\x00\x03\x42", 0x1f07 "\x00\x03\x91\x00\x03\x13", 0x1f08 "\x00\x03\x91\x00\x03\x14", 0x1f09 "\x00\x1f\x08\x00\x03\x00", 0x1f0a "\x00\x1f\x09\x00\x03\x00", 0x1f0b "\x00\x1f\x08\x00\x03\x01", 0x1f0c "\x00\x1f\x09\x00\x03\x01", 0x1f0d "\x00\x1f\x08\x00\x03\x42", 0x1f0e "\x00\x1f\x09\x00\x03\x42", 0x1f0f "\x00\x03\xb5\x00\x03\x13", 0x1f10 "\x00\x03\xb5\x00\x03\x14", 0x1f11 "\x00\x1f\x10\x00\x03\x00", 0x1f12 "\x00\x1f\x11\x00\x03\x00", 0x1f13 "\x00\x1f\x10\x00\x03\x01", 0x1f14 "\x00\x1f\x11\x00\x03\x01", 0x1f15 "\x00\x03\x95\x00\x03\x13", 0x1f18 "\x00\x03\x95\x00\x03\x14", 0x1f19 "\x00\x1f\x18\x00\x03\x00", 0x1f1a "\x00\x1f\x19\x00\x03\x00", 0x1f1b "\x00\x1f\x18\x00\x03\x01", 0x1f1c "\x00\x1f\x19\x00\x03\x01", 0x1f1d "\x00\x03\xb7\x00\x03\x13", 0x1f20 "\x00\x03\xb7\x00\x03\x14", 0x1f21 "\x00\x1f\x20\x00\x03\x00", 0x1f22 "\x00\x1f\x21\x00\x03\x00", 0x1f23 "\x00\x1f\x20\x00\x03\x01", 0x1f24 "\x00\x1f\x21\x00\x03\x01", 0x1f25 "\x00\x1f\x20\x00\x03\x42", 0x1f26 "\x00\x1f\x21\x00\x03\x42", 0x1f27 "\x00\x03\x97\x00\x03\x13", 0x1f28 "\x00\x03\x97\x00\x03\x14", 0x1f29 "\x00\x1f\x28\x00\x03\x00", 0x1f2a "\x00\x1f\x29\x00\x03\x00", 0x1f2b "\x00\x1f\x28\x00\x03\x01", 0x1f2c "\x00\x1f\x29\x00\x03\x01", 0x1f2d "\x00\x1f\x28\x00\x03\x42", 0x1f2e "\x00\x1f\x29\x00\x03\x42", 0x1f2f "\x00\x03\xb9\x00\x03\x13", 0x1f30 "\x00\x03\xb9\x00\x03\x14", 0x1f31 "\x00\x1f\x30\x00\x03\x00", 0x1f32 "\x00\x1f\x31\x00\x03\x00", 0x1f33 "\x00\x1f\x30\x00\x03\x01", 0x1f34 "\x00\x1f\x31\x00\x03\x01", 0x1f35 "\x00\x1f\x30\x00\x03\x42", 0x1f36 "\x00\x1f\x31\x00\x03\x42", 0x1f37 "\x00\x03\x99\x00\x03\x13", 0x1f38 "\x00\x03\x99\x00\x03\x14", 0x1f39 "\x00\x1f\x38\x00\x03\x00", 0x1f3a "\x00\x1f\x39\x00\x03\x00", 0x1f3b "\x00\x1f\x38\x00\x03\x01", 0x1f3c "\x00\x1f\x39\x00\x03\x01", 0x1f3d "\x00\x1f\x38\x00\x03\x42", 0x1f3e "\x00\x1f\x39\x00\x03\x42", 0x1f3f "\x00\x03\xbf\x00\x03\x13", 0x1f40 "\x00\x03\xbf\x00\x03\x14", 0x1f41 "\x00\x1f\x40\x00\x03\x00", 0x1f42 "\x00\x1f\x41\x00\x03\x00", 0x1f43 "\x00\x1f\x40\x00\x03\x01", 0x1f44 "\x00\x1f\x41\x00\x03\x01", 0x1f45 "\x00\x03\x9f\x00\x03\x13", 0x1f48 "\x00\x03\x9f\x00\x03\x14", 0x1f49 "\x00\x1f\x48\x00\x03\x00", 0x1f4a "\x00\x1f\x49\x00\x03\x00", 0x1f4b "\x00\x1f\x48\x00\x03\x01", 0x1f4c "\x00\x1f\x49\x00\x03\x01", 0x1f4d "\x00\x03\xc5\x00\x03\x13", 0x1f50 "\x00\x03\xc5\x00\x03\x14", 0x1f51 "\x00\x1f\x50\x00\x03\x00", 0x1f52 "\x00\x1f\x51\x00\x03\x00", 0x1f53 "\x00\x1f\x50\x00\x03\x01", 0x1f54 "\x00\x1f\x51\x00\x03\x01", 0x1f55 "\x00\x1f\x50\x00\x03\x42", 0x1f56 "\x00\x1f\x51\x00\x03\x42", 0x1f57 "\x00\x03\xa5\x00\x03\x14", 0x1f59 "\x00\x1f\x59\x00\x03\x00", 0x1f5b "\x00\x1f\x59\x00\x03\x01", 0x1f5d "\x00\x1f\x59\x00\x03\x42", 0x1f5f "\x00\x03\xc9\x00\x03\x13", 0x1f60 "\x00\x03\xc9\x00\x03\x14", 0x1f61 "\x00\x1f\x60\x00\x03\x00", 0x1f62 "\x00\x1f\x61\x00\x03\x00", 0x1f63 "\x00\x1f\x60\x00\x03\x01", 0x1f64 "\x00\x1f\x61\x00\x03\x01", 0x1f65 "\x00\x1f\x60\x00\x03\x42", 0x1f66 "\x00\x1f\x61\x00\x03\x42", 0x1f67 "\x00\x03\xa9\x00\x03\x13", 0x1f68 "\x00\x03\xa9\x00\x03\x14", 0x1f69 "\x00\x1f\x68\x00\x03\x00", 0x1f6a "\x00\x1f\x69\x00\x03\x00", 0x1f6b "\x00\x1f\x68\x00\x03\x01", 0x1f6c "\x00\x1f\x69\x00\x03\x01", 0x1f6d "\x00\x1f\x68\x00\x03\x42", 0x1f6e "\x00\x1f\x69\x00\x03\x42", 0x1f6f "\x00\x03\xb1\x00\x03\x00", 0x1f70 "\x00\x03\xb5\x00\x03\x00", 0x1f72 "\x00\x03\xb7\x00\x03\x00", 0x1f74 "\x00\x03\xb9\x00\x03\x00", 0x1f76 "\x00\x03\xbf\x00\x03\x00", 0x1f78 "\x00\x03\xc5\x00\x03\x00", 0x1f7a "\x00\x03\xc9\x00\x03\x00", 0x1f7c "\x00\x1f\x00\x00\x03\x45", 0x1f80 "\x00\x1f\x01\x00\x03\x45", 0x1f81 "\x00\x1f\x02\x00\x03\x45", 0x1f82 "\x00\x1f\x03\x00\x03\x45", 0x1f83 "\x00\x1f\x04\x00\x03\x45", 0x1f84 "\x00\x1f\x05\x00\x03\x45", 0x1f85 "\x00\x1f\x06\x00\x03\x45", 0x1f86 "\x00\x1f\x07\x00\x03\x45", 0x1f87 "\x00\x1f\x08\x00\x03\x45", 0x1f88 "\x00\x1f\x09\x00\x03\x45", 0x1f89 "\x00\x1f\x0a\x00\x03\x45", 0x1f8a "\x00\x1f\x0b\x00\x03\x45", 0x1f8b "\x00\x1f\x0c\x00\x03\x45", 0x1f8c "\x00\x1f\x0d\x00\x03\x45", 0x1f8d "\x00\x1f\x0e\x00\x03\x45", 0x1f8e "\x00\x1f\x0f\x00\x03\x45", 0x1f8f "\x00\x1f\x20\x00\x03\x45", 0x1f90 "\x00\x1f\x21\x00\x03\x45", 0x1f91 "\x00\x1f\x22\x00\x03\x45", 0x1f92 "\x00\x1f\x23\x00\x03\x45", 0x1f93 "\x00\x1f\x24\x00\x03\x45", 0x1f94 "\x00\x1f\x25\x00\x03\x45", 0x1f95 "\x00\x1f\x26\x00\x03\x45", 0x1f96 "\x00\x1f\x27\x00\x03\x45", 0x1f97 "\x00\x1f\x28\x00\x03\x45", 0x1f98 "\x00\x1f\x29\x00\x03\x45", 0x1f99 "\x00\x1f\x2a\x00\x03\x45", 0x1f9a "\x00\x1f\x2b\x00\x03\x45", 0x1f9b "\x00\x1f\x2c\x00\x03\x45", 0x1f9c "\x00\x1f\x2d\x00\x03\x45", 0x1f9d "\x00\x1f\x2e\x00\x03\x45", 0x1f9e "\x00\x1f\x2f\x00\x03\x45", 0x1f9f "\x00\x1f\x60\x00\x03\x45", 0x1fa0 "\x00\x1f\x61\x00\x03\x45", 0x1fa1 "\x00\x1f\x62\x00\x03\x45", 0x1fa2 "\x00\x1f\x63\x00\x03\x45", 0x1fa3 "\x00\x1f\x64\x00\x03\x45", 0x1fa4 "\x00\x1f\x65\x00\x03\x45", 0x1fa5 "\x00\x1f\x66\x00\x03\x45", 0x1fa6 "\x00\x1f\x67\x00\x03\x45", 0x1fa7 "\x00\x1f\x68\x00\x03\x45", 0x1fa8 "\x00\x1f\x69\x00\x03\x45", 0x1fa9 "\x00\x1f\x6a\x00\x03\x45", 0x1faa "\x00\x1f\x6b\x00\x03\x45", 0x1fab "\x00\x1f\x6c\x00\x03\x45", 0x1fac "\x00\x1f\x6d\x00\x03\x45", 0x1fad "\x00\x1f\x6e\x00\x03\x45", 0x1fae "\x00\x1f\x6f\x00\x03\x45", 0x1faf "\x00\x03\xb1\x00\x03\x06", 0x1fb0 "\x00\x03\xb1\x00\x03\x04", 0x1fb1 "\x00\x1f\x70\x00\x03\x45", 0x1fb2 "\x00\x03\xb1\x00\x03\x45", 0x1fb3 "\x00\x03\xac\x00\x03\x45", 0x1fb4 "\x00\x03\xb1\x00\x03\x42", 0x1fb6 "\x00\x1f\xb6\x00\x03\x45", 0x1fb7 "\x00\x03\x91\x00\x03\x06", 0x1fb8 "\x00\x03\x91\x00\x03\x04", 0x1fb9 "\x00\x03\x91\x00\x03\x00", 0x1fba "\x00\x03\x91\x00\x03\x45", 0x1fbc "\x00\x00\xa8\x00\x03\x42", 0x1fc1 "\x00\x1f\x74\x00\x03\x45", 0x1fc2 "\x00\x03\xb7\x00\x03\x45", 0x1fc3 "\x00\x03\xae\x00\x03\x45", 0x1fc4 "\x00\x03\xb7\x00\x03\x42", 0x1fc6 "\x00\x1f\xc6\x00\x03\x45", 0x1fc7 "\x00\x03\x95\x00\x03\x00", 0x1fc8 "\x00\x03\x97\x00\x03\x00", 0x1fca "\x00\x03\x97\x00\x03\x45", 0x1fcc "\x00\x1f\xbf\x00\x03\x00", 0x1fcd "\x00\x1f\xbf\x00\x03\x01", 0x1fce "\x00\x1f\xbf\x00\x03\x42", 0x1fcf "\x00\x03\xb9\x00\x03\x06", 0x1fd0 "\x00\x03\xb9\x00\x03\x04", 0x1fd1 "\x00\x03\xca\x00\x03\x00", 0x1fd2 "\x00\x03\xb9\x00\x03\x42", 0x1fd6 "\x00\x03\xca\x00\x03\x42", 0x1fd7 "\x00\x03\x99\x00\x03\x06", 0x1fd8 "\x00\x03\x99\x00\x03\x04", 0x1fd9 "\x00\x03\x99\x00\x03\x00", 0x1fda "\x00\x1f\xfe\x00\x03\x00", 0x1fdd "\x00\x1f\xfe\x00\x03\x01", 0x1fde "\x00\x1f\xfe\x00\x03\x42", 0x1fdf "\x00\x03\xc5\x00\x03\x06", 0x1fe0 "\x00\x03\xc5\x00\x03\x04", 0x1fe1 "\x00\x03\xcb\x00\x03\x00", 0x1fe2 "\x00\x03\xc1\x00\x03\x13", 0x1fe4 "\x00\x03\xc1\x00\x03\x14", 0x1fe5 "\x00\x03\xc5\x00\x03\x42", 0x1fe6 "\x00\x03\xcb\x00\x03\x42", 0x1fe7 "\x00\x03\xa5\x00\x03\x06", 0x1fe8 "\x00\x03\xa5\x00\x03\x04", 0x1fe9 "\x00\x03\xa5\x00\x03\x00", 0x1fea "\x00\x03\xa1\x00\x03\x14", 0x1fec "\x00\x00\xa8\x00\x03\x00", 0x1fed "\x00\x1f\x7c\x00\x03\x45", 0x1ff2 "\x00\x03\xc9\x00\x03\x45", 0x1ff3 "\x00\x03\xce\x00\x03\x45", 0x1ff4 "\x00\x03\xc9\x00\x03\x42", 0x1ff6 "\x00\x1f\xf6\x00\x03\x45", 0x1ff7 "\x00\x03\x9f\x00\x03\x00", 0x1ff8 "\x00\x03\xa9\x00\x03\x00", 0x1ffa "\x00\x03\xa9\x00\x03\x45", 0x1ffc "\x00\x21\x90\x00\x03\x38", 0x219a "\x00\x21\x92\x00\x03\x38", 0x219b "\x00\x21\x94\x00\x03\x38", 0x21ae "\x00\x21\xd0\x00\x03\x38", 0x21cd "\x00\x21\xd4\x00\x03\x38", 0x21ce "\x00\x21\xd2\x00\x03\x38", 0x21cf "\x00\x22\x03\x00\x03\x38", 0x2204 "\x00\x22\x08\x00\x03\x38", 0x2209 "\x00\x22\x0b\x00\x03\x38", 0x220c "\x00\x22\x23\x00\x03\x38", 0x2224 "\x00\x22\x25\x00\x03\x38", 0x2226 "\x00\x22\x3c\x00\x03\x38", 0x2241 "\x00\x22\x43\x00\x03\x38", 0x2244 "\x00\x22\x45\x00\x03\x38", 0x2247 "\x00\x22\x48\x00\x03\x38", 0x2249 "\x00\x00\x3d\x00\x03\x38", 0x2260 "\x00\x22\x61\x00\x03\x38", 0x2262 "\x00\x22\x4d\x00\x03\x38", 0x226d "\x00\x00\x3c\x00\x03\x38", 0x226e "\x00\x00\x3e\x00\x03\x38", 0x226f "\x00\x22\x64\x00\x03\x38", 0x2270 "\x00\x22\x65\x00\x03\x38", 0x2271 "\x00\x22\x72\x00\x03\x38", 0x2274 "\x00\x22\x73\x00\x03\x38", 0x2275 "\x00\x22\x76\x00\x03\x38", 0x2278 "\x00\x22\x77\x00\x03\x38", 0x2279 "\x00\x22\x7a\x00\x03\x38", 0x2280 "\x00\x22\x7b\x00\x03\x38", 0x2281 "\x00\x22\x82\x00\x03\x38", 0x2284 "\x00\x22\x83\x00\x03\x38", 0x2285 "\x00\x22\x86\x00\x03\x38", 0x2288 "\x00\x22\x87\x00\x03\x38", 0x2289 "\x00\x22\xa2\x00\x03\x38", 0x22ac "\x00\x22\xa8\x00\x03\x38", 0x22ad "\x00\x22\xa9\x00\x03\x38", 0x22ae "\x00\x22\xab\x00\x03\x38", 0x22af "\x00\x22\x7c\x00\x03\x38", 0x22e0 "\x00\x22\x7d\x00\x03\x38", 0x22e1 "\x00\x22\x91\x00\x03\x38", 0x22e2 "\x00\x22\x92\x00\x03\x38", 0x22e3 "\x00\x22\xb2\x00\x03\x38", 0x22ea "\x00\x22\xb3\x00\x03\x38", 0x22eb "\x00\x22\xb4\x00\x03\x38", 0x22ec "\x00\x22\xb5\x00\x03\x38", 0x22ed "\x00\x30\x4b\x00\x30\x99", 0x304c "\x00\x30\x4d\x00\x30\x99", 0x304e "\x00\x30\x4f\x00\x30\x99", 0x3050 "\x00\x30\x51\x00\x30\x99", 0x3052 "\x00\x30\x53\x00\x30\x99", 0x3054 "\x00\x30\x55\x00\x30\x99", 0x3056 "\x00\x30\x57\x00\x30\x99", 0x3058 "\x00\x30\x59\x00\x30\x99", 0x305a "\x00\x30\x5b\x00\x30\x99", 0x305c "\x00\x30\x5d\x00\x30\x99", 0x305e "\x00\x30\x5f\x00\x30\x99", 0x3060 "\x00\x30\x61\x00\x30\x99", 0x3062 "\x00\x30\x64\x00\x30\x99", 0x3065 "\x00\x30\x66\x00\x30\x99", 0x3067 "\x00\x30\x68\x00\x30\x99", 0x3069 "\x00\x30\x6f\x00\x30\x99", 0x3070 "\x00\x30\x6f\x00\x30\x9a", 0x3071 "\x00\x30\x72\x00\x30\x99", 0x3073 "\x00\x30\x72\x00\x30\x9a", 0x3074 "\x00\x30\x75\x00\x30\x99", 0x3076 "\x00\x30\x75\x00\x30\x9a", 0x3077 "\x00\x30\x78\x00\x30\x99", 0x3079 "\x00\x30\x78\x00\x30\x9a", 0x307a "\x00\x30\x7b\x00\x30\x99", 0x307c "\x00\x30\x7b\x00\x30\x9a", 0x307d "\x00\x30\x46\x00\x30\x99", 0x3094 "\x00\x30\x9d\x00\x30\x99", 0x309e "\x00\x30\xab\x00\x30\x99", 0x30ac "\x00\x30\xad\x00\x30\x99", 0x30ae "\x00\x30\xaf\x00\x30\x99", 0x30b0 "\x00\x30\xb1\x00\x30\x99", 0x30b2 "\x00\x30\xb3\x00\x30\x99", 0x30b4 "\x00\x30\xb5\x00\x30\x99", 0x30b6 "\x00\x30\xb7\x00\x30\x99", 0x30b8 "\x00\x30\xb9\x00\x30\x99", 0x30ba "\x00\x30\xbb\x00\x30\x99", 0x30bc "\x00\x30\xbd\x00\x30\x99", 0x30be "\x00\x30\xbf\x00\x30\x99", 0x30c0 "\x00\x30\xc1\x00\x30\x99", 0x30c2 "\x00\x30\xc4\x00\x30\x99", 0x30c5 "\x00\x30\xc6\x00\x30\x99", 0x30c7 "\x00\x30\xc8\x00\x30\x99", 0x30c9 "\x00\x30\xcf\x00\x30\x99", 0x30d0 "\x00\x30\xcf\x00\x30\x9a", 0x30d1 "\x00\x30\xd2\x00\x30\x99", 0x30d3 "\x00\x30\xd2\x00\x30\x9a", 0x30d4 "\x00\x30\xd5\x00\x30\x99", 0x30d6 "\x00\x30\xd5\x00\x30\x9a", 0x30d7 "\x00\x30\xd8\x00\x30\x99", 0x30d9 "\x00\x30\xd8\x00\x30\x9a", 0x30da "\x00\x30\xdb\x00\x30\x99", 0x30dc "\x00\x30\xdb\x00\x30\x9a", 0x30dd "\x00\x30\xa6\x00\x30\x99", 0x30f4 "\x00\x30\xef\x00\x30\x99", 0x30f7 "\x00\x30\xf0\x00\x30\x99", 0x30f8 "\x00\x30\xf1\x00\x30\x99", 0x30f9 "\x00\x30\xf2\x00\x30\x99", 0x30fa "\x00\x30\xfd\x00\x30\x99", 0x30fe "\x01\x10\x99\x01\x10\xba", 0x1109a "\x01\x10\x9b\x01\x10\xba", 0x1109c "\x01\x10\xa5\x01\x10\xba", 0x110ab "\x01\x11\x31\x01\x11\x27", 0x1112e "\x01\x11\x32\x01\x11\x27", 0x1112f "\x01\x13\x47\x01\x13\x3e", 0x1134b "\x01\x13\x47\x01\x13\x57", 0x1134c "\x01\x14\xb9\x01\x14\xba", 0x114bb "\x01\x14\xb9\x01\x14\xb0", 0x114bc "\x01\x14\xb9\x01\x14\xbd", 0x114be "\x01\x15\xb8\x01\x15\xaf", 0x115ba "\x01\x15\xb9\x01\x15\xaf", 0x115bb ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/composition.c���������������������������������������������������0000664�0000000�0000000�00000005746�14110572173�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical composition of Unicode characters. Copyright (C) 2002, 2006, 2009, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <string.h> struct composition_rule { char codes[6]; unsigned int combined; }; #include "composition-table.h" ucs4_t uc_composition (ucs4_t uc1, ucs4_t uc2) { if (uc1 < 0x12000 && uc2 < 0x12000) { if (uc2 >= 0x1161 && uc2 < 0x1161 + 21 && uc1 >= 0x1100 && uc1 < 0x1100 + 19) { /* Hangul: Combine single letter L and single letter V to form two-letter syllable LV. */ return 0xAC00 + ((uc1 - 0x1100) * 21 + (uc2 - 0x1161)) * 28; } else if (uc2 > 0x11A7 && uc2 < 0x11A7 + 28 && uc1 >= 0xAC00 && uc1 < 0xD7A4 && ((uc1 - 0xAC00) % 28) == 0) { /* Hangul: Combine two-letter syllable LV with single-letter T to form three-letter syllable LVT. */ return uc1 + (uc2 - 0x11A7); } else { #if 0 unsigned int uc = MUL1 * uc1 * MUL2 * uc2; unsigned int index1 = uc >> composition_header_0; if (index1 < composition_header_1) { int lookup1 = u_composition.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> composition_header_2) & composition_header_3; int lookup2 = u_composition.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & composition_header_4); unsigned int lookup3 = u_composition.level3[lookup2 + index3]; if ((lookup3 >> 16) == uc2) return lookup3 & ((1U << 16) - 1); } } } #else char codes[6]; const struct composition_rule *rule; codes[0] = (uc1 >> 16) & 0xff; codes[1] = (uc1 >> 8) & 0xff; codes[2] = uc1 & 0xff; codes[3] = (uc2 >> 16) & 0xff; codes[4] = (uc2 >> 8) & 0xff; codes[5] = uc2 & 0xff; rule = gl_uninorm_compose_lookup (codes, 6); if (rule != NULL) return rule->combined; #endif } } return 0; } ��������������������������gnulib-20210822~d383792/lib/uninorm/decompose-internal.c��������������������������������������������0000664�0000000�0000000�00000002226�14110572173�0022472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "decompose-internal.h" #define ELEMENT struct ucs4_with_ccc #define COMPARE(a,b) ((a)->ccc - (b)->ccc) #define STATIC #define STATIC_FROMTO static #define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto #define merge_sort_inplace gl_uninorm_decompose_merge_sort_inplace #include "array-mergesort.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decompose-internal.h��������������������������������������������0000664�0000000�0000000�00000002545�14110572173�0022503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <stddef.h> #include "unitypes.h" /* Variant of uc_decomposition that does not produce the 'tag'. */ extern int uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition); /* A Unicode character together with its canonical combining class. */ struct ucs4_with_ccc { ucs4_t code; int ccc; /* range 0..255 */ }; /* Stable-sort an array of 'struct ucs4_with_ccc'. */ extern void gl_uninorm_decompose_merge_sort_inplace (struct ucs4_with_ccc *src, size_t n, struct ucs4_with_ccc *tmp); �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposing-form.c����������������������������������������������0000664�0000000�0000000�00000002570�14110572173�0022154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposing variant of a normalization form. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" uninorm_t uninorm_decomposing_form (uninorm_t nf) { return nf->decomposing_variant; } ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposition-table.c�������������������������������������������0000664�0000000�0000000�00000001657�14110572173�0022652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm/decomposition-table.h" #include "uninorm/decomposition-table2.h" ���������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposition-table.h�������������������������������������������0000664�0000000�0000000�00000003474�14110572173�0022656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2001-2003, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include "unitypes.h" /* The decomposition table is made of two parts: - A table containing the actual arrays of decomposed equivalents. (This table is separate because the maximum length of a decomposition is 18, much larger than the average length 1.497 of a decomposition). - A 3-level table of indices into this array. */ #include "decomposition-table1.h" static inline unsigned short decomp_index (ucs4_t uc) { unsigned int index1 = uc >> decomp_header_0; if (index1 < decomp_header_1) { int lookup1 = gl_uninorm_decomp_index_table.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3; int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = uc & decomp_header_4; return gl_uninorm_decomp_index_table.level3[lookup2 + index3]; } } } return (unsigned short)(-1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposition-table1.h������������������������������������������0000664�0000000�0000000�00000002371�14110572173�0022732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decomposition of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ extern const unsigned char gl_uninorm_decomp_chars_table[]; #define decomp_header_0 10 #define decomp_header_1 191 #define decomp_header_2 5 #define decomp_header_3 31 #define decomp_header_4 31 typedef struct { int level1[191]; int level2[23 << 5]; unsigned short level3[277 << 5]; } decomp_index_table_t; extern const decomp_index_table_t gl_uninorm_decomp_index_table; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposition-table2.h������������������������������������������0000664�0000000�0000000�00000705360�14110572173�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decomposition of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 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/>. */ const unsigned char gl_uninorm_decomp_chars_table[] = { 0x08, 0x00, 0x20, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x08, 0x20, 0x00, 0x61, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x04, 0x20, 0x00, 0x32, 0x20, 0x00, 0x33, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, 0x40, 0x03, 0xBC, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x27, 0x20, 0x00, 0x31, 0x20, 0x00, 0x6F, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x32, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, 0x80, 0x00, 0x41, 0x00, 0x03, 0x00, 0x80, 0x00, 0x41, 0x00, 0x03, 0x01, 0x80, 0x00, 0x41, 0x00, 0x03, 0x02, 0x80, 0x00, 0x41, 0x00, 0x03, 0x03, 0x80, 0x00, 0x41, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x43, 0x00, 0x03, 0x27, 0x80, 0x00, 0x45, 0x00, 0x03, 0x00, 0x80, 0x00, 0x45, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x02, 0x80, 0x00, 0x45, 0x00, 0x03, 0x08, 0x80, 0x00, 0x49, 0x00, 0x03, 0x00, 0x80, 0x00, 0x49, 0x00, 0x03, 0x01, 0x80, 0x00, 0x49, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x08, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x03, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x03, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x55, 0x00, 0x03, 0x00, 0x80, 0x00, 0x55, 0x00, 0x03, 0x01, 0x80, 0x00, 0x55, 0x00, 0x03, 0x02, 0x80, 0x00, 0x55, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x01, 0x80, 0x00, 0x61, 0x00, 0x03, 0x00, 0x80, 0x00, 0x61, 0x00, 0x03, 0x01, 0x80, 0x00, 0x61, 0x00, 0x03, 0x02, 0x80, 0x00, 0x61, 0x00, 0x03, 0x03, 0x80, 0x00, 0x61, 0x00, 0x03, 0x08, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x63, 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x00, 0x80, 0x00, 0x65, 0x00, 0x03, 0x01, 0x80, 0x00, 0x65, 0x00, 0x03, 0x02, 0x80, 0x00, 0x65, 0x00, 0x03, 0x08, 0x80, 0x00, 0x69, 0x00, 0x03, 0x00, 0x80, 0x00, 0x69, 0x00, 0x03, 0x01, 0x80, 0x00, 0x69, 0x00, 0x03, 0x02, 0x80, 0x00, 0x69, 0x00, 0x03, 0x08, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x03, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x03, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x75, 0x00, 0x03, 0x00, 0x80, 0x00, 0x75, 0x00, 0x03, 0x01, 0x80, 0x00, 0x75, 0x00, 0x03, 0x02, 0x80, 0x00, 0x75, 0x00, 0x03, 0x08, 0x80, 0x00, 0x79, 0x00, 0x03, 0x01, 0x80, 0x00, 0x79, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x04, 0x80, 0x00, 0x61, 0x00, 0x03, 0x04, 0x80, 0x00, 0x41, 0x00, 0x03, 0x06, 0x80, 0x00, 0x61, 0x00, 0x03, 0x06, 0x80, 0x00, 0x41, 0x00, 0x03, 0x28, 0x80, 0x00, 0x61, 0x00, 0x03, 0x28, 0x80, 0x00, 0x43, 0x00, 0x03, 0x01, 0x80, 0x00, 0x63, 0x00, 0x03, 0x01, 0x80, 0x00, 0x43, 0x00, 0x03, 0x02, 0x80, 0x00, 0x63, 0x00, 0x03, 0x02, 0x80, 0x00, 0x43, 0x00, 0x03, 0x07, 0x80, 0x00, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x43, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x63, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x44, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x64, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x45, 0x00, 0x03, 0x04, 0x80, 0x00, 0x65, 0x00, 0x03, 0x04, 0x80, 0x00, 0x45, 0x00, 0x03, 0x06, 0x80, 0x00, 0x65, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x07, 0x80, 0x00, 0x65, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, 0x00, 0x03, 0x28, 0x80, 0x00, 0x65, 0x00, 0x03, 0x28, 0x80, 0x00, 0x45, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x65, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x47, 0x00, 0x03, 0x02, 0x80, 0x00, 0x67, 0x00, 0x03, 0x02, 0x80, 0x00, 0x47, 0x00, 0x03, 0x06, 0x80, 0x00, 0x67, 0x00, 0x03, 0x06, 0x80, 0x00, 0x47, 0x00, 0x03, 0x07, 0x80, 0x00, 0x67, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x27, 0x80, 0x00, 0x67, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x02, 0x80, 0x00, 0x68, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x03, 0x80, 0x00, 0x69, 0x00, 0x03, 0x03, 0x80, 0x00, 0x49, 0x00, 0x03, 0x04, 0x80, 0x00, 0x69, 0x00, 0x03, 0x04, 0x80, 0x00, 0x49, 0x00, 0x03, 0x06, 0x80, 0x00, 0x69, 0x00, 0x03, 0x06, 0x80, 0x00, 0x49, 0x00, 0x03, 0x28, 0x80, 0x00, 0x69, 0x00, 0x03, 0x28, 0x80, 0x00, 0x49, 0x00, 0x03, 0x07, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x6A, 0x80, 0x00, 0x4A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x27, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x27, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x0C, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0xB7, 0xC0, 0x00, 0x6C, 0x00, 0x00, 0xB7, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x27, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x0C, 0xC0, 0x02, 0xBC, 0x00, 0x00, 0x6E, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x06, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x06, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x52, 0x00, 0x03, 0x01, 0x80, 0x00, 0x72, 0x00, 0x03, 0x01, 0x80, 0x00, 0x52, 0x00, 0x03, 0x27, 0x80, 0x00, 0x72, 0x00, 0x03, 0x27, 0x80, 0x00, 0x52, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x72, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x53, 0x00, 0x03, 0x01, 0x80, 0x00, 0x73, 0x00, 0x03, 0x01, 0x80, 0x00, 0x53, 0x00, 0x03, 0x02, 0x80, 0x00, 0x73, 0x00, 0x03, 0x02, 0x80, 0x00, 0x53, 0x00, 0x03, 0x27, 0x80, 0x00, 0x73, 0x00, 0x03, 0x27, 0x80, 0x00, 0x53, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x73, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x54, 0x00, 0x03, 0x27, 0x80, 0x00, 0x74, 0x00, 0x03, 0x27, 0x80, 0x00, 0x54, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x74, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, 0x00, 0x03, 0x03, 0x80, 0x00, 0x75, 0x00, 0x03, 0x03, 0x80, 0x00, 0x55, 0x00, 0x03, 0x04, 0x80, 0x00, 0x75, 0x00, 0x03, 0x04, 0x80, 0x00, 0x55, 0x00, 0x03, 0x06, 0x80, 0x00, 0x75, 0x00, 0x03, 0x06, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x28, 0x80, 0x00, 0x75, 0x00, 0x03, 0x28, 0x80, 0x00, 0x57, 0x00, 0x03, 0x02, 0x80, 0x00, 0x77, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x02, 0x80, 0x00, 0x79, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x08, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x01, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x01, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x07, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x07, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x0C, 0x40, 0x00, 0x73, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x75, 0x00, 0x03, 0x1B, 0xC0, 0x00, 0x44, 0x00, 0x01, 0x7D, 0xC0, 0x00, 0x44, 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x64, 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6C, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6E, 0x00, 0x00, 0x6A, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x49, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, 0x00, 0x03, 0x04, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x04, 0x80, 0x00, 0xDC, 0x00, 0x03, 0x01, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x01, 0x80, 0x00, 0xDC, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, 0x00, 0x03, 0x00, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC4, 0x00, 0x03, 0x04, 0x80, 0x00, 0xE4, 0x00, 0x03, 0x04, 0x80, 0x02, 0x26, 0x00, 0x03, 0x04, 0x80, 0x02, 0x27, 0x00, 0x03, 0x04, 0x80, 0x00, 0xC6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x04, 0x80, 0x00, 0x47, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x67, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x28, 0x80, 0x01, 0xEA, 0x00, 0x03, 0x04, 0x80, 0x01, 0xEB, 0x00, 0x03, 0x04, 0x80, 0x01, 0xB7, 0x00, 0x03, 0x0C, 0x80, 0x02, 0x92, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6A, 0x00, 0x03, 0x0C, 0xC0, 0x00, 0x44, 0x00, 0x00, 0x5A, 0xC0, 0x00, 0x44, 0x00, 0x00, 0x7A, 0xC0, 0x00, 0x64, 0x00, 0x00, 0x7A, 0x80, 0x00, 0x47, 0x00, 0x03, 0x01, 0x80, 0x00, 0x67, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x00, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xE5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC6, 0x00, 0x03, 0x01, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD8, 0x00, 0x03, 0x01, 0x80, 0x00, 0xF8, 0x00, 0x03, 0x01, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x41, 0x00, 0x03, 0x11, 0x80, 0x00, 0x61, 0x00, 0x03, 0x11, 0x80, 0x00, 0x45, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x65, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x45, 0x00, 0x03, 0x11, 0x80, 0x00, 0x65, 0x00, 0x03, 0x11, 0x80, 0x00, 0x49, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x49, 0x00, 0x03, 0x11, 0x80, 0x00, 0x69, 0x00, 0x03, 0x11, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x11, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x11, 0x80, 0x00, 0x52, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x72, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x52, 0x00, 0x03, 0x11, 0x80, 0x00, 0x72, 0x00, 0x03, 0x11, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x55, 0x00, 0x03, 0x11, 0x80, 0x00, 0x75, 0x00, 0x03, 0x11, 0x80, 0x00, 0x53, 0x00, 0x03, 0x26, 0x80, 0x00, 0x73, 0x00, 0x03, 0x26, 0x80, 0x00, 0x54, 0x00, 0x03, 0x26, 0x80, 0x00, 0x74, 0x00, 0x03, 0x26, 0x80, 0x00, 0x48, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x68, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x41, 0x00, 0x03, 0x07, 0x80, 0x00, 0x61, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x27, 0x80, 0x00, 0xD6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xF6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x04, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x07, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x07, 0x80, 0x02, 0x2E, 0x00, 0x03, 0x04, 0x80, 0x02, 0x2F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x59, 0x00, 0x03, 0x04, 0x80, 0x00, 0x79, 0x00, 0x03, 0x04, 0x20, 0x00, 0x68, 0x20, 0x02, 0x66, 0x20, 0x00, 0x6A, 0x20, 0x00, 0x72, 0x20, 0x02, 0x79, 0x20, 0x02, 0x7B, 0x20, 0x02, 0x81, 0x20, 0x00, 0x77, 0x20, 0x00, 0x79, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x06, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x07, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x28, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0B, 0x20, 0x02, 0x63, 0x20, 0x00, 0x6C, 0x20, 0x00, 0x73, 0x20, 0x00, 0x78, 0x20, 0x02, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x13, 0x80, 0x03, 0x08, 0x00, 0x03, 0x01, 0x00, 0x02, 0xB9, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x45, 0x00, 0x00, 0x3B, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x01, 0x80, 0x03, 0x91, 0x00, 0x03, 0x01, 0x00, 0x00, 0xB7, 0x80, 0x03, 0x95, 0x00, 0x03, 0x01, 0x80, 0x03, 0x97, 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x01, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x01, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, 0x00, 0x03, 0x08, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x08, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x01, 0x80, 0x03, 0xCB, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x08, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x08, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x01, 0x40, 0x03, 0xB2, 0x40, 0x03, 0xB8, 0x40, 0x03, 0xA5, 0x80, 0x03, 0xD2, 0x00, 0x03, 0x01, 0x80, 0x03, 0xD2, 0x00, 0x03, 0x08, 0x40, 0x03, 0xC6, 0x40, 0x03, 0xC0, 0x40, 0x03, 0xBA, 0x40, 0x03, 0xC1, 0x40, 0x03, 0xC2, 0x40, 0x03, 0x98, 0x40, 0x03, 0xB5, 0x40, 0x03, 0xA3, 0x80, 0x04, 0x15, 0x00, 0x03, 0x00, 0x80, 0x04, 0x15, 0x00, 0x03, 0x08, 0x80, 0x04, 0x13, 0x00, 0x03, 0x01, 0x80, 0x04, 0x06, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1A, 0x00, 0x03, 0x01, 0x80, 0x04, 0x18, 0x00, 0x03, 0x00, 0x80, 0x04, 0x23, 0x00, 0x03, 0x06, 0x80, 0x04, 0x18, 0x00, 0x03, 0x06, 0x80, 0x04, 0x38, 0x00, 0x03, 0x06, 0x80, 0x04, 0x35, 0x00, 0x03, 0x00, 0x80, 0x04, 0x35, 0x00, 0x03, 0x08, 0x80, 0x04, 0x33, 0x00, 0x03, 0x01, 0x80, 0x04, 0x56, 0x00, 0x03, 0x08, 0x80, 0x04, 0x3A, 0x00, 0x03, 0x01, 0x80, 0x04, 0x38, 0x00, 0x03, 0x00, 0x80, 0x04, 0x43, 0x00, 0x03, 0x06, 0x80, 0x04, 0x74, 0x00, 0x03, 0x0F, 0x80, 0x04, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x04, 0x16, 0x00, 0x03, 0x06, 0x80, 0x04, 0x36, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x06, 0x80, 0x04, 0x30, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x08, 0x80, 0x04, 0x30, 0x00, 0x03, 0x08, 0x80, 0x04, 0x15, 0x00, 0x03, 0x06, 0x80, 0x04, 0x35, 0x00, 0x03, 0x06, 0x80, 0x04, 0xD8, 0x00, 0x03, 0x08, 0x80, 0x04, 0xD9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x16, 0x00, 0x03, 0x08, 0x80, 0x04, 0x36, 0x00, 0x03, 0x08, 0x80, 0x04, 0x17, 0x00, 0x03, 0x08, 0x80, 0x04, 0x37, 0x00, 0x03, 0x08, 0x80, 0x04, 0x18, 0x00, 0x03, 0x04, 0x80, 0x04, 0x38, 0x00, 0x03, 0x04, 0x80, 0x04, 0x18, 0x00, 0x03, 0x08, 0x80, 0x04, 0x38, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1E, 0x00, 0x03, 0x08, 0x80, 0x04, 0x3E, 0x00, 0x03, 0x08, 0x80, 0x04, 0xE8, 0x00, 0x03, 0x08, 0x80, 0x04, 0xE9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2D, 0x00, 0x03, 0x08, 0x80, 0x04, 0x4D, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x04, 0x80, 0x04, 0x43, 0x00, 0x03, 0x04, 0x80, 0x04, 0x23, 0x00, 0x03, 0x08, 0x80, 0x04, 0x43, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x0B, 0x80, 0x04, 0x43, 0x00, 0x03, 0x0B, 0x80, 0x04, 0x27, 0x00, 0x03, 0x08, 0x80, 0x04, 0x47, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2B, 0x00, 0x03, 0x08, 0x80, 0x04, 0x4B, 0x00, 0x03, 0x08, 0xC0, 0x05, 0x65, 0x00, 0x05, 0x82, 0x80, 0x06, 0x27, 0x00, 0x06, 0x53, 0x80, 0x06, 0x27, 0x00, 0x06, 0x54, 0x80, 0x06, 0x48, 0x00, 0x06, 0x54, 0x80, 0x06, 0x27, 0x00, 0x06, 0x55, 0x80, 0x06, 0x4A, 0x00, 0x06, 0x54, 0xC0, 0x06, 0x27, 0x00, 0x06, 0x74, 0xC0, 0x06, 0x48, 0x00, 0x06, 0x74, 0xC0, 0x06, 0xC7, 0x00, 0x06, 0x74, 0xC0, 0x06, 0x4A, 0x00, 0x06, 0x74, 0x80, 0x06, 0xD5, 0x00, 0x06, 0x54, 0x80, 0x06, 0xC1, 0x00, 0x06, 0x54, 0x80, 0x06, 0xD2, 0x00, 0x06, 0x54, 0x80, 0x09, 0x28, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x30, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x33, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x15, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x16, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x17, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x1C, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x21, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x22, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x2B, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x2F, 0x00, 0x09, 0x3C, 0x80, 0x09, 0xC7, 0x00, 0x09, 0xBE, 0x80, 0x09, 0xC7, 0x00, 0x09, 0xD7, 0x80, 0x09, 0xA1, 0x00, 0x09, 0xBC, 0x80, 0x09, 0xA2, 0x00, 0x09, 0xBC, 0x80, 0x09, 0xAF, 0x00, 0x09, 0xBC, 0x80, 0x0A, 0x32, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x38, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x16, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x17, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x1C, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x2B, 0x00, 0x0A, 0x3C, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x56, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x3E, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x57, 0x80, 0x0B, 0x21, 0x00, 0x0B, 0x3C, 0x80, 0x0B, 0x22, 0x00, 0x0B, 0x3C, 0x80, 0x0B, 0x92, 0x00, 0x0B, 0xD7, 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xBE, 0x80, 0x0B, 0xC7, 0x00, 0x0B, 0xBE, 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xD7, 0x80, 0x0C, 0x46, 0x00, 0x0C, 0x56, 0x80, 0x0C, 0xBF, 0x00, 0x0C, 0xD5, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD5, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD6, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xC2, 0x80, 0x0C, 0xCA, 0x00, 0x0C, 0xD5, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x3E, 0x80, 0x0D, 0x47, 0x00, 0x0D, 0x3E, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x57, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCF, 0x80, 0x0D, 0xDC, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xDF, 0xC0, 0x0E, 0x4D, 0x00, 0x0E, 0x32, 0xC0, 0x0E, 0xCD, 0x00, 0x0E, 0xB2, 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0x99, 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0xA1, 0x08, 0x0F, 0x0B, 0x80, 0x0F, 0x42, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x4C, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x51, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x56, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x5B, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x40, 0x00, 0x0F, 0xB5, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x72, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x74, 0x80, 0x0F, 0xB2, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB2, 0x00, 0x0F, 0x81, 0x80, 0x0F, 0xB3, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB3, 0x00, 0x0F, 0x81, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x80, 0x80, 0x0F, 0x92, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x9C, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA1, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA6, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xAB, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x90, 0x00, 0x0F, 0xB5, 0x80, 0x10, 0x25, 0x00, 0x10, 0x2E, 0x20, 0x10, 0xDC, 0x80, 0x1B, 0x05, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x07, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x09, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x0B, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x0D, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x11, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3A, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3C, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3E, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3F, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x42, 0x00, 0x1B, 0x35, 0x20, 0x00, 0x41, 0x20, 0x00, 0xC6, 0x20, 0x00, 0x42, 0x20, 0x00, 0x44, 0x20, 0x00, 0x45, 0x20, 0x01, 0x8E, 0x20, 0x00, 0x47, 0x20, 0x00, 0x48, 0x20, 0x00, 0x49, 0x20, 0x00, 0x4A, 0x20, 0x00, 0x4B, 0x20, 0x00, 0x4C, 0x20, 0x00, 0x4D, 0x20, 0x00, 0x4E, 0x20, 0x00, 0x4F, 0x20, 0x02, 0x22, 0x20, 0x00, 0x50, 0x20, 0x00, 0x52, 0x20, 0x00, 0x54, 0x20, 0x00, 0x55, 0x20, 0x00, 0x57, 0x20, 0x00, 0x61, 0x20, 0x02, 0x50, 0x20, 0x02, 0x51, 0x20, 0x1D, 0x02, 0x20, 0x00, 0x62, 0x20, 0x00, 0x64, 0x20, 0x00, 0x65, 0x20, 0x02, 0x59, 0x20, 0x02, 0x5B, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x67, 0x20, 0x00, 0x6B, 0x20, 0x00, 0x6D, 0x20, 0x01, 0x4B, 0x20, 0x00, 0x6F, 0x20, 0x02, 0x54, 0x20, 0x1D, 0x16, 0x20, 0x1D, 0x17, 0x20, 0x00, 0x70, 0x20, 0x00, 0x74, 0x20, 0x00, 0x75, 0x20, 0x1D, 0x1D, 0x20, 0x02, 0x6F, 0x20, 0x00, 0x76, 0x20, 0x1D, 0x25, 0x20, 0x03, 0xB2, 0x20, 0x03, 0xB3, 0x20, 0x03, 0xB4, 0x20, 0x03, 0xC6, 0x20, 0x03, 0xC7, 0x24, 0x00, 0x69, 0x24, 0x00, 0x72, 0x24, 0x00, 0x75, 0x24, 0x00, 0x76, 0x24, 0x03, 0xB2, 0x24, 0x03, 0xB3, 0x24, 0x03, 0xC1, 0x24, 0x03, 0xC6, 0x24, 0x03, 0xC7, 0x20, 0x04, 0x3D, 0x20, 0x02, 0x52, 0x20, 0x00, 0x63, 0x20, 0x02, 0x55, 0x20, 0x00, 0xF0, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x66, 0x20, 0x02, 0x5F, 0x20, 0x02, 0x61, 0x20, 0x02, 0x65, 0x20, 0x02, 0x68, 0x20, 0x02, 0x69, 0x20, 0x02, 0x6A, 0x20, 0x1D, 0x7B, 0x20, 0x02, 0x9D, 0x20, 0x02, 0x6D, 0x20, 0x1D, 0x85, 0x20, 0x02, 0x9F, 0x20, 0x02, 0x71, 0x20, 0x02, 0x70, 0x20, 0x02, 0x72, 0x20, 0x02, 0x73, 0x20, 0x02, 0x74, 0x20, 0x02, 0x75, 0x20, 0x02, 0x78, 0x20, 0x02, 0x82, 0x20, 0x02, 0x83, 0x20, 0x01, 0xAB, 0x20, 0x02, 0x89, 0x20, 0x02, 0x8A, 0x20, 0x1D, 0x1C, 0x20, 0x02, 0x8B, 0x20, 0x02, 0x8C, 0x20, 0x00, 0x7A, 0x20, 0x02, 0x90, 0x20, 0x02, 0x91, 0x20, 0x02, 0x92, 0x20, 0x03, 0xB8, 0x80, 0x00, 0x41, 0x00, 0x03, 0x25, 0x80, 0x00, 0x61, 0x00, 0x03, 0x25, 0x80, 0x00, 0x42, 0x00, 0x03, 0x07, 0x80, 0x00, 0x62, 0x00, 0x03, 0x07, 0x80, 0x00, 0x42, 0x00, 0x03, 0x23, 0x80, 0x00, 0x62, 0x00, 0x03, 0x23, 0x80, 0x00, 0x42, 0x00, 0x03, 0x31, 0x80, 0x00, 0x62, 0x00, 0x03, 0x31, 0x80, 0x00, 0xC7, 0x00, 0x03, 0x01, 0x80, 0x00, 0xE7, 0x00, 0x03, 0x01, 0x80, 0x00, 0x44, 0x00, 0x03, 0x07, 0x80, 0x00, 0x64, 0x00, 0x03, 0x07, 0x80, 0x00, 0x44, 0x00, 0x03, 0x23, 0x80, 0x00, 0x64, 0x00, 0x03, 0x23, 0x80, 0x00, 0x44, 0x00, 0x03, 0x31, 0x80, 0x00, 0x64, 0x00, 0x03, 0x31, 0x80, 0x00, 0x44, 0x00, 0x03, 0x27, 0x80, 0x00, 0x64, 0x00, 0x03, 0x27, 0x80, 0x00, 0x44, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x64, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x12, 0x00, 0x03, 0x00, 0x80, 0x01, 0x13, 0x00, 0x03, 0x00, 0x80, 0x01, 0x12, 0x00, 0x03, 0x01, 0x80, 0x01, 0x13, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x65, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x45, 0x00, 0x03, 0x30, 0x80, 0x00, 0x65, 0x00, 0x03, 0x30, 0x80, 0x02, 0x28, 0x00, 0x03, 0x06, 0x80, 0x02, 0x29, 0x00, 0x03, 0x06, 0x80, 0x00, 0x46, 0x00, 0x03, 0x07, 0x80, 0x00, 0x66, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x04, 0x80, 0x00, 0x67, 0x00, 0x03, 0x04, 0x80, 0x00, 0x48, 0x00, 0x03, 0x07, 0x80, 0x00, 0x68, 0x00, 0x03, 0x07, 0x80, 0x00, 0x48, 0x00, 0x03, 0x23, 0x80, 0x00, 0x68, 0x00, 0x03, 0x23, 0x80, 0x00, 0x48, 0x00, 0x03, 0x08, 0x80, 0x00, 0x68, 0x00, 0x03, 0x08, 0x80, 0x00, 0x48, 0x00, 0x03, 0x27, 0x80, 0x00, 0x68, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x2E, 0x80, 0x00, 0x68, 0x00, 0x03, 0x2E, 0x80, 0x00, 0x49, 0x00, 0x03, 0x30, 0x80, 0x00, 0x69, 0x00, 0x03, 0x30, 0x80, 0x00, 0xCF, 0x00, 0x03, 0x01, 0x80, 0x00, 0xEF, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x23, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x31, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x23, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x36, 0x00, 0x03, 0x04, 0x80, 0x1E, 0x37, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x31, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x07, 0x80, 0x00, 0x6D, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x23, 0x80, 0x00, 0x6D, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x07, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x23, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x31, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x2D, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x08, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x08, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x00, 0x80, 0x01, 0x4D, 0x00, 0x03, 0x00, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x01, 0x80, 0x01, 0x4D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x01, 0x80, 0x00, 0x70, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x07, 0x80, 0x00, 0x70, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x07, 0x80, 0x00, 0x72, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x23, 0x80, 0x00, 0x72, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x5A, 0x00, 0x03, 0x04, 0x80, 0x1E, 0x5B, 0x00, 0x03, 0x04, 0x80, 0x00, 0x52, 0x00, 0x03, 0x31, 0x80, 0x00, 0x72, 0x00, 0x03, 0x31, 0x80, 0x00, 0x53, 0x00, 0x03, 0x07, 0x80, 0x00, 0x73, 0x00, 0x03, 0x07, 0x80, 0x00, 0x53, 0x00, 0x03, 0x23, 0x80, 0x00, 0x73, 0x00, 0x03, 0x23, 0x80, 0x01, 0x5A, 0x00, 0x03, 0x07, 0x80, 0x01, 0x5B, 0x00, 0x03, 0x07, 0x80, 0x01, 0x60, 0x00, 0x03, 0x07, 0x80, 0x01, 0x61, 0x00, 0x03, 0x07, 0x80, 0x1E, 0x62, 0x00, 0x03, 0x07, 0x80, 0x1E, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x07, 0x80, 0x00, 0x74, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x23, 0x80, 0x00, 0x74, 0x00, 0x03, 0x23, 0x80, 0x00, 0x54, 0x00, 0x03, 0x31, 0x80, 0x00, 0x74, 0x00, 0x03, 0x31, 0x80, 0x00, 0x54, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x74, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x55, 0x00, 0x03, 0x24, 0x80, 0x00, 0x75, 0x00, 0x03, 0x24, 0x80, 0x00, 0x55, 0x00, 0x03, 0x30, 0x80, 0x00, 0x75, 0x00, 0x03, 0x30, 0x80, 0x00, 0x55, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x75, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x68, 0x00, 0x03, 0x01, 0x80, 0x01, 0x69, 0x00, 0x03, 0x01, 0x80, 0x01, 0x6A, 0x00, 0x03, 0x08, 0x80, 0x01, 0x6B, 0x00, 0x03, 0x08, 0x80, 0x00, 0x56, 0x00, 0x03, 0x03, 0x80, 0x00, 0x76, 0x00, 0x03, 0x03, 0x80, 0x00, 0x56, 0x00, 0x03, 0x23, 0x80, 0x00, 0x76, 0x00, 0x03, 0x23, 0x80, 0x00, 0x57, 0x00, 0x03, 0x00, 0x80, 0x00, 0x77, 0x00, 0x03, 0x00, 0x80, 0x00, 0x57, 0x00, 0x03, 0x01, 0x80, 0x00, 0x77, 0x00, 0x03, 0x01, 0x80, 0x00, 0x57, 0x00, 0x03, 0x08, 0x80, 0x00, 0x77, 0x00, 0x03, 0x08, 0x80, 0x00, 0x57, 0x00, 0x03, 0x07, 0x80, 0x00, 0x77, 0x00, 0x03, 0x07, 0x80, 0x00, 0x57, 0x00, 0x03, 0x23, 0x80, 0x00, 0x77, 0x00, 0x03, 0x23, 0x80, 0x00, 0x58, 0x00, 0x03, 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0x07, 0x80, 0x00, 0x58, 0x00, 0x03, 0x08, 0x80, 0x00, 0x78, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x07, 0x80, 0x00, 0x79, 0x00, 0x03, 0x07, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x23, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x23, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x31, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x31, 0x80, 0x00, 0x68, 0x00, 0x03, 0x31, 0x80, 0x00, 0x74, 0x00, 0x03, 0x08, 0x80, 0x00, 0x77, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x79, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x61, 0x00, 0x02, 0xBE, 0x80, 0x01, 0x7F, 0x00, 0x03, 0x07, 0x80, 0x00, 0x41, 0x00, 0x03, 0x23, 0x80, 0x00, 0x61, 0x00, 0x03, 0x23, 0x80, 0x00, 0x41, 0x00, 0x03, 0x09, 0x80, 0x00, 0x61, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x01, 0x80, 0x00, 0xE2, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x00, 0x80, 0x00, 0xE2, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x09, 0x80, 0x00, 0xE2, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x03, 0x80, 0x00, 0xE2, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x02, 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x02, 0x80, 0x01, 0x02, 0x00, 0x03, 0x01, 0x80, 0x01, 0x03, 0x00, 0x03, 0x01, 0x80, 0x01, 0x02, 0x00, 0x03, 0x00, 0x80, 0x01, 0x03, 0x00, 0x03, 0x00, 0x80, 0x01, 0x02, 0x00, 0x03, 0x09, 0x80, 0x01, 0x03, 0x00, 0x03, 0x09, 0x80, 0x01, 0x02, 0x00, 0x03, 0x03, 0x80, 0x01, 0x03, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x06, 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x23, 0x80, 0x00, 0x65, 0x00, 0x03, 0x23, 0x80, 0x00, 0x45, 0x00, 0x03, 0x09, 0x80, 0x00, 0x65, 0x00, 0x03, 0x09, 0x80, 0x00, 0x45, 0x00, 0x03, 0x03, 0x80, 0x00, 0x65, 0x00, 0x03, 0x03, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x01, 0x80, 0x00, 0xEA, 0x00, 0x03, 0x01, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x00, 0x80, 0x00, 0xEA, 0x00, 0x03, 0x00, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x09, 0x80, 0x00, 0xEA, 0x00, 0x03, 0x09, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x03, 0x80, 0x00, 0xEA, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xB8, 0x00, 0x03, 0x02, 0x80, 0x1E, 0xB9, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x09, 0x80, 0x00, 0x69, 0x00, 0x03, 0x09, 0x80, 0x00, 0x49, 0x00, 0x03, 0x23, 0x80, 0x00, 0x69, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x23, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x09, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x01, 0x80, 0x00, 0xF4, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x00, 0x80, 0x00, 0xF4, 0x00, 0x03, 0x00, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x09, 0x80, 0x00, 0xF4, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x03, 0x80, 0x00, 0xF4, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xCC, 0x00, 0x03, 0x02, 0x80, 0x1E, 0xCD, 0x00, 0x03, 0x02, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x01, 0x80, 0x01, 0xA1, 0x00, 0x03, 0x01, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x00, 0x80, 0x01, 0xA1, 0x00, 0x03, 0x00, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x09, 0x80, 0x01, 0xA1, 0x00, 0x03, 0x09, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x03, 0x80, 0x01, 0xA1, 0x00, 0x03, 0x03, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x23, 0x80, 0x01, 0xA1, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x23, 0x80, 0x00, 0x75, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x09, 0x80, 0x00, 0x75, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x01, 0x80, 0x01, 0xB0, 0x00, 0x03, 0x01, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x00, 0x80, 0x01, 0xB0, 0x00, 0x03, 0x00, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x09, 0x80, 0x01, 0xB0, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x03, 0x80, 0x01, 0xB0, 0x00, 0x03, 0x03, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x23, 0x80, 0x01, 0xB0, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x00, 0x80, 0x00, 0x79, 0x00, 0x03, 0x00, 0x80, 0x00, 0x59, 0x00, 0x03, 0x23, 0x80, 0x00, 0x79, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x09, 0x80, 0x00, 0x79, 0x00, 0x03, 0x09, 0x80, 0x00, 0x59, 0x00, 0x03, 0x03, 0x80, 0x00, 0x79, 0x00, 0x03, 0x03, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x13, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x42, 0x80, 0x03, 0x91, 0x00, 0x03, 0x13, 0x80, 0x03, 0x91, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x13, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x11, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x11, 0x00, 0x03, 0x01, 0x80, 0x03, 0x95, 0x00, 0x03, 0x13, 0x80, 0x03, 0x95, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x19, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x19, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x13, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x42, 0x80, 0x03, 0x97, 0x00, 0x03, 0x13, 0x80, 0x03, 0x97, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x13, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x31, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x31, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x31, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x13, 0x80, 0x03, 0x99, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x39, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x39, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x39, 0x00, 0x03, 0x42, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x13, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x41, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x41, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x13, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x49, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x49, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x13, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x51, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x51, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x51, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x13, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x13, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAC, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAD, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAE, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAF, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCC, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCD, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCE, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x02, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x03, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x04, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x05, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x06, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x07, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0A, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0C, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0E, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x22, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x23, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x24, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x25, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x26, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x27, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2A, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2C, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2E, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x62, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x63, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x64, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x65, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x66, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x67, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6A, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6C, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6E, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6F, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x06, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x04, 0x80, 0x1F, 0x70, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAC, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xB6, 0x00, 0x03, 0x45, 0x80, 0x03, 0x91, 0x00, 0x03, 0x06, 0x80, 0x03, 0x91, 0x00, 0x03, 0x04, 0x80, 0x03, 0x91, 0x00, 0x03, 0x00, 0x00, 0x03, 0x86, 0x80, 0x03, 0x91, 0x00, 0x03, 0x45, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, 0x00, 0x03, 0xB9, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x42, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x74, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAE, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xC6, 0x00, 0x03, 0x45, 0x80, 0x03, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x88, 0x80, 0x03, 0x97, 0x00, 0x03, 0x00, 0x00, 0x03, 0x89, 0x80, 0x03, 0x97, 0x00, 0x03, 0x45, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x01, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x06, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x00, 0x00, 0x03, 0x90, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x42, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x06, 0x80, 0x03, 0x99, 0x00, 0x03, 0x04, 0x80, 0x03, 0x99, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8A, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x01, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x06, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCB, 0x00, 0x03, 0x00, 0x00, 0x03, 0xB0, 0x80, 0x03, 0xC1, 0x00, 0x03, 0x13, 0x80, 0x03, 0xC1, 0x00, 0x03, 0x14, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x42, 0x80, 0x03, 0xCB, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x06, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8E, 0x80, 0x03, 0xA1, 0x00, 0x03, 0x14, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x60, 0x80, 0x1F, 0x7C, 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x45, 0x80, 0x03, 0xCE, 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xF6, 0x00, 0x03, 0x45, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8C, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8F, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x45, 0x00, 0x00, 0xB4, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x14, 0x00, 0x20, 0x02, 0x00, 0x20, 0x03, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x20, 0x10, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x33, 0x40, 0x00, 0x2E, 0xC0, 0x00, 0x2E, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x2E, 0x80, 0x00, 0x2E, 0x00, 0x00, 0x2E, 0x08, 0x00, 0x20, 0xC0, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x32, 0x80, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x35, 0x00, 0x20, 0x35, 0xC0, 0x20, 0x35, 0x80, 0x20, 0x35, 0x00, 0x20, 0x35, 0xC0, 0x00, 0x21, 0x00, 0x00, 0x21, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x05, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x21, 0xC0, 0x00, 0x21, 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x32, 0x80, 0x20, 0x32, 0x80, 0x20, 0x32, 0x00, 0x20, 0x32, 0x40, 0x00, 0x20, 0x20, 0x00, 0x30, 0x20, 0x00, 0x69, 0x20, 0x00, 0x34, 0x20, 0x00, 0x35, 0x20, 0x00, 0x36, 0x20, 0x00, 0x37, 0x20, 0x00, 0x38, 0x20, 0x00, 0x39, 0x20, 0x00, 0x2B, 0x20, 0x22, 0x12, 0x20, 0x00, 0x3D, 0x20, 0x00, 0x28, 0x20, 0x00, 0x29, 0x20, 0x00, 0x6E, 0x24, 0x00, 0x30, 0x24, 0x00, 0x31, 0x24, 0x00, 0x32, 0x24, 0x00, 0x33, 0x24, 0x00, 0x34, 0x24, 0x00, 0x35, 0x24, 0x00, 0x36, 0x24, 0x00, 0x37, 0x24, 0x00, 0x38, 0x24, 0x00, 0x39, 0x24, 0x00, 0x2B, 0x24, 0x22, 0x12, 0x24, 0x00, 0x3D, 0x24, 0x00, 0x28, 0x24, 0x00, 0x29, 0x24, 0x00, 0x61, 0x24, 0x00, 0x65, 0x24, 0x00, 0x6F, 0x24, 0x00, 0x78, 0x24, 0x02, 0x59, 0x24, 0x00, 0x68, 0x24, 0x00, 0x6B, 0x24, 0x00, 0x6C, 0x24, 0x00, 0x6D, 0x24, 0x00, 0x6E, 0x24, 0x00, 0x70, 0x24, 0x00, 0x73, 0x24, 0x00, 0x74, 0xC0, 0x00, 0x52, 0x00, 0x00, 0x73, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x63, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x73, 0x04, 0x00, 0x43, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x43, 0xC0, 0x00, 0x63, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x6F, 0xC0, 0x00, 0x63, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x75, 0x40, 0x01, 0x90, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x46, 0x04, 0x00, 0x67, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, 0x04, 0x00, 0x68, 0x04, 0x01, 0x27, 0x04, 0x00, 0x49, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x4E, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x52, 0x04, 0x00, 0x52, 0xA0, 0x00, 0x53, 0x00, 0x00, 0x4D, 0xC0, 0x00, 0x54, 0x80, 0x00, 0x45, 0x00, 0x00, 0x4C, 0xA0, 0x00, 0x54, 0x00, 0x00, 0x4D, 0x04, 0x00, 0x5A, 0x00, 0x03, 0xA9, 0x04, 0x00, 0x5A, 0x00, 0x00, 0x4B, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x65, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x6F, 0x40, 0x05, 0xD0, 0x40, 0x05, 0xD1, 0x40, 0x05, 0xD2, 0x40, 0x05, 0xD3, 0x04, 0x00, 0x69, 0xC0, 0x00, 0x46, 0x80, 0x00, 0x41, 0x00, 0x00, 0x58, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xB3, 0x04, 0x03, 0x93, 0x04, 0x03, 0xA0, 0x04, 0x22, 0x11, 0x04, 0x00, 0x44, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x37, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x39, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x80, 0x00, 0x31, 0x00, 0x00, 0x30, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x34, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x37, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x31, 0x00, 0x20, 0x44, 0x40, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x56, 0x40, 0x00, 0x56, 0xC0, 0x00, 0x56, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x58, 0x40, 0x00, 0x58, 0xC0, 0x00, 0x58, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x58, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0x40, 0x00, 0x4C, 0x40, 0x00, 0x43, 0x40, 0x00, 0x44, 0x40, 0x00, 0x4D, 0x40, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x76, 0x40, 0x00, 0x76, 0xC0, 0x00, 0x76, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x78, 0x40, 0x00, 0x78, 0xC0, 0x00, 0x78, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x78, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0x40, 0x00, 0x6C, 0x40, 0x00, 0x63, 0x40, 0x00, 0x64, 0x40, 0x00, 0x6D, 0xBC, 0x00, 0x30, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0x80, 0x21, 0x90, 0x00, 0x03, 0x38, 0x80, 0x21, 0x92, 0x00, 0x03, 0x38, 0x80, 0x21, 0x94, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD0, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD4, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD2, 0x00, 0x03, 0x38, 0x80, 0x22, 0x03, 0x00, 0x03, 0x38, 0x80, 0x22, 0x08, 0x00, 0x03, 0x38, 0x80, 0x22, 0x0B, 0x00, 0x03, 0x38, 0x80, 0x22, 0x23, 0x00, 0x03, 0x38, 0x80, 0x22, 0x25, 0x00, 0x03, 0x38, 0xC0, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0xC0, 0x22, 0x2E, 0x80, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0x80, 0x22, 0x3C, 0x00, 0x03, 0x38, 0x80, 0x22, 0x43, 0x00, 0x03, 0x38, 0x80, 0x22, 0x45, 0x00, 0x03, 0x38, 0x80, 0x22, 0x48, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3D, 0x00, 0x03, 0x38, 0x80, 0x22, 0x61, 0x00, 0x03, 0x38, 0x80, 0x22, 0x4D, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3C, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3E, 0x00, 0x03, 0x38, 0x80, 0x22, 0x64, 0x00, 0x03, 0x38, 0x80, 0x22, 0x65, 0x00, 0x03, 0x38, 0x80, 0x22, 0x72, 0x00, 0x03, 0x38, 0x80, 0x22, 0x73, 0x00, 0x03, 0x38, 0x80, 0x22, 0x76, 0x00, 0x03, 0x38, 0x80, 0x22, 0x77, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7A, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7B, 0x00, 0x03, 0x38, 0x80, 0x22, 0x82, 0x00, 0x03, 0x38, 0x80, 0x22, 0x83, 0x00, 0x03, 0x38, 0x80, 0x22, 0x86, 0x00, 0x03, 0x38, 0x80, 0x22, 0x87, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA8, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA9, 0x00, 0x03, 0x38, 0x80, 0x22, 0xAB, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7C, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7D, 0x00, 0x03, 0x38, 0x80, 0x22, 0x91, 0x00, 0x03, 0x38, 0x80, 0x22, 0x92, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB3, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB4, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB5, 0x00, 0x03, 0x38, 0x00, 0x30, 0x08, 0x00, 0x30, 0x09, 0x1C, 0x00, 0x31, 0x1C, 0x00, 0x32, 0x1C, 0x00, 0x33, 0x1C, 0x00, 0x34, 0x1C, 0x00, 0x35, 0x1C, 0x00, 0x36, 0x1C, 0x00, 0x37, 0x1C, 0x00, 0x38, 0x1C, 0x00, 0x39, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x30, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x31, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x35, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x39, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x62, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x63, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x64, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x65, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x66, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x67, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x68, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x69, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6A, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x70, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x71, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x72, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x73, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x74, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x75, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x76, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x77, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x78, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x79, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x7A, 0x00, 0x00, 0x29, 0x1C, 0x00, 0x41, 0x1C, 0x00, 0x42, 0x1C, 0x00, 0x43, 0x1C, 0x00, 0x44, 0x1C, 0x00, 0x45, 0x1C, 0x00, 0x46, 0x1C, 0x00, 0x47, 0x1C, 0x00, 0x48, 0x1C, 0x00, 0x49, 0x1C, 0x00, 0x4A, 0x1C, 0x00, 0x4B, 0x1C, 0x00, 0x4C, 0x1C, 0x00, 0x4D, 0x1C, 0x00, 0x4E, 0x1C, 0x00, 0x4F, 0x1C, 0x00, 0x50, 0x1C, 0x00, 0x51, 0x1C, 0x00, 0x52, 0x1C, 0x00, 0x53, 0x1C, 0x00, 0x54, 0x1C, 0x00, 0x55, 0x1C, 0x00, 0x56, 0x1C, 0x00, 0x57, 0x1C, 0x00, 0x58, 0x1C, 0x00, 0x59, 0x1C, 0x00, 0x5A, 0x1C, 0x00, 0x61, 0x1C, 0x00, 0x62, 0x1C, 0x00, 0x63, 0x1C, 0x00, 0x64, 0x1C, 0x00, 0x65, 0x1C, 0x00, 0x66, 0x1C, 0x00, 0x67, 0x1C, 0x00, 0x68, 0x1C, 0x00, 0x69, 0x1C, 0x00, 0x6A, 0x1C, 0x00, 0x6B, 0x1C, 0x00, 0x6C, 0x1C, 0x00, 0x6D, 0x1C, 0x00, 0x6E, 0x1C, 0x00, 0x6F, 0x1C, 0x00, 0x70, 0x1C, 0x00, 0x71, 0x1C, 0x00, 0x72, 0x1C, 0x00, 0x73, 0x1C, 0x00, 0x74, 0x1C, 0x00, 0x75, 0x1C, 0x00, 0x76, 0x1C, 0x00, 0x77, 0x1C, 0x00, 0x78, 0x1C, 0x00, 0x79, 0x1C, 0x00, 0x7A, 0x1C, 0x00, 0x30, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, 0x80, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x00, 0x3A, 0x80, 0x00, 0x3A, 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, 0x80, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0x80, 0x2A, 0xDD, 0x00, 0x03, 0x38, 0x24, 0x00, 0x6A, 0x20, 0x00, 0x56, 0x20, 0x2D, 0x61, 0x40, 0x6B, 0xCD, 0x40, 0x9F, 0x9F, 0x40, 0x4E, 0x00, 0x40, 0x4E, 0x28, 0x40, 0x4E, 0x36, 0x40, 0x4E, 0x3F, 0x40, 0x4E, 0x59, 0x40, 0x4E, 0x85, 0x40, 0x4E, 0x8C, 0x40, 0x4E, 0xA0, 0x40, 0x4E, 0xBA, 0x40, 0x51, 0x3F, 0x40, 0x51, 0x65, 0x40, 0x51, 0x6B, 0x40, 0x51, 0x82, 0x40, 0x51, 0x96, 0x40, 0x51, 0xAB, 0x40, 0x51, 0xE0, 0x40, 0x51, 0xF5, 0x40, 0x52, 0x00, 0x40, 0x52, 0x9B, 0x40, 0x52, 0xF9, 0x40, 0x53, 0x15, 0x40, 0x53, 0x1A, 0x40, 0x53, 0x38, 0x40, 0x53, 0x41, 0x40, 0x53, 0x5C, 0x40, 0x53, 0x69, 0x40, 0x53, 0x82, 0x40, 0x53, 0xB6, 0x40, 0x53, 0xC8, 0x40, 0x53, 0xE3, 0x40, 0x56, 0xD7, 0x40, 0x57, 0x1F, 0x40, 0x58, 0xEB, 0x40, 0x59, 0x02, 0x40, 0x59, 0x0A, 0x40, 0x59, 0x15, 0x40, 0x59, 0x27, 0x40, 0x59, 0x73, 0x40, 0x5B, 0x50, 0x40, 0x5B, 0x80, 0x40, 0x5B, 0xF8, 0x40, 0x5C, 0x0F, 0x40, 0x5C, 0x22, 0x40, 0x5C, 0x38, 0x40, 0x5C, 0x6E, 0x40, 0x5C, 0x71, 0x40, 0x5D, 0xDB, 0x40, 0x5D, 0xE5, 0x40, 0x5D, 0xF1, 0x40, 0x5D, 0xFE, 0x40, 0x5E, 0x72, 0x40, 0x5E, 0x7A, 0x40, 0x5E, 0x7F, 0x40, 0x5E, 0xF4, 0x40, 0x5E, 0xFE, 0x40, 0x5F, 0x0B, 0x40, 0x5F, 0x13, 0x40, 0x5F, 0x50, 0x40, 0x5F, 0x61, 0x40, 0x5F, 0x73, 0x40, 0x5F, 0xC3, 0x40, 0x62, 0x08, 0x40, 0x62, 0x36, 0x40, 0x62, 0x4B, 0x40, 0x65, 0x2F, 0x40, 0x65, 0x34, 0x40, 0x65, 0x87, 0x40, 0x65, 0x97, 0x40, 0x65, 0xA4, 0x40, 0x65, 0xB9, 0x40, 0x65, 0xE0, 0x40, 0x65, 0xE5, 0x40, 0x66, 0xF0, 0x40, 0x67, 0x08, 0x40, 0x67, 0x28, 0x40, 0x6B, 0x20, 0x40, 0x6B, 0x62, 0x40, 0x6B, 0x79, 0x40, 0x6B, 0xB3, 0x40, 0x6B, 0xCB, 0x40, 0x6B, 0xD4, 0x40, 0x6B, 0xDB, 0x40, 0x6C, 0x0F, 0x40, 0x6C, 0x14, 0x40, 0x6C, 0x34, 0x40, 0x70, 0x6B, 0x40, 0x72, 0x2A, 0x40, 0x72, 0x36, 0x40, 0x72, 0x3B, 0x40, 0x72, 0x3F, 0x40, 0x72, 0x47, 0x40, 0x72, 0x59, 0x40, 0x72, 0x5B, 0x40, 0x72, 0xAC, 0x40, 0x73, 0x84, 0x40, 0x73, 0x89, 0x40, 0x74, 0xDC, 0x40, 0x74, 0xE6, 0x40, 0x75, 0x18, 0x40, 0x75, 0x1F, 0x40, 0x75, 0x28, 0x40, 0x75, 0x30, 0x40, 0x75, 0x8B, 0x40, 0x75, 0x92, 0x40, 0x76, 0x76, 0x40, 0x76, 0x7D, 0x40, 0x76, 0xAE, 0x40, 0x76, 0xBF, 0x40, 0x76, 0xEE, 0x40, 0x77, 0xDB, 0x40, 0x77, 0xE2, 0x40, 0x77, 0xF3, 0x40, 0x79, 0x3A, 0x40, 0x79, 0xB8, 0x40, 0x79, 0xBE, 0x40, 0x7A, 0x74, 0x40, 0x7A, 0xCB, 0x40, 0x7A, 0xF9, 0x40, 0x7C, 0x73, 0x40, 0x7C, 0xF8, 0x40, 0x7F, 0x36, 0x40, 0x7F, 0x51, 0x40, 0x7F, 0x8A, 0x40, 0x7F, 0xBD, 0x40, 0x80, 0x01, 0x40, 0x80, 0x0C, 0x40, 0x80, 0x12, 0x40, 0x80, 0x33, 0x40, 0x80, 0x7F, 0x40, 0x80, 0x89, 0x40, 0x81, 0xE3, 0x40, 0x81, 0xEA, 0x40, 0x81, 0xF3, 0x40, 0x81, 0xFC, 0x40, 0x82, 0x0C, 0x40, 0x82, 0x1B, 0x40, 0x82, 0x1F, 0x40, 0x82, 0x6E, 0x40, 0x82, 0x72, 0x40, 0x82, 0x78, 0x40, 0x86, 0x4D, 0x40, 0x86, 0x6B, 0x40, 0x88, 0x40, 0x40, 0x88, 0x4C, 0x40, 0x88, 0x63, 0x40, 0x89, 0x7E, 0x40, 0x89, 0x8B, 0x40, 0x89, 0xD2, 0x40, 0x8A, 0x00, 0x40, 0x8C, 0x37, 0x40, 0x8C, 0x46, 0x40, 0x8C, 0x55, 0x40, 0x8C, 0x78, 0x40, 0x8C, 0x9D, 0x40, 0x8D, 0x64, 0x40, 0x8D, 0x70, 0x40, 0x8D, 0xB3, 0x40, 0x8E, 0xAB, 0x40, 0x8E, 0xCA, 0x40, 0x8F, 0x9B, 0x40, 0x8F, 0xB0, 0x40, 0x8F, 0xB5, 0x40, 0x90, 0x91, 0x40, 0x91, 0x49, 0x40, 0x91, 0xC6, 0x40, 0x91, 0xCC, 0x40, 0x91, 0xD1, 0x40, 0x95, 0x77, 0x40, 0x95, 0x80, 0x40, 0x96, 0x1C, 0x40, 0x96, 0xB6, 0x40, 0x96, 0xB9, 0x40, 0x96, 0xE8, 0x40, 0x97, 0x51, 0x40, 0x97, 0x5E, 0x40, 0x97, 0x62, 0x40, 0x97, 0x69, 0x40, 0x97, 0xCB, 0x40, 0x97, 0xED, 0x40, 0x97, 0xF3, 0x40, 0x98, 0x01, 0x40, 0x98, 0xA8, 0x40, 0x98, 0xDB, 0x40, 0x98, 0xDF, 0x40, 0x99, 0x96, 0x40, 0x99, 0x99, 0x40, 0x99, 0xAC, 0x40, 0x9A, 0xA8, 0x40, 0x9A, 0xD8, 0x40, 0x9A, 0xDF, 0x40, 0x9B, 0x25, 0x40, 0x9B, 0x2F, 0x40, 0x9B, 0x32, 0x40, 0x9B, 0x3C, 0x40, 0x9B, 0x5A, 0x40, 0x9C, 0xE5, 0x40, 0x9E, 0x75, 0x40, 0x9E, 0x7F, 0x40, 0x9E, 0xA5, 0x40, 0x9E, 0xBB, 0x40, 0x9E, 0xC3, 0x40, 0x9E, 0xCD, 0x40, 0x9E, 0xD1, 0x40, 0x9E, 0xF9, 0x40, 0x9E, 0xFD, 0x40, 0x9F, 0x0E, 0x40, 0x9F, 0x13, 0x40, 0x9F, 0x20, 0x40, 0x9F, 0x3B, 0x40, 0x9F, 0x4A, 0x40, 0x9F, 0x52, 0x40, 0x9F, 0x8D, 0x40, 0x9F, 0x9C, 0x40, 0x9F, 0xA0, 0x2C, 0x00, 0x20, 0x40, 0x30, 0x12, 0x40, 0x53, 0x41, 0x40, 0x53, 0x44, 0x40, 0x53, 0x45, 0x80, 0x30, 0x4B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x4D, 0x00, 0x30, 0x99, 0x80, 0x30, 0x4F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x51, 0x00, 0x30, 0x99, 0x80, 0x30, 0x53, 0x00, 0x30, 0x99, 0x80, 0x30, 0x55, 0x00, 0x30, 0x99, 0x80, 0x30, 0x57, 0x00, 0x30, 0x99, 0x80, 0x30, 0x59, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5D, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x61, 0x00, 0x30, 0x99, 0x80, 0x30, 0x64, 0x00, 0x30, 0x99, 0x80, 0x30, 0x66, 0x00, 0x30, 0x99, 0x80, 0x30, 0x68, 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x72, 0x00, 0x30, 0x99, 0x80, 0x30, 0x72, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x75, 0x00, 0x30, 0x99, 0x80, 0x30, 0x75, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x78, 0x00, 0x30, 0x99, 0x80, 0x30, 0x78, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x7B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x7B, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x46, 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x9D, 0x00, 0x30, 0x99, 0xA8, 0x30, 0x88, 0x00, 0x30, 0x8A, 0x80, 0x30, 0xAB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xAD, 0x00, 0x30, 0x99, 0x80, 0x30, 0xAF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB3, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB5, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB7, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB9, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBD, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC4, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC6, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC8, 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD2, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD2, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD5, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD5, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD8, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD8, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xDB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xDB, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xA6, 0x00, 0x30, 0x99, 0x80, 0x30, 0xEF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF0, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF2, 0x00, 0x30, 0x99, 0x80, 0x30, 0xFD, 0x00, 0x30, 0x99, 0xA8, 0x30, 0xB3, 0x00, 0x30, 0xC8, 0x40, 0x11, 0x00, 0x40, 0x11, 0x01, 0x40, 0x11, 0xAA, 0x40, 0x11, 0x02, 0x40, 0x11, 0xAC, 0x40, 0x11, 0xAD, 0x40, 0x11, 0x03, 0x40, 0x11, 0x04, 0x40, 0x11, 0x05, 0x40, 0x11, 0xB0, 0x40, 0x11, 0xB1, 0x40, 0x11, 0xB2, 0x40, 0x11, 0xB3, 0x40, 0x11, 0xB4, 0x40, 0x11, 0xB5, 0x40, 0x11, 0x1A, 0x40, 0x11, 0x06, 0x40, 0x11, 0x07, 0x40, 0x11, 0x08, 0x40, 0x11, 0x21, 0x40, 0x11, 0x09, 0x40, 0x11, 0x0A, 0x40, 0x11, 0x0B, 0x40, 0x11, 0x0C, 0x40, 0x11, 0x0D, 0x40, 0x11, 0x0E, 0x40, 0x11, 0x0F, 0x40, 0x11, 0x10, 0x40, 0x11, 0x11, 0x40, 0x11, 0x12, 0x40, 0x11, 0x61, 0x40, 0x11, 0x62, 0x40, 0x11, 0x63, 0x40, 0x11, 0x64, 0x40, 0x11, 0x65, 0x40, 0x11, 0x66, 0x40, 0x11, 0x67, 0x40, 0x11, 0x68, 0x40, 0x11, 0x69, 0x40, 0x11, 0x6A, 0x40, 0x11, 0x6B, 0x40, 0x11, 0x6C, 0x40, 0x11, 0x6D, 0x40, 0x11, 0x6E, 0x40, 0x11, 0x6F, 0x40, 0x11, 0x70, 0x40, 0x11, 0x71, 0x40, 0x11, 0x72, 0x40, 0x11, 0x73, 0x40, 0x11, 0x74, 0x40, 0x11, 0x75, 0x40, 0x11, 0x60, 0x40, 0x11, 0x14, 0x40, 0x11, 0x15, 0x40, 0x11, 0xC7, 0x40, 0x11, 0xC8, 0x40, 0x11, 0xCC, 0x40, 0x11, 0xCE, 0x40, 0x11, 0xD3, 0x40, 0x11, 0xD7, 0x40, 0x11, 0xD9, 0x40, 0x11, 0x1C, 0x40, 0x11, 0xDD, 0x40, 0x11, 0xDF, 0x40, 0x11, 0x1D, 0x40, 0x11, 0x1E, 0x40, 0x11, 0x20, 0x40, 0x11, 0x22, 0x40, 0x11, 0x23, 0x40, 0x11, 0x27, 0x40, 0x11, 0x29, 0x40, 0x11, 0x2B, 0x40, 0x11, 0x2C, 0x40, 0x11, 0x2D, 0x40, 0x11, 0x2E, 0x40, 0x11, 0x2F, 0x40, 0x11, 0x32, 0x40, 0x11, 0x36, 0x40, 0x11, 0x40, 0x40, 0x11, 0x47, 0x40, 0x11, 0x4C, 0x40, 0x11, 0xF1, 0x40, 0x11, 0xF2, 0x40, 0x11, 0x57, 0x40, 0x11, 0x58, 0x40, 0x11, 0x59, 0x40, 0x11, 0x84, 0x40, 0x11, 0x85, 0x40, 0x11, 0x88, 0x40, 0x11, 0x91, 0x40, 0x11, 0x92, 0x40, 0x11, 0x94, 0x40, 0x11, 0x9E, 0x40, 0x11, 0xA1, 0x20, 0x4E, 0x00, 0x20, 0x4E, 0x8C, 0x20, 0x4E, 0x09, 0x20, 0x56, 0xDB, 0x20, 0x4E, 0x0A, 0x20, 0x4E, 0x2D, 0x20, 0x4E, 0x0B, 0x20, 0x75, 0x32, 0x20, 0x4E, 0x59, 0x20, 0x4E, 0x19, 0x20, 0x4E, 0x01, 0x20, 0x59, 0x29, 0x20, 0x57, 0x30, 0x20, 0x4E, 0xBA, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x65, 0x80, 0x11, 0xAB, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, 0x80, 0x11, 0x12, 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x8C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x09, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x56, 0xDB, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x94, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x03, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x53, 0x41, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x08, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x70, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x6C, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x28, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x91, 0xD1, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x57, 0x1F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x65, 0xE5, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x68, 0x2A, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x09, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x79, 0x3E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x54, 0x0D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x72, 0x79, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xA1, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x79, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x52, 0xB4, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0xE3, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x54, 0x7C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x5B, 0x66, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x76, 0xE3, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x01, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xC7, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x53, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x79, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x11, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x81, 0xEA, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x81, 0xF3, 0x00, 0x00, 0x29, 0x1C, 0x55, 0x4F, 0x1C, 0x5E, 0x7C, 0x1C, 0x65, 0x87, 0x1C, 0x7B, 0x8F, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x54, 0x00, 0x00, 0x45, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x35, 0x1C, 0x11, 0x00, 0x1C, 0x11, 0x02, 0x1C, 0x11, 0x03, 0x1C, 0x11, 0x05, 0x1C, 0x11, 0x06, 0x1C, 0x11, 0x07, 0x1C, 0x11, 0x09, 0x1C, 0x11, 0x0B, 0x1C, 0x11, 0x0C, 0x1C, 0x11, 0x0E, 0x1C, 0x11, 0x0F, 0x1C, 0x11, 0x10, 0x1C, 0x11, 0x11, 0x1C, 0x11, 0x12, 0x9C, 0x11, 0x00, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x02, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x03, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x05, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x06, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x07, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x09, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0B, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0C, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0F, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x10, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x11, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x12, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, 0x80, 0x11, 0x61, 0x80, 0x11, 0xB7, 0x80, 0x11, 0x00, 0x00, 0x11, 0x69, 0x9C, 0x11, 0x0C, 0x80, 0x11, 0x6E, 0x80, 0x11, 0x0B, 0x00, 0x11, 0x74, 0x9C, 0x11, 0x0B, 0x00, 0x11, 0x6E, 0x1C, 0x4E, 0x00, 0x1C, 0x4E, 0x8C, 0x1C, 0x4E, 0x09, 0x1C, 0x56, 0xDB, 0x1C, 0x4E, 0x94, 0x1C, 0x51, 0x6D, 0x1C, 0x4E, 0x03, 0x1C, 0x51, 0x6B, 0x1C, 0x4E, 0x5D, 0x1C, 0x53, 0x41, 0x1C, 0x67, 0x08, 0x1C, 0x70, 0x6B, 0x1C, 0x6C, 0x34, 0x1C, 0x67, 0x28, 0x1C, 0x91, 0xD1, 0x1C, 0x57, 0x1F, 0x1C, 0x65, 0xE5, 0x1C, 0x68, 0x2A, 0x1C, 0x67, 0x09, 0x1C, 0x79, 0x3E, 0x1C, 0x54, 0x0D, 0x1C, 0x72, 0x79, 0x1C, 0x8C, 0xA1, 0x1C, 0x79, 0x5D, 0x1C, 0x52, 0xB4, 0x1C, 0x79, 0xD8, 0x1C, 0x75, 0x37, 0x1C, 0x59, 0x73, 0x1C, 0x90, 0x69, 0x1C, 0x51, 0x2A, 0x1C, 0x53, 0x70, 0x1C, 0x6C, 0xE8, 0x1C, 0x98, 0x05, 0x1C, 0x4F, 0x11, 0x1C, 0x51, 0x99, 0x1C, 0x6B, 0x63, 0x1C, 0x4E, 0x0A, 0x1C, 0x4E, 0x2D, 0x1C, 0x4E, 0x0B, 0x1C, 0x5D, 0xE6, 0x1C, 0x53, 0xF3, 0x1C, 0x53, 0x3B, 0x1C, 0x5B, 0x97, 0x1C, 0x5B, 0x66, 0x1C, 0x76, 0xE3, 0x1C, 0x4F, 0x01, 0x1C, 0x8C, 0xC7, 0x1C, 0x53, 0x54, 0x1C, 0x59, 0x1C, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x35, 0x00, 0x00, 0x30, 0xC0, 0x00, 0x31, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x32, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x33, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x34, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x35, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x36, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x37, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x38, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x39, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x67, 0x08, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x65, 0x80, 0x00, 0x72, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x65, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4C, 0x80, 0x00, 0x54, 0x00, 0x00, 0x44, 0x1C, 0x30, 0xA2, 0x1C, 0x30, 0xA4, 0x1C, 0x30, 0xA6, 0x1C, 0x30, 0xA8, 0x1C, 0x30, 0xAA, 0x1C, 0x30, 0xAB, 0x1C, 0x30, 0xAD, 0x1C, 0x30, 0xAF, 0x1C, 0x30, 0xB1, 0x1C, 0x30, 0xB3, 0x1C, 0x30, 0xB5, 0x1C, 0x30, 0xB7, 0x1C, 0x30, 0xB9, 0x1C, 0x30, 0xBB, 0x1C, 0x30, 0xBD, 0x1C, 0x30, 0xBF, 0x1C, 0x30, 0xC1, 0x1C, 0x30, 0xC4, 0x1C, 0x30, 0xC6, 0x1C, 0x30, 0xC8, 0x1C, 0x30, 0xCA, 0x1C, 0x30, 0xCB, 0x1C, 0x30, 0xCC, 0x1C, 0x30, 0xCD, 0x1C, 0x30, 0xCE, 0x1C, 0x30, 0xCF, 0x1C, 0x30, 0xD2, 0x1C, 0x30, 0xD5, 0x1C, 0x30, 0xD8, 0x1C, 0x30, 0xDB, 0x1C, 0x30, 0xDE, 0x1C, 0x30, 0xDF, 0x1C, 0x30, 0xE0, 0x1C, 0x30, 0xE1, 0x1C, 0x30, 0xE2, 0x1C, 0x30, 0xE4, 0x1C, 0x30, 0xE6, 0x1C, 0x30, 0xE8, 0x1C, 0x30, 0xE9, 0x1C, 0x30, 0xEA, 0x1C, 0x30, 0xEB, 0x1C, 0x30, 0xEC, 0x1C, 0x30, 0xED, 0x1C, 0x30, 0xEF, 0x1C, 0x30, 0xF0, 0x1C, 0x30, 0xF1, 0x1C, 0x30, 0xF2, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xD5, 0x00, 0x30, 0xA1, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xDA, 0x00, 0x30, 0xA2, 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xCB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xA6, 0x80, 0x30, 0xA9, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xB9, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xAB, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xED, 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xDE, 0xB8, 0x30, 0xAE, 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xCB, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xE5, 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xC0, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xE1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xEF, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xE0, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xBC, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xCD, 0xB8, 0x30, 0xB1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xCA, 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xDD, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB7, 0x80, 0x30, 0xEA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xC0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xC7, 0x00, 0x30, 0xB7, 0xB8, 0x30, 0xC9, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xCA, 0x00, 0x30, 0xCE, 0xB8, 0x30, 0xCE, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xCF, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xEC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xA2, 0x80, 0x30, 0xB9, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x00, 0x30, 0xB3, 0xB8, 0x30, 0xD3, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA1, 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA3, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD6, 0x80, 0x30, 0xC3, 0x80, 0x30, 0xB7, 0x80, 0x30, 0xA7, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xBF, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDA, 0x00, 0x30, 0xBD, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xCB, 0x00, 0x30, 0xD2, 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB8, 0xB8, 0x30, 0xD9, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xBF, 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDC, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDB, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xCF, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xAF, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xB7, 0x80, 0x30, 0xE7, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xEA, 0x80, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE1, 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xAC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE6, 0x80, 0x30, 0xA2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEA, 0x80, 0x30, 0xC3, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEA, 0x00, 0x30, 0xE9, 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xD4, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xD6, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xEC, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC8, 0x80, 0x30, 0xB2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEF, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xC0, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x35, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x37, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x38, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x39, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xB8, 0x00, 0x68, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x41, 0x00, 0x00, 0x55, 0xB8, 0x00, 0x62, 0x80, 0x00, 0x61, 0x00, 0x00, 0x72, 0xB8, 0x00, 0x6F, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x63, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x49, 0x00, 0x00, 0x55, 0xB8, 0x5E, 0x73, 0x00, 0x62, 0x10, 0xB8, 0x66, 0x2D, 0x00, 0x54, 0x8C, 0xB8, 0x59, 0x27, 0x00, 0x6B, 0x63, 0xB8, 0x66, 0x0E, 0x00, 0x6C, 0xBB, 0xB8, 0x68, 0x2A, 0x80, 0x5F, 0x0F, 0x80, 0x4F, 0x1A, 0x00, 0x79, 0x3E, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x41, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x63, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x46, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x47, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x54, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x03, 0xBC, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6D, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x64, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6B, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x66, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x6D, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x47, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x73, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x56, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x57, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x4D, 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x61, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x42, 0x00, 0x00, 0x71, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x63, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x43, 0x80, 0x22, 0x15, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x43, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, 0x00, 0x00, 0x79, 0xB8, 0x00, 0x68, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x50, 0xB8, 0x00, 0x69, 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4B, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x74, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x6C, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x78, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x62, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x69, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x48, 0xB8, 0x00, 0x70, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x52, 0xB8, 0x00, 0x73, 0x00, 0x00, 0x72, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x76, 0xB8, 0x00, 0x57, 0x00, 0x00, 0x62, 0xB8, 0x00, 0x56, 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x41, 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xC0, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xB8, 0x00, 0x67, 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0x20, 0x04, 0x4A, 0x20, 0x04, 0x4C, 0x20, 0xA7, 0x6F, 0x20, 0x01, 0x26, 0x20, 0x01, 0x53, 0x20, 0xA7, 0x27, 0x20, 0xAB, 0x37, 0x20, 0x02, 0x6B, 0x20, 0xAB, 0x52, 0x00, 0x8C, 0x48, 0x00, 0x66, 0xF4, 0x00, 0x8E, 0xCA, 0x00, 0x8C, 0xC8, 0x00, 0x6E, 0xD1, 0x00, 0x4E, 0x32, 0x00, 0x53, 0xE5, 0x00, 0x9F, 0x9C, 0x00, 0x9F, 0x9C, 0x00, 0x59, 0x51, 0x00, 0x91, 0xD1, 0x00, 0x55, 0x87, 0x00, 0x59, 0x48, 0x00, 0x61, 0xF6, 0x00, 0x76, 0x69, 0x00, 0x7F, 0x85, 0x00, 0x86, 0x3F, 0x00, 0x87, 0xBA, 0x00, 0x88, 0xF8, 0x00, 0x90, 0x8F, 0x00, 0x6A, 0x02, 0x00, 0x6D, 0x1B, 0x00, 0x70, 0xD9, 0x00, 0x73, 0xDE, 0x00, 0x84, 0x3D, 0x00, 0x91, 0x6A, 0x00, 0x99, 0xF1, 0x00, 0x4E, 0x82, 0x00, 0x53, 0x75, 0x00, 0x6B, 0x04, 0x00, 0x72, 0x1B, 0x00, 0x86, 0x2D, 0x00, 0x9E, 0x1E, 0x00, 0x5D, 0x50, 0x00, 0x6F, 0xEB, 0x00, 0x85, 0xCD, 0x00, 0x89, 0x64, 0x00, 0x62, 0xC9, 0x00, 0x81, 0xD8, 0x00, 0x88, 0x1F, 0x00, 0x5E, 0xCA, 0x00, 0x67, 0x17, 0x00, 0x6D, 0x6A, 0x00, 0x72, 0xFC, 0x00, 0x90, 0xCE, 0x00, 0x4F, 0x86, 0x00, 0x51, 0xB7, 0x00, 0x52, 0xDE, 0x00, 0x64, 0xC4, 0x00, 0x6A, 0xD3, 0x00, 0x72, 0x10, 0x00, 0x76, 0xE7, 0x00, 0x80, 0x01, 0x00, 0x86, 0x06, 0x00, 0x86, 0x5C, 0x00, 0x8D, 0xEF, 0x00, 0x97, 0x32, 0x00, 0x9B, 0x6F, 0x00, 0x9D, 0xFA, 0x00, 0x78, 0x8C, 0x00, 0x79, 0x7F, 0x00, 0x7D, 0xA0, 0x00, 0x83, 0xC9, 0x00, 0x93, 0x04, 0x00, 0x9E, 0x7F, 0x00, 0x8A, 0xD6, 0x00, 0x58, 0xDF, 0x00, 0x5F, 0x04, 0x00, 0x7C, 0x60, 0x00, 0x80, 0x7E, 0x00, 0x72, 0x62, 0x00, 0x78, 0xCA, 0x00, 0x8C, 0xC2, 0x00, 0x96, 0xF7, 0x00, 0x58, 0xD8, 0x00, 0x5C, 0x62, 0x00, 0x6A, 0x13, 0x00, 0x6D, 0xDA, 0x00, 0x6F, 0x0F, 0x00, 0x7D, 0x2F, 0x00, 0x7E, 0x37, 0x00, 0x96, 0x4B, 0x00, 0x52, 0xD2, 0x00, 0x80, 0x8B, 0x00, 0x51, 0xDC, 0x00, 0x51, 0xCC, 0x00, 0x7A, 0x1C, 0x00, 0x7D, 0xBE, 0x00, 0x83, 0xF1, 0x00, 0x96, 0x75, 0x00, 0x8B, 0x80, 0x00, 0x62, 0xCF, 0x00, 0x6A, 0x02, 0x00, 0x8A, 0xFE, 0x00, 0x4E, 0x39, 0x00, 0x5B, 0xE7, 0x00, 0x60, 0x12, 0x00, 0x73, 0x87, 0x00, 0x75, 0x70, 0x00, 0x53, 0x17, 0x00, 0x78, 0xFB, 0x00, 0x4F, 0xBF, 0x00, 0x5F, 0xA9, 0x00, 0x4E, 0x0D, 0x00, 0x6C, 0xCC, 0x00, 0x65, 0x78, 0x00, 0x7D, 0x22, 0x00, 0x53, 0xC3, 0x00, 0x58, 0x5E, 0x00, 0x77, 0x01, 0x00, 0x84, 0x49, 0x00, 0x8A, 0xAA, 0x00, 0x6B, 0xBA, 0x00, 0x8F, 0xB0, 0x00, 0x6C, 0x88, 0x00, 0x62, 0xFE, 0x00, 0x82, 0xE5, 0x00, 0x63, 0xA0, 0x00, 0x75, 0x65, 0x00, 0x4E, 0xAE, 0x00, 0x51, 0x69, 0x00, 0x51, 0xC9, 0x00, 0x68, 0x81, 0x00, 0x7C, 0xE7, 0x00, 0x82, 0x6F, 0x00, 0x8A, 0xD2, 0x00, 0x91, 0xCF, 0x00, 0x52, 0xF5, 0x00, 0x54, 0x42, 0x00, 0x59, 0x73, 0x00, 0x5E, 0xEC, 0x00, 0x65, 0xC5, 0x00, 0x6F, 0xFE, 0x00, 0x79, 0x2A, 0x00, 0x95, 0xAD, 0x00, 0x9A, 0x6A, 0x00, 0x9E, 0x97, 0x00, 0x9E, 0xCE, 0x00, 0x52, 0x9B, 0x00, 0x66, 0xC6, 0x00, 0x6B, 0x77, 0x00, 0x8F, 0x62, 0x00, 0x5E, 0x74, 0x00, 0x61, 0x90, 0x00, 0x62, 0x00, 0x00, 0x64, 0x9A, 0x00, 0x6F, 0x23, 0x00, 0x71, 0x49, 0x00, 0x74, 0x89, 0x00, 0x79, 0xCA, 0x00, 0x7D, 0xF4, 0x00, 0x80, 0x6F, 0x00, 0x8F, 0x26, 0x00, 0x84, 0xEE, 0x00, 0x90, 0x23, 0x00, 0x93, 0x4A, 0x00, 0x52, 0x17, 0x00, 0x52, 0xA3, 0x00, 0x54, 0xBD, 0x00, 0x70, 0xC8, 0x00, 0x88, 0xC2, 0x00, 0x8A, 0xAA, 0x00, 0x5E, 0xC9, 0x00, 0x5F, 0xF5, 0x00, 0x63, 0x7B, 0x00, 0x6B, 0xAE, 0x00, 0x7C, 0x3E, 0x00, 0x73, 0x75, 0x00, 0x4E, 0xE4, 0x00, 0x56, 0xF9, 0x00, 0x5B, 0xE7, 0x00, 0x5D, 0xBA, 0x00, 0x60, 0x1C, 0x00, 0x73, 0xB2, 0x00, 0x74, 0x69, 0x00, 0x7F, 0x9A, 0x00, 0x80, 0x46, 0x00, 0x92, 0x34, 0x00, 0x96, 0xF6, 0x00, 0x97, 0x48, 0x00, 0x98, 0x18, 0x00, 0x4F, 0x8B, 0x00, 0x79, 0xAE, 0x00, 0x91, 0xB4, 0x00, 0x96, 0xB8, 0x00, 0x60, 0xE1, 0x00, 0x4E, 0x86, 0x00, 0x50, 0xDA, 0x00, 0x5B, 0xEE, 0x00, 0x5C, 0x3F, 0x00, 0x65, 0x99, 0x00, 0x6A, 0x02, 0x00, 0x71, 0xCE, 0x00, 0x76, 0x42, 0x00, 0x84, 0xFC, 0x00, 0x90, 0x7C, 0x00, 0x9F, 0x8D, 0x00, 0x66, 0x88, 0x00, 0x96, 0x2E, 0x00, 0x52, 0x89, 0x00, 0x67, 0x7B, 0x00, 0x67, 0xF3, 0x00, 0x6D, 0x41, 0x00, 0x6E, 0x9C, 0x00, 0x74, 0x09, 0x00, 0x75, 0x59, 0x00, 0x78, 0x6B, 0x00, 0x7D, 0x10, 0x00, 0x98, 0x5E, 0x00, 0x51, 0x6D, 0x00, 0x62, 0x2E, 0x00, 0x96, 0x78, 0x00, 0x50, 0x2B, 0x00, 0x5D, 0x19, 0x00, 0x6D, 0xEA, 0x00, 0x8F, 0x2A, 0x00, 0x5F, 0x8B, 0x00, 0x61, 0x44, 0x00, 0x68, 0x17, 0x00, 0x73, 0x87, 0x00, 0x96, 0x86, 0x00, 0x52, 0x29, 0x00, 0x54, 0x0F, 0x00, 0x5C, 0x65, 0x00, 0x66, 0x13, 0x00, 0x67, 0x4E, 0x00, 0x68, 0xA8, 0x00, 0x6C, 0xE5, 0x00, 0x74, 0x06, 0x00, 0x75, 0xE2, 0x00, 0x7F, 0x79, 0x00, 0x88, 0xCF, 0x00, 0x88, 0xE1, 0x00, 0x91, 0xCC, 0x00, 0x96, 0xE2, 0x00, 0x53, 0x3F, 0x00, 0x6E, 0xBA, 0x00, 0x54, 0x1D, 0x00, 0x71, 0xD0, 0x00, 0x74, 0x98, 0x00, 0x85, 0xFA, 0x00, 0x96, 0xA3, 0x00, 0x9C, 0x57, 0x00, 0x9E, 0x9F, 0x00, 0x67, 0x97, 0x00, 0x6D, 0xCB, 0x00, 0x81, 0xE8, 0x00, 0x7A, 0xCB, 0x00, 0x7B, 0x20, 0x00, 0x7C, 0x92, 0x00, 0x72, 0xC0, 0x00, 0x70, 0x99, 0x00, 0x8B, 0x58, 0x00, 0x4E, 0xC0, 0x00, 0x83, 0x36, 0x00, 0x52, 0x3A, 0x00, 0x52, 0x07, 0x00, 0x5E, 0xA6, 0x00, 0x62, 0xD3, 0x00, 0x7C, 0xD6, 0x00, 0x5B, 0x85, 0x00, 0x6D, 0x1E, 0x00, 0x66, 0xB4, 0x00, 0x8F, 0x3B, 0x00, 0x88, 0x4C, 0x00, 0x96, 0x4D, 0x00, 0x89, 0x8B, 0x00, 0x5E, 0xD3, 0x00, 0x51, 0x40, 0x00, 0x55, 0xC0, 0x00, 0x58, 0x5A, 0x00, 0x66, 0x74, 0x00, 0x51, 0xDE, 0x00, 0x73, 0x2A, 0x00, 0x76, 0xCA, 0x00, 0x79, 0x3C, 0x00, 0x79, 0x5E, 0x00, 0x79, 0x65, 0x00, 0x79, 0x8F, 0x00, 0x97, 0x56, 0x00, 0x7C, 0xBE, 0x00, 0x7F, 0xBD, 0x00, 0x86, 0x12, 0x00, 0x8A, 0xF8, 0x00, 0x90, 0x38, 0x00, 0x90, 0xFD, 0x00, 0x98, 0xEF, 0x00, 0x98, 0xFC, 0x00, 0x99, 0x28, 0x00, 0x9D, 0xB4, 0x00, 0x90, 0xDE, 0x00, 0x96, 0xB7, 0x00, 0x4F, 0xAE, 0x00, 0x50, 0xE7, 0x00, 0x51, 0x4D, 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, 0x00, 0x53, 0x51, 0x00, 0x55, 0x9D, 0x00, 0x56, 0x06, 0x00, 0x56, 0x68, 0x00, 0x58, 0x40, 0x00, 0x58, 0xA8, 0x00, 0x5C, 0x64, 0x00, 0x5C, 0x6E, 0x00, 0x60, 0x94, 0x00, 0x61, 0x68, 0x00, 0x61, 0x8E, 0x00, 0x61, 0xF2, 0x00, 0x65, 0x4F, 0x00, 0x65, 0xE2, 0x00, 0x66, 0x91, 0x00, 0x68, 0x85, 0x00, 0x6D, 0x77, 0x00, 0x6E, 0x1A, 0x00, 0x6F, 0x22, 0x00, 0x71, 0x6E, 0x00, 0x72, 0x2B, 0x00, 0x74, 0x22, 0x00, 0x78, 0x91, 0x00, 0x79, 0x3E, 0x00, 0x79, 0x49, 0x00, 0x79, 0x48, 0x00, 0x79, 0x50, 0x00, 0x79, 0x56, 0x00, 0x79, 0x5D, 0x00, 0x79, 0x8D, 0x00, 0x79, 0x8E, 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x81, 0x00, 0x7B, 0xC0, 0x00, 0x7D, 0xF4, 0x00, 0x7E, 0x09, 0x00, 0x7E, 0x41, 0x00, 0x7F, 0x72, 0x00, 0x80, 0x05, 0x00, 0x81, 0xED, 0x00, 0x82, 0x79, 0x00, 0x82, 0x79, 0x00, 0x84, 0x57, 0x00, 0x89, 0x10, 0x00, 0x89, 0x96, 0x00, 0x8B, 0x01, 0x00, 0x8B, 0x39, 0x00, 0x8C, 0xD3, 0x00, 0x8D, 0x08, 0x00, 0x8F, 0xB6, 0x00, 0x90, 0x38, 0x00, 0x96, 0xE3, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x3B, 0x00, 0x60, 0x75, 0x02, 0x42, 0xEE, 0x00, 0x82, 0x18, 0x00, 0x4E, 0x26, 0x00, 0x51, 0xB5, 0x00, 0x51, 0x68, 0x00, 0x4F, 0x80, 0x00, 0x51, 0x45, 0x00, 0x51, 0x80, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xFA, 0x00, 0x55, 0x9D, 0x00, 0x55, 0x55, 0x00, 0x55, 0x99, 0x00, 0x55, 0xE2, 0x00, 0x58, 0x5A, 0x00, 0x58, 0xB3, 0x00, 0x59, 0x44, 0x00, 0x59, 0x54, 0x00, 0x5A, 0x62, 0x00, 0x5B, 0x28, 0x00, 0x5E, 0xD2, 0x00, 0x5E, 0xD9, 0x00, 0x5F, 0x69, 0x00, 0x5F, 0xAD, 0x00, 0x60, 0xD8, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x08, 0x00, 0x61, 0x8E, 0x00, 0x61, 0x60, 0x00, 0x61, 0xF2, 0x00, 0x62, 0x34, 0x00, 0x63, 0xC4, 0x00, 0x64, 0x1C, 0x00, 0x64, 0x52, 0x00, 0x65, 0x56, 0x00, 0x66, 0x74, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x56, 0x00, 0x6B, 0x79, 0x00, 0x6B, 0xBA, 0x00, 0x6D, 0x41, 0x00, 0x6E, 0xDB, 0x00, 0x6E, 0xCB, 0x00, 0x6F, 0x22, 0x00, 0x70, 0x1E, 0x00, 0x71, 0x6E, 0x00, 0x77, 0xA7, 0x00, 0x72, 0x35, 0x00, 0x72, 0xAF, 0x00, 0x73, 0x2A, 0x00, 0x74, 0x71, 0x00, 0x75, 0x06, 0x00, 0x75, 0x3B, 0x00, 0x76, 0x1D, 0x00, 0x76, 0x1F, 0x00, 0x76, 0xCA, 0x00, 0x76, 0xDB, 0x00, 0x76, 0xF4, 0x00, 0x77, 0x4A, 0x00, 0x77, 0x40, 0x00, 0x78, 0xCC, 0x00, 0x7A, 0xB1, 0x00, 0x7B, 0xC0, 0x00, 0x7C, 0x7B, 0x00, 0x7D, 0x5B, 0x00, 0x7D, 0xF4, 0x00, 0x7F, 0x3E, 0x00, 0x80, 0x05, 0x00, 0x83, 0x52, 0x00, 0x83, 0xEF, 0x00, 0x87, 0x79, 0x00, 0x89, 0x41, 0x00, 0x89, 0x86, 0x00, 0x89, 0x96, 0x00, 0x8A, 0xBF, 0x00, 0x8A, 0xF8, 0x00, 0x8A, 0xCB, 0x00, 0x8B, 0x01, 0x00, 0x8A, 0xFE, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x39, 0x00, 0x8B, 0x8A, 0x00, 0x8D, 0x08, 0x00, 0x8F, 0x38, 0x00, 0x90, 0x72, 0x00, 0x91, 0x99, 0x00, 0x92, 0x76, 0x00, 0x96, 0x7C, 0x00, 0x96, 0xE3, 0x00, 0x97, 0x56, 0x00, 0x97, 0xDB, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x3B, 0x00, 0x9B, 0x12, 0x00, 0x9F, 0x9C, 0x02, 0x28, 0x4A, 0x02, 0x28, 0x44, 0x02, 0x33, 0xD5, 0x00, 0x3B, 0x9D, 0x00, 0x40, 0x18, 0x00, 0x40, 0x39, 0x02, 0x52, 0x49, 0x02, 0x5C, 0xD0, 0x02, 0x7E, 0xD3, 0x00, 0x9F, 0x43, 0x00, 0x9F, 0x8E, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x66, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x6C, 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, 0x00, 0x00, 0x6C, 0xC0, 0x01, 0x7F, 0x00, 0x00, 0x74, 0xC0, 0x00, 0x73, 0x00, 0x00, 0x74, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x65, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6B, 0xC0, 0x05, 0x7E, 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6D, 0x80, 0x05, 0xD9, 0x00, 0x05, 0xB4, 0x80, 0x05, 0xF2, 0x00, 0x05, 0xB7, 0x04, 0x05, 0xE2, 0x04, 0x05, 0xD0, 0x04, 0x05, 0xD3, 0x04, 0x05, 0xD4, 0x04, 0x05, 0xDB, 0x04, 0x05, 0xDC, 0x04, 0x05, 0xDD, 0x04, 0x05, 0xE8, 0x04, 0x05, 0xEA, 0x04, 0x00, 0x2B, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xC1, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xC2, 0x80, 0xFB, 0x49, 0x00, 0x05, 0xC1, 0x80, 0xFB, 0x49, 0x00, 0x05, 0xC2, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xB7, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xB8, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD1, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD2, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD3, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD6, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD8, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDA, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDC, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDE, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE0, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE1, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE3, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE6, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE7, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE8, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xEA, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, 0x00, 0x05, 0xB9, 0x80, 0x05, 0xD1, 0x00, 0x05, 0xBF, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBF, 0x80, 0x05, 0xE4, 0x00, 0x05, 0xBF, 0xC0, 0x05, 0xD0, 0x00, 0x05, 0xDC, 0x18, 0x06, 0x71, 0x14, 0x06, 0x71, 0x18, 0x06, 0x7B, 0x14, 0x06, 0x7B, 0x0C, 0x06, 0x7B, 0x10, 0x06, 0x7B, 0x18, 0x06, 0x7E, 0x14, 0x06, 0x7E, 0x0C, 0x06, 0x7E, 0x10, 0x06, 0x7E, 0x18, 0x06, 0x80, 0x14, 0x06, 0x80, 0x0C, 0x06, 0x80, 0x10, 0x06, 0x80, 0x18, 0x06, 0x7A, 0x14, 0x06, 0x7A, 0x0C, 0x06, 0x7A, 0x10, 0x06, 0x7A, 0x18, 0x06, 0x7F, 0x14, 0x06, 0x7F, 0x0C, 0x06, 0x7F, 0x10, 0x06, 0x7F, 0x18, 0x06, 0x79, 0x14, 0x06, 0x79, 0x0C, 0x06, 0x79, 0x10, 0x06, 0x79, 0x18, 0x06, 0xA4, 0x14, 0x06, 0xA4, 0x0C, 0x06, 0xA4, 0x10, 0x06, 0xA4, 0x18, 0x06, 0xA6, 0x14, 0x06, 0xA6, 0x0C, 0x06, 0xA6, 0x10, 0x06, 0xA6, 0x18, 0x06, 0x84, 0x14, 0x06, 0x84, 0x0C, 0x06, 0x84, 0x10, 0x06, 0x84, 0x18, 0x06, 0x83, 0x14, 0x06, 0x83, 0x0C, 0x06, 0x83, 0x10, 0x06, 0x83, 0x18, 0x06, 0x86, 0x14, 0x06, 0x86, 0x0C, 0x06, 0x86, 0x10, 0x06, 0x86, 0x18, 0x06, 0x87, 0x14, 0x06, 0x87, 0x0C, 0x06, 0x87, 0x10, 0x06, 0x87, 0x18, 0x06, 0x8D, 0x14, 0x06, 0x8D, 0x18, 0x06, 0x8C, 0x14, 0x06, 0x8C, 0x18, 0x06, 0x8E, 0x14, 0x06, 0x8E, 0x18, 0x06, 0x88, 0x14, 0x06, 0x88, 0x18, 0x06, 0x98, 0x14, 0x06, 0x98, 0x18, 0x06, 0x91, 0x14, 0x06, 0x91, 0x18, 0x06, 0xA9, 0x14, 0x06, 0xA9, 0x0C, 0x06, 0xA9, 0x10, 0x06, 0xA9, 0x18, 0x06, 0xAF, 0x14, 0x06, 0xAF, 0x0C, 0x06, 0xAF, 0x10, 0x06, 0xAF, 0x18, 0x06, 0xB3, 0x14, 0x06, 0xB3, 0x0C, 0x06, 0xB3, 0x10, 0x06, 0xB3, 0x18, 0x06, 0xB1, 0x14, 0x06, 0xB1, 0x0C, 0x06, 0xB1, 0x10, 0x06, 0xB1, 0x18, 0x06, 0xBA, 0x14, 0x06, 0xBA, 0x18, 0x06, 0xBB, 0x14, 0x06, 0xBB, 0x0C, 0x06, 0xBB, 0x10, 0x06, 0xBB, 0x18, 0x06, 0xC0, 0x14, 0x06, 0xC0, 0x18, 0x06, 0xC1, 0x14, 0x06, 0xC1, 0x0C, 0x06, 0xC1, 0x10, 0x06, 0xC1, 0x18, 0x06, 0xBE, 0x14, 0x06, 0xBE, 0x0C, 0x06, 0xBE, 0x10, 0x06, 0xBE, 0x18, 0x06, 0xD2, 0x14, 0x06, 0xD2, 0x18, 0x06, 0xD3, 0x14, 0x06, 0xD3, 0x18, 0x06, 0xAD, 0x14, 0x06, 0xAD, 0x0C, 0x06, 0xAD, 0x10, 0x06, 0xAD, 0x18, 0x06, 0xC7, 0x14, 0x06, 0xC7, 0x18, 0x06, 0xC6, 0x14, 0x06, 0xC6, 0x18, 0x06, 0xC8, 0x14, 0x06, 0xC8, 0x18, 0x06, 0x77, 0x18, 0x06, 0xCB, 0x14, 0x06, 0xCB, 0x18, 0x06, 0xC5, 0x14, 0x06, 0xC5, 0x18, 0x06, 0xC9, 0x14, 0x06, 0xC9, 0x18, 0x06, 0xD0, 0x14, 0x06, 0xD0, 0x0C, 0x06, 0xD0, 0x10, 0x06, 0xD0, 0x0C, 0x06, 0x49, 0x10, 0x06, 0x49, 0x98, 0x06, 0x26, 0x00, 0x06, 0x27, 0x94, 0x06, 0x26, 0x00, 0x06, 0x27, 0x98, 0x06, 0x26, 0x00, 0x06, 0xD5, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD5, 0x98, 0x06, 0x26, 0x00, 0x06, 0x48, 0x94, 0x06, 0x26, 0x00, 0x06, 0x48, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC7, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC7, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC6, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC6, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC8, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC8, 0x98, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x8C, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x49, 0x18, 0x06, 0xCC, 0x14, 0x06, 0xCC, 0x0C, 0x06, 0xCC, 0x10, 0x06, 0xCC, 0x98, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x26, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x26, 0x00, 0x06, 0x45, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, 0x98, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x28, 0x00, 0x06, 0x45, 0x98, 0x06, 0x28, 0x00, 0x06, 0x49, 0x98, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x33, 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x35, 0x00, 0x06, 0x45, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x36, 0x00, 0x06, 0x45, 0x98, 0x06, 0x37, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x37, 0x00, 0x06, 0x45, 0x98, 0x06, 0x38, 0x00, 0x06, 0x45, 0x98, 0x06, 0x39, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x39, 0x00, 0x06, 0x45, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x41, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x49, 0x98, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x42, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x42, 0x00, 0x06, 0x45, 0x98, 0x06, 0x42, 0x00, 0x06, 0x49, 0x98, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x43, 0x00, 0x06, 0x27, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x43, 0x00, 0x06, 0x44, 0x98, 0x06, 0x43, 0x00, 0x06, 0x45, 0x98, 0x06, 0x43, 0x00, 0x06, 0x49, 0x98, 0x06, 0x43, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x44, 0x00, 0x06, 0x49, 0x98, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x45, 0x00, 0x06, 0x45, 0x98, 0x06, 0x45, 0x00, 0x06, 0x49, 0x98, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x46, 0x00, 0x06, 0x45, 0x98, 0x06, 0x46, 0x00, 0x06, 0x49, 0x98, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x47, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x47, 0x00, 0x06, 0x45, 0x98, 0x06, 0x47, 0x00, 0x06, 0x49, 0x98, 0x06, 0x47, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x30, 0x00, 0x06, 0x70, 0x98, 0x06, 0x31, 0x00, 0x06, 0x70, 0x98, 0x06, 0x49, 0x00, 0x06, 0x70, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4C, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4D, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4E, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x51, 0x00, 0x06, 0x70, 0x94, 0x06, 0x26, 0x00, 0x06, 0x31, 0x94, 0x06, 0x26, 0x00, 0x06, 0x32, 0x94, 0x06, 0x26, 0x00, 0x06, 0x45, 0x94, 0x06, 0x26, 0x00, 0x06, 0x46, 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, 0x94, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x00, 0x06, 0x31, 0x94, 0x06, 0x28, 0x00, 0x06, 0x32, 0x94, 0x06, 0x28, 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, 0x00, 0x06, 0x46, 0x94, 0x06, 0x28, 0x00, 0x06, 0x49, 0x94, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x31, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x31, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x00, 0x06, 0x49, 0x94, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x43, 0x00, 0x06, 0x27, 0x94, 0x06, 0x43, 0x00, 0x06, 0x44, 0x94, 0x06, 0x43, 0x00, 0x06, 0x45, 0x94, 0x06, 0x43, 0x00, 0x06, 0x49, 0x94, 0x06, 0x43, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x00, 0x06, 0x49, 0x94, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x00, 0x06, 0x27, 0x94, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x00, 0x06, 0x31, 0x94, 0x06, 0x46, 0x00, 0x06, 0x32, 0x94, 0x06, 0x46, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x00, 0x06, 0x46, 0x94, 0x06, 0x46, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x49, 0x00, 0x06, 0x70, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x31, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x32, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x46, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x37, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x38, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x39, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x42, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x42, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x44, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x70, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x26, 0x00, 0x06, 0x45, 0x90, 0x06, 0x26, 0x00, 0x06, 0x47, 0x90, 0x06, 0x28, 0x00, 0x06, 0x45, 0x90, 0x06, 0x28, 0x00, 0x06, 0x47, 0x90, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2B, 0x00, 0x06, 0x47, 0x90, 0x06, 0x33, 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x47, 0x90, 0x06, 0x34, 0x00, 0x06, 0x45, 0x90, 0x06, 0x34, 0x00, 0x06, 0x47, 0x90, 0x06, 0x43, 0x00, 0x06, 0x44, 0x90, 0x06, 0x43, 0x00, 0x06, 0x45, 0x90, 0x06, 0x44, 0x00, 0x06, 0x45, 0x90, 0x06, 0x46, 0x00, 0x06, 0x45, 0x90, 0x06, 0x46, 0x00, 0x06, 0x47, 0x90, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x90, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4E, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x06, 0x37, 0x00, 0x06, 0x49, 0x98, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x39, 0x00, 0x06, 0x49, 0x98, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x33, 0x00, 0x06, 0x49, 0x98, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, 0x00, 0x06, 0x49, 0x98, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x36, 0x00, 0x06, 0x49, 0x98, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x34, 0x00, 0x06, 0x45, 0x98, 0x06, 0x34, 0x00, 0x06, 0x31, 0x98, 0x06, 0x33, 0x00, 0x06, 0x31, 0x98, 0x06, 0x35, 0x00, 0x06, 0x31, 0x98, 0x06, 0x36, 0x00, 0x06, 0x31, 0x94, 0x06, 0x37, 0x00, 0x06, 0x49, 0x94, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, 0x00, 0x06, 0x49, 0x94, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x33, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x00, 0x06, 0x49, 0x94, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x35, 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x00, 0x06, 0x31, 0x94, 0x06, 0x33, 0x00, 0x06, 0x31, 0x94, 0x06, 0x35, 0x00, 0x06, 0x31, 0x94, 0x06, 0x36, 0x00, 0x06, 0x31, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x37, 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x90, 0x06, 0x37, 0x00, 0x06, 0x45, 0x90, 0x06, 0x38, 0x00, 0x06, 0x45, 0x94, 0x06, 0x27, 0x00, 0x06, 0x4B, 0x98, 0x06, 0x27, 0x00, 0x06, 0x4B, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x35, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x35, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, 0x98, 0x06, 0x42, 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, 0x98, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, 0x98, 0x06, 0x27, 0x80, 0x06, 0x43, 0x80, 0x06, 0x28, 0x00, 0x06, 0x31, 0x98, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2F, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x39, 0x00, 0x06, 0x45, 0x98, 0x06, 0x31, 0x80, 0x06, 0x33, 0x80, 0x06, 0x48, 0x00, 0x06, 0x44, 0x98, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x98, 0x06, 0x48, 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x49, 0x80, 0x00, 0x20, 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, 0x80, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, 0x80, 0x06, 0x48, 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2C, 0x80, 0x06, 0x44, 0x80, 0x00, 0x20, 0x80, 0x06, 0x2C, 0x80, 0x06, 0x44, 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, 0x98, 0x06, 0x31, 0x80, 0x06, 0xCC, 0x80, 0x06, 0x27, 0x00, 0x06, 0x44, 0x28, 0x00, 0x2C, 0x28, 0x30, 0x01, 0x28, 0x30, 0x02, 0x28, 0x00, 0x3A, 0x28, 0x00, 0x3B, 0x28, 0x00, 0x21, 0x28, 0x00, 0x3F, 0x28, 0x30, 0x16, 0x28, 0x30, 0x17, 0x28, 0x20, 0x26, 0x28, 0x20, 0x25, 0x28, 0x20, 0x14, 0x28, 0x20, 0x13, 0x28, 0x00, 0x5F, 0x28, 0x00, 0x5F, 0x28, 0x00, 0x28, 0x28, 0x00, 0x29, 0x28, 0x00, 0x7B, 0x28, 0x00, 0x7D, 0x28, 0x30, 0x14, 0x28, 0x30, 0x15, 0x28, 0x30, 0x10, 0x28, 0x30, 0x11, 0x28, 0x30, 0x0A, 0x28, 0x30, 0x0B, 0x28, 0x30, 0x08, 0x28, 0x30, 0x09, 0x28, 0x30, 0x0C, 0x28, 0x30, 0x0D, 0x28, 0x30, 0x0E, 0x28, 0x30, 0x0F, 0x28, 0x00, 0x5B, 0x28, 0x00, 0x5D, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, 0x34, 0x00, 0x2C, 0x34, 0x30, 0x01, 0x34, 0x00, 0x2E, 0x34, 0x00, 0x3B, 0x34, 0x00, 0x3A, 0x34, 0x00, 0x3F, 0x34, 0x00, 0x21, 0x34, 0x20, 0x14, 0x34, 0x00, 0x28, 0x34, 0x00, 0x29, 0x34, 0x00, 0x7B, 0x34, 0x00, 0x7D, 0x34, 0x30, 0x14, 0x34, 0x30, 0x15, 0x34, 0x00, 0x23, 0x34, 0x00, 0x26, 0x34, 0x00, 0x2A, 0x34, 0x00, 0x2B, 0x34, 0x00, 0x2D, 0x34, 0x00, 0x3C, 0x34, 0x00, 0x3E, 0x34, 0x00, 0x3D, 0x34, 0x00, 0x5C, 0x34, 0x00, 0x24, 0x34, 0x00, 0x25, 0x34, 0x00, 0x40, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4B, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4B, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4C, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4D, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4E, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4E, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4F, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4F, 0x98, 0x00, 0x20, 0x00, 0x06, 0x50, 0x90, 0x06, 0x40, 0x00, 0x06, 0x50, 0x98, 0x00, 0x20, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x00, 0x06, 0x52, 0x90, 0x06, 0x40, 0x00, 0x06, 0x52, 0x18, 0x06, 0x21, 0x18, 0x06, 0x22, 0x14, 0x06, 0x22, 0x18, 0x06, 0x23, 0x14, 0x06, 0x23, 0x18, 0x06, 0x24, 0x14, 0x06, 0x24, 0x18, 0x06, 0x25, 0x14, 0x06, 0x25, 0x18, 0x06, 0x26, 0x14, 0x06, 0x26, 0x0C, 0x06, 0x26, 0x10, 0x06, 0x26, 0x18, 0x06, 0x27, 0x14, 0x06, 0x27, 0x18, 0x06, 0x28, 0x14, 0x06, 0x28, 0x0C, 0x06, 0x28, 0x10, 0x06, 0x28, 0x18, 0x06, 0x29, 0x14, 0x06, 0x29, 0x18, 0x06, 0x2A, 0x14, 0x06, 0x2A, 0x0C, 0x06, 0x2A, 0x10, 0x06, 0x2A, 0x18, 0x06, 0x2B, 0x14, 0x06, 0x2B, 0x0C, 0x06, 0x2B, 0x10, 0x06, 0x2B, 0x18, 0x06, 0x2C, 0x14, 0x06, 0x2C, 0x0C, 0x06, 0x2C, 0x10, 0x06, 0x2C, 0x18, 0x06, 0x2D, 0x14, 0x06, 0x2D, 0x0C, 0x06, 0x2D, 0x10, 0x06, 0x2D, 0x18, 0x06, 0x2E, 0x14, 0x06, 0x2E, 0x0C, 0x06, 0x2E, 0x10, 0x06, 0x2E, 0x18, 0x06, 0x2F, 0x14, 0x06, 0x2F, 0x18, 0x06, 0x30, 0x14, 0x06, 0x30, 0x18, 0x06, 0x31, 0x14, 0x06, 0x31, 0x18, 0x06, 0x32, 0x14, 0x06, 0x32, 0x18, 0x06, 0x33, 0x14, 0x06, 0x33, 0x0C, 0x06, 0x33, 0x10, 0x06, 0x33, 0x18, 0x06, 0x34, 0x14, 0x06, 0x34, 0x0C, 0x06, 0x34, 0x10, 0x06, 0x34, 0x18, 0x06, 0x35, 0x14, 0x06, 0x35, 0x0C, 0x06, 0x35, 0x10, 0x06, 0x35, 0x18, 0x06, 0x36, 0x14, 0x06, 0x36, 0x0C, 0x06, 0x36, 0x10, 0x06, 0x36, 0x18, 0x06, 0x37, 0x14, 0x06, 0x37, 0x0C, 0x06, 0x37, 0x10, 0x06, 0x37, 0x18, 0x06, 0x38, 0x14, 0x06, 0x38, 0x0C, 0x06, 0x38, 0x10, 0x06, 0x38, 0x18, 0x06, 0x39, 0x14, 0x06, 0x39, 0x0C, 0x06, 0x39, 0x10, 0x06, 0x39, 0x18, 0x06, 0x3A, 0x14, 0x06, 0x3A, 0x0C, 0x06, 0x3A, 0x10, 0x06, 0x3A, 0x18, 0x06, 0x41, 0x14, 0x06, 0x41, 0x0C, 0x06, 0x41, 0x10, 0x06, 0x41, 0x18, 0x06, 0x42, 0x14, 0x06, 0x42, 0x0C, 0x06, 0x42, 0x10, 0x06, 0x42, 0x18, 0x06, 0x43, 0x14, 0x06, 0x43, 0x0C, 0x06, 0x43, 0x10, 0x06, 0x43, 0x18, 0x06, 0x44, 0x14, 0x06, 0x44, 0x0C, 0x06, 0x44, 0x10, 0x06, 0x44, 0x18, 0x06, 0x45, 0x14, 0x06, 0x45, 0x0C, 0x06, 0x45, 0x10, 0x06, 0x45, 0x18, 0x06, 0x46, 0x14, 0x06, 0x46, 0x0C, 0x06, 0x46, 0x10, 0x06, 0x46, 0x18, 0x06, 0x47, 0x14, 0x06, 0x47, 0x0C, 0x06, 0x47, 0x10, 0x06, 0x47, 0x18, 0x06, 0x48, 0x14, 0x06, 0x48, 0x18, 0x06, 0x49, 0x14, 0x06, 0x49, 0x18, 0x06, 0x4A, 0x14, 0x06, 0x4A, 0x0C, 0x06, 0x4A, 0x10, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x22, 0x94, 0x06, 0x44, 0x00, 0x06, 0x22, 0x98, 0x06, 0x44, 0x00, 0x06, 0x23, 0x94, 0x06, 0x44, 0x00, 0x06, 0x23, 0x98, 0x06, 0x44, 0x00, 0x06, 0x25, 0x94, 0x06, 0x44, 0x00, 0x06, 0x25, 0x98, 0x06, 0x44, 0x00, 0x06, 0x27, 0x94, 0x06, 0x44, 0x00, 0x06, 0x27, 0x2C, 0x00, 0x21, 0x2C, 0x00, 0x22, 0x2C, 0x00, 0x23, 0x2C, 0x00, 0x24, 0x2C, 0x00, 0x25, 0x2C, 0x00, 0x26, 0x2C, 0x00, 0x27, 0x2C, 0x00, 0x28, 0x2C, 0x00, 0x29, 0x2C, 0x00, 0x2A, 0x2C, 0x00, 0x2B, 0x2C, 0x00, 0x2C, 0x2C, 0x00, 0x2D, 0x2C, 0x00, 0x2E, 0x2C, 0x00, 0x2F, 0x2C, 0x00, 0x30, 0x2C, 0x00, 0x31, 0x2C, 0x00, 0x32, 0x2C, 0x00, 0x33, 0x2C, 0x00, 0x34, 0x2C, 0x00, 0x35, 0x2C, 0x00, 0x36, 0x2C, 0x00, 0x37, 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x39, 0x2C, 0x00, 0x3A, 0x2C, 0x00, 0x3B, 0x2C, 0x00, 0x3C, 0x2C, 0x00, 0x3D, 0x2C, 0x00, 0x3E, 0x2C, 0x00, 0x3F, 0x2C, 0x00, 0x40, 0x2C, 0x00, 0x41, 0x2C, 0x00, 0x42, 0x2C, 0x00, 0x43, 0x2C, 0x00, 0x44, 0x2C, 0x00, 0x45, 0x2C, 0x00, 0x46, 0x2C, 0x00, 0x47, 0x2C, 0x00, 0x48, 0x2C, 0x00, 0x49, 0x2C, 0x00, 0x4A, 0x2C, 0x00, 0x4B, 0x2C, 0x00, 0x4C, 0x2C, 0x00, 0x4D, 0x2C, 0x00, 0x4E, 0x2C, 0x00, 0x4F, 0x2C, 0x00, 0x50, 0x2C, 0x00, 0x51, 0x2C, 0x00, 0x52, 0x2C, 0x00, 0x53, 0x2C, 0x00, 0x54, 0x2C, 0x00, 0x55, 0x2C, 0x00, 0x56, 0x2C, 0x00, 0x57, 0x2C, 0x00, 0x58, 0x2C, 0x00, 0x59, 0x2C, 0x00, 0x5A, 0x2C, 0x00, 0x5B, 0x2C, 0x00, 0x5C, 0x2C, 0x00, 0x5D, 0x2C, 0x00, 0x5E, 0x2C, 0x00, 0x5F, 0x2C, 0x00, 0x60, 0x2C, 0x00, 0x61, 0x2C, 0x00, 0x62, 0x2C, 0x00, 0x63, 0x2C, 0x00, 0x64, 0x2C, 0x00, 0x65, 0x2C, 0x00, 0x66, 0x2C, 0x00, 0x67, 0x2C, 0x00, 0x68, 0x2C, 0x00, 0x69, 0x2C, 0x00, 0x6A, 0x2C, 0x00, 0x6B, 0x2C, 0x00, 0x6C, 0x2C, 0x00, 0x6D, 0x2C, 0x00, 0x6E, 0x2C, 0x00, 0x6F, 0x2C, 0x00, 0x70, 0x2C, 0x00, 0x71, 0x2C, 0x00, 0x72, 0x2C, 0x00, 0x73, 0x2C, 0x00, 0x74, 0x2C, 0x00, 0x75, 0x2C, 0x00, 0x76, 0x2C, 0x00, 0x77, 0x2C, 0x00, 0x78, 0x2C, 0x00, 0x79, 0x2C, 0x00, 0x7A, 0x2C, 0x00, 0x7B, 0x2C, 0x00, 0x7C, 0x2C, 0x00, 0x7D, 0x2C, 0x00, 0x7E, 0x2C, 0x29, 0x85, 0x2C, 0x29, 0x86, 0x30, 0x30, 0x02, 0x30, 0x30, 0x0C, 0x30, 0x30, 0x0D, 0x30, 0x30, 0x01, 0x30, 0x30, 0xFB, 0x30, 0x30, 0xF2, 0x30, 0x30, 0xA1, 0x30, 0x30, 0xA3, 0x30, 0x30, 0xA5, 0x30, 0x30, 0xA7, 0x30, 0x30, 0xA9, 0x30, 0x30, 0xE3, 0x30, 0x30, 0xE5, 0x30, 0x30, 0xE7, 0x30, 0x30, 0xC3, 0x30, 0x30, 0xFC, 0x30, 0x30, 0xA2, 0x30, 0x30, 0xA4, 0x30, 0x30, 0xA6, 0x30, 0x30, 0xA8, 0x30, 0x30, 0xAA, 0x30, 0x30, 0xAB, 0x30, 0x30, 0xAD, 0x30, 0x30, 0xAF, 0x30, 0x30, 0xB1, 0x30, 0x30, 0xB3, 0x30, 0x30, 0xB5, 0x30, 0x30, 0xB7, 0x30, 0x30, 0xB9, 0x30, 0x30, 0xBB, 0x30, 0x30, 0xBD, 0x30, 0x30, 0xBF, 0x30, 0x30, 0xC1, 0x30, 0x30, 0xC4, 0x30, 0x30, 0xC6, 0x30, 0x30, 0xC8, 0x30, 0x30, 0xCA, 0x30, 0x30, 0xCB, 0x30, 0x30, 0xCC, 0x30, 0x30, 0xCD, 0x30, 0x30, 0xCE, 0x30, 0x30, 0xCF, 0x30, 0x30, 0xD2, 0x30, 0x30, 0xD5, 0x30, 0x30, 0xD8, 0x30, 0x30, 0xDB, 0x30, 0x30, 0xDE, 0x30, 0x30, 0xDF, 0x30, 0x30, 0xE0, 0x30, 0x30, 0xE1, 0x30, 0x30, 0xE2, 0x30, 0x30, 0xE4, 0x30, 0x30, 0xE6, 0x30, 0x30, 0xE8, 0x30, 0x30, 0xE9, 0x30, 0x30, 0xEA, 0x30, 0x30, 0xEB, 0x30, 0x30, 0xEC, 0x30, 0x30, 0xED, 0x30, 0x30, 0xEF, 0x30, 0x30, 0xF3, 0x30, 0x30, 0x99, 0x30, 0x30, 0x9A, 0x30, 0x31, 0x64, 0x30, 0x31, 0x31, 0x30, 0x31, 0x32, 0x30, 0x31, 0x33, 0x30, 0x31, 0x34, 0x30, 0x31, 0x35, 0x30, 0x31, 0x36, 0x30, 0x31, 0x37, 0x30, 0x31, 0x38, 0x30, 0x31, 0x39, 0x30, 0x31, 0x3A, 0x30, 0x31, 0x3B, 0x30, 0x31, 0x3C, 0x30, 0x31, 0x3D, 0x30, 0x31, 0x3E, 0x30, 0x31, 0x3F, 0x30, 0x31, 0x40, 0x30, 0x31, 0x41, 0x30, 0x31, 0x42, 0x30, 0x31, 0x43, 0x30, 0x31, 0x44, 0x30, 0x31, 0x45, 0x30, 0x31, 0x46, 0x30, 0x31, 0x47, 0x30, 0x31, 0x48, 0x30, 0x31, 0x49, 0x30, 0x31, 0x4A, 0x30, 0x31, 0x4B, 0x30, 0x31, 0x4C, 0x30, 0x31, 0x4D, 0x30, 0x31, 0x4E, 0x30, 0x31, 0x4F, 0x30, 0x31, 0x50, 0x30, 0x31, 0x51, 0x30, 0x31, 0x52, 0x30, 0x31, 0x53, 0x30, 0x31, 0x54, 0x30, 0x31, 0x55, 0x30, 0x31, 0x56, 0x30, 0x31, 0x57, 0x30, 0x31, 0x58, 0x30, 0x31, 0x59, 0x30, 0x31, 0x5A, 0x30, 0x31, 0x5B, 0x30, 0x31, 0x5C, 0x30, 0x31, 0x5D, 0x30, 0x31, 0x5E, 0x30, 0x31, 0x5F, 0x30, 0x31, 0x60, 0x30, 0x31, 0x61, 0x30, 0x31, 0x62, 0x30, 0x31, 0x63, 0x2C, 0x00, 0xA2, 0x2C, 0x00, 0xA3, 0x2C, 0x00, 0xAC, 0x2C, 0x00, 0xAF, 0x2C, 0x00, 0xA6, 0x2C, 0x00, 0xA5, 0x2C, 0x20, 0xA9, 0x30, 0x25, 0x02, 0x30, 0x21, 0x90, 0x30, 0x21, 0x91, 0x30, 0x21, 0x92, 0x30, 0x21, 0x93, 0x30, 0x25, 0xA0, 0x30, 0x25, 0xCB, 0x81, 0x10, 0x99, 0x01, 0x10, 0xBA, 0x81, 0x10, 0x9B, 0x01, 0x10, 0xBA, 0x81, 0x10, 0xA5, 0x01, 0x10, 0xBA, 0x81, 0x11, 0x31, 0x01, 0x11, 0x27, 0x81, 0x11, 0x32, 0x01, 0x11, 0x27, 0x81, 0x13, 0x47, 0x01, 0x13, 0x3E, 0x81, 0x13, 0x47, 0x01, 0x13, 0x57, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBA, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xB0, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBD, 0x81, 0x15, 0xB8, 0x01, 0x15, 0xAF, 0x81, 0x15, 0xB9, 0x01, 0x15, 0xAF, 0x81, 0xD1, 0x57, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0x58, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6F, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x70, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x71, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x72, 0x81, 0xD1, 0xB9, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0xBA, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6F, 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6F, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x66, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x01, 0x31, 0x04, 0x02, 0x37, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0xDC, 0x04, 0x03, 0xDD, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x06, 0x27, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, 0x04, 0x06, 0xBA, 0x04, 0x06, 0xA1, 0x04, 0x06, 0x6F, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x47, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x3A, 0x04, 0x06, 0xBA, 0x04, 0x06, 0x6F, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x47, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, 0x04, 0x06, 0xA1, 0x04, 0x06, 0x27, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x47, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0xC0, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x30, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x31, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x33, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x35, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x37, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x39, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x41, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x42, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x43, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x44, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x45, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x46, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x47, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x48, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x49, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4A, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x50, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x51, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x52, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x53, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x55, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x56, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x57, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x58, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x59, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x5A, 0x00, 0x00, 0x29, 0xC0, 0x30, 0x14, 0x80, 0x00, 0x53, 0x00, 0x30, 0x15, 0x1C, 0x00, 0x43, 0x1C, 0x00, 0x52, 0x9C, 0x00, 0x43, 0x00, 0x00, 0x44, 0x9C, 0x00, 0x57, 0x00, 0x00, 0x5A, 0x38, 0x00, 0x41, 0x38, 0x00, 0x42, 0x38, 0x00, 0x43, 0x38, 0x00, 0x44, 0x38, 0x00, 0x45, 0x38, 0x00, 0x46, 0x38, 0x00, 0x47, 0x38, 0x00, 0x48, 0x38, 0x00, 0x49, 0x38, 0x00, 0x4A, 0x38, 0x00, 0x4B, 0x38, 0x00, 0x4C, 0x38, 0x00, 0x4D, 0x38, 0x00, 0x4E, 0x38, 0x00, 0x4F, 0x38, 0x00, 0x50, 0x38, 0x00, 0x51, 0x38, 0x00, 0x52, 0x38, 0x00, 0x53, 0x38, 0x00, 0x54, 0x38, 0x00, 0x55, 0x38, 0x00, 0x56, 0x38, 0x00, 0x57, 0x38, 0x00, 0x58, 0x38, 0x00, 0x59, 0x38, 0x00, 0x5A, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x44, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x53, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x57, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, 0x00, 0x00, 0x44, 0xB8, 0x00, 0x44, 0x00, 0x00, 0x4A, 0xB8, 0x30, 0x7B, 0x00, 0x30, 0x4B, 0xB8, 0x30, 0xB3, 0x00, 0x30, 0xB3, 0x38, 0x30, 0xB5, 0x38, 0x62, 0x4B, 0x38, 0x5B, 0x57, 0x38, 0x53, 0xCC, 0x38, 0x30, 0xC7, 0x38, 0x4E, 0x8C, 0x38, 0x59, 0x1A, 0x38, 0x89, 0xE3, 0x38, 0x59, 0x29, 0x38, 0x4E, 0xA4, 0x38, 0x66, 0x20, 0x38, 0x71, 0x21, 0x38, 0x65, 0x99, 0x38, 0x52, 0x4D, 0x38, 0x5F, 0x8C, 0x38, 0x51, 0x8D, 0x38, 0x65, 0xB0, 0x38, 0x52, 0x1D, 0x38, 0x7D, 0x42, 0x38, 0x75, 0x1F, 0x38, 0x8C, 0xA9, 0x38, 0x58, 0xF0, 0x38, 0x54, 0x39, 0x38, 0x6F, 0x14, 0x38, 0x62, 0x95, 0x38, 0x63, 0x55, 0x38, 0x4E, 0x00, 0x38, 0x4E, 0x09, 0x38, 0x90, 0x4A, 0x38, 0x5D, 0xE6, 0x38, 0x4E, 0x2D, 0x38, 0x53, 0xF3, 0x38, 0x63, 0x07, 0x38, 0x8D, 0x70, 0x38, 0x62, 0x53, 0x38, 0x79, 0x81, 0x38, 0x7A, 0x7A, 0x38, 0x54, 0x08, 0x38, 0x6E, 0x80, 0x38, 0x67, 0x09, 0x38, 0x67, 0x08, 0x38, 0x75, 0x33, 0x38, 0x52, 0x72, 0x38, 0x55, 0xB6, 0x38, 0x91, 0x4D, 0xC0, 0x30, 0x14, 0x80, 0x67, 0x2C, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x4E, 0x09, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x4E, 0x8C, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x5B, 0x89, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x70, 0xB9, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x62, 0x53, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x76, 0xD7, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x52, 0xDD, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x65, 0x57, 0x00, 0x30, 0x15, 0x1C, 0x5F, 0x97, 0x1C, 0x53, 0xEF, 0x00, 0x4E, 0x3D, 0x00, 0x4E, 0x38, 0x00, 0x4E, 0x41, 0x02, 0x01, 0x22, 0x00, 0x4F, 0x60, 0x00, 0x4F, 0xAE, 0x00, 0x4F, 0xBB, 0x00, 0x50, 0x02, 0x00, 0x50, 0x7A, 0x00, 0x50, 0x99, 0x00, 0x50, 0xE7, 0x00, 0x50, 0xCF, 0x00, 0x34, 0x9E, 0x02, 0x06, 0x3A, 0x00, 0x51, 0x4D, 0x00, 0x51, 0x54, 0x00, 0x51, 0x64, 0x00, 0x51, 0x77, 0x02, 0x05, 0x1C, 0x00, 0x34, 0xB9, 0x00, 0x51, 0x67, 0x00, 0x51, 0x8D, 0x02, 0x05, 0x4B, 0x00, 0x51, 0x97, 0x00, 0x51, 0xA4, 0x00, 0x4E, 0xCC, 0x00, 0x51, 0xAC, 0x00, 0x51, 0xB5, 0x02, 0x91, 0xDF, 0x00, 0x51, 0xF5, 0x00, 0x52, 0x03, 0x00, 0x34, 0xDF, 0x00, 0x52, 0x3B, 0x00, 0x52, 0x46, 0x00, 0x52, 0x72, 0x00, 0x52, 0x77, 0x00, 0x35, 0x15, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, 0x00, 0x52, 0xFA, 0x00, 0x53, 0x05, 0x00, 0x53, 0x06, 0x00, 0x53, 0x17, 0x00, 0x53, 0x49, 0x00, 0x53, 0x51, 0x00, 0x53, 0x5A, 0x00, 0x53, 0x73, 0x00, 0x53, 0x7D, 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, 0x02, 0x0A, 0x2C, 0x00, 0x70, 0x70, 0x00, 0x53, 0xCA, 0x00, 0x53, 0xDF, 0x02, 0x0B, 0x63, 0x00, 0x53, 0xEB, 0x00, 0x53, 0xF1, 0x00, 0x54, 0x06, 0x00, 0x54, 0x9E, 0x00, 0x54, 0x38, 0x00, 0x54, 0x48, 0x00, 0x54, 0x68, 0x00, 0x54, 0xA2, 0x00, 0x54, 0xF6, 0x00, 0x55, 0x10, 0x00, 0x55, 0x53, 0x00, 0x55, 0x63, 0x00, 0x55, 0x84, 0x00, 0x55, 0x84, 0x00, 0x55, 0x99, 0x00, 0x55, 0xAB, 0x00, 0x55, 0xB3, 0x00, 0x55, 0xC2, 0x00, 0x57, 0x16, 0x00, 0x56, 0x06, 0x00, 0x57, 0x17, 0x00, 0x56, 0x51, 0x00, 0x56, 0x74, 0x00, 0x52, 0x07, 0x00, 0x58, 0xEE, 0x00, 0x57, 0xCE, 0x00, 0x57, 0xF4, 0x00, 0x58, 0x0D, 0x00, 0x57, 0x8B, 0x00, 0x58, 0x32, 0x00, 0x58, 0x31, 0x00, 0x58, 0xAC, 0x02, 0x14, 0xE4, 0x00, 0x58, 0xF2, 0x00, 0x58, 0xF7, 0x00, 0x59, 0x06, 0x00, 0x59, 0x1A, 0x00, 0x59, 0x22, 0x00, 0x59, 0x62, 0x02, 0x16, 0xA8, 0x02, 0x16, 0xEA, 0x00, 0x59, 0xEC, 0x00, 0x5A, 0x1B, 0x00, 0x5A, 0x27, 0x00, 0x59, 0xD8, 0x00, 0x5A, 0x66, 0x00, 0x36, 0xEE, 0x00, 0x36, 0xFC, 0x00, 0x5B, 0x08, 0x00, 0x5B, 0x3E, 0x00, 0x5B, 0x3E, 0x02, 0x19, 0xC8, 0x00, 0x5B, 0xC3, 0x00, 0x5B, 0xD8, 0x00, 0x5B, 0xE7, 0x00, 0x5B, 0xF3, 0x02, 0x1B, 0x18, 0x00, 0x5B, 0xFF, 0x00, 0x5C, 0x06, 0x00, 0x5F, 0x53, 0x00, 0x5C, 0x22, 0x00, 0x37, 0x81, 0x00, 0x5C, 0x60, 0x00, 0x5C, 0x6E, 0x00, 0x5C, 0xC0, 0x00, 0x5C, 0x8D, 0x02, 0x1D, 0xE4, 0x00, 0x5D, 0x43, 0x02, 0x1D, 0xE6, 0x00, 0x5D, 0x6E, 0x00, 0x5D, 0x6B, 0x00, 0x5D, 0x7C, 0x00, 0x5D, 0xE1, 0x00, 0x5D, 0xE2, 0x00, 0x38, 0x2F, 0x00, 0x5D, 0xFD, 0x00, 0x5E, 0x28, 0x00, 0x5E, 0x3D, 0x00, 0x5E, 0x69, 0x00, 0x38, 0x62, 0x02, 0x21, 0x83, 0x00, 0x38, 0x7C, 0x00, 0x5E, 0xB0, 0x00, 0x5E, 0xB3, 0x00, 0x5E, 0xB6, 0x00, 0x5E, 0xCA, 0x02, 0xA3, 0x92, 0x00, 0x5E, 0xFE, 0x02, 0x23, 0x31, 0x02, 0x23, 0x31, 0x00, 0x82, 0x01, 0x00, 0x5F, 0x22, 0x00, 0x5F, 0x22, 0x00, 0x38, 0xC7, 0x02, 0x32, 0xB8, 0x02, 0x61, 0xDA, 0x00, 0x5F, 0x62, 0x00, 0x5F, 0x6B, 0x00, 0x38, 0xE3, 0x00, 0x5F, 0x9A, 0x00, 0x5F, 0xCD, 0x00, 0x5F, 0xD7, 0x00, 0x5F, 0xF9, 0x00, 0x60, 0x81, 0x00, 0x39, 0x3A, 0x00, 0x39, 0x1C, 0x00, 0x60, 0x94, 0x02, 0x26, 0xD4, 0x00, 0x60, 0xC7, 0x00, 0x61, 0x48, 0x00, 0x61, 0x4C, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x4C, 0x00, 0x61, 0x7A, 0x00, 0x61, 0x8E, 0x00, 0x61, 0xB2, 0x00, 0x61, 0xA4, 0x00, 0x61, 0xAF, 0x00, 0x61, 0xDE, 0x00, 0x61, 0xF2, 0x00, 0x61, 0xF6, 0x00, 0x62, 0x10, 0x00, 0x62, 0x1B, 0x00, 0x62, 0x5D, 0x00, 0x62, 0xB1, 0x00, 0x62, 0xD4, 0x00, 0x63, 0x50, 0x02, 0x2B, 0x0C, 0x00, 0x63, 0x3D, 0x00, 0x62, 0xFC, 0x00, 0x63, 0x68, 0x00, 0x63, 0x83, 0x00, 0x63, 0xE4, 0x02, 0x2B, 0xF1, 0x00, 0x64, 0x22, 0x00, 0x63, 0xC5, 0x00, 0x63, 0xA9, 0x00, 0x3A, 0x2E, 0x00, 0x64, 0x69, 0x00, 0x64, 0x7E, 0x00, 0x64, 0x9D, 0x00, 0x64, 0x77, 0x00, 0x3A, 0x6C, 0x00, 0x65, 0x4F, 0x00, 0x65, 0x6C, 0x02, 0x30, 0x0A, 0x00, 0x65, 0xE3, 0x00, 0x66, 0xF8, 0x00, 0x66, 0x49, 0x00, 0x3B, 0x19, 0x00, 0x66, 0x91, 0x00, 0x3B, 0x08, 0x00, 0x3A, 0xE4, 0x00, 0x51, 0x92, 0x00, 0x51, 0x95, 0x00, 0x67, 0x00, 0x00, 0x66, 0x9C, 0x00, 0x80, 0xAD, 0x00, 0x43, 0xD9, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x21, 0x00, 0x67, 0x5E, 0x00, 0x67, 0x53, 0x02, 0x33, 0xC3, 0x00, 0x3B, 0x49, 0x00, 0x67, 0xFA, 0x00, 0x67, 0x85, 0x00, 0x68, 0x52, 0x00, 0x68, 0x85, 0x02, 0x34, 0x6D, 0x00, 0x68, 0x8E, 0x00, 0x68, 0x1F, 0x00, 0x69, 0x14, 0x00, 0x3B, 0x9D, 0x00, 0x69, 0x42, 0x00, 0x69, 0xA3, 0x00, 0x69, 0xEA, 0x00, 0x6A, 0xA8, 0x02, 0x36, 0xA3, 0x00, 0x6A, 0xDB, 0x00, 0x3C, 0x18, 0x00, 0x6B, 0x21, 0x02, 0x38, 0xA7, 0x00, 0x6B, 0x54, 0x00, 0x3C, 0x4E, 0x00, 0x6B, 0x72, 0x00, 0x6B, 0x9F, 0x00, 0x6B, 0xBA, 0x00, 0x6B, 0xBB, 0x02, 0x3A, 0x8D, 0x02, 0x1D, 0x0B, 0x02, 0x3A, 0xFA, 0x00, 0x6C, 0x4E, 0x02, 0x3C, 0xBC, 0x00, 0x6C, 0xBF, 0x00, 0x6C, 0xCD, 0x00, 0x6C, 0x67, 0x00, 0x6D, 0x16, 0x00, 0x6D, 0x3E, 0x00, 0x6D, 0x77, 0x00, 0x6D, 0x41, 0x00, 0x6D, 0x69, 0x00, 0x6D, 0x78, 0x00, 0x6D, 0x85, 0x02, 0x3D, 0x1E, 0x00, 0x6D, 0x34, 0x00, 0x6E, 0x2F, 0x00, 0x6E, 0x6E, 0x00, 0x3D, 0x33, 0x00, 0x6E, 0xCB, 0x00, 0x6E, 0xC7, 0x02, 0x3E, 0xD1, 0x00, 0x6D, 0xF9, 0x00, 0x6F, 0x6E, 0x02, 0x3F, 0x5E, 0x02, 0x3F, 0x8E, 0x00, 0x6F, 0xC6, 0x00, 0x70, 0x39, 0x00, 0x70, 0x1E, 0x00, 0x70, 0x1B, 0x00, 0x3D, 0x96, 0x00, 0x70, 0x4A, 0x00, 0x70, 0x7D, 0x00, 0x70, 0x77, 0x00, 0x70, 0xAD, 0x02, 0x05, 0x25, 0x00, 0x71, 0x45, 0x02, 0x42, 0x63, 0x00, 0x71, 0x9C, 0x02, 0x43, 0xAB, 0x00, 0x72, 0x28, 0x00, 0x72, 0x35, 0x00, 0x72, 0x50, 0x02, 0x46, 0x08, 0x00, 0x72, 0x80, 0x00, 0x72, 0x95, 0x02, 0x47, 0x35, 0x02, 0x48, 0x14, 0x00, 0x73, 0x7A, 0x00, 0x73, 0x8B, 0x00, 0x3E, 0xAC, 0x00, 0x73, 0xA5, 0x00, 0x3E, 0xB8, 0x00, 0x3E, 0xB8, 0x00, 0x74, 0x47, 0x00, 0x74, 0x5C, 0x00, 0x74, 0x71, 0x00, 0x74, 0x85, 0x00, 0x74, 0xCA, 0x00, 0x3F, 0x1B, 0x00, 0x75, 0x24, 0x02, 0x4C, 0x36, 0x00, 0x75, 0x3E, 0x02, 0x4C, 0x92, 0x00, 0x75, 0x70, 0x02, 0x21, 0x9F, 0x00, 0x76, 0x10, 0x02, 0x4F, 0xA1, 0x02, 0x4F, 0xB8, 0x02, 0x50, 0x44, 0x00, 0x3F, 0xFC, 0x00, 0x40, 0x08, 0x00, 0x76, 0xF4, 0x02, 0x50, 0xF3, 0x02, 0x50, 0xF2, 0x02, 0x51, 0x19, 0x02, 0x51, 0x33, 0x00, 0x77, 0x1E, 0x00, 0x77, 0x1F, 0x00, 0x77, 0x1F, 0x00, 0x77, 0x4A, 0x00, 0x40, 0x39, 0x00, 0x77, 0x8B, 0x00, 0x40, 0x46, 0x00, 0x40, 0x96, 0x02, 0x54, 0x1D, 0x00, 0x78, 0x4E, 0x00, 0x78, 0x8C, 0x00, 0x78, 0xCC, 0x00, 0x40, 0xE3, 0x02, 0x56, 0x26, 0x00, 0x79, 0x56, 0x02, 0x56, 0x9A, 0x02, 0x56, 0xC5, 0x00, 0x79, 0x8F, 0x00, 0x79, 0xEB, 0x00, 0x41, 0x2F, 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x4A, 0x00, 0x7A, 0x4F, 0x02, 0x59, 0x7C, 0x02, 0x5A, 0xA7, 0x02, 0x5A, 0xA7, 0x00, 0x7A, 0xEE, 0x00, 0x42, 0x02, 0x02, 0x5B, 0xAB, 0x00, 0x7B, 0xC6, 0x00, 0x7B, 0xC9, 0x00, 0x42, 0x27, 0x02, 0x5C, 0x80, 0x00, 0x7C, 0xD2, 0x00, 0x42, 0xA0, 0x00, 0x7C, 0xE8, 0x00, 0x7C, 0xE3, 0x00, 0x7D, 0x00, 0x02, 0x5F, 0x86, 0x00, 0x7D, 0x63, 0x00, 0x43, 0x01, 0x00, 0x7D, 0xC7, 0x00, 0x7E, 0x02, 0x00, 0x7E, 0x45, 0x00, 0x43, 0x34, 0x02, 0x62, 0x28, 0x02, 0x62, 0x47, 0x00, 0x43, 0x59, 0x02, 0x62, 0xD9, 0x00, 0x7F, 0x7A, 0x02, 0x63, 0x3E, 0x00, 0x7F, 0x95, 0x00, 0x7F, 0xFA, 0x00, 0x80, 0x05, 0x02, 0x64, 0xDA, 0x02, 0x65, 0x23, 0x00, 0x80, 0x60, 0x02, 0x65, 0xA8, 0x00, 0x80, 0x70, 0x02, 0x33, 0x5F, 0x00, 0x43, 0xD5, 0x00, 0x80, 0xB2, 0x00, 0x81, 0x03, 0x00, 0x44, 0x0B, 0x00, 0x81, 0x3E, 0x00, 0x5A, 0xB5, 0x02, 0x67, 0xA7, 0x02, 0x67, 0xB5, 0x02, 0x33, 0x93, 0x02, 0x33, 0x9C, 0x00, 0x82, 0x01, 0x00, 0x82, 0x04, 0x00, 0x8F, 0x9E, 0x00, 0x44, 0x6B, 0x00, 0x82, 0x91, 0x00, 0x82, 0x8B, 0x00, 0x82, 0x9D, 0x00, 0x52, 0xB3, 0x00, 0x82, 0xB1, 0x00, 0x82, 0xB3, 0x00, 0x82, 0xBD, 0x00, 0x82, 0xE6, 0x02, 0x6B, 0x3C, 0x00, 0x82, 0xE5, 0x00, 0x83, 0x1D, 0x00, 0x83, 0x63, 0x00, 0x83, 0xAD, 0x00, 0x83, 0x23, 0x00, 0x83, 0xBD, 0x00, 0x83, 0xE7, 0x00, 0x84, 0x57, 0x00, 0x83, 0x53, 0x00, 0x83, 0xCA, 0x00, 0x83, 0xCC, 0x00, 0x83, 0xDC, 0x02, 0x6C, 0x36, 0x02, 0x6D, 0x6B, 0x02, 0x6C, 0xD5, 0x00, 0x45, 0x2B, 0x00, 0x84, 0xF1, 0x00, 0x84, 0xF3, 0x00, 0x85, 0x16, 0x02, 0x73, 0xCA, 0x00, 0x85, 0x64, 0x02, 0x6F, 0x2C, 0x00, 0x45, 0x5D, 0x00, 0x45, 0x61, 0x02, 0x6F, 0xB1, 0x02, 0x70, 0xD2, 0x00, 0x45, 0x6B, 0x00, 0x86, 0x50, 0x00, 0x86, 0x5C, 0x00, 0x86, 0x67, 0x00, 0x86, 0x69, 0x00, 0x86, 0xA9, 0x00, 0x86, 0x88, 0x00, 0x87, 0x0E, 0x00, 0x86, 0xE2, 0x00, 0x87, 0x79, 0x00, 0x87, 0x28, 0x00, 0x87, 0x6B, 0x00, 0x87, 0x86, 0x00, 0x45, 0xD7, 0x00, 0x87, 0xE1, 0x00, 0x88, 0x01, 0x00, 0x45, 0xF9, 0x00, 0x88, 0x60, 0x00, 0x88, 0x63, 0x02, 0x76, 0x67, 0x00, 0x88, 0xD7, 0x00, 0x88, 0xDE, 0x00, 0x46, 0x35, 0x00, 0x88, 0xFA, 0x00, 0x34, 0xBB, 0x02, 0x78, 0xAE, 0x02, 0x79, 0x66, 0x00, 0x46, 0xBE, 0x00, 0x46, 0xC7, 0x00, 0x8A, 0xA0, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x8A, 0x00, 0x8C, 0x55, 0x02, 0x7C, 0xA8, 0x00, 0x8C, 0xAB, 0x00, 0x8C, 0xC1, 0x00, 0x8D, 0x1B, 0x00, 0x8D, 0x77, 0x02, 0x7F, 0x2F, 0x02, 0x08, 0x04, 0x00, 0x8D, 0xCB, 0x00, 0x8D, 0xBC, 0x00, 0x8D, 0xF0, 0x02, 0x08, 0xDE, 0x00, 0x8E, 0xD4, 0x00, 0x8F, 0x38, 0x02, 0x85, 0xD2, 0x02, 0x85, 0xED, 0x00, 0x90, 0x94, 0x00, 0x90, 0xF1, 0x00, 0x91, 0x11, 0x02, 0x87, 0x2E, 0x00, 0x91, 0x1B, 0x00, 0x92, 0x38, 0x00, 0x92, 0xD7, 0x00, 0x92, 0xD8, 0x00, 0x92, 0x7C, 0x00, 0x93, 0xF9, 0x00, 0x94, 0x15, 0x02, 0x8B, 0xFA, 0x00, 0x95, 0x8B, 0x00, 0x49, 0x95, 0x00, 0x95, 0xB7, 0x02, 0x8D, 0x77, 0x00, 0x49, 0xE6, 0x00, 0x96, 0xC3, 0x00, 0x5D, 0xB2, 0x00, 0x97, 0x23, 0x02, 0x91, 0x45, 0x02, 0x92, 0x1A, 0x00, 0x4A, 0x6E, 0x00, 0x4A, 0x76, 0x00, 0x97, 0xE0, 0x02, 0x94, 0x0A, 0x00, 0x4A, 0xB2, 0x02, 0x94, 0x96, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x29, 0x02, 0x95, 0xB6, 0x00, 0x98, 0xE2, 0x00, 0x4B, 0x33, 0x00, 0x99, 0x29, 0x00, 0x99, 0xA7, 0x00, 0x99, 0xC2, 0x00, 0x99, 0xFE, 0x00, 0x4B, 0xCE, 0x02, 0x9B, 0x30, 0x00, 0x9B, 0x12, 0x00, 0x9C, 0x40, 0x00, 0x9C, 0xFD, 0x00, 0x4C, 0xCE, 0x00, 0x4C, 0xED, 0x00, 0x9D, 0x67, 0x02, 0xA0, 0xCE, 0x00, 0x4C, 0xF8, 0x02, 0xA1, 0x05, 0x02, 0xA2, 0x0E, 0x02, 0xA2, 0x91, 0x00, 0x9E, 0xBB, 0x00, 0x4D, 0x56, 0x00, 0x9E, 0xF9, 0x00, 0x9E, 0xFE, 0x00, 0x9F, 0x05, 0x00, 0x9F, 0x0F, 0x00, 0x9F, 0x16, 0x00, 0x9F, 0x3B, 0x02, 0xA6, 0x00 }; const decomp_index_table_t gl_uninorm_decomp_index_table = { { 0, 32, 64, 96, 128, -1, 160, 192, 224, 256, 288, 320, 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 384, 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, 480, -1, -1, -1, -1, 512, 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 576, 608, -1, -1, -1, -1, -1, 640, 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 704 }, { -1, -1, -1, -1, -1, 0, 32, 64, 96, 128, 160, 192, -1, 224, 256, 288, 320, 352, -1, -1, -1, 384, 416, 448, -1, -1, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768, -1, -1, 800, 832, -1, -1, -1, -1, 864, -1, -1, -1, -1, 896, -1, 928, -1, -1, 960, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 992, 1024, -1, -1, -1, 1056, -1, -1, 1088, 1120, -1, -1, -1, -1, -1, -1, -1, 1152, -1, 1184, -1, 1216, -1, -1, -1, 1248, -1, -1, -1, 1280, -1, -1, -1, 1312, -1, -1, -1, 1344, -1, -1, 1376, -1, -1, -1, 1408, 1440, -1, 1472, -1, 1504, 1536, 1568, 1600, -1, -1, -1, 1632, -1, -1, -1, -1, -1, 1664, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1696, 1728, 1760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1792, 1824, 1856, 1888, 1920, -1, -1, 1952, 1984, 2016, 2048, 2080, 2112, 2144, 2176, 2208, 2240, 2272, 2304, 2336, 2368, 2400, 2432, 2464, 2496, 2528, 2560, 2592, 2624, -1, -1, 2656, 2688, 2720, 2752, 2784, 2816, 2848, -1, 2880, 2912, 2944, 2976, 3008, 3040, -1, 3072, -1, 3104, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3136, 3168, 3200, 3232, 3264, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3296, -1, -1, 3328, -1, -1, 3360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3392, -1, -1, -1, -1, -1, -1, -1, 3424, -1, -1, -1, -1, -1, -1, -1, -1, 3456, -1, -1, 3488, 3520, 3552, 3584, 3616, 3648, 3680, 3712, -1, 3744, 3776, 3808, 3840, 3872, 3904, 3936, 3968, -1, 4000, 4032, 4064, 4096, -1, -1, -1, 4128, 4160, 4192, 4224, 4256, 4288, 4320, 4352, 4384, 4416, 4448, 4480, 4512, 4544, 4576, 4608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4640, -1, -1, -1, -1, -1, -1, 4672, -1, -1, -1, 4704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4768, 4800, 4832, 4864, 4896, 4928, 4960, 4992, 5024, 5056, 5088, 5120, 5152, 5184, 5216, -1, 5248, 5280, 5312, 5344, 5376, 5408, 5440, 5472, 5504, 5536, 5568, 5600, 5632, 5664, 5696, 5728, 5760, 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, 6048, 6080, 6112, 6144, 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6464, 6496, -1, -1, -1, -1, 6528, 6560, -1, -1, -1, 6592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6624, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6656, -1, -1, -1, -1, -1, -1, -1, 6688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6720, 6752, -1, 6784, 6816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6848, 6880, 6912, 6944, 6976, 7008, 7040, 7072, 7104, 7136, 7168, 7200, 7232, 7264, 7296, 7328, 7360, 7392, 7424, 7456, 7488, 7520, 7552, 7584, 7616, 7648, 7680, 7712, 7744, 7776, 7808, 7840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7872, 7904, 7936, 7968, 8000, 8032, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8064, 8096, 8128, 8160, 8192, -1, -1, -1, 8224, 8256, 8288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8320, 8352, 8384, 8416, 8448, 8480, 8512, 8544, 8576, 8608, 8640, 8672, 8704, 8736, 8768, 8800, 8832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 32768, -1, -1, -1, -1, -1, -1, -1, 32769, -1, 32771, -1, -1, -1, -1, 32772, -1, -1, 32774, 32775, 32776, 32778, -1, -1, 32779, 32781, 32782, -1, 32783, 32786, 32789, -1, 24, 26, 28, 30, 32, 34, -1, 36, 38, 40, 42, 44, 46, 48, 50, 52, -1, 54, 56, 58, 60, 62, 64, -1, -1, 66, 68, 70, 72, 74, -1, -1, 76, 78, 80, 82, 84, 86, -1, 88, 90, 92, 94, 96, 98, 100, 102, 104, -1, 106, 108, 110, 112, 114, 116, -1, -1, 118, 120, 122, 124, 126, -1, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, -1, -1, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, -1, -1, 202, 204, 206, 208, 210, 212, 214, 216, 218, -1, 32988, 32990, 224, 226, 228, 230, -1, 232, 234, 236, 238, 240, 242, 33012, 33014, -1, -1, 248, 250, 252, 254, 256, 258, 33028, -1, -1, 262, 264, 266, 268, 270, 272, -1, -1, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, -1, -1, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 33124, 357, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33133, 33135, 33137, 33139, 33141, 33143, 33145, 33147, 33149, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, -1, 415, 417, 419, 421, 423, 425, -1, -1, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 33217, 33219, 33221, 455, 457, -1, -1, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, -1, -1, 531, 533, -1, -1, -1, -1, -1, -1, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33331, 33332, 33333, 33334, 33335, 33336, 33337, 33338, 33339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33340, 33342, 33344, 33346, 33348, 33350, -1, -1, 33352, 33353, 33354, 33355, 33356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 589, 590, -1, 591, 592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 594, -1, -1, -1, -1, -1, 33363, -1, -1, -1, 597, -1, -1, -1, -1, -1, 33366, 600, 602, 604, 605, 607, 609, -1, 611, -1, 613, 615, 617, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 619, 621, 623, 625, 627, 629, 631, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 633, 635, 637, 639, 641, -1, 33411, 33412, 33413, 646, 648, 33418, 33419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33420, 33421, 33422, -1, 33423, 33424, -1, -1, -1, 33425, -1, -1, -1, -1, -1, -1, 658, 660, -1, 662, -1, -1, -1, 664, -1, -1, -1, -1, 666, 668, 670, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 674, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 676, 678, -1, 680, -1, -1, -1, 682, -1, -1, -1, -1, 684, 686, 688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 690, 692, -1, -1, -1, -1, -1, -1, -1, -1, -1, 694, 696, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 698, 700, 702, 704, -1, -1, 706, 708, -1, -1, 710, 712, 714, 716, 718, 720, -1, -1, 722, 724, 726, 728, 730, 732, -1, -1, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, -1, -1, 758, 760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33530, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 764, 766, 768, 770, 772, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33542, 33544, 33546, 33548, -1, -1, -1, -1, -1, -1, -1, 782, -1, 784, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 786, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 788, -1, -1, -1, -1, -1, -1, -1, 790, -1, -1, 792, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 794, 796, 798, 800, 802, 804, 806, 808, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 810, 812, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 814, 816, -1, 818, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 820, -1, -1, 822, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 824, 826, 828, -1, -1, 830, -1, -1, -1, -1, -1, -1, -1, -1, -1, 832, -1, -1, 834, 836, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 838, 840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 842, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 844, 846, 848, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 850, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 852, -1, -1, -1, -1, -1, -1, 854, 856, -1, 858, 860, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 862, 864, 866, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 868, -1, 870, 872, 874, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33644, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33646, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33648, 33650, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33652, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 885, -1, -1, -1, -1, -1, -1, -1, -1, -1, 887, -1, -1, -1, -1, 889, -1, -1, -1, -1, 891, -1, -1, -1, -1, 893, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 895, -1, -1, -1, -1, -1, -1, -1, -1, -1, 897, -1, 899, 901, 33671, 905, 33675, -1, -1, -1, -1, -1, -1, -1, 909, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 911, -1, -1, -1, -1, -1, -1, -1, -1, -1, 913, -1, -1, -1, -1, 915, -1, -1, -1, -1, 917, -1, -1, -1, -1, 919, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 921, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 923, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33693, -1, -1, -1, -1, -1, -1, -1, -1, -1, 926, -1, 928, -1, 930, -1, 932, -1, 934, -1, -1, -1, 936, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 938, -1, 940, -1, -1, 942, 944, -1, 946, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33716, 33717, 33718, -1, 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33726, 33727, 33728, 33729, -1, 33730, 33731, 33732, 33733, 33734, 33735, 33736, 33737, 33738, 33739, 33740, 33741, 33742, 33743, 33744, 33745, 33746, 33747, -1, 33748, 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, 33757, 33758, 33759, 33760, 33761, 33762, 33763, 33764, 33765, 33766, 33767, 33768, 33769, 33770, 33771, 33772, 33773, 33774, 33775, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33776, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33777, 33778, 33779, 33780, 33781, 33782, 33783, 33784, 33785, 33786, 33787, 33788, 33789, 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33797, 33798, 33799, 33800, 33801, 33802, 33803, 33804, 33805, 33806, 33807, 33808, 33809, 33810, 33811, 33812, 33813, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 34122, 1356, -1, -1, -1, -1, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, -1, -1, -1, -1, -1, -1, 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1576, 1578, 1580, -1, -1, 1582, 1584, 1586, 1588, 1590, 1592, -1, -1, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, -1, -1, 1670, 1672, 1674, 1676, 1678, 1680, -1, -1, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, -1, 1698, -1, 1700, -1, 1702, -1, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1741, 1743, 1744, 1746, 1747, 1749, 1750, 1752, 1753, 1755, 1756, 1758, -1, -1, 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, 1855, 1857, 1859, 1861, 1863, -1, 1865, 1867, 1869, 1871, 1873, 1875, 1876, 34646, 1880, 34649, 34651, 1885, 1887, 1889, 1891, -1, 1893, 1895, 1897, 1899, 1900, 1902, 1903, 1905, 1907, 1909, 1911, 1913, 1915, 1917, -1, -1, 1918, 1920, 1922, 1924, 1926, 1928, -1, 1929, 1931, 1933, 1935, 1937, 1939, 1941, 1942, 1944, 1946, 1948, 1950, 1952, 1954, 1956, 1957, 1959, 1961, 1962, -1, -1, 1963, 1965, 1967, -1, 1969, 1971, 1973, 1975, 1976, 1978, 1979, 1981, 34750, -1, 1984, 1985, 34754, 34755, 34756, 34757, 34758, 34759, 34760, 34761, 34762, -1, -1, -1, -1, -1, -1, 34763, -1, -1, -1, -1, -1, 34764, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34766, 34767, 34769, -1, -1, -1, -1, -1, -1, -1, -1, 34772, -1, -1, -1, 34773, 34775, -1, 34778, 34780, -1, -1, -1, -1, 34783, -1, 34785, -1, -1, -1, -1, -1, -1, -1, -1, 34787, 34789, 34791, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34793, -1, -1, -1, -1, -1, -1, -1, 34797, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34798, 34799, -1, -1, 34800, 34801, 34802, 34803, 34804, 34805, 34806, 34807, 34808, 34809, 34810, 34811, 34812, 34813, 34814, 34815, 34816, 34817, 34818, 34819, 34820, 34821, 34822, 34823, 34824, 34825, 34826, -1, 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, 34835, 34836, 34837, 34838, 34839, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34842, 34845, 34848, 34849, -1, 34851, 34854, 34857, -1, 34858, 34860, 34861, 34862, 34863, 34864, 34865, 34866, 34867, 34868, 34869, -1, 34870, 34871, -1, -1, 34873, 34874, 34875, 34876, 34877, -1, -1, 34878, 34880, 34883, -1, 34885, -1, 2118, -1, 34887, -1, 2120, 2121, 34890, 34891, -1, 34892, 34893, 34894, -1, 34895, 34896, 34897, 34898, 34899, 34900, 34901, -1, 34902, 34905, 34906, 34907, 34908, 34909, -1, -1, -1, -1, 34910, 34911, 34912, 34913, 34914, -1, -1, -1, -1, -1, -1, 34915, 34918, 34921, 34925, 34928, 34931, 34934, 34937, 34940, 34943, 34946, 34949, 34952, 34955, 34958, 34961, 34963, 34964, 34966, 34969, 34971, 34972, 34974, 34977, 34981, 34983, 34984, 34986, 34989, 34990, 34991, 34992, 34993, 34994, 34996, 34999, 35001, 35002, 35004, 35007, 35011, 35013, 35014, 35016, 35019, 35020, 35021, 35022, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35023, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2258, 2260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2262, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2264, 2266, 2268, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2270, -1, -1, -1, -1, 2272, -1, -1, 2274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2276, -1, 2278, -1, -1, -1, -1, -1, 35048, 35050, -1, 35053, 35055, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2290, -1, -1, 2292, -1, -1, 2294, -1, 2296, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2298, -1, 2300, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2302, 2304, 2306, 2308, 2310, -1, -1, 2312, 2314, -1, -1, 2316, 2318, -1, -1, -1, -1, -1, -1, 2320, 2322, -1, -1, 2324, 2326, -1, -1, 2328, 2330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2332, 2334, 2336, 2338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2340, 2342, 2344, 2346, -1, -1, -1, -1, -1, -1, 2348, 2350, 2352, 2354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2356, 2357, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35126, 35127, 35128, 35129, 35130, 35131, 35132, 35133, 35134, 35135, 35137, 35139, 35141, 35143, 35145, 35147, 35149, 35151, 35153, 35155, 35157, 35160, 35163, 35166, 35169, 35172, 35175, 35178, 35181, 35184, 35188, 35192, 35196, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35230, 35232, 35234, 35236, 35238, 35240, 35242, 35244, 35246, 35249, 35252, 35255, 35258, 35261, 35264, 35267, 35270, 35273, 35276, 35279, 35282, 35285, 35288, 35291, 35294, 35297, 35300, 35303, 35306, 35309, 35312, 35315, 35318, 35321, 35324, 35327, 35330, 35333, 35336, 35339, 35342, 35345, 35348, 35351, 35354, 35357, 35358, 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35390, 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, 35399, 35400, 35401, 35402, 35403, 35404, 35405, 35406, 35407, 35408, 35409, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35410, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35414, 35417, 35419, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2654, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35424, 35425, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35427, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35428, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35449, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 35457, 35458, 35459, 35460, 35461, 35462, 35463, 35464, 35465, 35466, 35467, 35468, 35469, 35470, 35471, 35472, 35473, 35474, 35475, 35476, 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, 35549, 35550, 35551, 35552, 35553, 35554, 35555, 35556, 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, 35589, 35590, 35591, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35621, 35622, 35623, 35624, 35625, 35626, 35627, 35628, 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35643, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35644, -1, 35645, 35646, 35647, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2880, -1, 2882, -1, 2884, -1, 2886, -1, 2888, -1, 2890, -1, 2892, -1, 2894, -1, 2896, -1, 2898, -1, 2900, -1, 2902, -1, -1, 2904, -1, 2906, -1, 2908, -1, -1, -1, -1, -1, -1, 2910, 2912, -1, 2914, 2916, -1, 2918, 2920, -1, 2922, 2924, -1, 2926, 2928, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2930, -1, -1, -1, -1, -1, -1, 35700, 35702, -1, 2936, 35706, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2940, -1, 2942, -1, 2944, -1, 2946, -1, 2948, -1, 2950, -1, 2952, -1, 2954, -1, 2956, -1, 2958, -1, 2960, -1, 2962, -1, -1, 2964, -1, 2966, -1, 2968, -1, -1, -1, -1, -1, -1, 2970, 2972, -1, 2974, 2976, -1, 2978, 2980, -1, 2982, 2984, -1, 2986, 2988, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2990, -1, -1, 2992, 2994, 2996, 2998, -1, -1, -1, 3000, 35770, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35772, 35773, 35774, 35775, 35776, 35777, 35778, 35779, 35780, 35781, 35782, 35783, 35784, 35785, 35786, 35787, 35788, 35789, 35790, 35791, 35792, 35793, 35794, 35795, 35796, 35797, 35798, 35799, 35800, 35801, 35802, 35803, 35804, 35805, 35806, 35807, 35808, 35809, 35810, 35811, 35812, 35813, 35814, 35815, 35816, 35817, 35818, 35819, 35820, 35821, 35822, 35823, 35824, 35825, 35826, 35827, 35828, 35829, 35830, 35831, 35832, 35833, 35834, 35835, 35836, 35837, 35838, 35839, 35840, 35841, 35842, 35843, 35844, 35845, 35846, 35847, 35848, 35849, 35850, 35851, 35852, 35853, 35854, 35855, 35856, 35857, 35858, 35859, 35860, 35861, 35862, 35863, 35864, 35865, -1, -1, -1, 35866, 35867, 35868, 35869, 35870, 35871, 35872, 35873, 35874, 35875, 35876, 35877, 35878, 35879, 35880, 35883, 35886, 35889, 35892, 35895, 35898, 35901, 35904, 35907, 35910, 35913, 35916, 35919, 35922, 35926, 35930, 35934, 35938, 35942, 35946, 35950, 35954, 35958, 35962, 35966, 35970, 35974, 35978, 35982, 35989, -1, 35995, 35998, 36001, 36004, 36007, 36010, 36013, 36016, 36019, 36022, 36025, 36028, 36031, 36034, 36037, 36040, 36043, 36046, 36049, 36052, 36055, 36058, 36061, 36064, 36067, 36070, 36073, 36076, 36079, 36082, 36085, 36088, 36091, 36094, 36097, 36100, 36103, 36104, 36105, 36106, -1, -1, -1, -1, -1, -1, -1, -1, 36107, 36110, 36112, 36114, 36116, 36118, 36120, 36122, 36124, 36126, 36128, 36130, 36132, 36134, 36136, 36138, 36140, 36141, 36142, 36143, 36144, 36145, 36146, 36147, 36148, 36149, 36150, 36151, 36152, 36153, 36154, 36156, 36158, 36160, 36162, 36164, 36166, 36168, 36170, 36172, 36174, 36176, 36178, 36180, 36182, 36187, 36191, -1, 36193, 36194, 36195, 36196, 36197, 36198, 36199, 36200, 36201, 36202, 36203, 36204, 36205, 36206, 36207, 36208, 36209, 36210, 36211, 36212, 36213, 36214, 36215, 36216, 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, 36225, 36226, 36227, 36228, 36229, 36230, 36231, 36232, 36233, 36234, 36235, 36236, 36237, 36238, 36239, 36240, 36241, 36242, 36244, 36246, 36248, 36250, 36252, 36254, 36256, 36258, 36260, 36262, 36264, 36266, 36268, 36270, 36272, 36274, 36276, 36278, 36280, 36282, 36284, 36286, 36288, 36290, 36293, 36296, 36299, 36301, 36304, 36306, 36309, 36310, 36311, 36312, 36313, 36314, 36315, 36316, 36317, 36318, 36319, 36320, 36321, 36322, 36323, 36324, 36325, 36326, 36327, 36328, 36329, 36330, 36331, 36332, 36333, 36334, 36335, 36336, 36337, 36338, 36339, 36340, 36341, 36342, 36343, 36344, 36345, 36346, 36347, 36348, 36349, 36350, 36351, 36352, 36353, 36354, 36355, -1, 36356, 36360, 36364, 36368, 36371, 36375, 36378, 36381, 36386, 36390, 36393, 36396, 36399, 36403, 36407, 36410, 36413, 36415, 36418, 36422, 36426, 36428, 36433, 36439, 36444, 36447, 36452, 36457, 36461, 36464, 36467, 36470, 36474, 36479, 36483, 36486, 36489, 36492, 36494, 36496, 36498, 36500, 36503, 36506, 36511, 36514, 36518, 36523, 36526, 36528, 36530, 36535, 36539, 36544, 36547, 36552, 36554, 36557, 36560, 36563, 36566, 36569, 36573, 36576, 36578, 36581, 36584, 36587, 36591, 36594, 36597, 36600, 36605, 36609, 36611, 36616, 36618, 36622, 36626, 36629, 36632, 36635, 36639, 36641, 36644, 36648, 36650, 36655, 36658, 36660, 36662, 36664, 36666, 36668, 36670, 36672, 36674, 36676, 36678, 36681, 36684, 36687, 36690, 36693, 36696, 36699, 36702, 36705, 36708, 36711, 36714, 36717, 36720, 36723, 36726, 36728, 36730, 36733, 36735, 36737, 36739, 36742, 36745, 36747, 36749, 36751, 36753, 36755, 36759, 36761, 36763, 36765, 36767, 36769, 36771, 36773, 36775, 36778, 36782, 36784, 36786, 36788, 36790, 36792, 36794, 36796, 36799, 36802, 36805, 36808, 36810, 36812, 36814, 36816, 36818, 36820, 36822, 36824, 36826, 36828, 36831, 36834, 36836, 36839, 36842, 36845, 36847, 36850, 36853, 36857, 36859, 36862, 36865, 36868, 36871, 36876, 36882, 36884, 36886, 36888, 36890, 36892, 36894, 36896, 36898, 36900, 36902, 36904, 36906, 36908, 36910, 36912, 36914, 36916, 36918, 36922, 36924, 36926, 36928, 36932, 36935, 36937, 36939, 36941, 36943, 36945, 36947, 36949, 36951, 36953, 36955, 36958, 36960, 36962, 36965, 36968, 36970, 36974, 36977, 36979, 36981, 36983, 36985, 36988, 36991, 36993, 36995, 36997, 36999, 37001, 37003, 37005, 37007, 37009, 37012, 37015, 37018, 37021, 37024, 37027, 37030, 37033, 37036, 37039, 37042, 37045, 37048, 37051, 37054, 37057, 37060, 37063, 37066, 37069, 37072, 37075, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37078, 37079, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37080, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37081, 37082, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37083, 37084, 37085, 37086, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, -1, -1, 4589, -1, 4590, -1, -1, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, -1, 4601, -1, 4602, -1, -1, 4603, 4604, -1, -1, -1, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, -1, -1, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, -1, -1, -1, -1, -1, -1, 37547, 37549, 37551, 37553, 37556, 37559, 37561, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37563, 37565, 37567, 37569, 37571, -1, -1, -1, -1, -1, 4805, -1, 4807, 37577, 37578, 37579, 37580, 37581, 37582, 37583, 37584, 37585, 37586, 4819, 4821, 4823, 4825, 4827, 4829, 4831, 4833, 4835, 4837, 4839, 4841, 4843, -1, 4845, 4847, 4849, 4851, 4853, -1, 4855, -1, 4857, 4859, -1, 4861, 4863, -1, 4865, 4867, 4869, 4871, 4873, 4875, 4877, 4879, 4881, 37651, 37653, 37654, 37655, 37656, 37657, 37658, 37659, 37660, 37661, 37662, 37663, 37664, 37665, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, 37675, 37676, 37677, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37694, 37695, 37696, 37697, 37698, 37699, 37700, 37701, 37702, 37703, 37704, 37705, 37706, 37707, 37708, 37709, 37710, 37711, 37712, 37713, 37714, 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37722, 37723, 37724, 37725, 37726, 37727, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37736, 37737, 37738, 37739, 37740, 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37750, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37776, 37778, 37780, 37782, 37784, 37786, 37788, 37790, 37792, 37794, 37796, 37798, 37800, 37802, 37804, 37806, 37808, 37810, 37811, 37812, 37813, 37814, 37816, 37818, 37820, 37822, 37824, 37826, 37828, 37830, 37832, 37834, 37836, 37838, 37840, 37842, 37844, 37846, 37848, 37850, 37852, 37854, 37856, 37858, 37860, 37862, 37864, 37866, 37868, 37870, 37872, 37874, 37876, 37878, 37880, 37882, 37884, 37886, 37888, 37890, 37892, 37894, 37896, 37898, 37900, 37902, 37904, 37906, 37908, 37910, 37912, 37914, 37916, 37918, 37920, 37922, 37924, 37926, 37928, 37930, 37932, 37934, 37936, 37938, 37940, 37942, 37944, 37946, 37948, 37950, 37952, 37954, 37956, 37958, 37960, 37962, 37964, 37966, 37968, 37970, 37972, 37974, 37976, 37978, 37980, 37982, 37984, 37986, 37988, 37990, 37992, 37994, 37996, 37998, 38000, 38002, 38005, 38008, 38011, 38014, 38017, 38020, 38022, 38024, 38026, 38028, 38030, 38032, 38034, 38036, 38038, 38040, 38042, 38044, 38046, 38048, 38050, 38052, 38054, 38056, 38058, 38060, 38062, 38064, 38066, 38068, 38070, 38072, 38074, 38076, 38078, 38080, 38082, 38084, 38086, 38088, 38090, 38092, 38094, 38096, 38098, 38100, 38102, 38104, 38106, 38108, 38110, 38112, 38114, 38116, 38118, 38120, 38122, 38124, 38126, 38128, 38130, 38132, 38134, 38136, 38138, 38140, 38142, 38144, 38146, 38148, 38150, 38152, 38154, 38156, 38158, 38160, 38162, 38164, 38166, 38168, 38170, 38172, 38174, 38176, 38178, 38180, 38182, 38184, 38186, 38188, 38190, 38192, 38194, 38196, 38198, 38200, 38202, 38204, 38206, 38208, 38210, 38212, 38214, 38216, 38218, 38220, 38222, 38224, 38226, 38228, 38230, 38232, 38234, 38236, 38238, 38240, 38242, 38244, 38246, 38248, 38250, 38252, 38254, 38256, 38258, 38260, 38262, 38264, 38266, 38268, 38270, 38272, 38274, 38276, 38278, 38280, 38282, 38284, 38286, 38288, 38290, 38292, 38294, 38296, 38298, 38300, 38302, 38304, 38307, 38310, 38313, 38315, 38317, 38319, 38321, 38323, 38325, 38327, 38329, 38331, 38333, 38335, 38337, 38339, 38341, 38343, 38345, 38347, 38349, 38351, 38353, 38355, 38357, 38359, 38361, 38363, 38365, 38367, 38369, 38371, 38373, 38375, 38377, 38379, 38381, 38383, 38385, 38387, 38389, 38391, 38393, 38395, 38397, 38399, 38401, 38403, 38405, 38407, 38409, 38411, 38413, 38415, 38417, 38419, 38421, 38423, 38425, 38427, 38429, 38431, 38433, 38435, 38437, 38439, 38441, 38443, 38445, 38447, 38449, 38451, 38453, 38455, 38457, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38459, 38462, 38465, 38468, 38471, 38474, 38477, 38480, 38483, 38486, 38489, 38492, 38495, 38498, 38501, 38504, 38507, 38510, 38513, 38516, 38519, 38522, 38525, 38528, 38531, 38534, 38537, 38540, 38543, 38546, 38549, 38552, 38555, 38558, 38561, 38564, 38567, 38570, 38573, 38576, 38579, 38582, 38585, 38588, 38591, 38594, 38597, 38600, 38603, 38606, 38609, 38612, 38615, 38618, 38621, 38624, 38627, 38630, 38633, 38636, 38639, 38642, 38645, 38648, -1, -1, 38651, 38654, 38657, 38660, 38663, 38666, 38669, 38672, 38675, 38678, 38681, 38684, 38687, 38690, 38693, 38696, 38699, 38702, 38705, 38708, 38711, 38714, 38717, 38720, 38723, 38726, 38729, 38732, 38735, 38738, 38741, 38744, 38747, 38750, 38753, 38756, 38759, 38762, 38765, 38768, 38771, 38774, 38777, 38780, 38783, 38786, 38789, 38792, 38795, 38798, 38801, 38804, 38807, 38810, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38813, 38816, 38819, 38823, 38827, 38831, 38835, 38839, 38843, 38847, 38850, 38868, 38876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38880, 38881, 38882, 38883, 38884, 38885, 38886, 38887, 38888, 38889, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38890, 38891, 38892, 38893, 38894, 38895, 38896, 38897, 38898, 38899, 38900, 38901, 38902, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, -1, -1, 38911, 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919, 38920, 38921, 38922, -1, 38923, 38924, 38925, 38926, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, -1, 38942, 38943, 38944, 38945, -1, -1, -1, -1, 38946, 38948, 38950, -1, 38952, -1, 38954, 38956, 38958, 38960, 38962, 38964, 38966, 38968, 38970, 38972, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38996, 38997, 38998, 38999, 39000, 39001, 39002, 39003, 39004, 39005, 39006, 39007, 39008, 39009, 39010, 39011, 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 39023, 39024, 39025, 39026, 39027, 39028, 39029, 39030, 39031, 39032, 39033, 39034, 39035, 39036, 39037, 39038, 39039, 39040, 39041, 39042, 39043, 39044, 39045, 39046, 39047, 39048, 39049, 39050, 39051, 39052, 39053, 39054, 39055, 39056, 39057, 39058, 39059, 39060, 39061, 39062, 39063, 39064, 39065, 39066, 39067, 39068, 39069, 39070, 39071, 39072, 39073, 39074, 39075, 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39093, 39095, 39097, 39099, 39101, 39103, 39105, -1, -1, -1, -1, 39107, 39108, 39109, 39110, 39111, 39112, 39113, 39114, 39115, 39116, 39117, 39118, 39119, 39120, 39121, 39122, 39123, 39124, 39125, 39126, 39127, 39128, 39129, 39130, 39131, 39132, 39133, 39134, 39135, 39136, 39137, 39138, 39139, 39140, 39141, 39142, 39143, 39144, 39145, 39146, 39147, 39148, 39149, 39150, 39151, 39152, 39153, 39154, 39155, 39156, 39157, 39158, 39159, 39160, 39161, 39162, 39163, 39164, 39165, 39166, 39167, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 39176, 39177, 39178, 39179, 39180, 39181, 39182, 39183, 39184, 39185, 39186, 39187, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39201, 39202, 39203, 39204, 39205, 39206, 39207, 39208, 39209, 39210, 39211, 39212, 39213, 39214, 39215, 39216, 39217, 39218, 39219, 39220, 39221, 39222, 39223, 39224, 39225, 39226, 39227, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39238, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39252, 39253, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39263, 39264, 39265, 39266, 39267, 39268, 39269, 39270, 39271, 39272, 39273, 39274, 39275, 39276, 39277, 39278, 39279, 39280, 39281, 39282, 39283, 39284, 39285, 39286, 39287, 39288, 39289, 39290, 39291, 39292, 39293, 39294, 39295, 39296, -1, -1, -1, 39297, 39298, 39299, 39300, 39301, 39302, -1, -1, 39303, 39304, 39305, 39306, 39307, 39308, -1, -1, 39309, 39310, 39311, 39312, 39313, 39314, -1, -1, 39315, 39316, 39317, -1, -1, -1, 39318, 39319, 39320, 39321, 39322, 39323, 39324, -1, 39325, 39326, 39327, 39328, 39329, 39330, 39331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6564, -1, 6566, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6570, 6572, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6574, 6576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6578, 6580, -1, 6582, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6584, 6586, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6588, 6590, 6592, 6594, 6596, 6598, 6600, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6602, 6604, 6606, 6608, 6610, 6612, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39382, 39383, 39384, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39410, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 39418, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39434, 39435, 39436, 39437, 39438, 39439, 39440, 39441, 39442, 39443, 39444, 39445, 39446, 39447, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39456, 39457, 39458, 39459, 39460, 39461, 39462, 39463, 39464, 39465, 39466, -1, 39467, 39468, 39469, 39470, 39471, 39472, 39473, 39474, 39475, 39476, 39477, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39489, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39501, 39502, 39503, 39504, 39505, 39506, 39507, 39508, 39509, 39510, 39511, 39512, 39513, 39514, 39515, 39516, 39517, 39518, 39519, 39520, 39521, 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530, 39531, 39532, 39533, 39534, 39535, 39536, 39537, -1, 39538, 39539, -1, -1, 39540, -1, -1, 39541, 39542, -1, -1, 39543, 39544, 39545, 39546, -1, 39547, 39548, 39549, 39550, 39551, 39552, 39553, 39554, 39555, 39556, 39557, 39558, -1, 39559, -1, 39560, 39561, 39562, 39563, 39564, 39565, 39566, -1, 39567, 39568, 39569, 39570, 39571, 39572, 39573, 39574, 39575, 39576, 39577, 39578, 39579, 39580, 39581, 39582, 39583, 39584, 39585, 39586, 39587, 39588, 39589, 39590, 39591, 39592, 39593, 39594, 39595, 39596, 39597, 39598, 39599, 39600, 39601, 39602, 39603, 39604, 39605, 39606, 39607, 39608, 39609, 39610, 39611, 39612, 39613, 39614, 39615, 39616, 39617, 39618, 39619, 39620, 39621, 39622, 39623, 39624, 39625, 39626, 39627, 39628, 39629, 39630, 39631, -1, 39632, 39633, 39634, 39635, -1, -1, 39636, 39637, 39638, 39639, 39640, 39641, 39642, 39643, -1, 39644, 39645, 39646, 39647, 39648, 39649, 39650, -1, 39651, 39652, 39653, 39654, 39655, 39656, 39657, 39658, 39659, 39660, 39661, 39662, 39663, 39664, 39665, 39666, 39667, 39668, 39669, 39670, 39671, 39672, 39673, 39674, 39675, 39676, 39677, 39678, -1, 39679, 39680, 39681, 39682, -1, 39683, 39684, 39685, 39686, 39687, -1, 39688, -1, -1, -1, 39689, 39690, 39691, 39692, 39693, 39694, 39695, -1, 39696, 39697, 39698, 39699, 39700, 39701, 39702, 39703, 39704, 39705, 39706, 39707, 39708, 39709, 39710, 39711, 39712, 39713, 39714, 39715, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39727, 39728, 39729, 39730, 39731, 39732, 39733, 39734, 39735, 39736, 39737, 39738, 39739, 39740, 39741, 39742, 39743, 39744, 39745, 39746, 39747, 39748, 39749, 39750, 39751, 39752, 39753, 39754, 39755, 39756, 39757, 39758, 39759, 39760, 39761, 39762, 39763, 39764, 39765, 39766, 39767, 39768, 39769, 39770, 39771, 39772, 39773, 39774, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39802, 39803, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39813, 39814, 39815, 39816, 39817, 39818, 39819, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39828, 39829, 39830, 39831, 39832, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39878, 39879, 39880, 39881, 39882, 39883, 39884, 39885, 39886, 39887, 39888, 39889, 39890, 39891, 39892, 39893, 39894, 39895, 39896, 39897, 39898, 39899, 39900, 39901, 39902, 39903, 39904, 39905, 39906, 39907, 39908, 39909, 39910, 39911, 39912, 39913, 39914, 39915, 39916, 39917, 39918, 39919, 39920, 39921, 39922, 39923, 39924, 39925, 39926, 39927, 39928, 39929, 39930, 39931, 39932, 39933, 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39941, 39942, 39943, 39944, 39945, 39946, 39947, 39948, 39949, 39950, 39951, 39952, 39953, 39954, 39955, 39956, 39957, 39958, 39959, 39960, 39961, 39962, 39963, 39964, 39965, 39966, 39967, 39968, 39969, 39970, 39971, 39972, 39973, 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, 39990, 39991, 39992, 39993, 39994, 39995, 39996, 39997, 39998, 39999, 40000, 40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40035, -1, -1, 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 40060, 40061, 40062, 40063, 40064, 40065, 40066, 40067, 40068, 40069, 40070, 40071, 40072, 40073, 40074, 40075, 40076, 40077, 40078, 40079, 40080, 40081, 40082, 40083, 40084, 40085, 40086, 40087, 40088, 40089, 40090, 40091, 40092, 40093, 40094, 40095, 40096, 40097, 40098, 40099, 40100, 40101, 40102, 40103, 40104, 40105, 40106, 40107, 40108, 40109, 40110, 40111, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 40119, 40120, 40121, 40122, 40123, 40124, 40125, 40126, 40127, 40128, 40129, 40130, 40131, 40132, 40133, 40134, 40135, 40136, 40137, 40138, 40139, 40140, 40141, 40142, 40143, 40144, 40145, 40146, 40147, 40148, 40149, 40150, 40151, 40152, 40153, 40154, 40155, 40156, 40157, 40158, 40159, 40160, 40161, 40162, 40163, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40183, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40195, 40196, 40197, 40198, 40199, 40200, 40201, 40202, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40219, 40220, 40221, 40222, 40223, 40224, 40225, 40226, 40227, 40228, 40229, 40230, 40231, 40232, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40248, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, -1, -1, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40354, 40355, 40356, 40357, 40358, 40359, 40360, 40361, 40362, 40363, 40364, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, -1, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40389, 40390, 40391, 40392, 40393, 40394, 40395, 40396, 40397, 40398, 40399, 40400, 40401, 40402, 40403, 40404, 40405, 40406, 40407, 40408, -1, 40409, 40410, -1, 40411, -1, -1, 40412, -1, 40413, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, -1, 40423, 40424, 40425, 40426, -1, 40427, -1, 40428, -1, -1, -1, -1, -1, -1, 40429, -1, -1, -1, -1, 40430, -1, 40431, -1, 40432, -1, 40433, 40434, 40435, -1, 40436, 40437, -1, 40438, -1, -1, 40439, -1, 40440, -1, 40441, -1, 40442, -1, 40443, -1, 40444, 40445, -1, 40446, -1, -1, 40447, 40448, 40449, 40450, -1, 40451, 40452, 40453, 40454, 40455, 40456, 40457, -1, 40458, 40459, 40460, 40461, -1, 40462, 40463, 40464, 40465, -1, 40466, -1, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, -1, 40477, 40478, 40479, 40480, 40481, 40482, 40483, 40484, 40485, 40486, 40487, 40488, 40489, 40490, 40491, 40492, 40493, -1, -1, -1, -1, -1, 40494, 40495, 40496, -1, 40497, 40498, 40499, 40500, 40501, -1, 40502, 40503, 40504, 40505, 40506, 40507, 40508, 40509, 40510, 40511, 40512, 40513, 40514, 40515, 40516, 40517, 40518, -1, -1, -1, -1, 40519, 40521, 40523, 40525, 40527, 40529, 40531, 40533, 40535, 40537, 40539, -1, -1, -1, -1, -1, 40541, 40544, 40547, 40550, 40553, 40556, 40559, 40562, 40565, 40568, 40571, 40574, 40577, 40580, 40583, 40586, 40589, 40592, 40595, 40598, 40601, 40604, 40607, 40610, 40613, 40616, 40619, 40622, 40623, 40624, 40626, -1, 40628, 40629, 40630, 40631, 40632, 40633, 40634, 40635, 40636, 40637, 40638, 40639, 40640, 40641, 40642, 40643, 40644, 40645, 40646, 40647, 40648, 40649, 40650, 40651, 40652, 40653, 40654, 40656, 40658, 40660, 40662, 40665, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40667, 40669, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40671, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40673, 40675, 40677, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40678, 40679, 40680, 40681, 40682, 40683, 40684, 40685, 40686, 40687, 40688, 40689, 40690, 40691, 40692, 40693, 40694, 40695, 40696, 40697, 40698, 40699, 40700, 40701, 40702, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40715, 40716, 40717, 40718, 40719, 40720, 40721, -1, -1, -1, -1, 40722, 40725, 40728, 40731, 40734, 40737, 40740, 40743, 40746, -1, -1, -1, -1, -1, -1, -1, 40749, 40750, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7983, 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, 8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271, 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, -1, -1 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/decomposition.c�������������������������������������������������0000664�0000000�0000000�00000006731�14110572173�0021563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "uninorm/decomposition-table.h" int uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition) { if (uc >= 0xAC00 && uc < 0xD7A4) { /* Hangul syllable. See Unicode standard, chapter 3, section "Hangul Syllable Decomposition", See also the clarification at <https://www.unicode.org/versions/Unicode5.1.0/>, section "Clarification of Hangul Jamo Handling". */ unsigned int t; uc -= 0xAC00; t = uc % 28; *decomp_tag = UC_DECOMP_CANONICAL; if (t == 0) { unsigned int v, l; uc = uc / 28; v = uc % 21; l = uc / 21; decomposition[0] = 0x1100 + l; decomposition[1] = 0x1161 + v; return 2; } else { #if 1 /* Return the pairwise decomposition, not the full decomposition. */ decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ decomposition[1] = 0x11A7 + t; return 2; #else unsigned int v, l; uc = uc / 28; v = uc % 21; l = uc / 21; decomposition[0] = 0x1100 + l; decomposition[1] = 0x1161 + v; decomposition[2] = 0x11A7 + t; return 3; #endif } } else if (uc < 0x110000) { unsigned short entry = decomp_index (uc); if (entry != (unsigned short)(-1)) { const unsigned char *p; unsigned int element; unsigned int length; p = &gl_uninorm_decomp_chars_table[3 * (entry & 0x7FFF)]; element = (p[0] << 16) | (p[1] << 8) | p[2]; /* The first element has 5 bits for the decomposition type. */ *decomp_tag = (element >> 18) & 0x1f; length = 1; for (;;) { /* Every element has an 18 bits wide Unicode code point. */ *decomposition = element & 0x3ffff; /* Bit 23 tells whether there are more elements, */ if ((element & (1 << 23)) == 0) break; p += 3; element = (p[0] << 16) | (p[1] << 8) | p[2]; decomposition++; length++; } return length; } } return -1; } ���������������������������������������gnulib-20210822~d383792/lib/uninorm/nfc.c�����������������������������������������������������������0000664�0000000�0000000�00000002044�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form C. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" const struct unicode_normalization_form uninorm_nfc = { NF_IS_COMPOSING, uc_canonical_decomposition, uc_composition, &uninorm_nfd }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/nfd.c�����������������������������������������������������������0000664�0000000�0000000�00000002014�14110572173�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form D. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" const struct unicode_normalization_form uninorm_nfd = { 0, uc_canonical_decomposition, NULL, &uninorm_nfd }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/nfkc.c����������������������������������������������������������0000664�0000000�0000000�00000002755�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form KC. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" const struct unicode_normalization_form uninorm_nfkc = { NF_IS_COMPAT_DECOMPOSING | NF_IS_COMPOSING, uc_compat_decomposition, uc_composition, &uninorm_nfkd }; �������������������gnulib-20210822~d383792/lib/uninorm/nfkd.c����������������������������������������������������������0000664�0000000�0000000�00000002721�14110572173�0017624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form KD. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" const struct unicode_normalization_form uninorm_nfkd = { NF_IS_COMPAT_DECOMPOSING, uc_compat_decomposition, NULL, &uninorm_nfkd }; �����������������������������������������������gnulib-20210822~d383792/lib/uninorm/normalize-internal.h��������������������������������������������0000664�0000000�0000000�00000002712�14110572173�0022521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include "unitypes.h" /* Complete definition of normalization form descriptor. */ struct unicode_normalization_form { /* Bit mask containing meta-information. This must be the first field. */ unsigned int description; #define NF_IS_COMPAT_DECOMPOSING (1 << 0) #define NF_IS_COMPOSING (1 << 1) /* Function that decomposes a Unicode character. */ int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); /* Function that combines two Unicode characters, a starter and another character. */ ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); /* Decomposing variant. */ const struct unicode_normalization_form *decomposing_variant; }; ������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u-normalize-internal.h������������������������������������������0000664�0000000�0000000�00000033317�14110572173�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition and composition of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ UNIT * FUNC (uninorm_t nf, const UNIT *s, size_t n, UNIT *resultbuf, size_t *lengthp) { int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer; ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer; /* The result being accumulated. */ UNIT *result; size_t length; size_t allocated; /* The buffer for sorting. */ #define SORTBUF_PREALLOCATED 64 struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ size_t sortbuf_allocated; size_t sortbuf_count; /* Initialize the accumulator. */ if (resultbuf == NULL) { result = NULL; allocated = 0; } else { result = resultbuf; allocated = *lengthp; } length = 0; /* Initialize the buffer for sorting. */ sortbuf = sortbuf_preallocated; sortbuf_allocated = SORTBUF_PREALLOCATED; sortbuf_count = 0; { const UNIT *s_end = s + n; for (;;) { int count; ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int decomposed_count; int i; if (s < s_end) { /* Fetch the next character. */ count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s); decomposed_count = 1; /* Decompose it, recursively. It would be possible to precompute the recursive decomposition and store it in a table. But this would significantly increase the size of the decomposition tables, because for example for U+1FC1 the recursive canonical decomposition and the recursive compatibility decomposition are different. */ { int curr; for (curr = 0; curr < decomposed_count; ) { /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. all elements are atomic. */ ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int curr_decomposed_count; curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed); if (curr_decomposed_count >= 0) { /* Move curr_decomposed[0..curr_decomposed_count-1] over decomposed[curr], making room. It's not worth using memcpy() here, since the counts are so small. */ int shift = curr_decomposed_count - 1; if (shift < 0) abort (); if (shift > 0) { int j; decomposed_count += shift; if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) abort (); for (j = decomposed_count - 1 - shift; j > curr; j--) decomposed[j + shift] = decomposed[j]; } for (; shift >= 0; shift--) decomposed[curr + shift] = curr_decomposed[shift]; } else { /* decomposed[curr] is atomic. */ curr++; } } } } else { count = 0; decomposed_count = 0; } i = 0; for (;;) { ucs4_t uc; int ccc; if (s < s_end) { /* Fetch the next character from the decomposition. */ if (i == decomposed_count) break; uc = decomposed[i]; ccc = uc_combining_class (uc); } else { /* End of string reached. */ uc = 0; ccc = 0; } if (ccc == 0) { size_t j; /* Apply the canonical ordering algorithm to the accumulated sequence of characters. */ if (sortbuf_count > 1) gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, sortbuf + sortbuf_count); if (composer != NULL) { /* Attempt to combine decomposed characters, as specified in the Unicode Standard Annex #15 "Unicode Normalization Forms". We need to check 1. whether the first accumulated character is a "starter" (i.e. has ccc = 0). This is usually the case. But when the string starts with a non-starter, the sortbuf also starts with a non-starter. Btw, this check could also be omitted, because the composition table has only entries (code1, code2) for which code1 is a starter; if the first accumulated character is not a starter, no lookup will succeed. 2. If the sortbuf has more than one character, check for each of these characters that are not "blocked" from the starter (i.e. have a ccc that is higher than the ccc of the previous character) whether it can be combined with the first character. 3. If only one character is left in sortbuf, check whether it can be combined with the next character (also a starter). */ if (sortbuf_count > 0 && sortbuf[0].ccc == 0) { for (j = 1; j < sortbuf_count; ) { if (sortbuf[j].ccc > sortbuf[j - 1].ccc) { ucs4_t combined = composer (sortbuf[0].code, sortbuf[j].code); if (combined) { size_t k; sortbuf[0].code = combined; /* sortbuf[0].ccc = 0, still valid. */ for (k = j + 1; k < sortbuf_count; k++) sortbuf[k - 1] = sortbuf[k]; sortbuf_count--; continue; } } j++; } if (s < s_end && sortbuf_count == 1) { ucs4_t combined = composer (sortbuf[0].code, uc); if (combined) { uc = combined; ccc = 0; /* uc could be further combined with subsequent characters. So don't put it into sortbuf[0] in this round, only in the next round. */ sortbuf_count = 0; } } } } for (j = 0; j < sortbuf_count; j++) { ucs4_t muc = sortbuf[j].code; /* Append muc to the result accumulator. */ if (length < allocated) { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail; } if (ret >= 0) { length += ret; goto done_appending; } } { size_t old_allocated = allocated; size_t new_allocated = 2 * old_allocated; if (new_allocated < 64) new_allocated = 64; if (new_allocated < old_allocated) /* integer overflow? */ abort (); { UNIT *larger_result; if (result == NULL) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } } else if (result == resultbuf) { larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } U_CPY (larger_result, resultbuf, length); } else { larger_result = (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); if (larger_result == NULL) { errno = ENOMEM; goto fail; } } result = larger_result; allocated = new_allocated; { int ret = U_UCTOMB (result + length, muc, allocated - length); if (ret == -1) { errno = EINVAL; goto fail; } if (ret < 0) abort (); length += ret; goto done_appending; } } } done_appending: ; } /* sortbuf is now empty. */ sortbuf_count = 0; } if (!(s < s_end)) /* End of string reached. */ break; /* Append (uc, ccc) to sortbuf. */ if (sortbuf_count == sortbuf_allocated) { struct ucs4_with_ccc *new_sortbuf; sortbuf_allocated = 2 * sortbuf_allocated; if (sortbuf_allocated < sortbuf_count) /* integer overflow? */ abort (); new_sortbuf = (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc)); if (new_sortbuf == NULL) { errno = ENOMEM; goto fail; } memcpy (new_sortbuf, sortbuf, sortbuf_count * sizeof (struct ucs4_with_ccc)); if (sortbuf != sortbuf_preallocated) free (sortbuf); sortbuf = new_sortbuf; } sortbuf[sortbuf_count].code = uc; sortbuf[sortbuf_count].ccc = ccc; sortbuf_count++; i++; } if (!(s < s_end)) /* End of string reached. */ break; s += count; } } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; goto fail; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ UNIT *memory; memory = (UNIT *) realloc (result, length * sizeof (UNIT)); if (memory != NULL) result = memory; } if (sortbuf_count > 0) abort (); if (sortbuf != sortbuf_preallocated) free (sortbuf); *lengthp = length; return result; fail: { int saved_errno = errno; if (sortbuf != sortbuf_preallocated) free (sortbuf); if (result != resultbuf) free (result); errno = saved_errno; } return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u-normcmp.h�����������������������������������������������������0000664�0000000�0000000�00000004360�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, uninorm_t nf, int *resultp) { UNIT buf1[2048 / sizeof (UNIT)]; UNIT buf2[2048 / sizeof (UNIT)]; UNIT *norms1; size_t norms1_length; UNIT *norms2; size_t norms2_length; int cmp; /* Normalize S1. */ norms1_length = sizeof (buf1) / sizeof (UNIT); norms1 = U_NORMALIZE (nf, s1, n1, buf1, &norms1_length); if (norms1 == NULL) /* errno is set here. */ return -1; /* Normalize S2. */ norms2_length = sizeof (buf2) / sizeof (UNIT); norms2 = U_NORMALIZE (nf, s2, n2, buf2, &norms2_length); if (norms2 == NULL) { if (norms1 != buf1) { int saved_errno = errno; free (norms1); errno = saved_errno; } return -1; } /* Compare the normalized strings. */ cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); if (cmp > 0) cmp = 1; else if (cmp < 0) cmp = -1; if (norms2 != buf2) free (norms2); if (norms1 != buf1) free (norms1); *resultp = cmp; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u-normcoll.h����������������������������������������������������0000664�0000000�0000000�00000004563�14110572173�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, uninorm_t nf, int *resultp) { char buf1[2048]; char buf2[2048]; char *transformed1; size_t transformed1_length; char *transformed2; size_t transformed2_length; int cmp; /* Normalize and transform S1. */ transformed1_length = sizeof (buf1); transformed1 = U_NORMXFRM (s1, n1, nf, buf1, &transformed1_length); if (transformed1 == NULL) /* errno is set here. */ return -1; /* Normalize and transform S2. */ transformed2_length = sizeof (buf2); transformed2 = U_NORMXFRM (s2, n2, nf, buf2, &transformed2_length); if (transformed2 == NULL) { if (transformed1 != buf1) { int saved_errno = errno; free (transformed1); errno = saved_errno; } return -1; } /* Compare the transformed strings. */ cmp = memcmp2 (transformed1, transformed1_length, transformed2, transformed2_length); if (cmp < 0) cmp = -1; else if (cmp > 0) cmp = 1; if (transformed2 != buf2) free (transformed2); if (transformed1 != buf1) free (transformed1); *resultp = cmp; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u-normxfrm.h����������������������������������������������������0000664�0000000�0000000�00000005557�14110572173�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ char * FUNC (const UNIT *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp) { UNIT normsbuf[2048 / sizeof (UNIT)]; UNIT *norms; size_t norms_length; char convsbuf[2048]; char *convs; size_t convs_length; char *result; /* Normalize the Unicode string. */ norms_length = sizeof (normsbuf) / sizeof (UNIT); norms = U_NORMALIZE (nf, s, n, normsbuf, &norms_length); if (norms == NULL) /* errno is set here. */ return NULL; /* Convert it to locale encoding. */ convs_length = sizeof (convsbuf) - 1; convs = U_CONV_TO_ENCODING (locale_charset (), iconveh_error, norms, norms_length, NULL, convsbuf, &convs_length); if (convs == NULL) { if (norms != normsbuf) { int saved_errno = errno; free (norms); errno = saved_errno; } return NULL; } if (norms != normsbuf) free (norms); /* Ensure one more byte is available. */ if (convs != convsbuf) { char *memory = (char *) realloc (convs, convs_length + 1); if (memory == NULL) { free (convs); errno = ENOMEM; return NULL; } convs = memory; } /* Apply locale dependent transformations for comparison. */ result = amemxfrm (convs, convs_length, resultbuf, lengthp); if (result == NULL) { if (convs != convsbuf) { int saved_errno = errno; free (convs); errno = saved_errno; } return NULL; } if (convs != convsbuf) free (convs); return result; } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u16-normalize.c�������������������������������������������������0000664�0000000�0000000�00000003145�14110572173�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "unictype.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" #define FUNC u16_normalize #define UNIT uint16_t #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #define U_UCTOMB u16_uctomb #define U_CPY u16_cpy #include "u-normalize-internal.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u16-normcmp.c���������������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "unistr.h" #define FUNC u16_normcmp #define UNIT uint16_t #define U_NORMALIZE u16_normalize #define U_CMP2 u16_cmp2 #include "u-normcmp.h" �������������������������������������gnulib-20210822~d383792/lib/uninorm/u16-normcoll.c��������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0021137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u16_normcoll #define UNIT uint16_t #define U_NORMXFRM u16_normxfrm #include "u-normcoll.h" ��������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u16-normxfrm.c��������������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u16_normxfrm #define UNIT uint16_t #define U_NORMALIZE u16_normalize #define U_CONV_TO_ENCODING u16_conv_to_encoding #include "u-normxfrm.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u32-normalize.c�������������������������������������������������0000664�0000000�0000000�00000002337�14110572173�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. 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/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "unictype.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" #define FUNC u32_normalize #define UNIT uint32_t #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #define U_UCTOMB u32_uctomb #define U_CPY u32_cpy #include "u-normalize-internal.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u32-normcmp.c���������������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "unistr.h" #define FUNC u32_normcmp #define UNIT uint32_t #define U_NORMALIZE u32_normalize #define U_CMP2 u32_cmp2 #include "u-normcmp.h" �������������������������������������gnulib-20210822~d383792/lib/uninorm/u32-normcoll.c��������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0021135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u32_normcoll #define UNIT uint32_t #define U_NORMXFRM u32_normxfrm #include "u-normcoll.h" ��������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u32-normxfrm.c��������������������������������������������������0000664�0000000�0000000�00000003034�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u32_normxfrm #define UNIT uint32_t #define U_NORMALIZE u32_normalize #define U_CONV_TO_ENCODING u32_conv_to_encoding #include "u-normxfrm.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u8-normalize.c��������������������������������������������������0000664�0000000�0000000�00000003137�14110572173�0021236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "unictype.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" #define FUNC u8_normalize #define UNIT uint8_t #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #define U_UCTOMB u8_uctomb #define U_CPY u8_cpy #include "u-normalize-internal.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u8-normcmp.c����������������������������������������������������0000664�0000000�0000000�00000002726�14110572173�0020714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "minmax.h" #include "unistr.h" #define FUNC u8_normcmp #define UNIT uint8_t #define U_NORMALIZE u8_normalize #define U_CMP2 u8_cmp2 #include "u-normcmp.h" ������������������������������������������gnulib-20210822~d383792/lib/uninorm/u8-normcoll.c���������������������������������������������������0000664�0000000�0000000�00000002676�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "memcmp2.h" #define FUNC u8_normcoll #define UNIT uint8_t #define U_NORMXFRM u8_normxfrm #include "u-normcoll.h" ������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/u8-normxfrm.c���������������������������������������������������0000664�0000000�0000000�00000003027�14110572173�0021104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stdlib.h> #include "localcharset.h" #include "uniconv.h" #include "amemxfrm.h" #define FUNC u8_normxfrm #define UNIT uint8_t #define U_NORMALIZE u8_normalize #define U_CONV_TO_ENCODING u8_conv_to_encoding #include "u-normxfrm.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uninorm/uninorm-filter.c������������������������������������������������0000664�0000000�0000000�00000033167�14110572173�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stream-based normalization of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "unictype.h" #include "normalize-internal.h" #include "uninorm/decompose-internal.h" struct uninorm_filter { /* Characteristics of the normalization form. */ int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); /* The encapsulated stream. */ int (*stream_func) (void *stream_data, ucs4_t uc); void *stream_data; /* The buffer for sorting. */ #define SORTBUF_PREALLOCATED 64 struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ size_t sortbuf_allocated; size_t sortbuf_count; }; struct uninorm_filter * uninorm_filter_create (uninorm_t nf, int (*stream_func) (void *stream_data, ucs4_t uc), void *stream_data) { struct uninorm_filter *filter = (struct uninorm_filter *) malloc (sizeof (struct uninorm_filter)); if (filter == NULL) /* errno is ENOMEM. */ return NULL; filter->decomposer = nf->decomposer; filter->composer = nf->composer; filter->stream_func = stream_func; filter->stream_data = stream_data; filter->sortbuf = filter->sortbuf_preallocated; filter->sortbuf_allocated = SORTBUF_PREALLOCATED; filter->sortbuf_count = 0; return filter; } int uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc_arg) { ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int decomposed_count; /* Accept the next character. */ decomposed[0] = uc_arg; decomposed_count = 1; /* Decompose it, recursively. It would be possible to precompute the recursive decomposition and store it in a table. But this would significantly increase the size of the decomposition tables, because for example for U+1FC1 the recursive canonical decomposition and the recursive compatibility decomposition are different. */ { int curr; for (curr = 0; curr < decomposed_count; ) { /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. all elements are atomic. */ ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int curr_decomposed_count; curr_decomposed_count = filter->decomposer (decomposed[curr], curr_decomposed); if (curr_decomposed_count >= 0) { /* Move curr_decomposed[0..curr_decomposed_count-1] over decomposed[curr], making room. It's not worth using memcpy() here, since the counts are so small. */ int shift = curr_decomposed_count - 1; if (shift < 0) abort (); if (shift > 0) { int j; decomposed_count += shift; if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) abort (); for (j = decomposed_count - 1 - shift; j > curr; j--) decomposed[j + shift] = decomposed[j]; } for (; shift >= 0; shift--) decomposed[curr + shift] = curr_decomposed[shift]; } else { /* decomposed[curr] is atomic. */ curr++; } } } { /* Cache sortbuf and sortbuf_count in local register variables. */ struct ucs4_with_ccc *sortbuf = filter->sortbuf; size_t sortbuf_count = filter->sortbuf_count; int i; for (i = 0; i < decomposed_count; i++) { /* Fetch the next character from the decomposition. */ ucs4_t uc = decomposed[i]; int ccc = uc_combining_class (uc); if (ccc == 0) { size_t j; /* Apply the canonical ordering algorithm to the accumulated sequence of characters. */ if (sortbuf_count > 1) gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, sortbuf + sortbuf_count); if (filter->composer != NULL) { /* Attempt to combine decomposed characters, as specified in the Unicode Standard Annex #15 "Unicode Normalization Forms". We need to check 1. whether the first accumulated character is a "starter" (i.e. has ccc = 0). This is usually the case. But when the string starts with a non-starter, the sortbuf also starts with a non-starter. Btw, this check could also be omitted, because the composition table has only entries (code1, code2) for which code1 is a starter; if the first accumulated character is not a starter, no lookup will succeed. 2. If the sortbuf has more than one character, check for each of these characters that are not "blocked" from the starter (i.e. have a ccc that is higher than the ccc of the previous character) whether it can be combined with the first character. 3. If only one character is left in sortbuf, check whether it can be combined with the next character (also a starter). */ if (sortbuf_count > 0 && sortbuf[0].ccc == 0) { for (j = 1; j < sortbuf_count; ) { if (sortbuf[j].ccc > sortbuf[j - 1].ccc) { ucs4_t combined = filter->composer (sortbuf[0].code, sortbuf[j].code); if (combined) { size_t k; sortbuf[0].code = combined; /* sortbuf[0].ccc = 0, still valid. */ for (k = j + 1; k < sortbuf_count; k++) sortbuf[k - 1] = sortbuf[k]; sortbuf_count--; continue; } } j++; } if (sortbuf_count == 1) { ucs4_t combined = filter->composer (sortbuf[0].code, uc); if (combined) { uc = combined; ccc = 0; /* uc could be further combined with subsequent characters. So don't put it into sortbuf[0] in this round, only in the next round. */ sortbuf_count = 0; } } } } for (j = 0; j < sortbuf_count; j++) { ucs4_t muc = sortbuf[j].code; /* Output muc to the encapsulated stream. */ int ret = filter->stream_func (filter->stream_data, muc); if (ret < 0) { /* errno is set here. */ filter->sortbuf_count = 0; return -1; } } /* sortbuf is now empty. */ sortbuf_count = 0; } /* Append (uc, ccc) to sortbuf. */ if (sortbuf_count == filter->sortbuf_allocated) { struct ucs4_with_ccc *new_sortbuf; filter->sortbuf_allocated = 2 * filter->sortbuf_allocated; if (filter->sortbuf_allocated < sortbuf_count) /* integer overflow? */ abort (); new_sortbuf = (struct ucs4_with_ccc *) malloc (2 * filter->sortbuf_allocated * sizeof (struct ucs4_with_ccc)); if (new_sortbuf == NULL) { /* errno is ENOMEM. */ filter->sortbuf_count = sortbuf_count; return -1; } memcpy (new_sortbuf, filter->sortbuf, sortbuf_count * sizeof (struct ucs4_with_ccc)); if (filter->sortbuf != filter->sortbuf_preallocated) free (filter->sortbuf); filter->sortbuf = new_sortbuf; /* Update cache of filter->sortbuf. */ sortbuf = filter->sortbuf; } sortbuf[sortbuf_count].code = uc; sortbuf[sortbuf_count].ccc = ccc; sortbuf_count++; } filter->sortbuf_count = sortbuf_count; } return 0; } /* Bring data buffered in the filter to its destination, the encapsulated stream. Return 0 if successful, or -1 with errno set upon failure. Note! If after calling this function, additional characters are written into the filter, the resulting character sequence in the encapsulated stream will not necessarily be normalized. */ int uninorm_filter_flush (struct uninorm_filter *filter) { /* Cache sortbuf and sortbuf_count in local register variables. */ struct ucs4_with_ccc * const sortbuf = filter->sortbuf; size_t sortbuf_count = filter->sortbuf_count; size_t j; /* Apply the canonical ordering algorithm to the accumulated sequence of characters. */ if (sortbuf_count > 1) gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, sortbuf + sortbuf_count); if (filter->composer != NULL) { /* Attempt to combine decomposed characters, as specified in the Unicode Standard Annex #15 "Unicode Normalization Forms". We need to check 1. whether the first accumulated character is a "starter" (i.e. has ccc = 0). This is usually the case. But when the string starts with a non-starter, the sortbuf also starts with a non-starter. Btw, this check could also be omitted, because the composition table has only entries (code1, code2) for which code1 is a starter; if the first accumulated character is not a starter, no lookup will succeed. 2. If the sortbuf has more than one character, check for each of these characters that are not "blocked" from the starter (i.e. have a ccc that is higher than the ccc of the previous character) whether it can be combined with the first character. 3. If only one character is left in sortbuf, check whether it can be combined with the next character (also a starter). */ if (sortbuf_count > 0 && sortbuf[0].ccc == 0) { for (j = 1; j < sortbuf_count; ) { if (sortbuf[j].ccc > sortbuf[j - 1].ccc) { ucs4_t combined = filter->composer (sortbuf[0].code, sortbuf[j].code); if (combined) { size_t k; sortbuf[0].code = combined; /* sortbuf[0].ccc = 0, still valid. */ for (k = j + 1; k < sortbuf_count; k++) sortbuf[k - 1] = sortbuf[k]; sortbuf_count--; continue; } } j++; } } } for (j = 0; j < sortbuf_count; j++) { ucs4_t muc = sortbuf[j].code; /* Output muc to the encapsulated stream. */ int ret = filter->stream_func (filter->stream_data, muc); if (ret < 0) { /* errno is set here. */ filter->sortbuf_count = 0; return -1; } } /* sortbuf is now empty. */ filter->sortbuf_count = 0; return 0; } /* Bring data buffered in the filter to its destination, the encapsulated stream, then close and free the filter. Return 0 if successful, or -1 with errno set upon failure. */ int uninorm_filter_free (struct uninorm_filter *filter) { int ret = uninorm_filter_flush (filter); if (ret < 0) /* errno is set here. */ return -1; if (filter->sortbuf_count > 0) abort (); if (filter->sortbuf != filter->sortbuf_preallocated) free (filter->sortbuf); free (filter); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistd--.h��������������������������������������������������������������0000664�0000000�0000000�00000001744�14110572173�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like unistd.h, but redefine some names to avoid glitches. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <unistd.h> #include "unistd-safer.h" #undef dup #define dup dup_safer #undef pipe #define pipe pipe_safer #if GNULIB_PIPE2_SAFER # undef pipe2 # define pipe2 pipe2_safer #endif ����������������������������gnulib-20210822~d383792/lib/unistd-safer.h����������������������������������������������������������0000664�0000000�0000000�00000002035�14110572173�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke unistd-like functions, but avoid some glitches. Copyright (C) 2001, 2003, 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Eric Blake. */ int dup_safer (int); int fd_safer (int); int pipe_safer (int[2]); #if GNULIB_FD_SAFER_FLAG int dup_safer_flag (int, int); int fd_safer_flag (int, int); #endif #if GNULIB_PIPE2_SAFER int pipe2_safer (int[2], int); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistd.c����������������������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <unistd.h>. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistd.in.h�������������������������������������������������������������0000664�0000000�0000000�00000234376�14110572173�0017150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-2021 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/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stddef.h> #endif /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ /* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include <fcntl.h> #endif /* mingw fails to declare _exit in <unistd.h>. */ /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h #endif /* Native Windows platforms declare _chdir, _getcwd, _rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), _lseek(), _read(), _unlink(), _write() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> # include <direct.h> #endif /* Native Windows platforms declare _execl*, _execv* in <process.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <process.h> #endif /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include <netdb.h> #endif /* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in <sys/random.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) || defined __sun \ || defined __ANDROID__) \ && @UNISTD_H_HAVE_SYS_RANDOM_H@ \ && !defined __GLIBC__ # include <sys/random.h> #endif /* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && !defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ /* Get off_t, ssize_t, mode_t. */ #include <sys/types.h> /* 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. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include <getopt-cdefs.h> # include <getopt-pfx-core.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if @GNULIB_ACCESS@ # if @REPLACE_ACCESS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access rpl_access # endif _GL_FUNCDECL_RPL (access, int, (const char *file, int mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #elif defined GNULIB_POSIXCHECK # undef access # if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "access does not always support X_OK - " "use gnulib module access for portability; " "also, this function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif @GNULIB_MDA_ACCESS@ /* On native Windows, map 'access' to '_access', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::access always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #endif #if @GNULIB_CHDIR@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " "use gnulib module chdir for portability"); # endif #elif @GNULIB_MDA_CHDIR@ /* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ # if @REPLACE_CHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chown # define chown rpl_chown # endif _GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); # else # if !@HAVE_CHOWN@ _GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); # endif _GL_CXXALIASWARN (chown); #elif defined GNULIB_POSIXCHECK # undef chown # if HAVE_RAW_DECL_CHOWN _GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " "doesn't treat a uid or gid of -1 on some systems - " "use gnulib module chown for portability"); # endif #endif #if @GNULIB_CLOSE@ # if @REPLACE_CLOSE@ /* Automatically included by modules that need a replacement for close. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close rpl_close # endif _GL_FUNCDECL_RPL (close, int, (int fd)); _GL_CXXALIAS_RPL (close, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef close # define close close_used_without_requesting_gnulib_module_close #elif defined GNULIB_POSIXCHECK # undef close /* Assume close is always declared. */ _GL_WARN_ON_USE (close, "close does not portably work on sockets - " "use gnulib module close for portability"); #elif @GNULIB_MDA_CLOSE@ /* On native Windows, map 'close' to '_close', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::close always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #endif #if @GNULIB_COPY_FILE_RANGE@ # if !@HAVE_COPY_FILE_RANGE@ _GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); _GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIASWARN (copy_file_range); #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_COPY_FILE_RANGE _GL_WARN_ON_USE (copy_file_range, "copy_file_range is unportable - " "use gnulib module copy_file_range for portability"); # endif #endif #if @GNULIB_DUP@ # if @REPLACE_DUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup rpl_dup # endif _GL_FUNCDECL_RPL (dup, int, (int oldfd)); _GL_CXXALIAS_RPL (dup, int, (int oldfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #elif defined GNULIB_POSIXCHECK # undef dup # if HAVE_RAW_DECL_DUP _GL_WARN_ON_USE (dup, "dup is unportable - " "use gnulib module dup for portability"); # endif #elif @GNULIB_MDA_DUP@ /* On native Windows, map 'dup' to '_dup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #endif #if @GNULIB_DUP2@ /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if NEWFD = OLDFD, otherwise close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #elif @GNULIB_MDA_DUP2@ /* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup2 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if defined __CYGWIN__ && !defined __i386__ /* The 'environ' variable is defined in a DLL. Therefore its declaration needs the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. This leads to a link error on 64-bit Cygwin when the option -Wl,--disable-auto-import is in use. */ _GL_EXTERN_C __declspec(dllimport) char **environ; # endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include <TargetConditionals.h> # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " "use gnulib module environ for portability") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_EXECL@ # if @REPLACE_EXECL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl rpl_execl # endif _GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #elif defined GNULIB_POSIXCHECK # undef execl # if HAVE_RAW_DECL_EXECL _GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " "use gnulib module execl for portability"); # endif #elif @GNULIB_MDA_EXECL@ /* On native Windows, map 'execl' to '_execl', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execl always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl _execl # endif _GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #endif #if @GNULIB_EXECLE@ # if @REPLACE_EXECLE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle rpl_execle # endif _GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #elif defined GNULIB_POSIXCHECK # undef execle # if HAVE_RAW_DECL_EXECLE _GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " "use gnulib module execle for portability"); # endif #elif @GNULIB_MDA_EXECLE@ /* On native Windows, map 'execle' to '_execle', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execle always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle _execle # endif _GL_CXXALIAS_MDA (execle, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #endif #if @GNULIB_EXECLP@ # if @REPLACE_EXECLP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp rpl_execlp # endif _GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #elif defined GNULIB_POSIXCHECK # undef execlp # if HAVE_RAW_DECL_EXECLP _GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " "use gnulib module execlp for portability"); # endif #elif @GNULIB_MDA_EXECLP@ /* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execlp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp _execlp # endif _GL_CXXALIAS_MDA (execlp, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #endif #if @GNULIB_EXECV@ # if @REPLACE_EXECV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv rpl_execv # endif _GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #elif defined GNULIB_POSIXCHECK # undef execv # if HAVE_RAW_DECL_EXECV _GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " "use gnulib module execv for portability"); # endif #elif @GNULIB_MDA_EXECV@ /* On native Windows, map 'execv' to '_execv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv _execv # endif _GL_CXXALIAS_MDA_CAST (execv, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #endif #if @GNULIB_EXECVE@ # if @REPLACE_EXECVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve rpl_execve # endif _GL_FUNCDECL_RPL (execve, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execve, int, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #elif defined GNULIB_POSIXCHECK # undef execve # if HAVE_RAW_DECL_EXECVE _GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " "use gnulib module execve for portability"); # endif #elif @GNULIB_MDA_EXECVE@ /* On native Windows, map 'execve' to '_execve', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execve always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve _execve # endif _GL_CXXALIAS_MDA_CAST (execve, intptr_t, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #endif #if @GNULIB_EXECVP@ # if @REPLACE_EXECVP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp rpl_execvp # endif _GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #elif defined GNULIB_POSIXCHECK # undef execvp # if HAVE_RAW_DECL_EXECVP _GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " "use gnulib module execvp for portability"); # endif #elif @GNULIB_MDA_EXECVP@ /* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp _execvp # endif _GL_CXXALIAS_MDA_CAST (execvp, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #endif #if @GNULIB_EXECVPE@ # if @REPLACE_EXECVPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe rpl_execvpe # endif _GL_FUNCDECL_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env)); # else # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execvpe); #elif defined GNULIB_POSIXCHECK # undef execvpe # if HAVE_RAW_DECL_EXECVPE _GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " "use gnulib module execvpe for portability"); # endif #elif @GNULIB_MDA_EXECVPE@ /* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe _execvpe # endif _GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, (const char *program, char * const *argv, char * const *env)); # elif @HAVE_EXECVPE@ # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_EXECVPE@ _GL_CXXALIASWARN (execvpe); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module fchownat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif _GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #elif @GNULIB_MDA_GETCWD@ /* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getcwd always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif /* Need to cast, because on mingw, the second parameter is either 'int size' or 'size_t size'. */ _GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); # else _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif /* Need to cast, because on AIX, the parameter list is (...). */ _GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETENTROPY@ /* Fill a buffer with random bytes. */ # if !@HAVE_GETENTROPY@ _GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); # endif _GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); _GL_CXXALIASWARN (getentropy); #elif defined GNULIB_POSIXCHECK # undef getentropy # if HAVE_RAW_DECL_GETENTROPY _GL_WARN_ON_USE (getentropy, "getentropy is unportable - " "use gnulib module getentropy for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # if defined __hpux _GL_FUNCDECL_SYS (getpagesize, int, (void)); # endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include <OS.h> # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include <sys/param.h> # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETPASS@ /* Function getpass() from module 'getpass': Read a password from /dev/tty or stdin. Function getpass() from module 'getpass-gnu': Read a password of arbitrary length from /dev/tty or stdin. */ # if @REPLACE_GETPASS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpass # define getpass rpl_getpass # endif _GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); # else # if !@HAVE_GETPASS@ _GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); # endif _GL_CXXALIASWARN (getpass); #elif defined GNULIB_POSIXCHECK # undef getpass # if HAVE_RAW_DECL_GETPASS _GL_WARN_ON_USE (getpass, "getpass is unportable - " "use gnulib module getpass or getpass-gnu for portability"); # endif #endif #if @GNULIB_MDA_GETPID@ /* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getpid always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpid # define getpid _getpid # endif _GL_CXXALIAS_MDA (getpid, int, (void)); # else _GL_CXXALIAS_SYS (getpid, pid_t, (void)); # endif _GL_CXXALIASWARN (getpid); #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif # define GNULIB_defined_isatty 1 _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #elif @GNULIB_MDA_ISATTY@ /* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::isatty always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #elif @GNULIB_MDA_LSEEK@ /* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lseek always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #elif @GNULIB_MDA_READ@ /* On native Windows, map 'read' to '_read', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::read always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #elif @GNULIB_MDA_RMDIR@ /* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::rmdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_MDA_SWAB@ /* On native Windows, map 'swab' to '_swab', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::swab always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef swab # define swab _swab # endif /* Need to cast, because in old mingw the arguments are (const char *from, char *to, size_t n). */ _GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); # else # if defined __hpux /* HP-UX */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); # elif defined __sun && !defined _XPG4 /* Solaris */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); # else _GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); # endif # endif _GL_CXXALIASWARN (swab); #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_DECL_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif _GL_CXXALIASWARN (truncate); #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #elif @GNULIB_MDA_UNLINK@ /* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::unlink always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module unlinkat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif /* Need to cast, because on Haiku, the first parameter is unsigned int n. */ _GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count)); # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #elif @GNULIB_MDA_WRITE@ /* On native Windows, map 'write' to '_write', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::write always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio.in.h�����������������������������������������������������������0000664�0000000�0000000�00000023647�14110572173�0017475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary Unicode string functions. Copyright (C) 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNISTDIO_H #define _UNISTDIO_H #include "unitypes.h" /* Get size_t. */ #include <stddef.h> /* Get FILE. */ #include <stdio.h> /* Get va_list. */ #include <stdarg.h> #ifdef __cplusplus extern "C" { #endif /* These work like the printf function family. In the format string: The format directive 'U' takes an UTF-8 string (const uint8_t *). The format directive 'lU' takes an UTF-16 string (const uint16_t *). The format directive 'llU' takes an UTF-32 string (const uint32_t *). The prefix (ulc_, u8_, u16_, u16_) indicates the type of the resulting string. The prefix 'ulc' stands for "locale encoded". An infix 'v' indicates that a va_list is passed instead of multiple arguments. The functions *sprintf have a 'buf' argument that is assumed to be large enough. (DANGEROUS! Overflowing the buffer will crash the program.) The functions *snprintf have a 'buf' argument that is assumed to be 'size' units large. (DANGEROUS! The resulting string might be truncated in the middle of a multibyte character.) The functions *asprintf have a 'resultp' argument. The result will be freshly allocated and stored in *resultp. The functions *asnprintf have a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ /* ASCII format string, result in locale dependent encoded 'char *'. */ extern int ulc_sprintf (char *_UC_RESTRICT buf, const char *format, ...); extern int ulc_snprintf (char *_UC_RESTRICT buf, size_t size, const char *format, ...); extern int ulc_asprintf (char **resultp, const char *format, ...); extern char * ulc_asnprintf (char *_UC_RESTRICT resultbuf, size_t *lengthp, const char *format, ...); extern int ulc_vsprintf (char *_UC_RESTRICT buf, const char *format, va_list ap); extern int ulc_vsnprintf (char *_UC_RESTRICT buf, size_t size, const char *format, va_list ap); extern int ulc_vasprintf (char **resultp, const char *format, va_list ap); extern char * ulc_vasnprintf (char *_UC_RESTRICT resultbuf, size_t *lengthp, const char *format, va_list ap); /* ASCII format string, result in UTF-8 format. */ extern int u8_sprintf (uint8_t *buf, const char *format, ...); extern int u8_snprintf (uint8_t *buf, size_t size, const char *format, ...); extern int u8_asprintf (uint8_t **resultp, const char *format, ...); extern uint8_t * u8_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...); extern int u8_vsprintf (uint8_t *buf, const char *format, va_list ap); extern int u8_vsnprintf (uint8_t *buf, size_t size, const char *format, va_list ap); extern int u8_vasprintf (uint8_t **resultp, const char *format, va_list ap); extern uint8_t * u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, va_list ap); /* UTF-8 format string, result in UTF-8 format. */ extern int u8_u8_sprintf (uint8_t *_UC_RESTRICT buf, const uint8_t *format, ...); extern int u8_u8_snprintf (uint8_t *_UC_RESTRICT buf, size_t size, const uint8_t *format, ...); extern int u8_u8_asprintf (uint8_t **resultp, const uint8_t *format, ...); extern uint8_t * u8_u8_asnprintf (uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint8_t *format, ...); extern int u8_u8_vsprintf (uint8_t *_UC_RESTRICT buf, const uint8_t *format, va_list ap); extern int u8_u8_vsnprintf (uint8_t *_UC_RESTRICT buf, size_t size, const uint8_t *format, va_list ap); extern int u8_u8_vasprintf (uint8_t **resultp, const uint8_t *format, va_list ap); extern uint8_t * u8_u8_vasnprintf (uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint8_t *format, va_list ap); /* ASCII format string, result in UTF-16 format. */ extern int u16_sprintf (uint16_t *buf, const char *format, ...); extern int u16_snprintf (uint16_t *buf, size_t size, const char *format, ...); extern int u16_asprintf (uint16_t **resultp, const char *format, ...); extern uint16_t * u16_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...); extern int u16_vsprintf (uint16_t *buf, const char *format, va_list ap); extern int u16_vsnprintf (uint16_t *buf, size_t size, const char *format, va_list ap); extern int u16_vasprintf (uint16_t **resultp, const char *format, va_list ap); extern uint16_t * u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, va_list ap); /* UTF-16 format string, result in UTF-16 format. */ extern int u16_u16_sprintf (uint16_t *_UC_RESTRICT buf, const uint16_t *format, ...); extern int u16_u16_snprintf (uint16_t *_UC_RESTRICT buf, size_t size, const uint16_t *format, ...); extern int u16_u16_asprintf (uint16_t **resultp, const uint16_t *format, ...); extern uint16_t * u16_u16_asnprintf (uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint16_t *format, ...); extern int u16_u16_vsprintf (uint16_t *_UC_RESTRICT buf, const uint16_t *format, va_list ap); extern int u16_u16_vsnprintf (uint16_t *_UC_RESTRICT buf, size_t size, const uint16_t *format, va_list ap); extern int u16_u16_vasprintf (uint16_t **resultp, const uint16_t *format, va_list ap); extern uint16_t * u16_u16_vasnprintf (uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint16_t *format, va_list ap); /* ASCII format string, result in UTF-32 format. */ extern int u32_sprintf (uint32_t *buf, const char *format, ...); extern int u32_snprintf (uint32_t *buf, size_t size, const char *format, ...); extern int u32_asprintf (uint32_t **resultp, const char *format, ...); extern uint32_t * u32_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...); extern int u32_vsprintf (uint32_t *buf, const char *format, va_list ap); extern int u32_vsnprintf (uint32_t *buf, size_t size, const char *format, va_list ap); extern int u32_vasprintf (uint32_t **resultp, const char *format, va_list ap); extern uint32_t * u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, va_list ap); /* UTF-32 format string, result in UTF-32 format. */ extern int u32_u32_sprintf (uint32_t *_UC_RESTRICT buf, const uint32_t *format, ...); extern int u32_u32_snprintf (uint32_t *_UC_RESTRICT buf, size_t size, const uint32_t *format, ...); extern int u32_u32_asprintf (uint32_t **resultp, const uint32_t *format, ...); extern uint32_t * u32_u32_asnprintf (uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint32_t *format, ...); extern int u32_u32_vsprintf (uint32_t *_UC_RESTRICT buf, const uint32_t *format, va_list ap); extern int u32_u32_vsnprintf (uint32_t *_UC_RESTRICT buf, size_t size, const uint32_t *format, va_list ap); extern int u32_u32_vasprintf (uint32_t **resultp, const uint32_t *format, va_list ap); extern uint32_t * u32_u32_vasnprintf (uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp, const uint32_t *format, va_list ap); /* ASCII format string, output to FILE in locale dependent encoding. */ extern int ulc_fprintf (FILE *stream, const char *format, ...); extern int ulc_vfprintf (FILE *stream, const char *format, va_list ap); #ifdef __cplusplus } #endif #endif /* _UNISTDIO_H */ �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016703�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-asnprintf.h��������������������������������������������������0000664�0000000�0000000�00000002611�14110572173�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ DCHAR_T * ASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, ...) { va_list args; DCHAR_T *result; va_start (args, format); result = VASNPRINTF (resultbuf, lengthp, format, args); va_end (args); return result; } �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-asprintf.h���������������������������������������������������0000664�0000000�0000000�00000002537�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int ASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, ...) { va_list args; int result; va_start (args, format); result = VASPRINTF (resultp, format, args); va_end (args); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-printf-args.c������������������������������������������������0000664�0000000�0000000�00000002401�14110572173�0021542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-args.h" #include "printf-args.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-printf-args.h������������������������������������������������0000664�0000000�0000000�00000002611�14110572173�0021552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _U_PRINTF_ARGS_H #define _U_PRINTF_ARGS_H #include "unitypes.h" /* Parametrization of printf-args.h. */ #define ENABLE_UNISTDIO 1 #define PRINTF_FETCHARGS u_printf_fetchargs #include "printf-args.h" #endif /* _U_PRINTF_ARGS_H */ �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-printf-parse.h�����������������������������������������������0000664�0000000�0000000�00000002603�14110572173�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _U_PRINTF_PARSE_H #define _U_PRINTF_PARSE_H #include "unistdio/u-printf-args.h" /* Parametrization of printf-parse.h. */ #undef ENABLE_UNISTDIO #define ENABLE_UNISTDIO 1 #include "printf-parse.h" #endif /* _U_PRINTF_PARSE_H */ �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-snprintf.h���������������������������������������������������0000664�0000000�0000000�00000002551�14110572173�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int SNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, ...) { va_list args; int result; va_start (args, format); result = VSNPRINTF (buf, size, format, args); va_end (args); return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-sprintf.h����������������������������������������������������0000664�0000000�0000000�00000002524�14110572173�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int SPRINTF (DCHAR_T *buf, const FCHAR_T *format, ...) { va_list args; int result; va_start (args, format); result = VSPRINTF (buf, format, args); va_end (args); return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-vasprintf.h��������������������������������������������������0000664�0000000�0000000�00000003033�14110572173�0021331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int VASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, va_list args) { size_t length; DCHAR_T *result = VASNPRINTF (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; /* Return the number of resulting units, excluding the trailing NUL. */ return length; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-vsnprintf.h��������������������������������������������������0000664�0000000�0000000�00000003644�14110572173�0021356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int VSNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, va_list args) { size_t length; DCHAR_T *result; if (size == 0) buf = NULL; else length = size; result = VASNPRINTF (buf, &length, format, args); if (result == NULL) return -1; if (result != buf) { if (size != 0) { /* The result did not fit into the buffer. Copy the initial segment into the buffer, truncating it if necessary. */ size_t n = (length < size ? length : size - 1); DCHAR_CPY (buf, result, n); buf[n] = '\0'; } free (result); } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } /* Return the number of resulting units, excluding the trailing NUL. */ return length; } ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u-vsprintf.h���������������������������������������������������0000664�0000000�0000000�00000004505�14110572173�0021175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif int VSPRINTF (DCHAR_T *buf, const FCHAR_T *format, va_list args) { /* Pass an infinite length. But note that *vasnprintf may fail if the buffer argument is larger than INT_MAX (if that fits into a 'size_t' at all). Also note that glibc's iconv fails with E2BIG when we pass a length that is so large that buf + length wraps around, i.e. (uintptr_t) (buf + length) < (uintptr_t) buf. */ size_t length; DCHAR_T *result; /* Set length = min (SIZE_MAX, INT_MAX, - (uintptr_t) buf - 1). */ length = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX); if (length > (~ (uintptr_t) buf) / sizeof (DCHAR_T)) length = (~ (uintptr_t) buf) / sizeof (DCHAR_T); result = VASNPRINTF (buf, &length, format, args); if (result == NULL) return -1; /* The infinite buffer size guarantees that the result is not malloc()ed. */ if (result != buf) { /* length is near SIZE_MAX. */ free (result); errno = EOVERFLOW; return -1; } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } /* Return the number of resulting units, excluding the trailing NUL. */ return length; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-asnprintf.c������������������������������������������������0000664�0000000�0000000�00000002564�14110572173�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u16_asnprintf #define VASNPRINTF u16_vasnprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-asnprintf.h" ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-asprintf.c�������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u16_asprintf #define VASPRINTF u16_vasprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-asprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-printf-parse.c���������������������������������������������0000664�0000000�0000000�00000002604�14110572173�0022074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-parse.h" #define PRINTF_PARSE u16_printf_parse #define CHAR_T uint16_t #define DIRECTIVE u16_directive #define DIRECTIVES u16_directives #include "printf-parse.c" ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-snprintf.c�������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0021334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u16_snprintf #define VSNPRINTF u16_vsnprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-snprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-sprintf.c��������������������������������������������������0000664�0000000�0000000�00000002552�14110572173�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u16_sprintf #define VSPRINTF u16_vsprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-sprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-asnprintf.c��������������������������������������������0000664�0000000�0000000�00000002600�14110572173�0022073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u16_u16_asnprintf #define VASNPRINTF u16_u16_vasnprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-asnprintf.h" ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-asprintf.c���������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u16_u16_asprintf #define VASPRINTF u16_u16_vasprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-asprintf.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-snprintf.c���������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u16_u16_snprintf #define VSNPRINTF u16_u16_vsnprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-snprintf.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-sprintf.c����������������������������������������������0000664�0000000�0000000�00000002566�14110572173�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u16_u16_sprintf #define VSPRINTF u16_u16_vsprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-sprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-vasnprintf.c�������������������������������������������0000664�0000000�0000000�00000004072�14110572173�0022266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-16 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u16_u16_vasnprintf #define FCHAR_T uint16_t #define DIRECTIVE u16_directive #define DIRECTIVES u16_directives #define PRINTF_PARSE u16_printf_parse #define DCHAR_T uint16_t #define DCHAR_T_IS_UINT16_T 1 #define DCHAR_CPY u16_cpy #define DCHAR_SET u16_set #define DCHAR_MBSNLEN u16_mbsnlen #define DCHAR_IS_UINT16_T 1 #define U8_TO_DCHAR u8_to_u16 #define U32_TO_DCHAR u32_to_u16 #define DCHAR_CONV_FROM_ENCODING u16_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-vasprintf.c��������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0022116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u16_u16_vasprintf #define VASNPRINTF u16_u16_vasnprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-vasprintf.h" �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-vsnprintf.c��������������������������������������������0000664�0000000�0000000�00000002751�14110572173�0022127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u16_u16_vsnprintf #define VASNPRINTF u16_u16_vasnprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #define DCHAR_CPY u16_cpy #include "u-vsnprintf.h" �����������������������gnulib-20210822~d383792/lib/unistdio/u16-u16-vsprintf.c���������������������������������������������0000664�0000000�0000000�00000002714�14110572173�0021750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u16_u16_vsprintf #define VASNPRINTF u16_u16_vasnprintf #define FCHAR_T uint16_t #define DCHAR_T uint16_t #include "u-vsprintf.h" ����������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-vasnprintf.c�����������������������������������������������0000664�0000000�0000000�00000004121�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-16 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u16_vasnprintf #define FCHAR_T char #define DIRECTIVE char_directive #define DIRECTIVES char_directives #define FCHAR_T_ONLY_ASCII 1 #define PRINTF_PARSE ulc_printf_parse #define DCHAR_T uint16_t #define DCHAR_T_IS_UINT16_T 1 #define DCHAR_CPY u16_cpy #define DCHAR_SET u16_set #define DCHAR_MBSNLEN u16_mbsnlen #define DCHAR_IS_UINT16_T 1 #define U8_TO_DCHAR u8_to_u16 #define U32_TO_DCHAR u32_to_u16 #define DCHAR_CONV_FROM_ENCODING u16_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-vasprintf.c������������������������������������������������0000664�0000000�0000000�00000002633�14110572173�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u16_vasprintf #define VASNPRINTF u16_vasnprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-vasprintf.h" �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u16-vsnprintf.c������������������������������������������������0000664�0000000�0000000�00000002735�14110572173�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u16_vsnprintf #define VASNPRINTF u16_vasnprintf #define FCHAR_T char #define DCHAR_T uint16_t #define DCHAR_CPY u16_cpy #include "u-vsnprintf.h" �����������������������������������gnulib-20210822~d383792/lib/unistdio/u16-vsprintf.c�������������������������������������������������0000664�0000000�0000000�00000002700�14110572173�0021332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u16_vsprintf #define VASNPRINTF u16_vasnprintf #define FCHAR_T char #define DCHAR_T uint16_t #include "u-vsprintf.h" ����������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-asnprintf.c������������������������������������������������0000664�0000000�0000000�00000002564�14110572173�0021471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u32_asnprintf #define VASNPRINTF u32_vasnprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-asnprintf.h" ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-asprintf.c�������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0021315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u32_asprintf #define VASPRINTF u32_vasprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-asprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-printf-parse.c���������������������������������������������0000664�0000000�0000000�00000002604�14110572173�0022072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-parse.h" #define PRINTF_PARSE u32_printf_parse #define CHAR_T uint32_t #define DIRECTIVE u32_directive #define DIRECTIVES u32_directives #include "printf-parse.c" ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-snprintf.c�������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0021332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u32_snprintf #define VSNPRINTF u32_vsnprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-snprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-sprintf.c��������������������������������������������������0000664�0000000�0000000�00000002552�14110572173�0021147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u32_sprintf #define VSPRINTF u32_vsprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-sprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-asnprintf.c��������������������������������������������0000664�0000000�0000000�00000002600�14110572173�0022067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u32_u32_asnprintf #define VASNPRINTF u32_u32_vasnprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-asnprintf.h" ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-asprintf.c���������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u32_u32_asprintf #define VASPRINTF u32_u32_vasprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-asprintf.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-snprintf.c���������������������������������������������0000664�0000000�0000000�00000002573�14110572173�0021737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u32_u32_snprintf #define VSNPRINTF u32_u32_vsnprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-snprintf.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-sprintf.c����������������������������������������������0000664�0000000�0000000�00000002566�14110572173�0021563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u32_u32_sprintf #define VSPRINTF u32_u32_vsprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-sprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-vasnprintf.c�������������������������������������������0000664�0000000�0000000�00000004072�14110572173�0022262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-32 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u32_u32_vasnprintf #define FCHAR_T uint32_t #define DIRECTIVE u32_directive #define DIRECTIVES u32_directives #define PRINTF_PARSE u32_printf_parse #define DCHAR_T uint32_t #define DCHAR_T_IS_UINT32_T 1 #define DCHAR_CPY u32_cpy #define DCHAR_SET u32_set #define DCHAR_MBSNLEN u32_mbsnlen #define DCHAR_IS_UINT32_T 1 #define U8_TO_DCHAR u8_to_u32 #define U16_TO_DCHAR u16_to_u32 #define DCHAR_CONV_FROM_ENCODING u32_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-vasprintf.c��������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0022112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u32_u32_vasprintf #define VASNPRINTF u32_u32_vasnprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-vasprintf.h" �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-vsnprintf.c��������������������������������������������0000664�0000000�0000000�00000002751�14110572173�0022123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u32_u32_vsnprintf #define VASNPRINTF u32_u32_vasnprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #define DCHAR_CPY u32_cpy #include "u-vsnprintf.h" �����������������������gnulib-20210822~d383792/lib/unistdio/u32-u32-vsprintf.c���������������������������������������������0000664�0000000�0000000�00000002714�14110572173�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u32_u32_vsprintf #define VASNPRINTF u32_u32_vasnprintf #define FCHAR_T uint32_t #define DCHAR_T uint32_t #include "u-vsprintf.h" ����������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-vasnprintf.c�����������������������������������������������0000664�0000000�0000000�00000004121�14110572173�0021646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-32 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u32_vasnprintf #define FCHAR_T char #define DIRECTIVE char_directive #define DIRECTIVES char_directives #define FCHAR_T_ONLY_ASCII 1 #define PRINTF_PARSE ulc_printf_parse #define DCHAR_T uint32_t #define DCHAR_T_IS_UINT32_T 1 #define DCHAR_CPY u32_cpy #define DCHAR_SET u32_set #define DCHAR_MBSNLEN u32_mbsnlen #define DCHAR_IS_UINT32_T 1 #define U8_TO_DCHAR u8_to_u32 #define U16_TO_DCHAR u16_to_u32 #define DCHAR_CONV_FROM_ENCODING u32_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-vasprintf.c������������������������������������������������0000664�0000000�0000000�00000002633�14110572173�0021476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u32_vasprintf #define VASNPRINTF u32_vasnprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-vasprintf.h" �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u32-vsnprintf.c������������������������������������������������0000664�0000000�0000000�00000002735�14110572173�0021516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u32_vsnprintf #define VASNPRINTF u32_vasnprintf #define FCHAR_T char #define DCHAR_T uint32_t #define DCHAR_CPY u32_cpy #include "u-vsnprintf.h" �����������������������������������gnulib-20210822~d383792/lib/unistdio/u32-vsprintf.c�������������������������������������������������0000664�0000000�0000000�00000002700�14110572173�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u32_vsprintf #define VASNPRINTF u32_vasnprintf #define FCHAR_T char #define DCHAR_T uint32_t #include "u-vsprintf.h" ����������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-asnprintf.c�������������������������������������������������0000664�0000000�0000000�00000002561�14110572173�0021411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u8_asnprintf #define VASNPRINTF u8_vasnprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-asnprintf.h" �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-asprintf.c��������������������������������������������������0000664�0000000�0000000�00000002554�14110572173�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u8_asprintf #define VASPRINTF u8_vasprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-asprintf.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-printf-parse.c����������������������������������������������0000664�0000000�0000000�00000002600�14110572173�0022011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-parse.h" #define PRINTF_PARSE u8_printf_parse #define CHAR_T uint8_t #define DIRECTIVE u8_directive #define DIRECTIVES u8_directives #include "printf-parse.c" ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-snprintf.c��������������������������������������������������0000664�0000000�0000000�00000002554�14110572173�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u8_snprintf #define VSNPRINTF u8_vsnprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-snprintf.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-sprintf.c���������������������������������������������������0000664�0000000�0000000�00000002547�14110572173�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u8_sprintf #define VSPRINTF u8_vsprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-sprintf.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-asnprintf.c����������������������������������������������0000664�0000000�0000000�00000002572�14110572173�0021745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF u8_u8_asnprintf #define VASNPRINTF u8_u8_vasnprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-asnprintf.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-asprintf.c�����������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0021571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF u8_u8_asprintf #define VASPRINTF u8_u8_vasprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-asprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-snprintf.c�����������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF u8_u8_snprintf #define VSNPRINTF u8_u8_vsnprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-snprintf.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-sprintf.c������������������������������������������������0000664�0000000�0000000�00000002560�14110572173�0021423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF u8_u8_sprintf #define VSPRINTF u8_u8_vsprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-sprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-vasnprintf.c���������������������������������������������0000664�0000000�0000000�00000004054�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-8 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u8_u8_vasnprintf #define FCHAR_T uint8_t #define DIRECTIVE u8_directive #define DIRECTIVES u8_directives #define PRINTF_PARSE u8_printf_parse #define DCHAR_T uint8_t #define DCHAR_T_IS_UINT8_T 1 #define DCHAR_CPY u8_cpy #define DCHAR_SET u8_set #define DCHAR_MBSNLEN u8_mbsnlen #define DCHAR_IS_UINT8_T 1 #define U16_TO_DCHAR u16_to_u8 #define U32_TO_DCHAR u32_to_u8 #define DCHAR_CONV_FROM_ENCODING u8_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-vasprintf.c����������������������������������������������0000664�0000000�0000000�00000002641�14110572173�0021752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u8_u8_vasprintf #define VASNPRINTF u8_u8_vasnprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-vasprintf.h" �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-vsnprintf.c����������������������������������������������0000664�0000000�0000000�00000002742�14110572173�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u8_u8_vsnprintf #define VASNPRINTF u8_u8_vasnprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #define DCHAR_CPY u8_cpy #include "u-vsnprintf.h" ������������������������������gnulib-20210822~d383792/lib/unistdio/u8-u8-vsprintf.c�����������������������������������������������0000664�0000000�0000000�00000002706�14110572173�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u8_u8_vsprintf #define VASNPRINTF u8_u8_vasnprintf #define FCHAR_T uint8_t #define DCHAR_T uint8_t #include "u-vsprintf.h" ����������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-vasnprintf.c������������������������������������������������0000664�0000000�0000000�00000004110�14110572173�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-8 strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF u8_vasnprintf #define FCHAR_T char #define DIRECTIVE char_directive #define DIRECTIVES char_directives #define FCHAR_T_ONLY_ASCII 1 #define PRINTF_PARSE ulc_printf_parse #define DCHAR_T uint8_t #define DCHAR_T_IS_UINT8_T 1 #define DCHAR_CPY u8_cpy #define DCHAR_SET u8_set #define DCHAR_MBSNLEN u8_mbsnlen #define DCHAR_IS_UINT8_T 1 #define U16_TO_DCHAR u16_to_u8 #define U32_TO_DCHAR u32_to_u8 #define DCHAR_CONV_FROM_ENCODING u8_conv_from_encoding #define TCHAR_T char #include "vasnprintf.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-vasprintf.c�������������������������������������������������0000664�0000000�0000000�00000002630�14110572173�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF u8_vasprintf #define VASNPRINTF u8_vasnprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-vasprintf.h" ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-vsnprintf.c�������������������������������������������������0000664�0000000�0000000�00000002731�14110572173�0021435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "unistr.h" #define VSNPRINTF u8_vsnprintf #define VASNPRINTF u8_vasnprintf #define FCHAR_T char #define DCHAR_T uint8_t #define DCHAR_CPY u8_cpy #include "u-vsnprintf.h" ���������������������������������������gnulib-20210822~d383792/lib/unistdio/u8-vsprintf.c��������������������������������������������������0000664�0000000�0000000�00000002675�14110572173�0021266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF u8_vsprintf #define VASNPRINTF u8_vasnprintf #define FCHAR_T char #define DCHAR_T uint8_t #include "u-vsprintf.h" �������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-asnprintf.c������������������������������������������������0000664�0000000�0000000�00000002560�14110572173�0021637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASNPRINTF ulc_asnprintf #define VASNPRINTF ulc_vasnprintf #define FCHAR_T char #define DCHAR_T char #include "u-asnprintf.h" ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-asprintf.c�������������������������������������������������0000664�0000000�0000000�00000002553�14110572173�0021463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define ASPRINTF ulc_asprintf #define VASPRINTF ulc_vasprintf #define FCHAR_T char #define DCHAR_T char #include "u-asprintf.h" �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-fprintf.c��������������������������������������������������0000664�0000000�0000000�00000004151�14110572173�0021301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include "fseterr.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int ulc_fprintf (FILE *fp, const char *format, ...) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); va_list args; va_start (args, format); output = ulc_vasnprintf (buf, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-printf-parse.c���������������������������������������������0000664�0000000�0000000�00000002636�14110572173�0022251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-parse.h" #define PRINTF_PARSE ulc_printf_parse #define CHAR_T char #define CHAR_T_ONLY_ASCII 1 #define DIRECTIVE char_directive #define DIRECTIVES char_directives #include "printf-parse.c" ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-snprintf.c�������������������������������������������������0000664�0000000�0000000�00000002553�14110572173�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SNPRINTF ulc_snprintf #define VSNPRINTF ulc_vsnprintf #define FCHAR_T char #define DCHAR_T char #include "u-snprintf.h" �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-sprintf.c��������������������������������������������������0000664�0000000�0000000�00000002546�14110572173�0021324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <stdarg.h> #define SPRINTF ulc_sprintf #define VSPRINTF ulc_vsprintf #define FCHAR_T char #define DCHAR_T char #include "u-sprintf.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-vasnprintf.c�����������������������������������������������0000664�0000000�0000000�00000003651�14110572173�0022027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> #include <alloca.h> /* Specification. */ #include "unistdio.h" #include "uniconv.h" #include "unistr.h" #include "unistdio/u-printf-parse.h" #define VASNPRINTF ulc_vasnprintf #define FCHAR_T char #define DIRECTIVE char_directive #define DIRECTIVES char_directives #define FCHAR_T_ONLY_ASCII 1 #define PRINTF_PARSE ulc_printf_parse #define DCHAR_T char #define DCHAR_CPY memcpy #define DCHAR_SET memset #define DCHAR_MBSNLEN mbsnlen #define TCHAR_T char #define DCHAR_IS_TCHAR 1 #include "vasnprintf.c" ���������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-vasprintf.c������������������������������������������������0000664�0000000�0000000�00000002627�14110572173�0021653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #define VASPRINTF ulc_vasprintf #define VASNPRINTF ulc_vasnprintf #define FCHAR_T char #define DCHAR_T char #include "u-vasprintf.h" ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-vfprintf.c�������������������������������������������������0000664�0000000�0000000�00000004067�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include "fseterr.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int ulc_vfprintf (FILE *fp, const char *format, va_list args) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); output = ulc_vasnprintf (buf, &lenbuf, format, args); len = lenbuf; if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-vsnprintf.c������������������������������������������������0000664�0000000�0000000�00000002730�14110572173�0021663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #define VSNPRINTF ulc_vsnprintf #define VASNPRINTF ulc_vasnprintf #define FCHAR_T char #define DCHAR_T char #define DCHAR_CPY memcpy #include "u-vsnprintf.h" ����������������������������������������gnulib-20210822~d383792/lib/unistdio/ulc-vsprintf.c�������������������������������������������������0000664�0000000�0000000�00000002674�14110572173�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio.h" #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #define VSPRINTF ulc_vsprintf #define VASNPRINTF ulc_vasnprintf #define FCHAR_T char #define DCHAR_T char #include "u-vsprintf.h" ��������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr.in.h�������������������������������������������������������������0000664�0000000�0000000�00000056230�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary Unicode string functions. Copyright (C) 2001-2002, 2005-2021 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/>. */ #ifndef _UNISTR_H #define _UNISTR_H #include "unitypes.h" /* Get bool. */ #include <stdbool.h> /* Get size_t, ptrdiff_t. */ #include <stddef.h> /* Get free(). */ #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Conventions: All functions prefixed with u8_ operate on UTF-8 encoded strings. Their unit is an uint8_t (1 byte). All functions prefixed with u16_ operate on UTF-16 encoded strings. Their unit is an uint16_t (a 2-byte word). All functions prefixed with u32_ operate on UCS-4 encoded strings. Their unit is an uint32_t (a 4-byte word). All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly n units. All arguments starting with "str" and the arguments of functions starting with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string which terminates at the first NUL unit. This termination unit is considered part of the string for all memory allocation purposes, but is not considered part of the string for all other logical purposes. Functions returning a string result take a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ /* Elementary string checks. */ /* Check whether an UTF-8 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint8_t * u8_check (const uint8_t *s, size_t n) _UC_ATTRIBUTE_PURE; /* Check whether an UTF-16 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint16_t * u16_check (const uint16_t *s, size_t n) _UC_ATTRIBUTE_PURE; /* Check whether an UCS-4 string is well-formed. Return NULL if valid, or a pointer to the first invalid unit otherwise. */ extern const uint32_t * u32_check (const uint32_t *s, size_t n) _UC_ATTRIBUTE_PURE; /* Elementary string conversions. */ /* Convert an UTF-8 string to an UTF-16 string. */ extern uint16_t * u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp); /* Convert an UTF-8 string to an UCS-4 string. */ extern uint32_t * u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf, size_t *lengthp); /* Convert an UTF-16 string to an UTF-8 string. */ extern uint8_t * u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf, size_t *lengthp); /* Convert an UTF-16 string to an UCS-4 string. */ extern uint32_t * u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf, size_t *lengthp); /* Convert an UCS-4 string to an UTF-8 string. */ extern uint8_t * u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf, size_t *lengthp); /* Convert an UCS-4 string to an UTF-16 string. */ extern uint16_t * u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp); /* Elementary string functions. */ /* Return the length (number of units) of the first character in S, which is no longer than N. Return 0 if it is the NUL character. Return -1 upon failure. */ /* Similar to mblen(), except that s must not be NULL. */ extern int u8_mblen (const uint8_t *s, size_t n) _UC_ATTRIBUTE_PURE; extern int u16_mblen (const uint16_t *s, size_t n) _UC_ATTRIBUTE_PURE; extern int u32_mblen (const uint32_t *s, size_t n) _UC_ATTRIBUTE_PURE; /* Return the length (number of units) of the first character in S, putting its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, and an appropriate number of units is returned. The number of available units, N, must be > 0. */ /* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0, and the NUL character is not treated specially. */ /* The variants with _unsafe suffix are for backward compatibility with libunistring versions < 0.9.7. */ #if GNULIB_UNISTR_U8_MBTOUC_UNSAFE || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n); # else extern int u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n); static inline int u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c < 0x80) { *puc = c; return 1; } else return u8_mbtouc_unsafe_aux (puc, s, n); } # endif #endif #if GNULIB_UNISTR_U16_MBTOUC_UNSAFE || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n); # else extern int u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n); static inline int u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return 1; } else return u16_mbtouc_unsafe_aux (puc, s, n); } # endif #endif #if GNULIB_UNISTR_U32_MBTOUC_UNSAFE || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n); # else static inline int u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, _GL_ATTRIBUTE_MAYBE_UNUSED size_t n) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) *puc = c; else /* invalid multibyte character */ *puc = 0xfffd; return 1; } # endif #endif #if GNULIB_UNISTR_U8_MBTOUC || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n); # else extern int u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n); static inline int u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c < 0x80) { *puc = c; return 1; } else return u8_mbtouc_aux (puc, s, n); } # endif #endif #if GNULIB_UNISTR_U16_MBTOUC || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n); # else extern int u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n); static inline int u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return 1; } else return u16_mbtouc_aux (puc, s, n); } # endif #endif #if GNULIB_UNISTR_U32_MBTOUC || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n); # else static inline int u32_mbtouc (ucs4_t *puc, const uint32_t *s, _GL_ATTRIBUTE_MAYBE_UNUSED size_t n) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) *puc = c; else /* invalid multibyte character */ *puc = 0xfffd; return 1; } # endif #endif /* Return the length (number of units) of the first character in S, putting its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, and -1 is returned for an invalid sequence of units, -2 is returned for an incomplete sequence of units. The number of available units, N, must be > 0. */ /* Similar to u*_mbtouc(), except that the return value gives more details about the failure, similar to mbrtowc(). */ #if GNULIB_UNISTR_U8_MBTOUCR || HAVE_LIBUNISTRING extern int u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n); #endif #if GNULIB_UNISTR_U16_MBTOUCR || HAVE_LIBUNISTRING extern int u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n); #endif #if GNULIB_UNISTR_U32_MBTOUCR || HAVE_LIBUNISTRING extern int u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n); #endif /* Put the multibyte character represented by UC in S, returning its length. Return -1 upon failure, -2 if the number of available units, N, is too small. The latter case cannot occur if N >= 6/2/1, respectively. */ /* Similar to wctomb(), except that s must not be NULL, and the argument n must be specified. */ #if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING /* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */ extern int u8_uctomb_aux (uint8_t *s, ucs4_t uc, ptrdiff_t n); # if !HAVE_INLINE extern int u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n); # else static inline int u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0x80 && n > 0) { s[0] = uc; return 1; } else return u8_uctomb_aux (s, uc, n); } # endif #endif #if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING /* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */ extern int u16_uctomb_aux (uint16_t *s, ucs4_t uc, ptrdiff_t n); # if !HAVE_INLINE extern int u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n); # else static inline int u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0xd800 && n > 0) { s[0] = uc; return 1; } else return u16_uctomb_aux (s, uc, n); } # endif #endif #if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING # if !HAVE_INLINE extern int u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n); # else static inline int u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) { if (n > 0) { *s = uc; return 1; } else return -2; } else return -1; } # endif #endif /* Copy N units from SRC to DEST. */ /* Similar to memcpy(). */ extern uint8_t * u8_cpy (uint8_t *_UC_RESTRICT dest, const uint8_t *src, size_t n); extern uint16_t * u16_cpy (uint16_t *_UC_RESTRICT dest, const uint16_t *src, size_t n); extern uint32_t * u32_cpy (uint32_t *_UC_RESTRICT dest, const uint32_t *src, size_t n); /* Copy N units from SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ /* Similar to memmove(). */ extern uint8_t * u8_move (uint8_t *dest, const uint8_t *src, size_t n); extern uint16_t * u16_move (uint16_t *dest, const uint16_t *src, size_t n); extern uint32_t * u32_move (uint32_t *dest, const uint32_t *src, size_t n); /* Set the first N characters of S to UC. UC should be a character that occupies only 1 unit. */ /* Similar to memset(). */ extern uint8_t * u8_set (uint8_t *s, ucs4_t uc, size_t n); extern uint16_t * u16_set (uint16_t *s, ucs4_t uc, size_t n); extern uint32_t * u32_set (uint32_t *s, ucs4_t uc, size_t n); /* Compare S1 and S2, each of length N. */ /* Similar to memcmp(). */ extern int u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) _UC_ATTRIBUTE_PURE; extern int u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) _UC_ATTRIBUTE_PURE; extern int u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) _UC_ATTRIBUTE_PURE; /* Compare S1 and S2. */ /* Similar to the gnulib function memcmp2(). */ extern int u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2) _UC_ATTRIBUTE_PURE; extern int u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2) _UC_ATTRIBUTE_PURE; extern int u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2) _UC_ATTRIBUTE_PURE; /* Search the string at S for UC. */ /* Similar to memchr(). */ extern uint8_t * u8_chr (const uint8_t *s, size_t n, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint16_t * u16_chr (const uint16_t *s, size_t n, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint32_t * u32_chr (const uint32_t *s, size_t n, ucs4_t uc) _UC_ATTRIBUTE_PURE; /* Count the number of Unicode characters in the N units from S. */ /* Similar to mbsnlen(). */ extern size_t u8_mbsnlen (const uint8_t *s, size_t n) _UC_ATTRIBUTE_PURE; extern size_t u16_mbsnlen (const uint16_t *s, size_t n) _UC_ATTRIBUTE_PURE; extern size_t u32_mbsnlen (const uint32_t *s, size_t n) _UC_ATTRIBUTE_PURE; /* Elementary string functions with memory allocation. */ /* Make a freshly allocated copy of S, of length N. */ extern uint8_t * u8_cpy_alloc (const uint8_t *s, size_t n); extern uint16_t * u16_cpy_alloc (const uint16_t *s, size_t n); extern uint32_t * u32_cpy_alloc (const uint32_t *s, size_t n); /* Elementary string functions on NUL terminated strings. */ /* Return the length (number of units) of the first character in S. Return 0 if it is the NUL character. Return -1 upon failure. */ extern int u8_strmblen (const uint8_t *s) _UC_ATTRIBUTE_PURE; extern int u16_strmblen (const uint16_t *s) _UC_ATTRIBUTE_PURE; extern int u32_strmblen (const uint32_t *s) _UC_ATTRIBUTE_PURE; /* Return the length (number of units) of the first character in S, putting its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL character. Return -1 upon failure. */ extern int u8_strmbtouc (ucs4_t *puc, const uint8_t *s); extern int u16_strmbtouc (ucs4_t *puc, const uint16_t *s); extern int u32_strmbtouc (ucs4_t *puc, const uint32_t *s); /* Forward iteration step. Advances the pointer past the next character, or returns NULL if the end of the string has been reached. Puts the character's 'ucs4_t' representation in *PUC. */ extern const uint8_t * u8_next (ucs4_t *puc, const uint8_t *s); extern const uint16_t * u16_next (ucs4_t *puc, const uint16_t *s); extern const uint32_t * u32_next (ucs4_t *puc, const uint32_t *s); /* Backward iteration step. Advances the pointer to point to the previous character, or returns NULL if the beginning of the string had been reached. Puts the character's 'ucs4_t' representation in *PUC. */ extern const uint8_t * u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start); extern const uint16_t * u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start); extern const uint32_t * u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start); /* Return the number of units in S. */ /* Similar to strlen(), wcslen(). */ extern size_t u8_strlen (const uint8_t *s) _UC_ATTRIBUTE_PURE; extern size_t u16_strlen (const uint16_t *s) _UC_ATTRIBUTE_PURE; extern size_t u32_strlen (const uint32_t *s) _UC_ATTRIBUTE_PURE; /* Return the number of units in S, but at most MAXLEN. */ /* Similar to strnlen(), wcsnlen(). */ extern size_t u8_strnlen (const uint8_t *s, size_t maxlen) _UC_ATTRIBUTE_PURE; extern size_t u16_strnlen (const uint16_t *s, size_t maxlen) _UC_ATTRIBUTE_PURE; extern size_t u32_strnlen (const uint32_t *s, size_t maxlen) _UC_ATTRIBUTE_PURE; /* Copy SRC to DEST. */ /* Similar to strcpy(), wcscpy(). */ extern uint8_t * u8_strcpy (uint8_t *_UC_RESTRICT dest, const uint8_t *src); extern uint16_t * u16_strcpy (uint16_t *_UC_RESTRICT dest, const uint16_t *src); extern uint32_t * u32_strcpy (uint32_t *_UC_RESTRICT dest, const uint32_t *src); /* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */ /* Similar to stpcpy(). */ extern uint8_t * u8_stpcpy (uint8_t *_UC_RESTRICT dest, const uint8_t *src); extern uint16_t * u16_stpcpy (uint16_t *_UC_RESTRICT dest, const uint16_t *src); extern uint32_t * u32_stpcpy (uint32_t *_UC_RESTRICT dest, const uint32_t *src); /* Copy no more than N units of SRC to DEST. */ /* Similar to strncpy(), wcsncpy(). */ extern uint8_t * u8_strncpy (uint8_t *_UC_RESTRICT dest, const uint8_t *src, size_t n); extern uint16_t * u16_strncpy (uint16_t *_UC_RESTRICT dest, const uint16_t *src, size_t n); extern uint32_t * u32_strncpy (uint32_t *_UC_RESTRICT dest, const uint32_t *src, size_t n); /* Copy no more than N units of SRC to DEST. Return a pointer past the last non-NUL unit written into DEST. */ /* Similar to stpncpy(). */ extern uint8_t * u8_stpncpy (uint8_t *_UC_RESTRICT dest, const uint8_t *src, size_t n); extern uint16_t * u16_stpncpy (uint16_t *_UC_RESTRICT dest, const uint16_t *src, size_t n); extern uint32_t * u32_stpncpy (uint32_t *_UC_RESTRICT dest, const uint32_t *src, size_t n); /* Append SRC onto DEST. */ /* Similar to strcat(), wcscat(). */ extern uint8_t * u8_strcat (uint8_t *_UC_RESTRICT dest, const uint8_t *src); extern uint16_t * u16_strcat (uint16_t *_UC_RESTRICT dest, const uint16_t *src); extern uint32_t * u32_strcat (uint32_t *_UC_RESTRICT dest, const uint32_t *src); /* Append no more than N units of SRC onto DEST. */ /* Similar to strncat(), wcsncat(). */ extern uint8_t * u8_strncat (uint8_t *_UC_RESTRICT dest, const uint8_t *src, size_t n); extern uint16_t * u16_strncat (uint16_t *_UC_RESTRICT dest, const uint16_t *src, size_t n); extern uint32_t * u32_strncat (uint32_t *_UC_RESTRICT dest, const uint32_t *src, size_t n); /* Compare S1 and S2. */ /* Similar to strcmp(), wcscmp(). */ #ifdef __sun /* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */ extern int u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2) _UC_ATTRIBUTE_PURE; # define u8_strcmp u8_strcmp_gnu #else extern int u8_strcmp (const uint8_t *s1, const uint8_t *s2) _UC_ATTRIBUTE_PURE; #endif extern int u16_strcmp (const uint16_t *s1, const uint16_t *s2) _UC_ATTRIBUTE_PURE; extern int u32_strcmp (const uint32_t *s1, const uint32_t *s2) _UC_ATTRIBUTE_PURE; /* Compare S1 and S2 using the collation rules of the current locale. Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. Upon failure, set errno and return any value. */ /* Similar to strcoll(), wcscoll(). */ extern int u8_strcoll (const uint8_t *s1, const uint8_t *s2); extern int u16_strcoll (const uint16_t *s1, const uint16_t *s2); extern int u32_strcoll (const uint32_t *s1, const uint32_t *s2); /* Compare no more than N units of S1 and S2. */ /* Similar to strncmp(), wcsncmp(). */ extern int u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) _UC_ATTRIBUTE_PURE; extern int u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) _UC_ATTRIBUTE_PURE; extern int u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) _UC_ATTRIBUTE_PURE; /* Duplicate S, returning an identical malloc'd string. */ /* Similar to strdup(), wcsdup(). */ extern uint8_t * u8_strdup (const uint8_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; extern uint16_t * u16_strdup (const uint16_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; extern uint32_t * u32_strdup (const uint32_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* Find the first occurrence of UC in STR. */ /* Similar to strchr(), wcschr(). */ extern uint8_t * u8_strchr (const uint8_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint16_t * u16_strchr (const uint16_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint32_t * u32_strchr (const uint32_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; /* Find the last occurrence of UC in STR. */ /* Similar to strrchr(), wcsrchr(). */ extern uint8_t * u8_strrchr (const uint8_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint16_t * u16_strrchr (const uint16_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; extern uint32_t * u32_strrchr (const uint32_t *str, ucs4_t uc) _UC_ATTRIBUTE_PURE; /* Return the length of the initial segment of STR which consists entirely of Unicode characters not in REJECT. */ /* Similar to strcspn(), wcscspn(). */ extern size_t u8_strcspn (const uint8_t *str, const uint8_t *reject) _UC_ATTRIBUTE_PURE; extern size_t u16_strcspn (const uint16_t *str, const uint16_t *reject) _UC_ATTRIBUTE_PURE; extern size_t u32_strcspn (const uint32_t *str, const uint32_t *reject) _UC_ATTRIBUTE_PURE; /* Return the length of the initial segment of STR which consists entirely of Unicode characters in ACCEPT. */ /* Similar to strspn(), wcsspn(). */ extern size_t u8_strspn (const uint8_t *str, const uint8_t *accept) _UC_ATTRIBUTE_PURE; extern size_t u16_strspn (const uint16_t *str, const uint16_t *accept) _UC_ATTRIBUTE_PURE; extern size_t u32_strspn (const uint32_t *str, const uint32_t *accept) _UC_ATTRIBUTE_PURE; /* Find the first occurrence in STR of any character in ACCEPT. */ /* Similar to strpbrk(), wcspbrk(). */ extern uint8_t * u8_strpbrk (const uint8_t *str, const uint8_t *accept) _UC_ATTRIBUTE_PURE; extern uint16_t * u16_strpbrk (const uint16_t *str, const uint16_t *accept) _UC_ATTRIBUTE_PURE; extern uint32_t * u32_strpbrk (const uint32_t *str, const uint32_t *accept) _UC_ATTRIBUTE_PURE; /* Find the first occurrence of NEEDLE in HAYSTACK. */ /* Similar to strstr(), wcsstr(). */ extern uint8_t * u8_strstr (const uint8_t *haystack, const uint8_t *needle) _UC_ATTRIBUTE_PURE; extern uint16_t * u16_strstr (const uint16_t *haystack, const uint16_t *needle) _UC_ATTRIBUTE_PURE; extern uint32_t * u32_strstr (const uint32_t *haystack, const uint32_t *needle) _UC_ATTRIBUTE_PURE; /* Test whether STR starts with PREFIX. */ extern bool u8_startswith (const uint8_t *str, const uint8_t *prefix) _UC_ATTRIBUTE_PURE; extern bool u16_startswith (const uint16_t *str, const uint16_t *prefix) _UC_ATTRIBUTE_PURE; extern bool u32_startswith (const uint32_t *str, const uint32_t *prefix) _UC_ATTRIBUTE_PURE; /* Test whether STR ends with SUFFIX. */ extern bool u8_endswith (const uint8_t *str, const uint8_t *suffix) _UC_ATTRIBUTE_PURE; extern bool u16_endswith (const uint16_t *str, const uint16_t *suffix) _UC_ATTRIBUTE_PURE; extern bool u32_endswith (const uint32_t *str, const uint32_t *suffix) _UC_ATTRIBUTE_PURE; /* Divide STR into tokens separated by characters in DELIM. This interface is actually more similar to wcstok than to strtok. */ /* Similar to strtok_r(), wcstok(). */ extern uint8_t * u8_strtok (uint8_t *_UC_RESTRICT str, const uint8_t *delim, uint8_t **ptr); extern uint16_t * u16_strtok (uint16_t *_UC_RESTRICT str, const uint16_t *delim, uint16_t **ptr); extern uint32_t * u32_strtok (uint32_t *_UC_RESTRICT str, const uint32_t *delim, uint32_t **ptr); #ifdef __cplusplus } #endif #endif /* _UNISTR_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016371�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-cmp2.h���������������������������������������������������������0000664�0000000�0000000�00000002552�14110572173�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2) { int cmp = U_CMP (s1, s2, MIN (n1, n2)); if (cmp == 0) cmp = _GL_CMP (n1, n2); return cmp; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-cpy-alloc.h����������������������������������������������������0000664�0000000�0000000�00000003132�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdlib.h> #include <string.h> UNIT * FUNC (const UNIT *s, size_t n) { UNIT *dest; dest = (UNIT *) malloc (n > 0 ? n * sizeof (UNIT) : 1); if (dest != NULL) { #if 0 UNIT *destptr = dest; for (; n > 0; n--) *destptr++ = *s++; #else if (n > 0) memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); #endif } return dest; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-cpy.h����������������������������������������������������������0000664�0000000�0000000�00000002115�14110572173�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <string.h> UNIT * FUNC (UNIT *dest, const UNIT *src, size_t n) { #if 0 UNIT *destptr = dest; for (; n > 0; n--) *destptr++ = *src++; #else if (n > 0) memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT)); #endif return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-endswith.h�����������������������������������������������������0000664�0000000�0000000�00000002700�14110572173�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ bool FUNC (const UNIT *str, const UNIT *suffix) { size_t len = U_STRLEN (str); size_t suffixlen = U_STRLEN (suffix); if (len >= suffixlen) return (U_CMP (str + (len - suffixlen), suffix, suffixlen) == 0); else return false; } ����������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-move.h���������������������������������������������������������0000664�0000000�0000000�00000003273�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <string.h> UNIT * FUNC (UNIT *dest, const UNIT *src, size_t n) { #if 0 if (dest < src) { UNIT *destptr = dest; const UNIT *srcptr = src; for (; n > 0; n--) *destptr++ = *srcptr++; } else if (dest > src) { UNIT *destptr = dest + n - 1; const UNIT *srcptr = src + n - 1; for (; n > 0; n--) *destptr-- = *srcptr--; } #else memmove ((char *) dest, (const char *) src, n * sizeof (UNIT)); #endif return dest; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-set.h����������������������������������������������������������0000664�0000000�0000000�00000002777�14110572173�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <errno.h> UNIT * FUNC (UNIT *s, ucs4_t uc, size_t n) { if (n > 0) { if (IS_SINGLE_UNIT (uc)) { UNIT *ptr = s; for (; n > 0; n--) *ptr++ = uc; } else { errno = EILSEQ; return NULL; } } return s; } �gnulib-20210822~d383792/lib/unistr/u-startswith.h���������������������������������������������������0000664�0000000�0000000�00000002642�14110572173�0021224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ bool FUNC (const UNIT *str, const UNIT *prefix) { for (;;) { UNIT uc1 = *str++; UNIT uc2 = *prefix++; if (uc2 == 0) return true; if (uc1 != uc2) return false; } } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-stpcpy.h�������������������������������������������������������0000664�0000000�0000000�00000002464�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src) { for (; (*dest = *src) != 0; src++, dest++) ; return dest; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-stpncpy.h������������������������������������������������������0000664�0000000�0000000�00000003005�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src, size_t n) { for (; n > 0 && (*dest = *src) != 0; src++, dest++, n--) ; /* This behavior is rarely useful, but it is here for consistency with strncpy and wcsncpy. */ { UNIT *destptr = dest; for (; n > 0; n--) *destptr++ = 0; } return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strcat.h�������������������������������������������������������0000664�0000000�0000000�00000002555�14110572173�0020313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8/UTF-16/UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src) { UNIT *destptr = dest + U_STRLEN (dest); for (; (*destptr = *src) != 0; src++, destptr++) ; return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strcoll.h������������������������������������������������������0000664�0000000�0000000�00000006647�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8/UTF-16/UTF-32 strings using the collation rules of the current locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int FUNC (const UNIT *s1, const UNIT *s2) { /* When this function succeeds, it sets errno back to its original value. When it fails, it sets errno, but also returns a meaningful return value, for the sake of callers which ignore errno. */ int final_errno = errno; const char *encoding = locale_charset (); char *sl1; char *sl2; int result; /* Pass iconveh_error here, not iconveh_question_mark. Otherwise the conversion to locale encoding can do transliteration or map some characters to question marks, leading to results that depend on the iconv() implementation and are not obvious. */ sl1 = U_STRCONV_TO_ENCODING (s1, encoding, iconveh_error); if (sl1 != NULL) { sl2 = U_STRCONV_TO_ENCODING (s2, encoding, iconveh_error); if (sl2 != NULL) { /* Compare sl1 and sl2. */ errno = 0; result = strcoll (sl1, sl2); if (errno == 0) { /* strcoll succeeded. */ free (sl1); free (sl2); /* The conversion to locale encoding can drop Unicode TAG characters. Therefore sl1 and sl2 may be equal when s1 and s2 were in fact different. Return a nonzero result in this case. */ if (result == 0) result = U_STRCMP (s1, s2); } else { /* strcoll failed. */ final_errno = errno; free (sl1); free (sl2); result = U_STRCMP (s1, s2); } } else { /* s1 could be converted to locale encoding, s2 not. */ final_errno = errno; free (sl1); result = -1; } } else { final_errno = errno; sl2 = U_STRCONV_TO_ENCODING (s2, encoding, iconveh_error); if (sl2 != NULL) { /* s2 could be converted to locale encoding, s1 not. */ free (sl2); result = 1; } else { /* Neither s1 nor s2 could be converted to locale encoding. */ result = U_STRCMP (s1, s2); } } errno = final_errno; return result; } �����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strcpy.h�������������������������������������������������������0000664�0000000�0000000�00000002523�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src) { UNIT *destptr = dest; for (; (*destptr = *src) != 0; src++, destptr++) ; return dest; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strcspn.h������������������������������������������������������0000664�0000000�0000000�00000003727�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ size_t FUNC (const UNIT *str, const UNIT *reject) { /* Optimize two cases. */ if (reject[0] == 0) return U_STRLEN (str); { ucs4_t uc; int count = U_STRMBTOUC (&uc, reject); if (count >= 0 && reject[count] == 0) { const UNIT *found = U_STRCHR (str, uc); if (found != NULL) return found - str; else return U_STRLEN (str); } } /* General case. */ { const UNIT *ptr = str; for (;;) { ucs4_t uc; int count = U_STRMBTOUC (&uc, ptr); if (count == 0) return ptr - str; if (count < 0) break; if (U_STRCHR (reject, uc)) return ptr - str; ptr += count; } return U_STRLEN (str); } } �����������������������������������������gnulib-20210822~d383792/lib/unistr/u-strdup.h�������������������������������������������������������0000664�0000000�0000000�00000003107�14110572173�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdlib.h> #include <string.h> UNIT * FUNC (const UNIT *s) { size_t n = U_STRLEN (s) + 1; UNIT *dest; dest = (UNIT *) malloc (n * sizeof (UNIT)); if (dest != NULL) { #if 0 UNIT *destptr = dest; for (; n > 0; n--) *destptr++ = *s++; #else memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); #endif } return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strlen.h�������������������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ size_t FUNC (const UNIT *s) { const UNIT *ptr; for (ptr = s; *ptr != 0; ptr++) ; return ptr - s; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strncat.h������������������������������������������������������0000664�0000000�0000000�00000002645�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8/UTF-16/UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src, size_t n) { UNIT *destptr = dest + U_STRLEN (dest); for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) ; if (n == 0) *destptr = 0; return dest; } �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strncpy.h������������������������������������������������������0000664�0000000�0000000�00000002775�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src, size_t n) { UNIT *destptr = dest; for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) ; /* This behavior is rarely useful, but it is here for consistency with strncpy and wcsncpy. */ for (; n > 0; n--) *destptr++ = 0; return dest; } ���gnulib-20210822~d383792/lib/unistr/u-strnlen.h������������������������������������������������������0000664�0000000�0000000�00000002560�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ size_t FUNC (const UNIT *s, size_t maxlen) { const UNIT *ptr; for (ptr = s; maxlen > 0 && *ptr != 0; ptr++, maxlen--) ; return ptr - s; } ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strpbrk.h������������������������������������������������������0000664�0000000�0000000�00000003415�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *str, const UNIT *accept) { /* Optimize two cases. */ if (accept[0] == 0) return NULL; { ucs4_t uc; int count = U_STRMBTOUC (&uc, accept); if (count >= 0 && accept[count] == 0) return U_STRCHR (str, uc); } /* General case. */ { const UNIT *ptr = str; for (;;) { ucs4_t uc; int count = U_STRMBTOUC (&uc, ptr); if (count <= 0) break; if (U_STRCHR (accept, uc)) return (UNIT *) ptr; ptr += count; } return NULL; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strspn.h�������������������������������������������������������0000664�0000000�0000000�00000003727�14110572173�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ size_t FUNC (const UNIT *str, const UNIT *accept) { /* Optimize two cases. */ if (accept[0] == 0) return 0; { ucs4_t uc; int count = U_STRMBTOUC (&uc, accept); if (count >= 0 && accept[count] == 0) { const UNIT *ptr = str; for (; *ptr != 0; ptr += count) if (U_CMP (ptr, accept, count) != 0) break; return ptr - str; } } /* General case. */ { const UNIT *ptr = str; for (;;) { ucs4_t uc; int count = U_STRMBTOUC (&uc, ptr); if (count == 0) return ptr - str; if (count < 0) break; if (!U_STRCHR (accept, uc)) return ptr - str; ptr += count; } return U_STRLEN (str); } } �����������������������������������������gnulib-20210822~d383792/lib/unistr/u-strstr.h�������������������������������������������������������0000664�0000000�0000000�00000011613�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. -*- coding: utf-8 -*- Copyright (C) 1999, 2002, 2006, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002, 2005. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (const UNIT *haystack, const UNIT *needle) { UNIT first = needle[0]; /* Is needle empty? */ if (first == 0) return (UNIT *) haystack; /* Is needle nearly empty (only one unit)? */ if (needle[1] == 0) return U_STRCHR (haystack, first); #ifdef U_STRMBTOUC /* Is needle nearly empty (only one character)? */ { ucs4_t first_uc; int count = U_STRMBTOUC (&first_uc, needle); if (count > 0 && needle[count] == 0) return U_STRCHR (haystack, first_uc); } #endif #if UNIT_IS_UINT8_T return (uint8_t *) strstr ((const char *) haystack, (const char *) needle); #else { /* Minimizing the worst-case complexity: Let n = U_STRLEN(haystack), m = U_STRLEN(needle). The naïve algorithm is O(n*m) worst-case. The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a memory allocation. To achieve linear complexity and yet amortize the cost of the memory allocation, we activate the Knuth-Morris-Pratt algorithm only once the naïve algorithm has already run for some time; more precisely, when - the outer loop count is >= 10, - the average number of comparisons per outer loop is >= 5, - the total number of comparisons is >= m. But we try it only once. If the memory allocation attempt failed, we don't retry it. */ bool try_kmp = true; size_t outer_loop_count = 0; size_t comparison_count = 0; size_t last_ccount = 0; /* last comparison count */ const UNIT *needle_last_ccount = needle; /* = needle + last_ccount */ /* Speed up the following searches of needle by caching its first character. */ UNIT b = *needle++; for (;; haystack++) { if (*haystack == 0) /* No match. */ return NULL; /* See whether it's advisable to use an asymptotically faster algorithm. */ if (try_kmp && outer_loop_count >= 10 && comparison_count >= 5 * outer_loop_count) { /* See if needle + comparison_count now reaches the end of needle. */ if (needle_last_ccount != NULL) { needle_last_ccount += U_STRNLEN (needle_last_ccount, comparison_count - last_ccount); if (*needle_last_ccount == 0) needle_last_ccount = NULL; last_ccount = comparison_count; } if (needle_last_ccount == NULL) { /* Try the Knuth-Morris-Pratt algorithm. */ const UNIT *result; bool success = knuth_morris_pratt (haystack, needle - 1, U_STRLEN (needle - 1), &result); if (success) return (UNIT *) result; try_kmp = false; } } outer_loop_count++; comparison_count++; if (*haystack == b) /* The first character matches. */ { const UNIT *rhaystack = haystack + 1; const UNIT *rneedle = needle; for (;; rhaystack++, rneedle++) { if (*rneedle == 0) /* Found a match. */ return (UNIT *) haystack; if (*rhaystack == 0) /* No match. */ return NULL; comparison_count++; if (*rhaystack != *rneedle) /* Nothing in this round. */ break; } } } } #endif } ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u-strtok.h�������������������������������������������������������0000664�0000000�0000000�00000003517�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *str, const UNIT *delim, UNIT **ptr) { if (str == NULL) { str = *ptr; if (str == NULL) return NULL; /* reminder that end of token sequence has been reached */ } /* Skip leading delimiters. */ str += U_STRSPN (str, delim); /* Found a token? */ if (*str == 0) { *ptr = NULL; return NULL; } /* Move past the token. */ { UNIT *token_end = U_STRPBRK (str, delim); if (token_end) { *ptr = token_end + U_STRMBLEN (token_end); /* NUL-terminate the token. */ *token_end = 0; } else *ptr = NULL; } return str; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-check.c������������������������������������������������������0000664�0000000�0000000�00000003500�14110572173�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint16_t * u16_check (const uint16_t *s, size_t n) { const uint16_t *s_end = s + n; while (s < s_end) { /* Keep in sync with unistr.h and u16-mbtouc-aux.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { s++; continue; } if (c < 0xdc00) { if (s + 2 <= s_end && s[1] >= 0xdc00 && s[1] < 0xe000) { s += 2; continue; } } /* invalid or incomplete multibyte character */ return s; } return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-chr.c��������������������������������������������������������0000664�0000000�0000000�00000003601�14110572173�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint16_t * u16_chr (const uint16_t *s, size_t n, ucs4_t uc) { uint16_t c[2]; if (uc < 0x10000) { uint16_t c0 = uc; for (; n > 0; s++, n--) { if (*s == c0) return (uint16_t *) s; } } else switch (u16_uctomb_aux (c, uc, 2)) { case 2: if (n > 1) { uint16_t c0 = c[0]; uint16_t c1 = c[1]; for (n--; n > 0; s++, n--) { if (*s == c0 && s[1] == c1) return (uint16_t *) s; } } break; } return NULL; } �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-cmp.c��������������������������������������������������������0000664�0000000�0000000�00000004141�14110572173�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) { /* Note that the UTF-16 encoding does NOT preserve lexicographic order. Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ for (; n > 0;) { uint16_t c1 = *s1++; uint16_t c2 = *s2++; if (c1 == c2) { n--; continue; } if (c1 < 0xd800 || c1 >= 0xe000) { if (!(c2 < 0xd800 || c2 >= 0xe000)) /* c2 is a surrogate, but c1 is not. */ return -1; } else { if (c2 < 0xd800 || c2 >= 0xe000) /* c1 is a surrogate, but c2 is not. */ return 1; } return (int)c1 - (int)c2; /* > 0 if c1 > c2, < 0 if c1 < c2. */ } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-cmp2.c�������������������������������������������������������0000664�0000000�0000000�00000002536�14110572173�0020015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "minmax.h" #define FUNC u16_cmp2 #define UNIT uint16_t #define U_CMP u16_cmp #include "u-cmp2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-cpy-alloc.c��������������������������������������������������0000664�0000000�0000000�00000002512�14110572173�0021031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_cpy_alloc #define UNIT uint16_t #include "u-cpy-alloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-cpy.c��������������������������������������������������������0000664�0000000�0000000�00000002476�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_cpy #define UNIT uint16_t #include "u-cpy.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-endswith.c���������������������������������������������������0000664�0000000�0000000�00000002572�14110572173�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_endswith #define UNIT uint16_t #define U_STRLEN u16_strlen #define U_CMP u16_cmp #include "u-endswith.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mblen.c������������������������������������������������������0000664�0000000�0000000�00000003305�14110572173�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_mblen (const uint16_t *s, size_t n) { if (n > 0) { /* Keep in sync with unistr.h and u16-mbtouc-aux.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) return (c != 0 ? 1 : 0); if (c < 0xdc00) { if (n >= 2 && s[1] >= 0xdc00 && s[1] < 0xe000) return 2; } } /* invalid or incomplete multibyte character */ return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbsnlen.c����������������������������������������������������0000664�0000000�0000000�00000003113�14110572173�0020602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-16 string. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" size_t u16_mbsnlen (const uint16_t *s, size_t n) { size_t characters; characters = 0; while (n > 0) { ucs4_t uc; int count = u16_mbtoucr (&uc, s, n); characters++; if (count == -2) break; if (count <= 0) count = 1; s += count; n -= count; } return characters; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbtouc-aux.c�������������������������������������������������0000664�0000000�0000000�00000003466�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-16 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #if defined IN_LIBUNISTRING || HAVE_INLINE int u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xdc00) { if (n >= 2) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbtouc-unsafe-aux.c������������������������������������������0000664�0000000�0000000�00000003475�14110572173�0022522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-16 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #if defined IN_LIBUNISTRING || HAVE_INLINE int u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xdc00) { if (n >= 2) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbtouc-unsafe.c����������������������������������������������0000664�0000000�0000000�00000004027�14110572173�0021721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u16_mbtouc_unsafe as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return 1; } if (c < 0xdc00) { if (n >= 2) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbtouc.c�����������������������������������������������������0000664�0000000�0000000�00000004006�14110572173�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u16_mbtouc as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return 1; } if (c < 0xdc00) { if (n >= 2) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-mbtoucr.c����������������������������������������������������0000664�0000000�0000000�00000003642�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string, returning an error code. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n) { uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return 1; } if (c < 0xdc00) { if (n >= 2) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } /* invalid multibyte character */ *puc = 0xfffd; return -1; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-move.c�������������������������������������������������������0000664�0000000�0000000�00000002500�14110572173�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_move #define UNIT uint16_t #include "u-move.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-next.c�������������������������������������������������������0000664�0000000�0000000�00000002763�14110572173�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-16 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint16_t * u16_next (ucs4_t *puc, const uint16_t *s) { int count; count = u16_strmbtouc (puc, s); if (count > 0) return s + count; else { if (count < 0) *puc = 0xfffd; return NULL; } } �������������gnulib-20210822~d383792/lib/unistr/u16-prev.c�������������������������������������������������������0000664�0000000�0000000�00000003574�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint16_t * u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start) { /* Keep in sync with unistr.h and utf16-ucs4.c. */ if (s != start) { uint16_t c_1 = s[-1]; if (c_1 < 0xd800 || c_1 >= 0xe000) { *puc = c_1; return s - 1; } if (c_1 >= 0xdc00) if (s - 1 != start) { uint16_t c_2 = s[-2]; if (c_2 >= 0xd800 && c_2 < 0xdc00) { *puc = 0x10000 + ((c_2 - 0xd800) << 10) + (c_1 - 0xdc00); return s - 2; } } } return NULL; } ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-set.c��������������������������������������������������������0000664�0000000�0000000�00000002600�14110572173�0017737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_set #define UNIT uint16_t #define IS_SINGLE_UNIT(uc) (uc < 0xd800 || (uc < 0x10000 && uc >= 0xe000)) #include "u-set.h" ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-startswith.c�������������������������������������������������0000664�0000000�0000000�00000002514�14110572173�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_startswith #define UNIT uint16_t #include "u-startswith.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-stpcpy.c�����������������������������������������������������0000664�0000000�0000000�00000002503�14110572173�0020470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_stpcpy #define UNIT uint16_t #include "u-stpcpy.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-stpncpy.c����������������������������������������������������0000664�0000000�0000000�00000002475�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_stpncpy #define UNIT uint16_t #include "u-stpncpy.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strcat.c�����������������������������������������������������0000664�0000000�0000000�00000002537�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strcat #define UNIT uint16_t #define U_STRLEN u16_strlen #include "u-strcat.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strchr.c�����������������������������������������������������0000664�0000000�0000000�00000003750�14110572173�0020460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint16_t * u16_strchr (const uint16_t *s, ucs4_t uc) { uint16_t c[2]; if (uc < 0x10000) { uint16_t c0 = uc; for (;; s++) { if (*s == c0) break; if (*s == 0) goto notfound; } return (uint16_t *) s; } else switch (u16_uctomb_aux (c, uc, 2)) { case 2: if (*s == 0) goto notfound; { uint16_t c0 = c[0]; uint16_t c1 = c[1]; for (;; s++) { if (s[1] == 0) goto notfound; if (*s == c0 && s[1] == c1) break; } return (uint16_t *) s; } } notfound: return NULL; } ������������������������gnulib-20210822~d383792/lib/unistr/u16-strcmp.c�����������������������������������������������������0000664�0000000�0000000�00000004044�14110572173�0020460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_strcmp (const uint16_t *s1, const uint16_t *s2) { /* Note that the UTF-16 encoding does NOT preserve lexicographic order. Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ for (;;) { uint16_t c1 = *s1++; uint16_t c2 = *s2++; if (c1 != 0 && c1 == c2) continue; if (c1 < 0xd800 || c1 >= 0xe000) { if (!(c2 < 0xd800 || c2 >= 0xe000)) /* c2 is a surrogate, but c1 is not. */ return -1; } else { if (c2 < 0xd800 || c2 >= 0xe000) /* c1 is a surrogate, but c2 is not. */ return 1; } return (int)c1 - (int)c2; /* > 0 if c1 > c2, < 0 if c1 < c2. */ } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strcoll.c����������������������������������������������������0000664�0000000�0000000�00000003003�14110572173�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings using the collation rules of the current locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "uniconv.h" #define FUNC u16_strcoll #define UNIT uint16_t #define U_STRCMP u16_strcmp #define U_STRCONV_TO_ENCODING u16_strconv_to_encoding #include "u-strcoll.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strcpy.c�����������������������������������������������������0000664�0000000�0000000�00000002473�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strcpy #define UNIT uint16_t #include "u-strcpy.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strcspn.c����������������������������������������������������0000664�0000000�0000000�00000002660�14110572173�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strcspn #define UNIT uint16_t #define U_STRLEN u16_strlen #define U_STRMBTOUC u16_strmbtouc #define U_STRCHR u16_strchr #include "u-strcspn.h" ��������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strdup.c�����������������������������������������������������0000664�0000000�0000000�00000002527�14110572173�0020475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strdup #define UNIT uint16_t #define U_STRLEN u16_strlen #include "u-strdup.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strlen.c�����������������������������������������������������0000664�0000000�0000000�00000002512�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strlen #define UNIT uint16_t #include "u-strlen.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strmblen.c���������������������������������������������������0000664�0000000�0000000�00000003151�14110572173�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_strmblen (const uint16_t *s) { /* Keep in sync with unistr.h and u16-mbtouc-aux.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) return (c != 0 ? 1 : 0); if (c < 0xdc00) { if (s[1] >= 0xdc00 && s[1] < 0xe000) return 2; } /* invalid or incomplete multibyte character */ return -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strmbtouc.c��������������������������������������������������0000664�0000000�0000000�00000003356�14110572173�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_strmbtouc (ucs4_t *puc, const uint16_t *s) { /* Keep in sync with unistr.h and u16-mbtouc-aux.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return (c != 0 ? 1 : 0); } if (c < 0xdc00) { if (s[1] >= 0xdc00 && s[1] < 0xe000) { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } } /* invalid or incomplete multibyte character */ return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strncat.c����������������������������������������������������0000664�0000000�0000000�00000002541�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strncat #define UNIT uint16_t #define U_STRLEN u16_strlen #include "u-strncat.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strncmp.c����������������������������������������������������0000664�0000000�0000000�00000004203�14110572173�0020633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) { /* Note that the UTF-16 encoding does NOT preserve lexicographic order. Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ for (; n > 0;) { uint16_t c1 = *s1++; uint16_t c2 = *s2++; if (c1 != 0 && c1 == c2) { n--; continue; } if (c1 < 0xd800 || c1 >= 0xe000) { if (!(c2 < 0xd800 || c2 >= 0xe000)) /* c2 is a surrogate, but c1 is not. */ return -1; } else { if (c2 < 0xd800 || c2 >= 0xe000) /* c1 is a surrogate, but c2 is not. */ return 1; } return (int)c1 - (int)c2; /* > 0 if c1 > c2, < 0 if c1 < c2, = 0 if c1 and c2 are both 0. */ } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strncpy.c����������������������������������������������������0000664�0000000�0000000�00000002475�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strncpy #define UNIT uint16_t #include "u-strncpy.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strnlen.c����������������������������������������������������0000664�0000000�0000000�00000002524�14110572173�0020636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strnlen #define UNIT uint16_t #include "u-strnlen.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strpbrk.c����������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strpbrk #define UNIT uint16_t #define U_STRMBTOUC u16_strmbtouc #define U_STRCHR u16_strchr #include "u-strpbrk.h" ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strrchr.c����������������������������������������������������0000664�0000000�0000000�00000004300�14110572173�0020632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint16_t * u16_strrchr (const uint16_t *s, ucs4_t uc) { /* Calling u16_strlen and then searching from the other end would cause more memory accesses. Avoid that, at the cost of a few more comparisons. */ uint16_t *result = NULL; uint16_t c[2]; if (uc < 0x10000) { uint16_t c0 = uc; for (;; s++) { if (*s == c0) result = (uint16_t *) s; if (*s == 0) break; } } else switch (u16_uctomb_aux (c, uc, 2)) { case 2: if (*s) { uint16_t c0 = c[0]; uint16_t c1 = c[1]; /* FIXME: Maybe walking the string via u16_mblen is a win? */ for (;; s++) { if (s[1] == 0) break; if (*s == c0 && s[1] == c1) result = (uint16_t *) s; } } break; } return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strspn.c�����������������������������������������������������0000664�0000000�0000000�00000002704�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strspn #define UNIT uint16_t #define U_STRLEN u16_strlen #define U_STRMBTOUC u16_strmbtouc #define U_CMP u16_cmp #define U_STRCHR u16_strchr #include "u-strspn.h" ������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strstr.c�����������������������������������������������������0000664�0000000�0000000�00000003112�14110572173�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "malloca.h" /* FIXME: Maybe walking the string via u16_mblen is a win? */ #define UNIT uint16_t #define CANON_ELEMENT(c) c #include "str-kmp.h" #define FUNC u16_strstr #define U_STRCHR u16_strchr #define U_STRMBTOUC u16_strmbtouc #define U_STRLEN u16_strlen #define U_STRNLEN u16_strnlen #include "u-strstr.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-strtok.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strtok #define UNIT uint16_t #define U_STRSPN u16_strspn #define U_STRPBRK u16_strpbrk #define U_STRMBLEN u16_strmblen #include "u-strtok.h" �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-to-u32.c�����������������������������������������������������0000664�0000000�0000000�00000007364�14110572173�0020211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-16 string to UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_to_u32 #define SRC_UNIT uint16_t #define DST_UNIT uint32_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ count = u16_mbtoucr (&uc, s, s_end - s); if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } s += count; /* Store it in the output string. */ if (length + 1 > allocated) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 1 > allocated) allocated = length + 1; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; } result[length++] = uc; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-to-u8.c������������������������������������������������������0000664�0000000�0000000�00000010110�14110572173�0020113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-16 string to UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_to_u8 #define SRC_UNIT uint16_t #define DST_UNIT uint8_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ count = u16_mbtoucr (&uc, s, s_end - s); if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } s += count; /* Store it in the output string. */ count = u8_uctomb (result + length, uc, allocated - length); if (count == -1) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } if (count == -2) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 6 > allocated) allocated = length + 6; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; count = u8_uctomb (result + length, uc, allocated - length); if (count < 0) abort (); } length += count; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-uctomb-aux.c�������������������������������������������������0000664�0000000�0000000�00000003616�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UCS-4 to UTF-16. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_uctomb_aux (uint16_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0xd800) { /* The case n >= 1 is already handled by the caller. */ } else if (uc < 0x10000) { if (uc >= 0xe000) { if (n >= 1) { s[0] = uc; return 1; } } else return -1; } else { if (uc < 0x110000) { if (n >= 2) { s[0] = 0xd800 + ((uc - 0x10000) >> 10); s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); return 2; } } else return -1; } return -2; } ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u16-uctomb.c�����������������������������������������������������0000664�0000000�0000000�00000004162�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-16 string. Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u16_uctomb as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0xd800) { if (n > 0) { s[0] = uc; return 1; } /* else return -2, below. */ } else if (uc < 0x10000) { if (uc >= 0xe000) { if (n >= 1) { s[0] = uc; return 1; } } else return -1; } else { if (uc < 0x110000) { if (n >= 2) { s[0] = 0xd800 + ((uc - 0x10000) >> 10); s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); return 2; } } else return -1; } return -2; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-check.c������������������������������������������������������0000664�0000000�0000000�00000003041�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-32 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint32_t * u32_check (const uint32_t *s, size_t n) { const uint32_t *s_end = s + n; while (s < s_end) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) s++; else /* invalid Unicode character */ return s; } return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-chr.c��������������������������������������������������������0000664�0000000�0000000�00000002667�14110572173�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint32_t * u32_chr (const uint32_t *s, size_t n, ucs4_t uc) { for (; n > 0; s++, n--) { if (*s == uc) return (uint32_t *) s; } return NULL; } �������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-cmp.c��������������������������������������������������������0000664�0000000�0000000�00000003205�14110572173�0017723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) { for (; n > 0;) { uint32_t uc1 = *s1++; uint32_t uc2 = *s2++; if (uc1 == uc2) { n--; continue; } /* Note that uc1 and uc2 each have at most 31 bits. */ return (int)uc1 - (int)uc2; /* > 0 if uc1 > uc2, < 0 if uc1 < uc2. */ } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-cmp2.c�������������������������������������������������������0000664�0000000�0000000�00000002536�14110572173�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "minmax.h" #define FUNC u32_cmp2 #define UNIT uint32_t #define U_CMP u32_cmp #include "u-cmp2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-cpy-alloc.c��������������������������������������������������0000664�0000000�0000000�00000002512�14110572173�0021027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_cpy_alloc #define UNIT uint32_t #include "u-cpy-alloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-cpy.c��������������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_cpy #define UNIT uint32_t #include "u-cpy.h" ������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-endswith.c���������������������������������������������������0000664�0000000�0000000�00000002572�14110572173�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_endswith #define UNIT uint32_t #define U_STRLEN u32_strlen #define U_CMP u32_cmp #include "u-endswith.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-mblen.c������������������������������������������������������0000664�0000000�0000000�00000003004�14110572173�0020236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_mblen (const uint32_t *s, size_t n) { if (n > 0) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) return (c != 0 ? 1 : 0); } /* invalid or incomplete multibyte character */ return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-mbsnlen.c����������������������������������������������������0000664�0000000�0000000�00000002473�14110572173�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-32 string. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" size_t u32_mbsnlen (const uint32_t *s, size_t n) { return n; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-mbtouc-unsafe.c����������������������������������������������0000664�0000000�0000000�00000002443�14110572173�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u32_mbtouc_unsafe as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) *puc = c; else /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-mbtouc.c�����������������������������������������������������0000664�0000000�0000000�00000003230�14110572173�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u32_mbtouc as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) *puc = c; else /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-mbtoucr.c����������������������������������������������������0000664�0000000�0000000�00000003070�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string, returning an error code. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) { *puc = c; return 1; } else { /* invalid multibyte character */ *puc = 0xfffd; return -1; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-move.c�������������������������������������������������������0000664�0000000�0000000�00000002500�14110572173�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_move #define UNIT uint32_t #include "u-move.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-next.c�������������������������������������������������������0000664�0000000�0000000�00000002770�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint32_t * u32_next (ucs4_t *puc, const uint32_t *s) { int count; count = u32_strmbtouc (puc, s); if (count > 0) return s + count; else { if (count < 0) *puc = 0xfffd; return NULL; } } ��������gnulib-20210822~d383792/lib/unistr/u32-prev.c�������������������������������������������������������0000664�0000000�0000000�00000003063�14110572173�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint32_t * u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start) { if (s != start) { uint32_t c_1 = s[-1]; if (c_1 < 0xd800 || (c_1 >= 0xe000 && c_1 < 0x110000)) { *puc = c_1; return s - 1; } } return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-set.c��������������������������������������������������������0000664�0000000�0000000�00000002601�14110572173�0017736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_set #define UNIT uint32_t #define IS_SINGLE_UNIT(uc) (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) #include "u-set.h" �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-startswith.c�������������������������������������������������0000664�0000000�0000000�00000002514�14110572173�0021362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_startswith #define UNIT uint32_t #include "u-startswith.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-stpcpy.c�����������������������������������������������������0000664�0000000�0000000�00000002473�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_stpcpy #define UNIT uint32_t #include "u-stpcpy.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-stpncpy.c����������������������������������������������������0000664�0000000�0000000�00000002475�14110572173�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_stpncpy #define UNIT uint32_t #include "u-stpncpy.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strcat.c�����������������������������������������������������0000664�0000000�0000000�00000002537�14110572173�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strcat #define UNIT uint32_t #define U_STRLEN u32_strlen #include "u-strcat.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strchr.c�����������������������������������������������������0000664�0000000�0000000�00000002731�14110572173�0020454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint32_t * u32_strchr (const uint32_t *s, ucs4_t uc) { for (;; s++) { if (*s == uc) break; if (*s == 0) goto notfound; } return (uint32_t *) s; notfound: return NULL; } ���������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strcmp.c�����������������������������������������������������0000664�0000000�0000000�00000003111�14110572173�0020450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_strcmp (const uint32_t *s1, const uint32_t *s2) { for (;;) { uint32_t uc1 = *s1++; uint32_t uc2 = *s2++; if (uc1 != 0 && uc1 == uc2) continue; /* Note that uc1 and uc2 each have at most 31 bits. */ return (int)uc1 - (int)uc2; /* > 0 if uc1 > uc2, < 0 if uc1 < uc2. */ } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strcoll.c����������������������������������������������������0000664�0000000�0000000�00000003003�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings using the collation rules of the current locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "uniconv.h" #define FUNC u32_strcoll #define UNIT uint32_t #define U_STRCMP u32_strcmp #define U_STRCONV_TO_ENCODING u32_strconv_to_encoding #include "u-strcoll.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strcpy.c�����������������������������������������������������0000664�0000000�0000000�00000002473�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strcpy #define UNIT uint32_t #include "u-strcpy.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strcspn.c����������������������������������������������������0000664�0000000�0000000�00000003527�14110572173�0020647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strcspn #define UNIT uint32_t #define U_STRLEN u32_strlen #define U_STRCHR u32_strchr size_t FUNC (const UNIT *str, const UNIT *reject) { /* Optimize two cases. */ if (reject[0] == 0) return U_STRLEN (str); if (reject[1] == 0) { ucs4_t uc = reject[0]; const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (*ptr == uc) break; return ptr - str; } /* General case. */ { const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (U_STRCHR (reject, *ptr)) break; return ptr - str; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strdup.c�����������������������������������������������������0000664�0000000�0000000�00000002527�14110572173�0020473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strdup #define UNIT uint32_t #define U_STRLEN u32_strlen #include "u-strdup.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strlen.c�����������������������������������������������������0000664�0000000�0000000�00000002512�14110572173�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strlen #define UNIT uint32_t #include "u-strlen.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strmblen.c���������������������������������������������������0000664�0000000�0000000�00000002712�14110572173�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_strmblen (const uint32_t *s) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) return (c != 0 ? 1 : 0); /* invalid multibyte character */ return -1; } ������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strmbtouc.c��������������������������������������������������0000664�0000000�0000000�00000002766�14110572173�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_strmbtouc (ucs4_t *puc, const uint32_t *s) { uint32_t c = *s; if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) { *puc = c; return (c != 0 ? 1 : 0); } /* invalid multibyte character */ return -1; } ����������gnulib-20210822~d383792/lib/unistr/u32-strncat.c����������������������������������������������������0000664�0000000�0000000�00000002541�14110572173�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strncat #define UNIT uint32_t #define U_STRLEN u32_strlen #include "u-strncat.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strncmp.c����������������������������������������������������0000664�0000000�0000000�00000003253�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) { for (; n > 0;) { uint32_t uc1 = *s1++; uint32_t uc2 = *s2++; if (uc1 != 0 && uc1 == uc2) { n--; continue; } /* Note that uc1 and uc2 each have at most 31 bits. */ return (int)uc1 - (int)uc2; /* > 0 if uc1 > uc2, < 0 if uc1 < uc2, = 0 if uc1 and uc2 are both 0. */ } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strncpy.c����������������������������������������������������0000664�0000000�0000000�00000002475�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strncpy #define UNIT uint32_t #include "u-strncpy.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strnlen.c����������������������������������������������������0000664�0000000�0000000�00000002524�14110572173�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strnlen #define UNIT uint32_t #include "u-strnlen.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strpbrk.c����������������������������������������������������0000664�0000000�0000000�00000003503�14110572173�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strpbrk #define UNIT uint32_t #define U_STRCHR u32_strchr UNIT * FUNC (const UNIT *str, const UNIT *accept) { /* Optimize two cases. */ if (accept[0] == 0) return NULL; if (accept[1] == 0) { ucs4_t uc = accept[0]; const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (*ptr == uc) return (UNIT *) ptr; return NULL; } /* General case. */ { const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (U_STRCHR (accept, *ptr)) return (UNIT *) ptr; return NULL; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strrchr.c����������������������������������������������������0000664�0000000�0000000�00000003173�14110572173�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint32_t * u32_strrchr (const uint32_t *s, ucs4_t uc) { /* Calling u32_strlen and then searching from the other end would cause more memory accesses. Avoid that, at the cost of a few more comparisons. */ uint32_t *result = NULL; for (;; s++) { if (*s == uc) result = (uint32_t *) s; if (*s == 0) break; } return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strspn.c�����������������������������������������������������0000664�0000000�0000000�00000003456�14110572173�0020505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strspn #define UNIT uint32_t #define U_STRCHR u32_strchr size_t FUNC (const UNIT *str, const UNIT *accept) { /* Optimize two cases. */ if (accept[0] == 0) return 0; if (accept[1] == 0) { ucs4_t uc = accept[0]; const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (*ptr != uc) break; return ptr - str; } /* General case. */ { const UNIT *ptr = str; for (; *ptr != 0; ptr++) if (!U_STRCHR (accept, *ptr)) break; return ptr - str; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-strstr.c�����������������������������������������������������0000664�0000000�0000000�00000002750�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "malloca.h" #define UNIT uint32_t #define CANON_ELEMENT(c) c #include "str-kmp.h" #define FUNC u32_strstr #define U_STRCHR u32_strchr #define U_STRLEN u32_strlen #define U_STRNLEN u32_strnlen #include "u-strstr.h" ������������������������gnulib-20210822~d383792/lib/unistr/u32-strtok.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strtok #define UNIT uint32_t #define U_STRSPN u32_strspn #define U_STRPBRK u32_strpbrk #define U_STRMBLEN u32_strmblen #include "u-strtok.h" �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-to-u16.c�����������������������������������������������������0000664�0000000�0000000�00000007735�14110572173�0020213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-32 string to UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_to_u16 #define SRC_UNIT uint32_t #define DST_UNIT uint16_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ uc = *s++; /* No need to call the safe variant u32_mbtouc, because u16_uctomb will verify uc anyway. */ /* Store it in the output string. */ count = u16_uctomb (result + length, uc, allocated - length); if (count == -1) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } if (count == -2) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 2 > allocated) allocated = length + 2; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; count = u16_uctomb (result + length, uc, allocated - length); if (count < 0) abort (); } length += count; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } �����������������������������������gnulib-20210822~d383792/lib/unistr/u32-to-u8.c������������������������������������������������������0000664�0000000�0000000�00000007121�14110572173�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-32 string to UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_to_u8 #define SRC_UNIT uint32_t #define DST_UNIT uint8_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ uc = *s++; /* No need to call the safe variant u32_mbtouc, because u8_uctomb will verify uc anyway. */ /* Store it in the output string. */ count = u8_uctomb (result + length, uc, allocated - length); if (count == -1) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } if (count == -2) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 6 > allocated) allocated = length + 6; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; count = u8_uctomb (result + length, uc, allocated - length); if (count < 0) abort (); } length += count; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u32-uctomb.c�����������������������������������������������������0000664�0000000�0000000�00000002450�14110572173�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-32 string. Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u32_uctomb as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) { if (n > 0) { *s = uc; return 1; } else return -2; } else return -1; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-check.c�������������������������������������������������������0000664�0000000�0000000�00000004312�14110572173�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint8_t * u8_check (const uint8_t *s, size_t n) { const uint8_t *s_end = s + n; while (s < s_end) { /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ uint8_t c = *s; if (c < 0x80) { s++; continue; } if (c >= 0xc2) { if (c < 0xe0) { if (s + 2 <= s_end && (s[1] ^ 0x80) < 0x40) { s += 2; continue; } } else if (c < 0xf0) { if (s + 3 <= s_end && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { s += 3; continue; } } else if (c < 0xf8) { if (s + 4 <= s_end && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) { s += 4; continue; } } } /* invalid or incomplete multibyte character */ return s; } return NULL; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-chr.c���������������������������������������������������������0000664�0000000�0000000�00000015463�14110572173�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_chr (const uint8_t *s, size_t n, ucs4_t uc) { if (uc < 0x80) { uint8_t c0 = uc; return (uint8_t *) memchr ((const char *) s, c0, n); } { uint8_t c[6]; size_t uc_size; uc_size = u8_uctomb_aux (c, uc, 6); if (n < uc_size) return NULL; /* For multibyte character matching we use a Boyer-Moore like algorithm that searches for the last byte, skipping multi-byte jumps, and matches back from there. Instead of using a table as is usual for Boyer-Moore, we compare the candidate last byte s[UC_SIZE-1] with each of the possible bytes in the UTF-8 representation of UC. If the final byte does not match, we will perform up to UC_SIZE comparisons per memory load---but each comparison lets us skip one byte in the input! If the final byte matches, the "real" Boyer-Moore algorithm is approximated. Instead, u8_chr just looks for other cN that are equal to the final byte and uses those to try realigning to another possible match. For example, when searching for 0xF0 0xAA 0xBB 0xAA it will always skip forward by two bytes, even if the character in the string was for example 0xF1 0xAA 0xBB 0xAA. The advantage of this scheme is that the skip count after a failed match can be computed outside the loop, and that it keeps the complexity low for a pretty rare case. In particular, since c[0] is never between 0x80 and 0xBF, c[0] is never equal to c[UC_SIZE-1] and this is optimal for two-byte UTF-8 characters. */ switch (uc_size) { case 2: { uint8_t c0 = c[0]; uint8_t c1 = c[1]; const uint8_t *end = s + n - 1; do { /* Here s < end. Test whether s[0..1] == { c0, c1 }. */ uint8_t s1 = s[1]; if (s1 == c1) { if (*s == c0) return (uint8_t *) s; else /* Skip the search at s + 1, because s[1] = c1 < c0. */ s += 2; } else { if (s1 == c0) s++; else /* Skip the search at s + 1, because s[1] != c0. */ s += 2; } } while (s < end); break; } case 3: { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; const uint8_t *end = s + n - 2; size_t skip; if (c2 == c1) skip = 1; else skip = 3; do { /* Here s < end. Test whether s[0..2] == { c0, c1, c2 }. */ uint8_t s2 = s[2]; if (s2 == c2) { if (s[1] == c1 && *s == c0) return (uint8_t *) s; else /* If c2 != c1: Skip the search at s + 1, because s[2] == c2 != c1. Skip the search at s + 2, because s[2] == c2 < c0. */ s += skip; } else { if (s2 == c1) s++; else if (s2 == c0) /* Skip the search at s + 1, because s[2] != c1. */ s += 2; else /* Skip the search at s + 1, because s[2] != c1. Skip the search at s + 2, because s[2] != c0. */ s += 3; } } while (s < end); break; } case 4: { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; uint8_t c3 = c[3]; const uint8_t *end = s + n - 3; size_t skip; if (c3 == c2) skip = 1; else if (c3 == c1) skip = 2; else skip = 4; do { /* Here s < end. Test whether s[0..3] == { c0, c1, c2, c3 }. */ uint8_t s3 = s[3]; if (s3 == c3) { if (s[2] == c2 && s[1] == c1 && *s == c0) return (uint8_t *) s; else /* If c3 != c2: Skip the search at s + 1, because s[3] == c3 != c2. If c3 != c1: Skip the search at s + 2, because s[3] == c3 != c1. Skip the search at s + 3, because s[3] == c3 < c0. */ s += skip; } else { if (s3 == c2) s++; else if (s3 == c1) /* Skip the search at s + 1, because s[3] != c2. */ s += 2; else if (s3 == c0) /* Skip the search at s + 1, because s[3] != c2. Skip the search at s + 2, because s[3] != c1. */ s += 3; else /* Skip the search at s + 1, because s[3] != c2. Skip the search at s + 2, because s[3] != c1. Skip the search at s + 3, because s[3] != c0. */ s += 4; } } while (s < end); break; } } return NULL; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-cmp.c���������������������������������������������������������0000664�0000000�0000000�00000002750�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> int u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) { /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ return n == 0 ? 0 : memcmp ((const char *) s1, (const char *) s2, n); } ������������������������gnulib-20210822~d383792/lib/unistr/u8-cmp2.c��������������������������������������������������������0000664�0000000�0000000�00000002532�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "minmax.h" #define FUNC u8_cmp2 #define UNIT uint8_t #define U_CMP u8_cmp #include "u-cmp2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-cpy-alloc.c���������������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0020750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_cpy_alloc #define UNIT uint8_t #include "u-cpy-alloc.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-cpy.c���������������������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_cpy #define UNIT uint8_t #include "u-cpy.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-endswith.c����������������������������������������������������0000664�0000000�0000000�00000002565�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_endswith #define UNIT uint8_t #define U_STRLEN u8_strlen #define U_CMP u8_cmp #include "u-endswith.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mblen.c�������������������������������������������������������0000664�0000000�0000000�00000003665�14110572173�0020176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u8_mblen (const uint8_t *s, size_t n) { if (n > 0) { /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ uint8_t c = *s; if (c < 0x80) return (c != 0 ? 1 : 0); if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2 && (s[1] ^ 0x80) < 0x40) return 2; } else if (c < 0xf0) { if (n >= 3 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) return 3; } else if (c < 0xf8) { if (n >= 4 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) return 4; } } } /* invalid or incomplete multibyte character */ return -1; } ���������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbsnlen.c�����������������������������������������������������0000664�0000000�0000000�00000003210�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-8 string. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" size_t u8_mbsnlen (const uint8_t *s, size_t n) { size_t characters; characters = 0; while (n > 0) { ucs4_t uc; int count = u8_mbtoucr (&uc, s, n); characters++; if (count == -2) break; if (count < 0) count = u8_mbtouc (&uc, s, n); else if (count == 0) count = 1; s += count; n -= count; } return characters; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbtouc-aux.c��������������������������������������������������0000664�0000000�0000000�00000010542�14110572173�0021155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-8 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #if defined IN_LIBUNISTRING || HAVE_INLINE int u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else return 2; } } else if (c < 0xf8) { if (n >= 4) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else if (n == 2 || (s[2] ^ 0x80) >= 0x40) return 2; else return 3; } } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbtouc-unsafe-aux.c�������������������������������������������0000664�0000000�0000000�00000010607�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-8 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #if defined IN_LIBUNISTRING || HAVE_INLINE int u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else return 2; } } else if (c < 0xf8) { if (n >= 4) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) ) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else if (n == 2 || (s[2] ^ 0x80) >= 0x40) return 2; else return 3; } } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbtouc-unsafe.c�����������������������������������������������0000664�0000000�0000000�00000011124�14110572173�0021636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u8_mbtouc_unsafe as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c < 0x80) { *puc = c; return 1; } else if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else return 2; } } else if (c < 0xf8) { if (n >= 4) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) ) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else if (n == 2 || (s[2] ^ 0x80) >= 0x40) return 2; else return 3; } } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbtouc.c������������������������������������������������������0000664�0000000�0000000�00000011045�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u8_mbtouc as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #if !HAVE_INLINE int u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c < 0x80) { *puc = c; return 1; } else if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else return 2; } } else if (c < 0xf8) { if (n >= 4) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; if (n == 1 || (s[1] ^ 0x80) >= 0x40) return 1; else if (n == 2 || (s[2] ^ 0x80) >= 0x40) return 2; else return 3; } } } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-mbtoucr.c�����������������������������������������������������0000664�0000000�0000000�00000010756�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string, returning an error code. Copyright (C) 1999-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n) { uint8_t c = *s; if (c < 0x80) { *puc = c; return 1; } else if (c >= 0xc2) { if (c < 0xe0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } else if (c < 0xf0) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { if (n >= 3) { if ((s[2] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } else if (c < 0xf8) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) { if (n >= 3) { if ((s[2] ^ 0x80) < 0x40) { if (n >= 4) { if ((s[3] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } } /* invalid multibyte character */ *puc = 0xfffd; return -1; } ������������������gnulib-20210822~d383792/lib/unistr/u8-move.c��������������������������������������������������������0000664�0000000�0000000�00000002467�14110572173�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_move #define UNIT uint8_t #include "u-move.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-next.c��������������������������������������������������������0000664�0000000�0000000�00000002756�14110572173�0020057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint8_t * u8_next (ucs4_t *puc, const uint8_t *s) { int count; count = u8_strmbtouc (puc, s); if (count > 0) return s + count; else { if (count < 0) *puc = 0xfffd; return NULL; } } ������������������gnulib-20210822~d383792/lib/unistr/u8-prev.c��������������������������������������������������������0000664�0000000�0000000�00000005460�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" const uint8_t * u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start) { /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ if (s != start) { uint8_t c_1 = s[-1]; if (c_1 < 0x80) { *puc = c_1; return s - 1; } if ((c_1 ^ 0x80) < 0x40) if (s - 1 != start) { uint8_t c_2 = s[-2]; if (c_2 >= 0xc2 && c_2 < 0xe0) { *puc = ((unsigned int) (c_2 & 0x1f) << 6) | (unsigned int) (c_1 ^ 0x80); return s - 2; } if ((c_2 ^ 0x80) < 0x40) if (s - 2 != start) { uint8_t c_3 = s[-3]; if (c_3 >= 0xe0 && c_3 < 0xf0 && (c_3 >= 0xe1 || c_2 >= 0xa0) && (c_3 != 0xed || c_2 < 0xa0)) { *puc = ((unsigned int) (c_3 & 0x0f) << 12) | ((unsigned int) (c_2 ^ 0x80) << 6) | (unsigned int) (c_1 ^ 0x80); return s - 3; } if ((c_3 ^ 0x80) < 0x40) if (s - 3 != start) { uint8_t c_4 = s[-4]; if (c_4 >= 0xf0 && c_4 < 0xf8 && (c_4 >= 0xf1 || c_3 >= 0x90) && (c_4 < 0xf4 || (c_4 == 0xf4 && c_3 < 0x90))) { *puc = ((unsigned int) (c_4 & 0x07) << 18) | ((unsigned int) (c_3 ^ 0x80) << 12) | ((unsigned int) (c_2 ^ 0x80) << 6) | (unsigned int) (c_1 ^ 0x80); return s - 4; } } } } } return NULL; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-set.c���������������������������������������������������������0000664�0000000�0000000�00000003120�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_set #define UNIT uint8_t #define IS_SINGLE_UNIT(uc) (uc < 0x80) #include <errno.h> #include <string.h> UNIT * FUNC (UNIT *s, ucs4_t uc, size_t n) { if (n > 0) { if (IS_SINGLE_UNIT (uc)) memset ((char *) s, uc, n); else { errno = EILSEQ; return NULL; } } return s; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-startswith.c��������������������������������������������������0000664�0000000�0000000�00000002511�14110572173�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_startswith #define UNIT uint8_t #include "u-startswith.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-stpcpy.c������������������������������������������������������0000664�0000000�0000000�00000003110�14110572173�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Ensure stpcpy() gets declared. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> /* Specification. */ #include "unistr.h" #if HAVE_STPCPY # include <string.h> uint8_t * u8_stpcpy (uint8_t *dest, const uint8_t *src) { return (uint8_t *) stpcpy ((char *) dest, (const char *) src); } #else # define FUNC u8_stpcpy # define UNIT uint8_t # include "u-stpcpy.h" #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-stpncpy.c�����������������������������������������������������0000664�0000000�0000000�00000003164�14110572173�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Ensure stpncpy() gets declared. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> /* Specification. */ #include "unistr.h" #if __GLIBC__ >= 2 && !defined __UCLIBC__ # include <string.h> uint8_t * u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n) { return (uint8_t *) stpncpy ((char *) dest, (const char *) src, n); } #else # define FUNC u8_stpncpy # define UNIT uint8_t # include "u-stpncpy.h" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strcat.c������������������������������������������������������0000664�0000000�0000000�00000002612�14110572173�0020370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strcat (uint8_t *dest, const uint8_t *src) { return (uint8_t *) strcat ((char *) dest, (const char *) src); } ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strchr.c������������������������������������������������������0000664�0000000�0000000�00000017127�14110572173�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strchr (const uint8_t *s, ucs4_t uc) { uint8_t c[6]; if (uc < 0x80) { uint8_t c0 = uc; if (false) { /* Unoptimized code. */ for (;;) { uint8_t s0 = *s; if (s0 == c0) return (uint8_t *) s; s++; if (s0 == 0) break; } } else { /* Optimized code. strchr() is often so well optimized, that it's worth the added function call. */ return (uint8_t *) strchr ((const char *) s, c0); } } else /* Loops equivalent to strstr, optimized for a specific length (2, 3, 4) of the needle. We use an algorithm similar to Boyer-Moore which is documented in lib/unistr/u8-chr.c. There is additional complication because we need to check after every byte for a NUL byte, but the idea is the same. */ switch (u8_uctomb_aux (c, uc, 6)) { case 2: if (*s == 0 || s[1] == 0) break; { uint8_t c0 = c[0]; uint8_t c1 = c[1]; /* Search for { c0, c1 }. */ uint8_t s1 = s[1]; for (;;) { /* Here s[0] != 0, s[1] != 0. Test whether s[0..1] == { c0, c1 }. */ if (s1 == c1) { if (*s == c0) return (uint8_t *) s; else /* Skip the search at s + 1, because s[1] = c1 < c0. */ goto case2_skip2; } else { if (s1 == c0) goto case2_skip1; else /* Skip the search at s + 1, because s[1] != c0. */ goto case2_skip2; } case2_skip2: s++; s1 = s[1]; if (s[1] == 0) break; case2_skip1: s++; s1 = s[1]; if (s[1] == 0) break; } } break; case 3: if (*s == 0 || s[1] == 0 || s[2] == 0) break; { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; /* Search for { c0, c1, c2 }. */ uint8_t s2 = s[2]; for (;;) { /* Here s[0] != 0, s[1] != 0, s[2] != 0. Test whether s[0..2] == { c0, c1, c2 }. */ if (s2 == c2) { if (s[1] == c1 && *s == c0) return (uint8_t *) s; else /* If c2 != c1: Skip the search at s + 1, because s[2] == c2 != c1. Skip the search at s + 2, because s[2] == c2 < c0. */ if (c2 == c1) goto case3_skip1; else goto case3_skip3; } else { if (s2 == c1) goto case3_skip1; else if (s2 == c0) /* Skip the search at s + 1, because s[2] != c1. */ goto case3_skip2; else /* Skip the search at s + 1, because s[2] != c1. Skip the search at s + 2, because s[2] != c0. */ goto case3_skip3; } case3_skip3: s++; s2 = s[2]; if (s[2] == 0) break; case3_skip2: s++; s2 = s[2]; if (s[2] == 0) break; case3_skip1: s++; s2 = s[2]; if (s[2] == 0) break; } } break; case 4: if (*s == 0 || s[1] == 0 || s[2] == 0 || s[3] == 0) break; { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; uint8_t c3 = c[3]; /* Search for { c0, c1, c2, c3 }. */ uint8_t s3 = s[3]; for (;;) { /* Here s[0] != 0, s[1] != 0, s[2] != 0, s[3] != 0. Test whether s[0..3] == { c0, c1, c2, c3 }. */ if (s3 == c3) { if (s[2] == c2 && s[1] == c1 && *s == c0) return (uint8_t *) s; else /* If c3 != c2: Skip the search at s + 1, because s[3] == c3 != c2. If c3 != c1: Skip the search at s + 2, because s[3] == c3 != c1. Skip the search at s + 3, because s[3] == c3 < c0. */ if (c3 == c2) goto case4_skip1; else if (c3 == c1) goto case4_skip2; else goto case4_skip4; } else { if (s3 == c2) goto case4_skip1; else if (s3 == c1) /* Skip the search at s + 1, because s[3] != c2. */ goto case4_skip2; else if (s3 == c0) /* Skip the search at s + 1, because s[3] != c2. Skip the search at s + 2, because s[3] != c1. */ goto case4_skip3; else /* Skip the search at s + 1, because s[3] != c2. Skip the search at s + 2, because s[3] != c1. Skip the search at s + 3, because s[3] != c0. */ goto case4_skip4; } case4_skip4: s++; s3 = s[3]; if (s[3] == 0) break; case4_skip3: s++; s3 = s[3]; if (s[3] == 0) break; case4_skip2: s++; s3 = s[3]; if (s[3] == 0) break; case4_skip1: s++; s3 = s[3]; if (s[3] == 0) break; } } break; } return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strcmp.c������������������������������������������������������0000664�0000000�0000000�00000002707�14110572173�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> int u8_strcmp (const uint8_t *s1, const uint8_t *s2) { /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ return strcmp ((const char *) s1, (const char *) s2); } ���������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strcoll.c�����������������������������������������������������0000664�0000000�0000000�00000002776�14110572173�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings using the collation rules of the current locale. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "uniconv.h" #define FUNC u8_strcoll #define UNIT uint8_t #define U_STRCMP u8_strcmp #define U_STRCONV_TO_ENCODING u8_strconv_to_encoding #include "u-strcoll.h" ��gnulib-20210822~d383792/lib/unistr/u8-strcpy.c������������������������������������������������������0000664�0000000�0000000�00000002602�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strcpy (uint8_t *dest, const uint8_t *src) { return (uint8_t *) strcpy ((char *) dest, (const char *) src); } ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strcspn.c�����������������������������������������������������0000664�0000000�0000000�00000002652�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_strcspn #define UNIT uint8_t #define U_STRLEN u8_strlen #define U_STRMBTOUC u8_strmbtouc #define U_STRCHR u8_strchr #include "u-strcspn.h" ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strdup.c������������������������������������������������������0000664�0000000�0000000�00000002540�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strdup (const uint8_t *s) { return (uint8_t *) strdup ((const char *) s); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strlen.c������������������������������������������������������0000664�0000000�0000000�00000001732�14110572173�0020401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> size_t u8_strlen (const uint8_t *s) { return strlen ((const char *) s); } ��������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strmblen.c����������������������������������������������������0000664�0000000�0000000�00000004133�14110572173�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u8_strmblen (const uint8_t *s) { /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ uint8_t c = *s; if (c < 0x80) return (c != 0 ? 1 : 0); if (c >= 0xc2) { if (c < 0xe0) { if ((s[1] ^ 0x80) < 0x40) return 2; } else if (c < 0xf0) { if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) return 3; } else if (c < 0xf8) { if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) return 4; } } /* invalid or incomplete multibyte character */ return -1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strmbtouc.c���������������������������������������������������0000664�0000000�0000000�00000005326�14110572173�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u8_strmbtouc (ucs4_t *puc, const uint8_t *s) { /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ uint8_t c = *s; if (c < 0x80) { *puc = c; return (c != 0 ? 1 : 0); } if (c >= 0xc2) { if (c < 0xe0) { if ((s[1] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } } else if (c < 0xf0) { if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } } else if (c < 0xf8) { if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) { *puc = ((unsigned int) (c & 0x07) << 18) | ((unsigned int) (s[1] ^ 0x80) << 12) | ((unsigned int) (s[2] ^ 0x80) << 6) | (unsigned int) (s[3] ^ 0x80); return 4; } } } /* invalid or incomplete multibyte character */ return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strncat.c�����������������������������������������������������0000664�0000000�0000000�00000002631�14110572173�0020547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strncat (uint8_t *dest, const uint8_t *src, size_t n) { return (uint8_t *) strncat ((char *) dest, (const char *) src, n); } �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strncmp.c�����������������������������������������������������0000664�0000000�0000000�00000002726�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> int u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) { /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ return strncmp ((const char *) s1, (const char *) s2, n); } ������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strncpy.c�����������������������������������������������������0000664�0000000�0000000�00000002621�14110572173�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> uint8_t * u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n) { return (uint8_t *) strncpy ((char *) dest, (const char *) src, n); } ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strnlen.c�����������������������������������������������������0000664�0000000�0000000�00000003143�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Ensure strnlen() gets declared. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include <config.h> /* Specification. */ #include "unistr.h" #if __GLIBC__ >= 2 || defined __UCLIBC__ # include <string.h> size_t u8_strnlen (const uint8_t *s, size_t maxlen) { return strnlen ((const char *) s, maxlen); } #else # define FUNC u8_strnlen # define UNIT uint8_t # include "u-strnlen.h" #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strpbrk.c�����������������������������������������������������0000664�0000000�0000000�00000002617�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_strpbrk #define UNIT uint8_t #define U_STRMBTOUC u8_strmbtouc #define U_STRCHR u8_strchr #include "u-strpbrk.h" �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strrchr.c�����������������������������������������������������0000664�0000000�0000000�00000006172�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" uint8_t * u8_strrchr (const uint8_t *s, ucs4_t uc) { /* Calling u8_strlen and then searching from the other end would cause more memory accesses. Avoid that, at the cost of a few more comparisons. */ uint8_t *result = NULL; uint8_t c[6]; if (uc < 0x80) { uint8_t c0 = uc; for (;; s++) { if (*s == c0) result = (uint8_t *) s; if (*s == 0) break; } } else switch (u8_uctomb_aux (c, uc, 6)) { case 2: if (*s) { uint8_t c0 = c[0]; uint8_t c1 = c[1]; /* FIXME: Maybe walking the string via u8_mblen is a win? */ for (;; s++) { if (s[1] == 0) break; if (*s == c0 && s[1] == c1) result = (uint8_t *) s; } } break; case 3: if (*s && s[1]) { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; /* FIXME: Maybe walking the string via u8_mblen is a win? */ for (;; s++) { if (s[2] == 0) break; if (*s == c0 && s[1] == c1 && s[2] == c2) result = (uint8_t *) s; } } break; case 4: if (*s && s[1] && s[2]) { uint8_t c0 = c[0]; uint8_t c1 = c[1]; uint8_t c2 = c[2]; uint8_t c3 = c[3]; /* FIXME: Maybe walking the string via u8_mblen is a win? */ for (;; s++) { if (s[3] == 0) break; if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3) result = (uint8_t *) s; } } break; } return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strspn.c������������������������������������������������������0000664�0000000�0000000�00000002675�14110572173�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_strspn #define UNIT uint8_t #define U_STRLEN u8_strlen #define U_STRMBTOUC u8_strmbtouc #define U_CMP u8_cmp #define U_STRCHR u8_strchr #include "u-strspn.h" �������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-strstr.c������������������������������������������������������0000664�0000000�0000000�00000002761�14110572173�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 1999, 2002, 2006, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include <string.h> /* FIXME: Maybe walking the string via u8_mblen is a win? */ #define FUNC u8_strstr #define UNIT uint8_t #define U_STRCHR u8_strchr #define U_STRMBTOUC u8_strmbtouc #define UNIT_IS_UINT8_T 1 #include "u-strstr.h" ���������������gnulib-20210822~d383792/lib/unistr/u8-strtok.c������������������������������������������������������0000664�0000000�0000000�00000002623�14110572173�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_strtok #define UNIT uint8_t #define U_STRSPN u8_strspn #define U_STRPBRK u8_strpbrk #define U_STRMBLEN u8_strmblen #include "u-strtok.h" �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-to-u16.c������������������������������������������������������0000664�0000000�0000000�00000010111�14110572173�0020114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-8 string to UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_to_u16 #define SRC_UNIT uint8_t #define DST_UNIT uint16_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ count = u8_mbtoucr (&uc, s, s_end - s); if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } s += count; /* Store it in the output string. */ count = u16_uctomb (result + length, uc, allocated - length); if (count == -1) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } if (count == -2) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 2 > allocated) allocated = length + 2; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; count = u16_uctomb (result + length, uc, allocated - length); if (count < 0) abort (); } length += count; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-to-u32.c������������������������������������������������������0000664�0000000�0000000�00000006552�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-8 string to UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_to_u32 #define SRC_UNIT uint8_t #define DST_UNIT uint32_t #include <errno.h> #include <stdlib.h> #include <string.h> DST_UNIT * FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) { const SRC_UNIT *s_end = s + n; /* Output string accumulator. */ DST_UNIT *result; size_t allocated; size_t length; if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ while (s < s_end) { ucs4_t uc; int count; /* Fetch a Unicode character from the input string. */ count = u8_mbtoucr (&uc, s, s_end - s); if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); errno = EILSEQ; return NULL; } s += count; /* Store it in the output string. */ if (length + 1 > allocated) { DST_UNIT *memory; allocated = (allocated > 0 ? 2 * allocated : 12); if (length + 1 > allocated) allocated = length + 1; if (result == resultbuf || result == NULL) memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); else memory = (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); if (memory == NULL) { if (!(result == resultbuf || result == NULL)) free (result); errno = ENOMEM; return NULL; } if (result == resultbuf && length > 0) memcpy ((char *) memory, (char *) result, length * sizeof (DST_UNIT)); result = memory; } result[length++] = uc; } if (length == 0) { if (result == NULL) { /* Return a non-NULL value. NULL means error. */ result = (DST_UNIT *) malloc (1); if (result == NULL) { errno = ENOMEM; return NULL; } } } else if (result != resultbuf && length < allocated) { /* Shrink the allocated memory if possible. */ DST_UNIT *memory; memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); if (memory != NULL) result = memory; } *lengthp = length; return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-uctomb-aux.c��������������������������������������������������0000664�0000000�0000000�00000003222�14110572173�0021152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UCS-4 to UTF-8. Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #include "attribute.h" int u8_uctomb_aux (uint8_t *s, ucs4_t uc, ptrdiff_t n) { int count; if (uc < 0x80) /* The case n >= 1 is already handled by the caller. */ return -2; else if (uc < 0x800) count = 2; else if (uc < 0x10000) { if (uc < 0xd800 || uc >= 0xe000) count = 3; else return -1; } else if (uc < 0x110000) count = 4; else return -1; if (n < count) return -2; switch (count) /* note: code falls through cases! */ { case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; FALLTHROUGH; case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; FALLTHROUGH; case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; /*case 1:*/ s[0] = uc; } return count; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unistr/u8-uctomb.c������������������������������������������������������0000664�0000000�0000000�00000004040�14110572173�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-8 string. Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> #if defined IN_LIBUNISTRING /* Tell unistr.h to declare u8_uctomb as 'extern', not 'static inline'. */ # include "unistring-notinline.h" #endif /* Specification. */ #include "unistr.h" #include "attribute.h" #if !HAVE_INLINE int u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n) { if (uc < 0x80) { if (n > 0) { s[0] = uc; return 1; } /* else return -2, below. */ } else { int count; if (uc < 0x800) count = 2; else if (uc < 0x10000) { if (uc < 0xd800 || uc >= 0xe000) count = 3; else return -1; } else if (uc < 0x110000) count = 4; else return -1; if (n >= count) { switch (count) /* note: code falls through cases! */ { case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; FALLTHROUGH; case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; FALLTHROUGH; case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; /*case 1:*/ s[0] = uc; } return count; } } return -2; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unitypes.in.h�����������������������������������������������������������0000664�0000000�0000000�00000004222�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary types and macros for the GNU UniString library. Copyright (C) 2002, 2005-2006, 2009-2021 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/>. */ #ifndef _UNITYPES_H #define _UNITYPES_H /* Get uint8_t, uint16_t, uint32_t. */ #include <stdint.h> /* Type representing a Unicode character. */ typedef uint32_t ucs4_t; /* Attribute of a function whose result depends only on the arguments (not pointers!) and which has no side effects. */ #ifndef _UC_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ # define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _UC_ATTRIBUTE_CONST # endif #endif /* Attribute of a function whose result depends only on the arguments (possibly pointers) and global memory, and which has no side effects. */ #ifndef _UC_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _UC_ATTRIBUTE_PURE # endif #endif /* Qualifier in a function declaration, that asserts that the caller must pass a pointer to a different object in the specified pointer argument than in the other pointer arguments. */ #ifndef _UC_RESTRICT # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _UC_RESTRICT __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _UC_RESTRICT restrict # else # define _UC_RESTRICT # endif #endif #endif /* _UNITYPES_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk.in.h������������������������������������������������������������0000664�0000000�0000000�00000006070�14110572173�0017307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in Unicode strings. Copyright (C) 2001-2003, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNIWBRK_H #define _UNIWBRK_H /* Get size_t. */ #include <stddef.h> #include "unitypes.h" #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Property defined in Unicode Standard Annex #29, section "Word Boundaries" <https://www.unicode.org/reports/tr29/#Word_Boundaries> */ /* Possible values of the Word_Break property. This enumeration may be extended in the future. */ enum { WBP_OTHER = 0, WBP_CR = 11, WBP_LF = 12, WBP_NEWLINE = 10, WBP_EXTEND = 8, WBP_FORMAT = 9, WBP_KATAKANA = 1, WBP_ALETTER = 2, WBP_MIDNUMLET = 3, WBP_MIDLETTER = 4, WBP_MIDNUM = 5, WBP_NUMERIC = 6, WBP_EXTENDNUMLET = 7, WBP_RI = 13, WBP_DQ = 14, WBP_SQ = 15, WBP_HL = 16, WBP_ZWJ = 17, WBP_EB = 18, WBP_EM = 19, WBP_GAZ = 20, WBP_EBG = 21 }; /* Return the Word_Break property of a Unicode character. */ extern int uc_wordbreak_property (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Word breaks. */ /* Determine the word break points in S, and store the result at p[0..n-1]. p[i] = 1 means that there is a word boundary between s[i-1] and s[i]. p[i] = 0 means that s[i-1] and s[i] must not be separated. */ extern void u8_wordbreaks (const uint8_t *s, size_t n, char *p); extern void u16_wordbreaks (const uint16_t *s, size_t n, char *p); extern void u32_wordbreaks (const uint32_t *s, size_t n, char *p); extern void ulc_wordbreaks (const char *s, size_t n, char *_UC_RESTRICT p); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNIWBRK_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016526�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/u-wordbreaks.h��������������������������������������������������0000664�0000000�0000000�00000016212�14110572173�0021306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-8/UTF-16/UTF-32 strings. -*- coding: utf-8 -*- Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ void FUNC (const UNIT *s, size_t n, char *p) { if (n > 0) { const UNIT *s_end = s + n; /* Word break property of the last character. -1 at the very beginning of the string. */ int last_char_prop = -1; /* Format and Extend characters are ignored; this means, the mostly used unit is the complex character (= character with subsequent ignored characters). Word break property of the last complex character. -1 at the very beginning of the string. */ int last_compchar_prop = -1; char *last_compchar_ptr = NULL; /* For recognizing rules involving 3 complex characters: Word break property of the second-to-last complex character. -1 at the very beginning of the string. */ int secondlast_compchar_prop = -1; size_t ri_count = 0; /* Don't break inside multibyte characters. */ memset (p, 0, n); while (s < s_end) { ucs4_t uc; int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); int prop = uc_wordbreak_property (uc); /* No break at the start of the string. */ if (last_char_prop >= 0) { /* No break between CR and LF (WB3). */ if (last_char_prop == WBP_CR && prop == WBP_LF) /* *p = 0 */; /* Break before and after newlines (WB3a, WB3b). */ else if ((last_char_prop == WBP_CR || last_char_prop == WBP_LF || last_char_prop == WBP_NEWLINE) || (prop == WBP_CR || prop == WBP_LF || prop == WBP_NEWLINE)) *p = 1; /* No break within emoji zwj sequence (WB3c). */ else if (last_char_prop == WBP_ZWJ && (prop == WBP_GAZ || prop == WBP_EBG)) /* *p = 0 */; /* Ignore Format and Extend characters. */ else if (!(prop == WBP_EXTEND || prop == WBP_FORMAT || prop == WBP_ZWJ)) { /* No break in these situations (see UAX #29): secondlast last current (ALetter | HL) (MidLetter | MidNumLet | SQ) × (ALetter | HL) (WB7) (ALetter | HL) × (MidLetter | MidNumLet | SQ) (ALetter | HL) (WB6) Numeric (MidNum | MidNumLet | SQ) × Numeric (WB11) Numeric × (MidNum | MidNumLet | SQ) Numeric (WB12) HL × DQ HL (WB7b) HL DQ × HL (WB7c) ^ (RI RI)* RI × RI (WB15) [^RI] (RI RI)* RI × RI (WB16) */ /* No break across certain punctuation. Also, disable word breaks that were recognized earlier (due to lookahead of only one complex character). */ if (((prop == WBP_ALETTER || prop == WBP_HL) && (last_compchar_prop == WBP_MIDLETTER || last_compchar_prop == WBP_MIDNUMLET || last_compchar_prop == WBP_SQ) && (secondlast_compchar_prop == WBP_ALETTER || secondlast_compchar_prop == WBP_HL)) || (prop == WBP_NUMERIC && (last_compchar_prop == WBP_MIDNUM || last_compchar_prop == WBP_MIDNUMLET || last_compchar_prop == WBP_SQ) && secondlast_compchar_prop == WBP_NUMERIC) || (prop == WBP_HL && last_compchar_prop == WBP_DQ && secondlast_compchar_prop == WBP_HL)) { *last_compchar_ptr = 0; /* *p = 0; */ } /* Break before RI, if odd number of RI's are preceding (WB15, WB16). */ else if (last_compchar_prop == WBP_RI && prop == WBP_RI) { if (ri_count % 2 == 0) *p = 1; /* else *p = 0 */ } /* Break after Format and Extend character. */ else if (last_compchar_prop == WBP_EXTEND || last_compchar_prop == WBP_FORMAT) *p = 1; else { int last_compchar_index = uniwbrk_prop_index[last_compchar_prop]; int index = uniwbrk_prop_index[prop]; /* Break between unknown pair (WB999). */ if (last_compchar_index < 0 || index < 0) *p = 1; /* Perform a single table lookup. */ else if (uniwbrk_table[last_compchar_index][index]) *p = 1; /* else *p = 0; */ } } } last_char_prop = prop; /* Ignore Format and Extend characters, except at the start of the line. */ if (last_compchar_prop < 0 || last_compchar_prop == WBP_CR || last_compchar_prop == WBP_LF || last_compchar_prop == WBP_NEWLINE || !(prop == WBP_EXTEND || prop == WBP_FORMAT || prop == WBP_ZWJ)) { secondlast_compchar_prop = last_compchar_prop; last_compchar_prop = prop; last_compchar_ptr = p; if (prop == WBP_RI) ri_count++; else ri_count = 0; } s += count; p += count; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/u16-wordbreaks.c������������������������������������������������0000664�0000000�0000000�00000002660�14110572173�0021452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwbrk.h" #include <string.h> #include "unistr.h" #include "uniwbrk/wbrktable.h" #define FUNC u16_wordbreaks #define UNIT uint16_t #define U_MBTOUC_UNSAFE u16_mbtouc_unsafe #include "u-wordbreaks.h" ��������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/u32-wordbreaks.c������������������������������������������������0000664�0000000�0000000�00000002660�14110572173�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwbrk.h" #include <string.h> #include "unistr.h" #include "uniwbrk/wbrktable.h" #define FUNC u32_wordbreaks #define UNIT uint32_t #define U_MBTOUC_UNSAFE u32_mbtouc_unsafe #include "u-wordbreaks.h" ��������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/u8-wordbreaks.c�������������������������������������������������0000664�0000000�0000000�00000006343�14110572173�0021375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwbrk.h" #include <string.h> #include "unistr.h" #include "uniwbrk/wbrktable.h" #define FUNC u8_wordbreaks #define UNIT uint8_t #define U_MBTOUC_UNSAFE u8_mbtouc_unsafe #include "u-wordbreaks.h" #ifdef TEST #include <stdio.h> #include <stdlib.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { if (argc == 1) { /* Display all the word breaks in the input string. */ char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; u8_wordbreaks ((uint8_t *) input, length, breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case 1: /* U+2027 in UTF-8 encoding */ putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout); break; case 0: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/ulc-wordbreaks.c������������������������������������������������0000664�0000000�0000000�00000013271�14110572173�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in strings. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwbrk.h" #include <stdlib.h> #include <string.h> #include "c-ctype.h" #include "localcharset.h" #include "uniconv.h" #include "unilbrk/ulc-common.h" /* Word breaks of a string in an arbitrary encoding. We convert the input string to Unicode. The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to \U0000FFFF. UTF-16 and variants support only characters up to \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. UCS-4 specification leaves doubts about endianness and byte order mark. glibc currently interprets it as big endian without byte order mark, but this is not backed by an RFC. So we use UTF-8. It supports characters up to \U7FFFFFFF and is unambiguously defined. */ void ulc_wordbreaks (const char *s, size_t n, char *p) { if (n > 0) { const char *encoding = locale_charset (); if (is_utf8_encoding (encoding)) u8_wordbreaks ((const uint8_t *) s, n, p); else { /* Convert the string to UTF-8 and build a translation table from offsets into s to offsets into the translated string. */ size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); if (offsets != NULL) { uint8_t *t; size_t m; t = u8_conv_from_encoding (encoding, iconveh_question_mark, s, n, offsets, NULL, &m); if (t != NULL) { char *q = (char *) (m > 0 ? malloc (m) : NULL); if (m == 0 || q != NULL) { size_t i; /* Determine the word breaks of the UTF-8 string. */ u8_wordbreaks (t, m, q); /* Translate the result back to the original string. */ memset (p, 0, n); for (i = 0; i < n; i++) if (offsets[i] != (size_t)(-1)) p[i] = q[offsets[i]]; free (q); free (t); free (offsets); return; } free (t); } free (offsets); } /* Impossible to convert. */ #if C_CTYPE_ASCII if (is_all_ascii (s, n)) { /* ASCII is a subset of UTF-8. */ u8_wordbreaks ((const uint8_t *) s, n, p); return; } #endif /* We have a non-ASCII string and cannot convert it. Don't produce any word breaks. */ memset (p, 0, n); } } } #ifdef TEST #include <locale.h> #include <stdio.h> #include <stdlib.h> /* Read the contents of an input stream, and return it, terminated with a NUL byte. */ char * read_file (FILE *stream) { #define BUFSIZE 4096 char *buf = NULL; int alloc = 0; int size = 0; int count; while (! feof (stream)) { if (size + BUFSIZE > alloc) { alloc = alloc + alloc / 2; if (alloc < size + BUFSIZE) alloc = size + BUFSIZE; buf = realloc (buf, alloc); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } } count = fread (buf + size, 1, BUFSIZE, stream); if (count == 0) { if (ferror (stream)) { perror ("fread"); exit (1); } } else size += count; } buf = realloc (buf, size + 1); if (buf == NULL) { fprintf (stderr, "out of memory\n"); exit (1); } buf[size] = '\0'; return buf; #undef BUFSIZE } int main (int argc, char * argv[]) { setlocale (LC_CTYPE, ""); if (argc == 1) { /* Display all the word breaks in the input string. */ char *input = read_file (stdin); int length = strlen (input); char *breaks = malloc (length); int i; ulc_wordbreaks (input, length, breaks); for (i = 0; i < length; i++) { switch (breaks[i]) { case 1: putc ('|', stdout); break; case 0: break; default: abort (); } putc (input[i], stdout); } free (breaks); return 0; } else return 1; } #endif /* TEST */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/wbrkprop.h������������������������������������������������������0000664�0000000�0000000�00001122305�14110572173�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Word breaking properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2002, 2004, 2007-2009 Free Software Foundation, Inc. This program is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define wbrkprop_header_0 16 #define wbrkprop_header_1 15 #define wbrkprop_header_2 7 #define wbrkprop_header_3 511 #define wbrkprop_header_4 127 typedef struct { int level1[15]; int level2[3 << 9]; unsigned char level3[174 << 7]; } wbrkprop_t; static const wbrkprop_t uniwbrkprop = { { 0, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1024 }, { 0, 128, 256, 256, 256, 384, 512, 640, 256, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 256, 256, 3968, 4096, 4224, 4352, 4480, 256, 256, 256, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 256, 6400, 256, 256, 6528, 6656, 6784, 6912, 7040, 7168, -1, -1, -1, -1, -1, 7296, -1, -1, 7424, 7552, 7680, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7808, 7936, 8064, 8192, 8320, -1, -1, -1, 8448, 8576, 8704, 8832, -1, 8960, 9088, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 256, 9216, 256, 256, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 10240, 10368, 10496, 10624, 10752, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 10880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11008, 11136, 256, 256, 11264, 11392, 11520, 11648, 11776, 11904, 12032, 12160, 12288, 12416, -1, 12544, 12672, 12800, 256, 12928, 13056, -1, 256, 256, 13184, -1, 13312, 13440, 13568, 13696, 13824, 13952, 14080, 14208, 14336, 14464, -1, -1, -1, -1, -1, -1, 14592, 14720, 14848, 14976, 15104, 15232, 15360, -1, 15488, 15616, -1, 15744, 15872, 16000, 16128, -1, -1, 16256, -1, -1, -1, 16384, -1, -1, 16512, 16640, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 16768, 16896, 256, 17024, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 256, 256, 256, 256, 17152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 17280, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 256, 256, 256, 17408, 17536, 17664, 17792, -1, -1, -1, -1, -1, -1, 17920, 18048, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18304, 18432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18560, 18688, 18816, -1, -1, -1, 18944, 19072, 19200, 256, 256, 19328, 19456, 19584, -1, -1, -1, -1, 19712, 19840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 20096, 20224, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20352, 20480, -1, -1, -1, -1, 20608, 20736, -1, -1, -1, 20864, 20992, 21120, 21248, 21376, 21504, 21632, -1, -1, -1, -1, 21760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21888, -1, 22016, 22144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_LF, WBP_NEWLINE, WBP_NEWLINE, WBP_CR, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_DQ, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_SQ, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_MIDLETTER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NEWLINE, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_MIDNUM, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_MIDLETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_HL, WBP_HL, WBP_HL, WBP_ALETTER, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUM, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_NUMERIC, WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ZWJ, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, WBP_NEWLINE, WBP_NEWLINE, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_GAZ, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_HL, WBP_EXTEND, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, WBP_OTHER, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_HL, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, WBP_MIDNUM, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_RI, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EM, WBP_EM, WBP_EM, WBP_EM, WBP_EM, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EBG, WBP_EBG, WBP_EBG, WBP_EBG, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_GAZ, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_GAZ, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_EB, WBP_EB, WBP_EB, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/wbrktable.c�����������������������������������������������������0000664�0000000�0000000�00000010610�14110572173�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break auxiliary table. -*- coding: utf-8 -*- Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "wbrktable.h" const int uniwbrk_prop_index[22] = { 0, /* WBP_OTHER */ 1, /* WBP_KATAKANA */ 2, /* WBP_ALETTER */ 3, /* WBP_MIDNUMLET */ 4, /* WBP_MIDLETTER */ 5, /* WBP_MIDNUM */ 6, /* WBP_NUMERIC */ 7, /* WBP_EXTENDNUMLET */ -1, /* WBP_EXTEND */ -1, /* WBP_FORMAT */ -1, /* WBP_NEWLINE */ -1, /* WBP_CR */ -1, /* WBP_LF */ -1, /* WBP_RI */ 8, /* WBP_DQ */ 9, /* WBP_SQ */ 10, /* WBP_HL */ -1, /* WBP_ZWJ */ 11, /* WBP_EB */ 12, /* WBP_EM */ -1, /* WBP_GAZ */ 13 /* WBP_EBG */ }; /* This table contains the following rules (see UAX #29): last current (ALetter | HL) × (ALetter | HL) (WB5) (ALetter | HL) × Numeric (WB9) HL × SQ (WB7a) Numeric × (ALetter | HL) (WB10) Numeric × Numeric (WB8) Katakana × Katakana (WB13) (ALetter | HL | Numeric | Katakana) × ExtendNumLet (WB13a) ExtendNumLet × ExtendNumLet (WB13a) ExtendNumLet × (ALetter | HL | Numeric | Katakana) (WB13b) (E_Base | EBG) × E_Modifier (WB14) Note that the following rules are not handled here but in the loop in u-wordbreaks.h: - The rules need to look back or look ahead the second character (WB6, WB7, WB7b, WB7c, WB11, WB12) - The rules with a higher precedence over the "ignore" rule (WB4), such as WB3c */ const unsigned char uniwbrk_table[14][14] = { /* current: OTHER MIDNUMLET NUMERIC SQ EM */ /* KATAKANA MIDLETTER EXNUMLET HL EBG */ /* ALETTER MIDNUM DQ EB */ /* last */ /* WBP_OTHER */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_KATAKANA */ { 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 }, /* WBP_ALETTER */ { 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, /* WBP_MIDNUMLET */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_MIDLETTER */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_MIDNUM */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_NUMERIC */ { 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, /* WBP_EXTENDNUMLET */ { 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, /* WBP_DQ */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_SQ */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_HL */ { 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1 }, /* WBP_EB */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 }, /* WBP_EM */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_EBG */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 } }; ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/wbrktable.h�����������������������������������������������������0000664�0000000�0000000�00000002410�14110572173�0020651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break auxiliary table. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ extern const int uniwbrk_prop_index[22]; extern const unsigned char uniwbrk_table[14][14]; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwbrk/wordbreak-property.c��������������������������������������������0000664�0000000�0000000�00000003476�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break property. Copyright (C) 2001-2003, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwbrk.h" #include "wbrkprop.h" int uc_wordbreak_property (ucs4_t uc) { unsigned int index1 = uc >> wbrkprop_header_0; if (index1 < wbrkprop_header_1) { int lookup1 = uniwbrkprop.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> wbrkprop_header_2) & wbrkprop_header_3; int lookup2 = uniwbrkprop.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = uc & wbrkprop_header_4; return uniwbrkprop.level3[lookup2 + index3]; } } } return WBP_OTHER; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth.in.h�����������������������������������������������������������0000664�0000000�0000000�00000004133�14110572173�0017457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Display width functions. Copyright (C) 2001-2002, 2005, 2007, 2009-2021 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/>. */ #ifndef _UNIWIDTH_H #define _UNIWIDTH_H #include "unitypes.h" /* Get size_t. */ #include <stddef.h> /* Get locale_charset() declaration. */ #include "localcharset.h" #ifdef __cplusplus extern "C" { #endif /* Display width. */ /* These functions are locale dependent. The encoding argument identifies the encoding (e.g. "ISO-8859-2" for Polish). */ /* Determine number of column positions required for UC. */ extern int uc_width (ucs4_t uc, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for first N units (or fewer if S ends before this) in S. */ extern int u8_width (const uint8_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_width (const uint16_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_width (const uint32_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for S. */ extern int u8_strwidth (const uint8_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_strwidth (const uint16_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_strwidth (const uint32_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _UNIWIDTH_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016700�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/cjk.h����������������������������������������������������������0000664�0000000�0000000�00000003167�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for CJK encoding. Copyright (C) 2001-2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include "streq.h" static int is_cjk_encoding (const char *encoding) { if (0 /* Legacy Japanese encodings */ || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) /* Legacy Chinese encodings */ || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) /* Legacy Korean encodings */ || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) return 1; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u16-strwidth.c�������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0021331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-16 string. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "unistr.h" int u16_strwidth (const uint16_t *s, const char *encoding) { return u16_width (s, u16_strlen (s), encoding); } ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u16-width.c����������������������������������������������������0000664�0000000�0000000�00000003332�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-16 string. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "unistr.h" int u16_width (const uint16_t *s, size_t n, const char *encoding) { const uint16_t *s_end = s + n; int width = 0; while (s < s_end) { ucs4_t uc; int w; s += u16_mbtouc_unsafe (&uc, s, s_end - s); if (uc == 0) break; /* end of string reached */ w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ width += w; } return width; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u32-strwidth.c�������������������������������������������������0000664�0000000�0000000�00000002624�14110572173�0021327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-32 string. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "unistr.h" int u32_strwidth (const uint32_t *s, const char *encoding) { return u32_width (s, u32_strlen (s), encoding); } ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u32-width.c����������������������������������������������������0000664�0000000�0000000�00000003224�14110572173�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-32 string. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" int u32_width (const uint32_t *s, size_t n, const char *encoding) { const uint32_t *s_end = s + n; int width = 0; while (s < s_end) { ucs4_t uc = *s++; int w; if (uc == 0) break; /* end of string reached */ w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ width += w; } return width; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u8-strwidth.c��������������������������������������������������0000664�0000000�0000000�00000002617�14110572173�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-8 string. Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "unistr.h" int u8_strwidth (const uint8_t *s, const char *encoding) { return u8_width (s, u8_strlen (s), encoding); } �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/u8-width.c�����������������������������������������������������0000664�0000000�0000000�00000003325�14110572173�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-8 string. Copyright (C) 2001-2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This file is free software. It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+". You can redistribute it and/or modify it under either - the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version, or - the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+". 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 and the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License and of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "unistr.h" int u8_width (const uint8_t *s, size_t n, const char *encoding) { const uint8_t *s_end = s + n; int width = 0; while (s < s_end) { ucs4_t uc; int w; s += u8_mbtouc_unsafe (&uc, s, s_end - s); if (uc == 0) break; /* end of string reached */ w = uc_width (uc, encoding); if (w >= 0) /* ignore control characters in the string */ width += w; } return width; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/uniwidth/width.c��������������������������������������������������������0000664�0000000�0000000�00000065562�14110572173�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of Unicode character. Copyright (C) 2001-2002, 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "cjk.h" /* * Non-spacing attribute table. * Consists of: * - Non-spacing characters; generated from PropList.txt or * "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" * - Format control characters; generated from * "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" * - Zero width characters; generated from * "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" */ static const unsigned char nonspacing_table_data[38*64] = { /* 0x0000-0x01ff */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ /* 0x0200-0x03ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ /* 0x0400-0x05ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ /* 0x0600-0x07ff */ 0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */ /* 0x0800-0x09ff */ 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */ /* 0x0a00-0x0bff */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ 0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ /* 0x0c00-0x0dff */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ /* 0x0e00-0x0fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ /* 0x1000-0x11ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */ /* 0x1200-0x13ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ /* 0x1600-0x17ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ /* 0x1800-0x19ff */ 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ /* 0x1a00-0x1bff */ 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, /* 0x1a80-0x1abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ 0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */ 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ /* 0x1c00-0x1dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, /* 0x1dc0-0x1dff */ /* 0x2000-0x21ff */ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ /* 0x2c00-0x2dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ /* 0x3000-0x31ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ /* 0xa600-0xa7ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ /* 0xa800-0xa9ff */ 0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ 0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ /* 0xaa00-0xabff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ /* 0xfa00-0xfbff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ /* 0xfe00-0xffff */ 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ /* 0x10000-0x101ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ /* 0x10200-0x103ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */ /* 0x10a00-0x10bff */ 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ /* 0x11000-0x111ff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x11040-0x1107f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ /* 0x11200-0x113ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */ 0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x11300-0x1133f */ 0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */ /* 0x11400-0x115ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */ 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */ /* 0x11600-0x117ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */ 0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */ /* 0x11c00-0x11dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */ 0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d00-0x11d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */ /* 0x16a00-0x16bff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */ /* 0x16e00-0x16fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */ 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */ /* 0x1bc00-0x1bdff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */ 0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */ /* 0x1d000-0x1d1ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ /* 0x1d200-0x1d3ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */ /* 0x1da00-0x1dbff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */ 0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */ /* 0x1e000-0x1e1ff */ 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e100-0x1e13f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */ /* 0x1e800-0x1e9ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */ 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */ 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1e9c0-0x1e9ff */ }; static const signed char nonspacing_table_ind[248] = { 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */ 22, 23, -1, -1, -1, 24, -1, -1, /* 0x10000-0x10fff */ 25, 26, 27, 28, -1, -1, 29, -1, /* 0x11000-0x11fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ -1, -1, -1, -1, -1, 30, -1, 31, /* 0x16000-0x16fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ -1, -1, -1, -1, -1, -1, 32, -1, /* 0x1b000-0x1bfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ 33, 34, -1, -1, -1, 35, -1, -1, /* 0x1d000-0x1dfff */ 36, -1, -1, -1, 37, -1, -1, -1 /* 0x1e000-0x1efff */ }; /* Determine number of column positions required for UC. */ int uc_width (ucs4_t uc, const char *encoding) { /* Test for non-spacing or control character. */ if ((uc >> 9) < 248) { int ind = nonspacing_table_ind[uc >> 9]; if (ind >= 0) if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) { if (uc > 0 && uc < 0xa0) return -1; else return 0; } } else if ((uc >> 9) == (0xe0000 >> 9)) { if (uc >= 0xe0100) { if (uc <= 0xe01ef) return 0; } else { if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) return 0; } } /* Test for double-width character. * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt" * and "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt" */ if (uc >= 0x1100 && ((uc < 0x1160) /* Hangul Jamo */ || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */ || (uc >= 0x2e80 && uc < 0xa4d0 /* CJK ... Yi */ && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00)) || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */ || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */ || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */ || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */ || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */ || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */ || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */ || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */ ) ) return 2; /* In ancient CJK encodings, Cyrillic and most other characters are double-width as well. */ if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 && is_cjk_encoding (encoding)) return 2; return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unlink.c����������������������������������������������������������������0000664�0000000�0000000�00000006644�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around unlink bugs. Copyright (C) 2009-2021 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/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "filename.h" #undef unlink #if defined _WIN32 && !defined __CYGWIN__ # define unlink _unlink #endif /* Remove file NAME. Return 0 if successful, -1 if not. */ int rpl_unlink (char const *name) { /* Work around Solaris 9 bug where unlink("file/") succeeds. */ size_t len = strlen (name); int result = 0; if (len && ISSLASH (name[len - 1])) { /* We can't unlink(2) something if it doesn't exist. If it does exist, then it resolved to a directory, due to the trailing slash, and POSIX requires that the unlink attempt to remove that directory (which would leave the symlink dangling). Unfortunately, Solaris 9 is one of the platforms where the root user can unlink directories, and we don't want to cripple this behavior on real directories, even if it is seldom needed (at any rate, it's nicer to let coreutils' unlink(1) give the correct errno for non-root users). But we don't know whether name was an actual directory, or a symlink to a directory; and due to the bug of ignoring trailing slash, Solaris 9 would end up successfully unlinking the symlink instead of the directory. Technically, we could use realpath to find the canonical directory name to attempt deletion on. But that is a lot of work for a corner case; so we instead just use an lstat on the shortened name, and reject symlinks with trailing slashes. The root user of unlink(1) will just have to live with the rule that they can't delete a directory via a symlink. */ struct stat st; result = lstat (name, &st); if (result == 0 || errno == EOVERFLOW) { /* Trailing NUL will overwrite the trailing slash. */ char *short_name = malloc (len); if (!short_name) return -1; memcpy (short_name, name, len); while (len && ISSLASH (short_name[len - 1])) short_name[--len] = '\0'; if (len && (lstat (short_name, &st) || S_ISLNK (st.st_mode))) { free (short_name); errno = EPERM; return -1; } free (short_name); result = 0; } } if (!result) { #if UNLINK_PARENT_BUG if (len >= 2 && name[len - 1] == '.' && name[len - 2] == '.' && (len == 2 || ISSLASH (name[len - 3]))) { errno = EISDIR; /* could also use EPERM */ return -1; } #endif result = unlink (name); } return result; } ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unlinkat.c��������������������������������������������������������������0000664�0000000�0000000�00000007125�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around unlinkat bugs on Solaris 9 and Hurd. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> #include <stdlib.h> #include "filename.h" #include "openat.h" #if HAVE_UNLINKAT # undef unlinkat /* unlinkat without AT_REMOVEDIR does not honor trailing / on Solaris 9. Hurd has the same issue. unlinkat without AT_REMOVEDIR erroneously ignores ".." on Darwin 14. Solve these in a similar manner to unlink. */ int rpl_unlinkat (int fd, char const *name, int flag) { size_t len; int result = 0; /* rmdir behavior has no problems with trailing slash. */ if (flag & AT_REMOVEDIR) return unlinkat (fd, name, flag); len = strlen (name); if (len && ISSLASH (name[len - 1])) { /* See the lengthy comment in unlink.c why we disobey the POSIX rule of letting unlink("link-to-dir/") attempt to unlink a directory. */ struct stat st; result = lstatat (fd, name, &st); if (result == 0 || errno == EOVERFLOW) { /* Trailing NUL will overwrite the trailing slash. */ char *short_name = malloc (len); if (!short_name) { errno = EPERM; return -1; } memcpy (short_name, name, len); while (len && ISSLASH (short_name[len - 1])) short_name[--len] = '\0'; if (len && (lstatat (fd, short_name, &st) || S_ISLNK (st.st_mode))) { free (short_name); errno = EPERM; return -1; } free (short_name); result = 0; } } if (!result) { # if UNLINK_PARENT_BUG if (len >= 2 && name[len - 1] == '.' && name[len - 2] == '.' && (len == 2 || ISSLASH (name[len - 3]))) { errno = EISDIR; /* could also use EPERM */ return -1; } # endif result = unlinkat (fd, name, flag); } return result; } #else /* !HAVE_UNLINKAT */ /* Replacement for Solaris' function by the same name. <https://www.google.com/search?q=unlinkat+site:docs.oracle.com> First, try to simulate it via (unlink|rmdir) ("/proc/self/fd/FD/FILE"). Failing that, simulate it via save_cwd/fchdir/(unlink|rmdir)/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, this function works just like Solaris' unlinkat. */ # define AT_FUNC_NAME unlinkat # define AT_FUNC_F1 rmdir # define AT_FUNC_F2 unlink # define AT_FUNC_USE_F1_COND AT_REMOVEDIR # define AT_FUNC_POST_FILE_PARAM_DECLS , int flag # define AT_FUNC_POST_FILE_ARGS /* empty */ # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #endif /* !HAVE_UNLINKAT */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unlinkdir.c�������������������������������������������������������������0000664�0000000�0000000�00000003135�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* unlinkdir.c - determine whether we can unlink directories Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert, Jim Meyering, and David Bartley. */ #include <config.h> #include "unlinkdir.h" #include "priv-set.h" #include "root-uid.h" #include <unistd.h> #if ! UNLINK_CANNOT_UNLINK_DIR /* Return true if we cannot unlink directories, false if we might be able to unlink directories. */ bool cannot_unlink_dir (void) { static bool initialized; static bool cannot; if (! initialized) { # if defined PRIV_SYS_LINKDIR /* We might be able to unlink directories if we cannot determine our privileges, or if we have the PRIV_SYS_LINKDIR privilege. */ cannot = (priv_set_ismember (PRIV_SYS_LINKDIR) == 0); # else /* In traditional Unix, only root can unlink directories. */ cannot = (geteuid () != ROOT_UID); # endif initialized = true; } return cannot; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unlinkdir.h�������������������������������������������������������������0000664�0000000�0000000�00000001714�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* unlinkdir.h - determine (and maybe change) whether we can unlink directories Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert and Jim Meyering. */ #include <stdbool.h> #if UNLINK_CANNOT_UNLINK_DIR # define cannot_unlink_dir() true #else bool cannot_unlink_dir (void); #endif ����������������������������������������������������gnulib-20210822~d383792/lib/unlocked-io.h�����������������������������������������������������������0000664�0000000�0000000�00000007457�14110572173�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Prefer faster, non-thread-safe stdio functions if available. Copyright (C) 2001-2004, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef UNLOCKED_IO_H # define UNLOCKED_IO_H 1 /* These are wrappers for functions/macros from the GNU C library, and from other C libraries supporting POSIX's optional thread-safe functions. The standard I/O functions are thread-safe. These *_unlocked ones are more efficient but not thread-safe. That they're not thread-safe is fine since all of the applications in this package are single threaded. Also, some code that is shared with the GNU C library may invoke the *_unlocked functions directly. On hosts that lack those functions, invoke the non-thread-safe versions instead. */ # include <stdio.h> # if HAVE_DECL_CLEARERR_UNLOCKED || defined clearerr_unlocked # undef clearerr # define clearerr(x) clearerr_unlocked (x) # else # define clearerr_unlocked(x) clearerr (x) # endif # if HAVE_DECL_FEOF_UNLOCKED || defined feof_unlocked # undef feof # define feof(x) feof_unlocked (x) # else # define feof_unlocked(x) feof (x) # endif # if HAVE_DECL_FERROR_UNLOCKED || defined ferror_unlocked # undef ferror # define ferror(x) ferror_unlocked (x) # else # define ferror_unlocked(x) ferror (x) # endif # if HAVE_DECL_FFLUSH_UNLOCKED || defined fflush_unlocked # undef fflush # define fflush(x) fflush_unlocked (x) # else # define fflush_unlocked(x) fflush (x) # endif # if HAVE_DECL_FGETS_UNLOCKED || defined fgets_unlocked # undef fgets # define fgets(x,y,z) fgets_unlocked (x,y,z) # else # define fgets_unlocked(x,y,z) fgets (x,y,z) # endif # if HAVE_DECL_FPUTC_UNLOCKED || defined fputc_unlocked # undef fputc # define fputc(x,y) fputc_unlocked (x,y) # else # define fputc_unlocked(x,y) fputc (x,y) # endif # if HAVE_DECL_FPUTS_UNLOCKED || defined fputs_unlocked # undef fputs # define fputs(x,y) fputs_unlocked (x,y) # else # define fputs_unlocked(x,y) fputs (x,y) # endif # if HAVE_DECL_FREAD_UNLOCKED || defined fread_unlocked # undef fread # define fread(w,x,y,z) fread_unlocked (w,x,y,z) # else # define fread_unlocked(w,x,y,z) fread (w,x,y,z) # endif # if HAVE_DECL_FWRITE_UNLOCKED || defined fwrite_unlocked # undef fwrite # define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) # else # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) # endif # if HAVE_DECL_GETC_UNLOCKED || defined get_unlocked # undef getc # define getc(x) getc_unlocked (x) # else # define getc_unlocked(x) getc (x) # endif # if HAVE_DECL_GETCHAR_UNLOCKED || defined getchar_unlocked # undef getchar # define getchar() getchar_unlocked () # else # define getchar_unlocked() getchar () # endif # if HAVE_DECL_PUTC_UNLOCKED || defined putc_unlocked # undef putc # define putc(x,y) putc_unlocked (x,y) # else # define putc_unlocked(x,y) putc (x,y) # endif # if HAVE_DECL_PUTCHAR_UNLOCKED || defined putchar_unlocked # undef putchar # define putchar(x) putchar_unlocked (x) # else # define putchar_unlocked(x) putchar (x) # endif # undef flockfile # define flockfile(x) ((void) 0) # undef ftrylockfile # define ftrylockfile(x) 0 # undef funlockfile # define funlockfile(x) ((void) 0) #endif /* UNLOCKED_IO_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unlockpt.c��������������������������������������������������������������0000664�0000000�0000000�00000002644�14110572173�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unlock the slave side of a pseudo-terminal from its master side. Copyright (C) 1998, 2010-2021 Free Software Foundation, Inc. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. 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/>. */ #include <config.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> int unlockpt (int fd) { /* Platforms which have the TIOCSPTLCK ioctl (Linux) already have the unlockpt function. */ #if HAVE_REVOKE /* Mac OS X 10.3, OpenBSD 3.8 do not have the unlockpt function, but they have revoke(). */ char *name = ptsname (fd); if (name == NULL) return -1; return revoke (name); #else /* Assume that the slave side of a pseudo-terminal is already unlocked by default. */ if (fcntl (fd, F_GETFD) < 0) return -1; return 0; #endif } ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unsetenv.c��������������������������������������������������������������0000664�0000000�0000000�00000005514�14110572173�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2002, 2005-2021 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/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #if !_LIBC # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define unsetenv __unsetenv #endif #if _LIBC || !HAVE_UNSETENV int unsetenv (const char *name) { size_t len; char **ep; if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); LOCK; ep = __environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; } #ifdef _LIBC # undef unsetenv weak_alias (__unsetenv, unsetenv) #endif #else /* HAVE_UNSETENV */ # undef unsetenv # if !HAVE_DECL_UNSETENV # if VOID_UNSETENV extern void unsetenv (const char *); # else extern int unsetenv (const char *); # endif # endif /* Call the underlying unsetenv, in case there is hidden bookkeeping that needs updating beyond just modifying environ. */ int rpl_unsetenv (const char *name) { int result = 0; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } while (getenv (name)) # if !VOID_UNSETENV result = # endif unsetenv (name); return result; } #endif /* HAVE_UNSETENV */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/unused-parameter.h������������������������������������������������������0000664�0000000�0000000�00000002463�14110572173�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific function parameters are not used. Copyright (C) 2008-2021 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 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/>. */ /* _GL_UNUSED_PARAMETER is a marker that can be prepended to function parameter declarations for parameters that are not used. This helps to reduce warnings, such as from GCC -Wunused-parameter. The syntax is as follows: _GL_UNUSED_PARAMETER type param or more generally _GL_UNUSED_PARAMETER param_decl For example: _GL_UNUSED_PARAMETER int param _GL_UNUSED_PARAMETER int *(*param) (void) */ #ifndef _GL_UNUSED_PARAMETER # define _GL_UNUSED_PARAMETER _GL_ATTRIBUTE_MAYBE_UNUSED #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/userspec.c��������������������������������������������������������������0000664�0000000�0000000�00000020344�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* userspec.c -- Parse a user and group string. Copyright (C) 1989-1992, 1997-1998, 2000, 2002-2021 Free Software Foundation, Inc. This 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 David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> /* Specification. */ #include "userspec.h" #include <stdbool.h> #include <stdio.h> #include <sys/types.h> #include <pwd.h> #include <grp.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #include <limits.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "intprops.h" #include "inttostr.h" #include "xalloc.h" #include "xstrtol.h" #include "gettext.h" #define _(msgid) gettext (msgid) #define N_(msgid) msgid #ifndef HAVE_ENDGRENT # define endgrent() ((void) 0) #endif #ifndef HAVE_ENDPWENT # define endpwent() ((void) 0) #endif #ifndef UID_T_MAX # define UID_T_MAX TYPE_MAXIMUM (uid_t) #endif #ifndef GID_T_MAX # define GID_T_MAX TYPE_MAXIMUM (gid_t) #endif /* MAXUID may come from limits.h or sys/params.h. */ #ifndef MAXUID # define MAXUID UID_T_MAX #endif #ifndef MAXGID # define MAXGID GID_T_MAX #endif #ifdef __DJGPP__ /* ISDIGIT differs from isdigit, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char or EOF. - It's typically faster. POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless it's important to use the locale's definition of "digit" even when the host does not conform to POSIX. */ # define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* Return true if STR represents an unsigned decimal integer. */ static bool is_number (const char *str) { do { if (!ISDIGIT (*str)) return false; } while (*++str); return true; } #endif static char const * parse_with_separator (char const *spec, char const *separator, uid_t *uid, gid_t *gid, char **username, char **groupname) { static const char *E_invalid_user = N_("invalid user"); static const char *E_invalid_group = N_("invalid group"); static const char *E_bad_spec = N_("invalid spec"); const char *error_msg; struct passwd *pwd; struct group *grp; char *u; char const *g; char *gname = NULL; uid_t unum = *uid; gid_t gnum = gid ? *gid : -1; error_msg = NULL; if (username) *username = NULL; if (groupname) *groupname = NULL; /* Set U and G to nonzero length strings corresponding to user and group specifiers or to NULL. If U is not NULL, it is a newly allocated string. */ u = NULL; if (separator == NULL) { if (*spec) u = xstrdup (spec); } else { idx_t ulen = separator - spec; if (ulen != 0) { u = ximemdup (spec, ulen + 1); u[ulen] = '\0'; } } g = (separator == NULL || *(separator + 1) == '\0' ? NULL : separator + 1); #ifdef __DJGPP__ /* Pretend that we are the user U whose group is G. This makes pwd and grp functions "know" about the UID and GID of these. */ if (u && !is_number (u)) setenv ("USER", u, 1); if (g && !is_number (g)) setenv ("GROUP", g, 1); #endif if (u != NULL) { /* If it starts with "+", skip the look-up. */ pwd = (*u == '+' ? NULL : getpwnam (u)); if (pwd == NULL) { bool use_login_group = (separator != NULL && g == NULL); if (use_login_group) { /* If there is no group, then there may not be a trailing ":", either. */ error_msg = E_bad_spec; } else { unsigned long int tmp; if (xstrtoul (u, NULL, 10, &tmp, "") == LONGINT_OK && tmp <= MAXUID && (uid_t) tmp != (uid_t) -1) unum = tmp; else error_msg = E_invalid_user; } } else { unum = pwd->pw_uid; if (g == NULL && separator != NULL) { /* A separator was given, but a group was not specified, so get the login group. */ char buf[INT_BUFSIZE_BOUND (uintmax_t)]; gnum = pwd->pw_gid; grp = getgrgid (gnum); gname = xstrdup (grp ? grp->gr_name : umaxtostr (gnum, buf)); endgrent (); } } endpwent (); } if (g != NULL && error_msg == NULL) { /* Explicit group. */ /* If it starts with "+", skip the look-up. */ grp = (*g == '+' ? NULL : getgrnam (g)); if (grp == NULL) { unsigned long int tmp; if (xstrtoul (g, NULL, 10, &tmp, "") == LONGINT_OK && tmp <= MAXGID && (gid_t) tmp != (gid_t) -1) gnum = tmp; else error_msg = E_invalid_group; } else gnum = grp->gr_gid; endgrent (); /* Save a file descriptor. */ gname = xstrdup (g); } if (error_msg == NULL) { *uid = unum; if (gid) *gid = gnum; if (username) { *username = u; u = NULL; } if (groupname) { *groupname = gname; gname = NULL; } } free (u); free (gname); return error_msg ? _(error_msg) : NULL; } /* Extract from SPEC, which has the form "[user][:.][group]", a USERNAME, UID U, GROUPNAME, and GID G. If the GID parameter is NULL the entire SPEC is treated as a user. If the USERNAME and GROUPNAME parameters are NULL they're ignored. Either user or group, or both, must be present. If the group is omitted but the separator is given, use the given user's login group. If SPEC contains a ':', then use that as the separator, ignoring any '.'s. If there is no ':', but there is a '.', then first look up the entire SPEC as a login name. If that look-up fails, then try again interpreting the '.' as a separator. USERNAME and GROUPNAME will be in newly malloc'd memory. Either one might be NULL instead, indicating that it was not given and the corresponding numeric ID was left unchanged. Return NULL if successful, a static error message string if not. */ char const * parse_user_spec (char const *spec, uid_t *uid, gid_t *gid, char **username, char **groupname) { char const *colon = gid ? strchr (spec, ':') : NULL; char const *error_msg = parse_with_separator (spec, colon, uid, gid, username, groupname); if (gid && !colon && error_msg) { /* If there's no colon but there is a dot, and if looking up the whole spec failed (i.e., the spec is not an owner name that includes a dot), then try again, but interpret the dot as a separator. This is a compatible extension to POSIX, since the POSIX-required behavior is always tried first. */ char const *dot = strchr (spec, '.'); if (dot && ! parse_with_separator (spec, dot, uid, gid, username, groupname)) error_msg = NULL; } return error_msg; } #ifdef TEST # define NULL_CHECK(s) ((s) == NULL ? "(null)" : (s)) int main (int argc, char **argv) { int i; for (i = 1; i < argc; i++) { const char *e; char *username, *groupname; uid_t uid; gid_t gid; char *tmp; tmp = strdup (argv[i]); e = parse_user_spec (tmp, &uid, &gid, &username, &groupname); free (tmp); printf ("%s: %lu %lu %s %s %s\n", argv[i], (unsigned long int) uid, (unsigned long int) gid, NULL_CHECK (username), NULL_CHECK (groupname), NULL_CHECK (e)); } exit (0); } #endif /* Local Variables: indent-tabs-mode: nil End: */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/userspec.h��������������������������������������������������������������0000664�0000000�0000000�00000002014�14110572173�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a 'user:group' specifier (e.g. the first argument of chown utility). Copyright (C) 2003-2021 Free Software Foundation, Inc. This 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 Jim Meyering, 2003. */ #ifndef USERSPEC_H # define USERSPEC_H 1 # include <sys/types.h> const char * parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid, char **username_arg, char **groupname_arg); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/usleep.c����������������������������������������������������������������0000664�0000000�0000000�00000004406�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2009. 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/>. */ /* This file is _intentionally_ light-weight. Rather than using select or nanosleep, both of which drag in external libraries on some platforms, this merely rounds up to the nearest second if usleep() does not exist. If sub-second resolution is important, then use a more powerful interface to begin with. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #ifndef HAVE_USLEEP # define HAVE_USLEEP 0 #endif /* Sleep for MICRO microseconds, which can be greater than 1 second. Return -1 and set errno to EINVAL on range error (about 4295 seconds), or 0 on success. Interaction with SIGALARM is unspecified. */ int usleep (useconds_t micro) #undef usleep { #if defined _WIN32 && ! defined __CYGWIN__ unsigned int milliseconds = micro / 1000; if (sizeof milliseconds < sizeof micro && micro / 1000 != milliseconds) { errno = EINVAL; return -1; } if (micro % 1000) milliseconds++; Sleep (milliseconds); return 0; #else unsigned int seconds = micro / 1000000; if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) { errno = EINVAL; return -1; } if (!HAVE_USLEEP && micro % 1000000) seconds++; while ((seconds = sleep (seconds)) != 0); # if !HAVE_USLEEP # define usleep(x) 0 # endif return usleep (micro % 1000000); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utime.c�����������������������������������������������������������������0000664�0000000�0000000�00000021016�14110572173�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in utime. Copyright (C) 2017-2021 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. */ #include <config.h> /* Specification. */ #include <utime.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <stdbool.h> # include <windows.h> # include "filename.h" # include "malloca.h" /* Don't assume that UNICODE is not defined. */ # undef CreateFile # define CreateFile CreateFileA # undef GetFileAttributes # define GetFileAttributes GetFileAttributesA int _gl_utimens_windows (const char *name, struct timespec ts[2]) { /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } DWORD error; /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE handle = CreateFile (rname, FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (handle == INVALID_HANDLE_VALUE) { error = GetLastError (); goto failed; } if (check_dir) { /* GetFileAttributes <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesa> */ DWORD attributes = GetFileAttributes (rname); if (attributes == INVALID_FILE_ATTRIBUTES) { error = GetLastError (); CloseHandle (handle); goto failed; } if ((attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); errno = ENOTDIR; return -1; } } { /* Use SetFileTime(). See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfiletime> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ FILETIME last_access_time; FILETIME last_write_time; if (ts == NULL) { /* GetSystemTimeAsFileTime is the same as GetSystemTime followed by SystemTimeToFileTime. <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime>. It would be overkill to use GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. */ FILETIME current_time; GetSystemTimeAsFileTime (¤t_time); last_access_time = current_time; last_write_time = current_time; } else { { ULONGLONG time_since_16010101 = (ULONGLONG) ts[0].tv_sec * 10000000 + ts[0].tv_nsec / 100 + 116444736000000000LL; last_access_time.dwLowDateTime = (DWORD) time_since_16010101; last_access_time.dwHighDateTime = time_since_16010101 >> 32; } { ULONGLONG time_since_16010101 = (ULONGLONG) ts[1].tv_sec * 10000000 + ts[1].tv_nsec / 100 + 116444736000000000LL; last_write_time.dwLowDateTime = (DWORD) time_since_16010101; last_write_time.dwHighDateTime = time_since_16010101 >> 32; } } if (SetFileTime (handle, NULL, &last_access_time, &last_write_time)) { CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); return 0; } else { #if 0 DWORD sft_error = GetLastError (); fprintf (stderr, "utimens SetFileTime error 0x%x\n", (unsigned int) sft_error); #endif CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); errno = EINVAL; return -1; } } failed: { #if 0 fprintf (stderr, "utimens CreateFile/GetFileAttributes error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NETPATH: /* rname is such as '\\nonexistentserver\share'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys'. */ errno = (ts != NULL ? EPERM : EACCES); break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } } int utime (const char *name, const struct utimbuf *ts) { if (ts == NULL) return _gl_utimens_windows (name, NULL); else { struct timespec ts_with_nanoseconds[2]; ts_with_nanoseconds[0].tv_sec = ts->actime; ts_with_nanoseconds[0].tv_nsec = 0; ts_with_nanoseconds[1].tv_sec = ts->modtime; ts_with_nanoseconds[1].tv_nsec = 0; return _gl_utimens_windows (name, ts_with_nanoseconds); } } #else # include <errno.h> # include <sys/stat.h> # include "filename.h" int utime (const char *name, const struct utimbuf *ts) #undef utime { # if REPLACE_FUNC_UTIME_FILE /* macOS 10.13 mistakenly succeeds when given a symbolic link to a non-directory with a trailing slash. */ size_t len = strlen (name); if (len > 0 && ISSLASH (name[len - 1])) { struct stat buf; if (stat (name, &buf) == -1 && errno != EOVERFLOW) return -1; } # endif /* REPLACE_FUNC_UTIME_FILE */ return utime (name, ts); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utime.in.h��������������������������������������������������������������0000664�0000000�0000000�00000006617�14110572173�0016760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <utime.h>. Copyright (C) 2017-2021 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/>. */ #ifndef _@GUARD_PREFIX@_UTIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UTIME_H@ # @INCLUDE_NEXT@ @NEXT_UTIME_H@ #endif #ifndef _@GUARD_PREFIX@_UTIME_H #define _@GUARD_PREFIX@_UTIME_H #if !@HAVE_UTIME_H@ # include <sys/utime.h> #endif #if @GNULIB_UTIME@ /* Get struct timespec. */ # include <time.h> #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. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Define 'struct utimbuf' as an alias of 'struct _utimbuf' (or possibly, if present, 'struct __utimbuf64'). */ # define utimbuf _utimbuf #endif #if @GNULIB_UTIME@ # if @REPLACE_UTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define utime rpl_utime # endif _GL_FUNCDECL_RPL (utime, int, (const char *filename, const struct utimbuf *ts) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (utime, int, (const char *filename, const struct utimbuf *ts)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utime # define utime _utime # endif _GL_CXXALIAS_MDA (utime, int, (const char *filename, const struct utimbuf *ts)); # else # if !@HAVE_UTIME@ _GL_FUNCDECL_SYS (utime, int, (const char *filename, const struct utimbuf *ts) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (utime, int, (const char *filename, const struct utimbuf *ts)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (utime); # endif #elif defined GNULIB_POSIXCHECK # undef utime # if HAVE_RAW_DECL_UTIME _GL_WARN_ON_USE (utime, "utime is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif #elif @GNULIB_MDA_UTIME@ /* On native Windows, map 'utime' to '_utime', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::utime always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utime # define utime _utime # endif _GL_CXXALIAS_MDA (utime, int, (const char *filename, const struct utimbuf *ts)); # else _GL_CXXALIAS_SYS (utime, int, (const char *filename, const struct utimbuf *ts)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (utime); # endif #endif #if @GNULIB_UTIME@ extern int _gl_utimens_windows (const char *filename, struct timespec ts[2]); #endif #endif /* _@GUARD_PREFIX@_UTIME_H */ #endif /* _@GUARD_PREFIX@_UTIME_H */ �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utimecmp.c��������������������������������������������������������������0000664�0000000�0000000�00000033512�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* utimecmp.c -- compare file timestamps Copyright (C) 2004-2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "utimecmp.h" #include <fcntl.h> #include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <sys/stat.h> #include <time.h> #include <unistd.h> #include "dirname.h" #include "hash.h" #include "intprops.h" #include "stat-time.h" #include "verify.h" #ifndef MAX # define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif #define BILLION (1000 * 1000 * 1000) /* Best possible resolution that utimens can set and stat can return, due to system-call limitations. It must be a power of 10 that is no greater than 1 billion. */ #if HAVE_UTIMENSAT enum { SYSCALL_RESOLUTION = 1 }; #elif defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, file times have 100 ns resolution. See <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ enum { SYSCALL_RESOLUTION = 100 }; #elif ((HAVE_FUTIMESAT || HAVE_WORKING_UTIMES) \ && (defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_ATIMENSEC \ || defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_SPARE1)) enum { SYSCALL_RESOLUTION = 1000 }; #else enum { SYSCALL_RESOLUTION = BILLION }; #endif /* Describe a file system and its timestamp resolution in nanoseconds. */ struct fs_res { /* Device number of file system. */ dev_t dev; /* An upper bound on the timestamp resolution of this file system, ignoring any resolution that cannot be set via utimens. It is represented by an integer count of nanoseconds. It must be either 2 billion, or a power of 10 that is no greater than a billion and is no less than SYSCALL_RESOLUTION. */ int resolution; /* True if RESOLUTION is known to be exact, and is not merely an upper bound on the true resolution. */ bool exact; }; /* Hash some device info. */ static size_t dev_info_hash (void const *x, size_t table_size) { struct fs_res const *p = x; /* Beware signed arithmetic gotchas. */ if (TYPE_SIGNED (dev_t) && SIZE_MAX < MAX (INT_MAX, TYPE_MAXIMUM (dev_t))) { uintmax_t dev = p->dev; return dev % table_size; } return p->dev % table_size; } /* Compare two dev_info structs. */ static bool dev_info_compare (void const *x, void const *y) { struct fs_res const *a = x; struct fs_res const *b = y; return a->dev == b->dev; } /* Return -1, 0, 1 based on whether the destination file (relative to openat-like directory file descriptor DFD with name DST_NAME and status DST_STAT) is older than SRC_STAT, the same age as SRC_STAT, or newer than SRC_STAT, respectively. DST_NAME may be NULL if OPTIONS is 0. If OPTIONS & UTIMECMP_TRUNCATE_SOURCE, do the comparison after SRC is converted to the destination's timestamp resolution as filtered through utimens. In this case, return -2 if the exact answer cannot be determined; this can happen only if the timestamps are very close and there is some trouble accessing the file system (e.g., the user does not have permission to futz with the destination's timestamps). */ int utimecmp (char const *dst_name, struct stat const *dst_stat, struct stat const *src_stat, int options) { return utimecmpat (AT_FDCWD, dst_name, dst_stat, src_stat, options); } int utimecmpat (int dfd, char const *dst_name, struct stat const *dst_stat, struct stat const *src_stat, int options) { /* Things to watch out for: The code uses a static hash table internally and is not safe in the presence of signals, multiple threads, etc. However, memory pressure that prevents use of the hash table is not fatal - we just fall back to redoing the computations on every call in that case. int and long int might be 32 bits. Many of the calculations store numbers up to 2 billion, and multiply by 10; they have to avoid multiplying 2 billion by 10, as this exceeds 32-bit capabilities. time_t might be unsigned. */ verify (TYPE_IS_INTEGER (time_t)); /* Destination and source timestamps. */ time_t dst_s = dst_stat->st_mtime; time_t src_s = src_stat->st_mtime; int dst_ns = get_stat_mtime_ns (dst_stat); int src_ns = get_stat_mtime_ns (src_stat); if (options & UTIMECMP_TRUNCATE_SOURCE) { #if defined _AIX /* On AIX 7.2, on a jfs2 file system, the times may differ by up to 0.01 seconds in either direction. But it does not seem to come from clock ticks of 0.01 seconds each. */ long long difference = ((long long) dst_s - (long long) src_s) * BILLION + ((long long) dst_ns - (long long) src_ns); if (difference < 10000000 && difference > -10000000) return 0; #endif /* Look up the timestamp resolution for the destination device. */ /* Hash table for caching information learned about devices. */ static Hash_table *ht; /* Information about the destination file system. */ static struct fs_res *new_dst_res; struct fs_res *dst_res = NULL; struct fs_res tmp_dst_res; /* timestamp resolution in nanoseconds. */ int res; /* Quick exit, if possible. Since the worst resolution is 2 seconds, anything that differs by more than that does not needs source truncation. */ if (dst_s == src_s && dst_ns == src_ns) return 0; if (dst_s <= src_s - 2) return -1; if (src_s <= dst_s - 2) return 1; /* Try to do a hash lookup, but fall back to stack variables and recomputation on low memory situations. */ if (! ht) ht = hash_initialize (16, NULL, dev_info_hash, dev_info_compare, free); if (ht) { if (! new_dst_res) { new_dst_res = malloc (sizeof *new_dst_res); if (!new_dst_res) goto low_memory; new_dst_res->resolution = 2 * BILLION; new_dst_res->exact = false; } new_dst_res->dev = dst_stat->st_dev; dst_res = hash_insert (ht, new_dst_res); if (! dst_res) goto low_memory; if (dst_res == new_dst_res) { /* NEW_DST_RES is now in use in the hash table, so allocate a new entry next time. */ new_dst_res = NULL; } } else { low_memory: if (ht) { tmp_dst_res.dev = dst_stat->st_dev; dst_res = hash_lookup (ht, &tmp_dst_res); } if (!dst_res) { dst_res = &tmp_dst_res; dst_res->resolution = 2 * BILLION; dst_res->exact = false; } } res = dst_res->resolution; #ifdef _PC_TIMESTAMP_RESOLUTION /* If the system will tell us the resolution, we're set! */ if (! dst_res->exact) { res = -1; if (dfd == AT_FDCWD) res = pathconf (dst_name, _PC_TIMESTAMP_RESOLUTION); else { char *dstdir = mdir_name (dst_name); if (dstdir) { int destdirfd = openat (dfd, dstdir, O_SEARCH | O_CLOEXEC | O_DIRECTORY); if (0 <= destdirfd) { res = fpathconf (destdirfd, _PC_TIMESTAMP_RESOLUTION); close (destdirfd); } free (dstdir); } } if (0 < res) { dst_res->resolution = res; dst_res->exact = true; } } #endif if (! dst_res->exact) { /* This file system's resolution is not known exactly. Deduce it, and store the result in the hash table. */ time_t dst_a_s = dst_stat->st_atime; time_t dst_c_s = dst_stat->st_ctime; time_t dst_m_s = dst_s; int dst_a_ns = get_stat_atime_ns (dst_stat); int dst_c_ns = get_stat_ctime_ns (dst_stat); int dst_m_ns = dst_ns; /* Set RES to an upper bound on the file system resolution (after truncation due to SYSCALL_RESOLUTION) by inspecting the atime, ctime and mtime of the existing destination. We don't know of any file system that stores atime or ctime with a higher precision than mtime, so it's valid to look at them too. */ { bool odd_second = (dst_a_s | dst_c_s | dst_m_s) & 1; if (SYSCALL_RESOLUTION == BILLION) { if (odd_second | dst_a_ns | dst_c_ns | dst_m_ns) res = BILLION; } else { int a = dst_a_ns; int c = dst_c_ns; int m = dst_m_ns; /* Write it this way to avoid mistaken GCC warning about integer overflow in constant expression. */ int SR10 = SYSCALL_RESOLUTION; SR10 *= 10; if ((a % SR10 | c % SR10 | m % SR10) != 0) res = SYSCALL_RESOLUTION; else for (res = SR10, a /= SR10, c /= SR10, m /= SR10; (res < dst_res->resolution && (a % 10 | c % 10 | m % 10) == 0); res *= 10, a /= 10, c /= 10, m /= 10) if (res == BILLION) { if (! odd_second) res *= 2; break; } } dst_res->resolution = res; } if (SYSCALL_RESOLUTION < res) { struct timespec timespec[2]; struct stat dst_status; /* Ignore source timestamp information that must necessarily be lost when filtered through utimens. */ src_ns -= src_ns % SYSCALL_RESOLUTION; /* If the timestamps disagree widely enough, there's no need to interrogate the file system to deduce the exact timestamp resolution; return the answer directly. */ { time_t s = src_s & ~ (res == 2 * BILLION ? 1 : 0); if (src_s < dst_s || (src_s == dst_s && src_ns <= dst_ns)) return 1; if (dst_s < s || (dst_s == s && dst_ns < src_ns - src_ns % res)) return -1; } /* Determine the actual timestamp resolution for the destination file system (after truncation due to SYSCALL_RESOLUTION) by setting the access timestamp of the destination to the existing access time, except with trailing nonzero digits. */ timespec[0].tv_sec = dst_a_s; timespec[0].tv_nsec = dst_a_ns; timespec[1].tv_sec = dst_m_s | (res == 2 * BILLION); timespec[1].tv_nsec = dst_m_ns + res / 9; if (utimensat (dfd, dst_name, timespec, AT_SYMLINK_NOFOLLOW)) return -2; /* Read the modification time that was set. */ { int stat_result = fstatat (dfd, dst_name, &dst_status, AT_SYMLINK_NOFOLLOW); if (stat_result | (dst_status.st_mtime ^ dst_m_s) | (get_stat_mtime_ns (&dst_status) ^ dst_m_ns)) { /* The modification time changed, or we can't tell whether it changed. Change it back as best we can. */ timespec[1].tv_sec = dst_m_s; timespec[1].tv_nsec = dst_m_ns; utimensat (dfd, dst_name, timespec, AT_SYMLINK_NOFOLLOW); } if (stat_result != 0) return -2; } /* Determine the exact resolution from the modification time that was read back. */ { int old_res = res; int a = (BILLION * (dst_status.st_mtime & 1) + get_stat_mtime_ns (&dst_status)); res = SYSCALL_RESOLUTION; for (a /= res; a % 10 == 0; a /= 10) { if (res == BILLION) { res *= 2; break; } res *= 10; if (res == old_res) break; } } } dst_res->resolution = res; dst_res->exact = true; } /* Truncate the source's timestamp according to the resolution. */ src_s &= ~ (res == 2 * BILLION ? 1 : 0); src_ns -= src_ns % res; } /* Compare the timestamps and return -1, 0, 1 accordingly. */ return (_GL_CMP (dst_s, src_s) + ((dst_s == src_s ? ~0 : 0) & _GL_CMP (dst_ns, src_ns))); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utimecmp.h��������������������������������������������������������������0000664�0000000�0000000�00000002376�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* utimecmp.h -- compare file timestamps Copyright (C) 2004, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef UTIMECMP_H #define UTIMECMP_H 1 #include <sys/types.h> #include <sys/stat.h> /* Options for utimecmp. */ enum { /* Before comparing, truncate the source timestamp to the resolution of the destination file system and to the resolution of utimens. */ UTIMECMP_TRUNCATE_SOURCE = 1 }; int utimecmp (char const *, struct stat const *, struct stat const *, int); int utimecmpat (int, char const *, struct stat const *, struct stat const *, int); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utimens.c���������������������������������������������������������������0000664�0000000�0000000�00000052540�14110572173�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright (C) 2003-2021 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 Paul Eggert. */ /* derived from a function in touch.c */ #include <config.h> #define _GL_UTIMENS_INLINE _GL_EXTERN_INLINE #include "utimens.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> #include <utime.h> #include "stat-time.h" #include "timespec.h" /* On native Windows, use SetFileTime; but avoid this when compiling GNU Emacs, which arranges for this in some other way and which defines WIN32_LEAN_AND_MEAN itself. */ #if defined _WIN32 && ! defined __CYGWIN__ && ! defined EMACS_CONFIGURATION # define USE_SETFILETIME # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif /* Avoid recursion with rpl_futimens or rpl_utimensat. */ #undef futimens #if !HAVE_NEARLY_WORKING_UTIMENSAT # undef utimensat #endif /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. Force the use of rpl_stat for a fix. */ #ifndef REPLACE_FUNC_STAT_FILE # define REPLACE_FUNC_STAT_FILE 0 #endif #if HAVE_UTIMENSAT || HAVE_FUTIMENS /* Cache variables for whether the utimensat syscall works; used to avoid calling the syscall if we know it will just fail with ENOSYS, and to avoid unnecessary work in massaging timestamps if the syscall will work. Multiple variables are needed, to distinguish between the following scenarios on Linux: utimensat doesn't exist, or is in glibc but kernel 2.6.18 fails with ENOSYS kernel 2.6.22 and earlier rejects AT_SYMLINK_NOFOLLOW kernel 2.6.25 and earlier reject UTIME_NOW/UTIME_OMIT with non-zero tv_sec kernel 2.6.32 used with xfs or ntfs-3g fail to honor UTIME_OMIT utimensat completely works For each cache variable: 0 = unknown, 1 = yes, -1 = no. */ static int utimensat_works_really; static int lutimensat_works_really; #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */ /* Validate the requested timestamps. Return 0 if the resulting timespec can be used for utimensat (after possibly modifying it to work around bugs in utimensat). Return a positive value if the timespec needs further adjustment based on stat results: 1 if any adjustment is needed for utimes, and 2 if any adjustment is needed for Linux utimensat. Return -1, with errno set to EINVAL, if timespec is out of range. */ static int validate_timespec (struct timespec timespec[2]) { int result = 0; int utime_omit_count = 0; if ((timespec[0].tv_nsec != UTIME_NOW && timespec[0].tv_nsec != UTIME_OMIT && ! (0 <= timespec[0].tv_nsec && timespec[0].tv_nsec < TIMESPEC_HZ)) || (timespec[1].tv_nsec != UTIME_NOW && timespec[1].tv_nsec != UTIME_OMIT && ! (0 <= timespec[1].tv_nsec && timespec[1].tv_nsec < TIMESPEC_HZ))) { errno = EINVAL; return -1; } /* Work around Linux kernel 2.6.25 bug, where utimensat fails with EINVAL if tv_sec is not 0 when using the flag values of tv_nsec. Flag a Linux kernel 2.6.32 bug, where an mtime of UTIME_OMIT fails to bump ctime. */ if (timespec[0].tv_nsec == UTIME_NOW || timespec[0].tv_nsec == UTIME_OMIT) { timespec[0].tv_sec = 0; result = 1; if (timespec[0].tv_nsec == UTIME_OMIT) utime_omit_count++; } if (timespec[1].tv_nsec == UTIME_NOW || timespec[1].tv_nsec == UTIME_OMIT) { timespec[1].tv_sec = 0; result = 1; if (timespec[1].tv_nsec == UTIME_OMIT) utime_omit_count++; } return result + (utime_omit_count == 1); } /* Normalize any UTIME_NOW or UTIME_OMIT values in (*TS)[0] and (*TS)[1], using STATBUF to obtain the current timestamps of the file. If both times are UTIME_NOW, set *TS to NULL (as this can avoid some permissions issues). If both times are UTIME_OMIT, return true (nothing further beyond the prior collection of STATBUF is necessary); otherwise return false. */ static bool update_timespec (struct stat const *statbuf, struct timespec **ts) { struct timespec *timespec = *ts; if (timespec[0].tv_nsec == UTIME_OMIT && timespec[1].tv_nsec == UTIME_OMIT) return true; if (timespec[0].tv_nsec == UTIME_NOW && timespec[1].tv_nsec == UTIME_NOW) { *ts = NULL; return false; } if (timespec[0].tv_nsec == UTIME_OMIT) timespec[0] = get_stat_atime (statbuf); else if (timespec[0].tv_nsec == UTIME_NOW) gettime (×pec[0]); if (timespec[1].tv_nsec == UTIME_OMIT) timespec[1] = get_stat_mtime (statbuf); else if (timespec[1].tv_nsec == UTIME_NOW) gettime (×pec[1]); return false; } /* Set the access and modification timestamps of FD (a.k.a. FILE) to be TIMESPEC[0] and TIMESPEC[1], respectively. FD must be either negative -- in which case it is ignored -- or a file descriptor that is open on FILE. If FD is nonnegative, then FILE can be NULL, which means use just futimes (or equivalent) instead of utimes (or equivalent), and fail if on an old system without futimes (or equivalent). If TIMESPEC is null, set the timestamps to the current time. Return 0 on success, -1 (setting errno) on failure. */ int fdutimens (int fd, char const *file, struct timespec const timespec[2]) { struct timespec adjusted_timespec[2]; struct timespec *ts = timespec ? adjusted_timespec : NULL; int adjustment_needed = 0; struct stat st; if (ts) { adjusted_timespec[0] = timespec[0]; adjusted_timespec[1] = timespec[1]; adjustment_needed = validate_timespec (ts); } if (adjustment_needed < 0) return -1; /* Require that at least one of FD or FILE are potentially valid, to avoid a Linux bug where futimens (AT_FDCWD, NULL) changes "." rather than failing. */ if (fd < 0 && !file) { errno = EBADF; return -1; } /* Some Linux-based NFS clients are buggy, and mishandle timestamps of files in NFS file systems in some cases. We have no configure-time test for this, but please see <https://bugs.gentoo.org/show_bug.cgi?id=132673> for references to some of the problems with Linux 2.6.16. If this affects you, compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to help in some cases, albeit at a cost in performance. But you really should upgrade your kernel to a fixed version, since the problem affects many applications. */ #if HAVE_BUGGY_NFS_TIME_STAMPS if (fd < 0) sync (); else fsync (fd); #endif /* POSIX 2008 added two interfaces to set file timestamps with nanosecond resolution; newer Linux implements both functions via a single syscall. We provide a fallback for ENOSYS (for example, compiling against Linux 2.6.25 kernel headers and glibc 2.7, but running on Linux 2.6.18 kernel). */ #if HAVE_UTIMENSAT || HAVE_FUTIMENS if (0 <= utimensat_works_really) { int result; # if __linux__ || __sun /* As recently as Linux kernel 2.6.32 (Dec 2009), several file systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT, but work if both times are either explicitly specified or UTIME_NOW. Work around it with a preparatory [f]stat prior to calling futimens/utimensat; fortunately, there is not much timing impact due to the extra syscall even on file systems where UTIME_OMIT would have worked. The same bug occurs in Solaris 11.1 (Apr 2013). FIXME: Simplify this for Linux in 2016 and for Solaris in 2024, when file system bugs are no longer common. */ if (adjustment_needed == 2) { if (fd < 0 ? stat (file, &st) : fstat (fd, &st)) return -1; if (ts[0].tv_nsec == UTIME_OMIT) ts[0] = get_stat_atime (&st); else if (ts[1].tv_nsec == UTIME_OMIT) ts[1] = get_stat_mtime (&st); /* Note that st is good, in case utimensat gives ENOSYS. */ adjustment_needed++; } # endif # if HAVE_UTIMENSAT if (fd < 0) { # if defined __APPLE__ && defined __MACH__ size_t len = strlen (file); if (len > 0 && file[len - 1] == '/') { struct stat statbuf; if (stat (file, &statbuf) < 0) return -1; if (!S_ISDIR (statbuf.st_mode)) { errno = ENOTDIR; return -1; } } # endif result = utimensat (AT_FDCWD, file, ts, 0); # ifdef __linux__ /* Work around a kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=442352 https://bugzilla.redhat.com/show_bug.cgi?id=449910 It appears that utimensat can mistakenly return 280 rather than -1 upon ENOSYS failure. FIXME: remove in 2010 or whenever the offending kernels are no longer in common use. */ if (0 < result) errno = ENOSYS; # endif /* __linux__ */ if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; return result; } } # endif /* HAVE_UTIMENSAT */ # if HAVE_FUTIMENS if (0 <= fd) { result = futimens (fd, ts); # ifdef __linux__ /* Work around the same bug as above. */ if (0 < result) errno = ENOSYS; # endif /* __linux__ */ if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; return result; } } # endif /* HAVE_FUTIMENS */ } utimensat_works_really = -1; lutimensat_works_really = -1; #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */ #ifdef USE_SETFILETIME /* On native Windows, use SetFileTime(). See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfiletime> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ if (0 <= fd) { HANDLE handle; FILETIME current_time; FILETIME last_access_time; FILETIME last_write_time; handle = (HANDLE) _get_osfhandle (fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (ts == NULL || ts[0].tv_nsec == UTIME_NOW || ts[1].tv_nsec == UTIME_NOW) { /* GetSystemTimeAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime>. It would be overkill to use GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. */ GetSystemTimeAsFileTime (¤t_time); } if (ts == NULL || ts[0].tv_nsec == UTIME_NOW) { last_access_time = current_time; } else if (ts[0].tv_nsec == UTIME_OMIT) { last_access_time.dwLowDateTime = 0; last_access_time.dwHighDateTime = 0; } else { ULONGLONG time_since_16010101 = (ULONGLONG) ts[0].tv_sec * 10000000 + ts[0].tv_nsec / 100 + 116444736000000000LL; last_access_time.dwLowDateTime = (DWORD) time_since_16010101; last_access_time.dwHighDateTime = time_since_16010101 >> 32; } if (ts == NULL || ts[1].tv_nsec == UTIME_NOW) { last_write_time = current_time; } else if (ts[1].tv_nsec == UTIME_OMIT) { last_write_time.dwLowDateTime = 0; last_write_time.dwHighDateTime = 0; } else { ULONGLONG time_since_16010101 = (ULONGLONG) ts[1].tv_sec * 10000000 + ts[1].tv_nsec / 100 + 116444736000000000LL; last_write_time.dwLowDateTime = (DWORD) time_since_16010101; last_write_time.dwHighDateTime = time_since_16010101 >> 32; } if (SetFileTime (handle, NULL, &last_access_time, &last_write_time)) return 0; else { DWORD sft_error = GetLastError (); #if 0 fprintf (stderr, "fdutimens SetFileTime error 0x%x\n", (unsigned int) sft_error); #endif switch (sft_error) { case ERROR_ACCESS_DENIED: /* fd was opened without O_RDWR */ errno = EACCES; /* not specified by POSIX */ break; default: errno = EINVAL; break; } return -1; } } #endif /* The platform lacks an interface to set file timestamps with nanosecond resolution, so do the best we can, discarding any fractional part of the timestamp. */ if (adjustment_needed || (REPLACE_FUNC_STAT_FILE && fd < 0)) { if (adjustment_needed != 3 && (fd < 0 ? stat (file, &st) : fstat (fd, &st))) return -1; if (ts && update_timespec (&st, &ts)) return 0; } { #if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES struct timeval timeval[2]; struct timeval *t; if (ts) { timeval[0].tv_sec = ts[0].tv_sec; timeval[0].tv_usec = ts[0].tv_nsec / 1000; timeval[1].tv_sec = ts[1].tv_sec; timeval[1].tv_usec = ts[1].tv_nsec / 1000; t = timeval; } else t = NULL; if (fd < 0) { # if HAVE_FUTIMESAT return futimesat (AT_FDCWD, file, t); # endif } else { /* If futimesat or futimes fails here, don't try to speed things up by returning right away. glibc can incorrectly fail with errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 in high security mode doesn't allow ordinary users to read /proc/self, so glibc incorrectly fails with errno == EACCES. If errno == EIO, EPERM, or EROFS, it's probably safe to fail right away, but these cases are rare enough that they're not worth optimizing, and who knows what other messed-up systems are out there? So play it safe and fall back on the code below. */ # if (HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG) || HAVE_FUTIMES # if HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG # undef futimes # define futimes(fd, t) futimesat (fd, NULL, t) # endif if (futimes (fd, t) == 0) { # if __linux__ && __GLIBC__ /* Work around a longstanding glibc bug, still present as of 2010-12-27. On older Linux kernels that lack both utimensat and utimes, glibc's futimes rounds instead of truncating when falling back on utime. The same bug occurs in futimesat with a null 2nd arg. */ if (t) { bool abig = 500000 <= t[0].tv_usec; bool mbig = 500000 <= t[1].tv_usec; if ((abig | mbig) && fstat (fd, &st) == 0) { /* If these two subtractions overflow, they'll track the overflows inside the buggy glibc. */ time_t adiff = st.st_atime - t[0].tv_sec; time_t mdiff = st.st_mtime - t[1].tv_sec; struct timeval *tt = NULL; struct timeval truncated_timeval[2]; truncated_timeval[0] = t[0]; truncated_timeval[1] = t[1]; if (abig && adiff == 1 && get_stat_atime_ns (&st) == 0) { tt = truncated_timeval; tt[0].tv_usec = 0; } if (mbig && mdiff == 1 && get_stat_mtime_ns (&st) == 0) { tt = truncated_timeval; tt[1].tv_usec = 0; } if (tt) futimes (fd, tt); } } # endif return 0; } # endif } #endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */ if (!file) { #if ! ((HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG) \ || (HAVE_WORKING_UTIMES && HAVE_FUTIMES)) errno = ENOSYS; #endif return -1; } #ifdef USE_SETFILETIME return _gl_utimens_windows (file, ts); #elif HAVE_WORKING_UTIMES return utimes (file, t); #else { struct utimbuf utimbuf; struct utimbuf *ut; if (ts) { utimbuf.actime = ts[0].tv_sec; utimbuf.modtime = ts[1].tv_sec; ut = &utimbuf; } else ut = NULL; return utime (file, ut); } #endif /* !HAVE_WORKING_UTIMES */ } } /* Set the access and modification timestamps of FILE to be TIMESPEC[0] and TIMESPEC[1], respectively. */ int utimens (char const *file, struct timespec const timespec[2]) { return fdutimens (-1, file, timespec); } /* Set the access and modification timestamps of FILE to be TIMESPEC[0] and TIMESPEC[1], respectively, without dereferencing symlinks. Fail with ENOSYS if the platform does not support changing symlink timestamps, but FILE was a symlink. */ int lutimens (char const *file, struct timespec const timespec[2]) { struct timespec adjusted_timespec[2]; struct timespec *ts = timespec ? adjusted_timespec : NULL; int adjustment_needed = 0; struct stat st; if (ts) { adjusted_timespec[0] = timespec[0]; adjusted_timespec[1] = timespec[1]; adjustment_needed = validate_timespec (ts); } if (adjustment_needed < 0) return -1; /* The Linux kernel did not support symlink timestamps until utimensat, in version 2.6.22, so we don't need to mimic fdutimens' worry about buggy NFS clients. But we do have to worry about bogus return values. */ #if HAVE_UTIMENSAT if (0 <= lutimensat_works_really) { int result; # if __linux__ || __sun /* As recently as Linux kernel 2.6.32 (Dec 2009), several file systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT, but work if both times are either explicitly specified or UTIME_NOW. Work around it with a preparatory lstat prior to calling utimensat; fortunately, there is not much timing impact due to the extra syscall even on file systems where UTIME_OMIT would have worked. The same bug occurs in Solaris 11.1 (Apr 2013). FIXME: Simplify this for Linux in 2016 and for Solaris in 2024, when file system bugs are no longer common. */ if (adjustment_needed == 2) { if (lstat (file, &st)) return -1; if (ts[0].tv_nsec == UTIME_OMIT) ts[0] = get_stat_atime (&st); else if (ts[1].tv_nsec == UTIME_OMIT) ts[1] = get_stat_mtime (&st); /* Note that st is good, in case utimensat gives ENOSYS. */ adjustment_needed++; } # endif result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW); # ifdef __linux__ /* Work around a kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=442352 https://bugzilla.redhat.com/show_bug.cgi?id=449910 It appears that utimensat can mistakenly return 280 rather than -1 upon ENOSYS failure. FIXME: remove in 2010 or whenever the offending kernels are no longer in common use. */ if (0 < result) errno = ENOSYS; # endif if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; lutimensat_works_really = 1; return result; } } lutimensat_works_really = -1; #endif /* HAVE_UTIMENSAT */ /* The platform lacks an interface to set file timestamps with nanosecond resolution, so do the best we can, discarding any fractional part of the timestamp. */ if (adjustment_needed || REPLACE_FUNC_STAT_FILE) { if (adjustment_needed != 3 && lstat (file, &st)) return -1; if (ts && update_timespec (&st, &ts)) return 0; } /* On Linux, lutimes is a thin wrapper around utimensat, so there is no point trying lutimes if utimensat failed with ENOSYS. */ #if HAVE_LUTIMES && !HAVE_UTIMENSAT { struct timeval timeval[2]; struct timeval *t; int result; if (ts) { timeval[0].tv_sec = ts[0].tv_sec; timeval[0].tv_usec = ts[0].tv_nsec / 1000; timeval[1].tv_sec = ts[1].tv_sec; timeval[1].tv_usec = ts[1].tv_nsec / 1000; t = timeval; } else t = NULL; result = lutimes (file, t); if (result == 0 || errno != ENOSYS) return result; } #endif /* HAVE_LUTIMES && !HAVE_UTIMENSAT */ /* Out of luck for symlinks, but we still handle regular files. */ if (!(adjustment_needed || REPLACE_FUNC_STAT_FILE) && lstat (file, &st)) return -1; if (!S_ISLNK (st.st_mode)) return fdutimens (-1, file, ts); errno = ENOSYS; return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utimens.h���������������������������������������������������������������0000664�0000000�0000000�00000003104�14110572173�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright 2012-2021 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 Paul Eggert. */ #include <time.h> int fdutimens (int, char const *, struct timespec const [2]); int utimens (char const *, struct timespec const [2]); int lutimens (char const *, struct timespec const [2]); #if GNULIB_FDUTIMENSAT # include <fcntl.h> # include <sys/stat.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UTIMENS_INLINE # define _GL_UTIMENS_INLINE _GL_INLINE #endif int fdutimensat (int fd, int dir, char const *name, struct timespec const [2], int atflag); /* Using this function makes application code slightly more readable. */ _GL_UTIMENS_INLINE int lutimensat (int dir, char const *file, struct timespec const times[2]) { return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW); } _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/utimensat.c�������������������������������������������������������������0000664�0000000�0000000�00000016747�14110572173�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the access and modification time of a file relative to directory fd. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "stat-time.h" #include "timespec.h" #include "utimens.h" #if HAVE_NEARLY_WORKING_UTIMENSAT /* Use the original utimensat(), but correct the trailing slash handling. */ int rpl_utimensat (int fd, char const *file, struct timespec const times[2], int flag) # undef utimensat { size_t len = strlen (file); if (len && file[len - 1] == '/') { struct stat st; if (fstatat (fd, file, &st, flag & AT_SYMLINK_NOFOLLOW) < 0) return -1; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } return utimensat (fd, file, times, flag); } #else # if HAVE_UTIMENSAT /* If we have a native utimensat, but are compiling this file, then utimensat was defined to rpl_utimensat by our replacement sys/stat.h. We assume the native version might fail with ENOSYS, or succeed without properly affecting ctime (as is the case when using newer glibc but older Linux kernel). In this scenario, rpl_utimensat checks whether the native version is usable, and local_utimensat provides the fallback manipulation. */ static int local_utimensat (int, char const *, struct timespec const[2], int); # define AT_FUNC_NAME local_utimensat /* Like utimensat, but work around native bugs. */ int rpl_utimensat (int fd, char const *file, struct timespec const times[2], int flag) # undef utimensat { # if defined __linux__ || defined __sun struct timespec ts[2]; # endif /* See comments in utimens.c for details. */ static int utimensat_works_really; /* 0 = unknown, 1 = yes, -1 = no. */ if (0 <= utimensat_works_really) { int result; # if defined __linux__ || defined __sun struct stat st; /* As recently as Linux kernel 2.6.32 (Dec 2009), several file systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT, but work if both times are either explicitly specified or UTIME_NOW. Work around it with a preparatory [l]stat prior to calling utimensat; fortunately, there is not much timing impact due to the extra syscall even on file systems where UTIME_OMIT would have worked. The same bug occurs in Solaris 11.1 (Apr 2013). FIXME: Simplify this in 2024, when these file system bugs are no longer common on Gnulib target platforms. */ if (times && (times[0].tv_nsec == UTIME_OMIT || times[1].tv_nsec == UTIME_OMIT)) { if (fstatat (fd, file, &st, flag)) return -1; if (times[0].tv_nsec == UTIME_OMIT && times[1].tv_nsec == UTIME_OMIT) return 0; if (times[0].tv_nsec == UTIME_OMIT) ts[0] = get_stat_atime (&st); else ts[0] = times[0]; if (times[1].tv_nsec == UTIME_OMIT) ts[1] = get_stat_mtime (&st); else ts[1] = times[1]; times = ts; } # ifdef __hppa__ /* Linux kernel 2.6.22.19 on hppa does not reject invalid tv_nsec values. */ else if (times && ((times[0].tv_nsec != UTIME_NOW && ! (0 <= times[0].tv_nsec && times[0].tv_nsec < TIMESPEC_HZ)) || (times[1].tv_nsec != UTIME_NOW && ! (0 <= times[1].tv_nsec && times[1].tv_nsec < TIMESPEC_HZ)))) { errno = EINVAL; return -1; } # endif # endif # if defined __APPLE__ && defined __MACH__ /* macOS 10.13 does not reject invalid tv_nsec values either. */ if (times && ((times[0].tv_nsec != UTIME_OMIT && times[0].tv_nsec != UTIME_NOW && ! (0 <= times[0].tv_nsec && times[0].tv_nsec < TIMESPEC_HZ)) || (times[1].tv_nsec != UTIME_OMIT && times[1].tv_nsec != UTIME_NOW && ! (0 <= times[1].tv_nsec && times[1].tv_nsec < TIMESPEC_HZ)))) { errno = EINVAL; return -1; } size_t len = strlen (file); if (len > 0 && file[len - 1] == '/') { struct stat statbuf; if (fstatat (fd, file, &statbuf, 0) < 0) return -1; if (!S_ISDIR (statbuf.st_mode)) { errno = ENOTDIR; return -1; } } # endif result = utimensat (fd, file, times, flag); /* Linux kernel 2.6.25 has a bug where it returns EINVAL for UTIME_NOW or UTIME_OMIT with non-zero tv_sec, which local_utimensat works around. Meanwhile, EINVAL for a bad flag is indeterminate whether the native utimensat works, but local_utimensat will also reject it. */ if (result == -1 && errno == EINVAL && (flag & ~AT_SYMLINK_NOFOLLOW)) return result; if (result == 0 || (errno != ENOSYS && errno != EINVAL)) { utimensat_works_really = 1; return result; } } /* No point in trying openat/futimens, since on Linux, futimens is implemented with the same syscall as utimensat. Only avoid the native utimensat due to an ENOSYS failure; an EINVAL error was data-dependent, and the next caller may pass valid data. */ if (0 <= utimensat_works_really && errno == ENOSYS) utimensat_works_really = -1; return local_utimensat (fd, file, times, flag); } # else /* !HAVE_UTIMENSAT */ # define AT_FUNC_NAME utimensat # endif /* !HAVE_UTIMENSAT */ /* Set the access and modification timestamps of FILE to be TIMESPEC[0] and TIMESPEC[1], respectively; relative to directory FD. If flag is AT_SYMLINK_NOFOLLOW, change the times of a symlink, or fail with ENOSYS if not possible. If TIMESPEC is null, set the timestamps to the current time. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then utimens/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. Return 0 on success, -1 (setting errno) on failure. */ /* AT_FUNC_NAME is now utimensat or local_utimensat. */ # define AT_FUNC_F1 lutimens # define AT_FUNC_F2 utimens # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , struct timespec const ts[2], int flag # define AT_FUNC_POST_FILE_ARGS , ts # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #endif /* !HAVE_NEARLY_WORKING_UTIMENSAT */ �������������������������gnulib-20210822~d383792/lib/vasnprintf.c������������������������������������������������������������0000664�0000000�0000000�00000712673�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2021 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/>. */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. ENABLE_WCHAR_FALLBACK Set to 1 to avoid EILSEQ during conversion of wide characters (wchar_t) and wide character strings (wchar_t[]) to multibyte sequences. The fallback is the hexadecimal escape syntax (\unnnn or \Unnnnnnnn) or, if wchar_t is not Unicode encoded, \wnnnn or \Wnnnnnnnn. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include <config.h> #endif /* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that main's use of CHECK macros expands to code that is too complicated for gcc -fanalyzer. Suppress the resulting bogus warnings. */ #if 10 <= __GNUC__ # pragma GCC diagnostic ignored "-Wanalyzer-null-argument" #endif #include <alloca.h> /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include <locale.h> /* localeconv() */ #include <stdio.h> /* snprintf(), sprintf() */ #include <stdlib.h> /* abort(), malloc(), realloc(), free() */ #include <string.h> /* memcpy(), strlen() */ #include <errno.h> /* errno */ #include <limits.h> /* CHAR_BIT */ #include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include <langinfo.h> #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "attribute.h" #include "verify.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnand-nolibm.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else /* MSVC versions < 14 did not have snprintf, only _snprintf. */ # define SNPRINTF _snprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL) || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || (ENABLE_WCHAR_FALLBACK && HAVE_WINT_T)) && !WIDE_CHAR_VERSION # if ENABLE_WCHAR_FALLBACK static size_t wctomb_fallback (char *s, wchar_t wc) { static char hex[16] = "0123456789ABCDEF"; s[0] = '\\'; if (sizeof (wchar_t) > 2 && wc > 0xffff) { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'U'; # else s[1] = 'W'; # endif s[2] = hex[(wc & 0xf0000000U) >> 28]; s[3] = hex[(wc & 0xf000000U) >> 24]; s[4] = hex[(wc & 0xf00000U) >> 20]; s[5] = hex[(wc & 0xf0000U) >> 16]; s[6] = hex[(wc & 0xf000U) >> 12]; s[7] = hex[(wc & 0xf00U) >> 8]; s[8] = hex[(wc & 0xf0U) >> 4]; s[9] = hex[wc & 0xfU]; return 10; } else { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'u'; # else s[1] = 'w'; # endif s[2] = hex[(wc & 0xf000U) >> 12]; s[3] = hex[(wc & 0xf00U) >> 8]; s[4] = hex[(wc & 0xf0U) >> 4]; s[5] = hex[wc & 0xfU]; return 6; } } # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t static size_t local_wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { size_t count = wcrtomb (s, wc, ps); if (count == (size_t)(-1)) count = wctomb_fallback (s, wc); return count; } # else static int local_wctomb (char *s, wchar_t wc) { int count = wctomb (s, wc); if (count < 0) count = wctomb_fallback (s, wc); return count; } # define local_wcrtomb(S, WC, PS) local_wctomb ((S), (WC)) # endif # else # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t # define local_wcrtomb(S, WC, PS) wcrtomb ((S), (WC), (PS)) # else # define local_wcrtomb(S, WC, PS) wctomb ((S), (WC)) # endif # endif #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m<n, then q:=0 and r:=a. If m>=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. Normalise [q[m-1],...,q[0]], yields q. If m>=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize. Shift a and b left by s bits, copying them. r:=a. r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m<n: trivial case. q=0, r := copy of a. */ r_ptr = roomptr; r_len = a_len; memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); q_ptr = roomptr + a_len; q_len = 0; } else if (b_len == 1) { /* n=1: single precision division. beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ { mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; mp_twolimb_t c3 = /* b[n-2] * q* */ (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; /* While c2 < c3, increase c2 and decrease c3. Consider c3-c2. While it is > 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the digits of a, followed by 1 byte for the terminating NUL. */ char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) { tmp_length = MB_CUR_MAX; # if ENABLE_WCHAR_FALLBACK if (tmp_length < (sizeof (wchar_t) > 2 ? 10 : 6)) tmp_length = (sizeof (wchar_t) > 2 ? 10 : 6); # endif } else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; /* Frees the memory allocated by this function. Preserves errno. */ #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION_ELSE(needed, oom_statement) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ oom_statement \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ oom_statement \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } #define ENSURE_ALLOCATION(needed) \ ENSURE_ALLOCATION_ELSE((needed), goto out_of_memory; ) for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL) || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } if (precision < (unsigned int) count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if ENABLE_WCHAR_FALLBACK && HAVE_WINT_T && !WIDE_CHAR_VERSION else if (dp->conversion == 'c' && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR) { /* Implement the 'lc' directive ourselves, in order to provide the fallback that avoids EILSEQ. */ int flags = dp->flags; int has_width; size_t width; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } /* %lc in vasnprintf. See the specification of fprintf. */ { wchar_t arg = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T tmpsrc[64]; /* Assume MB_CUR_MAX <= 64. */ DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; # if DCHAR_IS_TCHAR if (has_width) # endif { /* Count the number of bytes. */ characters = 0; if (arg != 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count < 0) /* Inconsistency. */ abort (); characters = count; } } # if DCHAR_IS_TCHAR else { /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ if (characters > 0) /* implies arg != 0 */ { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpsrc, cbuf, count); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_width) { /* We know the number of bytes in advance. */ ENSURE_ALLOCATION (xsum (length, characters)); if (characters > 0) /* implies arg != 0 */ { int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (result + length, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); length += count; } } else { if (arg != 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; } } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; #endif } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = *mp++; while (--n > 0); } } } switch (type) { case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: #if defined _WIN32 && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; #else *fbp++ = 'l'; #endif FALLTHROUGH; case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if ((HAVE_SNPRINTF_RETVAL_C99 && HAVE_SNPRINTF_TRUNCATION_C99) \ || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ && !defined __UCLIBC__) \ || (defined __APPLE__ && defined __MACH__) \ || defined __ANDROID__ \ || (defined _WIN32 && ! defined __CYGWIN__)) /* On systems where we know that snprintf's return value conforms to ISO C 99 (HAVE_SNPRINTF_RETVAL_C99) and that snprintf always produces NUL-terminated strings (HAVE_SNPRINTF_TRUNCATION_C99), it is possible to avoid using %n. And it is desirable to do so, because more and more platforms no longer support %n, for "security reasons". In particular, the following platforms: - On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2). - On Mac OS X 10.13 or newer, the use of %n in format strings in writable memory by default crashes the program. - On Android, starting on 2018-03-07, the use of %n in format strings produces a fatal error (see <https://android.googlesource.com/platform/bionic/+/41398d03b7e8e0dfb951660ae713e682e9fc0336>). On these platforms, HAVE_SNPRINTF_RETVAL_C99 and HAVE_SNPRINTF_TRUNCATION_C99 are 1. We have listed them explicitly in the condition above, in case of cross- compilation (just to be sure). */ /* On native Windows systems (such as mingw), we can avoid using %n because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-printf-count-output> So we should avoid %n in this situation. */ fbp[1] = '\0'; # else /* AIX <= 5.1, HP-UX, IRIX, OSF/1, Solaris <= 9, BeOS */ fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if ((unsigned int) count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Use the errno that it has set, if any. */ if (errno == 0) { if (dp->conversion == 'c' || dp->conversion == 's') errno = EILSEQ; else errno = EINVAL; } if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; #endif out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF ���������������������������������������������������������������������gnulib-20210822~d383792/lib/vasnprintf.h������������������������������������������������������������0000664�0000000�0000000�00000005031�14110572173�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2007-2021 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/>. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get size_t. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ #if REPLACE_VASNPRINTF # define asnprintf rpl_asnprintf # define vasnprintf rpl_vasnprintf #endif extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vasprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000002534�14110572173�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2021 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/>. */ #include <config.h> /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include <stdio.h> #endif #include <errno.h> #include <limits.h> #include <stdlib.h> #include "vasnprintf.h" int vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; /* Return the number of resulting bytes, excluding the trailing NUL. */ return length; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vdprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000002705�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a file descriptor. Copyright (C) 2009-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "full-write.h" #include "vasnprintf.h" int vdprintf (int fd, const char *format, va_list args) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (full_write (fd, output, len) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } �����������������������������������������������������������gnulib-20210822~d383792/lib/verify.h����������������������������������������������������������������0000664�0000000�0000000�00000030533�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2021 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, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as per C2x. This is supported by GCC 9.1+. Support compilers claiming conformance to the relevant standard, and also support GCC when not pedantic. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #ifndef __cplusplus # if (201112L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 4 <= __clang_major__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif # if (202000L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE__STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template <int w> struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _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; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time. This macro requires three or more arguments but uses at most the first two, so that the _Static_assert macro optionally defined below supports both the C11 two-argument syntax and the C2x one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #if 200410 <= __cpp_static_assert # define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) #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)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _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(...) \ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # endif # if __cpp_static_assert < 201411 && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ #if 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) #else # 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 #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. verify (R) acts like static_assert (R) except that it is portable to C11/C++14 and earlier, it can issue better diagnostics, and its name is shorter and may be more convenient. */ #ifdef __PGI /* PGI barfs if R is long. */ # define verify(R) _GL_VERIFY (R, "verify (...)", -) #else # define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif /* Assume that R always holds. Behavior is undefined if R is false, fails to evaluate, or has side effects. 'assume (R)' is a directive from the programmer telling the compiler that R is true so the compiler needn't generate code to test R. This is why 'assume' is in verify.h: it's related to static checking (in this case, static checking done by the programmer), not dynamic checking. 'assume (R)' can affect compilation of all the code, not just code that happens to be executed after the assume (R) is "executed". For example, if the code mistakenly does 'assert (R); assume (R);' the compiler is entitled to optimize away the 'assert (R)'. Although assuming R can help a compiler generate better code or diagnostics, performance can suffer if R uses hard-to-optimize features such as function calls not inlined by the compiler. Avoid Clang's __builtin_assume, as it breaks GNU Emacs master as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see <https://bugs.gnu.org/43152#71>. It's not known whether this breakage is a Clang bug or an Emacs bug; play it safe for now. */ #if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ # define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/verror.c����������������������������������������������������������������0000664�0000000�0000000�00000005161�14110572173�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* va_list error handler for noninteractive utilities Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> /* Specification. */ #include "verror.h" #include <errno.h> #include <stdarg.h> #include <stdlib.h> #include "error.h" #include "xvasprintf.h" #if ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifndef _ # define _(String) String #endif /* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. Use the globals error_print_progname and error_message_count similarly to error(). */ void verror (int status, int errnum, const char *format, va_list args) { verror_at_line (status, errnum, NULL, 0, format, args); } /* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. If FNAME is not NULL, prepend the message with "FNAME:LINENO:". Use the globals error_print_progname, error_message_count, and error_one_per_line similarly to error_at_line(). */ void verror_at_line (int status, int errnum, const char *file, unsigned int line_number, const char *format, va_list args) { char *message = xvasprintf (format, args); if (message) { /* Until https://sourceware.org/bugzilla/show_bug.cgi?id=2997 is fixed, glibc violates GNU Coding Standards when the file argument to error_at_line is NULL. */ if (file) error_at_line (status, errnum, file, line_number, "%s", message); else error (status, errnum, "%s", message); } else { /* EOVERFLOW, EINVAL, and EILSEQ from xvasprintf are signs of serious programmer errors. */ error (0, errno, _("unable to display error message")); abort (); } free (message); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/verror.h����������������������������������������������������������������0000664�0000000�0000000�00000004076�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for va_list error-reporting function Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 _VERROR_H #define _VERROR_H 1 #include <stdarg.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. Use the globals error_print_progname and error_message_count similarly to error(). */ extern void verror (int __status, int __errnum, const char *__format, va_list __args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); /* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. If FNAME is not NULL, prepend the message with "FNAME:LINENO:". Use the globals error_print_progname, error_message_count, and error_one_per_line similarly to error_at_line(). */ extern void verror_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, va_list __args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 0)); #ifdef __cplusplus } #endif #endif /* verror.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/version-etc-fsf.c�������������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable with FSF copyright information, for version-etc. Copyright (C) 1999-2006, 2009-2021 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "version-etc.h" /* Default copyright goes to the FSF. */ const char version_etc_copyright[] = /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ "Copyright %s %d Free Software Foundation, Inc."; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/version-etc.c�����������������������������������������������������������0000664�0000000�0000000�00000022305�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999-2021 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 Jim Meyering. */ #include <config.h> /* Specification. */ #include "version-etc.h" #include <stdarg.h> #include <stdio.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include "gettext.h" #define _(msgid) gettext (msgid) /* If you use AM_INIT_AUTOMAKE's no-define option, PACKAGE is not defined. Use PACKAGE_TARNAME instead. */ #if ! defined PACKAGE && defined PACKAGE_TARNAME # define PACKAGE PACKAGE_TARNAME #endif enum { COPYRIGHT_YEAR = 2021 }; /* The three functions below display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names. */ /* Display the --version information the standard way. Author names are given in the array AUTHORS. N_AUTHORS is the number of elements in the array. */ void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors) { if (command_name) fprintf (stream, "%s (%s) %s\n", command_name, package, version); else fprintf (stream, "%s %s\n", package, version); #ifdef PACKAGE_PACKAGER # ifdef PACKAGE_PACKAGER_VERSION fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_VERSION); # else fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER); # endif #endif /* TRANSLATORS: Translate "(C)" to the copyright symbol (C-in-a-circle), if this symbol is available in the user's locale. Otherwise, do not translate "(C)"; leave it as-is. */ fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); fputs ("\n", stream); /* TRANSLATORS: The %s placeholder is the web address of the GPL license. */ fprintf (stream, _("\ License GPLv3+: GNU GPL version 3 or later <%s>.\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law.\n\ "), "https://gnu.org/licenses/gpl.html"); fputs ("\n", stream); switch (n_authors) { case 0: /* No authors are given. The caller should output authorship info after calling this function. */ break; case 1: /* TRANSLATORS: %s denotes an author name. */ fprintf (stream, _("Written by %s.\n"), authors[0]); break; case 2: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]); break; case 3: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s, %s, and %s.\n"), authors[0], authors[1], authors[2]); break; case 4: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3]); break; case 5: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4]); break; case 6: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5]); break; case 7: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6]); break; case 8: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7]); break; case 9: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; default: /* 10 or more authors. Use an abbreviation, since the human reader will probably not want to read the entire list anyway. */ /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; } } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated array AUTHORS. */ void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors) { size_t n_authors; for (n_authors = 0; authors[n_authors]; n_authors++) ; version_etc_arn (stream, command_name, package, version, authors, n_authors); } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated va_list AUTHORS. */ void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors) { size_t n_authors; const char *authtab[10]; for (n_authors = 0; n_authors < 10 && (authtab[n_authors] = va_arg (authors, const char *)) != NULL; n_authors++) ; version_etc_arn (stream, command_name, package, version, authtab, n_authors); } /* Display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The authors names are passed as separate arguments, with an additional NULL argument at the end. */ void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ...*/ ...) { va_list authors; va_start (authors, version); version_etc_va (stream, command_name, package, version, authors); va_end (authors); } void emit_bug_reporting_address (void) { fputs ("\n", stdout); /* TRANSLATORS: The placeholder indicates the bug-reporting address for this package. Please add _another line_ saying "Report translation bugs to <...>\n" with the address for translation bugs (typically your translation team's web or email address). */ printf (_("Report bugs to: %s\n"), PACKAGE_BUGREPORT); #ifdef PACKAGE_PACKAGER_BUG_REPORTS printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_BUG_REPORTS); #endif #ifdef PACKAGE_URL printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); #else printf (_("%s home page: <%s>\n"), PACKAGE_NAME, "https://www.gnu.org/software/" PACKAGE "/"); #endif printf (_("General help using GNU software: <%s>\n"), "https://www.gnu.org/gethelp/"); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/version-etc.h�����������������������������������������������������������0000664�0000000�0000000�00000005227�14110572173�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999, 2003, 2005, 2009-2021 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 Jim Meyering. */ #ifndef VERSION_ETC_H # define VERSION_ETC_H 1 # include <stdarg.h> # include <stdio.h> extern const char version_etc_copyright[]; /* The three functions below display the --version information in the standard way: command and package names, package version, followed by a short GPLv3+ notice and a list of up to 10 author names. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names: */ /* N_AUTHORS names are supplied in array AUTHORS. */ extern void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors); /* Names are passed in the NULL-terminated array AUTHORS. */ extern void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors); /* Names are passed in the NULL-terminated va_list. */ extern void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors); /* Names are passed as separate arguments, with an additional NULL argument at the end. */ extern void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ..., NULL */ ...) _GL_ATTRIBUTE_SENTINEL ((0)); /* Display the usual "Report bugs to" stanza. */ extern void emit_bug_reporting_address (void); #endif /* VERSION_ETC_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vfprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000003172�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "fseterr.h" #include "vasnprintf.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int vfprintf (FILE *fp, const char *format, va_list args) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vla.h�������������������������������������������������������������������0000664�0000000�0000000�00000004510�14110572173�0016000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vla.h - variable length arrays Copyright 2014-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* The VLA_ELEMS macro does not allocate variable-length arrays (VLAs), so it does not have the security or performance issues commonly associated with VLAs. VLA_ELEMS is for exploiting a C11 feature where a function can start like this: double scan_array (int n, double v[static n]) to require a caller to pass a vector V with at least N elements; this allows better static checking and performance in some cases. In C11 this feature means that V is a VLA, so the feature is supported only if __STDC_NO_VLA__ is defined, and for compatibility to platforms that do not support VLAs, VLA_ELEMS (n) expands to nothing when __STDC_NO_VLA__ is not defined. */ /* A function's argument must point to an array with at least N elements. Example: 'int main (int argc, char *argv[VLA_ELEMS (argc)]);'. */ #ifdef __STDC_NO_VLA__ # define VLA_ELEMS(n) #else # define VLA_ELEMS(n) static n #endif /* Although C99 requires support for variable-length arrays (VLAs), some C compilers never supported VLAs and VLAs are optional in C11. VLAs are controversial because their allocation may be unintended or awkward to support, and large VLAs might cause security or performance problems. GCC can diagnose the use of VLAs via the -Wvla and -Wvla-larger-than warnings options, and defining the macro GNULIB_NO_VLA disables the allocation of VLAs in Gnulib code. The VLA_ELEMS macro is unaffected by GNULIB_NO_VLA, since it does not allocate VLAs. Programs that use VLA_ELEMS should be compiled with 'gcc -Wvla-larger-than' instead of with 'gcc -Wvla'. */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vma-iter.c��������������������������������������������������������������0000664�0000000�0000000�00000141641�14110572173�0016744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iteration over virtual memory areas. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011-2017. This 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> /* On Solaris in 32-bit mode, when gnulib module 'largefile' is in use, prevent a compilation error "Cannot use procfs in the large file compilation environment" On Android, when targeting Android 4.4 or older with a GCC toolchain, prevent a compilation error "error: call to 'mmap' declared with attribute error: mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21. Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang." The files that we access in this compilation unit are less than 2 GB large. */ #if defined __sun || defined __ANDROID__ # undef _FILE_OFFSET_BITS #endif /* Specification. */ #include "vma-iter.h" #include <errno.h> /* errno */ #include <stdlib.h> /* size_t */ #include <fcntl.h> /* open, O_RDONLY */ #include <unistd.h> /* getpagesize, lseek, read, close, getpid */ #if defined __linux__ || defined __ANDROID__ # include <limits.h> /* PATH_MAX */ #endif #if defined __linux__ || defined __ANDROID__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __minix /* || defined __CYGWIN__ */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ #endif #if defined __minix # include <string.h> /* memcpy */ #endif #if defined __FreeBSD__ || defined __FreeBSD_kernel__ /* FreeBSD, GNU/kFreeBSD */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ # include <sys/user.h> /* struct kinfo_vmentry */ # include <sys/sysctl.h> /* sysctl */ #endif #if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ # include <sys/sysctl.h> /* sysctl, struct kinfo_vmentry */ #endif #if defined __sgi || defined __osf__ /* IRIX, OSF/1 */ # include <string.h> /* memcpy */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ # include <sys/procfs.h> /* PIOC*, prmap_t */ #endif #if defined __sun /* Solaris */ # include <string.h> /* memcpy */ # include <sys/types.h> # include <sys/mman.h> /* mmap, munmap */ /* Try to use the newer ("structured") /proc filesystem API, if supported. */ # define _STRUCTURED_PROC 1 # include <sys/procfs.h> /* prmap_t, optionally PIOC* */ #endif #if HAVE_PSTAT_GETPROCVM /* HP-UX */ # include <sys/pstat.h> /* pstat_getprocvm */ #endif #if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # include <mach/mach.h> #endif #if defined __GNU__ /* GNU/Hurd */ # include <mach/mach.h> #endif #if defined _WIN32 || defined __CYGWIN__ /* Windows */ # include <windows.h> #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS, Haiku */ # include <OS.h> #endif #if HAVE_MQUERY /* OpenBSD */ # include <sys/types.h> # include <sys/mman.h> /* mquery */ #endif /* Note: On AIX, there is a /proc/$pic/map file, that contains records of type prmap_t, defined in <sys/procfs.h>. But it lists only the virtual memory areas that are connected to a file, not the anonymous ones. */ /* Support for reading text files in the /proc file system. */ #if defined __linux__ || defined __ANDROID__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __minix /* || defined __CYGWIN__ */ /* Buffered read-only streams. We cannot use <stdio.h> here, because fopen() calls malloc(), and a malloc() call may call mmap() and thus pre-allocate available memory. Also, we cannot use multiple read() calls, because if the buffer size is smaller than the file's contents: - On NetBSD, the second read() call would return 0, thus making the file appear truncated. - On DragonFly BSD, the first read() call would fail with errno = EFBIG. - On all platforms, if some other thread is doing memory allocations or deallocations between two read() calls, there is a high risk that the result of these two read() calls don't fit together, and as a consequence we will parse garbage and either omit some VMAs or return VMAs with nonsensical addresses. So use mmap(), and ignore the resulting VMA. */ # if defined __linux__ || defined __ANDROID__ /* On Linux, if the file does not entirely fit into the buffer, the read() function stops before the line that would come out truncated. The maximum size of such a line is 73 + PATH_MAX bytes. To be sure that we have read everything, we must verify that at least that many bytes are left when read() returned. */ # define MIN_LEFTOVER (73 + PATH_MAX) # else # define MIN_LEFTOVER 1 # endif # ifdef TEST /* During testing, we want to run into the hairy cases. */ # define STACK_ALLOCATED_BUFFER_SIZE 32 # else # if MIN_LEFTOVER < 1024 # define STACK_ALLOCATED_BUFFER_SIZE 1024 # else /* There is no point in using a stack-allocated buffer if it is too small anyway. */ # define STACK_ALLOCATED_BUFFER_SIZE 1 # endif # endif struct rofile { size_t position; size_t filled; int eof_seen; /* These fields deal with allocation of the buffer. */ char *buffer; char *auxmap; size_t auxmap_length; unsigned long auxmap_start; unsigned long auxmap_end; char stack_allocated_buffer[STACK_ALLOCATED_BUFFER_SIZE]; }; /* Open a read-only file stream. */ static int rof_open (struct rofile *rof, const char *filename) { int fd; unsigned long pagesize; size_t size; fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd < 0) return -1; rof->position = 0; rof->eof_seen = 0; /* Try the static buffer first. */ pagesize = 0; rof->buffer = rof->stack_allocated_buffer; size = sizeof (rof->stack_allocated_buffer); rof->auxmap = NULL; rof->auxmap_start = 0; rof->auxmap_end = 0; for (;;) { /* Attempt to read the contents in a single system call. */ if (size > MIN_LEFTOVER) { int n = read (fd, rof->buffer, size); if (n < 0 && errno == EINTR) goto retry; # if defined __DragonFly__ if (!(n < 0 && errno == EFBIG)) # endif { if (n <= 0) /* Empty file. */ goto fail1; if (n + MIN_LEFTOVER <= size) { /* The buffer was sufficiently large. */ rof->filled = n; # if defined __linux__ || defined __ANDROID__ /* On Linux, the read() call may stop even if the buffer was large enough. We need the equivalent of full_read(). */ for (;;) { n = read (fd, rof->buffer + rof->filled, size - rof->filled); if (n < 0 && errno == EINTR) goto retry; if (n < 0) /* Some error. */ goto fail1; if (n + MIN_LEFTOVER > size - rof->filled) /* Allocate a larger buffer. */ break; if (n == 0) { /* Reached the end of file. */ close (fd); return 0; } rof->filled += n; } # else close (fd); return 0; # endif } } } /* Allocate a larger buffer. */ if (pagesize == 0) { pagesize = getpagesize (); size = pagesize; while (size <= MIN_LEFTOVER) size = 2 * size; } else { size = 2 * size; if (size == 0) /* Wraparound. */ goto fail1; if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); } rof->auxmap = (void *) mmap ((void *) 0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (rof->auxmap == (void *) -1) { close (fd); return -1; } rof->auxmap_length = size; rof->auxmap_start = (unsigned long) rof->auxmap; rof->auxmap_end = rof->auxmap_start + size; rof->buffer = (char *) rof->auxmap; retry: /* Restart. */ if (lseek (fd, 0, SEEK_SET) < 0) { close (fd); fd = open (filename, O_RDONLY | O_CLOEXEC); if (fd < 0) goto fail2; } } fail1: close (fd); fail2: if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); return -1; } /* Return the next byte from a read-only file stream without consuming it, or -1 at EOF. */ static int rof_peekchar (struct rofile *rof) { if (rof->position == rof->filled) { rof->eof_seen = 1; return -1; } return (unsigned char) rof->buffer[rof->position]; } /* Return the next byte from a read-only file stream, or -1 at EOF. */ static int rof_getchar (struct rofile *rof) { int c = rof_peekchar (rof); if (c >= 0) rof->position++; return c; } /* Parse an unsigned hexadecimal number from a read-only file stream. */ static int rof_scanf_lx (struct rofile *rof, unsigned long *valuep) { unsigned long value = 0; unsigned int numdigits = 0; for (;;) { int c = rof_peekchar (rof); if (c >= '0' && c <= '9') value = (value << 4) + (c - '0'); else if (c >= 'A' && c <= 'F') value = (value << 4) + (c - 'A' + 10); else if (c >= 'a' && c <= 'f') value = (value << 4) + (c - 'a' + 10); else break; rof_getchar (rof); numdigits++; } if (numdigits == 0) return -1; *valuep = value; return 0; } /* Close a read-only file stream. */ static void rof_close (struct rofile *rof) { if (rof->auxmap != NULL) munmap (rof->auxmap, rof->auxmap_length); } #endif /* Support for reading the info from a text file in the /proc file system. */ #if defined __linux__ || defined __ANDROID__ || (defined __FreeBSD_kernel__ && !defined __FreeBSD__) /* || defined __CYGWIN__ */ /* GNU/kFreeBSD mounts /proc as linprocfs, which looks like a Linux /proc file system. */ static int vma_iterate_proc (vma_iterate_callback_fn callback, void *data) { struct rofile rof; /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, "/proc/self/maps") >= 0) { unsigned long auxmap_start = rof.auxmap_start; unsigned long auxmap_end = rof.auxmap_end; for (;;) { unsigned long start, end; unsigned int flags; int c; /* Parse one line. First start and end. */ if (!(rof_scanf_lx (&rof, &start) >= 0 && rof_getchar (&rof) == '-' && rof_scanf_lx (&rof, &end) >= 0)) break; /* Then the flags. */ do c = rof_getchar (&rof); while (c == ' '); flags = 0; if (c == 'r') flags |= VMA_PROT_READ; c = rof_getchar (&rof); if (c == 'w') flags |= VMA_PROT_WRITE; c = rof_getchar (&rof); if (c == 'x') flags |= VMA_PROT_EXECUTE; while (c = rof_getchar (&rof), c != -1 && c != '\n') ; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } rof_close (&rof); return 0; } return -1; } #elif defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ static int vma_iterate_proc (vma_iterate_callback_fn callback, void *data) { struct rofile rof; /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, "/proc/curproc/map") >= 0) { unsigned long auxmap_start = rof.auxmap_start; unsigned long auxmap_end = rof.auxmap_end; for (;;) { unsigned long start, end; unsigned int flags; int c; /* Parse one line. First start. */ if (!(rof_getchar (&rof) == '0' && rof_getchar (&rof) == 'x' && rof_scanf_lx (&rof, &start) >= 0)) break; while (c = rof_peekchar (&rof), c == ' ' || c == '\t') rof_getchar (&rof); /* Then end. */ if (!(rof_getchar (&rof) == '0' && rof_getchar (&rof) == 'x' && rof_scanf_lx (&rof, &end) >= 0)) break; # if defined __FreeBSD__ || defined __DragonFly__ /* Then the resident pages count. */ do c = rof_getchar (&rof); while (c == ' '); do c = rof_getchar (&rof); while (c != -1 && c != '\n' && c != ' '); /* Then the private resident pages count. */ do c = rof_getchar (&rof); while (c == ' '); do c = rof_getchar (&rof); while (c != -1 && c != '\n' && c != ' '); /* Then some kernel address. */ do c = rof_getchar (&rof); while (c == ' '); do c = rof_getchar (&rof); while (c != -1 && c != '\n' && c != ' '); # endif /* Then the flags. */ do c = rof_getchar (&rof); while (c == ' '); flags = 0; if (c == 'r') flags |= VMA_PROT_READ; c = rof_getchar (&rof); if (c == 'w') flags |= VMA_PROT_WRITE; c = rof_getchar (&rof); if (c == 'x') flags |= VMA_PROT_EXECUTE; while (c = rof_getchar (&rof), c != -1 && c != '\n') ; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } rof_close (&rof); return 0; } return -1; } #elif defined __minix static int vma_iterate_proc (vma_iterate_callback_fn callback, void *data) { char fnamebuf[6+10+4+1]; char *fname; struct rofile rof; /* Construct fname = sprintf (fnamebuf+i, "/proc/%u/map", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - (4 + 1); memcpy (fname, "/map", 4 + 1); { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, fname) >= 0) { unsigned long auxmap_start = rof.auxmap_start; unsigned long auxmap_end = rof.auxmap_end; for (;;) { unsigned long start, end; unsigned int flags; int c; /* Parse one line. First start and end. */ if (!(rof_scanf_lx (&rof, &start) >= 0 && rof_getchar (&rof) == '-' && rof_scanf_lx (&rof, &end) >= 0)) break; /* Then the flags. */ do c = rof_getchar (&rof); while (c == ' '); flags = 0; if (c == 'r') flags |= VMA_PROT_READ; c = rof_getchar (&rof); if (c == 'w') flags |= VMA_PROT_WRITE; c = rof_getchar (&rof); if (c == 'x') flags |= VMA_PROT_EXECUTE; while (c = rof_getchar (&rof), c != -1 && c != '\n') ; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } rof_close (&rof); return 0; } return -1; } #else static inline int vma_iterate_proc (vma_iterate_callback_fn callback, void *data) { return -1; } #endif /* Support for reading the info from the BSD sysctl() system call. */ #if (defined __FreeBSD__ || defined __FreeBSD_kernel__) && defined KERN_PROC_VMMAP /* FreeBSD >= 7.1 */ static int vma_iterate_bsd (vma_iterate_callback_fn callback, void *data) { /* Documentation: https://www.freebsd.org/cgi/man.cgi?sysctl(3) */ int info_path[] = { CTL_KERN, KERN_PROC, KERN_PROC_VMMAP, getpid () }; size_t len; size_t pagesize; size_t memneed; void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; char *mem; char *p; char *p_end; len = 0; if (sysctl (info_path, 4, NULL, &len, NULL, 0) < 0) return -1; /* Allow for small variations over time. In a multithreaded program new VMAs can be allocated at any moment. */ len = 2 * len + 200; /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ pagesize = getpagesize (); memneed = len; memneed = ((memneed - 1) / pagesize + 1) * pagesize; auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (auxmap == (void *) -1) return -1; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; mem = (char *) auxmap; if (sysctl (info_path, 4, mem, &len, NULL, 0) < 0) { munmap (auxmap, memneed); return -1; } p = mem; p_end = mem + len; while (p < p_end) { struct kinfo_vmentry *kve = (struct kinfo_vmentry *) p; unsigned long start = kve->kve_start; unsigned long end = kve->kve_end; unsigned int flags = 0; if (kve->kve_protection & KVME_PROT_READ) flags |= VMA_PROT_READ; if (kve->kve_protection & KVME_PROT_WRITE) flags |= VMA_PROT_WRITE; if (kve->kve_protection & KVME_PROT_EXEC) flags |= VMA_PROT_EXECUTE; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } p += kve->kve_structsize; } munmap (auxmap, memneed); return 0; } #elif defined __NetBSD__ && defined VM_PROC_MAP /* NetBSD >= 8.0 */ static int vma_iterate_bsd (vma_iterate_callback_fn callback, void *data) { /* Documentation: https://man.netbsd.org/man/sysctl+7 */ unsigned int entry_size = /* If we wanted to have the path of each entry, we would need sizeof (struct kinfo_vmentry). But we need only the non-string parts of each entry. */ offsetof (struct kinfo_vmentry, kve_path); int info_path[] = { CTL_VM, VM_PROC, VM_PROC_MAP, getpid (), entry_size }; size_t len; size_t pagesize; size_t memneed; void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; char *mem; char *p; char *p_end; len = 0; if (sysctl (info_path, 5, NULL, &len, NULL, 0) < 0) return -1; /* Allow for small variations over time. In a multithreaded program new VMAs can be allocated at any moment. */ len = 2 * len + 10 * entry_size; /* But the system call rejects lengths > 1 MB. */ if (len > 0x100000) len = 0x100000; /* And the system call causes a kernel panic if the length is not a multiple of entry_size. */ len = (len / entry_size) * entry_size; /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ pagesize = getpagesize (); memneed = len; memneed = ((memneed - 1) / pagesize + 1) * pagesize; auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (auxmap == (void *) -1) return -1; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; mem = (char *) auxmap; if (sysctl (info_path, 5, mem, &len, NULL, 0) < 0 || len > 0x100000 - entry_size) { /* sysctl failed, or the list of VMAs is possibly truncated. */ munmap (auxmap, memneed); return -1; } p = mem; p_end = mem + len; while (p < p_end) { struct kinfo_vmentry *kve = (struct kinfo_vmentry *) p; unsigned long start = kve->kve_start; unsigned long end = kve->kve_end; unsigned int flags = 0; if (kve->kve_protection & KVME_PROT_READ) flags |= VMA_PROT_READ; if (kve->kve_protection & KVME_PROT_WRITE) flags |= VMA_PROT_WRITE; if (kve->kve_protection & KVME_PROT_EXEC) flags |= VMA_PROT_EXECUTE; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } p += entry_size; } munmap (auxmap, memneed); return 0; } #elif defined __OpenBSD__ && defined KERN_PROC_VMMAP /* OpenBSD >= 5.7 */ static int vma_iterate_bsd (vma_iterate_callback_fn callback, void *data) { /* Documentation: https://man.openbsd.org/sysctl.2 */ int info_path[] = { CTL_KERN, KERN_PROC_VMMAP, getpid () }; size_t len; size_t pagesize; size_t memneed; void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; char *mem; char *p; char *p_end; len = 0; if (sysctl (info_path, 3, NULL, &len, NULL, 0) < 0) return -1; /* Allow for small variations over time. In a multithreaded program new VMAs can be allocated at any moment. */ len = 2 * len + 10 * sizeof (struct kinfo_vmentry); /* But the system call rejects lengths > 64 KB. */ if (len > 0x10000) len = 0x10000; /* And the system call rejects lengths that are not a multiple of sizeof (struct kinfo_vmentry). */ len = (len / sizeof (struct kinfo_vmentry)) * sizeof (struct kinfo_vmentry); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ pagesize = getpagesize (); memneed = len; memneed = ((memneed - 1) / pagesize + 1) * pagesize; auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (auxmap == (void *) -1) return -1; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; mem = (char *) auxmap; if (sysctl (info_path, 3, mem, &len, NULL, 0) < 0 || len > 0x10000 - sizeof (struct kinfo_vmentry)) { /* sysctl failed, or the list of VMAs is possibly truncated. */ munmap (auxmap, memneed); return -1; } p = mem; p_end = mem + len; while (p < p_end) { struct kinfo_vmentry *kve = (struct kinfo_vmentry *) p; unsigned long start = kve->kve_start; unsigned long end = kve->kve_end; unsigned int flags = 0; if (kve->kve_protection & KVE_PROT_READ) flags |= VMA_PROT_READ; if (kve->kve_protection & KVE_PROT_WRITE) flags |= VMA_PROT_WRITE; if (kve->kve_protection & KVE_PROT_EXEC) flags |= VMA_PROT_EXECUTE; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (start != end) if (callback (data, start, end, flags)) break; } p += sizeof (struct kinfo_vmentry); } munmap (auxmap, memneed); return 0; } #else static inline int vma_iterate_bsd (vma_iterate_callback_fn callback, void *data) { return -1; } #endif int vma_iterate (vma_iterate_callback_fn callback, void *data) { #if defined __linux__ || defined __ANDROID__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __minix /* || defined __CYGWIN__ */ # if defined __FreeBSD__ /* On FreeBSD with procfs (but not GNU/kFreeBSD, which uses linprocfs), the function vma_iterate_proc does not return the virtual memory areas that were created by anonymous mmap. See <https://svnweb.freebsd.org/base/head/sys/fs/procfs/procfs_map.c?view=markup> So use vma_iterate_proc only as a fallback. */ int retval = vma_iterate_bsd (callback, data); if (retval == 0) return 0; return vma_iterate_proc (callback, data); # else /* On the other platforms, try the /proc approach first, and the sysctl() as a fallback. */ int retval = vma_iterate_proc (callback, data); if (retval == 0) return 0; return vma_iterate_bsd (callback, data); # endif #elif defined __sgi || defined __osf__ /* IRIX, OSF/1 */ size_t pagesize; char fnamebuf[6+10+1]; char *fname; int fd; int nmaps; size_t memneed; # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS # else int zero_fd; # define map_flags 0 # endif void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; prmap_t* maps; prmap_t* mp; pagesize = getpagesize (); /* Construct fname = sprintf (fnamebuf+i, "/proc/%u", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - 1; *fname = '\0'; { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); fd = open (fname, O_RDONLY | O_CLOEXEC); if (fd < 0) return -1; if (ioctl (fd, PIOCNMAP, &nmaps) < 0) goto fail2; memneed = (nmaps + 10) * sizeof (prmap_t); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ memneed = ((memneed - 1) / pagesize + 1) * pagesize; # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644); if (zero_fd < 0) goto fail2; # endif auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, map_flags | MAP_PRIVATE, zero_fd, 0); # if !HAVE_MAP_ANONYMOUS close (zero_fd); # endif if (auxmap == (void *) -1) goto fail2; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; maps = (prmap_t *) auxmap; if (ioctl (fd, PIOCMAP, maps) < 0) goto fail1; for (mp = maps;;) { unsigned long start, end; unsigned int flags; start = (unsigned long) mp->pr_vaddr; end = start + mp->pr_size; if (start == 0 && end == 0) break; flags = 0; if (mp->pr_mflags & MA_READ) flags |= VMA_PROT_READ; if (mp->pr_mflags & MA_WRITE) flags |= VMA_PROT_WRITE; if (mp->pr_mflags & MA_EXEC) flags |= VMA_PROT_EXECUTE; mp++; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } munmap (auxmap, memneed); close (fd); return 0; fail1: munmap (auxmap, memneed); fail2: close (fd); return -1; #elif defined __sun /* Solaris */ /* Note: Solaris <sys/procfs.h> defines a different type prmap_t with _STRUCTURED_PROC than without! Here's a table of sizeof(prmap_t): 32-bit 64-bit _STRUCTURED_PROC = 0 32 56 _STRUCTURED_PROC = 1 96 104 Therefore, if the include files provide the newer API, prmap_t has the bigger size, and thus you MUST use the newer API. And if the include files provide the older API, prmap_t has the smaller size, and thus you MUST use the older API. */ # if defined PIOCNMAP && defined PIOCMAP /* We must use the older /proc interface. */ size_t pagesize; char fnamebuf[6+10+1]; char *fname; int fd; int nmaps; size_t memneed; # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS # else /* Solaris <= 7 */ int zero_fd; # define map_flags 0 # endif void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; prmap_t* maps; prmap_t* mp; pagesize = getpagesize (); /* Construct fname = sprintf (fnamebuf+i, "/proc/%u", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - 1; *fname = '\0'; { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); fd = open (fname, O_RDONLY | O_CLOEXEC); if (fd < 0) return -1; if (ioctl (fd, PIOCNMAP, &nmaps) < 0) goto fail2; memneed = (nmaps + 10) * sizeof (prmap_t); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ memneed = ((memneed - 1) / pagesize + 1) * pagesize; # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644); if (zero_fd < 0) goto fail2; # endif auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, map_flags | MAP_PRIVATE, zero_fd, 0); # if !HAVE_MAP_ANONYMOUS close (zero_fd); # endif if (auxmap == (void *) -1) goto fail2; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; maps = (prmap_t *) auxmap; if (ioctl (fd, PIOCMAP, maps) < 0) goto fail1; for (mp = maps;;) { unsigned long start, end; unsigned int flags; start = (unsigned long) mp->pr_vaddr; end = start + mp->pr_size; if (start == 0 && end == 0) break; flags = 0; if (mp->pr_mflags & MA_READ) flags |= VMA_PROT_READ; if (mp->pr_mflags & MA_WRITE) flags |= VMA_PROT_WRITE; if (mp->pr_mflags & MA_EXEC) flags |= VMA_PROT_EXECUTE; mp++; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } munmap (auxmap, memneed); close (fd); return 0; fail1: munmap (auxmap, memneed); fail2: close (fd); return -1; # else /* We must use the newer /proc interface. Documentation: https://docs.oracle.com/cd/E23824_01/html/821-1473/proc-4.html The contents of /proc/<pid>/map consists of records of type prmap_t. These are different in 32-bit and 64-bit processes, but here we are fortunately accessing only the current process. */ size_t pagesize; char fnamebuf[6+10+4+1]; char *fname; int fd; int nmaps; size_t memneed; # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS # else /* Solaris <= 7 */ int zero_fd; # define map_flags 0 # endif void *auxmap; unsigned long auxmap_start; unsigned long auxmap_end; prmap_t* maps; prmap_t* maps_end; prmap_t* mp; pagesize = getpagesize (); /* Construct fname = sprintf (fnamebuf+i, "/proc/%u/map", getpid ()). */ fname = fnamebuf + sizeof (fnamebuf) - 1 - 4; memcpy (fname, "/map", 4 + 1); { unsigned int value = getpid (); do *--fname = (value % 10) + '0'; while ((value = value / 10) > 0); } fname -= 6; memcpy (fname, "/proc/", 6); fd = open (fname, O_RDONLY | O_CLOEXEC); if (fd < 0) return -1; { struct stat statbuf; if (fstat (fd, &statbuf) < 0) goto fail2; nmaps = statbuf.st_size / sizeof (prmap_t); } memneed = (nmaps + 10) * sizeof (prmap_t); /* Allocate memneed bytes of memory. We cannot use alloca here, because not much stack space is guaranteed. We also cannot use malloc here, because a malloc() call may call mmap() and thus pre-allocate available memory. So use mmap(), and ignore the resulting VMA. */ memneed = ((memneed - 1) / pagesize + 1) * pagesize; # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644); if (zero_fd < 0) goto fail2; # endif auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE, map_flags | MAP_PRIVATE, zero_fd, 0); # if !HAVE_MAP_ANONYMOUS close (zero_fd); # endif if (auxmap == (void *) -1) goto fail2; auxmap_start = (unsigned long) auxmap; auxmap_end = auxmap_start + memneed; maps = (prmap_t *) auxmap; /* Read up to memneed bytes from fd into maps. */ { size_t remaining = memneed; size_t total_read = 0; char *ptr = (char *) maps; do { size_t nread = read (fd, ptr, remaining); if (nread == (size_t)-1) { if (errno == EINTR) continue; goto fail1; } if (nread == 0) /* EOF */ break; total_read += nread; ptr += nread; remaining -= nread; } while (remaining > 0); nmaps = (memneed - remaining) / sizeof (prmap_t); maps_end = maps + nmaps; } for (mp = maps; mp < maps_end; mp++) { unsigned long start, end; unsigned int flags; start = (unsigned long) mp->pr_vaddr; end = start + mp->pr_size; flags = 0; if (mp->pr_mflags & MA_READ) flags |= VMA_PROT_READ; if (mp->pr_mflags & MA_WRITE) flags |= VMA_PROT_WRITE; if (mp->pr_mflags & MA_EXEC) flags |= VMA_PROT_EXECUTE; if (start <= auxmap_start && auxmap_end - 1 <= end - 1) { /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1] = [start,auxmap_start-1] u [auxmap_end,end-1]. */ if (start < auxmap_start) if (callback (data, start, auxmap_start, flags)) break; if (auxmap_end - 1 < end - 1) if (callback (data, auxmap_end, end, flags)) break; } else { if (callback (data, start, end, flags)) break; } } munmap (auxmap, memneed); close (fd); return 0; fail1: munmap (auxmap, memneed); fail2: close (fd); return -1; # endif #elif HAVE_PSTAT_GETPROCVM /* HP-UX */ unsigned long pagesize = getpagesize (); int i; for (i = 0; ; i++) { struct pst_vm_status info; int ret = pstat_getprocvm (&info, sizeof (info), 0, i); if (ret < 0) return -1; if (ret == 0) break; { unsigned long start = info.pst_vaddr; unsigned long end = start + info.pst_length * pagesize; unsigned int flags = 0; if (info.pst_permission & PS_PROT_READ) flags |= VMA_PROT_READ; if (info.pst_permission & PS_PROT_WRITE) flags |= VMA_PROT_WRITE; if (info.pst_permission & PS_PROT_EXECUTE) flags |= VMA_PROT_EXECUTE; if (callback (data, start, end, flags)) break; } } #elif defined __APPLE__ && defined __MACH__ /* Mac OS X */ task_t task = mach_task_self (); vm_address_t address; vm_size_t size; for (address = VM_MIN_ADDRESS;; address += size) { int more; mach_port_t object_name; unsigned int flags; /* In Mac OS X 10.5, the types vm_address_t, vm_offset_t, vm_size_t have 32 bits in 32-bit processes and 64 bits in 64-bit processes. Whereas mach_vm_address_t and mach_vm_size_t are always 64 bits large. Mac OS X 10.5 has three vm_region like methods: - vm_region. It has arguments that depend on whether the current process is 32-bit or 64-bit. When linking dynamically, this function exists only in 32-bit processes. Therefore we use it only in 32-bit processes. - vm_region_64. It has arguments that depend on whether the current process is 32-bit or 64-bit. It interprets a flavor VM_REGION_BASIC_INFO as VM_REGION_BASIC_INFO_64, which is dangerous since 'struct vm_region_basic_info_64' is larger than 'struct vm_region_basic_info'; therefore let's write VM_REGION_BASIC_INFO_64 explicitly. - mach_vm_region. It has arguments that are 64-bit always. This function is useful when you want to access the VM of a process other than the current process. In 64-bit processes, we could use vm_region_64 or mach_vm_region. I choose vm_region_64 because it uses the same types as vm_region, resulting in less conditional code. */ # if defined __aarch64__ || defined __ppc64__ || defined __x86_64__ struct vm_region_basic_info_64 info; mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT_64; more = (vm_region_64 (task, &address, &size, VM_REGION_BASIC_INFO_64, (vm_region_info_t)&info, &info_count, &object_name) == KERN_SUCCESS); # else struct vm_region_basic_info info; mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT; more = (vm_region (task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)&info, &info_count, &object_name) == KERN_SUCCESS); # endif if (object_name != MACH_PORT_NULL) mach_port_deallocate (mach_task_self (), object_name); if (!more) break; flags = 0; if (info.protection & VM_PROT_READ) flags |= VMA_PROT_READ; if (info.protection & VM_PROT_WRITE) flags |= VMA_PROT_WRITE; if (info.protection & VM_PROT_EXECUTE) flags |= VMA_PROT_EXECUTE; if (callback (data, address, address + size, flags)) break; } return 0; #elif defined __GNU__ /* GNU/Hurd */ /* The Hurd has a /proc/self/maps that looks like the Linux one, but it lacks the VMAs created through anonymous mmap. Therefore use the Mach API. Documentation: https://www.gnu.org/software/hurd/gnumach-doc/Memory-Attributes.html */ task_t task = mach_task_self (); vm_address_t address; vm_size_t size; for (address = 0;; address += size) { vm_prot_t protection; vm_prot_t max_protection; vm_inherit_t inheritance; boolean_t shared; memory_object_name_t object_name; vm_offset_t offset; unsigned int flags; if (!(vm_region (task, &address, &size, &protection, &max_protection, &inheritance, &shared, &object_name, &offset) == KERN_SUCCESS)) break; mach_port_deallocate (task, object_name); flags = 0; if (protection & VM_PROT_READ) flags |= VMA_PROT_READ; if (protection & VM_PROT_WRITE) flags |= VMA_PROT_WRITE; if (protection & VM_PROT_EXECUTE) flags |= VMA_PROT_EXECUTE; if (callback (data, address, address + size, flags)) break; } return 0; #elif defined _WIN32 || defined __CYGWIN__ /* Windows platform. Use the native Windows API. */ MEMORY_BASIC_INFORMATION info; uintptr_t address = 0; while (VirtualQuery ((void*)address, &info, sizeof(info)) == sizeof(info)) { if (info.State != MEM_FREE) /* Ignore areas where info.State has the value MEM_RESERVE or, equivalently, info.Protect has the undocumented value 0. This is needed, so that on Cygwin, areas used by malloc() are distinguished from areas reserved for future malloc(). */ if (info.State != MEM_RESERVE) { uintptr_t start, end; unsigned int flags; start = (uintptr_t)info.BaseAddress; end = start + info.RegionSize; switch (info.Protect & ~(PAGE_GUARD|PAGE_NOCACHE)) { case PAGE_READONLY: flags = VMA_PROT_READ; break; case PAGE_READWRITE: case PAGE_WRITECOPY: flags = VMA_PROT_READ | VMA_PROT_WRITE; break; case PAGE_EXECUTE: flags = VMA_PROT_EXECUTE; break; case PAGE_EXECUTE_READ: flags = VMA_PROT_READ | VMA_PROT_EXECUTE; break; case PAGE_EXECUTE_READWRITE: case PAGE_EXECUTE_WRITECOPY: flags = VMA_PROT_READ | VMA_PROT_WRITE | VMA_PROT_EXECUTE; break; case PAGE_NOACCESS: default: flags = 0; break; } if (callback (data, start, end, flags)) break; } address = (uintptr_t)info.BaseAddress + info.RegionSize; } return 0; #elif defined __BEOS__ || defined __HAIKU__ /* Use the BeOS specific API. */ area_info info; ssize_t cookie; cookie = 0; while (get_next_area_info (0, &cookie, &info) == B_OK) { unsigned long start, end; unsigned int flags; start = (unsigned long) info.address; end = start + info.size; flags = 0; if (info.protection & B_READ_AREA) flags |= VMA_PROT_READ | VMA_PROT_EXECUTE; if (info.protection & B_WRITE_AREA) flags |= VMA_PROT_WRITE; if (callback (data, start, end, flags)) break; } return 0; #elif HAVE_MQUERY /* OpenBSD */ # if defined __OpenBSD__ /* Try sysctl() first. It is more efficient than the mquery() loop below and also provides the flags. */ { int retval = vma_iterate_bsd (callback, data); if (retval == 0) return 0; } # endif { uintptr_t pagesize; uintptr_t address; int /*bool*/ address_known_mapped; pagesize = getpagesize (); /* Avoid calling mquery with a NULL first argument, because this argument value has a specific meaning. We know the NULL page is unmapped. */ address = pagesize; address_known_mapped = 0; for (;;) { /* Test whether the page at address is mapped. */ if (address_known_mapped || mquery ((void *) address, pagesize, 0, MAP_FIXED, -1, 0) == (void *) -1) { /* The page at address is mapped. This is the start of an interval. */ uintptr_t start = address; uintptr_t end; /* Find the end of the interval. */ end = (uintptr_t) mquery ((void *) address, pagesize, 0, 0, -1, 0); if (end == (uintptr_t) (void *) -1) end = 0; /* wrap around */ address = end; /* It's too complicated to find out about the flags. Just pass 0. */ if (callback (data, start, end, 0)) break; if (address < pagesize) /* wrap around? */ break; } /* Here we know that the page at address is unmapped. */ { uintptr_t query_size = pagesize; address += pagesize; /* Query larger and larger blocks, to get through the unmapped address range with few mquery() calls. */ for (;;) { if (2 * query_size > query_size) query_size = 2 * query_size; if (address + query_size - 1 < query_size) /* wrap around? */ { address_known_mapped = 0; break; } if (mquery ((void *) address, query_size, 0, MAP_FIXED, -1, 0) == (void *) -1) { /* Not all the interval [address .. address + query_size - 1] is unmapped. */ address_known_mapped = (query_size == pagesize); break; } /* The interval [address .. address + query_size - 1] is unmapped. */ address += query_size; } /* Reduce the query size again, to determine the precise size of the unmapped interval that starts at address. */ while (query_size > pagesize) { query_size = query_size / 2; if (address + query_size - 1 >= query_size) { if (mquery ((void *) address, query_size, 0, MAP_FIXED, -1, 0) != (void *) -1) { /* The interval [address .. address + query_size - 1] is unmapped. */ address += query_size; address_known_mapped = 0; } else address_known_mapped = (query_size == pagesize); } } /* Here again query_size = pagesize, and either address + pagesize - 1 < pagesize, or mquery ((void *) address, pagesize, 0, MAP_FIXED, -1, 0) fails. So, the unmapped area ends at address. */ } if (address + pagesize - 1 < pagesize) /* wrap around? */ break; } return 0; } #else /* Not implemented. */ return -1; #endif } #ifdef TEST #include <stdio.h> /* Output the VMAs of the current process in a format similar to the Linux /proc/$pid/maps file. */ static int vma_iterate_callback (void *data, uintptr_t start, uintptr_t end, unsigned int flags) { printf ("%08lx-%08lx %c%c%c\n", (unsigned long) start, (unsigned long) end, flags & VMA_PROT_READ ? 'r' : '-', flags & VMA_PROT_WRITE ? 'w' : '-', flags & VMA_PROT_EXECUTE ? 'x' : '-'); return 0; } int main () { vma_iterate (vma_iterate_callback, NULL); /* Let the user interactively look at the /proc file system. */ sleep (10); return 0; } /* * Local Variables: * compile-command: "gcc -ggdb -DTEST -Wall -I.. vma-iter.c" * End: */ #endif /* TEST */ �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vma-iter.h��������������������������������������������������������������0000664�0000000�0000000�00000005453�14110572173�0016751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iteration over virtual memory areas. Copyright (C) 2011-2021 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 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 _VMA_ITER_H #define _VMA_ITER_H #include <stdint.h> #ifdef __cplusplus extern "C" { #endif /* Bit mask for the FLAGS parameter of a vma_iterate callback function. */ #define VMA_PROT_READ (1<<0) #define VMA_PROT_WRITE (1<<1) #define VMA_PROT_EXECUTE (1<<2) typedef int (*vma_iterate_callback_fn) (void *data, uintptr_t start, uintptr_t end, unsigned int flags); /* Iterate over the virtual memory areas of the current process. If such iteration is supported, the callback is called once for every virtual memory area, in ascending order, with the following arguments: - DATA is the same argument as passed to vma_iterate. - START is the address of the first byte in the area, page-aligned. - END is the address of the last byte in the area plus 1, page-aligned. Note that it may be 0 for the last area in the address space. - FLAGS is a combination of the VMA_* bits. If the callback returns 0, the iteration continues. If it returns 1, the iteration terminates prematurely. This function may open file descriptors, but does not call malloc(). Return 0 if all went well, or -1 in case of error. */ extern int vma_iterate (vma_iterate_callback_fn callback, void *data); /* The macro VMA_ITERATE_SUPPORTED indicates that vma_iterate is supported on this platform. Note that even when this macro is defined, vma_iterate() may still fail to find any virtual memory area, for example if /proc is not mounted. */ #if defined __linux__ || defined __ANDROID__ || defined __GNU__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sgi || defined __osf__ || defined __sun || HAVE_PSTAT_GETPROCVM || (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || defined __minix || HAVE_MQUERY # define VMA_ITERATE_SUPPORTED 1 #endif #ifdef __cplusplus } #endif #endif /* _VMA_ITER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000002115�14110572173�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2007, 2009-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <stdarg.h> /* Print formatted output to standard output. Return string length of formatted string. On error, return a negative value. */ int vprintf (const char *format, va_list args) { return vfprintf (stdout, format, args); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vsnprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000003602�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "vasnprintf.h" /* Print formatted output to string STR. Similar to vsprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. */ int vsnprintf (char *str, size_t size, const char *format, va_list args) { char *output; size_t len; size_t lenbuf = size; output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/vsprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000004102�14110572173�0017061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2021 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/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include "vasnprintf.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif /* Print formatted output to string STR. Return string length of formatted string. On error, return a negative value. */ int vsprintf (char *str, const char *format, va_list args) { char *output; size_t len; size_t lenbuf; /* vasnprintf fails with EOVERFLOW when the buffer size argument is larger than INT_MAX (if that fits into a 'size_t' at all). Also note that glibc's iconv fails with E2BIG when we pass a length that is so large that str + lenbuf wraps around, i.e. (uintptr_t) (str + lenbuf) < (uintptr_t) str. Therefore set lenbuf = min (SIZE_MAX, INT_MAX, - (uintptr_t) str - 1). */ lenbuf = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX); if (lenbuf > ~ (uintptr_t) str) lenbuf = ~ (uintptr_t) str; output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (output != str) { /* len is near SIZE_MAX. */ free (output); errno = EOVERFLOW; return -1; } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/w32sock.h���������������������������������������������������������������0000664�0000000�0000000�00000006452�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* w32sock.h --- internal auxiliary functions for Windows socket functions Copyright (C) 2008-2021 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 Paolo Bonzini */ #include <errno.h> /* Get O_RDWR and O_BINARY. */ #include <fcntl.h> /* Get _open_osfhandle(). */ #include <io.h> /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) #define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) static inline void set_winsock_errno (void) { int err = WSAGetLastError (); /* Map some WSAE* errors to the runtime library's error codes. */ switch (err) { case WSA_INVALID_HANDLE: errno = EBADF; break; case WSA_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case WSA_INVALID_PARAMETER: errno = EINVAL; break; case WSAENAMETOOLONG: errno = ENAMETOOLONG; break; case WSAENOTEMPTY: errno = ENOTEMPTY; break; case WSAEWOULDBLOCK: errno = EWOULDBLOCK; break; case WSAEINPROGRESS: errno = EINPROGRESS; break; case WSAEALREADY: errno = EALREADY; break; case WSAENOTSOCK: errno = ENOTSOCK; break; case WSAEDESTADDRREQ: errno = EDESTADDRREQ; break; case WSAEMSGSIZE: errno = EMSGSIZE; break; case WSAEPROTOTYPE: errno = EPROTOTYPE; break; case WSAENOPROTOOPT: errno = ENOPROTOOPT; break; case WSAEPROTONOSUPPORT: errno = EPROTONOSUPPORT; break; case WSAEOPNOTSUPP: errno = EOPNOTSUPP; break; case WSAEAFNOSUPPORT: errno = EAFNOSUPPORT; break; case WSAEADDRINUSE: errno = EADDRINUSE; break; case WSAEADDRNOTAVAIL: errno = EADDRNOTAVAIL; break; case WSAENETDOWN: errno = ENETDOWN; break; case WSAENETUNREACH: errno = ENETUNREACH; break; case WSAENETRESET: errno = ENETRESET; break; case WSAECONNABORTED: errno = ECONNABORTED; break; case WSAECONNRESET: errno = ECONNRESET; break; case WSAENOBUFS: errno = ENOBUFS; break; case WSAEISCONN: errno = EISCONN; break; case WSAENOTCONN: errno = ENOTCONN; break; case WSAETIMEDOUT: errno = ETIMEDOUT; break; case WSAECONNREFUSED: errno = ECONNREFUSED; break; case WSAELOOP: errno = ELOOP; break; case WSAEHOSTUNREACH: errno = EHOSTUNREACH; break; default: errno = (err > 10000 && err < 10025) ? err - 10000 : err; break; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wait-process.c����������������������������������������������������������0000664�0000000�0000000�00000026454�14110572173�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2005-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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> /* Specification. */ #include "wait-process.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include "error.h" #include "fatal-signal.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* The return value of _spawnvp() is really a process handle as returned by CreateProcess(). Therefore we can kill it using TerminateProcess. */ # define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig) #endif /* Type of an entry in the slaves array. The 'used' bit determines whether this entry is currently in use. (If pid_t was an atomic type like sig_atomic_t, we could just set the 'child' field to 0 when unregistering a slave process, and wouldn't need the 'used' field.) The 'used' and 'child' fields are accessed from within the cleanup_slaves() action, therefore we mark them as 'volatile'. */ typedef struct { volatile sig_atomic_t used; volatile pid_t child; } slaves_entry_t; /* The registered slave subprocesses. */ static slaves_entry_t static_slaves[32]; static slaves_entry_t * volatile slaves = static_slaves; static sig_atomic_t volatile slaves_count = 0; static size_t slaves_allocated = SIZEOF (static_slaves); /* The termination signal for slave subprocesses. 2003-10-07: Terminator becomes Governator. */ #ifdef SIGHUP # define TERMINATOR SIGHUP #else # define TERMINATOR SIGTERM #endif /* The cleanup action. It gets called asynchronously. */ static _GL_ASYNC_SAFE void cleanup_slaves (void) { for (;;) { /* Get the last registered slave. */ size_t n = slaves_count; if (n == 0) break; n--; slaves_count = n; /* Skip unused entries in the slaves array. */ if (slaves[n].used) { pid_t slave = slaves[n].child; /* Kill the slave. */ kill (slave, TERMINATOR); } } } /* The cleanup action, taking a signal argument. It gets called asynchronously. */ static _GL_ASYNC_SAFE void cleanup_slaves_action (_GL_UNUSED int sig) { cleanup_slaves (); } /* Register a subprocess as being a slave process. This means that the subprocess will be terminated when its creator receives a catchable fatal signal or exits normally. Registration ends when wait_subprocess() notices that the subprocess has exited. */ void register_slave_subprocess (pid_t child) { static bool cleanup_slaves_registered = false; if (!cleanup_slaves_registered) { atexit (cleanup_slaves); if (at_fatal_signal (cleanup_slaves_action) < 0) xalloc_die (); cleanup_slaves_registered = true; } /* Try to store the new slave in an unused entry of the slaves array. */ { slaves_entry_t *s = slaves; slaves_entry_t *s_end = s + slaves_count; for (; s < s_end; s++) if (!s->used) { /* The two uses of 'volatile' in the slaves_entry_t type above (and ISO C 99 section 5.1.2.3.(5)) ensure that we mark the entry as used only after the child pid has been written to the memory location s->child. */ s->child = child; s->used = 1; return; } } if (slaves_count == slaves_allocated) { /* Extend the slaves array. Note that we cannot use xrealloc(), because then the cleanup_slaves() function could access an already deallocated array. */ slaves_entry_t *old_slaves = slaves; size_t new_slaves_allocated = 2 * slaves_allocated; slaves_entry_t *new_slaves = (slaves_entry_t *) malloc (new_slaves_allocated * sizeof (slaves_entry_t)); if (new_slaves == NULL) { /* xalloc_die() will call exit() which will invoke cleanup_slaves(). Additionally we need to kill child, because it's not yet among the slaves list. */ kill (child, TERMINATOR); xalloc_die (); } memcpy (new_slaves, old_slaves, slaves_allocated * sizeof (slaves_entry_t)); slaves = new_slaves; slaves_allocated = new_slaves_allocated; /* Now we can free the old slaves array. */ if (old_slaves != static_slaves) free (old_slaves); } /* The three uses of 'volatile' in the types above (and ISO C 99 section 5.1.2.3.(5)) ensure that we increment the slaves_count only after the new slave and its 'used' bit have been written to the memory locations that make up slaves[slaves_count]. */ slaves[slaves_count].child = child; slaves[slaves_count].used = 1; slaves_count++; } /* Unregister a child from the list of slave subprocesses. */ static void unregister_slave_subprocess (pid_t child) { /* The easiest way to remove an entry from a list that can be used by an asynchronous signal handler is just to mark it as unused. For this, we rely on sig_atomic_t. */ slaves_entry_t *s = slaves; slaves_entry_t *s_end = s + slaves_count; for (; s < s_end; s++) if (s->used && s->child == child) s->used = 0; } /* Wait for a subprocess to finish. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. */ int wait_subprocess (pid_t child, const char *progname, bool ignore_sigpipe, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp) { #if HAVE_WAITID && defined WNOWAIT && 0 /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD, and on HP-UX 10.20 it just hangs. */ /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is true, and this process sleeps a very long time between the return from waitpid() and the execution of unregister_slave_subprocess(), and meanwhile another process acquires the same PID as child, and then - still before unregister_slave_subprocess() - this process gets a fatal signal, it would kill the other totally unrelated process. */ siginfo_t info; if (termsigp != NULL) *termsigp = 0; for (;;) { if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0)) < 0) { # ifdef EINTR if (errno == EINTR) continue; # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } /* info.si_code is set to one of CLD_EXITED, CLD_KILLED, CLD_DUMPED, CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED. Loop until the program terminates. */ if (info.si_code == CLD_EXITED || info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED) break; } /* The child process has exited or was signalled. */ if (slave_process) { /* Unregister the child from the list of slave subprocesses, so that later, when we exit, we don't kill a totally unrelated process which may have acquired the same pid. */ unregister_slave_subprocess (child); /* Now remove the zombie from the process list. */ for (;;) { if (waitid (P_PID, child, &info, WEXITED) < 0) { # ifdef EINTR if (errno == EINTR) continue; # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } break; } } switch (info.si_code) { case CLD_KILLED: case CLD_DUMPED: if (termsigp != NULL) *termsigp = info.si_status; /* TODO: or info.si_signo? */ # ifdef SIGPIPE if (info.si_status == SIGPIPE && ignore_sigpipe) return 0; # endif if (exit_on_error || (!null_stderr && termsigp == NULL)) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess got fatal signal %d"), progname, info.si_status); return 127; case CLD_EXITED: if (info.si_status == 127) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess failed"), progname); return 127; } return info.si_status; default: abort (); } #else /* waitpid() is just as portable as wait() nowadays. */ int status; if (termsigp != NULL) *termsigp = 0; status = 0; for (;;) { int result = waitpid (child, &status, 0); if (result != child) { # ifdef EINTR if (errno == EINTR) continue; # endif # if 0 /* defined ECHILD */ if (errno == ECHILD) { /* Child process nonexistent?! Assume it terminated successfully. */ status = 0; break; } # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } /* One of WIFSIGNALED (status), WIFEXITED (status), WIFSTOPPED (status) must always be true, since we did not specify WCONTINUED in the waitpid() call. Loop until the program terminates. */ if (!WIFSTOPPED (status)) break; } /* The child process has exited or was signalled. */ if (slave_process) /* Unregister the child from the list of slave subprocesses, so that later, when we exit, we don't kill a totally unrelated process which may have acquired the same pid. */ unregister_slave_subprocess (child); if (WIFSIGNALED (status)) { if (termsigp != NULL) *termsigp = WTERMSIG (status); # ifdef SIGPIPE if (WTERMSIG (status) == SIGPIPE && ignore_sigpipe) return 0; # endif if (exit_on_error || (!null_stderr && termsigp == NULL)) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess got fatal signal %d"), progname, (int) WTERMSIG (status)); return 127; } if (!WIFEXITED (status)) abort (); if (WEXITSTATUS (status) == 127) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess failed"), progname); return 127; } return WEXITSTATUS (status); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wait-process.h����������������������������������������������������������0000664�0000000�0000000�00000005707�14110572173�0017647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2006, 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This 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 _WAIT_PROCESS_H #define _WAIT_PROCESS_H /* Get pid_t. */ #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* Wait for a subprocess to finish. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. Arguments: - child is the pid of the subprocess. - progname is the name of the program executed by the subprocess, used for error messages. - If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE as equivalent to a success. This is suitable for processes whose only purpose is to write to standard output. This flag can be safely set to false when the process' standard output is known to go to DEV_NULL. - If null_stderr is true, the usual error message to stderr will be omitted. This is suitable when the subprocess does not fulfill an important task. - slave_process should be set to true if the process has been launched as a slave process. - If exit_on_error is true, any error will cause the main process to exit with an error status. - If termsigp is not NULL: *termsig will be set to the signal that terminated the subprocess (if supported by the platform: not on native Windows platforms), otherwise 0, and the error message about the signal that terminated the subprocess will be omitted. Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN, otherwise this function will not work. */ extern int wait_subprocess (pid_t child, const char *progname, bool ignore_sigpipe, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp); /* Register a subprocess as being a slave process. This means that the subprocess will be terminated when its creator receives a catchable fatal signal or exits normally. Registration ends when wait_subprocess() notices that the subprocess has exited. */ extern void register_slave_subprocess (pid_t child); #ifdef __cplusplus } #endif #endif /* _WAIT_PROCESS_H */ ���������������������������������������������������������gnulib-20210822~d383792/lib/waitpid.c���������������������������������������������������������������0000664�0000000�0000000�00000002016�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wait for process state change. Copyright (C) 2001-2003, 2005-2021 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/>. */ #include <config.h> /* Specification. */ #include <sys/wait.h> /* Implementation for native Windows systems. */ #include <process.h> /* for _cwait, WAIT_CHILD */ pid_t waitpid (pid_t pid, int *statusp, int options) { return _cwait (statusp, pid, WAIT_CHILD); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/warn-on-use.h�����������������������������������������������������������0000664�0000000�0000000�00000015471�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2021 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 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/>. */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. 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 same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system <stdio.h>: #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if !defined __cplusplus # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_ON_USE (function, msg) # else # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_clang function parameters_and_attributes \ __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wchar.in.h��������������������������������������������������������������0000664�0000000�0000000�00000121504�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. Copyright (C) 2007-2021 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 Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html> * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED \ && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's <wchar.h>. - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and the latter includes <wchar.h>. But here, we have no way to detect whether <wctype.h> is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined by <stddef.h>. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> #endif /* Get free(). */ #include <stdlib.h> /* Include the original <wchar.h> if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # 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. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is large enough and overriding it would cause problems in C++ mode. */ #if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t # if !(defined _AIX || defined _MSC_VER) typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # endif # define GNULIB_defined_mbstate_t 1 # endif #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif /* Need to cast, because on mingw, the return type is 'unsigned short'. */ _GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (btowc); # endif #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctob); # endif #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in the initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsinit); # endif #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrlen); # endif #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif _GL_CXXALIASWARN (mbsnrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcrtomb); # endif #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun) _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsnrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcwidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcmp); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemmove); # endif #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. Return pointer to wide characters after the last written wide character. */ #if @GNULIB_WMEMPCPY@ # if !@HAVE_WMEMPCPY@ _GL_FUNCDECL_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmempcpy # if HAVE_RAW_DECL_WMEMPCPY _GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " "use gnulib module wmempcpy for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemset); # endif #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcslen); # endif #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ # if !@HAVE_WCSNLEN@ _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ # if !@HAVE_WCPCPY@ _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ # if !@HAVE_WCPNCPY@ _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscat); # endif #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncat); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ # if !@HAVE_WCSCASECMP@ _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ # if !@HAVE_WCSNCASECMP@ _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscoll); # endif #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsxfrm); # endif #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else # if !@HAVE_WCSDUP@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIASWARN (wcsdup); #else # if __GNUC__ >= 11 && !defined wcsdup /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif # elif @GNULIB_MDA_WCSDUP@ /* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::wcsdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # if @HAVE_DECL_WCSDUP@ _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@ _GL_CXXALIASWARN (wcsdup); # endif # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *restrict, const wchar_t *restrict), const wchar_t *, (const wchar_t *restrict, const wchar_t *restrict)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *restrict haystack, const wchar_t *restrict needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if @REPLACE_WCSTOK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcstok # define wcstok rpl_wcstok # endif _GL_FUNCDECL_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); _GL_CXXALIAS_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # else # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcstok); # endif #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcswidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsftime); # endif #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcpcpy-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001652�14110572173�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcpcpy (wchar_t *dest, const wchar_t *src) { for (; (*dest = *src) != (wchar_t)'\0'; src++, dest++) ; return dest; } ��������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcpcpy.c����������������������������������������������������������������0000664�0000000�0000000�00000001565�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcpcpy-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcpncpy-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002141�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcpncpy (wchar_t *dest, const wchar_t *src, size_t n) { for (; n > 0 && (*dest = *src) != (wchar_t)'\0'; src++, dest++, n--) ; /* This behavior is rarely useful, but it is here for consistency with wcsncpy. */ for (; n > 0; n--) *dest++ = (wchar_t)'\0'; return dest-1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcpncpy.c���������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcpncpy-impl.h" �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcrtomb.c���������������������������������������������������������������0000664�0000000�0000000�00000004414�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> size_t 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. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } #if !HAVE_WCRTOMB /* IRIX 6.5 */ \ || WCRTOMB_RETVAL_BUG /* Solaris 11.3, MSVC */ \ || WCRTOMB_C_LOCALE_BUG /* Android */ if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else #endif { #if HAVE_WCRTOMB # if WCRTOMB_C_LOCALE_BUG /* Android */ /* Implement consistently with mbrtowc(): through a 1:1 correspondence, as in ISO-8859-1. */ if (wc >= 0 && wc <= 0xff) { *s = (unsigned char) wc; return 1; } else { errno = EILSEQ; return (size_t)(-1); } # else return wcrtomb (s, wc, ps); # endif #else /* IRIX 6.5 */ /* Fallback for platforms that don't have wcrtomb(). Implement on top of wctomb(). This code is not multithread-safe. */ int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscasecmp-impl.h�������������������������������������������������������0000664�0000000�0000000�00000002336�14110572173�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ int wcscasecmp (const wchar_t *s1, const wchar_t *s2) { for (;;) { wchar_t wc1 = towlower (*s1++); wchar_t wc2 = towlower (*s2++); if (wc1 != (wchar_t)'\0' && wc1 == wc2) continue; /* Note that wc1 and wc2 each have at most 31 bits. */ return (int)wc1 - (int)wc2; /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, = 0 if wc1 and wc2 are both '\0'. */ } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000001642�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <wctype.h> #include "wcscasecmp-impl.h" ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscat-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001746�14110572173�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two wide strings. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcscat (wchar_t *dest, const wchar_t *src) { wchar_t *destptr = dest + wcslen (dest); for (; (*destptr = *src) != (wchar_t)'\0'; src++, destptr++) ; return dest; } ��������������������������gnulib-20210822~d383792/lib/wcscat.c����������������������������������������������������������������0000664�0000000�0000000�00000001577�14110572173�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two wide strings. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscat-impl.h" ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcschr-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002035�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcschr (const wchar_t *wcs, wchar_t wc) { for (;; wcs++) { if (*wcs == wc) break; if (*wcs == (wchar_t)'\0') goto notfound; } return (wchar_t *) wcs; notfound: return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcschr.c����������������������������������������������������������������0000664�0000000�0000000�00000001612�14110572173�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcschr-impl.h" ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscmp-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002266�14110572173�0017457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ int wcscmp (const wchar_t *s1, const wchar_t *s2) { for (;;) { wchar_t wc1 = *s1++; wchar_t wc2 = *s2++; if (wc1 != (wchar_t)'\0' && wc1 == wc2) continue; /* Note that wc1 and wc2 each have at most 31 bits. */ return (int)wc1 - (int)wc2; /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, = 0 if wc1 and wc2 are both '\0'. */ } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscmp.c����������������������������������������������������������������0000664�0000000�0000000�00000001573�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscmp-impl.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscoll-impl.h����������������������������������������������������������0000664�0000000�0000000�00000005123�14110572173�0017624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings using the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ int wcscoll (const wchar_t *s1, const wchar_t *s2) { char mbbuf1[1024]; char mbbuf2[1024]; char *mbs1; char *mbs2; { int saved_errno = errno; /* Convert s1 to a multibyte string, trying to avoid malloc(). */ { size_t ret; ret = wcstombs (mbbuf1, s1, sizeof (mbbuf1)); if (ret == (size_t)-1) goto failed1; if (ret < sizeof (mbbuf1)) mbs1 = mbbuf1; else { size_t need = wcstombs (NULL, s1, 0); if (need == (size_t)-1) goto failed1; mbs1 = (char *) malloc (need + 1); if (mbs1 == NULL) goto out_of_memory1; ret = wcstombs (mbs1, s1, need + 1); if (ret != need) abort (); } } /* Convert s2 to a multibyte string, trying to avoid malloc(). */ { size_t ret; ret = wcstombs (mbbuf2, s2, sizeof (mbbuf2)); if (ret == (size_t)-1) goto failed2; if (ret < sizeof (mbbuf2)) mbs2 = mbbuf2; else { size_t need = wcstombs (NULL, s2, 0); if (need == (size_t)-1) goto failed2; mbs2 = (char *) malloc (need + 1); if (mbs2 == NULL) goto out_of_memory2; ret = wcstombs (mbs2, s2, need + 1); if (ret != need) abort (); } } /* No error so far. */ errno = saved_errno; } /* Compare the two multibyte strings. */ { int result = strcoll (mbs1, mbs2); if (mbs1 != mbbuf1) free (mbs1); if (mbs2 != mbbuf2) free (mbs2); return result; } out_of_memory2: if (mbs1 != mbbuf1) free (mbs1); out_of_memory1: errno = ENOMEM; return 0; failed2: if (mbs1 != mbbuf1) free (mbs1); failed1: errno = EILSEQ; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscoll.c���������������������������������������������������������������0000664�0000000�0000000�00000001721�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings using the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "wcscoll-impl.h" �����������������������������������������������gnulib-20210822~d383792/lib/wcscpy-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001714�14110572173�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcscpy (wchar_t *dest, const wchar_t *src) { wchar_t *destptr = dest; for (; (*destptr = *src) != (wchar_t)'\0'; src++, destptr++) ; return dest; } ����������������������������������������������������gnulib-20210822~d383792/lib/wcscpy.c����������������������������������������������������������������0000664�0000000�0000000�00000001565�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscpy-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscspn-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ size_t wcscspn (const wchar_t *wcs, const wchar_t *reject) { /* Optimize two cases. */ if (reject[0] == (wchar_t)'\0') return wcslen (wcs); if (reject[1] == (wchar_t)'\0') { wchar_t wc = reject[0]; const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (*ptr == wc) break; } return ptr - wcs; } /* General case. */ { const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (wcschr (reject, *ptr)) break; } return ptr - wcs; } } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcscspn.c���������������������������������������������������������������0000664�0000000�0000000�00000001634�14110572173�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscspn-impl.h" ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsdup-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002127�14110572173�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcsdup (const wchar_t *s) { size_t n = wcslen (s) + 1; wchar_t *copy = (wchar_t *) malloc (n * sizeof (wchar_t)); if (copy != NULL) return wmemcpy (copy, s, n); else /* The glibc documentation does not say that errno should be set to ENOMEM here. */ return NULL; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsdup.c����������������������������������������������������������������0000664�0000000�0000000�00000001617�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdlib.h> #include "wcsdup-impl.h" �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsftime.c��������������������������������������������������������������0000664�0000000�0000000�00000005105�14110572173�0017033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in wcsftime. Copyright (C) 2017-2021 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdlib.h> #include <string.h> #include <time.h> #undef wcsftime size_t rpl_wcsftime (wchar_t *buf, size_t bufsize, const wchar_t *format, const struct tm *tp) { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); #endif return wcsftime (buf, bufsize, format, tp); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcslen-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0017454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ size_t wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t)'\0'; ptr++) ; return ptr - s; } ������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcslen.c����������������������������������������������������������������0000664�0000000�0000000�00000001610�14110572173�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcslen-impl.h" ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncasecmp-impl.h������������������������������������������������������0000664�0000000�0000000�00000002440�14110572173�0020463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ int wcsncasecmp (const wchar_t *s1, const wchar_t *s2, size_t n) { for (; n > 0;) { wchar_t wc1 = towlower (*s1++); wchar_t wc2 = towlower (*s2++); if (wc1 != (wchar_t)'\0' && wc1 == wc2) { n--; continue; } /* Note that wc1 and wc2 each have at most 31 bits. */ return (int)wc1 - (int)wc2; /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, = 0 if wc1 and wc2 are both '\0'. */ } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000001643�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <wctype.h> #include "wcsncasecmp-impl.h" ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncat-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002074�14110572173�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Append part of a wide string to a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcsncat (wchar_t *dest, const wchar_t *src, size_t n) { wchar_t *destptr = dest + wcslen (dest); for (; n > 0 && (*destptr = *src) != (wchar_t)'\0'; src++, destptr++, n--) ; if (n == 0) *destptr = (wchar_t)'\0'; return dest; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncat.c���������������������������������������������������������������0000664�0000000�0000000�00000001621�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Append part of a wide string to a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncat-impl.h" ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncmp-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002370�14110572173�0017631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ int wcsncmp (const wchar_t *s1, const wchar_t *s2, size_t n) { for (; n > 0;) { wchar_t wc1 = *s1++; wchar_t wc2 = *s2++; if (wc1 != (wchar_t)'\0' && wc1 == wc2) { n--; continue; } /* Note that wc1 and wc2 each have at most 31 bits. */ return (int)wc1 - (int)wc2; /* > 0 if wc1 > wc2, < 0 if wc1 < wc2, = 0 if wc1 and wc2 are both '\0'. */ } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncmp.c���������������������������������������������������������������0000664�0000000�0000000�00000001574�14110572173�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncmp-impl.h" ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncpy-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002202�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcsncpy (wchar_t *dest, const wchar_t *src, size_t n) { wchar_t *destptr = dest; for (; n > 0 && (*destptr = *src) != (wchar_t)'\0'; src++, destptr++, n--) ; /* This behavior is rarely useful, but it is specified by the ISO C standard. */ for (; n > 0; n--) *destptr++ = (wchar_t)'\0'; return dest; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsncpy.c���������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncpy-impl.h" �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsnlen-impl.h����������������������������������������������������������0000664�0000000�0000000�00000001755�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a size-bounded wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ size_t wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t)'\0'; ptr++, maxlen--) ; return ptr - s; } �������������������gnulib-20210822~d383792/lib/wcsnlen.c���������������������������������������������������������������0000664�0000000�0000000�00000001626�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a size-bounded wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsnlen-impl.h" ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsnrtombs-impl.h�������������������������������������������������������0000664�0000000�0000000�00000004742�14110572173�0020365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ size_t FUNC (char *dest, const SCHAR_T **srcp, size_t srclen, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &INTERNAL_STATE; { const SCHAR_T *src = *srcp; size_t cur_max = MB_CUR_MAX; char buf[64]; if (!(cur_max <= sizeof (buf))) abort (); if (dest != NULL) { char *destptr = dest; for (; srclen > 0 && len > 0; src++, srclen--) { SCHAR_T wc = *src; size_t ret = WCRTOMB (len >= cur_max ? destptr : buf, wc, ps); if (ret == (size_t)(-1)) goto bad_input; if (!(ret <= cur_max)) abort (); if (len < ret) break; if (len < cur_max) memcpy (destptr, buf, ret); if (wc == 0) { src = NULL; /* Here mbsinit (ps). */ break; } destptr += ret; len -= ret; } *srcp = src; return destptr - dest; } else { /* Ignore dest and len, don't store *srcp at the end, and don't clobber *ps. */ mbstate_t state = *ps; size_t totalcount = 0; for (; srclen > 0; src++, srclen--) { SCHAR_T wc = *src; size_t ret = WCRTOMB (buf, wc, &state); if (ret == (size_t)(-1)) goto bad_input2; if (wc == 0) { /* Here mbsinit (&state). */ break; } totalcount += ret; } return totalcount; } bad_input: *srcp = src; bad_input2: errno = EILSEQ; return (size_t)(-1); } } ������������������������������gnulib-20210822~d383792/lib/wcsnrtombs.c������������������������������������������������������������0000664�0000000�0000000�00000002133�14110572173�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> #include <string.h> extern mbstate_t _gl_wcsrtombs_state; #define FUNC wcsnrtombs #define SCHAR_T wchar_t #define INTERNAL_STATE _gl_wcsrtombs_state #define WCRTOMB wcrtomb #include "wcsnrtombs-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcspbrk-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002645�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcspbrk (const wchar_t *wcs, const wchar_t *accept) { /* Optimize two cases. */ if (accept[0] == (wchar_t)'\0') return NULL; if (accept[1] == (wchar_t)'\0') { wchar_t wc = accept[0]; const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (*ptr == wc) return (wchar_t *) ptr; } return NULL; } /* General case. */ { const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (wcschr (accept, *ptr)) return (wchar_t *) ptr; } return NULL; } } �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcspbrk.c���������������������������������������������������������������0000664�0000000�0000000�00000001634�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcspbrk-impl.h" ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsrchr-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002271�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcsrchr (const wchar_t *wcs, wchar_t wc) { /* Calling wcslen and then searching from the other end would cause more memory accesses. Avoid that, at the cost of a few more comparisons. */ wchar_t *result = NULL; for (;; wcs++) { if (*wcs == wc) result = (wchar_t *) wcs; if (*wcs == (wchar_t)'\0') break; } return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsrchr.c���������������������������������������������������������������0000664�0000000�0000000�00000001613�14110572173�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsrchr-impl.h" ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsrtombs-impl.h��������������������������������������������������������0000664�0000000�0000000�00000004654�14110572173�0020211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ size_t FUNC (char *dest, const SCHAR_T **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &INTERNAL_STATE; { const SCHAR_T *src = *srcp; size_t cur_max = MB_CUR_MAX; char buf[64]; if (!(cur_max <= sizeof (buf))) abort (); if (dest != NULL) { char *destptr = dest; for (; len > 0; src++) { SCHAR_T wc = *src; size_t ret = WCRTOMB (len >= cur_max ? destptr : buf, wc, ps); if (ret == (size_t)(-1)) goto bad_input; if (!(ret <= cur_max)) abort (); if (len < ret) break; if (len < cur_max) memcpy (destptr, buf, ret); if (wc == 0) { src = NULL; /* Here mbsinit (ps). */ break; } destptr += ret; len -= ret; } *srcp = src; return destptr - dest; } else { /* Ignore dest and len, don't store *srcp at the end, and don't clobber *ps. */ mbstate_t state = *ps; size_t totalcount = 0; for (;; src++) { SCHAR_T wc = *src; size_t ret = WCRTOMB (buf, wc, &state); if (ret == (size_t)(-1)) goto bad_input2; if (wc == 0) { /* Here mbsinit (&state). */ break; } totalcount += ret; } return totalcount; } bad_input: *srcp = src; bad_input2: errno = EILSEQ; return (size_t)(-1); } } ������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsrtombs-state.c�������������������������������������������������������0000664�0000000�0000000�00000003132�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> #include <wchar.h> /* Internal state used by the functions wcsrtombs() and wcsnrtombs(). */ mbstate_t _gl_wcsrtombs_state /* The state must initially be in the "initial state"; so, zero-initialize it. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html>. When it needs an initializer, use 0 or {0} as initializer? 0 only works when mbstate_t is a scalar type (such as when gnulib defines it, or on AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else /* Use braces, to be on the safe side. */ = { 0 } #endif ; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsrtombs.c�������������������������������������������������������������0000664�0000000�0000000�00000003244�14110572173�0017237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> extern mbstate_t _gl_wcsrtombs_state; #if HAVE_WCSRTOMBS && !WCSRTOMBS_TERMINATION_BUG && !defined GNULIB_defined_mbstate_t /* Override the system's wcsrtombs() function. */ # undef wcsrtombs size_t rpl_wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &_gl_wcsrtombs_state; # if WCSRTOMBS_NULL_ARG_BUG if (dest == NULL) { const wchar_t *temp_src = *srcp; return wcsrtombs (NULL, &temp_src, (size_t)-1, ps); } else # endif return wcsrtombs (dest, srcp, len, ps); } #else /* Implement wcsrtombs on top of wcrtomb(). */ # include <errno.h> # include <stdlib.h> # include <string.h> # define FUNC wcsrtombs # define SCHAR_T wchar_t # define INTERNAL_STATE _gl_wcsrtombs_state # define WCRTOMB wcrtomb # include "wcsrtombs-impl.h" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsspn-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002621�14110572173�0017473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Advance in a wide string, skipping any of a set of wide characters. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ size_t wcsspn (const wchar_t *wcs, const wchar_t *accept) { /* Optimize two cases. */ if (accept[0] == (wchar_t)'\0') return 0; if (accept[1] == (wchar_t)'\0') { wchar_t wc = accept[0]; const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (*ptr != wc) break; } return ptr - wcs; } /* General case. */ { const wchar_t *ptr = wcs; for (; *ptr != (wchar_t)'\0'; ptr++) { if (!wcschr (accept, *ptr)) break; } return ptr - wcs; } } ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsspn.c����������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Advance in a wide string, skipping any of a set of wide characters. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsspn-impl.h" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsstr-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000003154�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locate a substring in a wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcsstr (const wchar_t *haystack, const wchar_t *needle) { wchar_t n = needle[0]; /* Is needle empty? */ if (n == (wchar_t)'\0') return (wchar_t *) haystack; /* Is needle nearly empty? */ if (needle[1] == (wchar_t)'\0') return wcschr (haystack, n); /* Search for needle's first character. */ for (; *haystack != (wchar_t)'\0'; haystack++) { if (*haystack == n) { /* Compare with needle's remaining characters. */ const wchar_t *hptr = haystack + 1; const wchar_t *nptr = needle + 1; for (;;) { if (*hptr != *nptr) break; hptr++; nptr++; if (*nptr == (wchar_t)'\0') return (wchar_t *) haystack; } } } return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsstr.c����������������������������������������������������������������0000664�0000000�0000000�00000001606�14110572173�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locate a substring in a wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsstr-impl.h" ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcstok-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002706�14110572173�0017474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a wide string into tokens. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wcstok (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr) { if (wcs == NULL) { wcs = *ptr; if (wcs == NULL) return NULL; /* reminder that end of token sequence has been reached */ } /* Skip leading delimiters. */ wcs += wcsspn (wcs, delim); /* Found a token? */ if (*wcs == (wchar_t)'\0') { *ptr = NULL; return NULL; } /* Move past the token. */ { wchar_t *token_end = wcspbrk (wcs, delim); if (token_end) { /* NUL-terminate the token. */ *token_end = (wchar_t)'\0'; *ptr = token_end + 1; } else *ptr = NULL; } return wcs; } ����������������������������������������������������������gnulib-20210822~d383792/lib/wcstok.c����������������������������������������������������������������0000664�0000000�0000000�00000001602�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a wide string into tokens. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcstok-impl.h" ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcswidth-impl.h���������������������������������������������������������0000664�0000000�0000000�00000002421�14110572173�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine number of screen columns needed for a size-bounded wide string. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ int wcswidth (const wchar_t *s, size_t n) { int count = 0; for (; n > 0; s++, n--) { wchar_t c = *s; if (c == (wchar_t)'\0') break; { int width = wcwidth (c); if (width < 0) goto found_nonprinting; if (width > INT_MAX - count) goto overflow; count += width; } } return count; found_nonprinting: return -1; overflow: return INT_MAX; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcswidth.c��������������������������������������������������������������0000664�0000000�0000000�00000001702�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine number of screen columns needed for a size-bounded wide string. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <limits.h> #include "wcswidth-impl.h" ��������������������������������������������������������������gnulib-20210822~d383792/lib/wcsxfrm-impl.h����������������������������������������������������������0000664�0000000�0000000�00000005063�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Transform wide string for comparison using the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ size_t wcsxfrm (wchar_t *s1, const wchar_t *s2, size_t n) { char mbbuf2[1024]; char *mbs2; { int saved_errno = errno; size_t result; /* Convert s2 to a multibyte string, trying to avoid malloc(). */ { size_t ret; ret = wcstombs (mbbuf2, s2, sizeof (mbbuf2)); if (ret == (size_t)-1) goto failed; if (ret < sizeof (mbbuf2)) mbs2 = mbbuf2; else { size_t need = wcstombs (NULL, s2, 0); if (need == (size_t)-1) goto failed; mbs2 = (char *) malloc (need + 1); if (mbs2 == NULL) goto out_of_memory; ret = wcstombs (mbs2, s2, need + 1); if (ret != need) abort (); } } /* Transform the multibyte string. */ errno = 0; result = strxfrm ((char *)s1, mbs2, n); if (errno != 0) { /* An error occurred. */ if (mbs2 != mbbuf2) free (mbs2); return 0; } if (result < n) { /* Convert the result by mapping char[] -> wchar_t[]. Since strcmp() compares the elements as 'unsigned char' values, whereas wcscmp() compares the elements as 'wchar_t' values, we need to map 1 'unsigned char' to 1 'wchar_t'. (We could also map 2 consecutive 'unsigned char' values to 1 'wchar_t' value, but this is not needed. */ wchar_t *wcp = s1 + n; char *cp = (char *)s1 + n; while (wcp > s1) *--wcp = (wchar_t) (unsigned char) *--cp; } if (mbs2 != mbbuf2) free (mbs2); /* No error. */ errno = saved_errno; return result; } out_of_memory: errno = ENOMEM; return 0; failed: errno = EILSEQ; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcsxfrm.c���������������������������������������������������������������0000664�0000000�0000000�00000001735�14110572173�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Transform wide string for comparison using the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "wcsxfrm-impl.h" �����������������������������������gnulib-20210822~d383792/lib/wctob.c�����������������������������������������������������������������0000664�0000000�0000000�00000002304�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to unibyte character. Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> int wctob (wint_t wc) { char buf[64]; if (!(MB_CUR_MAX <= sizeof (buf))) abort (); /* Handle the case where WEOF is a value that does not fit in a wchar_t. */ if (wc == (wchar_t)wc) if (wctomb (buf, (wchar_t)wc) == 1) return (unsigned char) buf[0]; return EOF; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctomb-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002134�14110572173�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ int wctomb (char *s, wchar_t wc) { if (s == NULL) return 0; else { mbstate_t state; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = wcrtomb (s, wc, &state); if (result == (size_t)-1) return -1; return result; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctomb.c����������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "wctomb-impl.h" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctrans-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002313�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character case conversion. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ wctrans_t wctrans (const char *name) { if (name[0] == 't' && name[1] == 'o') switch (name[2]) { case 'l': if (strcmp (name + 3, "ower") == 0) return (wctrans_t) towlower; break; case 'u': if (strcmp (name + 3, "pper") == 0) return (wctrans_t) towupper; break; default: break; } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctrans.c���������������������������������������������������������������0000664�0000000�0000000�00000001655�14110572173�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character case conversion. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <string.h> #include "wctrans-impl.h" �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctype-h.c��������������������������������������������������������������0000664�0000000�0000000�00000001626�14110572173�0016756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <wctype.h>. Copyright (C) 2012-2021 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/>. */ /* Normally this would be wctype.c, but that name's already taken. */ #include <config.h> #define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE #include "wctype.h" ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctype-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000005102�14110572173�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ wctype_t wctype (const char* name) { switch (name[0]) { case 'a': switch (name[1]) { case 'l': switch (name[2]) { case 'n': if (strcmp (name + 3, "um") == 0) return (wctype_t) iswalnum; break; case 'p': if (strcmp (name + 3, "ha") == 0) return (wctype_t) iswalpha; break; default: break; } break; default: break; } break; case 'b': if (strcmp (name + 1, "lank") == 0) return (wctype_t) iswblank; break; case 'c': if (strcmp (name + 1, "ntrl") == 0) return (wctype_t) iswcntrl; break; case 'd': if (strcmp (name + 1, "igit") == 0) return (wctype_t) iswdigit; break; case 'g': if (strcmp (name + 1, "raph") == 0) return (wctype_t) iswgraph; break; case 'l': if (strcmp (name + 1, "ower") == 0) return (wctype_t) iswlower; break; case 'p': switch (name[1]) { case 'r': if (strcmp (name + 2, "int") == 0) return (wctype_t) iswprint; break; case 'u': if (strcmp (name + 2, "nct") == 0) return (wctype_t) iswpunct; break; default: break; } break; case 's': if (strcmp (name + 1, "pace") == 0) return (wctype_t) iswspace; break; case 'u': if (strcmp (name + 1, "pper") == 0) return (wctype_t) iswupper; break; case 'x': if (strcmp (name + 1, "digit") == 0) return (wctype_t) iswxdigit; break; default: break; } return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctype.c����������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <string.h> #include "wctype-impl.h" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wctype.in.h�������������������������������������������������������������0000664�0000000�0000000�00000043274�14110572173�0017150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. Copyright (C) 2006-2021 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 and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) /* Special invocation convention: - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of <wctype.h> is being processed, which doesn't include the idempotency guard. */ #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ # include <wchar.h> #endif /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the declarations. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <ctype.h> # include <wchar.h> #endif /* Include the original <wctype.h> if it exists. BeOS 5 has the functions but no <wctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCTYPE_H@ # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #endif #ifndef _@GUARD_PREFIX@_WCTYPE_H #define _@GUARD_PREFIX@_WCTYPE_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_WCTYPE_INLINE # define _GL_WCTYPE_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which #defines a number of identifiers in the application namespace. Revert these #defines. */ #ifdef __sun # undef multibyte # undef eucw1 # undef eucw2 # undef eucw3 # undef scrw1 # undef scrw2 # undef scrw3 #endif /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif #if !GNULIB_defined_wctype_functions /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. Linux libc5 has <wctype.h> and the functions but they are broken. mingw and MSVC have <wctype.h> and the functions but they take a wchar_t as argument, not an rpl_wint_t. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ _GL_WCTYPE_INLINE int rpl_iswalnum (wint_t wc) { return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswalpha (wint_t wc) { return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswblank (wint_t wc) { return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswcntrl (wint_t wc) { return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswdigit (wint_t wc) { return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); } _GL_WCTYPE_INLINE int rpl_iswgraph (wint_t wc) { return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswlower (wint_t wc) { return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswprint (wint_t wc) { return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswpunct (wint_t wc) { return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswspace (wint_t wc) { return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswupper (wint_t wc) { return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswxdigit (wint_t wc) { return ((wchar_t) wc == wc ? (wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') : 0); } _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); } _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # define towlower rpl_towlower # define towupper rpl_towupper # endif # else /* IRIX 5.3 has macros but no functions, its isw* macros refer to an undefined variable _ctmp_ and to <ctype.h> macros like _P, and they refer to system functions like _iswctype that are not in the standard C library. Rather than try to get ancient buggy implementations like this to work, just disable them. */ # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper /* Linux libc5 has <wctype.h> and the functions but they are broken. */ # if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # endif # endif # if @REPLACE_TOWLOWER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif # endif _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWDIGIT@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswpunct # else iswpunct # endif (wint_t wc) { return (wc >= '!' && wc <= '~' && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswspace # else iswspace # endif (wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWXDIGIT@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # endif # else /* Only some of the functions are missing or broken. */ # if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) /* Only the iswblank function is missing. */ # if @REPLACE_ISWBLANK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswblank rpl_iswblank # endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); # else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswdigit # define iswdigit rpl_iswdigit # endif _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswxdigit # define iswxdigit rpl_iswxdigit # endif _GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc)); # endif # endif # endif # if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library to take a wchar_t argument and return a wchar_t result. mingw declares these functions to take a wint_t argument and return a wint_t result. This means that: 1. When the user passes an argument outside the range 0x0000..0xFFFF, the function will look only at the lower 16 bits. This is allowed according to POSIX. 2. The return value is returned in the lower 16 bits of the result register. The upper 16 bits are random: whatever happened to be in that part of the result register. We need to fix this by adding a zero-extend from wchar_t to wint_t after the call. */ _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return (wint_t) (wchar_t) towlower (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # endif _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return (wint_t) (wchar_t) towupper (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towupper rpl_towupper # endif # endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); #endif #if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); # endif #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); #endif #if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); _GL_CXXALIASWARN (iswdigit); _GL_CXXALIASWARN (iswgraph); _GL_CXXALIASWARN (iswlower); _GL_CXXALIASWARN (iswprint); _GL_CXXALIASWARN (iswpunct); _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); #endif #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswblank); # endif #endif #if !@HAVE_WCTYPE_T@ # if !GNULIB_defined_wctype_t typedef void * wctype_t; # define GNULIB_defined_wctype_t 1 # endif #endif /* Get a descriptor for a wide character property. */ #if @GNULIB_WCTYPE@ # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctype); # endif #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE _GL_WARN_ON_USE (wctype, "wctype is unportable - " "use gnulib module wctype for portability"); # endif #endif /* Test whether a wide character has a given property. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswctype # define iswctype rpl_iswctype # endif _GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); _GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); # else # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswctype); # endif #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " "use gnulib module iswctype for portability"); # endif #endif #if @REPLACE_TOWLOWER@ || defined __MINGW32__ _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); #else _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #endif #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t typedef void * wctrans_t; # define GNULIB_defined_wctrans_t 1 # endif #endif /* Get a descriptor for a wide character case conversion. */ #if @GNULIB_WCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctrans); # endif #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " "use gnulib module wctrans for portability"); # endif #endif /* Perform a given case conversion on a wide character. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctrans() function. */ #if @GNULIB_TOWCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (towctrans); # endif #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " "use gnulib module towctrans for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wcwidth.c���������������������������������������������������������������0000664�0000000�0000000�00000004174�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a character. Copyright (C) 2006-2007, 2010-2021 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> /* Get iswprint. */ #include <wctype.h> #include "localcharset.h" #include "streq.h" #include "uniwidth.h" /* Returns 1 if the current locale is an UTF-8 locale, 0 otherwise. */ static inline int is_locale_utf8 (void) { const char *encoding = locale_charset (); return STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0); } #if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of is_locale_utf8. */ static int cached_is_locale_utf8 = -1; static inline int is_locale_utf8_cached (void) { if (cached_is_locale_utf8 < 0) cached_is_locale_utf8 = is_locale_utf8 (); return cached_is_locale_utf8; } #else /* By default, don't make assumptions, hence no caching. */ # define is_locale_utf8_cached is_locale_utf8 #endif int wcwidth (wchar_t wc) #undef wcwidth { /* In UTF-8 locales, use a Unicode aware width function. */ if (is_locale_utf8_cached ()) { /* We assume that in a UTF-8 locale, a wide character is the same as a Unicode character. */ return uc_width (wc, "UTF-8"); } else { /* Otherwise, fall back to the system's wcwidth function. */ #if HAVE_WCWIDTH return wcwidth (wc); #else return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-cond.c����������������������������������������������������������0000664�0000000�0000000�00000034225�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables (native Windows implementation). Copyright (C) 2008-2021 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 Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008, and Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> /* Specification. */ #include "windows-cond.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <sys/time.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as linked lists. */ #define glwthread_waitqueue_t glwthread_linked_waitqueue_t /* All links of a circular list, except the anchor, are of this type, carrying a payload. */ struct glwthread_waitqueue_element { struct glwthread_waitqueue_link link; /* must be the first field! */ HANDLE event; /* Waiting thread, represented by an event. This field is immutable once initialized. */ }; static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->wq_list.wql_next = &wq->wq_list; wq->wq_list.wql_prev = &wq->wq_list; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns NULL if an allocation failure occurs. */ static struct glwthread_waitqueue_element * glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { struct glwthread_waitqueue_element *elt; HANDLE event; /* Allocate the memory for the waitqueue element on the heap, not on the thread's stack. If the thread exits unexpectedly, we prefer to leak some memory rather than to access unavailable memory and crash. */ elt = (struct glwthread_waitqueue_element *) malloc (sizeof (struct glwthread_waitqueue_element)); if (elt == NULL) /* No more memory. */ return NULL; /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) { /* No way to allocate an event. */ free (elt); return NULL; } elt->event = event; /* Insert elt at the end of the circular list. */ (elt->link.wql_prev = wq->wq_list.wql_prev)->wql_next = &elt->link; (elt->link.wql_next = &wq->wq_list)->wql_prev = &elt->link; return elt; } /* Removes the current thread, represented by a 'struct glwthread_waitqueue_element *', from a wait queue. Returns true if is was found and removed, false if it was not present. */ static bool glwthread_waitqueue_remove (glwthread_waitqueue_t *wq, struct glwthread_waitqueue_element *elt) { if (elt->link.wql_next != NULL && elt->link.wql_prev != NULL) { /* Remove elt from the circular list. */ struct glwthread_waitqueue_link *prev = elt->link.wql_prev; struct glwthread_waitqueue_link *next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; return true; } else return false; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { if (wq->wq_list.wql_next != &wq->wq_list) { struct glwthread_waitqueue_element *elt = (struct glwthread_waitqueue_element *) wq->wq_list.wql_next; struct glwthread_waitqueue_link *prev; struct glwthread_waitqueue_link *next; /* Remove elt from the circular list. */ prev = &wq->wq_list; /* = elt->link.wql_prev; */ next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; SetEvent (elt->event); /* After the SetEvent, this thread cannot access *elt any more, because the woken-up thread will quickly call free (elt). */ } } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { struct glwthread_waitqueue_link *l; for (l = wq->wq_list.wql_next; l != &wq->wq_list; ) { struct glwthread_waitqueue_element *elt = (struct glwthread_waitqueue_element *) l; struct glwthread_waitqueue_link *prev; struct glwthread_waitqueue_link *next; /* Remove elt from the circular list. */ prev = &wq->wq_list; /* = elt->link.wql_prev; */ next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; SetEvent (elt->event); /* After the SetEvent, this thread cannot access *elt any more, because the woken-up thread will quickly call free (elt). */ l = next; } if (!(wq->wq_list.wql_next == &wq->wq_list && wq->wq_list.wql_prev == &wq->wq_list)) abort (); } int glwthread_cond_init (glwthread_cond_t *cond) { InitializeCriticalSection (&cond->lock); glwthread_waitqueue_init (&cond->waiters); cond->guard.done = 1; return 0; } int glwthread_cond_wait (glwthread_cond_t *cond, void *mutex, int (*mutex_lock) (void *), int (*mutex_unlock) (void *)) { if (!cond->guard.done) { if (InterlockedIncrement (&cond->guard.started) == 0) /* This thread is the first one to need this condition variable. Initialize it. */ glwthread_cond_init (cond); else { /* Don't let cond->guard.started grow and wrap around. */ InterlockedDecrement (&cond->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this condition variable. */ while (!cond->guard.done) Sleep (0); } } EnterCriticalSection (&cond->lock); { struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&cond->waiters); LeaveCriticalSection (&cond->lock); if (elt == NULL) { /* Allocation failure. Weird. */ return EAGAIN; } else { HANDLE event = elt->event; int err; DWORD result; /* Now release the mutex and let any other thread take it. */ err = mutex_unlock (mutex); if (err != 0) { EnterCriticalSection (&cond->lock); glwthread_waitqueue_remove (&cond->waiters, elt); LeaveCriticalSection (&cond->lock); CloseHandle (event); free (elt); return err; } /* POSIX says: "If another thread is able to acquire the mutex after the about-to-block thread has released it, then a subsequent call to pthread_cond_broadcast() or pthread_cond_signal() in that thread shall behave as if it were issued after the about-to-block thread has blocked." This is fulfilled here, because the thread signalling is done through SetEvent, not PulseEvent. */ /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); free (elt); /* The thread which signalled the event already did the bookkeeping: removed us from the waiters. */ return mutex_lock (mutex); } } } int glwthread_cond_timedwait (glwthread_cond_t *cond, void *mutex, int (*mutex_lock) (void *), int (*mutex_unlock) (void *), const struct timespec *abstime) { if (!cond->guard.done) { if (InterlockedIncrement (&cond->guard.started) == 0) /* This thread is the first one to need this condition variable. Initialize it. */ glwthread_cond_init (cond); else { /* Don't let cond->guard.started grow and wrap around. */ InterlockedDecrement (&cond->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this condition variable. */ while (!cond->guard.done) Sleep (0); } } { struct timeval currtime; gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec || (currtime.tv_sec == abstime->tv_sec && currtime.tv_usec * 1000 >= abstime->tv_nsec)) return ETIMEDOUT; EnterCriticalSection (&cond->lock); { struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&cond->waiters); LeaveCriticalSection (&cond->lock); if (elt == NULL) { /* Allocation failure. Weird. */ return EAGAIN; } else { HANDLE event = elt->event; int err; DWORD timeout; DWORD result; /* Now release the mutex and let any other thread take it. */ err = mutex_unlock (mutex); if (err != 0) { EnterCriticalSection (&cond->lock); glwthread_waitqueue_remove (&cond->waiters, elt); LeaveCriticalSection (&cond->lock); CloseHandle (event); free (elt); return err; } /* POSIX says: "If another thread is able to acquire the mutex after the about-to-block thread has released it, then a subsequent call to pthread_cond_broadcast() or pthread_cond_signal() in that thread shall behave as if it were issued after the about-to-block thread has blocked." This is fulfilled here, because the thread signalling is done through SetEvent, not PulseEvent. */ /* Wait until another thread signals this event or until the abstime passes. */ gettimeofday (&currtime, NULL); if (currtime.tv_sec > abstime->tv_sec) timeout = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; timeout = seconds * 1000; if (timeout / 1000 != seconds) /* overflow? */ timeout = INFINITE; else { long milliseconds = abstime->tv_nsec / 1000000 - currtime.tv_usec / 1000; if (milliseconds >= 0) { timeout += milliseconds; if (timeout < milliseconds) /* overflow? */ timeout = INFINITE; } else { if (timeout >= - milliseconds) timeout -= (- milliseconds); else timeout = 0; } } } result = WaitForSingleObject (event, timeout); if (result == WAIT_FAILED) abort (); if (result == WAIT_TIMEOUT) { EnterCriticalSection (&cond->lock); if (glwthread_waitqueue_remove (&cond->waiters, elt)) { /* The event was not signaled between the WaitForSingleObject call and the EnterCriticalSection call. */ if (!(WaitForSingleObject (event, 0) == WAIT_TIMEOUT)) abort (); } else { /* The event was signaled between the WaitForSingleObject call and the EnterCriticalSection call. */ if (!(WaitForSingleObject (event, 0) == WAIT_OBJECT_0)) abort (); /* Produce the right return value. */ result = WAIT_OBJECT_0; } LeaveCriticalSection (&cond->lock); } else { /* The thread which signalled the event already did the bookkeeping: removed us from the waiters. */ } CloseHandle (event); free (elt); /* Take the mutex again. It does not matter whether this is done before or after the bookkeeping for WAIT_TIMEOUT. */ err = mutex_lock (mutex); return (err ? err : result == WAIT_OBJECT_0 ? 0 : result == WAIT_TIMEOUT ? ETIMEDOUT : /* WAIT_FAILED shouldn't happen */ EAGAIN); } } } } int glwthread_cond_signal (glwthread_cond_t *cond) { if (!cond->guard.done) return EINVAL; EnterCriticalSection (&cond->lock); /* POSIX says: "The pthread_cond_broadcast() and pthread_cond_signal() functions shall have no effect if there are no threads currently blocked on cond." */ if (cond->waiters.wq_list.wql_next != &cond->waiters.wq_list) glwthread_waitqueue_notify_first (&cond->waiters); LeaveCriticalSection (&cond->lock); return 0; } int glwthread_cond_broadcast (glwthread_cond_t *cond) { if (!cond->guard.done) return EINVAL; EnterCriticalSection (&cond->lock); /* POSIX says: "The pthread_cond_broadcast() and pthread_cond_signal() functions shall have no effect if there are no threads currently blocked on cond." glwthread_waitqueue_notify_all is a nop in this case. */ glwthread_waitqueue_notify_all (&cond->waiters); LeaveCriticalSection (&cond->lock); return 0; } int glwthread_cond_destroy (glwthread_cond_t *cond) { if (!cond->guard.done) return EINVAL; if (cond->waiters.wq_list.wql_next != &cond->waiters.wq_list) return EBUSY; DeleteCriticalSection (&cond->lock); cond->guard.done = 0; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-cond.h����������������������������������������������������������0000664�0000000�0000000�00000005512�14110572173�0017634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables (native Windows implementation). Copyright (C) 2008-2021 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 Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008. Based on Bruno Haible <bruno@clisp.org> lock.h */ #ifndef _WINDOWS_COND_H #define _WINDOWS_COND_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include <time.h> #include "windows-initguard.h" #ifndef _glwthread_linked_waitqueue_link_defined #define _glwthread_linked_waitqueue_link_defined struct glwthread_waitqueue_link { struct glwthread_waitqueue_link *wql_next; struct glwthread_waitqueue_link *wql_prev; }; #endif /* _glwthread_linked_waitqueue_link_defined */ typedef struct { struct glwthread_waitqueue_link wq_list; /* circular list of waiting threads */ } glwthread_linked_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_linked_waitqueue_t waiters; /* waiting threads */ } glwthread_cond_t; #define GLWTHREAD_COND_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern int glwthread_cond_init (glwthread_cond_t *cond); /* Here, to cope with the various types of mutexes, the mutex is a 'void *', and the caller needs to pass the corresponding *_lock and *_unlock functions. */ extern int glwthread_cond_wait (glwthread_cond_t *cond, void *mutex, int (*mutex_lock) (void *), int (*mutex_unlock) (void *)); extern int glwthread_cond_timedwait (glwthread_cond_t *cond, void *mutex, int (*mutex_lock) (void *), int (*mutex_unlock) (void *), const struct timespec *abstime); extern int glwthread_cond_signal (glwthread_cond_t *cond); extern int glwthread_cond_broadcast (glwthread_cond_t *cond); extern int glwthread_cond_destroy (glwthread_cond_t *cond); #ifdef __cplusplus } #endif #endif /* _WINDOWS_COND_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-initguard.h�����������������������������������������������������0000664�0000000�0000000�00000002316�14110572173�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Init guards, somewhat like spinlocks (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_INITGUARD_H #define _WINDOWS_INITGUARD_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int done; volatile LONG started; } glwthread_initguard_t; #define GLWTHREAD_INITGUARD_INIT { 0, -1 } #endif /* _WINDOWS_INITGUARD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-mutex.c���������������������������������������������������������0000664�0000000�0000000�00000005240�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-mutex.h" #include <errno.h> void glwthread_mutex_init (glwthread_mutex_t *mutex) { InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_mutex_lock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } EnterCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_trylock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; return 0; } int glwthread_mutex_unlock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; LeaveCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_destroy (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-mutex.h���������������������������������������������������������0000664�0000000�0000000�00000003175�14110572173�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_MUTEX_H #define _WINDOWS_MUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } glwthread_mutex_t; #define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_mutex_init (glwthread_mutex_t *mutex); extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_MUTEX_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-once.c����������������������������������������������������������0000664�0000000�0000000�00000004416�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-once.h" #include <stdlib.h> void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Don't let once_control->started grow and wrap around. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-once.h����������������������������������������������������������0000664�0000000�0000000�00000002602�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_ONCE_H #define _WINDOWS_ONCE_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int inited; volatile LONG started; CRITICAL_SECTION lock; } glwthread_once_t; #define GLWTHREAD_ONCE_INIT { -1, -1 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)); #ifdef __cplusplus } #endif #endif /* _WINDOWS_ONCE_H */ ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-recmutex.c������������������������������������������������������0000664�0000000�0000000�00000006542�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-recmutex.h" #include <errno.h> void glwthread_recmutex_init (glwthread_recmutex_t *mutex) { mutex->owner = 0; mutex->depth = 0; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_recmutex_lock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { EnterCriticalSection (&mutex->lock); mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex) { if (mutex->owner != GetCurrentThreadId ()) return EPERM; if (mutex->depth == 0) return EINVAL; if (--(mutex->depth) == 0) { mutex->owner = 0; LeaveCriticalSection (&mutex->lock); } return 0; } int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex) { if (mutex->owner != 0) return EBUSY; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-recmutex.h������������������������������������������������������0000664�0000000�0000000�00000003675�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RECMUTEX_H #define _WINDOWS_RECMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { glwthread_initguard_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } glwthread_recmutex_t; #define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RECMUTEX_H */ �������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-rwlock.c��������������������������������������������������������0000664�0000000�0000000�00000027273�14110572173�0020215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-rwlock.h" #include <errno.h> #include <stdlib.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as circular arrays. */ #define glwthread_waitqueue_t glwthread_carray_waitqueue_t static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glwthread_rwlock_init (glwthread_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); glwthread_waitqueue_init (&lock->waiting_readers); glwthread_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_unlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; glwthread_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; glwthread_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_destroy (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-rwlock.h��������������������������������������������������������0000664�0000000�0000000�00000005134�14110572173�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RWLOCK_H #define _WINDOWS_RWLOCK_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } glwthread_carray_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } glwthread_rwlock_t; #define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RWLOCK_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-spawn.c���������������������������������������������������������0000664�0000000�0000000�00000052101�14110572173�0020030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. Native Windows API. Copyright (C) 2001, 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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/>. */ #include <config.h> /* Specification. */ #include "windows-spawn.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #include <process.h> #include "findprog.h" /* Don't assume that UNICODE is not defined. */ #undef STARTUPINFO #define STARTUPINFO STARTUPINFOA #undef CreateProcess #define CreateProcess CreateProcessA #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" /* Returns the length of a quoted argument string. */ static size_t quoted_arg_length (const char *string) { bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; return length; } /* Produces a quoted argument string. Stores exactly quoted_arg_length (STRING) + 1 bytes, including the final NUL byte, at MEM. Returns a pointer past the stored quoted argument string. */ static char * quoted_arg_string (const char *string, char *mem) { bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); char *p; unsigned int backslashes; const char *s; p = mem; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p++ = '\0'; return p; } const char ** prepare_spawn (const char * const *argv, char **mem_to_free) { size_t argc; const char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = (const char **) malloc ((1 + argc + 1) * sizeof (const char *)); /* Add an element upfront that can be used when argv[0] turns out to be a script, not a program. On Unix, this would be "/bin/sh". On native Windows, "sh" is actually "sh.exe". We have to omit the directory part and rely on the search in PATH, because the mingw "mount points" are not visible inside Windows CreateProcess(). */ new_argv[0] = "sh.exe"; /* Put quoted arguments into the new argument vector. */ size_t needed_size = 0; for (i = 0; i < argc; i++) { const char *string = argv[i]; size_t length; if (string[0] == '\0') length = strlen ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) length = quoted_arg_length (string); else length = strlen (string); needed_size += length + 1; } char *mem; if (needed_size == 0) mem = NULL; else { mem = (char *) malloc (needed_size); if (mem == NULL) { /* Memory allocation failure. */ free (new_argv); errno = ENOMEM; return NULL; } } *mem_to_free = mem; for (i = 0; i < argc; i++) { const char *string = argv[i]; new_argv[1 + i] = mem; if (string[0] == '\0') { size_t length = strlen ("\"\""); memcpy (mem, "\"\"", length + 1); mem += length + 1; } else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { mem = quoted_arg_string (string, mem); } else { size_t length = strlen (string); memcpy (mem, string, length + 1); mem += length + 1; } } new_argv[1 + argc] = NULL; return new_argv; } char * compose_command (const char * const *argv) { /* Just concatenate the argv[] strings, separated by spaces. */ char *command; /* Determine the size of the needed block of memory. */ size_t total_size = 0; const char * const *ap; const char *p; for (ap = argv; (p = *ap) != NULL; ap++) total_size += strlen (p) + 1; size_t command_size = (total_size > 0 ? total_size : 1); /* Allocate the block of memory. */ command = (char *) malloc (command_size); if (command == NULL) { errno = ENOMEM; return NULL; } /* Fill it. */ if (total_size > 0) { char *cp = command; for (ap = argv; (p = *ap) != NULL; ap++) { size_t size = strlen (p) + 1; memcpy (cp, p, size - 1); cp += size; cp[-1] = ' '; } cp[-1] = '\0'; } else *command = '\0'; return command; } char * compose_envblock (const char * const *envp) { /* This is a bit hairy, because we don't have a lock that would prevent other threads from making modifications in ENVP. So, just make sure we don't crash; but if other threads are making modifications, part of the result may be wrong. */ retry: { /* Guess the size of the needed block of memory. The guess will be exact if other threads don't make modifications. */ size_t total_size = 0; const char * const *ep; const char *p; for (ep = envp; (p = *ep) != NULL; ep++) total_size += strlen (p) + 1; size_t envblock_size = total_size; /* Allocate the block of memory. */ char *envblock = (char *) malloc (envblock_size + 1); if (envblock == NULL) { errno = ENOMEM; return NULL; } size_t envblock_used = 0; for (ep = envp; (p = *ep) != NULL; ep++) { size_t size = strlen (p) + 1; if (envblock_used + size > envblock_size) { /* Other threads did modifications. Need more memory. */ envblock_size += envblock_size / 2; if (envblock_used + size > envblock_size) envblock_size = envblock_used + size; char *new_envblock = (char *) realloc (envblock, envblock_size + 1); if (new_envblock == NULL) { free (envblock); errno = ENOMEM; return NULL; } envblock = new_envblock; } memcpy (envblock + envblock_used, p, size); envblock_used += size; if (envblock[envblock_used - 1] != '\0') { /* Other threads did modifications. Restart. */ free (envblock); goto retry; } } envblock[envblock_used] = '\0'; return envblock; } } int init_inheritable_handles (struct inheritable_handles *inh_handles, bool duplicate) { /* Determine the minimal count of handles we need to care about. */ size_t handles_count; { /* _getmaxstdio <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getmaxstdio> Default value is 512. */ unsigned int fdmax = _getmaxstdio (); if (fdmax < 3) fdmax = 3; for (; fdmax > 3; fdmax--) { unsigned int fd = fdmax - 1; /* _get_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle> */ HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle != INVALID_HANDLE_VALUE) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) /* fd denotes an inheritable descriptor. */ break; } } } handles_count = fdmax; } /* Note: handles_count >= 3. */ /* Allocate the arrays. */ size_t handles_allocated = handles_count; HANDLE *handles_array = (HANDLE *) malloc (handles_allocated * sizeof (HANDLE)); if (handles_array == NULL) { errno = ENOMEM; return -1; } unsigned char *flags_array = (unsigned char *) malloc (handles_allocated * sizeof (unsigned char)); if (flags_array == NULL) { free (handles_array); errno = ENOMEM; return -1; } /* Fill in the two arrays. */ { HANDLE curr_process = (duplicate ? GetCurrentProcess () : INVALID_HANDLE_VALUE); unsigned int fd; for (fd = 0; fd < handles_count; fd++) { handles_array[fd] = INVALID_HANDLE_VALUE; /* _get_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle> */ HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle != INVALID_HANDLE_VALUE) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) { /* fd denotes an inheritable descriptor. */ if (duplicate) { if (!DuplicateHandle (curr_process, handle, curr_process, &handles_array[fd], 0, TRUE, DUPLICATE_SAME_ACCESS)) { unsigned int i; for (i = 0; i < fd; i++) if (handles_array[i] != INVALID_HANDLE_VALUE) CloseHandle (handles_array[i]); free (flags_array); free (handles_array); errno = EBADF; /* arbitrary */ return -1; } } else handles_array[fd] = handle; flags_array[fd] = 0; } } } } } /* Return the result. */ inh_handles->count = handles_count; inh_handles->allocated = handles_allocated; inh_handles->handles = handles_array; inh_handles->flags = flags_array; return 0; } int compose_handles_block (const struct inheritable_handles *inh_handles, STARTUPINFO *sinfo) { /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ sinfo->dwFlags = STARTF_USESTDHANDLES; sinfo->hStdInput = inh_handles->handles[0]; sinfo->hStdOutput = inh_handles->handles[1]; sinfo->hStdError = inh_handles->handles[2]; /* On newer versions of Windows, more file descriptors / handles than the first three can be passed. The format is as follows: Let N be an exclusive upper bound for the file descriptors to be passed. Two arrays are constructed in memory: - flags[0..N-1], of element type 'unsigned char', - handles[0..N-1], of element type 'HANDLE' or 'intptr_t'. For used entries, handles[i] is the handle, and flags[i] is a set of flags, a combination of: 1 for open file descriptors, 64 for handles of type FILE_TYPE_CHAR, 8 for handles of type FILE_TYPE_PIPE, 32 for O_APPEND. For unused entries - this may include any of the first three, since they are already passed above -, handles[i] is INVALID_HANDLE_VALUE and flags[i] is zero. lpReserved2 now is a pointer to the concatenation (without padding) of: - an 'unsigned int' whose value is N, - the contents of the flags[0..N-1] array, - the contents of the handles[0..N-1] array. cbReserved2 is the size (in bytes) of the object at lpReserved2. */ size_t handles_count = inh_handles->count; sinfo->cbReserved2 = sizeof (unsigned int) + handles_count * sizeof (unsigned char) + handles_count * sizeof (HANDLE); /* Add some padding, so that we can work with a properly aligned HANDLE array. */ char *hblock = (char *) malloc (sinfo->cbReserved2 + (sizeof (HANDLE) - 1)); if (hblock == NULL) { errno = ENOMEM; return -1; } unsigned char *flags = (unsigned char *) (hblock + sizeof (unsigned int)); char *handles = (char *) (flags + handles_count); HANDLE *handles_aligned = (HANDLE *) (((uintptr_t) handles + (sizeof (HANDLE) - 1)) & - (uintptr_t) sizeof (HANDLE)); * (unsigned int *) hblock = handles_count; { unsigned int fd; for (fd = 0; fd < handles_count; fd++) { handles_aligned[fd] = INVALID_HANDLE_VALUE; flags[fd] = 0; HANDLE handle = inh_handles->handles[fd]; if (handle != INVALID_HANDLE_VALUE /* The first three are possibly already passed above. But they need to passed here as well, if they have some flags. */ && (fd >= 3 || inh_handles->flags[fd] != 0)) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) { /* fd denotes an inheritable descriptor. */ handles_aligned[fd] = handle; /* On Microsoft Windows, it would be sufficient to set flags[fd] = 1. But on ReactOS or Wine, adding the bit that indicates the handle type may be necessary. So, just do it everywhere. */ flags[fd] = 1 | inh_handles->flags[fd]; switch (GetFileType (handle)) { case FILE_TYPE_CHAR: flags[fd] |= 64; break; case FILE_TYPE_PIPE: flags[fd] |= 8; break; default: break; } } else /* We shouldn't have any non-inheritable handles in inh_handles->handles. */ abort (); } } } } if (handles != (char *) handles_aligned) memmove (handles, (char *) handles_aligned, handles_count * sizeof (HANDLE)); sinfo->lpReserved2 = (BYTE *) hblock; return 0; } void free_inheritable_handles (struct inheritable_handles *inh_handles) { free (inh_handles->flags); free (inh_handles->handles); } int convert_CreateProcess_error (DWORD error) { /* Some of these errors probably cannot happen. But who knows... */ switch (error) { case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: case ERROR_BAD_PATHNAME: case ERROR_BAD_NET_NAME: case ERROR_INVALID_NAME: case ERROR_DIRECTORY: return ENOENT; break; case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: return EACCES; break; case ERROR_OUTOFMEMORY: return ENOMEM; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: return ENAMETOOLONG; break; case ERROR_BAD_FORMAT: case ERROR_BAD_EXE_FORMAT: return ENOEXEC; break; default: return EINVAL; break; } } intptr_t spawnpvech (int mode, const char *progname, const char * const *argv, const char * const *envp, const char *currdir, HANDLE stdin_handle, HANDLE stdout_handle, HANDLE stderr_handle) { /* Validate the arguments. */ if (!(mode == P_WAIT || mode == P_NOWAIT || mode == P_DETACH || mode == P_OVERLAY) || progname == NULL || argv == NULL) { errno = EINVAL; return -1; } /* Implement the 'p' letter: search for PROGNAME in getenv ("PATH"). */ const char *resolved_progname = find_in_given_path (progname, getenv ("PATH"), NULL, false); if (resolved_progname == NULL) return -1; /* Compose the command. */ char *command = compose_command (argv); if (command == NULL) goto out_of_memory_1; /* Copy *ENVP into a contiguous block of memory. */ char *envblock; if (envp == NULL) envblock = NULL; else { envblock = compose_envblock (envp); if (envblock == NULL) goto out_of_memory_2; } /* Collect the inheritable handles. */ struct inheritable_handles inh_handles; if (init_inheritable_handles (&inh_handles, false) < 0) { int saved_errno = errno; if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = saved_errno; return -1; } inh_handles.handles[0] = stdin_handle; inh_handles.flags[0] = 0; inh_handles.handles[1] = stdout_handle; inh_handles.flags[1] = 0; inh_handles.handles[2] = stderr_handle; inh_handles.flags[2] = 0; /* CreateProcess <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ /* <https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags> */ DWORD process_creation_flags = (mode == P_DETACH ? DETACHED_PROCESS : 0); /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ STARTUPINFO sinfo; sinfo.cb = sizeof (STARTUPINFO); sinfo.lpReserved = NULL; sinfo.lpDesktop = NULL; sinfo.lpTitle = NULL; if (compose_handles_block (&inh_handles, &sinfo) < 0) { int saved_errno = errno; free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = saved_errno; return -1; } PROCESS_INFORMATION pinfo; if (!CreateProcess (resolved_progname, command, NULL, NULL, TRUE, process_creation_flags, envblock, currdir, &sinfo, &pinfo)) { DWORD error = GetLastError (); free (sinfo.lpReserved2); free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = convert_CreateProcess_error (error); return -1; } if (pinfo.hThread) CloseHandle (pinfo.hThread); free (sinfo.lpReserved2); free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); switch (mode) { case P_WAIT: { /* Wait until it terminates. Then get its exit status code. */ switch (WaitForSingleObject (pinfo.hProcess, INFINITE)) { case WAIT_OBJECT_0: break; case WAIT_FAILED: errno = ECHILD; return -1; default: abort (); } DWORD exit_code; if (!GetExitCodeProcess (pinfo.hProcess, &exit_code)) { errno = ECHILD; return -1; } CloseHandle (pinfo.hProcess); return exit_code; } case P_NOWAIT: /* Return pinfo.hProcess, not pinfo.dwProcessId. */ return (intptr_t) pinfo.hProcess; case P_DETACH: case P_OVERLAY: CloseHandle (pinfo.hProcess); return 0; default: /* Already checked above. */ abort (); } /*NOTREACHED*/ out_of_memory_2: free (command); out_of_memory_1: if (resolved_progname != progname) free ((char *) resolved_progname); errno = ENOMEM; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-spawn.h���������������������������������������������������������0000664�0000000�0000000�00000015720�14110572173�0020043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. Native Windows API. Copyright (C) 2001, 2003-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. 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 _WINDOWS_SPAWN_H #define _WINDOWS_SPAWN_H #include <stdbool.h> #include <stdint.h> #include <stdlib.h> /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Windows CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" - '*', '?' characters may get expanded through wildcard expansion in the callee: By default, in the callee, the initialization code before main() takes the result of GetCommandLine(), wildcard-expands it, and passes it to main(). The exceptions to this rule are: - programs that inspect GetCommandLine() and ignore argv, - mingw programs that have a global variable 'int _CRT_glob = 0;', - Cygwin programs, when invoked from a Cygwin program. prepare_spawn creates and returns a new argument vector, where the arguments are appropriately quoted and an additional argument "sh.exe" has been added at the beginning. The new argument vector is freshly allocated. The memory for all its elements is allocated within *MEM_TO_FREE, which is freshly allocated as well. In case of memory allocation failure, NULL is returned, with errno set. */ extern const char ** prepare_spawn (const char * const *argv, char **mem_to_free); /* Composes the command to be passed to CreateProcess(). ARGV must contain appropriately quoted arguments, as returned by prepare_spawn. Returns a freshly allocated string. In case of memory allocation failure, NULL is returned, with errno set. */ extern char * compose_command (const char * const *argv) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* Composes the block of memory that contains the environment variables. ENVP must contain an environment (a NULL-terminated array of string of the form VARIABLE=VALUE). Returns a freshly allocated block of memory. In case of memory allocation failure, NULL is returned, with errno set. */ extern char * compose_envblock (const char * const *envp) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* This struct keeps track of which handles to pass to a subprocess, and with which flags. All of the handles here are inheritable. Regarding handle inheritance, see <https://docs.microsoft.com/en-us/windows/win32/sysinfo/handle-inheritance> */ struct inheritable_handles { /* The number of occupied entries in the two arrays below. 3 <= count <= allocated. */ size_t count; /* The number of allocated entries in the two arrays below. */ size_t allocated; /* handles[0..count-1] are the occupied entries. handles[fd] is either INVALID_HANDLE_VALUE or an inheritable handle. */ HANDLE *handles; /* flags[0..count-1] are the occupied entries. flags[fd] is only relevant if handles[fd] != INVALID_HANDLE_VALUE. It is a bit mask consisting of: - 32 for O_APPEND. */ unsigned char *flags; }; /* Initializes a set of inheritable handles, filling in all inheritable handles assigned to file descriptors. If DUPLICATE is true, the handles stored in the set are duplicates. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ extern int init_inheritable_handles (struct inheritable_handles *inh_handles, bool duplicate); /* Fills a set of inheritable handles into a STARTUPINFO for CreateProcess(). Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ extern int compose_handles_block (const struct inheritable_handles *inh_handles, STARTUPINFOA *sinfo); /* Frees the memory held by a set of inheritable handles. */ extern void free_inheritable_handles (struct inheritable_handles *inh_handles); /* Converts a CreateProcess() error code (retrieved through GetLastError()) to an errno value. */ extern int convert_CreateProcess_error (DWORD error); /* Creates a subprocess. MODE is either P_WAIT or P_NOWAIT. PROGNAME is the program to invoke. ARGV is the NULL-terminated array of arguments, ARGV[0] being PROGNAME by convention. ENVP is the NULL-terminated set of environment variable assignments, or NULL to inherit the initial environ variable assignments from the caller and ignore all calls to putenv(), setenv(), unsetenv() done in the caller. CURRDIR is the directory in which to start the program, or NULL to inherit the working directory from the caller. STDIN_HANDLE, STDOUT_HANDLE, STDERR_HANDLE are the handles to use for the first three file descriptors in the callee process. Returns - 0 for success (if MODE is P_WAIT), or - a handle that be passed to _cwait (on Windows) or waitpid (on OS/2), or - -1 upon error, with errno set. */ extern intptr_t spawnpvech (int mode, const char *progname, const char * const *argv, const char * const *envp, const char *currdir, HANDLE stdin_handle, HANDLE stdout_handle, HANDLE stderr_handle); #endif /* _WINDOWS_SPAWN_H */ ������������������������������������������������gnulib-20210822~d383792/lib/windows-spin.c����������������������������������������������������������0000664�0000000�0000000�00000004050�14110572173�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Spin locks (native Windows implementation). Copyright (C) 2019-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include "windows-spin.h" #include <errno.h> void glwthread_spin_init (glwthread_spinlock_t *lock) { lock->word = 0; MemoryBarrier (); } int glwthread_spin_lock (glwthread_spinlock_t *lock) { /* Wait until lock->word becomes 0, then replace it with 1. */ /* InterlockedCompareExchange <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedcompareexchange> */ while (InterlockedCompareExchange (&lock->word, 1, 0)) ; return 0; } int glwthread_spin_trylock (glwthread_spinlock_t *lock) { /* If lock->word is 0, then replace it with 1. */ /* InterlockedCompareExchange <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedcompareexchange> */ if (InterlockedCompareExchange (&lock->word, 1, 0)) return EBUSY; return 0; } int glwthread_spin_unlock (glwthread_spinlock_t *lock) { /* If lock->word is 1, then replace it with 0. */ /* InterlockedCompareExchange <https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedcompareexchange> */ if (!InterlockedCompareExchange (&lock->word, 0, 1)) return EINVAL; return 0; } int glwthread_spin_destroy (glwthread_spinlock_t *lock) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-spin.h����������������������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Spin locks (native Windows implementation). Copyright (C) 2019-2021 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>, 2019. */ #ifndef _WINDOWS_SPIN_H #define _WINDOWS_SPIN_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { LONG volatile word; } glwthread_spinlock_t; #define GLWTHREAD_SPIN_INIT { 0 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_spin_init (glwthread_spinlock_t *lock); extern int glwthread_spin_lock (glwthread_spinlock_t *lock); extern int glwthread_spin_trylock (glwthread_spinlock_t *lock); extern int glwthread_spin_unlock (glwthread_spinlock_t *lock); extern int glwthread_spin_destroy (glwthread_spinlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_SPIN_H */ �������������������������������������gnulib-20210822~d383792/lib/windows-thread.c��������������������������������������������������������0000664�0000000�0000000�00000015132�14110572173�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-thread.h" #include <errno.h> #include <process.h> #include <stdlib.h> #include "windows-once.h" #include "windows-tls.h" /* The Thread-Local Storage (TLS) key that allows to access each thread's 'struct glwthread_thread_struct *' pointer. */ static DWORD self_key = (DWORD)-1; /* Initializes self_key. This function must only be called once. */ static void do_init_self_key (void) { self_key = TlsAlloc (); /* If this fails, we're hosed. */ if (self_key == (DWORD)-1) abort (); } /* Initializes self_key. */ static void init_self_key (void) { static glwthread_once_t once = GLWTHREAD_ONCE_INIT; glwthread_once (&once, do_init_self_key); } /* This structure contains information about a thread. It is stored in TLS under key self_key. */ struct glwthread_thread_struct { /* Fields for managing the handle. */ HANDLE volatile handle; CRITICAL_SECTION handle_lock; /* Fields for managing the exit value. */ BOOL volatile detached; void * volatile result; /* Fields for managing the thread start. */ void * (*func) (void *); void *arg; }; /* Return a real HANDLE object for the current thread. */ static HANDLE get_current_thread_handle (void) { HANDLE this_handle; /* GetCurrentThread() returns a pseudo-handle, i.e. only a symbolic identifier, not a real handle. */ if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &this_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) abort (); return this_handle; } glwthread_thread_t glwthread_thread_self (void) { glwthread_thread_t thread; if (self_key == (DWORD)-1) init_self_key (); thread = TlsGetValue (self_key); if (thread == NULL) { /* This happens only in threads that have not been created through glthread_create(), such as the main thread. */ for (;;) { thread = (struct glwthread_thread_struct *) malloc (sizeof (struct glwthread_thread_struct)); if (thread != NULL) break; /* Memory allocation failed. There is not much we can do. Have to busy-loop, waiting for the availability of memory. */ Sleep (1); } thread->handle = get_current_thread_handle (); InitializeCriticalSection (&thread->handle_lock); thread->detached = FALSE; /* This can lead to a memory leak. */ thread->result = NULL; /* just to be deterministic */ TlsSetValue (self_key, thread); } return thread; } /* The main function of a freshly creating thread. It's a wrapper around the FUNC and ARG arguments passed to glthread_create_func. */ static unsigned int WINAPI wrapper_func (void *varg) { struct glwthread_thread_struct *thread = (struct glwthread_thread_struct *) varg; EnterCriticalSection (&thread->handle_lock); /* Create a new handle for the thread only if the parent thread did not yet fill in the handle. */ if (thread->handle == NULL) thread->handle = get_current_thread_handle (); LeaveCriticalSection (&thread->handle_lock); if (self_key == (DWORD)-1) init_self_key (); TlsSetValue (self_key, thread); /* Run the thread. Store the exit value if the thread was not terminated otherwise. */ thread->result = thread->func (thread->arg); /* Process the TLS destructors. */ glwthread_tls_process_destructors (); if (thread->detached) { /* Clean up the thread, like thrd_join would do. */ DeleteCriticalSection (&thread->handle_lock); CloseHandle (thread->handle); free (thread); } return 0; } int glwthread_thread_create (glwthread_thread_t *threadp, unsigned int attr, void * (*func) (void *), void *arg) { struct glwthread_thread_struct *thread = (struct glwthread_thread_struct *) malloc (sizeof (struct glwthread_thread_struct)); if (thread == NULL) return ENOMEM; thread->handle = NULL; InitializeCriticalSection (&thread->handle_lock); thread->detached = (attr & GLWTHREAD_ATTR_DETACHED ? TRUE : FALSE); thread->result = NULL; /* just to be deterministic */ thread->func = func; thread->arg = arg; { unsigned int thread_id; HANDLE thread_handle; thread_handle = (HANDLE) _beginthreadex (NULL, 100000, wrapper_func, thread, 0, &thread_id); /* calls CreateThread with the same arguments */ if (thread_handle == NULL) { DeleteCriticalSection (&thread->handle_lock); free (thread); return EAGAIN; } EnterCriticalSection (&thread->handle_lock); if (thread->handle == NULL) thread->handle = thread_handle; else /* thread->handle was already set by the thread itself. */ CloseHandle (thread_handle); LeaveCriticalSection (&thread->handle_lock); *threadp = thread; return 0; } } int glwthread_thread_join (glwthread_thread_t thread, void **retvalp) { if (thread == NULL) return EINVAL; if (thread == glwthread_thread_self ()) return EDEADLK; if (thread->detached) return EINVAL; if (WaitForSingleObject (thread->handle, INFINITE) == WAIT_FAILED) return EINVAL; if (retvalp != NULL) *retvalp = thread->result; DeleteCriticalSection (&thread->handle_lock); CloseHandle (thread->handle); free (thread); return 0; } int glwthread_thread_detach (glwthread_thread_t thread) { if (thread == NULL) return EINVAL; if (thread->detached) return EINVAL; thread->detached = TRUE; return 0; } void glwthread_thread_exit (void *retval) { glwthread_thread_t thread = glwthread_thread_self (); thread->result = retval; glwthread_tls_process_destructors (); _endthreadex (0); /* calls ExitThread (0) */ abort (); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-thread.h��������������������������������������������������������0000664�0000000�0000000�00000004365�14110572173�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_THREAD_H #define _WINDOWS_THREAD_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> /* The glwthread_thread_t is a pointer to a structure in memory. Why not the thread handle? If it were the thread handle, it would be hard to implement glwthread_thread_self() (since GetCurrentThread () returns a pseudo-handle, DuplicateHandle (GetCurrentThread ()) returns a handle that must be closed afterwards, and there is no function for quickly retrieving a thread handle from its id). Why not the thread id? I tried it. It did not work: Sometimes ids appeared that did not belong to running threads, and glthread_join failed with ESRCH. */ typedef struct glwthread_thread_struct *glwthread_thread_t; #ifdef __cplusplus extern "C" { #endif /* attr is a bit mask, consisting of the following bits: */ #define GLWTHREAD_ATTR_DETACHED 1 extern int glwthread_thread_create (glwthread_thread_t *threadp, unsigned int attr, void * (*func) (void *), void *arg); extern int glwthread_thread_join (glwthread_thread_t thread, void **retvalp); extern int glwthread_thread_detach (glwthread_thread_t thread); extern glwthread_thread_t glwthread_thread_self (void); extern _Noreturn void glwthread_thread_exit (void *retval); #ifdef __cplusplus } #endif #endif /* _WINDOWS_THREAD_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedmutex.c����������������������������������������������������0000664�0000000�0000000�00000015544�14110572173�0021077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-timedmutex.h" #include <errno.h> #include <stdlib.h> #include <sys/time.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA int glwthread_timedmutex_init (glwthread_timedmutex_t *mutex) { /* Attempt to allocate an auto-reset event object. */ /* CreateEvent <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-createeventa> */ HANDLE event = CreateEvent (NULL, FALSE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) return EAGAIN; mutex->event = event; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; return 0; } int glwthread_timedmutex_lock (glwthread_timedmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } EnterCriticalSection (&mutex->lock); return 0; } int glwthread_timedmutex_trylock (glwthread_timedmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; return 0; } int glwthread_timedmutex_timedlock (glwthread_timedmutex_t *mutex, const struct timespec *abstime) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } /* POSIX says: "Under no circumstance shall the function fail with a timeout if the mutex can be locked immediately. The validity of the abstime parameter need not be checked if the mutex can be locked immediately." Therefore start the loop with a TryEnterCriticalSection call. */ for (;;) { if (TryEnterCriticalSection (&mutex->lock)) break; { struct timeval currtime; DWORD timeout; DWORD result; gettimeofday (&currtime, NULL); /* Wait until another thread signals the event or until the abstime passes. */ if (currtime.tv_sec > abstime->tv_sec) timeout = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; timeout = seconds * 1000; if (timeout / 1000 != seconds) /* overflow? */ timeout = INFINITE; else { long milliseconds = abstime->tv_nsec / 1000000 - currtime.tv_usec / 1000; if (milliseconds >= 0) { timeout += milliseconds; if (timeout < milliseconds) /* overflow? */ timeout = INFINITE; } else { if (timeout >= - milliseconds) timeout -= (- milliseconds); else timeout = 0; } } } if (timeout == 0) return ETIMEDOUT; /* WaitForSingleObject <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitforsingleobject> */ result = WaitForSingleObject (mutex->event, timeout); if (result == WAIT_FAILED) abort (); if (result == WAIT_TIMEOUT) return ETIMEDOUT; /* Another thread has just unlocked the mutex. We have good chances at locking it now. */ } } return 0; } int glwthread_timedmutex_unlock (glwthread_timedmutex_t *mutex) { if (!mutex->guard.done) return EINVAL; LeaveCriticalSection (&mutex->lock); /* Notify one of the threads that were waiting with a timeout. */ /* SetEvent <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-setevent> */ SetEvent (mutex->event); return 0; } int glwthread_timedmutex_destroy (glwthread_timedmutex_t *mutex) { if (!mutex->guard.done) return EINVAL; DeleteCriticalSection (&mutex->lock); /* CloseHandle <https://docs.microsoft.com/en-us/windows/desktop/api/handleapi/nf-handleapi-closehandle> */ CloseHandle (mutex->event); mutex->guard.done = 0; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedmutex.h����������������������������������������������������0000664�0000000�0000000�00000003616�14110572173�0021101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_TIMEDMUTEX_H #define _WINDOWS_TIMEDMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include <time.h> #include "windows-initguard.h" typedef struct { glwthread_initguard_t guard; /* protects the initialization */ HANDLE event; CRITICAL_SECTION lock; } glwthread_timedmutex_t; #define GLWTHREAD_TIMEDMUTEX_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern int glwthread_timedmutex_init (glwthread_timedmutex_t *mutex); extern int glwthread_timedmutex_lock (glwthread_timedmutex_t *mutex); extern int glwthread_timedmutex_trylock (glwthread_timedmutex_t *mutex); extern int glwthread_timedmutex_timedlock (glwthread_timedmutex_t *mutex, const struct timespec *abstime); extern int glwthread_timedmutex_unlock (glwthread_timedmutex_t *mutex); extern int glwthread_timedmutex_destroy (glwthread_timedmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_TIMEDMUTEX_H */ ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedrecmutex.c�������������������������������������������������0000664�0000000�0000000�00000020203�14110572173�0021555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed recursive mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-timedrecmutex.h" #include <errno.h> #include <stdlib.h> #include <sys/time.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA int glwthread_timedrecmutex_init (glwthread_timedrecmutex_t *mutex) { mutex->owner = 0; mutex->depth = 0; /* Attempt to allocate an auto-reset event object. */ /* CreateEvent <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-createeventa> */ HANDLE event = CreateEvent (NULL, FALSE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) return EAGAIN; mutex->event = event; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; return 0; } int glwthread_timedrecmutex_lock (glwthread_timedrecmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedrecmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { EnterCriticalSection (&mutex->lock); mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_timedrecmutex_trylock (glwthread_timedrecmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedrecmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_timedrecmutex_timedlock (glwthread_timedrecmutex_t *mutex, const struct timespec *abstime) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) { /* This thread is the first one to need this mutex. Initialize it. */ int err = glwthread_timedrecmutex_init (mutex); if (err != 0) { /* Undo increment. */ InterlockedDecrement (&mutex->guard.started); return err; } } else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { /* POSIX says: "Under no circumstance shall the function fail with a timeout if the mutex can be locked immediately. The validity of the abstime parameter need not be checked if the mutex can be locked immediately." Therefore start the loop with a TryEnterCriticalSection call. */ for (;;) { if (TryEnterCriticalSection (&mutex->lock)) break; { struct timeval currtime; DWORD timeout; DWORD result; gettimeofday (&currtime, NULL); /* Wait until another thread signals the event or until the abstime passes. */ if (currtime.tv_sec > abstime->tv_sec) timeout = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; timeout = seconds * 1000; if (timeout / 1000 != seconds) /* overflow? */ timeout = INFINITE; else { long milliseconds = abstime->tv_nsec / 1000000 - currtime.tv_usec / 1000; if (milliseconds >= 0) { timeout += milliseconds; if (timeout < milliseconds) /* overflow? */ timeout = INFINITE; } else { if (timeout >= - milliseconds) timeout -= (- milliseconds); else timeout = 0; } } } if (timeout == 0) return ETIMEDOUT; /* WaitForSingleObject <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitforsingleobject> */ result = WaitForSingleObject (mutex->event, timeout); if (result == WAIT_FAILED) abort (); if (result == WAIT_TIMEOUT) return ETIMEDOUT; /* Another thread has just unlocked the mutex. We have good chances at locking it now. */ } } mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_timedrecmutex_unlock (glwthread_timedrecmutex_t *mutex) { if (mutex->owner != GetCurrentThreadId ()) return EPERM; if (mutex->depth == 0) return EINVAL; if (--(mutex->depth) == 0) { mutex->owner = 0; LeaveCriticalSection (&mutex->lock); /* Notify one of the threads that were waiting with a timeout. */ /* SetEvent <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-setevent> */ SetEvent (mutex->event); } return 0; } int glwthread_timedrecmutex_destroy (glwthread_timedrecmutex_t *mutex) { if (mutex->owner != 0) return EBUSY; DeleteCriticalSection (&mutex->lock); /* CloseHandle <https://docs.microsoft.com/en-us/windows/desktop/api/handleapi/nf-handleapi-closehandle> */ CloseHandle (mutex->event); mutex->guard.done = 0; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedrecmutex.h�������������������������������������������������0000664�0000000�0000000�00000004327�14110572173�0021573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed recursive mutexes (native Windows implementation). Copyright (C) 2005-2021 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>, 2005, 2019. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_TIMEDRECMUTEX_H #define _WINDOWS_TIMEDRECMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include <time.h> #include "windows-initguard.h" /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { glwthread_initguard_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; HANDLE event; CRITICAL_SECTION lock; } glwthread_timedrecmutex_t; #define GLWTHREAD_TIMEDRECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } #ifdef __cplusplus extern "C" { #endif extern int glwthread_timedrecmutex_init (glwthread_timedrecmutex_t *mutex); extern int glwthread_timedrecmutex_lock (glwthread_timedrecmutex_t *mutex); extern int glwthread_timedrecmutex_trylock (glwthread_timedrecmutex_t *mutex); extern int glwthread_timedrecmutex_timedlock (glwthread_timedrecmutex_t *mutex, const struct timespec *abstime); extern int glwthread_timedrecmutex_unlock (glwthread_timedrecmutex_t *mutex); extern int glwthread_timedrecmutex_destroy (glwthread_timedrecmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_TIMEDRECMUTEX_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedrwlock.c���������������������������������������������������0000664�0000000�0000000�00000053610�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed read-write locks (native Windows implementation). Copyright (C) 2005-2021 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>, 2019. */ #include <config.h> /* Specification. */ #include "windows-timedrwlock.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <sys/time.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as linked lists. */ #define glwthread_waitqueue_t glwthread_clinked_waitqueue_t /* All links of a circular list, except the anchor, are of this type, carrying a payload. */ struct glwthread_waitqueue_element { struct glwthread_waitqueue_link link; /* must be the first field! */ HANDLE event; /* Waiting thread, represented by an event. This field is immutable once initialized. */ }; static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->wq_list.wql_next = &wq->wq_list; wq->wq_list.wql_prev = &wq->wq_list; wq->count = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns NULL if an allocation failure occurs. */ static struct glwthread_waitqueue_element * glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { struct glwthread_waitqueue_element *elt; HANDLE event; /* Allocate the memory for the waitqueue element on the heap, not on the thread's stack. If the thread exits unexpectedly, we prefer to leak some memory rather than to access unavailable memory and crash. */ elt = (struct glwthread_waitqueue_element *) malloc (sizeof (struct glwthread_waitqueue_element)); if (elt == NULL) /* No more memory. */ return NULL; /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) { /* No way to allocate an event. */ free (elt); return NULL; } elt->event = event; /* Insert elt at the end of the circular list. */ (elt->link.wql_prev = wq->wq_list.wql_prev)->wql_next = &elt->link; (elt->link.wql_next = &wq->wq_list)->wql_prev = &elt->link; wq->count++; return elt; } /* Removes the current thread, represented by a 'struct glwthread_waitqueue_element *', from a wait queue. Returns true if is was found and removed, false if it was not present. */ static bool glwthread_waitqueue_remove (glwthread_waitqueue_t *wq, struct glwthread_waitqueue_element *elt) { if (elt->link.wql_next != NULL && elt->link.wql_prev != NULL) { /* Remove elt from the circular list. */ struct glwthread_waitqueue_link *prev = elt->link.wql_prev; struct glwthread_waitqueue_link *next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; wq->count--; return true; } else return false; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { if (wq->wq_list.wql_next != &wq->wq_list) { struct glwthread_waitqueue_element *elt = (struct glwthread_waitqueue_element *) wq->wq_list.wql_next; struct glwthread_waitqueue_link *prev; struct glwthread_waitqueue_link *next; /* Remove elt from the circular list. */ prev = &wq->wq_list; /* = elt->link.wql_prev; */ next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; wq->count--; SetEvent (elt->event); /* After the SetEvent, this thread cannot access *elt any more, because the woken-up thread will quickly call free (elt). */ } } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { struct glwthread_waitqueue_link *l; for (l = wq->wq_list.wql_next; l != &wq->wq_list; ) { struct glwthread_waitqueue_element *elt = (struct glwthread_waitqueue_element *) l; struct glwthread_waitqueue_link *prev; struct glwthread_waitqueue_link *next; /* Remove elt from the circular list. */ prev = &wq->wq_list; /* = elt->link.wql_prev; */ next = elt->link.wql_next; prev->wql_next = next; next->wql_prev = prev; elt->link.wql_next = NULL; elt->link.wql_prev = NULL; wq->count--; SetEvent (elt->event); /* After the SetEvent, this thread cannot access *elt any more, because the woken-up thread will quickly call free (elt). */ l = next; } if (!(wq->wq_list.wql_next == &wq->wq_list && wq->wq_list.wql_prev == &wq->wq_list && wq->count == 0)) abort (); } void glwthread_timedrwlock_init (glwthread_timedrwlock_t *lock) { InitializeCriticalSection (&lock->lock); glwthread_waitqueue_init (&lock->waiting_readers); glwthread_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glwthread_timedrwlock_rdlock (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&lock->waiting_readers); if (elt != NULL) { HANDLE event = elt->event; DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); free (elt); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_wrlock (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&lock->waiting_writers); if (elt != NULL) { HANDLE event = elt->event; DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); free (elt); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_tryrdlock (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_trywrlock (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_timedrdlock (glwthread_timedrwlock_t *lock, const struct timespec *abstime) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&lock->waiting_readers); if (elt != NULL) { HANDLE event = elt->event; struct timeval currtime; DWORD timeout; DWORD result; int retval; LeaveCriticalSection (&lock->lock); gettimeofday (&currtime, NULL); /* Wait until another thread signals this event or until the abstime passes. */ if (currtime.tv_sec > abstime->tv_sec) timeout = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; timeout = seconds * 1000; if (timeout / 1000 != seconds) /* overflow? */ timeout = INFINITE; else { long milliseconds = abstime->tv_nsec / 1000000 - currtime.tv_usec / 1000; if (milliseconds >= 0) { timeout += milliseconds; if (timeout < milliseconds) /* overflow? */ timeout = INFINITE; } else { if (timeout >= - milliseconds) timeout -= (- milliseconds); else timeout = 0; } } } if (timeout != 0) { /* WaitForSingleObject <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitforsingleobject> */ result = WaitForSingleObject (event, timeout); if (result == WAIT_FAILED) abort (); if (result != WAIT_TIMEOUT) { CloseHandle (event); free (elt); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } } EnterCriticalSection (&lock->lock); /* Remove ourselves from the waiting_readers. */ if (glwthread_waitqueue_remove (&lock->waiting_readers, elt)) retval = ETIMEDOUT; else /* The event was signalled just now. */ retval = 0; LeaveCriticalSection (&lock->lock); CloseHandle (event); free (elt); if (retval == 0) /* Same assertion as above. */ if (!(lock->runcount > 0)) abort (); return retval; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_timedwrlock (glwthread_timedrwlock_t *lock, const struct timespec *abstime) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_timedrwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ struct glwthread_waitqueue_element *elt = glwthread_waitqueue_add (&lock->waiting_writers); if (elt != NULL) { HANDLE event = elt->event; struct timeval currtime; DWORD timeout; DWORD result; int retval; LeaveCriticalSection (&lock->lock); gettimeofday (&currtime, NULL); /* Wait until another thread signals this event or until the abstime passes. */ if (currtime.tv_sec > abstime->tv_sec) timeout = 0; else { unsigned long seconds = abstime->tv_sec - currtime.tv_sec; timeout = seconds * 1000; if (timeout / 1000 != seconds) /* overflow? */ timeout = INFINITE; else { long milliseconds = abstime->tv_nsec / 1000000 - currtime.tv_usec / 1000; if (milliseconds >= 0) { timeout += milliseconds; if (timeout < milliseconds) /* overflow? */ timeout = INFINITE; } else { if (timeout >= - milliseconds) timeout -= (- milliseconds); else timeout = 0; } } } if (timeout != 0) { /* WaitForSingleObject <https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitforsingleobject> */ result = WaitForSingleObject (event, timeout); if (result == WAIT_FAILED) abort (); if (result != WAIT_TIMEOUT) { CloseHandle (event); free (elt); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } } EnterCriticalSection (&lock->lock); /* Remove ourselves from the waiting_writers. */ if (glwthread_waitqueue_remove (&lock->waiting_writers, elt)) retval = ETIMEDOUT; else /* The event was signalled just now. */ retval = 0; LeaveCriticalSection (&lock->lock); CloseHandle (event); free (elt); if (retval == 0) /* Same assertion as above. */ if (!(lock->runcount == -1)) abort (); return retval; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_unlock (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; glwthread_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; glwthread_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glwthread_timedrwlock_destroy (glwthread_timedrwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-timedrwlock.h���������������������������������������������������0000664�0000000�0000000�00000005655�14110572173�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Timed read-write locks (native Windows implementation). Copyright (C) 2019-2021 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>, 2019. */ #ifndef _WINDOWS_TIMEDRWLOCK_H #define _WINDOWS_TIMEDRWLOCK_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include <time.h> #include "windows-initguard.h" #ifndef _glwthread_linked_waitqueue_link_defined #define _glwthread_linked_waitqueue_link_defined struct glwthread_waitqueue_link { struct glwthread_waitqueue_link *wql_next; struct glwthread_waitqueue_link *wql_prev; }; #endif /* _glwthread_linked_waitqueue_link_defined */ typedef struct { struct glwthread_waitqueue_link wq_list; /* circular list of waiting threads */ unsigned int count; /* number of waiting threads */ } glwthread_clinked_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_clinked_waitqueue_t waiting_readers; /* waiting readers */ glwthread_clinked_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } glwthread_timedrwlock_t; #define GLWTHREAD_TIMEDRWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_timedrwlock_init (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_rdlock (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_wrlock (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_tryrdlock (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_trywrlock (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_timedrdlock (glwthread_timedrwlock_t *lock, const struct timespec *abstime); extern int glwthread_timedrwlock_timedwrlock (glwthread_timedrwlock_t *lock, const struct timespec *abstime); extern int glwthread_timedrwlock_unlock (glwthread_timedrwlock_t *lock); extern int glwthread_timedrwlock_destroy (glwthread_timedrwlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_TIMEDRWLOCK_H */ �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-tls.c�����������������������������������������������������������0000664�0000000�0000000�00000024610�14110572173�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. */ #include <config.h> /* Specification. */ #include "windows-tls.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #include "windows-once.h" void * glwthread_tls_get (glwthread_tls_key_t key) { return TlsGetValue (key); } int glwthread_tls_set (glwthread_tls_key_t key, void *value) { if (!TlsSetValue (key, value)) return EINVAL; return 0; } /* The following variables keep track of TLS keys with non-NULL destructor. */ static glwthread_once_t dtor_table_init_once = GLWTHREAD_ONCE_INIT; static CRITICAL_SECTION dtor_table_lock; struct dtor { glwthread_tls_key_t key; void (*destructor) (void *); }; /* The table of dtors. */ static struct dtor *dtor_table; /* Number of active entries in the dtor_table. */ static unsigned int dtors_count; /* Valid indices into dtor_table are 0..dtors_used-1. */ static unsigned int dtors_used; /* Allocation size of dtor_table. */ static unsigned int dtors_allocated; /* Invariant: 0 <= dtors_count <= dtors_used <= dtors_allocated. */ /* Number of threads that are currently processing destructors. */ static unsigned int dtor_processing_threads; static void dtor_table_initialize (void) { InitializeCriticalSection (&dtor_table_lock); /* The other variables are already initialized to NULL or 0, respectively. */ } static void dtor_table_ensure_initialized (void) { glwthread_once (&dtor_table_init_once, dtor_table_initialize); } /* Shrinks dtors_used down to dtors_count, by replacing inactive entries with active ones. */ static void dtor_table_shrink_used (void) { unsigned int i = 0; unsigned int j = dtors_used; for (;;) { BOOL i_found = FALSE; BOOL j_found = FALSE; /* Find the next inactive entry, from the left. */ for (; i < dtors_count;) { if (dtor_table[i].destructor == NULL) { i_found = TRUE; break; } i++; } /* Find the next active entry, from the right. */ for (; j > dtors_count;) { j--; if (dtor_table[j].destructor != NULL) { j_found = TRUE; break; } } if (i_found != j_found) /* dtors_count was apparently wrong. */ abort (); if (!i_found) break; /* i_found and j_found are TRUE. Swap the two entries. */ dtor_table[i] = dtor_table[j]; i++; } dtors_used = dtors_count; } void glwthread_tls_process_destructors (void) { unsigned int repeat; dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); } dtor_processing_threads++; for (repeat = GLWTHREAD_DESTRUCTOR_ITERATIONS; repeat > 0; repeat--) { unsigned int destructors_run = 0; /* Iterate across dtor_table. We don't need to make a copy of dtor_table, because * When another thread calls glwthread_tls_key_create with a non-NULL destructor argument, this will possibly reallocate the dtor_table array and increase dtors_allocated as well as dtors_used and dtors_count, but it will not change dtors_used nor the contents of the first dtors_used entries of dtor_table. * When another thread calls glwthread_tls_key_delete, this will possibly set some 'destructor' member to NULL, thus marking an entry as inactive, but it will not otherwise change dtors_used nor the contents of the first dtors_used entries of dtor_table. */ unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) { struct dtor current = dtor_table[i]; if (current.destructor != NULL) { /* The current dtor has not been deleted yet. */ void *current_value = glwthread_tls_get (current.key); if (current_value != NULL) { /* The current value is non-NULL. Run the destructor. */ glwthread_tls_set (current.key, NULL); LeaveCriticalSection (&dtor_table_lock); current.destructor (current_value); EnterCriticalSection (&dtor_table_lock); destructors_run++; } } } /* When all TLS values were already NULL, no further iterations are needed. */ if (destructors_run == 0) break; } dtor_processing_threads--; LeaveCriticalSection (&dtor_table_lock); } int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)) { if (destructor != NULL) { dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); } while (dtors_used == dtors_allocated) { /* Need to grow the dtor_table. */ unsigned int new_allocated = 2 * dtors_allocated + 1; if (new_allocated < 7) new_allocated = 7; if (new_allocated <= dtors_allocated) /* overflow? */ new_allocated = UINT_MAX; LeaveCriticalSection (&dtor_table_lock); { struct dtor *new_table = (struct dtor *) malloc (new_allocated * sizeof (struct dtor)); if (new_table == NULL) return ENOMEM; EnterCriticalSection (&dtor_table_lock); /* Attention! dtors_used, dtors_allocated may have changed! */ if (dtors_used < new_allocated) { if (dtors_allocated < new_allocated) { /* The new_table is useful. */ memcpy (new_table, dtor_table, dtors_used * sizeof (struct dtor)); dtor_table = new_table; dtors_allocated = new_allocated; } else { /* The new_table is not useful, since another thread meanwhile allocated a drop_table that is at least as large. */ free (new_table); } break; } /* The new_table is not useful, since other threads increased dtors_used. Free it any retry. */ free (new_table); } } /* Here dtors_used < dtors_allocated. */ { /* Allocate a new key. */ glwthread_tls_key_t key = TlsAlloc (); if (key == (DWORD)-1) { LeaveCriticalSection (&dtor_table_lock); return EAGAIN; } /* Store the new dtor in the dtor_table, after all used entries. Do not overwrite inactive entries with indices < dtors_used, in order not to disturb glwthread_tls_process_destructors invocations that may be executing in other threads. */ dtor_table[dtors_used].key = key; dtor_table[dtors_used].destructor = destructor; dtors_used++; dtors_count++; LeaveCriticalSection (&dtor_table_lock); *keyp = key; } } else { /* Allocate a new key. */ glwthread_tls_key_t key = TlsAlloc (); if (key == (DWORD)-1) return EAGAIN; *keyp = key; } return 0; } int glwthread_tls_key_delete (glwthread_tls_key_t key) { /* Should the destructor be called for all threads that are currently running? Probably not, because - ISO C does not specify when the destructor is to be invoked at all. - In POSIX, the destructor functions specified with pthread_key_create() are invoked at thread exit. - It would be hard to implement, because there are no primitives for accessing thread-specific values from a different thread. */ dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); /* Here dtors_used == dtors_count. */ /* Find the key in dtor_table. */ { unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) if (dtor_table[i].key == key) { if (i < dtors_used - 1) /* Swap the entries i and dtors_used - 1. */ dtor_table[i] = dtor_table[dtors_used - 1]; dtors_count = dtors_used = dtors_used - 1; break; } } } else { /* Be careful not to disturb the glwthread_tls_process_destructors invocations that are executing in other threads. */ unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) if (dtor_table[i].destructor != NULL /* skip inactive entries */ && dtor_table[i].key == key) { /* Mark this entry as inactive. */ dtor_table[i].destructor = NULL; dtors_count = dtors_count - 1; break; } } LeaveCriticalSection (&dtor_table_lock); /* Now we have ensured that glwthread_tls_process_destructors will no longer use this key. */ if (!TlsFree (key)) return EINVAL; return 0; } ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/windows-tls.h�����������������������������������������������������������0000664�0000000�0000000�00000002705�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage (native Windows implementation). Copyright (C) 2005-2021 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>, 2005. */ #ifndef _WINDOWS_TLS_H #define _WINDOWS_TLS_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef DWORD glwthread_tls_key_t; #ifdef __cplusplus extern "C" { #endif extern int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)); extern void *glwthread_tls_get (glwthread_tls_key_t key); extern int glwthread_tls_set (glwthread_tls_key_t key, void *value); extern int glwthread_tls_key_delete (glwthread_tls_key_t key); extern void glwthread_tls_process_destructors (void); #define GLWTHREAD_DESTRUCTOR_ITERATIONS 4 #ifdef __cplusplus } #endif #endif /* _WINDOWS_TLS_H */ �����������������������������������������������������������gnulib-20210822~d383792/lib/wmemchr-impl.h����������������������������������������������������������0000664�0000000�0000000�00000001747�14110572173�0017630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide character array for a wide character. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wmemchr (const wchar_t *s, wchar_t c, size_t n) { for (; n > 0; s++, n--) { if (*s == c) return (wchar_t *) s; } return NULL; } �������������������������gnulib-20210822~d383792/lib/wmemchr.c���������������������������������������������������������������0000664�0000000�0000000�00000001626�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide character array for a wide character. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemchr-impl.h" ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemcmp-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002263�14110572173�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare wide character arrays. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ int wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n) { for (; n > 0;) { wchar_t wc1 = *s1++; wchar_t wc2 = *s2++; if (wc1 == wc2) { n--; continue; } /* Note that wc1 and wc2 each have at most 31 bits. */ return (int)wc1 - (int)wc2; /* > 0 if wc1 > wc2, < 0 if wc1 < wc2. */ } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemcmp.c���������������������������������������������������������������0000664�0000000�0000000�00000001601�14110572173�0016654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare wide character arrays. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemcmp-impl.h" �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemcpy-impl.h����������������������������������������������������������0000664�0000000�0000000�00000001707�14110572173�0017643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wmemcpy (wchar_t *dest, const wchar_t *src, size_t n) { wchar_t *destptr = dest; for (; n > 0; n--) *destptr++ = *src++; return dest; } ���������������������������������������������������������gnulib-20210822~d383792/lib/wmemcpy.c���������������������������������������������������������������0000664�0000000�0000000�00000001575�14110572173�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemcpy-impl.h" �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemmove-impl.h���������������������������������������������������������0000664�0000000�0000000�00000002305�14110572173�0020011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wmemmove (wchar_t *dest, const wchar_t *src, size_t n) { if (dest < src) { wchar_t *destptr = dest; const wchar_t *srcptr = src; for (; n > 0; n--) *destptr++ = *srcptr++; } else if (dest > src) { wchar_t *destptr = dest + n - 1; const wchar_t *srcptr = src + n - 1; for (; n > 0; n--) *destptr-- = *srcptr--; } return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemmove.c��������������������������������������������������������������0000664�0000000�0000000�00000001576�14110572173�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemmove-impl.h" ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmempcpy.c��������������������������������������������������������������0000664�0000000�0000000�00000002107�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array, return pointer after last written wide character. Copyright (C) 2020-2021 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> /* Copy N wide characters of SRC to DEST. Return pointer to wide characters after the last written wide character. */ wchar_t * wmempcpy (wchar_t *dest, const wchar_t *src, size_t n) { return wmemcpy (dest, src, n) + n; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemset-impl.h����������������������������������������������������������0000664�0000000�0000000�00000001650�14110572173�0017640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill wide character array. Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. 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/>. */ wchar_t * wmemset (wchar_t *s, wchar_t c, size_t n) { wchar_t *ptr = s; for (; n > 0; n--) *ptr++ = c; return s; } ����������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/wmemset.c���������������������������������������������������������������0000664�0000000�0000000�00000001575�14110572173�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill wide character array. Copyright (C) 2011-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. 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/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemset-impl.h" �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/write-any-file.c��������������������������������������������������������0000664�0000000�0000000�00000002620�14110572173�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether we can write any file. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "write-any-file.h" #include "priv-set.h" #include "root-uid.h" #include <unistd.h> /* Return true if we know that we can write any file, including writing directories. */ bool can_write_any_file (void) { static bool initialized; static bool can_write; if (! initialized) { bool can = false; #if defined PRIV_FILE_DAC_WRITE can = (priv_set_ismember (PRIV_FILE_DAC_WRITE) == 1); #else /* In traditional Unix, only root can unlink directories. */ can = (geteuid () == ROOT_UID); #endif can_write = can; initialized = true; } return can_write; } ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/write-any-file.h��������������������������������������������������������0000664�0000000�0000000�00000001440�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether we can write any file. Copyright (C) 2007-2021 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 <stdbool.h> bool can_write_any_file (void); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/write.c�����������������������������������������������������������������0000664�0000000�0000000�00000012377�14110572173�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible write() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. 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/>. */ #include <config.h> /* Specification. */ #include <unistd.h> /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # undef write # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static ssize_t write_nothrow (int fd, const void *buf, size_t count) { ssize_t result; TRY_MSVC_INVAL { result = _write (fd, buf, count); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define write_nothrow _write # endif ssize_t rpl_write (int fd, const void *buf, size_t count) { for (;;) { ssize_t ret = write_nothrow (fd, buf, count); if (ret < 0) { # if GNULIB_NONBLOCKING if (errno == ENOSPC) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0) && (state & PIPE_NOWAIT) != 0) { /* h is a pipe in non-blocking mode. We can get here in four situations: 1. When the pipe buffer is full. 2. When count <= pipe_buf_size and the number of free bytes in the pipe buffer is < count. 3. When count > pipe_buf_size and the number of free bytes in the pipe buffer is > 0, < pipe_buf_size. 4. When count > pipe_buf_size and the pipe buffer is entirely empty. The cases 1 and 2 are POSIX compliant. In cases 3 and 4 POSIX specifies that write() must split the request and succeed with a partial write. We fix case 4. We don't fix case 3 because it is not essential for programs. */ DWORD out_size; /* size of the buffer for outgoing data */ DWORD in_size; /* size of the buffer for incoming data */ if (GetNamedPipeInfo (h, NULL, &out_size, &in_size, NULL)) { size_t reduced_count = count; /* In theory we need only one of out_size, in_size. But I don't know which of the two. The description is ambiguous. */ if (out_size != 0 && out_size < reduced_count) reduced_count = out_size; if (in_size != 0 && in_size < reduced_count) reduced_count = in_size; if (reduced_count < count) { /* Attempt to write only the first part. */ count = reduced_count; continue; } } /* Change errno from ENOSPC to EAGAIN. */ errno = EAGAIN; } } } else # endif { # if GNULIB_SIGPIPE if (GetLastError () == ERROR_NO_DATA && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE) { /* Try to raise signal SIGPIPE. */ raise (SIGPIPE); /* If it is currently blocked or ignored, change errno from EINVAL to EPIPE. */ errno = EPIPE; } # endif } } return ret; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xalloc-die.c������������������������������������������������������������0000664�0000000�0000000�00000002435�14110572173�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 "xalloc.h" #include <stdlib.h> #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xalloc_die (void) { error (exit_failure, 0, "%s", _("memory exhausted")); /* _Noreturn cannot be given to error, since it may return if its first argument is 0. To help compilers understand the xalloc_die does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xalloc-oversized.h������������������������������������������������������0000664�0000000�0000000�00000005120�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2021 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/>. */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include <stddef.h> #include <stdint.h> /* True if N * S does not fit into both ptrdiff_t and size_t. N and S should be nonnegative and free of side effects. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size_t calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((s) != 0 \ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \ < (n))) /* Return 1 if and only if an array of N objects, each of size S, cannot exist reliably because its total size in bytes would exceed MIN (PTRDIFF_MAX, SIZE_MAX - 1). N and S should be nonnegative and free of side effects. Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can misbehave if N and S are both narrower than ptrdiff_t and size_t, and can be rewritten as (xalloc_oversized (N, S) ? NULL : malloc (N * (size_t) S)). This is a macro, not a function, so that it works even if an argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) #elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \ && PTRDIFF_MAX < SIZE_MAX) # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ ptrdiff_t __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xalloc.h����������������������������������������������������������������0000664�0000000�0000000�00000015065�14110572173�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-2021 Free Software Foundation, Inc. This 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 XALLOC_H_ #define XALLOC_H_ #include <stddef.h> #include <stdlib.h> #include <stdint.h> #if GNULIB_XALLOC # include "idx.h" # include "intprops.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 #endif #ifdef __cplusplus extern "C" { #endif #if GNULIB_XALLOC_DIE /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly 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); #endif /* GNULIB_XALLOC_DIE */ #if GNULIB_XALLOC void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xizalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xicalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *xirealloc (void *p, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xreallocarray (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); void *xireallocarray (void *p, idx_t n, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximemdup (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; char *ximemdup0 (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ # define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ # define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ # define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ # define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; /* FIXME: Deprecate this in favor of xreallocarray? */ /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { return xreallocarray (p, n, s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* GNULIB_XALLOC */ #ifdef __cplusplus } #endif #if GNULIB_XALLOC && defined __cplusplus /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template <typename T> inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template <typename T> inline T * xreallocarray (T *p, size_t n, size_t s) { return (T *) xreallocarray ((void *) p, n, s); } /* FIXME: Deprecate this in favor of xreallocarray? */ template <typename T> inline T * xnrealloc (T *p, size_t n, size_t s) { return xreallocarray (p, n, s); } template <typename T> inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template <typename T> inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template <typename T> inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif /* GNULIB_XALLOC && C++ */ _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xasprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000002014�14110572173�0017224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 1999, 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "xvasprintf.h" char * xasprintf (const char *format, ...) { va_list args; char *result; va_start (args, format); result = xvasprintf (format, args); va_end (args); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xbinary-io.c������������������������������������������������������������0000664�0000000�0000000�00000002234�14110572173�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O with checking Copyright 2017-2021 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/>. */ #include <config.h> #define XBINARY_IO_INLINE _GL_EXTERN_INLINE #include "xbinary-io.h" #include <errno.h> #include <error.h> #include <stdbool.h> #include "exitfail.h" #include "verify.h" #include "gettext.h" #define _(msgid) gettext (msgid) #if O_BINARY _Noreturn void xset_binary_mode_error (void) { error (exit_failure, errno, _("failed to set file descriptor text/binary mode")); assume (false); } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xbinary-io.h������������������������������������������������������������0000664�0000000�0000000�00000002635�14110572173�0017305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O with checking Copyright 2017-2021 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/>. */ #ifndef _XBINARY_IO_H #define _XBINARY_IO_H #include "binary-io.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XBINARY_IO_INLINE # define XBINARY_IO_INLINE _GL_INLINE #endif #if O_BINARY extern _Noreturn void xset_binary_mode_error (void); #else XBINARY_IO_INLINE void xset_binary_mode_error (void) {} #endif /* Set the mode of FD to MODE, which should be either O_TEXT or O_BINARY. Report an error and exit if this fails. */ XBINARY_IO_INLINE void xset_binary_mode (int fd, int mode) { if (set_binary_mode (fd, mode) < 0) xset_binary_mode_error (); } _GL_INLINE_HEADER_END #endif /* _XBINARY_IO_H */ ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xconcat-filename.c������������������������������������������������������0000664�0000000�0000000�00000002655�14110572173�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. This 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 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 <haible@clisp.cons.org>. */ #include <config.h> /* Specification. */ #include "concat-filename.h" #include "xalloc.h" /* Concatenate a directory filename, a relative filename and an optional suffix. The directory may end with the directory separator. The second argument may not start with the directory separator (it is relative). Return a freshly allocated filename. */ char * xconcatenated_filename (const char *directory, const char *filename, const char *suffix) { char *result; result = concatenated_filename (directory, filename, suffix); if (result == NULL) xalloc_die (); return result; } �����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xfreopen.c��������������������������������������������������������������0000664�0000000�0000000�00000002656�14110572173�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a file, reusing a given stream, with error checking. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "xfreopen.h" #include <errno.h> #include "error.h" #include "exitfail.h" #include "quote.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xfreopen (char const *filename, char const *mode, FILE *fp) { if (!freopen (filename, mode, fp)) { char const *f = (filename ? filename : (fp == stdin ? _("stdin") : (fp == stdout ? _("stdout") : (fp == stderr ? _("stderr") : _("unknown stream"))))); error (exit_failure, errno, _("failed to reopen %s with mode %s"), quote_n (0, f), quote_n (1, mode)); } } ����������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xfreopen.h��������������������������������������������������������������0000664�0000000�0000000�00000002040�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a file, reusing a given stream, with error checking. Copyright (C) 2009-2021 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 <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Opens the file FILENAME with mode MODE, reusing the given stream FP. Upon failure, emits an error message and exits the program. */ void xfreopen (char const *filename, char const *mode, FILE *fp); #ifdef __cplusplus } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetaname-impl.h��������������������������������������������������������0000664�0000000�0000000�00000004171�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetaname-impl.c -- common implementation of xgethostname and xgetdomainname Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering and Paul Eggert */ #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include "xalloc.h" /* Return the current host or domain name in malloc'd storage. If malloc fails, exit. Upon any other failure, return NULL and set errno. */ char * XGETANAME (void) { char buf[100]; idx_t size = sizeof buf; char *name = buf; char *alloc = NULL; while (1) { /* Use SIZE_1 here rather than SIZE to work around the bug in SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME even when the name is as long as the supplied buffer. */ idx_t size_1 = size - 1; name[size_1] = '\0'; errno = 0; if (GETANAME (name, size_1) == 0) { /* Check whether the name was possibly truncated; POSIX does not specify whether a truncated name is null-terminated. */ idx_t actual_size = strlen (name) + 1; if (actual_size < size_1) return alloc ? alloc : ximemdup (name, actual_size); errno = 0; } free (alloc); if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL /* macOS/Darwin does this when SIZE_1 is too small. */ && errno != ENOMEM) return NULL; name = alloc = xpalloc (NULL, &size, 1, -1, 1); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetcwd.c���������������������������������������������������������������0000664�0000000�0000000�00000002313�14110572173�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetcwd.c -- return current directory with unlimited length Copyright (C) 2001, 2003-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "xgetcwd.h" #include <errno.h> #include <unistd.h> #include "xalloc.h" /* Return the current directory, newly allocated. Upon an out-of-memory error, call xalloc_die. Upon any other type of error, return NULL with errno set. */ char * xgetcwd (void) { char *cwd = getcwd (NULL, 0); if (! cwd && errno == ENOMEM) xalloc_die (); return cwd; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetcwd.h���������������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* prototype for xgetcwd Copyright (C) 1995, 2001, 2003, 2009-2021 Free Software Foundation, Inc. This 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 <stdlib.h> extern char *xgetcwd (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetdomainname.c��������������������������������������������������������0000664�0000000�0000000�00000001633�14110572173�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the NIS domain name, without size limitations. Copyright (C) 1992-2021 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 <config.h> /* Specification. */ #include "xgetdomainname.h" #define GETANAME getdomainname #define XGETANAME xgetdomainname #include "xgetaname-impl.h" �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetdomainname.h��������������������������������������������������������0000664�0000000�0000000�00000002603�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetdomainname.h -- Return the NIS domain name, without size limitations. Copyright (C) 1992, 1996, 2000-2001, 2003, 2009-2021 Free Software Foundation, Inc. This 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 _XGETDOMAINNAME_H #define _XGETDOMAINNAME_H #include <stdlib.h> /* Return the NIS domain name of the machine, in malloc'd storage. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. If malloc fails, exit. Upon any other failure, set errno and return NULL. */ extern char *xgetdomainname (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* _XGETDOMAINNAME_H */ �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgetgroups.c������������������������������������������������������������0000664�0000000�0000000�00000002234�14110572173�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetgroups.c -- return a list of the groups a user or current process is in Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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/>. */ /* Extracted from coreutils' src/id.c. */ #include <config.h> #include "mgetgroups.h" #include <errno.h> #include "xalloc.h" /* Like mgetgroups, but call xalloc_die on allocation failure. */ int xgetgroups (char const *username, gid_t gid, gid_t **groups) { int result = mgetgroups (username, gid, groups); if (result == -1 && errno == ENOMEM) xalloc_die (); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xgethostname.c����������������������������������������������������������0000664�0000000�0000000�00000001771�14110572173�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgethostname.c -- return current hostname with unlimited length Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering and Paul Eggert */ #include <config.h> /* Specification. */ #include "xgethostname.h" #define GETANAME gethostname #define XGETANAME xgethostname #include "xgetaname-impl.h" �������gnulib-20210822~d383792/lib/xgethostname.h����������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return current hostname with unlimited length. Copyright (C) 2003-2021 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 <stdlib.h> char *xgethostname (void) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xhash.c�����������������������������������������������������������������0000664�0000000�0000000�00000002434�14110572173�0016327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "hash.h" #include "xalloc.h" Hash_table * hash_xinitialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) { Hash_table *res = hash_initialize (candidate, tuning, hasher, comparator, data_freer); if (!res) xalloc_die (); return res; } void * hash_xinsert (Hash_table *table, void const *entry) { void *res = hash_insert (table, entry); if (!res) xalloc_die (); return res; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmalloc.c���������������������������������������������������������������0000664�0000000�0000000�00000020176�14110572173�0016656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-2021 Free Software Foundation, Inc. This 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> #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include "ialloc.h" #include "intprops.h" #include "minmax.h" #include <stdlib.h> #include <string.h> static void * _GL_ATTRIBUTE_PURE nonnull (void *p) { if (!p) xalloc_die (); return p; } /* Allocate S bytes of memory dynamically, with error checking. */ void * xmalloc (size_t s) { return nonnull (malloc (s)); } void * ximalloc (idx_t s) { return nonnull (imalloc (s)); } char * xcharalloc (size_t n) { return XNMALLOC (n, char); } /* Change the size of an allocated block of memory P to S bytes, with error checking. */ void * xrealloc (void *p, size_t s) { void *r = realloc (p, s); if (!r && (!p || s)) xalloc_die (); return r; } void * xirealloc (void *p, idx_t s) { return nonnull (irealloc (p, s)); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. */ void * xreallocarray (void *p, size_t n, size_t s) { void *r = reallocarray (p, n, s); if (!r && (!p || (n && s))) xalloc_die (); return r; } void * xireallocarray (void *p, idx_t n, idx_t s) { return nonnull (ireallocarray (p, n, s)); } /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void * xnmalloc (size_t n, size_t s) { return xreallocarray (NULL, n, s); } /* If P is null, allocate a block of at least *PS bytes; otherwise, reallocate P so that it contains more than *PS bytes. *PS must be nonzero unless P is null. Set *PS to the new block's size, and return the pointer to the new block. *PS is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *ps) { return x2nrealloc (p, ps, 1); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } } else { /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */ if (INT_ADD_WRAPV (n, (n >> 1) + 1, &n)) xalloc_die (); } p = xreallocarray (p, n, s); *pn = n; return p; } /* Grow PA, which points to an array of *PN items, and return the location of the reallocated array, updating *PN to reflect its new size. The new array will contain at least N_INCR_MIN more items, but will not contain more than N_MAX items total. S is the size of each item, in bytes. S and N_INCR_MIN must be positive. *PN must be nonnegative. If N_MAX is -1, it is treated as if it were infinity. If PA is null, then allocate a new array instead of reallocating the old one. Thus, to grow an array A without saving its old contents, do { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */ void * xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) { idx_t n0 = *pn; /* The approximate size to use for initial small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* If the array is tiny, grow it to about (but no greater than) DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. Adjust the growth according to three constraints: N_INCR_MIN, N_MAX, and what the C language can represent safely. */ idx_t n; if (INT_ADD_WRAPV (n0, n0 >> 1, &n)) n = IDX_MAX; if (0 <= n_max && n_max < n) n = n_max; /* NBYTES is of a type suitable for holding the count of bytes in an object. This is typically idx_t, but it should be size_t on (theoretical?) platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass values greater than SIZE_MAX to xrealloc. */ #if IDX_MAX <= SIZE_MAX idx_t nbytes; #else size_t nbytes; #endif idx_t adjusted_nbytes = (INT_MULTIPLY_WRAPV (n, s, &nbytes) ? MIN (IDX_MAX, SIZE_MAX) : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0); if (adjusted_nbytes) { n = adjusted_nbytes / s; nbytes = adjusted_nbytes - adjusted_nbytes % s; } if (! pa) *pn = 0; if (n - n0 < n_incr_min && (INT_ADD_WRAPV (n0, n_incr_min, &n) || (0 <= n_max && n_max < n) || INT_MULTIPLY_WRAPV (n, s, &nbytes))) xalloc_die (); pa = xrealloc (pa, nbytes); *pn = n; return pa; } /* Allocate S bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t s) { return xcalloc (s, 1); } void * xizalloc (idx_t s) { return xicalloc (s, 1); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { return nonnull (calloc (n, s)); } void * xicalloc (idx_t n, idx_t s) { return nonnull (icalloc (n, s)); } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } void * ximemdup (void const *p, idx_t s) { return memcpy (ximalloc (s), p, s); } /* Clone an object P of size S, with error checking. Append a terminating NUL byte. */ char * ximemdup0 (void const *p, idx_t s) { char *result = ximalloc (s + 1); result[s] = 0; return memcpy (result, p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmalloca.c��������������������������������������������������������������0000664�0000000�0000000�00000002051�14110572173�0017007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation with out of memory checking. Copyright (C) 2003, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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> /* Specification. */ #include "xmalloca.h" #include "xalloc.h" #if HAVE_ALLOCA void * xmmalloca (size_t n) { void *p; p = mmalloca (n); if (p == NULL) xalloc_die (); return p; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmalloca.h��������������������������������������������������������������0000664�0000000�0000000�00000004711�14110572173�0017021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation with out of memory checking. Copyright (C) 2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 _XMALLOCA_H #define _XMALLOCA_H #include "malloca.h" #include "xalloc.h" #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* xmalloca(N) is a checking safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. N should not have side effects. Upon failure, it exits with an error message. */ #if HAVE_ALLOCA # define xmalloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : xmmalloca (N)) extern void * xmmalloca (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #else # define xmalloca(N) \ xmalloc (N) #endif /* xnmalloca(N,S) is an overflow-safe variant of xmalloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. S must be positive and N must be nonnegative, and S and N should not have side effects. The array must be freed using freea() before the function returns. Upon failure, it exits with an error message. */ #if HAVE_ALLOCA /* Rely on xmalloca (SIZE_MAX) calling xalloc_die (). */ # define xnmalloca(n, s) \ xmalloca (xalloc_oversized (n, s) ? (size_t) (-1) : (n) * (size_t) (s)) #else # define xnmalloca(n, s) \ xnmalloc (n, s) #endif #ifdef __cplusplus } #endif #endif /* _XMALLOCA_H */ �������������������������������������������������������gnulib-20210822~d383792/lib/xmemcoll.c��������������������������������������������������������������0000664�0000000�0000000�00000005062�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* Contributed by Paul Eggert <eggert@twinsun.com>. */ #include <config.h> #include <errno.h> #include <stdlib.h> #include "gettext.h" #define _(msgid) gettext (msgid) #include "error.h" #include "exitfail.h" #include "memcoll.h" #include "quotearg.h" #include "xmemcoll.h" static void collate_error (int collation_errno, char const *s1, size_t s1len, char const *s2, size_t s2len) { error (0, collation_errno, _("string comparison failed")); error (0, 0, _("Set LC_ALL='C' to work around the problem.")); error (exit_failure, 0, _("The strings compared were %s and %s."), quotearg_n_style_mem (0, locale_quoting_style, s1, s1len), quotearg_n_style_mem (1, locale_quoting_style, s2, s2len)); } /* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according to the LC_COLLATE locale. S1 and S2 do not overlap, and are not adjacent. Temporarily modify the bytes after S1 and S2, but restore their original contents before returning. Report an error and exit if there is an error. */ int xmemcoll (char *s1, size_t s1len, char *s2, size_t s2len) { int diff = memcoll (s1, s1len, s2, s2len); int collation_errno = errno; if (collation_errno) collate_error (collation_errno, s1, s1len, s2, s2len); return diff; } /* Compare S1 (a memory block of size S1SIZE, with a NUL as last byte) and S2 (a memory block of size S2SIZE, with a NUL as last byte) according to the LC_COLLATE locale. S1SIZE and S2SIZE must be > 0. Report an error and exit if there is an error. */ int xmemcoll0 (char const *s1, size_t s1size, char const *s2, size_t s2size) { int diff = memcoll0 (s1, s1size, s2, s2size); int collation_errno = errno; if (collation_errno) collate_error (collation_errno, s1, s1size - 1, s2, s2size - 1); return diff; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmemcoll.h��������������������������������������������������������������0000664�0000000�0000000�00000001564�14110572173�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 2002-2021 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 <stddef.h> int xmemcoll (char *restrict, size_t, char *restrict, size_t); int xmemcoll0 (char const *, size_t, char const *, size_t); ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmemdup0.c��������������������������������������������������������������0000664�0000000�0000000�00000003222�14110572173�0016747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmemdup0.c -- copy a block of arbitrary bytes, plus a trailing NUL Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "xmemdup0.h" #include "xalloc.h" #include <string.h> /* Clone an arbitrary block of bytes P of size S, with error checking, and include a terminating NUL byte. P is of type 'void const *', to make it easier to use this with other mem* functions that return 'void *', but since appending a NUL byte only makes sense on bytes, the return type is 'char *'. The terminating NUL makes it safe to use strlen or rawmemchr to check for embedded NUL; it also speeds up algorithms such as escape sequence processing on arbitrary memory, by making it always safe to read the byte after the escape character rather than having to check if each escape character is the last byte in the object. */ char * xmemdup0 (void const *p, size_t s) { char *result = xcharalloc (s + 1); if (s > 0) memcpy (result, p, s); result[s] = 0; return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xmemdup0.h��������������������������������������������������������������0000664�0000000�0000000�00000002051�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 XMEMDUP_H_ # define XMEMDUP_H_ # include <stdlib.h> # ifdef __cplusplus extern "C" { # endif char *xmemdup0 (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; # ifdef __cplusplus } # endif #endif /* !XMEMDUP0_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xnanosleep.c������������������������������������������������������������0000664�0000000�0000000�00000004753�14110572173�0017376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A variant of nanosleep that takes a 'double' argument and handles EINTR. Copyright (C) 2002-2007, 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* Mostly written (for sleep.c) by Paul Eggert. Factored out (creating this file) by Jim Meyering. */ #include <config.h> #include "xnanosleep.h" #include <intprops.h> #include <timespec.h> #include <errno.h> #include <time.h> #include <unistd.h> /* Sleep until the time (call it WAKE_UP_TIME) specified as SECONDS seconds after the time this function is called. SECONDS must be non-negative. If SECONDS is so large that it is not representable as a 'struct timespec', then use the maximum value for that interval. Return -1 on failure (setting errno), 0 on success. */ int xnanosleep (double seconds) { #if HAVE_PAUSE if (1.0 + TYPE_MAXIMUM (time_t) <= seconds) { do pause (); while (errno == EINTR); /* pause failed (!); fall back on repeated nanosleep calls. */ } #endif struct timespec ts_sleep = dtotimespec (seconds); for (;;) { /* Linux-2.6.8.1's nanosleep returns -1, but doesn't set errno when resumed after being suspended. Earlier versions would set errno to EINTR. nanosleep from linux-2.6.10, as well as implementations by (all?) other vendors, doesn't return -1 in that case; either it continues sleeping (if time remains) or it returns zero (if the wake-up time has passed). Gnulib's replacement nanosleep sometimes does not update TS_SLEEP, and it is possible some kernels have a similar bug. However, this merely causes xnanosleep to sleep longer than necessary, which is not a correctness bug. */ errno = 0; if (nanosleep (&ts_sleep, &ts_sleep) == 0) break; if (errno != EINTR && errno != 0) return -1; } return 0; } ���������������������gnulib-20210822~d383792/lib/xnanosleep.h������������������������������������������������������������0000664�0000000�0000000�00000001547�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A variant of nanosleep that takes a 'double' argument and handles EINTR. Copyright (C) 2004-2021 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/>. */ #ifdef __cplusplus extern "C" { #endif int xnanosleep (double); #ifdef __cplusplus } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000004304�14110572173�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* printf wrappers that fail immediately for non-file-related errors Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 "xprintf.h" #include <errno.h> #include "error.h" #include "exitfail.h" #include "gettext.h" /* written by Jim Meyering */ /* Just like printf, but call error if it fails without setting the stream's error indicator. */ int xprintf (char const *restrict format, ...) { va_list args; int retval; va_start (args, format); retval = xvprintf (format, args); va_end (args); return retval; } /* Just like vprintf, but call error if it fails without setting the stream's error indicator. */ int xvprintf (char const *restrict format, va_list args) { int retval = vprintf (format, args); if (retval < 0 && ! ferror (stdout)) error (exit_failure, errno, gettext ("cannot perform formatted output")); return retval; } /* Just like fprintf, but call error if it fails without setting the stream's error indicator. */ int xfprintf (FILE *restrict stream, char const *restrict format, ...) { va_list args; int retval; va_start (args, format); retval = xvfprintf (stream, format, args); va_end (args); return retval; } /* Just like vfprintf, but call error if it fails without setting the stream's error indicator. */ int xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) { int retval = vfprintf (stream, format, args); if (retval < 0 && ! ferror (stream)) error (exit_failure, errno, gettext ("cannot perform formatted output")); return retval; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xprintf.h���������������������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* printf wrappers that fail immediately for non-file-related errors Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 _XPRINTF_H #define _XPRINTF_H #include <stdarg.h> #include <stdio.h> extern int xprintf (char const *restrict format, ...) #if GNULIB_VPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 2)) #endif ; extern int xvprintf (char const *restrict format, va_list args) #if GNULIB_VPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 0)) #endif ; extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) #endif ; extern int xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 0)) #endif ; #endif ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xreadlink.c�������������������������������������������������������������0000664�0000000�0000000�00000002701�14110572173�0017172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xreadlink.c -- readlink wrapper to return the link name in malloc'd storage Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering <jim@meyering.net> and Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "xreadlink.h" #include <errno.h> #include "areadlink.h" #include "xalloc.h" /* Call readlink to get the symbolic link value of FILENAME. Return a pointer to that NUL-terminated string in malloc'd storage. If readlink fails, return NULL and set errno. If realloc fails, or if the link value is longer than SIZE_MAX :-), give a diagnostic and exit. */ char * xreadlink (char const *filename) { char *result = areadlink (filename); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } ���������������������������������������������������������������gnulib-20210822~d383792/lib/xreadlink.h�������������������������������������������������������������0000664�0000000�0000000�00000002104�14110572173�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reading symbolic links without size limitation. Copyright (C) 2001, 2003-2004, 2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering <jim@meyering.net> */ #include <stdlib.h> extern char *xreadlink (char const *filename) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #if GNULIB_XREADLINKAT extern char *xreadlinkat (int fd, char const *filename) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xreadlinkat.c�����������������������������������������������������������0000664�0000000�0000000�00000003124�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xreadlinkat.c -- readlink wrapper to return the link name in malloc'd storage Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering <jim@meyering.net>, and Bruno Haible <bruno@clisp.org>, and Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include "xreadlink.h" #include <errno.h> #include "areadlink.h" #include "xalloc.h" /* Call readlinkat to get the symbolic link value of FILENAME relative to FD. Return a pointer to that NUL-terminated string in malloc'd storage. If readlinkat fails, return NULL and set errno (although failure to change directory will issue a diagnostic and exit). If realloc fails, or if the link value is longer than SIZE_MAX :-), give a diagnostic and exit. */ char * xreadlinkat (int fd, char const *filename) { char *result = areadlinkat (fd, filename); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xsetenv.c���������������������������������������������������������������0000664�0000000�0000000�00000002323�14110572173�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Setting environment variables, with out-of-memory checking. Copyright (C) 2001-2002, 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "xsetenv.h" #include <stdlib.h> #include "error.h" #include "gettext.h" #define _(str) gettext (str) /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. With error checking. */ void xsetenv (const char *name, const char *value, int replace) { if (setenv (name, value, replace) < 0) error (EXIT_FAILURE, 0, _("memory exhausted")); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xsetenv.h���������������������������������������������������������������0000664�0000000�0000000�00000002160�14110572173�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Setting environment variables, with out-of-memory checking. Copyright (C) 2001-2002, 2007, 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* Get unsetenv(). It can be used without error checking. */ #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. With error checking. */ extern void xsetenv (const char *name, const char *value, int replace); #ifdef __cplusplus } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xsize.c�����������������������������������������������������������������0000664�0000000�0000000�00000001504�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Checked size_t computations. Copyright (C) 2012-2021 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/>. */ #include <config.h> #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xsize.h�����������������������������������������������������������������0000664�0000000�0000000�00000006757�14110572173�0016377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-2021 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/>. */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include <stddef.h> /* Get SIZE_MAX. */ #include <limits.h> #if HAVE_STDINT_H # include <stdint.h> #endif /* Get ATTRIBUTE_PURE. */ #include "attribute.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ �����������������gnulib-20210822~d383792/lib/xstdopen.c��������������������������������������������������������������0000664�0000000�0000000�00000002110�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ensure that stdin, stdout, stderr are open. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "xstdopen.h" #include "stdopen.h" #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xstdopen (void) { int stdopen_errno = stdopen (); if (stdopen_errno != 0) error (exit_failure, stdopen_errno, _("standard file descriptors")); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstdopen.h��������������������������������������������������������������0000664�0000000�0000000�00000002035�14110572173�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ensure that stdin, stdout, stderr are open. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #ifdef __cplusplus extern "C" { #endif /* Ensures that the file descriptors of stdin, stdout, stderr (0, 1, 2) are open. Exits the program with an error message upon failure; the error message may not appear if stderr is closed. */ extern void xstdopen (void); #ifdef __cplusplus } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstriconv.c�������������������������������������������������������������0000664�0000000�0000000�00000003120�14110572173�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2004, 2006, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible. This 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> /* Specification. */ #include "xstriconv.h" #include <errno.h> #include "striconv.h" #include "xalloc.h" #if HAVE_ICONV int xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, char **resultp, size_t *lengthp) { int retval = mem_cd_iconv (src, srclen, cd, resultp, lengthp); if (retval < 0 && errno == ENOMEM) xalloc_die (); return retval; } char * xstr_cd_iconv (const char *src, iconv_t cd) { char *result = str_cd_iconv (src, cd); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } #endif char * xstr_iconv (const char *src, const char *from_codeset, const char *to_codeset) { char *result = str_iconv (src, from_codeset, to_codeset); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstriconv.h�������������������������������������������������������������0000664�0000000�0000000�00000006223�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This 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 _XSTRICONV_H #define _XSTRICONV_H #include <stdlib.h> #if HAVE_ICONV #include <iconv.h> #endif #ifdef __cplusplus extern "C" { #endif #if HAVE_ICONV /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. The conversion descriptor is passed as CD. *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Upon memory allocation failure, report the error and exit. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. The conversion descriptor is passed as CD. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Upon memory allocation failure, report the error and exit. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * xstr_cd_iconv (const char *src, iconv_t cd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Upon memory allocation failure, report the error and exit. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * xstr_iconv (const char *src, const char *from_codeset, const char *to_codeset) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _XSTRICONV_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstriconveh.c�����������������������������������������������������������0000664�0000000�0000000�00000004457�14110572173�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible. This 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> /* Specification. */ #include "xstriconveh.h" #include <errno.h> #include "striconveh.h" #include "xalloc.h" #if HAVE_ICONV int xmem_cd_iconveh (const char *src, size_t srclen, const iconveh_t *cd, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { int retval = mem_cd_iconveh (src, srclen, cd, handler, offsets, resultp, lengthp); if (retval < 0 && errno == ENOMEM) xalloc_die (); return retval; } char * xstr_cd_iconveh (const char *src, const iconveh_t *cd, enum iconv_ilseq_handler handler) { char *result = str_cd_iconveh (src, cd, handler); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } #endif int xmem_iconveh (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp) { int retval = mem_iconveh (src, srclen, from_codeset, to_codeset, handler, offsets, resultp, lengthp); if (retval < 0 && errno == ENOMEM) xalloc_die (); return retval; } char * xstr_iconveh (const char *src, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler) { char *result = str_iconveh (src, from_codeset, to_codeset, handler); if (result == NULL && errno == ENOMEM) xalloc_die (); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstriconveh.h�����������������������������������������������������������0000664�0000000�0000000�00000012151�14110572173�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2007, 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This 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 _XSTRICONVEH_H #define _XSTRICONVEH_H #include <stdlib.h> /* Get the 'enum iconv_ilseq_handler' and iconveh_t types, and the iconveh_open, iconveh_close declarations. */ #include "striconveh.h" #ifdef __cplusplus extern "C" { #endif #if HAVE_ICONV /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. CD points to the conversion descriptor from FROMCODE to TOCODE, created by the function iconveh_open(). If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Upon memory allocation failure, report the error and exit. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int xmem_cd_iconveh (const char *src, size_t srclen, const iconveh_t *cd, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. CD points to the conversion descriptor from FROMCODE to TOCODE, created by the function iconveh_open(). Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Upon memory allocation failure, report the error and exit. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * xstr_cd_iconveh (const char *src, const iconveh_t *cd, enum iconv_ilseq_handler handler) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* Convert an entire string from one encoding to another, using iconv. The original string is at [SRC,...,SRC+SRCLEN-1]. If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this array is filled with offsets into the result, i.e. the character starting at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], and other offsets are set to (size_t)(-1). *RESULTP and *LENGTH should initially be a scratch buffer and its size, or *RESULTP can initially be NULL. May erase the contents of the memory at *RESULTP. Upon memory allocation failure, report the error and exit. Return value: 0 if successful, otherwise -1 and errno set. If successful: The resulting string is stored in *RESULTP and its length in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is unchanged if no dynamic memory allocation was necessary. */ extern int xmem_iconveh (const char *src, size_t srclen, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler, size_t *offsets, char **resultp, size_t *lengthp); /* Convert an entire string from one encoding to another, using iconv. The original string is the NUL-terminated string starting at SRC. Both the "from" and the "to" encoding must use a single NUL byte at the end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). Allocate a malloced memory block for the result. Upon memory allocation failure, report the error and exit. Return value: the freshly allocated resulting NUL-terminated string if successful, otherwise NULL and errno set. */ extern char * xstr_iconveh (const char *src, const char *from_codeset, const char *to_codeset, enum iconv_ilseq_handler handler) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* _XSTRICONVEH_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrndup.c��������������������������������������������������������������0000664�0000000�0000000�00000002246�14110572173�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a bounded initial segment of a string, with out-of-memory checking. Copyright (C) 2003, 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "xstrndup.h" #include <string.h> #include "xalloc.h" /* Return a newly allocated copy of at most N bytes of STRING. In other words, return a copy of the initial segment of length N of STRING. */ char * xstrndup (const char *string, size_t n) { char *s = strndup (string, n); if (! s) xalloc_die (); return s; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrndup.h��������������������������������������������������������������0000664�0000000�0000000�00000002117�14110572173�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a bounded initial segment of a string, with out-of-memory checking. Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. This 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 <stdlib.h> /* Return a newly allocated copy of at most N bytes of STRING. In other words, return a copy of the initial segment of length N of STRING. */ extern char *xstrndup (const char *string, size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtod.c���������������������������������������������������������������0000664�0000000�0000000�00000004037�14110572173�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* error-checking interface to strtod-like functions Copyright (C) 1996, 1999-2000, 2003-2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "xstrtod.h" #include <errno.h> #include <limits.h> #include <stdio.h> #if LONG # define XSTRTOD xstrtold # define DOUBLE long double #else # define XSTRTOD xstrtod # define DOUBLE double #endif /* An interface to a string-to-floating-point conversion function that encapsulates all the error checking one should usually perform. Like strtod/strtold, but stores the conversion in *RESULT, and returns true upon successful conversion. CONVERT specifies the conversion function, e.g., strtod itself. */ bool XSTRTOD (char const *str, char const **ptr, DOUBLE *result, DOUBLE (*convert) (char const *, char **)) { DOUBLE val; char *terminator; bool ok = true; errno = 0; val = convert (str, &terminator); /* Having a non-zero terminator is an error only when PTR is NULL. */ if (terminator == str || (ptr == NULL && *terminator != '\0')) ok = false; else { /* Allow underflow (in which case CONVERT returns zero), but flag overflow as an error. The user can decide to use the limits in RESULT upon ERANGE. */ if (val != 0 && errno == ERANGE) ok = false; } if (ptr != NULL) *ptr = terminator; *result = val; return ok; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtod.h���������������������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error-checking interface to strtod-like functions. Copyright (C) 1996, 1998, 2003-2004, 2006, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef XSTRTOD_H # define XSTRTOD_H 1 # include <stdbool.h> bool xstrtod (const char *str, const char **ptr, double *result, double (*convert) (char const *, char **)); bool xstrtold (const char *str, const char **ptr, long double *result, long double (*convert) (char const *, char **)); #endif /* not XSTRTOD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtoimax.c������������������������������������������������������������0000664�0000000�0000000�00000001630�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtoimax. Copyright (C) 2001-2021 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/>. */ #define __strtol strtoimax #define __strtol_t intmax_t #define __xstrtol xstrtoimax #define STRTOL_T_MINIMUM INTMAX_MIN #define STRTOL_T_MAXIMUM INTMAX_MAX #include "xstrtol.c" ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtol-error.c���������������������������������������������������������0000664�0000000�0000000�00000005377�14110572173�0020073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2021 Free Software Foundation, Inc. This 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 "xstrtol-error.h" #include <stdlib.h> #include "error.h" #include "exitfail.h" #include "gettext.h" #define N_(msgid) msgid /* Report an error for an invalid integer in an option argument. ERR is the error code returned by one of the xstrto* functions. Use OPT_IDX to decide whether to print the short option string "C" or "-C" or a long option string derived from LONG_OPTION. OPT_IDX is -2 if the short option "C" was used, without any leading "-"; it is -1 if the short option "-C" was used; otherwise it is an index into LONG_OPTIONS, which should have a name preceded by two '-' characters. ARG is the option-argument containing the integer. After reporting an error, exit with status EXIT_STATUS if it is nonzero. */ static void xstrtol_error (enum strtol_error err, int opt_idx, char c, struct option const *long_options, char const *arg, int exit_status) { char const *hyphens = "--"; char const *msgid; char const *option; char option_buffer[2]; switch (err) { default: abort (); case LONGINT_INVALID: msgid = N_("invalid %s%s argument '%s'"); break; case LONGINT_INVALID_SUFFIX_CHAR: case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW: msgid = N_("invalid suffix in %s%s argument '%s'"); break; case LONGINT_OVERFLOW: msgid = N_("%s%s argument '%s' too large"); break; } if (opt_idx < 0) { hyphens -= opt_idx; option_buffer[0] = c; option_buffer[1] = '\0'; option = option_buffer; } else option = long_options[opt_idx].name; error (exit_status, 0, gettext (msgid), hyphens, option, arg); } /* Like xstrtol_error, except exit with a failure status. */ void xstrtol_fatal (enum strtol_error err, int opt_idx, char c, struct option const *long_options, char const *arg) { xstrtol_error (err, opt_idx, c, long_options, arg, exit_failure); abort (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtol-error.h���������������������������������������������������������0000664�0000000�0000000�00000003246�14110572173�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error reporting interface for xstrto* functions. Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2021 Free Software Foundation, Inc. This 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 XSTRTOL_ERROR_H_ # define XSTRTOL_ERROR_H_ 1 # include "xstrtol.h" # include <getopt.h> /* Report an error for an invalid integer in an option argument. ERR is the error code returned by one of the xstrto* functions. Use OPT_IDX to decide whether to print the short option string "C" or "-C" or a long option string derived from LONG_OPTION. OPT_IDX is -2 if the short option "C" was used, without any leading "-"; it is -1 if the short option "-C" was used; otherwise it is an index into LONG_OPTIONS, which should have a name preceded by two '-' characters. ARG is the option-argument containing the integer. After reporting an error, exit with a failure status. */ _Noreturn void xstrtol_fatal (enum strtol_error, int, char, struct option const *, char const *); #endif /* not XSTRTOL_ERROR_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtol.c���������������������������������������������������������������0000664�0000000�0000000�00000014037�14110572173�0016735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #ifndef __strtol # define __strtol strtol # define __strtol_t long int # define __xstrtol xstrtol # define STRTOL_T_MINIMUM LONG_MIN # define STRTOL_T_MAXIMUM LONG_MAX #endif #include <config.h> #include "xstrtol.h" /* Some pre-ANSI implementations (e.g. SunOS 4) need stderr defined if assertion checking is enabled. */ #include <stdio.h> #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include "assure.h" #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) static strtol_error bkm_scale (__strtol_t *x, int scale_factor) { if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor) { *x = STRTOL_T_MINIMUM; return LONGINT_OVERFLOW; } if (STRTOL_T_MAXIMUM / scale_factor < *x) { *x = STRTOL_T_MAXIMUM; return LONGINT_OVERFLOW; } *x *= scale_factor; return LONGINT_OK; } static strtol_error bkm_scale_by_power (__strtol_t *x, int base, int power) { strtol_error err = LONGINT_OK; while (power--) err |= bkm_scale (x, base); return err; } /* FIXME: comment. */ strtol_error __xstrtol (const char *s, char **ptr, int strtol_base, __strtol_t *val, const char *valid_suffixes) { char *t_ptr; char **p; __strtol_t tmp; strtol_error err = LONGINT_OK; assure (0 <= strtol_base && strtol_base <= 36); p = (ptr ? ptr : &t_ptr); errno = 0; if (! TYPE_SIGNED (__strtol_t)) { const char *q = s; unsigned char ch = *q; while (isspace (ch)) ch = *++q; if (ch == '-') return LONGINT_INVALID; } tmp = __strtol (s, p, strtol_base); if (*p == s) { /* If there is no number but there is a valid suffix, assume the number is 1. The string is invalid otherwise. */ if (valid_suffixes && **p && strchr (valid_suffixes, **p)) tmp = 1; else return LONGINT_INVALID; } else if (errno != 0) { if (errno != ERANGE) return LONGINT_INVALID; err = LONGINT_OVERFLOW; } /* Let valid_suffixes == NULL mean "allow any suffix". */ /* FIXME: update all callers except the ones that allow suffixes after the number, changing last parameter NULL to "". */ if (!valid_suffixes) { *val = tmp; return err; } if (**p != '\0') { int base = 1024; int suffixes = 1; strtol_error overflow; if (!strchr (valid_suffixes, **p)) { *val = tmp; return err | LONGINT_INVALID_SUFFIX_CHAR; } switch (**p) { case 'E': case 'G': case 'g': case 'k': case 'K': case 'M': case 'm': case 'P': case 'T': case 't': case 'Y': case 'Z': /* The "valid suffix" '0' is a special flag meaning that an optional second suffix is allowed, which can change the base. A suffix "B" (e.g. "100MB") stands for a power of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for a power of 1024. If no suffix (e.g. "100M"), assume power-of-1024. */ if (strchr (valid_suffixes, '0')) switch (p[0][1]) { case 'i': if (p[0][2] == 'B') suffixes += 2; break; case 'B': case 'D': /* 'D' is obsolescent */ base = 1000; suffixes++; break; } } switch (**p) { case 'b': overflow = bkm_scale (&tmp, 512); break; case 'B': /* This obsolescent first suffix is distinct from the 'B' second suffix above. E.g., 'tar -L 1000B' means change the tape after writing 1000 KiB of data. */ overflow = bkm_scale (&tmp, 1024); break; case 'c': overflow = LONGINT_OK; break; case 'E': /* exa or exbi */ overflow = bkm_scale_by_power (&tmp, base, 6); break; case 'G': /* giga or gibi */ case 'g': /* 'g' is undocumented; for compatibility only */ overflow = bkm_scale_by_power (&tmp, base, 3); break; case 'k': /* kilo */ case 'K': /* kibi */ overflow = bkm_scale_by_power (&tmp, base, 1); break; case 'M': /* mega or mebi */ case 'm': /* 'm' is undocumented; for compatibility only */ overflow = bkm_scale_by_power (&tmp, base, 2); break; case 'P': /* peta or pebi */ overflow = bkm_scale_by_power (&tmp, base, 5); break; case 'T': /* tera or tebi */ case 't': /* 't' is undocumented; for compatibility only */ overflow = bkm_scale_by_power (&tmp, base, 4); break; case 'w': overflow = bkm_scale (&tmp, 2); break; case 'Y': /* yotta or 2**80 */ overflow = bkm_scale_by_power (&tmp, base, 8); break; case 'Z': /* zetta or 2**70 */ overflow = bkm_scale_by_power (&tmp, base, 7); break; default: *val = tmp; return err | LONGINT_INVALID_SUFFIX_CHAR; } err |= overflow; *p += suffixes; if (**p) err |= LONGINT_INVALID_SUFFIX_CHAR; } *val = tmp; return err; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtol.h���������������������������������������������������������������0000664�0000000�0000000�00000003245�14110572173�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2021 Free Software Foundation, Inc. This 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 XSTRTOL_H_ # define XSTRTOL_H_ 1 # include <inttypes.h> # ifndef _STRTOL_ERROR enum strtol_error { LONGINT_OK = 0, /* These two values can be ORed together, to indicate that both errors occurred. */ LONGINT_OVERFLOW = 1, LONGINT_INVALID_SUFFIX_CHAR = 2, LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR | LONGINT_OVERFLOW), LONGINT_INVALID = 4 }; typedef enum strtol_error strtol_error; # endif # define _DECLARE_XSTRTOL(name, type) \ strtol_error name (const char *, char **, int, type *, const char *); _DECLARE_XSTRTOL (xstrtol, long int) _DECLARE_XSTRTOL (xstrtoul, unsigned long int) _DECLARE_XSTRTOL (xstrtoll, long long int) _DECLARE_XSTRTOL (xstrtoull, unsigned long long int) _DECLARE_XSTRTOL (xstrtoimax, intmax_t) _DECLARE_XSTRTOL (xstrtoumax, uintmax_t) #endif /* not XSTRTOL_H_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtold.c��������������������������������������������������������������0000664�0000000�0000000�00000001433�14110572173�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'long double', with error checking. Copyright (C) 2006-2021 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/>. */ #define LONG 1 #include "xstrtod.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtoll.c��������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0017112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'long long', with error checking. Copyright (C) 2011-2021 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/>. */ #define __strtol strtoll #define __strtol_t long long int #define __xstrtol xstrtoll #define STRTOL_T_MINIMUM LLONG_MIN #define STRTOL_T_MAXIMUM LLONG_MAX #include "xstrtol.c" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtoul.c��������������������������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'unsigned long', with error checking. Copyright (C) 1994-2021 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/>. */ #define __strtol strtoul #define __strtol_t unsigned long int #define __xstrtol xstrtoul #define STRTOL_T_MINIMUM 0 #define STRTOL_T_MAXIMUM ULONG_MAX #include "xstrtol.c" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtoull.c�������������������������������������������������������������0000664�0000000�0000000�00000001662�14110572173�0017276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to 'unsigned long long', with error checking. Copyright (C) 2010-2021 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/>. */ #define __strtol strtoull #define __strtol_t unsigned long long int #define __xstrtol xstrtoull #define STRTOL_T_MINIMUM 0 #define STRTOL_T_MAXIMUM ULLONG_MAX #include "xstrtol.c" ������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xstrtoumax.c������������������������������������������������������������0000664�0000000�0000000�00000001621�14110572173�0017447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtoumax. Copyright (C) 1999-2021 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/>. */ #define __strtol strtoumax #define __strtol_t uintmax_t #define __xstrtol xstrtoumax #define STRTOL_T_MINIMUM 0 #define STRTOL_T_MAXIMUM UINTMAX_MAX #include "xstrtol.c" ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xtime.c�����������������������������������������������������������������0000664�0000000�0000000�00000001500�14110572173�0016333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xtime -- extended-resolution integer timestamps Copyright (C) 2012-2021 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 <config.h> #define XTIME_INLINE _GL_EXTERN_INLINE #include "xtime.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xtime.h�����������������������������������������������������������������0000664�0000000�0000000�00000004477�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xtime -- extended-resolution integer timestamps Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #ifndef XTIME_H_ #define XTIME_H_ 1 #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XTIME_INLINE # define XTIME_INLINE _GL_INLINE #endif /* xtime_t is a signed type used for timestamps. It is an integer type that is a count of nanoseconds. */ typedef long long int xtime_t; #define XTIME_PRECISION 1000000000 #ifdef __cplusplus extern "C" { #endif /* Return an extended time value that contains S seconds and NS nanoseconds. S and NS should be nonnegative; otherwise, integer overflow can occur even if the result is in range. */ XTIME_INLINE xtime_t xtime_make (xtime_t s, long int ns) { return XTIME_PRECISION * s + ns; } /* The following functions split an extended time value: T = XTIME_PRECISION * xtime_sec (T) + xtime_nsec (T) with 0 <= xtime_nsec (T) < XTIME_PRECISION. */ /* Return the number of seconds in T, which must be nonnegative. */ XTIME_INLINE xtime_t xtime_nonnegative_sec (xtime_t t) { return t / XTIME_PRECISION; } /* Return the number of seconds in T. */ XTIME_INLINE xtime_t xtime_sec (xtime_t t) { return (t + (t < 0)) / XTIME_PRECISION - (t < 0); } /* Return the number of nanoseconds in T, which must be nonnegative. */ XTIME_INLINE long int xtime_nonnegative_nsec (xtime_t t) { return t % XTIME_PRECISION; } /* Return the number of nanoseconds in T. */ XTIME_INLINE long int xtime_nsec (xtime_t t) { long int ns = t % XTIME_PRECISION; if (ns < 0) ns += XTIME_PRECISION; return ns; } #ifdef __cplusplus } #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xvasprintf.c������������������������������������������������������������0000664�0000000�0000000�00000005307�14110572173�0017422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 1999, 2002-2004, 2006-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "xvasprintf.h" #include <errno.h> #include <limits.h> #include <string.h> #include <stdio.h> #include "xalloc.h" /* Checked size_t computations. */ #include "xsize.h" static char * xstrcat (size_t argcount, va_list args) { char *result; va_list ap; size_t totalsize; size_t i; char *p; /* Determine the total size. */ totalsize = 0; va_copy (ap, args); for (i = argcount; i > 0; i--) { const char *next = va_arg (ap, const char *); totalsize = xsum (totalsize, strlen (next)); } va_end (ap); /* Test for overflow in the summing pass above or in (totalsize + 1) below. Also, don't return a string longer than INT_MAX, for consistency with vasprintf(). */ if (totalsize == SIZE_MAX || totalsize > INT_MAX) { errno = EOVERFLOW; return NULL; } /* Allocate and fill the result string. */ result = XNMALLOC (totalsize + 1, char); p = result; for (i = argcount; i > 0; i--) { const char *next = va_arg (args, const char *); size_t len = strlen (next); memcpy (p, next, len); p += len; } *p = '\0'; return result; } char * xvasprintf (const char *format, va_list args) { char *result; /* Recognize the special case format = "%s...%s". It is a frequently used idiom for string concatenation and needs to be fast. We don't want to have a separate function xstrcat() for this purpose. */ { size_t argcount = 0; const char *f; for (f = format;;) { if (*f == '\0') /* Recognized the special case of string concatenation. */ return xstrcat (argcount, args); if (*f != '%') break; f++; if (*f != 's') break; f++; argcount++; } } if (vasprintf (&result, format, args) < 0) { if (errno == ENOMEM) xalloc_die (); return NULL; } return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/xvasprintf.h������������������������������������������������������������0000664�0000000�0000000�00000003405�14110572173�0017424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 2002-2004, 2006-2021 Free Software Foundation, Inc. This 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 _XVASPRINTF_H #define _XVASPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> /* Get 'free'. */ #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(), and return it. Upon [ENOMEM] memory allocation error, call xalloc_die. On some other error - [EOVERFLOW] resulting string length is > INT_MAX, - [EINVAL] invalid format string, - [EILSEQ] error during conversion between wide and multibyte characters, return NULL. */ extern char *xasprintf (const char *format, ...) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)); extern char *xvasprintf (const char *format, va_list args) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)); #ifdef __cplusplus } #endif #endif /* _XVASPRINTF_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/yesno.c�����������������������������������������������������������������0000664�0000000�0000000�00000003442�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* yesno.c -- read a yes/no response from stdin Copyright (C) 1990, 1998, 2001, 2003-2021 Free Software Foundation, Inc. This 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 "yesno.h" #include <stdlib.h> #include <stdio.h> /* Return true if we read an affirmative line from standard input. Since this function uses stdin, it is suggested that the caller not use STDIN_FILENO directly, and also that the line atexit(close_stdin) be added to main(). */ bool yesno (void) { bool yes; #if ENABLE_NLS char *response = NULL; size_t response_size = 0; ssize_t response_len = getline (&response, &response_size, stdin); if (response_len <= 0) yes = false; else { /* Remove EOL if present as that's not part of the matched response, and not matched by $ for example. */ if (response[response_len - 1] == '\n') response[response_len - 1] = '\0'; yes = (0 < rpmatch (response)); } free (response); #else /* Test against "^[yY]", hardcoded to avoid requiring getline, regex, and rpmatch. */ int c = getchar (); yes = (c == 'y' || c == 'Y'); while (c != '\n' && c != EOF) c = getchar (); #endif return yes; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/lib/yesno.h�����������������������������������������������������������������0000664�0000000�0000000�00000001460�14110572173�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declare yesno Copyright (C) 2004, 2009-2021 Free Software Foundation, Inc. This 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 YESNO_H_ # define YESNO_H_ # include <stdbool.h> bool yesno (void); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0014617�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/.cvsignore���������������������������������������������������������������0000664�0000000�0000000�00000000030�14110572173�0016610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile jm-glibc-io.m4 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/00gnulib.m4��������������������������������������������������������������0000664�0000000�0000000�00000007011�14110572173�0016500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 8 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until the clang fix has dnl been included in Autoconf. # The following definitions arrange to use a compiler option # -Werror=implicit-function-declaration in AC_CHECK_DECL, when the # compiler is clang. Without it, clang implicitly declares "known" # library functions in C mode, but not in C++ mode, which would cause # Gnulib to omit a declaration and thus later produce an error in C++ # mode. As of clang 9.0, these "known" functions are identified through # LIBBUILTIN invocations in the LLVM source file # llvm/tools/clang/include/clang/Basic/Builtins.def. # It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL, # because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed # to AC_REQUIRE anything: some configure.ac files have their first # AC_CHECK_DECL executed conditionally. Therefore append the extra tests # to AC_PROG_CC. AC_DEFUN([gl_COMPILER_CLANG], [ dnl AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether the compiler is clang], [gl_cv_compiler_clang], [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has dnl not yet been invoked. _AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __clang__ barfbarf #endif ]],[[]]) ], [gl_cv_compiler_clang=no], [gl_cv_compiler_clang=yes]) ]) ]) AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL], [ dnl AC_REQUIRE([AC_PROG_CC]) dnl AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for declarations], [gl_cv_compiler_check_decl_option], [if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=implicit-function-declaration'. save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'], [gl_cv_compiler_check_decl_option=none]) ac_compile="$save_ac_compile" else gl_cv_compiler_check_decl_option=none fi ]) if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi ]) dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. m4_define([_AC_CHECK_DECL_BODY], [ ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi] m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile" ]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/README�������������������������������������������������������������������0000664�0000000�0000000�00000010471�14110572173�0015502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Many of the files in this directory are shared between the coreutils, diffutils, tar and gettext packages -- and others, so if you change them, try to ensure that you don't break those packages. That's hard without a systematic approach, but here is a set of conventions that makes it easy. - The lib/ sources are split into modules. Usually the module of a lib/foo.h and lib/foo.c is called "foo" - not unexpected, hey! -, but in more ambiguous cases you can look up the module a file belongs to by doing "grep lib/foo.c modules/*". - For every module there is an autoconf macro file, usually called m4/foo.m4 according to the module name. When you modify lib/foo.h or lib/foo.c, remember to modify m4/foo.m4 as well! What if you don't find m4/foo.m4? This probably means that the module doesn't need autoconf support up to now (again, take a look in modules/*). So you might need to create one. - A module which defines a replacement function (i.e. a function which is compiled only on systems which lack it or where it exists but doesn't work satisfactorily) has a .m4 file with typically the following structure: AC_DEFUN([gl_FUNC_FOO], [ AC_REPLACE_FUNCS(foo) if test $ac_cv_func_foo = no; then gl_PREREQ_FOO fi ]) # Prerequisites of lib/foo.c. AC_DEFUN([gl_PREREQ_FOO], [ dnl Many AC_CHECK_* invocations. ]) - A module which is compiled on all platforms can define multiple functions and be spread across multiple source files (although each time you do this you should consider splitting the module, if the source files could be independent). The .m4 file has typically the following structure: AC_DEFUN([gl_FOO], [ dnl Prerequisites of lib/foo.c. dnl Many AC_CHECK_* invocations. dnl Prerequisites of lib/foobar.c. dnl Many AC_CHECK_* invocations. ]) - When a module FOO depends on a module BAR, you do *not* generally need to write AC_DEFUN([gl_FOO], [ AC_REQUIRE([gl_BAR]) ... ]) because the maintainers might want to use locally modified / renamed copies of the module BAR. - If the autoconf tests for the modules FOO and BAR have some checks in common, still list them separately. Autoconf has two mechanisms for avoiding that a configure file runs the same test twice: AC_REQUIRE and AC_CACHE_CHECK. Trying to omit the checks leads to maintenance problems: If FOO depends on BAR, and you omit a check from FOO's .m4 file, later on, when someone modifies bar.c and removes the check from bar.m4, he will not remember that foo.c needs the check as well. - Now, how can you find the prerequisites of lib/foo.c? Try this: "grep '#.*if' lib/foo.c | grep -v endif" and for each HAVE_* macro search in the autoconf documentation what could be the autoconf macro that provides it. This is only an approximation; in general you should look at all preprocessor directives in lib/foo.c. - In AC_RUN_IFELSE invocations, try to put as much information about failed tests as possible in the exit code. The exit code is 0 for success and any value between 1 and 127 for failure. The exit code is printed in config.log; therefore when an AC_RUN_IFELSE invocation failed, it is possible to analyze the failure immediately if sufficient information is contained in the exit code. For a program that performs a single test, the typical idiom is: if (do_test1 ()) return 1; return 0; For a test that performs a test with some preparation, the typical idiom is to return an enumerated value: if (prep1 ()) return 1; else if (prep2 ()) return 2; else if (prep3 ()) return 3; else if (do_test1 ()) return 4; return 0; For multiple independent tests in a single program, you can return a bit mask with up to 7 bits: int result = 0; if (do_test1 ()) result |= 1; if (do_test2 ()) result |= 2; if (do_test3 ()) result |= 4; return result; For more than 7 independent tests, you have to map some possible test failures to same bit. - After ANY modifications of an m4 file, you should increment its serial number (in the first line). Also, if this first line features a particular release, _remove_ this release stamp. Example: Change # setenv.m4 serial 2 (gettext-0.11.1) into # setenv.m4 serial 3 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/_Exit.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000763�14110572173�0016137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# _Exit.m4 serial 2 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC__EXIT], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([_Exit]) if test $ac_cv_func__Exit = no; then HAVE__EXIT=0 fi ]) # Prerequisites of lib/_Exit.c. AC_DEFUN([gl_PREREQ__EXIT], [ : ]) �������������gnulib-20210822~d383792/m4/__inline.m4��������������������������������������������������������������0000664�0000000�0000000�00000001423�14110572173�0016635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test for __inline keyword dnl Copyright 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl___INLINE], [ AC_CACHE_CHECK([whether the compiler supports the __inline keyword], [gl_cv_c___inline], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int foo_t; static __inline foo_t foo (void) { return 0; }]], [[return foo ();]])], [gl_cv_c___inline=yes], [gl_cv_c___inline=no])]) if test $gl_cv_c___inline = yes; then AC_DEFINE([HAVE___INLINE], [1], [Define to 1 if the compiler supports the keyword '__inline'.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/absolute-header.m4�������������������������������������������������������0000664�0000000�0000000�00000010151�14110572173�0020123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 17 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_absolute_header], [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET([ac_header_exists]) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET([gl_absolute_header])"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/accept4.m4���������������������������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0016401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# accept4.m4 serial 3 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACCEPT4], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) dnl Persuade glibc <sys/socket.h> to declare accept4(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([accept4], , , [[ #include <sys/types.h> #include <sys/socket.h> ]]) if test $ac_cv_have_decl_accept4 != yes; then HAVE_ACCEPT4=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/access.m4����������������������������������������������������������������0000664�0000000�0000000�00000001066�14110572173�0016325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# access.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On native Windows, access (= _access) does not support the X_OK mode. dnl It works by chance on some versions of mingw. case "$host_os" in mingw*) REPLACE_ACCESS=1 ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/acl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000016506�14110572173�0015630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acl.m4 - check for access control list (ACL) primitives # serial 24 # Copyright (C) 2002, 2004-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_ACL_ARG], [ gl_need_lib_has_acl= AC_ARG_ENABLE([acl], AS_HELP_STRING([--disable-acl], [do not support ACLs]), , [enable_acl=auto]) ]) AC_DEFUN([gl_FUNC_ACL], [ AC_REQUIRE([gl_FUNC_ACL_ARG]) AC_CHECK_FUNCS_ONCE([fchmod]) LIB_ACL= use_acl=0 if test "$enable_acl" != no; then dnl On all platforms, the ACL related API is declared in <sys/acl.h>. AC_CHECK_HEADERS([sys/acl.h]) if test $ac_cv_header_sys_acl_h = yes; then ac_save_LIBS=$LIBS dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X, dnl IRIX, Tru64, Cygwin >= 2.5). dnl -lacl is needed on GNU/Linux, -lpacl on OSF/1. if test $use_acl = 0; then AC_SEARCH_LIBS([acl_get_file], [acl pacl], [if test "$ac_cv_search_acl_get_file" != "none required"; then LIB_ACL=$ac_cv_search_acl_get_file fi AC_CHECK_FUNCS( [acl_get_file acl_get_fd acl_set_file acl_set_fd \ acl_free acl_from_mode acl_from_text \ acl_delete_def_file acl_extended_file \ acl_delete_fd_np acl_delete_file_np \ acl_copy_ext_native acl_create_entry_np \ acl_to_short_text acl_free_text]) # If the acl_get_file bug is detected, don't enable the ACL support. gl_ACL_GET_FILE([use_acl=1], []) if test $use_acl = 1; then dnl On GNU/Linux, an additional API is declared in <acl/libacl.h>. AC_CHECK_HEADERS([acl/libacl.h]) AC_REPLACE_FUNCS([acl_entries]) AC_CACHE_CHECK([for ACL_FIRST_ENTRY], [gl_cv_acl_ACL_FIRST_ENTRY], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> int type = ACL_FIRST_ENTRY;]])], [gl_cv_acl_ACL_FIRST_ENTRY=yes], [gl_cv_acl_ACL_FIRST_ENTRY=no])]) if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then AC_DEFINE([HAVE_ACL_FIRST_ENTRY], [1], [Define to 1 if the constant ACL_FIRST_ENTRY exists.]) fi dnl On Mac OS X, other types of ACLs are supported. AC_CACHE_CHECK([for ACL_TYPE_EXTENDED], [gl_cv_acl_ACL_TYPE_EXTENDED], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> int type = ACL_TYPE_EXTENDED;]])], [gl_cv_acl_ACL_TYPE_EXTENDED=yes], [gl_cv_acl_ACL_TYPE_EXTENDED=no])]) if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then AC_DEFINE([HAVE_ACL_TYPE_EXTENDED], [1], [Define to 1 if the ACL type ACL_TYPE_EXTENDED exists.]) fi else LIB_ACL= fi ]) fi dnl Test for Solaris API (Solaris, Cygwin). if test $use_acl = 0; then AC_CHECK_FUNCS([facl]) if test $ac_cv_func_facl = yes; then AC_SEARCH_LIBS([acl_trivial], [sec], [if test "$ac_cv_search_acl_trivial" != "none required"; then LIB_ACL=$ac_cv_search_acl_trivial fi ]) AC_CHECK_FUNCS([acl_trivial]) use_acl=1 fi fi dnl Test for HP-UX API. if test $use_acl = 0; then AC_CHECK_FUNCS([getacl]) if test $ac_cv_func_getacl = yes; then use_acl=1 fi dnl Test for HP-UX 11.11 API. AC_CHECK_HEADERS([aclv.h], [], [], [#include <sys/types.h>]) fi dnl Test for AIX API (AIX 5.3 or newer). if test $use_acl = 0; then AC_CHECK_FUNCS([aclx_get]) if test $ac_cv_func_aclx_get = yes; then use_acl=1 fi fi dnl Test for older AIX API. if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then AC_CHECK_FUNCS([statacl]) if test $ac_cv_func_statacl = yes; then use_acl=1 fi fi dnl Test for NonStop Kernel API. if test $use_acl = 0; then AC_CHECK_FUNCS([aclsort]) if test $ac_cv_func_aclsort = yes; then use_acl=1 fi fi LIBS=$ac_save_LIBS fi if test "$enable_acl$use_acl" = yes0; then AC_MSG_ERROR([ACLs enabled but support not detected]) elif test "$enable_acl$use_acl" = auto0; then AC_MSG_WARN([libacl development library was not found or not usable.]) AC_MSG_WARN([AC_PACKAGE_NAME will be built without ACL support.]) fi fi test -n "$gl_need_lib_has_acl" && LIB_HAS_ACL=$LIB_ACL AC_SUBST([LIB_ACL]) AC_DEFINE_UNQUOTED([USE_ACL], [$use_acl], [Define to nonzero if you want access control list support.]) USE_ACL=$use_acl AC_SUBST([USE_ACL]) ]) # gl_ACL_GET_FILE(IF-WORKS, IF-NOT) # --------------------------------- # If 'acl_get_file' works (does not have a particular bug), # run IF-WORKS, otherwise, IF-NOT. # When building natively, test for a Darwin 8.7.0 bug, whereby acl_get_file # returns NULL, but sets errno = ENOENT for an existing file or directory. # When cross-compiling, assume that this old bug no longer applies. AC_DEFUN([gl_ACL_GET_FILE], [ AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], [gl_cv_func_working_acl_get_file=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> #include <errno.h> ]], [[acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); return acl ? acl_free (acl) != 0 : errno == ENOENT; ]])], [if test $cross_compiling = yes; then gl_cv_func_working_acl_get_file="guessing yes" elif ./conftest$ac_exeext; then gl_cv_func_working_acl_get_file=yes fi])]) AS_IF([test "$gl_cv_func_working_acl_get_file" != no], [$1], [$2]) ]) # On GNU/Linux, testing if a file has an acl can be done with the getxattr # syscall which doesn't require linking against additional libraries. AC_DEFUN([gl_FILE_HAS_ACL], [ AC_REQUIRE([gl_FUNC_ACL_ARG]) if test "$enable_acl" != no; then AC_CACHE_CHECK([for getxattr with XATTR_NAME_POSIX_ACL macros], [gl_cv_getxattr_with_posix_acls], [gl_cv_getxattr_with_posix_acls=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/xattr.h> #include <linux/xattr.h> ]], [[ssize_t a = getxattr (".", XATTR_NAME_POSIX_ACL_ACCESS, 0, 0); ssize_t b = getxattr (".", XATTR_NAME_POSIX_ACL_DEFAULT, 0, 0); return a < 0 || b < 0; ]])], [gl_cv_getxattr_with_posix_acls=yes])]) fi if test "$gl_cv_getxattr_with_posix_acls" = yes; then LIB_HAS_ACL= AC_DEFINE([GETXATTR_WITH_POSIX_ACLS], 1, [Define to 1 if getxattr works with XATTR_NAME_POSIX_ACL_ACCESS and XATTR_NAME_POSIX_ACL_DEFAULT.]) else dnl Set gl_need_lib_has_acl to a nonempty value, so that any dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL. gl_need_lib_has_acl=1 LIB_HAS_ACL=$LIB_ACL fi AC_SUBST([LIB_HAS_ACL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/acos.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acos.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACOS], [ dnl Determine ACOS_LIBM. gl_COMMON_DOUBLE_MATHFUNC([acos]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/acosf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acosf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACOSF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ACOS]) dnl Persuade glibc <math.h> to declare acosf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether acosf() exists. Assume that acosf(), if it exists, is dnl defined in the same library as acos(). save_LIBS="$LIBS" LIBS="$LIBS $ACOS_LIBM" AC_CHECK_FUNCS([acosf]) LIBS="$save_LIBS" if test $ac_cv_func_acosf = yes; then ACOSF_LIBM="$ACOS_LIBM" else HAVE_ACOSF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_acosf, not acosf. AC_CHECK_DECLS([acosf], [REPLACE_ACOSF=1], , [[#include <math.h>]]) ACOSF_LIBM="$ACOS_LIBM" fi AC_SUBST([ACOSF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/acosl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005466�14110572173�0016175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acosl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACOSL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare acosl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ACOSL_LIBM= AC_CACHE_CHECK([whether acosl() can be used without linking with libm], [gl_cv_func_acosl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = acosl; long double x;]], [[return funcptr (x) > 1 || acosl (x) > 1;]])], [gl_cv_func_acosl_no_libm=yes], [gl_cv_func_acosl_no_libm=no]) ]) if test $gl_cv_func_acosl_no_libm = no; then AC_CACHE_CHECK([whether acosl() can be used with libm], [gl_cv_func_acosl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = acosl; long double x;]], [[return funcptr (x) > 1 || acosl (x) > 1;]])], [gl_cv_func_acosl_in_libm=yes], [gl_cv_func_acosl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_acosl_in_libm = yes; then ACOSL_LIBM=-lm fi fi if test $gl_cv_func_acosl_no_libm = yes \ || test $gl_cv_func_acosl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has acosl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([acosl], , [HAVE_DECL_ACOSL=0], [[#include <math.h>]]) else HAVE_DECL_ACOSL=0 HAVE_ACOSL=0 dnl Find libraries needed to link lib/acosl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_ACOS]) ACOSL_LIBM="$ACOS_LIBM" else AC_REQUIRE([gl_FUNC_ASINL]) AC_REQUIRE([gl_FUNC_SQRTL]) dnl Append $ASINL_LIBM to ACOSL_LIBM, avoiding gratuitous duplicates. case " $ACOSL_LIBM " in *" $ASINL_LIBM "*) ;; *) ACOSL_LIBM="$ACOSL_LIBM $ASINL_LIBM" ;; esac dnl Append $SQRTL_LIBM to ACOSL_LIBM, avoiding gratuitous duplicates. case " $ACOSL_LIBM " in *" $SQRTL_LIBM "*) ;; *) ACOSL_LIBM="$ACOSL_LIBM $SQRTL_LIBM" ;; esac fi fi AC_SUBST([ACOSL_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/af_alg.m4����������������������������������������������������������������0000664�0000000�0000000�00000003704�14110572173�0016276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# af_alg.m4 serial 5 dnl Copyright 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Matteo Croce. AC_DEFUN_ONCE([gl_AF_ALG], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_REQUIRE([AC_C_INLINE]) dnl Check whether linux/if_alg.h has needed features. AC_CACHE_CHECK([whether linux/if_alg.h has struct sockaddr_alg.], [gl_cv_header_linux_if_alg_salg], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h> #include <linux/if_alg.h> struct sockaddr_alg salg = { .salg_family = AF_ALG, .salg_type = "hash", .salg_name = "sha1", };]])], [gl_cv_header_linux_if_alg_salg=yes], [gl_cv_header_linux_if_alg_salg=no])]) if test "$gl_cv_header_linux_if_alg_salg" = yes; then AC_DEFINE([HAVE_LINUX_IF_ALG_H], [1], [Define to 1 if you have 'struct sockaddr_alg' defined.]) fi dnl The default is to not use AF_ALG if available, dnl as it's system dependent as to whether the kernel dnl routines are faster than libcrypto for example. use_af_alg=no AC_ARG_WITH([linux-crypto], [AS_HELP_STRING([[--with-linux-crypto]], [use Linux kernel cryptographic API (if available)])], [use_af_alg=$withval], [use_af_alg=no]) dnl We cannot use it if it is not available. if test "$gl_cv_header_linux_if_alg_salg" != yes; then if test "$use_af_alg" != no; then AC_MSG_WARN([Linux kernel cryptographic API not found]) fi use_af_alg=no fi if test "$use_af_alg" != no; then USE_AF_ALG=1 else USE_AF_ALG=0 fi AC_DEFINE_UNQUOTED([USE_LINUX_CRYPTO_API], [$USE_AF_ALG], [Define to 1 if you want to use the Linux kernel cryptographic API.]) ]) ������������������������������������������������������������gnulib-20210822~d383792/m4/aligned_alloc.m4���������������������������������������������������������0000664�0000000�0000000�00000003335�14110572173�0017642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# aligned_alloc.m4 serial 3 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALIGNED_ALLOC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and OpenBSD <stdlib.h> to declare aligned_alloc(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([aligned_alloc]) if test $ac_cv_func_aligned_alloc = yes; then dnl On macOS 11.1 and AIX 7.2, aligned_alloc returns NULL when the alignment dnl argument is smaller than sizeof (void *). AC_CACHE_CHECK([whether aligned_alloc works for small alignments], [gl_cv_func_aligned_alloc_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[return aligned_alloc (2, 18) == NULL; ]]) ], [gl_cv_func_aligned_alloc_works=yes], [gl_cv_func_aligned_alloc_works=no], [case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_aligned_alloc_works="guessing no" ;; # Guess no on macOS. darwin*) gl_cv_func_aligned_alloc_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_aligned_alloc_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_aligned_alloc_works" in *yes) ;; *) REPLACE_ALIGNED_ALLOC=1 ;; esac else dnl The system does not have aligned_alloc. HAVE_ALIGNED_ALLOC=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/alloca.m4����������������������������������������������������������������0000664�0000000�0000000�00000007400�14110572173�0016315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alloca.m4 serial 20 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution.]) ALLOCA_H=alloca.h else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. ALLOCA_H= fi else ALLOCA_H=alloca.h fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) m4_version_prereq([2.70], [], [ # This works around a bug in autoconf <= 2.68 and has simplifications # from 2.70. See: # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=15edf7fd8094fd14a89d9891dd72a9624762597a # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/alphasort.m4�������������������������������������������������������������0000664�0000000�0000000�00000001172�14110572173�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alphasort.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALPHASORT], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) dnl Persuade glibc and Solaris <dirent.h> to declare alphasort(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([alphasort]) if test $ac_cv_func_alphasort = no; then HAVE_ALPHASORT=0 fi ]) # Prerequisites of lib/alphasort.c. AC_DEFUN([gl_PREREQ_ALPHASORT], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ansi-c++.m4��������������������������������������������������������������0000664�0000000�0000000�00000012124�14110572173�0016361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ansi-c++.m4 serial 12 dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. # Sets CXX_CHOICE to 'yes' or 'no', depending on the preferred use of C++. # The default is 'yes'. If the configure.ac contains a definition of the # macro gl_CXX_CHOICE_DEFAULT_NO, then the default is 'no'. In both cases, # the user can change the value by passing the option --disable-cxx or # --enable-cxx, respectively. AC_DEFUN([gl_CXX_CHOICE], [ AC_MSG_CHECKING([whether to use C++]) dnl Plus signs are supported in AC_ARG_ENABLE starting with autoconf-2.66. m4_version_prereq([2.66], [m4_ifdef([gl_CXX_CHOICE_DEFAULT_NO], [AC_ARG_ENABLE([c++], [ --enable-c++ also build C++ sources], [CXX_CHOICE="$enableval"], [CXX_CHOICE=no])], [AC_ARG_ENABLE([c++], [ --disable-c++ do not build C++ sources], [CXX_CHOICE="$enableval"], [CXX_CHOICE=yes])])], [m4_ifdef([gl_CXX_CHOICE_DEFAULT_NO], [AC_ARG_ENABLE([cxx], [ --enable-cxx also build C++ sources], [CXX_CHOICE="$enableval"], [CXX_CHOICE=no])], [AC_ARG_ENABLE([cxx], [ --disable-cxx do not build C++ sources], [CXX_CHOICE="$enableval"], [CXX_CHOICE=yes])])]) AC_MSG_RESULT([$CXX_CHOICE]) AC_SUBST([CXX_CHOICE]) ]) # gl_PROG_ANSI_CXX([ANSICXX_VARIABLE], [ANSICXX_CONDITIONAL]) # Sets ANSICXX_VARIABLE to the name of a sufficiently ANSI C++ compliant # compiler, or to "no" if none is found. # Defines the Automake condition ANSICXX_CONDITIONAL to true if such a compiler # was found, or to false if not. AC_DEFUN([gl_PROG_ANSI_CXX], [ AC_REQUIRE([gl_CXX_CHOICE]) m4_if([$1], [CXX], [], [gl_save_CXX="$CXX"]) if test "$CXX_CHOICE" = no; then CXX=no fi if test -z "$CXX"; then if test -n "$CCC"; then CXX="$CCC" else AC_CHECK_TOOLS([CXX], [g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC], [:]) fi fi if test "$CXX" != no; then dnl Use a modified version of AC_PROG_CXX_WORKS that does not exit dnl upon failure. AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works]) AC_LANG_PUSH([C++]) AC_ARG_VAR([CXX], [C++ compiler command]) AC_ARG_VAR([CXXFLAGS], [C++ compiler flags]) echo 'int main () { return 0; }' > conftest.$ac_ext if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then gl_cv_prog_ansicxx_works=yes if (./conftest; exit) 2>/dev/null; then gl_cv_prog_ansicxx_cross=no else gl_cv_prog_ansicxx_cross=yes fi else gl_cv_prog_ansicxx_works=no fi rm -fr conftest* AC_LANG_POP([C++]) AC_MSG_RESULT([$gl_cv_prog_ansicxx_works]) if test $gl_cv_prog_ansicxx_works = no; then CXX=no else dnl Test for namespaces. dnl We don't bother supporting pre-ANSI-C++ compilers. AC_MSG_CHECKING([whether the C++ compiler supports namespaces]) AC_LANG_PUSH([C++]) cat <<EOF > conftest.$ac_ext #include <iostream> namespace test { using namespace std; } std::ostream* ptr; int main () { return 0; } EOF if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then gl_cv_prog_ansicxx_namespaces=yes else gl_cv_prog_ansicxx_namespaces=no fi rm -fr conftest* AC_LANG_POP([C++]) AC_MSG_RESULT([$gl_cv_prog_ansicxx_namespaces]) if test $gl_cv_prog_ansicxx_namespaces = no; then CXX=no fi fi fi m4_if([$1], [CXX], [], [$1="$CXX" CXX="$gl_save_CXX"]) AC_SUBST([$1]) AM_CONDITIONAL([$2], [test "$$1" != no]) if test "$$1" != no; then dnl This macro invocation resolves an automake error: dnl /usr/local/share/automake-1.11/am/depend2.am: am__fastdepCXX does not appear in AM_CONDITIONAL dnl /usr/local/share/automake-1.11/am/depend2.am: The usual way to define 'am__fastdepCXX' is to add 'AC_PROG_CXX' dnl /usr/local/share/automake-1.11/am/depend2.am: to 'configure.ac' and run 'aclocal' and 'autoconf' again. _AM_DEPENDENCIES([CXX]) dnl Determine a good default for the CXXFLAGS variable. AC_LANG_PUSH([C++]) _AC_LANG_COMPILER_GNU if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi _AC_PROG_CXX_G AC_LANG_POP([C++]) else AM_CONDITIONAL([am__fastdepCXX], [false]) fi ]) # gl_ANSI_CXX # Sets CXX to the name of a sufficiently ANSI C++ compliant compiler, or to # "no" if none is found. # Defines the Automake condition ANSICXX to true if such a compiler was found, # or to false if not. AC_DEFUN([gl_ANSI_CXX], [ gl_PROG_ANSI_CXX([CXX], [ANSICXX]) dnl This line is needed in order to avoid trouble with Autoconf. It makes dnl sure that Autoconf does not insert expansions of AC_PROG_CXX at random dnl places. See <https://savannah.gnu.org/support/?110294>. m4_provide([AC_PROG_CXX]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/arctwo.m4����������������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# arctwo.m4 serial 5 dnl Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/arctwo.c. AC_DEFUN([gl_ARCTWO], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/argp.m4������������������������������������������������������������������0000664�0000000�0000000�00000005144�14110572173�0016016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# argp.m4 serial 16 dnl Copyright (C) 2003-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ARGP], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([program_invocation_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1], [Define to 1 to add extern declaration of program_invocation_name to argp.h])], [[#include <errno.h>]]) AC_CHECK_DECLS([program_invocation_short_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define to 1 to add extern declaration of program_invocation_short_name to argp.h])], [[#include <errno.h>]]) # Check if program_invocation_name and program_invocation_short_name # are defined elsewhere. It is improbable that only one of them will # be defined and other not, I prefer to stay on the safe side and to # test each one separately. AC_MSG_CHECKING([whether program_invocation_name is defined]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *program_invocation_name;]], [[program_invocation_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], [Define if program_invocation_name is defined]) AC_MSG_RESULT([yes]) ], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether program_invocation_short_name is defined]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *program_invocation_short_name;]], [[program_invocation_short_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define if program_invocation_short_name is defined]) AC_MSG_RESULT([yes]) ], [AC_MSG_RESULT([no])]) AC_CHECK_DECLS_ONCE([clearerr_unlocked]) AC_CHECK_DECLS_ONCE([feof_unlocked]) AC_CHECK_DECLS_ONCE([ferror_unlocked]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([fgets_unlocked]) AC_CHECK_DECLS_ONCE([fputc_unlocked]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([fread_unlocked]) AC_CHECK_DECLS_ONCE([fwrite_unlocked]) AC_CHECK_DECLS_ONCE([getc_unlocked]) AC_CHECK_DECLS_ONCE([getchar_unlocked]) AC_CHECK_DECLS_ONCE([putc_unlocked]) AC_CHECK_DECLS_ONCE([putchar_unlocked]) AC_CHECK_FUNCS_ONCE([flockfile funlockfile]) AC_CHECK_HEADERS_ONCE([features.h linewrap.h]) AC_REQUIRE([AC_FUNC_STRERROR_R]) ]) dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt dnl always. AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/argz.m4������������������������������������������������������������������0000664�0000000�0000000�00000005422�14110572173�0016027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Portability macros for glibc argz. -*- Autoconf -*- # # Copyright (C) 2004-2021 Free Software Foundation, Inc. # Written by Gary V. Vaughan <gary@gnu.org> # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 13 argz.m4 AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) AC_CHECK_TYPES([error_t], [], [AC_DEFINE([error_t], [int], [Define to a type to use for 'error_t' if it is not otherwise available.]) AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h does not typedef error_t.])], [#if defined(HAVE_ARGZ_H) # include <argz.h> #endif]) ARGZ_H= AC_CHECK_FUNC([argz_replace], [], [ARGZ_H=argz.h]) dnl if have system argz functions, allow forced use of dnl libltdl-supplied implementation (and default to do so dnl on "known bad" systems). Could use a runtime check, but dnl (a) detecting malloc issues is notoriously unreliable dnl (b) only known system that declares argz functions, dnl provides them, yet they are broken, is cygwin dnl releases prior to 5-May-2007 (1.5.24 and earlier) dnl So, it's more straightforward simply to special case dnl this for known bad systems. AS_IF([test -z "$ARGZ_H"], [AC_CACHE_CHECK( [if argz actually works], [lt_cv_sys_argz_works], [[case $host_os in #( *cygwin*) lt_cv_sys_argz_works=no if test "$cross_compiling" != no; then lt_cv_sys_argz_works="$gl_cross_guess_normal" else lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' save_IFS=$IFS IFS=-. set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` IFS=$save_IFS lt_os_major=${2-0} lt_os_minor=${3-0} lt_os_micro=${4-0} if test "$lt_os_major" -gt 1 \ || { test "$lt_os_major" -eq 1 \ && { test "$lt_os_minor" -gt 5 \ || { test "$lt_os_minor" -eq 5 \ && test "$lt_os_micro" -gt 24; }; }; }; then lt_cv_sys_argz_works=yes fi fi ;; #( *) lt_cv_sys_argz_works=yes ;; esac]]) AS_IF([test "$lt_cv_sys_argz_works" = yes], [AC_DEFINE([HAVE_WORKING_ARGZ], [1], [This value is set to 1 to indicate that the system argz facility works])], [ARGZ_H=argz.h])]) AC_SUBST([ARGZ_H]) AM_CONDITIONAL([GL_GENERATE_ARGZ_H], [test -n "$ARGZ_H"]) ]) # Prerequisites of lib/argz.c. AC_DEFUN([gl_PREREQ_ARGZ], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/arpa_inet_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000005035�14110572173�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# arpa_inet_h.m4 serial 17 dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson and Bruno Haible AC_DEFUN_ONCE([gl_ARPA_INET_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([arpa/inet.h]) if test $ac_cv_header_arpa_inet_h = yes; then HAVE_ARPA_INET_H=1 else HAVE_ARPA_INET_H=0 fi AC_SUBST([HAVE_ARPA_INET_H]) dnl <arpa/inet.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([arpa/inet.h]) AC_REQUIRE([gl_FEATURES_H]) gl_PREREQ_SYS_H_WS2TCPIP dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* On some systems, this header is not self-consistent. */ #if !(defined __GLIBC__ || defined __UCLIBC__) # include <sys/socket.h> #endif #ifdef __TANDEM # include <netdb.h> #endif #include <arpa/inet.h> ]], [inet_ntop inet_pton]) ]) # gl_ARPA_INET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_ARPA_INET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_ARPA_INET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_NTOP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_PTON]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) ]) AC_DEFUN([gl_ARPA_INET_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP]) HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON]) REPLACE_INET_NTOP=0; AC_SUBST([REPLACE_INET_NTOP]) REPLACE_INET_PTON=0; AC_SUBST([REPLACE_INET_PTON]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/asin.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asin.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ASIN], [ dnl Determine ASIN_LIBM. gl_COMMON_DOUBLE_MATHFUNC([asin]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/asinf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asinf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ASINF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ASIN]) dnl Persuade glibc <math.h> to declare asinf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether asinf() exists. Assume that asinf(), if it exists, is dnl defined in the same library as asin(). save_LIBS="$LIBS" LIBS="$LIBS $ASIN_LIBM" AC_CHECK_FUNCS([asinf]) LIBS="$save_LIBS" if test $ac_cv_func_asinf = yes; then ASINF_LIBM="$ASIN_LIBM" else HAVE_ASINF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_asinf, not asinf. AC_CHECK_DECLS([asinf], [REPLACE_ASINF=1], , [[#include <math.h>]]) ASINF_LIBM="$ASIN_LIBM" fi AC_SUBST([ASINF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/asinl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005116�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asinl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ASINL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare asinl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ASINL_LIBM= AC_CACHE_CHECK([whether asinl() can be used without linking with libm], [gl_cv_func_asinl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = asinl; long double x;]], [[return funcptr (x) > 1 || asinl (x) > 1;]])], [gl_cv_func_asinl_no_libm=yes], [gl_cv_func_asinl_no_libm=no]) ]) if test $gl_cv_func_asinl_no_libm = no; then AC_CACHE_CHECK([whether asinl() can be used with libm], [gl_cv_func_asinl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = asinl; long double x;]], [[return funcptr (x) > 1 || asinl (x) > 1;]])], [gl_cv_func_asinl_in_libm=yes], [gl_cv_func_asinl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_asinl_in_libm = yes; then ASINL_LIBM=-lm fi fi if test $gl_cv_func_asinl_no_libm = yes \ || test $gl_cv_func_asinl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has asinl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([asinl], , [HAVE_DECL_ASINL=0], [[#include <math.h>]]) else HAVE_DECL_ASINL=0 HAVE_ASINL=0 dnl Find libraries needed to link lib/asinl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_ASIN]) ASINL_LIBM="$ASIN_LIBM" else AC_REQUIRE([gl_FUNC_SQRTL]) dnl Append $SQRTL_LIBM to ASINL_LIBM, avoiding gratuitous duplicates. case " $ASINL_LIBM " in *" $SQRTL_LIBM "*) ;; *) ASINL_LIBM="$ASINL_LIBM $SQRTL_LIBM" ;; esac fi fi AC_SUBST([ASINL_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/asm-underscore.m4��������������������������������������������������������0000664�0000000�0000000�00000005270�14110572173�0020014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asm-underscore.m4 serial 5 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. # gl_ASM_SYMBOL_PREFIX # Tests for the prefix of C symbols at the assembly language level and the # linker level. This prefix is either an underscore or empty. Defines the # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to # a stringified variant of this prefix. AC_DEFUN([gl_ASM_SYMBOL_PREFIX], [ AC_REQUIRE([AC_PROG_EGREP]) dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because dnl 1. It works only for GCC. dnl 2. It is incorrectly defined on some platforms, in some GCC versions. AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK( [whether C symbols are prefixed with underscore at the linker level], [gl_cv_prog_as_underscore], [cat > conftest.c <<EOF #ifdef __cplusplus extern "C" int foo (void); #endif int foo(void) { return 0; } EOF # Look for the assembly language name in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* ]) if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], [Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty.]) ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' AC_SUBST([ASM_SYMBOL_PREFIX]) ]) # gl_C_ASM # Determines how to produce an assembly language file from C source code. # Sets the variables: # gl_asmext - the extension of assembly language output, # gl_c_asm_opt - the C compiler option that produces assembly language output. AC_DEFUN([gl_C_ASM], [ AC_EGREP_CPP([MicrosoftCompiler], [ #ifdef _MSC_VER MicrosoftCompiler #endif ], [dnl Microsoft's 'cl' and 'clang-cl' produce an .asm file, whereas 'clang' dnl produces a .s file. Need to distinguish 'clang' and 'clang-cl'. rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c) >/dev/null 2>&1 if test -f conftest.o; then gl_asmext='s' gl_c_asm_opt='-S' else gl_asmext='asm' gl_c_asm_opt='-c -Fa' fi rm -f conftest* ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/assert.m4����������������������������������������������������������������0000664�0000000�0000000�00000001660�14110572173�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 7 # Copyright (C) 1998-1999, 2001, 2004, 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl based on code from Eleftherios Gkioulekas dnl Autoconf 2.60 provides AC_HEADER_ASSERT for the same purpose, but dnl it has broken semantics for --enable-assert until 2.64. AC_DEFUN([gl_ASSERT], [ AC_MSG_CHECKING([whether to enable assertions]) AC_ARG_ENABLE([assert], [AS_HELP_STRING([--disable-assert], [turn off assertions])], [AS_IF([test "x$enableval" = xno], [AC_DEFINE([NDEBUG], [1], [Define to 1 if assertions should be disabled.])], [test "x$enableval" != xyes], [AC_MSG_WARN([invalid argument supplied to --enable-assert]) enable_assert=yes])], [enable_assert=yes]) AC_MSG_RESULT([$enable_assert]) ]) ��������������������������������������������������������������������������������gnulib-20210822~d383792/m4/assert_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000001750�14110572173�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# assert-h.m4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN([gl_ASSERT_H], [ ASSERT_H= AC_CACHE_CHECK([for static_assert], [gl_cv_static_assert], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <assert.h> static_assert (2 + 2 == 4, "arithmetic doesn't work"); static_assert (2 + 2 == 4); ]], [[ static_assert (sizeof (char) == 1, "sizeof doesn't work"); static_assert (sizeof (char) == 1); ]])], [gl_cv_static_assert=yes], [gl_cv_static_assert=no])]) if test $gl_cv_static_assert = no; then ASSERT_H=assert.h gl_NEXT_HEADERS([assert.h]) fi AC_SUBST([ASSERT_H]) AM_CONDITIONAL([GL_GENERATE_ASSERT_H], [test -n "$ASSERT_H"]) ]) ������������������������gnulib-20210822~d383792/m4/atan.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATAN], [ dnl Determine ATAN_LIBM. gl_COMMON_DOUBLE_MATHFUNC([atan]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atan2.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0016071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan2.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATAN2], [ dnl Determine ATAN2_LIBM. gl_COMMON_DOUBLE_MATHFUNC([atan2]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atan2f.m4����������������������������������������������������������������0000664�0000000�0000000�00000002123�14110572173�0016232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan2f.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATAN2F], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ATAN2]) dnl Persuade glibc <math.h> to declare atan2f(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether atan2f() exists. Assume that atan2f(), if it exists, is dnl defined in the same library as atan2(). save_LIBS="$LIBS" LIBS="$LIBS $ATAN2_LIBM" AC_CHECK_FUNCS([atan2f]) LIBS="$save_LIBS" if test $ac_cv_func_atan2f = yes; then ATAN2F_LIBM="$ATAN2_LIBM" else HAVE_ATAN2F=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_atan2f, not atan2f. AC_CHECK_DECLS([atan2f], [REPLACE_ATAN2F=1], , [[#include <math.h>]]) ATAN2F_LIBM="$ATAN2_LIBM" fi AC_SUBST([ATAN2F_LIBM]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atanf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atanf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ATAN]) dnl Persuade glibc <math.h> to declare atanf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether atanf() exists. Assume that atanf(), if it exists, is dnl defined in the same library as atan(). save_LIBS="$LIBS" LIBS="$LIBS $ATAN_LIBM" AC_CHECK_FUNCS([atanf]) LIBS="$save_LIBS" if test $ac_cv_func_atanf = yes; then ATANF_LIBM="$ATAN_LIBM" else HAVE_ATANF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_atanf, not atanf. AC_CHECK_DECLS([atanf], [REPLACE_ATANF=1], , [[#include <math.h>]]) ATANF_LIBM="$ATAN_LIBM" fi AC_SUBST([ATANF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atanl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005122�14110572173�0016160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atanl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare atanl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ATANL_LIBM= AC_CACHE_CHECK([whether atanl() can be used without linking with libm], [gl_cv_func_atanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = atanl; long double x;]], [[return funcptr (x) > 1 || atanl (x) > 1;]])], [gl_cv_func_atanl_no_libm=yes], [gl_cv_func_atanl_no_libm=no]) ]) if test $gl_cv_func_atanl_no_libm = no; then AC_CACHE_CHECK([whether atanl() can be used with libm], [gl_cv_func_atanl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = atanl; long double x;]], [[return funcptr (x) > 1 || atanl (x) > 1;]])], [gl_cv_func_atanl_in_libm=yes], [gl_cv_func_atanl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_atanl_in_libm = yes; then ATANL_LIBM=-lm fi fi if test $gl_cv_func_atanl_no_libm = yes \ || test $gl_cv_func_atanl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has atanl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([atanl], , [HAVE_DECL_ATANL=0], [[#include <math.h>]]) else HAVE_DECL_ATANL=0 HAVE_ATANL=0 dnl Find libraries needed to link lib/atanl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_ATAN]) ATANL_LIBM="$ATAN_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) dnl Append $ISNANL_LIBM to ATANL_LIBM, avoiding gratuitous duplicates. case " $ATANL_LIBM " in *" $ISNANL_LIBM "*) ;; *) ATANL_LIBM="$ATANL_LIBM $ISNANL_LIBM" ;; esac fi fi AC_SUBST([ATANL_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atexit.m4����������������������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0016362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atexit.m4 serial 4 dnl Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATEXIT], [ AC_CHECK_FUNCS([atexit]) ]) # Prerequisites of lib/atexit.c. AC_DEFUN([gl_PREREQ_ATEXIT], [ : ]) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/atoll.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000763�14110572173�0016202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atoll.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ATOLL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([atoll]) if test $ac_cv_func_atoll = no; then HAVE_ATOLL=0 fi ]) # Prerequisites of lib/atoll.c. AC_DEFUN([gl_PREREQ_ATOLL], [ : ]) �������������gnulib-20210822~d383792/m4/autobuild.m4�������������������������������������������������������������0000664�0000000�0000000�00000002007�14110572173�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# autobuild.m4 serial 8 dnl Copyright (C) 2004, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # Usage: AB_INIT([MODE]). AC_DEFUN([AB_INIT], [ AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi AC_MSG_NOTICE([autobuild project... $AB_PACKAGE]) if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi AC_MSG_NOTICE([autobuild revision... $AB_VERSION]) hostname=`hostname` if test "$hostname"; then AC_MSG_NOTICE([autobuild hostname... $hostname]) fi m4_if([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])]) date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then AC_MSG_NOTICE([autobuild timestamp... $date]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/backupfile.m4������������������������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# backupfile.m4 serial 14 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/backupfile.c. AC_DEFUN([gl_BACKUPFILE], [ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) AC_REQUIRE([AC_SYS_LONG_FILE_NAMES]) AC_CHECK_FUNCS_ONCE([pathconf]) ]) ����������������������������gnulib-20210822~d383792/m4/base32.m4����������������������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0016146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base32.m4 serial 4 dnl Copyright (C) 2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BASE32], [ gl_PREREQ_BASE32 ]) # Prerequisites of lib/base32.c. AC_DEFUN([gl_PREREQ_BASE32], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ����������������������������������������������������������������������������gnulib-20210822~d383792/m4/base64.m4����������������������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0016153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base64.m4 serial 4 dnl Copyright (C) 2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BASE64], [ gl_PREREQ_BASE64 ]) # Prerequisites of lib/base64.c. AC_DEFUN([gl_PREREQ_BASE64], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ����������������������������������������������������������������������������gnulib-20210822~d383792/m4/bison-i18n.m4������������������������������������������������������������0000664�0000000�0000000�00000005242�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# bison-i18n.m4 serial 4 dnl Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Support for internationalization of bison-generated parsers. dnl BISON_I18N dnl should be used in configure.ac, after AM_GNU_GETTEXT. If USE_NLS is yes, it dnl sets BISON_LOCALEDIR to indicate where to find the bison-runtime.mo files dnl and defines YYENABLE_NLS if there are bison-runtime.mo files at all. AC_DEFUN([BISON_I18N], [ if test -z "$USE_NLS"; then echo "The BISON-I18N macro is used without being preceded by AM-GNU-GETTEXT." | sed -e 's/-/_/g' 1>&2 exit 1 fi BISON_LOCALEDIR= BISON_USE_NLS=no if test "$USE_NLS" = yes; then dnl Determine bison's localedir. dnl Generally, accept an option --with-bison-prefix=PREFIX to indicate where dnl find bison's runtime data. Additionally, for users who have installed dnl bison in user directories, query the 'bison' program found in $PATH dnl (but not when cross-compiling). dnl Usually ${prefix}/share/locale, but can be influenced by the configure dnl options --datarootdir and --localedir. BISON_LOCALEDIR="${localedir}" AC_ARG_WITH([bison-prefix], [[ --with-bison-prefix=DIR search for bison's runtime data in DIR/share]], [if test "X$withval" != "X" && test "X$withval" != "Xno"; then BISON_LOCALEDIR="$withval/share/locale" fi ]) if test $cross_compiling != yes; then dnl AC_PROG_YACC sets the YACC variable; other macros set the BISON dnl variable. But even is YACC is called "yacc", it may be a script that dnl invokes bison and accepts the --print-localedir option. dnl YACC's default value is empty; BISON's default value is :. if (${YACC-${BISON-:}} --print-localedir) >/dev/null 2>&1; then BISON_LOCALEDIR=`${YACC-${BISON-:}} --print-localedir` fi fi if test -n "$BISON_LOCALEDIR"; then dnl There is no need to enable internationalization if the user doesn't dnl want message catalogs. So look at the language/locale names for dnl which the user wants message catalogs. This is $LINGUAS. If unset, dnl he wants all of them; if non-empty, he wants some of them. USER_LINGUAS="${LINGUAS-%UNSET%}" if test -n "$USER_LINGUAS"; then BISON_USE_NLS=yes fi fi AC_SUBST([BISON_LOCALEDIR]) fi if test $BISON_USE_NLS = yes; then AC_DEFINE([YYENABLE_NLS], [1], [Define to 1 to internationalize bison runtime messages.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/bison.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007120�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are two types of parser skeletons: # # * Those that can be used with any Yacc implementation, including bison. # For these, in the configure.ac, up to Autoconf 2.69, you could use # AC_PROG_YACC # In newer Autoconf versions, however, this macro is broken. See # https://lists.gnu.org/archive/html/autoconf-patches/2013-03/msg00000.html # https://lists.gnu.org/archive/html/bug-autoconf/2018-12/msg00001.html # In the Makefile.am you could use # $(SHELL) $(YLWRAP) $(srcdir)/foo.y \ # y.tab.c foo.c \ # y.tab.h foo.h \ # y.output foo.output \ # -- $(YACC) $(YFLAGS) $(AM_YFLAGS) # or similar. # # * Those that make use of Bison extensions. For example, # - %define api.pure requires bison 2.7 or newer, # - %precedence requires bison 3.0 or newer. # For these, in the configure.ac you will need an invocation of # gl_PROG_BISON([VARIABLE], [MIN_BISON_VERSION]) # Example: # gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) # With this preparation, in the Makefile.am there are two ways to formulate # the invocation. Both are direct, without use of 'ylwrap'. # (a) You can invoke # $(VARIABLE) -d $(SOME_BISON_OPTIONS) --output foo.c $(srcdir)/foo.y # or similar. # (b) If you want the invocation to honor an YFLAGS=... parameter passed to # 'configure' or an YFLAGS environment variable present at 'configure' # time, add an invocation of gl_BISON to the configure.ac, and write # $(VARIABLE) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/foo.y # or similar. # This macro defines the autoconf variable VARIABLE to 'bison' if the specified # minimum version of bison is found in $PATH, or to ':' otherwise. AC_DEFUN([gl_PROG_BISON], [ AC_CHECK_PROGS([$1], [bison]) if test -z "$[$1]"; then ac_verc_fail=yes else cat >conftest.y <<_ACEOF %require "$2" %% exp: _ACEOF AC_MSG_CHECKING([for bison $2 or newer]) ac_prog_version=`$$1 --version 2>&1 | sed -n 's/^.*GNU Bison.* \([[0-9]]*\.[[0-9.]]*\).*$/\1/p'` : ${ac_prog_version:='v. ?.??'} if $$1 conftest.y -o conftest.c 2>/dev/null; then ac_prog_version="$ac_prog_version, ok" ac_verc_fail=no else ac_prog_version="$ac_prog_version, bad" ac_verc_fail=yes fi rm -f conftest.y conftest.c AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then [$1]=: fi AC_SUBST([$1]) ]) # This macro sets the autoconf variables YACC (for old-style yacc Makefile # rules) and YFLAGS (to allow options to be passed as 'configure' time). AC_DEFUN([gl_BISON], [ : ${YACC='bison -o y.tab.c'} dnl dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB dnl requires an Autoconf greater than 2.59c, but it will probably still be dnl useful to override the description of YACC in the --help output, re dnl parse-datetime.y assuming 'bison -o y.tab.c'. AC_ARG_VAR([YACC], [The "Yet Another C Compiler" implementation to use. Defaults to 'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely break on most systems.])dnl AC_ARG_VAR([YFLAGS], [YFLAGS contains the list arguments that will be passed by default to Bison. This script will default YFLAGS to the empty string to avoid a default value of '-d' given by some make applications.])dnl ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/btowc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005457�14110572173�0016212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# btowc.m4 serial 12 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Check whether <wchar.h> is usable at all, first. Otherwise the test dnl program below may lead to an endless loop. See dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) AC_CHECK_FUNCS_ONCE([btowc]) if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. AC_CACHE_CHECK([whether btowc(0) is correct], [gl_cv_func_btowc_nul], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; }]])], [gl_cv_func_btowc_nul=yes], [gl_cv_func_btowc_nul=no], [ changequote(,)dnl case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac changequote([,])dnl ]) ]) dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. AC_CACHE_CHECK([whether btowc(EOF) is correct], [gl_cv_func_btowc_eof], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; }]])], [gl_cv_func_btowc_eof=yes], [gl_cv_func_btowc_eof=no], [:]) fi ]) case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi ]) # Prerequisites of lib/btowc.c. AC_DEFUN([gl_PREREQ_BTOWC], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/builtin-expect.m4��������������������������������������������������������0000664�0000000�0000000�00000003023�14110572173�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check for __builtin_expect. dnl Copyright 2016-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in <builtins.h>"], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/byteswap.m4��������������������������������������������������������������0000664�0000000�0000000�00000001103�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# byteswap.m4 serial 4 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Oskar Liljeblad. AC_DEFUN([gl_BYTESWAP], [ dnl Prerequisites of lib/byteswap.in.h. AC_CHECK_HEADERS([byteswap.h], [ BYTESWAP_H='' ], [ BYTESWAP_H='byteswap.h' ]) AC_SUBST([BYTESWAP_H]) AM_CONDITIONAL([GL_GENERATE_BYTESWAP_H], [test -n "$BYTESWAP_H"]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/c-stack.m4���������������������������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0016412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check prerequisites for compiling lib/c-stack.c. # Copyright (C) 2002-2004, 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # serial 25 AC_DEFUN([gl_C_STACK], [ dnl 'c-stack' needs -lsigsegv if and only if the 'sigsegv' module needs it. AC_REQUIRE([gl_SIGSEGV]) if test $gl_sigsegv_uses_libsigsegv = yes; then AC_SUBST([LIBCSTACK], [$LIBSIGSEGV]) AC_SUBST([LTLIBCSTACK], [$LTLIBSIGSEGV]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/c-strtod.m4��������������������������������������������������������������0000664�0000000�0000000�00000002707�14110572173�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# c-strtod.m4 serial 18 # Copyright (C) 2004-2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. dnl Prerequisites of lib/c-strtod.c. AC_DEFUN([gl_C_STRTOD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gt_FUNC_USELOCALE]) AC_CHECK_HEADERS_ONCE([xlocale.h]) dnl We can't use AC_CHECK_FUNC here, because strtod_l() is defined as a dnl static inline function when compiling for Android 7.1 or older. AC_CACHE_CHECK([for strtod_l], [gl_cv_func_strtod_l], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif locale_t loc; ]], [[char *end; return strtod_l("0",&end,loc) < 0.0; ]]) ], [gl_cv_func_strtod_l=yes], [gl_cv_func_strtod_l=no]) ]) if test $gl_cv_func_strtod_l = yes; then HAVE_STRTOD_L=1 else HAVE_STRTOD_L=0 fi AC_DEFINE_UNQUOTED([HAVE_STRTOD_L], [$HAVE_STRTOD_L], [Define to 1 if the system has the 'strtod_l' function.]) ]) dnl Prerequisites of lib/c-strtold.c. AC_DEFUN([gl_C_STRTOLD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gt_FUNC_USELOCALE]) AC_CHECK_FUNCS([strtold_l]) ]) ���������������������������������������������������������gnulib-20210822~d383792/m4/c32rtomb.m4��������������������������������������������������������������0000664�0000000�0000000�00000004051�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# c32rtomb.m4 serial 3 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_C32RTOMB], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) dnl We can't use AC_CHECK_FUNC here, because c32rtomb() is defined as a dnl static inline function on Haiku 2020. AC_CACHE_CHECK([for c32rtomb], [gl_cv_func_c32rtomb], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <uchar.h> ]], [[char buf[8]; return c32rtomb (buf, 0, NULL) == 0; ]]) ], [gl_cv_func_c32rtomb=yes], [gl_cv_func_c32rtomb=no]) ]) if test $gl_cv_func_c32rtomb = no; then HAVE_C32RTOMB=0 else dnl When we override mbrtoc32, redefining the meaning of the char32_t dnl values, we need to override c32rtomb as well, for consistency. if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_C32RTOMB=1 fi AC_CACHE_CHECK([whether c32rtomb return value is correct], [gl_cv_func_c32rtomb_retval], [ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_c32rtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_c32rtomb_retval="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <uchar.h> int main () { int result = 0; if (c32rtomb (NULL, 0, NULL) != 1) result |= 1; return result; }]])], [gl_cv_func_c32rtomb_retval=yes], [gl_cv_func_c32rtomb_retval=no], [:]) ]) case "$gl_cv_func_c32rtomb_retval" in *yes) ;; *) AC_DEFINE([C32RTOMB_RETVAL_BUG], [1], [Define if the c32rtomb function has an incorrect return value.]) REPLACE_C32RTOMB=1 ;; esac fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/calloc.m4����������������������������������������������������������������0000664�0000000�0000000�00000005611�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# calloc.m4 serial 27 # Copyright (C) 2004-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # Determine whether calloc (N, S) returns non-NULL when N*S is zero, # and returns NULL when N*S overflows. # If so, define HAVE_CALLOC. Otherwise, define calloc to rpl_calloc # and arrange to use a calloc wrapper function that does work in that case. # _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT]) # ------------------------------------- # If calloc is compatible with GNU calloc, run IF-WORKS, otherwise, IF-NOT. AC_DEFUN([_AC_FUNC_CALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether calloc (0, n) and calloc (n, 0) return nonnull], [ac_cv_func_calloc_0_nonnull], [if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ]])], [], [ac_cv_func_calloc_0_nonnull=no]) else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi ]) AS_CASE([$ac_cv_func_calloc_0_nonnull], [*yes], [$1], [$2]) ]) # gl_FUNC_CALLOC_GNU # ------------------ # Replace calloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_CALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CALLOC_POSIX]) if test $REPLACE_CALLOC = 0; then _AC_FUNC_CALLOC_IF([], [REPLACE_CALLOC=1]) fi ])# gl_FUNC_CALLOC_GNU # gl_FUNC_CALLOC_POSIX # -------------------- # Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t or size_t overflow), # and replace calloc if it is not. AC_DEFUN([gl_FUNC_CALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC = 1; then REPLACE_CALLOC=1 fi dnl Although in theory we should also test for size_t overflow, dnl in practice testing for ptrdiff_t overflow suffices dnl since PTRDIFF_MAX <= SIZE_MAX on all known Gnulib porting targets. dnl A separate size_t test would slow down 'configure'. ]) �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/canon-host.m4������������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0017133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# canon-host.m4 serial 10 dnl Copyright (C) 2002-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PREREQ_CANON_HOST], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/canonicalize.m4����������������������������������������������������������0000664�0000000�0000000�00000013533�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# canonicalize.m4 serial 37 dnl Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Provides canonicalize_file_name and canonicalize_filename_mode, but does # not provide or fix realpath. AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name faccessat]) AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 ;; esac fi ]) # Provides canonicalize_file_name and realpath. AC_DEFUN([gl_CANONICALIZE_LGPL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 if test $ac_cv_func_realpath = no; then HAVE_REALPATH=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_REALPATH=1 ;; esac fi else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 REPLACE_REALPATH=1 ;; esac fi ]) # Like gl_CANONICALIZE_LGPL, except prepare for separate compilation # (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ). AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name faccessat]) dnl On native Windows, we use _getcwd(), regardless whether getcwd() is dnl available through the linker option '-loldnames'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) ;; *) AC_CHECK_FUNCS([getcwd]) ;; esac AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Check whether realpath works. Assume that if a platform has both # realpath and canonicalize_file_name, but the former is broken, then # so is the latter. AC_DEFUN([gl_FUNC_REALPATH_WORKS], [ AC_CHECK_FUNCS_ONCE([realpath lstat]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ rm -rf conftest.a conftest.d touch conftest.a # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.a conftest.l fi mkdir conftest.d AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ ]GL_NOCRASH[ #include <errno.h> #include <stdlib.h> #include <string.h> ]], [[ int result = 0; /* This test fails on Solaris 10. */ { char *name = realpath ("conftest.a", NULL); if (!(name && *name == '/')) result |= 1; free (name); } /* This test fails on older versions of Cygwin. */ { char *name = realpath ("conftest.b/../conftest.a", NULL); if (name != NULL) result |= 2; free (name); } /* This test fails on Cygwin 2.9. */ #if HAVE_LSTAT { char *name = realpath ("conftest.l/../conftest.a", NULL); if (name != NULL || errno != ENOTDIR) result |= 4; free (name); } #endif /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */ { char *name = realpath ("conftest.a/", NULL); if (name != NULL) result |= 8; free (name); } /* This test fails on AIX 7, Solaris 10. */ { char *name1 = realpath (".", NULL); char *name2 = realpath ("conftest.d//./..", NULL); if (! name1 || ! name2 || strcmp (name1, name2)) result |= 16; free (name1); free (name2); } #ifdef __linux__ /* On Linux, // is the same as /. See also double-slash-root.m4. realpath() should respect this. This test fails on musl libc 1.2.2. */ { char *name = realpath ("//", NULL); if (! name || strcmp (name, "/")) result |= 32; free (name); } #endif return result; ]]) ], [gl_cv_func_realpath_works=yes], [case $? in 32) gl_cv_func_realpath_works=nearly ;; *) gl_cv_func_realpath_works=no ;; esac ], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; # Guess 'nearly' on musl systems. *-musl*) gl_cv_func_realpath_works="guessing nearly" ;; # Guess no on Cygwin. cygwin*) gl_cv_func_realpath_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_realpath_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.a conftest.l conftest.d ]) case "$gl_cv_func_realpath_works" in *yes) AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles leading slashes and a trailing slash correctly.]) ;; *nearly) AC_DEFINE([FUNC_REALPATH_NEARLY_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles a trailing slash correctly.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cbrt.m4������������������������������������������������������������������0000664�0000000�0000000�00000002553�14110572173�0016020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cbrt.m4 serial 2 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CBRT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare cbrt(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine CBRT_LIBM. gl_COMMON_DOUBLE_MATHFUNC([cbrt]) dnl Test whether cbrt() exists. save_LIBS="$LIBS" LIBS="$LIBS $CBRT_LIBM" AC_CHECK_FUNCS([cbrt]) LIBS="$save_LIBS" if test $ac_cv_func_cbrt = no; then HAVE_CBRT=0 dnl Find libraries needed to link lib/cbrt.c. AC_REQUIRE([gl_FUNC_FABS]) AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_LDEXP]) CBRT_LIBM= dnl Append $FABS_LIBM to CBRT_LIBM, avoiding gratuitous duplicates. case " $CBRT_LIBM " in *" $FABS_LIBM "*) ;; *) CBRT_LIBM="$CBRT_LIBM $FABS_LIBM" ;; esac dnl Append $FREXP_LIBM to CBRT_LIBM, avoiding gratuitous duplicates. case " $CBRT_LIBM " in *" $FREXP_LIBM "*) ;; *) CBRT_LIBM="$CBRT_LIBM $FREXP_LIBM" ;; esac dnl Append $LDEXP_LIBM to CBRT_LIBM, avoiding gratuitous duplicates. case " $CBRT_LIBM " in *" $LDEXP_LIBM "*) ;; *) CBRT_LIBM="$CBRT_LIBM $LDEXP_LIBM" ;; esac fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cbrtf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005555�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cbrtf.m4 serial 4 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CBRTF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CBRT]) dnl Persuade glibc <math.h> to declare cbrtf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether cbrtf() exists. Assume that cbrtf(), if it exists, is dnl defined in the same library as cbrt(). save_LIBS="$LIBS" LIBS="$LIBS $CBRT_LIBM" AC_CHECK_FUNCS([cbrtf]) LIBS="$save_LIBS" if test $ac_cv_func_cbrtf = yes; then CBRTF_LIBM="$CBRT_LIBM" dnl Also check whether it's declared. dnl IRIX 6.5 has cbrtf() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([cbrtf], , [HAVE_DECL_CBRTF=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $CBRTF_LIBM" gl_FUNC_CBRTF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_cbrtf_works" in *yes) ;; *) REPLACE_CBRTF=1 ;; esac else HAVE_CBRTF=0 HAVE_DECL_CBRTF=0 fi if test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1; then dnl Find libraries needed to link lib/cbrtf.c. AC_REQUIRE([gl_FUNC_FABSF]) AC_REQUIRE([gl_FUNC_FREXPF]) AC_REQUIRE([gl_FUNC_LDEXPF]) CBRTF_LIBM= dnl Append $FABSF_LIBM to CBRTF_LIBM, avoiding gratuitous duplicates. case " $CBRTF_LIBM " in *" $FABSF_LIBM "*) ;; *) CBRTF_LIBM="$CBRTF_LIBM $FABSF_LIBM" ;; esac dnl Append $FREXPF_LIBM to CBRTF_LIBM, avoiding gratuitous duplicates. case " $CBRTF_LIBM " in *" $FREXPF_LIBM "*) ;; *) CBRTF_LIBM="$CBRTF_LIBM $FREXPF_LIBM" ;; esac dnl Append $LDEXPF_LIBM to CBRTF_LIBM, avoiding gratuitous duplicates. case " $CBRTF_LIBM " in *" $LDEXPF_LIBM "*) ;; *) CBRTF_LIBM="$CBRTF_LIBM $LDEXPF_LIBM" ;; esac fi AC_SUBST([CBRTF_LIBM]) ]) dnl Test whether cbrtf() works. dnl It returns wrong values on IRIX 6.5. AC_DEFUN([gl_FUNC_CBRTF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether cbrtf works], [gl_cv_func_cbrtf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile float x; volatile float y; int main () { extern #ifdef __cplusplus "C" #endif float cbrtf (float); /* This test fails on IRIX 6.5. */ x = - 0.0f; y = cbrtf (x); if (!(y == 0.0f)) return 1; return 0; } ]])], [gl_cv_func_cbrtf_works=yes], [gl_cv_func_cbrtf_works=no], [case "$host_os" in irix*) gl_cv_func_cbrtf_works="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_cbrtf_works="guessing yes";; *) gl_cv_func_cbrtf_works="guessing yes";; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cbrtl-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cbrtl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in cbrtl.m4 and not inlined in the dnl module description), so that gl_FUNC_CBRTL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_CBRTL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_cbrtl_required=ieee]) AC_REQUIRE([gl_FUNC_CBRTL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cbrtl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011367�14110572173�0016177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cbrtl.m4 serial 10 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CBRTL], [ m4_divert_text([DEFAULTS], [gl_cbrtl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_CBRT]) dnl Persuade glibc <math.h> to declare cbrtl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether cbrtl() exists. Assume that cbrtl(), if it exists, is dnl defined in the same library as cbrt(). save_LIBS="$LIBS" LIBS="$LIBS $CBRT_LIBM" AC_CHECK_FUNCS([cbrtl]) LIBS="$save_LIBS" if test $ac_cv_func_cbrtl = yes; then CBRTL_LIBM="$CBRT_LIBM" dnl Also check whether it's declared. dnl IRIX 6.5 has cbrtl() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([cbrtl], , [HAVE_DECL_CBRTL=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $CBRTL_LIBM" gl_FUNC_CBRTL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_cbrtl_works" in *yes) ;; *) REPLACE_CBRTL=1 ;; esac m4_ifdef([gl_FUNC_CBRTL_IEEE], [ if test $gl_cbrtl_required = ieee && test $REPLACE_CBRTL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether cbrtl works according to ISO C 99 with IEC 60559], [gl_cv_func_cbrtl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $CBRTL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { extern #ifdef __cplusplus "C" #endif long double cbrtl (long double); long double (* volatile my_cbrtl) (long double) = argc ? cbrtl : dummy; long double f; /* Test cbrtl(-0.0). This test fails on IRIX 6.5. */ f = my_cbrtl (minus_zerol); if (!(f == 0.0L) || (signbitl (minus_zerol) && !signbitl (f))) return 1; return 0; } ]])], [gl_cv_func_cbrtl_ieee=yes], [gl_cv_func_cbrtl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_cbrtl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_cbrtl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_cbrtl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_cbrtl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_cbrtl_ieee" in *yes) ;; *) REPLACE_CBRTL=1 ;; esac fi ]) else HAVE_CBRTL=0 HAVE_DECL_CBRTL=0 fi if test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; then dnl Find libraries needed to link lib/cbrtl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then CBRTL_LIBM="$CBRT_LIBM" else AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_LDEXPL]) CBRTL_LIBM= dnl Append $FREXPL_LIBM to CBRTL_LIBM, avoiding gratuitous duplicates. case " $CBRTL_LIBM " in *" $FREXPL_LIBM "*) ;; *) CBRTL_LIBM="$CBRTL_LIBM $FREXPL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to CBRTL_LIBM, avoiding gratuitous duplicates. case " $CBRTL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) CBRTL_LIBM="$CBRTL_LIBM $LDEXPL_LIBM" ;; esac fi fi AC_SUBST([CBRTL_LIBM]) ]) dnl Test whether cbrtl() works. dnl On OpenBSD 5.1/SPARC, cbrtl(16.0L) is = 1.2599... AC_DEFUN([gl_FUNC_CBRTL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether cbrtl works], [gl_cv_func_cbrtl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> extern #ifdef __cplusplus "C" #endif long double cbrtl (long double); volatile long double x; long double y; int main () { x = 16.0L; y = cbrtl (x); if (y < 2.0L) return 1; return 0; } ]])], [gl_cv_func_cbrtl_works=yes], [gl_cv_func_cbrtl_works=no], [case "$host_os" in openbsd*) gl_cv_func_cbrtl_works="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_cbrtl_works="guessing yes";; *) gl_cv_func_cbrtl_works="guessing yes";; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ceil-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001110�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceil-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in ceil.m4 and not inlined in the dnl module description), so that gl_FUNC_CEIL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_CEIL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_ceil_required=ieee]) AC_REQUIRE([gl_FUNC_CEIL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ceil.m4������������������������������������������������������������������0000664�0000000�0000000�00000006700�14110572173�0016000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceil.m4 serial 15 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CEIL], [ m4_divert_text([DEFAULTS], [gl_ceil_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Test whether ceil() can be used without libm. gl_FUNC_CEIL_LIBS if test "$CEIL_LIBM" = "?"; then CEIL_LIBM= fi m4_ifdef([gl_FUNC_CEIL_IEEE], [ if test $gl_ceil_required = ieee && test $REPLACE_CEIL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ceil works according to ISO C 99 with IEC 60559], [gl_cv_func_ceil_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $CEIL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_ceil) (double) = argc ? ceil : dummy; int result = 0; /* Test whether ceil (-0.0) is -0.0. */ if (signbitd (minus_zerod) && !signbitd (my_ceil (minus_zerod))) result |= 1; /* Test whether ceil (-0.3) is -0.0. */ if (signbitd (-0.3) && !signbitd (my_ceil (-0.3))) result |= 2; return result; } ]])], [gl_cv_func_ceil_ieee=yes], [gl_cv_func_ceil_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ceil_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ceil_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ceil_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ceil_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_ceil_ieee" in *yes) ;; *) REPLACE_CEIL=1 ;; esac fi ]) if test $REPLACE_CEIL = 1; then dnl No libraries are needed to link lib/ceil.c. CEIL_LIBM= fi AC_SUBST([CEIL_LIBM]) ]) # Determines the libraries needed to get the ceil() function. # Sets CEIL_LIBM. AC_DEFUN([gl_FUNC_CEIL_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_ceil_libm], [ gl_cv_func_ceil_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = ceil; double x;]], [[x = funcptr(x) + ceil(x);]])], [gl_cv_func_ceil_libm=]) if test "$gl_cv_func_ceil_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = ceil; double x;]], [[x = funcptr(x) + ceil(x);]])], [gl_cv_func_ceil_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEIL_LIBM="$gl_cv_func_ceil_libm" ]) ����������������������������������������������������������������gnulib-20210822~d383792/m4/ceilf-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceilf-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in ceilf.m4 and not inlined in the dnl module description), so that gl_FUNC_CEILF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_CEILF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_ceilf_required=ieee]) AC_REQUIRE([gl_FUNC_CEILF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ceilf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007753�14110572173�0016157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceilf.m4 serial 19 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CEILF], [ m4_divert_text([DEFAULTS], [gl_ceilf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare ceilf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether ceilf() is declared. AC_CHECK_DECLS([ceilf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_ceilf" = yes; then dnl Test whether ceilf() can be used without libm. gl_FUNC_CEILF_LIBS if test "$CEILF_LIBM" = "?"; then dnl Sun C 5.0 on Solaris declares ceilf() and has it in the system-wide dnl libm.so, but not in the libm.so that the compiler uses. REPLACE_CEILF=1 fi m4_ifdef([gl_FUNC_CEILF_IEEE], [ if test $gl_ceilf_required = ieee && test $REPLACE_CEILF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ceilf works according to ISO C 99 with IEC 60559], [gl_cv_func_ceilf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $CEILF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float f) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_ceilf) (float) = argc ? ceilf : dummy; int result = 0; /* Test whether ceilf (-0.0f) is -0.0f. */ if (signbitf (minus_zerof) && !signbitf (my_ceilf (minus_zerof))) result |= 1; /* Test whether ceilf (-0.3f) is -0.0f. */ if (signbitf (-0.3f) && !signbitf (my_ceilf (-0.3f))) result |= 2; return result; } ]])], [gl_cv_func_ceilf_ieee=yes], [gl_cv_func_ceilf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ceilf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ceilf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ceilf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ceilf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_ceilf_ieee" in *yes) ;; *) REPLACE_CEILF=1 ;; esac fi ]) else HAVE_DECL_CEILF=0 fi if test $HAVE_DECL_CEILF = 0 || test $REPLACE_CEILF = 1; then dnl No libraries are needed to link lib/ceilf.c. CEILF_LIBM= fi AC_SUBST([CEILF_LIBM]) ]) # Determines the libraries needed to get the ceilf() function. # Sets CEILF_LIBM. AC_DEFUN([gl_FUNC_CEILF_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_ceilf_libm], [ gl_cv_func_ceilf_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = ceilf; float x;]], [[x = funcptr(x) + ceilf(x);]])], [gl_cv_func_ceilf_libm=]) if test "$gl_cv_func_ceilf_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = ceilf; float x;]], [[x = funcptr(x) + ceilf(x);]])], [gl_cv_func_ceilf_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEILF_LIBM="$gl_cv_func_ceilf_libm" ]) ���������������������gnulib-20210822~d383792/m4/ceill-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceill-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in ceill.m4 and not inlined in the dnl module description), so that gl_FUNC_CEILL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_CEILL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_ceill_required=ieee]) AC_REQUIRE([gl_FUNC_CEILL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ceill.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011770�14110572173�0016157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceill.m4 serial 22 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CEILL], [ m4_divert_text([DEFAULTS], [gl_ceill_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <math.h> to declare ceill(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether ceill() is declared. AC_CHECK_DECLS([ceill], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_ceill" = yes; then dnl Test whether ceill() can be used without libm. gl_FUNC_CEILL_LIBS if test "$CEILL_LIBM" = "?"; then dnl Sun C 5.0 on Solaris declares ceill() and has it in the system-wide dnl libm.so, but not in the libm.so that the compiler uses. REPLACE_CEILL=1 fi m4_ifdef([gl_FUNC_CEILL_IEEE], [ if test $gl_ceill_required = ieee && test $REPLACE_CEILL = 0; then AC_CACHE_CHECK([whether ceill works according to ISO C 99 with IEC 60559], [gl_cv_func_ceill_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $CEILL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double f) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_ceill) (long double) = argc ? ceill : dummy; /* Test whether ceill (-0.3L) is -0.0L. */ if (signbitl (minus_zerol) && !signbitl (my_ceill (-0.3L))) return 1; return 0; } ]])], [gl_cv_func_ceill_ieee=yes], [gl_cv_func_ceill_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ceill_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ceill_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ceill_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ceill_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_ceill_ieee" in *yes) ;; *) REPLACE_CEILL=1 ;; esac fi ]) else HAVE_DECL_CEILL=0 fi dnl On OpenBSD 5.6 the system's native ceill() is buggy: dnl it returns '0' for small values. Test against this anomaly. if test $REPLACE_CEILL = 0 ; then AC_CACHE_CHECK([whether ceill() works], [gl_cv_func_ceill_works], [save_LIBS="$LIBS" LIBS="$CEILL_LIBM" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double d = 0.3L;]], [[return (!(ceill (d) == 1)); ]])], [gl_cv_func_ceill_works=yes], [gl_cv_func_ceill_works=no], [case "$host_os" in openbsd*) gl_cv_func_ceill_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ceill_works="guessing yes" ;; *) gl_cv_func_ceill_works="guessing yes" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_ceill_works" in *yes) ;; *) REPLACE_CEILL=1 ;; esac fi if test $HAVE_DECL_CEILL = 0 || test $REPLACE_CEILL = 1; then dnl Find libraries needed to link lib/ceill.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_CEIL]) CEILL_LIBM="$CEIL_LIBM" else CEILL_LIBM= fi fi AC_SUBST([CEILL_LIBM]) ]) # Determines the libraries needed to get the ceill() function. # Sets CEILL_LIBM. AC_DEFUN([gl_FUNC_CEILL_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_ceill_libm], [ gl_cv_func_ceill_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = ceill; long double x;]], [[x = funcptr(x) + ceill(x);]])], [gl_cv_func_ceill_libm=]) if test "$gl_cv_func_ceill_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = ceill; long double x;]], [[x = funcptr(x) + ceill(x);]])], [gl_cv_func_ceill_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEILL_LIBM="$gl_cv_func_ceill_libm" ]) ��������gnulib-20210822~d383792/m4/chdir-long.m4������������������������������������������������������������0000664�0000000�0000000�00000002054�14110572173�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 17 # Use Gnulib's robust chdir function. # It can handle arbitrarily long directory names, which means # that when it is given the name of an existing directory, it # never fails with ENAMETOOLONG. # Arrange to compile chdir-long.c only on systems that define PATH_MAX. dnl Copyright (C) 2004-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_CHDIR_LONG], [ AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether this system supports file names of any length], [gl_cv_have_unlimited_file_name_length], [AC_EGREP_CPP([have_arbitrary_file_name_length_limit], gl_PATHMAX_SNIPPET[ #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif], [gl_cv_have_unlimited_file_name_length=no], [gl_cv_have_unlimited_file_name_length=yes])]) ]) AC_DEFUN([gl_PREREQ_CHDIR_LONG], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/check-math-lib.m4��������������������������������������������������������0000664�0000000�0000000�00000002050�14110572173�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# check-math-lib.m4 serial 4 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl gl_CHECK_MATH_LIB (VARIABLE, EXPRESSION [, EXTRA-CODE]) dnl dnl Sets the shell VARIABLE according to the libraries needed by EXPRESSION dnl to compile and link: to the empty string if no extra libraries are needed, dnl to "-lm" if -lm is needed, or to "missing" if it does not compile and dnl link either way. dnl dnl Example: gl_CHECK_MATH_LIB([ROUNDF_LIBM], [x = roundf (x);]) AC_DEFUN([gl_CHECK_MATH_LIB], [ save_LIBS=$LIBS $1=missing for libm in "" "-lm"; do LIBS="$save_LIBS $libm" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> $3 double x;]], [$2])], [$1=$libm break]) done LIBS=$save_LIBS ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/chown.m4�����������������������������������������������������������������0000664�0000000�0000000�00000016145�14110572173�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 35 # Determine whether we need the chown wrapper. dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2021 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # chown should accept arguments of -1 for uid and gid, and it should # dereference symlinks. If it doesn't, arrange to use the replacement # function. # From Jim Meyering. # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9 AC_DEFUN([AC_FUNC_CHOWN], [ AC_REQUIRE([AC_TYPE_UID_T])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_HEADERS([unistd.h]) AC_CACHE_CHECK([for working chown], [ac_cv_func_chown_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT [#include <fcntl.h> ]GL_MDA_DEFINES], [[ char *f = "conftest.chown"; struct stat before, after; if (creat (f, 0600) < 0) return 1; if (stat (f, &before) < 0) return 1; if (chown (f, (uid_t) -1, (gid_t) -1) == -1) return 1; if (stat (f, &after) < 0) return 1; return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); ]]) ], [ac_cv_func_chown_works=yes], [ac_cv_func_chown_works=no], [case "$host_os" in # (( # Guess yes on Linux systems. linux-* | linux) ac_cv_func_chown_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_chown_works="guessing yes" ;; # Guess no on native Windows. mingw*) ac_cv_func_chown_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_chown_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.chown ]) case "$ac_cv_func_chown_works" in *yes) AC_DEFINE([HAVE_CHOWN], [1], [Define to 1 if your system has a working `chown' function.]) ;; esac ])# AC_FUNC_CHOWN AC_DEFUN_ONCE([gl_FUNC_CHOWN], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_UID_T]) AC_REQUIRE([AC_FUNC_CHOWN]) AC_REQUIRE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([chown fchown]) dnl mingw lacks chown altogether. if test $ac_cv_func_chown = no; then HAVE_CHOWN=0 else dnl Some old systems treated chown like lchown. case "$gl_cv_func_chown_follows_symlink" in *yes) ;; *) REPLACE_CHOWN=1 ;; esac dnl Some old systems tried to use uid/gid -1 literally. case "$ac_cv_func_chown_works" in *no) AC_DEFINE([CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE], [1], [Define if chown is not POSIX compliant regarding IDs of -1.]) REPLACE_CHOWN=1 ;; esac dnl Solaris 9 ignores trailing slash. dnl FreeBSD 7.2 mishandles trailing slash on symlinks. dnl Likewise for AIX 7.1. AC_CACHE_CHECK([whether chown honors trailing slash], [gl_cv_func_chown_slash_works], [touch conftest.file && rm -f conftest.link AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <unistd.h> #include <stdlib.h> #include <errno.h> ]GL_MDA_DEFINES], [[if (symlink ("conftest.file", "conftest.link")) return 1; if (chown ("conftest.link/", getuid (), getgid ()) == 0) return 2; ]])], [gl_cv_func_chown_slash_works=yes], [gl_cv_func_chown_slash_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_chown_slash_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_chown_slash_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_chown_slash_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.file]) case "$gl_cv_func_chown_slash_works" in *yes) ;; *) AC_DEFINE([CHOWN_TRAILING_SLASH_BUG], [1], [Define to 1 if chown mishandles trailing slash.]) REPLACE_CHOWN=1 ;; esac dnl OpenBSD fails to update ctime if ownership does not change. AC_CACHE_CHECK([whether chown always updates ctime], [gl_cv_func_chown_ctime_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> ]GL_MDA_DEFINES], [[struct stat st1, st2; if (close (creat ("conftest.file", 0600))) return 1; if (stat ("conftest.file", &st1)) return 2; sleep (1); if (chown ("conftest.file", st1.st_uid, st1.st_gid)) return 3; if (stat ("conftest.file", &st2)) return 4; if (st2.st_ctime <= st1.st_ctime) return 5; ]])], [gl_cv_func_chown_ctime_works=yes], [gl_cv_func_chown_ctime_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_chown_ctime_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_chown_ctime_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_chown_ctime_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.file]) case "$gl_cv_func_chown_ctime_works" in *yes) ;; *) AC_DEFINE([CHOWN_CHANGE_TIME_BUG], [1], [Define to 1 if chown fails to change ctime when at least one argument was not -1.]) REPLACE_CHOWN=1 ;; esac fi ]) # Determine whether chown follows symlinks (it should). AC_DEFUN_ONCE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK], [ AC_CACHE_CHECK( [whether chown dereferences symlinks], [gl_cv_func_chown_follows_symlink], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <errno.h> ]GL_MDA_DEFINES[ int main () { int result = 0; char const *dangling_symlink = "conftest.dangle"; unlink (dangling_symlink); if (symlink ("conftest.no-such", dangling_symlink)) abort (); /* Exit successfully on a conforming system, i.e., where chown must fail with ENOENT. */ if (chown (dangling_symlink, getuid (), getgid ()) == 0) result |= 1; if (errno != ENOENT) result |= 2; return result; } ]])], [gl_cv_func_chown_follows_symlink=yes], [gl_cv_func_chown_follows_symlink=no], [gl_cv_func_chown_follows_symlink="guessing yes"] ) ] ) case "$gl_cv_func_chown_follows_symlink" in *yes) ;; *) AC_DEFINE([CHOWN_MODIFIES_SYMLINK], [1], [Define if chown modifies symlinks.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/clock_time.m4������������������������������������������������������������0000664�0000000�0000000�00000002520�14110572173�0017171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# clock_time.m4 serial 10 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME. # For a program named, say foo, you should add a line like the following # in the corresponding Makefile.am file: # foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) AC_DEFUN([gl_CLOCK_TIME], [ dnl Persuade glibc and Solaris <time.h> to declare these functions. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_CLOCK_GETTIME= AC_SUBST([LIB_CLOCK_GETTIME]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([clock_gettime], [rt posix4], [test "$ac_cv_search_clock_gettime" = "none required" || LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime]) AC_CHECK_FUNCS([clock_gettime clock_settime]) LIBS=$gl_saved_libs ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/close.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002221�14110572173�0016163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# close.m4 serial 9 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/closedir.m4��������������������������������������������������������������0000664�0000000�0000000�00000001674�14110572173�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# closedir.m4 serial 6 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CLOSEDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([closedir]) if test $ac_cv_func_closedir = no; then HAVE_CLOSEDIR=0 fi dnl Replace closedir() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_CLOSEDIR = 1; then REPLACE_CLOSEDIR=1 fi fi ]) dnl Replace closedir() for supporting the gnulib-defined dirfd() function. case $host_os,$HAVE_CLOSEDIR in os2*,1) REPLACE_CLOSEDIR=1;; esac ]) ��������������������������������������������������������������������gnulib-20210822~d383792/m4/codeset.m4���������������������������������������������������������������0000664�0000000�0000000�00000001525�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2021 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <langinfo.h>]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cond.m4������������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0016006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cond.m4 serial 2 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_COND], [ AC_REQUIRE([gl_THREADLIB]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/config-h.m4��������������������������������������������������������������0000664�0000000�0000000�00000001057�14110572173�0016556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Say that -DHAVE_CONFIG_H is not needed. dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. # This package's source files all include config.h unconditionally, # so there's no need to pass -DHAVE_CONFIG_H to the compiler. AC_DEFUN([gl_CONFIG_H], [AC_CONFIG_COMMANDS_PRE([test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=])]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/configmake.m4������������������������������������������������������������0000664�0000000�0000000�00000001704�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# configmake.m4 serial 4 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.60]) # gl_CONFIGMAKE_PREP # ------------------ # Guarantee all of the standard directory variables, even when used with # autoconf 2.64 (runstatedir wasn't supported before 2.70) or # automake 1.11 (runstatedir isn't supported even in 1.16.1). AC_DEFUN([gl_CONFIGMAKE_PREP], [ if test "x$lispdir" = x; then AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp']) fi dnl Added in autoconf 2.70. if test "x$runstatedir" = x; then AC_SUBST([runstatedir], ['${localstatedir}/run']) fi dnl Automake 1.11 provides pkglibexecdir merely without AC_SUBST. dnl This blind use of AC_SUBST is safe. AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}']) ]) ������������������������������������������������������������gnulib-20210822~d383792/m4/copy-file-range.m4�������������������������������������������������������0000664�0000000�0000000�00000002362�14110572173�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copy-file-range.m4 dnl Copyright 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COPY_FILE_RANGE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare copy_file_range. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Use AC_LINK_IFELSE, rather than AC_CHECK_FUNCS or a variant, dnl since we don't want AC_CHECK_FUNCS's checks for glibc stubs. dnl Programs that use copy_file_range must fall back on read+write dnl anyway, and there's little point to substituting the Gnulib stub dnl for a glibc stub. AC_CACHE_CHECK([for copy_file_range], [gl_cv_func_copy_file_range], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[ssize_t (*func) (int, off_t *, int, off_t, size_t, unsigned) = copy_file_range; return func (0, 0, 0, 0, 0, 0) & 127; ]]) ], [gl_cv_func_copy_file_range=yes], [gl_cv_func_copy_file_range=no]) ]) if test "$gl_cv_func_copy_file_range" != yes; then HAVE_COPY_FILE_RANGE=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/copy-file.m4�������������������������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copy-file.m4 serial 5 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_COPY_FILE], [ AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS([chown]) ]) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/copysign.m4��������������������������������������������������������������0000664�0000000�0000000�00000001135�14110572173�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysign.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COPYSIGN], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine COPYSIGN_LIBM. gl_MATHFUNC([copysign], [double], [(double, double)]) if test $gl_cv_func_copysign_no_libm = no \ && test $gl_cv_func_copysign_in_libm = no; then HAVE_COPYSIGN=0 COPYSIGN_LIBM= fi AC_SUBST([COPYSIGN_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/copysignf.m4�������������������������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysignf.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COPYSIGNF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <math.h> to declare copysignf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine COPYSIGNF_LIBM. gl_MATHFUNC([copysignf], [float], [(float, float)], [extern #ifdef __cplusplus "C" #endif float copysignf (float, float); ]) if test $gl_cv_func_copysignf_no_libm = yes \ || test $gl_cv_func_copysignf_in_libm = yes; then HAVE_COPYSIGNF=1 dnl Also check whether it's declared. dnl IRIX 6.5 has copysignf() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([copysignf], , [HAVE_DECL_COPYSIGNF=0], [[#include <math.h>]]) else HAVE_COPYSIGNF=0 HAVE_DECL_COPYSIGNF=0 dnl On HP-UX 11.31/ia64, cc has a built-in for copysignf that redirects dnl to the symbol '_copysignf', defined in libm, not libc. case "$host_os" in hpux*) COPYSIGNF_LIBM='-lm' ;; *) COPYSIGNF_LIBM= ;; esac fi AC_SUBST([COPYSIGNF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/copysignl.m4�������������������������������������������������������������0000664�0000000�0000000�00000001622�14110572173�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysignl.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COPYSIGNL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare copysignl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine COPYSIGNL_LIBM. gl_MATHFUNC([copysignl], [long double], [(long double, long double)]) if test $gl_cv_func_copysignl_no_libm = no \ && test $gl_cv_func_copysignl_in_libm = no; then HAVE_COPYSIGNL=0 if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_COPYSIGN]) COPYSIGNL_LIBM="$COPYSIGN_LIBM" else COPYSIGNL_LIBM= fi fi AC_SUBST([COPYSIGNL_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cos.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0015647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cos.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COS], [ dnl Determine COS_LIBM. gl_COMMON_DOUBLE_MATHFUNC([cos]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cosf.m4������������������������������������������������������������������0000664�0000000�0000000�00000002053�14110572173�0016013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COSF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_COS]) dnl Persuade glibc <math.h> to declare cosf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether cosf() exists. Assume that cosf(), if it exists, is dnl defined in the same library as cos(). save_LIBS="$LIBS" LIBS="$LIBS $COS_LIBM" AC_CHECK_FUNCS([cosf]) LIBS="$save_LIBS" if test $ac_cv_func_cosf = yes; then COSF_LIBM="$COS_LIBM" else HAVE_COSF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_cosf, not cosf. AC_CHECK_DECLS([cosf], [REPLACE_COSF=1], , [[#include <math.h>]]) COSF_LIBM="$COS_LIBM" fi AC_SUBST([COSF_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cosh.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosh.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COSH], [ dnl Determine COSH_LIBM. gl_COMMON_DOUBLE_MATHFUNC([cosh]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/coshf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# coshf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COSHF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_COSH]) dnl Persuade glibc <math.h> to declare coshf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether coshf() exists. Assume that coshf(), if it exists, is dnl defined in the same library as cosh(). save_LIBS="$LIBS" LIBS="$LIBS $COSH_LIBM" AC_CHECK_FUNCS([coshf]) LIBS="$save_LIBS" if test $ac_cv_func_coshf = yes; then COSHF_LIBM="$COSH_LIBM" else HAVE_COSHF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_coshf, not coshf. AC_CHECK_DECLS([coshf], [REPLACE_COSHF=1], , [[#include <math.h>]]) COSHF_LIBM="$COSH_LIBM" fi AC_SUBST([COSHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cosl.m4������������������������������������������������������������������0000664�0000000�0000000�00000006037�14110572173�0016027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COSL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare cosl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) COSL_LIBM= AC_CACHE_CHECK([whether cosl() can be used without linking with libm], [gl_cv_func_cosl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = cosl; long double x;]], [[return funcptr (x) > 0.4 || cosl (x) > 0.4;]])], [gl_cv_func_cosl_no_libm=yes], [gl_cv_func_cosl_no_libm=no]) ]) if test $gl_cv_func_cosl_no_libm = no; then AC_CACHE_CHECK([whether cosl() can be used with libm], [gl_cv_func_cosl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = cosl; long double x;]], [[return funcptr (x) > 0.4 || cosl (x) > 0.4;]])], [gl_cv_func_cosl_in_libm=yes], [gl_cv_func_cosl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_cosl_in_libm = yes; then COSL_LIBM=-lm fi fi if test $gl_cv_func_cosl_no_libm = yes \ || test $gl_cv_func_cosl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has cosl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([cosl], , [HAVE_DECL_COSL=0], [[#include <math.h>]]) else HAVE_DECL_COSL=0 HAVE_COSL=0 dnl Find libraries needed to link lib/cosl.c, lib/sincosl.c, lib/trigl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_COS]) COSL_LIBM="$COS_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FLOOR]) AC_REQUIRE([gl_FUNC_FLOORL]) dnl Append $ISNANL_LIBM to COSL_LIBM, avoiding gratuitous duplicates. case " $COSL_LIBM " in *" $ISNANL_LIBM "*) ;; *) COSL_LIBM="$COSL_LIBM $ISNANL_LIBM" ;; esac dnl Append $FLOOR_LIBM to COSL_LIBM, avoiding gratuitous duplicates. case " $COSL_LIBM " in *" $FLOOR_LIBM "*) ;; *) COSL_LIBM="$COSL_LIBM $FLOOR_LIBM" ;; esac dnl Append $FLOORL_LIBM to COSL_LIBM, avoiding gratuitous duplicates. case " $COSL_LIBM " in *" $FLOORL_LIBM "*) ;; *) COSL_LIBM="$COSL_LIBM $FLOORL_LIBM" ;; esac fi fi AC_SUBST([COSL_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/creat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0016155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# creat.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CREAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_CREAT=1 ;; *) gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_CREAT=1 ;; esac ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/csharp.m4����������������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharp.m4 serial 4 dnl Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Sets CSHARP_CHOICE to the preferred C# implementation: # 'mono' or 'any' or 'no'. AC_DEFUN([gt_CSHARP_CHOICE], [ AC_MSG_CHECKING([for preferred C[#] implementation]) AC_ARG_ENABLE([csharp], [ --enable-csharp[[=IMPL]] choose preferred C[#] implementation (mono)], [CSHARP_CHOICE="$enableval"], CSHARP_CHOICE=any) AC_SUBST([CSHARP_CHOICE]) AC_MSG_RESULT([$CSHARP_CHOICE]) case "$CSHARP_CHOICE" in mono) AC_DEFINE([CSHARP_CHOICE_MONO], [1], [Define if mono is the preferred C# implementation.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/csharpcomp.m4������������������������������������������������������������0000664�0000000�0000000�00000003477�14110572173�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharpcomp.m4 serial 9 dnl Copyright (C) 2003-2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of csharpcomp.sh. # Checks for a C# compiler. # Sets at most one of HAVE_MCS, HAVE_CSC. # Sets HAVE_CSHARPCOMP to nonempty if csharpcomp.sh will work. # Also sets CSHARPCOMPFLAGS. AC_DEFUN([gt_CSHARPCOMP], [ AC_REQUIRE([gt_CSHARP_CHOICE]) AC_MSG_CHECKING([for C[#] compiler]) HAVE_CSHARPCOMP=1 pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG([HAVE_MCS_IN_PATH], [mcs], [yes]) AC_CHECK_PROG([HAVE_CSC_IN_PATH], [csc], [yes]) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl for impl in "$CSHARP_CHOICE" mono sscli no; do case "$impl" in mono) if test -n "$HAVE_MCS_IN_PATH" \ && mcs --version >/dev/null 2>/dev/null \ && mcs --version 2>/dev/null | grep Mono >/dev/null; then HAVE_MCS=1 ac_result="mcs" break fi ;; sscli) if test -n "$HAVE_CSC_IN_PATH" \ && csc -help >/dev/null 2>/dev/null \ && { if csc -help 2>/dev/null | grep -i chicken > /dev/null; then false; else true; fi; }; then HAVE_CSC=1 ac_result="csc" break fi ;; no) HAVE_CSHARPCOMP= ac_result="no" break ;; esac done AC_MSG_RESULT([$ac_result]) AC_SUBST([HAVE_MCS]) AC_SUBST([HAVE_CSC]) dnl Provide a default for CSHARPCOMPFLAGS. if test -z "${CSHARPCOMPFLAGS+set}"; then CSHARPCOMPFLAGS="-O -g" fi AC_SUBST([CSHARPCOMPFLAGS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/csharpexec.m4������������������������������������������������������������0000664�0000000�0000000�00000004455�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharpexec.m4 serial 8 dnl Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of csharpexec.sh. # Checks for a C# execution engine. # gt_CSHARPEXEC or gt_CSHARPEXEC(testexecutable, its-directory) # Sets at most one of HAVE_MONO, HAVE_CLIX. # Sets HAVE_CSHARPEXEC to nonempty if csharpexec.sh will work. AC_DEFUN([gt_CSHARPEXEC], [ AC_REQUIRE([gt_CSHARP_CHOICE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_MSG_CHECKING([for C[#] program execution engine]) AC_EGREP_CPP([yes], [ #if defined _WIN32 || defined __EMX__ || defined __DJGPP__ yes #endif ], MONO_PATH_SEPARATOR=';', MONO_PATH_SEPARATOR=':') HAVE_CSHARPEXEC=1 pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG([HAVE_MONO_IN_PATH], [mono], [yes]) AC_CHECK_PROG([HAVE_CLIX_IN_PATH], [clix], [yes]) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl for impl in "$CSHARP_CHOICE" mono no; do case "$impl" in mono) if test -n "$HAVE_MONO_IN_PATH" \ && mono --version >/dev/null 2>/dev/null \ m4_if([$1], , , [&& mono $2/$1 >/dev/null 2>/dev/null]); then HAVE_MONO=1 ac_result="mono" break fi ;; sscli) if test -n "$HAVE_CLIX_IN_PATH" \ m4_if([$1], , , [&& clix $2/$1 >/dev/null 2>/dev/null]); then HAVE_CLIX=1 case $host_os in cygwin* | mingw* | pw32*) CLIX_PATH_VAR=PATH ;; darwin* | rhapsody*) CLIX_PATH_VAR=DYLD_LIBRARY_PATH ;; *) CLIX_PATH_VAR=LD_LIBRARY_PATH ;; esac eval CLIX_PATH=\"\$CLIX_PATH_VAR\" ac_result="clix" break fi ;; no) HAVE_CSHARPEXEC= ac_result="no" break ;; esac done AC_MSG_RESULT([$ac_result]) AC_SUBST([MONO_PATH]) AC_SUBST([MONO_PATH_SEPARATOR]) AC_SUBST([CLIX_PATH_VAR]) AC_SUBST([CLIX_PATH]) AC_SUBST([HAVE_MONO]) AC_SUBST([HAVE_CLIX]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ctime.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0016161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ctime.m4 serial 2 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_CTIME=1 ;; *) REPLACE_CTIME=0 ;; esac ]) ������������������������������������������������gnulib-20210822~d383792/m4/ctype_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000003227�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ctype_h.m4 serial 9 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_CTYPE_H], [ AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([ctype.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <ctype.h> ]], [isblank]) ]) # gl_CTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_CTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_CTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISBLANK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_CTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/cycle-check.m4�����������������������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 7 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CYCLE_CHECK], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/d-ino.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004201�14110572173�0016064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_ino. dnl # Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2021 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO], [AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for d_ino member in directory struct], [gl_cv_struct_dirent_d_ino], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #include <dirent.h> ]], [[DIR *dp = opendir ("."); struct dirent *e; struct stat st; if (! dp) return 1; e = readdir (dp); if (! e) { closedir (dp); return 2; } if (lstat (e->d_name, &st) != 0) { closedir (dp); return 3; } if (e->d_ino != st.st_ino) { closedir (dp); return 4; } closedir (dp); return 0; ]])], [gl_cv_struct_dirent_d_ino=yes], [gl_cv_struct_dirent_d_ino=no], [case "$host_os" in # Guess yes on glibc systems with Linux kernel. linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess yes on musl systems with Linux kernel. linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_struct_dirent_d_ino" in *yes) AC_DEFINE([D_INO_IN_DIRENT], [1], [Define if struct dirent has a member d_ino that actually works.]) ;; esac ] ) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/d-type.m4����������������������������������������������������������������0000664�0000000�0000000�00000001727�14110572173�0016272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 12 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_type. dnl # Copyright (C) 1997, 1999-2004, 2006, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE], [AC_CACHE_CHECK([for d_type member in directory struct], [gl_cv_struct_dirent_d_type], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <dirent.h> ]], [[struct dirent dp; dp.d_type = 0;]])], [gl_cv_struct_dirent_d_type=yes], [gl_cv_struct_dirent_d_type=no]) ] ) if test $gl_cv_struct_dirent_d_type = yes; then AC_DEFINE([HAVE_STRUCT_DIRENT_D_TYPE], [1], [Define if there is a member named d_type in the struct describing directory headers.]) fi ] ) �����������������������������������������gnulib-20210822~d383792/m4/dirent-safer.m4����������������������������������������������������������0000664�0000000�0000000�00000000514�14110572173�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DIRENT_SAFER], [ AC_CHECK_FUNCS_ONCE([fdopendir]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dirent_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000006222�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dirent_h.m4 serial 19 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_DIRENT_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) dnl <dirent.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([dirent.h]) if test $ac_cv_header_dirent_h = yes; then HAVE_DIRENT_H=1 else HAVE_DIRENT_H=0 fi AC_SUBST([HAVE_DIRENT_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <dirent.h> ]], [alphasort closedir dirfd fdopendir opendir readdir rewinddir scandir]) ]) # gl_DIRENT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_DIRENT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_DIRENT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_DIRENT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REWINDDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSEDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DIRFD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALPHASORT]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) ]) AC_DEFUN([gl_DIRENT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_OPENDIR=1; AC_SUBST([HAVE_OPENDIR]) HAVE_READDIR=1; AC_SUBST([HAVE_READDIR]) HAVE_REWINDDIR=1; AC_SUBST([HAVE_REWINDDIR]) HAVE_CLOSEDIR=1; AC_SUBST([HAVE_CLOSEDIR]) HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD]) HAVE_DECL_FDOPENDIR=1;AC_SUBST([HAVE_DECL_FDOPENDIR]) HAVE_FDOPENDIR=1; AC_SUBST([HAVE_FDOPENDIR]) HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) REPLACE_DIRFD=0; AC_SUBST([REPLACE_DIRFD]) REPLACE_FDOPENDIR=0; AC_SUBST([REPLACE_FDOPENDIR]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dirfd.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005135�14110572173�0016155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 26 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. # Copyright (C) 2001-2006, 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering AC_DEFUN([gl_FUNC_DIRFD], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <dirent.h> to declare dirfd(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([dirfd]) AC_CHECK_DECLS([dirfd], , , [[#include <sys/types.h> #include <dirent.h>]]) if test $ac_cv_have_decl_dirfd = no; then HAVE_DECL_DIRFD=0 fi AC_CACHE_CHECK([whether dirfd is a macro], [gl_cv_func_dirfd_macro], [AC_EGREP_CPP([dirent_header_defines_dirfd], [ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif], [gl_cv_func_dirfd_macro=yes], [gl_cv_func_dirfd_macro=no])]) # Use the replacement if we have no function or macro with that name, # or if OS/2 kLIBC whose dirfd() does not work. # Replace only if the system declares dirfd already. case $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro,$host_os,$ac_cv_have_decl_dirfd in no,no,*,yes | *,*,os2*,yes) REPLACE_DIRFD=1 AC_DEFINE([REPLACE_DIRFD], [1], [Define to 1 if gnulib's dirfd() replacement is used.]);; esac ]) dnl Prerequisites of lib/dirfd.c. AC_DEFUN([gl_PREREQ_DIRFD], [ AC_CACHE_CHECK([how to get the file descriptor associated with an open DIR*], [gl_cv_sys_dir_fd_member_name], [ dirfd_save_CFLAGS=$CFLAGS for ac_expr in d_fd dd_fd; do CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <dirent.h>]], [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])], [dir_fd_found=yes] ) CFLAGS=$dirfd_save_CFLAGS test "$dir_fd_found" = yes && break done test "$dir_fd_found" = yes || ac_expr=no_such_member gl_cv_sys_dir_fd_member_name=$ac_expr ] ) if test $gl_cv_sys_dir_fd_member_name != no_such_member; then AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME], [$gl_cv_sys_dir_fd_member_name], [the name of the file descriptor member of DIR]) fi AH_VERBATIM([DIR_TO_FD], [#ifdef DIR_FD_MEMBER_NAME # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) #else # define DIR_TO_FD(Dir_p) -1 #endif ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/double-slash-root.m4�����������������������������������������������������0000664�0000000�0000000�00000003125�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010264�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dprintf-posix.m4 serial 2 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_dprintf_posix=no AC_CHECK_FUNCS_ONCE([dprintf]) if test $ac_cv_func_dprintf = yes; then case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # dprintf exists and is # already POSIX compliant. gl_cv_func_dprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac fi if test $gl_cv_func_dprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_DPRINTF fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dprintf.m4���������������������������������������������������������������0000664�0000000�0000000�00000001321�14110572173�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dprintf.m4 serial 1 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([dprintf]) if test $ac_cv_func_dprintf = no; then HAVE_DPRINTF=0 gl_REPLACE_DPRINTF fi ]) AC_DEFUN([gl_REPLACE_DPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([dprintf]) if test $ac_cv_func_dprintf = yes; then REPLACE_DPRINTF=1 fi gl_PREREQ_DPRINTF ]) # Prerequisites of lib/dprintf.c. AC_DEFUN([gl_PREREQ_DPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dup.m4�������������������������������������������������������������������0000664�0000000�0000000�00000003173�14110572173�0015655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup.m4 serial 7 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_DUP=1 fi ]) dnl Replace dup() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP=1 fi ]) AC_CACHE_CHECK([whether dup works], [gl_cv_func_dup_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <unistd.h> #include <fcntl.h> #include <errno.h> ]GL_MDA_DEFINES], [[/* On OS/2 kLIBC, dup does not work on a directory fd. */ int fd = open (".", O_RDONLY); return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; ]]) ], [gl_cv_func_dup_works=yes], [gl_cv_func_dup_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_dup_works="guessing no" ;; *) gl_cv_func_dup_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_dup_works" in *yes) ;; *) REPLACE_DUP=1 ;; esac ]) # Prerequisites of lib/dup.c. AC_DEFUN([gl_PREREQ_DUP], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dup2.m4������������������������������������������������������������������0000664�0000000�0000000�00000007236�14110572173�0015743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 27 dnl Copyright (C) 2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/dup3.m4������������������������������������������������������������������0000664�0000000�0000000�00000001625�14110572173�0015740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup3.m4 serial 5 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP3], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare dup3(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([dup3 setdtablesize]) if test $ac_cv_func_dup3 != yes; then HAVE_DUP3=0 fi dnl Not needed yet, because dup3 is unconditionally replaced. dnl dnl Replace dup3() for supporting the gnulib-defined fchdir() function, dnl dnl to keep fchdir's bookkeeping up-to-date. dnl m4_ifdef([gl_FUNC_FCHDIR], [ dnl gl_TEST_FCHDIR dnl if test $HAVE_FCHDIR = 0; then dnl if test $HAVE_DUP3 = 1; then dnl REPLACE_DUP3=1 dnl fi dnl fi dnl ]) ]) �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/duplocale.m4�������������������������������������������������������������0000664�0000000�0000000�00000007306�14110572173�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# duplocale.m4 serial 12 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUPLOCALE], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_CHECK_FUNCS_ONCE([duplocale]) if test $ac_cv_func_duplocale = yes; then dnl Check against glibc bug where duplocale crashes. dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=10969>. dnl Also, on AIX 7.1, duplocale(LC_GLOBAL_LOCALE) returns (locale_t)0 with dnl errno set to EINVAL. dnl Also, on NetBSD 7.0, duplocale(LC_GLOBAL_LOCALE) returns a locale that dnl corresponds to the C locale. AC_REQUIRE([gl_LOCALE_H]) if test $HAVE_LOCALE_T = 1; then AC_CHECK_FUNCS_ONCE([snprintf_l nl_langinfo_l]) AC_CACHE_CHECK([whether duplocale(LC_GLOBAL_LOCALE) works], [gl_cv_func_duplocale_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif #if HAVE_SNPRINTF_L # include <stdio.h> #endif #if HAVE_NL_LANGINFO_L # include <langinfo.h> #endif #include <string.h> struct locale_dependent_values { char numeric[100]; char time[100]; }; int main () { struct locale_dependent_values expected_result; struct locale_dependent_values result; locale_t loc; setlocale (LC_ALL, "en_US.UTF-8"); setlocale (LC_NUMERIC, "de_DE.UTF-8"); setlocale (LC_TIME, "fr_FR.UTF-8"); #if HAVE_SNPRINTF_L snprintf (expected_result.numeric, sizeof (expected_result.numeric), "%g", 3.5); #endif #if HAVE_NL_LANGINFO_L strcpy (expected_result.time, nl_langinfo (MON_1)); #endif loc = duplocale (LC_GLOBAL_LOCALE); if (!loc) return 1; #if HAVE_SNPRINTF_L snprintf_l (result.numeric, sizeof (result.numeric), loc, "%g", 3.5); #endif #if HAVE_NL_LANGINFO_L strcpy (result.time, nl_langinfo_l (MON_1, loc)); #endif #if HAVE_SNPRINTF_L if (strcmp (result.numeric, expected_result.numeric) != 0) return 2; #endif #if HAVE_NL_LANGINFO_L if (strcmp (result.time, expected_result.time) != 0) return 3; #endif freelocale (loc); return 0; }]])], [gl_cv_func_duplocale_works=yes], [gl_cv_func_duplocale_works=no], [dnl Guess it works except on glibc < 2.12, uClibc, AIX, and NetBSD. case "$host_os" in aix* | netbsd*) gl_cv_func_duplocale_works="guessing no";; *-gnu* | gnu*) AC_EGREP_CPP([Unlucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ < 12) Unlucky GNU user #endif #endif #ifdef __UCLIBC__ Unlucky user #endif ], [gl_cv_func_duplocale_works="guessing no"], [gl_cv_func_duplocale_works="guessing yes"]) ;; *) gl_cv_func_duplocale_works="guessing yes";; esac ]) ]) case "$gl_cv_func_duplocale_works" in *no) REPLACE_DUPLOCALE=1 ;; esac else dnl In 2019, some versions of z/OS lack the locale_t type and have broken dnl newlocale, duplocale, freelocale functions. In this situation, we dnl cannot use nor override duplocale. HAVE_DUPLOCALE=0 fi else HAVE_DUPLOCALE=0 fi if test $REPLACE_DUPLOCALE = 1; then LIB_DUPLOCALE="$LIB_SETLOCALE_NULL" else LIB_DUPLOCALE= fi dnl LIB_DUPLOCALE is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([LIB_DUPLOCALE]) ]) # Prerequisites of lib/duplocale.c. AC_DEFUN([gl_PREREQ_DUPLOCALE], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/eaccess.m4���������������������������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0016471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eaccess.m4 serial 2 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EACCESS], [ AC_CHECK_FUNC([eaccess], , [AC_DEFINE([eaccess], [access], [Define as 'access' if you don't have the eaccess() function.])]) ]) �����������������������������������������������������������gnulib-20210822~d383792/m4/eealloc.m4���������������������������������������������������������������0000664�0000000�0000000�00000001667�14110572173�0016477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eealloc.m4 serial 3 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EEALLOC], [ AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEREALLOC]) ]) AC_DEFUN([gl_EEMALLOC], [ _AC_FUNC_MALLOC_IF( [gl_cv_func_malloc_0_nonnull=1], [gl_cv_func_malloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], [If malloc(0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) AC_DEFUN([gl_EEREALLOC], [ _AC_FUNC_REALLOC_IF( [gl_cv_func_realloc_0_nonnull=1], [gl_cv_func_realloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) �������������������������������������������������������������������������gnulib-20210822~d383792/m4/environ.m4���������������������������������������������������������������0000664�0000000�0000000�00000002606�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# environ.m4 serial 8 dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_ENVIRON], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare environ. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) gt_CHECK_VAR_DECL( [#if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> ], [environ]) if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi ]) # Check if a variable is properly declared. # gt_CHECK_VAR_DECL(includes,variable) AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 typedef struct { int foo; } foo_t; extern foo_t $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) fi undefine([gt_cv_var]) ]) ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/errno_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000005736�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 13 dnl Copyright (C) 2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in <errno.h>, according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) ����������������������������������gnulib-20210822~d383792/m4/error.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001510�14110572173�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <error.h>]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/euidaccess.m4������������������������������������������������������������0000664�0000000�0000000�00000003465�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# euidaccess.m4 serial 15 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS], [ AC_REQUIRE([gl_FUNC_EUIDACCESS]) AC_CHECK_DECLS([setregid]) AC_DEFINE([PREFER_NONREENTRANT_EUIDACCESS], [1], [Define this if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe.]) ]) AC_DEFUN([gl_FUNC_EUIDACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare euidaccess(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([euidaccess]) if test $ac_cv_func_euidaccess = no; then HAVE_EUIDACCESS=0 fi ]) # Prerequisites of lib/euidaccess.c. AC_DEFUN([gl_PREREQ_EUIDACCESS], [ dnl Prefer POSIX faccessat over non-standard euidaccess. AC_CHECK_FUNCS_ONCE([faccessat]) dnl Try various other non-standard fallbacks. AC_CHECK_HEADERS([libgen.h]) AC_FUNC_GETGROUPS # Solaris 9 and 10 need -lgen to get the eaccess function. # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_EACCESS= AC_SUBST([LIB_EACCESS]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([eaccess], [gen], [test "$ac_cv_search_eaccess" = "none required" || LIB_EACCESS=$ac_cv_search_eaccess]) AC_CHECK_FUNCS([eaccess]) LIBS=$gl_saved_libs ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/execinfo.m4��������������������������������������������������������������0000664�0000000�0000000�00000001656�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for GNU-style execinfo.h. dnl Copyright 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXECINFO_H], [ AC_CHECK_HEADERS_ONCE([execinfo.h]) LIB_EXECINFO='' EXECINFO_H='execinfo.h' if test $ac_cv_header_execinfo_h = yes; then gl_saved_libs=$LIBS AC_SEARCH_LIBS([backtrace_symbols_fd], [execinfo], [test "$ac_cv_search_backtrace_symbols_fd" = "none required" || LIB_EXECINFO=$ac_cv_search_backtrace_symbols_fd]) LIBS=$gl_saved_libs test "$ac_cv_search_backtrace_symbols_fd" = no || EXECINFO_H='' fi if test -n "$EXECINFO_H"; then AC_LIBOBJ([execinfo]) fi AC_SUBST([EXECINFO_H]) AC_SUBST([LIB_EXECINFO]) AM_CONDITIONAL([GL_GENERATE_EXECINFO_H], [test -n "$EXECINFO_H"]) ]) ����������������������������������������������������������������������������������gnulib-20210822~d383792/m4/execl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execl.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECL=1 ;; esac ]) ����������������������������������������������������������������������������gnulib-20210822~d383792/m4/execle.m4����������������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execle.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECLE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECLE=1 ;; esac ]) �������������������������������������������������������������������������gnulib-20210822~d383792/m4/execlp.m4����������������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0016352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execlp.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECLP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECLP=1 ;; esac ]) �������������������������������������������������������������������������gnulib-20210822~d383792/m4/execute.m4���������������������������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execute.m4 serial 5 dnl Copyright (C) 2003, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXECUTE], [ dnl Prerequisites of lib/execute.c. AC_REQUIRE([AC_TYPE_MODE_T]) ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/execv.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execv.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECV], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECV=1 ;; esac ]) ����������������������������������������������������������������������������gnulib-20210822~d383792/m4/execve.m4����������������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execve.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECVE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECVE=1 ;; esac ]) �������������������������������������������������������������������������gnulib-20210822~d383792/m4/execvp.m4����������������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execvp.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECVP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_EXECVP=1 ;; esac ]) �������������������������������������������������������������������������gnulib-20210822~d383792/m4/execvpe.m4���������������������������������������������������������������0000664�0000000�0000000�00000001231�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execvpe.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXECVPE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <unistd.h> to declare execvpe(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) case "$host_os" in mingw*) REPLACE_EXECVPE=1 ;; *) AC_CHECK_FUNCS([execvpe]) if test $ac_cv_func_execvpe != yes; then HAVE_EXECVPE=0 fi ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exp.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0015657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXP], [ dnl Determine EXP_LIBM. gl_COMMON_DOUBLE_MATHFUNC([exp]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exp2.m4������������������������������������������������������������������0000664�0000000�0000000�00000010330�14110572173�0015734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp2.m4 serial 3 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXP2], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare exp2(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) EXP2_LIBM= AC_CACHE_CHECK([whether exp2() can be used without linking with libm], [gl_cv_func_exp2_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif double exp2 (double); double (* volatile funcptr) (double) = exp2; double x;]], [[return funcptr (x) > 1.5 || exp2 (x) > 1.5;]])], [gl_cv_func_exp2_no_libm=yes], [gl_cv_func_exp2_no_libm=no]) ]) if test $gl_cv_func_exp2_no_libm = no; then AC_CACHE_CHECK([whether exp2() can be used with libm], [gl_cv_func_exp2_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif double exp2 (double); double (* volatile funcptr) (double) = exp2; double x;]], [[return funcptr (x) > 1.5 || exp2 (x) > 1.5;]])], [gl_cv_func_exp2_in_libm=yes], [gl_cv_func_exp2_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_exp2_in_libm = yes; then EXP2_LIBM=-lm fi fi if test $gl_cv_func_exp2_no_libm = yes \ || test $gl_cv_func_exp2_in_libm = yes; then HAVE_EXP2=1 dnl Also check whether it's declared. dnl IRIX 6.5 has exp2() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([exp2], , [HAVE_DECL_EXP2=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $EXP2_LIBM" gl_FUNC_EXP2_WORKS LIBS="$save_LIBS" case "$gl_cv_func_exp2_works" in *yes) ;; *) REPLACE_EXP2=1 ;; esac else HAVE_EXP2=0 HAVE_DECL_EXP2=0 fi if test $HAVE_EXP2 = 0 || test $REPLACE_EXP2 = 1; then dnl Find libraries needed to link lib/exp2.c. AC_REQUIRE([gl_FUNC_ISNAND]) AC_REQUIRE([gl_FUNC_ROUND]) AC_REQUIRE([gl_FUNC_LDEXP]) EXP2_LIBM= dnl Append $ISNAND_LIBM to EXP2_LIBM, avoiding gratuitous duplicates. case " $EXP2_LIBM " in *" $ISNAND_LIBM "*) ;; *) EXP2_LIBM="$EXP2_LIBM $ISNAND_LIBM" ;; esac dnl Append $ROUND_LIBM to EXP2_LIBM, avoiding gratuitous duplicates. case " $EXP2_LIBM " in *" $ROUND_LIBM "*) ;; *) EXP2_LIBM="$EXP2_LIBM $ROUND_LIBM" ;; esac dnl Append $LDEXP_LIBM to EXP2_LIBM, avoiding gratuitous duplicates. case " $EXP2_LIBM " in *" $LDEXP_LIBM "*) ;; *) EXP2_LIBM="$EXP2_LIBM $LDEXP_LIBM" ;; esac fi AC_SUBST([EXP2_LIBM]) ]) dnl Test whether exp2() works. dnl On OpenBSD 4.9, for the argument 0.6, it returns 1.517358639986284397, dnl which has a relative error of 0.1%. AC_DEFUN([gl_FUNC_EXP2_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether exp2 works], [gl_cv_func_exp2_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> extern #ifdef __cplusplus "C" #endif double exp2 (double); volatile double x; double y; int main () { x = 0.6; y = exp2 (x); if (y > 1.516) return 1; return 0; } ]])], [gl_cv_func_exp2_works=yes], [gl_cv_func_exp2_works=no], [case "$host_os" in openbsd*) gl_cv_func_exp2_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_exp2_works="guessing yes" ;; *) gl_cv_func_exp2_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exp2f.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002114�14110572173�0016103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp2f.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXP2F], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_EXP2]) dnl Persuade glibc <math.h> to declare exp2f(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether exp2f() exists. Assume that exp2f(), if it exists, is dnl defined in the same library as exp2(). save_LIBS="$LIBS" LIBS="$LIBS $EXP2_LIBM" AC_CHECK_FUNCS([exp2f]) LIBS="$save_LIBS" if test $ac_cv_func_exp2f = yes; then HAVE_EXP2F=1 EXP2F_LIBM="$EXP2_LIBM" dnl Also check whether it's declared. dnl IRIX 6.5 has exp2f() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([exp2f], , [HAVE_DECL_EXP2F=0], [[#include <math.h>]]) else HAVE_EXP2F=0 HAVE_DECL_EXP2F=0 dnl Find libraries needed to link lib/exp2f.c. EXP2F_LIBM="$EXP2_LIBM" fi AC_SUBST([EXP2F_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exp2l-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp2l-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in exp2l.m4 and not inlined in the dnl module description), so that gl_FUNC_EXP2L can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_EXP2L_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_exp2l_required=ieee]) AC_REQUIRE([gl_FUNC_EXP2L]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exp2l.m4�����������������������������������������������������������������0000664�0000000�0000000�00000015637�14110572173�0016127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp2l.m4 serial 10 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXP2L], [ m4_divert_text([DEFAULTS], [gl_exp2l_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_EXP2]) dnl Persuade glibc <math.h> to declare exp2l(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether exp2l() exists. Assume that exp2l(), if it exists, is dnl defined in the same library as exp2(). save_LIBS="$LIBS" LIBS="$LIBS $EXP2_LIBM" AC_CHECK_FUNCS([exp2l]) LIBS="$save_LIBS" if test $ac_cv_func_exp2l = yes; then HAVE_EXP2L=1 EXP2L_LIBM="$EXP2_LIBM" dnl Also check whether it's declared. dnl IRIX 6.5 has exp2l() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([exp2l], , [HAVE_DECL_EXP2L=0], [[#include <math.h>]]) if test $REPLACE_EXP2L = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether exp2l works], [gl_cv_func_exp2l_works], [ save_LIBS="$LIBS" LIBS="$LIBS $EXP2L_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef exp2l extern #ifdef __cplusplus "C" #endif long double exp2l (long double); static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_exp2l) (long double) = argc ? exp2l : dummy; int result = 0; /* This test fails on NetBSD 9.0. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.358L; long double err = (my_exp2l (x) * my_exp2l (- x) - 1.0L) * TWO_LDBL_MANT_DIG; if (!(err >= -100.0L && err <= 100.0L)) result |= 1; } return result; } ]])], [gl_cv_func_exp2l_works=yes], [gl_cv_func_exp2l_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_exp2l_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_exp2l_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_exp2l_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_exp2l_works="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_exp2l_works" in *yes) ;; *) REPLACE_EXP2L=1 ;; esac fi m4_ifdef([gl_FUNC_EXP2L_IEEE], [ if test $gl_exp2l_required = ieee && test $REPLACE_EXP2L = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether exp2l works according to ISO C 99 with IEC 60559], [gl_cv_func_exp2l_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $EXP2L_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> #undef exp2l extern #ifdef __cplusplus "C" #endif long double exp2l (long double); static long double dummy (long double x) { return 0; } static long double zero; int main (int argc, char *argv[]) { long double (* volatile my_exp2l) (long double) = argc ? exp2l : dummy; int result = 0; /* This test fails on OpenBSD 4.9, where exp2l(NaN) = 0.0. */ if (exp2l (zero / zero) == 0.0L) result |= 1; /* This test fails on IRIX 6.5, where exp2l(-Inf) = 1.0. */ if (!(exp2l (-1.0L / zero) == 0.0L)) result |= 2; return result; } ]])], [gl_cv_func_exp2l_ieee=yes], [gl_cv_func_exp2l_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_exp2l_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_exp2l_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_exp2l_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_exp2l_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_exp2l_ieee" in *yes) ;; *) REPLACE_EXP2L=1 ;; esac fi ]) else HAVE_EXP2L=0 HAVE_DECL_EXP2L=0 fi if test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; then dnl Find libraries needed to link lib/exp2l.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then EXP2L_LIBM="$EXP2_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_ROUNDL]) AC_REQUIRE([gl_FUNC_LDEXPL]) EXP2L_LIBM= dnl Append $ISNANL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. case " $EXP2L_LIBM " in *" $ISNANL_LIBM "*) ;; *) EXP2L_LIBM="$EXP2L_LIBM $ISNANL_LIBM" ;; esac dnl Append $ROUNDL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. case " $EXP2L_LIBM " in *" $ROUNDL_LIBM "*) ;; *) EXP2L_LIBM="$EXP2L_LIBM $ROUNDL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. case " $EXP2L_LIBM " in *" $LDEXPL_LIBM "*) ;; *) EXP2L_LIBM="$EXP2L_LIBM $LDEXPL_LIBM" ;; esac fi fi AC_SUBST([EXP2L_LIBM]) ]) �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expf.m4������������������������������������������������������������������0000664�0000000�0000000�00000002053�14110572173�0016023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_EXP]) dnl Persuade glibc <math.h> to declare expf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether expf() exists. Assume that expf(), if it exists, is dnl defined in the same library as exp(). save_LIBS="$LIBS" LIBS="$LIBS $EXP_LIBM" AC_CHECK_FUNCS([expf]) LIBS="$save_LIBS" if test $ac_cv_func_expf = yes; then EXPF_LIBM="$EXP_LIBM" else HAVE_EXPF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_expf, not expf. AC_CHECK_DECLS([expf], [REPLACE_EXPF=1], , [[#include <math.h>]]) EXPF_LIBM="$EXP_LIBM" fi AC_SUBST([EXPF_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expl.m4������������������������������������������������������������������0000664�0000000�0000000�00000015220�14110572173�0016031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expl.m4 serial 18 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <math.h> to declare expl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) EXPL_LIBM= AC_CACHE_CHECK([whether expl() can be used without linking with libm], [gl_cv_func_expl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = expl; long double x;]], [[return funcptr (x) > 1.5 || expl (x) > 1.5;]])], [gl_cv_func_expl_no_libm=yes], [gl_cv_func_expl_no_libm=no]) ]) if test $gl_cv_func_expl_no_libm = no; then AC_CACHE_CHECK([whether expl() can be used with libm], [gl_cv_func_expl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = expl; long double x;]], [[return funcptr (x) > 1.5 || expl (x) > 1.5;]])], [gl_cv_func_expl_in_libm=yes], [gl_cv_func_expl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_expl_in_libm = yes; then EXPL_LIBM=-lm fi fi if test $gl_cv_func_expl_no_libm = yes \ || test $gl_cv_func_expl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has expl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([expl], , [HAVE_DECL_EXPL=0], [[#include <math.h>]]) if test $REPLACE_EXPL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether expl works], [gl_cv_func_expl_works], [ save_LIBS="$LIBS" LIBS="$LIBS $EXPL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef expl extern #ifdef __cplusplus "C" #endif long double expl (long double); static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_expl) (long double) = argc ? expl : dummy; int result = 0; /* On Haiku 2017 the system's native expl() is just a stub: it returns 0.0 and prints "__expl not implemented" for all arguments. */ { volatile long double x1 = -1.0; if (expl (x1) == 0.0) result |= 1; } /* On OpenBSD 5.4 the system's native expl() is buggy: it returns 'nan' for small values. */ { volatile long double x1 = -1.0; volatile long double x2 = -0.8; volatile long double x3 = -0.4; if (isnan (expl (x1)) || isnan (expl (x2)) || isnan (expl (x3))) result |= 2; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x, NetBSD 9.0. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.358L; long double err = (my_expl (x) * my_expl (- x) - 1.0L) * TWO_LDBL_MANT_DIG; if (!(err >= -100.0L && err <= 100.0L)) result |= 4; } return result; } ]])], [gl_cv_func_expl_works=yes], [gl_cv_func_expl_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_expl_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_expl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_expl_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_expl_works="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_expl_works" in *yes) ;; *) REPLACE_EXPL=1 ;; esac fi else HAVE_DECL_EXPL=0 HAVE_EXPL=0 fi if test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; then dnl Find libraries needed to link lib/expl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_EXP]) EXPL_LIBM="$EXP_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_ROUNDL]) AC_REQUIRE([gl_FUNC_LDEXPL]) EXPL_LIBM= dnl Append $ISNANL_LIBM to EXPL_LIBM, avoiding gratuitous duplicates. case " $EXPL_LIBM " in *" $ISNANL_LIBM "*) ;; *) EXPL_LIBM="$EXPL_LIBM $ISNANL_LIBM" ;; esac dnl Append $ROUNDL_LIBM to EXPL_LIBM, avoiding gratuitous duplicates. case " $EXPL_LIBM " in *" $ROUNDL_LIBM "*) ;; *) EXPL_LIBM="$EXPL_LIBM $ROUNDL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to EXPL_LIBM, avoiding gratuitous duplicates. case " $EXPL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) EXPL_LIBM="$EXPL_LIBM $LDEXPL_LIBM" ;; esac fi fi AC_SUBST([EXPL_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/explicit_bzero.m4��������������������������������������������������������0000664�0000000�0000000�00000001225�14110572173�0020103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPLICIT_BZERO], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare explicit_bzero. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([explicit_bzero]) if test $ac_cv_func_explicit_bzero = no; then HAVE_EXPLICIT_BZERO=0 fi ]) AC_DEFUN([gl_PREREQ_EXPLICIT_BZERO], [ AC_CHECK_FUNCS([explicit_memset]) AC_CHECK_FUNCS_ONCE([memset_s]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expm1-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expm1-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in expm1.m4 and not inlined in the dnl module description), so that gl_FUNC_EXPM1 can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_EXPM1_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_expm1_required=ieee]) AC_REQUIRE([gl_FUNC_EXPM1]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expm1.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011242�14110572173�0016113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expm1.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPM1], [ m4_divert_text([DEFAULTS], [gl_expm1_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare expm1(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) EXPM1_LIBM= AC_CACHE_CHECK([whether expm1() can be used without linking with libm], [gl_cv_func_expm1_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (* volatile funcptr) (double) = expm1; double x;]], [[return funcptr (x) > 0.5 || expm1 (x) > 0.5;]])], [gl_cv_func_expm1_no_libm=yes], [gl_cv_func_expm1_no_libm=no]) ]) if test $gl_cv_func_expm1_no_libm = no; then AC_CACHE_CHECK([whether expm1() can be used with libm], [gl_cv_func_expm1_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (* volatile funcptr) (double) = expm1; double x;]], [[return funcptr (x) > 0.5 || expm1 (x) > 0.5;]])], [gl_cv_func_expm1_in_libm=yes], [gl_cv_func_expm1_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_expm1_in_libm = yes; then EXPM1_LIBM=-lm fi fi if test $gl_cv_func_expm1_no_libm = yes \ || test $gl_cv_func_expm1_in_libm = yes; then : m4_ifdef([gl_FUNC_EXPM1_IEEE], [ if test $gl_expm1_required = ieee && test $REPLACE_EXPM1 = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether expm1 works according to ISO C 99 with IEC 60559], [gl_cv_func_expm1_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $EXPM1_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double x) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_expm1) (double) = argc ? expm1 : dummy; double y = my_expm1 (minus_zerod); if (!(y == 0.0) || (signbitd (minus_zerod) && !signbitd (y))) return 1; return 0; } ]])], [gl_cv_func_expm1_ieee=yes], [gl_cv_func_expm1_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_expm1_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_expm1_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_expm1_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_expm1_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_expm1_ieee" in *yes) ;; *) REPLACE_EXPM1=1 ;; esac fi ]) else HAVE_EXPM1=0 fi if test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1; then dnl Find libraries needed to link lib/expm1.c. AC_REQUIRE([gl_FUNC_ISNAND]) AC_REQUIRE([gl_FUNC_EXP]) AC_REQUIRE([gl_FUNC_ROUND]) AC_REQUIRE([gl_FUNC_LDEXP]) EXPM1_LIBM= dnl Append $ISNAND_LIBM to EXPM1_LIBM, avoiding gratuitous duplicates. case " $EXPM1_LIBM " in *" $ISNAND_LIBM "*) ;; *) EXPM1_LIBM="$EXPM1_LIBM $ISNAND_LIBM" ;; esac dnl Append $EXP_LIBM to EXPM1_LIBM, avoiding gratuitous duplicates. case " $EXPM1_LIBM " in *" $EXP_LIBM "*) ;; *) EXPM1_LIBM="$EXPM1_LIBM $EXP_LIBM" ;; esac dnl Append $ROUND_LIBM to EXPM1_LIBM, avoiding gratuitous duplicates. case " $EXPM1_LIBM " in *" $ROUND_LIBM "*) ;; *) EXPM1_LIBM="$EXPM1_LIBM $ROUND_LIBM" ;; esac dnl Append $LDEXP_LIBM to EXPM1_LIBM, avoiding gratuitous duplicates. case " $EXPM1_LIBM " in *" $LDEXP_LIBM "*) ;; *) EXPM1_LIBM="$EXPM1_LIBM $LDEXP_LIBM" ;; esac fi AC_SUBST([EXPM1_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expm1f-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001117�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expm1f-ieee.m4 serial 1 dnl Copyright (C) 2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in expm1f.m4 and not inlined in the dnl module description), so that gl_FUNC_EXPM1F can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_EXPM1F_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_expm1f_required=ieee]) AC_REQUIRE([gl_FUNC_EXPM1F]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expm1f.m4����������������������������������������������������������������0000664�0000000�0000000�00000010257�14110572173�0016266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expm1f.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPM1F], [ m4_divert_text([DEFAULTS], [gl_expm1f_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_EXPM1]) dnl Persuade glibc <math.h> to declare expm1f(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether expm1f() exists. Assume that expm1f(), if it exists, is dnl defined in the same library as expm1(). save_LIBS="$LIBS" LIBS="$LIBS $EXPM1_LIBM" AC_CHECK_FUNCS([expm1f]) LIBS="$save_LIBS" if test $ac_cv_func_expm1f = yes; then EXPM1F_LIBM="$EXPM1_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $EXPM1F_LIBM" gl_FUNC_EXPM1F_WORKS LIBS="$save_LIBS" case "$gl_cv_func_expm1f_works" in *yes) ;; *) REPLACE_EXPM1F=1 ;; esac m4_ifdef([gl_FUNC_EXPM1F_IEEE], [ if test $gl_expm1f_required = ieee && test $REPLACE_EXPM1F = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether expm1f works according to ISO C 99 with IEC 60559], [gl_cv_func_expm1f_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $EXPM1F_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ #ifndef expm1f extern #ifdef __cplusplus "C" #endif float expm1f (float); #endif /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_expm1f) (float) = argc ? expm1f : dummy; /* Test expm1f(-0.0f). This test fails on AIX 7.2. */ float y = my_expm1f (minus_zerof); if (signbitf (minus_zerof) && !signbitf (y)) return 1; return 0; } ]])], [gl_cv_func_expm1f_ieee=yes], [gl_cv_func_expm1f_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_expm1f_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_expm1f_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_expm1f_ieee="guessing yes" ;; # Guess no on AIX. aix*) gl_cv_func_expm1f_ieee="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_expm1f_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_expm1f_ieee" in *yes) ;; *) REPLACE_EXPM1F=1 ;; esac fi ]) else HAVE_EXPM1F=0 fi if test $HAVE_EXPM1F = 0 || test $REPLACE_EXPM1F = 1; then dnl Find libraries needed to link lib/expm1f.c. EXPM1F_LIBM="$EXPM1_LIBM" fi AC_SUBST([EXPM1F_LIBM]) ]) dnl Test whether expm1f() works. dnl On IRIX 6.5, for arguments <= -17.32868, it returns -5.6295e14. AC_DEFUN([gl_FUNC_EXPM1F_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether expm1f works], [gl_cv_func_expm1f_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile float x; float y; int main () { x = -100.0f; y = expm1f (x); if (y < -1.0f) return 1; return 0; } ]])], [gl_cv_func_expm1f_works=yes], [gl_cv_func_expm1f_works=no], [case "$host_os" in irix*) gl_cv_func_expm1f_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_expm1f_works="guessing yes" ;; *) gl_cv_func_expm1f_works="guessing yes" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/expm1l.m4����������������������������������������������������������������0000664�0000000�0000000�00000015466�14110572173�0016303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expm1l.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPM1L], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare expm1l(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) EXPM1L_LIBM= AC_CACHE_CHECK([whether expm1l() can be used without linking with libm], [gl_cv_func_expm1l_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif long double expm1l (long double); long double (* volatile funcptr) (long double) = expm1l; long double x;]], [[return funcptr (x) > 0.5 || expm1l (x) > 0.5;]])], [gl_cv_func_expm1l_no_libm=yes], [gl_cv_func_expm1l_no_libm=no]) ]) if test $gl_cv_func_expm1l_no_libm = no; then AC_CACHE_CHECK([whether expm1l() can be used with libm], [gl_cv_func_expm1l_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif long double expm1l (long double); long double (* volatile funcptr) (long double) = expm1l; long double x;]], [[return funcptr (x) > 0.5 || expm1l (x) > 0.5;]])], [gl_cv_func_expm1l_in_libm=yes], [gl_cv_func_expm1l_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_expm1l_in_libm = yes; then EXPM1L_LIBM=-lm fi fi if test $gl_cv_func_expm1l_no_libm = yes \ || test $gl_cv_func_expm1l_in_libm = yes; then HAVE_EXPM1L=1 dnl Also check whether it's declared. dnl IRIX 6.5 has expm1l() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([expm1l], , [HAVE_DECL_EXPM1L=0], [[#include <math.h>]]) if test $REPLACE_EXPM1L = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether expm1l works], [gl_cv_func_expm1l_works], [ save_LIBS="$LIBS" LIBS="$LIBS $EXPM1L_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef expm1l extern #ifdef __cplusplus "C" #endif long double expm1l (long double); static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_expm1l) (long double) = argc ? expm1l : dummy; int result = 0; /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x, Mac OS X 10.5, NetBSD 8.0. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.358L; long double y = my_expm1l (x); long double z = my_expm1l (- x); volatile long double t = (1.0L + y) * z; long double err = (y + t) * TWO_LDBL_MANT_DIG; if (!(err >= -100.0L && err <= 100.0L)) result |= 1; } return result; } ]])], [gl_cv_func_expm1l_works=yes], [gl_cv_func_expm1l_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_expm1l_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_expm1l_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_expm1l_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_expm1l_works="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_expm1l_works" in *yes) ;; *) REPLACE_EXPM1L=1 ;; esac fi else HAVE_EXPM1L=0 HAVE_DECL_EXPM1L=0 fi if test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; then dnl Find libraries needed to link lib/expm1l.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_EXPM1]) EXPM1L_LIBM="$EXPM1_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_EXPL]) AC_REQUIRE([gl_FUNC_ROUNDL]) AC_REQUIRE([gl_FUNC_LDEXPL]) EXPM1L_LIBM= dnl Append $ISNANL_LIBM to EXPM1L_LIBM, avoiding gratuitous duplicates. case " $EXPM1L_LIBM " in *" $ISNANL_LIBM "*) ;; *) EXPM1L_LIBM="$EXPM1L_LIBM $ISNANL_LIBM" ;; esac dnl Append $EXPL_LIBM to EXPM1L_LIBM, avoiding gratuitous duplicates. case " $EXPM1L_LIBM " in *" $EXPL_LIBM "*) ;; *) EXPM1L_LIBM="$EXPM1L_LIBM $EXPL_LIBM" ;; esac dnl Append $ROUNDL_LIBM to EXPM1L_LIBM, avoiding gratuitous duplicates. case " $EXPM1L_LIBM " in *" $ROUNDL_LIBM "*) ;; *) EXPM1L_LIBM="$EXPM1L_LIBM $ROUNDL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to EXPM1L_LIBM, avoiding gratuitous duplicates. case " $EXPM1L_LIBM " in *" $LDEXPL_LIBM "*) ;; *) EXPM1L_LIBM="$EXPM1L_LIBM $LDEXPL_LIBM" ;; esac fi fi AC_SUBST([EXPM1L_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exponentd.m4�������������������������������������������������������������0000664�0000000�0000000�00000007552�14110572173�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentd.m4 serial 3 dnl Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'double'], [gl_cv_cc_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_double_expbit0=`cat conftest.out`], [gl_cv_cc_double_expbit0="unknown"], [ dnl On ARM, there are two 'double' floating-point formats, used by dnl different sets of instructions: The older FPA instructions assume dnl that they are stored in big-endian word order, while the words dnl (like integer types) are stored in little-endian byte order. dnl The newer VFP instructions assume little-endian order dnl consistently. AC_EGREP_CPP([mixed_endianness], [ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif ], [gl_cv_cc_double_expbit0="unknown"], [ pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl AC_C_BIGENDIAN( [gl_cv_cc_double_expbit0="word 0 bit 20"], [gl_cv_cc_double_expbit0="word 1 bit 20"], [gl_cv_cc_double_expbit0="unknown"]) popdef([AC_MSG_RESULT_UNQUOTED])dnl popdef([AC_MSG_RESULT])dnl popdef([AC_MSG_CHECKING])dnl ]) ]) rm -f conftest.out ]) case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'double'.]) AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exponentf.m4�������������������������������������������������������������0000664�0000000�0000000�00000005456�14110572173�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentf.m4 serial 2 dnl Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'float'], [gl_cv_cc_float_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_float_expbit0=`cat conftest.out`], [gl_cv_cc_float_expbit0="unknown"], [gl_cv_cc_float_expbit0="word 0 bit 23"]) rm -f conftest.out ]) case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'float'.]) AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/exponentl.m4�������������������������������������������������������������0000664�0000000�0000000�00000007130�14110572173�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentl.m4 serial 5 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], [ AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([where to find the exponent in a 'long double'], [gl_cv_cc_long_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; for (j = 0; j < 5; j++) add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_long_double_expbit0=`cat conftest.out`], [gl_cv_cc_long_double_expbit0="unknown"], [ dnl When cross-compiling, in general we don't know. It depends on the dnl ABI and compiler version. There are too many cases. gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) ;; esac ]) rm -f conftest.out ]) case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'long double'.]) AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) ;; esac ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/extensions.m4������������������������������������������������������������0000664�0000000�0000000�00000020333�14110572173�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 22 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+. m4_ifndef([AC_CHECK_INCLUDES_DEFAULT], [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])]) # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # is recent-enough everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. m4_version_prereq([2.70.1], [], [ # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # We unconditionally define as many of the known feature-enabling # as possible, reserving conditional behavior for macros that are # known to cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_LINK_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE. dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. dnl The macros below are in alphabetical order ignoring leading _ or __ dnl prefixes. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ])dnl AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl _AC_CHECK_HEADER_ONCE([wchar.h]) _AC_CHECK_HEADER_ONCE([minix/config.h]) dnl Defining __EXTENSIONS__ may break the system headers on some systems. dnl (FIXME: Which ones?) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms dnl not covered by turn-on-extensions macros (notably Dragonfly, Free, dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so dnl it should only be defined when necessary. AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AS_IF([test $ac_cv_header_wchar_h = yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <wchar.h> mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])])]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AS_IF([test $ac_cv_header_minix_config_h = yes], [MINIX=yes AC_DEFINE([_MINIX]) AC_DEFINE([_POSIX_SOURCE]) AC_DEFINE([_POSIX_1_SOURCE], [2])], [MINIX=]) AS_IF([test $ac_cv_safe_to_define___extensions__ = yes], [AC_DEFINE([__EXTENSIONS__])]) AS_IF([test $ac_cv_should_define__xopen_source = yes], [AC_DEFINE([_XOPEN_SOURCE], [500])]) ])# AC_USE_SYSTEM_EXTENSIONS ]) # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl On OpenBSD 6.8 with GCC, the include files contain a couple of dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE. dnl That's because this version of GCC (4.2.1) supports the option dnl '-std=gnu99' but not the option '-std=gnu11'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in openbsd*) AC_DEFINE([_ISOC11_SOURCE], [1], [Define to enable the declarations of ISO C 11 types and functions.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/extern-inline.m4���������������������������������������������������������0000664�0000000�0000000�00000011574�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fabs.m4������������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0016003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fabs.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FABS], [ dnl Determine FABS_LIBM. gl_MATHFUNC([fabs], [double], [(double)]) ]) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fabsf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001531�14110572173�0016142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fabsf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FABSF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FABS]) dnl Persuade glibc <math.h> to declare fabsf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether fabsf() exists. We cannot assume that fabsf(), if it dnl exists, is defined in the same library as fabs(). This is not the case dnl on FreeBSD, NetBSD, OpenBSD. gl_MATHFUNC([fabsf], [float], [(float)]) if test $gl_cv_func_fabsf_no_libm = no \ && test $gl_cv_func_fabsf_in_libm = no; then HAVE_FABSF=0 FABSF_LIBM="$FABS_LIBM" fi AC_SUBST([FABSF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fabsl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004211�14110572173�0016146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fabsl.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FABSL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare fabsl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine FABSL_LIBM. gl_MATHFUNC([fabsl], [long double], [(long double)]) if test $gl_cv_func_fabsl_no_libm = yes \ || test $gl_cv_func_fabsl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FABSL_LIBM" gl_FUNC_FABSL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_fabsl_works" in *yes) ;; *) REPLACE_FABSL=1 ;; esac else HAVE_FABSL=0 fi if test $HAVE_FABSL = 0 || test $REPLACE_FABSL = 1; then dnl Find libraries needed to link lib/fabsl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_FABS]) FABSL_LIBM="$FABS_LIBM" else FABSL_LIBM= fi fi AC_SUBST([FABSL_LIBM]) ]) dnl Test whether fabsl() works on a minus zero. dnl On IRIX 6.5, with gcc 4.2.4 and without -fno-builtin-fabsl, the value is a dnl minus zero rather than a positive zero. AC_DEFUN([gl_FUNC_FABSL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether fabsl works], [gl_cv_func_fabsl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> #include <string.h> volatile long double x; long double y; long double zero = 0.0L; int main () { x = - (LDBL_MIN * LDBL_MIN * LDBL_MIN); y = fabsl (x); return (memcmp (&y, &zero, sizeof y) != 0); } ]])], [gl_cv_func_fabsl_works=yes], [gl_cv_func_fabsl_works=no], [case "$host_os" in irix*) gl_cv_func_fabsl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_fabsl_works="guessing yes" ;; *) gl_cv_func_fabsl_works="guessing yes" ;; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/faccessat.m4�������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # See if we need to provide faccessat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_FACCESSAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) dnl Persuade glibc <unistd.h> to declare faccessat(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([faccessat]) if test $ac_cv_func_faccessat = no; then HAVE_FACCESSAT=0 else case $gl_cv_func_lstat_dereferences_slashed_symlink in *yes) ;; *) REPLACE_FACCESSAT=1 ;; esac fi ]) # Prerequisites of lib/faccessat.c. AC_DEFUN([gl_PREREQ_FACCESSAT], [ AC_CHECK_FUNCS([access]) ]) �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fatal-signal.m4����������������������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0017432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fatal-signal.m4 serial 9 dnl Copyright (C) 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FATAL_SIGNAL], [ AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_HEADERS_ONCE([unistd.h]) gl_PREREQ_SIG_HANDLER_H ]) ����������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fbufmode.m4��������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fbufmode.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FBUFMODE], [ dnl Prerequisites of lib/fbufmode.c. AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__flbf __fbufsize]) ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/fchdir.m4����������������������������������������������������������������0000664�0000000�0000000�00000004651�14110572173�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchdir.m4 serial 26 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([fchdir]) if test $ac_cv_have_decl_fchdir = no; then HAVE_DECL_FCHDIR=0 fi AC_REQUIRE([gl_TEST_FCHDIR]) if test $HAVE_FCHDIR = 0; then AC_LIBOBJ([fchdir]) gl_PREREQ_FCHDIR AC_DEFINE([REPLACE_FCHDIR], [1], [Define to 1 if gnulib's fchdir() replacement is used.]) dnl We must also replace anything that can manipulate a directory fd, dnl to keep our bookkeeping up-to-date. We don't have to replace dnl fstatat, since no platform has fstatat but lacks fchdir. AC_CACHE_CHECK([whether open can visit directories], [gl_cv_func_open_directory_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> ]GL_MDA_DEFINES], [[return open(".", O_RDONLY) < 0;]])], [gl_cv_func_open_directory_works=yes], [gl_cv_func_open_directory_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_open_directory_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_open_directory_works" in *yes) ;; *) AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should work around the inability to open a directory.]) ;; esac fi ]) # Determine whether to use the overrides in lib/fchdir.c. AC_DEFUN([gl_TEST_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fchdir]) if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi ]) # Prerequisites of lib/fchdir.c. AC_DEFUN([gl_PREREQ_FCHDIR], [:]) ���������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fchmodat.m4��������������������������������������������������������������0000664�0000000�0000000�00000007070�14110572173�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchmodat.m4 serial 6 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_FCHMODAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([fchmodat lchmod]) if test $ac_cv_func_fchmodat != yes; then HAVE_FCHMODAT=0 else AC_CACHE_CHECK( [whether fchmodat works], [gl_cv_func_fchmodat_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [ AC_INCLUDES_DEFAULT[ #include <fcntl.h> #ifndef S_IRUSR #define S_IRUSR 0400 #endif #ifndef S_IWUSR #define S_IWUSR 0200 #endif #ifndef S_IRWXU #define S_IRWXU 0700 #endif #ifndef S_IRWXG #define S_IRWXG 0070 #endif #ifndef S_IRWXO #define S_IRWXO 0007 #endif ]GL_MDA_DEFINES], [[ int permissive = S_IRWXU | S_IRWXG | S_IRWXO; int desired = S_IRUSR | S_IWUSR; int result = 0; #define file "conftest.fchmodat" struct stat st; if (creat (file, permissive) < 0) return 1; /* Test whether fchmodat rejects a trailing slash on a non-directory. This test fails on AIX 7.2. */ if (fchmodat (AT_FDCWD, file "/", desired, 0) == 0) result |= 2; /* Test whether fchmodat+AT_SYMLINK_NOFOLLOW works on non-symlinks. This test fails on GNU/Linux with glibc 2.31 (but not on GNU/kFreeBSD nor GNU/Hurd) and Cygwin 2.9. */ if (fchmodat (AT_FDCWD, file, desired, AT_SYMLINK_NOFOLLOW) != 0) result |= 4; if (stat (file, &st) != 0) return 1; if ((st.st_mode & permissive) != desired) result |= 4; return result; ]])], [gl_cv_func_fchmodat_works=yes], [case $? in 2) gl_cv_func_fchmodat_works='nearly' ;; *) gl_cv_func_fchmodat_works=no ;; esac ], [case "$host_os" in # Guess no on Linux with glibc and Cygwin. linux-gnu* | cygwin*) gl_cv_func_fchmodat_works="guessing no" ;; # Guess 'nearly' on AIX. aix*) gl_cv_func_fchmodat_works="guessing nearly" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fchmodat_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.fchmodat]) case "$gl_cv_func_fchmodat_works" in *yes) ;; *nearly) AC_DEFINE([HAVE_NEARLY_WORKING_FCHMODAT], [1], [Define to 1 if fchmodat works, except for the trailing slash handling.]) REPLACE_FCHMODAT=1 ;; *) AC_DEFINE([NEED_FCHMODAT_NONSYMLINK_FIX], [1], [Define to 1 if fchmodat+AT_SYMLINK_NOFOLLOW does not work right on non-symlinks.]) REPLACE_FCHMODAT=1 ;; esac fi ]) # Prerequisites of lib/fchmodat.c. AC_DEFUN([gl_PREREQ_FCHMODAT], [ AC_CHECK_FUNCS_ONCE([lchmod]) : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fchownat.m4��������������������������������������������������������������0000664�0000000�0000000�00000007514�14110572173�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchownat.m4 serial 7 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # If we have the fchownat function, and it has the bug (in glibc-2.4) # that it dereferences symlinks even with AT_SYMLINK_NOFOLLOW, then # use the replacement function. # Also if the fchownat function, like chown, has the trailing slash bug, # use the replacement function. # Also use the replacement function if fchownat is simply not available. AC_DEFUN([gl_FUNC_FCHOWNAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_CHOWN]) AC_CHECK_FUNC([fchownat], [gl_FUNC_FCHOWNAT_DEREF_BUG( [REPLACE_FCHOWNAT=1 AC_DEFINE([FCHOWNAT_NOFOLLOW_BUG], [1], [Define to 1 if your platform has fchownat, but it cannot perform lchown tasks.]) ]) gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG( [REPLACE_FCHOWNAT=1 AC_DEFINE([FCHOWNAT_EMPTY_FILENAME_BUG], [1], [Define to 1 if your platform has fchownat, but it does not reject an empty file name.]) ]) if test $REPLACE_CHOWN = 1; then REPLACE_FCHOWNAT=1 fi], [HAVE_FCHOWNAT=0]) ]) # gl_FUNC_FCHOWNAT_DEREF_BUG([ACTION-IF-BUGGY[, ACTION-IF-NOT_BUGGY]]) AC_DEFUN([gl_FUNC_FCHOWNAT_DEREF_BUG], [ dnl Persuade glibc's <unistd.h> to declare fchownat(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([whether fchownat works with AT_SYMLINK_NOFOLLOW], [gl_cv_func_fchownat_nofollow_works], [ gl_dangle=conftest.dangle # Remove any remnants of a previous test. rm -f $gl_dangle # Arrange for deletion of the temporary file this test creates. ac_clean_files="$ac_clean_files $gl_dangle" ln -s conftest.no-such $gl_dangle AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <fcntl.h> #include <unistd.h> /* Android 4.3 declares fchownat() in <sys/stat.h> instead. */ #include <sys/stat.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> int main () { return (fchownat (AT_FDCWD, "$gl_dangle", (uid_t)(-1), getgid (), AT_SYMLINK_NOFOLLOW) != 0 && errno == ENOENT); } ]])], [gl_cv_func_fchownat_nofollow_works=yes], [gl_cv_func_fchownat_nofollow_works=no], [gl_cv_func_fchownat_nofollow_works="$gl_cross_guess_normal"]) ]) AS_IF([test "$gl_cv_func_fchownat_nofollow_works" != yes], [$1], [$2]) ]) # gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG([ACTION-IF-BUGGY[, ACTION-IF-NOT_BUGGY]]) AC_DEFUN([gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG], [ dnl Persuade glibc's <unistd.h> to declare fchownat(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([whether fchownat works with an empty file name], [gl_cv_func_fchownat_empty_filename_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> #include <fcntl.h> /* Android 4.3 declares fchownat() in <sys/stat.h> instead. */ #include <sys/stat.h> ]GL_MDA_DEFINES], [[int fd; int ret; if (mkdir ("conftestdir", 0700) < 0) return 2; fd = open ("conftestdir", O_RDONLY); if (fd < 0) return 3; ret = fchownat (fd, "", (uid_t)(-1), (gid_t)(-1), 0); close (fd); rmdir ("conftestdir"); return ret == 0; ]])], [gl_cv_func_fchownat_empty_filename_works=yes], [gl_cv_func_fchownat_empty_filename_works=no], [gl_cv_func_fchownat_empty_filename_works="$gl_cross_guess_normal"]) ]) AS_IF([test "$gl_cv_func_fchownat_empty_filename_works" != yes], [$1], [$2]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fclose.m4����������������������������������������������������������������0000664�0000000�0000000�00000005661�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fclose.m4 serial 9 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FCLOSE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_FUNC_FFLUSH_STDIN case "$gl_cv_func_fflush_stdin" in *yes) ;; *) REPLACE_FCLOSE=1 ;; esac AC_REQUIRE([gl_FUNC_CLOSE]) if test $REPLACE_CLOSE = 1; then REPLACE_FCLOSE=1 fi case "$host_os" in openedition) REPLACE_FCLOSE=1 ;; esac if test $REPLACE_FCLOSE = 0; then gl_FUNC_FCLOSE_STDIN case "$gl_cv_func_fclose_stdin" in *yes) ;; *) REPLACE_FCLOSE=1 ;; esac fi ]) dnl Determine whether fclose works on input streams. dnl Sets gl_cv_func_fclose_stdin. AC_DEFUN([gl_FUNC_FCLOSE_STDIN], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether fclose works on input streams], [gl_cv_func_fclose_stdin], [echo hello world > conftest.txt AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> #include <stdio.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif ]GL_MDA_DEFINES], [[int fd; int fd2; FILE *fp; fd = open ("conftest.txt", O_RDONLY); if (fd < 0) return 1; if (lseek (fd, 1, SEEK_SET) != 1) return 2; fd2 = dup (fd); if (fd2 < 0) return 3; fp = fdopen (fd2, "r"); if (fp == NULL) return 4; if (fgetc (fp) != 'e') { fclose (fp); return 5; } /* This fclose() call should reposition the underlying file descriptor. */ if (fclose (fp) != 0) return 6; if (lseek (fd2, 0, SEEK_CUR) != -1) /* should fail with EBADF */ return 7; /* Verify the file position. */ if (lseek (fd, 0, SEEK_CUR) != 2) return 8; return 0; ]])], [gl_cv_func_fclose_stdin=yes], [gl_cv_func_fclose_stdin=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_fclose_stdin="guessing no" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fclose_stdin="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_fclose_stdin="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fclose_stdin="$gl_cross_guess_normal" ;; esac ]) rm conftest.txt ]) ]) �������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fcntl-o.m4���������������������������������������������������������������0000664�0000000�0000000�00000011236�14110572173�0016426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl-o.m4 serial 7 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_PREREQ([2.60]) # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> ]GL_MDA_DEFINES[ #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fcntl-safer.m4�����������������������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FCNTL_SAFER], [ dnl Prerequisites of lib/open-safer.c. AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) ]) AC_DEFUN([gl_OPENAT_SAFER], [ AC_REQUIRE([gl_FCNTL_SAFER]) ]) �����������������������������������������������������������gnulib-20210822~d383792/m4/fcntl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000012172�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl.m4 serial 11 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC. dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD. AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[#include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } ]]) ], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"]) ], [gl_cv_func_fcntl_f_dupfd_cloexec=no], [case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) gl_REPLACE_FCNTL dnl No witness macro needed for this bug. ;; esac fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fcntl_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000005206�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <fcntl.h> ]], [fcntl openat]) ]) # gl_FCNTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_FCNTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fdatasync.m4�������������������������������������������������������������0000664�0000000�0000000�00000002544�14110572173�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fdatasync.m4 serial 5 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FDATASYNC], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Using AC_CHECK_FUNCS_ONCE would break our subsequent AC_SEARCH_LIBS AC_CHECK_DECLS_ONCE([fdatasync]) LIB_FDATASYNC= AC_SUBST([LIB_FDATASYNC]) if test $ac_cv_have_decl_fdatasync = no; then HAVE_DECL_FDATASYNC=0 dnl Mac OS X 10.7 has fdatasync but does not declare it. AC_CHECK_FUNCS([fdatasync]) if test $ac_cv_func_fdatasync = no; then HAVE_FDATASYNC=0 fi else case "$host_os" in solaris*) dnl Solaris <= 2.6 has fdatasync() in libposix4. dnl Solaris 7..10 has it in librt. gl_saved_libs=$LIBS AC_SEARCH_LIBS([fdatasync], [rt posix4], [test "$ac_cv_search_fdatasync" = "none required" || LIB_FDATASYNC=$ac_cv_search_fdatasync]) LIBS=$gl_saved_libs ;; *) dnl Android 4.3 does not have fdatasync but declares it. AC_CHECK_FUNCS([fdatasync]) if test $ac_cv_func_fdatasync = no; then HAVE_FDATASYNC=0 fi ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fdopen.m4����������������������������������������������������������������0000664�0000000�0000000�00000002617�14110572173�0016342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fdopen.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FDOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 fi ]) if test $REPLACE_FDOPEN = 0; then dnl Test whether fdopen() sets errno when it fails due to a bad fd argument. AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> ]GL_MDA_DEFINES[ int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL && errno == 0) return 1; return 0; }]])], [gl_cv_func_fdopen_works=yes], [gl_cv_func_fdopen_works=no], [case "$host_os" in mingw*) gl_cv_func_fdopen_works="guessing no" ;; *) gl_cv_func_fdopen_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_fdopen_works" in *no) REPLACE_FDOPEN=1 ;; esac fi ]) dnl Prerequisites of lib/fdopen.c. AC_DEFUN([gl_PREREQ_FDOPEN], []) �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fdopendir.m4�������������������������������������������������������������0000664�0000000�0000000�00000003661�14110572173�0017041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # See if we need to provide fdopendir. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_FDOPENDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl FreeBSD 7.3 has the function, but failed to declare it. AC_CHECK_DECLS([fdopendir], [], [HAVE_DECL_FDOPENDIR=0], [[ #include <dirent.h> ]]) AC_CHECK_FUNCS_ONCE([fdopendir]) if test $ac_cv_func_fdopendir = no; then HAVE_FDOPENDIR=0 else AC_CACHE_CHECK([whether fdopendir works], [gl_cv_func_fdopendir_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <dirent.h> #include <fcntl.h> #include <unistd.h> ]GL_MDA_DEFINES[ #if !HAVE_DECL_FDOPENDIR extern # ifdef __cplusplus "C" # endif DIR *fdopendir (int); #endif ]], [[int result = 0; int fd = open ("conftest.c", O_RDONLY); if (fd < 0) result |= 1; if (fdopendir (fd)) result |= 2; if (close (fd)) result |= 4; return result; ]])], [gl_cv_func_fdopendir_works=yes], [gl_cv_func_fdopendir_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_fdopendir_works" in *yes) ;; *) REPLACE_FDOPENDIR=1 ;; esac fi ]) �������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fegetround.m4������������������������������������������������������������0000664�0000000�0000000�00000001275�14110572173�0017230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fegetround.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FEGETROUND], [ dnl Determine FEGETROUND_LIBM. gl_MATHFUNC([fegetround], [int], [(void)], [#include <fenv.h>]) if test $gl_cv_func_fegetround_no_libm = no \ && test $gl_cv_func_fegetround_in_libm = no; then HAVE_FEGETROUND=0 else HAVE_FEGETROUND=1 AC_DEFINE([HAVE_FEGETROUND], [1], [Define to 1 if you have the 'fegetround' function.]) fi AC_SUBST([FEGETROUND_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fflush.m4����������������������������������������������������������������0000664�0000000�0000000�00000006327�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fflush.m4 serial 18 # Copyright (C) 2007-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Eric Blake dnl Find out how to obey POSIX semantics of fflush(stdin) discarding dnl unread input on seekable streams, rather than C99 undefined semantics. AC_DEFUN([gl_FUNC_FFLUSH], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_FUNC_FFLUSH_STDIN case "$gl_cv_func_fflush_stdin" in *yes) ;; *) REPLACE_FFLUSH=1 ;; esac ]) dnl Determine whether fflush works on input streams. dnl Sets gl_cv_func_fflush_stdin. AC_DEFUN([gl_FUNC_FFLUSH_STDIN], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether fflush works on input streams], [gl_cv_func_fflush_stdin], [echo hello world > conftest.txt AC_RUN_IFELSE([AC_LANG_PROGRAM( [[ #include <stdio.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif ]GL_MDA_DEFINES], [[FILE *f = fopen ("conftest.txt", "r"); char buffer[10]; int fd; int c; if (f == NULL) return 1; fd = fileno (f); if (fd < 0 || fread (buffer, 1, 5, f) != 5) { fclose (f); return 2; } /* For deterministic results, ensure f read a bigger buffer. */ if (lseek (fd, 0, SEEK_CUR) == 5) { fclose (f); return 3; } /* POSIX requires fflush-fseek to set file offset of fd. This fails on BSD systems and on mingw. */ if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) { fclose (f); return 4; } if (lseek (fd, 0, SEEK_CUR) != 5) { fclose (f); return 5; } /* Verify behaviour of fflush after ungetc. See <https://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> */ /* Verify behaviour of fflush after a backup ungetc. This fails on mingw. */ c = fgetc (f); ungetc (c, f); fflush (f); if (fgetc (f) != c) { fclose (f); return 6; } /* Verify behaviour of fflush after a non-backup ungetc. This fails on glibc 2.8 and on BSD systems. */ c = fgetc (f); ungetc ('@', f); fflush (f); if (fgetc (f) != c) { fclose (f); return 7; } fclose (f); return 0; ]])], [gl_cv_func_fflush_stdin=yes], [gl_cv_func_fflush_stdin=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_fflush_stdin="guessing no" ;; *) gl_cv_func_fflush_stdin=cross ;; esac ]) rm conftest.txt ]) case "$gl_cv_func_fflush_stdin" in *yes) gl_func_fflush_stdin=1 ;; *no) gl_func_fflush_stdin=0 ;; *) gl_func_fflush_stdin='(-1)' ;; esac AC_DEFINE_UNQUOTED([FUNC_FFLUSH_STDIN], [$gl_func_fflush_stdin], [Define to 1 if fflush is known to work on stdin as per POSIX.1-2008, 0 if fflush is known to not work, -1 if unknown.]) ]) # Prerequisites of lib/fflush.c. AC_DEFUN([gl_PREREQ_FFLUSH], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ffs.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002006�14110572173�0015635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffs.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FFS], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) dnl We can't use AC_CHECK_FUNC here, because ffs() is defined as a dnl static inline function when compiling for Android 4.2 or older. dnl But require that ffs() is declared; otherwise we may be using dnl the GCC built-in function, which leads to warnings dnl "warning: implicit declaration of function 'ffs'". AC_CACHE_CHECK([for ffs], [gl_cv_func_ffs], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <strings.h> int x; ]], [[int (*func) (int) = ffs; return func (x); ]]) ], [gl_cv_func_ffs=yes], [gl_cv_func_ffs=no]) ]) if test $gl_cv_func_ffs = no; then HAVE_FFS=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ffsl.m4������������������������������������������������������������������0000664�0000000�0000000�00000001013�14110572173�0016006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffsl.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FFSL], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare ffsl(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([ffsl]) if test $ac_cv_func_ffsl = no; then HAVE_FFSL=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ffsll.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004023�14110572173�0016166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffsll.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FFSLL], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <string.h> and AIX <strings.h> to declare ffsll(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([ffsll]) if test $ac_cv_func_ffsll = yes; then dnl Test whether ffsll works. dnl On AIX 7.2 in 32-bit mode it is completely broken. AC_CACHE_CHECK([whether ffsll works], [gl_cv_func_ffsll_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <string.h> #include <strings.h> int dummy (long long x) { return 42; } int main (int argc, char *argv[]) { int (* volatile my_ffsll) (long long) = argc ? ffsll : dummy; long long int x = -128LL; return my_ffsll (x) != 8; } ]])], [gl_cv_func_ffsll_works=yes], [gl_cv_func_ffsll_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ffsll_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ffsll_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ffsll_works="guessing yes" ;; # Guess no on AIX. aix*) gl_cv_func_ffsll_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ffsll_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_ffsll_works" in *yes) ;; *) REPLACE_FFSLL=1 ;; esac else HAVE_FFSLL=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fileblocks.m4������������������������������������������������������������0000664�0000000�0000000�00000001476�14110572173�0017206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fileblocks.m4 serial 6 dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FILEBLOCKS], [ m4_pushdef([AC_LIBOBJ], [:]) dnl Note: AC_STRUCT_ST_BLOCKS does AC_LIBOBJ([fileblocks]). AC_STRUCT_ST_BLOCKS m4_popdef([AC_LIBOBJ]) dnl The stat-size module depends on this one and also assumes that dnl HAVE_STRUCT_STAT_ST_BLOCKS is correctly defined. So if you dnl remove the call above, please make sure that this does not dnl introduce a bug into lib/stat-size.h. ]) # Prerequisites of lib/fileblocks.c. AC_DEFUN([gl_PREREQ_FILEBLOCKS], [ AC_CHECK_HEADERS_ONCE([sys/param.h]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/filemode.m4��������������������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0016650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filemode.m4 serial 9 dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FILEMODE], [ AC_CHECK_DECLS_ONCE([strmode]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/filenamecat.m4�����������������������������������������������������������0000664�0000000�0000000�00000000755�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filenamecat.m4 serial 11 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FILE_NAME_CONCAT], [ AC_REQUIRE([gl_FILE_NAME_CONCAT_LGPL]) ]) AC_DEFUN([gl_FILE_NAME_CONCAT_LGPL], [ dnl Prerequisites of lib/filenamecat-lgpl.c. AC_CHECK_FUNCS_ONCE([mempcpy]) ]) �������������������gnulib-20210822~d383792/m4/findprog-in.m4�����������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# findprog-in.m4 serial 1 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FINDPROG_IN], [ dnl Prerequisites of lib/findprog-in.c. AC_REQUIRE([gl_FUNC_EACCESS]) ]) ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/findprog.m4��������������������������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# findprog.m4 serial 3 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FINDPROG], [ dnl Prerequisites of lib/findprog.c. AC_REQUIRE([gl_FUNC_EACCESS]) ]) ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/flexmember.m4������������������������������������������������������������0000664�0000000�0000000�00000003254�14110572173�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # Check for flexible array member support. # Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_CACHE_CHECK([for flexible array member], ac_cv_c_flexmember, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], [ac_cv_c_flexmember=no])]) if test $ac_cv_c_flexmember = yes; then AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/float_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000005457�14110572173�0016510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# float_h.m4 serial 12 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_H], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) FLOAT_H= REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl FLOAT_H=float.h ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif ]])], [], [FLOAT_H=float.h]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi ;; esac dnl Test against glibc-2.7 Linux/SPARC64 bug. REPLACE_ITOLD=0 AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], [gl_cv_func_itold_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; }]])], [gl_cv_func_itold_works=yes], [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 dnl We add the workaround to <float.h> but also to <math.h>, dnl to increase the chances that the fix function gets pulled in. FLOAT_H=float.h ;; esac if test -n "$FLOAT_H"; then gl_NEXT_HEADERS([float.h]) fi AC_SUBST([FLOAT_H]) AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) AC_SUBST([REPLACE_ITOLD]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/flock.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001267�14110572173�0016165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# flock.m4 serial 4 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOCK], [ AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([flock]) if test $ac_cv_func_flock = no; then HAVE_FLOCK=0 fi ]) dnl Prerequisites of lib/flock.c. AC_DEFUN([gl_PREREQ_FLOCK], [ AC_CHECK_FUNCS_ONCE([fcntl]) AC_CHECK_HEADERS_ONCE([unistd.h]) dnl Do we have a POSIX fcntl lock implementation? AC_CHECK_MEMBERS([struct flock.l_type],[],[],[[#include <fcntl.h>]]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/floor-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floor-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in floor.m4 and not inlined in the dnl module description), so that gl_FUNC_FLOOR can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_FLOOR_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_floor_required=ieee]) AC_REQUIRE([gl_FUNC_FLOOR]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/floor.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006540�14110572173�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floor.m4 serial 14 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOOR], [ m4_divert_text([DEFAULTS], [gl_floor_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Test whether floor() can be used without libm. gl_FUNC_FLOOR_LIBS if test "$FLOOR_LIBM" = "?"; then FLOOR_LIBM= fi m4_ifdef([gl_FUNC_FLOOR_IEEE], [ if test $gl_floor_required = ieee && test $REPLACE_FLOOR = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether floor works according to ISO C 99 with IEC 60559], [gl_cv_func_floor_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FLOOR_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_floor) (double) = argc ? floor : dummy; /* Test whether floor (-0.0) is -0.0. */ if (signbitd (minus_zerod) && !signbitd (my_floor (minus_zerod))) return 1; return 0; } ]])], [gl_cv_func_floor_ieee=yes], [gl_cv_func_floor_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_floor_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_floor_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_floor_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_floor_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_floor_ieee" in *yes) ;; *) REPLACE_FLOOR=1 ;; esac fi ]) if test $REPLACE_FLOOR = 1; then dnl No libraries are needed to link lib/floor.c. FLOOR_LIBM= fi AC_SUBST([FLOOR_LIBM]) ]) # Determines the libraries needed to get the floor() function. # Sets FLOOR_LIBM. AC_DEFUN([gl_FUNC_FLOOR_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_floor_libm], [ gl_cv_func_floor_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x;]], [[x = funcptr(x) + floor(x);]])], [gl_cv_func_floor_libm=]) if test "$gl_cv_func_floor_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x;]], [[x = funcptr(x) + floor(x);]])], [gl_cv_func_floor_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOOR_LIBM="$gl_cv_func_floor_libm" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/floorf-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorf-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in floorf.m4 and not inlined in the dnl module description), so that gl_FUNC_FLOORF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_FLOORF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_floorf_required=ieee]) AC_REQUIRE([gl_FUNC_FLOORF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/floorf.m4����������������������������������������������������������������0000664�0000000�0000000�00000007614�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorf.m4 serial 18 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOORF], [ m4_divert_text([DEFAULTS], [gl_floorf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare floorf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether floorf() is declared. AC_CHECK_DECLS([floorf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_floorf" = yes; then dnl Test whether floorf() can be used without libm. gl_FUNC_FLOORF_LIBS if test "$FLOORF_LIBM" = "?"; then dnl Sun C 5.0 on Solaris declares floorf() and has it in the system-wide dnl libm.so, but not in the libm.so that the compiler uses. REPLACE_FLOORF=1 fi m4_ifdef([gl_FUNC_FLOORF_IEEE], [ if test $gl_floorf_required = ieee && test $REPLACE_FLOORF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether floorf works according to ISO C 99 with IEC 60559], [gl_cv_func_floorf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FLOORF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float f) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_floorf) (float) = argc ? floorf : dummy; /* Test whether floorf (-0.0f) is -0.0f. */ if (signbitf (minus_zerof) && !signbitf (my_floorf (minus_zerof))) return 1; return 0; } ]])], [gl_cv_func_floorf_ieee=yes], [gl_cv_func_floorf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_floorf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_floorf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_floorf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_floorf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_floorf_ieee" in *yes) ;; *) REPLACE_FLOORF=1 ;; esac fi ]) else HAVE_DECL_FLOORF=0 fi if test $HAVE_DECL_FLOORF = 0 || test $REPLACE_FLOORF = 1; then dnl No libraries are needed to link lib/floorf.c. FLOORF_LIBM= fi AC_SUBST([FLOORF_LIBM]) ]) # Determines the libraries needed to get the floorf() function. # Sets FLOORF_LIBM. AC_DEFUN([gl_FUNC_FLOORF_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_floorf_libm], [ gl_cv_func_floorf_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = floorf; float x;]], [[x = funcptr(x) + floorf(x);]])], [gl_cv_func_floorf_libm=]) if test "$gl_cv_func_floorf_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = floorf; float x;]], [[x = funcptr(x) + floorf(x);]])], [gl_cv_func_floorf_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOORF_LIBM="$gl_cv_func_floorf_libm" ]) ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/floorl.m4����������������������������������������������������������������0000664�0000000�0000000�00000004466�14110572173�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorl.m4 serial 11 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOORL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare floorl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether floorl() is declared. AC_CHECK_DECLS([floorl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_floorl" = yes; then dnl Test whether floorl() can be used without libm. gl_FUNC_FLOORL_LIBS if test "$FLOORL_LIBM" = "?"; then dnl Sun C 5.0 on Solaris declares floorl() and has it in the system-wide dnl libm.so, but not in the libm.so that the compiler uses. REPLACE_FLOORL=1 fi else HAVE_DECL_FLOORL=0 fi if test $HAVE_DECL_FLOORL = 0 || test $REPLACE_FLOORL = 1; then dnl Find libraries needed to link lib/floorl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_FLOOR]) FLOORL_LIBM="$FLOOR_LIBM" else FLOORL_LIBM= fi fi AC_SUBST([FLOORL_LIBM]) ]) # Determines the libraries needed to get the floorl() function. # Sets FLOORL_LIBM. AC_DEFUN([gl_FUNC_FLOORL_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_floorl_libm], [ gl_cv_func_floorl_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = floorl; long double x;]], [[x = funcptr (x) + floorl(x);]])], [gl_cv_func_floorl_libm=]) if test "$gl_cv_func_floorl_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = floorl; long double x;]], [[x = funcptr (x) + floorl(x);]])], [gl_cv_func_floorl_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOORL_LIBM="$gl_cv_func_floorl_libm" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fma.m4�������������������������������������������������������������������0000664�0000000�0000000�00000015230�14110572173�0015625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fma.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMA], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine FMA_LIBM. gl_MATHFUNC([fma], [double], [(double, double, double)], [extern #ifdef __cplusplus "C" #endif double fma (double, double, double); ]) if test $gl_cv_func_fma_no_libm = yes \ || test $gl_cv_func_fma_in_libm = yes; then dnl Also check whether it's declared. dnl IRIX 6.5 has fma() in libm but doesn't declare it in <math.h>, dnl and the function is buggy. AC_CHECK_DECL([fma], , [REPLACE_FMA=1], [[#include <math.h>]]) if test $REPLACE_FMA = 0; then gl_FUNC_FMA_WORKS case "$gl_cv_func_fma_works" in *no) REPLACE_FMA=1 ;; esac fi else HAVE_FMA=0 fi if test $HAVE_FMA = 0 || test $REPLACE_FMA = 1; then dnl Find libraries needed to link lib/fmal.c. AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_LDEXP]) AC_REQUIRE([gl_FUNC_FEGETROUND]) FMA_LIBM= dnl Append $FREXP_LIBM to FMA_LIBM, avoiding gratuitous duplicates. case " $FMA_LIBM " in *" $FREXP_LIBM "*) ;; *) FMA_LIBM="$FMA_LIBM $FREXP_LIBM" ;; esac dnl Append $LDEXP_LIBM to FMA_LIBM, avoiding gratuitous duplicates. case " $FMA_LIBM " in *" $LDEXP_LIBM "*) ;; *) FMA_LIBM="$FMA_LIBM $LDEXP_LIBM" ;; esac dnl Append $FEGETROUND_LIBM to FMA_LIBM, avoiding gratuitous duplicates. case " $FMA_LIBM " in *" $FEGETROUND_LIBM "*) ;; *) FMA_LIBM="$FMA_LIBM $FEGETROUND_LIBM" ;; esac fi AC_SUBST([FMA_LIBM]) ]) dnl Test whether fma() has any of the 7 known bugs of glibc 2.11.3 on x86_64. AC_DEFUN([gl_FUNC_FMA_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_LDEXP]) save_LIBS="$LIBS" LIBS="$LIBS $FMA_LIBM $LDEXP_LIBM" AC_CACHE_CHECK([whether fma works], [gl_cv_func_fma_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> double p0 = 0.0; int main() { int failed_tests = 0; /* These tests fail with glibc 2.11.3 on x86_64. */ { volatile double x = 1.5; /* 3 * 2^-1 */ volatile double y = x; volatile double z = ldexp (1.0, DBL_MANT_DIG + 1); /* 2^54 */ /* x * y + z with infinite precision: 2^54 + 9 * 2^-2. Lies between (2^52 + 0) * 2^2 and (2^52 + 1) * 2^2 and is closer to (2^52 + 1) * 2^2, therefore the rounding must round up and produce (2^52 + 1) * 2^2. */ volatile double expected = z + 4.0; volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 1; } { volatile double x = 1.25; /* 2^0 + 2^-2 */ volatile double y = - x; volatile double z = ldexp (1.0, DBL_MANT_DIG + 1); /* 2^54 */ /* x * y + z with infinite precision: 2^54 - 2^0 - 2^-1 - 2^-4. Lies between (2^53 - 1) * 2^1 and 2^53 * 2^1 and is closer to (2^53 - 1) * 2^1, therefore the rounding must round down and produce (2^53 - 1) * 2^1. */ volatile double expected = (ldexp (1.0, DBL_MANT_DIG) - 1.0) * 2.0; volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 2; } { volatile double x = 1.0 + ldexp (1.0, 1 - DBL_MANT_DIG); /* 2^0 + 2^-52 */ volatile double y = x; volatile double z = 4.0; /* 2^2 */ /* x * y + z with infinite precision: 2^2 + 2^0 + 2^-51 + 2^-104. Lies between (2^52 + 2^50) * 2^-50 and (2^52 + 2^50 + 1) * 2^-50 and is closer to (2^52 + 2^50 + 1) * 2^-50, therefore the rounding must round up and produce (2^52 + 2^50 + 1) * 2^-50. */ volatile double expected = 4.0 + 1.0 + ldexp (1.0, 3 - DBL_MANT_DIG); volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 4; } { volatile double x = 1.0 + ldexp (1.0, 1 - DBL_MANT_DIG); /* 2^0 + 2^-52 */ volatile double y = - x; volatile double z = 8.0; /* 2^3 */ /* x * y + z with infinite precision: 2^2 + 2^1 + 2^0 - 2^-51 - 2^-104. Lies between (2^52 + 2^51 + 2^50 - 1) * 2^-50 and (2^52 + 2^51 + 2^50) * 2^-50 and is closer to (2^52 + 2^51 + 2^50 - 1) * 2^-50, therefore the rounding must round down and produce (2^52 + 2^51 + 2^50 - 1) * 2^-50. */ volatile double expected = 7.0 - ldexp (1.0, 3 - DBL_MANT_DIG); volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 8; } { volatile double x = 1.25; /* 2^0 + 2^-2 */ volatile double y = - 0.75; /* - 2^0 + 2^-2 */ volatile double z = ldexp (1.0, DBL_MANT_DIG); /* 2^53 */ /* x * y + z with infinite precision: 2^53 - 2^0 + 2^-4. Lies between (2^53 - 2^0) and 2^53 and is closer to (2^53 - 2^0), therefore the rounding must round down and produce (2^53 - 2^0). */ volatile double expected = ldexp (1.0, DBL_MANT_DIG) - 1.0; volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 16; } if ((DBL_MANT_DIG % 2) == 1) { volatile double x = 1.0 + ldexp (1.0, - (DBL_MANT_DIG + 1) / 2); /* 2^0 + 2^-27 */ volatile double y = 1.0 - ldexp (1.0, - (DBL_MANT_DIG + 1) / 2); /* 2^0 - 2^-27 */ volatile double z = - ldexp (1.0, DBL_MIN_EXP - DBL_MANT_DIG); /* - 2^-1074 */ /* x * y + z with infinite precision: 2^0 - 2^-54 - 2^-1074. Lies between (2^53 - 1) * 2^-53 and 2^53 * 2^-53 and is closer to (2^53 - 1) * 2^-53, therefore the rounding must round down and produce (2^53 - 1) * 2^-53. */ volatile double expected = 1.0 - ldexp (1.0, - DBL_MANT_DIG); volatile double result = fma (x, y, z); if (result != expected) failed_tests |= 32; } { double minus_inf = -1.0 / p0; volatile double x = ldexp (1.0, DBL_MAX_EXP - 1); volatile double y = ldexp (1.0, DBL_MAX_EXP - 1); volatile double z = minus_inf; volatile double result = fma (x, y, z); if (!(result == minus_inf)) failed_tests |= 64; } return failed_tests; }]])], [gl_cv_func_fma_works=yes], [gl_cv_func_fma_works=no], [dnl Guess yes on native Windows with MSVC. dnl Otherwise guess no, even on glibc systems. gl_cv_func_fma_works="$gl_cross_guess_normal" case "$host_os" in mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_fma_works="guessing yes"]) ;; esac ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fma.c. AC_DEFUN([gl_PREREQ_FMA], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmaf.m4������������������������������������������������������������������0000664�0000000�0000000�00000017077�14110572173�0016006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmaf.m4 serial 6 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMAF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare fmaf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine FMAF_LIBM. gl_MATHFUNC([fmaf], [float], [(float, float, float)], [extern #ifdef __cplusplus "C" #endif float fmaf (float, float, float); ]) if test $gl_cv_func_fmaf_no_libm = yes \ || test $gl_cv_func_fmaf_in_libm = yes; then dnl Also check whether it's declared. dnl IRIX 6.5 has fmaf() in libm but doesn't declare it in <math.h>, dnl and the function is likely buggy. AC_CHECK_DECL([fmaf], , [REPLACE_FMAF=1], [[#include <math.h>]]) if test $REPLACE_FMAF = 0; then gl_FUNC_FMAF_WORKS case "$gl_cv_func_fmaf_works" in *no) REPLACE_FMAF=1 ;; esac fi else HAVE_FMAF=0 fi if test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1; then dnl Find libraries needed to link lib/fmaf.c. AC_REQUIRE([gl_FUNC_FREXPF]) AC_REQUIRE([gl_FUNC_LDEXPF]) AC_REQUIRE([gl_FUNC_FEGETROUND]) FMAF_LIBM= dnl Append $FREXPF_LIBM to FMAF_LIBM, avoiding gratuitous duplicates. case " $FMAF_LIBM " in *" $FREXPF_LIBM "*) ;; *) FMAF_LIBM="$FMAF_LIBM $FREXPF_LIBM" ;; esac dnl Append $LDEXPF_LIBM to FMAF_LIBM, avoiding gratuitous duplicates. case " $FMAF_LIBM " in *" $LDEXPF_LIBM "*) ;; *) FMAF_LIBM="$FMAF_LIBM $LDEXPF_LIBM" ;; esac dnl Append $FEGETROUND_LIBM to FMAF_LIBM, avoiding gratuitous duplicates. case " $FMAF_LIBM " in *" $FEGETROUND_LIBM "*) ;; *) FMAF_LIBM="$FMAF_LIBM $FEGETROUND_LIBM" ;; esac fi AC_SUBST([FMAF_LIBM]) ]) dnl Test whether fmaf() has any of the 7 known bugs of glibc 2.11.3 on x86_64. AC_DEFUN([gl_FUNC_FMAF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_LDEXPF]) save_LIBS="$LIBS" LIBS="$LIBS $FMAF_LIBM $LDEXPF_LIBM" AC_CACHE_CHECK([whether fmaf works], [gl_cv_func_fmaf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> float p0 = 0.0f; int main() { int failed_tests = 0; /* These tests fail with glibc 2.11.3 on x86_64. */ { volatile float x = 1.5f; /* 3 * 2^-1 */ volatile float y = x; volatile float z = ldexpf (1.0f, FLT_MANT_DIG + 1); /* 2^25 */ /* x * y + z with infinite precision: 2^25 + 9 * 2^-2. Lies between (2^23 + 0) * 2^2 and (2^23 + 1) * 2^2 and is closer to (2^23 + 1) * 2^2, therefore the rounding must round up and produce (2^23 + 1) * 2^2. */ volatile float expected = z + 4.0f; volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 1; } { volatile float x = 1.25f; /* 2^0 + 2^-2 */ volatile float y = - x; volatile float z = ldexpf (1.0f, FLT_MANT_DIG + 1); /* 2^25 */ /* x * y + z with infinite precision: 2^25 - 2^0 - 2^-1 - 2^-4. Lies between (2^24 - 1) * 2^1 and 2^24 * 2^1 and is closer to (2^24 - 1) * 2^1, therefore the rounding must round down and produce (2^24 - 1) * 2^1. */ volatile float expected = (ldexpf (1.0f, FLT_MANT_DIG) - 1.0f) * 2.0f; volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 2; } { volatile float x = 1.0f + ldexpf (1.0f, 1 - FLT_MANT_DIG); /* 2^0 + 2^-23 */ volatile float y = x; volatile float z = 4.0f; /* 2^2 */ /* x * y + z with infinite precision: 2^2 + 2^0 + 2^-22 + 2^-46. Lies between (2^23 + 2^21) * 2^-21 and (2^23 + 2^21 + 1) * 2^-21 and is closer to (2^23 + 2^21 + 1) * 2^-21, therefore the rounding must round up and produce (2^23 + 2^21 + 1) * 2^-21. */ volatile float expected = 4.0f + 1.0f + ldexpf (1.0f, 3 - FLT_MANT_DIG); volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 4; } { volatile float x = 1.0f + ldexpf (1.0f, 1 - FLT_MANT_DIG); /* 2^0 + 2^-23 */ volatile float y = - x; volatile float z = 8.0f; /* 2^3 */ /* x * y + z with infinite precision: 2^2 + 2^1 + 2^0 - 2^-22 - 2^-46. Lies between (2^23 + 2^22 + 2^21 - 1) * 2^-21 and (2^23 + 2^22 + 2^21) * 2^-21 and is closer to (2^23 + 2^22 + 2^21 - 1) * 2^-21, therefore the rounding must round down and produce (2^23 + 2^22 + 2^21 - 1) * 2^-21. */ volatile float expected = 7.0f - ldexpf (1.0f, 3 - FLT_MANT_DIG); volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 8; } { volatile float x = 1.25f; /* 2^0 + 2^-2 */ volatile float y = - 0.75f; /* - 2^0 + 2^-2 */ volatile float z = ldexpf (1.0f, FLT_MANT_DIG); /* 2^24 */ /* x * y + z with infinite precision: 2^24 - 2^0 + 2^-4. Lies between (2^24 - 2^0) and 2^24 and is closer to (2^24 - 2^0), therefore the rounding must round down and produce (2^24 - 2^0). */ volatile float expected = ldexpf (1.0f, FLT_MANT_DIG) - 1.0f; volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 16; } if ((FLT_MANT_DIG % 2) == 0) { volatile float x = 1.0f + ldexpf (1.0f, - FLT_MANT_DIG / 2); /* 2^0 + 2^-12 */ volatile float y = x; volatile float z = ldexpf (1.0f, FLT_MIN_EXP - FLT_MANT_DIG); /* 2^-149 */ /* x * y + z with infinite precision: 2^0 + 2^-11 + 2^-24 + 2^-149. Lies between (2^23 + 2^12 + 0) * 2^-23 and (2^23 + 2^12 + 1) * 2^-23 and is closer to (2^23 + 2^12 + 1) * 2^-23, therefore the rounding must round up and produce (2^23 + 2^12 + 1) * 2^-23. */ volatile float expected = 1.0f + ldexpf (1.0f, 1 - FLT_MANT_DIG / 2) + ldexpf (1.0f, 1 - FLT_MANT_DIG); volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 32; } { float minus_inf = -1.0f / p0; volatile float x = ldexpf (1.0f, FLT_MAX_EXP - 1); volatile float y = ldexpf (1.0f, FLT_MAX_EXP - 1); volatile float z = minus_inf; volatile float result = fmaf (x, y, z); if (!(result == minus_inf)) failed_tests |= 64; } /* This test fails on FreeBSD 12.2/arm. */ if ((FLT_MANT_DIG % 2) == 0) { volatile float x = 1.0f + ldexpf (1.0f, - FLT_MANT_DIG / 2); /* 2^0 + 2^-12 */ volatile float y = x; volatile float z = - ldexpf (1.0f, FLT_MIN_EXP - FLT_MANT_DIG); /* 2^-149 */ /* x * y + z with infinite precision: 2^0 + 2^-11 + 2^-24 - 2^-149. Lies between (2^23 + 2^12 + 0) * 2^-23 and (2^23 + 2^12 + 1) * 2^-23 and is closer to (2^23 + 2^12 + 0) * 2^-23, therefore the rounding must round down and produce (2^23 + 2^12 + 0) * 2^-23. */ volatile float expected = 1.0f + ldexpf (1.0f, 1 - FLT_MANT_DIG / 2); volatile float result = fmaf (x, y, z); if (result != expected) failed_tests |= 32; } return failed_tests; }]])], [gl_cv_func_fmaf_works=yes], [gl_cv_func_fmaf_works=no], [dnl Guess yes on native Windows with MSVC. dnl Otherwise guess no, even on glibc systems. gl_cv_func_fmaf_works="$gl_cross_guess_normal" case "$host_os" in mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_fmaf_works="guessing yes"]) ;; esac ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fmaf.c. AC_DEFUN([gl_PREREQ_FMAF], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmal.m4������������������������������������������������������������������0000664�0000000�0000000�00000041172�14110572173�0016005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmal.m4 serial 7 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMAL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare fmal(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine FMAL_LIBM. gl_MATHFUNC([fmal], [long double], [(long double, long double, long double)], [extern #ifdef __cplusplus "C" #endif long double fmal (long double, long double, long double); ]) if test $gl_cv_func_fmal_no_libm = yes \ || test $gl_cv_func_fmal_in_libm = yes; then dnl Also check whether it's declared. dnl IRIX 6.5 has fmal() in libm but doesn't declare it in <math.h>, dnl and the function is buggy. AC_CHECK_DECL([fmal], , [REPLACE_FMAL=1], [[#include <math.h>]]) if test $REPLACE_FMAL = 0; then gl_FUNC_FMAL_WORKS case "$gl_cv_func_fmal_works" in *no) REPLACE_FMAL=1 ;; esac fi else HAVE_FMAL=0 fi if test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; then dnl Find libraries needed to link lib/fmal.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_FMA]) FMAL_LIBM="$FMA_LIBM" else AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_LDEXPL]) AC_REQUIRE([gl_FUNC_FEGETROUND]) FMAL_LIBM= dnl Append $FREXPL_LIBM to FMAL_LIBM, avoiding gratuitous duplicates. case " $FMAL_LIBM " in *" $FREXPL_LIBM "*) ;; *) FMAL_LIBM="$FMAL_LIBM $FREXPL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to FMAL_LIBM, avoiding gratuitous duplicates. case " $FMAL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) FMAL_LIBM="$FMAL_LIBM $LDEXPL_LIBM" ;; esac dnl Append $FEGETROUND_LIBM to FMAL_LIBM, avoiding gratuitous duplicates. case " $FMAL_LIBM " in *" $FEGETROUND_LIBM "*) ;; *) FMAL_LIBM="$FMAL_LIBM $FEGETROUND_LIBM" ;; esac fi fi AC_SUBST([FMAL_LIBM]) ]) dnl Test whether fmal() has any of the 15 known bugs of glibc 2.11.3 on x86_64. AC_DEFUN([gl_FUNC_FMAL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_LDEXPL]) save_LIBS="$LIBS" LIBS="$LIBS $FMAL_LIBM $LDEXPL_LIBM" AC_CACHE_CHECK([whether fmal works], [gl_cv_func_fmal_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif long double p0 = 0.0L; int main() { int failed_tests = 0; /* This test fails on glibc 2.11 powerpc. */ { volatile long double x = 1.5L; /* 3 * 2^-1 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, LDBL_MANT_DIG + 1); /* 2^65 */ /* x * y + z with infinite precision: 2^65 + 9 * 2^-2. Lies between (2^63 + 0) * 2^2 and (2^63 + 1) * 2^2 and is closer to (2^63 + 1) * 2^2, therefore the rounding must round up and produce (2^63 + 1) * 2^2. */ volatile long double expected = z + 4.0L; volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 1; } /* This test fails on glibc 2.11 powerpc. */ { volatile long double x = 1.25L; /* 2^0 + 2^-2 */ volatile long double y = - x; volatile long double z = ldexpl (1.0L, LDBL_MANT_DIG + 1); /* 2^65 */ /* x * y + z with infinite precision: 2^65 - 2^0 - 2^-1 - 2^-4. Lies between (2^64 - 1) * 2^1 and 2^64 * 2^1 and is closer to (2^64 - 1) * 2^1, therefore the rounding must round down and produce (2^64 - 1) * 2^1. */ volatile long double expected = (ldexpl (1.0L, LDBL_MANT_DIG) - 1.0L) * 2.0L; volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 1; } /* This test fails on glibc 2.11 x86,x86_64,powerpc, glibc 2.7 hppa,sparc, OSF/1 5.1, mingw. */ { volatile long double x = 1.0L + ldexpl (1.0L, 1 - LDBL_MANT_DIG); /* 2^0 + 2^-63 */ volatile long double y = x; volatile long double z = 4.0L; /* 2^2 */ /* x * y + z with infinite precision: 2^2 + 2^0 + 2^-62 + 2^-126. Lies between (2^63 + 2^61) * 2^-61 and (2^63 + 2^61 + 1) * 2^-61 and is closer to (2^63 + 2^61 + 1) * 2^-61, therefore the rounding must round up and produce (2^63 + 2^61 + 1) * 2^-61. */ volatile long double expected = 4.0L + 1.0L + ldexpl (1.0L, 3 - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 2; } /* This test fails on glibc 2.11 x86,x86_64,powerpc glibc 2.7 hppa,sparc, OSF/1 5.1, mingw. */ { volatile long double x = 1.0L + ldexpl (1.0L, 1 - LDBL_MANT_DIG); /* 2^0 + 2^-63 */ volatile long double y = - x; volatile long double z = 8.0L; /* 2^3 */ /* x * y + z with infinite precision: 2^2 + 2^1 + 2^0 - 2^-62 - 2^-126. Lies between (2^63 + 2^62 + 2^61 - 1) * 2^-61 and (2^63 + 2^62 + 2^61) * 2^-61 and is closer to (2^63 + 2^62 + 2^61 - 1) * 2^-61, therefore the rounding must round down and produce (2^63 + 2^62 + 2^61 - 1) * 2^-61. */ volatile long double expected = 7.0L - ldexpl (1.0L, 3 - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 2; } /* This test fails on glibc 2.11 powerpc. */ { volatile long double x = 1.25L; /* 2^0 + 2^-2 */ volatile long double y = - 0.75L; /* - 2^0 + 2^-2 */ volatile long double z = ldexpl (1.0L, LDBL_MANT_DIG); /* 2^64 */ /* x * y + z with infinite precision: 2^64 - 2^0 + 2^-4. Lies between (2^64 - 2^0) and 2^64 and is closer to (2^64 - 2^0), therefore the rounding must round down and produce (2^64 - 2^0). */ volatile long double expected = ldexpl (1.0L, LDBL_MANT_DIG) - 1.0L; volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 1; } if ((LDBL_MANT_DIG % 2) == 1) { /* These tests fail on glibc 2.7 hppa,sparc, OSF/1 5.1. */ { volatile long double x = 1.0L + ldexpl (1.0L, - (LDBL_MANT_DIG + 1) / 2); /* 2^0 + 2^-27 */ volatile long double y = 1.0L - ldexpl (1.0L, - (LDBL_MANT_DIG + 1) / 2); /* 2^0 - 2^-27 */ volatile long double z = - ldexpl (1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG); /* - 2^-1074 */ /* x * y + z with infinite precision: 2^0 - 2^-54 - 2^-1074. Lies between (2^53 - 1) * 2^-53 and 2^53 * 2^-53 and is closer to (2^53 - 1) * 2^-53, therefore the rounding must round down and produce (2^53 - 1) * 2^-53. */ volatile long double expected = 1.0L - ldexpl (1.0L, - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 4; } { volatile long double x = 1.0L + ldexpl (1.0L, - (LDBL_MANT_DIG + 1) / 2); /* 2^0 + 2^-57 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, - LDBL_MANT_DIG); /* 2^-113 */ /* x * y + z with infinite precision: 2^0 + 2^-56 + 2^-113 + 2^-114. Lies between (2^112 + 2^56) * 2^-112 and (2^112 + 2^56 + 1) * 2^-112 and is closer to (2^112 + 2^56 + 1) * 2^-112, therefore the rounding must round up and produce (2^112 + 2^56 + 1) * 2^-112. */ volatile long double expected = 1.0L + ldexpl (1.0L, - (LDBL_MANT_DIG - 1) / 2) + ldexpl (1.0L, 1 - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 4; } } else { /* These tests fail on glibc 2.11 x86,x86_64,powerpc, mingw. */ { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, LDBL_MIN_EXP - LDBL_MANT_DIG); /* 2^-16445 */ /* x * y + z with infinite precision: 2^0 + 2^-31 + 2^-64 + 2^-16445. Lies between (2^63 + 2^32 + 0) * 2^-63 and (2^63 + 2^32 + 1) * 2^-63 and is closer to (2^63 + 2^32 + 1) * 2^-63, therefore the rounding must round up and produce (2^63 + 2^32 + 1) * 2^-63. */ volatile long double expected = 1.0L + ldexpl (1.0L, 1 - LDBL_MANT_DIG / 2) + ldexpl (1.0L, 1 - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, - LDBL_MANT_DIG); /* 2^-64 */ /* x * y + z with infinite precision: 2^0 + 2^-31 + 2^-63. Rounding must return this value unchanged. */ volatile long double expected = 1.0L + ldexpl (1.0L, 1 - LDBL_MANT_DIG / 2) + ldexpl (1.0L, 1 - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, 1 - LDBL_MANT_DIG); /* 2^-63 */ /* x * y + z with infinite precision: 2^0 + 2^-31 + 2^-63 + 2^-64. Lies between (2^63 + 2^32 + 1) * 2^-63 and (2^63 + 2^32 + 2) * 2^-63 and is at the same distance from each. According to the round-to-even rule, the rounding must round up and produce (2^63 + 2^32 + 2) * 2^-63. */ volatile long double expected = 1.0L + ldexpl (1.0L, -31) + ldexpl (1.0L, -62); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = ldexpl (1.0L, LDBL_MANT_DIG / 2 + 1); /* 2^33 */ /* x * y + z with infinite precision: 2^33 + 2^0 + 2^-31 + 2^-64. Lies between (2^63 + 2^30) * 2^-30 and (2^63 + 2^30 + 1) * 2^-30 and is closer to (2^63 + 2^30 + 1) * 2^-30, therefore the rounding must round up and produce (2^63 + 2^30 + 1) * 2^-30. */ volatile long double expected = z + 1.0L + ldexp (1.0L, 2 - LDBL_MANT_DIG / 2); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = - ldexpl (1.0, 1 - LDBL_MANT_DIG); /* - 2^-63 */ /* x * y + z with infinite precision: 2^0 + 2^-31 - 2^-64. Lies between (2^63 + 2^32 - 1) * 2^-63 and (2^63 + 2^32) * 2^-63 and is at the same distance from each. According to the round-to-even rule, the rounding must round up and produce (2^63 + 2^32) * 2^-63. */ volatile long double expected = 1.0L + ldexpl (1.0L, 1 - LDBL_MANT_DIG / 2); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = x; volatile long double z = - 1.0L; /* - 2^0 */ /* x * y + z with infinite precision: 2^-31 + 2^-64. Rounding must return this value unchanged. */ volatile long double expected = ldexpl (1.0L, 1 - LDBL_MANT_DIG / 2) + ldexpl (1.0L, - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = - x; volatile long double z = 2.0L; /* 2^1 */ /* x * y + z with infinite precision: 2^0 - 2^31 - 2^-64. Rounding must return this value unchanged. */ volatile long double expected = 1.0L - ldexpl (1.0L, 1 - LDBL_MANT_DIG / 2) - ldexpl (1.0L, - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2); /* 2^0 + 2^-32 */ volatile long double y = - x; volatile long double z = ldexpl (1.0L, LDBL_MANT_DIG / 2 + 2); /* 2^34 */ /* x * y + z with infinite precision: 2^34 - (2^0 + 2^-31 + 2^-64). Lies between (2^64 - 2^30 - 1) * 2^-30 and (2^64 - 2^30) * 2^-30 and is closer to (2^64 - 2^30 - 1) * 2^-30, therefore the rounding must round down and produce (2^64 - 2^30 - 1) * 2^-30. */ volatile long double expected = z - 1.0L - ldexpl (1.0L, 2 - LDBL_MANT_DIG / 2); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2 - 1); /* 2^0 + 2^-33 */ volatile long double y = 1.0L - ldexpl (1.0L, - LDBL_MANT_DIG / 2 - 1); /* 2^0 - 2^-33 */ volatile long double z = - ldexpl (1.0L, - LDBL_MANT_DIG - 1); /* 2^-65 */ /* x * y + z with infinite precision: 2^0 - 2^-65 - 2^-66. Lies between (2^64 - 1) * 2^-64 and 2^64 * 2^-64 and is closer to (2^64 - 1) * 2^-64, therefore the rounding must round down and produce (2^64 - 1) * 2^-64. */ volatile long double expected = 1.0L - ldexpl (1.0L, - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } { volatile long double x = 1.0L + ldexpl (1.0L, - LDBL_MANT_DIG / 2 - 1); /* 2^0 + 2^-33 */ volatile long double y = 1.0L - ldexpl (1.0L, - LDBL_MANT_DIG / 2 - 1); /* 2^0 - 2^-33 */ volatile long double z = - 1.0L; /* 2^0 */ /* x * y + z with infinite precision: - 2^-66. Rounding must return this value unchanged. */ volatile long double expected = - ldexpl (1.0L, - LDBL_MANT_DIG - 2); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 8; } } /* This test fails on glibc 2.11 x86,x86_64,powerpc, glibc 2.7 hppa,sparc, FreeBSD 6.4 x86, mingw. */ { long double minus_inf = -1.0L / p0; volatile long double x = ldexpl (1.0L, LDBL_MAX_EXP - 1); volatile long double y = ldexpl (1.0L, LDBL_MAX_EXP - 1); volatile long double z = minus_inf; volatile long double result = fmal (x, y, z); if (!(result == minus_inf)) failed_tests |= 16; } /* This test fails on glibc 2.11 x86,x86_64,powerpc glibc 2.7 hppa,sparc, Mac OS X 10.5, FreeBSD 6.4 x86, OSF/1 5.1, mingw. */ { volatile long double x = ldexpl (1.0L, LDBL_MAX_EXP - 1); volatile long double y = 2.0L; volatile long double z = - ldexpl (ldexpl (1.0L, LDBL_MAX_EXP - 1) - ldexpl (1.0L, LDBL_MAX_EXP - LDBL_MANT_DIG - 1), 1); volatile long double expected = ldexpl (1.0L, LDBL_MAX_EXP - LDBL_MANT_DIG); volatile long double result = fmal (x, y, z); if (result != expected) failed_tests |= 32; } return failed_tests; }]])], [gl_cv_func_fmal_works=yes], [gl_cv_func_fmal_works=no], [dnl Guess yes on native Windows with MSVC. dnl Otherwise guess no, even on glibc systems. gl_cv_func_fmal_works="$gl_cross_guess_normal" case "$host_os" in mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_fmal_works="guessing yes"]) ;; esac ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fmal.c. AC_DEFUN([gl_PREREQ_FMAL], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmod-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001110�14110572173�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmod-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in fmod.m4 and not inlined in the dnl module description), so that gl_FUNC_FMOD can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_FMOD_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_fmod_required=ieee]) AC_REQUIRE([gl_FUNC_FMOD]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmod.m4������������������������������������������������������������������0000664�0000000�0000000�00000007272�14110572173�0016016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmod.m4 serial 9 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMOD], [ m4_divert_text([DEFAULTS], [gl_fmod_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine FMOD_LIBM. gl_COMMON_DOUBLE_MATHFUNC([fmod]) m4_ifdef([gl_FUNC_FMOD_IEEE], [ if test $gl_fmod_required = ieee && test $REPLACE_FMOD = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether fmod works according to ISO C 99 with IEC 60559], [gl_cv_func_fmod_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FMOD_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x, double y) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_fmod) (double, double) = argc ? fmod : dummy; int result = 0; double f; /* Test fmod(...,0.0). This test fails on OSF/1 5.1. */ f = my_fmod (2.0, 0.0); if (numeric_equal (f, f)) result |= 1; /* Test fmod(-0.0,...). This test fails on native Windows. */ f = my_fmod (minus_zerod, 2.0); if (!(f == 0.0) || (signbitd (minus_zerod) && !signbitd (f))) result |= 2; return result; } ]])], [gl_cv_func_fmod_ieee=yes], [gl_cv_func_fmod_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_fmod_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fmod_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_fmod_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fmod_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_fmod_ieee" in *yes) ;; *) REPLACE_FMOD=1 ;; esac fi ]) if test $REPLACE_FMOD = 1; then dnl Find libraries needed to link lib/fmod.c. AC_REQUIRE([gl_FUNC_FABS]) AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_TRUNC]) AC_REQUIRE([gl_FUNC_LDEXP]) AC_REQUIRE([gl_FUNC_ISNAND]) FMOD_LIBM= dnl Append $FABS_LIBM to FMOD_LIBM, avoiding gratuitous duplicates. case " $FMOD_LIBM " in *" $FABS_LIBM "*) ;; *) FMOD_LIBM="$FMOD_LIBM $FABS_LIBM" ;; esac dnl Append $FREXP_LIBM to FMOD_LIBM, avoiding gratuitous duplicates. case " $FMOD_LIBM " in *" $FREXP_LIBM "*) ;; *) FMOD_LIBM="$FMOD_LIBM $FREXP_LIBM" ;; esac dnl Append $TRUNC_LIBM to FMOD_LIBM, avoiding gratuitous duplicates. case " $FMOD_LIBM " in *" $TRUNC_LIBM "*) ;; *) FMOD_LIBM="$FMOD_LIBM $TRUNC_LIBM" ;; esac dnl Append $LDEXP_LIBM to FMOD_LIBM, avoiding gratuitous duplicates. case " $FMOD_LIBM " in *" $LDEXP_LIBM "*) ;; *) FMOD_LIBM="$FMOD_LIBM $LDEXP_LIBM" ;; esac dnl Append $ISNAND_LIBM to FMOD_LIBM, avoiding gratuitous duplicates. case " $FMOD_LIBM " in *" $ISNAND_LIBM "*) ;; *) FMOD_LIBM="$FMOD_LIBM $ISNAND_LIBM" ;; esac fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmodf-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmodf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in fmodf.m4 and not inlined in the dnl module description), so that gl_FUNC_FMODF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_FMODF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_fmodf_required=ieee]) AC_REQUIRE([gl_FUNC_FMODF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmodf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006177�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmodf.m4 serial 11 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMODF], [ m4_divert_text([DEFAULTS], [gl_fmodf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FMOD]) dnl Persuade glibc <math.h> to declare fmodf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether fmodf() exists. Assume that fmodf(), if it exists, is dnl defined in the same library as fmod(). save_LIBS="$LIBS" LIBS="$LIBS $FMOD_LIBM" AC_CHECK_FUNCS([fmodf]) LIBS="$save_LIBS" if test $ac_cv_func_fmodf = yes; then FMODF_LIBM="$FMOD_LIBM" m4_ifdef([gl_FUNC_FMODF_IEEE], [ if test $gl_fmodf_required = ieee && test $REPLACE_FMODF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether fmodf works according to ISO C 99 with IEC 60559], [gl_cv_func_fmodf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FMODF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x, float y) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_fmodf) (float, float) = argc ? fmodf : dummy; float f; /* Test fmodf(...,0.0f). This test fails on OSF/1 5.1. */ f = my_fmodf (2.0f, 0.0f); if (numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_fmodf_ieee=yes], [gl_cv_func_fmodf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_fmodf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fmodf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_fmodf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fmodf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_fmodf_ieee" in *yes) ;; *) REPLACE_FMODF=1 ;; esac fi ]) else HAVE_FMODF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_fmodf, not fmodf. AC_CHECK_DECLS([fmodf], [REPLACE_FMODF=1], , [[#include <math.h>]]) fi if test $HAVE_FMODF = 0 || test $REPLACE_FMODF = 1; then dnl Find libraries needed to link lib/fmodf.c. FMODF_LIBM="$FMOD_LIBM" fi AC_SUBST([FMODF_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmodl-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmodl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in fmodl.m4 and not inlined in the dnl module description), so that gl_FUNC_FMODL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_FMODL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_fmodl_required=ieee]) AC_REQUIRE([gl_FUNC_FMODL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fmodl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011473�14110572173�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmodl.m4 serial 11 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FMODL], [ m4_divert_text([DEFAULTS], [gl_fmodl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_FMOD]) dnl Persuade glibc <math.h> to declare fmodl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether fmodl() is declared. dnl AIX 5.1 has fmodl() in libc but doesn't declare it in <math.h>, and the dnl function produces NaN results for finite values. AC_CHECK_DECL([fmodl], [ac_cv_have_decl_fmodl=yes], [ac_cv_have_decl_fmodl=no], [[#include <math.h>]]) dnl Test whether fmodl() exists. Assume that fmodl(), if it exists, is dnl defined in the same library as fmod(). save_LIBS="$LIBS" LIBS="$LIBS $FMOD_LIBM" AC_CHECK_FUNCS([fmodl]) LIBS="$save_LIBS" if test $ac_cv_func_fmodl = yes; then FMODL_LIBM="$FMOD_LIBM" if test $ac_cv_have_decl_fmodl = no; then REPLACE_FMODL=1 fi m4_ifdef([gl_FUNC_FMODL_IEEE], [ if test $gl_fmodl_required = ieee && test $REPLACE_FMODL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether fmodl works according to ISO C 99 with IEC 60559], [gl_cv_func_fmodl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FMODL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (long double x, long double y) { return x == y; } static long double dummy (long double x, long double y) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_fmodl) (long double, long double) = argc ? fmodl : dummy; long double f; /* Test fmodl(...,0.0L). This test fails on OSF/1 5.1. */ f = my_fmodl (2.0L, 0.0L); if (numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_fmodl_ieee=yes], [gl_cv_func_fmodl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_fmodl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fmodl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_fmodl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fmodl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_fmodl_ieee" in *yes) ;; *) REPLACE_FMODL=1 ;; esac fi ]) else HAVE_FMODL=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_fmodl, not fmodl. AC_CHECK_DECLS([fmodl], [REPLACE_FMODL=1], , [[#include <math.h>]]) fi if test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; then dnl Find libraries needed to link lib/fmodl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then FMODL_LIBM="$FMOD_LIBM" else AC_REQUIRE([gl_FUNC_FABSL]) AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_TRUNCL]) AC_REQUIRE([gl_FUNC_LDEXPL]) AC_REQUIRE([gl_FUNC_ISNANL]) FMODL_LIBM= dnl Append $FABSL_LIBM to FMODL_LIBM, avoiding gratuitous duplicates. case " $FMODL_LIBM " in *" $FABSL_LIBM "*) ;; *) FMODL_LIBM="$FMODL_LIBM $FABSL_LIBM" ;; esac dnl Append $FREXPL_LIBM to FMODL_LIBM, avoiding gratuitous duplicates. case " $FMODL_LIBM " in *" $FREXPL_LIBM "*) ;; *) FMODL_LIBM="$FMODL_LIBM $FREXPL_LIBM" ;; esac dnl Append $TRUNCL_LIBM to FMODL_LIBM, avoiding gratuitous duplicates. case " $FMODL_LIBM " in *" $TRUNCL_LIBM "*) ;; *) FMODL_LIBM="$FMODL_LIBM $TRUNCL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to FMODL_LIBM, avoiding gratuitous duplicates. case " $FMODL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) FMODL_LIBM="$FMODL_LIBM $LDEXPL_LIBM" ;; esac dnl Append $ISNANL_LIBM to FMODL_LIBM, avoiding gratuitous duplicates. case " $FMODL_LIBM " in *" $ISNANL_LIBM "*) ;; *) FMODL_LIBM="$FMODL_LIBM $ISNANL_LIBM" ;; esac fi fi AC_SUBST([FMODL_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fnmatch.m4���������������������������������������������������������������0000664�0000000�0000000�00000013174�14110572173�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for fnmatch - serial 15. -*- coding: utf-8 -*- # Copyright (C) 2000-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Autoconf defines AC_FUNC_FNMATCH, but that is obsolescent. # New applications should use the macros below instead. # Request a POSIX compliant fnmatch function. AC_DEFUN([gl_FUNC_FNMATCH_POSIX], [ m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX]) AC_REQUIRE([gl_FNMATCH_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_fnmatch_required_lowercase=` echo $gl_fnmatch_required | LC_ALL=C tr '[[A-Z]]' '[[a-z]]' ` AC_CHECK_FUNCS_ONCE([fnmatch]) if test $ac_cv_func_fnmatch = no; then HAVE_FNMATCH=0 else gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch], [$gl_fnmatch_cache_var], [dnl Some versions of Solaris, SCO, and the GNU C Library dnl have a broken or incompatible fnmatch. dnl So we run a test program. If we are cross-compiling, take no chance. dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this dnl test. if test $gl_fnmatch_required = GNU; then gl_fnmatch_gnu_start= gl_fnmatch_gnu_end= else gl_fnmatch_gnu_start='#if 0' gl_fnmatch_gnu_end='#endif' fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fnmatch.h> static int y (char const *pattern, char const *string, int flags) { return fnmatch (pattern, string, flags) == 0; } static int n (char const *pattern, char const *string, int flags) { return fnmatch (pattern, string, flags) == FNM_NOMATCH; } ]], [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; static char const A_1[] = { 'A' - 1, 0 }; static char const A01[] = { 'A' + 1, 0 }; static char const a_1[] = { 'a' - 1, 0 }; static char const a01[] = { 'a' + 1, 0 }; static char const bs_1[] = { '\\\\' - 1, 0 }; static char const bs01[] = { '\\\\' + 1, 0 }; int result = 0; if (!n ("a*", "", 0)) return 1; if (!y ("a*", "abc", 0)) return 1; if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ return 1; if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) return 2; if (!y ("a\\\\bc", "abc", 0)) return 3; if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) return 3; if (!y ("*x", ".x", 0)) return 4; if (!n ("*x", ".x", FNM_PERIOD)) return 4; if (!y (Apat, "\\\\", 0)) return 5; if (!y (Apat, "A", 0)) return 5; if (!y (apat, "\\\\", 0)) return 5; if (!y (apat, "a", 0)) return 5; if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) return 5; if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) return 5; if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) return 5; if (!(y (apat, a01, 0) == ('a' < '\\\\'))) return 5; if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) return 5; if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) return 5; if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) return 5; if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) return 5; $gl_fnmatch_gnu_start if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) result |= 8; if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) result |= 16; if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) result |= 32; if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) result |= 64; if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) result |= 64; if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) result |= 64; $gl_fnmatch_gnu_end return result; ]])], [eval "$gl_fnmatch_cache_var=yes"], [eval "$gl_fnmatch_cache_var=no"], [case "$host_os" in # Guess yes on musl systems. *-musl*) eval "$gl_fnmatch_cache_var=\"guessing yes\"" ;; # Guess no otherwise, even on glibc systems. *) eval "$gl_fnmatch_cache_var=\"guessing no\"" ;; esac ]) ]) eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" case "$gl_fnmatch_result" in *yes) ;; *) REPLACE_FNMATCH=1 ;; esac fi if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then gl_REPLACE_FNMATCH_H fi ]) # Request a POSIX compliant fnmatch function with GNU extensions. AC_DEFUN([gl_FUNC_FNMATCH_GNU], [ m4_divert_text([INIT_PREPARE], [gl_fnmatch_required=GNU]) AC_REQUIRE([gl_FUNC_FNMATCH_POSIX]) ]) AC_DEFUN([gl_PREREQ_FNMATCH], [ dnl Prerequisites of lib/fnmatch.c. AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsrtowcs]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fnmatch_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000006027�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fnmatch_h.m4 serial 7 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN_ONCE([gl_FNMATCH_H], [ AC_REQUIRE([gl_FNMATCH_H_DEFAULTS]) m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) AC_CHECK_HEADERS_ONCE([fnmatch.h]) gl_CHECK_NEXT_HEADERS([fnmatch.h]) dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc. dnl This is only needed if gl_fnmatch_required = GNU. It would be possible dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) if test $ac_cv_header_fnmatch_h = yes; then HAVE_FNMATCH_H=1 else HAVE_FNMATCH_H=0 fi AC_SUBST([HAVE_FNMATCH_H]) m4_ifdef([gl_POSIXCHECK], [FNMATCH_H=fnmatch.h], [FNMATCH_H='' if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then dnl Override <fnmatch.h> always, to support the C++ GNULIB_NAMESPACE. FNMATCH_H=fnmatch.h else if test $ac_cv_header_fnmatch_h != yes; then dnl Provide a substitute <fnmatch.h> file. FNMATCH_H=fnmatch.h fi fi ]) AC_SUBST([FNMATCH_H]) AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <fnmatch.h> ]], [fnmatch]) ]) dnl Unconditionally enables the replacement of <fnmatch.h>. AC_DEFUN([gl_REPLACE_FNMATCH_H], [ gl_FNMATCH_H_REQUIRE_DEFAULTS FNMATCH_H='fnmatch.h' AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) ]) # gl_FNMATCH_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_FNMATCH_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_FNMATCH_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_FNMATCH_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FNMATCH_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FNMATCH]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_FNMATCH_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_FNMATCH_H_DEFAULTS]) ]) AC_DEFUN([gl_FNMATCH_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_FNMATCH=1; AC_SUBST([HAVE_FNMATCH]) REPLACE_FNMATCH=0; AC_SUBST([REPLACE_FNMATCH]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fopen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007601�14110572173�0016174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fopen.m4 serial 12 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | pw*) dnl Replace fopen, for handling of "/dev/null". REPLACE_FOPEN=1 dnl fopen on mingw also has the trailing slash bug. gl_cv_func_fopen_slash="guessing no" ;; *) dnl fopen("foo/", "w") should not create a file when the file name has a dnl trailing slash. AC_CACHE_CHECK([whether fopen recognizes a trailing slash], [gl_cv_func_fopen_slash], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> int main () { FILE *fp = fopen ("conftest.sl/", "w"); int result = (fp != NULL); if (fp != NULL) fclose (fp); return result; }]])], [gl_cv_func_fopen_slash=yes], [gl_cv_func_fopen_slash=no], [ changequote(,)dnl case "$host_os" in aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_fopen_slash="guessing no" ;; *) gl_cv_func_fopen_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl ]) ;; esac case "$gl_cv_func_fopen_slash" in *no) AC_DEFINE([FOPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if fopen() fails to recognize a trailing slash.]) REPLACE_FOPEN=1 ;; esac ]) AC_DEFUN([gl_FUNC_FOPEN_GNU], [ AC_REQUIRE([gl_FUNC_FOPEN]) AC_CACHE_CHECK([whether fopen supports the mode character 'x'], [gl_cv_func_fopen_mode_x], [rm -f conftest.x AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> int main () { FILE *fp; fp = fopen ("conftest.x", "w"); fclose (fp); fp = fopen ("conftest.x", "wx"); if (fp != NULL) /* 'x' ignored */ return 1; else if (errno == EEXIST) return 0; else /* 'x' rejected */ return 2; }]])], [gl_cv_func_fopen_mode_x=yes], [gl_cv_func_fopen_mode_x=no], [case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_x="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_x="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.x ]) AC_CACHE_CHECK([whether fopen supports the mode character 'e'], [gl_cv_func_fopen_mode_e], [echo foo > conftest.x AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> #include <fcntl.h> ]GL_MDA_DEFINES[ int main () { FILE *fp = fopen ("conftest.x", "re"); if (fp != NULL) { if (fcntl (fileno (fp), F_GETFD) & FD_CLOEXEC) return 0; else /* 'e' ignored */ return 1; } else /* 'e' rejected */ return 2; }]])], [gl_cv_func_fopen_mode_e=yes], [gl_cv_func_fopen_mode_e=no], [case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_e="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_fopen_mode_e="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_e="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.x ]) case "$gl_cv_func_fopen_mode_x" in *no) REPLACE_FOPEN=1 ;; esac case "$gl_cv_func_fopen_mode_e" in *no) REPLACE_FOPEN=1 ;; esac ]) # Prerequisites of lib/fopen.c. AC_DEFUN([gl_PREREQ_FOPEN], [:]) �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fpending.m4��������������������������������������������������������������0000664�0000000�0000000�00000002174�14110572173�0016657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 23 # Copyright (C) 2000-2001, 2004-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering dnl Using code from emacs, based on suggestions from Paul Eggert dnl and Ulrich Drepper. dnl Find out how to determine the number of pending output bytes on a stream. dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems, dnl we have to grub around in the (possibly opaque) FILE struct. AC_DEFUN([gl_FUNC_FPENDING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) fp_headers=' #include <stdio.h> #if HAVE_STDIO_EXT_H # include <stdio_ext.h> #endif ' AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$fp_headers]], [[return ! __fpending (stdin);]])], [gl_cv_func___fpending=yes], [gl_cv_func___fpending=no]) ]) if test $gl_cv_func___fpending = yes; then AC_CHECK_DECLS([__fpending], [], [], [$fp_headers]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fpieee.m4����������������������������������������������������������������0000664�0000000�0000000�00000004340�14110572173�0016317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpieee.m4 serial 2 -*- coding: utf-8 -*- dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl IEEE 754 standardized three items: dnl - The formats of single-float and double-float - nowadays commonly dnl available as 'float' and 'double' in C and C++. dnl No autoconf test needed. dnl - The overflow and division by zero behaviour: The result are values dnl '±Inf' and 'NaN', rather than exceptions as it was before. dnl This file provides an autoconf macro for ensuring this behaviour of dnl floating-point operations. dnl - A set of conditions (overflow, underflow, inexact, etc.) which can dnl be configured to trigger an exception. dnl This cannot be done in a portable way: it depends on the compiler, dnl libc, kernel, and CPU. No autoconf macro is provided for this. dnl Ensure non-trapping behaviour of floating-point overflow and dnl floating-point division by zero. dnl (For integer overflow, see gcc's -ftrapv option; for integer division by dnl zero, see the autoconf macro in intdiv0.m4.) AC_DEFUN([gl_FP_IEEE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010430�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_fprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # fprintf exists and is # already POSIX compliant. gl_cv_func_fprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_fprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_FPRINTF fi ]) AC_DEFUN([gl_REPLACE_FPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([fprintf]) REPLACE_FPRINTF=1 AC_DEFINE([REPLACE_FPRINTF_POSIX], [1], [Define if fprintf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_FPRINTF ]) AC_DEFUN([gl_PREREQ_FPRINTF], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fpurge.m4����������������������������������������������������������������0000664�0000000�0000000�00000004752�14110572173�0016361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpurge.m4 serial 12 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FPURGE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([fpurge]) AC_CHECK_FUNCS_ONCE([__fpurge]) AC_CHECK_DECLS([fpurge], , , [[#include <stdio.h>]]) if test "x$ac_cv_func_fpurge" = xyes; then HAVE_FPURGE=1 # Detect BSD bug. Only cygwin 1.7 and musl are known to be immune. AC_CACHE_CHECK([whether fpurge works], [gl_cv_func_fpurge_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> ]], [[FILE *f = fopen ("conftest.txt", "w+"); if (!f) return 1; if (fputc ('a', f) != 'a') { fclose (f); return 2; } rewind (f); if (fgetc (f) != 'a') { fclose (f); return 3; } if (fgetc (f) != EOF) { fclose (f); return 4; } if (fpurge (f) != 0) { fclose (f); return 5; } if (putc ('b', f) != 'b') { fclose (f); return 6; } if (fclose (f) != 0) return 7; if ((f = fopen ("conftest.txt", "r")) == NULL) return 8; if (fgetc (f) != 'a') { fclose (f); return 9; } if (fgetc (f) != 'b') { fclose (f); return 10; } if (fgetc (f) != EOF) { fclose (f); return 11; } if (fclose (f) != 0) return 12; if (remove ("conftest.txt") != 0) return 13; return 0; ]])], [gl_cv_func_fpurge_works=yes], [gl_cv_func_fpurge_works=no], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_fpurge_works="guessing yes" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_fpurge_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_fpurge_works" in *yes) ;; *) REPLACE_FPURGE=1 ;; esac else HAVE_FPURGE=0 fi if test "x$ac_cv_have_decl_fpurge" = xno; then HAVE_DECL_FPURGE=0 fi ]) ����������������������gnulib-20210822~d383792/m4/freadable.m4�������������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freadable.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREADABLE], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__freadable]) ]) ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/freadahead.m4������������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0017125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freadahead.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREADAHEAD], [ AC_CHECK_FUNCS_ONCE([__freadahead]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/freading.m4��������������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0016635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freading.m4 serial 2 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREADING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__freading]) ]) ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/freadptr.m4��������������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freadptr.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREADPTR], [ AC_CHECK_FUNCS_ONCE([__freadptr]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/freadseek.m4�������������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freadseek.m4 serial 2 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREADSEEK], [ AC_CHECK_FUNCS_ONCE([__freadptrinc]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/free.m4������������������������������������������������������������������0000664�0000000�0000000�00000003710�14110572173�0016003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# free.m4 serial 6 # Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Bruno Haible. AC_DEFUN([gl_FUNC_FREE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl In the next release of POSIX, free must preserve errno. dnl https://www.austingroupbugs.net/view.php?id=385 dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924 dnl So far, we know of three platforms that do this: dnl * glibc >= 2.33, thanks to the fix for this bug: dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924> dnl * OpenBSD >= 4.5, thanks to this commit: dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h> dnl * Solaris, because its malloc() implementation is based on brk(), dnl not mmap(); hence its free() implementation makes no system calls. dnl For other platforms, you can only be sure if they state it in their dnl documentation, or by code inspection of the free() implementation in libc. AC_CACHE_CHECK([whether free is known to preserve errno], [gl_cv_func_free_preserves_errno], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ]])], [gl_cv_func_free_preserves_errno=yes], [gl_cv_func_free_preserves_errno=no]) ]) case $gl_cv_func_free_preserves_errno in *yes) AC_DEFINE([HAVE_FREE_POSIX], [1], [Define if the 'free' function is guaranteed to preserve errno.]) ;; *) REPLACE_FREE=1 ;; esac ]) # Prerequisites of lib/free.c. AC_DEFUN([gl_PREREQ_FREE], [:]) ��������������������������������������������������������gnulib-20210822~d383792/m4/freopen.m4���������������������������������������������������������������0000664�0000000�0000000�00000002566�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freopen.m4 serial 7 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | pw* | os2*) REPLACE_FREOPEN=1 ;; *) AC_CACHE_CHECK([whether freopen works on closed fds], [gl_cv_func_freopen_works_on_closed], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> #include <unistd.h> ]GL_MDA_DEFINES], [[close (0); return !(freopen ("/dev/null", "r", stdin) && getchar () == EOF && !ferror (stdin) && feof (stdin));]])], [gl_cv_func_freopen_works_on_closed=yes], [gl_cv_func_freopen_works_on_closed=no], [case $host_os in *gnu*) gl_cv_func_freopen_works_on_closed="guessing no" ;; *) gl_cv_func_freopen_works_on_closed="guessing yes";; esac])]) case $gl_cv_func_freopen_works_on_closed in *no) REPLACE_FREOPEN=1;; esac esac ]) # Prerequisites of lib/freopen.c. AC_DEFUN([gl_PREREQ_FREOPEN], [:]) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/frexp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000012071�14110572173�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexp.m4 serial 16 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREXP], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) FREXP_LIBM= if test $gl_cv_func_frexp_no_libm = no; then AC_CACHE_CHECK([whether frexp() can be used with libm], [gl_cv_func_frexp_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x;]], [[int e; return frexp (x, &e) > 0;]])], [gl_cv_func_frexp_in_libm=yes], [gl_cv_func_frexp_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_frexp_in_libm = yes; then FREXP_LIBM=-lm fi fi if test $gl_cv_func_frexp_no_libm = yes \ || test $gl_cv_func_frexp_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FREXP_LIBM" gl_FUNC_FREXP_WORKS LIBS="$save_LIBS" case "$gl_cv_func_frexp_works" in *yes) gl_func_frexp=yes ;; *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; esac else gl_func_frexp=no fi if test $gl_func_frexp = yes; then AC_DEFINE([HAVE_FREXP], [1], [Define if the frexp() function is available and works.]) fi AC_SUBST([FREXP_LIBM]) ]) AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) if test $gl_cv_func_frexp_no_libm = yes; then gl_FUNC_FREXP_WORKS case "$gl_cv_func_frexp_works" in *yes) gl_func_frexp_no_libm=yes ;; *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; esac else gl_func_frexp_no_libm=no dnl Set REPLACE_FREXP here because the system may have frexp in libm. REPLACE_FREXP=1 fi if test $gl_func_frexp_no_libm = yes; then AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], [Define if the frexp() function is available in libc.]) fi ]) dnl Test whether frexp() can be used without linking with libm. dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_FREXP_NO_LIBM], [ AC_CACHE_CHECK([whether frexp() can be used without linking with libm], [gl_cv_func_frexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x;]], [[int e; return frexp (x, &e) > 0;]])], [gl_cv_func_frexp_no_libm=yes], [gl_cv_func_frexp_no_libm=no]) ]) ]) dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw). AC_DEFUN([gl_FUNC_FREXP_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([alarm]) AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> #include <string.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zero (void) { return -DBL_MIN * DBL_MIN; } # define minus_zero compute_minus_zero () #else double minus_zero = -0.0; #endif int main() { int result = 0; int i; volatile double x; double zero = 0.0; #if HAVE_DECL_ALARM /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite number. Let the test fail in this case. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif /* Test on denormalized numbers. */ for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; if (x > 0.0) { int exp; double y = frexp (x, &exp); /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. On NetBSD: y = 0.75. Correct: y = 0.5. */ if (y != 0.5) result |= 1; } /* Test on infinite numbers. */ x = 1.0 / zero; { int exp; double y = frexp (x, &exp); if (y != x) result |= 2; } /* Test on negative zero. */ x = minus_zero; { int exp; double y = frexp (x, &exp); if (memcmp (&y, &x, sizeof x)) result |= 4; } return result; }]])], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], [case "$host_os" in netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; mingw*) # Guess yes with MSVC, no with mingw. AC_EGREP_CPP([Good], [ #ifdef _MSC_VER Good #endif ], [gl_cv_func_frexp_works="guessing yes"], [gl_cv_func_frexp_works="guessing no"]) ;; *) gl_cv_func_frexp_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/frexpf.m4����������������������������������������������������������������0000664�0000000�0000000�00000005605�14110572173�0016361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexpf.m4 serial 6 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREXPF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FREXP]) dnl Persuade glibc <math.h> to declare frexpf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether frexpf() exists. We cannot assume that frexpf(), if it dnl exists, is defined in the same library as frexp(). This is not the case dnl on NetBSD, OpenBSD. gl_MATHFUNC([frexpf], [float], [(float, int *)]) if test $gl_cv_func_frexpf_no_libm = yes \ || test $gl_cv_func_frexpf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FREXPF_LIBM" gl_FUNC_FREXPF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_frexpf_works" in *yes) ;; *) REPLACE_FREXPF=1 ;; esac else HAVE_FREXPF=0 fi if test $HAVE_FREXPF = 0 || test $REPLACE_FREXPF = 1; then FREXPF_LIBM="$FREXP_LIBM" fi AC_SUBST([FREXPF_LIBM]) ]) dnl Test whether frexpf() works also on infinite numbers (this fails e.g. on dnl IRIX 6.5 and mingw) and on negative zero (this fails e.g. on mingw). AC_DEFUN([gl_FUNC_FREXPF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether frexpf works], [gl_cv_func_frexpf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> #include <string.h> /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -FLT_MIN * FLT_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static float compute_minus_zero (void) { return -FLT_MIN * FLT_MIN; } # define minus_zero compute_minus_zero () #else float minus_zero = -0.0f; #endif int main() { int result = 0; volatile float x; float zero = 0.0f; /* Test on infinite numbers. */ x = 1.0f / zero; { int exp; float y = frexpf (x, &exp); if (y != x) result |= 1; } /* Test on negative zero. */ x = minus_zero; { int exp; float y = frexpf (x, &exp); if (memcmp (&y, &x, sizeof x)) result |= 2; } return result; }]])], [gl_cv_func_frexpf_works=yes], [gl_cv_func_frexpf_works=no], [case "$host_os" in irix*) gl_cv_func_frexpf_works="guessing no" ;; mingw*) # Guess yes with MSVC, no with mingw. AC_EGREP_CPP([Good], [ #ifdef _MSC_VER Good #endif ], [gl_cv_func_frexpf_works="guessing yes"], [gl_cv_func_frexpf_works="guessing no"]) ;; *) gl_cv_func_frexpf_works="guessing yes" ;; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/frexpl.m4����������������������������������������������������������������0000664�0000000�0000000�00000015735�14110572173�0016374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexpl.m4 serial 22 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare frexpl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) FREXPL_LIBM= if test $HAVE_DECL_FREXPL = 1; then gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = no; then AC_CACHE_CHECK([whether frexpl() can be used with libm], [gl_cv_func_frexpl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[int e; return frexpl (x, &e) > 0;]])], [gl_cv_func_frexpl_in_libm=yes], [gl_cv_func_frexpl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_frexpl_in_libm = yes; then FREXPL_LIBM=-lm fi fi if test $gl_cv_func_frexpl_no_libm = yes \ || test $gl_cv_func_frexpl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FREXPL_LIBM" gl_FUNC_FREXPL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl=yes ;; *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl=no fi if test $gl_func_frexpl = yes; then AC_DEFINE([HAVE_FREXPL], [1], [Define if the frexpl() function is available.]) fi fi if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then dnl Find libraries needed to link lib/frexpl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_FREXP]) FREXPL_LIBM="$FREXP_LIBM" else FREXPL_LIBM= fi fi AC_SUBST([FREXPL_LIBM]) ]) AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) if test $HAVE_DECL_FREXPL = 1; then gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = yes; then gl_FUNC_FREXPL_WORKS case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], [Define if the frexpl() function is available in libc.]) fi fi ]) dnl Test whether frexpl() can be used without linking with libm. dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM], [ AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], [gl_cv_func_frexpl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[int e; return frexpl (x, &e) > 0;]])], [gl_cv_func_frexpl_no_libm=yes], [gl_cv_func_frexpl_no_libm=no]) ]) ]) dnl Test whether frexpl() works on finite numbers (this fails on dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this dnl fails e.g. on IRIX 6.5 and mingw). AC_DEFUN([gl_FUNC_FREXPL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif extern #ifdef __cplusplus "C" #endif long double frexpl (long double, int *); long double zero = 0.0L; int main() { int result = 0; volatile long double x; /* Test on finite numbers that fails on AIX 5.1. */ x = 16.0L; { int exp = -9999; frexpl (x, &exp); if (exp != 5) result |= 1; } /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl function returns an invalid (incorrectly normalized) value: it returns y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } but the correct result is 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ x = 1.01L; { int exp = -9999; long double y = frexpl (x, &exp); if (!(exp == 1 && y == 0.505L)) result |= 2; } /* Test on large finite numbers. This fails on BeOS at i = 16322, while LDBL_MAX_EXP = 16384. In the loop end test, we test x against Infinity, rather than comparing i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ { int i; for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) { int exp = -9999; frexpl (x, &exp); if (exp != i) { result |= 4; break; } } } /* Test on denormalized numbers. */ { int i; for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) ; if (x > 0.0L) { int exp; long double y = frexpl (x, &exp); /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ if (exp != LDBL_MIN_EXP - 1) result |= 8; } } /* Test on infinite numbers. */ /* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */ x = 1.0L / zero; { int exp; long double y = frexpl (x, &exp); if (y != x) result |= 16; } return result; }]])], [gl_cv_func_frexpl_works=yes], [gl_cv_func_frexpl_works=no], [ changequote(,)dnl case "$host_os" in aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) gl_cv_func_frexpl_works="guessing no";; *) gl_cv_func_frexpl_works="guessing yes";; esac changequote([,])dnl ]) ]) ]) �����������������������������������gnulib-20210822~d383792/m4/fseek.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001005�14110572173�0016152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseek.m4 serial 4 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSEEK], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FSEEKO]) dnl When fseeko needs fixes, fseek needs them too. if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then REPLACE_FSEEK=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fseeko.m4����������������������������������������������������������������0000664�0000000�0000000�00000004546�14110572173�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseeko.m4 serial 20 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSEEKO], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) AC_REQUIRE([gl_SYS_TYPES_H]) AC_REQUIRE([AC_PROG_CC]) dnl Persuade glibc <stdio.h> to declare fseeko(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> ]], [[fseeko (stdin, 0, 0);]])], [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) ]) AC_CHECK_DECLS_ONCE([fseeko]) if test $ac_cv_have_decl_fseeko = no; then HAVE_DECL_FSEEKO=0 fi if test $gl_cv_func_fseeko = no; then HAVE_FSEEKO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FSEEKO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FSEEKO=1 fi m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ gl_FUNC_FFLUSH_STDIN case "$gl_cv_func_fflush_stdin" in *yes) ;; *) REPLACE_FSEEKO=1 ;; esac ]) fi ]) dnl Code shared by fseeko and ftello. Determine if large files are supported, dnl but stdin does not start as a large file by default. AC_DEFUN([gl_STDIN_LARGE_OFFSET], [ AC_CACHE_CHECK([whether stdin defaults to large file offsets], [gl_cv_var_stdin_large_offset], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[#if defined __SL64 && defined __SCLE /* cygwin */ /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and it is easier to do a version check than building a runtime test. */ # include <cygwin/version.h> # if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) choke me # endif #endif]])], [gl_cv_var_stdin_large_offset=yes], [gl_cv_var_stdin_large_offset=no])]) ]) # Prerequisites of lib/fseeko.c. AC_DEFUN([gl_PREREQ_FSEEKO], [ dnl Native Windows has the function _fseeki64. mingw hides it in some dnl circumstances, but mingw64 makes it usable again. AC_CHECK_FUNCS([_fseeki64]) if test $ac_cv_func__fseeki64 = yes; then AC_CHECK_DECLS([_fseeki64]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fseterr.m4���������������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseterr.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSETERR], [ AC_CHECK_FUNCS_ONCE([__fseterr]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fstat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002117�14110572173�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstat.m4 serial 8 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) case "$host_os" in mingw* | solaris*) dnl On MinGW, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. dnl Solaris stat can return a negative tv_nsec. REPLACE_FSTAT=1 ;; esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi ]) ]) # Prerequisites of lib/fstat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fstatat.m4���������������������������������������������������������������0000664�0000000�0000000�00000003752�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstatat.m4 serial 4 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # If we have the fstatat function, and it has the bug (in AIX 7.1) # that it does not fill in st_size correctly, use the replacement function. AC_DEFUN([gl_FUNC_FSTATAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fstatat]) if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else dnl Test for an AIX 7.1 bug; see dnl <https://lists.gnu.org/r/bug-tar/2011-09/msg00015.html>. AC_CACHE_CHECK([whether fstatat (..., 0) works], [gl_cv_func_fstatat_zero_flag], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <fcntl.h> #include <sys/stat.h> int main (void) { struct stat a; return fstatat (AT_FDCWD, ".", &a, 0) != 0; } ]])], [gl_cv_func_fstatat_zero_flag=yes], [gl_cv_func_fstatat_zero_flag=no], [case "$host_os" in aix*) gl_cv_func_fstatat_zero_flag="guessing no";; *) gl_cv_func_fstatat_zero_flag="guessing yes";; esac ]) ]) case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; *) REPLACE_FSTATAT=1 ;; esac case $host_os in solaris*) REPLACE_FSTATAT=1 ;; esac case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in 1,*yes) AC_DEFINE([HAVE_WORKING_FSTATAT_ZERO_FLAG], [1], [Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1.]) ;; esac fi ]) ����������������������gnulib-20210822~d383792/m4/fstypename.m4������������������������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl From Jim Meyering. dnl dnl See if struct statfs has the f_fstypename member. dnl If so, define HAVE_STRUCT_STATFS_F_FSTYPENAME. dnl # Copyright (C) 1998-1999, 2001, 2004, 2006, 2009-2021 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FSTYPENAME], [ AC_CHECK_MEMBERS([struct statfs.f_fstypename],,, [ #include <sys/types.h> #include <sys/param.h> #include <sys/mount.h> ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fsusage.m4���������������������������������������������������������������0000664�0000000�0000000�00000023412�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 35 # Obtaining file system usage information. # Copyright (C) 1997-1998, 2000-2001, 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FSUSAGE], [ AC_CHECK_HEADERS_ONCE([sys/param.h]) AC_CHECK_HEADERS_ONCE([sys/vfs.h sys/fs_types.h]) AC_CHECK_HEADERS([sys/mount.h], [], [], [AC_INCLUDES_DEFAULT [#if HAVE_SYS_PARAM_H #include <sys/param.h> #endif]]) gl_FILE_SYSTEM_USAGE([gl_cv_fs_space=yes], [gl_cv_fs_space=no]) ]) # Try to determine how a program can obtain file system usage information. # If successful, define the appropriate symbol (see fsusage.c) and # execute ACTION-IF-FOUND. Otherwise, execute ACTION-IF-NOT-FOUND. # # gl_FILE_SYSTEM_USAGE([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) AC_DEFUN([gl_FILE_SYSTEM_USAGE], [ dnl Enable large-file support. This has the effect of changing the size dnl of field f_blocks in 'struct statvfs' from 32 bit to 64 bit on dnl glibc/Hurd, HP-UX 11, Solaris (32-bit mode). It also changes the size dnl of field f_blocks in 'struct statfs' from 32 bit to 64 bit on dnl Mac OS X >= 10.5 (32-bit mode). AC_REQUIRE([AC_SYS_LARGEFILE]) ac_fsusage_space=no # Perform only the link test since it seems there are no variants of the # statvfs function. This check is more than just AC_CHECK_FUNCS([statvfs]) # because that got a false positive on SCO OSR5. Adding the declaration # of a 'struct statvfs' causes this test to fail (as it should) on such # systems. That system is reported to work fine with STAT_STATFS4 which # is what it gets when this test fails. if test $ac_fsusage_space = no; then # glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0, # OpenBSD >= 4.4, AIX, HP-UX, IRIX, Solaris, Cygwin, Interix, BeOS. AC_CACHE_CHECK([for statvfs function (SVR4)], [fu_cv_sys_stat_statvfs], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #ifdef __osf__ "Do not use Tru64's statvfs implementation" #endif #include <sys/statvfs.h> struct statvfs fsd; #if defined __APPLE__ && defined __MACH__ #include <limits.h> /* On Mac OS X >= 10.5, f_blocks in 'struct statvfs' is a 32-bit quantity; that commonly limits file systems to 4 TiB. Whereas f_blocks in 'struct statfs' is a 64-bit type, thanks to the large-file support that was enabled above. In this case, don't use statvfs(); use statfs() instead. */ int check_f_blocks_size[sizeof fsd.f_blocks * CHAR_BIT <= 32 ? -1 : 1]; #endif ]], [[statvfs (0, &fsd);]])], [fu_cv_sys_stat_statvfs=yes], [fu_cv_sys_stat_statvfs=no]) ]) if test $fu_cv_sys_stat_statvfs = yes; then ac_fsusage_space=yes # AIX >= 5.2 has statvfs64 that has a wider f_blocks field than statvfs. # glibc, HP-UX, IRIX, Solaris have statvfs64 as well, but on these systems # statvfs with large-file support is already equivalent to statvfs64. AC_CACHE_CHECK([whether to use statvfs64], [fu_cv_sys_stat_statvfs64], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/statvfs.h> struct statvfs64 fsd; int check_f_blocks_larger_in_statvfs64 [sizeof (((struct statvfs64 *) 0)->f_blocks) > sizeof (((struct statvfs *) 0)->f_blocks) ? 1 : -1]; ]], [[statvfs64 (0, &fsd);]])], [fu_cv_sys_stat_statvfs64=yes], [fu_cv_sys_stat_statvfs64=no]) ]) if test $fu_cv_sys_stat_statvfs64 = yes; then AC_DEFINE([STAT_STATVFS64], [1], [Define if statvfs64 should be preferred over statvfs.]) else AC_DEFINE([STAT_STATVFS], [1], [Define if there is a function named statvfs. (SVR4)]) fi fi fi # Check for this unconditionally so we have a # good fallback on glibc/Linux > 2.6 < 2.6.36 AC_CACHE_CHECK([for two-argument statfs with statfs.f_frsize member], [fu_cv_sys_stat_statfs2_frsize], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif #ifdef HAVE_SYS_MOUNT_H #include <sys/mount.h> #endif #ifdef HAVE_SYS_VFS_H #include <sys/vfs.h> #endif int main () { struct statfs fsd; fsd.f_frsize = 0; return statfs (".", &fsd) != 0; }]])], [fu_cv_sys_stat_statfs2_frsize=yes], [fu_cv_sys_stat_statfs2_frsize=no], [fu_cv_sys_stat_statfs2_frsize=no]) ]) if test $fu_cv_sys_stat_statfs2_frsize = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS2_FRSIZE], [1], [Define if statfs takes 2 args and struct statfs has a field named f_frsize. (glibc/Linux > 2.6)]) fi if test $ac_fsusage_space = no; then # DEC Alpha running OSF/1 AC_CACHE_CHECK([for 3-argument statfs function (DEC OSF/1)], [fu_cv_sys_stat_statfs3_osf1], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/param.h> #include <sys/types.h> #include <sys/mount.h> int main () { struct statfs fsd; fsd.f_fsize = 0; return statfs (".", &fsd, sizeof (struct statfs)) != 0; }]])], [fu_cv_sys_stat_statfs3_osf1=yes], [fu_cv_sys_stat_statfs3_osf1=no], [fu_cv_sys_stat_statfs3_osf1=no]) ]) if test $fu_cv_sys_stat_statfs3_osf1 = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS3_OSF1], [1], [Define if statfs takes 3 args. (DEC Alpha running OSF/1)]) fi fi if test $ac_fsusage_space = no; then # glibc/Linux, Mac OS X, FreeBSD < 5.0, NetBSD < 3.0, OpenBSD < 4.4. # (glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0, # OpenBSD >= 4.4, AIX, HP-UX, OSF/1, Cygwin already handled above.) # (On IRIX you need to include <sys/statfs.h>, not only <sys/mount.h> and # <sys/vfs.h>.) # (On Solaris, statfs has 4 arguments.) AC_CACHE_CHECK([for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)], [fu_cv_sys_stat_statfs2_bsize], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif #ifdef HAVE_SYS_MOUNT_H #include <sys/mount.h> #endif #ifdef HAVE_SYS_VFS_H #include <sys/vfs.h> #endif int main () { struct statfs fsd; fsd.f_bsize = 0; return statfs (".", &fsd) != 0; }]])], [fu_cv_sys_stat_statfs2_bsize=yes], [fu_cv_sys_stat_statfs2_bsize=no], [fu_cv_sys_stat_statfs2_bsize=no]) ]) if test $fu_cv_sys_stat_statfs2_bsize = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS2_BSIZE], [1], [Define if statfs takes 2 args and struct statfs has a field named f_bsize. (4.3BSD, SunOS 4, HP-UX)]) fi fi if test $ac_fsusage_space = no; then # SVR3 # (Solaris already handled above.) AC_CACHE_CHECK([for four-argument statfs (SVR3)], [fu_cv_sys_stat_statfs4], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/statfs.h> int main () { struct statfs fsd; return statfs (".", &fsd, sizeof fsd, 0) != 0; }]])], [fu_cv_sys_stat_statfs4=yes], [fu_cv_sys_stat_statfs4=no], [fu_cv_sys_stat_statfs4=no]) ]) if test $fu_cv_sys_stat_statfs4 = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS4], [1], [Define if statfs takes 4 args. (SVR3, old Irix)]) fi fi if test $ac_fsusage_space = no; then # 4.4BSD and older NetBSD # (OSF/1 already handled above.) # (On AIX, you need to include <sys/statfs.h>, not only <sys/mount.h>.) # (On Solaris, statfs has 4 arguments and 'struct statfs' is not declared in # <sys/mount.h>.) AC_CACHE_CHECK([for two-argument statfs with statfs.f_fsize member (4.4BSD and NetBSD)], [fu_cv_sys_stat_statfs2_fsize], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif #ifdef HAVE_SYS_MOUNT_H #include <sys/mount.h> #endif int main () { struct statfs fsd; fsd.f_fsize = 0; return statfs (".", &fsd) != 0; }]])], [fu_cv_sys_stat_statfs2_fsize=yes], [fu_cv_sys_stat_statfs2_fsize=no], [fu_cv_sys_stat_statfs2_fsize=no]) ]) if test $fu_cv_sys_stat_statfs2_fsize = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS2_FSIZE], [1], [Define if statfs takes 2 args and struct statfs has a field named f_fsize. (4.4BSD, NetBSD)]) fi fi AS_IF([test $ac_fsusage_space = yes], [$1], [$2]) ]) # Check for SunOS statfs brokenness wrt partitions 2GB and larger. # If <sys/vfs.h> exists and struct statfs has a member named f_spare, # enable the work-around code in fsusage.c. AC_DEFUN([gl_STATFS_TRUNCATES], [ AC_CACHE_CHECK([for statfs that truncates block counts], [fu_cv_sys_truncating_statfs], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #if !defined(sun) && !defined(__sun) choke -- this is a workaround for a Sun-specific problem #endif #include <sys/types.h> #include <sys/vfs.h> ]], [[struct statfs t; long c = *(t.f_spare); if (c) return 0; ]])], [fu_cv_sys_truncating_statfs=yes], [fu_cv_sys_truncating_statfs=no]) ]) if test $fu_cv_sys_truncating_statfs = yes; then AC_DEFINE([STATFS_TRUNCATES_BLOCK_COUNTS], [1], [Define if the block counts reported by statfs may be truncated to 2GB and the correct values may be stored in the f_spare array. (SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem. SunOS 4.1.1 seems not to be affected.)]) fi ]) # Prerequisites of lib/fsusage.c not done by gl_FILE_SYSTEM_USAGE. AC_DEFUN([gl_PREREQ_FSUSAGE_EXTRA], [ AC_CHECK_HEADERS([sys/fs/s5param.h sys/statfs.h]) gl_STATFS_TRUNCATES ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fsync.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000764�14110572173�0016212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fsync.m4 serial 2 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSYNC], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fsync]) if test $ac_cv_func_fsync = no; then HAVE_FSYNC=0 fi ]) # Prerequisites of lib/fsync.c. AC_DEFUN([gl_PREREQ_FSYNC], [:]) ������������gnulib-20210822~d383792/m4/ftell.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001005�14110572173�0016163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftell.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTELL], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FTELLO]) dnl When ftello needs fixes, ftell needs them too. if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then REPLACE_FTELL=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ftello.m4����������������������������������������������������������������0000664�0000000�0000000�00000010502�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftello.m4 serial 14 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTELLO], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) AC_REQUIRE([gl_SYS_TYPES_H]) dnl Persuade glibc <stdio.h> to declare ftello(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([ftello]) if test $ac_cv_have_decl_ftello = no; then HAVE_DECL_FTELLO=0 fi AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h>]], [[ftello (stdin);]])], [gl_cv_func_ftello=yes], [gl_cv_func_ftello=no]) ]) if test $gl_cv_func_ftello = no; then HAVE_FTELLO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FTELLO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FTELLO=1 fi if test $REPLACE_FTELLO = 0; then dnl Detect bug on Solaris. dnl ftell and ftello produce incorrect results after putc that followed a dnl getc call that reached EOF on Solaris. This is because the _IOREAD dnl flag does not get cleared in this case, even though _IOWRT gets set, dnl and ftell and ftello look whether the _IOREAD flag is set. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether ftello works], [gl_cv_func_ftello_works], [ dnl Initial guess, used when cross-compiling or when /dev/tty cannot dnl be opened. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_ftello_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ftello_works="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_ftello_works="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> #define TESTFILE "conftest.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) return 70; if (fwrite ("foogarsh", 1, 8, fp) < 8) { fclose (fp); return 71; } if (fclose (fp)) return 72; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) return 73; if (fseek (fp, -1, SEEK_END)) { fclose (fp); return 74; } if (!(getc (fp) == 'h')) { fclose (fp); return 1; } if (!(getc (fp) == EOF)) { fclose (fp); return 2; } if (!(ftell (fp) == 8)) { fclose (fp); return 3; } if (!(ftell (fp) == 8)) { fclose (fp); return 4; } if (!(putc ('!', fp) == '!')) { fclose (fp); return 5; } if (!(ftell (fp) == 9)) { fclose (fp); return 6; } if (!(fclose (fp) == 0)) return 7; fp = fopen (TESTFILE, "r"); if (fp == NULL) return 75; { char buf[10]; if (!(fread (buf, 1, 10, fp) == 9)) { fclose (fp); return 10; } if (!(memcmp (buf, "foogarsh!", 9) == 0)) { fclose (fp); return 11; } } if (!(fclose (fp) == 0)) return 12; /* The file's contents is now "foogarsh!". */ return 0; }]])], [gl_cv_func_ftello_works=yes], [gl_cv_func_ftello_works=no], [:]) ]) case "$gl_cv_func_ftello_works" in *yes) ;; *) REPLACE_FTELLO=1 AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1], [Define to 1 if the system's ftello function has the Solaris bug.]) ;; esac fi if test $REPLACE_FTELLO = 0; then dnl Detect bug on macOS >= 10.15. gl_FUNC_UNGETC_WORKS if test $gl_ftello_broken_after_ungetc = yes; then REPLACE_FTELLO=1 AC_DEFINE([FTELLO_BROKEN_AFTER_UNGETC], [1], [Define to 1 if the system's ftello function has the macOS bug.]) fi fi fi ]) # Prerequisites of lib/ftello.c. AC_DEFUN([gl_PREREQ_FTELLO], [ dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64 dnl makes it usable again. AC_CHECK_FUNCS([_ftelli64]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ftruncate.m4�������������������������������������������������������������0000664�0000000�0000000�00000002410�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 21 # See if we need to emulate a missing ftruncate function using _chsize. # Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTRUNCATE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([ftruncate]) if test $ac_cv_func_ftruncate = yes; then m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows, and Large File Support is requested. dnl The MSVCRT _chsize() function only accepts a 32-bit file size, dnl and the mingw64 ftruncate64() function is unreliable (it may dnl delete the file, see dnl <https://web.archive.org/web/20160425005423/http://mingw-w64.sourcearchive.com/documentation/2.0-1/ftruncate64_8c_source.html>). dnl Use gnulib's ftruncate() implementation instead. REPLACE_FTRUNCATE=1 ;; esac ], [ : ]) else HAVE_FTRUNCATE=0 fi ]) # Prerequisites of lib/ftruncate.c. AC_DEFUN([gl_PREREQ_FTRUNCATE], [ AC_CHECK_FUNCS([_chsize]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fts.m4�������������������������������������������������������������������0000664�0000000�0000000�00000003151�14110572173�0015655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 22 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTS], [ gl_FUNC_FTS_CORE ]) AC_DEFUN([gl_FUNC_FTS_CORE], [ dnl Prerequisites of lib/fts.c. gl_FUNC_OPENAT AC_CHECK_FUNCS_ONCE([fstatfs]) AC_CHECK_HEADERS_ONCE([sys/param.h sys/vfs.h])dnl if test "$ac_cv_func_fstatfs,$ac_cv_header_sys_vfs_h" = yes,yes; then AC_CHECK_MEMBERS([struct statfs.f_type], [], [], [[$ac_includes_default #include <sys/vfs.h> ]]) if test "$ac_cv_member_struct_statfs_f_type" = yes; then AC_CHECK_TYPES([__fsword_t], [], [], [[$ac_includes_default #include <sys/vfs.h> ]]) fi fi AC_CHECK_FUNC([fts_open]) if test $ac_cv_func_fts_open = yes; then dnl The system already has the symbols fts_open, etc. dnl Avoid conflicts between these symbols and ours at the linker level. AC_DEFINE([fts_open], [rpl_fts_open], [Define to the overridden function name]) AC_DEFINE([fts_close], [rpl_fts_close], [Define to the overridden function name]) AC_DEFINE([fts_read], [rpl_fts_read], [Define to the overridden function name]) AC_DEFINE([fts_set], [rpl_fts_set], [Define to the overridden function name]) AC_DEFINE([fts_children], [rpl_fts_children], [Define to the overridden function name]) AC_DEFINE([fts_cross_check], [rpl_fts_cross_check], [Define to the overridden function name]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/func.m4������������������������������������������������������������������0000664�0000000�0000000�00000001313�14110572173�0016012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# func.m4 serial 2 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Simon Josefsson AC_DEFUN([gl_FUNC], [ AC_CACHE_CHECK([whether __func__ is available], [gl_cv_var_func], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[const char *str = __func__;]])], [gl_cv_var_func=yes], [gl_cv_var_func=no])) if test "$gl_cv_var_func" != yes; then AC_DEFINE([__func__], ["<unknown function>"], [Define as a replacement for the ISO C99 __func__ variable.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/futimens.m4��������������������������������������������������������������0000664�0000000�0000000�00000004057�14110572173�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # See if we need to provide futimens replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_FUTIMENS], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([futimens]) if test $ac_cv_func_futimens = no; then HAVE_FUTIMENS=0 else AC_CACHE_CHECK([whether futimens works], [gl_cv_func_futimens_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include <errno.h> ]GL_MDA_DEFINES], [[struct timespec ts[2]; int fd = creat ("conftest.file", 0600); struct stat st; if (fd < 0) return 1; ts[0].tv_sec = 1; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 1; ts[1].tv_nsec = UTIME_NOW; errno = 0; if (futimens (AT_FDCWD, NULL) == 0) return 2; if (errno != EBADF) return 3; if (futimens (fd, ts)) return 4; sleep (1); ts[0].tv_nsec = UTIME_NOW; ts[1].tv_nsec = UTIME_OMIT; if (futimens (fd, ts)) return 5; if (fstat (fd, &st)) return 6; if (st.st_ctime < st.st_atime) return 7; ]])], [gl_cv_func_futimens_works=yes], [gl_cv_func_futimens_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_futimens_works="guessing no" ;; # Guess no on musl systems. *-musl*) gl_cv_func_futimens_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_futimens_works="guessing yes" ;; esac ]) rm -f conftest.file]) case "$gl_cv_func_futimens_works" in *yes) ;; *) REPLACE_FUTIMENS=1 ;; esac fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fwritable.m4�������������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fwritable.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FWRITABLE], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__fwritable]) ]) ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/fwriting.m4��������������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fwriting.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FWRITING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__fwriting]) ]) ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-arcfour.m4������������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-arcfour.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_ARCFOUR], [ AC_REQUIRE([gl_GC]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-arctwo.m4�������������������������������������������������������������0000664�0000000�0000000�00000000623�14110572173�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-arctwo.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_ARCTWO], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_ARCTWO fi ]) �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-camellia.m4�����������������������������������������������������������0000664�0000000�0000000�00000001503�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-camellia.m4 serial 3 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_CAMELLIA], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" = yes; then AC_CACHE_CHECK([for camellia in libgcrypt], [gl_cv_libgcrypt_camellia], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gcrypt.h>]], [[return gcry_cipher_open (NULL, GCRY_CIPHER_CAMELLIA128, 0, 0);]])], [gl_cv_libgcrypt_camellia=yes], [gl_cv_libgcrypt_camellia=no])]) if test "$gl_cv_libgcrypt_camellia" = yes; then AC_DEFINE([HAVE_CAMELLIA], [1], [Define if your libgcrypt supports Camellia.]) fi fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-des.m4����������������������������������������������������������������0000664�0000000�0000000�00000000520�14110572173�0016220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-des.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_DES], [ AC_REQUIRE([gl_GC]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-hmac-md5.m4�����������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-md5.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_HMAC_MD5], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_MD5 gl_MEMXOR fi ]) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-hmac-sha1.m4����������������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-sha1.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_HMAC_SHA1], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_SHA1 gl_MEMXOR fi ]) �������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-hmac-sha256.m4��������������������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0017372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-sha256.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_HMAC_SHA256], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_SHA256 gl_MEMXOR fi ]) �������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-hmac-sha512.m4��������������������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0017365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-sha512.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_HMAC_SHA512], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_SHA512 gl_MEMXOR fi ]) �������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-md2.m4����������������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0016135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md2.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_MD2], [ ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-md4.m4����������������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0016133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md4.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_MD4], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_MD4 fi ]) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-md5.m4����������������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0016134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md5.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_MD5], [ AC_REQUIRE([gl_GC]) if test "$ac_cv_libgcrypt" != yes; then gl_MD5 fi ]) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-rijndael.m4�����������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-rijndael.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_RIJNDAEL], [ AC_REQUIRE([gl_GC]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-sha1.m4���������������������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0016303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-sha1.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_SHA1], [ AC_REQUIRE([gl_GC]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-sha256.m4�������������������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0016463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-sha256.m4 serial 1 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_SHA256], [ AC_REQUIRE([gl_GC]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-sha512.m4�������������������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0016456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-sha512.m4 serial 1 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_SHA512], [ AC_REQUIRE([gl_GC]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc-sm3.m4����������������������������������������������������������������0000664�0000000�0000000�00000001411�14110572173�0016147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-sm3.m4 serial 2 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC_SM3], [ AC_REQUIRE([gl_GC]) AC_CACHE_CHECK([whether libgcrypt supports SM3], [gl_cv_libcrypt_md_sm3], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <gcrypt.h> int a = GCRY_MD_SM3; ]], [[]]) ], [gl_cv_libcrypt_md_sm3=yes], [gl_cv_libcrypt_md_sm3=no]) ]) if test $gl_cv_libcrypt_md_sm3 = yes; then AC_DEFINE([LIBGCRYPT_HAS_MD_SM3], [1], [Define if libgcrypt supports the MD algorithm SM3.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gc.m4��������������������������������������������������������������������0000664�0000000�0000000�00000002062�14110572173�0015452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc.m4 serial 13 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GC], [ AC_ARG_WITH([libgcrypt], AS_HELP_STRING([--with-libgcrypt], [use libgcrypt for low-level crypto]), libgcrypt=$withval, libgcrypt=no) if test "$libgcrypt" != no; then # gc-libgcrypt.c will fail on startup if we don't have # version 1.4.4 or later, so test for it early. */ gl_good_gcrypt=no AM_PATH_LIBGCRYPT([1.4.4], [gl_good_gcrypt=yes], [AC_MSG_ERROR([libgcrypt is too old])]) if test "x$gl_good_gcrypt" != xno; then dnl Ignore the value of LIBGCRYPT_LIBS, because it does not include dnl '-lgpg-error'. AC_LIB_HAVE_LINKFLAGS([gcrypt], [gpg-error], [#include <gcrypt.h>]) LIB_CRYPTO="$LIBGCRYPT" else AC_MSG_ERROR([libgcrypt not found]) fi fi AC_SUBST([LIB_CRYPTO]) AC_REQUIRE([AC_C_RESTRICT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getaddrinfo.m4�����������������������������������������������������������0000664�0000000�0000000�00000015170�14110572173�0017353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getaddrinfo.m4 serial 34 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETADDRINFO], [ AC_REQUIRE([gl_SYS_SOCKET_H])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H AC_REQUIRE([gl_NETDB_H])dnl for HAVE_NETDB_H GETADDRINFO_LIB= gai_saved_LIBS="$LIBS" dnl Where is getaddrinfo()? dnl - On Solaris, it is in libsocket. dnl - On Haiku, it is in libnetwork. dnl - On BeOS, it is in libnet. dnl - On native Windows, it is in ws2_32.dll. dnl - Otherwise it is in libc. AC_SEARCH_LIBS([getaddrinfo], [socket network net], [if test "$ac_cv_search_getaddrinfo" != "none required"; then GETADDRINFO_LIB="$ac_cv_search_getaddrinfo" fi]) LIBS="$gai_saved_LIBS $GETADDRINFO_LIB" HAVE_GETADDRINFO=1 AC_CACHE_CHECK([for getaddrinfo], [gl_cv_func_getaddrinfo], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #include <stddef.h> ]], [[getaddrinfo("", "", NULL, NULL);]])], [gl_cv_func_getaddrinfo=yes], [gl_cv_func_getaddrinfo=no])]) if test $gl_cv_func_getaddrinfo = no; then AC_CACHE_CHECK([for getaddrinfo in ws2tcpip.h and -lws2_32], gl_cv_w32_getaddrinfo, [ gl_cv_w32_getaddrinfo=no am_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif #include <stddef.h> ]], [[getaddrinfo(NULL, NULL, NULL, NULL);]])], [gl_cv_w32_getaddrinfo=yes]) LIBS="$am_save_LIBS" ]) if test "$gl_cv_w32_getaddrinfo" = "yes"; then GETADDRINFO_LIB="-lws2_32" LIBS="$gai_saved_LIBS $GETADDRINFO_LIB" dnl Check for correct signature, in particular for a cdecl-compatible dnl calling convention. AC_CACHE_CHECK([for getaddrinfo with POSIX signature], [gl_cv_func_getaddrinfo_posix_signature], [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif #include <stddef.h> extern #ifdef __cplusplus "C" #endif int getaddrinfo (const char *, const char *, const struct addrinfo *, struct addrinfo **); ]])], [gl_cv_func_getaddrinfo_posix_signature=yes], [gl_cv_func_getaddrinfo_posix_signature=no]) ]) if test $gl_cv_func_getaddrinfo_posix_signature = no; then REPLACE_GETADDRINFO=1 fi else HAVE_GETADDRINFO=0 fi fi AC_DEFINE_UNQUOTED([HAVE_GETADDRINFO], [$HAVE_GETADDRINFO], [Define to 1 if getaddrinfo exists, or to 0 otherwise.]) # We can't use AC_REPLACE_FUNCS here because gai_strerror may be an # inline function declared in ws2tcpip.h, so we need to get that # header included somehow. AC_CHECK_DECLS([gai_strerror], [], [], [[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif #include <stddef.h> ]]) if test $ac_cv_have_decl_gai_strerror = yes; then AC_CHECK_DECLS([gai_strerrorA], [], [], [[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif #include <stddef.h> ]]) dnl check for correct signature AC_CACHE_CHECK([for gai_strerror with POSIX signature], [gl_cv_func_gai_strerror_posix_signature], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif #include <stddef.h> extern #ifdef __cplusplus "C" #endif const char *gai_strerror(int);]])], [gl_cv_func_gai_strerror_posix_signature=yes], [gl_cv_func_gai_strerror_posix_signature=no])]) if test $gl_cv_func_gai_strerror_posix_signature = no; then REPLACE_GAI_STRERROR=1 fi fi LIBS="$gai_saved_LIBS" gl_PREREQ_GETADDRINFO AC_SUBST([GETADDRINFO_LIB]) ]) # Prerequisites of lib/netdb.in.h and lib/getaddrinfo.c. AC_DEFUN([gl_PREREQ_GETADDRINFO], [ AC_REQUIRE([gl_NETDB_H_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H AC_REQUIRE([gl_HOSTENT]) dnl for HOSTENT_LIB AC_REQUIRE([gl_SERVENT]) dnl for SERVENT_LIB AC_REQUIRE([gl_FUNC_INET_NTOP]) dnl for INET_NTOP_LIB AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_SOCKET_FAMILIES]) AC_REQUIRE([gl_SYS_SOCKET_H]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Including sys/socket.h is wrong for Windows, but Windows does not dnl have sa_len so the result is correct anyway. AC_CHECK_MEMBERS([struct sockaddr.sa_len], , , [ #include <sys/types.h> #include <sys/socket.h> ]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, getnameinfo],,,[[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]]) if test $ac_cv_have_decl_getaddrinfo = no; then HAVE_DECL_GETADDRINFO=0 fi if test $ac_cv_have_decl_freeaddrinfo = no; then HAVE_DECL_FREEADDRINFO=0 fi if test $ac_cv_have_decl_gai_strerror = no; then HAVE_DECL_GAI_STRERROR=0 fi if test $ac_cv_have_decl_getnameinfo = no; then HAVE_DECL_GETNAMEINFO=0 fi AC_CHECK_TYPES([struct addrinfo],,,[ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_addrinfo = no; then HAVE_STRUCT_ADDRINFO=0 fi dnl Append $HOSTENT_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. case " $GETADDRINFO_LIB " in *" $HOSTENT_LIB "*) ;; *) GETADDRINFO_LIB="$GETADDRINFO_LIB $HOSTENT_LIB" ;; esac dnl Append $SERVENT_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. case " $GETADDRINFO_LIB " in *" $SERVENT_LIB "*) ;; *) GETADDRINFO_LIB="$GETADDRINFO_LIB $SERVENT_LIB" ;; esac dnl Append $INET_NTOP_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. case " $GETADDRINFO_LIB " in *" $INET_NTOP_LIB "*) ;; *) GETADDRINFO_LIB="$GETADDRINFO_LIB $INET_NTOP_LIB" ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getcwd-abort-bug.m4������������������������������������������������������0000664�0000000�0000000�00000011123�14110572173�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Determine whether getcwd aborts when the length of the working directory # name is unusually large. Any length between 4k and 16k trigger the bug # when using glibc-2.4.90-9 or older. # Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # gl_FUNC_GETCWD_ABORT_BUG([ACTION-IF-BUGGY[, ACTION-IF-WORKS]]) AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([getcwd]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) gl_CHECK_FUNC_GETPAGESIZE if test $gl_cv_func_getpagesize = yes; then AC_DEFINE_UNQUOTED([HAVE_GETPAGESIZE], [1], [Define to 1 if the system has the 'getpagesize' function.]) fi AC_CACHE_CHECK([whether getcwd succeeds when 4k < cwd_length < 16k], [gl_cv_func_getcwd_succeeds_beyond_4k], [# Remove any remnants of a previous test. rm -rf confdir-14B--- # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir-14B---" dnl Please keep this in sync with tests/test-getcwd.c. AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif #include <string.h> #include <sys/stat.h> ]gl_PATHMAX_SNIPPET[ ]GL_MDA_DEFINES[ #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* FIXME: skip the run-test altogether on systems without getpagesize. */ #if ! HAVE_GETPAGESIZE # define getpagesize() 0 #endif /* This size is chosen to be larger than PATH_MAX (4k), yet smaller than the 16kB pagesize on ia64 linux. Those conditions make the code below trigger a bug in glibc's getcwd implementation before 2.4.90-10. */ #define TARGET_LEN (5 * 1024) int main () { char *cwd; size_t initial_cwd_len; int fail = 0; /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ #ifdef PATH_MAX int bug_possible = PATH_MAX < getpagesize (); #else int bug_possible = 0; #endif if (! bug_possible) return 0; cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); if (1) { static char const dir_name[] = "confdir-14B---"; size_t desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / sizeof dir_name); size_t d; for (d = 0; d < desired_depth; d++) { if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0) { if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT)) fail = 3; /* Unable to construct deep hierarchy. */ break; } } /* If libc has the bug in question, this invocation of getcwd results in a failed assertion. */ cwd = getcwd (NULL, 0); if (cwd == NULL) fail = 4; /* getcwd didn't assert, but it failed for a long name where the answer could have been learned. */ free (cwd); /* Call rmdir first, in case the above chdir failed. */ rmdir (dir_name); while (0 < d--) { if (chdir ("..") < 0) { fail = 5; break; } rmdir (dir_name); } } return fail; } ]])], [gl_cv_func_getcwd_succeeds_beyond_4k=yes], [dnl An abort will provoke an exit code of something like 134 (128 + 6). dnl An exit code of 4 can also occur (for example in dnl musl libc 1.2.2/powerpc64le, NetBSD 9.0, OpenBSD 6.7: dnl getcwd (NULL, 0) fails rather than returning a string longer than dnl PATH_MAX. This may be POSIX compliant (in some interpretations of dnl POSIX). But gnulib's getcwd module wants to provide a non-NULL dnl value in this case. ret=$? if test $ret -ge 128 || test $ret = 4; then gl_cv_func_getcwd_succeeds_beyond_4k=no else gl_cv_func_getcwd_succeeds_beyond_4k=yes fi ], [case "$host_os" in # Guess no otherwise, even on glibc systems and musl systems. *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no" esac ]) ]) case "$gl_cv_func_getcwd_succeeds_beyond_4k" in *no) $1 ;; *) $2 ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getcwd-path-max.m4�������������������������������������������������������0000664�0000000�0000000�00000015757�14110572173�0020072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 25 # Check for several getcwd bugs with long file names. # If so, arrange to compile the wrapper function. # This is necessary for at least GNU libc on linux-2.4.19 and 2.4.20. # I've heard that this is due to a Linux kernel bug, and that it has # been fixed between 2.4.21-pre3 and 2.4.21-pre4. # Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering AC_DEFUN([gl_FUNC_GETCWD_PATH_MAX], [ AC_CHECK_DECLS_ONCE([getcwd]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether getcwd handles long file names properly], [gl_cv_func_getcwd_path_max], [# Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir3" dnl Please keep this in sync with tests/test-getcwd.c. AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else # include <direct.h> #endif #include <string.h> #include <limits.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> ]gl_PATHMAX_SNIPPET[ #ifndef AT_FDCWD # define AT_FDCWD 0 #endif #ifdef ENAMETOOLONG # define is_ENAMETOOLONG(x) ((x) == ENAMETOOLONG) #else # define is_ENAMETOOLONG(x) 0 #endif /* Use the getcwd function, not any macro. */ #undef getcwd ]GL_MDA_DEFINES[ #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* The length of this name must be 8. */ #define DIR_NAME "confdir3" #define DIR_NAME_LEN 8 #define DIR_NAME_SIZE (DIR_NAME_LEN + 1) /* The length of "../". */ #define DOTDOTSLASH_LEN 3 /* Leftover bytes in the buffer, to work around library or OS bugs. */ #define BUF_SLOP 20 int main () { #ifndef PATH_MAX /* The Hurd doesn't define this, so getcwd can't exhibit the bug -- at least not on a local file system. And if we were to start worrying about remote file systems, we'd have to enable the wrapper function all of the time, just to be safe. That's not worth the cost. */ exit (0); #elif ((INT_MAX / (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) \ - DIR_NAME_SIZE - BUF_SLOP) \ <= PATH_MAX) /* FIXME: Assuming there's a system for which this is true, this should be done in a compile test. */ exit (0); #else char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) + DIR_NAME_SIZE + BUF_SLOP]; char *cwd = getcwd (buf, PATH_MAX); size_t initial_cwd_len; size_t cwd_len; int fail = 0; size_t n_chdirs = 0; if (cwd == NULL) exit (10); cwd_len = initial_cwd_len = strlen (cwd); while (1) { size_t dotdot_max = PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN); char *c = NULL; cwd_len += DIR_NAME_SIZE; /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't be too long for getcwd if it can't even be created. On Linux with the 9p file system, mkdir fails with error EINVAL when cwd_len gets too long; ignore this failure because the getcwd() system call produces good results whereas the gnulib substitute calls getdents64 which fails with error EPROTO. For other errors, be pessimistic and consider that as a failure, too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) #ifdef __linux__ if (! (errno == EINVAL)) #endif fail = 20; break; } if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE) { struct stat sb; c = getcwd (buf, PATH_MAX); if (!c && errno == ENOENT) { fail = 11; break; } if (c) { fail = 31; break; } if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) { fail = 21; break; } /* Our replacement needs to be able to stat() long ../../paths, so generate a path larger than PATH_MAX to check, avoiding the replacement if we can't stat(). */ c = getcwd (buf, cwd_len + 1); if (c && !AT_FDCWD && stat (c, &sb) != 0 && is_ENAMETOOLONG (errno)) { fail = 32; break; } } if (dotdot_max <= cwd_len - initial_cwd_len) { if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len) break; c = getcwd (buf, cwd_len + 1); if (!c) { if (! (errno == ERANGE || errno == ENOENT || is_ENAMETOOLONG (errno))) { fail = 22; break; } if (AT_FDCWD || errno == ERANGE || errno == ENOENT) { fail = 12; break; } } } if (c && strlen (c) != cwd_len) { fail = 23; break; } ++n_chdirs; } /* Leaving behind such a deep directory is not polite. So clean up here, right away, even though the driving shell script would also clean up. */ { size_t i; /* Try rmdir first, in case the chdir failed. */ rmdir (DIR_NAME); for (i = 0; i <= n_chdirs; i++) { if (chdir ("..") < 0) break; if (rmdir (DIR_NAME) != 0) break; } } exit (fail); #endif } ]])], [gl_cv_func_getcwd_path_max=yes], [case $? in 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; *) gl_cv_func_getcwd_path_max=no;; esac], [# Cross-compilation guesses: case "$host_os" in aix*) # On AIX, it has the AIX bug. gl_cv_func_getcwd_path_max='guessing no, it has the AIX bug' ;; gnu*) # On Hurd, it is 'yes'. gl_cv_func_getcwd_path_max='guessing yes' ;; linux* | kfreebsd*) # On older Linux+glibc it's 'no, but it is partly working', # on newer Linux+glibc it's 'yes'. # On Linux+musl libc, it's 'no, but it is partly working'. # On kFreeBSD+glibc, it's 'no, but it is partly working'. gl_cv_func_getcwd_path_max='guessing no, but it is partly working' ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_getcwd_path_max="$gl_cross_guess_normal" ;; esac ]) ]) ]) �����������������gnulib-20210822~d383792/m4/getcwd.m4����������������������������������������������������������������0000664�0000000�0000000�00000012247�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getcwd.m4 - check for working getcwd that is compatible with glibc # Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # serial 19 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result], [gl_cv_func_getcwd_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include <stdlib.h> # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif ]GL_MDA_DEFINES[ # ifndef getcwd char *getcwd (); # endif ]], [[ #if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but _getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ]])], [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], [[case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac ]])]) ]) AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE], [ AC_CACHE_CHECK([for getcwd with POSIX signature], [gl_cv_func_getcwd_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]GL_MDA_DEFINES], [[extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ]]) ], [gl_cv_func_getcwd_posix_signature=yes], [gl_cv_func_getcwd_posix_signature=no]) ]) ]) dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes dnl that either the system getcwd is robust, or that calling code is okay dnl with spurious failures when run from a directory with an absolute name dnl larger than 4k bytes. dnl dnl Assumes that getcwd exists; if you are worried about obsolete dnl platforms that lacked getcwd(), then you need to use the GPL module. AC_DEFUN([gl_FUNC_GETCWD_LGPL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) dnl Minimal replacement lib/getcwd-lgpl.c. REPLACE_GETCWD=1 ;; esac ]) dnl Check for all known getcwd bugs; useful for a program likely to be dnl executed from an arbitrary location. AC_DEFUN([gl_FUNC_GETCWD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_abort_bug=no case "$host_os" in mingw*) gl_cv_func_getcwd_path_max=yes ;; *) gl_FUNC_GETCWD_PATH_MAX case "$gl_cv_func_getcwd_null" in *yes) gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]) ;; esac ;; esac dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD dnl if appropriate. case "$gl_cv_func_getcwd_path_max" in *"no" | *"no, it has the AIX bug") ;; *) AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1], [Define to 1 if getcwd minimally works, that is, its result can be trusted when it succeeds.]) ;; esac case "$gl_cv_func_getcwd_path_max" in *"no, but it is partly working") AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1], [Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.]) ;; *"yes, but with shorter paths") AC_DEFINE([HAVE_GETCWD_SHORTER], [1], [Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement.]) ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \ || test $gl_abort_bug = yes; then REPLACE_GETCWD=1 fi ]) # Prerequisites of lib/getcwd.c, when full replacement is in effect. AC_DEFUN([gl_PREREQ_GETCWD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getdelim.m4��������������������������������������������������������������0000664�0000000�0000000�00000005434�14110572173�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdelim.m4 serial 15 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) AC_DEFUN([gl_FUNC_GETDELIM], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getdelim(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getdelim]) AC_CHECK_FUNCS_ONCE([getdelim]) if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [gl_cv_func_working_getdelim=yes], [gl_cv_func_working_getdelim=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_working_getdelim="guessing yes"], [case "$host_os" in *-musl*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi ]) # Prerequisites of lib/getdelim.c. AC_DEFUN([gl_PREREQ_GETDELIM], [ AC_CHECK_FUNCS([flockfile funlockfile]) AC_CHECK_DECLS([getc_unlocked]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getdomainname.m4���������������������������������������������������������0000664�0000000�0000000�00000006541�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdomainname.m4 serial 11 dnl Copyright (C) 2002-2003, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDOMAINNAME], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H])dnl for HAVE_SYS_SOCKET_H AC_REQUIRE([gl_NETDB_H])dnl for HAVE_NETDB_H dnl Persuade glibc <unistd.h> to declare getdomainname(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Where is getdomainname() defined? dnl - On Solaris, it is in libnsl. But this function is not declared and dnl is discouraged, see dnl <https://web.archive.org/web/20100121182558/http://www.sun.com/software/solaris/programs/abi/appcert_faq.xml#q18>. dnl We need to avoid a collision with this function. dnl - Otherwise it is in libc. AC_CHECK_FUNCS([getdomainname], , [ AC_CACHE_CHECK([for getdomainname in -lnsl], [gl_cv_func_getdomainname_in_libnsl], [gl_cv_func_getdomainname_in_libnsl=no gl_save_LIBS="$LIBS" LIBS="$LIBS -lnsl" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> extern #ifdef __cplusplus "C" #endif int getdomainname (char *, size_t); ]], [[getdomainname(NULL, 0);]])], [gl_cv_func_getdomainname_in_libnsl=yes]) LIBS="$gl_save_LIBS" ]) ]) dnl What about the declaration? dnl - It's int getdomainname(char *, size_t) on glibc, NetBSD, OpenBSD. dnl - It's int getdomainname(char *, int) on Mac OS X, FreeBSD, AIX, IRIX, dnl OSF/1. AC_CHECK_DECLS([getdomainname], , , [[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h> ]]) AC_CACHE_CHECK([for getdomainname's second argument type], [gl_cv_decl_getdomainname_argtype2], [if test $ac_cv_have_decl_getdomainname; then AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h> extern #ifdef __cplusplus "C" #endif int getdomainname (char *, int); ]], [[]])], [gl_cv_decl_getdomainname_argtype2='int'], [gl_cv_decl_getdomainname_argtype2='size_t']) else gl_cv_decl_getdomainname_argtype2='int' fi ]) if test $ac_cv_have_decl_getdomainname = no; then HAVE_DECL_GETDOMAINNAME=0 fi if { test $ac_cv_func_getdomainname = yes \ && test $gl_cv_decl_getdomainname_argtype2 != size_t; \ } \ || test "$gl_cv_func_getdomainname_in_libnsl" = yes; then REPLACE_GETDOMAINNAME=1 fi ]) # Prerequisites of lib/getdomainname.c. AC_DEFUN([gl_PREREQ_GETDOMAINNAME], [ if test $ac_cv_func_getdomainname = yes; then AC_DEFINE([HAVE_GETDOMAINNAME], [1], [Define if the getdomainname() function is present and can be used.]) fi AC_CHECK_HEADERS([sys/systeminfo.h]) AC_CHECK_FUNCS([sysinfo]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getdtablesize.m4���������������������������������������������������������0000664�0000000�0000000�00000005045�14110572173�0017713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdtablesize.m4 serial 8 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <unistd.h>] GL_MDA_DEFINES ], [[int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ]])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getentropy.m4������������������������������������������������������������0000664�0000000�0000000�00000000733�14110572173�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getentropy.m4 dnl Copyright 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_FUNC_GETENTROPY], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getentropy]) if test $ac_cv_func_getentropy = no; then HAVE_GETENTROPY=0 fi ]) �������������������������������������gnulib-20210822~d383792/m4/getgroups.m4�������������������������������������������������������������0000664�0000000�0000000�00000007747�14110572173�0017117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 24 dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. # Copyright (C) 1996-1997, 1999-2004, 2008-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9 AC_DEFUN([AC_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_FUNC([getgroups]) # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then AC_CHECK_LIB(bsd, getgroups, [GETGROUPS_LIB=-lbsd]) fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then AC_CACHE_CHECK([for working getgroups], [ac_cv_func_getgroups_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1;]]) ], [ac_cv_func_getgroups_works=yes], [ac_cv_func_getgroups_works=no], [case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ]) ]) else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) AC_DEFINE([HAVE_GETGROUPS], [1], [Define to 1 if your system has a working `getgroups' function.]) ;; esac LIBS=$ac_save_LIBS ])# AC_FUNC_GETGROUPS AC_DEFUN([gl_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_FUNC_GETGROUPS if test $ac_cv_func_getgroups != yes; then HAVE_GETGROUPS=0 else if test "$ac_cv_type_getgroups" != gid_t \ || { case "$ac_cv_func_getgroups_works" in *yes) false;; *) true;; esac }; then REPLACE_GETGROUPS=1 AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if getgroups(0,NULL) does not return the number of groups.]) else dnl Detect Mac OS X and FreeBSD bug; POSIX requires getgroups(-1,ptr) dnl to fail. AC_CACHE_CHECK([whether getgroups handles negative values], [gl_cv_func_getgroups_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); int result = getgroups (-1, list) != -1; free (list); return result;]])], [gl_cv_func_getgroups_works=yes], [gl_cv_func_getgroups_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_getgroups_works" in *yes) ;; *) REPLACE_GETGROUPS=1 ;; esac fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" ]) �������������������������gnulib-20210822~d383792/m4/gethostname.m4�����������������������������������������������������������0000664�0000000�0000000�00000006643�14110572173�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gethostname.m4 serial 15 dnl Copyright (C) 2002, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Ensure # - the gethostname() function, # - the HOST_NAME_MAX macro in <limits.h>. AC_DEFUN([gl_FUNC_GETHOSTNAME], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_PREREQ_SYS_H_WINSOCK2 dnl Where is gethostname() defined? dnl - On native Windows, it is in ws2_32.dll. dnl - Otherwise it is in libc. GETHOSTNAME_LIB= AC_CHECK_FUNCS([gethostname], , [ AC_CACHE_CHECK([for gethostname in winsock2.h and -lws2_32], [gl_cv_w32_gethostname], [gl_cv_w32_gethostname=no gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #include <stddef.h> ]], [[gethostname(NULL, 0);]])], [gl_cv_w32_gethostname=yes]) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_w32_gethostname" = "yes"; then GETHOSTNAME_LIB="-lws2_32" fi ]) AC_SUBST([GETHOSTNAME_LIB]) if test "$ac_cv_func_gethostname" = no; then HAVE_GETHOSTNAME=0 fi gl_PREREQ_HOST_NAME_MAX ]) # Provide HOST_NAME_MAX when <limits.h> lacks it. AC_DEFUN([gl_PREREQ_HOST_NAME_MAX], [ dnl - On most Unix systems, use MAXHOSTNAMELEN from <sys/param.h> instead. dnl - On Solaris, Cygwin, BeOS, use MAXHOSTNAMELEN from <netdb.h> instead. dnl - On mingw, use 256, because dnl <https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-gethostname> says: dnl "if a buffer of 256 bytes is passed in the name parameter and dnl the namelen parameter is set to 256, the buffer size will always dnl be adequate." dnl With this, there is no need to use sysconf (_SC_HOST_NAME_MAX), which dnl is not a compile-time constant. dnl We cannot override <limits.h> using the usual technique, because dnl gl_CHECK_NEXT_HEADERS does not work for <limits.h>. Therefore retrieve dnl the value of HOST_NAME_MAX at configure time. AC_CHECK_HEADERS_ONCE([sys/param.h]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) AC_CHECK_HEADERS_ONCE([netdb.h]) AC_CACHE_CHECK([for HOST_NAME_MAX], [gl_cv_decl_HOST_NAME_MAX], [ gl_cv_decl_HOST_NAME_MAX= AC_EGREP_CPP([lucky], [ #include <limits.h> #ifdef HOST_NAME_MAX lucky #endif ], [gl_cv_decl_HOST_NAME_MAX=yes]) if test -z "$gl_cv_decl_HOST_NAME_MAX"; then dnl It's not defined in <limits.h>. Substitute it. if test "$gl_cv_w32_gethostname" = yes; then dnl mingw. gl_cv_decl_HOST_NAME_MAX=256 else AC_COMPUTE_INT([gl_cv_decl_HOST_NAME_MAX], [MAXHOSTNAMELEN], [ #include <sys/types.h> #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif #if HAVE_NETDB_H # include <netdb.h> #endif ], [dnl The system does not define MAXHOSTNAMELEN in any of the common dnl headers. Use a safe fallback. gl_cv_decl_HOST_NAME_MAX=256 ]) fi fi ]) if test "$gl_cv_decl_HOST_NAME_MAX" != yes; then AC_DEFINE_UNQUOTED([HOST_NAME_MAX], [$gl_cv_decl_HOST_NAME_MAX], [Define HOST_NAME_MAX when <limits.h> does not define it.]) fi ]) # Prerequisites of lib/gethostname.c. AC_DEFUN([gl_PREREQ_GETHOSTNAME], [ if test "$gl_cv_w32_gethostname" != "yes"; then AC_CHECK_FUNCS([uname]) fi ]) ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gethrxtime.m4������������������������������������������������������������0000664�0000000�0000000�00000004340�14110572173�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gethrxtime.m4 serial 13 dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_GETHRXTIME], [ AC_REQUIRE([gl_ARITHMETIC_HRTIME_T]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_XTIME]) AC_CHECK_DECLS([gethrtime], [], [], [[#include <time.h>]]) LIB_GETHRXTIME= if test $ac_cv_have_decl_gethrtime = no \ || test $gl_cv_arithmetic_hrtime_t = no; then dnl Find libraries needed to link lib/gethrxtime.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([microuptime nanouptime]) if test $ac_cv_func_nanouptime != yes \ && { test $ac_cv_have_decl_gethrtime = no \ || test $gl_cv_arithmetic_hrtime_t = no; }; then AC_CACHE_CHECK([whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined], [gl_cv_have_clock_gettime_macro], [AC_EGREP_CPP([have_clock_gettime_macro], [ # include <time.h> # if defined CLOCK_MONOTONIC || defined CLOCK_REALTIME have_clock_gettime_macro # endif ], [gl_cv_have_clock_gettime_macro=yes], [gl_cv_have_clock_gettime_macro=no])]) if test $gl_cv_have_clock_gettime_macro = yes; then LIB_GETHRXTIME=$LIB_CLOCK_GETTIME fi fi fi AC_SUBST([LIB_GETHRXTIME]) ]) # Test whether hrtime_t is an arithmetic type. # It is not arithmetic in older Solaris c89 (which insists on # not having a long long int type). AC_DEFUN([gl_ARITHMETIC_HRTIME_T], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([for arithmetic hrtime_t], [gl_cv_arithmetic_hrtime_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <time.h>]], [[hrtime_t x = 0; return x/x;]])], [gl_cv_arithmetic_hrtime_t=yes], [gl_cv_arithmetic_hrtime_t=no])]) if test $gl_cv_arithmetic_hrtime_t = yes; then AC_DEFINE([HAVE_ARITHMETIC_HRTIME_T], [1], [Define if you have an arithmetic hrtime_t type.]) fi ]) # Prerequisites of lib/xtime.h. AC_DEFUN([gl_XTIME], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getline.m4���������������������������������������������������������������0000664�0000000�0000000�00000006374�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getline.m4 serial 30 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) dnl See if there's a working, system-supplied version of the getline function. dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems dnl have a function by that name in -linet that doesn't have anything dnl to do with the function we need. AC_DEFUN([gl_FUNC_GETLINE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getline(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getline]) gl_getline_needs_run_time_check=no AC_CHECK_FUNC([getline], [dnl Found it in some library. Verify that it works. gl_getline_needs_run_time_check=yes], [am_cv_func_working_getline=no]) if test $gl_getline_needs_run_time_check = yes; then AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [am_cv_func_working_getline=yes], [am_cv_func_working_getline=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [am_cv_func_working_getline="guessing yes"], [case "$host_os" in *-musl*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac ]) ]) ]) fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) dnl Set REPLACE_GETLINE always: Even if we have not found the broken dnl getline function among $LIBS, it may exist in libinet and the dnl executable may be linked with -linet. REPLACE_GETLINE=1 ;; esac ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getloadavg.m4������������������������������������������������������������0000664�0000000�0000000�00000012563�14110572173�0017205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for getloadavg. # Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2021 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 10 # Autoconf defines AC_FUNC_GETLOADAVG, but that is obsolescent. # New applications should use gl_GETLOADAVG instead. # gl_GETLOADAVG # ------------- AC_DEFUN([gl_GETLOADAVG], [AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) # Persuade glibc <stdlib.h> to declare getloadavg(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_save_LIBS=$LIBS # getloadavg is present in libc on glibc >= 2.2, Mac OS X, FreeBSD >= 2.0, # NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7. HAVE_GETLOADAVG=1 AC_CHECK_FUNC([getloadavg], [], [gl_func_getloadavg_done=no # Some systems with -lutil have (and need) -lkvm as well, some do not. # On Solaris, -lkvm requires nlist from -lelf, so check that first # to get the right answer into the cache. # For kstat on solaris, we need to test for libelf and libkvm to force the # definition of SVR4 below. if test $gl_func_getloadavg_done = no; then AC_CHECK_LIB([elf], [elf_begin], [LIBS="-lelf $LIBS"]) AC_CHECK_LIB([kvm], [kvm_open], [LIBS="-lkvm $LIBS"]) # Check for the 4.4BSD definition of getloadavg. AC_CHECK_LIB([util], [getloadavg], [LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes]) fi if test $gl_func_getloadavg_done = no; then # There is a commonly available library for RS/6000 AIX. # Since it is not a standard part of AIX, it might be installed locally. gl_getloadavg_LIBS=$LIBS if test $cross_compiling != yes; then LIBS="-L/usr/local/lib $LIBS" fi AC_CHECK_LIB([getloadavg], [getloadavg], [LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes], [LIBS=$gl_getloadavg_LIBS]) fi # Set up the replacement function if necessary. if test $gl_func_getloadavg_done = no; then HAVE_GETLOADAVG=0 # Solaris has libkstat which does not require root. AC_CHECK_LIB([kstat], [kstat_open]) test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes # AIX has libperfstat which does not require root if test $gl_func_getloadavg_done = no; then AC_CHECK_LIB([perfstat], [perfstat_cpu_total]) test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([sys/dg_sys_info.h], [gl_func_getloadavg_done=yes AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with <sys/dg_sys_info.h>.]) AC_CHECK_LIB([dgc], [dg_sys_info])]) fi fi]) if test "x$gl_save_LIBS" = x; then GETLOADAVG_LIBS=$LIBS else GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$gl_save_LIBS!!"` fi LIBS=$gl_save_LIBS AC_SUBST([GETLOADAVG_LIBS])dnl # Test whether the system declares getloadavg. Solaris has the function # but declares it in <sys/loadavg.h>, not <stdlib.h>. AC_CHECK_HEADERS([sys/loadavg.h]) if test $ac_cv_header_sys_loadavg_h = yes; then HAVE_SYS_LOADAVG_H=1 else HAVE_SYS_LOADAVG_H=0 fi AC_CHECK_DECL([getloadavg], [], [HAVE_DECL_GETLOADAVG=0], [[#if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif #include <stdlib.h>]]) ])# gl_GETLOADAVG # gl_PREREQ_GETLOADAVG # -------------------- # Set up the AC_LIBOBJ replacement of 'getloadavg'. AC_DEFUN([gl_PREREQ_GETLOADAVG], [ # Figure out what our getloadavg.c needs. AC_CHECK_HEADERS_ONCE([sys/param.h unistd.h]) # On HPUX9, an unprivileged user can get load averages this way. if test $gl_func_getloadavg_done = no; then AC_CHECK_FUNCS([pstat_getdynamic], [gl_func_getloadavg_done=yes]) fi # We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it # uses stabs), but it is still SVR4. We cannot check for <elf.h> because # Irix 4.0.5F has the header but not the library. if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \ && test "$ac_cv_lib_kvm_kvm_open" = yes; then gl_func_getloadavg_done=yes AC_DEFINE([SVR4], [1], [Define to 1 on System V Release 4.]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([inq_stats/cpustats.h], [gl_func_getloadavg_done=yes AC_DEFINE([UMAX], [1], [Define to 1 for Encore UMAX.]) AC_DEFINE([UMAX4_3], [1], [Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of <sys/cpustats.h>.])]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([sys/cpustats.h], [gl_func_getloadavg_done=yes; AC_DEFINE([UMAX])]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADERS([mach/mach.h]) fi AC_CHECK_HEADERS([nlist.h], [AC_CHECK_MEMBERS([struct nlist.n_un.n_name], [], [], [#include <nlist.h>]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]], [[struct nlist x; #ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME x.n_un.n_name = ""; #else x.n_name = ""; #endif]])], [AC_DEFINE([N_NAME_POINTER], [1], [Define to 1 if the nlist n_name member is a pointer])]) ])dnl ])# gl_PREREQ_GETLOADAVG ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getlogin.m4��������������������������������������������������������������0000664�0000000�0000000�00000001534�14110572173�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getlogin.m4 serial 5 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETLOGIN], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([getlogin]) if test $ac_cv_have_decl_getlogin = no; then HAVE_DECL_GETLOGIN=0 fi AC_CHECK_FUNCS_ONCE([getlogin]) if test $ac_cv_func_getlogin = no; then HAVE_GETLOGIN=0 fi ]) dnl Determines the library needed by the implementation of the dnl getlogin and getlogin_r functions. AC_DEFUN([gl_LIB_GETLOGIN], [ AC_REQUIRE([AC_CANONICAL_HOST]) case $host_os in mingw*) LIB_GETLOGIN='-ladvapi32' ;; *) LIB_GETLOGIN= ;; esac AC_SUBST([LIB_GETLOGIN]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getlogin_r.m4������������������������������������������������������������0000664�0000000�0000000�00000004444�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 13 # Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Derek Price dnl dnl Provide getlogin_r when the system lacks it. dnl AC_DEFUN([gl_FUNC_GETLOGIN_R], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare getlogin_r(). dnl Persuade Solaris <unistd.h> to provide the POSIX compliant declaration of dnl getlogin_r(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getlogin_r]) if test $ac_cv_have_decl_getlogin_r = no; then HAVE_DECL_GETLOGIN_R=0 fi AC_CHECK_FUNCS_ONCE([getlogin_r]) if test $ac_cv_func_getlogin_r = no; then HAVE_GETLOGIN_R=0 else HAVE_GETLOGIN_R=1 dnl On Mac OS X 10.13 and OSF/1 5.1, getlogin_r returns a truncated result dnl if the buffer is not large enough. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether getlogin_r works with small buffers], [gl_cv_func_getlogin_r_works], [ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in # Guess no on Mac OS X, OSF/1. darwin* | osf*) gl_cv_func_getlogin_r_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_getlogin_r_works="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <string.h> #include <unistd.h> #if !HAVE_DECL_GETLOGIN_R extern # ifdef __cplusplus "C" # endif int getlogin_r (char *, size_t); #endif int main (void) { int result = 0; char buf[100]; if (getlogin_r (buf, 0) == 0) result |= 1; if (getlogin_r (buf, 1) == 0) result |= 2; if (getlogin_r (buf, 100) == 0) { size_t n = strlen (buf); if (getlogin_r (buf, n) == 0) result |= 4; } return result; }]])], [gl_cv_func_getlogin_r_works=yes], [gl_cv_func_getlogin_r_works=no], [:]) ]) case "$gl_cv_func_getlogin_r_works" in *yes) ;; *) REPLACE_GETLOGIN_R=1 ;; esac fi ]) AC_DEFUN([gl_PREREQ_GETLOGIN_R], [ AC_CHECK_DECLS_ONCE([getlogin]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getndelim2.m4������������������������������������������������������������0000664�0000000�0000000�00000001167�14110572173�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getndelim2.m4 serial 8 dnl Copyright (C) 2003, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETNDELIM2], [ gl_PREREQ_GETNDELIM2 AC_CHECK_FUNCS_ONCE([flockfile]) AC_CHECK_FUNCS_ONCE([funlockfile]) ]) # Prerequisites of lib/getndelim2.h and lib/getndelim2.c. AC_DEFUN([gl_PREREQ_GETNDELIM2], [ dnl Prerequisites of lib/getndelim2.h. AC_REQUIRE([gt_TYPE_SSIZE_T]) dnl No prerequisites of lib/getndelim2.c. ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getnline.m4��������������������������������������������������������������0000664�0000000�0000000�00000000652�14110572173�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getnline.m4 serial 3 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETNLINE], [ dnl Prerequisites of lib/getnline.h. AC_REQUIRE([gt_TYPE_SSIZE_T]) dnl Prerequisites of lib/getnline.c. : ]) ��������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getopt.m4����������������������������������������������������������������0000664�0000000�0000000�00000031417�14110572173�0016371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 47 dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether <getopt.h> is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <getopt.h> #include <stddef.h> #include <string.h> ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. dnl Assume the worst, even on glibc platforms. dnl But obey --enable-cross-guesses. gl_cv_func_getopt_gnu="$gl_cross_guess_normal" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h> #include <stddef.h> #include <string.h> ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GETOPT_H=getopt.h GETOPT_CDEFS_H=getopt-cdefs.h AC_SUBST([GETOPT_H]) AC_SUBST([GETOPT_CDEFS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getpagesize.m4�����������������������������������������������������������0000664�0000000�0000000�00000002762�14110572173�0017377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpagesize.m4 serial 10 dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETPAGESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CHECK_FUNC_GETPAGESIZE if test $gl_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 AC_CHECK_HEADERS([OS.h]) if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi AC_CHECK_HEADERS([sys/param.h]) if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw*) REPLACE_GETPAGESIZE=1 ;; esac dnl Also check whether it's declared. dnl mingw has getpagesize() in libgcc.a but doesn't declare it. AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) ]) dnl Tests whether the function getpagesize() exists. dnl Sets gl_cv_func_getpagesize. AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE], [ dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h>]], [[return getpagesize();]]) ], [gl_cv_func_getpagesize=yes], [gl_cv_func_getpagesize=no]) ]) ]) ��������������gnulib-20210822~d383792/m4/getpass.m4���������������������������������������������������������������0000664�0000000�0000000�00000006201�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpass.m4 serial 16 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Provide a getpass() function if the system doesn't have it. AC_DEFUN_ONCE([gl_FUNC_GETPASS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade Solaris <unistd.h> and <stdlib.h> to declare getpass(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getpass]) if test $ac_cv_func_getpass = no; then HAVE_GETPASS=0 fi ]) # Provide the GNU getpass() implementation. It supports passwords of # arbitrary length (not just 8 bytes as on HP-UX). AC_DEFUN([gl_FUNC_GETPASS_GNU], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETPASS]) if test $ac_cv_func_getpass = yes; then AC_CACHE_CHECK([for getpass without length limitations], [gl_cv_func_getpass_good], [AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_getpass_good=yes], [gl_cv_func_getpass_good=no]) ]) if test $gl_cv_func_getpass_good != yes; then REPLACE_GETPASS=1 fi fi ]) # Prerequisites of lib/getpass.c. AC_DEFUN([gl_PREREQ_GETPASS], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h termios.h]) AC_CHECK_FUNCS_ONCE([__fsetlocking]) AC_CHECK_DECLS([__fsetlocking],,, [[#include <stdio.h> #if HAVE_STDIO_EXT_H #include <stdio_ext.h> #endif]]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([flockfile]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([funlockfile]) AC_CHECK_DECLS_ONCE([putc_unlocked]) dnl We can't use AC_CHECK_FUNC here, because tcgetattr() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for tcgetattr], [gl_cv_func_tcgetattr], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <termios.h> struct termios x; ]], [[return tcgetattr(0,&x);]]) ], [gl_cv_func_tcgetattr=yes], [gl_cv_func_tcgetattr=no]) ]) if test $gl_cv_func_tcgetattr = yes; then HAVE_TCGETATTR=1 else HAVE_TCGETATTR=0 fi AC_DEFINE_UNQUOTED([HAVE_TCGETATTR], [$HAVE_TCGETATTR], [Define to 1 if the system has the 'tcgetattr' function.]) dnl We can't use AC_CHECK_FUNC here, because tcsetattr() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for tcsetattr], [gl_cv_func_tcsetattr], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <termios.h> struct termios x; ]], [[return tcsetattr(0,0,&x);]]) ], [gl_cv_func_tcsetattr=yes], [gl_cv_func_tcsetattr=no]) ]) if test $gl_cv_func_tcsetattr = yes; then HAVE_TCSETATTR=1 else HAVE_TCSETATTR=0 fi AC_DEFINE_UNQUOTED([HAVE_TCSETATTR], [$HAVE_TCSETATTR], [Define to 1 if the system has the 'tcsetattr' function.]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getprogname.m4�����������������������������������������������������������0000664�0000000�0000000�00000002633�14110572173�0017375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_CHECK_FUNCS_ONCE([getprogname getexecname]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getrandom.m4�������������������������������������������������������������0000664�0000000�0000000�00000004125�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getrandom.m4 serial 8 dnl Copyright 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_FUNC_GETRANDOM], [ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getrandom]) if test "$ac_cv_func_getrandom" != yes; then HAVE_GETRANDOM=0 else dnl On Solaris 11.4 the return type is 'int', not 'ssize_t'. AC_CACHE_CHECK([whether getrandom is compatible with its GNU+BSD signature], [gl_cv_func_getrandom_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Additional includes are needed before <sys/random.h> on uClibc and Mac OS X. */ #include <sys/types.h> #include <stdlib.h> #include <sys/random.h> ssize_t getrandom (void *, size_t, unsigned int); ]], [[]]) ], [gl_cv_func_getrandom_ok=yes], [gl_cv_func_getrandom_ok=no]) ]) if test $gl_cv_func_getrandom_ok = no; then REPLACE_GETRANDOM=1 fi fi case "$host_os" in mingw*) AC_CHECK_HEADERS([bcrypt.h], [], [], [[#include <windows.h> ]]) AC_CACHE_CHECK([whether the bcrypt library is guaranteed to be present], [gl_cv_lib_assume_bcrypt], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <windows.h>]], [[#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) cannot assume it #endif ]]) ], [gl_cv_lib_assume_bcrypt=yes], [gl_cv_lib_assume_bcrypt=no]) ]) if test $gl_cv_lib_assume_bcrypt = yes; then AC_DEFINE([HAVE_LIB_BCRYPT], [1], [Define to 1 if the bcrypt library is guaranteed to be present.]) LIB_GETRANDOM='-lbcrypt' else LIB_GETRANDOM='-ladvapi32' fi ;; *) LIB_GETRANDOM= ;; esac AC_SUBST([LIB_GETRANDOM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getrusage.m4�������������������������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getrusage.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETRUSAGE], [ AC_REQUIRE([gl_SYS_RESOURCE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getrusage]) if test $ac_cv_func_getrusage = no; then HAVE_GETRUSAGE=0 fi ]) ����������������������������������������������������gnulib-20210822~d383792/m4/getsubopt.m4�������������������������������������������������������������0000664�0000000�0000000�00000001176�14110572173�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getsubopt.m4 serial 5 dnl Copyright (C) 2004, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETSUBOPT], [ dnl Persuade glibc <stdlib.h> to declare getsubopt(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getsubopt]) if test $ac_cv_func_getsubopt = no; then HAVE_GETSUBOPT=0 fi ]) # Prerequisites of lib/getsubopt.c. AC_DEFUN([gl_PREREQ_GETSUBOPT], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gettext.m4���������������������������������������������������������������0000664�0000000�0000000�00000034230�14110572173�0016547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 71 (gettext-0.20.2) dnl Copyright (C) 1995-2014, 2016, 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL must be one of 'external', 'use-libtool'. dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. ])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], [no], [yes])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' dnl because some of the testsuite requires it. BUILD_INCLUDED_LIBINTL=yes dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gettime.m4���������������������������������������������������������������0000664�0000000�0000000�00000000707�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettime.m4 serial 9 dnl Copyright (C) 2002, 2004-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETTIME], [ dnl Prerequisites of lib/gettime.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TIMESPEC]) AC_CHECK_FUNCS_ONCE([gettimeofday]) ]) ���������������������������������������������������������gnulib-20210822~d383792/m4/gettimeofday.m4����������������������������������������������������������0000664�0000000�0000000�00000005302�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 29 # Copyright (C) 2001-2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_GETTIMEOFDAY], [ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_TIME_H]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else AC_CACHE_CHECK([for gettimeofday with POSIX signature], [gl_cv_func_gettimeofday_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); ]], [[/* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ]])], [gl_cv_func_gettimeofday_posix_signature=yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> int gettimeofday (struct timeval *restrict, struct timezone *restrict); ]])], [gl_cv_func_gettimeofday_posix_signature=almost], [gl_cv_func_gettimeofday_posix_signature=no])])]) if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi dnl If we override 'struct timeval', we also have to override gettimeofday. if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi dnl On mingw, the original gettimeofday has only a precision of 15.6 dnl milliseconds. So override it. case "$host_os" in mingw*) REPLACE_GETTIMEOFDAY=1 ;; esac fi AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], [Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday.]) ]) # Prerequisites of lib/gettimeofday.c. AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getugroups.m4������������������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getugroups.m4 serial 9 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETUGROUPS], [ AC_CHECK_HEADERS_ONCE([grp.h]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getumask.m4��������������������������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getumask.m4 serial 1 dnl Copyright 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETUMASK], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Persuade glibc <sys/stat.h> to declare getumask(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getumask]) if test $ac_cv_func_getumask = no; then HAVE_GETUMASK=0 fi ]) # Prerequisites of lib/getumask.c. AC_DEFUN([gl_PREREQ_GETUMASK], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/getusershell.m4����������������������������������������������������������0000664�0000000�0000000�00000001677�14110572173�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getusershell.m4 serial 7 dnl Copyright (C) 2002-2003, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETUSERSHELL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare {get,set,end}usershell(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check whether the getusershell function exists. AC_CHECK_FUNCS_ONCE([getusershell]) if test $ac_cv_func_getusershell = yes; then HAVE_GETUSERSHELL=1 dnl Check whether getusershell is declared. AC_CHECK_DECLS([getusershell]) if test $ac_cv_have_decl_getusershell = no; then HAVE_DECL_GETUSERSHELL=0 fi else HAVE_GETUSERSHELL=0 dnl Assume that on platforms which declare it, the function exists. HAVE_DECL_GETUSERSHELL=0 fi ]) �����������������������������������������������������������������gnulib-20210822~d383792/m4/gl-openssl.m4������������������������������������������������������������0000664�0000000�0000000�00000004672�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gl-openssl.m4 serial 5 dnl Copyright (C) 2013-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SET_CRYPTO_CHECK_DEFAULT], [ m4_define([gl_CRYPTO_CHECK_DEFAULT], [$1]) ]) gl_SET_CRYPTO_CHECK_DEFAULT([no]) AC_DEFUN([gl_CRYPTO_CHECK], [ dnl gnulib users set this before gl_INIT with gl_SET_CRYPTO_CHECK_DEFAULT() m4_divert_once([DEFAULTS], [with_openssl_default='gl_CRYPTO_CHECK_DEFAULT']) dnl Only clear once, so crypto routines can be checked for individually m4_divert_once([DEFAULTS], [LIB_CRYPTO=]) AC_ARG_WITH([openssl], [AS_HELP_STRING([--with-openssl], [use libcrypto hash routines. Valid ARGs are: 'yes', 'no', 'auto' => use if any version available, 'auto-gpl-compat' => use if gpl compatible version available, 'optional' => use if available and warn if not available; default is ']gl_CRYPTO_CHECK_DEFAULT['. Note also --with-linux-crypto, which will enable use of kernel crypto routines, which have precedence])], [], [with_openssl=$with_openssl_default]) AC_SUBST([LIB_CRYPTO]) if test "x$with_openssl" != xno; then if test "x$with_openssl" = xauto-gpl-compat; then AC_CACHE_CHECK([whether openssl is GPL compatible], [gl_cv_openssl_gpl_compat], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <openssl/opensslv.h> #if OPENSSL_VERSION_MAJOR < 3 #error "openssl >= version 3 not found" #endif ]])], [gl_cv_openssl_gpl_compat=yes], [gl_cv_openssl_gpl_compat=no])]) fi if test "x$with_openssl" != xauto-gpl-compat || test "x$gl_cv_openssl_gpl_compat" = xyes; then AC_CHECK_LIB([crypto], [$1], [AC_CHECK_HEADERS( m4_if([$1], [MD5], [openssl/md5.h], [openssl/sha.h]), [LIB_CRYPTO=-lcrypto AC_DEFINE([HAVE_OPENSSL_$1], [1], [Define to 1 if libcrypto is used for $1.])])]) fi if test "x$LIB_CRYPTO" = x; then if test "x$with_openssl" = xyes; then AC_MSG_ERROR([openssl development library not found for $1]) elif test "x$with_openssl" = xoptional; then AC_MSG_WARN([openssl development library not found for $1]) fi fi fi ]) ����������������������������������������������������������������������gnulib-20210822~d383792/m4/glob.m4������������������������������������������������������������������0000664�0000000�0000000�00000005522�14110572173�0016010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# glob.m4 serial 24 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # The glob module assumes you want GNU glob, with glob_pattern_p etc, # rather than vanilla POSIX glob. This means your code should # always include <glob.h> for the glob prototypes. AC_DEFUN([gl_GLOB], [ AC_REQUIRE([gl_GLOB_H]) AC_CHECK_FUNCS_ONCE([glob glob_pattern_p]) if test $ac_cv_func_glob = no; then HAVE_GLOB=0 else AC_CACHE_CHECK([for GNU glob interface version 1 or 2], [gl_cv_gnu_glob_interface_version_1_2], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include <gnu-versions.h> char a[_GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 ? 1 : -1];]])], [gl_cv_gnu_glob_interface_version_1_2=yes], [gl_cv_gnu_glob_interface_version_1_2=no])]) if test "$gl_cv_gnu_glob_interface_version_1_2" = "no"; then REPLACE_GLOB=1 fi if test $REPLACE_GLOB = 0; then AC_CACHE_CHECK([whether glob lists broken symlinks], [gl_cv_glob_lists_symlinks], [if test $cross_compiling != yes; then if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then gl_cv_glob_lists_symlinks=maybe else # If we can't make a symlink, then we cannot test this issue. Be # pessimistic about this. gl_cv_glob_lists_symlinks=no fi if test $gl_cv_glob_lists_symlinks = maybe; then AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <glob.h>]], [[glob_t found; if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) return 1; globfree (&found); ]])], [gl_cv_glob_lists_symlinks=yes], [gl_cv_glob_lists_symlinks=no], [dnl We don't get here. : ]) fi rm -f conf$$-globtest else gl_cv_glob_lists_symlinks="$gl_cross_guess_normal" fi ]) case "$gl_cv_glob_lists_symlinks" in *yes) ;; *) REPLACE_GLOB=1 ;; esac fi fi if test $ac_cv_func_glob_pattern_p = no; then HAVE_GLOB_PATTERN_P=0 else if test $REPLACE_GLOB = 1; then REPLACE_GLOB_PATTERN_P=1 fi fi if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then gl_REPLACE_GLOB_H fi ]) # Prerequisites of lib/glob.c and lib/globfree.c. AC_DEFUN([gl_PREREQ_GLOB], [ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([getlogin_r getpwnam_r]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/glob_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000005447�14110572173�0016325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# glob_h.m4 serial 8 dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN_ONCE([gl_GLOB_H], [ AC_REQUIRE([gl_GLOB_H_DEFAULTS]) m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_HEADERS_ONCE([glob.h]) gl_CHECK_NEXT_HEADERS([glob.h]) if test $ac_cv_header_glob_h = yes; then HAVE_GLOB_H=1 else HAVE_GLOB_H=0 fi AC_SUBST([HAVE_GLOB_H]) m4_ifdef([gl_POSIXCHECK], [GLOB_H=glob.h], [GLOB_H='' if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then dnl Override <glob.h> always, to support the C++ GNULIB_NAMESPACE. GLOB_H=glob.h else if test $ac_cv_header_glob_h != yes; then dnl Provide a substitute <glob.h> file. GLOB_H=glob.h fi fi ]) AC_SUBST([GLOB_H]) AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <glob.h> ]], [glob globfree glob_pattern_p]) ]) dnl Unconditionally enables the replacement of <glob.h>. AC_DEFUN([gl_REPLACE_GLOB_H], [ gl_GLOB_H_REQUIRE_DEFAULTS GLOB_H='glob.h' AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) ]) # gl_GLOB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_GLOB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_GLOB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_GLOB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_GLOB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GLOB]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_GLOB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_GLOB_H_DEFAULTS]) ]) AC_DEFUN([gl_GLOB_H_DEFAULTS], [ dnl Assume POSIX and GNU behavior unless another module says otherwise. HAVE_GLOB=1; AC_SUBST([HAVE_GLOB]) HAVE_GLOB_PATTERN_P=1; AC_SUBST([HAVE_GLOB_PATTERN_P]) REPLACE_GLOB=0; AC_SUBST([REPLACE_GLOB]) REPLACE_GLOB_PATTERN_P=0; AC_SUBST([REPLACE_GLOB_PATTERN_P]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gnu-make.m4��������������������������������������������������������������0000664�0000000�0000000�00000001053�14110572173�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Determine whether recent-enough GNU Make is being used. # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # Set GNU_MAKE if we are using a recent-enough version of GNU make. AC_DEFUN([gl_GNU_MAKE], [ AM_CONDITIONAL([GNU_MAKE], [LC_ALL=C ${MAKE-make} --version 2>/dev/null | sed -e '2,$d' | grep GNU >/dev/null]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/gnulib-common.m4���������������������������������������������������������0000664�0000000�0000000�00000107744�14110572173�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 67 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) AC_REQUIRE([gl_ZZGNULIB]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_GL_GNUC_PREREQ], [/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif ]) AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([attribute], [/* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || 3 < __clang_major__ + (5 <= __clang_minor__))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif #ifdef __has_c_attribute # define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__) #else # define _GL_HAS_C_ATTRIBUTE(attr) 0 #endif ]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's _Alignas instead. [ /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) #else # define _GL_ATTRIBUTE_ALWAYS_INLINE #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) #else # define _GL_ATTRIBUTE_ARTIFICIAL #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif #else # define _GL_ATTRIBUTE_COLD #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after including <stdlib.h>. */ /* Applies to: functions. Cannot be used on inline functions. */ #if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) #else # define _GL_ATTRIBUTE_DEALLOC(f, i) #endif #define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #if _GL_HAS_C_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] #elif _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) #else # define _GL_ATTRIBUTE_DEPRECATED #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) #elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) #else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) #else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #if _GL_HAS_C_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] #elif _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) #else # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) #else # define _GL_ATTRIBUTE_LEAF #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) #else # define _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C2x, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. */ #if _GL_HAS_C_ATTRIBUTE (maybe_unused) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] #else # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED #endif /* Alternative spelling of this macro, for convenience. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #if _GL_HAS_C_ATTRIBUTE (nodiscard) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] #elif _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) #else # define _GL_ATTRIBUTE_NODISCARD #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) #else # define _GL_ATTRIBUTE_NOINLINE #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) #else # define _GL_ATTRIBUTE_NONNULL(args) #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) #else # define _GL_ATTRIBUTE_NONSTRING #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) #else # define _GL_ATTRIBUTE_NOTHROW #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) #else # define _GL_ATTRIBUTE_PACKED #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) #else # define _GL_ATTRIBUTE_RETURNS_NONNULL #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) #else # define _GL_ATTRIBUTE_SENTINEL(pos) #endif /* A helper macro. Don't use it directly. */ #if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #else # define _GL_ATTRIBUTE_UNUSED #endif ]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. [ /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED #else # define _GL_UNUSED_LABEL #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) AH_VERBATIM([micro_optimizations], [/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) ]) dnl Hint which direction to take regarding cross-compilation guesses: dnl When a user installs a program on a platform they are not intimately dnl familiar with, --enable-cross-guesses=conservative is the appropriate dnl choice. It implements the "If we don't know, assume the worst" principle. dnl However, when an operating system developer (on a platform which is not dnl yet known to gnulib) builds packages for their platform, they want to dnl expose, not hide, possible platform bugs; in this case, dnl --enable-cross-guesses=risky is the appropriate choice. dnl Sets the variables dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). AC_ARG_ENABLE([cross-guesses], [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}], [specify policy for cross-compilation guesses])], [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) enableval=conservative fi gl_cross_guesses="$enableval"], [gl_cross_guesses=conservative]) if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue]) # initializes the shell variable that indicates the presence of the given module # as a C preprocessor expression. AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE], [ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2]) AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1]) ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether <features.h> exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. AC_DEFUN([gl_PROG_CC_C99], [ dnl Just use AC_PROG_CC_C99. dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted dnl value of CC will contain the C99 enabling options twice. But this is only dnl a cosmetic problem. dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99; dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete." m4_version_prereq([2.70], [AC_REQUIRE([AC_PROG_CC])], [AC_REQUIRE([AC_PROG_CC_C99])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.70 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.70. m4_version_prereq([2.70.1], [], [ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT ]) # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # A temporary file descriptor. # Must be less than 10, because dash 0.5.8 does not support redirections # with multi-digit file descriptors. m4_define([GL_TMP_FD], 9) # gl_SILENT(command) # executes command, but without the normal configure output. # This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.) # inside another AC_CACHE_CHECK. AC_DEFUN([gl_SILENT], [ exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null $1 exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&- ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ gl_SILENT([ AC_CACHE_VAL([$1], [$2]) ]) ]) # gl_CC_ALLOW_WARNINGS # sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. # This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang # and empty otherwise. AC_DEFUN([gl_CC_ALLOW_WARNINGS], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to allow warnings], [gl_cv_cc_wallow], [rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlc accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* ]) case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac AC_SUBST([GL_CFLAG_ALLOW_WARNINGS]) ]) # gl_CXX_ALLOW_WARNINGS # sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. AC_DEFUN([gl_CXX_ALLOW_WARNINGS], [ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX. if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to allow warnings], [gl_cv_cxx_wallow], [rm -f conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlC accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cxx_wallow='-Wno-error' else gl_cv_cxx_wallow=none fi rm -f conftest* ]) case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; esac else GL_CXXFLAG_ALLOW_WARNINGS='' fi AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS]) ]) dnl Expands to some code for use in .c programs that, on native Windows, defines dnl the Microsoft deprecated alias function names to the underscore-prefixed dnl actual function names. With this macro, these function names are available dnl without linking with '-loldnames' and without generating warnings. dnl Usage: Use it after all system header files are included. dnl #include <...> dnl #include <...> dnl ]GL_MDA_DEFINES[ dnl ... AC_DEFUN([GL_MDA_DEFINES],[ AC_REQUIRE([_GL_MDA_DEFINES]) [$gl_mda_defines] ]) AC_DEFUN([_GL_MDA_DEFINES], [gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' ]) ����������������������������gnulib-20210822~d383792/m4/gnulib-tool.m4�����������������������������������������������������������0000664�0000000�0000000�00000002647�14110572173�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-tool.m4 serial 2 dnl Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl The following macros need not be invoked explicitly. dnl Invoking them does nothing except to declare default arguments dnl for "gnulib-tool --import". dnl Usage: gl_LOCAL_DIR([DIR]) AC_DEFUN([gl_LOCAL_DIR], []) dnl Usage: gl_MODULES([module1 module2 ...]) AC_DEFUN([gl_MODULES], []) dnl Usage: gl_AVOID([module1 module2 ...]) AC_DEFUN([gl_AVOID], []) dnl Usage: gl_SOURCE_BASE([DIR]) AC_DEFUN([gl_SOURCE_BASE], []) dnl Usage: gl_M4_BASE([DIR]) AC_DEFUN([gl_M4_BASE], []) dnl Usage: gl_PO_BASE([DIR]) AC_DEFUN([gl_PO_BASE], []) dnl Usage: gl_DOC_BASE([DIR]) AC_DEFUN([gl_DOC_BASE], []) dnl Usage: gl_TESTS_BASE([DIR]) AC_DEFUN([gl_TESTS_BASE], []) dnl Usage: gl_WITH_TESTS AC_DEFUN([gl_WITH_TESTS], []) dnl Usage: gl_LIB([LIBNAME]) AC_DEFUN([gl_LIB], []) dnl Usage: gl_LGPL or gl_LGPL([VERSION]) AC_DEFUN([gl_LGPL], []) dnl Usage: gl_MAKEFILE_NAME([FILENAME]) AC_DEFUN([gl_MAKEFILE_NAME], []) dnl Usage: gl_LIBTOOL AC_DEFUN([gl_LIBTOOL], []) dnl Usage: gl_MACRO_PREFIX([PREFIX]) AC_DEFUN([gl_MACRO_PREFIX], []) dnl Usage: gl_PO_DOMAIN([DOMAIN]) AC_DEFUN([gl_PO_DOMAIN], []) dnl Usage: gl_VC_FILES([BOOLEAN]) AC_DEFUN([gl_VC_FILES], []) �����������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/grantpt.m4���������������������������������������������������������������0000664�0000000�0000000�00000001752�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# grantpt.m4 serial 3 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GRANTPT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare grantpt(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl We can't use AC_CHECK_FUNC here, because grantpt() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for grantpt], [gl_cv_func_grantpt], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[return grantpt(0);]]) ], [gl_cv_func_grantpt=yes], [gl_cv_func_grantpt=no]) ]) if test $gl_cv_func_grantpt = no; then HAVE_GRANTPT=0 fi ]) # Prerequisites of lib/grantpt.c. AC_DEFUN([gl_PREREQ_GRANTPT], [ AC_CHECK_FUNCS([setrlimit]) ]) ����������������������gnulib-20210822~d383792/m4/group-member.m4����������������������������������������������������������0000664�0000000�0000000�00000001412�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # Copyright (C) 1999-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Written by Jim Meyering AC_DEFUN([gl_FUNC_GROUP_MEMBER], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare group_member(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Do this replacement check manually because I want the hyphen dnl (not the underscore) in the filename. AC_CHECK_FUNC([group_member], , [ HAVE_GROUP_MEMBER=0 ]) ]) # Prerequisites of lib/group-member.c. AC_DEFUN([gl_PREREQ_GROUP_MEMBER], [ AC_REQUIRE([AC_FUNC_GETGROUPS]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/host-cpu-c-abi.m4��������������������������������������������������������0000664�0000000�0000000�00000053632�14110572173�0017605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# host-cpu-c-abi.m4 serial 14 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>. AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <<EOF #ifndef __${HOST_CPU}__ #define __${HOST_CPU}__ 1 #endif #ifndef __${HOST_CPU_C_ABI}__ #define __${HOST_CPU_C_ABI}__ 1 #endif EOF AH_TOP([/* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __riscv32__ #undef __riscv32__ #endif #ifndef __riscv64__ #undef __riscv64__ #endif #ifndef __riscv32_ilp32__ #undef __riscv32_ilp32__ #endif #ifndef __riscv32_ilp32f__ #undef __riscv32_ilp32f__ #endif #ifndef __riscv32_ilp32d__ #undef __riscv32_ilp32d__ #endif #ifndef __riscv64_ilp32__ #undef __riscv64_ilp32__ #endif #ifndef __riscv64_ilp32f__ #undef __riscv64_ilp32f__ #endif #ifndef __riscv64_ilp32d__ #undef __riscv64_ilp32d__ #endif #ifndef __riscv64_lp64__ #undef __riscv64_lp64__ #endif #ifndef __riscv64_lp64f__ #undef __riscv64_lp64f__ #endif #ifndef __riscv64_lp64d__ #undef __riscv64_lp64d__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif ]) ]) dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit dnl one, or to 'unknown' if unknown. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], [if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh[1234] | sh[1234]e[lb] \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. changequote(,)dnl alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=no ;; changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=yes], [gl_cv_host_cpu_c_abi_32bit=no]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi ]) HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ]) ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/host-os.m4���������������������������������������������������������������0000664�0000000�0000000�00000006023�14110572173�0016456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 12 # Copyright (C) 2001, 2003-2004, 2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. dnl From Paul Eggert. # Define HOST_OPERATING_SYSTEM to a name for the host operating system. AC_DEFUN([gl_HOST_OS], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([host operating system], [gl_cv_host_operating_system], [[case $host_os in # These operating system names do not use the default heuristic below. # They are in reverse order, so that more-specific prefixes come first. winnt*) os='Windows NT';; vos*) os='VOS';; sysv*) os='Unix System V';; superux*) os='SUPER-UX';; sunos*) os='SunOS';; stop*) os='STOP';; sco*) os='SCO Unix';; riscos*) os='RISC OS';; riscix*) os='RISCiX';; qnx*) os='QNX';; pw32*) os='PW32';; ptx*) os='ptx';; plan9*) os='Plan 9';; osf*) os='Tru64';; os2*) os='OS/2';; openbsd*) os='OpenBSD';; nsk*) os='NonStop Kernel';; nonstopux*) os='NonStop-UX';; netbsd*-gnu*) os='GNU/NetBSD';; # NetBSD kernel+libc, GNU userland netbsd*) os='NetBSD';; mirbsd*) os='MirBSD';; midnightbsd*) os='MidnightBSD';; knetbsd*-gnu) os='GNU/kNetBSD';; # NetBSD kernel, GNU libc+userland kfreebsd*-gnu) os='GNU/kFreeBSD';; # FreeBSD kernel, GNU libc+userland msdosdjgpp*) os='DJGPP';; mpeix*) os='MPE/iX';; mint*) os='MiNT';; mingw*) os='MinGW';; lynxos*) os='LynxOS';; linux*) os='GNU/Linux';; hpux*) os='HP-UX';; hiux*) os='HI-UX';; gnu*) os='GNU';; freebsd*) os='FreeBSD';; dgux*) os='DG/UX';; dragonfly*) os='DragonFly BSD';; bsdi*) os='BSD/OS';; bsd*) os='BSD';; beos*) os='BeOS';; aux*) os='A/UX';; atheos*) os='AtheOS';; amigaos*) os='Amiga OS';; aix*) os='AIX';; # The default heuristic takes the initial alphabetic string # from $host_os, but capitalizes its first letter. [A-Za-z]*) os=` expr "X$host_os" : 'X\([A-Za-z]\)' | LC_ALL=C tr '[a-z]' '[A-Z]' `` expr "X$host_os" : 'X.\([A-Za-z]*\)' ` ;; # If $host_os does not start with an alphabetic string, use it unchanged. *) os=$host_os;; esac gl_cv_host_operating_system=$os]]) AC_DEFINE_UNQUOTED([HOST_OPERATING_SYSTEM], "$gl_cv_host_operating_system", [The host operating system.]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hostent.m4���������������������������������������������������������������0000664�0000000�0000000�00000003170�14110572173�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hostent.m4 serial 4 dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HOSTENT], [ dnl Where are gethostent(), sethostent(), endhostent(), gethostbyname(), dnl gethostbyaddr() defined? dnl - On Solaris < 11.4, they are in libnsl. Ignore libxnet. dnl - On Haiku, they are in libnetwork. dnl - On BeOS, they are in libnet. dnl - On native Windows, they are in ws2_32.dll. dnl - Otherwise they are in libc. AC_REQUIRE([gl_SYS_SOCKET_H])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H HOSTENT_LIB= gl_saved_libs="$LIBS" AC_SEARCH_LIBS([gethostbyname], [nsl network net], [if test "$ac_cv_search_gethostbyname" != "none required"; then HOSTENT_LIB="$ac_cv_search_gethostbyname" fi]) LIBS="$gl_saved_libs" if test -z "$HOSTENT_LIB"; then AC_CHECK_FUNCS([gethostbyname], , [ AC_CACHE_CHECK([for gethostbyname in winsock2.h and -lws2_32], [gl_cv_w32_gethostbyname], [gl_cv_w32_gethostbyname=no gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #include <stddef.h> ]], [[gethostbyname(NULL);]])], [gl_cv_w32_gethostbyname=yes]) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_w32_gethostbyname" = "yes"; then HOSTENT_LIB="-lws2_32" fi ]) fi AC_SUBST([HOSTENT_LIB]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/human.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 11 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/human.c. AC_DEFUN([gl_HUMAN], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypot-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypot-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in hypot.m4 and not inlined in the dnl module description), so that gl_FUNC_HYPOT can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_HYPOT_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_hypot_required=ieee]) AC_REQUIRE([gl_FUNC_HYPOT]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypot.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006637�14110572173�0016240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypot.m4 serial 9 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_HYPOT], [ m4_divert_text([DEFAULTS], [gl_hypot_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare hypot(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine HYPOT_LIBM. gl_COMMON_DOUBLE_MATHFUNC([hypot]) m4_ifdef([gl_FUNC_HYPOT_IEEE], [ if test $gl_hypot_required = ieee && test $REPLACE_HYPOT = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether hypot works according to ISO C 99 with IEC 60559], [gl_cv_func_hypot_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $HYPOT_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x, double y) { return 0; } double zero; double one = 1.0; int main (int argc, char *argv[]) { double (* volatile my_hypot) (double, double) = argc ? hypot : dummy; double f; /* Test hypot(NaN,Infinity). This test fails on OSF/1 5.1 and native Windows. */ f = my_hypot (zero / zero, one / zero); if (!numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_hypot_ieee=yes], [gl_cv_func_hypot_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_hypot_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_hypot_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_hypot_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_hypot_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_hypot_ieee" in *yes) ;; *) REPLACE_HYPOT=1 ;; esac fi ]) if test $REPLACE_HYPOT = 1; then dnl Find libraries needed to link lib/hypot.c. AC_REQUIRE([gl_FUNC_FABS]) AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_LDEXP]) AC_REQUIRE([gl_FUNC_SQRT]) HYPOT_LIBM= dnl Append $FABS_LIBM to HYPOT_LIBM, avoiding gratuitous duplicates. case " $HYPOT_LIBM " in *" $FABS_LIBM "*) ;; *) HYPOT_LIBM="$HYPOT_LIBM $FABS_LIBM" ;; esac dnl Append $FREXP_LIBM to HYPOT_LIBM, avoiding gratuitous duplicates. case " $HYPOT_LIBM " in *" $FREXP_LIBM "*) ;; *) HYPOT_LIBM="$HYPOT_LIBM $FREXP_LIBM" ;; esac dnl Append $LDEXP_LIBM to HYPOT_LIBM, avoiding gratuitous duplicates. case " $HYPOT_LIBM " in *" $LDEXP_LIBM "*) ;; *) HYPOT_LIBM="$HYPOT_LIBM $LDEXP_LIBM" ;; esac dnl Append $SQRT_LIBM to HYPOT_LIBM, avoiding gratuitous duplicates. case " $HYPOT_LIBM " in *" $SQRT_LIBM "*) ;; *) HYPOT_LIBM="$HYPOT_LIBM $SQRT_LIBM" ;; esac fi ]) �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypotf-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypotf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in hypotf.m4 and not inlined in the dnl module description), so that gl_FUNC_HYPOTF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_HYPOTF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_hypotf_required=ieee]) AC_REQUIRE([gl_FUNC_HYPOTF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypotf.m4����������������������������������������������������������������0000664�0000000�0000000�00000011243�14110572173�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypotf.m4 serial 10 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_HYPOTF], [ m4_divert_text([DEFAULTS], [gl_hypotf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_HYPOT]) dnl Persuade glibc <math.h> to declare hypotf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether hypotf() exists. Assume that hypotf(), if it exists, is dnl defined in the same library as hypot(). save_LIBS="$LIBS" LIBS="$LIBS $HYPOT_LIBM" AC_CHECK_FUNCS([hypotf]) LIBS="$save_LIBS" if test $ac_cv_func_hypotf = yes; then HYPOTF_LIBM="$HYPOT_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $HYPOTF_LIBM" gl_FUNC_HYPOTF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_hypotf_works" in *yes) ;; *) REPLACE_HYPOTF=1 ;; esac m4_ifdef([gl_FUNC_HYPOTF_IEEE], [ if test $gl_hypotf_required = ieee && test $REPLACE_HYPOTF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether hypotf works according to ISO C 99 with IEC 60559], [gl_cv_func_hypotf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $HYPOTF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x, float y) { return 0; } float zero; float one = 1.0f; int main (int argc, char *argv[]) { float (* volatile my_hypotf) (float, float) = argc ? hypotf : dummy; float f; /* Test hypotf(NaN,Infinity). This test fails on OSF/1 5.1 and native Windows. */ f = my_hypotf (zero / zero, one / zero); if (!numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_hypotf_ieee=yes], [gl_cv_func_hypotf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_hypotf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_hypotf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_hypotf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_hypotf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_hypotf_ieee" in *yes) ;; *) REPLACE_HYPOTF=1 ;; esac fi ]) else HAVE_HYPOTF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_hypotf, not hypotf. AC_CHECK_DECLS([hypotf], [REPLACE_HYPOTF=1], , [[#include <math.h>]]) fi if test $HAVE_HYPOTF = 0 || test $REPLACE_HYPOTF = 1; then dnl Find libraries needed to link lib/hypotf.c. HYPOTF_LIBM="$HYPOT_LIBM" fi AC_SUBST([HYPOTF_LIBM]) ]) dnl Test whether hypotf() works. dnl It returns wrong values on NetBSD 5.1/x86_64 and OpenBSD 4.9/x86. AC_DEFUN([gl_FUNC_HYPOTF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether hypotf works], [gl_cv_func_hypotf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> volatile float x; volatile float y; volatile float z; int main () { int result = 0; /* This test fails on NetBSD 5.1. */ { x = FLT_MIN * 2.0f; y = FLT_MIN * 3.0f; z = hypotf (x, y); if (!(z >= FLT_MIN * 2.0f && z <= FLT_MIN * 4.0f)) result |= 1; } /* This test fails on OpenBSD 4.9. */ { x = FLT_MAX; y = FLT_MAX * 0.5f; z = hypotf (x, y); if (!(z > 0 && z == z + z)) result |= 2; } return result; } ]])], [gl_cv_func_hypotf_works=yes], [gl_cv_func_hypotf_works=no], [case "$host_os" in netbsd* | openbsd*) gl_cv_func_hypotf_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_hypotf_works="guessing yes" ;; *) gl_cv_func_hypotf_works="guessing yes" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypotl-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypotl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in hypotl.m4 and not inlined in the dnl module description), so that gl_FUNC_HYPOTL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_HYPOTL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_hypotl_required=ieee]) AC_REQUIRE([gl_FUNC_HYPOTL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/hypotl.m4����������������������������������������������������������������0000664�0000000�0000000�00000013600�14110572173�0016400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hypotl.m4 serial 11 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_HYPOTL], [ m4_divert_text([DEFAULTS], [gl_hypotl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_HYPOT]) dnl Persuade glibc <math.h> to declare hypotl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether hypotl() exists. Assume that hypotl(), if it exists, is dnl defined in the same library as hypot(). save_LIBS="$LIBS" LIBS="$LIBS $HYPOT_LIBM" AC_CHECK_FUNCS([hypotl]) LIBS="$save_LIBS" if test $ac_cv_func_hypotl = yes; then HYPOTL_LIBM="$HYPOT_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $HYPOTL_LIBM" gl_FUNC_HYPOTL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_hypotl_works" in *yes) ;; *) REPLACE_HYPOTL=1 ;; esac m4_ifdef([gl_FUNC_HYPOTL_IEEE], [ if test $gl_hypotl_required = ieee && test $REPLACE_HYPOTL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether hypotl works according to ISO C 99 with IEC 60559], [gl_cv_func_hypotl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $HYPOTL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (long double x, long double y) { return x == y; } static long double dummy (long double x, long double y) { return 0; } long double zero; long double one = 1.0L; int main (int argc, char *argv[]) { long double (* volatile my_hypotl) (long double, long double) = argc ? hypotl : dummy; long double f; /* Test hypotl(NaN,Infinity). This test fails on OSF/1 5.1 and native Windows. */ f = my_hypotl (zero / zero, one / zero); if (!numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_hypotl_ieee=yes], [gl_cv_func_hypotl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_hypotl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_hypotl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_hypotl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_hypotl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_hypotl_ieee" in *yes) ;; *) REPLACE_HYPOTL=1 ;; esac fi ]) else HAVE_HYPOTL=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_hypotl, not hypotl. AC_CHECK_DECLS([hypotl], [REPLACE_HYPOTL=1], , [[#include <math.h>]]) fi if test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; then dnl Find libraries needed to link lib/hypotl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then HYPOTL_LIBM="$HYPOT_LIBM" else AC_REQUIRE([gl_FUNC_FABSL]) AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_LDEXPL]) AC_REQUIRE([gl_FUNC_SQRTL]) HYPOTL_LIBM= dnl Append $FABSL_LIBM to HYPOTL_LIBM, avoiding gratuitous duplicates. case " $HYPOTL_LIBM " in *" $FABSL_LIBM "*) ;; *) HYPOTL_LIBM="$HYPOTL_LIBM $FABSL_LIBM" ;; esac dnl Append $FREXPL_LIBM to HYPOTL_LIBM, avoiding gratuitous duplicates. case " $HYPOTL_LIBM " in *" $FREXPL_LIBM "*) ;; *) HYPOTL_LIBM="$HYPOTL_LIBM $FREXPL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to HYPOTL_LIBM, avoiding gratuitous duplicates. case " $HYPOTL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) HYPOTL_LIBM="$HYPOTL_LIBM $LDEXPL_LIBM" ;; esac dnl Append $SQRTL_LIBM to HYPOTL_LIBM, avoiding gratuitous duplicates. case " $HYPOTL_LIBM " in *" $SQRTL_LIBM "*) ;; *) HYPOTL_LIBM="$HYPOTL_LIBM $SQRTL_LIBM" ;; esac fi fi AC_SUBST([HYPOTL_LIBM]) ]) dnl Test whether hypotl() works. dnl On OpenBSD 5.1/SPARC, dnl hypotl (2.5541394760659556563446062497337725156L, 7.7893454113437840832487794525518765265L) dnl has rounding errors that eat up the last 8 to 9 decimal digits. AC_DEFUN([gl_FUNC_HYPOTL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether hypotl works], [gl_cv_func_hypotl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> static long double my_ldexpl (long double x, int d) { for (; d > 0; d--) x *= 2.0L; for (; d < 0; d++) x *= 0.5L; return x; } volatile long double x; volatile long double y; volatile long double z; int main () { long double err; x = 2.5541394760659556563446062497337725156L; y = 7.7893454113437840832487794525518765265L; z = hypotl (x, y); err = z * z - (x * x + y * y); err = my_ldexpl (err, LDBL_MANT_DIG); if (err < 0) err = - err; if (err > 1000.0L) return 1; return 0; } ]])], [gl_cv_func_hypotl_works=yes], [gl_cv_func_hypotl_works=no], [case "$host_os" in openbsd*) gl_cv_func_hypotl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_hypotl_works="guessing yes" ;; *) gl_cv_func_hypotl_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/i-ring.m4����������������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0016253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 2 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_I_RING], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iconv.m4�����������������������������������������������������������������0000664�0000000�0000000�00000022506�14110572173�0016204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 24 dnl Copyright (C) 2000-2002, 2007-2014, 2016-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.64]) dnl Note: AM_ICONV is documented in the GNU gettext manual dnl <https://www.gnu.org/software/gettext/manual/html_node/AM_005fICONV.html>. dnl Don't make changes that are incompatible with that documentation! AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from successful returns. This is even documented in <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. AC_DEFUN_ONCE([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature], [gl_cv_iconv_nonconst], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); ]], [[]])], [gl_cv_iconv_nonconst=yes], [gl_cv_iconv_nonconst=no]) ]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. gl_cv_iconv_nonconst=yes fi if test $gl_cv_iconv_nonconst = yes; then iconv_arg1="" else iconv_arg1="const" fi AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test $gl_cv_iconv_nonconst != yes; then ICONV_CONST="const" fi ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iconv_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000005036�14110572173�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_h.m4 serial 15 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_ICONV_H], [ AC_REQUIRE([gl_ICONV_H_DEFAULTS]) dnl Execute this unconditionally, because ICONV_H may be set by other dnl modules, after this code is executed. gl_CHECK_NEXT_HEADERS([iconv.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <iconv.h> ]], [iconv iconv_open]) AC_REQUIRE([AC_C_RESTRICT]) ]) dnl Unconditionally enables the replacement of <iconv.h>. AC_DEFUN([gl_REPLACE_ICONV_H], [ gl_ICONV_H_REQUIRE_DEFAULTS ICONV_H='iconv.h' AM_CONDITIONAL([GL_GENERATE_ICONV_H], [test -n "$ICONV_H"]) ]) # gl_ICONV_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_ICONV_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_ICONV_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_ICONV_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_ICONV_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ICONV]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_ICONV_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_ICONV_H_DEFAULTS]) ]) AC_DEFUN([gl_ICONV_H_DEFAULTS], [ m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) dnl Assume proper GNU behavior unless another module says otherwise. ICONV_CONST=; AC_SUBST([ICONV_CONST]) REPLACE_ICONV=0; AC_SUBST([REPLACE_ICONV]) REPLACE_ICONV_OPEN=0; AC_SUBST([REPLACE_ICONV_OPEN]) REPLACE_ICONV_UTF=0; AC_SUBST([REPLACE_ICONV_UTF]) ICONV_H=''; AC_SUBST([ICONV_H]) m4_ifdef([gl_POSIXCHECK], [ICONV_H='iconv.h'], [if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then dnl Override <fnmatch.h> always, to support the C++ GNULIB_NAMESPACE. ICONV_H='iconv.h' fi ]) AM_CONDITIONAL([GL_GENERATE_ICONV_H], [test -n "$ICONV_H"]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iconv_open-utf.m4��������������������������������������������������������0000664�0000000�0000000�00000020572�14110572173�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_open-utf.m4 serial 4 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # A placeholder to ensure that this m4 file gets included by aclocal. AC_DEFUN([gl_FUNC_ICONV_OPEN_UTF], []) AC_DEFUN([gl_FUNC_ICONV_OPEN_UTF_SUPPORT], [ dnl This macro relies on am_cv_func_iconv and gl_func_iconv_gnu from dnl gl_FUNC_ICONV_OPEN, but is called from within gl_FUNC_ICONV_OPEN. dnl *Not* AC_REQUIRE([gl_FUNC_ICONV_OPEN]). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([whether iconv supports conversion between UTF-8 and UTF-{16,32}{BE,LE}], [gl_cv_func_iconv_supports_utf], [ save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <iconv.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { int result = 0; /* Test conversion from UTF-8 to UTF-16BE with no errors. */ { static const char input[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; static const char expected[] = "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; iconv_t cd; cd = iconv_open ("UTF-16BE", "UTF-8"); if (cd == (iconv_t)(-1)) result |= 1; else { char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (!(res == 0 && inbytesleft == 0)) result |= 1; else if (!(outptr == buf + (sizeof (expected) - 1))) result |= 1; else if (!(memcmp (buf, expected, sizeof (expected) - 1) == 0)) result |= 1; else if (!(iconv_close (cd) == 0)) result |= 1; } } /* Test conversion from UTF-8 to UTF-16LE with no errors. */ { static const char input[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; static const char expected[] = "J\000a\000p\000a\000n\000e\000s\000e\000 \000(\000\345\145\054\147\236\212)\000 \000[\000\065\330\015\335\065\330\036\335\065\330\055\335]\000"; iconv_t cd; cd = iconv_open ("UTF-16LE", "UTF-8"); if (cd == (iconv_t)(-1)) result |= 2; else { char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (!(res == 0 && inbytesleft == 0)) result |= 2; else if (!(outptr == buf + (sizeof (expected) - 1))) result |= 2; else if (!(memcmp (buf, expected, sizeof (expected) - 1) == 0)) result |= 2; else if (!(iconv_close (cd) == 0)) result |= 2; } } /* Test conversion from UTF-8 to UTF-32BE with no errors. */ { static const char input[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; static const char expected[] = "\000\000\000J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\145\345\000\000\147\054\000\000\212\236\000\000\000)\000\000\000 \000\000\000[\000\001\325\015\000\001\325\036\000\001\325\055\000\000\000]"; iconv_t cd; cd = iconv_open ("UTF-32BE", "UTF-8"); if (cd == (iconv_t)(-1)) result |= 4; else { char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (!(res == 0 && inbytesleft == 0)) result |= 4; else if (!(outptr == buf + (sizeof (expected) - 1))) result |= 4; else if (!(memcmp (buf, expected, sizeof (expected) - 1) == 0)) result |= 4; else if (!(iconv_close (cd) == 0)) result |= 4; } } /* Test conversion from UTF-8 to UTF-32LE with no errors. */ { static const char input[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; static const char expected[] = "J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\000\345\145\000\000\054\147\000\000\236\212\000\000)\000\000\000 \000\000\000[\000\000\000\015\325\001\000\036\325\001\000\055\325\001\000]\000\000\000"; iconv_t cd; cd = iconv_open ("UTF-32LE", "UTF-8"); if (cd == (iconv_t)(-1)) result |= 8; else { char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (!(res == 0 && inbytesleft == 0)) result |= 8; else if (!(outptr == buf + (sizeof (expected) - 1))) result |= 8; else if (!(memcmp (buf, expected, sizeof (expected) - 1) == 0)) result |= 8; else if (!(iconv_close (cd) == 0)) result |= 8; } } /* Test conversion from UTF-16BE to UTF-8 with no errors. This test fails on NetBSD 3.0. */ { static const char input[] = "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; static const char expected[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; iconv_t cd; cd = iconv_open ("UTF-8", "UTF-16BE"); if (cd == (iconv_t)(-1)) result |= 16; else { char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (!(res == 0 && inbytesleft == 0)) result |= 16; else if (!(outptr == buf + (sizeof (expected) - 1))) result |= 16; else if (!(memcmp (buf, expected, sizeof (expected) - 1) == 0)) result |= 16; else if (!(iconv_close (cd) == 0)) result |= 16; } } return result; }]])], [gl_cv_func_iconv_supports_utf=yes], [gl_cv_func_iconv_supports_utf=no], [ dnl We know that GNU libiconv, GNU libc, musl libc, and Solaris >= 9 do. dnl OSF/1 5.1 has these encodings, but inserts a BOM in the "to" dnl direction. gl_cv_func_iconv_supports_utf="$gl_cross_guess_normal" if test $gl_func_iconv_gnu = yes; then gl_cv_func_iconv_supports_utf="guessing yes" else changequote(,)dnl case "$host_os" in *-musl*) gl_cv_func_iconv_supports_utf="guessing yes" ;; solaris2.9 | solaris2.1[0-9]) gl_cv_func_iconv_supports_utf="guessing yes" ;; esac changequote([,])dnl fi ]) LIBS="$save_LIBS" ]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iconv_open.m4������������������������������������������������������������0000664�0000000�0000000�00000004060�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_open.m4 serial 16 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ICONV_OPEN], [ AC_REQUIRE([AM_ICONV]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test "$am_cv_func_iconv" = yes; then dnl Provide the <iconv.h> override, for the sake of the C++ aliases. gl_REPLACE_ICONV_H dnl Test whether iconv_open accepts standardized encoding names. dnl We know that GNU libiconv and GNU libc do. AC_EGREP_CPP([gnu_iconv], [ #include <iconv.h> #if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) gnu_iconv #endif ], [gl_func_iconv_gnu=yes], [gl_func_iconv_gnu=no]) if test $gl_func_iconv_gnu = no; then iconv_flavor= case "$host_os" in aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; solaris*) iconv_flavor=ICONV_FLAVOR_SOLARIS ;; openedition*) iconv_flavor=ICONV_FLAVOR_ZOS ;; esac if test -n "$iconv_flavor"; then AC_DEFINE_UNQUOTED([ICONV_FLAVOR], [$iconv_flavor], [Define to a symbolic name denoting the flavor of iconv_open() implementation.]) gl_REPLACE_ICONV_OPEN fi fi m4_ifdef([gl_FUNC_ICONV_OPEN_UTF_SUPPORT], [ gl_FUNC_ICONV_OPEN_UTF_SUPPORT case "$gl_cv_func_iconv_supports_utf" in *yes) ;; *) REPLACE_ICONV_UTF=1 AC_DEFINE([REPLACE_ICONV_UTF], [1], [Define if the iconv() functions are enhanced to handle the UTF-{16,32}{BE,LE} encodings.]) REPLACE_ICONV=1 gl_REPLACE_ICONV_OPEN ;; esac ]) fi ]) AC_DEFUN([gl_REPLACE_ICONV_OPEN], [ gl_REPLACE_ICONV_H REPLACE_ICONV_OPEN=1 ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/idcache.m4���������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0016443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# idcache.m4 serial 7 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_IDCACHE], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/idpriv.m4����������������������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0016357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# idpriv.m4 serial 1 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_IDPRIV], [ dnl Persuade glibc <unistd.h> to declare {get,set}res{uid,gid}. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getuid geteuid getresuid getgid getegid getresgid]) AC_CHECK_FUNCS_ONCE([setresuid setreuid seteuid setresgid setregid setegid]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ieee754-h.m4�������������������������������������������������������������0000664�0000000�0000000�00000001227�14110572173�0016457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure ieee754-h module dnl Copyright 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_IEEE754_H], [ AC_REQUIRE([AC_C_BIGENDIAN]) AC_CHECK_HEADERS_ONCE([ieee754.h]) if test $ac_cv_header_ieee754_h = yes; then IEEE754_H= else IEEE754_H=ieee754.h AC_DEFINE([_GL_REPLACE_IEEE754_H], 1, [Define to 1 if <ieee754.h> is missing.]) fi AC_SUBST([IEEE754_H]) AM_CONDITIONAL([GL_GENERATE_IEEE754_H], [test -n "$IEEE754_H"]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ilogb.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007454�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ilogb.m4 serial 7 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ILOGB], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine ILOGB_LIBM. gl_MATHFUNC([ilogb], [int], [(double)]) if test $gl_cv_func_ilogb_no_libm = yes \ || test $gl_cv_func_ilogb_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ILOGB_LIBM" gl_FUNC_ILOGB_WORKS LIBS="$save_LIBS" case "$gl_cv_func_ilogb_works" in *yes) ;; *) REPLACE_ILOGB=1 ;; esac else HAVE_ILOGB=0 fi if test $HAVE_ILOGB = 0 || test $REPLACE_ILOGB = 1; then dnl Find libraries needed to link lib/ilogb.c. AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_ISNAND]) ILOGB_LIBM= dnl Append $FREXP_LIBM to ILOGB_LIBM, avoiding gratuitous duplicates. case " $ILOGB_LIBM " in *" $FREXP_LIBM "*) ;; *) ILOGB_LIBM="$ILOGB_LIBM $FREXP_LIBM" ;; esac dnl Append $ISNAND_LIBM to ILOGB_LIBM, avoiding gratuitous duplicates. case " $ILOGB_LIBM " in *" $ISNAND_LIBM "*) ;; *) ILOGB_LIBM="$ILOGB_LIBM $ISNAND_LIBM" ;; esac fi AC_SUBST([ILOGB_LIBM]) ]) dnl Test whether ilogb() works. dnl On OpenBSD 6.7, AIX 5.1, ilogb(0.0) is wrong. dnl On AIX 7.1 in 64-bit mode, ilogb(2^(DBL_MIN_EXP-1)) is wrong. dnl On NetBSD 7.1, OpenBSD 6.7, ilogb(Infinity) is wrong. dnl On NetBSD 7.1, OpenBSD 6.7, ilogb(NaN) is wrong. AC_DEFUN([gl_FUNC_ILOGB_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ilogb works], [gl_cv_func_ilogb_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> /* Provide FP_ILOGB0, FP_ILOGBNAN, like in math.in.h. */ #if defined FP_ILOGB0 && defined FP_ILOGBNAN # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 INT_MIN # define FP_ILOGBNAN INT_MIN # elif defined _AIX /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ # define FP_ILOGB0 INT_MIN # define FP_ILOGBNAN INT_MAX # elif defined __sun /* Solaris 9: match what ilogb() does */ # define FP_ILOGB0 (- INT_MAX) # define FP_ILOGBNAN INT_MAX # endif #endif volatile double x; static double zero; static int dummy (double x) { return 0; } int main (int argc, char *argv[]) { int (* volatile my_ilogb) (double) = argc ? ilogb : dummy; int result = 0; /* This test fails on OpenBSD 6.7, AIX 5.1. */ { x = 0.0; if (my_ilogb (x) != FP_ILOGB0) result |= 1; } /* This test fails on AIX 7.1 in 64-bit mode. */ { int i; x = 0.5; for (i = DBL_MIN_EXP - 1; i < 0; i++) x = x * 0.5; if (x > 0.0 && my_ilogb (x) != DBL_MIN_EXP - 2) result |= 2; } /* This test fails on NetBSD 7.1, OpenBSD 6.7. */ { x = 1.0 / zero; if (my_ilogb (x) != INT_MAX) result |= 4; } /* This test fails on NetBSD 7.1, OpenBSD 6.7. */ { x = zero / zero; if (my_ilogb (x) != FP_ILOGBNAN) result |= 8; } return result; } ]])], [gl_cv_func_ilogb_works=yes], [gl_cv_func_ilogb_works=no], [case "$host_os" in aix* | openbsd* | netbsd* | solaris*) gl_cv_func_ilogb_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ilogb_works="guessing yes" ;; *) gl_cv_func_ilogb_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ilogbf.m4����������������������������������������������������������������0000664�0000000�0000000�00000006644�14110572173�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ilogbf.m4 serial 6 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ILOGBF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare ilogbf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine ILOGBF_LIBM. gl_MATHFUNC([ilogbf], [int], [(float)]) if test $gl_cv_func_ilogbf_no_libm = yes \ || test $gl_cv_func_ilogbf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ILOGBF_LIBM" gl_FUNC_ILOGBF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_ilogbf_works" in *yes) ;; *) REPLACE_ILOGBF=1 ;; esac else HAVE_ILOGBF=0 fi if test $HAVE_ILOGBF = 0 || test $REPLACE_ILOGBF = 1; then dnl Find libraries needed to link lib/ilogbf.c. AC_REQUIRE([gl_FUNC_FREXPF]) AC_REQUIRE([gl_FUNC_ISNANF]) ILOGBF_LIBM= dnl Append $FREXPF_LIBM to ILOGBF_LIBM, avoiding gratuitous duplicates. case " $ILOGBF_LIBM " in *" $FREXPF_LIBM "*) ;; *) ILOGBF_LIBM="$ILOGBF_LIBM $FREXPF_LIBM" ;; esac dnl Append $ISNANF_LIBM to ILOGBF_LIBM, avoiding gratuitous duplicates. case " $ILOGBF_LIBM " in *" $ISNANF_LIBM "*) ;; *) ILOGBF_LIBM="$ILOGBF_LIBM $ISNANF_LIBM" ;; esac fi AC_SUBST([ILOGBF_LIBM]) ]) dnl Test whether ilogbf() works. dnl On OpenBSD 6.7, ilogbf(0.0) is wrong. dnl On NetBSD 7.1, OpenBSD 6.7, ilogbf(Infinity) is wrong. AC_DEFUN([gl_FUNC_ILOGBF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ilogbf works], [gl_cv_func_ilogbf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <limits.h> #include <math.h> /* Provide FP_ILOGB0, FP_ILOGBNAN, like in math.in.h. */ #if defined FP_ILOGB0 && defined FP_ILOGBNAN # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogbf() does */ # define FP_ILOGB0 INT_MIN # define FP_ILOGBNAN INT_MIN # elif defined _AIX /* AIX 5.1: match what ilogbf() does in AIX >= 5.2 */ # define FP_ILOGB0 INT_MIN # define FP_ILOGBNAN INT_MAX # elif defined __sun /* Solaris 9: match what ilogbf() does */ # define FP_ILOGB0 (- INT_MAX) # define FP_ILOGBNAN INT_MAX # endif #endif volatile float x; static float zero; static int dummy (float x) { return 0; } int main (int argc, char *argv[]) { int (* volatile my_ilogbf) (float) = argc ? ilogbf : dummy; int result = 0; /* This test fails on OpenBSD 6.7. */ { x = 0.0f; if (my_ilogbf (x) != FP_ILOGB0) result |= 1; } /* This test fails on NetBSD 7.1, OpenBSD 6.7. */ { x = 1.0f / zero; if (my_ilogbf (x) != INT_MAX) result |= 2; } return result; } ]])], [gl_cv_func_ilogbf_works=yes], [gl_cv_func_ilogbf_works=no], [case "$host_os" in openbsd* | netbsd*) gl_cv_func_ilogbf_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ilogbf_works="guessing yes" ;; *) gl_cv_func_ilogbf_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ilogbl.m4����������������������������������������������������������������0000664�0000000�0000000�00000011011�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ilogbl.m4 serial 5 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ILOGBL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_ILOGB]) dnl Persuade glibc <math.h> to declare ilogbl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether ilogbl() exists. Assume that ilogbl(), if it exists, is dnl defined in the same library as ilogb(). save_LIBS="$LIBS" LIBS="$LIBS $ILOGB_LIBM" AC_CACHE_CHECK([for ilogbl], [gl_cv_func_ilogbl], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> int (*funcptr) (long double) = ilogbl; long double x;]], [[return (funcptr (x) % 2) == 0 || (ilogbl (x) % 2) == 0;]])], [gl_cv_func_ilogbl=yes], [gl_cv_func_ilogbl=no]) ]) LIBS="$save_LIBS" if test $gl_cv_func_ilogbl = yes; then ILOGBL_LIBM="$ILOGB_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $ILOGBL_LIBM" gl_FUNC_ILOGBL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_ilogbl_works" in *yes) ;; *) REPLACE_ILOGBL=1 ;; esac else HAVE_ILOGBL=0 fi if test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; then dnl Find libraries needed to link lib/ilogbl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then ILOGBL_LIBM="$ILOGB_LIBM" else AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_ISNANL]) ILOGBL_LIBM= dnl Append $FREXPL_LIBM to ILOGBL_LIBM, avoiding gratuitous duplicates. case " $ILOGBL_LIBM " in *" $FREXPL_LIBM "*) ;; *) ILOGBL_LIBM="$ILOGBL_LIBM $FREXPL_LIBM" ;; esac dnl Append $ISNANL_LIBM to ILOGBL_LIBM, avoiding gratuitous duplicates. case " $ILOGBL_LIBM " in *" $ISNANL_LIBM "*) ;; *) ILOGBL_LIBM="$ILOGBL_LIBM $ISNANL_LIBM" ;; esac fi fi AC_SUBST([ILOGBL_LIBM]) ]) dnl Test whether ilogbl() works. dnl On Cygwin 2.9, ilogbl(0.0L) is wrong. dnl On AIX 7.1 in 64-bit mode, ilogbl(2^(LDBL_MIN_EXP-1)) is wrong. dnl On Haiku 2017, it returns i-2 instead of i-1 for values between dnl ca. 2^-16444 and ca. 2^-16382. AC_DEFUN([gl_FUNC_ILOGBL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ilogbl works], [gl_cv_func_ilogbl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif volatile long double x; static int dummy (long double x) { return 0; } int main (int argc, char *argv[]) { int (* volatile my_ilogbl) (long double) = argc ? ilogbl : dummy; int result = 0; /* This test fails on Cygwin 2.9. */ { x = 0.0L; if (my_ilogbl (x) != FP_ILOGB0) result |= 1; } /* This test fails on AIX 7.1 in 64-bit mode. */ { int i; x = 0.5L; for (i = LDBL_MIN_EXP - 1; i < 0; i++) x = x * 0.5L; if (x > 0.0L && my_ilogbl (x) != LDBL_MIN_EXP - 2) result |= 2; } /* This test fails on Haiku 2017. */ { int i; for (i = 1, x = (long double)1.0; i >= LDBL_MIN_EXP-100 && x > (long double)0.0; i--, x *= (long double)0.5) if (my_ilogbl (x) != i - 1) { result |= 4; break; } } return result; } ]])], [gl_cv_func_ilogbl_works=yes], [gl_cv_func_ilogbl_works=no], [case "$host_os" in aix* | haiku*) gl_cv_func_ilogbl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ilogbl_works="guessing yes" ;; *) gl_cv_func_ilogbl_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/imaxabs.m4���������������������������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0016477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# imaxabs.m4 serial 4 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_IMAXABS], [ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) dnl On OSF/1 5.1 with cc, this function is declared but not defined. AC_CHECK_FUNCS_ONCE([imaxabs]) AC_CHECK_DECLS_ONCE([imaxabs]) if test "$ac_cv_have_decl_imaxabs" != yes; then HAVE_DECL_IMAXABS=0 fi ]) # Prerequisites of lib/imaxabs.c. AC_DEFUN([gl_PREREQ_IMAXABS], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/imaxdiv.m4���������������������������������������������������������������0000664�0000000�0000000�00000002245�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# imaxdiv.m4 serial 5 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_IMAXDIV], [ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) dnl On OSF/1 5.1 with cc, this function is declared but not defined. AC_CHECK_FUNCS_ONCE([imaxdiv]) AC_CHECK_DECLS_ONCE([imaxdiv]) if test "$ac_cv_have_decl_imaxdiv" != yes; then HAVE_DECL_IMAXDIV=0 fi AC_CACHE_CHECK([whether <inttypes.h> defines imaxdiv_t], [gl_cv_type_imaxdiv_t], [dnl Assume that if imaxdiv is declared, imaxdiv_t is defined. if test $ac_cv_have_decl_imaxdiv = yes; then gl_cv_type_imaxdiv_t=yes else AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <inttypes.h> imaxdiv_t x; ]]) ], [gl_cv_type_imaxdiv_t=yes], [gl_cv_type_imaxdiv_t=no]) fi ]) if test $gl_cv_type_imaxdiv_t = no; then HAVE_IMAXDIV_T=0 fi ]) # Prerequisites of lib/imaxdiv.c. AC_DEFUN([gl_PREREQ_IMAXDIV], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/immutable.m4�������������������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# immutable.m4 serial 1 dnl Copyright (C) 2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_IMMUTABLE], [ AC_REQUIRE([gl_FUNC_MPROTECT_WORKS]) AC_REQUIRE([AC_C_INLINE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/include_next.m4����������������������������������������������������������0000664�0000000�0000000�00000021037�14110572173�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 26 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including <stdio.h>. dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's <math.h>. By virtue of the second bug, we need to use dnl include_next as well in this case. cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) dnl HP NonStop systems, which define __TANDEM, limit the line length dnl after including some system header files. AC_CACHE_CHECK([whether source code line length is unlimited], [gl_cv_source_line_length_unlimited], [AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_source_line_length_unlimited=no], [gl_cv_source_line_length_unlimited=yes]) ]) if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # '<foo.h>'; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next <foo.h> # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like <stddef.h> that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_next_header], [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET([gl_header_exists]) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET([gl_next_header], ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET([gl_next_header])]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET([gl_next_header]) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/inet_ntop.m4�������������������������������������������������������������0000664�0000000�0000000�00000004465�14110572173�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inet_ntop.m4 serial 21 dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_INET_NTOP], [ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) dnl Persuade Solaris <arpa/inet.h> to declare inet_ntop. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Most platforms that provide inet_ntop define it in libc. dnl Solaris 8..10 provide inet_ntop in libnsl instead. dnl Solaris 2.6..7 provide inet_ntop in libresolv instead. dnl Haiku provides it in -lnetwork. dnl Native Windows provides it in -lws2_32 instead, with a declaration in dnl <ws2tcpip.h>, and it uses stdcall calling convention, not cdecl dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). HAVE_INET_NTOP=1 INET_NTOP_LIB= gl_PREREQ_SYS_H_WINSOCK2 if test $HAVE_WINSOCK2_H = 1; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. Set REPLACE_INET_NTOP in order to avoid dnl a name conflict at the linker level, even though the header file dnl <ws2tcpip.h> declares inet_ntop only if _WIN32_WINNT >= 0x0600. REPLACE_INET_NTOP=1 AC_CHECK_DECLS([inet_ntop],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_ntop = yes; then INET_NTOP_LIB="-lws2_32" else HAVE_DECL_INET_NTOP=0 fi else gl_save_LIBS=$LIBS AC_SEARCH_LIBS([inet_ntop], [nsl resolv network], [], [AC_CHECK_FUNCS([inet_ntop]) if test $ac_cv_func_inet_ntop = no; then HAVE_INET_NTOP=0 fi ]) LIBS=$gl_save_LIBS if test "$ac_cv_search_inet_ntop" != "no" \ && test "$ac_cv_search_inet_ntop" != "none required"; then INET_NTOP_LIB="$ac_cv_search_inet_ntop" fi AC_CHECK_HEADERS_ONCE([netdb.h]) AC_CHECK_DECLS([inet_ntop],,, [[#include <arpa/inet.h> #if HAVE_NETDB_H # include <netdb.h> #endif ]]) if test $ac_cv_have_decl_inet_ntop = no; then HAVE_DECL_INET_NTOP=0 fi fi AC_SUBST([INET_NTOP_LIB]) ]) # Prerequisites of lib/inet_ntop.c. AC_DEFUN([gl_PREREQ_INET_NTOP], [ AC_REQUIRE([gl_SOCKET_FAMILIES]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/inet_pton.m4�������������������������������������������������������������0000664�0000000�0000000�00000004460�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inet_pton.m4 serial 19 dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_INET_PTON], [ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) dnl Persuade Solaris <arpa/inet.h> to declare inet_pton. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Most platforms that provide inet_pton define it in libc. dnl Solaris 8..10 provide inet_pton in libnsl instead. dnl Solaris 2.6..7 provide inet_pton in libresolv instead. dnl Haiku provides it in -lnetwork. dnl Native Windows provides it in -lws2_32 instead, with a declaration in dnl <ws2tcpip.h>, and it uses stdcall calling convention, not cdecl dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). HAVE_INET_PTON=1 INET_PTON_LIB= gl_PREREQ_SYS_H_WINSOCK2 if test $HAVE_WINSOCK2_H = 1; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. Set REPLACE_INET_PTON in order to avoid dnl a name conflict at the linker level, even though the header file dnl <ws2tcpip.h> declares inet_pton only if _WIN32_WINNT >= 0x0600. REPLACE_INET_PTON=1 AC_CHECK_DECLS([inet_pton],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_pton = yes; then INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 fi else gl_save_LIBS=$LIBS AC_SEARCH_LIBS([inet_pton], [nsl resolv network], [], [AC_CHECK_FUNCS([inet_pton]) if test $ac_cv_func_inet_pton = no; then HAVE_INET_PTON=0 fi ]) LIBS=$gl_save_LIBS if test "$ac_cv_search_inet_pton" != "no" \ && test "$ac_cv_search_inet_pton" != "none required"; then INET_PTON_LIB="$ac_cv_search_inet_pton" fi AC_CHECK_HEADERS_ONCE([netdb.h]) AC_CHECK_DECLS([inet_pton],,, [[#include <arpa/inet.h> #if HAVE_NETDB_H # include <netdb.h> #endif ]]) if test $ac_cv_have_decl_inet_pton = no; then HAVE_DECL_INET_PTON=0 fi fi AC_SUBST([INET_PTON_LIB]) ]) # Prerequisites of lib/inet_pton.c. AC_DEFUN([gl_PREREQ_INET_PTON], [ AC_REQUIRE([gl_SOCKET_FAMILIES]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/inline.m4����������������������������������������������������������������0000664�0000000�0000000�00000003154�14110572173�0016342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inline.m4 serial 4 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test for the 'inline' keyword or equivalent. dnl Define 'inline' to a supported equivalent, or to nothing if not supported, dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an dnl equivalent is effectively supported, i.e. if the compiler is likely to dnl drop unused 'static inline' functions. AC_DEFUN([gl_INLINE], [ AC_REQUIRE([AC_C_INLINE]) AC_CACHE_CHECK([whether the compiler generally respects inline], [gl_cv_c_inline_effective], [if test $ac_cv_c_inline = no; then gl_cv_c_inline_effective=no else dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is dnl specified. dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result dnl depends on optimization flags, which can be in CFLAGS. dnl (AC_EGREP_CPP looks only at the CPPFLAGS.) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[#ifdef __NO_INLINE__ #error "inline is not effective" #endif]])], [gl_cv_c_inline_effective=yes], [gl_cv_c_inline_effective=no]) fi ]) if test $gl_cv_c_inline_effective = yes; then AC_DEFINE([HAVE_INLINE], [1], [Define to 1 if the compiler supports one of the keywords 'inline', '__inline__', '__inline' and effectively inlines functions marked as such.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/intl-thread-locale.m4����������������������������������������������������0000664�0000000�0000000�00000017616�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intl-thread-locale.m4 serial 9 dnl Copyright (C) 2015-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Check how to retrieve the name of a per-thread locale (POSIX locale_t). dnl Sets gt_nameless_locales. AC_DEFUN([gt_INTL_THREAD_LOCALE_NAME], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Test whether uselocale() exists and works at all. gt_FUNC_USELOCALE dnl On OpenBSD >= 6.2, the locale_t type and the uselocale(), newlocale(), dnl duplocale(), freelocale() functions exist but are effectively useless, dnl because the locale_t value depends only on the LC_CTYPE category of the dnl locale and furthermore contains only one bit of information (it dnl distinguishes the "C" locale from the *.UTF-8 locales). See dnl <https://cvsweb.openbsd.org/src/lib/libc/locale/newlocale.c?rev=1.1&content-type=text/x-cvsweb-markup>. dnl In the setlocale() implementation they have thought about the programs dnl that use the API ("Even though only LC_CTYPE has any effect in the dnl OpenBSD base system, store complete information about the global locale, dnl such that third-party software can access it"), but for uselocale() dnl they did not think about the programs. dnl In this situation, even the HAVE_NAMELESS_LOCALES support does not work. dnl So, define HAVE_FAKE_LOCALES and disable all locale_t support. case "$gt_cv_func_uselocale_works" in *yes) AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_CACHE_CHECK([for fake locale system (OpenBSD)], [gt_cv_locale_fake], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif int main () { locale_t loc1, loc2; if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) return 1; if (setlocale (LC_ALL, "fr_FR.UTF-8") == NULL) return 1; loc1 = newlocale (LC_ALL_MASK, "de_DE.UTF-8", (locale_t)0); loc2 = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", (locale_t)0); return !(loc1 == loc2); }]])], [gt_cv_locale_fake=yes], [gt_cv_locale_fake=no], [dnl Guess the locale system is fake only on OpenBSD. case "$host_os" in openbsd*) gt_cv_locale_fake="guessing yes" ;; *) gt_cv_locale_fake="guessing no" ;; esac ]) ]) ;; *) gt_cv_locale_fake=no ;; esac case "$gt_cv_locale_fake" in *yes) gt_fake_locales=yes AC_DEFINE([HAVE_FAKE_LOCALES], [1], [Define if the locale_t type contains insufficient information, as on OpenBSD.]) ;; *) gt_fake_locales=no ;; esac case "$gt_cv_func_uselocale_works" in *yes) AC_CACHE_CHECK([for Solaris 11.4 locale system], [gt_cv_locale_solaris114], [case "$host_os" in solaris*) dnl Test whether <locale.h> defines locale_t as a typedef of dnl 'struct _LC_locale_t **' (whereas Illumos defines it as a dnl typedef of 'struct _locale *'). dnl Another possible test would be to include <sys/localedef.h> dnl and test whether it defines the _LC_core_data_locale_t type. dnl This type was added in Solaris 11.4. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <locale.h> struct _LC_locale_t *x; locale_t y; ]], [[*y = x;]])], [gt_cv_locale_solaris114=yes], [gt_cv_locale_solaris114=no]) ;; *) gt_cv_locale_solaris114=no ;; esac ]) ;; *) gt_cv_locale_solaris114=no ;; esac if test $gt_cv_locale_solaris114 = yes; then AC_DEFINE([HAVE_SOLARIS114_LOCALES], [1], [Define if the locale_t type is as on Solaris 11.4.]) fi dnl Solaris 12 will maybe provide getlocalename_l. If it does, it will dnl improve the implementation of gl_locale_name_thread(), by removing dnl the use of undocumented structures. case "$gt_cv_func_uselocale_works" in *yes) AC_CHECK_FUNCS([getlocalename_l]) ;; esac dnl This code is for platforms where the locale_t type does not provide access dnl to the name of each locale category. This code has the drawback that it dnl requires the gnulib overrides of 'newlocale', 'duplocale', 'freelocale', dnl which is a problem for GNU libunistring. Therefore try hard to avoid dnl enabling this code! gt_nameless_locales=no case "$host_os" in dnl It's needed on AIX 7.2. aix*) gt_nameless_locales=yes AC_DEFINE([HAVE_NAMELESS_LOCALES], [1], [Define if the locale_t type does not contain the name of each locale category.]) ;; esac dnl We cannot support uselocale() on platforms where the locale_t type is dnl fake. So, set dnl gt_good_uselocale = gt_working_uselocale && !gt_fake_locales. if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then gt_good_uselocale=yes AC_DEFINE([HAVE_GOOD_USELOCALE], [1], [Define if the uselocale exists, may be safely called, and returns sufficient information.]) else gt_good_uselocale=no fi dnl Set gt_localename_enhances_locale_funcs to indicate whether localename.c dnl overrides newlocale(), duplocale(), freelocale() to keep track of locale dnl names. if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then gt_localename_enhances_locale_funcs=yes LOCALENAME_ENHANCE_LOCALE_FUNCS=1 AC_DEFINE([LOCALENAME_ENHANCE_LOCALE_FUNCS], [1], [Define if localename.c overrides newlocale(), duplocale(), freelocale().]) else gt_localename_enhances_locale_funcs=no fi ]) dnl Tests whether uselocale() exists and is usable. dnl Sets gt_working_uselocale and defines HAVE_WORKING_USELOCALE. AC_DEFUN([gt_FUNC_USELOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([uselocale]) dnl On AIX 7.2, the uselocale() function is not documented and leads to dnl crashes in subsequent setlocale() invocations. dnl In 2019, some versions of z/OS lack the locale_t type and have a broken dnl uselocale function. if test $ac_cv_func_uselocale = yes; then AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_CACHE_CHECK([whether uselocale works], [gt_cv_func_uselocale_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif locale_t loc1; int main () { uselocale (NULL); setlocale (LC_ALL, "en_US.UTF-8"); return 0; }]])], [gt_cv_func_uselocale_works=yes], [gt_cv_func_uselocale_works=no], [# Guess no on AIX and z/OS, yes otherwise. case "$host_os" in aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; *) gt_cv_func_uselocale_works="guessing yes" ;; esac ]) ]) else gt_cv_func_uselocale_works=no fi case "$gt_cv_func_uselocale_works" in *yes) gt_working_uselocale=yes AC_DEFINE([HAVE_WORKING_USELOCALE], [1], [Define if the uselocale function exists and may safely be called.]) ;; *) gt_working_uselocale=no ;; esac ]) ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/intlmacosx.m4������������������������������������������������������������0000664�0000000�0000000�00000006235�14110572173�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 8 (gettext-0.20.2) dnl Copyright (C) 2004-2014, 2016, 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.4. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFPreferences.h>]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, dnl because in macOS 10.13.4 it has the following behaviour: dnl When two or more languages are specified in the dnl "System Preferences > Language & Region > Preferred Languages" panel, dnl it returns en_CC where CC is the territory (even when English is not among dnl the preferred languages!). What we want instead is what dnl CFLocaleCopyCurrent returned in earlier macOS releases and what dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFLocale.h>]], [[CFLocaleCopyPreferredLanguages();]])], [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/intmax_t.m4��������������������������������������������������������������0000664�0000000�0000000�00000003544�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intmax_t.m4 serial 9 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.53]) # Define intmax_t to 'long' or 'long long' # if it is not already defined in <stdint.h> or <inttypes.h>. AC_DEFUN([gl_AC_TYPE_INTMAX_T], [ dnl For simplicity, we assume that a header file defines 'intmax_t' if and dnl only if it defines 'uintmax_t'. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <inttypes.h> and <stdint.h> don't define.]) else AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) fi ]) dnl An alternative would be to explicitly test for 'intmax_t'. AC_DEFUN([gt_AC_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stddef.h> #include <stdlib.h> #if HAVE_STDINT_H_WITH_UINTMAX #include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include <inttypes.h> #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) else AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/inttostr.m4��������������������������������������������������������������0000664�0000000�0000000�00000001454�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2004-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_INTTOSTR], [ gl_PREREQ_INTTOSTR gl_PREREQ_IMAXTOSTR gl_PREREQ_OFFTOSTR gl_PREREQ_UMAXTOSTR gl_PREREQ_UINTTOSTR ]) # Prerequisites of lib/inttostr.h. AC_DEFUN([gl_PREREQ_INTTOSTR], [ AC_REQUIRE([AC_TYPE_OFF_T]) : ]) # Prerequisites of lib/imaxtostr.c. AC_DEFUN([gl_PREREQ_IMAXTOSTR], [:]) # Prerequisites of lib/offtostr.c. AC_DEFUN([gl_PREREQ_OFFTOSTR], [:]) # Prerequisites of lib/umaxtostr.c. AC_DEFUN([gl_PREREQ_UMAXTOSTR], [:]) # Prerequisites of lib/uinttostr.c. AC_DEFUN([gl_PREREQ_UINTTOSTR], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/inttypes.m4��������������������������������������������������������������0000664�0000000�0000000�00000013772�14110572173�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes.m4 serial 35 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price, Bruno Haible. dnl Test whether <inttypes.h> is supported or must be substituted. AC_DEFUN_ONCE([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN ]) AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], [ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) dnl Override <inttypes.h> always, so that the portability warnings work. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([inttypes.h]) AC_REQUIRE([gl_MULTIARCH]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ PRIPTR_PREFIX= if test -n "$STDINT_H"; then dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or dnl 'long long', depending on _WIN64. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef _WIN64 LLP64 #endif ]]) ], [PRIPTR_PREFIX='"l"'], [PRIPTR_PREFIX='"ll"']) else dnl Using the system's <stdint.h>. for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> extern intptr_t foo; extern $gltype1 foo;]])], [PRIPTR_PREFIX='"'$glpfx'"']) test -n "$PRIPTR_PREFIX" && break done fi AC_SUBST([PRIPTR_PREFIX]) gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT32_MAX_LT_INTMAX_MAX], [defined INT32_MAX && defined INTMAX_MAX], [INT32_MAX < INTMAX_MAX], [sizeof (int) < sizeof (long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT64_MAX_EQ_LONG_MAX], [defined INT64_MAX], [INT64_MAX == LONG_MAX], [sizeof (long long int) == sizeof (long int)]) else INT64_MAX_EQ_LONG_MAX=-1 fi gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT32_MAX_LT_UINTMAX_MAX], [defined UINT32_MAX && defined UINTMAX_MAX], [UINT32_MAX < UINTMAX_MAX], [sizeof (unsigned int) < sizeof (unsigned long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT64_MAX_EQ_ULONG_MAX], [defined UINT64_MAX], [UINT64_MAX == ULONG_MAX], [sizeof (unsigned long long int) == sizeof (unsigned long int)]) else UINT64_MAX_EQ_ULONG_MAX=-1 fi ]) # Define the symbol $1 to be 1 if the condition is true, 0 otherwise. # If $2 is true, the condition is $3; otherwise if long long int is supported # approximate the condition with $4; otherwise, assume the condition is false. # The condition should work on all C99 platforms; the approximations should be # good enough to work on all practical pre-C99 platforms. # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], [ AC_CACHE_CHECK([whether $3], [gl_cv_test_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if $2 #define CONDITION ($3) #else #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], [gl_cv_test_$1=no])]) if test $gl_cv_test_$1 = yes; then $1=1; else $1=0; fi AC_SUBST([$1]) ]) # gl_INTTYPES_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_INTTYPES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) ������gnulib-20210822~d383792/m4/inttypes_h.m4������������������������������������������������������������0000664�0000000�0000000�00000001774�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <inttypes.h> ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) ����gnulib-20210822~d383792/m4/ioctl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003043�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ioctl.m4 serial 6 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_IOCTL], [ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H]) HAVE_IOCTL=1 if test "$ac_cv_header_winsock2_h" = yes; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the ioctl() function. So enable the support for sockets. HAVE_IOCTL=0 else AC_CHECK_FUNCS([ioctl]) dnl On glibc systems, the second parameter is 'unsigned long int request', dnl not 'int request'. We cannot simply cast the function pointer, but dnl instead need a wrapper. AC_CACHE_CHECK([for ioctl with POSIX signature], [gl_cv_func_ioctl_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/ioctl.h> /* On some platforms, ioctl() is declared in <unistd.h>. */ #include <unistd.h> ]], [[extern #ifdef __cplusplus "C" #endif int ioctl (int, int, ...); ]]) ], [gl_cv_func_ioctl_posix_signature=yes], [gl_cv_func_ioctl_posix_signature=no]) ]) if test $gl_cv_func_ioctl_posix_signature != yes; then REPLACE_IOCTL=1 fi fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isapipe.m4���������������������������������������������������������������0000664�0000000�0000000�00000005502�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether a file descriptor is a pipe. dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_ISAPIPE], [ # OpenVMS has isapipe already, so check for it. AC_CHECK_FUNCS([isapipe]) if test $ac_cv_func_isapipe = yes; then HAVE_ISAPIPE=1 else HAVE_ISAPIPE=0 fi ]) # Prerequisites of lib/isapipe.c. AC_DEFUN([gl_PREREQ_ISAPIPE], [ AC_CACHE_CHECK([whether pipes are FIFOs (and for their link count)], [gl_cv_pipes_are_fifos], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #ifndef S_ISFIFO #define S_ISFIFO(m) 0 #endif #ifndef S_ISSOCK #define S_ISSOCK(m) 0 #endif int main (int argc, char **argv) { int fd[2]; struct stat st; if (pipe (fd) != 0) return 1; if (fstat (fd[0], &st) != 0) return 2; if (2 <= argc && argv[1][0] == '-') { char const *yesno = (S_ISFIFO (st.st_mode) ? "yes" : "no"); if (st.st_nlink <= 1) { long int i = st.st_nlink; if (i != st.st_nlink) return 3; printf ("%s (%ld)\n", yesno, i); } else { unsigned long int i = st.st_nlink; if (i != st.st_nlink) return 4; printf ("%s (%lu)\n", yesno, i); } } else { if (! S_ISFIFO (st.st_mode) && ! S_ISSOCK (st.st_mode)) return 5; } return 0; }]])], [gl_cv_pipes_are_fifos=`./conftest$ac_exeext -` test -z "$gl_cv_pipes_are_fifos" && gl_cv_pipes_are_fifos=no], [gl_cv_pipes_are_fifos=unknown], [gl_cv_pipes_are_fifos=cross-compiling])]) case $gl_cv_pipes_are_fifos in #( 'yes ('*')') AC_DEFINE([HAVE_FIFO_PIPES], [1], [Define to 1 if pipes are FIFOs, 0 if sockets. Leave undefined if not known.]);; #( 'no ('*')') AC_DEFINE([HAVE_FIFO_PIPES], [0]);; esac case $gl_cv_pipes_are_fifos in #( *'('*')') AC_DEFINE_UNQUOTED([PIPE_LINK_COUNT_MAX], [`expr "$gl_cv_pipes_are_fifos" : '.*\((.*)\)'`], [Define to the maximum link count that a true pipe can have.]);; esac ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isatty.m4����������������������������������������������������������������0000664�0000000�0000000�00000001242�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isatty.m4 serial 3 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISATTY], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On native Windows, the system's isatty(), defined as an alias of _isatty() dnl in the "oldnames" library, returns true for the NUL device. case $host_os in mingw*) REPLACE_ISATTY=1 ;; esac ]) # Prerequisites of lib/isatty.c. AC_DEFUN([gl_PREREQ_ISATTY], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isblank.m4���������������������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0016500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isblank.m4 serial 3 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISBLANK], [ dnl Persuade glibc <ctype.h> to declare isblank(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([isblank]) if test $ac_cv_func_isblank = no; then HAVE_ISBLANK=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isfinite.m4��������������������������������������������������������������0000664�0000000�0000000�00000013005�14110572173�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isfinite.m4 serial 17 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ISFINITE], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <math.h> to declare isfinite. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([isfinite], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_isfinite" = yes; then gl_CHECK_MATH_LIB([ISFINITE_LIBM], [x = isfinite (x) + isfinite ((float) x);]) if test "$ISFINITE_LIBM" != missing; then dnl Test whether isfinite() on 'long double' works. gl_ISFINITEL_WORKS case "$gl_cv_func_isfinitel_works" in *yes) ;; *) ISFINITE_LIBM=missing;; esac dnl Also, isfinite() on 'double' does not work on Linux/ia64 (because of dnl signalling NaNs). But this does not have to be tested, since dnl isfinite(long double) also does not work in this situation. fi fi dnl On Solaris 10, with CC in C++ mode, isfinite is not available although dnl is with cc in C mode. This cannot be worked around by defining dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on dnl Solaris 11.0. Therefore use the replacement functions on Solaris. if test "$ac_cv_have_decl_isfinite" != yes \ || test "$ISFINITE_LIBM" = missing \ || { case "$host_os" in solaris*) true;; *) false;; esac; }; then REPLACE_ISFINITE=1 dnl No libraries are needed to link lib/isfinite.c. ISFINITE_LIBM= fi AC_SUBST([ISFINITE_LIBM]) ]) dnl Test whether isfinite() on 'long double' recognizes all canonical values dnl which are neither finite nor infinite. AC_DEFUN([gl_ISFINITEL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isfinite(long double) works], [gl_cv_func_isfinitel_works], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; { memory_long_double m; unsigned int i; /* The isfinite macro should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (isfinite (m.value)) result |= 1; } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (isfinite (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (isfinite (x.value)) result |= 2; } /* isfinite should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isfinite (x.value) && !isfinite (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isfinite (x.value) && !isfinite (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isfinite (x.value) && !isfinite (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isfinite (x.value) && !isfinite (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isfinite (x.value) && !isfinite (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isfinitel_works=yes], [gl_cv_func_isfinitel_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_isfinitel_works="guessing no" ;; *) gl_cv_func_isfinitel_works="guessing yes" ;; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isinf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000013035�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isinf.m4 serial 13 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ISINF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <math.h> to declare isinf. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([isinf], , , [[#include <math.h> #ifndef isinf #error "isinf must be a macro, not a function" #endif ]]) if test "$ac_cv_have_decl_isinf" = yes; then gl_CHECK_MATH_LIB([ISINF_LIBM], [x = isinf (x) + isinf ((float) x);]) if test "$ISINF_LIBM" != missing; then dnl Test whether isinf() on 'long double' works. gl_ISINFL_WORKS case "$gl_cv_func_isinfl_works" in *yes) ;; *) ISINF_LIBM=missing;; esac fi fi dnl On Solaris 10, with CC in C++ mode, isinf is not available although dnl is with cc in C mode. This cannot be worked around by defining dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on dnl Solaris 11.0. Therefore use the replacement functions on Solaris. if test "$ac_cv_have_decl_isinf" != yes \ || test "$ISINF_LIBM" = missing \ || { case "$host_os" in solaris*) true;; *) false;; esac; }; then REPLACE_ISINF=1 dnl No libraries are needed to link lib/isinf.c. ISINF_LIBM= fi AC_SUBST([ISINF_LIBM]) ]) dnl Test whether isinf() works: dnl 1) Whether it correctly returns false for LDBL_MAX. dnl 2) Whether on 'long double' recognizes all canonical values which are dnl infinite. AC_DEFUN([gl_ISINFL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isinf(long double) works], [gl_cv_func_isinfl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (isinf (LDBL_MAX)) result |= 1; { memory_long_double m; unsigned int i; /* The isinf macro should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (isinf (m.value)) result |= 2; } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (isinf (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (isinf (x.value)) result |= 2; } /* isinf should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isinf (x.value) && !isinf (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isinf (x.value) && !isinf (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isinf (x.value) && !isinf (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isinf (x.value) && !isinf (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isinf (x.value) && !isinf (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isinfl_works=yes], [gl_cv_func_isinfl_works=no], [case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isinfl_works="guessing yes"], [gl_cv_func_isinfl_works="guessing no"]) ;; *) gl_cv_func_isinfl_works="guessing yes" ;; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isnan.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002747�14110572173�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnan.m4 serial 5 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ISNAN], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ISNANF]) AC_REQUIRE([gl_FUNC_ISNAND]) AC_REQUIRE([gl_FUNC_ISNANL]) # If we replaced any of the underlying isnan* functions, replace # the isnan macro; it undoubtedly suffers from the same flaws. AC_MSG_CHECKING([whether isnan macro works]) if test $gl_func_isnanf = yes \ && test $gl_func_isnand = yes \ && test $gl_func_isnanl = yes; then AC_MSG_RESULT([yes]) ISNAN_LIBM= dnl Append $ISNANF_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates. case " $ISNAN_LIBM " in *" $ISNANF_LIBM "*) ;; *) ISNAN_LIBM="$ISNAN_LIBM $ISNANF_LIBM" ;; esac dnl Append $ISNAND_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates. case " $ISNAN_LIBM " in *" $ISNAND_LIBM "*) ;; *) ISNAN_LIBM="$ISNAN_LIBM $ISNAND_LIBM" ;; esac dnl Append $ISNANL_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates. case " $ISNAN_LIBM " in *" $ISNANL_LIBM "*) ;; *) ISNAN_LIBM="$ISNAN_LIBM $ISNANL_LIBM" ;; esac else AC_MSG_RESULT([no]) dnl REPLACE_ISNAN=1 also makes sure the rpl_isnan[fdl] functions get built. REPLACE_ISNAN=1 ISNAN_LIBM= fi AC_SUBST([ISNAN_LIBM]) ]) �������������������������gnulib-20210822~d383792/m4/isnand.m4����������������������������������������������������������������0000664�0000000�0000000�00000005341�14110572173�0016340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnand.m4 serial 12 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnand(). AC_DEFUN([gl_FUNC_ISNAND], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNAND_LIBM= gl_HAVE_ISNAND_NO_LIBM if test $gl_cv_func_isnand_no_libm = no; then gl_HAVE_ISNAND_IN_LIBM if test $gl_cv_func_isnand_in_libm = yes; then ISNAND_LIBM=-lm fi fi dnl The variable gl_func_isnand set here is used by isnan.m4. if test $gl_cv_func_isnand_no_libm = yes \ || test $gl_cv_func_isnand_in_libm = yes; then gl_func_isnand=yes else gl_func_isnand=no HAVE_ISNAND=0 fi AC_SUBST([ISNAND_LIBM]) ]) dnl Check how to get or define isnand() without linking with libm. AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], [ gl_HAVE_ISNAND_NO_LIBM gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], [Define if the isnan(double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnand definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNAND], [ AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) ]) dnl Test whether isnand() can be used with libm. AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used with libm], [gl_cv_func_isnand_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #elif defined isnan # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_in_libm=yes], [gl_cv_func_isnand_in_libm=no]) LIBS="$save_LIBS" ]) ]) AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], [gl_cv_func_isnand_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_no_libm=yes], [gl_cv_func_isnand_no_libm=no]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/isnanf.m4����������������������������������������������������������������0000664�0000000�0000000�00000012766�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanf.m4 serial 18 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnanf(). AC_DEFUN([gl_FUNC_ISNANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANF_LIBM= gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = no; then gl_HAVE_ISNANF_IN_LIBM if test $gl_cv_func_isnanf_in_libm = yes; then ISNANF_LIBM=-lm fi fi dnl The variable gl_func_isnanf set here is used by isnan.m4. if test $gl_cv_func_isnanf_no_libm = yes \ || test $gl_cv_func_isnanf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANF_LIBM" gl_ISNANF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanf_works" in *yes) gl_func_isnanf=yes ;; *) gl_func_isnanf=no; ISNANF_LIBM= ;; esac else gl_func_isnanf=no fi if test $gl_func_isnanf != yes; then HAVE_ISNANF=0 fi AC_SUBST([ISNANF_LIBM]) ]) dnl Check how to get or define isnanf() without linking with libm. AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], [ gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = yes; then gl_ISNANF_WORKS fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], [Define if the isnan(float) function is available in libc.]) else gl_func_isnanf_no_libm=no fi ]) dnl Prerequisites of replacement isnanf definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANF], [ gl_FLOAT_EXPONENT_LOCATION ]) dnl Test whether isnanf() can be used without libm. AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], [gl_cv_func_isnanf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_no_libm=yes], [gl_cv_func_isnanf_no_libm=no]) ]) ]) dnl Test whether isnanf() can be used with libm. AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used with libm], [gl_cv_func_isnanf_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_in_libm=yes], [gl_cv_func_isnanf_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). AC_DEFUN([gl_ISNANF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; }]])], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], [case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanf_works="guessing yes"], [gl_cv_func_isnanf_works="guessing no"]) ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac ]) ]) ]) ����������gnulib-20210822~d383792/m4/isnanl.m4����������������������������������������������������������������0000664�0000000�0000000�00000016540�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanl.m4 serial 22 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISNANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANL_LIBM= gl_HAVE_ISNANL_NO_LIBM if test $gl_cv_func_isnanl_no_libm = no; then gl_HAVE_ISNANL_IN_LIBM if test $gl_cv_func_isnanl_in_libm = yes; then ISNANL_LIBM=-lm fi fi dnl The variable gl_func_isnanl set here is used by isnan.m4. if test $gl_cv_func_isnanl_no_libm = yes \ || test $gl_cv_func_isnanl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANL_LIBM" gl_FUNC_ISNANL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanl_works" in *yes) gl_func_isnanl=yes ;; *) gl_func_isnanl=no; ISNANL_LIBM= ;; esac else gl_func_isnanl=no fi if test $gl_func_isnanl != yes; then HAVE_ISNANL=0 fi AC_SUBST([ISNANL_LIBM]) ]) AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], [ gl_HAVE_ISNANL_NO_LIBM gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then gl_FUNC_ISNANL_WORKS case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], [Define if the isnan(long double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnanl definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANL], [ gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) ]) dnl Test whether isnanl() can be used without libm. AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], [gl_cv_func_isnanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_no_libm=yes], [gl_cv_func_isnanl_no_libm=no]) ]) ]) dnl Test whether isnanl() can be used with libm. AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used with libm], [gl_cv_func_isnanl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_in_libm=yes], [gl_cv_func_isnanl_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanl() recognizes all canonical numbers which are neither dnl finite nor infinite. AC_DEFUN([gl_FUNC_ISNANL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], [case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanl_works="guessing yes"], [gl_cv_func_isnanl_works="guessing no"]) ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iswblank.m4��������������������������������������������������������������0000664�0000000�0000000�00000001757�14110572173�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswblank.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWBLANK], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) dnl Persuade glibc <wctype.h> to declare iswblank(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([iswblank]) AC_CHECK_DECLS([iswblank], , , [[ #include <wchar.h> #include <wctype.h> ]]) if test $ac_cv_func_iswblank = no; then HAVE_ISWBLANK=0 if test $ac_cv_have_decl_iswblank = yes; then REPLACE_ISWBLANK=1 fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., towupper in <wctype.h>. : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then dnl Redefine only iswblank. : fi fi ]) �����������������gnulib-20210822~d383792/m4/iswctype.m4��������������������������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswctype.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWCTYPE], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) ]) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iswdigit.m4��������������������������������������������������������������0000664�0000000�0000000�00000006332�14110572173�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswdigit.m4 serial 3 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWDIGIT], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_ZH_CN]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl <wctype.h> redefines iswdigit already. REPLACE_ISWDIGIT="$REPLACE_ISWCNTRL" else AC_CACHE_CHECK([whether iswdigit is ISO C compliant], [gl_cv_func_iswdigit_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw*) gl_cv_func_iswdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswdigit_works="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswdigit 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) abort (); return iswdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { /* This fails on mingw, MSVC 14. */ /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); if (!(is == 0)) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 2; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 4; /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); if (!(is == 0)) result |= 8; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on NetBSD 8.0, Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 16; } return result; }]])], [gl_cv_func_iswdigit_works=yes], [gl_cv_func_iswdigit_works=no], [:]) fi ]) case "$gl_cv_func_iswdigit_works" in *yes) ;; *) REPLACE_ISWDIGIT=1 ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/iswxdigit.m4�������������������������������������������������������������0000664�0000000�0000000�00000005663�14110572173�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswxdigit.m4 serial 3 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWXDIGIT], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_ZH_CN]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl <wctype.h> redefines iswxdigit already. REPLACE_ISWXDIGIT="$REPLACE_ISWCNTRL" else AC_CACHE_CHECK([whether iswxdigit is ISO C compliant], [gl_cv_func_iswxdigit_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw*) gl_cv_func_iswxdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswxdigit_works="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswxdigit 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) abort (); return iswxdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); if (!(is == 0)) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 2; /* This fails on MSVC 14. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\357\274\241", 3); if (!(is == 0)) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 8; } return result; }]])], [gl_cv_func_iswxdigit_works=yes], [gl_cv_func_iswxdigit_works=no], [:]) fi ]) case "$gl_cv_func_iswxdigit_works" in *yes) ;; *) REPLACE_ISWXDIGIT=1 ;; esac fi ]) �����������������������������������������������������������������������������gnulib-20210822~d383792/m4/javacomp.m4��������������������������������������������������������������0000664�0000000�0000000�00000106550�14110572173�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# javacomp.m4 serial 18 dnl Copyright (C) 2001-2003, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of javacomp.sh. # gt_JAVACOMP([source-version], [target-version]) # Sets HAVE_JAVACOMP to nonempty if javacomp.sh will allow Java source code # according to source-version to be compiled to Java bytecode classes in the # target-version format. # # source-version can be: support for # 1.3 inner classes # 1.4 assert keyword # 1.5 generic classes and methods # 1.6 (not supported) # 1.7 switch(string) # 1.8 lambdas # 9 private interface methods # 10 type inference for local variables # 11 'var' in parameters of lambda expressions # Instead of source-version 1.6, use 1.5, since Java 6 did not introduce any # language changes. See # https://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html # # target-version can be: classfile version: # 1.1 45.3 # 1.2 46.0 # 1.3 47.0 # 1.4 48.0 # 1.5 49.0 # 1.6 50.0 # 1.7 51.0 # 1.8 52.0 # 9 53.0 # 10 54.0 # 11 55.0 # The classfile version of a .class file can be determined through the "file" # command. More portably, the classfile major version can be determined through # "od -A n -t d1 -j 7 -N 1 classfile". # target-version can also be omitted. In this case, the required target-version # is determined from the found JVM (see macro gt_JAVAEXEC): # target-version for JVM # 1.1 JDK 1.1, jview # 1.2 JDK/JRE 1.2 # 1.3 JDK/JRE 1.3, gij 3.3, 3.4 # 1.4 JDK/JRE 1.4, gij 4.0 ... 4.2 # 1.5 JDK/JRE 5, gij 4.3 ... 6 # 1.6 JDK/JRE 6 # 1.7 JDK/JRE 7 # 1.8 JDK/JRE 8 # 9 JDK/JRE 9 # 10 JDK/JRE 10 # 11 JDK/JRE 11 # Note: gij >= 3.3 can in some cases handle classes compiled with -target 1.4, # and gij >= 4.1 can in some cases partially handle classes compiled with # -target 1.5, but I have no idea how complete this support is. Similarly, # gcj >= 4.3 supports -ftarget=1.6, and gij >= 4.3 can in some cases handle # classes compiled with -target 1.6. # # Specifying target-version is useful when building a library (.jar) that is # useful outside the given package. Omitting target-version is useful when # building an application. # # It is unreasonable to ask for: # - target-version < 1.4 with source-version >= 1.4, or # - target-version < 1.5 with source-version >= 1.5, or # - target_version < 1.6 with source_version >= 1.6, or # - target_version < 1.7 with source_version >= 1.7, or # - target_version < 1.8 with source_version >= 1.8, or # - target_version < 9 with source_version >= 9, or # - target_version < 10 with source_version >= 10, or # - target_version < 11 with source_version >= 11, # because even Sun's/Oracle's javac doesn't support these combinations. # # It is redundant to ask for a target-version > source-version, since the # smaller target-version = source-version will also always work and newer JVMs # support the older target-versions too. Except for the cases # - target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0 # to 3.2 to be used, # - target-version = 1.6, source-version = 1.5, which allows gcj versions # >= 4.3 to be used. AC_DEFUN([gt_JAVACOMP], [ m4_if([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], []) AC_EGREP_CPP([yes], [ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ yes #endif ], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':') source_version=$1 test -n "$source_version" || { AC_MSG_ERROR([missing source-version argument to gt_@&t@JAVACOMP]) } m4_if([$2], [], [if test -n "$HAVE_JAVAEXEC"; then dnl Use $CONF_JAVA to determine the JVM's version. changequote(,)dnl cat > conftestver.java <<EOF public class conftestver { public static void main (String[] args) { System.out.println(System.getProperty("java.specification.version")); } } EOF changequote([,])dnl dnl A precompiled version of conftestver.java, compiled with dnl "javac -target 1.1". This avoids having to compile conftestver.java dnl during each test for a suitable Java compiler. dnl For the conversion from binary to this ASCII encapsulation, avoiding dnl to assume the presence of uudecode, use the command dnl $ od -A n -t o1 < conftestver.class | tr ' ' '\012'| sort | uniq | sed -e '/^$/d' -e 's,^,\\,' | tr -d '\012' dnl and the long tr command in opposite direction. dnl Finally move the position corresponding to \055 to the last position, dnl to work around a coreutils-5.x bug. echo 'yzwx!$!I!D,!)!3+!4!5*!6,!4!7,!8!9)!:)!;"!(MeienN"!$FGW"!%Ojab"!2QeibRohZblVYZgb"!%hYei"!9FXQfYpYKgYidKUnleidLGW"!,Ujol_bPegb"!3_jicnbmnpblJfYpY/!*!+)!</!=!>"!=fYpYJmkb_ece_YnejiJpblmeji/!?!@)!A/!B!C"!._jicnbmnpbl"!3fYpYKgYidKSZfb_n"!3fYpYKgYidKUqmnbh"!$jon"!8QfYpYKejKTleinUnlbYhL"!.dbnTljkblnq"!EFQfYpYKgYidKUnleidLGQfYpYKgYidKUnleidL"!6fYpYKejKTleinUnlbYh"!)kleingi"!8FQfYpYKgYidKUnleidLGW!D!(!)!!!!!#!"!*!+!"!,!!!@!"!"!!!&Hu!"r!!!"!.!!!(!"!!!"!+!/!0!"!,!!!F!#!"!!!/s!#5$v!%t!&r!!!"!.!!!,!#!!!$!.!%!"!1!!!#!2' \ | tr -d '\012\015' \ | tr '!"#$%&()*+,./0123456789:;<=>?@ABCDEFGHJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzI' '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\046\050\051\052\056\057\073\074\076\103\106\114\116\117\120\123\124\126\133\141\142\143\144\145\146\147\151\152\154\155\156\157\160\162\163\164\165\166\171\261\262\266\267\270\272\276\312\376\055' \ > conftestver.class target_version=`{ unset JAVA_HOME echo "$as_me:__oline__: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&AS_MESSAGE_LOG_FD CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&AS_MESSAGE_LOG_FD }` case "$target_version" in 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 | 9 | 10 | 11) ;; 12 | 13 | 14 | 15 | 16 | 17) dnl Assume that these (not yet released) Java versions will behave dnl like the preceding ones. target_version=11 ;; null) dnl JDK 1.1.X returns null. target_version=1.1 ;; *) AC_MSG_WARN([unknown target-version $target_version, please update gt_@&t@JAVACOMP macro]) target_version=1.1 ;; esac else target_version="1.1" fi ], [target_version=$2]) case "$source_version" in 1.3) goodcode='class conftest {}' failcode='class conftestfail { static { assert(true); } }' ;; 1.4) goodcode='class conftest { static { assert(true); } }' failcode='class conftestfail<T> { T foo() { return null; } }' ;; 1.5) goodcode='class conftest<T> { T foo() { return null; } }' failcode='class conftestfail { void foo () { switch ("A") {} } }' ;; 1.7) goodcode='class conftest { void foo () { switch ("A") {} } }' failcode='class conftestfail { void foo () { Runnable r = () -> {}; } }' ;; 1.8) goodcode='class conftest { void foo () { Runnable r = () -> {}; } }' failcode='interface conftestfail { private void foo () {} }' ;; 9) goodcode='interface conftest { private void foo () {} }' failcode='class conftestfail { public void m() { var i = new Integer(0); } }' ;; 10) goodcode='class conftest { public void m() { var i = new Integer(0); } }' failcode='class conftestfail { Readable r = (var b) -> 0; }' ;; 11) goodcode='class conftest { Readable r = (var b) -> 0; }' failcode='class conftestfail syntax error' ;; *) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;; esac case "$target_version" in 1.1) cfversion=45 ;; 1.2) cfversion=46 ;; 1.3) cfversion=47 ;; 1.4) cfversion=48 ;; 1.5) cfversion=49 ;; 1.6) cfversion=50 ;; 1.7) cfversion=51 ;; 1.8) cfversion=52 ;; 9) cfversion=53 ;; 10) cfversion=54 ;; 11) cfversion=55 ;; *) AC_MSG_ERROR([invalid target-version argument to gt_@&t@JAVACOMP: $target_version]) ;; esac # Function to output the classfile version of a file (8th byte) in decimal. if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_classfile_version () { od -A n -t d1 -j 7 -N 1 "[$]1" } else # Use BSD hexdump. func_classfile_version () { dd if="[$]1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi AC_MSG_CHECKING([for Java compiler]) dnl dnl The support of GNU gcj for target-version and source-version: dnl dnl gcj 3.0.4 to 4.2 does not have a way to specify the target-version. dnl It always assumes target-version=1.4 but labels the class files as 1.1. dnl One consequence of this is that gcj compiles GetURL.java to invalid dnl bytecode, which crashes with a VerifyError when executed by Sun Java dnl 1.3.1. The bug is registered as java/7066, see dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066 dnl gcj 4.3 and newer has an option -ftarget=1.X; the maximum supported dnl target-version is 1.6. dnl dnl For gcj < 3.3, the source-version always is 1.3. dnl For 3.3 <= gcj < 4.3, the source-version defaults to 1.4; option dnl "-fno-assert" switches to source-version 1.3. dnl gcj >= 4.3 has an option -fsource=1.X. dnl dnl The support of Sun/Oracle javac for target-version and source-version: dnl dnl javac 1.3: -target 1.1 1.2 1.3 default: 1.1 dnl source always: 1.3 dnl dnl javac 1.4: -target 1.1 1.2 1.3 1.4 default: 1.2 dnl -source 1.3 1.4 default: 1.3 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 or no -source dnl dnl javac 1.5: -target 1.1 1.2 1.3 1.4 1.5 default: 1.5 dnl -source 1.3 1.4 1.5 default: 1.5 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 dnl -target 1.4 only possible with -source 1.3/1.4 dnl dnl javac 1.6: -target 1.1 1.2 1.3 1.4 1.5 1.6 default: 1.6 dnl -source 1.3 1.4 1.5 1.6 default: 1.5 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 dnl -target 1.4 only possible with -source 1.3/1.4 dnl -target 1.5 only possible with -source 1.3/1.4/1.5 or no -source dnl dnl javac 1.7: -target 1.1 1.2 1.3 1.4 1.5 1.6 1.7 default: 1.7 dnl -source 1.3 1.4 1.5 1.6 1.7 default: 1.7 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 dnl -target 1.4 only possible with -source 1.3/1.4 dnl -target 1.5 only possible with -source 1.3/1.4/1.5 dnl -target 1.6 only possible with -source 1.3/1.4/1.5/1.6 dnl dnl javac 1.8: -target 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 default: 1.8 dnl -source 1.3 1.4 1.5 1.6 1.7 1.8 default: 1.8 dnl -target 1.1/1.2/1.3 only possible with -source 1.3 dnl -target 1.4 only possible with -source 1.3/1.4 dnl -target 1.5 only possible with -source 1.3/1.4/1.5 dnl -target 1.6 only possible with -source 1.3/1.4/1.5/1.6 dnl -target 1.7 only possible with -source 1.3/1.4/1.5/1.6/1.7 dnl dnl javac 9: -target 1.6 1.7 1.8 9 default: 9 dnl -source 1.6 1.7 1.8 9 default: 9 dnl -target 1.6 only possible with -source 1.6 dnl -target 1.7 only possible with -source 1.6/1.7 dnl -target 1.8 only possible with -source 1.6/1.7/1.8 dnl dnl javac 10: -target 1.6 1.7 1.8 9 10 default: 10 dnl -source 1.6 1.7 1.8 9 10 default: 10 dnl -target 1.6 only possible with -source 1.6 dnl -target 1.7 only possible with -source 1.6/1.7 dnl -target 1.8 only possible with -source 1.6/1.7/1.8 dnl -target 9 only possible with -source 1.6/1.7/1.8/9 dnl dnl javac 11: -target 1.6 1.7 1.8 9 10 11 default: 11 dnl -source 1.6 1.7 1.8 9 10 11 default: 11 dnl -target 1.6 only possible with -source 1.6 dnl -target 1.7 only possible with -source 1.6/1.7 dnl -target 1.8 only possible with -source 1.6/1.7/1.8 dnl -target 9 only possible with -source 1.6/1.7/1.8/9 dnl -target 10 only possible with -source 1.6/1.7/1.8/9/10 dnl dnl The support of jikes for target-version and source-version: dnl dnl jikes 1.14 does not have a way to specify the target-version. It dnl always assumes target-version=1.1. dnl dnl For jikes 1.14, the source-version always is 1.3. dnl CONF_JAVAC= HAVE_JAVAC_ENVVAR= HAVE_GCJ_C= HAVE_JAVAC= HAVE_JIKES= HAVE_JAVACOMP= changequote(,)dnl cat > conftestlib.java <<EOF public class conftestlib { public static void main (String[] args) { } } EOF changequote([,])dnl echo "$goodcode" > conftest.java echo "$failcode" > conftestfail.java dnl If the user has set the JAVAC environment variable, use that, if it dnl satisfies the constraints (possibly after adding -target and -source dnl options). if test -n "$JAVAC"; then dnl Try the original $JAVAC. if $JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null; then dnl It's a version of gcj. changequote(,)dnl if $JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then changequote([,])dnl dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. dnl Try $JAVAC. rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -fsource option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="$JAVAC -fsource=$source_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 else CONF_JAVAC="$JAVAC" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi else dnl Try with -fsource and -ftarget options. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then CONF_JAVAC="$JAVAC -fsource=$source_version -ftarget=$target_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi fi else dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. if test "$target_version" = 1.4 && test "$source_version" = 1.4; then dnl Try $JAVAC. rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then CONF_JAVAC="$JAVAC" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi else if test "$target_version" = 1.4 && test "$source_version" = 1.3; then dnl Try $JAVAC and "$JAVAC -fno-assert". But add -fno-assert only if dnl it makes a difference. (It could already be part of $JAVAC.) javac_works= rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then javac_works=1 fi javac_noassert_works= rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then javac_noassert_works=1 fi if test -n "$javac_works" && test -n "$javac_noassert_works"; then rm -f conftestfail.class if { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -fno-assert -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then dnl "$JAVAC -fno-assert" works better than $JAVAC. javac_works= fi fi if test -n "$javac_works"; then CONF_JAVAC="$JAVAC" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 else if test -n "$javac_noassert_works"; then CONF_JAVAC="$JAVAC -fno-assert" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi fi fi fi fi else dnl It's not gcj. Assume the classfile versions are correct. dnl Try $JAVAC. dnl The javac option '-source 1.5' has the same meaning as '-source 1.6', dnl but since Java 9 supports only the latter, prefer the latter if a dnl target_version >= 1.6 is requested. if test "$source_version" = 1.5; then case "$target_version" in 1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;; *) source_version='1.6' ;; esac fi rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -source option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="$JAVAC -source $source_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 else CONF_JAVAC="$JAVAC" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi else dnl Try with -target option alone. (Sun javac 1.3.1 has the -target dnl option but no -source option.) rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -source option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD $JAVAC -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="$JAVAC -target $target_version -source $source_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 else CONF_JAVAC="$JAVAC -target $target_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi else dnl Maybe this -target option requires a -source option? Try with dnl -target and -source options. (Supported by Sun javac 1.4 and dnl higher.) rm -f conftest.class if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then CONF_JAVAC="$JAVAC -target $target_version -source $source_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi fi fi fi fi if test -z "$HAVE_JAVACOMP"; then pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG([HAVE_GCJ_IN_PATH], [gcj], [yes]) AC_CHECK_PROG([HAVE_JAVAC_IN_PATH], [javac], [yes]) AC_CHECK_PROG([HAVE_JIKES_IN_PATH], [jikes], [yes]) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_GCJ_IN_PATH"; then dnl Test for a good gcj version (>= 3.0). changequote(,)dnl if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null; then changequote([,])dnl dnl See if libgcj.jar is well installed. if { echo "$as_me:__oline__: gcj -C -d . conftestlib.java" >&AS_MESSAGE_LOG_FD gcj -C -d . conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 }; then dnl OK, gcj works. changequote(,)dnl if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then changequote([,])dnl dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct. dnl Try gcj. rm -f conftest.class if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -fsource option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: gcj -C -d . conftestfail.java" >&AS_MESSAGE_LOG_FD gcj -C -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD gcj -C -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="gcj -C -fsource=$source_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 else CONF_JAVAC="gcj -C" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi else dnl Try with -fsource and -ftarget options. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then CONF_JAVAC="gcj -C -fsource=$source_version -ftarget=$target_version" HAVE_JAVAC_ENVVAR=1 HAVE_JAVACOMP=1 fi fi else dnl It's a version of gcj < 4.3. Ignore the version of conftest.class. dnl Now test whether it supports the desired target-version and dnl source-version. if test "$target_version" = 1.4 && test "$source_version" = 1.4; then rm -f conftest.class if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then CONF_JAVAC="gcj -C" HAVE_GCJ_C=1 HAVE_JAVACOMP=1 fi else if test "$target_version" = 1.4 && test "$source_version" = 1.3; then dnl Try gcj and "gcj -fno-assert". But add -fno-assert only if dnl it works (not gcj < 3.3). rm -f conftest.class if { echo "$as_me:__oline__: gcj -C -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then CONF_JAVAC="gcj -C -fno-assert" HAVE_GCJ_C=1 HAVE_JAVACOMP=1 else rm -f conftest.class if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class; then CONF_JAVAC="gcj -C" HAVE_GCJ_C=1 HAVE_JAVACOMP=1 fi fi fi fi fi fi fi fi if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then dnl Test whether javac is usable. if { javac -version >/dev/null 2>/dev/null || test $? -le 2; } \ && ( if javac -help 2>&1 >/dev/null | grep at.dms.kjc.Main >/dev/null && javac -help 2>/dev/null | grep 'released.*2000' >/dev/null ; then exit 1; else exit 0; fi ); then dnl OK, javac works. dnl The javac option '-source 1.5' has the same meaning as '-source 1.6', dnl but since Java 9 supports only the latter, prefer the latter if a dnl target_version >= 1.6 is requested. if test "$source_version" = 1.5; then case "$target_version" in 1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;; *) source_version='1.6' ;; esac fi dnl Now test whether it supports the desired target-version and dnl source-version. rm -f conftest.class if { echo "$as_me:__oline__: javac -d . conftest.java" >&AS_MESSAGE_LOG_FD javac -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -source option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: javac -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD javac -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: javac -d . conftestfail.java" >&AS_MESSAGE_LOG_FD javac -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: javac -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD javac -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="javac -source $source_version" HAVE_JAVAC=1 HAVE_JAVACOMP=1 else CONF_JAVAC="javac" HAVE_JAVAC=1 HAVE_JAVACOMP=1 fi else dnl Try with -target option alone. (Sun javac 1.3.1 has the -target dnl option but no -source option.) rm -f conftest.class if { echo "$as_me:__oline__: javac -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD javac -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then dnl Try adding -source option if it is useful. rm -f conftest.class rm -f conftestfail.class if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \ && { echo "$as_me:__oline__: javac -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD javac -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftestfail.class \ && ! { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD javac -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1 }; then CONF_JAVAC="javac -target $target_version -source $source_version" HAVE_JAVAC=1 HAVE_JAVACOMP=1 else CONF_JAVAC="javac -target $target_version" HAVE_JAVAC=1 HAVE_JAVACOMP=1 fi else dnl Maybe this -target option requires a -source option? Try with dnl -target and -source options. (Supported by Sun javac 1.4 and dnl higher.) rm -f conftest.class if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1 } \ && test -f conftest.class \ && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then CONF_JAVAC="javac -target $target_version -source $source_version" HAVE_JAVAC=1 HAVE_JAVACOMP=1 fi fi fi fi fi if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JIKES_IN_PATH"; then dnl Test whether jikes is usable. if { jikes >/dev/null 2>/dev/null || test $? = 1; } \ && ( # See if the existing CLASSPATH is sufficient to make jikes work. unset JAVA_HOME jikes conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1 error=$? rm -f conftestlib.class exit $error ); then dnl OK, jikes works. dnl Now test whether it supports the desired target-version and dnl source-version. if test "$source_version" = 1.3; then CONF_JAVAC="jikes" HAVE_JIKES=1 HAVE_JAVACOMP=1 fi fi fi fi rm -f conftest*.java conftest*.class if test -n "$HAVE_JAVACOMP"; then ac_result="$CONF_JAVAC" else ac_result="no" fi AC_MSG_RESULT([$ac_result]) AC_SUBST([CONF_JAVAC]) AC_SUBST([CLASSPATH]) AC_SUBST([CLASSPATH_SEPARATOR]) AC_SUBST([HAVE_JAVAC_ENVVAR]) AC_SUBST([HAVE_GCJ_C]) AC_SUBST([HAVE_JAVAC]) AC_SUBST([HAVE_JIKES]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/javaexec.m4��������������������������������������������������������������0000664�0000000�0000000�00000006141�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# javaexec.m4 serial 7 dnl Copyright (C) 2001-2003, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of javaexec.sh. # gt_JAVAEXEC or gt_JAVAEXEC(testclass, its-directory) # Sets HAVE_JAVAEXEC to nonempty if javaexec.sh will work. AC_DEFUN([gt_JAVAEXEC], [ AC_MSG_CHECKING([for Java virtual machine]) AC_EGREP_CPP([yes], [ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ yes #endif ], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':') CONF_JAVA= HAVE_JAVA_ENVVAR= HAVE_GIJ= HAVE_JAVA= HAVE_JRE= HAVE_JVIEW= HAVE_JAVAEXEC=1 if test -n "$JAVA"; then HAVE_JAVA_ENVVAR=1 CONF_JAVA="$JAVA" else pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl AC_CHECK_PROG([HAVE_GIJ_IN_PATH], [gij], [yes]) AC_CHECK_PROG([HAVE_JAVA_IN_PATH], [java], [yes]) AC_CHECK_PROG([HAVE_JRE_IN_PATH], [jre], [yes]) AC_CHECK_PROG([HAVE_JVIEW_IN_PATH], [jview], [yes]) popdef([AC_MSG_RESULT])dnl popdef([AC_CHECKING])dnl popdef([AC_MSG_CHECKING])dnl m4_if([$1], , , [ save_CLASSPATH="$CLASSPATH" CLASSPATH="$2"${CLASSPATH+"$CLASSPATH_SEPARATOR$CLASSPATH"} ]) export CLASSPATH if test -n "$HAVE_GIJ_IN_PATH" \ && gij --version >/dev/null 2>/dev/null \ m4_if([$1], , , [&& { echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD gij $1 >&AS_MESSAGE_LOG_FD 2>&1 }]); then HAVE_GIJ=1 CONF_JAVA="gij" else if test -n "$HAVE_JAVA_IN_PATH" \ && java -version >/dev/null 2>/dev/null \ m4_if([$1], , , [&& { echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD java $1 >&AS_MESSAGE_LOG_FD 2>&1 }]); then HAVE_JAVA=1 CONF_JAVA="java" else if test -n "$HAVE_JRE_IN_PATH" \ && (jre >/dev/null 2>/dev/null || test $? = 1) \ m4_if([$1], , , [&& { echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD jre $1 >&AS_MESSAGE_LOG_FD 2>&1 }]); then HAVE_JRE=1 CONF_JAVA="jre" else if test -n "$HAVE_JVIEW_IN_PATH" \ && (jview -? >/dev/null 2>/dev/null || test $? = 1) \ m4_if([$1], , , [&& { echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD jview $1 >&AS_MESSAGE_LOG_FD 2>&1 }]); then HAVE_JVIEW=1 CONF_JAVA="jview" else HAVE_JAVAEXEC= fi fi fi fi m4_if([$1], , , [ CLASSPATH="$save_CLASSPATH" ]) fi if test -n "$HAVE_JAVAEXEC"; then ac_result="$CONF_JAVA" else ac_result="no" fi AC_MSG_RESULT([$ac_result]) AC_SUBST([CONF_JAVA]) AC_SUBST([CLASSPATH]) AC_SUBST([CLASSPATH_SEPARATOR]) AC_SUBST([HAVE_JAVA_ENVVAR]) AC_SUBST([HAVE_GIJ]) AC_SUBST([HAVE_JAVA]) AC_SUBST([HAVE_JRE]) AC_SUBST([HAVE_JVIEW]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/jm-winsz1.m4�������������������������������������������������������������0000664�0000000�0000000�00000003405�14110572173�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 12 # Copyright (C) 1996, 1999, 2001-2002, 2004, 2006, 2009-2021 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering and Paul Eggert. AC_DEFUN([gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H], [AC_REQUIRE([AC_SYS_POSIX_TERMIOS]) AC_CACHE_CHECK([whether use of TIOCGWINSZ requires termios.h], [gl_cv_sys_tiocgwinsz_needs_termios_h], [gl_cv_sys_tiocgwinsz_needs_termios_h=no if test $ac_cv_sys_posix_termios = yes; then AC_EGREP_CPP([yes], [#include <sys/types.h> # include <termios.h> # ifdef TIOCGWINSZ yes # endif ], [gl_cv_sys_tiocgwinsz_needs_termios_h=yes]) fi ]) ]) AC_DEFUN([gl_WINSIZE_IN_PTEM], [ AC_REQUIRE([AC_SYS_POSIX_TERMIOS]) AC_CACHE_CHECK([whether use of struct winsize requires sys/ptem.h], [gl_cv_sys_struct_winsize_needs_sys_ptem_h], [gl_cv_sys_struct_winsize_needs_sys_ptem_h=yes if test $ac_cv_sys_posix_termios = yes; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <termios.h>]], [[struct winsize x; if (sizeof x > 0) return 0;]])], [gl_cv_sys_struct_winsize_needs_sys_ptem_h=no]) fi if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/ptem.h>]], [[struct winsize x; if (sizeof x > 0) return 0;]])], [], [gl_cv_sys_struct_winsize_needs_sys_ptem_h=no]) fi]) if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then AC_DEFINE([WINSIZE_IN_PTEM], [1], [Define if sys/ptem.h is required for struct winsize.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/jm-winsz2.m4�������������������������������������������������������������0000664�0000000�0000000�00000001750�14110572173�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 1996, 1999, 2001, 2004, 2009-2021 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL], [AC_REQUIRE([gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H]) AC_CACHE_CHECK([whether use of TIOCGWINSZ requires sys/ioctl.h], [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h], [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=no if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no; then AC_EGREP_CPP([yes], [#include <sys/types.h> # include <sys/ioctl.h> # ifdef TIOCGWINSZ yes # endif ], [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=yes]) fi ]) if test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = yes; then AC_DEFINE([GWINSZ_IN_SYS_IOCTL], [1], [Define if your system defines TIOCGWINSZ in sys/ioctl.h.]) fi ]) ������������������������gnulib-20210822~d383792/m4/langinfo_h.m4������������������������������������������������������������0000664�0000000�0000000�00000011234�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# langinfo_h.m4 serial 12 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LANGINFO_H], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([langinfo.h]) dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS. HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 dnl Determine what <langinfo.h> defines. dnl CODESET is missing on OpenBSD 3.8. dnl ERA etc. are missing on OpenBSD 6.7. dnl T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. dnl ALTMON_* are missing on glibc 2.26 and many other systems. AC_CACHE_CHECK([whether langinfo.h defines CODESET], [gl_cv_header_langinfo_codeset], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = CODESET; ]])], [gl_cv_header_langinfo_codeset=yes], [gl_cv_header_langinfo_codeset=no]) ]) if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], [gl_cv_header_langinfo_t_fmt_ampm], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = T_FMT_AMPM; ]])], [gl_cv_header_langinfo_t_fmt_ampm=yes], [gl_cv_header_langinfo_t_fmt_ampm=no]) ]) if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1], [gl_cv_header_langinfo_altmon], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ALTMON_1; ]])], [gl_cv_header_langinfo_altmon=yes], [gl_cv_header_langinfo_altmon=no]) ]) if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi AC_CACHE_CHECK([whether langinfo.h defines ERA], [gl_cv_header_langinfo_era], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ERA; ]])], [gl_cv_header_langinfo_era=yes], [gl_cv_header_langinfo_era=no]) ]) if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], [gl_cv_header_langinfo_yesexpr], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = YESEXPR; ]])], [gl_cv_header_langinfo_yesexpr=yes], [gl_cv_header_langinfo_yesexpr=no]) ]) if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi AC_SUBST([HAVE_LANGINFO_H]) AC_SUBST([HAVE_LANGINFO_CODESET]) AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) AC_SUBST([HAVE_LANGINFO_ALTMON]) AC_SUBST([HAVE_LANGINFO_ERA]) AC_SUBST([HAVE_LANGINFO_YESEXPR]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <langinfo.h> ]], [nl_langinfo]) ]) # gl_LANGINFO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LANGINFO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LANGINFO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NL_LANGINFO]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/largefile.m4�������������������������������������������������������������0000664�0000000�0000000�00000015200�14110572173�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable large files on systems where this is not the default. # Enable support for files on Linux file systems with 64-bit inode numbers. # Copyright 1992-1996, 1998-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: # It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this # setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko # and ftello in C++ mode as well. AC_DEFUN([gl_SET_LARGEFILE_SOURCE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_FUNC_FSEEKO case "$host_os" in hpux*) AC_DEFINE([_LARGEFILE_SOURCE], [1], [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) ;; esac ]) # Work around a problem in Autoconf through at least 2.71 on glibc 2.34+ # with _TIME_BITS. Also, work around a problem in autoconf <= 2.69: # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, # or configures them incorrectly in some cases. m4_version_prereq([2.70], [], [ # _AC_SYS_LARGEFILE_TEST_INCLUDES # ------------------------------- m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], [#include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]];[]dnl ]) ])# m4_version_prereq 2.70 # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, # CACHE-VAR, # DESCRIPTION, # PROLOGUE, [FUNCTION-BODY]) # -------------------------------------------------------- m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], [AC_CACHE_CHECK([for $1 value needed for large files], [$3], [while :; do m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([$5], [$6])], [$3=no; break]) m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([#undef $1 #define $1 $2 $5], [$6])], [$3=$2; break]) $3=unknown break done]) case $$3 in #( no | unknown) ;; *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; esac rm -rf conftest*[]dnl ])# _AC_SYS_LARGEFILE_MACRO_VALUE # AC_SYS_LARGEFILE # ---------------- # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: # http://www.unix.org/version2/whatsnew/lfs20mar.html # Additionally, on Linux file systems with 64-bit inodes a file that happens # to have a 64-bit inode number cannot be accessed by 32-bit applications on # Linux x86/x86_64. This can occur with file systems such as XFS and NFS. AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) AS_IF([test "$enable_largefile" != no], [AC_CACHE_CHECK([for special C compiler options needed for large files], ac_cv_sys_largefile_CC, [ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) AC_COMPILE_IFELSE([], [break]) CC="$CC -n32" AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) break done CC=$ac_save_CC rm -f conftest.$ac_ext fi]) if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits, [Number of bits in a file offset, on hosts where this is settable.], [_AC_SYS_LARGEFILE_TEST_INCLUDES]) AS_CASE([$ac_cv_sys_file_offset_bits], [unknown], [_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1], [ac_cv_sys_large_files], [Define for large files, on AIX-style hosts.], [_AC_SYS_LARGEFILE_TEST_INCLUDES])], [64], [gl_YEAR2038_BODY([])])]) ])# AC_SYS_LARGEFILE # Enable large files on systems where this is implemented by Gnulib, not by the # system headers. # Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib # overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. AC_DEFUN([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows. dnl mingw64 defines off_t to a 64-bit type already, if dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) ]) if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' dnl to 'struct _stat32i64' or 'struct _stat64' (depending on dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) ]) if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) dnl Nothing to do on gnulib's side. dnl A 64-bit off_t is dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, dnl OSF/1, Cygwin, dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on dnl glibc, HP-UX, Solaris, dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, dnl - impossible to achieve on Minix 3.1.8. WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lchmod.m4����������������������������������������������������������������0000664�0000000�0000000�00000001410�14110572173�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. dnl Provide a replacement for lchmod on hosts that lack a working version. AC_DEFUN([gl_FUNC_LCHMOD], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Persuade glibc <sys/stat.h> to declare lchmod(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([lchmod lstat]) if test "$ac_cv_func_lchmod" = no; then HAVE_LCHMOD=0 fi ]) # Prerequisites of lib/lchmod.c. AC_DEFUN([gl_PREREQ_LCHMOD], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lchown.m4����������������������������������������������������������������0000664�0000000�0000000�00000001730�14110572173�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 17 # Determine whether we need the lchown wrapper. dnl Copyright (C) 1998, 2001, 2003-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl Provide lchown on systems that lack it, and work around bugs dnl on systems that have it. AC_DEFUN([gl_FUNC_LCHOWN], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CHOWN]) AC_CHECK_FUNCS_ONCE([lchmod]) AC_CHECK_FUNCS([lchown]) if test $ac_cv_func_lchown = no; then HAVE_LCHOWN=0 else dnl Trailing slash and ctime bugs in chown also occur in lchown. case "$gl_cv_func_chown_slash_works" in *yes) ;; *) REPLACE_LCHOWN=1 ;; esac case "$gl_cv_func_chown_ctime_works" in *yes) ;; *) REPLACE_LCHOWN=1 ;; esac fi ]) ����������������������������������������gnulib-20210822~d383792/m4/lcmessage.m4�������������������������������������������������������������0000664�0000000�0000000�00000002515�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lcmessage.m4 serial 8 dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016, 2019-2021 Free dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995. # Check whether LC_MESSAGES is available in <locale.h>. AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h>]], [[return LC_MESSAGES]])], [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE([HAVE_LC_MESSAGES], [1], [Define if your <locale.h> file defines LC_MESSAGES.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ld-output-def.m4���������������������������������������������������������0000664�0000000�0000000�00000002040�14110572173�0017546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-output-def.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_LD_OUTPUT_DEF() # ------------- # Check if linker supports -Wl,--output-def and define automake # conditional HAVE_LD_OUTPUT_DEF if it is. AC_DEFUN([gl_LD_OUTPUT_DEF], [ AC_CACHE_CHECK([if gcc/ld supports -Wl,--output-def], [gl_cv_ld_output_def], [if test "$enable_shared" = no; then gl_cv_ld_output_def="not needed, shared libraries are disabled" else gl_ldflags_save=$LDFLAGS LDFLAGS="-Wl,--output-def,conftest.def" AC_LINK_IFELSE([AC_LANG_PROGRAM([[]])], [gl_cv_ld_output_def=yes], [gl_cv_ld_output_def=no]) rm -f conftest.def LDFLAGS="$gl_ldflags_save" fi]) AM_CONDITIONAL([HAVE_LD_OUTPUT_DEF], test "x$gl_cv_ld_output_def" = "xyes") ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ld-version-script.m4�����������������������������������������������������0000664�0000000�0000000�00000003204�14110572173�0020444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-version-script.m4 serial 5 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # FIXME: The test below returns a false positive for mingw # cross-compiles, 'local:' statements does not reduce number of # exported symbols in a DLL. Use --disable-ld-version-script to work # around the problem. # gl_LD_VERSION_SCRIPT # -------------------- # Check if LD supports linker scripts, and define automake conditional # HAVE_LD_VERSION_SCRIPT if so. AC_DEFUN([gl_LD_VERSION_SCRIPT], [ AC_ARG_ENABLE([ld-version-script], [AS_HELP_STRING([--enable-ld-version-script], [enable linker version script (default is enabled when possible)])], [have_ld_version_script=$enableval], [AC_CACHE_CHECK([if LD -Wl,--version-script works], [gl_cv_sys_ld_version_script], [gl_cv_sys_ld_version_script=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" echo foo >conftest.map AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [], [cat > conftest.map <<EOF VERS_1 { global: sym; }; VERS_2 { global: sym; } VERS_1; EOF AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [gl_cv_sys_ld_version_script=yes])]) rm -f conftest.map LDFLAGS=$save_LDFLAGS]) have_ld_version_script=$gl_cv_sys_ld_version_script]) AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT], [test "$have_ld_version_script" = yes]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ldd.m4�������������������������������������������������������������������0000664�0000000�0000000�00000022222�14110572173�0015624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldd.m4 serial 1 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Sets LDDPROG to a command and LDDPOSTPROC to a filter command, such that # $LDDPROG program $LDDPOSTPROC # outputs a whitespace-separated list of the dynamically linked dependencies # of the program, as library names (no full pathnames), or nothing if the # program is statically linked or if the service is not supported on the given # system. dnl From Bruno Haible. AC_DEFUN([gl_LDD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) dnl Default values. LDDPROG=':' LDDPOSTPROC= dnl First try objdump, since it works when cross-compiling. AC_CHECK_TOOL([OBJDUMP], [objdump], [false]) changequote(,)dnl if test "$OBJDUMP" != "false"; then LDDPROG="$OBJDUMP -p" dnl The output of "LC_ALL=C objdump -p program" of a program or library dnl looks like this: dnl dnl libnet.so: file format elf32-i386 dnl dnl Program Header: dnl LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12 dnl filesz 0x0001391d memsz 0x0001391d flags r-x dnl LOAD off 0x00013920 vaddr 0x00014920 paddr 0x00014920 align 2**12 dnl filesz 0x00001874 memsz 0x0001b020 flags rw- dnl DYNAMIC off 0x00015104 vaddr 0x00016104 paddr 0x00016104 align 2**2 dnl filesz 0x00000090 memsz 0x00000090 flags rw- dnl dnl Dynamic Section: dnl NEEDED libroot.so dnl SONAME libnet.so dnl SYMBOLIC 0x0 dnl INIT 0x2aec dnl FINI 0x12a2c dnl HASH 0x94 dnl STRTAB 0x1684 dnl SYMTAB 0x774 dnl STRSZ 0xbd5 dnl SYMENT 0x10 dnl PLTGOT 0x15f20 dnl PLTRELSZ 0x320 dnl PLTREL 0x11 dnl JMPREL 0x27cc dnl REL 0x225c dnl RELSZ 0x570 dnl RELENT 0x8 LDDPOSTPROC="2>/dev/null | sed -n -e 's,^ NEEDED *\\([^ ].*\\)\$,\\1,p'" else if test "$cross_compiling" = no; then dnl Not cross-compiling. Try system dependent vendor tools. case "$host_os" in aix*) LDDPROG="dump -H" dnl The output of "LC_ALL=C dump -H program" looks like this: dnl dnl program: dnl dnl ***Loader Section*** dnl Loader Header Information dnl VERSION# #SYMtableENT #RELOCent LENidSTR dnl 0x00000001 0x00000005 0x0000000d 0x0000001e dnl dnl #IMPfilID OFFidSTR LENstrTBL OFFstrTBL dnl 0x00000002 0x00000134 0x0000000d 0x00000152 dnl dnl dnl ***Import File Strings*** dnl INDEX PATH BASE MEMBER dnl 0 /usr/lib:/lib dnl 1 libc.a shr.o dnl LDDPOSTPROC="2>/dev/null | sed -e '/^[^0-9]/d' -e '/^0x/d' | sed -n -e 's,^[0-9]* *\\([^ ]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'" ;; darwin*) LDDPROG="otool -L" dnl The output of "otool -L program" looks like this: dnl program: dnl /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 71.1.4) LDDPOSTPROC="2>/dev/null | sed -n -e 's,^ \\([^ ]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'" ;; hpux*) LDDPROG="chatr" dnl The output of "LC_ALL=C chatr program" looks like this: dnl program: dnl shared executable dnl shared library dynamic path search: dnl SHLIB_PATH disabled second dnl embedded path disabled first Not Defined dnl shared library list: dnl dynamic /usr/lib/libc.2 dnl shared library binding: dnl deferred dnl global hash table disabled dnl plabel caching disabled dnl global hash array size:1103 dnl global hash array nbuckets:3 dnl shared vtable support disabled dnl static branch prediction disabled dnl executable from stack: D (default) dnl kernel assisted branch prediction enabled dnl lazy swap allocation disabled dnl text segment locking disabled dnl data segment locking disabled dnl third quadrant private data space disabled dnl fourth quadrant private data space disabled dnl third quadrant global data space disabled dnl data page size: D (default) dnl instruction page size: D (default) dnl nulptr references disabled dnl shared library private mapping disabled dnl shared library text merging disabled dnl dnl or like this: dnl a.out: dnl 32-bit ELF executable dnl shared library dynamic path search: dnl LD_LIBRARY_PATH enabled first dnl SHLIB_PATH enabled second dnl embedded path enabled third /usr/lib/hpux32:/opt/langtools/lib/hpux32 dnl shared library list: dnl libc.so.1 dnl shared library binding: dnl deferred dnl global hash table disabled dnl global hash table size 1103 dnl shared library mapped private disabled dnl shared library segment merging disabled dnl shared vtable support disabled dnl explicit unloading disabled dnl segments: dnl index type address flags size dnl 7 text 04000000 z---c- D (default) dnl 8 data 40000000 ---m-- D (default) dnl executable from stack: D (default) dnl kernel assisted branch prediction enabled dnl lazy swap allocation for dynamic segments disabled dnl nulptr references disabled dnl address space model: default dnl caliper dynamic instrumentation disabled dnl LDDPOSTPROC="2>/dev/null | sed -e '1,/shared library list:/d' -e '/shared library binding:/,\$d' | sed -e 's,^.*[ ]\\([^ ][^ ]*\\)\$,\\1,' | sed -e 's,^.*/,,'" ;; irix*) LDDPROG="elfdump -Dl" dnl The output of "elfdump -Dl program" looks like this: dnl dnl program: dnl dnl **** MIPS LIBLIST INFORMATION **** dnl .liblist : dnl [INDEX] Timestamp Checksum Flags Name Version dnl [1] Oct 2 05:19:12 1999 0x867bf7a8 ----- libc.so.1 sgi1.0 dnl LDDPOSTPROC="2>/dev/null | sed -n -e 's,^[[][0-9]*[]].* 0x[^ ]* [^ ][^ ]* \\([^ ][^ ]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'" ;; linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) # glibc-based systems LDDPROG="ldd" dnl The output of "ldd program" looks like this: dnl libc.so.6 => /lib/libc.so.6 (0x4002d000) dnl /lib/ld-linux.so.2 (0x40000000) LDDPOSTPROC="2>/dev/null | sed -n -e 's,^ \\([^ ][^ ]*\\).*\$,\\1,p' | sed -e 's,^.*/,,'" ;; osf*) LDDPROG="odump -Dl" dnl The output of "odump -Dl program" looks like this: dnl dnl ***LIBRARY LIST SECTION*** dnl Name Time-Stamp CheckSum Flags Version dnl program: dnl libc.so Dec 30 00:09:30 1997 0x5e955f9b 0 osf.1 dnl LDDPOSTPROC="2>/dev/null | sed -n -e 's,^ \\([^ ][^ ]*\\).*,\\1,p' | sed -e '/^Name\$/d' | sed -e 's,^.*/,,'" ;; solaris*) LDDPROG="ldd" dnl The output of "ldd program" looks like this: dnl libc.so.1 => /usr/lib/libc.so.1 dnl libdl.so.1 => /usr/lib/libdl.so.1 dnl /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1 dnl The first sed collects the indented lines. dnl The second sed extracts the left-hand part. dnl The third sed removes directory specifications. LDDPOSTPROC="2>/dev/null | sed -n -e 's,^ \\([^ ].*\\)\$,\\1,p' | sed -e 's, =>.*\$,,' | sed -e 's,^.*/,,'" ;; esac fi fi dnl Avoid locale dependencies. if test "$LDDPROG" != ":"; then LDDPROG="LC_ALL=C $LDDPROG" fi changequote([,])dnl AC_SUBST([LDDPROG]) AC_SUBST([LDDPOSTPROC]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ldexp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003636�14110572173�0016205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexp.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LDEXP], [ AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM]) LDEXP_LIBM= if test $gl_cv_func_ldexp_no_libm = no; then AC_CACHE_CHECK([whether ldexp() can be used with libm], [gl_cv_func_ldexp_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_in_libm=yes], [gl_cv_func_ldexp_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_ldexp_in_libm = yes; then LDEXP_LIBM=-lm fi fi AC_SUBST([LDEXP_LIBM]) ]) dnl Test whether ldexp() can be used without linking with libm. dnl Set gl_cv_func_ldexp_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_LDEXP_NO_LIBM], [ AC_CACHE_CHECK([whether ldexp() can be used without linking with libm], [gl_cv_func_ldexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_no_libm=yes], [gl_cv_func_ldexp_no_libm=no]) ]) ]) ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ldexpf.m4����������������������������������������������������������������0000664�0000000�0000000�00000001554�14110572173�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexpf.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LDEXPF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LDEXP]) dnl Persuade glibc <math.h> to declare ldexpf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether ldexpf() exists. We cannot assume that ldexpf(), if it dnl exists, is defined in the same library as ldexp(). This is not the case dnl on FreeBSD, NetBSD, OpenBSD. gl_MATHFUNC([ldexpf], [float], [(float, int)]) if test $gl_cv_func_ldexpf_no_libm = no \ && test $gl_cv_func_ldexpf_in_libm = no; then HAVE_LDEXPF=0 LDEXPF_LIBM="$LDEXP_LIBM" fi AC_SUBST([LDEXPF_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ldexpl.m4����������������������������������������������������������������0000664�0000000�0000000�00000007630�14110572173�0016357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexpl.m4 serial 17 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LDEXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM dnl Persuade glibc <math.h> to declare ldexpl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether it's declared. dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) LDEXPL_LIBM= if test $HAVE_DECL_LDEXPL = 1; then gl_CHECK_LDEXPL_NO_LIBM if test $gl_cv_func_ldexpl_no_libm = no; then AC_CACHE_CHECK([whether ldexpl() can be used with libm], [gl_cv_func_ldexpl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[return ldexpl (x, -1) > 0;]])], [gl_cv_func_ldexpl_in_libm=yes], [gl_cv_func_ldexpl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_ldexpl_in_libm = yes; then LDEXPL_LIBM=-lm fi fi if test $gl_cv_func_ldexpl_no_libm = yes \ || test $gl_cv_func_ldexpl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $LDEXPL_LIBM" gl_FUNC_LDEXPL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_ldexpl_works" in *yes) gl_func_ldexpl=yes ;; *) gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;; esac else gl_func_ldexpl=no fi if test $gl_func_ldexpl = yes; then AC_DEFINE([HAVE_LDEXPL], [1], [Define if the ldexpl() function is available.]) fi fi if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then dnl Find libraries needed to link lib/ldexpl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_LDEXP]) LDEXPL_LIBM="$LDEXP_LIBM" else LDEXPL_LIBM="$ISNANL_LIBM" fi fi AC_SUBST([LDEXPL_LIBM]) ]) dnl Test whether ldexpl() can be used without linking with libm. dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM], [ AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], [gl_cv_func_ldexpl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[return ldexpl (x, -1) > 0;]])], [gl_cv_func_ldexpl_no_libm=yes], [gl_cv_func_ldexpl_no_libm=no]) ]) ]) dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 dnl and Mac OS X 10.4/PowerPC). AC_DEFUN([gl_FUNC_LDEXPL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> extern #ifdef __cplusplus "C" #endif long double ldexpl (long double, int); int main() { int result = 0; { volatile long double x = 1.0; volatile long double y = ldexpl (x, -1); if (y != 0.5L) result |= 1; } { volatile long double x = 1.73205L; volatile long double y = ldexpl (x, 0); if (y != x) result |= 2; } return result; }]])], [gl_cv_func_ldexpl_works=yes], [gl_cv_func_ldexpl_works=no], [ changequote(,)dnl case "$host_os" in aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; *) gl_cv_func_ldexpl_works="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lib-ignore.m4������������������������������������������������������������0000664�0000000�0000000�00000011206�14110572173�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# If possible, ignore libraries that are not depended on. dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. # gl_IGNORE_UNUSED_LIBRARIES # -------------------------- # Determines the option to be passed to the C/C++/Fortran compiler, so that it # omits unused libraries. # Example (on Solaris): # $ cc foo.c -lnsl; ldd ./a.out # libnsl.so.1 => /lib/libnsl.so.1 # libc.so.1 => /lib/libc.so.1 # libmp.so.2 => /lib/libmp.so.2 # libmd.so.1 => /lib/libmd.so.1 # libscf.so.1 => /lib/libscf.so.1 # libdoor.so.1 => /lib/libdoor.so.1 # libuutil.so.1 => /lib/libuutil.so.1 # libgen.so.1 => /lib/libgen.so.1 # libm.so.2 => /lib/libm.so.2 # $ cc foo.c -lnsl -Wl,-z,ignore; ldd ./a.out # libc.so.1 => /lib/libc.so.1 # libm.so.2 => /lib/libm.so.2 # # Note that the option works only for the C compiler, not for the C++ # compiler: # - Sun C likes '-Wl,-z,ignore'. # '-Qoption ld -z,ignore' is not accepted. # '-z ignore' is accepted but has no effect. # - Sun C++ and Sun Fortran like '-Qoption ld -z,ignore'. # '-Wl,-z,ignore' is not accepted. # '-z ignore' is accepted but has no effect. # # Sets and substitutes a variable that depends on the current language: # - IGNORE_UNUSED_LIBRARIES_CFLAGS for C # - IGNORE_UNUSED_LIBRARIES_CXXFLAGS for C++ # - IGNORE_UNUSED_LIBRARIES_FFLAGS for Fortran # # Note that the option works only for direct invocation of the compiler, not # through libtool: When libtool is used to create a shared library, it will # honor and translate '-Wl,-z,ignore' to '-Qoption ld -z -Qoption ld ignore' # if needed, but it will drop a '-Qoption ld -z,ignore' on the command line. # AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES], [ AC_CACHE_CHECK([for []_AC_LANG[] compiler flag to ignore unused libraries], [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries], [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=none gl_saved_ldflags=$LDFLAGS gl_saved_libs=$LIBS # Link with -lm to detect binutils 2.16 bug with --as-needed; see # <https://lists.gnu.org/r/bug-gnulib/2006-06/msg00131.html>. LIBS="$LIBS -lm" # Use long option sequences like '-z ignore' to test for the feature, # to forestall problems with linkers that have -z, -i, -g, -n, etc. flags. # GCC + binutils likes '-Wl,--as-needed'. # GCC + Solaris ld likes '-Wl,-z,ignore'. # Sun C likes '-Wl,-z,ignore'. '-z ignore' is accepted but has no effect. # Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11 # native cc issues annoying warnings and then ignores it, # which would cause us to incorrectly conclude that it worked. for gl_flags in _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS do LDFLAGS="$gl_flags $LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM()], [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=$gl_flags]) LDFLAGS=$gl_saved_ldflags test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none && break done LIBS=$gl_saved_libs ]) IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS= if test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none; then IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS="$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" fi AC_SUBST([IGNORE_UNUSED_LIBRARIES_]_AC_LANG_PREFIX[FLAGS]) ]) # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS # ----------------------------------- # Expands to the language dependent options to be tried. AC_DEFUN([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C) # -------------------------------------- m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)], [ '-Wl,--as-needed' \ '-Wl,-z,ignore' \ '-z ignore' ]) # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++) # ---------------------------------------- m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)], [ '-Wl,--as-needed' \ '-Qoption ld -z,ignore' \ '-Wl,-z,ignore' \ '-z ignore' ]) # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77) # ----------------------------------------------- m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)], [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)]) # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran) # -------------------------------------------- m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)], [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lib-ld.m4����������������������������������������������������������������0000664�0000000�0000000�00000012370�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 10 dnl Copyright (C) 1996-2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-2.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld [default=no]])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_save_ifs" fi case $host in *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac ], []) ;; sparc64-*-netbsd*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [], [# The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac ]) ;; esac ]) LD="$acl_cv_path_LD" fi if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([no acceptable ld found in \$PATH]) fi AC_LIB_PROG_LD_GNU ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lib-link.m4��������������������������������������������������������������0000664�0000000�0000000�00000105607�14110572173�0016573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 32 dnl Copyright (C) 2001-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Complain if config.rpath is missing. AC_REQUIRE_AUX_FILE([config.rpath]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], [[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. dnl But on GNU systems, ignore -lc options, because dnl - linking with libc is the default anyway, dnl - linking with libc.a may produce an error dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" dnl or may produce an executable that always crashes, see dnl <https://lists.gnu.org/archive/html/grep-devel/2020-09/msg00052.html>. dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lib-prefix.m4������������������������������������������������������������0000664�0000000�0000000�00000027566�14110572173�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 19 dnl Copyright (C) 2001-2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a function acl_is_expected_elfclass, that tests whether standard input dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing dnl the basename of the libdir to try in turn, either "lib" or "lib64" or dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib, lib32, and lib64. dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. dnl We determine the compiler's default mode by looking at the compiler's dnl library search path. If at least one of its elements ends in /lib64 or dnl points to a directory whose absolute pathname ends in /lib64, we use that dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], [AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_elf=yes], [gl_cv_elf=no]) ]) if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. changequote(,)dnl case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac changequote([,])dnl else acl_is_expected_elfclass () { : } fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [dnl Try 'lib' first, because that's the default for libdir in GNU, see dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. dnl Find the compiler's search path. However, non-system compilers dnl sometimes have odd library search paths. But we can't simply invoke dnl '/usr/bin/gcc -print-search-dirs' because that would not take into dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and dnl acl_libdirstem3. changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` changequote([,])dnl ]) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libgcrypt.m4�������������������������������������������������������������0000664�0000000�0000000�00000014142�14110572173�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libgcrypt.m4 - Autoconf macros to detect libgcrypt # Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020 g10 Code GmbH # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Last-changed: 2020-09-27 dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS. dnl MINIMUM-VERSION is a string with the version number optionally prefixed dnl with the API version to also check the API compatibility. Example: dnl a MINIMUM-VERSION of 1:1.2.5 won't pass the test unless the installed dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using dnl this features allows to prevent build against newer versions of libgcrypt dnl with a changed API. dnl dnl If a prefix option is not used, the config script is first dnl searched in $SYSROOT/bin and then along $PATH. If the used dnl config script does not match the host specification the script dnl is added to the gpg_config_script_warn variable. dnl AC_DEFUN([AM_PATH_LIBGCRYPT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_WITH(libgcrypt-prefix, AS_HELP_STRING([--with-libgcrypt-prefix=PFX], [prefix where LIBGCRYPT is installed (optional)]), libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="") if test x"${LIBGCRYPT_CONFIG}" = x ; then if test x"${libgcrypt_config_prefix}" != x ; then LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config" fi fi use_gpgrt_config="" if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then if $GPGRT_CONFIG libgcrypt --exists; then LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt" AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config]) use_gpgrt_config=yes fi fi if test -z "$use_gpgrt_config"; then if test x"${LIBGCRYPT_CONFIG}" = x ; then case "${SYSROOT}" in /*) if test -x "${SYSROOT}/bin/libgcrypt-config" ; then LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config" fi ;; '') ;; *) AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.]) ;; esac fi AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no) fi tmp=ifelse([$1], ,1:1.2.0,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_libgcrypt_api=0 min_libgcrypt_version="$tmp" fi AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version) ok=no if test "$LIBGCRYPT_CONFIG" != "no" ; then req_major=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test -z "$use_gpgrt_config"; then libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` else libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion` fi major=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` minor=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` micro=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -gt "$req_minor"; then ok=yes else if test "$minor" -eq "$req_minor"; then if test "$micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then AC_MSG_RESULT([yes ($libgcrypt_config_version)]) else AC_MSG_RESULT(no) fi if test $ok = yes; then # If we have a recent libgcrypt, we should also check that the # API is compatible if test "$req_libgcrypt_api" -gt 0 ; then if test -z "$use_gpgrt_config"; then tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` else tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0` fi if test "$tmp" -gt 0 ; then AC_MSG_CHECKING([LIBGCRYPT API version]) if test "$req_libgcrypt_api" -eq "$tmp" ; then AC_MSG_RESULT([okay]) else ok=no AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp]) fi fi fi fi if test $ok = yes; then LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` ifelse([$2], , :, [$2]) if test -z "$use_gpgrt_config"; then libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` else libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none` fi if test x"$libgcrypt_config_host" != xnone ; then if test x"$libgcrypt_config_host" != x"$host" ; then AC_MSG_WARN([[ *** *** The config script "$LIBGCRYPT_CONFIG" was *** built for $libgcrypt_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-libgcrypt-prefix *** to specify a matching config script or use \$SYSROOT. ***]]) gpg_config_script_warn="$gpg_config_script_warn libgcrypt" fi fi else LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libgmp.m4����������������������������������������������������������������0000664�0000000�0000000�00000004772�14110572173�0016345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libgmp.m4 serial 5 # Configure the GMP library or a replacement. dnl Copyright 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_LIBGMP dnl Search for an installed libgmp. dnl If found, set and AC_SUBST HAVE_LIBGMP=yes and the LIBGMP and LTLIBGMP dnl variables, and augment the CPPFLAGS variable, and #define HAVE_LIBGMP to 1. dnl Otherwise, set and AC_SUBST HAVE_LIBGMP=no and LIBGMP and LTLIBGMP to dnl empty. AC_DEFUN([gl_LIBGMP], [ AC_ARG_WITH([libgmp], [AS_HELP_STRING([--without-libgmp], [do not use the GNU Multiple Precision (GMP) library; this is the default on systems lacking libgmp.])]) HAVE_LIBGMP=no LIBGMP= LTLIBGMP= AS_IF([test "$with_libgmp" != no], [AC_CHECK_HEADERS([gmp.h gmp/gmp.h], [break]) dnl Prefer AC_LIB_HAVE_LINKFLAGS if the havelib module is also in use. AS_IF([test "$ac_cv_header_gmp_h" = yes || test "$ac_cv_header_gmp_gmp_h" = yes], [m4_ifdef([gl_HAVE_MODULE_HAVELIB], [AC_LIB_HAVE_LINKFLAGS([gmp], [], [#if HAVE_GMP_H # include <gmp.h> #else # include <gmp/gmp.h> #endif], [static const mp_limb_t x[2] = { 0x73, 0x55 }; mpz_t tmp; mpz_roinit_n (tmp, x, 2); ], [no])], [gl_saved_LIBS=$LIBS AC_SEARCH_LIBS([__gmpz_roinit_n], [gmp]) LIBS=$gl_saved_LIBS case $ac_cv_search___gmpz_roinit_n in 'none needed') HAVE_LIBGMP=yes;; -*) HAVE_LIBGMP=yes LIBGMP=$ac_cv_search___gmpz_roinit_n LTLIBGMP=$LIBGMP;; esac AC_SUBST([HAVE_LIBGMP]) AC_SUBST([LIBGMP]) AC_SUBST([LTLIBGMP])])]) if test "$with_libgmp,$HAVE_LIBGMP" = yes,no; then AC_MSG_ERROR( [GMP not found, although --with-libgmp was specified.m4_ifdef( [AC_LIB_HAVE_LINKFLAGS], [ Try specifying --with-libgmp-prefix=DIR.])]) fi]) if test $HAVE_LIBGMP = yes && test "$ac_cv_header_gmp_h" = yes; then GMP_H= else GMP_H=gmp.h fi AC_SUBST([GMP_H]) AM_CONDITIONAL([GL_GENERATE_MINI_GMP_H], [test $HAVE_LIBGMP != yes]) AM_CONDITIONAL([GL_GENERATE_GMP_GMP_H], [test $HAVE_LIBGMP = yes && test "$ac_cv_header_gmp_h" != yes]) ]) ������gnulib-20210822~d383792/m4/libsigsegv.m4������������������������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libsigsegv.m4 serial 4 dnl Copyright (C) 2002-2003, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible, Sam Steingold. AC_DEFUN([gl_LIBSIGSEGV], [ AC_LIB_HAVE_LINKFLAGS([sigsegv], [], [#include <sigsegv.h>], [sigsegv_deinstall_handler();], [no, consider installing GNU libsigsegv]) dnl Some other autoconf macros and clisp's configure use this variable. gl_cv_lib_sigsegv="$ac_cv_libsigsegv" ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libtextstyle-optional.m4�������������������������������������������������0000664�0000000�0000000�00000002523�14110572173�0021442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtextstyle-optional.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl gl_LIBTEXTSTYLE_OPTIONAL([MINIMUM-VERSION]) dnl Searches for an installed libtextstyle with version >= MINIMUM-VERSION dnl MINIMUM-VERSION = 0.20 - the first release in 2019 dnl MINIMUM-VERSION = 0.20.5 - adds hyperlink support and ostream_printf dnl MINIMUM-VERSION unspecified - the newest release dnl or uses the included source code parts that define only part of the API dnl and do not do any styling. dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and dnl #defines HAVE_LIBTEXTSTYLE to 1. dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=no and LIBTEXTSTYLE and dnl LTLIBTEXTSTYLE to empty. AC_DEFUN([gl_LIBTEXTSTYLE_OPTIONAL], [ gl_LIBTEXTSTYLE([$1]) if test $HAVE_LIBTEXTSTYLE = yes; then TEXTSTYLE_H= else TEXTSTYLE_H=textstyle.h AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([tcdrain]) fi AC_SUBST([TEXTSTYLE_H]) AM_CONDITIONAL([GL_GENERATE_TEXTSTYLE_H], [test -n "$TEXTSTYLE_H"]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libtextstyle.m4����������������������������������������������������������0000664�0000000�0000000�00000004620�14110572173�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtextstyle.m4 serial 3 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl gl_LIBTEXTSTYLE([MINIMUM-VERSION]) dnl Searches for an installed libtextstyle with version >= MINIMUM-VERSION. dnl MINIMUM-VERSION = 0.20 - the first release in 2019 dnl MINIMUM-VERSION = 0.20.5 - adds hyperlink support and ostream_printf dnl MINIMUM-VERSION unspecified - the newest release dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and dnl #defines HAVE_LIBTEXTSTYLE to 1. dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=no and LIBTEXTSTYLE and dnl LTLIBTEXTSTYLE to empty. AC_DEFUN([gl_LIBTEXTSTYLE], [ AC_REQUIRE([gl_LIBTEXTSTYLE_INITIALIZE]) AC_REQUIRE([gl_LIBTEXTSTYLE_SEARCH]) pushdef([MINVERSION], m4_if([$1], [], [gl_LIBTEXTSTYLE_NEWEST_VERSION], [$1])) dnl Signal a fatal error if MINVERSION is not among the allowed values. m4_if(m4_if(MINVERSION, [0.20], [x], [])m4_if(MINVERSION, [0.20.5], [x], []), [], [m4_fatal([The argument to gl_LIBTEXTSTYLE or gl_LIBTEXTSTYLE_OPTIONAL is not one of the expected values.])]) dnl Store the specified minimum version in gl_libtextstyle_minversion. dnl (This needs to be outside the m4_if. m4_divert_text inside m4_if does dnl not work reliably in Autoconf 2.69.) m4_divert_text([INIT_PREPARE], [gl_libtextstyle_minversion="$gl_libtextstyle_minversion MINVERSION "]) popdef([MINVERSION]) ]) AC_DEFUN([gl_LIBTEXTSTYLE_NEWEST_VERSION], [0.20.5]) AC_DEFUN([gl_LIBTEXTSTYLE_INITIALIZE], [ m4_divert_text([DEFAULTS], [gl_libtextstyle_minversion=' 0.20 ']) ]) AC_DEFUN([gl_LIBTEXTSTYLE_SEARCH], [ dnl $gl_libtextstyle_minversion evaluates to a space-separated list of dnl specified minimum versions. The maximum of these requirement matters. case "$gl_libtextstyle_minversion" in *" 0.20.5 "*) snippet='styled_ostream_t s = term_styled_ostream_create(1,"",TTYCTL_AUTO,""); ostream_printf(s,"%d",42);' ;; *" 0.20 "*) snippet='term_styled_ostream_create(1,"",TTYCTL_AUTO,"");' ;; esac AC_LIB_HAVE_LINKFLAGS([textstyle], [], [#include <textstyle.h>], [$snippet], [no]) ]) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libunistring-base.m4�����������������������������������������������������0000664�0000000�0000000�00000014260�14110572173�0020505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring-base.m4 serial 5 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paolo Bonzini and Bruno Haible. dnl gl_LIBUNISTRING_MODULE([VERSION], [Module]) dnl Declares that the source files of Module should be compiled, unless we dnl are linking with libunistring and its version is >= the given VERSION. dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is dnl true if the source files of Module should be compiled. dnl This macro is to be used for public libunistring API, not for dnl undocumented API. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a change that affects the behaviour of the dnl functions defined in Module (even if the sources of Module itself do not dnl change). AC_DEFUN([gl_LIBUNISTRING_MODULE], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]), [gl_LIBUNISTRING_VERSION_CMP([$1])]) ]) dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile]) dnl Declares that HeaderFile should be created, unless we are linking dnl with libunistring and its version is >= the given VERSION. dnl HeaderFile should be relative to the lib directory and end in '.h'. dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty). dnl dnl When we are linking with the already installed libunistring and its version dnl is < VERSION, we create HeaderFile here, because we may compile functions dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed dnl version. dnl When we are linking with the already installed libunistring and its version dnl is > VERSION, we don't create HeaderFile here: it could cause compilation dnl errors in other libunistring header files if some types are missing. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a non-comment change to the HeaderFile. AC_DEFUN([gl_LIBUNISTRING_LIBHEADER], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. if gl_LIBUNISTRING_VERSION_CMP([$1]); then LIBUNISTRING_[]AS_TR_CPP([$2])='$2' else LIBUNISTRING_[]AS_TR_CPP([$2])= fi AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2])) ]) dnl Miscellaneous preparations/initializations. AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE], [ dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point. m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])]) AC_REQUIRE([AC_PROG_AWK]) dnl Sed expressions to extract the parts of a version number. changequote(,) gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' changequote([,]) if test "$HAVE_LIBUNISTRING" = yes; then LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` fi ]) dnl gl_LIBUNISTRING_VERSION_CMP([VERSION]) dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION dnl is less than the VERSION argument. AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP], [ { test "$HAVE_LIBUNISTRING" != yes \ || { dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least. AS_LITERAL_IF([$1], [dnl This is the optimized variant, that assumes the argument is a literal: m4_pushdef([requested_version_major], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])]) m4_pushdef([requested_version_minor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) m4_pushdef([requested_version_subminor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor } } } m4_popdef([requested_version_subminor]) m4_popdef([requested_version_minor]) m4_popdef([requested_version_major]) ], [dnl This is the unoptimized variant: requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"` requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"` requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"` test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor } } } ]) } }]) dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the dnl same as ORIG, otherwise to 0. m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/libunistring-optional.m4�������������������������������������������������0000664�0000000�0000000�00000001701�14110572173�0021414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring-optional.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_LIBUNISTRING_OPTIONAL dnl Searches for an installed libunistring or uses the included source code dnl parts. dnl If found, it sets and AC_SUBSTs HAVE_LIBUNISTRING=yes and the LIBUNISTRING dnl and LTLIBUNISTRING variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIBUNISTRING to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIBUNISTRING=no and LIBUNISTRING and LTLIBUNISTRING to empty. AC_DEFUN([gl_LIBUNISTRING_OPTIONAL], [ dnl gl_LIBUNISTRING does a couple of extra things if this macro is used. AC_REQUIRE([gl_LIBUNISTRING]) AC_MSG_CHECKING([whether to use the included libunistring]) AC_MSG_RESULT([$gl_libunistring_use_included]) ]) ���������������������������������������������������������������gnulib-20210822~d383792/m4/libunistring.m4����������������������������������������������������������0000664�0000000�0000000�00000013726�14110572173�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring.m4 serial 12 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.64]) dnl gl_LIBUNISTRING dnl Searches for an installed libunistring. dnl If found, it sets and AC_SUBSTs HAVE_LIBUNISTRING=yes and the LIBUNISTRING dnl and LTLIBUNISTRING variables, sets the LIBUNISTRING_VERSION variable, and dnl augments the CPPFLAGS variable, and #defines HAVE_LIBUNISTRING to 1. dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBUNISTRING=no and LIBUNISTRING and dnl LTLIBUNISTRING to empty. dnl Define gl_LIBUNISTRING using AC_DEFUN_ONCE, in order dnl to avoid warnings dnl like dnl "warning: AC_REQUIRE: `gl_LIBUNISTRING' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. AC_DEFUN_ONCE([gl_LIBUNISTRING], [ AC_BEFORE([$0], [gl_LIBUNISTRING_MODULE]) AC_BEFORE([$0], [gl_LIBUNISTRING_LIBHEADER]) AC_BEFORE([$0], [gl_LIBUNISTRING_LIB_PREPARE]) m4_ifdef([gl_LIBUNISTRING_OPTIONAL], [ AC_MSG_CHECKING([whether included libunistring is requested]) AC_ARG_WITH([included-libunistring], [ --with-included-libunistring use the libunistring parts included here], [gl_libunistring_force_included=$withval], [gl_libunistring_force_included=no]) AC_MSG_RESULT([$gl_libunistring_force_included]) gl_libunistring_use_included="$gl_libunistring_force_included" if test "$gl_libunistring_use_included" = yes; then dnl Assume that libunistring is not installed until some other macro dnl explicitly invokes gl_LIBUNISTRING_CORE. if test -z "$HAVE_LIBUNISTRING"; then HAVE_LIBUNISTRING=no fi LIBUNISTRING= LTLIBUNISTRING= else gl_LIBUNISTRING_CORE if test $HAVE_LIBUNISTRING = no; then gl_libunistring_use_included=yes LIBUNISTRING= LTLIBUNISTRING= fi fi ], [gl_LIBUNISTRING_CORE]) ]) AC_DEFUN([gl_LIBUNISTRING_CORE], [ AC_REQUIRE([AM_ICONV]) if test -n "$LIBICONV"; then dnl First, try to link without -liconv. libunistring often depends on dnl libiconv, but we don't know (and often don't need to know) where dnl libiconv is installed. AC_LIB_HAVE_LINKFLAGS([unistring], [], [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);], [no, trying again together with libiconv]) if test "$ac_cv_libunistring" != yes; then dnl Second try, with -liconv. dnl We have to erase the cached result of the first AC_LIB_HAVE_LINKFLAGS dnl invocation, otherwise the second one will not be run. unset ac_cv_libunistring glus_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LIB_HAVE_LINKFLAGS([unistring], [], [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);], [no, consider installing GNU libunistring]) if test -n "$LIBUNISTRING"; then LIBUNISTRING="$LIBUNISTRING $LIBICONV" LTLIBUNISTRING="$LTLIBUNISTRING $LTLIBICONV" fi LIBS="$glus_save_LIBS" fi else AC_LIB_HAVE_LINKFLAGS([unistring], [], [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);], [no, consider installing GNU libunistring]) fi if test $HAVE_LIBUNISTRING = yes; then dnl Determine the installed version. AC_CACHE_CHECK([for libunistring version], [gl_cv_libunistring_version], [AC_COMPUTE_INT([gl_libunistring_hexversion], [_LIBUNISTRING_VERSION], [#include <unistring/version.h>]) dnl Versions <= 0.9.3 had a hexversion of 0x0009. dnl Use other tests to distinguish them. if test $gl_libunistring_hexversion = 9; then dnl Version 0.9.2 introduced the header <unistring/cdefs.h>. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <unistring/cdefs.h>]], [[]])], [gl_cv_libunistring_version092=true], [gl_cv_libunistring_version092=false]) if $gl_cv_libunistring_version092; then dnl Version 0.9.3 changed a comment in <unistr.h>. gl_ABSOLUTE_HEADER_ONE([unistr.h]) if test -n "$gl_cv_absolute_unistr_h" \ && grep 'Copy no more than N units of SRC to DEST. Return a pointer' $gl_cv_absolute_unistr_h > /dev/null; then dnl Detected version 0.9.3. gl_libunistring_hexversion=2307 else dnl Detected version 0.9.2. gl_libunistring_hexversion=2306 fi else dnl Version 0.9.1 introduced the type casing_suffix_context_t. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unicase.h> casing_suffix_context_t ct;]], [[]])], [gl_cv_libunistring_version091=true], [gl_cv_libunistring_version091=false]) if $gl_cv_libunistring_version091; then dnl Detected version 0.9.1. gl_libunistring_hexversion=2305 else dnl Detected version 0.9. gl_libunistring_hexversion=2304 fi fi fi dnl Transform into the usual major.minor.subminor notation. gl_libunistring_major=`expr $gl_libunistring_hexversion / 65536` gl_libunistring_minor=`expr $gl_libunistring_hexversion / 256 % 256` gl_libunistring_subminor=`expr $gl_libunistring_hexversion % 256` gl_cv_libunistring_version="$gl_libunistring_major.$gl_libunistring_minor.$gl_libunistring_subminor" ]) LIBUNISTRING_VERSION="$gl_cv_libunistring_version" fi ]) ������������������������������������������gnulib-20210822~d383792/m4/limits-h.m4��������������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0016617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check whether limits.h has needed features. dnl Copyright 2016-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) dnl Unconditionally enables the replacement of <limits.h>. AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) LIMITS_H='limits.h' AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/link-follow.m4�����������������������������������������������������������0000664�0000000�0000000�00000010556�14110572173�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 21 dnl Run a program to determine whether link(2) follows symlinks. dnl Set LINK_FOLLOWS_SYMLINKS accordingly. # Copyright (C) 1999-2001, 2004-2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl This macro can be used to emulate POSIX linkat. If dnl LINK_FOLLOWS_SYMLINKS is 0, link matches linkat(,0), and dnl linkat(,AT_SYMLINK_FOLLOW) requires a readlink. If it is 1, dnl link matches linkat(,AT_SYMLINK_FOLLOW), and there is no way dnl to do linkat(,0) on symlinks (on all other file types, dnl link() is sufficient). If it is -1, use a Solaris specific dnl runtime test. If it is -2, use a generic runtime test. AC_DEFUN([gl_FUNC_LINK_FOLLOWS_SYMLINK], [dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([readlink]) dnl Mingw lacks link, although gnulib provides a good replacement. dnl However, it also lacks symlink, so there's nothing to test in dnl the first place, and no reason to need to distinguish between dnl linkat variants. So, we set LINK_FOLLOWS_SYMLINKS to 0. gl_link_follows_symlinks=0 # assume GNU behavior if test $ac_cv_func_readlink = yes; then dnl Solaris has an __xpg4 variable in libc, and it determines the dnl behaviour of link(): It dereferences a symlink if and only if dnl __xpg4 != 0. AC_CACHE_CHECK([for __xpg4], [gl_cv_have___xpg4], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern int __xpg4;]], [[return __xpg4;]])], [gl_cv_have___xpg4=yes], [gl_cv_have___xpg4=no]) ]) if test $gl_cv_have___xpg4 = yes; then gl_link_follows_symlinks=-1 else AC_CACHE_CHECK([whether link(2) dereferences a symlink], [gl_cv_func_link_follows_symlink], [ # Create a regular file. echo > conftest.file AC_RUN_IFELSE( [AC_LANG_SOURCE([[ # include <sys/types.h> # include <sys/stat.h> # include <unistd.h> # include <stdlib.h> # define SAME_INODE(Stat_buf_1, Stat_buf_2) \ ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \ && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev) int main () { const char *file = "conftest.file"; const char *sym = "conftest.sym"; const char *hard = "conftest.hard"; struct stat sb_file, sb_hard; /* Create a symlink to the regular file. */ if (symlink (file, sym)) return 2; /* Create a hard link to that symlink. */ if (link (sym, hard)) return 3; if (lstat (hard, &sb_hard)) return 4; if (lstat (file, &sb_file)) return 5; /* If the dev/inode of hard and file are the same, then the link call followed the symlink. */ return SAME_INODE (sb_hard, sb_file) ? 1 : 0; } ]])], [gl_cv_func_link_follows_symlink=no], dnl GNU behavior [gl_cv_func_link_follows_symlink=yes], dnl Followed link/compile failed [dnl We're cross compiling. dnl The past results are "yes" on Mac OS X, FreeBSD, NetBSD, dnl OpenBSD, Minix, AIX, HP-UX, OSF/1, and "no" on Linux, Cygwin. case "$host_os" in # On glibc/Linux we know the result. linux*-gnu* | gnu*) gl_cv_func_link_follows_symlink="guessing no" ;; # On musl/Linux we know the result. linux*-musl*) gl_cv_func_link_follows_symlink="guessing no" ;; # Otherwise, we don't know. *) gl_cv_func_link_follows_symlink=unknown ;; esac ]) rm -f conftest.file conftest.sym conftest.hard ]) case "$gl_cv_func_link_follows_symlink" in *yes) gl_link_follows_symlinks=1 ;; *no) ;; # already defaulted to 0 *) gl_link_follows_symlinks=-2 ;; esac fi fi AC_DEFINE_UNQUOTED([LINK_FOLLOWS_SYMLINKS], [$gl_link_follows_symlinks], [Define to 1 if 'link(2)' dereferences symbolic links, 0 if it creates hard links to symlinks, -1 if it depends on the variable __xpg4, and -2 if unknown.]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/link.m4������������������������������������������������������������������0000664�0000000�0000000�00000003722�14110572173�0016022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# link.m4 serial 11 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([link]) if test $ac_cv_func_link = no; then HAVE_LINK=0 else AC_CACHE_CHECK([whether link obeys POSIX], [gl_cv_func_link_works], [touch conftest.a # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.a conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> #include <stdio.h> ]], [[int result = 0; if (!link ("conftest.a", "conftest.b/")) result |= 1; #if HAVE_LSTAT if (!link ("conftest.lnk/", "conftest.b")) result |= 2; if (rename ("conftest.a", "conftest.b")) result |= 4; if (!link ("conftest.b", "conftest.lnk")) result |= 8; #endif return result; ]])], [gl_cv_func_link_works=yes], [gl_cv_func_link_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_link_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_link_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_link_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.a conftest.b conftest.lnk]) case "$gl_cv_func_link_works" in *yes) ;; *) REPLACE_LINK=1 ;; esac fi ]) ����������������������������������������������gnulib-20210822~d383792/m4/linkat.m4����������������������������������������������������������������0000664�0000000�0000000�00000011617�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # See if we need to provide linkat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_LINKAT], [ AC_REQUIRE([gl_FUNC_OPENAT]) AC_REQUIRE([gl_FUNC_LINK_FOLLOWS_SYMLINK]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([linkat symlink]) if test $ac_cv_func_linkat = no; then HAVE_LINKAT=0 else dnl OS X Yosemite has linkat() but it's not sufficient dnl to our needs since it doesn't support creating dnl hardlinks to symlinks. Therefore check for that dnl capability before considering using the system version. AC_CACHE_CHECK([whether linkat() can link symlinks], [gl_cv_func_linkat_nofollow], [rm -rf conftest.l1 conftest.l2 ln -s target conftest.l1 AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#include <fcntl.h> #include <unistd.h> ]], [[return linkat (AT_FDCWD, "conftest.l1", AT_FDCWD, "conftest.l2", 0); ]])], [gl_cv_func_linkat_nofollow=yes], [gl_cv_func_linkat_nofollow=no], [case "$host_os" in darwin*) gl_cv_func_linkat_nofollow="guessing no" ;; *) gl_cv_func_linkat_nofollow="guessing yes" ;; esac]) rm -rf conftest.l1 conftest.l2]) case $gl_cv_func_linkat_nofollow in *no) LINKAT_SYMLINK_NOTSUP=1 ;; *yes) LINKAT_SYMLINK_NOTSUP=0 ;; esac AC_CACHE_CHECK([whether linkat handles trailing slash correctly], [gl_cv_func_linkat_slash], [rm -rf conftest.a conftest.b conftest.c conftest.d conftest.e conftest.s AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> ]GL_MDA_DEFINES], [[int result; int fd; /* Create a regular file. */ fd = open ("conftest.a", O_CREAT | O_EXCL | O_WRONLY, 0600); if (fd < 0) return 1; if (write (fd, "hello", 5) < 5) return 2; if (close (fd) < 0) return 3; /* Test whether hard links are supported on the current device. */ if (linkat (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.b", AT_SYMLINK_FOLLOW) < 0) return 0; result = 0; /* Test whether a trailing "/" is treated like "/.". */ if (linkat (AT_FDCWD, "conftest.a/", AT_FDCWD, "conftest.c", AT_SYMLINK_FOLLOW) == 0) result |= 4; if (linkat (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.d/", AT_SYMLINK_FOLLOW) == 0) result |= 8; /* On Mac OS X 10.13 a trailing "/" will cause the second path to be dereferenced, and thus will succeed on a dangling symlink. */ if (symlink ("conftest.e", "conftest.s") == 0) { if (linkat (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.s/", AT_SYMLINK_FOLLOW) == 0) result |= 16; } return result; ]])], [gl_cv_func_linkat_slash=yes], [gl_cv_func_linkat_slash=no], [ case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_linkat_slash="guessing yes";; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_linkat_slash="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_linkat_slash="$gl_cross_guess_normal";; esac ]) rm -rf conftest.a conftest.b conftest.c conftest.d conftest.e conftest.s]) case "$gl_cv_func_linkat_slash" in *yes) gl_linkat_slash_bug=0 ;; *) gl_linkat_slash_bug=1 ;; esac case "$gl_cv_func_linkat_nofollow" in *yes) linkat_nofollow=yes ;; *) linkat_nofollow=no ;; esac if test "$linkat_nofollow" != yes \ || test $gl_linkat_slash_bug = 1; then REPLACE_LINKAT=1 AC_DEFINE_UNQUOTED([LINKAT_TRAILING_SLASH_BUG], [$gl_linkat_slash_bug], [Define to 1 if linkat fails to recognize a trailing slash.]) AC_DEFINE_UNQUOTED([LINKAT_SYMLINK_NOTSUP], [$LINKAT_SYMLINK_NOTSUP], [Define to 1 if linkat can create hardlinks to symlinks]) fi fi ]) �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/localcharset.m4����������������������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0017527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localcharset.m4 serial 8 dnl Copyright (C) 2002, 2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALCHARSET], [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) ]) �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale-ar.m4�������������������������������������������������������������0000664�0000000�0000000�00000010057�14110572173�0016723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ar.m4 serial 9 dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Ben Pfaff, based on locale-fr.m4 by Bruno Haible. dnl Determine the name of an Arabic locale with traditional encoding. AC_DEFUN([gt_LOCALE_AR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional Arabic locale], [gt_cv_locale_ar], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check that nl_langinfo(CODESET) is nonempty and not "ASCII" or "646" and ends in "6". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || cs[strlen (cs) - 1] != '6') return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Arabic locale is # "Arabic_Saudi Arabia.1256", and CP1256 is very different from # ISO-8859-6, so we cannot use it here. gt_cv_locale_ar=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Values tested: # - The usual locale name: ar_SA # - The locale name with explicit encoding suffix: ar_SA.ISO-8859-6 # - The HP-UX locale name: ar_SA.iso88596 # - The Solaris 7 locale name: ar # Also try ar_EG instead of ar_SA because Egypt is a large country too. for gt_cv_locale_ar in ar_SA ar_SA.ISO-8859-6 ar_SA.iso88596 ar_EG ar_EG.ISO-8859-6 ar_EG.iso88596 ar none; do if test $gt_cv_locale_ar = none; then break fi if (LC_ALL=$gt_cv_locale_ar LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then break fi done ;; esac fi rm -fr conftest* ]) LOCALE_AR=$gt_cv_locale_ar AC_SUBST([LOCALE_AR]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale-fr.m4�������������������������������������������������������������0000664�0000000�0000000�00000024474�14110572173�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-fr.m4 serial 20 dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a french locale with traditional encoding. AC_DEFUN([gt_LOCALE_FR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR=$gt_cv_locale_fr AC_SUBST([LOCALE_FR]) ]) dnl Determine the name of a french locale with UTF-8 encoding. AC_DEFUN([gt_LOCALE_FR_UTF8], [ AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 AC_SUBST([LOCALE_FR_UTF8]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale-ja.m4�������������������������������������������������������������0000664�0000000�0000000�00000013167�14110572173�0016720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ja.m4 serial 15 dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a japanese locale with EUC-JP encoding. AC_DEFUN([gt_LOCALE_JA], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_JA=$gt_cv_locale_ja AC_SUBST([LOCALE_JA]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale-tr.m4�������������������������������������������������������������0000664�0000000�0000000�00000012042�14110572173�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-tr.m4 serial 13 dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a turkish locale with UTF-8 encoding. AC_DEFUN([gt_LOCALE_TR_UTF8], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> #include <wctype.h> struct tm t; char buf[16]; int main () { /* On BeOS, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. But BeOS does not implement the Turkish upper-/lowercase mappings. Therefore, let this program return 1 on BeOS. */ /* Check whether the given locale name is recognized by the system. */ #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; #else if (setlocale (LC_ALL, "") == NULL) return 1; #endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ #if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } #endif #ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; #endif /* Check whether in the abbreviation of the eighth month, the second character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) return 1; /* Check whether the upper-/lowercase mappings are as expected for Turkish. */ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) return 1; return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=Turkish_Turkey.65001 else # None found. gt_cv_locale_tr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr.UTF-8 else # None found. gt_cv_locale_tr_utf8=none fi fi fi ;; esac else gt_cv_locale_tr_utf8=none fi rm -fr conftest* ]) LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 AC_SUBST([LOCALE_TR_UTF8]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale-zh.m4�������������������������������������������������������������0000664�0000000�0000000�00000012612�14110572173�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-zh.m4 serial 15 dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a chinese locale with GB18030 encoding. AC_DEFUN([gt_LOCALE_ZH_CN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ]) LOCALE_ZH_CN=$gt_cv_locale_zh_CN AC_SUBST([LOCALE_ZH_CN]) ]) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/locale_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000013756�14110572173�0016643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale_h.m4 serial 28 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LOCALE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* dnl members of 'struct lconv'. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. AC_REQUIRE([gl_STDDEF_H]) AC_REQUIRE([gl_LOCALE_T]) dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' dnl only if _LCONV_C99 is defined. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris*) AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) ;; esac AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], [gl_cv_header_locale_h_posix2001], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point);]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=no])]) dnl Check whether 'struct lconv' is complete. dnl Bionic libc's 'struct lconv' is just a dummy. dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. AC_CACHE_CHECK([whether struct lconv is properly defined], [gl_cv_sys_struct_lconv_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes);]], [[]])], [gl_cv_sys_struct_lconv_ok=yes], [gl_cv_sys_struct_lconv_ok=no]) ]) if test $gl_cv_sys_struct_lconv_ok = no; then dnl On native Windows with MSVC, merely define these member names as macros. dnl This avoids trouble in C++ mode. case "$host_os" in mingw*) AC_EGREP_CPP([Special], [ #ifdef _MSC_VER Special #endif ], [], [REPLACE_STRUCT_LCONV=1]) ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([locale.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <locale.h> /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include <xlocale.h> #endif ]], [setlocale newlocale duplocale freelocale]) ]) dnl Checks to determine whether the system has the locale_t type, dnl and how to obtain it. AC_DEFUN([gl_LOCALE_T], [ dnl Persuade glibc and Solaris <locale.h> to define locale_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether use of locale_t requires inclusion of <xlocale.h>, dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by dnl itself, we assume that <xlocale.h> will do so. AC_CACHE_CHECK([whether locale.h defines locale_t], [gl_cv_header_locale_has_locale_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> locale_t x;]], [[]])], [gl_cv_header_locale_has_locale_t=yes], [gl_cv_header_locale_has_locale_t=no]) ]) dnl Check for <xlocale.h>. AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi AC_SUBST([HAVE_XLOCALE_H]) ]) # gl_LOCALE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LOCALE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS]) ]) ������������������gnulib-20210822~d383792/m4/localeconv.m4������������������������������������������������������������0000664�0000000�0000000�00000001147�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localeconv.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOCALECONV], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H]) if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi ]) # Prerequisites of lib/localeconv.c. AC_DEFUN([gl_PREREQ_LOCALECONV], [ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], [[#include <locale.h>]]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/localename.m4������������������������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localename.m4 serial 8 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALENAME], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_T]) AC_REQUIRE([gt_LC_MESSAGES]) AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME]) AC_REQUIRE([gt_INTL_MACOSX]) AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $HAVE_LOCALE_T = 1; then AC_CHECK_FUNCS_ONCE([newlocale duplocale freelocale]) gl_func_newlocale="$ac_cv_func_newlocale" gl_func_duplocale="$ac_cv_func_duplocale" gl_func_freelocale="$ac_cv_func_freelocale" else dnl In 2019, some versions of z/OS lack the locale_t type and have broken dnl newlocale, duplocale, freelocale functions. gl_func_newlocale=no gl_func_duplocale=no gl_func_freelocale=no fi if test $gl_func_newlocale != yes; then HAVE_NEWLOCALE=0 fi if test $gl_func_duplocale != yes; then HAVE_DUPLOCALE=0 fi if test $gl_func_freelocale != yes; then HAVE_FREELOCALE=0 fi if test $gt_localename_enhances_locale_funcs = yes; then REPLACE_NEWLOCALE=1 REPLACE_DUPLOCALE=1 REPLACE_FREELOCALE=1 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/localtime.m4�������������������������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localtime.m4 serial 2 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOCALTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_LOCALTIME=1 ;; esac ]) �������������������������������������������������������������������gnulib-20210822~d383792/m4/lock.m4������������������������������������������������������������������0000664�0000000�0000000�00000003037�14110572173�0016014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lock.m4 serial 14 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include <pthread.h>]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log-ieee.m4��������������������������������������������������������������0000664�0000000�0000000�00000001110�14110572173�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log_required=ieee]) AC_REQUIRE([gl_FUNC_LOG]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log.m4�������������������������������������������������������������������0000664�0000000�0000000�00000006264�14110572173�0015652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log.m4 serial 11 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG], [ m4_divert_text([DEFAULTS], [gl_log_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine LOG_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log]) save_LIBS="$LIBS" LIBS="$LIBS $LOG_LIBM" gl_FUNC_LOG_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log_works" in *yes) ;; *) REPLACE_LOG=1 ;; esac m4_ifdef([gl_FUNC_LOG_IEEE], [ if test $gl_log_required = ieee && test $REPLACE_LOG = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log works according to ISO C 99 with IEC 60559], [gl_cv_func_log_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_log) (double) = argc ? log : dummy; /* Test log(negative). This test fails on NetBSD 5.1, Solaris 11.4. */ double y = my_log (-1.0); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_log_ieee=yes], [gl_cv_func_log_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log_ieee" in *yes) ;; *) REPLACE_LOG=1 ;; esac fi ]) ]) dnl Test whether log() works. dnl On OSF/1 5.1, log(-0.0) is NaN. AC_DEFUN([gl_FUNC_LOG_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log works], [gl_cv_func_log_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile double x; double y; int main () { x = -0.0; y = log (x); if (!(y + y == y)) return 1; return 0; } ]])], [gl_cv_func_log_works=yes], [gl_cv_func_log_works=no], [case "$host_os" in osf*) gl_cv_func_log_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log_works="guessing yes" ;; *) gl_cv_func_log_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log10-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001122�14110572173�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG10 can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG10_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log10_required=ieee]) AC_REQUIRE([gl_FUNC_LOG10]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log10.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006400�14110572173�0016003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10.m4 serial 11 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG10], [ m4_divert_text([DEFAULTS], [gl_log10_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine LOG10_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log10]) save_LIBS="$LIBS" LIBS="$LIBS $LOG10_LIBM" gl_FUNC_LOG10_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log10_works" in *yes) ;; *) REPLACE_LOG10=1 ;; esac m4_ifdef([gl_FUNC_LOG10_IEEE], [ if test $gl_log10_required = ieee && test $REPLACE_LOG10 = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log10 works according to ISO C 99 with IEC 60559], [gl_cv_func_log10_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG10_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_log10) (double) = argc ? log10 : dummy; /* Test log10(negative). This test fails on NetBSD 5.1, Solaris 11.4. */ double y = my_log10 (-1.0); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_log10_ieee=yes], [gl_cv_func_log10_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log10_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log10_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log10_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log10_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log10_ieee" in *yes) ;; *) REPLACE_LOG10=1 ;; esac fi ]) ]) dnl Test whether log10() works. dnl On OSF/1 5.1, log10(-0.0) is NaN. AC_DEFUN([gl_FUNC_LOG10_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log10 works], [gl_cv_func_log10_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile double x; double y; int main () { x = -0.0; y = log10 (x); if (!(y + y == y)) return 1; return 0; } ]])], [gl_cv_func_log10_works=yes], [gl_cv_func_log10_works=no], [case "$host_os" in osf*) gl_cv_func_log10_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log10_works="guessing yes" ;; *) gl_cv_func_log10_works="guessing yes" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log10f-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001127�14110572173�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10f-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG10F can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG10F_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log10f_required=ieee]) AC_REQUIRE([gl_FUNC_LOG10F]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log10f.m4����������������������������������������������������������������0000664�0000000�0000000�00000010275�14110572173�0016156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10f.m4 serial 12 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG10F], [ m4_divert_text([DEFAULTS], [gl_log10f_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG10]) dnl Persuade glibc <math.h> to declare log10f(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether log10f() exists. Assume that log10f(), if it exists, is dnl defined in the same library as log10(). save_LIBS="$LIBS" LIBS="$LIBS $LOG10_LIBM" AC_CHECK_FUNCS([log10f]) LIBS="$save_LIBS" if test $ac_cv_func_log10f = yes; then LOG10F_LIBM="$LOG10_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $LOG10F_LIBM" gl_FUNC_LOG10F_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log10f_works" in *yes) ;; *) REPLACE_LOG10F=1 ;; esac m4_ifdef([gl_FUNC_LOG10F_IEEE], [ if test $gl_log10f_required = ieee && test $REPLACE_LOG10F = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log10f works according to ISO C 99 with IEC 60559], [gl_cv_func_log10f_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG10F_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_log10f) (float) = argc ? log10f : dummy; /* Test log10f(negative). This test fails on NetBSD 5.1. */ float y = my_log10f (-1.0f); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_log10f_ieee=yes], [gl_cv_func_log10f_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log10f_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log10f_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log10f_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log10f_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log10f_ieee" in *yes) ;; *) REPLACE_LOG10F=1 ;; esac fi ]) else HAVE_LOG10F=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_log10f, not log10f. AC_CHECK_DECLS([log10f], [REPLACE_LOG10F=1], , [[#include <math.h>]]) fi if test $HAVE_LOG10F = 0 || test $REPLACE_LOG10F = 1; then dnl Find libraries needed to link lib/log10f.c. if test $HAVE_LOG10F = 0; then LOG10F_LIBM="$LOG10_LIBM" fi fi AC_SUBST([LOG10F_LIBM]) ]) dnl Test whether log10f() works. dnl On OSF/1 5.1, log10f(-0.0f) is NaN. AC_DEFUN([gl_FUNC_LOG10F_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log10f works], [gl_cv_func_log10f_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile float x; float y; int main () { x = -0.0f; y = log10f (x); if (!(y + y == y)) return 1; return 0; } ]])], [gl_cv_func_log10f_works=yes], [gl_cv_func_log10f_works=no], [case "$host_os" in osf*) gl_cv_func_log10f_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log10f_works="guessing yes" ;; *) gl_cv_func_log10f_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log10l.m4����������������������������������������������������������������0000664�0000000�0000000�00000012171�14110572173�0016161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10l.m4 serial 10 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG10L], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_LOG10]) dnl Persuade glibc <math.h> to declare log10l(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether log10l() is declared. On AIX 5.1 it is not declared. AC_CHECK_DECL([log10l], , [HAVE_DECL_LOG10L=0], [[#include <math.h>]]) dnl Test whether log10l() exists. Assume that log10l(), if it exists, is dnl defined in the same library as log10(). save_LIBS="$LIBS" LIBS="$LIBS $LOG10_LIBM" AC_CHECK_FUNCS([log10l]) LIBS="$save_LIBS" if test $ac_cv_func_log10l = yes; then LOG10L_LIBM="$LOG10_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $LOG10L_LIBM" gl_FUNC_LOG10L_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log10l_works" in *yes) ;; *) REPLACE_LOG10L=1 ;; esac else HAVE_LOG10L=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_log10l, not log10l. AC_CHECK_DECLS([log10l], [REPLACE_LOG10L=1], , [[#include <math.h>]]) fi if test $HAVE_LOG10L = 0 || test $REPLACE_LOG10L = 1; then if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then LOG10L_LIBM="$LOG10_LIBM" else if test $HAVE_LOG10L = 0; then AC_REQUIRE([gl_FUNC_LOGL]) LOG10L_LIBM="$LOGL_LIBM" fi fi fi AC_SUBST([LOG10L_LIBM]) ]) dnl Test whether log10l() works. dnl On OSF/1 5.1, log10l(-0.0L) is NaN. dnl On IRIX 6.5, log10l(-0.0L) is an unnormalized negative infinity dnl 0xFFF00000000000007FF0000000000000, should be dnl 0xFFF00000000000000000000000000000. dnl On AIX 5.1, log10l(-0.0L) is finite if it's not the first log10l call dnl in the program. dnl On NetBSD 9.0, the result is accurate to only 16 digits. AC_DEFUN([gl_FUNC_LOG10L_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log10l works], [gl_cv_func_log10l_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef log10l /* for AIX */ extern #ifdef __cplusplus "C" #endif long double log10l (long double); static long double dummy (long double x) { return 0; } volatile long double gx; long double gy; int main (int argc, char *argv[]) { long double (* volatile my_log10l) (long double) = argc ? log10l : dummy; int result = 0; /* Dummy call, to trigger the AIX 5.1 bug. */ gx = 0.6L; gy = log10l (gx); /* This test fails on AIX 5.1, IRIX 6.5, OSF/1 5.1. */ { gx = -0.0L; gy = log10l (gx); if (!(gy + gy == gy)) result |= 1; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x, NetBSD 9.0. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 7.90097792256024576L; long double err = (my_log10l (x) + my_log10l (1.0L / x)) * TWO_LDBL_MANT_DIG; if (!(err >= -100.0L && err <= 100.0L)) result |= 2; } return result; } ]])], [gl_cv_func_log10l_works=yes], [gl_cv_func_log10l_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log10l_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_log10l_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log10l_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log10l_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1p-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001122�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1p-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG1P can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG1P_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log1p_required=ieee]) AC_REQUIRE([gl_FUNC_LOG1P]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1p.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006422�14110572173�0016107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1p.m4 serial 8 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG1P], [ m4_divert_text([DEFAULTS], [gl_log1p_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare log1p(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine LOG1P_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log1p]) dnl Test whether log1p() exists. save_LIBS="$LIBS" LIBS="$LIBS $LOG1P_LIBM" AC_CHECK_FUNCS([log1p]) LIBS="$save_LIBS" if test $ac_cv_func_log1p = yes; then : m4_ifdef([gl_FUNC_LOG1P_IEEE], [ if test $gl_log1p_required = ieee && test $REPLACE_LOG1P = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log1p works according to ISO C 99 with IEC 60559], [gl_cv_func_log1p_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG1P_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double x) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_log1p) (double) = argc ? log1p : dummy; /* This test fails on AIX, HP-UX 11. */ double y = my_log1p (minus_zerod); if (!(y == 0.0) || (signbitd (minus_zerod) && !signbitd (y))) return 1; return 0; } ]])], [gl_cv_func_log1p_ieee=yes], [gl_cv_func_log1p_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log1p_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log1p_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log1p_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log1p_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log1p_ieee" in *yes) ;; *) REPLACE_LOG1P=1 ;; esac fi ]) else HAVE_LOG1P=0 fi if test $HAVE_LOG1P = 0 || test $REPLACE_LOG1P = 1; then dnl Find libraries needed to link lib/log1p.c. AC_REQUIRE([gl_FUNC_ISNAND]) AC_REQUIRE([gl_FUNC_LOG]) AC_REQUIRE([gl_FUNC_ROUND]) LOG1P_LIBM= dnl Append $ISNAND_LIBM to LOG1P_LIBM, avoiding gratuitous duplicates. case " $LOG1P_LIBM " in *" $ISNAND_LIBM "*) ;; *) LOG1P_LIBM="$LOG1P_LIBM $ISNAND_LIBM" ;; esac dnl Append $LOG_LIBM to LOG1P_LIBM, avoiding gratuitous duplicates. case " $LOG1P_LIBM " in *" $LOG_LIBM "*) ;; *) LOG1P_LIBM="$LOG1P_LIBM $LOG_LIBM" ;; esac dnl Append $ROUND_LIBM to LOG1P_LIBM, avoiding gratuitous duplicates. case " $LOG1P_LIBM " in *" $ROUND_LIBM "*) ;; *) LOG1P_LIBM="$LOG1P_LIBM $ROUND_LIBM" ;; esac fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1pf-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001127�14110572173�0017157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1pf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG1PF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG1PF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log1pf_required=ieee]) AC_REQUIRE([gl_FUNC_LOG1PF]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1pf.m4����������������������������������������������������������������0000664�0000000�0000000�00000007474�14110572173�0016265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1pf.m4 serial 8 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG1PF], [ m4_divert_text([DEFAULTS], [gl_log1pf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG1P]) dnl Persuade glibc <math.h> to declare log1pf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether log1pf() exists. Assume that log1pf(), if it exists, is dnl defined in the same library as log1p(). save_LIBS="$LIBS" LIBS="$LIBS $LOG1P_LIBM" AC_CHECK_FUNCS([log1pf]) LIBS="$save_LIBS" if test $ac_cv_func_log1pf = yes; then LOG1PF_LIBM="$LOG1P_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $LOG1PF_LIBM" gl_FUNC_LOG1PF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log1pf_works" in *yes) ;; *) REPLACE_LOG1PF=1 ;; esac m4_ifdef([gl_FUNC_LOG1PF_IEEE], [ if test $gl_log1pf_required = ieee && test $REPLACE_LOG1PF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log1pf works according to ISO C 99 with IEC 60559], [gl_cv_func_log1pf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG1PF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float x) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_log1pf) (float) = argc ? log1pf : dummy; /* This test fails on OpenBSD 4.9, AIX 7.1. */ float y = my_log1pf (minus_zerof); if (!(y == 0.0f) || (signbitf (minus_zerof) && !signbitf (y))) return 1; return 0; } ]])], [gl_cv_func_log1pf_ieee=yes], [gl_cv_func_log1pf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log1pf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log1pf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log1pf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log1pf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log1pf_ieee" in *yes) ;; *) REPLACE_LOG1PF=1 ;; esac fi ]) else HAVE_LOG1PF=0 fi if test $HAVE_LOG1PF = 0 || test $REPLACE_LOG1PF = 1; then dnl Find libraries needed to link lib/log1pf.c. LOG1PF_LIBM="$LOG1P_LIBM" fi AC_SUBST([LOG1PF_LIBM]) ]) dnl Test whether log1pf() works. dnl On IRIX 6.5, log1pf(-1.0f) returns +Infinity instead of -Infinity. AC_DEFUN([gl_FUNC_LOG1PF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log1pf works], [gl_cv_func_log1pf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile float x; float y; int main () { x = -1.0f; y = log1pf (x); if (!(y + y == y && y < 0.0f)) return 1; return 0; } ]])], [gl_cv_func_log1pf_works=yes], [gl_cv_func_log1pf_works=no], [case "$host_os" in irix*) gl_cv_func_log1pf_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log1pf_works="guessing yes" ;; *) gl_cv_func_log1pf_works="guessing yes" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1pl-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001127�14110572173�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1pl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG1PL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG1PL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log1pl_required=ieee]) AC_REQUIRE([gl_FUNC_LOG1PL]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log1pl.m4����������������������������������������������������������������0000664�0000000�0000000�00000015232�14110572173�0016262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log1pl.m4 serial 9 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG1PL], [ m4_divert_text([DEFAULTS], [gl_log1pl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_LOG1P]) dnl Persuade glibc <math.h> to declare log1pl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether log1pl() exists. Assume that log1pl(), if it exists, is dnl defined in the same library as log1p(). save_LIBS="$LIBS" LIBS="$LIBS $LOG1P_LIBM" AC_CHECK_FUNCS([log1pl]) LIBS="$save_LIBS" if test $ac_cv_func_log1pl = yes; then LOG1PL_LIBM="$LOG1P_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $LOG1PL_LIBM" gl_FUNC_LOG1PL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log1pl_works" in *yes) ;; *) REPLACE_LOG1PL=1 ;; esac m4_ifdef([gl_FUNC_LOG1PL_IEEE], [ if test $gl_log1pl_required = ieee && test $REPLACE_LOG1PL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log1pl works according to ISO C 99 with IEC 60559], [gl_cv_func_log1pl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG1PL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_log1pl) (long double) = argc ? log1pl : dummy; /* This test fails on AIX 7.1, IRIX 6.5. */ long double y = my_log1pl (minus_zerol); if (!(y == 0.0L) || (signbitl (minus_zerol) && !signbitl (y))) return 1; return 0; } ]])], [gl_cv_func_log1pl_ieee=yes], [gl_cv_func_log1pl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log1pl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log1pl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log1pl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log1pl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log1pl_ieee" in *yes) ;; *) REPLACE_LOG1PL=1 ;; esac fi ]) else HAVE_LOG1PL=0 dnl Find libraries needed to link lib/log1pl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then LOG1PL_LIBM="$LOG1P_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_LOGL]) AC_REQUIRE([gl_FUNC_ROUNDL]) LOG1PL_LIBM= dnl Append $ISNANL_LIBM to LOG1PL_LIBM, avoiding gratuitous duplicates. case " $LOG1PL_LIBM " in *" $ISNANL_LIBM "*) ;; *) LOG1PL_LIBM="$LOG1PL_LIBM $ISNANL_LIBM" ;; esac dnl Append $LOGL_LIBM to LOG1PL_LIBM, avoiding gratuitous duplicates. case " $LOG1PL_LIBM " in *" $LOGL_LIBM "*) ;; *) LOG1PL_LIBM="$LOG1PL_LIBM $LOGL_LIBM" ;; esac dnl Append $ROUNDL_LIBM to LOG1PL_LIBM, avoiding gratuitous duplicates. case " $LOG1PL_LIBM " in *" $ROUNDL_LIBM "*) ;; *) LOG1PL_LIBM="$LOG1PL_LIBM $ROUNDL_LIBM" ;; esac fi fi AC_SUBST([LOG1PL_LIBM]) ]) dnl Test whether log1pl() works. dnl On musl 1.2.2/{arm64,s390x}, the result is accurate to only 16 digits. AC_DEFUN([gl_FUNC_LOG1PL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log1pl works], [gl_cv_func_log1pl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef log1pl extern #ifdef __cplusplus "C" #endif long double log1pl (long double); static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_log1pl) (long double) = argc ? log1pl : dummy; int result = 0; /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.358L; long double y = my_log1pl (x); long double z = my_log1pl (- x / (1.0L + x)); long double err = (y + z) * TWO_LDBL_MANT_DIG; if (!(err >= -900.0L && err <= 900.0L)) result |= 1; } return result; } ]])], [gl_cv_func_log1pl_works=yes], [gl_cv_func_log1pl_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log1pl_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_log1pl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log1pl_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log1pl_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log2-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001115�14110572173�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log2-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG2 can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG2_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log2_required=ieee]) AC_REQUIRE([gl_FUNC_LOG2]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log2.m4������������������������������������������������������������������0000664�0000000�0000000�00000012012�14110572173�0015720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log2.m4 serial 10 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG2], [ m4_divert_text([DEFAULTS], [gl_log2_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare log2(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine LOG2_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log2]) dnl Test whether log2() exists. save_LIBS="$LIBS" LIBS="$LIBS $LOG2_LIBM" AC_CHECK_FUNCS([log2]) LIBS="$save_LIBS" if test $ac_cv_func_log2 = yes; then HAVE_LOG2=1 dnl Also check whether it's declared. dnl IRIX 6.5 has log2() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([log2], , [HAVE_DECL_LOG2=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $LOG2_LIBM" gl_FUNC_LOG2_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log2_works" in *yes) ;; *) REPLACE_LOG2=1 ;; esac m4_ifdef([gl_FUNC_LOG2_IEEE], [ if test $gl_log2_required = ieee && test $REPLACE_LOG2 = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log2 works according to ISO C 99 with IEC 60559], [gl_cv_func_log2_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG2_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> #ifndef log2 /* for Cygwin 1.7.x */ extern #ifdef __cplusplus "C" #endif double log2 (double); #endif /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_log2) (double) = argc ? log2 : dummy; /* Test log2(negative). This test fails on NetBSD 5.1 and Solaris 10/x86_64. */ double y = my_log2 (-1.0); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_log2_ieee=yes], [gl_cv_func_log2_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log2_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log2_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log2_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log2_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log2_ieee" in *yes) ;; *) REPLACE_LOG2=1 ;; esac fi ]) else HAVE_LOG2=0 HAVE_DECL_LOG2=0 fi if test $HAVE_LOG2 = 0 || test $REPLACE_LOG2 = 1; then dnl Find libraries needed to link lib/log2.c. AC_REQUIRE([gl_FUNC_ISNAND]) AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_LOG]) LOG2_LIBM= dnl Append $ISNAND_LIBM to LOG2_LIBM, avoiding gratuitous duplicates. case " $LOG2_LIBM " in *" $ISNAND_LIBM "*) ;; *) LOG2_LIBM="$LOG2_LIBM $ISNAND_LIBM" ;; esac dnl Append $FREXP_LIBM to LOG2_LIBM, avoiding gratuitous duplicates. case " $LOG2_LIBM " in *" $FREXP_LIBM "*) ;; *) LOG2_LIBM="$LOG2_LIBM $FREXP_LIBM" ;; esac dnl Append $LOG_LIBM to LOG2_LIBM, avoiding gratuitous duplicates. case " $LOG2_LIBM " in *" $LOG_LIBM "*) ;; *) LOG2_LIBM="$LOG2_LIBM $LOG_LIBM" ;; esac fi ]) dnl Test whether log2() works. dnl On OSF/1 5.1, log2(-0.0) is NaN. dnl On Cygwin 1.7.9, log2(2^29) is not exactly 29. AC_DEFUN([gl_FUNC_LOG2_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log2 works], [gl_cv_func_log2_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #ifndef log2 /* for Cygwin 1.7.x */ extern #ifdef __cplusplus "C" #endif double log2 (double); #endif volatile double x; volatile double y; int main () { int result = 0; /* This test fails on OSF/1 5.1. */ x = -0.0; y = log2 (x); if (!(y + y == y)) result |= 1; /* This test fails on Cygwin 1.7.9. */ x = 536870912.0; y = log2 (x); if (!(y == 29.0)) result |= 2; return result; } ]])], [gl_cv_func_log2_works=yes], [gl_cv_func_log2_works=no], [case "$host_os" in cygwin* | osf*) gl_cv_func_log2_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log2_works="guessing yes" ;; *) gl_cv_func_log2_works="guessing yes" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log2f-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001122�14110572173�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log2f-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOG2F can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOG2F_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_log2f_required=ieee]) AC_REQUIRE([gl_FUNC_LOG2F]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log2f.m4�����������������������������������������������������������������0000664�0000000�0000000�00000012523�14110572173�0016075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log2f.m4 serial 10 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG2F], [ m4_divert_text([DEFAULTS], [gl_log2f_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG2]) dnl Persuade glibc <math.h> to declare log2f(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine LOG2F_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log2f]) dnl Test whether log2f() exists. save_LIBS="$LIBS" LIBS="$LIBS $LOG2F_LIBM" AC_CHECK_FUNCS([log2f]) LIBS="$save_LIBS" if test $ac_cv_func_log2f = yes; then HAVE_LOG2F=1 dnl Also check whether it's declared. dnl IRIX 6.5 has log2f() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([log2f], , [HAVE_DECL_LOG2F=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $LOG2F_LIBM" gl_FUNC_LOG2F_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log2f_works" in *yes) ;; *) REPLACE_LOG2F=1 ;; esac m4_ifdef([gl_FUNC_LOG2F_IEEE], [ if test $gl_log2f_required = ieee && test $REPLACE_LOG2F = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log2f works according to ISO C 99 with IEC 60559], [gl_cv_func_log2f_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOG2F_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> #ifndef log2f /* for Cygwin 1.7.x */ extern #ifdef __cplusplus "C" #endif float log2f (float); #endif /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_log2f) (float) = argc ? log2f : dummy; /* Test log2f(negative). This test fails on NetBSD 5.1 and Solaris 10/x86_64. */ float y = my_log2f (-1.0f); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_log2f_ieee=yes], [gl_cv_func_log2f_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log2f_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_log2f_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log2f_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log2f_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_log2f_ieee" in *yes) ;; *) REPLACE_LOG2F=1 ;; esac fi ]) else HAVE_LOG2F=0 HAVE_DECL_LOG2F=0 fi if test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1; then dnl Find libraries needed to link lib/log2f.c. if test $ac_cv_func_log2 = yes; then AC_DEFINE([HAVE_LOG2], [1], [Define to 1 if the log2() function is available in libc or libm.]) LOG2F_LIBM="$LOG2_LIBM" else AC_REQUIRE([gl_FUNC_ISNANF]) AC_REQUIRE([gl_FUNC_FREXPF]) AC_REQUIRE([gl_FUNC_LOGF]) LOG2F_LIBM= dnl Append $ISNANF_LIBM to LOG2F_LIBM, avoiding gratuitous duplicates. case " $LOG2F_LIBM " in *" $ISNANF_LIBM "*) ;; *) LOG2F_LIBM="$LOG2F_LIBM $ISNANF_LIBM" ;; esac dnl Append $FREXPF_LIBM to LOG2F_LIBM, avoiding gratuitous duplicates. case " $LOG2F_LIBM " in *" $FREXPF_LIBM "*) ;; *) LOG2F_LIBM="$LOG2F_LIBM $FREXPF_LIBM" ;; esac dnl Append $LOGF_LIBM to LOG2F_LIBM, avoiding gratuitous duplicates. case " $LOG2F_LIBM " in *" $LOGF_LIBM "*) ;; *) LOG2F_LIBM="$LOG2F_LIBM $LOGF_LIBM" ;; esac fi fi ]) dnl Test whether log2() works. dnl On OSF/1 5.1, log2f(-0.0f) is NaN. dnl On Cygwin 1.7.9, log2f(2^13) is not exactly 13. AC_DEFUN([gl_FUNC_LOG2F_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log2f works], [gl_cv_func_log2f_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #ifndef log2f /* for Cygwin 1.7.x */ extern #ifdef __cplusplus "C" #endif float log2f (float); #endif volatile float x; volatile float y; int main () { int result = 0; /* This test fails on OSF/1 5.1. */ x = -0.0f; y = log2f (x); if (!(y + y == y)) result |= 1; /* This test fails on Cygwin 1.7.9. */ x = 8192.0f; y = log2f (x); if (!(y == 13.0f)) result |= 2; return result; } ]])], [gl_cv_func_log2f_works=yes], [gl_cv_func_log2f_works=no], [case "$host_os" in cygwin* | osf*) gl_cv_func_log2f_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log2f_works="guessing yes" ;; *) gl_cv_func_log2f_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/log2l.m4�����������������������������������������������������������������0000664�0000000�0000000�00000013203�14110572173�0016077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log2l.m4 serial 3 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOG2L], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_LOG2]) dnl Persuade glibc <math.h> to declare log2l(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether log2l() exists. Assume that log2l(), if it exists, is dnl defined in the same library as log2(). save_LIBS="$LIBS" LIBS="$LIBS $LOG2_LIBM" AC_CHECK_FUNCS([log2l]) LIBS="$save_LIBS" if test $ac_cv_func_log2l = yes; then LOG2L_LIBM="$LOG2_LIBM" HAVE_LOG2L=1 dnl Also check whether it's declared. dnl IRIX 6.5 has log2l() in libm but doesn't declare it in <math.h>. AC_CHECK_DECL([log2l], , [HAVE_DECL_LOG2L=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $LOG2L_LIBM" gl_FUNC_LOG2L_WORKS LIBS="$save_LIBS" case "$gl_cv_func_log2l_works" in *yes) ;; *) REPLACE_LOG2L=1 ;; esac else HAVE_LOG2L=0 HAVE_DECL_LOG2L=0 fi if test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; then dnl Find libraries needed to link lib/log2l.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then LOG2L_LIBM="$LOG2_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_LOGL]) LOG2L_LIBM= dnl Append $ISNANL_LIBM to LOG2L_LIBM, avoiding gratuitous duplicates. case " $LOG2L_LIBM " in *" $ISNANL_LIBM "*) ;; *) LOG2L_LIBM="$LOG2L_LIBM $ISNANL_LIBM" ;; esac dnl Append $FREXPL_LIBM to LOG2L_LIBM, avoiding gratuitous duplicates. case " $LOG2L_LIBM " in *" $FREXPL_LIBM "*) ;; *) LOG2L_LIBM="$LOG2L_LIBM $FREXPL_LIBM" ;; esac dnl Append $LOGL_LIBM to LOG2L_LIBM, avoiding gratuitous duplicates. case " $LOG2L_LIBM " in *" $LOGL_LIBM "*) ;; *) LOG2L_LIBM="$LOG2L_LIBM $LOGL_LIBM" ;; esac fi fi AC_SUBST([LOG2L_LIBM]) ]) dnl Test whether log2l() works. dnl On OSF/1 5.1, log2l(-0.0) is NaN. dnl On musl 1.2.2/{arm64,s390x}, the result is accurate to only 16 digits. AC_DEFUN([gl_FUNC_LOG2L_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether log2l works], [gl_cv_func_log2l_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #ifndef log2l /* for AIX */ extern #ifdef __cplusplus "C" #endif long double log2l (long double); #endif static long double dummy (long double x) { return 0; } volatile long double gx; volatile long double gy; int main (int argc, char *argv[]) { long double (* volatile my_log2l) (long double) = argc ? log2l : dummy; int result = 0; /* This test fails on OSF/1 5.1. */ { gx = -0.0L; gy = my_log2l (gx); if (!(gy + gy == gy)) result |= 1; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.358L; long double y = my_log2l (x); long double z = my_log2l (1.0L / x); long double err = (y + z) * TWO_LDBL_MANT_DIG; if (!(err >= -10000.0L && err <= 10000.0L)) result |= 2; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x. */ if (DBL_MAX_EXP < LDBL_MAX_EXP) { long double x = ldexpl (1.0L, DBL_MAX_EXP); /* finite! */ long double y = my_log2l (x); if (y > 0 && y + y == y) /* infinite? */ result |= 4; } return result; } ]])], [gl_cv_func_log2l_works=yes], [gl_cv_func_log2l_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_log2l_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_log2l_works="guessing no" ;; # Guess no on OSF/1. osf*) gl_cv_func_log2l_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_log2l_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_log2l_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logb.m4������������������������������������������������������������������0000664�0000000�0000000�00000010222�14110572173�0016001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logb.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOGB], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare logb(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether logb() is declared. AC_CHECK_DECLS([logb], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_logb" != yes; then HAVE_DECL_LOGB=0 fi dnl Test whether logb() can be used without libm. LOGB_LIBM=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif double logb (double x); double x;]], [[x = logb(x);]])], [LOGB_LIBM=]) if test "$LOGB_LIBM" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif double logb (double x); double x;]], [[x = logb(x);]])], [LOGB_LIBM="-lm"]) LIBS="$save_LIBS" fi if test "$LOGB_LIBM" != "?"; then HAVE_LOGB=1 save_LIBS="$LIBS" LIBS="$LIBS $LOGB_LIBM" gl_FUNC_LOGB_WORKS LIBS="$save_LIBS" case "$gl_cv_func_logb_works" in *yes) ;; *) REPLACE_LOGB=1 ;; esac else HAVE_LOGB=0 fi if test $HAVE_LOGB = 0 || test $REPLACE_LOGB = 1; then dnl Find libraries needed to link lib/logb.c. AC_REQUIRE([gl_FUNC_FREXP]) AC_REQUIRE([gl_FUNC_ISNAND]) LOGB_LIBM= dnl Append $FREXP_LIBM to LOGB_LIBM, avoiding gratuitous duplicates. case " $LOGB_LIBM " in *" $FREXP_LIBM "*) ;; *) LOGB_LIBM="$LOGB_LIBM $FREXP_LIBM" ;; esac dnl Append $ISNAND_LIBM to LOGB_LIBM, avoiding gratuitous duplicates. case " $LOGB_LIBM " in *" $ISNAND_LIBM "*) ;; *) LOGB_LIBM="$LOGB_LIBM $ISNAND_LIBM" ;; esac fi AC_SUBST([LOGB_LIBM]) ]) dnl Test whether logb() works. dnl On glibc 2.11/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 10/SPARC, dnl Solaris 11.4/x86_64, Cygwin 1.5.x, the return value for subnormal dnl (denormalized) arguments is too large. dnl On glibc 2.17/ppc likewise but only for negative subnormal (denormalized) dnl arguments. AC_DEFUN([gl_FUNC_LOGB_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logb works], [gl_cv_func_logb_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> extern #ifdef __cplusplus "C" #endif double logb (double); volatile double x; int main () { int result = 0; /* This test fails on glibc 2.11/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 10/SPARC, Solaris 11.4/x86_64, Cygwin 1.5.x. */ { int i; for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; /* Here i = DBL_MIN_EXP - 1. Either x = 2^(i-1) is subnormal or x = 0.0. */ if (x > 0.0 && !(logb (x) == (double)(i - 1))) result |= 1; } /* This test fails on glibc 2.17/ppc. */ { int i; for (i = 1, x = -1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; /* Here i = DBL_MIN_EXP - 1. Either x = -2^(i-1) is subnormal or x = -0.0. */ if (x < 0.0 && !(logb (x) == (double)(i - 1))) result |= 2; } return result; } ]])], [gl_cv_func_logb_works=yes], [gl_cv_func_logb_works=no], [case "$host_os" in *gnu* | solaris* | cygwin*) gl_cv_func_logb_works="guessing no" ;; mingw*) # Guess yes on MSVC, no on mingw. AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_logb_works="guessing yes"], [gl_cv_func_logb_works="guessing no"]) ;; *) gl_cv_func_logb_works="guessing yes" ;; esac ]) ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logbf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005207�14110572173�0016156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logbf.m4 serial 3 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOGBF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare logbf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine LOGBF_LIBM. gl_MATHFUNC([logbf], [float], [(float)]) if test $gl_cv_func_logbf_no_libm = yes \ || test $gl_cv_func_logbf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $LOGBF_LIBM" gl_FUNC_LOGBF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_logbf_works" in *yes) ;; *) REPLACE_LOGBF=1 ;; esac else HAVE_LOGBF=0 fi if test $HAVE_LOGBF = 0 || test $REPLACE_LOGBF = 1; then dnl Find libraries needed to link lib/logbf.c. AC_REQUIRE([gl_FUNC_FREXPF]) AC_REQUIRE([gl_FUNC_ISNANF]) LOGBF_LIBM= dnl Append $FREXPF_LIBM to LOGBF_LIBM, avoiding gratuitous duplicates. case " $LOGBF_LIBM " in *" $FREXPF_LIBM "*) ;; *) LOGBF_LIBM="$LOGBF_LIBM $FREXPF_LIBM" ;; esac dnl Append $ISNANF_LIBM to LOGBF_LIBM, avoiding gratuitous duplicates. case " $LOGBF_LIBM " in *" $ISNANF_LIBM "*) ;; *) LOGBF_LIBM="$LOGBF_LIBM $ISNANF_LIBM" ;; esac fi AC_SUBST([LOGBF_LIBM]) ]) dnl Test whether logbf() works. dnl On glibc 2.11/ppc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 10/SPARC, dnl Solaris 11.4/x86_64, the return value for subnormal (denormalized) arguments dnl is too large. AC_DEFUN([gl_FUNC_LOGBF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logbf works], [gl_cv_func_logbf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> volatile float x; int main () { int i; for (i = 1, x = 1.0f; i >= FLT_MIN_EXP; i--, x *= 0.5f) ; /* Here i = FLT_MIN_EXP - 1. Either x = 2^(i-1) is subnormal or x = 0.0. */ if (x > 0.0f && !(logbf (x) == (float)(i - 1))) return 1; return 0; } ]])], [gl_cv_func_logbf_works=yes], [gl_cv_func_logbf_works=no], [case "$host_os" in *gnu* | solaris*) gl_cv_func_logbf_works="guessing no" ;; mingw*) # Guess yes on MSVC, no on mingw. AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_logbf_works="guessing yes"], [gl_cv_func_logbf_works="guessing no"]) ;; *) gl_cv_func_logbf_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logbl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007623�14110572173�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logbl.m4 serial 5 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOGBL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_LOGB]) dnl Persuade glibc <math.h> to declare logbl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether logbl() exists and determine LOGBL_LIBM. We cannot assume dnl that logbl(), if it exists, is defined in the same library as logb(). dnl This is not the case on AIX >= 5.2, Solaris >= 10. gl_MATHFUNC([logbl], [long double], [(long double)]) if test $gl_cv_func_logbl_no_libm = yes \ || test $gl_cv_func_logbl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $LOGBL_LIBM" gl_FUNC_LOGBL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_logbl_works" in *yes) ;; *) REPLACE_LOGBL=1 ;; esac else HAVE_LOGBL=0 fi if test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; then dnl Find libraries needed to link lib/logbl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then LOGBL_LIBM="$LOGB_LIBM" else AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_ISNANL]) LOGBL_LIBM= dnl Append $FREXPL_LIBM to LOGBL_LIBM, avoiding gratuitous duplicates. case " $LOGBL_LIBM " in *" $FREXPL_LIBM "*) ;; *) LOGBL_LIBM="$LOGBL_LIBM $FREXPL_LIBM" ;; esac dnl Append $ISNANL_LIBM to LOGBL_LIBM, avoiding gratuitous duplicates. case " $LOGBL_LIBM " in *" $ISNANL_LIBM "*) ;; *) LOGBL_LIBM="$LOGBL_LIBM $ISNANL_LIBM" ;; esac fi fi AC_SUBST([LOGBL_LIBM]) ]) dnl Test whether logbl() works. dnl On glibc 2.11/powerpc, glibc 2.7/sparc, glibc 2.7/hppa, Solaris 10/SPARC, dnl Solaris 11.4/x86_64, the return value for subnormal (denormalized) arguments dnl is too large. dnl On glibc 2.23/powerpc64le, the return value for negative subnormal arguments dnl is too large. AC_DEFUN([gl_FUNC_LOGBL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logbl works], [gl_cv_func_logbl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif volatile long double x; int main () { int i; for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP - 54; i--, x *= 0.5L) /* Either x = 2^(i-1) or x = 0.0. */ if ((i == LDBL_MIN_EXP - 1 || i == LDBL_MIN_EXP - 54) && (x > 0.0L && !(logbl (x) == (long double)(i - 1)))) return 1; for (i = 1, x = -1.0L; i >= LDBL_MIN_EXP - 54; i--, x *= 0.5L) /* Either x = -2^(i-1) or x = 0.0. */ if ((i == LDBL_MIN_EXP - 1 || i == LDBL_MIN_EXP - 54) && (x < 0.0L && !(logbl (x) == (long double)(i - 1)))) return 1; return 0; } ]])], [gl_cv_func_logbl_works=yes], [gl_cv_func_logbl_works=no], [case "$host_os" in *gnu* | solaris*) gl_cv_func_logbl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_logbl_works="guessing yes" ;; *) gl_cv_func_logbl_works="guessing yes" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logf-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001115�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_LOGF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_LOGF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_logf_required=ieee]) AC_REQUIRE([gl_FUNC_LOGF]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logf.m4������������������������������������������������������������������0000664�0000000�0000000�00000010111�14110572173�0016002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logf.m4 serial 12 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOGF], [ m4_divert_text([DEFAULTS], [gl_logf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG]) dnl Persuade glibc <math.h> to declare logf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether logf() exists. Assume that logf(), if it exists, is dnl defined in the same library as log(). save_LIBS="$LIBS" LIBS="$LIBS $LOG_LIBM" AC_CHECK_FUNCS([logf]) LIBS="$save_LIBS" if test $ac_cv_func_logf = yes; then LOGF_LIBM="$LOG_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $LOGF_LIBM" gl_FUNC_LOGF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_logf_works" in *yes) ;; *) REPLACE_LOGF=1 ;; esac m4_ifdef([gl_FUNC_LOGF_IEEE], [ if test $gl_logf_required = ieee && test $REPLACE_LOGF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logf works according to ISO C 99 with IEC 60559], [gl_cv_func_logf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $LOGF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_logf) (float) = argc ? logf : dummy; /* Test logf(negative). This test fails on NetBSD 5.1. */ float y = my_logf (-1.0f); if (numeric_equal (y, y)) return 1; return 0; } ]])], [gl_cv_func_logf_ieee=yes], [gl_cv_func_logf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_logf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_logf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_logf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_logf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_logf_ieee" in *yes) ;; *) REPLACE_LOGF=1 ;; esac fi ]) else HAVE_LOGF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_logf, not logf. AC_CHECK_DECLS([logf], [REPLACE_LOGF=1], , [[#include <math.h>]]) fi if test $HAVE_LOGF = 0 || test $REPLACE_LOGF = 1; then dnl Find libraries needed to link lib/logf.c. if test $HAVE_LOGF = 0; then LOGF_LIBM="$LOG_LIBM" fi fi AC_SUBST([LOGF_LIBM]) ]) dnl Test whether logf() works. dnl On OSF/1 5.1, logf(-0.0f) is NaN. AC_DEFUN([gl_FUNC_LOGF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logf works], [gl_cv_func_logf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> volatile float x; float y; int main () { x = -0.0f; y = logf (x); if (!(y + y == y)) return 1; return 0; } ]])], [gl_cv_func_logf_works=yes], [gl_cv_func_logf_works=no], [case "$host_os" in osf*) gl_cv_func_logf_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_logf_works="guessing yes" ;; *) gl_cv_func_logf_works="guessing yes" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/logl.m4������������������������������������������������������������������0000664�0000000�0000000�00000014513�14110572173�0016022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logl.m4 serial 15 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOGL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare logl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) LOGL_LIBM= AC_CACHE_CHECK([whether logl() can be used without linking with libm], [gl_cv_func_logl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = logl; long double x;]], [[return funcptr (x) > 1 || logl (x) > 1;]])], [gl_cv_func_logl_no_libm=yes], [gl_cv_func_logl_no_libm=no]) ]) if test $gl_cv_func_logl_no_libm = no; then AC_CACHE_CHECK([whether logl() can be used with libm], [gl_cv_func_logl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = logl; long double x;]], [[return funcptr (x) > 1 || logl (x) > 1;]])], [gl_cv_func_logl_in_libm=yes], [gl_cv_func_logl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_logl_in_libm = yes; then LOGL_LIBM=-lm fi fi if test $gl_cv_func_logl_no_libm = yes \ || test $gl_cv_func_logl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has logl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([logl], , [HAVE_DECL_LOGL=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $LOGL_LIBM" gl_FUNC_LOGL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_logl_works" in *yes) ;; *) REPLACE_LOGL=1 ;; esac else HAVE_LOGL=0 HAVE_DECL_LOGL=0 fi if test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; then dnl Find libraries needed to link lib/logl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_LOG]) LOGL_LIBM="$LOG_LIBM" else if test $HAVE_LOGL = 0; then AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FLOORL]) dnl Append $FREXPL_LIBM to LOGL_LIBM, avoiding gratuitous duplicates. case " $LOGL_LIBM " in *" $FREXPL_LIBM "*) ;; *) LOGL_LIBM="$LOGL_LIBM $FREXPL_LIBM" ;; esac dnl Append $ISNANL_LIBM to LOGL_LIBM, avoiding gratuitous duplicates. case " $LOGL_LIBM " in *" $ISNANL_LIBM "*) ;; *) LOGL_LIBM="$LOGL_LIBM $ISNANL_LIBM" ;; esac dnl Append $FLOORL_LIBM to LOGL_LIBM, avoiding gratuitous duplicates. case " $LOGL_LIBM " in *" $FLOORL_LIBM "*) ;; *) LOGL_LIBM="$LOGL_LIBM $FLOORL_LIBM" ;; esac fi fi fi AC_SUBST([LOGL_LIBM]) ]) dnl Test whether logl() works. dnl On OSF/1 5.1, logl(-0.0L) is NaN. dnl On NetBSD 9.0, the result is accurate to only 16 digits. AC_DEFUN([gl_FUNC_LOGL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether logl works], [gl_cv_func_logl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif #undef logl extern #ifdef __cplusplus "C" #endif long double logl (long double); static long double dummy (long double x) { return 0; } volatile long double gx; long double gy; int main (int argc, char *argv[]) { long double (* volatile my_logl) (long double) = argc ? logl : dummy; int result = 0; /* This test fails on OSF/1 5.1. */ { gx = -0.0L; gy = logl (gx); if (!(gy + gy == gy)) result |= 1; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x, NetBSD 9.0. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 16.981137113807045L; long double err = (my_logl (x) + my_logl (1.0L / x)) * TWO_LDBL_MANT_DIG; if (!(err >= -100.0L && err <= 100.0L)) result |= 2; } return result; } ]])], [gl_cv_func_logl_works=yes], [gl_cv_func_logl_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_logl_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_logl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_logl_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_logl_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/longlong.m4��������������������������������������������������������������0000664�0000000�0000000�00000011077�14110572173�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# longlong.m4 serial 19 dnl Copyright (C) 1999-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.62]) # Define HAVE_LONG_LONG_INT if 'long long int' works. # This can be faster than what's in Autoconf 2.62 through 2.68. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug is not important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [], [ac_cv_type_long_long_int=no], [:]) fi fi]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This can be faster than what's in Autoconf 2.62 through 2.68. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [], [ac_cv_type_unsigned_long_long_int=no]) fi]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lseek.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004377�14110572173�0016177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lseek.m4 serial 11 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LSEEK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], [case "$host_os" in mingw*) dnl Native Windows. dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) dnl for a pipe depends on the environment: In a Cygwin 1.5 dnl environment it succeeds (wrong); in a Cygwin 1.7 environment dnl it fails with a wrong errno value. gl_cv_func_lseek_pipe=no ;; *) if test $cross_compiling = no; then AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> /* for off_t */ #include <stdio.h> /* for SEEK_CUR */ #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif ]GL_MDA_DEFINES], [[ /* Exit with success only if stdin is seekable. */ return lseek (0, (off_t)0, SEEK_CUR) < 0; ]])], [if test -s conftest$ac_exeext \ && ./conftest$ac_exeext < conftest.$ac_ext \ && test 1 = "`echo hi \ | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then gl_cv_func_lseek_pipe=yes else gl_cv_func_lseek_pipe=no fi ], [gl_cv_func_lseek_pipe=no]) else AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[ #if defined __BEOS__ /* BeOS mistakenly return 0 when trying to seek on pipes. */ Choke me. #endif]])], [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) fi ;; esac ]) if test $gl_cv_func_lseek_pipe = no; then REPLACE_LSEEK=1 AC_DEFINE([LSEEK_PIPE_BROKEN], [1], [Define to 1 if lseek does not detect pipes.]) fi AC_REQUIRE([gl_SYS_TYPES_H]) if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_LSEEK=1 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/lstat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005441�14110572173�0016214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 33 # Copyright (C) 1997-2001, 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_LSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl If lstat does not exist, the replacement <sys/stat.h> does dnl "#define lstat stat", and lstat.c is a no-op. AC_CHECK_FUNCS_ONCE([lstat]) if test $ac_cv_func_lstat = yes; then AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi ]) # Prerequisites of lib/lstat.c. AC_DEFUN([gl_PREREQ_LSTAT], [:]) AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], [ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file echo >conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ]])], [gl_cv_func_lstat_dereferences_slashed_symlink=yes], [gl_cv_func_lstat_dereferences_slashed_symlink=no], [case "$host_os" in linux-* | linux) # Guess yes on Linux systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.sym conftest.file ]) case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], [Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/malloc-align.m4����������������������������������������������������������0000664�0000000�0000000�00000012311�14110572173�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc-align.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Defines a C macro MALLOC_ALIGNMENT, whose value is a numeric constant, dnl a power of 2, with the property that dnl (uintptr_t) malloc (N) dnl is always guaranteed to be a multiple of MALLOC_ALIGNMENT. AC_DEFUN([gl_MALLOC_ALIGNMENT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for the malloc() alignment], [gl_cv_malloc_alignment], [gl_cv_malloc_alignment= AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> #include <stdlib.h> #if defined _WIN32 && !defined __CYGWIN__ # include <inttypes.h> /* uintptr_t is equivalent to 'unsigned long long' if _WIN64, or to 'unsigned long' otherwise. */ #else # undef uintptr_t # define uintptr_t unsigned long #endif ]], [[FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; { uintptr_t bits = 0; bits |= (uintptr_t) malloc (1); bits |= (uintptr_t) malloc (1); bits |= (uintptr_t) malloc (1); bits |= (uintptr_t) malloc (2); bits |= (uintptr_t) malloc (2); bits |= (uintptr_t) malloc (2); bits |= (uintptr_t) malloc (3); bits |= (uintptr_t) malloc (3); bits |= (uintptr_t) malloc (3); bits |= (uintptr_t) malloc (5); bits |= (uintptr_t) malloc (8); bits |= (uintptr_t) malloc (8); bits |= (uintptr_t) malloc (13); bits |= (uintptr_t) malloc (13); bits |= (uintptr_t) malloc (19); bits |= (uintptr_t) malloc (19); bits |= (uintptr_t) malloc (28); bits |= (uintptr_t) malloc (28); bits |= (uintptr_t) malloc (37); bits |= (uintptr_t) malloc (37); bits |= (uintptr_t) malloc (73); bits |= (uintptr_t) malloc (73); bits |= (uintptr_t) malloc (117); bits |= (uintptr_t) malloc (117); bits |= (uintptr_t) malloc (351); bits |= (uintptr_t) malloc (351); bits |= (uintptr_t) malloc (914); bits |= (uintptr_t) malloc (914); bits |= (uintptr_t) malloc (1712); bits |= (uintptr_t) malloc (1712); bits |= (uintptr_t) malloc (4021); bits |= (uintptr_t) malloc (4021); bits |= (uintptr_t) malloc (7641); bits |= (uintptr_t) malloc (7641); bits |= (uintptr_t) malloc (17027); bits |= (uintptr_t) malloc (17027); bits |= (uintptr_t) malloc (81231); bits |= (uintptr_t) malloc (81231); fprintf (fp, "%u\n", (unsigned int) (((bits ^ (bits - 1)) + 1) >> 1)); } if (fclose (fp) != 0) return 2; return 0; ]]) ], [gl_cv_malloc_alignment=`cat conftest.out`], [gl_cv_malloc_alignment="unknown"], [dnl When cross-compiling, guess a value. Note that it's OK to return dnl a smaller value (e.g. 4 instead of 8 or 16). gl_cv_malloc_alignment="unknown" case "$host_os" in linux* | mingw*) dnl On Linux: dnl - It's 8 on most 32-bit platforms, except 16 on x86_64-x32 and dnl (with newer versions of glibc) on i386 and powerpc. 8 is a dnl safe guess. dnl - It's 16 on all 64-bit platforms. dnl On Windows: It's 8 on 32-bit Windows, 16 on 64-bit Windows. for nn in 4 8 16 32; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define MALLOC_ALIGN (2 * sizeof (void *)) int test [MALLOC_ALIGN <= $nn ? 1 : -1]; ]]) ], [gl_cv_malloc_alignment="guessing $nn" break ], [:]) done ;; *) dnl If we don't know, assume the worst. dnl This minimum is e.g. reached on NetBSD/i386 and NetBSD/sparc. for nn in 4 8 16; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define MALLOC_ALIGN (sizeof (void *)) int test [MALLOC_ALIGN <= $nn ? 1 : -1]; ]]) ], [gl_cv_malloc_alignment="guessing $nn" break ], [:]) done ;; esac ]) ]) case "$gl_cv_malloc_alignment" in "unknown") dnl Assume the worst. value=4 ;; "guessing "*) value=`echo "$gl_cv_malloc_alignment" | sed -e 's/guessing //'` ;; *) value="$gl_cv_malloc_alignment" ;; esac AC_DEFINE_UNQUOTED([MALLOC_ALIGNMENT], [$value], [Define to the guaranteed alignment of malloc() return values.]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/malloc.m4����������������������������������������������������������������0000664�0000000�0000000�00000013315�14110572173�0016333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc.m4 serial 27 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949 AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether malloc (0) returns nonnull], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF # gl_FUNC_MALLOC_GNU # ------------------ # Replace malloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC = 0; then _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC=1]) fi ]) # gl_FUNC_MALLOC_PTRDIFF # ---------------------- # Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX, # and replace malloc otherwise. AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC=1 ]) # Test whether malloc, realloc, calloc refuse to create objects # larger than what can be expressed in ptrdiff_t. # Set gl_cv_func_malloc_gnu to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF], [ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe], [gl_cv_malloc_ptrdiff], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> ]], [[/* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ]])], [gl_cv_malloc_ptrdiff=yes], [gl_cv_malloc_ptrdiff=no]) ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), and replace # malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test "$gl_cv_func_malloc_posix" = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if malloc, realloc, and calloc set errno on allocation failure.]) else REPLACE_MALLOC=1 fi ]) # Test whether malloc, realloc, calloc set errno to ENOMEM on failure. # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function set errno on failure, dnl except on those platforms where we have seen 'test-malloc-gnu', dnl 'test-realloc-gnu', 'test-calloc-gnu' fail. case "$host_os" in mingw*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) dnl On IRIX 6.5, the three functions return NULL with errno unset dnl when the argument is larger than PTRDIFF_MAX. dnl On Solaris 11.3, the three functions return NULL with errno set dnl to EAGAIN, not ENOMEM, when the argument is larger than dnl PTRDIFF_MAX. dnl Here is a test program: m4_divert_push([KILL]) #include <errno.h> #include <stdio.h> #include <stdlib.h> #define ptrdiff_t long #ifndef PTRDIFF_MAX # define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1)) #endif int main () { void *p; fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX); errno = 0; p = malloc ((unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = calloc (PTRDIFF_MAX / 2 + 1, 2); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); return 0; } m4_divert_pop([KILL]) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/malloc_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000004067�14110572173�0016646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc_h.m4 serial 4 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_MALLOC_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_MALLOC_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([malloc.h]) if test $ac_cv_header_malloc_h = yes; then HAVE_MALLOC_H=1 else HAVE_MALLOC_H=0 fi AC_SUBST([HAVE_MALLOC_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_MALLOC_H # include <malloc.h> #endif ]], [memalign]) ]) # gl_MALLOC_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_MALLOC_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_MALLOC_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_MALLOC_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MALLOC_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMALIGN]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_MALLOC_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_MALLOC_H_DEFAULTS]) ]) AC_DEFUN([gl_MALLOC_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_MEMALIGN=1; AC_SUBST([HAVE_MEMALIGN]) REPLACE_MEMALIGN=0; AC_SUBST([REPLACE_MEMALIGN]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/malloca.m4���������������������������������������������������������������0000664�0000000�0000000�00000001033�14110572173�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloca.m4 serial 2 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MALLOCA], [ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/manywarnings-c++.m4������������������������������������������������������0000664�0000000�0000000�00000015557�14110572173�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# manywarnings-c++.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Implementation of the specialization of gl_MANYWARN_ALL_GCC # for _AC_LANG = C++. AC_DEFUN([gl_MANYWARN_ALL_GCC_CXX_IMPL], [ AC_LANG_PUSH([C++]) dnl First, check for some issues that only occur when combining multiple dnl gcc warning categories. AC_REQUIRE([AC_PROG_CXX]) if test -n "$GXX"; then dnl Check if -W -Werror -Wno-missing-field-initializers is supported dnl with the current $CXX $CXXFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported], [gl_cv_cxx_nomfi_supported], [gl_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -W -Werror -Wno-missing-field-initializers" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cxx_nomfi_supported=yes], [gl_cv_cxx_nomfi_supported=no]) CXXFLAGS="$gl_save_CXXFLAGS" ]) if test "$gl_cv_cxx_nomfi_supported" = yes; then dnl Now check whether -Wno-missing-field-initializers is needed dnl for the { 0, } construct. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed], [gl_cv_cxx_nomfi_needed], [gl_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -W -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[int f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; return s1.b; } ]], [[]])], [gl_cv_cxx_nomfi_needed=no], [gl_cv_cxx_nomfi_needed=yes]) CXXFLAGS="$gl_save_CXXFLAGS" ]) fi dnl Next, check if -Werror -Wuninitialized is useful with the dnl user's choice of $CXXFLAGS; some versions of gcc warn that it dnl has no effect if -O is not also used AC_CACHE_CHECK([whether -Wuninitialized is supported], [gl_cv_cxx_uninitialized_supported], [gl_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -Werror -Wuninitialized" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cxx_uninitialized_supported=yes], [gl_cv_cxx_uninitialized_supported=no]) CXXFLAGS="$gl_save_CXXFLAGS" ]) fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings-c++.m4 | sort) \ # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | # grep -v -x -f <( # awk '/^[^#]/ {print $1}' ../build-aux/g++-warning.spec)) gl_manywarn_set= for gl_manywarn_item in \ -W \ -Wabi-tag \ -Waddress \ -Waggressive-loop-optimizations \ -Wall \ -Wattributes \ -Wbool-compare \ -Wbuiltin-macro-redefined \ -Wcast-align \ -Wchar-subscripts \ -Wclobbered \ -Wcomment \ -Wcomments \ -Wconditionally-supported \ -Wconversion-null \ -Wcoverage-mismatch \ -Wcpp \ -Wctor-dtor-privacy \ -Wdate-time \ -Wdelete-incomplete \ -Wdelete-non-virtual-dtor \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdisabled-optimization \ -Wdiv-by-zero \ -Wdouble-promotion \ -Weffc++ \ -Wempty-body \ -Wendif-labels \ -Wenum-compare \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-signedness \ -Wformat-y2k \ -Wformat-zero-length \ -Wfree-nonheap-object \ -Wignored-qualifiers \ -Winherited-variadic-ctor \ -Winit-self \ -Winline \ -Wint-to-pointer-cast \ -Winvalid-memory-model \ -Winvalid-offsetof \ -Winvalid-pch \ -Wliteral-suffix \ -Wlogical-not-parentheses \ -Wlogical-op \ -Wmain \ -Wmaybe-uninitialized \ -Wmemset-transposed-args \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wmultichar \ -Wnarrowing \ -Wnoexcept \ -Wnon-template-friend \ -Wnon-virtual-dtor \ -Wnonnull \ -Wodr \ -Wold-style-cast \ -Wopenmp-simd \ -Woverflow \ -Woverlength-strings \ -Woverloaded-virtual \ -Wpacked \ -Wpacked-bitfield-compat \ -Wparentheses \ -Wpmf-conversions \ -Wpointer-arith \ -Wpragmas \ -Wreorder \ -Wreturn-local-addr \ -Wreturn-type \ -Wsequence-point \ -Wshadow \ -Wshift-count-negative \ -Wshift-count-overflow \ -Wsign-promo \ -Wsized-deallocation \ -Wsizeof-array-argument \ -Wsizeof-pointer-memaccess \ -Wstack-protector \ -Wstrict-aliasing \ -Wstrict-null-sentinel \ -Wstrict-overflow \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wsuggest-final-methods \ -Wsuggest-final-types \ -Wsuggest-override \ -Wswitch \ -Wswitch-bool \ -Wsync-nand \ -Wsystem-headers \ -Wtrampolines \ -Wtrigraphs \ -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused \ -Wunused-but-set-parameter \ -Wunused-but-set-variable \ -Wunused-function \ -Wunused-label \ -Wunused-local-typedefs \ -Wunused-macros \ -Wunused-parameter \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wuseless-cast \ -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvirtual-move-assign \ -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ -Wzero-as-null-pointer-constant \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # gcc --help=warnings outputs an unusual form for these options; list # them here so that the above 'comm' command doesn't report a false match. gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" # These are needed for older GCC versions. if test -n "$GXX"; then case `($CXX --version) 2>/dev/null` in 'g++ (GCC) '[[0-3]].* | \ 'g++ (GCC) '4.[[0-7]].*) gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" ;; esac fi # Disable specific options as needed. if test "$gl_cv_cxx_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi if test "$gl_cv_cxx_uninitialized_supported" = no; then gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" fi $1=$gl_manywarn_set AC_LANG_POP([C++]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/manywarnings.m4����������������������������������������������������������0000664�0000000�0000000�00000014557�14110572173�0017612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# manywarnings.m4 serial 23 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) # -------------------------------------------------- # Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. # Elements separated by whitespace. In set logic terms, the function # does OUTVAR = LISTVAR \ REMOVEVAR. AC_DEFUN([gl_MANYWARN_COMPLEMENT], [ gl_warn_set= set x $2; shift for gl_warn_item do case " $3 " in *" $gl_warn_item "*) ;; *) gl_AS_VAR_APPEND([gl_warn_set], [" $gl_warn_item"]) ;; esac done $1=$gl_warn_set ]) # gl_MANYWARN_ALL_GCC(VARIABLE) # ----------------------------- # Add all documented GCC warning parameters to variable VARIABLE. # Note that you need to test them using gl_WARN_ADD if you want to # make sure your gcc understands it. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_MANYWARN_ALL_GCC], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # Specialization for _AC_LANG = C. AC_DEFUN([gl_MANYWARN_ALL_GCC(C)], [ AC_LANG_PUSH([C]) dnl First, check for some issues that only occur when combining multiple dnl gcc warning categories. AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then dnl Check if -Wextra -Werror -Wno-missing-field-initializers is supported dnl with the current $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported], [gl_cv_cc_nomfi_supported], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wextra -Werror -Wno-missing-field-initializers" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_nomfi_supported=yes], [gl_cv_cc_nomfi_supported=no]) CFLAGS="$gl_save_CFLAGS" ]) if test "$gl_cv_cc_nomfi_supported" = yes; then dnl Now check whether -Wno-missing-field-initializers is needed dnl for the { 0, } construct. AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed], [gl_cv_cc_nomfi_needed], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wextra -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[int f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; return s1.b; } ]], [[]])], [gl_cv_cc_nomfi_needed=no], [gl_cv_cc_nomfi_needed=yes]) CFLAGS="$gl_save_CFLAGS" ]) fi dnl Next, check if -Werror -Wuninitialized is useful with the dnl user's choice of $CFLAGS; some versions of gcc warn that it dnl has no effect if -O is not also used AC_CACHE_CHECK([whether -Wuninitialized is supported], [gl_cv_cc_uninitialized_supported], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wuninitialized" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_uninitialized_supported=yes], [gl_cv_cc_uninitialized_supported=no]) CFLAGS="$gl_save_CFLAGS" ]) fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) $1= for gl_manywarn_item in -fanalyzer -fno-common \ -Wall \ -Warith-conversion \ -Wbad-function-cast \ -Wcast-align=strict \ -Wdate-time \ -Wdisabled-optimization \ -Wdouble-promotion \ -Wduplicated-branches \ -Wduplicated-cond \ -Wextra \ -Wformat-signedness \ -Winit-self \ -Winline \ -Winvalid-pch \ -Wlogical-op \ -Wmissing-declarations \ -Wmissing-include-dirs \ -Wmissing-prototypes \ -Wnested-externs \ -Wnull-dereference \ -Wold-style-definition \ -Wopenmp-simd \ -Woverlength-strings \ -Wpacked \ -Wpointer-arith \ -Wshadow \ -Wstack-protector \ -Wstrict-overflow \ -Wstrict-prototypes \ -Wsuggest-attribute=cold \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=malloc \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wsuggest-final-methods \ -Wsuggest-final-types \ -Wsync-nand \ -Wsystem-headers \ -Wtrampolines \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused-macros \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ -Wwrite-strings \ \ ; do gl_AS_VAR_APPEND([$1], [" $gl_manywarn_item"]) done # gcc --help=warnings outputs an unusual form for these options; list # them here so that the above 'comm' command doesn't report a false match. gl_AS_VAR_APPEND([$1], [' -Warray-bounds=2']) gl_AS_VAR_APPEND([$1], [' -Wattribute-alias=2']) gl_AS_VAR_APPEND([$1], [' -Wformat-overflow=2']) gl_AS_VAR_APPEND([$1], [' -Wformat=2']) gl_AS_VAR_APPEND([$1], [' -Wformat-truncation=2']) gl_AS_VAR_APPEND([$1], [' -Wimplicit-fallthrough=5']) gl_AS_VAR_APPEND([$1], [' -Wshift-overflow=2']) gl_AS_VAR_APPEND([$1], [' -Wunused-const-variable=2']) gl_AS_VAR_APPEND([$1], [' -Wvla-larger-than=4031']) # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[[0-3]].* | \ 'gcc (GCC) '4.[[0-7]].*) gl_AS_VAR_APPEND([$1], [' -fdiagnostics-show-option']) gl_AS_VAR_APPEND([$1], [' -funit-at-a-time']) ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then gl_AS_VAR_APPEND([$1], [' -Wno-missing-field-initializers']) fi if test "$gl_cv_cc_uninitialized_supported" = no; then gl_AS_VAR_APPEND([$1], [' -Wno-uninitialized']) fi # This warning have too many false alarms in GCC 11.2.1. # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101713 gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-malloc-leak']) AC_LANG_POP([C]) ]) # Specialization for _AC_LANG = C++. AC_DEFUN([gl_MANYWARN_ALL_GCC(C++)], [ gl_MANYWARN_ALL_GCC_CXX_IMPL([$1]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/math_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000050665�14110572173�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# math_h.m4 serial 125 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_MATH_H], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([math.h]) AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0;]])], [gl_cv_header_math_nan_works=yes], [gl_cv_header_math_nan_works=no])]) if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0;]])], [gl_cv_header_math_huge_val_works=yes], [gl_cv_header_math_huge_val_works=no])]) if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <math.h>]], [acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl]) ]) # gl_MATH_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_MATH_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_MATH_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) ]) AC_DEFUN([gl_MATH_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) HAVE_COSF=1; AC_SUBST([HAVE_COSF]) HAVE_COSL=1; AC_SUBST([HAVE_COSL]) HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) HAVE_FMA=1; AC_SUBST([HAVE_FMA]) HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) HAVE_POWF=1; AC_SUBST([HAVE_POWF]) HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) HAVE_RINT=1; AC_SUBST([HAVE_RINT]) HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) HAVE_SINF=1; AC_SUBST([HAVE_SINF]) HAVE_SINL=1; AC_SUBST([HAVE_SINL]) HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) HAVE_TANF=1; AC_SUBST([HAVE_TANF]) HAVE_TANL=1; AC_SUBST([HAVE_TANL]) HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL]) REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L]) REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL]) REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) REPLACE_SIGNBIT_USING_BUILTINS=0; AC_SUBST([REPLACE_SIGNBIT_USING_BUILTINS]) REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) ]) # gl_LONG_DOUBLE_VS_DOUBLE # determines whether 'long double' and 'double' have the same representation. # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. # The currently known platforms where this is the case are: # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], [ AC_CACHE_CHECK([whether long double and double are the same], [gl_cv_long_double_equals_double], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <float.h>]], [[typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ]])], [gl_cv_long_double_equals_double=yes], [gl_cv_long_double_equals_double=no]) ]) if test $gl_cv_long_double_equals_double = yes; then AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], [Define to 1 if 'long double' and 'double' have the same representation.]) HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) ]) ���������������������������������������������������������������������������gnulib-20210822~d383792/m4/mathfunc.m4��������������������������������������������������������������0000664�0000000�0000000�00000015456�14110572173�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mathfunc.m4 serial 12 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_MATHFUNC(FUNC, RETTYPE, PARAMTYPES [, INCLUDES] [, EXTRA-CODE]) # ------------------------------------------------------------------ # tests whether the function FUNC is available in libc or libm. # RETTYPE is the return type. PARAMTYPES is a parameter list, with parentheses. # It sets FUNC_LIBM to empty or "-lm" accordingly. AC_DEFUN([gl_MATHFUNC], [ dnl We need the RETTYPE and PARAMTYPES in order to force linking with the dnl function. dnl 1) With gcc >= 4.3 on glibc/x86_64, calls to the 'fabs' function dnl are inlined by the compiler, therefore linking of these calls does dnl not require -lm, but taking the function pointer of 'fabs' does. dnl 2) On MSVC 9, many math functions exist only as macros with arguments, dnl whereas the function pointer is undefined. dnl On the other hand, taking just the function pointer is not enough. dnl 1) On AIX 7.1, when 'long double' is 128 bit large ("xlc -qldbl128" or dnl "xlc -qlongdouble" or "gcc -mlong-double-128") many math functions dnl exist as macros with arguments, that may reference libm or even dnl completely undefined functions such as __rint128. dnl 2) In AIX 7.1 with gcc 4.2, when optimization is turned on, calls to dnl rint() with simple arguments are turned into rintf() calls by the dnl compiler. But while rint() is resides in libc, rintf() is in libm. m4_pushdef([func], [$1]) m4_pushdef([FUNC], [m4_translit([$1],[abcdefghijklmnopqrstuvwxyz], [ABCDEFGHIJKLMNOPQRSTUVWXYZ])]) m4_pushdef([ARGS], [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [m4_bpatsubst( [$3], [int \*], [&i_ret])], [float \*], [&f_ret])], [double \*], [&d_ret])], [long double \*], [&l_ret])], [int], [2])], [float], [1.618034f])], [long double], [1.618033988749894848L])], [double], [1.6180339887])], [void], [])]) FUNC[]_LIBM= AC_CACHE_CHECK([whether func() can be used without linking with libm], [gl_cv_func_]func[_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> $4 $2 (* volatile funcptr) $3 = ]func[; int i_ret; float f_ret; double d_ret; long double l_ret;]], [[$2 y = funcptr ]ARGS[ + ]func[ ]ARGS[; $5 return y < 0.3 || y > 1.7; ]])], [gl_cv_func_]func[_no_libm=yes], [gl_cv_func_]func[_no_libm=no]) ]) if test $gl_cv_func_[]func[]_no_libm = no; then AC_CACHE_CHECK([whether func() can be used with libm], [gl_cv_func_]func[_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> $4 $2 (* volatile funcptr) $3 = ]func[; int i_ret; float f_ret; double d_ret; long double l_ret;]], [[$2 y = funcptr ]ARGS[ + ]func[ ]ARGS[; $5 return y < 0.3 || y > 1.7; ]])], [gl_cv_func_]func[_in_libm=yes], [gl_cv_func_]func[_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_[]func[]_in_libm = yes; then FUNC[]_LIBM=-lm fi fi AC_SUBST(FUNC[_LIBM]) m4_popdef([ARGS]) m4_popdef([FUNC]) m4_popdef([func]) ]) # gl_COMMON_DOUBLE_MATHFUNC(FUNC) # ------------------------------- # tests whether the function FUNC is available in libc or libm. # It sets FUNC_LIBM to empty or "-lm" accordingly. # FUNC must be one of the following functions, that are present on all systems # and provided by libm on all systems except Mac OS X, BeOS, Haiku: # acos asin atan atan2 cbrt cos cosh erf erfc exp fmod hypot j0 j1 jn lgamma # log log10 log1p pow remainder sin sinh sqrt tan tanh y0 y1 yn AC_DEFUN([gl_COMMON_DOUBLE_MATHFUNC], [ AC_REQUIRE([gl_COMMON_DOUBLE_MATHFUNC_TEST]) m4_pushdef([FUNC], [m4_translit([$1],[abcdefghijklmnopqrstuvwxyz], [ABCDEFGHIJKLMNOPQRSTUVWXYZ])]) FUNC[]_LIBM="$POW_LIBM" AC_SUBST(FUNC[_LIBM]) m4_popdef([FUNC]) ]) AC_DEFUN([gl_COMMON_DOUBLE_MATHFUNC_TEST], [ dnl We could use any of the following: dnl gl_MATHFUNC([acos], [double], [(double)]) dnl gl_MATHFUNC([asin], [double], [(double)]) dnl gl_MATHFUNC([atan], [double], [(double)]) dnl gl_MATHFUNC([atan2], [double], [(double, double)]) dnl gl_MATHFUNC([cbrt], [double], [(double)]) dnl gl_MATHFUNC([cos], [double], [(double)]) dnl gl_MATHFUNC([cosh], [double], [(double)]) dnl gl_MATHFUNC([erf], [double], [(double)]) dnl gl_MATHFUNC([erfc], [double], [(double)]) dnl gl_MATHFUNC([exp], [double], [(double)]) dnl gl_MATHFUNC([fmod], [double], [(double, double)]) dnl gl_MATHFUNC([hypot], [double], [(double, double)]) dnl gl_MATHFUNC([j0], [double], [(double)]) dnl gl_MATHFUNC([j1], [double], [(double)]) dnl gl_MATHFUNC([jn], [double], [(int, double)]) dnl gl_MATHFUNC([lgamma], [double], [(double)]) dnl gl_MATHFUNC([log], [double], [(double)]) dnl gl_MATHFUNC([log10], [double], [(double)]) dnl gl_MATHFUNC([log1p], [double], [(double)]) dnl gl_MATHFUNC([pow], [double], [(double, double)]) dnl gl_MATHFUNC([remainder], [double], [(double, double)]) dnl gl_MATHFUNC([sin], [double], [(double)]) dnl gl_MATHFUNC([sinh], [double], [(double)]) dnl gl_MATHFUNC([sqrt], [double], [(double)]) dnl gl_MATHFUNC([tan], [double], [(double)]) dnl gl_MATHFUNC([tanh], [double], [(double)]) dnl gl_MATHFUNC([y0], [double], [(double)]) dnl gl_MATHFUNC([y1], [double], [(double)]) dnl gl_MATHFUNC([yn], [double], [(int, double)]) gl_MATHFUNC([pow], [double], [(double, double)]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbchar.m4����������������������������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbchar.m4 serial 9 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbchar.m4 dnl From Bruno Haible. AC_DEFUN([gl_MBCHAR], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) �������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbfile.m4����������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbfile.m4 serial 7 dnl Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbfile.h dnl From Bruno Haible. AC_DEFUN([gl_MBFILE], [ AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbiter.m4����������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0016345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbiter.m4 serial 7 dnl Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbiter.h dnl From Bruno Haible. AC_DEFUN([gl_MBITER], [ AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbrlen.m4����������������������������������������������������������������0000664�0000000�0000000�00000016121�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrlen.m4 serial 11 -*- coding: utf-8 -*- dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRLEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_FUNC_MBRTOWC]) AC_CHECK_FUNCS_ONCE([mbrlen]) if test $ac_cv_func_mbrlen = no; then HAVE_MBRLEN=0 AC_CHECK_DECLS([mbrlen],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrlen = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrlen() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRLEN=1 fi else dnl Most bugs affecting the system's mbrtowc function also affect the dnl mbrlen function. So override mbrlen whenever mbrtowc is overridden. dnl We could also run the individual tests below; the results would be dnl the same. if test $REPLACE_MBRTOWC = 1; then REPLACE_MBRLEN=1 fi fi ]) dnl Test whether mbrlen puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrlen_incomplete_state. AC_DEFUN([gl_MBRLEN_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen handles incomplete characters], [gl_cv_func_mbrlen_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrlen_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 1; } return 0; }]])], [gl_cv_func_mbrlen_incomplete_state=yes], [gl_cv_func_mbrlen_incomplete_state=no], []) fi ]) ]) dnl Test whether mbrlen, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrlen_retval. AC_DEFUN([gl_MBRLEN_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen has a correct return value], [gl_cv_func_mbrlen_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX and Solaris. hpux* | solaris*) gl_cv_func_mbrlen_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrlen (input + 2, 5, &state) != 1) result |= 1; } } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrlen (input + 2, 5, &state) != 2) result |= 2; } } return result; }]])], [gl_cv_func_mbrlen_retval=yes], [gl_cv_func_mbrlen_retval=no], []) fi ]) ]) dnl Test whether mbrlen, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrlen_nul_retval. AC_DEFUN([gl_MBRLEN_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen returns 0 when parsing a NUL character], [gl_cv_func_mbrlen_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 9. solaris2.9) gl_cv_func_mbrlen_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This crashes on Solaris 9 inside __mbrtowc_dense_gb18030. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen ("", 1, &state) != 0) return 1; } return 0; }]])], [gl_cv_func_mbrlen_nul_retval=yes], [gl_cv_func_mbrlen_nul_retval=no], []) fi ]) ]) dnl Test whether mbrlen returns the correct value on empty input. AC_DEFUN([gl_MBRLEN_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen works on empty input], [gl_cv_func_mbrlen_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrlen_empty_input="guessing no" ;; *) gl_cv_func_mbrlen_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static mbstate_t mbs; int main (void) { return mbrlen ("", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrlen_empty_input=yes], [gl_cv_func_mbrlen_empty_input=no], [:]) ]) ]) # Prerequisites of lib/mbrlen.c. AC_DEFUN([gl_PREREQ_MBRLEN], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbrtoc32.m4��������������������������������������������������������������0000664�0000000�0000000�00000016031�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtoc32.m4 serial 9 dnl Copyright (C) 2014-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOC32], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_REQUIRE([gl_TYPE_CHAR32_T]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) if test $gl_cv_func_mbrtoc32 = no; then HAVE_MBRTOC32=0 else if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOC32=1 else gl_MBRTOC32_EMPTY_INPUT gl_MBRTOC32_C_LOCALE case "$gl_cv_func_mbrtoc32_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOC32_EMPTY_INPUT_BUG], [1], [Define if the mbrtoc32 function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOC32=1 ;; esac case "$gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtoc32 function may signal encoding errors in the C locale.]) REPLACE_MBRTOC32=1 ;; esac fi if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_MBRTOC32=1 fi fi ]) dnl We can't use AC_CHECK_FUNC here, because mbrtoc32() is defined as a dnl static inline function on Haiku 2020. AC_DEFUN([gl_CHECK_FUNC_MBRTOC32], [ AC_CACHE_CHECK([for mbrtoc32], [gl_cv_func_mbrtoc32], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <uchar.h> ]], [[char32_t c; return mbrtoc32 (&c, "", 1, NULL) == 0; ]]) ], [gl_cv_func_mbrtoc32=yes], [gl_cv_func_mbrtoc32=no]) ]) ]) AC_DEFUN([gl_MBRTOC32_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtoc32 works on empty input], [gl_cv_func_mbrtoc32_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; *) gl_cv_func_mbrtoc32_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <uchar.h> static char32_t wc; static mbstate_t mbs; int main (void) { return mbrtoc32 (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtoc32_empty_input=yes], [gl_cv_func_mbrtoc32_empty_input=no], [:]) ]) ]) AC_DEFUN([gl_MBRTOC32_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="$gl_cross_guess_normal" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #include <uchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; char32_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtoc32 (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="guessing yes" ;; esac ]) ]) ]) dnl Test whether mbrtoc32 works not worse than mbrtowc. dnl Result is HAVE_WORKING_MBRTOC32. AC_DEFUN([gl_MBRTOC32_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_TYPE_CHAR32_T]) AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $gl_cv_func_mbrtoc32 = no; then HAVE_WORKING_MBRTOC32=0 else AC_CACHE_CHECK([whether mbrtoc32 works as well as mbrtowc], [gl_cv_func_mbrtoc32_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, Solaris, native Windows. freebsd* | midnightbsd* | solaris* | mingw*) gl_cv_func_mbrtoc32_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtoc32_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <uchar.h> int main () { int result = 0; /* This fails on native Windows: mbrtoc32 returns (size_t)-1. mbrtowc returns 1 (correct). */ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\374", 1, &state) == 1) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\374", 1, &state) != 1) result |= 1; } } /* This fails on FreeBSD 13.0 and Solaris 11.4: mbrtoc32 returns (size_t)-2 or (size_t)-1. mbrtowc returns 4 (correct). */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\224\071\375\067", 4, &state) == 4) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\224\071\375\067", 4, &state) != 4) result |= 2; } } return result; }]])], [gl_cv_func_mbrtoc32_sanitycheck=yes], [gl_cv_func_mbrtoc32_sanitycheck=no], [:]) fi ]) case "$gl_cv_func_mbrtoc32_sanitycheck" in *yes) HAVE_WORKING_MBRTOC32=1 AC_DEFINE([HAVE_WORKING_MBRTOC32], [1], [Define if the mbrtoc32 function basically works.]) ;; *) HAVE_WORKING_MBRTOC32=0 ;; esac fi AC_SUBST([HAVE_WORKING_MBRTOC32]) ]) # Prerequisites of lib/mbrtoc32.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOC32], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbrtowc.m4���������������������������������������������������������������0000664�0000000�0000000�00000055646�14110572173�0016556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtowc.m4 serial 38 -*- coding: utf-8 -*- dnl Copyright (C) 2001-2002, 2004-2005, 2008-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 AC_CHECK_DECLS([mbrtowc],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrtowc = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else gl_MBRTOWC_NULL_ARG1 gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL gl_MBRTOWC_STORES_INCOMPLETE gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], [Define if the mbrtowc function has the NULL pwc argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], [Define if the mbrtowc function has the NULL string argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], [Define if the mbrtowc function returns a wrong return value.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], [Define if the mbrtowc function does not return 0 for a NUL character.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1], [Define if the mbrtowc function stores a wide character when reporting incomplete input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], [Define if the mbrtowc function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtowc function may signal encoding errors in the C locale.]) REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) LIB_MBRTOWC= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) LIB_MBRTOWC= ;; *) LIB_MBRTOWC="$LIBPTHREAD" ;; esac ;; esac else LIB_MBRTOWC= fi dnl LIB_MBRTOWC is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([LIB_MBRTOWC]) ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that dnl redefines the semantics of the given mbstate_t type. dnl Result is REPLACE_MBSTATE_T. dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to dnl avoid inconsistencies. AC_DEFUN([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) dnl On native Windows, we know exactly how mbsinit() behaves and don't need dnl to override it, even if - like on MSVC - mbsinit() is only defined as dnl an inline function, not as a global function. if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ]) dnl Test whether mbrtowc puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrtowc_incomplete_state. AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) else if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) fi fi ]) ]) dnl Test whether mbrtowc works not worse than mbtowc. dnl Result is gl_cv_func_mbrtowc_sanitycheck. AC_DEFUN([gl_MBRTOWC_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], [gl_cv_func_mbrtowc_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_sanitycheck=yes], [gl_cv_func_mbrtowc_sanitycheck=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL pwc argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg1. AC_DEFUN([gl_MBRTOWC_NULL_ARG1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], [gl_cv_func_mbrtowc_null_arg1], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_null_arg1=yes], [gl_cv_func_mbrtowc_null_arg1=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL string argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg2. AC_DEFUN([gl_MBRTOWC_NULL_ARG2], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], [gl_cv_func_mbrtowc_null_arg2], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_null_arg2=yes], [gl_cv_func_mbrtowc_null_arg2=no], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrtowc_retval. AC_DEFUN([gl_MBRTOWC_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether mbrtowc has a correct return value], [gl_cv_func_mbrtowc_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); }]])], [gl_cv_func_mbrtowc_retval=yes], [if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrtowc_nul_retval. AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], [gl_cv_func_mbrtowc_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) dnl Test whether mbrtowc stores a wide character when reporting incomplete dnl input. AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc stores incomplete characters], [gl_cv_func_mbrtowc_stores_incomplete], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac changequote([,])dnl case "$host_os" in mingw*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) ;; *) AC_REQUIRE([gt_LOCALE_FR_UTF8]) if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) fi ;; esac ]) ]) dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works on empty input], [gl_cv_func_mbrtowc_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtowc_empty_input=yes], [gl_cv_func_mbrtowc_empty_input=no], [:]) ]) ]) dnl Test whether mbrtowc reports encoding errors in the C locale. dnl Although POSIX was never intended to allow this, the GNU C Library dnl and other implementations do it. See: dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #include <wchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac ]) ]) ]) # Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ AC_REQUIRE([AC_C_INLINE]) : ]) # Prerequisites of lib/mbtowc-lock.c. AC_DEFUN([gl_PREREQ_MBTOWC_LOCK], [ gl_VISIBILITY ]) dnl From Paul Eggert dnl This is an override of an autoconf macro. AC_DEFUN([AC_FUNC_MBRTOWC], [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h>]], [[wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], [gl_cv_func_mbrtowc=yes], [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) fi ]) ������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbsinit.m4���������������������������������������������������������������0000664�0000000�0000000�00000002401�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsinit.m4 serial 9 dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSINIT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsinit]) if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 AC_CHECK_DECLS([mbsinit],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbsinit = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else dnl On mingw, mbsinit() always returns 1, which is inappropriate for dnl states produced by mbrtowc() for an incomplete multibyte character dnl in multibyte locales. case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi ]) # Prerequisites of lib/mbsinit.c. AC_DEFUN([gl_PREREQ_MBSINIT], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbslen.m4����������������������������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbslen.m4 serial 3 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSLEN], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([mbslen]) if test $ac_cv_func_mbslen = yes; then HAVE_MBSLEN=1 else HAVE_MBSLEN=0 fi ]) �����������������������������������������������gnulib-20210822~d383792/m4/mbsnrtowcs.m4������������������������������������������������������������0000664�0000000�0000000�00000007031�14110572173�0017263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsnrtowcs.m4 serial 6 dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSNRTOWCS], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Persuade glibc <wchar.h> to declare mbsnrtowcs(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsnrtowcs]) if test $ac_cv_func_mbsnrtowcs = no; then HAVE_MBSNRTOWCS=0 else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSNRTOWCS=1 else gl_MBSNRTOWCS_WORKS_IN_TRADITIONAL_LOCALE case "$gl_cv_func_mbsnrtowcs_works_in_traditional_locale" in *yes) ;; *) REPLACE_MBSNRTOWCS=1 ;; esac fi fi ]) # Prerequisites of lib/mbsnrtowcs.c. AC_DEFUN([gl_PREREQ_MBSNRTOWCS], [ : ]) dnl Test whether mbsnrtowcs works in an ISO-8859-1 locale. dnl Result is gl_cv_func_mbsnrtowcs_works_in_traditional_locale. AC_DEFUN([gl_MBSNRTOWCS_WORKS_IN_TRADITIONAL_LOCALE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbsnrtowcs works in a traditional locale], [gl_cv_func_mbsnrtowcs_works_in_traditional_locale], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbsnrtowcs_works_in_traditional_locale="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbsnrtowcs_works_in_traditional_locale="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 11.4: mbsnrtowcs stores a wrong wide character: 0xDF instead of btowc (0xDF). */ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ char input[] = "B\374\337er"; /* "Büßer" */ mbstate_t state; mbstate_t temp_state; wchar_t wc; size_t ret; const char *src; #define BUFSIZE 10 wchar_t buf[BUFSIZE]; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (wchar_t) 0xBADFACE; } memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); if (!(ret == 1 && wc == 'B' && mbsinit (&state))) return 1; input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); if (!(ret == 1 && wctob (wc) == (unsigned char) '\374' && mbsinit (&state))) return 2; input[1] = '\0'; src = input + 2; temp_state = state; ret = mbsnrtowcs (NULL, &src, 4, 1, &temp_state); if (!(ret == 3 && src == input + 2 && mbsinit (&state))) return 3; src = input + 2; ret = mbsnrtowcs (buf, &src, 4, 1, &state); if (!(ret == 1)) return 4; if (!(src == input + 3)) return 5; if (!(buf[0] == btowc ((unsigned char) '\337'))) return 6; } return 0; }]])], [gl_cv_func_mbsnrtowcs_works_in_traditional_locale=yes], [gl_cv_func_mbsnrtowcs_works_in_traditional_locale=no], [:]) fi ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbsrtowcs.m4�������������������������������������������������������������0000664�0000000�0000000�00000010270�14110572173�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsrtowcs.m4 serial 14 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSRTOWCS], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsrtowcs]) if test $ac_cv_func_mbsrtowcs = no; then HAVE_MBSRTOWCS=0 AC_CHECK_DECLS([mbsrtowcs],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbsrtowcs = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbsrtowcs() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSRTOWCS=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSRTOWCS=1 else gl_MBSRTOWCS_WORKS case "$gl_cv_func_mbsrtowcs_works" in *yes) ;; *) REPLACE_MBSRTOWCS=1 ;; esac fi fi ]) dnl Test whether mbsrtowcs works. dnl Result is gl_cv_func_mbsrtowcs_works. AC_DEFUN([gl_MBSRTOWCS_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbsrtowcs works], [gl_cv_func_mbsrtowcs_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, mingw. hpux* | solaris* | mingw*) gl_cv_func_mbsrtowcs_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbsrtowcs_works="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; /* Test whether the function supports a NULL destination argument. This fails on native Windows. */ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { const char input[] = "\337er"; const char *src = input; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbsrtowcs (NULL, &src, 1, &state) != 3 || src != input) result |= 1; } /* Test whether the function works when started with a conversion state in non-initial state. This fails on HP-UX 11.11 and Solaris 10. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) if (!mbsinit (&state)) { const char *src = input + 2; if (mbsrtowcs (NULL, &src, 10, &state) != 4) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "<\306\374\313\334\270\354>"; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2)) if (!mbsinit (&state)) { const char *src = input + 4; if (mbsrtowcs (NULL, &src, 10, &state) != 3) result |= 4; } } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { const char input[] = "B\250\271\201\060\211\070er"; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) if (!mbsinit (&state)) { const char *src = input + 2; if (mbsrtowcs (NULL, &src, 10, &state) != 4) result |= 8; } } return result; }]])], [gl_cv_func_mbsrtowcs_works=yes], [gl_cv_func_mbsrtowcs_works=no], [:]) fi ]) ]) # Prerequisites of lib/mbsrtowcs.c. AC_DEFUN([gl_PREREQ_MBSRTOWCS], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbstate_t.m4�������������������������������������������������������������0000664�0000000�0000000�00000002210�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbstate_t.m4 serial 14 dnl Copyright (C) 2000-2002, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # From Paul Eggert. # BeOS 5 has <wchar.h> but does not define mbstate_t, # so you can't declare an object of that type. # Check for this incompatibility with Standard C. # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ #include <wchar.h>]], [[mbstate_t x; return sizeof x;]])], [ac_cv_type_mbstate_t=yes], [ac_cv_type_mbstate_t=no])]) if test $ac_cv_type_mbstate_t = yes; then AC_DEFINE([HAVE_MBSTATE_T], [1], [Define to 1 if <wchar.h> declares mbstate_t.]) else AC_DEFINE([mbstate_t], [int], [Define to a type if <wchar.h> does not define.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbswidth.m4��������������������������������������������������������������0000664�0000000�0000000�00000002247�14110572173�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbswidth.m4 serial 19 dnl Copyright (C) 2000-2002, 2004, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbswidth.c dnl From Bruno Haible. AC_DEFUN([gl_MBSWIDTH], [ AC_CHECK_HEADERS_ONCE([wchar.h]) AC_CHECK_FUNCS_ONCE([isascii mbsinit]) dnl UnixWare 7.1.1 <wchar.h> has a declaration of a function mbswidth() dnl that clashes with ours. AC_CACHE_CHECK([whether mbswidth is declared in <wchar.h>], [ac_cv_have_decl_mbswidth], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[char *p = (char *) mbswidth; return !p; ]])], [ac_cv_have_decl_mbswidth=yes], [ac_cv_have_decl_mbswidth=no])]) if test $ac_cv_have_decl_mbswidth = yes; then ac_val=1 else ac_val=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_MBSWIDTH_IN_WCHAR_H], [$ac_val], [Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0 otherwise.]) AC_TYPE_MBSTATE_T ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mbtowc.m4����������������������������������������������������������������0000664�0000000�0000000�00000001063�14110572173�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbtowc.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBTOWC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([mbtowc]) if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 else if false; then REPLACE_MBTOWC=1 fi fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/md4.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0015552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# md4.m4 serial 7 dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/md4.c. AC_DEFUN([gl_MD4], [ AC_REQUIRE([gl_BIGENDIAN]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/md5.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0015556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# md5.m4 serial 14 dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MD5], [ dnl Prerequisites of lib/md5.c. AC_REQUIRE([gl_BIGENDIAN]) dnl Determine HAVE_OPENSSL_MD5 and LIB_CRYPTO gl_CRYPTO_CHECK([MD5]) ]) �������������������������������������������������������������������gnulib-20210822~d383792/m4/memalign.m4��������������������������������������������������������������0000664�0000000�0000000�00000003060�14110572173�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memalign.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMALIGN], [ AC_REQUIRE([gl_MALLOC_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([memalign]) if test $ac_cv_func_memalign = yes; then dnl On Solaris 11, memalign (2, n) always returns NULL. AC_CACHE_CHECK([whether memalign works for small alignments], [gl_cv_func_memalign_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <malloc.h> #include <stdlib.h> ]], [[int result = 0; if (memalign (1, 1) == NULL) result |= 1; if (memalign (2, 1) == NULL) result |= 2; return result; ]]) ], [gl_cv_func_memalign_works=yes], [gl_cv_func_memalign_works=no], [case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_memalign_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memalign_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_memalign_works" in *yes) ;; *) REPLACE_MEMALIGN=1 ;; esac else dnl The system does not have memalign. HAVE_MEMALIGN=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memcasecmp.m4������������������������������������������������������������0000664�0000000�0000000�00000000466�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MEMCASECMP], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memchr.m4����������������������������������������������������������������0000664�0000000�0000000�00000006520�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr.m4 serial 18 dnl Copyright (C) 2002-2004, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # memchr should cast the second argument to 'unsigned char'. # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { /* Test against bugs on glibc systems. */ if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; /* Test against bug on AIX 7.2. */ if (memchr (fence - 4, '6', 16) != fence - 4) result |= 8; } /* Test against bug on Android 4.3. */ { char input[3]; input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) result |= 16; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_memchr_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memcmp.m4����������������������������������������������������������������0000664�0000000�0000000�00000004367�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcmp.m4 serial 16 dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMCMP], [ dnl We don't use AC_FUNC_MEMCMP any more, because it is no longer maintained dnl in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for working memcmp], [gl_cv_func_memcmp_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[/* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ]])], [gl_cv_func_memcmp_working=yes], [gl_cv_func_memcmp_working=no], [dnl When cross-compiling, guess memcmp works when it exists. dnl This is useful for mingw. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h>]], [[int ret = memcmp ("foo", "bar", 0);]])], [gl_cv_func_memcmp_working="guessing yes"], [gl_cv_func_memcmp_working="guessing no"]) ]) ]) case "$gl_cv_func_memcmp_working" in *yes) gl_func_memcmp=yes ;; *) gl_func_memcmp=no ;; esac if test $gl_func_memcmp = no; then AC_DEFINE([memcmp], [rpl_memcmp], [Define to rpl_memcmp if the replacement function should be used.]) fi ]) # Prerequisites of lib/memcmp.c. AC_DEFUN([gl_PREREQ_MEMCMP], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memcoll.m4���������������������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0016516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcoll.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MEMCOLL], [ AC_REQUIRE([AC_C_RESTRICT]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memcpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcpy.m4 serial 4 dnl Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMCPY], [ AC_CHECK_FUNCS([memcpy]) ]) # Prerequisites of lib/memcpy.c. AC_DEFUN([gl_PREREQ_MEMCPY], [ : ]) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memmem.m4����������������������������������������������������������������0000664�0000000�0000000�00000011477�14110572173�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memmem.m4 serial 29 dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check that memmem is present and functional. AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE], [ dnl Persuade glibc <string.h> to declare memmem(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([memmem]) if test $ac_cv_func_memmem = yes; then HAVE_MEMMEM=1 else HAVE_MEMMEM=0 fi AC_CHECK_DECLS_ONCE([memmem]) if test $ac_cv_have_decl_memmem = no; then HAVE_DECL_MEMMEM=0 else dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092. dnl Also check that we handle empty needles correctly. AC_CACHE_CHECK([whether memmem works], [gl_cv_func_memmem_works_always], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for memmem */ #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P ]], [[ int result = 0; if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) result |= 1; /* Check for empty needle behavior. */ { const char *haystack = "AAA"; if (memmem (haystack, 3, (const char *) 1, 0) != haystack) result |= 2; } return result; ]])], [gl_cv_func_memmem_works_always=yes], [gl_cv_func_memmem_works_always=no], [dnl glibc 2.9..2.12 and cygwin 1.7.7 have issue #12092 above. dnl Also empty needles work on glibc >= 2.1 and cygwin >= 1.7.0. dnl uClibc is not affected, since it uses different source code. dnl Assume that it works on all other platforms (even if not linear). AC_EGREP_CPP([Lucky user], [ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ || __GLIBC_MINOR__ > 12)) \ || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_memmem_works_always="guessing yes"], [gl_cv_func_memmem_works_always="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_memmem_works_always" in *yes) ;; *) REPLACE_MEMMEM=1 ;; esac fi gl_PREREQ_MEMMEM ]) # gl_FUNC_MEMMEM_SIMPLE dnl Additionally, check that memmem has linear performance characteristics AC_DEFUN([gl_FUNC_MEMMEM], [ AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE]) if test $HAVE_DECL_MEMMEM = 1 && test $REPLACE_MEMMEM = 0; then AC_CACHE_CHECK([whether memmem works in linear time], [gl_cv_func_memmem_works_fast], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <signal.h> /* for signal */ #include <string.h> /* for memmem */ #include <stdlib.h> /* for malloc */ #include <unistd.h> /* for alarm */ static void quit (int sig) { _exit (sig + 128); } ]], [[ int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack memmem. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; memset (needle, 'A', m); needle[m] = 'B'; if (!memmem (haystack, 2 * m + 1, needle, m + 1)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ]])], [gl_cv_func_memmem_works_fast=yes], [gl_cv_func_memmem_works_fast=no], [dnl Only glibc >= 2.9 and cygwin > 1.7.0 are known to have a dnl memmem that works in linear time. AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 0) Lucky user #endif #endif ], [gl_cv_func_memmem_works_fast="guessing yes"], [gl_cv_func_memmem_works_fast="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_memmem_works_fast" in *yes) ;; *) REPLACE_MEMMEM=1 ;; esac fi ]) # gl_FUNC_MEMMEM # Prerequisites of lib/memmem.c. AC_DEFUN([gl_PREREQ_MEMMEM], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memmove.m4���������������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0016527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memmove.m4 serial 4 dnl Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMMOVE], [ AC_CHECK_FUNCS([memmove]) ]) # Prerequisites of lib/memmove.c. AC_DEFUN([gl_PREREQ_MEMMOVE], [ : ]) �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mempcpy.m4���������������������������������������������������������������0000664�0000000�0000000�00000001337�14110572173�0016537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mempcpy.m4 serial 12 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMPCPY], [ dnl Persuade glibc <string.h> to declare mempcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([mempcpy]) if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 fi ]) # Prerequisites of lib/mempcpy.c. AC_DEFUN([gl_PREREQ_MEMPCPY], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memrchr.m4���������������������������������������������������������������0000664�0000000�0000000�00000001244�14110572173�0016517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memrchr.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMRCHR], [ dnl Persuade glibc <string.h> to declare memrchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([memrchr]) if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi AC_CHECK_FUNCS([memrchr]) ]) # Prerequisites of lib/memrchr.c. AC_DEFUN([gl_PREREQ_MEMRCHR], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memset.m4����������������������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memset.m4 serial 4 dnl Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMSET], [ AC_CHECK_FUNCS([memset]) ]) # Prerequisites of lib/memset.c. AC_DEFUN([gl_PREREQ_MEMSET], [ : ]) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/memxor.m4����������������������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0016367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memxor.m4 serial 4 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MEMXOR], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mgetgroups.m4������������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MGETGROUPS], [ AC_CHECK_FUNCS_ONCE([getgrouplist]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/minmax.m4����������������������������������������������������������������0000664�0000000�0000000�00000002455�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/minus-zero.m4������������������������������������������������������������0000664�0000000�0000000�00000004640�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minus-zero.m4 serial 2 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Macros for floating-point negative zero. # Keep in sync with tests/minus-zero.h! # Expands to code that defines a variable or macro minus_zerof. AC_DEFUN([gl_FLOAT_MINUS_ZERO_CODE], [[ #include <float.h> /* minus_zerof represents the value -0.0f. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. ICC 10.0 has a bug when optimizing the expression -zero. The expression -FLT_MIN * FLT_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static float compute_minus_zerof (void) { return -FLT_MIN * FLT_MIN; } # define minus_zerof compute_minus_zerof () #else float minus_zerof = -0.0f; #endif ]]) # Expands to code that defines a variable or macro minus_zerod. AC_DEFUN([gl_DOUBLE_MINUS_ZERO_CODE], [[ #include <float.h> /* minus_zerod represents the value -0.0. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zerod (void) { return -DBL_MIN * DBL_MIN; } # define minus_zerod compute_minus_zerod () #else double minus_zerod = -0.0; #endif ]]) # Expands to code that defines a variable or macro minus_zerol. AC_DEFUN([gl_LONG_DOUBLE_MINUS_ZERO_CODE], [[ #include <float.h> #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L #endif /* minus_zerol represents the value -0.0L. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. IRIX cc can't put -0.0L into .data, but can compute at runtime. ICC 10.0 has a bug when optimizing the expression -zero. The expression -LDBL_MIN * LDBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static long double compute_minus_zerol (void) { return -LDBL_MIN * LDBL_MIN; } # define minus_zerol compute_minus_zerol () #else long double minus_zerol = -0.0L; #endif ]]) ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkancesdirs.m4�����������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a file's ancestor directories. dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MKANCESDIRS], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkdir-p.m4���������������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0016425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdir-p.m4 serial 15 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MKDIR_PARENTS], [ dnl Prerequisites of lib/dirchownmod.c. AC_CHECK_FUNCS_ONCE([fchmod]) ]) ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkdir.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006501�14110572173�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 17 # Copyright (C) 2001, 2003-2004, 2006, 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. # On others, mkdir ("foo/./", 0700) mistakenly succeeds. # On such systems, arrange to use a wrapper function. AC_DEFUN([gl_FUNC_MKDIR], [dnl AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether mkdir handles trailing slash], [gl_cv_func_mkdir_trailing_slash_works], [rm -rf conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/stat.h> ]GL_MDA_DEFINES], [[return mkdir ("conftest.dir/", 0700);]])], [gl_cv_func_mkdir_trailing_slash_works=yes], [gl_cv_func_mkdir_trailing_slash_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_mkdir_trailing_slash_works="guessing yes"], [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir ]) case "$gl_cv_func_mkdir_trailing_slash_works" in *yes) ;; *) REPLACE_MKDIR=1 ;; esac AC_CACHE_CHECK([whether mkdir handles trailing dot], [gl_cv_func_mkdir_trailing_dot_works], [rm -rf conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/stat.h> ]GL_MDA_DEFINES], [[return !mkdir ("conftest.dir/./", 0700);]])], [gl_cv_func_mkdir_trailing_dot_works=yes], [gl_cv_func_mkdir_trailing_dot_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir ] ) case "$gl_cv_func_mkdir_trailing_dot_works" in *yes) ;; *) REPLACE_MKDIR=1 AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly creates a directory given with a trailing dot component.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkdirat.m4���������������������������������������������������������������0000664�0000000�0000000�00000001206�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdirat.m4 serial 1 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_MKDIRAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkdirat]) if test $ac_cv_func_mkdirat != yes; then HAVE_MKDIRAT=0 fi ]) # Prerequisite of mkdirat's declaration and of lib/mkdirat.c. AC_DEFUN([gl_PREREQ_MKDIRAT], [ AC_REQUIRE([AC_TYPE_MODE_T]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkdtemp.m4���������������������������������������������������������������0000664�0000000�0000000�00000001027�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdtemp.m4 serial 8 dnl Copyright (C) 2001-2003, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MKDTEMP], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([mkdtemp]) if test $ac_cv_func_mkdtemp = no; then HAVE_MKDTEMP=0 fi ]) # Prerequisites of lib/mkdtemp.c AC_DEFUN([gl_PREREQ_MKDTEMP], [: ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkfifo.m4����������������������������������������������������������������0000664�0000000�0000000�00000004754�14110572173�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # See if we need to provide mkfifo replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_MKFIFO], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We can't use AC_CHECK_FUNC here, because mkfifo() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for mkfifo], [gl_cv_func_mkfifo], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h>]], [[return mkfifo("/",0);]]) ], [gl_cv_func_mkfifo=yes], [gl_cv_func_mkfifo=no]) ]) if test $gl_cv_func_mkfifo = no; then HAVE_MKFIFO=0 else AC_DEFINE([HAVE_MKFIFO], [1], [Define to 1 if you have a 'mkfifo' function.]) dnl Check for Solaris 9 and FreeBSD bug with trailing slash. AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether mkfifo rejects trailing slashes], [gl_cv_func_mkfifo_works], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[int result = 0; if (!mkfifo ("conftest.tmp/", 0600)) result |= 1; #if HAVE_LSTAT if (!mkfifo ("conftest.lnk/", 0600)) result |= 2; #endif return result; ]])], [gl_cv_func_mkfifo_works=yes], [gl_cv_func_mkfifo_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mkfifo_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkfifo_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkfifo_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case "$gl_cv_func_mkfifo_works" in *yes) ;; *) AC_DEFINE([MKFIFO_TRAILING_SLASH_BUG], [1], [Define to 1 if mkfifo does not reject trailing slash]) REPLACE_MKFIFO=1 ;; esac fi ]) ��������������������gnulib-20210822~d383792/m4/mkfifoat.m4��������������������������������������������������������������0000664�0000000�0000000�00000004255�14110572173�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # See if we need to provide mkfifoat/mknodat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_MKFIFOAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <sys/stat.h> to declare mkfifoat() and mknodat(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_OPENAT]) AC_CHECK_FUNCS_ONCE([mkfifoat mknodat]) if test $ac_cv_func_mkfifoat = yes; then dnl Check for AIX 7.2 bug with trailing slash. AC_CACHE_CHECK([whether mkfifoat rejects trailing slashes], [gl_cv_func_mkfifoat_works], [rm -f conftest.tmp AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> #include <sys/stat.h> ]], [[int result = 0; if (!mkfifoat (AT_FDCWD, "conftest.tmp/", 0600)) result |= 1; return result; ]]) ], [gl_cv_func_mkfifoat_works=yes], [gl_cv_func_mkfifoat_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mkfifoat_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkfifoat_works="guessing yes" ;; # Guess no on AIX systems. aix*) gl_cv_func_mkfifoat_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkfifoat_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp ]) case "$gl_cv_func_mkfifoat_works" in *yes) ;; *) REPLACE_MKFIFOAT=1 dnl mknodat() has the same bug as mkfifoat(). REPLACE_MKNODAT=1 ;; esac else # No known system has mkfifoat but not mknodat HAVE_MKFIFOAT=0 HAVE_MKNODAT=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mknod.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004771�14110572173�0016202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # See if we need to provide mknod replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_MKNOD], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_MKFIFO]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mknod]) if test $ac_cv_func_mknod = no; then HAVE_MKNOD=0 else dnl Detect BSD bug, where mknod requires root privileges to create fifo. AC_CACHE_CHECK([whether mknod can create fifo without root privileges], [gl_cv_func_mknod_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> #include <unistd.h> /* Copied from root-uid.h. FIXME: Just use root-uid.h. */ #ifdef __TANDEM # define ROOT_UID 65535 #else # define ROOT_UID 0 #endif ]], [[/* Indeterminate for super-user, assume no. Why are you running configure as root, anyway? */ if (geteuid () == ROOT_UID) return 99; if (mknod ("conftest.fifo", S_IFIFO | 0600, 0)) return 2;]])], [gl_cv_func_mknod_works=yes], [if test $? = 99 && test x"$FORCE_UNSAFE_CONFIGURE" = x; then AC_MSG_FAILURE([you should not run configure as root ]dnl [(set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)]) fi gl_cv_func_mknod_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mknod_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mknod_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mknod_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.fifo]) case "$gl_cv_func_mknod_works" in *yes) ;; *) REPLACE_MKNOD=1 AC_DEFINE([MKNOD_FIFO_BUG], [1], [Define to 1 if mknod cannot create a fifo without super-user privileges]) ;; esac dnl Systems that mishandle trailing slash on mkfifo also goof on mknod. if test $REPLACE_MKFIFO = 1; then REPLACE_MKNOD=1 fi fi ]) �������gnulib-20210822~d383792/m4/mkostemp.m4��������������������������������������������������������������0000664�0000000�0000000�00000001155�14110572173�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkostemp.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MKOSTEMP], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare mkostemp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkostemp]) if test $ac_cv_func_mkostemp != yes; then HAVE_MKOSTEMP=0 fi ]) # Prerequisites of lib/mkostemp.c. AC_DEFUN([gl_PREREQ_MKOSTEMP], [ ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkostemps.m4�������������������������������������������������������������0000664�0000000�0000000�00000001053�14110572173�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkostemps.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MKOSTEMPS], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare mkostemps(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkostemps]) if test $ac_cv_func_mkostemps != yes; then HAVE_MKOSTEMPS=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkstemp.m4���������������������������������������������������������������0000664�0000000�0000000�00000006100�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 28 # Copyright (C) 2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a # silly limit that it can create no more than 26 files from a given template. # Other systems lack mkstemp altogether. # On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create # only 32 files per process. # On some hosts, mkstemp creates files with mode 0666, which is a security # problem and a violation of POSIX 2008. # On systems like the above, arrange to use the replacement function. AC_DEFUN([gl_FUNC_MKSTEMP], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([mkstemp]) if test $ac_cv_func_mkstemp = yes; then AC_CACHE_CHECK([for working mkstemp], [gl_cv_func_working_mkstemp], [ mkdir conftest.mkstemp AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT GL_MDA_DEFINES], [[int result = 0; int i; off_t large = (off_t) 4294967295u; if (large < 0) large = 2147483647; umask (0); for (i = 0; i < 70; i++) { char templ[] = "conftest.mkstemp/coXXXXXX"; int (*mkstemp_function) (char *) = mkstemp; int fd = mkstemp_function (templ); if (fd < 0) result |= 1; else { struct stat st; if (lseek (fd, large, SEEK_SET) != large) result |= 2; if (fstat (fd, &st) < 0) result |= 4; else if (st.st_mode & 0077) result |= 8; if (close (fd)) result |= 16; } } return result;]])], [gl_cv_func_working_mkstemp=yes], [gl_cv_func_working_mkstemp=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_mkstemp="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.mkstemp ]) case "$gl_cv_func_working_mkstemp" in *yes) ;; *) REPLACE_MKSTEMP=1 ;; esac else HAVE_MKSTEMP=0 fi ]) # Prerequisites of lib/mkstemp.c. AC_DEFUN([gl_PREREQ_MKSTEMP], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mkstemps.m4��������������������������������������������������������������0000664�0000000�0000000�00000001045�14110572173�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkstemps.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MKSTEMPS], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare mkstemps(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkstemps]) if test $ac_cv_func_mkstemps != yes; then HAVE_MKSTEMPS=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mktime.m4����������������������������������������������������������������0000664�0000000�0000000�00000020460�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 36 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_TIME_T_IS_SIGNED], [ AC_CACHE_CHECK([whether time_t is signed], [gl_cv_time_t_is_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], [gl_cv_time_t_is_signed=yes], [gl_cv_time_t_is_signed=no])]) if test $gl_cv_time_t_is_signed = yes; then AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) fi ]) dnl Test whether mktime works. Set gl_cv_func_working_mktime. AC_DEFUN([gl_FUNC_MKTIME_WORKS], [ AC_REQUIRE([gl_TIME_T_IS_SIGNED]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained dnl in Autoconf and because it invokes AC_LIBOBJ. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_MULTIARCH]) AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], [if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else AC_RUN_IFELSE( [AC_LANG_SOURCE( [[/* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif ]GL_MDA_DEFINES[ #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test ()) result |= 64; return result; }]])], [gl_cv_func_working_mktime=yes], [gl_cv_func_working_mktime=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac ]) fi ]) ]) dnl Main macro of module 'mktime'. AC_DEFUN([gl_FUNC_MKTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_MKTIME=0 if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WORKING], [1], [Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds.]) fi case "$host_os" in mingw*) REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WINDOWS], [1], [Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround.]) ;; esac ]) dnl Main macro of module 'mktime-internal'. AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) WANT_MKTIME_INTERNAL=0 dnl BeOS has __mktime_internal in libc, but other platforms don't. AC_CHECK_FUNC([__mktime_internal], [AC_DEFINE([mktime_internal], [__mktime_internal], [Define to the real name of the mktime_internal function.]) ], [dnl mktime works but it doesn't export __mktime_internal, dnl so we need to substitute our own mktime implementation. WANT_MKTIME_INTERNAL=1 AC_DEFINE([NEED_MKTIME_INTERNAL], [1], [Define if the compilation of mktime.c should define 'mktime_internal'.]) ]) ]) # Prerequisites of lib/mktime.c. AC_DEFUN([gl_PREREQ_MKTIME], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mmap-anon.m4�������������������������������������������������������������0000664�0000000�0000000�00000003747�14110572173�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mmap-anon.m4 serial 12 dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>.]) fi fi ]) �������������������������gnulib-20210822~d383792/m4/mode_t.m4����������������������������������������������������������������0000664�0000000�0000000�00000002342�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mode_t.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and # include <sys/types.h>. # Define PROMOTED_MODE_T to the type that is the result of "default argument # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], [ AC_REQUIRE([AC_TYPE_MODE_T]) AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', dnl and to itself otherwise. This assumption is not guaranteed by the ISO C dnl standard, but we don't know of any real-world counterexamples. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], [gl_cv_promoted_mode_t='int'], [gl_cv_promoted_mode_t='mode_t']) ]) AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], [Define to the type that is the result of default argument promotions of type mode_t.]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modechange.m4������������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modechange.m4 serial 7 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MODECHANGE], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modf-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001110�14110572173�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in modf.m4 and not inlined in the dnl module description), so that gl_FUNC_MODF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_MODF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_modf_required=ieee]) AC_REQUIRE([gl_FUNC_MODF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modf.m4������������������������������������������������������������������0000664�0000000�0000000�00000006020�14110572173�0016004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modf.m4 serial 9 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MODF], [ m4_divert_text([DEFAULTS], [gl_modf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine MODF_LIBM. gl_MATHFUNC([modf], [double], [(double, double *)]) m4_ifdef([gl_FUNC_MODF_IEEE], [ if test $gl_modf_required = ieee && test $REPLACE_MODF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether modf works according to ISO C 99 with IEC 60559], [gl_cv_func_modf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $MODF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x, double *iptr) { return 0; } double zero; double minus_one = - 1.0; int main (int argc, char *argv[]) { double (* volatile my_modf) (double, double *) = argc ? modf : dummy; int result = 0; double i; double f; /* Test modf(NaN,...). This test fails on NetBSD 5.1, Cygwin. */ f = my_modf (zero / zero, &i); if (numeric_equal (f, f)) result |= 1; /* Test modf(-Inf,...). This test fails on FreeBSD 6.4, OpenBSD 6.7, IRIX 6.5, OSF/1 5.1. */ f = my_modf (minus_one / zero, &i); if (!(f == 0.0) || (signbitd (minus_zerod) && !signbitd (f))) result |= 2; return result; } ]])], [gl_cv_func_modf_ieee=yes], [gl_cv_func_modf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_modf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_modf_ieee="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_modf_ieee="guessing yes"], [gl_cv_func_modf_ieee="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_modf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_modf_ieee" in *yes) ;; *) REPLACE_MODF=1 ;; esac fi ]) if test $REPLACE_MODF = 1; then dnl Find libraries needed to link lib/modf.c. AC_REQUIRE([gl_FUNC_TRUNC]) MODF_LIBM="$TRUNC_LIBM" fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modff-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modff-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in modff.m4 and not inlined in the dnl module description), so that gl_FUNC_MODFF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_MODFF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_modff_required=ieee]) AC_REQUIRE([gl_FUNC_MODFF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modff.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007022�14110572173�0016155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modff.m4 serial 11 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MODFF], [ m4_divert_text([DEFAULTS], [gl_modff_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MODF]) dnl Persuade glibc <math.h> to declare modff(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether modff() exists. We cannot assume that modff(), if it dnl exists, is defined in the same library as modf(). This is not the case dnl on FreeBSD, NetBSD, OpenBSD. gl_MATHFUNC([modff], [float], [(float, float *)]) if test $gl_cv_func_modff_no_libm = yes \ || test $gl_cv_func_modff_in_libm = yes; then : m4_ifdef([gl_FUNC_MODFF_IEEE], [ if test $gl_modff_required = ieee && test $REPLACE_MODFF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether modff works according to ISO C 99 with IEC 60559], [gl_cv_func_modff_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $MODFF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x, float *iptr) { return 0; } float zero; float minus_one = - 1.0f; int main (int argc, char *argv[]) { float (* volatile my_modff) (float, float *) = argc ? modff : dummy; int result = 0; float i; float f; /* Test modff(NaN,...). This test fails on NetBSD 5.1, OpenBSD 6.7, Solaris 9, Cygwin. */ f = my_modff (zero / zero, &i); if (numeric_equal (f, f)) result |= 1; /* Test modff(-Inf,...). This test fails on IRIX 6.5, OSF/1 5.1, mingw. */ f = my_modff (minus_one / zero, &i); if (!(f == 0.0f) || (signbitf (minus_zerof) && !signbitf (f))) result |= 2; return result; } ]])], [gl_cv_func_modff_ieee=yes], [gl_cv_func_modff_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_modff_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_modff_ieee="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_modff_ieee="guessing yes"], [gl_cv_func_modff_ieee="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_modff_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_modff_ieee" in *yes) ;; *) REPLACE_MODFF=1 ;; esac fi ]) else HAVE_MODFF=0 fi if test $HAVE_MODFF = 0 || test $REPLACE_MODFF = 1; then dnl Find libraries needed to link lib/modff.c. MODFF_LIBM="$MODF_LIBM" fi AC_SUBST([MODFF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modfl-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modfl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in modfl.m4 and not inlined in the dnl module description), so that gl_FUNC_MODFL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_MODFL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_modfl_required=ieee]) AC_REQUIRE([gl_FUNC_MODFL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/modfl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007135�14110572173�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modfl.m4 serial 8 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MODFL], [ m4_divert_text([DEFAULTS], [gl_modfl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare modfl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether modfl() exists. We cannot assume that modfl(), if it dnl exists, is defined in the same library as modf(). This is not the case dnl on FreeBSD, Solaris. gl_MATHFUNC([modfl], [long double], [(long double, long double *)]) if test $gl_cv_func_modfl_no_libm = yes \ || test $gl_cv_func_modfl_in_libm = yes; then : m4_ifdef([gl_FUNC_MODFL_IEEE], [ if test $gl_modfl_required = ieee && test $REPLACE_MODFL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether modfl works according to ISO C 99 with IEC 60559], [gl_cv_func_modfl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $MODFL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (long double x, long double y) { return x == y; } static long double dummy (long double x, long double *iptr) { return 0; } long double zero; long double minus_one = - 1.0L; int main (int argc, char *argv[]) { long double (* volatile my_modfl) (long double, long double *) = argc ? modfl : dummy; long double i; long double f; /* Test modfl(-Inf,...). This test fails on IRIX 6.5, OSF/1 5.1, mingw. */ f = my_modfl (minus_one / zero, &i); if (!(f == 0.0L) || (signbitl (minus_zerol) && !signbitl (f))) return 1; return 0; } ]])], [gl_cv_func_modfl_ieee=yes], [gl_cv_func_modfl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_modfl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_modfl_ieee="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_modfl_ieee="guessing yes"], [gl_cv_func_modfl_ieee="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_modfl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_modfl_ieee" in *yes) ;; *) REPLACE_MODFL=1 ;; esac fi ]) else HAVE_MODFL=0 fi if test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; then dnl Find libraries needed to link lib/modfl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_MODF]) MODFL_LIBM="$MODF_LIBM" else AC_REQUIRE([gl_FUNC_TRUNCL]) MODFL_LIBM="$TRUNCL_LIBM" fi fi AC_SUBST([MODFL_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/monetary_h.m4������������������������������������������������������������0000664�0000000�0000000�00000005215�14110572173�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# monetary_h.m4 serial 8 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_MONETARY_H], [ AC_REQUIRE([gl_MONETARY_H_DEFAULTS]) m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) AC_CHECK_HEADERS_ONCE([monetary.h]) dnl For now, we provide a <monetary.h> wrapper only if dnl - module 'posixcheck' is present, or dnl - C++ GNULIB_NAMESPACE support may be requested, or dnl - the system already has a <monetary.h>. if m4_ifdef([gl_POSIXCHECK], [true], [m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]) || test $ac_cv_header_monetary_h = yes]); then MONETARY_H='monetary.h' gl_CHECK_NEXT_HEADERS([monetary.h]) if test $ac_cv_header_monetary_h = yes; then HAVE_MONETARY_H=1 else HAVE_MONETARY_H=0 fi AC_SUBST([HAVE_MONETARY_H]) AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 else HAVE_XLOCALE_H=0 fi AC_SUBST([HAVE_XLOCALE_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <monetary.h> ]], [strfmon_l]) AC_REQUIRE([AC_C_RESTRICT]) else MONETARY_H='' fi AC_SUBST([MONETARY_H]) AM_CONDITIONAL([GL_GENERATE_MONETARY_H], [test -n "$MONETARY_H"]) ]) # gl_MONETARY_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_MONETARY_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_MONETARY_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_MONETARY_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MONETARY_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFMON_L]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_MONETARY_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_MONETARY_H_DEFAULTS]) ]) AC_DEFUN([gl_MONETARY_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_STRFMON_L=1; AC_SUBST([HAVE_STRFMON_L]) REPLACE_STRFMON_L=0; AC_SUBST([REPLACE_STRFMON_L]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mountlist.m4�������������������������������������������������������������0000664�0000000�0000000�00000026275�14110572173�0017133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 15 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_PREREQ([2.60]) AC_DEFUN([gl_MOUNTLIST], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([listmntent]) AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h]) # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses # NGROUPS (as the array dimension for a struct member) without a definition. AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>]) AC_CHECK_HEADERS([sys/mount.h], [], [], [AC_INCLUDES_DEFAULT [#if HAVE_SYS_PARAM_H #include <sys/param.h> #endif ]]) AC_CHECK_HEADERS([mntent.h sys/fs_types.h]) getfsstat_includes="\ $ac_includes_default #if HAVE_SYS_PARAM_H # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */ #endif #if HAVE_SYS_UCRED_H # include <grp.h> /* needed for definition of NGROUPS */ # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */ #endif #if HAVE_SYS_MOUNT_H # include <sys/mount.h> #endif #if HAVE_SYS_FS_TYPES_H # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */ #endif " AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes]) # Determine how to get the list of mounted file systems. ac_list_mounted_fs= # If the getmntent function is available but not in the standard library, # make sure LIBS contains the appropriate -l option. AC_FUNC_GETMNTENT if test -z "$ac_list_mounted_fs"; then # AIX. AC_CACHE_CHECK([for mntctl function and struct vmount], [fu_cv_sys_mounted_vmount], [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <fshelp.h>]])], [fu_cv_sys_mounted_vmount=yes], [fu_cv_sys_mounted_vmount=no])]) if test $fu_cv_sys_mounted_vmount = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_VMOUNT], [1], [Define if there is a function named mntctl that can be used to read the list of mounted file systems, and there is a system header file that declares 'struct vmount'. (AIX)]) fi fi if test $ac_cv_func_getmntent = yes; then # This system has the getmntent function. # Determine whether it's the one-argument variant or the two-argument one. if test -z "$ac_list_mounted_fs"; then # glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS. AC_CACHE_CHECK([for one-argument getmntent function], [fu_cv_sys_mounted_getmntent1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */ #include <stdio.h> #include <mntent.h> #if defined __ANDROID__ /* Android */ # undef MOUNTED # define MOUNTED "/proc/mounts" #elif !defined MOUNTED # if defined _PATH_MOUNTED /* GNU libc */ # define MOUNTED _PATH_MOUNTED # endif # if defined MNT_MNTTAB /* HP-UX. */ # define MOUNTED MNT_MNTTAB # endif #endif ]], [[struct mntent *mnt = 0; char *table = MOUNTED; if (sizeof mnt && sizeof table) return 0; ]])], [fu_cv_sys_mounted_getmntent1=yes], [fu_cv_sys_mounted_getmntent1=no]) ]) if test $fu_cv_sys_mounted_getmntent1 = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETMNTENT1], [1], [Define if there is a function named getmntent for reading the list of mounted file systems, and that function takes a single argument. (4.3BSD, SunOS, HP-UX, Irix)]) AC_CHECK_FUNCS([setmntent endmntent hasmntopt]) fi fi if test -z "$ac_list_mounted_fs"; then # Solaris >= 8. AC_CACHE_CHECK([for getextmntent function], [fu_cv_sys_mounted_getextmntent], [AC_EGREP_HEADER([getextmntent], [sys/mnttab.h], [fu_cv_sys_mounted_getextmntent=yes], [fu_cv_sys_mounted_getextmntent=no])]) if test $fu_cv_sys_mounted_getextmntent = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETEXTMNTENT], [1], [Define if there is a function named getextmntent for reading the list of mounted file systems. (Solaris)]) fi fi if test -z "$ac_list_mounted_fs"; then # Solaris < 8, also (obsolete) SVR4. # Solaris >= 8 has the two-argument getmntent but is already handled above. AC_CACHE_CHECK([for two-argument getmntent function], [fu_cv_sys_mounted_getmntent2], [AC_EGREP_HEADER([getmntent], [sys/mnttab.h], [fu_cv_sys_mounted_getmntent2=yes], [fu_cv_sys_mounted_getmntent2=no]) ]) if test $fu_cv_sys_mounted_getmntent2 = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETMNTENT2], [1], [Define if there is a function named getmntent for reading the list of mounted file systems, and that function takes two arguments. (SVR4)]) AC_CHECK_FUNCS([hasmntopt]) fi fi fi if test -z "$ac_list_mounted_fs"; then # OSF/1, also (obsolete) Apple Darwin 1.3. # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h AC_CACHE_CHECK([for getfsstat function], [fu_cv_sys_mounted_getfsstat], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #if HAVE_STRUCT_FSSTAT_F_FSTYPENAME # define FS_TYPE(Ent) ((Ent).f_fstypename) #else # define FS_TYPE(Ent) mnt_names[(Ent).f_type] #endif $getfsstat_includes ]], [[struct statfs *stats; int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); char *t = FS_TYPE (*stats); ]])], [fu_cv_sys_mounted_getfsstat=yes], [fu_cv_sys_mounted_getfsstat=no]) ]) if test $fu_cv_sys_mounted_getfsstat = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETFSSTAT], [1], [Define if there is a function named getfsstat for reading the list of mounted file systems. (DEC Alpha running OSF/1)]) fi fi if test -z "$ac_list_mounted_fs"; then # (obsolete) SVR3 AC_CACHE_CHECK([for FIXME existence of three headers], [fu_cv_sys_mounted_fread_fstyp], [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #include <sys/statfs.h> #include <sys/fstyp.h> #include <mnttab.h> ]])], [fu_cv_sys_mounted_fread_fstyp=yes], [fu_cv_sys_mounted_fread_fstyp=no]) ]) if test $fu_cv_sys_mounted_fread_fstyp = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_FREAD_FSTYP], [1], [Define if (like SVR2) there is no specific function for reading the list of mounted file systems, and your system has these header files: <sys/fstyp.h> and <sys/statfs.h>. (SVR3)]) fi fi if test -z "$ac_list_mounted_fs"; then # Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, also (obsolete) 4.4BSD. # OSF/1 also has getmntinfo but is already handled above. # We cannot use AC_CHECK_FUNCS([getmntinfo]) here, because at the linker # level the function is sometimes called getmntinfo64 or getmntinfo$INODE64 # on Mac OS X, __getmntinfo13 on NetBSD and Minix, _F64_getmntinfo on OSF/1. AC_CACHE_CHECK([for getmntinfo function], [fu_cv_sys_mounted_getmntinfo], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #include <sys/types.h> #if HAVE_SYS_MOUNT_H # include <sys/mount.h> #endif #if HAVE_SYS_STATVFS_H # include <sys/statvfs.h> #endif #include <stdlib.h> ]], [[int count = getmntinfo (NULL, MNT_WAIT); ]])], [fu_cv_sys_mounted_getmntinfo=yes], [fu_cv_sys_mounted_getmntinfo=no]) ]) if test $fu_cv_sys_mounted_getmntinfo = yes; then AC_CACHE_CHECK([whether getmntinfo returns statvfs structures], [fu_cv_sys_mounted_getmntinfo2], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #include <sys/types.h> #if HAVE_SYS_MOUNT_H # include <sys/mount.h> #endif #if HAVE_SYS_STATVFS_H # include <sys/statvfs.h> #endif extern #ifdef __cplusplus "C" #endif int getmntinfo (struct statfs **, int); ]], [[]])], [fu_cv_sys_mounted_getmntinfo2=no], [fu_cv_sys_mounted_getmntinfo2=yes]) ]) if test $fu_cv_sys_mounted_getmntinfo2 = no; then # Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD. ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETMNTINFO], [1], [Define if there is a function named getmntinfo for reading the list of mounted file systems and it returns an array of 'struct statfs'. (4.4BSD, Darwin)]) else # NetBSD, Minix. ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETMNTINFO2], [1], [Define if there is a function named getmntinfo for reading the list of mounted file systems and it returns an array of 'struct statvfs'. (NetBSD 3.0)]) fi fi fi if test -z "$ac_list_mounted_fs"; then # Haiku, also (obsolete) BeOS. AC_CHECK_FUNCS([next_dev fs_stat_dev]) AC_CHECK_HEADERS([fs_info.h]) AC_CACHE_CHECK([for BEOS mounted file system support functions], [fu_cv_sys_mounted_fs_stat_dev], [if test $ac_cv_header_fs_info_h = yes \ && test $ac_cv_func_next_dev = yes \ && test $ac_cv_func_fs_stat_dev = yes; then fu_cv_sys_mounted_fs_stat_dev=yes else fu_cv_sys_mounted_fs_stat_dev=no fi ]) if test $fu_cv_sys_mounted_fs_stat_dev = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_FS_STAT_DEV], [1], [Define if there are functions named next_dev and fs_stat_dev for reading the list of mounted file systems. (BeOS)]) fi fi if test -z "$ac_list_mounted_fs"; then # Interix / BSD alike statvfs # the code is really interix specific, so make sure, we're on it. case "$host" in *-interix*) AC_CHECK_FUNCS([statvfs]) if test $ac_cv_func_statvfs = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_INTERIX_STATVFS], [1], [Define if we are on interix, and ought to use statvfs plus some special knowledge on where mounted file systems can be found. (Interix)]) fi ;; esac fi if test -z "$ac_list_mounted_fs"; then AC_MSG_ERROR([could not determine how to read list of mounted file systems]) # FIXME -- no need to abort building the whole package # Can't build mountlist.c or anything that needs its functions fi if test $ac_list_mounted_fs = found; then gl_cv_list_mounted_fs=yes else gl_cv_list_mounted_fs=no fi ]) # Prerequisites of lib/mountlist.c not done by gl_MOUNTLIST. AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], [ dnl Note gl_MOUNTLIST checks for mntent.h, not sys/mntent.h. AC_CHECK_HEADERS([sys/mntent.h]) AC_HEADER_MAJOR()dnl for use of makedev () gl_FSTYPENAME ]) # Replace Autoconf's AC_FUNC_GETMNTENT to omit checks that are unnecessary # nowadays. AC_DEFUN([AC_FUNC_GETMNTENT], [ # getmntent is in the standard C library on most systems, but in -lgen on # Unixware. AC_SEARCH_LIBS([getmntent], [gen]) AC_CHECK_FUNCS([getmntent]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/mprotect.m4��������������������������������������������������������������0000664�0000000�0000000�00000012670�14110572173�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mprotect.m4 serial 2 dnl Copyright (C) 1993-2021 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License as published by the Free Software Foundation; dnl either version 2 of the License, or (at your option) any later version. dnl As a special exception to the GNU General Public License, this file dnl may be distributed as part of a program that contains a configuration dnl script generated by Autoconf, under the same distribution terms as dnl the rest of that program. dnl Test whether mprotect() works. dnl Sets gl_cv_func_mprotect_works and defines HAVE_WORKING_MPROTECT. AC_DEFUN([gl_FUNC_MPROTECT_WORKS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_MMAP_ANON]) AC_CHECK_FUNCS([mprotect]) if test $ac_cv_func_mprotect = yes; then AC_CACHE_CHECK([for working mprotect], [gl_cv_func_mprotect_works], [if test $cross_compiling = no; then mprotect_prog=' #include <sys/types.h> /* Declare malloc(). */ #include <stdlib.h> /* Declare getpagesize(). */ #if HAVE_UNISTD_H #include <unistd.h> #endif #ifdef __hpux extern #ifdef __cplusplus "C" #endif int getpagesize (void); #endif /* Declare mprotect(). */ #include <sys/mman.h> char foo; int main () { unsigned long pagesize = getpagesize (); #define page_align(address) (char*)((unsigned long)(address) & -pagesize) ' no_mprotect= AC_RUN_IFELSE( [AC_LANG_SOURCE([ [$mprotect_prog if ((pagesize - 1) & pagesize) return 1; return 0; } ]]) ], [], [no_mprotect=1], [:]) mprotect_prog="$mprotect_prog"' char* area = (char*) malloc (6 * pagesize); char* fault_address = area + pagesize*7/2; ' if test -z "$no_mprotect"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([ GL_NOCRASH [$mprotect_prog nocrash_init(); if (mprotect (page_align (fault_address), pagesize, PROT_NONE) < 0) return 0; foo = *fault_address; /* this should cause an exception or signal */ return 0; } ]]) ], [no_mprotect=1], [], [:]) fi if test -z "$no_mprotect"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([ GL_NOCRASH [$mprotect_prog nocrash_init(); if (mprotect (page_align (fault_address), pagesize, PROT_NONE) < 0) return 0; *fault_address = 'z'; /* this should cause an exception or signal */ return 0; } ]]) ], [no_mprotect=1], [], [:]) fi if test -z "$no_mprotect"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([ GL_NOCRASH [$mprotect_prog nocrash_init(); if (mprotect (page_align (fault_address), pagesize, PROT_READ) < 0) return 0; *fault_address = 'z'; /* this should cause an exception or signal */ return 0; } ]]) ], [no_mprotect=1], [], [:]) fi if test -z "$no_mprotect"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([ GL_NOCRASH [$mprotect_prog nocrash_init(); if (mprotect (page_align (fault_address), pagesize, PROT_READ) < 0) return 1; if (mprotect (page_align (fault_address), pagesize, PROT_READ | PROT_WRITE) < 0) return 1; *fault_address = 'z'; /* this should not cause an exception or signal */ return 0; } ]]) ], [], [no_mprotect=1], [:]) fi if test -z "$no_mprotect"; then gl_cv_func_mprotect_works=yes else gl_cv_func_mprotect_works=no fi else dnl When cross-compiling, assume the known behaviour. case "$host_os" in dnl Guess yes on Linux systems, glibc systems, dnl macOS, BSD systems, AIX, HP-UX, IRIX, Solaris, Cygwin. linux-* | linux | *-gnu* | gnu* | \ darwin* | freebsd* | dragonfly* | midnightbsd* | netbsd* | openbsd* | \ aix* | hpux* | irix* | solaris* | cygwin*) gl_cv_func_mprotect_works="guessing yes" ;; mingw*) gl_cv_func_mprotect_works="guessing no" ;; *) dnl If we don't know, obey --enable-cross-guesses. gl_cv_func_mprotect_works="$gl_cross_guess_normal" ;; esac fi ]) case "$gl_cv_func_mprotect_works" in *yes) AC_DEFINE([HAVE_WORKING_MPROTECT], [1], [have a working mprotect() function]) ;; esac fi ]) ������������������������������������������������������������������������gnulib-20210822~d383792/m4/mpsort.m4����������������������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0016407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sort a vector of pointers to data. # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MPSORT], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/msvc-inval.m4������������������������������������������������������������0000664�0000000�0000000�00000001334�14110572173�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/msvc-nothrow.m4����������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/multiarch.m4�������������������������������������������������������������0000664�0000000�0000000�00000004220�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# multiarch.m4 serial 9 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. AC_CACHE_CHECK([whether the compiler produces multi-arch binaries], [gl_cv_c_multiarch], [gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/musl.m4������������������������������������������������������������������0000664�0000000�0000000�00000001204�14110572173�0016036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# musl.m4 serial 3 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for musl libc, despite the musl libc authors don't like it # <https://wiki.musl-libc.org/faq.html> # <https://lists.gnu.org/archive/html/bug-gnulib/2018-02/msg00079.html>. # From Bruno Haible. AC_DEFUN_ONCE([gl_MUSL_LIBC], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in *-musl*) AC_DEFINE([MUSL_LIBC], [1], [Define to 1 on musl libc.]) ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nanosleep.m4�������������������������������������������������������������0000664�0000000�0000000�00000012025�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 40 dnl From Jim Meyering. dnl Check for the nanosleep function. dnl If not found, use the supplied replacement. dnl # Copyright (C) 1999-2001, 2003-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NANOSLEEP], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and Solaris <time.h> to declare nanosleep. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_REQUIRE([gl_FUNC_SELECT]) AC_CHECK_DECLS_ONCE([alarm]) nanosleep_save_libs=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. LIB_NANOSLEEP= AC_SUBST([LIB_NANOSLEEP]) AC_SEARCH_LIBS([nanosleep], [rt posix4], [test "$ac_cv_search_nanosleep" = "none required" || LIB_NANOSLEEP=$ac_cv_search_nanosleep]) if test "x$ac_cv_search_nanosleep" != xno; then dnl The system has a nanosleep function. AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'no (mishandles large arguments)' in 64-bit # mode but 'yes' in 32-bit mode. But we need a configuration result that # is valid in both modes. gl_cv_func_nanosleep='no (mishandles large arguments)' fi AC_CACHE_CHECK([for working nanosleep], [gl_cv_func_nanosleep], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <limits.h> #include <signal.h> #if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #include <unistd.h> #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) #if HAVE_DECL_ALARM static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; /* Test for major problems first. */ if (! nanosleep) return 2; ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; #if HAVE_DECL_ALARM { static struct sigaction act; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; /* Test for a minor problem: the handling of large arguments. */ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 4; if (errno != EINTR) return 5; if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10) return 6; } #else /* A simpler test for native Windows. */ if (nanosleep (&ts_sleep, &ts_remaining) < 0) return 3; #endif return 0; }]])], [gl_cv_func_nanosleep=yes], [case $? in dnl ( 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl ( *) gl_cv_func_nanosleep=no;; esac], [case "$host_os" in dnl (( linux*) # Guess it halfway works when the kernel is Linux. gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;; mingw*) # Guess no on native Windows. gl_cv_func_nanosleep='guessing no' ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_nanosleep="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_nanosleep" in *yes) REPLACE_NANOSLEEP=0 ;; *) REPLACE_NANOSLEEP=1 case "$gl_cv_func_nanosleep" in *"mishandles large arguments"*) AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1], [Define to 1 if nanosleep mishandles large arguments.]) ;; *) # The replacement uses select(). Add $LIBSOCKET to $LIB_NANOSLEEP. for ac_lib in $LIBSOCKET; do case " $LIB_NANOSLEEP " in *" $ac_lib "*) ;; *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";; esac done ;; esac ;; esac else HAVE_NANOSLEEP=0 fi LIBS=$nanosleep_save_libs ]) # Prerequisites of lib/nanosleep.c. AC_DEFUN([gl_PREREQ_NANOSLEEP], [ AC_CHECK_HEADERS_ONCE([sys/select.h]) gl_PREREQ_SIG_HANDLER_H ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/net_if_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000002114�14110572173�0016632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# net_if_h.m4 serial 1 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_NET_IF], [ AC_CACHE_CHECK([whether <net/if.h> is self-contained], [gl_cv_header_net_if_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <net/if.h>]], [[struct if_nameindex ni;]])], [gl_cv_header_net_if_h_selfcontained=yes], [gl_cv_header_net_if_h_selfcontained=no]) ]) if test $gl_cv_header_net_if_h_selfcontained = yes; then NET_IF_H='' else NET_IF_H='net/if.h' AC_CHECK_HEADERS([net/if.h], [], [], [[#include <sys/socket.h>]]) gl_NEXT_HEADERS([net/if.h]) if test $ac_cv_header_net_if_h = yes; then HAVE_NET_IF_H=1 else HAVE_NET_IF_H=0 fi AC_SUBST([HAVE_NET_IF_H]) fi AC_SUBST([NET_IF_H]) AM_CONDITIONAL([GL_GENERATE_NET_IF_H], [test -n "$NET_IF_H"]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/netdb_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000004356�14110572173�0016474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# netdb_h.m4 serial 15 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_NETDB_H], [ AC_REQUIRE([gl_NETDB_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([netdb.h]) if test $ac_cv_header_netdb_h = yes; then HAVE_NETDB_H=1 else HAVE_NETDB_H=0 fi AC_SUBST([HAVE_NETDB_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <netdb.h>]], [getaddrinfo freeaddrinfo gai_strerror getnameinfo]) ]) # gl_NETDB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_NETDB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_NETDB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_NETDB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_NETDB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETADDRINFO]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_NETDB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_NETDB_H_DEFAULTS]) ]) AC_DEFUN([gl_NETDB_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_STRUCT_ADDRINFO=1; AC_SUBST([HAVE_STRUCT_ADDRINFO]) HAVE_DECL_FREEADDRINFO=1; AC_SUBST([HAVE_DECL_FREEADDRINFO]) HAVE_DECL_GAI_STRERROR=1; AC_SUBST([HAVE_DECL_GAI_STRERROR]) HAVE_DECL_GETADDRINFO=1; AC_SUBST([HAVE_DECL_GETADDRINFO]) HAVE_DECL_GETNAMEINFO=1; AC_SUBST([HAVE_DECL_GETNAMEINFO]) REPLACE_GAI_STRERROR=0; AC_SUBST([REPLACE_GAI_STRERROR]) REPLACE_GETADDRINFO=0; AC_SUBST([REPLACE_GETADDRINFO]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/netinet_in_h.m4����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# netinet_in_h.m4 serial 5 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_NETINET_IN], [ AC_CACHE_CHECK([whether <netinet/in.h> is self-contained], [gl_cv_header_netinet_in_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[]])], [gl_cv_header_netinet_in_h_selfcontained=yes], [gl_cv_header_netinet_in_h_selfcontained=no]) ]) if test $gl_cv_header_netinet_in_h_selfcontained = yes; then NETINET_IN_H='' else NETINET_IN_H='netinet/in.h' AC_CHECK_HEADERS([netinet/in.h]) gl_CHECK_NEXT_HEADERS([netinet/in.h]) if test $ac_cv_header_netinet_in_h = yes; then HAVE_NETINET_IN_H=1 else HAVE_NETINET_IN_H=0 fi AC_SUBST([HAVE_NETINET_IN_H]) fi AC_SUBST([NETINET_IN_H]) AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nl_langinfo.m4�����������������������������������������������������������0000664�0000000�0000000�00000005276�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nl_langinfo.m4 serial 8 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NL_LANGINFO], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H]) AC_CHECK_FUNCS_ONCE([nl_langinfo]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. AC_CACHE_CHECK([whether YESEXPR works], [gl_cv_func_nl_langinfo_yesexpr_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> ]], [[return !*nl_langinfo(YESEXPR); ]])], [gl_cv_func_nl_langinfo_yesexpr_works=yes], [gl_cv_func_nl_langinfo_yesexpr_works=no], [ case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac ]) ]) case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], [$FUNC_NL_LANGINFO_YESEXPR_WORKS], [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac AC_DEFINE_UNQUOTED([NL_LANGINFO_MTSAFE], [$NL_LANGINFO_MTSAFE], [Define to 1 if nl_langinfo is multithread-safe.]) if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 AC_DEFINE([REPLACE_NL_LANGINFO], [1], [Define if nl_langinfo exists but is overridden by gnulib.]) fi else HAVE_NL_LANGINFO=0 fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$LIB_SETLOCALE_NULL" else LIB_NL_LANGINFO= fi dnl LIB_NL_LANGINFO is expected to be empty everywhere. AC_SUBST([LIB_NL_LANGINFO]) ]) # Prerequisites of lib/nl_langinfo-lock.c. AC_DEFUN([gl_PREREQ_NL_LANGINFO_LOCK], [ gl_VISIBILITY ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nls.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002322�14110572173�0015654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 6 (gettext-0.20.2) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2021 Free dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/no-c++.m4����������������������������������������������������������������0000664�0000000�0000000�00000001306�14110572173�0016043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# no-c++.m4 serial 2 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Support for C source files that cannot be compiled by a C++ compiler. # Set NO_CXX to the C++ compiler flags needed to request C mode instead of # C++ mode. # So far only g++ is supported. This includes clang++, as it is g++ compatible. AC_DEFUN([gt_NO_CXX], [ NO_CXX= AC_EGREP_CPP([Is_g_plus_plus], [ #if defined __GNUC__ && defined __cplusplus Is_g_plus_plus #endif ], [NO_CXX="-x c"]) AC_SUBST([NO_CXX]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nocrash.m4���������������������������������������������������������������0000664�0000000�0000000�00000010555�14110572173�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 5 dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/non-recursive-gnulib-prefix-hack.m4��������������������������������������0000664�0000000�0000000�00000002600�14110572173�0023333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_NON_RECURSIVE_GNULIB_PREFIX_HACK LIB_DIR dnl Adjust configure-set $gl_LIBOBJS and each AC_SUBST'd *_H variable dnl with a value ending in ".h" to reflect that these files are located dnl in the directory specified by LIB_DIR. AC_DEFUN([gl_NON_RECURSIVE_GNULIB_PREFIX_HACK], [ # Tell AC_LIBSOURCES where to find source files like alloca.c. AC_CONFIG_LIBOBJ_DIR([$1]) # This hack originated in bison. It is required when using non-recursive # automake rules to build from gnulib-provided lib/ sources. Hence, LIB_DIR # is usually simply "lib". Those rules use the list of names like "fchdir.o" # and "strstr.o" in gl_LIBOBJS. With non-recursive make, we must prefix each # such file name with the "lib/" prefix. See also build-aux/prefix-gnulib-mk. gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , $1/,g'` # Listing the names of the variables to prefix is error-prone. # Rather, adjust each AC_SUBST'd variable whose name ends in '_H' # and whose value ends in '.h'. for ac_var in $ac_subst_vars do eval "ac_val=\$$ac_var" case $ac_var:$ac_val in *_H:*.h) eval "$ac_var=$1/\$$ac_var";; esac done ]) ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nonblocking.m4�����������������������������������������������������������0000664�0000000�0000000�00000001710�14110572173�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nonblocking.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether non-blocking I/O is natively supported by read(), write(). dnl Sets gl_cv_have_nonblocking. dnl Also tests whether open() supports O_NONBLOCK. dnl Sets gl_cv_have_open_O_NONBLOCK. AC_DEFUN([gl_NONBLOCKING_IO], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_NONBLOCKING_IO_BODY]) ]) AC_DEFUN([gl_NONBLOCKING_IO_BODY], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) gl_cv_have_nonblocking=no ;; *) gl_cv_have_nonblocking=yes ;; esac case "$host_os" in mingw*) gl_cv_have_open_O_NONBLOCK=no ;; *) gl_cv_have_open_O_NONBLOCK=yes ;; esac ]) ��������������������������������������������������������gnulib-20210822~d383792/m4/nproc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003470�14110572173�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nproc.m4 serial 5 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_NPROC], [ gl_PREREQ_NPROC ]) # Prerequisites of lib/nproc.c. AC_DEFUN([gl_PREREQ_NPROC], [ dnl Persuade glibc <sched.h> to declare CPU_SETSIZE, CPU_ISSET etc. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS([sys/pstat.h sys/sysmp.h sys/param.h],,, [AC_INCLUDES_DEFAULT]) dnl <sys/sysctl.h> requires <sys/param.h> on OpenBSD 4.0. AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif ]) AC_CHECK_FUNCS([sched_getaffinity sched_getaffinity_np \ pstat_getdynamic sysmp sysctl]) dnl Test whether sched_getaffinity has the expected declaration. dnl glibc 2.3.[0-2]: dnl int sched_getaffinity (pid_t, unsigned int, unsigned long int *); dnl glibc 2.3.3: dnl int sched_getaffinity (pid_t, cpu_set_t *); dnl glibc >= 2.3.4: dnl int sched_getaffinity (pid_t, size_t, cpu_set_t *); if test $ac_cv_func_sched_getaffinity = yes; then AC_CACHE_CHECK([for glibc compatible sched_getaffinity], [gl_cv_func_sched_getaffinity3], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <sched.h>]], [[sched_getaffinity (0, 0, (cpu_set_t *) 0);]])], [gl_cv_func_sched_getaffinity3=yes], [gl_cv_func_sched_getaffinity3=no]) ]) if test $gl_cv_func_sched_getaffinity3 = yes; then AC_DEFINE([HAVE_SCHED_GETAFFINITY_LIKE_GLIBC], [1], [Define to 1 if sched_getaffinity has a glibc compatible declaration.]) fi fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/nstrftime.m4�������������������������������������������������������������0000664�0000000�0000000�00000001162�14110572173�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 37 # Copyright (C) 1996-1997, 1999-2007, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering and Paul Eggert. AC_DEFUN([gl_FUNC_GNU_STRFTIME], [ AC_REQUIRE([AC_C_RESTRICT]) # This defines (or not) HAVE_TZNAME and HAVE_STRUCT_TM_TM_ZONE. AC_REQUIRE([AC_STRUCT_TIMEZONE]) AC_REQUIRE([gl_TM_GMTOFF]) AC_DEFINE([my_strftime], [nstrftime], [Define to the name of the strftime replacement function.]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/obstack-printf-posix.m4��������������������������������������������������0000664�0000000�0000000�00000010606�14110572173�0021152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# obstack-printf-posix.m4 serial 4 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OBSTACK_PRINTF_POSIX], [ dnl Persuade glibc <stdio.h> to declare obstack_printf(), obstack_vprintf(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_obstack_printf_posix=no AC_CHECK_FUNCS_ONCE([obstack_printf]) if test $ac_cv_func_obstack_printf = yes ; then case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # obstack_printf exists and is # already POSIX compliant. gl_cv_func_obstack_printf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac fi if test $gl_cv_func_obstack_printf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_OBSTACK_PRINTF fi gl_DECL_OBSTACK_PRINTF ]) ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/obstack-printf.m4��������������������������������������������������������0000664�0000000�0000000�00000002313�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# obstack-printf.m4 serial 4 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Eric Blake. dnl Test whether obstack_printf() exists. For now, we assume that dnl obstack_vprintf behaves identically, so we only test for one. AC_DEFUN([gl_FUNC_OBSTACK_PRINTF], [ dnl Persuade glibc <stdio.h> to declare obstack_printf(), obstack_vprintf(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([obstack_printf]) if test $ac_cv_func_obstack_printf = no ; then gl_REPLACE_OBSTACK_PRINTF fi gl_DECL_OBSTACK_PRINTF ]) AC_DEFUN([gl_REPLACE_OBSTACK_PRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) if test $ac_cv_func_obstack_printf = yes; then REPLACE_OBSTACK_PRINTF=1 fi ]) dnl Ensure obstack_printf() and obstack_vprintf() are declared dnl (whether or not they are being replaced). AC_DEFUN([gl_DECL_OBSTACK_PRINTF], [ AC_CHECK_DECLS_ONCE([obstack_printf]) if test $ac_cv_have_decl_obstack_printf = no; then HAVE_DECL_OBSTACK_PRINTF=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/obstack.m4���������������������������������������������������������������0000664�0000000�0000000�00000002436�14110572173�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# See if we need to provide obstacks. dnl Copyright 1996-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This replaces Autoconf's AC_FUNC_OBSTACK. dnl The Autoconf version should be marked obsolete at some point. AC_DEFUN([AC_FUNC_OBSTACK], [AC_LIBSOURCES([obstack.h, obstack.c])dnl AC_CACHE_CHECK([for obstacks that work with any size object], [ac_cv_func_obstack], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include "obstack.h" void *obstack_chunk_alloc (size_t n) { return 0; } void obstack_chunk_free (void *p) { } /* Check that an internal function returns size_t, not int. */ size_t _obstack_memory_used (struct obstack *); ]], [[struct obstack mem; obstack_init (&mem); obstack_free (&mem, 0); ]])], [ac_cv_func_obstack=yes], [ac_cv_func_obstack=no])]) if test "$ac_cv_func_obstack" = yes; then AC_DEFINE([HAVE_OBSTACK], 1, [Define to 1 if the system has obstacks that work with any size object.]) else AC_LIBOBJ([obstack]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/off_t.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0016153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# off_t.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/omp_h.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0016165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# omp_h.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_OMP_H], [ gl_NEXT_HEADERS([omp.h]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/open-cloexec.m4����������������������������������������������������������0000664�0000000�0000000�00000001323�14110572173�0017441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether O_CLOEXEC is defined. dnl Copyright 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PREPROC_O_CLOEXEC], [ AC_CACHE_CHECK([for O_CLOEXEC], [gl_cv_macro_O_CLOEXEC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif ]], [[return O_CLOEXEC;]])], [gl_cv_macro_O_CLOEXEC=yes], [gl_cv_macro_O_CLOEXEC=no])]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/open-slash.m4������������������������������������������������������������0000664�0000000�0000000�00000003455�14110572173�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open-slash.m4 serial 2 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether open() and creat() recognize a trailing slash. dnl Sets gl_cv_func_open_slash. AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether open recognizes a trailing slash], [gl_cv_func_open_slash], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; }]])], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], [ changequote(,)dnl case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl conftest.tmp conftest.lnk ]) case "$gl_cv_func_open_slash" in *no) AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if open() fails to recognize a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/open.m4������������������������������������������������������������������0000664�0000000�0000000�00000002765�14110572173�0016034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open.m4 serial 15 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac dnl Replace open() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_OPEN = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi ]) dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. m4_ifdef([gl_NONBLOCKING_IO], [ if test $REPLACE_OPEN = 0; then gl_NONBLOCKING_IO if test $gl_cv_have_open_O_NONBLOCK != yes; then REPLACE_OPEN=1 fi fi ]) ]) # Prerequisites of lib/open.c. AC_DEFUN([gl_PREREQ_OPEN], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �����������gnulib-20210822~d383792/m4/openat.m4����������������������������������������������������������������0000664�0000000�0000000�00000002023�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 46 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_OPENAT], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([openat]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in yes+*yes+yes) ;; yes+*) # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 ;; *) HAVE_OPENAT=0 ;; esac ]) # Prerequisites of lib/openat.c. AC_DEFUN([gl_PREREQ_OPENAT], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/opendir.m4���������������������������������������������������������������0000664�0000000�0000000�00000001701�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# opendir.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPENDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([opendir]) if test $ac_cv_func_opendir = no; then HAVE_OPENDIR=0 fi dnl Replace opendir() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_OPENDIR = 1; then REPLACE_OPENDIR=1 fi fi ]) dnl Replace opendir() on OS/2 kLIBC to support dirfd() function replaced dnl by gnulib. case $host_os,$HAVE_OPENDIR in os2*,1) REPLACE_OPENDIR=1;; esac ]) ���������������������������������������������������������������gnulib-20210822~d383792/m4/pagealign_alloc.m4�������������������������������������������������������0000664�0000000�0000000�00000001174�14110572173�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PAGEALIGN_ALLOC], [ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_PREREQ_PAGEALIGN_ALLOC ]) # Prerequisites of lib/pagealign_alloc.c. AC_DEFUN([gl_PREREQ_PAGEALIGN_ALLOC], [ AC_REQUIRE([gl_FUNC_MMAP_ANON]) AC_CHECK_FUNCS_ONCE([posix_memalign]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/parse-datetime.m4��������������������������������������������������������0000664�0000000�0000000�00000004276�14110572173�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# parse-datetime.m4 serial 26 dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Define HAVE_COMPOUND_LITERALS if the C compiler supports compound literals dnl as in ISO C99. dnl Note that compound literals such as (struct s) { 3, 4 } can be used for dnl initialization of stack-allocated variables, but are not constant dnl expressions and therefore cannot be used as initializer for global or dnl static variables (even though gcc supports this in pre-C99 mode). AC_DEFUN([gl_C_COMPOUND_LITERALS], [ AC_CACHE_CHECK([for compound literals], [gl_cv_compound_literals], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[struct s { int i, j; };]], [[struct s t = (struct s) { 3, 4 }; if (t.i != 0) return 0;]]) ], [gl_cv_compound_literals=yes], [gl_cv_compound_literals=no]) ]) if test $gl_cv_compound_literals = yes; then AC_DEFINE([HAVE_COMPOUND_LITERALS], [1], [Define if you have compound literals.]) fi ]) AC_DEFUN([gl_PARSE_DATETIME], [ dnl parse-datetime.c is generated from parse-datetime.y. It requires bison, dnl because parse-datetime.y uses bison specific features. It requires at dnl least bison-2.4 for %define api.pure. dnl bison is only needed for the maintainer (who touches parse-datetime.y). dnl But in order to avoid separate Makefiles or --enable-maintainer-mode, dnl we put the rule in general Makefile. Now, some people carelessly touch dnl the files or have a broken "make" program, hence the parse-datetime.c dnl rule will sometimes fire. To avoid an error, defines PARSE_DATETIME_BISON dnl to ":" if it is not present or too old. gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) dnl Prerequisites of lib/parse-datetime.h. AC_REQUIRE([AM_STDBOOL_H]) AC_REQUIRE([gl_TIMESPEC]) AC_REQUIRE([AC_C_RESTRICT]) dnl Prerequisites of lib/parse-datetime.y. AC_REQUIRE([gl_BISON]) AC_REQUIRE([gl_C_COMPOUND_LITERALS]) AC_STRUCT_TIMEZONE AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TM_GMTOFF]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/passfd.m4����������������������������������������������������������������0000664�0000000�0000000�00000001573�14110572173�0016347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# passfd.m4 serial 9 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PASSFD], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_CHECK_FUNCS_ONCE([recvmsg sendmsg]) dnl Persuade AIX 5.2 <sys/socket.h> to declare CMSG_SPACE, CMSG_LEN. dnl CMSG_FIRSTHDR is POSIX 2008, but CMSG_SPACE is only in RFC 3542. AC_DEFINE([_LINUX_SOURCE_COMPAT], [1], [Define in order to get some macros on AIX systems.]) dnl Passfd prefers the POSIX use of msg.msg_control if the CMSG_* macros dnl are present, but can fall back to BSD 4.3 style of msg.msg_accrights. AC_CHECK_MEMBERS([struct msghdr.msg_accrights], [], [], [[ #include <sys/types.h> #include <sys/socket.h> ]]) ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pathmax.m4���������������������������������������������������������������0000664�0000000�0000000�00000002155�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pathmax.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PATHMAX], [ dnl Prerequisites of lib/pathmax.h. AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Expands to a piece of C program that defines PATH_MAX in the same way as # "pathmax.h" will do. AC_DEFUN([gl_PATHMAX_SNIPPET], [[ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif ]]) # Prerequisites of gl_PATHMAX_SNIPPET. AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], [ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pclose.m4����������������������������������������������������������������0000664�0000000�0000000�00000000776�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pclose.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PCLOSE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pclose]) if test $ac_cv_func_pclose = no; then HAVE_PCLOSE=0 fi ]) # Prerequisites of lib/pclose.c. AC_DEFUN([gl_PREREQ_PCLOSE], [ : ]) ��gnulib-20210822~d383792/m4/perl.m4������������������������������������������������������������������0000664�0000000�0000000�00000002607�14110572173�0016030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 dnl From Jim Meyering. dnl Find a new-enough version of Perl. # Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2021 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PERL], [ dnl FIXME: don't hard-code 5.005 AC_MSG_CHECKING([for perl5.005 or newer]) if test "${PERL+set}" = set; then # 'PERL' is set in the user's environment. candidate_perl_names="$PERL" perl_specified=yes else candidate_perl_names='perl perl5' perl_specified=no fi found=no AC_SUBST([PERL]) PERL="$am_missing_run perl" for perl in $candidate_perl_names; do # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. if ( $perl -e 'require 5.005; use File::Compare; use warnings;' ) > /dev/null 2>&1; then PERL=$perl found=yes break fi done AC_MSG_RESULT([$found]) test $found = no && AC_MSG_WARN([ WARNING: You don't seem to have perl5.005 or newer installed, or you lack a usable version of the Perl File::Compare module. As a result, you may be unable to run a few tests or to regenerate certain files if you modify the sources from which they are derived. ] ) ]) �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/perror.m4����������������������������������������������������������������0000664�0000000�0000000�00000005215�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# perror.m4 serial 9 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PERROR], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_R]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We intentionally do not check for the broader REPLACE_STRERROR_R, dnl since on glibc systems, strerror_r is replaced only for signature dnl issues, and perror is just fine. Rather, we only want to dnl replace perror if strerror_r was replaced for a content fix. if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then dnl The system's perror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_PERROR=1 fi case ${gl_cv_func_strerror_r_works-unset} in unset|*yes) AC_CACHE_CHECK([whether perror matches strerror], [gl_cv_func_perror_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> ]], [[char *str = strerror (-1); if (!getenv("CONFTEST_OUTPUT")) return 0; if (!str) str = ""; puts (str); errno = -1; perror (""); return 0; ]])], [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \ && cmp conftest.txt1 conftest.txt2 >/dev/null; then gl_cv_func_perror_works=yes else gl_cv_func_perror_works=no fi rm -rf conftest.txt1 conftest.txt2], [gl_cv_func_perror_works=no], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_perror_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_perror_works="guessing yes" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_perror_works" in *yes) ;; *) REPLACE_PERROR=1 ;; esac ;; *) dnl The system's perror() probably inherits the bugs in the dnl system's strerror_r(). Replace it. REPLACE_PERROR=1 ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/physmem.m4���������������������������������������������������������������0000664�0000000�0000000�00000003342�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# physmem.m4 serial 12 dnl Copyright (C) 2002-2003, 2005-2006, 2008-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Check for the external symbol, _system_configuration, # a struct with member 'physmem'. AC_DEFUN([gl_SYS__SYSTEM_CONFIGURATION], [AC_CACHE_CHECK([for external symbol _system_configuration], [gl_cv_var__system_configuration], [AC_LINK_IFELSE([AC_LANG_PROGRAM( [[#include <sys/systemcfg.h> ]], [[double x = _system_configuration.physmem; if (x > 0.0) return 0;]])], [gl_cv_var__system_configuration=yes], [gl_cv_var__system_configuration=no])]) if test $gl_cv_var__system_configuration = yes; then AC_DEFINE([HAVE__SYSTEM_CONFIGURATION], [1], [Define to 1 if you have the external variable, _system_configuration with a member named physmem.]) fi ] ) AC_DEFUN([gl_PHYSMEM], [ # Prerequisites of lib/physmem.c. AC_CHECK_HEADERS([sys/pstat.h sys/sysmp.h sys/sysinfo.h \ machine/hal_sysinfo.h sys/table.h sys/param.h sys/systemcfg.h],,, [AC_INCLUDES_DEFAULT]) dnl <sys/sysctl.h> requires <sys/param.h> on OpenBSD 4.0. AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif ]) AC_CHECK_FUNCS([pstat_getstatic pstat_getdynamic sysmp getsysinfo sysctl table sysinfo]) AC_CHECK_MEMBERS([struct sysinfo.mem_unit],,, [[#include <sys/sysinfo.h>]]) AC_REQUIRE([gl_SYS__SYSTEM_CONFIGURATION]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pid_t.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002610�14110572173�0016157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pid_t.m4 serial 4 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # The following implementation works around a problem in autoconf <= 2.69. m4_version_prereq([2.70], [], [ dnl Define pid_t if the headers don't define it. AC_DEFUN([AC_TYPE_PID_T], [ AC_CHECK_TYPE([pid_t], [], [dnl On 64-bit native Windows, define it to the equivalent of 'intptr_t' dnl (= 'long long' = '__int64'), because that is the return type dnl of the _spawnv* functions dnl <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/spawnvp-wspawnvp> dnl and the argument type of the _cwait function dnl <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/cwait>. dnl Otherwise (on 32-bit Windows and on old Unix platforms), define it dnl to 'int'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif ]]) ], [gl_pid_type='int'], [gl_pid_type='__int64']) AC_DEFINE_UNQUOTED([pid_t], [$gl_pid_type], [Define as a signed integer type capable of holding a process identifier.]) ], [AC_INCLUDES_DEFAULT]) ]) ])# m4_version_prereq 2.70 ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pipe.m4������������������������������������������������������������������0000664�0000000�0000000�00000000660�14110572173�0016020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe.m4 serial 2 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PIPE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pipe]) if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi ]) ��������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pipe2.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001023�14110572173�0016074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe2.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PIPE2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare pipe2(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([pipe2]) if test $ac_cv_func_pipe2 != yes; then HAVE_PIPE2=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/po.m4��������������������������������������������������������������������0000664�0000000�0000000�00000044617�14110572173�0015513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 31 (gettext-0.20.2) dnl Copyright (C) 1995-2014, 2016, 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Test whether it is GNU msgmerge >= 0.20. if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' else dnl Test whether it is GNU msgmerge >= 0.12. if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' else dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is dnl slow. But this is not a big problem, as such old gettext versions are dnl hardly in use any more. MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' fi fi AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. tab=`printf '\t'` sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po ${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ ${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po ${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ ${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/poll.m4������������������������������������������������������������������0000664�0000000�0000000�00000006423�14110572173�0016034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# poll.m4 serial 20 dnl Copyright (c) 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POLL], [ AC_REQUIRE([gl_POLL_H]) AC_REQUIRE([gl_SOCKETS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_header_poll_h = no; then ac_cv_func_poll=no gl_cv_func_poll=no else AC_CHECK_FUNC([poll], [# Check whether poll() works on special files (like /dev/null) and # and ttys (like /dev/tty). On Mac OS X 10.4.0 and AIX 5.3, it doesn't. AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <fcntl.h> #include <poll.h> ]GL_MDA_DEFINES[ int main() { int result = 0; struct pollfd ufd; /* Try /dev/null for reading. */ ufd.fd = open ("/dev/null", O_RDONLY); /* If /dev/null does not exist, it's not Mac OS X nor AIX. */ if (ufd.fd >= 0) { ufd.events = POLLIN; ufd.revents = 0; if (!(poll (&ufd, 1, 0) == 1 && ufd.revents == POLLIN)) result |= 1; } /* Try /dev/null for writing. */ ufd.fd = open ("/dev/null", O_WRONLY); /* If /dev/null does not exist, it's not Mac OS X nor AIX. */ if (ufd.fd >= 0) { ufd.events = POLLOUT; ufd.revents = 0; if (!(poll (&ufd, 1, 0) == 1 && ufd.revents == POLLOUT)) result |= 2; } /* Trying /dev/tty may be too environment dependent. */ return result; }]])], [gl_cv_func_poll=yes], [gl_cv_func_poll=no], [# When cross-compiling, assume that poll() works everywhere except on # Mac OS X or AIX, regardless of its version. AC_EGREP_CPP([MacOSX], [ #if (defined(__APPLE__) && defined(__MACH__)) || defined(_AIX) This is MacOSX or AIX #endif ], [gl_cv_func_poll="guessing no"], [gl_cv_func_poll="guessing yes"])])]) fi case "$gl_cv_func_poll" in *yes) ;; *) AC_CHECK_FUNC([poll], [ac_cv_func_poll=yes], [ac_cv_func_poll=no]) if test $ac_cv_func_poll = no; then HAVE_POLL=0 else REPLACE_POLL=1 fi ;; esac if test $HAVE_POLL = 0 || test $REPLACE_POLL = 1; then : else AC_DEFINE([HAVE_POLL], [1], [Define to 1 if you have the 'poll' function and it works.]) fi dnl Determine the needed libraries. LIB_POLL="$LIBSOCKET" if test $HAVE_POLL = 0 || test $REPLACE_POLL = 1; then case "$host_os" in mingw*) dnl On the MSVC platform, the function MsgWaitForMultipleObjects dnl (used in lib/poll.c) requires linking with -luser32. On mingw, dnl it is implicit. AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #define WIN32_LEAN_AND_MEAN #include <windows.h> int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; }]])], [], [LIB_POLL="$LIB_POLL -luser32"]) ;; esac fi AC_SUBST([LIB_POLL]) ]) # Prerequisites of lib/poll.c. AC_DEFUN([gl_PREREQ_POLL], [ AC_CHECK_HEADERS_ONCE([sys/ioctl.h sys/filio.h]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/poll_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000004177�14110572173�0016347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# poll_h.m4 serial 6 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_POLL_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_POLL_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([poll.h]) if test $ac_cv_header_poll_h = yes; then HAVE_POLL_H=1 else HAVE_POLL_H=0 fi AC_SUBST([HAVE_POLL_H]) dnl <poll.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([poll.h]) gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <poll.h>]], [poll]) ]) # gl_POLL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_POLL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_POLL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_POLL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_POLL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POLL]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_POLL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_POLL_H_DEFAULTS]) ]) AC_DEFUN([gl_POLL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POLL=1; AC_SUBST([HAVE_POLL]) REPLACE_POLL=0; AC_SUBST([REPLACE_POLL]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/popen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003210�14110572173�0016176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# popen.m4 serial 6 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([popen]) if test $ac_cv_func_popen = no; then HAVE_POPEN=0 else AC_CACHE_CHECK([whether popen works with closed stdin], [gl_cv_func_popen_works], [ AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h>]], [[int result = 0; FILE *child; fclose (stdin); fclose (stdout); child = popen ("echo a", "r"); if (fgetc (child) != 'a') result |= 1; if (pclose (child) != 0) result |= 2; return result; ]])], [gl_cv_func_popen_works=yes], [gl_cv_func_popen_works=no], [case "$host_os" in # For now, only cygwin 1.5 or older is known to be broken. cygwin*) gl_cv_func_popen_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_popen_works="guessing yes" ;; *) gl_cv_func_popen_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_popen_works" in *yes) ;; *) REPLACE_POPEN=1 ;; esac fi ]) # Prerequisites of lib/popen.c. AC_DEFUN([gl_PREREQ_POPEN], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix-shell.m4�����������������������������������������������������������0000664�0000000�0000000�00000003360�14110572173�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Find a POSIX-conforming shell. # Copyright (C) 2007-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # If a POSIX-conforming shell can be found, set POSIX_SHELL and # PREFERABLY_POSIX_SHELL to it. If not, set POSIX_SHELL to the # empty string and PREFERABLY_POSIX_SHELL to '/bin/sh'. AC_DEFUN([gl_POSIX_SHELL], [ AC_CACHE_CHECK([for a shell that conforms to POSIX], [gl_cv_posix_shell], [gl_test_posix_shell_script=' func_return () { (exit [$]1) } func_success () { func_return 0 } func_failure () { func_return 1 } func_ret_success () { return 0 } func_ret_failure () { return 1 } subshell_umask_sanity () { (umask 22; (umask 0); test $(umask) -eq 22) } test "[$](echo foo)" = foo && func_success && ! func_failure && func_ret_success && ! func_ret_failure && (set x && func_ret_success y && test x = "[$]1") && subshell_umask_sanity ' for gl_cv_posix_shell in \ "$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do case $gl_cv_posix_shell in /*) "$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \ && break;; esac done]) if test "$gl_cv_posix_shell" != no; then POSIX_SHELL=$gl_cv_posix_shell PREFERABLY_POSIX_SHELL=$POSIX_SHELL else POSIX_SHELL= PREFERABLY_POSIX_SHELL=/bin/sh fi AC_SUBST([POSIX_SHELL]) AC_SUBST([PREFERABLY_POSIX_SHELL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix_memalign.m4��������������������������������������������������������0000664�0000000�0000000�00000003343�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_memalign.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POSIX_MEMALIGN], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdlib.h> to declare posix_memalign(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([posix_memalign]) if test $ac_cv_func_posix_memalign = yes; then dnl On OpenBSD 6.1, posix_memalign (&p, 32, 2406) returns a pointer dnl that is not a multiple of 32. AC_CACHE_CHECK([whether posix_memalign works for large alignments], [gl_cv_func_posix_memalign_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p; if (posix_memalign (&p, 32, 2406) == 0) if (((unsigned long)p % 32) != 0) return 1; return 0; ]]) ], [gl_cv_func_posix_memalign_works=yes], [gl_cv_func_posix_memalign_works=no], [case "$host_os" in # Guess no on OpenBSD. openbsd*) gl_cv_func_posix_memalign_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_posix_memalign_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_posix_memalign_works" in *yes) ;; *) REPLACE_POSIX_MEMALIGN=1 ;; esac else dnl The system does not have posix_memalign. HAVE_POSIX_MEMALIGN=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix_openpt.m4����������������������������������������������������������0000664�0000000�0000000�00000001156�14110572173�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_openpt.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POSIX_OPENPT], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl Persuade Solaris <stdlib.h> to declare posix_openpt(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([posix_openpt]) if test $ac_cv_func_posix_openpt != yes; then dnl The system does not have posix_openpt. HAVE_POSIX_OPENPT=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix_spawn.m4�����������������������������������������������������������0000664�0000000�0000000�00000054010�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn.m4 serial 22 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether the entire posix_spawn facility is available. AC_DEFUN([gl_POSIX_SPAWN], [ AC_REQUIRE([gl_POSIX_SPAWN_BODY]) ]) AC_DEFUN([gl_POSIX_SPAWN_BODY], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) dnl Assume that when the main function exists, all the others, dnl except posix_spawnattr_{get,set}sched*, are available as well. dnl AC_CHECK_FUNCS_ONCE([posix_spawnp]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_init]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addclose]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_adddup2]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addopen]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_destroy]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_init]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getflags]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setflags]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getpgroup]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setpgroup]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigdefault]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigdefault]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigmask]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigmask]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_destroy]) AC_CHECK_DECLS([posix_spawn], , , [[#include <spawn.h>]]) if test $ac_cv_func_posix_spawn = yes; then m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR], [dnl Module 'posix_spawn_file_actions_addchdir' is present. AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addchdir_np = no; then dnl In order to implement the posix_spawn_file_actions_addchdir dnl function, we need to replace the entire posix_spawn facility. REPLACE_POSIX_SPAWN=1 fi ]) m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR], [dnl Module 'posix_spawn_file_actions_addfchdir' is present. AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addfchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addfchdir_np = no; then dnl In order to implement the posix_spawn_file_actions_addfchdir dnl function, we need to replace the entire posix_spawn facility. REPLACE_POSIX_SPAWN=1 fi ]) if test $REPLACE_POSIX_SPAWN = 0; then gl_POSIX_SPAWN_WORKS case "$gl_cv_func_posix_spawn_works" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then gl_POSIX_SPAWN_SECURE case "$gl_cv_func_posix_spawn_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac case "$gl_cv_func_posix_spawnp_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDULER dnl evaluates to nonzero. dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedpolicy]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedpolicy]) AC_CACHE_CHECK([whether posix_spawnattr_setschedpolicy is supported], [gl_cv_func_spawnattr_setschedpolicy], [AC_EGREP_CPP([POSIX scheduling supported], [ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDULER POSIX scheduling supported #endif ], [gl_cv_func_spawnattr_setschedpolicy=yes], [gl_cv_func_spawnattr_setschedpolicy=no]) ]) dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDPARAM dnl evaluates to nonzero. dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedparam]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedparam]) AC_CACHE_CHECK([whether posix_spawnattr_setschedparam is supported], [gl_cv_func_spawnattr_setschedparam], [AC_EGREP_CPP([POSIX scheduling supported], [ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDPARAM POSIX scheduling supported #endif ], [gl_cv_func_spawnattr_setschedparam=yes], [gl_cv_func_spawnattr_setschedparam=no]) ]) fi else dnl The system does not have the main function. Therefore we have to dnl provide our own implementation. This implies to define our own dnl posix_spawn_file_actions_t and posix_spawnattr_t types. if test $ac_cv_have_decl_posix_spawn = yes; then dnl The system declares posix_spawn() already. This declaration uses dnl the original posix_spawn_file_actions_t and posix_spawnattr_t types. dnl But we need a declaration with our own posix_spawn_file_actions_t and dnl posix_spawnattr_t types. REPLACE_POSIX_SPAWN=1 fi fi if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then AC_DEFINE([REPLACE_POSIX_SPAWN], [1], [Define if gnulib uses its own posix_spawn and posix_spawnp functions.]) fi ]) dnl Test whether posix_spawn actually works. dnl posix_spawn on AIX 5.3..6.1 has two bugs: dnl 1) When it fails to execute the program, the child process exits with dnl exit() rather than _exit(), which causes the stdio buffers to be dnl flushed. Reported by Rainer Tammer. dnl 2) The posix_spawn_file_actions_addopen function does not support file dnl names that contain a '*'. dnl posix_spawn on AIX 5.3..6.1 has also a third bug: It does not work dnl when POSIX threads are used. But we don't test against this bug here. AC_DEFUN([gl_POSIX_SPAWN_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether posix_spawn works], [gl_cv_func_posix_spawn_works], [if test $cross_compiling = no; then AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> ]GL_MDA_DEFINES[ extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "/non/exist/ent" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } int main () { char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; int ofd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int status; int exitstatus; setvbuf (stdout, NULL, _IOFBF, 0); puts ("This should be seen only once."); if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); sigaddset (&fatal_signal_set, SIGHUP); sigaddset (&fatal_signal_set, SIGPIPE); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); if (err == ENOENT) return 0; else { errno = err; perror ("subprocess failed"); exit (1); } } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ofd[0]); close (ofd[1]); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 127) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } return 0; } ]])], [if test -s conftest$ac_exeext \ && ./conftest$ac_exeext > conftest.out \ && echo 'This should be seen only once.' > conftest.ok \ && cmp conftest.out conftest.ok >/dev/null 2>&1; then gl_cv_func_posix_spawn_works=yes else gl_cv_func_posix_spawn_works=no fi], [gl_cv_func_posix_spawn_works=no]) if test $gl_cv_func_posix_spawn_works = yes; then AC_RUN_IFELSE([AC_LANG_SOURCE([[ /* Test whether posix_spawn_file_actions_addopen supports filename arguments that contain special characters such as '*'. */ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> ]GL_MDA_DEFINES[ extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "conftest" #define DATA_FILENAME "conftest%=*#?" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; posix_spawn_file_actions_t actions; bool actions_allocated; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle Potta", 1, 11, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 2; } /* Avoid reading from our stdin, as it could block. */ freopen ("/dev/null", "rb", stdin); /* Test whether posix_spawn_file_actions_addopen with this file name actually works, but spawning a child that reads from this file. */ actions_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); errno = err; perror ("subprocess failed"); return 3; } posix_spawn_file_actions_destroy (&actions); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 4; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 5; } return 0; } static int child_main (void) { char buf[1024]; /* See if reading from STDIN_FILENO yields the expected contents. */ if (fread (buf, 1, sizeof (buf), stdin) == 11 && memcmp (buf, "Halle Potta", 11) == 0) return 0; else return 8; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } unlink (DATA_FILENAME); return exitstatus; } ]])], [], [gl_cv_func_posix_spawn_works=no]) fi else case "$host_os" in aix*) gl_cv_func_posix_spawn_works="guessing no";; *) gl_cv_func_posix_spawn_works="guessing yes";; esac fi ]) ]) dnl Test whether posix_spawn and posix_spawnp are secure. AC_DEFUN([gl_POSIX_SPAWN_SECURE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On many platforms, posix_spawn or posix_spawnp allow executing a dnl script without a '#!' marker as a shell script. This is unsecure. AC_CACHE_CHECK([whether posix_spawn rejects scripts without shebang], [gl_cv_func_posix_spawn_secure_exec], [echo ':' > conftest.scr chmod a+x conftest.scr AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawn (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } ]])], [gl_cv_func_posix_spawn_secure_exec=yes], [gl_cv_func_posix_spawn_secure_exec=no], [case "$host_os" in # Guess no on GNU/Hurd. gnu*) gl_cv_func_posix_spawn_secure_exec="guessing no" ;; # Guess yes on all other platforms. *) gl_cv_func_posix_spawn_secure_exec="guessing yes" ;; esac ]) rm -f conftest.scr ]) AC_CACHE_CHECK([whether posix_spawnp rejects scripts without shebang], [gl_cv_func_posix_spawnp_secure_exec], [echo ':' > conftest.scr chmod a+x conftest.scr AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawnp (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } ]])], [gl_cv_func_posix_spawnp_secure_exec=yes], [gl_cv_func_posix_spawnp_secure_exec=no], [case "$host_os" in # Guess yes on glibc systems (glibc >= 2.15 actually) except GNU/Hurd, # musl libc, NetBSD. *-gnu* | *-musl* | netbsd*) gl_cv_func_posix_spawnp_secure_exec="guessing yes" ;; # Guess no on GNU/Hurd, macOS, FreeBSD, OpenBSD, AIX, Solaris, Cygwin. gnu* | darwin* | freebsd* | dragonfly* | midnightbsd* | openbsd* | \ aix* | solaris* | cygwin*) gl_cv_func_posix_spawnp_secure_exec="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_posix_spawnp_secure_exec="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.scr ]) ]) # Prerequisites of lib/spawni.c. AC_DEFUN([gl_PREREQ_POSIX_SPAWN_INTERNAL], [ AC_CHECK_HEADERS([paths.h]) AC_CHECK_FUNCS([confstr sched_setparam sched_setscheduler setegid seteuid vfork]) ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 else dnl On musl libc, posix_spawn_file_actions_addclose succeeds even if the fd dnl argument is negative. AC_CACHE_CHECK([whether posix_spawn_file_actions_addclose works], [gl_cv_func_posix_spawn_file_actions_addclose_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_addclose (&actions, -5) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_addclose_works=yes], [gl_cv_func_posix_spawn_file_actions_addclose_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_addclose_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 ;; esac fi ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 else dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_adddup2 dnl succeeds even if the fd argument is out of range. AC_CACHE_CHECK([whether posix_spawn_file_actions_adddup2 works], [gl_cv_func_posix_spawn_file_actions_adddup2_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_adddup2_works=yes], [gl_cv_func_posix_spawn_file_actions_adddup2_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";; solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_adddup2_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 ;; esac fi ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 else dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_addopen dnl succeeds even if the fd argument is out of range. AC_CACHE_CHECK([whether posix_spawn_file_actions_addopen works], [gl_cv_func_posix_spawn_file_actions_addopen_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> #include <fcntl.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_addopen_works=yes], [gl_cv_func_posix_spawn_file_actions_addopen_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix_spawn_faction_addchdir.m4������������������������������������������0000664�0000000�0000000�00000001457�14110572173�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn_faction_addchdir.m4 serial 1 dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) gl_POSIX_SPAWN AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir posix_spawn_file_actions_addchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addchdir = yes; then dnl This function is not yet standardized. Therefore override the dnl system's implementation always. REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1 else HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posix_spawn_faction_addfchdir.m4�����������������������������������������0000664�0000000�0000000�00000001466�14110572173�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn_faction_addfchdir.m4 serial 1 dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) gl_POSIX_SPAWN AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addfchdir posix_spawn_file_actions_addfchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addfchdir = yes; then dnl This function is not yet standardized. Therefore override the dnl system's implementation always. REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1 else HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posixcheck.m4������������������������������������������������������������0000664�0000000�0000000�00000001055�14110572173�0017222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posixcheck.m4 serial 1 dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_POSIXCHECK], [ AH_VERBATIM([POSIXCHECK], [/* Define to enable warnings for determining which Gnulib modules to use, for portability of POSIX functions. This does not work well in C++ mode. */ #ifndef __cplusplus # define GNULIB_POSIXCHECK 1 #endif ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posixtm.m4���������������������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0016574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posixtm.m4 serial 8 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_POSIXTM], [ dnl No prerequisites of lib/posixtm.c. : ]) �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/posixver.m4��������������������������������������������������������������0000664�0000000�0000000�00000003714�14110572173�0016745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posixver.m4 serial 12 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_POSIXVER], [ AC_REQUIRE([gl_DEFAULT_POSIX2_VERSION]) ]) # Set the default level of POSIX conformance at configure-time. # Build with './configure DEFAULT_POSIX2_VERSION=199209 ...' to # support the older version, thus preserving portability with # scripts that use sort +1, tail +32, etc. # Note however, that this breaks tools that might run commands # like 'sort +some-file' that conform with the newer standard. AC_DEFUN([gl_DEFAULT_POSIX2_VERSION], [ AC_MSG_CHECKING([for desired default level of POSIX conformance]) gl_default_posix2_version=none-specified if test -n "$ac_cv_env_DEFAULT_POSIX2_VERSION_set"; then gl_default_posix2_version=$ac_cv_env_DEFAULT_POSIX2_VERSION_value AC_DEFINE_UNQUOTED([DEFAULT_POSIX2_VERSION], $gl_default_posix2_version, [Define the default level of POSIX conformance. The value is of the form YYYYMM, specifying the year and month the standard was adopted. If not defined here, it defaults to the value of _POSIX2_VERSION in <unistd.h>. Define to 199209 to default to POSIX 1003.2-1992, which makes standard programs like 'head', 'tail', and 'sort' accept obsolete options like '+10' and '-10'. Define to 200112 to default to POSIX 1003.1-2001, which makes these standard programs treat leading-'+' operands as file names and require modern usages like '-n 10' instead of '-10'. Whether defined here or not, the default can be overridden at run time via the _POSIX2_VERSION environment variable.]) fi AC_MSG_RESULT([$gl_default_posix2_version]) AC_ARG_VAR( [DEFAULT_POSIX2_VERSION], [POSIX version to default to; see 'config.hin'.]) ]) ����������������������������������������������������gnulib-20210822~d383792/m4/pow.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0015670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pow.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POW], [ dnl Determine POW_LIBM. gl_COMMON_DOUBLE_MATHFUNC([pow]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/powf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001446�14110572173�0016041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# powf.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POWF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_POW]) dnl Persuade glibc <math.h> to declare powf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether powf() exists. Assume that powf(), if it exists, is dnl defined in the same library as pow(). save_LIBS="$LIBS" LIBS="$LIBS $POW_LIBM" AC_CHECK_FUNCS([powf]) LIBS="$save_LIBS" if test $ac_cv_func_powf = yes; then POWF_LIBM="$POW_LIBM" else HAVE_POWF=0 POWF_LIBM="$POW_LIBM" fi AC_SUBST([POWF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pread.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004400�14110572173�0016152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pread.m4 serial 6 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PREAD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <unistd.h> to declare pread(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([pread]) if test $ac_cv_func_pread = yes; then dnl On HP-UX 11.11 with _FILE_OFFSET_BITS=64, pread() on a file returns 0 dnl instead of a positive value. dnl On HP-UX 11.31, pread() on a pipe does not fail. AC_CACHE_CHECK([whether pread works], [gl_cv_func_pread_works], [ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in # Guess no on HP-UX. hpux*) gl_cv_func_pread_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_pread_works="guessing yes" ;; esac changequote([,])dnl gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64" AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> ]GL_MDA_DEFINES], [[ { int result = 0; /* This test fails on HP-UX 11.00..11.11. */ { int fd = open ("conftest.c", O_RDONLY); if (fd < 0) result |= 1; else { char byte_buf; if (pread (fd, &byte_buf, 1, (off_t) 0) != 1) result |= 2; close (fd); } } /* This test fails on HP-UX 11.00..11.31. */ { FILE *fp = popen ("echo", "r"); if (fp == NULL) result |= 1; else { int fd = fileno (fp); char byte_buf; if (pread (fd, &byte_buf, 1, (off_t) 0) >= 0) result |= 4; pclose (fp); } } return result; }]])], [gl_cv_func_pread_works=yes], [gl_cv_func_pread_works=no], [:]) CPPFLAGS="$gl_save_CPPFLAGS" ]) case "$gl_cv_func_pread_works" in *yes) ;; *) REPLACE_PREAD=1 ;; esac else HAVE_PREAD=0 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/printf-frexp.m4����������������������������������������������������������0000664�0000000�0000000�00000002266�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexp.m4 serial 5 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to define printf_frexp() without linking with libm. AC_DEFUN([gl_FUNC_PRINTF_FREXP], [ AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) if test $gl_cv_func_frexp_no_libm = yes; then gl_FUNC_FREXP_WORKS case "$gl_cv_func_frexp_works" in *yes) AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], [Define if the frexp function is available in libc.]) ;; esac fi AC_CACHE_CHECK([whether ldexp can be used without linking with libm], [gl_cv_func_ldexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x; int y;]], [[return ldexp (x, y) < 1;]])], [gl_cv_func_ldexp_no_libm=yes], [gl_cv_func_ldexp_no_libm=no]) ]) if test $gl_cv_func_ldexp_no_libm = yes; then AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], [Define if the ldexp function is available in libc.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/printf-frexpl.m4���������������������������������������������������������0000664�0000000�0000000�00000003323�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexpl.m4 serial 10 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to define printf_frexpl() without linking with libm. AC_DEFUN([gl_FUNC_PRINTF_FREXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Subset of gl_FUNC_FREXPL_NO_LIBM. gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = yes; then gl_FUNC_FREXPL_WORKS case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], [Define if the frexpl function is available in libc.]) dnl Also check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) fi gl_CHECK_LDEXPL_NO_LIBM if test $gl_cv_func_ldexpl_no_libm = yes; then gl_FUNC_LDEXPL_WORKS case "$gl_cv_func_ldexpl_works" in *yes) AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], [Define if the ldexpl function is available in libc.]) dnl Also check whether it's declared. dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) ;; esac fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/printf-posix-rpl.m4������������������������������������������������������0000664�0000000�0000000�00000001374�14110572173�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-posix-rpl.m4 serial 4 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PRINTF_POSIX], [ AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX]) if test $gl_cv_func_vfprintf_posix = no; then gl_REPLACE_PRINTF fi ]) AC_DEFUN([gl_REPLACE_PRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) AC_LIBOBJ([printf]) REPLACE_PRINTF=1 AC_DEFINE([REPLACE_PRINTF_POSIX], [1], [Define if printf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_PRINTF ]) AC_DEFUN([gl_PREREQ_PRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/printf.m4����������������������������������������������������������������0000664�0000000�0000000�00000213527�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf.m4 serial 73 dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test whether the *printf family of functions supports the 'j', 'z', 't', dnl 'L' size specifiers. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_sizes_c99. AC_DEFUN([gl_PRINTF_SIZES_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C99], [gl_cv_func_printf_sizes_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; }]])], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; midnightbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_sizes_c99="guessing yes"], [gl_cv_func_printf_sizes_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports 'long double' dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_long_double. AC_DEFUN([gl_PRINTF_LONG_DOUBLE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports 'long double' arguments], [gl_cv_func_printf_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], [case "$host_os" in # Guess no on BeOS. beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_long_double="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_long_double="guessing yes"], [gl_cv_func_printf_long_double="guessing no"]) ;; *) gl_cv_func_printf_long_double="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'double' arguments and negative zero arguments in the %f, %e, %g dnl directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite. AC_DEFUN([gl_PRINTF_INFINITE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], [gl_cv_func_printf_infinite], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; }]])], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; openbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite="guessing yes"], [gl_cv_func_printf_infinite="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite_long_double. AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. if test -n "$gl_printf_safe"; then AC_DEFINE([CHECK_PRINTF_SAFE], [1], [Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values.]) fi case "$gl_cv_func_printf_long_double" in *yes) AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], [gl_cv_func_printf_infinite_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <float.h> #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; openbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite_long_double="guessing yes"], [gl_cv_func_printf_infinite_long_double="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";; esac ;; esac ]) ]) ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac ]) dnl Test whether the *printf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of floating-point numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_a. AC_DEFUN([gl_PRINTF_DIRECTIVE_A], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], [gl_cv_func_printf_directive_a], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 13.0 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; }]])], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], [ case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu* | gnu*) AC_EGREP_CPP([BZ2908], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif ], [gl_cv_func_printf_directive_a="guessing yes"], [gl_cv_func_printf_directive_a="guessing no"]) ;; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_a="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_a="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_a="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %F format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_f. AC_DEFUN([gl_PRINTF_DIRECTIVE_F], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'F' directive], [gl_cv_func_printf_directive_f], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; midnightbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; openbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_f="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_directive_f="guessing yes"], [gl_cv_func_printf_directive_f="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_f="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %n format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_n. AC_DEFUN([gl_PRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'n' directive], [gl_cv_func_printf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER #include <inttypes.h> /* See page about "Parameter Validation" on msdn.microsoft.com. <https://docs.microsoft.com/en-us/cpp/c-runtime-library/parameter-validation> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-invalid-parameter-handler-set-thread-local-invalid-parameter-handler> */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; }]])], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], [case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_printf_directive_n="guessing yes"], [gl_cv_func_printf_directive_n="guessing no"]) ;; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_n="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %ls format dnl directive and in particular, when a precision is specified, whether dnl the functions stop converting the wide string argument when the number dnl of bytes that have been produced by this conversion equals or exceeds dnl the precision. dnl Result is gl_cv_func_printf_directive_ls. AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'ls' directive], [gl_cv_func_printf_directive_ls], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> #include <string.h> int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; }]])], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], [ changequote(,)dnl case "$host_os" in # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_ls="guessing no";; openbsd*) gl_cv_func_printf_directive_ls="guessing yes";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with positions. (POSIX:2001) dnl Result is gl_cv_func_printf_positions. AC_DEFUN([gl_PRINTF_POSITIONS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], [gl_cv_func_printf_positions], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], [ changequote(,)dnl case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_positions="guessing yes";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) dnl Result is gl_cv_func_printf_flag_grouping. AC_DEFUN([gl_PRINTF_FLAG_GROUPING], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the grouping flag], [gl_cv_func_printf_flag_grouping], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; }]])], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], [ changequote(,)dnl case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the - flag correctly. dnl (ISO C99.) See dnl <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html> dnl Result is gl_cv_func_printf_flag_leftadjust. AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], [gl_cv_func_printf_flag_leftadjust], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; }]])], [gl_cv_func_printf_flag_leftadjust=yes], [gl_cv_func_printf_flag_leftadjust=no], [ changequote(,)dnl case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports padding of non-finite dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See dnl <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> dnl Result is gl_cv_func_printf_flag_zero. AC_DEFUN([gl_PRINTF_FLAG_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the zero flag correctly], [gl_cv_func_printf_flag_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; }]])], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_zero="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports large precisions. dnl On mingw, precisions larger than 512 are treated like 512, in integer, dnl floating-point or pointer output. On Solaris 10/x86, precisions larger dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, dnl precisions larger than 510 in floating-point output yield wrong results. dnl On AIX 7.1, precisions larger than 998 in floating-point output yield dnl wrong results. On BeOS, precisions larger than 1044 crash the program. dnl Result is gl_cv_func_printf_precision. AC_DEFUN([gl_PRINTF_PRECISION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports large precisions], [gl_cv_func_printf_precision], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; }]])], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], [ changequote(,)dnl case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; # Guess yes on Android. linux*-android*) gl_cv_func_printf_precision="guessing yes" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions recovers gracefully in case dnl of an out-of-memory condition, or whether it crashes the entire program. dnl Result is gl_cv_func_printf_enomem. AC_DEFUN([gl_PRINTF_ENOMEM], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_MULTIARCH]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf survives out-of-memory conditions], [gl_cv_func_printf_enomem], [ gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then AC_LANG_CONFTEST([AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <errno.h> int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 2>&AS_MESSAGE_LOG_FD result=$? _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else dnl A universal build on Apple Mac OS X platforms. dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. dnl But we need a configuration result that is valid in both modes. gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_enomem="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_enomem="$gl_cross_guess_normal";; esac changequote([,])dnl fi ]) ]) dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) dnl Result is ac_cv_func_snprintf. AC_DEFUN([gl_SNPRINTF_PRESENCE], [ AC_CHECK_FUNCS_ONCE([snprintf]) ]) dnl Test whether the string produced by the snprintf function is always NUL dnl terminated. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_truncation_c99. AC_DEFUN_ONCE([gl_SNPRINTF_TRUNCATION_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; }]])], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the return value of the snprintf function is the number dnl of bytes (excluding the terminating NUL) that would have been produced dnl if the buffer had been large enough. (ISO C99, POSIX:2001) dnl For example, this test program fails on IRIX 6.5: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8]; dnl int retval = snprintf (buf, 3, "%d", 12345); dnl return retval >= 0 && retval < 3; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_snprintf_retval_c99. AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], [case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_snprintf_retval_c99="guessing yes"], [gl_cv_func_snprintf_retval_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the snprintf function supports the %n format directive dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_directive_n. AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; }]])], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], [ case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_snprintf_directive_n="guessing yes"], [gl_cv_func_snprintf_directive_n="guessing no"]) ;; changequote(,)dnl # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; midnightbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_directive_n="guessing no";; solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; aix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; osf*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_directive_n="guessing no";; netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_snprintf_directive_n="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_directive_n="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";; changequote([,])dnl esac ]) ]) ]) dnl Test whether the snprintf function, when passed a size = 1, writes any dnl output without bounds in this case, behaving like sprintf. This is the dnl case on Linux libc5. dnl Result is gl_cv_func_snprintf_size1. AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], [gl_cv_func_snprintf_size1=no], [case "$host_os" in # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac ]) ]) ]) dnl Test whether the vsnprintf function, when passed a zero size, produces no dnl output. (ISO C99, POSIX:2001) dnl For example, snprintf nevertheless writes a NUL byte in this case dnl on OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl And vsnprintf writes any output without bounds in this case, behaving like dnl vsprintf, on HP-UX 11 and OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdarg.h> dnl #include <stdio.h> dnl static int my_snprintf (char *buf, int size, const char *format, ...) dnl { dnl va_list args; dnl int ret; dnl va_start (args, format); dnl ret = vsnprintf (buf, size, format, args); dnl va_end (args); dnl return ret; dnl } dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl my_snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_vsnprintf_zerosize_c99. AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], [gl_cv_func_vsnprintf_zerosize_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdio.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 0, "%d", 12345); return buf[0] != 'D'; }]])], [gl_cv_func_vsnprintf_zerosize_c99=yes], [gl_cv_func_vsnprintf_zerosize_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; midnightbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on native Windows. mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl The results of these tests on various platforms are: dnl dnl 1 = gl_PRINTF_SIZES_C99 dnl 2 = gl_PRINTF_LONG_DOUBLE dnl 3 = gl_PRINTF_INFINITE dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE dnl 5 = gl_PRINTF_DIRECTIVE_A dnl 6 = gl_PRINTF_DIRECTIVE_F dnl 7 = gl_PRINTF_DIRECTIVE_N dnl 8 = gl_PRINTF_DIRECTIVE_LS dnl 9 = gl_PRINTF_POSITIONS dnl 10 = gl_PRINTF_FLAG_GROUPING dnl 11 = gl_PRINTF_FLAG_LEFTADJUST dnl 12 = gl_PRINTF_FLAG_ZERO dnl 13 = gl_PRINTF_PRECISION dnl 14 = gl_PRINTF_ENOMEM dnl 15 = gl_SNPRINTF_PRESENCE dnl 16 = gl_SNPRINTF_TRUNCATION_C99 dnl 17 = gl_SNPRINTF_RETVAL_C99 dnl 18 = gl_SNPRINTF_DIRECTIVE_N dnl 19 = gl_SNPRINTF_SIZE1 dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 dnl dnl 1 = checking whether printf supports size specifiers as in C99... dnl 2 = checking whether printf supports 'long double' arguments... dnl 3 = checking whether printf supports infinite 'double' arguments... dnl 4 = checking whether printf supports infinite 'long double' arguments... dnl 5 = checking whether printf supports the 'a' and 'A' directives... dnl 6 = checking whether printf supports the 'F' directive... dnl 7 = checking whether printf supports the 'n' directive... dnl 8 = checking whether printf supports the 'ls' directive... dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... dnl 10 = checking whether printf supports the grouping flag... dnl 11 = checking whether printf supports the left-adjust flag correctly... dnl 12 = checking whether printf supports the zero flag correctly... dnl 13 = checking whether printf supports large precisions... dnl 14 = checking whether printf survives out-of-memory conditions... dnl 15 = checking for snprintf... dnl 16 = checking whether snprintf truncates the result as in C99... dnl 17 = checking whether snprintf returns a byte count as in C99... dnl 18 = checking whether snprintf fully supports the 'n' directive... dnl 19 = checking whether snprintf respects a size of 1... dnl 20 = checking whether vsnprintf respects a zero size as in C99... dnl dnl . = yes, # = no. dnl dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . dnl FreeBSD 13.0 . . . . # . . . . . . . . # . . . . . . dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . dnl Mac OS X 10.13.5 . . . # # . # . . . . . . . . . . # . . dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . dnl OpenBSD 6.0, 6.7 . . . . # . . . . . . . . # . . . . . . dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . dnl Solaris 11.4 . . # # # . . # . . . # . . . . . . . . dnl Solaris 11.3 . . . . # . . # . . . . . . . . . . . . dnl Solaris 11.0 . . # # # . . # . . . # . . . . . . . . dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # dnl NetBSD 9.0 . . . . # . . . . . . . . . . . . . . . dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl Android 4.3 . . # # # # # # . # . # . # . . . # . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/priv-set.m4��������������������������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by David Bartley. AC_DEFUN([gl_PRIV_SET], [ AC_CHECK_FUNCS([getppriv]) AC_CHECK_HEADERS_ONCE([priv.h]) ]) �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/progtest.m4��������������������������������������������������������������0000664�0000000�0000000�00000006017�14110572173�0016734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 9 (gettext-0.21.1) dnl Copyright (C) 1996-2003, 2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. AC_PREREQ([2.53]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in m4_if([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. m4_if([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test m4_if([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pselect.m4���������������������������������������������������������������0000664�0000000�0000000�00000004604�14110572173�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pselect.m4 serial 10 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PSELECT], [ AC_REQUIRE([gl_SYS_SELECT_H]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([pselect]) if test $ac_cv_func_pselect = yes; then AC_CACHE_CHECK([whether signature of pselect conforms to POSIX], [gl_cv_sig_pselect], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/select.h> ]], [[int (*p) (int, fd_set *, fd_set *, fd_set *restrict, struct timespec const *restrict, sigset_t const *restrict) = pselect; return !p;]])], [gl_cv_sig_pselect=yes], [gl_cv_sig_pselect=no])]) dnl On FreeBSD 8.2, pselect() doesn't always reject bad fds. AC_CACHE_CHECK([whether pselect detects invalid fds], [gl_cv_func_pselect_detects_ebadf], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> ]GL_MDA_DEFINES], [[ fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timespec timeout; timeout.tv_sec = 0; timeout.tv_nsec = 5000; return pselect (17, &set, NULL, NULL, &timeout, NULL) != -1 || errno != EBADF; ]])], [gl_cv_func_pselect_detects_ebadf=yes], [gl_cv_func_pselect_detects_ebadf=no], [ case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_pselect_detects_ebadf="$gl_cross_guess_normal" ;; esac ]) ]) case $gl_cv_func_pselect_detects_ebadf in *yes) ;; *) REPLACE_PSELECT=1 ;; esac fi if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then REPLACE_PSELECT=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-cond.m4����������������������������������������������������������0000664�0000000�0000000�00000002254�14110572173�0017434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-cond.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_COND], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_COND_INIT=1 REPLACE_PTHREAD_CONDATTR_INIT=1 REPLACE_PTHREAD_CONDATTR_DESTROY=1 REPLACE_PTHREAD_COND_WAIT=1 REPLACE_PTHREAD_COND_TIMEDWAIT=1 REPLACE_PTHREAD_COND_SIGNAL=1 REPLACE_PTHREAD_COND_BROADCAST=1 REPLACE_PTHREAD_COND_DESTROY=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_COND_INIT=0 HAVE_PTHREAD_CONDATTR_INIT=0 HAVE_PTHREAD_CONDATTR_DESTROY=0 HAVE_PTHREAD_COND_WAIT=0 HAVE_PTHREAD_COND_TIMEDWAIT=0 HAVE_PTHREAD_COND_SIGNAL=0 HAVE_PTHREAD_COND_BROADCAST=0 HAVE_PTHREAD_COND_DESTROY=0 fi fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-mutex.m4���������������������������������������������������������0000664�0000000�0000000�00000005003�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-mutex.m4 serial 3 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_MUTEX], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_MUTEX_INIT=1 REPLACE_PTHREAD_MUTEXATTR_INIT=1 REPLACE_PTHREAD_MUTEXATTR_GETTYPE=1 REPLACE_PTHREAD_MUTEXATTR_SETTYPE=1 REPLACE_PTHREAD_MUTEXATTR_GETROBUST=1 REPLACE_PTHREAD_MUTEXATTR_SETROBUST=1 REPLACE_PTHREAD_MUTEXATTR_DESTROY=1 REPLACE_PTHREAD_MUTEX_LOCK=1 REPLACE_PTHREAD_MUTEX_TRYLOCK=1 REPLACE_PTHREAD_MUTEX_TIMEDLOCK=1 REPLACE_PTHREAD_MUTEX_UNLOCK=1 REPLACE_PTHREAD_MUTEX_DESTROY=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_MUTEX_INIT=0 HAVE_PTHREAD_MUTEXATTR_INIT=0 HAVE_PTHREAD_MUTEXATTR_GETTYPE=0 HAVE_PTHREAD_MUTEXATTR_SETTYPE=0 HAVE_PTHREAD_MUTEXATTR_GETROBUST=0 HAVE_PTHREAD_MUTEXATTR_SETROBUST=0 HAVE_PTHREAD_MUTEXATTR_DESTROY=0 HAVE_PTHREAD_MUTEX_LOCK=0 HAVE_PTHREAD_MUTEX_TRYLOCK=0 dnl HAVE_PTHREAD_MUTEX_TIMEDLOCK is set in pthread_mutex_timedlock.m4. HAVE_PTHREAD_MUTEX_UNLOCK=0 HAVE_PTHREAD_MUTEX_DESTROY=0 else AC_CACHE_CHECK([for pthread_mutexattr_getrobust], [gl_cv_func_pthread_mutexattr_getrobust], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBPMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_SOURCE( [[extern #ifdef __cplusplus "C" #endif int pthread_mutexattr_getrobust (void); int main () { return pthread_mutexattr_getrobust (); } ]])], [gl_cv_func_pthread_mutexattr_getrobust=yes], [gl_cv_func_pthread_mutexattr_getrobust=no]) LIBS="$saved_LIBS" ]) if test $gl_cv_func_pthread_mutexattr_getrobust = no; then HAVE_PTHREAD_MUTEXATTR_GETROBUST=0 HAVE_PTHREAD_MUTEXATTR_SETROBUST=0 AC_DEFINE([PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED], [1], [Define if the 'robust' attribute of pthread_mutex* doesn't exist.]) fi fi fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-once.m4����������������������������������������������������������0000664�0000000�0000000�00000001265�14110572173�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-once.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_ONCE], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_ONCE=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_ONCE=0 fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-rwlock.m4��������������������������������������������������������0000664�0000000�0000000�00000006633�14110572173�0020017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-rwlock.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_RWLOCK], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_RWLOCK_INIT=1 REPLACE_PTHREAD_RWLOCKATTR_INIT=1 REPLACE_PTHREAD_RWLOCKATTR_DESTROY=1 REPLACE_PTHREAD_RWLOCK_RDLOCK=1 REPLACE_PTHREAD_RWLOCK_WRLOCK=1 REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=1 REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=1 REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=1 REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=1 REPLACE_PTHREAD_RWLOCK_UNLOCK=1 REPLACE_PTHREAD_RWLOCK_DESTROY=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_RWLOCK_INIT=0 HAVE_PTHREAD_RWLOCKATTR_INIT=0 HAVE_PTHREAD_RWLOCKATTR_DESTROY=0 HAVE_PTHREAD_RWLOCK_RDLOCK=0 HAVE_PTHREAD_RWLOCK_WRLOCK=0 HAVE_PTHREAD_RWLOCK_TRYRDLOCK=0 HAVE_PTHREAD_RWLOCK_TRYWRLOCK=0 HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=0 HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=0 HAVE_PTHREAD_RWLOCK_UNLOCK=0 HAVE_PTHREAD_RWLOCK_DESTROY=0 else dnl On Android 4.3, the pthread_rwlock_* functions are declared in dnl <pthread.h> but don't exist in libc. AC_CACHE_CHECK([for pthread_rwlock_init], [gl_cv_func_pthread_rwlock_init], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBPMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_SOURCE( [[extern #ifdef __cplusplus "C" #endif int pthread_rwlock_init (void); int main () { return pthread_rwlock_init (); } ]])], [gl_cv_func_pthread_rwlock_init=yes], [gl_cv_func_pthread_rwlock_init=no]) LIBS="$saved_LIBS" ]) if test $gl_cv_func_pthread_rwlock_init = no; then REPLACE_PTHREAD_RWLOCK_INIT=1 REPLACE_PTHREAD_RWLOCKATTR_INIT=1 REPLACE_PTHREAD_RWLOCKATTR_DESTROY=1 REPLACE_PTHREAD_RWLOCK_RDLOCK=1 REPLACE_PTHREAD_RWLOCK_WRLOCK=1 REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=1 REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=1 REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=1 REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=1 REPLACE_PTHREAD_RWLOCK_UNLOCK=1 REPLACE_PTHREAD_RWLOCK_DESTROY=1 AC_DEFINE([PTHREAD_RWLOCK_UNIMPLEMENTED], [1], [Define if all pthread_rwlock* functions don't exist.]) else dnl On Mac OS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, AIX 5.1, HP-UX 11, dnl IRIX 6.5, Solaris 9, Cygwin, the pthread_rwlock_timed*lock functions dnl don't exist, although the other pthread_rwlock* functions exist. AC_CHECK_DECL([pthread_rwlock_timedrdlock], , [HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=0 HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=0 AC_DEFINE([PTHREAD_RWLOCK_LACKS_TIMEOUT], [1], [Define if the functions pthread_rwlock_timedrdlock and pthread_rwlock_timedwrlock don't exist.]) ], [[#include <pthread.h>]]) fi fi fi ]) �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-spin.m4����������������������������������������������������������0000664�0000000�0000000�00000001760�14110572173�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-spin.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_SPIN], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_SPIN_INIT=1 REPLACE_PTHREAD_SPIN_LOCK=1 REPLACE_PTHREAD_SPIN_TRYLOCK=1 REPLACE_PTHREAD_SPIN_UNLOCK=1 REPLACE_PTHREAD_SPIN_DESTROY=1 else if test $HAVE_PTHREAD_H = 0 || test $HAVE_PTHREAD_SPINLOCK_T = 0; then HAVE_PTHREAD_SPIN_INIT=0 HAVE_PTHREAD_SPIN_LOCK=0 HAVE_PTHREAD_SPIN_TRYLOCK=0 HAVE_PTHREAD_SPIN_UNLOCK=0 HAVE_PTHREAD_SPIN_DESTROY=0 fi fi ]) ����������������gnulib-20210822~d383792/m4/pthread-thread.m4��������������������������������������������������������0000664�0000000�0000000�00000004332�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-thread.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_THREAD], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_DESTROY=1 REPLACE_PTHREAD_SELF=1 REPLACE_PTHREAD_EQUAL=1 REPLACE_PTHREAD_DETACH=1 REPLACE_PTHREAD_JOIN=1 REPLACE_PTHREAD_EXIT=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_CREATE=0 HAVE_PTHREAD_ATTR_INIT=0 HAVE_PTHREAD_ATTR_GETDETACHSTATE=0 HAVE_PTHREAD_ATTR_SETDETACHSTATE=0 HAVE_PTHREAD_ATTR_DESTROY=0 HAVE_PTHREAD_SELF=0 HAVE_PTHREAD_EQUAL=0 HAVE_PTHREAD_DETACH=0 HAVE_PTHREAD_JOIN=0 HAVE_PTHREAD_EXIT=0 else dnl On HP-UX 11.11, pthread_create() and pthread_attr_init() are only dnl defined as inline functions. AC_CACHE_CHECK([whether pthread_create exists as a global function], [gl_cv_func_pthread_create], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBPMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_SOURCE( [[extern #ifdef __cplusplus "C" #endif int pthread_create (void); int main () { return pthread_create (); } ]])], [gl_cv_func_pthread_create=yes], [gl_cv_func_pthread_create=no]) LIBS="$saved_LIBS" ]) if test $gl_cv_func_pthread_create = no; then REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 AC_DEFINE([PTHREAD_CREATE_IS_INLINE], [1], [Define if pthread_create is an inline function.]) fi fi fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread-tss.m4�����������������������������������������������������������0000664�0000000�0000000�00000001606�14110572173�0017322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-tss.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_TSS], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_KEY_CREATE=1 REPLACE_PTHREAD_SETSPECIFIC=1 REPLACE_PTHREAD_GETSPECIFIC=1 REPLACE_PTHREAD_KEY_DELETE=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_KEY_CREATE=0 HAVE_PTHREAD_SETSPECIFIC=0 HAVE_PTHREAD_GETSPECIFIC=0 HAVE_PTHREAD_KEY_DELETE=0 fi fi ]) ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000035404�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_h.m4 serial 8 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_PTHREAD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_PTHREAD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) gl_CHECK_NEXT_HEADERS([pthread.h]) if test $ac_cv_header_pthread_h = yes; then HAVE_PTHREAD_H=1 dnl On mingw, if --enable-threads=windows or gl_AVOID_WINPTHREAD is used, dnl ignore the <pthread.h> from the mingw-w64 winpthreads library. m4_ifdef([gl_][THREADLIB], [ AC_REQUIRE([gl_][THREADLIB]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then HAVE_PTHREAD_H=0 fi ]) else HAVE_PTHREAD_H=0 fi AC_SUBST([HAVE_PTHREAD_H]) AC_CHECK_TYPES([pthread_t, pthread_spinlock_t], [], [], [AC_INCLUDES_DEFAULT[ #if HAVE_PTHREAD_H #include <pthread.h> #endif]]) if test $ac_cv_type_pthread_t != yes; then HAVE_PTHREAD_T=0 fi if test $ac_cv_type_pthread_spinlock_t != yes; then HAVE_PTHREAD_SPINLOCK_T=0 fi dnl Constants may be defined as C preprocessor macros or as enum items. AC_CACHE_CHECK([for PTHREAD_CREATE_DETACHED], [gl_cv_const_PTHREAD_CREATE_DETACHED], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_CREATE_DETACHED; ]], [[]])], [gl_cv_const_PTHREAD_CREATE_DETACHED=yes], [gl_cv_const_PTHREAD_CREATE_DETACHED=no]) ]) if test $gl_cv_const_PTHREAD_CREATE_DETACHED != yes; then HAVE_PTHREAD_CREATE_DETACHED=0 fi AC_CACHE_CHECK([for PTHREAD_MUTEX_RECURSIVE], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_MUTEX_RECURSIVE; ]], [[]])], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=yes], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=no]) ]) if test $gl_cv_const_PTHREAD_MUTEX_RECURSIVE != yes; then HAVE_PTHREAD_MUTEX_RECURSIVE=0 fi AC_CACHE_CHECK([for PTHREAD_MUTEX_ROBUST], [gl_cv_const_PTHREAD_MUTEX_ROBUST], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_MUTEX_ROBUST; ]], [[]])], [gl_cv_const_PTHREAD_MUTEX_ROBUST=yes], [gl_cv_const_PTHREAD_MUTEX_ROBUST=no]) ]) if test $gl_cv_const_PTHREAD_MUTEX_ROBUST != yes; then HAVE_PTHREAD_MUTEX_ROBUST=0 fi AC_CACHE_CHECK([for PTHREAD_PROCESS_SHARED], [gl_cv_const_PTHREAD_PROCESS_SHARED], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_PROCESS_SHARED; ]], [[]])], [gl_cv_const_PTHREAD_PROCESS_SHARED=yes], [gl_cv_const_PTHREAD_PROCESS_SHARED=no]) ]) if test $gl_cv_const_PTHREAD_PROCESS_SHARED != yes; then HAVE_PTHREAD_PROCESS_SHARED=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <pthread.h> ]], [ pthread_create pthread_attr_init pthread_attr_getdetachstate pthread_attr_setdetachstate pthread_attr_destroy pthread_self pthread_equal pthread_detach pthread_join pthread_exit pthread_once pthread_mutex_init pthread_mutexattr_init pthread_mutexattr_gettype pthread_mutexattr_settype pthread_mutexattr_getrobust pthread_mutexattr_setrobust pthread_mutexattr_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_timedlock pthread_mutex_unlock pthread_mutex_destroy pthread_rwlock_init pthread_rwlockattr_init pthread_rwlockattr_destroy pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_tryrdlock pthread_rwlock_trywrlock pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock pthread_rwlock_unlock pthread_rwlock_destroy pthread_cond_init pthread_condattr_init pthread_condattr_destroy pthread_cond_wait pthread_cond_timedwait pthread_cond_signal pthread_cond_broadcast pthread_cond_destroy pthread_key_create pthread_setspecific pthread_getspecific pthread_key_delete pthread_spin_init pthread_spin_lock pthread_spin_trylock pthread_spin_unlock pthread_spin_destroy]) AC_REQUIRE([AC_C_RESTRICT]) dnl For backward compatibility with gnulib versions <= 2019-07. LIB_PTHREAD="$LIBPMULTITHREAD" AC_SUBST([LIB_PTHREAD]) ]) # gl_PTHREAD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_PTHREAD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_PTHREAD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_PTHREAD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_THREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_ONCE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_RWLOCK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_COND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_TSS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SPIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX_TIMEDLOCK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_PTHREAD_H_DEFAULTS]) ]) AC_DEFUN([gl_PTHREAD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PTHREAD_T=1; AC_SUBST([HAVE_PTHREAD_T]) HAVE_PTHREAD_SPINLOCK_T=1; AC_SUBST([HAVE_PTHREAD_SPINLOCK_T]) HAVE_PTHREAD_CREATE_DETACHED=1; AC_SUBST([HAVE_PTHREAD_CREATE_DETACHED]) HAVE_PTHREAD_MUTEX_RECURSIVE=1; AC_SUBST([HAVE_PTHREAD_MUTEX_RECURSIVE]) HAVE_PTHREAD_MUTEX_ROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEX_ROBUST]) HAVE_PTHREAD_PROCESS_SHARED=1; AC_SUBST([HAVE_PTHREAD_PROCESS_SHARED]) HAVE_PTHREAD_CREATE=1; AC_SUBST([HAVE_PTHREAD_CREATE]) HAVE_PTHREAD_ATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_ATTR_INIT]) HAVE_PTHREAD_ATTR_GETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_GETDETACHSTATE]) HAVE_PTHREAD_ATTR_SETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_SETDETACHSTATE]) HAVE_PTHREAD_ATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_ATTR_DESTROY]) HAVE_PTHREAD_SELF=1; AC_SUBST([HAVE_PTHREAD_SELF]) HAVE_PTHREAD_EQUAL=1; AC_SUBST([HAVE_PTHREAD_EQUAL]) HAVE_PTHREAD_DETACH=1; AC_SUBST([HAVE_PTHREAD_DETACH]) HAVE_PTHREAD_JOIN=1; AC_SUBST([HAVE_PTHREAD_JOIN]) HAVE_PTHREAD_EXIT=1; AC_SUBST([HAVE_PTHREAD_EXIT]) HAVE_PTHREAD_ONCE=1; AC_SUBST([HAVE_PTHREAD_ONCE]) HAVE_PTHREAD_MUTEX_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEX_INIT]) HAVE_PTHREAD_MUTEXATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_INIT]) HAVE_PTHREAD_MUTEXATTR_GETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETTYPE]) HAVE_PTHREAD_MUTEXATTR_SETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETTYPE]) HAVE_PTHREAD_MUTEXATTR_GETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETROBUST]) HAVE_PTHREAD_MUTEXATTR_SETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETROBUST]) HAVE_PTHREAD_MUTEXATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_DESTROY]) HAVE_PTHREAD_MUTEX_LOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_LOCK]) HAVE_PTHREAD_MUTEX_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TRYLOCK]) HAVE_PTHREAD_MUTEX_TIMEDLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TIMEDLOCK]) HAVE_PTHREAD_MUTEX_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_UNLOCK]) HAVE_PTHREAD_MUTEX_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEX_DESTROY]) HAVE_PTHREAD_RWLOCK_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_INIT]) HAVE_PTHREAD_RWLOCKATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_INIT]) HAVE_PTHREAD_RWLOCKATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_DESTROY]) HAVE_PTHREAD_RWLOCK_RDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_RDLOCK]) HAVE_PTHREAD_RWLOCK_WRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_WRLOCK]) HAVE_PTHREAD_RWLOCK_TRYRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYRDLOCK]) HAVE_PTHREAD_RWLOCK_TRYWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYWRLOCK]) HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK]) HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK]) HAVE_PTHREAD_RWLOCK_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_UNLOCK]) HAVE_PTHREAD_RWLOCK_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_DESTROY]) HAVE_PTHREAD_COND_INIT=1; AC_SUBST([HAVE_PTHREAD_COND_INIT]) HAVE_PTHREAD_CONDATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_INIT]) HAVE_PTHREAD_CONDATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_DESTROY]) HAVE_PTHREAD_COND_WAIT=1; AC_SUBST([HAVE_PTHREAD_COND_WAIT]) HAVE_PTHREAD_COND_TIMEDWAIT=1; AC_SUBST([HAVE_PTHREAD_COND_TIMEDWAIT]) HAVE_PTHREAD_COND_SIGNAL=1; AC_SUBST([HAVE_PTHREAD_COND_SIGNAL]) HAVE_PTHREAD_COND_BROADCAST=1; AC_SUBST([HAVE_PTHREAD_COND_BROADCAST]) HAVE_PTHREAD_COND_DESTROY=1; AC_SUBST([HAVE_PTHREAD_COND_DESTROY]) HAVE_PTHREAD_KEY_CREATE=1; AC_SUBST([HAVE_PTHREAD_KEY_CREATE]) HAVE_PTHREAD_SETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_SETSPECIFIC]) HAVE_PTHREAD_GETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_GETSPECIFIC]) HAVE_PTHREAD_KEY_DELETE=1; AC_SUBST([HAVE_PTHREAD_KEY_DELETE]) HAVE_PTHREAD_SPIN_INIT=1; AC_SUBST([HAVE_PTHREAD_SPIN_INIT]) HAVE_PTHREAD_SPIN_LOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_LOCK]) HAVE_PTHREAD_SPIN_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_TRYLOCK]) HAVE_PTHREAD_SPIN_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_UNLOCK]) HAVE_PTHREAD_SPIN_DESTROY=1; AC_SUBST([HAVE_PTHREAD_SPIN_DESTROY]) REPLACE_PTHREAD_CREATE=0; AC_SUBST([REPLACE_PTHREAD_CREATE]) REPLACE_PTHREAD_ATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_ATTR_INIT]) REPLACE_PTHREAD_ATTR_GETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_GETDETACHSTATE]) REPLACE_PTHREAD_ATTR_SETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_SETDETACHSTATE]) REPLACE_PTHREAD_ATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_ATTR_DESTROY]) REPLACE_PTHREAD_SELF=0; AC_SUBST([REPLACE_PTHREAD_SELF]) REPLACE_PTHREAD_EQUAL=0; AC_SUBST([REPLACE_PTHREAD_EQUAL]) REPLACE_PTHREAD_DETACH=0; AC_SUBST([REPLACE_PTHREAD_DETACH]) REPLACE_PTHREAD_JOIN=0; AC_SUBST([REPLACE_PTHREAD_JOIN]) REPLACE_PTHREAD_EXIT=0; AC_SUBST([REPLACE_PTHREAD_EXIT]) REPLACE_PTHREAD_ONCE=0; AC_SUBST([REPLACE_PTHREAD_ONCE]) REPLACE_PTHREAD_MUTEX_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_INIT]) REPLACE_PTHREAD_MUTEXATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_INIT]) REPLACE_PTHREAD_MUTEXATTR_GETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETTYPE]) REPLACE_PTHREAD_MUTEXATTR_SETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETTYPE]) REPLACE_PTHREAD_MUTEXATTR_GETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETROBUST]) REPLACE_PTHREAD_MUTEXATTR_SETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETROBUST]) REPLACE_PTHREAD_MUTEXATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_DESTROY]) REPLACE_PTHREAD_MUTEX_LOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_LOCK]) REPLACE_PTHREAD_MUTEX_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TRYLOCK]) REPLACE_PTHREAD_MUTEX_TIMEDLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TIMEDLOCK]) REPLACE_PTHREAD_MUTEX_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_UNLOCK]) REPLACE_PTHREAD_MUTEX_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_DESTROY]) REPLACE_PTHREAD_RWLOCK_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_INIT]) REPLACE_PTHREAD_RWLOCKATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_INIT]) REPLACE_PTHREAD_RWLOCKATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_DESTROY]) REPLACE_PTHREAD_RWLOCK_RDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_RDLOCK]) REPLACE_PTHREAD_RWLOCK_WRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_WRLOCK]) REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYRDLOCK]) REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYWRLOCK]) REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK]) REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK]) REPLACE_PTHREAD_RWLOCK_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_UNLOCK]) REPLACE_PTHREAD_RWLOCK_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_DESTROY]) REPLACE_PTHREAD_COND_INIT=0; AC_SUBST([REPLACE_PTHREAD_COND_INIT]) REPLACE_PTHREAD_CONDATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_INIT]) REPLACE_PTHREAD_CONDATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_DESTROY]) REPLACE_PTHREAD_COND_WAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_WAIT]) REPLACE_PTHREAD_COND_TIMEDWAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_TIMEDWAIT]) REPLACE_PTHREAD_COND_SIGNAL=0; AC_SUBST([REPLACE_PTHREAD_COND_SIGNAL]) REPLACE_PTHREAD_COND_BROADCAST=0; AC_SUBST([REPLACE_PTHREAD_COND_BROADCAST]) REPLACE_PTHREAD_COND_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_COND_DESTROY]) REPLACE_PTHREAD_KEY_CREATE=0; AC_SUBST([REPLACE_PTHREAD_KEY_CREATE]) REPLACE_PTHREAD_SETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_SETSPECIFIC]) REPLACE_PTHREAD_GETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_GETSPECIFIC]) REPLACE_PTHREAD_KEY_DELETE=0; AC_SUBST([REPLACE_PTHREAD_KEY_DELETE]) REPLACE_PTHREAD_SPIN_INIT=0; AC_SUBST([REPLACE_PTHREAD_SPIN_INIT]) REPLACE_PTHREAD_SPIN_LOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_LOCK]) REPLACE_PTHREAD_SPIN_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_TRYLOCK]) REPLACE_PTHREAD_SPIN_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_UNLOCK]) REPLACE_PTHREAD_SPIN_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_SPIN_DESTROY]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread_mutex_timedlock.m4�����������������������������������������������0000664�0000000�0000000�00000000751�14110572173�0021770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_mutex_timedlock.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTHREAD_MUTEX_TIMEDLOCK], [ AC_REQUIRE([gl_PTHREAD_H_DEFAULTS]) AC_CHECK_DECL([pthread_mutex_timedlock], , [HAVE_PTHREAD_MUTEX_TIMEDLOCK=0], [[#include <pthread.h>]]) ]) �����������������������gnulib-20210822~d383792/m4/pthread_rwlock_rdlock.m4�������������������������������������������������0000664�0000000�0000000�00000015463�14110572173�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_rwlock_rdlock.m4 serial 4 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2017 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but this test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. dnl Glibc does not provide this guarantee (and never will on Linux), see dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pthread_sigmask.m4�������������������������������������������������������0000664�0000000�0000000�00000022755�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_sigmask.m4 serial 21 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pthread_sigmask]) dnl On MinGW pthread_sigmask is just a macro which always returns 0. dnl It does not exist as a real function, which is required by POSIX. AC_CACHE_CHECK([whether pthread_sigmask is a macro], [gl_cv_func_pthread_sigmask_macro], [AC_EGREP_CPP([headers_define_pthread_sigmask], [ #include <pthread.h> #include <signal.h> #ifdef pthread_sigmask headers_define_pthread_sigmask #endif], [gl_cv_func_pthread_sigmask_macro=yes], [gl_cv_func_pthread_sigmask_macro=no]) ]) LIB_PTHREAD_SIGMASK= if test $gl_cv_func_pthread_sigmask_macro = yes; then dnl pthread_sigmask is a dummy macro. HAVE_PTHREAD_SIGMASK=0 dnl Make sure to '#undef pthread_sigmask' before defining it. REPLACE_PTHREAD_SIGMASK=1 else dnl Test whether the gnulib module 'threadlib' is in use. dnl Some packages like Emacs use --avoid=threadlib. dnl Write the symbol in such a way that it does not cause 'aclocal' to pick dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/. m4_ifdef([gl_][THREADLIB], [ AC_REQUIRE([gl_][THREADLIB]) if test "$gl_threads_api" = posix; then if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask is available without -lpthread. : else if test -n "$LIBMULTITHREAD"; then AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD], [gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> #include <signal.h> ]], [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]]) ], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no]) LIBS="$gl_save_LIBS" ]) if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then dnl pthread_sigmask is available with -pthread or -lpthread. LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD" else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi fi else dnl pthread_sigmask may exist but does not interoperate with the chosen dnl multithreading facility. if test $ac_cv_func_pthread_sigmask = yes; then REPLACE_PTHREAD_SIGMASK=1 else HAVE_PTHREAD_SIGMASK=0 fi fi ], [ dnl The module 'threadlib' is not in use, due to --avoid=threadlib being dnl specified. dnl The package either has prepared CPPFLAGS and LIBS for use of dnl POSIX:2008 threads, or wants to build single-threaded programs. if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask exists and does not require extra libraries. dnl Assume that it is declared. : else dnl pthread_sigmask either does not exist or needs extra libraries. HAVE_PTHREAD_SIGMASK=0 dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask, dnl so as to not accidentally override the system's pthread_sigmask dnl symbol from libpthread. This is necessary on IRIX 6.5. REPLACE_PTHREAD_SIGMASK=1 fi ]) fi AC_SUBST([LIB_PTHREAD_SIGMASK]) dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the dnl same. dnl Now test for some bugs in the system function. if test $HAVE_PTHREAD_SIGMASK = 1; then AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On FreeBSD 13.0, MidnightBSD 1.1, HP-UX 11.31, Solaris 9, in programs dnl that are not linked with -lpthread, the pthread_sigmask() function dnl always returns 0 and has no effect. if test -z "$LIB_PTHREAD_SIGMASK"; then case " $LIBS " in *' -pthread '*) ;; *' -lpthread '*) ;; *) AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread], [gl_cv_func_pthread_sigmask_in_libc_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); return pthread_sigmask (1729, &set, NULL) != 0; }]])], [gl_cv_func_pthread_sigmask_in_libc_works=no], [gl_cv_func_pthread_sigmask_in_libc_works=yes], [ changequote(,)dnl case "$host_os" in freebsd* | midnightbsd* | hpux* | solaris | solaris2.[2-9]*) gl_cv_func_pthread_sigmask_in_libc_works="guessing no";; *) gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_pthread_sigmask_in_libc_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1], [Define to 1 if pthread_sigmask may return 0 and have no effect.]) ;; esac;; esac fi dnl On Cygwin 1.7.5, the pthread_sigmask() has a wrong return value dnl convention: Upon failure, it returns -1 and sets errno. AC_CACHE_CHECK([whether pthread_sigmask returns error numbers], [gl_cv_func_pthread_sigmask_return_works], [ gl_save_LIBS="$LIBS" LIBS="$LIBS $LIB_PTHREAD_SIGMASK" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); if (pthread_sigmask (1729, &set, NULL) == -1) return 1; return 0; }]])], [gl_cv_func_pthread_sigmask_return_works=yes], [gl_cv_func_pthread_sigmask_return_works=no], [case "$host_os" in cygwin*) gl_cv_func_pthread_sigmask_return_works="guessing no";; *) gl_cv_func_pthread_sigmask_return_works="guessing yes";; esac ]) LIBS="$gl_save_LIBS" ]) case "$gl_cv_func_pthread_sigmask_return_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_FAILS_WITH_ERRNO], [1], [Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.]) ;; esac dnl On IRIX 6.5, in a single-threaded program, pending signals are not dnl immediately delivered when they are unblocked through pthread_sigmask, dnl only a little while later. AC_CACHE_CHECK([whether pthread_sigmask unblocks signals correctly], [gl_cv_func_pthread_sigmask_unblock_works], [ case "$host_os" in irix*) gl_cv_func_pthread_sigmask_unblock_works="guessing no";; *) gl_cv_func_pthread_sigmask_unblock_works="guessing yes";; esac m4_ifdef([gl_][THREADLIB], [dnl Link against $LIBMULTITHREAD, not only $LIB_PTHREAD_SIGMASK. dnl Otherwise we get a false positive on those platforms where dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no". gl_save_LIBS=$LIBS LIBS="$LIBS $LIBMULTITHREAD"]) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <pthread.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> ]GL_MDA_DEFINES[ static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main () { sigset_t set; int pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0)) return 1; sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); if (!(system (command) == 0)) return 2; sleep (2); if (!(sigint_occurred == 0)) return 3; if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0)) return 4; if (!(sigint_occurred == 1)) /* This fails on IRIX. */ return 5; return 0; }]])], [:], [gl_cv_func_pthread_sigmask_unblock_works=no], [:]) m4_ifdef([gl_][THREADLIB], [LIBS=$gl_save_LIBS]) ]) case "$gl_cv_func_pthread_sigmask_unblock_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_UNBLOCK_BUG], [1], [Define to 1 if pthread_sigmask() unblocks signals incorrectly.]) ;; esac fi ]) # Prerequisite of lib/pthread_sigmask.c. AC_DEFUN([gl_PREREQ_PTHREAD_SIGMASK], [ if test $HAVE_PTHREAD_SIGMASK = 1; then AC_DEFINE([HAVE_PTHREAD_SIGMASK], [1], [Define to 1 if the pthread_sigmask function can be used (despite bugs).]) fi ]) �������������������gnulib-20210822~d383792/m4/ptsname.m4���������������������������������������������������������������0000664�0000000�0000000�00000003136�14110572173�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ptsname.m4 serial 8 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTSNAME], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdlib.h> to declare ptsname(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([ptsname]) if test $ac_cv_func_ptsname = no; then HAVE_PTSNAME=0 else AC_CACHE_CHECK([whether ptsname sets errno on failure], [gl_cv_func_ptsname_sets_errno], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> ]], [[ return ptsname (-1) || !errno; ]])], [gl_cv_func_ptsname_sets_errno=yes], [gl_cv_func_ptsname_sets_errno=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ptsname_sets_errno="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ptsname_sets_errno="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ptsname_sets_errno="$gl_cross_guess_normal" ;; esac ])]) case $gl_cv_func_ptsname_sets_errno in *no) REPLACE_PTSNAME=1 ;; esac fi ]) # Prerequisites of lib/ptsname.c. AC_DEFUN([gl_PREREQ_PTSNAME], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ptsname_r.m4�������������������������������������������������������������0000664�0000000�0000000�00000010025�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ptsname_r.m4 serial 8 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTSNAME_R], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare ptsname_r(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([ptsname_r]) if test $ac_cv_func_ptsname_r = no; then HAVE_PTSNAME_R=0 else dnl On OSF/1 5.1, the type of the third argument is 'int', not 'size_t', dnl and the declaration is missing if _REENTRANT is not defined. AC_CACHE_CHECK([whether ptsname_r has the same signature as in glibc], [gl_cv_func_ptsname_r_signature_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <stdlib.h> /* Test whether ptsname_r is declared at all. */ int (*f) (int, char *, size_t) = ptsname_r; /* Test whether it has the same declaration as in glibc. */ #undef ptsname_r extern #ifdef __cplusplus "C" #endif int ptsname_r (int, char *, size_t); ]], [[return f (0, NULL, 0);]]) ], [gl_cv_func_ptsname_r_signature_ok=yes], [gl_cv_func_ptsname_r_signature_ok=no]) ]) if test $gl_cv_func_ptsname_r_signature_ok = no; then REPLACE_PTSNAME_R=1 else AC_DEFINE([HAVE_ESSENTIALLY_WORKING_PTSNAME_R], [1], [Define to 1 if ptsname_r() is essentially working.]) dnl On FreeBSD 13.0 and Android 4.3, when ptsname_r fails, it returns -1 dnl instead of the error code. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether ptsname_r returns an error code], [gl_cv_func_ptsname_r_retval_ok], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> int main (void) { char buf[80]; return ptsname_r (-1, buf, sizeof buf) == -1; }]])], [gl_cv_func_ptsname_r_retval_ok=yes], [gl_cv_func_ptsname_r_retval_ok=no], [case "$host_os" in dnl Guess no on FreeBSD, Android. freebsd* | dragonfly* | midnightbsd* | linux*-android*) gl_cv_func_ptsname_r_retval_ok="guessing no" ;; dnl Guess yes otherwise. *) gl_cv_func_ptsname_r_retval_ok="guessing yes" ;; esac ]) ]) case "$gl_cv_func_ptsname_r_retval_ok" in *yes) ;; *) REPLACE_PTSNAME_R=1 ;; esac fi fi AC_REQUIRE([AC_HEADER_MAJOR]) ]) # Prerequisites of lib/ptsname.c. AC_DEFUN([gl_PREREQ_PTSNAME_R], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isatty sets errno when it fails], [gl_cv_func_isatty_sets_errno], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> #else # include <unistd.h> #endif ]GL_MDA_DEFINES], [[errno = 0; isatty (-1); return errno == 0; ]]) ], [gl_cv_func_isatty_sets_errno=yes], [gl_cv_func_isatty_sets_errno=no], [case "$host_os" in irix* | solaris*) gl_cv_func_isatty_sets_errno="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isatty_sets_errno="guessing yes"], [gl_cv_func_isatty_sets_errno="guessing no"]) ;; *) gl_cv_func_isatty_sets_errno="guessing yes" ;; esac ]) ]) case "$gl_cv_func_isatty_sets_errno" in *yes) ;; *) AC_DEFINE([ISATTY_FAILS_WITHOUT_SETTING_ERRNO], [1], [Define to 1 if isatty() may fail without setting errno.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pty.m4�������������������������������������������������������������������0000664�0000000�0000000�00000010063�14110572173�0015675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pty.m4 serial 14 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_PTY_LIB # ---------- # Define automake variable PTY_LIB to the library needed (if any). AC_DEFUN([gl_PTY_LIB], [ # Check for the library required for forkpty. PTY_LIB= save_LIBS="$LIBS" AC_SEARCH_LIBS([forkpty], [util], [if test "$ac_cv_search_forkpty" != "none required"; then PTY_LIB="$ac_cv_search_forkpty" fi]) LIBS="$save_LIBS" AC_SUBST([PTY_LIB]) ]) AC_DEFUN([gl_FUNC_FORKPTY], [ AC_REQUIRE([gl_PTY_LIB]) AC_REQUIRE([gl_PTY_H]) dnl We assume that forkpty exists (possibly in libc, possibly in libutil) dnl if and only if it is declared. AC_CHECK_DECLS([forkpty],,, [[ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ #include <sys/types.h> #if HAVE_PTY_H # include <pty.h> #endif #if HAVE_UTIL_H # include <util.h> #endif #if HAVE_LIBUTIL_H # include <libutil.h> #endif #if HAVE_TERMIOS_H # include <termios.h> #endif ]]) if test $ac_cv_have_decl_forkpty = yes; then dnl The system has forkpty. dnl Prefer glibc's const-safe prototype, if available. AC_CACHE_CHECK([for const-safe forkpty signature], [gl_cv_func_forkpty_const], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ #include <sys/types.h> #if HAVE_PTY_H # include <pty.h> #endif #if HAVE_UTIL_H # include <util.h> #endif #if HAVE_LIBUTIL_H # include <libutil.h> #endif #if HAVE_TERMIOS_H # include <termios.h> #endif ]], [[ int forkpty (int *, char *, struct termios const *, struct winsize const *); ]]) ], [gl_cv_func_forkpty_const=yes], [gl_cv_func_forkpty_const=no]) ]) if test $gl_cv_func_forkpty_const != yes; then REPLACE_FORKPTY=1 fi else dnl The system does not have forkpty. HAVE_FORKPTY=0 fi AC_DEFINE_UNQUOTED([HAVE_FORKPTY], [$HAVE_FORKPTY], [Define to 1 if the system has the 'forkpty' function.]) ]) AC_DEFUN([gl_FUNC_OPENPTY], [ AC_REQUIRE([gl_PTY_LIB]) AC_REQUIRE([gl_PTY_H]) dnl Persuade Solaris <stdlib.h> to declare posix_openpt(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl We assume that openpty exists (possibly in libc, possibly in libutil) dnl if and only if it is declared. AC_CHECK_DECLS([openpty],,, [[ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ #include <sys/types.h> #if HAVE_PTY_H # include <pty.h> #endif #if HAVE_UTIL_H # include <util.h> #endif #if HAVE_LIBUTIL_H # include <libutil.h> #endif #if HAVE_TERMIOS_H # include <termios.h> #endif ]]) if test $ac_cv_have_decl_openpty = yes; then AC_DEFINE([HAVE_OPENPTY], [1], [Define to 1 if the system has the 'openpty' function.]) dnl The system has openpty. dnl Prefer glibc's const-safe prototype, if available. AC_CACHE_CHECK([for const-safe openpty signature], [gl_cv_func_openpty_const], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ #include <sys/types.h> #if HAVE_PTY_H # include <pty.h> #endif #if HAVE_UTIL_H # include <util.h> #endif #if HAVE_LIBUTIL_H # include <libutil.h> #endif #if HAVE_TERMIOS_H # include <termios.h> #endif ]], [[ int openpty (int *, int *, char *, struct termios const *, struct winsize const *); ]]) ], [gl_cv_func_openpty_const=yes], [gl_cv_func_openpty_const=no]) ]) if test $gl_cv_func_openpty_const != yes; then REPLACE_OPENPTY=1 fi else dnl The system does not have openpty. HAVE_OPENPTY=0 dnl Prerequisites of lib/openpty.c in this case. AC_CHECK_FUNCS([_getpty posix_openpt]) fi ]) AC_DEFUN([gl_FUNC_LOGIN_TTY], [ AC_REQUIRE([gl_PTY_LIB]) gl_saved_libs="$LIBS" LIBS="$LIBS $PTY_LIB" AC_CHECK_FUNCS([login_tty]) LIBS="$gl_saved_LIBS" ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/pty_h.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005545�14110572173�0016215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pty_h.m4 serial 14 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_PTY_H # -------- # Set up the GNU-like <pty.h> replacement header. AC_DEFUN_ONCE([gl_PTY_H], [ AC_REQUIRE([gl_PTY_H_DEFAULTS]) # Make sure that pty.h provides forkpty, or setup the replacement. AC_CHECK_HEADERS_ONCE([pty.h]) if test $ac_cv_header_pty_h != yes; then HAVE_PTY_H=0 AC_CHECK_HEADERS([util.h libutil.h]) if test $ac_cv_header_util_h = yes; then HAVE_UTIL_H=1 fi if test $ac_cv_header_libutil_h = yes; then HAVE_LIBUTIL_H=1 fi AC_CHECK_HEADERS_ONCE([termios.h]) else # Have <pty.h>, assume forkpty is declared there. HAVE_PTY_H=1 fi AC_SUBST([HAVE_PTY_H]) dnl <pty.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([pty.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */ #include <sys/types.h> #if HAVE_PTY_H # include <pty.h> #endif #if HAVE_UTIL_H # include <util.h> #endif #if HAVE_LIBUTIL_H # include <libutil.h> #endif #if HAVE_TERMIOS_H # include <termios.h> #endif ]], [forkpty openpty]) ]) # gl_PTY_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_PTY_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_PTY_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_PTY_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_PTY_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FORKPTY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENPTY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_PTY_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_PTY_H_DEFAULTS]) ]) AC_DEFUN([gl_PTY_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_UTIL_H=0; AC_SUBST([HAVE_UTIL_H]) HAVE_LIBUTIL_H=0; AC_SUBST([HAVE_LIBUTIL_H]) HAVE_FORKPTY=1; AC_SUBST([HAVE_FORKPTY]) HAVE_OPENPTY=1; AC_SUBST([HAVE_OPENPTY]) REPLACE_FORKPTY=0; AC_SUBST([REPLACE_FORKPTY]) REPLACE_OPENPTY=0; AC_SUBST([REPLACE_OPENPTY]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/putenv.m4����������������������������������������������������������������0000664�0000000�0000000�00000003757�14110572173�0016416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# putenv.m4 serial 25 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl dnl Check whether putenv ("FOO") removes FOO from the environment. dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that. AC_DEFUN([gl_FUNC_PUTENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for putenv compatible with GNU and SVID], [gl_cv_func_svid_putenv], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT GL_MDA_DEFINES], [[ /* Put it in env. */ if (putenv ("CONFTEST_putenv=val")) return 1; /* Try to remove it. */ if (putenv ("CONFTEST_putenv")) return 2; /* Make sure it was deleted. */ if (getenv ("CONFTEST_putenv") != 0) return 3; return 0; ]])], [gl_cv_func_svid_putenv=yes], [gl_cv_func_svid_putenv=no], [dnl When crosscompiling, assume putenv is broken. case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_svid_putenv="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_svid_putenv="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_svid_putenv" in *yes) ;; *) REPLACE_PUTENV=1 ;; esac ]) # Prerequisites of lib/putenv.c. AC_DEFUN([gl_PREREQ_PUTENV], [ AC_CHECK_DECLS([_putenv]) ]) �����������������gnulib-20210822~d383792/m4/pwrite.m4����������������������������������������������������������������0000664�0000000�0000000�00000005206�14110572173�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pwrite.m4 serial 6 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PWRITE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <unistd.h> to declare pwrite(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([pwrite]) if test $ac_cv_func_pwrite = yes; then dnl On HP-UX 11.11 with _FILE_OFFSET_BITS=64, pwrite() on a file does not dnl fail when an invalid (negative) offset is passed and uses an arbitrary dnl offset instead of the argument. AC_CACHE_CHECK([whether pwrite works], [gl_cv_func_pwrite_works], [ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in # Guess no on HP-UX. hpux*) gl_cv_func_pwrite_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_pwrite_works="guessing yes" ;; esac changequote([,])dnl gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64" rm -f conftest.out AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <unistd.h> #include <fcntl.h> ]GL_MDA_DEFINES], [[ { /* This test fails on HP-UX 11.00..11.11. */ { int fd = open ("conftest.out", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd < 0) return 1; if (pwrite (fd, "b", 1, (off_t) -1) >= 0) return 2; } /* This test fails on HP-UX 11.00..11.11. */ { int fd; char buf[] = "01"; fd = open ("conftest.out", O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) return 3; if (write (fd, buf, 2) < 2) return 4; if (close (fd) < 0) return 5; fd = open ("conftest.out", O_WRONLY, 0600); if (fd < 0) return 6; if (pwrite (fd, "W", 1, (off_t) 0) != 1) return 7; if (close (fd) < 0) return 8; fd = open ("conftest.out", O_RDONLY); if (fd < 0) return 9; if (read (fd, buf, 2) < 2) return 10; if (close (fd) < 0) return 11; if (buf[0] != 'W') return 12; if (buf[1] != '1') return 13; } return 0; }]])], [gl_cv_func_pwrite_works=yes], [gl_cv_func_pwrite_works=no], [:]) rm -f conftest.out CPPFLAGS="$gl_save_CPPFLAGS" ]) case "$gl_cv_func_pwrite_works" in *yes) ;; *) REPLACE_PWRITE=1 ;; esac else HAVE_PWRITE=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/qsort_r.m4���������������������������������������������������������������0000664�0000000�0000000�00000004147�14110572173�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant sort function. dnl Copyright 2014-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_FUNC_QSORT_R], [ dnl Persuade glibc to declare qsort_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([qsort_r]) if test $ac_cv_func_qsort_r = yes; then AC_CACHE_CHECK([for qsort_r signature], [gl_cv_qsort_r_signature], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <stdlib.h> void qsort_r (void *, size_t, size_t, int (*) (void const *, void const *, void *), void *); void (*p) (void *, size_t, size_t, int (*) (void const *, void const *, void *), void *) = qsort_r; ]])], [gl_cv_qsort_r_signature=GNU], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <stdlib.h> void qsort_r (void *, size_t, size_t, void *, int (*) (void *, void const *, void const *)); void (*p) (void *, size_t, size_t, void *, int (*) (void *, void const *, void const *)) = qsort_r; ]])], [gl_cv_qsort_r_signature=BSD], [gl_cv_qsort_r_signature=unknown])])]) case $gl_cv_qsort_r_signature in GNU) ;; BSD) REPLACE_QSORT_R=1 ;; unknown) HAVE_QSORT_R=0 REPLACE_QSORT_R=1 ;; esac else HAVE_QSORT_R=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/quote.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0016223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quote.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_QUOTE], [ dnl Prerequisites of lib/quote.c. dnl (none) : ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/quotearg.m4��������������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quotearg.m4 serial 10 dnl Copyright (C) 2002, 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_QUOTEARG], [ AC_REQUIRE([AC_C_RESTRICT]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/raise.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001771�14110572173�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# raise.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAISE], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([raise]) if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi ]) m4_ifdef([gl_SIGNALBLOCKING], [ gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_RAISE=1 fi ], [:]) fi ]) fi ]) # Prerequisites of lib/raise.c. AC_DEFUN([gl_PREREQ_RAISE], [:]) �������gnulib-20210822~d383792/m4/random.m4����������������������������������������������������������������0000664�0000000�0000000�00000003270�14110572173�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# random.m4 serial 4 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RANDOM], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl We can't use AC_CHECK_FUNC here, because random() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for random], [gl_cv_func_random], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[return random() == 0;]]) ], [gl_cv_func_random=yes], [gl_cv_func_random=no]) ]) if test $gl_cv_func_random = no; then HAVE_RANDOM=0 HAVE_INITSTATE=0 HAVE_SETSTATE=0 else AC_CHECK_FUNCS([initstate setstate]) if test $ac_cv_func_initstate = no; then HAVE_INITSTATE=0 fi if test $ac_cv_func_setstate = no; then HAVE_SETSTATE=0 fi if test $ac_cv_func_initstate = no || test $ac_cv_func_setstate = no; then dnl In order to define initstate or setstate, we need to define all the dnl functions at once. REPLACE_RANDOM=1 if test $ac_cv_func_initstate = yes; then REPLACE_INITSTATE=1 fi if test $ac_cv_func_setstate = yes; then REPLACE_SETSTATE=1 fi fi fi AC_CHECK_DECLS_ONCE([initstate]) if test $ac_cv_have_decl_initstate = no; then HAVE_DECL_INITSTATE=0 fi AC_CHECK_DECLS_ONCE([setstate]) if test $ac_cv_have_decl_setstate = no; then HAVE_DECL_SETSTATE=0 fi ]) # Prerequisites of lib/random.c. AC_DEFUN([gl_PREREQ_RANDOM], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/random_r.m4��������������������������������������������������������������0000664�0000000�0000000�00000002052�14110572173�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RANDOM_R], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) if test $ac_cv_header_random_h = no; then HAVE_RANDOM_H=0 fi AC_CHECK_TYPES([struct random_data], [], [HAVE_STRUCT_RANDOM_DATA=0], [[#include <stdlib.h> #if HAVE_RANDOM_H # include <random.h> #endif ]]) dnl On AIX and OSF/1, these functions exist, but with different declarations. dnl Override them all. case "$host_os" in aix* | osf*) REPLACE_RANDOM_R=1 ;; *) AC_CHECK_FUNCS([random_r]) if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ;; esac ]) # Prerequisites of lib/random_r.c. AC_DEFUN([gl_PREREQ_RANDOM_R], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/rawmemchr.m4�������������������������������������������������������������0000664�0000000�0000000�00000001163�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rawmemchr.m4 serial 3 dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAWMEMCHR], [ dnl Persuade glibc <string.h> to declare rawmemchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([rawmemchr]) if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/read-file.m4�������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read-file.m4 serial 3 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/read-file.c. AC_DEFUN([gl_PREREQ_READ_FILE], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/read.m4������������������������������������������������������������������0000664�0000000�0000000�00000001610�14110572173�0015772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READ], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_READ=1 fi ]) dnl This ifdef is just an optimization, to avoid performing a configure dnl check whose result is not used. It does not make the test of dnl GNULIB_UNISTD_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_READ=1 fi ]) ]) # Prerequisites of lib/read.c. AC_DEFUN([gl_PREREQ_READ], [:]) ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/readdir.m4���������������������������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readdir.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_CHECK_FUNCS([readdir]) if test $ac_cv_func_readdir = no; then HAVE_READDIR=0 fi ]) ������������������������������������������������������������������������gnulib-20210822~d383792/m4/readline.m4��������������������������������������������������������������0000664�0000000�0000000�00000005330�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readline.m4 serial 10 dnl Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, with help from Bruno Haible and Oskar dnl Liljeblad. AC_DEFUN([gl_FUNC_READLINE], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libreadline and define LIBREADLINE, LTLIBREADLINE and dnl INCREADLINE accordingly. AC_LIB_LINKFLAGS_BODY([readline]) dnl Add $INCREADLINE to CPPFLAGS before performing the following checks, dnl because if the user has installed libreadline and not disabled its use dnl via --without-libreadline-prefix, he wants to use it. The AC_LINK_IFELSE dnl will then succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCREADLINE]) AC_CACHE_CHECK([for readline], [gl_cv_lib_readline], [ gl_cv_lib_readline=no am_save_LIBS="$LIBS" dnl On some systems, -lreadline doesn't link without an additional dnl -lncurses or -ltermcap. dnl Try -lncurses before -ltermcap, because libtermcap is insecure dnl by design and obsolete since 1994. Try -lcurses last, because dnl libcurses is unusable on some old Unices. for extra_lib in "" ncurses termcap curses; do LIBS="$am_save_LIBS $LIBREADLINE" if test -n "$extra_lib"; then LIBS="$LIBS -l$extra_lib" fi AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> #include <readline/readline.h>]], [[readline((char*)0);]])], [if test -n "$extra_lib"; then gl_cv_lib_readline="yes, requires -l$extra_lib" else gl_cv_lib_readline="yes" fi ]) if test "$gl_cv_lib_readline" != no; then break fi done LIBS="$am_save_LIBS" ]) if test "$gl_cv_lib_readline" != no; then AC_DEFINE([HAVE_READLINE], [1], [Define if you have the readline library.]) extra_lib=`echo "$gl_cv_lib_readline" | sed -n -e 's/yes, requires //p'` if test -n "$extra_lib"; then LIBREADLINE="$LIBREADLINE $extra_lib" LTLIBREADLINE="$LTLIBREADLINE $extra_lib" fi AC_MSG_CHECKING([how to link with libreadline]) AC_MSG_RESULT([$LIBREADLINE]) else dnl If $LIBREADLINE didn't lead to a usable library, we don't dnl need $INCREADLINE either. CPPFLAGS="$am_save_CPPFLAGS" LIBREADLINE= LTLIBREADLINE= fi AC_SUBST([LIBREADLINE]) AC_SUBST([LTLIBREADLINE]) AC_CHECK_HEADERS([readline/readline.h readline/history.h]) ]) # Prerequisites of lib/readline.c. AC_DEFUN([gl_PREREQ_READLINE], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/readlink.m4��������������������������������������������������������������0000664�0000000�0000000�00000007731�14110572173�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readlink.m4 serial 16 dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([readlink]) if test $ac_cv_func_readlink = no; then HAVE_READLINK=0 else AC_CACHE_CHECK([whether readlink signature is correct], [gl_cv_decl_readlink_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> /* Cause compilation failure if original declaration has wrong type. */ ssize_t readlink (const char *, char *, size_t);]])], [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])]) dnl Solaris 9 ignores trailing slash. dnl FreeBSD 7.2 dereferences only one level of links with trailing slash. AC_CACHE_CHECK([whether readlink handles trailing slash correctly], [gl_cv_func_readlink_trailing_slash], [# We have readlink, so assume ln -s works. ln -s conftest.no-such conftest.link ln -s conftest.link conftest.lnk2 AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[char buf[20]; return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])], [gl_cv_func_readlink_trailing_slash=yes], [gl_cv_func_readlink_trailing_slash=no], [case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_trailing_slash="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_trailing_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.lnk2]) case "$gl_cv_func_readlink_trailing_slash" in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink fails to recognize a trailing slash.]) REPLACE_READLINK=1 ;; esac AC_CACHE_CHECK([whether readlink truncates results correctly], [gl_cv_func_readlink_truncate], [# We have readlink, so assume ln -s works. ln -s ab conftest.link AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[char c; return readlink ("conftest.link", &c, 1) != 1;]])], [gl_cv_func_readlink_truncate=yes], [gl_cv_func_readlink_truncate=no], [case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_truncate="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_truncate="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.lnk2]) case $gl_cv_func_readlink_truncate in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) AC_DEFINE([READLINK_TRUNCATE_BUG], [1], [Define to 1 if readlink sets errno instead of truncating a too-long link.]) REPLACE_READLINK=1 ;; esac fi ]) # Like gl_FUNC_READLINK, except prepare for separate compilation # (no REPLACE_READLINK, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_READLINK_SEPARATE], [ AC_CHECK_FUNCS_ONCE([readlink]) gl_PREREQ_READLINK ]) # Prerequisites of lib/readlink.c. AC_DEFUN([gl_PREREQ_READLINK], [ : ]) ���������������������������������������gnulib-20210822~d383792/m4/readlinkat.m4������������������������������������������������������������0000664�0000000�0000000�00000002471�14110572173�0017203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # See if we need to provide readlinkat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_READLINKAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([readlinkat]) AC_REQUIRE([gl_FUNC_READLINK]) if test $ac_cv_func_readlinkat = no; then HAVE_READLINKAT=0 else AC_CACHE_CHECK([whether readlinkat signature is correct], [gl_cv_decl_readlinkat_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> /* Check whether original declaration has correct type. */ ssize_t readlinkat (int, char const *, char *, size_t);]])], [gl_cv_decl_readlinkat_works=yes], [gl_cv_decl_readlinkat_works=no])]) # Assume readlinkat has the same bugs as readlink, # as is the case on OS X 10.10 with trailing slashes. case $gl_cv_decl_readlinkat_works,$gl_cv_func_readlink_trailing_slash,$gl_cv_func_readlink_truncate in *yes,*yes,*yes) ;; *) REPLACE_READLINKAT=1 ;; esac fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/readtokens.m4������������������������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0017225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readtokens.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/readtokens.c. AC_DEFUN([gl_READTOKENS], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/readutmp.m4��������������������������������������������������������������0000664�0000000�0000000�00000005003�14110572173�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readutmp.m4 serial 20 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_READUTMP], [ dnl Persuade utmpx.h to declare utmpxname AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([utmp.h utmpx.h]) if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then dnl Prerequisites of lib/readutmp.h and lib/readutmp.c. AC_CHECK_FUNCS_ONCE([utmpname utmpxname]) AC_CHECK_DECLS([getutent],,,[[ /* <sys/types.h> is a prerequisite of <utmp.h> on FreeBSD 8.0, OpenBSD 4.6. */ #include <sys/types.h> #ifdef HAVE_UTMP_H # include <utmp.h> #endif ]]) utmp_includes="\ AC_INCLUDES_DEFAULT #ifdef HAVE_UTMPX_H # include <utmpx.h> #endif #ifdef HAVE_UTMP_H # if defined _THREAD_SAFE && defined UTMP_DATA_INIT /* When including both utmp.h and utmpx.h on AIX 4.3, with _THREAD_SAFE defined, work around the duplicate struct utmp_data declaration. */ # define utmp_data gl_aix_4_3_workaround_utmp_data # endif # include <utmp.h> #endif " AC_CHECK_MEMBERS([struct utmpx.ut_user],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_user],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_name],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_name],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_type],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_type],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_pid],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_pid],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_id],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_id],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_exit.ut_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_exit.e_exit],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_termination],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_exit.ut_termination],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_termination],,,[$utmp_includes]) AC_CHECK_MEMBERS([struct utmp.ut_exit.e_termination],,,[$utmp_includes]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/realloc.m4���������������������������������������������������������������0000664�0000000�0000000�00000004232�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# realloc.m4 serial 24 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455 AC_DEFUN([_AC_FUNC_REALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull], [ac_cv_func_realloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = realloc (0, 0); int result = !p; free (p); return result;]]) ], [ac_cv_func_realloc_0_nonnull=yes], [ac_cv_func_realloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2]) ])# AC_FUNC_REALLOC # gl_FUNC_REALLOC_GNU # ------------------- # Replace realloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_REALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_REALLOC_POSIX]) if test $REPLACE_REALLOC = 0; then _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC=1]) fi ])# gl_FUNC_REALLOC_GNU # gl_FUNC_REALLOC_POSIX # --------------------- # Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), # and replace realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC = 1; then REPLACE_REALLOC=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/reallocarray.m4����������������������������������������������������������0000664�0000000�0000000�00000001367�14110572173�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# reallocarray.m4 serial 3 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REALLOCARRAY], [ dnl Persuade glibc <stdlib.h> to declare reallocarray. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) AC_CHECK_FUNCS([reallocarray]) if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi ]) # Prerequisites of lib/reallocarray.c. AC_DEFUN([gl_PREREQ_REALLOCARRAY], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/regex.m4�����������������������������������������������������������������0000664�0000000�0000000�00000035750�14110572173�0016205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 73 # Copyright (C) 1996-2001, 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Initially derived from code in GNU grep. dnl Mostly written by Jim Meyering. AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_ARG_WITH([included-regex], [AS_HELP_STRING([--without-included-regex], [don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).])]) case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_HEADERS_ONCE([malloc.h]) AC_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif ]], [[int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ]])], [gl_cv_func_re_compile_pattern_working=yes], [gl_cv_func_re_compile_pattern_working=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) ;; esac if test $ac_use_included_regex = yes; then AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], [Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX.]) AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], [Define to rpl_re_set_syntax if the replacement should be used.]) AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], [Define to rpl_re_compile_pattern if the replacement should be used.]) AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], [Define to rpl_re_compile_fastmap if the replacement should be used.]) AC_DEFINE([re_search], [rpl_re_search], [Define to rpl_re_search if the replacement should be used.]) AC_DEFINE([re_search_2], [rpl_re_search_2], [Define to rpl_re_search_2 if the replacement should be used.]) AC_DEFINE([re_match], [rpl_re_match], [Define to rpl_re_match if the replacement should be used.]) AC_DEFINE([re_match_2], [rpl_re_match_2], [Define to rpl_re_match_2 if the replacement should be used.]) AC_DEFINE([re_set_registers], [rpl_re_set_registers], [Define to rpl_re_set_registers if the replacement should be used.]) AC_DEFINE([re_comp], [rpl_re_comp], [Define to rpl_re_comp if the replacement should be used.]) AC_DEFINE([re_exec], [rpl_re_exec], [Define to rpl_re_exec if the replacement should be used.]) AC_DEFINE([regcomp], [rpl_regcomp], [Define to rpl_regcomp if the replacement should be used.]) AC_DEFINE([regexec], [rpl_regexec], [Define to rpl_regexec if the replacement should be used.]) AC_DEFINE([regerror], [rpl_regerror], [Define to rpl_regerror if the replacement should be used.]) AC_DEFINE([regfree], [rpl_regfree], [Define to rpl_regfree if the replacement should be used.]) fi ]) # Prerequisites of lib/regex.c and lib/regex_internal.c. AC_DEFUN([gl_PREREQ_REGEX], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_EEMALLOC]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) ]) ������������������������gnulib-20210822~d383792/m4/relocatable-lib.m4�������������������������������������������������������0000664�0000000�0000000�00000002744�14110572173�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# relocatable-lib.m4 serial 6 dnl Copyright (C) 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Support for relocatable libraries. AC_DEFUN([gl_RELOCATABLE_LIBRARY], [ AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) ]) AC_DEFUN([gl_RELOCATABLE_LIBRARY_BODY], [ AC_REQUIRE([gl_RELOCATABLE_NOP]) dnl Easier to put this here once, instead of into the DEFS of each Makefile. if test "X$prefix" = "XNONE"; then reloc_final_prefix="$ac_default_prefix" else reloc_final_prefix="$prefix" fi AC_DEFINE_UNQUOTED([INSTALLPREFIX], ["${reloc_final_prefix}"], [Define to the value of ${prefix}, as a string.]) if test $RELOCATABLE = yes; then AC_DEFINE([ENABLE_RELOCATABLE], [1], [Define to 1 if the package shall run at any location in the file system.]) fi ]) dnl Support for relocatable packages for which it is a nop. AC_DEFUN([gl_RELOCATABLE_NOP], [ AC_MSG_CHECKING([whether to activate relocatable installation]) AC_ARG_ENABLE([relocatable], [AS_HELP_STRING([--enable-relocatable], [install a package that can be moved in the file system])], [if test "$enableval" != no; then RELOCATABLE=yes else RELOCATABLE=no fi ], RELOCATABLE=no) AC_SUBST([RELOCATABLE]) AC_MSG_RESULT([$RELOCATABLE]) ]) ����������������������������gnulib-20210822~d383792/m4/relocatable.m4�����������������������������������������������������������0000664�0000000�0000000�00000015554�14110572173�0017350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# relocatable.m4 serial 24 dnl Copyright (C) 2003, 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl gl_RELOCATABLE([RELOCWRAPPER-DIR]) dnl ---------------------------------------------------------- dnl Support for relocatable programs. dnl Supply RELOCWRAPPER-DIR as the directory where relocwrapper.c may be found. AC_DEFUN([gl_RELOCATABLE], [ AC_REQUIRE([gl_RELOCATABLE_BODY]) gl_RELOCATABLE_LIBRARY : ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'} RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base" RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base" ]) dnl The guts of gl_RELOCATABLE. Needs to be expanded only once. AC_DEFUN([gl_RELOCATABLE_BODY], [ AC_REQUIRE([AC_PROG_INSTALL]) dnl This AC_BEFORE invocation leads to unjustified autoconf warnings dnl when gl_RELOCATABLE_BODY is invoked more than once. dnl dnl We need this AC_BEFORE because AC_PROG_INSTALL is documented to dnl overwrite earlier settings of INSTALL and INSTALL_PROGRAM (even dnl though in autoconf-2.52..2.60 it doesn't do so), but we want this dnl macro's setting of INSTALL_PROGRAM to persist. dnl Arghh: AC_BEFORE does not work in this setting :-( dnl AC_BEFORE([AC_PROG_INSTALL],[gl_RELOCATABLE_BODY]) dnl dnl LT_INIT sets LIBTOOL, but we want this macro's setting of LIBTOOL to dnl persist. dnl Arghh: AC_BEFORE does not work in this setting :-( dnl AC_BEFORE([LT_INIT],[gl_RELOCATABLE_BODY]) AC_REQUIRE([AC_LIB_LIBPATH]) AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) AC_REQUIRE([AC_CANONICAL_HOST]) is_noop=no use_elf_origin_trick=no use_macos_tools=no use_wrapper=no if test $RELOCATABLE = yes; then # --enable-relocatable implies --disable-rpath enable_rpath=no AC_CHECK_HEADERS([mach-o/dyld.h]) AC_CHECK_FUNCS([_NSGetExecutablePath]) case "$host_os" in mingw*) is_noop=yes ;; # For the platforms that support $ORIGIN, see # <https://lekensteyn.nl/rpath.html>. # glibc systems, Linux with musl libc: yes. Android: no. linux*-android*) ;; linux* | kfreebsd*) use_elf_origin_trick=yes ;; # Hurd: <https://lists.gnu.org/r/bug-hurd/2019-02/msg00049.html> # only after the glibc commit from 2018-01-08 # <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=311ba8dc4416467947eff2ab327854f124226309> gnu*) # Test for a glibc version >= 2.27. AC_CHECK_FUNCS([copy_file_range]) if test $ac_cv_func_copy_file_range = yes; then use_elf_origin_trick=yes fi ;; changequote(,)dnl # FreeBSD >= 7.3, DragonFly >= 3.0, MidnightBSD >= 1.1: yes. freebsd | freebsd[1-7] | freebsd[1-6].* | freebsd7.[0-2]) ;; dragonfly | dragonfly[1-2] | dragonfly[1-2].*) ;; midnightbsd | midnightbsd0* | midnightbsd1.0*) ;; freebsd* | dragonfly* | midnightbsd*) use_elf_origin_trick=yes ;; # NetBSD >= 8.0: yes. netbsd | netbsd[1-7] | netbsd[1-7].*) ;; netbsdelf | netbsdelf[1-7] | netbsdelf[1-7].*) ;; netbsd*) use_elf_origin_trick=yes ;; # OpenBSD >= 5.4: yes. openbsd | openbsd[1-5] | openbsd[1-4].* | openbsd5.[0-3]) ;; openbsd*) use_elf_origin_trick=yes ;; # Solaris >= 10: yes. solaris | solaris2.[1-9] | solaris2.[1-9].*) ;; solaris*) use_elf_origin_trick=yes ;; # Haiku: yes. haiku*) use_elf_origin_trick=yes ;; # On Mac OS X 10.4 or newer, use Mac OS X tools. See # <https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath>. darwin | darwin[1-7].*) ;; darwin*) use_macos_tools=yes ;; changequote([,])dnl esac if test $is_noop = yes; then RELOCATABLE_LDFLAGS=: AC_SUBST([RELOCATABLE_LDFLAGS]) else if test $use_elf_origin_trick = yes || test $use_macos_tools = yes; then dnl Use the dynamic linker's support for relocatable programs. case "$ac_aux_dir" in /*) reloc_ldflags="$ac_aux_dir/reloc-ldflags" ;; *) reloc_ldflags="\$(top_builddir)/$ac_aux_dir/reloc-ldflags" ;; esac RELOCATABLE_LDFLAGS="\"$reloc_ldflags\" \"\$(host)\" \"\$(RELOCATABLE_LIBRARY_PATH)\"" AC_SUBST([RELOCATABLE_LDFLAGS]) if test $use_macos_tools = yes; then dnl Use a libtool wrapper that uses Mac OS X tools. case "$ac_aux_dir" in /*) LIBTOOL="${CONFIG_SHELL-$SHELL} $ac_aux_dir/libtool-reloc $LIBTOOL" ;; *) LIBTOOL="${CONFIG_SHELL-$SHELL} \$(top_builddir)/$ac_aux_dir/libtool-reloc $LIBTOOL" ;; esac fi else use_wrapper=yes dnl Unfortunately we cannot define INSTALL_PROGRAM to a command dnl consisting of more than one word - libtool doesn't support this. dnl So we abuse the INSTALL_PROGRAM_ENV hook, originally meant for the dnl 'install-strip' target. INSTALL_PROGRAM_ENV="RELOC_LIBRARY_PATH_VAR=\"$shlibpath_var\" RELOC_LIBRARY_PATH_VALUE=\"\$(RELOCATABLE_LIBRARY_PATH)\" RELOC_PREFIX=\"\$(prefix)\" RELOC_DESTDIR=\"\$(DESTDIR)\" RELOC_COMPILE_COMMAND=\"\$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(LDFLAGS)\" RELOC_SRCDIR=\"\$(RELOCATABLE_SRC_DIR)\" RELOC_BUILDDIR=\"\$(RELOCATABLE_BUILD_DIR)\" RELOC_CONFIG_H_DIR=\"\$(RELOCATABLE_CONFIG_H_DIR)\" RELOC_EXEEXT=\"\$(EXEEXT)\" RELOC_STRIP_PROG=\"\$(RELOCATABLE_STRIP)\" RELOC_INSTALL_PROG=\"$INSTALL_PROGRAM\"" AC_SUBST([INSTALL_PROGRAM_ENV]) case "$ac_aux_dir" in /*) INSTALL_PROGRAM="$ac_aux_dir/install-reloc" ;; *) INSTALL_PROGRAM="\$(top_builddir)/$ac_aux_dir/install-reloc" ;; esac fi fi fi AM_CONDITIONAL([RELOCATABLE_VIA_LD], [test $is_noop = yes || test $use_elf_origin_trick = yes || test $use_macos_tools = yes]) AM_CONDITIONAL([RELOCATABLE_VIA_WRAPPER], [test $use_wrapper = yes]) dnl RELOCATABLE_LIBRARY_PATH can be set in configure.ac. Default is empty. AC_SUBST([RELOCATABLE_LIBRARY_PATH]) AC_SUBST([RELOCATABLE_CONFIG_H_DIR]) AC_SUBST([RELOCATABLE_SRC_DIR]) AC_SUBST([RELOCATABLE_BUILD_DIR]) dnl Ensure RELOCATABLE_STRIP is defined in Makefiles (at least those dnl generated by automake), with value ':'. RELOCATABLE_STRIP=':' AC_SUBST([RELOCATABLE_STRIP]) ]) dnl Determine the platform dependent parameters needed to use relocatability: dnl shlibpath_var. AC_DEFUN([AC_LIB_LIBPATH], [ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library path variable], [acl_cv_libpath], [ LD="$LD" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.libpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_libpath=${acl_cv_shlibpath_var:-none} ]) shlibpath_var="$acl_cv_shlibpath_var" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainder-ieee.m4��������������������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0017736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainder-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_REMAINDER can test whether 'aclocal' dnl has found uses of this macro. AC_DEFUN([gl_FUNC_REMAINDER_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_remainder_required=ieee]) AC_REQUIRE([gl_FUNC_REMAINDER]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainder.m4�������������������������������������������������������������0000664�0000000�0000000�00000011404�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainder.m4 serial 9 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REMAINDER], [ m4_divert_text([DEFAULTS], [gl_remainder_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Test whether remainder() is declared. On IRIX 5.3 it is not declared. AC_CHECK_DECL([remainder], , [HAVE_DECL_REMAINDER=0], [[#include <math.h>]]) REMAINDER_LIBM= AC_CACHE_CHECK([whether remainder() can be used without linking with libm], [gl_cv_func_remainder_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double x; double y;]], [[return remainder (x, y) > 1;]])], [gl_cv_func_remainder_no_libm=yes], [gl_cv_func_remainder_no_libm=no]) ]) if test $gl_cv_func_remainder_no_libm = no; then AC_CACHE_CHECK([whether remainder() can be used with libm], [gl_cv_func_remainder_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double x; double y;]], [[return remainder (x, y) > 1;]])], [gl_cv_func_remainder_in_libm=yes], [gl_cv_func_remainder_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_remainder_in_libm = yes; then REMAINDER_LIBM=-lm fi fi if test $gl_cv_func_remainder_no_libm = yes \ || test $gl_cv_func_remainder_in_libm = yes; then : m4_ifdef([gl_FUNC_REMAINDER_IEEE], [ if test $gl_remainder_required = ieee && test $REPLACE_REMAINDER = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether remainder works according to ISO C 99 with IEC 60559], [gl_cv_func_remainder_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $REMAINDER_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } static double dummy (double x, double y) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_remainder) (double, double) = argc ? remainder : dummy; double f; /* Test remainder(...,0.0). This test fails on OSF/1 5.1. */ f = my_remainder (2.0, 0.0); if (numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_remainder_ieee=yes], [gl_cv_func_remainder_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_remainder_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_remainder_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_remainder_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_remainder_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_remainder_ieee" in *yes) ;; *) REPLACE_REMAINDER=1 ;; esac fi ]) else HAVE_REMAINDER=0 fi if test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1; then dnl Find libraries needed to link lib/remainder.c. AC_REQUIRE([gl_FUNC_FABS]) AC_REQUIRE([gl_FUNC_FMOD]) AC_REQUIRE([gl_FUNC_ISNAND]) REMAINDER_LIBM= dnl Append $FABS_LIBM to REMAINDER_LIBM, avoiding gratuitous duplicates. case " $REMAINDER_LIBM " in *" $FABS_LIBM "*) ;; *) REMAINDER_LIBM="$REMAINDER_LIBM $FABS_LIBM" ;; esac dnl Append $FMOD_LIBM to REMAINDER_LIBM, avoiding gratuitous duplicates. case " $REMAINDER_LIBM " in *" $FMOD_LIBM "*) ;; *) REMAINDER_LIBM="$REMAINDER_LIBM $FMOD_LIBM" ;; esac dnl Append $ISNAND_LIBM to REMAINDER_LIBM, avoiding gratuitous duplicates. case " $REMAINDER_LIBM " in *" $ISNAND_LIBM "*) ;; *) REMAINDER_LIBM="$REMAINDER_LIBM $ISNAND_LIBM" ;; esac fi AC_SUBST([REMAINDER_LIBM]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainderf-ieee.m4�������������������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainderf-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainder.m4 and not inlined in the dnl module description), so that gl_FUNC_REMAINDERF can test whether 'aclocal' dnl has found uses of this macro. AC_DEFUN([gl_FUNC_REMAINDERF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_remainderf_required=ieee]) AC_REQUIRE([gl_FUNC_REMAINDERF]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainderf.m4������������������������������������������������������������0000664�0000000�0000000�00000014147�14110572173�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainderf.m4 serial 13 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REMAINDERF], [ m4_divert_text([DEFAULTS], [gl_remainderf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_REMAINDER]) dnl Persuade glibc <math.h> to declare remainderf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether remainderf() exists. Assume that remainderf(), if it exists, is dnl defined in the same library as remainder(). save_LIBS="$LIBS" LIBS="$LIBS $REMAINDER_LIBM" AC_CACHE_CHECK([for remainderf], [gl_cv_func_remainderf], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif float remainderf (float, float); float (*funcptr) (float, float) = remainderf; float x; float y;]], [[return funcptr (x, y) > 1 || remainderf (x, y) > 1;]])], [gl_cv_func_remainderf=yes], [gl_cv_func_remainderf=no]) ]) LIBS="$save_LIBS" if test $gl_cv_func_remainderf = yes; then REMAINDERF_LIBM="$REMAINDER_LIBM" save_LIBS="$LIBS" LIBS="$LIBS $REMAINDERF_LIBM" gl_FUNC_REMAINDERF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_remainderf_works" in *yes) ;; *) REPLACE_REMAINDERF=1 ;; esac m4_ifdef([gl_FUNC_REMAINDERF_IEEE], [ if test $gl_remainderf_required = ieee && test $REPLACE_REMAINDERF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether remainderf works according to ISO C 99 with IEC 60559], [gl_cv_func_remainderf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $REMAINDERF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif float remainderf (float, float); /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (float x, float y) { return x == y; } static float dummy (float x, float y) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_remainderf) (float, float) = argc ? remainderf : dummy; float f; /* Test remainderf(...,0.0f). This test fails on OSF/1 5.1. */ f = my_remainderf (2.0f, 0.0f); if (numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_remainderf_ieee=yes], [gl_cv_func_remainderf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_remainderf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_remainderf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_remainderf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_remainderf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_remainderf_ieee" in *yes) ;; *) REPLACE_REMAINDERF=1 ;; esac fi ]) else HAVE_REMAINDERF=0 fi if test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1; then dnl Find libraries needed to link lib/remainderf.c. if test $gl_cv_func_remainder_no_libm = yes \ || test $gl_cv_func_remainder_in_libm = yes; then AC_DEFINE([HAVE_REMAINDER], [1], [Define to 1 if the remainder() function is available in libc or libm.]) REMAINDERF_LIBM="$REMAINDER_LIBM" else AC_REQUIRE([gl_FUNC_FABSF]) AC_REQUIRE([gl_FUNC_FMODF]) AC_REQUIRE([gl_FUNC_ISNANF]) REMAINDERF_LIBM= dnl Append $FABSF_LIBM to REMAINDERF_LIBM, avoiding gratuitous duplicates. case " $REMAINDERF_LIBM " in *" $FABSF_LIBM "*) ;; *) REMAINDERF_LIBM="$REMAINDERF_LIBM $FABSF_LIBM" ;; esac dnl Append $FMODF_LIBM to REMAINDERF_LIBM, avoiding gratuitous duplicates. case " $REMAINDERF_LIBM " in *" $FMODF_LIBM "*) ;; *) REMAINDERF_LIBM="$REMAINDERF_LIBM $FMODF_LIBM" ;; esac dnl Append $ISNANF_LIBM to REMAINDERF_LIBM, avoiding gratuitous duplicates. case " $REMAINDERF_LIBM " in *" $ISNANF_LIBM "*) ;; *) REMAINDERF_LIBM="$REMAINDERF_LIBM $ISNANF_LIBM" ;; esac fi fi AC_SUBST([REMAINDERF_LIBM]) ]) dnl Test whether remainderf() works. dnl It runs into an endless loop on IRIX 6.5. AC_DEFUN([gl_FUNC_REMAINDERF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([alarm]) AC_CACHE_CHECK([whether remainderf works], [gl_cv_func_remainderf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif extern #ifdef __cplusplus "C" #endif float remainderf (float, float); volatile float x; volatile float y; float z; int main () { #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (5); #endif /* This test fails on IRIX 6.5. */ x = 9.316161e+37f; y = 0.5475547314f; z = remainderf (x, y); return 0; } ]])], [gl_cv_func_remainderf_works=yes], [gl_cv_func_remainderf_works=no], [case "$host_os" in irix*) gl_cv_func_remainderf_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_remainderf_works="guessing yes" ;; *) gl_cv_func_remainderf_works="guessing yes" ;; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainderl-ieee.m4�������������������������������������������������������0000664�0000000�0000000�00000001153�14110572173�0020110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainderl-ieee.m4 serial 1 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in remainderl.m4 and not inlined in the dnl module description), so that gl_FUNC_REMAINDER can test whether 'aclocal' dnl has found uses of this macro. AC_DEFUN([gl_FUNC_REMAINDERL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_remainderl_required=ieee]) AC_REQUIRE([gl_FUNC_REMAINDERL]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remainderl.m4������������������������������������������������������������0000664�0000000�0000000�00000021222�14110572173�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remainderl.m4 serial 13 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REMAINDERL], [ m4_divert_text([DEFAULTS], [gl_remainderl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_REMAINDER]) dnl Persuade glibc <math.h> to declare remainderl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether remainderl() exists. Assume that remainderl(), if it exists, is dnl defined in the same library as remainder(). save_LIBS="$LIBS" LIBS="$LIBS $REMAINDER_LIBM" AC_CACHE_CHECK([for remainderl], [gl_cv_func_remainderl], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif long double remainderl (long double, long double); long double (*funcptr) (long double, long double) = remainderl; long double x; long double y;]], [[return funcptr (x, y) > 1 || remainderl (x, y) > 1;]])], [gl_cv_func_remainderl=yes], [gl_cv_func_remainderl=no]) ]) LIBS="$save_LIBS" if test $gl_cv_func_remainderl = yes; then HAVE_REMAINDERL=1 REMAINDERL_LIBM="$REMAINDER_LIBM" dnl Also check whether it's declared. dnl IRIX 6.5 has remainderl() in libm but doesn't declare it in <math.h>. AC_CHECK_DECLS([remainderl], , [HAVE_DECL_REMAINDERL=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $REMAINDERL_LIBM" gl_FUNC_REMAINDERL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_remainderl_works" in *yes) ;; *) REPLACE_REMAINDERL=1 ;; esac m4_ifdef([gl_FUNC_REMAINDERL_IEEE], [ if test $gl_remainderl_required = ieee && test $REPLACE_REMAINDERL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether remainderl works according to ISO C 99 with IEC 60559], [gl_cv_func_remainderl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $REMAINDERL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif long double remainderl (long double, long double); /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (long double x, long double y) { return x == y; } static long double dummy (long double x, long double y) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_remainderl) (long double, long double) = argc ? remainderl : dummy; long double f; /* Test remainderl(...,0.0L). This test fails on OSF/1 5.1. */ f = my_remainderl (2.0L, 0.0L); if (numeric_equal (f, f)) return 1; return 0; } ]])], [gl_cv_func_remainderl_ieee=yes], [gl_cv_func_remainderl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_remainderl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_remainderl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_remainderl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_remainderl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_remainderl_ieee" in *yes) ;; *) REPLACE_REMAINDERL=1 ;; esac fi ]) else HAVE_REMAINDERL=0 HAVE_DECL_REMAINDERL=0 fi if test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; then dnl Find libraries needed to link lib/remainderl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then REMAINDERL_LIBM="$REMAINDER_LIBM" else AC_REQUIRE([gl_FUNC_FABSL]) AC_REQUIRE([gl_FUNC_FMODL]) AC_REQUIRE([gl_FUNC_ISNANL]) REMAINDERL_LIBM= dnl Append $FABSL_LIBM to REMAINDERL_LIBM, avoiding gratuitous duplicates. case " $REMAINDERL_LIBM " in *" $FABSL_LIBM "*) ;; *) REMAINDERL_LIBM="$REMAINDERL_LIBM $FABSL_LIBM" ;; esac dnl Append $FMODL_LIBM to REMAINDERL_LIBM, avoiding gratuitous duplicates. case " $REMAINDERL_LIBM " in *" $FMODL_LIBM "*) ;; *) REMAINDERL_LIBM="$REMAINDERL_LIBM $FMODL_LIBM" ;; esac dnl Append $ISNANL_LIBM to REMAINDERL_LIBM, avoiding gratuitous duplicates. case " $REMAINDERL_LIBM " in *" $ISNANL_LIBM "*) ;; *) REMAINDERL_LIBM="$REMAINDERL_LIBM $ISNANL_LIBM" ;; esac fi fi AC_SUBST([REMAINDERL_LIBM]) ]) dnl Test whether remainderl() works. dnl It produces completely wrong values on OpenBSD 5.1/SPARC. dnl On musl 1.2.2/{arm64,s390x}, the result is accurate to only 16 digits. AC_DEFUN([gl_FUNC_REMAINDERL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether remainderl works], [gl_cv_func_remainderl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif extern #ifdef __cplusplus "C" #endif long double remainderl (long double, long double); static long double dummy (long double x, long double y) { return 0; } volatile long double gx; volatile long double gy; long double gz; int main (int argc, char *argv[]) { long double (* volatile my_remainderl) (long double, long double) = argc ? remainderl : dummy; int result = 0; /* This test fails on OpenBSD 5.1/SPARC. */ { gx = 9.245907126L; gy = 3.141592654L; gz = remainderl (gx, gy); if (gz >= 0.0L) result |= 1; } /* This test fails on musl 1.2.2/arm64, musl 1.2.2/s390x. */ { const long double TWO_LDBL_MANT_DIG = /* 2^LDBL_MANT_DIG */ (long double) (1U << ((LDBL_MANT_DIG - 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 1) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 2) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 3) / 5)) * (long double) (1U << ((LDBL_MANT_DIG - 1 + 4) / 5)); long double x = 11.357996098166760874793827872740874983168L; long double y = 0.486497838502717923110029188864352615388L; long double z = my_remainderl (x, y) - (x - 23 * y); long double err = z * TWO_LDBL_MANT_DIG; if (!(err >= -32.0L && err <= 32.0L)) result |= 2; } return result; } ]])], [gl_cv_func_remainderl_works=yes], [gl_cv_func_remainderl_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_remainderl_works="guessing yes" ;; # Guess no on musl systems. *-musl*) gl_cv_func_remainderl_works="guessing no" ;; # Guess no on OpenBSD. openbsd*) gl_cv_func_remainderl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_remainderl_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_remainderl_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/remove.m4����������������������������������������������������������������0000664�0000000�0000000�00000002725�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remove.m4 serial 5 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REMOVE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_RMDIR]) AC_REQUIRE([gl_FUNC_UNLINK]) if { case "$gl_cv_func_rmdir_works:$gl_cv_func_unlink_honors_slashes" in *yes:*yes) false;; *) true;; esac }; then dnl If either underlying syscall is broken, then remove likely has dnl the same bug; blindly use our replacement. REPLACE_REMOVE=1 else dnl C89 requires remove(), but only POSIX requires it to handle dnl directories. On mingw, directories fails with EPERM. AC_CACHE_CHECK([whether remove handles directories], [gl_cv_func_remove_dir_works], [mkdir conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> ]], [[return remove ("conftest.dir");]])], [gl_cv_func_remove_dir_works=yes], [gl_cv_func_remove_dir_works=no], [case $host_os in mingw*) gl_cv_func_remove_dir_works="guessing no";; *) gl_cv_func_remove_dir_works="guessing yes";; esac]) rm -rf conftest.dir]) case $gl_cv_func_remove_dir_works in *no*) REPLACE_REMOVE=1;; esac fi ]) �������������������������������������������gnulib-20210822~d383792/m4/rename.m4����������������������������������������������������������������0000664�0000000�0000000�00000024133�14110572173�0016333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 33 # Copyright (C) 2001, 2003, 2005-2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Volker Borchert. dnl Determine whether rename works for source file names with a trailing slash. dnl The rename from SunOS 4.1.1_U1 doesn't. dnl dnl If it doesn't, then define RENAME_TRAILING_SLASH_BUG and arrange dnl to compile the wrapper function. dnl AC_DEFUN([gl_FUNC_RENAME], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) dnl Solaris 11.3, AIX 7.1 mistakenly allow rename("file","name/"). dnl NetBSD 1.6 mistakenly forbids rename("dir","name/"). dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/"). dnl The Solaris bug can be worked around without stripping dnl trailing slash, while the NetBSD bug requires stripping; dnl the two conditions can be distinguished by whether hard dnl links are also broken. AC_CACHE_CHECK([whether rename honors trailing slash on destination], [gl_cv_func_rename_slash_dst_works], [rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.f1", "conftest.f2/") == 0) result |= 1; if (rename ("conftest.d1", "conftest.d2/") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.f", "conftest.lnk/") == 0) result |= 4; #endif return result; ]])], [gl_cv_func_rename_slash_dst_works=yes], [gl_cv_func_rename_slash_dst_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk ]) case "$gl_cv_func_rename_slash_dst_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_TRAILING_SLASH_DEST_BUG], [1], [Define if rename does not correctly handle slashes on the destination argument, such as on Solaris 11 or NetBSD 1.6.]) ;; esac dnl SunOS 4.1.1_U1 mistakenly forbids rename("dir/","name"). dnl Solaris 9 mistakenly allows rename("file/","name"). dnl FreeBSD 7.2 mistakenly allows rename("link-to-file/","name"). dnl These bugs require stripping trailing slash to avoid corrupting dnl symlinks with a trailing slash. AC_CACHE_CHECK([whether rename honors trailing slash on source], [gl_cv_func_rename_slash_src_works], [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.f1/", "conftest.d3") == 0) result |= 1; if (rename ("conftest.d1/", "conftest.d2") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.lnk/", "conftest.f") == 0) result |= 4; #endif return result; ]])], [gl_cv_func_rename_slash_src_works=yes], [gl_cv_func_rename_slash_src_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk ]) case "$gl_cv_func_rename_slash_src_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_TRAILING_SLASH_SOURCE_BUG], [1], [Define if rename does not correctly handle slashes on the source argument, such as on Solaris 9 or cygwin 1.5.]) ;; esac dnl NetBSD 1.6 and cygwin 1.5.x mistakenly reduce hard link count dnl on rename("h1","h2"). dnl This bug requires stat'ting targets prior to attempting rename. AC_CHECK_FUNCS_ONCE([link]) AC_CACHE_CHECK([whether rename manages hard links correctly], [gl_cv_func_rename_link_works], [if test $ac_cv_func_link = yes; then if test $cross_compiling != yes; then rm -rf conftest.f conftest.f1 conftest.f2 if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <errno.h> # include <stdio.h> # include <stdlib.h> # include <unistd.h> ]GL_MDA_DEFINES], [[int result = 0; if (rename ("conftest.f", "conftest.f1")) result |= 1; if (unlink ("conftest.f1")) result |= 2; /* Allow either the POSIX-required behavior, where the previous rename kept conftest.f, or the (better) NetBSD behavior, where it removed conftest.f. */ if (rename ("conftest.f", "conftest.f") != 0 && errno != ENOENT) result |= 4; if (rename ("conftest.f1", "conftest.f1") == 0) result |= 8; if (rename ("conftest.f2", "conftest.f2") != 0) result |= 16; return result; ]])], [gl_cv_func_rename_link_works=yes], [gl_cv_func_rename_link_works=no], [dnl We don't get here. : ]) else gl_cv_func_rename_link_works="guessing no" fi rm -rf conftest.f conftest.f1 conftest.f2 else dnl When crosscompiling, assume rename is broken. case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_link_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;; esac fi else gl_cv_func_rename_link_works=yes fi ]) case "$gl_cv_func_rename_link_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_HARD_LINK_BUG], [1], [Define if rename fails to leave hard links alone, as on NetBSD 1.6 or Cygwin 1.5.]) ;; esac dnl Cygwin 1.5.x mistakenly allows rename("dir","file"). dnl mingw mistakenly forbids rename("dir1","dir2"). dnl These bugs require stripping trailing slash to avoid corrupting dnl symlinks with a trailing slash. AC_CACHE_CHECK([whether rename manages existing destinations correctly], [gl_cv_func_rename_dest_works], [rm -rf conftest.f conftest.d1 conftest.d2 touch conftest.f && mkdir conftest.d1 conftest.d2 || AC_MSG_ERROR([cannot create temporary files]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.d1", "conftest.d2") != 0) result |= 1; if (rename ("conftest.d2", "conftest.f") == 0) result |= 2; return result; ]])], [gl_cv_func_rename_dest_works=yes], [gl_cv_func_rename_dest_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_dest_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.d1 conftest.d2 ]) case "$gl_cv_func_rename_dest_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_DEST_EXISTS_BUG], [1], [Define if rename does not work when the destination file exists, as on Cygwin 1.5 or Windows.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/renameat.m4��������������������������������������������������������������0000664�0000000�0000000�00000001426�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 # See if we need to provide renameat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_RENAMEAT], [ AC_REQUIRE([gl_FUNC_OPENAT]) AC_REQUIRE([gl_FUNC_RENAME]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS([linux/fs.h]) AC_CHECK_FUNCS_ONCE([renameat renameat2]) if test $ac_cv_func_renameat = no; then HAVE_RENAMEAT=0 elif test $REPLACE_RENAME = 1; then dnl Solaris 9 and 10 have the same bugs in renameat as in rename. REPLACE_RENAMEAT=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/rewinddir.m4�������������������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rewinddir.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REWINDDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_CHECK_FUNCS([rewinddir]) if test $ac_cv_func_rewinddir = no; then HAVE_REWINDDIR=0 fi ]) ��������������������������������������������������������������gnulib-20210822~d383792/m4/rint.m4������������������������������������������������������������������0000664�0000000�0000000�00000001512�14110572173�0016034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rint.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RINT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Determine RINT_LIBM. dnl The reason for the extra code is: dnl In AIX 7.1 with gcc 4.2, when optimization is turned on, calls to dnl rint() with simple arguments are turned into rintf() calls by the dnl compiler. But while rint() is resides in libc, rintf() is in libm. gl_MATHFUNC([rint], [double], [(double)], [], [y += rint (2.0);]) if test $gl_cv_func_rint_no_libm = no \ && test $gl_cv_func_rint_in_libm = no; then HAVE_RINT=0 RINT_LIBM= fi AC_SUBST([RINT_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/rintf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001733�14110572173�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rintf.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RINTF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare rintf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine RINTF_LIBM. gl_MATHFUNC([rintf], [float], [(float)], [extern #ifdef __cplusplus "C" #endif float rintf (float); ]) if test $gl_cv_func_rintf_no_libm = yes \ || test $gl_cv_func_rintf_in_libm = yes; then HAVE_RINTF=1 dnl Also check whether it's declared. dnl IRIX 6.5 has rintf() in libm but doesn't declare it in <math.h>. AC_CHECK_DECLS([rintf], , [HAVE_DECL_RINTF=0], [[#include <math.h>]]) else HAVE_RINTF=0 HAVE_DECL_RINTF=0 RINTF_LIBM= fi AC_SUBST([RINTF_LIBM]) ]) �������������������������������������gnulib-20210822~d383792/m4/rintl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005053�14110572173�0016214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rintl.m4 serial 8 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RINTL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare rintl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Determine RINTL_LIBM. gl_MATHFUNC([rintl], [long double], [(long double)]) if test $gl_cv_func_rintl_no_libm = yes \ || test $gl_cv_func_rintl_in_libm = yes; then if test $REPLACE_RINTL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether rintl works], [gl_cv_func_rintl_works], [ save_LIBS="$LIBS" LIBS="$LIBS $RINTL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #undef rintl extern #ifdef __cplusplus "C" #endif long double rintl (long double); static long double dummy (long double x) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_rintl) (long double) = argc ? rintl : dummy; int result = 0; /* This test fails on NetBSD 9.0. */ { volatile long double x = -0.3L; long double y = my_rintl (x); if (!(y == 0.0L)) result |= 1; } return result; } ]])], [gl_cv_func_rintl_works=yes], [gl_cv_func_rintl_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_rintl_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_rintl_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rintl_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rintl_works="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_rintl_works" in *yes) ;; *) REPLACE_RINTL=1 ;; esac fi else HAVE_RINTL=0 fi if test $HAVE_RINTL = 0 || test $REPLACE_RINTL = 1; then dnl Find libraries needed to link lib/rintl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_RINT]) RINTL_LIBM="$RINT_LIBM" else RINTL_LIBM= fi fi AC_SUBST([RINTL_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/rmdir-errno.m4�����������������������������������������������������������0000664�0000000�0000000�00000003731�14110572173�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # Copyright (C) 2000-2001, 2005-2006, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # When rmdir fails because the specified directory is not empty, it sets # errno to some value, usually ENOTEMPTY. However, on some AIX systems, # ENOTEMPTY is mistakenly defined to be EEXIST. To work around this, and # in general, to avoid depending on the use of any particular symbol, this # test runs a test to determine the actual numeric value. AC_DEFUN([gl_FUNC_RMDIR_NOTEMPTY], [dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([for rmdir-not-empty errno value], [gl_cv_func_rmdir_errno_not_empty], [ # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir2" mkdir confdir2; : > confdir2/file AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif ]GL_MDA_DEFINES[ int main () { FILE *s; int val; rmdir ("confdir2"); val = errno; s = fopen ("confdir2/errno", "w"); fprintf (s, "%d\n", val); fclose (s); return 0; } ]])], [gl_cv_func_rmdir_errno_not_empty=`cat confdir2/errno`], [gl_cv_func_rmdir_errno_not_empty='configure error in rmdir-errno.m4'], [case "$host_os" in # Guess ENOTEMPTY = 41 on native Windows. mingw*) gl_cv_func_rmdir_errno_not_empty=ENOTEMPTY ;; *) gl_cv_func_rmdir_errno_not_empty=ENOTEMPTY ;; esac ]) ] ) AC_DEFINE_UNQUOTED([RMDIR_ERRNO_NOT_EMPTY], [$gl_cv_func_rmdir_errno_not_empty], [the value to which errno is set when rmdir fails on a nonempty directory]) ]) ���������������������������������������gnulib-20210822~d383792/m4/rmdir.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003611�14110572173�0016177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rmdir.m4 serial 18 dnl Copyright (C) 2002, 2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RMDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Detect cygwin 1.5.x bug. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether rmdir works], [gl_cv_func_rmdir_works], [mkdir conftest.dir touch conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> #include <errno.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif ]GL_MDA_DEFINES], [[int result = 0; if (!rmdir ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; if (!rmdir ("conftest.dir/./")) result |= 4; return result; ]])], [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rmdir_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir conftest.file]) case "$gl_cv_func_rmdir_works" in *yes) ;; *) REPLACE_RMDIR=1 ;; esac ]) �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/round-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# round-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in round.m4 and not inlined in the dnl module description), so that gl_FUNC_ROUND can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_ROUND_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_round_required=ieee]) AC_REQUIRE([gl_FUNC_ROUND]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/round.m4�����������������������������������������������������������������0000664�0000000�0000000�00000012423�14110572173�0016212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# round.m4 serial 23 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ROUND], [ m4_divert_text([DEFAULTS], [gl_round_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare round(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_MATH_LIB([ROUND_LIBM], [x = round (x);], [extern #ifdef __cplusplus "C" #endif double round (double); ]) if test "$ROUND_LIBM" != missing; then HAVE_ROUND=1 dnl Also check whether it's declared. dnl IRIX 6.5 has round() in libm but doesn't declare it in <math.h>. AC_CHECK_DECLS([round], , [HAVE_DECL_ROUND=0], [[#include <math.h>]]) dnl Test whether round() produces correct results. On NetBSD 3.0, for dnl x = 1/2 - 2^-54, the system's round() returns a wrong result. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether round works], [gl_cv_func_round_works], [ save_LIBS="$LIBS" LIBS="$LIBS $ROUND_LIBM" AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <float.h> #include <math.h> extern #ifdef __cplusplus "C" #endif double round (double); #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif int main() { /* 2^DBL_MANT_DIG. */ static const double TWO_MANT_DIG = /* Assume DBL_MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (double) (1U << (DBL_MANT_DIG / 5)) * (double) (1U << ((DBL_MANT_DIG + 1) / 5)) * (double) (1U << ((DBL_MANT_DIG + 2) / 5)) * (double) (1U << ((DBL_MANT_DIG + 3) / 5)) * (double) (1U << ((DBL_MANT_DIG + 4) / 5)); volatile double x = 0.5 - 0.5 / TWO_MANT_DIG; return (x < 0.5 && round (x) != 0.0); }]])], [gl_cv_func_round_works=yes], [gl_cv_func_round_works=no], [case "$host_os" in netbsd* | aix*) gl_cv_func_round_works="guessing no" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_round_works="guessing yes"], [gl_cv_func_round_works="guessing no"]) ;; *) gl_cv_func_round_works="guessing yes" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_round_works" in *no) REPLACE_ROUND=1 ;; esac m4_ifdef([gl_FUNC_ROUND_IEEE], [ if test $gl_round_required = ieee && test $REPLACE_ROUND = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether round works according to ISO C 99 with IEC 60559], [gl_cv_func_round_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $ROUND_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif double round (double); ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_round) (double) = argc ? round : dummy; /* Test whether round (-0.0) is -0.0. */ if (signbitd (minus_zerod) && !signbitd (my_round (minus_zerod))) return 1; return 0; } ]])], [gl_cv_func_round_ieee=yes], [gl_cv_func_round_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_round_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_round_ieee="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_round_ieee="guessing yes"], [gl_cv_func_round_ieee="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_round_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_round_ieee" in *yes) ;; *) REPLACE_ROUND=1 ;; esac fi ]) else HAVE_ROUND=0 HAVE_DECL_ROUND=0 fi if test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1; then dnl Find libraries needed to link lib/round.c. gl_FUNC_FLOOR_LIBS gl_FUNC_CEIL_LIBS ROUND_LIBM= dnl Append $FLOOR_LIBM to ROUND_LIBM, avoiding gratuitous duplicates. case " $ROUND_LIBM " in *" $FLOOR_LIBM "*) ;; *) ROUND_LIBM="$ROUND_LIBM $FLOOR_LIBM" ;; esac dnl Append $CEIL_LIBM to ROUND_LIBM, avoiding gratuitous duplicates. case " $ROUND_LIBM " in *" $CEIL_LIBM "*) ;; *) ROUND_LIBM="$ROUND_LIBM $CEIL_LIBM" ;; esac fi AC_SUBST([ROUND_LIBM]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/roundf-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundf-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in roundf.m4 and not inlined in the dnl module description), so that gl_FUNC_ROUNDF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_ROUNDF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_roundf_required=ieee]) AC_REQUIRE([gl_FUNC_ROUNDF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/roundf.m4����������������������������������������������������������������0000664�0000000�0000000�00000013314�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundf.m4 serial 24 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ROUNDF], [ m4_divert_text([DEFAULTS], [gl_roundf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare roundf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_MATH_LIB([ROUNDF_LIBM], [x = roundf (x);], [extern #ifdef __cplusplus "C" #endif float roundf (float); ]) if test "$ROUNDF_LIBM" != missing; then HAVE_ROUNDF=1 dnl Also check whether it's declared. dnl IRIX 6.5 has roundf() in libm but doesn't declare it in <math.h>. AC_CHECK_DECLS([roundf], , [HAVE_DECL_ROUNDF=0], [[#include <math.h>]]) dnl Test whether roundf() produces correct results. On mingw, for dnl x = 1/2 - 2^-25, the system's roundf() returns a wrong result. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether roundf works], [gl_cv_func_roundf_works], [ save_LIBS="$LIBS" LIBS="$LIBS $ROUNDF_LIBM" AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <float.h> #include <math.h> extern #ifdef __cplusplus "C" #endif float roundf (float); #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif int main() { /* 2^FLT_MANT_DIG. */ static const float TWO_MANT_DIG = /* Assume FLT_MANT_DIG <= 3 * 31. Use the identity n = floor(n/3) + floor((n+1)/3) + floor((n+2)/3). */ (float) (1U << (FLT_MANT_DIG / 3)) * (float) (1U << ((FLT_MANT_DIG + 1) / 3)) * (float) (1U << ((FLT_MANT_DIG + 2) / 3)); volatile float x = 0.5f - 0.5f / TWO_MANT_DIG; return (x < 0.5f && roundf (x) != 0.0f); }]])], [gl_cv_func_roundf_works=yes], [gl_cv_func_roundf_works=no], [case "$host_os" in # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_roundf_works="guessing yes"], [gl_cv_func_roundf_works="guessing no"]) ;; *) gl_cv_func_roundf_works="guessing yes" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_roundf_works" in *no) REPLACE_ROUNDF=1 ;; esac m4_ifdef([gl_FUNC_ROUNDF_IEEE], [ if test $gl_roundf_required = ieee && test $REPLACE_ROUNDF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether roundf works according to ISO C 99 with IEC 60559], [gl_cv_func_roundf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $ROUNDF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif float roundf (float); ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float f) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_roundf) (float) = argc ? roundf : dummy; int result = 0; /* Test whether roundf (-0.0f) is -0.0f. */ if (signbitf (minus_zerof) && !signbitf (my_roundf (minus_zerof))) result |= 1; /* Test whether roundf (-0.3f) is -0.0f. */ if (signbitf (-0.3f) && !signbitf (my_roundf (-0.3f))) result |= 2; return result; } ]])], [gl_cv_func_roundf_ieee=yes], [gl_cv_func_roundf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_roundf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_roundf_ieee="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_roundf_ieee="guessing yes"], [gl_cv_func_roundf_ieee="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_roundf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_roundf_ieee" in *yes) ;; *) REPLACE_ROUNDF=1 ;; esac fi ]) else HAVE_ROUNDF=0 HAVE_DECL_ROUNDF=0 fi if test $HAVE_ROUNDF = 0 || test $REPLACE_ROUNDF = 1; then dnl Find libraries needed to link lib/roundf.c. AC_CHECK_DECLS([ceilf, floorf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_floorf" = yes \ && test "$ac_cv_have_decl_ceilf" = yes; then gl_FUNC_FLOORF_LIBS gl_FUNC_CEILF_LIBS if test "$FLOORF_LIBM" != '?' && test "$CEILF_LIBM" != '?'; then AC_DEFINE([HAVE_FLOORF_AND_CEILF], [1], [Define if the both the floorf() and ceilf() functions exist.]) ROUNDF_LIBM= dnl Append $FLOORF_LIBM to ROUNDF_LIBM, avoiding gratuitous duplicates. case " $ROUNDF_LIBM " in *" $FLOORF_LIBM "*) ;; *) ROUNDF_LIBM="$ROUNDF_LIBM $FLOORF_LIBM" ;; esac dnl Append $CEILF_LIBM to ROUNDF_LIBM, avoiding gratuitous duplicates. case " $ROUNDF_LIBM " in *" $CEILF_LIBM "*) ;; *) ROUNDF_LIBM="$ROUNDF_LIBM $CEILF_LIBM" ;; esac else ROUNDF_LIBM= fi else ROUNDF_LIBM= fi fi AC_SUBST([ROUNDF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/roundl-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundl-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in roundl.m4 and not inlined in the dnl module description), so that gl_FUNC_ROUNDL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_ROUNDL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_roundl_required=ieee]) AC_REQUIRE([gl_FUNC_ROUNDL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/roundl.m4����������������������������������������������������������������0000664�0000000�0000000�00000010315�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundl.m4 serial 20 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ROUNDL], [ m4_divert_text([DEFAULTS], [gl_roundl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare roundl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);], [extern #ifdef __cplusplus "C" #endif long double roundl (long double); ]) if test "$ROUNDL_LIBM" != missing; then HAVE_ROUNDL=1 dnl Also check whether it's declared. dnl IRIX 6.5 has roundl() in libm but doesn't declare it in <math.h>. AC_CHECK_DECLS([roundl], , [HAVE_DECL_ROUNDL=0], [[#include <math.h>]]) m4_ifdef([gl_FUNC_ROUNDL_IEEE], [ if test $gl_roundl_required = ieee && test $REPLACE_ROUNDL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether roundl works according to ISO C 99 with IEC 60559], [gl_cv_func_roundl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $ROUNDL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> extern #ifdef __cplusplus "C" #endif long double roundl (long double); ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double f) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_roundl) (long double) = argc ? roundl : dummy; int result = 0; /* Test whether roundl (-0.0L) is -0.0L. */ if (signbitl (minus_zerol) && !signbitl (my_roundl (minus_zerol))) result |= 1; /* Test whether roundl (-0.3L) is -0.0L. */ if (signbitl (-0.3L) && !signbitl (my_roundl (-0.3L))) result |= 2; return result; } ]])], [gl_cv_func_roundl_ieee=yes], [gl_cv_func_roundl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_roundl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_roundl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_roundl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_roundl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_roundl_ieee" in *yes) ;; *) REPLACE_ROUNDL=1 ;; esac fi ]) else HAVE_ROUNDL=0 HAVE_DECL_ROUNDL=0 fi if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then dnl Find libraries needed to link lib/roundl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_ROUND]) ROUNDL_LIBM="$ROUND_LIBM" else AC_CHECK_DECLS([ceill, floorl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_floorl" = yes \ && test "$ac_cv_have_decl_ceill" = yes; then gl_FUNC_FLOORL_LIBS gl_FUNC_CEILL_LIBS if test "$FLOORL_LIBM" != '?' && test "$CEILL_LIBM" != '?'; then AC_DEFINE([HAVE_FLOORL_AND_CEILL], [1], [Define if the both the floorl() and ceill() functions exist.]) ROUNDL_LIBM= dnl Append $FLOORL_LIBM to ROUNDL_LIBM, avoiding gratuitous duplicates. case " $ROUNDL_LIBM " in *" $FLOORL_LIBM "*) ;; *) ROUNDL_LIBM="$ROUNDL_LIBM $FLOORL_LIBM" ;; esac dnl Append $CEILL_LIBM to ROUNDL_LIBM, avoiding gratuitous duplicates. case " $ROUNDL_LIBM " in *" $CEILL_LIBM "*) ;; *) ROUNDL_LIBM="$ROUNDL_LIBM $CEILL_LIBM" ;; esac else ROUNDL_LIBM= fi else ROUNDL_LIBM= fi fi fi AC_SUBST([ROUNDL_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/rpmatch.m4���������������������������������������������������������������0000664�0000000�0000000�00000002040�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rpmatch.m4 serial 10 dnl Copyright (C) 2002-2003, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RPMATCH], [ dnl Persuade glibc <stdlib.h> to declare rpmatch(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([rpmatch]) if test $ac_cv_func_rpmatch = no; then HAVE_RPMATCH=0 fi ]) # Prerequisites of lib/rpmatch.c. AC_DEFUN([gl_PREREQ_RPMATCH], [ AC_CACHE_CHECK([for nl_langinfo and YESEXPR], [gl_cv_langinfo_yesexpr], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[char* cs = nl_langinfo(YESEXPR); return !cs;]])], [gl_cv_langinfo_yesexpr=yes], [gl_cv_langinfo_yesexpr=no]) ]) if test $gl_cv_langinfo_yesexpr = yes; then AC_DEFINE([HAVE_LANGINFO_YESEXPR], [1], [Define if you have <langinfo.h> and nl_langinfo(YESEXPR).]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/safe-alloc.m4������������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0017072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-alloc.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SAFE_ALLOC], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/safe-read.m4�������������������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-read.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/safe-read.c. AC_DEFUN([gl_PREREQ_SAFE_READ], [ AC_REQUIRE([gt_TYPE_SSIZE_T]) ]) �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/safe-write.m4������������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0017125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-write.m4 serial 4 dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/safe-write.c. AC_DEFUN([gl_PREREQ_SAFE_WRITE], [ gl_PREREQ_SAFE_READ ]) �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/same.m4������������������������������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0016015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 10 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/same.c. AC_DEFUN([gl_SAME], [ AC_REQUIRE([AC_SYS_LONG_FILE_NAMES]) AC_CHECK_FUNCS_ONCE([fpathconf]) ]) �����������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/save-cwd.m4��������������������������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0016574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites for lib/save-cwd.c. AC_DEFUN([gl_SAVE_CWD], [ AC_CHECK_FUNCS_ONCE([fchdir]) ]) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/savedir.m4���������������������������������������������������������������0000664�0000000�0000000�00000000517�14110572173�0016521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# savedir.m4 serial 10 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SAVEDIR], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/savewd.m4����������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Save and restore the working directory, possibly using a child process. dnl Copyright (C) 2004, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SAVEWD], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/scandir.m4���������������������������������������������������������������0000664�0000000�0000000�00000001152�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# scandir.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SCANDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) dnl Persuade glibc and Solaris <dirent.h> to declare scandir(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([scandir]) if test $ac_cv_func_scandir = no; then HAVE_SCANDIR=0 fi ]) # Prerequisites of lib/scandir.c. AC_DEFUN([gl_PREREQ_SCANDIR], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sched_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000006363�14110572173�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_h.m4 serial 15 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SCHED_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SCHED_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) AC_CHECK_HEADERS([sched.h], [], [], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif ]]) gl_NEXT_HEADERS([sched.h]) if test "$ac_cv_header_sched_h" = yes; then HAVE_SCHED_H=1 else HAVE_SCHED_H=0 fi AC_SUBST([HAVE_SCHED_H]) if test "$HAVE_SCHED_H" = 1; then AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif #include <sched.h> ]]) else HAVE_STRUCT_SCHED_PARAM=0 case "$host_os" in os2*) dnl On OS/2 kLIBC, struct sched_param is in spawn.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <spawn.h>]) ;; vms) dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <pthread.h>]) ;; esac fi AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) if test "$ac_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <sched.h> ]], [sched_yield]) ]) # gl_SCHED_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SCHED_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SCHED_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SCHED_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCHED_YIELD]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SCHED_H_DEFAULTS]) ]) AC_DEFUN([gl_SCHED_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_SCHED_YIELD=1; AC_SUBST([HAVE_SCHED_YIELD]) REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sched_yield.m4�����������������������������������������������������������0000664�0000000�0000000�00000001354�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_yield.m4 serial 2 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SCHED_YIELD], [ AC_REQUIRE([gl_SCHED_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_SCHED_YIELD=1 else AC_CHECK_DECL([sched_yield], , [HAVE_SCHED_YIELD=0], [[#include <sched.h>]]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/search_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000005261�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# search_h.m4 serial 15 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SEARCH_H], [ AC_REQUIRE([gl_SEARCH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([search.h]) if test $ac_cv_header_search_h = yes; then HAVE_SEARCH_H=1 else HAVE_SEARCH_H=0 fi AC_SUBST([HAVE_SEARCH_H]) if test $HAVE_SEARCH_H = 1; then AC_CACHE_CHECK([for type VISIT], [gl_cv_type_VISIT], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SEARCH_H #include <search.h> #endif ]], [[static VISIT x; x = postorder;]])], [gl_cv_type_VISIT=yes], [gl_cv_type_VISIT=no])]) else gl_cv_type_VISIT=no fi if test $gl_cv_type_VISIT = yes; then HAVE_TYPE_VISIT=1 else HAVE_TYPE_VISIT=0 fi AC_SUBST([HAVE_TYPE_VISIT]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <search.h> ]], [tdelete tfind tsearch twalk]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_SEARCH_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SEARCH_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SEARCH_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SEARCH_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SEARCH_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TSEARCH]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SEARCH_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SEARCH_H_DEFAULTS]) ]) AC_DEFUN([gl_SEARCH_H_DEFAULTS], [ dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LFIND], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEARCH], [1]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_TSEARCH=1; AC_SUBST([HAVE_TSEARCH]) HAVE_TWALK=1; AC_SUBST([HAVE_TWALK]) REPLACE_TSEARCH=0; AC_SUBST([REPLACE_TSEARCH]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/secure_getenv.m4���������������������������������������������������������0000664�0000000�0000000�00000001524�14110572173�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Look up an environment variable more securely. dnl Copyright 2013-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SECURE_GETENV], [ dnl Persuade glibc <stdlib.h> to declare secure_getenv(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([secure_getenv]) if test $ac_cv_func_secure_getenv = no; then HAVE_SECURE_GETENV=0 fi ]) # Prerequisites of lib/secure_getenv.c. AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ AC_CHECK_FUNCS([__secure_getenv]) if test $ac_cv_func___secure_getenv = no; then AC_CHECK_FUNCS([issetugid]) fi AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/select.m4����������������������������������������������������������������0000664�0000000�0000000�00000006663�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# select.m4 serial 13 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SELECT], [ AC_REQUIRE([gl_SYS_SELECT_H]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SOCKETS]) if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else dnl On Interix 3.5, select(0, NULL, NULL, NULL, timeout) fails with error dnl EFAULT. AC_CHECK_HEADERS_ONCE([sys/select.h]) AC_CACHE_CHECK([whether select supports a 0 argument], [gl_cv_func_select_supports0], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H #include <sys/select.h> #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; }]])], [gl_cv_func_select_supports0=yes], [gl_cv_func_select_supports0=no], [ changequote(,)dnl case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac dnl On FreeBSD 8.2, select() doesn't always reject bad fds. AC_CACHE_CHECK([whether select detects invalid fds], [gl_cv_func_select_detects_ebadf], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> ]GL_MDA_DEFINES], [[ fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ]])], [gl_cv_func_select_detects_ebadf=yes], [gl_cv_func_select_detects_ebadf=no], [ case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;; esac ]) ]) case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi dnl Determine the needed libraries. LIB_SELECT="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw*) dnl On the MSVC platform, the function MsgWaitForMultipleObjects dnl (used in lib/select.c) requires linking with -luser32. On mingw, dnl it is implicit. AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #define WIN32_LEAN_AND_MEAN #include <windows.h> int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; }]])], [], [LIB_SELECT="$LIB_SELECT -luser32"]) ;; esac fi AC_SUBST([LIB_SELECT]) ]) �����������������������������������������������������������������������������gnulib-20210822~d383792/m4/selinux-context-h.m4�����������������������������������������������������0000664�0000000�0000000�00000001412�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # Provide <selinux/context.h>, if necessary. AC_DEFUN([gl_HEADERS_SELINUX_CONTEXT_H], [ AC_REQUIRE([gl_LIBSELINUX]) if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/context.h], [SELINUX_CONTEXT_H=], [SELINUX_CONTEXT_H=selinux/context.h]) else SELINUX_CONTEXT_H=selinux/context.h fi AC_SUBST([SELINUX_CONTEXT_H]) AM_CONDITIONAL([GL_GENERATE_SELINUX_CONTEXT_H], [test -n "$SELINUX_CONTEXT_H"]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/selinux-label-h.m4�������������������������������������������������������0000664�0000000�0000000�00000001205�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2020-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Paul Eggert # Provide <selinux/label.h>, if necessary. AC_DEFUN([gl_HEADERS_SELINUX_LABEL_H], [ AC_REQUIRE([gl_LIBSELINUX]) SELINUX_LABEL_H=selinux/label.h if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/label.h], [SELINUX_LABEL_H=]) fi AC_SUBST([SELINUX_LABEL_H]) AM_CONDITIONAL([GL_GENERATE_SELINUX_LABEL_H], [test -n "$SELINUX_LABEL_H"]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/selinux-selinux-h.m4�����������������������������������������������������0000664�0000000�0000000�00000004775�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # Provide <selinux/selinux.h>, if necessary. # If it is already present, provide wrapper functions to guard against # misbehavior from getfilecon, lgetfilecon, and fgetfilecon. AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H], [ AC_REQUIRE([gl_LIBSELINUX]) if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/selinux.h]) if test "$ac_cv_header_selinux_selinux_h" = yes; then # We do have <selinux/selinux.h>, so do compile getfilecon.c # and arrange to use its wrappers. gl_CHECK_NEXT_HEADERS([selinux/selinux.h]) AC_DEFINE([getfilecon], [rpl_getfilecon], [Always use our getfilecon wrapper.]) AC_DEFINE([lgetfilecon], [rpl_lgetfilecon], [Always use our lgetfilecon wrapper.]) AC_DEFINE([fgetfilecon], [rpl_fgetfilecon], [Always use our fgetfilecon wrapper.]) fi case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in no:*) # already warned ;; *:no) AC_MSG_WARN([libselinux was found but selinux/selinux.h is missing.]) AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) esac else # Do as if <selinux/selinux.h> does not exist, even if # AC_CHECK_HEADERS_ONCE has already determined that it exists. AC_DEFINE([HAVE_SELINUX_SELINUX_H], [0]) fi ]) AC_DEFUN([gl_LIBSELINUX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_CANONICAL_BUILD]) AC_ARG_WITH([selinux], AS_HELP_STRING([--without-selinux], [do not use SELinux, even on systems with SELinux]), [], [with_selinux=maybe]) LIB_SELINUX= if test "$with_selinux" != no; then gl_save_LIBS=$LIBS AC_SEARCH_LIBS([setfilecon], [selinux], [test "$ac_cv_search_setfilecon" = "none required" || LIB_SELINUX=$ac_cv_search_setfilecon]) LIBS=$gl_save_LIBS fi AC_SUBST([LIB_SELINUX]) # Warn if SELinux is found but libselinux is absent; if test "$ac_cv_search_setfilecon" = no; then if test "$host" = "$build" && test -d /selinux; then AC_MSG_WARN([This system supports SELinux but libselinux is missing.]) AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) fi with_selinux=no fi ]) ���gnulib-20210822~d383792/m4/semaphore.m4�������������������������������������������������������������0000664�0000000�0000000�00000003055�14110572173�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# semaphore.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Sets LIB_SEMAPHORE to the library needed, in addition to $(LIBMULTITHREAD), # for getting the <semaphore.h> functions. AC_DEFUN([gl_SEMAPHORE], [ AC_REQUIRE([gl_THREADLIB]) dnl sem_post is dnl - in libc on macOS, FreeBSD, AIX, IRIX, Solaris 11, Haiku, Cygwin, dnl - in libpthread on glibc systems, OpenBSD, dnl - in libpthread or librt on NetBSD, dnl - in librt on HP-UX 11, OSF/1, Solaris 10. dnl On the platforms where -lpthread is needed, it is contained in dnl $LIBMULTITHREAD. Therefore, the only library we need to test for is -lrt. AC_CACHE_CHECK([for library needed for semaphore functions], [gl_cv_semaphore_lib], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <semaphore.h>]], [[sem_post ((sem_t *)0);]])], [gl_cv_semaphore_lib=none], [LIBS="$LIBS -lrt" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <semaphore.h>]], [[sem_post ((sem_t *)0);]])], [gl_cv_semaphore_lib='-lrt'], [gl_cv_semaphore_lib=none]) ]) LIBS="$save_LIBS" ]) if test "x$gl_cv_semaphore_lib" = xnone; then LIB_SEMAPHORE= else LIB_SEMAPHORE="$gl_cv_semaphore_lib" fi AC_SUBST([LIB_SEMAPHORE]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/servent.m4���������������������������������������������������������������0000664�0000000�0000000�00000003364�14110572173�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# servent.m4 serial 4 dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SERVENT], [ dnl Where are getservent(), setservent(), endservent(), getservbyname(), dnl getservbyport() defined? dnl Where are getprotoent(), setprotoent(), endprotoent(), getprotobyname(), dnl getprotobynumber() defined? dnl - On Solaris < 11.4, they are in libsocket. Ignore libxnet. dnl - On Haiku, they are in libnetwork. dnl - On BeOS, they are in libnet. dnl - On native Windows, they are in ws2_32.dll. dnl - Otherwise they are in libc. AC_REQUIRE([gl_SYS_SOCKET_H])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H SERVENT_LIB= gl_saved_libs="$LIBS" AC_SEARCH_LIBS([getservbyname], [socket network net], [if test "$ac_cv_search_getservbyname" != "none required"; then SERVENT_LIB="$ac_cv_search_getservbyname" fi]) LIBS="$gl_saved_libs" if test -z "$SERVENT_LIB"; then AC_CHECK_FUNCS([getservbyname], , [ AC_CACHE_CHECK([for getservbyname in winsock2.h and -lws2_32], [gl_cv_w32_getservbyname], [gl_cv_w32_getservbyname=no gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #include <stddef.h> ]], [[getservbyname(NULL,NULL);]])], [gl_cv_w32_getservbyname=yes]) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_w32_getservbyname" = "yes"; then SERVENT_LIB="-lws2_32" fi ]) fi AC_SUBST([SERVENT_LIB]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/setenv.m4����������������������������������������������������������������0000664�0000000�0000000�00000011570�14110572173�0016371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setenv.m4 serial 30 dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETENV], [ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else AC_CACHE_CHECK([whether setenv validates arguments], [gl_cv_func_setenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> #include <string.h> ]], [[ int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi ]) # Like gl_FUNC_SETENV, except prepare for separate compilation # (no REPLACE_SETENV, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_SETENV_SEPARATE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([setenv]) if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi AC_CHECK_FUNCS_ONCE([setenv]) gl_PREREQ_SETENV ]) AC_DEFUN([gl_FUNC_UNSETENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([unsetenv]) if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi AC_CHECK_FUNCS([unsetenv]) if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 dnl Some BSDs return void, failing to do error checking. AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); ]], [[]])], [gt_cv_func_unsetenv_ret='int'], [gt_cv_func_unsetenv_ret='void'])]) if test $gt_cv_func_unsetenv_ret = 'void'; then AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void instead of int.]) REPLACE_UNSETENV=1 fi dnl Solaris 10 unsetenv does not remove all copies of a name. dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. dnl OpenBSD 4.7 unsetenv("") does not fail. AC_CACHE_CHECK([whether unsetenv obeys POSIX], [gl_cv_func_unsetenv_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> extern char **environ; ]GL_MDA_DEFINES], [[ char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ]])], [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi ]) # Prerequisites of lib/setenv.c. AC_DEFUN([gl_PREREQ_SETENV], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS([search.h]) AC_CHECK_FUNCS([tsearch]) ]) # Prerequisites of lib/unsetenv.c. AC_DEFUN([gl_PREREQ_UNSETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sethostname.m4�����������������������������������������������������������0000664�0000000�0000000�00000001257�14110572173�0017420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sethostname.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Ensure # - the sethostname() function, # - the HOST_NAME_MAX macro in <limits.h>. AC_DEFUN([gl_FUNC_SETHOSTNAME], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_PREREQ_HOST_NAME_MAX AC_CHECK_FUNCS([sethostname]) if test $ac_cv_func_sethostname = no; then HAVE_SETHOSTNAME=0 fi AC_CHECK_DECLS([sethostname]) if test $ac_cv_have_decl_sethostname = no; then HAVE_DECL_SETHOSTNAME=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/setlocale.m4�������������������������������������������������������������0000664�0000000�0000000�00000005573�14110572173�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale.m4 serial 7 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Test whether we need to improve on the general working of setlocale. NEED_SETLOCALE_IMPROVED=0 case "$host_os" in dnl On native Windows systems, setlocale(category,NULL) does not look at dnl the environment variables LC_ALL, category, and LANG. mingw*) NEED_SETLOCALE_IMPROVED=1 ;; dnl On Cygwin 1.5.x, setlocale always succeeds but setlocale(LC_CTYPE,NULL) dnl is then still "C". cygwin*) case `uname -r` in 1.5.*) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; dnl On Android 4.3, setlocale(category,"C") always fails. *) AC_CACHE_CHECK([whether setlocale supports the C locale], [gl_cv_func_setlocale_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> int main () { return setlocale (LC_ALL, "C") == NULL; }]])], [gl_cv_func_setlocale_works=yes], [gl_cv_func_setlocale_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_setlocale_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_setlocale_works="guessing yes";; esac ]) ]) case "$gl_cv_func_setlocale_works" in *yes) ;; *) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; esac AC_DEFINE_UNQUOTED([NEED_SETLOCALE_IMPROVED], [$NEED_SETLOCALE_IMPROVED], [Define to 1 to enable general improvements of setlocale.]) dnl Test whether we need a multithread-safe setlocale(category,NULL). NEED_SETLOCALE_MTSAFE=0 if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then NEED_SETLOCALE_MTSAFE=1 fi AC_DEFINE_UNQUOTED([NEED_SETLOCALE_MTSAFE], [$NEED_SETLOCALE_MTSAFE], [Define to 1 to enable a multithread-safety fix of setlocale.]) if test $NEED_SETLOCALE_IMPROVED = 1 || test $NEED_SETLOCALE_MTSAFE = 1; then REPLACE_SETLOCALE=1 fi if test $NEED_SETLOCALE_MTSAFE = 1; then LIB_SETLOCALE="$LIB_SETLOCALE_NULL" else LIB_SETLOCALE= fi dnl LIB_SETLOCALE is expected to be '-pthread' or '-lpthread' on AIX with gcc dnl or xlc, and empty otherwise. AC_SUBST([LIB_SETLOCALE]) ]) # Prerequisites of lib/setlocale.c. AC_DEFUN([gl_PREREQ_SETLOCALE], [ dnl No need to check for CFLocaleCopyPreferredLanguages and dnl CFPreferencesCopyAppValue because lib/setlocale.c is not used on Mac OS X. dnl (The Mac OS X specific code is only used in libintl.) : ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/setlocale_null.m4��������������������������������������������������������0000664�0000000�0000000�00000007222�14110572173�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale_null.m4 serial 5 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe], [gl_cv_func_setlocale_null_all_mtsafe], [case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE], [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.]) dnl This is about a single category (not LC_ALL). AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe], [gl_cv_func_setlocale_null_one_mtsafe], [case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE], [Define to 1 if setlocale (category, NULL) is multithread-safe.]) dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c. if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) LIB_SETLOCALE_NULL= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) LIB_SETLOCALE_NULL= ;; *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; esac ;; esac else LIB_SETLOCALE_NULL= fi dnl LIB_SETLOCALE_NULL is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([LIB_SETLOCALE_NULL]) ]) # Prerequisites of lib/setlocale-lock.c. AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK], [ gl_VISIBILITY ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/settime.m4���������������������������������������������������������������0000664�0000000�0000000�00000000715�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# settime.m4 serial 7 dnl Copyright (C) 2002, 2004-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SETTIME], [ dnl Prerequisites of lib/settime.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TIMESPEC]) AC_CHECK_FUNCS_ONCE([settimeofday stime]) ]) ���������������������������������������������������gnulib-20210822~d383792/m4/sh-filename.m4�����������������������������������������������������������0000664�0000000�0000000�00000001556�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sh-filename.m4 serial 3 dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SH_FILENAME], [ AH_VERBATIM([SH_FILENAME], [/* File name of the Bourne shell. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ || defined __ANDROID__ /* Omit the directory part because - For native Windows programs in a Cygwin environment, the Cygwin mounts are not visible. - For 32-bit Cygwin programs in a 64-bit Cygwin environment, the Cygwin mounts are not visible. - On Android, /bin/sh does not exist. It's /system/bin/sh instead. */ # define BOURNE_SHELL "sh" #else # define BOURNE_SHELL "/bin/sh" #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sha1.m4������������������������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0015714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha1.m4 serial 12 dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SHA1], [ dnl Prerequisites of lib/sha1.c. AC_REQUIRE([gl_BIGENDIAN]) dnl Determine HAVE_OPENSSL_SHA1 and LIB_CRYPTO gl_CRYPTO_CHECK([SHA1]) ]) ��������������������������������������������������������������gnulib-20210822~d383792/m4/sha256.m4����������������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0016074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha256.m4 serial 8 dnl Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SHA256], [ dnl Prerequisites of lib/sha256.c. AC_REQUIRE([gl_BIGENDIAN]) dnl Determine HAVE_OPENSSL_SHA256 and LIB_CRYPTO gl_CRYPTO_CHECK([SHA256]) ]) ����������������������������������������������������������gnulib-20210822~d383792/m4/sha512.m4����������������������������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0016065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha512.m4 serial 9 dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SHA512], [ dnl Prerequisites of lib/sha512.c. AC_REQUIRE([gl_BIGENDIAN]) dnl Determine HAVE_OPENSSL_SHA512 and LIB_CRYPTO gl_CRYPTO_CHECK([SHA512]) ]) �����������������������������������������������������gnulib-20210822~d383792/m4/sig2str.m4���������������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0016457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SIG2STR], [ AC_CHECK_FUNCS([sig2str]) ]) # Prerequisites of lib/sig2str.c. AC_DEFUN([gl_PREREQ_SIG2STR], [ : ]) �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sig_atomic_t.m4����������������������������������������������������������0000664�0000000�0000000�00000001103�14110572173�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sig_atomic_t.m4 serial 3 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gt_TYPE_SIG_ATOMIC_T], [ AC_CHECK_TYPES([sig_atomic_t], , [AC_DEFINE([sig_atomic_t], [int], [Define as an integer type suitable for memory locations that can be accessed atomically even in the presence of asynchronous signals.])], [#include <signal.h>]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigabbrev_np.m4����������������������������������������������������������0000664�0000000�0000000�00000001065�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigabbrev_np.m4 serial 2 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SIGABBREV_NP], [ dnl Persuade glibc <string.h> to declare sigabbrev_np(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([sigabbrev_np]) if test $ac_cv_func_sigabbrev_np = no; then HAVE_SIGABBREV_NP=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigaction.m4�������������������������������������������������������������0000664�0000000�0000000�00000002325�14110572173�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigaction.m4 serial 7 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine if sigaction interface is present. AC_DEFUN([gl_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([sigaction]) if test $ac_cv_func_sigaction = yes; then AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , [[#include <signal.h>]]) if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 fi else HAVE_SIGACTION=0 fi ]) # Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c. AC_DEFUN([gl_PREREQ_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_UID_T]) AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H]) AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt]) AC_CHECK_TYPES([siginfo_t], [], [], [[ #include <signal.h> ]]) if test $ac_cv_type_siginfo_t = no; then HAVE_SIGINFO_T=0 fi ]) # Prerequisites of lib/sig-handler.h. AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigaltstack.m4�����������������������������������������������������������0000664�0000000�0000000�00000014141�14110572173�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigaltstack.m4 serial 15 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Written by Bruno Haible and Eric Blake. AC_DEFUN([SV_SIGALTSTACK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([sigaltstack setrlimit]) if test "$ac_cv_func_sigaltstack" = yes; then AC_CHECK_TYPE([stack_t], , [AC_DEFINE(stack_t, [struct sigaltstack], [Define to 'struct sigaltstack' if that's the type of the argument to sigaltstack]) ], [ #include <signal.h> #if HAVE_SYS_SIGNAL_H # include <sys/signal.h> #endif ]) fi AC_CACHE_CHECK([for working sigaltstack], [sv_cv_sigaltstack], [ if test "$ac_cv_func_sigaltstack" = yes; then case "$host_os" in macos* | darwin[[6-9]]* | darwin[[1-9]][[0-9]]*) # On MacOS X 10.2 or newer, just assume that if it compiles, it will # work. If we were to perform the real test, 1 Crash Report dialog # window would pop up. AC_LINK_IFELSE([ AC_LANG_PROGRAM([[#include <signal.h>]], [[int x = SA_ONSTACK; stack_t ss; sigaltstack ((stack_t*)0, &ss);]])], [sv_cv_sigaltstack="guessing yes"], [sv_cv_sigaltstack=no]) ;; *) AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include <stdlib.h> #include <signal.h> #if HAVE_SYS_SIGNAL_H # include <sys/signal.h> #endif #if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif void stackoverflow_handler (int sig) { /* If we get here, the stack overflow was caught. */ exit (0); } volatile int * recurse_1 (volatile int n, volatile int *p) { if (n >= 0) *recurse_1 (n + 1, p) += n; return p; } int recurse (volatile int n) { int sum = 0; return *recurse_1 (n, &sum); } char mystack[2 * (1 << 24)]; int main () { stack_t altstack; struct sigaction action; #if defined HAVE_SETRLIMIT && defined RLIMIT_STACK /* Before starting the endless recursion, try to be friendly to the user's machine. On some Linux 2.2.x systems, there is no stack limit for user processes at all. We don't want to kill such systems. */ struct rlimit rl; rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ setrlimit (RLIMIT_STACK, &rl); #endif /* Install the alternate stack. Use the midpoint of mystack, to guard against a buggy interpretation of ss_sp on IRIX. */ #ifdef SIGSTKSZ if (sizeof mystack / 2 < SIGSTKSZ) exit (3); #endif altstack.ss_sp = mystack + sizeof mystack / 2; altstack.ss_size = sizeof mystack / 2; altstack.ss_flags = 0; /* no SS_DISABLE */ if (sigaltstack (&altstack, NULL) < 0) exit (1); /* Install the SIGSEGV handler. */ sigemptyset (&action.sa_mask); action.sa_handler = &stackoverflow_handler; action.sa_flags = SA_ONSTACK; sigaction (SIGSEGV, &action, (struct sigaction *) NULL); sigaction (SIGBUS, &action, (struct sigaction *) NULL); /* Provoke a stack overflow. */ recurse (0); exit (2); }]])], [sv_cv_sigaltstack=yes], [sv_cv_sigaltstack=no], [ dnl FIXME: Put in some more known values here. case "$host_os" in *) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[#include <signal.h>]], [[int x = SA_ONSTACK; stack_t ss; sigaltstack ((stack_t*)0, &ss);]])], [sv_cv_sigaltstack="guessing yes"], [sv_cv_sigaltstack=no]) ;; esac ]) ;; esac else sv_cv_sigaltstack=no fi ]) if test "$sv_cv_sigaltstack" != no; then AC_DEFINE([HAVE_WORKING_SIGALTSTACK], [1], [Define if you have the sigaltstack() function and it works.]) dnl The ss_sp field of a stack_t is, according to POSIX, the lowest address dnl of the memory block designated as an alternate stack. But IRIX 5.3 dnl interprets it as the highest address! AC_CACHE_CHECK([for correct stack_t interpretation], [sv_cv_sigaltstack_low_base], [ AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include <stdlib.h> #include <signal.h> #if HAVE_SYS_SIGNAL_H # include <sys/signal.h> #endif volatile char *stack_lower_bound; volatile char *stack_upper_bound; static void check_stack_location (volatile char *addr) { if (addr >= stack_lower_bound && addr <= stack_upper_bound) exit (0); else exit (1); } static void stackoverflow_handler (int sig) { char dummy; check_stack_location (&dummy); } char mystack[2 * (1 << 24)]; int main () { stack_t altstack; struct sigaction action; /* Install the alternate stack. */ altstack.ss_sp = mystack + sizeof mystack / 2; altstack.ss_size = sizeof mystack / 2; stack_lower_bound = (char *) altstack.ss_sp; stack_upper_bound = (char *) altstack.ss_sp + altstack.ss_size - 1; altstack.ss_flags = 0; /* no SS_DISABLE */ if (sigaltstack (&altstack, NULL) < 0) exit (2); /* Install the SIGSEGV handler. */ sigemptyset (&action.sa_mask); action.sa_handler = &stackoverflow_handler; action.sa_flags = SA_ONSTACK; if (sigaction (SIGSEGV, &action, (struct sigaction *) NULL) < 0) exit(3); /* Provoke a SIGSEGV. */ raise (SIGSEGV); exit (3); }]])], [sv_cv_sigaltstack_low_base=yes], [sv_cv_sigaltstack_low_base=no], [ dnl FIXME: Put in some more known values here. case "$host_os" in irix5*) sv_cv_sigaltstack_low_base="no" ;; *) sv_cv_sigaltstack_low_base="guessing yes" ;; esac ]) ]) if test "$sv_cv_sigaltstack_low_base" = no; then AC_DEFINE([SIGALTSTACK_SS_REVERSED], [1], [Define if sigaltstack() interprets the stack_t.ss_sp field incorrectly, as the highest address of the alternate stack range rather than as the lowest address.]) fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigdescr_np.m4�����������������������������������������������������������0000664�0000000�0000000�00000001057�14110572173�0017364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigdescr_np.m4 serial 2 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SIGDESCR_NP], [ dnl Persuade glibc <string.h> to declare sigdescr_np(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([sigdescr_np]) if test $ac_cv_func_sigdescr_np = no; then HAVE_SIGDESCR_NP=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/signal_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000007315�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signal_h.m4 serial 22 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SIGNAL_H], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) gl_NEXT_HEADERS([signal.h]) # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. AC_CHECK_TYPE([volatile sig_atomic_t], [], [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ #include <signal.h> ]]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) AC_REQUIRE([AC_TYPE_UID_T]) dnl Persuade glibc <signal.h> to define sighandler_t. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ #include <signal.h> ]]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <signal.h> ]], [pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], [ AC_CHECK_TYPES([sigset_t], [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], [[ #include <signal.h> /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ #include <sys/types.h> ]]) if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi ]) # gl_SIGNAL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SIGNAL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SIGNAL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAISE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGPROCMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGACTION]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) ]) AC_DEFUN([gl_SIGNAL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/signalblocking.m4��������������������������������������������������������0000664�0000000�0000000�00000001562�14110572173�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signalblocking.m4 serial 17 dnl Copyright (C) 2001-2002, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine available signal blocking primitives. Three different APIs exist: # 1) POSIX: sigemptyset, sigaddset, sigprocmask # 2) SYSV: sighold, sigrelse # 3) BSD: sigblock, sigsetmask # For simplicity, here we check only for the POSIX signal blocking. AC_DEFUN([gl_SIGNALBLOCKING], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then AC_CHECK_FUNC([sigprocmask], [HAVE_POSIX_SIGNALBLOCKING=1]) fi ]) # Prerequisites of lib/sigprocmask.c. AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/signbit.m4���������������������������������������������������������������0000664�0000000�0000000�00000031057�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signbit.m4 serial 20 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SIGNBIT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; esac ]) ]) dnl GCC >= 4.0 and clang provide three built-ins for signbit. dnl They can be used without warnings, also in C++, regardless of <math.h>. dnl But they may expand to calls to functions, which may or may not be in dnl libc. AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_builtins], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit_builtins=yes], [gl_cv_func_signbit_builtins=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw*) if test -n "$GCC"; then gl_cv_func_signbit_builtins="guessing yes" else gl_cv_func_signbit_builtins="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; esac ]) ]) dnl Use the compiler built-ins whenever possible, because they are more dnl efficient than the system library functions (if they exist). case "$gl_cv_func_signbit_builtins" in *yes) REPLACE_SIGNBIT_USING_BUILTINS=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. REPLACE_SIGNBIT=1 ;; esac ;; esac dnl On Solaris 10, with CC in C++ mode, signbit is not available although dnl is with cc in C mode. This cannot be worked around by defining dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on dnl Solaris 11.0. Therefore use the replacement functions on Solaris. case "$host_os" in solaris*) REPLACE_SIGNBIT=1 ;; esac if test $REPLACE_SIGNBIT = 1; then gl_FLOAT_SIGN_LOCATION gl_DOUBLE_SIGN_LOCATION gl_LONG_DOUBLE_SIGN_LOCATION if test "$gl_cv_cc_float_signbit" = unknown; then dnl Test whether copysignf() is declared. AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignf" = yes; then dnl Test whether copysignf() can be used without libm. AC_CACHE_CHECK([whether copysignf can be used without linking with libm], [gl_cv_func_copysignf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> float x, y;]], [[return copysignf (x, y) < 0;]])], [gl_cv_func_copysignf_no_libm=yes], [gl_cv_func_copysignf_no_libm=no]) ]) if test $gl_cv_func_copysignf_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], [Define if the copysignf function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then dnl Test whether copysign() is declared. AC_CHECK_DECLS([copysign], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysign" = yes; then dnl Test whether copysign() can be used without libm. AC_CACHE_CHECK([whether copysign can be used without linking with libm], [gl_cv_func_copysign_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x, y;]], [[return copysign (x, y) < 0;]])], [gl_cv_func_copysign_no_libm=yes], [gl_cv_func_copysign_no_libm=no]) ]) if test $gl_cv_func_copysign_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], [Define if the copysign function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then dnl Test whether copysignl() is declared. AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignl" = yes; then dnl Test whether copysignl() can be used without libm. AC_CACHE_CHECK([whether copysignl can be used without linking with libm], [gl_cv_func_copysignl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x, y;]], [[return copysignl (x, y) < 0;]])], [gl_cv_func_copysignl_no_libm=yes], [gl_cv_func_copysignl_no_libm=no]) ]) if test $gl_cv_func_copysignl_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], [Define if the copysignl function is declared in <math.h> and available in libc.]) fi fi fi fi ]) AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } ]]) AC_DEFUN([gl_FLOAT_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) ]) AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) ]) AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) ]) AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], [ AC_CACHE_CHECK([where to find the sign bit in a '$1'], [$2], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { $1 value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0$3 }; static memory_float minus = { -1.0$3 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } ]])], [$2=`cat conftest.out`], [$2="unknown"], [ dnl When cross-compiling, we don't know. It depends on the dnl ABI and compiler version. There are too many cases. $2="unknown" ]) rm -f conftest.out ]) case "$]$2[" in word*bit*) word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$]$2[" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], [Define as the word index where to find the sign of '$1'.]) AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], [Define as the bit index in the word where to find the sign of '$1'.]) ;; esac ]) # Expands to code that defines a function signbitf(float). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) ]) # Expands to code that defines a function signbitd(double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) ]) # Expands to code that defines a function signbitl(long double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) ]) AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], [[ static int signbit$2 ($1 value) { typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ float_union u; unsigned int i; u.f = value; for (i = 0; i < sizeof ($1); i++) if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) return 1; return 0; } ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigpipe.m4���������������������������������������������������������������0000664�0000000�0000000�00000001547�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigpipe.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether SIGPIPE is provided by <signal.h>. dnl Sets gl_cv_header_signal_h_SIGPIPE. AC_DEFUN([gl_SIGNAL_SIGPIPE], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SIGNAL_SIGPIPE_BODY]) ]) AC_DEFUN([gl_SIGNAL_SIGPIPE_BODY], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for SIGPIPE], [gl_cv_header_signal_h_SIGPIPE], [ AC_EGREP_CPP([booboo],[ #include <signal.h> #if !defined SIGPIPE booboo #endif ], [gl_cv_header_signal_h_SIGPIPE=no], [gl_cv_header_signal_h_SIGPIPE=yes]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sigsegv.m4���������������������������������������������������������������0000664�0000000�0000000�00000001213�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigsegv.m4 serial 1 dnl Copyright (C) 2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN_ONCE([gl_SIGSEGV], [ AC_ARG_WITH([libsigsegv], [AS_HELP_STRING([--with-libsigsegv], [use the GNU libsigsegv library, when present, instead of the gnulib module 'sigsegv'])]) if test "$with_libsigsegv" = yes; then gl_LIBSIGSEGV gl_sigsegv_uses_libsigsegv="$gl_cv_lib_sigsegv" else gl_sigsegv_uses_libsigsegv=no fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sin.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0015654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sin.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SIN], [ dnl Determine SIN_LIBM. gl_COMMON_DOUBLE_MATHFUNC([sin]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sinf.m4������������������������������������������������������������������0000664�0000000�0000000�00000002053�14110572173�0016020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SINF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_SIN]) dnl Persuade glibc <math.h> to declare sinf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether sinf() exists. Assume that sinf(), if it exists, is dnl defined in the same library as sin(). save_LIBS="$LIBS" LIBS="$LIBS $SIN_LIBM" AC_CHECK_FUNCS([sinf]) LIBS="$save_LIBS" if test $ac_cv_func_sinf = yes; then SINF_LIBM="$SIN_LIBM" else HAVE_SINF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_sinf, not sinf. AC_CHECK_DECLS([sinf], [REPLACE_SINF=1], , [[#include <math.h>]]) SINF_LIBM="$SIN_LIBM" fi AC_SUBST([SINF_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sinh.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinh.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SINH], [ dnl Determine SINH_LIBM. gl_COMMON_DOUBLE_MATHFUNC([sinh]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sinhf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinhf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SINHF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_SINH]) dnl Persuade glibc <math.h> to declare sinhf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether sinhf() exists. Assume that sinhf(), if it exists, is dnl defined in the same library as sinh(). save_LIBS="$LIBS" LIBS="$LIBS $SINH_LIBM" AC_CHECK_FUNCS([sinhf]) LIBS="$save_LIBS" if test $ac_cv_func_sinhf = yes; then SINHF_LIBM="$SINH_LIBM" else HAVE_SINHF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_sinhf, not sinhf. AC_CHECK_DECLS([sinhf], [REPLACE_SINHF=1], , [[#include <math.h>]]) SINHF_LIBM="$SINH_LIBM" fi AC_SUBST([SINHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sinl.m4������������������������������������������������������������������0000664�0000000�0000000�00000006037�14110572173�0016034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SINL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare sinl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) SINL_LIBM= AC_CACHE_CHECK([whether sinl() can be used without linking with libm], [gl_cv_func_sinl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = sinl; long double x;]], [[return funcptr (x) > 0.4 || sinl (x) > 0.4;]])], [gl_cv_func_sinl_no_libm=yes], [gl_cv_func_sinl_no_libm=no]) ]) if test $gl_cv_func_sinl_no_libm = no; then AC_CACHE_CHECK([whether sinl() can be used with libm], [gl_cv_func_sinl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = sinl; long double x;]], [[return funcptr (x) > 0.4 || sinl (x) > 0.4;]])], [gl_cv_func_sinl_in_libm=yes], [gl_cv_func_sinl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_sinl_in_libm = yes; then SINL_LIBM=-lm fi fi if test $gl_cv_func_sinl_no_libm = yes \ || test $gl_cv_func_sinl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has sinl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([sinl], , [HAVE_DECL_SINL=0], [[#include <math.h>]]) else HAVE_DECL_SINL=0 HAVE_SINL=0 dnl Find libraries needed to link lib/sinl.c, lib/sincosl.c, lib/trigl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_SIN]) SINL_LIBM="$SIN_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FLOOR]) AC_REQUIRE([gl_FUNC_FLOORL]) dnl Append $ISNANL_LIBM to SINL_LIBM, avoiding gratuitous duplicates. case " $SINL_LIBM " in *" $ISNANL_LIBM "*) ;; *) SINL_LIBM="$SINL_LIBM $ISNANL_LIBM" ;; esac dnl Append $FLOOR_LIBM to SINL_LIBM, avoiding gratuitous duplicates. case " $SINL_LIBM " in *" $FLOOR_LIBM "*) ;; *) SINL_LIBM="$SINL_LIBM $FLOOR_LIBM" ;; esac dnl Append $FLOORL_LIBM to SINL_LIBM, avoiding gratuitous duplicates. case " $SINL_LIBM " in *" $FLOORL_LIBM "*) ;; *) SINL_LIBM="$SINL_LIBM $FLOORL_LIBM" ;; esac fi fi AC_SUBST([SINL_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/size_max.m4��������������������������������������������������������������0000664�0000000�0000000�00000005476�14110572173�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# size_max.m4 serial 12 dnl Copyright (C) 2003, 2005-2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max=no AC_EGREP_CPP([Found it], [ #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test $gl_cv_size_max != yes; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include <stddef.h> #include <limits.h>], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include <stddef.h>], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sleep.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004472�14110572173�0016200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sleep.m4 serial 11 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We expect to see the declaration of sleep() in a header file. dnl Older versions of mingw have a sleep() function that is an alias to dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): dnl it takes the number of milliseconds as argument and returns void. dnl mingw does not declare this function. AC_CHECK_DECLS([sleep], , , [[#include <unistd.h>]]) AC_CHECK_FUNCS_ONCE([sleep]) if test $ac_cv_have_decl_sleep != yes; then HAVE_SLEEP=0 else dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <errno.h> #include <unistd.h> #include <signal.h> static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (2); } ]], [[ /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack sleep. */ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); if (remaining > pentecost) return 3; if (remaining <= pentecost - 10) return 4; return 0; ]])], [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_sleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_sleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_sleep_works" in *yes) ;; *) REPLACE_SLEEP=1 ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sm3.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0015557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sm3.m4 serial 2 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SM3], [ dnl Prerequisites of lib/sm3.h. AC_REQUIRE([AC_C_RESTRICT]) dnl Prerequisites of lib/sm3.c. AC_REQUIRE([gl_BIGENDIAN]) dnl Currently openssl still doesn't support sm3. m4_divert_once([DEFAULTS], [LIB_CRYPTO=]) AC_SUBST([LIB_CRYPTO]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/snprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000014010�14110572173�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# snprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SNPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_snprintf_posix=no AC_CHECK_FUNCS([snprintf]) if test $ac_cv_func_snprintf = yes; then gl_SNPRINTF_TRUNCATION_C99 gl_SNPRINTF_RETVAL_C99 gl_SNPRINTF_DIRECTIVE_N gl_SNPRINTF_SIZE1 gl_VSNPRINTF_ZEROSIZE_C99 case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) case "$gl_cv_func_snprintf_truncation_c99" in *yes) case "$gl_cv_func_snprintf_retval_c99" in *yes) case "$gl_cv_func_snprintf_directive_n" in *yes) case "$gl_cv_func_snprintf_size1" in *yes) case "$gl_cv_func_vsnprintf_zerosize_c99" in *yes) # snprintf exists and is # already POSIX compliant. gl_cv_func_snprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac fi if test $gl_cv_func_snprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_SNPRINTF fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/snprintf.m4��������������������������������������������������������������0000664�0000000�0000000�00000003567�14110572173�0016737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# snprintf.m4 serial 7 dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Libintl 0.17 will replace snprintf only if it does not support %1$s, dnl but defers to any gnulib snprintf replacements. Therefore, gnulib dnl must guarantee that the decision for replacing snprintf is a superset dnl of the reasons checked by libintl. AC_DEFUN([gl_FUNC_SNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_cv_func_snprintf_usable=no AC_CHECK_FUNCS([snprintf]) if test $ac_cv_func_snprintf = yes; then gl_SNPRINTF_SIZE1 case "$gl_cv_func_snprintf_size1" in *yes) gl_SNPRINTF_RETVAL_C99 case "$gl_cv_func_snprintf_retval_c99" in *yes) gl_PRINTF_POSITIONS case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_snprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_snprintf_usable = no; then gl_REPLACE_SNPRINTF fi AC_CHECK_DECLS_ONCE([snprintf]) if test $ac_cv_have_decl_snprintf = no; then HAVE_DECL_SNPRINTF=0 fi ]) AC_DEFUN([gl_REPLACE_SNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([snprintf]) if test $ac_cv_func_snprintf = yes; then REPLACE_SNPRINTF=1 else AC_CHECK_DECLS_ONCE([snprintf]) if test $ac_cv_have_decl_snprintf = yes; then dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_snprintf, not snprintf. REPLACE_SNPRINTF=1 fi fi gl_PREREQ_SNPRINTF ]) # Prerequisites of lib/snprintf.c. AC_DEFUN([gl_PREREQ_SNPRINTF], [:]) �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/socketlib.m4�������������������������������������������������������������0000664�0000000�0000000�00000006076�14110572173�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socketlib.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_SOCKETLIB dnl Determines the library to use for socket functions. dnl Sets and AC_SUBSTs LIBSOCKET. AC_DEFUN([gl_SOCKETLIB], [ gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H LIBSOCKET= if test $HAVE_WINSOCK2_H = 1; then dnl Native Windows API (not Cygwin). dnl If the function WSAStartup exists (declared in <winsock2.h> and dnl defined through -lws2_32), we need to call it. AC_CACHE_CHECK([for WSAStartup], [gl_cv_func_wsastartup], [ gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #ifdef HAVE_WINSOCK2_H # include <winsock2.h> #endif]], [[ WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); WSACleanup (); ]]) ], [gl_cv_func_wsastartup=yes], [gl_cv_func_wsastartup=no]) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_func_wsastartup" = "yes"; then AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.]) LIBSOCKET='-lws2_32' fi else dnl Unix API. dnl Solaris has most socket functions in libsocket. dnl Haiku has most socket functions in libnetwork. dnl BeOS has most socket functions in libnet. dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would dnl break code (e.g. in libraries) that invokes accept(), getpeername(), dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See dnl "man xopen_networking" for details. AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [ gl_cv_lib_socket= AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [], [gl_save_LIBS="$LIBS" LIBS="$gl_save_LIBS -lsocket" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lsocket"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnetwork" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnetwork"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnet" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnet"]) fi fi LIBS="$gl_save_LIBS" ]) if test -z "$gl_cv_lib_socket"; then gl_cv_lib_socket="none needed" fi ]) if test "$gl_cv_lib_socket" != "none needed"; then LIBSOCKET="$gl_cv_lib_socket" fi fi AC_SUBST([LIBSOCKET]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sockets.m4���������������������������������������������������������������0000664�0000000�0000000�00000000707�14110572173�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockets.m4 serial 7 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SOCKETS], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([gl_SOCKETLIB]) gl_PREREQ_SOCKETS ]) # Prerequisites of lib/sockets.c. AC_DEFUN([gl_PREREQ_SOCKETS], [ : ]) ���������������������������������������������������������gnulib-20210822~d383792/m4/socklen.m4���������������������������������������������������������������0000664�0000000�0000000�00000006157�14110572173�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socklen.m4 serial 11 dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Albert Chin, Windows fixes from Simon Josefsson. dnl Check for socklen_t: historically on BSD it is an int, and in dnl POSIX 1g it is a type of its own, but some platforms use different dnl types for the argument to getsockopt, getpeername, etc.: dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. dnl So we have to test to find something that will work. AC_DEFUN([gl_TYPE_SOCKLEN_T], [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl AC_CHECK_TYPE([socklen_t], , [AC_CACHE_CHECK([for socklen_t equivalent], [gl_cv_socklen_t_equiv], [# Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t "unsigned int" "long int" "unsigned long int"; do AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/socket.h> int getpeername (int, $arg2 *, $t *);]], [[$t len; getpeername (0, 0, &len);]])], [gl_cv_socklen_t_equiv="$t"]) test "$gl_cv_socklen_t_equiv" != "" && break done test "$gl_cv_socklen_t_equiv" != "" && break done if test "$gl_cv_socklen_t_equiv" = ""; then AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) fi ]) AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], [type to use in place of socklen_t if not defined])], [gl_SOCKET_HEADERS])]) dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. dnl When you change this macro, keep also in sync: dnl - gl_CHECK_SOCKET_HEADERS, dnl - the Include section of modules/socklen. AC_DEFUN([gl_SOCKET_HEADERS], [ /* <sys/types.h> is not needed according to POSIX, but the <sys/socket.h> in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #elif HAVE_WS2TCPIP_H # include <ws2tcpip.h> #endif ]) dnl Tests for the existence of the header for socket facilities. dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. dnl This macro must match gl_SOCKET_HEADERS. AC_DEFUN([gl_CHECK_SOCKET_HEADERS], [AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h = no; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([ws2tcpip.h]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sockpfaf.m4��������������������������������������������������������������0000664�0000000�0000000�00000004767�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockpfaf.m4 serial 10 dnl Copyright (C) 2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...) dnl and some common address families (AF_INET, AF_INET6, ...). dnl This test assumes that a system supports an address family if and only if dnl it supports the corresponding protocol family. dnl From Bruno Haible. AC_DEFUN([gl_SOCKET_FAMILIES], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) AC_CACHE_CHECK([for IPv4 sockets], [gl_cv_socket_ipv4], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif]], [[int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) if test $gl_cv_socket_ipv4 = yes; then AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if <sys/socket.h> defines AF_INET.]) fi AC_CACHE_CHECK([for IPv6 sockets], [gl_cv_socket_ipv6], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif]], [[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) if test $gl_cv_socket_ipv6 = yes; then AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if <sys/socket.h> defines AF_INET6.]) fi ]) AC_DEFUN([gl_SOCKET_FAMILY_UNIX], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_CHECK_HEADERS_ONCE([sys/un.h]) AC_CACHE_CHECK([for UNIX domain sockets], [gl_cv_socket_unix], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_SYS_UN_H #include <sys/un.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif]], [[int x = AF_UNIX; struct sockaddr_un y; if (&x && &y) return 0;]])], gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) if test $gl_cv_socket_unix = yes; then AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if <sys/socket.h> defines AF_UNIX.]) fi ]) ���������gnulib-20210822~d383792/m4/sparcv8+.m4��������������������������������������������������������������0000664�0000000�0000000�00000003164�14110572173�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sparcv8+.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl When compiling for SPARC in 32-bit mode, make sure that instructions for dnl SPARC v8+ are accepted. This is necessary for multiprocessing (for dnl instructions like 'membar' or 'cas'). All SPARC CPUs made since 1993 dnl support this instruction set. But GCC in its default configuration, in dnl 32-bit mode (64-bit mode assumes SPARC v9 or newer), still defaults to dnl SPARC v7 instruction set: "By default (unless configured otherwise), GCC dnl generates code for the V7 variant of the SPARC architecture." See dnl <https://gcc.gnu.org/onlinedocs/gcc-4.6.4/gcc/SPARC-Options.html> dnl <https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/SPARC-Options.html> AC_DEFUN([gl_SPARC_V8PLUS], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_cpu" in sparc*) if test -n "$GCC"; then AC_CACHE_CHECK([whether SPARC v8+ instructions are supported], [gl_cv_sparc_v8plus], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[asm volatile ("membar 2");]])], [gl_cv_sparc_v8plus=yes], [gl_cv_sparc_v8plus=no]) ]) if test $gl_cv_sparc_v8plus = no; then dnl Strangely enough, '-mv8plus' does not have the desired effect. dnl But '-mcpu=v9' does. CC="$CC -mcpu=v9" CXX="$CXX -mcpu=v9" fi fi ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/spawn-pipe.m4������������������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0017144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# spawn-pipe.m4 serial 2 dnl Copyright (C) 2004, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SPAWN_PIPE], [ dnl Prerequisites of lib/spawn-pipe.c. AC_REQUIRE([AC_TYPE_MODE_T]) ]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/spawn_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000015160�14110572173�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# spawn_h.m4 serial 21 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SPAWN_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) dnl <spawn.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([spawn.h]) if test $ac_cv_header_spawn_h = yes; then HAVE_SPAWN_H=1 AC_CHECK_TYPES([posix_spawnattr_t], [], [HAVE_POSIX_SPAWNATTR_T=0], [[ #include <spawn.h> ]]) AC_CHECK_TYPES([posix_spawn_file_actions_t], [], [HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0], [[ #include <spawn.h> ]]) else HAVE_SPAWN_H=0 HAVE_POSIX_SPAWNATTR_T=0 HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 fi AC_SUBST([HAVE_SPAWN_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) AC_REQUIRE([AC_C_RESTRICT]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <spawn.h> ]], [posix_spawn posix_spawnp posix_spawnattr_init posix_spawnattr_destroy posix_spawnattr_getsigdefault posix_spawnattr_setsigdefault posix_spawnattr_getsigmask posix_spawnattr_setsigmask posix_spawnattr_getflags posix_spawnattr_setflags posix_spawnattr_getpgroup posix_spawnattr_setpgroup posix_spawnattr_getschedpolicy posix_spawnattr_setschedpolicy posix_spawnattr_getschedparam posix_spawnattr_setschedparam posix_spawn_file_actions_init posix_spawn_file_actions_destroy posix_spawn_file_actions_addopen posix_spawn_file_actions_addclose posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addchdir posix_spawn_file_actions_addfchdir]) ]) dnl Checks whether the system has the functions posix_spawn. dnl Sets ac_cv_func_posix_spawn and HAVE_POSIX_SPAWN. AC_DEFUN([gl_HAVE_POSIX_SPAWN], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) LIB_POSIX_SPAWN= AC_SUBST([LIB_POSIX_SPAWN]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([posix_spawn], [rt], [test "$ac_cv_search_posix_spawn" = "none required" || LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn]) AC_CHECK_FUNCS([posix_spawn]) LIBS=$gl_saved_libs if test $ac_cv_func_posix_spawn != yes; then HAVE_POSIX_SPAWN=0 fi ]) # gl_SPAWN_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SPAWN_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SPAWN_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SPAWN_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_INIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_DESTROY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SPAWN_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) ]) AC_DEFUN([gl_SPAWN_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) HAVE_POSIX_SPAWNATTR_T=1; AC_SUBST([HAVE_POSIX_SPAWNATTR_T]) HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_T]) HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010233�14110572173�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sprintf-posix.m4 serial 12 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_sprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # sprintf exists and is # already POSIX compliant. gl_cv_func_sprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_sprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_SPRINTF fi ]) AC_DEFUN([gl_REPLACE_SPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([sprintf]) REPLACE_SPRINTF=1 gl_PREREQ_SPRINTF ]) AC_DEFUN([gl_PREREQ_SPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sqrt.m4������������������������������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0016052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrt.m4 serial 3 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SQRT], [ gl_COMMON_DOUBLE_MATHFUNC([sqrt]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sqrtf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrtf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SQRTF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_SQRT]) dnl Persuade glibc <math.h> to declare sqrtf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether sqrtf() exists. Assume that sqrtf(), if it exists, is dnl defined in the same library as sqrt(). save_LIBS="$LIBS" LIBS="$LIBS $SQRT_LIBM" AC_CHECK_FUNCS([sqrtf]) LIBS="$save_LIBS" if test $ac_cv_func_sqrtf = yes; then SQRTF_LIBM="$SQRT_LIBM" else HAVE_SQRTF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_sqrtf, not sqrtf. AC_CHECK_DECLS([sqrtf], [REPLACE_SQRTF=1], , [[#include <math.h>]]) SQRTF_LIBM="$SQRT_LIBM" fi AC_SUBST([SQRTF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sqrtl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011522�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrtl.m4 serial 11 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SQRTL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare sqrtl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) SQRTL_LIBM= AC_CACHE_CHECK([whether sqrtl() can be used without linking with libm], [gl_cv_func_sqrtl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = sqrtl; long double x;]], [[return funcptr (x) > 0.4 || sqrtl (x) > 0.4;]])], [gl_cv_func_sqrtl_no_libm=yes], [gl_cv_func_sqrtl_no_libm=no]) ]) if test $gl_cv_func_sqrtl_no_libm = no; then AC_CACHE_CHECK([whether sqrtl() can be used with libm], [gl_cv_func_sqrtl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = sqrtl; long double x;]], [[return funcptr (x) > 0.4 || sqrtl (x) > 0.4;]])], [gl_cv_func_sqrtl_in_libm=yes], [gl_cv_func_sqrtl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_sqrtl_in_libm = yes; then SQRTL_LIBM=-lm fi fi if test $gl_cv_func_sqrtl_no_libm = yes \ || test $gl_cv_func_sqrtl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has sqrtl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([sqrtl], , [HAVE_DECL_SQRTL=0], [[#include <math.h>]]) save_LIBS="$LIBS" LIBS="$LIBS $SQRTL_LIBM" gl_FUNC_SQRTL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_sqrtl_works" in *yes) ;; *) REPLACE_SQRTL=1 ;; esac else HAVE_DECL_SQRTL=0 HAVE_SQRTL=0 fi if test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; then dnl Find libraries needed to link lib/sqrtl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_SQRT]) SQRTL_LIBM="$SQRT_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FREXPL]) AC_REQUIRE([gl_FUNC_LDEXPL]) AC_REQUIRE([gl_FUNC_SQRT]) dnl Append $ISNANL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates. case " $SQRTL_LIBM " in *" $ISNANL_LIBM "*) ;; *) SQRTL_LIBM="$SQRTL_LIBM $ISNANL_LIBM" ;; esac dnl Append $FREXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates. case " $SQRTL_LIBM " in *" $FREXPL_LIBM "*) ;; *) SQRTL_LIBM="$SQRTL_LIBM $FREXPL_LIBM" ;; esac dnl Append $LDEXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates. case " $SQRTL_LIBM " in *" $LDEXPL_LIBM "*) ;; *) SQRTL_LIBM="$SQRTL_LIBM $LDEXPL_LIBM" ;; esac dnl Append $SQRT_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates. case " $SQRTL_LIBM " in *" $SQRT_LIBM "*) ;; *) SQRTL_LIBM="$SQRTL_LIBM $SQRT_LIBM" ;; esac fi fi AC_SUBST([SQRTL_LIBM]) ]) dnl Test whether sqrtl() works. dnl On OpenBSD 5.1/SPARC, sqrtl(8.1974099812331540680810141969554806865L) has dnl rounding errors that eat up the last 8 to 9 decimal digits. AC_DEFUN([gl_FUNC_SQRTL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether sqrtl works], [gl_cv_func_sqrtl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> #ifndef sqrtl /* for AIX */ extern #ifdef __cplusplus "C" #endif long double sqrtl (long double); #endif static long double my_ldexpl (long double x, int d) { for (; d > 0; d--) x *= 2.0L; for (; d < 0; d++) x *= 0.5L; return x; } volatile long double x; volatile long double y; long double z; int main () { x = 8.1974099812331540680810141969554806865L; y = sqrtl (x); z = y * y - x; z = my_ldexpl (z, LDBL_MANT_DIG); if (z < 0) z = - z; if (z > 100.0L) return 1; return 0; } ]])], [gl_cv_func_sqrtl_works=yes], [gl_cv_func_sqrtl_works=no], [case "$host_os" in openbsd*) gl_cv_func_sqrtl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_sqrtl_works="guessing yes" ;; *) gl_cv_func_sqrtl_works="guessing yes" ;; esac ]) ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ssize_t.m4���������������������������������������������������������������0000664�0000000�0000000�00000001463�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h>]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stack-direction.m4�������������������������������������������������������0000664�0000000�0000000�00000005305�14110572173�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stack-direction.m4 serial 7 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Written by Bruno Haible. # Determine the stack direction. Define the C macro STACK_DIRECTION. AC_DEFUN([SV_STACK_DIRECTION], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for stack direction], [sv_cv_stack_direction_msg], [ case "$host_cpu" in dnl See the #define STACK_GROWS_DOWNWARD in gcc-3.1/gcc/config/*/*.h. a29k | \ aarch64* | \ alpha* | \ arc | \ arm* | strongarm* | xscale* | \ avr | avr32 | \ bfin | \ c1 | c2 | c32 | c34 | c38 | \ clipper | \ cris | \ d30v | \ elxsi | \ fr30 | \ h8300 | \ i?86 | x86_64 | \ i860 | \ ia64 | \ m32r | \ m68* | \ m88k | \ mcore | \ microblaze | \ mips* | \ mmix | \ mn10200 | \ mn10300 | \ nios2 | \ nds32* | \ ns32k | \ pdp11 | \ pj* | \ powerpc* | rs6000 | \ riscv* | \ romp | \ s390* | \ sh* | \ sparc* | \ v850 | \ vax | \ xtensa) sv_cv_stack_direction=-1 ;; c4x | \ dsp16xx | \ i960 | \ hppa* | parisc* | \ stormy16 | \ we32k) sv_cv_stack_direction=1 ;; *) if test $cross_compiling = no; then cat > conftest.c <<EOF #include <stdio.h> int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char *argv[]) { printf ("%d\n", find_stack_direction (NULL, argc + 20)); return 0; } EOF AC_TRY_EVAL([ac_link]) sv_cv_stack_direction=`./conftest` else sv_cv_stack_direction=0 fi ;; esac case $sv_cv_stack_direction in 1) sv_cv_stack_direction_msg="grows up";; -1) sv_cv_stack_direction_msg="grows down";; *) sv_cv_stack_direction_msg="unknown";; esac ]) AC_DEFINE_UNQUOTED([STACK_DIRECTION], [$sv_cv_stack_direction], [Define as the direction of stack growth for your system. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => spaghetti stack.]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stat-size.m4�������������������������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 1 # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STAT_SIZE], [ # Don't call AC_STRUCT_ST_BLOCKS because it causes bugs. Details at # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00051.html AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) ����������������������������������������������������gnulib-20210822~d383792/m4/stat-time.m4�������������������������������������������������������������0000664�0000000�0000000�00000006057�14110572173�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2021 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # st_atim.tv_nsec - Linux, Solaris, Cygwin # st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE # st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE # st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) # st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) # st_birthtim - Cygwin 1.7.0+ AC_DEFUN([gl_STAT_TIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; ]], [[ st.st_atim = ts; ]])], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], [Define to 1 if the type of the st_atim member of a struct stat is struct timespec.]) fi], [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) # Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) # and NTFS (Cygwin). # There was a time when this field was named st_createtime (21 June # 2002 to 16 July 2002) But that window is very small and applied only # to development code, so systems still using that configuration are # not supported. See revisions 1.10 and 1.11 of FreeBSD's # src/sys/ufs/ufs/dinode.h. # AC_DEFUN([gl_STAT_BIRTHTIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stat.m4������������������������������������������������������������������0000664�0000000�0000000�00000005457�14110572173�0016047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 18 # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_STAT=1 ;; *) dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). AC_CACHE_CHECK([whether stat handles trailing slashes on files], [gl_cv_func_stat_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ]])], [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs help when passed a file name with a trailing slash]);; esac case $host_os in dnl Solaris stat can return a negative tv_nsec. solaris*) REPLACE_FSTAT=1 ;; esac ;; esac ]) # Prerequisites of lib/stat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) # Prerequisites of lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT_W32], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_CHECK_HEADERS([sdkddkver.h]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/std-gnu11.m4�������������������������������������������������������������0000664�0000000�0000000�00000057673�14110572173�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Prefer GNU C11 and C++11 to earlier versions. -*- coding: utf-8 -*- # This implementation is taken from GNU Autoconf lib/autoconf/c.m4 # commit 017d5ddd82854911f0119691d91ea8a1438824d6 # dated Sun Apr 3 13:57:17 2016 -0700 # This implementation will be obsolete once we can assume Autoconf 2.70 # or later is installed everywhere a Gnulib program might be developed. m4_version_prereq([2.70], [], [ # Copyright (C) 2001-2021 Free Software Foundation, Inc. # This 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 David MacKenzie, with help from # Akim Demaille, Paul Eggert, # François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, # Roland McGrath, Noah Friedman, david d zuhn, and many others. # AC_PROG_CC([COMPILER ...]) # -------------------------- # COMPILER ... is a space separated list of C compilers to search for. # This just gives the user an opportunity to specify an alternative # search list for the C compiler. AC_DEFUN_ONCE([AC_PROG_CC], [AC_LANG_PUSH(C)dnl AC_ARG_VAR([CC], [C compiler command])dnl AC_ARG_VAR([CFLAGS], [C compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl _AC_ARG_VAR_LIBS()dnl _AC_ARG_VAR_CPPFLAGS()dnl m4_ifval([$1], [AC_CHECK_TOOLS(CC, [$1])], [AC_CHECK_TOOL(CC, gcc) if test -z "$CC"; then dnl Here we want: dnl AC_CHECK_TOOL(CC, cc) dnl but without the check for a tool without the prefix. dnl Until the check is removed from there, copy the code: if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc]) fi fi if test -z "$CC"; then AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) fi if test -z "$CC"; then AC_CHECK_TOOLS(CC, cl.exe) fi if test -z "$CC"; then AC_CHECK_TOOL(CC, clang) fi ]) test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH]) # Provide some information about the compiler. _AS_ECHO_LOG([checking for _AC_LANG compiler version]) set X $ac_compile ac_compiler=$[2] for ac_option in --version -v -V -qversion -version; do _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) done m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl _AC_LANG_COMPILER_GNU if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi _AC_PROG_CC_G dnl dnl Set ac_prog_cc_stdc to the supported C version. dnl Also set the documented variable ac_cv_prog_cc_stdc; dnl its name was chosen when it was cached, but it is no longer cached. _AC_PROG_CC_C11([ac_prog_cc_stdc=c11 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11], [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99], [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89], [ac_prog_cc_stdc=no ac_cv_prog_cc_stdc=no])])]) dnl AC_LANG_POP(C)dnl ])# AC_PROG_CC # AC_PROG_CXX([LIST-OF-COMPILERS]) # -------------------------------- # LIST-OF-COMPILERS is a space separated list of C++ compilers to search # for (if not specified, a default list is used). This just gives the # user an opportunity to specify an alternative search list for the C++ # compiler. # aCC HP-UX C++ compiler much better than `CC', so test before. # FCC Fujitsu C++ compiler # KCC KAI C++ compiler # RCC Rational C++ # xlC_r AIX C Set++ (with support for reentrant code) # xlC AIX C Set++ AC_DEFUN([AC_PROG_CXX], [AC_LANG_PUSH(C++)dnl AC_ARG_VAR([CXX], [C++ compiler command])dnl AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl _AC_ARG_VAR_LIBS()dnl _AC_ARG_VAR_CPPFLAGS()dnl _AC_ARG_VAR_PRECIOUS([CCC])dnl if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else AC_CHECK_TOOLS(CXX, [m4_default([$1], [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])], g++) fi fi # Provide some information about the compiler. _AS_ECHO_LOG([checking for _AC_LANG compiler version]) set X $ac_compile ac_compiler=$[2] for ac_option in --version -v -V -qversion; do _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) done m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl _AC_LANG_COMPILER_GNU if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi _AC_PROG_CXX_G _AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11], [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98], [ac_prog_cxx_stdcxx=no ac_cv_prog_cxx_stdcxx=no])]) AC_LANG_POP(C++)dnl ])# AC_PROG_CXX # _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) # -------------------------------------------------------------- # Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') # by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails, # try again with each compiler option in the space-separated OPTION-LIST; if one # helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE, # else ACTION-IF-UNAVAILABLE. AC_DEFUN([_AC_C_STD_TRY], [AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features]) AC_CACHE_VAL(ac_cv_prog_cc_$1, [ac_cv_prog_cc_$1=no ac_save_CC=$CC AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) for ac_arg in '' $4 do CC="$ac_save_CC $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) test "x$ac_cv_prog_cc_$1" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ])# AC_CACHE_VAL ac_prog_cc_stdc_options= case "x$ac_cv_prog_cc_$1" in x) AC_MSG_RESULT([none needed]) ;; xno) AC_MSG_RESULT([unsupported]) ;; *) ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1" CC=$CC$ac_prog_cc_stdc_options AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;; esac AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6]) ])# _AC_C_STD_TRY # _AC_C_C99_TEST_HEADER # --------------------- # A C header suitable for testing for C99. AC_DEFUN([_AC_C_C99_TEST_HEADER], [[#include <stdarg.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <wchar.h> #include <stdio.h> // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; }]])# _AC_C_C99_TEST_HEADER # _AC_C_C99_TEST_BODY # ------------------- # A C body suitable for testing for C99, assuming the corresponding header. AC_DEFUN([_AC_C_C99_TEST_BODY], [[ // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ]]) # _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ---------------------------------------------------------------- # If the C compiler is not in ISO C99 mode by default, try to add an # option to output variable CC to make it so. This macro tries # various options that select ISO C99 on some system or another. It # considers the compiler to be in ISO C99 mode if it handles _Bool, # // comments, flexible array members, inline, long long int, mixed # code and declarations, named initialization of structs, restrict, # va_copy, varargs macros, variable declarations in for loops and # variable length arrays. AC_DEFUN([_AC_PROG_CC_C99], [_AC_C_STD_TRY([c99], [_AC_C_C99_TEST_HEADER], [_AC_C_C99_TEST_BODY], dnl Try dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) dnl IBM XL C -qlanglvl=extc99 dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99) dnl HP cc -AC99 dnl Intel ICC -std=c99, -c99 (deprecated) dnl IRIX -c99 dnl Solaris -D_STDC_C99= dnl cc's -xc99 option uses linker magic to define the external dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 dnl behavior for C library functions. This is not wanted here, dnl because it means that a single module compiled with -xc99 dnl alters C runtime behavior for the entire program, not for dnl just the module. Instead, define the (private) symbol dnl _STDC_C99, which suppresses a bogus failure in <stdbool.h>. dnl The resulting compiler passes the test case here, and that's dnl good enough. For more, please see the thread starting at: dnl https://lists.gnu.org/r/autoconf/2010-12/msg00059.html dnl Tru64 -c99 dnl with extended modes being tried first. [[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl ])# _AC_PROG_CC_C99 # _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ---------------------------------------------------------------- # If the C compiler is not in ISO C11 mode by default, try to add an # option to output variable CC to make it so. This macro tries # various options that select ISO C11 on some system or another. It # considers the compiler to be in ISO C11 mode if it handles _Alignas, # _Alignof, _Noreturn, _Static_assert, UTF-8 string literals, # duplicate typedefs, and anonymous structures and unions. AC_DEFUN([_AC_PROG_CC_C11], [_AC_C_STD_TRY([c11], [_AC_C_C99_TEST_HEADER[ // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ]], [_AC_C_C99_TEST_BODY[ v1.i = 2; v1.w.k = 5; _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); ]], dnl Try dnl GCC -std=gnu11 (unused restrictive mode: -std=c11) dnl with extended modes being tried first. dnl dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as dnl of September 2012) does not pass the C11 test. For now, try extc1x when dnl compiling the C99 test instead, since it enables _Static_assert and dnl _Noreturn, which is a win. If -qlanglvl=extc11 or -qlanglvl=extc1x passes dnl the C11 test in some future version of IBM XL C, we'll add it here, dnl preferably extc11. [[-std=gnu11]], [$1], [$2])[]dnl ])# _AC_PROG_CC_C11 # AC_PROG_CC_C89 # -------------- # Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC, # as that'd be incompatible with how Automake redefines AC_PROG_CC. See # <https://lists.gnu.org/r/autoconf/2012-10/msg00048.html>. AU_DEFUN([AC_PROG_CC_C89], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_PROG_CC_C99 # -------------- AU_DEFUN([AC_PROG_CC_C99], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_PROG_CC_STDC # --------------- AU_DEFUN([AC_PROG_CC_STDC], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_C_PROTOTYPES # --------------- # Check if the C compiler supports prototypes, included if it needs # options. AC_DEFUN([AC_C_PROTOTYPES], [AC_REQUIRE([AC_PROG_CC])dnl if test "$ac_prog_cc_stdc" != no; then AC_DEFINE(PROTOTYPES, 1, [Define to 1 if the C compiler supports function prototypes.]) AC_DEFINE(__PROTOTYPES, 1, [Define like PROTOTYPES; this can be used by system headers.]) fi ])# AC_C_PROTOTYPES # _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) # ---------------------------------------------------------------- # Check whether the C++ compiler accepts features of STANDARD (e.g # `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE # and TEST-BODY. If this fails, try again with each compiler option # in the space-separated OPTION-LIST; if one helps, append it to CXX. # If eventually successful, run ACTION-IF-AVAILABLE, else # ACTION-IF-UNAVAILABLE. AC_DEFUN([_AC_CXX_STD_TRY], [AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features]) AC_LANG_PUSH(C++)dnl AC_CACHE_VAL(ac_cv_prog_cxx_$1, [ac_cv_prog_cxx_$1=no ac_save_CXX=$CXX AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) for ac_arg in '' $4 do CXX="$ac_save_CXX $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg]) test "x$ac_cv_prog_cxx_$1" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ])# AC_CACHE_VAL ac_prog_cxx_stdcxx_options= case "x$ac_cv_prog_cxx_$1" in x) AC_MSG_RESULT([none needed]) ;; xno) AC_MSG_RESULT([unsupported]) ;; *) ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1" CXX=$CXX$ac_prog_cxx_stdcxx_options AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;; esac AC_LANG_POP(C++)dnl AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6]) ])# _AC_CXX_STD_TRY # _AC_CXX_CXX98_TEST_HEADER # ------------------------- # A C++ header suitable for testing for CXX98. AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER], [[ #include <algorithm> #include <cstdlib> #include <fstream> #include <iomanip> #include <iostream> #include <list> #include <map> #include <set> #include <sstream> #include <stdexcept> #include <string> #include <utility> #include <vector> namespace test { typedef std::vector<std::string> string_vec; typedef std::pair<int,bool> map_value; typedef std::map<std::string,map_value> map_type; typedef std::set<int> set_type; template<typename T> class printer { public: printer(std::ostringstream& os): os(os) {} void operator() (T elem) { os << elem << std::endl; } private: std::ostringstream& os; }; } ]])# _AC_CXX_CXX98_TEST_HEADER # _AC_CXX_CXX98_TEST_BODY # ----------------------- # A C++ body suitable for testing for CXX98, assuming the corresponding header. AC_DEFUN([_AC_CXX_CXX98_TEST_BODY], [[ try { // Basic string. std::string teststr("ASCII text"); teststr += " string"; // Simple vector. test::string_vec testvec; testvec.push_back(teststr); testvec.push_back("foo"); testvec.push_back("bar"); if (testvec.size() != 3) { throw std::runtime_error("vector size is not 1"); } // Dump vector into stringstream and obtain string. std::ostringstream os; for (test::string_vec::const_iterator i = testvec.begin(); i != testvec.end(); ++i) { if (i + 1 != testvec.end()) { os << teststr << '\n'; } } // Check algorithms work. std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os)); std::string os_out = os.str(); // Test pair and map. test::map_type testmap; testmap.insert(std::make_pair(std::string("key"), std::make_pair(53,false))); // Test set. int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); std::list<int> testlist(testset.begin(), testset.end()); std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; // Test fstream std::ofstream of("test.txt"); of << "Test ASCII text\n" << std::flush; of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; of.close(); } std::exit(0); ]]) # _AC_CXX_CXX11_TEST_HEADER # ------------------------- # A C++ header suitable for testing for CXX11. AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER], [[ #include <deque> #include <functional> #include <memory> #include <tuple> #include <array> #include <regex> #include <iostream> namespace cxx11test { typedef std::shared_ptr<std::string> sptr; typedef std::weak_ptr<std::string> wptr; typedef std::tuple<std::string,int,double> tp; typedef std::array<int, 20> int_array; constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; } ]])# _AC_CXX_CXX11_TEST_HEADER # _AC_CXX_CXX11_TEST_BODY # ----------------------- # A C++ body suitable for testing for CXX11, assuming the corresponding header. AC_DEFUN([_AC_CXX_CXX11_TEST_BODY], [[ { // Test auto and decltype std::deque<int> d; d.push_front(43); d.push_front(484); d.push_front(3); d.push_front(844); int total = 0; for (auto i = d.begin(); i != d.end(); ++i) { total += *i; } auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for and lambda cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (int &x : array) { x += 23; } std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; }); } { using cxx11test::sptr; using cxx11test::wptr; sptr sp(new std::string("ASCII string")); wptr wp(sp); sptr sp2(wp); } { cxx11test::tp tuple("test", 54, 45.53434); double d = std::get<2>(tuple); std::string s; int i; std::tie(s,i,d) = tuple; } { static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$"); std::string testmatch("Test if this string matches"); bool match = std::regex_search(testmatch, filename_regex); } { cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; cxx11test::int_array::size_type size = array.size(); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets std::vector<std::pair<int,char*>> v1; } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ]]) # _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ------------------------------------------------------------------- # If the C++ compiler is not in ISO C++98 mode by default, try to add # an option to output variable CXX to make it so. This macro tries # various options that select ISO C++98 on some system or another. It # considers the compiler to be in ISO C++98 mode if it handles basic # features of the std namespace including: string, containers (list, # map, set, vector), streams (fstreams, iostreams, stringstreams, # iomanip), pair, exceptions and algorithms. AC_DEFUN([_AC_PROG_CXX_CXX98], [_AC_CXX_STD_TRY([cxx98], [_AC_CXX_CXX98_TEST_HEADER], [_AC_CXX_CXX98_TEST_BODY], dnl Try dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98) dnl IBM XL C -qlanglvl=extended dnl HP aC++ -AA dnl Intel ICC -std=gnu++98 dnl Solaris N/A (default) dnl Tru64 N/A (default, but -std gnu could be used) dnl with extended modes being tried first. [[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl ])# _AC_PROG_CXX_CXX98 # _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ------------------------------------------------------------------- # If the C++ compiler is not in ISO CXX11 mode by default, try to add # an option to output variable CXX to make it so. This macro tries # various options that select ISO C++11 on some system or another. It # considers the compiler to be in ISO C++11 mode if it handles all the # tests from the C++98 checks, plus the following: Language features # (auto, constexpr, decltype, default/deleted constructors, delegate # constructors, final, initializer lists, lambda functions, nullptr, # override, range-based for loops, template brackets without spaces, # unicode literals) and library features (array, memory (shared_ptr, # weak_ptr), regex and tuple types). AC_DEFUN([_AC_PROG_CXX_CXX11], [_AC_CXX_STD_TRY([cxx11], [_AC_CXX_CXX11_TEST_HEADER _AC_CXX_CXX98_TEST_HEADER], [_AC_CXX_CXX11_TEST_BODY _AC_CXX_CXX98_TEST_BODY], dnl Try dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants] dnl IBM XL C -qlanglvl=extended0x dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11) dnl HP aC++ -AA dnl Intel ICC -std=c++11 -std=c++0x dnl Solaris N/A (no support) dnl Tru64 N/A (no support) dnl with extended modes being tried first. [[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl ])# _AC_PROG_CXX_CXX11 ])# m4_version_prereq ���������������������������������������������������������������������gnulib-20210822~d383792/m4/stdalign.m4��������������������������������������������������������������0000664�0000000�0000000�00000004562�14110572173�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdalign.h that conforms to C11. dnl Copyright 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prepare for substituting <stdalign.h> if it is not supported. AC_DEFUN([gl_STDALIGN_H], [ AC_CACHE_CHECK([for working stdalign.h], [gl_cv_header_working_stdalign_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> #include <stdalign.h> #include <stddef.h> /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test _Alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (__TINYC__ && defined __attribute__) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif ]])], [gl_cv_header_working_stdalign_h=yes], [gl_cv_header_working_stdalign_h=no])]) if test $gl_cv_header_working_stdalign_h = yes; then STDALIGN_H='' else STDALIGN_H='stdalign.h' fi AC_SUBST([STDALIGN_H]) AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdarg.m4����������������������������������������������������������������0000664�0000000�0000000�00000005333�14110572173�0016351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdarg.m4 serial 7 dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Provide a working va_copy in combination with <stdarg.h>. AC_DEFUN([gl_STDARG_H], [ STDARG_H='' NEXT_STDARG_H='<stdarg.h>' AC_CACHE_CHECK([for va_copy], [gl_cv_func_va_copy], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdarg.h>]], [[ #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ]])], [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no]) ]) if test $gl_cv_func_va_copy = no; then dnl Provide a substitute. dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5 dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h> dnl which does '#undef va_copy', leading to a missing va_copy symbol. For dnl this platform, we use an <stdarg.h> substitute. But we cannot use this dnl approach on other platforms, because <stdarg.h> often defines only dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do dnl not work in this situation. AC_EGREP_CPP([vaccine], [#if defined _AIX && !defined __GNUC__ AIX vaccine #endif ], [gl_aixcc=yes], [gl_aixcc=no]) if test $gl_aixcc = yes; then dnl Provide a substitute <stdarg.h> file. STDARG_H=stdarg.h gl_NEXT_HEADERS([stdarg.h]) dnl Fallback for the case when <stdarg.h> contains only macro definitions. if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else dnl Provide a substitute in <config.h>, either __va_copy or as a simple dnl assignment. gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdarg.h>]], [[ #ifndef __va_copy error, bail out #endif ]])], [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])]) if test $gl_cv_func___va_copy = yes; then AC_DEFINE([va_copy], [__va_copy], [Define as a macro for copying va_list variables.]) else AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b))]) AC_DEFINE([va_copy], [gl_va_copy], [Define as a macro for copying va_list variables.]) fi fi fi AC_SUBST([STDARG_H]) AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) AC_SUBST([NEXT_STDARG_H]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdbool.m4���������������������������������������������������������������0000664�0000000�0000000�00000007635�14110572173�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. #serial 8 # Prepare for substituting <stdbool.h> if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On some platforms, <stdbool.h> does not exist or does not conform to C99. dnl On Solaris 10 with CC=cc CXX=CC, <stdbool.h> exists but is not usable dnl in C++ mode (and no <cstdbool> exists). In this case, we use our dnl replacement, also in C mode (for binary compatibility between C and C++). if test "$ac_cv_header_stdbool_h" = yes; then case "$host_os" in solaris*) if test -z "$GCC"; then STDBOOL_H='stdbool.h' else STDBOOL_H='' fi ;; *) STDBOOL_H='' ;; esac else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdbool.h> #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stddef_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000007157�14110572173�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stddef_h.m4 serial 11 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl A placeholder for <stddef.h>, for platforms that have issues. AC_DEFUN_ONCE([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) dnl Persuade OpenBSD <stddef.h> to declare max_align_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) STDDEF_H= dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) # gl_STDDEF_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDDEF_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdint.m4����������������������������������������������������������������0000664�0000000�0000000�00000043027�14110572173�0016374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint.m4 serial 60 dnl Copyright (C) 2001-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Bruno Haible. dnl Test whether <stdint.h> is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl For backward compatibility. Some packages may still be testing these dnl macros. AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for <inttypes.h>. AC_CHECK_HEADERS_ONCE([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for <sys/types.h>. AC_CHECK_HEADERS_ONCE([sys/types.h]) if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute <stdint.h>. if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> ] gl_STDINT_INCLUDES [ #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system <stdint.h> works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. dnl If not, there would be problems when stdint.h is included from C++. AC_CACHE_CHECK([whether stdint.h works without ISO C predefines], [gl_cv_header_stdint_without_STDC_macros], [gl_cv_header_stdint_without_STDC_macros=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_without_STDC_macros=yes]) ]) if test $gl_cv_header_stdint_without_STDC_macros = no; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) dnl Check for <sys/inttypes.h>, and for dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) AC_SUBST([STDINT_H]) AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include <limits.h>], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdint_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000001743�14110572173�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <stdint.h>]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) �����������������������������gnulib-20210822~d383792/m4/stdio_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000026242�14110572173�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 56 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 AC_LIBOBJ([stdio-read]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or dnl GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([fcloseall]) if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi ]) # gl_STDIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL]) HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdlib_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000022333�14110572173�0016654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdlib_h.m4 serial 63 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> #if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit aligned_alloc atoll canonicalize_file_name free getloadavg getsubopt grantpt initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps posix_memalign posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([ecvt]) if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi AC_CHECK_DECLS_ONCE([fcvt]) if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi AC_CHECK_DECLS_ONCE([gcvt]) if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi ]) # gl_STDLIB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDLIB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_ECVT=1; AC_SUBST([HAVE_DECL_ECVT]) HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_MEMALIGN=1; AC_SUBST([HAVE_POSIX_MEMALIGN]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL]) HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC]) REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_FREE=0; AC_SUBST([REPLACE_FREE]) REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL]) REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL]) REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL]) REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stdnoreturn.m4�����������������������������������������������������������0000664�0000000�0000000�00000003745�14110572173�0017461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdnoreturn.h that conforms to C11. dnl Copyright 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prepare for substituting <stdnoreturn.h> if it is not supported. AC_DEFUN([gl_STDNORETURN_H], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in cygwin*) dnl Regardless whether a working <stdnoreturn.h> exists or not, dnl we need our own <stdnoreturn.h>, because of the definition dnl of _Noreturn done by gnulib-common.m4. STDNORETURN_H='stdnoreturn.h' ;; *) AC_CACHE_CHECK([for working stdnoreturn.h], [gl_cv_header_working_stdnoreturn_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <stdnoreturn.h> #if defined _WIN32 && !defined __CYGWIN__ # include <process.h> #endif /* Do not check for 'noreturn' after the return type. C11 allows it, but it's rarely done that way and circa-2012 bleeding-edge GCC rejects it when given -Werror=old-style-declaration. */ noreturn void foo1 (void) { exit (0); } _Noreturn void foo2 (void) { exit (0); } int testit (int argc, char **argv) { if (argc & 1) return 0; (argv[0][0] ? foo1 : foo2) (); } ]])], [gl_cv_header_working_stdnoreturn_h=yes], [gl_cv_header_working_stdnoreturn_h=no])]) if test $gl_cv_header_working_stdnoreturn_h = yes; then STDNORETURN_H='' else STDNORETURN_H='stdnoreturn.h' fi ;; esac AC_SUBST([STDNORETURN_H]) AM_CONDITIONAL([GL_GENERATE_STDNORETURN_H], [test -n "$STDNORETURN_H"]) ]) ���������������������������gnulib-20210822~d383792/m4/stpcpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000001307�14110572173�0016404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stpcpy.m4 serial 9 dnl Copyright (C) 2002, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STPCPY], [ dnl Persuade glibc <string.h> to declare stpcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([stpcpy]) if test $ac_cv_func_stpcpy = no; then HAVE_STPCPY=0 fi ]) # Prerequisites of lib/stpcpy.c. AC_DEFUN([gl_PREREQ_STPCPY], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/stpncpy.m4���������������������������������������������������������������0000664�0000000�0000000�00000005743�14110572173�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stpncpy.m4 serial 19 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STPNCPY], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <string.h> to declare stpncpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The stpncpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Both glibc and AIX (4.3.3, 5.1) have an stpncpy() function dnl declared in <string.h>. Its side effects are the same as those dnl of strncpy(): dnl stpncpy (dest, src, n) dnl overwrites dest[0..n-1], min(strlen(src),n) bytes coming from src, dnl and the remaining bytes being NULs. However, the return value is dnl in glibc: dest + min(strlen(src),n) dnl in AIX: dest + max(0,n-1) dnl Only the glibc return value is useful in practice. AC_CHECK_DECLS_ONCE([stpncpy]) AC_CHECK_FUNCS_ONCE([stpncpy]) if test $ac_cv_func_stpncpy = yes; then AC_CACHE_CHECK([for working stpncpy], [gl_cv_func_stpncpy], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #include <string.h> /* for strcpy */ /* The stpncpy prototype is missing in <string.h> on AIX 4. */ #if !HAVE_DECL_STPNCPY extern # ifdef __cplusplus "C" # endif char *stpncpy (char *dest, const char *src, size_t n); #endif int main () { int result = 0; const char *src = "Hello"; char dest[10]; /* AIX 4.3.3 and AIX 5.1 stpncpy() returns dest+1 here. */ { strcpy (dest, "\377\377\377\377\377\377"); if (stpncpy (dest, src, 2) != dest + 2) result |= 1; } /* AIX 4.3.3 and AIX 5.1 stpncpy() returns dest+4 here. */ { strcpy (dest, "\377\377\377\377\377\377"); if (stpncpy (dest, src, 5) != dest + 5) result |= 2; } /* AIX 4.3.3 and AIX 5.1 stpncpy() returns dest+6 here. */ { strcpy (dest, "\377\377\377\377\377\377"); if (stpncpy (dest, src, 7) != dest + 5) result |= 4; } return result; } ]])], [gl_cv_func_stpncpy=yes], [gl_cv_func_stpncpy=no], [dnl Guess yes on glibc systems and musl systems. AC_EGREP_CPP([Thanks for using GNU], [ #include <features.h> #ifdef __GNU_LIBRARY__ Thanks for using GNU #endif ], [gl_cv_func_stpncpy="guessing yes"], [case "$host_os" in *-musl*) gl_cv_func_stpncpy="guessing yes" ;; *) gl_cv_func_stpncpy="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_stpncpy" in *yes) AC_DEFINE([HAVE_STPNCPY], [1], [Define if you have the stpncpy() function and it works.]) ;; *) REPLACE_STPNCPY=1 ;; esac else HAVE_STPNCPY=0 fi ]) # Prerequisites of lib/stpncpy.c. AC_DEFUN([gl_PREREQ_STPNCPY], [ : ]) �����������������������������gnulib-20210822~d383792/m4/strcase.m4���������������������������������������������������������������0000664�0000000�0000000�00000001774�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcase.m4 serial 12 dnl Copyright (C) 2002, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STRCASE], [ gl_FUNC_STRCASECMP gl_FUNC_STRNCASECMP ]) AC_DEFUN([gl_FUNC_STRCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strcasecmp]) if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ]) AC_DEFUN([gl_FUNC_STRNCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strncasecmp]) if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi AC_CHECK_DECLS([strncasecmp]) if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi ]) # Prerequisites of lib/strcasecmp.c. AC_DEFUN([gl_PREREQ_STRCASECMP], [ : ]) # Prerequisites of lib/strncasecmp.c. AC_DEFUN([gl_PREREQ_STRNCASECMP], [ : ]) ����gnulib-20210822~d383792/m4/strcasestr.m4������������������������������������������������������������0000664�0000000�0000000�00000011424�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcasestr.m4 serial 28 dnl Copyright (C) 2005, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check that strcasestr is present and works. AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare strcasestr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_MEMCHR]) AC_CHECK_FUNCS([strcasestr]) if test $ac_cv_func_strcasestr = no; then HAVE_STRCASESTR=0 else if test $REPLACE_MEMCHR = 1; then REPLACE_STRCASESTR=1 else dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092 dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637. AC_CACHE_CHECK([whether strcasestr works], [gl_cv_func_strcasestr_works_always], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <string.h> /* for __GNU_LIBRARY__, strcasestr */ #ifdef __GNU_LIBRARY__ #include <features.h> #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 Unlucky user #endif #endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P ]], [[return !!strcasestr (HAYSTACK, NEEDLE); ]])], [gl_cv_func_strcasestr_works_always=yes], [gl_cv_func_strcasestr_works_always=no], [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not dnl affected, since it uses different source code for strcasestr dnl than glibc. dnl Assume that it works on all other platforms, even if it is not dnl linear. AC_EGREP_CPP([Lucky user], [ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strcasestr_works_always="guessing yes"], [gl_cv_func_strcasestr_works_always="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strcasestr_works_always" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi fi ]) # gl_FUNC_STRCASESTR_SIMPLE dnl Additionally, check that strcasestr is efficient. AC_DEFUN([gl_FUNC_STRCASESTR], [ AC_REQUIRE([gl_FUNC_STRCASESTR_SIMPLE]) if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then AC_CACHE_CHECK([whether strcasestr works in linear time], [gl_cv_func_strcasestr_linear], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <signal.h> /* for signal */ #include <string.h> /* for strcasestr */ #include <stdlib.h> /* for malloc */ #include <unistd.h> /* for alarm */ static void quit (int sig) { _exit (sig + 128); } ]], [[ int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack strcasestr. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = 0; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = 0; if (!strcasestr (haystack, needle)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ]])], [gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no], [dnl Only glibc > 2.12 and cygwin > 1.7.7 are known to have a dnl strcasestr that works in linear time. AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #endif ], [gl_cv_func_strcasestr_linear="guessing yes"], [gl_cv_func_strcasestr_linear="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strcasestr_linear" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi ]) # gl_FUNC_STRCASESTR # Prerequisites of lib/strcasestr.c. AC_DEFUN([gl_PREREQ_STRCASESTR], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strchrnul.m4�������������������������������������������������������������0000664�0000000�0000000�00000002760�14110572173�0017112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strchrnul.m4 serial 10 dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRCHRNUL], [ dnl Persuade glibc <string.h> to declare strchrnul(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strchrnul]) if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 else AC_CACHE_CHECK([whether strchrnul works], [gl_cv_func_strchrnul_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for strchrnul */ ]], [[const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ]])], [gl_cv_func_strchrnul_works=yes], [gl_cv_func_strchrnul_works=no], [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strchrnul_works="guessing yes"], [gl_cv_func_strchrnul_works="guessing no"]) ]) ]) case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) ����������������gnulib-20210822~d383792/m4/strcspn.m4���������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcspn.m4 serial 4 dnl Copyright (C) 2002-2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRCSPN], [ AC_CHECK_FUNCS([strcspn]) ]) # Prerequisites of lib/strcspn.c. AC_DEFUN([gl_PREREQ_STRCSPN], [:]) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strdup.m4����������������������������������������������������������������0000664�0000000�0000000�00000001455�14110572173�0016407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strdup.m4 serial 15 dnl Copyright (C) 2002-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRDUP], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) AC_DEFUN([gl_FUNC_STRDUP_POSIX], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) # Prerequisites of lib/strdup.c. AC_DEFUN([gl_PREREQ_STRDUP], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strerror.m4��������������������������������������������������������������0000664�0000000�0000000�00000007162�14110572173�0016751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 22 dnl Copyright (C) 2002, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <errno.h> ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strerror_r.m4������������������������������������������������������������0000664�0000000�0000000�00000015073�14110572173�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror_r.m4 serial 21 dnl Copyright (C) 2002, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR_R], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) dnl Persuade Solaris <string.h> to declare strerror_r(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT dnl are not defined. AC_CHECK_DECLS_ONCE([strerror_r]) if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in dnl The system's strerror_r has bugs. Replace it. *no) REPLACE_STRERROR_R=1 ;; esac else dnl The system's strerror_r() has a wrong signature. Replace it. REPLACE_STRERROR_R=1 fi else dnl The system's strerror_r() cannot know about the new errno values we dnl add to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR_R=1 fi fi ]) # Prerequisites of lib/strerror_r.c. AC_DEFUN([gl_PREREQ_STRERROR_R], [ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) AC_CHECK_FUNCS_ONCE([catgets]) AC_CHECK_FUNCS_ONCE([snprintf]) ]) # Detect if strerror_r works, but without affecting whether a replacement # strerror_r will be used. AC_DEFUN([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_CHECK_FUNCS_ONCE([strerror_r]) if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then dnl The POSIX prototype is: int strerror_r (int, char *, size_t); dnl glibc, Cygwin: char *strerror_r (int, char *, size_t); dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int); AC_CACHE_CHECK([for strerror_r with POSIX signature], [gl_cv_func_strerror_r_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> int strerror_r (int, char *, size_t); ]], [])], [gl_cv_func_strerror_r_posix_signature=yes], [gl_cv_func_strerror_r_posix_signature=no]) ]) if test $gl_cv_func_strerror_r_posix_signature = yes; then dnl AIX 6.1 strerror_r fails by returning -1, not an error number. dnl HP-UX 11.31 strerror_r always fails when the buffer length argument dnl is less than 80. dnl FreeBSD 8.s strerror_r claims failure on 0 dnl Mac OS X 10.5 strerror_r treats 0 like -1 dnl Solaris 10 strerror_r corrupts errno on failure AC_CACHE_CHECK([whether strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <string.h> ]], [[int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [ changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac changequote([,])dnl ]) ]) else dnl The system's strerror() has a wrong signature. dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure. dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer. if test $ac_cv_func___xpg_strerror_r = yes; then AC_CACHE_CHECK([whether __xpg_strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <string.h> extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); ]], [[int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [dnl Guess no on all platforms that have __xpg_strerror_r, dnl at least until fixed glibc and cygwin are more common. gl_cv_func_strerror_r_works="$gl_cross_guess_normal" ]) ]) fi fi fi fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strerrorname_np.m4�������������������������������������������������������0000664�0000000�0000000�00000003126�14110572173�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerrorname_np.m4 serial 2 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERRORNAME_NP], [ dnl Persuade glibc <string.h> to declare strerrorname_np(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strerrorname_np]) if test $ac_cv_func_strerrorname_np = yes; then dnl In glibc 2.32, strerrorname_np returns English error descriptions, not dnl error names. dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=26555>. AC_CACHE_CHECK([whether strerrorname_np works], [gl_cv_func_strerrorname_np_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <string.h> ]], [[return strcmp (strerrorname_np (EINVAL), "EINVAL") != 0; ]])], [gl_cv_func_strerrorname_np_works=yes], [gl_cv_func_strerrorname_np_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strerrorname_np_works="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_strerrorname_np_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerrorname_np_works" in *yes) ;; *) REPLACE_STRERRORNAME_NP=1 ;; esac else HAVE_STRERRORNAME_NP=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strfmon_l.m4�������������������������������������������������������������0000664�0000000�0000000�00000005637�14110572173�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strfmon_l.m4 serial 3 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRFMON_L], [ AC_REQUIRE([gl_MONETARY_H_DEFAULTS]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) dnl Persuade glibc <monetary.h> to declare strfmon_l(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl On Mac OS X 10.12, <monetary.h> may declare strfmon_l() if dnl _USE_EXTENDED_LOCALES_ is defined. But this symbol is supposed dnl to be defined by <xlocale.h>, not by us. AC_CHECK_FUNCS_ONCE([strfmon_l]) if test $ac_cv_func_strfmon_l = yes; then dnl Test for bug <https://sourceware.org/bugzilla/show_bug.cgi?id=19633> dnl which was fixed in glibc-2.24. AC_CACHE_CHECK([whether strfmon_l works], [gl_cv_strfmon_l_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. case "$host_os" in # Guess no on glibc versions < 2.24. *-gnu* | gnu*) AC_EGREP_CPP([Unlucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24) Unlucky GNU user #endif #endif ], [gl_cv_strfmon_l_works="guessing no"], [gl_cv_strfmon_l_works="guessing yes"]) ;; # Guess no on FreeBSD and Cygwin. freebsd* | midnightbsd* | cygwin*) gl_cv_strfmon_l_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_strfmon_l_works="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <monetary.h> #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif #include <string.h> int main () { /* On older glibc systems: expected_buf="$123.50" buf="$123,50" On FreeBSD 12.0, Cygwin 2.9: expected_buf="$123.50" buf="123,50 $" */ if (setlocale (LC_ALL, "en_US.UTF-8") != NULL) { char expected_buf[80]; if (strfmon (expected_buf, sizeof (expected_buf), "%.2n", 123.5) >= 0) if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { locale_t loc = newlocale (LC_ALL_MASK, "en_US.UTF-8", NULL); if (loc != (locale_t) 0) { char buf[80]; if (strfmon_l (buf, sizeof (buf), loc, "%.2n", 123.5) >= 0) return strcmp (buf, expected_buf) != 0; } } } return 0; }]])], [gl_cv_strfmon_l_works=yes], [gl_cv_strfmon_l_works=no], [:]) fi ]) if test "$gl_cv_strfmon_l_works" = no; then REPLACE_STRFMON_L=1 fi else HAVE_STRFMON_L=0 fi ]) # Prerequisites of lib/strfmon_l.c. AC_DEFUN([gl_PREREQ_STRFMON_L], [ : ]) �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strftime-fixes.m4��������������������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strftime-fixes.m4 serial 2 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRFTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) REPLACE_STRFTIME=1 ;; *) REPLACE_STRFTIME=0 ;; esac ]) ������������������������������gnulib-20210822~d383792/m4/string_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000015677�14110572173�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 32 # Written by Paul Eggert. AC_DEFUN_ONCE([gl_STRING_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <string.h> ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_STRING_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRING_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) ]) AC_DEFUN([gl_STRING_H_DEFAULTS], [ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) �����������������������������������������������������������������gnulib-20210822~d383792/m4/strings_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000004202�14110572173�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <strings.h>. # serial 9 # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STRINGS_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([strings.h]) if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi AC_SUBST([HAVE_STRINGS_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. */ #include <sys/types.h> #include <strings.h> ]], [ffs strcasecmp strncasecmp]) ]) # gl_STRINGS_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRINGS_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRINGS_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) ]) AC_DEFUN([gl_STRINGS_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFS=1; AC_SUBST([HAVE_FFS]) HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strncat.m4���������������������������������������������������������������0000664�0000000�0000000�00000005713�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strncat.m4 serial 6 dnl Copyright (C) 2002-2004, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_STRNCAT], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) dnl Detect bug in Solaris 8..10 on SPARC and Solaris 11.0 on x86: dnl strncat should not dereference more than n bytes, but always dereferences dnl n+1 bytes if the first n bytes don't contain a NUL byte. dnl Assume that strncat works on platforms that lack mprotect. AC_CACHE_CHECK([whether strncat works], [gl_cv_func_strncat_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]GL_MDA_DEFINES], [[ char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { char dest[8]; dest[0] = '*'; dest[1] = 'a'; dest[2] = '\0'; dest[3] = 'w'; dest[4] = 'x'; dest[5] = 'y'; dest[6] = 'z'; *(fence - 3) = '7'; *(fence - 2) = '2'; *(fence - 1) = '9'; if (strncat (dest + 1, fence - 3, 3) != dest + 1) return 1; if (dest[0] != '*') return 2; if (dest[1] != 'a' || dest[2] != '7' || dest[3] != '2' || dest[4] != '9' || dest[5] != '\0') return 3; if (dest[6] != 'z') return 4; } return 0; ]])], [gl_cv_func_strncat_works=yes], [gl_cv_func_strncat_works=no], [ case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_strncat_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strncat_works="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_strncat_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strncat_works" in *yes) ;; *) REPLACE_STRNCAT=1 ;; esac ]) # Prerequisites of lib/strncat.c. AC_DEFUN([gl_PREREQ_STRNCAT], [ : ]) �����������������������������������������������������gnulib-20210822~d383792/m4/strndup.m4���������������������������������������������������������������0000664�0000000�0000000�00000003265�14110572173�0016566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strndup.m4 serial 23 dnl Copyright (C) 2002-2003, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNDUP], [ dnl Persuade glibc <string.h> to declare strndup(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strndup]) AC_CHECK_FUNCS_ONCE([strndup]) if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include <string.h> #include <stdlib.h>]], [[ #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result;]])], [gl_cv_func_strndup_works=yes], [gl_cv_func_strndup_works=no], [ changequote(,)dnl case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac changequote([,])dnl ])]) case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strnlen.m4���������������������������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strnlen.m4 serial 14 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNLEN], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare strnlen(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([strnlen]) if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else m4_pushdef([AC_LIBOBJ], [:]) dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). AC_FUNC_STRNLEN m4_popdef([AC_LIBOBJ]) if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi ]) # Prerequisites of lib/strnlen.c. AC_DEFUN([gl_PREREQ_STRNLEN], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strpbrk.m4���������������������������������������������������������������0000664�0000000�0000000�00000001016�14110572173�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strpbrk.m4 serial 7 dnl Copyright (C) 2002-2003, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRPBRK], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strpbrk]) if test $ac_cv_func_strpbrk = no; then HAVE_STRPBRK=0 fi ]) # Prerequisites of lib/strpbrk.c. AC_DEFUN([gl_PREREQ_STRPBRK], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strptime.m4��������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0016727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strptime.m4 serial 8 dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRPTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_FUNCS_ONCE([strptime]) if test $ac_cv_func_strptime != yes; then HAVE_STRPTIME=0 fi ]) # Prerequisites of lib/strptime.c. AC_DEFUN([gl_PREREQ_STRPTIME], [ AC_REQUIRE([gl_TM_GMTOFF]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strsep.m4����������������������������������������������������������������0000664�0000000�0000000�00000001311�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strsep.m4 serial 11 dnl Copyright (C) 2002-2004, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRSEP], [ dnl Persuade glibc <string.h> to declare strsep(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The strsep() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strsep]) if test $ac_cv_func_strsep = no; then HAVE_STRSEP=0 fi ]) # Prerequisites of lib/strsep.c. AC_DEFUN([gl_PREREQ_STRSEP], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strsignal.m4�������������������������������������������������������������0000664�0000000�0000000�00000003741�14110572173�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strsignal.m4 serial 10 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRSIGNAL], [ dnl Persuade glibc <string.h> to declare strsignal(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([strsignal]) if test $ac_cv_have_decl_strsignal = no; then HAVE_DECL_STRSIGNAL=0 fi AC_CHECK_FUNCS([strsignal]) if test $ac_cv_func_strsignal = yes; then HAVE_STRSIGNAL=1 dnl Check if strsignal behaves reasonably for out-of-range signal numbers. dnl On Solaris it returns NULL; on AIX 5.1 it returns (char *) -1. AC_CACHE_CHECK([whether strsignal always returns a string], [gl_cv_func_working_strsignal], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <unistd.h> /* NetBSD 5.0 declares it in wrong header. */ ]], [[int result = 0; char *s = strsignal (-1); if (s == (char *) 0) result |= 1; if (s == (char *) -1) result |= 2; return result; ]])], [gl_cv_func_working_strsignal=yes], [gl_cv_func_working_strsignal=no], [case "$host_os" in solaris* | aix*) gl_cv_func_working_strsignal=no;; *) gl_cv_func_working_strsignal="guessing yes";; esac])]) if test "$gl_cv_func_working_strsignal" = no; then REPLACE_STRSIGNAL=1 fi else HAVE_STRSIGNAL=0 fi ]) # Prerequisites of lib/strsignal.c. AC_DEFUN([gl_PREREQ_STRSIGNAL], [ AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>]]) AC_CHECK_DECLS([_sys_siglist], [], [], [[#include <signal.h>]]) ]) �������������������������������gnulib-20210822~d383792/m4/strstr.m4����������������������������������������������������������������0000664�0000000�0000000�00000011165�14110572173�0016426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strstr.m4 serial 24 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check that strstr works. AC_DEFUN([gl_FUNC_STRSTR_SIMPLE], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MEMCHR]) if test $REPLACE_MEMCHR = 1; then REPLACE_STRSTR=1 else dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092 dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637. AC_CACHE_CHECK([whether strstr works], [gl_cv_func_strstr_works_always], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <string.h> /* for __GNU_LIBRARY__, strstr */ #ifdef __GNU_LIBRARY__ #include <features.h> #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 Unlucky user #endif #endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P ]], [[return !!strstr (HAYSTACK, NEEDLE); ]])], [gl_cv_func_strstr_works_always=yes], [gl_cv_func_strstr_works_always=no], [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not dnl affected, since it uses different source code for strstr than dnl glibc. dnl Assume that it works on all other platforms, even if it is not dnl linear. AC_EGREP_CPP([Lucky user], [ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strstr_works_always="guessing yes"], [gl_cv_func_strstr_works_always="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strstr_works_always" in *yes) ;; *) REPLACE_STRSTR=1 ;; esac fi ]) # gl_FUNC_STRSTR_SIMPLE dnl Additionally, check that strstr is efficient. AC_DEFUN([gl_FUNC_STRSTR], [ AC_REQUIRE([gl_FUNC_STRSTR_SIMPLE]) if test $REPLACE_STRSTR = 0; then AC_CACHE_CHECK([whether strstr works in linear time], [gl_cv_func_strstr_linear], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #ifdef __MVS__ /* z/OS does not deliver signals while strstr() is running (thanks to restrictions on its LE runtime), which prevents us from limiting the running time of this test. */ # error "This test does not work properly on z/OS" #endif #include <signal.h> /* for signal */ #include <string.h> /* for strstr */ #include <stdlib.h> /* for malloc */ #include <unistd.h> /* for alarm */ static void quit (int sig) { _exit (sig + 128); } ]], [[ int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also have quadratic strstr. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = 0; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = 0; if (!strstr (haystack, needle)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ]])], [gl_cv_func_strstr_linear=yes], [gl_cv_func_strstr_linear=no], [dnl Only glibc > 2.12 on processors without SSE 4.2 instructions and dnl cygwin > 1.7.7 are known to have a bug-free strstr that works in dnl linear time. AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ && !(defined __i386__ || defined __x86_64__) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #endif ], [gl_cv_func_strstr_linear="guessing yes"], [gl_cv_func_strstr_linear="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strstr_linear" in *yes) ;; *) REPLACE_STRSTR=1 ;; esac fi ]) # gl_FUNC_STRSTR �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtod-obsolete.m4�������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtod-obsolete.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOD_OBSOLETE], [ dnl The real code is in strtod.m4. : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtod.m4����������������������������������������������������������������0000664�0000000�0000000�00000010424�14110572173�0016401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtod.m4 serial 26 dnl Copyright (C) 2002-2003, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOD], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRTOD_OBSOLETE], [ dnl Test whether strtod is declared. dnl Don't call AC_FUNC_STRTOD, because it does not have the right guess dnl when cross-compiling. dnl Don't call AC_CHECK_FUNCS([strtod]) because it would collide with the dnl ac_cv_func_strtod variable set by the AC_FUNC_STRTOD macro. AC_CHECK_DECLS_ONCE([strtod]) if test $ac_cv_have_decl_strtod != yes; then HAVE_STRTOD=0 fi ]) if test $HAVE_STRTOD = 1; then AC_CACHE_CHECK([whether strtod obeys C99], [gl_cv_func_strtod_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <math.h> #include <errno.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } ]], [[ int result = 0; { /* In some old versions of Linux (2000 or before), strtod mis-parses strings with leading '+'. */ const char *string = " +69"; char *term; double value = strtod (string, &term); if (value != 69 || term != (string + 4)) result |= 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) result |= 2; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; double value = strtod (string, &term); double zero = 0.0; if (1.0 / value != -1.0 / zero || term != (string + 2)) result |= 4; } { /* Many platforms do not parse hex floats. */ const char *string = "0XaP+1"; char *term; double value = strtod (string, &term); if (value != 20.0 || term != (string + 6)) result |= 8; } { /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; double value; errno = 0; value = strtod (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 16; } { /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ const char *string = "nan()"; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 32; } { /* darwin 10.6.1 misparses "nan(". */ const char *string = "nan("; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 64; } return result; ]])], [gl_cv_func_strtod_works=yes], [gl_cv_func_strtod_works=no], [dnl The last known bugs in glibc strtod(), as of this writing, dnl were fixed in version 2.8 AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif ], [gl_cv_func_strtod_works="guessing yes"], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_strtod_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtod_works="guessing yes" ;; *) gl_cv_func_strtod_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_strtod_works" in *yes) ;; *) REPLACE_STRTOD=1 ;; esac fi ]) # Prerequisites of lib/strtod.c. AC_DEFUN([gl_PREREQ_STRTOD], [ AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM]) if test $gl_cv_func_ldexp_no_libm = yes; then AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], [Define if the ldexp function is available in libc.]) fi AC_CHECK_FUNCS([nl_langinfo]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtoimax.m4�������������������������������������������������������������0000664�0000000�0000000�00000004614�14110572173�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoimax.m4 serial 16 dnl Copyright (C) 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOIMAX], [ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) dnl On OSF/1 5.1 with cc, this function is declared but not defined. AC_CHECK_FUNCS_ONCE([strtoimax]) AC_CHECK_DECLS_ONCE([strtoimax]) if test "$ac_cv_have_decl_strtoimax" != yes; then HAVE_DECL_STRTOIMAX=0 fi if test "$ac_cv_func_strtoimax" = yes; then HAVE_STRTOIMAX=1 dnl On AIX 5.1, strtoimax() fails for values outside the 'int' range. AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether strtoimax works], [gl_cv_func_strtoimax], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <string.h> #include <inttypes.h> int main () { if (sizeof (intmax_t) > sizeof (int)) { const char *s = "4294967295"; char *p; intmax_t res; errno = 0; res = strtoimax (s, &p, 10); if (p != s + strlen (s)) return 1; if (errno != 0) return 2; if (res != (intmax_t) 65535 * (intmax_t) 65537) return 3; } else { const char *s = "2147483647"; char *p; intmax_t res; errno = 0; res = strtoimax (s, &p, 10); if (p != s + strlen (s)) return 1; if (errno != 0) return 2; if (res != 2147483647) return 3; } return 0; } ]])], [gl_cv_func_strtoimax=yes], [gl_cv_func_strtoimax=no], [case "$host_os" in # Guess no on AIX 5. aix5*) gl_cv_func_strtoimax="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtoimax="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_strtoimax="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strtoimax" in *no) REPLACE_STRTOIMAX=1 ;; esac else if test "$ac_cv_have_decl_strtoimax" = yes; then # HP-UX 11.11 has "#define strtoimax(...) ..." but no function. REPLACE_STRTOIMAX=1 fi HAVE_STRTOIMAX=0 fi ]) # Prerequisites of lib/strtoimax.c. AC_DEFUN([gl_PREREQ_STRTOIMAX], [ AC_CHECK_DECLS([strtoll]) ]) ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtok_r.m4��������������������������������������������������������������0000664�0000000�0000000�00000005114�14110572173�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtok_r.m4 serial 16 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOK_R], [ dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([strtok_r]) if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault dnl when the second argument to strtok_r is a constant string that has dnl exactly one byte and compiling with optimization. This bug is, for dnl example, present in the glibc 2.7-18 package in Debian "lenny". dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=5614>. AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include <stdlib.h> #include <string.h> ]], [[static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ]]) ], [gl_cv_func_strtok_r_works=yes], [gl_cv_func_strtok_r_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strtok_r_works" in *no) dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro dnl version in <bits/string2.h> which is wrong. The code compiled dnl into libc is fine. UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi AC_CHECK_DECLS_ONCE([strtok_r]) if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi ]) # Prerequisites of lib/strtok_r.c. AC_DEFUN([gl_PREREQ_STRTOK_R], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtol.m4����������������������������������������������������������������0000664�0000000�0000000�00000002651�14110572173�0016414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtol.m4 serial 7 dnl Copyright (C) 2002-2003, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([strtol]) if test $ac_cv_func_strtol = yes; then AC_CACHE_CHECK([whether strtol works], [gl_cv_func_strtol_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[int result = 0; char *term; /* This test fails on Minix and native Windows. */ { const char input[] = "0x"; (void) strtol (input, &term, 16); if (term != input + 1) result |= 1; } return result; ]]) ], [gl_cv_func_strtol_works=yes], [gl_cv_func_strtol_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_strtol_works="guessing no" ;; *) gl_cv_func_strtol_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strtol_works" in *yes) ;; *) REPLACE_STRTOL=1 ;; esac else HAVE_STRTOL=0 fi ]) ���������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtold.m4���������������������������������������������������������������0000664�0000000�0000000�00000010715�14110572173�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtold.m4 serial 7 dnl Copyright (C) 2002-2003, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOLD], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([strtold]) if test $ac_cv_func_strtold != yes; then HAVE_STRTOLD=0 else AC_CACHE_CHECK([whether strtold obeys POSIX], [gl_cv_func_strtold_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <math.h> #include <errno.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (long double x, long double y) { return x == y; } ]], [[ int result = 0; { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtold (string, &term); if (term != string && *(term - 1) == 0) result |= 1; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; long double value = strtold (string, &term); long double zero = 0.0L; if (1.0L / value != -1.0L / zero || term != (string + 2)) result |= 2; } { /* IRIX 6.5, mingw do not parse hex floats. */ const char *string = "0XaP+1"; char *term; long double value = strtold (string, &term); if (value != 20.0L || term != (string + 6)) result |= 4; } { /* IRIX 6.5 does not parse infinities. HP-UX 11.31/ia64 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; long double value; errno = 0; value = strtold (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 8; } { /* glibc-2.3.2, IRIX 6.5, mingw, Haiku misparse "nan()". */ const char *string = "nan()"; char *term; long double value = strtold (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 16; } { /* Mac OS X 10.5, IRIX 6.5 misparse "nan(". */ const char *string = "nan("; char *term; long double value = strtold (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 32; } { /* In Cygwin 2.9, strtold does not set errno upon underflow. */ const char *string = "1E-100000"; char *term; long double value; errno = 0; value = strtold (string, &term); if (term != (string + 9) || (value == 0.0L && errno != ERANGE)) result |= 64; } return result; ]])], [gl_cv_func_strtold_works=yes], [if expr $? '>=' 64 >/dev/null; then gl_cv_func_strtold_works="no (underflow problem)" else gl_cv_func_strtold_works=no fi ], [dnl The last known bugs in glibc strtold(), as of this writing, dnl were fixed in version 2.8 AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif ], [gl_cv_func_strtold_works="guessing yes"], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_strtold_works="guessing yes" ;; # Guess 'no (underflow problem)' on Cygwin. cygwin*) gl_cv_func_strtold_works="guessing no (underflow problem)" ;; *) gl_cv_func_strtold_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_strtold_works" in *yes) ;; *) REPLACE_STRTOLD=1 case "$gl_cv_func_strtold_works" in *"no (underflow problem)") AC_DEFINE([STRTOLD_HAS_UNDERFLOW_BUG], [1], [Define to 1 if strtold does not set errno upon underflow.]) ;; esac ;; esac fi ]) # Prerequisites of lib/strtold.c. AC_DEFUN([gl_PREREQ_STRTOLD], [ AC_REQUIRE([gl_CHECK_LDEXPL_NO_LIBM]) if test $gl_cv_func_ldexpl_no_libm = yes; then AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], [Define if the ldexpl function is available in libc.]) fi AC_CHECK_FUNCS([nl_langinfo]) ]) ���������������������������������������������������gnulib-20210822~d383792/m4/strtoll.m4���������������������������������������������������������������0000664�0000000�0000000�00000003002�14110572173�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoll.m4 serial 9 dnl Copyright (C) 2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOLL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([strtoll]) if test $ac_cv_func_strtoll = yes; then AC_CACHE_CHECK([whether strtoll works], [gl_cv_func_strtoll_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[int result = 0; char *term; /* This test fails on Minix and native Windows. */ { const char input[] = "0x"; (void) strtoll (input, &term, 16); if (term != input + 1) result |= 1; } return result; ]]) ], [gl_cv_func_strtoll_works=yes], [gl_cv_func_strtoll_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_strtoll_works="guessing no" ;; *) gl_cv_func_strtoll_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strtoll_works" in *yes) ;; *) REPLACE_STRTOLL=1 ;; esac else HAVE_STRTOLL=0 fi ]) # Prerequisites of lib/strtoll.c. AC_DEFUN([gl_PREREQ_STRTOLL], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtoul.m4���������������������������������������������������������������0000664�0000000�0000000�00000002662�14110572173�0016603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoul.m4 serial 6 dnl Copyright (C) 2002, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOUL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([strtoul]) if test $ac_cv_func_strtoul = yes; then AC_CACHE_CHECK([whether strtoul works], [gl_cv_func_strtoul_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[int result = 0; char *term; /* This test fails on Minix and native Windows. */ { const char input[] = "0x"; (void) strtoul (input, &term, 16); if (term != input + 1) result |= 1; } return result; ]]) ], [gl_cv_func_strtoul_works=yes], [gl_cv_func_strtoul_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_strtoul_works="guessing no" ;; *) gl_cv_func_strtoul_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strtoul_works" in *yes) ;; *) REPLACE_STRTOUL=1 ;; esac else HAVE_STRTOUL=0 fi ]) ������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtoull.m4��������������������������������������������������������������0000664�0000000�0000000�00000003022�14110572173�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoull.m4 serial 9 dnl Copyright (C) 2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOULL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([strtoull]) if test $ac_cv_func_strtoull = yes; then AC_CACHE_CHECK([whether strtoull works], [gl_cv_func_strtoull_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[int result = 0; char *term; /* This test fails on Minix and native Windows. */ { const char input[] = "0x"; (void) strtoull (input, &term, 16); if (term != input + 1) result |= 1; } return result; ]]) ], [gl_cv_func_strtoull_works=yes], [gl_cv_func_strtoull_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_strtoull_works="guessing no" ;; *) gl_cv_func_strtoull_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strtoull_works" in *yes) ;; *) REPLACE_STRTOULL=1 ;; esac else HAVE_STRTOULL=0 fi ]) # Prerequisites of lib/strtoull.c. AC_DEFUN([gl_PREREQ_STRTOULL], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strtoumax.m4�������������������������������������������������������������0000664�0000000�0000000�00000001530�14110572173�0017126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoumax.m4 serial 13 dnl Copyright (C) 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOUMAX], [ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) dnl On OSF/1 5.1 with cc, this function is declared but not defined. AC_CHECK_FUNCS_ONCE([strtoumax]) AC_CHECK_DECLS_ONCE([strtoumax]) if test "$ac_cv_have_decl_strtoumax" = yes; then if test "$ac_cv_func_strtoumax" != yes; then # HP-UX 11.11 has "#define strtoimax(...) ..." but no function. REPLACE_STRTOUMAX=1 fi else HAVE_DECL_STRTOUMAX=0 fi ]) # Prerequisites of lib/strtoumax.c. AC_DEFUN([gl_PREREQ_STRTOUMAX], [ AC_CHECK_DECLS([strtoull]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/strverscmp.m4������������������������������������������������������������0000664�0000000�0000000�00000001177�14110572173�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strverscmp.m4 serial 9 dnl Copyright (C) 2002, 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRVERSCMP], [ dnl Persuade glibc <string.h> to declare strverscmp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strverscmp]) if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi ]) # Prerequisites of lib/strverscmp.c. AC_DEFUN([gl_PREREQ_STRVERSCMP], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/supersede.m4�������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# supersede.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SUPERSEDE], [ AC_CHECK_FUNCS([chown]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/symlink.m4���������������������������������������������������������������0000664�0000000�0000000�00000003766�14110572173�0016563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # See if we need to provide symlink replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_SYMLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([symlink]) dnl The best we can do on mingw is provide a dummy that always fails, so dnl that compilation can proceed with fewer ifdefs. On FreeBSD 7.2, AIX 7.1, dnl and Solaris 9, we want to fix a bug with trailing slash handling. if test $ac_cv_func_symlink = no; then HAVE_SYMLINK=0 else AC_CACHE_CHECK([whether symlink handles trailing slash correctly], [gl_cv_func_symlink_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[int result = 0; if (!symlink ("a", "conftest.link/")) result |= 1; if (symlink ("conftest.f", "conftest.lnk2")) result |= 2; else if (!symlink ("a", "conftest.lnk2/")) result |= 4; return result; ]])], [gl_cv_func_symlink_works=yes], [gl_cv_func_symlink_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_symlink_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_symlink_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_symlink_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.f conftest.link conftest.lnk2]) case "$gl_cv_func_symlink_works" in *yes) ;; *) REPLACE_SYMLINK=1 ;; esac fi ]) ����������gnulib-20210822~d383792/m4/symlinkat.m4�������������������������������������������������������������0000664�0000000�0000000�00000003705�14110572173�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # See if we need to provide symlinkat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_SYMLINKAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_OPENAT]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([symlinkat]) if test $ac_cv_func_symlinkat = no; then HAVE_SYMLINKAT=0 else AC_CACHE_CHECK([whether symlinkat handles trailing slash correctly], [gl_cv_func_symlinkat_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> #include <unistd.h> ]], [[int result = 0; if (!symlinkat ("a", AT_FDCWD, "conftest.link/")) result |= 1; if (symlinkat ("conftest.f", AT_FDCWD, "conftest.lnk2")) result |= 2; else if (!symlinkat ("a", AT_FDCWD, "conftest.lnk2/")) result |= 4; return result; ]])], [gl_cv_func_symlinkat_works=yes], [gl_cv_func_symlinkat_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_symlinkat_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_symlinkat_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_symlinkat_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.f conftest.link conftest.lnk2]) case "$gl_cv_func_symlinkat_works" in *yes) ;; *) REPLACE_SYMLINKAT=1 ;; esac fi ]) �����������������������������������������������������������gnulib-20210822~d383792/m4/sys_file_h.m4������������������������������������������������������������0000664�0000000�0000000�00000003407�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/file.h>. # serial 9 # Copyright (C) 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Richard W.M. Jones. AC_DEFUN_ONCE([gl_SYS_FILE_H], [ AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) dnl <sys/file.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/file.h]) if test $ac_cv_header_sys_file_h = yes; then HAVE_SYS_FILE_H=1 else HAVE_SYS_FILE_H=0 fi AC_SUBST([HAVE_SYS_FILE_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/file.h> ]], [flock]) ]) # gl_SYS_FILE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_FILE_MODULE_INDICATOR], [ gl_SYS_FILE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_FILE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_FILE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOCK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_FILE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_FILE_H_DEFAULTS], [ HAVE_FLOCK=1; AC_SUBST([HAVE_FLOCK]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_ioctl_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000005775�14110572173�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_ioctl_h.m4 serial 15 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SYS_IOCTL_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/ioctl.h]) if test $ac_cv_header_sys_ioctl_h = yes; then HAVE_SYS_IOCTL_H=1 dnl Test whether <sys/ioctl.h> declares ioctl(), or whether some other dnl header file, such as <unistd.h> or <stropts.h>, is needed for that. AC_CACHE_CHECK([whether <sys/ioctl.h> declares ioctl], [gl_cv_decl_ioctl_in_sys_ioctl_h], [dnl We cannot use AC_CHECK_DECL because it produces its own messages. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/ioctl.h>]], [[(void) ioctl;]])], [gl_cv_decl_ioctl_in_sys_ioctl_h=yes], [gl_cv_decl_ioctl_in_sys_ioctl_h=no]) ]) else HAVE_SYS_IOCTL_H=0 fi AC_SUBST([HAVE_SYS_IOCTL_H]) dnl <sys/ioctl.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/ioctl.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/ioctl.h> /* Some platforms declare ioctl in the wrong header. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <unistd.h> #endif ]], [ioctl]) ]) # gl_SYS_IOCTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_IOCTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_IOCTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_IOCTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IOCTL]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_IOCTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. SYS_IOCTL_H_HAVE_WINSOCK2_H=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H]) SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) REPLACE_IOCTL=0; AC_SUBST([REPLACE_IOCTL]) ]) ���gnulib-20210822~d383792/m4/sys_random_h.m4����������������������������������������������������������0000664�0000000�0000000�00000004547�14110572173�0017560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_random_h.m4 serial 8 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_RANDOM_H], [ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) dnl <sys/random.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/random.h]) if test $ac_cv_header_sys_random_h = yes; then HAVE_SYS_RANDOM_H=1 else HAVE_SYS_RANDOM_H=0 fi AC_SUBST([HAVE_SYS_RANDOM_H]) m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) if test $ac_cv_header_sys_random_h = yes; then UNISTD_H_HAVE_SYS_RANDOM_H=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_RANDOM_H /* Additional includes are needed before <sys/random.h> on uClibc and Mac OS X. */ # include <sys/types.h> # include <stdlib.h> # include <sys/random.h> #endif ]], [getrandom]) ]) # gl_SYS_RANDOM_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_RANDOM_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_RANDOM_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_RANDOM_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETRANDOM]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_RANDOM_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_GETRANDOM=1; AC_SUBST([HAVE_GETRANDOM]) REPLACE_GETRANDOM=0; AC_SUBST([REPLACE_GETRANDOM]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_resource_h.m4��������������������������������������������������������0000664�0000000�0000000�00000004270�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_resource_h.m4 serial 5 dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_RESOURCE_H], [ AC_REQUIRE([gl_SYS_RESOURCE_H_DEFAULTS]) dnl <sys/resource.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/resource.h]) if test $ac_cv_header_sys_resource_h = yes; then HAVE_SYS_RESOURCE_H=1 else HAVE_SYS_RESOURCE_H=0 fi AC_SUBST([HAVE_SYS_RESOURCE_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_RESOURCE_H /* At least FreeBSD 5.0 needs extra headers before <sys/resource.h> will compile. */ # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif ]], [getrusage]) ]) # gl_SYS_RESOURCE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_RESOURCE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_RESOURCE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_RESOURCE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_RESOURCE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETRUSAGE]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_RESOURCE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_RESOURCE_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_RESOURCE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_GETRUSAGE=1; AC_SUBST([HAVE_GETRUSAGE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_select_h.m4����������������������������������������������������������0000664�0000000�0000000�00000010206�14110572173�0017544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_select_h.m4 serial 23 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_SELECT_H], [ AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([whether <sys/select.h> is self-contained], [gl_cv_header_sys_select_h_selfcontained], [ dnl Test against two bugs: dnl 1. On many platforms, <sys/select.h> assumes prior inclusion of dnl <sys/types.h>. dnl 2. On OSF/1 4.0, <sys/select.h> provides only a forward declaration dnl of 'struct timeval', and no definition of this type. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/select.h>]], [[struct timeval b;]])], [gl_cv_header_sys_select_h_selfcontained=yes], [gl_cv_header_sys_select_h_selfcontained=no]) dnl Test against another bug: dnl 3. On Solaris 10, <sys/select.h> provides an FD_ZERO implementation dnl that relies on memset(), but without including <string.h>. if test $gl_cv_header_sys_select_h_selfcontained = yes; then AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[int memset; int bzero;]]) ], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[ #undef memset #define memset nonexistent_memset extern #ifdef __cplusplus "C" #endif void *memset (void *, int, unsigned long); #undef bzero #define bzero nonexistent_bzero extern #ifdef __cplusplus "C" #endif void bzero (void *, unsigned long); fd_set fds; FD_ZERO (&fds); ]]) ], [], [gl_cv_header_sys_select_h_selfcontained=no]) ]) fi ]) dnl <sys/select.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/select.h]) if test $ac_cv_header_sys_select_h = yes; then HAVE_SYS_SELECT_H=1 else HAVE_SYS_SELECT_H=0 fi AC_SUBST([HAVE_SYS_SELECT_H]) gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <sys/select.h> ]], [pselect select]) ]) # gl_SYS_SELECT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SELECT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SELECT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PSELECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SELECT]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT]) REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT]) REPLACE_SELECT=0; AC_SUBST([REPLACE_SELECT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_socket_h.m4����������������������������������������������������������0000664�0000000�0000000�00000016266�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 28 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson. AC_DEFUN_ONCE([gl_SYS_SOCKET_H], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, <sys/socket.h> should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the <sys/socket.h> replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi AC_SUBST([HAVE_SYS_SOCKET_H]) gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <sys/select.h> replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <arpa/inet.h> replacement. # Sets and substitutes HAVE_WS2TCPIP_H. AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], [ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_WS2TCPIP_H]) ]) # gl_SYS_SOCKET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SOCKET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_stat_h.m4������������������������������������������������������������0000664�0000000�0000000�00000012054�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_stat_h.m4 serial 41 -*- Autoconf -*- dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Eric Blake. dnl Provide a GNU-like <sys/stat.h>. AC_DEFUN_ONCE([gl_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Check for broken stat macros. AC_REQUIRE([AC_HEADER_STAT]) gl_CHECK_NEXT_HEADERS([sys/stat.h]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to enable precise timestamps in 'struct stat'. m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) ], [ WINDOWS_STAT_TIMESPEC=0 ]) AC_SUBST([WINDOWS_STAT_TIMESPEC]) dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) dnl Define types that are supposed to be defined in <sys/types.h> or dnl <sys/stat.h>. AC_CHECK_TYPE([nlink_t], [], [AC_DEFINE([nlink_t], [int], [Define to the type of st_nlink in struct stat, or a supertype.])], [#include <sys/types.h> #include <sys/stat.h>]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> ]], [fchmodat fstat fstatat futimens getumask lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_SYS_STAT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_STAT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK]) HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) REPLACE_MKFIFOAT=0; AC_SUBST([REPLACE_MKFIFOAT]) REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_MKNODAT=0; AC_SUBST([REPLACE_MKNODAT]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_time_h.m4������������������������������������������������������������0000664�0000000�0000000�00000010420�14110572173�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/time.h>. # serial 12 # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Martin Lambers. AC_DEFUN_ONCE([gl_SYS_TIME_H], [ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 dnl statements that occur in other macros. AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_HEADERS_ONCE([sys/time.h]) gl_CHECK_NEXT_HEADERS([sys/time.h]) if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> dnl only. So include that header in the list. gl_PREREQ_SYS_H_WINSOCK2 AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; x.tv_sec = x.tv_usec;]])], [gl_cv_sys_struct_timeval=yes], [gl_cv_sys_struct_timeval=no]) ]) if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is dnl smaller than the 'time_t' type mandated by POSIX. dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but dnl that is good enough. AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], [gl_cv_sys_struct_timeval_tv_sec], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ]])], [gl_cv_sys_struct_timeval_tv_sec=yes], [gl_cv_sys_struct_timeval_tv_sec=no]) ]) if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> ]], [gettimeofday]) ]) # gl_SYS_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETTIMEOFDAY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TIME_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_times_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000004150�14110572173�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/times.h>. # serial 11 # Copyright (C) 2008-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Simon Josefsson. AC_DEFUN_ONCE([gl_SYS_TIMES_H], [ AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS]) dnl <sys/times.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/times.h]) if test $ac_cv_header_sys_times_h = yes; then HAVE_SYS_TIMES_H=1 AC_CHECK_TYPES([struct tms], [], [HAVE_STRUCT_TMS=0], [[ #include <sys/times.h> ]]) else HAVE_SYS_TIMES_H=0 HAVE_STRUCT_TMS=0 fi AC_SUBST([HAVE_SYS_TIMES_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems have incomplete headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <time.h> #endif #include <sys/times.h> ]], [times]) ]) # gl_SYS_TIMES_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_TIMES_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_TIMES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TIMES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIMES_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMES]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIMES_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TIMES_H_DEFAULTS], [ HAVE_STRUCT_TMS=1; AC_SUBST([HAVE_STRUCT_TMS]) HAVE_TIMES=1; AC_SUBST([HAVE_TIMES]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_types_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000004361�14110572173�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 13 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> # The 2.70 version isn't quoted properly, so override it too. m4_version_prereq([2.70.1], [], [ m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <sysmacros.h>.])]) fi ])# AC_HEADER_MAJOR ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_uio_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000003102�14110572173�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_uio_h.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_UIO_H], [ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) dnl <sys/uio.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/uio.h]) if test $ac_cv_header_sys_uio_h = yes; then HAVE_SYS_UIO_H=1 else HAVE_SYS_UIO_H=0 fi AC_SUBST([HAVE_SYS_UIO_H]) ]) # gl_SYS_UIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_UIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_UIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], [ ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_utsname_h.m4���������������������������������������������������������0000664�0000000�0000000�00000004660�14110572173�0017750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_utsname_h.m4 serial 11 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SYS_UTSNAME_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS]) dnl <sys/utsname.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/utsname.h]) if test $ac_cv_header_sys_utsname_h != yes; then HAVE_SYS_UTSNAME_H=0 HAVE_STRUCT_UTSNAME=0 else HAVE_SYS_UTSNAME_H=1 AC_CHECK_TYPES([struct utsname], [], [HAVE_STRUCT_UTSNAME=0], [[ /* Minix 3.1.8 has a bug: <stddef.h> must be included before <sys/utsname.h>. */ #include <stddef.h> #include <sys/utsname.h> ]]) fi AC_SUBST([HAVE_SYS_UTSNAME_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Minix 3.1.8 has a bug: <stddef.h> must be included before <sys/utsname.h>. */ #include <stddef.h> #include <sys/utsname.h> ]], [uname]) ]) # gl_SYS_UTSNAME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_UTSNAME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_UTSNAME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_UTSNAME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_UTSNAME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNAME]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_UTSNAME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_UTSNAME_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_UNAME=1; AC_SUBST([HAVE_UNAME]) HAVE_STRUCT_UTSNAME=1; AC_SUBST([HAVE_STRUCT_UTSNAME]) ]) ��������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sys_wait_h.m4������������������������������������������������������������0000664�0000000�0000000�00000003516�14110572173�0017237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_wait_h.m4 serial 9 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_WAIT_H], [ AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) dnl <sys/wait.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/wait.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/wait.h>]], [waitpid]) ]) # gl_SYS_WAIT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_WAIT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WAITPID]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/sysexits.m4��������������������������������������������������������������0000664�0000000�0000000�00000002373�14110572173�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sysexits.m4 serial 6 dnl Copyright (C) 2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SYSEXITS], [ AC_CHECK_HEADERS_ONCE([sysexits.h]) if test $ac_cv_header_sysexits_h = yes; then HAVE_SYSEXITS_H=1 gl_CHECK_NEXT_HEADERS([sysexits.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sysexits.h>]], [[switch (0) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } ]])], [SYSEXITS_H=], [SYSEXITS_H=sysexits.h]) else HAVE_SYSEXITS_H=0 SYSEXITS_H=sysexits.h fi AC_SUBST([HAVE_SYSEXITS_H]) AC_SUBST([SYSEXITS_H]) AM_CONDITIONAL([GL_GENERATE_SYSEXITS_H], [test -n "$SYSEXITS_H"]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tan.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0015645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tan.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TAN], [ dnl Determine TAN_LIBM. gl_COMMON_DOUBLE_MATHFUNC([tan]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tanf.m4������������������������������������������������������������������0000664�0000000�0000000�00000002053�14110572173�0016011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_TAN]) dnl Persuade glibc <math.h> to declare tanf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether tanf() exists. Assume that tanf(), if it exists, is dnl defined in the same library as tan(). save_LIBS="$LIBS" LIBS="$LIBS $TAN_LIBM" AC_CHECK_FUNCS([tanf]) LIBS="$save_LIBS" if test $ac_cv_func_tanf = yes; then TANF_LIBM="$TAN_LIBM" else HAVE_TANF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_tanf, not tanf. AC_CHECK_DECLS([tanf], [REPLACE_TANF=1], , [[#include <math.h>]]) TANF_LIBM="$TAN_LIBM" fi AC_SUBST([TANF_LIBM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tanh.m4������������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0016021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanh.m4 serial 1 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TANH], [ dnl Determine TANH_LIBM. gl_COMMON_DOUBLE_MATHFUNC([tanh]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tanhf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanhf.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TANHF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_TANH]) dnl Persuade glibc <math.h> to declare tanhf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether tanhf() exists. Assume that tanhf(), if it exists, is dnl defined in the same library as tanh(). save_LIBS="$LIBS" LIBS="$LIBS $TANH_LIBM" AC_CHECK_FUNCS([tanhf]) LIBS="$save_LIBS" if test $ac_cv_func_tanhf = yes; then TANHF_LIBM="$TANH_LIBM" else HAVE_TANHF=0 dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_tanhf, not tanhf. AC_CHECK_DECLS([tanhf], [REPLACE_TANHF=1], , [[#include <math.h>]]) TANHF_LIBM="$TANH_LIBM" fi AC_SUBST([TANHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tanl.m4������������������������������������������������������������������0000664�0000000�0000000�00000006020�14110572173�0016015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanl.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare tanl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) TANL_LIBM= AC_CACHE_CHECK([whether tanl() can be used without linking with libm], [gl_cv_func_tanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = tanl; long double x;]], [[return funcptr (x) > 0.4 || tanl (x) > 0.4;]])], [gl_cv_func_tanl_no_libm=yes], [gl_cv_func_tanl_no_libm=no]) ]) if test $gl_cv_func_tanl_no_libm = no; then AC_CACHE_CHECK([whether tanl() can be used with libm], [gl_cv_func_tanl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (* volatile funcptr) (long double) = tanl; long double x;]], [[return funcptr (x) > 0.4 || tanl (x) > 0.4;]])], [gl_cv_func_tanl_in_libm=yes], [gl_cv_func_tanl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_tanl_in_libm = yes; then TANL_LIBM=-lm fi fi if test $gl_cv_func_tanl_no_libm = yes \ || test $gl_cv_func_tanl_in_libm = yes; then dnl Also check whether it's declared. dnl Mac OS X 10.3 has tanl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([tanl], , [HAVE_DECL_TANL=0], [[#include <math.h>]]) else HAVE_DECL_TANL=0 HAVE_TANL=0 dnl Find libraries needed to link lib/tanl.c, lib/trigl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_TAN]) TANL_LIBM="$TAN_LIBM" else AC_REQUIRE([gl_FUNC_ISNANL]) AC_REQUIRE([gl_FUNC_FLOOR]) AC_REQUIRE([gl_FUNC_FLOORL]) dnl Append $ISNANL_LIBM to TANL_LIBM, avoiding gratuitous duplicates. case " $TANL_LIBM " in *" $ISNANL_LIBM "*) ;; *) TANL_LIBM="$TANL_LIBM $ISNANL_LIBM" ;; esac dnl Append $FLOOR_LIBM to TANL_LIBM, avoiding gratuitous duplicates. case " $TANL_LIBM " in *" $FLOOR_LIBM "*) ;; *) TANL_LIBM="$TANL_LIBM $FLOOR_LIBM" ;; esac dnl Append $FLOORL_LIBM to TANL_LIBM, avoiding gratuitous duplicates. case " $TANL_LIBM " in *" $FLOORL_LIBM "*) ;; *) TANL_LIBM="$TANL_LIBM $FLOORL_LIBM" ;; esac fi fi AC_SUBST([TANL_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tcgetsid.m4��������������������������������������������������������������0000664�0000000�0000000�00000002205�14110572173�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tcgetsid.m4 serial 5 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TCGETSID], [ AC_REQUIRE([gl_TERMIOS_H_DEFAULTS]) dnl Persuade glibc <termios.h> to declare tcgetsid(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([tcgetsid], , , [[#include <termios.h>]]) if test $ac_cv_have_decl_tcgetsid = no; then HAVE_DECL_TCGETSID=0 fi dnl We can't use AC_CHECK_FUNC here, because tcgetsid() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for tcgetsid], [gl_cv_func_tcgetsid], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <termios.h>]], [[return tcgetsid(0);]]) ], [gl_cv_func_tcgetsid=yes], [gl_cv_func_tcgetsid=no]) ]) if test $gl_cv_func_tcgetsid = yes; then HAVE_TCGETSID=1 else HAVE_TCGETSID=0 fi ]) # Prerequisites of lib/tcgetsid.c. AC_DEFUN([gl_PREREQ_TCGETSID], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tempname.m4��������������������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 # Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose # it as a public API, and provide it on systems that are lacking. AC_DEFUN([gl_FUNC_GEN_TEMPNAME], [ gl_PREREQ_TEMPNAME ]) # Prerequisites of lib/tempname.c. AC_DEFUN([gl_PREREQ_TEMPNAME], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/termios_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000004114�14110572173�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# termios_h.m4 serial 7 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_TERMIOS_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_TERMIOS_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([termios.h]) if test $ac_cv_header_termios_h != yes; then HAVE_TERMIOS_H=0 fi dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <termios.h>]], [tcgetsid]) ]) # gl_TERMIOS_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_TERMIOS_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_TERMIOS_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_TERMIOS_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TERMIOS_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TCGETSID]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_TERMIOS_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_TERMIOS_H_DEFAULTS]) ]) AC_DEFUN([gl_TERMIOS_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_TCGETSID=1; AC_SUBST([HAVE_DECL_TCGETSID]) HAVE_TERMIOS_H=1; AC_SUBST([HAVE_TERMIOS_H]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/thrd.m4������������������������������������������������������������������0000664�0000000�0000000�00000004032�14110572173�0016021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# thrd.m4 serial 1 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_THRD_JOIN], [ AC_REQUIRE([gl_THREADS_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_header_threads_h = yes; then if test $BROKEN_THRD_START_T = 1; then REPLACE_THRD_CREATE=1 REPLACE_THRD_CURRENT=1 REPLACE_THRD_DETACH=1 REPLACE_THRD_EQUAL=1 REPLACE_THRD_JOIN=1 AC_DEFINE([BROKEN_THRD_START_T], [1], [Define if the thrd_start_t type is not as described in ISO C 11.]) fi dnl On Solaris 11.4, thrd_join crashes when the second argument is NULL. AC_CACHE_CHECK([whether thrd_join works], [gl_cv_func_thrd_join_works], [save_LIBS="$LIBS" LIBS="$LIBS $LIBSTDTHREAD" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <threads.h> static int func (void *arg) { return (arg != NULL); } ]], [[thrd_t thread; if (thrd_create (&thread, func, NULL) != thrd_success) return 1; if (thrd_join (thread, NULL) != thrd_success) return 2; return 0; ]])], [gl_cv_func_thrd_join_works=yes], [gl_cv_func_thrd_join_works=no], [case "$host_os" in # Only Solaris is known to be broken. solaris*) gl_cv_func_thrd_join_works="guessing no" ;; *) gl_cv_func_thrd_join_works="guessing yes" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_thrd_join_works" in *yes) ;; *) REPLACE_THRD_JOIN=1 AC_DEFINE([BROKEN_THRD_JOIN], [1], [Define if the thrd_join function does not behave as in ISO C 11.]) ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/thread.m4����������������������������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# thread.m4 serial 3 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_THREAD], [ AC_REQUIRE([gl_THREADLIB]) if test $gl_threads_api = posix; then gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_CHECK_FUNCS([pthread_atfork]) LIBS="$gl_save_LIBS" fi ]) ���������������gnulib-20210822~d383792/m4/threadlib.m4�������������������������������������������������������������0000664�0000000�0000000�00000057411�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threadlib.m4 serial 31 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.60]) dnl The general structure of the multithreading modules in gnulib is that we dnl have three set of modules: dnl dnl * POSIX API: dnl pthread, which combines dnl pthread-h dnl pthread-thread dnl pthread-once dnl pthread-mutex dnl pthread-rwlock dnl pthread-cond dnl pthread-tss dnl pthread-spin dnl sched_yield dnl dnl * ISO C API: dnl threads, which combines dnl threads-h dnl thrd dnl mtx dnl cnd dnl tss dnl dnl * Gnulib API, with an implementation that can be chosen at configure dnl time through the option --enable-threads=... dnl thread dnl lock dnl cond dnl tls dnl yield dnl dnl They are independent, except for the fact that dnl - the implementation of the ISO C API may use the POSIX (or some other dnl platform dependent) API, dnl - the implementation of the Gnulib API may use the POSIX or ISO C or dnl some other platform dependent API, depending on the --enable-threads dnl option. dnl dnl This file contains macros for all of these APIs! dnl ============================================================================ dnl Macros for all thread APIs AC_DEFUN([gl_ANYTHREADLIB_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi ]) dnl Checks whether the compiler and linker support weak declarations of symbols. AC_DEFUN([gl_WEAK_SYMBOLS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak dnl symbol and linking against a shared library that has a dependency on dnl the shared library that defines the symbol. case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ]) case "$gl_cv_have_weak" in *yes) AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [Define to 1 if the compiler and linker support weak declarations of symbols.]) ;; esac ]) dnl ============================================================================ dnl Macros for the POSIX API dnl gl_PTHREADLIB dnl ------------- dnl Tests for the libraries needs for using the POSIX threads API. dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. dnl Sets the variable LIBPMULTITHREAD, for programs that really need dnl multithread functionality. The difference between LIBPTHREAD and dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. dnl Sets the variable LIB_SCHED_YIELD to the linker options needed to use the dnl sched_yield() function. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX dnl threads API is available. dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_PTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) AC_EGREP_CPP([Lucky user], [#include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_pthread_in_glibc=yes], []) ;; esac echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac fi ]) elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread]) if test $gl_pthread_api != yes; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r]) fi fi echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD fi AC_MSG_CHECKING([whether POSIX threads API is available]) AC_MSG_RESULT([$gl_pthread_api]) AC_SUBST([LIBPTHREAD]) AC_SUBST([LIBPMULTITHREAD]) if test $gl_pthread_api = yes; then AC_DEFINE([HAVE_PTHREAD_API], [1], [Define if you have the <pthread.h> header and the POSIX threads API.]) fi dnl On some systems, sched_yield is in librt, rather than in libpthread. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sched.h>]], [[sched_yield ();]])], [LIB_SCHED_YIELD= ], [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [LIB_SCHED_YIELD=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [LIB_SCHED_YIELD=-lposix4])]) ]) AC_SUBST([LIB_SCHED_YIELD]) gl_pthreadlib_body_done=done fi ]) AC_DEFUN([gl_PTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_PTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the ISO C API dnl gl_STDTHREADLIB dnl --------------- dnl Tests for the libraries needs for using the ISO C threads API. dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads dnl API is available. dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_STDTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_stdthreadlib_body_done"; then AC_CHECK_HEADERS_ONCE([threads.h]) case "$host_os" in mingw*) LIBSTDTHREAD= ;; *) gl_PTHREADLIB_BODY if test $ac_cv_header_threads_h = yes; then dnl glibc >= 2.29 has thrd_create in libpthread. dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in dnl libc. AC_CHECK_FUNCS([thrd_create]) if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else AC_CHECK_LIB([stdthreads], [thrd_create], [ LIBSTDTHREAD='-lstdthreads -lpthread' ], [ dnl Guess that thrd_create is in libpthread. LIBSTDTHREAD="$LIBPMULTITHREAD" ]) fi else dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" fi ;; esac AC_SUBST([LIBSTDTHREAD]) AC_MSG_CHECKING([whether ISO C threads API is available]) AC_MSG_RESULT([$ac_cv_header_threads_h]) gl_stdthreadlib_body_done=done fi ]) AC_DEFUN([gl_STDTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_STDTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the Gnulib API dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. dnl The choice --enable-threads=isoc+posix is available only on platforms that dnl have both the ISO C and the POSIX threads APIs. It has the effect of using dnl the ISO C API for most things and the POSIX API only for creating and dnl controlling threads (because there is no equivalent to pthread_atfork in dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=]) AC_ARG_ENABLE([threads], AS_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AS_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; dnl Obey gl_AVOID_WINPTHREAD on mingw. mingw*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: gl_ANYTHREADLIB_EARLY fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. gl_WEAK_SYMBOLS if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then dnl If we use weak symbols to implement pthread_in_use / pth_in_use / dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create dnl facility is in use. AC_CHECK_HEADERS_ONCE([threads.h]) : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then AC_CHECK_HEADERS_ONCE([threads.h]) gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then gl_PTHREADLIB_BODY LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], [Define if references to the POSIX multithreading library are satisfied by libc.]) else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() dnl etc. will succeed, we need a runtime test. AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then gl_STDTHREADLIB_BODY LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc AC_DEFINE([USE_ISOC_THREADS], [1], [Define if the ISO C multithreading library can be used.]) fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl gl_AVOID_WINPTHREAD dnl ------------------- dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_AVOID_WINPTHREAD], [ m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) ]) dnl ============================================================================ dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl Linux/glibc 2.34 posix Y OK dnl dnl GNU Hurd/glibc posix -lpthread Y OK dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/threads_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000015216�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threads_h.m4 serial 10 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether the <threads.h> facility is available. dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile dnl for a program that uses the <threads.h> functions. dnl Sets the variable LIBTHREADLOCAL to the linker options for use in a Makefile dnl for a program that uses the 'thread_local' macro. AC_DEFUN_ONCE([gl_THREADS_H], [ AC_REQUIRE([gl_THREADS_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_STDTHREADLIB]) gl_CHECK_NEXT_HEADERS([threads.h]) if test $ac_cv_header_threads_h = yes; then HAVE_THREADS_H=1 else HAVE_THREADS_H=0 fi AC_SUBST([HAVE_THREADS_H]) if test $HAVE_THREADS_H = 1; then dnl AIX 7.1..7.2 defines thrd_start_t incorrectly, namely as dnl 'void * (*) (void *)' instead of 'int (*) (void *)'. AC_CACHE_CHECK([whether thrd_start_t is correct], [gl_cv_thrd_start_t_correct], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <threads.h> #ifdef __cplusplus extern "C" { #endif extern void foo (thrd_start_t); extern void foo (int (*) (void *)); #ifdef __cplusplus } #endif ]], [[]])], [gl_cv_thrd_start_t_correct=yes], [gl_cv_thrd_start_t_correct=no]) ]) if test $gl_cv_thrd_start_t_correct != yes; then BROKEN_THRD_START_T=1 fi fi dnl Define _Thread_local. dnl GCC, for example, supports '__thread' since version 3.3, but it supports dnl '_Thread_local' only starting with version 4.9. AH_VERBATIM([thread_local], gl_THREAD_LOCAL_DEFINITION) dnl Test whether _Thread_local is supported in the compiler and linker. AC_CACHE_CHECK([whether _Thread_local works], [gl_cv_thread_local_works], [dnl On AIX 7.1 with GCC 4.8.1, this test program compiles fine, but the dnl 'test-thread-local' test misbehaves. dnl On Android 4.3, this test program compiles fine, but the dnl 'test-thread-local' test crashes. if case "$host_os" in aix*) test -n "$GCC" ;; linux*-android*) true ;; *) false ;; esac then gl_cv_thread_local_works="guessing no" else AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([gl_THREAD_LOCAL_DEFINITION[ int _Thread_local x; ]], [[ x = 42; ]])], [if test "$cross_compiling" != yes; then gl_cv_thread_local_works=yes else gl_cv_thread_local_works="guessing yes" fi ], [if test "$cross_compiling" != yes; then gl_cv_thread_local_works=no else gl_cv_thread_local_works="guessing no" fi ]) fi ]) case "$gl_cv_thread_local_works" in *yes) ;; *) HAVE_THREAD_LOCAL=0 ;; esac dnl Determine the link dependencies of '_Thread_local'. LIBTHREADLOCAL= dnl On AIX 7.2 with "xlc -qthreaded -qtls", programs that use _Thread_local dnl as defined above produce link errors regarding the symbols dnl '.__tls_get_mod' and '__tls_get_addr'. Similarly, on AIX 7.2 with gcc, dnl 32-bit programs that use _Thread_local produce link errors regarding the dnl symbol '__get_tpointer'. The fix is to link with -lpthread. case "$host_os" in aix*) LIBTHREADLOCAL=-lpthread ;; esac AC_SUBST([LIBTHREADLOCAL]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <threads.h> ]], [call_once cnd_broadcast cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait mtx_destroy mtx_init mtx_lock mtx_timedlock mtx_trylock mtx_unlock thrd_create thrd_current thrd_detach thrd_equal thrd_exit thrd_join thrd_sleep thrd_yield tss_create tss_delete tss_get tss_set]) ]) dnl Expands to C preprocessor statements that define _Thread_local. AC_DEFUN([gl_THREAD_LOCAL_DEFINITION], [[/* The _Thread_local keyword of C11. */ /* GNU C: <https://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Thread-Local.html> */ /* ARM C: <https://developer.arm.com/docs/dui0472/latest/compiler-specific-features/__declspecthread> */ /* IBM C: supported only with compiler option -qtls, see <https://www.ibm.com/support/knowledgecenter/SSGH2K_12.1.0/com.ibm.xlc121.aix.doc/compiler_ref/opt_tls.html> */ /* Oracle Solaris Studio C: <https://docs.oracle.com/cd/E18659_01/html/821-1384/bjabr.html> */ /* MSVC: <https://docs.microsoft.com/en-us/cpp/parallel/thread-local-storage-tls> */ #ifndef _Thread_local # if defined __GNUC__ || defined __CC_ARM || defined __xlC__ || defined __SUNPRO_C # define _Thread_local __thread # elif defined _MSC_VER # define _Thread_local __declspec (thread) # endif #endif ]]) # gl_THREADS_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_THREADS_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_THREADS_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_THREADS_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_THREADS_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MTX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_THRD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TSS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_THREADS_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_THREADS_H_DEFAULTS]) ]) AC_DEFUN([gl_THREADS_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_THREAD_LOCAL=1; AC_SUBST([HAVE_THREAD_LOCAL]) BROKEN_THRD_START_T=0; AC_SUBST([BROKEN_THRD_START_T]) REPLACE_THRD_CREATE=0; AC_SUBST([REPLACE_THRD_CREATE]) REPLACE_THRD_CURRENT=0; AC_SUBST([REPLACE_THRD_CURRENT]) REPLACE_THRD_DETACH=0; AC_SUBST([REPLACE_THRD_DETACH]) REPLACE_THRD_EQUAL=0; AC_SUBST([REPLACE_THRD_EQUAL]) REPLACE_THRD_JOIN=0; AC_SUBST([REPLACE_THRD_JOIN]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/time_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000016024�14110572173�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a more-standard replacement for <time.h>. # Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # serial 18 # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN_ONCE([gl_TIME_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([for TIME_UTC in <time.h>], [gl_cv_time_h_has_TIME_UTC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static int x = TIME_UTC; x++;]])], [gl_cv_time_h_has_TIME_UTC=yes], [gl_cv_time_h_has_TIME_UTC=no])]) if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi AC_SUBST([TIME_H_DEFINES_TIME_UTC]) ]) dnl Check whether 'struct timespec' is declared dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CACHE_CHECK([for struct timespec in <time.h>], [gl_cv_sys_struct_timespec_in_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_time_h=yes], [gl_cv_sys_struct_timespec_in_time_h=no])]) TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <sys/time.h>], [gl_cv_sys_struct_timespec_in_sys_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_sys_time_h=yes], [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <pthread.h>], [gl_cv_sys_struct_timespec_in_pthread_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_pthread_h=yes], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <unistd.h>], [gl_cv_sys_struct_timespec_in_unistd_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_unistd_h=yes], [gl_cv_sys_struct_timespec_in_unistd_h=no])]) if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) # gl_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_TIME_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET]) dnl Even GNU libc does not have timezone_t yet. HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) dnl If another module says to replace or to not replace, do that. dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; dnl this lets maintainers check for portability. REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) dnl Hack so that the time module doesn't depend on the sys_time module. dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier dnl is no longer a big deal. REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/time_r.m4����������������������������������������������������������������0000664�0000000�0000000�00000006525�14110572173�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant time functions: localtime_r, gmtime_r. dnl Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_TIME_R], [ dnl Persuade glibc and Solaris <time.h> to declare localtime_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is dnl not defined. AC_CHECK_DECLS([localtime_r], [], [], [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]]) if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi AC_CHECK_FUNCS_ONCE([localtime_r]) if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], [gl_cv_time_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[/* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0);]]) ], [gl_cv_time_r_posix=yes], [gl_cv_time_r_posix=no]) ]) if test $gl_cv_time_r_posix = yes; then REPLACE_LOCALTIME_R=0 else REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 dnl On mingw, localtime_r() is defined as an inline function; use through a dnl direct function call works but the use as a function pointer leads to a dnl link error. AC_CACHE_CHECK([whether localtime_r exists as an inline function], [gl_cv_func_localtime_r_inline], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[time_t a; struct tm r; localtime_r (&a, &r); ]]) ], [gl_cv_func_localtime_r_inline=yes], [gl_cv_func_localtime_r_inline=no]) ]) if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi ]) # Prerequisites of lib/time_r.c. AC_DEFUN([gl_PREREQ_TIME_R], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/time_rz.m4���������������������������������������������������������������0000664�0000000�0000000�00000003436�14110572173�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Time zone functions: tzalloc, localtime_rz, etc. dnl Copyright (C) 2015-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_TIME_RZ], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_STRUCT_TIMEZONE]) # On Mac OS X 10.6, localtime loops forever with some time_t values. # See Bug#27706, Bug#27736, and # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html AC_CACHE_CHECK([whether localtime works even near extrema], [gl_cv_func_localtime_works], [gl_cv_func_localtime_works=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> ]], [[ time_t t = -67768038400666600; struct tm *tm; char *tz = getenv ("TZ"); if (! (tz && strcmp (tz, "QQQ0") == 0)) return 0; alarm (2); tm = localtime (&t); /* Use TM and *TM to suppress over-optimization. */ return tm && tm->tm_isdst; ]])], [(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || gl_cv_func_localtime_works=no], [], [gl_cv_func_localtime_works="guessing yes"])]) if test "$gl_cv_func_localtime_works" = no; then AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1, [Define if localtime-like functions can loop forever on extreme arguments.]) fi AC_CHECK_TYPES([timezone_t], [], [], [[#include <time.h>]]) if test "$ac_cv_type_timezone_t" = yes; then HAVE_TIMEZONE_T=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/timegm.m4����������������������������������������������������������������0000664�0000000�0000000�00000001320�14110572173�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timegm.m4 serial 13 dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TIMEGM], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_TIMEGM=0 AC_CHECK_FUNCS_ONCE([timegm]) if test $ac_cv_func_timegm = yes; then if test "$gl_cv_func_working_mktime" != yes; then # Assume that timegm is buggy if mktime is. REPLACE_TIMEGM=1 fi else HAVE_TIMEGM=0 fi ]) # Prerequisites of lib/timegm.c. AC_DEFUN([gl_PREREQ_TIMEGM], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/timer_time.m4������������������������������������������������������������0000664�0000000�0000000�00000003422�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timer_time.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Check for timer_settime, and set LIB_TIMER_TIME. AC_DEFUN([gl_TIMER_TIME], [ dnl Based on clock_time.m4. See details there. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether the gnulib module 'threadlib' is in use. dnl Some packages like Emacs use --avoid=threadlib. dnl Write the symbol in such a way that it does not cause 'aclocal' to pick dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/. m4_ifdef([gl_][PTHREADLIB], [AC_REQUIRE([gl_][PTHREADLIB])]) LIB_TIMER_TIME= AC_SUBST([LIB_TIMER_TIME]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([timer_settime], [rt posix4], [test "$ac_cv_search_timer_settime" = "none required" || LIB_TIMER_TIME=$ac_cv_search_timer_settime]) m4_ifdef([gl_][PTHREADLIB], [dnl GLIBC uses threads to emulate posix timers when kernel support dnl is not available (like Linux < 2.6 or when used with kFreeBSD) dnl Now the pthread lib is linked automatically in the normal case, dnl but when linking statically, it needs to be explicitly specified. AC_EGREP_CPP([Thread], [#include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \ && !(__UCLIBC__ && __HAS_NO_THREADS__) Thread emulation available #endif #endif ], [LIB_TIMER_TIME="$LIB_TIMER_TIME $LIBPMULTITHREAD"])]) AC_CHECK_FUNCS([timer_settime]) LIBS=$gl_saved_libs ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/times.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000665�14110572173�0016211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# times.m4 serial 2 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TIMES], [ AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([times]) if test $ac_cv_func_times = no; then HAVE_TIMES=0 fi ]) ���������������������������������������������������������������������������gnulib-20210822~d383792/m4/timespec.m4��������������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 15 # Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering AC_DEFUN([gl_TIMESPEC], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/timespec_get.m4����������������������������������������������������������0000664�0000000�0000000�00000001066�14110572173�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timespec_get.m4 serial 2 dnl Copyright (C) 2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TIMESPEC_GET], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) dnl Persuade OpenBSD <time.h> to declare timespec_get(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([timespec_get]) if test $ac_cv_func_timespec_get != yes; then HAVE_TIMESPEC_GET=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tls.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0015666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tls.m4 serial 2 (gettext-0.18) dnl Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_TLS], [ AC_REQUIRE([gl_THREADLIB]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tm_gmtoff.m4�������������������������������������������������������������0000664�0000000�0000000�00000001035�14110572173�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tm_gmtoff.m4 serial 3 dnl Copyright (C) 2002, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_TM_GMTOFF], [ AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_GMTOFF], [1], [Define if struct tm has the tm_gmtoff member.])], , [#include <time.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tmpdir.m4����������������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tmpdir.m4 serial 4 dnl Copyright (C) 2001-2002, 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites for lib/tmpdir.c AC_DEFUN([gt_TMPDIR], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tmpfile.m4���������������������������������������������������������������0000664�0000000�0000000�00000003773�14110572173�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tmpfile.m4 serial 4 # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Ben Pfaff. # Check whether to use a replacement tmpfile() function. # The native Windows tmpfile function always tries to put the temporary # file in the root directory. (This behaviour is even documented in # Microsoft's documentation!) This often fails for ordinary users who # don't have the permissions to write in the root directory. # # We can't test for tmpfile even at runtime, since our test program # might be running with privileges that allow it to write to the root # directory, even though tmpfile wouldn't work in general. Instead, # just test for a Windows platform (excluding Cygwin). # On Android 4.3, tmpfile() always returns NULL, even if TMPDIR is set # to a writable directory. AC_DEFUN([gl_FUNC_TMPFILE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether tmpfile works], [gl_cv_func_tmpfile_works], [AC_EGREP_CPP([choke me], [ #if defined _WIN32 && !defined __CYGWIN__ choke me #endif ], [gl_cv_func_tmpfile_works=no], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> int main (void) { return tmpfile () == NULL; }]])], [gl_cv_func_tmpfile_works=yes], [gl_cv_func_tmpfile_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_tmpfile_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_tmpfile_works="guessing yes" ;; esac ]) ]) ]) case "$gl_cv_func_tmpfile_works" in *yes) ;; *) REPLACE_TMPFILE=1 ;; esac ]) # Prerequisites of lib/tmpfile.c. AC_DEFUN([gl_PREREQ_TMPFILE], [:]) �����gnulib-20210822~d383792/m4/towctrans.m4�������������������������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# towctrans.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TOWCTRANS], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) HAVE_TOWCTRANS=$HAVE_WCTRANS_T ]) �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/trunc-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# trunc-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in trunc.m4 and not inlined in the dnl module description), so that gl_FUNC_TRUNC can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_TRUNC_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_trunc_required=ieee]) AC_REQUIRE([gl_FUNC_TRUNC]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/trunc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006672�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# trunc.m4 serial 15 dnl Copyright (C) 2007, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TRUNC], [ m4_divert_text([DEFAULTS], [gl_trunc_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare trunc(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether trunc() is declared. AC_CHECK_DECLS([trunc], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_trunc" = yes; then dnl Test whether trunc() can be used without libm. TRUNC_LIBM=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = trunc; double x;]], [[x = funcptr(x) + trunc(x);]])], [TRUNC_LIBM=]) if test "$TRUNC_LIBM" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = trunc; double x;]], [[x = funcptr(x) + trunc(x);]])], [TRUNC_LIBM="-lm"]) LIBS="$save_LIBS" fi if test "$TRUNC_LIBM" = "?"; then TRUNC_LIBM= fi m4_ifdef([gl_FUNC_TRUNC_IEEE], [ if test $gl_trunc_required = ieee && test $REPLACE_TRUNC = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether trunc works according to ISO C 99 with IEC 60559], [gl_cv_func_trunc_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $TRUNC_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_trunc) (double) = argc ? trunc : dummy; /* Test whether trunc (-0.0) is -0.0. */ if (signbitd (minus_zerod) && !signbitd (my_trunc (minus_zerod))) return 1; return 0; } ]])], [gl_cv_func_trunc_ieee=yes], [gl_cv_func_trunc_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_trunc_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_trunc_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_trunc_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_trunc_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_trunc_ieee" in *yes) ;; *) REPLACE_TRUNC=1 ;; esac fi ]) else HAVE_DECL_TRUNC=0 fi if test $HAVE_DECL_TRUNC = 0 || test $REPLACE_TRUNC = 1; then dnl No libraries are needed to link lib/trunc.c. TRUNC_LIBM= fi AC_SUBST([TRUNC_LIBM]) ]) ����������������������������������������������������������������������gnulib-20210822~d383792/m4/truncate.m4��������������������������������������������������������������0000664�0000000�0000000�00000006126�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncate.m4 serial 3 -*- Autoconf -*- dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TRUNCATE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([truncate]) dnl AC_CHECK_FUNC is not enough here, because when compiling for Android 4.4 dnl or older with _FILE_OFFSET_BITS=64, truncate() is not declared. There dnl is a function 'truncate' in libc, but it is unsuitable, because it takes dnl only a 32-bit offset argument. AC_CHECK_DECL([truncate], , , [[#include <unistd.h>]]) if test $ac_cv_have_decl_truncate = yes; then m4_ifdef([gl_LARGEFILE], [ case "$host_os" in mingw*) dnl Native Windows, and Large File Support is requested. dnl The mingw64 truncate64() function is based on ftruncate64(), dnl which is unreliable (it may delete the file, see dnl <https://web.archive.org/web/20160425005423/http://mingw-w64.sourcearchive.com/documentation/2.0-1/ftruncate64_8c_source.html>). dnl Use gnulib's ftruncate() and truncate() implementation instead. REPLACE_TRUNCATE=1 ;; esac ], [ : ]) if test $REPLACE_TRUNCATE = 0; then dnl Check for AIX 7.2 bug with trailing slash. AC_CACHE_CHECK([whether truncate rejects trailing slashes], [gl_cv_func_truncate_works], [echo foo > conftest.tmp AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[int result = 0; if (!truncate ("conftest.tmp/", 2)) result |= 1; return result; ]]) ], [gl_cv_func_truncate_works=yes], [gl_cv_func_truncate_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_truncate_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_truncate_works="guessing yes" ;; # Guess no on AIX systems. aix*) gl_cv_func_truncate_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_truncate_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp ]) case "$gl_cv_func_truncate_works" in *yes) ;; *) AC_DEFINE([TRUNCATE_TRAILING_SLASH_BUG], [1], [Define to 1 if truncate mishandles trailing slash.]) REPLACE_TRUNCATE=1 ;; esac fi else HAVE_DECL_TRUNCATE=0 if test $ac_cv_func_truncate = yes; then dnl Avoid a conflict with the 'truncate' in libc. REPLACE_TRUNCATE=1 fi fi ]) # Prerequisites of lib/truncate.c. AC_DEFUN([gl_PREREQ_TRUNCATE], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/truncf-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncf-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in truncf.m4 and not inlined in the dnl module description), so that gl_FUNC_TRUNCF can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_TRUNCF_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_truncf_required=ieee]) AC_REQUIRE([gl_FUNC_TRUNCF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/truncf.m4����������������������������������������������������������������0000664�0000000�0000000�00000006732�14110572173�0016372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncf.m4 serial 15 dnl Copyright (C) 2007, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TRUNCF], [ m4_divert_text([DEFAULTS], [gl_truncf_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Persuade glibc <math.h> to declare truncf(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether truncf() is declared. AC_CHECK_DECLS([truncf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_truncf" = yes; then dnl Test whether truncf() can be used without libm. TRUNCF_LIBM=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = truncf; float x;]], [[x = funcptr(x) + truncf(x);]])], [TRUNCF_LIBM=]) if test "$TRUNCF_LIBM" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> float (*funcptr) (float) = truncf; float x;]], [[x = funcptr(x) + truncf(x);]])], [TRUNCF_LIBM="-lm"]) LIBS="$save_LIBS" fi if test "$TRUNCF_LIBM" = "?"; then TRUNCF_LIBM= fi m4_ifdef([gl_FUNC_TRUNCF_IEEE], [ if test $gl_truncf_required = ieee && test $REPLACE_TRUNCF = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether truncf works according to ISO C 99 with IEC 60559], [gl_cv_func_truncf_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $TRUNCF_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float f) { return 0; } int main (int argc, char *argv[]) { float (* volatile my_truncf) (float) = argc ? truncf : dummy; /* Test whether truncf (-0.0f) is -0.0f. */ if (signbitf (minus_zerof) && !signbitf (my_truncf (minus_zerof))) return 1; return 0; } ]])], [gl_cv_func_truncf_ieee=yes], [gl_cv_func_truncf_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_truncf_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_truncf_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_truncf_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_truncf_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_truncf_ieee" in *yes) ;; *) REPLACE_TRUNCF=1 ;; esac fi ]) else HAVE_DECL_TRUNCF=0 fi if test $HAVE_DECL_TRUNCF = 0 || test $REPLACE_TRUNCF = 1; then dnl No libraries are needed to link lib/truncf.c. TRUNCF_LIBM= fi AC_SUBST([TRUNCF_LIBM]) ]) ��������������������������������������gnulib-20210822~d383792/m4/truncl-ieee.m4�����������������������������������������������������������0000664�0000000�0000000�00000001124�14110572173�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncl-ieee.m4 serial 1 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro is in a separate file (not in truncl.m4 and not inlined in the dnl module description), so that gl_FUNC_TRUNCL can test whether 'aclocal' has dnl found uses of this macro. AC_DEFUN([gl_FUNC_TRUNCL_IEEE], [ m4_divert_text([INIT_PREPARE], [gl_truncl_required=ieee]) AC_REQUIRE([gl_FUNC_TRUNCL]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/truncl.m4����������������������������������������������������������������0000664�0000000�0000000�00000011120�14110572173�0016363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncl.m4 serial 17 dnl Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TRUNCL], [ m4_divert_text([DEFAULTS], [gl_truncl_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <math.h> to declare truncl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Test whether truncl() is declared. AC_CHECK_DECLS([truncl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_truncl" = yes; then dnl Test whether truncl() can be used without libm. TRUNCL_LIBM=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = truncl; long double x;]], [[x = funcptr(x) + truncl(x);]])], [TRUNCL_LIBM=]) if test "$TRUNCL_LIBM" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> long double (*funcptr) (long double) = truncl; long double x;]], [[x = funcptr(x) + truncl(x);]])], [TRUNCL_LIBM="-lm"]) LIBS="$save_LIBS" fi if test "$TRUNCL_LIBM" = "?"; then TRUNCL_LIBM= fi dnl Test whether truncl() works. It crashes on OSF/1 4.0d. save_LIBS="$LIBS" LIBS="$LIBS $TRUNCL_LIBM" AC_CACHE_CHECK([whether truncl works], [gl_cv_func_truncl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> long double x; int main() { x = truncl (0.0L); return 0; }]])], [gl_cv_func_truncl_works=yes], [gl_cv_func_truncl_works=no], [case "$host_os" in osf4*) gl_cv_func_truncl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_truncl_works="guessing yes" ;; *) gl_cv_func_truncl_works="guessing yes" ;; esac ]) ]) LIBS="$save_LIBS" case "$gl_cv_func_truncl_works" in *yes) ;; *) REPLACE_TRUNCL=1 ;; esac m4_ifdef([gl_FUNC_TRUNCL_IEEE], [ if test $gl_truncl_required = ieee && test $REPLACE_TRUNCL = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether truncl works according to ISO C 99 with IEC 60559], [gl_cv_func_truncl_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $TRUNCL_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double f) { return 0; } int main (int argc, char *argv[]) { long double (* volatile my_truncl) (long double) = argc ? truncl : dummy; /* Test whether truncl (-0.3L) is -0.0L. */ if (signbitl (minus_zerol) && !signbitl (my_truncl (-0.3L))) return 1; return 0; } ]])], [gl_cv_func_truncl_ieee=yes], [gl_cv_func_truncl_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_truncl_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_truncl_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_truncl_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_truncl_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_truncl_ieee" in *yes) ;; *) REPLACE_TRUNCL=1 ;; esac fi ]) else HAVE_DECL_TRUNCL=0 fi if test $HAVE_DECL_TRUNCL = 0 || test $REPLACE_TRUNCL = 1; then dnl Find libraries needed to link lib/truncl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_TRUNC]) TRUNCL_LIBM="$TRUNC_LIBM" else TRUNCL_LIBM= fi fi AC_SUBST([TRUNCL_LIBM]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tsearch.m4���������������������������������������������������������������0000664�0000000�0000000�00000003415�14110572173�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tsearch.m4 serial 8 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TSEARCH], [ AC_REQUIRE([gl_SEARCH_H_DEFAULTS]) AC_CHECK_FUNCS([tsearch twalk]) if test $ac_cv_func_tsearch = yes; then dnl On OpenBSD 4.0, the return value of tdelete() is incorrect. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether tdelete works], [gl_cv_func_tdelete_works], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stddef.h> #include <search.h> static int cmp_fn (const void *a, const void *b) { return *(const int *) a - *(const int *) b; } int main () { int result = 0; int x = 0; void *root = NULL; if (!(tfind (&x, &root, cmp_fn) == NULL)) result |= 1; tsearch (&x, &root, cmp_fn); if (!(tfind (&x, &root, cmp_fn) != NULL)) result |= 2; if (!(tdelete (&x, &root, cmp_fn) != NULL)) result |= 4; return result; }]])], [gl_cv_func_tdelete_works=yes], [gl_cv_func_tdelete_works=no], [case "$host_os" in openbsd*) gl_cv_func_tdelete_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_tdelete_works="guessing yes" ;; *) gl_cv_func_tdelete_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_tdelete_works" in *no) REPLACE_TSEARCH=1 ;; esac else HAVE_TSEARCH=0 fi if test $ac_cv_func_twalk != yes; then HAVE_TWALK=0 fi ]) # Prerequisites of lib/tsearch.c. AC_DEFUN([gl_PREREQ_TSEARCH], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/ttyname_r.m4�������������������������������������������������������������0000664�0000000�0000000�00000010355�14110572173�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ttyname_r.m4 serial 11 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TTYNAME_R], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade Solaris <unistd.h> to provide the POSIX compliant declaration of dnl ttyname_r(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([ttyname_r]) if test $ac_cv_have_decl_ttyname_r = no; then HAVE_DECL_TTYNAME_R=0 fi AC_CHECK_FUNCS([ttyname_r]) if test $ac_cv_func_ttyname_r = no; then HAVE_TTYNAME_R=0 else HAVE_TTYNAME_R=1 dnl On Mac OS X 10.4 (and Solaris 10 without gl_USE_SYSTEM_EXTENSIONS) dnl the return type is 'char *', not 'int'. AC_CACHE_CHECK([whether ttyname_r is compatible with its POSIX signature], [gl_cv_func_ttyname_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <unistd.h>]], [[*ttyname_r (0, NULL, 0);]]) ], [gl_cv_func_ttyname_r_posix=no], [gl_cv_func_ttyname_r_posix=yes]) ]) if test $gl_cv_func_ttyname_r_posix = no; then REPLACE_TTYNAME_R=1 else AC_DEFINE([HAVE_POSIXDECL_TTYNAME_R], [1], [Define if the ttyname_r function has a POSIX compliant declaration.]) dnl On Solaris 10, both ttyname_r functions (the one with the non-POSIX dnl declaration and the one with the POSIX declaration) refuse to do dnl anything when the output buffer is less than 128 bytes large. dnl On OSF/1 5.1, ttyname_r ignores the buffer size and assumes the dnl buffer is large enough. dnl On Android 4.3, ttyname_r is a stub that prints dnl "int ttyname_r(int, char*, size_t)(3) is not implemented on Android" dnl on stderr and returns -ERANGE. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in linux*-android*) AC_CACHE_CHECK([whether ttyname_r works at least minimally], [gl_cv_func_ttyname_r_not_stub], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <unistd.h> ]GL_MDA_DEFINES[ int main (void) { char buf[80]; close(2); return ttyname_r (-1, buf, sizeof (buf)) == -ERANGE; }]])], [gl_cv_func_ttyname_r_not_stub=yes], [gl_cv_func_ttyname_r_not_stub=no], [# Guess no on Android. gl_cv_func_ttyname_r_not_stub="guessing no" ]) ]) case "$gl_cv_func_ttyname_r_not_stub" in *yes) ;; *) REPLACE_TTYNAME_R=1 ;; esac ;; esac if test $REPLACE_TTYNAME_R = 0; then AC_CACHE_CHECK([whether ttyname_r works with small buffers], [gl_cv_func_ttyname_r_works], [ dnl Initial guess, used when cross-compiling or when /dev/tty cannot dnl be opened. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_ttyname_r_works="guessing no" ;; # Guess no on OSF/1. osf*) gl_cv_func_ttyname_r_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_ttyname_r_works="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <fcntl.h> #include <unistd.h> ]GL_MDA_DEFINES[ int main (void) { int result = 0; int fd; char buf[31]; /* use any size < 128 here */ fd = open ("/dev/tty", O_RDONLY); if (fd < 0) result |= 16; else if (ttyname_r (fd, buf, sizeof (buf)) != 0) result |= 17; else if (ttyname_r (fd, buf, 1) == 0) result |= 18; return result; }]])], [gl_cv_func_ttyname_r_works=yes], [case $? in 17 | 18) gl_cv_func_ttyname_r_works=no ;; esac], [:]) ]) case "$gl_cv_func_ttyname_r_works" in *yes) ;; *) REPLACE_TTYNAME_R=1 ;; esac fi fi fi ]) # Prerequisites of lib/ttyname_r.c. AC_DEFUN([gl_PREREQ_TTYNAME_R], [ AC_CHECK_FUNCS([ttyname]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/tzset.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000754�14110572173�0016240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_TZSET], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) REPLACE_TZSET=0 case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac ]) ��������������������gnulib-20210822~d383792/m4/uchar_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000014746�14110572173�0016506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uchar_h.m4 serial 20 dnl Copyright (C) 2019-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Prepare the overridden <uchar.h>. AC_DEFUN_ONCE([gl_UCHAR_H], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([uchar.h]) if test $ac_cv_header_uchar_h = yes; then HAVE_UCHAR_H=1 else HAVE_UCHAR_H=0 fi AC_SUBST([HAVE_UCHAR_H]) gl_TYPE_CHAR16_T gl_TYPE_CHAR32_T dnl In C++ mode, clang defines 'char16_t' and 'char32_t' as built-in types dnl on some platforms (e.g. OpenBSD 6.7), and as types defined by many dnl header files (<limits.h>, <stddef.h>, <stdint.h>, <stdio.h>, <stdlib.h> dnl and others) on some platforms (e.g. Mac OS X 10.13). m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) CXX_HAS_UCHAR_TYPES=0 if test $HAVE_UCHAR_H = 0; then if test "$CXX" != no; then AC_CACHE_CHECK([whether the C++ compiler predefines the <uchar.h> types], [gl_cv_cxx_has_uchar_types], [dnl We can't use AC_LANG_PUSH([C++]) and AC_LANG_POP([C++]) here, due to dnl an autoconf bug <https://savannah.gnu.org/support/?110294>. cat > conftest.cpp <<\EOF #include <stddef.h> char16_t a; char32_t b; EOF gl_command="$CXX $CXXFLAGS $CPPFLAGS -c conftest.cpp" if AC_TRY_EVAL([gl_command]); then gl_cv_cxx_has_uchar_types=yes else gl_cv_cxx_has_uchar_types=no fi rm -fr conftest* ]) if test $gl_cv_cxx_has_uchar_types = yes; then CXX_HAS_UCHAR_TYPES=1 fi fi fi AC_SUBST([CXX_HAS_UCHAR_TYPES]) dnl Test whether a 'char32_t' can hold more characters than a 'wchar_t'. gl_STDINT_BITSIZEOF([wchar_t], [gl_STDINT_INCLUDES]) if test $BITSIZEOF_WCHAR_T -lt 32; then SMALL_WCHAR_T=1 else SMALL_WCHAR_T=0 fi dnl SMALL_WCHAR_T is expected to be 1 on 32-bit AIX, Cygwin, native Windows. AC_SUBST([SMALL_WCHAR_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C11. gl_WARN_ON_USE_PREPARE([[#include <uchar.h> ]], [c32rtomb mbrtoc32]) ]) dnl On Haiku 2020, char16_t and char32_t are incorrectly defined. dnl See <https://dev.haiku-os.org/ticket/15990>. AC_DEFUN_ONCE([gl_TYPE_CHAR16_T], [ dnl Determine whether gnulib's <uchar.h> would, if present, override char16_t. AC_CACHE_CHECK([whether char16_t is correctly defined], [gl_cv_type_char16_t_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <uchar.h> /* For simplicity, assume that uint16_least_t is equivalent to 'unsigned short'. */ int verify[(char16_t)(-1) >= 0 && sizeof (char16_t) == sizeof (unsigned short) ? 1 : -1]; ]]) ], [gl_cv_type_char16_t_works=yes], [gl_cv_type_char16_t_works=no]) ]) if test $gl_cv_type_char16_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR16_T=1 else GNULIBHEADERS_OVERRIDE_CHAR16_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_CHAR16_T]) ]) AC_DEFUN_ONCE([gl_TYPE_CHAR32_T], [ dnl Determine whether gnulib's <uchar.h> would, if present, override char32_t. AC_CACHE_CHECK([whether char32_t is correctly defined], [gl_cv_type_char32_t_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <uchar.h> /* For simplicity, assume that uint32_least_t is equivalent to 'unsigned int'. */ int verify[(char32_t)(-1) >= 0 && sizeof (char32_t) == sizeof (unsigned int) ? 1 : -1]; ]]) ], [gl_cv_type_char32_t_works=yes], [gl_cv_type_char32_t_works=no]) ]) if test $gl_cv_type_char32_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR32_T=1 else GNULIBHEADERS_OVERRIDE_CHAR32_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_CHAR32_T]) ]) # gl_UCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOC32]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISALNUM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISALPHA]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISCNTRL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISGRAPH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISLOWER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISPRINT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISPUNCT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISSPACE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISUPPER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32RTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32STOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC32]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOC32S]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOC32S]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOC32S]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UCHAR_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_UCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_C32RTOMB=1; AC_SUBST([HAVE_C32RTOMB]) HAVE_MBRTOC32=1; AC_SUBST([HAVE_MBRTOC32]) REPLACE_C32RTOMB=0; AC_SUBST([REPLACE_C32RTOMB]) REPLACE_MBRTOC32=0; AC_SUBST([REPLACE_MBRTOC32]) ]) ��������������������������gnulib-20210822~d383792/m4/ulonglong.m4�������������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ulonglong.m4 serial 10 dnl Copyright (C) 1999-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/uname.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000771�14110572173�0016173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uname.m4 serial 11 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UNAME], [ AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS]) AC_CHECK_FUNCS([uname]) if test $ac_cv_func_uname = no; then HAVE_UNAME=0 fi ]) # Prerequisites of lib/uname.c. AC_DEFUN([gl_PREREQ_UNAME], [ : ]) �������gnulib-20210822~d383792/m4/ungetc.m4����������������������������������������������������������������0000664�0000000�0000000�00000005307�14110572173�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ungetc.m4 serial 10 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ungetc works on arbitrary bytes], [gl_cv_func_ungetc_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], [[FILE *f; if (!(f = fopen ("conftest.tmp", "w+"))) return 1; if (fputs ("abc", f) < 0) { fclose (f); return 2; } rewind (f); if (fgetc (f) != 'a') { fclose (f); return 3; } if (fgetc (f) != 'b') { fclose (f); return 4; } if (ungetc ('d', f) != 'd') { fclose (f); return 5; } if (ftell (f) != 1) { fclose (f); return 6; } if (fgetc (f) != 'd') { fclose (f); return 7; } if (ftell (f) != 2) { fclose (f); return 8; } if (fseek (f, 0, SEEK_CUR) != 0) { fclose (f); return 9; } if (ftell (f) != 2) { fclose (f); return 10; } if (fgetc (f) != 'c') { fclose (f); return 11; } fclose (f); remove ("conftest.tmp"); ]])], [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on bionic systems. *-android*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ungetc_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ungetc_works="$gl_cross_guess_normal" ;; esac ]) ]) gl_ftello_broken_after_ungetc=no case "$gl_cv_func_ungetc_works" in *yes) ;; *) dnl On macOS >= 10.15, where the above program fails with exit code 6, dnl we fix it through an ftello override. case "$host_os" in darwin*) gl_ftello_broken_after_ungetc=yes ;; *) AC_DEFINE([FUNC_UNGETC_BROKEN], [1], [Define to 1 if ungetc is broken when used on arbitrary bytes.]) ;; esac ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unicodeio.m4�������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unicodeio.m4 serial 3 dnl Copyright (C) 2002-2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_UNICODEIO], [ dnl Prerequisites of lib/unicodeio.c. gl_MUSL_LIBC ]) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unistd-safer.m4����������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_UNISTD_SAFER], [ AC_CHECK_FUNCS_ONCE([pipe]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unistd_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000031335�14110572173�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 89 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, Bruno Haible. AC_DEFUN_ONCE([gl_UNISTD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess execl execle execlp execv execve execvp execvpe faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([execvpe]) if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ]) # gl_UNISTD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL]) REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE]) REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP]) REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV]) REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE]) REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP]) REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unlink-busy.m4�����������������������������������������������������������0000664�0000000�0000000�00000002471�14110572173�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 15 dnl From J. David Anglin. dnl HPUX and other systems can't unlink shared text that is being executed. # Copyright (C) 2000-2001, 2004, 2007, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UNLINK_BUSY_TEXT], [dnl AC_CACHE_CHECK([whether a running program can be unlinked], [gl_cv_func_unlink_busy_text], [ AC_RUN_IFELSE( [AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT GL_MDA_DEFINES[ int main (int argc, char **argv) { int result = 0; if (argc == 0) result |= 1; else if (unlink (argv[0]) != 0) result |= 2; return result; }]])], [gl_cv_func_unlink_busy_text=yes], [gl_cv_func_unlink_busy_text=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_unlink_busy_text="guessing no" ;; *) gl_cv_func_unlink_busy_text="guessing no" ;; esac ] ) ] ) case "$gl_cv_func_unlink_busy_text" in *no) INSTALL=$ac_install_sh ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unlink.m4����������������������������������������������������������������0000664�0000000�0000000�00000011706�14110572173�0016366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlink.m4 serial 15 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UNLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([unistd.h]) dnl Detect FreeBSD 7.2, AIX 7.1, Solaris 9 bug. AC_CACHE_CHECK([whether unlink honors trailing slashes], [gl_cv_func_unlink_honors_slashes], [touch conftest.file # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.file conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif #include <errno.h> ]GL_MDA_DEFINES], [[int result = 0; if (!unlink ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; #if HAVE_LSTAT if (!unlink ("conftest.lnk/")) result |= 4; else if (errno != ENOTDIR) result |= 8; #endif return result; ]])], [gl_cv_func_unlink_honors_slashes=yes], [gl_cv_func_unlink_honors_slashes=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.file conftest.lnk]) case "$gl_cv_func_unlink_honors_slashes" in *no) REPLACE_UNLINK=1 ;; esac dnl Detect Mac OS X 10.5.6 bug: On read-write HFS mounts, unlink("..") or dnl unlink("../..") succeeds without doing anything. AC_CACHE_CHECK([whether unlink of a parent directory fails as it should], [gl_cv_func_unlink_parent_fails], [case "$host_os" in darwin*) dnl Try to unlink a subdirectory of /tmp, because /tmp is usually on a dnl HFS mount on Mac OS X. Use a subdirectory, owned by the current dnl user, because otherwise unlink() may fail due to permissions dnl reasons, and because when running as root we don't want to risk dnl destroying the entire /tmp. if { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=/tmp/gt$$-$RANDOM (umask 077 && mkdir "$tmp") }; then mkdir "$tmp/subdir" GL_SUBDIR_FOR_UNLINK="$tmp/subdir" export GL_SUBDIR_FOR_UNLINK AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> # include <io.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0) result |= 1; else if (unlink ("..") == 0) result |= 2; return result; } ]])], [gl_cv_func_unlink_parent_fails=yes], [gl_cv_func_unlink_parent_fails=no], [# If we don't know, obey --enable-cross-guesses. gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal" ]) unset GL_SUBDIR_FOR_UNLINK rm -rf "$tmp" else gl_cv_func_unlink_parent_fails="guessing no" fi ;; *) gl_cv_func_unlink_parent_fails="guessing yes" ;; esac ]) case "$gl_cv_func_unlink_parent_fails" in *no) REPLACE_UNLINK=1 AC_DEFINE([UNLINK_PARENT_BUG], [1], [Define to 1 if unlink() on a parent directory may succeed]) ;; esac ]) ����������������������������������������������������������gnulib-20210822~d383792/m4/unlinkat.m4��������������������������������������������������������������0000664�0000000�0000000�00000002062�14110572173�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlinkat.m4 serial 2 dnl Copyright (C) 2004-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_UNLINKAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([unlinkat]) AC_REQUIRE([gl_FUNC_UNLINK]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) if test $ac_cv_func_unlinkat = no; then HAVE_UNLINKAT=0 else case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *no) # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_UNLINKAT=1 ;; *) # GNU/Hurd has unlinkat, but it has the same bug as unlink. # Darwin has unlinkat, but it has the same UNLINK_PARENT_BUG. if test $REPLACE_UNLINK = 1; then REPLACE_UNLINKAT=1 fi ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unlinkdir.m4�������������������������������������������������������������0000664�0000000�0000000�00000002164�14110572173�0017063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 # Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. AC_DEFUN([gl_UNLINKDIR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([priv.h]) # The Hurd, the Linux kernel, the FreeBSD kernel version 2.2 and later, # Cygwin, and mingw never let anyone (even root) unlink directories. # If anyone knows of another system for which unlink can never # remove a directory, please report it to <bug-coreutils@gnu.org>. # Unfortunately this is difficult to test for, since it requires root access # and might create garbage in the file system, # so the code below simply relies on the kernel name and version number. case $host_os in gnu[[0-9]]* | \ linux-* | linux | \ freebsd2.2* | freebsd[[3-9]]* | freebsd[[1-9]][[0-9]]* | \ cygwin | \ mingw*) AC_DEFINE([UNLINK_CANNOT_UNLINK_DIR], [1], [Define to 1 if unlink (dir) cannot possibly succeed.]);; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unlocked-io.m4�����������������������������������������������������������0000664�0000000�0000000�00000002470�14110572173�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlocked-io.m4 serial 16 # Copyright (C) 1998-2006, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl dnl See if the glibc *_unlocked I/O macros or functions are available. dnl Use only those *_unlocked macros or functions that are declared dnl (because some of them were declared in Solaris 2.5.1 but were removed dnl in Solaris 2.6, whereas we want binaries built on Solaris 2.5.1 to run dnl on Solaris 2.6). AC_DEFUN([gl_FUNC_GLIBC_UNLOCKED_IO], [ dnl Persuade glibc and Solaris <stdio.h> to declare dnl fgets_unlocked(), fputs_unlocked() etc. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([clearerr_unlocked]) AC_CHECK_DECLS_ONCE([feof_unlocked]) AC_CHECK_DECLS_ONCE([ferror_unlocked]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([fgets_unlocked]) AC_CHECK_DECLS_ONCE([fputc_unlocked]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([fread_unlocked]) AC_CHECK_DECLS_ONCE([fwrite_unlocked]) AC_CHECK_DECLS_ONCE([getc_unlocked]) AC_CHECK_DECLS_ONCE([getchar_unlocked]) AC_CHECK_DECLS_ONCE([putc_unlocked]) AC_CHECK_DECLS_ONCE([putchar_unlocked]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/unlockpt.m4��������������������������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlockpt.m4 serial 2 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UNLOCKPT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare unlockpt(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([unlockpt]) if test $ac_cv_func_unlockpt = no; then HAVE_UNLOCKPT=0 fi ]) # Prerequisites of lib/unlockpt.c. AC_DEFUN([gl_PREREQ_UNLOCKPT], [ AC_CHECK_FUNCS([revoke]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/uptime.m4����������������������������������������������������������������0000664�0000000�0000000�00000001503�14110572173�0016363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 1996, 1999-2001, 2004, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_PREREQ([2.13]) AC_DEFUN([gl_SYS_PROC_UPTIME], [ dnl Require AC_PROG_CC to see if we're cross compiling. AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for /proc/uptime], [gl_cv_have_proc_uptime], [gl_cv_have_proc_uptime=no test -f /proc/uptime \ && test "$cross_compiling" = no \ && cat < /proc/uptime >/dev/null 2>/dev/null \ && gl_cv_have_proc_uptime=yes]) if test $gl_cv_have_proc_uptime = yes; then AC_DEFINE([HAVE_PROC_UPTIME], [1], [ Define if your system has the /proc/uptime special file.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/userspec.m4��������������������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 11 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/userspec.c. AC_DEFUN([gl_USERSPEC], [ AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/usleep.m4����������������������������������������������������������������0000664�0000000�0000000�00000003754�14110572173�0016367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# usleep.m4 serial 7 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro intentionally does not check for select or nanosleep; dnl both of those modules can require external libraries. AC_DEFUN([gl_FUNC_USLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl usleep was required in POSIX 2001, but dropped as obsolete in dnl POSIX 2008; therefore, it is not always exposed in headers. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([usleep]) AC_CHECK_TYPE([useconds_t], [], [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit type if <sys/types.h> lacks this type.])]) if test $ac_cv_func_usleep = no; then HAVE_USLEEP=0 else dnl POSIX allows implementations to reject arguments larger than dnl 999999, but GNU guarantees it will work. AC_CACHE_CHECK([whether usleep allows large arguments], [gl_cv_func_usleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <unistd.h> ]], [[return !!usleep (1000000);]])], [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_usleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_usleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_usleep_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_usleep_works" in *yes) ;; *) REPLACE_USLEEP=1 ;; esac fi ]) ��������������������gnulib-20210822~d383792/m4/utime.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005555�14110572173�0016216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# utime.m4 serial 4 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UTIME], [ AC_REQUIRE([gl_UTIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original utime() or _utime() produces dnl timestamps that are affected by the time zone. dnl Use the function name 'rpl_utime' always, in order to avoid a dnl possible conflict with the function name 'utime' from oldnames.lib dnl (MSVC) or liboldnames.a (mingw). REPLACE_UTIME=1 ;; *) AC_CHECK_FUNCS([utime]) if test $ac_cv_func_utime = no; then HAVE_UTIME=0 else dnl On macOS 10.13, utime("link-to-file/", NULL) mistakenly succeeds. AC_CACHE_CHECK([whether utime handles trailing slashes on files], [gl_cv_func_utime_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <utime.h> ]], [[int result = 0; if (!utime ("conftest.tmp/", NULL)) result |= 1; #if HAVE_LSTAT if (!utime ("conftest.lnk/", NULL)) result |= 2; #endif return result; ]])], [gl_cv_func_utime_file_slash=yes], [gl_cv_func_utime_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess no on macOS. darwin*) gl_cv_func_utime_file_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_utime_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk ]) case $gl_cv_func_stat_file_slash in *no) REPLACE_UTIME=1 AC_DEFINE([REPLACE_FUNC_UTIME_FILE], [1], [Define to 1 if utime needs help when passed a file name with a trailing slash]) ;; esac fi ;; esac ]) # Prerequisites of lib/utime.c. AC_DEFUN([gl_PREREQ_UTIME], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/utime_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000004220�14110572173�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# utime_h.m4 serial 8 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN_ONCE([gl_UTIME_H], [ AC_REQUIRE([gl_UTIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) AC_CHECK_HEADERS_ONCE([utime.h]) gl_CHECK_NEXT_HEADERS([utime.h]) if test $ac_cv_header_utime_h = yes; then HAVE_UTIME_H=1 else HAVE_UTIME_H=0 fi AC_SUBST([HAVE_UTIME_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <utime.h> ]], [utime]) ]) # gl_UTIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UTIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UTIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UTIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UTIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIME]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UTIME], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UTIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UTIME_H_DEFAULTS]) ]) AC_DEFUN([gl_UTIME_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_UTIME=1; AC_SUBST([HAVE_UTIME]) REPLACE_UTIME=0; AC_SUBST([REPLACE_UTIME]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/utimecmp.m4��������������������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 4 dnl Copyright (C) 2004-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_UTIMECMP], [ dnl Prerequisites of lib/utimecmp.c. AC_REQUIRE([gl_FUNC_UTIMES]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/utimens.m4���������������������������������������������������������������0000664�0000000�0000000�00000003672�14110572173�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright (C) 2003-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl serial 11 AC_DEFUN([gl_UTIMENS], [ dnl Prerequisites of lib/utimens.c. AC_REQUIRE([gl_FUNC_UTIMES]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([futimes futimesat futimens utimensat lutimes]) if test $ac_cv_func_futimens = no && test $ac_cv_func_futimesat = yes; then dnl FreeBSD 8.0-rc2 mishandles futimesat(fd,NULL,time). It is not dnl standardized, but Solaris implemented it first and uses it as dnl its only means to set fd time. AC_CACHE_CHECK([whether futimesat handles NULL file], [gl_cv_func_futimesat_works], [touch conftest.file AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stddef.h> #include <sys/times.h> #include <fcntl.h> ]GL_MDA_DEFINES], [[int fd = open ("conftest.file", O_RDWR); if (fd < 0) return 1; if (futimesat (fd, NULL, NULL)) return 2; ]])], [gl_cv_func_futimesat_works=yes], [gl_cv_func_futimesat_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_futimesat_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_futimesat_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_futimesat_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.file]) case "$gl_cv_func_futimesat_works" in *yes) ;; *) AC_DEFINE([FUTIMESAT_NULL_BUG], [1], [Define to 1 if futimesat mishandles a NULL file name.]) ;; esac fi ]) ����������������������������������������������������������������������gnulib-20210822~d383792/m4/utimensat.m4�������������������������������������������������������������0000664�0000000�0000000�00000006662�14110572173�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # See if we need to provide utimensat replacement. dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_UTIMENSAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([utimensat]) if test $ac_cv_func_utimensat = no; then HAVE_UTIMENSAT=0 else AC_CACHE_CHECK([whether utimensat works], [gl_cv_func_utimensat_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> ]GL_MDA_DEFINES], [[int result = 0; const char *f = "conftest.file"; if (close (creat (f, 0600))) return 1; /* Test whether a trailing slash is handled correctly. This fails on AIX 7.2. */ { struct timespec ts[2]; ts[0].tv_sec = 345183300; ts[0].tv_nsec = 0; ts[1] = ts[0]; if (utimensat (AT_FDCWD, "conftest.file/", ts, 0) == 0) result |= 2; } /* Test whether the AT_SYMLINK_NOFOLLOW flag is supported. */ { if (utimensat (AT_FDCWD, f, NULL, AT_SYMLINK_NOFOLLOW)) result |= 4; } /* Test whether UTIME_NOW and UTIME_OMIT work. */ { struct timespec ts[2]; ts[0].tv_sec = 1; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 1; ts[1].tv_nsec = UTIME_NOW; if (utimensat (AT_FDCWD, f, ts, 0)) result |= 8; } sleep (1); { struct stat st; struct timespec ts[2]; ts[0].tv_sec = 1; ts[0].tv_nsec = UTIME_NOW; ts[1].tv_sec = 1; ts[1].tv_nsec = UTIME_OMIT; if (utimensat (AT_FDCWD, f, ts, 0)) result |= 16; if (stat (f, &st)) result |= 32; else if (st.st_ctime < st.st_atime) result |= 64; } return result; ]])], [gl_cv_func_utimensat_works=yes], [case $? in 2) gl_cv_func_utimensat_works='nearly' ;; *) gl_cv_func_utimensat_works=no ;; esac ], [case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_utimensat_works="guessing yes" ;; # Guess 'nearly' on AIX. aix*) gl_cv_func_utimensat_works="guessing nearly" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_utimensat_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_utimensat_works" in *yes) ;; *nearly) AC_DEFINE([HAVE_NEARLY_WORKING_UTIMENSAT], [1], [Define to 1 if utimensat works, except for the trailing slash handling.]) REPLACE_UTIMENSAT=1 ;; *) REPLACE_UTIMENSAT=1 ;; esac fi ]) ������������������������������������������������������������������������������gnulib-20210822~d383792/m4/utimes.m4����������������������������������������������������������������0000664�0000000�0000000�00000011752�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Detect some bugs in glibc's implementation of utimes. # serial 8 dnl Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # See if we need to work around bugs in glibc's implementation of # utimes from 2003-07-12 to 2003-09-17. # First, there was a bug that would make utimes set mtime # and atime to zero (1970-01-01) unconditionally. # Then, there was code to round rather than truncate. # Then, there was an implementation (sparc64, Linux-2.4.28, glibc-2.3.3) # that didn't honor the NULL-means-set-to-current-time semantics. # Finally, there was also a version of utimes that failed on read-only # files, while utime worked fine (linux-2.2.20, glibc-2.2.5). # # From Jim Meyering, with suggestions from Paul Eggert. AC_DEFUN([gl_FUNC_UTIMES], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the utimes function works], [gl_cv_func_working_utimes], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <utime.h> #include <errno.h> ]GL_MDA_DEFINES[ static int inorder (time_t a, time_t b, time_t c) { return a <= b && b <= c; } int main () { int result = 0; char const *file = "conftest.utimes"; /* On OS/2, file timestamps must be on or after 1980 in local time, with an even number of seconds. */ static struct timeval timeval[2] = {{315620000 + 10, 10}, {315620000 + 1000000, 999998}}; /* Test whether utimes() essentially works. */ { struct stat sbuf; FILE *f = fopen (file, "w"); if (f == NULL) result |= 1; else if (fclose (f) != 0) result |= 1; else if (utimes (file, timeval) != 0) result |= 2; else if (lstat (file, &sbuf) != 0) result |= 1; else if (!(sbuf.st_atime == timeval[0].tv_sec && sbuf.st_mtime == timeval[1].tv_sec)) result |= 4; if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument sets the file's timestamp to the current time. Use 'fstat' as well as 'time' to determine the "current" time, to accommodate NFS file systems if there is a time skew between the host and the NFS server. */ { int fd = open (file, O_WRONLY|O_CREAT, 0644); if (fd < 0) result |= 1; else { time_t t0, t2; struct stat st0, st1, st2; if (time (&t0) == (time_t) -1) result |= 1; else if (fstat (fd, &st0) != 0) result |= 1; else if (utimes (file, timeval) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, timeval) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 2; else if (utimes (file, NULL) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, NULL) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 8; else if (fstat (fd, &st1) != 0) result |= 1; else if (write (fd, "\n", 1) != 1) result |= 1; else if (fstat (fd, &st2) != 0) result |= 1; else if (time (&t2) == (time_t) -1) result |= 1; else { int m_ok_POSIX = inorder (t0, st1.st_mtime, t2); int m_ok_NFS = inorder (st0.st_mtime, st1.st_mtime, st2.st_mtime); if (! (st1.st_atime == st1.st_mtime)) result |= 16; if (! (m_ok_POSIX || m_ok_NFS)) result |= 32; } if (close (fd) != 0) result |= 1; } if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument works on read-only files. */ { int fd = open (file, O_WRONLY|O_CREAT, 0444); if (fd < 0) result |= 1; else if (close (fd) != 0) result |= 1; else if (utimes (file, NULL) != 0) result |= 64; if (unlink (file) != 0) result |= 1; } return result; } ]])], [gl_cv_func_working_utimes=yes], [gl_cv_func_working_utimes=no], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_working_utimes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_utimes="guessing no" ;; *) gl_cv_func_working_utimes="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_utimes" in *yes) AC_DEFINE([HAVE_WORKING_UTIMES], [1], [Define if utimes works properly.]) ;; esac ]) ����������������������gnulib-20210822~d383792/m4/va-args.m4���������������������������������������������������������������0000664�0000000�0000000�00000001631�14110572173�0016422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# va-args.m4 serial 1 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test for variadic macro support. dnl Define HAVE_VA_ARGS if macros can use __VA_ARGS__. AC_DEFUN([gl_VA_ARGS], [ AC_CACHE_CHECK([whether the preprocessor allows variadic macros], [gl_cv_c_va_args], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #define a(func, arg, ...) func (arg, __VA_ARGS__) #define b(...) a (__VA_ARGS__) ]], [[b (printf, "%s", "test");]])], [gl_cv_c_va_args=yes], [gl_cv_c_va_args=no]) ]) if test $gl_cv_c_va_args = yes; then AC_DEFINE([HAVE_VA_ARGS], [1], [Define to 1 if the preprocessor supports variadic macros and __VA_ARGS__.]) fi ]) �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/valgrind-tests.m4��������������������������������������������������������0000664�0000000�0000000�00000007624�14110572173�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# valgrind-tests.m4 serial 8 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_VALGRIND_TESTS() # ------------------- # Check if valgrind is available. # Sets VALGRIND to command line (including options) to invoke valgrind # with, may be used directly in autoconf, makefiles or shell scripts. # Sets LOG_VALGRIND, suitable for use with LOG_COMPILER, that in # Makefile will expand to command line to invoke self-tests with, # i.e., LOG_VALGRIND = $(VALGRIND) $(DEFAULT_VALGRINDFLAGS) # $(VALGRINDFLAGS) $(AM_VALGRINDFLAGS). # Whether to look for valgrind and set the variables can be influenced # by calling gl_VALGRIND_TESTS_DEFAULT_NO in configure.ac. # Regardless, the user can change the choice through the options # --enable-valgrind-tests or --disable-valgrind-tests. # You may modify the VALGRIND, DEFAULT_VALGRINDFLAGS and VALGRINDFLAGS # variables before calling this function to override defaults. Either # as developer from configure.ac or user on the ./configure command # line. You may set the AM_VALGRINDFLAGS in Makefile.am to provide a # per-directory additional flag. AC_DEFUN([gl_VALGRIND_TESTS_DEFAULT_NO], [ gl_valgrind_tests_default=no ]) AC_DEFUN_ONCE([gl_VALGRIND_TESTS], [ AC_ARG_ENABLE([valgrind-tests], AS_HELP_STRING([--disable-valgrind-tests], [don't try to run self tests under valgrind]), [opt_valgrind_tests=$enableval], [opt_valgrind_tests=${gl_valgrind_tests_default:-yes}]) # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then AC_CHECK_PROGS([VALGRIND], [valgrind]) # VALGRIND_PROGRAM contains the tool found by AC_CHECK_PROGS. For # backwards compatibility, the VALGRIND variable is later modified # to also include all enabled options. However the new variable # LOG_VALGRIND needs to be able to refer to the valgrind tool # without options, hence it uses this variable. AC_SUBST([VALGRIND_PROGRAM], [$VALGRIND]) AC_SUBST([DEFAULT_VALGRINDFLAGS]) if test -z "$DEFAULT_VALGRINDFLAGS"; then DEFAULT_VALGRINDFLAGS="-q --error-exitcode=1 --leak-check=full" fi AC_ARG_VAR([VALGRINDFLAGS], [Additional flags for Valgrind]) if test -n "$VALGRIND"; then AC_CACHE_CHECK([for valgrind options for tests], [gl_cv_opt_valgrind_tests], [AS_IF([$VALGRIND $DEFAULT_VALGRINDFLAGS $VALGRINDFLAGS true], [gl_cv_opt_valgrind_tests="$DEFAULT_VALGRINDFLAGS $VALGRINDFLAGS"], [gl_cv_opt_valgrind_tests=no]) ]) if test "$gl_cv_opt_valgrind_tests" != no; then VALGRIND="$VALGRIND $gl_cv_opt_valgrind_tests" fi fi if test -n "$VALGRIND"; then dnl On Ubuntu 16.04, /usr/bin/valgrind works only on 64-bit executables dnl but fails on 32-bit executables (with exit code 1) and on x86_64-x32 dnl executables (with exit code 126). AC_CACHE_CHECK([whether valgrind works on executables produced by the compiler], [gl_cv_prog_valgrind_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[int main () { return 0; }]])], [$VALGRIND $gl_cv_opt_valgrind_tests ./conftest$ac_exeext 2>/dev/null if test $? = 0; then gl_cv_prog_valgrind_works=yes else gl_cv_prog_valgrind_works=no fi ], [gl_cv_prog_valgrind_works=no]) ]) fi AC_SUBST([AM_VALGRINDFLAGS]) AC_SUBST([LOG_VALGRIND], ["\$(VALGRIND_PROGRAM) \$(DEFAULT_VALGRINDFLAGS) \$(VALGRINDFLAGS) \$(AM_VALGRINDFLAGS)"]) if test "$gl_cv_prog_valgrind_works" != yes; then DEFAULT_VALGRINDFLAGS= LOG_VALGRIND= VALGRIND= VALGRINDFLAGS= VALGRIND_PROGRAM= fi fi ]) ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vararrays.m4�������������������������������������������������������������0000664�0000000�0000000�00000004423�14110572173�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for variable-length arrays. # serial 6 # From Paul Eggert # Copyright (C) 2001, 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. m4_version_prereq([2.70], [], [ # AC_C_VARARRAYS # -------------- # Check whether the C compiler supports variable-length arrays. AC_DEFUN([AC_C_VARARRAYS], [ AC_CACHE_CHECK([for variable-length arrays], ac_cv_c_vararrays, [AC_EGREP_CPP([defined], [#ifdef __STDC_NO_VLA__ defined #endif ], [ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Test for VLA support. This test is partly inspired from examples in the C standard. Use at least two VLA functions to detect the GCC 3.4.3 bug described in: https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html */ #ifdef __STDC_NO_VLA__ syntax error; #else extern int n; int B[100]; int fvla (int m, int C[m][m]); int simple (int count, int all[static count]) { return all[count - 1]; } int fvla (int m, int C[m][m]) { typedef int VLA[m][m]; VLA x; int D[m]; static int (*q)[m] = &B; int (*s)[n] = q; return C && &x[0][0] == &D[0] && &D[0] == s[0]; } #endif ]])], [ac_cv_c_vararrays=yes], [ac_cv_c_vararrays=no])])]) if test "$ac_cv_c_vararrays" = yes; then dnl This is for compatibility with Autoconf 2.61-2.69. AC_DEFINE([HAVE_C_VARARRAYS], 1, [Define to 1 if C supports variable-length arrays.]) elif test "$ac_cv_c_vararrays" = no; then AC_DEFINE([__STDC_NO_VLA__], 1, [Define to 1 if C does not support variable-length arrays, and if the compiler does not already define this.]) fi ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vasnprintf-posix.m4������������������������������������������������������0000664�0000000�0000000�00000010266�14110572173�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vasnprintf_posix=no AC_CHECK_FUNCS_ONCE([vasnprintf]) case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasnprintf = yes; then # vasnprintf exists and is # already POSIX compliant. gl_cv_func_vasnprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasnprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vasnprintf.m4������������������������������������������������������������0000664�0000000�0000000�00000021604�14110572173�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf.m4 serial 38 dnl Copyright (C) 2002-2004, 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) if test $ac_cv_func_vasnprintf = no; then gl_REPLACE_VASNPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) AC_LIBOBJ([vasnprintf]) AC_LIBOBJ([printf-args]) AC_LIBOBJ([printf-parse]) AC_LIBOBJ([asnprintf]) if test $ac_cv_func_vasnprintf = yes; then AC_DEFINE([REPLACE_VASNPRINTF], [1], [Define if vasnprintf exists but is overridden by gnulib.]) fi gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNPRINTF gl_PREREQ_ASNPRINTF ]) # Prerequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prerequisites of lib/printf-parse.h, lib/printf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) ]) # Prerequisites of lib/vasnprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]]) dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) dnl We can avoid a lot of code by assuming that snprintf's return value dnl conforms to ISO C99. So check that. AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) case "$gl_cv_func_snprintf_retval_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], [Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough.]) ;; esac dnl Additionally, the use of %n can be eliminated by assuming that snprintf dnl always produces NUL-terminated strings (no truncation). AC_REQUIRE([gl_SNPRINTF_TRUNCATION_C99]) case "$gl_cv_func_snprintf_truncation_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_TRUNCATION_C99], [1], [Define if the string produced by the snprintf function is always NUL terminated.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' # arguments. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE]) case "$gl_cv_func_printf_infinite" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if dnl NEED_PRINTF_LONG_DOUBLE is already set. AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'long double' arguments.]) ;; esac ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) case "$gl_cv_func_printf_directive_a" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], [Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives.]) AC_CHECK_FUNCS([nl_langinfo]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) case "$gl_cv_func_printf_directive_f" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], [Define if the vasnprintf implementation needs special code for the 'F' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], [Define if the vasnprintf implementation needs special code for the 'ls' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], [ AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], [Define if the vasnprintf implementation needs special code for the ' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], [Define if the vasnprintf implementation needs special code for the '-' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], [Define if the vasnprintf implementation needs special code for the 0 flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], [ AC_REQUIRE([gl_PRINTF_PRECISION]) case "$gl_cv_func_printf_precision" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], [Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory # conditions. AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], [ AC_REQUIRE([gl_PRINTF_ENOMEM]) case "$gl_cv_func_printf_enomem" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_ENOMEM], [1], [Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], [ AC_REQUIRE([gl_PREREQ_VASNPRINTF]) gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM ]) # Prerequisites of lib/asnprintf.c. AC_DEFUN([gl_PREREQ_ASNPRINTF], [ ]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vasprintf-posix.m4�������������������������������������������������������0000664�0000000�0000000�00000010302�14110572173�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vasprintf_posix=no AC_CHECK_FUNCS([vasprintf]) case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasprintf = yes; then # vasprintf exists and is # already POSIX compliant. gl_cv_func_vasprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VASPRINTF fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vasprintf.m4�������������������������������������������������������������0000664�0000000�0000000�00000002100�14110572173�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf.m4 serial 6 dnl Copyright (C) 2002-2003, 2006-2007, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASPRINTF], [ AC_CHECK_FUNCS([vasprintf]) if test $ac_cv_func_vasprintf = no; then gl_REPLACE_VASPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASPRINTF], [ AC_LIBOBJ([vasprintf]) AC_LIBOBJ([asprintf]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi gl_PREREQ_VASPRINTF_H gl_PREREQ_VASPRINTF gl_PREREQ_ASPRINTF ]) # Prerequisites of the vasprintf portion of lib/stdio.h. AC_DEFUN([gl_PREREQ_VASPRINTF_H], [ dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) # Prerequisites of lib/vasprintf.c. AC_DEFUN([gl_PREREQ_VASPRINTF], [ ]) # Prerequisites of lib/asprintf.c. AC_DEFUN([gl_PREREQ_ASPRINTF], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vdprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000010275�14110572173�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vdprintf-posix.m4 serial 2 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VDPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vdprintf_posix=no AC_CHECK_FUNCS_ONCE([vdprintf]) if test $ac_cv_func_vdprintf = yes; then case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vdprintf exists and is # already POSIX compliant. gl_cv_func_vdprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac fi if test $gl_cv_func_vdprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VDPRINTF fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vdprintf.m4��������������������������������������������������������������0000664�0000000�0000000�00000001336�14110572173�0016720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vdprintf.m4 serial 1 dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VDPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([vdprintf]) if test $ac_cv_func_vdprintf = no; then HAVE_VDPRINTF=0 gl_REPLACE_VDPRINTF fi ]) AC_DEFUN([gl_REPLACE_VDPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vdprintf]) if test $ac_cv_func_vdprintf = yes; then REPLACE_VDPRINTF=1 fi gl_PREREQ_VDPRINTF ]) # Prerequisites of lib/vdprintf.c. AC_DEFUN([gl_PREREQ_VDPRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/version-etc.m4�����������������������������������������������������������0000664�0000000�0000000�00000002226�14110572173�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# version-etc.m4 serial 1 # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl $1 - configure flag and define name dnl $2 - human readable description m4_define([gl_VERSION_ETC_FLAG], [dnl AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])], [dnl case $withval in yes|no) ;; *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;; esac ]) ]) AC_DEFUN([gl_VERSION_ETC], [dnl gl_VERSION_ETC_FLAG([packager], [String identifying the packager of this software]) gl_VERSION_ETC_FLAG([packager-version], [Packager-specific version information]) gl_VERSION_ETC_FLAG([packager-bug-reports], [Packager info for bug reports (URL/e-mail/...)]) if test "X$with_packager" = "X" && \ test "X$with_packager_version$with_packager_bug_reports" != "X" then AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vfprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000010446�14110572173�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vfprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VFPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vfprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vfprintf exists and is # already POSIX compliant. gl_cv_func_vfprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vfprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VFPRINTF fi ]) AC_DEFUN([gl_REPLACE_VFPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vfprintf]) REPLACE_VFPRINTF=1 AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1], [Define if vfprintf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_VFPRINTF ]) AC_DEFUN([gl_PREREQ_VFPRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/visibility.m4������������������������������������������������������������0000664�0000000�0000000�00000006622�14110572173�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# visibility.m4 serial 8 dnl Copyright (C) 2005, 2008, 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether the -Werror option is usable], [gl_cv_cc_vis_werror], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS" ]) dnl Now check whether visibility declarations are supported. AC_CACHE_CHECK([for simple visibility declarations], [gl_cv_cc_visibility], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS" ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000001335�14110572173�0017713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vprintf-posix.m4 serial 3 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VPRINTF_POSIX], [ AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX]) if test $gl_cv_func_vfprintf_posix = no; then gl_REPLACE_VPRINTF fi ]) AC_DEFUN([gl_REPLACE_VPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vprintf]) REPLACE_VPRINTF=1 AC_DEFINE([REPLACE_VPRINTF_POSIX], [1], [Define if vprintf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_VPRINTF ]) AC_DEFUN([gl_PREREQ_VPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vsnprintf-posix.m4�������������������������������������������������������0000664�0000000�0000000�00000014123�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsnprintf-posix.m4 serial 15 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VSNPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vsnprintf_posix=no AC_CHECK_FUNCS([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then dnl These tests use vsnprintf() if snprintf() does not exist. gl_SNPRINTF_TRUNCATION_C99 gl_SNPRINTF_RETVAL_C99 gl_SNPRINTF_DIRECTIVE_N gl_SNPRINTF_SIZE1 gl_VSNPRINTF_ZEROSIZE_C99 case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) case "$gl_cv_func_snprintf_truncation_c99" in *yes) case "$gl_cv_func_snprintf_retval_c99" in *yes) case "$gl_cv_func_snprintf_directive_n" in *yes) case "$gl_cv_func_snprintf_size1" in *yes) case "$gl_cv_func_vsnprintf_zerosize_c99" in *yes) # vsnprintf exists and is # already POSIX compliant. gl_cv_func_vsnprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VSNPRINTF fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vsnprintf.m4�������������������������������������������������������������0000664�0000000�0000000�00000003621�14110572173�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsnprintf.m4 serial 7 dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s, dnl but defers to any gnulib vsnprintf replacements. Therefore, gnulib dnl must guarantee that the decision for replacing vsnprintf is a superset dnl of the reasons checked by libintl. AC_DEFUN([gl_FUNC_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_cv_func_vsnprintf_usable=no AC_CHECK_FUNCS([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then gl_SNPRINTF_SIZE1 case "$gl_cv_func_snprintf_size1" in *yes) gl_SNPRINTF_RETVAL_C99 case "$gl_cv_func_snprintf_retval_c99" in *yes) gl_PRINTF_POSITIONS case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_vsnprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_usable = no; then gl_REPLACE_VSNPRINTF fi AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = no; then HAVE_DECL_VSNPRINTF=0 fi ]) AC_DEFUN([gl_REPLACE_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then REPLACE_VSNPRINTF=1 else AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = yes; then dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_vsnprintf, not vsnprintf. REPLACE_VSNPRINTF=1 fi fi gl_PREREQ_VSNPRINTF ]) # Prerequisites of lib/vsnprintf.c. AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/vsprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000010247�14110572173�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsprintf-posix.m4 serial 12 dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VSPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vsprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vsprintf exists and is # already POSIX compliant. gl_cv_func_vsprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vsprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VSPRINTF fi ]) AC_DEFUN([gl_REPLACE_VSPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vsprintf]) REPLACE_VSPRINTF=1 gl_PREREQ_VSPRINTF ]) AC_DEFUN([gl_PREREQ_VSPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wait-process.m4����������������������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wait-process.m4 serial 6 dnl Copyright (C) 2003, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_WAIT_PROCESS], [ dnl Prerequisites of lib/wait-process.c. AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_FUNCS([waitid]) ]) �������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/waitpid.m4���������������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# waitpid.m4 serial 2 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WAITPID], [ AC_REQUIRE([AC_CANONICAL_HOST]) HAVE_WAITPID=1 case $host_os in mingw*) HAVE_WAITPID=0 ;; esac ]) ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/warn-on-use.m4�����������������������������������������������������������0000664�0000000�0000000�00000004230�14110572173�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 9 dnl Copyright (C) 2010-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # If the module 'posixcheck' is in use: # # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_ifdef([gl_POSIXCHECK], [m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], [gl_Symbol], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [[#undef $gl_func (void) $gl_func;]])], [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])]) AS_VAR_IF([gl_Symbol], [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/warnings.m4��������������������������������������������������������������0000664�0000000�0000000�00000007456�14110572173�0016725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warnings.m4 serial 16 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_AS_VAR_APPEND(VAR, VALUE) # ---------------------------- # Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. m4_ifdef([AS_VAR_APPEND], [m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], [m4_define([gl_AS_VAR_APPEND], [AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) # gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], # [PROGRAM = AC_LANG_PROGRAM()]) # ----------------------------------------------------------------- # Check if the compiler supports OPTION when compiling PROGRAM. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_COMPILER_OPTION_IF], [ AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl AS_LITERAL_IF([$1], [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], [gl_positive="$1" case $gl_positive in -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; esac m4_pushdef([gl_Positive], [$gl_positive])])dnl AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], [gl_Warn], [ gl_save_compiler_FLAGS="$gl_Flags" gl_AS_VAR_APPEND(m4_defn([gl_Flags]), [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([[]])])], [AS_VAR_SET([gl_Warn], [yes])], [AS_VAR_SET([gl_Warn], [no])]) gl_Flags="$gl_save_compiler_FLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) m4_popdef([gl_Positive])dnl AS_VAR_POPDEF([gl_Flags])dnl AS_VAR_POPDEF([gl_Warn])dnl ]) # gl_UNKNOWN_WARNINGS_ARE_ERRORS # ------------------------------ # Clang doesn't complain about unknown warning options unless one also # specifies -Wunknown-warning-option -Werror. Detect this. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # Specialization for _AC_LANG = C. This macro can be AC_REQUIREd. AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)], [ AC_LANG_PUSH([C]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([C]) ]) # Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd. AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)], [ AC_LANG_PUSH([C++]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([C++]) ]) # Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd. AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)], [ AC_LANG_PUSH([Objective C]) gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL AC_LANG_POP([Objective C]) ]) AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL], [gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'], [gl_unknown_warnings_are_errors=])]) # gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS], # [PROGRAM = AC_LANG_PROGRAM()]) # ----------------------------------------------------------- # Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it # when compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). # # If VARIABLE is a variable name, AC_SUBST it. # # The effects of this macro depend on the current language (_AC_LANG). AC_DEFUN([gl_WARN_ADD], [AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)]) gl_COMPILER_OPTION_IF([$1], [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])], [], [$3]) m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl ]) # Local Variables: # mode: autoconf # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wchar_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000025542�14110572173�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. dnl Copyright (C) 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Eric Blake. # wchar_h.m4 serial 53 AC_DEFUN_ONCE([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute <wchar.h>. dnl Check for <wchar.h> (missing in Linux uClibc when built without wide dnl character support). dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS([wcsdup], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi ]) dnl Check whether <wchar.h> is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext ;; esac ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) # gl_WCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCSDUP=1; AC_SUBST([HAVE_DECL_WCSDUP]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wchar_t.m4���������������������������������������������������������������0000664�0000000�0000000�00000001462�14110572173�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <stddef.h> has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcpcpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000001025�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcpcpy.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCPCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Persuade glibc <wchar.h> to declare wcpcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([wcpcpy]) if test $ac_cv_func_wcpcpy = no; then HAVE_WCPCPY=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcpncpy.m4���������������������������������������������������������������0000664�0000000�0000000�00000001033�14110572173�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcpncpy.m4 serial 3 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCPNCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Persuade glibc <wchar.h> to declare wcpncpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([wcpncpy]) if test $ac_cv_func_wcpncpy = no; then HAVE_WCPNCPY=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcrtomb.m4���������������������������������������������������������������0000664�0000000�0000000�00000011035�14110572173�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcrtomb.m4 serial 17 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCRTOMB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcrtomb]) if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 AC_CHECK_DECLS([wcrtomb],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcrtomb = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCRTOMB=1 fi else dnl We don't actually need to override wcrtomb when redefining the semantics dnl of the mbstate_t type. Tested on 32-bit AIX. dnl if test $REPLACE_MBSTATE_T = 1; then dnl REPLACE_WCRTOMB=1 dnl fi if test $REPLACE_WCRTOMB = 0; then dnl On Android 4.3, wcrtomb produces wrong characters in the C locale. dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL) dnl sometimes returns 0 instead of 1. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcrtomb works in the C locale], [gl_cv_func_wcrtomb_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); }]])], [gl_cv_func_wcrtomb_works=yes], [gl_cv_func_wcrtomb_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac ]) ]) case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) AC_DEFINE([WCRTOMB_C_LOCALE_BUG], [1], [Define if the wcrtomb function does not work in the C locale.]) REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then AC_CACHE_CHECK([whether wcrtomb return value is correct], [gl_cv_func_wcrtomb_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; }]])], [gl_cv_func_wcrtomb_retval=yes], [gl_cv_func_wcrtomb_retval=no], [:]) fi ]) case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) AC_DEFINE([WCRTOMB_RETVAL_BUG], [1], [Define if the wcrtomb function has an incorrect return value.]) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcscasecmp.m4������������������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscasecmp.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCASECMP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscasecmp]) if test $ac_cv_func_wcscasecmp = no; then HAVE_WCSCASECMP=0 fi ]) ������������������������������������������������������gnulib-20210822~d383792/m4/wcscat.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscat.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCAT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscat]) if test $ac_cv_func_wcscat = no; then HAVE_WCSCAT=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcschr.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcschr.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCHR], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcschr]) if test $ac_cv_func_wcschr = no; then HAVE_WCSCHR=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcscmp.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscmp.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCMP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscmp]) if test $ac_cv_func_wcscmp = no; then HAVE_WCSCMP=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcscoll.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscoll.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCOLL], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscoll]) if test $ac_cv_func_wcscoll = no; then HAVE_WCSCOLL=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcscpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscpy.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscpy]) if test $ac_cv_func_wcscpy = no; then HAVE_WCSCPY=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcscspn.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscspn.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSCSPN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcscspn]) if test $ac_cv_func_wcscspn = no; then HAVE_WCSCSPN=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsdup.m4����������������������������������������������������������������0000664�0000000�0000000�00000001270�14110572173�0016366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsdup.m4 serial 4 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSDUP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CACHE_CHECK([for wcsdup], [gl_cv_func_wcsdup], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]GL_MDA_DEFINES], [[return wcsdup (L"hello") != NULL;]]) ], [gl_cv_func_wcsdup=yes], [gl_cv_func_wcsdup=no]) ]) if test $gl_cv_func_wcsdup = no; then HAVE_WCSDUP=0 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsftime.m4��������������������������������������������������������������0000664�0000000�0000000�00000001055�14110572173�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsftime.m4 serial 1 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSFTIME], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([wcsftime]) if test $ac_cv_func_wcsftime = no; then HAVE_WCSFTIME=0 else case "$host_os" in mingw*) REPLACE_WCSFTIME=1 ;; esac fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcslen.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcslen.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSLEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcslen]) if test $ac_cv_func_wcslen = no; then HAVE_WCSLEN=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsncasecmp.m4�����������������������������������������������������������0000664�0000000�0000000�00000000717�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncasecmp.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNCASECMP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsncasecmp]) if test $ac_cv_func_wcsncasecmp = no; then HAVE_WCSNCASECMP=0 fi ]) �������������������������������������������������gnulib-20210822~d383792/m4/wcsncat.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncat.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNCAT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsncat]) if test $ac_cv_func_wcsncat = no; then HAVE_WCSNCAT=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsncmp.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncmp.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNCMP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsncmp]) if test $ac_cv_func_wcsncmp = no; then HAVE_WCSNCMP=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsncpy.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncpy.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsncpy]) if test $ac_cv_func_wcsncpy = no; then HAVE_WCSNCPY=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsnlen.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsnlen.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNLEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsnlen]) if test $ac_cv_func_wcsnlen = no; then HAVE_WCSNLEN=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsnrtombs.m4������������������������������������������������������������0000664�0000000�0000000�00000005322�14110572173�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsnrtombs.m4 serial 7 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSNRTOMBS], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcsnrtombs]) if test $ac_cv_func_wcsnrtombs = no; then HAVE_WCSNRTOMBS=0 else if test $REPLACE_MBSTATE_T = 1; then REPLACE_WCSNRTOMBS=1 else gl_WCSNRTOMBS_WORKS_IN_TRADITIONAL_LOCALE case "$gl_cv_func_wcsnrtombs_works_in_traditional_locale" in *yes) ;; *) REPLACE_WCSNRTOMBS=1 ;; esac fi fi ]) # Prerequisites of lib/wcsnrtombs.c. AC_DEFUN([gl_PREREQ_WCSNRTOMBS], [ : ]) dnl Test whether wcsnrtombs works in an ISO-8859-1 locale. dnl Result is gl_cv_func_wcsnrtombs_works_in_traditional_locale. AC_DEFUN([gl_WCSNRTOMBS_WORKS_IN_TRADITIONAL_LOCALE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcsnrtombs works in a traditional locale], [gl_cv_func_wcsnrtombs_works_in_traditional_locale], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_wcsnrtombs_works_in_traditional_locale="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcsnrtombs_works_in_traditional_locale="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 11.4. */ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ const char original[] = "B\374\337er"; /* "Büßer" */ wchar_t input[10]; size_t ret; const wchar_t *src; #define BUFSIZE 20 char buf[BUFSIZE]; memset (buf, '_', BUFSIZE); ret = mbstowcs (input, original, 10); if (!(ret == 5)) return 1; src = input; ret = wcsnrtombs (buf, &src, 6, 2, NULL); if (!(ret == 2)) return 2; if (!(src == input + 2)) return 3; if (!(memcmp (buf, original, ret) == 0)) return 4; } return 0; }]])], [gl_cv_func_wcsnrtombs_works_in_traditional_locale=yes], [gl_cv_func_wcsnrtombs_works_in_traditional_locale=no], [:]) fi ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcspbrk.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcspbrk.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSPBRK], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcspbrk]) if test $ac_cv_func_wcspbrk = no; then HAVE_WCSPBRK=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsrchr.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsrchr.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSRCHR], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsrchr]) if test $ac_cv_func_wcsrchr = no; then HAVE_WCSRCHR=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsrtombs.m4�������������������������������������������������������������0000664�0000000�0000000�00000012226�14110572173�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsrtombs.m4 serial 13 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSRTOMBS], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcsrtombs]) if test $ac_cv_func_wcsrtombs = no; then HAVE_WCSRTOMBS=0 AC_CHECK_DECLS([wcsrtombs],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcsrtombs = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares wcsrtombs() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCSRTOMBS=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_WCSRTOMBS=1 else gl_WCSRTOMBS_TERMINATION gl_WCSRTOMBS_NULL case "$gl_cv_func_wcsrtombs_termination" in *yes) ;; *) AC_DEFINE([WCSRTOMBS_TERMINATION_BUG], [1], [Define if the wcsrtombs function may set the source pointer to NULL without NUL-terminating the destination.]) REPLACE_WCSRTOMBS=1 ;; esac case "$gl_cv_func_wcsrtombs_null" in *yes) ;; *) AC_DEFINE([WCSRTOMBS_NULL_ARG_BUG], [1], [Define if the wcsrtombs function has the NULL destination argument bug.]) REPLACE_WCSRTOMBS=1 ;; esac fi fi ]) dnl Test whether the wcsrtombs implementation stores a non-NULL source pointer dnl as long as it has not written the final NUL byte to the destination string. dnl The OSF/1 5.1 implementation stores a NULL pointer already after storing dnl the last non-NUL character, even if there is no more room for the dnl terminating NUL character. dnl Result is gl_cv_func_wcsrtombs_termination. AC_DEFUN([gl_WCSRTOMBS_TERMINATION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcsrtombs updates the source pointer correctly], [gl_cv_func_wcsrtombs_termination], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_wcsrtombs_termination="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_wcsrtombs_termination="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_wcsrtombs_termination="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { const char original[] = "B\374\337er"; wchar_t input[10]; if (mbstowcs (input, original, 10) == 5) { const wchar_t *src = input; char output[5]; wcsrtombs (output, &src, 5, NULL); if (src != input + 5) return 1; } } return 0; }]])], [gl_cv_func_wcsrtombs_termination=yes], [gl_cv_func_wcsrtombs_termination=no], [:]) fi ]) ]) dnl Test whether the wcsrtombs implementation supports a NULL argument dnl correctly. This is not the case on HP-UX 11.11 and OSF/1 5.1: These dnl implementations updates the source pointer also if the destination argument dnl is NULL. dnl Result is gl_cv_func_wcsrtombs_null. AC_DEFUN([gl_WCSRTOMBS_NULL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcsrtombs supports a NULL argument correctly], [gl_cv_func_wcsrtombs_null], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, OSF/1, mingw. hpux* | osf* | mingw*) gl_cv_func_wcsrtombs_null="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_wcsrtombs_null="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_wcsrtombs_null="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { const char original[] = "B\374\337er"; wchar_t input[10]; if (mbstowcs (input, original, 10) == 5) { const wchar_t *src = input; size_t ret = wcsrtombs (NULL, &src, 3, NULL); if (ret != 5) result |= 1; if (src != input) result |= 2; } } return result; }]])], [gl_cv_func_wcsrtombs_null=yes], [gl_cv_func_wcsrtombs_null=no], [:]) fi ]) ]) # Prerequisites of lib/wcsrtombs.c. AC_DEFUN([gl_PREREQ_WCSRTOMBS], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsspn.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsspn.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSSPN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsspn]) if test $ac_cv_func_wcsspn = no; then HAVE_WCSSPN=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsstr.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0016416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsstr.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSSTR], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsstr]) if test $ac_cv_func_wcsstr = no; then HAVE_WCSSTR=0 fi ]) ��������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcstok.m4����������������������������������������������������������������0000664�0000000�0000000�00000003001�14110572173�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcstok.m4 serial 6 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSTOK], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([wcstok]) if test $ac_cv_func_wcstok = yes; then dnl On HP-UX 11.31, it depends on the compiler and linker whether wcstok() dnl uses hidden state, ignoring the third argument, and thus exhibits a dnl bug when two or more wcstok() iteration loops are being performed in dnl the same thread. case "$host_os" in hpux*) REPLACE_WCSTOK=1 ;; *) dnl POSIX: wchar_t *wcstok (wchar_t *, const wchar_t *, wchar_t **); dnl mingw, MSVC: wchar_t *wcstok (wchar_t *, const wchar_t *); AC_CACHE_CHECK([for wcstok with POSIX signature], [gl_cv_func_wcstok_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> wchar_t *wcstok (wchar_t *, const wchar_t *, wchar_t **); ]], [[]])], [gl_cv_func_wcstok_posix_signature=yes], [gl_cv_func_wcstok_posix_signature=no]) ]) if test $gl_cv_func_wcstok_posix_signature = no; then REPLACE_WCSTOK=1 fi ;; esac else HAVE_WCSTOK=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcswidth.m4��������������������������������������������������������������0000664�0000000�0000000�00000001213�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcswidth.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSWIDTH], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_WCWIDTH]) AC_CHECK_FUNCS_ONCE([wcswidth]) if test $ac_cv_func_wcswidth = no; then HAVE_WCSWIDTH=0 else if test $REPLACE_WCWIDTH = 1; then dnl If wcwidth needed to be replaced, wcswidth needs to be replaced dnl as well. REPLACE_WCSWIDTH=1 fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcsxfrm.m4���������������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsxfrm.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCSXFRM], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wcsxfrm]) if test $ac_cv_func_wcsxfrm = no; then HAVE_WCSXFRM=0 fi ]) ���������������������������������������������������������������������gnulib-20210822~d383792/m4/wctob.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005511�14110572173�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctob.m4 serial 13 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wctob]) if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 dnl Solaris 9 has the wctob() function but it does not work. dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned dnl registers, see <https://cygwin.com/ml/cygwin/2010-05/msg00015.html>. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wctob works], [gl_cv_func_wctob_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac changequote([,])dnl case "$host_os" in cygwin*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <wchar.h> register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; }]])], [:], [gl_cv_func_wctob_works=no], [:]) ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; }]])], [gl_cv_func_wctob_works=yes], [gl_cv_func_wctob_works=no], [:]) fi ]) case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then dnl IRIX 6.5 has the wctob() function but does not declare it. AC_CHECK_DECLS([wctob], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi ]) # Prerequisites of lib/wctob.c. AC_DEFUN([gl_PREREQ_WCTOB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wctomb.m4����������������������������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctomb.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOMB], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) if false; then REPLACE_WCTOMB=1 fi ]) # Prerequisites of lib/wctomb.c. AC_DEFUN([gl_PREREQ_WCTOMB], [ : ]) ����������������������������������������������������gnulib-20210822~d383792/m4/wctrans.m4���������������������������������������������������������������0000664�0000000�0000000�00000000625�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctrans.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTRANS], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) HAVE_WCTRANS=$HAVE_WCTRANS_T ]) �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wctype.m4����������������������������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype.m4 serial 2 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTYPE], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) HAVE_WCTYPE=$HAVE_WCTYPE_T ]) ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wctype_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000014444�14110572173�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype_h.m4 serial 30 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_WCTYPE_H], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi AC_SUBST([HAVE_ISWCNTRL]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then dnl Linux libc5 has an iswprint function that returns 0 for all arguments. dnl The other functions are likely broken in the same way. AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [dnl Guess no on Linux libc5, yes otherwise. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [[]])], [gl_cv_func_iswcntrl_works="guessing yes"], [gl_cv_func_iswcntrl_works="guessing no"]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>. : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else AC_CHECK_FUNCS([towlower]) if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else AC_CHECK_DECLS([towlower],,, [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif ]]) if test $ac_cv_have_decl_towlower = yes; then dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and dnl towupper() although it does not have the functions. Avoid a dnl collision with gnulib's replacement. REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi AC_SUBST([REPLACE_TOWLOWER]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then dnl Redefine towlower, towupper in <wctype.h>. : fi dnl We assume that the wctype() and iswctype() functions exist if and only dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that dnl exists. dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>. AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; ]], [[]])], [gl_cv_type_wctype_t=yes], [gl_cv_type_wctype_t=no]) ]) if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi dnl We assume that the wctrans() and towctrans() functions exist if and only dnl if the type wctrans_t is defined in <wctype.h>. AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #include <wctype.h> wctrans_t a; ]], [[]])], [gl_cv_type_wctrans_t=yes], [gl_cv_type_wctrans_t=no]) ]) if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <wchar.h> #endif #include <wctype.h> ]], [wctype iswctype wctrans towctrans ]) ]) # gl_WCTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT]) REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wcwidth.m4���������������������������������������������������������������0000664�0000000�0000000�00000006577�14110572173�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcwidth.m4 serial 34 dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCWIDTH], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <wchar.h> to declare wcwidth(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_HEADERS_ONCE([wchar.h]) AC_CHECK_FUNCS_ONCE([wcwidth]) AC_CHECK_DECLS([wcwidth], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcwidth != yes; then HAVE_DECL_WCWIDTH=0 fi if test $ac_cv_func_wcwidth != yes; then AC_CACHE_CHECK([whether wcwidth is a macro], [gl_cv_func_wcwidth_macro], [AC_EGREP_CPP([wchar_header_defines_wcwidth], [ #include <wchar.h> #ifdef wcwidth wchar_header_defines_wcwidth #endif], [gl_cv_func_wcwidth_macro=yes], [gl_cv_func_wcwidth_macro=no]) ]) fi if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then HAVE_WCWIDTH=1 dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. dnl On NetBSD 9.0, OpenBSD 5.0, MidnightBSD 1.1, dnl wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1. dnl On NetBSD 9.0, MidnightBSD 1.1, OSF/1 5.1, dnl wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. dnl On OpenBSD 5.8, wcwidth(0xFF1A) (FULLWIDTH COLON) returns 0. dnl This leads to bugs in 'ls' (coreutils). dnl On Solaris 11.4, wcwidth(0x2202) (PARTIAL DIFFERENTIAL) returns 2, dnl even in Western locales. AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], [gl_cv_func_wcwidth_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <wchar.h> #if !HAVE_DECL_WCWIDTH extern # ifdef __cplusplus "C" # endif int wcwidth (int); #endif int main () { int result = 0; if (setlocale (LC_ALL, "en_US.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x05B0) > 0) result |= 2; if (wcwidth (0x200B) > 0) result |= 4; if (wcwidth (0xFF1A) == 0) result |= 8; if (wcwidth (0x2202) > 1) result |= 16; } return result; }]])], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on AIX 7 systems. aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_wcwidth_works" in *yes) ;; *no) REPLACE_WCWIDTH=1 ;; esac else HAVE_WCWIDTH=0 fi dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not dnl have the wcwidth function, then it does not declare it. ]) # Prerequisites of lib/wcwidth.c. AC_DEFUN([gl_PREREQ_WCWIDTH], [ AC_REQUIRE([AC_C_INLINE]) : ]) ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/windows-stat-inodes.m4���������������������������������������������������0000664�0000000�0000000�00000001420�14110572173�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# windows-stat-inodes.m4 serial 1 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Enable inode identification in 'struct stat' on native Windows platforms. dnl Set WINDOWS_STAT_INODES to dnl - 0 -> keep the default (dev_t = 32-bit, ino_t = 16-bit), dnl - 1 -> override types normally (dev_t = 32-bit, ino_t = 64-bit), dnl - 2 -> override types in an extended way (dev_t = 64-bit, ino_t = 128-bit). AC_DEFUN([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) WINDOWS_STAT_INODES=1 ;; *) WINDOWS_STAT_INODES=0 ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/windows-stat-timespec.m4�������������������������������������������������0000664�0000000�0000000�00000001045�14110572173�0021333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# windows-stat-timespec.m4 serial 1 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Enable precise timestamps in 'struct stat' on native Windows platforms. AC_DEFUN([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) WINDOWS_STAT_TIMESPEC=1 ;; *) WINDOWS_STAT_TIMESPEC=0 ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wint_t.m4����������������������������������������������������������������0000664�0000000�0000000�00000003433�14110572173�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wint_t.m4 serial 11 dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is large enough], [gl_cv_type_wint_t_large_enough], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_large_enough=yes], [gl_cv_type_wint_t_large_enough=no])]) if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmemchr.m4���������������������������������������������������������������0000664�0000000�0000000�00000001515�14110572173�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemchr.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMCHR], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files dnl provide this function as an inline function definition. AC_CACHE_CHECK([for wmemchr], [gl_cv_func_wmemchr], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[return ! wmemchr ((const wchar_t *) 0, (wchar_t) ' ', 0);]]) ], [gl_cv_func_wmemchr=yes], [gl_cv_func_wmemchr=no]) ]) if test $gl_cv_func_wmemchr = no; then HAVE_WMEMCHR=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmemcmp.m4���������������������������������������������������������������0000664�0000000�0000000�00000001523�14110572173�0016527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemcmp.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMCMP], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files dnl provide this function as an inline function definition. AC_CACHE_CHECK([for wmemcmp], [gl_cv_func_wmemcmp], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[return ! wmemcmp ((const wchar_t *) 0, (const wchar_t *) 0, 0);]]) ], [gl_cv_func_wmemcmp=yes], [gl_cv_func_wmemcmp=no]) ]) if test $gl_cv_func_wmemcmp = no; then HAVE_WMEMCMP=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmemcpy.m4���������������������������������������������������������������0000664�0000000�0000000�00000001515�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemcpy.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files dnl provide this function as an inline function definition. AC_CACHE_CHECK([for wmemcpy], [gl_cv_func_wmemcpy], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[return ! wmemcpy ((wchar_t *) 0, (const wchar_t *) 0, 0);]]) ], [gl_cv_func_wmemcpy=yes], [gl_cv_func_wmemcpy=no]) ]) if test $gl_cv_func_wmemcpy = no; then HAVE_WMEMCPY=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmemmove.m4��������������������������������������������������������������0000664�0000000�0000000�00000001526�14110572173�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemmove.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMMOVE], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files dnl provide this function as an inline function definition. AC_CACHE_CHECK([for wmemmove], [gl_cv_func_wmemmove], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[return ! wmemmove ((wchar_t *) 0, (const wchar_t *) 0, 0);]]) ], [gl_cv_func_wmemmove=yes], [gl_cv_func_wmemmove=no]) ]) if test $gl_cv_func_wmemmove = no; then HAVE_WMEMMOVE=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmempcpy.m4��������������������������������������������������������������0000664�0000000�0000000�00000001204�14110572173�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmempcpy.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMPCPY], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Persuade glibc <wchar.h> to declare wmempcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The wmempcpy() declaration in lib/wchar.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_FUNCS_ONCE([wmempcpy]) if test $ac_cv_func_wmempcpy = no; then HAVE_WMEMPCPY=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/wmemset.m4���������������������������������������������������������������0000664�0000000�0000000�00000001507�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemset.m4 serial 5 dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WMEMSET], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files dnl provide this function as an inline function definition. AC_CACHE_CHECK([for wmemset], [gl_cv_func_wmemset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> ]], [[return ! wmemset ((wchar_t *) 0, (wchar_t) ' ', 0);]]) ], [gl_cv_func_wmemset=yes], [gl_cv_func_wmemset=no]) ]) if test $gl_cv_func_wmemset = no; then HAVE_WMEMSET=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/write-any-file.m4��������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Determine whether we can write any file. # Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. AC_DEFUN([gl_WRITE_ANY_FILE], [ AC_CHECK_HEADERS_ONCE([priv.h]) ]) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/write.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002030�14110572173�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# write.m4 serial 6 dnl Copyright (C) 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WRITE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_WRITE=1 fi ]) dnl This ifdef is just an optimization, to avoid performing a configure dnl check whose result is not used. It does not make the test of dnl GNULIB_UNISTD_H_SIGPIPE or GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_WRITE=1 fi ]) m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_WRITE=1 fi ]) ]) # Prerequisites of lib/write.c. AC_DEFUN([gl_PREREQ_WRITE], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xalloc.m4����������������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XALLOC], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xgetcwd.m4���������������������������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XGETCWD], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xnanosleep.m4������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_XNANOSLEEP], [ AC_CHECK_FUNCS_ONCE([pause]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xsize.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xstrndup.m4��������������������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xstrndup.m4 serial 2 dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSTRNDUP], [ gl_PREREQ_XSTRNDUP ]) # Prerequisites of lib/xstrndup.c. AC_DEFUN([gl_PREREQ_XSTRNDUP], [ : ]) �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xstrtod.m4���������������������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/xstrtod.c. AC_DEFUN([gl_XSTRTOD], [ : ]) # Prerequisites of lib/xstrtold.c. AC_DEFUN([gl_XSTRTOLD], [ : ]) ���������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xstrtol.m4���������������������������������������������������������������0000664�0000000�0000000�00000000464�14110572173�0016604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 11 dnl Copyright (C) 2002-2007, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSTRTOL], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/xvasprintf.m4������������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xvasprintf.m4 serial 2 dnl Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites of lib/xvasprintf.c. AC_DEFUN([gl_XVASPRINTF], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/year2038.m4��������������������������������������������������������������0000664�0000000�0000000�00000011437�14110572173�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# year2038.m4 serial 7 dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Attempt to ensure that 'time_t' can go past the year 2038 and that dnl the functions 'time', 'stat', etc. work with post-2038 timestamps. AC_DEFUN([gl_YEAR2038_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1], [For 64-bit time_t on 32-bit mingw.]) ;; esac ]) # gl_YEAR2038_TEST_INCLUDES # ------------------------- AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], [[ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; ]]) # gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE) ----------------------------------------- AC_DEFUN([gl_YEAR2038_BODY], [ AC_ARG_ENABLE([year2038], [ --disable-year2038 omit support for timestamps past the year 2038]) AS_IF([test "$enable_year2038" != no], [ dnl On many systems, time_t is already a 64-bit type. dnl On those systems where time_t is still 32-bit, it requires kernel dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM. dnl dnl On native Windows, the system include files define types __time32_t dnl and __time64_t. By default, time_t is an alias of dnl - __time32_t on 32-bit mingw, dnl - __time64_t on 64-bit mingw and on MSVC (since MSVC 8). dnl But when compiling with -D__MINGW_USE_VC2005_COMPAT, time_t is an dnl alias of __time64_t. dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of dnl __time32_t. AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no]) ]) if test "$gl_cv_type_time_t_y2038" = no; then AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], [gl_cv_type_time_t_bits_macro], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[#define _TIME_BITS 64 #define _FILE_OFFSET_BITS 64 ]gl_YEAR2038_TEST_INCLUDES])], [gl_cv_type_time_t_bits_macro=yes], [gl_cv_type_time_t_bits_macro=no]) ]) if test "$gl_cv_type_time_t_bits_macro" = yes; then AC_DEFINE([_TIME_BITS], [64], [Number of bits in a timestamp, on hosts where this is settable.]) dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. AC_DEFINE([_FILE_OFFSET_BITS], [64], [Number of bits in a file offset, on hosts where this is settable.]) gl_cv_type_time_t_y2038=yes fi fi if test $gl_cv_type_time_t_y2038 = no; then AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _USE_32BIT_TIME_T int ok; #else error fail #endif ]])], [AC_MSG_FAILURE( [The 'time_t' type stops working after January 2038. Remove _USE_32BIT_TIME_T from the compiler flags.])], [# If not cross-compiling and $1 says we should check, # and 'touch' works with a large timestamp, then evidently wider time_t # is desired and supported, so fail and ask the builder to fix the # problem. Otherwise, just warn the builder. m4_ifval([$1], [if test $cross_compiling = no \ && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in *'Feb 7 2106'* | *'Feb 7 17:10'*) AC_MSG_FAILURE( [The 'time_t' type stops working after January 2038, and your system appears to support a wider 'time_t'. Try configuring with 'CC="${CC} -m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]);; esac rm -f conftest.time fi]) if test "$gl_warned_about_y2038" != yes; then AC_MSG_WARN( [The 'time_t' type stops working after January 2038, and this package needs a wider 'time_t' type if there is any way to access timestamps after that. Configure with 'CC="${CC} -m64"' perhaps?]) gl_warned_about_y2038=yes fi ]) fi]) ]) AC_DEFUN([gl_YEAR2038], [ gl_YEAR2038_BODY([require-year2038-safe]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/yesno.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0016220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# yesno.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_YESNO], [ dnl No prerequisites of lib/yesno.c. : ]) �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/m4/yield.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0016174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# yield.m4 serial 4 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_YIELD], [ AC_REQUIRE([gl_PTHREADLIB]) AC_REQUIRE([gl_THREADLIB]) if test $gl_threads_api = posix; then YIELD_LIB="$LIB_SCHED_YIELD" else YIELD_LIB= fi AC_SUBST([YIELD_LIB]) ]) ����������������������������gnulib-20210822~d383792/m4/zzgnulib.m4��������������������������������������������������������������0000664�0000000�0000000�00000001522�14110572173�0016725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# zzgnulib.m4 serial 1 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts after all other dnl package- or gnulib-provided .m4 files - at least for those packages dnl that redefine AC_PROG_CC. dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG dnl and gl_COMPILER_PREPARE_CHECK_DECL. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[ gl_COMPILER_CLANG gl_COMPILER_PREPARE_CHECK_DECL ]) # gl_ZZGNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file after all other gnulib .m4 files. AC_DEFUN([gl_ZZGNULIB]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0015747�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/.gitattributes������������������������������������������������������0000664�0000000�0000000�00000000144�14110572173�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# "git diff --check" should not reject modules files which end in a blank line. * whitespace=-trail ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/COPYING�������������������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The files in this directory describe the gnulib modules. The following copyright notice applies to each of these description files. Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/README��������������������������������������������������������������0000664�0000000�0000000�00000001242�14110572173�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains metainformation about the gnulib modules, one or two files per module. These files are used by gnulib-tool. For every module, - the file <module> is the metainformation about the library code of the module, - the file <module>-tests is the metainformation about the unit test of the module (optional but recommended). All the files in this directory are distributed under the following copyright: Copyright (C) 2002-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, in any medium, are permitted without royalty provided the copyright notice and this notice are preserved. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/TEMPLATE������������������������������������������������������������0000664�0000000�0000000�00000000145�14110572173�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Files: Depends-on: configure.ac: Makefile.am: Include: License: GPL Maintainer: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/TEMPLATE-EXTENDED���������������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Comment: Status: Notice: Applicability: Files: Depends-on: configure.ac-early: configure.ac: Makefile.am: Include: Link: License: GPL Maintainer: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/TEMPLATE-TESTS������������������������������������������������������0000664�0000000�0000000�00000000062�14110572173�0020003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: configure.ac: Makefile.am: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/_Exit���������������������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: _Exit() function: terminate current process. Files: lib/_Exit.c m4/_Exit.m4 Depends-on: stdlib unistd configure.ac: gl_FUNC__EXIT if test $HAVE__EXIT = 0; then AC_LIBOBJ([_Exit]) gl_PREREQ__EXIT fi gl_STDLIB_MODULE_INDICATOR([_Exit]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/_Exit-tests���������������������������������������������������������0000664�0000000�0000000�00000000214�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-_Exit.sh tests/test-_Exit.c Depends-on: configure.ac: Makefile.am: TESTS += test-_Exit.sh check_PROGRAMS += test-_Exit ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/absolute-header�����������������������������������������������������0000664�0000000�0000000�00000000747�14110572173�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allows wrapping a broken system header in a gnulib replacement. Files: m4/absolute-header.m4 Depends-on: configure.ac: Makefile.am: # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) Include: License: LGPLv2+ Maintainer: all �������������������������gnulib-20210822~d383792/modules/accept��������������������������������������������������������������0000664�0000000�0000000�00000001037�14110572173�0017132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: accept() function: accept a connection to a server socket. Files: lib/accept.c lib/w32sock.h Depends-on: extensions sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([accept]) fi gl_SYS_SOCKET_MODULE_INDICATOR([accept]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/accept-tests��������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-accept.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-accept check_PROGRAMS += test-accept test_accept_LDADD = $(LDADD) @LIBSOCKET@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/accept4�������������������������������������������������������������0000664�0000000�0000000�00000000625�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: accept4() function: accept a connection on a socket, with specific opening flags. Files: lib/accept4.c m4/accept4.m4 Depends-on: sys_socket accept fcntl-h binary-io extensions msvc-nothrow configure.ac: gl_FUNC_ACCEPT4 gl_SYS_SOCKET_MODULE_INDICATOR([accept4]) Makefile.am: lib_SOURCES += accept4.c Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPL Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/accept4-tests�������������������������������������������������������0000664�0000000�0000000�00000000353�14110572173�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-accept4.c tests/signature.h tests/macros.h Depends-on: fcntl-h netinet_in binary-io sockets configure.ac: Makefile.am: TESTS += test-accept4 check_PROGRAMS += test-accept4 test_accept4_LDADD = $(LDADD) @LIBSOCKET@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/access��������������������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: access() function: test the access rights of a file. Files: lib/access.c m4/access.m4 Depends-on: unistd fcntl configure.ac: gl_FUNC_ACCESS if test $REPLACE_ACCESS = 1; then AC_LIBOBJ([access]) fi gl_UNISTD_MODULE_INDICATOR([access]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/access-tests��������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-access.c tests/signature.h tests/macros.h Depends-on: creat root-uid configure.ac: AC_CHECK_FUNCS_ONCE([geteuid]) Makefile.am: TESTS += test-access check_PROGRAMS += test-access �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acl�����������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0016433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access control lists of files, with diagnostics. (Unportable.) Files: lib/copy-acl.c lib/set-acl.c Depends-on: error gettext-h qcopy-acl qset-acl quote stdbool configure.ac: Makefile.am: lib_SOURCES += copy-acl.c set-acl.c Include: "acl.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acl-permissions�����������������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access control lists of files. (Unportable.) Files: lib/acl.h lib/acl-internal.h lib/acl-errno-valid.c lib/acl_entries.c lib/acl-internal.c lib/get-permissions.c lib/set-permissions.c m4/acl.m4 Depends-on: extern-inline fstat stat stdbool sys_stat configure.ac: gl_FUNC_ACL Makefile.am: lib_SOURCES += acl-errno-valid.c acl-internal.c \ get-permissions.c set-permissions.c Include: "acl.h" Link: $(LIB_ACL) License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������gnulib-20210822~d383792/modules/acl-tests�����������������������������������������������������������0000664�0000000�0000000�00000001441�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-set-mode-acl.sh tests/test-set-mode-acl-1.sh tests/test-set-mode-acl-2.sh tests/test-copy-acl.sh tests/test-copy-acl-1.sh tests/test-copy-acl-2.sh tests/test-set-mode-acl.c tests/test-copy-acl.c tests/test-sameacls.c tests/macros.h Depends-on: file-has-acl-tests read-file unistd xalloc test-framework-sh configure.ac: Makefile.am: TESTS += \ test-set-mode-acl.sh test-set-mode-acl-1.sh test-set-mode-acl-2.sh \ test-copy-acl.sh test-copy-acl-1.sh test-copy-acl-2.sh TESTS_ENVIRONMENT += USE_ACL=$(USE_ACL) check_PROGRAMS += test-set-mode-acl test-copy-acl test-sameacls test_set_mode_acl_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ $(LIB_MBRTOWC) test_copy_acl_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ $(LIB_MBRTOWC) test_sameacls_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acos����������������������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: acos() function: inverse cosine function. Files: m4/acos.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_ACOS Makefile.am: Include: <math.h> Link: $(ACOS_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acos-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-acos.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-acos check_PROGRAMS += test-acos test_acos_LDADD = $(LDADD) @ACOS_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acosf���������������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: acosf() function: inverse cosine function. Files: lib/acosf.c m4/acosf.m4 Depends-on: math extensions acos [test $HAVE_ACOSF = 0] configure.ac: gl_FUNC_ACOSF if test $HAVE_ACOSF = 0; then AC_LIBOBJ([acosf]) fi gl_MATH_MODULE_INDICATOR([acosf]) Makefile.am: Include: <math.h> Link: $(ACOSF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acosf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-acosf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-acosf check_PROGRAMS += test-acosf test_acosf_LDADD = $(LDADD) @ACOSF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acosl���������������������������������������������������������������0000664�0000000�0000000�00000001140�14110572173�0016767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: acosl() function: inverse cosine function with long double argument. Files: lib/acosl.c m4/acosl.m4 Depends-on: math extensions acos [test $HAVE_ACOSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] asinl [test $HAVE_ACOSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] sqrtl [test $HAVE_ACOSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ACOSL if test $HAVE_ACOSL = 0; then AC_LIBOBJ([acosl]) fi gl_MATH_MODULE_INDICATOR([acosl]) Makefile.am: Include: <math.h> Link: $(ACOSL_LIBM) License: LGPL Maintainer: Paolo Bonzini ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/acosl-tests���������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-acosl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-acosl check_PROGRAMS += test-acosl test_acosl_LDADD = $(LDADD) @ACOSL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/agpl-3.0������������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Affero General Public License version 3.0 in Texinfo format. Files: doc/agpl-3.0.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/aligned-malloc������������������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allocate memory with indefinite extent and specified alignment. Files: lib/aligned-malloc.h m4/malloc-align.m4 Depends-on: stdint posix_memalign aligned_alloc memalign configure.ac: gl_MALLOC_ALIGNMENT AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([posix_memalign aligned_alloc memalign]) Makefile.am: Include: "aligned-malloc.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/aligned-malloc-tests������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0021704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-aligned-malloc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-aligned-malloc check_PROGRAMS += test-aligned-malloc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/aligned_alloc�������������������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allocate memory with indefinite extent and specified alignment. Files: lib/aligned_alloc.c m4/aligned_alloc.m4 Depends-on: extensions stdlib configure.ac: gl_FUNC_ALIGNED_ALLOC if test $REPLACE_ALIGNED_ALLOC = 1; then AC_LIBOBJ([aligned_alloc]) fi gl_STDLIB_MODULE_INDICATOR([aligned_alloc]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/aligned_alloc-tests�������������������������������������������������0000664�0000000�0000000�00000000243�14110572173�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-aligned_alloc.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-aligned_alloc check_PROGRAMS += test-aligned_alloc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alignof�������������������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine alignment of types. Files: lib/alignof.h Depends-on: configure.ac: Makefile.am: Include: "alignof.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alignof-tests�������������������������������������������������������0000664�0000000�0000000�00000000212�14110572173�0020444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-alignof.c Depends-on: verify stdint configure.ac: Makefile.am: TESTS += test-alignof check_PROGRAMS += test-alignof ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alloca��������������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0017122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation on the stack. Files: lib/alloca.c Depends-on: alloca-opt configure.ac: Makefile.am: Include: <alloca.h> License: public domain Maintainer: bug-gnulib@gnu.org ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alloca-opt����������������������������������������������������������0000664�0000000�0000000�00000001532�14110572173�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation on the stack, as an optional optimization. It allows using the alloca() macro if and only if the autoconf tests define HAVE_ALLOCA. Files: lib/alloca.in.h m4/alloca.m4 Depends-on: configure.ac: gl_FUNC_ALLOCA Makefile.am: BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t Include: <alloca.h> License: LGPLv2+ Maintainer: bug-gnulib@gnu.org ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alloca-opt-tests����������������������������������������������������0000664�0000000�0000000�00000000205�14110572173�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-alloca-opt.c Depends-on: configure.ac: Makefile.am: TESTS += test-alloca-opt check_PROGRAMS += test-alloca-opt �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/allocator�����������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Storage allocators. Files: lib/allocator.h lib/allocator.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += allocator.c Include: "allocator.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/alphasort�����������������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: alphasort() function: compare entries of a directory alphabetically Files: lib/alphasort.c m4/alphasort.m4 Depends-on: dirent extensions configure.ac: gl_FUNC_ALPHASORT if test $HAVE_ALPHASORT = 0; then AC_LIBOBJ([alphasort]) gl_PREREQ_ALPHASORT fi gl_DIRENT_MODULE_INDICATOR([alphasort]) Makefile.am: Include: <dirent.h> License: LGPL Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/amemxfrm������������������������������������������������������������0000664�0000000�0000000�00000000424�14110572173�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent memory area transformation for comparison. Files: lib/amemxfrm.h lib/amemxfrm.c Depends-on: free-posix configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += amemxfrm.c Include: "amemxfrm.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/announce-gen��������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generate a release announcement message. See also readme-release. Files: build-aux/announce-gen Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ansi-c++-opt��������������������������������������������������������0000664�0000000�0000000�00000000320�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Optional use of an ANSI C++ compiler. Files: m4/ansi-c++.m4 Depends-on: configure.ac-early: AC_REQUIRE([gl_ANSI_CXX]) configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlink�����������������������������������������������������������0000664�0000000�0000000�00000000421�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reading symbolic links without size limitation. Files: lib/areadlink.h lib/areadlink.c Depends-on: careadlinkat readlink configure.ac: Makefile.am: lib_SOURCES += areadlink.c Include: "areadlink.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlink-tests�����������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-areadlink.h tests/test-areadlink.c tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-areadlink check_PROGRAMS += test-areadlink ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlink-with-size�������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0021554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the contents of a symbolic link, without size limitations. Files: lib/areadlink.h lib/areadlink-with-size.c Depends-on: free-posix readlink ssize_t stdint unistd configure.ac: Makefile.am: lib_SOURCES += areadlink-with-size.c Include: "areadlink.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlink-with-size-tests�������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0022704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-areadlink.h tests/test-areadlink-with-size.c tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-areadlink-with-size check_PROGRAMS += test-areadlink-with-size ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlinkat���������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reading symbolic links without size limitation, relative to fd. Files: lib/areadlink.h lib/areadlinkat.c lib/at-func.c Depends-on: areadlink careadlinkat readlinkat at-internal errno extensions fchdir fcntl-h filename openat-die openat-h save-cwd configure.ac: gl_MODULE_INDICATOR([areadlinkat]) Makefile.am: lib_SOURCES += areadlinkat.c Include: "areadlink.h" License: GPL Maintainer: Jim Meyering, Eric Blake ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlinkat-tests���������������������������������������������������0000664�0000000�0000000�00000000366�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-areadlink.h tests/test-areadlinkat.c tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-areadlinkat check_PROGRAMS += test-areadlinkat test_areadlinkat_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/areadlinkat-with-size�����������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a symbolic link, without size limitations, relative to fd. Files: lib/areadlink.h lib/areadlinkat-with-size.c lib/at-func.c Depends-on: areadlink-with-size stdint readlinkat at-internal errno extensions fchdir fcntl-h filename free-posix openat-die openat-h save-cwd unistd configure.ac: gl_MODULE_INDICATOR([areadlinkat-with-size]) Makefile.am: lib_SOURCES += areadlinkat-with-size.c Include: "areadlink.h" License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������gnulib-20210822~d383792/modules/areadlinkat-with-size-tests�����������������������������������������0000664�0000000�0000000�00000000426�14110572173�0023234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-areadlink.h tests/test-areadlinkat-with-size.c tests/macros.h Depends-on: ignore-value stdbool configure.ac: Makefile.am: TESTS += test-areadlinkat-with-size check_PROGRAMS += test-areadlinkat-with-size test_areadlinkat_with_size_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argmatch������������������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for an exact or abbreviated match of a string in an array of strings. Files: lib/argmatch.h lib/argmatch.c Depends-on: c99 error exitfail getprogname gettext-h memcmp quote quotearg stdbool stdlib verify configure.ac: Makefile.am: lib_SOURCES += argmatch.c Include: "argmatch.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argmatch-tests������������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argmatch.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-argmatch check_PROGRAMS += test-argmatch test_argmatch_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argp����������������������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hierarchical processing of command line arguments. Files: lib/argp.h lib/argp-ba.c lib/argp-eexst.c lib/argp-fmtstream.c lib/argp-fmtstream.h lib/argp-fs-xinl.c lib/argp-help.c lib/argp-namefrob.h lib/argp-parse.c lib/argp-pin.c lib/argp-pv.c lib/argp-pvh.c lib/argp-xinl.c m4/argp.m4 Depends-on: alloca basename-lgpl extern-inline getopt-gnu strchrnul sysexits malloc-gnu mempcpy strndup strcase extensions vsnprintf sleep stdalign stdio strerror memchr memmove configure.ac: gl_ARGP m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format]) AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])]) Makefile.am: lib_SOURCES += argp.h argp-ba.c argp-eexst.c \ argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ argp-xinl.c Include: "argp.h" License: LGPL Maintainer: Sergey Poznyakoff, glibc ������������������������������������������������������������������������gnulib-20210822~d383792/modules/argp-tests����������������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argp.c tests/test-argp-2.sh tests/macros.h Depends-on: Makefile.am: TESTS += test-argp test-argp-2.sh check_PROGRAMS += test-argp test_argp_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argp-version-etc����������������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0021055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Version-etc hook for Argp. Files: lib/argp-version-etc.c lib/argp-version-etc.h Depends-on: argp version-etc Makefile.am: lib_SOURCES += argp-version-etc.h argp-version-etc.c Include: "argp-version-etc.h" License: GPL Maintainer: Sergey Poznyakoff �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argp-version-etc-tests����������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argp-version-etc.c tests/test-argp-version-etc-1.sh Depends-on: argp version-etc-fsf Makefile.am: TESTS += test-argp-version-etc test-argp-version-etc-1.sh check_PROGRAMS += test-argp-version-etc test_argp_version_etc_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argv-iter�����������������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0017573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: iterate through argv or a --files0-from=-specified file Files: lib/argv-iter.c lib/argv-iter.h Depends-on: getdelim snippet/arg-nonnull stdbool configure.ac: Makefile.am: lib_SOURCES += argv-iter.c argv-iter.h Include: "argv-iter.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argv-iter-tests�����������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0020725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argv-iter.c tests/macros.h Depends-on: tmpfile configure.ac: Makefile.am: TESTS += test-argv-iter check_PROGRAMS += test-argv-iter test_argv_iter_LDADD = $(LDADD) $(LIB_GETRANDOM) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/argz����������������������������������������������������������������0000664�0000000�0000000�00000001673�14110572173�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Argv style string arrays in a single null delimited char*. Files: lib/argz.in.h lib/argz.c m4/argz.m4 Depends-on: memmove [test -n "$ARGZ_H"] mempcpy [test -n "$ARGZ_H"] stpcpy [test -n "$ARGZ_H"] strndup [test -n "$ARGZ_H"] strnlen [test -n "$ARGZ_H"] strstr [test -n "$ARGZ_H"] configure.ac: gl_FUNC_ARGZ if test -n "$ARGZ_H"; then AC_LIBOBJ([argz]) fi Makefile.am: BUILT_SOURCES += $(ARGZ_H) # We need the following in order to create <argz.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ARGZ_H argz.h: argz.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/argz.in.h; \ } > $@-t && \ mv -f $@-t $@ else argz.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += argz.h argz.h-t Include: <argz.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������gnulib-20210822~d383792/modules/arpa_inet�����������������������������������������������������������0000664�0000000�0000000�00000003557�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <arpa/inet.h>. Files: lib/arpa_inet.in.h m4/arpa_inet_h.m4 m4/sys_socket_h.m4 m4/socklen.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_socket configure.ac: gl_ARPA_INET_H gl_ARPA_INET_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += arpa/inet.h # We need the following in order to create <arpa/inet.h> when the system # doesn't have one. arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) arpa $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ -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)' \ < $(srcdir)/arpa_inet.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t MOSTLYCLEANDIRS += arpa Include: <arpa/inet.h> License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/arpa_inet-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0021345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-arpa_inet-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-arpa_inet-c++ check_PROGRAMS += test-arpa_inet-c++ test_arpa_inet_c___SOURCES = test-arpa_inet-c++.cc test_arpa_inet_c___LDADD = $(LDADD) $(INET_NTOP_LIB) $(INET_PTON_LIB) $(LIBSOCKET) endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/arpa_inet-tests�����������������������������������������������������0000664�0000000�0000000�00000000225�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-arpa_inet.c Depends-on: arpa_inet-c++-tests configure.ac: Makefile.am: TESTS += test-arpa_inet check_PROGRAMS += test-arpa_inet ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-list����������������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by an array. Files: lib/gl_array_list.h lib/gl_array_list.c Depends-on: list stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_list.h gl_array_list.c Include: "gl_array_list.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-list-tests����������������������������������������������������0000664�0000000�0000000�00000000224�14110572173�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_list.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-array_list check_PROGRAMS += test-array_list ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-map�����������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Map data type implemented by an array. Files: lib/gl_array_map.h lib/gl_array_map.c Depends-on: map stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_map.h gl_array_map.c Include: "gl_array_map.h" License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-map-tests�����������������������������������������������������0000664�0000000�0000000�00000000322�14110572173�0020720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_map.c tests/macros.h Depends-on: xlist array-list xalloc configure.ac: Makefile.am: TESTS += test-array_map check_PROGRAMS += test-array_map test_array_map_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-mergesort�����������������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Merge-sort algorithm on arrays. Files: lib/array-mergesort.h Depends-on: configure.ac: Makefile.am: Include: "array-mergesort.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-mergesort-tests�����������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array-mergesort.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-array-mergesort check_PROGRAMS += test-array-mergesort ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-omap����������������������������������������������������������0000664�0000000�0000000�00000000417�14110572173�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered map data type implemented by an array. Files: lib/gl_array_omap.h lib/gl_array_omap.c Depends-on: omap xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_omap.h gl_array_omap.c Include: "gl_array_omap.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-omap-tests����������������������������������������������������0000664�0000000�0000000�00000000317�14110572173�0021103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_omap.c tests/macros.h Depends-on: xlist array-list configure.ac: Makefile.am: TESTS += test-array_omap check_PROGRAMS += test-array_omap test_array_omap_LDADD = $(LDADD) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-oset����������������������������������������������������������0000664�0000000�0000000�00000000417�14110572173�0017762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered set data type implemented by an array. Files: lib/gl_array_oset.h lib/gl_array_oset.c Depends-on: oset xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_oset.h gl_array_oset.c Include: "gl_array_oset.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-oset-tests����������������������������������������������������0000664�0000000�0000000�00000000351�14110572173�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_oset.c tests/test-oset-update.h tests/macros.h Depends-on: xlist array-list configure.ac: Makefile.am: TESTS += test-array_oset check_PROGRAMS += test-array_oset test_array_oset_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-set�����������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set data type implemented by an array. Files: lib/gl_array_set.h lib/gl_array_set.c Depends-on: set stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_set.h gl_array_set.c Include: "gl_array_set.h" License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/array-set-tests�����������������������������������������������������0000664�0000000�0000000�00000000322�14110572173�0020736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_set.c tests/macros.h Depends-on: xoset array-oset xalloc configure.ac: Makefile.am: TESTS += test-array_set check_PROGRAMS += test-array_set test_array_set_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asin����������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0016624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: asin() function: inverse sine function. Files: m4/asin.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_ASIN Makefile.am: Include: <math.h> Link: $(ASIN_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asin-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-asin.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-asin check_PROGRAMS += test-asin test_asin_LDADD = $(LDADD) @ASIN_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asinf���������������������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: asinf() function: inverse sine function. Files: lib/asinf.c m4/asinf.m4 Depends-on: math extensions asin [test $HAVE_ASINF = 0] configure.ac: gl_FUNC_ASINF if test $HAVE_ASINF = 0; then AC_LIBOBJ([asinf]) fi gl_MATH_MODULE_INDICATOR([asinf]) Makefile.am: Include: <math.h> Link: $(ASINF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asinf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-asinf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-asinf check_PROGRAMS += test-asinf test_asinf_LDADD = $(LDADD) @ASINF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asinl���������������������������������������������������������������0000664�0000000�0000000�00000001012�14110572173�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: asinl() function: inverse sine function with long double argument. Files: lib/asinl.c m4/asinl.m4 Depends-on: math extensions asin [test $HAVE_ASINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] sqrtl [test $HAVE_ASINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ASINL if test $HAVE_ASINL = 0; then AC_LIBOBJ([asinl]) fi gl_MATH_MODULE_INDICATOR([asinl]) Makefile.am: Include: <math.h> Link: $(ASINL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asinl-tests���������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-asinl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-asinl check_PROGRAMS += test-asinl test_asinl_LDADD = $(LDADD) @ASINL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/assert��������������������������������������������������������������0000664�0000000�0000000�00000000350�14110572173�0017171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allow the installer to disable assertions through "configure --disable-assert". Files: m4/assert.m4 Depends-on: c99 configure.ac: gl_ASSERT Makefile.am: Include: <assert.h> License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/assert-h������������������������������������������������������������0000664�0000000�0000000�00000002300�14110572173�0017413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <assert.h> that conforms to C11. Files: lib/assert.in.h lib/verify.h m4/assert_h.m4 Depends-on: include_next configure.ac: gl_ASSERT_H Makefile.am: BUILT_SOURCES += $(ASSERT_H) # We need the following in order to create <assert.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ASSERT_H assert.h: assert.in.h verify.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \ < $(srcdir)/assert.in.h && \ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \ -e 's|_gl_verify|_gl_static_assert|g' \ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \ -e 's|_GL\(_STATIC_ASSERT_H\)|_${gl_include_guard_prefix}\1|g' \ < $(srcdir)/verify.h; \ } > $@-t && \ mv $@-t $@ else assert.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += assert.h assert.h-t Include: <assert.h> License: LGPLv2+ Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/assert-h-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-assert-h-c++.cc tests/test-assert-h-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-assert-h-c++ check_PROGRAMS += test-assert-h-c++ test_assert_h_c___SOURCES = test-assert-h-c++.cc test-assert-h-c++2.cc endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/assert-h-tests������������������������������������������������������0000664�0000000�0000000�00000000061�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: configure.ac: Makefile.am: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/assure��������������������������������������������������������������0000664�0000000�0000000�00000000276�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Run-time assert-like macros. Files: lib/assure.h Depends-on: verify configure.ac: Makefile.am: Include: "assure.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/astrxfrm������������������������������������������������������������0000664�0000000�0000000�00000000414�14110572173�0017537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent string transformation for comparison. Files: lib/astrxfrm.h lib/astrxfrm.c Depends-on: free-posix configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += astrxfrm.c Include: "astrxfrm.h" License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/astrxfrm-tests������������������������������������������������������0000664�0000000�0000000�00000000275�14110572173�0020704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-astrxfrm.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-astrxfrm check_PROGRAMS += test-astrxfrm test_astrxfrm_LDADD = $(LDADD) $(LIB_SETLOCALE) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asyncsafe-spin������������������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Spin locks for communication between threads and signal handlers. Files: lib/asyncsafe-spin.h lib/asyncsafe-spin.c Depends-on: signal-h stdbool sigprocmask windows-spin sparcv8+ configure.ac: AC_REQUIRE([AC_C_INLINE]) AC_CHECK_HEADERS_ONCE([pthread.h]) Makefile.am: lib_SOURCES += asyncsafe-spin.c Include: "asyncsafe-spin.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/asyncsafe-spin-tests������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-asyncsafe-spin1.c tests/test-asyncsafe-spin2.c tests/atomic-int-gnulib.h m4/semaphore.m4 Depends-on: thread lock yield configure.ac: AC_CHECK_HEADERS_ONCE([semaphore.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_SEMAPHORE]) Makefile.am: TESTS += test-asyncsafe-spin1 test-asyncsafe-spin2 check_PROGRAMS += test-asyncsafe-spin1 test-asyncsafe-spin2 test_asyncsafe_spin2_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ @LIB_SEMAPHORE@ ����������������������������������������������������������gnulib-20210822~d383792/modules/at-internal���������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0020110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Internal functions for dealing with files relative to a directory. Files: lib/openat-priv.h lib/openat-proc.c Depends-on: errno fcntl-h intprops open [case $host_os in mingw*) false;; *) :;; esac] sys_stat unistd configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) Makefile.am: lib_SOURCES += openat-priv.h openat-proc.c Include: "openat-priv.h" License: GPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan����������������������������������������������������������������0000664�0000000�0000000�00000000330�14110572173�0016611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atan() function: inverse tangent function. Files: m4/atan.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_ATAN Makefile.am: Include: <math.h> Link: $(ATAN_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-atan.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-atan check_PROGRAMS += test-atan test_atan_LDADD = $(LDADD) @ATAN_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan2���������������������������������������������������������������0000664�0000000�0000000�00000000341�14110572173�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atan2() function: angle of a point in the plane. Files: m4/atan2.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_ATAN2 Makefile.am: Include: <math.h> Link: $(ATAN2_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan2-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-atan2.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-atan2 check_PROGRAMS += test-atan2 test_atan2_LDADD = $(LDADD) @ATAN2_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan2f��������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atan2f() function: angle of a point in the plane. Files: lib/atan2f.c m4/atan2f.m4 Depends-on: math extensions atan2 [test $HAVE_ATAN2F = 0] configure.ac: gl_FUNC_ATAN2F if test $HAVE_ATAN2F = 0; then AC_LIBOBJ([atan2f]) fi gl_MATH_MODULE_INDICATOR([atan2f]) Makefile.am: Include: <math.h> Link: $(ATAN2F_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atan2f-tests��������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-atan2f.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-atan2f check_PROGRAMS += test-atan2f test_atan2f_LDADD = $(LDADD) @ATAN2F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atanf���������������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atanf() function: inverse tangent function. Files: lib/atanf.c m4/atanf.m4 Depends-on: math extensions atan [test $HAVE_ATANF = 0] configure.ac: gl_FUNC_ATANF if test $HAVE_ATANF = 0; then AC_LIBOBJ([atanf]) fi gl_MATH_MODULE_INDICATOR([atanf]) Makefile.am: Include: <math.h> Link: $(ATANF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atanf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-atanf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-atanf check_PROGRAMS += test-atanf test_atanf_LDADD = $(LDADD) @ATANF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atanl���������������������������������������������������������������0000664�0000000�0000000�00000001015�14110572173�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atanl() function: inverse tangent function with long double argument. Files: lib/atanl.c m4/atanl.m4 Depends-on: math extensions atan [test $HAVE_ATANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl [test $HAVE_ATANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ATANL if test $HAVE_ATANL = 0; then AC_LIBOBJ([atanl]) fi gl_MATH_MODULE_INDICATOR([atanl]) Makefile.am: Include: <math.h> Link: $(ATANL_LIBM) License: LGPL Maintainer: Paolo Bonzini �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atanl-tests���������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-atanl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-atanl check_PROGRAMS += test-atanl test_atanl_LDADD = $(LDADD) @ATANL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atexit��������������������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atexit() function: register a function to be called at program termination. Status: obsolete Notice: This module is obsolete. Files: lib/atexit.c m4/atexit.m4 Depends-on: configure.ac: gl_FUNC_ATEXIT if test $ac_cv_func_atexit = no; then AC_LIBOBJ([atexit]) gl_PREREQ_ATEXIT fi Makefile.am: Include: <stdlib.h> License: public domain Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atexit-tests��������������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-atexit.sh tests/test-atexit.c Depends-on: test-framework-sh unistd configure.ac: Makefile.am: TESTS += test-atexit.sh check_PROGRAMS += test-atexit �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/atoll���������������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0017013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atoll() function: convert decimal string to 'long long'. Files: lib/atoll.c m4/atoll.m4 Depends-on: strtoll [test $HAVE_ATOLL = 0] configure.ac: gl_FUNC_ATOLL if test $HAVE_ATOLL = 0; then AC_LIBOBJ([atoll]) gl_PREREQ_ATOLL fi gl_STDLIB_MODULE_INDICATOR([atoll]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/attribute�����������������������������������������������������������0000664�0000000�0000000�00000000233�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: C/C++ attributes Files: lib/attribute.h Depends-on: configure.ac: Makefile.am: Include: "attribute.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/autobuild�����������������������������������������������������������0000664�0000000�0000000�00000000365�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros to print information about the build, useful for the autobuild parser. Files: m4/autobuild.m4 Depends-on: configure.ac-early: AB_INIT configure.ac: Makefile.am: Include: License: unlimited Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltree-list��������������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0020304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a binary tree. Files: lib/gl_avltree_list.h lib/gl_avltree_list.c lib/gl_anyavltree_list1.h lib/gl_anyavltree_list2.h lib/gl_anytree_list1.h lib/gl_anytree_list2.h Depends-on: list configure.ac: Makefile.am: lib_SOURCES += gl_avltree_list.h gl_avltree_list.c gl_anyavltree_list1.h gl_anyavltree_list2.h gl_anytree_list1.h gl_anytree_list2.h Include: "gl_avltree_list.h" License: LGPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/avltree-list-tests��������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0021445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltree_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-avltree_list check_PROGRAMS += test-avltree_list ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltree-omap��������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered map data type implemented by a binary tree. Files: lib/gl_avltree_omap.h lib/gl_avltree_omap.c lib/gl_avltree_ordered.h lib/gl_anytree_omap.h Depends-on: omap configure.ac: Makefile.am: lib_SOURCES += gl_avltree_omap.h gl_avltree_omap.c gl_avltree_ordered.h gl_anytree_omap.h Include: "gl_avltree_omap.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltree-omap-tests��������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltree_omap.c tests/macros.h Depends-on: array-omap configure.ac: Makefile.am: TESTS += test-avltree_omap check_PROGRAMS += test-avltree_omap ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltree-oset��������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered set data type implemented by a binary tree. Files: lib/gl_avltree_oset.h lib/gl_avltree_oset.c lib/gl_avltree_ordered.h lib/gl_anytree_oset.h Depends-on: oset configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += gl_avltree_oset.h gl_avltree_oset.c gl_avltree_ordered.h gl_anytree_oset.h Include: "gl_avltree_oset.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltree-oset-tests��������������������������������������������������0000664�0000000�0000000�00000000275�14110572173�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltree_oset.c tests/test-oset-update.h tests/macros.h Depends-on: array-oset configure.ac: Makefile.am: TESTS += test-avltree_oset check_PROGRAMS += test-avltree_oset �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltreehash-list����������������������������������������������������0000664�0000000�0000000�00000001353�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a hash table with a binary tree. Files: lib/gl_avltreehash_list.h lib/gl_avltreehash_list.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h lib/gl_anyavltree_list1.h lib/gl_anyavltree_list2.h lib/gl_anytree_list1.h lib/gl_anytree_list2.h lib/gl_anytreehash_list1.h lib/gl_anytreehash_list2.h Depends-on: builtin-expect list avltree-oset stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_avltreehash_list.h gl_avltreehash_list.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h gl_anyavltree_list1.h gl_anyavltree_list2.h gl_anytree_list1.h gl_anytree_list2.h gl_anytreehash_list1.h gl_anytreehash_list2.h Include: "gl_avltreehash_list.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/avltreehash-list-tests����������������������������������������������0000664�0000000�0000000�00000000261�14110572173�0022310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltreehash_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-avltreehash_list check_PROGRAMS += test-avltreehash_list �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/backup-rename�������������������������������������������������������0000664�0000000�0000000�00000000746�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Rename a file to a backup name. Files: lib/backup-internal.h lib/backup-rename.c lib/backupfile.c lib/backupfile.h m4/backupfile.m4 Depends-on: argmatch attribute basename-lgpl c99 closedir d-ino fcntl-h idx intprops memcmp opendirat readdir renameatu stdbool stdint xalloc-oversized configure.ac: gl_BACKUPFILE Makefile.am: lib_SOURCES += backupfile.c backup-rename.c Include: "backupfile.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������gnulib-20210822~d383792/modules/backupfile����������������������������������������������������������0000664�0000000�0000000�00000000755�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the name of a backup file. Files: lib/backup-internal.h lib/backup-find.c lib/backupfile.c lib/backupfile.h m4/backupfile.m4 Depends-on: argmatch attribute basename-lgpl c99 closedir d-ino fcntl-h idx intprops memcmp opendirat readdir realloc-gnu renameatu stdbool stdint xalloc-die configure.ac: gl_BACKUPFILE Makefile.am: lib_SOURCES += backupfile.c backup-find.c Include: "backupfile.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������gnulib-20210822~d383792/modules/base32��������������������������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Encode binary data using printable characters (base32). Files: lib/base32.h lib/base32.c m4/base32.m4 Depends-on: stdbool memchr configure.ac: gl_FUNC_BASE32 Makefile.am: lib_SOURCES += base32.h base32.c Include: "base32.h" License: LGPLv2+ Maintainer: TODO ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/base32-tests��������������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0020110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-base32.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-base32 check_PROGRAMS += test-base32 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/base64��������������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0016755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Encode binary data using printable characters (base64). Files: lib/base64.h lib/base64.c m4/base64.m4 Depends-on: stdbool memchr configure.ac: gl_FUNC_BASE64 Makefile.am: lib_SOURCES += base64.h base64.c Include: "base64.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/base64-tests��������������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-base64.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-base64 check_PROGRAMS += test-base64 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/basename-lgpl�������������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Extract the last component (base name) of a file name. Files: lib/basename-lgpl.h lib/basename-lgpl.c Depends-on: double-slash-root filename stdbool configure.ac: Makefile.am: lib_SOURCES += basename-lgpl.c Include: "basename-lgpl.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bcopy���������������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Old BSD bcopy() function: copy memory area. Files: lib/bcopy.c Depends-on: strings configure.ac: AC_REPLACE_FUNCS(bcopy) Makefile.am: Include: <strings.h> License: GPL Maintainer: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/binary-io�����������������������������������������������������������0000664�0000000�0000000�00000000350�14110572173�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Binary mode I/O. Files: lib/binary-io.h lib/binary-io.c Depends-on: extern-inline fcntl-h configure.ac: Makefile.am: lib_SOURCES += binary-io.h binary-io.c Include: "binary-io.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/binary-io-tests�����������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-binary-io.sh tests/test-binary-io.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-binary-io.sh check_PROGRAMS += test-binary-io ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bind����������������������������������������������������������������0000664�0000000�0000000�00000001004�14110572173�0016601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: bind() function: bind a server socket to a port. Files: lib/bind.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([bind]) fi gl_SYS_SOCKET_MODULE_INDICATOR([bind]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bind-tests����������������������������������������������������������0000664�0000000�0000000�00000000350�14110572173�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-bind.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets inet_pton configure.ac: Makefile.am: TESTS += test-bind check_PROGRAMS += test-bind test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bison���������������������������������������������������������������0000664�0000000�0000000�00000000343�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Building bison-generated parsers. Files: m4/bison.m4 Depends-on: configure.ac: # See the comments in bison.m4. Makefile.am: # See the comments in bison.m4. Include: License: GPLed build tool Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bison-i18n����������������������������������������������������������0000664�0000000�0000000�00000000336�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Support for internationalization of bison-generated parsers. Files: m4/bison-i18n.m4 Depends-on: gettext configure.ac: BISON_I18N Makefile.am: Include: License: GPLed build tool Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bitrotate�����������������������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Rotate bits in unsigned 8, 16, and 32 bit integers. Files: lib/bitrotate.h lib/bitrotate.c Depends-on: extern-inline stdint configure.ac: Makefile.am: lib_SOURCES += bitrotate.h bitrotate.c Include: "bitrotate.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bitrotate-tests�����������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-bitrotate.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-bitrotate check_PROGRAMS += test-bitrotate ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bitset��������������������������������������������������������������0000664�0000000�0000000�00000001206�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A common interface to several implementations of bitsets. Files: lib/bitset.c lib/bitset.h lib/bitset/array.c lib/bitset/array.h lib/bitset/base.h lib/bitset/list.c lib/bitset/list.h lib/bitset/stats.c lib/bitset/stats.h lib/bitset/table.c lib/bitset/table.h lib/bitset/vector.c lib/bitset/vector.h Depends-on: attribute c99 ffsl fopen-gnu gettext-h integer_length_l obstack xalloc configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += bitset.c bitset/array.c bitset/stats.c \ bitset/table.c bitset/list.c bitset/vector.c Include: "bitset.h" License: GPLv3+ Maintainer: Akim Demaille <akim.demaille@gmail.com> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bitset-tests��������������������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0020324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-bitset.c tests/macros.h Depends-on: c99 configure.ac: Makefile.am: TESTS += test-bitset check_PROGRAMS += test-bitset test_bitset_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/bitsetv�������������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Manipulating several bitsets. Files: lib/bitsetv.c lib/bitsetv.h Depends-on: bitset c99 xalloc Makefile.am: lib_SOURCES += bitsetv.c Include: "bitsetv.h" License: GPLv3+ Maintainer: Akim Demaille <akim.demaille@gmail.com> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/btoc32��������������������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0016770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: btoc32() function: convert unibyte character to 32-bit wide character. Files: lib/btoc32.c Depends-on: uchar mbrtoc32 btowc configure.ac: gl_UCHAR_MODULE_INDICATOR([btoc32]) Makefile.am: lib_SOURCES += btoc32.c Include: <uchar.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/btoc32-tests��������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0020127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-btoc32-1.sh tests/test-btoc32-2.sh tests/test-btoc32.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-btoc32-1.sh test-btoc32-2.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btoc32 test_btoc32_LDADD = $(LDADD) $(LIB_SETLOCALE) �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/btowc���������������������������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0017014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: btowc() function: convert unibyte character to wide character. Files: lib/btowc.c m4/btowc.m4 m4/locale-fr.m4 Depends-on: wchar mbtowc [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1] configure.ac: gl_FUNC_BTOWC if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then AC_LIBOBJ([btowc]) gl_PREREQ_BTOWC fi gl_WCHAR_MODULE_INDICATOR([btowc]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/btowc-tests���������������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0020154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-btowc1.sh tests/test-btowc2.sh tests/test-btowc.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-btowc1.sh test-btowc2.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btowc test_btowc_LDADD = $(LDADD) $(LIB_SETLOCALE) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/builtin-expect������������������������������������������������������0000664�0000000�0000000�00000000261�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check for __builtin_expect. Files: m4/builtin-expect.m4 Depends-on: configure.ac: gl___BUILTIN_EXPECT Makefile.am: Include: License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/byteswap������������������������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Swap bytes of 16, 32 and 64 bit values. Files: lib/byteswap.in.h m4/byteswap.m4 Depends-on: configure.ac: gl_BYTESWAP Makefile.am: BUILT_SOURCES += $(BYTESWAP_H) # We need the following in order to create <byteswap.h> when the system # doesn't have one. if GL_GENERATE_BYTESWAP_H byteswap.h: byteswap.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/byteswap.in.h; \ } > $@-t && \ mv -f $@-t $@ else byteswap.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += byteswap.h byteswap.h-t Include: <byteswap.h> License: LGPLv2+ Maintainer: Oskar Liljeblad �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/byteswap-tests������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-byteswap.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-byteswap check_PROGRAMS += test-byteswap �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-ctype�������������������������������������������������������������0000664�0000000�0000000�00000000355�14110572173�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character handling in C locale. Files: lib/c-ctype.h lib/c-ctype.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += c-ctype.h c-ctype.c Include: "c-ctype.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-ctype-tests�������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-ctype.c tests/macros.h Depends-on: ctype isblank configure.ac: Makefile.am: TESTS += test-c-ctype check_PROGRAMS += test-c-ctype test_c_ctype_LDADD = $(LDADD) $(LIB_SETLOCALE) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-dtoastr�����������������������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert double to accurate string in C locale. Files: lib/ftoastr.h lib/ftoastr.c lib/c-dtoastr.c Depends-on: extensions intprops c-snprintf c-strtod configure.ac: Makefile.am: lib_SOURCES += c-dtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Marc Nieper-Wisskirchen ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-dtoastr-tests�����������������������������������������������������0000664�0000000�0000000�00000000471�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-dtoastr.c tests/test-c-dtoastr.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-dtoastr.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-dtoastr test_c_dtoastr_LDADD = $(LDADD) $(LIB_SETLOCALE) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-ldtoastr����������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert long double to accurate string in C locale. Files: lib/ftoastr.h lib/ftoastr.c lib/c-ldtoastr.c Depends-on: extensions intprops c-snprintf c-strtold configure.ac: Makefile.am: lib_SOURCES += c-ldtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Marc Nieper-Wisskirchen ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-ldtoastr-tests����������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-ldtoastr.c tests/test-c-ldtoastr.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-ldtoastr.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-ldtoastr test_c_ldtoastr_LDADD = $(LDADD) $(LIB_SETLOCALE) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-snprintf����������������������������������������������������������0000664�0000000�0000000�00000000464�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c_snprintf(): print formatted output to a fixed length string in C locale Files: lib/c-snprintf.h lib/c-snprintf.c Depends-on: stdio c-vasnprintf configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += c-snprintf.c Include: "c-snprintf.h" License: GPL Maintainer: Ben Pfaff ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-snprintf-tests����������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0021124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-snprintf.c tests/test-c-snprintf.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-snprintf.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-snprintf test_c_snprintf_LDADD = $(LDADD) $(LIB_SETLOCALE) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-stack�������������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0017230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Stack overflow handling, causing program exit. Files: lib/c-stack.h lib/c-stack.c m4/c-stack.m4 Depends-on: c99 errno exitfail getprogname gettext-h idx ignore-value inttypes mempcpy raise sigsegv stddef unistd configure.ac: gl_C_STACK Makefile.am: lib_SOURCES += c-stack.h c-stack.c Include: "c-stack.h" Link: $(LTLIBCSTACK) when linking with libtool, $(LIBCSTACK) otherwise $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: GPL Maintainer: Paul Eggert �����������������gnulib-20210822~d383792/modules/c-stack-tests�������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-stack.c tests/test-c-stack.sh tests/test-c-stack2.sh tests/macros.h Depends-on: exitfail configure.ac: Makefile.am: TESTS += test-c-stack.sh test-c-stack2.sh TESTS_ENVIRONMENT += LIBSIGSEGV='@LIBSIGSEGV@' check_PROGRAMS += test-c-stack test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) @LIBINTL@ MOSTLYCLEANFILES += t-c-stack.tmp t-c-stack2.tmp �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strcase�����������������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-insensitive string comparison functions in C locale. Files: lib/c-strcase.h lib/c-strcasecmp.c lib/c-strncasecmp.c Depends-on: c-ctype configure.ac: Makefile.am: lib_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c Include: "c-strcase.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strcase-tests�����������������������������������������������������0000664�0000000�0000000�00000000766�14110572173�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-strcase.sh tests/test-c-strcasecmp.c tests/test-c-strncasecmp.c tests/macros.h m4/locale-fr.m4 m4/locale-tr.m4 m4/codeset.m4 Depends-on: c-ctype setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_TR_UTF8 Makefile.am: 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) ����������gnulib-20210822~d383792/modules/c-strcaseeq���������������������������������������������������������0000664�0000000�0000000�00000000332�14110572173�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Optimized case-insensitive string comparison in C locale. Files: lib/c-strcaseeq.h Depends-on: c-strcase c-ctype configure.ac: Makefile.am: Include: "c-strcaseeq.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strcasestr��������������������������������������������������������0000664�0000000�0000000�00000000510�14110572173�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Efficient case-insensitive searching in a string in C locale. Files: lib/c-strcasestr.h lib/c-strcasestr.c lib/str-two-way.h Depends-on: c-ctype c-strcase stdbool memchr memcmp configure.ac: Makefile.am: lib_SOURCES += c-strcasestr.h c-strcasestr.c Include: "c-strcasestr.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strcasestr-tests��������������������������������������������������0000664�0000000�0000000�00000000232�14110572173�0021444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-strcasestr.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-c-strcasestr check_PROGRAMS += test-c-strcasestr ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strstr������������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0017452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for a substring in a string in C locale. Files: lib/c-strstr.h lib/c-strstr.c Depends-on: strstr configure.ac: Makefile.am: lib_SOURCES += c-strstr.h c-strstr.c Include: "c-strstr.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strstr-tests������������������������������������������������������0000664�0000000�0000000�00000000216�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-strstr.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-c-strstr check_PROGRAMS += test-c-strstr ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strtod������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to double in C locale. Files: lib/c-strtod.c lib/c-strtod.h m4/c-strtod.m4 m4/intl-thread-locale.m4 Depends-on: c99 extensions locale strdup-posix strtod configure.ac: gl_C_STRTOD Makefile.am: lib_SOURCES += c-strtod.c Include: "c-strtod.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-strtold�����������������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0017612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to long double in C locale. Files: lib/c-strtod.h lib/c-strtod.c lib/c-strtold.c m4/c-strtod.m4 m4/intl-thread-locale.m4 Depends-on: c99 extensions locale strdup-posix strtold configure.ac: gl_C_STRTOLD Makefile.am: lib_SOURCES += c-strtold.c Include: "c-strtod.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-vasnprintf��������������������������������������������������������0000664�0000000�0000000�00000001330�14110572173�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to strings in C locale. Files: lib/c-vasnprintf.h lib/c-vasnprintf.c lib/float+.h lib/printf-args.h lib/printf-args.c lib/printf-parse.h lib/printf-parse.c lib/vasnprintf.h lib/vasnprintf.c m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/exponentd.m4 Depends-on: attribute stdio isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw free-posix nocrash printf-safe alloca-opt xsize errno memchr multiarch verify configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_PREREQ_VASNPRINTF_WITH_EXTRAS Makefile.am: lib_SOURCES += c-vasnprintf.c Include: "c-vasnprintf.h" License: GPL Maintainer: Ben Pfaff ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-vasprintf���������������������������������������������������������0000664�0000000�0000000�00000000427�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: asprintf() and vasprintf() in C locale Files: lib/c-vasprintf.h lib/c-asprintf.c lib/c-vasprintf.c Depends-on: stdio c-vasnprintf configure.ac: Makefile.am: lib_SOURCES += c-asprintf.c c-vasprintf.c Include: "c-vasprintf.h" License: GPL Maintainer: Ben Pfaff �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-vasprintf-tests���������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0021264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-vasprintf.c tests/test-c-vasprintf.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-vasprintf.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-vasprintf test_c_vasprintf_LDADD = $(LDADD) $(LIB_SETLOCALE) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-vsnprintf���������������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c_vsnprintf(): print formatted output from an stdarg argument listto a fixed length string in C locale Files: lib/c-vsnprintf.h lib/c-vsnprintf.c Depends-on: stdio c-vasnprintf configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += c-vsnprintf.c Include: "c-vsnprintf.h" License: GPL Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-vsnprintf-tests���������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0021301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-vsnprintf.c tests/test-c-vsnprintf.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-vsnprintf.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-vsnprintf test_c_vsnprintf_LDADD = $(LDADD) $(LIB_SETLOCALE) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-xvasprintf��������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c_asprintf and c_vasprintf with out-of-memory checking. Files: lib/c-xvasprintf.h lib/c-xasprintf.c lib/c-xvasprintf.c Depends-on: stdio c-vasprintf xalloc-die configure.ac: Makefile.am: lib_SOURCES += c-xasprintf.c c-xvasprintf.c Include: "c-xvasprintf.h" License: GPL Maintainer: Ben Pfaff ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c-xvasprintf-tests��������������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0021455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-xvasprintf.c tests/test-c-xvasprintf.sh m4/locale-fr.m4 tests/macros.h Depends-on: setlocale snprintf xalloc configure.ac: gt_LOCALE_FR Makefile.am: TESTS += test-c-xvasprintf.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' check_PROGRAMS += test-c-xvasprintf test_c_xvasprintf_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isalnum����������������������������������������������������������0000664�0000000�0000000�00000001142�14110572173�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isalnum() function: test 32-bit wide character for being alphanumeric. Files: lib/c32isalnum.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-alnum verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isalnum]) Makefile.am: lib_SOURCES += c32isalnum.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isalnum-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isalnum.sh tests/test-c32isalnum.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isalpha����������������������������������������������������������0000664�0000000�0000000�00000001140�14110572173�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isalpha() function: test 32-bit wide character for being alphabetic. Files: lib/c32isalpha.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-alpha verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isalpha]) Makefile.am: lib_SOURCES += c32isalpha.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isalpha-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isalpha.sh tests/test-c32isalpha.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isblank����������������������������������������������������������0000664�0000000�0000000�00000001144�14110572173�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isblank() function: test 32-bit wide character for being blank. Files: lib/c32isblank.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h iswblank localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-blank verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isblank]) Makefile.am: lib_SOURCES += c32isblank.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isblank-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isblank.sh tests/test-c32isblank.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32iscntrl����������������������������������������������������������0000664�0000000�0000000�00000001151�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32iscntrl() function: test 32-bit wide character for being a control character. Files: lib/c32iscntrl.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-cntrl verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32iscntrl]) Makefile.am: lib_SOURCES += c32iscntrl.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32iscntrl-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32iscntrl.sh tests/test-c32iscntrl.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isdigit����������������������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0017640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isdigit() function: test 32-bit wide character for being a digit. Files: lib/c32isdigit.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h iswdigit localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-digit verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isdigit]) Makefile.am: lib_SOURCES += c32isdigit.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isdigit-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isdigit.sh tests/test-c32isdigit.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isgraph����������������������������������������������������������0000664�0000000�0000000�00000001135�14110572173�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isgraph() function: test 32-bit wide character for being graphic. Files: lib/c32isgraph.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-graph verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isgraph]) Makefile.am: lib_SOURCES += c32isgraph.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isgraph-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isgraph.sh tests/test-c32isgraph.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32islower����������������������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32islower() function: test 32-bit wide character for being lowercase. Files: lib/c32islower.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-lower verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32islower]) Makefile.am: lib_SOURCES += c32islower.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32islower-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32islower.sh tests/test-c32islower.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isprint����������������������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isprint() function: test 32-bit wide character for being printable. Files: lib/c32isprint.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-print verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isprint]) Makefile.am: lib_SOURCES += c32isprint.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isprint-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isprint.sh tests/test-c32isprint.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32ispunct����������������������������������������������������������0000664�0000000�0000000�00000001167�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32ispunct() function: test 32-bit wide character for being a punctuation or symbol character. Files: lib/c32ispunct.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-punct verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32ispunct]) Makefile.am: lib_SOURCES += c32ispunct.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32ispunct-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32ispunct.sh tests/test-c32ispunct.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isspace����������������������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isspace() function: test 32-bit wide character for being white-space. Files: lib/c32isspace.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-space verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isspace]) Makefile.am: lib_SOURCES += c32isspace.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isspace-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0020772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isspace.sh tests/test-c32isspace.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isupper����������������������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isupper() function: test 32-bit wide character for being uppercase. Files: lib/c32isupper.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-upper verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isupper]) Makefile.am: lib_SOURCES += c32isupper.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isupper-tests����������������������������������������������������0000664�0000000�0000000�00000001064�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isupper.sh tests/test-c32isupper.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isxdigit���������������������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32isxdigit() function: test 32-bit wide character for being a hexadecimal digit. Files: lib/c32isxdigit.c lib/c32is-impl.h m4/mbrtoc32.m4 Depends-on: uchar wchar wctype-h iswxdigit localcharset [test $REPLACE_MBSTATE_T = 1] streq [test $REPLACE_MBSTATE_T = 1] unictype/ctype-xdigit verify configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isxdigit]) Makefile.am: lib_SOURCES += c32isxdigit.c Include: <uchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32isxdigit-tests���������������������������������������������������0000664�0000000�0000000�00000001071�14110572173�0021165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32isxdigit.sh tests/test-c32isxdigit.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32rtomb������������������������������������������������������������0000664�0000000�0000000�00000001466�14110572173�0017334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32rtomb() function: convert 32-bit wide character to multibyte character. Files: lib/c32rtomb.c m4/c32rtomb.m4 m4/mbrtoc32.m4 Depends-on: uchar attribute [test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1] wchar [test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1] wcrtomb [test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1] localcharset [{ test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1; } && test $SMALL_WCHAR_T = 1] streq [{ test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1; } && test $SMALL_WCHAR_T = 1] configure.ac: gl_FUNC_C32RTOMB if test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1; then AC_LIBOBJ([c32rtomb]) fi gl_UCHAR_MODULE_INDICATOR([c32rtomb]) Makefile.am: Include: <uchar.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32rtomb-tests������������������������������������������������������0000664�0000000�0000000�00000001707�14110572173�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32rtomb.sh tests/test-c32rtomb.c tests/test-c32rtomb-w32-1.sh tests/test-c32rtomb-w32-2.sh tests/test-c32rtomb-w32-3.sh tests/test-c32rtomb-w32-4.sh tests/test-c32rtomb-w32-5.sh tests/test-c32rtomb-w32-6.sh tests/test-c32rtomb-w32-7.sh tests/test-c32rtomb-w32.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: btoc32 mbrtoc32 setlocale localcharset configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += \ test-c32rtomb.sh \ test-c32rtomb-w32-1.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 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) $(LIB_SETLOCALE) ���������������������������������������������������������gnulib-20210822~d383792/modules/c32snrtombs���������������������������������������������������������0000664�0000000�0000000�00000000674�14110572173�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32snrtombs() function: convert 32-bit wide string to string. Files: lib/c32snrtombs.c lib/wcsnrtombs-impl.h lib/c32srtombs-state.c Depends-on: uchar wchar verify c32rtomb wcsnrtombs [test $SMALL_WCHAR_T = 0] configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_LIBOBJ([c32srtombs-state]) gl_UCHAR_MODULE_INDICATOR([c32snrtombs]) Makefile.am: lib_SOURCES += c32snrtombs.c Include: <uchar.h> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������gnulib-20210822~d383792/modules/c32snrtombs-tests���������������������������������������������������0000664�0000000�0000000�00000001265�14110572173�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32snrtombs-1.sh tests/test-c32snrtombs-2.sh tests/test-c32snrtombs-3.sh tests/test-c32snrtombs-4.sh tests/test-c32snrtombs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale mbstoc32s configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-c32snrtombs-1.sh test-c32snrtombs-2.sh test-c32snrtombs-3.sh test-c32snrtombs-4.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-c32snrtombs test_c32snrtombs_LDADD = $(LDADD) $(LIB_SETLOCALE) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32srtombs����������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0017704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32srtombs() function: convert 32-bit wide string to string. Files: lib/c32srtombs.c lib/wcsrtombs-impl.h lib/c32srtombs-state.c Depends-on: uchar wchar verify c32rtomb wcsrtombs [test $SMALL_WCHAR_T = 0] configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_LIBOBJ([c32srtombs-state]) gl_UCHAR_MODULE_INDICATOR([c32srtombs]) Makefile.am: lib_SOURCES += c32srtombs.c Include: <uchar.h> License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32srtombs-tests����������������������������������������������������0000664�0000000�0000000�00000001252�14110572173�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32srtombs-1.sh tests/test-c32srtombs-2.sh tests/test-c32srtombs-3.sh tests/test-c32srtombs-4.sh tests/test-c32srtombs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale mbstoc32s configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-c32srtombs-1.sh test-c32srtombs-2.sh test-c32srtombs-3.sh test-c32srtombs-4.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-c32srtombs test_c32srtombs_LDADD = $(LDADD) $(LIB_SETLOCALE) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32stombs�����������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32stombs() function: convert 32-bit wide string to string. Files: lib/c32stombs.c Depends-on: uchar wchar c32srtombs configure.ac: gl_UCHAR_MODULE_INDICATOR([c32stombs]) Makefile.am: lib_SOURCES += c32stombs.c Include: <uchar.h> License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32stombs-tests�����������������������������������������������������0000664�0000000�0000000�00000001237�14110572173�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c32stombs-1.sh tests/test-c32stombs-2.sh tests/test-c32stombs-3.sh tests/test-c32stombs-4.sh tests/test-c32stombs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale mbstoc32s configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-c32stombs-1.sh test-c32stombs-2.sh test-c32stombs-3.sh test-c32stombs-4.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-c32stombs test_c32stombs_LDADD = $(LDADD) $(LIB_SETLOCALE) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c32tob��������������������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0016771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: c32tob() function: convert 32-bit wide character to unibyte character. Files: lib/c32tob.c m4/mbrtoc32.m4 Depends-on: uchar c32rtomb wctob configure.ac: AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32tob]) Makefile.am: lib_SOURCES += c32tob.c Include: <uchar.h> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/c99�����������������������������������������������������������������0000664�0000000�0000000�00000000232�14110572173�0016273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable at least C99 if available. Files: Depends-on: std-gnu11 configure.ac: Makefile.am: Include: License: unlimited Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/calloc-gnu����������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: calloc() function that is glibc compatible. Files: lib/calloc.c m4/calloc.m4 Depends-on: calloc-posix configure.ac: gl_FUNC_CALLOC_GNU if test $REPLACE_CALLOC = 1; then AC_LIBOBJ([calloc]) fi Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/calloc-gnu-tests����������������������������������������������������0000664�0000000�0000000�00000000232�14110572173�0021053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-calloc-gnu.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-calloc-gnu check_PROGRAMS += test-calloc-gnu ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/calloc-posix��������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: calloc() function: allocate memory with indefinite extent. Files: lib/calloc.c m4/calloc.m4 m4/malloc.m4 Depends-on: stdlib xalloc-oversized [test $REPLACE_REALLOC = 1] configure.ac: gl_FUNC_CALLOC_POSIX if test $REPLACE_CALLOC = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-posix]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/canon-host����������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Canonicalize a host name: return a name other hosts can understand, i.e. usually the host name including FQDN. Files: lib/canon-host.c lib/canon-host.h m4/canon-host.m4 Depends-on: getaddrinfo strdup configure.ac: gl_PREREQ_CANON_HOST Makefile.am: lib_SOURCES += canon-host.c Include: "canon-host.h" License: LGPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/canonicalize��������������������������������������������������������0000664�0000000�0000000�00000001223�14110572173�0020327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the canonical absolute name of a given file. Files: lib/canonicalize.h lib/canonicalize.c m4/canonicalize.m4 m4/lstat.m4 Depends-on: attribute double-slash-root errno extensions fcntl-h file-set filename getcwd hash-triple-simple idx intprops memmove mempcpy nocrash rawmemchr readlink scratch_buffer stat stdbool sys_stat unistd xalloc-die configure.ac: gl_FUNC_CANONICALIZE_FILENAME_MODE gl_MODULE_INDICATOR([canonicalize]) gl_MODULE_INDICATOR_FOR_TESTS([canonicalize]) gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name]) Makefile.am: lib_SOURCES += canonicalize.c Include: "canonicalize.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/canonicalize-lgpl���������������������������������������������������0000664�0000000�0000000�00000004554�14110572173�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: realpath, canonicalize_file_name: Provide canonical absolute file name Files: lib/canonicalize-lgpl.c m4/canonicalize.m4 m4/double-slash-root.m4 m4/lstat.m4 Depends-on: extensions stdlib nocrash double-slash-root [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] eloop-threshold [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] errno [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] fcntl-h [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] filename [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] idx [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] intprops [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] libc-config [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] memmove [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] mempcpy [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] pathmax [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] rawmemchr [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] readlink [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] scratch_buffer [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] stat [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] stdbool [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] sys_stat [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] unistd [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] configure.ac: gl_CANONICALIZE_LGPL if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then AC_LIBOBJ([canonicalize-lgpl]) fi gl_MODULE_INDICATOR([canonicalize-lgpl]) gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name]) gl_STDLIB_MODULE_INDICATOR([realpath]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/canonicalize-lgpl-tests���������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-canonicalize-lgpl.c tests/signature.h tests/null-ptr.h tests/macros.h Depends-on: ignore-value same-inode symlink configure.ac: Makefile.am: TESTS += test-canonicalize-lgpl check_PROGRAMS += test-canonicalize-lgpl test_canonicalize_lgpl_LDADD = $(LDADD) $(LIBINTL) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/canonicalize-tests��������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0021477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-canonicalize.c tests/null-ptr.h tests/macros.h Depends-on: ignore-value same-inode symlink configure.ac: Makefile.am: TESTS += test-canonicalize check_PROGRAMS += test-canonicalize test_canonicalize_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/careadlinkat��������������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read symbolic links into a buffer without size limitation, relative to fd. Files: lib/careadlinkat.c lib/careadlinkat.h Depends-on: allocator idx minmax ssize_t unistd configure.ac: AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_FUNCS_ONCE([readlinkat]) Makefile.am: lib_SOURCES += careadlinkat.c Include: "careadlinkat.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/carray-list���������������������������������������������������������0000664�0000000�0000000�00000000447�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a circular array. Files: lib/gl_carray_list.h lib/gl_carray_list.c Depends-on: list stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_carray_list.h gl_carray_list.c Include: "gl_carray_list.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/carray-list-tests���������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-carray_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-carray_list check_PROGRAMS += test-carray_list ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrt����������������������������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0016624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrt() function: cube root. Files: lib/cbrt.c m4/cbrt.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $HAVE_CBRT = 0] fabs [test $HAVE_CBRT = 0] frexp [test $HAVE_CBRT = 0] ldexp [test $HAVE_CBRT = 0] configure.ac: gl_FUNC_CBRT if test $HAVE_CBRT = 0; then AC_LIBOBJ([cbrt]) fi gl_MATH_MODULE_INDICATOR([cbrt]) Makefile.am: Include: <math.h> Link: $(CBRT_LIBM) License: LGPL Maintainer: all �����������������������������������������������gnulib-20210822~d383792/modules/cbrt-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrt() function according to ISO C 99 with IEC 60559. Files: Depends-on: cbrt fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(CBRT_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrt-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrt-ieee.c tests/test-cbrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-cbrt-ieee check_PROGRAMS += test-cbrt-ieee test_cbrt_ieee_LDADD = $(LDADD) @CBRT_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrt-tests����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrt.c tests/test-cbrt.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-cbrt check_PROGRAMS += test-cbrt test_cbrt_SOURCES = test-cbrt.c randomd.c test_cbrt_LDADD = $(LDADD) @CBRT_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtf���������������������������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrtf() function: cube root. Files: lib/cbrtf.c m4/cbrtf.m4 m4/cbrt.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1] fabsf [test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1] frexpf [test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1] ldexpf [test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1] configure.ac: gl_FUNC_CBRTF if test $HAVE_CBRTF = 0 || test $REPLACE_CBRTF = 1; then AC_LIBOBJ([cbrtf]) fi gl_MATH_MODULE_INDICATOR([cbrtf]) Makefile.am: Include: <math.h> Link: $(CBRTF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrtf() function according to ISO C 99 with IEC 60559. Files: Depends-on: cbrtf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(CBRTF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrtf-ieee.c tests/test-cbrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-cbrtf-ieee check_PROGRAMS += test-cbrtf-ieee test_cbrtf_ieee_LDADD = $(LDADD) @CBRTF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtf-tests���������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrtf.c tests/test-cbrt.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-cbrtf check_PROGRAMS += test-cbrtf test_cbrtf_SOURCES = test-cbrtf.c randomf.c test_cbrtf_LDADD = $(LDADD) @CBRTF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtl���������������������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrtl() function: cube root. Files: lib/cbrtl.c m4/cbrtl.m4 m4/cbrt.m4 m4/mathfunc.m4 Depends-on: math extensions cbrt [{ test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isfinite [{ test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_CBRTL if test $HAVE_CBRTL = 0 || test $REPLACE_CBRTL = 1; then AC_LIBOBJ([cbrtl]) fi gl_MATH_MODULE_INDICATOR([cbrtl]) Makefile.am: Include: <math.h> Link: $(CBRTL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrtl() function according to ISO C 99 with IEC 60559. Files: m4/cbrtl-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: cbrtl fpieee configure.ac: gl_FUNC_CBRTL_IEEE Makefile.am: Include: <math.h> Link: $(CBRTL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrtl-ieee.c tests/test-cbrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-cbrtl-ieee check_PROGRAMS += test-cbrtl-ieee test_cbrtl_ieee_LDADD = $(LDADD) @CBRTL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cbrtl-tests���������������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrtl.c tests/test-cbrt.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: float configure.ac: Makefile.am: TESTS += test-cbrtl check_PROGRAMS += test-cbrtl test_cbrtl_SOURCES = test-cbrtl.c randoml.c test_cbrtl_LDADD = $(LDADD) @CBRTL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceil����������������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0016606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceil() function: round towards positive infinity. Files: lib/ceil.c m4/ceil.m4 Depends-on: math float [test $REPLACE_CEIL = 1] configure.ac: gl_FUNC_CEIL if test $REPLACE_CEIL = 1; then AC_LIBOBJ([ceil]) fi gl_MATH_MODULE_INDICATOR([ceil]) Makefile.am: Include: <math.h> Link: $(CEIL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceil-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceil() function according to ISO C 99 with IEC 60559. Files: m4/ceil-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: ceil configure.ac: gl_FUNC_CEIL_IEEE Makefile.am: Include: <math.h> Link: $(CEIL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceil-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000410�14110572173�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceil-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ceil-ieee check_PROGRAMS += test-ceil-ieee test_ceil_ieee_LDADD = $(LDADD) @CEIL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceil-tests����������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0017747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceil1.c tests/test-ceil2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnand-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-ceil1 test-ceil2 check_PROGRAMS += test-ceil1 test-ceil2 test_ceil1_LDADD = $(LDADD) @CEIL_LIBM@ test_ceil2_LDADD = $(LDADD) @CEIL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceilf���������������������������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceilf() function: round towards positive infinity. Files: lib/ceilf.c lib/ceil.c m4/ceilf.m4 Depends-on: math extensions float [test $HAVE_DECL_CEILF = 0 || test $REPLACE_CEILF = 1] configure.ac: gl_FUNC_CEILF if test $HAVE_DECL_CEILF = 0 || test $REPLACE_CEILF = 1; then AC_LIBOBJ([ceilf]) fi gl_MATH_MODULE_INDICATOR([ceilf]) Makefile.am: Include: <math.h> Link: $(CEILF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������gnulib-20210822~d383792/modules/ceilf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceilf() function according to ISO C 99 with IEC 60559. Files: m4/ceilf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: ceilf configure.ac: gl_FUNC_CEILF_IEEE Makefile.am: Include: <math.h> Link: $(CEILF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceilf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceilf-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ceilf-ieee check_PROGRAMS += test-ceilf-ieee test_ceilf_ieee_LDADD = $(LDADD) @CEILF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceilf-tests���������������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceilf1.c tests/test-ceilf2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnanf-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-ceilf1 test-ceilf2 check_PROGRAMS += test-ceilf1 test-ceilf2 test_ceilf1_LDADD = $(LDADD) @CEILF_LIBM@ test_ceilf2_LDADD = $(LDADD) @CEILF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceill���������������������������������������������������������������0000664�0000000�0000000�00000001145�14110572173�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceill() function: round towards positive infinity. Files: lib/ceill.c lib/ceil.c m4/ceill.m4 Depends-on: math extensions ceil [{ test $HAVE_DECL_CEILL = 0 || test $REPLACE_CEILL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_DECL_CEILL = 0 || test $REPLACE_CEILL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_CEILL if test $HAVE_DECL_CEILL = 0 || test $REPLACE_CEILL = 1; then AC_LIBOBJ([ceill]) fi gl_MATH_MODULE_INDICATOR([ceill]) Makefile.am: Include: <math.h> Link: $(CEILL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceill-ieee����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ceill() function according to ISO C 99 with IEC 60559. Files: m4/ceill-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: ceill configure.ac: gl_FUNC_CEILL_IEEE Makefile.am: Include: <math.h> Link: $(CEILL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceill-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceill-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: fpucw isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ceill-ieee check_PROGRAMS += test-ceill-ieee test_ceill_ieee_LDADD = $(LDADD) @CEILL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ceill-tests���������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceill.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: fpucw isnanl-nolibm float configure.ac: Makefile.am: TESTS += test-ceill check_PROGRAMS += test-ceill test_ceill_LDADD = $(LDADD) @CEILL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chdir���������������������������������������������������������������0000664�0000000�0000000�00000000330�14110572173�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: chdir() function: switch to another current directory Files: Depends-on: unistd configure.ac: gl_UNISTD_MODULE_INDICATOR([chdir]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chdir-long����������������������������������������������������������0000664�0000000�0000000�00000002064�14110572173�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: chdir-like function that tries not to fail due to ENAMETOOLONG Files: lib/chdir-long.h lib/chdir-long.c m4/chdir-long.m4 m4/pathmax.m4 Depends-on: unistd pathmax chdir assure [test $gl_cv_have_unlimited_file_name_length = no] atexit [test $gl_cv_have_unlimited_file_name_length = no] fchdir [test $gl_cv_have_unlimited_file_name_length = no] fcntl-h [test $gl_cv_have_unlimited_file_name_length = no] openat [test $gl_cv_have_unlimited_file_name_length = no] memchr [test $gl_cv_have_unlimited_file_name_length = no] mempcpy [test $gl_cv_have_unlimited_file_name_length = no] memrchr [test $gl_cv_have_unlimited_file_name_length = no] stdbool [test $gl_cv_have_unlimited_file_name_length = no] stdlib [test $gl_cv_have_unlimited_file_name_length = no] configure.ac: gl_FUNC_CHDIR_LONG if test $gl_cv_have_unlimited_file_name_length = no; then AC_LIBOBJ([chdir-long]) gl_PREREQ_CHDIR_LONG fi Makefile.am: Include: "chdir-long.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chdir-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-chdir.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-chdir check_PROGRAMS += test-chdir ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/check-version�������������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check version string compatibility. Files: lib/check-version.h lib/check-version.c Depends-on: strverscmp configure.ac: Makefile.am: lib_SOURCES += check-version.c Include: "check-version.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chmodat�������������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: chmodat and lchmodat functions: Change access permissions of a file at a directory. Files: lib/chmodat.c Depends-on: fchmodat configure.ac: gl_MODULE_INDICATOR([chmodat]) dnl for lib/openat.h Makefile.am: lib_SOURCES += chmodat.c Include: "openat.h" License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chown���������������������������������������������������������������0000664�0000000�0000000�00000001437�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: chown() function: change ownership of a file, following symlinks. Files: lib/chown.c lib/fchown-stub.c m4/chown.m4 Depends-on: unistd fstat [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1] open [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1] stat [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1] stdbool [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1] sys_stat [test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1] configure.ac: gl_FUNC_CHOWN if test $HAVE_CHOWN = 0 || test $REPLACE_CHOWN = 1; then AC_LIBOBJ([chown]) fi if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then AC_LIBOBJ([fchown-stub]) fi gl_UNISTD_MODULE_INDICATOR([chown]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chown-tests���������������������������������������������������������0000664�0000000�0000000�00000000514�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-chown.h tests/test-chown.c tests/signature.h tests/macros.h Depends-on: ignore-value intprops lstat mgetgroups nanosleep stat-time stdbool symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-chown check_PROGRAMS += test-chown test_chown_LDADD = $(LDADD) $(LIB_NANOSLEEP) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/chownat�������������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: chownat and lchownat functions: Change owner of a file at a directory. Files: lib/chownat.c Depends-on: fchownat configure.ac: gl_MODULE_INDICATOR([chownat]) dnl for lib/openat.h Makefile.am: lib_SOURCES += chownat.c Include: "openat.h" License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/classpath�����������������������������������������������������������0000664�0000000�0000000�00000000355�14110572173�0017657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Java CLASSPATH handling. Files: lib/classpath.h lib/classpath.c Depends-on: stdbool xsetenv xalloc configure.ac: Makefile.am: lib_SOURCES += classpath.h classpath.c Include: "classpath.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/clean-temp����������������������������������������������������������0000664�0000000�0000000�00000000760�14110572173�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Temporary directories and temporary files with automatic cleanup. Files: lib/clean-temp.h lib/clean-temp.c Depends-on: c99 stdbool clean-temp-simple list asyncsafe-spin unistd lock thread-optim error fatal-signal open pathmax tmpdir mkdtemp rmdir xalloc xalloc-die xmalloca linkedhash-list linked-list xlist gettext-h configure.ac: Makefile.am: lib_SOURCES += clean-temp.h clean-temp.c Include: "clean-temp.h" Link: $(LIB_GETRANDOM) $(LIBTHREAD) License: GPL Maintainer: all ����������������gnulib-20210822~d383792/modules/clean-temp-simple���������������������������������������������������0000664�0000000�0000000�00000000765�14110572173�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Temporary files with automatic cleanup. Files: lib/clean-temp-simple.h lib/clean-temp-private.h lib/clean-temp-simple.c Depends-on: c99 stdbool list asyncsafe-spin unistd lock thread-optim error fatal-signal rmdir linkedhash-list gettext-h configure.ac: AC_DEFINE([SIGNAL_SAFE_LIST], [1], [Define if lists must be signal-safe.]) Makefile.am: lib_SOURCES += clean-temp-simple.h clean-temp-simple.c Include: "clean-temp-simple.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: all �����������gnulib-20210822~d383792/modules/clock-time����������������������������������������������������������0000664�0000000�0000000�00000000363�14110572173�0017723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check for clock_gettime and clock_settime. Files: m4/clock_time.m4 Depends-on: extensions configure.ac: gl_CLOCK_TIME Makefile.am: Include: Link: $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cloexec�������������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set or clear the close-on-exec descriptor flag. Files: lib/cloexec.c lib/cloexec.h Depends-on: dup2 fcntl stdbool configure.ac: gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) Makefile.am: lib_SOURCES += cloexec.c Include: "cloexec.h" License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cloexec-tests�������������������������������������������������������0000664�0000000�0000000�00000000257�14110572173�0020460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cloexec.c tests/macros.h Depends-on: binary-io getdtablesize msvc-nothrow configure.ac: Makefile.am: TESTS += test-cloexec check_PROGRAMS += test-cloexec �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/close���������������������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: close() function: close a file or socket. Files: lib/close.c m4/close.m4 Depends-on: unistd fd-hook [test $REPLACE_CLOSE = 1] msvc-inval [test $REPLACE_CLOSE = 1] configure.ac: gl_FUNC_CLOSE if test $REPLACE_CLOSE = 1; then AC_LIBOBJ([close]) fi gl_UNISTD_MODULE_INDICATOR([close]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/close-stream��������������������������������������������������������0000664�0000000�0000000�00000000464�14110572173�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Close a stream, with nicer error checking than fclose's. Files: lib/close-stream.h lib/close-stream.c Depends-on: fpending stdbool configure.ac: gl_MODULE_INDICATOR([close-stream]) Makefile.am: lib_SOURCES += close-stream.c Include: "close-stream.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/close-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-close.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-close check_PROGRAMS += test-close ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/closedir������������������������������������������������������������0000664�0000000�0000000�00000000710�14110572173�0017474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: closedir() function: stop reading the entries of a directory Files: lib/closedir.c lib/dirent-private.h m4/closedir.m4 Depends-on: dirent dirfd [test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1] configure.ac: gl_FUNC_CLOSEDIR if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then AC_LIBOBJ([closedir]) fi gl_DIRENT_MODULE_INDICATOR([closedir]) Makefile.am: Include: <dirent.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������gnulib-20210822~d383792/modules/closein�������������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Close all standard streams, resetting seekable stdin if needed, and exiting with a diagnostic on error. Files: lib/closein.h lib/closein.c Depends-on: closeout freadahead fflush stdbool unistd configure.ac: Makefile.am: lib_SOURCES += closein.c Include: "closein.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/closein-tests�������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-closein.sh tests/test-closein.c Depends-on: binary-io ignore-value test-framework-sh configure.ac: Makefile.am: TESTS += test-closein.sh check_PROGRAMS += test-closein test_closein_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/closeout������������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Close standard output and standard error, exiting with a diagnostic on error. Files: lib/closeout.h lib/closeout.c Depends-on: close-stream gettext-h error quotearg exitfail stdbool unistd configure.ac: Makefile.am: lib_SOURCES += closeout.c Include: "closeout.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cnd�����������������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0016436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ISO C 11 condition variable functions. Files: lib/cnd.c Depends-on: threads-h windows-cond gettimeofday configure.ac: AC_REQUIRE([gl_THREADS_H]) if test $HAVE_THREADS_H = 0; then AC_LIBOBJ([cnd]) fi gl_THREADS_MODULE_INDICATOR([cnd]) Makefile.am: Include: <threads.h> Link: $(LIBSTDTHREAD) License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cnd-tests�����������������������������������������������������������0000664�0000000�0000000�00000000332�14110572173�0017574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cnd.c tests/macros.h Depends-on: mtx thrd gettimeofday configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-cnd check_PROGRAMS += test-cnd test_cnd_LDADD = $(LDADD) @LIBSTDTHREAD@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/concat-filename�����������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0020715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Construct a full filename by concatenating a directory name, a relative filename, and a suffix. Files: lib/concat-filename.h lib/concat-filename.c Depends-on: filename malloc-posix stpcpy configure.ac: Makefile.am: lib_SOURCES += concat-filename.c Include: "concat-filename.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cond����������������������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Condition variables for multithreading. Files: lib/glthread/cond.h lib/glthread/cond.c m4/cond.m4 Depends-on: threadlib lock errno extern-inline stdbool time windows-cond [test $gl_threads_api = windows] configure.ac: gl_COND Makefile.am: lib_SOURCES += glthread/cond.h glthread/cond.c Include: "glthread/cond.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: Yoann Vandoorselaere ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cond-tests����������������������������������������������������������0000664�0000000�0000000�00000000300�14110572173�0017746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cond.c Depends-on: lock thread yield gettimeofday sleep Makefile.am: TESTS += test-cond check_PROGRAMS += test-cond test_cond_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/config-h������������������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Assume config.h exists, to avoid -DHAVE_CONFIG_H clutter in 'make' output. Files: m4/config-h.m4 Depends-on: configure.ac: gl_CONFIG_H Makefile.am: Include: License: LGPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/configmake����������������������������������������������������������0000664�0000000�0000000�00000004021�14110572173�0017772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access from source code to variables set by "configure" or "make". Files: m4/configmake.m4 Depends-on: configure.ac: gl_CONFIGMAKE_PREP Makefile.am: # Listed in the same order as the GNU makefile conventions, and # provided by autoconf 2.59c+ or 2.70. # The Automake-defined pkg* macros are appended, in the order # listed in the Automake 1.10a+ documentation. configmake.h: Makefile $(AM_V_GEN)rm -f $@-t && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ echo '#if HAVE_WINSOCK2_H'; \ echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \ echo '#endif'; \ echo '#define PREFIX "$(prefix)"'; \ echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ echo '#define BINDIR "$(bindir)"'; \ echo '#define SBINDIR "$(sbindir)"'; \ echo '#define LIBEXECDIR "$(libexecdir)"'; \ echo '#define DATAROOTDIR "$(datarootdir)"'; \ echo '#define DATADIR "$(datadir)"'; \ echo '#define SYSCONFDIR "$(sysconfdir)"'; \ echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ echo '#define RUNSTATEDIR "$(runstatedir)"'; \ echo '#define INCLUDEDIR "$(includedir)"'; \ echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ echo '#define DOCDIR "$(docdir)"'; \ echo '#define INFODIR "$(infodir)"'; \ echo '#define HTMLDIR "$(htmldir)"'; \ echo '#define DVIDIR "$(dvidir)"'; \ echo '#define PDFDIR "$(pdfdir)"'; \ echo '#define PSDIR "$(psdir)"'; \ echo '#define LIBDIR "$(libdir)"'; \ echo '#define LISPDIR "$(lispdir)"'; \ echo '#define LOCALEDIR "$(localedir)"'; \ echo '#define MANDIR "$(mandir)"'; \ echo '#define MANEXT "$(manext)"'; \ echo '#define PKGDATADIR "$(pkgdatadir)"'; \ echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ echo '#define PKGLIBDIR "$(pkglibdir)"'; \ echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ } | sed '/""/d' > $@-t && \ mv -f $@-t $@ BUILT_SOURCES += configmake.h CLEANFILES += configmake.h configmake.h-t Include: "configmake.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/connect�������������������������������������������������������������0000664�0000000�0000000�00000001011�14110572173�0017314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: connect() function: connect a client socket. Files: lib/connect.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([connect]) fi gl_SYS_SOCKET_MODULE_INDICATOR([connect]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/connect-tests�������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0020466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-connect.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets inet_pton configure.ac: Makefile.am: TESTS += test-connect check_PROGRAMS += test-connect test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copy-file�����������������������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copying of files. Files: lib/copy-file.h lib/copy-file.c m4/copy-file.m4 Depends-on: acl-permissions binary-io c99 close copy-file-range error fstat full-write gettext-h ignore-value open qcopy-acl quote safe-read stat-time stdlib unistd utimens configure.ac: gl_COPY_FILE Makefile.am: lib_SOURCES += copy-file.h copy-file.c Include: "copy-file.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: all ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copy-file-range�����������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0020651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy parts of files Files: lib/copy-file-range.c m4/copy-file-range.m4 Depends-on: largefile unistd configure.ac: gl_FUNC_COPY_FILE_RANGE if test $HAVE_COPY_FILE_RANGE = 0; then AC_LIBOBJ([copy-file-range]) fi gl_UNISTD_MODULE_INDICATOR([copy-file-range]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copy-file-tests�����������������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0020725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-copy-file.sh tests/test-copy-file-1.sh tests/test-copy-file-2.sh tests/test-copy-file.c tests/macros.h Depends-on: acl acl-tests read-file xalloc test-framework-sh configure.ac: Makefile.am: TESTS += test-copy-file.sh test-copy-file-1.sh test-copy-file-2.sh TESTS_ENVIRONMENT += USE_ACL=$(USE_ACL) check_PROGRAMS += test-copy-file test_copy_file_LDADD = $(LDADD) $(LIB_ACL) $(LIB_CLOCK_GETTIME) @LIBINTL@ $(LIB_MBRTOWC) �����������������������������������������������������������������������gnulib-20210822~d383792/modules/copysign������������������������������������������������������������0000664�0000000�0000000�00000000625�14110572173�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: copysign() function: copy sign into another 'double' number. Files: lib/copysign.c m4/copysign.m4 m4/mathfunc.m4 Depends-on: math signbit [test $HAVE_COPYSIGN = 0] configure.ac: gl_FUNC_COPYSIGN if test $HAVE_COPYSIGN = 0; then AC_LIBOBJ([copysign]) fi gl_MATH_MODULE_INDICATOR([copysign]) Makefile.am: Include: <math.h> Link: $(COPYSIGN_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copysign-tests������������������������������������������������������0000664�0000000�0000000�00000000341�14110572173�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-copysign.c tests/signature.h tests/minus-zero.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-copysign check_PROGRAMS += test-copysign test_copysign_LDADD = $(LDADD) @COPYSIGN_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copysignf�����������������������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: copysignf() function: copy sign into another 'float' number. Files: lib/copysignf.c m4/copysignf.m4 m4/mathfunc.m4 Depends-on: math extensions signbit [test $HAVE_COPYSIGNF = 0] configure.ac: gl_FUNC_COPYSIGNF if test $HAVE_COPYSIGNF = 0; then AC_LIBOBJ([copysignf]) fi gl_MATH_MODULE_INDICATOR([copysignf]) Makefile.am: Include: <math.h> Link: $(COPYSIGNF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copysignf-tests�����������������������������������������������������0000664�0000000�0000000�00000000346�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-copysignf.c tests/signature.h tests/minus-zero.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-copysignf check_PROGRAMS += test-copysignf test_copysignf_LDADD = $(LDADD) @COPYSIGNF_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copysignl�����������������������������������������������������������0000664�0000000�0000000�00000001063�14110572173�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: copysignl() function: copy sign into another 'long double' number. Files: lib/copysignl.c m4/copysignl.m4 m4/mathfunc.m4 Depends-on: math extensions copysign [test $HAVE_COPYSIGNL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] signbit [test $HAVE_COPYSIGNL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_COPYSIGNL if test $HAVE_COPYSIGNL = 0; then AC_LIBOBJ([copysignl]) fi gl_MATH_MODULE_INDICATOR([copysignl]) Makefile.am: Include: <math.h> Link: $(COPYSIGNL_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/copysignl-tests�����������������������������������������������������0000664�0000000�0000000�00000000346�14110572173�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-copysignl.c tests/signature.h tests/minus-zero.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-copysignl check_PROGRAMS += test-copysignl test_copysignl_LDADD = $(LDADD) @COPYSIGNL_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cos�����������������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0016453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cos() function: cosine function. Files: m4/cos.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_COS Makefile.am: Include: <math.h> Link: $(COS_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cos-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cos.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-cos check_PROGRAMS += test-cos test_cos_LDADD = $(LDADD) @COS_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosf����������������������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cosf() function: cosine function. Files: lib/cosf.c m4/cosf.m4 Depends-on: math extensions cos [test $HAVE_COSF = 0] configure.ac: gl_FUNC_COSF if test $HAVE_COSF = 0; then AC_LIBOBJ([cosf]) fi gl_MATH_MODULE_INDICATOR([cosf]) Makefile.am: Include: <math.h> Link: $(COSF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosf-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cosf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-cosf check_PROGRAMS += test-cosf test_cosf_LDADD = $(LDADD) @COSF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosh����������������������������������������������������������������0000664�0000000�0000000�00000000332�14110572173�0016624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cosh() function: hyperbolic cosine function. Files: m4/cosh.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_COSH Makefile.am: Include: <math.h> Link: $(COSH_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosh-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cosh.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-cosh check_PROGRAMS += test-cosh test_cosh_LDADD = $(LDADD) @COSH_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/coshf���������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: coshf() function: hyperbolic cosine function. Files: lib/coshf.c m4/coshf.m4 Depends-on: math extensions cosh [test $HAVE_COSHF = 0] configure.ac: gl_FUNC_COSHF if test $HAVE_COSHF = 0; then AC_LIBOBJ([coshf]) fi gl_MATH_MODULE_INDICATOR([coshf]) Makefile.am: Include: <math.h> Link: $(COSHF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/coshf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-coshf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-coshf check_PROGRAMS += test-coshf test_coshf_LDADD = $(LDADD) @COSHF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosl����������������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0016632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cosl() function: cosine function with long double argument. Files: lib/cosl.c lib/trigl.h lib/sincosl.c lib/trigl.c m4/cosl.m4 Depends-on: math extensions cos [test $HAVE_COSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [test $HAVE_COSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [test $HAVE_COSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floor [test $HAVE_COSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [test $HAVE_COSL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_COSL if test $HAVE_COSL = 0; then AC_LIBOBJ([cosl]) if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0; then AC_LIBOBJ([sincosl]) AC_LIBOBJ([trigl]) fi fi gl_MATH_MODULE_INDICATOR([cosl]) Makefile.am: Include: <math.h> Link: $(COSL_LIBM) License: LGPL Maintainer: Paolo Bonzini �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cosl-tests����������������������������������������������������������0000664�0000000�0000000�00000000300�14110572173�0017763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cosl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-cosl check_PROGRAMS += test-cosl test_cosl_LDADD = $(LDADD) @COSL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-leading-zeros�������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0021562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Counts the number of leading 0-bits in a word. Files: lib/count-leading-zeros.c lib/count-leading-zeros.h Depends-on: extern-inline verify configure.ac: Makefile.am: lib_SOURCES += count-leading-zeros.c Include: "count-leading-zeros.h" License: LGPLv2+ Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-leading-zeros-tests�������������������������������������������0000664�0000000�0000000�00000000267�14110572173�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-count-leading-zeros.c tests/macros.h Depends-on: limits-h configure.ac: Makefile.am: TESTS += test-count-leading-zeros check_PROGRAMS += test-count-leading-zeros �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-one-bits������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Counts the number of 1-bits in a word. Files: lib/count-one-bits.c lib/count-one-bits.h Depends-on: extern-inline configure.ac: Makefile.am: lib_SOURCES += count-one-bits.c Include: "count-one-bits.h" License: LGPLv2+ Maintainer: Ben Pfaff ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-one-bits-tests������������������������������������������������0000664�0000000�0000000�00000000250�14110572173�0021675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-count-one-bits.c tests/macros.h Depends-on: limits-h configure.ac: Makefile.am: TESTS += test-count-one-bits check_PROGRAMS += test-count-one-bits ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-trailing-zeros������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Counts the number of trailing 0-bits in a word. Files: lib/count-trailing-zeros.c lib/count-trailing-zeros.h Depends-on: extern-inline configure.ac: Makefile.am: lib_SOURCES += count-trailing-zeros.c Include: "count-trailing-zeros.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/count-trailing-zeros-tests������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-count-trailing-zeros.c tests/macros.h Depends-on: limits-h configure.ac: Makefile.am: TESTS += test-count-trailing-zeros check_PROGRAMS += test-count-trailing-zeros ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crc�����������������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0016441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute cyclic redundancy codes. Files: lib/crc.h lib/crc.c Depends-on: stdint configure.ac: Makefile.am: lib_SOURCES += crc.c Include: "crc.h" License: LGPL Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crc-tests�����������������������������������������������������������0000664�0000000�0000000�00000000157�14110572173�0017604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-crc.c Depends-on: configure.ac: Makefile.am: TESTS += test-crc check_PROGRAMS += test-crc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/creat���������������������������������������������������������������0000664�0000000�0000000�00000000474�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: creat() function: create a file. Files: lib/creat.c m4/creat.m4 m4/open-slash.m4 Depends-on: fcntl-h largefile configure.ac: gl_FUNC_CREAT if test $REPLACE_CREAT = 1; then AC_LIBOBJ([creat]) fi gl_FCNTL_MODULE_INDICATOR([creat]) Makefile.am: Include: <fcntl.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/creat-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-creat.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-creat check_PROGRAMS += test-creat ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017267�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/af_alg�������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute message digest using kernel-supported cryptography algorithms. Files: lib/af_alg.h lib/af_alg.c lib/sys-limits.h m4/af_alg.m4 Depends-on: c99 [test $USE_AF_ALG = 1] fflush [test $USE_AF_ALG = 1] fseeko [test $USE_AF_ALG = 1] ftello [test $USE_AF_ALG = 1] fstat [test $USE_AF_ALG = 1] sys_socket sys_stat configure.ac: gl_AF_ALG Makefile.am: lib_SOURCES += af_alg.c Include: "af_alg.h" License: LGPLv2+ Maintainer: all �����������������gnulib-20210822~d383792/modules/crypto/arcfour������������������������������������������������������0000664�0000000�0000000�00000000401�14110572173�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ARCFOUR stream cipher implementation Files: lib/arcfour.h lib/arcfour.c Depends-on: stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += arcfour.c Include: "arcfour.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/arcfour-tests������������������������������������������������0000664�0000000�0000000�00000000173�14110572173�0022014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-arcfour.c Depends-on: configure.ac: Makefile.am: TESTS += test-arcfour check_PROGRAMS += test-arcfour �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/arctwo�������������������������������������������������������0000664�0000000�0000000�00000000434�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ARCTWO block cipher implementation Files: lib/arctwo.h lib/arctwo.c m4/arctwo.m4 Depends-on: stdint bitrotate configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_ARCTWO Makefile.am: lib_SOURCES += arctwo.c Include: "arctwo.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/arctwo-tests�������������������������������������������������0000664�0000000�0000000�00000000170�14110572173�0021647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-arctwo.c Depends-on: configure.ac: Makefile.am: TESTS += test-arctwo check_PROGRAMS += test-arctwo ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/des����������������������������������������������������������0000664�0000000�0000000�00000000321�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: DES block cipher. Files: lib/des.c lib/des.h Depends-on: stdint stdbool memcmp configure.ac: Makefile.am: lib_SOURCES += des.c Include: "des.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/des-tests����������������������������������������������������0000664�0000000�0000000�00000000157�14110572173�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-des.c Depends-on: configure.ac: Makefile.am: TESTS += test-des check_PROGRAMS += test-des �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc�����������������������������������������������������������0000664�0000000�0000000�00000001024�14110572173�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Core files for generic crypto package Files: lib/gc.h lib/gc-libgcrypt.c lib/gc-gnulib.c m4/gc.m4 m4/libgcrypt.m4 Depends-on: havelib open configure.ac: gl_GC if test "$ac_cv_libgcrypt" = yes; then AC_LIBOBJ([gc-libgcrypt]) else AC_LIBOBJ([gc-gnulib]) fi if test $gl_cond_libtool = false; then gl_ltlibdeps="$gl_ltlibdeps $LTLIBGCRYPT" gl_libdeps="$gl_libdeps $LIBGCRYPT" fi Makefile.am: if GL_COND_LIBTOOL lib_LDFLAGS += $(LTLIBGCRYPT) endif Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-arcfour���������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0021246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for ARCFOUR stream cipher. Files: m4/gc-arcfour.m4 Depends-on: crypto/gc crypto/arcfour [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_ARCFOUR gl_MODULE_INDICATOR([gc-arcfour]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-arcfour-tests���������������������������������������������0000664�0000000�0000000�00000000204�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-arcfour.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-arcfour check_PROGRAMS += test-gc-arcfour ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-arctwo����������������������������������������������������0000664�0000000�0000000�00000000447�14110572173�0021105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for ARCTWO block cipher. Files: m4/gc-arctwo.m4 Depends-on: crypto/gc crypto/arctwo [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_ARCTWO gl_MODULE_INDICATOR([gc-arctwo]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-arctwo-tests����������������������������������������������0000664�0000000�0000000�00000000201�14110572173�0022231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-arctwo.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-arctwo check_PROGRAMS += test-gc-arctwo �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-camellia��������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0021351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for Camellia block cipher. Files: m4/gc-camellia.m4 Depends-on: crypto/gc configure.ac: gl_GC_CAMELLIA Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-des�������������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for DES block cipher. Files: m4/gc-des.m4 Depends-on: crypto/gc crypto/des [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_DES gl_MODULE_INDICATOR([gc-des]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-des-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-des.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-des check_PROGRAMS += test-gc-des test_gc_des_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-md5��������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for HMAC-MD5 functions. Files: m4/gc-hmac-md5.m4 Depends-on: crypto/gc crypto/hmac-md5 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_HMAC_MD5 gl_MODULE_INDICATOR([gc-hmac-md5]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-md5-tests��������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0022340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-hmac-md5.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-hmac-md5 check_PROGRAMS += test-gc-hmac-md5 test_gc_hmac_md5_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha1�������������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0021346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for HMAC-SHA1 functions. Files: m4/gc-hmac-sha1.m4 Depends-on: crypto/gc crypto/hmac-sha1 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_HMAC_SHA1 gl_MODULE_INDICATOR([gc-hmac-sha1]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha1-tests�������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0022504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-hmac-sha1.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-hmac-sha1 check_PROGRAMS += test-gc-hmac-sha1 test_gc_hmac_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha256�����������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0021525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for HMAC-SHA256 functions. Files: m4/gc-hmac-sha256.m4 Depends-on: crypto/gc crypto/hmac-sha256 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_HMAC_SHA256 gl_MODULE_INDICATOR([gc-hmac-sha256]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha256-tests�����������������������������������������0000664�0000000�0000000�00000000302�14110572173�0022652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-hmac-sha256.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-hmac-sha256 check_PROGRAMS += test-gc-hmac-sha256 test_gc_hmac_sha256_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha512�����������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for HMAC-SHA512 functions. Files: m4/gc-hmac-sha512.m4 Depends-on: crypto/gc crypto/hmac-sha512 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_HMAC_SHA512 gl_MODULE_INDICATOR([gc-hmac-sha512]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-hmac-sha512-tests�����������������������������������������0000664�0000000�0000000�00000000302�14110572173�0022645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-hmac-sha512.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-hmac-sha512 check_PROGRAMS += test-gc-hmac-sha512 test_gc_hmac_sha512_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md2�������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for MD2 functions. Files: m4/gc-md2.m4 Depends-on: crypto/gc crypto/md2 configure.ac: gl_GC_MD2 gl_MODULE_INDICATOR([gc-md2]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md2-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-md2.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-md2 check_PROGRAMS += test-gc-md2 test_gc_md2_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md4�������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for MD4 functions. Files: m4/gc-md4.m4 Depends-on: crypto/gc crypto/md4 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_MD4 gl_MODULE_INDICATOR([gc-md4]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md4-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-md4.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-md4 check_PROGRAMS += test-gc-md4 test_gc_md4_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md5�������������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for MD5 functions. Files: m4/gc-md5.m4 Depends-on: crypto/gc crypto/md5 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_MD5 gl_MODULE_INDICATOR([gc-md5]) Makefile.am: lib_SOURCES += md5.h Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-md5-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-md5.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-md5 check_PROGRAMS += test-gc-md5 test_gc_md5_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-pbkdf2����������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Password-Based Key Derivation Function according to PKCS#5/RFC2898 Files: lib/gc-pbkdf2.c Depends-on: crypto/gc configure.ac: Makefile.am: lib_SOURCES += gc-pbkdf2.c Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-pbkdf2-sha1�����������������������������������������������0000664�0000000�0000000�00000000607�14110572173�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Password-Based Key Derivation Function according to PKCS#5/RFC2898 with HMAC-SHA1 Status: deprecated Notice: This module is deprecated. Use the module 'gc-pbkdf2' instead. Files: lib/gc-pbkdf2-sha1.c Depends-on: crypto/gc-pbkdf2 crypto/gc-hmac-sha1 configure.ac: Makefile.am: lib_SOURCES += gc-pbkdf2-sha1.c Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-pbkdf2-sha1-tests�����������������������������������������0000664�0000000�0000000�00000000302�14110572173�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-pbkdf2-sha1.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-pbkdf2-sha1 check_PROGRAMS += test-gc-pbkdf2-sha1 test_gc_pbkdf2_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-pbkdf2-tests����������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0022114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-pbkdf2.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-pbkdf2 check_PROGRAMS += test-gc-pbkdf2 test_gc_pbkdf2_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-random����������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto random number functions. Files: Depends-on: crypto/gc getrandom [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_MODULE_INDICATOR([gc-random]) Makefile.am: Include: "gc.h" Link: $(LIB_GETRANDOM) License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-rijndael��������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0021372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for rijndael block cipher. Files: m4/gc-rijndael.m4 Depends-on: crypto/gc crypto/rijndael [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_RIJNDAEL gl_MODULE_INDICATOR([gc-rijndael]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-rijndael-tests��������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-rijndael.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-rijndael check_PROGRAMS += test-gc-rijndael test_gc_rijndael_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha1������������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for SHA-1 functions. Files: m4/gc-sha1.m4 Depends-on: crypto/gc crypto/sha1 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_SHA1 gl_MODULE_INDICATOR([gc-sha1]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha1-tests������������������������������������������������0000664�0000000�0000000�00000000246�14110572173�0021577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-sha1.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-sha1 check_PROGRAMS += test-gc-sha1 test_gc_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha256����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for SHA-256 functions. Files: m4/gc-sha256.m4 Depends-on: crypto/gc crypto/sha256 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_SHA256 gl_MODULE_INDICATOR([gc-sha256]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha256-tests����������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-sha256.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-sha256 check_PROGRAMS += test-gc-sha256 test_gc_sha256_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha512����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for SHA-512 functions. Files: m4/gc-sha512.m4 Depends-on: crypto/gc crypto/sha512 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_SHA512 gl_MODULE_INDICATOR([gc-sha512]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sha512-tests����������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0021747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-sha512.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-sha512 check_PROGRAMS += test-gc-sha512 test_gc_sha512_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sm3�������������������������������������������������������0000664�0000000�0000000�00000000417�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto wrappers for SM3 functions. Files: m4/gc-sm3.m4 Depends-on: crypto/gc crypto/sm3 [test "$ac_cv_libgcrypt" != yes] configure.ac: gl_GC_SM3 gl_MODULE_INDICATOR([gc-sm3]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Jia Zhang �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-sm3-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc-sm3.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc-sm3 check_PROGRAMS += test-gc-sm3 test_gc_sm3_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/gc-tests�����������������������������������������������������0000664�0000000�0000000�00000000243�14110572173�0020742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc check_PROGRAMS += test-gc test_gc_LDADD = $(LDADD) @LIB_CRYPTO@ $(LIB_GETRANDOM) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-md5�����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with MD5. Files: lib/hmac.h lib/hmac.c lib/hmac-md5.c Depends-on: memxor crypto/md5 configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += hmac-md5.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-md5-tests�����������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0021750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-md5.c Depends-on: c99 configure.ac: Makefile.am: TESTS += test-hmac-md5 check_PROGRAMS += test-hmac-md5 test_hmac_md5_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha1����������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with SHA1. Files: lib/hmac.h lib/hmac.c lib/hmac-sha1.c Depends-on: memxor crypto/sha1 configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += hmac-sha1.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha1-tests����������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0022114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-sha1.c Depends-on: c99 configure.ac: Makefile.am: TESTS += test-hmac-sha1 check_PROGRAMS += test-hmac-sha1 test_hmac_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha256��������������������������������������������������0000664�0000000�0000000�00000000460�14110572173�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with SHA256. Files: lib/hmac.h lib/hmac.c lib/hmac-sha256.c Depends-on: memxor crypto/sha256 configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += hmac-sha256.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha256-tests��������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0022271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-sha256.c Depends-on: c99 configure.ac: Makefile.am: TESTS += test-hmac-sha256 check_PROGRAMS += test-hmac-sha256 test_hmac_sha256_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha512��������������������������������������������������0000664�0000000�0000000�00000000460�14110572173�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with SHA512. Files: lib/hmac.h lib/hmac.c lib/hmac-sha512.c Depends-on: memxor crypto/sha512 configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += hmac-sha512.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/hmac-sha512-tests��������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-sha512.c Depends-on: c99 configure.ac: Makefile.am: TESTS += test-hmac-sha512 check_PROGRAMS += test-hmac-sha512 test_hmac_sha512_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md2����������������������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD2 checksum. Files: lib/md2.h lib/md2.c Depends-on: minmax configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += md2.c Include: "md2.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md2-tests����������������������������������������������������0000664�0000000�0000000�00000000157�14110572173�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-md2.c Depends-on: configure.ac: Makefile.am: TESTS += test-md2 check_PROGRAMS += test-md2 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md4����������������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD4 checksum. Files: lib/md4.h lib/md4.c m4/md4.m4 Depends-on: byteswap stdalign stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_MD4 Makefile.am: lib_SOURCES += md4.c Include: "md4.h" License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md4-tests����������������������������������������������������0000664�0000000�0000000�00000000157�14110572173�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-md4.c Depends-on: configure.ac: Makefile.am: TESTS += test-md4 check_PROGRAMS += test-md4 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md5����������������������������������������������������������0000664�0000000�0000000�00000000410�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD5 checksum. Files: Depends-on: crypto/af_alg crypto/md5-buffer configure.ac: AC_DEFINE([GL_COMPILE_CRYPTO_STREAM], 1, [Compile Gnulib crypto stream ops.]) Makefile.am: Include: "md5.h" License: LGPLv2+ Maintainer: Jim Meyering, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md5-buffer���������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0021145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD5 checksum. Files: lib/gl_openssl.h lib/md5.h lib/md5.c m4/gl-openssl.m4 m4/md5.m4 Depends-on: byteswap c99 extern-inline stdalign stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_MD5 Makefile.am: lib_SOURCES += md5.c Include: "md5.h" Link: $(LIB_CRYPTO) License: LGPLv2+ Maintainer: Jim Meyering, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/md5-tests����������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-md5.c tests/test-digest.h tests/bench-md5.c tests/bench-digest.h tests/macros.h Depends-on: c99 getrusage gettimeofday configure.ac: Makefile.am: TESTS += test-md5 check_PROGRAMS += test-md5 noinst_PROGRAMS += bench-md5 test_md5_LDADD = $(LDADD) @LIB_CRYPTO@ bench_md5_LDADD = $(LDADD) @LIB_CRYPTO@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/rijndael�����������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0021007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Rijndael block cipher. Files: lib/rijndael-alg-fst.c lib/rijndael-alg-fst.h lib/rijndael-api-fst.c lib/rijndael-api-fst.h Depends-on: stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += rijndael-alg-fst.c rijndael-api-fst.c Include: "rijndael-alg-fst.h" "rijndael-api-fst.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/rijndael-tests�����������������������������������������������0000664�0000000�0000000�00000000176�14110572173�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rijndael.c Depends-on: configure.ac: Makefile.am: TESTS += test-rijndael check_PROGRAMS += test-rijndael ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha1���������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA1 checksum. Files: Depends-on: crypto/af_alg crypto/sha1-buffer configure.ac: AC_DEFINE([GL_COMPILE_CRYPTO_STREAM], 1, [Compile Gnulib crypto stream ops.]) Makefile.am: Include: "sha1.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha1-buffer��������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA1 checksum. Files: lib/gl_openssl.h lib/sha1.h lib/sha1.c m4/gl-openssl.m4 m4/sha1.m4 Depends-on: byteswap c99 extern-inline stdalign stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_SHA1 Makefile.am: lib_SOURCES += sha1.c Include: "sha1.h" Link: $(LIB_CRYPTO) License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha1-tests���������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0021210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sha1.c tests/test-digest.h tests/bench-sha1.c tests/bench-digest.h tests/macros.h Depends-on: c99 getrusage gettimeofday configure.ac: Makefile.am: TESTS += test-sha1 check_PROGRAMS += test-sha1 noinst_PROGRAMS += bench-sha1 test_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ bench_sha1_LDADD = $(LDADD) @LIB_CRYPTO@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha256�������������������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA224 and SHA256 checksums. Files: Depends-on: crypto/af_alg crypto/sha256-buffer configure.ac: AC_DEFINE([GL_COMPILE_CRYPTO_STREAM], 1, [Compile Gnulib crypto stream ops.]) Makefile.am: Include: "sha256.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha256-buffer������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA224 and SHA256 checksums. Files: lib/gl_openssl.h lib/sha256.h lib/sha256.c m4/gl-openssl.m4 m4/sha256.m4 Depends-on: byteswap c99 extern-inline stdalign stdint configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_SHA256 Makefile.am: lib_SOURCES += sha256.c Include: "sha256.h" Link: $(LIB_CRYPTO) License: LGPLv2+ Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha256-tests�������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sha256.c tests/test-digest.h tests/bench-sha224.c tests/bench-sha256.c tests/bench-digest.h tests/macros.h Depends-on: c99 getrusage gettimeofday configure.ac: Makefile.am: TESTS += test-sha256 check_PROGRAMS += test-sha256 noinst_PROGRAMS += bench-sha224 bench-sha256 test_sha256_LDADD = $(LDADD) @LIB_CRYPTO@ bench_sha224_LDADD = $(LDADD) @LIB_CRYPTO@ bench_sha256_LDADD = $(LDADD) @LIB_CRYPTO@ ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha512�������������������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA384 and SHA512 checksums. Files: Depends-on: crypto/af_alg crypto/sha512-buffer configure.ac: AC_DEFINE([GL_COMPILE_CRYPTO_STREAM], 1, [Compile Gnulib crypto stream ops.]) Makefile.am: Include: "sha512.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha512-buffer������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0021465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA384 and SHA512 checksums. Files: lib/gl_openssl.h lib/sha512.h lib/sha512.c m4/gl-openssl.m4 m4/sha512.m4 Depends-on: byteswap c99 extern-inline stdalign stdint u64 configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_SHA512 Makefile.am: lib_SOURCES += sha512.c Include: "sha512.h" Link: $(LIB_CRYPTO) License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sha512-tests�������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sha512.c tests/test-digest.h tests/bench-sha384.c tests/bench-sha512.c tests/bench-digest.h tests/macros.h Depends-on: c99 getrusage gettimeofday configure.ac: Makefile.am: TESTS += test-sha512 check_PROGRAMS += test-sha512 noinst_PROGRAMS += bench-sha384 bench-sha512 test_sha512_LDADD = $(LDADD) @LIB_CRYPTO@ bench_sha384_LDADD = $(LDADD) @LIB_CRYPTO@ bench_sha512_LDADD = $(LDADD) @LIB_CRYPTO@ ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sm3����������������������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SM3 checksums. Files: lib/sm3.h lib/sm3.c m4/sm3.m4 Depends-on: byteswap c99 extern-inline stdalign stdint configure.ac: gl_SM3 Makefile.am: lib_SOURCES += sm3.c Include: "sm3.h" Link: $(LIB_CRYPTO) License: LGPLv2+ Maintainer: Jia Zhang �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/crypto/sm3-tests����������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sm3.c Depends-on: configure.ac: Makefile.am: TESTS += test-sm3 check_PROGRAMS += test-sm3 test_sm3_LDADD = $(LDADD) @LIB_CRYPTO@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/csharpcomp����������������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compile a C# program. Files: lib/csharpcomp.h lib/csharpcomp.c Depends-on: stdbool xmalloca execute spawn-pipe wait-process getline sh-quote safe-read error gettext-h memcmp csharpcomp-script configure.ac: Makefile.am: lib_SOURCES += csharpcomp.h csharpcomp.c Include: "csharpcomp.h" Link: $(LIB_MBRTOWC) $(LIBTHREAD) License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/csharpcomp-script���������������������������������������������������0000664�0000000�0000000�00000000434�14110572173�0021334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Script to compile a C# program. Files: build-aux/csharpcomp.sh.in m4/csharpcomp.m4 m4/csharp.m4 Depends-on: configure.ac: AC_REQUIRE([gt_CSHARPCOMP]) AC_CONFIG_FILES([csharpcomp.sh:build-aux/csharpcomp.sh.in]) Makefile.am: License: GPLed build tool Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/csharpexec����������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Execute a C# program. Files: lib/csharpexec.h lib/csharpexec.c lib/classpath.h lib/classpath.c Depends-on: stdbool execute xsetenv sh-quote xalloc xmalloca error gettext-h csharpexec-script configure.ac: Makefile.am: DEFS += -DEXEEXT=\"@EXEEXT@\" lib_SOURCES += csharpexec.h csharpexec.c Include: "csharpexec.h" Link: $(LIB_MBRTOWC) $(LIBTHREAD) License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/csharpexec-script���������������������������������������������������0000664�0000000�0000000�00000000520�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Script to execute a C# program. Files: build-aux/csharpexec.sh.in m4/csharpexec.m4 m4/csharp.m4 Depends-on: configure.ac: # You need to invoke gt_CSHARPEXEC yourself, possibly with arguments. AC_CONFIG_FILES([csharpexec.sh:build-aux/csharpexec.sh.in]) Makefile.am: Include: License: GPLed build tool Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ctime���������������������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ctime() function: convert time to string. Files: lib/ctime.c m4/ctime.m4 Depends-on: time configure.ac: gl_FUNC_CTIME if test $REPLACE_CTIME = 1; then AC_LIBOBJ([ctime]) fi gl_TIME_MODULE_INDICATOR([ctime]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ctype���������������������������������������������������������������0000664�0000000�0000000�00000002315�14110572173�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <ctype.h> that conforms to C99. Files: lib/ctype.in.h m4/ctype_h.m4 Depends-on: extern-inline include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_CTYPE_H gl_CTYPE_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += ctype.h # We need the following in order to create <ctype.h> when the system # doesn't have one that works with the given compiler. ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/ctype.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += ctype.h ctype.h-t Include: <ctype.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ctype-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ctype-c++.cc tests/test-ctype-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-ctype-c++ check_PROGRAMS += test-ctype-c++ test_ctype_c___SOURCES = test-ctype-c++.cc test-ctype-c++2.cc endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ctype-tests���������������������������������������������������������0000664�0000000�0000000�00000000205�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ctype.c Depends-on: ctype-c++-tests configure.ac: Makefile.am: TESTS += test-ctype check_PROGRAMS += test-ctype �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/cycle-check���������������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: help detect directory cycles efficiently Files: lib/cycle-check.c lib/cycle-check.h m4/cycle-check.m4 Depends-on: assure dev-ino same-inode stdbool stdint configure.ac: gl_CYCLE_CHECK Makefile.am: lib_SOURCES += cycle-check.c Include: "cycle-check.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/d-ino���������������������������������������������������������������0000664�0000000�0000000�00000000331�14110572173�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check whether struct dirent has a member named d_ino. Files: m4/d-ino.m4 Depends-on: configure.ac: gl_CHECK_TYPE_STRUCT_DIRENT_D_INO Makefile.am: Include: License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/d-type��������������������������������������������������������������0000664�0000000�0000000�00000000334�14110572173�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check whether struct dirent has a member named d_type. Files: m4/d-type.m4 Depends-on: configure.ac: gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE Makefile.am: Include: License: LGPLv2+ Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dev-ino�������������������������������������������������������������0000664�0000000�0000000�00000000263�14110572173�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: declare a simple (device, inode) struct Files: lib/dev-ino.h Depends-on: configure.ac: Makefile.am: Include: "dev-ino.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dfa�����������������������������������������������������������������0000664�0000000�0000000�00000000740�14110572173�0016425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: DFA matcher that was initially used by GNU grep, gawk and diffutils Files: lib/dfa.c lib/dfa.h lib/localeinfo.c lib/localeinfo.h Depends-on: assert c99 ctype flexmember idx locale regex stdbool stddef stdint stdio stdlib string verify wchar wctype-h xalloc xalloc-die configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += dfa.c localeinfo.c Include: "dfa.h" "localeinfo.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Jim Meyering, Paul Eggert ��������������������������������gnulib-20210822~d383792/modules/dfa-tests�����������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dfa-match.sh tests/test-dfa-match-aux.c tests/test-dfa-invalid-char-class.sh tests/test-dfa-invalid-merge.sh Depends-on: stdio stdlib string regex configure.ac: Makefile.am: TESTS += \ test-dfa-invalid-char-class.sh \ test-dfa-invalid-merge.sh \ test-dfa-match.sh check_PROGRAMS += test-dfa-match-aux test_dfa_match_aux_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIBINTL@ $(LIB_MBRTOWC) ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/di-set��������������������������������������������������������������0000664�0000000�0000000�00000000366�14110572173�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: manipulate sets of device-inode pairs efficiently Files: lib/di-set.c lib/di-set.h Depends-on: ino-map hash configure.ac: Makefile.am: lib_SOURCES += di-set.c di-set.h Include: "di-set.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/di-set-tests��������������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-di-set.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-di-set check_PROGRAMS += test-di-set �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/diffseq�������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute the difference between two sequences. Files: lib/diffseq.h Depends-on: c99 configure.ac: Makefile.am: lib_SOURCES += diffseq.h Include: "diffseq.h" License: GPL Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirent��������������������������������������������������������������0000664�0000000�0000000�00000004712�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <dirent.h>. Files: lib/dirent.in.h m4/dirent_h.m4 m4/unistd_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_DIRENT_H gl_DIRENT_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += dirent.h # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \ -e 's/@''GNULIB_OPENDIR''@/$(GNULIB_OPENDIR)/g' \ -e 's/@''GNULIB_READDIR''@/$(GNULIB_READDIR)/g' \ -e 's/@''GNULIB_REWINDDIR''@/$(GNULIB_REWINDDIR)/g' \ -e 's/@''GNULIB_CLOSEDIR''@/$(GNULIB_CLOSEDIR)/g' \ -e 's/@''GNULIB_DIRFD''@/$(GNULIB_DIRFD)/g' \ -e 's/@''GNULIB_FDOPENDIR''@/$(GNULIB_FDOPENDIR)/g' \ -e 's/@''GNULIB_SCANDIR''@/$(GNULIB_SCANDIR)/g' \ -e 's/@''GNULIB_ALPHASORT''@/$(GNULIB_ALPHASORT)/g' \ -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \ -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \ -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \ -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \ -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \ -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \ -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -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)' \ < $(srcdir)/dirent.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += dirent.h dirent.h-t Include: <dirent.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/dirent-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dirent-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-dirent-c++ check_PROGRAMS += test-dirent-c++ test_dirent_c___SOURCES = test-dirent-c++.cc test_dirent_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirent-safer��������������������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Directory functions that avoid clobbering STD{IN,OUT,ERR}_FILENO. Files: lib/dirent--.h lib/dirent-safer.h lib/opendir-safer.c m4/dirent-safer.m4 Depends-on: dirent closedir dirfd fcntl opendir configure.ac: gl_DIRENT_SAFER gl_MODULE_INDICATOR([dirent-safer]) Makefile.am: lib_SOURCES += opendir-safer.c Include: "dirent-safer.h" License: GPL Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirent-safer-tests��������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dirent-safer.c tests/macros.h Depends-on: dup2 opendir closedir configure.ac: Makefile.am: TESTS += test-dirent-safer check_PROGRAMS += test-dirent-safer # Link with libintl when needed. dirent-safer uses fdopendir if it is present, # and fdopendir indirectly depends on openat-die -> gettext-h. test_dirent_safer_LDADD = $(LDADD) $(LIBINTL) �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirent-tests��������������������������������������������������������0000664�0000000�0000000�00000000211�14110572173�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dirent.c Depends-on: dirent-c++-tests configure.ac: Makefile.am: TESTS += test-dirent check_PROGRAMS += test-dirent ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirfd���������������������������������������������������������������0000664�0000000�0000000�00000001051�14110572173�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Retrieving the file descriptor of an open directory stream. (Unportable.) Files: lib/dirfd.c m4/dirfd.m4 Depends-on: dirent extensions errno [test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no || test $REPLACE_DIRFD = 1] configure.ac: gl_FUNC_DIRFD if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no \ || test $REPLACE_DIRFD = 1; then AC_LIBOBJ([dirfd]) gl_PREREQ_DIRFD fi gl_DIRENT_MODULE_INDICATOR([dirfd]) Makefile.am: Include: <dirent.h> License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirname�������������������������������������������������������������0000664�0000000�0000000�00000000466�14110572173�0017317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Extract specific portions of filenames. Files: lib/dirname.c lib/basename.c lib/stripslash.c Depends-on: dirname-lgpl xalloc configure.ac: gl_MODULE_INDICATOR([dirname]) Makefile.am: lib_SOURCES += dirname.c basename.c Include: "dirname.h" License: GPL Maintainer: Jim Meyering, Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirname-lgpl��������������������������������������������������������0000664�0000000�0000000�00000000520�14110572173�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Extract specific portions of filenames. Files: lib/dirname.h lib/dirname-lgpl.c lib/stripslash.c Depends-on: basename-lgpl double-slash-root filename malloc-posix stdbool configure.ac: Makefile.am: lib_SOURCES += dirname-lgpl.c stripslash.c Include: "dirname.h" License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dirname-tests�������������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dirname.c Depends-on: strdup configure.ac: Makefile.am: TESTS += test-dirname check_PROGRAMS += test-dirname test_dirname_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/do-release-commit-and-tag�������������������������������������������0000664�0000000�0000000�00000000346�14110572173�0022514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Automate the release-commit and tag process. See also readme-release. Files: build-aux/do-release-commit-and-tag Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dosname�������������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros for porting to systems with DOS-style file names. Status: deprecated Notice: This module is deprecated. Use the module 'filename' instead. Files: lib/dosname.h Depends-on: filename configure.ac: Makefile.am: Include: "dosname.h" License: LGPLv2+ Maintainer: Eric Blake, Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/double-slash-root���������������������������������������������������0000664�0000000�0000000�00000000340�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check whether // is distinct from /. Files: m4/double-slash-root.m4 Depends-on: configure.ac: gl_DOUBLE_SLASH_ROOT Makefile.am: Include: License: LGPLv2+ Maintainer: Eric Blake, Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dprintf�������������������������������������������������������������0000664�0000000�0000000�00000001076�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dprintf() function: print formatted output to a file descriptor Files: lib/dprintf.c m4/dprintf.m4 Depends-on: stdio vasnprintf [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] free-posix [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] full-write [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] errno [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] configure.ac: gl_FUNC_DPRINTF gl_STDIO_MODULE_INDICATOR([dprintf]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002354�14110572173�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible dprintf() function: print formatted output to a file descriptor Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/dprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: dprintf nocrash printf-safe multiarch vasnprintf [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] isnand-nolibm [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] isnanl-nolibm [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] frexp-nolibm [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] frexpl-nolibm [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] printf-frexp [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] printf-frexpl [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] signbit [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] fpucw [test $ac_cv_func_dprintf = no || test $REPLACE_DPRINTF = 1] configure.ac: gl_FUNC_DPRINTF_POSIX Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dprintf-posix.sh tests/test-dprintf-posix.c tests/test-printf-posix.output tests/test-dprintf-posix2.sh tests/test-dprintf-posix2.c tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint get-rusage-as configure.ac: AC_CHECK_FUNCS_ONCE([getrlimit setrlimit]) Makefile.am: TESTS += test-dprintf-posix.sh test-dprintf-posix2.sh check_PROGRAMS += test-dprintf-posix test-dprintf-posix2 �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dprintf-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dprintf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-dprintf check_PROGRAMS += test-dprintf ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dtoastr�������������������������������������������������������������0000664�0000000�0000000�00000000366�14110572173�0017357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert double to accurate string. Files: lib/ftoastr.h lib/ftoastr.c lib/dtoastr.c Depends-on: extensions intprops configure.ac: Makefile.am: lib_SOURCES += dtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dtotimespec���������������������������������������������������������0000664�0000000�0000000�00000000357�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert double to timespec. Files: lib/dtotimespec.c Depends-on: intprops timespec configure.ac: Makefile.am: lib_SOURCES += dtotimespec.c Include: "timespec.h" Link: License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dummy���������������������������������������������������������������0000664�0000000�0000000�00000000312�14110572173�0017021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A dummy file, to make sure the library is non-empty. Files: lib/dummy.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += dummy.c Include: License: public domain Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup�����������������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0016461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dup() function: duplicate an open file descriptor. Files: lib/dup.c m4/dup.m4 Depends-on: unistd msvc-inval [test $REPLACE_DUP = 1] configure.ac: gl_FUNC_DUP if test $REPLACE_DUP = 1; then AC_LIBOBJ([dup]) gl_PREREQ_DUP fi gl_UNISTD_MODULE_INDICATOR([dup]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup-tests�����������������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-dup check_PROGRAMS += test-dup ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup2����������������������������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dup2() function: duplicate an open file descriptor. Files: lib/dup2.c m4/dup2.m4 Depends-on: unistd msvc-inval [test $REPLACE_DUP2 = 1] msvc-nothrow [test $REPLACE_DUP2 = 1] configure.ac: gl_FUNC_DUP2 if test $REPLACE_DUP2 = 1; then AC_LIBOBJ([dup2]) gl_PREREQ_DUP2 fi gl_UNISTD_MODULE_INDICATOR([dup2]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup2-tests����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup2.c tests/signature.h tests/macros.h Depends-on: binary-io close fcntl-h getdtablesize msvc-nothrow open configure.ac: Makefile.am: TESTS += test-dup2 check_PROGRAMS += test-dup2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup3����������������������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dup3() function: copy a file descriptor, applying specific flags. Files: lib/dup3.c m4/dup3.m4 Depends-on: unistd fcntl binary-io getdtablesize extensions configure.ac: gl_FUNC_DUP3 gl_UNISTD_MODULE_INDICATOR([dup3]) Makefile.am: lib_SOURCES += dup3.c Include: <unistd.h> License: LGPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dup3-tests����������������������������������������������������������0000664�0000000�0000000�00000000271�14110572173�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup3.c tests/signature.h tests/macros.h Depends-on: getdtablesize msvc-nothrow open close configure.ac: Makefile.am: TESTS += test-dup3 check_PROGRAMS += test-dup3 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/duplocale�����������������������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: duplocale() function: duplicate a locale object. Files: lib/duplocale.c m4/duplocale.m4 Depends-on: locale setlocale-null [test $REPLACE_DUPLOCALE = 1] configure.ac: gl_FUNC_DUPLOCALE if test $REPLACE_DUPLOCALE = 1; then AC_LIBOBJ([duplocale]) gl_PREREQ_DUPLOCALE fi gl_LOCALE_MODULE_INDICATOR([duplocale]) Makefile.am: Include: <locale.h> Link: $(LIB_DUPLOCALE) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/duplocale-tests�����������������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-duplocale.c tests/signature.h tests/macros.h m4/intl-thread-locale.m4 Depends-on: langinfo configure.ac: AC_CHECK_FUNCS_ONCE([duplocale strfmon_l snprintf_l nl_langinfo_l]) AC_CHECK_HEADERS_ONCE([monetary.h]) gt_FUNC_USELOCALE Makefile.am: TESTS += test-duplocale check_PROGRAMS += test-duplocale test_duplocale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_DUPLOCALE@ ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dynarray������������������������������������������������������������0000664�0000000�0000000�00000003370�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Type-safe arrays which grow dynamically. Files: lib/dynarray.h lib/malloc/dynarray-skeleton.c lib/malloc/dynarray.h lib/malloc/dynarray_at_failure.c lib/malloc/dynarray_emplace_enlarge.c lib/malloc/dynarray_finalize.c lib/malloc/dynarray_resize.c lib/malloc/dynarray_resize_clear.c Depends-on: c99 builtin-expect libc-config stdbool stddef intprops configure.ac: AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_at)$(MKDIR_P) malloc $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e '/libc_hidden_proto/d' < $(srcdir)/malloc/dynarray.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_at)$(MKDIR_P) malloc $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ < $(srcdir)/malloc/dynarray-skeleton.c; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t lib_SOURCES += malloc/dynarray_at_failure.c \ malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c \ malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c Include: "dynarray.h" License: LGPLv2+ Maintainer: all, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/dynarray-tests������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dynarray.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-dynarray check_PROGRAMS += test-dynarray �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/eealloc�������������������������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation with expensive empty allocations (glibc compatible). Files: lib/eealloc.h lib/eealloc.c m4/eealloc.m4 m4/malloc.m4 m4/realloc.m4 Depends-on: extern-inline configure.ac: gl_EEALLOC Makefile.am: lib_SOURCES += eealloc.c Include: <eealloc.h> License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/eloop-threshold�����������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Threshold for symbolic link loops and ELOOP Files: lib/eloop-threshold.h Depends-on: minmax unistd configure.ac: Makefile.am: Include: <eloop-threshold.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/environ�������������������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0017356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: environ variable: storage of environment variables. Files: m4/environ.m4 Depends-on: unistd extensions configure.ac: gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/environ-tests�������������������������������������������������������0000664�0000000�0000000�00000000174�14110572173�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-environ.c Depends-on: configure.ac: Makefile.am: TESTS += test-environ check_PROGRAMS += test-environ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/erf�����������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0016446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: erf() function: error function. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([erf]) Makefile.am: Include: <math.h> Link: $(ERF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/erf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0017611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-erf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-erf check_PROGRAMS += test-erf test_erf_LDADD = $(LDADD) @ERF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/erfc����������������������������������������������������������������0000664�0000000�0000000�00000000346�14110572173�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: erfc() function: complementary error function. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([erfc]) Makefile.am: Include: <math.h> Link: $(ERFC_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/erfc-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-erfc.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-erfc check_PROGRAMS += test-erfc test_erfc_LDADD = $(LDADD) @ERFC_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/errno���������������������������������������������������������������0000664�0000000�0000000�00000002437�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <errno.h>. Files: lib/errno.in.h m4/errno_h.m4 Depends-on: include_next configure.ac: gl_HEADER_ERRNO_H Makefile.am: BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t Include: <errno.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/errno-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-errno-c++.cc tests/test-errno-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-errno-c++ check_PROGRAMS += test-errno-c++ test_errno_c___SOURCES = test-errno-c++.cc test-errno-c++2.cc endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/errno-tests���������������������������������������������������������0000664�0000000�0000000�00000000206�14110572173�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-errno.c Depends-on: errno-c++-tests configure.ac: Makefile.am: TESTS += test-errno check_PROGRAMS += test-errno ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/error���������������������������������������������������������������0000664�0000000�0000000�00000001164�14110572173�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: error and error_at_line functions: Error reporting. Files: lib/error.h lib/error.c m4/error.m4 Depends-on: stdio getprogname strerror [test $ac_cv_lib_error_at_line = no] unistd [test $ac_cv_lib_error_at_line = no] msvc-nothrow [test $ac_cv_lib_error_at_line = no] configure.ac: gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) Makefile.am: Include: "error.h" License: LGPLv2+ Maintainer: all, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/euidaccess����������������������������������������������������������0000664�0000000�0000000�00000001077�14110572173�0020007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: euidaccess() function: check effective user's permissions for a file. Files: lib/euidaccess.c m4/euidaccess.m4 Depends-on: unistd extensions root-uid fcntl-h group-member [test $HAVE_EUIDACCESS = 0] stat [test $HAVE_EUIDACCESS = 0] sys_stat [test $HAVE_EUIDACCESS = 0] configure.ac: gl_FUNC_EUIDACCESS if test $HAVE_EUIDACCESS = 0; then AC_LIBOBJ([euidaccess]) gl_PREREQ_EUIDACCESS fi gl_UNISTD_MODULE_INDICATOR([euidaccess]) Makefile.am: Include: <unistd.h> Link: $(LIB_EACCESS) License: LGPLv2+ Maintainer: Jim Meyering, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exclude�������������������������������������������������������������0000664�0000000�0000000�00000000701�14110572173�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Manage list of filenames or wildcard patterns for --exclude option processing. Files: lib/exclude.h lib/exclude.c Depends-on: filename fnmatch fopen-gnu hash mbscasecmp mbuiter regex stdbool unlocked-io-internal verify xalloc configure.ac: Makefile.am: lib_SOURCES += exclude.c Include: "exclude.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert ���������������������������������������������������������������gnulib-20210822~d383792/modules/exclude-tests�������������������������������������������������������0000664�0000000�0000000�00000001046�14110572173�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exclude.c tests/test-exclude1.sh tests/test-exclude2.sh tests/test-exclude3.sh tests/test-exclude4.sh tests/test-exclude5.sh tests/test-exclude6.sh tests/test-exclude7.sh tests/test-exclude8.sh Depends-on: argmatch error test-framework-sh Makefile.am: TESTS += \ test-exclude1.sh\ test-exclude2.sh\ test-exclude3.sh\ test-exclude4.sh\ test-exclude5.sh\ test-exclude6.sh\ test-exclude7.sh\ test-exclude8.sh check_PROGRAMS += test-exclude test_exclude_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ $(LIB_MBRTOWC) $(LIBTHREAD) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execinfo������������������������������������������������������������0000664�0000000�0000000�00000001316�14110572173�0017473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <execinfo.h>. Files: lib/execinfo.c lib/execinfo.in.h m4/execinfo.m4 Depends-on: extern-inline configure.ac: gl_EXECINFO_H Makefile.am: BUILT_SOURCES += $(EXECINFO_H) # We need the following in order to create <execinfo.h> when the system # doesn't have one that works. if GL_GENERATE_EXECINFO_H execinfo.h: execinfo.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/execinfo.in.h; \ } > $@-t && \ mv $@-t $@ else execinfo.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += execinfo.h execinfo.h-t Include: <execinfo.h> Link: $(LIB_EXECINFO) License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execl���������������������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execl() function: Execute a program, replacing the current process. Files: lib/execl.c m4/execl.m4 Depends-on: unistd execv [test $REPLACE_EXECL = 1] malloca [test $REPLACE_EXECL = 1] configure.ac: gl_FUNC_EXECL if test $REPLACE_EXECL = 1; then AC_LIBOBJ([execl]) fi gl_UNISTD_MODULE_INDICATOR([execl]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execl-tests���������������������������������������������������������0000664�0000000�0000000�00000000301�14110572173�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execl.sh tests/test-execl-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execl.sh check_PROGRAMS += test-execl-main test-exec-child �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execle��������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execle() function: Execute a program, replacing the current process. Files: lib/execle.c m4/execle.m4 Depends-on: unistd execve [test $REPLACE_EXECLE = 1] malloca [test $REPLACE_EXECLE = 1] configure.ac: gl_FUNC_EXECLE if test $REPLACE_EXECLE = 1; then AC_LIBOBJ([execle]) fi gl_UNISTD_MODULE_INDICATOR([execle]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execle-tests��������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execle.sh tests/test-execle-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execle.sh check_PROGRAMS += test-execle-main test-exec-child ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execlp��������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execlp() function: Execute a program, replacing the current process. Files: lib/execlp.c m4/execlp.m4 Depends-on: unistd execvp [test $REPLACE_EXECLP = 1] malloca [test $REPLACE_EXECLP = 1] configure.ac: gl_FUNC_EXECLP if test $REPLACE_EXECLP = 1; then AC_LIBOBJ([execlp]) fi gl_UNISTD_MODULE_INDICATOR([execlp]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execlp-tests��������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execlp.sh tests/test-execlp-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execlp.sh check_PROGRAMS += test-execlp-main test-exec-child ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execute�������������������������������������������������������������0000664�0000000�0000000�00000001260�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creation of autonomous subprocesses. Files: lib/execute.h lib/execute.c m4/execute.m4 Depends-on: dup2 canonicalize environ error fatal-signal filename findprog-in free-posix msvc-nothrow gettext-h spawn posix_spawn posix_spawnp posix_spawn_file_actions_init posix_spawn_file_actions_addopen posix_spawn_file_actions_addchdir posix_spawn_file_actions_destroy posix_spawnattr_init posix_spawnattr_setsigmask posix_spawnattr_setflags posix_spawnattr_destroy stdbool stdlib sys_wait unistd wait-process windows-spawn xalloc-die configure.ac: gl_EXECUTE Makefile.am: lib_SOURCES += execute.h execute.c Include: "execute.h" Link: $(LIBTHREAD) License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execute-tests�������������������������������������������������������0000664�0000000�0000000�00000001715�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execute.sh tests/test-execute-main.c tests/test-execute-child.c tests/test-execute-script.c tests/executable-script tests/executable-script.sh tests/executable-shell-script tests/macros.h Depends-on: dup2 fcntl mkdir msvc-inval read-file stdint unistd configure.ac: dnl Test for Linux system call close_range(), declared in <unistd.h>. AC_CHECK_FUNCS([close_range]) Makefile.am: TESTS += test-execute.sh check_PROGRAMS += test-execute-main test-execute-child test_execute_main_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) # The test-execute-child program must be a real executable, not a libtool # wrapper script, and should link against as few libraries as possible. # Therefore don't link it against any libraries other than -lc. test_execute_child_LDADD = TESTS += test-execute-script check_PROGRAMS += test-execute-script test_execute_script_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) test_execute_script_CPPFLAGS = $(AM_CPPFLAGS) -DSRCDIR=\"$(srcdir)/\" ���������������������������������������������������gnulib-20210822~d383792/modules/execv���������������������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execv() function: Execute a program, replacing the current process. Files: lib/execv.c m4/execv.m4 Depends-on: unistd environ [test $REPLACE_EXECV = 1] execve [test $REPLACE_EXECV = 1] configure.ac: gl_FUNC_EXECV if test $REPLACE_EXECV = 1; then AC_LIBOBJ([execv]) fi gl_UNISTD_MODULE_INDICATOR([execv]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execv-tests���������������������������������������������������������0000664�0000000�0000000�00000000301�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execv.sh tests/test-execv-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execv.sh check_PROGRAMS += test-execv-main test-exec-child �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execve��������������������������������������������������������������0000664�0000000�0000000�00000000770�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execve() function: Execute a program, replacing the current process. Files: lib/execve.c m4/execve.m4 Depends-on: unistd posix_spawn [test $REPLACE_EXECVE = 1] close [test $REPLACE_EXECVE = 1] sys_wait [test $REPLACE_EXECVE = 1] waitpid [test $REPLACE_EXECVE = 1] configure.ac: gl_FUNC_EXECVE if test $REPLACE_EXECVE = 1; then AC_LIBOBJ([execve]) fi gl_UNISTD_MODULE_INDICATOR([execve]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������gnulib-20210822~d383792/modules/execve-tests��������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execve.sh tests/test-execve-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execve.sh check_PROGRAMS += test-execve-main test-exec-child ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execvp��������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execvp() function: Execute a program, replacing the current process. Files: lib/execvp.c m4/execvp.m4 Depends-on: unistd environ [test $REPLACE_EXECVP = 1] execvpe [test $REPLACE_EXECVP = 1] configure.ac: gl_FUNC_EXECVP if test $REPLACE_EXECVP = 1; then AC_LIBOBJ([execvp]) fi gl_UNISTD_MODULE_INDICATOR([execvp]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execvp-tests��������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execvp.sh tests/test-execvp-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execvp.sh check_PROGRAMS += test-execvp-main test-exec-child ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execvpe�������������������������������������������������������������0000664�0000000�0000000�00000001220�14110572173�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: execvpe() function: Execute a program, replacing the current process. Files: lib/execvpe.c m4/execvpe.m4 Depends-on: unistd extensions free-posix [test $HAVE_EXECVPE = 0 || test $REPLACE_EXECVPE = 1] stdbool [test $HAVE_EXECVPE = 0 || test $REPLACE_EXECVPE = 1] findprog-in [test $HAVE_EXECVPE = 0 || test $REPLACE_EXECVPE = 1] execve [test $HAVE_EXECVPE = 0 || test $REPLACE_EXECVPE = 1] configure.ac: gl_FUNC_EXECVPE if test $HAVE_EXECVPE = 0 || test $REPLACE_EXECVPE = 1; then AC_LIBOBJ([execvpe]) fi gl_UNISTD_MODULE_INDICATOR([execvpe]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/execvpe-tests�������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-execvpe.sh tests/test-execvpe-main.c tests/test-exec-child.c tests/signature.h Depends-on: Makefile.am: TESTS += test-execvpe.sh check_PROGRAMS += test-execvpe-main test-exec-child �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exitfail������������������������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set exit status for fatal signal. Files: lib/exitfail.h lib/exitfail.c Depends-on: stdlib configure.ac: Makefile.am: lib_SOURCES += exitfail.c Include: "exitfail.h" License: LGPLv2+ Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp�����������������������������������������������������������������0000664�0000000�0000000�00000000320�14110572173�0016461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp() function: exponential function. Files: m4/exp.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_EXP Makefile.am: Include: <math.h> Link: $(EXP_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp-ieee������������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp() function according to ISO C 99 with IEC 60559. Files: Depends-on: exp fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(EXP_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp-ieee-tests������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp-ieee.c tests/test-exp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-exp-ieee check_PROGRAMS += test-exp-ieee test_exp_ieee_LDADD = $(LDADD) @EXP_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp-tests�����������������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0017634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp.c tests/test-exp.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-exp check_PROGRAMS += test-exp test_exp_SOURCES = test-exp.c randomd.c test_exp_LDADD = $(LDADD) @EXP_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2����������������������������������������������������������������0000664�0000000�0000000�00000001045�14110572173�0016550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2() function: exponential base 2 function. Files: lib/exp2.c m4/exp2.m4 m4/mathfunc.m4 Depends-on: math extensions isnand [test $HAVE_EXP2 = 0 || test $REPLACE_EXP2 = 1] round [test $HAVE_EXP2 = 0 || test $REPLACE_EXP2 = 1] ldexp [test $HAVE_EXP2 = 0 || test $REPLACE_EXP2 = 1] configure.ac: gl_FUNC_EXP2 if test $HAVE_EXP2 = 0 || test $REPLACE_EXP2 = 1; then AC_LIBOBJ([exp2]) fi gl_MATH_MODULE_INDICATOR([exp2]) Makefile.am: Include: <math.h> Link: $(EXP2_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2() function according to ISO C 99 with IEC 60559. Files: Depends-on: exp2 fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(EXP2_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2-ieee.c tests/test-exp2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-exp2-ieee check_PROGRAMS += test-exp2-ieee test_exp2_ieee_LDADD = $(LDADD) @EXP2_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2-tests����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2.c tests/test-exp2.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-exp2 check_PROGRAMS += test-exp2 test_exp2_SOURCES = test-exp2.c randomd.c test_exp2_LDADD = $(LDADD) @EXP2_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2f���������������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2f() function: exponential base 2 function. Files: lib/exp2f.c m4/exp2f.m4 Depends-on: math extensions exp2 [test $HAVE_EXP2F = 0] configure.ac: gl_FUNC_EXP2F if test $HAVE_EXP2F = 0; then AC_LIBOBJ([exp2f]) fi gl_MATH_MODULE_INDICATOR([exp2f]) Makefile.am: Include: <math.h> Link: $(EXP2F_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2f-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2f() function according to ISO C 99 with IEC 60559. Files: Depends-on: exp2f fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(EXP2F_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2f-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2f-ieee.c tests/test-exp2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-exp2f-ieee check_PROGRAMS += test-exp2f-ieee test_exp2f_ieee_LDADD = $(LDADD) @EXP2F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2f-tests���������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2f.c tests/test-exp2.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-exp2f check_PROGRAMS += test-exp2f test_exp2f_SOURCES = test-exp2f.c randomf.c test_exp2f_LDADD = $(LDADD) @EXP2F_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2l���������������������������������������������������������������0000664�0000000�0000000�00000001750�14110572173�0016727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2l() function: exponential base 2 function with long double argument. Files: lib/exp2l.c lib/expl-table.c m4/exp2l.m4 Depends-on: math extensions exp2 [{ test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] roundl [{ test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_EXP2L if test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; then AC_LIBOBJ([exp2l]) AC_LIBOBJ([expl-table]) fi gl_MATH_MODULE_INDICATOR([exp2l]) Makefile.am: Include: <math.h> Link: $(EXP2L_LIBM) License: LGPL Maintainer: all ������������������������gnulib-20210822~d383792/modules/exp2l-ieee����������������������������������������������������������0000664�0000000�0000000�00000000357�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: exp2l() function according to ISO C 99 with IEC 60559. Files: m4/exp2l-ieee.m4 Depends-on: exp2l fpieee configure.ac: gl_FUNC_EXP2L_IEEE Makefile.am: Include: <math.h> Link: $(EXP2L_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2l-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2l-ieee.c tests/test-exp2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-exp2l-ieee check_PROGRAMS += test-exp2l-ieee test_exp2l_ieee_LDADD = $(LDADD) @EXP2L_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/exp2l-tests���������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp2l.c tests/test-exp2.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-exp2l check_PROGRAMS += test-exp2l test_exp2l_SOURCES = test-exp2l.c randoml.c test_exp2l_LDADD = $(LDADD) @EXP2L_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expf����������������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0016635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expf() function: exponential function. Files: lib/expf.c m4/expf.m4 Depends-on: math extensions exp [test $HAVE_EXPF = 0] configure.ac: gl_FUNC_EXPF if test $HAVE_EXPF = 0; then AC_LIBOBJ([expf]) fi gl_MATH_MODULE_INDICATOR([expf]) Makefile.am: Include: <math.h> Link: $(EXPF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expf-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expf() function according to ISO C 99 with IEC 60559. Files: Depends-on: expf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(EXPF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expf-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0020704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expf-ieee.c tests/test-exp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-expf-ieee check_PROGRAMS += test-expf-ieee test_expf_ieee_LDADD = $(LDADD) @EXPF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expf-tests����������������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expf.c tests/test-exp.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-expf check_PROGRAMS += test-expf test_expf_SOURCES = test-expf.c randomf.c test_expf_LDADD = $(LDADD) @EXPF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expl����������������������������������������������������������������0000664�0000000�0000000�00000001716�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expl() function: exponential function with long double argument. Files: lib/expl.c lib/expl-table.c m4/expl.m4 Depends-on: math extensions exp [{ test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] roundl [{ test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_EXPL if test $HAVE_EXPL = 0 || test $REPLACE_EXPL = 1; then AC_LIBOBJ([expl]) AC_LIBOBJ([expl-table]) fi gl_MATH_MODULE_INDICATOR([expl]) Makefile.am: Include: <math.h> Link: $(EXPL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������gnulib-20210822~d383792/modules/expl-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expl() function according to ISO C 99 with IEC 60559. Files: Depends-on: expl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(EXPL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expl-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0020712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expl-ieee.c tests/test-exp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-expl-ieee check_PROGRAMS += test-expl-ieee test_expl_ieee_LDADD = $(LDADD) @EXPL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expl-tests����������������������������������������������������������0000664�0000000�0000000�00000000421�14110572173�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expl.c tests/test-exp.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-expl check_PROGRAMS += test-expl test_expl_SOURCES = test-expl.c randoml.c test_expl_LDADD = $(LDADD) @EXPL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/explicit_bzero������������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Erase sensitive data from a buffer. Files: lib/explicit_bzero.c m4/explicit_bzero.m4 Depends-on: extensions string configure.ac: gl_FUNC_EXPLICIT_BZERO if test $HAVE_EXPLICIT_BZERO = 0; then AC_LIBOBJ([explicit_bzero]) gl_PREREQ_EXPLICIT_BZERO fi gl_STRING_MODULE_INDICATOR([explicit_bzero]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/explicit_bzero-tests������������������������������������������������0000664�0000000�0000000�00000000301�14110572173�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-explicit_bzero.c tests/signature.h tests/macros.h Depends-on: stdint vma-iter configure.ac: Makefile.am: TESTS += test-explicit_bzero check_PROGRAMS += test-explicit_bzero �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1���������������������������������������������������������������0000664�0000000�0000000�00000001171�14110572173�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1() function: exponential function minus one. Files: lib/expm1.c m4/expm1.m4 m4/mathfunc.m4 Depends-on: math extensions isnand [test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1] exp [test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1] round [test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1] ldexp [test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1] configure.ac: gl_FUNC_EXPM1 if test $HAVE_EXPM1 = 0 || test $REPLACE_EXPM1 = 1; then AC_LIBOBJ([expm1]) fi gl_MATH_MODULE_INDICATOR([expm1]) Makefile.am: Include: <math.h> Link: $(EXPM1_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1-ieee����������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1() function according to ISO C 99 with IEC 60559. Files: m4/expm1-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: expm1 fpieee configure.ac: gl_FUNC_EXPM1_IEEE Makefile.am: Include: <math.h> Link: $(EXPM1_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1-ieee.c tests/test-expm1-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-expm1-ieee check_PROGRAMS += test-expm1-ieee test_expm1_ieee_LDADD = $(LDADD) @EXPM1_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1.c tests/test-expm1.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-expm1 check_PROGRAMS += test-expm1 test_expm1_SOURCES = test-expm1.c randomd.c test_expm1_LDADD = $(LDADD) @EXPM1_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1f��������������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1f() function: exponential function minus one. Files: lib/expm1f.c m4/expm1f.m4 Depends-on: math extensions expm1 [test $HAVE_EXPM1F = 0 || test $REPLACE_EXPM1F = 1] configure.ac: gl_FUNC_EXPM1F if test $HAVE_EXPM1F = 0 || test $REPLACE_EXPM1F = 1; then AC_LIBOBJ([expm1f]) fi gl_MATH_MODULE_INDICATOR([expm1f]) Makefile.am: Include: <math.h> Link: $(EXPM1F_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1f-ieee���������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0020000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1f() function according to ISO C 99 with IEC 60559. Files: m4/expm1f-ieee.m4 Depends-on: expm1f fpieee expm1-ieee [test $HAVE_EXPM1F = 0 || test $REPLACE_EXPM1F = 1] configure.ac: gl_FUNC_EXPM1F_IEEE Makefile.am: Include: <math.h> Link: $(EXPM1F_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1f-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1f-ieee.c tests/test-expm1-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-expm1f-ieee check_PROGRAMS += test-expm1f-ieee test_expm1f_ieee_LDADD = $(LDADD) @EXPM1F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1f-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1f.c tests/test-expm1.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-expm1f check_PROGRAMS += test-expm1f test_expm1f_SOURCES = test-expm1f.c randomf.c test_expm1f_LDADD = $(LDADD) @EXPM1F_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1l��������������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1l() function: exponential function minus one with long double argument. Files: lib/expm1l.c m4/expm1l.m4 Depends-on: math extensions expm1 [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] expl [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] roundl [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_EXPM1L if test $HAVE_EXPM1L = 0 || test $REPLACE_EXPM1L = 1; then AC_LIBOBJ([expm1l]) fi gl_MATH_MODULE_INDICATOR([expm1l]) Makefile.am: Include: <math.h> Link: $(EXPM1L_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1l-ieee���������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0020000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expm1l() function according to ISO C 99 with IEC 60559. Files: Depends-on: expm1l fpieee expm1-ieee [test $HAVE_EXPM1L = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: AC_REQUIRE([gl_FUNC_EXPM1L]) Makefile.am: Include: <math.h> Link: $(EXPM1L_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1l-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1l-ieee.c tests/test-expm1-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-expm1l-ieee check_PROGRAMS += test-expm1l-ieee test_expm1l_ieee_LDADD = $(LDADD) @EXPM1L_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/expm1l-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expm1l.c tests/test-expm1.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: configure.ac: Makefile.am: TESTS += test-expm1l check_PROGRAMS += test-expm1l test_expm1l_SOURCES = test-expm1l.c randoml.c test_expm1l_LDADD = $(LDADD) @EXPM1L_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/extensions����������������������������������������������������������0000664�0000000�0000000�00000000274�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable extensions in standard headers Files: m4/extensions.m4 Depends-on: configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: Paul Eggert and Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/extern-inline�������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: 'extern inline' a la ISO C99. Files: m4/extern-inline.m4 Depends-on: configure.ac: AC_REQUIRE([gl_EXTERN_INLINE]) Makefile.am: Include: License: unlimited Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabs����������������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0016605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabs() function: absolute value. Files: m4/fabs.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_FABS Makefile.am: Include: <math.h> Link: $(FABS_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabs-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabs() function according to ISO C 99 with IEC 60559. Files: Depends-on: fabs fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FABS_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabs-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabs-ieee.c tests/test-fabs-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fabs-ieee check_PROGRAMS += test-fabs-ieee test_fabs_ieee_LDADD = $(LDADD) @FABS_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabs-tests����������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabs.c tests/test-fabs.h tests/signature.h tests/minus-zero.h tests/macros.h tests/randomd.c Depends-on: signbit configure.ac: Makefile.am: TESTS += test-fabs check_PROGRAMS += test-fabs test_fabs_SOURCES = test-fabs.c randomd.c test_fabs_LDADD = $(LDADD) @FABS_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsf���������������������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0016760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabsf() function: absolute value. Files: lib/fabsf.c m4/fabsf.m4 m4/mathfunc.m4 Depends-on: math extensions fabs [test $HAVE_FABSF = 0] configure.ac: gl_FUNC_FABSF if test $HAVE_FABSF = 0; then AC_LIBOBJ([fabsf]) fi gl_MATH_MODULE_INDICATOR([fabsf]) Makefile.am: Include: <math.h> Link: $(FABSF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabsf() function according to ISO C 99 with IEC 60559. Files: Depends-on: fabsf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FABSF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabsf-ieee.c tests/test-fabs-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fabsf-ieee check_PROGRAMS += test-fabsf-ieee test_fabsf_ieee_LDADD = $(LDADD) @FABSF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsf-tests���������������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabsf.c tests/test-fabs.h tests/signature.h tests/minus-zero.h tests/macros.h tests/randomf.c Depends-on: signbit configure.ac: Makefile.am: TESTS += test-fabsf check_PROGRAMS += test-fabsf test_fabsf_SOURCES = test-fabsf.c randomf.c test_fabsf_LDADD = $(LDADD) @FABSF_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsl���������������������������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0016753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabsl() function: absolute value. Files: lib/fabsl.c m4/fabsl.m4 m4/mathfunc.m4 Depends-on: math extensions fabs [{ test $HAVE_FABSL = 0 || test $REPLACE_FABSL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] signbit [{ test $HAVE_FABSL = 0 || test $REPLACE_FABSL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_FABSL if test $HAVE_FABSL = 0 || test $REPLACE_FABSL = 1; then AC_LIBOBJ([fabsl]) fi gl_MATH_MODULE_INDICATOR([fabsl]) Makefile.am: Include: <math.h> Link: $(FABSL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabsl() function according to ISO C 99 with IEC 60559. Files: Depends-on: fabsl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FABSL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabsl-ieee.c tests/test-fabs-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fabsl-ieee check_PROGRAMS += test-fabsl-ieee test_fabsl_ieee_LDADD = $(LDADD) @FABSL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fabsl-tests���������������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabsl.c tests/test-fabs.h tests/signature.h tests/minus-zero.h tests/macros.h tests/randoml.c Depends-on: signbit configure.ac: Makefile.am: TESTS += test-fabsl check_PROGRAMS += test-fabsl test_fabsl_SOURCES = test-fabsl.c randoml.c test_fabsl_LDADD = $(LDADD) @FABSL_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/faccessat�����������������������������������������������������������0000664�0000000�0000000�00000002325�14110572173�0017630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: faccessat() function: check user's permissions for a file. Files: lib/faccessat.c lib/at-func.c m4/faccessat.m4 Depends-on: unistd extensions at-internal [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] errno [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] fchdir [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] fcntl-h [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] filename [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] fstatat [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] openat-die [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] openat-h [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] save-cwd [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] euidaccess [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1] configure.ac: gl_FUNC_FACCESSAT if test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1; then AC_LIBOBJ([faccessat]) gl_PREREQ_FACCESSAT fi gl_MODULE_INDICATOR([faccessat]) gl_UNISTD_MODULE_INDICATOR([faccessat]) Makefile.am: Include: <fcntl.h> <unistd.h> Link: $(LIB_EACCESS) License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/faccessat-tests�����������������������������������������������������0000664�0000000�0000000�00000000353�14110572173�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-faccessat.c tests/signature.h tests/macros.h Depends-on: fcntl-h symlink configure.ac: Makefile.am: TESTS += test-faccessat check_PROGRAMS += test-faccessat test_faccessat_LDADD = $(LDADD) $(LIB_EACCESS) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fatal-signal��������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Emergency actions in case of a fatal signal. Files: lib/fatal-signal.h lib/fatal-signal.c m4/fatal-signal.m4 m4/sig_atomic_t.m4 Depends-on: c99 stdbool unistd sigaction lock thread-optim sigprocmask raise configure.ac: gl_FATAL_SIGNAL Makefile.am: lib_SOURCES += fatal-signal.h fatal-signal.c Include: "fatal-signal.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fbufmode������������������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fbufmode() function: Determine the buffering mode of a FILE stream. Files: lib/fbufmode.h lib/fbufmode.c lib/stdio-impl.h m4/fbufmode.m4 Depends-on: configure.ac: gl_FUNC_FBUFMODE Makefile.am: lib_SOURCES += fbufmode.c Include: "fbufmode.h" License: LGPL Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fbufmode-tests������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fbufmode.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fbufmode check_PROGRAMS += test-fbufmode MOSTLYCLEANFILES += t-fbufmode.tmp ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchdir��������������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fchdir() function: change current directory, given an open file descriptor. Files: lib/fchdir.c m4/fchdir.m4 Depends-on: unistd assure [test $HAVE_FCHDIR = 0] chdir [test $HAVE_FCHDIR = 0] close [test $HAVE_FCHDIR = 0] dirent [test $HAVE_FCHDIR = 0] dirfd [test $HAVE_FCHDIR = 0] dup2 [test $HAVE_FCHDIR = 0] fcntl [test $HAVE_FCHDIR = 0] fcntl-h [test $HAVE_FCHDIR = 0] filename [test $HAVE_FCHDIR = 0] filenamecat-lgpl [test $HAVE_FCHDIR = 0] free-posix [test $HAVE_FCHDIR = 0] fstat [test $HAVE_FCHDIR = 0] getcwd-lgpl [test $HAVE_FCHDIR = 0] malloc-posix [test $HAVE_FCHDIR = 0] open [test $HAVE_FCHDIR = 0] realloc-posix [test $HAVE_FCHDIR = 0] stat [test $HAVE_FCHDIR = 0] stdbool [test $HAVE_FCHDIR = 0] strdup-posix [test $HAVE_FCHDIR = 0] sys_stat [test $HAVE_FCHDIR = 0] configure.ac: gl_FUNC_FCHDIR gl_UNISTD_MODULE_INDICATOR([fchdir]) Makefile.am: Include: <unistd.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchdir-tests��������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fchdir.c tests/signature.h tests/macros.h Depends-on: cloexec getcwd-lgpl configure.ac: Makefile.am: TESTS += test-fchdir check_PROGRAMS += test-fchdir test_fchdir_LDADD = $(LDADD) $(LIBINTL) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchmod-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fchmod.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fchmod check_PROGRAMS += test-fchmod �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchmodat������������������������������������������������������������0000664�0000000�0000000�00000002223�14110572173�0017456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fchmodat() function: Change access permissions of a file at a directory. Files: lib/fchmodat.c lib/at-func.c m4/fchmodat.m4 Depends-on: sys_stat extensions errno [test $HAVE_FCHMODAT = 0 || test $REPLACE_FCHMODAT = 1] fcntl-h [test $HAVE_FCHMODAT = 0 || test $REPLACE_FCHMODAT = 1] unistd [test $HAVE_FCHMODAT = 0 || test $REPLACE_FCHMODAT = 1] intprops [test $HAVE_FCHMODAT = 0 || test $REPLACE_FCHMODAT = 1] c99 [test $REPLACE_FCHMODAT = 1] fstatat [test $REPLACE_FCHMODAT = 1] at-internal [test $HAVE_FCHMODAT = 0] extern-inline [test $HAVE_FCHMODAT = 0] fchdir [test $HAVE_FCHMODAT = 0] filename [test $HAVE_FCHMODAT = 0] lchmod [test $HAVE_FCHMODAT = 0] openat-die [test $HAVE_FCHMODAT = 0] openat-h [test $HAVE_FCHMODAT = 0] save-cwd [test $HAVE_FCHMODAT = 0] configure.ac: gl_FUNC_FCHMODAT if test $HAVE_FCHMODAT = 0 || test $REPLACE_FCHMODAT = 1; then AC_LIBOBJ([fchmodat]) gl_PREREQ_FCHMODAT fi gl_SYS_STAT_MODULE_INDICATOR([fchmodat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchmodat-tests������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0020611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fchmodat.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fchmodat check_PROGRAMS += test-fchmodat test_fchmodat_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchown-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fchown.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fchown check_PROGRAMS += test-fchown �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchownat������������������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fchownat() function: Change the owner of a file at a directory. Files: lib/fchownat.c lib/at-func.c m4/fchownat.m4 Depends-on: unistd extensions at-internal [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] errno [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] extern-inline [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] fchdir [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] fcntl-h [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] filename [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] lchown [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] openat-die [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] openat-h [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] save-cwd [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] statat [test $REPLACE_FCHOWNAT = 1] configure.ac: gl_FUNC_FCHOWNAT if test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1; then AC_LIBOBJ([fchownat]) fi gl_UNISTD_MODULE_INDICATOR([fchownat]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fchownat-tests������������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-chown.h tests/test-lchown.h tests/test-fchownat.c tests/signature.h tests/macros.h Depends-on: errno ignore-value intprops mgetgroups nanosleep openat-h stat-time symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-fchownat check_PROGRAMS += test-fchownat test_fchownat_LDADD = $(LDADD) $(LIB_NANOSLEEP) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fclose��������������������������������������������������������������0000664�0000000�0000000�00000000776�14110572173�0017157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fclose() function: close a stream. Files: lib/fclose.c m4/fclose.m4 Depends-on: stdio close [test $REPLACE_FCLOSE = 1] fflush [test $REPLACE_FCLOSE = 1] freading [test $REPLACE_FCLOSE = 1] lseek [test $REPLACE_FCLOSE = 1] msvc-inval [test $REPLACE_FCLOSE = 1] configure.ac: gl_FUNC_FCLOSE if test $REPLACE_FCLOSE = 1; then AC_LIBOBJ([fclose]) fi gl_STDIO_MODULE_INDICATOR([fclose]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ��gnulib-20210822~d383792/modules/fclose-tests��������������������������������������������������������0000664�0000000�0000000�00000000177�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fclose.c Depends-on: fdopen configure.ac: Makefile.am: TESTS += test-fclose check_PROGRAMS += test-fclose �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl���������������������������������������������������������������0000664�0000000�0000000�00000001177�14110572173�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Support for the fcntl() function, actions F_DUPFD, F_DUPFD_CLOEXEC, F_GETFD. Files: m4/fcntl.m4 lib/fcntl.c Depends-on: fcntl-h extensions close [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1] dup2 [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1] getdtablesize [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1] msvc-nothrow [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1] configure.ac: gl_FUNC_FCNTL if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then AC_LIBOBJ([fcntl]) fi gl_FCNTL_MODULE_INDICATOR([fcntl]) Makefile.am: Include: <fcntl.h> License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl-h�������������������������������������������������������������0000664�0000000�0000000�00000003720�14110572173�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Like <fcntl.h>, but with non-working flags defined to 0. Files: lib/fcntl.in.h m4/fcntl_h.m4 m4/fcntl-o.m4 m4/pid_t.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_types unistd configure.ac: gl_FCNTL_H gl_FCNTL_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += fcntl.h # 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) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -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)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t Include: <fcntl.h> License: LGPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/fcntl-h-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fcntl-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-fcntl-h-c++ check_PROGRAMS += test-fcntl-h-c++ test_fcntl_h_c___SOURCES = test-fcntl-h-c++.cc test_fcntl_h_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIBSOCKET) endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl-h-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fcntl-h.c Depends-on: fcntl-h-c++-tests configure.ac: Makefile.am: TESTS += test-fcntl-h check_PROGRAMS += test-fcntl-h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl-safer���������������������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0020105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: File descriptor functions that avoid clobbering STD{IN,OUT,ERR}_FILENO. Files: lib/fcntl--.h lib/creat-safer.c lib/fcntl-safer.h lib/open-safer.c m4/fcntl-safer.m4 m4/mode_t.m4 Depends-on: fcntl-h open unistd-safer configure.ac: gl_FCNTL_SAFER gl_MODULE_INDICATOR([fcntl-safer]) Makefile.am: lib_SOURCES += creat-safer.c open-safer.c Include: "fcntl-safer.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000276�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-open.h tests/test-fcntl-safer.c tests/macros.h Depends-on: stdbool fcntl symlink configure.ac: Makefile.am: TESTS += test-fcntl-safer check_PROGRAMS += test-fcntl-safer ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fcntl-tests���������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fcntl.c tests/signature.h tests/macros.h Depends-on: binary-io close getdtablesize msvc-nothrow stdbool configure.ac: Makefile.am: TESTS += test-fcntl check_PROGRAMS += test-fcntl �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fd-hook�������������������������������������������������������������0000664�0000000�0000000�00000000375�14110572173�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hook for making file descriptor functions (close(), ioctl()) extensible. Files: lib/fd-hook.h lib/fd-hook.c Depends-on: unistd configure.ac: Makefile.am: lib_SOURCES += fd-hook.c Include: "fd-hook.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fd-safer-flag�������������������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fd_safer_flag() function: adjust a file descriptor result so that it avoids clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Files: lib/fd-safer-flag.c lib/dup-safer-flag.c Depends-on: cloexec fcntl unistd-safer configure.ac: gl_MODULE_INDICATOR([fd-safer-flag]) Makefile.am: lib_SOURCES += fd-safer-flag.c dup-safer-flag.c Include: "unistd-safer.h" License: GPL Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdatasync�����������������������������������������������������������0000664�0000000�0000000�00000000623�14110572173�0017647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fdatasync(2) function: synchronize writes to a file. Files: lib/fdatasync.c m4/fdatasync.m4 Depends-on: fsync [test $HAVE_FDATASYNC = 0] unistd configure.ac: gl_FUNC_FDATASYNC if test $HAVE_FDATASYNC = 0; then AC_LIBOBJ([fdatasync]) fi gl_UNISTD_MODULE_INDICATOR([fdatasync]) Makefile.am: Include: <unistd.h> Link: $(LIB_FDATASYNC) License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdatasync-tests�����������������������������������������������������0000664�0000000�0000000�00000000331�14110572173�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fdatasync.c tests/signature.h tests/macros.h Depends-on: errno configure.ac: Makefile.am: TESTS += test-fdatasync check_PROGRAMS += test-fdatasync test_fdatasync_LDADD = $(LDADD) $(LIB_FDATASYNC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdl�����������������������������������������������������������������0000664�0000000�0000000�00000000471�14110572173�0016441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Free Documentation License in Texinfo format. Notice: Don't use this module! Instead, copy the referenced license file into your version control repository. Files: doc/fdl.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdl-1.3�������������������������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0016733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Free Documentation License version 1.3 in Texinfo format. Notice: Don't use this module! Instead, copy the referenced license file into your version control repository. Files: doc/fdl-1.3.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdopen��������������������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fdopen() function: open a stream with a given file descriptor. Files: lib/fdopen.c m4/fdopen.m4 Depends-on: stdio msvc-inval [test $REPLACE_FDOPEN = 1] configure.ac: gl_FUNC_FDOPEN if test $REPLACE_FDOPEN = 1; then AC_LIBOBJ([fdopen]) gl_PREREQ_FDOPEN fi gl_STDIO_MODULE_INDICATOR([fdopen]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdopen-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fdopen.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fdopen check_PROGRAMS += test-fdopen �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdopendir�����������������������������������������������������������0000664�0000000�0000000�00000001445�14110572173�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Open a directory stream from a file descriptor. Files: lib/fdopendir.c m4/fdopendir.m4 Depends-on: dirent extensions at-internal [test $HAVE_FDOPENDIR = 0] dirfd [test $HAVE_FDOPENDIR = 0] dup [test $HAVE_FDOPENDIR = 0] errno [test $HAVE_FDOPENDIR = 0] fchdir [test $HAVE_FDOPENDIR = 0] fstat [test $HAVE_FDOPENDIR = 0] openat-die [test $HAVE_FDOPENDIR = 0] opendir [test $HAVE_FDOPENDIR = 0] save-cwd [test $HAVE_FDOPENDIR = 0] configure.ac: gl_FUNC_FDOPENDIR if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then AC_LIBOBJ([fdopendir]) fi gl_DIRENT_MODULE_INDICATOR([fdopendir]) gl_MODULE_INDICATOR([fdopendir]) Makefile.am: Include: <dirent.h> License: GPL Maintainer: Jim Meyering, Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdopendir-tests�����������������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fdopendir.c tests/signature.h tests/macros.h Depends-on: open opendir closedir configure.ac: Makefile.am: TESTS += test-fdopendir check_PROGRAMS += test-fdopendir test_fdopendir_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdutimensat���������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set file access and modification times, relative to a directory. Files: lib/fdutimensat.c lib/utimens.h Depends-on: futimens utimensat configure.ac: gl_MODULE_INDICATOR([fdutimensat]) Makefile.am: lib_SOURCES += fdutimensat.c Include: <fcntl.h> "utimens.h" License: GPL Maintainer: Paul Eggert, Jim Meyering, Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fdutimensat-tests���������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0021356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-futimens.h tests/test-lutimens.h tests/test-utimens.h tests/test-utimens-common.h tests/test-fdutimensat.c tests/macros.h Depends-on: fcntl-h ignore-value intprops nanosleep openat timespec dup utimecmp configure.ac: Makefile.am: TESTS += test-fdutimensat check_PROGRAMS += test-fdutimensat test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) \ $(LIB_NANOSLEEP) @LIBINTL@ ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fflush��������������������������������������������������������������0000664�0000000�0000000�00000001375�14110572173�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Discard pending data on both input and output streams. Files: lib/fflush.c lib/stdio-impl.h m4/fflush.m4 Depends-on: stdio fpurge [test $REPLACE_FFLUSH = 1] ftello [test $REPLACE_FFLUSH = 1] freading [test $REPLACE_FFLUSH = 1] lseek [test $REPLACE_FFLUSH = 1] unistd [test $REPLACE_FFLUSH = 1] fseeko [test $REPLACE_FFLUSH = 1] configure.ac-early: AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FFLUSH if test $REPLACE_FFLUSH = 1; then AC_LIBOBJ([fflush]) gl_PREREQ_FFLUSH fi gl_MODULE_INDICATOR([fflush]) gl_STDIO_MODULE_INDICATOR([fflush]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fflush-tests��������������������������������������������������������0000664�0000000�0000000�00000000435�14110572173�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fflush.c tests/test-fflush2.sh tests/test-fflush2.c tests/signature.h tests/macros.h Depends-on: binary-io fdopen fseeko configure.ac: Makefile.am: TESTS += test-fflush test-fflush2.sh check_PROGRAMS += test-fflush test-fflush2 MOSTLYCLEANFILES += test-fflush.txt �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffs�����������������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0016455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the index of the least-significant set bit. Files: lib/ffs.c m4/ffs.m4 Depends-on: strings configure.ac: gl_FUNC_FFS if test $HAVE_FFS = 0; then AC_LIBOBJ([ffs]) fi gl_STRINGS_MODULE_INDICATOR([ffs]) Makefile.am: Include: <strings.h> License: LGPLv2+ Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffs-tests�����������������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ffs.c tests/macros.h tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-ffs check_PROGRAMS += test-ffs ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffsl����������������������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0016631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the index of the least-significant set bit. Files: lib/ffsl.h lib/ffsl.c m4/ffsl.m4 Depends-on: extensions string ffs [test $HAVE_FFSL = 0] configure.ac: gl_FUNC_FFSL if test $HAVE_FFSL = 0; then AC_LIBOBJ([ffsl]) fi gl_STRING_MODULE_INDICATOR([ffsl]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffsl-tests����������������������������������������������������������0000664�0000000�0000000�00000000223�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ffsl.c tests/macros.h tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-ffsl check_PROGRAMS += test-ffsl �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffsll���������������������������������������������������������������0000664�0000000�0000000�00000000652�14110572173�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the index of the least-significant set bit. Files: lib/ffsl.h lib/ffsll.c m4/ffsll.m4 Depends-on: extensions string ffs [test $HAVE_FFSLL = 0 || test $REPLACE_FFSLL = 1] configure.ac: gl_FUNC_FFSLL if test $HAVE_FFSLL = 0 || test $REPLACE_FFSLL = 1; then AC_LIBOBJ([ffsll]) fi gl_STRING_MODULE_INDICATOR([ffsll]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Eric Blake ��������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ffsll-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ffsll.c tests/macros.h tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-ffsll check_PROGRAMS += test-ffsll ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fgetc-tests���������������������������������������������������������0000664�0000000�0000000�00000000257�14110572173�0020126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fgetc.c tests/signature.h tests/macros.h Depends-on: unistd fdopen msvc-inval configure.ac: Makefile.am: TESTS += test-fgetc check_PROGRAMS += test-fgetc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/file-has-acl��������������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Whether a file has an ACL. Files: lib/acl-internal.h lib/file-has-acl.c m4/acl.m4 Depends-on: acl-permissions free-posix stat configure.ac: gl_FILE_HAS_ACL Makefile.am: lib_SOURCES += file-has-acl.c Include: "acl.h" Link: $(LIB_HAS_ACL) License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/file-has-acl-tests��������������������������������������������������0000664�0000000�0000000�00000000663�14110572173�0021264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-file-has-acl.sh tests/test-file-has-acl-1.sh tests/test-file-has-acl-2.sh tests/test-file-has-acl.c tests/macros.h Depends-on: unistd test-framework-sh configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += \ test-file-has-acl.sh test-file-has-acl-1.sh test-file-has-acl-2.sh TESTS_ENVIRONMENT += USE_ACL=$(USE_ACL) check_PROGRAMS += test-file-has-acl test_file_has_acl_LDADD = $(LDADD) $(LIB_HAS_ACL) �����������������������������������������������������������������������������gnulib-20210822~d383792/modules/file-set������������������������������������������������������������0000664�0000000�0000000�00000000414�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Very specialized set-of-files code. Files: lib/file-set.c lib/file-set.h Depends-on: hash hash-triple-simple stdbool xalloc xalloc-die configure.ac: Makefile.am: lib_SOURCES += file-set.c Include: "file-set.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/file-type�����������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return a string describing the type of a file. Files: lib/file-type.h lib/file-type.c Depends-on: gettext-h sys_stat configure.ac: Makefile.am: lib_SOURCES += file-type.c Include: "file-type.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fileblocks����������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Estimate number of blocks of a file, if 'struct stat' doesn't have st_blocks. Files: lib/fileblocks.c m4/fileblocks.m4 Depends-on: configure.ac: gl_FILEBLOCKS if test $ac_cv_member_struct_stat_st_blocks = no; then AC_LIBOBJ([fileblocks]) gl_PREREQ_FILEBLOCKS fi Makefile.am: Include: License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filemode������������������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return a string (?rwxrwxrwx format) describing the type and permissions of a file. Files: lib/filemode.h lib/filemode.c m4/filemode.m4 Depends-on: sys_stat configure.ac: gl_FILEMODE Makefile.am: lib_SOURCES += filemode.c Include: "filemode.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filename������������������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Basic filename support macros. Files: lib/filename.h Depends-on: configure.ac: Makefile.am: Include: "filename.h" License: LGPLv2+ Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filenamecat���������������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate two arbitrary file names. Files: lib/filenamecat.c m4/filenamecat.m4 Depends-on: filenamecat-lgpl xalloc configure.ac: gl_FILE_NAME_CONCAT gl_MODULE_INDICATOR([filenamecat]) Makefile.am: lib_SOURCES += filenamecat.c Include: "filenamecat.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filenamecat-lgpl����������������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0021073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate two arbitrary file names. Files: lib/filenamecat.h lib/filenamecat-lgpl.c m4/filenamecat.m4 Depends-on: c99 basename-lgpl filename malloc-posix configure.ac: gl_FILE_NAME_CONCAT_LGPL Makefile.am: lib_SOURCES += filenamecat-lgpl.c Include: "filenamecat.h" License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filenamecat-tests���������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0021310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-filenamecat.c Depends-on: idx stdbool configure.ac: Makefile.am: TESTS += test-filenamecat check_PROGRAMS += test-filenamecat test_filenamecat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filevercmp����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0020027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: compare version strings and version-containing file names Files: lib/filevercmp.h lib/filevercmp.c Depends-on: c-ctype stdbool string configure.ac: Makefile.am: lib_SOURCES += filevercmp.c Include: "filevercmp.h" License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/filevercmp-tests����������������������������������������������������0000664�0000000�0000000�00000000223�14110572173�0021163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-filevercmp.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-filevercmp check_PROGRAMS += test-filevercmp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/findprog������������������������������������������������������������0000664�0000000�0000000�00000000471�14110572173�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locating a program in PATH. Files: lib/findprog.h lib/findprog.c m4/findprog.m4 m4/eaccess.m4 Depends-on: stdbool sys_stat xalloc xconcat-filename access stat unistd configure.ac: gl_FINDPROG Makefile.am: lib_SOURCES += findprog.h findprog.c Include: "findprog.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/findprog-in���������������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locating a program in a given path. Files: lib/findprog.h lib/findprog-in.c m4/findprog-in.m4 m4/eaccess.m4 Depends-on: stdbool sys_stat filename concat-filename access stat strdup-posix malloc-posix unistd configure.ac: gl_FINDPROG_IN Makefile.am: lib_SOURCES += findprog.h findprog-in.c Include: "findprog.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/findprog-lgpl�������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locating a program in PATH (LGPLed version). Files: lib/findprog.h lib/findprog.c lib/findprog-lgpl.c m4/findprog.m4 m4/eaccess.m4 Depends-on: stdbool sys_stat strdup concat-filename access stat unistd configure.ac: gl_FINDPROG gl_MODULE_INDICATOR([findprog-lgpl]) Makefile.am: lib_SOURCES += findprog.h findprog-lgpl.c Include: "findprog.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/flexmember����������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0020021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Flexible array member support Files: lib/flexmember.h m4/flexmember.m4 Depends-on: configure.ac: AC_C_FLEXIBLE_ARRAY_MEMBER Makefile.am: Include: License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/float���������������������������������������������������������������0000664�0000000�0000000�00000002206�14110572173�0016777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A correct <float.h>. Files: lib/float.in.h lib/float.c lib/itold.c m4/float_h.m4 Depends-on: include_next configure.ac: gl_FLOAT_H if test $REPLACE_FLOAT_LDBL = 1; then AC_LIBOBJ([float]) fi if test $REPLACE_ITOLD = 1; then AC_LIBOBJ([itold]) fi Makefile.am: BUILT_SOURCES += $(FLOAT_H) # We need the following in order to create <float.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_FLOAT_H float.h: float.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ < $(srcdir)/float.in.h; \ } > $@-t && \ mv $@-t $@ else float.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += float.h float.h-t Include: <float.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/float-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-float-c++.cc tests/test-float-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-float-c++ check_PROGRAMS += test-float-c++ test_float_c___SOURCES = test-float-c++.cc test-float-c++2.cc endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/float-tests���������������������������������������������������������0000664�0000000�0000000�00000000241�14110572173�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-float.c tests/macros.h Depends-on: fpieee fpucw float-c++-tests configure.ac: Makefile.am: TESTS += test-float check_PROGRAMS += test-float ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/flock���������������������������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: flock(2) function: advisory file locks. Files: lib/flock.c m4/flock.m4 Depends-on: sys_file msvc-nothrow [test $HAVE_FLOCK = 0] configure.ac: gl_FUNC_FLOCK if test $HAVE_FLOCK = 0; then AC_LIBOBJ([flock]) gl_PREREQ_FLOCK fi gl_SYS_FILE_MODULE_INDICATOR([flock]) Makefile.am: Include: <sys/file.h> License: LGPLv2+ Maintainer: Richard W.M. Jones, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/flock-tests���������������������������������������������������������0000664�0000000�0000000�00000000235�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-flock.c tests/signature.h tests/macros.h Depends-on: unistd configure.ac: Makefile.am: TESTS += test-flock check_PROGRAMS += test-flock �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floor���������������������������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floor() function: round towards negative infinity. Files: lib/floor.c m4/floor.m4 Depends-on: math float [test $REPLACE_FLOOR = 1] configure.ac: AC_REQUIRE([gl_FUNC_FLOOR]) if test $REPLACE_FLOOR = 1; then AC_LIBOBJ([floor]) fi gl_MATH_MODULE_INDICATOR([floor]) Makefile.am: Include: <math.h> Link: $(FLOOR_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floor-ieee����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floor() function according to ISO C 99 with IEC 60559. Files: m4/floor-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: floor configure.ac: gl_FUNC_FLOOR_IEEE Makefile.am: Include: <math.h> Link: $(FLOOR_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floor-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floor-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-floor-ieee check_PROGRAMS += test-floor-ieee test_floor_ieee_LDADD = $(LDADD) @FLOOR_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floor-tests���������������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0020157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floor1.c tests/test-floor2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnand-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-floor1 test-floor2 check_PROGRAMS += test-floor1 test-floor2 test_floor1_LDADD = $(LDADD) @FLOOR_LIBM@ test_floor2_LDADD = $(LDADD) @FLOOR_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorf��������������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floorf() function: round towards negative infinity. Files: lib/floorf.c lib/floor.c m4/floorf.m4 Depends-on: math extensions float [test $HAVE_DECL_FLOORF = 0 || test $REPLACE_FLOORF = 1] configure.ac: gl_FUNC_FLOORF if test $HAVE_DECL_FLOORF = 0 || test $REPLACE_FLOORF = 1; then AC_LIBOBJ([floorf]) fi gl_MATH_MODULE_INDICATOR([floorf]) Makefile.am: Include: <math.h> Link: $(FLOORF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������gnulib-20210822~d383792/modules/floorf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000414�14110572173�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floorf() function according to ISO C 99 with IEC 60559. Files: m4/floorf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: floorf configure.ac: gl_FUNC_FLOORF_IEEE Makefile.am: Include: <math.h> Link: $(FLOORF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0021224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorf-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-floorf-ieee check_PROGRAMS += test-floorf-ieee test_floorf_ieee_LDADD = $(LDADD) @FLOORF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorf-tests��������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorf1.c tests/test-floorf2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnanf-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-floorf1 test-floorf2 check_PROGRAMS += test-floorf1 test-floorf2 test_floorf1_LDADD = $(LDADD) @FLOORF_LIBM@ test_floorf2_LDADD = $(LDADD) @FLOORF_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorl��������������������������������������������������������������0000664�0000000�0000000�00000001201�14110572173�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floorl() function: round towards negative infinity. Files: lib/floorl.c lib/floor.c m4/floorl.m4 Depends-on: math extensions floor [{ test $HAVE_DECL_FLOORL = 0 || test $REPLACE_FLOORL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_DECL_FLOORL = 0 || test $REPLACE_FLOORL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: AC_REQUIRE([gl_FUNC_FLOORL]) if test $HAVE_DECL_FLOORL = 0 || test $REPLACE_FLOORL = 1; then AC_LIBOBJ([floorl]) fi gl_MATH_MODULE_INDICATOR([floorl]) Makefile.am: Include: <math.h> Link: $(FLOORL_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: floorl() function according to ISO C 99 with IEC 60559. Files: Depends-on: floorl configure.ac: Makefile.am: Include: <math.h> Link: $(FLOORL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorl-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: fpucw isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-floorl-ieee check_PROGRAMS += test-floorl-ieee test_floorl_ieee_LDADD = $(LDADD) @FLOORL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/floorl-tests��������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorl.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: fpucw isnanl-nolibm float configure.ac: Makefile.am: TESTS += test-floorl check_PROGRAMS += test-floorl test_floorl_LDADD = $(LDADD) @FLOORL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fma�����������������������������������������������������������������0000664�0000000�0000000�00000001450�14110572173�0016435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fma() function: fused multiply-add. Files: lib/fma.c lib/float+.h m4/fma.m4 m4/fegetround.m4 m4/mathfunc.m4 Depends-on: math float [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] stdbool [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] verify [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] isfinite [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] integer_length [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] frexp [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] ldexp [test $HAVE_FMA = 0 || test $REPLACE_FMA = 1] configure.ac: gl_FUNC_FMA if test $HAVE_FMA = 0 || test $REPLACE_FMA = 1; then AC_LIBOBJ([fma]) gl_PREREQ_FMA fi gl_MATH_MODULE_INDICATOR([fma]) Makefile.am: Include: <math.h> Link: $(FMA_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fma-ieee������������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fma() function according to ISO C 99 with IEC 60559. Files: Depends-on: fma fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FMA_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fma-ieee-tests������������������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fma-ieee.c tests/test-fma-ieee.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm configure.ac: Makefile.am: TESTS += test-fma-ieee check_PROGRAMS += test-fma-ieee test_fma_ieee_LDADD = $(LDADD) @FMA_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fma-tests�����������������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0017601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fma1.c tests/test-fma1.h tests/test-fma2.c tests/test-fma2.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h lib/float+.h Depends-on: float isnand-nolibm ldexp configure.ac: Makefile.am: TESTS += test-fma1 test-fma2 check_PROGRAMS += test-fma1 test-fma2 test_fma1_LDADD = $(LDADD) @FMA_LIBM@ test_fma2_LDADD = $(LDADD) @FMA_LIBM@ @LDEXP_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmaf����������������������������������������������������������������0000664�0000000�0000000�00000001525�14110572173�0016606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmaf() function: fused multiply-add. Files: lib/fmaf.c lib/fma.c lib/float+.h m4/fmaf.m4 m4/fegetround.m4 m4/mathfunc.m4 Depends-on: math extensions float [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] stdbool [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] verify [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] isfinite [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] integer_length [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] frexpf [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] ldexpf [test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1] configure.ac: gl_FUNC_FMAF if test $HAVE_FMAF = 0 || test $REPLACE_FMAF = 1; then AC_LIBOBJ([fmaf]) gl_PREREQ_FMAF fi gl_MATH_MODULE_INDICATOR([fmaf]) Makefile.am: Include: <math.h> Link: $(FMAF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmaf-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmaf() function according to ISO C 99 with IEC 60559. Files: Depends-on: fmaf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FMAF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmaf-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000375�14110572173�0020655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmaf-ieee.c tests/test-fma-ieee.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm configure.ac: Makefile.am: TESTS += test-fmaf-ieee check_PROGRAMS += test-fmaf-ieee test_fmaf_ieee_LDADD = $(LDADD) @FMAF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmaf-tests����������������������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmaf1.c tests/test-fma1.h tests/test-fmaf2.c tests/test-fma2.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h lib/float+.h Depends-on: float isnanf-nolibm ldexpf configure.ac: Makefile.am: TESTS += test-fmaf1 test-fmaf2 check_PROGRAMS += test-fmaf1 test-fmaf2 test_fmaf1_LDADD = $(LDADD) @FMAF_LIBM@ test_fmaf2_LDADD = $(LDADD) @FMAF_LIBM@ @LDEXPF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmal����������������������������������������������������������������0000664�0000000�0000000�00000002445�14110572173�0016616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmal() function: fused multiply-add. Files: lib/fmal.c lib/fma.c lib/float+.h m4/fmal.m4 m4/fegetround.m4 m4/mathfunc.m4 Depends-on: math extensions fma [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] stdbool [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] verify [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isfinite [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] integer_length [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_FMAL if test $HAVE_FMAL = 0 || test $REPLACE_FMAL = 1; then AC_LIBOBJ([fmal]) gl_PREREQ_FMAL fi gl_MATH_MODULE_INDICATOR([fmal]) Makefile.am: Include: <math.h> Link: $(FMAL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmal-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmal() function according to ISO C 99 with IEC 60559. Files: Depends-on: fmal fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FMAL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmal-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000375�14110572173�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmal-ieee.c tests/test-fma-ieee.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm configure.ac: Makefile.am: TESTS += test-fmal-ieee check_PROGRAMS += test-fmal-ieee test_fmal_ieee_LDADD = $(LDADD) @FMAL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmal-tests����������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmal1.c tests/test-fma1.h tests/test-fmal2.c tests/test-fma2.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h lib/float+.h Depends-on: float fpucw isnanl-nolibm ldexpl configure.ac: Makefile.am: TESTS += test-fmal1 test-fmal2 check_PROGRAMS += test-fmal1 test-fmal2 test_fmal1_LDADD = $(LDADD) @FMAL_LIBM@ test_fmal2_LDADD = $(LDADD) @FMAL_LIBM@ @LDEXPL_LIBM@ ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmod����������������������������������������������������������������0000664�0000000�0000000�00000001221�14110572173�0016613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmod() function: floating-point remainder function. Files: lib/fmod.c m4/fmod.m4 m4/mathfunc.m4 Depends-on: math isfinite [test $REPLACE_FMOD = 1] signbit [test $REPLACE_FMOD = 1] fabs [test $REPLACE_FMOD = 1] frexp [test $REPLACE_FMOD = 1] trunc [test $REPLACE_FMOD = 1] ldexp [test $REPLACE_FMOD = 1] isnand [test $REPLACE_FMOD = 1] isinf [test $REPLACE_FMOD = 1] configure.ac: gl_FUNC_FMOD if test $REPLACE_FMOD = 1; then AC_LIBOBJ([fmod]) fi gl_MATH_MODULE_INDICATOR([fmod]) Makefile.am: Include: <math.h> Link: $(FMOD_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmod-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmod() function according to ISO C 99 with IEC 60559. Files: m4/fmod-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: fmod fpieee configure.ac: gl_FUNC_FMOD_IEEE Makefile.am: Include: <math.h> Link: $(FMOD_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmod-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmod-ieee.c tests/test-fmod-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fmod-ieee check_PROGRAMS += test-fmod-ieee test_fmod_ieee_LDADD = $(LDADD) @FMOD_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmod-tests����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmod.c tests/test-fmod.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-fmod check_PROGRAMS += test-fmod test_fmod_SOURCES = test-fmod.c randomd.c test_fmod_LDADD = $(LDADD) @FMOD_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodf���������������������������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmodf() function: floating-point remainder function. Files: lib/fmodf.c m4/fmodf.m4 Depends-on: math extensions fmod [test $HAVE_FMODF = 0 || test $REPLACE_FMODF = 1] configure.ac: gl_FUNC_FMODF if test $HAVE_FMODF = 0 || test $REPLACE_FMODF = 1; then AC_LIBOBJ([fmodf]) fi gl_MATH_MODULE_INDICATOR([fmodf]) Makefile.am: Include: <math.h> Link: $(FMODF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmodf() function according to ISO C 99 with IEC 60559. Files: m4/fmodf-ieee.m4 Depends-on: fmodf fpieee fmod-ieee [test $HAVE_FMODF = 0] configure.ac: gl_FUNC_FMODF_IEEE Makefile.am: Include: <math.h> Link: $(FMODF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmodf-ieee.c tests/test-fmod-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fmodf-ieee check_PROGRAMS += test-fmodf-ieee test_fmodf_ieee_LDADD = $(LDADD) @FMODF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodf-tests���������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmodf.c tests/test-fmod.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-fmodf check_PROGRAMS += test-fmodf test_fmodf_SOURCES = test-fmodf.c randomf.c test_fmodf_LDADD = $(LDADD) @FMODF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodl���������������������������������������������������������������0000664�0000000�0000000�00000003007�14110572173�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmodl() function: floating-point remainder function. Files: lib/fmodl.c lib/fmod.c m4/fmodl.m4 m4/mathfunc.m4 Depends-on: math extensions fmod [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isfinite [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] signbit [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fabsl [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] truncl [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isinf [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_FMODL if test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; then AC_LIBOBJ([fmodl]) fi gl_MATH_MODULE_INDICATOR([fmodl]) Makefile.am: Include: <math.h> Link: $(FMODL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmodl() function according to ISO C 99 with IEC 60559. Files: m4/fmodl-ieee.m4 Depends-on: fmodl fpieee fmod-ieee [{ test $HAVE_FMODL = 0 || test $REPLACE_FMODL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_FMODL_IEEE Makefile.am: Include: <math.h> Link: $(FMODL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmodl-ieee.c tests/test-fmod-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-fmodl-ieee check_PROGRAMS += test-fmodl-ieee test_fmodl_ieee_LDADD = $(LDADD) @FMODL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fmodl-tests���������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmodl.c tests/test-fmod.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-fmodl check_PROGRAMS += test-fmodl test_fmodl_SOURCES = test-fmodl.c randoml.c test_fmodl_LDADD = $(LDADD) @FMODL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fnmatch�������������������������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fnmatch() function: wildcard matching. Files: lib/fnmatch.c lib/fnmatch_loop.c m4/mbstate_t.m4 m4/fnmatch.m4 Depends-on: fnmatch-h alloca-opt [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] attribute [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] btowc [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] builtin-expect [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] flexmember [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] idx [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] intprops [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] isblank [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] iswctype [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] libc-config [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] stdbool [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] strnlen [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] wchar [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] wctype-h [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] wmemchr [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] wmempcpy [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] memchr [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] memcmp [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] mempcpy [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] mbsrtowcs [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] mbsinit [test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1] configure.ac: gl_FUNC_FNMATCH_POSIX if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi gl_FNMATCH_MODULE_INDICATOR([fnmatch]) Makefile.am: Include: <fnmatch.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fnmatch-gnu���������������������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fnmatch() function: wildcard matching, with GNU extensions. Files: lib/fnmatch.c Depends-on: fnmatch configure.ac: gl_FUNC_FNMATCH_GNU if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi gl_MODULE_INDICATOR([fnmatch-gnu]) Makefile.am: Include: <fnmatch.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fnmatch-h�����������������������������������������������������������0000664�0000000�0000000�00000002740�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <fnmatch.h> that conforms to POSIX. Files: lib/fnmatch.in.h m4/fnmatch_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_FNMATCH_H gl_FNMATCH_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += $(FNMATCH_H) # We need the following in order to create <fnmatch.h>. if GL_GENERATE_FNMATCH_H fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_FNMATCH_H''@|$(HAVE_FNMATCH_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FNMATCH_H''@|$(NEXT_FNMATCH_H)|g' \ -e 's/@''GNULIB_FNMATCH''@/$(GNULIB_FNMATCH)/g' \ -e 's|@''HAVE_FNMATCH''@|$(HAVE_FNMATCH)|g' \ -e 's|@''REPLACE_FNMATCH''@|$(REPLACE_FNMATCH)|g' \ -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)' \ < $(srcdir)/fnmatch.in.h; \ } > $@-t && \ mv $@-t $@ else fnmatch.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t Include: <fnmatch.h> License: LGPLv2+ Maintainer: all, glibc ��������������������������������gnulib-20210822~d383792/modules/fnmatch-h-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000403�14110572173�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fnmatch-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-fnmatch-h-c++ check_PROGRAMS += test-fnmatch-h-c++ test_fnmatch_h_c___SOURCES = test-fnmatch-h-c++.cc endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fnmatch-h-tests�����������������������������������������������������0000664�0000000�0000000�00000000225�14110572173�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fnmatch-h.c Depends-on: fnmatch-h-c++-tests configure.ac: Makefile.am: TESTS += test-fnmatch-h check_PROGRAMS += test-fnmatch-h ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fnmatch-tests�������������������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0020454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fnmatch.c tests/signature.h tests/macros.h Makefile.am: TESTS += test-fnmatch check_PROGRAMS += test-fnmatch test_fnmatch_LDADD = $(LDADD) $(LIB_MBRTOWC) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen���������������������������������������������������������������0000664�0000000�0000000�00000001027�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fopen() function: open a stream to a file. Files: lib/fopen.c m4/fopen.m4 Depends-on: stdio largefile fcntl-h [test $REPLACE_FOPEN = 1] stdbool [test $REPLACE_FOPEN = 1] unistd [test $REPLACE_FOPEN = 1] close [test $REPLACE_FOPEN = 1] fstat [test $REPLACE_FOPEN = 1] configure.ac: gl_FUNC_FOPEN if test $REPLACE_FOPEN = 1; then AC_LIBOBJ([fopen]) gl_PREREQ_FOPEN fi gl_STDIO_MODULE_INDICATOR([fopen]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen-gnu�����������������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fopen() function: open a stream to a file, with GNU extensions. Files: lib/fopen.c Depends-on: fopen open [test $REPLACE_FOPEN = 1] configure.ac: gl_FUNC_FOPEN_GNU if test $REPLACE_FOPEN = 1; then AC_LIBOBJ([fopen]) gl_PREREQ_FOPEN fi gl_MODULE_INDICATOR([fopen-gnu]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen-gnu-tests�����������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fopen-gnu.c tests/macros.h Depends-on: fcntl configure.ac: Makefile.am: TESTS += test-fopen-gnu check_PROGRAMS += test-fopen-gnu ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen-safer���������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0020075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fopen function that avoids clobbering std{in,out,err}. Files: lib/stdio--.h lib/stdio-safer.h lib/fopen-safer.c Depends-on: fopen unistd-safer configure.ac: gl_MODULE_INDICATOR([fopen-safer]) Makefile.am: lib_SOURCES += fopen-safer.c Include: "stdio-safer.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000251�14110572173�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fopen.h tests/test-fopen-safer.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fopen-safer check_PROGRAMS += test-fopen-safer �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fopen-tests���������������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fopen.h tests/test-fopen.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fopen check_PROGRAMS += test-fopen ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/forkpty�������������������������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: forkpty() function: Open a pseudo-terminal, fork, and connect the child process to the pseudo-terminal's slave. Files: lib/forkpty.c m4/pty.m4 Depends-on: pty unistd openpty login_tty configure.ac: gl_FUNC_FORKPTY if test $HAVE_FORKPTY = 0 || test $REPLACE_FORKPTY = 1; then AC_LIBOBJ([forkpty]) fi gl_PTY_MODULE_INDICATOR([forkpty]) Makefile.am: Include: <pty.h> Link: $(PTY_LIB) License: LGPL Maintainer: Simon Josefsson ������������������������������������������������������������������gnulib-20210822~d383792/modules/forkpty-tests�������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0020533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-forkpty.c tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-forkpty check_PROGRAMS += test-forkpty test_forkpty_LDADD = $(LDADD) @PTY_LIB@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpending������������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the number of bytes waiting in the output buffer of a stream. Files: lib/fpending.h lib/fpending.c lib/stdio-impl.h m4/fpending.m4 Depends-on: configure.ac: gl_FUNC_FPENDING if test $gl_cv_func___fpending = no; then AC_LIBOBJ([fpending]) fi Makefile.am: Include: "fpending.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpending-tests������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fpending.c tests/test-fpending.sh tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fpending.sh check_PROGRAMS += test-fpending MOSTLYCLEANFILES += test-fpending.t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpieee��������������������������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure IEEE compliant floating-point operations (overflow and division by zero). Files: m4/fpieee.m4 Depends-on: configure.ac-early: AC_REQUIRE([gl_FP_IEEE]) configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002117�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible fprintf() function: print formatted output to a stream Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/fprintf.c m4/fprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: stdio nocrash printf-safe errno multiarch fseterr [test $REPLACE_FPRINTF = 1] vasnprintf [test $REPLACE_FPRINTF = 1] isnand-nolibm [test $REPLACE_FPRINTF = 1] isnanl-nolibm [test $REPLACE_FPRINTF = 1] free-posix [test $REPLACE_FPRINTF = 1] frexp-nolibm [test $REPLACE_FPRINTF = 1] frexpl-nolibm [test $REPLACE_FPRINTF = 1] printf-frexp [test $REPLACE_FPRINTF = 1] printf-frexpl [test $REPLACE_FPRINTF = 1] signbit [test $REPLACE_FPRINTF = 1] fpucw [test $REPLACE_FPRINTF = 1] configure.ac: gl_FUNC_FPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([fprintf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000001040�14110572173�0021635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fprintf-posix.sh tests/test-fprintf-posix.c tests/test-fprintf-posix.h tests/test-printf-posix.output tests/test-fprintf-posix2.sh tests/test-fprintf-posix2.c tests/test-fprintf-posix3.sh tests/test-fprintf-posix3.c tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint get-rusage-as configure.ac: AC_CHECK_FUNCS_ONCE([getrlimit setrlimit]) Makefile.am: TESTS += test-fprintf-posix.sh test-fprintf-posix2.sh test-fprintf-posix3.sh check_PROGRAMS += test-fprintf-posix test-fprintf-posix2 test-fprintf-posix3 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fprintftime���������������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: like nstrftime, but output the formatted date to a FILE* stream Files: lib/fprintftime.h lib/fprintftime.c Depends-on: stdio nstrftime time_rz configure.ac: Makefile.am: lib_SOURCES += fprintftime.c Include: "fprintftime.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpucw���������������������������������������������������������������0000664�0000000�0000000�00000000317�14110572173�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set the FPU control word, so as to allow correct 'long double' computations. Files: lib/fpucw.h Depends-on: configure.ac: Makefile.am: Include: "fpucw.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpurge��������������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fpurge() function: Flush buffers. Files: lib/fpurge.c lib/stdio-impl.h m4/fpurge.m4 Depends-on: stdio configure.ac: gl_FUNC_FPURGE if test $HAVE_FPURGE = 0 || test $REPLACE_FPURGE = 1; then AC_LIBOBJ([fpurge]) fi gl_STDIO_MODULE_INDICATOR([fpurge]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fpurge-tests��������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fpurge.c tests/macros.h Depends-on: fflush ftell configure.ac: Makefile.am: TESTS += test-fpurge check_PROGRAMS += test-fpurge MOSTLYCLEANFILES += t-fpurge.tmp �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fputc-tests���������������������������������������������������������0000664�0000000�0000000�00000000257�14110572173�0020157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fputc.c tests/signature.h tests/macros.h Depends-on: unistd fdopen msvc-inval configure.ac: Makefile.am: TESTS += test-fputc check_PROGRAMS += test-fputc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fread-tests���������������������������������������������������������0000664�0000000�0000000�00000000257�14110572173�0020117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fread.c tests/signature.h tests/macros.h Depends-on: unistd fdopen msvc-inval configure.ac: Makefile.am: TESTS += test-fread check_PROGRAMS += test-fread �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadable�����������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freadable() function: Determine whether a FILE stream supports reading. Files: lib/freadable.h lib/freadable.c lib/stdio-impl.h m4/freadable.m4 Depends-on: stdbool configure.ac: gl_FUNC_FREADABLE if test $ac_cv_func___freadable = no; then AC_LIBOBJ([freadable]) fi Makefile.am: Include: "freadable.h" License: LGPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadable-tests�����������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0020741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freadable.c tests/macros.h Depends-on: fflush configure.ac: Makefile.am: TESTS += test-freadable check_PROGRAMS += test-freadable MOSTLYCLEANFILES += t-freadable.tmp �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadahead����������������������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0017741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freadahead() function: Determine the number of bytes waiting in the input buffer of a stream. Files: lib/freadahead.h lib/freadahead.c lib/stdio-impl.h m4/freadahead.m4 Depends-on: configure.ac: gl_FUNC_FREADAHEAD if test $ac_cv_func___freadahead = no; then AC_LIBOBJ([freadahead]) fi Makefile.am: Include: "freadahead.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadahead-tests����������������������������������������������������0000664�0000000�0000000�00000000274�14110572173�0021101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freadahead.c tests/test-freadahead.sh tests/macros.h Depends-on: lseek unistd configure.ac: Makefile.am: TESTS += test-freadahead.sh check_PROGRAMS += test-freadahead ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freading������������������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freading() function: Determine whether a FILE stream is currently doing reading. Files: lib/freading.h lib/freading.c lib/stdio-impl.h m4/freading.m4 Depends-on: stdbool configure.ac: gl_FUNC_FREADING Makefile.am: lib_SOURCES += freading.c Include: "freading.h" License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freading-tests������������������������������������������������������0000664�0000000�0000000�00000000267�14110572173�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freading.c tests/macros.h Depends-on: fflush configure.ac: Makefile.am: TESTS += test-freading check_PROGRAMS += test-freading MOSTLYCLEANFILES += t-freading.tmp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadptr������������������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0017500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freadptr() function: Pointer to the input buffer of a stream. Files: lib/freadptr.h lib/freadptr.c lib/stdio-impl.h m4/freadptr.m4 Depends-on: configure.ac: gl_FUNC_FREADPTR if test $ac_cv_func___freadptr = no; then AC_LIBOBJ([freadptr]) fi Makefile.am: Include: "freadptr.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadptr-tests������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freadptr.c tests/test-freadptr.sh tests/test-freadptr2.c tests/test-freadptr2.sh tests/macros.h Depends-on: lseek unistd configure.ac: Makefile.am: TESTS += test-freadptr.sh test-freadptr2.sh check_PROGRAMS += test-freadptr test-freadptr2 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadseek�����������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0017623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freadseek() function: Read and discard input from a stream. Files: lib/freadseek.h lib/freadseek.c lib/stdio-impl.h m4/freadseek.m4 Depends-on: freadahead freadptr fseeko lseek configure.ac: gl_FUNC_FREADSEEK Makefile.am: lib_SOURCES += freadseek.c Include: "freadseek.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freadseek-tests�����������������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freadseek.c tests/test-freadseek.sh tests/macros.h Depends-on: unistd configure.ac: Makefile.am: TESTS += test-freadseek.sh check_PROGRAMS += test-freadseek ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/free-posix����������������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Work around systems where free clobbers errno. Files: lib/free.c m4/free.m4 Depends-on: stdlib string wchar configure.ac: gl_FUNC_FREE if test $REPLACE_FREE = 1; then AC_LIBOBJ([free]) gl_PREREQ_FREE fi gl_STDLIB_MODULE_INDICATOR([free-posix]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/free-posix-tests����������������������������������������������������0000664�0000000�0000000�00000000210�14110572173�0021104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-free.c tests/macros.h Depends-on: unistd configure.ac: Makefile.am: TESTS += test-free check_PROGRAMS += test-free ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freopen�������������������������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freopen() function: open a stream to a file. Files: lib/freopen.c m4/freopen.m4 Depends-on: fcntl-h [test $REPLACE_FREOPEN = 1] open [test $REPLACE_FREOPEN = 1] stdio largefile configure.ac: gl_FUNC_FREOPEN if test $REPLACE_FREOPEN = 1; then AC_LIBOBJ([freopen]) gl_PREREQ_FREOPEN fi gl_STDIO_MODULE_INDICATOR([freopen]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freopen-safer�������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freopen function that avoids clobbering std{in,out,err}. Files: lib/stdio--.h lib/stdio-safer.h lib/freopen-safer.c Depends-on: attribute dup2 freopen open stdbool configure.ac: gl_MODULE_INDICATOR([freopen-safer]) Makefile.am: lib_SOURCES += freopen-safer.c Include: "stdio-safer.h" License: GPL Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freopen-safer-tests�������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0021565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freopen-safer.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-freopen-safer check_PROGRAMS += test-freopen-safer ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/freopen-tests�������������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0020470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-freopen.c tests/signature.h tests/macros.h Depends-on: fdopen configure.ac: Makefile.am: TESTS += test-freopen check_PROGRAMS += test-freopen ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp���������������������������������������������������������������0000664�0000000�0000000�00000000615�14110572173�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexp() function: split a double into its constituents. Files: lib/frexp.c m4/frexp.m4 Depends-on: math isnand-nolibm [test $gl_func_frexp != yes] configure.ac: AC_REQUIRE([gl_FUNC_FREXP]) if test $gl_func_frexp != yes; then AC_LIBOBJ([frexp]) fi gl_MATH_MODULE_INDICATOR([frexp]) Makefile.am: Include: <math.h> Link: $(FREXP_LIBM) License: LGPL Maintainer: Paolo Bonzini �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexp() function according to ISO C 99 with IEC 60559. Files: Depends-on: frexp fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FREXP_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexp-ieee.c tests/test-frexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-frexp-ieee check_PROGRAMS += test-frexp-ieee test_frexp_ieee_LDADD = $(LDADD) @FREXP_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp-nolibm��������������������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0020300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexp() function: split a double into its constituents, without requiring libm. Files: lib/frexp.c m4/frexp.m4 Depends-on: math isnand-nolibm [test $gl_func_frexp_no_libm != yes] configure.ac: gl_FUNC_FREXP_NO_LIBM if test $gl_func_frexp_no_libm != yes; then AC_LIBOBJ([frexp]) fi gl_MATH_MODULE_INDICATOR([frexp]) Makefile.am: Include: <math.h> License: LGPLv2+ Maintainer: Paolo Bonzini ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp-nolibm-tests��������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0021427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexp.c tests/test-frexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: isnand-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexp-nolibm check_PROGRAMS += test-frexp-nolibm test_frexp_nolibm_SOURCES = test-frexp.c randomd.c ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexp-tests���������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0020157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexp.c tests/test-frexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: isnand-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexp check_PROGRAMS += test-frexp test_frexp_SOURCES = test-frexp.c randomd.c test_frexp_LDADD = $(LDADD) @FREXP_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpf��������������������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexpf() function: split a float into its constituents. Files: lib/frexpf.c m4/frexpf.m4 m4/mathfunc.m4 Depends-on: math extensions frexp [test $HAVE_FREXPF = 0 || test $REPLACE_FREXPF = 1] configure.ac: gl_FUNC_FREXPF if test $HAVE_FREXPF = 0 || test $REPLACE_FREXPF = 1; then AC_LIBOBJ([frexpf]) fi gl_MATH_MODULE_INDICATOR([frexpf]) Makefile.am: Include: <math.h> Link: $(FREXPF_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/frexpf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexpf() function according to ISO C 99 with IEC 60559. Files: Depends-on: frexpf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FREXPF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpf-ieee.c tests/test-frexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-frexpf-ieee check_PROGRAMS += test-frexpf-ieee test_frexpf_ieee_LDADD = $(LDADD) @FREXPF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpf-tests��������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpf.c tests/test-frexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: isnanf-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexpf check_PROGRAMS += test-frexpf test_frexpf_SOURCES = test-frexpf.c randomf.c test_frexpf_LDADD = $(LDADD) @FREXPF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl��������������������������������������������������������������0000664�0000000�0000000�00000001426�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexpl() function: split a 'long double' into its constituents. Files: lib/frexpl.c lib/frexp.c m4/frexpl.m4 Depends-on: math extensions frexp [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl-nolibm [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fpucw [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: AC_REQUIRE([gl_FUNC_FREXPL]) if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then AC_LIBOBJ([frexpl]) fi gl_MATH_MODULE_INDICATOR([frexpl]) Makefile.am: Include: <math.h> Link: $(FREXPL_LIBM) License: LGPL Maintainer: Paolo Bonzini ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexpl() function according to ISO C 99 with IEC 60559. Files: Depends-on: frexpl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(FREXPL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpl-ieee.c tests/test-frexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-frexpl-ieee check_PROGRAMS += test-frexpl-ieee test_frexpl_ieee_LDADD = $(LDADD) @FREXPL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl-nolibm�������������������������������������������������������0000664�0000000�0000000�00000001452�14110572173�0020452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: frexpl() function: split a 'long double' into its constituents, without requiring libm. Files: lib/frexpl.c lib/frexp.c m4/frexpl.m4 Depends-on: math frexp-nolibm [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl-nolibm [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fpucw [{ test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_FREXPL_NO_LIBM if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then AC_LIBOBJ([frexpl]) fi gl_MATH_MODULE_INDICATOR([frexpl]) Makefile.am: Include: <math.h> License: LGPLv2+ Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl-nolibm-tests�������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpl.c tests/test-frexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw isnanl-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexpl-nolibm check_PROGRAMS += test-frexpl-nolibm test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/frexpl-tests��������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpl.c tests/test-frexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw isnanl-nolibm signbit float configure.ac: Makefile.am: TESTS += test-frexpl check_PROGRAMS += test-frexpl test_frexpl_SOURCES = test-frexpl.c randoml.c test_frexpl_LDADD = $(LDADD) @FREXPL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseek���������������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0016770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fseek() function: Reposition a FILE stream. Files: lib/fseek.c m4/fseek.m4 Depends-on: stdio fseeko [test $REPLACE_FSEEK = 1] configure.ac: gl_FUNC_FSEEK if test $REPLACE_FSEEK = 1; then AC_LIBOBJ([fseek]) fi gl_STDIO_MODULE_INDICATOR([fseek]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseek-tests���������������������������������������������������������0000664�0000000�0000000�00000000363�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fseek.c tests/test-fseek.sh tests/test-fseek2.sh tests/signature.h tests/macros.h m4/ungetc.m4 Depends-on: configure.ac: gl_FUNC_UNGETC_WORKS Makefile.am: TESTS += test-fseek.sh test-fseek2.sh check_PROGRAMS += test-fseek �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseeko��������������������������������������������������������������0000664�0000000�0000000�00000001022�14110572173�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fseeko() function: Reposition a FILE stream. Files: lib/fseeko.c lib/stdio-impl.h m4/fseeko.m4 Depends-on: extensions largefile lseek stdio sys_types # Just to guarantee consistency between fseek() and fseeko(). fseek configure.ac-early: AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FSEEKO if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then AC_LIBOBJ([fseeko]) gl_PREREQ_FSEEKO fi gl_STDIO_MODULE_INDICATOR([fseeko]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseeko-tests��������������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0020304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fseeko.c tests/test-fseeko.sh tests/test-fseeko2.sh tests/test-fseeko3.c tests/test-fseeko3.sh tests/test-fseeko4.c tests/test-fseeko4.sh tests/signature.h tests/macros.h m4/ungetc.m4 Depends-on: fdopen configure.ac: gl_FUNC_UNGETC_WORKS Makefile.am: TESTS += test-fseeko.sh test-fseeko2.sh test-fseeko3.sh test-fseeko4.sh check_PROGRAMS += test-fseeko test-fseeko3 test-fseeko4 ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseterr�������������������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set the error indicator of a stream. Files: lib/fseterr.h lib/fseterr.c lib/stdio-impl.h m4/fseterr.m4 Depends-on: configure.ac: gl_FUNC_FSETERR if test $ac_cv_func___fseterr = no; then AC_LIBOBJ([fseterr]) fi Makefile.am: Include: "fseterr.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fseterr-tests�������������������������������������������������������0000664�0000000�0000000�00000000174�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fseterr.c Depends-on: configure.ac: Makefile.am: TESTS += test-fseterr check_PROGRAMS += test-fseterr ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstat���������������������������������������������������������������0000664�0000000�0000000�00000001303�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fstat() function: return information about an open file. Files: lib/fstat.c lib/stat-w32.h lib/stat-w32.c m4/fstat.m4 Depends-on: sys_stat largefile pathmax [test $REPLACE_FSTAT = 1] stat [test $REPLACE_FSTAT = 1] stat-time [test $REPLACE_FSTAT = 1] unistd [test $REPLACE_FSTAT = 1] verify [test $REPLACE_FSTAT = 1] msvc-nothrow [test $REPLACE_FSTAT = 1] configure.ac: gl_FUNC_FSTAT if test $REPLACE_FSTAT = 1; then AC_LIBOBJ([fstat]) case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_FSTAT fi gl_SYS_STAT_MODULE_INDICATOR([fstat]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstat-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fstat.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fstat check_PROGRAMS += test-fstat ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstatat�������������������������������������������������������������0000664�0000000�0000000�00000002374�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fstatat() function: Return information about a file at a directory. Files: lib/fstatat.c lib/at-func.c m4/fstatat.m4 m4/lstat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] errno [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] extern-inline [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] fchdir [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] fcntl-h [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] filename [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] lstat [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] openat-die [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] openat-h [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] save-cwd [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] stat [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] stat-time [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] configure.ac: gl_FUNC_FSTATAT if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then AC_LIBOBJ([fstatat]) fi gl_SYS_STAT_MODULE_INDICATOR([fstatat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstatat-tests�������������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fstatat.c tests/test-lstat.h tests/test-stat.h tests/signature.h tests/macros.h Depends-on: getcwd-lgpl ignore-value openat-h symlink configure.ac: Makefile.am: TESTS += test-fstatat check_PROGRAMS += test-fstatat test_fstatat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstrcmp�������������������������������������������������������������0000664�0000000�0000000�00000000366�14110572173�0017355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fuzzy string comparison. Files: lib/fstrcmp.h lib/fstrcmp.c Depends-on: c99 diffseq lock tls minmax stdint xalloc configure.ac: Makefile.am: lib_SOURCES += fstrcmp.h fstrcmp.c Include: "fstrcmp.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fstrcmp-tests�������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fstrcmp.c tests/macros.h Depends-on: stdbool configure.ac: Makefile.am: TESTS += test-fstrcmp check_PROGRAMS += test-fstrcmp test_fstrcmp_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fsusage�������������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return file system space usage info. Files: lib/fsusage.h lib/fsusage.c m4/fsusage.m4 Depends-on: c99 largefile stdbool stdint configure.ac: gl_FSUSAGE if test $gl_cv_fs_space = yes; then AC_LIBOBJ([fsusage]) gl_PREREQ_FSUSAGE_EXTRA fi Makefile.am: Include: "fsusage.h" License: LGPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fsync���������������������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fsync(2) function: synchronize writes, including metadata, to a file. Files: lib/fsync.c m4/fsync.m4 Depends-on: unistd msvc-nothrow [test $HAVE_FSYNC = 0] configure.ac: gl_FUNC_FSYNC if test $HAVE_FSYNC = 0; then AC_LIBOBJ([fsync]) gl_PREREQ_FSYNC fi gl_UNISTD_MODULE_INDICATOR([fsync]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Richard W.M. Jones, Jim Meyering ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fsync-tests���������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fsync.c tests/signature.h tests/macros.h Depends-on: errno configure.ac: Makefile.am: TESTS += test-fsync check_PROGRAMS += test-fsync ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftell���������������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ftell() function: Retrieve the position of a FILE stream. Files: lib/ftell.c m4/ftell.m4 Depends-on: stdio errno ftello [test $REPLACE_FTELL = 1] configure.ac: gl_FUNC_FTELL if test $REPLACE_FTELL = 1; then AC_LIBOBJ([ftell]) fi gl_STDIO_MODULE_INDICATOR([ftell]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftell-tests���������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ftell.c tests/test-ftell.sh tests/test-ftell2.sh tests/test-ftell3.c tests/signature.h tests/macros.h m4/ungetc.m4 Depends-on: binary-io configure.ac: gl_FUNC_UNGETC_WORKS Makefile.am: TESTS += test-ftell.sh test-ftell2.sh test-ftell3 check_PROGRAMS += test-ftell test-ftell3 MOSTLYCLEANFILES += t-ftell3.tmp ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftello��������������������������������������������������������������0000664�0000000�0000000�00000001274�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ftello() function: Retrieve the position of a FILE stream. Files: lib/ftello.c lib/stdio-impl.h m4/fseeko.m4 m4/ftello.m4 m4/ungetc.m4 Depends-on: stdio extensions largefile sys_types lseek [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1] intprops [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1] # Just to guarantee consistency between ftell() and ftello(). ftell configure.ac-early: AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FTELLO if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then AC_LIBOBJ([ftello]) gl_PREREQ_FTELLO fi gl_STDIO_MODULE_INDICATOR([ftello]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftello-tests��������������������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ftello.c tests/test-ftello.sh tests/test-ftello2.sh tests/test-ftello3.c tests/test-ftello4.c tests/test-ftello4.sh tests/signature.h tests/macros.h m4/ungetc.m4 Depends-on: binary-io fdopen configure.ac: gl_FUNC_UNGETC_WORKS Makefile.am: TESTS += test-ftello.sh test-ftello2.sh test-ftello3 test-ftello4.sh check_PROGRAMS += test-ftello test-ftello3 test-ftello4 MOSTLYCLEANFILES += t-ftello3.tmp ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftoastr�������������������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0017353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert float to accurate string. Files: lib/ftoastr.h lib/ftoastr.c Depends-on: extensions intprops configure.ac: AC_CHECK_FUNCS_ONCE([strtof]) Makefile.am: lib_SOURCES += ftoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftruncate�����������������������������������������������������������0000664�0000000�0000000�00000001073�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ftruncate() function: truncate an open file to a specified length. Files: lib/ftruncate.c m4/ftruncate.m4 Depends-on: unistd sys_types largefile msvc-nothrow [test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1] msvc-inval [test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1] configure.ac: gl_FUNC_FTRUNCATE if test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1; then AC_LIBOBJ([ftruncate]) gl_PREREQ_FTRUNCATE fi gl_UNISTD_MODULE_INDICATOR([ftruncate]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ftruncate-tests�����������������������������������������������������0000664�0000000�0000000�00000000275�14110572173�0021031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ftruncate.c tests/test-ftruncate.sh tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ftruncate.sh check_PROGRAMS += test-ftruncate �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fts�����������������������������������������������������������������0000664�0000000�0000000�00000001023�14110572173�0016462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Traverse a file hierarchy. Files: lib/fts_.h lib/fts.c lib/fts-cycle.c m4/fts.m4 Depends-on: attribute c99 closedir cycle-check d-ino d-type fchdir fcntl fcntl-h flexmember fstat hash i-ring lstat memmove open openat-h opendir opendirat readdir stdalign stdbool stddef configure.ac: gl_FUNC_FTS dnl Use this version of fts unconditionally, since the GNU libc and dnl NetBSD versions have bugs and/or unnecessary limitations. AC_LIBOBJ([fts]) Makefile.am: Include: "fts_.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fts-tests�����������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: longrunning-test Files: tests/test-fts.c Depends-on: c99 errno remove unlinkat configure.ac: Makefile.am: TESTS += test-fts check_PROGRAMS += test-fts test_fts_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/full-read�����������������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0017551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An interface to the read() function that reads all it is asked to read. Files: lib/full-read.h lib/full-read.c lib/full-write.c Depends-on: safe-read configure.ac: Makefile.am: lib_SOURCES += full-read.h full-read.c Include: "full-read.h" License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/full-write����������������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0017767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An interface to the write() function that writes all it is asked to write. Files: lib/full-write.h lib/full-write.c Depends-on: safe-write configure.ac: Makefile.am: lib_SOURCES += full-write.h full-write.c Include: "full-write.h" License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/func����������������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0016623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Make sure __func__ is usable even on non-C99 platforms. Files: m4/func.m4 Depends-on: configure.ac: gl_FUNC Makefile.am: Include: License: unlimited Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/func-tests����������������������������������������������������������0000664�0000000�0000000�00000000164�14110572173�0017766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-func.c tests/macros.h configure.ac: Makefile.am: TESTS += test-func check_PROGRAMS += test-func ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/futimens������������������������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set file access and modification times of a file descriptor. Files: lib/futimens.c m4/futimens.m4 Depends-on: sys_stat extensions utimens [test $HAVE_FUTIMENS = 0 || test $REPLACE_FUTIMENS = 1] configure.ac: gl_FUNC_FUTIMENS if test $HAVE_FUTIMENS = 0 || test $REPLACE_FUTIMENS = 1; then AC_LIBOBJ([futimens]) fi gl_SYS_STAT_MODULE_INDICATOR([futimens]) Makefile.am: Include: <sys/stat.h> Link: $(LIB_CLOCK_GETTIME) License: LGPL Maintainer: Eric Blake ����������������������������gnulib-20210822~d383792/modules/futimens-tests������������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-futimens.h tests/test-utimens-common.h tests/test-futimens.c tests/signature.h tests/macros.h Depends-on: gettext-h fcntl-h ignore-value intprops nanosleep timespec dup utimecmp configure.ac: Makefile.am: TESTS += test-futimens check_PROGRAMS += test-futimens test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwritable�����������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fwritable() function: Determine whether a FILE stream supports writing. Files: lib/fwritable.h lib/fwritable.c lib/stdio-impl.h m4/fwritable.m4 Depends-on: stdbool configure.ac: gl_FUNC_FWRITABLE if test $ac_cv_func___fwritable = no; then AC_LIBOBJ([fwritable]) fi Makefile.am: Include: "fwritable.h" License: LGPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwritable-tests�����������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fwritable.c tests/macros.h Depends-on: fflush configure.ac: Makefile.am: TESTS += test-fwritable check_PROGRAMS += test-fwritable MOSTLYCLEANFILES += t-fwritable.tmp �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwrite-tests��������������������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fwrite.c tests/signature.h tests/macros.h Depends-on: unistd fdopen msvc-inval configure.ac: Makefile.am: TESTS += test-fwrite check_PROGRAMS += test-fwrite ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwriteerror���������������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detect write error on a stream. Files: lib/fwriteerror.h lib/fwriteerror.c Depends-on: errno stdbool configure.ac: gl_MODULE_INDICATOR([fwriteerror]) Makefile.am: lib_SOURCES += fwriteerror.h fwriteerror.c Include: "fwriteerror.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwriting������������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fwriting() function: Determine whether a FILE stream is currently doing writing. Files: lib/fwriting.h lib/fwriting.c lib/stdio-impl.h m4/fwriting.m4 Depends-on: stdbool configure.ac: gl_FUNC_FWRITING if test $ac_cv_func___fwriting = no; then AC_LIBOBJ([fwriting]) fi Makefile.am: Include: "fwriting.h" License: LGPL Maintainer: Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/fwriting-tests������������������������������������������������������0000664�0000000�0000000�00000000267�14110572173�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fwriting.c tests/macros.h Depends-on: fflush configure.ac: Makefile.am: TESTS += test-fwriting check_PROGRAMS += test-fwriting MOSTLYCLEANFILES += t-fwriting.tmp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gcd�����������������������������������������������������������������0000664�0000000�0000000�00000000270�14110572173�0016426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Greatest common divisor. Files: lib/gcd.h lib/gcd.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += gcd.h gcd.c Include: "gcd.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gen-uni-tables������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0020505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generates the tables in lib/unictype/* and lib/unilbrk/* and lib/uniwbrk/* and lib/unicase/*. Files: lib/gen-uni-tables.c lib/unictype/3level.h lib/unictype/3levelbit.h Depends-on: memcmp strdup strstr-simple configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: Include: License: GPLed build tool Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gendocs�������������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0017315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generate manuals in several formats from Texinfo sources. Can be used for https://www.gnu.org/software/PKG/manual/ directories. Files: build-aux/gendocs.sh doc/gendocs_template doc/gendocs_template_min Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/get-rusage-as�������������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Getter for RLIMIT_AS: Returns the current address space size. Files: lib/resource-ext.h lib/get-rusage-as.c m4/mmap-anon.m4 Depends-on: stdint unistd extensions getpagesize open vma-iter configure.ac: AC_CHECK_FUNCS_ONCE([setrlimit]) gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: lib_SOURCES += get-rusage-as.c Include: "resource-ext.h" License: GPL Maintainer: all �������������������������������������������������������������������������gnulib-20210822~d383792/modules/get-rusage-as-tests�������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-get-rusage-as.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-get-rusage-as check_PROGRAMS += test-get-rusage-as ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/get-rusage-data�����������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Getter for RLIMIT_DATA: Returns the data segment size. Files: lib/resource-ext.h lib/get-rusage-data.c m4/mmap-anon.m4 Depends-on: stdint unistd extensions getpagesize vma-iter configure.ac: AC_CHECK_FUNCS_ONCE([sbrk setrlimit]) gl_FUNC_MMAP_ANON Makefile.am: lib_SOURCES += get-rusage-data.c Include: "resource-ext.h" License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/get-rusage-data-tests�����������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0022005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-get-rusage-data.c tests/macros.h m4/musl.m4 Depends-on: configure.ac: gl_MUSL_LIBC Makefile.am: TESTS += test-get-rusage-data check_PROGRAMS += test-get-rusage-data ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/get_ppid_of���������������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the parent process of a given process. Files: lib/get_ppid_of.h lib/get_ppid_of.c Depends-on: extensions sys_types unistd open configure.ac: Makefile.am: lib_SOURCES += get_ppid_of.h get_ppid_of.c Include: "get_ppid_of.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/get_progname_of�����������������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0021025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the program name of a given process. Files: lib/get_progname_of.h lib/get_progname_of.c Depends-on: extensions unistd open configure.ac: Makefile.am: lib_SOURCES += get_progname_of.h get_progname_of.c Include: "get_progname_of.h" License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getaddrinfo���������������������������������������������������������0000664�0000000�0000000�00000002431�14110572173�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getaddrinfo() function: Get address information. Files: lib/getaddrinfo.c lib/gai_strerror.c m4/getaddrinfo.m4 Depends-on: netdb sys_socket extensions gettext-h [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1 || test $HAVE_DECL_GAI_STRERROR = 0 || test $REPLACE_GAI_STRERROR = 1] inet_ntop [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] snprintf [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] stdbool [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] strdup [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] servent [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] hostent [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] sockets [test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1] configure.ac: gl_GETADDRINFO if test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1; then AC_LIBOBJ([getaddrinfo]) fi if test $HAVE_DECL_GAI_STRERROR = 0 || test $REPLACE_GAI_STRERROR = 1; then AC_LIBOBJ([gai_strerror]) fi gl_NETDB_MODULE_INDICATOR([getaddrinfo]) Makefile.am: Include: <netdb.h> Link: $(GETADDRINFO_LIB) $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getaddrinfo-tests���������������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-getaddrinfo.c Depends-on: sockets inet_ntop strerror configure.ac: Makefile.am: TESTS += test-getaddrinfo check_PROGRAMS += test-getaddrinfo test_getaddrinfo_LDADD = $(LDADD) @GETADDRINFO_LIB@ @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getcwd��������������������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the current working directory. Files: lib/getcwd.c m4/getcwd-abort-bug.m4 m4/getcwd-path-max.m4 m4/getcwd.m4 m4/getpagesize.m4 m4/pathmax.m4 Depends-on: unistd extensions pathmax [test $REPLACE_GETCWD = 1] msvc-inval [test $REPLACE_GETCWD = 1] mempcpy [test $REPLACE_GETCWD = 1] d-ino [test $REPLACE_GETCWD = 1] memmove [test $REPLACE_GETCWD = 1] openat [test $REPLACE_GETCWD = 1] fcntl-h [test $REPLACE_GETCWD = 1] fdopendir [test $REPLACE_GETCWD = 1] fstat [test $REPLACE_GETCWD = 1] fstatat [test $REPLACE_GETCWD = 1] opendir [test $REPLACE_GETCWD = 1] readdir [test $REPLACE_GETCWD = 1] rewinddir [test $REPLACE_GETCWD = 1] closedir [test $REPLACE_GETCWD = 1] stdbool [test $REPLACE_GETCWD = 1] malloc-posix [test $REPLACE_GETCWD = 1] strdup-posix [test $REPLACE_GETCWD = 1] configure.ac: gl_FUNC_GETCWD if test $REPLACE_GETCWD = 1; then AC_LIBOBJ([getcwd]) gl_PREREQ_GETCWD fi gl_MODULE_INDICATOR([getcwd]) gl_UNISTD_MODULE_INDICATOR([getcwd]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: all, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getcwd-lgpl���������������������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure getcwd(NULL, 0) returns a buffer allocated by the malloc() function. Files: lib/getcwd-lgpl.c m4/getcwd.m4 Depends-on: unistd free-posix [test $REPLACE_GETCWD = 1] strdup [test $REPLACE_GETCWD = 1] configure.ac: gl_FUNC_GETCWD_LGPL if test $REPLACE_GETCWD = 1; then AC_LIBOBJ([getcwd-lgpl]) fi gl_UNISTD_MODULE_INDICATOR([getcwd]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake �����������������������������������������������������������������gnulib-20210822~d383792/modules/getcwd-lgpl-tests���������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getcwd-lgpl.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getcwd-lgpl check_PROGRAMS += test-getcwd-lgpl test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getcwd-tests��������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getcwd.c tests/test-getcwd.sh Depends-on: errno fcntl-h getcwd-lgpl pathmax sys_stat test-framework-sh configure.ac: Makefile.am: TESTS += test-getcwd.sh check_PROGRAMS += test-getcwd test_getcwd_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getdelim������������������������������������������������������������0000664�0000000�0000000�00000001024�14110572173�0017461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read character delimited data from a stream. Files: lib/getdelim.c m4/getdelim.m4 Depends-on: stdio extensions stdint [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1] errno [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1] configure.ac: gl_FUNC_GETDELIM if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then AC_LIBOBJ([getdelim]) gl_PREREQ_GETDELIM fi gl_STDIO_MODULE_INDICATOR([getdelim]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getdelim-tests������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getdelim.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getdelim check_PROGRAMS += test-getdelim MOSTLYCLEANFILES += test-getdelim.txt ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getdomainname�������������������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getdomainname() function: Return machine's NIS domain name. Files: lib/getdomainname.c m4/getdomainname.m4 Depends-on: unistd extensions netdb [test $HAVE_DECL_GETDOMAINNAME = 0 || test $REPLACE_GETDOMAINNAME = 1] sys_socket [test $HAVE_DECL_GETDOMAINNAME = 0 || test $REPLACE_GETDOMAINNAME = 1] configure.ac: gl_FUNC_GETDOMAINNAME if test $HAVE_DECL_GETDOMAINNAME = 0 || test $REPLACE_GETDOMAINNAME = 1; then AC_LIBOBJ([getdomainname]) gl_PREREQ_GETDOMAINNAME fi gl_UNISTD_MODULE_INDICATOR([getdomainname]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getdomainname-tests�������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0021644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-getdomainname.c Depends-on: configure.ac: Makefile.am: TESTS += test-getdomainname check_PROGRAMS += test-getdomainname �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getdtablesize�������������������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0020527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getdtablesize() function: return tight upper bound for file descriptor values. Files: lib/getdtablesize.c m4/getdtablesize.m4 Depends-on: unistd extensions msvc-inval [test $HAVE_GETDTABLESIZE = 0] configure.ac: gl_FUNC_GETDTABLESIZE if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then AC_LIBOBJ([getdtablesize]) gl_PREREQ_GETDTABLESIZE fi gl_UNISTD_MODULE_INDICATOR([getdtablesize]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake �����gnulib-20210822~d383792/modules/getdtablesize-tests�������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0021663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getdtablesize.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getdtablesize check_PROGRAMS += test-getdtablesize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getentropy����������������������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fill buffer with random bytes. Files: lib/getentropy.c m4/getentropy.m4 Depends-on: getrandom [test $HAVE_GETENTROPY = 0] extensions unistd configure.ac: gl_FUNC_GETENTROPY if test $HAVE_GETENTROPY = 0; then AC_LIBOBJ([getentropy]) fi gl_UNISTD_MODULE_INDICATOR([getentropy]) Makefile.am: Include: <unistd.h> Link: $(LIB_GETRANDOM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getentropy-tests����������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getentropy.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getentropy check_PROGRAMS += test-getentropy test_getentropy_LDADD = $(LDADD) $(LIB_GETRANDOM) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getgroups�����������������������������������������������������������0000664�0000000�0000000�00000001171�14110572173�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getgroups() function: return the supplementary group IDs of the current process. Files: lib/getgroups.c m4/getgroups.m4 Depends-on: unistd free-posix [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1] malloc-posix [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1] stdint [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1] configure.ac: gl_FUNC_GETGROUPS if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then AC_LIBOBJ([getgroups]) fi gl_UNISTD_MODULE_INDICATOR([getgroups]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getgroups-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getgroups.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getgroups check_PROGRAMS += test-getgroups ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gethostname���������������������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: gethostname() function: Return machine's hostname. Files: lib/gethostname.c m4/gethostname.m4 lib/w32sock.h Depends-on: unistd sys_socket [test $HAVE_GETHOSTNAME = 0] errno [test $HAVE_GETHOSTNAME = 0] sockets [test $HAVE_GETHOSTNAME = 0] msvc-nothrow [test $HAVE_GETHOSTNAME = 0] configure.ac: gl_FUNC_GETHOSTNAME if test $HAVE_GETHOSTNAME = 0; then AC_LIBOBJ([gethostname]) gl_PREREQ_GETHOSTNAME fi gl_UNISTD_MODULE_INDICATOR([gethostname]) Makefile.am: Include: <unistd.h> Link: $(GETHOSTNAME_LIB) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gethostname-tests���������������������������������������������������0000664�0000000�0000000�00000000315�14110572173�0021347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-gethostname.c Depends-on: configure.ac: Makefile.am: TESTS += test-gethostname check_PROGRAMS += test-gethostname test_gethostname_LDADD = $(LDADD) @GETHOSTNAME_LIB@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gethrxtime����������������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Get high resolution real time. Files: lib/xtime.h lib/xtime.c lib/gethrxtime.c lib/gethrxtime.h m4/gethrxtime.m4 Depends-on: clock-time extensions extern-inline gettime sys_time configure.ac: gl_GETHRXTIME Makefile.am: lib_SOURCES += gethrxtime.c xtime.c Include: "xtime.h" Link: $(LIB_GETHRXTIME) License: GPL Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getline�������������������������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0017327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a line from a stream. Files: lib/getline.c m4/getline.m4 Depends-on: stdio extensions getdelim [test $REPLACE_GETLINE = 1] configure.ac: gl_FUNC_GETLINE if test $REPLACE_GETLINE = 1; then AC_LIBOBJ([getline]) gl_PREREQ_GETLINE fi gl_STDIO_MODULE_INDICATOR([getline]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getline-tests�������������������������������������������������������0000664�0000000�0000000�00000000301�14110572173�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getline.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getline check_PROGRAMS += test-getline MOSTLYCLEANFILES += test-getline.txt �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getloadavg����������������������������������������������������������0000664�0000000�0000000�00000001135�14110572173�0020007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the current system load averages. Files: lib/getloadavg.c m4/getloadavg.m4 Depends-on: extensions intprops [test $HAVE_GETLOADAVG = 0] open [case $host_os in mingw*) false;; *) test $HAVE_GETLOADAVG = 0;; esac] stdbool [test $HAVE_GETLOADAVG = 0] stdlib [test $HAVE_GETLOADAVG = 0] configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) gl_GETLOADAVG if test $HAVE_GETLOADAVG = 0; then AC_LIBOBJ([getloadavg]) gl_PREREQ_GETLOADAVG fi gl_STDLIB_MODULE_INDICATOR([getloadavg]) Makefile.am: Include: <stdlib.h> Link: $(GETLOADAVG_LIBS) License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getloadavg-tests����������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getloadavg.c tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-getloadavg check_PROGRAMS += test-getloadavg test_getloadavg_LDADD = $(LDADD) @GETLOADAVG_LIBS@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getlogin������������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getlogin() function: Get user name. Files: lib/getlogin.c m4/getlogin.m4 Depends-on: unistd configure.ac: gl_FUNC_GETLOGIN if test $HAVE_GETLOGIN = 0; then AC_LIBOBJ([getlogin]) fi gl_UNISTD_MODULE_INDICATOR([getlogin]) AC_REQUIRE([gl_LIB_GETLOGIN]) Makefile.am: Include: <unistd.h> Link: $(LIB_GETLOGIN) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getlogin-tests������������������������������������������������������0000664�0000000�0000000�00000000344�14110572173�0020643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getlogin.c tests/test-getlogin.h tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getlogin check_PROGRAMS += test-getlogin test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getlogin_r����������������������������������������������������������0000664�0000000�0000000�00000001204�14110572173�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getlogin_r() function: Get user name to a buffer allocated by the caller. Files: lib/getlogin_r.c m4/getlogin_r.m4 m4/getlogin.m4 Depends-on: unistd extensions malloca [test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1] memchr [test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1] configure.ac: gl_FUNC_GETLOGIN_R if test $HAVE_GETLOGIN_R = 0 || test $REPLACE_GETLOGIN_R = 1; then AC_LIBOBJ([getlogin_r]) gl_PREREQ_GETLOGIN_R fi gl_UNISTD_MODULE_INDICATOR([getlogin_r]) AC_REQUIRE([gl_LIB_GETLOGIN]) Makefile.am: Include: <unistd.h> Link: $(LIB_GETLOGIN) License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getlogin_r-tests����������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0021165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getlogin_r.c tests/test-getlogin.h tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getlogin_r check_PROGRAMS += test-getlogin_r test_getlogin_r_LDADD = $(LDADD) $(LIB_GETLOGIN) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getndelim2����������������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0017731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a line from a stream, stopping at one of 2 delimiters, with bounded memory allocation. Files: lib/getndelim2.h lib/getndelim2.c m4/getndelim2.m4 Depends-on: ssize_t stdbool stdint freadptr freadseek memchr2 configure.ac: gl_GETNDELIM2 Makefile.am: lib_SOURCES += getndelim2.c Include: "getndelim2.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getndelim2-tests����������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getndelim2.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getndelim2 check_PROGRAMS += test-getndelim2 MOSTLYCLEANFILES += test-getndelim2.txt �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getnline������������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a line from a stream, with bounded memory allocation. Files: lib/getnline.h lib/getnline.c m4/getnline.m4 Depends-on: getndelim2 ssize_t configure.ac: gl_GETNLINE Makefile.am: lib_SOURCES += getnline.h getnline.c Include: "getnline.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getopt-gnu����������������������������������������������������������0000664�0000000�0000000�00000000735�14110572173�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: GNU-like getopt() function, getopt_long() function, getopt_long_only() function: process command line arguments. Files: Depends-on: nocrash getopt-posix configure.ac: gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. Makefile.am: Include: <getopt.h> License: LGPLv2+ Maintainer: all, glibc �����������������������������������gnulib-20210822~d383792/modules/getopt-gnu-tests����������������������������������������������������0000664�0000000�0000000�00000000473�14110572173�0021127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/signature.h tests/test-getopt-gnu.c tests/test-getopt-main.h tests/test-getopt.h tests/test-getopt_long.h Depends-on: dup2 setenv stdbool unistd unsetenv configure.ac: Makefile.am: TESTS += test-getopt-gnu check_PROGRAMS += test-getopt-gnu test_getopt_gnu_LDADD = $(LDADD) $(LIBINTL) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getopt-posix��������������������������������������������������������0000664�0000000�0000000�00000003610�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getopt() function: process command line arguments. Files: lib/getopt.c lib/getopt1.c lib/getopt.in.h lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt_int.h m4/getopt.m4 Depends-on: unistd extensions include_next gettext-h [test $REPLACE_GETOPT = 1] snippet/arg-nonnull configure.ac: gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) dnl Define the substituted variable GNULIB_UNISTD_H_GETOPT to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT], [1]) fi gl_UNISTD_MODULE_INDICATOR([getopt-posix]) Makefile.am: BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ < $(srcdir)/getopt-cdefs.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t Include: <unistd.h> License: LGPLv2+ Maintainer: all, glibc ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getopt-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/signature.h tests/test-getopt-posix.c tests/test-getopt-main.h tests/test-getopt.h Depends-on: dup2 setenv stdbool unistd unsetenv configure.ac: Makefile.am: TESTS += test-getopt-posix check_PROGRAMS += test-getopt-posix test_getopt_posix_LDADD = $(LDADD) $(LIBINTL) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getpagesize���������������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getpagesize() function: Return memory page size. Files: lib/getpagesize.c m4/getpagesize.m4 Depends-on: unistd configure.ac: gl_FUNC_GETPAGESIZE if test $REPLACE_GETPAGESIZE = 1; then AC_LIBOBJ([getpagesize]) fi gl_UNISTD_MODULE_INDICATOR([getpagesize]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getpass�������������������������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getpass() function: read a password from /dev/tty. Files: lib/getpass.h lib/getpass.c m4/getpass.m4 Depends-on: unistd extensions fopen-gnu fseeko getline stdbool strdup-posix configure.ac: gl_FUNC_GETPASS if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi gl_UNISTD_MODULE_INDICATOR([getpass]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering, glibc �����������������������������������������������������������gnulib-20210822~d383792/modules/getpass-gnu���������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getpass() function: read a password of arbitrary length from /dev/tty. Files: lib/getpass.h lib/getpass.c m4/getpass.m4 Depends-on: getpass configure.ac: gl_FUNC_GETPASS_GNU if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi gl_UNISTD_MODULE_INDICATOR([getpass]) Makefile.am: Include: <unistd.h> License: LGPL Maintainer: Jim Meyering, glibc ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getpeername���������������������������������������������������������0000664�0000000�0000000�00000001112�14110572173�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getpeername() function: return information about the remote end of a connected socket. Files: lib/getpeername.c lib/w32sock.h Depends-on: extensions sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([getpeername]) fi gl_SYS_SOCKET_MODULE_INDICATOR([getpeername]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getpeername-tests���������������������������������������������������0000664�0000000�0000000�00000000351�14110572173�0021325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getpeername.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-getpeername check_PROGRAMS += test-getpeername test_getpeername_LDADD = $(LDADD) @LIBSOCKET@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getprogname���������������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Program name management. Files: lib/getprogname.h lib/getprogname.c m4/getprogname.m4 Depends-on: basename-lgpl extensions open configure.ac: gl_FUNC_GETPROGNAME Makefile.am: lib_SOURCES += getprogname.h getprogname.c Include: "getprogname.h" License: LGPLv2+ Maintainer: All ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getprogname-tests���������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0021342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getprogname.c Depends-on: string configure.ac: Makefile.am: DEFS += -DEXEEXT=\"@EXEEXT@\" TESTS += test-getprogname check_PROGRAMS += test-getprogname test_getprogname_LDADD = $(LDADD) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getrandom�����������������������������������������������������������0000664�0000000�0000000�00000001255�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fill buffer with random bytes. Files: lib/getrandom.c m4/getrandom.m4 Depends-on: sys_random fcntl-h [test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1] minmax [test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1] open [case $host_os in mingw*) false;; *) test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1;; esac] configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) gl_FUNC_GETRANDOM if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then AC_LIBOBJ([getrandom]) fi gl_SYS_RANDOM_MODULE_INDICATOR([getrandom]) Makefile.am: Include: <sys/random.h> Link: $(LIB_GETRANDOM) License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getrandom-tests�����������������������������������������������������0000664�0000000�0000000�00000000322�14110572173�0021007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getrandom.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getrandom check_PROGRAMS += test-getrandom test_getrandom_LDADD = $(LDADD) @LIB_GETRANDOM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getrusage�����������������������������������������������������������0000664�0000000�0000000�00000000615�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getrusage() function: Get resource usage of current process. Files: lib/getrusage.c m4/getrusage.m4 Depends-on: sys_resource stdint [test $HAVE_GETRUSAGE = 0] configure.ac: gl_FUNC_GETRUSAGE if test $HAVE_GETRUSAGE = 0; then AC_LIBOBJ([getrusage]) fi gl_SYS_RESOURCE_MODULE_INDICATOR([getrusage]) Makefile.am: Include: <sys/resource.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getrusage-tests�����������������������������������������������������0000664�0000000�0000000�00000000257�14110572173�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getrusage.c tests/signature.h tests/macros.h Depends-on: gettimeofday configure.ac: Makefile.am: TESTS += test-getrusage check_PROGRAMS += test-getrusage �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getsockname���������������������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0020164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getsockname() function: return information about the local end of a connected socket. Files: lib/getsockname.c lib/w32sock.h Depends-on: extensions sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([getsockname]) fi gl_SYS_SOCKET_MODULE_INDICATOR([getsockname]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getsockname-tests���������������������������������������������������0000664�0000000�0000000�00000000471�14110572173�0021334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getsockname.c tests/signature.h tests/macros.h Depends-on: netinet_in arpa_inet inet_pton errno perror sockets socket setsockopt bind listen configure.ac: Makefile.am: TESTS += test-getsockname check_PROGRAMS += test-getsockname test_getsockname_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getsockopt����������������������������������������������������������0000664�0000000�0000000�00000001147�14110572173�0020057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getsockopt() function: retrieve optional settings on a socket. Files: lib/getsockopt.c lib/w32sock.h Depends-on: extensions sys_socket socketlib sys_time [test "$ac_cv_header_winsock2_h" = yes] errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([getsockopt]) fi gl_SYS_SOCKET_MODULE_INDICATOR([getsockopt]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getsockopt-tests����������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getsockopt.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-getsockopt check_PROGRAMS += test-getsockopt test_getsockopt_LDADD = $(LDADD) @LIBSOCKET@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getsubopt�����������������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getsubopt: Parse comma separated list into words. Files: lib/getsubopt.c m4/getsubopt.m4 Depends-on: stdlib extensions strchrnul [test $HAVE_GETSUBOPT = 0] memchr [test $HAVE_GETSUBOPT = 0] configure.ac: gl_FUNC_GETSUBOPT if test $HAVE_GETSUBOPT = 0; then AC_LIBOBJ([getsubopt]) gl_PREREQ_GETSUBOPT fi gl_STDLIB_MODULE_INDICATOR([getsubopt]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all, glibc �������������������������������������������������������������gnulib-20210822~d383792/modules/gettext�������������������������������������������������������������0000664�0000000�0000000�00000002334�14110572173�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Translate messages to user's native language. Status: obsolete Notice: This module is obsolete. Use the module 'gettext-h' instead to make your program capable of internationalization, when GNU gettext is also used. Files: m4/gettext.m4 m4/host-cpu-c-abi.m4 m4/iconv.m4 m4/intl-thread-locale.m4 m4/intlmacosx.m4 m4/nls.m4 m4/po.m4 m4/progtest.m4 build-aux/config.rpath Depends-on: extensions gettext-h havelib configure.ac: AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.20]) Makefile.am: # If your project uses "gettextize --intl" to put a source-code # copy of libintl into the package, every Makefile.am needs # -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory. # Here's one way to do this: #AM_CPPFLAGS += -I$(top_builddir)/intl # This option has no effect when the user disables NLS (because then # the intl directory contains no libintl.h file). This option is not # enabled by default because the intl directory might not exist if # your project does not use "gettext --intl", and some compilers # complain about -I options applied to nonexistent directories. Include: "gettext.h" Link: $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gettext-h�����������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0017607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Translate messages to user's native language if GNU gettext is also used. Files: lib/gettext.h Depends-on: configure.ac: AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) Makefile.am: lib_SOURCES += gettext.h Include: "gettext.h" Link: $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gettime�������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return current time, with nanosecond resolution. Files: lib/gettime.c m4/gettime.m4 Depends-on: clock-time gettimeofday sys_time timespec extensions configure.ac: gl_GETTIME Makefile.am: lib_SOURCES += gettime.c Include: "timespec.h" Link: $(LIB_CLOCK_GETTIME) License: LGPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gettimeofday��������������������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: gettimeofday() function: return current time. Files: lib/gettimeofday.c m4/gettimeofday.m4 Depends-on: sys_time configure.ac: gl_FUNC_GETTIMEOFDAY if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then AC_LIBOBJ([gettimeofday]) gl_PREREQ_GETTIMEOFDAY fi gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) Makefile.am: Include: <sys/time.h> License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gettimeofday-tests��������������������������������������������������0000664�0000000�0000000�00000000235�14110572173�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-gettimeofday.c Depends-on: configure.ac: Makefile.am: TESTS += test-gettimeofday check_PROGRAMS += test-gettimeofday �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getugroups����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the group IDs of a user. Files: lib/getugroups.c lib/getugroups.h m4/getugroups.m4 Depends-on: errno configure.ac: gl_GETUGROUPS Makefile.am: lib_SOURCES += getugroups.c Include: "getugroups.h" License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getumask������������������������������������������������������������0000664�0000000�0000000�00000001136�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getumask() function: retrieve the umask of the process (multithread-safe) Files: lib/getumask.c m4/getumask.m4 Depends-on: sys_stat extensions c99 [test $HAVE_GETUMASK = 0] unistd [test $HAVE_GETUMASK = 0] clean-temp [test $HAVE_GETUMASK = 0] tempname [test $HAVE_GETUMASK = 0] configure.ac: gl_FUNC_GETUMASK if test $HAVE_GETUMASK = 0; then AC_LIBOBJ([getumask]) gl_PREREQ_GETUMASK fi gl_SYS_STAT_MODULE_INDICATOR([getumask]) Makefile.am: Include: <sys/stat.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) $(LIBTHREAD) License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getumask-tests������������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getumask.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getumask check_PROGRAMS += test-getumask test_getumask_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_GETRANDOM) $(LIBINTL) $(LIBTHREAD) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/getusershell��������������������������������������������������������0000664�0000000�0000000�00000000764�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return names of valid user shells. Files: lib/getusershell.c m4/getusershell.m4 Depends-on: unistd extensions fopen-safer [test $HAVE_GETUSERSHELL = 0] unlocked-io-internal [test $HAVE_GETUSERSHELL = 0] xalloc [test $HAVE_GETUSERSHELL = 0] configure.ac: gl_FUNC_GETUSERSHELL if test $HAVE_GETUSERSHELL = 0; then AC_LIBOBJ([getusershell]) fi gl_UNISTD_MODULE_INDICATOR([getusershell]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering ������������gnulib-20210822~d383792/modules/git-merge-changelog�������������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: git "merge" driver for GNU style ChangeLog files Files: lib/git-merge-changelog.c Depends-on: c99 getopt-gnu stdbool stdlib error read-file xlist array-list linkedhash-list linked-list rbtreehash-list xalloc xmalloca fstrcmp minmax c-strstr fwriteerror memchr memcmp getprogname configure.ac: Makefile.am: bin_PROGRAMS = git-merge-changelog git_merge_changelog_LDADD = libgnu.a @LIBINTL@ $(LIBTHREAD) Include: License: GPL Maintainer: all �����������������������������������������������������gnulib-20210822~d383792/modules/git-version-gen�����������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0020705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute a version string from a git repository. Files: build-aux/git-version-gen Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gitlog-to-changelog�������������������������������������������������0000664�0000000�0000000�00000000271�14110572173�0021524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert git log to ChangeLog Files: build-aux/gitlog-to-changelog Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/glob����������������������������������������������������������������0000664�0000000�0000000�00000003447�14110572173�0016625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: glob() function: Search for files and directories with paths matching a pattern, with GNU extensions. Files: lib/glob.c lib/glob_internal.h lib/glob_pattern_p.c lib/globfree.c m4/glob.m4 Depends-on: glob-h c99 largefile alloca [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] builtin-expect [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] closedir [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] d-type [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] flexmember [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] fnmatch [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] getlogin_r [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] libc-config [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] memchr [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] mempcpy [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] opendir [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] readdir [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] scratch_buffer [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] stat [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] stdbool [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] stdint [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] strdup [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] unistd [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] malloc-posix [test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1] configure.ac: gl_GLOB if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then AC_LIBOBJ([glob]) AC_LIBOBJ([globfree]) gl_PREREQ_GLOB fi if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then AC_LIBOBJ([glob_pattern_p]) fi gl_GLOB_MODULE_INDICATOR([glob]) Makefile.am: Include: <glob.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all, glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/glob-h��������������������������������������������������������������0000664�0000000�0000000�00000004343�14110572173�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <glob.h> that conforms to POSIX. Files: lib/glob.in.h lib/glob-libc.h m4/glob_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use libc-config lstat sys_stat configure.ac: gl_GLOB_H gl_GLOB_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += $(GLOB_H) # We need the following in order to create <glob.h>. if GL_GENERATE_GLOB_H glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_GLOB_H''@|$(HAVE_GLOB_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GLOB_H''@|$(NEXT_GLOB_H)|g' \ -e 's/@''GNULIB_GLOB''@/$(GNULIB_GLOB)/g' \ -e 's|@''HAVE_GLOB''@|$(HAVE_GLOB)|g' \ -e 's|@''HAVE_GLOB_PATTERN_P''@|$(HAVE_GLOB_PATTERN_P)|g' \ -e 's|@''REPLACE_GLOB''@|$(REPLACE_GLOB)|g' \ -e 's|@''REPLACE_GLOB_PATTERN_P''@|$(REPLACE_GLOB_PATTERN_P)|g' \ -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)' \ < $(srcdir)/glob.in.h; \ } > $@-t && \ mv $@-t $@ else glob.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += glob.h glob.h-t BUILT_SOURCES += glob-libc.gl.h glob-libc.gl.h: glob-libc.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e '/__BEGIN_DECLS/{ s/__BEGIN_DECLS/#ifdef __cplusplus%extern "C" {%#endif/; y/%/\n/; }' \ -e '/__END_DECLS/{ s/__END_DECLS/#ifdef __cplusplus%}%#endif/; y/%/\n/; }' \ -e 's|__THROWNL||g' \ -e 's|__THROW||g' \ -e 's|__restrict|restrict|g' \ -e 's|defined __USE_MISC|1|' \ -e 's|ifdef __USE_GNU|if 1|' \ -e 's|ifdef __USE_LARGEFILE64|if 0|' \ < $(srcdir)/glob-libc.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += glob-libc.gl.h glob-libc.gl.h-t Include: <glob.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/glob-h-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-glob-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-glob-h-c++ check_PROGRAMS += test-glob-h-c++ test_glob_h_c___SOURCES = test-glob-h-c++.cc test_glob_h_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/glob-h-tests��������������������������������������������������������0000664�0000000�0000000�00000000230�14110572173�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-glob-h.c tests/macros.h Depends-on: glob-h-c++-tests configure.ac: Makefile.am: TESTS += test-glob-h check_PROGRAMS += test-glob-h ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/glob-tests����������������������������������������������������������0000664�0000000�0000000�00000000305�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-glob.c tests/signature.h tests/macros.h Depends-on: symlink configure.ac: Makefile.am: TESTS += test-glob check_PROGRAMS += test-glob test_glob_LDADD = $(LDADD) $(LIB_MBRTOWC) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gnu-make������������������������������������������������������������0000664�0000000�0000000�00000000744�14110572173�0017403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether recent-enough GNU Make is being used. Files: m4/gnu-make.m4 Depends-on: configure.ac: gl_GNU_MAKE Makefile.am: ##Sample usage of gnu-make module: #if GNU_MAKE # [nicer features that work only with GNU Make] #else # [fallback features that work in any 'make' implementation; see # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html # for the POSIX specification] #endif Include: License: GPLed build tool Maintainer: Paul Eggert ����������������������������gnulib-20210822~d383792/modules/gnu-web-doc-update��������������������������������������������������0000664�0000000�0000000�00000000365�14110572173�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Update the official GNU web documentation for your project. See also readme-release. Files: build-aux/gnu-web-doc-update Depends-on: gendocs configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gnumakefile���������������������������������������������������������0000664�0000000�0000000�00000001536�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Add GNU-make specific rules for maintainer use. Files: top/GNUmakefile Depends-on: configure.ac: # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile m4_if(m4_version_compare([2.61a.100], m4_defn([m4_PACKAGE_VERSION])), [1], [], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) Makefile.am: EXTRA_DIST += $(top_srcdir)/GNUmakefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile Include: License: GPLed build tool Maintainer: coreutils ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gnupload������������������������������������������������������������0000664�0000000�0000000�00000000424�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Upload PGP signed files to gnu.org. See https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html for more information. Files: build-aux/gnupload Depends-on: configure.ac: Makefile.am: Include: License: GPLv2+ build tool Maintainer: coreutils ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gperf���������������������������������������������������������������0000664�0000000�0000000�00000000427�14110572173�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provides the GNU gperf build tool. Applicability: all Files: Depends-on: configure.ac: Makefile.am: GPERF = gperf V_GPERF = $(V_GPERF_@AM_V@) V_GPERF_ = $(V_GPERF_@AM_DEFAULT_V@) V_GPERF_0 = @echo " GPERF " $@; Include: License: unlimited Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gpl-2.0�������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0016751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU General Public License version 2.0 in Texinfo format. Files: doc/gpl-2.0.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/gpl-3.0�������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU General Public License version 3.0 in Texinfo format. Files: doc/gpl-3.0.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/grantpt�������������������������������������������������������������0000664�0000000�0000000�00000001004�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: grantpt() function: Acquire ownership of the slave side of a pseudo-terminal. Files: lib/grantpt.c lib/pty-private.h m4/grantpt.m4 Depends-on: stdlib extensions pt_chown [test $HAVE_GRANTPT = 0] waitpid [test $HAVE_GRANTPT = 0] configmake [test $HAVE_GRANTPT = 0] configure.ac: gl_FUNC_GRANTPT if test $HAVE_GRANTPT = 0; then AC_LIBOBJ([grantpt]) gl_PREREQ_GRANTPT fi gl_STDLIB_MODULE_INDICATOR([grantpt]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/grantpt-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-grantpt.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-grantpt check_PROGRAMS += test-grantpt ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/group-member��������������������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether the current process has the permissions of a given group ID. Files: lib/group-member.c m4/group-member.m4 Depends-on: unistd extensions getgroups [test $HAVE_GROUP_MEMBER = 0] intprops [test $HAVE_GROUP_MEMBER = 0] realloc-gnu [test $HAVE_GROUP_MEMBER = 0] configure.ac: gl_FUNC_GROUP_MEMBER if test $HAVE_GROUP_MEMBER = 0; then AC_LIBOBJ([group-member]) gl_PREREQ_GROUP_MEMBER fi gl_UNISTD_MODULE_INDICATOR([group-member]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hamt����������������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Persistent hash array mapped tries. Files: lib/hamt.h lib/hamt.c Depends-on: count-one-bits flexmember inttypes-incomplete stdbool stdint verify xalloc configure.ac: Makefile.am: lib_SOURCES += hamt.c Include: "hamt.h" License: GPL Maintainer: Marc Nieper-Wisskirchen ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hamt-tests����������������������������������������������������������0000664�0000000�0000000�00000000246�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hamt.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-hamt check_PROGRAMS += test-hamt test_hamt_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hard-locale���������������������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether the current locale is different from the "C" locale. Files: lib/hard-locale.h lib/hard-locale.c Depends-on: stdbool setlocale-null configure.ac: AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL" AC_SUBST([LIB_HARD_LOCALE]) Makefile.am: lib_SOURCES += hard-locale.c Include: "hard-locale.h" Link: $(LIB_HARD_LOCALE) License: LGPLv2+ Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hard-locale-tests���������������������������������������������������0000664�0000000�0000000�00000001042�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hard-locale.c tests/locale.c m4/musl.m4 Depends-on: configure.ac: gl_MUSL_LIBC dnl Distinguish OpenBSD >= 6.2 from OpenBSD < 6.2. AC_CHECK_FUNCS_ONCE([duplocale]) Makefile.am: TESTS += test-hard-locale check_PROGRAMS += test-hard-locale test_hard_locale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_HARD_LOCALE@ # 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 current_locale_SOURCES = locale.c ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash����������������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parameterizable hash table. Files: lib/hash.c lib/hash.h Depends-on: bitrotate stdbool stdint xalloc-oversized configure.ac: Makefile.am: lib_SOURCES += hash.c Include: "hash.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-map������������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Map data type implemented by a hash table. Files: lib/gl_hash_map.h lib/gl_hash_map.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h Depends-on: map stdint xsize c99 configure.ac: Makefile.am: lib_SOURCES += gl_hash_map.h gl_hash_map.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h Include: "gl_hash_map.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-map-tests������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hash_map.c tests/macros.h Depends-on: array-map xalloc configure.ac: Makefile.am: TESTS += test-hash_map check_PROGRAMS += test-hash_map test_hash_map_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-pjw������������������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute a hash value for a NUL-terminated string. Files: lib/hash-pjw.h lib/hash-pjw.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += hash-pjw.h hash-pjw.c Include: "hash-pjw.h" License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-pjw-bare�������������������������������������������������������0000664�0000000�0000000�00000000417�14110572173�0020324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute a hash value for a buffer of known size. Files: lib/hash-pjw-bare.h lib/hash-pjw-bare.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += hash-pjw-bare.h hash-pjw-bare.c Include: "hash-pjw-bare.h" License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-set������������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set data type implemented by a hash table. Files: lib/gl_hash_set.h lib/gl_hash_set.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h Depends-on: set stdint xsize c99 configure.ac: Makefile.am: lib_SOURCES += gl_hash_set.h gl_hash_set.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h Include: "gl_hash_set.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-set-tests������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hash_set.c tests/macros.h Depends-on: array-set xalloc configure.ac: Makefile.am: TESTS += test-hash_set check_PROGRAMS += test-hash_set test_hash_set_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-tests����������������������������������������������������������0000664�0000000�0000000�00000000233�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hash.c tests/macros.h Depends-on: hash-pjw inttostr stdbool configure.ac: Makefile.am: TESTS += test-hash check_PROGRAMS += test-hash ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-triple���������������������������������������������������������0000664�0000000�0000000�00000000421�14110572173�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hash functions for file-related triples: name, device, inode. Files: lib/hash-triple.c Depends-on: hash-triple-simple same same-inode configure.ac: Makefile.am: lib_SOURCES += hash-triple.c Include: "hash-triple.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hash-triple-simple��������������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0021401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hash functions for file-related triples: name, device, inode. Files: lib/hash-triple-simple.c lib/hash-triple.h Depends-on: hash-pjw same-inode configure.ac: Makefile.am: lib_SOURCES += hash-triple-simple.c Include: "hash-triple.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/havelib�������������������������������������������������������������0000664�0000000�0000000�00000000412�14110572173�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros to search for libraries. Files: m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/host-cpu-c-abi.m4 build-aux/config.rpath Depends-on: configure.ac: AC_DEFUN([gl_HAVE_MODULE_HAVELIB]) Makefile.am: Include: License: unlimited Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/havelib-tests�������������������������������������������������������0000664�0000000�0000000�00000030504�14110572173�0020446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: longrunning-test unportable-test Files: tests/havelib/README tests/havelib/Makefile.am tests/havelib/rpath-1 tests/havelib/rpath-1a tests/havelib/rpath-1b tests/havelib/rpath-2_a tests/havelib/rpath-2_b tests/havelib/rpath-2aaa tests/havelib/rpath-2aab tests/havelib/rpath-2aac tests/havelib/rpath-2aad tests/havelib/rpath-2aba tests/havelib/rpath-2abb tests/havelib/rpath-2abc tests/havelib/rpath-2abd tests/havelib/rpath-2baa tests/havelib/rpath-2bab tests/havelib/rpath-2bac tests/havelib/rpath-2bad tests/havelib/rpath-2bba tests/havelib/rpath-2bbb tests/havelib/rpath-2bbc tests/havelib/rpath-2bbd tests/havelib/rpath-3_a tests/havelib/rpath-3_b tests/havelib/rpath-3aaa tests/havelib/rpath-3aab tests/havelib/rpath-3aac tests/havelib/rpath-3aad tests/havelib/rpath-3aae tests/havelib/rpath-3aaf tests/havelib/rpath-3aag tests/havelib/rpath-3aah tests/havelib/rpath-3aba tests/havelib/rpath-3abb tests/havelib/rpath-3abc tests/havelib/rpath-3abd tests/havelib/rpath-3abe tests/havelib/rpath-3abf tests/havelib/rpath-3abg tests/havelib/rpath-3abh tests/havelib/rpath-3baa tests/havelib/rpath-3bab tests/havelib/rpath-3bac tests/havelib/rpath-3bad tests/havelib/rpath-3bae tests/havelib/rpath-3baf tests/havelib/rpath-3bag tests/havelib/rpath-3bah tests/havelib/rpath-3bba tests/havelib/rpath-3bbb tests/havelib/rpath-3bbc tests/havelib/rpath-3bbd tests/havelib/rpath-3bbe tests/havelib/rpath-3bbf tests/havelib/rpath-3bbg tests/havelib/rpath-3bbh tests/havelib/rpathx/rpathx.c tests/havelib/rpathx/Makefile.am tests/havelib/rpathx/configure.ac tests/havelib/rpathy/rpathy.c tests/havelib/rpathy/Makefile.am tests/havelib/rpathy/configure.ac tests/havelib/rpathz/rpathz.c tests/havelib/rpathz/Makefile.am tests/havelib/rpathz/configure.ac tests/havelib/rpathlx/usex.c tests/havelib/rpathlx/Makefile.am tests/havelib/rpathlx/configure.ac tests/havelib/rpathly/usey.c tests/havelib/rpathly/Makefile.am tests/havelib/rpathly/configure.ac tests/havelib/rpathlz/usez.c tests/havelib/rpathlz/Makefile.am tests/havelib/rpathlz/configure.ac tests/havelib/rpathlyx/usey.c tests/havelib/rpathlyx/Makefile.am tests/havelib/rpathlyx/configure.ac tests/havelib/rpathlzyx/usez.c tests/havelib/rpathlzyx/Makefile.am tests/havelib/rpathlzyx/configure.ac tests/havelib/rpathcfg.sh Depends-on: configure.ac: HAVELIB_M4_BASE="${gl_m4_base}" AC_SUBST([HAVELIB_M4_BASE]) AC_LIB_PREPARE_MULTILIB LIBDIRSTEM=$acl_libdirstem AC_SUBST([LIBDIRSTEM]) dnl Checks for tests/rpathcfg. AC_SUBST([GCC]) AC_SUBST([LD]) AC_SUBST([with_gnu_ld]) AC_CONFIG_FILES([havelib/Makefile]) Makefile.am: SUBDIRS += havelib # These variables can be overridden on the 'make' command line. ACLOCAL = aclocal AUTOCONF = autoconf AUTOMAKE = automake LIBTOOLIZE = libtoolize HAVELIB_GENERATED_FILES = \ havelib/Makefile.in \ havelib/rpathx/Makefile.in \ havelib/rpathx/aclocal.m4 \ havelib/rpathx/configure \ havelib/rpathy/Makefile.in \ havelib/rpathy/aclocal.m4 \ havelib/rpathy/configure \ havelib/rpathz/Makefile.in \ havelib/rpathz/aclocal.m4 \ havelib/rpathz/configure \ havelib/rpathlx/Makefile.in \ havelib/rpathlx/aclocal.m4 \ havelib/rpathlx/configure \ havelib/rpathly/Makefile.in \ havelib/rpathly/aclocal.m4 \ havelib/rpathly/configure \ havelib/rpathlz/Makefile.in \ havelib/rpathlz/aclocal.m4 \ havelib/rpathlz/configure \ havelib/rpathlyx/Makefile.in \ havelib/rpathlyx/aclocal.m4 \ havelib/rpathlyx/configure \ havelib/rpathlzyx/Makefile.in \ havelib/rpathlzyx/aclocal.m4 \ havelib/rpathlzyx/configure BUILT_SOURCES += \ havelib/Makefile.in \ havelib/rpathx/Makefile.in \ havelib/rpathx/aclocal.m4 \ havelib/rpathx/configure \ havelib/rpathy/Makefile.in \ havelib/rpathy/aclocal.m4 \ havelib/rpathy/configure \ havelib/rpathz/Makefile.in \ havelib/rpathz/aclocal.m4 \ havelib/rpathz/configure \ havelib/rpathlx/Makefile.in \ havelib/rpathlx/aclocal.m4 \ havelib/rpathlx/configure \ havelib/rpathly/Makefile.in \ havelib/rpathly/aclocal.m4 \ havelib/rpathly/configure \ havelib/rpathlz/Makefile.in \ havelib/rpathlz/aclocal.m4 \ havelib/rpathlz/configure \ havelib/rpathlyx/Makefile.in \ havelib/rpathlyx/aclocal.m4 \ havelib/rpathlyx/configure \ havelib/rpathlzyx/Makefile.in \ havelib/rpathlzyx/aclocal.m4 \ havelib/rpathlzyx/configure $(srcdir)/havelib/Makefile.in: $(srcdir)/havelib/Makefile.am cd $(srcdir) && $(AUTOMAKE) havelib/Makefile # Subdirectories with separate autoconfiguration. $(srcdir)/havelib/rpathx/Makefile.in: $(srcdir)/havelib/rpathx/Makefile.am $(srcdir)/havelib/rpathx/configure.ac $(srcdir)/havelib/rpathx/aclocal.m4 cd $(srcdir)/havelib/rpathx && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathx/aclocal.m4: $(srcdir)/havelib/rpathx/configure.ac cd $(srcdir)/havelib/rpathx && $(LIBTOOLIZE) --copy abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathx && $(ACLOCAL) -I "$$abs_m4_dir" -I `cd ../ltm4 && pwd` $(srcdir)/havelib/rpathx/configure: $(srcdir)/havelib/rpathx/configure.ac $(srcdir)/havelib/rpathx/aclocal.m4 cd $(srcdir)/havelib/rpathx && $(AUTOCONF) $(srcdir)/havelib/rpathy/Makefile.in: $(srcdir)/havelib/rpathy/Makefile.am $(srcdir)/havelib/rpathy/configure.ac $(srcdir)/havelib/rpathy/aclocal.m4 cd $(srcdir)/havelib/rpathy && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathy/aclocal.m4: $(srcdir)/havelib/rpathy/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 cd $(srcdir)/havelib/rpathy && $(LIBTOOLIZE) --copy abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathy && $(ACLOCAL) -I "$$abs_m4_dir" -I `cd ../ltm4 && pwd` $(srcdir)/havelib/rpathy/configure: $(srcdir)/havelib/rpathy/configure.ac $(srcdir)/havelib/rpathy/aclocal.m4 cd $(srcdir)/havelib/rpathy && $(AUTOCONF) $(srcdir)/havelib/rpathz/Makefile.in: $(srcdir)/havelib/rpathz/Makefile.am $(srcdir)/havelib/rpathz/configure.ac $(srcdir)/havelib/rpathz/aclocal.m4 cd $(srcdir)/havelib/rpathz && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathz/aclocal.m4: $(srcdir)/havelib/rpathz/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 cd $(srcdir)/havelib/rpathz && $(LIBTOOLIZE) --copy abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathz && $(ACLOCAL) -I "$$abs_m4_dir" -I `cd ../ltm4 && pwd` $(srcdir)/havelib/rpathz/configure: $(srcdir)/havelib/rpathz/configure.ac $(srcdir)/havelib/rpathz/aclocal.m4 cd $(srcdir)/havelib/rpathz && $(AUTOCONF) $(srcdir)/havelib/rpathlx/Makefile.in: $(srcdir)/havelib/rpathlx/Makefile.am $(srcdir)/havelib/rpathlx/configure.ac $(srcdir)/havelib/rpathlx/aclocal.m4 cd $(srcdir)/havelib/rpathlx && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathlx/aclocal.m4: $(srcdir)/havelib/rpathlx/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathlx && $(ACLOCAL) -I "$$abs_m4_dir" $(srcdir)/havelib/rpathlx/configure: $(srcdir)/havelib/rpathlx/configure.ac $(srcdir)/havelib/rpathlx/aclocal.m4 cd $(srcdir)/havelib/rpathlx && $(AUTOCONF) $(srcdir)/havelib/rpathly/Makefile.in: $(srcdir)/havelib/rpathly/Makefile.am $(srcdir)/havelib/rpathly/configure.ac $(srcdir)/havelib/rpathly/aclocal.m4 cd $(srcdir)/havelib/rpathly && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathly/aclocal.m4: $(srcdir)/havelib/rpathly/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathly && $(ACLOCAL) -I "$$abs_m4_dir" $(srcdir)/havelib/rpathly/configure: $(srcdir)/havelib/rpathly/configure.ac $(srcdir)/havelib/rpathly/aclocal.m4 cd $(srcdir)/havelib/rpathly && $(AUTOCONF) $(srcdir)/havelib/rpathlyx/Makefile.in: $(srcdir)/havelib/rpathlyx/Makefile.am $(srcdir)/havelib/rpathlyx/configure.ac $(srcdir)/havelib/rpathlyx/aclocal.m4 cd $(srcdir)/havelib/rpathlyx && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathlyx/aclocal.m4: $(srcdir)/havelib/rpathlyx/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathlyx && $(ACLOCAL) -I "$$abs_m4_dir" $(srcdir)/havelib/rpathlyx/configure: $(srcdir)/havelib/rpathlyx/configure.ac $(srcdir)/havelib/rpathlyx/aclocal.m4 cd $(srcdir)/havelib/rpathlyx && $(AUTOCONF) $(srcdir)/havelib/rpathlz/Makefile.in: $(srcdir)/havelib/rpathlz/Makefile.am $(srcdir)/havelib/rpathlz/configure.ac $(srcdir)/havelib/rpathlz/aclocal.m4 cd $(srcdir)/havelib/rpathlz && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathlz/aclocal.m4: $(srcdir)/havelib/rpathlz/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathlz && $(ACLOCAL) -I "$$abs_m4_dir" $(srcdir)/havelib/rpathlz/configure: $(srcdir)/havelib/rpathlz/configure.ac $(srcdir)/havelib/rpathlz/aclocal.m4 cd $(srcdir)/havelib/rpathlz && $(AUTOCONF) $(srcdir)/havelib/rpathlzyx/Makefile.in: $(srcdir)/havelib/rpathlzyx/Makefile.am $(srcdir)/havelib/rpathlzyx/configure.ac $(srcdir)/havelib/rpathlzyx/aclocal.m4 cd $(srcdir)/havelib/rpathlzyx && $(AUTOMAKE) Makefile $(srcdir)/havelib/rpathlzyx/aclocal.m4: $(srcdir)/havelib/rpathlzyx/configure.ac $(top_srcdir)/@HAVELIB_M4_BASE@/lib-link.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-prefix.m4 $(top_srcdir)/@HAVELIB_M4_BASE@/lib-ld.m4 abs_m4_dir=`cd $(top_srcdir)/@HAVELIB_M4_BASE@ && pwd`; cd $(srcdir)/havelib/rpathlzyx && $(ACLOCAL) -I "$$abs_m4_dir" $(srcdir)/havelib/rpathlzyx/configure: $(srcdir)/havelib/rpathlzyx/configure.ac $(srcdir)/havelib/rpathlzyx/aclocal.m4 cd $(srcdir)/havelib/rpathlzyx && $(AUTOCONF) MAINTAINERCLEANFILES += $(HAVELIB_GENERATED_FILES) EXTRA_DIST += $(HAVELIB_GENERATED_FILES) # Libtool's infrastructure is installed in # - $(top_srcdir)/build-aux/ltmain.sh, which gets distributed, # - $(srcdir)/havelib/ltm4/*.m4, which don't need to be distributed, because # they are included in each havelib/rpath*/aclocal.m4 file. EXTRA_DIST += $(top_srcdir)/build-aux/ltmain.sh mostlyclean-local: mostlyclean-local-havelib mostlyclean-local-havelib: rm -rf $(srcdir)/havelib/ltm4 # The AC_CONFIG_AUX_DIR argument in the havelib/rpath*/configure.ac files is # interpreted in two different contexts: # 1. at "make distrib" time, when we call automake, relative to # SRCDIR/havelib/rpath*/, # 2. at "make check" time, when the directory is copied and configured, # relative to BUILDDIR/havelib/tst/dir/rp-*/. # We choose this argument to be '../../../build-aux', for case 1, and therefore # we need to make a local copy of the build-aux directory, for case 2. HAVELIB_COPIED_FILES = \ havelib/build-aux/config.guess \ havelib/build-aux/config.sub \ havelib/build-aux/install-sh \ havelib/build-aux/ltmain.sh \ havelib/build-aux/missing \ havelib/build-aux/config.rpath all-local: $(HAVELIB_COPIED_FILES) havelib/build-aux-dir: test -d havelib/build-aux || mkdir havelib/build-aux touch havelib/build-aux-dir havelib/build-aux/config.guess: $(top_srcdir)/build-aux/config.guess havelib/build-aux-dir cp $(top_srcdir)/build-aux/config.guess havelib/build-aux/config.guess havelib/build-aux/config.sub: $(top_srcdir)/build-aux/config.sub havelib/build-aux-dir cp $(top_srcdir)/build-aux/config.sub havelib/build-aux/config.sub havelib/build-aux/install-sh: $(top_srcdir)/build-aux/install-sh havelib/build-aux-dir cp $(top_srcdir)/build-aux/install-sh havelib/build-aux/install-sh havelib/build-aux/ltmain.sh: $(top_srcdir)/build-aux/ltmain.sh havelib/build-aux-dir cp $(top_srcdir)/build-aux/ltmain.sh havelib/build-aux/ltmain.sh havelib/build-aux/missing: $(top_srcdir)/build-aux/missing havelib/build-aux-dir cp $(top_srcdir)/build-aux/missing havelib/build-aux/missing havelib/build-aux/config.rpath: $(top_srcdir)/build-aux/config.rpath havelib/build-aux-dir cp $(top_srcdir)/build-aux/config.rpath havelib/build-aux/config.rpath DISTCLEANFILES += $(HAVELIB_COPIED_FILES) distclean-local: distclean-local-havelib distclean-local-havelib: rm -rf havelib/build-aux havelib/build-aux-dir .PHONY: distclean-local-havelib ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/host-cpu-c-abi������������������������������������������������������0000664�0000000�0000000�00000000355�14110572173�0020410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine canonical name of CPU and C ABI. Files: m4/host-cpu-c-abi.m4 m4/asm-underscore.m4 Depends-on: configure.ac: AC_REQUIRE([gl_HOST_CPU_C_ABI]) Makefile.am: Include: License: unlimited Maintainer: Sam Steingold �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/host-os�������������������������������������������������������������0000664�0000000�0000000�00000000336�14110572173�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Define HOST_OPERATING_SYSTEM to a name for the host operating system. Files: m4/host-os.m4 Depends-on: configure.ac: gl_HOST_OS Makefile.am: Include: License: LGPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hostent�������������������������������������������������������������0000664�0000000�0000000�00000000510�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Library containing gethostent() function, sethostent() function, endhostent() function, gethostbyname() function, gethostbyaddr() function. Files: m4/hostent.m4 Depends-on: sys_socket configure.ac: gl_HOSTENT Makefile.am: Include: <netdb.h> Link: $(HOSTENT_LIB) License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/human���������������������������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a number (usually a file size) to a human readable string, possibly with K/M/G suffix. Files: lib/human.h lib/human.c m4/human.m4 Depends-on: argmatch error intprops localeconv memmove xstrtoumax stdbool stdint configure.ac: gl_HUMAN Makefile.am: lib_SOURCES += human.c Include: "human.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypot���������������������������������������������������������������0000664�0000000�0000000�00000001126�14110572173�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypot() function: length of a vector in the plane. Files: lib/hypot.c m4/hypot.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $REPLACE_HYPOT = 1] fabs [test $REPLACE_HYPOT = 1] frexp [test $REPLACE_HYPOT = 1] ldexp [test $REPLACE_HYPOT = 1] sqrt [test $REPLACE_HYPOT = 1] isinf [test $REPLACE_HYPOT = 1] configure.ac: gl_FUNC_HYPOT if test $REPLACE_HYPOT = 1; then AC_LIBOBJ([hypot]) fi gl_MATH_MODULE_INDICATOR([hypot]) Makefile.am: Include: <math.h> Link: $(HYPOT_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypot-ieee����������������������������������������������������������0000664�0000000�0000000�00000000357�14110572173�0017747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypot() function according to ISO C 99 with IEC 60559. Files: m4/hypot-ieee.m4 Depends-on: hypot fpieee configure.ac: gl_FUNC_HYPOT_IEEE Makefile.am: Include: <math.h> Link: $(HYPOT_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypot-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0021105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypot-ieee.c tests/test-hypot-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-hypot-ieee check_PROGRAMS += test-hypot-ieee test_hypot_ieee_LDADD = $(LDADD) @HYPOT_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypot-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypot.c tests/test-hypot.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-hypot check_PROGRAMS += test-hypot test_hypot_SOURCES = test-hypot.c randomd.c test_hypot_LDADD = $(LDADD) @HYPOT_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotf��������������������������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypotf() function: length of a vector in the plane. Files: lib/hypotf.c m4/hypotf.m4 m4/mathfunc.m4 Depends-on: math extensions hypot [test $HAVE_HYPOTF = 0 || test $REPLACE_HYPOTF = 1] configure.ac: gl_FUNC_HYPOTF if test $HAVE_HYPOTF = 0 || test $REPLACE_HYPOTF = 1; then AC_LIBOBJ([hypotf]) fi gl_MATH_MODULE_INDICATOR([hypotf]) Makefile.am: Include: <math.h> Link: $(HYPOTF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������gnulib-20210822~d383792/modules/hypotf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypotf() function according to ISO C 99 with IEC 60559. Files: m4/hypotf-ieee.m4 Depends-on: hypotf fpieee hypot-ieee [test $HAVE_HYPOTF = 0 || test $REPLACE_HYPOTF = 1] configure.ac: gl_FUNC_HYPOTF_IEEE Makefile.am: Include: <math.h> Link: $(HYPOTF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypotf-ieee.c tests/test-hypot-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-hypotf-ieee check_PROGRAMS += test-hypotf-ieee test_hypotf_ieee_LDADD = $(LDADD) @HYPOTF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotf-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypotf.c tests/test-hypot.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-hypotf check_PROGRAMS += test-hypotf test_hypotf_SOURCES = test-hypotf.c randomf.c test_hypotf_LDADD = $(LDADD) @HYPOTF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotl��������������������������������������������������������������0000664�0000000�0000000�00000002265�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypotl() function: length of a vector in the plane. Files: lib/hypotl.c m4/hypotl.m4 m4/mathfunc.m4 Depends-on: math extensions hypot [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isfinite [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fabsl [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] sqrtl [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isinf [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_HYPOTL if test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; then AC_LIBOBJ([hypotl]) fi gl_MATH_MODULE_INDICATOR([hypotl]) Makefile.am: Include: <math.h> Link: $(HYPOTL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypotl() function according to ISO C 99 with IEC 60559. Files: m4/hypotl-ieee.m4 Depends-on: hypotl fpieee hypot-ieee [{ test $HAVE_HYPOTL = 0 || test $REPLACE_HYPOTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_HYPOTL_IEEE Makefile.am: Include: <math.h> Link: $(HYPOTL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypotl-ieee.c tests/test-hypot-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-hypotl-ieee check_PROGRAMS += test-hypotl-ieee test_hypotl_ieee_LDADD = $(LDADD) @HYPOTL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/hypotl-tests��������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0020350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypotl.c tests/test-hypot.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-hypotl check_PROGRAMS += test-hypotl test_hypotl_SOURCES = test-hypotl.c randoml.c test_hypotl_LDADD = $(LDADD) @HYPOTL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/i-ring��������������������������������������������������������������0000664�0000000�0000000�00000000352�14110572173�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: a simple ring buffer Files: lib/i-ring.h lib/i-ring.c m4/i-ring.m4 Depends-on: stdbool verify configure.ac: gl_I_RING Makefile.am: lib_SOURCES += i-ring.c Include: "i-ring.h" License: LGPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/i-ring-tests��������������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-i-ring.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-i-ring check_PROGRAMS += test-i-ring �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ialloc��������������������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation using idx_t instead of size_t Files: lib/ialloc.c lib/ialloc.h Depends-on: calloc-gnu extern-inline idx malloc-gnu realloc-gnu reallocarray stdint configure.ac: Makefile.am: lib_SOURCES += ialloc.c Include: "ialloc.h" License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv���������������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion. Files: m4/iconv.m4 Depends-on: havelib configure.ac: AM_ICONV m4_ifdef([gl_ICONV_MODULE_INDICATOR], [gl_ICONV_MODULE_INDICATOR([iconv])]) Makefile.am: Include: #if HAVE_ICONV # include <iconv.h> #endif Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv-h�������������������������������������������������������������0000664�0000000�0000000�00000003103�14110572173�0017232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <iconv.h>. Files: lib/iconv.in.h m4/iconv_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_ICONV_H gl_ICONV_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += $(ICONV_H) # We need the following in order to create <iconv.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ICONV_H iconv.h: iconv.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ICONV_H''@|$(NEXT_ICONV_H)|g' \ -e 's/@''GNULIB_ICONV''@/$(GNULIB_ICONV)/g' \ -e 's|@''ICONV_CONST''@|$(ICONV_CONST)|g' \ -e 's|@''REPLACE_ICONV''@|$(REPLACE_ICONV)|g' \ -e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \ -e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \ -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)' \ < $(srcdir)/iconv.in.h; \ } > $@-t && \ mv $@-t $@ else iconv.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += iconv.h iconv.h-t Include: #if HAVE_ICONV_H # include <iconv.h> #endif License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv-h-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0020741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iconv-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-iconv-h-c++ check_PROGRAMS += test-iconv-h-c++ test_iconv_h_c___SOURCES = test-iconv-h-c++.cc test_iconv_h_c___LDADD = $(LDADD) $(LIBINTL) $(LIBICONV) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv-h-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iconv-h.c Depends-on: iconv-h-c++-tests configure.ac: Makefile.am: TESTS += test-iconv-h check_PROGRAMS += test-iconv-h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv-tests���������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iconv.c tests/signature.h tests/macros.h Depends-on: iconv_open configure.ac: Makefile.am: TESTS += test-iconv check_PROGRAMS += test-iconv test_iconv_LDADD = $(LDADD) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv_open����������������������������������������������������������0000664�0000000�0000000�00000005272�14110572173�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion. Files: lib/iconv_open.c lib/iconv_open-aix.gperf lib/iconv_open-hpux.gperf lib/iconv_open-irix.gperf lib/iconv_open-osf.gperf lib/iconv_open-solaris.gperf lib/iconv_open-zos.gperf lib/iconv.c lib/iconv_close.c m4/iconv_open.m4 Depends-on: gperf iconv-h iconv c-ctype [test $REPLACE_ICONV_OPEN = 1] c-strcase [test $REPLACE_ICONV_OPEN = 1] stdint [test $REPLACE_ICONV_UTF = 1] unistr/u8-mbtoucr [test $REPLACE_ICONV_UTF = 1] unistr/u8-uctomb [test $REPLACE_ICONV_UTF = 1] configure.ac: gl_FUNC_ICONV_OPEN if test $REPLACE_ICONV_OPEN = 1; then AC_LIBOBJ([iconv_open]) fi if test $REPLACE_ICONV = 1; then AC_LIBOBJ([iconv]) AC_LIBOBJ([iconv_close]) fi Makefile.am: $(srcdir)/iconv_open-aix.h: $(srcdir)/iconv_open-aix.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-aix.gperf > $(srcdir)/iconv_open-aix.h-t && \ mv $(srcdir)/iconv_open-aix.h-t $(srcdir)/iconv_open-aix.h $(srcdir)/iconv_open-hpux.h: $(srcdir)/iconv_open-hpux.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-hpux.gperf > $(srcdir)/iconv_open-hpux.h-t && \ mv $(srcdir)/iconv_open-hpux.h-t $(srcdir)/iconv_open-hpux.h $(srcdir)/iconv_open-irix.h: $(srcdir)/iconv_open-irix.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-irix.gperf > $(srcdir)/iconv_open-irix.h-t && \ mv $(srcdir)/iconv_open-irix.h-t $(srcdir)/iconv_open-irix.h $(srcdir)/iconv_open-osf.h: $(srcdir)/iconv_open-osf.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t && \ mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h $(srcdir)/iconv_open-solaris.h: $(srcdir)/iconv_open-solaris.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t && \ mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.h $(srcdir)/iconv_open-zos.h: $(srcdir)/iconv_open-zos.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-zos.gperf > $(srcdir)/iconv_open-zos.h-t && \ mv $(srcdir)/iconv_open-zos.h-t $(srcdir)/iconv_open-zos.h BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t iconv_open-zos.h-t MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h Include: #if HAVE_ICONV # include <iconv.h> #endif Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv_open-utf������������������������������������������������������0000664�0000000�0000000�00000000343�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion support for UTF-{16,32}{BE,LE} encodings. Files: m4/iconv_open-utf.m4 Depends-on: iconv_open configure.ac: gl_FUNC_ICONV_OPEN_UTF Makefile.am: Include: License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iconv_open-utf-tests������������������������������������������������0000664�0000000�0000000�00000000274�14110572173�0021770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iconv-utf.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-iconv-utf check_PROGRAMS += test-iconv-utf test_iconv_utf_LDADD = $(LDADD) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/idcache�������������������������������������������������������������0000664�0000000�0000000�00000000451�14110572173�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Username <--> uid and groupname <--> gid conversions, with cache for speed. Files: lib/idcache.c lib/idcache.h m4/idcache.m4 Depends-on: flexmember xalloc configure.ac: gl_IDCACHE Makefile.am: lib_SOURCES += idcache.c Include: "idcache.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/idpriv-drop���������������������������������������������������������0000664�0000000�0000000�00000000410�14110572173�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Drop uid/gid privileges of the current process. Files: lib/idpriv.h lib/idpriv-drop.c m4/idpriv.m4 Depends-on: unistd extensions configure.ac: gl_IDPRIV Makefile.am: lib_SOURCES += idpriv-drop.c Include: "idpriv.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/idpriv-drop-tests���������������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: privileged-test Notice: The 'idpriv-drop-tests' module asks the user for the root password. It is therefore not suitable for all environments. To disable it, pass option '--avoid=idpriv-drop-tests' to gnulib-tool. Files: tests/test-idpriv-drop.sh tests/test-idpriv-drop.su.sh tests/test-idpriv-drop.c tests/macros.h Depends-on: stdbool configure.ac: Makefile.am: TESTS += test-idpriv-drop.sh check_PROGRAMS += test-idpriv-drop �����������������������������������������������������������������������gnulib-20210822~d383792/modules/idpriv-droptemp�����������������������������������������������������0000664�0000000�0000000�00000000434�14110572173�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Drop uid/gid privileges of the current process temporarily. Files: lib/idpriv.h lib/idpriv-droptemp.c m4/idpriv.m4 Depends-on: unistd extensions configure.ac: gl_IDPRIV Makefile.am: lib_SOURCES += idpriv-droptemp.c Include: "idpriv.h" License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/idpriv-droptemp-tests�����������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: privileged-test Notice: The 'idpriv-droptemp-tests' module asks the user for the root password. It is therefore not suitable for all environments. To disable it, pass option '--avoid=idpriv-droptemp-tests' to gnulib-tool. Files: tests/test-idpriv-droptemp.sh tests/test-idpriv-droptemp.su.sh tests/test-idpriv-droptemp.c tests/macros.h Depends-on: stdbool configure.ac: Makefile.am: TESTS += test-idpriv-droptemp.sh check_PROGRAMS += test-idpriv-droptemp �������������������������������������������gnulib-20210822~d383792/modules/idx�����������������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A type for indices and sizes. Files: lib/idx.h Depends-on: stdint configure.ac: Makefile.am: lib_SOURCES += idx.h Include: "idx.h" License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ieee754-h�����������������������������������������������������������0000664�0000000�0000000�00000001335�14110572173�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <ieee754.h> that is like GNU. Files: lib/ieee754.in.h m4/ieee754-h.m4 Depends-on: configure.ac: gl_IEEE754_H Makefile.am: BUILT_SOURCES += $(IEEE754_H) # We need the following in order to create <ieee754.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_IEEE754_H ieee754.h: ieee754.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/ifndef _GL_GNULIB_HEADER/if 0/g' \ $(srcdir)/ieee754.in.h; \ } > $@-t && \ mv -f $@-t $@ else ieee754.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += ieee754.h ieee754.h-t Include: <ieee754.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ieee754-h-tests�����������������������������������������������������0000664�0000000�0000000�00000000201�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ieee754-h.c Depends-on: configure.ac: Makefile.am: TESTS += test-ieee754-h check_PROGRAMS += test-ieee754-h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ignore-value��������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ignore a value to quiet a compiler warning Files: lib/ignore-value.h Depends-on: configure.ac: Makefile.am: Include: "ignore-value.h" License: LGPLv2+ Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ignore-value-tests��������������������������������������������������0000664�0000000�0000000�00000000232�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ignore-value.c Depends-on: attribute stdio configure.ac: Makefile.am: TESTS += test-ignore-value check_PROGRAMS += test-ignore-value ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogb���������������������������������������������������������������0000664�0000000�0000000�00000001045�14110572173�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ilogb() function: get exponent as integer. Files: lib/ilogb.c m4/ilogb.m4 m4/mathfunc.m4 Depends-on: math isfinite [test $HAVE_ILOGB = 0 || test $REPLACE_ILOGB = 1] frexp [test $HAVE_ILOGB = 0 || test $REPLACE_ILOGB = 1] isnand [test $HAVE_ILOGB = 0 || test $REPLACE_ILOGB = 1] configure.ac: gl_FUNC_ILOGB if test $HAVE_ILOGB = 0 || test $REPLACE_ILOGB = 1; then AC_LIBOBJ([ilogb]) fi gl_MATH_MODULE_INDICATOR([ilogb]) Makefile.am: Include: <math.h> Link: $(ILOGB_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogb-tests���������������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0020135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ilogb.c tests/test-ilogb.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-ilogb check_PROGRAMS += test-ilogb test_ilogb_SOURCES = test-ilogb.c randomd.c test_ilogb_LDADD = $(LDADD) @ILOGB_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogbf��������������������������������������������������������������0000664�0000000�0000000�00000001113�14110572173�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ilogbf() function: get exponent as integer. Files: lib/ilogbf.c lib/ilogb.c m4/ilogbf.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $HAVE_ILOGBF = 0 || test $REPLACE_ILOGBF = 1] frexpf [test $HAVE_ILOGBF = 0 || test $REPLACE_ILOGBF = 1] isnanf [test $HAVE_ILOGBF = 0 || test $REPLACE_ILOGBF = 1] configure.ac: gl_FUNC_ILOGBF if test $HAVE_ILOGBF = 0 || test $REPLACE_ILOGBF = 1; then AC_LIBOBJ([ilogbf]) fi gl_MATH_MODULE_INDICATOR([ilogbf]) Makefile.am: Include: <math.h> Link: $(ILOGBF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogbf-tests��������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ilogbf.c tests/test-ilogb.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-ilogbf check_PROGRAMS += test-ilogbf test_ilogbf_SOURCES = test-ilogbf.c randomf.c test_ilogbf_LDADD = $(LDADD) @ILOGBF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogbl��������������������������������������������������������������0000664�0000000�0000000�00000001527�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ilogbl() function: get exponent as integer. Files: lib/ilogbl.c lib/ilogb.c m4/ilogbl.m4 m4/mathfunc.m4 Depends-on: math extensions ilogb [{ test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isfinite [{ test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ILOGBL if test $HAVE_ILOGBL = 0 || test $REPLACE_ILOGBL = 1; then AC_LIBOBJ([ilogbl]) fi gl_MATH_MODULE_INDICATOR([ilogbl]) Makefile.am: Include: <math.h> Link: $(ILOGBL_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ilogbl-tests��������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0020302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ilogbl.c tests/test-ilogb.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: configure.ac: Makefile.am: TESTS += test-ilogbl check_PROGRAMS += test-ilogbl test_ilogbl_SOURCES = test-ilogbl.c randoml.c test_ilogbl_LDADD = $(LDADD) @ILOGBL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/imaxabs�������������������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0017322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: imaxabs() function: absolute value of 'intmax_t'. Files: lib/imaxabs.c m4/imaxabs.m4 Depends-on: inttypes-incomplete configure.ac: gl_FUNC_IMAXABS if test $ac_cv_func_imaxabs = no; then AC_LIBOBJ([imaxabs]) gl_PREREQ_IMAXABS fi gl_INTTYPES_MODULE_INDICATOR([imaxabs]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/imaxabs-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-imaxabs.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-imaxabs check_PROGRAMS += test-imaxabs ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/imaxdiv�������������������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: imaxdiv() function: division of 'intmax_t'. Files: lib/imaxdiv.c m4/imaxdiv.m4 Depends-on: inttypes-incomplete configure.ac: gl_FUNC_IMAXDIV if test $ac_cv_func_imaxdiv = no; then AC_LIBOBJ([imaxdiv]) gl_PREREQ_IMAXDIV fi gl_INTTYPES_MODULE_INDICATOR([imaxdiv]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/imaxdiv-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-imaxdiv.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-imaxdiv check_PROGRAMS += test-imaxdiv ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/immutable�����������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Immutable data. Files: lib/immutable.h lib/immutable.c m4/immutable.m4 m4/mprotect.m4 m4/mmap-anon.m4 m4/nocrash.m4 Depends-on: stdint open ssfmalloc configure.ac: gl_IMMUTABLE Makefile.am: lib_SOURCES += immutable.c Include: "immutable.h" License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/immutable-tests�����������������������������������������������������0000664�0000000�0000000�00000000346�14110572173�0021014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-immutable.sh tests/test-immutable.c tests/macros.h Depends-on: stdbool _Exit configure.ac: Makefile.am: TESTS += test-immutable.sh check_PROGRAMS += test-immutable test_immutable_LDADD = $(LDADD) $(LIBTHREAD) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/include_next��������������������������������������������������������0000664�0000000�0000000�00000000317�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allows wrapping a broken system header in a gnulib replacement. Files: m4/include_next.m4 Depends-on: absolute-header configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inet_ntop�����������������������������������������������������������0000664�0000000�0000000�00000001311�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert internet address from internal to printable, presentable format. Files: lib/inet_ntop.c m4/inet_ntop.m4 m4/sys_socket_h.m4 Depends-on: arpa_inet extensions sys_socket [test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1] errno [test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1] netinet_in [test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1] configure.ac: gl_FUNC_INET_NTOP if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then AC_LIBOBJ([inet_ntop]) gl_PREREQ_INET_NTOP fi gl_ARPA_INET_MODULE_INDICATOR([inet_ntop]) Makefile.am: License: LGPLv2+ Include: <arpa/inet.h> Link: $(INET_NTOP_LIB) Maintainer: Yoann Vandoorselaere, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inet_ntop-tests�����������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-inet_ntop.c tests/signature.h tests/macros.h Depends-on: netinet_in sys_socket configure.ac: AC_C_BIGENDIAN Makefile.am: TESTS += test-inet_ntop check_PROGRAMS += test-inet_ntop test_inet_ntop_LDADD = $(LDADD) @INET_NTOP_LIB@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inet_pton�����������������������������������������������������������0000664�0000000�0000000�00000001372�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert internet address from presentation to internal, binary, format. Files: lib/inet_pton.c m4/inet_pton.m4 Depends-on: arpa_inet extensions c-ctype [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1] sys_socket [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1] errno [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1] netinet_in [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1] configure.ac: gl_FUNC_INET_PTON if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1; then AC_LIBOBJ([inet_pton]) gl_PREREQ_INET_PTON fi gl_ARPA_INET_MODULE_INDICATOR([inet_pton]) Makefile.am: License: LGPLv2+ Include: <arpa/inet.h> Link: $(INET_PTON_LIB) Maintainer: Simon Josefsson, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inet_pton-tests�����������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-inet_pton.c tests/signature.h tests/macros.h Depends-on: netinet_in sys_socket configure.ac: AC_C_BIGENDIAN Makefile.am: TESTS += test-inet_pton check_PROGRAMS += test-inet_pton test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inline��������������������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0017152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test for the 'inline' keyword or equivalent and whether it is actually effective. Files: m4/inline.m4 Depends-on: configure.ac: gl_INLINE Makefile.am: Include: License: unlimited Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ino-map�������������������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: maintain a mapping of ino_t numbers to small integers Files: lib/ino-map.c lib/ino-map.h Depends-on: hash verify configure.ac: Makefile.am: lib_SOURCES += ino-map.c ino-map.h Include: "ino-map.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ino-map-tests�������������������������������������������������������0000664�0000000�0000000�00000000212�14110572173�0020365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ino-map.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ino-map check_PROGRAMS += test-ino-map ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length������������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0020667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the most significant bit in an 'unsigned int'. Files: lib/integer_length.h lib/integer_length.c lib/float+.h m4/exponentd.m4 Depends-on: float configure.ac: AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) Makefile.am: lib_SOURCES += integer_length.c Include: "integer_length.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length-tests������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0022032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-integer_length.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-integer_length check_PROGRAMS += test-integer_length �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length_l����������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the most significant bit in an 'unsigned long'. Files: lib/integer_length.h lib/integer_length_l.c Depends-on: integer_length configure.ac: Makefile.am: lib_SOURCES += integer_length_l.c Include: "integer_length.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length_l-tests����������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0022344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-integer_length_l.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-integer_length_l check_PROGRAMS += test-integer_length_l �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length_ll���������������������������������������������������0000664�0000000�0000000�00000000460�14110572173�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Finds the most significant bit in an 'unsigned long long'. Files: lib/integer_length.h lib/integer_length_ll.c lib/integer_length_l.c Depends-on: integer_length configure.ac: Makefile.am: lib_SOURCES += integer_length_ll.c Include: "integer_length.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/integer_length_ll-tests���������������������������������������������0000664�0000000�0000000�00000000250�14110572173�0022514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-integer_length_ll.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-integer_length_ll check_PROGRAMS += test-integer_length_ll ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/intprops������������������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0017551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Properties of integer types Files: lib/intprops.h Depends-on: configure.ac: Makefile.am: Include: "intprops.h" License: LGPLv2+ Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/intprops-tests������������������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0020711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-intprops.c tests/macros.h Depends-on: inttypes stdbool verify configure.ac: Makefile.am: TESTS += test-intprops check_PROGRAMS += test-intprops �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttostr������������������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert integers to printable strings. Files: lib/anytostr.c lib/imaxtostr.c lib/inttostr.c lib/inttostr.h lib/offtostr.c lib/umaxtostr.c lib/uinttostr.c m4/inttostr.m4 Depends-on: intprops stdint configure.ac: gl_INTTOSTR Makefile.am: lib_SOURCES += \ imaxtostr.c \ inttostr.c \ offtostr.c \ uinttostr.c \ umaxtostr.c Include: "inttostr.h" License: LGPLv2+ Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttostr-tests������������������������������������������������������0000664�0000000�0000000�00000000250�14110572173�0020715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/test-inttostr.c Depends-on: intprops inttypes snprintf configure.ac: Makefile.am: TESTS += test-inttostr check_PROGRAMS += test-inttostr ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttypes������������������������������������������������������������0000664�0000000�0000000�00000000323�14110572173�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <inttypes.h> that nearly conforms to C99. Files: Depends-on: inttypes-incomplete extensions configure.ac: gl_INTTYPES_H Makefile.am: Include: <inttypes.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttypes-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000460�14110572173�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-inttypes-c++.cc tests/test-inttypes-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-inttypes-c++ check_PROGRAMS += test-inttypes-c++ test_inttypes_c___SOURCES = test-inttypes-c++.cc test-inttypes-c++2.cc endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttypes-incomplete�������������������������������������������������0000664�0000000�0000000�00000004550�14110572173�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <inttypes.h> that conforms to C99 except for PRI* and SCN* macros. Files: lib/inttypes.in.h m4/inttypes.m4 Depends-on: include_next multiarch snippet/arg-nonnull snippet/c++defs snippet/warn-on-use stdint configure.ac: gl_INTTYPES_INCOMPLETE gl_INTTYPES_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += inttypes.h # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -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)' \ < $(srcdir)/inttypes.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t Include: <inttypes.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/inttypes-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-inttypes.c Depends-on: inttypes-c++-tests configure.ac: Makefile.am: TESTS += test-inttypes check_PROGRAMS += test-inttypes �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ioctl���������������������������������������������������������������0000664�0000000�0000000�00000001243�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ioctl() function: issue device specific requests on files, devices, or sockets. Files: lib/ioctl.c lib/w32sock.h m4/ioctl.m4 Depends-on: sys_ioctl sys_socket [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1] errno [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1] fd-hook [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1] msvc-nothrow [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1] configure.ac: gl_FUNC_IOCTL if test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1; then AC_LIBOBJ([ioctl]) fi gl_SYS_IOCTL_MODULE_INDICATOR([ioctl]) Makefile.am: Include: <sys/ioctl.h> License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ioctl-tests���������������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ioctl.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ioctl check_PROGRAMS += test-ioctl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isapipe�������������������������������������������������������������0000664�0000000�0000000�00000001005�14110572173�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a file descriptor is a pipe. Files: lib/isapipe.c lib/isapipe.h m4/isapipe.m4 Depends-on: stdbool [test $HAVE_ISAPIPE = 0] sys_stat [test $HAVE_ISAPIPE = 0] unistd [test $HAVE_ISAPIPE = 0] msvc-nothrow [test $HAVE_ISAPIPE = 0] fstat [test $HAVE_ISAPIPE = 0] configure.ac: gl_ISAPIPE if test $HAVE_ISAPIPE = 0; then AC_LIBOBJ([isapipe]) gl_PREREQ_ISAPIPE fi Makefile.am: Include: "isapipe.h" License: LGPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isatty��������������������������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a file descriptor is a terminal. Files: lib/isatty.c m4/isatty.m4 Depends-on: unistd msvc-inval [test $REPLACE_ISATTY = 1] msvc-nothrow [test $REPLACE_ISATTY = 1] configure.ac: gl_FUNC_ISATTY if test $REPLACE_ISATTY = 1; then AC_LIBOBJ([isatty]) gl_PREREQ_ISATTY fi gl_UNISTD_MODULE_INDICATOR([isatty]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isatty-tests��������������������������������������������������������0000664�0000000�0000000�00000000253�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isatty.c tests/signature.h tests/macros.h Depends-on: unistd pipe-posix configure.ac: Makefile.am: TESTS += test-isatty check_PROGRAMS += test-isatty �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isblank�������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isblank() function: test whether a single-byte character is a blank. Files: lib/isblank.c m4/isblank.m4 Depends-on: extensions ctype configure.ac: gl_FUNC_ISBLANK if test $HAVE_ISBLANK = 0; then AC_LIBOBJ([isblank]) fi gl_MODULE_INDICATOR([isblank]) gl_CTYPE_MODULE_INDICATOR([isblank]) Makefile.am: Include: <ctype.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isblank-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isblank.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-isblank check_PROGRAMS += test-isblank ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isdir���������������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether a directory exists. Files: lib/isdir.c lib/isdir.h Depends-on: stat configure.ac: Makefile.am: lib_SOURCES += isdir.c Include: License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isfinite������������������������������������������������������������0000664�0000000�0000000�00000001017�14110572173�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isfinite macro: test for finite value (zero, subnormal, or normal, and not infinite or NaN). Files: lib/isfinite.c m4/isfinite.m4 m4/check-math-lib.m4 Depends-on: math extensions isnanf-nolibm [test $REPLACE_ISFINITE = 1] isnand-nolibm [test $REPLACE_ISFINITE = 1] isnanl-nolibm [test $REPLACE_ISFINITE = 1] configure.ac: gl_ISFINITE if test $REPLACE_ISFINITE = 1; then AC_LIBOBJ([isfinite]) fi gl_MATH_MODULE_INDICATOR([isfinite]) Makefile.am: Include: <math.h> License: LGPL Maintainer: Ben Pfaff �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isfinite-tests������������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0020643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isfinite.c tests/infinity.h tests/macros.h Depends-on: float configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isfinite check_PROGRAMS += test-isfinite test_isfinite_LDADD = $(LDADD) @ISFINITE_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isinf���������������������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0017012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isinf macro: test for positive or negative infinity Files: lib/isinf.c m4/isinf.m4 m4/check-math-lib.m4 Depends-on: math extensions float [test $REPLACE_ISINF = 1] configure.ac: gl_ISINF if test $REPLACE_ISINF = 1; then AC_LIBOBJ([isinf]) fi gl_MATH_MODULE_INDICATOR([isinf]) Makefile.am: Include: <math.h> License: LGPL Maintainer: Ben Pfaff �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isinf-tests���������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: m4/exponentf.m4 m4/exponentd.m4 m4/exponentl.m4 tests/test-isinf.c tests/infinity.h tests/macros.h Depends-on: float configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isinf check_PROGRAMS += test-isinf test_isinf_LDADD = $(LDADD) @ISINF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnan���������������������������������������������������������������0000664�0000000�0000000�00000000365�14110572173�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnan macro: test for NaN value. Files: m4/isnan.m4 Depends-on: isnanf isnand isnanl math extensions configure.ac: gl_ISNAN gl_MATH_MODULE_INDICATOR([isnan]) Makefile.am: Include: <math.h> License: LGPL Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnan-tests���������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnan.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: float configure.ac: gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnan check_PROGRAMS += test-isnan test_isnan_LDADD = $(LDADD) @ISNAN_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnand��������������������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnand() function: test for NaN. Files: lib/isnand.c lib/isnan.c lib/float+.h m4/exponentd.m4 m4/isnand.m4 Depends-on: math fpieee memcmp configure.ac: gl_FUNC_ISNAND m4_ifdef([gl_ISNAN], [ AC_REQUIRE([gl_ISNAN]) ]) if test $HAVE_ISNAND = 0 || test $REPLACE_ISNAN = 1; then AC_LIBOBJ([isnand]) gl_PREREQ_ISNAND fi gl_MATH_MODULE_INDICATOR([isnand]) Makefile.am: Include: <math.h> Link: $(ISNAND_LIBM) License: LGPL Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/isnand-nolibm�������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnand() function: test for NaN, without requiring libm. Files: lib/isnand-nolibm.h lib/isnand.c lib/isnan.c lib/float+.h m4/exponentd.m4 m4/isnand.m4 Depends-on: fpieee memcmp configure.ac: gl_FUNC_ISNAND_NO_LIBM if test $gl_func_isnand_no_libm != yes; then AC_LIBOBJ([isnand]) gl_PREREQ_ISNAND fi Makefile.am: Include: "isnand-nolibm.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnand-nolibm-tests�������������������������������������������������0000664�0000000�0000000�00000000375�14110572173�0021571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnand-nolibm.c tests/test-isnand.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: configure.ac: gl_DOUBLE_EXPONENT_LOCATION Makefile.am: TESTS += test-isnand-nolibm check_PROGRAMS += test-isnand-nolibm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnand-tests��������������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnand.c tests/test-isnand.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: configure.ac: gl_DOUBLE_EXPONENT_LOCATION Makefile.am: TESTS += test-isnand check_PROGRAMS += test-isnand test_isnand_LDADD = $(LDADD) @ISNAND_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanf��������������������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0017150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnanf() function: test for NaN. Files: lib/isnanf.c lib/isnan.c lib/float+.h m4/exponentf.m4 m4/isnanf.m4 Depends-on: math fpieee memcmp configure.ac: gl_FUNC_ISNANF m4_ifdef([gl_ISNAN], [ AC_REQUIRE([gl_ISNAN]) ]) if test $HAVE_ISNANF = 0 || test $REPLACE_ISNAN = 1; then AC_LIBOBJ([isnanf]) gl_PREREQ_ISNANF fi gl_MATH_MODULE_INDICATOR([isnanf]) Makefile.am: Include: <math.h> Link: $(ISNANF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/isnanf-nolibm�������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnanf() function: test for NaN, without requiring libm. Files: lib/isnanf-nolibm.h lib/isnanf.c lib/isnan.c lib/float+.h m4/exponentf.m4 m4/isnanf.m4 Depends-on: fpieee memcmp configure.ac: gl_FUNC_ISNANF_NO_LIBM if test $gl_func_isnanf_no_libm != yes; then AC_LIBOBJ([isnanf]) gl_PREREQ_ISNANF fi Makefile.am: Include: "isnanf-nolibm.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanf-nolibm-tests�������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnanf-nolibm.c tests/test-isnanf.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: configure.ac: gl_FLOAT_EXPONENT_LOCATION Makefile.am: TESTS += test-isnanf-nolibm check_PROGRAMS += test-isnanf-nolibm ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanf-tests��������������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnanf.c tests/test-isnanf.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: configure.ac: gl_FLOAT_EXPONENT_LOCATION Makefile.am: TESTS += test-isnanf check_PROGRAMS += test-isnanf test_isnanf_LDADD = $(LDADD) @ISNANF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanl��������������������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnanl() function: test for NaN. Files: lib/isnanl.c lib/isnan.c lib/float+.h m4/exponentl.m4 m4/isnanl.m4 Depends-on: math float fpieee memcmp configure.ac: gl_FUNC_ISNANL m4_ifdef([gl_ISNAN], [ AC_REQUIRE([gl_ISNAN]) ]) if test $HAVE_ISNANL = 0 || test $REPLACE_ISNAN = 1; then AC_LIBOBJ([isnanl]) gl_PREREQ_ISNANL fi gl_MATH_MODULE_INDICATOR([isnanl]) Makefile.am: Include: <math.h> Link: $(ISNANL_LIBM) License: LGPL Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/isnanl-nolibm�������������������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: isnanl() function: test for NaN, without requiring libm. Files: lib/isnanl-nolibm.h lib/isnanl.c lib/isnan.c lib/float+.h m4/exponentl.m4 m4/isnanl.m4 m4/math_h.m4 Depends-on: float fpieee memcmp configure.ac: gl_FUNC_ISNANL_NO_LIBM if test $gl_func_isnanl_no_libm != yes; then AC_LIBOBJ([isnanl]) gl_PREREQ_ISNANL fi Makefile.am: Include: "isnanl-nolibm.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanl-nolibm-tests�������������������������������������������������0000664�0000000�0000000�00000000457�14110572173�0021602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnanl-nolibm.c tests/test-isnanl.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnanl-nolibm check_PROGRAMS += test-isnanl-nolibm �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/isnanl-tests��������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0020316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isnanl.c tests/test-isnanl.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: float configure.ac: gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-isnanl check_PROGRAMS += test-isnanl test_isnanl_LDADD = $(LDADD) @ISNANL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iswblank������������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: iswblank() function: test wide character for being blank. Files: lib/iswblank.c m4/iswblank.m4 Depends-on: wctype-h extensions configure.ac: gl_FUNC_ISWBLANK if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then AC_LIBOBJ([iswblank]) fi fi gl_WCTYPE_MODULE_INDICATOR([iswblank]) Makefile.am: Include: <wctype.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������gnulib-20210822~d383792/modules/iswblank-tests������������������������������������������������������0000664�0000000�0000000�00000000240�14110572173�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iswblank.c tests/macros.h Depends-on: wctype-h-c++-tests configure.ac: Makefile.am: TESTS += test-iswblank check_PROGRAMS += test-iswblank ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iswctype������������������������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: iswctype() function: test whether a wide character has a given property. Status: obsolete Notice: This module is obsolete. Files: lib/iswctype.c lib/iswctype-impl.h m4/iswctype.m4 Depends-on: wctype-h configure.ac: gl_FUNC_ISWCTYPE if test $HAVE_WCTYPE_T = 0 || test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then AC_LIBOBJ([iswctype]) fi gl_WCTYPE_MODULE_INDICATOR([iswctype]) Makefile.am: Include: <wctype.h> License: LGPL Maintainer: all �����������������������������������������������������gnulib-20210822~d383792/modules/iswdigit������������������������������������������������������������0000664�0000000�0000000�00000000751�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: iswdigit() function: test wide character for being a digit. Files: lib/iswdigit.c m4/iswdigit.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wctype-h configure.ac: gl_FUNC_ISWDIGIT if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $REPLACE_ISWDIGIT = 1; then AC_LIBOBJ([iswdigit]) fi fi gl_WCTYPE_MODULE_INDICATOR([iswdigit]) Makefile.am: Include: <wctype.h> License: LGPLv2+ Maintainer: Bruno Haible �����������������������gnulib-20210822~d383792/modules/iswdigit-tests������������������������������������������������������0000664�0000000�0000000�00000001031�14110572173�0020650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iswdigit.sh tests/test-iswdigit.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtowc setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-iswdigit.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-iswdigit test_iswdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/iswxdigit�����������������������������������������������������������0000664�0000000�0000000�00000000774�14110572173�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: iswxdigit() function: test wide character for being a hexadecimal digit. Files: lib/iswxdigit.c m4/iswxdigit.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wctype-h configure.ac: gl_FUNC_ISWXDIGIT if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $REPLACE_ISWXDIGIT = 1; then AC_LIBOBJ([iswxdigit]) fi fi gl_WCTYPE_MODULE_INDICATOR([iswxdigit]) Makefile.am: Include: <wctype.h> License: LGPLv2+ Maintainer: Bruno Haible ����gnulib-20210822~d383792/modules/iswxdigit-tests�����������������������������������������������������0000664�0000000�0000000�00000001036�14110572173�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iswxdigit.sh tests/test-iswxdigit.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtowc setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-iswxdigit.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-iswxdigit test_iswxdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/j0������������������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0016202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: j0() function: Bessel function of the first kind of order 0. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([j0]) Makefile.am: Include: <math.h> Link: $(J0_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/j0-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-j0.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-j0 check_PROGRAMS += test-j0 test_j0_LDADD = $(LDADD) @J0_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/j1������������������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: j1() function: Bessel function of the first kind of order 1. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([j1]) Makefile.am: Include: <math.h> Link: $(J1_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/j1-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-j1.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-j1 check_PROGRAMS += test-j1 test_j1_LDADD = $(LDADD) @J1_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/javacomp������������������������������������������������������������0000664�0000000�0000000�00000001002�14110572173�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compile a Java program. Files: lib/javacomp.h lib/javacomp.c Depends-on: stdbool unistd javaversion execute spawn-pipe wait-process classpath xsetenv sh-quote binary-io open safe-read xalloc xmalloca getline xconcat-filename fwriteerror fopen-gnu clean-temp stat error xvasprintf c-strstr gettext-h javacomp-script sh-filename configure.ac: Makefile.am: lib_SOURCES += javacomp.h javacomp.c Include: "javacomp.h" Link: $(LIB_MBRTOWC) $(LIB_GETRANDOM) $(LIBTHREAD) License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/javacomp-script�����������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Script to compile a Java program. Files: build-aux/javacomp.sh.in m4/javacomp.m4 Depends-on: configure.ac: # You need to invoke gt_JAVACOMP yourself, possibly with arguments. AC_CONFIG_FILES([javacomp.sh:build-aux/javacomp.sh.in]) Makefile.am: License: GPLed build tool Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/javaexec������������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0017456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Execute a Java program. Files: lib/javaexec.h lib/javaexec.c Depends-on: stdbool execute classpath xsetenv sh-quote xconcat-filename xalloc xmalloca error gettext-h javaexec-script sh-filename configure.ac: Makefile.am: DEFS += -DEXEEXT=\"@EXEEXT@\" lib_SOURCES += javaexec.h javaexec.c Include: "javaexec.h" Link: $(LIB_MBRTOWC) $(LIBTHREAD) License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/javaexec-script�����������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Execute a Java program. Files: build-aux/javaexec.sh.in m4/javaexec.m4 Depends-on: configure.ac: # You need to invoke gt_JAVAEXEC yourself, possibly with arguments. AC_CONFIG_FILES([javaexec.sh:build-aux/javaexec.sh.in]) Makefile.am: Include: License: GPLed build tool Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/javaversion���������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the Java version supported by javaexec. Files: lib/javaversion.h lib/javaversion.c lib/javaversion.java lib/javaversion.class Depends-on: javaexec stdbool spawn-pipe wait-process getline gettext-h configmake configure.ac: Makefile.am: lib_SOURCES += javaversion.h javaversion.c pkgdata_DATA += javaversion.class Include: "javaversion.h" Link: $(LIB_MBRTOWC) $(LIBTHREAD) License: GPL Maintainer: all ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/jn������������������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0016300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: jn() function: Bessel function of the first kind of order n. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([jn]) Makefile.am: Include: <math.h> Link: $(JN_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/jn-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-jn.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-jn check_PROGRAMS += test-jn test_jn_LDADD = $(LDADD) @JN_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/langinfo������������������������������������������������������������0000664�0000000�0000000�00000003316�14110572173�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <langinfo.h>. Files: lib/langinfo.in.h m4/langinfo_h.m4 Depends-on: extensions include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_LANGINFO_H gl_LANGINFO_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += langinfo.h # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/langinfo.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += langinfo.h langinfo.h-t Include: <langinfo.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/langinfo-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-langinfo-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-langinfo-c++ check_PROGRAMS += test-langinfo-c++ test_langinfo_c___SOURCES = test-langinfo-c++.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/langinfo-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-langinfo.c Depends-on: langinfo-c++-tests configure.ac: Makefile.am: TESTS += test-langinfo check_PROGRAMS += test-langinfo �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/largefile�����������������������������������������������������������0000664�0000000�0000000�00000000762�14110572173�0017631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Support for files larger than 2 GB. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: m4/largefile.m4 m4/year2038.m4 Depends-on: configure.ac-early: AC_REQUIRE([AC_SYS_LARGEFILE]) AC_REQUIRE([gl_YEAR2038_EARLY]) configure.ac: AC_REQUIRE([gl_LARGEFILE]) Makefile.am: Include: License: LGPLv2+ Maintainer: all ��������������gnulib-20210822~d383792/modules/lchmod��������������������������������������������������������������0000664�0000000�0000000�00000001130�14110572173�0017133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lchmod that is actually chmod (!) on hosts lacking lchmod Files: lib/lchmod.c m4/lchmod.m4 Depends-on: c99 [test $HAVE_LCHMOD = 0] errno [test $HAVE_LCHMOD = 0] extensions fcntl-h [test $HAVE_LCHMOD = 0] intprops [test $HAVE_LCHMOD = 0] lstat [test $HAVE_LCHMOD = 0] sys_stat unistd [test $HAVE_LCHMOD = 0] configure.ac: gl_FUNC_LCHMOD if test $HAVE_LCHMOD = 0; then AC_LIBOBJ([lchmod]) gl_PREREQ_LCHMOD fi gl_SYS_STAT_MODULE_INDICATOR([lchmod]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lchmod-tests��������������������������������������������������������0000664�0000000�0000000�00000000301�14110572173�0020272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-lchmod.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-lchmod check_PROGRAMS += test-lchmod test_lchmod_LDADD = $(LDADD) $(LIBINTL) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lchown��������������������������������������������������������������0000664�0000000�0000000�00000001324�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lchown() function: change ownership of a file, without following symlinks. Files: lib/lchown.c m4/lchown.m4 Depends-on: unistd chown [test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1] errno [test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1] lstat [test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1] stdbool [test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1] sys_stat [test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1] configure.ac: gl_FUNC_LCHOWN if test $HAVE_LCHOWN = 0 || test $REPLACE_LCHOWN = 1; then AC_LIBOBJ([lchown]) fi gl_UNISTD_MODULE_INDICATOR([lchown]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lchown-tests��������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-lchown.h tests/test-lchown.c tests/signature.h tests/macros.h Depends-on: errno ignore-value intprops mgetgroups nanosleep stat-time stdbool symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-lchown check_PROGRAMS += test-lchown test_lchown_LDADD = $(LDADD) $(LIB_NANOSLEEP) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldd�����������������������������������������������������������������0000664�0000000�0000000�00000000417�14110572173�0016437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Command to determine the dynamically linked dependencies of a program. Files: build-aux/ldd.sh.in m4/ldd.m4 Depends-on: configure.ac: gl_LDD AC_CONFIG_FILES([ldd.sh:build-aux/ldd.sh.in]) Makefile.am: Include: License: GPLed build tool Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexp���������������������������������������������������������������0000664�0000000�0000000�00000000333�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexp() function: multiply a 'double' by a power of 2. Files: m4/ldexp.m4 Depends-on: configure.ac: gl_FUNC_LDEXP Makefile.am: Include: <math.h> Link: $(LDEXP_LIBM) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexp-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexp() function according to ISO C 99 with IEC 60559. Files: Depends-on: ldexp fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LDEXP_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexp-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexp-ieee.c tests/test-ldexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ldexp-ieee check_PROGRAMS += test-ldexp-ieee test_ldexp_ieee_LDADD = $(LDADD) @LDEXP_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexp-tests���������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexp.c tests/test-ldexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: isnand-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexp check_PROGRAMS += test-ldexp test_ldexp_SOURCES = test-ldexp.c randomd.c test_ldexp_LDADD = $(LDADD) @LDEXP_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpf��������������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0017153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexpf() function: multiply a 'float' by a power of 2. Files: lib/ldexpf.c m4/ldexpf.m4 m4/mathfunc.m4 Depends-on: math extensions ldexp [test $HAVE_LDEXPF = 0] configure.ac: gl_FUNC_LDEXPF if test $HAVE_LDEXPF = 0; then AC_LIBOBJ([ldexpf]) fi gl_MATH_MODULE_INDICATOR([ldexpf]) Makefile.am: Include: <math.h> Link: $(LDEXPF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexpf() function according to ISO C 99 with IEC 60559. Files: Depends-on: ldexpf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LDEXPF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexpf-ieee.c tests/test-ldexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ldexpf-ieee check_PROGRAMS += test-ldexpf-ieee test_ldexpf_ieee_LDADD = $(LDADD) @LDEXPF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpf-tests��������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexpf.c tests/test-ldexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: isnanf-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexpf check_PROGRAMS += test-ldexpf test_ldexpf_SOURCES = test-ldexpf.c randomf.c test_ldexpf_LDADD = $(LDADD) @LDEXPF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpl��������������������������������������������������������������0000664�0000000�0000000�00000001371�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexpl() function: multiply a 'long double' by a power of 2. Files: lib/ldexpl.c m4/ldexpl.m4 Depends-on: math extensions ldexp [{ test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl [{ test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fpucw [{ test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LDEXPL if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then AC_LIBOBJ([ldexpl]) fi gl_MATH_MODULE_INDICATOR([ldexpl]) Makefile.am: Include: <math.h> Link: $(LDEXPL_LIBM) License: LGPL Maintainer: Paolo Bonzini �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ldexpl() function according to ISO C 99 with IEC 60559. Files: Depends-on: ldexpl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LDEXPL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexpl-ieee.c tests/test-ldexp-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-ldexpl-ieee check_PROGRAMS += test-ldexpl-ieee test_ldexpl_ieee_LDADD = $(LDADD) @LDEXPL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldexpl-tests��������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ldexpl.c tests/test-ldexp.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw isnanl-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexpl check_PROGRAMS += test-ldexpl test_ldexpl_SOURCES = test-ldexpl.c randoml.c test_ldexpl_LDADD = $(LDADD) @LDEXPL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ldtoastr������������������������������������������������������������0000664�0000000�0000000�00000000375�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert long double to accurate string. Files: lib/ftoastr.h lib/ftoastr.c lib/ldtoastr.c Depends-on: extensions intprops configure.ac: Makefile.am: lib_SOURCES += ldtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lgamma��������������������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0017132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lgamma() function: log of gamma function. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([lgamma]) Makefile.am: Include: <math.h> Link: $(LGAMMA_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lgamma-tests��������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-lgamma.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-lgamma check_PROGRAMS += test-lgamma test_lgamma_LDADD = $(LDADD) @LGAMMA_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lgpl-2.1������������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Lesser General Public License version 2.1 in Texinfo format. Files: doc/lgpl-2.1.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lgpl-3.0������������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Lesser General Public License version 3.0 in Texinfo format. Files: doc/lgpl-3.0.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lib-ignore����������������������������������������������������������0000664�0000000�0000000�00000000353�14110572173�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: If possible, ignore libraries that are not depended on. Files: m4/lib-ignore.m4 Depends-on: configure.ac: gl_IGNORE_UNUSED_LIBRARIES Makefile.am: Include: License: unlimited Maintainer: Paul Eggert and Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lib-msvc-compat�����������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros to test whether LD support --output-def. Files: m4/ld-output-def.m4 configure.ac: gl_LD_OUTPUT_DEF License: unlimited Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lib-symbol-versions�������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0021614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros to test whether LD support --linker-script. Files: m4/ld-version-script.m4 configure.ac: gl_LD_VERSION_SCRIPT License: unlimited Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lib-symbol-visibility�����������������������������������������������0000664�0000000�0000000�00000001231�14110572173�0022125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Control of symbols exported by shared libraries. Notice: The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the compilation of all sources that make up the library. Files: m4/visibility.m4 Depends-on: configure.ac: gl_VISIBILITY Makefile.am: # The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the # compilation of all sources that make up the library. This line here does it # only for the gnulib part of it. The developer is responsible for adding # $(CFLAG_VISIBILITY) to the Makefile.ams of the other portions of the library. AM_CFLAGS += $(CFLAG_VISIBILITY) Include: License: unlimited Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libc-config���������������������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: System definitions for code taken from the GNU C Library Files: lib/cdefs.h lib/libc-config.h m4/__inline.m4 Depends-on: c99 configure.ac: gl___INLINE Makefile.am: Include: <libc-config.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libgmp��������������������������������������������������������������0000664�0000000�0000000�00000001534�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: GNU Multiple Precision Arithmetic library, or its mini-gmp substitute Files: lib/mini-gmp-gnulib.c lib/mini-gmp.c lib/mini-gmp.h m4/libgmp.m4 Depends-on: configure.ac: gl_LIBGMP if test $HAVE_LIBGMP != yes; then AC_LIBOBJ([mini-gmp-gnulib]) fi Makefile.am: BUILT_SOURCES += $(GMP_H) if GL_GENERATE_MINI_GMP_H # Build gmp.h as a wrapper for mini-gmp.h when using mini-gmp. gmp.h: $(top_builddir)/config.status echo '#include "mini-gmp.h"' >$@-t mv $@-t $@ else if GL_GENERATE_GMP_GMP_H # Build gmp.h as a wrapper for gmp/gmp.h. gmp.h: $(top_builddir)/config.status echo '#include <gmp/gmp.h>' >$@-t mv $@-t $@ else gmp.h: $(top_builddir)/config.status rm -f $@ endif endif MOSTLYCLEANFILES += gmp.h gmp.h-t Include: <gmp.h> Link: $(LTLIBGMP) when linking with libtool, $(LIBGMP) otherwise License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libgmp-tests��������������������������������������������������������0000664�0000000�0000000�00000000270�14110572173�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/test-libgmp.c Depends-on: c99 verify configure.ac: Makefile.am: TESTS += test-libgmp check_PROGRAMS += test-libgmp test_libgmp_LDADD = $(LDADD) @LIBGMP@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libsigsegv����������������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Handle page faults in user mode. Files: m4/libsigsegv.m4 Depends-on: havelib configure.ac: gl_LIBSIGSEGV Makefile.am: Include: #if HAVE_LIBSIGSEGV # include <sigsegv.h> #endif Link: $(LTLIBSIGSEGV) when linking with libtool, $(LIBSIGSEGV) otherwise License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libtextstyle��������������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Output of styled text. Files: m4/libtextstyle.m4 Depends-on: havelib configure.ac: # You need to invoke gl_LIBTEXTSTYLE yourself, possibly with arguments. Makefile.am: Include: #if HAVE_LIBTEXTSTYLE # include <textstyle.h> #endif Link: $(LTLIBTEXTSTYLE) when linking with libtool, $(LIBTEXTSTYLE) otherwise License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libtextstyle-optional�����������������������������������������������0000664�0000000�0000000�00000001706�14110572173�0022255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Try to use system libtextstyle for output of styled text. Files: lib/textstyle.in.h m4/libtextstyle-optional.m4 Depends-on: libtextstyle stdbool stdio unistd fsync vasprintf-posix configure.ac: # You need to invoke gl_LIBTEXTSTYLE_OPTIONAL yourself, possibly with arguments. Makefile.am: BUILT_SOURCES += $(TEXTSTYLE_H) # We need the following in order to create a dummy placeholder for # <textstyle.h> when the system doesn't have one. if GL_GENERATE_TEXTSTYLE_H textstyle.h: textstyle.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/textstyle.in.h; \ } > $@-t && \ mv $@-t $@ else textstyle.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += textstyle.h textstyle.h-t Include: #include <textstyle.h> Link: $(LTLIBTEXTSTYLE) when linking with libtool, $(LIBTEXTSTYLE) otherwise License: GPL Maintainer: Bruno Haible, Akim Demaille ����������������������������������������������������������gnulib-20210822~d383792/modules/libtextstyle-optional-tests�����������������������������������������0000664�0000000�0000000�00000000510�14110572173�0023405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-libtextstyle.c tests/test-libtextstyle-default.css Depends-on: c99 isatty configure.ac: gl_LIBTEXTSTYLE_OPTIONAL Makefile.am: TESTS += test-libtextstyle check_PROGRAMS += test-libtextstyle test_libtextstyle_CPPFLAGS = $(AM_CPPFLAGS) -DSRCDIR=\"$(srcdir)/\" test_libtextstyle_LDADD = $(LDADD) @LIBTEXTSTYLE@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libunistring��������������������������������������������������������0000664�0000000�0000000�00000001210�14110572173�0020375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Unicode string functions. Files: m4/libunistring.m4 m4/absolute-header.m4 lib/libunistring.valgrind Depends-on: havelib iconv configure.ac: gl_LIBUNISTRING Makefile.am: Include: #if HAVE_LIBUNISTRING # include <unitypes.h> # include <unistr.h> # include <uniconv.h> # include <unistdio.h> # include <uniname.h> # include <unictype.h> # include <uniwidth.h> # include <uniwbrk.h> # include <unilbrk.h> # include <uninorm.h> # include <unicase.h> # include <uniregex.h> # include <unistring/version.h> #endif Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/libunistring-optional�����������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Try to use system libunistring for Unicode string functions. Files: m4/libunistring-optional.m4 m4/libunistring.m4 m4/absolute-header.m4 lib/libunistring.valgrind Depends-on: havelib iconv configure.ac: gl_LIBUNISTRING_OPTIONAL Makefile.am: Include: Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv3+ or GPLv2+ Maintainer: Paolo Bonzini, Daiki Ueno ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/limits-h������������������������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <limits.h>. Files: lib/limits.in.h m4/limits-h.m4 Depends-on: include_next configure.ac: gl_LIMITS_H Makefile.am: BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ < $(srcdir)/limits.in.h; \ } > $@-t && \ mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t Include: <limits.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/limits-h-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-limits-h-c++.cc tests/test-limits-h-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-limits-h-c++ check_PROGRAMS += test-limits-h-c++ test_limits_h_c___SOURCES = test-limits-h-c++.cc test-limits-h-c++2.cc endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/limits-h-tests������������������������������������������������������0000664�0000000�0000000�00000000243�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-limits-h.c Depends-on: extensions verify limits-h-c++-tests configure.ac: Makefile.am: TESTS += test-limits-h check_PROGRAMS += test-limits-h �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linebuffer����������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a line from a stream. Files: lib/linebuffer.h lib/linebuffer.c Depends-on: idx xalloc configure.ac: Makefile.am: lib_SOURCES += linebuffer.h linebuffer.c Include: "linebuffer.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/link����������������������������������������������������������������0000664�0000000�0000000�00000001141�14110572173�0016624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: link() function: create a new link for an existing file Files: lib/link.c m4/link.m4 Depends-on: unistd free-posix [test $HAVE_LINK = 0 || test $REPLACE_LINK = 1] stat [test $HAVE_LINK = 0 || test $REPLACE_LINK = 1] strdup-posix [test $HAVE_LINK = 0 || test $REPLACE_LINK = 1] sys_stat [test $HAVE_LINK = 0 || test $REPLACE_LINK = 1] configure.ac: gl_FUNC_LINK if test $HAVE_LINK = 0 || test $REPLACE_LINK = 1; then AC_LIBOBJ([link]) fi gl_UNISTD_MODULE_INDICATOR([link]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Martin Lambers, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/link-follow���������������������������������������������������������0000664�0000000�0000000�00000000336�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether link("symlink", "foo") follows the symlink. Files: m4/link-follow.m4 Depends-on: configure.ac: gl_FUNC_LINK_FOLLOWS_SYMLINK Makefile.am: Include: License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/link-tests����������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0017762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-link.h tests/test-link.c tests/signature.h tests/macros.h Depends-on: ignore-value errno stdbool sys_stat configure.ac: Makefile.am: TESTS += test-link check_PROGRAMS += test-link �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkat��������������������������������������������������������������0000664�0000000�0000000�00000003554�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: linkat() function: create a hard link, relative to two directories Files: lib/at-func2.c lib/linkat.c m4/linkat.m4 Depends-on: unistd extensions areadlink [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] at-internal [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] dirname-lgpl [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] eloop-threshold [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] errno [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] fcntl-h [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] filenamecat-lgpl [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] filename [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] free-posix [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] fstat [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] getcwd-lgpl [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] link-follow [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] link [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] lstat [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] openat-die [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] openat-h [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] same-inode [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] save-cwd [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] stat [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] symlink [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] areadlinkat [test $REPLACE_LINKAT = 1] fstatat [test $REPLACE_LINKAT = 1] configure.ac: gl_FUNC_LINKAT if test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1; then AC_LIBOBJ([linkat]) AC_LIBOBJ([at-func2]) fi gl_UNISTD_MODULE_INDICATOR([linkat]) Makefile.am: Include: <fcntl.h> <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkat-tests��������������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-link.h tests/test-linkat.c tests/signature.h tests/macros.h Depends-on: ignore-value areadlink-with-size filenamecat-lgpl getcwd-lgpl same-inode unlinkat configure.ac: Makefile.am: TESTS += test-linkat check_PROGRAMS += test-linkat test_linkat_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linked-list���������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a linked list. Files: lib/gl_linked_list.h lib/gl_linked_list.c lib/gl_anylinked_list1.h lib/gl_anylinked_list2.h Depends-on: list configure.ac: Makefile.am: lib_SOURCES += gl_linked_list.h gl_linked_list.c gl_anylinked_list1.h gl_anylinked_list2.h Include: "gl_linked_list.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linked-list-tests���������������������������������������������������0000664�0000000�0000000�00000000276�14110572173�0021256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linked_list.c tests/macros.h Depends-on: array-list linked-list-unportable-tests configure.ac: Makefile.am: TESTS += test-linked_list check_PROGRAMS += test-linked_list ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linked-list-unportable-tests����������������������������������������0000664�0000000�0000000�00000001352�14110572173�0023423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-asyncsafe-linked_list-weak.sh tests/test-asyncsafe-linked_list-weak.c tests/test-asyncsafe-linked_list-strong.sh tests/test-asyncsafe-linked_list-strong.c tests/macros.h Status: unportable-test Depends-on: linked-list thread yield nanosleep sigaction sigprocmask configure.ac: Makefile.am: TESTS += \ test-asyncsafe-linked_list-weak.sh \ test-asyncsafe-linked_list-strong.sh XFAIL_TESTS += \ test-asyncsafe-linked_list-weak.sh \ test-asyncsafe-linked_list-strong.sh check_PROGRAMS += \ test-asyncsafe-linked_list-weak \ test-asyncsafe-linked_list-strong test_asyncsafe_linked_list_weak_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_asyncsafe_linked_list_strong_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-list�����������������������������������������������������0000664�0000000�0000000�00000001022�14110572173�0020750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a hash table with a linked list. Files: lib/gl_linkedhash_list.h lib/gl_linkedhash_list.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h lib/gl_anylinked_list1.h lib/gl_anylinked_list2.h Depends-on: list stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_linkedhash_list.h gl_linkedhash_list.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h gl_anylinked_list1.h gl_anylinked_list2.h Include: "gl_linkedhash_list.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-list-tests�����������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0022117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linkedhash_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-linkedhash_list check_PROGRAMS += test-linkedhash_list ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-map������������������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Map data type implemented by a hash table with a linked list. Files: lib/gl_linkedhash_map.h lib/gl_linkedhash_map.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h Depends-on: map stdint xsize c99 configure.ac: Makefile.am: lib_SOURCES += gl_linkedhash_map.h gl_linkedhash_map.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h Include: "gl_linkedhash_map.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-map-tests������������������������������������������������0000664�0000000�0000000�00000000337�14110572173�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linkedhash_map.c tests/macros.h Depends-on: array-map xalloc configure.ac: Makefile.am: TESTS += test-linkedhash_map check_PROGRAMS += test-linkedhash_map test_linkedhash_map_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-set������������������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set data type implemented by a hash table with a linked list. Files: lib/gl_linkedhash_set.h lib/gl_linkedhash_set.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h Depends-on: set stdint xsize c99 configure.ac: Makefile.am: lib_SOURCES += gl_linkedhash_set.h gl_linkedhash_set.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h Include: "gl_linkedhash_set.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/linkedhash-set-tests������������������������������������������������0000664�0000000�0000000�00000000337�14110572173�0021740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linkedhash_set.c tests/macros.h Depends-on: array-set xalloc configure.ac: Makefile.am: TESTS += test-linkedhash_set check_PROGRAMS += test-linkedhash_set test_linkedhash_set_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/list����������������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract sequential list data type. Files: lib/gl_list.h lib/gl_list.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += gl_list.h gl_list.c Include: "gl_list.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/list-c++������������������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract sequential list data type as a C++ class. Files: lib/gl_list.hh Depends-on: xlist xsublist configure.ac: Makefile.am: Include: "gl_list.hh" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/list-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-list-c++.cc tests/macros.h Depends-on: ansi-c++-opt array-list configure.ac: Makefile.am: if ANSICXX TESTS += test-list-c++ check_PROGRAMS += test-list-c++ test_list_c___SOURCES = test-list-c++.cc test_list_c___LDADD = $(LDADD) @LIBINTL@ endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/listen��������������������������������������������������������������0000664�0000000�0000000�00000001042�14110572173�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: listen() function: make a server socket ready for accepting connections. Files: lib/listen.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([listen]) fi gl_SYS_SOCKET_MODULE_INDICATOR([listen]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/listen-tests��������������������������������������������������������0000664�0000000�0000000�00000000312�14110572173�0020324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-listen.c tests/signature.h tests/macros.h Depends-on: sockets configure.ac: Makefile.am: TESTS += test-listen check_PROGRAMS += test-listen test_listen_LDADD = $(LDADD) @LIBSOCKET@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localcharset��������������������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return current locale's character encoding. Files: lib/localcharset.h lib/localcharset.c m4/codeset.m4 m4/localcharset.m4 Depends-on: extensions configure.ac: gl_LOCALCHARSET dnl For backward compatibility. Some packages still use this. LOCALCHARSET_TESTS_ENVIRONMENT= AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) Makefile.am: lib_SOURCES += localcharset.c Include: "localcharset.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localcharset-tests��������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0021476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-localcharset.c Depends-on: configure.ac: Makefile.am: noinst_PROGRAMS += test-localcharset test_localcharset_LDADD = $(LDADD) $(LIB_SETLOCALE) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/locale��������������������������������������������������������������0000664�0000000�0000000�00000004332�14110572173�0017133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <locale.h> that conforms to POSIX. Files: lib/locale.in.h m4/locale_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use stddef configure.ac: gl_LOCALE_H gl_LOCALE_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += locale.h # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -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)' \ < $(srcdir)/locale.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += locale.h locale.h-t Include: <locale.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/locale-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-locale-c++.cc tests/test-locale-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-locale-c++ check_PROGRAMS += test-locale-c++ test_locale_c___SOURCES = test-locale-c++.cc test-locale-c++2.cc test_locale_c___LDADD = $(LDADD) $(LIB_SETLOCALE) endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/locale-tests��������������������������������������������������������0000664�0000000�0000000�00000000261�14110572173�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-locale.c Depends-on: verify locale-c++-tests configure.ac: AC_CHECK_FUNCS_ONCE([newlocale]) Makefile.am: TESTS += test-locale check_PROGRAMS += test-locale �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localeconv����������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0020014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: localeconv() function: query locale dependent information for formatting numbers. Files: lib/localeconv.c m4/localeconv.m4 Depends-on: locale configure.ac: gl_FUNC_LOCALECONV if test $REPLACE_LOCALECONV = 1; then AC_LIBOBJ([localeconv]) gl_PREREQ_LOCALECONV fi gl_LOCALE_MODULE_INDICATOR([localeconv]) Makefile.am: Include: <locale.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localeconv-tests����������������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-localeconv.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-localeconv check_PROGRAMS += test-localeconv �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localename����������������������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return current locale's name, according to glibc naming conventions. Files: lib/localename.h lib/localename.c lib/localename-table.h lib/localename-table.c m4/localename.m4 m4/intl-thread-locale.m4 m4/intlmacosx.m4 m4/lcmessage.m4 Depends-on: extensions stdbool locale flexmember free-posix strdup lock langinfo setlocale-null thread-optim configure.ac: gl_LOCALENAME gl_LOCALE_MODULE_INDICATOR([localename]) Makefile.am: lib_SOURCES += localename.c localename-table.c Include: "localename.h" Link: @INTL_MACOSX_LIBS@ $(LIBTHREAD) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localename-tests����������������������������������������������������0000664�0000000�0000000�00000000457�14110572173�0021140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-localename.c tests/macros.h Depends-on: locale setenv unsetenv setlocale strdup configure.ac: AC_CHECK_FUNCS_ONCE([newlocale]) Makefile.am: TESTS += test-localename check_PROGRAMS += test-localename test_localename_LDADD = $(LDADD) $(LIB_SETLOCALE) @INTL_MACOSX_LIBS@ $(LIBTHREAD) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/localtime�����������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: localtime() function: convert time to broken-down local time. Files: lib/localtime.c m4/localtime.m4 Depends-on: time configure.ac: gl_FUNC_LOCALTIME if test $REPLACE_LOCALTIME = 1; then AC_LIBOBJ([localtime]) fi gl_TIME_MODULE_INDICATOR([localtime]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lock����������������������������������������������������������������0000664�0000000�0000000�00000001066�14110572173�0016625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locking in multithreaded situations. Files: lib/glthread/lock.h lib/glthread/lock.c m4/lock.m4 m4/pthread_rwlock_rdlock.m4 Depends-on: extensions threadlib windows-mutex [test $gl_threads_api = windows] windows-rwlock [test $gl_threads_api = windows] windows-recmutex [test $gl_threads_api = windows] windows-once [test $gl_threads_api = windows] configure.ac: gl_LOCK gl_MODULE_INDICATOR([lock]) Makefile.am: lib_SOURCES += glthread/lock.h glthread/lock.c Include: "glthread/lock.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lock-tests����������������������������������������������������������0000664�0000000�0000000�00000001233�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rwlock1.c tests/test-lock.c tests/test-once.c tests/atomic-int-gnulib.h m4/semaphore.m4 Depends-on: thread stdint usleep yield configure.ac: AC_CHECK_HEADERS_ONCE([semaphore.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_SEMAPHORE]) Makefile.am: TESTS += test-rwlock1 test-lock test-once1 test-once2 check_PROGRAMS += test-rwlock1 test-lock test-once1 test-once2 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@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log�����������������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0016451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log() function: natural logarithmic function. Files: lib/log.c m4/log.m4 m4/mathfunc.m4 Depends-on: math configure.ac: AC_REQUIRE([gl_FUNC_LOG]) if test $REPLACE_LOG = 1; then AC_LIBOBJ([log]) fi gl_MATH_MODULE_INDICATOR([log]) Makefile.am: Include: <math.h> Link: $(LOG_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log-ieee������������������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0017362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log() function according to ISO C 99 with IEC 60559. Files: m4/log-ieee.m4 Depends-on: log fpieee configure.ac: gl_FUNC_LOG_IEEE Makefile.am: Include: <math.h> Link: $(LOG_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log-ieee-tests������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log-ieee.c tests/test-log-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log-ieee check_PROGRAMS += test-log-ieee test_log_ieee_LDADD = $(LDADD) @LOG_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log-tests�����������������������������������������������������������0000664�0000000�0000000�00000000421�14110572173�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log.c tests/test-log.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-log check_PROGRAMS += test-log test_log_SOURCES = test-log.c randomd.c test_log_LDADD = $(LDADD) @LOG_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10���������������������������������������������������������������0000664�0000000�0000000�00000000514�14110572173�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10() function: base 10 logarithmic function. Files: lib/log10.c m4/log10.m4 m4/mathfunc.m4 Depends-on: math configure.ac: gl_FUNC_LOG10 if test $REPLACE_LOG10 = 1; then AC_LIBOBJ([log10]) fi gl_MATH_MODULE_INDICATOR([log10]) Makefile.am: Include: <math.h> Link: $(LOG10_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10-ieee����������������������������������������������������������0000664�0000000�0000000�00000000357�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10() function according to ISO C 99 with IEC 60559. Files: m4/log10-ieee.m4 Depends-on: log10 fpieee configure.ac: gl_FUNC_LOG10_IEEE Makefile.am: Include: <math.h> Link: $(LOG10_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10-ieee.c tests/test-log10-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log10-ieee check_PROGRAMS += test-log10-ieee test_log10_ieee_LDADD = $(LDADD) @LOG10_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10-tests���������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10.c tests/test-log10.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-log10 check_PROGRAMS += test-log10 test_log10_SOURCES = test-log10.c randomd.c test_log10_LDADD = $(LDADD) @LOG10_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10f��������������������������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0016770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10f() function: base 10 logarithmic function. Files: lib/log10f.c m4/log10f.m4 Depends-on: math extensions log10 [test $HAVE_LOG10F = 0 || test $REPLACE_LOG10F = 1] configure.ac: gl_FUNC_LOG10F if test $HAVE_LOG10F = 0 || test $REPLACE_LOG10F = 1; then AC_LIBOBJ([log10f]) fi gl_MATH_MODULE_INDICATOR([log10f]) Makefile.am: Include: <math.h> Link: $(LOG10F_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10f-ieee���������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10f() function according to ISO C 99 with IEC 60559. Files: m4/log10f-ieee.m4 Depends-on: log10f fpieee log10-ieee [test $HAVE_LOG10F = 0 || test $REPLACE_LOG10F = 1] configure.ac: gl_FUNC_LOG10F_IEEE Makefile.am: Include: <math.h> Link: $(LOG10F_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10f-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10f-ieee.c tests/test-log10-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log10f-ieee check_PROGRAMS += test-log10f-ieee test_log10f_ieee_LDADD = $(LDADD) @LOG10F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10f-tests��������������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10f.c tests/test-log10.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-log10f check_PROGRAMS += test-log10f test_log10f_SOURCES = test-log10f.c randomf.c test_log10f_LDADD = $(LDADD) @LOG10F_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10l��������������������������������������������������������������0000664�0000000�0000000�00000001313�14110572173�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10l() function: base 10 logarithmic function. Files: lib/log10l.c m4/log10l.m4 Depends-on: math extensions log10 [{ test $HAVE_LOG10L = 0 || test $REPLACE_LOG10L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_LOG10L = 0 || test $REPLACE_LOG10L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] logl [{ test $HAVE_LOG10L = 0 || test $REPLACE_LOG10L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOG10L if test $HAVE_LOG10L = 0 || test $REPLACE_LOG10L = 1; then AC_LIBOBJ([log10l]) fi gl_MATH_MODULE_INDICATOR([log10l]) Makefile.am: Include: <math.h> Link: $(LOG10L_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10l-ieee���������������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10l() function according to ISO C 99 with IEC 60559. Files: Depends-on: log10l fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOG10L_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10l-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10l-ieee.c tests/test-log10-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log10l-ieee check_PROGRAMS += test-log10l-ieee test_log10l_ieee_LDADD = $(LDADD) @LOG10L_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log10l-tests��������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0020135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10l.c tests/test-log10.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-log10l check_PROGRAMS += test-log10l test_log10l_SOURCES = test-log10l.c randoml.c test_log10l_LDADD = $(LDADD) @LOG10L_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1p���������������������������������������������������������������0000664�0000000�0000000�00000001075�14110572173�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1p() function: natural logarithm of 1 plus argument. Files: lib/log1p.c m4/log1p.m4 m4/mathfunc.m4 Depends-on: math extensions isnand [test $HAVE_LOG1P = 0 || test $REPLACE_LOG1P = 1] log [test $HAVE_LOG1P = 0 || test $REPLACE_LOG1P = 1] round [test $HAVE_LOG1P = 0 || test $REPLACE_LOG1P = 1] configure.ac: gl_FUNC_LOG1P if test $HAVE_LOG1P = 0 || test $REPLACE_LOG1P = 1; then AC_LIBOBJ([log1p]) fi gl_MATH_MODULE_INDICATOR([log1p]) Makefile.am: Include: <math.h> Link: $(LOG1P_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1p-ieee����������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1p() function according to ISO C 99 with IEC 60559. Files: m4/log1p-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: log1p fpieee configure.ac: gl_FUNC_LOG1P_IEEE Makefile.am: Include: <math.h> Link: $(LOG1P_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1p-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1p-ieee.c tests/test-log1p-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log1p-ieee check_PROGRAMS += test-log1p-ieee test_log1p_ieee_LDADD = $(LDADD) @LOG1P_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1p-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1p.c tests/test-log1p.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-log1p check_PROGRAMS += test-log1p test_log1p_SOURCES = test-log1p.c randomd.c test_log1p_LDADD = $(LDADD) @LOG1P_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pf��������������������������������������������������������������0000664�0000000�0000000�00000000665�14110572173�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1pf() function: natural logarithm of 1 plus argument. Files: lib/log1pf.c m4/log1pf.m4 Depends-on: math extensions log1p [test $HAVE_LOG1PF = 0 || test $REPLACE_LOG1PF = 1] configure.ac: gl_FUNC_LOG1PF if test $HAVE_LOG1PF = 0 || test $REPLACE_LOG1PF = 1; then AC_LIBOBJ([log1pf]) fi gl_MATH_MODULE_INDICATOR([log1pf]) Makefile.am: Include: <math.h> Link: $(LOG1PF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1pf() function according to ISO C 99 with IEC 60559. Files: m4/log1pf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: log1pf fpieee log1p-ieee [test $HAVE_LOG1PF = 0 || test $REPLACE_LOG1PF = 1] configure.ac: gl_FUNC_LOG1PF_IEEE Makefile.am: Include: <math.h> Link: $(LOG1PF_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1pf-ieee.c tests/test-log1p-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log1pf-ieee check_PROGRAMS += test-log1pf-ieee test_log1pf_ieee_LDADD = $(LDADD) @LOG1PF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pf-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0020223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1pf.c tests/test-log1p.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-log1pf check_PROGRAMS += test-log1pf test_log1pf_SOURCES = test-log1pf.c randomf.c test_log1pf_LDADD = $(LDADD) @LOG1PF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pl��������������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1pl() function: natural logarithm of 1 plus argument. Files: lib/log1pl.c m4/log1pl.m4 Depends-on: math extensions log1p [{ test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl [{ test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] logl [{ test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] roundl [{ test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOG1PL if test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; then AC_LIBOBJ([log1pl]) fi gl_MATH_MODULE_INDICATOR([log1pl]) Makefile.am: Include: <math.h> Link: $(LOG1PL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1pl() function according to ISO C 99 with IEC 60559. Files: m4/log1pl-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: log1pl fpieee log1p-ieee [{ test $HAVE_LOG1PL = 0 || test $REPLACE_LOG1PL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_LOG1PL_IEEE Makefile.am: Include: <math.h> Link: $(LOG1PL_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1pl-ieee.c tests/test-log1p-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log1pl-ieee check_PROGRAMS += test-log1pl-ieee test_log1pl_ieee_LDADD = $(LDADD) @LOG1PL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log1pl-tests��������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0020227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1pl.c tests/test-log1p.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-log1pl check_PROGRAMS += test-log1pl test_log1pl_SOURCES = test-log1pl.c randoml.c test_log1pl_LDADD = $(LDADD) @LOG1PL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2����������������������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2() function: base 2 logarithm. Files: lib/log2.c m4/log2.m4 m4/mathfunc.m4 Depends-on: math extensions isnand [test $HAVE_LOG2 = 0 || test $REPLACE_LOG2 = 1] frexp [test $HAVE_LOG2 = 0 || test $REPLACE_LOG2 = 1] log [test $HAVE_LOG2 = 0 || test $REPLACE_LOG2 = 1] configure.ac: gl_FUNC_LOG2 if test $HAVE_LOG2 = 0 || test $REPLACE_LOG2 = 1; then AC_LIBOBJ([log2]) fi gl_MATH_MODULE_INDICATOR([log2]) Makefile.am: Include: <math.h> Link: $(LOG2_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000352�14110572173�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2() function according to ISO C 99 with IEC 60559. Files: m4/log2-ieee.m4 Depends-on: log2 fpieee configure.ac: gl_FUNC_LOG2_IEEE Makefile.am: Include: <math.h> Link: $(LOG2_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2-ieee.c tests/test-log2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log2-ieee check_PROGRAMS += test-log2-ieee test_log2_ieee_LDADD = $(LDADD) @LOG2_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2-tests����������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2.c tests/test-log2.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-log2 check_PROGRAMS += test-log2 test_log2_SOURCES = test-log2.c randomd.c test_log2_LDADD = $(LDADD) @LOG2_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2f���������������������������������������������������������������0000664�0000000�0000000�00000001134�14110572173�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2f() function: base 2 logarithm. Files: lib/log2f.c m4/log2f.m4 Depends-on: math extensions log2 [test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1] isnanf [test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1] frexpf [test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1] logf [test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1] configure.ac: gl_FUNC_LOG2F if test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1; then AC_LIBOBJ([log2f]) fi gl_MATH_MODULE_INDICATOR([log2f]) Makefile.am: Include: <math.h> Link: $(LOG2F_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2f-ieee����������������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0017611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2f() function according to ISO C 99 with IEC 60559. Files: m4/log2f-ieee.m4 Depends-on: log2f fpieee log2-ieee [test $HAVE_LOG2F = 0 || test $REPLACE_LOG2F = 1] configure.ac: gl_FUNC_LOG2F_IEEE Makefile.am: Include: <math.h> Link: $(LOG2F_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2f-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2f-ieee.c tests/test-log2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log2f-ieee check_PROGRAMS += test-log2f-ieee test_log2f_ieee_LDADD = $(LDADD) @LOG2F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2f-tests���������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2f.c tests/test-log2.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-log2f check_PROGRAMS += test-log2f test_log2f_SOURCES = test-log2f.c randomf.c test_log2f_LDADD = $(LDADD) @LOG2F_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2l���������������������������������������������������������������0000664�0000000�0000000�00000001443�14110572173�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2() function: base 2 logarithm. Files: lib/log2l.c m4/log2l.m4 Depends-on: math extensions log2 [{ test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isnanl [{ test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] logl [{ test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOG2L if test $HAVE_LOG2L = 0 || test $REPLACE_LOG2L = 1; then AC_LIBOBJ([log2l]) fi gl_MATH_MODULE_INDICATOR([log2l]) Makefile.am: Include: <math.h> Link: $(LOG2L_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2l-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log2l() function according to ISO C 99 with IEC 60559. Files: Depends-on: log2l fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOG2L_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2l-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2l-ieee.c tests/test-log2-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-log2l-ieee check_PROGRAMS += test-log2l-ieee test_log2l_ieee_LDADD = $(LDADD) @LOG2L_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/log2l-tests���������������������������������������������������������0000664�0000000�0000000�00000000454�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log2l.c tests/test-log2.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-log2l check_PROGRAMS += test-log2l test_log2l_SOURCES = test-log2l.c randoml.c test_log2l_LDADD = $(LDADD) @LOG2L_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logb����������������������������������������������������������������0000664�0000000�0000000�00000001026�14110572173�0016614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logb() function: get exponent. Files: lib/logb.c m4/logb.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $HAVE_LOGB = 0 || test $REPLACE_LOGB = 1] frexp [test $HAVE_LOGB = 0 || test $REPLACE_LOGB = 1] isnand [test $HAVE_LOGB = 0 || test $REPLACE_LOGB = 1] configure.ac: gl_FUNC_LOGB if test $HAVE_LOGB = 0 || test $REPLACE_LOGB = 1; then AC_LIBOBJ([logb]) fi gl_MATH_MODULE_INDICATOR([logb]) Makefile.am: Include: <math.h> Link: $(LOGB_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logb-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logb() function according to ISO C 99 with IEC 60559. Files: Depends-on: logb fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOGB_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logb-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logb-ieee.c tests/test-logb-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-logb-ieee check_PROGRAMS += test-logb-ieee test_logb_ieee_LDADD = $(LDADD) @LOGB_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logb-tests����������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logb.c tests/test-logb.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-logb check_PROGRAMS += test-logb test_logb_SOURCES = test-logb.c randomd.c test_logb_LDADD = $(LDADD) @LOGB_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbf���������������������������������������������������������������0000664�0000000�0000000�00000001060�14110572173�0016760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logbf() function: get exponent. Files: lib/logbf.c lib/logb.c m4/logbf.m4 m4/mathfunc.m4 Depends-on: math extensions isfinite [test $HAVE_LOGBF = 0 || test $REPLACE_LOGBF = 1] frexpf [test $HAVE_LOGBF = 0 || test $REPLACE_LOGBF = 1] isnanf [test $HAVE_LOGBF = 0 || test $REPLACE_LOGBF = 1] configure.ac: gl_FUNC_LOGBF if test $HAVE_LOGBF = 0 || test $REPLACE_LOGBF = 1; then AC_LIBOBJ([logbf]) fi gl_MATH_MODULE_INDICATOR([logbf]) Makefile.am: Include: <math.h> Link: $(LOGBF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logbf() function according to ISO C 99 with IEC 60559. Files: Depends-on: logbf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOGBF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logbf-ieee.c tests/test-logb-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-logbf-ieee check_PROGRAMS += test-logbf-ieee test_logbf_ieee_LDADD = $(LDADD) @LOGBF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbf-tests���������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logbf.c tests/test-logb.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-logbf check_PROGRAMS += test-logbf test_logbf_SOURCES = test-logbf.c randomf.c test_logbf_LDADD = $(LDADD) @LOGBF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbl���������������������������������������������������������������0000664�0000000�0000000�00000001472�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logbl() function: get exponent. Files: lib/logbl.c lib/logb.c m4/logbl.m4 m4/mathfunc.m4 Depends-on: math extensions logb [{ test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isfinite [{ test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOGBL if test $HAVE_LOGBL = 0 || test $REPLACE_LOGBL = 1; then AC_LIBOBJ([logbl]) fi gl_MATH_MODULE_INDICATOR([logbl]) Makefile.am: Include: <math.h> Link: $(LOGBL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logbl() function according to ISO C 99 with IEC 60559. Files: Depends-on: logbl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOGBL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logbl-ieee.c tests/test-logb-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-logbl-ieee check_PROGRAMS += test-logbl-ieee test_logbl_ieee_LDADD = $(LDADD) @LOGBL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logbl-tests���������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logbl.c tests/test-logb.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: configure.ac: Makefile.am: TESTS += test-logbl check_PROGRAMS += test-logbl test_logbl_SOURCES = test-logbl.c randoml.c test_logbl_LDADD = $(LDADD) @LOGBL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logf����������������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logf() function: natural logarithmic function. Files: lib/logf.c m4/logf.m4 Depends-on: math extensions log [test $HAVE_LOGF = 0 || test $REPLACE_LOGF = 1] configure.ac: gl_FUNC_LOGF if test $HAVE_LOGF = 0 || test $REPLACE_LOGF = 1; then AC_LIBOBJ([logf]) fi gl_MATH_MODULE_INDICATOR([logf]) Makefile.am: Include: <math.h> Link: $(LOGF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logf-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0017527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logf() function according to ISO C 99 with IEC 60559. Files: m4/logf-ieee.m4 Depends-on: logf fpieee log-ieee [test $HAVE_LOGF = 0 || test $REPLACE_LOGF = 1] configure.ac: gl_FUNC_LOGF_IEEE Makefile.am: Include: <math.h> Link: $(LOGF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logf-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logf-ieee.c tests/test-log-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-logf-ieee check_PROGRAMS += test-logf-ieee test_logf_ieee_LDADD = $(LDADD) @LOGF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logf-tests����������������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logf.c tests/test-log.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-logf check_PROGRAMS += test-logf test_logf_SOURCES = test-logf.c randomf.c test_logf_LDADD = $(LDADD) @LOGF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/login_tty�����������������������������������������������������������0000664�0000000�0000000�00000001002�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: login_tty() function: Assign a given terminal as controlling terminal and as standard input, standard output, standard error of the current process. Files: lib/login_tty.c m4/pty.m4 Depends-on: pty sys_ioctl open [test $ac_cv_func_login_tty = no] configure.ac: gl_FUNC_LOGIN_TTY if test $ac_cv_func_login_tty = no; then AC_LIBOBJ([login_tty]) fi gl_PTY_MODULE_INDICATOR([login_tty]) Makefile.am: Include: extern int login_tty (int); Link: $(PTY_LIB) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/login_tty-tests�����������������������������������������������������0000664�0000000�0000000�00000000274�14110572173�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-login_tty.c Depends-on: openpty tcgetsid configure.ac: Makefile.am: TESTS += test-login_tty check_PROGRAMS += test-login_tty test_login_tty_LDADD = $(LDADD) @PTY_LIB@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logl����������������������������������������������������������������0000664�0000000�0000000�00000001460�14110572173�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logl() function: logarithm with long double argument. Files: lib/logl.c m4/logl.m4 Depends-on: math extensions log [{ test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] frexpl [{ test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [{ test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOGL if test $HAVE_LOGL = 0 || test $REPLACE_LOGL = 1; then AC_LIBOBJ([logl]) fi gl_MATH_MODULE_INDICATOR([logl]) Makefile.am: Include: <math.h> Link: $(LOGL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logl-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logl() function according to ISO C 99 with IEC 60559. Files: Depends-on: logl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(LOGL_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logl-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0020677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logl-ieee.c tests/test-log-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-logl-ieee check_PROGRAMS += test-logl-ieee test_logl_ieee_LDADD = $(LDADD) @LOGL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/logl-tests����������������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logl.c tests/test-log.h tests/minus-zero.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-logl check_PROGRAMS += test-logl test_logl_SOURCES = test-logl.c randoml.c test_logl_LDADD = $(LDADD) @LOGL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/long-options��������������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Handle --help and --version options. Files: lib/long-options.h lib/long-options.c Depends-on: c99 exitfail getopt-gnu stdbool stdlib version-etc configure.ac: Makefile.am: lib_SOURCES += long-options.c Include: "long-options.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/longlong������������������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Define HAVE_LONG_LONG_INT if 'long long int' works. Status: obsolete Notice: This module is obsolete. Files: m4/longlong.m4 configure.ac: AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) License: LGPL Maintainer: Ben Pfaff ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lseek���������������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lseek() function: Reposition a file descriptor. Files: lib/lseek.c m4/lseek.m4 Depends-on: unistd sys_types largefile msvc-nothrow [test $REPLACE_LSEEK = 1] fstat [test $REPLACE_LSEEK = 1] configure.ac: gl_FUNC_LSEEK if test $REPLACE_LSEEK = 1; then AC_LIBOBJ([lseek]) fi gl_UNISTD_MODULE_INDICATOR([lseek]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lseek-tests���������������������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-lseek.c tests/test-lseek.sh tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-lseek.sh check_PROGRAMS += test-lseek ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/lstat���������������������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lstat() function: return information about a file or symbolic link. Files: lib/lstat.c m4/lstat.m4 Depends-on: sys_stat largefile stat [test $REPLACE_LSTAT = 1] stat-time [test $REPLACE_LSTAT = 1] configure.ac: gl_FUNC_LSTAT if test $REPLACE_LSTAT = 1; then AC_LIBOBJ([lstat]) gl_PREREQ_LSTAT fi gl_SYS_STAT_MODULE_INDICATOR([lstat]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������gnulib-20210822~d383792/modules/lstat-tests���������������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0020163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-lstat.h tests/test-lstat.c tests/signature.h tests/macros.h Depends-on: ignore-value errno same-inode stdbool symlink configure.ac: Makefile.am: TESTS += test-lstat check_PROGRAMS += test-lstat ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/maintainer-makefile�������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0021573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper GNUmakefile with syntax checks, build improvements, etc. See also readme-release. Files: top/maint.mk Depends-on: gnumakefile useless-if-before-free vc-list-files configure.ac: AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_GREP]) Makefile.am: EXTRA_DIST += $(top_srcdir)/maint.mk License: GPLed build tool Maintainer: all ��������������������������������������������������������������gnulib-20210822~d383792/modules/malloc-gnu����������������������������������������������������������0000664�0000000�0000000�00000000750�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: malloc() function that is glibc compatible. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: lib/malloc.c Depends-on: malloc-posix configure.ac: gl_FUNC_MALLOC_GNU if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������������gnulib-20210822~d383792/modules/malloc-gnu-tests����������������������������������������������������0000664�0000000�0000000�00000000232�14110572173�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-malloc-gnu.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-malloc-gnu check_PROGRAMS += test-malloc-gnu ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloc-h������������������������������������������������������������0000664�0000000�0000000�00000002443�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <malloc.h> that works around platform issues. Files: lib/malloc.in.h m4/malloc_h.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_MALLOC_H gl_MALLOC_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += malloc.h # We need the following in order to create <malloc.h> when we add workarounds. malloc.h: malloc.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_MALLOC_H''@|$(HAVE_MALLOC_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_MALLOC_H''@|$(NEXT_MALLOC_H)|g' \ -e 's/@''GNULIB_MEMALIGN''@/$(GNULIB_MEMALIGN)/g' \ -e 's|@''HAVE_MEMALIGN''@|$(HAVE_MEMALIGN)|g' \ -e 's|@''REPLACE_MEMALIGN''@|$(REPLACE_MEMALIGN)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/malloc.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += malloc.h malloc.h-t Include: <malloc.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloc-h-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-malloc-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-malloc-h-c++ check_PROGRAMS += test-malloc-h-c++ test_malloc_h_c___SOURCES = test-malloc-h-c++.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloc-h-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-malloc-h.c Depends-on: malloc-h-c++-tests configure.ac: Makefile.am: TESTS += test-malloc-h check_PROGRAMS += test-malloc-h �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloc-posix��������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0020302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: malloc() function: allocate memory with indefinite extent. Files: lib/malloc.c m4/malloc.m4 Depends-on: stdlib xalloc-oversized [test $REPLACE_MALLOC = 1] configure.ac: AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloca�������������������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0017306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Safe automatic memory allocation. Files: lib/malloca.h lib/malloca.c m4/malloca.m4 m4/eealloc.m4 Depends-on: alloca-opt idx intprops stdint verify xalloc-oversized configure.ac: gl_MALLOCA Makefile.am: lib_SOURCES += malloca.c Include: "malloca.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/malloca-tests�������������������������������������������������������0000664�0000000�0000000�00000000205�14110572173�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-malloca.c Depends-on: unsetenv configure.ac: Makefile.am: TESTS += test-malloca check_PROGRAMS += test-malloca �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/manywarnings��������������������������������������������������������0000664�0000000�0000000�00000000336�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper M4 functions to help work out a set of warning parameters to use. Files: m4/manywarnings.m4 m4/manywarnings-c++.m4 Depends-on: warnings configure.ac: License: unlimited Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/map�����������������������������������������������������������������0000664�0000000�0000000�00000000334�14110572173�0016447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract map data type. Files: lib/gl_map.h lib/gl_map.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += gl_map.h gl_map.c Include: "gl_map.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/map-c++�������������������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract map data type as a C++ class. Files: lib/gl_map.hh Depends-on: xmap configure.ac: Makefile.am: Include: "gl_map.hh" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/map-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-map-c++.cc tests/macros.h Depends-on: ansi-c++-opt array-map configure.ac: Makefile.am: if ANSICXX TESTS += test-map-c++ check_PROGRAMS += test-map-c++ test_map_c___SOURCES = test-map-c++.cc test_map_c___LDADD = $(LDADD) @LIBINTL@ endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/math����������������������������������������������������������������0000664�0000000�0000000�00000037733�14110572173�0016640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <math.h>. Files: lib/math.in.h lib/math.c m4/math_h.m4 Depends-on: extern-inline include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use float configure.ac: gl_MATH_H gl_MATH_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += math.h lib_SOURCES += math.c # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h | \ sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ -e 's/@''GNULIB_MDA_J0''@/$(GNULIB_MDA_J0)/g' \ -e 's/@''GNULIB_MDA_J1''@/$(GNULIB_MDA_J1)/g' \ -e 's/@''GNULIB_MDA_JN''@/$(GNULIB_MDA_JN)/g' \ -e 's/@''GNULIB_MDA_Y0''@/$(GNULIB_MDA_Y0)/g' \ -e 's/@''GNULIB_MDA_Y1''@/$(GNULIB_MDA_Y1)/g' \ -e 's/@''GNULIB_MDA_YN''@/$(GNULIB_MDA_YN)/g' \ | \ sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -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 && \ mv $@-t $@ MOSTLYCLEANFILES += math.h math.h-t Include: <math.h> License: LGPLv2+ Maintainer: all �������������������������������������gnulib-20210822~d383792/modules/math-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-math-c++.cc tests/test-math-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-math-c++ check_PROGRAMS += test-math-c++ test_math_c___SOURCES = test-math-c++.cc test-math-c++2.cc # These link dependencies are needed on IRIX 6.5 with cc. test_math_c___LDADD = $(LDADD) $(COPYSIGNL_LIBM) $(RINT_LIBM) $(RINTL_LIBM) endif ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/math-tests����������������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0017755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-math.c tests/macros.h Depends-on: math-c++-tests configure.ac: Makefile.am: TESTS += test-math check_PROGRAMS += test-math ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mathl���������������������������������������������������������������0000664�0000000�0000000�00000001321�14110572173�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: C99 functions for transcendental functions with long double arguments. Files: Depends-on: floorl ceill acosl asinl atanl cosl expl logl sinl sqrtl tanl configure.ac: AC_REQUIRE([gl_FUNC_FLOORL]) AC_REQUIRE([gl_FUNC_CEILL]) AC_REQUIRE([gl_FUNC_ACOSL]) AC_REQUIRE([gl_FUNC_ASINL]) AC_REQUIRE([gl_FUNC_ATANL]) AC_REQUIRE([gl_FUNC_COSL]) AC_REQUIRE([gl_FUNC_EXPL]) AC_REQUIRE([gl_FUNC_LOGL]) AC_REQUIRE([gl_FUNC_SINL]) AC_REQUIRE([gl_FUNC_SQRTL]) AC_REQUIRE([gl_FUNC_TANL]) LIBS="$LIBS $FLOORL_LIBM $CEILL_LIBM $ACOSL_LIBM $ASINL_LIBM $ATANL_LIBM $COSL_LIBM $EXPL_LIBM $LOGL_LIBM $SINL_LIBM $SQRTL_LIBM $TANL_LIBM" Makefile.am: Include: <math.h> License: GPL Maintainer: Paolo Bonzini <bonzini@gnu.org> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbchar��������������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Multibyte character data type. Files: lib/mbchar.h lib/mbchar.c m4/mbchar.m4 Depends-on: extensions extern-inline stdbool wchar wctype-h iswblank iswdigit iswxdigit wcwidth memcmp configure.ac: gl_MBCHAR Makefile.am: lib_SOURCES += mbchar.c Include: "mbchar.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbfile��������������������������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0017137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Multibyte character I/O. Files: lib/mbfile.h lib/mbfile.c m4/mbfile.m4 m4/mbrtowc.m4 Depends-on: extern-inline mbchar mbrtowc mbsinit wchar stdbool configure.ac: gl_MBFILE Makefile.am: lib_SOURCES += mbfile.h mbfile.c Include: "mbfile.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbiter��������������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterating through multibyte strings. Files: lib/mbiter.h lib/mbiter.c m4/mbiter.m4 m4/mbrtowc.m4 Depends-on: extern-inline mbchar mbrtowc mbsinit wchar stdbool configure.ac: gl_MBITER Makefile.am: lib_SOURCES += mbiter.h mbiter.c Include: "mbiter.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbmemcasecmp��������������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbmemcasecmp() function: case-insensitive memory area comparison. Files: lib/mbmemcasecmp.h lib/mbmemcasecmp.c Depends-on: mbiter configure.ac: Makefile.am: lib_SOURCES += mbmemcasecmp.c Include: "mbmemcasecmp.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbmemcasecmp-tests��������������������������������������������������0000664�0000000�0000000�00000001170�14110572173�0021462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbmemcasecmp1.sh tests/test-mbmemcasecmp2.sh tests/test-mbmemcasecmp3.sh tests/test-mbmemcasecmp.c tests/test-mbmemcasecmp.h tests/macros.h m4/locale-fr.m4 m4/locale-tr.m4 m4/codeset.m4 Depends-on: stdbool setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_TR_UTF8 Makefile.am: TESTS += test-mbmemcasecmp1.sh test-mbmemcasecmp2.sh test-mbmemcasecmp3.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-mbmemcasecmp test_mbmemcasecmp_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbmemcasecoll�������������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0020475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbmemcasecoll() function: locale dependent case-insensitive memory area comparison. Files: lib/mbmemcasecoll.h lib/mbmemcasecoll.c Depends-on: stdbool malloca mbrtowc wcrtomb memcmp2 memcoll wchar configure.ac: Makefile.am: lib_SOURCES += mbmemcasecoll.c Include: "mbmemcasecoll.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbmemcasecoll-tests�������������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0021634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbmemcasecoll1.sh tests/test-mbmemcasecoll2.sh tests/test-mbmemcasecoll3.sh tests/test-mbmemcasecoll.c tests/test-mbmemcasecmp.h tests/macros.h m4/locale-fr.m4 m4/locale-tr.m4 m4/codeset.m4 Depends-on: stdbool setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_TR_UTF8 Makefile.am: TESTS += test-mbmemcasecoll1.sh test-mbmemcasecoll2.sh test-mbmemcasecoll3.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-mbmemcasecoll test_mbmemcasecoll_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbrlen��������������������������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbrlen() function: recognize multibyte character. Files: lib/mbrlen.c m4/mbrlen.m4 m4/mbstate_t.m4 Depends-on: wchar extensions mbrtowc [test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1] configure.ac: gl_FUNC_MBRLEN if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then AC_LIBOBJ([mbrlen]) gl_PREREQ_MBRLEN fi gl_WCHAR_MODULE_INDICATOR([mbrlen]) Makefile.am: Include: <wchar.h> Link: $(LIB_MBRTOWC) License: LGPL Maintainer: all ��������������������������������������������gnulib-20210822~d383792/modules/mbrtoc32������������������������������������������������������������0000664�0000000�0000000�00000002560�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbrtoc32() function: convert multibyte character to 32-bit wide character. Files: lib/mbrtoc32.c lib/mbrtowc-impl.h lib/mbrtowc-impl-utf8.h lib/lc-charset-dispatch.h lib/lc-charset-dispatch.c lib/mbtowc-lock.h lib/mbtowc-lock.c lib/windows-initguard.h m4/mbrtoc32.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/threadlib.m4 m4/visibility.m4 Depends-on: uchar attribute [test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1] c99 [{ test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1; } && test $REPLACE_MBSTATE_T = 0] hard-locale [{ test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1; } && test $REPLACE_MBSTATE_T = 0] mbrtowc [{ test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1; } && test $REPLACE_MBSTATE_T = 0] localcharset [test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1] streq [test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1] verify [test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1] configure.ac: gl_FUNC_MBRTOC32 if test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1; then AC_LIBOBJ([mbrtoc32]) if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOC32 fi gl_UCHAR_MODULE_INDICATOR([mbrtoc32]) Makefile.am: Include: <uchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbrtoc32-tests������������������������������������������������������0000664�0000000�0000000�00000002215�14110572173�0020465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbrtoc32-1.sh tests/test-mbrtoc32-2.sh tests/test-mbrtoc32-3.sh tests/test-mbrtoc32-4.sh tests/test-mbrtoc32-5.sh tests/test-mbrtoc32.c tests/test-mbrtoc32-w32-1.sh tests/test-mbrtoc32-w32-2.sh tests/test-mbrtoc32-w32-3.sh tests/test-mbrtoc32-w32-4.sh tests/test-mbrtoc32-w32-5.sh tests/test-mbrtoc32-w32-6.sh tests/test-mbrtoc32-w32-7.sh tests/test-mbrtoc32-w32.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbsinit c32tob setlocale localcharset configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += \ test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh \ test-mbrtoc32-5.sh \ test-mbrtoc32-w32-1.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 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) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbrtowc�������������������������������������������������������������0000664�0000000�0000000�00000002540�14110572173�0017350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbrtowc() function: convert multibyte character to wide character. Files: lib/mbrtowc.c lib/mbrtowc-impl.h lib/mbrtowc-impl-utf8.h lib/lc-charset-dispatch.h lib/lc-charset-dispatch.c lib/mbtowc-lock.h lib/mbtowc-lock.c lib/windows-initguard.h m4/mbrtowc.m4 m4/mbstate_t.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 m4/threadlib.m4 m4/visibility.m4 Depends-on: wchar extensions attribute [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] stdint [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] hard-locale [{ test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; } && test $REPLACE_MBSTATE_T = 0] mbsinit [{ test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; } && test $REPLACE_MBSTATE_T = 0] localcharset [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] streq [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] verify [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] configure.ac: gl_FUNC_MBRTOWC if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then AC_LIBOBJ([mbrtowc]) if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOWC fi gl_WCHAR_MODULE_INDICATOR([mbrtowc]) Makefile.am: Include: <wchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbrtowc-tests�������������������������������������������������������0000664�0000000�0000000�00000002145�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbrtowc1.sh tests/test-mbrtowc2.sh tests/test-mbrtowc3.sh tests/test-mbrtowc4.sh tests/test-mbrtowc5.sh tests/test-mbrtowc.c tests/test-mbrtowc-w32-1.sh tests/test-mbrtowc-w32-2.sh tests/test-mbrtowc-w32-3.sh tests/test-mbrtowc-w32-4.sh tests/test-mbrtowc-w32-5.sh tests/test-mbrtowc-w32-6.sh tests/test-mbrtowc-w32-7.sh tests/test-mbrtowc-w32.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbsinit wctob setlocale localcharset configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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 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) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscasecmp����������������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0020011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbscasecmp() function: case-insensitive string comparison. Files: lib/mbscasecmp.c Depends-on: mbuiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbscasecmp]) Makefile.am: lib_SOURCES += mbscasecmp.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscasecmp-tests����������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbscasecmp.sh tests/test-mbscasecmp.c tests/macros.h m4/locale-tr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_TR_UTF8 Makefile.am: TESTS += test-mbscasecmp.sh TESTS_ENVIRONMENT += LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-mbscasecmp test_mbscasecmp_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscasestr����������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbscasestr() function: case-insensitive search for a substring in a string. Files: lib/mbscasestr.c lib/str-kmp.h Depends-on: mbuiter stdbool string mbslen malloca strnlen configure.ac: gl_STRING_MODULE_INDICATOR([mbscasestr]) Makefile.am: lib_SOURCES += mbscasestr.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscasestr-tests����������������������������������������������������0000664�0000000�0000000�00000001710�14110572173�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbscasestr1.c tests/test-mbscasestr2.sh tests/test-mbscasestr2.c tests/test-mbscasestr3.sh tests/test-mbscasestr3.c tests/test-mbscasestr4.sh tests/test-mbscasestr4.c tests/macros.h m4/locale-fr.m4 m4/locale-tr.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 gt_LOCALE_TR_UTF8 gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbscasestr1 test-mbscasestr2.sh test-mbscasestr3.sh test-mbscasestr4.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbscasestr1 test-mbscasestr2 test-mbscasestr3 test-mbscasestr4 test_mbscasestr1_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_MBRTOWC) test_mbscasestr2_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) test_mbscasestr3_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) test_mbscasestr4_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������gnulib-20210822~d383792/modules/mbschr��������������������������������������������������������������0000664�0000000�0000000�00000000536�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbschr() function: search a string for a character. Files: lib/mbschr.c Depends-on: mbuiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbschr]) Makefile.am: lib_SOURCES += mbschr.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbschr-tests��������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbschr.sh tests/test-mbschr.c tests/macros.h m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbschr.sh TESTS_ENVIRONMENT += LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbschr test_mbschr_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscspn�������������������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbscspn() function: search a string for any of a set of characters. Files: lib/mbscspn.c Depends-on: mbuiter string mbschr strcspn configure.ac: gl_STRING_MODULE_INDICATOR([mbscspn]) Makefile.am: lib_SOURCES += mbscspn.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbscspn-tests�������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbscspn.sh tests/test-mbscspn.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-mbscspn.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbscspn test_mbscspn_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsinit�������������������������������������������������������������0000664�0000000�0000000�00000001054�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsinit() function: test for initial conversion state. Files: lib/mbsinit.c m4/mbsinit.m4 m4/mbstate_t.m4 Depends-on: wchar extensions mbrtowc [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1] verify [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1] configure.ac: gl_FUNC_MBSINIT if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then AC_LIBOBJ([mbsinit]) gl_PREREQ_MBSINIT fi gl_WCHAR_MODULE_INDICATOR([mbsinit]) Makefile.am: Include: <wchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsinit-tests�������������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsinit.sh tests/test-mbsinit.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: mbrtowc setlocale configure.ac: gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-mbsinit.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsinit test_mbsinit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbslen��������������������������������������������������������������0000664�0000000�0000000�00000000623�14110572173�0017153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbslen() function: Determine the number of multibyte characters in a string. Files: lib/mbslen.c m4/mbslen.m4 Depends-on: mbuiter string configure.ac: gl_FUNC_MBSLEN gl_STRING_MODULE_INDICATOR([mbslen]) Makefile.am: lib_SOURCES += mbslen.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsncasecmp���������������������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0020173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsncasecmp() function: case-insensitive string prefix comparison. Files: lib/mbsncasecmp.c Depends-on: mbuiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbsncasecmp]) Makefile.am: lib_SOURCES += mbsncasecmp.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsncasecmp-tests���������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0021334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsncasecmp.sh tests/test-mbsncasecmp.c tests/macros.h m4/locale-tr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_TR_UTF8 Makefile.am: TESTS += test-mbsncasecmp.sh TESTS_ENVIRONMENT += LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-mbsncasecmp test_mbsncasecmp_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsnlen�������������������������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsnlen() function: Determine the number of multibyte characters in a string. Files: lib/mbsnlen.c Depends-on: mbiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbsnlen]) Makefile.am: lib_SOURCES += mbsnlen.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsnrtoc32s���������������������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsnrtoc32s() function: convert string to 32-bit wide string. Files: lib/mbsnrtoc32s.c lib/mbsnrtowcs-impl.h lib/mbsrtoc32s-state.c Depends-on: uchar wchar verify mbrtoc32 minmax strnlen1 mbsnrtowcs [test $SMALL_WCHAR_T = 0] configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_LIBOBJ([mbsrtoc32s-state]) gl_UCHAR_MODULE_INDICATOR([mbsnrtoc32s]) Makefile.am: lib_SOURCES += mbsnrtoc32s.c Include: <uchar.h> Link: $(LIB_MBRTOWC) License: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20210822~d383792/modules/mbsnrtoc32s-tests���������������������������������������������������0000664�0000000�0000000�00000001322�14110572173�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsnrtoc32s-1.sh tests/test-mbsnrtoc32s-2.sh tests/test-mbsnrtoc32s-3.sh tests/test-mbsnrtoc32s-4.sh tests/test-mbsnrtoc32s.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 mbsinit c32tob setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsnrtoc32s-1.sh test-mbsnrtoc32s-2.sh test-mbsnrtoc32s-3.sh test-mbsnrtoc32s-4.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-mbsnrtoc32s test_mbsnrtoc32s_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsnrtowcs����������������������������������������������������������0000664�0000000�0000000�00000001343�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsnrtowcs() function: convert string to wide string. Files: lib/mbsnrtowcs.c lib/mbsnrtowcs-impl.h lib/mbsrtowcs-state.c m4/mbsnrtowcs.m4 m4/mbstate_t.m4 Depends-on: wchar extensions mbrtowc [test $HAVE_MBSNRTOWCS = 0 || test $REPLACE_MBSNRTOWCS = 1] minmax [test $HAVE_MBSNRTOWCS = 0 || test $REPLACE_MBSNRTOWCS = 1] strnlen1 [test $HAVE_MBSNRTOWCS = 0 || test $REPLACE_MBSNRTOWCS = 1] configure.ac: gl_FUNC_MBSNRTOWCS if test $HAVE_MBSNRTOWCS = 0 || test $REPLACE_MBSNRTOWCS = 1; then AC_LIBOBJ([mbsnrtowcs]) AC_LIBOBJ([mbsrtowcs-state]) gl_PREREQ_MBSNRTOWCS fi gl_WCHAR_MODULE_INDICATOR([mbsnrtowcs]) Makefile.am: Include: <wchar.h> Link: $(LIB_MBRTOWC) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsnrtowcs-tests����������������������������������������������������0000664�0000000�0000000�00000001275�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsnrtowcs1.sh tests/test-mbsnrtowcs2.sh tests/test-mbsnrtowcs3.sh tests/test-mbsnrtowcs4.sh tests/test-mbsnrtowcs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtowc mbsinit wctob setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsnrtowcs1.sh test-mbsnrtowcs2.sh test-mbsnrtowcs3.sh test-mbsnrtowcs4.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-mbsnrtowcs test_mbsnrtowcs_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbspbrk�������������������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0017326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbspbrk() function: search a string for any of a set of characters. Files: lib/mbspbrk.c Depends-on: mbuiter string mbschr strpbrk configure.ac: gl_STRING_MODULE_INDICATOR([mbspbrk]) Makefile.am: lib_SOURCES += mbspbrk.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbspbrk-tests�������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0020473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbspbrk.sh tests/test-mbspbrk.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-mbspbrk.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbspbrk test_mbspbrk_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbspcasecmp���������������������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbspcasecmp() function: case-insensitive string prefix comparison. Files: lib/mbspcasecmp.c Depends-on: mbuiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbspcasecmp]) Makefile.am: lib_SOURCES += mbspcasecmp.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbspcasecmp-tests���������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0021336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbspcasecmp.sh tests/test-mbspcasecmp.c tests/macros.h m4/locale-tr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_TR_UTF8 Makefile.am: TESTS += test-mbspcasecmp.sh TESTS_ENVIRONMENT += LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-mbspcasecmp test_mbspcasecmp_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsrchr�������������������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsrchr() function: search a string for a character, from the end. Files: lib/mbsrchr.c Depends-on: mbuiter string configure.ac: gl_STRING_MODULE_INDICATOR([mbsrchr]) Makefile.am: lib_SOURCES += mbsrchr.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsrchr-tests�������������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsrchr.sh tests/test-mbsrchr.c tests/macros.h m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsrchr.sh TESTS_ENVIRONMENT += LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbsrchr test_mbsrchr_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsrtoc32s����������������������������������������������������������0000664�0000000�0000000�00000000731�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsrtoc32s() function: convert string to 32-bit wide string. Files: lib/mbsrtoc32s.c lib/mbsrtowcs-impl.h lib/mbsrtoc32s-state.c Depends-on: uchar wchar verify mbrtoc32 strnlen1 mbsrtowcs [test $SMALL_WCHAR_T = 0] configure.ac: AC_REQUIRE([gl_UCHAR_H]) AC_LIBOBJ([mbsrtoc32s-state]) gl_UCHAR_MODULE_INDICATOR([mbsrtoc32s]) Makefile.am: lib_SOURCES += mbsrtoc32s.c Include: <uchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������gnulib-20210822~d383792/modules/mbsrtoc32s-tests����������������������������������������������������0000664�0000000�0000000�00000001307�14110572173�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsrtoc32s-1.sh tests/test-mbsrtoc32s-2.sh tests/test-mbsrtoc32s-3.sh tests/test-mbsrtoc32s-4.sh tests/test-mbsrtoc32s.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtoc32 mbsinit c32tob setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsrtoc32s-1.sh test-mbsrtoc32s-2.sh test-mbsrtoc32s-3.sh test-mbsrtoc32s-4.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-mbsrtoc32s test_mbsrtoc32s_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsrtowcs�����������������������������������������������������������0000664�0000000�0000000�00000001312�14110572173�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsrtowcs() function: convert string to wide string. Files: lib/mbsrtowcs.c lib/mbsrtowcs-impl.h lib/mbsrtowcs-state.c m4/mbsrtowcs.m4 m4/mbstate_t.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wchar extensions mbrtowc [test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1] strnlen1 [test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1] configure.ac: gl_FUNC_MBSRTOWCS if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then AC_LIBOBJ([mbsrtowcs]) AC_LIBOBJ([mbsrtowcs-state]) gl_PREREQ_MBSRTOWCS fi gl_WCHAR_MODULE_INDICATOR([mbsrtowcs]) Makefile.am: Include: <wchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsrtowcs-tests�����������������������������������������������������0000664�0000000�0000000�00000001262�14110572173�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsrtowcs1.sh tests/test-mbsrtowcs2.sh tests/test-mbsrtowcs3.sh tests/test-mbsrtowcs4.sh tests/test-mbsrtowcs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: mbrtowc mbsinit wctob setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsrtowcs1.sh test-mbsrtowcs2.sh test-mbsrtowcs3.sh test-mbsrtowcs4.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-mbsrtowcs test_mbsrtowcs_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbssep��������������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbssep() function: split string into tokens, thread safe. Files: lib/mbssep.c Depends-on: mbuiter string mbspbrk strsep configure.ac: gl_STRING_MODULE_INDICATOR([mbssep]) Makefile.am: lib_SOURCES += mbssep.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsspn��������������������������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsspn() function: search a string for any outside a set of characters. Files: lib/mbsspn.c Depends-on: mbuiter string mbschr configure.ac: gl_STRING_MODULE_INDICATOR([mbsspn]) Makefile.am: lib_SOURCES += mbsspn.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsspn-tests��������������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0020337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsspn.sh tests/test-mbsspn.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-mbsspn.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsspn test_mbsspn_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsstr��������������������������������������������������������������0000664�0000000�0000000�00000000616�14110572173�0017207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbsstr() function: search for a substring in a string. Files: lib/mbsstr.c lib/str-kmp.h Depends-on: mbuiter stdbool string mbslen malloca strnlen configure.ac: gl_STRING_MODULE_INDICATOR([mbsstr]) Makefile.am: lib_SOURCES += mbsstr.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbsstr-tests��������������������������������������������������������0000664�0000000�0000000�00000001242�14110572173�0020343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbsstr1.c tests/test-mbsstr2.sh tests/test-mbsstr2.c tests/test-mbsstr3.sh tests/test-mbsstr3.c tests/macros.h m4/locale-fr.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbsstr1 test-mbsstr2.sh test-mbsstr3.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbsstr1 test-mbsstr2 test-mbsstr3 test_mbsstr1_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_MBRTOWC) test_mbsstr2_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) test_mbsstr3_LDADD = $(LDADD) $(LIBUNISTRING) $(LIB_SETLOCALE) $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbstoc32s�����������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbstoc32s() function: convert string to 32-bit wide string. Files: lib/mbstoc32s.c Depends-on: uchar wchar mbsrtoc32s configure.ac: gl_UCHAR_MODULE_INDICATOR([mbstoc32s]) Makefile.am: lib_SOURCES += mbstoc32s.c Include: <uchar.h> Link: $(LIB_MBRTOWC) License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbstoc32s-tests�����������������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0020652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mbstoc32s-1.sh tests/test-mbstoc32s-2.sh tests/test-mbstoc32s-3.sh tests/test-mbstoc32s-4.sh tests/test-mbstoc32s.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: c32tob setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-mbstoc32s-1.sh test-mbstoc32s-2.sh test-mbstoc32s-3.sh test-mbstoc32s-4.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-mbstoc32s test_mbstoc32s_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbstok_r������������������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbstok_r() function: split string into tokens, thread safe. Files: lib/mbstok_r.c Depends-on: mbuiter string mbsspn mbspbrk strtok_r configure.ac: gl_STRING_MODULE_INDICATOR([mbstok_r]) Makefile.am: lib_SOURCES += mbstok_r.c Include: <string.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbswidth������������������������������������������������������������0000664�0000000�0000000�00000000674�14110572173�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the number of screen columns needed for a string. Files: lib/mbswidth.h lib/mbswidth.c m4/mbstate_t.m4 m4/mbrtowc.m4 m4/mbswidth.m4 Depends-on: wchar wctype-h mbrtowc mbsinit wcwidth extensions configure.ac: gl_MBSWIDTH Makefile.am: lib_SOURCES += mbswidth.h mbswidth.c Include: "mbswidth.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: GPL Maintainer: all ��������������������������������������������������������������������gnulib-20210822~d383792/modules/mbtowc��������������������������������������������������������������0000664�0000000�0000000�00000001017�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbtowc() function: convert multibyte character to wide character. Files: lib/mbtowc.c lib/mbtowc-impl.h m4/mbtowc.m4 Depends-on: stdlib mbrtowc [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1] wchar [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1] configure.ac: gl_FUNC_MBTOWC if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then AC_LIBOBJ([mbtowc]) gl_PREREQ_MBTOWC fi gl_STDLIB_MODULE_INDICATOR([mbtowc]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mbuiter�������������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterating through multibyte strings. Files: lib/mbuiter.h lib/mbuiter.c m4/mbiter.m4 m4/mbrtowc.m4 Depends-on: extern-inline mbchar mbrtowc mbsinit wchar stdbool strnlen1 configure.ac: gl_MBITER Makefile.am: lib_SOURCES += mbuiter.h mbuiter.c Include: "mbuiter.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memalign������������������������������������������������������������0000664�0000000�0000000�00000000536�14110572173�0017467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allocate memory with indefinite extent and specified alignment. Files: lib/memalign.c m4/memalign.m4 Depends-on: malloc-h configure.ac: gl_FUNC_MEMALIGN if test $REPLACE_MEMALIGN = 1; then AC_LIBOBJ([memalign]) fi gl_MALLOC_MODULE_INDICATOR([memalign]) Makefile.am: Include: #include <malloc.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memalign-tests������������������������������������������������������0000664�0000000�0000000�00000000224�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memalign.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-memalign check_PROGRAMS += test-memalign ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcasecmp����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0020004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-insensitive memory area comparison. Files: lib/memcasecmp.h lib/memcasecmp.c m4/memcasecmp.m4 Depends-on: configure.ac: gl_MEMCASECMP Makefile.am: lib_SOURCES += memcasecmp.c Include: "memcasecmp.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcasecmp-tests����������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0021147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memcasecmp.c tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-memcasecmp check_PROGRAMS += test-memcasecmp ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memchr��������������������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0017145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memchr() function: scan memory for a byte. Files: lib/memchr.c lib/memchr.valgrind m4/memchr.m4 m4/mmap-anon.m4 Depends-on: extensions string configure.ac: gl_FUNC_MEMCHR if test $REPLACE_MEMCHR = 1; then AC_LIBOBJ([memchr]) gl_PREREQ_MEMCHR fi gl_STRING_MODULE_INDICATOR([memchr]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Jim Meyering, glibc ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memchr-tests��������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0020304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memchr.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-memchr check_PROGRAMS += test-memchr ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memchr2�������������������������������������������������������������0000664�0000000�0000000�00000000435�14110572173�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memchr2() function: scan memory for the first of two bytes. Files: lib/memchr2.h lib/memchr2.c lib/memchr2.valgrind Depends-on: stdint memchr configure.ac: Makefile.am: lib_SOURCES += memchr2.h memchr2.c Include: "memchr2.h" License: LGPLv2+ Maintainer: Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memchr2-tests�������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memchr2.c tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-memchr2 check_PROGRAMS += test-memchr2 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcmp��������������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memcmp() function: compare memory areas. Status: obsolete Notice: This module is obsolete. Files: lib/memcmp.c m4/memcmp.m4 Depends-on: stdint [test $gl_func_memcmp = no] configure.ac: gl_FUNC_MEMCMP if test $gl_func_memcmp = no; then AC_LIBOBJ([memcmp]) gl_PREREQ_MEMCMP fi Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Jim Meyering, glibc �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcmp-tests��������������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memcmp.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-memcmp check_PROGRAMS += test-memcmp ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcmp2�������������������������������������������������������������0000664�0000000�0000000�00000000347�14110572173�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare two memory areas with possibly different lengths. Files: lib/memcmp2.h lib/memcmp2.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += memcmp2.c Include: "memcmp2.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcoll�������������������������������������������������������������0000664�0000000�0000000�00000000410�14110572173�0017315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent memory area comparison. Files: lib/memcoll.h lib/memcoll.c m4/memcoll.m4 Depends-on: memcmp configure.ac: gl_MEMCOLL Makefile.am: lib_SOURCES += memcoll.c Include: "memcoll.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcoll-tests�������������������������������������������������������0000664�0000000�0000000�00000000212�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memcoll.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-memcoll check_PROGRAMS += test-memcoll ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memcpy��������������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memcpy() function: copy memory area. Status: obsolete Notice: This module is obsolete. Files: lib/memcpy.c m4/memcpy.m4 Depends-on: string configure.ac: gl_FUNC_MEMCPY if test $ac_cv_func_memcpy = no; then AC_LIBOBJ([memcpy]) gl_PREREQ_MEMCPY fi Makefile.am: Include: <string.h> License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memmem��������������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memmem() function: efficiently locate first substring in a buffer. Files: lib/memmem.c Depends-on: memmem-simple configure.ac: gl_FUNC_MEMMEM if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then AC_LIBOBJ([memmem]) fi Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: libc, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memmem-simple�������������������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0020446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memmem() function: locate first substring in a buffer. Files: lib/str-two-way.h lib/memmem.c m4/memmem.m4 Depends-on: builtin-expect extensions string stdint memchr memcmp configure.ac: gl_FUNC_MEMMEM_SIMPLE if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then AC_LIBOBJ([memmem]) fi gl_STRING_MODULE_INDICATOR([memmem]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: libc, Eric Blake, Simon Josefsson �������������������������������������������������������������������gnulib-20210822~d383792/modules/memmem-tests��������������������������������������������������������0000664�0000000�0000000�00000000515�14110572173�0020310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memmem.c tests/signature.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-memmem check_PROGRAMS += test-memmem �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memmove�������������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memmove() function: copy memory area. Status: obsolete Notice: This module is obsolete. Files: lib/memmove.c m4/memmove.m4 Depends-on: string configure.ac: gl_FUNC_MEMMOVE if test $ac_cv_func_memmove = no; then AC_LIBOBJ([memmove]) gl_PREREQ_MEMMOVE fi Makefile.am: Include: <string.h> License: public domain Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mempcpy�������������������������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0017343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mempcpy() function: copy memory area, return pointer after last written byte. Files: lib/mempcpy.c m4/mempcpy.m4 Depends-on: extensions string configure.ac: gl_FUNC_MEMPCPY if test $HAVE_MEMPCPY = 0; then AC_LIBOBJ([mempcpy]) gl_PREREQ_MEMPCPY fi gl_STRING_MODULE_INDICATOR([mempcpy]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memrchr�������������������������������������������������������������0000664�0000000�0000000�00000000575�14110572173�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memrchr() function: scan memory for a byte, from the right end. Files: lib/memrchr.c m4/memrchr.m4 Depends-on: extensions string configure.ac: gl_FUNC_MEMRCHR if test $ac_cv_func_memrchr = no; then AC_LIBOBJ([memrchr]) gl_PREREQ_MEMRCHR fi gl_STRING_MODULE_INDICATOR([memrchr]) Makefile.am: Include: <string.h> License: LGPL Maintainer: Jim Meyering, glibc �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memrchr-tests�������������������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memrchr.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-memrchr check_PROGRAMS += test-memrchr ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memset��������������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memset() function: fill memory with a constant byte. Status: obsolete Notice: This module is obsolete. Files: lib/memset.c m4/memset.m4 Depends-on: string configure.ac: gl_FUNC_MEMSET if test $ac_cv_func_memset = no; then AC_LIBOBJ([memset]) gl_PREREQ_MEMSET fi Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/memxor��������������������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memxor() function: binary exclusive or operation on two memory blocks Files: lib/memxor.h lib/memxor.c m4/memxor.m4 Depends-on: configure.ac: gl_MEMXOR Makefile.am: lib_SOURCES += memxor.c Include: "memxor.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mgetgroups����������������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0020072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the group IDs of a user or current process in malloc'd storage. Files: lib/mgetgroups.c lib/mgetgroups.h m4/mgetgroups.m4 Depends-on: free-posix getgroups getugroups realloc-posix xalloc-oversized configure.ac: gl_MGETGROUPS Makefile.am: lib_SOURCES += mgetgroups.c Include: "mgetgroups.h" License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/minmax��������������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: MIN, MAX macros. Files: lib/minmax.h m4/minmax.m4 Depends-on: configure.ac: gl_MINMAX Makefile.am: lib_SOURCES += minmax.h Include: "minmax.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkancesdirs���������������������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0020174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure the existence of the ancestor directories of a file. Files: lib/mkancesdirs.c lib/mkancesdirs.h m4/mkancesdirs.m4 Depends-on: fcntl-h filename savewd stat-macros sys_stat configure.ac: gl_MKANCESDIRS Makefile.am: lib_SOURCES += mkancesdirs.c Include: "mkancesdirs.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkdir���������������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0016777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkdir() function: create a directory. Files: lib/mkdir.c m4/mkdir.m4 Depends-on: sys_stat dirname-lgpl [test $REPLACE_MKDIR = 1] stat [test $REPLACE_MKDIR = 1] configure.ac: gl_FUNC_MKDIR if test $REPLACE_MKDIR = 1; then AC_LIBOBJ([mkdir]) fi gl_SYS_STAT_MODULE_INDICATOR([mkdir]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkdir-p�������������������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure that a directory and its parents exist. Files: lib/dirchownmod.c lib/dirchownmod.h lib/mkdir-p.c lib/mkdir-p.h m4/mkdir-p.m4 Depends-on: error fcntl-h fstat gettext-h lchmod lchown mkancesdirs mkdir quote savewd stat stat-macros stdbool sys_stat configure.ac: gl_MKDIR_PARENTS Makefile.am: lib_SOURCES += dirchownmod.c mkdir-p.c Include: "mkdir-p.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������gnulib-20210822~d383792/modules/mkdir-tests���������������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mkdir.h tests/test-mkdir.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-mkdir check_PROGRAMS += test-mkdir ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkdirat�������������������������������������������������������������0000664�0000000�0000000�00000001456�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkdirat() function: Create a directory relative to a given directory. Files: lib/mkdirat.c lib/at-func.c m4/mkdirat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_MKDIRAT = 0] errno [test $HAVE_MKDIRAT = 0] fchdir [test $HAVE_MKDIRAT = 0] fcntl-h [test $HAVE_MKDIRAT = 0] filename [test $HAVE_MKDIRAT = 0] mkdir [test $HAVE_MKDIRAT = 0] openat-die [test $HAVE_MKDIRAT = 0] openat-h [test $HAVE_MKDIRAT = 0] save-cwd [test $HAVE_MKDIRAT = 0] unistd [test $HAVE_MKDIRAT = 0] configure.ac: gl_FUNC_MKDIRAT if test $HAVE_MKDIRAT = 0; then AC_LIBOBJ([mkdirat]) gl_PREREQ_MKDIRAT fi gl_SYS_STAT_MODULE_INDICATOR([mkdirat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkdirat-tests�������������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mkdirat.c tests/test-mkdir.h tests/signature.h tests/macros.h Depends-on: ignore-value symlink configure.ac: Makefile.am: TESTS += test-mkdirat check_PROGRAMS += test-mkdirat test_mkdirat_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkdtemp�������������������������������������������������������������0000664�0000000�0000000�00000000727�14110572173�0017341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkdtemp() function: create a private temporary directory. Files: lib/mkdtemp.c m4/mkdtemp.m4 Depends-on: stdlib stdint [test $HAVE_MKDTEMP = 0] tempname [test $HAVE_MKDTEMP = 0] configure.ac: gl_FUNC_MKDTEMP if test $HAVE_MKDTEMP = 0; then AC_LIBOBJ([mkdtemp]) gl_PREREQ_MKDTEMP fi gl_STDLIB_MODULE_INDICATOR([mkdtemp]) Makefile.am: Include: <stdlib.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: all �����������������������������������������gnulib-20210822~d383792/modules/mkfifo��������������������������������������������������������������0000664�0000000�0000000�00000000621�14110572173�0017144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkfifo() function: create named FIFO Files: lib/mkfifo.c m4/mkfifo.m4 Depends-on: sys_stat stat [test $HAVE_MKFIFO = 0 || test $REPLACE_MKFIFO = 1] configure.ac: gl_FUNC_MKFIFO if test $HAVE_MKFIFO = 0 || test $REPLACE_MKFIFO = 1; then AC_LIBOBJ([mkfifo]) fi gl_UNISTD_MODULE_INDICATOR([mkfifo]) Makefile.am: Include: <sys/stat.h> License: LGPL Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkfifo-tests��������������������������������������������������������0000664�0000000�0000000�00000000312�14110572173�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mkfifo.h tests/test-mkfifo.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-mkfifo check_PROGRAMS += test-mkfifo ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkfifoat������������������������������������������������������������0000664�0000000�0000000�00000002504�14110572173�0017473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkfifoat() function and mknodat() function: create named FIFOs relative to a directory Files: lib/mkfifoat.c lib/mknodat.c lib/at-func.c m4/mkfifoat.m4 Depends-on: sys_stat extensions fcntl-h [test $HAVE_MKFIFOAT = 0 || test $REPLACE_MKFIFOAT = 1 || test $HAVE_MKNODAT = 0 || test $REPLACE_MKNODAT = 1] fstatat [test $REPLACE_MKFIFOAT = 1 || test $REPLACE_MKNODAT = 1] at-internal [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] errno [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] fchdir [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] filename [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] openat-die [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] openat-h [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] save-cwd [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] mkfifo [test $HAVE_MKFIFOAT = 0] mknod [test $HAVE_MKNODAT = 0] configure.ac: gl_FUNC_MKFIFOAT if test $HAVE_MKFIFOAT = 0 || test $REPLACE_MKFIFOAT = 1; then AC_LIBOBJ([mkfifoat]) fi if test $HAVE_MKNODAT = 0 || test $REPLACE_MKNODAT = 1; then AC_LIBOBJ([mknodat]) fi gl_SYS_STAT_MODULE_INDICATOR([mkfifoat]) gl_SYS_STAT_MODULE_INDICATOR([mknodat]) Makefile.am: Include: <fcntl.h> <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkfifoat-tests������������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mkfifo.h tests/test-mkfifoat.c tests/signature.h tests/macros.h Depends-on: fstatat ignore-value symlink unlinkat configure.ac: Makefile.am: TESTS += test-mkfifoat check_PROGRAMS += test-mkfifoat test_mkfifoat_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mknod���������������������������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0017004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mknod() function: create various special devices Files: lib/mknod.c m4/mknod.m4 Depends-on: sys_stat extensions mkfifo [test $HAVE_MKNOD = 0 || test $REPLACE_MKNOD = 1] stat [test $HAVE_MKNOD = 0 || test $REPLACE_MKNOD = 1] configure.ac: gl_FUNC_MKNOD if test $HAVE_MKNOD = 0 || test $REPLACE_MKNOD = 1; then AC_LIBOBJ([mknod]) fi gl_UNISTD_MODULE_INDICATOR([mknod]) Makefile.am: Include: <sys/stat.h> License: LGPL Maintainer: Eric Blake �������������������������������gnulib-20210822~d383792/modules/mknod-tests���������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mkfifo.h tests/test-mknod.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-mknod check_PROGRAMS += test-mknod �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkostemp������������������������������������������������������������0000664�0000000�0000000�00000001015�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkostemp() function: create a private temporary file, with specific opening flags. Files: lib/mkostemp.c m4/mkostemp.m4 Depends-on: stdlib extensions largefile tempname [test $HAVE_MKOSTEMP = 0] configure.ac: gl_FUNC_MKOSTEMP if test $HAVE_MKOSTEMP = 0; then AC_LIBOBJ([mkostemp]) gl_PREREQ_MKOSTEMP fi gl_MODULE_INDICATOR([mkostemp]) gl_STDLIB_MODULE_INDICATOR([mkostemp]) Makefile.am: Include: <stdlib.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkostemps�����������������������������������������������������������0000664�0000000�0000000�00000001020�14110572173�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkostemps() function: create a private temporary file, with specific opening flags, and with suffix. Files: lib/mkostemps.c m4/mkostemps.m4 Depends-on: stdlib extensions largefile tempname [test $HAVE_MKOSTEMPS = 0] configure.ac: gl_FUNC_MKOSTEMPS if test $HAVE_MKOSTEMPS = 0; then AC_LIBOBJ([mkostemps]) fi gl_MODULE_INDICATOR([mkostemps]) gl_STDLIB_MODULE_INDICATOR([mkostemps]) Makefile.am: Include: <stdlib.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkstemp�������������������������������������������������������������0000664�0000000�0000000�00000001001�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkstemp() function: create a private temporary file. Files: lib/mkstemp.c m4/mkstemp.m4 Depends-on: stdlib extensions largefile tempname [test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1] configure.ac: gl_FUNC_MKSTEMP if test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1; then AC_LIBOBJ([mkstemp]) gl_PREREQ_MKSTEMP fi gl_STDLIB_MODULE_INDICATOR([mkstemp]) Makefile.am: Include: <stdlib.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mkstemps������������������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0017543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mkstemps() function: create a private temporary file, with suffix Files: lib/mkstemps.c m4/mkstemps.m4 Depends-on: stdlib extensions largefile tempname [test $HAVE_MKSTEMPS = 0] configure.ac: gl_FUNC_MKSTEMPS if test $HAVE_MKSTEMPS = 0; then AC_LIBOBJ([mkstemps]) fi gl_MODULE_INDICATOR([mkstemps]) gl_STDLIB_MODULE_INDICATOR([mkstemps]) Makefile.am: Include: <stdlib.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Eric Blake ���������������������������gnulib-20210822~d383792/modules/mktempd�������������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Create a temporary directory, much like mktemp -d does. Files: build-aux/mktempd Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mktime��������������������������������������������������������������0000664�0000000�0000000�00000001150�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mktime() function: convert broken-down time to linear time. Files: lib/mktime-internal.h lib/mktime.c m4/mktime.m4 Depends-on: time c99 multiarch intprops [test $REPLACE_MKTIME = 1] libc-config [test $REPLACE_MKTIME = 1] stdbool [test $REPLACE_MKTIME = 1] time_r [test $REPLACE_MKTIME = 1] verify [test $REPLACE_MKTIME = 1] configure.ac: gl_FUNC_MKTIME if test $REPLACE_MKTIME = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi gl_TIME_MODULE_INDICATOR([mktime]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mktime-internal�����������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mktime_internal() function: convert broken-down time to linear time. Files: lib/mktime-internal.h lib/mktime.c Depends-on: c99 mktime configure.ac: gl_FUNC_MKTIME_INTERNAL if test $WANT_MKTIME_INTERNAL = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi Makefile.am: Include: "mktime-internal.h" License: LGPLv2+ Maintainer: Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modechange����������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0017766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Manipulation of mode changes specified by strings (e.g. as first argument of chmod utility). Files: lib/modechange.h lib/modechange.c m4/modechange.m4 Depends-on: stat stat-macros stdbool sys_stat xalloc configure.ac: gl_MODECHANGE Makefile.am: lib_SOURCES += modechange.c Include: "modechange.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modf����������������������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0016617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modf() function: get signed integer and fractional parts. Files: lib/modf.c m4/modf.m4 m4/mathfunc.m4 Depends-on: math isfinite [test $REPLACE_MODF = 1] trunc [test $REPLACE_MODF = 1] isinf [test $REPLACE_MODF = 1] configure.ac: gl_FUNC_MODF if test $REPLACE_MODF = 1; then AC_LIBOBJ([modf]) fi gl_MATH_MODULE_INDICATOR([modf]) Makefile.am: Include: <math.h> Link: $(MODF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/modf-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modf() function according to ISO C 99 with IEC 60559. Files: m4/modf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: modf fpieee configure.ac: gl_FUNC_MODF_IEEE Makefile.am: Include: <math.h> Link: $(MODF_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modf-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modf-ieee.c tests/test-modf-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-modf-ieee check_PROGRAMS += test-modf-ieee test_modf_ieee_LDADD = $(LDADD) @MODF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modf-tests����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modf.c tests/test-modf.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-modf check_PROGRAMS += test-modf test_modf_SOURCES = test-modf.c randomd.c test_modf_LDADD = $(LDADD) @MODF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modff���������������������������������������������������������������0000664�0000000�0000000�00000000674�14110572173�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modff() function: get signed integer and fractional parts. Files: lib/modff.c m4/modff.m4 m4/mathfunc.m4 Depends-on: math extensions modf [test $HAVE_MODFF = 0 || test $REPLACE_MODFF = 1] configure.ac: gl_FUNC_MODFF if test $HAVE_MODFF = 0 || test $REPLACE_MODFF = 1; then AC_LIBOBJ([modff]) fi gl_MATH_MODULE_INDICATOR([modff]) Makefile.am: Include: <math.h> Link: $(MODFF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������gnulib-20210822~d383792/modules/modff-ieee����������������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modff() function according to ISO C 99 with IEC 60559. Files: m4/modff-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: modff fpieee modf-ieee [test $HAVE_MODFF = 0] configure.ac: gl_FUNC_MODFF_IEEE Makefile.am: Include: <math.h> Link: $(MODFF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modff-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modff-ieee.c tests/test-modf-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-modff-ieee check_PROGRAMS += test-modff-ieee test_modff_ieee_LDADD = $(LDADD) @MODFF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modff-tests���������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modff.c tests/test-modf.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-modff check_PROGRAMS += test-modff test_modff_SOURCES = test-modff.c randomf.c test_modff_LDADD = $(LDADD) @MODFF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modfl���������������������������������������������������������������0000664�0000000�0000000�00000001512�14110572173�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modfl() function: get signed integer and fractional parts. Files: lib/modfl.c m4/modfl.m4 m4/mathfunc.m4 Depends-on: math extensions modf [{ test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] isfinite [{ test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] truncl [{ test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isinf [{ test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_MODFL if test $HAVE_MODFL = 0 || test $REPLACE_MODFL = 1; then AC_LIBOBJ([modfl]) fi gl_MATH_MODULE_INDICATOR([modfl]) Makefile.am: Include: <math.h> Link: $(MODFL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modfl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modfl() function according to ISO C 99 with IEC 60559. Files: m4/modfl-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: modfl fpieee modf-ieee [test $HAVE_MODFL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_MODFL_IEEE Makefile.am: Include: <math.h> Link: $(MODFL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modfl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modfl-ieee.c tests/test-modf-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-modfl-ieee check_PROGRAMS += test-modfl-ieee test_modfl_ieee_LDADD = $(LDADD) @MODFL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/modfl-tests���������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modfl.c tests/test-modf.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-modfl check_PROGRAMS += test-modfl test_modfl_SOURCES = test-modfl.c randoml.c test_modfl_LDADD = $(LDADD) @MODFL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/monetary������������������������������������������������������������0000664�0000000�0000000�00000003173�14110572173�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A substitute <monetary.h>. Files: lib/monetary.in.h m4/monetary_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_MONETARY_H gl_MONETARY_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += $(MONETARY_H) # We need the following in order to create <monetary.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_MONETARY_H monetary.h: monetary.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_MONETARY_H''@|$(HAVE_MONETARY_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_MONETARY_H''@|$(NEXT_MONETARY_H)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's/@''GNULIB_STRFMON_L''@/$(GNULIB_STRFMON_L)/g' \ -e 's|@''HAVE_STRFMON_L''@|$(HAVE_STRFMON_L)|g' \ -e 's|@''REPLACE_STRFMON_L''@|$(REPLACE_STRFMON_L)|g' \ -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)' \ < $(srcdir)/monetary.in.h; \ } > $@-t && \ mv $@-t $@ else monetary.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += monetary.h monetary.h-t Include: #if HAVE_MONETARY_H <monetary.h> #endif License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/monetary-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-monetary-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-monetary-c++ check_PROGRAMS += test-monetary-c++ test_monetary_c___SOURCES = test-monetary-c++.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/monetary-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-monetary.c Depends-on: monetary-c++-tests configure.ac: Makefile.am: TESTS += test-monetary check_PROGRAMS += test-monetary �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mountlist�����������������������������������������������������������0000664�0000000�0000000�00000000660�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return list of mounted file systems. Files: lib/mountlist.h lib/mountlist.c m4/fstypename.m4 m4/mountlist.m4 Depends-on: fopen-gnu free-posix getline open unlocked-io-internal stdbool stdint strstr-simple xalloc configure.ac: gl_MOUNTLIST if test $gl_cv_list_mounted_fs = yes; then AC_LIBOBJ([mountlist]) gl_PREREQ_MOUNTLIST_EXTRA fi Makefile.am: Include: "mountlist.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mpsort��������������������������������������������������������������0000664�0000000�0000000�00000000347�14110572173�0017222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sort a vector of pointers to data. Files: lib/mpsort.h lib/mpsort.c m4/mpsort.m4 Depends-on: configure.ac: gl_MPSORT Makefile.am: lib_SOURCES += mpsort.c Include: "mpsort.h" License: GPL Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/msvc-inval����������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: invalid parameter handler for MSVC runtime libraries Files: lib/msvc-inval.h lib/msvc-inval.c m4/msvc-inval.m4 Depends-on: configure.ac: AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi Makefile.am: Include: #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/msvc-nothrow��������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wrappers that don't throw invalid parameter notifications with MSVC runtime libraries Files: lib/msvc-nothrow.h lib/msvc-nothrow.c m4/msvc-nothrow.m4 Depends-on: msvc-inval configure.ac: AC_REQUIRE([gl_MSVC_NOTHROW]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi gl_MODULE_INDICATOR([msvc-nothrow]) Makefile.am: Include: #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif License: LGPLv2+ Maintainer: all �����������������gnulib-20210822~d383792/modules/mtx�����������������������������������������������������������������0000664�0000000�0000000�00000000623�14110572173�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ISO C 11 mutex functions. Files: lib/mtx.c Depends-on: threads-h pthread_mutex_timedlock windows-mutex windows-recmutex windows-timedmutex windows-timedrecmutex configure.ac: AC_REQUIRE([gl_THREADS_H]) if test $HAVE_THREADS_H = 0; then AC_LIBOBJ([mtx]) fi gl_THREADS_MODULE_INDICATOR([mtx]) Makefile.am: Include: <threads.h> Link: $(LIBSTDTHREAD) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/mtx-tests�����������������������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0017640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-mtx.c tests/test-call_once.c tests/atomic-int-isoc.h tests/macros.h Depends-on: thrd lock stdint configure.ac: AC_CHECK_HEADERS_ONCE([semaphore.h]) AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-mtx test-call_once check_PROGRAMS += test-mtx test-call_once test_mtx_LDADD = $(LDADD) @LIBSTDTHREAD@ @LIBTHREAD@ test_call_once_LDADD = $(LDADD) @LIBSTDTHREAD@ ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/multiarch�����������������������������������������������������������0000664�0000000�0000000�00000000315�14110572173�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detection of multi-architecture ("universal binary") builds. Files: m4/multiarch.m4 Depends-on: configure.ac: gl_MULTIARCH Makefile.am: Include: License: unlimited Maintainer: autoconf �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nanosleep�����������������������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nanosleep() function: pause execution for a specified time. Files: lib/nanosleep.c m4/nanosleep.m4 Depends-on: time extensions multiarch intprops [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] select [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] sigaction [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] stdbool [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] sys_select [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] sys_time [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] verify [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1] configure.ac: gl_FUNC_NANOSLEEP if test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1; then AC_LIBOBJ([nanosleep]) gl_PREREQ_NANOSLEEP fi gl_TIME_MODULE_INDICATOR([nanosleep]) Makefile.am: Include: <time.h> Link: $(LIB_NANOSLEEP) License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������gnulib-20210822~d383792/modules/nanosleep-tests�����������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nanosleep.c tests/signature.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-nanosleep check_PROGRAMS += test-nanosleep test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/net_if��������������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0017131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <net/if.h> for systems lacking it. Files: lib/net_if.in.h m4/net_if_h.m4 Depends-on: include_next sys_socket configure.ac: gl_HEADER_NET_IF AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += $(NET_IF_H) # We need the following in order to create <net/if.h> when the system # doesn't have one. if GL_GENERATE_NET_IF_H net/if.h: net_if.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) net $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_NET_IF_H''@|$(NEXT_NET_IF_H)|g' \ -e 's|@''HAVE_NET_IF_H''@|$(HAVE_NET_IF_H)|g' \ < $(srcdir)/net_if.in.h; \ } > $@-t && \ mv $@-t $@ else net/if.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += net/if.h net/if.h-t MOSTLYCLEANDIRS += net Include: <net/if.h> License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/net_if-tests��������������������������������������������������������0000664�0000000�0000000�00000000755�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-net_if.c tests/signature.h Depends-on: configure.ac: NET_IF_LIB= gl_saved_libs="$LIBS" AC_SEARCH_LIBS([if_nameindex], [socket], [AC_DEFINE([HAVE_IF_NAMEINDEX], [1], [Define if you have if_nameindex.]) if test "$ac_cv_search_if_nameindex" != "none required"; then NET_IF_LIB="$ac_cv_search_if_nameindex" fi]) LIBS="$gl_saved_libs" AC_SUBST([NET_IF_LIB]) Makefile.am: TESTS += test-net_if check_PROGRAMS += test-net_if test_net_if_LDADD = $(LDADD) @NET_IF_LIB@ �������������������gnulib-20210822~d383792/modules/netdb���������������������������������������������������������������0000664�0000000�0000000�00000003462�14110572173�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <netdb.h> for systems lacking it. Files: lib/netdb.in.h m4/netdb_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_socket configure.ac: gl_NETDB_H gl_NETDB_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += netdb.h # We need the following in order to create <netdb.h> when the system # doesn't have one that works with the given compiler. netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \ -e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \ -e 's/@''GNULIB_GETADDRINFO''@/$(GNULIB_GETADDRINFO)/g' \ -e 's|@''HAVE_STRUCT_ADDRINFO''@|$(HAVE_STRUCT_ADDRINFO)|g' \ -e 's|@''HAVE_DECL_FREEADDRINFO''@|$(HAVE_DECL_FREEADDRINFO)|g' \ -e 's|@''HAVE_DECL_GAI_STRERROR''@|$(HAVE_DECL_GAI_STRERROR)|g' \ -e 's|@''HAVE_DECL_GETADDRINFO''@|$(HAVE_DECL_GETADDRINFO)|g' \ -e 's|@''HAVE_DECL_GETNAMEINFO''@|$(HAVE_DECL_GETNAMEINFO)|g' \ -e 's|@''REPLACE_GAI_STRERROR''@|$(REPLACE_GAI_STRERROR)|g' \ -e 's|@''REPLACE_GETADDRINFO''@|$(REPLACE_GETADDRINFO)|g' \ -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)' \ < $(srcdir)/netdb.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += netdb.h netdb.h-t Include: <netdb.h> License: LGPLv2+ Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/netdb-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-netdb-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-netdb-c++ check_PROGRAMS += test-netdb-c++ test_netdb_c___SOURCES = test-netdb-c++.cc test_netdb_c___LDADD = $(LDADD) $(GETADDRINFO_LIB) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/netdb-tests���������������������������������������������������������0000664�0000000�0000000�00000000205�14110572173�0020123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-netdb.c Depends-on: netdb-c++-tests configure.ac: Makefile.am: TESTS += test-netdb check_PROGRAMS += test-netdb �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/netinet_in����������������������������������������������������������0000664�0000000�0000000�00000002236�14110572173�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <netinet/in.h> for systems lacking it. Files: lib/netinet_in.in.h m4/netinet_in_h.m4 Depends-on: include_next sys_socket configure.ac: gl_HEADER_NETINET_IN AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += $(NETINET_IN_H) # We need the following in order to create <netinet/in.h> when the system # doesn't have one. if GL_GENERATE_NETINET_IN_H netinet/in.h: netinet_in.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) netinet $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ < $(srcdir)/netinet_in.in.h; \ } > $@-t && \ mv $@-t $@ else netinet/in.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t MOSTLYCLEANDIRS += netinet Include: <netinet/in.h> License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/netinet_in-tests����������������������������������������������������0000664�0000000�0000000�00000000204�14110572173�0021162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-netinet_in.c Depends-on: configure.ac: Makefile.am: TESTS += test-netinet_in check_PROGRAMS += test-netinet_in ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nextafter�����������������������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nextafter() function: next representable 'double' number. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_MATHFUNC([nextafter], [double], [(double, double)]) Makefile.am: Include: <math.h> Link: $(NEXTAFTER_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nextafter-tests�����������������������������������������������������0000664�0000000�0000000�00000000323�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nextafter.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-nextafter check_PROGRAMS += test-nextafter test_nextafter_LDADD = $(LDADD) @NEXTAFTER_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nl_langinfo���������������������������������������������������������0000664�0000000�0000000�00000001372�14110572173�0020163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nl_langinfo() function: query locale dependent information. Files: lib/nl_langinfo.c lib/nl_langinfo-lock.c lib/windows-initguard.h m4/nl_langinfo.m4 m4/threadlib.m4 m4/visibility.m4 Depends-on: langinfo localeconv [test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1] setlocale-null [test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0] configure.ac: gl_FUNC_NL_LANGINFO if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then AC_LIBOBJ([nl_langinfo]) fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then AC_LIBOBJ([nl_langinfo-lock]) gl_PREREQ_NL_LANGINFO_LOCK fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) Makefile.am: Include: <langinfo.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nl_langinfo-tests���������������������������������������������������0000664�0000000�0000000�00000001070�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nl_langinfo.sh tests/test-nl_langinfo.c tests/test-nl_langinfo-mt.c tests/signature.h tests/macros.h m4/locale-fr.m4 Depends-on: c-strcase setlocale thread nanosleep configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-nl_langinfo.sh test-nl_langinfo-mt TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-nl_langinfo test-nl_langinfo-mt test_nl_langinfo_LDADD = $(LDADD) $(LIB_SETLOCALE) test_nl_langinfo_mt_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBMULTITHREAD) $(LIB_NANOSLEEP) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/no-c++��������������������������������������������������������������0000664�0000000�0000000�00000000302�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Support for compiling in C mode when CC is set to a C++ compiler. Files: m4/no-c++.m4 Depends-on: configure.ac: gt_NO_CXX Makefile.am: Include: License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nocrash�������������������������������������������������������������0000664�0000000�0000000�00000000264�14110572173�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macro that avoids crashes in configure tests. Files: m4/nocrash.m4 Depends-on: configure.ac: Makefile.am: Include: License: unlimited Maintainer: Paolo Bonzini ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/non-recursive-gnulib-prefix-hack������������������������������������0000664�0000000�0000000�00000001317�14110572173�0024150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Adjust a gnulib-generated gnulib.mk file and configure script so that they are usable in a non-recursive make framework. Files: build-aux/prefix-gnulib-mk m4/non-recursive-gnulib-prefix-hack.m4 Depends-on: configure.ac: dnl Run our hack near the end, just before config.status creation. dnl It must happen late, i.e., after gl_LIBOBJS has been finalized. AC_CONFIG_COMMANDS_PRE([ dnl Note we can't currently pass $gl_source_base instead of 'lib', dnl because $gl_source_base is unset or the wrong value in the references dnl generated in m4/non-recursive-gnulib-prefix-hack.m4 gl_NON_RECURSIVE_GNULIB_PREFIX_HACK([lib]) ]) Makefile.am: Include: License: unlimited Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nonblocking���������������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read, set or clear the non-blocking file descriptor flag. Files: lib/nonblocking.h lib/nonblocking.c m4/nonblocking.m4 lib/stdio-read.c lib/stdio-write.c m4/asm-underscore.m4 Depends-on: fcntl-h ioctl msvc-nothrow stdbool stdio sys_socket unistd configure.ac: gl_NONBLOCKING_IO gl_FCNTL_MODULE_INDICATOR([nonblocking]) dnl Define the C macro GNULIB_NONBLOCKING to 1. gl_MODULE_INDICATOR([nonblocking]) dnl Define the substituted variable GNULIB_STDIO_H_NONBLOCKING to 1. gl_STDIO_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING], [1]) dnl Define the substituted variable GNULIB_UNISTD_H_NONBLOCKING to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING], [1]) Makefile.am: lib_SOURCES += nonblocking.c Include: "nonblocking.h" License: LGPLv2+ Maintainer: Eric Blake �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nonblocking-pipe-tests����������������������������������������������0000664�0000000�0000000�00000001152�14110572173�0022267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nonblocking-pipe.sh tests/test-nonblocking-pipe-main.c tests/test-nonblocking-pipe-child.c tests/test-nonblocking-pipe.h tests/test-nonblocking-writer.h tests/test-nonblocking-reader.h tests/test-nonblocking-misc.h tests/macros.h Depends-on: stdbool unistd nonblocking wait-process pipe-posix dup2 environ posix_spawnp binary-io gettimeofday snprintf vsnprintf strerror ssize_t usleep read write configure.ac: Makefile.am: TESTS += test-nonblocking-pipe.sh check_PROGRAMS += test-nonblocking-pipe-main test-nonblocking-pipe-child test_nonblocking_pipe_main_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nonblocking-socket-tests��������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0022626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nonblocking-socket.sh tests/test-nonblocking-socket-main.c tests/test-nonblocking-socket-child.c tests/test-nonblocking-socket.h tests/test-nonblocking-writer.h tests/test-nonblocking-reader.h tests/test-nonblocking-misc.h tests/socket-server.h tests/socket-client.h tests/macros.h Depends-on: stdbool unistd sys_socket nonblocking wait-process environ posix_spawnp netinet_in arpa_inet socket setsockopt bind getsockname listen accept getsockopt connect gettimeofday snprintf vsnprintf strerror ssize_t usleep read write configure.ac: Makefile.am: TESTS += test-nonblocking-socket.sh check_PROGRAMS += test-nonblocking-socket-main test-nonblocking-socket-child test_nonblocking_socket_main_LDADD = $(LDADD) $(LIBSOCKET) @LIBINTL@ $(LIBTHREAD) test_nonblocking_socket_child_LDADD = $(LDADD) $(LIBSOCKET) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nonblocking-tests���������������������������������������������������0000664�0000000�0000000�00000000424�14110572173�0021335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nonblocking.c tests/macros.h Depends-on: close getdtablesize pipe-posix nonblocking-pipe-tests nonblocking-socket-tests configure.ac: Makefile.am: TESTS += test-nonblocking check_PROGRAMS += test-nonblocking test_nonblocking_LDADD = $(LDADD) $(LIBSOCKET) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/noreturn������������������������������������������������������������0000664�0000000�0000000�00000000302�14110572173�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros for declaring functions as non-returning. Files: lib/noreturn.h Depends-on: configure.ac: Makefile.am: Include: <noreturn.h> License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/noreturn-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0021256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-noreturn-c++.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-noreturn-c++ check_PROGRAMS += test-noreturn-c++ test_noreturn_c___SOURCES = test-noreturn-c++.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/noreturn-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-noreturn.c Depends-on: noreturn-c++-tests configure.ac: Makefile.am: TESTS += test-noreturn check_PROGRAMS += test-noreturn �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nproc���������������������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0017012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detect the number of processors Files: lib/nproc.h lib/nproc.c m4/nproc.m4 Depends-on: c-ctype extensions minmax unistd configure.ac: gl_NPROC Makefile.am: lib_SOURCES += nproc.c Include: "nproc.h" License: LGPLv2+ Maintainer: Glen Lenker and Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nstrftime�����������������������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nstrftime() function: convert date and time to string, with GNU extensions. Files: lib/strftime.h lib/nstrftime.c m4/tm_gmtoff.m4 m4/nstrftime.m4 Depends-on: attribute c99 errno extensions intprops stdbool time_rz configure.ac: gl_FUNC_GNU_STRFTIME Makefile.am: lib_SOURCES += nstrftime.c Include: "strftime.h" License: LGPL Maintainer: Jim Meyering, glibc ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/nstrftime-tests�����������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nstrftime.c tests/macros.h Depends-on: atoll c99 intprops strerror configure.ac: Makefile.am: TESTS += test-nstrftime check_PROGRAMS += test-nstrftime ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/obstack�������������������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation, optimized for stack-like allocation patterns. Files: lib/obstack.h lib/obstack.c m4/obstack.m4 Depends-on: alignof gettext-h exitfail stdint stdlib configure.ac: AC_FUNC_OBSTACK dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]). Makefile.am: Include: "obstack.h" License: LGPL Maintainer: all, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/obstack-printf������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted printing into an obstack. Files: m4/obstack-printf.m4 lib/obstack_printf.c Depends-on: obstack stdio vasnprintf extensions configure.ac: gl_FUNC_OBSTACK_PRINTF if test $ac_cv_func_obstack_printf = no || test $REPLACE_OBSTACK_PRINTF = 1; then AC_LIBOBJ([obstack_printf]) fi gl_STDIO_MODULE_INDICATOR([obstack-printf]) Makefile.am: Include: <stdio.h> License: GPL Maintainer: Eric Blake �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/obstack-printf-posix������������������������������������������������0000664�0000000�0000000�00000001352�14110572173�0021761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX formatted printing into an obstack. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/obstack-printf.m4 m4/obstack-printf-posix.m4 m4/math_h.m4 lib/obstack_printf.c Depends-on: obstack stdio vasnprintf-posix extensions configure.ac: gl_FUNC_OBSTACK_PRINTF_POSIX if test $ac_cv_func_obstack_printf = no || test $REPLACE_OBSTACK_PRINTF = 1; then AC_LIBOBJ([obstack_printf]) fi gl_STDIO_MODULE_INDICATOR([obstack-printf-posix]) Makefile.am: Include: <stdio.h> License: GPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/obstack-printf-posix-tests������������������������������������������0000664�0000000�0000000�00000000106�14110572173�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: obstack-printf-tests configure.ac: Makefile.am: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/obstack-printf-tests������������������������������������������������0000664�0000000�0000000�00000000347�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-obstack-printf.c tests/signature.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-obstack-printf check_PROGRAMS += test-obstack-printf test_obstack_printf_LDADD = $(LDADD) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/omap����������������������������������������������������������������0000664�0000000�0000000�00000000355�14110572173�0016631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered map data type. Files: lib/gl_omap.h lib/gl_omap.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += gl_omap.h gl_omap.c Include: "gl_omap.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/omap-c++������������������������������������������������������������0000664�0000000�0000000�00000000271�14110572173�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered map data type as a C++ class. Files: lib/gl_omap.hh Depends-on: xomap configure.ac: Makefile.am: Include: "gl_omap.hh" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/omap-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-omap-c++.cc tests/macros.h Depends-on: ansi-c++-opt array-omap configure.ac: Makefile.am: if ANSICXX TESTS += test-omap-c++ check_PROGRAMS += test-omap-c++ test_omap_c___SOURCES = test-omap-c++.cc test_omap_c___LDADD = $(LDADD) @LIBINTL@ endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/open����������������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: open() function: open a descriptor to a file. Files: lib/open.c m4/open.m4 m4/open-cloexec.m4 m4/open-slash.m4 m4/mode_t.m4 Depends-on: fcntl-h largefile cloexec [test $REPLACE_OPEN = 1] fstat [test $REPLACE_OPEN = 1] stat [test $REPLACE_OPEN = 1] configure.ac: gl_FUNC_OPEN if test $REPLACE_OPEN = 1; then AC_LIBOBJ([open]) gl_PREREQ_OPEN fi gl_FCNTL_MODULE_INDICATOR([open]) Makefile.am: Include: <fcntl.h> License: LGPLv2+ Maintainer: all �����������������gnulib-20210822~d383792/modules/open-tests����������������������������������������������������������0000664�0000000�0000000�00000000273�14110572173�0017775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-open.h tests/test-open.c tests/signature.h tests/macros.h Depends-on: stdbool fcntl symlink configure.ac: Makefile.am: TESTS += test-open check_PROGRAMS += test-open �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat��������������������������������������������������������������0000664�0000000�0000000�00000002040�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: openat() function: Open a file at a directory. Files: lib/openat.c m4/openat.m4 m4/open-cloexec.m4 m4/lstat.m4 m4/mode_t.m4 Depends-on: fcntl-h extensions largefile openat-h [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1] stdbool [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1] sys_stat [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1] cloexec [test $REPLACE_OPENAT = 1] fstat [test $REPLACE_OPENAT = 1] at-internal [test $HAVE_OPENAT = 0] errno [test $HAVE_OPENAT = 0] fchdir [test $HAVE_OPENAT = 0] filename [test $HAVE_OPENAT = 0] open [test $HAVE_OPENAT = 0] openat-die [test $HAVE_OPENAT = 0] save-cwd [test $HAVE_OPENAT = 0] configure.ac: gl_FUNC_OPENAT if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then AC_LIBOBJ([openat]) gl_PREREQ_OPENAT fi gl_MODULE_INDICATOR([openat]) dnl for lib/getcwd.c gl_FCNTL_MODULE_INDICATOR([openat]) Makefile.am: Include: <fcntl.h> License: GPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat-die����������������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Report a save- or restore-cwd failure in our openat replacement and then exit. Files: lib/openat-die.c Depends-on: openat-h error exitfail gettext-h snippet/_Noreturn configure.ac: Makefile.am: lib_SOURCES += openat-die.c Include: "openat.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat-h������������������������������������������������������������0000664�0000000�0000000�00000000421�14110572173�0017402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Declarations of functions related to accessing files relative to a directory. Files: lib/openat.h Depends-on: extern-inline fcntl-h stdbool sys_stat unistd configure.ac: Makefile.am: Include: "openat.h" License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat-safer��������������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: openat function that avoids clobbering std{in,out,err}. Files: lib/fcntl--.h lib/fcntl-safer.h lib/openat-safer.c m4/fcntl-safer.m4 Depends-on: fcntl-safer openat unistd-safer configure.ac: gl_OPENAT_SAFER gl_MODULE_INDICATOR([openat-safer]) Makefile.am: lib_SOURCES += openat-safer.c Include: "fcntl-safer.h" License: GPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat-safer-tests��������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0021415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-openat-safer.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-openat-safer check_PROGRAMS += test-openat-safer test_openat_safer_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openat-tests��������������������������������������������������������0000664�0000000�0000000�00000000340�14110572173�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-openat.c tests/test-open.h tests/signature.h tests/macros.h Depends-on: fcntl symlink configure.ac: Makefile.am: TESTS += test-openat check_PROGRAMS += test-openat test_openat_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/opendir�������������������������������������������������������������0000664�0000000�0000000�00000001233�14110572173�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: opendir() function: start reading the entries of a directory Files: lib/opendir.c lib/dirent-private.h m4/opendir.m4 Depends-on: dirent largefile filename [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1] unistd [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1] closedir [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1] dirfd [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1] configure.ac: gl_FUNC_OPENDIR if test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1; then AC_LIBOBJ([opendir]) fi gl_DIRENT_MODULE_INDICATOR([opendir]) Makefile.am: Include: <dirent.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/opendirat�����������������������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Open a directory relative to another directory. Files: lib/opendirat.c lib/opendirat.h Depends-on: c99 dirent fcntl-h fdopendir openat-safer configure.ac: Makefile.am: lib_SOURCES += opendirat.c Include: "opendirat.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openmp��������������������������������������������������������������0000664�0000000�0000000�00000000320�14110572173�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detection of OpenMP support. Files: Depends-on: configure.ac: AC_OPENMP Makefile.am: Include: #ifdef _OPENMP # include <omp.h> #endif Link: $(OPENMP_CFLAGS) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openmp-init���������������������������������������������������������0000664�0000000�0000000�00000001765�14110572173�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Initialization of OpenMP support. Files: lib/omp.in.h lib/omp-init.c m4/omp_h.m4 Depends-on: include_next c-ctype setenv configure.ac: gl_OMP_H Makefile.am: BUILT_SOURCES += omp.h # We need the following in order to create <omp.h> when the system # doesn't have one that works with the given compiler. omp.h: omp.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_OMP_H''@|$(NEXT_OMP_H)|g' \ < $(srcdir)/omp.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += omp.h omp.h-t lib_SOURCES += omp-init.c Include: #ifdef _OPENMP # include <omp.h> #endif License: LGPL Maintainer: all �����������gnulib-20210822~d383792/modules/openpty�������������������������������������������������������������0000664�0000000�0000000�00000001101�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: openpty() function: Open a pseudo-terminal. Files: lib/openpty.c m4/pty.m4 Depends-on: pty extensions fcntl-h [test $HAVE_OPENPTY = 0 || test $REPLACE_OPENPTY = 1] posix_openpt [test $HAVE_OPENPTY = 0 || test $REPLACE_OPENPTY = 1] ioctl [test $HAVE_OPENPTY = 0 || test $REPLACE_OPENPTY = 1] configure.ac: gl_FUNC_OPENPTY if test $HAVE_OPENPTY = 0 || test $REPLACE_OPENPTY = 1; then AC_LIBOBJ([openpty]) fi gl_PTY_MODULE_INDICATOR([openpty]) Makefile.am: Include: <pty.h> Link: $(PTY_LIB) License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/openpty-tests�������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0020533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-openpty.c tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-openpty check_PROGRAMS += test-openpty test_openpty_LDADD = $(LDADD) @PTY_LIB@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/oset����������������������������������������������������������������0000664�0000000�0000000�00000000355�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered set data type. Files: lib/gl_oset.h lib/gl_oset.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += gl_oset.h gl_oset.c Include: "gl_oset.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/oset-c++������������������������������������������������������������0000664�0000000�0000000�00000000271�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered set data type as a C++ class. Files: lib/gl_oset.hh Depends-on: xoset configure.ac: Makefile.am: Include: "gl_oset.hh" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/oset-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-oset-c++.cc tests/macros.h Depends-on: ansi-c++-opt array-oset configure.ac: Makefile.am: if ANSICXX TESTS += test-oset-c++ check_PROGRAMS += test-oset-c++ test_oset_c___SOURCES = test-oset-c++.cc test_oset_c___LDADD = $(LDADD) @LIBINTL@ endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pagealign_alloc�����������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation aligned on page boundaries. Files: lib/pagealign_alloc.h lib/pagealign_alloc.c m4/mmap-anon.m4 m4/pagealign_alloc.m4 Depends-on: error extensions getpagesize gettext-h open stdlib xalloc unistd configure.ac: gl_PAGEALIGN_ALLOC Makefile.am: lib_SOURCES += pagealign_alloc.c Include: "pagealign_alloc.h" License: GPL Maintainer: bug-gnulib@gnu.org ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/parse-datetime������������������������������������������������������0000664�0000000�0000000�00000005633�14110572173�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a date/time string to linear time. Files: doc/parse-datetime.texi lib/parse-datetime.h lib/parse-datetime.y m4/tm_gmtoff.m4 m4/parse-datetime.m4 Depends-on: bison c99 c-ctype stdbool gettime gettext-h idx intprops inttypes mktime nstrftime setenv unsetenv time time_r time_rz timegm verify configure.ac: gl_PARSE_DATETIME Makefile.am: # The Automake generated .y.c rule is broken: When executed in a VPATH build, # - The .c file gets generated in the build directory. But since it requires # special tools to rebuild it, we need to distribute it in the tarballs, # and by the GNU Coding Standards # <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html> # the file should be generated in the source directory. # - The #line directives in the .c file refer to a nonexistent file once it # has been moved from the build directory to the source directory. This # leads to error if 'lcov' is used later. # Additionally, here we assume GNU Bison and therefore don't need the ylwrap # script. # Therefore we override this rule. # Since this is a rule that produces multiple files, we apply the idiom from # <https://lists.gnu.org/archive/html/bug-make/2020-09/msg00008.html>, so that # it works also in parallel 'make'. generate-parse-datetime: $(AM_V_YACC)$(PARSE_DATETIME_BISON) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/parse-datetime.y \ && test ':' = '$(PARSE_DATETIME_BISON)' || { \ sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.c"|"parse-datetime.c"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.c > parse-datetime.c-tmp \ && sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.h > parse-datetime-gen.h-tmp \ && rm -f parse-datetime.tab.c parse-datetime.tab.h \ && mv parse-datetime.c-tmp $(srcdir)/parse-datetime.c \ && mv parse-datetime-gen.h-tmp $(srcdir)/parse-datetime-gen.h; \ } .PHONY: generate-parse-datetime # The above rule will generate files with time stamp order # parse-datetime.y <= parse-datetime.c <= parse-datetime-gen.h. parse-datetime.c: parse-datetime.y @{ test -f $(srcdir)/parse-datetime.c && test ! $(srcdir)/parse-datetime.c -ot $(srcdir)/parse-datetime.y; } || $(MAKE) generate-parse-datetime parse-datetime-gen.h: parse-datetime.c @{ test -f $(srcdir)/parse-datetime-gen.h && test ! $(srcdir)/parse-datetime-gen.h -ot $(srcdir)/parse-datetime.c; } || $(MAKE) generate-parse-datetime lib_SOURCES += parse-datetime.y BUILT_SOURCES += parse-datetime.c parse-datetime-gen.h MOSTLYCLEANFILES += parse-datetime.tab.c parse-datetime.tab.h parse-datetime.c-tmp parse-datetime-gen.h-tmp MAINTAINERCLEANFILES += parse-datetime.c parse-datetime-gen.h EXTRA_DIST += parse-datetime.c parse-datetime-gen.h Include: "parse-datetime.h" License: LGPLv2+ Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/parse-datetime-tests������������������������������������������������0000664�0000000�0000000�00000000352�14110572173�0021736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-parse-datetime.c tests/macros.h Depends-on: setenv configure.ac: Makefile.am: TESTS += test-parse-datetime check_PROGRAMS += test-parse-datetime test_parse_datetime_LDADD = $(LDADD) @LIBINTL@ $(LIB_CLOCK_GETTIME) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/parse-datetime2�����������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a date/time string to linear time, with debugging. Files: Depends-on: parse-datetime configure.ac: AC_DEFINE([GNULIB_PARSE_DATETIME2], [1], [Define to support parse_datetime2.]) Makefile.am: Include: "parse-datetime.h" License: LGPLv2+ Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/parse-duration������������������������������������������������������0000664�0000000�0000000�00000000373�14110572173�0020632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parse a duration given as string. Files: lib/parse-duration.h lib/parse-duration.c Depends-on: intprops configure.ac: Makefile.am: lib_SOURCES += parse-duration.c Include: "parse-duration.h" License: LGPLv2+ Maintainer: Bruce Korb ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/parse-duration-tests������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-parse-duration.sh tests/test-parse-duration.c Depends-on: strdup strerror configure.ac: Makefile.am: TESTS += test-parse-duration.sh check_PROGRAMS += test-parse-duration test_parse_duration_LDADD = $(LDADD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/passfd��������������������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Pass file descriptors along Unix domain sockets Files: lib/passfd.h lib/passfd.c m4/passfd.m4 Depends-on: cloexec sys_socket socketlib configure.ac: gl_PASSFD Makefile.am: lib_SOURCES += passfd.c Include: "passfd.h" Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Bastien ROUCARIÈS Local Variables: coding: utf-8 End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/passfd-tests��������������������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-passfd.c tests/macros.h Depends-on: sys_wait configure.ac: AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_FUNCS_ONCE([socketpair]) Makefile.am: TESTS += test-passfd check_PROGRAMS += test-passfd test_passfd_LDADD = $(LDADD) @LIBSOCKET@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pathmax�������������������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return maximum size of reasonable pathnames. (Unportable: Hurd has no limit.) Files: lib/pathmax.h m4/pathmax.m4 Depends-on: unistd configure.ac: gl_PATHMAX Makefile.am: Include: "pathmax.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pathmax-tests�������������������������������������������������������0000664�0000000�0000000�00000000173�14110572173�0020475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pathmax.c Depends-on: configure.ac: Makefile.am: TESTS += test-pathmax check_PROGRAMS += test-pathmax �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pclose��������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pclose() function: close a stream to a shell command. Files: lib/pclose.c m4/pclose.m4 Depends-on: stdio configure.ac: gl_FUNC_PCLOSE if test $HAVE_PCLOSE = 0; then AC_LIBOBJ([pclose]) gl_PREREQ_PCLOSE fi gl_STDIO_MODULE_INDICATOR([pclose]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pclose-tests��������������������������������������������������������0000664�0000000�0000000�00000000075�14110572173�0020321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: popen-tests configure.ac: Makefile.am: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/perl����������������������������������������������������������������0000664�0000000�0000000�00000000247�14110572173�0016637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a new-enough version of Perl. Files: m4/perl.m4 Depends-on: configure.ac: gl_PERL Makefile.am: Include: License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/perror��������������������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: perror() function: print a message describing error code. Files: lib/perror.c m4/perror.m4 Depends-on: stdio errno [test $REPLACE_PERROR = 1] strerror-override [test $REPLACE_PERROR = 1] strerror_r-posix [test $REPLACE_PERROR = 1] configure.ac: gl_FUNC_PERROR if test $REPLACE_PERROR = 1; then AC_LIBOBJ([perror]) fi gl_STRING_MODULE_INDICATOR([perror]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/perror-tests��������������������������������������������������������0000664�0000000�0000000�00000000412�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/signature.h tests/test-perror.c tests/test-perror2.c tests/test-perror.sh Depends-on: dup2 ftruncate strerror test-framework-sh configure.ac: Makefile.am: TESTS += test-perror.sh test-perror2 check_PROGRAMS += test-perror test-perror2 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/physmem�������������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0017355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return amount of total/available physical memory. Files: lib/physmem.h lib/physmem.c m4/physmem.m4 Depends-on: unistd configure.ac: gl_PHYSMEM Makefile.am: lib_SOURCES += physmem.c Include: "physmem.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe-filter-gi������������������������������������������������������0000664�0000000�0000000�00000000731�14110572173�0020510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Filtering of data through a subprocess. Files: lib/pipe-filter.h lib/pipe-filter-gi.c lib/pipe-filter-aux.h lib/pipe-filter-aux.c Depends-on: spawn-pipe wait-process error extern-inline fcntl-h free-posix gettext-h stdbool stdint stdlib sys_select unistd xalloc configure.ac: AC_CHECK_FUNCS_ONCE([select]) Makefile.am: lib_SOURCES += pipe-filter-gi.c pipe-filter-aux.c Include: "pipe-filter.h" Link: $(LIBTHREAD) License: GPL Maintainer: Paolo Bonzini ���������������������������������������gnulib-20210822~d383792/modules/pipe-filter-gi-tests������������������������������������������������0000664�0000000�0000000�00000001076�14110572173�0021653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pipe-filter-gi1.sh tests/test-pipe-filter-gi1.c tests/test-vasnprintf-posix.c tests/test-pipe-filter-gi2.sh tests/test-pipe-filter-gi2-main.c tests/test-pipe-filter-gi2-child.c tests/macros.h Depends-on: binary-io c-ctype read-file full-write usleep configure.ac: Makefile.am: TESTS += test-pipe-filter-gi1.sh test-pipe-filter-gi2.sh check_PROGRAMS += test-pipe-filter-gi1 test-pipe-filter-gi2-main test-pipe-filter-gi2-child test_pipe_filter_gi1_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) test_pipe_filter_gi2_main_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe-filter-ii������������������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Filtering of data through a subprocess. Files: lib/pipe-filter.h lib/pipe-filter-ii.c lib/pipe-filter-aux.h lib/pipe-filter-aux.c Depends-on: spawn-pipe wait-process error extern-inline fcntl-h gettext-h stdbool stdint stdlib sys_select unistd configure.ac: AC_CHECK_FUNCS_ONCE([select]) Makefile.am: lib_SOURCES += pipe-filter-ii.c pipe-filter-aux.c Include: "pipe-filter.h" Link: $(LIBTHREAD) License: GPL Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe-filter-ii-tests������������������������������������������������0000664�0000000�0000000�00000001067�14110572173�0021655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pipe-filter-ii1.sh tests/test-pipe-filter-ii1.c tests/test-vasnprintf-posix.c tests/test-pipe-filter-ii2.sh tests/test-pipe-filter-ii2-main.c tests/test-pipe-filter-ii2-child.c tests/macros.h Depends-on: binary-io c-ctype read-file full-write configure.ac: Makefile.am: TESTS += test-pipe-filter-ii1.sh test-pipe-filter-ii2.sh check_PROGRAMS += test-pipe-filter-ii1 test-pipe-filter-ii2-main test-pipe-filter-ii2-child test_pipe_filter_ii1_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) test_pipe_filter_ii2_main_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe-posix����������������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pipe() function: Creation of a pipe. Files: lib/pipe.c m4/pipe.m4 Depends-on: unistd configure.ac: gl_FUNC_PIPE if test $HAVE_PIPE = 0; then AC_LIBOBJ([pipe]) fi gl_UNISTD_MODULE_INDICATOR([pipe]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe-posix-tests����������������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0021127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pipe.c tests/signature.h tests/macros.h Depends-on: stdbool binary-io msvc-nothrow configure.ac: Makefile.am: TESTS += test-pipe check_PROGRAMS += test-pipe ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe2���������������������������������������������������������������0000664�0000000�0000000�00000000510�14110572173�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pipe2() function: create a pipe, with specific opening flags. Files: lib/pipe2.c m4/pipe2.m4 Depends-on: unistd fcntl-h binary-io extensions verify configure.ac: gl_FUNC_PIPE2 gl_UNISTD_MODULE_INDICATOR([pipe2]) Makefile.am: lib_SOURCES += pipe2.c Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe2-safer���������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pipe2_safer() function: create a pipe, with specific opening flags, without clobbering std{in,out,err}. Files: lib/pipe2-safer.c Depends-on: fd-safer-flag pipe2 unistd-safer configure.ac: gl_MODULE_INDICATOR([pipe2-safer]) Makefile.am: lib_SOURCES += pipe2-safer.c Include: "unistd-safer.h" License: GPL Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pipe2-tests���������������������������������������������������������0000664�0000000�0000000�00000000324�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pipe2.c tests/signature.h tests/macros.h Depends-on: stdbool msvc-nothrow configure.ac: Makefile.am: TESTS += test-pipe2 check_PROGRAMS += test-pipe2 test_pipe2_LDADD = $(LDADD) $(LIBSOCKET) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pmccabe2html��������������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Produce fancy cyclomatic code complexity charts, using pmccabe. See <https://people.debian.org/~bame/pmccabe/>. Files: build-aux/pmccabe2html build-aux/pmccabe.css Depends-on: configure.ac: AC_PATH_PROG([PMCCABE], [pmccabe], [false]) Makefile.am: Include: License: GPLed build tool Maintainer: gnupdf and Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/poll����������������������������������������������������������������0000664�0000000�0000000�00000001722�14110572173�0016642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: poll() function: wait for some event on a set of file descriptors. Files: lib/poll.c m4/poll.m4 Depends-on: poll-h alloca [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] assure [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] select [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] sockets [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] sys_select [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] sys_socket [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] sys_time [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] errno [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] msvc-nothrow [test $HAVE_POLL = 0 || test $REPLACE_POLL = 1] configure.ac: gl_FUNC_POLL if test $HAVE_POLL = 0 || test $REPLACE_POLL = 1; then AC_LIBOBJ([poll]) gl_PREREQ_POLL fi gl_POLL_MODULE_INDICATOR([poll]) Makefile.am: Include: <poll.h> Link: $(LIB_POLL) License: LGPLv2+ Maintainer: Paolo Bonzini <bonzini@gnu.org> ����������������������������������������������gnulib-20210822~d383792/modules/poll-h��������������������������������������������������������������0000664�0000000�0000000�00000002505�14110572173�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <poll.h>. Files: lib/poll.in.h m4/poll_h.m4 m4/sys_socket_h.m4 Depends-on: extensions include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_POLL_H gl_POLL_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += poll.h # We need the following in order to create <poll.h> when the system # doesn't have one. poll.h: poll.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_POLL_H''@|$(HAVE_POLL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_POLL_H''@|$(NEXT_POLL_H)|g' \ -e 's/@''GNULIB_POLL''@/$(GNULIB_POLL)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_POLL''@|$(HAVE_POLL)|g' \ -e 's|@''REPLACE_POLL''@|$(REPLACE_POLL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/poll.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += poll.h poll.h-t Include: <poll.h> License: LGPLv2+ Maintainer: Paolo Bonzini �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/poll-h-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-poll-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-poll-h-c++ check_PROGRAMS += test-poll-h-c++ test_poll_h_c___SOURCES = test-poll-h-c++.cc test_poll_h_c___LDADD = $(LDADD) $(LIB_POLL) endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/poll-h-tests��������������������������������������������������������0000664�0000000�0000000�00000000211�14110572173�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-poll-h.c Depends-on: poll-h-c++-tests configure.ac: Makefile.am: TESTS += test-poll-h check_PROGRAMS += test-poll-h ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/poll-tests����������������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0020000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-poll.c tests/signature.h tests/macros.h Depends-on: stdbool sys_socket netinet_in arpa_inet sys_ioctl extensions inet_pton errno perror sockets socket bind setsockopt listen connect accept ioctl close configure.ac: AC_CHECK_HEADERS_ONCE([unistd.h sys/wait.h]) Makefile.am: TESTS += test-poll check_PROGRAMS += test-poll test_poll_LDADD = $(LDADD) $(LIB_POLL) @LIBSOCKET@ $(INET_PTON_LIB) �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/popen���������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: popen() function: open a stream to a shell command. Files: lib/popen.c m4/popen.m4 Depends-on: stdio open [test $HAVE_POPEN = 0 || test $REPLACE_POPEN = 1] configure.ac: gl_FUNC_POPEN if test $HAVE_POPEN = 0 || test $REPLACE_POPEN = 1; then AC_LIBOBJ([popen]) gl_PREREQ_POPEN fi gl_STDIO_MODULE_INDICATOR([popen]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Eric Blake ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/popen-safer���������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0020104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: popen function that avoids clobbering std{in,out,err}. Files: lib/stdio--.h lib/stdio-safer.h lib/popen-safer.c Depends-on: open popen unistd-safer configure.ac: gl_MODULE_INDICATOR([popen-safer]) Makefile.am: lib_SOURCES += popen-safer.c Include: "stdio-safer.h" License: GPL Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/popen-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0021255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-popen.h tests/test-popen-safer.c tests/test-popen-safer2.c tests/macros.h Depends-on: dup2 pclose sys_wait configure.ac: Makefile.am: TESTS += test-popen-safer test-popen-safer2 check_PROGRAMS += test-popen-safer test-popen-safer2 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/popen-tests���������������������������������������������������������0000664�0000000�0000000�00000000276�14110572173�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-popen.h tests/test-popen.c tests/signature.h tests/macros.h Depends-on: dup2 pclose sys_wait configure.ac: Makefile.am: TESTS += test-popen check_PROGRAMS += test-popen ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix-shell���������������������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a POSIX-conforming shell. Files: m4/posix-shell.m4 Depends-on: configure.ac: gl_POSIX_SHELL Makefile.am: ##Sample usage of posix-shell module: #script: script.in # rm -f $@-t $@ # sed -e 's#@''PREFERABLY_POSIX_SHELL''@#$(PREFERABLY_POSIX_SHELL)#g' \ # -e 's#@''POSIX_SHELL''@#$(POSIX_SHELL)#g' \ # -e $(srcdir)/$@.in >$@-t # chmod a+x $@-t # mv $@-t $@ #EXTRA_DIST += script.in #MOSTLYCLEANFILES += script script-t Include: License: GPLed build tool Maintainer: Paul Eggert �����gnulib-20210822~d383792/modules/posix_memalign������������������������������������������������������0000664�0000000�0000000�00000000602�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allocate memory with indefinite extent and specified alignment. Files: lib/posix_memalign.c m4/posix_memalign.m4 Depends-on: extensions stdlib configure.ac: gl_FUNC_POSIX_MEMALIGN if test $REPLACE_POSIX_MEMALIGN = 1; then AC_LIBOBJ([posix_memalign]) fi gl_STDLIB_MODULE_INDICATOR([posix_memalign]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_memalign-tests������������������������������������������������0000664�0000000�0000000�00000000246�14110572173�0022047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_memalign.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-posix_memalign check_PROGRAMS += test-posix_memalign ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_openpt��������������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_openpt() function: Open the master side of a pseudo-terminal. Files: lib/posix_openpt.c m4/posix_openpt.m4 Depends-on: extensions stdlib configure.ac: gl_FUNC_POSIX_OPENPT if test $HAVE_POSIX_OPENPT = 0; then AC_LIBOBJ([posix_openpt]) fi gl_STDLIB_MODULE_INDICATOR([posix_openpt]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_openpt-tests��������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_openpt.c tests/signature.h tests/macros.h Depends-on: grantpt ptsname unlockpt configure.ac: Makefile.am: TESTS += test-posix_openpt check_PROGRAMS += test-posix_openpt ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn���������������������������������������������������������0000664�0000000�0000000�00000000716�14110572173�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn() function: create a child process. Files: lib/spawn.c m4/posix_spawn.m4 Depends-on: spawn posix_spawn-internal [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1] configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawn]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn]) Makefile.am: Include: <spawn.h> Link: $(LIB_POSIX_SPAWN) License: LGPLv2+ Maintainer: glibc ��������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn-internal������������������������������������������������0000664�0000000�0000000�00000001216�14110572173�0022056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn internals. Files: lib/spawni.c lib/spawn_int.h m4/posix_spawn.m4 Depends-on: spawn alloca-opt dup2 errno open sh-filename strchrnul unistd filename [test $HAVE_POSIX_SPAWN = 0] concat-filename [test $HAVE_POSIX_SPAWN = 0] findprog-in [test $HAVE_POSIX_SPAWN = 0] free-posix [test $HAVE_POSIX_SPAWN = 0] malloca [test $HAVE_POSIX_SPAWN = 0] windows-spawn [test $HAVE_POSIX_SPAWN = 0] configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawni]) gl_PREREQ_POSIX_SPAWN_INTERNAL fi Makefile.am: Include: License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn-tests���������������������������������������������������0000664�0000000�0000000�00000001516�14110572173�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn-open1.c tests/test-posix_spawn-open2.c tests/test-posix_spawn-inherit0.c tests/test-posix_spawn-inherit1.c tests/test-posix_spawn-script.c tests/executable-script tests/executable-script.sh tests/executable-shell-script tests/signature.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_addopen posix_spawn_file_actions_destroy stdbool unistd sys_wait environ fflush freopen waitpid configure.ac: Makefile.am: TESTS += \ test-posix_spawn-open1 \ test-posix_spawn-open2 \ test-posix_spawn-inherit0 \ test-posix_spawn-inherit1 \ test-posix_spawn-script check_PROGRAMS += \ test-posix_spawn-open1 \ test-posix_spawn-open2 \ test-posix_spawn-inherit0 \ test-posix_spawn-inherit1 \ test-posix_spawn-script test_posix_spawn_script_CPPFLAGS = $(AM_CPPFLAGS) -DSRCDIR=\"$(srcdir)/\" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addchdir�����������������������������������0000664�0000000�0000000�00000001462�14110572173�0024610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_addchdir() function: augment a child process actions specification. Files: lib/spawn_faction_addchdir.c lib/spawn_int.h m4/posix_spawn_faction_addchdir.m4 Depends-on: spawn posix_spawn_file_actions_init [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1] configure.ac: gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1; then AC_LIBOBJ([spawn_faction_addchdir]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addchdir]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addchdir-tests�����������������������������0000664�0000000�0000000�00000000724�14110572173�0025750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addchdir.c tests/test-posix_spawn-chdir.c tests/signature.h tests/macros.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_destroy posix_spawnp-tests findprog configure.ac: Makefile.am: TESTS += \ test-posix_spawn_file_actions_addchdir \ test-posix_spawn-chdir check_PROGRAMS += \ test-posix_spawn_file_actions_addchdir \ test-posix_spawn-chdir test_posix_spawn_chdir_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addclose�����������������������������������0000664�0000000�0000000�00000001516�14110572173�0024624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_addclose() function: augment a child process actions specification. Files: lib/spawn_faction_addclose.c lib/spawn_int.h m4/posix_spawn.m4 Depends-on: spawn getdtablesize [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1] posix_spawn_file_actions_init [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1] configure.ac: gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then AC_LIBOBJ([spawn_faction_addclose]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addclose]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addclose-tests�����������������������������0000664�0000000�0000000�00000000467�14110572173�0025770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addclose.c tests/signature.h tests/macros.h Depends-on: getdtablesize posix_spawn_file_actions_init posix_spawn_file_actions_destroy configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_addclose check_PROGRAMS += test-posix_spawn_file_actions_addclose ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_adddup2������������������������������������0000664�0000000�0000000�00000001506�14110572173�0024370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_adddup2() function: augment a child process actions specification. Files: lib/spawn_faction_adddup2.c lib/spawn_int.h m4/posix_spawn.m4 Depends-on: spawn getdtablesize [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1] posix_spawn_file_actions_init [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1] configure.ac: gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then AC_LIBOBJ([spawn_faction_adddup2]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_adddup2]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_adddup2-tests������������������������������0000664�0000000�0000000�00000000464�14110572173�0025532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_adddup2.c tests/signature.h tests/macros.h Depends-on: getdtablesize posix_spawn_file_actions_init posix_spawn_file_actions_destroy configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_adddup2 check_PROGRAMS += test-posix_spawn_file_actions_adddup2 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addfchdir����������������������������������0000664�0000000�0000000�00000001474�14110572173�0024761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_addfchdir() function: augment a child process actions specification. Files: lib/spawn_faction_addfchdir.c lib/spawn_int.h m4/posix_spawn_faction_addfchdir.m4 Depends-on: spawn posix_spawn_file_actions_init [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = 1] configure.ac: gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = 1; then AC_LIBOBJ([spawn_faction_addfchdir]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addfchdir]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addfchdir-tests����������������������������0000664�0000000�0000000�00000001341�14110572173�0026112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addfchdir.c tests/test-posix_spawn-fchdir.c tests/signature.h tests/macros.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_destroy posix_spawnp-tests findprog configure.ac: AC_EGREP_CPP([notposix], [[ #if defined _MSC_VER || defined __MINGW32__ notposix #endif ]], [posix_spawn_ported=no], [posix_spawn_ported=yes]) AM_CONDITIONAL([POSIX_SPAWN_PORTED], [test $posix_spawn_ported = yes]) Makefile.am: TESTS += test-posix_spawn_file_actions_addfchdir check_PROGRAMS += test-posix_spawn_file_actions_addfchdir if POSIX_SPAWN_PORTED TESTS += test-posix_spawn-fchdir check_PROGRAMS += test-posix_spawn-fchdir test_posix_spawn_fchdir_LDADD = $(LDADD) @LIBINTL@ endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addopen������������������������������������0000664�0000000�0000000�00000001506�14110572173�0024457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_addopen() function: augment a child process actions specification. Files: lib/spawn_faction_addopen.c lib/spawn_int.h m4/posix_spawn.m4 Depends-on: spawn getdtablesize [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1] posix_spawn_file_actions_init [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1] configure.ac: gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then AC_LIBOBJ([spawn_faction_addopen]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_addopen-tests������������������������������0000664�0000000�0000000�00000000464�14110572173�0025621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addopen.c tests/signature.h tests/macros.h Depends-on: getdtablesize posix_spawn_file_actions_init posix_spawn_file_actions_destroy configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_addopen check_PROGRAMS += test-posix_spawn_file_actions_addopen ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_destroy������������������������������������0000664�0000000�0000000�00000000677�14110572173�0024546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_destroy() function: free a child process actions specification. Files: lib/spawn_faction_destroy.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawn_faction_destroy]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_destroy]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �����������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawn_file_actions_init���������������������������������������0000664�0000000�0000000�00000000707�14110572173�0024012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawn_file_actions_init() function: initialize child process actions specification. Files: lib/spawn_faction_init.c lib/spawn_int.h m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawn_faction_init]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_init]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ���������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_destroy���������������������������������������������0000664�0000000�0000000�00000000650�14110572173�0022711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_destroy() function: free a child process attributes specification. Files: lib/spawnattr_destroy.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_destroy]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_destroy]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getflags��������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0023021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getflags() function: get bitmask of attributes specified for child process. Files: lib/spawnattr_getflags.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_getflags]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getflags]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getpgroup�������������������������������������������0000664�0000000�0000000�00000000660�14110572173�0023235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getpgroup() function: get process group specified for child process. Files: lib/spawnattr_getpgroup.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_getpgroup]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getpgroup]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ��������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getschedparam���������������������������������������0000664�0000000�0000000�00000001007�14110572173�0024024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getschedparam() function: get the scheduling parameters specified for child process. Files: lib/spawnattr_getschedparam.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 \ || test $REPLACE_POSIX_SPAWN = 1 \ || test $gl_cv_func_spawnattr_setschedparam = no; then AC_LIBOBJ([spawnattr_getschedparam]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getschedparam]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getschedpolicy��������������������������������������0000664�0000000�0000000�00000001010�14110572173�0024215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getschedpolicy() function: get the scheduling policy specified for child process. Files: lib/spawnattr_getschedpolicy.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 \ || test $REPLACE_POSIX_SPAWN = 1 \ || test $gl_cv_func_spawnattr_setschedpolicy = no; then AC_LIBOBJ([spawnattr_getschedpolicy]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getschedpolicy]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getsigdefault���������������������������������������0000664�0000000�0000000�00000000742�14110572173�0024051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getsigdefault() function: get the set of signals with initially the default handler specified for child process. Files: lib/spawnattr_getdefault.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_getdefault]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getsigdefault]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_getsigmask������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0023356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_getsigmask() function: get the set of initially blocked signals specified for child process. Files: lib/spawnattr_getsigmask.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_getsigmask]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_getsigmask]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �����������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_init������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_init() function: initialize child process attributes specification. Files: lib/spawnattr_init.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_init]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_init]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setflags��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0023036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setflags() function: specify bitmask of attributes for child process. Files: lib/spawnattr_setflags.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_setflags]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setflags]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setpgroup�������������������������������������������0000664�0000000�0000000�00000000652�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setpgroup() function: specify process group for child process. Files: lib/spawnattr_setpgroup.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_setpgroup]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setpgroup]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ��������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setschedparam���������������������������������������0000664�0000000�0000000�00000001001�14110572173�0024032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setschedparam() function: specify the scheduling parameters for child process. Files: lib/spawnattr_setschedparam.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 \ || test $REPLACE_POSIX_SPAWN = 1 \ || test $gl_cv_func_spawnattr_setschedparam = no; then AC_LIBOBJ([spawnattr_setschedparam]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setschedparam]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setschedpolicy��������������������������������������0000664�0000000�0000000�00000001002�14110572173�0024232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setschedpolicy() function: specify the scheduling policy for child process. Files: lib/spawnattr_setschedpolicy.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 \ || test $REPLACE_POSIX_SPAWN = 1 \ || test $gl_cv_func_spawnattr_setschedpolicy = no; then AC_LIBOBJ([spawnattr_setschedpolicy]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setschedpolicy]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setsigdefault���������������������������������������0000664�0000000�0000000�00000000733�14110572173�0024065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setsigdefault() function:get the specify of signals with initially the default handler for child process. Files: lib/spawnattr_setdefault.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_setdefault]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigdefault]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �������������������������������������gnulib-20210822~d383792/modules/posix_spawnattr_setsigmask������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0023373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnattr_setsigmask() function: specify the set of initially blocked signals for child process. Files: lib/spawnattr_setsigmask.c m4/posix_spawn.m4 Depends-on: spawn configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnattr_setsigmask]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigmask]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc �����������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnp��������������������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: posix_spawnp() function: create a child process. Files: lib/spawnp.c m4/posix_spawn.m4 Depends-on: spawn posix_spawn-internal [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1] configure.ac: gl_POSIX_SPAWN if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then AC_LIBOBJ([spawnp]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawnp]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ������������������������������������������������������������������������gnulib-20210822~d383792/modules/posix_spawnp-tests��������������������������������������������������0000664�0000000�0000000�00000003030�14110572173�0021560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn-dup2-stdout.c tests/test-posix_spawn-dup2-stdout.in.sh tests/test-posix_spawn-dup2-stdin.c tests/test-posix_spawn-dup2-stdin.in.sh tests/test-posix_spawnp-script.c tests/executable-script tests/executable-script.sh tests/executable-shell-script tests/signature.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addclose posix_spawn_file_actions_addopen posix_spawn_file_actions_destroy posix_spawnattr_init posix_spawnattr_setsigmask posix_spawnattr_setflags posix_spawnattr_destroy stdbool unistd sys_wait dup environ sh-filename sigprocmask waitpid configure.ac: Makefile.am: TESTS += \ test-posix_spawn-dup2-stdout \ test-posix_spawn-dup2-stdin \ test-posix_spawnp-script check_PROGRAMS += \ test-posix_spawn-dup2-stdout \ test-posix_spawn-dup2-stdin \ test-posix_spawnp-script BUILT_SOURCES += test-posix_spawn-dup2-stdout.sh test-posix_spawn-dup2-stdout.sh: test-posix_spawn-dup2-stdout.in.sh $(AM_V_GEN)rm -f $@-t $@ && \ cp $(srcdir)/test-posix_spawn-dup2-stdout.in.sh $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += test-posix_spawn-dup2-stdout.sh test-posix_spawn-dup2-stdout.sh-t BUILT_SOURCES += test-posix_spawn-dup2-stdin.sh test-posix_spawn-dup2-stdin.sh: test-posix_spawn-dup2-stdin.in.sh $(AM_V_GEN)rm -f $@-t $@ && \ cp $(srcdir)/test-posix_spawn-dup2-stdin.in.sh $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += test-posix_spawn-dup2-stdin.sh test-posix_spawn-dup2-stdin.sh-t test_posix_spawnp_script_CPPFLAGS = $(AM_CPPFLAGS) -DSRCDIR=\"$(srcdir)/\" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posixcheck����������������������������������������������������������0000664�0000000�0000000�00000001150�14110572173�0020027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable warnings for determining which Gnulib modules to use, for portability of POSIX functions. Files: m4/posixcheck.m4 Depends-on: # All modules that depend on 'snippet/warn-on-use'. arpa_inet ctype dirent fcntl-h fnmatch-h glob-h iconv-h inttypes-incomplete langinfo locale math monetary netdb poll-h pty search signal-h spawn stdio stdlib string strings sys_file sys_ioctl sys_resource sys_select sys_socket sys_stat sys_time sys_times sys_utsname sys_wait termios time unistd utime-h wchar wctype-h configure.ac: gl_POSIXCHECK Makefile.am: Include: License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posixtm�������������������������������������������������������������0000664�0000000�0000000�00000000504�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a date/time string (POSIX syntax) to linear time or broken-down time. Files: lib/posixtm.h lib/posixtm.c m4/posixtm.m4 Depends-on: c-ctype idx intprops mktime stdbool verify configure.ac: gl_POSIXTM Makefile.am: lib_SOURCES += posixtm.c Include: "posixtm.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posixtm-tests�������������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posixtm.c tests/macros.h Depends-on: intprops setenv stdint strftime configure.ac: Makefile.am: TESTS += test-posixtm check_PROGRAMS += test-posixtm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/posixver������������������������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine desired POSIX specification version, according to user's environment variables. Files: lib/posixver.h lib/posixver.c m4/posixver.m4 Depends-on: configure.ac: gl_POSIXVER Makefile.am: lib_SOURCES += posixver.c Include: "posixver.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pow�����������������������������������������������������������������0000664�0000000�0000000�00000000312�14110572173�0016473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pow() function: power function. Files: m4/pow.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_POW Makefile.am: Include: <math.h> Link: $(POW_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pow-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0017642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pow.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pow check_PROGRAMS += test-pow test_pow_LDADD = $(LDADD) @POW_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/powf����������������������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: powf() function: power function. Files: lib/powf.c m4/powf.m4 Depends-on: math extensions pow [test $HAVE_POWF = 0] configure.ac: gl_FUNC_POWF if test $HAVE_POWF = 0; then AC_LIBOBJ([powf]) fi gl_MATH_MODULE_INDICATOR([powf]) Makefile.am: Include: <math.h> Link: $(POWF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/powf-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-powf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-powf check_PROGRAMS += test-powf test_powf_LDADD = $(LDADD) @POWF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pread���������������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0016776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pread() function: read without changing file offset Files: lib/pread.c m4/pread.m4 Depends-on: unistd extensions largefile lseek [test $HAVE_PREAD = 0 || test $REPLACE_PREAD = 1] read [test $HAVE_PREAD = 0 || test $REPLACE_PREAD = 1] configure.ac: gl_FUNC_PREAD if test $HAVE_PREAD = 0 || test $REPLACE_PREAD = 1; then AC_LIBOBJ([pread]) fi gl_UNISTD_MODULE_INDICATOR([pread]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering �����������������gnulib-20210822~d383792/modules/pread-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pread.c tests/test-pread.sh tests/signature.h tests/macros.h Depends-on: test-framework-sh configure.ac: Makefile.am: TESTS += test-pread.sh check_PROGRAMS += test-pread ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-frexp��������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: printf_frexp() function: split a double into fraction and mantissa, for hexadecimal printf, without requiring libm. Files: lib/printf-frexp.h lib/printf-frexp.c m4/printf-frexp.m4 m4/frexp.m4 Depends-on: configure.ac: gl_FUNC_PRINTF_FREXP Makefile.am: lib_SOURCES += printf-frexp.c Include: "printf-frexp.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-frexp-tests��������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0021452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-printf-frexp.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-printf-frexp check_PROGRAMS += test-printf-frexp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-frexpl�������������������������������������������������������0000664�0000000�0000000�00000001206�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: printf_frexpl() function: split a long double into fraction and mantissa, for hexadecimal printf, without requiring libm. Files: lib/printf-frexpl.h lib/printf-frexpl.c lib/printf-frexp.c m4/printf-frexpl.m4 m4/frexpl.m4 m4/ldexpl.m4 Depends-on: printf-frexp [test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] math [test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fpucw [test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_PRINTF_FREXPL Makefile.am: lib_SOURCES += printf-frexpl.c Include: "printf-frexpl.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-frexpl-tests�������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-printf-frexpl.c tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-printf-frexpl check_PROGRAMS += test-printf-frexpl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-posix��������������������������������������������������������0000664�0000000�0000000�00000001214�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible printf() function: print formatted output to standard output Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/printf.c m4/printf-posix-rpl.m4 m4/printf.m4 m4/asm-underscore.m4 Depends-on: stdio printf-safe vfprintf-posix [test $REPLACE_PRINTF = 1] configure.ac: gl_FUNC_PRINTF_POSIX gl_STDIO_MODULE_INDICATOR([printf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0021501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-printf-posix.sh tests/test-printf-posix.c tests/test-printf-posix.h tests/test-printf-posix.output tests/test-printf-posix2.sh tests/test-printf-posix2.c tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint configure.ac: AC_CHECK_FUNCS_ONCE([getrlimit setrlimit]) Makefile.am: TESTS += test-printf-posix.sh test-printf-posix2.sh check_PROGRAMS += test-printf-posix test-printf-posix2 �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/printf-safe���������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensures that the *printf() functions provided by the *printf-posix modules recognize non-IEEE-754 values of 'long double' arguments and display them as NaN (rather than producing undefined behavior). Files: Depends-on: configure.ac: m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) Makefile.am: Include: License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/priv-set������������������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0017443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Query, remove or restore a Solaris privilege Files: lib/priv-set.h lib/priv-set.c m4/priv-set.m4 Depends-on: errno extern-inline stdbool configure.ac: gl_PRIV_SET Makefile.am: lib_SOURCES += priv-set.c Include: "priv-set.h" License: GPL Maintainer: David Bartley �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/priv-set-tests������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-priv-set.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-priv-set check_PROGRAMS += test-priv-set �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/progname������������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Program name management. Files: lib/progname.h lib/progname.c Depends-on: configure.ac: AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) Makefile.am: lib_SOURCES += progname.h progname.c Include: "progname.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/propername����������������������������������������������������������0000664�0000000�0000000�00000001254�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Localization of proper names. Files: lib/propername.h lib/propername.c Depends-on: stdbool trim mbsstr mbchar mbuiter iconv localcharset c-strcase xstriconv xalloc gettext-h configure.ac: m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--keyword='proper_name:1,\"This is a proper name. See the gettext manual, section Names.\"']) AM_][XGETTEXT_OPTION([--keyword='proper_name_utf8:1,\"This is a proper name. See the gettext manual, section Names.\"'])]) Makefile.am: lib_SOURCES += propername.h propername.c Include: "propername.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pselect�������������������������������������������������������������0000664�0000000�0000000�00000001137�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pselect() function: synchronous I/O multiplexing. Files: lib/pselect.c m4/pselect.m4 Depends-on: sys_select pthread_sigmask [test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1] select [test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1] dup2 [test $REPLACE_PSELECT = 1] configure.ac: gl_FUNC_PSELECT if test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1; then AC_LIBOBJ([pselect]) fi gl_SYS_SELECT_MODULE_INDICATOR([pselect]) Makefile.am: Include: <sys/select.h> Link: $(LIB_SELECT) $(LIB_PTHREAD_SIGMASK) License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pselect-tests�������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pselect.c tests/test-select.h tests/macros.h tests/signature.h Depends-on: stdbool netinet_in arpa_inet unistd sys_ioctl extensions inet_pton errno perror pipe-posix socket bind setsockopt listen connect accept ioctl close configure.ac: AC_CHECK_HEADERS_ONCE([sys/wait.h]) Makefile.am: TESTS += test-pselect check_PROGRAMS += test-pselect test_pselect_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ @LIB_PTHREAD_SIGMASK@ $(INET_PTON_LIB) ����������������������������������������������������������gnulib-20210822~d383792/modules/pt_chown������������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper program for setting the owner of the slave side of a pseudo-terminal. Files: lib/pt_chown.c lib/pty-private.h Depends-on: ptsname root-uid stdlib configmake stat configure.ac: Makefile.am: # TODO: Add rules for installing as setuid root (chown root, chmod a=rx,u+s). pkglibexec_PROGRAMS = pt_chown pt_chown_LDADD = libgnu.a Include: License: LGPLv2+ Maintainer: glibc ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread�������������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0017314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Implement the most essential subset of the pthreads library. Files: Depends-on: pthread-h pthread-thread pthread-once pthread-mutex pthread-rwlock pthread-cond pthread-tss pthread-spin configure.ac: Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-cond��������������������������������������������������������0000664�0000000�0000000�00000000753�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX condition variables. Files: lib/pthread-cond.c m4/pthread-cond.m4 Depends-on: pthread-h windows-cond [test $gl_threads_api = windows] pthread-mutex [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_COND if test $HAVE_PTHREAD_COND_INIT = 0 || test $REPLACE_PTHREAD_COND_INIT = 1; then AC_LIBOBJ([pthread-cond]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-cond]) Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ���������������������gnulib-20210822~d383792/modules/pthread-cond-tests��������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0021401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-cond.c tests/macros.h Depends-on: pthread-thread pthread-mutex nanosleep sched_yield configure.ac: Makefile.am: TESTS += test-pthread-cond check_PROGRAMS += test-pthread-cond test_pthread_cond_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-h�����������������������������������������������������������0000664�0000000�0000000�00000025257�14110572173�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <pthread.h>. Files: lib/pthread.in.h m4/pthread_h.m4 m4/threadlib.m4 Depends-on: extensions extern-inline sched time snippet/c++defs snippet/_Noreturn snippet/arg-nonnull snippet/warn-on-use configure.ac-early: gl_ANYTHREADLIB_EARLY configure.ac: gl_PTHREAD_H gl_PTHREAD_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += pthread.h # We need the following in order to create <pthread.h> when the system # doesn't have one that works with the given compiler. pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_PTHREAD_H''@|$(HAVE_PTHREAD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_PTHREAD_H''@|$(NEXT_PTHREAD_H)|g' \ -e 's/@''GNULIB_PTHREAD_THREAD''@/$(GNULIB_PTHREAD_THREAD)/g' \ -e 's/@''GNULIB_PTHREAD_ONCE''@/$(GNULIB_PTHREAD_ONCE)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX''@/$(GNULIB_PTHREAD_MUTEX)/g' \ -e 's/@''GNULIB_PTHREAD_RWLOCK''@/$(GNULIB_PTHREAD_RWLOCK)/g' \ -e 's/@''GNULIB_PTHREAD_COND''@/$(GNULIB_PTHREAD_COND)/g' \ -e 's/@''GNULIB_PTHREAD_TSS''@/$(GNULIB_PTHREAD_TSS)/g' \ -e 's/@''GNULIB_PTHREAD_SPIN''@/$(GNULIB_PTHREAD_SPIN)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX_TIMEDLOCK''@/$(GNULIB_PTHREAD_MUTEX_TIMEDLOCK)/g' \ -e 's|@''HAVE_PTHREAD_T''@|$(HAVE_PTHREAD_T)|g' \ -e 's|@''HAVE_PTHREAD_SPINLOCK_T''@|$(HAVE_PTHREAD_SPINLOCK_T)|g' \ -e 's|@''HAVE_PTHREAD_CREATE_DETACHED''@|$(HAVE_PTHREAD_CREATE_DETACHED)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_RECURSIVE''@|$(HAVE_PTHREAD_MUTEX_RECURSIVE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_ROBUST''@|$(HAVE_PTHREAD_MUTEX_ROBUST)|g' \ -e 's|@''HAVE_PTHREAD_PROCESS_SHARED''@|$(HAVE_PTHREAD_PROCESS_SHARED)|g' \ -e 's|@''HAVE_PTHREAD_CREATE''@|$(HAVE_PTHREAD_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_INIT''@|$(HAVE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_GETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_SETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_DESTROY''@|$(HAVE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_SELF''@|$(HAVE_PTHREAD_SELF)|g' \ -e 's|@''HAVE_PTHREAD_EQUAL''@|$(HAVE_PTHREAD_EQUAL)|g' \ -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' \ -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' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_DESTROY''@|$(HAVE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_LOCK''@|$(HAVE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TRYLOCK''@|$(HAVE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TIMEDLOCK''@|$(HAVE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_UNLOCK''@|$(HAVE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_DESTROY''@|$(HAVE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_INIT''@|$(HAVE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_INIT''@|$(HAVE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_DESTROY''@|$(HAVE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_RDLOCK''@|$(HAVE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_WRLOCK''@|$(HAVE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_UNLOCK''@|$(HAVE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_DESTROY''@|$(HAVE_PTHREAD_RWLOCK_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_INIT''@|$(HAVE_PTHREAD_COND_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_INIT''@|$(HAVE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_DESTROY''@|$(HAVE_PTHREAD_CONDATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_WAIT''@|$(HAVE_PTHREAD_COND_WAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_TIMEDWAIT''@|$(HAVE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_SIGNAL''@|$(HAVE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''HAVE_PTHREAD_COND_BROADCAST''@|$(HAVE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''HAVE_PTHREAD_COND_DESTROY''@|$(HAVE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_KEY_CREATE''@|$(HAVE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_SETSPECIFIC''@|$(HAVE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_GETSPECIFIC''@|$(HAVE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_KEY_DELETE''@|$(HAVE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_INIT''@|$(HAVE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_LOCK''@|$(HAVE_PTHREAD_SPIN_LOCK)|g' \ -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' \ -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' \ -e 's|@''REPLACE_PTHREAD_ATTR_DESTROY''@|$(REPLACE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_SELF''@|$(REPLACE_PTHREAD_SELF)|g' \ -e 's|@''REPLACE_PTHREAD_EQUAL''@|$(REPLACE_PTHREAD_EQUAL)|g' \ -e 's|@''REPLACE_PTHREAD_DETACH''@|$(REPLACE_PTHREAD_DETACH)|g' \ -e 's|@''REPLACE_PTHREAD_JOIN''@|$(REPLACE_PTHREAD_JOIN)|g' \ -e 's|@''REPLACE_PTHREAD_EXIT''@|$(REPLACE_PTHREAD_EXIT)|g' \ -e 's|@''REPLACE_PTHREAD_ONCE''@|$(REPLACE_PTHREAD_ONCE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_INIT''@|$(REPLACE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_INIT''@|$(REPLACE_PTHREAD_MUTEXATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_DESTROY''@|$(REPLACE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_LOCK''@|$(REPLACE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TRYLOCK''@|$(REPLACE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TIMEDLOCK''@|$(REPLACE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_UNLOCK''@|$(REPLACE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_DESTROY''@|$(REPLACE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_INIT''@|$(REPLACE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_INIT''@|$(REPLACE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_DESTROY''@|$(REPLACE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_RDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_WRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -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' \ -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' \ -e 's|@''REPLACE_PTHREAD_COND_WAIT''@|$(REPLACE_PTHREAD_COND_WAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_TIMEDWAIT''@|$(REPLACE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_SIGNAL''@|$(REPLACE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''REPLACE_PTHREAD_COND_BROADCAST''@|$(REPLACE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''REPLACE_PTHREAD_COND_DESTROY''@|$(REPLACE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_CREATE''@|$(REPLACE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_SETSPECIFIC''@|$(REPLACE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_GETSPECIFIC''@|$(REPLACE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_DELETE''@|$(REPLACE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_INIT''@|$(REPLACE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_LOCK''@|$(REPLACE_PTHREAD_SPIN_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_TRYLOCK''@|$(REPLACE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_UNLOCK''@|$(REPLACE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_DESTROY''@|$(REPLACE_PTHREAD_SPIN_DESTROY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_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 && \ mv $@-t $@ MOSTLYCLEANFILES += pthread.h pthread.h-t Include: <pthread.h> Link: $(LIBPTHREAD) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-h-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0021261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-pthread-c++ check_PROGRAMS += test-pthread-c++ test_pthread_c___SOURCES = test-pthread-c++.cc test_pthread_c___LDADD = $(LDADD) $(LIBPMULTITHREAD) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-h-tests�����������������������������������������������������0000664�0000000�0000000�00000000226�14110572173�0020706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread.c Depends-on: verify pthread-h-c++-tests configure.ac: Makefile.am: TESTS += test-pthread check_PROGRAMS += test-pthread ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-mutex�������������������������������������������������������0000664�0000000�0000000�00000001255�14110572173�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX mutexes (locks). Files: lib/pthread-mutex.c m4/pthread-mutex.m4 Depends-on: pthread-h pthread_mutex_timedlock [test $gl_threads_api != windows] windows-timedmutex [test $gl_threads_api = windows] windows-timedrecmutex [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_MUTEX if test $HAVE_PTHREAD_MUTEX_INIT = 0 || test $REPLACE_PTHREAD_MUTEX_INIT = 1 \ || test $HAVE_PTHREAD_MUTEXATTR_GETROBUST = 0 || test $REPLACE_PTHREAD_MUTEXATTR_GETROBUST = 1; then AC_LIBOBJ([pthread-mutex]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-mutex]) Makefile.am: Include: <pthread.h> Link: $(LIBPTHREAD) or $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-mutex-tests�������������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0021620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-mutex.c tests/atomic-int-posix.h tests/macros.h Depends-on: pthread-thread sched_yield configure.ac: Makefile.am: TESTS += test-pthread-mutex check_PROGRAMS += test-pthread-mutex test_pthread_mutex_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ @LIB_SEMAPHORE@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-once��������������������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0020252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX once-only control. Files: lib/pthread-once.c m4/pthread-once.m4 Depends-on: pthread-h windows-once [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_ONCE if test $HAVE_PTHREAD_ONCE = 0 || test $REPLACE_PTHREAD_ONCE = 1; then AC_LIBOBJ([pthread-once]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-once]) Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-once-tests��������������������������������������������������0000664�0000000�0000000�00000000604�14110572173�0021403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-once1.c tests/test-pthread-once2.c tests/macros.h Depends-on: pthread-thread pthread-mutex sched_yield configure.ac: Makefile.am: TESTS += test-pthread-once1 test-pthread-once2 check_PROGRAMS += test-pthread-once1 test-pthread-once2 test_pthread_once1_LDADD = $(LDADD) @LIBPMULTITHREAD@ test_pthread_once2_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-rwlock������������������������������������������������������0000664�0000000�0000000�00000001320�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX read-write locks. Files: lib/pthread-rwlock.c m4/pthread-rwlock.m4 Depends-on: pthread-h pthread-cond [test $gl_threads_api != windows && test $REPLACE_PTHREAD_RWLOCK_INIT = 1] nanosleep [test $gl_threads_api != windows && test $HAVE_PTHREAD_RWLOCK_INIT = 1 && test $HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = 0] windows-timedrwlock [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_RWLOCK if test $HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = 0 || test $REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = 1; then AC_LIBOBJ([pthread-rwlock]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-rwlock]) Makefile.am: Include: <pthread.h> Link: $(LIBPTHREAD) or $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-rwlock-tests������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-rwlock.c tests/atomic-int-posix.h tests/macros.h Depends-on: pthread-thread pthread-mutex sched_yield configure.ac: Makefile.am: TESTS += test-pthread-rwlock check_PROGRAMS += test-pthread-rwlock test_pthread_rwlock_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ @LIB_SEMAPHORE@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-spin��������������������������������������������������������0000664�0000000�0000000�00000001013�14110572173�0020263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX spin locks. Files: lib/pthread-spin.c m4/pthread-spin.m4 Depends-on: pthread-h stdbool [test $HAVE_PTHREAD_SPIN_INIT = 0 || test $REPLACE_PTHREAD_SPIN_INIT = 1] windows-spin [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_SPIN if test $HAVE_PTHREAD_SPIN_INIT = 0 || test $REPLACE_PTHREAD_SPIN_INIT = 1; then AC_LIBOBJ([pthread-spin]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-spin]) Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-spin-tests��������������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-spin.c tests/atomic-int-posix.h tests/macros.h m4/semaphore.m4 Depends-on: pthread-thread pthread-mutex sched_yield configure.ac: AC_CHECK_HEADERS_ONCE([semaphore.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_SEMAPHORE]) Makefile.am: TESTS += test-pthread-spin check_PROGRAMS += test-pthread-spin test_pthread_spin_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ @LIB_SEMAPHORE@ �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-thread������������������������������������������������������0000664�0000000�0000000�00000000713�14110572173�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creating and controlling POSIX threads. Files: lib/pthread-thread.c m4/pthread-thread.m4 Depends-on: pthread-h windows-thread [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_THREAD if test $HAVE_PTHREAD_CREATE = 0 || test $REPLACE_PTHREAD_CREATE = 1; then AC_LIBOBJ([pthread-thread]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-thread]) Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all �����������������������������������������������������gnulib-20210822~d383792/modules/pthread-thread-tests������������������������������������������������0000664�0000000�0000000�00000000326�14110572173�0021727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-thread.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pthread-thread check_PROGRAMS += test-pthread-thread test_pthread_thread_LDADD = $(LDADD) @LIBPMULTITHREAD@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-tss���������������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX thread-specific storage. Files: lib/pthread-tss.c m4/pthread-tss.m4 Depends-on: pthread-h windows-tls [test $gl_threads_api = windows] configure.ac: gl_PTHREAD_TSS if test $HAVE_PTHREAD_KEY_CREATE = 0 || test $REPLACE_PTHREAD_KEY_CREATE = 1; then AC_LIBOBJ([pthread-tss]) fi gl_PTHREAD_MODULE_INDICATOR([pthread-tss]) Makefile.am: Include: <pthread.h> Link: $(LIBPMULTITHREAD) License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread-tss-tests���������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread-tss.c tests/macros.h Depends-on: pthread-thread pthread-mutex sched_yield configure.ac: Makefile.am: TESTS += test-pthread-tss check_PROGRAMS += test-pthread-tss test_pthread_tss_LDADD = $(LDADD) @LIBPMULTITHREAD@ @LIB_SCHED_YIELD@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread_mutex_timedlock���������������������������������������������0000664�0000000�0000000�00000001017�14110572173�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lock a mutex, abandoning after a certain time. Files: lib/pthread_mutex_timedlock.c m4/pthread_mutex_timedlock.m4 Depends-on: pthread-h nanosleep [test $HAVE_PTHREAD_T = 1 && test $HAVE_PTHREAD_MUTEX_TIMEDLOCK = 0] configure.ac: gl_FUNC_PTHREAD_MUTEX_TIMEDLOCK if test $HAVE_PTHREAD_T = 1 && test $HAVE_PTHREAD_MUTEX_TIMEDLOCK = 0; then AC_LIBOBJ([pthread_mutex_timedlock]) fi gl_PTHREAD_MODULE_INDICATOR([pthread_mutex_timedlock]) Makefile.am: Include: <pthread.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread_sigmask�����������������������������������������������������0000664�0000000�0000000�00000001077�14110572173�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible signal blocking for threads. Files: lib/pthread_sigmask.c m4/pthread_sigmask.m4 Depends-on: signal-h threadlib sigprocmask [test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1] configure.ac: gl_FUNC_PTHREAD_SIGMASK if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then AC_LIBOBJ([pthread_sigmask]) gl_PREREQ_PTHREAD_SIGMASK fi gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask]) Makefile.am: Include: <signal.h> Link: $(LIB_PTHREAD_SIGMASK) License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pthread_sigmask-tests�����������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pthread_sigmask1.c tests/test-pthread_sigmask2.c tests/signature.h tests/macros.h Depends-on: sleep pthread-thread configure.ac: Makefile.am: 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@ �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ptsname�������������������������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ptsname() function: Determine name of the slave side of a pseudo-terminal. Files: lib/ptsname.c m4/ptsname.m4 Depends-on: stdlib extensions ptsname_r [test $HAVE_PTSNAME = 0] configure.ac: gl_FUNC_PTSNAME if test $HAVE_PTSNAME = 0 || test $REPLACE_PTSNAME = 1; then AC_LIBOBJ([ptsname]) gl_PREREQ_PTSNAME fi gl_STDLIB_MODULE_INDICATOR([ptsname]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������gnulib-20210822~d383792/modules/ptsname-tests�������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ptsname.c tests/signature.h tests/macros.h Depends-on: same-inode configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-ptsname check_PROGRAMS += test-ptsname ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ptsname_r�����������������������������������������������������������0000664�0000000�0000000�00000001210�14110572173�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ptsname_r() function: Determine name of the slave side of a pseudo-terminal. Files: lib/ptsname_r.c m4/ptsname_r.m4 Depends-on: stdlib extensions isatty [test $HAVE_PTSNAME_R = 0 || test $REPLACE_PTSNAME_R = 1] stat [test $HAVE_PTSNAME_R = 0 || test $REPLACE_PTSNAME_R = 1] ttyname_r [test $HAVE_PTSNAME_R = 0 || test $REPLACE_PTSNAME_R = 1] configure.ac: gl_FUNC_PTSNAME_R if test $HAVE_PTSNAME_R = 0 || test $REPLACE_PTSNAME_R = 1; then AC_LIBOBJ([ptsname_r]) gl_PREREQ_PTSNAME_R fi gl_STDLIB_MODULE_INDICATOR([ptsname_r]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ptsname_r-tests�����������������������������������������������������0000664�0000000�0000000�00000000333�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ptsname_r.c tests/signature.h tests/null-ptr.h tests/macros.h Depends-on: same-inode configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-ptsname_r check_PROGRAMS += test-ptsname_r �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pty�����������������������������������������������������������������0000664�0000000�0000000�00000003105�14110572173�0016505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <pty.h> for systems that lacks it. Files: lib/pty.in.h m4/pty_h.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_PTY_H gl_PTY_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += pty.h # We need the following in order to create <pty.h> when the system # doesn't have one that works with the given compiler. pty.h: pty.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_PTY_H''@|$(HAVE_PTY_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_PTY_H''@|$(NEXT_PTY_H)|g' \ -e 's/@''GNULIB_FORKPTY''@/$(GNULIB_FORKPTY)/g' \ -e 's/@''GNULIB_OPENPTY''@/$(GNULIB_OPENPTY)/g' \ -e 's|@''HAVE_UTIL_H''@|$(HAVE_UTIL_H)|g' \ -e 's|@''HAVE_LIBUTIL_H''@|$(HAVE_LIBUTIL_H)|g' \ -e 's|@''HAVE_FORKPTY''@|$(HAVE_FORKPTY)|g' \ -e 's|@''HAVE_OPENPTY''@|$(HAVE_OPENPTY)|g' \ -e 's|@''REPLACE_FORKPTY''@|$(REPLACE_FORKPTY)|g' \ -e 's|@''REPLACE_OPENPTY''@|$(REPLACE_OPENPTY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/pty.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += pty.h pty.h-t Include: <pty.h> Link: $(PTY_LIB) License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pty-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pty-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-pty-c++ check_PROGRAMS += test-pty-c++ test_pty_c___SOURCES = test-pty-c++.cc test_pty_c___LDADD = $(LDADD) $(PTY_LIB) $(LIBINTL) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/pty-tests�����������������������������������������������������������0000664�0000000�0000000�00000000077�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: pty-c++-tests configure.ac: Makefile.am: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/putenv��������������������������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: putenv() function: change or add an environment variable. Files: lib/putenv.c m4/putenv.m4 Depends-on: stdlib environ [test $REPLACE_PUTENV = 1] free-posix [test $REPLACE_PUTENV = 1] malloc-posix [test $REPLACE_PUTENV = 1] configure.ac: gl_FUNC_PUTENV if test $REPLACE_PUTENV = 1; then AC_LIBOBJ([putenv]) gl_PREREQ_PUTENV fi gl_STDLIB_MODULE_INDICATOR([putenv]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: Jim Meyering, glibc ������������������������������gnulib-20210822~d383792/modules/pwrite��������������������������������������������������������������0000664�0000000�0000000�00000000776�14110572173�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: pwrite() function: write without changing file offset Files: lib/pwrite.c m4/pwrite.m4 Depends-on: unistd extensions largefile lseek [test $HAVE_PWRITE = 0 || test $REPLACE_PWRITE = 1] write [test $HAVE_PWRITE = 0 || test $REPLACE_PWRITE = 1] configure.ac: gl_FUNC_PWRITE if test $HAVE_PWRITE = 0 || test $REPLACE_PWRITE = 1; then AC_LIBOBJ([pwrite]) fi gl_UNISTD_MODULE_INDICATOR([pwrite]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Peter O'Gorman ��gnulib-20210822~d383792/modules/pwrite-tests��������������������������������������������������������0000664�0000000�0000000�00000000303�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pwrite.sh tests/test-pwrite.c tests/signature.h tests/macros.h Depends-on: test-framework-sh configure.ac: Makefile.am: TESTS += test-pwrite.sh check_PROGRAMS += test-pwrite �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/qacl����������������������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0016621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access control lists of files. (Unportable.) This is a placeholder module for backwards compatibility. New programs should use either qcopy-acl or qset-acl or both. Files: Depends-on: qcopy-acl qset-acl configure.ac: Makefile.am: Include: License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/qcopy-acl�����������������������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy access control list from one file to another. (Unportable.) Files: lib/qcopy-acl.c Depends-on: acl-permissions configure.ac: Makefile.am: lib_SOURCES += qcopy-acl.c Include: "acl.h" Link: $(LIB_ACL) License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/qset-acl������������������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set access control list of a file by specifying a mode. (Unportable.) Files: lib/qset-acl.c Depends-on: acl-permissions configure.ac: Makefile.am: lib_SOURCES += qset-acl.c Include: "acl.h" Link: $(LIB_ACL) License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/qsort_r�������������������������������������������������������������0000664�0000000�0000000�00000001016�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reentrant sort function with GNU signature Files: lib/qsort.c lib/qsort_r.c m4/qsort_r.m4 Depends-on: extensions stdlib configure.ac: gl_FUNC_QSORT_R if test $HAVE_QSORT_R = 0; then # The function is missing from the system or has an unknown signature. AC_LIBOBJ([qsort]) elif test $REPLACE_QSORT_R = 1; then # The function exists, but it has the BSD signature. AC_LIBOBJ([qsort_r]) fi gl_STDLIB_MODULE_INDICATOR([qsort_r]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/qsort_r-tests�������������������������������������������������������0000664�0000000�0000000�00000000173�14110572173�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-qsort_r.c Depends-on: configure.ac: Makefile.am: TESTS += test-qsort_r check_PROGRAMS += test-qsort_r �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/quote���������������������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quote arguments for use in error messages. Files: lib/quote.h m4/quote.m4 Depends-on: quotearg configure.ac: gl_QUOTE Makefile.am: Include: "quote.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/quotearg������������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quote arguments for use in error messages. Files: lib/quotearg.h lib/quotearg.c lib/quote.h m4/mbstate_t.m4 m4/mbrtowc.m4 m4/quotearg.m4 Depends-on: attribute c-strcaseeq extensions gettext-h mbrtowc mbsinit memcmp minmax quotearg-simple localcharset stdbool stdint wchar wctype-h xalloc configure.ac: gl_QUOTEARG Makefile.am: lib_SOURCES += quotearg.c Include: "quotearg.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert ����������������������������������������������������������gnulib-20210822~d383792/modules/quotearg-simple�����������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A dummy module whose tests are simple 'quotearg' tests. Files: Depends-on: quotearg configure.ac: Makefile.am: Include: Link: $(LIB_MBRTOWC) License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/quotearg-simple-tests�����������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0022154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-quotearg-simple.c tests/test-quotearg.h tests/macros.h tests/zerosize-ptr.h m4/mmap-anon.m4 Depends-on: c99 stdint configure.ac: dnl Check for prerequisites for memory fence checks. dnl FIXME: zerosize-ptr.h requires these: make a module for it gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-quotearg-simple check_PROGRAMS += test-quotearg-simple test_quotearg_simple_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) ���������������gnulib-20210822~d383792/modules/quotearg-tests������������������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: gettext-dependent-test Files: tests/test-quotearg.sh tests/test-quotearg.c tests/test-quotearg.h tests/macros.h tests/testlocale/fr/LC_MESSAGES/test-quotearg.po tests/testlocale/fr/LC_MESSAGES/test-quotearg.mo m4/locale-fr.m4 m4/codeset.m4 Depends-on: gettext stdint setenv unsetenv setlocale localcharset configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-quotearg.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ host_os='@host_os@' check_PROGRAMS += test-quotearg test_quotearg_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIBINTL@ $(LIB_MBRTOWC) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/raise���������������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Send a signal to the executing process. Files: lib/raise.c m4/raise.m4 Depends-on: signal-h msvc-inval [test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1] configure.ac: gl_FUNC_RAISE if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then AC_LIBOBJ([raise]) gl_PREREQ_RAISE fi gl_SIGNAL_MODULE_INDICATOR([raise]) Makefile.am: Include: <signal.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/raise-tests���������������������������������������������������������0000664�0000000�0000000�00000000235�14110572173�0020135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-raise.c tests/signature.h tests/macros.h Depends-on: unistd configure.ac: Makefile.am: TESTS += test-raise check_PROGRAMS += test-raise �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/random��������������������������������������������������������������0000664�0000000�0000000�00000001421�14110572173�0017150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: global random number generator Files: lib/random.c m4/random.m4 Depends-on: libc-config [test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1] stdlib stdint [test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1] random_r [test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1] configure.ac: gl_FUNC_RANDOM if test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1; then AC_LIBOBJ([random]) gl_PREREQ_RANDOM fi gl_STDLIB_MODULE_INDICATOR([random]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/random-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-random.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-random check_PROGRAMS += test-random �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/random_r������������������������������������������������������������0000664�0000000�0000000�00000001011�14110572173�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: reentrant random number generator Files: lib/random_r.c m4/random_r.m4 Depends-on: c99 libc-config [test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1] stdlib stdint [test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1] configure.ac: gl_FUNC_RANDOM_R if test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1; then AC_LIBOBJ([random_r]) gl_PREREQ_RANDOM_R fi gl_STDLIB_MODULE_INDICATOR([random_r]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/random_r-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-random_r.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-random_r check_PROGRAMS += test-random_r �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rawmemchr�����������������������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rawmemchr() function: Find the first occurrence of C in S. Files: lib/rawmemchr.c lib/rawmemchr.valgrind m4/rawmemchr.m4 Depends-on: extensions stdalign stdint string verify configure.ac: gl_FUNC_RAWMEMCHR if test $HAVE_RAWMEMCHR = 0; then AC_LIBOBJ([rawmemchr]) gl_PREREQ_RAWMEMCHR fi gl_STRING_MODULE_INDICATOR([rawmemchr]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Eric Blake, glibc ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rawmemchr-tests�����������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rawmemchr.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-rawmemchr check_PROGRAMS += test-rawmemchr �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-list���������������������������������������������������������0000664�0000000�0000000�00000000707�14110572173�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a binary tree. Files: lib/gl_rbtree_list.h lib/gl_rbtree_list.c lib/gl_anyrbtree_list1.h lib/gl_anyrbtree_list2.h lib/gl_anytree_list1.h lib/gl_anytree_list2.h Depends-on: list configure.ac: Makefile.am: lib_SOURCES += gl_rbtree_list.h gl_rbtree_list.c gl_anyrbtree_list1.h gl_anyrbtree_list2.h gl_anytree_list1.h gl_anytree_list2.h Include: "gl_rbtree_list.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-list-tests���������������������������������������������������0000664�0000000�0000000�00000000241�14110572173�0021263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtree_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-rbtree_list check_PROGRAMS += test-rbtree_list ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-omap���������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered map data type implemented by a binary tree. Files: lib/gl_rbtree_omap.h lib/gl_rbtree_omap.c lib/gl_rbtree_ordered.h lib/gl_anytree_omap.h Depends-on: omap configure.ac: Makefile.am: lib_SOURCES += gl_rbtree_omap.h gl_rbtree_omap.c gl_rbtree_ordered.h gl_anytree_omap.h Include: "gl_rbtree_omap.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-omap-tests���������������������������������������������������0000664�0000000�0000000�00000000241�14110572173�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtree_omap.c tests/macros.h Depends-on: array-omap configure.ac: Makefile.am: TESTS += test-rbtree_omap check_PROGRAMS += test-rbtree_omap ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-oset���������������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ordered set data type implemented by a binary tree. Files: lib/gl_rbtree_oset.h lib/gl_rbtree_oset.c lib/gl_rbtree_ordered.h lib/gl_anytree_oset.h Depends-on: oset configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += gl_rbtree_oset.h gl_rbtree_oset.c gl_rbtree_ordered.h gl_anytree_oset.h Include: "gl_rbtree_oset.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtree-oset-tests���������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0021266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtree_oset.c tests/test-oset-update.h tests/macros.h Depends-on: array-oset configure.ac: Makefile.am: TESTS += test-rbtree_oset check_PROGRAMS += test-rbtree_oset ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtreehash-list�����������������������������������������������������0000664�0000000�0000000�00000001341�14110572173�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type implemented by a hash table with a binary tree. Files: lib/gl_rbtreehash_list.h lib/gl_rbtreehash_list.c lib/gl_anyhash1.h lib/gl_anyhash2.h lib/gl_anyhash_primes.h lib/gl_anyrbtree_list1.h lib/gl_anyrbtree_list2.h lib/gl_anytree_list1.h lib/gl_anytree_list2.h lib/gl_anytreehash_list1.h lib/gl_anytreehash_list2.h Depends-on: builtin-expect list rbtree-oset stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_rbtreehash_list.h gl_rbtreehash_list.c gl_anyhash1.h gl_anyhash2.h gl_anyhash_primes.h gl_anyrbtree_list1.h gl_anyrbtree_list2.h gl_anytree_list1.h gl_anytree_list2.h gl_anytreehash_list1.h gl_anytreehash_list2.h Include: "gl_rbtreehash_list.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rbtreehash-list-tests�����������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0022134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtreehash_list.c tests/macros.h Depends-on: array-list configure.ac: Makefile.am: TESTS += test-rbtreehash_list check_PROGRAMS += test-rbtreehash_list ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/read����������������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0016606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible read() function: read data from a file descriptor Files: lib/read.c m4/read.m4 Depends-on: unistd msvc-inval [test $REPLACE_READ = 1] msvc-nothrow [test $REPLACE_READ = 1] configure.ac: gl_FUNC_READ if test $REPLACE_READ = 1; then AC_LIBOBJ([read]) gl_PREREQ_READ fi gl_UNISTD_MODULE_INDICATOR([read]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/read-file�����������������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: read_file() function: read the contents of a file into a string Files: lib/read-file.h lib/read-file.c m4/read-file.m4 Depends-on: explicit_bzero fopen-gnu free-posix fstat ftello malloc-posix realloc-posix stdint sys_stat configure.ac: gl_PREREQ_READ_FILE Makefile.am: lib_SOURCES += read-file.c Include: "read-file.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/read-file-tests�����������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-read-file.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-read-file check_PROGRAMS += test-read-file ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/read-tests����������������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-read.c tests/signature.h tests/macros.h Depends-on: binary-io open configure.ac: Makefile.am: TESTS += test-read check_PROGRAMS += test-read ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readdir�������������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: readdir() function: read the next entry of a directory Files: lib/readdir.c lib/dirent-private.h m4/readdir.m4 Depends-on: dirent largefile configure.ac: gl_FUNC_READDIR if test $HAVE_READDIR = 0; then AC_LIBOBJ([readdir]) fi gl_DIRENT_MODULE_INDICATOR([readdir]) Makefile.am: Include: <dirent.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readline������������������������������������������������������������0000664�0000000�0000000�00000000701�14110572173�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Simple implementation of readline. Files: lib/readline.h lib/readline.c m4/readline.m4 Depends-on: havelib getline [test "$gl_cv_lib_readline" = no] configure.ac: gl_FUNC_READLINE if test "$gl_cv_lib_readline" = no; then AC_LIBOBJ([readline]) gl_PREREQ_READLINE fi Makefile.am: Include: "readline.h" Link: $(LTLIBREADLINE) when linking with libtool, $(LIBREADLINE) otherwise License: GPL Maintainer: Simon Josefsson ���������������������������������������������������������������gnulib-20210822~d383792/modules/readlink������������������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: readlink() function: read the value of a symbolic link. Files: lib/readlink.c m4/readlink.m4 Depends-on: unistd stat [test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1] configure.ac: gl_FUNC_READLINK if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then AC_LIBOBJ([readlink]) gl_PREREQ_READLINK fi gl_UNISTD_MODULE_INDICATOR([readlink]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/readlink-tests������������������������������������������������������0000664�0000000�0000000�00000000322�14110572173�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-readlink.h tests/test-readlink.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-readlink check_PROGRAMS += test-readlink ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readlinkat����������������������������������������������������������0000664�0000000�0000000�00000002245�14110572173�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: readlinkat() function: read symlinks relative to a directory Files: lib/readlinkat.c lib/at-func.c m4/readlinkat.m4 Depends-on: unistd extensions at-internal [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] errno [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] fchdir [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] fcntl-h [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] filename [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] fstatat [test $HAVE_READLINKAT = 1 && test $REPLACE_READLINKAT = 1] openat-die [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] openat-h [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] save-cwd [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] readlink [test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1] configure.ac: gl_FUNC_READLINKAT if test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1; then AC_LIBOBJ([readlinkat]) fi gl_UNISTD_MODULE_INDICATOR([readlinkat]) Makefile.am: Include: <fcntl.h> <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readlinkat-tests����������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-readlink.h tests/test-readlinkat.c tests/signature.h tests/macros.h Depends-on: ignore-value openat symlinkat unlinkat configure.ac: Makefile.am: TESTS += test-readlinkat check_PROGRAMS += test-readlinkat test_readlinkat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readme-release������������������������������������������������������0000664�0000000�0000000�00000001261�14110572173�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Add release instructions customized for the package. You should add a line like perl -pi -e "s/\@PACKAGE\@/$package/g" README-release to autogen.sh or bootstrap.conf's epilogue function to patch the package name in. This is particularly handy for making various URLs copy-and-pastable. Note that, as with any gnulib-tool supplied file, README-release can be customized via a .diff file. This is an easy way to add package-specific instructions. Files: top/README-release Depends-on: announce-gen do-release-commit-and-tag gnu-web-doc-update gnupload maintainer-makefile configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: bug-gnulib@gnu.org �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readtokens����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read tokens from a stream. Files: lib/readtokens.h lib/readtokens.c m4/readtokens.m4 Depends-on: xalloc stdbool configure.ac: gl_READTOKENS Makefile.am: lib_SOURCES += readtokens.c Include: "readtokens.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readtokens-tests����������������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/test-readtokens.c tests/test-readtokens.sh Depends-on: closeout configure.ac: Makefile.am: TESTS += test-readtokens.sh check_PROGRAMS += test-readtokens test_readtokens_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readtokens0���������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0020105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read NUL-separated tokens from a stream. Files: lib/readtokens0.h lib/readtokens0.c Depends-on: obstack stdbool configure.ac: Makefile.am: lib_SOURCES += readtokens0.h readtokens0.c Include: "readtokens0.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/readutmp������������������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read entire utmp file into memory. Files: lib/readutmp.h lib/readutmp.c m4/readutmp.m4 Depends-on: extensions xalloc stdbool stdint fopen-gnu unlocked-io-internal configure.ac: gl_READUTMP if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then AC_LIBOBJ([readutmp]) fi Makefile.am: Include: "readutmp.h" License: GPL Maintainer: Jim Meyering & Paul Eggert ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/realloc-gnu���������������������������������������������������������0000664�0000000�0000000�00000000756�14110572173�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: realloc() function that is glibc compatible. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: lib/realloc.c Depends-on: realloc-posix configure.ac: gl_FUNC_REALLOC_GNU if test $REPLACE_REALLOC = 1; then AC_LIBOBJ([realloc]) fi Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������gnulib-20210822~d383792/modules/realloc-gnu-tests���������������������������������������������������0000664�0000000�0000000�00000000235�14110572173�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-realloc-gnu.c tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-realloc-gnu check_PROGRAMS += test-realloc-gnu �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/realloc-posix�������������������������������������������������������0000664�0000000�0000000�00000000765�14110572173�0020463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: realloc() function: allocate memory with indefinite extent. Files: lib/realloc.c m4/realloc.m4 m4/malloc.m4 Depends-on: stdlib free-posix [test $REPLACE_REALLOC = 1] malloc-posix [test $REPLACE_REALLOC = 1] xalloc-oversized [test $REPLACE_REALLOC = 1] configure.ac: gl_FUNC_REALLOC_POSIX if test $REPLACE_REALLOC = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-posix]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all �����������gnulib-20210822~d383792/modules/reallocarray��������������������������������������������������������0000664�0000000�0000000�00000001155�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: reallocarray function that is glibc compatible. Files: lib/reallocarray.c m4/malloc.m4 m4/reallocarray.m4 Depends-on: extensions intprops [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1] realloc-gnu [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1] stdlib configure.ac: gl_FUNC_REALLOCARRAY if test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1; then AC_LIBOBJ([reallocarray]) gl_PREREQ_REALLOCARRAY fi gl_MODULE_INDICATOR([reallocarray]) gl_STDLIB_MODULE_INDICATOR([reallocarray]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/reallocarray-tests��������������������������������������������������0000664�0000000�0000000�00000000262�14110572173�0021512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-reallocarray.c tests/signature.h tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-reallocarray check_PROGRAMS += test-reallocarray ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/recv����������������������������������������������������������������0000664�0000000�0000000�00000001021�14110572173�0016623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: recv() function: receive (read) data from a connected socket. Files: lib/recv.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([recv]) fi gl_SYS_SOCKET_MODULE_INDICATOR([recv]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/recv-tests����������������������������������������������������������0000664�0000000�0000000�00000000302�14110572173�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-recv.c tests/signature.h tests/macros.h Depends-on: sockets configure.ac: Makefile.am: TESTS += test-recv check_PROGRAMS += test-recv test_recv_LDADD = $(LDADD) @LIBSOCKET@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/recvfrom������������������������������������������������������������0000664�0000000�0000000�00000001162�14110572173�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: recvfrom() function: receive (read) data from a potentially unconnected socket. Files: lib/recvfrom.c lib/w32sock.h Depends-on: extensions sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] getpeername [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([recvfrom]) fi gl_SYS_SOCKET_MODULE_INDICATOR([recvfrom]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/recvfrom-tests������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-recvfrom.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-recvfrom check_PROGRAMS += test-recvfrom test_recvfrom_LDADD = $(LDADD) @LIBSOCKET@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/regex���������������������������������������������������������������0000664�0000000�0000000�00000003000�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Regular expression matching. Files: lib/regex.h lib/regex.c lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/regcomp.c m4/eealloc.m4 m4/regex.m4 m4/mbstate_t.m4 Depends-on: c99 extensions ssize_t attribute [test $ac_use_included_regex = yes] btowc [test $ac_use_included_regex = yes] builtin-expect [test $ac_use_included_regex = yes] dynarray [test $ac_use_included_regex = yes] intprops [test $ac_use_included_regex = yes] langinfo [test $ac_use_included_regex = yes] libc-config [test $ac_use_included_regex = yes] lock [test $ac_use_included_regex = yes] memcmp [test $ac_use_included_regex = yes] memmove [test $ac_use_included_regex = yes] mbrtowc [test $ac_use_included_regex = yes] mbsinit [test $ac_use_included_regex = yes] nl_langinfo [test $ac_use_included_regex = yes] stdbool [test $ac_use_included_regex = yes] stdint [test $ac_use_included_regex = yes] verify [test $ac_use_included_regex = yes] wchar [test $ac_use_included_regex = yes] wcrtomb [test $ac_use_included_regex = yes] wctype-h [test $ac_use_included_regex = yes] wctype [test $ac_use_included_regex = yes] configure.ac: gl_REGEX if test $ac_use_included_regex = yes; then AC_LIBOBJ([regex]) gl_PREREQ_REGEX fi Makefile.am: Include: <regex.h> Link: $(LIB_MBRTOWC) $(LIBTHREAD) $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: all gnulib-20210822~d383792/modules/regex-quote���������������������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Construct a regular expression from a literal string. Files: lib/regex-quote.h lib/regex-quote.c Depends-on: stdbool xalloc mbuiter configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += regex-quote.c Include: "regex-quote.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/regex-quote-tests���������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0021303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-regex-quote.c tests/macros.h Depends-on: regex xalloc configure.ac: Makefile.am: TESTS += test-regex-quote check_PROGRAMS += test-regex-quote test_regex_quote_LDADD = $(LDADD) $(LIBUNISTRING) $(LIBINTL) $(LIB_MBRTOWC) $(LIBTHREAD) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/regex-tests���������������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-regex.c tests/macros.h Depends-on: gettext-h localcharset wctype-h configure.ac: Makefile.am: TESTS += test-regex check_PROGRAMS += test-regex test_regex_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) @LIBINTL@ $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/regexprops-generic��������������������������������������������������0000664�0000000�0000000�00000000312�14110572173�0021476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Describe the various regular expression flavors. Files: doc/regexprops-generic.texi Depends-on: configure.ac: Makefile.am: Include: License: public domain Maintainer: James Youngman ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/relocatable-lib�����������������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Help make libraries relocatable, that is, to allow them to function properly when copied to an arbitrary directory. Files: doc/relocatable.texi lib/relocatable.h lib/relocatable.c lib/relocatable.valgrind m4/relocatable-lib.m4 Depends-on: xalloc strdup configure.ac: gl_RELOCATABLE_LIBRARY if test $RELOCATABLE = yes; then AC_LIBOBJ([relocatable]) fi Makefile.am: Include: "relocatable.h" License: GPL Maintainer: Ben Pfaff ������������������������������������������������������������������gnulib-20210822~d383792/modules/relocatable-lib-lgpl������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0021646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Help make libraries relocatable, that is, to allow them to function properly when copied to an arbitrary directory. Files: doc/relocatable.texi lib/relocatable.h lib/relocatable.c lib/relocatable.valgrind m4/relocatable-lib.m4 Depends-on: strdup configure.ac: gl_RELOCATABLE_LIBRARY if test $RELOCATABLE = yes; then AC_LIBOBJ([relocatable]) fi Makefile.am: DEFS += -DNO_XMALLOC Include: "relocatable.h" License: LGPLv2+ Maintainer: Ben Pfaff ������������������������������������������������gnulib-20210822~d383792/modules/relocatable-perl����������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0021111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Help make Perl scripts relocatable, that is, to allow them to function properly when copied to an arbitrary directory. Files: doc/relocatable.texi build-aux/relocatable.pl.in m4/relocatable-lib.m4 Depends-on: configure.ac: AC_REQUIRE([gl_RELOCATABLE_NOP]) relocatable_pl=$ac_aux_dir/relocatable.pl.in AC_SUBST_FILE([relocatable_pl]) Makefile.am: Include: License: GPL Maintainer: Ben Pfaff, Reuben Thomas ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/relocatable-prog����������������������������������������������������0000664�0000000�0000000�00000002255�14110572173�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Help make programs relocatable, that is, to allow them to function properly when copied to an arbitrary directory. Files: build-aux/config.libpath build-aux/reloc-ldflags build-aux/libtool-reloc doc/relocatable.texi lib/relocatable.h lib/relocatable.c lib/progreloc.c m4/relocatable.m4 m4/relocatable-lib.m4 m4/lib-ld.m4 Depends-on: relocatable-prog-wrapper progname canonicalize-lgpl xalloc xreadlink open stdbool unistd memcmp strdup configure.ac: gl_RELOCATABLE([$gl_source_base]) if test $RELOCATABLE = yes; then AC_LIBOBJ([progreloc]) AC_LIBOBJ([relocatable]) fi Makefile.am: DEFS += -DEXEEXT=\"@EXEEXT@\" if RELOCATABLE_VIA_WRAPPER uninstall-hook: uninstall-relocwrapper uninstall-relocwrapper: if test $(RELOCATABLE) = yes; then \ case '$(EXEEXT)' in \ .bin*) ;; \ *) cd $(top_builddir) && \ $(MAKE) $(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT) \ AM_MAKEFLAGS='$(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT)' \ uninstall ;; \ esac; \ fi endif ## Automake warns about conditionally added dependencies to unconditionally defined targets. .PHONY: uninstall-relocwrapper Include: "relocatable.h" "progname.h" License: GPL Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/relocatable-prog-wrapper��������������������������������������������0000664�0000000�0000000�00000003054�14110572173�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Source for the wrapper program that is required for making programs relocatable that depend on shared libraries installed with the same installation prefix. Files: build-aux/install-reloc lib/relocwrapper.c lib/progname.h lib/progname.c lib/progreloc.c lib/areadlink.h lib/areadlink.c lib/careadlinkat.h lib/careadlinkat.c lib/allocator.h lib/allocator.c lib/readlink.c lib/stat.c lib/canonicalize-lgpl.c lib/scratch_buffer.h lib/malloc/scratch_buffer.h lib/malloc/scratch_buffer_dupfree.c lib/malloc/scratch_buffer_grow.c lib/malloc/scratch_buffer_grow_preserve.c lib/malloc/scratch_buffer_set_array_size.c lib/malloc.c lib/realloc.c lib/free.c lib/mempcpy.c lib/rawmemchr.c lib/malloca.h lib/malloca.c lib/relocatable.h lib/relocatable.c lib/setenv.c lib/c-ctype.h lib/c-ctype.c m4/largefile.m4 m4/malloca.m4 m4/canonicalize.m4 m4/lstat.m4 m4/eealloc.m4 m4/environ.m4 m4/free.m4 m4/malloc.m4 m4/mempcpy.m4 m4/rawmemchr.m4 m4/readlink.m4 m4/realloc.m4 m4/relocatable-lib.m4 m4/setenv.m4 Depends-on: c99 double-slash-root eloop-threshold environ errno fcntl-h filename idx intprops largefile libc-config pathmax ssize_t stdalign stdbool stddef stdint stdlib string sys_stat unistd verify xalloc-oversized configure.ac-early: AC_REQUIRE([AC_SYS_LARGEFILE]) configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_FUNC_READLINK_SEPARATE gl_CANONICALIZE_LGPL_SEPARATE gl_FUNC_MALLOC_POSIX gl_FUNC_REALLOC_POSIX gl_FUNC_FREE gl_FUNC_MEMPCPY gl_FUNC_RAWMEMCHR gl_MALLOCA gl_RELOCATABLE_LIBRARY gl_FUNC_SETENV_SEPARATE Makefile.am: Include: License: GPL Maintainer: Ben Pfaff ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/relocatable-script��������������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0021453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Help make shell scripts relocatable, that is, to allow them to function properly when copied to an arbitrary directory. Files: doc/relocatable.texi build-aux/relocatable.sh.in m4/relocatable-lib.m4 Depends-on: configure.ac: AC_REQUIRE([gl_RELOCATABLE_NOP]) relocatable_sh=$ac_aux_dir/relocatable.sh.in AC_SUBST_FILE([relocatable_sh]) Makefile.am: Include: License: GPL Maintainer: Ben Pfaff �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainder�����������������������������������������������������������0000664�0000000�0000000�00000001511�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainder() function: floating-point remainder function. Files: lib/remainder.c m4/remainder.m4 m4/mathfunc.m4 Depends-on: math isfinite [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] signbit [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] fabs [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] fmod [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] isnand [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] isinf [test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1] configure.ac: gl_FUNC_REMAINDER if test $HAVE_REMAINDER = 0 || test $REPLACE_REMAINDER = 1; then AC_LIBOBJ([remainder]) fi gl_MATH_MODULE_INDICATOR([remainder]) Makefile.am: Include: <math.h> Link: $(REMAINDER_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainder-ieee������������������������������������������������������0000664�0000000�0000000�00000000403�14110572173�0020542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainder() function according to ISO C 99 with IEC 60559. Files: m4/remainder-ieee.m4 Depends-on: remainder fpieee configure.ac: gl_FUNC_REMAINDER_IEEE Makefile.am: Include: <math.h> Link: $(REMAINDER_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainder-ieee-tests������������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0021713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainder-ieee.c tests/test-remainder-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-remainder-ieee check_PROGRAMS += test-remainder-ieee test_remainder_ieee_LDADD = $(LDADD) @REMAINDER_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainder-tests�����������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainder.c tests/test-remainder.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-remainder check_PROGRAMS += test-remainder test_remainder_SOURCES = test-remainder.c randomd.c test_remainder_LDADD = $(LDADD) @REMAINDER_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderf����������������������������������������������������������0000664�0000000�0000000�00000001705�14110572173�0020011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainderf() function: floating-point remainder function. Files: lib/remainderf.c lib/remainder.c m4/remainderf.m4 m4/mathfunc.m4 Depends-on: math extensions remainder [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] isfinite [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] signbit [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] fabsf [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] fmodf [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] isnanf [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] isinf [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] configure.ac: gl_FUNC_REMAINDERF if test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1; then AC_LIBOBJ([remainderf]) fi gl_MATH_MODULE_INDICATOR([remainderf]) Makefile.am: Include: <math.h> Link: $(REMAINDERF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������gnulib-20210822~d383792/modules/remainderf-ieee�����������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0020714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainderf() function according to ISO C 99 with IEC 60559. Files: m4/remainderf-ieee.m4 Depends-on: remainderf fpieee remainder-ieee [test $HAVE_REMAINDERF = 0 || test $REPLACE_REMAINDERF = 1] configure.ac: gl_FUNC_REMAINDERF_IEEE Makefile.am: Include: <math.h> Link: $(REMAINDERF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderf-ieee-tests�����������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainderf-ieee.c tests/test-remainder-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-remainderf-ieee check_PROGRAMS += test-remainderf-ieee test_remainderf_ieee_LDADD = $(LDADD) @REMAINDERF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderf-tests����������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainderf.c tests/test-remainder.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-remainderf check_PROGRAMS += test-remainderf test_remainderf_SOURCES = test-remainderf.c randomf.c test_remainderf_LDADD = $(LDADD) @REMAINDERF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderl����������������������������������������������������������0000664�0000000�0000000�00000002641�14110572173�0020017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainderl() function: floating-point remainder function. Files: lib/remainderl.c lib/remainder.c m4/remainderl.m4 m4/mathfunc.m4 Depends-on: math extensions remainder [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isfinite [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] signbit [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fabsl [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] fmodl [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isinf [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_REMAINDERL if test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; then AC_LIBOBJ([remainderl]) fi gl_MATH_MODULE_INDICATOR([remainderl]) Makefile.am: Include: <math.h> Link: $(REMAINDERL_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderl-ieee�����������������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainderl() function according to ISO C 99 with IEC 60559. Files: m4/remainderl-ieee.m4 Depends-on: remainderl fpieee remainder-ieee [{ test $HAVE_REMAINDERL = 0 || test $REPLACE_REMAINDERL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_REMAINDERL_IEEE Makefile.am: Include: <math.h> Link: $(REMAINDERL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderl-ieee-tests�����������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0022056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainderl-ieee.c tests/test-remainder-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-remainderl-ieee check_PROGRAMS += test-remainderl-ieee test_remainderl_ieee_LDADD = $(LDADD) @REMAINDERL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remainderl-tests����������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainderl.c tests/test-remainder.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-remainderl check_PROGRAMS += test-remainderl test_remainderl_SOURCES = test-remainderl.c randoml.c test_remainderl_LDADD = $(LDADD) @REMAINDERL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remove��������������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remove() function: remove a file or directory Files: lib/remove.c m4/remove.m4 Depends-on: stdio rmdir [test $REPLACE_REMOVE = 1] unlink [test $REPLACE_REMOVE = 1] configure.ac: gl_FUNC_REMOVE if test $REPLACE_REMOVE = 1; then AC_LIBOBJ([remove]) fi gl_STDIO_MODULE_INDICATOR([remove]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/remove-tests��������������������������������������������������������0000664�0000000�0000000�00000000267�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remove.c tests/signature.h tests/macros.h Depends-on: ignore-value symlink sys_stat configure.ac: Makefile.am: TESTS += test-remove check_PROGRAMS += test-remove �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rename��������������������������������������������������������������0000664�0000000�0000000�00000001411�14110572173�0017136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rename() function: change the name or location of a file. Files: lib/rename.c m4/rename.m4 Depends-on: stdio canonicalize-lgpl [test $REPLACE_RENAME = 1] chdir [test $REPLACE_RENAME = 1] dirname-lgpl [test $REPLACE_RENAME = 1] free-posix [test $REPLACE_RENAME = 1] lstat [test $REPLACE_RENAME = 1] rmdir [test $REPLACE_RENAME = 1] same-inode [test $REPLACE_RENAME = 1] stat [test $REPLACE_RENAME = 1] stdbool [test $REPLACE_RENAME = 1] strdup [test $REPLACE_RENAME = 1] configure.ac: gl_FUNC_RENAME if test $REPLACE_RENAME = 1; then AC_LIBOBJ([rename]) fi gl_STDIO_MODULE_INDICATOR([rename]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rename-tests��������������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0020307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rename.h tests/test-rename.c tests/signature.h tests/macros.h Depends-on: ignore-value errno link stdbool symlink sys_stat opendir readdir closedir configure.ac: Makefile.am: TESTS += test-rename check_PROGRAMS += test-rename �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/renameat������������������������������������������������������������0000664�0000000�0000000�00000001012�14110572173�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: renameat() function: rename a file, relative to two directories Files: lib/renameat.c lib/at-func2.c m4/renameat.m4 Depends-on: renameatu [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] configure.ac: gl_FUNC_RENAMEAT if test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1; then AC_LIBOBJ([renameat]) fi if test $HAVE_RENAMEAT = 0; then AC_LIBOBJ([at-func2]) fi gl_STDIO_MODULE_INDICATOR([renameat]) Makefile.am: Include: <stdio.h> License: GPL Maintainer: Jim Meyering, Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/renameat-tests������������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rename.h tests/test-renameat.c tests/signature.h tests/macros.h Depends-on: ignore-value filenamecat getcwd-lgpl opendir readdir closedir configure.ac: Makefile.am: TESTS += test-renameat check_PROGRAMS += test-renameat test_renameat_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/renameatu�����������������������������������������������������������0000664�0000000�0000000�00000002011�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: renameatu() function: rename a file, relative to two dirs, with unsigned flag Files: lib/at-func2.c lib/renameatu.c lib/renameatu.h m4/renameat.m4 Depends-on: stdio extensions fcntl-h filenamecat-lgpl [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] openat-h [test $HAVE_RENAMEAT = 0 || test $REPLACE_RENAMEAT = 1] statat [test $REPLACE_RENAMEAT = 1] stdbool [test $REPLACE_RENAMEAT = 1] at-internal [test $HAVE_RENAMEAT = 0] filename [test $HAVE_RENAMEAT = 0] fstat [test $HAVE_RENAMEAT = 0] getcwd-lgpl [test $HAVE_RENAMEAT = 0] openat-die [test $HAVE_RENAMEAT = 0] rename [test $HAVE_RENAMEAT = 0] same-inode [test $HAVE_RENAMEAT = 0] save-cwd [test $HAVE_RENAMEAT = 0] stat [test $HAVE_RENAMEAT = 0] configure.ac: gl_FUNC_RENAMEAT if test $HAVE_RENAMEAT = 0; then AC_LIBOBJ([at-func2]) fi Makefile.am: lib_SOURCES += renameatu.c Include: "renameatu.h" License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/renameatu-tests�����������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rename.h tests/test-renameatu.c tests/signature.h tests/macros.h Depends-on: ignore-value filenamecat getcwd-lgpl opendir readdir closedir configure.ac: Makefile.am: TESTS += test-renameatu check_PROGRAMS += test-renameatu test_renameatu_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rewinddir�����������������������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rewinddir() function: restart reading the entries of a directory from the beginning Files: lib/rewinddir.c lib/dirent-private.h m4/rewinddir.m4 Depends-on: dirent largefile configure.ac: gl_FUNC_REWINDDIR if test $HAVE_REWINDDIR = 0; then AC_LIBOBJ([rewinddir]) fi gl_DIRENT_MODULE_INDICATOR([rewinddir]) Makefile.am: Include: <dirent.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rint����������������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rint() function: round according to the current rounding mode. Files: lib/rint.c m4/rint.m4 m4/mathfunc.m4 Depends-on: math configure.ac: gl_FUNC_RINT if test $HAVE_RINT = 0; then AC_LIBOBJ([rint]) fi gl_MATH_MODULE_INDICATOR([rint]) Makefile.am: Include: <math.h> Link: $(RINT_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rint-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rint() function according to ISO C 99 with IEC 60559. Files: Depends-on: rint fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(RINT_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rint-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rint-ieee.c tests/test-rint-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-rint-ieee check_PROGRAMS += test-rint-ieee test_rint_ieee_LDADD = $(LDADD) @RINT_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rint-tests����������������������������������������������������������0000664�0000000�0000000�00000000504�14110572173�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rint.c tests/test-rint.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: isnand-nolibm configure.ac: Makefile.am: TESTS += test-rint check_PROGRAMS += test-rint test_rint_SOURCES = test-rint.c randomd.c test_rint_LDADD = $(LDADD) @RINT_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintf���������������������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0017023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rintf() function: round according to the current rounding mode. Files: lib/rintf.c lib/rint.c m4/rintf.m4 m4/mathfunc.m4 Depends-on: math extensions configure.ac: gl_FUNC_RINTF if test $HAVE_RINTF = 0; then AC_LIBOBJ([rintf]) fi gl_MATH_MODULE_INDICATOR([rintf]) Makefile.am: Include: <math.h> Link: $(RINTF_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rintf() function according to ISO C 99 with IEC 60559. Files: Depends-on: rintf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(RINTF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintf-ieee.c tests/test-rint-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-rintf-ieee check_PROGRAMS += test-rintf-ieee test_rintf_ieee_LDADD = $(LDADD) @RINTF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintf-tests���������������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintf.c tests/test-rint.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: isnanf-nolibm configure.ac: Makefile.am: TESTS += test-rintf check_PROGRAMS += test-rintf test_rintf_SOURCES = test-rintf.c randomf.c test_rintf_LDADD = $(LDADD) @RINTF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintl���������������������������������������������������������������0000664�0000000�0000000�00000000776�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rintl() function: round according to the current rounding mode. Files: lib/rintl.c lib/rint.c m4/rintl.m4 m4/mathfunc.m4 Depends-on: math extensions rint [{ test $HAVE_RINTL = 0 || test $REPLACE_RINTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_RINTL if test $HAVE_RINTL = 0 || test $REPLACE_RINTL = 1; then AC_LIBOBJ([rintl]) fi gl_MATH_MODULE_INDICATOR([rintl]) Makefile.am: Include: <math.h> Link: $(RINTL_LIBM) License: LGPL Maintainer: all ��gnulib-20210822~d383792/modules/rintl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rintl() function according to ISO C 99 with IEC 60559. Files: Depends-on: rintl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(RINTL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintl-ieee.c tests/test-rint-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-rintl-ieee check_PROGRAMS += test-rintl-ieee test_rintl_ieee_LDADD = $(LDADD) @RINTL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rintl-tests���������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintl.c tests/test-rint.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw isnanl-nolibm float configure.ac: Makefile.am: TESTS += test-rintl check_PROGRAMS += test-rintl test_rintl_SOURCES = test-rintl.c randoml.c test_rintl_LDADD = $(LDADD) @RINTL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rmdir���������������������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rmdir() function: delete a directory. Files: lib/rmdir.c m4/rmdir.m4 Depends-on: unistd filename [test $REPLACE_RMDIR = 1] sys_stat [test $REPLACE_RMDIR = 1] configure.ac: gl_FUNC_RMDIR if test $REPLACE_RMDIR = 1; then AC_LIBOBJ([rmdir]) fi gl_UNISTD_MODULE_INDICATOR([rmdir]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rmdir-errno���������������������������������������������������������0000664�0000000�0000000�00000000363�14110572173�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rmdir errno for nonempty directories Status: obsolete Notice: This module is obsolete. Files: m4/rmdir-errno.m4 Depends-on: configure.ac: gl_FUNC_RMDIR_NOTEMPTY Makefile.am: Include: License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rmdir-tests���������������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rmdir.h tests/test-rmdir.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink configure.ac: Makefile.am: TESTS += test-rmdir check_PROGRAMS += test-rmdir ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/root-uid������������������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0017435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ROOT_UID macro: superuser's user ID Files: lib/root-uid.h Depends-on: configure.ac: Makefile.am: Include: "root-uid.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/round���������������������������������������������������������������0000664�0000000�0000000�00000001055�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: round() function: round toward nearest, breaking ties away from zero. Files: lib/round.c m4/check-math-lib.m4 m4/round.m4 m4/floor.m4 m4/ceil.m4 Depends-on: math extensions float [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1] floor [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1] configure.ac: gl_FUNC_ROUND if test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1; then AC_LIBOBJ([round]) fi gl_MATH_MODULE_INDICATOR([round]) Makefile.am: Include: <math.h> Link: $(ROUND_LIBM) License: LGPL Maintainer: Ben Pfaff �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/round-ieee����������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: round() function according to ISO C 99 with IEC 60559. Files: m4/round-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: round floor-ieee [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1] ceil-ieee [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1] configure.ac: gl_FUNC_ROUND_IEEE Makefile.am: Include: <math.h> Link: $(ROUND_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/round-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-round-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-round-ieee check_PROGRAMS += test-round-ieee test_round_ieee_LDADD = $(LDADD) @ROUND_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/round-tests���������������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-round1.c tests/test-round2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: isnand-nolibm stdbool stdint verify configure.ac: Makefile.am: TESTS += test-round1 test-round2 check_PROGRAMS += test-round1 test-round2 test_round1_LDADD = $(LDADD) @ROUND_LIBM@ test_round2_LDADD = $(LDADD) @ROUND_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundf��������������������������������������������������������������0000664�0000000�0000000�00000001004�14110572173�0017162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: roundf() function: round toward nearest, breaking ties away from zero. Files: lib/round.c lib/roundf.c m4/check-math-lib.m4 m4/roundf.m4 m4/floorf.m4 m4/ceilf.m4 Depends-on: math extensions float [test $HAVE_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] configure.ac: gl_FUNC_ROUNDF if test $HAVE_ROUNDF = 0 || test $REPLACE_ROUNDF = 1; then AC_LIBOBJ([roundf]) fi gl_MATH_MODULE_INDICATOR([roundf]) Makefile.am: Include: <math.h> Link: $(ROUNDF_LIBM) License: LGPL Maintainer: Ben Pfaff ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: roundf() function according to ISO C 99 with IEC 60559. Files: m4/roundf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: roundf floorf-ieee [test $HAVE_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] ceilf-ieee [test $HAVE_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] configure.ac: gl_FUNC_ROUNDF_IEEE Makefile.am: Include: <math.h> Link: $(ROUNDF_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundf-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-roundf-ieee check_PROGRAMS += test-roundf-ieee test_roundf_ieee_LDADD = $(LDADD) @ROUNDF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundf-tests��������������������������������������������������������0000664�0000000�0000000�00000000630�14110572173�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundf1.c tests/test-round2.c tests/test-roundf2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: ceilf floorf isnanf-nolibm stdbool stdint verify configure.ac: Makefile.am: TESTS += test-roundf1 test-roundf2 check_PROGRAMS += test-roundf1 test-roundf2 test_roundf1_LDADD = $(LDADD) @ROUNDF_LIBM@ test_roundf2_LDADD = $(LDADD) @ROUNDF_LIBM@ ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundl��������������������������������������������������������������0000664�0000000�0000000�00000001254�14110572173�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: roundl() function: round toward nearest, breaking ties away from zero. Files: lib/round.c lib/roundl.c m4/check-math-lib.m4 m4/roundl.m4 m4/floorl.m4 m4/ceill.m4 Depends-on: math extensions round [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ROUNDL if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then AC_LIBOBJ([roundl]) fi gl_MATH_MODULE_INDICATOR([roundl]) Makefile.am: Include: <math.h> Link: $(ROUNDL_LIBM) License: LGPL Maintainer: Ben Pfaff ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0020103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: roundl() function according to ISO C 99 with IEC 60559. Files: m4/roundl-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: roundl floorl-ieee ceill-ieee configure.ac: gl_FUNC_ROUNDL_IEEE Makefile.am: Include: <math.h> Link: $(ROUNDL_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundl-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-roundl-ieee check_PROGRAMS += test-roundl-ieee test_roundl_ieee_LDADD = $(LDADD) @ROUNDL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/roundl-tests��������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundl.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: fpucw isnanl-nolibm float configure.ac: Makefile.am: TESTS += test-roundl check_PROGRAMS += test-roundl test_roundl_LDADD = $(LDADD) @ROUNDL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/rpmatch�������������������������������������������������������������0000664�0000000�0000000�00000001157�14110572173�0017334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent classification of a response as matching "yes" or "no". Files: lib/rpmatch.c m4/rpmatch.m4 Depends-on: stdlib extensions stdbool [test $HAVE_RPMATCH = 0] gettext-h [test $HAVE_RPMATCH = 0] regex [test $HAVE_RPMATCH = 0] strdup [test $HAVE_RPMATCH = 0] configure.ac: gl_FUNC_RPMATCH if test $HAVE_RPMATCH = 0; then AC_LIBOBJ([rpmatch]) gl_PREREQ_RPMATCH fi gl_STDLIB_MODULE_INDICATOR([rpmatch]) Makefile.am: Include: <stdlib.h> Link: $(LIB_MBRTOWC) $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/safe-alloc����������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A set of macros to make calls to alloc/calloc/realloc safer. Files: lib/safe-alloc.h lib/safe-alloc.c m4/safe-alloc.m4 Depends-on: calloc-gnu reallocarray configure.ac: gl_SAFE_ALLOC Makefile.am: lib_SOURCES += safe-alloc.c Include: "safe-alloc.h" License: LGPLv2+ Maintainer: David Lutterkort ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/safe-alloc-tests����������������������������������������������������0000664�0000000�0000000�00000000223�14110572173�0021035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-safe-alloc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-safe-alloc check_PROGRAMS += test-safe-alloc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/safe-read�����������������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An interface to the read() function that retries after interrupts. Files: lib/safe-read.h lib/safe-read.c lib/sys-limits.h m4/safe-read.m4 Depends-on: read ssize_t configure.ac: gl_PREREQ_SAFE_READ Makefile.am: lib_SOURCES += safe-read.c Include: "safe-read.h" License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/safe-write����������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An interface to the write() function that retries after interrupts. Files: lib/safe-write.h lib/safe-write.c lib/safe-read.c lib/sys-limits.h m4/safe-write.m4 m4/safe-read.m4 Depends-on: ssize_t write configure.ac: gl_PREREQ_SAFE_WRITE Makefile.am: lib_SOURCES += safe-write.c Include: "safe-write.h" License: LGPLv2+ Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/same����������������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0016620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether two file names refer to the same directory entry of the same directory. Files: lib/same.h lib/same.c m4/same.m4 Depends-on: c99 error dirname fstat fstatat openat same-inode stdbool memcmp configure.ac: gl_SAME Makefile.am: lib_SOURCES += same.c Include: "same.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/same-inode����������������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: compare inodes Files: lib/same-inode.h Depends-on: sys_types configure.ac: Makefile.am: Include: "same-inode.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/save-cwd������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0017405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Save and restore the current working directory. Files: lib/save-cwd.h lib/save-cwd.c m4/save-cwd.m4 Depends-on: chdir-long fchdir fd-safer-flag getcwd-lgpl open stdbool unistd-safer configure.ac: gl_SAVE_CWD Makefile.am: lib_SOURCES += save-cwd.c Include: "save-cwd.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/savedir�������������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0017327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the entries of a directory (just the names) as an argz string. Files: lib/savedir.h lib/savedir.c m4/savedir.m4 Depends-on: closedir dirent-safer fdopendir free-posix opendir readdir stpcpy xalloc configure.ac: gl_SAVEDIR Makefile.am: lib_SOURCES += savedir.c Include: "savedir.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/savewd��������������������������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Save and restore the working directory, possibly using a child process. Files: lib/savewd.h lib/savewd.c m4/savewd.m4 Depends-on: assure attribute chdir errno extern-inline fchdir fcntl-safer fcntl-h filename raise stdbool stdlib sys_wait unistd xalloc configure.ac: gl_SAVEWD Makefile.am: lib_SOURCES += savewd.h savewd.c Include: "savewd.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/scandir�������������������������������������������������������������0000664�0000000�0000000�00000000622�14110572173�0017315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: scandir() function: collect entries of a directory Files: lib/scandir.c m4/scandir.m4 Depends-on: builtin-expect closedir dirent extensions largefile opendir readdir configure.ac: gl_FUNC_SCANDIR if test $HAVE_SCANDIR = 0; then AC_LIBOBJ([scandir]) gl_PREREQ_SCANDIR fi gl_DIRENT_MODULE_INDICATOR([scandir]) Makefile.am: Include: <dirent.h> License: LGPL Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sched���������������������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sched.h> include file. Files: lib/sched.in.h m4/sched_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_SCHED_H gl_SCHED_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += sched.h # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. sched.h: sched.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ -e 's/@''GNULIB_SCHED_YIELD''@/$(GNULIB_SCHED_YIELD)/g' \ -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \ -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sched.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sched.h sched.h-t Include: <sched.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������gnulib-20210822~d383792/modules/sched-tests���������������������������������������������������������0000664�0000000�0000000�00000000165�14110572173�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sched.c Depends-on: configure.ac: Makefile.am: TESTS += test-sched check_PROGRAMS += test-sched �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sched_yield���������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Schedule other threads to run. Files: lib/sched_yield.c m4/sched_yield.m4 m4/threadlib.m4 Depends-on: sched configure.ac: gl_FUNC_SCHED_YIELD if test $HAVE_SCHED_YIELD = 0 || test $REPLACE_SCHED_YIELD = 1; then AC_LIBOBJ([sched_yield]) fi gl_SCHED_MODULE_INDICATOR([sched_yield]) Makefile.am: Include: <sched.h> Link: $(LIB_SCHED_YIELD) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/scratch_buffer������������������������������������������������������0000664�0000000�0000000�00000002351�14110572173�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Variable-sized buffer with on-stack default allocation. Files: lib/scratch_buffer.h lib/malloc/scratch_buffer.h lib/malloc/scratch_buffer_dupfree.c lib/malloc/scratch_buffer_grow.c lib/malloc/scratch_buffer_grow_preserve.c lib/malloc/scratch_buffer_set_array_size.c Depends-on: c99 builtin-expect libc-config stdbool stddef malloc-posix realloc-posix free-posix configure.ac: AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h $(AM_V_at)$(MKDIR_P) malloc $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ -e '/libc_hidden_proto/d' \ < $(srcdir)/malloc/scratch_buffer.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t lib_SOURCES += malloc/scratch_buffer_dupfree.c \ malloc/scratch_buffer_grow.c \ malloc/scratch_buffer_grow_preserve.c \ malloc/scratch_buffer_set_array_size.c Include: <scratch_buffer.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/scratch_buffer-tests������������������������������������������������0000664�0000000�0000000�00000000323�14110572173�0022010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-scratch-buffer.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-scratch-buffer check_PROGRAMS += test-scratch-buffer test_scratch_buffer_SOURCES = test-scratch-buffer.c �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/search��������������������������������������������������������������0000664�0000000�0000000�00000003205�14110572173�0017137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <search.h>. Files: lib/search.in.h m4/search_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_SEARCH_H gl_SEARCH_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += search.h # We need the following in order to create <search.h> when the system # doesn't have one that works with the given compiler. search.h: search.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_SEARCH_H''@|$(HAVE_SEARCH_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SEARCH_H''@|$(NEXT_SEARCH_H)|g' \ -e 's|@''HAVE_TYPE_VISIT''@|$(HAVE_TYPE_VISIT)|g' \ -e 's/@''GNULIB_TSEARCH''@/$(GNULIB_TSEARCH)/g' \ -e 's/@''GNULIB_MDA_LFIND''@/$(GNULIB_MDA_LFIND)/g' \ -e 's/@''GNULIB_MDA_LSEARCH''@/$(GNULIB_MDA_LSEARCH)/g' \ -e 's|@''HAVE_TSEARCH''@|$(HAVE_TSEARCH)|g' \ -e 's|@''HAVE_TWALK''@|$(HAVE_TWALK)|g' \ -e 's|@''REPLACE_TSEARCH''@|$(REPLACE_TSEARCH)|g' \ -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)' \ < $(srcdir)/search.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += search.h search.h-t Include: <search.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/search-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-search-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-search-c++ check_PROGRAMS += test-search-c++ test_search_c___SOURCES = test-search-c++.cc test_search_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/search-tests��������������������������������������������������������0000664�0000000�0000000�00000000211�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-search.c Depends-on: search-c++-tests configure.ac: Makefile.am: TESTS += test-search check_PROGRAMS += test-search ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/secure_getenv�������������������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look up an environment variable, returning 0 in insecure situations. Files: lib/secure_getenv.c m4/secure_getenv.m4 Depends-on: stdlib extensions configure.ac: gl_FUNC_SECURE_GETENV if test $HAVE_SECURE_GETENV = 0; then AC_LIBOBJ([secure_getenv]) gl_PREREQ_SECURE_GETENV fi gl_STDLIB_MODULE_INDICATOR([secure_getenv]) Makefile.am: Include: <stdlib.h> Link: License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/select��������������������������������������������������������������0000664�0000000�0000000�00000001074�14110572173�0017153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: select() function: synchronous I/O multiplexing. Files: lib/select.c m4/select.m4 Depends-on: sys_select alloca [test $REPLACE_SELECT = 1] dup2 [test $REPLACE_SELECT = 1] sockets [test $REPLACE_SELECT = 1] sys_time [test $REPLACE_SELECT = 1] msvc-nothrow [test $REPLACE_SELECT = 1] configure.ac: gl_FUNC_SELECT if test $REPLACE_SELECT = 1; then AC_LIBOBJ([select]) fi gl_SYS_SELECT_MODULE_INDICATOR([select]) Makefile.am: Include: <sys/select.h> Link: $(LIB_SELECT) License: LGPLv2+ Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/select-tests��������������������������������������������������������0000664�0000000�0000000�00000001364�14110572173�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/signature.h tests/test-select.c tests/test-select.h tests/test-select-fd.c tests/test-select-in.sh tests/test-select-out.sh tests/test-select-stdin.c Depends-on: stdbool sys_socket netinet_in arpa_inet unistd sys_ioctl extensions inet_pton errno perror pipe-posix socket bind setsockopt listen connect accept ioctl close gettimeofday configure.ac: AC_CHECK_HEADERS_ONCE([sys/wait.h]) Makefile.am: 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@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/selinux-at����������������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: openat-style fd-relative functions for SE Linux Files: lib/selinux-at.h lib/selinux-at.c lib/at-func.c Depends-on: selinux-h at-internal errno extensions fchdir fcntl-h filename openat-die openat-h save-cwd unistd configure.ac: AC_CHECK_HEADERS([selinux/flask.h]) Makefile.am: lib_SOURCES += selinux-at.h selinux-at.c Include: "selinux-at.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/selinux-h�����������������������������������������������������������0000664�0000000�0000000�00000004431�14110572173�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: SELinux-related headers for systems that lack them. Files: lib/getfilecon.c lib/se-context.in.h lib/se-label.in.h lib/se-selinux.in.h lib/se-context.c lib/se-label.c lib/se-selinux.c m4/selinux-context-h.m4 m4/selinux-label-h.m4 m4/selinux-selinux-h.m4 Depends-on: errno extern-inline configure.ac: gl_HEADERS_SELINUX_SELINUX_H gl_HEADERS_SELINUX_CONTEXT_H gl_HEADERS_SELINUX_LABEL_H if test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes; then AC_LIBOBJ([getfilecon]) fi Makefile.am: lib_SOURCES += se-context.in.h se-label.in.h se-selinux.in.h \ se-context.c se-label.c se-selinux.c BUILT_SOURCES += selinux/selinux.h selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) selinux $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ < $(srcdir)/se-selinux.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t BUILT_SOURCES += $(SELINUX_CONTEXT_H) if GL_GENERATE_SELINUX_CONTEXT_H selinux/context.h: se-context.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) selinux $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ cat $(srcdir)/se-context.in.h; \ } > $@-t && \ mv $@-t $@ else selinux/context.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t BUILT_SOURCES += $(SELINUX_LABEL_H) if GL_GENERATE_SELINUX_LABEL_H selinux/label.h: se-label.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) selinux $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ cat $(srcdir)/se-label.in.h; \ } > $@-t && \ mv $@-t $@ else selinux/label.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += selinux/label.h selinux/label.h-t MOSTLYCLEANDIRS += selinux Include: <selinux/selinux.h> <selinux/context.h> <selinux/label.h> Link: $(LIB_SELINUX) License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/send����������������������������������������������������������������0000664�0000000�0000000�00000001015�14110572173�0016620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: send() function: send (write) data to a connected socket. Files: lib/send.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([send]) fi gl_SYS_SOCKET_MODULE_INDICATOR([send]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/send-tests����������������������������������������������������������0000664�0000000�0000000�00000000302�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-send.c tests/signature.h tests/macros.h Depends-on: sockets configure.ac: Makefile.am: TESTS += test-send check_PROGRAMS += test-send test_send_LDADD = $(LDADD) @LIBSOCKET@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sendto��������������������������������������������������������������0000664�0000000�0000000�00000001043�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sendto() function: send (write) data to a potentially unconnected socket. Files: lib/sendto.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([sendto]) fi gl_SYS_SOCKET_MODULE_INDICATOR([sendto]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sendto-tests��������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sendto.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets inet_pton configure.ac: Makefile.am: TESTS += test-sendto check_PROGRAMS += test-sendto test_sendto_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/servent�������������������������������������������������������������0000664�0000000�0000000�00000000710�14110572173�0017356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Library containing getservent() function, setservent() function, endservent() function, getservbyname() function, getservbyport() function, getprotoent() function, setprotoent() function, endprotoent() function, getprotobyname() function, getprotobynumber() function. Files: m4/servent.m4 Depends-on: sys_socket configure.ac: gl_SERVENT Makefile.am: Include: <netdb.h> Link: $(SERVENT_LIB) License: LGPLv2+ Maintainer: Simon Josefsson ��������������������������������������������������������gnulib-20210822~d383792/modules/set�����������������������������������������������������������������0000664�0000000�0000000�00000000334�14110572173�0016465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract set data type. Files: lib/gl_set.h lib/gl_set.c Depends-on: extern-inline stdbool configure.ac: Makefile.am: lib_SOURCES += gl_set.h gl_set.c Include: "gl_set.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/set-c++�������������������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract set data type as a C++ class. Files: lib/gl_set.hh Depends-on: xset configure.ac: Makefile.am: Include: "gl_set.hh" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/set-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0020167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-set-c++.cc tests/macros.h Depends-on: ansi-c++-opt array-set configure.ac: Makefile.am: if ANSICXX TESTS += test-set-c++ check_PROGRAMS += test-set-c++ test_set_c___SOURCES = test-set-c++.cc test_set_c___LDADD = $(LDADD) @LIBINTL@ endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setenv��������������������������������������������������������������0000664�0000000�0000000�00000001140�14110572173�0017172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: setenv() function: set an environment variable. Files: lib/setenv.c m4/setenv.m4 Depends-on: stdlib malloca [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1] alloca-opt [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1] unistd [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1] environ [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1] configure.ac: gl_FUNC_SETENV if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then AC_LIBOBJ([setenv]) fi gl_STDLIB_MODULE_INDICATOR([setenv]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setenv-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-setenv.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-setenv check_PROGRAMS += test-setenv �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sethostname���������������������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sethostname() function: Set machine's hostname. Files: lib/sethostname.c m4/sethostname.m4 m4/gethostname.m4 Depends-on: unistd errno [test $HAVE_SETHOSTNAME = 0] fopen-gnu [test $HAVE_SETHOSTNAME = 0] configure.ac: gl_FUNC_SETHOSTNAME if test $HAVE_SETHOSTNAME = 0; then AC_LIBOBJ([sethostname]) fi gl_UNISTD_MODULE_INDICATOR([sethostname]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Ben Walton �����������������������������������������������������������gnulib-20210822~d383792/modules/sethostname-tests���������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0021363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sethostname1.c tests/test-sethostname2.c tests/signature.h tests/macros.h Depends-on: gethostname root-uid configure.ac: AC_CHECK_FUNCS_ONCE([geteuid]) Makefile.am: TESTS += test-sethostname1 test-sethostname2 check_PROGRAMS += test-sethostname1 test-sethostname2 test_sethostname2_LDADD = $(LDADD) @GETHOSTNAME_LIB@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setlocale�����������������������������������������������������������0000664�0000000�0000000�00000000730�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: setlocale() function: set the current locale. Files: lib/setlocale.c m4/setlocale.m4 Depends-on: locale localename [test $NEED_SETLOCALE_IMPROVED = 1] setlocale-null [test $NEED_SETLOCALE_MTSAFE = 1] configure.ac: gl_FUNC_SETLOCALE if test $REPLACE_SETLOCALE = 1; then AC_LIBOBJ([setlocale]) gl_PREREQ_SETLOCALE fi gl_LOCALE_MODULE_INDICATOR([setlocale]) Makefile.am: Include: <locale.h> Link: $(LIB_SETLOCALE) License: LGPL Maintainer: all ����������������������������������������gnulib-20210822~d383792/modules/setlocale-null������������������������������������������������������0000664�0000000�0000000�00000001251�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: setlocale_null() function: query the name of the current global locale. Files: lib/setlocale_null.h lib/setlocale_null.c lib/setlocale-lock.c lib/windows-initguard.h m4/setlocale_null.m4 m4/threadlib.m4 m4/visibility.m4 Depends-on: locale snippet/arg-nonnull configure.ac: gl_FUNC_SETLOCALE_NULL if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then AC_LIBOBJ([setlocale-lock]) gl_PREREQ_SETLOCALE_LOCK fi gl_LOCALE_MODULE_INDICATOR([setlocale_null]) Makefile.am: lib_SOURCES += setlocale_null.c Include: #include "setlocale_null.h" or #include <locale.h> Link: $(LIB_SETLOCALE_NULL) License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setlocale-null-tests������������������������������������������������0000664�0000000�0000000�00000001155�14110572173�0021757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-setlocale_null.c tests/test-setlocale_null-mt-one.c tests/test-setlocale_null-mt-all.c Depends-on: thread nanosleep configure.ac: Makefile.am: TESTS += \ test-setlocale_null \ test-setlocale_null-mt-one \ test-setlocale_null-mt-all 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setlocale-tests�����������������������������������������������������0000664�0000000�0000000�00000001215�14110572173�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-setlocale1.sh tests/test-setlocale1.c tests/test-setlocale2.sh tests/test-setlocale2.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: strdup configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-setlocale1.sh test-setlocale2.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-setlocale1 test-setlocale2 test_setlocale1_LDADD = $(LDADD) @LIB_SETLOCALE@ test_setlocale2_LDADD = $(LDADD) @LIB_SETLOCALE@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setsockopt����������������������������������������������������������0000664�0000000�0000000�00000001133�14110572173�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: setsockopt() function: specify optional settings on a socket. Files: lib/setsockopt.c lib/w32sock.h Depends-on: sys_socket socketlib sys_time [test "$ac_cv_header_winsock2_h" = yes] errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([setsockopt]) fi gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/setsockopt-tests����������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-setsockopt.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-setsockopt check_PROGRAMS += test-setsockopt test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/settime�������������������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set the current time, with nanosecond resolution. Files: lib/settime.c m4/settime.m4 Depends-on: clock-time errno extensions sys_time timespec configure.ac: gl_SETTIME Makefile.am: lib_SOURCES += settime.c Include: "timespec.h" Link: $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sh-filename���������������������������������������������������������0000664�0000000�0000000�00000000317�14110572173�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide BOURNE_SHELL, the file name of the standard Bourne shell. Files: m4/sh-filename.m4 Depends-on: configure.ac: gl_SH_FILENAME Makefile.am: Include: License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sh-quote������������������������������������������������������������0000664�0000000�0000000�00000000411�14110572173�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Shell quoting. Files: lib/sh-quote.h lib/sh-quote.c Depends-on: quotearg xalloc configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += sh-quote.h sh-quote.c Include: "sh-quote.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sh-quote-tests������������������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sh-quote.c Depends-on: configure.ac: Makefile.am: TESTS += test-sh-quote check_PROGRAMS += test-sh-quote test_sh_quote_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/shutdown������������������������������������������������������������0000664�0000000�0000000�00000001036�14110572173�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: shutdown() function: initiate a graceful shutdown of a socket. Files: lib/shutdown.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([shutdown]) fi gl_SYS_SOCKET_MODULE_INDICATOR([shutdown]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/shutdown-tests������������������������������������������������������0000664�0000000�0000000�00000000322�14110572173�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-shutdown.c tests/signature.h tests/macros.h Depends-on: sockets configure.ac: Makefile.am: TESTS += test-shutdown check_PROGRAMS += test-shutdown test_shutdown_LDADD = $(LDADD) @LIBSOCKET@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sig2str�������������������������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert between signal names and signal numbers. Files: lib/sig2str.h lib/sig2str.c m4/sig2str.m4 Depends-on: intprops configure.ac: gl_FUNC_SIG2STR if test $ac_cv_func_sig2str = no; then AC_LIBOBJ([sig2str]) gl_PREREQ_SIG2STR fi Makefile.am: Include: "sig2str.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigabbrev_np��������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sigabbrev_np() function: abbreviated name of signals. Files: lib/sigabbrev_np.c m4/sigabbrev_np.m4 Depends-on: extensions string configure.ac: gl_FUNC_SIGABBREV_NP if test $HAVE_SIGABBREV_NP = 0; then AC_LIBOBJ([sigabbrev_np]) fi gl_STRING_MODULE_INDICATOR([sigabbrev_np]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigabbrev_np-tests��������������������������������������������������0000664�0000000�0000000�00000000253�14110572173�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigabbrev_np.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sigabbrev_np check_PROGRAMS += test-sigabbrev_np �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigaction�����������������������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible signal handlers. Files: lib/sigaction.c lib/sig-handler.h lib/sig-handler.c m4/sigaction.m4 Depends-on: extern-inline signal-h sigprocmask [test $HAVE_SIGACTION = 0] configure.ac: gl_SIGACTION if test $HAVE_SIGACTION = 0; then AC_LIBOBJ([sigaction]) gl_PREREQ_SIGACTION fi gl_SIGNAL_MODULE_INDICATOR([sigaction]) Makefile.am: lib_SOURCES += sig-handler.c Include: <signal.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������gnulib-20210822~d383792/modules/sigaction-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigaction.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sigaction check_PROGRAMS += test-sigaction ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigdescr_np���������������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0020177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sigdescr_np() function: English descriptions of signals. Files: lib/sigdescr_np.c m4/sigdescr_np.m4 Depends-on: extensions string configure.ac: gl_FUNC_SIGDESCR_NP if test $HAVE_SIGDESCR_NP = 0; then AC_LIBOBJ([sigdescr_np]) fi gl_STRING_MODULE_INDICATOR([sigdescr_np]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigdescr_np-tests���������������������������������������������������0000664�0000000�0000000�00000000250�14110572173�0021327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigdescr_np.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sigdescr_np check_PROGRAMS += test-sigdescr_np ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signal��������������������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Placeholder for eventual signal() replacement. Files: Depends-on: signal-h configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signal-h������������������������������������������������������������0000664�0000000�0000000�00000004354�14110572173�0017402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <signal.h>. Files: lib/signal.in.h m4/signal_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use extensions configure.ac: gl_SIGNAL_H gl_SIGNAL_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += signal.h # We need the following in order to create <signal.h> when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -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)' \ < $(srcdir)/signal.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += signal.h signal.h-t Include: <signal.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signal-h-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0021104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-signal-h-c++.cc tests/test-signal-h-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-signal-h-c++ check_PROGRAMS += test-signal-h-c++ test_signal_h_c___SOURCES = test-signal-h-c++.cc test-signal-h-c++2.cc test_signal_h_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_PTHREAD_SIGMASK) endif ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signal-h-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-signal-h.c Depends-on: signal-h-c++-tests configure.ac: Makefile.am: TESTS += test-signal-h check_PROGRAMS += test-signal-h �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signbit�������������������������������������������������������������0000664�0000000�0000000�00000001253�14110572173�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: signbit() macro: Determine the sign bit of a floating-point number. Files: lib/signbitf.c lib/signbitd.c lib/signbitl.c lib/float+.h m4/signbit.m4 Depends-on: math float [test $REPLACE_SIGNBIT = 1] isnanf-nolibm [test $REPLACE_SIGNBIT = 1] isnand-nolibm [test $REPLACE_SIGNBIT = 1] isnanl-nolibm [test $REPLACE_SIGNBIT = 1] fpieee [test $REPLACE_SIGNBIT = 1] memcmp [test $REPLACE_SIGNBIT = 1] configure.ac: gl_SIGNBIT if test $REPLACE_SIGNBIT = 1; then AC_LIBOBJ([signbitf]) AC_LIBOBJ([signbitd]) AC_LIBOBJ([signbitl]) fi gl_MATH_MODULE_INDICATOR([signbit]) Makefile.am: Include: <math.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/signbit-tests�������������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-signbit.c tests/minus-zero.h tests/infinity.h tests/macros.h m4/exponentf.m4 m4/exponentd.m4 m4/exponentl.m4 Depends-on: float configure.ac: AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) AC_REQUIRE([gl_LONG_DOUBLE_EXPONENT_LOCATION]) Makefile.am: TESTS += test-signbit check_PROGRAMS += test-signbit ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigpipe�������������������������������������������������������������0000664�0000000�0000000�00000002106�14110572173�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Emulation of POSIX compatible SIGPIPE behaviour. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: m4/sigpipe.m4 lib/stdio-write.c m4/asm-underscore.m4 Depends-on: msvc-nothrow raise signal-h sigprocmask stdio unistd configure.ac: gl_SIGNAL_SIGPIPE dnl Define the C macro GNULIB_SIGPIPE to 1. gl_MODULE_INDICATOR([sigpipe]) dnl Define the substituted variable GNULIB_SIGNAL_H_SIGPIPE to 1. gl_SIGNAL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE], [1]) dnl Define the substituted variable GNULIB_STDIO_H_SIGPIPE to 1. gl_STDIO_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE], [1]) dnl Define the substituted variable GNULIB_UNISTD_H_SIGPIPE to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE], [1]) Makefile.am: Include: <signal.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigpipe-die���������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Report a SIGPIPE signal and exit. Files: lib/sigpipe-die.h lib/sigpipe-die.c Depends-on: error gettext-h exitfail sigpipe sigprocmask sigaction configure.ac: Makefile.am: lib_SOURCES += sigpipe-die.h sigpipe-die.c Include: "sigpipe-die.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigpipe-tests�������������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigpipe.c tests/test-sigpipe.sh tests/macros.h Depends-on: write configure.ac: Makefile.am: TESTS += test-sigpipe.sh check_PROGRAMS += test-sigpipe ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigprocmask���������������������������������������������������������0000664�0000000�0000000�00000001012�14110572173�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible signal blocking. Files: lib/sigprocmask.c m4/signalblocking.m4 Depends-on: signal-h stdint [test $HAVE_POSIX_SIGNALBLOCKING = 0] raise [test $HAVE_POSIX_SIGNALBLOCKING = 0] msvc-inval [test $HAVE_POSIX_SIGNALBLOCKING = 0] configure.ac: gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then AC_LIBOBJ([sigprocmask]) gl_PREREQ_SIGPROCMASK fi gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) Makefile.am: Include: <signal.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigprocmask-tests���������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigprocmask.c tests/signature.h tests/macros.h Depends-on: sleep configure.ac: Makefile.am: TESTS += test-sigprocmask check_PROGRAMS += test-sigprocmask ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigsegv�������������������������������������������������������������0000664�0000000�0000000�00000005116�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A simplified variant of GNU libsigsegv. It implements the most important features of GNU libsigsegv: catching SIGSEGV and catching stack overflow. It does *not* implement the 'sigsegv_dispatcher' type (which is not multithread-safe). It supports all modern Unix-like platforms: Linux, Hurd, FreeBSD, NetBSD, OpenBSD, macOS, AIX, Solaris, Cygwin, Haiku, even IRIX. It does *not* support HP-UX, Minix, native Windows; on these platforms the module compiles and provides a <sigsegv.h> header file, but it does not define HAVE_SIGSEGV_RECOVERY and HAVE_STACK_OVERFLOW_RECOVERY. Unlike GNU libsigsegv, which consists of many .h and .c files, this module compiles to just two object files, rather than a library. Files: lib/sigsegv.in.h lib/sigsegv.c lib/stackvma.h lib/stackvma.c m4/mmap-anon.m4 m4/sigaltstack.m4 m4/stack-direction.m4 m4/libsigsegv.m4 m4/sigsegv.m4 Depends-on: havelib host-cpu-c-abi stdint getpagesize configure.ac: AC_REQUIRE([gl_SIGSEGV]) if test $gl_sigsegv_uses_libsigsegv = yes; then SIGSEGV_H= else SIGSEGV_H=sigsegv.h fi AC_SUBST([SIGSEGV_H]) AM_CONDITIONAL([GL_GENERATE_SIGSEGV_H], [test -n "$SIGSEGV_H"]) if test -n "$SIGSEGV_H"; then dnl Persuade glibc <sys/ucontext.h> to declare macros designating register dnl indices: REG_RSP on x86_64, REG_ESP on i386. dnl Persuade Solaris OpenIndiana <ucontext.h> to include <sys/regset.h>, dnl which declares macros designating register indices, such as ESP on i386. dnl Persuade Solaris OpenIndiana <unistd.h> to declare mincore(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris2.11) AC_DEFINE([SOLARIS11], [1], [Define on Solaris 11 and its derivates.]) ;; esac gl_FUNC_MMAP_ANON dnl Stack direction. SV_STACK_DIRECTION dnl Catching stack overflow requires an alternate signal stack. dnl The old "install a guard page" trick would be unreliable, because dnl we don't know where exactly to place the guard page. SV_SIGALTSTACK AC_CHECK_FUNCS_ONCE([getrlimit]) fi Makefile.am: BUILT_SOURCES += $(SIGSEGV_H) if GL_GENERATE_SIGSEGV_H sigsegv.h: sigsegv.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/sigsegv.in.h; \ } > $@-t && \ mv $@-t $@ else sigsegv.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += sigsegv.h sigsegv.h-t if GL_GENERATE_SIGSEGV_H lib_SOURCES += sigsegv.c stackvma.c endif Include: <sigsegv.h> Link: $(LTLIBSIGSEGV) when linking with libtool, $(LIBSIGSEGV) otherwise License: GPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sigsegv-tests�������������������������������������������������������0000664�0000000�0000000�00000001527�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigsegv-catch-segv1.c tests/test-sigsegv-catch-segv2.c tests/test-sigsegv-catch-stackoverflow1.c tests/test-sigsegv-catch-stackoverflow2.c tests/altstack-util.h tests/mmap-anon-util.h m4/mmap-anon.m4 Depends-on: stdint configure.ac: AC_CHECK_FUNCS_ONCE([setrlimit]) gl_FUNC_MMAP_ANON Makefile.am: TESTS += \ test-sigsegv-catch-segv1 \ test-sigsegv-catch-segv2 \ test-sigsegv-catch-stackoverflow1 \ test-sigsegv-catch-stackoverflow2 check_PROGRAMS += \ test-sigsegv-catch-segv1 \ test-sigsegv-catch-segv2 \ test-sigsegv-catch-stackoverflow1 \ test-sigsegv-catch-stackoverflow2 test_sigsegv_catch_segv1_LDADD = $(LDADD) $(LIBSIGSEGV) test_sigsegv_catch_segv2_LDADD = $(LDADD) $(LIBSIGSEGV) test_sigsegv_catch_stackoverflow1_LDADD = $(LDADD) $(LIBSIGSEGV) test_sigsegv_catch_stackoverflow2_LDADD = $(LDADD) $(LIBSIGSEGV) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/simple-atomic�������������������������������������������������������0000664�0000000�0000000�00000000445�14110572173�0020440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Simple atomic operations for multithreading. Files: lib/simple-atomic.h lib/simple-atomic.c Depends-on: stdint sparcv8+ configure.ac: AC_CHECK_HEADERS_ONCE([pthread.h]) Makefile.am: lib_SOURCES += simple-atomic.c Include: "simple-atomic.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/simple-atomic-tests�������������������������������������������������0000664�0000000�0000000�00000000352�14110572173�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-simple-atomic.c tests/macros.h Depends-on: thread yield configure.ac: Makefile.am: TESTS += test-simple-atomic check_PROGRAMS += test-simple-atomic test_simple_atomic_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sin�����������������������������������������������������������������0000664�0000000�0000000�00000000311�14110572173�0016456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sin() function: sine function. Files: m4/sin.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_SIN Makefile.am: Include: <math.h> Link: $(SIN_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sin-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sin.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sin check_PROGRAMS += test-sin test_sin_LDADD = $(LDADD) @SIN_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinf����������������������������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0016632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinf() function: sine function. Files: lib/sinf.c m4/sinf.m4 Depends-on: math extensions sin [test $HAVE_SINF = 0] configure.ac: gl_FUNC_SINF if test $HAVE_SINF = 0; then AC_LIBOBJ([sinf]) fi gl_MATH_MODULE_INDICATOR([sinf]) Makefile.am: Include: <math.h> Link: $(SINF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinf-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sinf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sinf check_PROGRAMS += test-sinf test_sinf_LDADD = $(LDADD) @SINF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinh����������������������������������������������������������������0000664�0000000�0000000�00000000330�14110572173�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinh() function: hyperbolic sine function. Files: m4/sinh.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_SINH Makefile.am: Include: <math.h> Link: $(SINH_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinh-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sinh.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sinh check_PROGRAMS += test-sinh test_sinh_LDADD = $(LDADD) @SINH_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinhf���������������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinhf() function: hyperbolic sine function. Files: lib/sinhf.c m4/sinhf.m4 Depends-on: math extensions sinh [test $HAVE_SINHF = 0] configure.ac: gl_FUNC_SINHF if test $HAVE_SINHF = 0; then AC_LIBOBJ([sinhf]) fi gl_MATH_MODULE_INDICATOR([sinhf]) Makefile.am: Include: <math.h> Link: $(SINHF_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinhf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sinhf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sinhf check_PROGRAMS += test-sinhf test_sinhf_LDADD = $(LDADD) @SINHF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinl����������������������������������������������������������������0000664�0000000�0000000�00000001601�14110572173�0016635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinl() function: sine function with long double argument. Files: lib/sinl.c lib/trigl.h lib/sincosl.c lib/trigl.c m4/sinl.m4 Depends-on: math extensions sin [test $HAVE_SINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [test $HAVE_SINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [test $HAVE_SINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floor [test $HAVE_SINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [test $HAVE_SINL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_SINL if test $HAVE_SINL = 0; then AC_LIBOBJ([sinl]) if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0; then AC_LIBOBJ([sincosl]) AC_LIBOBJ([trigl]) fi fi gl_MATH_MODULE_INDICATOR([sinl]) Makefile.am: Include: <math.h> Link: $(SINL_LIBM) License: LGPL Maintainer: Paolo Bonzini �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sinl-tests����������������������������������������������������������0000664�0000000�0000000�00000000300�14110572173�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sinl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-sinl check_PROGRAMS += test-sinl test_sinl_LDADD = $(LDADD) @SINL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/size_max������������������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide SIZE_MAX, for cases when the 'stdint' module cannot be used. Files: m4/size_max.m4 lib/size_max.h Depends-on: configure.ac: gl_SIZE_MAX Makefile.am: lib_SOURCES += size_max.h Include: "size_max.h" License: LGPLv2+ Maintainer: Simon Josefsson all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sleep���������������������������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0017007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sleep() function: pause execution of the current thread. Files: lib/sleep.c m4/sleep.m4 Depends-on: unistd stdint [test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1] verify [test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1] configure.ac: gl_FUNC_SLEEP if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then AC_LIBOBJ([sleep]) fi gl_UNISTD_MODULE_INDICATOR([sleep]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/sleep-tests���������������������������������������������������������0000664�0000000�0000000�00000000263�14110572173�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sleep.c tests/signature.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-sleep check_PROGRAMS += test-sleep ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017431�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/_Noreturn���������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0021332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: The _Noreturn keyword of C11. Applicability: all Files: lib/_Noreturn.h Depends-on: configure.ac: Makefile.am: # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h Include: License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/arg-nonnull�������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for declaring that specific arguments must not be NULL. Applicability: all Files: lib/arg-nonnull.h Depends-on: configure.ac: Makefile.am: # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h Include: License: LGPLv2+ Maintainer: all ����������������������������������������������������������gnulib-20210822~d383792/modules/snippet/c++defs�����������������������������������������������������0000664�0000000�0000000�00000000646�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Function declaration macros with C++ support. Applicability: all Files: lib/c++defs.h Depends-on: configure.ac: Makefile.am: # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h Include: License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/link-warning������������������������������������������������0000664�0000000�0000000�00000002026�14110572173�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for emitting link time warnings. Applicability: all Files: build-aux/snippet/link-warning.h Depends-on: configure.ac: AC_REQUIRE([gl_FEATURES_H]) Makefile.am: # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefiles that need it. This is ensured by the applicability # 'all' defined above. # FIXME: The link-warning.h rule probably does not work if # gnulib-tool's --gnu-make option is used, when the build is an # out-of-source build that relies on VPATH. BUILT_SOURCES += link-warning.h link-warning.h: $(top_srcdir)/build-aux/snippet/link-warning.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/HAVE_FEATURES_H/,$$p' \ < $(top_srcdir)/build-aux/snippet/link-warning.h \ | sed -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += link-warning.h link-warning.h-t LINK_WARNING_H=link-warning.h Include: License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/unused-parameter��������������������������������������������0000664�0000000�0000000�00000001017�14110572173�0022634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for declaring that specific function parameters are not used. Status: obsolete Notice: This module is obsolete. Applicability: all Files: lib/unused-parameter.h Depends-on: configure.ac: Makefile.am: # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. UNUSED_PARAMETER_H=$(srcdir)/unused-parameter.h Include: License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snippet/warn-on-use�������������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0021533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for emitting a warning if a function is used. Applicability: all Files: lib/warn-on-use.h m4/warn-on-use.m4 Depends-on: configure.ac: Makefile.am: # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h Include: License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������gnulib-20210822~d383792/modules/snprintf������������������������������������������������������������0000664�0000000�0000000�00000000772�14110572173�0017543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: snprintf() function: print formatted output to a fixed length string Files: lib/snprintf.c m4/snprintf.m4 m4/printf.m4 Depends-on: stdio vasnprintf [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] errno [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] configure.ac: gl_FUNC_SNPRINTF gl_STDIO_MODULE_INDICATOR([snprintf]) gl_MODULE_INDICATOR([snprintf]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Simon Josefsson, Paul Eggert ������gnulib-20210822~d383792/modules/snprintf-posix������������������������������������������������������0000664�0000000�0000000�00000002406�14110572173�0020677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible snprintf() function: print formatted output to a fixed length string Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/snprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: snprintf nocrash printf-safe multiarch vasnprintf [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] isnand-nolibm [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] isnanl-nolibm [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] frexp-nolibm [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] frexpl-nolibm [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] printf-frexp [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] printf-frexpl [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] signbit [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] fpucw [test $ac_cv_func_snprintf = no || test $REPLACE_SNPRINTF = 1] configure.ac: gl_FUNC_SNPRINTF_POSIX Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/snprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0022034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-snprintf-posix.c tests/test-snprintf-posix.h tests/test-snprintf.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: stdint float configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_DEFINE([CHECK_SNPRINTF_POSIX], 1, [Define to 1 for strict checking in test-snprintf.c.]) Makefile.am: TESTS += test-snprintf-posix test-snprintf check_PROGRAMS += test-snprintf-posix test-snprintf ��������������������������������������������������������������gnulib-20210822~d383792/modules/snprintf-tests������������������������������������������������������0000664�0000000�0000000�00000000240�14110572173�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-snprintf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-snprintf check_PROGRAMS += test-snprintf ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/socket��������������������������������������������������������������0000664�0000000�0000000�00000002014�14110572173�0017157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: socket() function: create a socket. Files: lib/socket.c lib/w32sock.h Depends-on: sys_socket socketlib errno [test "$ac_cv_header_winsock2_h" = yes] sockets [test "$ac_cv_header_winsock2_h" = yes] msvc-nothrow [test "$ac_cv_header_winsock2_h" = yes] configure.ac: AC_REQUIRE([gl_SYS_SOCKET_H]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([socket]) fi # When this module is used, sockets may actually occur as file descriptors, # hence it is worth warning if the modules 'close' and 'ioctl' are not used. m4_ifdef([gl_UNISTD_H_DEFAULTS], [gl_UNISTD_H_REQUIRE_DEFAULTS]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [gl_SYS_IOCTL_H_REQUIRE_DEFAULTS]) AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2]) if test "$ac_cv_header_winsock2_h" = yes; then UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 fi gl_SYS_SOCKET_MODULE_INDICATOR([socket]) Makefile.am: Include: <sys/socket.h> Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Paolo Bonzini, Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/socketlib�����������������������������������������������������������0000664�0000000�0000000�00000000347�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access to socket primitives. Files: m4/socketlib.m4 m4/sys_socket_h.m4 Depends-on: configure.ac: AC_REQUIRE([gl_SOCKETLIB]) Makefile.am: Include: Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sockets�������������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: General facilities for using sockets Files: lib/sockets.c lib/sockets.h lib/w32sock.h m4/sockets.m4 Depends-on: socketlib sys_socket fd-hook msvc-nothrow configure.ac: AC_REQUIRE([gl_SOCKETS]) Makefile.am: lib_SOURCES += sockets.h sockets.c Include: "sockets.h" Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sockets-tests�������������������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sockets.c Depends-on: configure.ac: Makefile.am: TESTS += test-sockets check_PROGRAMS += test-sockets test_sockets_LDADD = $(LDADD) @LIBSOCKET@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/socklen�������������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0017326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Declare socklen_t in config.h if the system doesn't have it. Files: m4/socklen.m4 Depends-on: configure.ac: gl_TYPE_SOCKLEN_T Makefile.am: Include: #include <sys/types.h> #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #elif HAVE_WS2TCPIP_H # include <ws2tcpip.h> #endif License: unlimited Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sparcv8+������������������������������������������������������������0000664�0000000�0000000�00000000325�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: When compiling for SPARC, assume SPARC v8+ or newer. Files: m4/sparcv8+.m4 Depends-on: configure.ac-early: gl_SPARC_V8PLUS configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/spawn���������������������������������������������������������������0000664�0000000�0000000�00000010702�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX compliant <spawn.h>. Files: lib/spawn.in.h m4/spawn_h.m4 m4/pid_t.m4 Depends-on: include_next sched signal-h snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_SPAWN_H gl_SPAWN_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += spawn.h # We need the following in order to create a replacement for <spawn.h> when # the system doesn't have one. spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \ -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ -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)' \ < $(srcdir)/spawn.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += spawn.h spawn.h-t Include: <spawn.h> License: LGPLv2+ Maintainer: glibc ��������������������������������������������������������������gnulib-20210822~d383792/modules/spawn-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-spawn-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-spawn-c++ check_PROGRAMS += test-spawn-c++ test_spawn_c___SOURCES = test-spawn-c++.cc test_spawn_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/spawn-pipe����������������������������������������������������������0000664�0000000�0000000�00000001715�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creation of subprocesses, communicating via pipes. Files: lib/spawn-pipe.h lib/spawn-pipe.c lib/os2-spawn.h lib/os2-spawn.c m4/spawn-pipe.m4 Depends-on: dup2 canonicalize environ error fatal-signal filename findprog-in free-posix gettext-h msvc-nothrow open pipe2 pipe2-safer spawn posix_spawn posix_spawnp posix_spawn_file_actions_init posix_spawn_file_actions_addclose posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addopen posix_spawn_file_actions_addchdir posix_spawn_file_actions_destroy posix_spawnattr_init posix_spawnattr_setpgroup posix_spawnattr_setsigmask posix_spawnattr_setflags posix_spawnattr_destroy stdbool stdlib unistd unistd-safer wait-process windows-spawn xalloc-die configure.ac: gl_SPAWN_PIPE AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in os2*) AC_LIBOBJ([os2-spawn]) ;; esac Makefile.am: lib_SOURCES += spawn-pipe.h spawn-pipe.c Include: "spawn-pipe.h" Link: $(LIBTHREAD) License: GPL Maintainer: all ���������������������������������������������������gnulib-20210822~d383792/modules/spawn-pipe-tests����������������������������������������������������0000664�0000000�0000000�00000001567�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-spawn-pipe.sh tests/test-spawn-pipe-main.c tests/test-spawn-pipe-child.c tests/test-spawn-pipe-script.c tests/executable-script tests/executable-script.sh tests/executable-shell-script tests/macros.h Depends-on: close msvc-inval stdint configure.ac: Makefile.am: TESTS += test-spawn-pipe.sh check_PROGRAMS += test-spawn-pipe-main test-spawn-pipe-child test_spawn_pipe_main_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) # The test-spawn-pipe-child program must be a real executable, not a libtool # wrapper script, and should link against as few libraries as possible. # Therefore don't link it against any libraries other than -lc. test_spawn_pipe_child_LDADD = TESTS += test-spawn-pipe-script check_PROGRAMS += test-spawn-pipe-script test_spawn_pipe_script_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) test_spawn_pipe_script_CPPFLAGS = $(AM_CPPFLAGS) -DSRCDIR=\"$(srcdir)/\" �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/spawn-tests���������������������������������������������������������0000664�0000000�0000000�00000000205�14110572173�0020157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-spawn.c Depends-on: spawn-c++-tests configure.ac: Makefile.am: TESTS += test-spawn check_PROGRAMS += test-spawn �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible sprintf() function: print formatted output to a string Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/sprintf.c m4/sprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: stdio nocrash printf-safe multiarch vasnprintf [test $REPLACE_SPRINTF = 1] isnand-nolibm [test $REPLACE_SPRINTF = 1] isnanl-nolibm [test $REPLACE_SPRINTF = 1] frexp-nolibm [test $REPLACE_SPRINTF = 1] frexpl-nolibm [test $REPLACE_SPRINTF = 1] printf-frexp [test $REPLACE_SPRINTF = 1] printf-frexpl [test $REPLACE_SPRINTF = 1] signbit [test $REPLACE_SPRINTF = 1] fpucw [test $REPLACE_SPRINTF = 1] stdint [test $REPLACE_SPRINTF = 1] errno [test $REPLACE_SPRINTF = 1] configure.ac: gl_FUNC_SPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([sprintf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sprintf-posix.c tests/test-sprintf-posix.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: stdint float configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-sprintf-posix check_PROGRAMS += test-sprintf-posix ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrt����������������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrt() function: square root. Files: m4/sqrt.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_SQRT Makefile.am: Include: <math.h> Link: $(SQRT_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrt-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000310�14110572173�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrt() function according to ISO C 99 with IEC 60559. Files: Depends-on: sqrt fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(SQRT_LIBM) License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrt-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrt-ieee.c tests/test-sqrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-sqrt-ieee check_PROGRAMS += test-sqrt-ieee test_sqrt_ieee_LDADD = $(LDADD) @SQRT_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrt-tests����������������������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrt.c tests/test-sqrt.h tests/signature.h tests/macros.h tests/randomd.c Depends-on: configure.ac: Makefile.am: TESTS += test-sqrt check_PROGRAMS += test-sqrt test_sqrt_SOURCES = test-sqrt.c randomd.c test_sqrt_LDADD = $(LDADD) @SQRT_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtf���������������������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrtf() function: square root. Files: lib/sqrtf.c m4/sqrtf.m4 Depends-on: math extensions sqrt [test $HAVE_SQRTF = 0] configure.ac: gl_FUNC_SQRTF if test $HAVE_SQRTF = 0; then AC_LIBOBJ([sqrtf]) fi gl_MATH_MODULE_INDICATOR([sqrtf]) Makefile.am: Include: <math.h> Link: $(SQRTF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrtf() function according to ISO C 99 with IEC 60559. Files: Depends-on: sqrtf fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(SQRTF_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtf-ieee.c tests/test-sqrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-sqrtf-ieee check_PROGRAMS += test-sqrtf-ieee test_sqrtf_ieee_LDADD = $(LDADD) @SQRTF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtf-tests���������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0020171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtf.c tests/test-sqrt.h tests/signature.h tests/macros.h tests/randomf.c Depends-on: configure.ac: Makefile.am: TESTS += test-sqrtf check_PROGRAMS += test-sqrtf test_sqrtf_SOURCES = test-sqrtf.c randomf.c test_sqrtf_LDADD = $(LDADD) @SQRTF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtl���������������������������������������������������������������0000664�0000000�0000000�00000001612�14110572173�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrtl() function: square root with long double argument. Files: lib/sqrtl.c m4/sqrtl.m4 Depends-on: math extensions sqrt [{ test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; }] float [{ test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [{ test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [{ test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [{ test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_SQRTL if test $HAVE_SQRTL = 0 || test $REPLACE_SQRTL = 1; then AC_LIBOBJ([sqrtl]) fi gl_MATH_MODULE_INDICATOR([sqrtl]) Makefile.am: Include: <math.h> Link: $(SQRTL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000313�14110572173�0017741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrtl() function according to ISO C 99 with IEC 60559. Files: Depends-on: sqrtl fpieee configure.ac: Makefile.am: Include: <math.h> Link: $(SQRTL_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtl-ieee.c tests/test-sqrt-ieee.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-sqrtl-ieee check_PROGRAMS += test-sqrtl-ieee test_sqrtl_ieee_LDADD = $(LDADD) @SQRTL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sqrtl-tests���������������������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtl.c tests/test-sqrt.h tests/signature.h tests/macros.h tests/randoml.c Depends-on: fpucw float configure.ac: Makefile.am: TESTS += test-sqrtl check_PROGRAMS += test-sqrtl test_sqrtl_SOURCES = test-sqrtl.c randoml.c test_sqrtl_LDADD = $(LDADD) @SQRTL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ssfmalloc�����������������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Simple and straight-forward malloc implementation (front end). Files: lib/ssfmalloc.h lib/ssfmalloc-bitmap.h Depends-on: flexmember ffs ffsll lock thread-optim oset rbtree-oset configure.ac: Makefile.am: Include: "ssfmalloc.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ssfmalloc-tests�����������������������������������������������������0000664�0000000�0000000�00000000337�14110572173�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ssfmalloc.c tests/macros.h m4/mmap-anon.m4 Depends-on: configure.ac: gl_FUNC_MMAP_ANON Makefile.am: TESTS += test-ssfmalloc check_PROGRAMS += test-ssfmalloc test_ssfmalloc_LDADD = $(LDADD) $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ssize_t�������������������������������������������������������������0000664�0000000�0000000�00000000307�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Define ssize_t if it does not already exist. Files: m4/ssize_t.m4 Depends-on: configure.ac: gt_TYPE_SSIZE_T Makefile.am: Include: <sys/types.h> License: unlimited Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stack���������������������������������������������������������������0000664�0000000�0000000�00000000341�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Type-safe stack data type. Files: lib/stack.h Depends-on: assure stdbool stdlib xalloc configure.ac: Makefile.am: lib_SOURCES += stack.h Include: "stack.h" License: GPL Maintainer: Marc Nieper-Wißkirchen �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stack-tests���������������������������������������������������������0000664�0000000�0000000�00000000324�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stack.c tests/macros.h Depends-on: string configure.ac: Makefile.am: TESTS += test-stack check_PROGRAMS += test-stack test_stack_SOURCES = test-stack.c test_stack_LDADD = $(LDADD) $(LIBINTL) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat����������������������������������������������������������������0000664�0000000�0000000�00000001254�14110572173�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat() function: query file information Files: lib/stat.c lib/stat-w32.h lib/stat-w32.c m4/stat.m4 Depends-on: sys_stat largefile filename [test $REPLACE_STAT = 1] malloca [test $REPLACE_STAT = 1] pathmax [test $REPLACE_STAT = 1] stat-time [test $REPLACE_STAT = 1] stdbool [test $REPLACE_STAT = 1] verify [test $REPLACE_STAT = 1] configure.ac: gl_FUNC_STAT if test $REPLACE_STAT = 1; then AC_LIBOBJ([stat]) case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_STAT fi gl_SYS_STAT_MODULE_INDICATOR([stat]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat-macros���������������������������������������������������������0000664�0000000�0000000�00000000236�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat-related macros Files: lib/stat-macros.h Depends-on: configure.ac: Makefile.am: Include: "stat-macros.h" License: GPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat-size�����������������������������������������������������������0000664�0000000�0000000�00000000356�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat-related file size macros Files: lib/stat-size.h m4/stat-size.m4 Depends-on: fileblocks sys_stat configure.ac: gl_STAT_SIZE Makefile.am: Include: "stat-size.h" License: GPL Maintainer: James Youngman, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat-tests����������������������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stat.h tests/test-stat.c tests/signature.h tests/macros.h Depends-on: getcwd-lgpl same-inode stdbool symlink configure.ac: Makefile.am: TESTS += test-stat check_PROGRAMS += test-stat test_stat_LDADD = $(LDADD) $(LIBINTL) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat-time�����������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat-related time functions Files: lib/stat-time.h lib/stat-time.c m4/stat-time.m4 Depends-on: time errno extensions extern-inline intprops configure.ac: gl_STAT_TIME gl_STAT_BIRTHTIME Makefile.am: lib_SOURCES += stat-time.c Include: "stat-time.h" License: LGPLv2+ Maintainer: Paul Eggert and Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stat-time-tests�����������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stat-time.c tests/macros.h tests/nap.h Depends-on: intprops nanosleep time unistd configure.ac: Makefile.am: TESTS += test-stat-time check_PROGRAMS += test-stat-time test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/statat��������������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: statat() and lstatat() functions: Return info about a file at a directory. Files: lib/statat.c Depends-on: fstatat configure.ac: gl_MODULE_INDICATOR([statat]) dnl for lib/openat.h Makefile.am: lib_SOURCES += statat.c Include: "openat.h" License: GPL Maintainer: Jim Meyering, Eric Blake, Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/statat-tests��������������������������������������������������������0000664�0000000�0000000�00000000255�14110572173�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-statat.c Depends-on: fstatat-tests configure.ac: Makefile.am: TESTS += test-statat check_PROGRAMS += test-statat test_statat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/std-gnu11�����������������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Prefer GNU C11 and C++11 to earlier versions. Files: m4/std-gnu11.m4 Depends-on: configure.ac: Makefile.am: Include: License: unlimited Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdalign������������������������������������������������������������0000664�0000000�0000000�00000001303�14110572173�0017474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <stdalign.h> that nearly conforms to ISO C11 and C++11. Files: lib/stdalign.in.h m4/stdalign.m4 Depends-on: configure.ac: gl_STDALIGN_H Makefile.am: 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 $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/stdalign.in.h; \ } > $@-t && \ mv $@-t $@ else stdalign.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdalign.h stdalign.h-t Include: <stdalign.h> License: LGPLv2+ Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdalign-tests������������������������������������������������������0000664�0000000�0000000�00000000233�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdalign.c tests/macros.h Depends-on: verify stdint configure.ac: Makefile.am: TESTS += test-stdalign check_PROGRAMS += test-stdalign ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdarg��������������������������������������������������������������0000664�0000000�0000000�00000002205�14110572173�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <stdarg.h> that conforms to C99. Files: lib/stdarg.in.h m4/stdarg.m4 Depends-on: include_next configure.ac-early: dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode dnl for the builtin va_copy to work. gl_PROG_CC_C99 arranges for this. gl_PROG_CC_C99 configure.ac: gl_STDARG_H Makefile.am: BUILT_SOURCES += $(STDARG_H) # We need the following in order to create <stdarg.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDARG_H stdarg.h: stdarg.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ < $(srcdir)/stdarg.in.h; \ } > $@-t && \ mv $@-t $@ else stdarg.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdarg.h stdarg.h-t Include: <stdarg.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdarg-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000420�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdarg-c++.cc tests/test-stdarg-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stdarg-c++ check_PROGRAMS += test-stdarg-c++ test_stdarg_c___SOURCES = test-stdarg-c++.cc test-stdarg-c++2.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdarg-tests��������������������������������������������������������0000664�0000000�0000000�00000000061�14110572173�0020313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: configure.ac: Makefile.am: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdbool�������������������������������������������������������������0000664�0000000�0000000�00000001360�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <stdbool.h> that nearly conforms to C99. (Nearly: casts to bool may not work.) Files: lib/stdbool.in.h m4/stdbool.m4 Depends-on: configure.ac: AM_STDBOOL_H Makefile.am: BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create <stdbool.h> when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t Include: <stdbool.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdbool-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000427�14110572173�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdbool-c++.cc tests/test-stdbool-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stdbool-c++ check_PROGRAMS += test-stdbool-c++ test_stdbool_c___SOURCES = test-stdbool-c++.cc test-stdbool-c++2.cc endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdbool-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdbool.c Depends-on: stdbool-c++-tests configure.ac: Makefile.am: TESTS += test-stdbool check_PROGRAMS += test-stdbool �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stddef��������������������������������������������������������������0000664�0000000�0000000�00000002307�14110572173�0017145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <stddef.h> that works around platform issues. Files: lib/stddef.in.h m4/stddef_h.m4 m4/wchar_t.m4 Depends-on: include_next extensions configure.ac: gl_STDDEF_H gl_STDDEF_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t Include: <stddef.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stddef-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000420�14110572173�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stddef-c++.cc tests/test-stddef-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stddef-c++ check_PROGRAMS += test-stddef-c++ test_stddef_c___SOURCES = test-stddef-c++.cc test-stddef-c++2.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stddef-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stddef.c Depends-on: stdalign verify stddef-c++-tests configure.ac: Makefile.am: TESTS += test-stddef check_PROGRAMS += test-stddef �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdint��������������������������������������������������������������0000664�0000000�0000000�00000005331�14110572173�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <stdint.h>. It nearly conforms to C99 and to ISO/IEC TS 18661-1:2014. Assumes typical host with 8-bit bytes, two's complement representation, and no padding or trap representations, with int widths equal to 8, 16, 32, and 64 bits. {uint,int}_fast{8,16,32,64}_t may not correspond to the fastest types available on the system. Macros are used instead of typedefs. Files: lib/stdint.in.h m4/stdint.m4 m4/wint_t.m4 Depends-on: include_next limits-h multiarch sys_types configure.ac: gl_STDINT_H Makefile.am: BUILT_SOURCES += $(STDINT_H) # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t Include: <stdint.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdint-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000420�14110572173�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdint-c++.cc tests/test-stdint-c++2.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stdint-c++ check_PROGRAMS += test-stdint-c++ test_stdint_c___SOURCES = test-stdint-c++.cc test-stdint-c++2.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdint-tests��������������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0020331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdint.c m4/wchar_t.m4 m4/wint_t.m4 Depends-on: extensions verify intprops wchar stdint-c++-tests configure.ac: AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) Makefile.am: TESTS += test-stdint check_PROGRAMS += test-stdint ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdio���������������������������������������������������������������0000664�0000000�0000000�00000020626�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <stdio.h>. Files: lib/stdio.in.h m4/stdio_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t stddef sys_types configure.ac: gl_STDIO_H gl_STDIO_H_REQUIRE_DEFAULTS dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fscanf]) gl_MODULE_INDICATOR([fscanf]) gl_STDIO_MODULE_INDICATOR([scanf]) gl_MODULE_INDICATOR([scanf]) gl_STDIO_MODULE_INDICATOR([fgetc]) gl_STDIO_MODULE_INDICATOR([getc]) gl_STDIO_MODULE_INDICATOR([getchar]) gl_STDIO_MODULE_INDICATOR([fgets]) gl_STDIO_MODULE_INDICATOR([fread]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fprintf]) gl_STDIO_MODULE_INDICATOR([printf]) gl_STDIO_MODULE_INDICATOR([vfprintf]) gl_STDIO_MODULE_INDICATOR([vprintf]) gl_STDIO_MODULE_INDICATOR([fputc]) gl_STDIO_MODULE_INDICATOR([putc]) gl_STDIO_MODULE_INDICATOR([putchar]) gl_STDIO_MODULE_INDICATOR([fputs]) gl_STDIO_MODULE_INDICATOR([puts]) gl_STDIO_MODULE_INDICATOR([fwrite]) Makefile.am: BUILT_SOURCES += stdio.h # 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) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h | \ 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_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|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' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -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 && \ mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t Include: <stdio.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdio-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdio-c++.cc tests/test-stdio-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stdio-c++ check_PROGRAMS += test-stdio-c++ test_stdio_c___SOURCES = test-stdio-c++.cc test-stdio-c++2.cc test_stdio_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_EACCESS) $(LIB_GETRANDOM) endif �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdio-tests���������������������������������������������������������0000664�0000000�0000000�00000000275�14110572173�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdio.c Depends-on: verify stdio-c++-tests fgetc-tests fputc-tests fread-tests fwrite-tests configure.ac: Makefile.am: TESTS += test-stdio check_PROGRAMS += test-stdio �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdlib��������������������������������������������������������������0000664�0000000�0000000�00000020074�14110572173�0017156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <stdlib.h>. Files: lib/stdlib.in.h m4/stdlib_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use snippet/_Noreturn stddef unistd configure.ac: gl_STDLIB_H gl_STDLIB_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += stdlib.h # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_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 && \ mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdlib-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdlib-c++.cc tests/test-stdlib-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-stdlib-c++ check_PROGRAMS += test-stdlib-c++ test_stdlib_c___SOURCES = test-stdlib-c++.cc test-stdlib-c++2.cc test_stdlib_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_GETRANDOM) endif �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdlib-safer��������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: File stream functions that avoid clobbering std{in,out,err}. Files: lib/stdlib--.h lib/stdlib-safer.h lib/mkstemp-safer.c Depends-on: fd-safer-flag mkstemp stdlib unistd-safer configure.ac: Makefile.am: lib_SOURCES += mkstemp-safer.c Include: "stdlib-safer.h" Link: $(LIB_GETRANDOM) License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdlib-tests��������������������������������������������������������0000664�0000000�0000000�00000000246�14110572173�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdlib.c tests/test-sys_wait.h Depends-on: verify stdlib-c++-tests configure.ac: Makefile.am: TESTS += test-stdlib check_PROGRAMS += test-stdlib ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdnoreturn���������������������������������������������������������0000664�0000000�0000000�00000001507�14110572173�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <stdnoreturn.h> that nearly conforms to ISO C11. Files: lib/stdnoreturn.in.h m4/stdnoreturn.m4 Depends-on: snippet/_Noreturn configure.ac: gl_STDNORETURN_H Makefile.am: BUILT_SOURCES += $(STDNORETURN_H) # We need the following in order to create <stdnoreturn.h> when the system # doesn't have one that works. if GL_GENERATE_STDNORETURN_H stdnoreturn.h: stdnoreturn.in.h $(top_builddir)/config.status $(_NORETURN_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e '/definition of _Noreturn/r $(_NORETURN_H)' \ < $(srcdir)/stdnoreturn.in.h; \ } > $@-t && \ mv $@-t $@ else stdnoreturn.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdnoreturn.h stdnoreturn.h-t Include: <stdnoreturn.h> License: LGPLv2+ Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdnoreturn-tests���������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdnoreturn.c Depends-on: configure.ac: Makefile.am: TESTS += test-stdnoreturn check_PROGRAMS += test-stdnoreturn �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stdopen�������������������������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Arrange for stdin/stdout/stderr to be open. Files: lib/stdopen.c lib/stdopen.h Depends-on: fcntl unistd configure.ac: Makefile.am: lib_SOURCES += stdopen.c Include: "stdopen.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stpcpy��������������������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stpcpy() function: copy a string, returning a pointer to its end. Files: lib/stpcpy.c m4/stpcpy.m4 Depends-on: extensions string configure.ac: gl_FUNC_STPCPY if test $HAVE_STPCPY = 0; then AC_LIBOBJ([stpcpy]) gl_PREREQ_STPCPY fi gl_STRING_MODULE_INDICATOR([stpcpy]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/stpncpy�������������������������������������������������������������0000664�0000000�0000000�00000000630�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stpncpy() function: copy a size-bounded string, returning a pointer to its end. Files: lib/stpncpy.c m4/stpncpy.m4 Depends-on: extensions string configure.ac: gl_FUNC_STPNCPY if test $HAVE_STPNCPY = 0 || test $REPLACE_STPNCPY = 1; then AC_LIBOBJ([stpncpy]) gl_PREREQ_STPNCPY fi gl_STRING_MODULE_INDICATOR([stpncpy]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: glibc ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strcase�������������������������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-insensitive string comparison functions. Files: lib/strcasecmp.c lib/strncasecmp.c m4/strcase.m4 Depends-on: strings configure.ac: gl_STRCASE if test $HAVE_STRCASECMP = 0; then AC_LIBOBJ([strcasecmp]) gl_PREREQ_STRCASECMP fi if test $HAVE_STRNCASECMP = 0; then AC_LIBOBJ([strncasecmp]) gl_PREREQ_STRNCASECMP fi Makefile.am: Include: <strings.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strcasestr����������������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strcasestr() function: efficient case-insensitive search for unibyte substring. Files: lib/strcasestr.c Depends-on: strcasestr-simple configure.ac: gl_FUNC_STRCASESTR if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then AC_LIBOBJ([strcasestr]) gl_PREREQ_STRCASESTR fi Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strcasestr-simple���������������������������������������������������0000664�0000000�0000000�00000000733�14110572173�0021361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strcasestr() function: case-insensitive search for unibyte substring. Files: lib/strcasestr.c lib/str-two-way.h m4/strcasestr.m4 Depends-on: string stdbool strcase memchr memcmp extensions configure.ac: gl_FUNC_STRCASESTR_SIMPLE if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then AC_LIBOBJ([strcasestr]) gl_PREREQ_STRCASESTR fi gl_STRING_MODULE_INDICATOR([strcasestr]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all �������������������������������������gnulib-20210822~d383792/modules/strcasestr-tests����������������������������������������������������0000664�0000000�0000000�00000000303�14110572173�0021223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strcasestr.c tests/signature.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-strcasestr check_PROGRAMS += test-strcasestr �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strchrnul�����������������������������������������������������������0000664�0000000�0000000�00000001026�14110572173�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strchrnul() function: Find the first occurrence of C in S or the final NUL byte. Files: lib/strchrnul.c lib/strchrnul.valgrind m4/strchrnul.m4 Depends-on: string extensions rawmemchr [test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1] configure.ac: gl_FUNC_STRCHRNUL if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then AC_LIBOBJ([strchrnul]) gl_PREREQ_STRCHRNUL fi gl_STRING_MODULE_INDICATOR([strchrnul]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Eric Blake, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strchrnul-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strchrnul.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strchrnul check_PROGRAMS += test-strchrnul ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strcspn�������������������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0017375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strcspn() function: search a string for any of a set of characters. Status: obsolete Notice: This module is obsolete. Files: lib/strcspn.c m4/strcspn.m4 Depends-on: configure.ac: gl_FUNC_STRCSPN if test $ac_cv_func_strcspn = no; then AC_LIBOBJ([strcspn]) gl_PREREQ_STRCSPN fi Makefile.am: Include: <string.h> License: LGPL Maintainer: glibc �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strdup��������������������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strdup() function: duplicate a string. Status: obsolete Notice: This module is obsolete. But you may want to use the strdup-posix module. Files: m4/strdup.m4 Depends-on: string configure.ac: gl_FUNC_STRDUP gl_STRING_MODULE_INDICATOR([strdup]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strdup-posix��������������������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strdup() function: duplicate a string. Files: lib/strdup.c m4/strdup.m4 Depends-on: string malloc-posix [test $REPLACE_STRDUP = 1] configure.ac: gl_FUNC_STRDUP_POSIX if test $REPLACE_STRDUP = 1; then AC_LIBOBJ([strdup]) gl_PREREQ_STRDUP fi gl_STRING_MODULE_INDICATOR([strdup]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/streq���������������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Optimized string comparison. Files: lib/streq.h Depends-on: configure.ac: Makefile.am: Include: "streq.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerror������������������������������������������������������������0000664�0000000�0000000�00000001046�14110572173�0017555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strerror() function: return string describing error code. Files: lib/strerror.c m4/strerror.m4 Depends-on: string errno [test $REPLACE_STRERROR = 1] intprops [test $REPLACE_STRERROR = 1] strerror-override [test $REPLACE_STRERROR = 1] verify [test $REPLACE_STRERROR = 1] configure.ac: gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerror-override���������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0021377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strerror_override() function: provide strings for gnulib-specific errno values Files: lib/strerror-override.h lib/strerror-override.c m4/sys_socket_h.m4 m4/strerror.m4 Depends-on: errno configure.ac: AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi Makefile.am: Include: "strerror-override.h" License: LGPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/strerror-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strerror.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strerror check_PROGRAMS += test-strerror �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerror_r-posix����������������������������������������������������0000664�0000000�0000000�00000001332�14110572173�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strerror_r() function: get string describing error code. Files: lib/strerror_r.c m4/strerror_r.m4 Depends-on: string extensions errno [test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1] lock [test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1] strerror-override [test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1] configure.ac: gl_FUNC_STRERROR_R if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then AC_LIBOBJ([strerror_r]) gl_PREREQ_STRERROR_R fi gl_STRING_MODULE_INDICATOR([strerror_r]) dnl For the modules argp, error. gl_MODULE_INDICATOR([strerror_r-posix]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerror_r-posix-tests����������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strerror_r.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strerror_r check_PROGRAMS += test-strerror_r �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerrorname_np�����������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0021113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strerrorname_np() function: name of system error code. Files: lib/strerrorname_np.c m4/strerrorname_np.m4 Depends-on: extensions string configure.ac: gl_FUNC_STRERRORNAME_NP if test $HAVE_STRERRORNAME_NP = 0 || test $REPLACE_STRERRORNAME_NP = 1; then AC_LIBOBJ([strerrorname_np]) fi gl_STRING_MODULE_INDICATOR([strerrorname_np]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strerrorname_np-tests�����������������������������������������������0000664�0000000�0000000�00000000264�14110572173�0022254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strerrorname_np.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strerrorname_np check_PROGRAMS += test-strerrorname_np ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strfmon_l�����������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strfmon_l() function: formatted conversion of monetary value to string. Files: lib/strfmon_l.c m4/strfmon_l.m4 m4/locale-fr.m4 m4/codeset.m4 Depends-on: monetary extensions stdbool [test $REPLACE_STRFMON_L = 1] configure.ac: gl_FUNC_STRFMON_L if test $REPLACE_STRFMON_L = 1; then AC_LIBOBJ([strfmon_l]) gl_PREREQ_STRFMON_L fi gl_MONETARY_MODULE_INDICATOR([strfmon_l]) Makefile.am: Include: #if HAVE_MONETARY_H <monetary.h> #endif License: LGPLv2+ Maintainer: all �����������������gnulib-20210822~d383792/modules/strfmon_l-tests�����������������������������������������������������0000664�0000000�0000000�00000000323�14110572173�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strfmon_l.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strfmon_l check_PROGRAMS += test-strfmon_l test_strfmon_l_LDADD = $(LDADD) $(LIB_SETLOCALE) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strftime������������������������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nstrftime() function: convert date and time to string, with GNU extensions. Status: obsolete Notice: This module is obsolete. Use module 'nstrftime' instead. Files: Depends-on: nstrftime configure.ac: Makefile.am: Include: "strftime.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strftime-fixes������������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strftime() function: convert broken-down time to string. Files: lib/strftime-fixes.c m4/strftime-fixes.m4 Depends-on: time configure.ac: gl_FUNC_STRFTIME if test $REPLACE_STRFTIME = 1; then AC_LIBOBJ([strftime-fixes]) fi gl_TIME_MODULE_INDICATOR([strftime]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconv������������������������������������������������������������0000664�0000000�0000000�00000001046�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion of strings made easy, uses iconv. Files: lib/striconv.h lib/striconv.c Depends-on: iconv iconv_open free-posix strdup c-strcase configure.ac: if test $gl_cond_libtool = false; then gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" gl_libdeps="$gl_libdeps $LIBICONV" fi Makefile.am: lib_SOURCES += striconv.h striconv.c if GL_COND_LIBTOOL lib_LDFLAGS += $(LTLIBICONV) endif Include: "striconv.h" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconv-tests������������������������������������������������������0000664�0000000�0000000�00000000270�14110572173�0020700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-striconv.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-striconv check_PROGRAMS += test-striconv test_striconv_LDADD = $(LDADD) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconveh����������������������������������������������������������0000664�0000000�0000000�00000001263�14110572173�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion of strings with error handling, uses iconv. Files: lib/striconveh.h lib/striconveh.c lib/iconveh.h Depends-on: stdbool iconv iconv_open unistr/u8-prev unistr/u8-mbtouc-unsafe unistr/u8-mbtouc unistr/u8-mbtoucr unistr/u8-uctomb free-posix strdup c-strcase c-strcaseeq memmove configure.ac: if test $gl_cond_libtool = false; then gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" gl_libdeps="$gl_libdeps $LIBICONV" fi Makefile.am: lib_SOURCES += striconveh.h striconveh.c if GL_COND_LIBTOOL lib_LDFLAGS += $(LTLIBICONV) endif Include: "striconveh.h" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconveh-tests����������������������������������������������������0000664�0000000�0000000�00000000320�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-striconveh.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-striconveh check_PROGRAMS += test-striconveh test_striconveh_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconveha���������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion of strings with error handling and autodetection, uses iconv. Files: lib/striconveha.h lib/striconveha.c Depends-on: stdbool striconveh malloca strdup c-strcase configure.ac: Makefile.am: lib_SOURCES += striconveha.h striconveha.c Include: "striconveha.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/striconveha-tests���������������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0021363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-striconveha.c tests/iconvsupport.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-striconveha check_PROGRAMS += test-striconveha test_striconveha_SOURCES = test-striconveha.c iconvsupport.c test_striconveha_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/string��������������������������������������������������������������0000664�0000000�0000000�00000014177�14110572173�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <string.h>. Files: lib/string.in.h m4/string_h.m4 Depends-on: extensions extern-inline include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use stddef configure.ac: gl_STRING_H gl_STRING_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += string.h # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GNULIB_MDA_STRDUP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -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)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t Include: <string.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/string-buffer�������������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0020450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A buffer that accumulates a string by piecewise concatenation. Files: lib/string-buffer.h lib/string-buffer.c Depends-on: stdbool attribute stdarg vsnprintf-posix configure.ac: Makefile.am: lib_SOURCES += string-buffer.c Include: "string-buffer.h" License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/string-buffer-tests�������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-string-buffer.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-string-buffer check_PROGRAMS += test-string-buffer ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/string-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0020707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-string-c++.cc tests/test-string-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-string-c++ check_PROGRAMS += test-string-c++ test_string_c___SOURCES = test-string-c++.cc test-string-c++2.cc test_string_c___LDADD = $(LDADD) $(LIBINTL) $(LIBTHREAD) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/string-tests��������������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-string.c Depends-on: verify string-c++-tests configure.ac: Makefile.am: TESTS += test-string check_PROGRAMS += test-string ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strings�������������������������������������������������������������0000664�0000000�0000000�00000002757�14110572173�0017376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A substitute <strings.h>. Files: lib/strings.in.h m4/strings_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_types configure.ac: gl_STRINGS_H gl_STRINGS_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += strings.h # We need the following in order to create <strings.h> when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -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)' \ < $(srcdir)/strings.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += strings.h strings.h-t Include: <strings.h> License: LGPLv2+ Maintainer: all �����������������gnulib-20210822~d383792/modules/strings-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000371�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strings-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-strings-c++ check_PROGRAMS += test-strings-c++ test_strings_c___SOURCES = test-strings-c++.cc endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strings-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strings.c Depends-on: strings-c++-tests configure.ac: Makefile.am: TESTS += test-strings check_PROGRAMS += test-strings �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strncat�������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strncat() function: append part of a string to a string. Files: lib/strncat.c m4/strncat.m4 m4/mmap-anon.m4 Depends-on: string configure.ac: gl_FUNC_STRNCAT if test $REPLACE_STRNCAT = 1; then AC_LIBOBJ([strncat]) gl_PREREQ_STRNCAT fi gl_STRING_MODULE_INDICATOR([strncat]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strncat-tests�������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strncat.c tests/unistr/test-strncat.h tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-strncat check_PROGRAMS += test-strncat ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strndup�������������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strndup() function: duplicate a size-bounded string. Files: lib/strndup.c m4/strndup.m4 Depends-on: string extensions strnlen [test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1] configure.ac: gl_FUNC_STRNDUP if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then AC_LIBOBJ([strndup]) fi gl_STRING_MODULE_INDICATOR([strndup]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: glibc ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strnlen�������������������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strnlen() function: determine the length of a size-bounded string. Files: lib/strnlen.c m4/strnlen.m4 Depends-on: string extensions configure.ac: gl_FUNC_STRNLEN if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then AC_LIBOBJ([strnlen]) gl_PREREQ_STRNLEN fi gl_STRING_MODULE_INDICATOR([strnlen]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strnlen-tests�������������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strnlen.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-strnlen check_PROGRAMS += test-strnlen �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strnlen1������������������������������������������������������������0000664�0000000�0000000�00000000343�14110572173�0017440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quick string length estimation. Files: lib/strnlen1.h lib/strnlen1.c Depends-on: memchr configure.ac: Makefile.am: lib_SOURCES += strnlen1.h strnlen1.c Include: "strnlen1.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strpbrk�������������������������������������������������������������0000664�0000000�0000000�00000000630�14110572173�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strpbrk() function: search a string for any of a set of characters. Status: obsolete Notice: This module is obsolete. Files: lib/strpbrk.c m4/strpbrk.m4 Depends-on: string configure.ac: gl_FUNC_STRPBRK if test $HAVE_STRPBRK = 0; then AC_LIBOBJ([strpbrk]) gl_PREREQ_STRPBRK fi gl_STRING_MODULE_INDICATOR([strpbrk]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: glibc ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strptime������������������������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a string representation of time to a tm structure. Files: lib/strptime.c m4/strptime.m4 m4/tm_gmtoff.m4 Depends-on: time extensions sys_time [test $HAVE_STRPTIME = 0] string [test $HAVE_STRPTIME = 0] strcase [test $HAVE_STRPTIME = 0] stdbool [test $HAVE_STRPTIME = 0] time_r [test $HAVE_STRPTIME = 0] configure.ac: gl_FUNC_STRPTIME if test $HAVE_STRPTIME = 0; then AC_LIBOBJ([strptime]) gl_PREREQ_STRPTIME fi gl_TIME_MODULE_INDICATOR([strptime]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strsep��������������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0017210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strsep() function: extract token from string. Files: lib/strsep.c m4/strsep.m4 Depends-on: string extensions strpbrk [test $HAVE_STRSEP = 0] configure.ac: gl_FUNC_STRSEP if test $HAVE_STRSEP = 0; then AC_LIBOBJ([strsep]) gl_PREREQ_STRSEP fi gl_STRING_MODULE_INDICATOR([strsep]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Yoann Vandoorselaere �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strsignal�����������������������������������������������������������0000664�0000000�0000000�00000001435�14110572173�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strsignal() function: return string describing signal. Files: lib/strsignal.c lib/siglist.h m4/strsignal.m4 Depends-on: string extensions gettext-h [test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1] lock [test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1] tls [test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1] snprintf [test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1] memset [test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1] configure.ac: gl_FUNC_STRSIGNAL if test $HAVE_STRSIGNAL = 0 || test $REPLACE_STRSIGNAL = 1; then AC_LIBOBJ([strsignal]) gl_PREREQ_STRSIGNAL fi gl_STRING_MODULE_INDICATOR([strsignal]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Colin Watson, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strsignal-tests�����������������������������������������������������0000664�0000000�0000000�00000000331�14110572173�0021035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strsignal.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strsignal check_PROGRAMS += test-strsignal test_strsignal_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strstr��������������������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strstr() function: efficiently locate first substring in a buffer. Files: lib/strstr.c Depends-on: strstr-simple configure.ac: gl_FUNC_STRSTR if test $REPLACE_STRSTR = 1; then AC_LIBOBJ([strstr]) fi Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strstr-simple�������������������������������������������������������0000664�0000000�0000000�00000001017�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strstr() function: locate first substring in a buffer. Files: lib/str-two-way.h lib/strstr.c m4/strstr.m4 Depends-on: string builtin-expect [test $REPLACE_STRSTR = 1] stdbool [test $REPLACE_STRSTR = 1] memchr [test $REPLACE_STRSTR = 1] memcmp [test $REPLACE_STRSTR = 1] configure.ac: gl_FUNC_STRSTR_SIMPLE if test $REPLACE_STRSTR = 1; then AC_LIBOBJ([strstr]) fi gl_STRING_MODULE_INDICATOR([strstr]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strstr-tests��������������������������������������������������������0000664�0000000�0000000�00000000510�14110572173�0020367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strstr.c tests/zerosize-ptr.h tests/signature.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: AC_CHECK_DECLS_ONCE([alarm]) gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-strstr check_PROGRAMS += test-strstr ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtod��������������������������������������������������������������0000664�0000000�0000000�00000001107�14110572173�0017210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtod() function: convert string to 'double'. Files: lib/strtod.c m4/strtod.m4 m4/ldexp.m4 Depends-on: stdlib strtod-obsolete c-ctype [test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1] math [test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1] stdbool [test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1] configure.ac: gl_FUNC_STRTOD if test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1; then AC_LIBOBJ([strtod]) gl_PREREQ_STRTOD fi gl_STDLIB_MODULE_INDICATOR([strtod]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtod-obsolete�����������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtod() function for old platforms. Status: obsolete Notice: This module is obsolete. Files: m4/strtod-obsolete.m4 Depends-on: strtod configure.ac: gl_FUNC_STRTOD_OBSOLETE Makefile.am: Include: <string.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtod-tests��������������������������������������������������������0000664�0000000�0000000�00000000757�14110572173�0020362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtod.c tests/test-strtod1.sh tests/test-strtod1.c tests/signature.h tests/minus-zero.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: float isnand-nolibm signbit configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-strtod check_PROGRAMS += test-strtod TESTS += test-strtod1.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-strtod1 test_strtod1_LDADD = $(LDADD) $(LIB_SETLOCALE) �����������������gnulib-20210822~d383792/modules/strtoimax�����������������������������������������������������������0000664�0000000�0000000�00000001264�14110572173�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoimax() function: convert string to 'intmax_t'. Files: lib/strtoimax.c m4/strtoimax.m4 Depends-on: inttypes-incomplete verify [test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1] stdint [test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1] strtoll [{ test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; } && test $ac_cv_type_long_long_int = yes] configure.ac: gl_FUNC_STRTOIMAX if test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; then AC_LIBOBJ([strtoimax]) gl_PREREQ_STRTOIMAX fi gl_INTTYPES_MODULE_INDICATOR([strtoimax]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoimax-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtoimax.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtoimax check_PROGRAMS += test-strtoimax ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtok_r������������������������������������������������������������0000664�0000000�0000000�00000000716�14110572173�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtok_r() function: split string into tokens, thread safe. Files: lib/strtok_r.c m4/strtok_r.m4 Depends-on: string strpbrk [test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1] configure.ac: gl_FUNC_STRTOK_R if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then AC_LIBOBJ([strtok_r]) gl_PREREQ_STRTOK_R fi gl_STRING_MODULE_INDICATOR([strtok_r]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, glibc ��������������������������������������������������gnulib-20210822~d383792/modules/strtol��������������������������������������������������������������0000664�0000000�0000000�00000000514�14110572173�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtol() function: convert string to 'long'. Files: lib/strtol.c m4/strtol.m4 Depends-on: stdlib configure.ac: gl_FUNC_STRTOL if test $HAVE_STRTOL = 0 || test $REPLACE_STRTOL = 1; then AC_LIBOBJ([strtol]) fi gl_STDLIB_MODULE_INDICATOR([strtol]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtol-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtol.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtol check_PROGRAMS += test-strtol �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtold�������������������������������������������������������������0000664�0000000�0000000�00000001336�14110572173�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtold() function: convert string to 'long double'. Files: lib/strtold.c lib/strtod.c m4/strtold.m4 m4/math_h.m4 m4/ldexpl.m4 Depends-on: stdlib c-ctype [test $HAVE_STRTOLD = 0 || test $REPLACE_STRTOLD = 1] math [test $HAVE_STRTOLD = 0 || test $REPLACE_STRTOLD = 1] stdbool [test $HAVE_STRTOLD = 0 || test $REPLACE_STRTOLD = 1] strtod [{ test $HAVE_STRTOLD = 0 || test $REPLACE_STRTOLD = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_STRTOLD if test $HAVE_STRTOLD = 0 || test $REPLACE_STRTOLD = 1; then AC_LIBOBJ([strtold]) gl_PREREQ_STRTOLD fi gl_STDLIB_MODULE_INDICATOR([strtold]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtold-tests�������������������������������������������������������0000664�0000000�0000000�00000000767�14110572173�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtold.c tests/test-strtold1.sh tests/test-strtold1.c tests/signature.h tests/minus-zero.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: float isnanl-nolibm signbit configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-strtold check_PROGRAMS += test-strtold TESTS += test-strtold1.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-strtold1 test_strtold1_LDADD = $(LDADD) $(LIB_SETLOCALE) ���������gnulib-20210822~d383792/modules/strtoll�������������������������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoll() function: convert string to 'long long'. Files: lib/strtol.c lib/strtoll.c m4/strtoll.m4 Depends-on: limits-h stdlib configure.ac: gl_FUNC_STRTOLL if test $HAVE_STRTOLL = 0 || test $REPLACE_STRTOLL = 1; then AC_LIBOBJ([strtoll]) gl_PREREQ_STRTOLL fi gl_STDLIB_MODULE_INDICATOR([strtoll]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoll-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtoll.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtoll check_PROGRAMS += test-strtoll ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoul�������������������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoul() function: convert string to 'unsigned long'. Files: lib/strtol.c lib/strtoul.c m4/strtoul.m4 Depends-on: stdlib configure.ac: gl_FUNC_STRTOUL if test $HAVE_STRTOUL = 0 || test $REPLACE_STRTOUL = 1; then AC_LIBOBJ([strtoul]) fi gl_STDLIB_MODULE_INDICATOR([strtoul]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoul-tests�������������������������������������������������������0000664�0000000�0000000�00000000234�14110572173�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtoul.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtoul check_PROGRAMS += test-strtoul ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoull������������������������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0017565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoull() function: convert string to 'unsigned long long'. Files: lib/strtol.c lib/strtoul.c lib/strtoull.c m4/strtoull.m4 Depends-on: limits-h stdlib configure.ac: gl_FUNC_STRTOULL if test $HAVE_STRTOULL = 0 || test $REPLACE_STRTOULL = 1; then AC_LIBOBJ([strtoull]) gl_PREREQ_STRTOULL fi gl_STDLIB_MODULE_INDICATOR([strtoull]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoull-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtoull.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtoull check_PROGRAMS += test-strtoull �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoumax�����������������������������������������������������������0000664�0000000�0000000�00000001316�14110572173�0017741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoumax() function: convert string to 'uintmax_t'. Files: lib/strtoimax.c lib/strtoumax.c m4/strtoumax.m4 Depends-on: inttypes-incomplete verify [test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1] stdint [test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1] strtoull [{ test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1; } && test $ac_cv_type_unsigned_long_long_int = yes] configure.ac: gl_FUNC_STRTOUMAX if test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1; then AC_LIBOBJ([strtoumax]) gl_PREREQ_STRTOUMAX fi gl_INTTYPES_MODULE_INDICATOR([strtoumax]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strtoumax-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtoumax.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strtoumax check_PROGRAMS += test-strtoumax ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/strverscmp����������������������������������������������������������0000664�0000000�0000000�00000000711�14110572173�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare strings holding version numbers. Files: lib/strverscmp.c m4/strverscmp.m4 Depends-on: extensions libc-config [test $HAVE_STRVERSCMP = 0] stdint [test $HAVE_STRVERSCMP = 0] string configure.ac: gl_FUNC_STRVERSCMP if test $HAVE_STRVERSCMP = 0; then AC_LIBOBJ([strverscmp]) gl_PREREQ_STRVERSCMP fi gl_STRING_MODULE_INDICATOR([strverscmp]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Jim Meyering, glibc �������������������������������������������������������gnulib-20210822~d383792/modules/strverscmp-tests����������������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strverscmp.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strverscmp check_PROGRAMS += test-strverscmp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sublist�������������������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0017351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type backed by another list. Files: lib/gl_sublist.h lib/gl_sublist.c Depends-on: list stdint configure.ac: Makefile.am: lib_SOURCES += gl_sublist.h gl_sublist.c Include: "gl_sublist.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/supersede�����������������������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Open a file, without destroying an old file with the same name. Files: lib/supersede.h lib/supersede.c m4/supersede.m4 Depends-on: c99 fcntl-h sys_stat clean-temp tempname canonicalize open unlink free-posix ignore-value stat stat-time utimens acl-permissions qcopy-acl fdopen configure.ac: gl_SUPERSEDE Makefile.am: lib_SOURCES += supersede.c Include: "supersede.h" Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) $(LIBTHREAD) License: GPL Maintainer: all ��������������������������������������gnulib-20210822~d383792/modules/supersede-tests�����������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-supersede.c tests/test-supersede-open.h tests/test-supersede-fopen.h tests/macros.h Depends-on: c99 mkdtemp filenamecat write read-file unlink rmdir symlink configure.ac: Makefile.am: TESTS += test-supersede check_PROGRAMS += test-supersede test_supersede_LDADD = $(LDADD) $(LIB_ACL) $(LIB_CLOCK_GETTIME) $(LIB_GETRANDOM) $(LIBINTL) $(LIBTHREAD) �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/symlink�������������������������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: symlink() function: create a symlink, if possible Files: lib/symlink.c m4/symlink.m4 Depends-on: unistd lstat [test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1] configure.ac: gl_FUNC_SYMLINK if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then AC_LIBOBJ([symlink]) fi gl_UNISTD_MODULE_INDICATOR([symlink]) Makefile.am: Include: <unistd.h> License: LGPL Maintainer: Eric Blake ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/symlink-tests�������������������������������������������������������0000664�0000000�0000000�00000000306�14110572173�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-symlink.h tests/test-symlink.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool configure.ac: Makefile.am: TESTS += test-symlink check_PROGRAMS += test-symlink ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/symlinkat�����������������������������������������������������������0000664�0000000�0000000�00000001567�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: symlinkat() function: create symlinks relative to a directory Files: lib/symlinkat.c lib/at-func.c m4/symlinkat.m4 Depends-on: unistd extensions fcntl-h [test $HAVE_SYMLINKAT = 0 || test $REPLACE_SYMLINKAT = 1] at-internal [test $HAVE_SYMLINKAT = 0] errno [test $HAVE_SYMLINKAT = 0] fchdir [test $HAVE_SYMLINKAT = 0] filename [test $HAVE_SYMLINKAT = 0] openat-die [test $HAVE_SYMLINKAT = 0] openat-h [test $HAVE_SYMLINKAT = 0] save-cwd [test $HAVE_SYMLINKAT = 0] symlink [test $HAVE_SYMLINKAT = 0] fstatat [test $REPLACE_SYMLINKAT = 1] configure.ac: gl_FUNC_SYMLINKAT if test $HAVE_SYMLINKAT = 0 || test $REPLACE_SYMLINKAT = 1; then AC_LIBOBJ([symlinkat]) fi gl_UNISTD_MODULE_INDICATOR([symlinkat]) Makefile.am: Include: <fcntl.h> <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/symlinkat-tests�����������������������������������������������������0000664�0000000�0000000�00000000365�14110572173�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-symlink.h tests/test-symlinkat.c tests/signature.h tests/macros.h Depends-on: ignore-value openat configure.ac: Makefile.am: TESTS += test-symlinkat check_PROGRAMS += test-symlinkat test_symlinkat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_file������������������������������������������������������������0000664�0000000�0000000�00000002373�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: <sys/file.h> for systems with an incomplete header. Files: lib/sys_file.in.h m4/sys_file_h.m4 Depends-on: include_next snippet/warn-on-use configure.ac: gl_SYS_FILE_H gl_SYS_FILE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/file.h # We need the following in order to create <sys/file.h> when the system # has one that is incomplete. sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ -e 's/@''GNULIB_FLOCK''@/$(GNULIB_FLOCK)/g' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_file.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/file.h sys/file.h-t MOSTLYCLEANDIRS += sys Include: <sys/file.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_file-tests������������������������������������������������������0000664�0000000�0000000�00000000176�14110572173�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_file.c Depends-on: configure.ac: Makefile.am: TESTS += test-sys_file check_PROGRAMS += test-sys_file ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_ioctl�����������������������������������������������������������0000664�0000000�0000000�00000003076�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/ioctl.h> for systems with missing declarations. Files: lib/sys_ioctl.in.h m4/sys_ioctl_h.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use unistd configure.ac: gl_SYS_IOCTL_H gl_SYS_IOCTL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/ioctl.h # We need the following in order to create <sys/ioctl.h> when the system # does not have a complete one. sys/ioctl.h: sys_ioctl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_SYS_IOCTL_H''@|$(HAVE_SYS_IOCTL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_IOCTL_H''@|$(NEXT_SYS_IOCTL_H)|g' \ -e 's/@''GNULIB_IOCTL''@/$(GNULIB_IOCTL)/g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e 's|@''REPLACE_IOCTL''@|$(REPLACE_IOCTL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_ioctl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/ioctl.h sys/ioctl.h-t MOSTLYCLEANDIRS += sys Include: <sys/ioctl.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_ioctl-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0021412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_ioctl-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_ioctl-c++ check_PROGRAMS += test-sys_ioctl-c++ test_sys_ioctl_c___SOURCES = test-sys_ioctl-c++.cc test_sys_ioctl_c___LDADD = $(LDADD) $(LIBINTL) $(LIBSOCKET) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) endif �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_ioctl-tests�����������������������������������������������������0000664�0000000�0000000�00000000225�14110572173�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_ioctl.c Depends-on: sys_ioctl-c++-tests configure.ac: Makefile.am: TESTS += test-sys_ioctl check_PROGRAMS += test-sys_ioctl ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_random����������������������������������������������������������0000664�0000000�0000000�00000003012�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <sys/random.h>. Files: lib/sys_random.in.h m4/sys_random_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_SYS_RANDOM_H gl_SYS_RANDOM_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/random.h # We need the following in order to create <sys/random.h> when the system # doesn't have one. sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \ -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \ -e 's/@''GNULIB_GETRANDOM''@/$(GNULIB_GETRANDOM)/g' \ -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \ -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \ -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)' \ < $(srcdir)/sys_random.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/random.h sys/random.h-t MOSTLYCLEANDIRS += sys Include: <sys/random.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_random-c++-tests������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0021565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_random-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_random-c++ check_PROGRAMS += test-sys_random-c++ test_sys_random_c___SOURCES = test-sys_random-c++.cc test_sys_random_c___LDADD = $(LDADD) $(LIB_GETRANDOM) endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_random-tests����������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0021204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_random.c Depends-on: sys_random-c++-tests configure.ac: Makefile.am: TESTS += test-sys_random check_PROGRAMS += test-sys_random �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_resource��������������������������������������������������������0000664�0000000�0000000�00000002770�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <sys/resource.h>. Files: lib/sys_resource.in.h m4/sys_resource_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_time configure.ac: gl_SYS_RESOURCE_H gl_SYS_RESOURCE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/resource.h # We need the following in order to create <sys/resource.h> when the system # doesn't have one. sys/resource.h: sys_resource.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_RESOURCE_H''@|$(NEXT_SYS_RESOURCE_H)|g' \ -e 's|@''HAVE_SYS_RESOURCE_H''@|$(HAVE_SYS_RESOURCE_H)|g' \ -e 's/@''GNULIB_GETRUSAGE''@/$(GNULIB_GETRUSAGE)/g' \ -e 's/@''HAVE_GETRUSAGE''@/$(HAVE_GETRUSAGE)/g' \ -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)' \ < $(srcdir)/sys_resource.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/resource.h sys/resource.h-t MOSTLYCLEANDIRS += sys Include: <sys/resource.h> License: LGPLv2+ Maintainer: all ��������gnulib-20210822~d383792/modules/sys_resource-c++-tests����������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0022123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_resource-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_resource-c++ check_PROGRAMS += test-sys_resource-c++ test_sys_resource_c___SOURCES = test-sys_resource-c++.cc endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_resource-tests��������������������������������������������������0000664�0000000�0000000�00000000241�14110572173�0021554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_resource.c Depends-on: sys_resource-c++-tests configure.ac: Makefile.am: TESTS += test-sys_resource check_PROGRAMS += test-sys_resource ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_select����������������������������������������������������������0000664�0000000�0000000�00000003243�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/select.h> for systems lacking it. Files: lib/sys_select.in.h m4/sys_select_h.m4 m4/sys_socket_h.m4 Depends-on: include_next signal-h snippet/c++defs snippet/warn-on-use sys_time configure.ac: gl_SYS_SELECT_H gl_SYS_SELECT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/select.h # We need the following in order to create <sys/select.h> when the system # doesn't have one that works with the given compiler. sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \ -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_select.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/select.h sys/select.h-t MOSTLYCLEANDIRS += sys Include: <sys/select.h> License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_select-c++-tests������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0021561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_select-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_select-c++ check_PROGRAMS += test-sys_select-c++ test_sys_select_c___SOURCES = test-sys_select-c++.cc test_sys_select_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_SELECT) $(LIB_NANOSLEEP) endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_select-tests����������������������������������������������������0000664�0000000�0000000�00000000253�14110572173�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_select.c tests/signature.h Depends-on: sys_select-c++-tests configure.ac: Makefile.am: TESTS += test-sys_select check_PROGRAMS += test-sys_select �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_socket����������������������������������������������������������0000664�0000000�0000000�00000005457�14110572173�0020073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <sys/socket.h>. Files: lib/sys_socket.c lib/sys_socket.in.h m4/sys_socket_h.m4 m4/sockpfaf.m4 Depends-on: errno extern-inline include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use socklen ssize_t stdalign sys_uio configure.ac: gl_SYS_SOCKET_H gl_SYS_SOCKET_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/socket.h lib_SOURCES += sys_socket.c # We need the following in order to create <sys/socket.h> when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \ -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \ -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \ -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \ -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \ -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \ -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \ -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \ -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \ -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \ -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \ -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \ -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \ -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \ -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ -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)' \ < $(srcdir)/sys_socket.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t MOSTLYCLEANDIRS += sys Include: <sys/socket.h> License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_socket-c++-tests������������������������������������������������0000664�0000000�0000000�00000000526�14110572173�0021571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_socket-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_socket-c++ check_PROGRAMS += test-sys_socket-c++ test_sys_socket_c___SOURCES = test-sys_socket-c++.cc test_sys_socket_c___LDADD = $(LDADD) $(LIBINTL) $(LIBSOCKET) $(LIB_NANOSLEEP) endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_socket-tests����������������������������������������������������0000664�0000000�0000000�00000000271�14110572173�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_socket.c Depends-on: sys_socket-c++-tests configure.ac: AC_CHECK_FUNCS_ONCE([shutdown]) Makefile.am: TESTS += test-sys_socket check_PROGRAMS += test-sys_socket ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_stat������������������������������������������������������������0000664�0000000�0000000�00000007535�14110572173�0017555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/stat.h> for systems with missing declarations. Files: lib/sys_stat.in.h m4/sys_stat_h.m4 m4/unistd_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_types time configure.ac: gl_SYS_STAT_H gl_SYS_STAT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/stat.h # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -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)' \ < $(srcdir)/sys_stat.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t MOSTLYCLEANDIRS += sys Include: <sys/stat.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_stat-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_stat-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_stat-c++ check_PROGRAMS += test-sys_stat-c++ test_sys_stat_c___SOURCES = test-sys_stat-c++.cc test_sys_stat_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_stat-tests������������������������������������������������������0000664�0000000�0000000�00000000230�14110572173�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_stat.c Depends-on: verify sys_stat-c++-tests configure.ac: Makefile.am: TESTS += test-sys_stat check_PROGRAMS += test-sys_stat ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_time������������������������������������������������������������0000664�0000000�0000000�00000003362�14110572173�0017532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/time.h> that conforms better to POSIX. Files: lib/sys_time.in.h m4/sys_time_h.m4 m4/sys_socket_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_SYS_TIME_H gl_SYS_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/time.h # We need the following in order to create <sys/time.h> when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -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)' \ < $(srcdir)/sys_time.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/time.h sys/time.h-t Include: <sys/time.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_time-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_time-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_time-c++ check_PROGRAMS += test-sys_time-c++ test_sys_time_c___SOURCES = test-sys_time-c++.cc test_sys_time_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_time-tests������������������������������������������������������0000664�0000000�0000000�00000000221�14110572173�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_time.c Depends-on: sys_time-c++-tests configure.ac: Makefile.am: TESTS += test-sys_time check_PROGRAMS += test-sys_time �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_times�����������������������������������������������������������0000664�0000000�0000000�00000002704�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/times.h> for systems lacking it. Files: lib/sys_times.in.h m4/sys_times_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/warn-on-use configure.ac: gl_SYS_TIMES_H gl_SYS_TIMES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/times.h # We need the following in order to create <sys/times.h> when the system # doesn't have one that works with the given compiler. sys/times.h: sys_times.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_SYS_TIMES_H''@/$(HAVE_SYS_TIMES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIMES_H''@|$(NEXT_SYS_TIMES_H)|g' \ -e 's/@''GNULIB_TIMES''@/$(GNULIB_TIMES)/g' \ -e 's|@''HAVE_STRUCT_TMS''@|$(HAVE_STRUCT_TMS)|g' \ -e 's|@''HAVE_TIMES''@|$(HAVE_TIMES)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_times.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/times.h sys/times.h-t MOSTLYCLEANDIRS += sys Include: <sys/times.h> License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������gnulib-20210822~d383792/modules/sys_times-tests�����������������������������������������������������0000664�0000000�0000000�00000000145�14110572173�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_times.c Makefile.am: TESTS += test-sys_times check_PROGRAMS += test-sys_times ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_types�����������������������������������������������������������0000664�0000000�0000000�00000002250�14110572173�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/types.h> that conforms better to POSIX. Files: lib/sys_types.in.h m4/sys_types_h.m4 m4/off_t.m4 m4/pid_t.m4 Depends-on: include_next ssize_t configure.ac: gl_SYS_TYPES_H gl_SYS_TYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/types.h # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t Include: <sys/types.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_types-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0021442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_types-c++.cc Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_types-c++ check_PROGRAMS += test-sys_types-c++ test_sys_types_c___SOURCES = test-sys_types-c++.cc endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_types-tests�����������������������������������������������������0000664�0000000�0000000�00000000225�14110572173�0021073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_types.c Depends-on: sys_types-c++-tests configure.ac: Makefile.am: TESTS += test-sys_types check_PROGRAMS += test-sys_types ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_uio�������������������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <sys/uio.h>. Files: lib/sys_uio.in.h m4/sys_uio_h.m4 Depends-on: include_next ssize_t sys_types configure.ac: gl_SYS_UIO_H gl_SYS_UIO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/uio.h # We need the following in order to create <sys/uio.h> when the system # doesn't have one that works with the given compiler. sys/uio.h: sys_uio.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ < $(srcdir)/sys_uio.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t MOSTLYCLEANDIRS += sys Include: <sys/uio.h> License: LGPLv2+ Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_uio-tests�������������������������������������������������������0000664�0000000�0000000�00000000173�14110572173�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_uio.c Depends-on: configure.ac: Makefile.am: TESTS += test-sys_uio check_PROGRAMS += test-sys_uio �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_utsname���������������������������������������������������������0000664�0000000�0000000�00000002703�14110572173�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/utsname.h> for systems which lack it. Files: lib/sys_utsname.in.h m4/sys_utsname_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/warn-on-use configure.ac: gl_SYS_UTSNAME_H gl_SYS_UTSNAME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/utsname.h # We need the following in order to create <sys/utsname.h> when the system # does not have one. sys/utsname.h: sys_utsname.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_SYS_UTSNAME_H''@/$(HAVE_SYS_UTSNAME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UTSNAME_H''@|$(NEXT_SYS_UTSNAME_H)|g' \ -e 's/@''GNULIB_UNAME''@/$(GNULIB_UNAME)/g' \ -e 's|@''HAVE_STRUCT_UTSNAME''@|$(HAVE_STRUCT_UTSNAME)|g' \ -e 's|@''HAVE_UNAME''@|$(HAVE_UNAME)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_utsname.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/utsname.h sys/utsname.h-t MOSTLYCLEANDIRS += sys Include: <sys/utsname.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/sys_utsname-tests���������������������������������������������������0000664�0000000�0000000�00000000207�14110572173�0021403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_utsname.c Depends-on: configure.ac: Makefile.am: TESTS += test-sys_utsname check_PROGRAMS += test-sys_utsname �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_wait������������������������������������������������������������0000664�0000000�0000000�00000002374�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sys/wait.h> for systems with missing declarations. Files: lib/sys_wait.in.h m4/sys_wait_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_SYS_WAIT_H gl_SYS_WAIT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/wait.h # We need the following in order to create <sys/wait.h> when the system # has one that is incomplete. sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_wait.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t MOSTLYCLEANDIRS += sys Include: <sys/wait.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_wait-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_wait-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-sys_wait-c++ check_PROGRAMS += test-sys_wait-c++ test_sys_wait_c___SOURCES = test-sys_wait-c++.cc endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sys_wait-tests������������������������������������������������������0000664�0000000�0000000�00000000247�14110572173�0020677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_wait.c tests/test-sys_wait.h Depends-on: sys_wait-c++-tests configure.ac: Makefile.am: TESTS += test-sys_wait check_PROGRAMS += test-sys_wait ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sysexits������������������������������������������������������������0000664�0000000�0000000�00000002123�14110572173�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Exit status codes for some BSD system programs. Files: lib/sysexits.in.h m4/sysexits.m4 Depends-on: include_next stdlib configure.ac: gl_SYSEXITS Makefile.am: BUILT_SOURCES += $(SYSEXITS_H) # We need the following in order to create <sysexits.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_SYSEXITS_H sysexits.h: sysexits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ < $(srcdir)/sysexits.in.h; \ } > $@-t && \ mv -f $@-t $@ else sysexits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += sysexits.h sysexits.h-t Include: <sysexits.h> License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/sysexits-tests������������������������������������������������������0000664�0000000�0000000�00000000176�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sysexits.c Depends-on: configure.ac: Makefile.am: TESTS += test-sysexits check_PROGRAMS += test-sysexits ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/system-posix��������������������������������������������������������0000664�0000000�0000000�00000000332�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: system() function: execute a shell command Files: Depends-on: stdlib sys_wait configure.ac: gl_STDLIB_MODULE_INDICATOR([system-posix]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/system-quote��������������������������������������������������������0000664�0000000�0000000�00000000454�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quoting for a system command. Files: lib/system-quote.h lib/system-quote.c Depends-on: sh-quote xalloc configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += system-quote.h system-quote.c Include: "system-quote.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/system-quote-tests��������������������������������������������������0000664�0000000�0000000�00000001147�14110572173�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Status: longrunning-test Files: tests/test-system-quote.sh tests/test-system-quote-main.c tests/test-system-quote-child.c tests/macros.h Depends-on: stdbool unistd popen pclose configure.ac: Makefile.am: TESTS += test-system-quote.sh check_PROGRAMS += test-system-quote-main test-system-quote-child test_system_quote_main_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) # The test-system-quote-child program must be a real executable, not a libtool # wrapper script, and should link against as few libraries as possible. # Therefore don't link it against any libraries other than -lc. test_system_quote_child_LDADD = �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tan�����������������������������������������������������������������0000664�0000000�0000000�00000000314�14110572173�0016452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tan() function: tangent function. Files: m4/tan.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_TAN Makefile.am: Include: <math.h> Link: $(TAN_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tan-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tan.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-tan check_PROGRAMS += test-tan test_tan_LDADD = $(LDADD) @TAN_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanf����������������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanf() function: tangent function. Files: lib/tanf.c m4/tanf.m4 Depends-on: math extensions tan [test $HAVE_TANF = 0] configure.ac: gl_FUNC_TANF if test $HAVE_TANF = 0; then AC_LIBOBJ([tanf]) fi gl_MATH_MODULE_INDICATOR([tanf]) Makefile.am: Include: <math.h> Link: $(TANF_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanf-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tanf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-tanf check_PROGRAMS += test-tanf test_tanf_LDADD = $(LDADD) @TANF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanh����������������������������������������������������������������0000664�0000000�0000000�00000000333�14110572173�0016623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanh() function: hyperbolic tangent function. Files: m4/tanh.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_TANH Makefile.am: Include: <math.h> Link: $(TANH_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanh-tests����������������������������������������������������������0000664�0000000�0000000�00000000272�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tanh.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-tanh check_PROGRAMS += test-tanh test_tanh_LDADD = $(LDADD) @TANH_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanhf���������������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanhf() function: hyperbolic tangent function. Files: lib/tanhf.c m4/tanhf.m4 Depends-on: math extensions tanh [test $HAVE_TANHF = 0] configure.ac: gl_FUNC_TANHF if test $HAVE_TANHF = 0; then AC_LIBOBJ([tanhf]) fi gl_MATH_MODULE_INDICATOR([tanhf]) Makefile.am: Include: <math.h> Link: $(TANHF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanhf-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tanhf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-tanhf check_PROGRAMS += test-tanhf test_tanhf_LDADD = $(LDADD) @TANHF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanl����������������������������������������������������������������0000664�0000000�0000000�00000001535�14110572173�0016634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanl() function: tangent function with long double argument. Files: lib/tanl.c lib/trigl.h lib/trigl.c m4/tanl.m4 Depends-on: math extensions tan [test $HAVE_TANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [test $HAVE_TANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [test $HAVE_TANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floor [test $HAVE_TANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [test $HAVE_TANL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_TANL if test $HAVE_TANL = 0; then AC_LIBOBJ([tanl]) if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0; then AC_LIBOBJ([trigl]) fi fi gl_MATH_MODULE_INDICATOR([tanl]) Makefile.am: Include: <math.h> Link: $(TANL_LIBM) License: LGPL Maintainer: Paolo Bonzini �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tanl-tests����������������������������������������������������������0000664�0000000�0000000�00000000300�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tanl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-tanl check_PROGRAMS += test-tanl test_tanl_LDADD = $(LDADD) @TANL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tcgetsid������������������������������������������������������������0000664�0000000�0000000�00000000674�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tcgetsid() function: Determine the session ID of the controlling terminal of the current process. Files: lib/tcgetsid.c m4/tcgetsid.m4 Depends-on: termios extensions sys_ioctl [test $HAVE_TCGETSID = 0] configure.ac: gl_FUNC_TCGETSID if test $HAVE_TCGETSID = 0; then AC_LIBOBJ([tcgetsid]) gl_PREREQ_TCGETSID fi gl_TERMIOS_MODULE_INDICATOR([tcgetsid]) Makefile.am: Include: <termios.h> License: LGPL Maintainer: all ��������������������������������������������������������������������gnulib-20210822~d383792/modules/tempname������������������������������������������������������������0000664�0000000�0000000�00000001007�14110572173�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: gen_tempname() function and try_tempname() function: create a private temporary file or directory. Files: lib/tempname.c lib/tempname.h m4/tempname.m4 Depends-on: c99 clock-time extensions fcntl-h getrandom libc-config lstat mkdir stdalign stdbool stdint sys_stat time configure.ac: gl_FUNC_GEN_TEMPNAME gl_MODULE_INDICATOR([tempname]) Makefile.am: lib_SOURCES += tempname.c Include: "tempname.h" Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPLv2+ Maintainer: Eric Blake and Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/term-style-control��������������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0021462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Terminal control for outputting styled text to a terminal. Files: lib/term-style-control.h lib/term-style-control.c Depends-on: stdbool fatal-signal sigaction sigprocmask full-write fstat same-inode xalloc-die configure.ac: AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([tcgetattr]) Makefile.am: lib_SOURCES += term-style-control.c Include: "term-style-control.h" Link: $(LIBTHREAD) License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20210822~d383792/modules/term-style-control-tests��������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-term-style-control-hello.c tests/test-term-style-control-yes.c Depends-on: stdbool unistd full-write configure.ac: Makefile.am: TESTS += test-term-style-control-hello check_PROGRAMS += test-term-style-control-hello noinst_PROGRAMS += test-term-style-control-yes test_term_style_control_hello_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) test_term_style_control_yes_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/termios�������������������������������������������������������������0000664�0000000�0000000�00000002456�14110572173�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <termios.h> that works around platform issues. Files: lib/termios.in.h m4/termios_h.m4 m4/pid_t.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_TERMIOS_H gl_TERMIOS_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += termios.h # We need the following in order to create <termios.h> when the system # version does not have all declarations. termios.h: termios.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TERMIOS_H''@|$(NEXT_TERMIOS_H)|g' \ -e 's/@''GNULIB_TCGETSID''@/$(GNULIB_TCGETSID)/g' \ -e 's|@''HAVE_DECL_TCGETSID''@|$(HAVE_DECL_TCGETSID)|g' \ -e 's|@''HAVE_TERMIOS_H''@|$(HAVE_TERMIOS_H)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/termios.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += termios.h termios.h-t Include: <termios.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/termios-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000371�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-termios-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-termios-c++ check_PROGRAMS += test-termios-c++ test_termios_c___SOURCES = test-termios-c++.cc endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/termios-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-termios.c Depends-on: termios-c++-tests configure.ac: Makefile.am: TESTS += test-termios check_PROGRAMS += test-termios �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/test-framework-sh���������������������������������������������������0000664�0000000�0000000�00000000244�14110572173�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Bourne-shell-based testing framework Files: tests/init.sh Depends-on: configure.ac: Makefile.am: Include: License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/test-framework-sh-tests���������������������������������������������0000664�0000000�0000000�00000000160�14110572173�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-init.sh Depends-on: configure.ac: Makefile.am: TESTS += test-init.sh EXTRA_DIST += init.sh ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/thrd����������������������������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ISO C 11 thread functions. Files: lib/thrd.c m4/thrd.m4 Depends-on: threads-h windows-thread nanosleep configure.ac: AC_REQUIRE([gl_THREADS_H]) gl_FUNC_THRD_JOIN if test $HAVE_THREADS_H = 0 || test $REPLACE_THRD_CREATE = 1 || test $REPLACE_THRD_JOIN = 1; then AC_LIBOBJ([thrd]) fi gl_THREADS_MODULE_INDICATOR([thrd]) Makefile.am: Include: <threads.h> Link: $(LIBSTDTHREAD) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/thrd-tests����������������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0020002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-thrd_current.c tests/test-thrd_create.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-thrd_current test-thrd_create check_PROGRAMS += test-thrd_current test-thrd_create test_thrd_current_LDADD = $(LDADD) @LIBSTDTHREAD@ test_thrd_create_LDADD = $(LDADD) @LIBSTDTHREAD@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/thread��������������������������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0017153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creating and controlling threads. Files: lib/glthread/thread.h lib/glthread/thread.c m4/thread.m4 Depends-on: threadlib extern-inline lock windows-thread [test $gl_threads_api = windows] pthread_sigmask [test $gl_threads_api = posix] configure.ac: gl_THREAD Makefile.am: lib_SOURCES += glthread/thread.h glthread/thread.c Include: "glthread/thread.h" Link: $(LIBMULTITHREAD) License: LGPLv2+ Maintainer: Yoann Vandoorselaere �����������������������������������������������������������������gnulib-20210822~d383792/modules/thread-optim��������������������������������������������������������0000664�0000000�0000000�00000000336�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Optimization of multithreaded code. Files: lib/thread-optim.h Depends-on: configure.ac: AC_CHECK_HEADERS([sys/single_threaded.h]) Makefile.am: Include: "thread-optim.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/thread-tests��������������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0020304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-thread_self.c tests/test-thread_create.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-thread_self test-thread_create check_PROGRAMS += test-thread_self test-thread_create test_thread_self_LDADD = $(LDADD) @LIBTHREAD@ test_thread_create_LDADD = $(LDADD) @LIBMULTITHREAD@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/threadlib�����������������������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access to multithreading primitives. Files: lib/glthread/threadlib.c m4/threadlib.m4 Depends-on: configure.ac-early: gl_THREADLIB_EARLY configure.ac: AC_REQUIRE([gl_THREADLIB]) Makefile.am: lib_SOURCES += glthread/threadlib.c Include: Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/threads�������������������������������������������������������������0000664�0000000�0000000�00000000315�14110572173�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ISO C 11 multithreading functions. Files: Depends-on: threads-h thrd mtx cnd tss configure.ac: Makefile.am: Include: <threads.h> Link: $(LIBSTDTHREAD) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/threads-h�����������������������������������������������������������0000664�0000000�0000000�00000004467�14110572173�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An ISO C 11 compatible <threads.h>. Files: lib/threads.in.h lib/windows-thread.h lib/windows-mutex.h lib/windows-recmutex.h lib/windows-timedmutex.h lib/windows-timedrecmutex.h lib/windows-once.h lib/windows-cond.h lib/windows-tls.h lib/windows-initguard.h m4/threads_h.m4 m4/threadlib.m4 build-aux/config.rpath Depends-on: include_next snippet/c++defs snippet/_Noreturn snippet/arg-nonnull snippet/warn-on-use time havelib configure.ac-early: gl_ANYTHREADLIB_EARLY configure.ac: gl_THREADS_H gl_THREADS_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += threads.h # We need the following in order to create <threads.h> when the system # doesn't have one. threads.h: threads.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_THREADS_H''@|$(HAVE_THREADS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_THREADS_H''@|$(NEXT_THREADS_H)|g' \ -e 's/@''GNULIB_CND''@/$(GNULIB_CND)/g' \ -e 's/@''GNULIB_MTX''@/$(GNULIB_MTX)/g' \ -e 's/@''GNULIB_THRD''@/$(GNULIB_THRD)/g' \ -e 's/@''GNULIB_TSS''@/$(GNULIB_TSS)/g' \ -e 's|@''HAVE_THREAD_LOCAL''@|$(HAVE_THREAD_LOCAL)|g' \ -e 's|@''BROKEN_THRD_START_T''@|$(BROKEN_THRD_START_T)|g' \ -e 's|@''REPLACE_THRD_CREATE''@|$(REPLACE_THRD_CREATE)|g' \ -e 's|@''REPLACE_THRD_CURRENT''@|$(REPLACE_THRD_CURRENT)|g' \ -e 's|@''REPLACE_THRD_DETACH''@|$(REPLACE_THRD_DETACH)|g' \ -e 's|@''REPLACE_THRD_EQUAL''@|$(REPLACE_THRD_EQUAL)|g' \ -e 's|@''REPLACE_THRD_JOIN''@|$(REPLACE_THRD_JOIN)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_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)' \ < $(srcdir)/threads.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += threads.h threads.h-t Include: <threads.h> Link: $(LIBTHREADLOCAL) if you use the thread_local macro License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/threads-h-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0021260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-threads-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-threads-c++ check_PROGRAMS += test-threads-c++ test_threads_c___SOURCES = test-threads-c++.cc test_threads_c___LDADD = $(LDADD) @LIBSTDTHREAD@ endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/threads-h-tests�����������������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-threads.c tests/test-thread_local.c tests/macros.h Depends-on: threads-h-c++-tests thrd stdint configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-threads test-thread_local check_PROGRAMS += test-threads test-thread_local test_threads_LDADD = $(LDADD) @LIBSTDTHREAD@ test_thread_local_LDADD = $(LDADD) @LIBSTDTHREAD@ @LIBTHREADLOCAL@ �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/time����������������������������������������������������������������0000664�0000000�0000000�00000006250�14110572173�0016633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A more-standard <time.h>. Files: lib/time.in.h m4/time_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use stddef configure.ac: gl_TIME_H gl_TIME_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += time.h # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|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' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -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)' \ < $(srcdir)/time.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += time.h time.h-t Include: <time.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/time-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000517�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-time-c++.cc tests/test-time-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-time-c++ check_PROGRAMS += test-time-c++ test_time_c___SOURCES = test-time-c++.cc test-time-c++2.cc test_time_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/time-tests����������������������������������������������������������0000664�0000000�0000000�00000000210�14110572173�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-time.c Depends-on: verify time-c++-tests configure.ac: Makefile.am: TESTS += test-time check_PROGRAMS += test-time ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/time_r��������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reentrant time functions: localtime_r, gmtime_r. Files: lib/time_r.c m4/time_r.m4 Depends-on: extensions time configure.ac: gl_TIME_R if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then AC_LIBOBJ([time_r]) gl_PREREQ_TIME_R fi gl_TIME_MODULE_INDICATOR([time_r]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/time_rz�������������������������������������������������������������0000664�0000000�0000000�00000001276�14110572173�0017351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reentrant time zone functions: localtime_rz, mktime_z, etc. Files: lib/time-internal.h lib/time_rz.c m4/time_rz.m4 Depends-on: c99 extensions time flexmember [test $HAVE_TIMEZONE_T = 0] idx [test $HAVE_TIMEZONE_T = 0] setenv [test $HAVE_TIMEZONE_T = 0] stdbool [test $HAVE_TIMEZONE_T = 0] time_r [test $HAVE_TIMEZONE_T = 0] timegm [test $HAVE_TIMEZONE_T = 0] tzset [test $HAVE_TIMEZONE_T = 0] unsetenv [test $HAVE_TIMEZONE_T = 0] configure.ac: gl_TIME_RZ if test $HAVE_TIMEZONE_T = 0; then AC_LIBOBJ([time_rz]) fi gl_TIME_MODULE_INDICATOR([time_rz]) Makefile.am: Include: <time.h> License: LGPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timegm��������������������������������������������������������������0000664�0000000�0000000�00000001013�14110572173�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert calendar time to simple time, inverse of mktime. Files: lib/mktime-internal.h lib/timegm.c m4/timegm.m4 Depends-on: time mktime-internal [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1] time_r [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1] configure.ac: gl_FUNC_TIMEGM if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then AC_LIBOBJ([timegm]) gl_PREREQ_TIMEGM fi gl_TIME_MODULE_INDICATOR([timegm]) Makefile.am: Include: <time.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timer-time����������������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check for timer_settime. Within HAVE_TIMER_SETTIME one can assume timer_create, timer_delete and timer_gettime are available too. Files: m4/timer_time.m4 Depends-on: extensions pthread-h configure.ac: gl_TIMER_TIME Makefile.am: Include: <time.h> Link: $(LIB_TIMER_TIME) License: LGPLv2+ Maintainer: Pádraig Brady, Paul Eggert, Jim Meyering Local Variables: coding: utf-8 End: ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/times���������������������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0017022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: times() function: get process times Files: lib/times.c m4/times.m4 Depends-on: sys_times configure.ac: gl_FUNC_TIMES if test $HAVE_TIMES = 0; then AC_LIBOBJ([times]) fi gl_SYS_TIMES_MODULE_INDICATOR([times]) Makefile.am: Include: <sys/times.h> License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/times-tests���������������������������������������������������������0000664�0000000�0000000�00000000153�14110572173�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-times.c Makefile.am: TESTS += test-times check_PROGRAMS += test-times ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timespec������������������������������������������������������������0000664�0000000�0000000�00000000447�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: timespec-related declarations Files: lib/timespec.h lib/timespec.c m4/timespec.m4 Depends-on: extern-inline snippet/arg-nonnull time configure.ac: gl_TIMESPEC Makefile.am: lib_SOURCES += timespec.c Include: "timespec.h" License: LGPL Maintainer: Paul Eggert and Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timespec-add��������������������������������������������������������0000664�0000000�0000000�00000000356�14110572173�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Add timespec values. Files: lib/timespec-add.c Depends-on: c99 intprops timespec configure.ac: Makefile.am: lib_SOURCES += timespec-add.c Include: "timespec.h" Link: License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timespec-sub��������������������������������������������������������0000664�0000000�0000000�00000000363�14110572173�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Subtract timespec values. Files: lib/timespec-sub.c Depends-on: c99 intprops timespec configure.ac: Makefile.am: lib_SOURCES += timespec-sub.c Include: "timespec.h" Link: License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timespec-tests������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-timespec.c tests/macros.h Depends-on: dtotimespec intprops stdbool timespec-add timespec-sub configure.ac: Makefile.am: TESTS += test-timespec check_PROGRAMS += test-timespec ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timespec_get��������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0020345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: timespec_get() function: return the current time with up to nanosecond resolution Files: lib/timespec_get.c m4/timespec_get.m4 Depends-on: time extensions gettime [test $HAVE_TIMESPEC_GET = 0] configure.ac: gl_FUNC_TIMESPEC_GET if test $HAVE_TIMESPEC_GET = 0; then AC_LIBOBJ([timespec_get]) fi gl_TIME_MODULE_INDICATOR([timespec_get]) Makefile.am: Include: <time.h> Link: $(LIB_CLOCK_GETTIME) License: LGPL Maintainer: all ����������������������������������������������������������gnulib-20210822~d383792/modules/timespec_get-tests��������������������������������������������������0000664�0000000�0000000�00000000342�14110572173�0021501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-timespec_get.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-timespec_get check_PROGRAMS += test-timespec_get test_timespec_get_LDADD = $(LDADD) @LIB_CLOCK_GETTIME@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/timevar�������������������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A simple self-profiling module based on timers. Files: lib/timevar.h lib/timevar.c Depends-on: c99 gethrxtime getrusage gettext-h stdlib sys_time sys_times xalloc Makefile.am: lib_SOURCES += timevar.c timevar.def Include: "timevar.h" License: GPLv3+ Maintainer: Akim Demaille <akim.demaille@gmail.com> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tls�����������������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0016475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Thread-local storage in multithreaded situations. Files: lib/glthread/tls.h lib/glthread/tls.c m4/tls.m4 Depends-on: threadlib windows-tls [test $gl_threads_api = windows] configure.ac: gl_TLS Makefile.am: lib_SOURCES += glthread/tls.h glthread/tls.c Include: "glthread/tls.h" Link: $(LIBTHREAD) License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tls-tests�����������������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tls.c Depends-on: thread lock stdint yield configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-tls check_PROGRAMS += test-tls test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tmpdir��������������������������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine a temporary directory. Files: lib/tmpdir.h lib/tmpdir.c m4/tmpdir.m4 Depends-on: secure_getenv stat stdbool sys_stat pathmax configure.ac: gt_TMPDIR Makefile.am: lib_SOURCES += tmpdir.h tmpdir.c Include: "tmpdir.h" License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tmpfile�������������������������������������������������������������0000664�0000000�0000000�00000001065�14110572173�0017334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tmpfile() function: create a temporary file. Files: lib/tmpfile.c m4/tmpfile.m4 Depends-on: stdio largefile pathmax [test $REPLACE_TMPFILE = 1] stdbool [test $REPLACE_TMPFILE = 1] tempname [test $REPLACE_TMPFILE = 1] tmpdir [test $REPLACE_TMPFILE = 1] configure.ac: gl_FUNC_TMPFILE if test $REPLACE_TMPFILE = 1; then AC_LIBOBJ([tmpfile]) gl_PREREQ_TMPFILE fi gl_STDIO_MODULE_INDICATOR([tmpfile]) Makefile.am: Include: <stdio.h> Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: LGPL Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tmpfile-safer�������������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0020430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tmpfile function that avoids clobbering std{in,out,err}. Files: lib/stdio--.h lib/stdio-safer.h lib/tmpfile-safer.c Depends-on: binary-io tmpfile unistd-safer configure.ac: gl_MODULE_INDICATOR([tmpfile-safer]) Makefile.am: lib_SOURCES += tmpfile-safer.c Include: "stdio-safer.h" Link: $(LIB_GETRANDOM) $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/towctrans�����������������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: towctrans() function: convert a wide character using a case mapping. Files: lib/towctrans.c lib/towctrans-impl.h m4/towctrans.m4 Depends-on: wctype-h configure.ac: gl_FUNC_TOWCTRANS if test $HAVE_TOWCTRANS = 0; then AC_LIBOBJ([towctrans]) fi gl_WCTYPE_MODULE_INDICATOR([towctrans]) Makefile.am: Include: <wctype.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/trim����������������������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0016645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: trim() function: remove leading and/or trailing whitespaces Files: lib/trim.h lib/trim.c Depends-on: xalloc mbchar mbiter memmove strdup configure.ac: Makefile.am: lib_SOURCES += trim.c Include: "trim.h" Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise $(LIB_MBRTOWC) License: GPL Maintainer: Davide Angelocola ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/trunc���������������������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: trunc() function: round towards zero. Files: lib/trunc.c m4/trunc.m4 Depends-on: math extensions float [test $HAVE_DECL_TRUNC = 0 || test $REPLACE_TRUNC = 1] configure.ac: gl_FUNC_TRUNC if test $HAVE_DECL_TRUNC = 0 || test $REPLACE_TRUNC = 1; then AC_LIBOBJ([trunc]) fi gl_MATH_MODULE_INDICATOR([trunc]) Makefile.am: Include: <math.h> Link: $(TRUNC_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/trunc-ieee����������������������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: trunc() function according to ISO C 99 with IEC 60559. Files: m4/trunc-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: trunc configure.ac: gl_FUNC_TRUNC_IEEE Makefile.am: Include: <math.h> Link: $(TRUNC_LIBM) License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/trunc-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-trunc-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnand-nolibm float signbit configure.ac: Makefile.am: TESTS += test-trunc-ieee check_PROGRAMS += test-trunc-ieee test_trunc_ieee_LDADD = $(LDADD) @TRUNC_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/trunc-tests���������������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0020171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-trunc1.c tests/test-trunc2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnand-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-trunc1 test-trunc2 check_PROGRAMS += test-trunc1 test-trunc2 test_trunc1_LDADD = $(LDADD) @TRUNC_LIBM@ test_trunc2_LDADD = $(LDADD) @TRUNC_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncate������������������������������������������������������������0000664�0000000�0000000�00000001144�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: truncate() function: truncate a file to a specified length. Files: lib/truncate.c m4/truncate.m4 Depends-on: unistd sys_types largefile sys_stat stat [test $REPLACE_TRUNCATE = 1] open [test $HAVE_DECL_TRUNCATE = 0 || test $REPLACE_TRUNCATE = 1] ftruncate [test $HAVE_DECL_TRUNCATE = 0 || test $REPLACE_TRUNCATE = 1] configure.ac: gl_FUNC_TRUNCATE if test $HAVE_DECL_TRUNCATE = 0 || test $REPLACE_TRUNCATE = 1; then AC_LIBOBJ([truncate]) gl_PREREQ_TRUNCATE fi gl_UNISTD_MODULE_INDICATOR([truncate]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncate-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncate.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-truncate check_PROGRAMS += test-truncate �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncf��������������������������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: truncf() function: round towards zero. Files: lib/truncf.c lib/trunc.c m4/truncf.m4 Depends-on: math extensions float [test $HAVE_DECL_TRUNCF = 0 || test $REPLACE_TRUNCF = 1] configure.ac: gl_FUNC_TRUNCF if test $HAVE_DECL_TRUNCF = 0 || test $REPLACE_TRUNCF = 1; then AC_LIBOBJ([truncf]) fi gl_MATH_MODULE_INDICATOR([truncf]) Makefile.am: Include: <math.h> Link: $(TRUNCF_LIBM) License: LGPL Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/truncf-ieee���������������������������������������������������������0000664�0000000�0000000�00000000414�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: truncf() function according to ISO C 99 with IEC 60559. Files: m4/truncf-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: truncf configure.ac: gl_FUNC_TRUNCF_IEEE Makefile.am: Include: <math.h> Link: $(TRUNCF_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncf-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000422�14110572173�0021236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncf-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: isnanf-nolibm float signbit configure.ac: Makefile.am: TESTS += test-truncf-ieee check_PROGRAMS += test-truncf-ieee test_truncf_ieee_LDADD = $(LDADD) @TRUNCF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncf-tests��������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncf1.c tests/test-truncf2.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: float isnanf-nolibm stdbool stdint configure.ac: Makefile.am: TESTS += test-truncf1 test-truncf2 check_PROGRAMS += test-truncf1 test-truncf2 test_truncf1_LDADD = $(LDADD) @TRUNCF_LIBM@ test_truncf2_LDADD = $(LDADD) @TRUNCF_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncl��������������������������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0017203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: truncl() function: round towards zero. Files: lib/truncl.c lib/trunc.c m4/truncl.m4 Depends-on: math extensions trunc [{ test $HAVE_DECL_TRUNCL = 0 || test $REPLACE_TRUNCL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_DECL_TRUNCL = 0 || test $REPLACE_TRUNCL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_TRUNCL if test $HAVE_DECL_TRUNCL = 0 || test $REPLACE_TRUNCL = 1; then AC_LIBOBJ([truncl]) fi gl_MATH_MODULE_INDICATOR([truncl]) Makefile.am: Include: <math.h> Link: $(TRUNCL_LIBM) License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncl-ieee���������������������������������������������������������0000664�0000000�0000000�00000000414�14110572173�0020105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: truncl() function according to ISO C 99 with IEC 60559. Files: m4/truncl-ieee.m4 m4/minus-zero.m4 m4/signbit.m4 Depends-on: truncl configure.ac: gl_FUNC_TRUNCL_IEEE Makefile.am: Include: <math.h> Link: $(TRUNCL_LIBM) License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncl-ieee-tests���������������������������������������������������0000664�0000000�0000000�00000000430�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncl-ieee.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: fpucw isnanl-nolibm float signbit configure.ac: Makefile.am: TESTS += test-truncl-ieee check_PROGRAMS += test-truncl-ieee test_truncl_ieee_LDADD = $(LDADD) @TRUNCL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/truncl-tests��������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncl.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: fpucw isnanl-nolibm float configure.ac: Makefile.am: TESTS += test-truncl check_PROGRAMS += test-truncl test_truncl_LDADD = $(LDADD) @TRUNCL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tsearch�������������������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Binary tree data structure. Files: lib/tsearch.c m4/tsearch.m4 Depends-on: search configure.ac: gl_FUNC_TSEARCH if test $HAVE_TSEARCH = 0 || test $HAVE_TWALK = 0 || test $REPLACE_TSEARCH = 1; then AC_LIBOBJ([tsearch]) gl_PREREQ_TSEARCH fi gl_SEARCH_MODULE_INDICATOR([tsearch]) Makefile.am: Include: <search.h> License: LGPLv2+ Maintainer: all, glibc �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tsearch-tests�������������������������������������������������������0000664�0000000�0000000�00000001056�14110572173�0020465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tsearch.sh tests/test-tsearch.c tests/signature.h tests/macros.h Depends-on: stdint configure.ac: TEST_TSEARCH_LIBM= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double x;]], [[x = log (x);]])], [], [TEST_TSEARCH_LIBM=-lm]) AC_SUBST([TEST_TSEARCH_LIBM]) AC_CHECK_FUNCS_ONCE([initstate]) Makefile.am: TESTS += test-tsearch.sh check_PROGRAMS += test-tsearch test_tsearch_LDADD = $(LDADD) @TEST_TSEARCH_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tss�����������������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ISO C 11 thread-specific storage functions. Files: lib/tss.c Depends-on: threads-h windows-tls configure.ac: AC_REQUIRE([gl_THREADS_H]) if test $HAVE_THREADS_H = 0; then AC_LIBOBJ([tss]) fi gl_THREADS_MODULE_INDICATOR([tss]) Makefile.am: Include: <threads.h> Link: $(LIBSTDTHREAD) License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tss-tests�����������������������������������������������������������0000664�0000000�0000000�00000000324�14110572173�0017642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tss.c tests/macros.h Depends-on: thrd mtx stdint configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-tss check_PROGRAMS += test-tss test_tss_LDADD = $(LDADD) @LIBSTDTHREAD@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ttyname_r�����������������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ttyname_r() function: Determine name of a terminal. Files: lib/ttyname_r.c m4/ttyname_r.m4 Depends-on: unistd extensions configure.ac: gl_FUNC_TTYNAME_R if test $HAVE_TTYNAME_R = 0 || test $REPLACE_TTYNAME_R = 1; then AC_LIBOBJ([ttyname_r]) gl_PREREQ_TTYNAME_R fi gl_UNISTD_MODULE_INDICATOR([ttyname_r]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ttyname_r-tests�����������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ttyname_r.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ttyname_r check_PROGRAMS += test-ttyname_r ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/tzset���������������������������������������������������������������0000664�0000000�0000000�00000000474�14110572173�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tzset() function: initialize time conversion information. Files: lib/tzset.c m4/tzset.m4 Depends-on: time configure.ac: gl_FUNC_TZSET if test $REPLACE_TZSET = 1; then AC_LIBOBJ([tzset]) fi gl_TIME_MODULE_INDICATOR([tzset]) Makefile.am: Include: <time.h> License: LGPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/u64�����������������������������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0016314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: uint64_t-like operations that work even on hosts lacking uint64_t Files: lib/u64.h lib/u64.c Depends-on: extern-inline stdint configure.ac: Makefile.am: lib_SOURCES += u64.c Include: "u64.h" License: LGPLv2+ Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/u64-tests�����������������������������������������������������������0000664�0000000�0000000�00000000123�14110572173�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-u64.c Makefile.am: TESTS += test-u64 check_PROGRAMS += test-u64 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uchar���������������������������������������������������������������0000664�0000000�0000000�00000005437�14110572173�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <uchar.h>. Files: lib/uchar.in.h m4/uchar_h.m4 m4/stdint.m4 Depends-on: include_next snippet/c++defs stdint wchar configure.ac: gl_UCHAR_H gl_UCHAR_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += uchar.h uchar.h: uchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_UCHAR_H''@/$(HAVE_UCHAR_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UCHAR_H''@|$(NEXT_UCHAR_H)|g' \ -e 's|@''CXX_HAS_UCHAR_TYPES''@|$(CXX_HAS_UCHAR_TYPES)|g' \ -e 's|@''SMALL_WCHAR_T''@|$(SMALL_WCHAR_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR16_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR16_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR32_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR32_T)|g' \ -e 's/@''GNULIB_BTOC32''@/$(GNULIB_BTOC32)/g' \ -e 's/@''GNULIB_C32ISALNUM''@/$(GNULIB_C32ISALNUM)/g' \ -e 's/@''GNULIB_C32ISALPHA''@/$(GNULIB_C32ISALPHA)/g' \ -e 's/@''GNULIB_C32ISBLANK''@/$(GNULIB_C32ISBLANK)/g' \ -e 's/@''GNULIB_C32ISCNTRL''@/$(GNULIB_C32ISCNTRL)/g' \ -e 's/@''GNULIB_C32ISDIGIT''@/$(GNULIB_C32ISDIGIT)/g' \ -e 's/@''GNULIB_C32ISGRAPH''@/$(GNULIB_C32ISGRAPH)/g' \ -e 's/@''GNULIB_C32ISLOWER''@/$(GNULIB_C32ISLOWER)/g' \ -e 's/@''GNULIB_C32ISPRINT''@/$(GNULIB_C32ISPRINT)/g' \ -e 's/@''GNULIB_C32ISPUNCT''@/$(GNULIB_C32ISPUNCT)/g' \ -e 's/@''GNULIB_C32ISSPACE''@/$(GNULIB_C32ISSPACE)/g' \ -e 's/@''GNULIB_C32ISUPPER''@/$(GNULIB_C32ISUPPER)/g' \ -e 's/@''GNULIB_C32ISXDIGIT''@/$(GNULIB_C32ISXDIGIT)/g' \ -e 's/@''GNULIB_C32RTOMB''@/$(GNULIB_C32RTOMB)/g' \ -e 's/@''GNULIB_C32SNRTOMBS''@/$(GNULIB_C32SNRTOMBS)/g' \ -e 's/@''GNULIB_C32SRTOMBS''@/$(GNULIB_C32SRTOMBS)/g' \ -e 's/@''GNULIB_C32STOMBS''@/$(GNULIB_C32STOMBS)/g' \ -e 's/@''GNULIB_C32TOB''@/$(GNULIB_C32TOB)/g' \ -e 's/@''GNULIB_MBRTOC32''@/$(GNULIB_MBRTOC32)/g' \ -e 's/@''GNULIB_MBSNRTOC32S''@/$(GNULIB_MBSNRTOC32S)/g' \ -e 's/@''GNULIB_MBSRTOC32S''@/$(GNULIB_MBSRTOC32S)/g' \ -e 's/@''GNULIB_MBSTOC32S''@/$(GNULIB_MBSTOC32S)/g' \ -e 's|@''HAVE_C32RTOMB''@|$(HAVE_C32RTOMB)|g' \ -e 's|@''HAVE_MBRTOC32''@|$(HAVE_MBRTOC32)|g' \ -e 's|@''REPLACE_C32RTOMB''@|$(REPLACE_C32RTOMB)|g' \ -e 's|@''REPLACE_MBRTOC32''@|$(REPLACE_MBRTOC32)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ < $(srcdir)/uchar.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += uchar.h uchar.h-t Include: <uchar.h> License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uchar-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000001742�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-uchar-c++.cc tests/test-uchar-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: AC_REQUIRE([gl_ANSI_CXX]) if test "$CXX" != no; then dnl On FreeBSD 12, 'c++' defines __cplusplus to 201402, although it does not dnl have the <cuchar> header file from C++11. AC_CACHE_CHECK([whether the C++ compiler has <cuchar>], [gl_cv_cxxheader_cuchar], [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <cuchar>]], [[]]) ], [gl_cv_cxxheader_cuchar=yes], [gl_cv_cxxheader_cuchar=no]) AC_LANG_POP([C++]) ]) else gl_cv_cxxheader_cuchar=no fi AM_CONDITIONAL([CXX_HAVE_CUCHAR], [test $gl_cv_cxxheader_cuchar != no]) Makefile.am: if ANSICXX TESTS += test-uchar-c++ check_PROGRAMS += test-uchar-c++ test_uchar_c___SOURCES = test-uchar-c++.cc if CXX_HAVE_CUCHAR test_uchar_c___SOURCES += test-uchar-c++2.cc endif test_uchar_c___LDADD = $(LDADD) $(LIB_MBRTOWC) endif ������������������������������gnulib-20210822~d383792/modules/uchar-tests���������������������������������������������������������0000664�0000000�0000000�00000000214�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-uchar.c Depends-on: verify uchar-c++-tests configure.ac: Makefile.am: TESTS += test-uchar check_PROGRAMS += test-uchar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ucs4-utf16����������������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UCS-4 to UTF-16. Files: Depends-on: unistr/u16-uctomb configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/ucs4-utf8�����������������������������������������������������������0000664�0000000�0000000�00000000240�14110572173�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UCS-4 to UTF-8. Files: Depends-on: unistr/u8-uctomb configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uname���������������������������������������������������������������0000664�0000000�0000000�00000000616�14110572173�0017002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: uname() function: enquire system information. Files: lib/uname.c m4/uname.m4 Depends-on: sys_utsname gethostname [test $HAVE_UNAME = 0] configure.ac: gl_FUNC_UNAME if test $HAVE_UNAME = 0; then AC_LIBOBJ([uname]) gl_PREREQ_UNAME fi gl_SYS_UTSNAME_MODULE_INDICATOR([uname]) Makefile.am: Include: <sys/utsname.h> Link: $(GETHOSTNAME_LIB) License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uname-tests���������������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-uname.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uname check_PROGRAMS += test-uname test_uname_LDADD = $(LDADD) @GETHOSTNAME_LIB@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017376�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/base��������������������������������������������������������0000664�0000000�0000000�00000001057�14110572173�0020236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for Unicode character case mappings. Files: lib/unicase.in.h m4/libunistring-base.m4 Depends-on: unitypes uninorm/base stdbool configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unicase.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNICASE_H) unicase.h: unicase.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unicase.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unicase.h unicase.h-t Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/cased�������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "cased". Files: lib/unicase/caseprop.h lib/unicase/cased.c lib/unicase/cased.h lib/unictype/bitmap.h Depends-on: unitypes stdbool configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += unicase/cased.c Include: "unicase/caseprop.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/cased-tests�������������������������������������������������0000664�0000000�0000000�00000000454�14110572173�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-cased.c tests/unicase/test-predicate-part1.h tests/unicase/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-cased check_PROGRAMS += test-cased test_cased_SOURCES = unicase/test-cased.c test_cased_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/empty-prefix-context����������������������������������������0000664�0000000�0000000�00000000610�14110572173�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of empty prefix string. Files: lib/unicase/empty-prefix-context.c Depends-on: unicase/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.1], [unicase/empty-prefix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_EMPTY_PREFIX_CONTEXT lib_SOURCES += unicase/empty-prefix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/empty-suffix-context����������������������������������������0000664�0000000�0000000�00000000610�14110572173�0023440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of empty suffix string. Files: lib/unicase/empty-suffix-context.c Depends-on: unicase/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.1], [unicase/empty-suffix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_EMPTY_SUFFIX_CONTEXT lib_SOURCES += unicase/empty-suffix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ignorable���������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "case-ignorable". Files: lib/unicase/caseprop.h lib/unicase/ignorable.c lib/unicase/ignorable.h lib/unictype/bitmap.h Depends-on: unitypes stdbool configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += unicase/ignorable.c Include: "unicase/caseprop.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ignorable-tests���������������������������������������������0000664�0000000�0000000�00000000504�14110572173�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-ignorable.c tests/unicase/test-predicate-part1.h tests/unicase/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ignorable check_PROGRAMS += test-ignorable test_ignorable_SOURCES = unicase/test-ignorable.c test_ignorable_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/locale-language���������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Language code of current locale. Files: lib/unicase/locale-language.c lib/unicase/locale-languages.gperf Depends-on: unicase/base localename gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unicase/locale-language]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_LOCALE_LANGUAGE lib_SOURCES += unicase/locale-language.c endif $(srcdir)/unicase/locale-languages.h: $(srcdir)/unicase/locale-languages.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unicase/locale-languages.gperf > $(srcdir)/unicase/locale-languages.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unicase/locale-languages.h-t1 > $(srcdir)/unicase/locale-languages.h-t2 \ && mv $(srcdir)/unicase/locale-languages.h-t2 $(srcdir)/unicase/locale-languages.h BUILT_SOURCES += unicase/locale-languages.h MOSTLYCLEANFILES += unicase/locale-languages.h-t1 unicase/locale-languages.h-t2 MAINTAINERCLEANFILES += unicase/locale-languages.h EXTRA_DIST += unicase/locale-languages.h Include: "unicase.h" Link: @INTL_MACOSX_LIBS@ $(LIBTHREAD) License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/locale-language-tests���������������������������������������0000664�0000000�0000000�00000001315�14110572173�0023501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-locale-language.sh tests/unicase/test-locale-language.c tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-tr.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_TR_UTF8 gt_LOCALE_ZH_CN Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/special-casing����������������������������������������������0000664�0000000�0000000�00000002762�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Special casing table. Files: lib/unicase/special-casing.in.h lib/unicase/special-casing.c lib/unicase/special-casing-table.gperf Depends-on: gperf configure.ac: Makefile.am: lib_SOURCES += unicase/special-casing.c $(srcdir)/unicase/special-casing-table.h: $(srcdir)/unicase/special-casing-table.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unicase/special-casing-table.gperf > $(srcdir)/unicase/special-casing-table.h-t && \ mv $(srcdir)/unicase/special-casing-table.h-t $(srcdir)/unicase/special-casing-table.h BUILT_SOURCES += unicase/special-casing-table.h MOSTLYCLEANFILES += unicase/special-casing-table.h-t MAINTAINERCLEANFILES += unicase/special-casing-table.h EXTRA_DIST += unicase/special-casing-table.h # Generate special-casing.h with a declaration that depends on the gperf version. unicase/special-casing.h: unicase/special-casing.in.h unicase/special-casing-table.h $(AM_V_at)$(MKDIR_P) unicase $(AM_V_GEN)rm -f $@-t $@ && \ declaration=`grep '^gl_unicase_special_lookup' $(srcdir)/unicase/special-casing-table.h | sed -e 's/register //g'` && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e "/gl_unicase_special_lookup/s/gl_unicase_special_lookup.*/$${declaration};/" $(srcdir)/unicase/special-casing.in.h; \ } > $@-t && \ mv -f $@-t $@ BUILT_SOURCES += unicase/special-casing.h MOSTLYCLEANFILES += unicase/special-casing.h unicase/special-casing.h-t Include: "unicase/special-casing.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������gnulib-20210822~d383792/modules/unicase/tocasefold��������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0021453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for Unicode characters (locale and context independent). Files: lib/unicase/casefold.h lib/unicase/tocasefold.c lib/unicase/tocasefold.h lib/unicase/simple-mapping.h Depends-on: unicase/base configure.ac: Makefile.am: lib_SOURCES += unicase/tocasefold.c Include: "unicase/casefold.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/tolower�����������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for Unicode characters (locale and context independent). Files: lib/unicase/tolower.c lib/unicase/tolower.h lib/unicase/simple-mapping.h Depends-on: unicase/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOLOWER lib_SOURCES += unicase/tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/tolower-tests�����������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-uc_tolower.c tests/unicase/test-mapping-part1.h tests/unicase/test-mapping-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uc_tolower check_PROGRAMS += test-uc_tolower test_uc_tolower_SOURCES = unicase/test-uc_tolower.c test_uc_tolower_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/totitle�����������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for Unicode characters (locale and context independent). Files: lib/unicase/totitle.c lib/unicase/totitle.h lib/unicase/simple-mapping.h Depends-on: unicase/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOTITLE lib_SOURCES += unicase/totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/totitle-tests�����������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-uc_totitle.c tests/unicase/test-mapping-part1.h tests/unicase/test-mapping-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uc_totitle check_PROGRAMS += test-uc_totitle test_uc_totitle_SOURCES = unicase/test-uc_totitle.c test_uc_totitle_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/toupper�����������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for Unicode characters (locale and context independent). Files: lib/unicase/toupper.c lib/unicase/toupper.h lib/unicase/simple-mapping.h Depends-on: unicase/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOUPPER lib_SOURCES += unicase/toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/toupper-tests�����������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-uc_toupper.c tests/unicase/test-mapping-part1.h tests/unicase/test-mapping-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uc_toupper check_PROGRAMS += test-uc_toupper test_uc_toupper_SOURCES = unicase/test-uc_toupper.c test_uc_toupper_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casecmp�������������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0021351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case and normalization insensitive comparison of UTF-16 strings. Files: lib/unicase/u16-casecmp.c lib/unicase/u-casecmp.h Depends-on: unicase/base unicase/u16-casefold uninorm/decomposing-form unistr/u16-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASECMP lib_SOURCES += unicase/u16-casecmp.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casecmp-tests�������������������������������������������0000664�0000000�0000000�00000000457�14110572173�0022513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-casecmp.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u16-casecmp check_PROGRAMS += test-u16-casecmp test_u16_casecmp_SOURCES = unicase/test-u16-casecmp.c test_u16_casecmp_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casecoll������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, case and normalization insensitive comparison of UTF-16 strings. Files: lib/unicase/u16-casecoll.c lib/unicase/u-casecoll.h Depends-on: unicase/base unicase/u16-casexfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASECOLL lib_SOURCES += unicase/u16-casecoll.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casecoll-tests������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0022653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-casecoll.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u16-casecoll check_PROGRAMS += test-u16-casecoll test_u16_casecoll_SOURCES = unicase/test-u16-casecoll.c test_u16_casecoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casefold������������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-16 strings (locale dependent). Files: lib/unicase/u16-casefold.c lib/unicase/u-casefold.h Depends-on: unicase/base unicase/u16-ct-casefold unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASEFOLD lib_SOURCES += unicase/u16-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������gnulib-20210822~d383792/modules/unicase/u16-casefold-tests������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0022655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-casefold.c tests/macros.h Depends-on: unistr/u16-cmp uninorm/nfc uninorm/nfd configure.ac: Makefile.am: TESTS += test-u16-casefold check_PROGRAMS += test-u16-casefold test_u16_casefold_SOURCES = unicase/test-u16-casefold.c test_u16_casefold_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casemap�������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0021337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case mapping for UTF-16 strings (locale dependent). Files: lib/unicase/unicasemap.h lib/unicase/u16-casemap.c lib/unicase/u-casemap.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unictype/combining-class unictype/property-soft-dotted unistr/u16-mbtouc-unsafe unistr/u16-uctomb unistr/u16-cpy uninorm/u16-normalize stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u16-casemap.c Include: "unicase/unicasemap.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-casexfrm������������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for case insensitive comparison of UTF-16 strings. Files: lib/unicase/u16-casexfrm.c lib/unicase/u-casexfrm.h Depends-on: unicase/base unicase/u16-casefold uniconv/u16-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASEXFRM lib_SOURCES += unicase/u16-casexfrm.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unicase/u16-ct-casefold���������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0022112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-16 substrings (locale dependent). Files: lib/unicase/u16-ct-casefold.c lib/unicase/u-ct-casefold.h Depends-on: unicase/base unicase/u16-casemap unicase/special-casing unicase/tocasefold uninorm/decomposing-form uninorm/u16-normalize uninorm/nfd configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-ct-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CT_CASEFOLD lib_SOURCES += unicase/u16-ct-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-ct-tolower����������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-16 substrings (locale dependent). Files: lib/unicase/u16-ct-tolower.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-ct-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CT_TOLOWER lib_SOURCES += unicase/u16-ct-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-ct-totitle����������������������������������������������0000664�0000000�0000000�00000001255�14110572173�0022025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-16 substrings (locale dependent). Files: lib/unicase/u16-ct-totitle.c lib/unicase/u-ct-totitle.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unicase/totitle unicase/tolower uniwbrk/u16-wordbreaks unictype/combining-class unictype/property-soft-dotted unistr/u16-mbtouc-unsafe unistr/u16-uctomb unistr/u16-cpy uninorm/u16-normalize stdbool configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-ct-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CT_TOTITLE lib_SOURCES += unicase/u16-ct-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-ct-toupper����������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-16 substrings (locale dependent). Files: lib/unicase/u16-ct-toupper.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-ct-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CT_TOUPPER lib_SOURCES += unicase/u16-ct-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-cased������������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether case matters for an UTF-16 string. Files: lib/unicase/u16-is-cased.c lib/unicase/u-is-cased.h Depends-on: unicase/base unicase/u16-toupper unicase/u16-tolower unicase/u16-totitle uninorm/u16-normalize uninorm/nfd unistr/u16-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-is-cased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_IS_CASED lib_SOURCES += unicase/u16-is-cased.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������gnulib-20210822~d383792/modules/unicase/u16-is-cased-tests������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-is-cased.c tests/unicase/test-is-cased.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-is-cased check_PROGRAMS += test-u16-is-cased test_u16_is_cased_SOURCES = unicase/test-u16-is-cased.c test_u16_is_cased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-casefolded�������������������������������������������0000664�0000000�0000000�00000000663�14110572173�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-16 string is already case-folded. Files: lib/unicase/u16-is-casefolded.c Depends-on: unicase/base unicase/u16-is-invariant unicase/u16-casefold configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-is-casefolded]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_IS_CASEFOLDED lib_SOURCES += unicase/u16-is-casefolded.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-casefolded-tests�������������������������������������0000664�0000000�0000000�00000000515�14110572173�0023575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-is-casefolded.c tests/unicase/test-is-casefolded.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-is-casefolded check_PROGRAMS += test-u16-is-casefolded test_u16_is_casefolded_SOURCES = unicase/test-u16-is-casefolded.c test_u16_is_casefolded_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-invariant��������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-16 string is invariant under a given case mapping. Files: lib/unicase/u16-is-invariant.c lib/unicase/invariant.h lib/unicase/u-is-invariant.h Depends-on: unitypes uninorm/base uninorm/u16-normalize uninorm/nfd unistr/u16-cmp stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u16-is-invariant.c Include: "unicase/invariant.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-lowercase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-16 string is entirely lower case. Files: lib/unicase/u16-is-lowercase.c Depends-on: unicase/base unicase/u16-is-invariant unicase/u16-tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-is-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_IS_LOWERCASE lib_SOURCES += unicase/u16-is-lowercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-lowercase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-is-lowercase.c tests/unicase/test-is-lowercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-is-lowercase check_PROGRAMS += test-u16-is-lowercase test_u16_is_lowercase_SOURCES = unicase/test-u16-is-lowercase.c test_u16_is_lowercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-titlecase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-16 string is entirely title case. Files: lib/unicase/u16-is-titlecase.c Depends-on: unicase/base unicase/u16-is-invariant unicase/u16-totitle configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-is-titlecase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_IS_TITLECASE lib_SOURCES += unicase/u16-is-titlecase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-titlecase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-is-titlecase.c tests/unicase/test-is-titlecase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-is-titlecase check_PROGRAMS += test-u16-is-titlecase test_u16_is_titlecase_SOURCES = unicase/test-u16-is-titlecase.c test_u16_is_titlecase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-uppercase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-16 string is entirely upper case. Files: lib/unicase/u16-is-uppercase.c Depends-on: unicase/base unicase/u16-is-invariant unicase/u16-toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-is-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_IS_UPPERCASE lib_SOURCES += unicase/u16-is-uppercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-is-uppercase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-is-uppercase.c tests/unicase/test-is-uppercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-is-uppercase check_PROGRAMS += test-u16-is-uppercase test_u16_is_uppercase_SOURCES = unicase/test-u16-is-uppercase.c test_u16_is_uppercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-prefix-context������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0022705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of prefix UTF-16 string. Files: lib/unicase/u16-prefix-context.c lib/unicase/u-prefix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u16-mbtouc-unsafe unistr/u16-prev configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u16-prefix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_PREFIX_CONTEXT lib_SOURCES += unicase/u16-prefix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-suffix-context������������������������������������������0000664�0000000�0000000�00000001030�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of suffix UTF-16 string. Files: lib/unicase/u16-suffix-context.c lib/unicase/u-suffix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u16-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u16-suffix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_SUFFIX_CONTEXT lib_SOURCES += unicase/u16-suffix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-tolower�������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0021433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-16 strings (locale dependent). Files: lib/unicase/u16-tolower.c Depends-on: unicase/base unicase/u16-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOLOWER lib_SOURCES += unicase/u16-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/unicase/u16-tolower-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-tolower.c tests/macros.h Depends-on: unistr/u16-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u16-tolower check_PROGRAMS += test-u16-tolower test_u16_tolower_SOURCES = unicase/test-u16-tolower.c test_u16_tolower_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-totitle�������������������������������������������������0000664�0000000�0000000�00000000731�14110572173�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-16 strings (locale dependent). Files: lib/unicase/u16-totitle.c lib/unicase/u-totitle.h Depends-on: unicase/base unicase/u16-ct-totitle unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOTITLE lib_SOURCES += unicase/u16-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������gnulib-20210822~d383792/modules/unicase/u16-totitle-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-totitle.c tests/macros.h Depends-on: unistr/u16-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u16-totitle check_PROGRAMS += test-u16-totitle test_u16_totitle_SOURCES = unicase/test-u16-totitle.c test_u16_totitle_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u16-toupper�������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-16 strings (locale dependent). Files: lib/unicase/u16-toupper.c Depends-on: unicase/base unicase/u16-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u16-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOUPPER lib_SOURCES += unicase/u16-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/unicase/u16-toupper-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u16-toupper.c tests/macros.h Depends-on: unistr/u16-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u16-toupper check_PROGRAMS += test-u16-toupper test_u16_toupper_SOURCES = unicase/test-u16-toupper.c test_u16_toupper_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casecmp�������������������������������������������������0000664�0000000�0000000�00000000725�14110572173�0021347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case and normalization insensitive comparison of UTF-32 strings. Files: lib/unicase/u32-casecmp.c lib/unicase/u-casecmp.h Depends-on: unicase/base unicase/u32-casefold uninorm/decomposing-form unistr/u32-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASECMP lib_SOURCES += unicase/u32-casecmp.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casecmp-tests�������������������������������������������0000664�0000000�0000000�00000000457�14110572173�0022511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-casecmp.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u32-casecmp check_PROGRAMS += test-u32-casecmp test_u32_casecmp_SOURCES = unicase/test-u32-casecmp.c test_u32_casecmp_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casecoll������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0021516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, case and normalization insensitive comparison of UTF-32 strings. Files: lib/unicase/u32-casecoll.c lib/unicase/u-casecoll.h Depends-on: unicase/base unicase/u32-casexfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASECOLL lib_SOURCES += unicase/u32-casecoll.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casecoll-tests������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0022651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-casecoll.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u32-casecoll check_PROGRAMS += test-u32-casecoll test_u32_casecoll_SOURCES = unicase/test-u32-casecoll.c test_u32_casecoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casefold������������������������������������������������0000664�0000000�0000000�00000000741�14110572173�0021512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-32 strings (locale dependent). Files: lib/unicase/u32-casefold.c lib/unicase/u-casefold.h Depends-on: unicase/base unicase/u32-ct-casefold unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASEFOLD lib_SOURCES += unicase/u32-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������gnulib-20210822~d383792/modules/unicase/u32-casefold-tests������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0022653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-casefold.c tests/macros.h Depends-on: unistr/u32-cmp uninorm/nfc uninorm/nfd configure.ac: Makefile.am: TESTS += test-u32-casefold check_PROGRAMS += test-u32-casefold test_u32_casefold_SOURCES = unicase/test-u32-casefold.c test_u32_casefold_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casemap�������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0021335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case mapping for UTF-32 strings (locale dependent). Files: lib/unicase/unicasemap.h lib/unicase/u32-casemap.c lib/unicase/u-casemap.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unictype/combining-class unictype/property-soft-dotted unistr/u32-mbtouc-unsafe unistr/u32-uctomb unistr/u32-cpy uninorm/u32-normalize stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u32-casemap.c Include: "unicase/unicasemap.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-casexfrm������������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0021544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for case insensitive comparison of UTF-32 strings. Files: lib/unicase/u32-casexfrm.c lib/unicase/u-casexfrm.h Depends-on: unicase/base unicase/u32-casefold uniconv/u32-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASEXFRM lib_SOURCES += unicase/u32-casexfrm.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unicase/u32-ct-casefold���������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0022110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-32 substrings (locale dependent). Files: lib/unicase/u32-ct-casefold.c lib/unicase/u-ct-casefold.h Depends-on: unicase/base unicase/u32-casemap unicase/special-casing unicase/tocasefold uninorm/decomposing-form uninorm/u32-normalize uninorm/nfd configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-ct-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CT_CASEFOLD lib_SOURCES += unicase/u32-ct-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-ct-tolower����������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-32 substrings (locale dependent). Files: lib/unicase/u32-ct-tolower.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-ct-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CT_TOLOWER lib_SOURCES += unicase/u32-ct-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-ct-totitle����������������������������������������������0000664�0000000�0000000�00000001255�14110572173�0022023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-32 substrings (locale dependent). Files: lib/unicase/u32-ct-totitle.c lib/unicase/u-ct-totitle.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unicase/totitle unicase/tolower uniwbrk/u32-wordbreaks unictype/combining-class unictype/property-soft-dotted unistr/u32-mbtouc-unsafe unistr/u32-uctomb unistr/u32-cpy uninorm/u32-normalize stdbool configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-ct-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CT_TOTITLE lib_SOURCES += unicase/u32-ct-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-ct-toupper����������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-32 substrings (locale dependent). Files: lib/unicase/u32-ct-toupper.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-ct-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CT_TOUPPER lib_SOURCES += unicase/u32-ct-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-cased������������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether case matters for an UTF-32 string. Files: lib/unicase/u32-is-cased.c lib/unicase/u-is-cased.h Depends-on: unicase/base unicase/u32-toupper unicase/u32-tolower unicase/u32-totitle uninorm/u32-normalize uninorm/nfd unistr/u32-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-is-cased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_IS_CASED lib_SOURCES += unicase/u32-is-cased.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������gnulib-20210822~d383792/modules/unicase/u32-is-cased-tests������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-is-cased.c tests/unicase/test-is-cased.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-is-cased check_PROGRAMS += test-u32-is-cased test_u32_is_cased_SOURCES = unicase/test-u32-is-cased.c test_u32_is_cased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-casefolded�������������������������������������������0000664�0000000�0000000�00000000663�14110572173�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-32 string is already case-folded. Files: lib/unicase/u32-is-casefolded.c Depends-on: unicase/base unicase/u32-is-invariant unicase/u32-casefold configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-is-casefolded]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_IS_CASEFOLDED lib_SOURCES += unicase/u32-is-casefolded.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-casefolded-tests�������������������������������������0000664�0000000�0000000�00000000515�14110572173�0023573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-is-casefolded.c tests/unicase/test-is-casefolded.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-is-casefolded check_PROGRAMS += test-u32-is-casefolded test_u32_is_casefolded_SOURCES = unicase/test-u32-is-casefolded.c test_u32_is_casefolded_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-invariant��������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0022334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-32 string is invariant under a given case mapping. Files: lib/unicase/u32-is-invariant.c lib/unicase/invariant.h lib/unicase/u-is-invariant.h Depends-on: unitypes uninorm/base uninorm/u32-normalize uninorm/nfd unistr/u32-cmp stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u32-is-invariant.c Include: "unicase/invariant.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-lowercase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-32 string is entirely lower case. Files: lib/unicase/u32-is-lowercase.c Depends-on: unicase/base unicase/u32-is-invariant unicase/u32-tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-is-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_IS_LOWERCASE lib_SOURCES += unicase/u32-is-lowercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-lowercase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-is-lowercase.c tests/unicase/test-is-lowercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-is-lowercase check_PROGRAMS += test-u32-is-lowercase test_u32_is_lowercase_SOURCES = unicase/test-u32-is-lowercase.c test_u32_is_lowercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-titlecase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-32 string is entirely title case. Files: lib/unicase/u32-is-titlecase.c Depends-on: unicase/base unicase/u32-is-invariant unicase/u32-totitle configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-is-titlecase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_IS_TITLECASE lib_SOURCES += unicase/u32-is-titlecase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-titlecase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-is-titlecase.c tests/unicase/test-is-titlecase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-is-titlecase check_PROGRAMS += test-u32-is-titlecase test_u32_is_titlecase_SOURCES = unicase/test-u32-is-titlecase.c test_u32_is_titlecase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-uppercase��������������������������������������������0000664�0000000�0000000�00000000656�14110572173�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-32 string is entirely upper case. Files: lib/unicase/u32-is-uppercase.c Depends-on: unicase/base unicase/u32-is-invariant unicase/u32-toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-is-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_IS_UPPERCASE lib_SOURCES += unicase/u32-is-uppercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-is-uppercase-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0023471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-is-uppercase.c tests/unicase/test-is-uppercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-is-uppercase check_PROGRAMS += test-u32-is-uppercase test_u32_is_uppercase_SOURCES = unicase/test-u32-is-uppercase.c test_u32_is_uppercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-prefix-context������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0022703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of prefix UTF-32 string. Files: lib/unicase/u32-prefix-context.c lib/unicase/u-prefix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u32-mbtouc-unsafe unistr/u32-prev configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u32-prefix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_PREFIX_CONTEXT lib_SOURCES += unicase/u32-prefix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-suffix-context������������������������������������������0000664�0000000�0000000�00000001030�14110572173�0022710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of suffix UTF-32 string. Files: lib/unicase/u32-suffix-context.c lib/unicase/u-suffix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u32-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u32-suffix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_SUFFIX_CONTEXT lib_SOURCES += unicase/u32-suffix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-tolower�������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0021431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-32 strings (locale dependent). Files: lib/unicase/u32-tolower.c Depends-on: unicase/base unicase/u32-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOLOWER lib_SOURCES += unicase/u32-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/unicase/u32-tolower-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-tolower.c tests/macros.h Depends-on: unistr/u32-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u32-tolower check_PROGRAMS += test-u32-tolower test_u32_tolower_SOURCES = unicase/test-u32-tolower.c test_u32_tolower_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-totitle�������������������������������������������������0000664�0000000�0000000�00000000731�14110572173�0021415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-32 strings (locale dependent). Files: lib/unicase/u32-totitle.c lib/unicase/u-totitle.h Depends-on: unicase/base unicase/u32-ct-totitle unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOTITLE lib_SOURCES += unicase/u32-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������gnulib-20210822~d383792/modules/unicase/u32-totitle-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-totitle.c tests/macros.h Depends-on: unistr/u32-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u32-totitle check_PROGRAMS += test-u32-totitle test_u32_totitle_SOURCES = unicase/test-u32-totitle.c test_u32_totitle_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u32-toupper�������������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0021434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-32 strings (locale dependent). Files: lib/unicase/u32-toupper.c Depends-on: unicase/base unicase/u32-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u32-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOUPPER lib_SOURCES += unicase/u32-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/unicase/u32-toupper-tests�������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u32-toupper.c tests/macros.h Depends-on: unistr/u32-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u32-toupper check_PROGRAMS += test-u32-toupper test_u32_toupper_SOURCES = unicase/test-u32-toupper.c test_u32_toupper_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casecmp��������������������������������������������������0000664�0000000�0000000�00000000716�14110572173�0021272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case and normalization insensitive comparison of UTF-8 strings. Files: lib/unicase/u8-casecmp.c lib/unicase/u-casecmp.h Depends-on: unicase/base unicase/u8-casefold uninorm/decomposing-form unistr/u8-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASECMP lib_SOURCES += unicase/u8-casecmp.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casecmp-tests��������������������������������������������0000664�0000000�0000000�00000000451�14110572173�0022426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-casecmp.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u8-casecmp check_PROGRAMS += test-u8-casecmp test_u8_casecmp_SOURCES = unicase/test-u8-casecmp.c test_u8_casecmp_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casecoll�������������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0021451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, case and normalization insensitive comparison of UTF-8 strings. Files: lib/unicase/u8-casecoll.c lib/unicase/u-casecoll.h Depends-on: unicase/base unicase/u8-casexfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASECOLL lib_SOURCES += unicase/u8-casecoll.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casecoll-tests�������������������������������������������0000664�0000000�0000000�00000000473�14110572173�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-casecoll.c tests/unicase/test-casecmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u8-casecoll check_PROGRAMS += test-u8-casecoll test_u8_casecoll_SOURCES = unicase/test-u8-casecoll.c test_u8_casecoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casefold�������������������������������������������������0000664�0000000�0000000�00000000733�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-8 strings (locale dependent). Files: lib/unicase/u8-casefold.c lib/unicase/u-casefold.h Depends-on: unicase/base unicase/u8-ct-casefold unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASEFOLD lib_SOURCES += unicase/u8-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casefold-tests�������������������������������������������0000664�0000000�0000000�00000000454�14110572173�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-casefold.c tests/macros.h Depends-on: unistr/u8-cmp uninorm/nfc uninorm/nfd configure.ac: Makefile.am: TESTS += test-u8-casefold check_PROGRAMS += test-u8-casefold test_u8_casefold_SOURCES = unicase/test-u8-casefold.c test_u8_casefold_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casemap��������������������������������������������������0000664�0000000�0000000�00000001023�14110572173�0021260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case mapping for UTF-8 strings (locale dependent). Files: lib/unicase/unicasemap.h lib/unicase/u8-casemap.c lib/unicase/u-casemap.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unictype/combining-class unictype/property-soft-dotted unistr/u8-mbtouc-unsafe unistr/u8-uctomb unistr/u8-cpy uninorm/u8-normalize stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u8-casemap.c Include: "unicase/unicasemap.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-casexfrm�������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for case insensitive comparison of UTF-8 strings. Files: lib/unicase/u8-casexfrm.c lib/unicase/u-casexfrm.h Depends-on: unicase/base unicase/u8-casefold uniconv/u8-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASEXFRM lib_SOURCES += unicase/u8-casexfrm.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unicase/u8-ct-casefold����������������������������������������������0000664�0000000�0000000�00000001023�14110572173�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Casefolding mapping for UTF-8 substrings (locale dependent). Files: lib/unicase/u8-ct-casefold.c lib/unicase/u-ct-casefold.h Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/tocasefold uninorm/decomposing-form uninorm/u8-normalize uninorm/nfd configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-ct-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CT_CASEFOLD lib_SOURCES += unicase/u8-ct-casefold.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-ct-tolower�����������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-8 substrings (locale dependent). Files: lib/unicase/u8-ct-tolower.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-ct-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CT_TOLOWER lib_SOURCES += unicase/u8-ct-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-ct-totitle�����������������������������������������������0000664�0000000�0000000�00000001243�14110572173�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-8 substrings (locale dependent). Files: lib/unicase/u8-ct-totitle.c lib/unicase/u-ct-totitle.h lib/unicase/context.h Depends-on: unicase/base unicase/cased unicase/ignorable unicase/special-casing unicase/totitle unicase/tolower uniwbrk/u8-wordbreaks unictype/combining-class unictype/property-soft-dotted unistr/u8-mbtouc-unsafe unistr/u8-uctomb unistr/u8-cpy uninorm/u8-normalize stdbool configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-ct-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CT_TOTITLE lib_SOURCES += unicase/u8-ct-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-ct-toupper�����������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-8 substrings (locale dependent). Files: lib/unicase/u8-ct-toupper.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-ct-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CT_TOUPPER lib_SOURCES += unicase/u8-ct-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-cased�������������������������������������������������0000664�0000000�0000000�00000000747�14110572173�0021353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether case matters for an UTF-8 string. Files: lib/unicase/u8-is-cased.c lib/unicase/u-is-cased.h Depends-on: unicase/base unicase/u8-toupper unicase/u8-tolower unicase/u8-totitle uninorm/u8-normalize uninorm/nfd unistr/u8-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-is-cased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_IS_CASED lib_SOURCES += unicase/u8-is-cased.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������gnulib-20210822~d383792/modules/unicase/u8-is-cased-tests�������������������������������������������0000664�0000000�0000000�00000000444�14110572173�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-is-cased.c tests/unicase/test-is-cased.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-is-cased check_PROGRAMS += test-u8-is-cased test_u8_is_cased_SOURCES = unicase/test-u8-is-cased.c test_u8_is_cased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-casefolded��������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-8 string is already case-folded. Files: lib/unicase/u8-is-casefolded.c Depends-on: unicase/base unicase/u8-is-invariant unicase/u8-casefold configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-is-casefolded]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_IS_CASEFOLDED lib_SOURCES += unicase/u8-is-casefolded.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-casefolded-tests��������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-is-casefolded.c tests/unicase/test-is-casefolded.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-is-casefolded check_PROGRAMS += test-u8-is-casefolded test_u8_is_casefolded_SOURCES = unicase/test-u8-is-casefolded.c test_u8_is_casefolded_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-invariant���������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0022261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-8 string is invariant under a given case mapping. Files: lib/unicase/u8-is-invariant.c lib/unicase/invariant.h lib/unicase/u-is-invariant.h Depends-on: unitypes uninorm/base uninorm/u8-normalize uninorm/nfd unistr/u8-cmp stdbool configure.ac: Makefile.am: lib_SOURCES += unicase/u8-is-invariant.c Include: "unicase/invariant.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-lowercase���������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0022257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-8 string is entirely lower case. Files: lib/unicase/u8-is-lowercase.c Depends-on: unicase/base unicase/u8-is-invariant unicase/u8-tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-is-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_IS_LOWERCASE lib_SOURCES += unicase/u8-is-lowercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-lowercase-tests���������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-is-lowercase.c tests/unicase/test-is-lowercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-is-lowercase check_PROGRAMS += test-u8-is-lowercase test_u8_is_lowercase_SOURCES = unicase/test-u8-is-lowercase.c test_u8_is_lowercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-titlecase���������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0022250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-8 string is entirely title case. Files: lib/unicase/u8-is-titlecase.c Depends-on: unicase/base unicase/u8-is-invariant unicase/u8-totitle configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-is-titlecase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_IS_TITLECASE lib_SOURCES += unicase/u8-is-titlecase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-titlecase-tests���������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-is-titlecase.c tests/unicase/test-is-titlecase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-is-titlecase check_PROGRAMS += test-u8-is-titlecase test_u8_is_titlecase_SOURCES = unicase/test-u8-is-titlecase.c test_u8_is_titlecase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-uppercase���������������������������������������������0000664�0000000�0000000�00000000647�14110572173�0022262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether an UTF-8 string is entirely upper case. Files: lib/unicase/u8-is-uppercase.c Depends-on: unicase/base unicase/u8-is-invariant unicase/u8-toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-is-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_IS_UPPERCASE lib_SOURCES += unicase/u8-is-uppercase.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-is-uppercase-tests���������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-is-uppercase.c tests/unicase/test-is-uppercase.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-is-uppercase check_PROGRAMS += test-u8-is-uppercase test_u8_is_uppercase_SOURCES = unicase/test-u8-is-uppercase.c test_u8_is_uppercase_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-prefix-context�������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0022626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of prefix UTF-8 string. Files: lib/unicase/u8-prefix-context.c lib/unicase/u-prefix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u8-mbtouc-unsafe unistr/u8-prev configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u8-prefix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_PREFIX_CONTEXT lib_SOURCES += unicase/u8-prefix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-suffix-context�������������������������������������������0000664�0000000�0000000�00000001022�14110572173�0022634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case-mapping context of suffix UTF-8 string. Files: lib/unicase/u8-suffix-context.c lib/unicase/u-suffix-context.h lib/unicase/context.h Depends-on: unicase/base unicase/empty-prefix-context unicase/ignorable unictype/combining-class unistr/u8-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.10], [unicase/u8-suffix-context]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_SUFFIX_CONTEXT lib_SOURCES += unicase/u8-suffix-context.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-tolower��������������������������������������������������0000664�0000000�0000000�00000000737�14110572173�0021355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Lowercase mapping for UTF-8 strings (locale dependent). Files: lib/unicase/u8-tolower.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/tolower configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOLOWER lib_SOURCES += unicase/u8-tolower.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������gnulib-20210822~d383792/modules/unicase/u8-tolower-tests��������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-tolower.c tests/macros.h Depends-on: unistr/u8-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u8-tolower check_PROGRAMS += test-u8-tolower test_u8_tolower_SOURCES = unicase/test-u8-tolower.c test_u8_tolower_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-totitle��������������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0021341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Titlecase mapping for UTF-8 strings (locale dependent). Files: lib/unicase/u8-totitle.c lib/unicase/u-totitle.h Depends-on: unicase/base unicase/u8-ct-totitle unicase/empty-prefix-context unicase/empty-suffix-context configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOTITLE lib_SOURCES += unicase/u8-totitle.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-totitle-tests��������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0022476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-totitle.c tests/macros.h Depends-on: unistr/u8-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u8-totitle check_PROGRAMS += test-u8-totitle test_u8_totitle_SOURCES = unicase/test-u8-totitle.c test_u8_totitle_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/u8-toupper��������������������������������������������������0000664�0000000�0000000�00000000737�14110572173�0021360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Uppercase mapping for UTF-8 strings (locale dependent). Files: lib/unicase/u8-toupper.c Depends-on: unicase/base unicase/u8-casemap unicase/special-casing unicase/empty-prefix-context unicase/empty-suffix-context unicase/toupper configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/u8-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOUPPER lib_SOURCES += unicase/u8-toupper.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������gnulib-20210822~d383792/modules/unicase/u8-toupper-tests��������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0022510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-u8-toupper.c tests/macros.h Depends-on: unistr/u8-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-u8-toupper check_PROGRAMS += test-u8-toupper test_u8_toupper_SOURCES = unicase/test-u8-toupper.c test_u8_toupper_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ulc-casecmp�������������������������������������������������0000664�0000000�0000000�00000000762�14110572173�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Case and normalization insensitive comparison of strings. Files: lib/unicase/ulc-casecmp.c lib/unicase/u-casecmp.h Depends-on: unicase/base unicase/u8-casefold uninorm/decomposing-form uniconv/u8-conv-from-enc unistr/u8-cmp2 localcharset minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/ulc-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASECMP lib_SOURCES += unicase/ulc-casecmp.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������gnulib-20210822~d383792/modules/unicase/ulc-casecmp-tests�������������������������������������������0000664�0000000�0000000�00000001131�14110572173�0022651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-ulc-casecmp1.sh tests/unicase/test-ulc-casecmp2.sh tests/unicase/test-ulc-casecmp.c tests/unicase/test-casecmp.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: uninorm/nfd setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ 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@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ulc-casecoll������������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0021677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, case and normalization insensitive comparison of strings. Files: lib/unicase/ulc-casecoll.c lib/unicase/u-casecoll.h Depends-on: unicase/base unicase/ulc-casexfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/ulc-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASECOLL lib_SOURCES += unicase/ulc-casecoll.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ulc-casecoll-tests������������������������������������������0000664�0000000�0000000�00000001142�14110572173�0023025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unicase/test-ulc-casecoll1.sh tests/unicase/test-ulc-casecoll2.sh tests/unicase/test-ulc-casecoll.c tests/unicase/test-casecmp.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: uninorm/nfc setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ 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@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unicase/ulc-casexfrm������������������������������������������������0000664�0000000�0000000�00000000701�14110572173�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for case insensitive comparison of strings. Files: lib/unicase/ulc-casexfrm.c Depends-on: unicase/base unicase/u8-casexfrm uniconv/u8-conv-from-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unicase/ulc-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASEXFRM lib_SOURCES += unicase/ulc-casexfrm.c endif Include: "unicase.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������gnulib-20210822~d383792/modules/unicodeio�����������������������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0017657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Unicode character output to streams with locale dependent encoding. Files: lib/unicodeio.h lib/unicodeio.c m4/unicodeio.m4 m4/musl.m4 Depends-on: unistr/u8-uctomb iconv iconv_open gettext-h localcharset error stdio configure.ac: gl_UNICODEIO Makefile.am: lib_SOURCES += unicodeio.h unicodeio.c Include: "unicodeio.h" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: GPL Maintainer: all �����gnulib-20210822~d383792/modules/unicodeio-tests�����������������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0021021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unicodeio1.sh tests/test-unicodeio2.sh tests/test-unicodeio3.sh tests/test-unicodeio.c tests/macros.h m4/locale-fr.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR_UTF8 gt_LOCALE_ZH_CN Makefile.am: TESTS += test-unicodeio1.sh test-unicodeio2.sh test-unicodeio3.sh check_PROGRAMS += test-unicodeio test_unicodeio_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) $(LIBICONV) $(LIBINTL) �������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017430�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/base��������������������������������������������������������0000664�0000000�0000000�00000001107�14110572173�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for conversion from/to legacy encodings. Files: lib/uniconv.in.h lib/iconveh.h lib/striconveha.h lib/localcharset.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [uniconv.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNICONV_H) uniconv.h: uniconv.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniconv.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uniconv.h uniconv.h-t Include: "uniconv.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-conv-from-enc�������������������������������������������0000664�0000000�0000000�00000001011�14110572173�0022426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-16 from legacy encodings. Files: lib/uniconv/u16-conv-from-enc.c lib/uniconv/u-conv-from-enc.h Depends-on: uniconv/base striconveha uniconv/u8-conv-from-enc unistr/u8-to-u16 unistr/u8-mblen unistr/u16-mblen configure.ac: AC_REQUIRE([gl_BIGENDIAN]) gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-conv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_CONV_FROM_ENC lib_SOURCES += uniconv/u16-conv-from-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-conv-from-enc-tests�������������������������������������0000664�0000000�0000000�00000000551�14110572173�0023576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-conv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u16-cmp configure.ac: Makefile.am: TESTS += test-u16-conv-from-enc check_PROGRAMS += test-u16-conv-from-enc test_u16_conv_from_enc_SOURCES = uniconv/test-u16-conv-from-enc.c iconvsupport.c test_u16_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-conv-to-enc���������������������������������������������0000664�0000000�0000000�00000001020�14110572173�0022105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-16 to legacy encodings. Files: lib/uniconv/u16-conv-to-enc.c lib/uniconv/u-conv-to-enc.h Depends-on: uniconv/base striconveha uniconv/u8-conv-to-enc unistr/u16-mbtoucr unistr/u8-uctomb unistr/u16-mblen unistr/u8-mblen configure.ac: AC_REQUIRE([gl_BIGENDIAN]) gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-conv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_CONV_TO_ENC lib_SOURCES += uniconv/u16-conv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-conv-to-enc-tests���������������������������������������0000664�0000000�0000000�00000000452�14110572173�0023255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-conv-to-enc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-conv-to-enc check_PROGRAMS += test-u16-conv-to-enc test_u16_conv_to_enc_SOURCES = uniconv/test-u16-conv-to-enc.c test_u16_conv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-strconv-from-enc����������������������������������������0000664�0000000�0000000�00000000722�14110572173�0023167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-16 from legacy encodings. Files: lib/uniconv/u16-strconv-from-enc.c lib/uniconv/u-strconv-from-enc.h Depends-on: uniconv/base uniconv/u16-conv-from-enc unistr/u16-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-strconv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_STRCONV_FROM_ENC lib_SOURCES += uniconv/u16-strconv-from-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-strconv-from-enc-tests����������������������������������0000664�0000000�0000000�00000000576�14110572173�0024336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-strconv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u16-strcmp configure.ac: Makefile.am: TESTS += test-u16-strconv-from-enc check_PROGRAMS += test-u16-strconv-from-enc test_u16_strconv_from_enc_SOURCES = uniconv/test-u16-strconv-from-enc.c iconvsupport.c test_u16_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-strconv-from-locale�������������������������������������0000664�0000000�0000000�00000000676�14110572173�0023671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-16 from the locale encoding. Files: lib/uniconv/u16-strconv-from-locale.c Depends-on: uniconv/base uniconv/u16-strconv-from-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-strconv-from-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_STRCONV_FROM_LOCALE lib_SOURCES += uniconv/u16-strconv-from-locale.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-strconv-to-enc������������������������������������������0000664�0000000�0000000�00000001000�14110572173�0022634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-16 to legacy encodings. Files: lib/uniconv/u16-strconv-to-enc.c lib/uniconv/u-strconv-to-enc.h Depends-on: uniconv/base striconveha uniconv/u8-strconv-to-enc unistr/u16-to-u8 unistr/u16-strlen configure.ac: AC_REQUIRE([gl_BIGENDIAN]) gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-strconv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_STRCONV_TO_ENC lib_SOURCES += uniconv/u16-strconv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all gnulib-20210822~d383792/modules/uniconv/u16-strconv-to-enc-tests������������������������������������0000664�0000000�0000000�00000000516�14110572173�0024007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-strconv-to-enc.c tests/macros.h Depends-on: unistr/u16-strcmp configure.ac: Makefile.am: TESTS += test-u16-strconv-to-enc check_PROGRAMS += test-u16-strconv-to-enc test_u16_strconv_to_enc_SOURCES = uniconv/test-u16-strconv-to-enc.c test_u16_strconv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u16-strconv-to-locale���������������������������������������0000664�0000000�0000000�00000000664�14110572173�0023345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-16 to the locale encoding. Files: lib/uniconv/u16-strconv-to-locale.c Depends-on: uniconv/base uniconv/u16-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u16-strconv-to-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U16_STRCONV_TO_LOCALE lib_SOURCES += uniconv/u16-strconv-to-locale.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-conv-from-enc�������������������������������������������0000664�0000000�0000000�00000000756�14110572173�0022443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-32 from legacy encodings. Files: lib/uniconv/u32-conv-from-enc.c lib/uniconv/u-conv-from-enc.h Depends-on: uniconv/base striconveha uniconv/u8-conv-from-enc unistr/u8-to-u32 unistr/u8-mblen unistr/u32-mblen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-conv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_CONV_FROM_ENC lib_SOURCES += uniconv/u32-conv-from-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/uniconv/u32-conv-from-enc-tests�������������������������������������0000664�0000000�0000000�00000000551�14110572173�0023574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-conv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u32-cmp configure.ac: Makefile.am: TESTS += test-u32-conv-from-enc check_PROGRAMS += test-u32-conv-from-enc test_u32_conv_from_enc_SOURCES = uniconv/test-u32-conv-from-enc.c iconvsupport.c test_u32_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-conv-to-enc���������������������������������������������0000664�0000000�0000000�00000000742�14110572173�0022115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-32 to legacy encodings. Files: lib/uniconv/u32-conv-to-enc.c lib/uniconv/u-conv-to-enc.h Depends-on: uniconv/base striconveha uniconv/u8-conv-to-enc unistr/u32-to-u8 unistr/u32-mblen unistr/u8-mblen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-conv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_CONV_TO_ENC lib_SOURCES += uniconv/u32-conv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������gnulib-20210822~d383792/modules/uniconv/u32-conv-to-enc-tests���������������������������������������0000664�0000000�0000000�00000000452�14110572173�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-conv-to-enc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-conv-to-enc check_PROGRAMS += test-u32-conv-to-enc test_u32_conv_to_enc_SOURCES = uniconv/test-u32-conv-to-enc.c test_u32_conv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-from-enc����������������������������������������0000664�0000000�0000000�00000000722�14110572173�0023165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-32 from legacy encodings. Files: lib/uniconv/u32-strconv-from-enc.c lib/uniconv/u-strconv-from-enc.h Depends-on: uniconv/base uniconv/u32-conv-from-enc unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-strconv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_STRCONV_FROM_ENC lib_SOURCES += uniconv/u32-strconv-from-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-from-enc-tests����������������������������������0000664�0000000�0000000�00000000576�14110572173�0024334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-strconv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u32-strcmp configure.ac: Makefile.am: TESTS += test-u32-strconv-from-enc check_PROGRAMS += test-u32-strconv-from-enc test_u32_strconv_from_enc_SOURCES = uniconv/test-u32-strconv-from-enc.c iconvsupport.c test_u32_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-from-locale�������������������������������������0000664�0000000�0000000�00000000676�14110572173�0023667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-32 from the locale encoding. Files: lib/uniconv/u32-strconv-from-locale.c Depends-on: uniconv/base uniconv/u32-strconv-from-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-strconv-from-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_STRCONV_FROM_LOCALE lib_SOURCES += uniconv/u32-strconv-from-locale.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-to-enc������������������������������������������0000664�0000000�0000000�00000000745�14110572173�0022651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-32 to legacy encodings. Files: lib/uniconv/u32-strconv-to-enc.c lib/uniconv/u-strconv-to-enc.h Depends-on: uniconv/base striconveha uniconv/u8-strconv-to-enc unistr/u32-to-u8 unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-strconv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_STRCONV_TO_ENC lib_SOURCES += uniconv/u32-strconv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-to-enc-tests������������������������������������0000664�0000000�0000000�00000000516�14110572173�0024005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-strconv-to-enc.c tests/macros.h Depends-on: unistr/u32-strcmp configure.ac: Makefile.am: TESTS += test-u32-strconv-to-enc check_PROGRAMS += test-u32-strconv-to-enc test_u32_strconv_to_enc_SOURCES = uniconv/test-u32-strconv-to-enc.c test_u32_strconv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u32-strconv-to-locale���������������������������������������0000664�0000000�0000000�00000000664�14110572173�0023343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-32 to the locale encoding. Files: lib/uniconv/u32-strconv-to-locale.c Depends-on: uniconv/base uniconv/u32-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u32-strconv-to-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U32_STRCONV_TO_LOCALE lib_SOURCES += uniconv/u32-strconv-to-locale.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-conv-from-enc��������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-8 from legacy encodings. Files: lib/uniconv/u8-conv-from-enc.c Depends-on: uniconv/base c-strcaseeq striconveha unistr/u8-check unistr/u8-mblen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-conv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_CONV_FROM_ENC lib_SOURCES += uniconv/u8-conv-from-enc.c endif Include: "uniconv.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-conv-from-enc-tests��������������������������������������0000664�0000000�0000000�00000000563�14110572173�0023522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-conv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u8-strlen unistr/u8-cmp configure.ac: Makefile.am: TESTS += test-u8-conv-from-enc check_PROGRAMS += test-u8-conv-from-enc test_u8_conv_from_enc_SOURCES = uniconv/test-u8-conv-from-enc.c iconvsupport.c test_u8_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-conv-to-enc����������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0022037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-8 to legacy encodings. Files: lib/uniconv/u8-conv-to-enc.c Depends-on: uniconv/base c-strcaseeq striconveha unistr/u8-check configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-conv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_CONV_TO_ENC lib_SOURCES += uniconv/u8-conv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-conv-to-enc-tests����������������������������������������0000664�0000000�0000000�00000000465�14110572173�0023202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-conv-to-enc.c tests/macros.h Depends-on: unistr/u8-strlen configure.ac: Makefile.am: TESTS += test-u8-conv-to-enc check_PROGRAMS += test-u8-conv-to-enc test_u8_conv_to_enc_SOURCES = uniconv/test-u8-conv-to-enc.c test_u8_conv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-from-enc�����������������������������������������0000664�0000000�0000000�00000000701�14110572173�0023105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-8 from legacy encodings. Files: lib/uniconv/u8-strconv-from-enc.c lib/uniconv/u-strconv-from-enc.h Depends-on: uniconv/base uniconv/u8-conv-from-enc unistr/u8-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-strconv-from-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_STRCONV_FROM_ENC lib_SOURCES += uniconv/u8-strconv-from-enc.c endif Include: "uniconv.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-from-enc-tests�����������������������������������0000664�0000000�0000000�00000000567�14110572173�0024257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-strconv-from-enc.c tests/iconvsupport.c tests/macros.h Depends-on: unistr/u8-strcmp configure.ac: Makefile.am: TESTS += test-u8-strconv-from-enc check_PROGRAMS += test-u8-strconv-from-enc test_u8_strconv_from_enc_SOURCES = uniconv/test-u8-strconv-from-enc.c iconvsupport.c test_u8_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-from-locale��������������������������������������0000664�0000000�0000000�00000000656�14110572173�0023610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion to UTF-8 from the locale encoding. Files: lib/uniconv/u8-strconv-from-locale.c Depends-on: uniconv/base uniconv/u8-strconv-from-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-strconv-from-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_STRCONV_FROM_LOCALE lib_SOURCES += uniconv/u8-strconv-from-locale.c endif Include: "uniconv.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-to-enc�������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-8 to legacy encodings. Files: lib/uniconv/u8-strconv-to-enc.c Depends-on: uniconv/base c-strcaseeq striconveha unistr/u8-check unistr/u8-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-strconv-to-enc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_STRCONV_TO_ENC lib_SOURCES += uniconv/u8-strconv-to-enc.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-to-enc-tests�������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-strconv-to-enc.c tests/macros.h Depends-on: unistr/u8-strcmp configure.ac: Makefile.am: TESTS += test-u8-strconv-to-enc check_PROGRAMS += test-u8-strconv-to-enc test_u8_strconv_to_enc_SOURCES = uniconv/test-u8-strconv-to-enc.c test_u8_strconv_to_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniconv/u8-strconv-to-locale����������������������������������������0000664�0000000�0000000�00000000656�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion from UTF-8 to the locale encoding. Files: lib/uniconv/u8-strconv-to-locale.c Depends-on: uniconv/base uniconv/u8-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniconv/u8-strconv-to-locale]) Makefile.am: if LIBUNISTRING_COMPILE_UNICONV_U8_STRCONV_TO_LOCALE lib_SOURCES += uniconv/u8-strconv-to-locale.c endif Include: "uniconv.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/�����������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017607�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/base�������������������������������������������������������0000664�0000000�0000000�00000001046�14110572173�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for Unicode classification and properties. Files: lib/unictype.in.h m4/libunistring-base.m4 Depends-on: unitypes stdbool configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.8], [unictype.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNICTYPE_H) unictype.h: unictype.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unictype.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unictype.h unictype.h-t Include: "unictype.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-all����������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0022231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character bidi categories. Files: Depends-on: unictype/base unictype/bidiclass-byname unictype/bidiclass-longname unictype/bidiclass-name unictype/bidiclass-of unictype/bidiclass-test configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-byname�������������������������������������������0000664�0000000�0000000�00000001747�14110572173�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character bidi class, given its name. Files: lib/unictype/bidi_byname.c lib/unictype/bidi_byname.gperf Depends-on: unictype/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/bidiclass-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_BYNAME lib_SOURCES += unictype/bidi_byname.c endif $(srcdir)/unictype/bidi_byname.h: $(srcdir)/unictype/bidi_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/bidi_byname.gperf > $(srcdir)/unictype/bidi_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/bidi_byname.h-t1 > $(srcdir)/unictype/bidi_byname.h-t2 \ && mv $(srcdir)/unictype/bidi_byname.h-t2 $(srcdir)/unictype/bidi_byname.h BUILT_SOURCES += unictype/bidi_byname.h MOSTLYCLEANFILES += unictype/bidi_byname.h-t1 unictype/bidi_byname.h-t2 MAINTAINERCLEANFILES += unictype/bidi_byname.h EXTRA_DIST += unictype/bidi_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-byname-tests�������������������������������������0000664�0000000�0000000�00000000410�14110572173�0024073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-bidi_byname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-bidi_byname check_PROGRAMS += test-bidi_byname test_bidi_byname_SOURCES = unictype/test-bidi_byname.c test_bidi_byname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-longname�����������������������������������������0000664�0000000�0000000�00000000565�14110572173�0023273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character bidi class. Files: lib/unictype/bidi_longname.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/bidiclass-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_LONGNAME lib_SOURCES += unictype/bidi_longname.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-longname-tests�����������������������������������0000664�0000000�0000000�00000000424�14110572173�0024425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-bidi_longname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-bidi_longname check_PROGRAMS += test-bidi_longname test_bidi_longname_SOURCES = unictype/test-bidi_longname.c test_bidi_longname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-name���������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character bidi class. Files: lib/unictype/bidi_name.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/bidiclass-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_NAME lib_SOURCES += unictype/bidi_name.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-name-tests���������������������������������������0000664�0000000�0000000�00000000374�14110572173�0023551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-bidi_name.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-bidi_name check_PROGRAMS += test-bidi_name test_bidi_name_SOURCES = unictype/test-bidi_name.c test_bidi_name_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-of�����������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0022073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine bidi class of a Unicode character. Files: lib/unictype/bidi_of.c lib/unictype/bidi_of.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/bidiclass-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_OF lib_SOURCES += unictype/bidi_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-of-tests�����������������������������������������0000664�0000000�0000000�00000000360�14110572173�0023230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-bidi_of.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-bidi_of check_PROGRAMS += test-bidi_of test_bidi_of_SOURCES = unictype/test-bidi_of.c test_bidi_of_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-test���������������������������������������������0000664�0000000�0000000�00000000625�14110572173�0022447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character belongs to a given bidi class. Files: lib/unictype/bidi_test.c Depends-on: unictype/base unictype/bidiclass-of configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/bidiclass-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_TEST lib_SOURCES += unictype/bidi_test.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/bidiclass-test-tests���������������������������������������0000664�0000000�0000000�00000000422�14110572173�0023602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-bidi_test.c tests/macros.h Depends-on: unictype/bidiclass-of configure.ac: Makefile.am: TESTS += test-bidi_test check_PROGRAMS += test-bidi_test test_bidi_test_SOURCES = unictype/test-bidi_test.c test_bidi_test_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-all��������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for blocks of Unicode characters. Files: Depends-on: unictype/block-of unictype/block-test unictype/block-list configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-list�������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0021576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: List of Unicode character blocks. Files: lib/unictype/blocks.c lib/unictype/blocks.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/block-list]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BLOCK_LIST lib_SOURCES += unictype/blocks.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-list-tests�������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-block_list.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-block_list check_PROGRAMS += test-block_list test_block_list_SOURCES = unictype/test-block_list.c test_block_list_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-of���������������������������������������������������0000664�0000000�0000000�00000000315�14110572173�0021225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine block of a Unicode character. Files: Depends-on: unictype/base unictype/block-list configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-of-tests���������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-block_of.c tests/macros.h Depends-on: unictype/block-list unictype/block-test configure.ac: Makefile.am: TESTS += test-block_of check_PROGRAMS += test-block_of test_block_of_SOURCES = unictype/test-block_of.c test_block_of_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-test�������������������������������������������������0000664�0000000�0000000�00000000574�14110572173�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character belongs to a given Unicode block. Files: lib/unictype/block_test.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/block-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BLOCK_TEST lib_SOURCES += unictype/block_test.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/block-test-tests�������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-block_test.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-block_test check_PROGRAMS += test-block_test test_block_test_SOURCES = unictype/test-block_test.c test_block_test_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-C�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category C. Files: lib/unictype/categ_C.c lib/unictype/categ_C.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-C]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_C lib_SOURCES += unictype/categ_C.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-C-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_C.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_C check_PROGRAMS += test-categ_C test_categ_C_SOURCES = unictype/test-categ_C.c test_categ_C_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cc������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Cc. Files: lib/unictype/categ_Cc.c lib/unictype/categ_Cc.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Cc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CC lib_SOURCES += unictype/categ_Cc.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cc-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Cc.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Cc check_PROGRAMS += test-categ_Cc test_categ_Cc_SOURCES = unictype/test-categ_Cc.c test_categ_Cc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cf������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Cf. Files: lib/unictype/categ_Cf.c lib/unictype/categ_Cf.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Cf]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CF lib_SOURCES += unictype/categ_Cf.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cf-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Cf.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Cf check_PROGRAMS += test-categ_Cf test_categ_Cf_SOURCES = unictype/test-categ_Cf.c test_categ_Cf_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cn������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Cn. Files: lib/unictype/categ_Cn.c lib/unictype/categ_Cn.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Cn]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CN lib_SOURCES += unictype/categ_Cn.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cn-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Cn.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Cn check_PROGRAMS += test-categ_Cn test_categ_Cn_SOURCES = unictype/test-categ_Cn.c test_categ_Cn_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Co������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Co. Files: lib/unictype/categ_Co.c lib/unictype/categ_Co.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Co]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CO lib_SOURCES += unictype/categ_Co.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Co-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Co.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Co check_PROGRAMS += test-categ_Co test_categ_Co_SOURCES = unictype/test-categ_Co.c test_categ_Co_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cs������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Cs. Files: lib/unictype/categ_Cs.c lib/unictype/categ_Cs.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Cs]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CS lib_SOURCES += unictype/categ_Cs.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Cs-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Cs.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Cs check_PROGRAMS += test-categ_Cs test_categ_Cs_SOURCES = unictype/test-categ_Cs.c test_categ_Cs_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-L�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category L. Files: lib/unictype/categ_L.c lib/unictype/categ_L.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-L]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_L lib_SOURCES += unictype/categ_L.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-L-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_L.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_L check_PROGRAMS += test-categ_L test_categ_L_SOURCES = unictype/test-categ_L.c test_categ_L_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-LC������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category LC. Files: lib/unictype/categ_LC.c lib/unictype/categ_LC.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-LC]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LC lib_SOURCES += unictype/categ_LC.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-LC-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_LC.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_LC check_PROGRAMS += test-categ_LC test_categ_LC_SOURCES = unictype/test-categ_LC.c test_categ_LC_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Ll������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Ll. Files: lib/unictype/categ_Ll.c lib/unictype/categ_Ll.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Ll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LL lib_SOURCES += unictype/categ_Ll.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Ll-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Ll.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Ll check_PROGRAMS += test-categ_Ll test_categ_Ll_SOURCES = unictype/test-categ_Ll.c test_categ_Ll_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lm������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Lm. Files: lib/unictype/categ_Lm.c lib/unictype/categ_Lm.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Lm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LM lib_SOURCES += unictype/categ_Lm.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lm-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Lm.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Lm check_PROGRAMS += test-categ_Lm test_categ_Lm_SOURCES = unictype/test-categ_Lm.c test_categ_Lm_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lo������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Lo. Files: lib/unictype/categ_Lo.c lib/unictype/categ_Lo.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Lo]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LO lib_SOURCES += unictype/categ_Lo.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lo-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Lo.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Lo check_PROGRAMS += test-categ_Lo test_categ_Lo_SOURCES = unictype/test-categ_Lo.c test_categ_Lo_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lt������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Lt. Files: lib/unictype/categ_Lt.c lib/unictype/categ_Lt.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Lt]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LT lib_SOURCES += unictype/categ_Lt.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lt-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Lt.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Lt check_PROGRAMS += test-categ_Lt test_categ_Lt_SOURCES = unictype/test-categ_Lt.c test_categ_Lt_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lu������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Lu. Files: lib/unictype/categ_Lu.c lib/unictype/categ_Lu.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Lu]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LU lib_SOURCES += unictype/categ_Lu.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Lu-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Lu.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Lu check_PROGRAMS += test-categ_Lu test_categ_Lu_SOURCES = unictype/test-categ_Lu.c test_categ_Lu_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-M�������������������������������������������������0000664�0000000�0000000�00000000573�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category M. Files: lib/unictype/categ_M.c lib/unictype/categ_M.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-M]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_M lib_SOURCES += unictype/categ_M.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-M-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_M.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_M check_PROGRAMS += test-categ_M test_categ_M_SOURCES = unictype/test-categ_M.c test_categ_M_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Mc������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Mc. Files: lib/unictype/categ_Mc.c lib/unictype/categ_Mc.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Mc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MC lib_SOURCES += unictype/categ_Mc.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Mc-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Mc.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Mc check_PROGRAMS += test-categ_Mc test_categ_Mc_SOURCES = unictype/test-categ_Mc.c test_categ_Mc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Me������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Me. Files: lib/unictype/categ_Me.c lib/unictype/categ_Me.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Me]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ME lib_SOURCES += unictype/categ_Me.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Me-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Me.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Me check_PROGRAMS += test-categ_Me test_categ_Me_SOURCES = unictype/test-categ_Me.c test_categ_Me_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Mn������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Mn. Files: lib/unictype/categ_Mn.c lib/unictype/categ_Mn.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Mn]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MN lib_SOURCES += unictype/categ_Mn.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Mn-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Mn.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Mn check_PROGRAMS += test-categ_Mn test_categ_Mn_SOURCES = unictype/test-categ_Mn.c test_categ_Mn_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-N�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category N. Files: lib/unictype/categ_N.c lib/unictype/categ_N.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-N]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_N lib_SOURCES += unictype/categ_N.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-N-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_N.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_N check_PROGRAMS += test-categ_N test_categ_N_SOURCES = unictype/test-categ_N.c test_categ_N_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Nd������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Nd. Files: lib/unictype/categ_Nd.c lib/unictype/categ_Nd.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Nd]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ND lib_SOURCES += unictype/categ_Nd.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Nd-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Nd.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Nd check_PROGRAMS += test-categ_Nd test_categ_Nd_SOURCES = unictype/test-categ_Nd.c test_categ_Nd_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Nl������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Nl. Files: lib/unictype/categ_Nl.c lib/unictype/categ_Nl.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Nl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NL lib_SOURCES += unictype/categ_Nl.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Nl-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Nl.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Nl check_PROGRAMS += test-categ_Nl test_categ_Nl_SOURCES = unictype/test-categ_Nl.c test_categ_Nl_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-No������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category No. Files: lib/unictype/categ_No.c lib/unictype/categ_No.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-No]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NO lib_SOURCES += unictype/categ_No.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-No-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_No.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_No check_PROGRAMS += test-categ_No test_categ_No_SOURCES = unictype/test-categ_No.c test_categ_No_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-P�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category P. Files: lib/unictype/categ_P.c lib/unictype/categ_P.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-P]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_P lib_SOURCES += unictype/categ_P.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-P-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_P.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_P check_PROGRAMS += test-categ_P test_categ_P_SOURCES = unictype/test-categ_P.c test_categ_P_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pc������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Pc. Files: lib/unictype/categ_Pc.c lib/unictype/categ_Pc.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Pc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PC lib_SOURCES += unictype/categ_Pc.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pc-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Pc.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Pc check_PROGRAMS += test-categ_Pc test_categ_Pc_SOURCES = unictype/test-categ_Pc.c test_categ_Pc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pd������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Pd. Files: lib/unictype/categ_Pd.c lib/unictype/categ_Pd.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Pd]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PD lib_SOURCES += unictype/categ_Pd.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pd-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Pd.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Pd check_PROGRAMS += test-categ_Pd test_categ_Pd_SOURCES = unictype/test-categ_Pd.c test_categ_Pd_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pe������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Pe. Files: lib/unictype/categ_Pe.c lib/unictype/categ_Pe.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Pe]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PE lib_SOURCES += unictype/categ_Pe.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pe-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Pe.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Pe check_PROGRAMS += test-categ_Pe test_categ_Pe_SOURCES = unictype/test-categ_Pe.c test_categ_Pe_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pf������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Pf. Files: lib/unictype/categ_Pf.c lib/unictype/categ_Pf.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Pf]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PF lib_SOURCES += unictype/categ_Pf.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pf-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Pf.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Pf check_PROGRAMS += test-categ_Pf test_categ_Pf_SOURCES = unictype/test-categ_Pf.c test_categ_Pf_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pi������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Pi. Files: lib/unictype/categ_Pi.c lib/unictype/categ_Pi.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Pi]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PI lib_SOURCES += unictype/categ_Pi.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Pi-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Pi.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Pi check_PROGRAMS += test-categ_Pi test_categ_Pi_SOURCES = unictype/test-categ_Pi.c test_categ_Pi_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Po������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Po. Files: lib/unictype/categ_Po.c lib/unictype/categ_Po.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Po]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PO lib_SOURCES += unictype/categ_Po.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Po-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Po.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Po check_PROGRAMS += test-categ_Po test_categ_Po_SOURCES = unictype/test-categ_Po.c test_categ_Po_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Ps������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Ps. Files: lib/unictype/categ_Ps.c lib/unictype/categ_Ps.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Ps]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PS lib_SOURCES += unictype/categ_Ps.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Ps-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Ps.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Ps check_PROGRAMS += test-categ_Ps test_categ_Ps_SOURCES = unictype/test-categ_Ps.c test_categ_Ps_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-S�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category S. Files: lib/unictype/categ_S.c lib/unictype/categ_S.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-S]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_S lib_SOURCES += unictype/categ_S.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-S-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_S.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_S check_PROGRAMS += test-categ_S test_categ_S_SOURCES = unictype/test-categ_S.c test_categ_S_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sc������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Sc. Files: lib/unictype/categ_Sc.c lib/unictype/categ_Sc.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Sc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SC lib_SOURCES += unictype/categ_Sc.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sc-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Sc.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Sc check_PROGRAMS += test-categ_Sc test_categ_Sc_SOURCES = unictype/test-categ_Sc.c test_categ_Sc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sk������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Sk. Files: lib/unictype/categ_Sk.c lib/unictype/categ_Sk.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Sk]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SK lib_SOURCES += unictype/categ_Sk.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sk-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Sk.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Sk check_PROGRAMS += test-categ_Sk test_categ_Sk_SOURCES = unictype/test-categ_Sk.c test_categ_Sk_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sm������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Sm. Files: lib/unictype/categ_Sm.c lib/unictype/categ_Sm.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Sm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SM lib_SOURCES += unictype/categ_Sm.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Sm-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Sm.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Sm check_PROGRAMS += test-categ_Sm test_categ_Sm_SOURCES = unictype/test-categ_Sm.c test_categ_Sm_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-So������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category So. Files: lib/unictype/categ_So.c lib/unictype/categ_So.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-So]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SO lib_SOURCES += unictype/categ_So.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-So-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_So.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_So check_PROGRAMS += test-categ_So test_categ_So_SOURCES = unictype/test-categ_So.c test_categ_So_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Z�������������������������������������������������0000664�0000000�0000000�00000000605�14110572173�0021557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Z. Files: lib/unictype/categ_Z.c lib/unictype/categ_Z.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Z]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_Z lib_SOURCES += unictype/categ_Z.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Z-tests�������������������������������������������0000664�0000000�0000000�00000000523�14110572173�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Z.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Z check_PROGRAMS += test-categ_Z test_categ_Z_SOURCES = unictype/test-categ_Z.c test_categ_Z_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zl������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Zl. Files: lib/unictype/categ_Zl.c lib/unictype/categ_Zl.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Zl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZL lib_SOURCES += unictype/categ_Zl.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zl-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Zl.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Zl check_PROGRAMS += test-categ_Zl test_categ_Zl_SOURCES = unictype/test-categ_Zl.c test_categ_Zl_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zp������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Zp. Files: lib/unictype/categ_Zp.c lib/unictype/categ_Zp.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Zp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZP lib_SOURCES += unictype/categ_Zp.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zp-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Zp.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Zp check_PROGRAMS += test-categ_Zp test_categ_Zp_SOURCES = unictype/test-categ_Zp.c test_categ_Zp_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zs������������������������������������������������0000664�0000000�0000000�00000000613�14110572173�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is of general category Zs. Files: lib/unictype/categ_Zs.c lib/unictype/categ_Zs.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-Zs]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZS lib_SOURCES += unictype/categ_Zs.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-Zs-tests������������������������������������������0000664�0000000�0000000�00000000531�14110572173�0023100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_Zs.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_Zs check_PROGRAMS += test-categ_Zs test_categ_Zs_SOURCES = unictype/test-categ_Zs.c test_categ_Zs_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-all�����������������������������������������������0000664�0000000�0000000�00000002246�14110572173�0022121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character categories. Files: Depends-on: unictype/category-C unictype/category-Cc unictype/category-Cf unictype/category-Cn unictype/category-Co unictype/category-Cs unictype/category-L unictype/category-LC unictype/category-Ll unictype/category-Lm unictype/category-Lo unictype/category-Lt unictype/category-Lu unictype/category-M unictype/category-Mc unictype/category-Me unictype/category-Mn unictype/category-N unictype/category-Nd unictype/category-Nl unictype/category-No unictype/category-P unictype/category-Pc unictype/category-Pd unictype/category-Pe unictype/category-Pf unictype/category-Pi unictype/category-Po unictype/category-Ps unictype/category-S unictype/category-Sc unictype/category-Sk unictype/category-Sm unictype/category-So unictype/category-Z unictype/category-Zl unictype/category-Zp unictype/category-Zs unictype/category-and unictype/category-and-not unictype/category-byname unictype/category-longname unictype/category-name unictype/category-of unictype/category-or unictype/category-test unictype/category-test-withtable configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-and�����������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0022114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Intersection of categories of Unicode characters. Files: lib/unictype/categ_and.c Depends-on: unictype/base unictype/category-none unictype/category-test-withtable configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-and]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_AND lib_SOURCES += unictype/categ_and.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-and-not�������������������������������������������0000664�0000000�0000000�00000000667�14110572173�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set-difference of categories of Unicode characters. Files: lib/unictype/categ_and_not.c Depends-on: unictype/base unictype/category-none unictype/category-test-withtable configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-and-not]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_AND_NOT lib_SOURCES += unictype/categ_and_not.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-and-not-tests�������������������������������������0000664�0000000�0000000�00000000622�14110572173�0024045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_and_not.c tests/macros.h Depends-on: unictype/category-or unictype/category-test unictype/category-L unictype/category-N unictype/category-Lu unictype/category-Nd configure.ac: Makefile.am: TESTS += test-categ_and_not check_PROGRAMS += test-categ_and_not test_categ_and_not_SOURCES = unictype/test-categ_and_not.c test_categ_and_not_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-and-tests�����������������������������������������0000664�0000000�0000000�00000000572�14110572173�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_and.c tests/macros.h Depends-on: unictype/category-or unictype/category-test unictype/category-L unictype/category-Nd unictype/category-Lu unictype/category-N configure.ac: Makefile.am: TESTS += test-categ_and check_PROGRAMS += test-categ_and test_categ_and_SOURCES = unictype/test-categ_and.c test_categ_and_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-byname��������������������������������������������0000664�0000000�0000000�00000003441�14110572173�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character category, given its name. Files: lib/unictype/categ_byname.c lib/unictype/categ_byname.gperf Depends-on: unictype/base unictype/category-C unictype/category-Cc unictype/category-Cf unictype/category-Cn unictype/category-Co unictype/category-Cs unictype/category-L unictype/category-LC unictype/category-Ll unictype/category-Lm unictype/category-Lo unictype/category-Lt unictype/category-Lu unictype/category-M unictype/category-Mc unictype/category-Me unictype/category-Mn unictype/category-N unictype/category-Nd unictype/category-Nl unictype/category-No unictype/category-P unictype/category-Pc unictype/category-Pd unictype/category-Pe unictype/category-Pf unictype/category-Pi unictype/category-Po unictype/category-Ps unictype/category-S unictype/category-Sc unictype/category-Sk unictype/category-Sm unictype/category-So unictype/category-Z unictype/category-Zl unictype/category-Zp unictype/category-Zs unictype/category-none gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_BYNAME lib_SOURCES += unictype/categ_byname.c endif $(srcdir)/unictype/categ_byname.h: $(srcdir)/unictype/categ_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/categ_byname.gperf > $(srcdir)/unictype/categ_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/categ_byname.h-t1 > $(srcdir)/unictype/categ_byname.h-t2 \ && mv $(srcdir)/unictype/categ_byname.h-t2 $(srcdir)/unictype/categ_byname.h BUILT_SOURCES += unictype/categ_byname.h MOSTLYCLEANFILES += unictype/categ_byname.h-t1 unictype/categ_byname.h-t2 MAINTAINERCLEANFILES += unictype/categ_byname.h EXTRA_DIST += unictype/categ_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-byname-tests��������������������������������������0000664�0000000�0000000�00000000455�14110572173�0023764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_byname.c tests/macros.h Depends-on: stdbool unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_byname check_PROGRAMS += test-categ_byname test_categ_byname_SOURCES = unictype/test-categ_byname.c test_categ_byname_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-longname������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character category. Files: lib/unictype/categ_longname.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LONGNAME lib_SOURCES += unictype/categ_longname.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-longname-tests������������������������������������0000664�0000000�0000000�00000000530�14110572173�0024303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_longname.c tests/macros.h Depends-on: unictype/category-or unictype/category-Z unictype/category-Nl configure.ac: Makefile.am: TESTS += test-categ_longname check_PROGRAMS += test-categ_longname test_categ_longname_SOURCES = unictype/test-categ_longname.c test_categ_longname_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-name����������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0022267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character category. Files: lib/unictype/categ_name.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NAME lib_SOURCES += unictype/categ_name.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-name-tests����������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_name.c tests/macros.h Depends-on: unictype/category-or unictype/category-Z unictype/category-Nl configure.ac: Makefile.am: TESTS += test-categ_name check_PROGRAMS += test-categ_name test_categ_name_SOURCES = unictype/test-categ_name.c test_categ_name_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-none����������������������������������������������0000664�0000000�0000000�00000000533�14110572173�0022305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Empty category of Unicode characters. Files: lib/unictype/categ_none.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-none]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NONE lib_SOURCES += unictype/categ_none.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-none-tests����������������������������������������0000664�0000000�0000000�00000000431�14110572173�0023442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_none.c tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_none check_PROGRAMS += test-categ_none test_categ_none_SOURCES = unictype/test-categ_none.c test_categ_none_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-of������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0021752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine category of a Unicode character. Files: lib/unictype/categ_of.c lib/unictype/categ_of.h Depends-on: unictype/base unictype/category-none configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OF lib_SOURCES += unictype/categ_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-of-tests������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_of.c tests/macros.h Depends-on: unictype/category-test configure.ac: Makefile.am: TESTS += test-categ_of check_PROGRAMS += test-categ_of test_categ_of_SOURCES = unictype/test-categ_of.c test_categ_of_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-or������������������������������������������������0000664�0000000�0000000�00000000603�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Union of categories of Unicode characters. Files: lib/unictype/categ_or.c Depends-on: unictype/base unictype/category-test-withtable configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-or]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OR lib_SOURCES += unictype/categ_or.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-or-tests������������������������������������������0000664�0000000�0000000�00000000465�14110572173�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_or.c tests/macros.h Depends-on: unictype/category-test unictype/category-L unictype/category-N configure.ac: Makefile.am: TESTS += test-categ_or check_PROGRAMS += test-categ_or test_categ_or_SOURCES = unictype/test-categ_or.c test_categ_or_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-test����������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0022327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character belongs to a given category. Files: lib/unictype/categ_test.c lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/category-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_TEST lib_SOURCES += unictype/categ_test.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-test-withtable������������������������������������0000664�0000000�0000000�00000000347�14110572173�0024311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character belongs to a given bitmask of categories. Files: Depends-on: unictype/base unictype/category-of configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/category-test-withtable-tests������������������������������0000664�0000000�0000000�00000000476�14110572173�0025454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-categ_test_withtable.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-categ_test_withtable check_PROGRAMS += test-categ_test_withtable test_categ_test_withtable_SOURCES = unictype/test-categ_test_withtable.c test_categ_test_withtable_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class��������������������������������������������0000664�0000000�0000000�00000000633�14110572173�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine canonical combining class of a Unicode character. Files: lib/unictype/combiningclass.c lib/unictype/combiningclass.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/combining-class]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS lib_SOURCES += unictype/combiningclass.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-all����������������������������������������0000664�0000000�0000000�00000000512�14110572173�0023346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character canonical combining classes. Files: Depends-on: unictype/base unictype/combining-class unictype/combining-class-byname unictype/combining-class-longname unictype/combining-class-name configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-byname�������������������������������������0000664�0000000�0000000�00000002242�14110572173�0024053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character canonical combining class, given its name. Files: lib/unictype/combiningclass_byname.c lib/unictype/combiningclass_byname.gperf Depends-on: unictype/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/combining-class-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_BYNAME lib_SOURCES += unictype/combiningclass_byname.c endif $(srcdir)/unictype/combiningclass_byname.h: $(srcdir)/unictype/combiningclass_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/combiningclass_byname.gperf > $(srcdir)/unictype/combiningclass_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/combiningclass_byname.h-t1 > $(srcdir)/unictype/combiningclass_byname.h-t2 \ && mv $(srcdir)/unictype/combiningclass_byname.h-t2 $(srcdir)/unictype/combiningclass_byname.h BUILT_SOURCES += unictype/combiningclass_byname.h MOSTLYCLEANFILES += unictype/combiningclass_byname.h-t1 unictype/combiningclass_byname.h-t2 MAINTAINERCLEANFILES += unictype/combiningclass_byname.h EXTRA_DIST += unictype/combiningclass_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-byname-tests�������������������������������0000664�0000000�0000000�00000000504�14110572173�0025212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-combiningclass_byname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-combiningclass_byname check_PROGRAMS += test-combiningclass_byname test_combiningclass_byname_SOURCES = unictype/test-combiningclass_byname.c test_combiningclass_byname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-longname�����������������������������������0000664�0000000�0000000�00000000644�14110572173�0024404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character canonical combining class. Files: lib/unictype/combiningclass_longname.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/combining-class-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_LONGNAME lib_SOURCES += unictype/combiningclass_longname.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-longname-tests�����������������������������0000664�0000000�0000000�00000000520�14110572173�0025535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-combiningclass_longname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-combiningclass_longname check_PROGRAMS += test-combiningclass_longname test_combiningclass_longname_SOURCES = unictype/test-combiningclass_longname.c test_combiningclass_longname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-name���������������������������������������0000664�0000000�0000000�00000000624�14110572173�0023522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character canonical combining class. Files: lib/unictype/combiningclass_name.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/combining-class-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_NAME lib_SOURCES += unictype/combiningclass_name.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-name-tests���������������������������������0000664�0000000�0000000�00000000470�14110572173�0024661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-combiningclass_name.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-combiningclass_name check_PROGRAMS += test-combiningclass_name test_combiningclass_name_SOURCES = unictype/test-combiningclass_name.c test_combiningclass_name_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/combining-class-tests��������������������������������������0000664�0000000�0000000�00000000432�14110572173�0023741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-combiningclass.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-combiningclass check_PROGRAMS += test-combiningclass test_combiningclass_SOURCES = unictype/test-combiningclass.c test_combiningclass_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-alnum������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isalnum() function and the <wctype.h> iswalnum() function. Files: lib/unictype/ctype_alnum.c lib/unictype/ctype_alnum.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-alnum]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM lib_SOURCES += unictype/ctype_alnum.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-alnum-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_alnum.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_alnum check_PROGRAMS += test-ctype_alnum test_ctype_alnum_SOURCES = unictype/test-ctype_alnum.c test_ctype_alnum_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-alpha������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isalpha() function and the <wctype.h> iswalpha() function. Files: lib/unictype/ctype_alpha.c lib/unictype/ctype_alpha.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-alpha]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA lib_SOURCES += unictype/ctype_alpha.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-alpha-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_alpha.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_alpha check_PROGRAMS += test-ctype_alpha test_ctype_alpha_SOURCES = unictype/test-ctype_alpha.c test_ctype_alpha_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-blank������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isblank() function and the <wctype.h> iswblank() function. Files: lib/unictype/ctype_blank.c lib/unictype/ctype_blank.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-blank]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK lib_SOURCES += unictype/ctype_blank.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-blank-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_blank.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_blank check_PROGRAMS += test-ctype_blank test_ctype_blank_SOURCES = unictype/test-ctype_blank.c test_ctype_blank_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-cntrl������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> iscntrl() function and the <wctype.h> iswcntrl() function. Files: lib/unictype/ctype_cntrl.c lib/unictype/ctype_cntrl.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-cntrl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL lib_SOURCES += unictype/ctype_cntrl.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-cntrl-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_cntrl.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_cntrl check_PROGRAMS += test-ctype_cntrl test_ctype_cntrl_SOURCES = unictype/test-ctype_cntrl.c test_ctype_cntrl_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-digit������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isdigit() function and the <wctype.h> iswdigit() function. Files: lib/unictype/ctype_digit.c lib/unictype/ctype_digit.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT lib_SOURCES += unictype/ctype_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-digit-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_digit check_PROGRAMS += test-ctype_digit test_ctype_digit_SOURCES = unictype/test-ctype_digit.c test_ctype_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-graph������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isgraph() function and the <wctype.h> iswgraph() function. Files: lib/unictype/ctype_graph.c lib/unictype/ctype_graph.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-graph]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH lib_SOURCES += unictype/ctype_graph.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-graph-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_graph.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_graph check_PROGRAMS += test-ctype_graph test_ctype_graph_SOURCES = unictype/test-ctype_graph.c test_ctype_graph_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-lower������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> islower() function and the <wctype.h> iswlower() function. Files: lib/unictype/ctype_lower.c lib/unictype/ctype_lower.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-lower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER lib_SOURCES += unictype/ctype_lower.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-lower-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_lower.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_lower check_PROGRAMS += test-ctype_lower test_ctype_lower_SOURCES = unictype/test-ctype_lower.c test_ctype_lower_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-print������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isprint() function and the <wctype.h> iswprint() function. Files: lib/unictype/ctype_print.c lib/unictype/ctype_print.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-print]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT lib_SOURCES += unictype/ctype_print.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-print-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_print.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_print check_PROGRAMS += test-ctype_print test_ctype_print_SOURCES = unictype/test-ctype_print.c test_ctype_print_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-punct������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> ispunct() function and the <wctype.h> iswpunct() function. Files: lib/unictype/ctype_punct.c lib/unictype/ctype_punct.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-punct]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT lib_SOURCES += unictype/ctype_punct.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-punct-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_punct.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_punct check_PROGRAMS += test-ctype_punct test_ctype_punct_SOURCES = unictype/test-ctype_punct.c test_ctype_punct_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-space������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0021753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isspace() function and the <wctype.h> iswspace() function. Files: lib/unictype/ctype_space.c lib/unictype/ctype_space.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE lib_SOURCES += unictype/ctype_space.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-space-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_space.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_space check_PROGRAMS += test-ctype_space test_ctype_space_SOURCES = unictype/test-ctype_space.c test_ctype_space_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-upper������������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isupper() function and the <wctype.h> iswupper() function. Files: lib/unictype/ctype_upper.c lib/unictype/ctype_upper.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-upper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER lib_SOURCES += unictype/ctype_upper.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unictype/ctype-upper-tests������������������������������������������0000664�0000000�0000000�00000000524�14110572173�0023150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_upper.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_upper check_PROGRAMS += test-ctype_upper test_ctype_upper_SOURCES = unictype/test-ctype_upper.c test_ctype_upper_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/ctype-xdigit�����������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generalization of the <ctype.h> isxdigit() function and the <wctype.h> iswxdigit() function. Files: lib/unictype/ctype_xdigit.c lib/unictype/ctype_xdigit.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-xdigit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT lib_SOURCES += unictype/ctype_xdigit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unictype/ctype-xdigit-tests�����������������������������������������0000664�0000000�0000000�00000000532�14110572173�0023304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-ctype_xdigit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ctype_xdigit check_PROGRAMS += test-ctype_xdigit test_ctype_xdigit_SOURCES = unictype/test-ctype_xdigit.c test_ctype_xdigit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/decimal-digit����������������������������������������������0000664�0000000�0000000�00000000577�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Value of a decimal digit Unicode character. Files: lib/unictype/decdigit.c lib/unictype/decdigit.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/decimal-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_DECIMAL_DIGIT lib_SOURCES += unictype/decdigit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/decimal-digit-tests����������������������������������������0000664�0000000�0000000�00000000425�14110572173�0023367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-decdigit.c tests/unictype/test-decdigit.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-decdigit check_PROGRAMS += test-decdigit test_decdigit_SOURCES = unictype/test-decdigit.c test_decdigit_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/digit������������������������������������������������������0000664�0000000�0000000�00000000536�14110572173�0020636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Value of a digit Unicode character. Files: lib/unictype/digit.c lib/unictype/digit.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_DIGIT lib_SOURCES += unictype/digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/digit-tests������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-digit.c tests/unictype/test-digit.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-digit check_PROGRAMS += test-digit test_digit_SOURCES = unictype/test-digit.c test_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-all�������������������������������������������0000664�0000000�0000000�00000000434�14110572173�0023013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character Arabic joining groups. Files: Depends-on: unictype/base unictype/joininggroup-byname unictype/joininggroup-name unictype/joininggroup-of configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-byname����������������������������������������0000664�0000000�0000000�00000002167�14110572173�0023523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character Arabic joining group, given its name. Files: lib/unictype/joininggroup_byname.c lib/unictype/joininggroup_byname.gperf Depends-on: unictype/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joininggroup-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_BYNAME lib_SOURCES += unictype/joininggroup_byname.c endif $(srcdir)/unictype/joininggroup_byname.h: $(srcdir)/unictype/joininggroup_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/joininggroup_byname.gperf > $(srcdir)/unictype/joininggroup_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/joininggroup_byname.h-t1 > $(srcdir)/unictype/joininggroup_byname.h-t2 \ && mv $(srcdir)/unictype/joininggroup_byname.h-t2 $(srcdir)/unictype/joininggroup_byname.h BUILT_SOURCES += unictype/joininggroup_byname.h MOSTLYCLEANFILES += unictype/joininggroup_byname.h-t1 unictype/joininggroup_byname.h-t2 MAINTAINERCLEANFILES += unictype/joininggroup_byname.h EXTRA_DIST += unictype/joininggroup_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-byname-tests����������������������������������0000664�0000000�0000000�00000000470�14110572173�0024656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joininggroup_byname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joininggroup_byname check_PROGRAMS += test-joininggroup_byname test_joininggroup_byname_SOURCES = unictype/test-joininggroup_byname.c test_joininggroup_byname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-name������������������������������������������0000664�0000000�0000000�00000000646�14110572173�0023170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character Arabic joining group. Files: lib/unictype/joininggroup_name.c lib/unictype/joininggroup_name.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joininggroup-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_NAME lib_SOURCES += unictype/joininggroup_name.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-name-tests������������������������������������0000664�0000000�0000000�00000000454�14110572173�0024325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joininggroup_name.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joininggroup_name check_PROGRAMS += test-joininggroup_name test_joininggroup_name_SOURCES = unictype/test-joininggroup_name.c test_joininggroup_name_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-of��������������������������������������������0000664�0000000�0000000�00000000643�14110572173�0022651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine Arabic joining group of a Unicode character. Files: lib/unictype/joininggroup_of.c lib/unictype/joininggroup_of.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joininggroup-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_OF lib_SOURCES += unictype/joininggroup_of.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joininggroup-of-tests��������������������������������������0000664�0000000�0000000�00000000506�14110572173�0024007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joininggroup_of.c tests/unictype/test-joininggroup_of.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joininggroup_of check_PROGRAMS += test-joininggroup_of test_joininggroup_of_SOURCES = unictype/test-joininggroup_of.c test_joininggroup_of_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-all��������������������������������������������0000664�0000000�0000000�00000000466�14110572173�0022645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character Arabic joining types. Files: Depends-on: unictype/base unictype/joiningtype-byname unictype/joiningtype-longname unictype/joiningtype-name unictype/joiningtype-of configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-byname�����������������������������������������0000664�0000000�0000000�00000002144�14110572173�0023343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character Arabic joining type, given its name. Files: lib/unictype/joiningtype_byname.c lib/unictype/joiningtype_byname.gperf Depends-on: unictype/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joiningtype-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_BYNAME lib_SOURCES += unictype/joiningtype_byname.c endif $(srcdir)/unictype/joiningtype_byname.h: $(srcdir)/unictype/joiningtype_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/joiningtype_byname.gperf > $(srcdir)/unictype/joiningtype_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/joiningtype_byname.h-t1 > $(srcdir)/unictype/joiningtype_byname.h-t2 \ && mv $(srcdir)/unictype/joiningtype_byname.h-t2 $(srcdir)/unictype/joiningtype_byname.h BUILT_SOURCES += unictype/joiningtype_byname.h MOSTLYCLEANFILES += unictype/joiningtype_byname.h-t1 unictype/joiningtype_byname.h-t2 MAINTAINERCLEANFILES += unictype/joiningtype_byname.h EXTRA_DIST += unictype/joiningtype_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-byname-tests�����������������������������������0000664�0000000�0000000�00000000462�14110572173�0024504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joiningtype_byname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joiningtype_byname check_PROGRAMS += test-joiningtype_byname test_joiningtype_byname_SOURCES = unictype/test-joiningtype_byname.c test_joiningtype_byname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-longname���������������������������������������0000664�0000000�0000000�00000000620�14110572173�0023665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character Arabic joining type. Files: lib/unictype/joiningtype_longname.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joiningtype-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_LONGNAME lib_SOURCES += unictype/joiningtype_longname.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-longname-tests���������������������������������0000664�0000000�0000000�00000000476�14110572173�0025036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joiningtype_longname.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joiningtype_longname check_PROGRAMS += test-joiningtype_longname test_joiningtype_longname_SOURCES = unictype/test-joiningtype_longname.c test_joiningtype_longname_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-name�������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0023003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character Arabic joining type. Files: lib/unictype/joiningtype_name.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joiningtype-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_NAME lib_SOURCES += unictype/joiningtype_name.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-name-tests�������������������������������������0000664�0000000�0000000�00000000446�14110572173�0024153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joiningtype_name.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joiningtype_name check_PROGRAMS += test-joiningtype_name test_joiningtype_name_SOURCES = unictype/test-joiningtype_name.c test_joiningtype_name_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-of���������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0022501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine Arabic joining type of a Unicode character. Files: lib/unictype/joiningtype_of.c lib/unictype/joiningtype_of.h Depends-on: unictype/base unictype/category-test-withtable configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/joiningtype-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_OF lib_SOURCES += unictype/joiningtype_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/joiningtype-of-tests���������������������������������������0000664�0000000�0000000�00000000477�14110572173�0023643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-joiningtype_of.c tests/unictype/test-joiningtype_of.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-joiningtype_of check_PROGRAMS += test-joiningtype_of test_joiningtype_of_SOURCES = unictype/test-joiningtype_of.c test_joiningtype_of_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/mirror�����������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Mirrored Unicode characters. Files: lib/unictype/mirror.c lib/unictype/mirror.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/mirror]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_MIRROR lib_SOURCES += unictype/mirror.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/mirror-tests�����������������������������������������������0000664�0000000�0000000�00000000352�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-mirror.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-mirror check_PROGRAMS += test-mirror test_mirror_SOURCES = unictype/test-mirror.c test_mirror_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/numeric����������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0021176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Value of a numeric Unicode character. Files: lib/unictype/numeric.c lib/unictype/numeric.h Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/numeric]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_NUMERIC lib_SOURCES += unictype/numeric.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/numeric-tests����������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0022335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-numeric.c tests/unictype/test-numeric.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-numeric check_PROGRAMS += test-numeric test_numeric_SOURCES = unictype/test-numeric.c test_numeric_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-all�����������������������������������������������0000664�0000000�0000000�00000006121�14110572173�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for Unicode character properties. Files: Depends-on: unictype/property-alphabetic unictype/property-ascii-hex-digit unictype/property-bidi-arabic-digit unictype/property-bidi-arabic-right-to-left unictype/property-bidi-block-separator unictype/property-bidi-boundary-neutral unictype/property-bidi-common-separator unictype/property-bidi-control unictype/property-bidi-embedding-or-override unictype/property-bidi-eur-num-separator unictype/property-bidi-eur-num-terminator unictype/property-bidi-european-digit unictype/property-bidi-hebrew-right-to-left unictype/property-bidi-left-to-right unictype/property-bidi-non-spacing-mark unictype/property-bidi-other-neutral unictype/property-bidi-pdf unictype/property-bidi-segment-separator unictype/property-bidi-whitespace unictype/property-byname unictype/property-case-ignorable unictype/property-cased unictype/property-changes-when-casefolded unictype/property-changes-when-casemapped unictype/property-changes-when-lowercased unictype/property-changes-when-titlecased unictype/property-changes-when-uppercased unictype/property-combining unictype/property-composite unictype/property-currency-symbol unictype/property-dash unictype/property-decimal-digit unictype/property-default-ignorable-code-point unictype/property-deprecated unictype/property-diacritic unictype/property-extender unictype/property-format-control unictype/property-grapheme-base unictype/property-grapheme-extend unictype/property-grapheme-link unictype/property-hex-digit unictype/property-hyphen unictype/property-id-continue unictype/property-id-start unictype/property-ideographic unictype/property-ids-binary-operator unictype/property-ids-trinary-operator unictype/property-ignorable-control unictype/property-iso-control unictype/property-join-control unictype/property-left-of-pair unictype/property-line-separator unictype/property-logical-order-exception unictype/property-lowercase unictype/property-math unictype/property-non-break unictype/property-not-a-character unictype/property-numeric unictype/property-other-alphabetic unictype/property-other-default-ignorable-code-point unictype/property-other-grapheme-extend unictype/property-other-id-continue unictype/property-other-id-start unictype/property-other-lowercase unictype/property-other-math unictype/property-other-uppercase unictype/property-paired-punctuation unictype/property-paragraph-separator unictype/property-pattern-syntax unictype/property-pattern-white-space unictype/property-private-use unictype/property-punctuation unictype/property-quotation-mark unictype/property-radical unictype/property-sentence-terminal unictype/property-soft-dotted unictype/property-space unictype/property-terminal-punctuation unictype/property-test unictype/property-titlecase unictype/property-unassigned-code-value unictype/property-unified-ideograph unictype/property-uppercase unictype/property-variation-selector unictype/property-white-space unictype/property-xid-continue unictype/property-xid-start unictype/property-zero-width configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-alphabetic����������������������������������������0000664�0000000�0000000�00000000720�14110572173�0023507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "alphabetic". Files: lib/unictype/pr_alphabetic.c lib/unictype/pr_alphabetic.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-alphabetic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ALPHABETIC lib_SOURCES += unictype/pr_alphabetic.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-alphabetic-tests����������������������������������0000664�0000000�0000000�00000000540�14110572173�0024647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_alphabetic.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_alphabetic check_PROGRAMS += test-pr_alphabetic test_pr_alphabetic_SOURCES = unictype/test-pr_alphabetic.c test_pr_alphabetic_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ascii-hex-digit�����������������������������������0000664�0000000�0000000�00000000756�14110572173�0024374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "ascii hex digit". Files: lib/unictype/pr_ascii_hex_digit.c lib/unictype/pr_ascii_hex_digit.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-ascii-hex-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT lib_SOURCES += unictype/pr_ascii_hex_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/property-ascii-hex-digit-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_ascii_hex_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_ascii_hex_digit check_PROGRAMS += test-pr_ascii_hex_digit test_pr_ascii_hex_digit_SOURCES = unictype/test-pr_ascii_hex_digit.c test_pr_ascii_hex_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-arabic-digit���������������������������������0000664�0000000�0000000�00000001020�14110572173�0024631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi arabic digit". Files: lib/unictype/pr_bidi_arabic_digit.c lib/unictype/pr_bidi_arabic_digit.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-arabic-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT lib_SOURCES += unictype/pr_bidi_arabic_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-arabic-digit-tests���������������������������0000664�0000000�0000000�00000000612�14110572173�0025777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_arabic_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_arabic_digit check_PROGRAMS += test-pr_bidi_arabic_digit test_pr_bidi_arabic_digit_SOURCES = unictype/test-pr_bidi_arabic_digit.c test_pr_bidi_arabic_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-arabic-right-to-left�������������������������0000664�0000000�0000000�00000001100�14110572173�0026215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi arabic right to left". Files: lib/unictype/pr_bidi_arabic_right_to_left.c lib/unictype/pr_bidi_arabic_right_to_left.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-arabic-right-to-left]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT lib_SOURCES += unictype/pr_bidi_arabic_right_to_left.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-arabic-right-to-left-tests�������������������0000664�0000000�0000000�00000000672�14110572173�0027372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_arabic_right_to_left.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_arabic_right_to_left check_PROGRAMS += test-pr_bidi_arabic_right_to_left test_pr_bidi_arabic_right_to_left_SOURCES = unictype/test-pr_bidi_arabic_right_to_left.c test_pr_bidi_arabic_right_to_left_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-block-separator������������������������������0000664�0000000�0000000�00000001042�14110572173�0025406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi block separator". Files: lib/unictype/pr_bidi_block_separator.c lib/unictype/pr_bidi_block_separator.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-block-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR lib_SOURCES += unictype/pr_bidi_block_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-block-separator-tests������������������������0000664�0000000�0000000�00000000634�14110572173�0026554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_block_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_block_separator check_PROGRAMS += test-pr_bidi_block_separator test_pr_bidi_block_separator_SOURCES = unictype/test-pr_bidi_block_separator.c test_pr_bidi_block_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-boundary-neutral�����������������������������0000664�0000000�0000000�00000001050�14110572173�0025610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi boundary neutral". Files: lib/unictype/pr_bidi_boundary_neutral.c lib/unictype/pr_bidi_boundary_neutral.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-boundary-neutral]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL lib_SOURCES += unictype/pr_bidi_boundary_neutral.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-boundary-neutral-tests�����������������������0000664�0000000�0000000�00000000642�14110572173�0026756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_boundary_neutral.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_boundary_neutral check_PROGRAMS += test-pr_bidi_boundary_neutral test_pr_bidi_boundary_neutral_SOURCES = unictype/test-pr_bidi_boundary_neutral.c test_pr_bidi_boundary_neutral_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-common-separator�����������������������������0000664�0000000�0000000�00000001050�14110572173�0025603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi common separator". Files: lib/unictype/pr_bidi_common_separator.c lib/unictype/pr_bidi_common_separator.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-common-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR lib_SOURCES += unictype/pr_bidi_common_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-common-separator-tests�����������������������0000664�0000000�0000000�00000000642�14110572173�0026751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_common_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_common_separator check_PROGRAMS += test-pr_bidi_common_separator test_pr_bidi_common_separator_SOURCES = unictype/test-pr_bidi_common_separator.c test_pr_bidi_common_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-control��������������������������������������0000664�0000000�0000000�00000000762�14110572173�0024006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi control". Files: lib/unictype/pr_bidi_control.c lib/unictype/pr_bidi_control.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-control]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_CONTROL lib_SOURCES += unictype/pr_bidi_control.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������gnulib-20210822~d383792/modules/unictype/property-bidi-control-tests��������������������������������0000664�0000000�0000000�00000000554�14110572173�0025145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_control.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_control check_PROGRAMS += test-pr_bidi_control test_pr_bidi_control_SOURCES = unictype/test-pr_bidi_control.c test_pr_bidi_control_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-embedding-or-override������������������������0000664�0000000�0000000�00000001106�14110572173�0026470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi embedding or override". Files: lib/unictype/pr_bidi_embedding_or_override.c lib/unictype/pr_bidi_embedding_or_override.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-embedding-or-override]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE lib_SOURCES += unictype/pr_bidi_embedding_or_override.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-embedding-or-override-tests������������������0000664�0000000�0000000�00000000700�14110572173�0027627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_embedding_or_override.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_embedding_or_override check_PROGRAMS += test-pr_bidi_embedding_or_override test_pr_bidi_embedding_or_override_SOURCES = unictype/test-pr_bidi_embedding_or_override.c test_pr_bidi_embedding_or_override_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-eur-num-separator����������������������������0000664�0000000�0000000�00000001056�14110572173�0025711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi eur num separator". Files: lib/unictype/pr_bidi_eur_num_separator.c lib/unictype/pr_bidi_eur_num_separator.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-eur-num-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR lib_SOURCES += unictype/pr_bidi_eur_num_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-eur-num-separator-tests����������������������0000664�0000000�0000000�00000000650�14110572173�0027050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_eur_num_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_eur_num_separator check_PROGRAMS += test-pr_bidi_eur_num_separator test_pr_bidi_eur_num_separator_SOURCES = unictype/test-pr_bidi_eur_num_separator.c test_pr_bidi_eur_num_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-eur-num-terminator���������������������������0000664�0000000�0000000�00000001064�14110572173�0026074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi eur num terminator". Files: lib/unictype/pr_bidi_eur_num_terminator.c lib/unictype/pr_bidi_eur_num_terminator.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-eur-num-terminator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR lib_SOURCES += unictype/pr_bidi_eur_num_terminator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-eur-num-terminator-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_eur_num_terminator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_eur_num_terminator check_PROGRAMS += test-pr_bidi_eur_num_terminator test_pr_bidi_eur_num_terminator_SOURCES = unictype/test-pr_bidi_eur_num_terminator.c test_pr_bidi_eur_num_terminator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-european-digit�������������������������������0000664�0000000�0000000�00000001034�14110572173�0025233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi european digit". Files: lib/unictype/pr_bidi_european_digit.c lib/unictype/pr_bidi_european_digit.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-european-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT lib_SOURCES += unictype/pr_bidi_european_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-european-digit-tests�������������������������0000664�0000000�0000000�00000000626�14110572173�0026401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_european_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_european_digit check_PROGRAMS += test-pr_bidi_european_digit test_pr_bidi_european_digit_SOURCES = unictype/test-pr_bidi_european_digit.c test_pr_bidi_european_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-hebrew-right-to-left�������������������������0000664�0000000�0000000�00000001100�14110572173�0026250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi hebrew right to left". Files: lib/unictype/pr_bidi_hebrew_right_to_left.c lib/unictype/pr_bidi_hebrew_right_to_left.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-hebrew-right-to-left]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT lib_SOURCES += unictype/pr_bidi_hebrew_right_to_left.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-hebrew-right-to-left-tests�������������������0000664�0000000�0000000�00000000672�14110572173�0027425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_hebrew_right_to_left.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_hebrew_right_to_left check_PROGRAMS += test-pr_bidi_hebrew_right_to_left test_pr_bidi_hebrew_right_to_left_SOURCES = unictype/test-pr_bidi_hebrew_right_to_left.c test_pr_bidi_hebrew_right_to_left_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-left-to-right��������������������������������0000664�0000000�0000000�00000001026�14110572173�0025005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi left to right". Files: lib/unictype/pr_bidi_left_to_right.c lib/unictype/pr_bidi_left_to_right.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-left-to-right]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT lib_SOURCES += unictype/pr_bidi_left_to_right.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-left-to-right-tests��������������������������0000664�0000000�0000000�00000000620�14110572173�0026144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_left_to_right.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_left_to_right check_PROGRAMS += test-pr_bidi_left_to_right test_pr_bidi_left_to_right_SOURCES = unictype/test-pr_bidi_left_to_right.c test_pr_bidi_left_to_right_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-non-spacing-mark�����������������������������0000664�0000000�0000000�00000001050�14110572173�0025461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi non spacing mark". Files: lib/unictype/pr_bidi_non_spacing_mark.c lib/unictype/pr_bidi_non_spacing_mark.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-non-spacing-mark]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK lib_SOURCES += unictype/pr_bidi_non_spacing_mark.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-non-spacing-mark-tests�����������������������0000664�0000000�0000000�00000000642�14110572173�0026627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_non_spacing_mark.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_non_spacing_mark check_PROGRAMS += test-pr_bidi_non_spacing_mark test_pr_bidi_non_spacing_mark_SOURCES = unictype/test-pr_bidi_non_spacing_mark.c test_pr_bidi_non_spacing_mark_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-other-neutral��������������������������������0000664�0000000�0000000�00000001026�14110572173�0025111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi other neutral". Files: lib/unictype/pr_bidi_other_neutral.c lib/unictype/pr_bidi_other_neutral.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-other-neutral]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL lib_SOURCES += unictype/pr_bidi_other_neutral.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-other-neutral-tests��������������������������0000664�0000000�0000000�00000000620�14110572173�0026250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_other_neutral.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_other_neutral check_PROGRAMS += test-pr_bidi_other_neutral test_pr_bidi_other_neutral_SOURCES = unictype/test-pr_bidi_other_neutral.c test_pr_bidi_other_neutral_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-pdf������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0023074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi pdf". Files: lib/unictype/pr_bidi_pdf.c lib/unictype/pr_bidi_pdf.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-pdf]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_PDF lib_SOURCES += unictype/pr_bidi_pdf.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-pdf-tests������������������������������������0000664�0000000�0000000�00000000524�14110572173�0024233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_pdf.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_pdf check_PROGRAMS += test-pr_bidi_pdf test_pr_bidi_pdf_SOURCES = unictype/test-pr_bidi_pdf.c test_pr_bidi_pdf_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-segment-separator����������������������������0000664�0000000�0000000�00000001056�14110572173�0025763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi segment separator". Files: lib/unictype/pr_bidi_segment_separator.c lib/unictype/pr_bidi_segment_separator.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-segment-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR lib_SOURCES += unictype/pr_bidi_segment_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-segment-separator-tests����������������������0000664�0000000�0000000�00000000650�14110572173�0027122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_segment_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_segment_separator check_PROGRAMS += test-pr_bidi_segment_separator test_pr_bidi_segment_separator_SOURCES = unictype/test-pr_bidi_segment_separator.c test_pr_bidi_segment_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-whitespace�����������������������������������0000664�0000000�0000000�00000001004�14110572173�0024450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "bidi whitespace". Files: lib/unictype/pr_bidi_whitespace.c lib/unictype/pr_bidi_whitespace.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/bidiclass-of configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-bidi-whitespace]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BIDI_WHITESPACE lib_SOURCES += unictype/pr_bidi_whitespace.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-bidi-whitespace-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_bidi_whitespace.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_bidi_whitespace check_PROGRAMS += test-pr_bidi_whitespace test_pr_bidi_whitespace_SOURCES = unictype/test-pr_bidi_whitespace.c test_pr_bidi_whitespace_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-byname��������������������������������������������0000664�0000000�0000000�00000007462�14110572173�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character property, given its name. Files: lib/unictype/pr_byname.c lib/unictype/pr_byname.gperf Depends-on: unictype/base unictype/property-alphabetic unictype/property-ascii-hex-digit unictype/property-bidi-arabic-digit unictype/property-bidi-arabic-right-to-left unictype/property-bidi-block-separator unictype/property-bidi-boundary-neutral unictype/property-bidi-common-separator unictype/property-bidi-control unictype/property-bidi-embedding-or-override unictype/property-bidi-eur-num-separator unictype/property-bidi-eur-num-terminator unictype/property-bidi-european-digit unictype/property-bidi-hebrew-right-to-left unictype/property-bidi-left-to-right unictype/property-bidi-non-spacing-mark unictype/property-bidi-other-neutral unictype/property-bidi-pdf unictype/property-bidi-segment-separator unictype/property-bidi-whitespace unictype/property-case-ignorable unictype/property-cased unictype/property-changes-when-casefolded unictype/property-changes-when-casemapped unictype/property-changes-when-lowercased unictype/property-changes-when-titlecased unictype/property-changes-when-uppercased unictype/property-combining unictype/property-composite unictype/property-currency-symbol unictype/property-dash unictype/property-decimal-digit unictype/property-default-ignorable-code-point unictype/property-deprecated unictype/property-diacritic unictype/property-extender unictype/property-format-control unictype/property-grapheme-base unictype/property-grapheme-extend unictype/property-grapheme-link unictype/property-hex-digit unictype/property-hyphen unictype/property-id-continue unictype/property-id-start unictype/property-ideographic unictype/property-ids-binary-operator unictype/property-ids-trinary-operator unictype/property-ignorable-control unictype/property-iso-control unictype/property-join-control unictype/property-left-of-pair unictype/property-line-separator unictype/property-logical-order-exception unictype/property-lowercase unictype/property-math unictype/property-non-break unictype/property-not-a-character unictype/property-numeric unictype/property-other-alphabetic unictype/property-other-default-ignorable-code-point unictype/property-other-grapheme-extend unictype/property-other-id-continue unictype/property-other-id-start unictype/property-other-lowercase unictype/property-other-math unictype/property-other-uppercase unictype/property-paired-punctuation unictype/property-paragraph-separator unictype/property-pattern-syntax unictype/property-pattern-white-space unictype/property-private-use unictype/property-punctuation unictype/property-quotation-mark unictype/property-radical unictype/property-sentence-terminal unictype/property-soft-dotted unictype/property-space unictype/property-terminal-punctuation unictype/property-titlecase unictype/property-unassigned-code-value unictype/property-unified-ideograph unictype/property-uppercase unictype/property-variation-selector unictype/property-white-space unictype/property-xid-continue unictype/property-xid-start unictype/property-zero-width gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BYNAME lib_SOURCES += unictype/pr_byname.c endif $(srcdir)/unictype/pr_byname.h: $(srcdir)/unictype/pr_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/pr_byname.gperf > $(srcdir)/unictype/pr_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/pr_byname.h-t1 > $(srcdir)/unictype/pr_byname.h-t2 \ && mv $(srcdir)/unictype/pr_byname.h-t2 $(srcdir)/unictype/pr_byname.h BUILT_SOURCES += unictype/pr_byname.h MOSTLYCLEANFILES += unictype/pr_byname.h-t1 unictype/pr_byname.h-t2 MAINTAINERCLEANFILES += unictype/pr_byname.h EXTRA_DIST += unictype/pr_byname.h Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-byname-tests��������������������������������������0000664�0000000�0000000�00000000457�14110572173�0024035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_byname.c tests/macros.h Depends-on: unictype/property-test unictype/property-composite configure.ac: Makefile.am: TESTS += test-pr_byname check_PROGRAMS += test-pr_byname test_pr_byname_SOURCES = unictype/test-pr_byname.c test_pr_byname_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-case-ignorable������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "case ignorable". Files: lib/unictype/pr_case_ignorable.c lib/unictype/pr_case_ignorable.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-case-ignorable]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CASE_IGNORABLE lib_SOURCES += unictype/pr_case_ignorable.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-case-ignorable-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_case_ignorable.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_case_ignorable check_PROGRAMS += test-pr_case_ignorable test_pr_case_ignorable_SOURCES = unictype/test-pr_case_ignorable.c test_pr_case_ignorable_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-cased���������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "cased". Files: lib/unictype/pr_cased.c lib/unictype/pr_cased.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-cased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CASED lib_SOURCES += unictype/pr_cased.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-cased-tests���������������������������������������0000664�0000000�0000000�00000000502�14110572173�0023630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_cased.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_cased check_PROGRAMS += test-pr_cased test_pr_cased_SOURCES = unictype/test-pr_cased.c test_pr_cased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-casefolded���������������������������0000664�0000000�0000000�00000001031�14110572173�0026045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character changes when casefolded. Files: lib/unictype/pr_changes_when_casefolded.c lib/unictype/pr_changes_when_casefolded.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-changes-when-casefolded]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED lib_SOURCES += unictype/pr_changes_when_casefolded.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-casefolded-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_changes_when_casefolded.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_changes_when_casefolded check_PROGRAMS += test-pr_changes_when_casefolded test_pr_changes_when_casefolded_SOURCES = unictype/test-pr_changes_when_casefolded.c test_pr_changes_when_casefolded_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-casemapped���������������������������0000664�0000000�0000000�00000001031�14110572173�0026056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character changes when casemapped. Files: lib/unictype/pr_changes_when_casemapped.c lib/unictype/pr_changes_when_casemapped.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-changes-when-casemapped]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED lib_SOURCES += unictype/pr_changes_when_casemapped.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-casemapped-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_changes_when_casemapped.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_changes_when_casemapped check_PROGRAMS += test-pr_changes_when_casemapped test_pr_changes_when_casemapped_SOURCES = unictype/test-pr_changes_when_casemapped.c test_pr_changes_when_casemapped_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-lowercased���������������������������0000664�0000000�0000000�00000001031�14110572173�0026104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character changes when lowercased. Files: lib/unictype/pr_changes_when_lowercased.c lib/unictype/pr_changes_when_lowercased.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-changes-when-lowercased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED lib_SOURCES += unictype/pr_changes_when_lowercased.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-lowercased-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_changes_when_lowercased.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_changes_when_lowercased check_PROGRAMS += test-pr_changes_when_lowercased test_pr_changes_when_lowercased_SOURCES = unictype/test-pr_changes_when_lowercased.c test_pr_changes_when_lowercased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-titlecased���������������������������0000664�0000000�0000000�00000001031�14110572173�0026075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character changes when titlecased. Files: lib/unictype/pr_changes_when_titlecased.c lib/unictype/pr_changes_when_titlecased.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-changes-when-titlecased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED lib_SOURCES += unictype/pr_changes_when_titlecased.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-titlecased-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_changes_when_titlecased.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_changes_when_titlecased check_PROGRAMS += test-pr_changes_when_titlecased test_pr_changes_when_titlecased_SOURCES = unictype/test-pr_changes_when_titlecased.c test_pr_changes_when_titlecased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-uppercased���������������������������0000664�0000000�0000000�00000001031�14110572173�0026107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character changes when uppercased. Files: lib/unictype/pr_changes_when_uppercased.c lib/unictype/pr_changes_when_uppercased.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-changes-when-uppercased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED lib_SOURCES += unictype/pr_changes_when_uppercased.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-changes-when-uppercased-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_changes_when_uppercased.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_changes_when_uppercased check_PROGRAMS += test-pr_changes_when_uppercased test_pr_changes_when_uppercased_SOURCES = unictype/test-pr_changes_when_uppercased.c test_pr_changes_when_uppercased_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-combining�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "combining". Files: lib/unictype/pr_combining.c lib/unictype/pr_combining.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-combining]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_COMBINING lib_SOURCES += unictype/pr_combining.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-combining-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_combining.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_combining check_PROGRAMS += test-pr_combining test_pr_combining_SOURCES = unictype/test-pr_combining.c test_pr_combining_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-composite�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "composite". Files: lib/unictype/pr_composite.c lib/unictype/pr_composite.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-composite]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_COMPOSITE lib_SOURCES += unictype/pr_composite.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-composite-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_composite.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_composite check_PROGRAMS += test-pr_composite test_pr_composite_SOURCES = unictype/test-pr_composite.c test_pr_composite_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-currency-symbol�����������������������������������0000664�0000000�0000000�00000001032�14110572173�0024545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "currency symbol". Files: lib/unictype/pr_currency_symbol.c lib/unictype/pr_currency_symbol.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-Sc configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-currency-symbol]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CURRENCY_SYMBOL lib_SOURCES += unictype/pr_currency_symbol.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-currency-symbol-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_currency_symbol.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_currency_symbol check_PROGRAMS += test-pr_currency_symbol test_pr_currency_symbol_SOURCES = unictype/test-pr_currency_symbol.c test_pr_currency_symbol_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-dash����������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "dash". Files: lib/unictype/pr_dash.c lib/unictype/pr_dash.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-dash]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DASH lib_SOURCES += unictype/pr_dash.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-dash-tests����������������������������������������0000664�0000000�0000000�00000000474�14110572173�0023500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_dash.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_dash check_PROGRAMS += test-pr_dash test_pr_dash_SOURCES = unictype/test-pr_dash.c test_pr_dash_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-decimal-digit�������������������������������������0000664�0000000�0000000�00000001016�14110572173�0024106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "decimal digit". Files: lib/unictype/pr_decimal_digit.c lib/unictype/pr_decimal_digit.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-Nd configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-decimal-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DECIMAL_DIGIT lib_SOURCES += unictype/pr_decimal_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-decimal-digit-tests�������������������������������0000664�0000000�0000000�00000000562�14110572173�0025253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_decimal_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_decimal_digit check_PROGRAMS += test-pr_decimal_digit test_pr_decimal_digit_SOURCES = unictype/test-pr_decimal_digit.c test_pr_decimal_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-default-ignorable-code-point����������������������0000664�0000000�0000000�00000001074�14110572173�0027041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "default ignorable code point". Files: lib/unictype/pr_default_ignorable_code_point.c lib/unictype/pr_default_ignorable_code_point.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-default-ignorable-code-point]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT lib_SOURCES += unictype/pr_default_ignorable_code_point.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-default-ignorable-code-point-tests����������������0000664�0000000�0000000�00000000714�14110572173�0030201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_default_ignorable_code_point.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_default_ignorable_code_point check_PROGRAMS += test-pr_default_ignorable_code_point test_pr_default_ignorable_code_point_SOURCES = unictype/test-pr_default_ignorable_code_point.c test_pr_default_ignorable_code_point_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-deprecated����������������������������������������0000664�0000000�0000000�00000000720�14110572173�0023513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "deprecated". Files: lib/unictype/pr_deprecated.c lib/unictype/pr_deprecated.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-deprecated]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DEPRECATED lib_SOURCES += unictype/pr_deprecated.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-deprecated-tests����������������������������������0000664�0000000�0000000�00000000540�14110572173�0024653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_deprecated.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_deprecated check_PROGRAMS += test-pr_deprecated test_pr_deprecated_SOURCES = unictype/test-pr_deprecated.c test_pr_deprecated_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-diacritic�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "diacritic". Files: lib/unictype/pr_diacritic.c lib/unictype/pr_diacritic.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-diacritic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DIACRITIC lib_SOURCES += unictype/pr_diacritic.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-diacritic-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_diacritic.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_diacritic check_PROGRAMS += test-pr_diacritic test_pr_diacritic_SOURCES = unictype/test-pr_diacritic.c test_pr_diacritic_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-extender������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "extender". Files: lib/unictype/pr_extender.c lib/unictype/pr_extender.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-extender]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_EXTENDER lib_SOURCES += unictype/pr_extender.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-extender-tests������������������������������������0000664�0000000�0000000�00000000524�14110572173�0024373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_extender.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_extender check_PROGRAMS += test-pr_extender test_pr_extender_SOURCES = unictype/test-pr_extender.c test_pr_extender_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-format-control������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "format control". Files: lib/unictype/pr_format_control.c lib/unictype/pr_format_control.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-format-control]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_FORMAT_CONTROL lib_SOURCES += unictype/pr_format_control.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-format-control-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_format_control.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_format_control check_PROGRAMS += test-pr_format_control test_pr_format_control_SOURCES = unictype/test-pr_format_control.c test_pr_format_control_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-base�������������������������������������0000664�0000000�0000000�00000000742�14110572173�0024117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "grapheme base". Files: lib/unictype/pr_grapheme_base.c lib/unictype/pr_grapheme_base.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-grapheme-base]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_GRAPHEME_BASE lib_SOURCES += unictype/pr_grapheme_base.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-base-tests�������������������������������0000664�0000000�0000000�00000000562�14110572173�0025257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_grapheme_base.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_grapheme_base check_PROGRAMS += test-pr_grapheme_base test_pr_grapheme_base_SOURCES = unictype/test-pr_grapheme_base.c test_pr_grapheme_base_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-extend�����������������������������������0000664�0000000�0000000�00000000756�14110572173�0024501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "grapheme extend". Files: lib/unictype/pr_grapheme_extend.c lib/unictype/pr_grapheme_extend.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-grapheme-extend]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_GRAPHEME_EXTEND lib_SOURCES += unictype/pr_grapheme_extend.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-extend-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_grapheme_extend.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_grapheme_extend check_PROGRAMS += test-pr_grapheme_extend test_pr_grapheme_extend_SOURCES = unictype/test-pr_grapheme_extend.c test_pr_grapheme_extend_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-link�������������������������������������0000664�0000000�0000000�00000000742�14110572173�0024142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "grapheme link". Files: lib/unictype/pr_grapheme_link.c lib/unictype/pr_grapheme_link.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-grapheme-link]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_GRAPHEME_LINK lib_SOURCES += unictype/pr_grapheme_link.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������gnulib-20210822~d383792/modules/unictype/property-grapheme-link-tests�������������������������������0000664�0000000�0000000�00000000562�14110572173�0025302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_grapheme_link.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_grapheme_link check_PROGRAMS += test-pr_grapheme_link test_pr_grapheme_link_SOURCES = unictype/test-pr_grapheme_link.c test_pr_grapheme_link_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-hex-digit�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "hex digit". Files: lib/unictype/pr_hex_digit.c lib/unictype/pr_hex_digit.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-hex-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_HEX_DIGIT lib_SOURCES += unictype/pr_hex_digit.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-hex-digit-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_hex_digit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_hex_digit check_PROGRAMS += test-pr_hex_digit test_pr_hex_digit_SOURCES = unictype/test-pr_hex_digit.c test_pr_hex_digit_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-hyphen��������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "hyphen". Files: lib/unictype/pr_hyphen.c lib/unictype/pr_hyphen.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-hyphen]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_HYPHEN lib_SOURCES += unictype/pr_hyphen.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-hyphen-tests��������������������������������������0000664�0000000�0000000�00000000510�14110572173�0024043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_hyphen.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_hyphen check_PROGRAMS += test-pr_hyphen test_pr_hyphen_SOURCES = unictype/test-pr_hyphen.c test_pr_hyphen_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-id-continue���������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "id continue". Files: lib/unictype/pr_id_continue.c lib/unictype/pr_id_continue.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-id-continue]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ID_CONTINUE lib_SOURCES += unictype/pr_id_continue.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unictype/property-id-continue-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0024777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_id_continue.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_id_continue check_PROGRAMS += test-pr_id_continue test_pr_id_continue_SOURCES = unictype/test-pr_id_continue.c test_pr_id_continue_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-id-start������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0023144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "id start". Files: lib/unictype/pr_id_start.c lib/unictype/pr_id_start.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-id-start]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ID_START lib_SOURCES += unictype/pr_id_start.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-id-start-tests������������������������������������0000664�0000000�0000000�00000000524�14110572173�0024304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_id_start.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_id_start check_PROGRAMS += test-pr_id_start test_pr_id_start_SOURCES = unictype/test-pr_id_start.c test_pr_id_start_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ideographic���������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "ideographic". Files: lib/unictype/pr_ideographic.c lib/unictype/pr_ideographic.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-ideographic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_IDEOGRAPHIC lib_SOURCES += unictype/pr_ideographic.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ideographic-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0025037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_ideographic.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_ideographic check_PROGRAMS += test-pr_ideographic test_pr_ideographic_SOURCES = unictype/test-pr_ideographic.c test_pr_ideographic_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ids-binary-operator�������������������������������0000664�0000000�0000000�00000001006�14110572173�0025303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "ids binary operator". Files: lib/unictype/pr_ids_binary_operator.c lib/unictype/pr_ids_binary_operator.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-ids-binary-operator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR lib_SOURCES += unictype/pr_ids_binary_operator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ids-binary-operator-tests�������������������������0000664�0000000�0000000�00000000626�14110572173�0026452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_ids_binary_operator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_ids_binary_operator check_PROGRAMS += test-pr_ids_binary_operator test_pr_ids_binary_operator_SOURCES = unictype/test-pr_ids_binary_operator.c test_pr_ids_binary_operator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ids-trinary-operator������������������������������0000664�0000000�0000000�00000001014�14110572173�0025506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "ids trinary operator". Files: lib/unictype/pr_ids_trinary_operator.c lib/unictype/pr_ids_trinary_operator.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-ids-trinary-operator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR lib_SOURCES += unictype/pr_ids_trinary_operator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ids-trinary-operator-tests������������������������0000664�0000000�0000000�00000000634�14110572173�0026655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_ids_trinary_operator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_ids_trinary_operator check_PROGRAMS += test-pr_ids_trinary_operator test_pr_ids_trinary_operator_SOURCES = unictype/test-pr_ids_trinary_operator.c test_pr_ids_trinary_operator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-ignorable-control���������������������������������0000664�0000000�0000000�00000000772�14110572173�0025042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "ignorable control". Files: lib/unictype/pr_ignorable_control.c lib/unictype/pr_ignorable_control.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-ignorable-control]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_IGNORABLE_CONTROL lib_SOURCES += unictype/pr_ignorable_control.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������gnulib-20210822~d383792/modules/unictype/property-ignorable-control-tests���������������������������0000664�0000000�0000000�00000000612�14110572173�0026173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_ignorable_control.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_ignorable_control check_PROGRAMS += test-pr_ignorable_control test_pr_ignorable_control_SOURCES = unictype/test-pr_ignorable_control.c test_pr_ignorable_control_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-iso-control���������������������������������������0000664�0000000�0000000�00000001002�14110572173�0023655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "iso control". Files: lib/unictype/pr_iso_control.c lib/unictype/pr_iso_control.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-Cc configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-iso-control]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ISO_CONTROL lib_SOURCES += unictype/pr_iso_control.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-iso-control-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0025031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_iso_control.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_iso_control check_PROGRAMS += test-pr_iso_control test_pr_iso_control_SOURCES = unictype/test-pr_iso_control.c test_pr_iso_control_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-join-control��������������������������������������0000664�0000000�0000000�00000000734�14110572173�0024035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "join control". Files: lib/unictype/pr_join_control.c lib/unictype/pr_join_control.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-join-control]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_JOIN_CONTROL lib_SOURCES += unictype/pr_join_control.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������gnulib-20210822~d383792/modules/unictype/property-join-control-tests��������������������������������0000664�0000000�0000000�00000000554�14110572173�0025175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_join_control.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_join_control check_PROGRAMS += test-pr_join_control test_pr_join_control_SOURCES = unictype/test-pr_join_control.c test_pr_join_control_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-left-of-pair��������������������������������������0000664�0000000�0000000�00000000734�14110572173�0023705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "left of pair". Files: lib/unictype/pr_left_of_pair.c lib/unictype/pr_left_of_pair.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-left-of-pair]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_LEFT_OF_PAIR lib_SOURCES += unictype/pr_left_of_pair.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������gnulib-20210822~d383792/modules/unictype/property-left-of-pair-tests��������������������������������0000664�0000000�0000000�00000000554�14110572173�0025045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_left_of_pair.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_left_of_pair check_PROGRAMS += test-pr_left_of_pair test_pr_left_of_pair_SOURCES = unictype/test-pr_left_of_pair.c test_pr_left_of_pair_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-line-separator������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "line separator". Files: lib/unictype/pr_line_separator.c lib/unictype/pr_line_separator.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-line-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_LINE_SEPARATOR lib_SOURCES += unictype/pr_line_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-line-separator-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_line_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_line_separator check_PROGRAMS += test-pr_line_separator test_pr_line_separator_SOURCES = unictype/test-pr_line_separator.c test_pr_line_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-logical-order-exception���������������������������0000664�0000000�0000000�00000001036�14110572173�0026133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "logical order exception". Files: lib/unictype/pr_logical_order_exception.c lib/unictype/pr_logical_order_exception.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-logical-order-exception]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION lib_SOURCES += unictype/pr_logical_order_exception.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-logical-order-exception-tests���������������������0000664�0000000�0000000�00000000656�14110572173�0027302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_logical_order_exception.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_logical_order_exception check_PROGRAMS += test-pr_logical_order_exception test_pr_logical_order_exception_SOURCES = unictype/test-pr_logical_order_exception.c test_pr_logical_order_exception_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-lowercase�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "lowercase". Files: lib/unictype/pr_lowercase.c lib/unictype/pr_lowercase.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_LOWERCASE lib_SOURCES += unictype/pr_lowercase.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-lowercase-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_lowercase.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_lowercase check_PROGRAMS += test-pr_lowercase test_pr_lowercase_SOURCES = unictype/test-pr_lowercase.c test_pr_lowercase_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-math����������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "math". Files: lib/unictype/pr_math.c lib/unictype/pr_math.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-math]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_MATH lib_SOURCES += unictype/pr_math.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-math-tests����������������������������������������0000664�0000000�0000000�00000000474�14110572173�0023512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_math.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_math check_PROGRAMS += test-pr_math test_pr_math_SOURCES = unictype/test-pr_math.c test_pr_math_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-non-break�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "non break". Files: lib/unictype/pr_non_break.c lib/unictype/pr_non_break.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-non-break]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_NON_BREAK lib_SOURCES += unictype/pr_non_break.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-non-break-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_non_break.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_non_break check_PROGRAMS += test-pr_non_break test_pr_non_break_SOURCES = unictype/test-pr_non_break.c test_pr_non_break_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-not-a-character�����������������������������������0000664�0000000�0000000�00000000756�14110572173�0024374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "not a character". Files: lib/unictype/pr_not_a_character.c lib/unictype/pr_not_a_character.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-not-a-character]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_NOT_A_CHARACTER lib_SOURCES += unictype/pr_not_a_character.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/property-not-a-character-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_not_a_character.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_not_a_character check_PROGRAMS += test-pr_not_a_character test_pr_not_a_character_SOURCES = unictype/test-pr_not_a_character.c test_pr_not_a_character_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-numeric�������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "numeric". Files: lib/unictype/pr_numeric.c lib/unictype/pr_numeric.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-numeric]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_NUMERIC lib_SOURCES += unictype/pr_numeric.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-numeric-tests�������������������������������������0000664�0000000�0000000�00000000516�14110572173�0024220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_numeric.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_numeric check_PROGRAMS += test-pr_numeric test_pr_numeric_SOURCES = unictype/test-pr_numeric.c test_pr_numeric_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-alphabetic����������������������������������0000664�0000000�0000000�00000000764�14110572173�0024636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other alphabetic". Files: lib/unictype/pr_other_alphabetic.c lib/unictype/pr_other_alphabetic.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-alphabetic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_ALPHABETIC lib_SOURCES += unictype/pr_other_alphabetic.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������gnulib-20210822~d383792/modules/unictype/property-other-alphabetic-tests����������������������������0000664�0000000�0000000�00000000604�14110572173�0025767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_alphabetic.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_alphabetic check_PROGRAMS += test-pr_other_alphabetic test_pr_other_alphabetic_SOURCES = unictype/test-pr_other_alphabetic.c test_pr_other_alphabetic_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-default-ignorable-code-point����������������0000664�0000000�0000000�00000001140�14110572173�0030152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other default ignorable code point". Files: lib/unictype/pr_other_default_ignorable_code_point.c lib/unictype/pr_other_default_ignorable_code_point.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-default-ignorable-code-point]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT lib_SOURCES += unictype/pr_other_default_ignorable_code_point.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-default-ignorable-code-point-tests����������0000664�0000000�0000000�00000000760�14110572173�0031321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_default_ignorable_code_point.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_default_ignorable_code_point check_PROGRAMS += test-pr_other_default_ignorable_code_point test_pr_other_default_ignorable_code_point_SOURCES = unictype/test-pr_other_default_ignorable_code_point.c test_pr_other_default_ignorable_code_point_LDADD = $(LDADD) $(LIBUNISTRING) ����������������gnulib-20210822~d383792/modules/unictype/property-other-grapheme-extend�����������������������������0000664�0000000�0000000�00000001022�14110572173�0025603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other grapheme extend". Files: lib/unictype/pr_other_grapheme_extend.c lib/unictype/pr_other_grapheme_extend.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-grapheme-extend]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND lib_SOURCES += unictype/pr_other_grapheme_extend.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-grapheme-extend-tests�����������������������0000664�0000000�0000000�00000000642�14110572173�0026752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_grapheme_extend.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_grapheme_extend check_PROGRAMS += test-pr_other_grapheme_extend test_pr_other_grapheme_extend_SOURCES = unictype/test-pr_other_grapheme_extend.c test_pr_other_grapheme_extend_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-id-continue���������������������������������0000664�0000000�0000000�00000000772�14110572173�0024757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other id continue". Files: lib/unictype/pr_other_id_continue.c lib/unictype/pr_other_id_continue.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-id-continue]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE lib_SOURCES += unictype/pr_other_id_continue.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������gnulib-20210822~d383792/modules/unictype/property-other-id-continue-tests���������������������������0000664�0000000�0000000�00000000612�14110572173�0026110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_id_continue.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_id_continue check_PROGRAMS += test-pr_other_id_continue test_pr_other_id_continue_SOURCES = unictype/test-pr_other_id_continue.c test_pr_other_id_continue_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-id-start������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other id start". Files: lib/unictype/pr_other_id_start.c lib/unictype/pr_other_id_start.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-id-start]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_ID_START lib_SOURCES += unictype/pr_other_id_start.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-other-id-start-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_id_start.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_id_start check_PROGRAMS += test-pr_other_id_start test_pr_other_id_start_SOURCES = unictype/test-pr_other_id_start.c test_pr_other_id_start_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-lowercase�����������������������������������0000664�0000000�0000000�00000000756�14110572173�0024527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other lowercase". Files: lib/unictype/pr_other_lowercase.c lib/unictype/pr_other_lowercase.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_LOWERCASE lib_SOURCES += unictype/pr_other_lowercase.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/property-other-lowercase-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_lowercase.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_lowercase check_PROGRAMS += test-pr_other_lowercase test_pr_other_lowercase_SOURCES = unictype/test-pr_other_lowercase.c test_pr_other_lowercase_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-math����������������������������������������0000664�0000000�0000000�00000000720�14110572173�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other math". Files: lib/unictype/pr_other_math.c lib/unictype/pr_other_math.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-math]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_MATH lib_SOURCES += unictype/pr_other_math.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-math-tests����������������������������������0000664�0000000�0000000�00000000540�14110572173�0024623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_math.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_math check_PROGRAMS += test-pr_other_math test_pr_other_math_SOURCES = unictype/test-pr_other_math.c test_pr_other_math_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-other-uppercase�����������������������������������0000664�0000000�0000000�00000000756�14110572173�0024532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "other uppercase". Files: lib/unictype/pr_other_uppercase.c lib/unictype/pr_other_uppercase.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-other-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_OTHER_UPPERCASE lib_SOURCES += unictype/pr_other_uppercase.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/property-other-uppercase-tests�����������������������������0000664�0000000�0000000�00000000576�14110572173�0025672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_other_uppercase.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_other_uppercase check_PROGRAMS += test-pr_other_uppercase test_pr_other_uppercase_SOURCES = unictype/test-pr_other_uppercase.c test_pr_other_uppercase_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-paired-punctuation��������������������������������0000664�0000000�0000000�00000001000�14110572173�0025216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "paired punctuation". Files: lib/unictype/pr_paired_punctuation.c lib/unictype/pr_paired_punctuation.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-paired-punctuation]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION lib_SOURCES += unictype/pr_paired_punctuation.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all gnulib-20210822~d383792/modules/unictype/property-paired-punctuation-tests��������������������������0000664�0000000�0000000�00000000620�14110572173�0026365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_paired_punctuation.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_paired_punctuation check_PROGRAMS += test-pr_paired_punctuation test_pr_paired_punctuation_SOURCES = unictype/test-pr_paired_punctuation.c test_pr_paired_punctuation_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-paragraph-separator�������������������������������0000664�0000000�0000000�00000001006�14110572173�0025354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "paragraph separator". Files: lib/unictype/pr_paragraph_separator.c lib/unictype/pr_paragraph_separator.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-paragraph-separator]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR lib_SOURCES += unictype/pr_paragraph_separator.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-paragraph-separator-tests�������������������������0000664�0000000�0000000�00000000626�14110572173�0026523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_paragraph_separator.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_paragraph_separator check_PROGRAMS += test-pr_paragraph_separator test_pr_paragraph_separator_SOURCES = unictype/test-pr_paragraph_separator.c test_pr_paragraph_separator_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-pattern-syntax������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "pattern syntax". Files: lib/unictype/pr_pattern_syntax.c lib/unictype/pr_pattern_syntax.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-pattern-syntax]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PATTERN_SYNTAX lib_SOURCES += unictype/pr_pattern_syntax.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-pattern-syntax-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_pattern_syntax.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_pattern_syntax check_PROGRAMS += test-pr_pattern_syntax test_pr_pattern_syntax_SOURCES = unictype/test-pr_pattern_syntax.c test_pr_pattern_syntax_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-pattern-white-space�������������������������������0000664�0000000�0000000�00000001006�14110572173�0025275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "pattern white space". Files: lib/unictype/pr_pattern_white_space.c lib/unictype/pr_pattern_white_space.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-pattern-white-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE lib_SOURCES += unictype/pr_pattern_white_space.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-pattern-white-space-tests�������������������������0000664�0000000�0000000�00000000626�14110572173�0026444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_pattern_white_space.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_pattern_white_space check_PROGRAMS += test-pr_pattern_white_space test_pr_pattern_white_space_SOURCES = unictype/test-pr_pattern_white_space.c test_pr_pattern_white_space_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-private-use���������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "private use". Files: lib/unictype/pr_private_use.c lib/unictype/pr_private_use.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-private-use]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PRIVATE_USE lib_SOURCES += unictype/pr_private_use.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unictype/property-private-use-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0025025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_private_use.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_private_use check_PROGRAMS += test-pr_private_use test_pr_private_use_SOURCES = unictype/test-pr_private_use.c test_pr_private_use_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-punctuation���������������������������������������0000664�0000000�0000000�00000001001�14110572173�0023755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "punctuation". Files: lib/unictype/pr_punctuation.c lib/unictype/pr_punctuation.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-P configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-punctuation]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PUNCTUATION lib_SOURCES += unictype/pr_punctuation.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-punctuation-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0025132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_punctuation.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_punctuation check_PROGRAMS += test-pr_punctuation test_pr_punctuation_SOURCES = unictype/test-pr_punctuation.c test_pr_punctuation_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-quotation-mark������������������������������������0000664�0000000�0000000�00000000750�14110572173�0024371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "quotation mark". Files: lib/unictype/pr_quotation_mark.c lib/unictype/pr_quotation_mark.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-quotation-mark]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_QUOTATION_MARK lib_SOURCES += unictype/pr_quotation_mark.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������gnulib-20210822~d383792/modules/unictype/property-quotation-mark-tests������������������������������0000664�0000000�0000000�00000000570�14110572173�0025531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_quotation_mark.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_quotation_mark check_PROGRAMS += test-pr_quotation_mark test_pr_quotation_mark_SOURCES = unictype/test-pr_quotation_mark.c test_pr_quotation_mark_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-radical�������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0023024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "radical". Files: lib/unictype/pr_radical.c lib/unictype/pr_radical.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-radical]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_RADICAL lib_SOURCES += unictype/pr_radical.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-radical-tests�������������������������������������0000664�0000000�0000000�00000000516�14110572173�0024155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_radical.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_radical check_PROGRAMS += test-pr_radical test_pr_radical_SOURCES = unictype/test-pr_radical.c test_pr_radical_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-sentence-terminal���������������������������������0000664�0000000�0000000�00000000772�14110572173�0025037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "sentence terminal". Files: lib/unictype/pr_sentence_terminal.c lib/unictype/pr_sentence_terminal.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-sentence-terminal]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_SENTENCE_TERMINAL lib_SOURCES += unictype/pr_sentence_terminal.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������gnulib-20210822~d383792/modules/unictype/property-sentence-terminal-tests���������������������������0000664�0000000�0000000�00000000612�14110572173�0026170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_sentence_terminal.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_sentence_terminal check_PROGRAMS += test-pr_sentence_terminal test_pr_sentence_terminal_SOURCES = unictype/test-pr_sentence_terminal.c test_pr_sentence_terminal_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-soft-dotted���������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "soft dotted". Files: lib/unictype/pr_soft_dotted.c lib/unictype/pr_soft_dotted.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-soft-dotted]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_SOFT_DOTTED lib_SOURCES += unictype/pr_soft_dotted.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unictype/property-soft-dotted-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0025015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_soft_dotted.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_soft_dotted check_PROGRAMS += test-pr_soft_dotted test_pr_soft_dotted_SOURCES = unictype/test-pr_soft_dotted.c test_pr_soft_dotted_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-space���������������������������������������������0000664�0000000�0000000�00000000736�14110572173�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "space". Files: lib/unictype/pr_space.c lib/unictype/pr_space.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-Zs configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_SPACE lib_SOURCES += unictype/pr_space.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������gnulib-20210822~d383792/modules/unictype/property-space-tests���������������������������������������0000664�0000000�0000000�00000000502�14110572173�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_space.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_space check_PROGRAMS += test-pr_space test_pr_space_SOURCES = unictype/test-pr_space.c test_pr_space_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-terminal-punctuation������������������������������0000664�0000000�0000000�00000001014�14110572173�0025572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "terminal punctuation". Files: lib/unictype/pr_terminal_punctuation.c lib/unictype/pr_terminal_punctuation.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-terminal-punctuation]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION lib_SOURCES += unictype/pr_terminal_punctuation.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-terminal-punctuation-tests������������������������0000664�0000000�0000000�00000000634�14110572173�0026741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_terminal_punctuation.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_terminal_punctuation check_PROGRAMS += test-pr_terminal_punctuation test_pr_terminal_punctuation_SOURCES = unictype/test-pr_terminal_punctuation.c test_pr_terminal_punctuation_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-test����������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character has a given property. Files: lib/unictype/pr_test.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_TEST lib_SOURCES += unictype/pr_test.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-test-tests����������������������������������������0000664�0000000�0000000�00000000414�14110572173�0023532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_test.c tests/macros.h Depends-on: unictype/property-composite configure.ac: Makefile.am: TESTS += test-pr_test check_PROGRAMS += test-pr_test test_pr_test_SOURCES = unictype/test-pr_test.c test_pr_test_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-titlecase�����������������������������������������0000664�0000000�0000000�00000000766�14110572173�0023402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "titlecase". Files: lib/unictype/pr_titlecase.c lib/unictype/pr_titlecase.h lib/unictype/bitmap.h Depends-on: unictype/base unictype/category-test unictype/category-Lt configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-titlecase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_TITLECASE lib_SOURCES += unictype/pr_titlecase.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������gnulib-20210822~d383792/modules/unictype/property-titlecase-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_titlecase.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_titlecase check_PROGRAMS += test-pr_titlecase test_pr_titlecase_SOURCES = unictype/test-pr_titlecase.c test_pr_titlecase_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-unassigned-code-value�����������������������������0000664�0000000�0000000�00000001022�14110572173�0025571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "unassigned code value". Files: lib/unictype/pr_unassigned_code_value.c lib/unictype/pr_unassigned_code_value.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-unassigned-code-value]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE lib_SOURCES += unictype/pr_unassigned_code_value.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-unassigned-code-value-tests�����������������������0000664�0000000�0000000�00000000642�14110572173�0026740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_unassigned_code_value.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_unassigned_code_value check_PROGRAMS += test-pr_unassigned_code_value test_pr_unassigned_code_value_SOURCES = unictype/test-pr_unassigned_code_value.c test_pr_unassigned_code_value_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-unified-ideograph���������������������������������0000664�0000000�0000000�00000000772�14110572173�0025005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "unified ideograph". Files: lib/unictype/pr_unified_ideograph.c lib/unictype/pr_unified_ideograph.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-unified-ideograph]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH lib_SOURCES += unictype/pr_unified_ideograph.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������gnulib-20210822~d383792/modules/unictype/property-unified-ideograph-tests���������������������������0000664�0000000�0000000�00000000612�14110572173�0026136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_unified_ideograph.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_unified_ideograph check_PROGRAMS += test-pr_unified_ideograph test_pr_unified_ideograph_SOURCES = unictype/test-pr_unified_ideograph.c test_pr_unified_ideograph_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-uppercase�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "uppercase". Files: lib/unictype/pr_uppercase.c lib/unictype/pr_uppercase.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_UPPERCASE lib_SOURCES += unictype/pr_uppercase.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-uppercase-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_uppercase.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_uppercase check_PROGRAMS += test-pr_uppercase test_pr_uppercase_SOURCES = unictype/test-pr_uppercase.c test_pr_uppercase_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-variation-selector��������������������������������0000664�0000000�0000000�00000001000�14110572173�0025215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "variation selector". Files: lib/unictype/pr_variation_selector.c lib/unictype/pr_variation_selector.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-variation-selector]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_VARIATION_SELECTOR lib_SOURCES += unictype/pr_variation_selector.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all gnulib-20210822~d383792/modules/unictype/property-variation-selector-tests��������������������������0000664�0000000�0000000�00000000620�14110572173�0026364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_variation_selector.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_variation_selector check_PROGRAMS += test-pr_variation_selector test_pr_variation_selector_SOURCES = unictype/test-pr_variation_selector.c test_pr_variation_selector_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-white-space���������������������������������������0000664�0000000�0000000�00000000726�14110572173�0023632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "white space". Files: lib/unictype/pr_white_space.c lib/unictype/pr_white_space.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-white-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_WHITE_SPACE lib_SOURCES += unictype/pr_white_space.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unictype/property-white-space-tests���������������������������������0000664�0000000�0000000�00000000546�14110572173�0024772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_white_space.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_white_space check_PROGRAMS += test-pr_white_space test_pr_white_space_SOURCES = unictype/test-pr_white_space.c test_pr_white_space_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-xid-continue��������������������������������������0000664�0000000�0000000�00000000734�14110572173�0024026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "xid continue". Files: lib/unictype/pr_xid_continue.c lib/unictype/pr_xid_continue.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-xid-continue]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_XID_CONTINUE lib_SOURCES += unictype/pr_xid_continue.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������gnulib-20210822~d383792/modules/unictype/property-xid-continue-tests��������������������������������0000664�0000000�0000000�00000000554�14110572173�0025166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_xid_continue.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_xid_continue check_PROGRAMS += test-pr_xid_continue test_pr_xid_continue_SOURCES = unictype/test-pr_xid_continue.c test_pr_xid_continue_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-xid-start�����������������������������������������0000664�0000000�0000000�00000000712�14110572173�0023333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "xid start". Files: lib/unictype/pr_xid_start.c lib/unictype/pr_xid_start.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-xid-start]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_XID_START lib_SOURCES += unictype/pr_xid_start.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-xid-start-tests�����������������������������������0000664�0000000�0000000�00000000532�14110572173�0024473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_xid_start.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_xid_start check_PROGRAMS += test-pr_xid_start test_pr_xid_start_SOURCES = unictype/test-pr_xid_start.c test_pr_xid_start_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-zero-width����������������������������������������0000664�0000000�0000000�00000000720�14110572173�0023507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is "zero width". Files: lib/unictype/pr_zero_width.c lib/unictype/pr_zero_width.h lib/unictype/bitmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/property-zero-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ZERO_WIDTH lib_SOURCES += unictype/pr_zero_width.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unictype/property-zero-width-tests����������������������������������0000664�0000000�0000000�00000000540�14110572173�0024647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-pr_zero_width.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pr_zero_width check_PROGRAMS += test-pr_zero_width test_pr_zero_width_SOURCES = unictype/test-pr_zero_width.c test_pr_zero_width_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/scripts����������������������������������������������������0000664�0000000�0000000�00000001756�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Scripts of Unicode characters. Files: lib/unictype/scripts.c lib/unictype/scripts.h lib/unictype/scripts_byname.gperf Depends-on: unictype/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/scripts]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SCRIPTS lib_SOURCES += unictype/scripts.c endif $(srcdir)/unictype/scripts_byname.h: $(srcdir)/unictype/scripts_byname.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/scripts_byname.gperf > $(srcdir)/unictype/scripts_byname.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/unictype/scripts_byname.h-t1 > $(srcdir)/unictype/scripts_byname.h-t2 \ && mv $(srcdir)/unictype/scripts_byname.h-t2 $(srcdir)/unictype/scripts_byname.h BUILT_SOURCES += unictype/scripts_byname.h MOSTLYCLEANFILES += unictype/scripts_byname.h-t1 unictype/scripts_byname.h-t2 MAINTAINERCLEANFILES += unictype/scripts_byname.h EXTRA_DIST += unictype/scripts_byname.h Include: "unictype.h" License: LGPLv2+ Maintainer: all ������������������gnulib-20210822~d383792/modules/unictype/scripts-all������������������������������������������������0000664�0000000�0000000�00000000304�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Complete API for scripts of Unicode characters. Files: Depends-on: unictype/scripts configure.ac: Makefile.am: Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/scripts-tests����������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-scripts.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-scripts check_PROGRAMS += test-scripts test_scripts_SOURCES = unictype/test-scripts.c test_scripts_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-c-ident���������������������������������������������0000664�0000000�0000000�00000000740�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character can occur in identifiers in the C language. Files: lib/unictype/sy_c_ident.c lib/unictype/sy_c_ident.h lib/unictype/identsyntaxmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/syntax-c-ident]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SYNTAX_C_IDENT lib_SOURCES += unictype/sy_c_ident.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������gnulib-20210822~d383792/modules/unictype/syntax-c-ident-tests���������������������������������������0000664�0000000�0000000�00000000402�14110572173�0023535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-sy_c_ident.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sy_c_ident check_PROGRAMS += test-sy_c_ident test_sy_c_ident_SOURCES = unictype/test-sy_c_ident.c test_sy_c_ident_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-c-whitespace����������������������������������������0000664�0000000�0000000�00000000636�14110572173�0023437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is whitespace in the C language syntax. Files: lib/unictype/sy_c_whitespace.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/syntax-c-whitespace]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SYNTAX_C_WHITESPACE lib_SOURCES += unictype/sy_c_whitespace.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-c-whitespace-tests����������������������������������0000664�0000000�0000000�00000000554�14110572173�0024576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-sy_c_whitespace.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sy_c_whitespace check_PROGRAMS += test-sy_c_whitespace test_sy_c_whitespace_SOURCES = unictype/test-sy_c_whitespace.c test_sy_c_whitespace_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-java-ident������������������������������������������0000664�0000000�0000000�00000000762�14110572173�0023105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character can occur in identifiers in the Java language. Files: lib/unictype/sy_java_ident.c lib/unictype/sy_java_ident.h lib/unictype/identsyntaxmap.h Depends-on: unictype/base configure.ac: AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/syntax-java-ident]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SYNTAX_JAVA_IDENT lib_SOURCES += unictype/sy_java_ident.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������gnulib-20210822~d383792/modules/unictype/syntax-java-ident-tests������������������������������������0000664�0000000�0000000�00000000424�14110572173�0024240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-sy_java_ident.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sy_java_ident check_PROGRAMS += test-sy_java_ident test_sy_java_ident_SOURCES = unictype/test-sy_java_ident.c test_sy_java_ident_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-java-whitespace�������������������������������������0000664�0000000�0000000�00000000655�14110572173�0024137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character is whitespace in the Java language syntax. Files: lib/unictype/sy_java_whitespace.c Depends-on: unictype/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unictype/syntax-java-whitespace]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SYNTAX_JAVA_WHITESPACE lib_SOURCES += unictype/sy_java_whitespace.c endif Include: "unictype.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unictype/syntax-java-whitespace-tests�������������������������������0000664�0000000�0000000�00000000576�14110572173�0025301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unictype/test-sy_java_whitespace.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sy_java_whitespace check_PROGRAMS += test-sy_java_whitespace test_sy_java_whitespace_SOURCES = unictype/test-sy_java_whitespace.c test_sy_java_whitespace_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017410�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/base��������������������������������������������������������0000664�0000000�0000000�00000001055�14110572173�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for grapheme cluster breaking. Files: lib/unigbrk.in.h m4/libunistring-base.m4 Depends-on: unitypes stdbool configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.8], [unigbrk.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNIGBRK_H) unigbrk.h: unigbrk.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unigbrk.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unigbrk.h unigbrk.h-t Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-breaks�����������������������������������������0000664�0000000�0000000�00000001022�14110572173�0022774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-16 string. Files: lib/unigbrk/u16-grapheme-breaks.c lib/unigbrk/u-grapheme-breaks.h Depends-on: unigbrk/base unigbrk/uc-gbrk-prop unistr/u16-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u16-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u16-grapheme-breaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U16_GRAPHEME_BREAKS lib_SOURCES += unigbrk/u16-grapheme-breaks.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-breaks-tests�����������������������������������0000664�0000000�0000000�00000000447�14110572173�0024146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u16-grapheme-breaks.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-next�������������������������������������������0000664�0000000�0000000�00000000771�14110572173�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of next grapheme cluster in UTF-16 string. Files: lib/unigbrk/u16-grapheme-next.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u16-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u16-grapheme-next]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u16-grapheme-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U16_GRAPHEME_NEXT lib_SOURCES += unigbrk/u16-grapheme-next.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �������gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-next-tests�������������������������������������0000664�0000000�0000000�00000000433�14110572173�0023650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u16-grapheme-next.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-prev�������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of previous grapheme cluster in UTF-16 string. Files: lib/unigbrk/u16-grapheme-prev.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u16-prev configure.ac: gl_MODULE_INDICATOR([unigbrk/u16-grapheme-prev]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u16-grapheme-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U16_GRAPHEME_PREV lib_SOURCES += unigbrk/u16-grapheme-prev.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �����gnulib-20210822~d383792/modules/unigbrk/u16-grapheme-prev-tests�������������������������������������0000664�0000000�0000000�00000000433�14110572173�0023646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u16-grapheme-prev.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-breaks�����������������������������������������0000664�0000000�0000000�00000001022�14110572173�0022772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-32 string. Files: lib/unigbrk/u32-grapheme-breaks.c lib/unigbrk/u-grapheme-breaks.h Depends-on: unigbrk/base unigbrk/uc-gbrk-prop unistr/u32-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u32-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u32-grapheme-breaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U32_GRAPHEME_BREAKS lib_SOURCES += unigbrk/u32-grapheme-breaks.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-breaks-tests�����������������������������������0000664�0000000�0000000�00000000447�14110572173�0024144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u32-grapheme-breaks.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-next�������������������������������������������0000664�0000000�0000000�00000000771�14110572173�0022513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of next grapheme cluster in UTF-32 string. Files: lib/unigbrk/u32-grapheme-next.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u32-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u32-grapheme-next]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u32-grapheme-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U32_GRAPHEME_NEXT lib_SOURCES += unigbrk/u32-grapheme-next.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �������gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-next-tests�������������������������������������0000664�0000000�0000000�00000000433�14110572173�0023646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u32-grapheme-next.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-prev�������������������������������������������0000664�0000000�0000000�00000000773�14110572173�0022513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of previous grapheme cluster in UTF-32 string. Files: lib/unigbrk/u32-grapheme-prev.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u32-prev configure.ac: gl_MODULE_INDICATOR([unigbrk/u32-grapheme-prev]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u32-grapheme-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U32_GRAPHEME_PREV lib_SOURCES += unigbrk/u32-grapheme-prev.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �����gnulib-20210822~d383792/modules/unigbrk/u32-grapheme-prev-tests�������������������������������������0000664�0000000�0000000�00000000433�14110572173�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u32-grapheme-prev.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-breaks������������������������������������������0000664�0000000�0000000�00000001013�14110572173�0022715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-8 string. Files: lib/unigbrk/u8-grapheme-breaks.c lib/unigbrk/u-grapheme-breaks.h Depends-on: unigbrk/base unigbrk/uc-gbrk-prop unistr/u8-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u8-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u8-grapheme-breaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U8_GRAPHEME_BREAKS lib_SOURCES += unigbrk/u8-grapheme-breaks.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-breaks-tests������������������������������������0000664�0000000�0000000�00000000441�14110572173�0024061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u8-grapheme-breaks.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-next��������������������������������������������0000664�0000000�0000000�00000000762�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of next grapheme cluster in UTF-8 string. Files: lib/unigbrk/u8-grapheme-next.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u8-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u8-grapheme-next]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u8-grapheme-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U8_GRAPHEME_NEXT lib_SOURCES += unigbrk/u8-grapheme-next.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ��������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-next-tests��������������������������������������0000664�0000000�0000000�00000000425�14110572173�0023572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u8-grapheme-next.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-prev��������������������������������������������0000664�0000000�0000000�00000000764�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find start of previous grapheme cluster in UTF-8 string. Files: lib/unigbrk/u8-grapheme-prev.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u8-prev configure.ac: gl_MODULE_INDICATOR([unigbrk/u8-grapheme-prev]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/u8-grapheme-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_U8_GRAPHEME_PREV lib_SOURCES += unigbrk/u8-grapheme-prev.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ������������gnulib-20210822~d383792/modules/unigbrk/u8-grapheme-prev-tests��������������������������������������0000664�0000000�0000000�00000000425�14110572173�0023570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-u8-grapheme-prev.c Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/uc-gbrk-prop������������������������������������������������0000664�0000000�0000000�00000000645�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine a Unicode character's Grapheme_Cluster_Break property. Files: lib/unigbrk/gbrkprop.h lib/unigbrk/uc-gbrk-prop.c Depends-on: unigbrk/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/uc-gbrk-prop]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_UC_GBRK_PROP lib_SOURCES += unigbrk/uc-gbrk-prop.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno �������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/uc-gbrk-prop-tests������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0023010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-uc-gbrk-prop.c tests/unigbrk/test-uc-gbrk-prop.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uc-gbrk-prop check_PROGRAMS += test-uc-gbrk-prop test_uc_gbrk_prop_SOURCES = unigbrk/test-uc-gbrk-prop.c test_uc_gbrk_prop_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/uc-grapheme-breaks������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks. Files: lib/unigbrk/uc-grapheme-breaks.c lib/unigbrk/u-grapheme-breaks.h Depends-on: unigbrk/base unigbrk/uc-gbrk-prop configure.ac: gl_MODULE_INDICATOR([unigbrk/uc-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/uc-grapheme-breaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_UC_GRAPHEME_BREAKS lib_SOURCES += unigbrk/uc-grapheme-breaks.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ����������������������gnulib-20210822~d383792/modules/unigbrk/uc-grapheme-breaks-tests������������������������������������0000664�0000000�0000000�00000000571�14110572173�0024140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-uc-grapheme-breaks.c tests/unigbrk/test-uc-grapheme-breaks.sh tests/unigbrk/GraphemeBreakTest.txt Depends-on: configure.ac: Makefile.am: 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) ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/uc-is-grapheme-break����������������������������������������0000664�0000000�0000000�00000000651�14110572173�0023225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test for grapheme cluster breakpoints. Files: lib/unigbrk/uc-is-grapheme-break.c Depends-on: unigbrk/base unigbrk/uc-gbrk-prop configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/uc-is-grapheme-break]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_UC_IS_GRAPHEME_BREAK lib_SOURCES += unigbrk/uc-is-grapheme-break.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/uc-is-grapheme-break-tests����������������������������������0000664�0000000�0000000�00000000607�14110572173�0024366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-uc-is-grapheme-break.c tests/unigbrk/test-uc-is-grapheme-break.sh tests/unigbrk/GraphemeBreakTest.txt Depends-on: configure.ac: Makefile.am: TESTS += unigbrk/test-uc-is-grapheme-break.sh check_PROGRAMS += test-uc-is-grapheme-break test_uc_is_grapheme_break_SOURCES = unigbrk/test-uc-is-grapheme-break.c test_uc_is_grapheme_break_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/ulc-grapheme-breaks�����������������������������������������0000664�0000000�0000000�00000001027�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Grapheme cluster breaks in locale-encoded string. Files: lib/unigbrk/ulc-grapheme-breaks.c Depends-on: unigbrk/base unigbrk/u8-grapheme-breaks uniconv/u8-conv-from-enc c-ctype localcharset configure.ac: gl_MODULE_INDICATOR([unigbrk/ulc-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.8], [unigbrk/ulc-grapheme-breaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIGBRK_ULC_GRAPHEME_BREAKS lib_SOURCES += unigbrk/ulc-grapheme-breaks.c endif Include: "unigbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: Ben Pfaff, Daiki Ueno ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unigbrk/ulc-grapheme-breaks-tests�����������������������������������0000664�0000000�0000000�00000000751�14110572173�0024314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unigbrk/test-ulc-grapheme-breaks.sh tests/unigbrk/test-ulc-grapheme-breaks.c tests/macros.h m4/locale-ar.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_AR Makefile.am: 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@ �����������������������gnulib-20210822~d383792/modules/unilbrk/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017415�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/base��������������������������������������������������������0000664�0000000�0000000�00000001025�14110572173�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for line breaking. Files: lib/unilbrk.in.h m4/libunistring-base.m4 Depends-on: unitypes localcharset configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unilbrk.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNILBRK_H) unilbrk.h: unilbrk.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unilbrk.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unilbrk.h unilbrk.h-t Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/tables������������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking auxiliary tables. Files: lib/unilbrk/lbrktables.h lib/unilbrk/lbrktables.c lib/unilbrk/lbrkprop1.h lib/unilbrk/lbrkprop2.h Depends-on: unilbrk/base configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += unilbrk/lbrktables.c Include: "unilbrk/lbrktables.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u16-possible-linebreaks�������������������������������������0000664�0000000�0000000�00000000711�14110572173�0023705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-16 strings. Files: lib/unilbrk/u16-possible-linebreaks.c lib/uniwidth/cjk.h Depends-on: unilbrk/base unilbrk/tables unistr/u16-mbtouc-unsafe streq configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u16-possible-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U16_POSSIBLE_LINEBREAKS lib_SOURCES += unilbrk/u16-possible-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u16-possible-linebreaks-tests�������������������������������0000664�0000000�0000000�00000000516�14110572173�0025050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u16-possible-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-possible-linebreaks check_PROGRAMS += test-u16-possible-linebreaks test_u16_possible_linebreaks_SOURCES = unilbrk/test-u16-possible-linebreaks.c test_u16_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u16-width-linebreaks����������������������������������������0000664�0000000�0000000�00000000704�14110572173�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-16 strings. Files: lib/unilbrk/u16-width-linebreaks.c Depends-on: unilbrk/base unilbrk/u16-possible-linebreaks uniwidth/width unistr/u16-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u16-width-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U16_WIDTH_LINEBREAKS lib_SOURCES += unilbrk/u16-width-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u16-width-linebreaks-tests����������������������������������0000664�0000000�0000000�00000000474�14110572173�0024352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u16-width-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-width-linebreaks check_PROGRAMS += test-u16-width-linebreaks test_u16_width_linebreaks_SOURCES = unilbrk/test-u16-width-linebreaks.c test_u16_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u32-possible-linebreaks�������������������������������������0000664�0000000�0000000�00000000660�14110572173�0023706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-32 strings. Files: lib/unilbrk/u32-possible-linebreaks.c lib/uniwidth/cjk.h Depends-on: unilbrk/base unilbrk/tables streq configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u32-possible-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U32_POSSIBLE_LINEBREAKS lib_SOURCES += unilbrk/u32-possible-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u32-possible-linebreaks-tests�������������������������������0000664�0000000�0000000�00000000516�14110572173�0025046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u32-possible-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-possible-linebreaks check_PROGRAMS += test-u32-possible-linebreaks test_u32_possible_linebreaks_SOURCES = unilbrk/test-u32-possible-linebreaks.c test_u32_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u32-width-linebreaks����������������������������������������0000664�0000000�0000000�00000000653�14110572173�0023207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-32 strings. Files: lib/unilbrk/u32-width-linebreaks.c Depends-on: unilbrk/base unilbrk/u32-possible-linebreaks uniwidth/width configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u32-width-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U32_WIDTH_LINEBREAKS lib_SOURCES += unilbrk/u32-width-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u32-width-linebreaks-tests����������������������������������0000664�0000000�0000000�00000000474�14110572173�0024350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u32-width-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-width-linebreaks check_PROGRAMS += test-u32-width-linebreaks test_u32_width_linebreaks_SOURCES = unilbrk/test-u32-width-linebreaks.c test_u32_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u8-possible-linebreaks��������������������������������������0000664�0000000�0000000�00000000703�14110572173�0023627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-8 strings. Files: lib/unilbrk/u8-possible-linebreaks.c lib/uniwidth/cjk.h Depends-on: unilbrk/base unilbrk/tables unistr/u8-mbtouc-unsafe streq configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u8-possible-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U8_POSSIBLE_LINEBREAKS lib_SOURCES += unilbrk/u8-possible-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u8-possible-linebreaks-tests��������������������������������0000664�0000000�0000000�00000000510�14110572173�0024763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u8-possible-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-possible-linebreaks check_PROGRAMS += test-u8-possible-linebreaks test_u8_possible_linebreaks_SOURCES = unilbrk/test-u8-possible-linebreaks.c test_u8_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u8-width-linebreaks�����������������������������������������0000664�0000000�0000000�00000000675�14110572173�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of UTF-8 strings. Files: lib/unilbrk/u8-width-linebreaks.c Depends-on: unilbrk/base unilbrk/u8-possible-linebreaks uniwidth/width unistr/u8-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/u8-width-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_U8_WIDTH_LINEBREAKS lib_SOURCES += unilbrk/u8-width-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/u8-width-linebreaks-tests�����������������������������������0000664�0000000�0000000�00000000466�14110572173�0024274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-u8-width-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-width-linebreaks check_PROGRAMS += test-u8-width-linebreaks test_u8_width_linebreaks_SOURCES = unilbrk/test-u8-width-linebreaks.c test_u8_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/ulc-common��������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0021410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking auxiliary functions. Files: lib/unilbrk/ulc-common.h lib/unilbrk/ulc-common.c Depends-on: c-ctype c-strcaseeq configure.ac: Makefile.am: lib_SOURCES += unilbrk/ulc-common.c Include: "unilbrk/ulc-common.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/ulc-possible-linebreaks�������������������������������������0000664�0000000�0000000�00000000724�14110572173�0024061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of strings. Files: lib/unilbrk/ulc-possible-linebreaks.c Depends-on: unilbrk/base unilbrk/u8-possible-linebreaks unilbrk/ulc-common uniconv/u8-conv-from-enc c-ctype configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/ulc-possible-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_ULC_POSSIBLE_LINEBREAKS lib_SOURCES += unilbrk/ulc-possible-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������gnulib-20210822~d383792/modules/unilbrk/ulc-possible-linebreaks-tests�������������������������������0000664�0000000�0000000�00000000532�14110572173�0025216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-ulc-possible-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ulc-possible-linebreaks check_PROGRAMS += test-ulc-possible-linebreaks test_ulc_possible_linebreaks_SOURCES = unilbrk/test-ulc-possible-linebreaks.c test_ulc_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/ulc-width-linebreaks����������������������������������������0000664�0000000�0000000�00000000705�14110572173�0023357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Line breaking of strings. Files: lib/unilbrk/ulc-width-linebreaks.c Depends-on: unilbrk/base unilbrk/u8-width-linebreaks unilbrk/ulc-common uniconv/u8-conv-from-enc c-ctype configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unilbrk/ulc-width-linebreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNILBRK_ULC_WIDTH_LINEBREAKS lib_SOURCES += unilbrk/ulc-width-linebreaks.c endif Include: "unilbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������gnulib-20210822~d383792/modules/unilbrk/ulc-width-linebreaks-tests����������������������������������0000664�0000000�0000000�00000000510�14110572173�0024511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unilbrk/test-ulc-width-linebreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-ulc-width-linebreaks check_PROGRAMS += test-ulc-width-linebreaks test_ulc_width_linebreaks_SOURCES = unilbrk/test-ulc-width-linebreaks.c test_ulc_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniname/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017403�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniname/base��������������������������������������������������������0000664�0000000�0000000�00000001021�14110572173�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for Unicode character names. Files: lib/uniname.in.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.5], [uniname.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNINAME_H) uniname.h: uniname.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniname.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uniname.h uniname.h-t Include: "uniname.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniname/uniname�����������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Association between Unicode characters and their names. Files: lib/uniname/gen-uninames.lisp lib/uniname/uninames.h lib/uniname/uniname.c Depends-on: uniname/base attribute memcmp c99 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniname/uniname]) Makefile.am: if LIBUNISTRING_COMPILE_UNINAME_UNINAME lib_SOURCES += uniname/uniname.c endif Include: "uniname.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniname/uniname-tests�����������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0022116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniname/test-uninames.sh tests/uniname/test-uninames.c tests/uniname/UnicodeData.txt tests/uniname/HangulSyllableNames.txt tests/uniname/NameAliases.txt Depends-on: xalloc configure.ac: Makefile.am: # Unlike other libunistring modules, this test passes only when the # same version of uniname/uniname.c is used (even if it is newer). if LIBUNISTRING_COMPILE_UNINAME_UNINAME TESTS += uniname/test-uninames.sh check_PROGRAMS += test-uninames test_uninames_SOURCES = uniname/test-uninames.c test_uninames_LDADD = $(LDADD) @LIBINTL@ endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017436�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/base��������������������������������������������������������0000664�0000000�0000000�00000001027�14110572173�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for normalization forms of Unicode strings. Files: lib/uninorm.in.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [uninorm.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNINORM_H) uninorm.h: uninorm.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uninorm.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uninorm.h uninorm.h-t Include: "uninorm.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/canonical-decomposition�������������������������������������0000664�0000000�0000000�00000000650�14110572173�0024163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Canonical decomposition of Unicode characters. Files: lib/uninorm/canonical-decomposition.c Depends-on: uninorm/base uninorm/decomposition-table configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/canonical-decomposition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_CANONICAL_DECOMPOSITION lib_SOURCES += uninorm/canonical-decomposition.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/canonical-decomposition-tests�������������������������������0000664�0000000�0000000�00000000516�14110572173�0025324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-canonical-decomposition.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-canonical-decomposition check_PROGRAMS += test-canonical-decomposition test_canonical_decomposition_SOURCES = uninorm/test-canonical-decomposition.c test_canonical_decomposition_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/compat-decomposition����������������������������������������0000664�0000000�0000000�00000000535�14110572173�0023521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compatibility decomposition of Unicode characters. Files: lib/uninorm/decompose-internal.h lib/uninorm/compat-decomposition.c Depends-on: uninorm/base uninorm/decomposition configure.ac: Makefile.am: lib_SOURCES += uninorm/compat-decomposition.c Include: "uninorm/decompose-internal.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/compat-decomposition-tests����������������������������������0000664�0000000�0000000�00000000474�14110572173�0024663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-compat-decomposition.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-compat-decomposition check_PROGRAMS += test-compat-decomposition test_compat_decomposition_SOURCES = uninorm/test-compat-decomposition.c test_compat_decomposition_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/composition�������������������������������������������������0000664�0000000�0000000�00000002000�14110572173�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Composition of Unicode characters. Files: lib/uninorm/composition.c lib/uninorm/composition-table.gperf Depends-on: uninorm/base gperf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/composition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_COMPOSITION lib_SOURCES += uninorm/composition.c endif $(srcdir)/uninorm/composition-table.h: $(srcdir)/uninorm/composition-table.gperf $(V_GPERF)$(GPERF) -m 1 $(srcdir)/uninorm/composition-table.gperf > $(srcdir)/uninorm/composition-table.h-t1 \ && sed -e 's/^const/static const/' < $(srcdir)/uninorm/composition-table.h-t1 > $(srcdir)/uninorm/composition-table.h-t2 \ && mv $(srcdir)/uninorm/composition-table.h-t2 $(srcdir)/uninorm/composition-table.h BUILT_SOURCES += uninorm/composition-table.h MOSTLYCLEANFILES += uninorm/composition-table.h-t1 uninorm/composition-table.h-t2 MAINTAINERCLEANFILES += uninorm/composition-table.h EXTRA_DIST += uninorm/composition-table.h Include: "uninorm.h" License: LGPLv2+ Maintainer: all gnulib-20210822~d383792/modules/uninorm/composition-tests�������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0023064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-composition.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-composition check_PROGRAMS += test-composition test_composition_SOURCES = uninorm/test-composition.c test_composition_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decompose-internal������������������������������������������0000664�0000000�0000000�00000000464�14110572173�0023155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Decomposition of Unicode strings. Files: lib/uninorm/decompose-internal.h lib/uninorm/decompose-internal.c Depends-on: unitypes array-mergesort configure.ac: Makefile.am: lib_SOURCES += uninorm/decompose-internal.c Include: "uninorm/decompose-internal.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decomposing-form��������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0022631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Decomposing variant of a normalization form. Files: lib/uninorm/decomposing-form.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.5], [uninorm/decomposing-form]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_DECOMPOSING_FORM lib_SOURCES += uninorm/decomposing-form.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decomposing-form-tests��������������������������������������0000664�0000000�0000000�00000000526�14110572173�0023774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-decomposing-form.c tests/macros.h Depends-on: uninorm/nfc uninorm/nfd uninorm/nfkc uninorm/nfkd configure.ac: Makefile.am: TESTS += test-decomposing-form check_PROGRAMS += test-decomposing-form test_decomposing_form_SOURCES = uninorm/test-decomposing-form.c test_decomposing_form_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decomposition�����������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0022231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Decomposition of Unicode characters. Files: lib/uninorm/decomposition.c Depends-on: uninorm/base uninorm/decomposition-table configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/decomposition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_DECOMPOSITION lib_SOURCES += uninorm/decomposition.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decomposition-table�����������������������������������������0000664�0000000�0000000�00000000617�14110572173�0023326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Decomposition of Unicode characters. Files: lib/uninorm/decomposition-table.h lib/uninorm/decomposition-table.c lib/uninorm/decomposition-table1.h lib/uninorm/decomposition-table2.h Depends-on: uninorm/base configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += uninorm/decomposition-table.c Include: "uninorm/decomposition-table.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/decomposition-tests�����������������������������������������0000664�0000000�0000000�00000000422�14110572173�0023373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-decomposition.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-decomposition check_PROGRAMS += test-decomposition test_decomposition_SOURCES = uninorm/test-decomposition.c test_decomposition_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/filter������������������������������������������������������0000664�0000000�0000000�00000000706�14110572173�0020651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization of a stream of Unicode characters. Files: lib/uninorm/uninorm-filter.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base unictype/combining-class uninorm/decompose-internal malloc-posix configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/filter]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_FILTER lib_SOURCES += uninorm/uninorm-filter.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/filter-tests������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0022005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-uninorm-filter-nfc.c tests/macros.h Depends-on: unistr/u32-cmp uninorm/nfc configure.ac: Makefile.am: TESTS += test-uninorm-filter-nfc check_PROGRAMS += test-uninorm-filter-nfc test_uninorm_filter_nfc_SOURCES = uninorm/test-uninorm-filter-nfc.c test_uninorm_filter_nfc_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfc���������������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Canonical normalization of Unicode strings. Files: lib/uninorm/nfc.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base uninorm/canonical-decomposition uninorm/composition uninorm/nfd configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/nfc]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFC lib_SOURCES += uninorm/nfc.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfc-tests���������������������������������������������������0000664�0000000�0000000�00000001537�14110572173�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-nfc.c tests/uninorm/test-u8-nfc.c tests/uninorm/test-u16-nfc.c tests/uninorm/test-u32-nfc.c tests/uninorm/test-u32-nfc-big.sh tests/uninorm/test-u32-nfc-big.c tests/uninorm/test-u32-normalize-big.h tests/uninorm/test-u32-normalize-big.c tests/uninorm/NormalizationTest.txt tests/macros.h Depends-on: unistr/u8-cmp unistr/u16-cmp unistr/u32-cmp unistr/u32-strlen xalloc configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-nfc uninorm/test-u32-nfc-big.sh check_PROGRAMS += test-nfc test-u32-nfc-big test_nfc_SOURCES = \ uninorm/test-nfc.c \ uninorm/test-u8-nfc.c \ uninorm/test-u16-nfc.c \ uninorm/test-u32-nfc.c test_nfc_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_nfc_big_SOURCES = \ uninorm/test-u32-nfc-big.c \ uninorm/test-u32-normalize-big.c test_u32_nfc_big_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfd���������������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Canonical decomposition of Unicode strings. Files: lib/uninorm/nfd.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base uninorm/canonical-decomposition configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/nfd]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFD lib_SOURCES += uninorm/nfd.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfd-tests���������������������������������������������������0000664�0000000�0000000�00000001540�14110572173�0021270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-nfd.c tests/uninorm/test-u8-nfd.c tests/uninorm/test-u16-nfd.c tests/uninorm/test-u32-nfd.c tests/uninorm/test-u32-nfd-big.sh tests/uninorm/test-u32-nfd-big.c tests/uninorm/test-u32-normalize-big.h tests/uninorm/test-u32-normalize-big.c tests/uninorm/NormalizationTest.txt tests/macros.h Depends-on: unistr/u8-cmp unistr/u16-cmp unistr/u32-cmp unistr/u32-strlen xalloc configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-nfd uninorm/test-u32-nfd-big.sh check_PROGRAMS += test-nfd test-u32-nfd-big test_nfd_SOURCES = \ uninorm/test-nfd.c \ uninorm/test-u8-nfd.c \ uninorm/test-u16-nfd.c \ uninorm/test-u32-nfd.c test_nfd_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_nfd_big_SOURCES = \ uninorm/test-u32-nfd-big.c \ uninorm/test-u32-normalize-big.c test_u32_nfd_big_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfkc��������������������������������������������������������0000664�0000000�0000000�00000000652�14110572173�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compatibility normalization of Unicode strings. Files: lib/uninorm/nfkc.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base uninorm/compat-decomposition uninorm/composition uninorm/nfkd configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/nfkc]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFKC lib_SOURCES += uninorm/nfkc.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfkc-tests��������������������������������������������������0000664�0000000�0000000�00000001563�14110572173�0021447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-nfkc.c tests/uninorm/test-u8-nfkc.c tests/uninorm/test-u16-nfkc.c tests/uninorm/test-u32-nfkc.c tests/uninorm/test-u32-nfkc-big.sh tests/uninorm/test-u32-nfkc-big.c tests/uninorm/test-u32-normalize-big.h tests/uninorm/test-u32-normalize-big.c tests/uninorm/NormalizationTest.txt tests/macros.h Depends-on: unistr/u8-cmp unistr/u16-cmp unistr/u32-cmp unistr/u32-strlen xalloc configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-nfkc uninorm/test-u32-nfkc-big.sh check_PROGRAMS += test-nfkc test-u32-nfkc-big test_nfkc_SOURCES = \ uninorm/test-nfkc.c \ uninorm/test-u8-nfkc.c \ uninorm/test-u16-nfkc.c \ uninorm/test-u32-nfkc.c test_nfkc_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_nfkc_big_SOURCES = \ uninorm/test-u32-nfkc-big.c \ uninorm/test-u32-normalize-big.c test_u32_nfkc_big_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfkd��������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compatibility decomposition of Unicode strings. Files: lib/uninorm/nfkd.c lib/uninorm/normalize-internal.h Depends-on: uninorm/base uninorm/compat-decomposition configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/nfkd]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFKD lib_SOURCES += uninorm/nfkd.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/nfkd-tests��������������������������������������������������0000664�0000000�0000000�00000001563�14110572173�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-nfkd.c tests/uninorm/test-u8-nfkd.c tests/uninorm/test-u16-nfkd.c tests/uninorm/test-u32-nfkd.c tests/uninorm/test-u32-nfkd-big.sh tests/uninorm/test-u32-nfkd-big.c tests/uninorm/test-u32-normalize-big.h tests/uninorm/test-u32-normalize-big.c tests/uninorm/NormalizationTest.txt tests/macros.h Depends-on: unistr/u8-cmp unistr/u16-cmp unistr/u32-cmp unistr/u32-strlen xalloc configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-nfkd uninorm/test-u32-nfkd-big.sh check_PROGRAMS += test-nfkd test-u32-nfkd-big test_nfkd_SOURCES = \ uninorm/test-nfkd.c \ uninorm/test-u8-nfkd.c \ uninorm/test-u16-nfkd.c \ uninorm/test-u32-nfkd.c test_nfkd_LDADD = $(LDADD) $(LIBUNISTRING) test_u32_nfkd_big_SOURCES = \ uninorm/test-u32-nfkd-big.c \ uninorm/test-u32-normalize-big.c test_u32_nfkd_big_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normalize�����������������������������������������������0000664�0000000�0000000�00000001111�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization of UTF-16 strings. Files: lib/uninorm/u16-normalize.c lib/uninorm/normalize-internal.h lib/uninorm/u-normalize-internal.h Depends-on: uninorm/base unistr/u16-mbtouc-unsafe unistr/u16-uctomb unistr/u16-cpy unictype/combining-class uninorm/decompose-internal configure.ac: gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u16-normalize]) gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u16-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMALIZE lib_SOURCES += uninorm/u16-normalize.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normcmp�������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0021453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization insensitive comparison of UTF-16 strings. Files: lib/uninorm/u16-normcmp.c lib/uninorm/u-normcmp.h Depends-on: uninorm/base uninorm/u16-normalize unistr/u16-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u16-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMCMP lib_SOURCES += uninorm/u16-normcmp.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normcmp-tests�������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u16-normcmp.c tests/uninorm/test-u16-normcmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u16-normcmp check_PROGRAMS += test-u16-normcmp test_u16_normcmp_SOURCES = uninorm/test-u16-normcmp.c test_u16_normcmp_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normcoll������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0021625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, normalization insensitive comparison of UTF-16 strings. Files: lib/uninorm/u16-normcoll.c lib/uninorm/u-normcoll.h Depends-on: uninorm/base uninorm/u16-normxfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u16-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMCOLL lib_SOURCES += uninorm/u16-normcoll.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normcoll-tests������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u16-normcoll.c tests/uninorm/test-u16-normcmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u16-normcoll check_PROGRAMS += test-u16-normcoll test_u16_normcoll_SOURCES = uninorm/test-u16-normcoll.c test_u16_normcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u16-normxfrm������������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0021644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for comparison of UTF-16 strings. Files: lib/uninorm/u16-normxfrm.c lib/uninorm/u-normxfrm.h Depends-on: uninorm/base uninorm/u16-normalize uniconv/u16-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u16-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMXFRM lib_SOURCES += uninorm/u16-normxfrm.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normalize�����������������������������������������������0000664�0000000�0000000�00000001077�14110572173�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization of UTF-32 strings. Files: lib/uninorm/u32-normalize.c lib/uninorm/normalize-internal.h lib/uninorm/u-normalize-internal.h Depends-on: uninorm/base unistr/u32-mbtouc-unsafe unistr/u32-uctomb unistr/u32-cpy unictype/combining-class uninorm/decompose-internal configure.ac: gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u32-normalize]) gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u32-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMALIZE lib_SOURCES += uninorm/u32-normalize.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normcmp�������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0021451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization insensitive comparison of UTF-32 strings. Files: lib/uninorm/u32-normcmp.c lib/uninorm/u-normcmp.h Depends-on: uninorm/base uninorm/u32-normalize unistr/u32-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u32-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMCMP lib_SOURCES += uninorm/u32-normcmp.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normcmp-tests�������������������������������������������0000664�0000000�0000000�00000000463�14110572173�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u32-normcmp.c tests/uninorm/test-u32-normcmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u32-normcmp check_PROGRAMS += test-u32-normcmp test_u32_normcmp_SOURCES = uninorm/test-u32-normcmp.c test_u32_normcmp_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normcoll������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0021623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, normalization insensitive comparison of UTF-32 strings. Files: lib/uninorm/u32-normcoll.c lib/uninorm/u-normcoll.h Depends-on: uninorm/base uninorm/u32-normxfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u32-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMCOLL lib_SOURCES += uninorm/u32-normcoll.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normcoll-tests������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u32-normcoll.c tests/uninorm/test-u32-normcmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u32-normcoll check_PROGRAMS += test-u32-normcoll test_u32_normcoll_SOURCES = uninorm/test-u32-normcoll.c test_u32_normcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u32-normxfrm������������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for comparison of UTF-32 strings. Files: lib/uninorm/u32-normxfrm.c lib/uninorm/u-normxfrm.h Depends-on: uninorm/base uninorm/u32-normalize uniconv/u32-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u32-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMXFRM lib_SOURCES += uninorm/u32-normxfrm.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normalize������������������������������������������������0000664�0000000�0000000�00000001100�14110572173�0021703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization of UTF-8 strings. Files: lib/uninorm/u8-normalize.c lib/uninorm/normalize-internal.h lib/uninorm/u-normalize-internal.h Depends-on: uninorm/base unistr/u8-mbtouc-unsafe unistr/u8-uctomb unistr/u8-cpy unictype/combining-class uninorm/decompose-internal configure.ac: gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u8-normalize]) gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u8-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMALIZE lib_SOURCES += uninorm/u8-normalize.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normcmp��������������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Normalization insensitive comparison of UTF-8 strings. Files: lib/uninorm/u8-normcmp.c lib/uninorm/u-normcmp.h Depends-on: uninorm/base uninorm/u8-normalize unistr/u8-cmp2 minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u8-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMCMP lib_SOURCES += uninorm/u8-normcmp.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normcmp-tests��������������������������������������������0000664�0000000�0000000�00000000454�14110572173�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u8-normcmp.c tests/uninorm/test-u8-normcmp.h tests/macros.h Depends-on: uninorm/nfd configure.ac: Makefile.am: TESTS += test-u8-normcmp check_PROGRAMS += test-u8-normcmp test_u8_normcmp_SOURCES = uninorm/test-u8-normcmp.c test_u8_normcmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normcoll�������������������������������������������������0000664�0000000�0000000�00000000665�14110572173�0021547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent, normalization insensitive comparison of UTF-8 strings. Files: lib/uninorm/u8-normcoll.c lib/uninorm/u-normcoll.h Depends-on: uninorm/base uninorm/u8-normxfrm memcmp2 configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u8-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMCOLL lib_SOURCES += uninorm/u8-normcoll.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normcoll-tests�������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0022707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uninorm/test-u8-normcoll.c tests/uninorm/test-u8-normcmp.h tests/macros.h Depends-on: uninorm/nfc configure.ac: Makefile.am: TESTS += test-u8-normcoll check_PROGRAMS += test-u8-normcoll test_u8_normcoll_SOURCES = uninorm/test-u8-normcoll.c test_u8_normcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uninorm/u8-normxfrm�������������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0021565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent transformation for comparison of UTF-8 strings. Files: lib/uninorm/u8-normxfrm.c lib/uninorm/u-normxfrm.h Depends-on: uninorm/base uninorm/u8-normalize uniconv/u8-conv-to-enc localcharset amemxfrm configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uninorm/u8-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMXFRM lib_SOURCES += uninorm/u8-normxfrm.c endif Include: "uninorm.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������gnulib-20210822~d383792/modules/unistd��������������������������������������������������������������0000664�0000000�0000000�00000027050�14110572173�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <unistd.h>. Files: m4/unistd_h.m4 lib/unistd.c lib/unistd.in.h m4/off_t.m4 m4/pid_t.m4 Depends-on: extern-inline include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t stddef sys_types configure.ac: gl_UNISTD_H gl_UNISTD_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += unistd.h lib_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GNULIB_MDA_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -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 && \ mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t Include: <unistd.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistd-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0020706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unistd-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-unistd-c++ check_PROGRAMS += test-unistd-c++ test_unistd_c___SOURCES = test-unistd-c++.cc test_unistd_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIBSOCKET) $(LIB_GETLOGIN) endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistd-safer��������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: File descriptor functions that avoid clobbering STD{IN,OUT,ERR}_FILENO. Files: lib/unistd--.h lib/dup-safer.c lib/fd-safer.c lib/pipe-safer.c lib/unistd-safer.h m4/unistd-safer.m4 Depends-on: fcntl unistd pipe-posix configure.ac: gl_UNISTD_SAFER Makefile.am: lib_SOURCES += dup-safer.c fd-safer.c pipe-safer.c Include: "unistd-safer.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistd-safer-tests��������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup-safer.c tests/macros.h Depends-on: binary-io cloexec close dup fd-safer-flag getdtablesize msvc-nothrow stdbool configure.ac: Makefile.am: TESTS += test-dup-safer check_PROGRAMS += test-dup-safer ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistd-tests��������������������������������������������������������0000664�0000000�0000000�00000000220�14110572173�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unistd.c Depends-on: verify unistd-c++-tests configure.ac: Makefile.am: TESTS += test-unistd check_PROGRAMS += test-unistd ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/�����������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017605�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/base�������������������������������������������������������0000664�0000000�0000000�00000001037�14110572173�0020443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for formatted output to strings. Files: lib/unistdio.in.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unistdio.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNISTDIO_H) unistdio.h: unistdio.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unistdio.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unistdio.h unistdio.h-t Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u-printf-args����������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fetching a printf argument list. Files: lib/unistdio/u-printf-args.h lib/unistdio/u-printf-args.c lib/printf-args.h lib/printf-args.c m4/vasnprintf.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 Depends-on: unitypes wchar configure.ac: gl_PREREQ_PRINTF_ARGS Makefile.am: lib_SOURCES += unistdio/u-printf-args.c Include: "unistdio/u-printf-args.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-asnprintf����������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0022152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u16-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u16-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_ASNPRINTF lib_SOURCES += unistdio/u16-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-asnprintf-tests����������������������������������������0000664�0000000�0000000�00000000554�14110572173�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u16-asnprintf1.c tests/unistdio/test-u16-asnprintf1.h tests/unistdio/test-u16-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-asnprintf1 check_PROGRAMS += test-u16-asnprintf1 test_u16_asnprintf1_SOURCES = unistdio/test-u16-asnprintf1.c test_u16_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-asprintf�����������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0021772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation. Files: lib/unistdio/u16-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u16-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_ASPRINTF lib_SOURCES += unistdio/u16-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-printf-parse�������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parsing an UTF-16 format string. Files: lib/unistdio/u-printf-parse.h lib/unistdio/u16-printf-parse.c lib/printf-parse.h lib/printf-parse.c m4/vasnprintf.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 Depends-on: unistdio/u-printf-args stdint xsize configure.ac: gl_PREREQ_PRINTF_PARSE Makefile.am: lib_SOURCES += unistdio/u16-printf-parse.c Include: "unistdio/u-printf-parse.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-snprintf�����������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-16 string. Files: lib/unistdio/u16-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u16-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_SNPRINTF lib_SOURCES += unistdio/u16-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-sprintf������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0021624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string. Files: lib/unistdio/u16-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u16-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_SPRINTF lib_SOURCES += unistdio/u16-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-asnprintf������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u16-u16-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u16-u16-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_ASNPRINTF lib_SOURCES += unistdio/u16-u16-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-asprintf�������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation. Files: lib/unistdio/u16-u16-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u16-u16-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_ASPRINTF lib_SOURCES += unistdio/u16-u16-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-snprintf�������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-16 string. Files: lib/unistdio/u16-u16-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u16-u16-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_SNPRINTF lib_SOURCES += unistdio/u16-u16-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-sprintf��������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string. Files: lib/unistdio/u16-u16-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u16-u16-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_SPRINTF lib_SOURCES += unistdio/u16-u16-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-vasnprintf�����������������������������������������0000664�0000000�0000000�00000001771�14110572173�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-16 strings. Files: lib/unistdio/u16-u16-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/u16-printf-parse unistdio/u-printf-args uniconv/u16-conv-from-enc unistr/u16-cpy unistr/u16-set unistr/u16-mbsnlen unistr/u8-to-u16 unistr/u32-to-u16 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_VASNPRINTF lib_SOURCES += unistdio/u16-u16-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������gnulib-20210822~d383792/modules/unistdio/u16-u16-vasprintf������������������������������������������0000664�0000000�0000000�00000000730�14110572173�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation. Files: lib/unistdio/u16-u16-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u16-u16-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_VASPRINTF lib_SOURCES += unistdio/u16-u16-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-vsnprintf������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-16 string. Files: lib/unistdio/u16-u16-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u16-u16-vasnprintf unistr/u16-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_VSNPRINTF lib_SOURCES += unistdio/u16-u16-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-u16-vsprintf�������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string. Files: lib/unistdio/u16-u16-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u16-u16-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-u16-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_U16_VSPRINTF lib_SOURCES += unistdio/u16-u16-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vasnprintf���������������������������������������������0000664�0000000�0000000�00000001751�14110572173�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-16 strings. Files: lib/unistdio/u16-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/ulc-printf-parse unistdio/u-printf-args uniconv/u16-conv-from-enc unistr/u16-cpy unistr/u16-set unistr/u16-mbsnlen unistr/u8-to-u16 unistr/u32-to-u16 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_VASNPRINTF lib_SOURCES += unistdio/u16-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������gnulib-20210822~d383792/modules/unistdio/u16-vasnprintf-tests���������������������������������������0000664�0000000�0000000�00000002162�14110572173�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u16-vasnprintf1.c tests/unistdio/test-u16-asnprintf1.h tests/unistdio/test-u16-printf1.h tests/unistdio/test-u16-vasnprintf2.sh tests/unistdio/test-u16-vasnprintf2.c tests/unistdio/test-u16-vasnprintf3.sh tests/unistdio/test-u16-vasnprintf3.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: unistr/u16-cmp unistr/u16-cpy unistr/u16-strcmp unistr/u16-strlen setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-u16-vasnprintf1 unistdio/test-u16-vasnprintf2.sh unistdio/test-u16-vasnprintf3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' 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_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c test_u16_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vasprintf����������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0022156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string, with automatic memory allocation. Files: lib/unistdio/u16-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u16-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_VASPRINTF lib_SOURCES += unistdio/u16-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vasprintf-tests����������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u16-vasprintf1.c tests/unistdio/test-u16-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-vasprintf1 check_PROGRAMS += test-u16-vasprintf1 test_u16_vasprintf1_SOURCES = unistdio/test-u16-vasprintf1.c test_u16_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vsnprintf����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-16 string. Files: lib/unistdio/u16-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u16-vasnprintf unistr/u16-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_VSNPRINTF lib_SOURCES += unistdio/u16-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vsnprintf-tests����������������������������������������0000664�0000000�0000000�00000000530�14110572173�0023330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u16-vsnprintf1.c tests/unistdio/test-u16-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u16-vsnprintf1 check_PROGRAMS += test-u16-vsnprintf1 test_u16_vsnprintf1_SOURCES = unistdio/test-u16-vsnprintf1.c test_u16_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vsprintf�����������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-16 string. Files: lib/unistdio/u16-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u16-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u16-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U16_VSPRINTF lib_SOURCES += unistdio/u16-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u16-vsprintf-tests�����������������������������������������0000664�0000000�0000000�00000000522�14110572173�0023153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u16-vsprintf1.c tests/unistdio/test-u16-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u16-vsprintf1 check_PROGRAMS += test-u16-vsprintf1 test_u16_vsprintf1_SOURCES = unistdio/test-u16-vsprintf1.c test_u16_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-asnprintf����������������������������������������������0000664�0000000�0000000�00000000726�14110572173�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u32-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u32-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_ASNPRINTF lib_SOURCES += unistdio/u32-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-asnprintf-tests����������������������������������������0000664�0000000�0000000�00000000554�14110572173�0023307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u32-asnprintf1.c tests/unistdio/test-u32-asnprintf1.h tests/unistdio/test-u32-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-asnprintf1 check_PROGRAMS += test-u32-asnprintf1 test_u32_asnprintf1_SOURCES = unistdio/test-u32-asnprintf1.c test_u32_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-asprintf�����������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0021770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation. Files: lib/unistdio/u32-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u32-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_ASPRINTF lib_SOURCES += unistdio/u32-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-printf-parse�������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parsing an UTF-32 format string. Files: lib/unistdio/u-printf-parse.h lib/unistdio/u32-printf-parse.c lib/printf-parse.h lib/printf-parse.c m4/vasnprintf.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 Depends-on: unistdio/u-printf-args stdint xsize configure.ac: gl_PREREQ_PRINTF_PARSE Makefile.am: lib_SOURCES += unistdio/u32-printf-parse.c Include: "unistdio/u-printf-parse.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-snprintf�����������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0022004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-32 string. Files: lib/unistdio/u32-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u32-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_SNPRINTF lib_SOURCES += unistdio/u32-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-sprintf������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string. Files: lib/unistdio/u32-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u32-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_SPRINTF lib_SOURCES += unistdio/u32-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-asnprintf������������������������������������������0000664�0000000�0000000�00000000752�14110572173�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u32-u32-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u32-u32-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_ASNPRINTF lib_SOURCES += unistdio/u32-u32-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-asprintf�������������������������������������������0000664�0000000�0000000�00000000714�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation. Files: lib/unistdio/u32-u32-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u32-u32-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_ASPRINTF lib_SOURCES += unistdio/u32-u32-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-snprintf�������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-32 string. Files: lib/unistdio/u32-u32-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u32-u32-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_SNPRINTF lib_SOURCES += unistdio/u32-u32-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-sprintf��������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string. Files: lib/unistdio/u32-u32-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u32-u32-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_SPRINTF lib_SOURCES += unistdio/u32-u32-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-vasnprintf�����������������������������������������0000664�0000000�0000000�00000001771�14110572173�0022746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-32 strings. Files: lib/unistdio/u32-u32-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/u32-printf-parse unistdio/u-printf-args uniconv/u32-conv-from-enc unistr/u32-cpy unistr/u32-set unistr/u32-mbsnlen unistr/u8-to-u32 unistr/u16-to-u32 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_VASNPRINTF lib_SOURCES += unistdio/u32-u32-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������gnulib-20210822~d383792/modules/unistdio/u32-u32-vasprintf������������������������������������������0000664�0000000�0000000�00000000730�14110572173�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation. Files: lib/unistdio/u32-u32-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u32-u32-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_VASPRINTF lib_SOURCES += unistdio/u32-u32-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-vsnprintf������������������������������������������0000664�0000000�0000000�00000000721�14110572173�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-32 string. Files: lib/unistdio/u32-u32-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u32-u32-vasnprintf unistr/u32-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_VSNPRINTF lib_SOURCES += unistdio/u32-u32-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-u32-vsprintf�������������������������������������������0000664�0000000�0000000�00000000670�14110572173�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string. Files: lib/unistdio/u32-u32-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u32-u32-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-u32-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_U32_VSPRINTF lib_SOURCES += unistdio/u32-u32-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vasnprintf���������������������������������������������0000664�0000000�0000000�00000001751�14110572173�0022335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-32 strings. Files: lib/unistdio/u32-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/ulc-printf-parse unistdio/u-printf-args uniconv/u32-conv-from-enc unistr/u32-cpy unistr/u32-set unistr/u32-mbsnlen unistr/u8-to-u32 unistr/u16-to-u32 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_VASNPRINTF lib_SOURCES += unistdio/u32-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������gnulib-20210822~d383792/modules/unistdio/u32-vasnprintf-tests���������������������������������������0000664�0000000�0000000�00000002162�14110572173�0023472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u32-vasnprintf1.c tests/unistdio/test-u32-asnprintf1.h tests/unistdio/test-u32-printf1.h tests/unistdio/test-u32-vasnprintf2.sh tests/unistdio/test-u32-vasnprintf2.c tests/unistdio/test-u32-vasnprintf3.sh tests/unistdio/test-u32-vasnprintf3.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: unistr/u32-cmp unistr/u32-cpy unistr/u32-strcmp unistr/u32-strlen setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-u32-vasnprintf1 unistdio/test-u32-vasnprintf2.sh unistdio/test-u32-vasnprintf3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' 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_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c test_u32_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vasprintf����������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0022154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string, with automatic memory allocation. Files: lib/unistdio/u32-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u32-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_VASPRINTF lib_SOURCES += unistdio/u32-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vasprintf-tests����������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u32-vasprintf1.c tests/unistdio/test-u32-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-vasprintf1 check_PROGRAMS += test-u32-vasprintf1 test_u32_vasprintf1_SOURCES = unistdio/test-u32-vasprintf1.c test_u32_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vsnprintf����������������������������������������������0000664�0000000�0000000�00000000675�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-32 string. Files: lib/unistdio/u32-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u32-vasnprintf unistr/u32-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_VSNPRINTF lib_SOURCES += unistdio/u32-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vsnprintf-tests����������������������������������������0000664�0000000�0000000�00000000530�14110572173�0023326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u32-vsnprintf1.c tests/unistdio/test-u32-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u32-vsnprintf1 check_PROGRAMS += test-u32-vsnprintf1 test_u32_vsnprintf1_SOURCES = unistdio/test-u32-vsnprintf1.c test_u32_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vsprintf�����������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0022016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-32 string. Files: lib/unistdio/u32-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u32-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u32-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U32_VSPRINTF lib_SOURCES += unistdio/u32-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u32-vsprintf-tests�����������������������������������������0000664�0000000�0000000�00000000522�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u32-vsprintf1.c tests/unistdio/test-u32-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u32-vsprintf1 check_PROGRAMS += test-u32-vsprintf1 test_u32_vsprintf1_SOURCES = unistdio/test-u32-vsprintf1.c test_u32_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-asnprintf�����������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u8-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u8-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_ASNPRINTF lib_SOURCES += unistdio/u8-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-asnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000544�14110572173�0023231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u8-asnprintf1.c tests/unistdio/test-u8-asnprintf1.h tests/unistdio/test-u8-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-asnprintf1 check_PROGRAMS += test-u8-asnprintf1 test_u8_asnprintf1_SOURCES = unistdio/test-u8-asnprintf1.c test_u8_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-asprintf������������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation. Files: lib/unistdio/u8-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u8-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_ASPRINTF lib_SOURCES += unistdio/u8-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-printf-parse��������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0022501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parsing an UTF-8 format string. Files: lib/unistdio/u-printf-parse.h lib/unistdio/u8-printf-parse.c lib/printf-parse.h lib/printf-parse.c m4/vasnprintf.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 Depends-on: unistdio/u-printf-args stdint xsize configure.ac: gl_PREREQ_PRINTF_PARSE Makefile.am: lib_SOURCES += unistdio/u8-printf-parse.c Include: "unistdio/u-printf-parse.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-snprintf������������������������������������������������0000664�0000000�0000000�00000000634�14110572173�0021730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-8 string. Files: lib/unistdio/u8-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u8-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_SNPRINTF lib_SOURCES += unistdio/u8-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-sprintf�������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string. Files: lib/unistdio/u8-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u8-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_SPRINTF lib_SOURCES += unistdio/u8-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-asnprintf��������������������������������������������0000664�0000000�0000000�00000000737�14110572173�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation and bounded output size. Files: lib/unistdio/u8-u8-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/u8-u8-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_ASNPRINTF lib_SOURCES += unistdio/u8-u8-asnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-asprintf���������������������������������������������0000664�0000000�0000000�00000000701�14110572173�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation. Files: lib/unistdio/u8-u8-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/u8-u8-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_ASPRINTF lib_SOURCES += unistdio/u8-u8-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-snprintf���������������������������������������������0000664�0000000�0000000�00000000653�14110572173�0022263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-8 string. Files: lib/unistdio/u8-u8-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/u8-u8-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_SNPRINTF lib_SOURCES += unistdio/u8-u8-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-sprintf����������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0022101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string. Files: lib/unistdio/u8-u8-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/u8-u8-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_SPRINTF lib_SOURCES += unistdio/u8-u8-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-vasnprintf�������������������������������������������0000664�0000000�0000000�00000001752�14110572173�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-8 strings. Files: lib/unistdio/u8-u8-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/u8-printf-parse unistdio/u-printf-args uniconv/u8-conv-from-enc unistr/u8-cpy unistr/u8-set unistr/u8-mbsnlen unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_VASNPRINTF lib_SOURCES += unistdio/u8-u8-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-vasprintf��������������������������������������������0000664�0000000�0000000�00000000715�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation. Files: lib/unistdio/u8-u8-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u8-u8-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_VASPRINTF lib_SOURCES += unistdio/u8-u8-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-vsnprintf��������������������������������������������0000664�0000000�0000000�00000000705�14110572173�0022447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-8 string. Files: lib/unistdio/u8-u8-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u8-u8-vasnprintf unistr/u8-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_VSNPRINTF lib_SOURCES += unistdio/u8-u8-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-u8-vsprintf���������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0022275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string. Files: lib/unistdio/u8-u8-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u8-u8-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-u8-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_U8_VSPRINTF lib_SOURCES += unistdio/u8-u8-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vasnprintf����������������������������������������������0000664�0000000�0000000�00000001737�14110572173�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to UTF-8 strings. Files: lib/unistdio/u8-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/ulc-printf-parse unistdio/u-printf-args uniconv/u8-conv-from-enc unistr/u8-cpy unistr/u8-set unistr/u8-mbsnlen unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_VASNPRINTF lib_SOURCES += unistdio/u8-vasnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vasnprintf-tests����������������������������������������0000664�0000000�0000000�00000002130�14110572173�0023410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u8-vasnprintf1.c tests/unistdio/test-u8-asnprintf1.h tests/unistdio/test-u8-printf1.h tests/unistdio/test-u8-vasnprintf2.sh tests/unistdio/test-u8-vasnprintf2.c tests/unistdio/test-u8-vasnprintf3.sh tests/unistdio/test-u8-vasnprintf3.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: unistr/u8-cmp unistr/u8-cpy unistr/u8-strcmp unistr/u8-strlen setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-u8-vasnprintf1 unistdio/test-u8-vasnprintf2.sh unistdio/test-u8-vasnprintf3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' 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_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c test_u8_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vasprintf�����������������������������������������������0000664�0000000�0000000�00000000676�14110572173�0022107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string, with automatic memory allocation. Files: lib/unistdio/u8-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/u8-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_VASPRINTF lib_SOURCES += unistdio/u8-vasprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vasprintf-tests�����������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u8-vasprintf1.c tests/unistdio/test-u8-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-vasprintf1 check_PROGRAMS += test-u8-vasprintf1 test_u8_vasprintf1_SOURCES = unistdio/test-u8-vasprintf1.c test_u8_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vsnprintf�����������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0022123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length UTF-8 string. Files: lib/unistdio/u8-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/u8-vasnprintf unistr/u8-cpy errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_VSNPRINTF lib_SOURCES += unistdio/u8-vsnprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vsnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000521�14110572173�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u8-vsnprintf1.c tests/unistdio/test-u8-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u8-vsnprintf1 check_PROGRAMS += test-u8-vsnprintf1 test_u8_vsnprintf1_SOURCES = unistdio/test-u8-vsnprintf1.c test_u8_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vsprintf������������������������������������������������0000664�0000000�0000000�00000000636�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to an UTF-8 string. Files: lib/unistdio/u8-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/u8-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistdio/u8-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_U8_VSPRINTF lib_SOURCES += unistdio/u8-vsprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/u8-vsprintf-tests������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0023074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-u8-vsprintf1.c tests/unistdio/test-u8-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-u8-vsprintf1 check_PROGRAMS += test-u8-vsprintf1 test_u8_vsprintf1_SOURCES = unistdio/test-u8-vsprintf1.c test_u8_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-asnprintf����������������������������������������������0000664�0000000�0000000�00000000746�14110572173�0022324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a string, with automatic memory allocation and bounded output size. Files: lib/unistdio/ulc-asnprintf.c lib/unistdio/u-asnprintf.h Depends-on: unistdio/base unistdio/ulc-vasnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_ASNPRINTF lib_SOURCES += unistdio/ulc-asnprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������gnulib-20210822~d383792/modules/unistdio/ulc-asnprintf-tests����������������������������������������0000664�0000000�0000000�00000000573�14110572173�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-ulc-asnprintf1.c tests/unistdio/test-ulc-asnprintf1.h tests/unistdio/test-ulc-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: 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) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-asprintf�����������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a string, with automatic memory allocation. Files: lib/unistdio/ulc-asprintf.c lib/unistdio/u-asprintf.h Depends-on: unistdio/base unistdio/ulc-vasprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_ASPRINTF lib_SOURCES += unistdio/ulc-asprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-fprintf������������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0021765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Print formatted output to a stream. Files: lib/unistdio/ulc-fprintf.c Depends-on: unistdio/base unistdio/ulc-vasnprintf fseterr errno configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-fprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_FPRINTF lib_SOURCES += unistdio/ulc-fprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-printf-parse�������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parsing an ASCII format string. Files: lib/unistdio/u-printf-parse.h lib/unistdio/ulc-printf-parse.c lib/printf-parse.h lib/printf-parse.c m4/vasnprintf.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 Depends-on: unistdio/u-printf-args stdint xsize c-ctype configure.ac: gl_PREREQ_PRINTF_PARSE Makefile.am: lib_SOURCES += unistdio/ulc-printf-parse.c Include: "unistdio/u-printf-parse.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-snprintf�����������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length string. Files: lib/unistdio/ulc-snprintf.c lib/unistdio/u-snprintf.h Depends-on: unistdio/base unistdio/ulc-vsnprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_SNPRINTF lib_SOURCES += unistdio/ulc-snprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-sprintf������������������������������������������������0000664�0000000�0000000�00000000612�14110572173�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a string. Files: lib/unistdio/ulc-sprintf.c lib/unistdio/u-sprintf.h Depends-on: unistdio/base unistdio/ulc-vsprintf configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_SPRINTF lib_SOURCES += unistdio/ulc-sprintf.c endif Include: "unistdio.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vasnprintf���������������������������������������������0000664�0000000�0000000�00000001733�14110572173�0022507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to strings. Files: lib/unistdio/ulc-vasnprintf.c lib/vasnprintf.c m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/exponentd.m4 Depends-on: unistdio/base unistdio/ulc-printf-parse unistdio/u-printf-args uniconv/u8-conv-to-enc uniconv/u16-conv-to-enc uniconv/u32-conv-to-enc unistr/u8-strlen unistr/u8-strmblen unistr/u16-strlen unistr/u16-strmblen unistr/u32-strlen unistr/u32-strmblen attribute mbsnlen isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno free-posix memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VASNPRINTF lib_SOURCES += unistdio/ulc-vasnprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vasnprintf-tests���������������������������������������0000664�0000000�0000000�00000002135�14110572173�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-ulc-vasnprintf1.c tests/unistdio/test-ulc-asnprintf1.h tests/unistdio/test-ulc-printf1.h tests/unistdio/test-ulc-vasnprintf2.sh tests/unistdio/test-ulc-vasnprintf2.c tests/unistdio/test-ulc-vasnprintf3.sh tests/unistdio/test-ulc-vasnprintf3.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-ulc-vasnprintf1 unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc-vasnprintf3.sh 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_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vasprintf����������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0022330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a string, with automatic memory allocation. Files: lib/unistdio/ulc-vasprintf.c lib/unistdio/u-vasprintf.h Depends-on: unistdio/base unistdio/ulc-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VASPRINTF lib_SOURCES += unistdio/ulc-vasprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vasprintf-tests����������������������������������������0000664�0000000�0000000�00000000526�14110572173�0023470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-ulc-vasprintf1.c tests/unistdio/test-ulc-printf1.h tests/macros.h Depends-on: configure.ac: Makefile.am: 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) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vfprintf�����������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Print formatted output to a stream. Files: lib/unistdio/ulc-vfprintf.c Depends-on: unistdio/base unistdio/ulc-vasnprintf fseterr errno configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-vfprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VFPRINTF lib_SOURCES += unistdio/ulc-vfprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vsnprintf����������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a fixed-length string. Files: lib/unistdio/ulc-vsnprintf.c lib/unistdio/u-vsnprintf.h Depends-on: unistdio/base unistdio/ulc-vasnprintf errno configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VSNPRINTF lib_SOURCES += unistdio/ulc-vsnprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vsnprintf-tests����������������������������������������0000664�0000000�0000000�00000000547�14110572173�0023510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-ulc-vsnprintf1.c tests/unistdio/test-ulc-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: 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) ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vsprintf�����������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0022172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Formatted output to a string. Files: lib/unistdio/ulc-vsprintf.c lib/unistdio/u-vsprintf.h Depends-on: unistdio/base unistdio/ulc-vasnprintf stdint errno configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [unistdio/ulc-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VSPRINTF lib_SOURCES += unistdio/ulc-vsprintf.c endif Include: "unistdio.h" Link: $(LIB_MBRTOWC) License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistdio/ulc-vsprintf-tests�����������������������������������������0000664�0000000�0000000�00000000541�14110572173�0023324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistdio/test-ulc-vsprintf1.c tests/unistdio/test-ulc-printf1.h tests/macros.h Depends-on: xalloc configure.ac: Makefile.am: 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) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017273�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/base���������������������������������������������������������0000664�0000000�0000000�00000001032�14110572173�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for elementary Unicode string functions. Files: lib/unistr.in.h m4/libunistring-base.m4 Depends-on: unitypes stdbool inline configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unistr.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNISTR_H) unistr.h: unistr.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unistr.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unistr.h unistr.h-t Include: "unistr.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-check����������������������������������������������������0000664�0000000�0000000�00000000474�14110572173�0020711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check UTF-16 string. Files: lib/unistr/u16-check.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-check]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CHECK lib_SOURCES += unistr/u16-check.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-check-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-check.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-check check_PROGRAMS += test-u16-check test_u16_check_SOURCES = unistr/test-u16-check.c test_u16_check_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-chr������������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in piece of UTF-16 string. Files: lib/unistr/u16-chr.c Depends-on: unistr/base unistr/u16-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-chr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CHR lib_SOURCES += unistr/u16-chr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-chr-tests������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-chr.c tests/unistr/test-chr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize unistr/u16-set unistr/u32-set unistr/u32-to-u16 configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-chr check_PROGRAMS += test-u16-chr test_u16_chr_SOURCES = unistr/test-u16-chr.c test_u16_chr_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cmp������������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-16 strings. Files: lib/unistr/u16-cmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-cmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CMP lib_SOURCES += unistr/u16-cmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cmp-tests������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0021552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-cmp.c tests/unistr/test-cmp.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-cmp check_PROGRAMS += test-u16-cmp test_u16_cmp_SOURCES = unistr/test-u16-cmp.c test_u16_cmp_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cmp2�����������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-16 strings with possibly different lengths. Files: lib/unistr/u16-cmp2.c lib/unistr/u-cmp2.h Depends-on: unistr/base unistr/u16-cmp minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-cmp2]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CMP2 lib_SOURCES += unistr/u16-cmp2.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cmp2-tests�����������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-cmp2.c tests/unistr/test-cmp2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-cmp2 check_PROGRAMS += test-u16-cmp2 test_u16_cmp2_SOURCES = unistr/test-u16-cmp2.c test_u16_cmp2_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cpy������������������������������������������������������0000664�0000000�0000000�00000000517�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-16 string. Files: lib/unistr/u16-cpy.c lib/unistr/u-cpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-cpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CPY lib_SOURCES += unistr/u16-cpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cpy-alloc������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0021516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-16 string. Files: lib/unistr/u16-cpy-alloc.c lib/unistr/u-cpy-alloc.h Depends-on: unistr/base malloc-posix configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-cpy-alloc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_CPY_ALLOC lib_SOURCES += unistr/u16-cpy-alloc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cpy-alloc-tests������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-cpy-alloc.c tests/unistr/test-cpy-alloc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-cpy-alloc check_PROGRAMS += test-u16-cpy-alloc test_u16_cpy_alloc_SOURCES = unistr/test-u16-cpy-alloc.c test_u16_cpy_alloc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-cpy-tests������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0021560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-cpy.c tests/unistr/test-cpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-cpy check_PROGRAMS += test-u16-cpy test_u16_cpy_SOURCES = unistr/test-u16-cpy.c test_u16_cpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-endswith�������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-16 strings. Files: lib/unistr/u16-endswith.c lib/unistr/u-endswith.h Depends-on: unistr/base unistr/u16-strlen unistr/u16-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-endswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_ENDSWITH lib_SOURCES += unistr/u16-endswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mblen����������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string. Files: lib/unistr/u16-mblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MBLEN lib_SOURCES += unistr/u16-mblen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mblen-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-mblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-mblen check_PROGRAMS += test-u16-mblen test_u16_mblen_SOURCES = unistr/test-u16-mblen.c test_u16_mblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbsnlen��������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0021271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Count characters in UTF-16 string. Files: lib/unistr/u16-mbsnlen.c Depends-on: unistr/base unistr/u16-mbtoucr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbsnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MBSNLEN lib_SOURCES += unistr/u16-mbsnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbsnlen-tests��������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0022423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-mbsnlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-mbsnlen check_PROGRAMS += test-u16-mbsnlen test_u16_mbsnlen_SOURCES = unistr/test-u16-mbsnlen.c test_u16_mbsnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtouc���������������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0021124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string. Files: lib/unistr/u16-mbtouc.c lib/unistr/u16-mbtouc-aux.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u16-mbtouc]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MBTOUC lib_SOURCES += unistr/u16-mbtouc.c unistr/u16-mbtouc-aux.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtouc-tests���������������������������������������������0000664�0000000�0000000�00000000435�14110572173�0022262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-mbtouc.c tests/unistr/test-u16-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-mbtouc check_PROGRAMS += test-u16-mbtouc test_u16_mbtouc_SOURCES = unistr/test-u16-mbtouc.c test_u16_mbtouc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtouc-unsafe��������������������������������������������0000664�0000000�0000000�00000000743�14110572173�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string. Files: lib/unistr/u16-mbtouc-unsafe.c lib/unistr/u16-mbtouc-unsafe-aux.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u16-mbtouc-unsafe]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbtouc-unsafe]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MBTOUC_UNSAFE lib_SOURCES += unistr/u16-mbtouc-unsafe.c unistr/u16-mbtouc-unsafe-aux.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtouc-unsafe-tests��������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-mbtouc-unsafe.c tests/unistr/test-u16-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-mbtouc-unsafe check_PROGRAMS += test-u16-mbtouc-unsafe test_u16_mbtouc_unsafe_SOURCES = unistr/test-u16-mbtouc-unsafe.c test_u16_mbtouc_unsafe_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtoucr��������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0021304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string, returning an error code upon failure. Files: lib/unistr/u16-mbtoucr.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u16-mbtoucr]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbtoucr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MBTOUCR lib_SOURCES += unistr/u16-mbtoucr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-mbtoucr-tests��������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0022440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-mbtoucr.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-mbtoucr check_PROGRAMS += test-u16-mbtoucr test_u16_mbtoucr_SOURCES = unistr/test-u16-mbtoucr.c test_u16_mbtoucr_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-move�����������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-16 string. Files: lib/unistr/u16-move.c lib/unistr/u-move.h Depends-on: unistr/base memmove configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-move]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_MOVE lib_SOURCES += unistr/u16-move.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-move-tests�����������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0021733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-move.c tests/unistr/test-move.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-move check_PROGRAMS += test-u16-move test_u16_move_SOURCES = unistr/test-u16-move.c test_u16_move_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-next�����������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over next character in UTF-16 string. Files: lib/unistr/u16-next.c Depends-on: unistr/base unistr/u16-strmbtouc configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_NEXT lib_SOURCES += unistr/u16-next.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-next-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-next.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-next check_PROGRAMS += test-u16-next test_u16_next_SOURCES = unistr/test-u16-next.c test_u16_next_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-prev�����������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over previous character in UTF-16 string. Files: lib/unistr/u16-prev.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_PREV lib_SOURCES += unistr/u16-prev.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-prev-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-prev.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-prev check_PROGRAMS += test-u16-prev test_u16_prev_SOURCES = unistr/test-u16-prev.c test_u16_prev_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-set������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fill UTF-16 string. Files: lib/unistr/u16-set.c lib/unistr/u-set.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-set]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_SET lib_SOURCES += unistr/u16-set.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-set-tests������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0021560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-set.c tests/unistr/test-set.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-set check_PROGRAMS += test-u16-set test_u16_set_SOURCES = unistr/test-u16-set.c test_u16_set_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-startswith�����������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-16 strings. Files: lib/unistr/u16-startswith.c lib/unistr/u-startswith.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-startswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STARTSWITH lib_SOURCES += unistr/u16-startswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-stpcpy���������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-16 string. Files: lib/unistr/u16-stpcpy.c lib/unistr/u-stpcpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-stpcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STPCPY lib_SOURCES += unistr/u16-stpcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-stpcpy-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-stpcpy.c tests/unistr/test-stpcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-stpcpy check_PROGRAMS += test-u16-stpcpy test_u16_stpcpy_SOURCES = unistr/test-u16-stpcpy.c test_u16_stpcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-stpncpy��������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-16 string. Files: lib/unistr/u16-stpncpy.c lib/unistr/u-stpncpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u16-stpncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STPNCPY lib_SOURCES += unistr/u16-stpncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-stpncpy-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-stpncpy.c tests/unistr/test-stpncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-stpncpy check_PROGRAMS += test-u16-stpncpy test_u16_stpncpy_SOURCES = unistr/test-u16-stpncpy.c test_u16_stpncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcat���������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-16 strings. Files: lib/unistr/u16-strcat.c lib/unistr/u-strcat.h Depends-on: unistr/base unistr/u16-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strcat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCAT lib_SOURCES += unistr/u16-strcat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcat-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strcat.c tests/unistr/test-strcat.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strcat check_PROGRAMS += test-u16-strcat test_u16_strcat_SOURCES = unistr/test-u16-strcat.c test_u16_strcat_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strchr���������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0021133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-16 string. Files: lib/unistr/u16-strchr.c Depends-on: unistr/base unistr/u16-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCHR lib_SOURCES += unistr/u16-strchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strchr-tests���������������������������������������������0000664�0000000�0000000�00000000733�14110572173�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strchr.c tests/unistr/test-strchr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize unistr/u16-set unistr/u32-set unistr/u32-to-u16 configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-strchr check_PROGRAMS += test-u16-strchr test_u16_strchr_SOURCES = unistr/test-u16-strchr.c test_u16_strchr_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcmp���������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0021135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-16 strings. Files: lib/unistr/u16-strcmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCMP lib_SOURCES += unistr/u16-strcmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcmp-tests���������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0022300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strcmp.c tests/unistr/test-u16-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strcmp check_PROGRAMS += test-u16-strcmp test_u16_strcmp_SOURCES = unistr/test-u16-strcmp.c test_u16_strcmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcoll��������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0021311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-16 strings using the collation rules of the current locale. Files: lib/unistr/u16-strcoll.c lib/unistr/u-strcoll.h Depends-on: unistr/base unistr/u16-strcmp uniconv/u16-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u16-strcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCOLL lib_SOURCES += unistr/u16-strcoll.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcoll-tests��������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0022446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strcoll.c tests/unistr/test-u16-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strcoll check_PROGRAMS += test-u16-strcoll test_u16_strcoll_SOURCES = unistr/test-u16-strcoll.c test_u16_strcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcpy���������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0021155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-16 string. Files: lib/unistr/u16-strcpy.c lib/unistr/u-strcpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCPY lib_SOURCES += unistr/u16-strcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcpy-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strcpy.c tests/unistr/test-strcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strcpy check_PROGRAMS += test-u16-strcpy test_u16_strcpy_SOURCES = unistr/test-u16-strcpy.c test_u16_strcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strcspn��������������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-16 string. Files: lib/unistr/u16-strcspn.c lib/unistr/u-strcspn.h Depends-on: unistr/base unistr/u16-strlen unistr/u16-strmbtouc unistr/u16-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strcspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRCSPN lib_SOURCES += unistr/u16-strcspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strdup���������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0021156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-16 string. Files: lib/unistr/u16-strdup.c lib/unistr/u-strdup.h Depends-on: unistr/base unistr/u16-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strdup]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRDUP lib_SOURCES += unistr/u16-strdup.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strdup-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strdup.c tests/unistr/test-strdup.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strdup check_PROGRAMS += test-u16-strdup test_u16_strdup_SOURCES = unistr/test-u16-strdup.c test_u16_strdup_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strlen���������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0021141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine length of UTF-16 string. Files: lib/unistr/u16-strlen.c lib/unistr/u-strlen.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRLEN lib_SOURCES += unistr/u16-strlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strlen-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strlen check_PROGRAMS += test-u16-strlen test_u16_strlen_SOURCES = unistr/test-u16-strlen.c test_u16_strlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strmblen�������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string. Files: lib/unistr/u16-strmblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strmblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRMBLEN lib_SOURCES += unistr/u16-strmblen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strmblen-tests�������������������������������������������0000664�0000000�0000000�00000000412�14110572173�0022612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strmblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strmblen check_PROGRAMS += test-u16-strmblen test_u16_strmblen_SOURCES = unistr/test-u16-strmblen.c test_u16_strmblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strmbtouc������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0021651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-16 string. Files: lib/unistr/u16-strmbtouc.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strmbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRMBTOUC lib_SOURCES += unistr/u16-strmbtouc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strmbtouc-tests������������������������������������������0000664�0000000�0000000�00000000420�14110572173�0023005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strmbtouc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strmbtouc check_PROGRAMS += test-u16-strmbtouc test_u16_strmbtouc_SOURCES = unistr/test-u16-strmbtouc.c test_u16_strmbtouc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncat��������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-16 strings. Files: lib/unistr/u16-strncat.c lib/unistr/u-strncat.h Depends-on: unistr/base unistr/u16-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strncat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRNCAT lib_SOURCES += unistr/u16-strncat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncat-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strncat.c tests/unistr/test-strncat.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-strncat check_PROGRAMS += test-u16-strncat test_u16_strncat_SOURCES = unistr/test-u16-strncat.c test_u16_strncat_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncmp��������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-16 strings. Files: lib/unistr/u16-strncmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strncmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRNCMP lib_SOURCES += unistr/u16-strncmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncmp-tests��������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0022453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strncmp.c tests/unistr/test-strncmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strncmp check_PROGRAMS += test-u16-strncmp test_u16_strncmp_SOURCES = unistr/test-u16-strncmp.c test_u16_strncmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncpy��������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0021331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-16 string. Files: lib/unistr/u16-strncpy.c lib/unistr/u-strncpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRNCPY lib_SOURCES += unistr/u16-strncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strncpy-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strncpy.c tests/unistr/test-strncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-strncpy check_PROGRAMS += test-u16-strncpy test_u16_strncpy_SOURCES = unistr/test-u16-strncpy.c test_u16_strncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strnlen��������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine bounded length of UTF-16 string. Files: lib/unistr/u16-strnlen.c lib/unistr/u-strnlen.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRNLEN lib_SOURCES += unistr/u16-strnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strnlen-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strnlen.c tests/unistr/test-strnlen.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u16-strnlen check_PROGRAMS += test-u16-strnlen test_u16_strnlen_SOURCES = unistr/test-u16-strnlen.c test_u16_strnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strpbrk��������������������������������������������������0000664�0000000�0000000�00000000632�14110572173�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-16 string. Files: lib/unistr/u16-strpbrk.c lib/unistr/u-strpbrk.h Depends-on: unistr/base unistr/u16-strmbtouc unistr/u16-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strpbrk]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRPBRK lib_SOURCES += unistr/u16-strpbrk.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strrchr��������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-16 string. Files: lib/unistr/u16-strrchr.c Depends-on: unistr/base unistr/u16-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strrchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRRCHR lib_SOURCES += unistr/u16-strrchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strspn���������������������������������������������������0000664�0000000�0000000�00000000666�14110572173�0021170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-16 string. Files: lib/unistr/u16-strspn.c lib/unistr/u-strspn.h Depends-on: unistr/base unistr/u16-strlen unistr/u16-strmbtouc unistr/u16-cmp unistr/u16-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRSPN lib_SOURCES += unistr/u16-strspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strstr���������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0021167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-16 strings. Files: lib/unistr/u16-strstr.c lib/unistr/u-strstr.h lib/str-kmp.h Depends-on: unistr/base unistr/u16-strchr unistr/u16-strmbtouc unistr/u16-strlen unistr/u16-strnlen stdbool malloca configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u16-strstr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRSTR lib_SOURCES += unistr/u16-strstr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strstr-tests���������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0022331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strstr.c tests/unistr/test-u-strstr.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-u16-strstr check_PROGRAMS += test-u16-strstr test_u16_strstr_SOURCES = unistr/test-u16-strstr.c test_u16_strstr_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strtok���������������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Tokenize UTF-16 string. Files: lib/unistr/u16-strtok.c lib/unistr/u-strtok.h Depends-on: unistr/base unistr/u16-strspn unistr/u16-strpbrk unistr/u16-strmblen configure.ac: gl_LIBUNISTRING_MODULE([0.9.6], [unistr/u16-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRTOK lib_SOURCES += unistr/u16-strtok.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-strtok-tests���������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0022315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-strtok.c tests/unistr/test-u-strtok.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strtok check_PROGRAMS += test-u16-strtok test_u16_strtok_SOURCES = unistr/test-u16-strtok.c test_u16_strtok_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-to-u32���������������������������������������������������0000664�0000000�0000000�00000000550�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-16 string to UTF-32 string. Files: lib/unistr/u16-to-u32.c Depends-on: unistr/base unistr/u16-mbtoucr configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u16-to-u32]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_TO_U32 lib_SOURCES += unistr/u16-to-u32.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-to-u32-tests���������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-to-u32.c tests/macros.h Depends-on: unistr/u32-cmp configure.ac: Makefile.am: TESTS += test-u16-to-u32 check_PROGRAMS += test-u16-to-u32 test_u16_to_u32_SOURCES = unistr/test-u16-to-u32.c test_u16_to_u32_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-to-u8����������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-16 string to UTF-8 string. Files: lib/unistr/u16-to-u8.c Depends-on: unistr/base unistr/u16-mbtoucr unistr/u8-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u16-to-u8]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_TO_U8 lib_SOURCES += unistr/u16-to-u8.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-to-u8-tests����������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-to-u8.c tests/macros.h Depends-on: unistr/u8-cmp configure.ac: Makefile.am: TESTS += test-u16-to-u8 check_PROGRAMS += test-u16-to-u8 test_u16_to_u8_SOURCES = unistr/test-u16-to-u8.c test_u16_to_u8_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-uctomb���������������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0021125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Store a character in UTF-16 string. Files: lib/unistr/u16-uctomb.c lib/unistr/u16-uctomb-aux.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u16-uctomb]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-uctomb]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_UCTOMB lib_SOURCES += unistr/u16-uctomb.c unistr/u16-uctomb-aux.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u16-uctomb-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u16-uctomb.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-uctomb check_PROGRAMS += test-u16-uctomb test_u16_uctomb_SOURCES = unistr/test-u16-uctomb.c test_u16_uctomb_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-check����������������������������������������������������0000664�0000000�0000000�00000000474�14110572173�0020707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check UTF-32 string. Files: lib/unistr/u32-check.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-check]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CHECK lib_SOURCES += unistr/u32-check.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-check-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-check.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-check check_PROGRAMS += test-u32-check test_u32_check_SOURCES = unistr/test-u32-check.c test_u32_check_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-chr������������������������������������������������������0000664�0000000�0000000�00000000513�14110572173�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in piece of UTF-32 string. Files: lib/unistr/u32-chr.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-chr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CHR lib_SOURCES += unistr/u32-chr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-chr-tests������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-chr.c tests/unistr/test-chr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize unistr/u32-set configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-chr check_PROGRAMS += test-u32-chr test_u32_chr_SOURCES = unistr/test-u32-chr.c test_u32_chr_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cmp������������������������������������������������������0000664�0000000�0000000�00000000501�14110572173�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-32 strings. Files: lib/unistr/u32-cmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-cmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CMP lib_SOURCES += unistr/u32-cmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cmp-tests������������������������������������������������0000664�0000000�0000000�00000000626�14110572173�0021550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-cmp.c tests/unistr/test-cmp.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-cmp check_PROGRAMS += test-u32-cmp test_u32_cmp_SOURCES = unistr/test-u32-cmp.c test_u32_cmp_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cmp2�����������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-32 strings with possibly different lengths. Files: lib/unistr/u32-cmp2.c lib/unistr/u-cmp2.h Depends-on: unistr/base unistr/u32-cmp minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-cmp2]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CMP2 lib_SOURCES += unistr/u32-cmp2.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cmp2-tests�����������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0021624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-cmp2.c tests/unistr/test-cmp2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-cmp2 check_PROGRAMS += test-u32-cmp2 test_u32_cmp2_SOURCES = unistr/test-u32-cmp2.c test_u32_cmp2_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cpy������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-32 string. Files: lib/unistr/u32-cpy.c lib/unistr/u-cpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-cpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CPY lib_SOURCES += unistr/u32-cpy.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cpy-alloc������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-32 string. Files: lib/unistr/u32-cpy-alloc.c lib/unistr/u-cpy-alloc.h Depends-on: unistr/base malloc-posix configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-cpy-alloc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_CPY_ALLOC lib_SOURCES += unistr/u32-cpy-alloc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cpy-alloc-tests������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0022655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-cpy-alloc.c tests/unistr/test-cpy-alloc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-cpy-alloc check_PROGRAMS += test-u32-cpy-alloc test_u32_cpy_alloc_SOURCES = unistr/test-u32-cpy-alloc.c test_u32_cpy_alloc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-cpy-tests������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-cpy.c tests/unistr/test-cpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-cpy check_PROGRAMS += test-u32-cpy test_u32_cpy_SOURCES = unistr/test-u32-cpy.c test_u32_cpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-endswith�������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0021456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-32 strings. Files: lib/unistr/u32-endswith.c lib/unistr/u-endswith.h Depends-on: unistr/base unistr/u32-strlen unistr/u32-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-endswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_ENDSWITH lib_SOURCES += unistr/u32-endswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mblen����������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0020720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string. Files: lib/unistr/u32-mblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MBLEN lib_SOURCES += unistr/u32-mblen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mblen-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-mblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-mblen check_PROGRAMS += test-u32-mblen test_u32_mblen_SOURCES = unistr/test-u32-mblen.c test_u32_mblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbsnlen��������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0021262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Count characters in UTF-32 string. Files: lib/unistr/u32-mbsnlen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mbsnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MBSNLEN lib_SOURCES += unistr/u32-mbsnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbsnlen-tests��������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-mbsnlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-mbsnlen check_PROGRAMS += test-u32-mbsnlen test_u32_mbsnlen_SOURCES = unistr/test-u32-mbsnlen.c test_u32_mbsnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtouc���������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string. Files: lib/unistr/u32-mbtouc.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u32-mbtouc]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MBTOUC lib_SOURCES += unistr/u32-mbtouc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtouc-tests���������������������������������������������0000664�0000000�0000000�00000000435�14110572173�0022260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-mbtouc.c tests/unistr/test-u32-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-mbtouc check_PROGRAMS += test-u32-mbtouc test_u32_mbtouc_SOURCES = unistr/test-u32-mbtouc.c test_u32_mbtouc_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtouc-unsafe��������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string. Files: lib/unistr/u32-mbtouc-unsafe.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u32-mbtouc-unsafe]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mbtouc-unsafe]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MBTOUC_UNSAFE lib_SOURCES += unistr/u32-mbtouc-unsafe.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtouc-unsafe-tests��������������������������������������0000664�0000000�0000000�00000000507�14110572173�0023537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-mbtouc-unsafe.c tests/unistr/test-u32-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-mbtouc-unsafe check_PROGRAMS += test-u32-mbtouc-unsafe test_u32_mbtouc_unsafe_SOURCES = unistr/test-u32-mbtouc-unsafe.c test_u32_mbtouc_unsafe_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtoucr��������������������������������������������������0000664�0000000�0000000�00000000651�14110572173�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string, returning an error code upon failure. Files: lib/unistr/u32-mbtoucr.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u32-mbtoucr]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mbtoucr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MBTOUCR lib_SOURCES += unistr/u32-mbtoucr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-mbtoucr-tests��������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-mbtoucr.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-mbtoucr check_PROGRAMS += test-u32-mbtoucr test_u32_mbtoucr_SOURCES = unistr/test-u32-mbtoucr.c test_u32_mbtoucr_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-move�����������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-32 string. Files: lib/unistr/u32-move.c lib/unistr/u-move.h Depends-on: unistr/base memmove configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-move]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_MOVE lib_SOURCES += unistr/u32-move.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-move-tests�����������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-move.c tests/unistr/test-move.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-move check_PROGRAMS += test-u32-move test_u32_move_SOURCES = unistr/test-u32-move.c test_u32_move_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-next�����������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over next character in UTF-32 string. Files: lib/unistr/u32-next.c Depends-on: unistr/base unistr/u32-strmbtouc configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_NEXT lib_SOURCES += unistr/u32-next.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-next-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-next.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-next check_PROGRAMS += test-u32-next test_u32_next_SOURCES = unistr/test-u32-next.c test_u32_next_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-prev�����������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over previous character in UTF-32 string. Files: lib/unistr/u32-prev.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_PREV lib_SOURCES += unistr/u32-prev.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-prev-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-prev.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-prev check_PROGRAMS += test-u32-prev test_u32_prev_SOURCES = unistr/test-u32-prev.c test_u32_prev_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-set������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fill UTF-32 string. Files: lib/unistr/u32-set.c lib/unistr/u-set.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-set]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_SET lib_SOURCES += unistr/u32-set.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-set-tests������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-set.c tests/unistr/test-set.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-set check_PROGRAMS += test-u32-set test_u32_set_SOURCES = unistr/test-u32-set.c test_u32_set_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-startswith�����������������������������������������������0000664�0000000�0000000�00000000570�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-32 strings. Files: lib/unistr/u32-startswith.c lib/unistr/u-startswith.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-startswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STARTSWITH lib_SOURCES += unistr/u32-startswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-stpcpy���������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-32 string. Files: lib/unistr/u32-stpcpy.c lib/unistr/u-stpcpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-stpcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STPCPY lib_SOURCES += unistr/u32-stpcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-stpcpy-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-stpcpy.c tests/unistr/test-stpcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-stpcpy check_PROGRAMS += test-u32-stpcpy test_u32_stpcpy_SOURCES = unistr/test-u32-stpcpy.c test_u32_stpcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-stpncpy��������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-32 string. Files: lib/unistr/u32-stpncpy.c lib/unistr/u-stpncpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u32-stpncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STPNCPY lib_SOURCES += unistr/u32-stpncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-stpncpy-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-stpncpy.c tests/unistr/test-stpncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-stpncpy check_PROGRAMS += test-u32-stpncpy test_u32_stpncpy_SOURCES = unistr/test-u32-stpncpy.c test_u32_stpncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcat���������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-32 strings. Files: lib/unistr/u32-strcat.c lib/unistr/u-strcat.h Depends-on: unistr/base unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strcat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCAT lib_SOURCES += unistr/u32-strcat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcat-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strcat.c tests/unistr/test-strcat.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strcat check_PROGRAMS += test-u32-strcat test_u32_strcat_SOURCES = unistr/test-u32-strcat.c test_u32_strcat_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strchr���������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-32 string. Files: lib/unistr/u32-strchr.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCHR lib_SOURCES += unistr/u32-strchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strchr-tests���������������������������������������������0000664�0000000�0000000�00000000672�14110572173�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strchr.c tests/unistr/test-strchr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize unistr/u32-set configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-strchr check_PROGRAMS += test-u32-strchr test_u32_strchr_SOURCES = unistr/test-u32-strchr.c test_u32_strchr_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcmp���������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0021133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-32 strings. Files: lib/unistr/u32-strcmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCMP lib_SOURCES += unistr/u32-strcmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcmp-tests���������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0022276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strcmp.c tests/unistr/test-u32-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strcmp check_PROGRAMS += test-u32-strcmp test_u32_strcmp_SOURCES = unistr/test-u32-strcmp.c test_u32_strcmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcoll��������������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0021307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-32 strings using the collation rules of the current locale. Files: lib/unistr/u32-strcoll.c lib/unistr/u-strcoll.h Depends-on: unistr/base unistr/u32-strcmp uniconv/u32-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u32-strcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCOLL lib_SOURCES += unistr/u32-strcoll.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcoll-tests��������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0022444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strcoll.c tests/unistr/test-u32-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strcoll check_PROGRAMS += test-u32-strcoll test_u32_strcoll_SOURCES = unistr/test-u32-strcoll.c test_u32_strcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcpy���������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-32 string. Files: lib/unistr/u32-strcpy.c lib/unistr/u-strcpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCPY lib_SOURCES += unistr/u32-strcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcpy-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strcpy.c tests/unistr/test-strcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strcpy check_PROGRAMS += test-u32-strcpy test_u32_strcpy_SOURCES = unistr/test-u32-strcpy.c test_u32_strcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strcspn��������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0021315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-32 string. Files: lib/unistr/u32-strcspn.c Depends-on: unistr/base unistr/u32-strlen unistr/u32-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strcspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRCSPN lib_SOURCES += unistr/u32-strcspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strdup���������������������������������������������������0000664�0000000�0000000�00000000547�14110572173�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-32 string. Files: lib/unistr/u32-strdup.c lib/unistr/u-strdup.h Depends-on: unistr/base unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strdup]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRDUP lib_SOURCES += unistr/u32-strdup.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strdup-tests���������������������������������������������0000664�0000000�0000000�00000000431�14110572173�0022304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strdup.c tests/unistr/test-strdup.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strdup check_PROGRAMS += test-u32-strdup test_u32_strdup_SOURCES = unistr/test-u32-strdup.c test_u32_strdup_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strlen���������������������������������������������������0000664�0000000�0000000�00000000544�14110572173�0021137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine length of UTF-32 string. Files: lib/unistr/u32-strlen.c lib/unistr/u-strlen.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRLEN lib_SOURCES += unistr/u32-strlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strlen-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strlen check_PROGRAMS += test-u32-strlen test_u32_strlen_SOURCES = unistr/test-u32-strlen.c test_u32_strlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strmblen�������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0021456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string. Files: lib/unistr/u32-strmblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strmblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRMBLEN lib_SOURCES += unistr/u32-strmblen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strmblen-tests�������������������������������������������0000664�0000000�0000000�00000000412�14110572173�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strmblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strmblen check_PROGRAMS += test-u32-strmblen test_u32_strmblen_SOURCES = unistr/test-u32-strmblen.c test_u32_strmblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strmbtouc������������������������������������������������0000664�0000000�0000000�00000000541�14110572173�0021647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-32 string. Files: lib/unistr/u32-strmbtouc.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strmbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRMBTOUC lib_SOURCES += unistr/u32-strmbtouc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strmbtouc-tests������������������������������������������0000664�0000000�0000000�00000000420�14110572173�0023003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strmbtouc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strmbtouc check_PROGRAMS += test-u32-strmbtouc test_u32_strmbtouc_SOURCES = unistr/test-u32-strmbtouc.c test_u32_strmbtouc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncat��������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0021310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-32 strings. Files: lib/unistr/u32-strncat.c lib/unistr/u-strncat.h Depends-on: unistr/base unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strncat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRNCAT lib_SOURCES += unistr/u32-strncat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncat-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strncat.c tests/unistr/test-strncat.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-strncat check_PROGRAMS += test-u32-strncat test_u32_strncat_SOURCES = unistr/test-u32-strncat.c test_u32_strncat_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncmp��������������������������������������������������0000664�0000000�0000000�00000000507�14110572173�0021315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-32 strings. Files: lib/unistr/u32-strncmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strncmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRNCMP lib_SOURCES += unistr/u32-strncmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncmp-tests��������������������������������������������0000664�0000000�0000000�00000000440�14110572173�0022451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strncmp.c tests/unistr/test-strncmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strncmp check_PROGRAMS += test-u32-strncmp test_u32_strncmp_SOURCES = unistr/test-u32-strncmp.c test_u32_strncmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncpy��������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0021327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-32 string. Files: lib/unistr/u32-strncpy.c lib/unistr/u-strncpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRNCPY lib_SOURCES += unistr/u32-strncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strncpy-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strncpy.c tests/unistr/test-strncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-strncpy check_PROGRAMS += test-u32-strncpy test_u32_strncpy_SOURCES = unistr/test-u32-strncpy.c test_u32_strncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strnlen��������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine bounded length of UTF-32 string. Files: lib/unistr/u32-strnlen.c lib/unistr/u-strnlen.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRNLEN lib_SOURCES += unistr/u32-strnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strnlen-tests��������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strnlen.c tests/unistr/test-strnlen.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u32-strnlen check_PROGRAMS += test-u32-strnlen test_u32_strnlen_SOURCES = unistr/test-u32-strnlen.c test_u32_strnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strpbrk��������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-32 string. Files: lib/unistr/u32-strpbrk.c Depends-on: unistr/base unistr/u32-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strpbrk]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRPBRK lib_SOURCES += unistr/u32-strpbrk.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strrchr��������������������������������������������������0000664�0000000�0000000�00000000522�14110572173�0021313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-32 string. Files: lib/unistr/u32-strrchr.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strrchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRRCHR lib_SOURCES += unistr/u32-strrchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strspn���������������������������������������������������0000664�0000000�0000000�00000000552�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-32 string. Files: lib/unistr/u32-strspn.c Depends-on: unistr/base unistr/u32-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRSPN lib_SOURCES += unistr/u32-strspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strstr���������������������������������������������������0000664�0000000�0000000�00000000673�14110572173�0021174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-32 strings. Files: lib/unistr/u32-strstr.c lib/unistr/u-strstr.h lib/str-kmp.h Depends-on: unistr/base unistr/u32-strchr unistr/u32-strlen unistr/u32-strnlen stdbool malloca configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u32-strstr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRSTR lib_SOURCES += unistr/u32-strstr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strstr-tests���������������������������������������������0000664�0000000�0000000�00000000470�14110572173�0022327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strstr.c tests/unistr/test-u-strstr.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-u32-strstr check_PROGRAMS += test-u32-strstr test_u32_strstr_SOURCES = unistr/test-u32-strstr.c test_u32_strstr_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strtok���������������������������������������������������0000664�0000000�0000000�00000000624�14110572173�0021155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Tokenize UTF-32 string. Files: lib/unistr/u32-strtok.c lib/unistr/u-strtok.h Depends-on: unistr/base unistr/u32-strspn unistr/u32-strpbrk unistr/u32-strmblen configure.ac: gl_LIBUNISTRING_MODULE([0.9.6], [unistr/u32-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRTOK lib_SOURCES += unistr/u32-strtok.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-strtok-tests���������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0022317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-strtok.c tests/unistr/test-u-strtok.h tests/macros.h Depends-on: unistr/u32-uctomb configure.ac: Makefile.am: TESTS += test-u32-strtok check_PROGRAMS += test-u32-strtok test_u32_strtok_SOURCES = unistr/test-u32-strtok.c test_u32_strtok_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-to-u16���������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-32 string to UTF-16 string. Files: lib/unistr/u32-to-u16.c Depends-on: unistr/base unistr/u16-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-to-u16]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_TO_U16 lib_SOURCES += unistr/u32-to-u16.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-to-u16-tests���������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-to-u16.c tests/macros.h Depends-on: unistr/u16-cmp configure.ac: Makefile.am: TESTS += test-u32-to-u16 check_PROGRAMS += test-u32-to-u16 test_u32_to_u16_SOURCES = unistr/test-u32-to-u16.c test_u32_to_u16_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-to-u8����������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-32 string to UTF-8 string. Files: lib/unistr/u32-to-u8.c Depends-on: unistr/base unistr/u8-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-to-u8]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_TO_U8 lib_SOURCES += unistr/u32-to-u8.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-to-u8-tests����������������������������������������������0000664�0000000�0000000�00000000406�14110572173�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-to-u8.c tests/macros.h Depends-on: unistr/u8-cmp configure.ac: Makefile.am: TESTS += test-u32-to-u8 check_PROGRAMS += test-u32-to-u8 test_u32_to_u8_SOURCES = unistr/test-u32-to-u8.c test_u32_to_u8_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-uctomb���������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0021124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Store a character in UTF-32 string. Files: lib/unistr/u32-uctomb.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u32-uctomb]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-uctomb]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_UCTOMB lib_SOURCES += unistr/u32-uctomb.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u32-uctomb-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u32-uctomb.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-uctomb check_PROGRAMS += test-u32-uctomb test_u32_uctomb_SOURCES = unistr/test-u32-uctomb.c test_u32_uctomb_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-check�����������������������������������������������������0000664�0000000�0000000�00000000455�14110572173�0020631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check UTF-8 string. Files: lib/unistr/u8-check.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-check]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CHECK lib_SOURCES += unistr/u8-check.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-check-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0021766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-check.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-check check_PROGRAMS += test-u8-check test_u8_check_SOURCES = unistr/test-u8-check.c test_u8_check_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-chr�������������������������������������������������������0000664�0000000�0000000�00000000536�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in piece of UTF-8 string. Files: lib/unistr/u8-chr.c Depends-on: memchr unistr/base unistr/u8-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-chr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CHR lib_SOURCES += unistr/u8-chr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-chr-tests�������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0021463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-chr.c tests/unistr/test-chr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: c99 extensions getpagesize unistr/u8-set unistr/u32-set unistr/u32-to-u8 configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-chr check_PROGRAMS += test-u8-chr test_u8_chr_SOURCES = unistr/test-u8-chr.c test_u8_chr_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cmp�������������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-8 strings. Files: lib/unistr/u8-cmp.c Depends-on: unistr/base memcmp configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-cmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CMP lib_SOURCES += unistr/u8-cmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cmp-tests�������������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0021465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-cmp.c tests/unistr/test-cmp.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-cmp check_PROGRAMS += test-u8-cmp test_u8_cmp_SOURCES = unistr/test-u8-cmp.c test_u8_cmp_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cmp2������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare pieces of UTF-8 strings with possibly different lengths. Files: lib/unistr/u8-cmp2.c lib/unistr/u-cmp2.h Depends-on: unistr/base unistr/u8-cmp minmax configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-cmp2]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CMP2 lib_SOURCES += unistr/u8-cmp2.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cmp2-tests������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0021550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-cmp2.c tests/unistr/test-cmp2.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-cmp2 check_PROGRAMS += test-u8-cmp2 test_u8_cmp2_SOURCES = unistr/test-u8-cmp2.c test_u8_cmp2_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cpy�������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-8 string. Files: lib/unistr/u8-cpy.c lib/unistr/u-cpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-cpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CPY lib_SOURCES += unistr/u8-cpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cpy-alloc�������������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-8 string. Files: lib/unistr/u8-cpy-alloc.c lib/unistr/u-cpy-alloc.h Depends-on: unistr/base malloc-posix configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-cpy-alloc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_CPY_ALLOC lib_SOURCES += unistr/u8-cpy-alloc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cpy-alloc-tests�������������������������������������������0000664�0000000�0000000�00000000450�14110572173�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-cpy-alloc.c tests/unistr/test-cpy-alloc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-cpy-alloc check_PROGRAMS += test-u8-cpy-alloc test_u8_cpy_alloc_SOURCES = unistr/test-u8-cpy-alloc.c test_u8_cpy_alloc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-cpy-tests�������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-cpy.c tests/unistr/test-cpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-cpy check_PROGRAMS += test-u8-cpy test_u8_cpy_SOURCES = unistr/test-u8-cpy.c test_u8_cpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-endswith��������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0021372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-8 strings. Files: lib/unistr/u8-endswith.c lib/unistr/u-endswith.h Depends-on: unistr/base unistr/u8-strlen unistr/u8-cmp configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-endswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_ENDSWITH lib_SOURCES += unistr/u8-endswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mblen�����������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0020642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string. Files: lib/unistr/u8-mblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-mblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MBLEN lib_SOURCES += unistr/u8-mblen.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mblen-tests�����������������������������������������������0000664�0000000�0000000�00000000362�14110572173�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-mblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-mblen check_PROGRAMS += test-u8-mblen test_u8_mblen_SOURCES = unistr/test-u8-mblen.c test_u8_mblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbsnlen���������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Count characters in UTF-8 string. Files: lib/unistr/u8-mbsnlen.c Depends-on: unistr/base unistr/u8-mbtoucr unistr/u8-mbtouc configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-mbsnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MBSNLEN lib_SOURCES += unistr/u8-mbsnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbsnlen-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-mbsnlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-mbsnlen check_PROGRAMS += test-u8-mbsnlen test_u8_mbsnlen_SOURCES = unistr/test-u8-mbsnlen.c test_u8_mbsnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtouc����������������������������������������������������0000664�0000000�0000000�00000000642�14110572173�0021043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string. Files: lib/unistr/u8-mbtouc.c lib/unistr/u8-mbtouc-aux.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u8-mbtouc]) gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-mbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUC lib_SOURCES += unistr/u8-mbtouc.c unistr/u8-mbtouc-aux.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtouc-tests����������������������������������������������0000664�0000000�0000000�00000000426�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-mbtouc.c tests/unistr/test-u8-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-mbtouc check_PROGRAMS += test-u8-mbtouc test_u8_mbtouc_SOURCES = unistr/test-u8-mbtouc.c test_u8_mbtouc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtouc-unsafe���������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0022322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string. Files: lib/unistr/u8-mbtouc-unsafe.c lib/unistr/u8-mbtouc-unsafe-aux.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u8-mbtouc-unsafe]) gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-mbtouc-unsafe]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUC_UNSAFE lib_SOURCES += unistr/u8-mbtouc-unsafe.c unistr/u8-mbtouc-unsafe-aux.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ���������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtouc-unsafe-tests���������������������������������������0000664�0000000�0000000�00000000500�14110572173�0023453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-mbtouc-unsafe.c tests/unistr/test-u8-mbtouc.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-mbtouc-unsafe check_PROGRAMS += test-u8-mbtouc-unsafe test_u8_mbtouc_unsafe_SOURCES = unistr/test-u8-mbtouc-unsafe.c test_u8_mbtouc_unsafe_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtoucr���������������������������������������������������0000664�0000000�0000000�00000000631�14110572173�0021223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string, returning an error code upon failure. Files: lib/unistr/u8-mbtoucr.c Depends-on: unistr/base configure.ac: gl_MODULE_INDICATOR([unistr/u8-mbtoucr]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-mbtoucr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUCR lib_SOURCES += unistr/u8-mbtoucr.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-mbtoucr-tests���������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-mbtoucr.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-mbtoucr check_PROGRAMS += test-u8-mbtoucr test_u8_mbtoucr_SOURCES = unistr/test-u8-mbtoucr.c test_u8_mbtoucr_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-move������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0020522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy piece of UTF-8 string. Files: lib/unistr/u8-move.c lib/unistr/u-move.h Depends-on: unistr/base memmove configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-move]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_MOVE lib_SOURCES += unistr/u8-move.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-move-tests������������������������������������������������0000664�0000000�0000000�00000000405�14110572173�0021655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-move.c tests/unistr/test-move.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-move check_PROGRAMS += test-u8-move test_u8_move_SOURCES = unistr/test-u8-move.c test_u8_move_LDADD = $(LDADD) $(LIBUNISTRING) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-next������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over next character in UTF-8 string. Files: lib/unistr/u8-next.c Depends-on: unistr/base unistr/u8-strmbtouc configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-next]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_NEXT lib_SOURCES += unistr/u8-next.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-next-tests������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-next.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-next check_PROGRAMS += test-u8-next test_u8_next_SOURCES = unistr/test-u8-next.c test_u8_next_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-prev������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterate over previous character in UTF-8 string. Files: lib/unistr/u8-prev.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-prev]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_PREV lib_SOURCES += unistr/u8-prev.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-prev-tests������������������������������������������������0000664�0000000�0000000�00000000354�14110572173�0021666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-prev.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-prev check_PROGRAMS += test-u8-prev test_u8_prev_SOURCES = unistr/test-u8-prev.c test_u8_prev_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-set�������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0020350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fill UTF-8 string. Files: lib/unistr/u8-set.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-set]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_SET lib_SOURCES += unistr/u8-set.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-set-tests�������������������������������������������������0000664�0000000�0000000�00000000376�14110572173�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-set.c tests/unistr/test-set.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-set check_PROGRAMS += test-u8-set test_u8_set_SOURCES = unistr/test-u8-set.c test_u8_set_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-startswith������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0021770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-8 strings. Files: lib/unistr/u8-startswith.c lib/unistr/u-startswith.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-startswith]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STARTSWITH lib_SOURCES += unistr/u8-startswith.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-stpcpy����������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0021100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-stpcpy.c lib/unistr/u-stpcpy.h Depends-on: unistr/base configure.ac: AC_CHECK_FUNCS_ONCE([stpcpy]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-stpcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STPCPY lib_SOURCES += unistr/u8-stpcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-stpcpy-tests����������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0022231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-stpcpy.c tests/unistr/test-stpcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-stpcpy check_PROGRAMS += test-u8-stpcpy test_u8_stpcpy_SOURCES = unistr/test-u8-stpcpy.c test_u8_stpcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-stpncpy���������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-stpncpy.c lib/unistr/u-stpncpy.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u8-stpncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STPNCPY lib_SOURCES += unistr/u8-stpncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-stpncpy-tests���������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-stpncpy.c tests/unistr/test-stpncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-stpncpy check_PROGRAMS += test-u8-stpncpy test_u8_stpncpy_SOURCES = unistr/test-u8-stpncpy.c test_u8_stpncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcat����������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-8 strings. Files: lib/unistr/u8-strcat.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strcat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCAT lib_SOURCES += unistr/u8-strcat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcat-tests����������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strcat.c tests/unistr/test-strcat.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strcat check_PROGRAMS += test-u8-strcat test_u8_strcat_SOURCES = unistr/test-u8-strcat.c test_u8_strcat_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strchr����������������������������������������������������0000664�0000000�0000000�00000000532�14110572173�0021055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-8 string. Files: lib/unistr/u8-strchr.c Depends-on: unistr/base unistr/u8-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCHR lib_SOURCES += unistr/u8-strchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strchr-tests����������������������������������������������0000664�0000000�0000000�00000000723�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strchr.c tests/unistr/test-strchr.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize unistr/u8-set unistr/u32-set unistr/u32-to-u8 configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-strchr check_PROGRAMS += test-u8-strchr test_u8_strchr_SOURCES = unistr/test-u8-strchr.c test_u8_strchr_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcmp����������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0021053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-8 strings. Files: lib/unistr/u8-strcmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-strcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCMP lib_SOURCES += unistr/u8-strcmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcmp-tests����������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strcmp.c tests/unistr/test-u8-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strcmp check_PROGRAMS += test-u8-strcmp test_u8_strcmp_SOURCES = unistr/test-u8-strcmp.c test_u8_strcmp_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcoll���������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0021232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-8 strings using the collation rules of the current locale. Files: lib/unistr/u8-strcoll.c lib/unistr/u-strcoll.h Depends-on: unistr/base unistr/u8-strcmp uniconv/u8-strconv-to-enc localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-strcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCOLL lib_SOURCES += unistr/u8-strcoll.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcoll-tests���������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0022367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strcoll.c tests/unistr/test-u8-strcmp.h tests/unistr/test-strcmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strcoll check_PROGRAMS += test-u8-strcoll test_u8_strcoll_SOURCES = unistr/test-u8-strcoll.c test_u8_strcoll_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcpy����������������������������������������������������0000664�0000000�0000000�00000000472�14110572173�0021077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-strcpy.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strcpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCPY lib_SOURCES += unistr/u8-strcpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcpy-tests����������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strcpy.c tests/unistr/test-strcpy.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strcpy check_PROGRAMS += test-u8-strcpy test_u8_strcpy_SOURCES = unistr/test-u8-strcpy.c test_u8_strcpy_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strcspn���������������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0021250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-8 string. Files: lib/unistr/u8-strcspn.c lib/unistr/u-strcspn.h Depends-on: unistr/base unistr/u8-strlen unistr/u8-strmbtouc unistr/u8-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strcspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRCSPN lib_SOURCES += unistr/u8-strcspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strdup����������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-strdup.c Depends-on: unistr/base configure.ac: AC_CHECK_FUNCS_ONCE([strdup]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strdup]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRDUP lib_SOURCES += unistr/u8-strdup.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strdup-tests����������������������������������������������0000664�0000000�0000000�00000000423�14110572173�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strdup.c tests/unistr/test-strdup.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strdup check_PROGRAMS += test-u8-strdup test_u8_strdup_SOURCES = unistr/test-u8-strdup.c test_u8_strdup_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strlen����������������������������������������������������0000664�0000000�0000000�00000000477�14110572173�0021067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine length of UTF-8 string. Files: lib/unistr/u8-strlen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRLEN lib_SOURCES += unistr/u8-strlen.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strlen-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strlen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strlen check_PROGRAMS += test-u8-strlen test_u8_strlen_SOURCES = unistr/test-u8-strlen.c test_u8_strlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strmblen��������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0021374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string. Files: lib/unistr/u8-strmblen.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strmblen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRMBLEN lib_SOURCES += unistr/u8-strmblen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strmblen-tests��������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strmblen.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strmblen check_PROGRAMS += test-u8-strmblen test_u8_strmblen_SOURCES = unistr/test-u8-strmblen.c test_u8_strmblen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strmbtouc�������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0021574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Look at first character in UTF-8 string. Files: lib/unistr/u8-strmbtouc.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strmbtouc]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRMBTOUC lib_SOURCES += unistr/u8-strmbtouc.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strmbtouc-tests�������������������������������������������0000664�0000000�0000000�00000000412�14110572173�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strmbtouc.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strmbtouc check_PROGRAMS += test-u8-strmbtouc test_u8_strmbtouc_SOURCES = unistr/test-u8-strmbtouc.c test_u8_strmbtouc_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncat���������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Concatenate UTF-8 strings. Files: lib/unistr/u8-strncat.c Depends-on: unistr/base strncat configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strncat]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRNCAT lib_SOURCES += unistr/u8-strncat.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncat-tests���������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strncat.c tests/unistr/test-strncat.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-strncat check_PROGRAMS += test-u8-strncat test_u8_strncat_SOURCES = unistr/test-u8-strncat.c test_u8_strncat_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncmp���������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0021233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare UTF-8 strings. Files: lib/unistr/u8-strncmp.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strncmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRNCMP lib_SOURCES += unistr/u8-strncmp.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncmp-tests���������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strncmp.c tests/unistr/test-strncmp.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strncmp check_PROGRAMS += test-u8-strncmp test_u8_strncmp_SOURCES = unistr/test-u8-strncmp.c test_u8_strncmp_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncpy���������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0021261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-strncpy.c Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strncpy]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRNCPY lib_SOURCES += unistr/u8-strncpy.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strncpy-tests���������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strncpy.c tests/unistr/test-strncpy.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-strncpy check_PROGRAMS += test-u8-strncpy test_u8_strncpy_SOURCES = unistr/test-u8-strncpy.c test_u8_strncpy_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strnlen���������������������������������������������������0000664�0000000�0000000�00000000554�14110572173�0021241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine bounded length of UTF-8 string. Files: lib/unistr/u8-strnlen.c lib/unistr/u-strnlen.h Depends-on: unistr/base configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strnlen]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRNLEN lib_SOURCES += unistr/u8-strnlen.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strnlen-tests���������������������������������������������0000664�0000000�0000000�00000000654�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strnlen.c tests/unistr/test-strnlen.h tests/zerosize-ptr.h tests/macros.h m4/mmap-anon.m4 Depends-on: extensions getpagesize configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) Makefile.am: TESTS += test-u8-strnlen check_PROGRAMS += test-u8-strnlen test_u8_strnlen_SOURCES = unistr/test-u8-strnlen.c test_u8_strnlen_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strpbrk���������������������������������������������������0000664�0000000�0000000�00000000623�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-8 string. Files: lib/unistr/u8-strpbrk.c lib/unistr/u-strpbrk.h Depends-on: unistr/base unistr/u8-strmbtouc unistr/u8-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strpbrk]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRPBRK lib_SOURCES += unistr/u8-strpbrk.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strrchr���������������������������������������������������0000664�0000000�0000000�00000000536�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search character in UTF-8 string. Files: lib/unistr/u8-strrchr.c Depends-on: unistr/base unistr/u8-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strrchr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRRCHR lib_SOURCES += unistr/u8-strrchr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strspn����������������������������������������������������0000664�0000000�0000000�00000000655�14110572173�0021107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Search for some characters in UTF-8 string. Files: lib/unistr/u8-strspn.c lib/unistr/u-strspn.h Depends-on: unistr/base unistr/u8-strlen unistr/u8-strmbtouc unistr/u8-cmp unistr/u8-strchr configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strspn]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRSPN lib_SOURCES += unistr/u8-strspn.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strstr����������������������������������������������������0000664�0000000�0000000�00000000615�14110572173�0021113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Substring test for UTF-8 strings. Files: lib/unistr/u8-strstr.c lib/unistr/u-strstr.h Depends-on: unistr/base unistr/u8-strchr unistr/u8-strmbtouc strstr configure.ac: gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-strstr]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRSTR lib_SOURCES += unistr/u8-strstr.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strstr-tests����������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strstr.c tests/unistr/test-u-strstr.h tests/macros.h Depends-on: configure.ac: AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-u8-strstr check_PROGRAMS += test-u8-strstr test_u8_strstr_SOURCES = unistr/test-u8-strstr.c test_u8_strstr_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strtok����������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0021077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Tokenize UTF-8 string. Files: lib/unistr/u8-strtok.c lib/unistr/u-strtok.h Depends-on: unistr/base unistr/u8-strspn unistr/u8-strpbrk unistr/u8-strmblen configure.ac: gl_LIBUNISTRING_MODULE([0.9.6], [unistr/u8-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRTOK lib_SOURCES += unistr/u8-strtok.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-strtok-tests����������������������������������������������0000664�0000000�0000000�00000000425�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-strtok.c tests/unistr/test-u-strtok.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strtok check_PROGRAMS += test-u8-strtok test_u8_strtok_SOURCES = unistr/test-u8-strtok.c test_u8_strtok_LDADD = $(LDADD) $(LIBUNISTRING) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-to-u16����������������������������������������������������0000664�0000000�0000000�00000000564�14110572173�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-8 string to UTF-16 string. Files: lib/unistr/u8-to-u16.c Depends-on: unistr/base unistr/u8-mbtoucr unistr/u16-uctomb configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u8-to-u16]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_TO_U16 lib_SOURCES += unistr/u8-to-u16.c endif Include: "unistr.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-to-u16-tests����������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-to-u16.c tests/macros.h Depends-on: unistr/u16-cmp configure.ac: Makefile.am: TESTS += test-u8-to-u16 check_PROGRAMS += test-u8-to-u16 test_u8_to_u16_SOURCES = unistr/test-u8-to-u16.c test_u8_to_u16_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-to-u32����������������������������������������������������0000664�0000000�0000000�00000000530�14110572173�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert UTF-8 string to UTF-32 string. Files: lib/unistr/u8-to-u32.c Depends-on: unistr/base unistr/u8-mbtoucr configure.ac: gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u8-to-u32]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_TO_U32 lib_SOURCES += unistr/u8-to-u32.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-to-u32-tests����������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-to-u32.c tests/macros.h Depends-on: unistr/u32-cmp configure.ac: Makefile.am: TESTS += test-u8-to-u32 check_PROGRAMS += test-u8-to-u32 test_u8_to_u32_SOURCES = unistr/test-u8-to-u32.c test_u8_to_u32_LDADD = $(LDADD) $(LIBUNISTRING) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-uctomb����������������������������������������������������0000664�0000000�0000000�00000000644�14110572173�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Store a character in UTF-8 string. Files: lib/unistr/u8-uctomb.c lib/unistr/u8-uctomb-aux.c Depends-on: unistr/base attribute configure.ac: gl_MODULE_INDICATOR([unistr/u8-uctomb]) gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-uctomb]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_UCTOMB lib_SOURCES += unistr/u8-uctomb.c unistr/u8-uctomb-aux.c endif Include: "unistr.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unistr/u8-uctomb-tests����������������������������������������������0000664�0000000�0000000�00000000370�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/unistr/test-u8-uctomb.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-uctomb check_PROGRAMS += test-u8-uctomb test_u8_uctomb_SOURCES = unistr/test-u8-uctomb.c test_u8_uctomb_LDADD = $(LDADD) $(LIBUNISTRING) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unitypes������������������������������������������������������������0000664�0000000�0000000�00000002050�14110572173�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base types for Unicode string functions. Files: lib/unitypes.in.h m4/libunistring-base.m4 Depends-on: stdint configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [unitypes.h]) AH_VERBATIM([unitypes_restrict], [ /* This definition is a duplicate of the one in unitypes.h. It is here so that we can cope with an older version of unitypes.h that does not contain this definition and that is pre-installed among the public header files. */ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _UC_RESTRICT __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _UC_RESTRICT restrict # else # define _UC_RESTRICT # endif ]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) unitypes.h: unitypes.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unitypes.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unitypes.h unitypes.h-t Include: "unitypes.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017430�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/base��������������������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0020262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for word breaks. Files: lib/uniwbrk.in.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [uniwbrk.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNIWBRK_H) uniwbrk.h: uniwbrk.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniwbrk.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uniwbrk.h uniwbrk.h-t Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/table�������������������������������������������������������0000664�0000000�0000000�00000000337�14110572173�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Files: lib/uniwbrk/wbrktable.h lib/uniwbrk/wbrktable.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += uniwbrk/wbrktable.c Include: "uniwbrk/wbrktable.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u16-wordbreaks����������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0022141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Word breaks in UTF-16 strings. Files: lib/uniwbrk/u16-wordbreaks.c lib/uniwbrk/u-wordbreaks.h Depends-on: uniwbrk/base uniwbrk/wordbreak-property uniwbrk/table unistr/u16-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwbrk/u16-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U16_WORDBREAKS lib_SOURCES += uniwbrk/u16-wordbreaks.c endif Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u16-wordbreaks-tests����������������������������������������0000664�0000000�0000000�00000000430�14110572173�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwbrk/test-u16-wordbreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-wordbreaks check_PROGRAMS += test-u16-wordbreaks test_u16_wordbreaks_SOURCES = uniwbrk/test-u16-wordbreaks.c test_u16_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u32-wordbreaks����������������������������������������������0000664�0000000�0000000�00000000677�14110572173�0022137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Word breaks in UTF-32 strings. Files: lib/uniwbrk/u32-wordbreaks.c lib/uniwbrk/u-wordbreaks.h Depends-on: uniwbrk/base uniwbrk/wordbreak-property uniwbrk/table unistr/u32-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwbrk/u32-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U32_WORDBREAKS lib_SOURCES += uniwbrk/u32-wordbreaks.c endif Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u32-wordbreaks-tests����������������������������������������0000664�0000000�0000000�00000001036�14110572173�0023265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwbrk/test-u32-wordbreaks.c tests/uniwbrk/test-uc-wordbreaks.c tests/uniwbrk/test-uc-wordbreaks.sh tests/uniwbrk/WordBreakTest.txt tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-wordbreaks uniwbrk/test-uc-wordbreaks.sh check_PROGRAMS += test-u32-wordbreaks test-uc-wordbreaks test_u32_wordbreaks_SOURCES = uniwbrk/test-u32-wordbreaks.c test_u32_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_wordbreaks_SOURCES = uniwbrk/test-uc-wordbreaks.c test_uc_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u8-wordbreaks�����������������������������������������������0000664�0000000�0000000�00000000671�14110572173�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Word breaks in UTF-8 strings. Files: lib/uniwbrk/u8-wordbreaks.c lib/uniwbrk/u-wordbreaks.h Depends-on: uniwbrk/base uniwbrk/wordbreak-property uniwbrk/table unistr/u8-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwbrk/u8-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U8_WORDBREAKS lib_SOURCES += uniwbrk/u8-wordbreaks.c endif Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/u8-wordbreaks-tests�����������������������������������������0000664�0000000�0000000�00000000422�14110572173�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwbrk/test-u8-wordbreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-wordbreaks check_PROGRAMS += test-u8-wordbreaks test_u8_wordbreaks_SOURCES = uniwbrk/test-u8-wordbreaks.c test_u8_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/ulc-wordbreaks����������������������������������������������0000664�0000000�0000000�00000000662�14110572173�0022303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Word breaks in strings. Files: lib/uniwbrk/ulc-wordbreaks.c Depends-on: uniwbrk/base uniwbrk/u8-wordbreaks unilbrk/ulc-common uniconv/u8-conv-from-enc c-ctype localcharset configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwbrk/ulc-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_ULC_WORDBREAKS lib_SOURCES += uniwbrk/ulc-wordbreaks.c endif Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/ulc-wordbreaks-tests����������������������������������������0000664�0000000�0000000�00000000707�14110572173�0023443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwbrk/test-ulc-wordbreaks.sh tests/uniwbrk/test-ulc-wordbreaks.c tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR Makefile.am: 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@ ���������������������������������������������������������gnulib-20210822~d383792/modules/uniwbrk/wordbreak-property������������������������������������������0000664�0000000�0000000�00000000606�14110572173�0023217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for word breaks. Files: lib/uniwbrk/wordbreak-property.c lib/uniwbrk/wbrkprop.h Depends-on: uniwbrk/base configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwbrk/wordbreak-property]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_WORDBREAK_PROPERTY lib_SOURCES += uniwbrk/wordbreak-property.c endif Include: "uniwbrk.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/�����������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017602�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/base�������������������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Base layer for Unicode string width. Files: lib/uniwidth.in.h lib/localcharset.h m4/libunistring-base.m4 Depends-on: unitypes configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.11], [uniwidth.h]) Makefile.am: BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H) uniwidth.h: uniwidth.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniwidth.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t Include: "uniwidth.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u16-strwidth�����������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0022004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-16 string. Files: lib/uniwidth/u16-strwidth.c Depends-on: uniwidth/base uniwidth/u16-width unistr/u16-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u16-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_STRWIDTH lib_SOURCES += uniwidth/u16-strwidth.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u16-strwidth-tests�����������������������������������������0000664�0000000�0000000�00000000416�14110572173�0023147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u16-strwidth.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-strwidth check_PROGRAMS += test-u16-strwidth test_u16_strwidth_SOURCES = uniwidth/test-u16-strwidth.c test_u16_strwidth_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u16-width��������������������������������������������������0000664�0000000�0000000�00000000607�14110572173�0021260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-16 string. Files: lib/uniwidth/u16-width.c Depends-on: uniwidth/base uniwidth/width unistr/u16-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u16-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_WIDTH lib_SOURCES += uniwidth/u16-width.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u16-width-tests��������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u16-width.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u16-width check_PROGRAMS += test-u16-width test_u16_width_SOURCES = uniwidth/test-u16-width.c test_u16_width_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u32-strwidth�����������������������������������������������0000664�0000000�0000000�00000000620�14110572173�0022002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-32 string. Files: lib/uniwidth/u32-strwidth.c Depends-on: uniwidth/base uniwidth/u32-width unistr/u32-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u32-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_STRWIDTH lib_SOURCES += uniwidth/u32-strwidth.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u32-strwidth-tests�����������������������������������������0000664�0000000�0000000�00000000416�14110572173�0023145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u32-strwidth.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-strwidth check_PROGRAMS += test-u32-strwidth test_u32_strwidth_SOURCES = uniwidth/test-u32-strwidth.c test_u32_strwidth_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u32-width��������������������������������������������������0000664�0000000�0000000�00000000556�14110572173�0021261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-32 string. Files: lib/uniwidth/u32-width.c Depends-on: uniwidth/base uniwidth/width configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u32-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_WIDTH lib_SOURCES += uniwidth/u32-width.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u32-width-tests��������������������������������������������0000664�0000000�0000000�00000000374�14110572173�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u32-width.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-width check_PROGRAMS += test-u32-width test_u32_width_SOURCES = uniwidth/test-u32-width.c test_u32_width_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u8-strwidth������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0021725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-8 string. Files: lib/uniwidth/u8-strwidth.c Depends-on: uniwidth/base uniwidth/u8-width unistr/u8-strlen configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u8-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_STRWIDTH lib_SOURCES += uniwidth/u8-strwidth.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u8-strwidth-tests������������������������������������������0000664�0000000�0000000�00000000410�14110572173�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u8-strwidth.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-strwidth check_PROGRAMS += test-u8-strwidth test_u8_strwidth_SOURCES = uniwidth/test-u8-strwidth.c test_u8_strwidth_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u8-width���������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0021173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of UTF-8 string. Files: lib/uniwidth/u8-width.c Depends-on: uniwidth/base uniwidth/width unistr/u8-mbtouc-unsafe configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/u8-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_WIDTH lib_SOURCES += uniwidth/u8-width.c endif Include: "uniwidth.h" License: LGPLv3+ or GPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/u8-width-tests���������������������������������������������0000664�0000000�0000000�00000000366�14110572173�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-u8-width.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u8-width check_PROGRAMS += test-u8-width test_u8_width_SOURCES = uniwidth/test-u8-width.c test_u8_width_LDADD = $(LDADD) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/width������������������������������������������������������0000664�0000000�0000000�00000000542�14110572173�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine display width of Unicode character. Files: lib/uniwidth/width.c lib/uniwidth/cjk.h Depends-on: uniwidth/base streq configure.ac: gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH lib_SOURCES += uniwidth/width.c endif Include: "uniwidth.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uniwidth/width-tests������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0022005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwidth/test-uc_width.c tests/uniwidth/test-uc_width2.c tests/uniwidth/test-uc_width2.sh tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-uc_width uniwidth/test-uc_width2.sh check_PROGRAMS += test-uc_width test-uc_width2 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) ������������������������������������������������������������gnulib-20210822~d383792/modules/unlink��������������������������������������������������������������0000664�0000000�0000000�00000000661�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unlink() function: remove a file. Files: lib/unlink.c m4/unlink.m4 Depends-on: unistd filename [test $REPLACE_UNLINK = 1] lstat [test $REPLACE_UNLINK = 1] malloc-posix [test $REPLACE_UNLINK = 1] configure.ac: gl_FUNC_UNLINK if test $REPLACE_UNLINK = 1; then AC_LIBOBJ([unlink]) fi gl_UNISTD_MODULE_INDICATOR([unlink]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlink-busy���������������������������������������������������������0000664�0000000�0000000�00000000314�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a running program can be unlinked. Files: m4/unlink-busy.m4 Depends-on: configure.ac: gl_FUNC_UNLINK_BUSY_TEXT Makefile.am: Include: License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlink-tests��������������������������������������������������������0000664�0000000�0000000�00000000324�14110572173�0020331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unlink.h tests/test-unlink.c tests/signature.h tests/macros.h Depends-on: ignore-value stdbool symlink unlinkdir configure.ac: Makefile.am: TESTS += test-unlink check_PROGRAMS += test-unlink ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlinkat������������������������������������������������������������0000664�0000000�0000000�00000001754�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unlinkat() function: Remove a file at a directory. Files: lib/unlinkat.c lib/at-func.c m4/unlinkat.m4 m4/lstat.m4 Depends-on: unistd extensions fcntl-h [test $HAVE_UNLINKAT = 0 || test $REPLACE_UNLINKAT = 1] openat-h [test $HAVE_UNLINKAT = 0 || test $REPLACE_UNLINKAT = 1] sys_stat [test $HAVE_UNLINKAT = 0 || test $REPLACE_UNLINKAT = 1] statat [test $REPLACE_UNLINKAT = 1] at-internal [test $HAVE_UNLINKAT = 0] errno [test $HAVE_UNLINKAT = 0] fchdir [test $HAVE_UNLINKAT = 0] filename [test $HAVE_UNLINKAT = 0] openat-die [test $HAVE_UNLINKAT = 0] rmdir [test $HAVE_UNLINKAT = 0] save-cwd [test $HAVE_UNLINKAT = 0] unlink [test $HAVE_UNLINKAT = 0] configure.ac: gl_FUNC_UNLINKAT if test $HAVE_UNLINKAT = 0 || test $REPLACE_UNLINKAT = 1; then AC_LIBOBJ([unlinkat]) fi gl_UNISTD_MODULE_INDICATOR([unlinkat]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake ��������������������gnulib-20210822~d383792/modules/unlinkat-tests������������������������������������������������������0000664�0000000�0000000�00000000416�14110572173�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unlinkat.c tests/test-rmdir.h tests/test-unlink.h tests/signature.h tests/macros.h Depends-on: ignore-value symlink unlinkdir configure.ac: Makefile.am: TESTS += test-unlinkat check_PROGRAMS += test-unlinkat test_unlinkat_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlinkdir�����������������������������������������������������������0000664�0000000�0000000�00000000453�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether we can unlink directories. Files: lib/unlinkdir.h lib/unlinkdir.c m4/unlinkdir.m4 Depends-on: stdbool priv-set root-uid configure.ac: gl_UNLINKDIR Makefile.am: lib_SOURCES += unlinkdir.c Include: "unlinkdir.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlocked-io���������������������������������������������������������0000664�0000000�0000000�00000001462�14110572173�0020106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable faster, non-thread-safe stdio functions if available, globally throughout the package. Files: Depends-on: unlocked-io-internal configure.ac: AC_DEFINE([GNULIB_STDIO_SINGLE_THREAD], [1], [Define to 1 if you want the FILE stream functions getc, putc, etc. to use unlocked I/O if available, throughout the package. Unlocked I/O can improve performance, sometimes dramatically. But unlocked I/O is safe only in single-threaded programs, as well as in multithreaded programs for which you can guarantee that every FILE stream, including stdin, stdout, stderr, is used only in a single thread.]) AC_DEFINE([USE_UNLOCKED_IO], [GNULIB_STDIO_SINGLE_THREAD], [An alias of GNULIB_STDIO_SINGLE_THREAD.]) Makefile.am: Include: "unlocked-io.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlocked-io-internal������������������������������������������������0000664�0000000�0000000�00000000442�14110572173�0021715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allow use of faster, non-thread-safe stdio functions if available, in specific modules. Files: lib/unlocked-io.h m4/unlocked-io.m4 Depends-on: extensions configure.ac: gl_FUNC_GLIBC_UNLOCKED_IO Makefile.am: Include: "unlocked-io.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unlockpt������������������������������������������������������������0000664�0000000�0000000�00000000732�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unlockpt() function: Unlock the slave side of a pseudo-terminal from its master side. Files: lib/unlockpt.c m4/unlockpt.m4 Depends-on: stdlib extensions fcntl-h [test $HAVE_UNLOCKPT = 0] ptsname [test $HAVE_UNLOCKPT = 0] configure.ac: gl_FUNC_UNLOCKPT if test $HAVE_UNLOCKPT = 0; then AC_LIBOBJ([unlockpt]) gl_PREREQ_UNLOCKPT fi gl_STDLIB_MODULE_INDICATOR([unlockpt]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������gnulib-20210822~d383792/modules/unlockpt-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unlockpt.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-unlockpt check_PROGRAMS += test-unlockpt �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unsetenv������������������������������������������������������������0000664�0000000�0000000�00000001006�14110572173�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unsetenv() function: remove an environment variable. Files: lib/unsetenv.c m4/setenv.m4 Depends-on: stdlib unistd [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1] environ [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1] configure.ac: gl_FUNC_UNSETENV if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then AC_LIBOBJ([unsetenv]) gl_PREREQ_UNSETENV fi gl_STDLIB_MODULE_INDICATOR([unsetenv]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/unsetenv-tests������������������������������������������������������0000664�0000000�0000000�00000000246�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-unsetenv.c tests/signature.h tests/macros.h Depends-on: putenv configure.ac: Makefile.am: TESTS += test-unsetenv check_PROGRAMS += test-unsetenv ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/update-copyright����������������������������������������������������0000664�0000000�0000000�00000000330�14110572173�0021156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Update an FSF copyright year list to include the current year. Files: build-aux/update-copyright Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/update-copyright-tests����������������������������������������������0000664�0000000�0000000�00000000340�14110572173�0022317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-update-copyright.sh Depends-on: configure.ac: abs_aux_dir=`cd "$ac_aux_dir"; pwd` AC_SUBST([abs_aux_dir]) Makefile.am: TESTS += test-update-copyright.sh TESTS_ENVIRONMENT += abs_aux_dir='$(abs_aux_dir)' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/uptime��������������������������������������������������������������0000664�0000000�0000000�00000000270�14110572173�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether /proc/uptime might exist. Files: m4/uptime.m4 Depends-on: configure.ac: gl_SYS_PROC_UPTIME Makefile.am: Include: License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/useless-if-before-free����������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detect useless "if" tests before "free" calls. Files: build-aux/useless-if-before-free Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/userspec������������������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parse a 'user:group' specifier (e.g. the first argument of chown utility). Files: lib/userspec.c lib/userspec.h m4/userspec.m4 Depends-on: posixver xalloc xstrtol strdup gettext-h intprops inttostr stdbool configure.ac: gl_USERSPEC Makefile.am: lib_SOURCES += userspec.c Include: "userspec.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/userspec-tests������������������������������������������������������0000664�0000000�0000000�00000000256�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-userspec.c Depends-on: xalloc configure.ac: Makefile.am: TESTS += test-userspec check_PROGRAMS += test-userspec test_userspec_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/usleep��������������������������������������������������������������0000664�0000000�0000000�00000000660�14110572173�0017171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: usleep() function: pause execution of the current thread. Files: lib/usleep.c m4/usleep.m4 Depends-on: unistd extensions sleep [test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1] configure.ac: gl_FUNC_USLEEP if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then AC_LIBOBJ([usleep]) fi gl_UNISTD_MODULE_INDICATOR([usleep]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Eric Blake ��������������������������������������������������������������������������������gnulib-20210822~d383792/modules/usleep-tests��������������������������������������������������������0000664�0000000�0000000�00000000236�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-usleep.c tests/signature.h tests/macros.h Depends-on: time configure.ac: Makefile.am: TESTS += test-usleep check_PROGRAMS += test-usleep ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utf16-ucs4����������������������������������������������������������0000664�0000000�0000000�00000000242�14110572173�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UTF-16 to UCS-4. Files: Depends-on: unistr/u16-mbtouc configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utf16-ucs4-unsafe���������������������������������������������������0000664�0000000�0000000�00000000251�14110572173�0020770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UTF-16 to UCS-4. Files: Depends-on: unistr/u16-mbtouc-unsafe configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utf8-ucs4�����������������������������������������������������������0000664�0000000�0000000�00000000240�14110572173�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UTF-8 to UCS-4. Files: Depends-on: unistr/u8-mbtouc configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utf8-ucs4-unsafe����������������������������������������������������0000664�0000000�0000000�00000000247�14110572173�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Conversion UTF-8 to UCS-4. Files: Depends-on: unistr/u8-mbtouc-unsafe configure.ac: Makefile.am: Include: "unistr.h" License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utime���������������������������������������������������������������0000664�0000000�0000000�00000001072�14110572173�0017015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: utime() function: set access and modification times of a file. Files: lib/utime.c m4/utime.m4 Depends-on: utime-h time filename [test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1] malloca [test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1] stat [test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1] configure.ac: gl_FUNC_UTIME if test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1; then AC_LIBOBJ([utime]) gl_PREREQ_UTIME fi gl_UTIME_MODULE_INDICATOR([utime]) Makefile.am: Include: <utime.h> License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utime-h�������������������������������������������������������������0000664�0000000�0000000�00000002711�14110572173�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <utime.h> that conforms to POSIX. Files: lib/utime.in.h m4/utime_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_UTIME_H gl_UTIME_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += utime.h # We need the following in order to create <utime.h> when the system # doesn't have one that works with the given compiler. utime.h: utime.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_UTIME_H''@/$(HAVE_UTIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UTIME_H''@|$(NEXT_UTIME_H)|g' \ -e 's/@''GNULIB_UTIME''@/$(GNULIB_UTIME)/g' \ -e 's/@''GNULIB_MDA_UTIME''@/$(GNULIB_MDA_UTIME)/g' \ -e 's|@''HAVE_UTIME''@|$(HAVE_UTIME)|g' \ -e 's|@''REPLACE_UTIME''@|$(REPLACE_UTIME)|g' \ -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)' \ < $(srcdir)/utime.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += utime.h utime.h-t Include: <utime.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������gnulib-20210822~d383792/modules/utime-h-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000371�14110572173�0020751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-utime-h-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-utime-h-c++ check_PROGRAMS += test-utime-h-c++ test_utime_h_c___SOURCES = test-utime-h-c++.cc endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utime-h-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-utime-h.c Depends-on: utime-h-c++-tests configure.ac: Makefile.am: TESTS += test-utime-h check_PROGRAMS += test-utime-h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utime-tests���������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-utime.c tests/nap.h tests/test-utimens-common.h tests/macros.h Depends-on: dup gettext-h ignore-value intprops nanosleep symlink timespec utimecmp configure.ac: Makefile.am: TESTS += test-utime check_PROGRAMS += test-utime test_utime_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utimecmp������������������������������������������������������������0000664�0000000�0000000�00000000510�14110572173�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: compare file timestamps Files: lib/utimecmp.h lib/utimecmp.c m4/utimecmp.m4 Depends-on: dirname-lgpl fstatat hash stat-time time utimensat intprops stdbool stdint verify configure.ac: gl_UTIMECMP Makefile.am: lib_SOURCES += utimecmp.c Include: "utimecmp.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utimens�������������������������������������������������������������0000664�0000000�0000000�00000000657�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set file access and modification times. Files: lib/utimens.c lib/utimens.h m4/utimens.m4 m4/utimes.m4 Depends-on: errno extern-inline fcntl-h fstat lstat gettime msvc-nothrow stat stat-time stdbool sys_stat sys_time time utime utime-h configure.ac: gl_UTIMENS Makefile.am: lib_SOURCES += utimens.c Include: "utimens.h" Link: $(LIB_CLOCK_GETTIME) License: LGPL Maintainer: Paul Eggert, Jim Meyering, Eric Blake ���������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utimens-tests�������������������������������������������������������0000664�0000000�0000000�00000000611�14110572173�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-futimens.h tests/test-lutimens.h tests/test-utimens.h tests/test-utimens-common.h tests/test-utimens.c tests/macros.h Depends-on: dup gettext-h ignore-value intprops nanosleep symlink timespec utimecmp configure.ac: Makefile.am: TESTS += test-utimens check_PROGRAMS += test-utimens test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utimensat�����������������������������������������������������������0000664�0000000�0000000�00000002266�14110572173�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set file access and modification times of a file relative to a directory fd. Files: lib/utimensat.c lib/at-func.c m4/utimensat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] errno [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] fchdir [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] fcntl-h [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] filename [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] openat-die [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] openat-h [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] save-cwd [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] stat-time [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] utimens [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1] fstatat [test $REPLACE_UTIMENSAT = 1] configure.ac: gl_FUNC_UTIMENSAT if test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1; then AC_LIBOBJ([utimensat]) fi gl_SYS_STAT_MODULE_INDICATOR([utimensat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/utimensat-tests�����������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0021053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/nap.h tests/test-lutimens.h tests/test-utimens.h tests/test-utimens-common.h tests/test-utimensat.c tests/signature.h tests/macros.h Depends-on: ignore-value intprops nanosleep timespec utimecmp configure.ac: Makefile.am: TESTS += test-utimensat check_PROGRAMS += test-utimensat test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/va-args�������������������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detect whether the preprocessor supports C99 variadic macros and __VA_ARGS__. Files: m4/va-args.m4 Depends-on: configure.ac: gl_VA_ARGS Makefile.am: Include: License: LGPL Maintainer: Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/valgrind-tests������������������������������������������������������0000664�0000000�0000000�00000000252�14110572173�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macro to search for valgrind, for self-tests. Files: m4/valgrind-tests.m4 configure.ac: gl_VALGRIND_TESTS License: unlimited Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vararrays�����������������������������������������������������������0000664�0000000�0000000�00000000247�14110572173�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Variable-length arrays Files: m4/vararrays.m4 Depends-on: configure.ac: AC_C_VARARRAYS Makefile.am: Include: License: LGPL Maintainer: Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasnprintf����������������������������������������������������������0000664�0000000�0000000�00000001116�14110572173�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vsprintf with automatic memory allocation and bounded output size. Files: lib/float+.h lib/printf-args.h lib/printf-args.c lib/printf-parse.h lib/printf-parse.c lib/vasnprintf.h lib/vasnprintf.c lib/asnprintf.c m4/wchar_t.m4 m4/wint_t.m4 m4/intmax_t.m4 m4/stdint_h.m4 m4/inttypes_h.m4 m4/vasnprintf.m4 m4/printf.m4 m4/math_h.m4 m4/exponentd.m4 Depends-on: stdio alloca-opt attribute float free-posix stdint xsize errno memchr verify wchar configure.ac: AC_REQUIRE([AC_C_RESTRICT]) gl_FUNC_VASNPRINTF Makefile.am: Include: "vasnprintf.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasnprintf-posix����������������������������������������������������0000664�0000000�0000000�00000001250�14110572173�0021222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vsprintf with automatic memory allocation and bounded output size. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/vasnprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: vasnprintf isnand-nolibm isnanl-nolibm frexp-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe multiarch configure.ac: gl_FUNC_VASNPRINTF_POSIX Makefile.am: Include: "vasnprintf.h" License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasnprintf-posix-tests����������������������������������������������0000664�0000000�0000000�00000001316�14110572173�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vasnprintf-posix.c tests/test-vasnprintf-posix2.sh tests/test-vasnprintf-posix2.c tests/test-vasnprintf-posix3.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h m4/locale-fr.m4 m4/codeset.m4 Depends-on: stdint float setlocale configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-vasnprintf-posix test-vasnprintf-posix2.sh test-vasnprintf-posix3 TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-vasnprintf-posix test-vasnprintf-posix2 test-vasnprintf-posix3 test_vasnprintf_posix2_LDADD = $(LDADD) $(LIB_SETLOCALE) test_vasnprintf_posix3_LDADD = $(LDADD) $(LIB_SETLOCALE) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasnprintf-tests����������������������������������������������������0000664�0000000�0000000�00000000224�14110572173�0021222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vasnprintf.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-vasnprintf check_PROGRAMS += test-vasnprintf ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasprintf�����������������������������������������������������������0000664�0000000�0000000�00000001074�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vsprintf with automatic memory allocation. Files: lib/vasprintf.c lib/asprintf.c m4/vasprintf.m4 Depends-on: stdio extensions vasnprintf [test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1] errno [test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1] configure.ac: gl_FUNC_VASPRINTF gl_STDIO_MODULE_INDICATOR([vasprintf]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasprintf-posix�����������������������������������������������������0000664�0000000�0000000�00000001325�14110572173�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vsprintf with automatic memory allocation. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/vasprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: vasprintf vasnprintf [test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1] isnand-nolibm isnanl-nolibm frexp-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe multiarch configure.ac: gl_FUNC_VASPRINTF_POSIX Makefile.am: Include: "vasprintf.h" License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasprintf-posix-tests�����������������������������������������������0000664�0000000�0000000�00000000407�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vasprintf-posix.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/macros.h Depends-on: stdint float configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-vasprintf-posix check_PROGRAMS += test-vasprintf-posix ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vasprintf-tests�����������������������������������������������������0000664�0000000�0000000�00000000243�14110572173�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vasprintf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-vasprintf check_PROGRAMS += test-vasprintf �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vc-list-files�������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: list version-controlled files (vc-agnostic) Files: build-aux/vc-list-files Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vc-list-files-tests�������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vc-list-files-git.sh tests/test-vc-list-files-cvs.sh Depends-on: test-framework-sh configure.ac: abs_aux_dir=`cd "$ac_aux_dir"; pwd` AC_SUBST([abs_aux_dir]) Makefile.am: TESTS += test-vc-list-files-git.sh TESTS += test-vc-list-files-cvs.sh TESTS_ENVIRONMENT += abs_aux_dir='$(abs_aux_dir)' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vcs-to-changelog����������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert git log to ChangeLog Files: build-aux/vcs-to-changelog.py build-aux/vcstocl/frontend_c.py build-aux/vcstocl/misc_util.py build-aux/vcstocl/vcs_git.py Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Siddhesh Poyarekar �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vdprintf������������������������������������������������������������0000664�0000000�0000000�00000001113�14110572173�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vdprintf() function: print formatted output to a file descriptor Files: lib/vdprintf.c m4/vdprintf.m4 Depends-on: stdio vasnprintf [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] free-posix [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] full-write [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] errno [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] configure.ac: gl_FUNC_VDPRINTF gl_STDIO_MODULE_INDICATOR([vdprintf]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vdprintf-posix������������������������������������������������������0000664�0000000�0000000�00000002402�14110572173�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vdprintf() function: print formatted output to a file descriptor Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/vdprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: vdprintf nocrash printf-safe multiarch vasnprintf [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] isnand-nolibm [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] isnanl-nolibm [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] frexp-nolibm [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] frexpl-nolibm [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] printf-frexp [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] printf-frexpl [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] signbit [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] fpucw [test $ac_cv_func_vdprintf = no || test $REPLACE_VDPRINTF = 1] configure.ac: gl_FUNC_VDPRINTF_POSIX Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vdprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vdprintf-posix.sh tests/test-vdprintf-posix.c tests/test-fprintf-posix.h tests/test-printf-posix.output tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-vdprintf-posix.sh check_PROGRAMS += test-vdprintf-posix �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vdprintf-tests������������������������������������������������������0000664�0000000�0000000�00000000237�14110572173�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vdprintf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-vdprintf check_PROGRAMS += test-vdprintf �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/verify��������������������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compile-time assert-like macros. Files: lib/verify.h Depends-on: c99 configure.ac: Makefile.am: Include: "verify.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/verify-tests��������������������������������������������������������0000664�0000000�0000000�00000001146�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-verify.c tests/test-verify-try.c tests/test-verify.sh Depends-on: test-framework-sh configure.ac: Makefile.am: TESTS_ENVIRONMENT += MAKE='$(MAKE)' TESTS += test-verify test-verify.sh check_PROGRAMS += test-verify # test-verify-try is never built, but test-verify.sh needs a rule to # build test-verify-try.o. EXTRA_PROGRAMS += test-verify-try # 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 += .deps/test-verify-try.Tpo ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/verror��������������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: verror and verror_at_line functions: Error reporting with va_list. Files: lib/verror.h lib/verror.c Depends-on: stdio error xvasprintf configure.ac: m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=verror:3:c-format]) AM_][XGETTEXT_OPTION([--flag=verror_at_line:5:c-format])]) Makefile.am: lib_SOURCES += verror.h verror.c Include: "verror.h" License: GPL Maintainer: Eric Blake ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/version-etc���������������������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Print --version and bug-reporting information in a consistent format. Files: lib/version-etc.h lib/version-etc.c m4/version-etc.m4 Depends-on: gettext-h stdarg configure.ac: gl_VERSION_ETC Makefile.am: lib_SOURCES += version-etc.h version-etc.c Include: "version-etc.h" License: LGPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/version-etc-fsf�����������������������������������������������������0000664�0000000�0000000�00000000331�14110572173�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copyright variable for FSF projects Files: lib/version-etc-fsf.c Depends-on: version-etc configure.ac: Makefile.am: lib_SOURCES += version-etc-fsf.c Include: License: LGPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/version-etc-tests���������������������������������������������������0000664�0000000�0000000�00000000343�14110572173�0021270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-version-etc.c tests/test-version-etc.sh Depends-on: test-framework-sh version-etc-fsf Makefile.am: TESTS += test-version-etc.sh check_PROGRAMS += test-version-etc test_version_etc_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vfprintf-posix������������������������������������������������������0000664�0000000�0000000�00000002254�14110572173�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vfprintf() function: print formatted output to a stream Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/vfprintf.c m4/vfprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: stdio nocrash printf-safe multiarch free-posix [test $REPLACE_VFPRINTF = 1] fseterr [test $REPLACE_VFPRINTF = 1] vasnprintf [test $REPLACE_VFPRINTF = 1] isnand-nolibm [test $REPLACE_VFPRINTF = 1] isnanl-nolibm [test $REPLACE_VFPRINTF = 1] frexp-nolibm [test $REPLACE_VFPRINTF = 1] frexpl-nolibm [test $REPLACE_VFPRINTF = 1] printf-frexp [test $REPLACE_VFPRINTF = 1] printf-frexpl [test $REPLACE_VFPRINTF = 1] signbit [test $REPLACE_VFPRINTF = 1] fpucw [test $REPLACE_VFPRINTF = 1] errno [test $REPLACE_VFPRINTF = 1] configure.ac: gl_FUNC_VFPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vfprintf-posix]) gl_MODULE_INDICATOR([vfprintf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vfprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vfprintf-posix.sh tests/test-vfprintf-posix.c tests/test-fprintf-posix.h tests/test-printf-posix.output tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-vfprintf-posix.sh check_PROGRAMS += test-vfprintf-posix �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vfscanf�������������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vfscanf() function: parse formatted text from a stream Files: Depends-on: stdio configure.ac: gl_STDIO_MODULE_INDICATOR([vfscanf]) gl_MODULE_INDICATOR([vfscanf]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vla�����������������������������������������������������������������0000664�0000000�0000000�00000000254�14110572173�0016455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros for dealing with variable length arrays. Files: lib/vla.h Depends-on: vararrays configure.ac: Makefile.am: Include: License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vma-iter������������������������������������������������������������0000664�0000000�0000000�00000000546�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iteration over virtual memory areas. Files: lib/vma-iter.h lib/vma-iter.c m4/mmap-anon.m4 Depends-on: stdint unistd extensions getpagesize open configure.ac: gl_FUNC_MMAP_ANON AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([mquery pstat_getprocvm]) Makefile.am: lib_SOURCES += vma-iter.c Include: "vma-iter.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000001236�14110572173�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vprintf() function: print formatted output to standard output Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/vprintf.c m4/vprintf-posix.m4 m4/printf.m4 Depends-on: stdio printf-safe vfprintf-posix [test $REPLACE_VPRINTF = 1] configure.ac: gl_FUNC_VPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vprintf-posix]) gl_MODULE_INDICATOR([vprintf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000436�14110572173�0021665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vprintf-posix.sh tests/test-vprintf-posix.c tests/test-printf-posix.h tests/test-printf-posix.output tests/infinity.h tests/signature.h tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-vprintf-posix.sh check_PROGRAMS += test-vprintf-posix ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vscanf��������������������������������������������������������������0000664�0000000�0000000�00000000367�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vscanf() function: parse formatted text from standard input Files: Depends-on: stdio configure.ac: gl_STDIO_MODULE_INDICATOR([vscanf]) gl_MODULE_INDICATOR([vscanf]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vsnprintf�����������������������������������������������������������0000664�0000000�0000000�00000000770�14110572173�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vsnprintf() function: print formatted output from an stdarg argument list to a fixed length string Files: lib/vsnprintf.c m4/vsnprintf.m4 m4/printf.m4 Depends-on: stdio vasnprintf [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] errno [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] configure.ac: gl_FUNC_VSNPRINTF gl_STDIO_MODULE_INDICATOR([vsnprintf]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Yoann Vandoorselaere ��������gnulib-20210822~d383792/modules/vsnprintf-posix�����������������������������������������������������0000664�0000000�0000000�00000002434�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vsnprintf() function: print formatted output to a fixed length string Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: m4/vsnprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: vsnprintf nocrash printf-safe multiarch vasnprintf [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] isnand-nolibm [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] isnanl-nolibm [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] frexp-nolibm [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] frexpl-nolibm [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] printf-frexp [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] printf-frexpl [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] signbit [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] fpucw [test $ac_cv_func_vsnprintf = no || test $REPLACE_VSNPRINTF = 1] configure.ac: gl_FUNC_VSNPRINTF_POSIX Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vsnprintf-posix-tests�����������������������������������������������0000664�0000000�0000000�00000000712�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vsnprintf-posix.c tests/test-snprintf-posix.h tests/test-vsnprintf.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: stdint float configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_DEFINE([CHECK_VSNPRINTF_POSIX], 1, [Define to 1 for strict checking in test-vsnprintf.c.]) Makefile.am: TESTS += test-vsnprintf-posix test-vsnprintf check_PROGRAMS += test-vsnprintf-posix test-vsnprintf ������������������������������������������������������gnulib-20210822~d383792/modules/vsnprintf-tests�����������������������������������������������������0000664�0000000�0000000�00000000243�14110572173�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vsnprintf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-vsnprintf check_PROGRAMS += test-vsnprintf �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vsprintf-posix������������������������������������������������������0000664�0000000�0000000�00000002131�14110572173�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible vsprintf() function: print formatted output to a string Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: lib/vsprintf.c m4/vsprintf-posix.m4 m4/printf.m4 m4/math_h.m4 Depends-on: stdio nocrash printf-safe multiarch vasnprintf [test $REPLACE_VSPRINTF = 1] isnand-nolibm [test $REPLACE_VSPRINTF = 1] isnanl-nolibm [test $REPLACE_VSPRINTF = 1] frexp-nolibm [test $REPLACE_VSPRINTF = 1] frexpl-nolibm [test $REPLACE_VSPRINTF = 1] printf-frexp [test $REPLACE_VSPRINTF = 1] printf-frexpl [test $REPLACE_VSPRINTF = 1] signbit [test $REPLACE_VSPRINTF = 1] fpucw [test $REPLACE_VSPRINTF = 1] stdint [test $REPLACE_VSPRINTF = 1] errno [test $REPLACE_VSPRINTF = 1] configure.ac: gl_FUNC_VSPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vsprintf-posix]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/vsprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0022046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vsprintf-posix.c tests/test-sprintf-posix.h tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: stdint float configure.ac: AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) Makefile.am: TESTS += test-vsprintf-posix check_PROGRAMS += test-vsprintf-posix ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wait-process��������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Waiting for a subprocess to finish. Files: lib/wait-process.h lib/wait-process.c m4/wait-process.m4 m4/sig_atomic_t.m4 Depends-on: fatal-signal error xalloc xalloc-die gettext-h stdbool stdlib sys_wait unistd atexit waitpid configure.ac: gl_WAIT_PROCESS Makefile.am: lib_SOURCES += wait-process.h wait-process.c Include: "wait-process.h" Link: $(LIBTHREAD) License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/waitpid�������������������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: waitpid() function: wait for process state change Files: lib/waitpid.c m4/waitpid.m4 Depends-on: sys_wait configure.ac: gl_FUNC_WAITPID if test $HAVE_WAITPID = 0; then AC_LIBOBJ([waitpid]) fi gl_SYS_WAIT_MODULE_INDICATOR([waitpid]) Makefile.am: Include: <sys/wait.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/warnings������������������������������������������������������������0000664�0000000�0000000�00000000264�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper M4 functions for safely adding compiler warning parameters. Files: m4/warnings.m4 Depends-on: configure.ac: License: unlimited Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wchar���������������������������������������������������������������0000664�0000000�0000000�00000016002�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <wchar.h> that works around platform issues. Note also the wchar-single module. Files: lib/wchar.in.h m4/wchar_h.m4 m4/wint_t.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use inttypes-incomplete stddef configure.ac: gl_WCHAR_H gl_WCHAR_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += wchar.h # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GNULIB_MDA_WCSDUP)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -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 && \ mv $@-t $@ MOSTLYCLEANFILES += wchar.h wchar.h-t Include: <wchar.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wchar-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000637�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wchar-c++.cc tests/test-wchar-c++2.cc tests/test-wchar-c++3.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-wchar-c++ check_PROGRAMS += test-wchar-c++ test_wchar_c___SOURCES = test-wchar-c++.cc test-wchar-c++2.cc test-wchar-c++3.cc test_wchar_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_EACCESS) $(LIBTHREAD) endif �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wchar-single��������������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable more efficient wchar replacements, where we know the locale charset will not change between calls. Files: Depends-on: wchar configure.ac: gl_MODULE_INDICATOR([wchar-single]) Makefile.am: Include: License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wchar-tests���������������������������������������������������������0000664�0000000�0000000�00000000214�14110572173�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wchar.c Depends-on: verify wchar-c++-tests configure.ac: Makefile.am: TESTS += test-wchar check_PROGRAMS += test-wchar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcpcpy��������������������������������������������������������������0000664�0000000�0000000�00000000566�14110572173�0017206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcpcpy() function: copy a wide string. Status: obsolete Notice: This module is obsolete. Files: lib/wcpcpy.c lib/wcpcpy-impl.h m4/wcpcpy.m4 Depends-on: extensions wchar configure.ac: gl_FUNC_WCPCPY if test $HAVE_WCPCPY = 0; then AC_LIBOBJ([wcpcpy]) fi gl_WCHAR_MODULE_INDICATOR([wcpcpy]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcpncpy�������������������������������������������������������������0000664�0000000�0000000�00000000527�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcpncpy() function: copy a size-bounded wide string. Files: lib/wcpncpy.c lib/wcpncpy-impl.h m4/wcpncpy.m4 Depends-on: extensions wchar configure.ac: gl_FUNC_WCPNCPY if test $HAVE_WCPNCPY = 0; then AC_LIBOBJ([wcpncpy]) fi gl_WCHAR_MODULE_INDICATOR([wcpncpy]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcrtomb�������������������������������������������������������������0000664�0000000�0000000�00000001050�14110572173�0017343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcrtomb() function: convert wide character to multibyte character. Files: lib/wcrtomb.c m4/wcrtomb.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wchar extensions mbsinit [test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1] configure.ac: gl_FUNC_WCRTOMB if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then AC_LIBOBJ([wcrtomb]) gl_PREREQ_WCRTOMB fi gl_WCHAR_MODULE_INDICATOR([wcrtomb]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcrtomb-tests�������������������������������������������������������0000664�0000000�0000000�00000001650�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcrtomb.sh tests/test-wcrtomb.c tests/test-wcrtomb-w32-1.sh tests/test-wcrtomb-w32-2.sh tests/test-wcrtomb-w32-3.sh tests/test-wcrtomb-w32-4.sh tests/test-wcrtomb-w32-5.sh tests/test-wcrtomb-w32-6.sh tests/test-wcrtomb-w32-7.sh tests/test-wcrtomb-w32.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: btowc setlocale localcharset configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: 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 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) ����������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscasecmp����������������������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0020027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscasecmp() function: compare two wide strings ignoring case. Files: lib/wcscasecmp.c lib/wcscasecmp-impl.h m4/wcscasecmp.m4 Depends-on: wchar wctype-h [test $HAVE_WCSCASECMP = 0] configure.ac: gl_FUNC_WCSCASECMP if test $HAVE_WCSCASECMP = 0; then AC_LIBOBJ([wcscasecmp]) fi gl_WCHAR_MODULE_INDICATOR([wcscasecmp]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscat��������������������������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscat() function: concatenate two wide strings. Status: obsolete Notice: This module is obsolete. Files: lib/wcscat.c lib/wcscat-impl.h m4/wcscat.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSCAT if test $HAVE_WCSCAT = 0; then AC_LIBOBJ([wcscat]) fi gl_WCHAR_MODULE_INDICATOR([wcscat]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcschr��������������������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0017157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcschr() function: search wide string for a wide character. Status: obsolete Notice: This module is obsolete. Files: lib/wcschr.c lib/wcschr-impl.h m4/wcschr.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSCHR if test $HAVE_WCSCHR = 0; then AC_LIBOBJ([wcschr]) fi gl_WCHAR_MODULE_INDICATOR([wcschr]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscmp��������������������������������������������������������������0000664�0000000�0000000�00000000561�14110572173�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscmp() function: compare two wide strings. Status: obsolete Notice: This module is obsolete. Files: lib/wcscmp.c lib/wcscmp-impl.h m4/wcscmp.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSCMP if test $HAVE_WCSCMP = 0; then AC_LIBOBJ([wcscmp]) fi gl_WCHAR_MODULE_INDICATOR([wcscmp]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscoll�������������������������������������������������������������0000664�0000000�0000000�00000000635�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscoll() function: compare two wide strings using the current locale. Status: obsolete Notice: This module is obsolete. Files: lib/wcscoll.c lib/wcscoll-impl.h m4/wcscoll.m4 Depends-on: free-posix wchar configure.ac: gl_FUNC_WCSCOLL if test $HAVE_WCSCOLL = 0; then AC_LIBOBJ([wcscoll]) fi gl_WCHAR_MODULE_INDICATOR([wcscoll]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscpy��������������������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0017205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscpy() function: copy a wide string. Status: obsolete Notice: This module is obsolete. Files: lib/wcscpy.c lib/wcscpy-impl.h m4/wcscpy.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSCPY if test $HAVE_WCSCPY = 0; then AC_LIBOBJ([wcscpy]) fi gl_WCHAR_MODULE_INDICATOR([wcscpy]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcscspn�������������������������������������������������������������0000664�0000000�0000000�00000000753�14110572173�0017357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcscspn() function: search a wide string for any of a set of wide characters. Status: obsolete Notice: This module is obsolete. Files: lib/wcscspn.c lib/wcscspn-impl.h m4/wcscspn.m4 Depends-on: wchar wcslen [test $HAVE_WCSCSPN = 0] wcschr [test $HAVE_WCSCSPN = 0] configure.ac: gl_FUNC_WCSCSPN if test $HAVE_WCSCSPN = 0; then AC_LIBOBJ([wcscspn]) fi gl_WCHAR_MODULE_INDICATOR([wcscspn]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ���������������������gnulib-20210822~d383792/modules/wcsdup��������������������������������������������������������������0000664�0000000�0000000�00000000614�14110572173�0017200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsdup() function: duplicate a wide string. Files: lib/wcsdup.c lib/wcsdup-impl.h m4/wcsdup.m4 Depends-on: wchar wcslen [test $HAVE_WCSDUP = 0] wmemcpy [test $HAVE_WCSDUP = 0] configure.ac: gl_FUNC_WCSDUP if test $HAVE_WCSDUP = 0; then AC_LIBOBJ([wcsdup]) fi gl_WCHAR_MODULE_INDICATOR([wcsdup]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsftime������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsftime() function: convert broken-down time to wide string. Files: lib/wcsftime.c m4/wcsftime.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSFTIME if test $REPLACE_WCSFTIME = 1; then AC_LIBOBJ([wcsftime]) fi gl_WCHAR_MODULE_INDICATOR([wcsftime]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcslen��������������������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcslen() function: determine the length of a wide string. Status: obsolete Notice: This module is obsolete. Files: lib/wcslen.c lib/wcslen-impl.h m4/wcslen.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSLEN if test $HAVE_WCSLEN = 0; then AC_LIBOBJ([wcslen]) fi gl_WCHAR_MODULE_INDICATOR([wcslen]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsncasecmp���������������������������������������������������������0000664�0000000�0000000�00000000640�14110572173�0020200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsncasecmp() function: compare two wide strings ignoring case. Files: lib/wcsncasecmp.c lib/wcsncasecmp-impl.h m4/wcsncasecmp.m4 Depends-on: wchar wctype-h [test $HAVE_WCSNCASECMP = 0] configure.ac: gl_FUNC_WCSNCASECMP if test $HAVE_WCSNCASECMP = 0; then AC_LIBOBJ([wcsncasecmp]) fi gl_WCHAR_MODULE_INDICATOR([wcsncasecmp]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsncat�������������������������������������������������������������0000664�0000000�0000000�00000000616�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsncat() function: append part of a wide string to a wide string. Status: obsolete Notice: This module is obsolete. Files: lib/wcsncat.c lib/wcsncat-impl.h m4/wcsncat.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSNCAT if test $HAVE_WCSNCAT = 0; then AC_LIBOBJ([wcsncat]) fi gl_WCHAR_MODULE_INDICATOR([wcsncat]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsncmp�������������������������������������������������������������0000664�0000000�0000000�00000000571�14110572173�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsncmp() function: compare two wide strings. Status: obsolete Notice: This module is obsolete. Files: lib/wcsncmp.c lib/wcsncmp-impl.h m4/wcsncmp.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSNCMP if test $HAVE_WCSNCMP = 0; then AC_LIBOBJ([wcsncmp]) fi gl_WCHAR_MODULE_INDICATOR([wcsncmp]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsncpy�������������������������������������������������������������0000664�0000000�0000000�00000000600�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsncpy() function: copy a size-bounded wide string. Status: obsolete Notice: This module is obsolete. Files: lib/wcsncpy.c lib/wcsncpy-impl.h m4/wcsncpy.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSNCPY if test $HAVE_WCSNCPY = 0; then AC_LIBOBJ([wcsncpy]) fi gl_WCHAR_MODULE_INDICATOR([wcsncpy]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsnlen�������������������������������������������������������������0000664�0000000�0000000�00000000537�14110572173�0017350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsnlen() function: determine the length of a size-bounded wide string. Files: lib/wcsnlen.c lib/wcsnlen-impl.h m4/wcsnlen.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSNLEN if test $HAVE_WCSNLEN = 0; then AC_LIBOBJ([wcsnlen]) fi gl_WCHAR_MODULE_INDICATOR([wcsnlen]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsnrtombs����������������������������������������������������������0000664�0000000�0000000�00000001161�14110572173�0020072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsnrtombs() function: convert wide string to string. Files: lib/wcsnrtombs.c lib/wcsnrtombs-impl.h lib/wcsrtombs-state.c m4/wcsnrtombs.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wchar extensions wcrtomb [test $HAVE_WCSNRTOMBS = 0 || test $REPLACE_WCSNRTOMBS = 1] configure.ac: gl_FUNC_WCSNRTOMBS if test $HAVE_WCSNRTOMBS = 0 || test $REPLACE_WCSNRTOMBS = 1; then AC_LIBOBJ([wcsnrtombs]) AC_LIBOBJ([wcsrtombs-state]) gl_PREREQ_WCSNRTOMBS fi gl_WCHAR_MODULE_INDICATOR([wcsnrtombs]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsnrtombs-tests����������������������������������������������������0000664�0000000�0000000�00000001230�14110572173�0021227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcsnrtombs1.sh tests/test-wcsnrtombs2.sh tests/test-wcsnrtombs3.sh tests/test-wcsnrtombs4.sh tests/test-wcsnrtombs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-wcsnrtombs1.sh test-wcsnrtombs2.sh test-wcsnrtombs3.sh test-wcsnrtombs4.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-wcsnrtombs test_wcsnrtombs_LDADD = $(LDADD) $(LIB_SETLOCALE) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcspbrk�������������������������������������������������������������0000664�0000000�0000000�00000000702�14110572173�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcspbrk() function: search a wide string for any of a set of wide characters. Status: obsolete Notice: This module is obsolete. Files: lib/wcspbrk.c lib/wcspbrk-impl.h m4/wcspbrk.m4 Depends-on: wchar wcschr [test $HAVE_WCSPBRK = 0] configure.ac: gl_FUNC_WCSPBRK if test $HAVE_WCSPBRK = 0; then AC_LIBOBJ([wcspbrk]) fi gl_WCHAR_MODULE_INDICATOR([wcspbrk]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ��������������������������������������������������������������gnulib-20210822~d383792/modules/wcsrchr�������������������������������������������������������������0000664�0000000�0000000�00000000610�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsrchr() function: search wide string for a wide character. Status: obsolete Notice: This module is obsolete. Files: lib/wcsrchr.c lib/wcsrchr-impl.h m4/wcsrchr.m4 Depends-on: wchar configure.ac: gl_FUNC_WCSRCHR if test $HAVE_WCSRCHR = 0; then AC_LIBOBJ([wcsrchr]) fi gl_WCHAR_MODULE_INDICATOR([wcsrchr]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsrtombs�����������������������������������������������������������0000664�0000000�0000000�00000001165�14110572173�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsrtombs() function: convert wide string to string. Files: lib/wcsrtombs.c lib/wcsrtombs-impl.h lib/wcsrtombs-state.c m4/wcsrtombs.m4 m4/mbrtowc.m4 m4/mbstate_t.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: wchar extensions wcrtomb [test $HAVE_WCSRTOMBS = 0 || test $REPLACE_WCSRTOMBS = 1] configure.ac: gl_FUNC_WCSRTOMBS if test $HAVE_WCSRTOMBS = 0 || test $REPLACE_WCSRTOMBS = 1; then AC_LIBOBJ([wcsrtombs]) AC_LIBOBJ([wcsrtombs-state]) gl_PREREQ_WCSRTOMBS fi gl_WCHAR_MODULE_INDICATOR([wcsrtombs]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsrtombs-tests�����������������������������������������������������0000664�0000000�0000000�00000001215�14110572173�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcsrtombs1.sh tests/test-wcsrtombs2.sh tests/test-wcsrtombs3.sh tests/test-wcsrtombs4.sh tests/test-wcsrtombs.c tests/signature.h tests/macros.h m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/codeset.m4 Depends-on: setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN Makefile.am: TESTS += test-wcsrtombs1.sh test-wcsrtombs2.sh test-wcsrtombs3.sh test-wcsrtombs4.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-wcsrtombs test_wcsrtombs_LDADD = $(LDADD) $(LIB_SETLOCALE) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsspn��������������������������������������������������������������0000664�0000000�0000000�00000000703�14110572173�0017207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsspn() function: advance in a wide string, skipping any of a set of wide characters. Status: obsolete Notice: This module is obsolete. Files: lib/wcsspn.c lib/wcsspn-impl.h m4/wcsspn.m4 Depends-on: wchar wcschr [test $HAVE_WCSSPN = 0] configure.ac: gl_FUNC_WCSSPN if test $HAVE_WCSSPN = 0; then AC_LIBOBJ([wcsspn]) fi gl_WCHAR_MODULE_INDICATOR([wcsspn]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �������������������������������������������������������������gnulib-20210822~d383792/modules/wcsstr��������������������������������������������������������������0000664�0000000�0000000�00000000560�14110572173�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsstr() function: locate a substring in a wide string. Files: lib/wcsstr.c lib/wcsstr-impl.h m4/wcsstr.m4 Depends-on: wchar wcschr [test $HAVE_WCSSTR = 0] configure.ac: gl_FUNC_WCSSTR if test $HAVE_WCSSTR = 0; then AC_LIBOBJ([wcsstr]) fi gl_WCHAR_MODULE_INDICATOR([wcsstr]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcstok��������������������������������������������������������������0000664�0000000�0000000�00000000750�14110572173�0017206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcstok() function: split a wide string into tokens. Files: lib/wcstok.c lib/wcstok-impl.h m4/wcstok.m4 Depends-on: wchar wcsspn [test $HAVE_WCSTOK = 0 || test $REPLACE_WCSTOK = 1] wcspbrk [test $HAVE_WCSTOK = 0 || test $REPLACE_WCSTOK = 1] configure.ac: gl_FUNC_WCSTOK if test $HAVE_WCSTOK = 0 || test $REPLACE_WCSTOK = 1; then AC_LIBOBJ([wcstok]) fi gl_WCHAR_MODULE_INDICATOR([wcstok]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������gnulib-20210822~d383792/modules/wcstok-tests��������������������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcstok.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-wcstok check_PROGRAMS += test-wcstok �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcswidth������������������������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcswidth() function: determine number of screen columns needed for a size-bounded wide string. Files: lib/wcswidth.c lib/wcswidth-impl.h m4/wcswidth.m4 Depends-on: wchar wcwidth [test $HAVE_WCSWIDTH = 0 || test $REPLACE_WCSWIDTH = 1] configure.ac: gl_FUNC_WCSWIDTH if test $HAVE_WCSWIDTH = 0 || test $REPLACE_WCSWIDTH = 1; then AC_LIBOBJ([wcswidth]) fi gl_WCHAR_MODULE_INDICATOR([wcswidth]) Makefile.am: Include: <wchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcsxfrm�������������������������������������������������������������0000664�0000000�0000000�00000000565�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wcsxfrm() function: transform wide string for comparison using the current locale. Files: lib/wcsxfrm.c lib/wcsxfrm-impl.h m4/wcsxfrm.m4 Depends-on: free-posix wchar configure.ac: gl_FUNC_WCSXFRM if test $HAVE_WCSXFRM = 0; then AC_LIBOBJ([wcsxfrm]) fi gl_WCHAR_MODULE_INDICATOR([wcsxfrm]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wctob���������������������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wctob() function: convert wide character to unibyte character. Files: lib/wctob.c m4/wctob.m4 m4/locale-fr.m4 m4/codeset.m4 Depends-on: wchar wctomb [test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1] configure.ac: gl_FUNC_WCTOB if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then AC_LIBOBJ([wctob]) gl_PREREQ_WCTOB fi gl_WCHAR_MODULE_INDICATOR([wctob]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/wctomb��������������������������������������������������������������0000664�0000000�0000000�00000000704�14110572173�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wctomb() function: convert wide character to multibyte character. Files: lib/wctomb.c lib/wctomb-impl.h m4/wctomb.m4 Depends-on: stdlib wcrtomb [test $REPLACE_WCTOMB = 1] wchar [test $REPLACE_WCTOMB = 1] configure.ac: gl_FUNC_WCTOMB if test $REPLACE_WCTOMB = 1; then AC_LIBOBJ([wctomb]) gl_PREREQ_WCTOMB fi gl_STDLIB_MODULE_INDICATOR([wctomb]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������gnulib-20210822~d383792/modules/wctrans�������������������������������������������������������������0000664�0000000�0000000�00000000545�14110572173�0017357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wctrans() function: get descriptor for a wide character case conversion. Files: lib/wctrans.c lib/wctrans-impl.h m4/wctrans.m4 Depends-on: wctype-h configure.ac: gl_FUNC_WCTRANS if test $HAVE_WCTRANS = 0; then AC_LIBOBJ([wctrans]) fi gl_WCTYPE_MODULE_INDICATOR([wctrans]) Makefile.am: Include: <wctype.h> License: LGPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wctype��������������������������������������������������������������0000664�0000000�0000000�00000001002�14110572173�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wctype() function: get descriptor for a wide character property. Status: obsolete Notice: This module is obsolete. Files: lib/wctype.c lib/wctype-impl.h m4/wctype.m4 Depends-on: wctype-h iswblank [test $HAVE_WCTYPE = 0] iswdigit [test $HAVE_WCTYPE = 0] iswxdigit [test $HAVE_WCTYPE = 0] configure.ac: gl_FUNC_WCTYPE if test $HAVE_WCTYPE = 0; then AC_LIBOBJ([wctype]) fi gl_WCTYPE_MODULE_INDICATOR([wctype]) Makefile.am: Include: <wctype.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wctype-h������������������������������������������������������������0000664�0000000�0000000�00000004521�14110572173�0017434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <wctype.h> that conforms better to C99. Files: lib/wctype.in.h lib/wctype-h.c m4/wctype_h.m4 m4/wint_t.m4 Depends-on: extern-inline include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_WCTYPE_H gl_WCTYPE_H_REQUIRE_DEFAULTS Makefile.am: BUILT_SOURCES += wctype.h lib_SOURCES += wctype-h.c # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/wctype.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += wctype.h wctype.h-t Include: <wctype.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wctype-h-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000576�14110572173�0021150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wctype-h-c++.cc tests/test-wctype-h-c++2.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-wctype-h-c++ check_PROGRAMS += test-wctype-h-c++ test_wctype_h_c___SOURCES = test-wctype-h-c++.cc test-wctype-h-c++2.cc test_wctype_h_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_EACCESS) endif ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wctype-h-tests������������������������������������������������������0000664�0000000�0000000�00000000240�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wctype-h.c tests/macros.h Depends-on: wctype-h-c++-tests configure.ac: Makefile.am: TESTS += test-wctype-h check_PROGRAMS += test-wctype-h ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcwidth�������������������������������������������������������������0000664�0000000�0000000�00000001403�14110572173�0017341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine the number of screen columns needed for a character. Files: lib/wcwidth.c m4/wcwidth.m4 m4/wchar_t.m4 m4/wint_t.m4 Depends-on: wchar extensions wctype-h [test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1] localcharset [test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1] streq [test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1] uniwidth/width [test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1] configure.ac: gl_FUNC_WCWIDTH if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then AC_LIBOBJ([wcwidth]) gl_PREREQ_WCWIDTH fi gl_WCHAR_MODULE_INDICATOR([wcwidth]) Makefile.am: Include: <wchar.h> Link: $(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wcwidth-tests�������������������������������������������������������0000664�0000000�0000000�00000000360�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcwidth.c tests/signature.h tests/macros.h Depends-on: c-ctype localcharset configure.ac: Makefile.am: TESTS += test-wcwidth check_PROGRAMS += test-wcwidth test_wcwidth_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-cond��������������������������������������������������������0000664�0000000�0000000�00000000567�14110572173�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Condition variables (native Windows implementation). Files: lib/windows-cond.h lib/windows-cond.c lib/windows-initguard.h Depends-on: stdbool errno time gettimeofday configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-cond]) ;; esac Makefile.am: Include: "windows-cond.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-mutex�������������������������������������������������������0000664�0000000�0000000�00000000525�14110572173�0020526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Plain mutexes (native Windows implementation). Files: lib/windows-mutex.h lib/windows-mutex.c lib/windows-initguard.h Depends-on: configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-mutex]) ;; esac Makefile.am: Include: "windows-mutex.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-once��������������������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Once-only control (native Windows implementation). Files: lib/windows-once.h lib/windows-once.c Depends-on: configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-once]) ;; esac Makefile.am: Include: "windows-once.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-recmutex����������������������������������������������������0000664�0000000�0000000�00000000553�14110572173�0021221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Plain recursive mutexes (native Windows implementation). Files: lib/windows-recmutex.h lib/windows-recmutex.c lib/windows-initguard.h Depends-on: configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-recmutex]) ;; esac Makefile.am: Include: "windows-recmutex.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-rwlock������������������������������������������������������0000664�0000000�0000000�00000000534�14110572173�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read-write locks (native Windows implementation). Files: lib/windows-rwlock.h lib/windows-rwlock.c lib/windows-initguard.h Depends-on: configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-rwlock]) ;; esac Makefile.am: Include: "windows-rwlock.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-spawn�������������������������������������������������������0000664�0000000�0000000�00000000641�14110572173�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Auxiliary functions for the creation of subprocesses on native Windows. Files: lib/windows-spawn.h lib/windows-spawn.c Depends-on: findprog-in msvc-nothrow stdbool stdint stdlib strpbrk unistd malloc-posix configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-spawn]) ;; esac Makefile.am: Include: "windows-spawn.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-spin��������������������������������������������������������0000664�0000000�0000000�00000000466�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Spin locks (native Windows implementation). Files: lib/windows-spin.h lib/windows-spin.c Depends-on: configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-spin]) ;; esac Makefile.am: Include: "windows-spin.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-stat-inodes�������������������������������������������������0000664�0000000�0000000�00000001061�14110572173�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: On native Windows platforms, ensure that 'struct stat' contains values in the st_dev, st_ino fields that are able to distinguish different inodes. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: m4/windows-stat-inodes.m4 Depends-on: windows-stat-override configure.ac: AC_REQUIRE([gl_WINDOWS_STAT_INODES]) Makefile.am: Include: License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-stat-override�����������������������������������������������0000664�0000000�0000000�00000001077�14110572173�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: On native Windows platforms, override 'struct stat'. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: Depends-on: sys_stat configure.ac: gl_SYS_STAT_H_REQUIRE_DEFAULTS AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT], [1]) ;; esac Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-stat-timespec�����������������������������������������������0000664�0000000�0000000�00000001127�14110572173�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: On native Windows platforms, ensure that 'struct stat' contains st_atim, st_mtim, st_ctim fields of type 'struct timespec', providing 100 ns resolution for the timestamps of files. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: m4/windows-stat-timespec.m4 Depends-on: windows-stat-override configure.ac: AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) Makefile.am: Include: License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-thread������������������������������������������������������0000664�0000000�0000000�00000000555�14110572173�0020636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creating and controlling threads (native Windows implementation). Files: lib/windows-thread.h lib/windows-thread.c Depends-on: windows-once windows-tls configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-thread]) ;; esac Makefile.am: Include: "windows-thread.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-timedmutex��������������������������������������������������0000664�0000000�0000000�00000000601�14110572173�0021544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Timed mutexes (native Windows implementation). Files: lib/windows-timedmutex.h lib/windows-timedmutex.c lib/windows-initguard.h Depends-on: errno time gettimeofday configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-timedmutex]) ;; esac Makefile.am: Include: "windows-timedmutex.h" License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-timedrecmutex�����������������������������������������������0000664�0000000�0000000�00000000627�14110572173�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Timed recursive mutexes (native Windows implementation). Files: lib/windows-timedrecmutex.h lib/windows-timedrecmutex.c lib/windows-initguard.h Depends-on: errno time gettimeofday configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-timedrecmutex]) ;; esac Makefile.am: Include: "windows-timedrecmutex.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-timedrwlock�������������������������������������������������0000664�0000000�0000000�00000000616�14110572173�0021711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Timed read-write locks (native Windows implementation). Files: lib/windows-timedrwlock.h lib/windows-timedrwlock.c lib/windows-initguard.h Depends-on: errno time gettimeofday configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-timedrwlock]) ;; esac Makefile.am: Include: "windows-timedrwlock.h" License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/windows-tls���������������������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Thread-local storage (native Windows implementation). Files: lib/windows-tls.h lib/windows-tls.c Depends-on: windows-once configure.ac: AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_LIBOBJ([windows-tls]) ;; esac Makefile.am: Include: "windows-tls.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/winsz-ioctl���������������������������������������������������������0000664�0000000�0000000�00000000351�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether use of TIOCGWINSZ requires sys/ioctl.h. Files: m4/jm-winsz2.m4 Depends-on: winsz-termios configure.ac: gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL Makefile.am: Include: License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/winsz-termios�������������������������������������������������������0000664�0000000�0000000�00000000351�14110572173�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether use of TIOCGWINSZ requires termios.h. Files: m4/jm-winsz1.m4 Depends-on: configure.ac: gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H gl_WINSIZE_IN_PTEM Makefile.am: Include: License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmemchr�������������������������������������������������������������0000664�0000000�0000000�00000000540�14110572173�0017333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmemchr() function: search wide character array for a wide character. Files: lib/wmemchr.c lib/wmemchr-impl.h m4/wmemchr.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMCHR if test $HAVE_WMEMCHR = 0; then AC_LIBOBJ([wmemchr]) fi gl_WCHAR_MODULE_INDICATOR([wmemchr]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmemcmp�������������������������������������������������������������0000664�0000000�0000000�00000000512�14110572173�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmemcmp() function: compare wide character arrays. Files: lib/wmemcmp.c lib/wmemcmp-impl.h m4/wmemcmp.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMCMP if test $HAVE_WMEMCMP = 0; then AC_LIBOBJ([wmemcmp]) fi gl_WCHAR_MODULE_INDICATOR([wmemcmp]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmemcpy�������������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmemcpy() function: copy wide character array. Files: lib/wmemcpy.c lib/wmemcpy-impl.h m4/wmemcpy.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMCPY if test $HAVE_WMEMCPY = 0; then AC_LIBOBJ([wmemcpy]) fi gl_WCHAR_MODULE_INDICATOR([wmemcpy]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmemmove������������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmemmove() function: copy wide character array. Files: lib/wmemmove.c lib/wmemmove-impl.h m4/wmemmove.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMMOVE if test $HAVE_WMEMMOVE = 0; then AC_LIBOBJ([wmemmove]) fi gl_WCHAR_MODULE_INDICATOR([wmemmove]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmempcpy������������������������������������������������������������0000664�0000000�0000000�00000000557�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmempcpy() function: copy wide character array, return pointer after last written wide character. Files: lib/wmempcpy.c m4/wmempcpy.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMPCPY if test $HAVE_WMEMPCPY = 0; then AC_LIBOBJ([wmempcpy]) fi gl_WCHAR_MODULE_INDICATOR([wmempcpy]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/wmemset�������������������������������������������������������������0000664�0000000�0000000�00000000506�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: wmemset() function: fill wide character array. Files: lib/wmemset.c lib/wmemset-impl.h m4/wmemset.m4 Depends-on: wchar configure.ac: gl_FUNC_WMEMSET if test $HAVE_WMEMSET = 0; then AC_LIBOBJ([wmemset]) fi gl_WCHAR_MODULE_INDICATOR([wmemset]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/write���������������������������������������������������������������0000664�0000000�0000000�00000000724�14110572173�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible write() function: write data to a file descriptor Files: lib/write.c m4/write.m4 Depends-on: unistd raise [test $REPLACE_WRITE = 1] msvc-inval [test $REPLACE_WRITE = 1] msvc-nothrow [test $REPLACE_WRITE = 1] configure.ac: gl_FUNC_WRITE if test $REPLACE_WRITE = 1; then AC_LIBOBJ([write]) gl_PREREQ_WRITE fi gl_UNISTD_MODULE_INDICATOR([write]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ��������������������������������������������gnulib-20210822~d383792/modules/write-any-file������������������������������������������������������0000664�0000000�0000000�00000000505�14110572173�0020526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine whether we can write any file. Files: lib/write-any-file.h lib/write-any-file.c m4/write-any-file.m4 Depends-on: stdbool priv-set root-uid configure.ac: gl_WRITE_ANY_FILE Makefile.am: lib_SOURCES += write-any-file.c Include: "write-any-file.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/write-tests���������������������������������������������������������0000664�0000000�0000000�00000000245�14110572173�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-write.c tests/signature.h tests/macros.h Depends-on: binary-io open configure.ac: Makefile.am: TESTS += test-write check_PROGRAMS += test-write �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xalloc��������������������������������������������������������������0000664�0000000�0000000�00000000617�14110572173�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation with out-of-memory checking. Also see xalloc-die. Files: lib/xalloc.h lib/xmalloc.c m4/xalloc.m4 Depends-on: c99 calloc-gnu extern-inline ialloc idx intprops malloc-gnu minmax realloc-gnu reallocarray stdint xalloc-die configure.ac: gl_XALLOC gl_MODULE_INDICATOR([xalloc]) Makefile.am: lib_SOURCES += xmalloc.c Include: "xalloc.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xalloc-die����������������������������������������������������������0000664�0000000�0000000�00000000452�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Report a memory allocation failure and exit. Files: lib/xalloc.h lib/xalloc-die.c Depends-on: error extern-inline gettext-h exitfail stdint configure.ac: gl_MODULE_INDICATOR([xalloc-die]) Makefile.am: lib_SOURCES += xalloc-die.c Include: "xalloc.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xalloc-die-tests����������������������������������������������������0000664�0000000�0000000�00000000316�14110572173�0021053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xalloc-die.c tests/test-xalloc-die.sh Depends-on: test-framework-sh Makefile.am: TESTS += test-xalloc-die.sh check_PROGRAMS += test-xalloc-die test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xalloc-oversized����������������������������������������������������0000664�0000000�0000000�00000000327�14110572173�0021166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check for memory allocation overflow. Also see xalloc. Files: lib/xalloc-oversized.h Depends-on: stdint configure.ac: Makefile.am: Include: "xalloc-oversized.h" License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xbinary-io����������������������������������������������������������0000664�0000000�0000000�00000000434�14110572173�0017754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Checked Binary mode I/O. Files: lib/xbinary-io.h lib/xbinary-io.c Depends-on: binary-io error exitfail extern-inline gettext-h stdbool verify configure.ac: Makefile.am: lib_SOURCES += xbinary-io.h xbinary-io.c Include: "xbinary-io.h" License: LGPL Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xconcat-filename����������������������������������������������������0000664�0000000�0000000�00000000543�14110572173�0021111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Construct a full filename by concatenating a directory name, a relative filename, and a suffix, with out-of-memory checking. Files: lib/concat-filename.h lib/xconcat-filename.c Depends-on: concat-filename xalloc-die configure.ac: Makefile.am: lib_SOURCES += xconcat-filename.c Include: "concat-filename.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xfreopen������������������������������������������������������������0000664�0000000�0000000�00000000456�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Open a file, reusing a given stream, with error checking. Files: lib/xfreopen.c lib/xfreopen.h Depends-on: error exitfail freopen quote configure.ac: Makefile.am: lib_SOURCES += xfreopen.c xfreopen.h Include: "xfreopen.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xgetcwd�������������������������������������������������������������0000664�0000000�0000000�00000000441�14110572173�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the current working directory, without size limitations. Files: lib/xgetcwd.h lib/xgetcwd.c m4/xgetcwd.m4 Depends-on: getcwd xalloc stdbool configure.ac: gl_XGETCWD Makefile.am: lib_SOURCES += xgetcwd.c Include: "xgetcwd.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xgetdomainname������������������������������������������������������0000664�0000000�0000000�00000000516�14110572173�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return machine's domainname, without size limitations. Files: lib/xgetdomainname.h lib/xgetdomainname.c lib/xgetaname-impl.h Depends-on: free-posix getdomainname xalloc configure.ac: Makefile.am: lib_SOURCES += xgetdomainname.h xgetdomainname.c Include: "xgetdomainname.h" License: GPL Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xgetgroups����������������������������������������������������������0000664�0000000�0000000�00000000521�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the group IDs of a user or current process in malloc'd storage, with out-of-memory checking. Files: lib/xgetgroups.c Depends-on: mgetgroups xalloc configure.ac: gl_MODULE_INDICATOR([xgetgroups]) Makefile.am: lib_SOURCES += xgetgroups.c Include: "mgetgroups.h" License: GPL Maintainer: Jim Meyering, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xgethostname��������������������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return machine's hostname, without size limitations. Files: lib/xgethostname.h lib/xgethostname.c lib/xgetaname-impl.h Depends-on: free-posix gethostname xalloc configure.ac: Makefile.am: lib_SOURCES += xgethostname.h xgethostname.c Include: "xgethostname.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xhash���������������������������������������������������������������0000664�0000000�0000000�00000000364�14110572173�0017010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parameterizable hash table, with out-of-memory checking. Files: lib/xhash.c Depends-on: hash xalloc configure.ac: Makefile.am: lib_SOURCES += xhash.c Include: "hash.h" License: GPLv3+ Maintainer: Akim Demaille, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xlist���������������������������������������������������������������0000664�0000000�0000000�00000000437�14110572173�0017041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract sequential list data type, with out-of-memory checking. Files: lib/gl_xlist.h lib/gl_xlist.c Depends-on: list extern-inline stdbool xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xlist.h gl_xlist.c Include: "gl_xlist.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xmalloca������������������������������������������������������������0000664�0000000�0000000�00000000413�14110572173�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Safe automatic memory allocation with out of memory checking. Files: lib/xmalloca.h lib/xmalloca.c Depends-on: malloca xalloc xalloc-oversized configure.ac: Makefile.am: lib_SOURCES += xmalloca.c Include: "xmalloca.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xmap����������������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0016637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract map data type, with out-of-memory checking. Files: lib/gl_xmap.h lib/gl_xmap.c Depends-on: map extern-inline stdbool xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xmap.h gl_xmap.c Include: "gl_xmap.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xmemcoll������������������������������������������������������������0000664�0000000�0000000�00000000551�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent memory area comparison, with error checking. Files: lib/xmemcoll.h lib/xmemcoll.c Depends-on: memcoll gettext-h error quotearg exitfail configure.ac: AC_REQUIRE([AC_C_RESTRICT]) Makefile.am: lib_SOURCES += xmemcoll.h xmemcoll.c Include: "xmemcoll.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xmemdup0������������������������������������������������������������0000664�0000000�0000000�00000000402�14110572173�0017425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy a block of arbitrary bytes, and append a trailing NUL. Files: lib/xmemdup0.h lib/xmemdup0.c Depends-on: xalloc configure.ac: Makefile.am: lib_SOURCES += xmemdup0.h xmemdup0.c Include: "xmemdup0.h" License: GPL Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xmemdup0-tests������������������������������������������������������0000664�0000000�0000000�00000000266�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xmemdup0.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-xmemdup0 check_PROGRAMS += test-xmemdup0 test_xmemdup0_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xnanosleep����������������������������������������������������������0000664�0000000�0000000�00000000572�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A variant of nanosleep that takes a 'double' argument and handles EINTR. Files: lib/xnanosleep.h lib/xnanosleep.c m4/xnanosleep.m4 Depends-on: c99 dtotimespec intprops nanosleep time unistd configure.ac: gl_XNANOSLEEP Makefile.am: lib_SOURCES += xnanosleep.c Include: "xnanosleep.h" Link: $(LIB_NANOSLEEP) License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xomap���������������������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered map data type, with out-of-memory checking. Files: lib/gl_xomap.h lib/gl_xomap.c Depends-on: omap extern-inline stdbool xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xomap.h gl_xomap.c Include: "gl_xomap.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xoset���������������������������������������������������������������0000664�0000000�0000000�00000000433�14110572173�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered set data type, with out-of-memory checking. Files: lib/gl_xoset.h lib/gl_xoset.c Depends-on: oset extern-inline stdbool xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xoset.h gl_xoset.c Include: "gl_xoset.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xprintf�������������������������������������������������������������0000664�0000000�0000000�00000001041�14110572173�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: a wrapper around printf that calls error upon ENOMEM or EILSEQ errors Files: lib/xprintf.h lib/xprintf.c Depends-on: stdio error exitfail gettext-h stdarg configure.ac: m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=xprintf:1:c-format]) AM_][XGETTEXT_OPTION([--flag=xvprintf:1:c-format]) AM_][XGETTEXT_OPTION([--flag=xfprintf:2:c-format]) AM_][XGETTEXT_OPTION([--flag=xvfprintf:2:c-format])]) Makefile.am: lib_SOURCES += xprintf.h xprintf.c Include: "xprintf.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000001035�14110572173�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A wrapper around printf with POSIX compatible format string interpretation, that calls error upon ENOMEM or EILSEQ errors. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: Depends-on: xprintf vprintf-posix vfprintf-posix configure.ac: Makefile.am: Include: "xprintf.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000664�14110572173�0021672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xprintf-posix.sh tests/test-xfprintf-posix.c tests/test-xprintf-posix.c tests/test-fprintf-posix.h tests/test-printf-posix.h tests/test-printf-posix.output tests/infinity.h tests/macros.h Depends-on: stdint configure.ac: Makefile.am: TESTS += test-xprintf-posix.sh check_PROGRAMS += test-xfprintf-posix test-xprintf-posix test_xfprintf_posix_LDADD = $(LDADD) @LIBINTL@ test_xprintf_posix_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������gnulib-20210822~d383792/modules/xreadlink�����������������������������������������������������������0000664�0000000�0000000�00000000373�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reading symbolic links without size limitation. Files: lib/xreadlink.h lib/xreadlink.c Depends-on: areadlink xalloc configure.ac: Makefile.am: lib_SOURCES += xreadlink.c Include: "xreadlink.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xreadlinkat���������������������������������������������������������0000664�0000000�0000000�00000000500�14110572173�0020173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reading symbolic links without size limitation, relative to fd. Files: lib/xreadlink.h lib/xreadlinkat.c Depends-on: areadlinkat xalloc configure.ac: gl_MODULE_INDICATOR([xreadlinkat]) Makefile.am: lib_SOURCES += xreadlinkat.c Include: "xreadlink.h" License: GPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xset����������������������������������������������������������������0000664�0000000�0000000�00000000415�14110572173�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract set data type, with out-of-memory checking. Files: lib/gl_xset.h lib/gl_xset.c Depends-on: set extern-inline stdbool xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xset.h gl_xset.c Include: "gl_xset.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xsetenv�������������������������������������������������������������0000664�0000000�0000000�00000000535�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: xsetenv() function: set an environment variable, with out-of-memory checking. unsetenv() function: remove an environment variable. Files: lib/xsetenv.h lib/xsetenv.c Depends-on: setenv unsetenv error gettext-h stdlib configure.ac: Makefile.am: lib_SOURCES += xsetenv.h xsetenv.c Include: "xsetenv.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xsize���������������������������������������������������������������0000664�0000000�0000000�00000000400�14110572173�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Checked size_t computations. Files: lib/xsize.h lib/xsize.c m4/xsize.m4 Depends-on: attribute extern-inline size_max configure.ac: gl_XSIZE Makefile.am: lib_SOURCES += xsize.h xsize.c Include: "xsize.h" License: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstdopen������������������������������������������������������������0000664�0000000�0000000�00000000372�14110572173�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure that stdin, stdout, stderr are open. Files: lib/xstdopen.h lib/xstdopen.c Depends-on: stdopen error gettext-h exitfail configure.ac: Makefile.am: lib_SOURCES += xstdopen.c Include: "xstdopen.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstdopen-tests������������������������������������������������������0000664�0000000�0000000�00000000323�14110572173�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xstdopen.c tests/test-xstdopen.sh tests/macros.h Depends-on: test-framework-sh Makefile.am: TESTS += test-xstdopen.sh check_PROGRAMS += test-xstdopen test_xstdopen_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstriconv�����������������������������������������������������������0000664�0000000�0000000�00000000461�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion of strings made easy, uses iconv, with out-of-memory checking. Files: lib/xstriconv.h lib/xstriconv.c Depends-on: striconv xalloc configure.ac: Makefile.am: lib_SOURCES += xstriconv.h xstriconv.c Include: "xstriconv.h" License: GPL Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstriconveh���������������������������������������������������������0000664�0000000�0000000�00000000443�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character set conversion of strings made easy, uses iconv, with out-of-memory checking. Files: lib/xstriconveh.h lib/xstriconveh.c Depends-on: striconveh xalloc configure.ac: Makefile.am: lib_SOURCES += xstriconveh.c Include: "xstriconveh.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrndup������������������������������������������������������������0000664�0000000�0000000�00000000475�14110572173�0017567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Duplicate a bounded initial segment of a string, with out-of-memory checking. Files: lib/xstrndup.h lib/xstrndup.c m4/xstrndup.m4 Depends-on: strndup xalloc configure.ac: gl_XSTRNDUP Makefile.am: lib_SOURCES += xstrndup.h xstrndup.c Include: "xstrndup.h" License: GPL Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtod�������������������������������������������������������������0000664�0000000�0000000�00000000404�14110572173�0017377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'double', with error checking. Files: lib/xstrtod.h lib/xstrtod.c m4/xstrtod.m4 Depends-on: stdbool configure.ac: gl_XSTRTOD Makefile.am: lib_SOURCES += xstrtod.c Include: "xstrtod.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoimax����������������������������������������������������������0000664�0000000�0000000�00000000356�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'intmax_t', with error checking. Files: lib/xstrtoimax.c Depends-on: xstrtol strtoimax configure.ac: Makefile.am: lib_SOURCES += xstrtoimax.c Include: "xstrtol.h" License: GPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoimax-tests����������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0021255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xstrtoimax.c tests/test-xstrtoimax.sh Depends-on: test-framework-sh configure.ac: Makefile.am: TESTS += test-xstrtoimax.sh check_PROGRAMS += test-xstrtoimax test_xstrtoimax_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtol�������������������������������������������������������������0000664�0000000�0000000�00000000502�14110572173�0017406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'long' or 'unsigned long', with error checking. Files: lib/xstrtol.h lib/xstrtol.c lib/xstrtoul.c m4/xstrtol.m4 Depends-on: assure inttypes-incomplete configure.ac: gl_XSTRTOL Makefile.am: lib_SOURCES += xstrtol.c xstrtoul.c Include: "xstrtol.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtol-error�������������������������������������������������������0000664�0000000�0000000�00000000446�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Error reporting function for xstrto* functions. Files: lib/xstrtol-error.c lib/xstrtol-error.h Depends-on: xstrtol error exitfail getopt-gnu gettext-h configure.ac: Makefile.am: lib_SOURCES += xstrtol-error.c Include: "xstrtol-error.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtol-tests�������������������������������������������������������0000664�0000000�0000000�00000000462�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xstrtol.c tests/test-xstrtoul.c tests/test-xstrtol.sh Depends-on: inttypes test-framework-sh xstrtol-error configure.ac: Makefile.am: TESTS += test-xstrtol.sh check_PROGRAMS += test-xstrtol test-xstrtoul test_xstrtol_LDADD = $(LDADD) @LIBINTL@ test_xstrtoul_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtold������������������������������������������������������������0000664�0000000�0000000�00000000432�14110572173�0017554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'long double', with error checking. Files: lib/xstrtod.h lib/xstrtod.c lib/xstrtold.c m4/xstrtod.m4 Depends-on: stdbool configure.ac: gl_XSTRTOLD Makefile.am: lib_SOURCES += xstrtold.c Include: "xstrtod.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoll������������������������������������������������������������0000664�0000000�0000000�00000000460�14110572173�0017565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'long long' or 'unsigned long long', with error checking. Files: lib/xstrtoll.c lib/xstrtoull.c Depends-on: limits-h strtoll strtoull xstrtol configure.ac: Makefile.am: lib_SOURCES += xstrtoll.c xstrtoull.c Include: "xstrtol.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoll-tests������������������������������������������������������0000664�0000000�0000000�00000000503�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xstrtol.c tests/test-xstrtoll.c tests/test-xstrtoull.c tests/test-xstrtoll.sh Depends-on: inttypes test-framework-sh configure.ac: Makefile.am: TESTS += test-xstrtoll.sh check_PROGRAMS += test-xstrtoll test-xstrtoull test_xstrtoll_LDADD = $(LDADD) $(LIBINTL) test_xstrtoull_LDADD = $(LDADD) $(LIBINTL) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoumax����������������������������������������������������������0000664�0000000�0000000�00000000357�14110572173�0020135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert string to 'uintmax_t', with error checking. Files: lib/xstrtoumax.c Depends-on: xstrtol strtoumax configure.ac: Makefile.am: lib_SOURCES += xstrtoumax.c Include: "xstrtol.h" License: GPL Maintainer: Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xstrtoumax-tests����������������������������������������������������0000664�0000000�0000000�00000000335�14110572173�0021271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xstrtoumax.c tests/test-xstrtoumax.sh Depends-on: test-framework-sh configure.ac: Makefile.am: TESTS += test-xstrtoumax.sh check_PROGRAMS += test-xstrtoumax test_xstrtoumax_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xsublist������������������������������������������������������������0000664�0000000�0000000�00000000467�14110572173�0017556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Sequential list data type backed by another list, with out-of-memory checking. Files: lib/gl_xsublist.h lib/gl_xsublist.c Depends-on: sublist extern-inline xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xsublist.h gl_xsublist.c Include: "gl_xsublist.h" License: GPL Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xvasprintf����������������������������������������������������������0000664�0000000�0000000�00000000764�14110572173�0020105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vasprintf and asprintf with out-of-memory checking. Also see xalloc-die. Files: lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/xalloc.h m4/xvasprintf.m4 Depends-on: stdio vasprintf xalloc xalloc-die xsize stdarg stdint errno configure.ac: gl_XVASPRINTF m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=xasprintf:1:c-format])]) Makefile.am: lib_SOURCES += xvasprintf.h xvasprintf.c xasprintf.c Include: "xvasprintf.h" License: GPL Maintainer: Oskar Liljeblad ������������gnulib-20210822~d383792/modules/xvasprintf-posix����������������������������������������������������0000664�0000000�0000000�00000001034�14110572173�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vasprintf and asprintf with POSIX compatible format string interpretation and with out-of-memory checking. Also see xalloc-die. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the 'vasnprintf' module, if that module occurs among the main modules in lib/. Files: Depends-on: xvasprintf vasprintf-posix configure.ac: Makefile.am: Include: "xvasprintf.h" License: GPL Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/xvasprintf-tests����������������������������������������������������0000664�0000000�0000000�00000000277�14110572173�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xvasprintf.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-xvasprintf check_PROGRAMS += test-xvasprintf test_xvasprintf_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/y0������������������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0016222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: y0() function: Bessel function of the second kind of order 0. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([y0]) Makefile.am: Include: <math.h> Link: $(Y0_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/y0-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-y0.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-y0 check_PROGRAMS += test-y0 test_y0_LDADD = $(LDADD) @Y0_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/y1������������������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0016223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: y1() function: Bessel function of the second kind of order 1. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([y1]) Makefile.am: Include: <math.h> Link: $(Y1_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/y1-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-y1.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-y1 check_PROGRAMS += test-y1 test_y1_LDADD = $(LDADD) @Y1_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/year2038������������������������������������������������������������0000664�0000000�0000000�00000000720�14110572173�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Attempt to ensure that 'time_t' is a 64-bit type. Comment: This module should not be used as a dependency from a test module, otherwise when this module occurs as a tests-related module, it will have side effects on the compilation of the main modules in lib/. Files: m4/year2038.m4 Depends-on: configure.ac-early: AC_REQUIRE([gl_YEAR2038_EARLY]) configure.ac: AC_REQUIRE([gl_YEAR2038]) Makefile.am: Include: License: LGPLv2+ Maintainer: all ������������������������������������������������gnulib-20210822~d383792/modules/yesno���������������������������������������������������������������0000664�0000000�0000000�00000000476�14110572173�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a response from the user, and its classification as matching "yes" or "no". Files: lib/yesno.c lib/yesno.h m4/yesno.m4 Depends-on: getline rpmatch stdbool configure.ac: gl_YESNO Makefile.am: lib_SOURCES += yesno.c Include: "yesno.h" Link: $(LIB_MBRTOWC) License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/yesno-tests���������������������������������������������������������0000664�0000000�0000000�00000000345�14110572173�0020171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-yesno.c tests/test-yesno.sh Depends-on: binary-io closein test-framework-sh configure.ac: Makefile.am: TESTS += test-yesno.sh check_PROGRAMS += test-yesno test_yesno_LDADD = $(LDADD) @LIBINTL@ $(LIB_MBRTOWC) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/yield���������������������������������������������������������������0000664�0000000�0000000�00000000511�14110572173�0016775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Yielding the processor to other threads. Files: lib/glthread/yield.h m4/yield.m4 Depends-on: threadlib sched_yield configure.ac: AC_REQUIRE([gl_YIELD]) Makefile.am: lib_SOURCES += glthread/yield.h Include: "glthread/yield.h" Link: $(LIBTHREAD) $(YIELD_LIB) License: LGPLv2+ Maintainer: Yoann Vandoorselaere ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/yn������������������������������������������������������������������0000664�0000000�0000000�00000000361�14110572173�0016320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: yn() function: Bessel function of the second kind of order n. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([yn]) Makefile.am: Include: <math.h> Link: $(YN_LIBM) License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/modules/yn-tests������������������������������������������������������������0000664�0000000�0000000�00000000260�14110572173�0017456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-yn.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-yn check_PROGRAMS += test-yn test_yn_LDADD = $(LDADD) @YN_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/posix-modules���������������������������������������������������������������0000775�0000000�0000000�00000023660�14110572173�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright (C) 2002-2008, 2010-2021 Free Software Foundation, Inc. # # This 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/>. # progname=$0 package=gnulib # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: posix-modules [option] Lists the gnulib modules that implement POSIX interfaces. Options: --for-mingw list only modules that work on mingw --for-msvc list only modules that work on MSVC Report bugs to <bug-gnulib@gnu.org>." } # func_version # outputs to stdout the --version message. func_version () { func_gnulib_dir if test -d "$gnulib_dir"/.git \ && (git --version) >/dev/null 2>/dev/null \ && (date --version) >/dev/null 2>/dev/null; then # gnulib checked out from git. sed_extract_first_date='/^Date/{ s/^Date:[ ]*//p q }' date=`cd "$gnulib_dir" && git log ChangeLog | sed -n -e "$sed_extract_first_date"` # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600". sed_year_before_time='s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /' date=`echo "$date" | sed -e "$sed_year_before_time"` # Use GNU date to compute the time in GMT. date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"` version=' '`cd "$gnulib_dir" && ./build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'` else # gnulib copy without versioning information. date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog` version= fi year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed 's,^.* ,,'` echo "\ posix-modules (GNU $package $date)$version Copyright (C) $year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by" "Bruno Haible" } # func_exit STATUS # exits with a given status. # This function needs to be used, rather than 'exit', when a 'trap' handler is # in effect that refers to $?. func_exit () { (exit $1); exit $1 } # func_gnulib_dir # locates the directory where the gnulib repository lives # Input: # - progname name of this program # Sets variables # - self_abspathname absolute pathname of this program # - gnulib_dir absolute pathname of gnulib repository func_gnulib_dir () { case "$progname" in /*) self_abspathname="$progname" ;; */*) self_abspathname=`pwd`/"$progname" ;; *) # Look in $PATH. # Iterate through the elements of $PATH. # We use IFS=: instead of # for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'` # because the latter does not work when some PATH element contains spaces. # We use a canonicalized $pathx instead of $PATH, because empty PATH # elements are by definition equivalent to '.', however field splitting # according to IFS=: loses empty fields in many shells: # - /bin/sh on OSF/1 and Solaris loses all empty fields (at the # beginning, at the end, and in the middle), # - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields # at the beginning and at the end, # - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX, # Solaris lose empty fields at the end. # The 'case' statement is an optimization, to avoid evaluating the # explicit canonicalization command when $PATH contains no empty fields. self_abspathname= if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test "$PATH_SEPARATOR" = ";"; then # On Windows, programs are searched in "." before $PATH. pathx=".;$PATH" else # On Unix, we have to convert empty PATH elements to ".". pathx="$PATH" case :$PATH: in *::*) pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'` ;; esac fi save_IFS="$IFS" IFS="$PATH_SEPARATOR" for d in $pathx; do IFS="$save_IFS" test -z "$d" && d=. if test -x "$d/$progname" && test ! -d "$d/$progname"; then self_abspathname="$d/$progname" break fi done IFS="$save_IFS" if test -z "$self_abspathname"; then func_fatal_error "could not locate the posix-modules program - how did you invoke it?" fi ;; esac while test -h "$self_abspathname"; do # Resolve symbolic link. linkval=`func_readlink "$self_abspathname"` test -n "$linkval" || break case "$linkval" in /* ) self_abspathname="$linkval" ;; * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;; esac done gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` } # func_tmpdir # creates a temporary directory. # Input: # - progname name of this program # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$progname: cannot create a temporary directory in $TMPDIR" >&2 func_exit 1 } } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. # Input: # - progname name of this program func_fatal_error () { echo "$progname: *** $1" 1>&2 echo "$progname: *** Stop." 1>&2 func_exit 1 } # func_readlink SYMLINK # outputs the target of the given symlink. if (type -p readlink) > /dev/null 2>&1; then func_readlink () { # Use the readlink program from GNU coreutils. readlink "$1" } else func_readlink () { # Use two sed invocations. A single sed -n -e 's,^.* -> \(.*\)$,\1,p' # would do the wrong thing if the link target contains " -> ". LC_ALL=C ls -l "$1" | sed -e 's, -> ,#%%#,' | sed -n -e 's,^.*#%%#\(.*\)$,\1,p' } fi # Excludes for mingw. exclude_for_mingw= # <grp.h> does not exist. exclude_for_mingw="$exclude_for_mingw pt_chown grantpt posix_openpt-tests posix_openpt" # The functions getuid, getgid, geteuid, getegid don't exist. exclude_for_mingw="$exclude_for_mingw faccessat" exclude_for_mingw="$exclude_for_mingw fchownat-tests fchownat" # Excludes for MSVC. exclude_for_msvc="$exclude_for_mingw" # Command-line option processing. exclude= while test $# -gt 0; do case "$1" in --for-mingw | --for-ming | --for-min | --for-mi ) exclude="$exclude $exclude_for_mingw" shift ;; --for-msvc | --for-msv | --for-ms ) exclude="$exclude $exclude_for_msvc" shift ;; --help | --hel | --he | --h ) func_usage exit $? ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version exit $? ;; -* ) echo "posix-modules: unknown option $1" 1>&2 echo "Try 'posix-modules --help' for more information." 1>&2 exit 1 ;; * ) echo "posix-modules: too many arguments" 1>&2 echo "Try 'posix-modules --help' for more information." 1>&2 exit 1 ;; esac done func_gnulib_dir func_tmpdir trap 'exit_status=$? if test "$signal" != 0; then echo "caught signal $signal" >&2 fi rm -rf "$tmp" exit $exit_status' 0 for signal in 1 2 3 13 15; do trap '{ signal='$signal'; func_exit 1; }' $signal done signal=0 ( # Get the header modules. LC_ALL=C grep -h '^Gnulib module: ' "$gnulib_dir"/doc/posix-headers/*.texi 2>/dev/null \ | sed -e 's,^Gnulib module: ,,' # Get the function modules. LC_ALL=C grep -h '^Gnulib module: ' "$gnulib_dir"/doc/posix-functions/*.texi 2>/dev/null \ | sed -e 's,^Gnulib module: ,,' # Then filter out the words "---", ",", "and", "or" and remove *-gnu modules. ) | sed -e 's/,/ /g' | LC_ALL=C sort | LC_ALL=C uniq \ | { # Then filter out the words "---", "and", "or" and remove *-gnu modules. tr ' ' '\012' | sed -e '/^---$/d' -e '/^and$/d' -e '/^or$/d' -e '/-gnu$/d' } \ | LC_ALL=C sort | LC_ALL=C uniq \ | { # Then filter out the excludes. if test -n "$exclude"; then for m in $exclude; do echo $m; done | LC_ALL=C sort -u > "$tmp"/excludes LC_ALL=C join -v 1 - "$tmp"/excludes rm -f "$tmp"/excludes else cat fi } # Local Variables: # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: ��������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016130�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/.gitignore���������������������������������������������������������0000664�0000000�0000000�00000000006�14110572173�0020114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.pyc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLConfig.py��������������������������������������������������������0000664�0000000�0000000�00000132710�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import copy import codecs import tempfile import subprocess as sp from . import constants from .GLError import GLError #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner relpath = constants.relativize string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath #=============================================================================== # Define GLConfig class #=============================================================================== class GLConfig(object): '''This class is used to store intermediate settings for all pygnulib classes. It contains all necessary attributes to setup any other class. By default all attributes are set to empty string, empty list or zero. The most common value, however, is a None value.''' def __init__(self, destdir=None, localdir=None, auxdir=None, sourcebase=None, m4base=None, pobase=None, docbase=None, testsbase=None, modules=None, avoids=None, files=None, testflags=None, libname=None, lgpl=None, makefile=None, libtool=None, conddeps=None, macro_prefix=None, podomain=None, witness_c_macro=None, vc_files=None, symbolic=None, lsymbolic=None, modcache=None, configure_ac=None, ac_version=None, libtests=None, single_configure=None, verbose=None, dryrun=None, errors=None): '''GLConfig.__init__(arguments) -> GLConfig Create new GLConfig instance.''' self.table = dict() self.table['tempdir'] = tempfile.mkdtemp() # destdir self.resetDestDir() if destdir != None: self.setDestDir(destdir) # localdir self.resetLocalDir() if localdir != None: self.setLocalDir(localdir) # auxdir self.resetAuxDir() if auxdir != None: self.setAuxDir(auxdir) # sourcebase self.resetSourceBase() if sourcebase != None: self.setSourceBase(sourcebase) # m4base self.resetM4Base() if m4base != None: self.setM4Base(m4base) # pobase self.resetPoBase() if pobase != None: self.setPoBase(pobase) # docbase self.resetDocBase() if docbase != None: self.setDocBase(docbase) # testsbase self.resetTestsBase() if testsbase != None: self.setTestsBase(testsbase) # modules self.resetModules() if modules != None: self.setModules(modules) # avoids self.resetAvoids() if avoids != None: self.setAvoids(avoids) # files self.resetFiles() if files != None: self.setFiles(files) # testflags self.resetTestFlags() if testflags != None: self.setTestFlags(testflags) # libname self.resetLibName() if libname != None: self.setLibName(libname) # lgpl self.resetLGPL() if lgpl != None: self.setLGPL(lgpl) # makefile self.resetMakefile() if makefile != None: self.setMakefile(makefile) # libtool self.resetLibtool() if libtool != None: if type(libtool) is bool: if not libtool: self.disableLibtool() else: # if libtool self.enableLibtool() else: # if type(libtool) is not bool raise(TypeError('libtool must be a bool, not %s' % type(libtool).__name__)) # conddeps self.resetCondDeps() if conddeps != None: if type(conddeps) is bool: if not conddeps: self.disableCondDeps() else: # if conddeps self.enableCondDeps() else: # if type(conddeps) is not bool raise(TypeError('conddeps must be a bool, not %s' % type(conddeps).__name__)) # macro_prefix self.resetMacroPrefix() if macro_prefix != None: self.setMacroPrefix(macro_prefix) # podomain self.resetPoDomain() if podomain != None: self.setPoDomain(podomain) # witness_c_macro self.resetWitnessCMacro() if witness_c_macro != None: if type(witness_c_macro) is bool: if not witness_c_macro: self.setWitnessCMacro() else: # if witness_c_macro self.resetWitnessCMacro() else: # if type(witness_c_macro) is not bool raise(TypeError('witness_c_macro must be a bool, not %s' % type(witness_c_macro).__name__)) # vc_files self.resetVCFiles() if vc_files != None: if type(vc_files) is bool: if not vc_files: self.disableVCFiles() else: # if vc_files self.enableVCFiles() else: # if type(vc_files) is not bool raise(TypeError('vc_files must be a bool, not %s' % type(vc_files).__name__)) # symbolic self.resetSymbolic() if symbolic != None: if type(symbolic) is bool: if not symbolic: self.disableSymbolic() else: # if symbolic self.enableSymbolic() else: # if type(symbolic) is not bool raise(TypeError('symbolic must be a bool, not %s' % type(symbolic).__name__)) # lsymbolic self.resetLSymbolic() if lsymbolic != None: if type(lsymbolic) is bool: if not lsymbolic: self.disableLSymbolic() else: # if lsymbolic self.enableLSymbolic() else: # if type(lsymbolic) is not bool raise(TypeError('lsymbolic must be a bool, not %s' % type(lsymbolic).__name__)) # modcache self.resetModuleCaching() if modcache != None: if type(modcache) is bool: if not modcache: self.disableModuleCaching() else: # if modcache self.enableModuleCaching() else: # if type(modcache) is not bool raise(TypeError('modcache must be a bool, not %s' % type(modcache).__name__)) # configure_ac self.resetAutoconfFile() if configure_ac != None: self.setAutoconfFile(configure_ac) # ac_version self.resetAutoconfVersion() if ac_version != None: self.setAutoconfVersion(ac_version) # libtests self.resetLibtests() if libtests != None: if type(libtests) is bool: if not libtests: self.disableLibtests() else: # if libtests self.enableLibtests() else: # if type(libtests) is not bool raise(TypeError('libtests must be a bool, not %s' % type(libtests).__name__)) # single_configure self.resetSingleConfigure() if single_configure != None: if type(single_configure) is bool: if not single_configure: self.disableSingleConfigure() else: # if single_configure self.enableSingleConfigure() else: # if type(single_configure) is not bool raise(TypeError('single_configure must be a bool, not %s' % type(single_configure).__name__)) # verbose self.resetVerbosity() if verbose != None: self.setVerbosity(verbose) # dryrun self.resetDryRun() if dryrun != None: if type(dryrun) is bool: if not dryrun: self.disableDryRun() else: # if dryrun self.enableDryRun() else: # if type(dryrun) is not bool raise(TypeError('dryrun must be a bool, not %s' % type(dryrun).__name__)) # errors self.resetErrors() if errors != None: if type(errors) is bool: if not errors: self.disableErrors() else: # if errors self.enableErrors() else: # if type(errors) is not bool raise(TypeError('errors must be a bool, not %s' % type(errors).__name__)) # Define special methods. def __repr__(self): '''x.__repr__() <==> repr(x)''' return('<pygnulib.GLConfig>') def __getitem__(self, y): '''x.__getitem__(y) <==> x[y]''' if y in self.table: result = self.table[y] if type(y) is list: result = list(self.table[y]) if y == "auxdir": if self.table['auxdir']: return self.table['auxdir'] return "build-aux" return(self.table[y]) else: # if y not in self.table raise(KeyError('GLConfig does not contain key: %s' % repr(y))) def dictionary(self): '''Return the configuration as a dict object.''' return(dict(self.table)) def copy(self): '''Return the copy of the configuration.''' table = copy.deepcopy(self) return(table) def update(self, dictionary): '''Specify the dictionary whose keys will be used to update config.''' if type(dictionary) is not GLConfig: raise(TypeError('dictionary must be a GLConfig, not %s' % type(dictionary).__name__)) dictionary = dict(dictionary.table) result = dict() for key in dictionary: src = self.table[key] dest = dictionary[key] result[key] = src if src != dest: if self.isdefault(key, src): result[key] = dest else: # if not self.isdefault(key, src) result[key] == src if not self.isdefault(key, dest): if key in ['modules', 'avoids', 'tests']: dest = sorted(set(src + dest)) result[key] = dest self.table = dict(result) def update_key(self, dictionary, key): '''Update the given key using value from the given dictionary.''' if key in self.table: if type(dictionary) is not GLConfig: raise(TypeError('dictionary must be a GLConfig, not %s' % type(dictionary).__name__)) dictionary = dict(dictionary.table) self.table[key] = dictionary[key] else: # if key not in self.table raise(KeyError('GLConfig does not contain key: %s' % repr(key))) def default(self, key): '''Return default value for the given key.''' if key in self.table: if key == 'libname': return(string('libgnu')) elif key == 'macro_prefix': return(string('gl')) elif key == 'include_guard_prefix': return(string('GL')) elif key == 'ac_version': return(2.59) elif key == 'verbosity': return(0) elif key == 'copyrights': return(True) elif key in ['modules', 'avoids', 'tests', 'testflags']: return(list()) elif key in ['libtool', 'lgpl', 'conddeps', 'modcache', 'symbolic', 'lsymbolic', 'libtests', 'dryrun']: return(False) if key == 'vc_files': return(None) elif key == 'errors': return(True) else: # otherwise return(string()) else: # if key not in self.table raise(KeyError('GLConfig does not contain key: %s' % repr(key))) def isdefault(self, key, value): '''Check whether the value for the given key is a default value.''' if key in self.table: default = self.default(key) return(value == default) else: # if key not in self.table raise(KeyError('GLConfig does not contain key: %s' % repr(key))) def keys(self): '''Return list of keys.''' return(list(self.table.keys())) def values(self): '''Return list of values.''' return(list(self.table.values())) # Define destdir methods. def getDestDir(self): '''Return the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current directory.''' return(self.table['destdir']) def setDestDir(self, destdir): '''Specify the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current directory.''' if type(destdir) is bytes or type(destdir) is string: if type(destdir) is bytes: destdir = string(destdir, ENCS['system']) if destdir: self.table['destdir'] = os.path.normpath(destdir) else: # if destdir has not bytes/string type raise(TypeError('destdir must be a string, not %s' % type(destdir).__name__)) def resetDestDir(self): '''Reset the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current directory.''' self.table['destdir'] = string() # Define localdir methods. def getLocalDir(self): '''Return a local override directory where to look up files before looking in gnulib's directory.''' return(self.table['localdir']) def setLocalDir(self, localdir): '''Specify a local override directory where to look up files before looking in gnulib's directory.''' if type(localdir) is bytes or type(localdir) is string: if type(localdir) is bytes: localdir = string(localdir, ENCS['system']) if localdir: self.table['localdir'] = localdir else: # if localdir has not bytes/string type raise(TypeError('localdir must be a string, not %s' % type(localdir).__name__)) def resetLocalDir(self): '''Reset a local override directory where to look up files before looking in gnulib's directory.''' self.table['localdir'] = string() # Define auxdir methods. def getAuxDir(self): '''Return directory relative to --dir where auxiliary build tools are placed. Default comes from configure.ac or configure.in.''' if self.table['auxdir']: return self.table['auxdir'] return "build-aux" def setAuxDir(self, auxdir): '''Specify directory relative to --dir where auxiliary build tools are placed. Default comes from configure.ac or configure.in.''' if type(auxdir) is bytes or type(auxdir) is string: if type(auxdir) is bytes: auxdir = string(auxdir, ENCS['system']) if auxdir: self.table['auxdir'] = auxdir else: # if type of auxdir is not bytes or string raise(TypeError('auxdir must be a string, not %s' % type(auxdir).__name__)) def resetAuxDir(self): '''Reset directory relative to --dir where auxiliary build tools are placed. Default comes from configure.ac or configure.in.''' self.table['auxdir'] = string() # Define sourcebase methods. def getSourceBase(self): '''Return directory relative to destdir where source code is placed.''' return(self.table['sourcebase']) def setSourceBase(self, sourcebase): '''Specify directory relative to destdir where source code is placed.''' if type(sourcebase) is bytes or type(sourcebase) is string: if type(sourcebase) is bytes: sourcebase = string(sourcebase, ENCS['system']) if sourcebase: self.table['sourcebase'] = sourcebase else: # if type of sourcebase is not bytes or string raise(TypeError('sourcebase must be a string, not %s' % type(sourcebase).__name__)) def resetSourceBase(self): '''Return directory relative to destdir where source code is placed.''' self.table['sourcebase'] = string() # Define m4base methods. def getM4Base(self): '''Return directory relative to destdir where *.m4 macros are placed.''' return(self.table['m4base']) def setM4Base(self, m4base): '''Specify directory relative to destdir where *.m4 macros are placed.''' if type(m4base) is bytes or type(m4base) is string: if type(m4base) is bytes: m4base = string(m4base, ENCS['system']) if m4base: self.table['m4base'] = m4base else: # if type of m4base is not bytes or string raise(TypeError('m4base must be a string, not %s' % type(m4base).__name__)) def resetM4Base(self): '''Reset directory relative to destdir where *.m4 macros are placed.''' self.table['m4base'] = string() # Define pobase methods. def getPoBase(self): '''Return directory relative to destdir where *.po files are placed.''' return(self.table['pobase']) def setPoBase(self, pobase): '''Specify directory relative to destdir where *.po files are placed.''' if type(pobase) is bytes or type(pobase) is string: if type(pobase) is bytes: pobase = string(pobase, ENCS['system']) if pobase: self.table['pobase'] = pobase else: # if type of pobase is not bytes or string raise(TypeError('pobase must be a string, not %s' % type(pobase).__name__)) def resetPoBase(self): '''Reset directory relative to destdir where *.po files are placed.''' self.table['pobase'] = string() # Define docbase methods. def getDocBase(self): '''Return directory relative to destdir where doc files are placed. Default value for this variable is 'doc').''' return(self.table['docbase']) def setDocBase(self, docbase): '''Specify directory relative to destdir where doc files are placed. Default value for this variable is 'doc').''' if type(docbase) is bytes or type(docbase) is string: if type(docbase) is bytes: docbase = string(docbase, ENCS['system']) if docbase: self.table['docbase'] = docbase else: # if type of docbase is not bytes or string raise(TypeError('docbase must be a string, not %s' % type(docbase).__name__)) def resetDocBase(self): '''Reset directory relative to destdir where doc files are placed. Default value for this variable is 'doc').''' self.table['docbase'] = string() # Define testsbase methods. def getTestsBase(self): '''Return directory relative to destdir where unit tests are placed. Default value for this variable is 'tests').''' return(self.table['testsbase']) def setTestsBase(self, testsbase): '''Specify directory relative to destdir where unit tests are placed. Default value for this variable is 'tests').''' if type(testsbase) is bytes or type(testsbase) is string: if type(testsbase) is bytes: testsbase = string(testsbase, ENCS['system']) if testsbase: self.table['testsbase'] = testsbase else: # if type of testsbase is not bytes or string raise(TypeError('testsbase must be a string, not %s' % type(testsbase).__name__)) def resetTestsBase(self): '''Reset directory relative to destdir where unit tests are placed. Default value for this variable is 'tests').''' self.table['testsbase'] = string() # Define modules methods. def addModule(self, module): '''Add the module to the modules list.''' if type(module) is bytes or type(module) is string: if type(module) is bytes: module = module.decode(ENCS['default']) if module not in self.table['modules']: self.table['modules'] += [module] else: # if module has not bytes or string type raise(TypeError('module must be a string, not %s' % type(module).__name__)) def removeModule(self, module): '''Remove the module from the modules list.''' if type(module) is bytes or type(module) is string: if type(module) is bytes: module = module.decode(ENCS['default']) if module in self.table['modules']: self.table['modules'].remove(module) else: # if module has not bytes or string type raise(TypeError('module must be a string, not %s' % type(module).__name__)) def getModules(self): '''Return the modules list.''' return(list(self.table['modules'])) def setModules(self, modules): '''Set the modules list.''' if type(modules) is list or type(modules) is tuple: old_modules = self.table['modules'] self.table['modules'] = list() for module in modules: try: # Try to add each module self.addModule(module) except TypeError as error: self.table['modules'] = old_modules raise(TypeError('each module must be a string')) except GLError as error: self.table['modules'] = old_modules raise(GLError(error.errno, error.errinfo)) else: # if type of modules is not list or tuple raise(TypeError('modules must be a list or a tuple, not %s' % type(modules).__name__)) def resetModules(self): '''Reset the list of the modules.''' self.table['modules'] = list() # Define avoids methods. def addAvoid(self, module): '''Avoid including the given module. Useful if you have code that provides equivalent functionality.''' if type(module) is bytes or type(module) is string: if type(module) is bytes: module = module.decode(ENCS['default']) if module not in self.table['avoids']: self.table['avoids'].append(module) else: # if module has not bytes or string type raise(TypeError('avoid must be a string, not %s' % type(module).__name__)) def removeAvoid(self, module): '''Remove the given module from the list of avoided modules.''' if type(module) is bytes or type(module) is string: if type(module) is bytes: module = module.decode(ENCS['default']) if module in self.table['avoids']: self.table['avoids'].remove(module) else: # if module has not bytes or string type raise(TypeError('avoid must be a string, not %s' % type(module).__name__)) def getAvoids(self): '''Return the list of the avoided modules.''' return(list(self.table['avoids'])) def setAvoids(self, modules): '''Specify the modules which will be avoided.''' if type(modules) is list or type(modules) is tuple: old_avoids = self.table['avoids'] self.table['avoids'] = list() for module in modules: try: # Try to add each module self.addAvoid(module) except TypeError as error: self.table['avoids'] = old_avoids raise(TypeError('each module must be a string')) except GLError as error: self.table['avoids'] = old_avoids raise(GLError(error.errno, error.errinfo)) else: # if type of modules is not list or tuple raise(TypeError('modules must be a list or a tuple, not %s' % type(modules).__name__)) def resetAvoids(self): '''Reset the list of the avoided modules.''' self.table['avoids'] = list() # Define files methods. def addFile(self, file): '''Add file to the list of files.''' if type(file) is bytes or type(file) is string: if type(file) is bytes: file = file.decode(ENCS['default']) if file not in self.table['files']: self.table['files'].append(file) else: # if file has not bytes or string type raise(TypeError('file must be a string, not %s' % type(file).__name__)) def removeFile(self, file): '''Remove the given file from the list of files.''' if type(file) is bytes or type(file) is string: if type(file) is bytes: file = file.decode(ENCS['default']) if file in self.table['files']: self.table['files'].remove(file) else: # if file has not bytes or string type raise(TypeError('file must be a string, not %s' % type(file).__name__)) def getFiles(self): '''Return the list of the fileed files.''' return(list(self.table['files'])) def setFiles(self, files): '''Specify the list of files.''' if type(files) is list or type(files) is tuple: old_files = self.table['files'] self.table['files'] = list() for file in files: try: # Try to add each file self.addFile(file) except TypeError as error: self.table['files'] = old_files raise(TypeError('each file must be a string')) except GLError as error: self.table['files'] = old_files raise(GLError(error.errno, error.errinfo)) else: # if type of files is not list or tuple raise(TypeError('files must be a list or a tuple, not %s' % type(files).__name__)) def resetFiles(self): '''Reset the list of files.''' self.table['files'] = list() # Define tests/testflags methods def checkTestFlag(self, flag): '''Return the status of the test flag.''' if flag in TESTS.values(): return(flag in self.table['testflags']) else: # if flag is not in TESTS raise(TypeError('unknown flag: %s' % repr(flag))) def enableTestFlag(self, flag): '''Enable test flag. You can get flags from TESTS variable.''' if flag in TESTS.values(): if flag not in self.table['testflags']: self.table['testflags'].append(flag) else: # if flag is not in TESTS raise(TypeError('unknown flag: %s' % repr(flag))) def disableTestFlag(self, flag): '''Disable test flag. You can get flags from TESTS variable.''' if flag in TESTS.values(): if flag in self.table['testflags']: self.table['testflags'].remove(flag) else: # if flag is not in TESTS raise(TypeError('unknown flag: %s' % repr(flag))) def getTestFlags(self): '''Return test flags. You can get flags from TESTS variable.''' return(list(self.table['testflags'])) def setTestFlags(self, testflags): '''Specify test flags. You can get flags from TESTS variable.''' if type(testflags) is list or type(testflags) is tuple: old_testflags = self.table['testflags'] self.table['testflags'] = list() for flag in testflags: try: # Try to enable each flag self.enableTestFlag(flag) except TypeError as error: raise(TypeError('each flag must be one of TESTS integers')) self.table['testflags'] = testflags else: # if type of testflags is not list or tuple raise(TypeError('testflags must be a list or a tuple, not %s' % type(testflags).__name__)) def resetTestFlags(self): '''Reset test flags (only default flag will be enabled).''' self.table['testflags'] = list() self.table['tests'] = self.table['testflags'] # Define libname methods. def getLibName(self): '''Return the library name.''' return(self.table['libname']) def setLibName(self, libname): '''Specify the library name.''' if type(libname) is bytes or type(libname) is string: if type(libname) is bytes: libname = string(libname, ENCS['system']) if libname: self.table['libname'] = libname else: # if type of libname is not bytes or string raise(TypeError('libname must be a string, not %s' % type(module).__name__)) def resetLibName(self): '''Reset the library name to 'libgnu'.''' self.table['libname'] = string('libgnu') # Define libtool methods. def checkLibtool(self): '''Check if user enabled libtool rules.''' return(self.table['libtool']) def enableLibtool(self): '''Enable libtool rules.''' self.table['libtool'] = True def disableLibtool(self): '''Disable libtool rules.''' self.table['libtool'] = False def resetLibtool(self): '''Reset libtool rules.''' self.table['libtool'] = False # Define conddeps methods. def checkCondDeps(self): '''Check if user enabled cond. dependencies.''' return(self.table['conddeps']) def enableCondDeps(self): '''Enable cond. dependencies (may save configure time and object code).''' self.table['conddeps'] = True def disableCondDeps(self): '''Disable cond. dependencies (may save configure time and object code).''' self.table['conddeps'] = False def resetCondDeps(self): '''Reset cond. dependencies (may save configure time and object code).''' self.table['conddeps'] = False # Define lgpl methods. def getLGPL(self): '''Check for abort if modules aren't available under the LGPL. Default value is False, which means that lgpl is disabled.''' return(self.table['lgpl']) def setLGPL(self, lgpl): '''Abort if modules aren't available under the LGPL. Default value is False, which means that lgpl is disabled.''' if (type(lgpl) is int and 2 <= lgpl <= 3) or type(lgpl) is bool: self.table['lgpl'] = lgpl else: # if lgpl is not False, 2 or 3 raise(TypeError('invalid LGPL version: %s' % repr(lgpl))) def resetLGPL(self): '''Disable abort if modules aren't available under the LGPL. Default value is False, which means that lgpl is disabled.''' self.table['lgpl'] = False def getIncludeGuardPrefix(self): '''Return include_guard_prefix to use inside GLEmiter class.''' return(self.table['include_guard_prefix']) def getModuleIndicatorPrefix(self): '''Return module_indicator_prefix to use inside GLEmiter class.''' return(getIncludeGuardPrefix(self)) # Define macro_prefix methods. def getMacroPrefix(self): '''Return the prefix of the macros 'gl_EARLY' and 'gl_INIT'. Default macro_prefix is 'gl'.''' return(self.table['macro_prefix']) def setMacroPrefix(self, macro_prefix): '''Specify the prefix of the macros 'gl_EARLY' and 'gl_INIT'. Default macro_prefix is 'gl'.''' if type(macro_prefix) is bytes or type(macro_prefix) is string: if type(macro_prefix) is bytes: macro_prefix = string(macro_prefix, ENCS['system']) if macro_prefix: self.table['macro_prefix'] = macro_prefix else: # if type of macro_prefix is not bytes or string raise(TypeError('macro_prefix must be a string, not %s' % type(macro_prefix).__name__)) if macro_prefix == 'gl': include_guard_prefix = 'GL' else: # macro_prefix != 'gl' include_guard_prefix = 'GL_%s' % macro_prefix.upper() if type(include_guard_prefix) is bytes: include_guard_prefix = include_guard_prefix.decode(ENCS['default']) self.table['include_guard_prefix'] = include_guard_prefix def resetMacroPrefix(self): '''Reset the prefix of the macros 'gl_EARLY' and 'gl_INIT'. Default macro_prefix is 'gl'.''' self.table['macro_prefix'] = string('gl') include_guard_prefix = string('GL') if type(include_guard_prefix) is bytes: include_guard_prefix = include_guard_prefix.decode(ENCS['default']) self.table['include_guard_prefix'] = include_guard_prefix # Define makefile methods. def getMakefile(self): '''Return the name of makefile in automake syntax in the source-base and tests-base directories. Default is 'Makefile.am'.''' return(self.table['makefile']) def setMakefile(self, makefile): '''Specify the name of makefile in automake syntax in the source-base and tests-base directories. Default is 'Makefile.am'.''' if type(makefile) is bytes or type(makefile) is string: if type(makefile) is bytes: makefile = string(makefile, ENCS['system']) if makefile: self.table['makefile'] = makefile else: # if type of makefile is not bytes or string raise(TypeError('makefile must be a string, not %s' % type(makefile).__name__)) def resetMakefile(self): '''Reset the name of makefile in automake syntax in the source-base and tests-base directories. Default is 'Makefile.am'.''' self.table['makefile'] = string() # Define podomain methods. def getPoDomain(self): '''Return the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended.''' return(self.table['podomain']) def setPoDomain(self, podomain): '''Specify the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended.''' if type(podomain) is bytes or type(podomain) is string: if type(podomain) is bytes: podomain = string(podomain, ENCS['system']) if podomain: self.table['podomain'] = podomain else: # if type of podomain is not bytes or string raise(TypeError('podomain must be a string, not %s' % type(podomain).__name__)) def resetPoDomain(self): '''Reset the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended.''' self.table['podomain'] = string() # Define witness_c_macro methods. def getWitnessCMacro(self): '''Return the C macro that is defined when the sources in this directory are compiled or used.''' return(self.table['witness_c_macro']) def setWitnessCMacro(self, witness_c_macro): '''Specify the C macro that is defined when the sources in this directory are compiled or used.''' if type(witness_c_macro) is bytes or type(witness_c_macro) is string: if type(witness_c_macro) is bytes: witness_c_macro = string(witness_c_macro, ENCS['system']) if witness_c_macro: self.table['witness_c_macro'] = witness_c_macro else: # if type of witness_c_macro is not bytes or string raise(TypeError('witness_c_macro must be a string, not %s' % type(witness_c_macro).__name__)) def resetWitnessCMacro(self): '''Return the C macro that is defined when the sources in this directory are compiled or used.''' self.table['witness_c_macro'] = string() # Define vc_files methods. def checkVCFiles(self): '''Check if update of the version control files is enabled or disabled.''' return(self.table['vc_files']) def enableVCFiles(self): '''Enable update of the version control files.''' self.table['vc_files'] = True def disableVCFiles(self): '''Disable update of the version control files.''' self.table['vc_files'] = False def resetVCFiles(self): '''Reset update of the version control files and set it to None.''' self.table['vc_files'] = None # Define modcache methods. def checkModuleCaching(self): '''Get status of module caching optimization.''' return(self.table['modcache']) def enableModuleCaching(self): '''Enable module caching optimization.''' self.table['modcache'] = True def disableModuleCaching(self): '''Disable module caching optimization.''' self.table['modcache'] = False def resetModuleCaching(self): '''Reset module caching optimization.''' self.table['modcache'] = False # Define configure_ac methods. def getAutoconfFile(self): '''Return path of autoconf file relative to destdir.''' return(self.table['configure_ac']) def setAutoconfFile(self, configure_ac): '''Specify path of autoconf file relative to destdir.''' if type(configure_ac) is bytes or type(configure_ac) is string: if type(configure_ac) is bytes: configure_ac = string(configure_ac, ENCS['system']) if configure_ac: self.table['configure_ac'] = \ relpath(self.table['destdir'], configure_ac) else: # if type of configure_ac is not bytes or string raise(TypeError('configure_ac must be a string, not %s' % type(configure_ac).__name__)) def resetAutoconfFile(self): '''Reset path of autoconf file relative to destdir.''' configure_ac = string() if isfile(joinpath(self.table['destdir'], 'configure.ac')): configure_ac = joinpath(self.table['destdir'], 'configure.ac') elif isfile(joinpath(self.table['destdir'], 'configure.in')): configure_ac = joinpath(self.table['destdir'], 'configure.in') self.table['configure_ac'] = configure_ac # Define ac_version methods. def getAutoconfVersion(self): '''Return preferred autoconf version. Default value is 2.59.''' return(self.table['ac_version']) def setAutoconfVersion(self, ac_version): '''Specify preferred autoconf version. Default value is 2.59.''' if type(ac_version) is float or type(ac_version) is int: self.table['ac_version'] = float(ac_version) else: # if ac_version has not int or float type raise(TypeError('ac_version must be an int or a float, not %s' % type(ac_version).__name__)) def resetAutoconfVersion(self): '''Specify preferred autoconf version. Default value is 2.59.''' self.table['ac_version'] = 2.59 # Define symbolic methods. def checkCopyrights(self): '''Check if copyright notices in files should be replaced.''' return(self.table['copyrights']) def checkSymbolic(self): '''Check if pygnulib will make symbolic links instead of copying files.''' return(self.table['symbolic']) def enableSymbolic(self): '''Enable creation of the symbolic links instead of copying files.''' self.table['symbolic'] = True self.table['copyrights'] = False def disableSymbolic(self): '''Enable creation of the symbolic links instead of copying files.''' self.table['symbolic'] = False self.table['copyrights'] = True def resetSymbolic(self): '''Reset creation of the symbolic links instead of copying files.''' self.table['symbolic'] = False self.table['copyrights'] = True # Define lsymbolic methods. def checkLSymbolic(self): '''Check if pygnulib will make symbolic links instead of copying files, only for files from the local override directory.''' return(self.table['lsymbolic']) def enableLSymbolic(self): '''Enable creation of symbolic links instead of copying files, only for files from the local override directory.''' self.table['lsymbolic'] = True def disableLSymbolic(self): '''Disable creation of symbolic links instead of copying files, only for files from the local override directory.''' self.table['lsymbolic'] = False def resetLSymbolic(self): '''Reset creation of symbolic links instead of copying files, only for files from the local override directory.''' self.table['lsymbolic'] = False # Define verbosity methods. def getVerbosity(self): '''Get verbosity level.''' return(self.table['verbosity']) def decreaseVerbosity(self): '''Decrease verbosity level.''' if self.table['verbosity'] > MODES['verbose-min']: self.table['verbosity'] -= 1 def increaseVerbosity(self): '''Increase verbosity level.''' if self.table['verbosity'] < MODES['verbose-max']: self.table['verbosity'] += 1 def setVerbosity(self, verbose): '''Set verbosity level to verbose, where -2 <= verbose <= 2. If verbosity level is less than -2, verbosity level will be set to -2. If verbosity level is greater than 2, verbosity level will be set to 2.''' if type(verbose) is int: if MODES['verbose-min'] <= verbose <= MODES['verbose-max']: self.table['verbosity'] = verbose elif verbose < MODES['verbose-min']: self.table['verbosity'] = MODES['verbose-min'] elif verbose > MODES['verbose-max']: self.table['verbosity'] = MODES['verbose-max'] else: # if type(verbose) is not int raise(TypeError('verbosity must be an int, not %s' % type(verbose).__name__)) def resetVerbosity(self): '''Reset verbosity level.''' self.table['verbosity'] = 0 # Define libtests methods. def checkLibtests(self): '''Return True if a testsbase/libtests.a is needed.''' return(self.table['libtests']) def enableLibtests(self): '''If libtests is enabled, then testsbase/libtests.a is needed.''' self.table['libtests'] = True def disableLibtests(self): '''If libtests is disabled, then testsbase/libtests.a is not needed.''' self.table['libtests'] = False def resetLibtests(self): '''Reset status of testsbase/libtests.a.''' self.table['libtests'] = False # Define single_configure methods. def checkSingleConfigure(self): '''Check whether single configure file should be generated.''' return(self.table['single_configure']) def enableSingleConfigure(self): '''Enable generation of the single configure file.''' self.table['single_configure'] = True def disableSingleConfigure(self): '''Disable generation of the single configure file.''' self.table['single_configure'] = False def resetSingleConfigure(self): '''Reset status of the single configure file generation.''' self.table['single_configure'] = False # Define dryrun methods. def checkDryRun(self): '''Check whether dryrun is enabled.''' return(self.table['dryrun']) def enableDryRun(self): '''Enable dryrun mode.''' self.table['dryrun'] = True def disableDryRun(self): '''Disable dryrun mode.''' self.table['dryrun'] = False def resetDryRun(self): '''Reset status of dryrun mode.''' self.table['dryrun'] = False # Define errors methods. def checkErrors(self): '''Check if GLError will be raised in non-critical situations.''' return(self.table['errors']) def enableErrors(self): '''Raise GLError in non-critical situations.''' self.table['errors'] = True def disableErrors(self): '''Do not raise GLError in non-critical situations.''' self.table['errors'] = False def resetErrors(self): '''Reset status of raising GLError in non-critical situations.''' self.table['errors'] = False ��������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLEmiter.py��������������������������������������������������������0000664�0000000�0000000�00000160102�14110572173�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import codecs import shutil import subprocess as sp from . import constants from .GLInfo import GLInfo from .GLError import GLError from .GLConfig import GLConfig from .GLModuleSystem import GLModule from .GLModuleSystem import GLModuleTable from .GLMakefileTable import GLMakefileTable from .GLFileSystem import GLFileAssistant from pprint import pprint #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath #=============================================================================== # Define GLEmiter class #=============================================================================== class GLEmiter(object): '''This class is used to emit the contents of necessary files.''' def __init__(self, config): '''GLEmiter.__init__(config) -> GLEmiter Create GLEmiter instance.''' self.info = GLInfo() if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) self.config = config def __repr__(self): '''x.__repr__() <==> repr(x)''' result = '<pygnulib.GLEmiter %s>' % hex(id(self)) return(result) def copyright_notice(self): '''GLEmiter.copyright_notice() -> string Emit a header for a generated file.''' emit = string() emit += "# %s" % self.info.copyright() emit += """ # # 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 file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool.\n""" if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def autoconfSnippet(self, module, fileassistant, toplevel, disable_libtool, disable_gettext, replace_auxdir, indentation): '''GLEmiter.autoconfSnippet(module, toplevel, disable_libtool, disable_gettext, replace_auxdir, indentation) -> string Emit the autoconf snippet of a module. GLConfig: include_guard_prefix. module is a GLModule instance, which is processed. fileassistant is a GLFileAssistant instance, which is used to get temporary directories and sed transformer. toplevel is a bool variable, False means a subordinate use of pygnulib. disable_libtool is a bool variable; it tells whether to disable libtool handling even if it has been specified through the GLConfig class. disable_gettext is a bool variable; it tells whether to disable AM_GNU_GETTEXT invocations. replace_auxdir is a bool variable; it tells whether to replace 'build-aux' directory in AC_CONFIG_FILES. indentation is a string which contain spaces to prepend on each line.''' emit = string() if type(module) is not GLModule: raise(TypeError('module must be a GLModule, not %s' % type(module).__name__)) if type(fileassistant) is not GLFileAssistant: raise(TypeError('fileassistant must be a GLFileAssistant, not %s' % type(fileassistant).__name__)) if type(toplevel) is not bool: raise(TypeError('toplevel must be a bool, not %s' % type(toplevel).__name__)) if type(disable_libtool) is not bool: raise(TypeError('disable_libtool must be a bool, not %s' % type(disable_libtool).__name__)) if type(disable_gettext) is not bool: raise(TypeError('disable_gettext must be a bool, not %s' % type(disable_gettext).__name__)) if type(indentation) is bytes or type(indentation) is string: if type(indentation) is bytes: indentation = indentation.decode(ENCS['default']) else: # if indentation has not bytes or string type raise(TypeError('indentation must be a string, not %s' % type(indentation).__name__)) if not indentation.isspace(): raise(ValueError('indentation must contain only whitespaces')) auxdir = self.config['auxdir'] libtool = self.config['libtool'] include_guard_prefix = self.config['include_guard_prefix'] if str(module) in ['gnumakefile', 'maintainer-makefile']: # These modules are meant to be used only in the top-level directory. flag = toplevel else: # if not str(module) in ['gnumakefile', 'maintainer-makefile'] flag = True if flag: snippet = module.getAutoconfSnippet() snippet = snippet.replace('${gl_include_guard_prefix}', include_guard_prefix) lines = [line for line in snippet.split('\n') if line.strip()] snippet = '%s\n' % '\n'.join(lines) transformer = fileassistant.transformers.get('aux', '') pattern = compiler('(^.*?$)', re.S | re.M) snippet = pattern.sub('%s\\1' % indentation, snippet) if transformer: args = ['sed', '-e', transformer] path = fileassistant.tmpfilename('snippet') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(snippet) stdin = codecs.open(path, 'rb', 'UTF-8') snippet = sp.check_output(args, stdin=stdin, shell=False) snippet = snippet.decode("UTF-8") os.remove(path) if disable_libtool: snippet = snippet.replace('$gl_cond_libtool', 'false') snippet = snippet.replace('gl_libdeps', 'gltests_libdeps') snippet = snippet.replace('gl_ltlibdeps', 'gltests_ltlibdeps') if disable_gettext: snippet = snippet.replace('AM_GNU_GETTEXT([external])', 'dnl you must \ add AM_GNU_GETTEXT([external]) or similar to configure.ac.') else: # Don't indent AM_GNU_GETTEXT_VERSION line, as that confuses # autopoint through at least GNU gettext version 0.18.2. snippet = compiler('^ *AM_GNU_GETTEXT_VERSION').sub('AM_GNU_GETTEXT_VERSION', snippet) emit += snippet if str(module) == 'alloca' and libtool and not disable_libtool: emit += 'changequote(,)dnl\n' emit += "LTALLOCA=`echo \"$ALLOCA\" | sed -e 's/\\.[^.]* /.lo \ /g;s/\\.[^.]*$/.lo/'`\n" emit += 'changequote([, ])dnl\n' emit += 'AC_SUBST([LTALLOCA])' if replace_auxdir: regex = 'AC_CONFIG_FILES\\(\\[(.*?)\\:build-aux/(.*?)\\]\\)' repl = 'AC_CONFIG_FILES([\\1:%s/\\2])' % auxdir pattern = compiler(regex, re.S | re.M) emit = pattern.sub(repl, emit) lines = [line for line in emit.split('\n') if line.strip()] emit = '%s\n' % '\n'.join(lines) emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(emit) def autoconfSnippets(self, modules, moduletable, fileassistant, verifier, toplevel, disable_libtool, disable_gettext, replace_auxdir): '''GLEmiter.autoconfSnippets(modules, fileassistant, verifier, toplevel, disable_libtool, disable_gettext, replace_auxdir) -> string Collect and emit the autoconf snippets of a set of modules. GLConfig: conddeps. basemodules argument represents list of modules; every module in this list must be a GLModule instance; this list of modules is used to sort all modules after they were processed. modules argument represents list of modules; every module in this list must be a GLModule instance. moduletable is a GLModuleTable instance, which contains necessary information about dependencies of the modules. fileassistant is a GLFileAssistant instance, which is used to get temporary directories and sed transformers. verifier is an integer, which can be 0, 1 or 2. if verifier == 0, then process every module; if verifier == 1, then process only non-tests modules; if verifier == 2, then process only tests modules. toplevel is a bool variable, False means a subordinate use of pygnulib. disable_libtool is a bool variable; it tells whether to disable libtool handling even if it has been specified through the GLConfig class. disable_gettext is a bool variable; it tells whether to disable AM_GNU_GETTEXT invocations. replace_auxdir is a bool variable; it tells whether to replace 'build-aux' directory in AC_CONFIG_FILES.''' emit = string() for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) if type(moduletable) is not GLModuleTable: raise(TypeError('moduletable must be a GLFileAssistant, not %s' % type(moduletable).__name__)) if type(fileassistant) is not GLFileAssistant: raise(TypeError('fileassistant must be a GLFileAssistant, not %s' % type(fileassistant).__name__)) if type(verifier) is not int: raise(TypeError('verifier must be an int, not %s' % type(verifier).__name__)) if not (0 <= verifier <= 2): raise(ValueError('verifier must be 0, 1 or 2, not %d' % verifier)) if type(toplevel) is not bool: raise(TypeError('toplevel must be a bool, not %s' % type(toplevel).__name__)) if type(disable_libtool) is not bool: raise(TypeError('disable_libtool must be a bool, not %s' % type(disable_libtool).__name__)) if type(disable_gettext) is not bool: raise(TypeError('disable_gettext must be a bool, not %s' % type(disable_gettext).__name__)) if type(replace_auxdir) is not bool: raise(TypeError('replace_auxdir must be a bool, not %s' % type(replace_auxdir).__name__)) auxdir = self.config['auxdir'] conddeps = self.config['conddeps'] macro_prefix = self.config['macro_prefix'] if not conddeps: # Ignore the conditions, and enable all modules unconditionally. for module in modules: if verifier == 0: solution = True elif verifier == 1: solution = module.isNonTests() elif verifier == 2: solution = module.isTests() if solution: emit += self.autoconfSnippet(module, fileassistant, toplevel, disable_libtool, disable_gettext, replace_auxdir, ' ') else: # if conddeps # Emit the autoconf code for the unconditional modules. for module in modules: if verifier == 0: solution = True elif verifier == 1: solution = module.isNonTests() elif verifier == 2: solution = module.isTests() if solution: if not moduletable.isConditional(module): emit += self.autoconfSnippet(module, fileassistant, toplevel, disable_libtool, disable_gettext, replace_auxdir, ' ') # Initialize the shell variables indicating that the modules are enabled. for module in modules: if verifier == 0: solution = True elif verifier == 1: solution = module.isNonTests() elif verifier == 2: solution = module.isTests() if solution: if moduletable.isConditional(module): shellvar = module.getShellVar() emit += ' %s=false\n' % module.getShellVar() # Emit the autoconf code for the conditional modules, each in a separate # function. This makes it possible to support cycles among conditional # modules. for module in modules: if verifier == 0: solution = True elif verifier == 1: solution = module.isNonTests() elif verifier == 2: solution = module.isTests() if solution: if moduletable.isConditional(module): shellfunc = module.getShellFunc() shellvar = module.getShellVar() emit += ' %s ()\n' % shellfunc emit += ' {\n' emit += ' if ! $%s; then\n' % shellvar emit += self.autoconfSnippet(module, fileassistant, toplevel, disable_libtool, disable_gettext, replace_auxdir, ' ') emit += ' %s=true\n' % shellvar dependencies = module.getDependencies() depmodules = [pair[0] for pair in dependencies] # Intersect dependencies with the modules list. depmodules = [ dep for dep in depmodules if dep in modules] for depmodule in depmodules: if moduletable.isConditional(depmodule): shellfunc = depmodule.getShellFunc() condition = moduletable.getCondition( module, depmodule) if condition != None: emit += ' if %s; then\n' % condition emit += ' %s\n' % shellfunc emit += ' fi\n' else: # if condition == None emit += ' %s\n' % shellfunc # if not moduletable.isConditional(depmodule) else: # The autoconf code for $dep has already been emitted above and # therefore is already executed when this code is run. pass # Define the Automake conditionals. emit += ' m4_pattern_allow([^%s_GNULIB_ENABLED_])\n' % macro_prefix for module in modules: if verifier == 0: solution = True elif verifier == 1: solution = module.isNonTests() elif verifier == 2: solution = module.isTests() if solution: condname = module.getConditionalName() shellvar = module.getShellVar() emit += ' AM_CONDITIONAL([%s], [$%s])\n' % ( condname, shellvar) lines = [line for line in emit.split('\n') if line.strip()] emit = '%s\n' % '\n'.join(lines) emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(emit) def po_Makevars(self): '''GLEmiter.po_Makevars() -> string Emit the contents of po/ makefile parameterization. GLConfig: pobase, podomain.''' emit = string() pobase = self.config['pobase'] podomain = self.config['podomain'] top_subdir = string() source = '%s/' % os.path.normpath(pobase) if os.path.sep in source: for directory in source.split(os.path.sep): if directory != '': top_subdir += '../' top_subdir = os.path.normpath(top_subdir) emit += "## DO NOT EDIT! GENERATED AUTOMATICALLY!\n" emit += "%s\n" % self.copyright_notice() emit += "# Usually the message domain is the same as the package name.\n" emit += "# But here it has a '-gnulib' suffix.\n" emit += "DOMAIN = %s-gnulib\n\n" % podomain emit += "# These two variables depend on the location of this directory.\n" emit += "subdir = %s\n" % pobase emit += "top_subdir = %s\n" % top_subdir emit += """ # These options get passed to xgettext. XGETTEXT_OPTIONS = \\ --keyword=_ --flag=_:1:pass-c-format \\ --keyword=N_ --flag=N_:1:pass-c-format \\ --keyword='proper_name:1,"This is a proper name. See the gettext manual, \ section Names."' \\ --keyword='proper_name_utf8:1,"This is a proper name. See the gettext \ manual, section Names."' \\ --flag=error:3:c-format --flag=error_at_line:5:c-format # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. gnulib is copyrighted by the FSF. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no\n""" if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def po_POTFILES_in(self, files): '''GLEmiter.po_POTFILES_in(files) -> string Emit the file list to be passed to xgettext. GLConfig: sourcebase.''' emit = string() sourcebase = self.config['sourcebase'] sourcebase = '%s%s' % (self.sourcebase, os.path.sep) if type(sourcebase) is bytes: sourcebase = sourcebase.decode(ENCS['default']) files = [substart('lib/', sourcebase, file) for file in files] files = [file for file in files if file.startswith(sourcebase)] emit += "## DO NOT EDIT! GENERATED AUTOMATICALLY!\n" emit += "%s\n" % self.copyright_notice() emit += "# List of files which contain translatable strings.\n" emit += '\n'.join(files) emit += '\n' if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def initmacro_start(self, macro_prefix_arg): '''GLEmiter.initmacro_start(macro_prefix_arg) -> string Emit the first few statements of the gl_INIT macro.''' emit = string() if type(macro_prefix_arg) is bytes or type(macro_prefix_arg) is string: if type(macro_prefix_arg) is bytes: macro_prefix_arg = macro_prefix_arg.decode(ENCS['default']) else: # if macro_prefix_arg has not bytes or string type raise(TypeError('macro_prefix_arg must be a string, not %s' % type(macro_prefix_arg).__name__)) module_indicator_prefix = self.config.getModuleIndicatorPrefix() # Overriding AC_LIBOBJ and AC_REPLACE_FUNCS has the effect of storing # platform-dependent object files in ${macro_prefix_arg}_LIBOBJS instead # of LIBOBJS. The purpose is to allow several gnulib instantiations under # a single configure.ac file. (AC_CONFIG_LIBOBJ_DIR does not allow this # flexibility). # Furthermore it avoids an automake error like this when a Makefile.am # that uses pieces of gnulib also uses $(LIBOBJ): # automatically discovered file `error.c' should not be explicitly # mentioned. emit += " m4_pushdef([AC_LIBOBJ]," emit += " m4_defn([%V1%_LIBOBJ]))\n" emit += " m4_pushdef([AC_REPLACE_FUNCS]," emit += " m4_defn([%V1%_REPLACE_FUNCS]))\n" # Overriding AC_LIBSOURCES has the same purpose of avoiding the automake # error when a Makefile.am that uses pieces of gnulib also uses $(LIBOBJ): # automatically discovered file `error.c' should not be explicitly # mentioned # We let automake know about the files to be distributed through the # EXTRA_lib_SOURCES variable. emit += " m4_pushdef([AC_LIBSOURCES]," emit += " m4_defn([%V1%_LIBSOURCES]))\n" # Create data variables for checking the presence of files that are # mentioned as AC_LIBSOURCES arguments. These are m4 variables, not shell # variables, because we want the check to happen when the configure file is # created, not when it is run. ${macro_prefix_arg}_LIBSOURCES_LIST is the # list of files to check for. ${macro_prefix_arg}_LIBSOURCES_DIR is the # subdirectory in which to expect them. emit += " m4_pushdef([%V1%_LIBSOURCES_LIST], [])\n" emit += " m4_pushdef([%V1%_LIBSOURCES_DIR], [])\n" # Scope for m4 macros. emit += " m4_pushdef([GL_MACRO_PREFIX], [%V1%])" # Scope the GNULIB_<modulename> variables. emit += " m4_pushdef([GL_MODULE_INDICATOR_PREFIX]," emit += " [" + module_indicator_prefix + "])" emit += " gl_COMMON\n" emit = emit.replace('%V1%', macro_prefix_arg) if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def initmacro_end(self, macro_prefix_arg): '''GLEmiter.initmacro_end(macro_prefix_arg) -> string Emit the last few statements of the gl_INIT macro.''' emit = string() if type(macro_prefix_arg) is bytes or type(macro_prefix_arg) is string: if type(macro_prefix_arg) is bytes: macro_prefix_arg = macro_prefix_arg.decode(ENCS['default']) else: # if macro_prefix_arg has not bytes or string type raise(TypeError('macro_prefix_arg must be a string, not %s' % type(macro_prefix_arg).__name__)) # Check the presence of files that are mentioned as AC_LIBSOURCES # arguments. The check is performed only when autoconf is run from the # directory where the configure.ac resides; if it is run from a different # directory, the check is skipped. emit += """\ m4_ifval(%V1%_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([%V1%_LIBSOURCES_DIR])[ || for gl_file in ]%V1%_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([%V1%_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([%V1%_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not \ found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([%V1%_LIBSOURCES_DIR]) m4_popdef([%V1%_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ %V1%_libobjs= %V1%_ltlibobjs= if test -n "$%V1%_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $%V1%_LIBOBJS; do echo "$i"; done | sed -e \ "$sed_drop_objext" | sort | uniq`; do %V1%_libobjs="$%V1%_libobjs $i.$ac_objext" %V1%_ltlibobjs="$%V1%_ltlibobjs $i.lo" done fi AC_SUBST([%V1%_LIBOBJS], [$%V1%_libobjs]) AC_SUBST([%V1%_LTLIBOBJS], [$%V1%_ltlibobjs]) ])\n""" emit = emit.replace('%V1%', macro_prefix_arg) if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def initmacro_done(self, macro_prefix_arg, sourcebase_arg): '''GLEmiter.initmacro_done(macro_prefix_arg, sourcebase_arg) -> string Emit a few statements after the gl_INIT macro. GLConfig: sourcebase.''' emit = string() if type(macro_prefix_arg) is bytes or type(macro_prefix_arg) is string: if type(macro_prefix_arg) is bytes: macro_prefix_arg = macro_prefix_arg.decode(ENCS['default']) else: # if macro_prefix_arg has not bytes or string type raise(TypeError('macro_prefix_arg must be a string, not %s' % type(macro_prefix_arg).__name__)) if type(sourcebase_arg) is bytes or type(sourcebase_arg) is string: if type(sourcebase_arg) is bytes: sourcebase_arg = sourcebase_arg.decode(ENCS['default']) else: # if sourcebase_arg has not bytes or string type raise(TypeError('sourcebase_arg must be a string, not %s' % type(sourcebase_arg).__name__)) emit += """\ # Like AC_LIBOBJ, except that the module name goes # into %V1%_LIBOBJS instead of into LIBOBJS. AC_DEFUN([%V1%_LIBOBJ], [ AS_LITERAL_IF([$1], [%V1%_LIBSOURCES([$1.c])])dnl %V1%_LIBOBJS="$%V1%_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into %V1%_LIBOBJS instead of into LIBOBJS. AC_DEFUN([%V1%_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [%V1%_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([%V1%_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([%V1%_LIBSOURCES_DIR], [%V2%]) m4_append([%V1%_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ])\n""" emit = emit.replace('%V1%', macro_prefix_arg) emit = emit.replace('%V2%', sourcebase_arg) if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def lib_Makefile_am(self, destfile, modules, moduletable, makefiletable, actioncmd, for_test): '''GLEmiter.lib_Makefile_am(destfile, modules, moduletable, makefiletable, actioncmd, for_test) -> tuple of string and bool Emit the contents of the library Makefile. Returns string and a bool variable which shows if subdirectories are used. GLConfig: localdir, sourcebase, libname, pobase, auxdir, makefile, libtool, macro_prefix, podomain, conddeps, witness_c_macro. destfile is a filename relative to destdir of Makefile being generated. modules is a list of GLModule instances. moduletable is a GLModuleTable instance. makefiletable is a GLMakefileTable instance. actioncmd is a string variable, which represents the actioncmd; it can be an empty string e.g. when user wants to generate files for GLTestDir. for_test is a bool variable; it must be set to True if creating a package for testing, False otherwise.''' if type(destfile) is bytes or type(destfile) is string: if type(destfile) is bytes: destfile = destfile.decode(ENCS['default']) else: # if destfile has not bytes or string type raise(TypeError('destfile must be a string, not %s' % type(destfile).__name__)) for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) if type(moduletable) is not GLModuleTable: raise(TypeError('moduletable must be a GLModuleTable, not %s' % type(moduletable).__name__)) if type(makefiletable) is not GLMakefileTable: raise(TypeError('makefiletable must be a GLMakefileTable, not %s' % type(makefiletable).__name__)) if type(actioncmd) is bytes or type(actioncmd) is string: if type(actioncmd) is bytes: actioncmd = actioncmd.decode(ENCS['default']) else: # if actioncmd has not bytes or string type raise(TypeError('actioncmd must be a string, not %s' % type(actioncmd).__name__)) if type(for_test) is not bool: raise(TypeError('for_test must be a bool, not %s' % type(for_test).__name__)) emit = string() localdir = self.config['localdir'] sourcebase = self.config['sourcebase'] modcache = self.config['modcache'] libname = self.config['libname'] pobase = self.config['pobase'] auxdir = self.config['auxdir'] makefile = self.config['makefile'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] conddeps = self.config['conddeps'] witness_c_macro = self.config['witness_c_macro'] include_guard_prefix = self.config['include_guard_prefix'] module_indicator_prefix = self.config.getModuleIndicatorPrefix() ac_version = self.config['ac_version'] destfile = os.path.normpath(destfile) # When creating an includable Makefile.am snippet, augment variables with # += instead of assigning them. if makefile: assign = '+=' else: # if not makefile assign = '=' if libtool: libext = 'la' perhapsLT = 'LT' LD_flags = False else: # if not libtool libext = 'a' perhapsLT = '' LD_flags = True if for_test: # When creating a package for testing: Attempt to provoke failures, # especially link errors, already during "make" rather than during # "make check", because "make check" is not possible in a cross-compiling # situation. Turn check_PROGRAMS into noinst_PROGRAMS. check_PROGRAMS = True else: # if not for_test check_PROGRAMS = False emit += "## DO NOT EDIT! GENERATED AUTOMATICALLY!\n" emit += "## Process this file with automake to produce Makefile.in.\n" emit += self.copyright_notice() if actioncmd: if len(actioncmd) <= 3000: emit += "# Reproduce by: %s\n" % actioncmd emit += '\n' uses_subdirs = False # Modify allsnippets variable. allsnippets = string() for module in modules: if not module.isTests(): # Get conditional snippet, edit it and save to amsnippet1. amsnippet1 = module.getAutomakeSnippet_Conditional() amsnippet1 = amsnippet1.replace( 'lib_LIBRARIES', 'lib%_LIBRARIES') amsnippet1 = amsnippet1.replace( 'lib_LTLIBRARIES', 'lib%_LTLIBRARIES') if LD_flags: pattern = compiler( 'lib_LDFLAGS[\t ]*\\+=(.*?)$', re.S | re.M) amsnippet1 = pattern.sub('', amsnippet1) pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M) amsnippet1 = pattern.sub('%s_%s_\\1' % (libname, libext), amsnippet1) amsnippet1 = amsnippet1.replace( '$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_') amsnippet1 = amsnippet1.replace( 'lib%_LIBRARIES', 'lib_LIBRARIES') amsnippet1 = amsnippet1.replace( 'lib%_LTLIBRARIES', 'lib_LTLIBRARIES') if check_PROGRAMS: amsnippet1 = amsnippet1.replace( 'check_PROGRAMS', 'noinst_PROGRAMS') amsnippet1 = amsnippet1.replace('${gl_include_guard_prefix}', include_guard_prefix) if str(module) == 'alloca': amsnippet1 += '%s_%s_LIBADD += @%sALLOCA@\n' % \ (libname, libext, perhapsLT) amsnippet1 += '%s_%s_DEPENDENCIES += @%sALLOCA@\n' % \ (libname, libext, perhapsLT) amsnippet1 = constants.combine_lines_matching( compiler('%s_%s_SOURCES' % (libname, libext)), amsnippet1) # Get unconditional snippet, edit it and save to amsnippet2. amsnippet2 = module.getAutomakeSnippet_Unconditional() pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M) amsnippet2 = pattern.sub('%s_%s_\\1' % (libname, libext), amsnippet2) amsnippet2 = amsnippet2.replace( '$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_') if type(amsnippet1) is bytes: amsnippet1 = amsnippet1.decode(ENCS['default']) if type(amsnippet2) is bytes: amsnippet2 = amsnippet1.decode(ENCS['default']) if not (amsnippet1 + amsnippet2).isspace(): allsnippets += '## begin gnulib module %s\n' % str(module) if conddeps: if moduletable.isConditional(module): name = module.getConditionalName() allsnippets += 'if %s\n' % name allsnippets += amsnippet1 if conddeps: allsnippets += 'endif\n' allsnippets += amsnippet2 allsnippets += '## end gnulib module %s\n\n' % str( module) # Test whether there are some source files in subdirectories. for file in module.getFiles(): if file.startswith('lib/') and file.endswith('.c') and \ file.count('/') > 1: uses_subdirs = True break if not makefile: subdir_options = string() # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). if uses_subdirs: subdir_options = string(' subdir-objects') emit += 'AUTOMAKE_OPTIONS = 1.9.6 gnits%s\n' % subdir_options emit += '\n' if not makefile: emit += 'SUBDIRS =\n' emit += 'noinst_HEADERS =\n' emit += 'noinst_LIBRARIES =\n' emit += 'noinst_LTLIBRARIES =\n' # Automake versions < 1.11.4 create an empty pkgdatadir at # installation time if you specify pkgdata_DATA to empty. # See automake bugs #10997 and #11030: # * https://debbugs.gnu.org/10997 # * https://debbugs.gnu.org/11030 # So we need this workaround. pattern = compiler('^pkgdata_DATA *\\+=', re.S | re.M) if pattern.findall(allsnippets): emit += 'pkgdata_DATA =\n' emit += 'EXTRA_DIST =\n' emit += 'BUILT_SOURCES =\n' emit += 'SUFFIXES =\n' emit += 'MOSTLYCLEANFILES %s core *.stackdump\n' % assign if not makefile: emit += 'MOSTLYCLEANDIRS =\n' emit += 'CLEANFILES =\n' emit += 'DISTCLEANFILES =\n' emit += 'MAINTAINERCLEANFILES =\n' # Execute edits that apply to the Makefile.am being generated. current_edit = int() makefile_am_edits = makefiletable.count() while current_edit != makefile_am_edits: dictionary = makefiletable[current_edit] if dictionary['var']: paths = list() paths += [joinpath(dictionary['dir'], 'Makefile.am')] paths += [os.path.normpath('./%s/Makefile.am' % dictionary['dir'])] paths = sorted(set(paths)) if destfile in paths: emit += '%s += %s\n' % (dictionary['var'], dictionary['val']) current_edit += 1 # Define two parts of cppflags variable. emit += '\n' cppflags_part1 = string() cppflags_part2 = string() if witness_c_macro: cppflags_part1 = ' -D%s=1' % witness_c_macro if for_test: cppflags_part2 = ' -DGNULIB_STRICT_CHECKING=1' cppflags = '%s%s' % (cppflags_part1, cppflags_part2) if not makefile: emit += 'AM_CPPFLAGS =%s\n' % cppflags emit += 'AM_CFLAGS =\n' else: # if makefile if cppflags: emit += 'AM_CPPFLAGS +=%s\n' % cppflags emit += '\n' # One of the snippets or the user's Makefile.am already specifies an # installation location for the library. Don't confuse automake by saying # it should not be installed. # First test if allsnippets already specify an installation location. insnippets = False inmakefile = False regex = '^[a-zA-Z0-9_]*_%sLIBRARIES *\\+{0,1}= *%s.%s' % \ (perhapsLT, libname, libext) pattern = compiler(regex, re.S | re.M) insnippets = bool(pattern.findall(allsnippets)) # Then test if $sourcebase/Makefile.am (if it exists) specifies it. path = joinpath(sourcebase, 'Makefile.am') if makefile and isfile(path): with codecs.open(path, 'rb', 'UTF-8') as file: data = file.read() inmakefile = bool(pattern.findall(data)) if not any([insnippets, inmakefile]): # By default, the generated library should not be installed. emit += 'noinst_%sLIBRARIES += %s.%s\n' % ( perhapsLT, libname, libext) emit += '\n' emit += '%s_%s_SOURCES =\n' % (libname, libext) # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. emit += '%s_%s_LIBADD = $(%s_%sLIBOBJS)\n' % \ (libname, libext, macro_prefix, perhapsLT) emit += '%s_%s_DEPENDENCIES = $(%s_%sLIBOBJS)\n' % \ (libname, libext, macro_prefix, perhapsLT) emit += 'EXTRA_%s_%s_SOURCES =\n' % (libname, libext) if libtool: emit += '%s_%s_LDFLAGS = $(AM_LDFLAGS)\n' % (libname, libext) emit += '%s_%s_LDFLAGS += -no-undefined\n' % (libname, libext) # Synthesize an ${libname}_${libext}_LDFLAGS augmentation by combining # the link dependencies of all modules. links = [module.getLink() for module in modules if not module.isTests()] ulinks = list() for link in links: for lib in link: lib = constants.nlremove(lib) position = lib.find(' when linking with libtool') if position != -1: lib = lib[:position] ulinks += [lib] ulinks = sorted(set(ulinks)) for link in ulinks: emit += '%s_%s_LDFLAGS += %s\n' % (libname, libext, link) emit += '\n' if pobase: emit += 'AM_CPPFLAGS += -DDEFAULT_TEXT_DOMAIN="%s-gnulib"\n' % podomain emit += '\n' allsnippets = allsnippets.replace('$(top_srcdir)/build-aux/', '$(top_srcdir)/%s/' % auxdir) emit += allsnippets emit += '\n' emit += 'mostlyclean-local: mostlyclean-generic\n' emit += '\t@for dir in \'\' $(MOSTLYCLEANDIRS); do \\\n' emit += '\t if test -n "$$dir" && test -d $$dir; then \\\n' emit += '\t echo "rmdir $$dir"; rmdir $$dir; \\\n' emit += '\t fi; \\\n' emit += '\tdone; \\\n' emit += '\t:\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) result = tuple([emit, uses_subdirs]) return(result) def tests_Makefile_am(self, destfile, modules, makefiletable, witness_macro, for_test): '''GLEmiter.tests_Makefile_am(destfile, modules, makefiletable, witness_c_macro, for_test) -> tuple of string and bool Emit the contents of the tests Makefile. Returns string and a bool variable which shows if subdirectories are used. GLConfig: localdir, modules, libname, auxdir, makefile, libtool, sourcebase, m4base, testsbase, macro_prefix, witness_c_macro, single_configure, libtests. destfile is a filename relative to destdir of Makefile being generated. witness_macro is a string which represents witness_c_macro with the suffix. modules is a list of GLModule instances. moduletable is a GLModuleTable instance. makefiletable is a GLMakefileTable instance. actioncmd is a string variable, which represents the actioncmd; it can be an empty string e.g. when user wants to generate files for GLTestDir. for_test is a bool variable; it must be set to True if creating a package for testing, False otherwise.''' if type(destfile) is bytes or type(destfile) is string: if type(destfile) is bytes: destfile = destfile.decode(ENCS['default']) else: # if destfile has not bytes or string type raise(TypeError('destfile must be a string, not %s' % type(destfile).__name__)) for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) if type(makefiletable) is not GLMakefileTable: raise(TypeError('makefiletable must be a GLMakefileTable, not %s' % type(makefiletable).__name__)) if type(witness_macro) is bytes or type(witness_macro) is string: if type(witness_macro) is bytes: witness_macro = witness_macro.decode(ENCS['default']) else: # if witness_macro has not bytes or string type raise(TypeError('witness_macro must be a string, not %s' % type(witness_macro).__name__)) if type(for_test) is not bool: raise(TypeError('for_test must be a bool, not %s' % type(for_test).__name__)) emit = string() localdir = self.config['localdir'] auxdir = self.config['auxdir'] sourcebase = self.config['sourcebase'] modcache = self.config['modcache'] libname = self.config['libname'] m4base = self.config['m4base'] pobase = self.config['pobase'] testsbase = self.config['testsbase'] makefile = self.config['makefile'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] conddeps = self.config['conddeps'] witness_c_macro = self.config['witness_c_macro'] include_guard_prefix = self.config['include_guard_prefix'] module_indicator_prefix = self.config.getModuleIndicatorPrefix() ac_version = self.config['ac_version'] libtests = self.config['libtests'] single_configure = self.config['single_configure'] if libtool: libext = 'la' perhapsLT = 'LT' LD_flags = False else: # if not libtool libext = 'a' perhapsLT = '' LD_flags = True if for_test: # When creating a package for testing: Attempt to provoke failures, # especially link errors, already during "make" rather than during # "make check", because "make check" is not possible in a cross-compiling # situation. Turn check_PROGRAMS into noinst_PROGRAMS. check_PROGRAMS = True else: # if not for_test check_PROGRAMS = False # Calculate testsbase_inverse counter = int() testsbase_inverse = string() while counter < len(testsbase.split('/')): testsbase_inverse += '../' counter += 1 testsbase_inverse = os.path.normpath(testsbase_inverse) # Begin the generation. emit += "## DO NOT EDIT! GENERATED AUTOMATICALLY!\n" emit += "## Process this file with automake to produce Makefile.in.\n" emit += '%s\n' % self.copyright_notice() uses_subdirs = False main_snippets = string() longrun_snippets = string() for module in modules: if for_test and not single_configure: flag = module.isTests() else: # if for_test and not single_configure flag = True if flag: snippet = module.getAutomakeSnippet() snippet = snippet.replace('lib_LIBRARIES', 'lib%_LIBRARIES') snippet = snippet.replace( 'lib_LTLIBRARIES', 'lib%_LTLIBRARIES') if LD_flags: pattern = compiler( 'lib_LDFLAGS[\t ]*\\+=(.*?)$', re.S | re.M) snippet = pattern.sub('', snippet) pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M) snippet = pattern.sub('libtests_a_\\1', snippet) snippet = snippet.replace( '$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_') snippet = snippet.replace('lib%_LIBRARIES', 'lib_LIBRARIES') snippet = snippet.replace( 'lib%_LTLIBRARIES', 'lib_LTLIBRARIES') if check_PROGRAMS: snippet = snippet.replace( 'check_PROGRAMS', 'noinst_PROGRAMS') snippet = snippet.replace('${gl_include_guard_prefix}', include_guard_prefix) # Check if module is 'alloca'. if libtests and str(module) == 'alloca': snippet += 'libtests_a_LIBADD += @%sALLOCA@\n' % perhapsLT snippet += 'libtests_a_DEPENDENCIES += @%sALLOCA@\n' % perhapsLT # Skip the contents if it's entirely empty. if snippet.strip(): # Check status of the module. status = module.getStatus() islongrun = False for word in status: if word == 'longrunning-test': islongrun = True break if not islongrun: snippet = snippet.replace( '\n\nEXTRA_DIST', '\nEXTRA_DIST') main_snippets += '## begin gnulib module %s\n' % str( module) main_snippets += snippet main_snippets += '## end gnulib module %s\n\n' % str( module) else: # if islongrunning snippet = snippet.replace( '\n\nEXTRA_DIST', '\nEXTRA_DIST') longrun_snippets += '## begin gnulib module %s\n' % str( module) longrun_snippets += snippet longrun_snippets += '## end gnulib module %s\n' % str( module) # Test whether there are some source files in subdirectories. for file in module.getFiles(): if file.startswith('lib/') and file.endswith('.c') and \ file.count('/') > 1: uses_subdirs = True break # Generate dependencies here, since it eases the debugging of test failures. # If there are source files in subdirectories, prevent collision of the # object files (example: hash.c and libxml/hash.c). subdir_options = string() if uses_subdirs: subdir_options = string(' subdir-objects') emit += 'AUTOMAKE_OPTIONS = 1.9.6 foreign%s\n\n' % subdir_options if for_test and not single_configure: emit += 'ACLOCAL_AMFLAGS = -I %s/%s\n\n' % ( testsbase_inverse, m4base) # Nothing is being added to SUBDIRS; nevertheless the existence of this # variable is needed to avoid an error from automake: # "AM_GNU_GETTEXT used but SUBDIRS not defined" emit += 'SUBDIRS = .\n' emit += 'TESTS =\n' emit += 'XFAIL_TESTS =\n' emit += 'TESTS_ENVIRONMENT =\n' emit += 'noinst_PROGRAMS =\n' if not for_test: emit += 'check_PROGRAMS =\n' emit += 'noinst_HEADERS =\n' emit += 'noinst_LIBRARIES =\n' if libtests: if for_test: emit += 'noinst_LIBRARIES += libtests.a\n' else: # if not for_test emit += 'check_LIBRARIES = libtests.a\n' # Automake versions < 1.11.4 create an empty pkgdatadir at # installation time if you specify pkgdata_DATA to empty. # See automake bugs #10997 and #11030: # * https://debbugs.gnu.org/10997 # * https://debbugs.gnu.org/11030 # So we need this workaround. pattern = compiler('^pkgdata_DATA *\\+=', re.S | re.M) if bool(pattern.findall(main_snippets)) or \ bool(pattern.findall(longrun_snippets)): emit += 'pkgdata_DATA =\n' emit += 'EXTRA_DIST =\n' emit += 'BUILT_SOURCES =\n' emit += 'SUFFIXES =\n' emit += 'MOSTLYCLEANFILES = core *.stackdump\n' emit += 'MOSTLYCLEANDIRS =\n' emit += 'CLEANFILES =\n' emit += 'DISTCLEANFILES =\n' emit += 'MAINTAINERCLEANFILES =\n' # Execute edits that apply to the Makefile.am being generated. # Execute edits that apply to the Makefile.am being generated. current_edit = int() makefile_am_edits = makefiletable.count() while current_edit != makefile_am_edits: dictionary = makefiletable[current_edit] if dictionary['var']: paths = list() paths += [joinpath(dictionary['dir'], 'Makefile.am')] paths += [os.path.normpath('./%s/Makefile.am' % dictionary['dir'])] paths = sorted(set(paths)) if destfile in paths: emit += '%s += %s\n' % (dictionary['var'], dictionary['val']) current_edit += 1 emit += '\nAM_CPPFLAGS = \\\n' if for_test: emit += ' -DGNULIB_STRICT_CHECKING=1 \\\n' if witness_c_macro: emit += ' -D%s=1 \\\n' % witness_c_macro if witness_macro: emit += ' -D@%s@=1 \\\n' % witness_macro emit += ' -I. -I$(srcdir) \\\n' emit += ' -I%s -I$(srcdir)/%s \\\n' % \ (testsbase_inverse, testsbase_inverse) emit += ' -I%s/%s -I$(srcdir)/%s/%s\n' % \ (testsbase_inverse, sourcebase, testsbase_inverse, sourcebase) emit += '\n' if libtests: # All test programs need to be linked with libtests.a. # It needs to be passed to the linker before ${libname}.${libext}, # since the tests-related modules depend on the main modules. # It also needs to be passed to the linker after ${libname}.${libext} # because the latter might contain incomplete modules (such as the # 'version-etc' module whose dependency to 'version-etc-fsf' is # voluntarily omitted). # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it # does not matter. emit += 'LDADD = libtests.a %s/%s/%s.%s libtests.a %s/%s/%s.%s libtests.a $(LIBTESTS_LIBDEPS)\n\n' % \ (testsbase_inverse, sourcebase, libname, libext, testsbase_inverse, sourcebase, libname, libext) else: emit += 'LDADD = %s/%s/%s.%s\n\n' % \ (testsbase_inverse, sourcebase, libname, libext) if libtests: emit += 'libtests_a_SOURCES =\n' # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However, # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@. emit += 'libtests_a_LIBADD = $(%stests_LIBOBJS)\n' % macro_prefix emit += 'libtests_a_DEPENDENCIES = $(%stests_LIBOBJS)\n' % macro_prefix emit += 'EXTRA_libtests_a_SOURCES =\n' # The circular dependency in LDADD requires this. emit += 'AM_LIBTOOLFLAGS = --preserve-dup-deps\n\n' # Many test scripts use ${EXEEXT} or ${srcdir}. # EXEEXT is defined by AC_PROG_CC through autoconf. # srcdir is defined by autoconf and automake. emit += "TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)'\n\n" main_snippets = main_snippets.replace('$(top_srcdir)/build-aux/', '$(top_srcdir)/%s/' % auxdir) longrun_snippets = longrun_snippets.replace('$(top_srcdir)/build-aux/', '$(top_srcdir)/%s/' % auxdir) emit += main_snippets + longrun_snippets emit += '# Clean up after Solaris cc.\n' emit += 'clean-local:\n' emit += '\trm -rf SunWS_cache\n\n' emit += 'mostlyclean-local: mostlyclean-generic\n' emit += '\t@for dir in \'\' $(MOSTLYCLEANDIRS); do \\\n' emit += '\t if test -n "$$dir" && test -d $$dir; then \\\n' emit += '\t echo "rmdir $$dir"; rmdir $$dir; \\\n' emit += '\t fi; \\\n' emit += '\tdone; \\\n' emit += '\t:\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) result = tuple([emit, uses_subdirs]) return(result) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLError.py���������������������������������������������������������0000664�0000000�0000000�00000011622�14110572173�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import locale import codecs from . import constants #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath #=============================================================================== # Define GLError class #=============================================================================== class GLError(Exception): '''Exception handler for pygnulib classes.''' def __init__(self, errno, errinfo=None): '''Each error has following parameters: errno: code of error; used to catch error type 1: file does not exist in GLFileSystem: <file> 2: cannot patch file inside GLFileSystem: <file> 3: configure file does not exist: <configure.ac> 4: minimum supported autoconf version is 2.59, not <version> 5: <gnulib-comp.m4> is expected to contain gl_M4_BASE([<m4base>]) 6: missing sourcebase argument 7: missing docbase argument 8: missing testsbase argument 9: missing libname argument 10: conddeps are not supported with inctests 11: incompatible licenses on modules: <modules> 12: cannot process empty filelist 13: cannot create the given directory: <directory> 14: cannot delete the given file: <file> 15: cannot create the given file: <file> 16: cannot transform the given file: <file> 17: cannot update the given file: <file> 18: module lacks a license: <module> 19: could not create destination directory: <directory> errinfo: additional information; style: 0 or 1, whether old-style''' self.errno = errno self.errinfo = errinfo self.args = (self.errno, self.errinfo) def __repr__(self): errinfo = self.errinfo errors = \ [ # Begin list of errors "file does not exist in GLFileSystem: %s" % repr(errinfo), "cannot patch file inside GLFileSystem: %s" % repr(errinfo), "configure file does not exist: %s" % repr(errinfo), "minimum supported autoconf version is 2.59, not %s" % repr( errinfo), "%s is expected to contain gl_M4_BASE([%s])" % \ (repr(os.path.join(errinfo, 'gnulib-comp.m4')), repr(errinfo)), "missing sourcebase argument; cache file doesn't contain it," + " so you might have to set this argument", "missing docbase argument; you might have to create GLImport" \ + " instance with mode 0 and docbase argument", "missing testsbase argument; cache file doesn't contain it," + " so you might have to set this argument" "missing libname argument; cache file doesn't contain it," + " so you might have to set this argument", "conddeps are not supported with inctests", "incompatible licenses on modules: %s" % repr(errinfo), "cannot process empty filelist", "cannot create the given directory: %s" % repr(errinfo), "cannot remove the given file: %s" % repr(errinfo), "cannot create the given file: %s" % repr(errinfo), "cannot transform the given file: %s" % repr(errinfo), "cannot update/replace the given file: %s" % repr(errinfo), "module lacks a license: %s" % repr(errinfo), "error when running subprocess: %s" % repr(errinfo), ] # Complete list of errors if not PYTHON3: self.message = (b'[Errno %d] %s' % (self.errno, errors[self.errno - 1].encode(ENCS['default']))) else: # if PYTHON3 self.message = ('[Errno %d] %s' % (self.errno, errors[self.errno - 1])) return(self.message) ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLFileSystem.py����������������������������������������������������0000664�0000000�0000000�00000043312�14110572173�0021014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import codecs import shutil import filecmp import subprocess as sp from . import constants from .GLError import GLError from .GLConfig import GLConfig #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath #=============================================================================== # Define GLFileSystem class #=============================================================================== class GLFileSystem(object): '''GLFileSystem class is used to create virtual filesystem, which is based on the gnulib directory and directory specified by localdir argument. Its main method lookup(file) is used to find file in these directories or combine it using Linux 'patch' utility.''' def __init__(self, config): '''Create new GLFileSystem instance. The only argument is localdir, which can be an empty string too.''' if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) self.config = config def __repr__(self): '''x.__repr__ <==> repr(x)''' result = '<pygnulib.GLFileSystem %s>' % hex(id(self)) return(result) def lookup(self, name): '''GLFileSystem.lookup(name) -> tuple Lookup a file in gnulib and localdir directories or combine it using Linux 'patch' utility. If file was found, method returns string, else it raises GLError telling that file was not found. Function also returns flag which indicates whether file is a temporary file. GLConfig: localdir.''' if type(name) is bytes or type(name) is string: if type(name) is bytes: name = name.decode(ENCS['default']) else: # if name has not bytes or string type raise(TypeError( 'name must be a string, not %s' % type(module).__name__)) # If name exists in localdir, then we use it path_gnulib = joinpath(DIRS['root'], name) path_local = joinpath(self.config['localdir'], name) path_diff = joinpath(self.config['localdir'], '%s.diff' % name) path_temp = joinpath(self.config['tempdir'], name) try: # Try to create directories os.makedirs(os.path.dirname(path_temp)) except OSError as error: pass # Skip errors if directory exists if isfile(path_temp): os.remove(path_temp) if self.config['localdir'] and isfile(path_local): result = (path_local, False) else: # if path_local does not exist if isfile(path_gnulib): if self.config['localdir'] and isfile(path_diff): shutil.copy(path_gnulib, path_temp) command = 'patch -s "%s" < "%s" >&2' % (path_temp, path_diff) try: # Try to apply patch sp.check_call(command, shell=True) except sp.CalledProcessError as error: raise(GLError(2, name)) result = (path_temp, True) else: # if path_diff does not exist result = (path_gnulib, False) else: # if path_gnulib does not exist raise(GLError(1, name)) return(result) #=============================================================================== # Define GLFileAssistant class #=============================================================================== class GLFileAssistant(object): '''GLFileAssistant is used to help with file processing.''' def __init__(self, config, transformers=dict()): '''Create GLFileAssistant instance.''' if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) if type(transformers) is not dict: raise(TypeError('transformers must be a dict, not %s' % type(transformers).__name__)) for key in ['lib', 'aux', 'main', 'tests']: if key not in transformers: transformers[key] = 's,x,x,' else: # if key in transformers value = transformers[key] if type(value) is bytes or type(value) is string: if type(value) is bytes: transformers[key] = value.decode(ENCS['default']) else: # if value has not bytes or string type raise(TypeError('transformers[%s] must be a string, not %s' % (key, type(value).__name__))) self.original = None self.rewritten = None self.added = list() self.makefile = list() self.config = config self.transformers = transformers self.filesystem = GLFileSystem(self.config) def __repr__(self): '''x.__repr__() <==> repr(x)''' result = '<pygnulib.GLFileAssistant %s>' % hex(id(self)) return(result) def tmpfilename(self, path): '''GLFileAssistant.tmpfilename() -> string Return the name of a temporary file (file is relative to destdir).''' if type(path) is bytes or type(path) is string: if type(path) is bytes: path = path.decode(ENCS['default']) else: # if path has not bytes or string type raise(TypeError( 'path must be a string, not %s' % (type(path).__name__))) if not self.config['dryrun']: # Put the new contents of $file in a file in the same directory (needed # to guarantee that an 'mv' to "$destdir/$file" works). result = joinpath(self.config['destdir'], '%s.tmp' % path) dirname = os.path.dirname(result) if dirname and not isdir(dirname): os.makedirs(dirname) else: # if self.config['dryrun'] # Put the new contents of $file in a file in a temporary directory # (because the directory of "$file" might not exist). tempdir = self.config['tempdir'] result = joinpath(tempdir, '%s.tmp' % os.path.basename(path)) dirname = os.path.dirname(result) if not isdir(dirname): os.makedirs(dirname) if type(result) is bytes: result = bytes.decode(ENCS['default']) return(result) def setOriginal(self, original): '''GLFileAssistant.setOriginal(original) Set the name of the original file which will be used.''' if type(original) is bytes or type(original) is string: if type(original) is bytes: original = original.decode(ENCS['default']) else: # if original has not bytes or string type raise(TypeError( 'original must be a string, not %s' % (type(original).__name__))) self.original = original def setRewritten(self, rewritten): '''GLFileAssistant.setRewritten(rewritten) Set the name of the rewritten file which will be used.''' if type(rewritten) is bytes or type(rewritten) is string: if type(rewritten) is bytes: rewritten = rewritten.decode(ENCS['default']) else: # if rewritten has not bytes or string type raise(TypeError( 'rewritten must be a string, not %s' % type(rewritten).__name__)) self.rewritten = rewritten def addFile(self, file): '''GLFileAssistant.addFile(file) Add file to the list of added files.''' if file not in self.added: self.added += [file] def removeFile(self, file): '''GLFileAssistant.removeFile(file) Remove file from the list of added files.''' if file in self.added: self.added.pop(file) def getFiles(self): '''Return list of the added files.''' return(list(self.added)) def add(self, lookedup, tmpflag, tmpfile): '''GLFileAssistant.add(lookedup, tmpflag, tmpfile) This method copies a file from gnulib into the destination directory. The destination is known to exist. If tmpflag is True, then lookedup file is a temporary one.''' original = self.original rewritten = self.rewritten destdir = self.config['destdir'] symbolic = self.config['symbolic'] lsymbolic = self.config['lsymbolic'] if original == None: raise(TypeError('original must be set before applying the method')) elif rewritten == None: raise(TypeError('rewritten must be set before applying the method')) if not self.config['dryrun']: print('Copying file %s' % rewritten) loriginal = joinpath(self.config['localdir'], original) if (symbolic or (lsymbolic and lookedup == loriginal)) \ and not tmpflag and filecmp.cmp(lookedup, tmpfile): constants.link_if_changed( lookedup, joinpath(destdir, rewritten)) else: # if any of these conditions is not met try: # Try to move file shutil.move(tmpfile, joinpath(destdir, rewritten)) except Exception as error: raise(GLError(17, original)) else: # if self.config['dryrun'] print('Copy file %s' % rewritten) def update(self, lookedup, tmpflag, tmpfile, already_present): '''GLFileAssistant.update(lookedup, tmpflag, tmpfile, already_present) This method copies a file from gnulib into the destination directory. The destination is known to exist. If tmpflag is True, then lookedup file is a temporary one.''' original = self.original rewritten = self.rewritten destdir = self.config['destdir'] symbolic = self.config['symbolic'] lsymbolic = self.config['lsymbolic'] if original == None: raise(TypeError('original must be set before applying the method')) elif rewritten == None: raise(TypeError('rewritten must be set before applying the method')) if type(lookedup) is bytes or type(lookedup) is string: if type(lookedup) is bytes: lookedup = lookedup.decode(ENCS['default']) else: # if lookedup has not bytes or string type raise(TypeError('lookedup must be a string, not %s' % type(lookedup).__name__)) if type(already_present) is not bool: raise(TypeError('already_present must be a bool, not %s' % type(already_present).__name__)) basename = rewritten backupname = string('%s~' % basename) basepath = joinpath(destdir, basename) backuppath = joinpath(destdir, backupname) if not filecmp.cmp(basepath, tmpfile): if not self.config['dryrun']: if already_present: print('Updating file %s (backup in %s)' % (basename, backupname)) else: # if not already_present message = 'Replacing file ' message += '%s (non-gnulib code backed up in ' % basename message += '%s) !!' % backupname print(message) if isfile(backuppath): os.remove(backuppath) try: # Try to replace the given file shutil.move(basepath, backuppath) except Exception as error: raise(GLError(17, original)) loriginal = joinpath(self.config['localdir'], original) if (symbolic or (lsymbolic and lookedup == loriginal)) \ and not tmpflag and filecmp.cmp(lookedup, tmpfile): constants.link_if_changed(lookedup, basepath) else: # if any of these conditions is not met try: # Try to move file if os.path.exists(basepath): os.remove(basepath) shutil.copy(tmpfile, rewritten) except Exception as error: raise(GLError(17, original)) else: # if self.config['dryrun'] if already_present: print('Update file %s (backup in %s)' % (rewritten, backup)) else: # if not already_present print('Replace file %s (backup in %s)' % (rewritten, backup)) def add_or_update(self, already_present): '''GLFileAssistant.add_or_update(already_present) This method handles a file that ought to be present afterwards.''' original = self.original rewritten = self.rewritten if original == None: raise(TypeError('original must be set before applying the method')) elif rewritten == None: raise(TypeError('rewritten must be set before applying the method')) if type(already_present) is not bool: raise(TypeError('already_present must be a bool, not %s' % type(already_present).__name__)) xoriginal = original if original.startswith('tests=lib/'): xoriginal = constants.substart('tests=lib/', 'lib/', original) lookedup, tmpflag = self.filesystem.lookup(xoriginal) tmpfile = self.tmpfilename(rewritten) sed_transform_lib_file = self.transformers.get('lib', '') sed_transform_build_aux_file = self.transformers.get('aux', '') sed_transform_main_lib_file = self.transformers.get('main', '') sed_transform_testsrelated_lib_file = self.transformers.get( 'tests', '') try: # Try to copy lookedup file to tmpfile shutil.copy(lookedup, tmpfile) except Exception as error: raise(GLError(15, lookedup)) # Don't process binary files with sed. if not (original.endswith(".class") or original.endswith(".mo")): transformer = string() if original.startswith('lib/'): if sed_transform_main_lib_file: transformer = sed_transform_main_lib_file elif original.startswith('build-aux/'): if sed_transform_build_aux_file: transformer = sed_transform_build_aux_file elif original.startswith('tests=lib/'): if sed_transform_testsrelated_lib_file: transformer = sed_transform_testsrelated_lib_file if transformer: args = ['sed', '-e', transformer] stdin = codecs.open(lookedup, 'rb', 'UTF-8') try: # Try to transform file data = sp.check_output(args, stdin=stdin, shell=False) data = data.decode("UTF-8") except Exception as error: raise(GLError(16, lookedup)) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(data) path = joinpath(self.config['destdir'], rewritten) if isfile(path): self.update(lookedup, tmpflag, tmpfile, already_present) os.remove(tmpfile) else: # if not isfile(path) self.add(lookedup, tmpflag, tmpfile) self.addFile(rewritten) def super_update(self, basename, tmpfile): '''GLFileAssistant.super_update(basename, tmpfile) -> tuple Move tmpfile to destdir/basename path, making a backup of it. Returns tuple, which contains basename, backupname and status. 0: tmpfile is the same as destfile; 1: tmpfile was used to update destfile; 2: destfile was created, because it didn't exist.''' backupname = '%s~' % basename basepath = joinpath(self.config['destdir'], basename) backuppath = joinpath(self.config['destdir'], backupname) if isfile(basepath): if filecmp.cmp(basepath, tmpfile): result_flag = 0 else: # if not filecmp.cmp(basepath, tmpfile) result_flag = 1 if not self.config['dryrun']: if isfile(backuppath): os.remove(backuppath) shutil.move(basepath, backuppath) shutil.move(tmpfile, basepath) else: # if self.config['dryrun'] os.remove(tmpfile) else: # if not isfile(basepath) result_flag = 2 if not self.config['dryrun']: if isfile(basepath): os.remove(basepath) shutil.move(tmpfile, basepath) else: # if self.config['dryrun'] os.remove(tmpfile) result = tuple([basename, backupname, result_flag]) return(result) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLImport.py��������������������������������������������������������0000664�0000000�0000000�00000200300�14110572173�0020172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import locale import codecs import shutil import filecmp import subprocess as sp from . import constants from .GLError import GLError from .GLConfig import GLConfig from .GLModuleSystem import GLModule from .GLModuleSystem import GLModuleTable from .GLModuleSystem import GLModuleSystem from .GLFileSystem import GLFileSystem from .GLFileSystem import GLFileAssistant from .GLMakefileTable import GLMakefileTable from .GLEmiter import GLEmiter #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner relpath = constants.relativize string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath #=============================================================================== # Define GLImport class #=============================================================================== class GLImport(object): '''GLImport class is used to provide methods for --import, --add-import, --remove-import and --update actions. This is a high-level class, so developers may have to use lower-level classes to create their own scripts. However, if user needs just to use power of gnulib-tool, this class is a very good choice.''' def __init__(self, config, mode): '''Create GLImport instance. The first variable, mode, must be one of the values of the MODES dict object, which is accessible from constants module. The second one, config, must be a GLConfig object.''' if type(config) is not GLConfig: raise(TypeError('config must have GLConfig type, not %s' % repr(config))) if type(mode) is int and \ MODES['import'] <= mode <= MODES['update']: self.mode = mode else: # if mode is not int or is not 0-3 raise(TypeError('mode must be 0 <= mode <= 3, not %s' % repr(mode))) # Initialize some values. self.cache = GLConfig() self.config = config.copy() os.rmdir(self.cache['tempdir']) # Get cached auxdir and libtool from configure.ac/in. self.cache.setAuxDir('.') path = joinpath(self.config['destdir'], 'configure.ac') if not isfile(path): path = joinpath(self.config['destdir'], 'configure.in') if not isfile(path): raise(GLError(3, path)) self.config.setAutoconfFile(path) with codecs.open(path, 'rb', 'UTF-8') as file: data = file.read() pattern = compiler(r'^AC_CONFIG_AUX_DIR\((.*?)\)$', re.S | re.M) match = pattern.findall(data) if match: result = cleaner(match)[0] self.cache.setAuxDir(joinpath(result, self.config['destdir'])) pattern = compiler(r'A[CM]_PROG_LIBTOOL', re.S | re.M) guessed_libtool = bool(pattern.findall(data)) if self.config['auxdir'] == None: self.config.setAuxDir(self.cache['auxdir']) # Guess autoconf version. pattern = compiler('.*AC_PREREQ\((.*?)\)', re.S | re.M) versions = cleaner(pattern.findall(data)) if versions: version = sorted(set([float(version) for version in versions]))[-1] self.config.setAutoconfVersion(version) if version < 2.59: raise(GLError(4, version)) # Get other cached variables. path = joinpath(self.config['m4base'], 'gnulib-cache.m4') if isfile(joinpath(self.config['m4base'], 'gnulib-cache.m4')): with codecs.open(path, 'rb', 'UTF-8') as file: data = file.read() # Create regex object and keys. pattern = compiler('^(gl_.*?)\\((.*?)\\)$', re.S | re.M) keys = \ [ 'gl_LOCAL_DIR', 'gl_MODULES', 'gl_AVOID', 'gl_SOURCE_BASE', 'gl_M4_BASE', 'gl_PO_BASE', 'gl_DOC_BASE', 'gl_TESTS_BASE', 'gl_MAKEFILE_NAME', 'gl_MACRO_PREFIX', 'gl_PO_DOMAIN', 'gl_WITNESS_C_MACRO', 'gl_VC_FILES', 'gl_LIB', ] # Find bool values. if 'gl_LGPL(' in data: keys.append('gl_LGPL') self.cache.setLGPL(True) if 'gl_LIBTOOL' in data: self.cache.enableLibtool() data = data.replace('gl_LIBTOOL', '') if 'gl_CONDITIONAL_DEPENDENCIES' in data: self.cache.enableCondDeps() data = data.replace('gl_CONDITIONAL_DEPENDENCIES', '') if 'gl_VC_FILES' in data: self.cache.enableVCFiles() data = data.replace('gl_VC_FILES', '') if 'gl_WITH_TESTS' in data: self.cache.enableTestFlag(TESTS['tests']) data = data.replace('gl_WITH_TESTS', '') if 'gl_WITH_OBSOLETE' in data: self.cache.enableTestFlag(TESTS['obsolete']) data = data.replace('gl_WITH_OBSOLETE', '') if 'gl_WITH_CXX_TESTS' in data: self.cache.enableTestFlag(TESTS['c++-test']) data = data.replace('gl_WITH_CXX_TESTS', '') if 'gl_WITH_LONGRUNNING_TESTS' in data: self.cache.enableTestFlag(TESTS['longrunning-test']) data = data.replace('gl_WITH_LONGRUNNING_TESTS', '') if 'gl_WITH_PRIVILEGED_TESTS' in data: self.cache.enableTestFlag(TESTS['privileged-test']) data = data.replace('gl_WITH_PRIVILEGED_TESTS', '') if 'gl_WITH_UNPORTABLE_TESTS' in data: self.cache.enableTestFlag(TESTS['unportable-test']) data = data.replace('gl_WITH_UNPORTABLE_TESTS', '') if 'gl_WITH_ALL_TESTS' in data: self.cache.enableTestFlag(TESTS['all-test']) data = data.replace('gl_WITH_ALL_TESTS', '') # Find string values result = dict(pattern.findall(data)) values = cleaner([result.get(key, '') for key in keys]) tempdict = dict(zip(keys, values)) if 'gl_LGPL' in tempdict: lgpl = cleaner(tempdict['gl_LGPL']) if lgpl.isdecimal(): self.cache.setLGPL(int(self.cache['lgpl'])) else: # if 'gl_LGPL' not in tempdict self.cache.setLGPL(False) if tempdict['gl_LIB']: self.cache.setLibName(cleaner(tempdict['gl_LIB'])) if tempdict['gl_LOCAL_DIR']: self.cache.setLocalDir(cleaner(tempdict['gl_LOCAL_DIR'])) if tempdict['gl_MODULES']: self.cache.setModules(cleaner(tempdict['gl_MODULES'].split())) if tempdict['gl_AVOID']: self.cache.setAvoids(cleaner(tempdict['gl_AVOID'].split())) if tempdict['gl_SOURCE_BASE']: self.cache.setSourceBase(cleaner(tempdict['gl_SOURCE_BASE'])) if tempdict['gl_M4_BASE']: self.cache.setM4Base(cleaner(tempdict['gl_M4_BASE'])) if tempdict['gl_PO_BASE']: self.cache.setPoBase(cleaner(tempdict['gl_PO_BASE'])) if tempdict['gl_DOC_BASE']: self.cache.setDocBase(cleaner(tempdict['gl_DOC_BASE'])) if tempdict['gl_TESTS_BASE']: self.cache.setTestsBase(cleaner(tempdict['gl_TESTS_BASE'])) if tempdict['gl_MAKEFILE_NAME']: self.cache.setMakefile(cleaner(tempdict['gl_MAKEFILE_NAME'])) if tempdict['gl_MACRO_PREFIX']: self.cache.setMacroPrefix(cleaner(tempdict['gl_MACRO_PREFIX'])) if tempdict['gl_PO_DOMAIN']: self.cache.setPoDomain(cleaner(tempdict['gl_PO_DOMAIN'])) if tempdict['gl_WITNESS_C_MACRO']: self.cache.setWitnessCMacro( cleaner(tempdict['gl_WITNESS_C_MACRO'])) # Get cached filelist from gnulib-comp.m4. destdir, m4base = self.config.getDestDir(), self.config.getM4Base() path = joinpath(destdir, m4base, 'gnulib-comp.m4') if isfile(path): with codecs.open(path, 'rb', 'UTF-8') as file: data = file.read() regex = 'AC_DEFUN\\(\\[%s_FILE_LIST\\], \\[(.*?)\\]\\)' % \ self.cache['macro_prefix'] pattern = compiler(regex, re.S | re.M) self.cache.setFiles(pattern.findall(data)[-1].strip().split()) # The self.config['localdir'] defaults to the cached one. Recall that the # cached one is relative to $destdir, whereas the one we use is relative # to . or absolute. if not self.config['localdir']: if self.cache['localdir']: if isabs(self.config['destdir']): localdir = joinpath( self.config['destdir'], self.cache['localdir']) else: # if not isabs(self.config['destdir']) if isabs(self.cache['localdir']): localdir = joinpath( self.config['destdir'], self.cache['localdir']) else: # if not isabs(self.cache['localdir']) # NOTE: I NEED TO IMPLEMENT RELATIVE_CONCAT localdir = os.path.relpath(joinpath(self.config['destdir'], self.cache['localdir'])) self.config.setLocalDir(localdir) if self.mode != MODES['import']: if self.cache['m4base'] and \ (self.config['m4base'] != self.cache['m4base']): raise(GLError(5, m4base)) # Perform actions with modules. In --add-import, append each given module # to the list of cached modules; in --remove-import, remove each given # module from the list of cached modules; in --update, simply set # self.config['modules'] to its cached version. new, old = self.config.getModules(), self.cache.getModules() if self.mode == MODES['add-import']: modules = sorted(set(new + old)) elif self.mode == MODES['remove-import']: modules = [module for module in old if module in new] elif self.mode == MODES['update']: modules = self.cache.getModules() # If user tries to apply conddeps and testflag['tests'] together. if self.config['tests'] and self.config['conddeps']: raise(GLError(10, None)) # Update configuration dictionary. self.config.update(self.cache) for key in config.keys(): value = config[key] if not config.isdefault(key, value): self.config.update_key(config, key) self.config.setModules(modules) # Check if conddeps is enabled together with inctests. inctests = self.config.checkTestFlag(TESTS['tests']) if self.config['conddeps'] and inctests: raise(GLError(10, None)) # Define GLImport attributes. self.emiter = GLEmiter(self.config) self.filesystem = GLFileSystem(self.config) self.modulesystem = GLModuleSystem(self.config) self.moduletable = GLModuleTable(self.config, list()) self.makefiletable = GLMakefileTable(self.config) def __repr__(self): '''x.__repr__ <==> repr(x)''' result = '<pygnulib.GLImport %s>' % hex(id(self)) return(result) def rewrite_old_files(self, files): '''GLImport.rewrite_old_files(files) -> list Replace auxdir, docbase, sourcebase, m4base and testsbase from default to their version from cached config.''' if type(files) is not list: raise(TypeError( 'files argument must has list type, not %s' % type(files).__name__)) files = \ [ # Begin to convert bytes to string file.decode(ENCS['default']) \ if type(file) is bytes else file \ for file in files ] # Finish to convert bytes to string for file in files: if type(file) is not string: raise(TypeError('each file must be a string instance')) files = sorted(set(files)) files = ['%s%s' % (file, os.path.sep) for file in files] auxdir = self.cache['auxdir'] docbase = self.cache['docbase'] sourcebase = self.cache['sourcebase'] m4base = self.cache['m4base'] testsbase = self.cache['testsbase'] result = list() for file in files: if file.startswith('build-aux/'): path = constants.substart('build-aux/', '%s/' % auxdir, file) elif file.startswith('doc/'): path = constants.substart('doc/', '%s/' % docbase, file) elif file.startswith('lib/'): path = constants.substart('lib/', '%s/' % sourcebase, file) elif file.startswith('m4/'): path = constants.substart('m4/', '%s/' % m4base, file) elif file.startswith('tests/'): path = constants.substart('tests/', '%s/' % testsbase, file) elif file.startswith('tests=lib/'): path = constants.substart( 'tests=lib/', '%s/' % testsbase, file) elif file.startswith('top/'): path = constants.substart('top/', '', file) else: # file is not a special file path = file result += [os.path.normpath(path)] result = sorted(set(result)) return(list(result)) def rewrite_new_files(self, files): '''GLImport.rewrite_new_files(files) Replace auxdir, docbase, sourcebase, m4base and testsbase from default to their version from config.''' if type(files) is not list: raise(TypeError( 'files argument must has list type, not %s' % type(files).__name__)) files = \ [ # Begin to convert bytes to string file.decode(ENCS['default']) \ if type(file) is bytes else file \ for file in files ] # Finish to convert bytes to string for file in files: if type(file) is not string: raise(TypeError('each file must be a string instance')) files = sorted(set(files)) auxdir = self.config['auxdir'] docbase = self.config['docbase'] sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] testsbase = self.config['testsbase'] result = list() for file in files: if file.startswith('build-aux/'): path = constants.substart('build-aux/', '%s/' % auxdir, file) elif file.startswith('doc/'): path = constants.substart('doc/', '%s/' % docbase, file) elif file.startswith('lib/'): path = constants.substart('lib/', '%s/' % sourcebase, file) elif file.startswith('m4/'): path = constants.substart('m4/', '%s/' % m4base, file) elif file.startswith('tests/'): path = constants.substart('tests/', '%s/' % testsbase, file) elif file.startswith('tests=lib/'): path = constants.substart( 'tests=lib/', '%s/' % testsbase, file) elif file.startswith('top/'): path = constants.substart('top/', '', file) else: # file is not a special file path = file result += [os.path.normpath(path)] result = sorted(set(result)) return(list(result)) def actioncmd(self): '''Return command-line invocation comment.''' modules = self.config.getModules() avoids = self.config.getAvoids() destdir = self.config.getDestDir() localdir = self.config.getLocalDir() auxdir = self.config.getAuxDir() sourcebase = self.config.getSourceBase() m4base = self.config.getM4Base() docbase = self.config.getDocBase() pobase = self.config.getPoBase() testsbase = self.config.getTestsBase() testflags = self.config.getTestFlags() conddeps = self.config.checkCondDeps() libname = self.config.getLibName() lgpl = self.config.getLGPL() makefile = self.config.getMakefile() libtool = self.config.checkLibtool() macro_prefix = self.config.getMacroPrefix() witness_c_macro = self.config.getWitnessCMacro() podomain = self.config.getPoDomain() vc_files = self.config.checkVCFiles() verbose = self.config.getVerbosity() # Create command-line invocation comment. actioncmd = 'gnulib-tool --import' actioncmd += ' --dir=%s' % destdir if localdir: actioncmd += ' --local-dir=%s' % localdir actioncmd += ' --lib=%s' % libname actioncmd += ' --source-base=%s' % sourcebase actioncmd += ' --m4-base=%s' % m4base if pobase: actioncmd += ' --po-base=%s' % pobase actioncmd += ' --doc-base=%s' % docbase actioncmd += ' --tests-base=%s' % testsbase actioncmd += ' --aux-dir=%s' % auxdir if self.config.checkTestFlag(TESTS['tests']): actioncmd += ' --with-tests' if self.config.checkTestFlag(TESTS['obsolete']): actioncmd += ' --with-obsolete' if self.config.checkTestFlag(TESTS['c++-test']): actioncmd += ' --with-c++-tests' if self.config.checkTestFlag(TESTS['longrunning-test']): actioncmd += ' --with-longrunning-tests' if self.config.checkTestFlag(TESTS['privileged-test']): actioncmd += ' --with-privileged-test' if self.config.checkTestFlag(TESTS['unportable-test']): actioncmd += ' --with-unportable-tests' if self.config.checkTestFlag(TESTS['all-test']): actioncmd += ' --with-all-tests' for module in avoids: actioncmd += ' --avoid=%s' % module if lgpl: if lgpl == True: actioncmd += ' --lgpl' else: # if lgpl != True actioncmd += ' --lgpl=%s' % lgpl if makefile: actioncmd += ' --makefile-name=%s' % makefile if conddeps: actioncmd += ' --conditional-dependencies' else: # if not conddeps actioncmd += ' --no-conditional-dependencies' if libtool: actioncmd += ' --libtool' else: # if not libtool actioncmd += ' --no-libtool' actioncmd += ' --macro-prefix=%s' % macro_prefix if podomain: actioncmd = ' --podomain=%s' % podomain if witness_c_macro: actioncmd += ' --witness_c_macro=%s' % witness_c_macro if vc_files == True: actioncmd += ' --vc-files' elif vc_files == False: actioncmd += ' --no-vc-files' actioncmd += ' ' # Add a space actioncmd += ' '.join(modules) return(actioncmd) def gnulib_cache(self): '''GLImport.gnulib_cache() -> string Emit the contents of generated $m4base/gnulib-cache.m4 file. GLConfig: destdir, localdir, tests, sourcebase, m4base, pobase, docbase, testsbase, conddeps, libtool, macro_prefix, podomain, vc_files.''' emit = string() moduletable = self.moduletable actioncmd = self.actioncmd() destdir = self.config['destdir'] localdir = self.config['localdir'] testflags = list(self.config['testflags']) sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] pobase = self.config['pobase'] docbase = self.config['docbase'] testsbase = self.config['testsbase'] lgpl = self.config['lgpl'] libname = self.config['libname'] makefile = self.config['makefile'] conddeps = self.config['conddeps'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] witness_c_macro = self.config['witness_c_macro'] vc_files = self.config['vc_files'] modules = [str(module) for module in moduletable['base']] avoids = [str(avoid) for avoid in moduletable['avoids']] emit += self.emiter.copyright_notice() emit += '''# # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # %s # Specification in the form of a few \ gnulib-tool.m4 macro invocations:\n''' % actioncmd if not localdir or localdir.startswith('/'): relative_localdir = localdir else: # if localdir or not localdir.startswith('/') relative_localdir = constants.relativize(destdir, localdir) emit += 'gl_LOCAL_DIR([%s])\n' % relative_localdir emit += 'gl_MODULES([\n' emit += ' %s\n' % '\n '.join(modules) emit += '])\n' if self.config.checkTestFlag(TESTS['obsolete']): emit += 'gl_WITH_OBSOLETE\n' if self.config.checkTestFlag(TESTS['cxx-tests']): emit += 'gl_WITH_CXX_TESTS\n' if self.config.checkTestFlag(TESTS['privileged-tests']): emit += 'gl_WITH_PRIVILEGED_TESTS\n' if self.config.checkTestFlag(TESTS['unportable-tests']): emit += 'gl_WITH_UNPORTABLE_TESTS\n' if self.config.checkTestFlag(TESTS['all-tests']): emit += 'gl_WITH_ALL_TESTS\n' emit += 'gl_AVOID([%s])\n' % ' '.join(avoids) emit += 'gl_SOURCE_BASE([%s])\n' % sourcebase emit += 'gl_M4_BASE([%s])\n' % m4base emit += 'gl_PO_BASE([%s])\n' % pobase emit += 'gl_DOC_BASE([%s])\n' % docbase emit += 'gl_TESTS_BASE([%s])\n' % testsbase if self.config.checkTestFlag(TESTS['tests']): emit += 'gl_WITH_TESTS\n' emit += 'gl_LIB([%s])\n' % libname if lgpl != False: if lgpl == True: emit += 'gl_LGPL\n' else: # if lgpl != True emit += 'gl_LGPL([%d])\n' % lgpl emit += 'gl_MAKEFILE_NAME([%s])\n' % makefile if conddeps: emit += 'gl_CONDITIONAL_DEPENDENCIES\n' if libtool: emit += 'gl_LIBTOOL\n' emit += 'gl_MACRO_PREFIX([%s])\n' % macro_prefix emit += 'gl_PO_DOMAIN([%s])\n' % podomain emit += 'gl_WITNESS_C_MACRO([%s])\n' % witness_c_macro if vc_files: emit += 'gl_VC_FILES([%s])\n' % vc_files if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(constants.nlconvert(emit)) def gnulib_comp(self, files): '''GLImport.gnulib_comp(files) -> string Emit the contents of generated $m4base/gnulib-comp.m4 file. GLConfig: destdir, localdir, tests, sourcebase, m4base, pobase, docbase, testsbase, conddeps, libtool, macro_prefix, podomain, vc_files.''' emit = string() assistant = self.assistant moduletable = self.moduletable destdir = self.config['destdir'] localdir = self.config['localdir'] auxdir = self.config['auxdir'] testflags = list(self.config['testflags']) sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] pobase = self.config['pobase'] docbase = self.config['docbase'] testsbase = self.config['testsbase'] lgpl = self.config['lgpl'] libname = self.config['libname'] makefile = self.config['makefile'] conddeps = self.config['conddeps'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] witness_c_macro = self.config['witness_c_macro'] configure_ac = self.config['configure_ac'] vc_files = self.config['vc_files'] libtests = self.config['libtests'] modules = [str(module) for module in moduletable['base']] avoids = [str(avoid) for avoid in moduletable['avoids']] emit += '# DO NOT EDIT! GENERATED AUTOMATICALLY!\n' emit += self.emiter.copyright_notice() emit += '''# # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from %s, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([%s_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable AC_REQUIRE([gl_PROG_AR_RANLIB])\n''' % (configure_ac, macro_prefix) uses_subdirs = False for module in moduletable['main']: # Test whether there are some source files in subdirectories. for file in module.getFiles(): if file.startswith('lib/') and file.endswith('.c') and \ file.count('/') > 1: uses_subdirs = True break if uses_subdirs: emit += ' AC_REQUIRE([AM_PROG_CC_C_O])\n' for module in moduletable['final']: emit += ' # Code from module %s:\n' % str(module) snippet = module.getAutoconfSnippet_Early() lines = [line for line in snippet.split( constants.NL) if line != ''] if lines: emit += ' %s\n' % '\n '.join(lines) emit += '])\n' emit += ''' # This macro should be invoked from %s, in the section # "Check for header files, types and library functions". AC_DEFUN([%s_INIT], [\n''' % (configure_ac, macro_prefix) if libtool: emit += ' AM_CONDITIONAL([GL_COND_LIBTOOL], [true])\n' emit += ' gl_cond_libtool=true\n' else: # if not libtool emit += ' AM_CONDITIONAL([GL_COND_LIBTOOL], [false])\n' emit += ' gl_cond_libtool=false\n' emit += ' gl_libdeps=\n' emit += ' gl_ltlibdeps=\n' replace_auxdir = False if auxdir != 'build-aux': replace_auxdir = True emit += ' gl_m4_base=\'%s\'\n' % m4base emit += self.emiter.initmacro_start(macro_prefix) emit += ' gl_source_base=\'%s\'\n' % sourcebase if witness_c_macro: emit += ' m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [%s])\n' % \ witness_c_macro # Emit main autoconf snippets. emit += self.emiter.autoconfSnippets(moduletable['main'], moduletable, assistant, 0, True, False, True, replace_auxdir) if witness_c_macro: emit += ' m4_popdef([gl_MODULE_INDICATOR_CONDITION])\n' emit += ' # End of code from modules\n' emit += self.emiter.initmacro_end(macro_prefix) emit += ' gltests_libdeps=\n' emit += ' gltests_ltlibdeps=\n' emit += self.emiter.initmacro_start('%stests' % macro_prefix) emit += ' gl_source_base=\'%s\'\n' % testsbase # Define a tests witness macro that depends on the package. # PACKAGE is defined by AM_INIT_AUTOMAKE, PACKAGE_TARNAME is defined by # AC_INIT. # See <https://lists.gnu.org/r/automake/2009-05/msg00145.html>. emit += 'changequote(,)dnl\n' emit += ' %stests_WITNESS=' % macro_prefix emit += 'IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr \ abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e \ \'s/[^A-Z0-9_]/_/g\'`_GNULIB_TESTS\n' emit += 'changequote([, ])dnl\n' emit += ' AC_SUBST([%stests_WITNESS])\n' % macro_prefix emit += ' gl_module_indicator_condition=$%stests_WITNESS\n' % macro_prefix emit += ' m4_pushdef([gl_MODULE_INDICATOR_CONDITION], ' emit += '[$gl_module_indicator_condition])\n' # Emit tests autoconf snippets. emit += self.emiter.autoconfSnippets(moduletable['tests'], moduletable, assistant, 0, True, True, True, replace_auxdir) emit += ' m4_popdef([gl_MODULE_INDICATOR_CONDITION])\n' emit += self.emiter.initmacro_end('%stests' % macro_prefix) # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if not libtool: libname_upper = libname.upper().replace('-', '_') emit += ' %s_LIBDEPS="$gl_libdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LIBDEPS])\n' % libname_upper emit += ' %s_LTLIBDEPS="$gl_ltlibdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LTLIBDEPS])\n' % libname_upper if libtests: emit += ' LIBTESTS_LIBDEPS="$gltests_libdeps"\n' emit += ' AC_SUBST([LIBTESTS_LIBDEPS])\n' emit += '])\n' emit += self.emiter.initmacro_done(macro_prefix, sourcebase) emit += self.emiter.initmacro_done('%stests' % macro_prefix, testsbase) emit += ''' # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix emit += ' %s\n' % '\n '.join(files) emit += '])\n' if type(emit) is bytes: emit = emit.decode(ENCS['default']) return(emit) def _done_dir_(self, directory, dirs_added, dirs_removed): '''GLImport._done_dir_(directory, dirs_added, dirs_removed) This method is used to determine ignore argument for _update_ignorelist_ method and then call it.''' destdir = self.config['destdir'] if isdir(joinpath(destdir, 'CVS')) or \ isdir(joinpath(destdir, directory, 'CVS')) or \ isfile(joinpath(destdir, directory, '.cvsignore')): self._update_ignorelist_(directory, '.cvsignore', dirs_added, dirs_removed) if isdir(joinpath(destdir, '.git')) or \ isfile(joinpath(destdir, directory, '.gitignore')): self._update_ignorelist_(directory, '.gitignore', dirs_added, dirs_removed) def _update_ignorelist_(self, directory, ignore, dirs_added, dirs_removed): '''GLImport._update_ignorelist_(directory, ignore, dirs_added, dirs_removed) Update .gitignore or .cvsignore files.''' result = string() destdir = self.config['destdir'] if ignore == '.gitignore': anchor = '/' else: anchor = '' srcpath = joinpath(destdir, directory, ignore) backupname = '%s~' % srcpath if isfile(srcpath): if dirs_added or dirs_removed: with codecs.open(srcpath, 'rb', 'UTF-8') as file: srcdata = file.read() dirs_ignore = sorted(set(srcdata.split('\n'))) dirs_ignore = [line for line in dirs_ignore if line.strip()] srcdata = '\n'.join(sorted(set(dirs_ignore))).strip() dirs_ignore += [d for d in dirs_added if d not in dirs_ignore] dirs_ignore = [d for d in dirs_ignore if d in dirs_removed] dirs_ignore = ['%s%s' % (anchor, d) for d in dirs_ignore] dirs_ignore = sorted(set(dirs_ignore)) destdata = '\n'.join(sorted(set(dirs_ignore))).strip() if srcdata != destdata: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (srcpath, backupname)) shutil.copy2(srcpath, backupname) result = string() with codecs.open(srcpath, 'ab', 'UTF-8') as file: file.write(destdata) else: # if self.config['dryrun'] print('Updating %s (backup in %s)' % (srcpath, backupname)) else: # if not isfile(srcpath) if dirs_added: if not self.config['dryrun']: print('Creating %s' % srcpath) dirs_added = sorted(set(dirs_added)) dirs_added = ['%s%s' % (anchor, d) for d in dirs_added] if ignore == '.cvsignore': dirs_added = ['.deps', '.dirstamp'] + dirs_added with codecs.open(srcpath, 'wb', 'UTF-8') as file: file.write('\n'.join(dirs_added)) file.write('\n') else: # if self.config['dryrun'] print('Create %s' % srcpath) def prepare(self): '''Make all preparations before the execution of the code. Returns filetable and sed transformers, which change the license.''' destdir = self.config['destdir'] localdir = self.config['localdir'] auxdir = self.config['auxdir'] modules = list(self.config['modules']) avoids = list(self.config['avoids']) testflags = list(self.config['testflags']) sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] pobase = self.config['pobase'] docbase = self.config['docbase'] testsbase = self.config['testsbase'] lgpl = self.config['lgpl'] copyrights = self.config['copyrights'] libname = self.config['libname'] makefile = self.config['makefile'] conddeps = self.config['conddeps'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] witness_c_macro = self.config['witness_c_macro'] vc_files = self.config['vc_files'] configure_ac = self.config['configure_ac'] ac_version = self.config['ac_version'] verbose = self.config['verbosity'] base_modules = sorted( set([self.modulesystem.find(m) for m in modules])) avoids = sorted(set([self.modulesystem.find(a) for a in avoids])) # Perform transitive closure. self.moduletable.setAvoids(avoids) final_modules = self.moduletable.transitive_closure(base_modules) # Show final module list. if verbose >= 0: bold_on = '' bold_off = '' term = os.getenv('TERM') if term == 'xterm': bold_on = '\x1b[1m' bold_off = '\x1b[0m' print('Module list with included dependencies (indented):') for module in final_modules: if str(module) in self.config.getModules(): print(' %s%s%s' % (bold_on, module, bold_off)) else: # if str(module) not in self.config.getModules() print(' %s' % module) # Separate modules into main_modules and tests_modules. modules = self.moduletable.transitive_closure_separately( base_modules, final_modules) main_modules, tests_modules = modules # Transmit base_modules, final_modules, main_modules and tests_modules. self.moduletable.setBaseModules(base_modules) self.moduletable.setFinalModules(final_modules) self.moduletable.setMainModules(main_modules) self.moduletable.setTestsModules(tests_modules) # Print main_modules and tests_modules. if verbose >= 1: print('Main module list:') for module in main_modules: print(' %s' % str(module)) print('Tests-related module list:') for module in tests_modules: print(' %s' % str(module)) # Determine whether a $testsbase/libtests.a is needed. libtests = False for module in tests_modules: files = module.getFiles() for file in files: if file.startswith('lib/'): libtests = True break if libtests: self.config.enableLibtests() # Add dummy package if it is needed. main_modules = self.moduletable.add_dummy(main_modules) if libtests: # if we need to use libtests.a tests_modules = self.moduletable.add_dummy(tests_modules) # Check license incompatibilities. listing = list() compatibilities = dict() incompatibilities = string() compatibilities['all'] = ['GPLv2+ build tool', 'GPLed build tool', 'public domain', 'unlimited', 'unmodifiable license text'] compatibilities[3] = ['LGPL', 'LGPLv2+', 'LGPLv3+'] compatibilities[2] = ['LGPLv2+'] if lgpl: for module in main_modules: license = module.getLicense() if license not in compatibilities['all']: if lgpl == 3 or lgpl == True: if license not in compatibilities[3]: listing.append(tuple([str(module), license])) elif lgpl == 2: if license not in compatibilities[2]: listing.append(tuple([str(module), license])) if listing: raise(GLError(11, listing)) # Print notices from modules. for module in main_modules: notice = module.getNotice() notice = notice.strip() if notice: print('Notice from module %s:' % str(module)) pattern = compiler('^(.*?)$', re.S | re.M) notice = pattern.sub(' \\1', notice) print(notice) # Determine script to apply to imported library files. lgpl2gpl = ''' s/GNU Lesser General/GNU General/g s/Lesser General Public License/General Public License/g s/GNU Library General/GNU General/g s/Library General Public License/General Public License/g s/version 2\\(.1\\)\\{0,1\\}\\([ ,]\\)/version 3\\2/g''' sed_transform_lib_file = string() if 'config-h' in [str(module) for module in main_modules]: sed_transform_lib_file += ''' s/^#ifdef[\t ]*HAVE_CONFIG_H[\t ]*$/#if 1/ ''' sed_transform_main_lib_file = sed_transform_lib_file if copyrights: if lgpl: # if lgpl is enabled if lgpl == 3: sed_transform_main_lib_file += ''' s/GNU General/GNU Lesser General/g s/General Public License/Lesser General Public License/g s/Lesser Lesser General Public License/Lesser General Public''' \ + ' License/g' elif lgpl == 2: sed_transform_main_lib_file += ''' s/GNU General/GNU Lesser General/g s/General Public License/Lesser General Public License/g s/Lesser Lesser General Public License/Lesser General Public''' \ + '''License/g s/version [23]\\([ ,]\\)/version 2.1\\1/g''' else: # if lgpl is disabled sed_transform_main_lib_file += lgpl2gpl # Determine script to apply to auxiliary files that go into $auxdir/. sed_transform_build_aux_file = string() if copyrights: sed_transform_build_aux_file += lgpl2gpl # Determine script to apply to library files that go into $testsbase/. sed_transform_testsrelated_lib_file = sed_transform_lib_file if copyrights: sed_transform_testsrelated_lib_file += lgpl2gpl # Determine the final file lists. main_filelist, tests_filelist = \ self.moduletable.filelist_separately(main_modules, tests_modules) filelist = sorted( set(main_filelist + tests_filelist), key=string.lower) if not filelist: raise(GLError(12, None)) # Print list of files. if verbose >= 0: print('File list:') for file in filelist: if file.startswith('tests=lib/'): rest = file[10:] print(' lib/%s -> tests/%s' % (rest, rest)) else: print(' %s' % file) # Prepare basic filelist and basic old_files/new_files variables. filelist = sorted(set(filelist)) new_files = filelist + ['m4/gnulib-tool.m4'] old_files = list(self.cache['files']) path = joinpath(destdir, m4base, 'gnulib-tool.m4') if isfile(path): old_files += [joinpath('m4', 'gnulib-tool.m4')] # Construct tables and transformers. transformers = dict() transformers['lib'] = string(sed_transform_lib_file) transformers['aux'] = string(sed_transform_build_aux_file) transformers['main'] = string(sed_transform_main_lib_file) transformers['tests'] = string(sed_transform_testsrelated_lib_file) old_table = list() new_table = list() for src in old_files: dest = self.rewrite_old_files([src])[-1] old_table += [tuple([dest, src])] for src in new_files: dest = self.rewrite_new_files([src])[-1] new_table += [tuple([dest, src])] old_table = sorted(set(old_table)) new_table = sorted(set(new_table)) # Prepare the filetable. filetable = dict() filetable['all'] = sorted(set(filelist)) filetable['old'] = \ sorted(set(old_table), key=lambda t: tuple(t[0].lower())) filetable['new'] = \ sorted(set(new_table), key=lambda t: tuple(t[0].lower())) filetable['added'] = list() filetable['removed'] = list() # Return the result. result = tuple([filetable, transformers]) return(result) def execute(self, filetable, transformers): '''Perform operations on the lists of files, which are given in a special format except filelist argument. Such lists of files can be created using GLImport.prepare() function.''' if type(filetable) is not dict: raise(TypeError('filetable must be a dict, not %s' % type(filetable).__name__)) for key in ['all', 'old', 'new', 'added', 'removed']: if key not in filetable: raise(KeyError('filetable must contain key %s' % repr(key))) destdir = self.config['destdir'] localdir = self.config['localdir'] auxdir = self.config['auxdir'] modules = list(self.config['modules']) avoids = list(self.config['avoids']) testflags = list(self.config['testflags']) sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] pobase = self.config['pobase'] docbase = self.config['docbase'] testsbase = self.config['testsbase'] lgpl = self.config['lgpl'] copyrights = self.config['copyrights'] libname = self.config['libname'] makefile = self.config['makefile'] conddeps = self.config['conddeps'] libtool = self.config['libtool'] macro_prefix = self.config['macro_prefix'] podomain = self.config['podomain'] witness_c_macro = self.config['witness_c_macro'] vc_files = self.config['vc_files'] configure_ac = self.config['configure_ac'] ac_version = self.config['ac_version'] verbose = self.config['verbosity'] actioncmd = self.actioncmd() # Create all necessary directories. dirs = list() if pobase: dirs += [pobase] if [file for file in filetable['all'] if file.startswith('doc/')]: dirs += [docbase] dirs += [sourcebase, m4base, auxdir] dirs += [os.path.dirname(pair[0]) for pair in filetable['new']] dirs = sorted(set([joinpath(destdir, d) for d in dirs])) for directory in dirs: if not isdir(directory): print('Creating directory %s' % directory) if not self.config['dryrun']: try: # Try to create directory os.makedirs(directory) except Exception as error: raise(GLError(13, directory)) else: # if self.config['dryrun'] print('Create directory %s' % directory) # Create GLFileAssistant instance to process files. self.assistant = GLFileAssistant(self.config, transformers) # Files which are in filetable['old'] and not in filetable['new']. # They will be removed and added to filetable['removed'] list. pairs = [f for f in filetable['old'] if f not in filetable['old']] pairs = sorted(set(pairs), key=lambda t: tuple(t[0].lower())) files = sorted(set(pair[0] for pair in pairs)) for file in files: path = joinpath(destdir, file) if isfile(path) or os.path.islink(path): if not self.config['dryrun']: backup = string('%s~' % path) print('Removing file %s (backup in )' % (path, backup)) try: # Try to move file if os.path.exists(backup): os.remove(backup) shutil.move(path, '%s~' % path) except Exception as error: raise(GLError(14, file)) else: # if self.config['dryrun'] print('Remove file %s (backup in %s~)' % (path, path)) filetable['removed'] += [file] # Files which are in filetable['new'] and not in filetable['old']. # They will be added/updated and added to filetable['added'] list. already_present = False pairs = [f for f in filetable['new'] if f not in filetable['old']] pairs = sorted(set(pairs)) for pair in pairs: original = pair[1] rewritten = pair[0] self.assistant.setOriginal(original) self.assistant.setRewritten(rewritten) self.assistant.add_or_update(already_present) # Files which are in filetable['new'] and in filetable['old']. # They will be added/updated and added to filetable['added'] list. already_present = True pairs = [f for f in filetable['new'] if f in filetable['old']] pairs = sorted(set(pairs)) for pair in pairs: original = pair[1] rewritten = pair[0] self.assistant.setOriginal(original) self.assistant.setRewritten(rewritten) self.assistant.add_or_update(already_present) # Add files which were added to the list of filetable['added']. filetable['added'] += self.assistant.getFiles() filetable['added'] = sorted(set(filetable['added'])) # Determine include_guard_prefix. include_guard_prefix = self.config['include_guard_prefix'] # Determine makefile name. if not makefile: makefile_am = string('Makefile.am') else: # if makefile makefile_am = makefile # Create normal Makefile.ams. for_test = False # Setup list of Makefile.am edits that are to be performed afterwards. # Some of these edits apply to files that we will generate; others are # under the responsibility of the developer. makefile_am_edits = dict() if makefile_am == 'Makefile.am': sourcebase_dir = os.path.dirname(sourcebase) sourcebase_base = os.path.basename(sourcebase) self.makefiletable.editor( sourcebase_dir, 'SUBDIRS', sourcebase_base) if pobase: pobase_dir = os.path.dirname(pobase) pobase_base = os.path.basename(pobase) self.makefiletable.editor(pobase_dir, 'SUBDIRS', pobase_base) if self.config.checkTestFlag(TESTS['tests']): if makefile_am == 'Makefile.am': testsbase_dir = os.path.dirname(testsbase) testsbase_base = os.path.basename(testsbase) self.makefiletable.editor( testsbase_dir, 'SUBDIRS', testsbase_base) self.makefiletable.editor('', 'ACLOCAL_AMFLAGS', '-I %s' % m4base) self.makefiletable.parent() # Create library makefile. basename = joinpath(sourcebase, makefile_am) tmpfile = self.assistant.tmpfilename(basename) emit, uses_subdirs = self.emiter.lib_Makefile_am(basename, self.moduletable['main'], self.moduletable, self.makefiletable, actioncmd, for_test) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(emit) filename, backup, flag = self.assistant.super_update(basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) # Create po/ directory. filesystem = GLFileSystem(self.config) if pobase: # Create po makefile and auxiliary files. for file in ['Makefile.in.in', 'remove-potcdate.sin']: tmpfile = self.assistant.tmpfilename(joinpath(pobase, file)) path = joinpath('build-aux', 'po', file) lookedup, flag = filesystem.lookup(path) shutil.move(lookedup, tmpfile) basename = joinpath(pobase, file) filename, backup, flag = self.assistant.super_update( basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) # Create po makefile parameterization, part 1. basename = joinpath(pobase, 'Makevars') tmpfile = self.assistant.tmpfilename(basename) emit = self.emiter.po_Makevars() with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(emit) filename, backup, flag = self.assistant.super_update( basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) # Create po makefile parameterization, part 2. basename = joinpath(pobase, 'POTFILES.in') tmpfile = self.assistant.tmpfilename(basename) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(self.emiter.po_POTFILES_in(filetable['all'])) basename = joinpath(pobase, 'POTFILES.in') filename, backup, flag = self.assistant.super_update( basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) # Fetch PO files. TP_URL = 'https://translationproject.org/latest/' if not self.config['dryrun']: print('Fetching gnulib PO files from %s' % TP_URL) os.chdir(joinpath(destdir, pobase)) args = ['wget', '--no-verbose', '--mirror', '--level=1', '-nd', '-A.po', '-P', '.', '%sgnulib/' % TP_URL] sp.call(args, shell=True) else: # if self.config['dryrun'] print('Fetch gnulib PO files from %s' % TP_URL) # Create po/LINGUAS. basename = joinpath(pobase, 'LINGUAS') if not self.config['dryrun']: tmpfile = self.assistant.tmpfilename(basename) data = string('# Set of available languages.\n') files = [constants.subend('.po', '', file) for file in os.listdir(joinpath(destdir, pobase))] files = [file.decode(ENCS['default']) if type(file) is bytes else file for file in files] data += '\n'.join(files) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(data) filename, backup, flag = self.assistant.super_update( basename, tmpfile) if flag == 1: print('Updating %s (backup in %s)' % (filename, backup)) elif flag == 2: print('Creating %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) else: # if not self.config['dryrun'] backupname = '%s~' % basename if isfile(destdir, basename): print('Update %s (backup in %s)' % (basename, backupname)) else: # if not isfile(destdir, basename) print('Create %s' % basename) # Create m4/gnulib-cache.m4. basename = joinpath(m4base, 'gnulib-cache.m4') tmpfile = self.assistant.tmpfilename(basename) emit = self.gnulib_cache() with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(emit) filename, backup, flag = self.assistant.super_update(basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) if emit[-2:] == '\r\n': emit = emit[:-2] elif emit[-1:] == '\n': emit = emit[:-1] print(emit) if isfile(tmpfile): os.remove(tmpfile) # Create m4/gnulib-comp.m4. basename = joinpath(m4base, 'gnulib-comp.m4') tmpfile = self.assistant.tmpfilename(basename) emit = self.gnulib_comp(filetable['all']) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(emit) filename, backup, flag = self.assistant.super_update(basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) if emit[-2:] == '\r\n': emit = emit[:-2] elif emit[-1:] == '\n': emit = emit[:-1] print(emit) if isfile(tmpfile): os.remove(tmpfile) # Create tests Makefile. inctests = self.config.checkTestFlag(TESTS['tests']) if inctests: basename = joinpath(testsbase, makefile_am) tmpfile = self.assistant.tmpfilename(basename) emit, uses_subdirs = self.emiter.lib_Makefile_am(basename, self.moduletable['tests'], self.moduletable, self.makefiletable, actioncmd, for_test) with codecs.open(tmpfile, 'wb', 'UTF-8') as file: file.write(emit) filename, backup, flag = self.assistant.super_update( basename, tmpfile) if flag == 1: if not self.config['dryrun']: print('Updating %s (backup in %s)' % (filename, backup)) else: # if self.config['dryrun'] print('Update %s (backup in %s)' % (filename, backup)) elif flag == 2: if not self.config['dryrun']: print('Creating %s' % filename) else: # if self.config['dryrun']: print('Create %s' % filename) filetable['added'] += [filename] if isfile(tmpfile): os.remove(tmpfile) # Update the .cvsignore and .gitignore files. ignorelist = list() filetable['added'] = sorted(set(filetable['added'])) filetable['removed'] = sorted(set(filetable['added'])) for file in filetable['added']: directory, basename = os.path.split(file) ignorelist += [tuple([directory, '|A|', basename])] for file in filetable['removed']: directory, basename = os.path.split(file) ignorelist += [tuple([directory, '|R|', basename])] last_dir = string() last_dirs_added = list() last_dirs_removed = list() for row in ignorelist: next_dir = row[0] operand = row[1] filename = row[2] if next_dir != last_dir: self._done_dir_(last_dir, last_dirs_added, last_dirs_removed) last_dir = next_dir last_dirs_added = list() last_dirs_removed = list() if operand == '|A|': last_dirs_added += [filename] elif operand == '|R|': last_dirs_removed += [filename] self._done_dir_(last_dir, last_dirs_added, last_dirs_removed) exit() # Finish the work. print('Finished.\n') print('You may need to add #include directives \ for the following .h files.') modules = sorted(set([module for module in self.moduletable['base'] if module in self.moduletable['main']])) # First the #include <...> directives without #ifs, sorted for convenience, # then the #include "..." directives without #ifs, sorted for convenience, # then the #include directives that are surrounded by #ifs. Not sorted. includes_angles = list() includes_quotes = list() includes_if = list() for module in modules: include = module.getInclude() for include in include.split('\n'): if '%s#if' % constants.NL in '%s%s' % (constants.NL, include): includes_if += [include] # if '%s#if' % constants.NL in '%s%s' % (constants.NL, include) else: if 'include "' in include: includes_quotes += [include] else: # if 'include "' not in include includes_angles += [include] includes_angles = sorted(set(includes_angles)) includes_quotes = sorted(set(includes_quotes)) includes = includes_angles + includes_quotes + includes_if includes = [include for include in includes if include.split()] for include in includes: print(' %s' % include) # Get link directives. links = [module.getLink() for module in self.moduletable['main']] ulinks = list() for link in links: for lib in link: ulinks += [lib] ulinks = sorted(set(ulinks)) if ulinks: print(''' You may need to use the following Makefile variables when linking. Use them in <program>_LDADD when linking a program, or in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library.''') for link in ulinks: print(' %s' % link) # Print reminders. print('') print('Don\'t forget to') if makefile_am == 'Makefile.am': print(' - add "%s/Makefile" to AC_CONFIG_FILES in %s,' % (sourcebase, configure_ac)) else: # if makefile_am != 'Makefile.am' print(' - "include %s" from within "%s/Makefile.am",' % (makefile, sourcebase)) if pobase: print(' - add "%s/Makefile.in to AC_CONFIG_FILES in %s,' % (pobase, configure_ac)) if inctests: if makefile_am == 'Makefile.am': print(' - add "%s/Makefile" to AC_CONFIG_FILES in %s,' % (testsbase, configure_ac)) else: # if makefile_am != 'Makefile.am' print(' - "include %s" from within "%s/Makefile.am",' % (makefile, testsbase)) # Print makefile edits. current_edit = int() makefile_am_edits = self.makefiletable.count() while current_edit != makefile_am_edits: dictionary = self.makefiletable[current_edit] if dictionary['var']: print(' - mention "%s" in %s in %s,' % (dictionary['val'], dictionary['var'], joinpath(dictionary['dir'], 'Makefile.am'))) current_edit += 1 # Detect position_early_after. with codecs.open(configure_ac, 'rb', 'UTF-8') as file: data = file.read() match_result1 = \ bool(compiler('^ *AC_PROG_CC_STDC', re.S | re.M).findall(data)) match_result2 = \ bool(compiler('^ *AC_PROG_CC_C99', re.S | re.M).findall(data)) if match_result1: position_early_after = 'AC_PROG_CC_STDC' elif match_result2: position_early_after = 'AC_PROG_CC_C99' else: # if not any([match_result1, match_result2]) position_early_after = 'AC_PROG_CC' print(' - invoke %s_EARLY in %s, right after %s,' % (macro_prefix, configure_ac, position_early_after)) print(' - invoke %s_INIT in %s.' % (macro_prefix, configure_ac)) sp.call(['rm', '-rf', self.config['tempdir']], shell=False) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLInfo.py����������������������������������������������������������0000664�0000000�0000000�00000033317�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import locale import codecs import subprocess as sp from . import constants #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath #=============================================================================== # Define GLInfo class #=============================================================================== class GLInfo(object): '''This class is used to get fromatted information about gnulib-tool. This information is mainly used in stdout messages, but can be used anywhere else. The return values are not the same as for the module, but still depends on them.''' def __repr__(self): '''x.__repr__ <==> repr(x)''' result = '<pygnulib.GLInfo %s>' % hex(id(self)) return(result) def package(self): '''Return formatted string which contains name of the package.''' result = 'GNU gnulib' return(result) def authors(self): '''Return formatted string which contains authors. The special __author__ variable is used (type is list).''' result = string() for item in __author__: if item == __author__[-2]: result += '%s ' % item elif item == __author__[-1]: result += 'and %s' % item else: result += '%s, ' % item return(result) def license(self): '''Return formatted string which contains license and its description.''' result = 'License GPLv3+: GNU GPL version 3 or later' result += ' <https://gnu.org/licenses/gpl.html>\n' result += 'This is free software: you are free' result += ' to change and redistribute it.\n' result += 'There is NO WARRANTY, to the extent permitted by law.' return(result) def copyright(self): '''Return formatted string which contains copyright. The special __copyright__ variable is used (type is str).''' result = 'Copyright (C) %s' % __copyright__ return(result) def date(self): '''Return formatted string which contains date and time in GMT format.''' if isdir(DIRS['git']): counter = int() # Create counter result = string() # Create string args = ['git', 'log'] result = sp.check_output(args).decode("UTF-8") # Get date as "Fri Mar 21 07:16:51 2008 -0600" from string pattern = re.compile('Date:[\t ]*(.*?)$', re.S | re.M) result = pattern.findall(result)[0] # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600" pattern = re.compile('^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ') result = pattern.sub('\\1 \\2 \\4 \\3 ', result) # Use GNU date to compute the time in GMT args = ['date', '-d', result, '-u', '+%Y-%m-%d %H:%M:%S'] proc = sp.check_output(args) result = string(proc, "UTF-8") result = result.rstrip(os.linesep) return(result) def usage(self): '''Show help message.''' result = '''\ Usage: gnulib-tool --list gnulib-tool --find filename gnulib-tool --import [module1 ... moduleN] gnulib-tool --add-import [module1 ... moduleN] gnulib-tool --remove-import [module1 ... moduleN] gnulib-tool --update gnulib-tool --create-testdir --dir=directory [module1 ... moduleN] gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN] gnulib-tool --test --dir=directory module1 ... moduleN gnulib-tool --megatest --dir=directory [module1 ... moduleN] gnulib-tool --extract-description module gnulib-tool --extract-comment module gnulib-tool --extract-status module gnulib-tool --extract-notice module gnulib-tool --extract-applicability module gnulib-tool --extract-filelist module gnulib-tool --extract-dependencies module gnulib-tool --extract-autoconf-snippet module gnulib-tool --extract-automake-snippet module gnulib-tool --extract-include-directive module gnulib-tool --extract-link-directive module gnulib-tool --extract-license module gnulib-tool --extract-maintainer module gnulib-tool --extract-tests-module module gnulib-tool --copy-file file [destination] Operation modes: --list print the available module names --find find the modules which contain the specified file --import import the given modules into the current package --add-import augment the list of imports from gnulib into the current package, by adding the given modules; if no modules are specified, update the current package from the current gnulib --remove-import reduce the list of imports from gnulib into the current package, by removing the given modules --update update the current package, restore files omitted from version control --create-testdir create a scratch package with the given modules --create-megatestdir create a mega scratch package with the given modules one by one and all together --test test the combination of the given modules (recommended to use CC=\"gcc -Wall\" here) --megatest test the given modules one by one and all together (recommended to use CC=\"gcc -Wall\" here) --extract-description extract the description --extract-comment extract the comment --extract-status extract the status (obsolete etc.) --extract-notice extract the notice or banner --extract-applicability extract the applicability --extract-filelist extract the list of files --extract-dependencies extract the dependencies --extract-autoconf-snippet extract the snippet for configure.ac --extract-automake-snippet extract the snippet for library makefile --extract-include-directive extract the #include directive --extract-link-directive extract the linker directive --extract-license report the license terms of the source files under lib/ --extract-maintainer report the maintainer(s) inside gnulib --extract-tests-module report the unit test module, if it exists --copy-file copy a file that is not part of any module --help Show this help text. --version Show version and authorship information. General options: --dir=DIRECTORY Specify the target directory. For --import, this specifies where your configure.ac can be found. Defaults to current directory. --local-dir=DIRECTORY Specify a local override directory where to look up files before looking in gnulib's directory. --cache-modules Enable module caching optimization. --no-cache-modules Disable module caching optimization. --verbose Increase verbosity. May be repeated. --quiet Decrease verbosity. May be repeated. Options for --import, --add/remove-import, --update: --dry-run Only print what would have been done. Options for --import, --add/remove-import: --with-tests Include unit tests for the included modules. Options for --create-[mega]testdir, --[mega]test: --without-tests Don't include unit tests for the included modules. Options for --import, --add/remove-import, --create-[mega]testdir, --[mega]test: --with-obsolete Include obsolete modules when they occur among the dependencies. By default, dependencies to obsolete modules are ignored. --with-c++-tests Include even unit tests for C++ interoperability. --without-c++-tests Exclude unit tests for C++ interoperability. --with-longrunning-tests Include even unit tests that are long-runners. --without-longrunning-tests Exclude unit tests that are long-runners. --with-privileged-tests Include even unit tests that require root privileges. --without-privileged-tests Exclude unit tests that require root privileges. --with-unportable-tests Include even unit tests that fail on some platforms. --without-unportable-tests Exclude unit tests that fail on some platforms. --with-all-tests Include all kinds of problematic unit tests. --avoid=MODULE Avoid including the given MODULE. Useful if you have code that provides equivalent functionality. This option can be repeated. --conditional-dependencies Support conditional dependencies (may save configure time and object code). --no-conditional-dependencies Don't use conditional dependencies. --libtool Use libtool rules. --no-libtool Don't use libtool rules. Options for --import, --add/remove-import: --lib=LIBRARY Specify the library name. Defaults to 'libgnu'. --source-base=DIRECTORY Directory relative to --dir where source code is placed (default \"lib\"). --m4-base=DIRECTORY Directory relative to --dir where *.m4 macros are placed (default \"m4\"). --po-base=DIRECTORY Directory relative to --dir where *.po files are placed (default \"po\"). --doc-base=DIRECTORY Directory relative to --dir where doc files are placed (default \"doc\"). --tests-base=DIRECTORY Directory relative to --dir where unit tests are placed (default \"tests\"). --aux-dir=DIRECTORY Directory relative to --dir where auxiliary build tools are placed (default comes from configure.ac). --lgpl[=2|=3] Abort if modules aren't available under the LGPL. Also modify license template from GPL to LGPL. The version number of the LGPL can be specified; the default is currently LGPLv3. --makefile-name=NAME Name of makefile in automake syntax in the source-base and tests-base directories (default \"Makefile.am\"). --macro-prefix=PREFIX Specify the prefix of the macros 'gl_EARLY' and 'gl_INIT'. Default is 'gl'. --po-domain=NAME Specify the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended. --witness-c-macro=NAME Specify the C macro that is defined when the sources in this directory are compiled or used. --vc-files Update version control related files. --no-vc-files Don't update version control related files (.gitignore and/or .cvsignore). Options for --create-[mega]testdir, --[mega]test: --single-configure Generate a single configure file, not a separate configure file for the tests directory. Options for --import, --add/remove-import, --update, --create-[mega]testdir, --[mega]test: -s, --symbolic, --symlink Make symbolic links instead of copying files. --local-symlink Make symbolic links instead of copying files, only for files from the local override directory. Options for --import, --add/remove-import, --update: -S, --more-symlinks Deprecated; equivalent to --symlink. Report bugs to <bug-gnulib@gnu.org>.''' return(result) def version(self): '''Return formatted string which contains git version.''' if isdir(DIRS['git']): version_gen = joinpath(DIRS['build-aux'], 'git-version-gen') args = [version_gen, DIRS['root']] result = sp.check_output(args).decode("UTF-8") result = result.strip() if result == 'UNKNOWN': result = string() return(result) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLMakefileTable.py�������������������������������������������������0000664�0000000�0000000�00000011367�14110572173�0021422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import codecs import hashlib import subprocess as sp from . import constants from .GLError import GLError from .GLConfig import GLConfig from .GLFileSystem import GLFileSystem #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath filter_filelist = constants.filter_filelist #=============================================================================== # Define GLMakefileTable class #=============================================================================== class GLMakefileTable(object): '''This class is used to edit Makefile and store edits as table. When user creates Makefile, he may need to use this class.''' def __init__(self, config): '''GLMakefileTable.__init__(config) -> GLMakefileTable Create GLMakefileTable instance.''' if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) self.config = config self.table = list() def __getitem__(self, y): '''x.__getitem__(y) = x[y]''' if type(y) is not int: raise(TypeError('indices must be integers, not %s' % type(y).__name__)) result = self.table[y] return(dict(result)) def editor(self, dir, var, val): '''GLMakefileTable.editor(dir, var, val) This method is used to remember that ${dir}Makefile.am needs to be edited to that ${var} mentions ${val}.''' if type(dir) is bytes or type(dir) is string: if type(dir) is bytes: dir = dir.decode(ENCS['default']) else: # if dir has not bytes or string type raise(TypeError( 'dir must be a string, not %s' % (type(dir).__name__))) if type(var) is bytes or type(var) is string: if type(var) is bytes: var = var.decode(ENCS['default']) else: # if var has not bytes or string type raise(TypeError( 'var must be a string, not %s' % (type(var).__name__))) if type(val) is bytes or type(val) is string: if type(val) is bytes: val = val.decode(ENCS['default']) else: # if val has not bytes or string type raise(TypeError( 'val must be a string, not %s' % (type(val).__name__))) dictionary = {'dir': dir, 'var': var, 'val': val} self.table += [dictionary] def parent(self): '''GLMakefileTable.parent() Add a special row to Makefile.am table with the first parent directory which contains or will contain Makefile.am file. GLConfig: sourcebase, m4base, testsbase, testflags, makefile.''' m4base = self.config['m4base'] sourcebase = self.config['sourcebase'] testsbase = self.config['testsbase'] makefile = self.config['makefile'] inctests = self.config.checkTestFlag(TESTS['tests']) dir1 = string('%s%s' % (m4base, os.path.sep)) mfd = string('Makefile.am') if not makefile: mfx = string('Makefile.am') else: # if makefile mfx = makefile dir2 = string() while dir1 and \ (joinpath(self.config['destdir'], dir1, mfd) or joinpath(dir1, mfd) == joinpath(sourcebase, mfx) or (inctests and joinpath(dir1, mfd) == joinpath(testsbase, mfx))): dir2 = joinpath(os.path.basename(dir1), dir2) dir1 = os.path.dirname(dir1) self.editor(dir1, 'EXTRA_DIST', joinpath(dir2, 'gnulib-cache.m4')) def count(self): '''GLMakefileTable.count() -> int Count number of edits which were applied.''' return(len(self.table)) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLModuleSystem.py��������������������������������������������������0000664�0000000�0000000�00000152406�14110572173�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import codecs import hashlib import subprocess as sp from . import constants from .GLError import GLError from .GLConfig import GLConfig from .GLFileSystem import GLFileSystem #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath relpath = os.path.relpath filter_filelist = constants.filter_filelist #=============================================================================== # Define GLModuleSystem class #=============================================================================== class GLModuleSystem(object): '''GLModuleSystem is used to operate with module system using dynamic searching and patching.''' def __init__(self, config): '''GLModuleSystem.__init__(config) -> GLModuleSystem Create new GLModuleSystem instance. Some functions use GLFileSystem class to look up a file in localdir or gnulib directories, or combine it through 'patch' utility.''' self.args = dict() if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) self.config = config self.filesystem = GLFileSystem(self.config) def __repr__(self): '''x.__repr__ <==> repr(x)''' result = '<pygnulib.GLModuleSystem %s>' % hex(id(self)) return(result) def exists(self, module): '''GLModuleSystem.exists(module) -> bool Check whether the given module exists. GLConfig: localdir.''' if type(module) is bytes or string: if type(module) is bytes: module = module.decode(ENCS['default']) else: # if module has not bytes or string type raise(TypeError( 'module must be a string, not %s' % type(module).__name__)) result = bool() badnames = ['ChangeLog', 'COPYING', 'README', 'TEMPLATE', 'TEMPLATE-EXTENDED', 'TEMPLATE-TESTS'] if isfile(joinpath(DIRS['modules'], module)) or \ all([ # Begin all(iterable) function self.config['localdir'], isdir(joinpath(self.config['localdir'], 'modules')), isfile( joinpath(self.config['localdir'], 'modules', module)) ]): # Close all(iterable) function if module not in badnames: result = True return(result) def find(self, module): '''GLModuleSystem.find(module) -> GLModule Find the given module.''' if type(module) is bytes or string: if type(module) is bytes: module = module.decode(ENCS['default']) else: # if module has not bytes or string type raise(TypeError( 'module must be a string, not %s' % type(module).__name__)) if self.exists(module): path, istemp = self.filesystem.lookup(joinpath('modules', module)) result = GLModule(self.config, path, istemp) return(result) else: # if not self.exists(module) if self.config['errors']: raise(GLError(3, module)) else: # if not self.config['errors'] sys.stderr.write('gnulib-tool: warning: ') sys.stderr.write('file %s does not exist\n' % str(module)) def list(self): '''GLModuleSystem.list() -> list Return the available module names as tuple. We could use a combination of os.walk() function and re module. However, it takes too much time to complete, so this version uses subprocess to run shell commands.''' result = string() listing = list() localdir = self.config['localdir'] find_args = ['find', 'modules', '-type', 'f', '-print'] sed_args = \ [ 'sed', '-e', r's,^modules/,,', '-e', r'/^ChangeLog$/d', '-e', r'/\/ChangeLog$/d', '-e', r'/^COPYING$/d', '-e', r'/\/COPYING$/d', '-e', r'/^README$/d', '-e', r'/\/README$/d', '-e', r'/^TEMPLATE$/d', '-e', r'/^TEMPLATE-EXTENDED$/d', '-e', r'/^TEMPLATE-TESTS$/d', '-e', r'/^\..*/d', '-e', r'/~$/d', '-e', r'/-tests$/d', ] # Read modules from gnulib root directory. os.chdir(constants.DIRS['root']) find = sp.Popen(find_args, stdout=sp.PIPE) result += find.stdout.read().decode("UTF-8") # Read modules from local directory. if localdir and isdir(joinpath(localdir, 'modules')): os.chdir(localdir) find = sp.Popen(find_args, stdout=sp.PIPE) result += find.stdout.read().decode("UTF-8") sed_args += ['-e', r's,\.diff$,,'] # Save the list of the modules to file. os.chdir(DIRS['cwd']) path = joinpath(self.config['tempdir'], 'list') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(result) # Filter the list of the modules. stdin = codecs.open(path, 'rb', 'UTF-8') sed = sp.Popen(sed_args, stdin=stdin, stdout=sp.PIPE) result = sed.stdout.read().decode("UTF-8") stdin.close() os.remove(path) listing = [line for line in result.split('\n') if line.strip()] listing = sorted(set(listing)) return(listing) #=============================================================================== # Define GLModule class #=============================================================================== class GLModule(object): '''GLModule is used to create a module object from the file with the given path. GLModule can get all information about module, get its dependencies, files, etc.''' def __init__(self, config, module, patched=False): '''GLModule.__init__(config, module[, patched]) -> GLModule Create new GLModule instance. Arguments are module and patched, where module is a string representing the path to the module and patched is a bool indicating that module was created after applying patch.''' self.args = dict() self.cache = dict() self.content = string() if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) if type(module) is bytes or type(module) is string: if type(module) is bytes: module = module.decode(ENCS['default']) else: # if module has not bytes or string type raise(TypeError('module must be a string, not %s' % type(module).__name__)) if type(patched) is not bool: raise(TypeError('patched must be a bool, not %s' % type(module).__name__)) self.module = module self.patched = patched self.config = config self.filesystem = GLFileSystem(self.config) self.modulesystem = GLModuleSystem(self.config) with codecs.open(module, 'rb', 'UTF-8') as file: self.content = file.read() self.regex = '(?:Description:|Comment:|Status:|Notice:|Applicability:|\ Files:|Depends-on:|configure\\.ac-early:|configure\\.ac:|Makefile\\.am:|\ Include:|Link:|License:|Maintainer:)' def __eq__(self, module): '''x.__eq__(y) <==> x==y''' result = bool() if type(module) is GLModule: if self.module == module.module: result = True return(result) def __ne__(self, module): '''x.__ne__(y) <==> x!=y''' result = bool() if type(module) is GLModule: if self.module != module.module: result = True return(result) def __ge__(self, module): '''x.__ge__(y) <==> x>=y''' result = bool() if type(module) is GLModule: if self.module >= module.module: result = True return(result) def __gt__(self, module): '''x.__gt__(y) <==> x>y''' result = bool() if type(module) is GLModule: if self.module > module.module: result = True return(result) def __hash__(self): '''x.__hash__() <==> hash(x)''' module = hash(self.module) patched = hash(self.patched) result = module ^ patched return(result) def __le__(self, module): '''x.__le__(y) <==> x<=y''' result = bool() if type(module) is GLModule: if self.module <= module.module: result = True return(result) def __lt__(self, module): '''x.__lt__(y) <==> x<y''' result = bool() if type(module) is GLModule: if self.module < module.module: result = True return(result) def __str__(self): '''x.__str__() <==> str(x)''' result = self.getName() return(result) def __repr__(self): '''x.__repr__ <==> repr(x)''' result = '<pygnulib.GLModule %s %s>' % \ (repr(self.getName()), hex(id(self))) return(result) def getName(self): '''GLModule.getName() -> string Return the name of the module.''' pattern = compiler(joinpath('modules', '(.*?)$')) result = pattern.findall(self.module)[0] return(result) def isPatched(self): '''GLModule.isPatched() -> bool Check whether module was created after applying patch.''' return(self.patched) def isTests(self): '''GLModule.isTests() -> bool Check whether module is a -tests version of module.''' result = self.getName().endswith('-tests') return(result) def isNonTests(self): '''GLModule.isTests() -> bool Check whether module is not a -tests version of module.''' result = not(self.isTests()) return(result) def getTestsName(self): '''Return -tests version of the module name.''' result = self.getName() if not result.endswith('-tests'): result += '-tests' return(result) def getTestsModule(self): '''Return -tests version of the module as GLModule.''' result = self.modulesystem.find(self.getTestsName()) return(result) def getShellFunc(self): '''GLModule.getShellFunc() -> string Computes the shell function name that will contain the m4 macros for the module.''' isalnum = True macro_prefix = self.config['macro_prefix'] for char in str(module): if char not in constants.ALPHANUMERIC: isalnum = False break if isalnum: module = str(self) else: # if not isalnum module = '%s\n' % str(self) if type(module) is string: module = module.encode(ENCS['default']) module = hashlib.md5(module).hexdigest() result = 'func_%s_gnulib_m4code_%s' % (macro_prefix, module) if type(result) is bytes: result = result.decode(ENCS['default']) return(result) def getShellVar(self): '''GLModule.getShellVar() -> string Compute the shell variable name the will be set to true once the m4 macros for the module have been executed.''' isalnum = True macro_prefix = self.config['macro_prefix'] for char in str(module): if char not in constants.ALPHANUMERIC: isalnum = False break if isalnum: module = str(self) else: # if not isalnum module = '%s\n' % str(self) if type(module) is string: module = module.encode(ENCS['default']) module = hashlib.md5(module).hexdigest() result = '%s_gnulib_enabled_%s' % (macro_prefix, module) if type(result) is bytes: result = result.decode(ENCS['default']) return(result) def getConditionalName(self): '''GLModule.getConditionalName() -> string Return the automake conditional name. GLConfig: macro_prefix.''' macro_prefix = self.config['macro_prefix'] nonascii = \ [ # Begin to filter non-ascii chars char for char in self.getName() if char not in \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_' ] # Finish to filter non-ascii chars if nonascii: name = self.getName().encode(ENCS['default']) name = hashlib.md5(name).hexdigest() conditional = '%s_GNULIB_ENABLED_%s' % (macro_prefix, name) else: # if not nonascii result = '%s_GNULIB_ENABLED_%s' (macro_prefix, name) if type(result) is bytes: result = result.decode(ENCS['default']) return(result) def getDescription(self): '''GLModule.getDescription() -> string Return description of the module.''' section = 'Description:' if 'description' not in self.cache: if section not in self.content: result = string() else: # if section in self.content pattern = '^%s[\t ]*(.*?)%s' % (section, self.regex) pattern = compiler(pattern, re.S | re.M) result = pattern.findall(self.content) if type(result) is list: if not result: result = string() else: # if result result = result[-1] result = result.strip() self.cache['description'] = result return(self.cache['description']) def getComment(self): '''GLModule.getComment() -> string Return comment to module.''' section = 'Comment:' if 'comment' not in self.cache: if section not in self.content: result = string() else: # if section in self.content pattern = '^%s[\t ]*(.*?)%s' % (section, self.regex) pattern = compiler(pattern, re.S | re.M) result = pattern.findall(self.content) if type(result) is list: if not result: result = string() else: # if result result = result[-1] result = result.strip() self.cache['comment'] = result return(self.cache['comment']) def getStatus(self): '''GLModule.getStatus() -> string Return module status.''' section = 'Status:' if 'status' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = [part.strip() for part in parts if part.strip()] self.cache['status'] = list(result) return(list(self.cache['status'])) def getNotice(self): '''GLModule.getNotice() -> string Return notice to module.''' section = 'Notice:' if 'notice' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) self.cache['notice'] = result return(self.cache['notice']) def getApplicability(self): '''GLModule.getApplicability() -> string Return applicability of module.''' section = 'Applicability:' if 'applicability' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] parts = [part.strip() for part in parts] result = ''.join(parts) if not result.strip(): if self.getName().endswith('-tests'): result = 'tests' else: # if not self.getName().endswith('-tests') result = 'main' if type(result) is bytes: result = result.decode(ENCS['default']) result = result.strip() self.cache['applicability'] = result return(self.cache['applicability']) def getFiles(self): '''GLModule.getFiles() -> list Return list of files. GLConfig: ac_version.''' ac_version = self.config['ac_version'] section = 'Files:' result = list() if 'files' not in self.cache: if section not in self.content: result = list() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = [part.strip() for part in parts if part.strip()] result += [joinpath('m4', '00gnulib.m4')] result += [joinpath('m4', 'zzgnulib.m4')] result += [joinpath('m4', 'gnulib-common.m4')] self.cache['files'] = list(result) return(list(self.cache['files'])) def getDependencies(self): '''GLModule.getDependencies() -> list Return list of dependencies. GLConfig: localdir.''' localdir = self.config['localdir'] result = list() section = 'Depends-on:' if 'dependencies' not in self.cache: if section not in self.content: depmodules = list() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] modules = ''.join(parts) modules = [line for line in modules.split( '\n') if line.strip()] modules = [ module for module in modules if not module.startswith('#')] for line in modules: split = [part for part in line.split(' ') if part.strip()] if len(split) == 1: module = line.strip() condition = None else: # if len(split) != 1 module = split[0] condition = split[1] if type(condition) is bytes: condition = condition.decode(ENCS['default']) result += [tuple([self.modulesystem.find(module), condition])] self.cache['dependencies'] = result return(list(self.cache['dependencies'])) def getAutoconfSnippet_Early(self): '''GLModule.getAutoconfSnippet_Early() -> string Return autoconf-early snippet.''' section = 'configure.ac-early:' if 'autoconf-early' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) self.cache['autoconf-early'] = result return(self.cache['autoconf-early']) def getAutoconfSnippet(self): '''GLModule.getAutoconfSnippet() -> string Return autoconf snippet.''' section = 'configure.ac:' if 'autoconf' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) self.cache['autoconf'] = result return(self.cache['autoconf']) def getAutomakeSnippet(self): '''getAutomakeSnippet() -> string Get automake snippet. GLConfig: auxdir, ac_version.''' result = string() # Define stack variable conditional = self.getAutomakeSnippet_Conditional() if conditional.strip(): result += self.getAutomakeSnippet_Conditional() else: # if not conditional.strip() result += '\n' result += self.getAutomakeSnippet_Unconditional() return(result) def getAutomakeSnippet_Conditional(self): '''GLModule.getAutomakeSnippet_Conditional() -> string Return conditional automake snippet.''' section = 'Makefile.am:' if 'makefile-conditional' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) self.cache['makefile-conditional'] = result return(self.cache['makefile-conditional']) def getAutomakeSnippet_Unconditional(self): '''GLModule.getAutomakeSnippet_Unconditional() -> string Return unconditional automake snippet. GLConfig: auxdir, ac_version.''' auxdir = self.config['auxdir'] ac_version = self.config['ac_version'] result = string() if 'makefile-unconditional' not in self.cache: if self.isTests(): files = self.getFiles() extra_files = filter_filelist(constants.NL, files, 'tests/', '', 'tests/', '').split(constants.NL) extra_files = sorted(set(extra_files)) if extra_files: result += string('EXTRA_DIST += %s' % ' '.join(extra_files)) result += constants.NL * 2 else: # if not tests module # TODO: unconditional automake snippet for nontests modules snippet = self.getAutomakeSnippet_Conditional() snippet = constants.combine_lines(snippet) pattern = compiler( '^lib_SOURCES[\t ]*\\+=[\t ]*(.*?)$', re.S | re.M) mentioned_files = pattern.findall(snippet) if mentioned_files != list(): mentioned_files = mentioned_files[-1].split(' ') mentioned_files = [f.strip() for f in mentioned_files] mentioned_files = [f for f in mentioned_files if f != ''] mentioned_files = sorted(set(mentioned_files)) all_files = self.getFiles() lib_files = filter_filelist(constants.NL, all_files, 'lib/', '', 'lib/', '').split(constants.NL) extra_files = [ f for f in lib_files if f not in mentioned_files] extra_files = sorted(set(extra_files)) if extra_files != [''] and extra_files: result += string('EXTRA_DIST += %s' % ' '.join(extra_files)) result += '\n\n' # Synthesize also an EXTRA_lib_SOURCES augmentation if str(self) != 'relocatable-prog-wrapper' and str(self) != 'pt_chown': extra_files = filter_filelist(constants.NL, extra_files, '', '.c', '', '').split(constants.NL) extra_files = sorted(set(extra_files)) if extra_files != ['']: result += string('EXTRA_lib_SOURCES += %s' % ' '.join(extra_files)) result += '\n\n' # Synthesize an EXTRA_DIST augmentation also for the files in build-aux buildaux_files = filter_filelist(constants.NL, all_files, 'build-aux/', '', 'build-aux/', '').split(constants.NL) buildaux_files = sorted(set(buildaux_files)) if buildaux_files != ['']: buildaux_files = ''.join(buildaux_files) buildaux_files = joinpath( '$(top_srcdir)', auxdir, buildaux_files) result += string('EXTRA_DIST += %s' % buildaux_files) result += '\n\n' # Synthesize an EXTRA_DIST augmentation also for the files from top/. top_files = filter_filelist(constants.NL, all_files, 'top/', '', 'top/', '').split(constants.NL) top_files = sorted(set(top_files)) if top_files != ['']: top_files = ''.join(top_files) top_files = joinpath('$(top_srcdir)', top_files) result += string('EXTRA_DIST += %s' % top_files) result += '\n\n' result = constants.nlconvert(result) self.cache['makefile-unconditional'] = result return(self.cache['makefile-unconditional']) def getInclude(self): '''GLModule.getInclude() -> string Return include directive.''' section = 'Include:' if 'include' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) result = result.strip() pattern = compiler('^(["<].*?[>"])', re.S | re.M) result = pattern.sub('#include \\1', result) self.cache['include'] = result return(self.cache['include']) def getLink(self): '''GLModule.getLink() -> string Return link directive.''' section = 'Link:' if 'link' not in self.cache: parts = list() if section in self.content: snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] parts = [part.strip() for part in parts if part.strip()] # result = ' '.join(parts) self.cache['link'] = parts return(self.cache['link']) def getLicense(self): '''GLModule.getLicense(self) -> string Get license and warn user if module lacks a license.''' license = self.getLicense_Raw() if not self.isTests(): if not license: if self.config['errors']: raise(GLError(18, string(self))) else: # if not self.config['errors'] sys.stderr.write('gnulib-tool: warning: ') sys.stderr.write('module %s lacks a license\n' % str(self)) if not license: license = 'GPL' return(license) def getLicense_Raw(self): '''GLModule.getLicense_Raw() -> string Return module license.''' section = 'License:' if 'license' not in self.cache: if section not in self.content: result = string() else: # if section in self.content pattern = '^%s[\t ]*(.*?)%s' % (section, self.regex) pattern = compiler(pattern, re.S | re.M) result = pattern.findall(self.content) if type(result) is list: if not result: result = string() else: # if result result = result[-1] result = result.strip() self.cache['license'] = result return(self.cache['license']) def getMaintainer(self): '''GLModule.getMaintainer() -> string Return maintainer directive.''' section = 'Maintainer:' if 'maintainer' not in self.cache: if section not in self.content: result = string() else: # if section in self.content snippet = self.content.split(section)[-1] snippet = snippet.replace('\r\n', '\n') lines = ['%s\n' % line for line in snippet.split('\n')] parts = list() for line in lines: regex = '^(Description|Comment|Status|Notice|Applicability|' regex += 'Files|Depends-on|configure\\.ac-early|configure\\.ac|' regex += 'Makefile\\.am|Include|Link|License|Maintainer):$' pattern = compiler(regex) findflag = pattern.findall(line) if findflag: break parts += [line] result = ''.join(parts) result = result.strip() self.cache['maintainer'] = result return(self.cache['maintainer']) #=============================================================================== # Define GLModuleTable class #=============================================================================== class GLModuleTable(object): '''GLModuleTable is used to work with the list of the modules.''' def __init__(self, config, avoids=list()): '''GLModuleTable.__init__(config, avoids) -> GLModuleTable Create new GLModuleTable instance. If modules are specified, then add every module from iterable as unconditional module. If avoids is specified, then in transitive_closure every dependency which is in avoids won't be included in the final modules list. If testflags iterable is enabled, then don't add module which status is in the testflags. If conddeps are enabled, then store condition for each dependency if it has a condition. The only necessary argument is localdir, which is needed just to create modulesystem instance to look for dependencies.''' self.avoids = list() # Avoids self.dependers = dict() # Dependencies self.conditionals = dict() # Conditional modules self.unconditionals = dict() # Unconditional modules self.base_modules = list() # Base modules self.main_modules = list() # Main modules self.tests_modules = list() # Tests modules self.final_modules = list() # Final modules if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) for avoid in avoids: if type(avoid) is not GLModule: raise(TypeError('each avoid must be a GLModule instance')) self.avoids += [avoids] self.config = config self.filesystem = GLFileSystem(self.config) self.modulesystem = GLModuleSystem(self.config) def __repr__(self): '''x.__repr__() <==> repr(x)''' result = '<pygnulib.GLModuleTable %s>' % hex(id(self)) return(result) def __getitem__(self, y): '''x.__getitem__(y) <==> x[y]''' if y in ['base', 'final', 'main', 'tests', 'avoids']: if y == 'base': return(self.getBaseModules()) elif y == 'final': return(self.getFinalModules()) elif y == 'main': return(self.getMainModules()) elif y == 'tests': return(self.getTestsModules()) else: # if y == 'avoids' return(self.getAvoids()) else: # if y is not in list raise(KeyError('GLModuleTable does not contain key: %s' % repr(y))) def addConditional(self, parent, module, condition): '''GLModuleTable.addConditional(module, condition) Add new conditional dependency from parent to module with condition.''' if type(parent) is not GLModule: raise(TypeError('parent must be a GLModule, not %s' % type(parent).__name__)) if type(module) is not GLModule: raise(TypeError('module must be a GLModule, not %s' % type(module).__name__)) if type(condition) is bytes or type(condition) is string \ or condition == True: if type(condition) is bytes: condition = condition.decode(ENCS['default']) else: # if condition has not bytes or string type or is not True raise(TypeError('condition must be a string or True, not %s' % type(condition).__name__)) if not str(module) in self.unconditionals: if str(module) not in self.dependers: self.dependers[module] = list() self.dependers[module] += [module] key = '%s---%s' % (str(parent), str(module)) self.conditionals[key] = condition def addUnconditional(self, module): '''GLModuleTable.addUnconditional(module) Add module as unconditional dependency.''' if type(module) is not GLModule: raise(TypeError('module must be a GLModule, not %s' % type(module).__name__)) if str(module) in self.dependers: self.dependers.pop(str(module)) self.unconditionals[str(module)] = True def isConditional(self, module): '''GLModuleTable.isConditional(module) -> bool Check whether module is unconditional.''' if type(module) is not GLModule: raise(TypeError('module must be a GLModule, not %s' % type(module).__name__)) result = str(module) in self.dependers return(result) def getCondition(self, parent, module): '''GLModuleTable.getCondition(module) -> string or True Return condition from parent to module. Condition can be string or True. If module is not in the list of conddeps, method returns None.''' if type(parent) is not GLModule: raise(TypeError('parent must be a GLModule, not %s' % type(parent).__name__)) if type(module) is not GLModule: raise(TypeError('module must be a GLModule, not %s' % type(module).__name__)) key = '%s---%s' % (str(parent), str(module)) result = None if key in self.conditionals: result = self.conditionals[key] return(result) def transitive_closure(self, modules): '''GLModuleTable.transitive_closure(modules) -> list Use transitive closure to add module and its dependencies. Add every module and its dependencies from modules list, but do not add dependencies which contain in avoids list. If any testflag is enabled, then do not add dependencies which have the status as this flag. If conddeps are enabled, then store condition for each dependency if it has a condition. This method is used to update final list of modules. Method returns list of modules. GLConfig: testflags.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) handledmodules = list() inmodules = modules outmodules = list() if self.config['conddeps']: for module in modules: self.addUnconditional(module) while inmodules: inmodules_this_round = inmodules inmodules = list() for module in inmodules_this_round: outmodules += [module] if self.config['conddeps']: automake_snippet = \ module.getAutomakeSnippet_Conditional() pattern = compiler('^if') if not pattern.findall(automake_snippet): self.addUnconditional(module) conditional = self.isConditional(module) dependencies = module.getDependencies() depmodules = [pair[0] for pair in dependencies] conditions = [pair[1] for pair in dependencies] if TESTS['tests'] in self.config['testflags']: testsname = module.getTestsName() if self.modulesystem.exists(testsname): testsmodule = self.modulesystem.find(testsname) depmodules += [testsmodule] conditions += [None] for depmodule in depmodules: include = True includes = list() status = depmodule.getStatus() for word in status: if word == 'obsolete': if TESTS['obsolete'] in self.config['testflags'] or \ TESTS['all-test'] in self.config['testflags']: includes += [False] elif word == 'c++-test': if TESTS['c++-test'] in self.config['testflags'] or \ TESTS['all-test'] in self.config['testflags']: includes += [False] elif word == 'longrunning-test': if TESTS['longrunning-test'] in self.config['testflags'] or \ TESTS['all-test'] in self.config['testflags']: includes += [False] elif word == 'privileged-test': if TESTS['privileged-test'] in self.config['testflags'] or \ TESTS['all-test'] in self.config['testflags']: includes += [False] elif word == 'all-test': if TESTS['all-test'] in self.config['testflags'] or \ TESTS['all-test'] in self.config['testflags']: includes += [False] else: # if any other word if word.endswith('-tests'): if TESTS['all-test'] in self.config['testflags']: includes += [False] include = any(includes) if include and depmodule not in self.avoids: inmodules += [depmodule] if self.config['conddeps']: index = depmodules.index(depmodule) condition = conditions[index] if condition: self.addConditional( module, depmodule, condition) else: # if condition if conditional: self.addConditional( module, depmodule, True) else: # if not conditional self.addUnconditional(module) listing = list() # Create empty list inmodules = sorted(set(inmodules)) handledmodules = sorted(set(handledmodules + inmodules_this_round)) inmodules = \ [ # Begin to filter inmodules module for module in inmodules if module not in handledmodules ] # Finish to filter inmodules inmodules = sorted(set(inmodules)) modules = sorted(set(outmodules)) self.modules = modules return(list(modules)) def transitive_closure_separately(self, basemodules, finalmodules): '''GLModuleTable.transitive_closure_separately(*args, **kwargs) -> tuple Determine main module list and tests-related module list separately. The main module list is the transitive closure of the specified modules, ignoring tests modules. Its lib/* sources go into $sourcebase/. If lgpl is specified, it will consist only of LGPLed source. The tests-related module list is the transitive closure of the specified modules, including tests modules, minus the main module list excluding modules of applicability 'all'. Its lib/* sources (brought in through dependencies of *-tests modules) go into $testsbase/. It may contain GPLed source, even if lgpl is specified. Arguments are basemodules and finalmodules, where basemodules argument represents modules specified by user and finalmodules represents modules list after previous transitive_closure. Method returns tuple which contains two lists: the list of main modules and the list of tests-related modules. Both lists contain dependencies. GLConfig: testflags.''' inctests = False main_modules = list() tests_modules = list() if TESTS['tests'] in self.config['testflags']: self.config['testflags'].pop(TESTS['tests']) inctests = True for module in basemodules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) for module in finalmodules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) main_modules = self.transitive_closure(basemodules) tests_modules = \ [m for m in finalmodules if m not in main_modules] + \ [m for m in main_modules if m.getApplicability() != 'main'] tests_modules = sorted(set(tests_modules)) if inctests: testflags = sorted( set(self.config['testflags'] + [TESTS['tests']])) self.config.setTestFlags(testflags) result = tuple([main_modules, tests_modules]) return(result) def add_dummy(self, modules): '''GLModuleTable.add_dummy(modules) -> list Add dummy package to list of modules if dummy package is needed. If not, return original list of modules. GLConfig: auxdir, ac_version.''' auxdir = self.config['auxdir'] ac_version = self.config['ac_version'] have_lib_sources = False for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) snippet = module.getAutomakeSnippet() snippet = constants.remove_backslash_newline(snippet) pattern = compiler( '^lib_SOURCES[\t ]*\\+=[\t ]*(.*?)$', re.S | re.M) files = pattern.findall(snippet) if files: # if source files were found files = files[-1].split(' ') for file in files: if not file.endswith('.h'): have_lib_sources = True break if not have_lib_sources: dummy = self.modulesystem.find('dummy') modules = sorted(set(modules + [dummy])) return(list(modules)) def filelist(self, modules): '''GLModuleTable.filelist(modules) -> list Determine the final file list for the given list of modules. The list of modules must already include dependencies. GLConfig: ac_version.''' ac_version = self.config['ac_version'] filelist = list() for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) listings = [module.getFiles() for module in modules] for listing in listings: for file in listing: if file not in filelist: filelist += [file] return(filelist) def filelist_separately(self, main_modules, tests_modules): '''GLModuleTable.filelist_separately(**kwargs) -> list Determine the final file lists. They must be computed separately, because files in lib/* go into $sourcebase/ if they are in the main file list but into $testsbase/ if they are in the tests-related file list. Furthermore lib/dummy.c can be in both.''' ac_version = self.config['ac_version'] main_filelist = self.filelist(main_modules) tests_filelist = self.filelist(tests_modules) tests_filelist = \ [ # Begin to sort filelist file.replace('lib/', 'tests=lib/', 1) \ if file.startswith('lib/') else file for file in tests_filelist ] # Finish to sort filelist result = tuple([main_filelist, tests_filelist]) return(result) def getAvoids(self): '''GLModuleTable.getAvoids() -> list Return list of avoids.''' return(list(self.avoids)) def setAvoids(self, modules): '''GLModuleTable.setAvoids(modules) Specify list of avoids.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) self.avoids = sorted(set(modules)) def getBaseModules(self): '''GLModuleTable.getBaseModules() -> list Return list of base modules.''' return(list(self.base_modules)) def setBaseModules(self, modules): '''GLModuleTable.setBaseModules(modules) Specify list of base modules.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) self.base_modules = sorted(set(modules)) def getFinalModules(self): '''GLModuleTable.getFinalModules() -> list Return list of final modules.''' return(list(self.final_modules)) def setFinalModules(self, modules): '''GLModuleTable.setFinalModules(modules) Specify list of final modules.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) self.final_modules = sorted(set(modules)) def getMainModules(self): '''GLModuleTable.getMainModules() -> list Return list of main modules.''' return(list(self.main_modules)) def setMainModules(self, modules): '''GLModuleTable.setMainModules(modules) Specify list of main modules.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) self.main_modules = sorted(set(modules)) def getTestsModules(self): '''GLModuleTable.getTestsModules() -> list Return list of tests modules.''' return(list(self.tests_modules)) def setTestsModules(self, modules): '''GLModuleTable.setTestsModules(modules) Specify list of tests modules.''' for module in modules: if type(module) is not GLModule: raise(TypeError('each module must be a GLModule instance')) self.tests_modules = sorted(set(modules)) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/GLTestDir.py�������������������������������������������������������0000664�0000000�0000000�00000132732�14110572173�0020313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 #=============================================================================== # Define global imports #=============================================================================== import os import re import sys import locale import codecs import shutil import filecmp import subprocess as sp from . import constants from .GLError import GLError from .GLConfig import GLConfig from .GLModuleSystem import GLModule from .GLModuleSystem import GLModuleTable from .GLModuleSystem import GLModuleSystem from .GLFileSystem import GLFileSystem from .GLFileSystem import GLFileAssistant from .GLMakefileTable import GLMakefileTable from .GLEmiter import GLEmiter #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ #=============================================================================== # Define global constants #=============================================================================== PYTHON3 = constants.PYTHON3 NoneType = type(None) APP = constants.APP DIRS = constants.DIRS ENCS = constants.ENCS UTILS = constants.UTILS MODES = constants.MODES TESTS = constants.TESTS compiler = constants.compiler joinpath = constants.joinpath cleaner = constants.cleaner relpath = constants.relativize string = constants.string isabs = os.path.isabs isdir = os.path.isdir isfile = os.path.isfile normpath = os.path.normpath #=============================================================================== # Define GLTestDir class #=============================================================================== class GLTestDir(object): '''GLTestDir class is used to create a scratch package with the given list of the modules.''' def __init__(self, config, testdir): '''GLTestDir.__init__(config, testdir) -> GLTestDir Create new GLTestDir instance.''' if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) if type(testdir) is bytes or type(testdir) is string: if type(testdir) is bytes: testdir = testdir.decode(ENCS['default']) self.config = config self.testdir = os.path.normpath(testdir) if not os.path.exists(self.testdir): try: # Try to create directory os.mkdir(self.testdir) except Exception as error: raise(GLError(19, self.testdir)) self.emiter = GLEmiter(self.config) self.filesystem = GLFileSystem(self.config) self.modulesystem = GLModuleSystem(self.config) self.moduletable = GLModuleTable(self.config) self.assistant = GLFileAssistant(self.config) self.makefiletable = GLMakefileTable(self.config) # Subdirectory names. self.config.setSourceBase('gllib') self.config.setM4Base('glm4') self.config.setDocBase('gldoc') self.config.setTestsBase('gltests') self.config.setMacroPrefix('gl') self.config.resetPoBase() self.config.resetPoDomain() self.config.resetWitnessCMacro() self.config.resetVCFiles() def rewrite_files(self, files): '''GLTestDir.rewrite_files(files) Replace auxdir, docbase, sourcebase, m4base and testsbase from default to their version from config.''' if type(files) is not list: raise(TypeError( 'files argument must has list type, not %s' % type(files).__name__)) files = \ [ # Begin to convert bytes to string file.decode(ENCS['default']) \ if type(file) is bytes else file \ for file in files ] # Finish to convert bytes to string for file in files: if type(file) is not string: raise(TypeError('each file must be a string instance')) files = sorted(set(files)) auxdir = self.config['auxdir'] docbase = self.config['docbase'] sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] testsbase = self.config['testsbase'] result = list() for file in files: if file.startswith('build-aux/'): path = constants.substart('build-aux/', '%s/' % auxdir, file) elif file.startswith('doc/'): path = constants.substart('doc/', '%s/' % docbase, file) elif file.startswith('lib/'): path = constants.substart('lib/', '%s/' % sourcebase, file) elif file.startswith('m4/'): path = constants.substart('m4/', '%s/' % m4base, file) elif file.startswith('tests/'): path = constants.substart('tests/', '%s/' % testsbase, file) elif file.startswith('tests=lib/'): path = constants.substart( 'tests=lib/', '%s/' % testsbase, file) elif file.startswith('top/'): path = constants.substart('top/', '', file) else: # file is not a special file path = file result += [os.path.normpath(path)] result = sorted(set(result)) return(list(result)) def execute(self): '''GLTestDir.execute() Create a scratch package with the given modules.''' localdir = self.config['localdir'] auxdir = self.config['auxdir'] testflags = list(self.config['testflags']) sourcebase = self.config['sourcebase'] m4base = self.config['m4base'] pobase = self.config['pobase'] docbase = self.config['docbase'] testsbase = self.config['testsbase'] libname = self.config['libname'] libtool = self.config['libtool'] witness_c_macro = self.config['witness_c_macro'] symbolic = self.config['symbolic'] lsymbolic = self.config['lsymbolic'] single_configure = self.config['single_configure'] include_guard_prefix = self.config['include_guard_prefix'] macro_prefix = self.config['macro_prefix'] verbose = self.config['verbosity'] base_modules = [self.modulesystem.find( m) for m in self.config['modules']] if not base_modules: base_modules = self.modulesystem.list() base_modules = [self.modulesystem.find(m) for m in base_modules] # All modules together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. # Except ftruncate, mountlist, which abort the configuration on mingw. # Except lib-ignore, which leads to link errors when Sun C++ is used. base_modules = sorted(set(base_modules)) base_modules = [module for module in base_modules if str(module) not in ['config-h', 'ftruncate', 'mountlist', 'lib-ignore']] # When computing transitive closures, don't consider $module to depend on # $module-tests. Need this because tests are implicitly GPL and may depend # on GPL modules - therefore we don't want a warning in this case. saved_testflags = list(self.config['testflags']) self.config.disableTestFlag(TESTS['tests']) for requested_module in base_modules: requested_licence = requested_module.getLicense() # Here we use self.moduletable.transitive_closure([module]), not just # module.getDependencies, so that we also detect weird situations like # an LGPL module which depends on a GPLed build tool module which depends # on a GPL module. if requested_licence != 'GPL': modules = self.moduletable.transitive_closure( [requested_module]) for module in modules: license = module.getLicense() errormsg = 'module %s depends on a module ' % requested_module errormsg += 'with an incompatible license: %s\n' % module if requested_licence == 'GPLv2+': if license not in ['GPLv2+', 'LGPLv2+']: sys.stderr.write(errormsg) elif requested_licence in ['LGPL']: if license not in ['LGPL', 'LGPLv2+']: sys.stderr.write(errormsg) elif requested_licence in ['LGPLv2+']: if license not in ['LGPLv2+']: sys.stderr.write(errormsg) self.config.setTestFlags(saved_testflags) # Determine final module list. modules = self.moduletable.transitive_closure(base_modules) final_modules = list(modules) # Show final module list. if verbose >= 0: bold_on = '' bold_off = '' term = os.getenv('TERM') if term == 'xterm': bold_on = '\x1b[1m' bold_off = '\x1b[0m' print('Module list with included dependencies (indented):') for module in final_modules: if str(module) in self.config.getModules(): print(' %s%s%s' % (bold_on, module, bold_off)) else: # if str(module) not in self.config.getModules() print(' %s' % module) # Generate lists of the modules. if single_configure: # Determine main module list and tests-related module list separately. main_modules, tests_modules = \ self.moduletable.transitive_closure_separately( base_modules, final_modules) # Print main_modules and tests_modules. if verbose >= 1: print('Main module list:') for module in main_modules: print(' %s' % str(module)) print('Tests-related module list:') for module in tests_modules: print(' %s' % str(module)) # Determine whether a $testsbase/libtests.a is needed. libtests = False for module in tests_modules: files = module.getFiles() for file in files: if file.startswith('lib/'): libtests = True break if libtests: self.config.enableLibtests() if single_configure: # Add dummy package if it is needed. main_modules = self.moduletable.add_dummy(main_modules) if 'dummy' in [str(module) for module in main_modules]: main_modules = [m for m in main_modules if str(m) != 'dummy'] dummy = self.modulesystem.find('dummy') main_modules = sorted(set(main_modules)) + [dummy] if libtests: # if we need to use libtests.a tests_modules = self.moduletable.add_dummy(tests_modules) if 'dummy' in [str(module) for module in tests_modules]: tests_modules = [ m for m in tests_modules if str(m) != 'dummy'] dummy = self.modulesystem.find('dummy') tests_modules = sorted(set(tests_modules)) + [dummy] else: # if not single_configure modules = self.moduletable.add_dummy(modules) if 'dummy' in [str(module) for module in modules]: modules = [m for m in modules if str(m) != 'dummy'] dummy = self.modulesystem.find('dummy') modules = sorted(set(modules)) + [dummy] # Show banner notice of every module. if single_configure: for module in main_modules: notice = module.getNotice() if notice: print('Notice from module %s:' % str(module)) pattern = compiler('^(.*?)$', re.S | re.M) notice = pattern.sub(' \\1', notice) print(notice) else: # if not single_configure for module in modules: notice = module.getNotice() if notice: print('Notice from module %s:' % str(module)) pattern = compiler('^(.*?)$', re.S | re.M) notice = pattern.sub(' \\1', notice) print(notice) # Determine final file list. if single_configure: main_filelist, tests_filelist = \ self.moduletable.filelist_separately( main_modules, tests_modules) filelist = sorted(set(main_filelist + tests_filelist)) else: # if not single_configure filelist = self.moduletable.filelist(modules) filelist = sorted(set(filelist)) # Print list of files. if verbose >= 0: print('File list:') for file in filelist: if file.startswith('tests=lib/'): rest = file[10:] print(' lib/%s -> tests/%s' % (rest, rest)) else: print(' %s' % file) # Add files for which the copy in gnulib is newer than the one that # "automake --add-missing --copy" would provide. filelist += ['build-aux/config.guess', 'build-aux/config.sub'] filelist = sorted(set(filelist)) # Create directories. directories = [os.path.dirname(file) for file in self.rewrite_files(filelist)] directories = sorted(set(directories)) # Copy files or make symbolic links. filetable = list() for src in filelist: dest = self.rewrite_files([src])[-1] filetable += [tuple([dest, src])] for row in filetable: src = row[1] dest = row[0] destpath = joinpath(self.testdir, dest) dirname = os.path.dirname(destpath) if not isdir(dirname): os.makedirs(dirname) if src.startswith('tests=lib/'): src = constants.substart('tests=lib/', 'lib/', src) lookedup, flag = self.filesystem.lookup(src) if isfile(destpath): os.remove(destpath) if flag: shutil.copy(lookedup, destpath) else: # if not flag if symbolic or (lsymbolic and lookedup == joinpath(localdir, src)): constants.link_relative(lookedup, destpath) else: shutil.copy(lookedup, destpath) # Create $sourcebase/Makefile.am. for_test = True directory = joinpath(self.testdir, sourcebase) if not isdir(directory): os.mkdir(directory) destfile = joinpath(directory, 'Makefile.am') if single_configure: emit, uses_subdirs = self.emiter.lib_Makefile_am(destfile, main_modules, self.moduletable, self.makefiletable, '', for_test) else: # if not single_configure emit, uses_subdirs = self.emiter.lib_Makefile_am(destfile, modules, self.moduletable, self.makefiletable, '', for_test) with codecs.open(destfile, 'wb', 'UTF-8') as file: file.write(emit) any_uses_subdirs = uses_subdirs # Create $m4base/Makefile.am. directory = joinpath(self.testdir, m4base) if not isdir(directory): os.mkdir(directory) destfile = joinpath(directory, 'Makefile.am') emit = string() emit += '## Process this file with automake to produce Makefile.in.\n\n' emit += 'EXTRA_DIST =\n' for file in filelist: if file.startswith('m4/'): file = constants.substart('m4/', '', file) emit += 'EXTRA_DIST += %s\n' % file emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) with codecs.open(destfile, 'wb', 'UTF-8') as file: file.write(emit) subdirs = [sourcebase, m4base] subdirs_with_configure_ac = list() testsbase_appened = False inctests = self.config.checkTestFlag(TESTS['tests']) if inctests: directory = joinpath(self.testdir, testsbase) if not isdir(directory): os.mkdir(directory) if single_configure: # Create $testsbase/Makefile.am. destfile = joinpath(directory, 'Makefile.am') print(repr(destfile)) witness_macro = '%stests_WITNESS' % macro_prefix emit, uses_subdirs = self.emiter.tests_Makefile_am(destfile, tests_modules, self.makefiletable, witness_macro, for_test) with codecs.open(destfile, 'wb', 'UTF-8') as file: file.write(emit) else: # if not single_configure # Create $testsbase/Makefile.am. destfile = joinpath(directory, 'Makefile.am') libtests = False self.config.disableLibtests() emit, uses_subdirs = self.emiter.tests_Makefile_am(destfile, modules, self.makefiletable, '', for_test) with codecs.open(destfile, 'wb', 'UTF-8') as file: file.write(emit) # Viewed from the $testsbase subdirectory, $auxdir is different. emit = string() saved_auxdir = self.config['auxdir'] testsbase = '%s/' % os.path.normpath(testsbase) counter = int() auxdir = string() finish = (len(testsbase.split('/')) - 1) while counter < finish: auxdir += '../' counter += 1 auxdir = os.path.normpath(joinpath(auxdir, saved_auxdir)) testsbase = os.path.normpath(testsbase) self.config.setAuxDir(auxdir) # Create $testsbase/configure.ac. emit += '# Process this file with autoconf ' emit += 'to produce a configure script.\n' emit += 'AC_INIT([dummy], [0])\n' emit += 'AC_CONFIG_AUX_DIR([%s])\n' % auxdir emit += 'AM_INIT_AUTOMAKE\n\n' emit += 'AC_CONFIG_HEADERS([config.h])\n\n' emit += 'AC_PROG_CC\n' emit += 'AC_PROG_INSTALL\n' emit += 'AC_PROG_MAKE_SET\n' emit += 'gl_PROG_AR_RANLIB\n\n' if uses_subdirs: emit += 'AM_PROG_CC_C_O\n\n' snippets = list() for module in modules: if str(module) in ['gnumakefile', 'maintainer-makefile']: # These are meant to be used only in the top-level directory. pass # if str(module) not in ['gnumakefile', 'maintainer-makefile'] else: snippet = module.getAutoconfSnippet_Early() lines = [line for line in snippet.split( '\n') if line.strip()] snippet = '\n'.join(lines) pattern = compiler( 'AC_REQUIRE\\(\\[([^()].*?)\\]\\)', re.S | re.M) snippet = pattern.sub('\\1', snippet) snippet = snippet.strip() snippets += [snippet] snippets = [snippet for snippet in snippets if snippet.strip()] emit += '%s\n' % '\n'.join(snippets) if libtool: emit += 'LT_INIT([win32-dll])\n' emit += 'LT_LANG([C++])\n' emit += 'AM_CONDITIONAL([GL_COND_LIBTOOL], [true])\n' emit += 'gl_cond_libtool=true\n' else: # if not libtool emit += 'AM_CONDITIONAL([GL_COND_LIBTOOL], [false])\n' emit += 'gl_cond_libtool=false\n' emit += 'gl_libdeps=\n' emit += 'gl_ltlibdeps=\n' # Wrap the set of autoconf snippets into an autoconf macro that is then # invoked. This is needed because autoconf does not support AC_REQUIRE # at the top level: # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an # AC_DEFUN'd macro # but we want the AC_REQUIRE to have its normal meaning (provide one # expansion of the required macro before the current point, and only # one expansion total). emit += 'AC_DEFUN([gl_INIT], [\n' replace_auxdir = True emit += "gl_m4_base='../%s'\n" % m4base emit += self.emiter.initmacro_start(macro_prefix) # We don't have explicit ordering constraints between the various # autoconf snippets. It's cleanest to put those of the library before # those of the tests. emit += "gl_source_base='../%s'\n" % sourcebase emit += self.emiter.autoconfSnippets(modules, self.moduletable, self.assistant, 1, False, False, False, replace_auxdir) emit += "gl_source_base='.'" emit += self.emiter.autoconfSnippets(modules, self.moduletable, self.assistant, 2, False, False, False, replace_auxdir) emit += self.emiter.initmacro_end(macro_prefix) # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the # dependencies. if not libtool: libname_upper = libname.upper().replace('-', '_') emit += ' %s_LIBDEPS="$gl_libdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LIBDEPS])\n' % libname_upper emit += ' %s_LTLIBDEPS="$gl_ltlibdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LTLIBDEPS])\n' % libname_upper emit += '])\n' # FIXME use $sourcebase or $testsbase? emit += self.emiter.initmacro_done(macro_prefix, sourcebase) emit += '\ngl_INIT\n\n' # Usually $testsbase/config.h will be a superset of config.h. Verify # this by "merging" config.h into $testsbase/config.h; look out for gcc # warnings. emit += 'AH_TOP([#include \"../config.h\"])\n\n' emit += 'AC_CONFIG_FILES([Makefile])\n' emit += 'AC_OUTPUT\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) path = joinpath(self.testdir, testsbase, 'configure.ac') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) # Restore changed variables. self.config.setAuxDir(saved_auxdir) auxdir = self.config['auxdir'] subdirs_with_configure_ac += [testsbase] subdirs += [testsbase] testsbase_appened = True # Create Makefile.am. emit = string() emit += '## Process this file with automake to produce Makefile.in.\n\n' emit += 'AUTOMAKE_OPTIONS = 1.9.6 foreign\n\n' emit += 'SUBDIRS = %s\n\n' % ' '.join(subdirs) emit += 'ACLOCAL_AMFLAGS = -I %s\n' % m4base emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) path = joinpath(self.testdir, 'Makefile.am') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) # Create configure.ac emit = string() emit += '# Process this file with autoconf ' emit += 'to produce a configure script.\n' emit += 'AC_INIT([dummy], [0])\n' if auxdir != '.': emit += 'AC_CONFIG_AUX_DIR([%s])\n' % auxdir emit += 'AM_INIT_AUTOMAKE\n\n' emit += 'AC_CONFIG_HEADERS([config.h])\n\n' emit += 'AC_PROG_CC\n' emit += 'AC_PROG_INSTALL\n' emit += 'AC_PROG_MAKE_SET\n\n' emit += '# For autobuild.\n' emit += 'AC_CANONICAL_BUILD\n' emit += 'AC_CANONICAL_HOST\n\n' emit += 'm4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace\n' emit += 'm4_pattern_allow([^gl_ES$])dnl a valid locale name\n' emit += 'm4_pattern_allow([^gl_LIBOBJS$])dnl a variable\n' emit += 'm4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable\n\n' emit += 'gl_PROG_AR_RANLIB\n\n' if any_uses_subdirs: emit += 'AM_PROG_CC_C_O\n' snippets = list() for module in final_modules: if single_configure: solution = True else: # if not single_configure solution = module.isNonTests() if solution: snippet = module.getAutoconfSnippet_Early() lines = [line for line in snippet.split('\n') if line.strip()] snippet = '\n'.join(lines) pattern = compiler( 'AC_REQUIRE\\(\\[([^()].*?)\\]\\)', re.S | re.M) snippet = pattern.sub('\\1', snippet) snippet = snippet.strip() snippets += [snippet] snippets = [snippet for snippet in snippets if snippet.strip()] emit += '%s\n' % '\n'.join(snippets) if libtool: emit += 'LT_INIT([win32-dll])\n' emit += 'LT_LANG([C++])\n' emit += 'AM_CONDITIONAL([GL_COND_LIBTOOL], [true])\n' emit += 'gl_cond_libtool=true\n' else: # if not libtool emit += 'AM_CONDITIONAL([GL_COND_LIBTOOL], [false])\n' emit += 'gl_cond_libtool=false\n' emit += 'gl_libdeps=\n' emit += 'gl_ltlibdeps=\n' # Wrap the set of autoconf snippets into an autoconf macro that is then # invoked. This is needed because autoconf does not support AC_REQUIRE # at the top level: # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an # AC_DEFUN'd macro # but we want the AC_REQUIRE to have its normal meaning (provide one # expansion of the required macro before the current point, and only one # expansion total). emit += 'AC_DEFUN([gl_INIT], [\n' if auxdir != 'build-aux': replace_auxdir = True else: # auxdir == 'build-aux' replace_auxdir = False emit += 'gl_m4_base=\'%s\'\n' % m4base emit += self.emiter.initmacro_start(macro_prefix) emit += 'gl_source_base=\'%s\'\n' % sourcebase if single_configure: emit += self.emiter.autoconfSnippets(main_modules, self.moduletable, self.assistant, 0, False, False, False, replace_auxdir) else: # if not single_configure emit += self.emiter.autoconfSnippets(modules, self.moduletable, self.assistant, 1, False, False, False, replace_auxdir) emit += self.emiter.initmacro_end(macro_prefix) if single_configure: emit += ' gltests_libdeps=\n' emit += ' gltests_ltlibdeps=\n' emit += self.emiter.initmacro_start('%stests' % macro_prefix) emit += ' gl_source_base=\'%s\'\n' % testsbase # Define a tests witness macro. emit += ' %stests_WITNESS=IN_GNULIB_TESTS\n' % macro_prefix emit += ' AC_SUBST([%stests_WITNESS])\n' % macro_prefix emit += ' gl_module_indicator_condition=$%stests_WITNESS\n' % \ macro_prefix emit += ' m4_pushdef([gl_MODULE_INDICATOR_CONDITION], ' emit += '[$gl_module_indicator_condition])\n' snippets = self.emiter.autoconfSnippets(tests_modules, self.moduletable, self.assistant, 1, True, False, False, replace_auxdir) emit += snippets.strip() emit += ' m4_popdef([gl_MODULE_INDICATOR_CONDITION])\n' emit += self.emiter.initmacro_end('%stests' % macro_prefix) # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is # created using libtool, because libtool already handles the dependencies. if not libtool: libname_upper = libname.upper().replace('-', '_') emit += ' %s_LIBDEPS="$gl_libdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LIBDEPS])\n' % libname_upper emit += ' %s_LTLIBDEPS="$gl_ltlibdeps"\n' % libname_upper emit += ' AC_SUBST([%s_LTLIBDEPS])\n' % libname_upper if single_configure and libtests: emit += ' LIBTESTS_LIBDEPS="$gltests_libdeps"\n' emit += ' AC_SUBST([LIBTESTS_LIBDEPS])\n' emit += '])\n' emit += self.emiter.initmacro_done(macro_prefix, sourcebase) if single_configure: emit += self.emiter.initmacro_done('%stests' % macro_prefix, testsbase) emit += '\ngl_INIT\n\n' if subdirs_with_configure_ac: if single_configure: emit += 'AC_CONFIG_SUBDIRS([%s])\n' % \ ' '.join(subdirs_with_configure_ac[:-1]) else: # if not single_configure emit += 'AC_CONFIG_SUBDIRS([%s])\n' % \ ' '.join(subdirs_with_configure_ac) makefiles = ['Makefile'] for directory in subdirs: # For subdirs that have a configure.ac by their own, it's the subdir's # configure.ac which creates the subdir's Makefile.am, not this one. makefiles += [joinpath(directory, 'Makefile')] if not single_configure: makefiles = makefiles[:-1] emit += 'AC_CONFIG_FILES([%s])\n' % ' '.join(makefiles) emit += 'AC_OUTPUT\n' path = joinpath(self.testdir, 'configure.ac') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) # Create autogenerated files. # Do not use "${AUTORECONF} --force --install", because it may invoke # autopoint, which brings in older versions of some of our .m4 files. os.chdir(self.testdir) # gettext if isfile(joinpath(m4base, 'gettext.m4')): args = [UTILS['autopoint'], '--force'] constants.execute(args, verbose) for src in os.listdir(m4base): src = joinpath(m4base, src) if src.endswith('.m4~'): dest = src[:-1] if isfile(dest): os.remove(dest) shutil.move(src, dest) # libtoolize if libtool: args = [UTILS['libtoolize'], '--copy'] constants.execute(args, verbose) # aclocal args = [UTILS['aclocal'], '-I', m4base] constants.execute(args, verbose) if not isdir('build-aux'): os.mkdir('build-aux') # autoconf args = [UTILS['autoconf']] constants.execute(args, verbose) # autoheader args = [UTILS['autoheader']] constants.execute(args, verbose) # automake args = [UTILS['automake'], '--add-missing', '--copy'] constants.execute(args, verbose) os.chdir(DIRS['cwd']) if inctests and not single_configure: # Do not use "${AUTORECONF} --force --install", because it may invoke # autopoint, which brings in older versions of some of our .m4 files. os.chdir(joinpath(self.testdir, testsbase)) # gettext if isfile(joinpath(m4base, 'gettext.m4')): args = [UTILS['autopoint'], '--force'] constants.execute(args, verbose) for src in os.listdir(m4base): src = joinpath(m4base, src) if src.endswith('.m4~'): dest = src[:-1] if isfile(dest): os.remove(dest) shutil.move(src, dest) # aclocal args = [UTILS['aclocal'], '-I', joinpath('..', m4base)] constants.execute(args, verbose) if not isdir(joinpath('../build-aux')): os.mkdir('../build-aux') # autoconf args = [UTILS['autoconf']] constants.execute(args, verbose) # autoheader args = [UTILS['autoheader']] constants.execute(args, verbose) # automake args = [UTILS['automake'], '--add-missing', '--copy'] constants.execute(args, verbose) os.chdir(DIRS['cwd']) # Need to run configure and make once, to create built files that are to be # distributed (such as parse-datetime.c). path = joinpath(self.testdir, sourcebase, 'Makefile.am') with codecs.open(path, 'rb', 'UTF-8') as file: snippet = file.read() snippet = constants.remove_backslash_newline(snippet) cleaned_files = list() tests_cleaned_files = list() built_sources = list() tests_built_sources = list() distributed_built_sources = list() tests_distributed_built_sources = list() # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...". regex_find = list() pattern = compiler('^CLEANFILES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) pattern = compiler('^MOSTLYCLEANFILES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) regex_find = [line.strip() for line in regex_find if line.strip()] for part in regex_find: cleaned_files += \ [line.strip() for line in part.split(' ') if line.strip()] # Extract the value of "BUILT_SOURCES += ...". Remove variable references # such $(FOO_H) because they don't refer to distributed files. regex_find = list() pattern = compiler('^BUILT_SOURCES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) regex_find = [line.strip() for line in regex_find if line.strip()] for part in regex_find: built_sources += \ [line.strip() for line in part.split(' ') if line.strip()] built_sources = [line for line in built_sources if not bool(compiler('[$]\\([A-Za-z0-9_]*\\)$').findall(line))] distributed_built_sources = [file for file in built_sources if file not in cleaned_files] if inctests: # Likewise for built files in the $testsbase directory. path = joinpath(self.testdir, testsbase, 'Makefile.am') with codecs.open(path, 'rb', 'UTF-8') as file: snippet = file.read() snippet = constants.remove_backslash_newline(snippet) # Extract the value of "CLEANFILES += ..." and "MOSTLYCLEANFILES += ...". regex_find = list() pattern = compiler('^CLEANFILES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) pattern = compiler( '^MOSTLYCLEANFILES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) regex_find = [line.strip() for line in regex_find if line.strip()] for part in regex_find: tests_cleaned_files += \ [line.strip() for line in part.split(' ') if line.strip()] # Extract the value of "BUILT_SOURCES += ...". Remove variable references # such $(FOO_H) because they don't refer to distributed files. regex_find = list() tests_built_sources = list() pattern = compiler('^BUILT_SOURCES[\t ]*\\+=(.*?)$', re.S | re.M) regex_find += pattern.findall(snippet) regex_find = [line.strip() for line in regex_find if line.strip()] for part in regex_find: tests_built_sources += \ [line.strip() for line in part.split(' ') if line.strip()] tests_built_sources = [line for line in tests_built_sources if not bool(compiler('[$]\\([A-Za-z0-9_]*\\)$').findall(line))] tests_distributed_built_sources = [file for file in tests_built_sources if file not in cleaned_files] if distributed_built_sources or tests_distributed_built_sources: os.chdir(self.testdir) sp.call('./configure') if distributed_built_sources: os.chdir(sourcebase) with codecs.open('Makefile', 'ab', 'UTF-8') as file: file.write('built_sources: $(BUILT_SOURCES)\n') args = [UTILS['make'], 'AUTOCONF=%s' % UTILS['autoconf'], 'AUTOHEADER=%s' % UTILS['autoheader'], 'ACLOCAL=%s' % UTILS['aclocal'], 'AUTOMAKE=%s' % UTILS['automake'], 'AUTORECONF=%s' % UTILS['autoreconf'], 'built_sources'] sp.call(args) os.chdir('..') if tests_distributed_built_sources: os.chdir(testsbase) with codecs.open('Makefile', 'ab', 'UTF-8') as file: file.write('built_sources: $(BUILT_SOURCES)\n') args = [UTILS['make'], 'AUTOCONF=%s' % UTILS['autoconf'], 'AUTOHEADER=%s' % UTILS['autoheader'], 'ACLOCAL=%s' % UTILS['aclocal'], 'AUTOMAKE=%s' % UTILS['automake'], 'AUTORECONF=%s' % UTILS['autoreconf'], 'built_sources'] sp.call(args) os.chdir('..') args = [UTILS['make'], 'AUTOCONF=%s' % UTILS['autoconf'], 'AUTOHEADER=%s' % UTILS['autoheader'], 'ACLOCAL=%s' % UTILS['aclocal'], 'AUTOMAKE=%s' % UTILS['automake'], 'AUTORECONF=%s' % UTILS['autoreconf'], 'AUTOPOINT=%s' % UTILS['autopoint'], 'LIBTOOLIZE=%s' % UTILS['libtoolize'], 'distclean'] sp.call(args) sp.call(['rm', '-rf', self.config['tempdir']], shell=False) #=============================================================================== # Define GLMegaTestDir class #=============================================================================== class GLMegaTestDir(object): '''GLMegaTestDir class is used to create a mega scratch package with the given modules one by one and all together.''' def __init__(self, config, megatestdir): '''GLMegaTestDir.__init__(config, megatestdir) -> GLMegaTestDir Create new GLTestDir instance.''' if type(config) is not GLConfig: raise(TypeError('config must be a GLConfig, not %s' % type(config).__name__)) if type(megatestdir) is bytes or type(megatestdir) is string: if type(megatestdir) is bytes: megatestdir = megatestdir.decode(ENCS['default']) self.config = config self.megatestdir = os.path.normpath(megatestdir) if not os.path.exists(self.megatestdir): try: # Try to create directory os.mkdir(self.megatestdir) except Exception as error: raise(GLError(19, self.megatestdir)) self.emiter = GLEmiter(self.config) self.filesystem = GLFileSystem(self.config) self.modulesystem = GLModuleSystem(self.config) self.moduletable = GLModuleTable(self.config) self.assistant = GLFileAssistant(self.config) self.makefiletable = GLMakefileTable(self.config) def execute(self): '''GLMegaTestDir.execute() Create a mega scratch package with the given modules one by one and all together.''' megasubdirs = list() modules = [self.modulesystem.find(m) for m in self.config['modules']] if not modules: modules = self.modulesystem.list() modules = [self.modulesystem.find(m) for m in modules] modules = sorted(set(modules)) # First, all modules one by one. for module in modules: self.config.setModules([str(module)]) #GLTestDir(self.config, self.megatestdir).execute() megasubdirs += [str(module)] # Then, all modules all together. # Except config-h, which breaks all modules which use HAVE_CONFIG_H. modules = [module for module in modules if str(module) != 'config-h'] self.config.setModules([str(module) for module in modules]) #GLTestDir(self.config, self.megatestdir).execute() megasubdirs += ['ALL'] # Create autobuild. emit = string() repdict = dict() repdict['Jan'] = repdict['January'] = '01' repdict['Feb'] = repdict['February'] = '02' repdict['Mar'] = repdict['March'] = '03' repdict['Apr'] = repdict['April'] = '04' repdict['May'] = repdict['May'] = '05' repdict['Jun'] = repdict['June'] = '06' repdict['Jul'] = repdict['July'] = '07' repdict['Aug'] = repdict['August'] = '08' repdict['Sep'] = repdict['September'] = '09' repdict['Oct'] = repdict['October'] = '10' repdict['Nov'] = repdict['November'] = '11' repdict['Dec'] = repdict['December'] = '12' vc_witness = joinpath(DIRS['root'], '.git', 'refs', 'heads', 'master') mdate_sh = joinpath(DIRS['root'], 'build-aux', 'mdate-sh') args = ['sh', mdate_sh, vc_witness] cvsdate = sp.check_output(args).decode("UTF-8").strip() for key in repdict: if len(key) > 3: cvsdate = cvsdate.replace(key, repdict[key]) for key in repdict: cvsdate = cvsdate.replace(key, repdict[key]) cvsdate = ''.join( [date for date in cvsdate.split(' ') if date.strip()]) cvsdate = '%s%s%s' % (cvsdate[4:], cvsdate[2:4], cvsdate[:2]) emit += '#!/bin/sh\n' emit += 'CVSDATE=%s\n' % cvsdate emit += ': ${MAKE=make}\n' emit += 'test -d logs || mkdir logs\n' emit += 'for module in %s; do\n' % ' '.join(megasubdirs) emit += ' echo "Working on module $module..."\n' emit += ' safemodule=`echo $module | sed -e \'s|/|-|g\'`\n' emit += ' (echo "To: gnulib@autobuild.josefsson.org"\\\n' emit += ' echo\n' emit += ' set -x\n' emit += ' : autobuild project... $module\n' emit += ' : autobuild revision... cvs-$CVSDATE-000000\n' emit += ' : autobuild timestamp... `date "+%Y%m%d-%H%M%S"`\n' emit += ' : autobuild hostname... `hostname`\n' emit += ' cd $module && ./configure $CONFIGURE_OPTIONS && $MAKE' emit += ' && $MAKE check && $MAKE distclean\n' emit += ' echo rc=$?\n' emit += ' ) 2>&1 | { if test -n "$AUTOBUILD_SUBST"; then ' emit += 'sed -e "$AUTOBUILD_SUBST"; else cat; fi; } > logs/$safemodule\n' emit += 'done\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) path = joinpath(self.megatestdir, 'do-autobuild') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) # Create Makefile.am. emit = string() emit += '## Process this file with automake to produce Makefile.in.\n\n' emit += 'AUTOMAKE_OPTIONS = 1.9.6 foreign\n\n' emit += 'SUBDIRS = %s\n\n' % ' '.join(megasubdirs) emit += 'EXTRA_DIST = do-autobuild\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) path = joinpath(self.megatestdir, 'Makefile.am') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) emit = string() emit += '# Process this file with autoconf ' emit += 'to produce a configure script.\n' emit += 'AC_INIT([dummy], [0])\n\n' if auxdir != '.': emit += 'AC_CONFIG_AUX_DIR([%s])\n' % auxdir emit += 'AM_INIT_AUTOMAKE\n\n' emit += 'AC_PROG_MAKE_SET\n\n' emit += 'AC_CONFIG_SUBDIRS([%s])\n' % ' '.megasubdirs emit += 'AC_CONFIG_FILES([Makefile])\n' emit += 'AC_OUTPUT\n' emit = constants.nlconvert(emit) if type(emit) is bytes: emit = emit.decode(ENCS['default']) path = joinpath(self.megatestdir, 'Makefile.am') with codecs.open(path, 'wb', 'UTF-8') as file: file.write(emit) # Create autogenerated files. os.chdir(DIRS['cwd']) args = [UTILS['aclocal']] constants.execute(args, verbose) try: # Try to make a directory if not isdir('build-aux'): os, mkdir('build-aux') except Exception as error: pass args = [UTILS['autoconf']] constants.execute(args, verbose) args = [UTILS['automake'], '--add-missing', '--copy'] constants.execute(args, verbose) sp.call(['rm', '-rf', self.config['tempdir']], shell=False) ��������������������������������������gnulib-20210822~d383792/pygnulib/__init__.py��������������������������������������������������������0000664�0000000�0000000�00000002200�14110572173�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������'''Gnulib - The GNU Portability Library GNU software has a well-deserved reputation for running on many different types of systems. While our primary goal is to write software for the GNU system, many users and developers have been introduced to us through the systems that they were already using. Gnulib is a central location for common GNU code, intended to be shared among GNU packages. GCC has libiberty, but this is hard to disentangle from the GCC build tree. Gnulib takes a different approach. Its components are intended to be shared at the source level, rather than being a library that gets built, installed, and linked against. Thus, there is no distribution tarball; the idea is to copy files from Gnulib into your own source tree. Gnulib also includes copies of a few files purely for convenience: the GNU coding standards, the GNU maintainer information, the GPL and other licenses (in Texinfo), assorted configuration scripts, and more. The goal is to provide all the common infrastructure needed by GNU packages.''' __copyright__ = '2012-2017 Free Software Foundation, Inc.' __author__ = 'Dmitriy Selyutin' __license__ = 'GNU GPLv3+' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/classes.py���������������������������������������������������������0000664�0000000�0000000�00000004223�14110572173�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 '''An easy access to pygnulib classes.''' #=============================================================================== # Define global imports #=============================================================================== __all__ = list() try: # Constants from . import constants # Main classes from .GLConfig import GLConfig from .GLError import GLError from .GLInfo import GLInfo # File system from .GLFileSystem import GLFileSystem from .GLFileSystem import GLFileAssistant # Module system from .GLModuleSystem import GLModule from .GLModuleSystem import GLModuleSystem from .GLModuleSystem import GLModuleTable # Different modes from .GLImport import GLImport from .GLEmiter import GLEmiter from .GLTestDir import GLTestDir from .GLTestDir import GLMegaTestDir # Other modules from .GLMakefileTable import GLMakefileTable except ValueError as error: # Constants import constants # Main classes from GLConfig import GLConfig from GLError import GLError from GLInfo import GLInfo # File system from GLFileSystem import GLFileSystem from GLFileSystem import GLFileAssistant # Module system from GLModuleSystem import GLModule from GLModuleSystem import GLModuleSystem from GLModuleSystem import GLModuleTable # Different modes from GLImport import GLImport from GLEmiter import GLEmiter from GLTestDir import GLTestDir from GLTestDir import GLMegaTestDir # Other modules from GLMakefileTable import GLMakefileTable # Append modules to namespace. __all__ += ['GLConfig', 'GLError', 'GLInfo'] __all__ += ['GLFileSystem', 'GLFileAssistant'] __all__ += ['GLModule', 'GLModuleSystem', 'GLModuleTable'] __all__ += ['GLImport', 'GLEmiter', 'GLTestDir'] __all__ += ['GLMakefileTable'] #=============================================================================== # Define module information #=============================================================================== __author__ = constants.__author__ __license__ = constants.__license__ __copyright__ = constants.__copyright__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/pygnulib/constants.py�������������������������������������������������������0000664�0000000�0000000�00000037357�14110572173�0020535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # encoding: UTF-8 '''An easy access to pygnulib constants.''' from __future__ import unicode_literals #=============================================================================== # Define global imports #=============================================================================== import re import os import sys import platform import tempfile import subprocess as sp #=============================================================================== # Define module information #=============================================================================== __all__ = list() __author__ = \ [ 'Bruno Haible', 'Paul Eggert', 'Simon Josefsson', 'Dmitriy Selyutin', ] __license__ = 'GNU GPLv3+' __copyright__ = '2002-2017 Free Software Foundation, Inc.' #=============================================================================== # Backward compatibility #=============================================================================== # Check for Python version if sys.version_info.major == 2: PYTHON3 = False else: PYTHON3 = True # Create string compatibility if not PYTHON3: string = unicode else: # if PYTHON3 string = str # Current working directory if not PYTHON3: os.getcwdb = os.getcwd os.getcwd = os.getcwdu #=============================================================================== # Define global constants #=============================================================================== # Declare necessary variables APP = dict() # Application DIRS = dict() # Directories UTILS = dict() # Utilities ENCS = dict() # Encodings MODES = dict() # Modes TESTS = dict() # Tests NL = ''' ''' # Newline character ALPHANUMERIC = 'abcdefghijklmnopqrstuvwxyz\ ABCDEFGHIJKLMNOPQRSTUVWXYZ\ 0123456789' # Alphanumeric characters # Set ENCS dictionary import __main__ as interpreter if not hasattr(interpreter, '__file__'): if sys.stdout.encoding != None: ENCS['default'] = sys.stdout.encoding else: # sys.stdout.encoding == None ENCS['default'] = 'UTF-8' else: # if hasattr(interpreter, '__file__'): ENCS['default'] = 'UTF-8' ENCS['system'] = sys.getfilesystemencoding() ENCS['shell'] = sys.stdout.encoding if ENCS['shell'] == None: ENCS['shell'] = 'UTF-8' # Set APP dictionary APP['name'] = sys.argv[0] if not APP['name']: APP['name'] = 'gnulib-tool.py' APP['path'] = os.path.realpath(sys.argv[0]) if type(APP['name']) is bytes: APP['name'] = string(APP['name'], ENCS['system']) if type(APP['path']) is bytes: APP['path'] = string(APP['path'], ENCS['system']) # Set DIRS dictionary DIRS['root'] = os.path.dirname(APP['path']) DIRS['cwd'] = os.getcwd() DIRS['build-aux'] = os.path.join(DIRS['root'], 'build-aux') DIRS['config'] = os.path.join(DIRS['root'], 'config') DIRS['doc'] = os.path.join(DIRS['root'], 'doc') DIRS['lib'] = os.path.join(DIRS['root'], 'lib') DIRS['m4'] = os.path.join(DIRS['root'], 'm4') DIRS['modules'] = os.path.join(DIRS['root'], 'modules') DIRS['tests'] = os.path.join(DIRS['root'], 'tests') DIRS['git'] = os.path.join(DIRS['root'], '.git') DIRS['cvs'] = os.path.join(DIRS['root'], 'CVS') # Set MODES dictionary MODES = \ { 'import': 0, 'add-import': 1, 'remove-import': 2, 'update': 3, } MODES['verbose-min'] = -2 MODES['verbose-default'] = 0 MODES['verbose-max'] = 2 # Set TESTS dictionary TESTS = \ { 'tests': 0, 'obsolete': 1, 'c++-test': 2, 'cxx-test': 2, 'c++-tests': 2, 'cxx-tests': 2, 'longrunning-test': 3, 'longrunning-tests': 3, 'privileged-test': 4, 'privileged-tests': 4, 'unportable-test': 5, 'unportable-tests': 5, 'all-test': 6, 'all-tests': 6, } # Define AUTOCONF minimum version DEFAULT_AUTOCONF_MINVERSION = 2.59 # You can set AUTOCONFPATH to empty if autoconf 2.57 is already in your PATH AUTOCONFPATH = '' # You can set AUTOMAKEPATH to empty if automake 1.9.x is already in your PATH AUTOMAKEPATH = '' # You can set GETTEXTPATH to empty if autopoint 0.15 is already in your PATH GETTEXTPATH = '' # You can set LIBTOOLPATH to empty if libtoolize 2.x is already in your PATH LIBTOOLPATH = '' # You can also set the variable AUTOCONF individually if AUTOCONFPATH: UTILS['autoconf'] = AUTOCONFPATH + 'autoconf' else: if os.getenv('AUTOCONF'): UTILS['autoconf'] = os.getenv('AUTOCONF') else: UTILS['autoconf'] = 'autoconf' # You can also set the variable AUTORECONF individually if AUTOCONFPATH: UTILS['autoreconf'] = AUTOCONFPATH + 'autoreconf' else: if os.getenv('AUTORECONF'): UTILS['autoreconf'] = os.getenv('AUTORECONF') else: UTILS['autoreconf'] = 'autoreconf' # You can also set the variable AUTOHEADER individually if AUTOCONFPATH: UTILS['autoheader'] = AUTOCONFPATH + 'autoheader' else: if os.getenv('AUTOHEADER'): UTILS['autoheader'] = os.getenv('AUTOHEADER') else: UTILS['autoheader'] = 'autoheader' # You can also set the variable AUTOMAKE individually if AUTOMAKEPATH: UTILS['automake'] = AUTOMAKEPATH + 'automake' else: if os.getenv('AUTOMAKE'): UTILS['automake'] = os.getenv('AUTOMAKE') else: UTILS['automake'] = 'automake' # You can also set the variable ACLOCAL individually if AUTOMAKEPATH: UTILS['aclocal'] = AUTOMAKEPATH + 'aclocal' else: if os.getenv('ACLOCAL'): UTILS['aclocal'] = os.getenv('ACLOCAL') else: UTILS['aclocal'] = 'aclocal' # You can also set the variable AUTOPOINT individually if GETTEXTPATH: UTILS['autopoint'] = GETTEXTPATH + 'autopoint' else: if os.getenv('AUTOPOINT'): UTILS['autopoint'] = os.getenv('AUTOPOINT') else: UTILS['autopoint'] = 'autopoint' # You can also set the variable LIBTOOLIZE individually if LIBTOOLPATH: UTILS['libtoolize'] = LIBTOOLPATH + 'libtoolize' else: if os.getenv('LIBTOOLIZE'): UTILS['libtoolize'] = os.getenv('LIBTOOLIZE') else: UTILS['libtoolize'] = 'libtoolize' # You can also set the variable MAKE if os.getenv('MAKE'): UTILS['make'] = os.getenv('MAKE') else: UTILS['make'] = 'make' #=============================================================================== # Define global functions #=============================================================================== def execute(args, verbose): '''Execute the given shell command.''' if verbose >= 0: print("executing %s" % ' '.join(args)) try: # Try to run retcode = sp.call(args) except Exception as error: print(error) sys.exit(1) else: # Commands like automake produce output to stderr even when they succeed. # Turn this output off if the command succeeds. temp = tempfile.mktemp() if type(temp) is bytes: temp = temp.decode(ENCS['system']) xargs = '%s > %s 2>&1' % (' '.join(args), temp) try: # Try to run retcode = sp.call(xargs, shell=True) except Exception as error: print(error) sys.exit(1) if retcode == 0: os.remove(temp) else: print("executing %s" % ' '.join(args)) with codecs.open(temp, 'rb') as file: cmdout = file.read() print(cmdout) os.remove(temp) sys.exit(retcode) def compiler(pattern, flags=0): '''Compile regex pattern depending on version of Python.''' if not PYTHON3: pattern = re.compile(pattern, re.UNICODE | flags) else: # if PYTHON3 pattern = re.compile(pattern, flags) return(pattern) def cleaner(sequence): '''Clean string or list of strings after using regex.''' if type(sequence) is string: sequence = sequence.replace('[', '') sequence = sequence.replace(']', '') elif type(sequence) is list: sequence = [value.replace('[', '').replace(']', '') for value in sequence] sequence = [value.replace('(', '').replace(')', '') for value in sequence] sequence = [False if value == 'false' else value for value in sequence] sequence = [True if value == 'true' else value for value in sequence] sequence = [value.strip() for value in sequence] return(sequence) def joinpath(head, *tail): '''joinpath(head, *tail) -> string Join two or more pathname components, inserting '/' as needed. If any component is an absolute path, all previous path components will be discarded. The second argument may be string or list of strings.''' newtail = list() if type(head) is bytes: head = head.decode(ENCS['default']) for item in tail: if type(item) is bytes: item = item.decode(ENCS['default']) newtail += [item] result = os.path.normpath(os.path.join(head, *tail)) if type(result) is bytes: result = result.decode(ENCS['default']) return(result) def relativize(dir1, dir2): '''Compute a relative pathname reldir such that dir1/reldir = dir2.''' dir0 = os.getcwd() if type(dir1) is bytes: dir1 = dir1.decode(ENCS['default']) if type(dir2) is bytes: dir2 = dir2.decode(ENCS['default']) while dir1: dir1 = '%s%s' % (os.path.normpath(dir1), os.path.sep) dir2 = '%s%s' % (os.path.normpath(dir2), os.path.sep) if dir1.startswith(os.path.sep): first = dir1[:dir1.find(os.path.sep, 1)] else: # if not dir1.startswith('/') first = dir1[:dir1.find(os.path.sep)] if first != '.': if first == '..': dir2 = os.path.basename(joinpath(dir0, dir2)) dir0 = os.path.dirname(dir0) else: # if first != '..' # Get first component of dir2 if dir2.startswith(os.path.sep): first2 = dir2[:dir2.find(os.path.sep, 1)] else: # if not dir1.startswith('/') first2 = dir2[:dir2.find(os.path.sep)] if first == first2: dir2 = dir2[dir2.find(os.path.sep) + 1:] else: # if first != first2 dir2 = joinpath('..', dir2) dir0 = joinpath(dir0, first) dir1 = dir1[dir1.find(os.path.sep) + 1:] result = os.path.normpath(dir2) return(result) def link_relative(src, dest): '''Like ln -s, except that src is given relative to the current directory (or absolute), not given relative to the directory of dest.''' if type(src) is bytes or type(src) is string: if type(src) is bytes: src = src.decode(ENCS['default']) else: # if src has not bytes or string type raise(TypeError( 'src must be a string, not %s' % (type(src).__name__))) if type(dest) is bytes or type(dest) is string: if type(dest) is bytes: dest = dest.decode(ENCS['default']) else: # if dest has not bytes or string type raise(TypeError( 'dest must be a string, not %s' % (type(dest).__name__))) if src.startswith('/') or (len(src) >= 2 and src[1] == ':'): os.symlink(src, dest) else: # if src is not absolute if dest.startswith('/') or (len(dest) >= 2 and dest[1] == ':'): if not constants.PYTHON3: cwd = os.getcwdu() else: # if constants.PYTHON3 cwd = os.getcwd() os.symlink(joinpath(cwd, src), dest) else: # if dest is not absolute destdir = os.path.dirname(dest) if not destdir: destdir = '.' if type(destdir) is bytes: destdir = destdir.decode(ENCS['default']) src = relativize(destdir, src) os.symlink(src, dest) def link_if_changed(src, dest): '''Create a symlink, but avoids munging timestamps if the link is correct.''' if type(src) is bytes: src = src.decode(ENCS['default']) if type(dest) is bytes: dest = dest.decode(ENCS['default']) ln_target = os.path.realpath(src) if not (os.path.islink(dest) and src == ln_target): os.remove(dest) link_relative(src, dest) def filter_filelist(separator, filelist, prefix, suffix, removed_prefix, removed_suffix, added_prefix=string(), added_suffix=string()): '''filter_filelist(*args) -> list Filter the given list of files. Filtering: Only the elements starting with prefix and ending with suffix are considered. Processing: removed_prefix and removed_suffix are removed from each element, added_prefix and added_suffix are added to each element.''' listing = list() for filename in filelist: if filename.startswith(prefix) and filename.endswith(suffix): pattern = compiler('^%s(.*?)%s$' % (removed_prefix, removed_suffix)) result = pattern.sub('%s\\1%s' % (added_prefix, added_suffix), filename) listing += [result] result = separator.join(listing) return(result) def substart(orig, repl, data): '''Replaces the start portion of a string. Returns data with orig replaced by repl, but only at the beginning of data. Like data.replace(orig,repl), except only at the beginning of data.''' result = data if data.startswith(orig): result = repl + data[len(orig):] return(result) def subend(orig, repl, data): '''Replaces the end portion of a string. Returns data with orig replaced by repl, but only at the end of data. Like data.replace(orig,repl), except only at the end of data.''' result = data if data.endswith(orig): result = data[:-len(orig)] + repl return(result) def nlconvert(text): '''Convert line-endings to specific for this platform.''' system = platform.system().lower() text = text.replace('\r\n', '\n') if system == 'windows': text = text.replace('\n', '\r\n') return(text) def nlremove(text): '''Remove empty lines from the source text.''' text = nlconvert(text) text = text.replace('\r\n', '\n') lines = [line for line in text.split('\n') if line != ''] text = '\n'.join(lines) text = nlconvert(text) return(text) def remove_backslash_newline(text): '''Given a multiline string text, join lines: When a line ends in a backslash, remove the backslash and join the next line to it.''' return text.replace('\\\n', '') def combine_lines(text): '''Given a multiline string text, join lines by spaces: When a line ends in a backslash, remove the backslash and join the next line to it, inserting a space between them.''' return text.replace('\\\n', ' ') def combine_lines_matching(pattern, text): '''Given a multiline string text, join lines by spaces, when the first such line matches a given RegexObject pattern. When a line that matches the pattern ends in a backslash, remove the backslash and join the next line to it, inserting a space between them. When a line that is the result of such a join ends in a backslash, proceed likewise.''' outerpos = 0 match = pattern.search(text, outerpos) while match: (startpos, pos) = match.span() # Look how far the continuation lines extend. pos = text.find('\n',pos) while pos > 0 and text[pos-1] == '\\': pos = text.find('\n',pos+1) if pos < 0: pos = len(text) # Perform a combine_lines throughout the continuation lines. partdone = text[:startpos] + combine_lines(text[startpos:pos]) outerpos = len(partdone) text = partdone + text[pos:] # Next round. match = pattern.search(text, outerpos) return text __all__ += ['APP', 'DIRS', 'MODES', 'UTILS'] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0015441�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/altstack-util.h�������������������������������������������������������0000664�0000000�0000000�00000004356�14110572173�0020403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some auxiliary stuff for defining an alternate stack. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 2 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 Eric Blake and Bruno Haible. */ #include <stdint.h> /* uintptr_t */ #include <string.h> /* for memset */ #define MYSTACK_SIZE (1 << 24) /* glibc says: Users should use SIGSTKSZ as the size of user-supplied buffers. We want to detect stack overflow of the alternate stack in a nicer manner than just crashing, so we overallocate in comparison to what we hand libsigsegv. Also, we intentionally hand an unaligned pointer, to ensure the alternate stack still ends up aligned. */ #define MYSTACK_CRUMPLE_ZONE 8192 static char mystack_storage[MYSTACK_SIZE + 2 * MYSTACK_CRUMPLE_ZONE + 31]; static char *mystack; /* MYSTACK_SIZE bytes in the middle of storage. */ static void prepare_alternate_stack (void) { #ifdef SIGSTKSZ if (MYSTACK_SIZE < SIGSTKSZ) { size_t size = SIGSTKSZ; printf ("SIGSTKSZ=%zu exceeds MYSTACK_SIZE=%d\n", size, MYSTACK_SIZE); exit (1); } #endif memset (mystack_storage, 's', sizeof mystack_storage); mystack = (char *) ((uintptr_t) (mystack_storage + MYSTACK_CRUMPLE_ZONE) | 31); } static void check_alternate_stack_no_overflow (void) { unsigned int i; for (i = MYSTACK_CRUMPLE_ZONE; i > 0; i--) if (*(mystack - i) != 's') { printf ("Alternate stack was exceeded by %u bytes!!\n", i); exit (1); } for (i = MYSTACK_CRUMPLE_ZONE; i > 0; i--) if (*(mystack + MYSTACK_SIZE - 1 + i) != 's') { printf ("Alternate stack was exceeded by %u bytes!!\n", i); exit (1); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/atomic-int-gnulib.h���������������������������������������������������0000664�0000000�0000000�00000011332�14110572173�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Atomic integers. Useful for testing multithreaded locking primitives. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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/>. */ /* Whether to use 'volatile' on some variables that communicate information between threads. If set to 0, a semaphore or a lock is used to protect these variables. If set to 1, 'volatile' is used; this is theoretically equivalent but can lead to much slower execution (e.g. 30x slower total run time on a 40-core machine), because 'volatile' does not imply any synchronization/communication between different CPUs. */ #define USE_VOLATILE 0 #if USE_POSIX_THREADS && HAVE_SEMAPHORE_H /* Whether to use a semaphore to communicate information between threads. If set to 0, a lock is used. If set to 1, a semaphore is used. Uncomment this to reduce the dependencies of this test. */ # define USE_SEMAPHORE 1 /* Mac OS X provides only named semaphores (sem_open); its facility for unnamed semaphores (sem_init) does not work. */ # if defined __APPLE__ && defined __MACH__ # define USE_NAMED_SEMAPHORE 1 # else # define USE_UNNAMED_SEMAPHORE 1 # endif #endif #if USE_SEMAPHORE # include <errno.h> # include <fcntl.h> # include <semaphore.h> # include <unistd.h> #endif #if USE_VOLATILE struct atomic_int { volatile int value; }; static void init_atomic_int (struct atomic_int *ai) { } static int get_atomic_int_value (struct atomic_int *ai) { return ai->value; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ai->value = new_value; } #elif USE_SEMAPHORE /* This atomic_int implementation can only support the values 0 and 1. It is initially 0 and can be set to 1 only once. */ # if USE_UNNAMED_SEMAPHORE struct atomic_int { sem_t semaphore; }; #define atomic_int_semaphore(ai) (&(ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_init (&ai->semaphore, 0, 0); } # endif # if USE_NAMED_SEMAPHORE struct atomic_int { sem_t *semaphore; }; #define atomic_int_semaphore(ai) ((ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_t *s; unsigned int count; for (count = 0; ; count++) { char name[80]; /* Use getpid() in the name, so that different processes running at the same time will not interfere. Use ai in the name, so that different atomic_int in the same process will not interfere. Use a count in the name, so that even in the (unlikely) case that a semaphore with the specified name already exists, we can try a different name. */ sprintf (name, "test-lock-%lu-%p-%u", (unsigned long) getpid (), ai, count); s = sem_open (name, O_CREAT | O_EXCL, 0600, 0); if (s == SEM_FAILED) { if (errno == EEXIST) /* Retry with a different name. */ continue; else { perror ("sem_open failed"); abort (); } } else { /* Try not to leave a semaphore hanging around on the file system eternally, if we can avoid it. */ sem_unlink (name); break; } } ai->semaphore = s; } # endif static int get_atomic_int_value (struct atomic_int *ai) { if (sem_trywait (atomic_int_semaphore (ai)) == 0) { if (sem_post (atomic_int_semaphore (ai))) abort (); return 1; } else if (errno == EAGAIN) return 0; else abort (); } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { if (new_value == 0) /* It's already initialized with 0. */ return; /* To set the value 1: */ if (sem_post (atomic_int_semaphore (ai))) abort (); } #else struct atomic_int { gl_lock_define (, lock) int value; }; static void init_atomic_int (struct atomic_int *ai) { gl_lock_init (ai->lock); } static int get_atomic_int_value (struct atomic_int *ai) { gl_lock_lock (ai->lock); int ret = ai->value; gl_lock_unlock (ai->lock); return ret; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { gl_lock_lock (ai->lock); ai->value = new_value; gl_lock_unlock (ai->lock); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/atomic-int-isoc.h�����������������������������������������������������0000664�0000000�0000000�00000011507�14110572173�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Atomic integers. Useful for testing multithreaded locking primitives. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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/>. */ /* Whether to use 'volatile' on some variables that communicate information between threads. If set to 0, a semaphore or a lock is used to protect these variables. If set to 1, 'volatile' is used; this is theoretically equivalent but can lead to much slower execution (e.g. 30x slower total run time on a 40-core machine), because 'volatile' does not imply any synchronization/communication between different CPUs. */ #define USE_VOLATILE 0 #if USE_POSIX_THREADS && HAVE_SEMAPHORE_H /* Whether to use a semaphore to communicate information between threads. If set to 0, a lock is used. If set to 1, a semaphore is used. Uncomment this to reduce the dependencies of this test. */ # define USE_SEMAPHORE 1 /* Mac OS X provides only named semaphores (sem_open); its facility for unnamed semaphores (sem_init) does not work. */ # if defined __APPLE__ && defined __MACH__ # define USE_NAMED_SEMAPHORE 1 # else # define USE_UNNAMED_SEMAPHORE 1 # endif #endif #if USE_SEMAPHORE # include <errno.h> # include <fcntl.h> # include <semaphore.h> # include <unistd.h> #endif #if USE_VOLATILE struct atomic_int { volatile int value; }; static void init_atomic_int (struct atomic_int *ai) { } static int get_atomic_int_value (struct atomic_int *ai) { return ai->value; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ai->value = new_value; } #elif USE_SEMAPHORE /* This atomic_int implementation can only support the values 0 and 1. It is initially 0 and can be set to 1 only once. */ # if USE_UNNAMED_SEMAPHORE struct atomic_int { sem_t semaphore; }; #define atomic_int_semaphore(ai) (&(ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_init (&ai->semaphore, 0, 0); } # endif # if USE_NAMED_SEMAPHORE struct atomic_int { sem_t *semaphore; }; #define atomic_int_semaphore(ai) ((ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_t *s; unsigned int count; for (count = 0; ; count++) { char name[80]; /* Use getpid() in the name, so that different processes running at the same time will not interfere. Use ai in the name, so that different atomic_int in the same process will not interfere. Use a count in the name, so that even in the (unlikely) case that a semaphore with the specified name already exists, we can try a different name. */ sprintf (name, "test-lock-%lu-%p-%u", (unsigned long) getpid (), ai, count); s = sem_open (name, O_CREAT | O_EXCL, 0600, 0); if (s == SEM_FAILED) { if (errno == EEXIST) /* Retry with a different name. */ continue; else { perror ("sem_open failed"); abort (); } } else { /* Try not to leave a semaphore hanging around on the file system eternally, if we can avoid it. */ sem_unlink (name); break; } } ai->semaphore = s; } # endif static int get_atomic_int_value (struct atomic_int *ai) { if (sem_trywait (atomic_int_semaphore (ai)) == 0) { if (sem_post (atomic_int_semaphore (ai))) abort (); return 1; } else if (errno == EAGAIN) return 0; else abort (); } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { if (new_value == 0) /* It's already initialized with 0. */ return; /* To set the value 1: */ if (sem_post (atomic_int_semaphore (ai))) abort (); } #else struct atomic_int { mtx_t lock; int value; }; static void init_atomic_int (struct atomic_int *ai) { ASSERT (mtx_init (&ai->lock, mtx_plain) == thrd_success); } static int get_atomic_int_value (struct atomic_int *ai) { ASSERT (mtx_lock (&ai->lock) == thrd_success); int ret = ai->value; ASSERT (mtx_unlock (&ai->lock) == thrd_success); return ret; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ASSERT (mtx_lock (&ai->lock) == thrd_success); ai->value = new_value; ASSERT (mtx_unlock (&ai->lock) == thrd_success); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/atomic-int-posix.h����������������������������������������������������0000664�0000000�0000000�00000012021�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Atomic integers. Useful for testing multithreaded locking primitives. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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/>. */ /* Whether to use 'volatile' on some variables that communicate information between threads. If set to 0, a semaphore or a lock is used to protect these variables. If set to 1, 'volatile' is used; this is theoretically equivalent but can lead to much slower execution (e.g. 30x slower total run time on a 40-core machine), because 'volatile' does not imply any synchronization/communication between different CPUs. */ #define USE_VOLATILE 0 #if USE_POSIX_THREADS && HAVE_SEMAPHORE_H /* Whether to use a semaphore to communicate information between threads. If set to 0, a lock is used. If set to 1, a semaphore is used. Uncomment this to reduce the dependencies of this test. */ # define USE_SEMAPHORE 1 /* Mac OS X provides only named semaphores (sem_open); its facility for unnamed semaphores (sem_init) does not work. */ # if defined __APPLE__ && defined __MACH__ # define USE_NAMED_SEMAPHORE 1 # else # define USE_UNNAMED_SEMAPHORE 1 # endif #endif #if USE_SEMAPHORE # include <errno.h> # include <fcntl.h> # include <semaphore.h> # include <unistd.h> #endif #if USE_VOLATILE struct atomic_int { volatile int value; }; static void init_atomic_int (struct atomic_int *ai) { } static int get_atomic_int_value (struct atomic_int *ai) { return ai->value; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ai->value = new_value; } #elif USE_SEMAPHORE /* This atomic_int implementation can only support the values 0 and 1. It is initially 0 and can be set to 1 only once. */ # if USE_UNNAMED_SEMAPHORE struct atomic_int { sem_t semaphore; }; #define atomic_int_semaphore(ai) (&(ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_init (&ai->semaphore, 0, 0); } # endif # if USE_NAMED_SEMAPHORE struct atomic_int { sem_t *semaphore; }; #define atomic_int_semaphore(ai) ((ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_t *s; unsigned int count; for (count = 0; ; count++) { char name[80]; /* Use getpid() in the name, so that different processes running at the same time will not interfere. Use ai in the name, so that different atomic_int in the same process will not interfere. Use a count in the name, so that even in the (unlikely) case that a semaphore with the specified name already exists, we can try a different name. */ sprintf (name, "test-lock-%lu-%p-%u", (unsigned long) getpid (), ai, count); s = sem_open (name, O_CREAT | O_EXCL, 0600, 0); if (s == SEM_FAILED) { if (errno == EEXIST) /* Retry with a different name. */ continue; else { perror ("sem_open failed"); abort (); } } else { /* Try not to leave a semaphore hanging around on the file system eternally, if we can avoid it. */ sem_unlink (name); break; } } ai->semaphore = s; } # endif static int get_atomic_int_value (struct atomic_int *ai) { if (sem_trywait (atomic_int_semaphore (ai)) == 0) { if (sem_post (atomic_int_semaphore (ai))) abort (); return 1; } else if (errno == EAGAIN) return 0; else abort (); } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { if (new_value == 0) /* It's already initialized with 0. */ return; /* To set the value 1: */ if (sem_post (atomic_int_semaphore (ai))) abort (); } #else struct atomic_int { pthread_mutex_t lock; int value; }; static void init_atomic_int (struct atomic_int *ai) { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&ai->lock, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } static int get_atomic_int_value (struct atomic_int *ai) { ASSERT (pthread_mutex_lock (&ai->lock) == 0); int ret = ai->value; ASSERT (pthread_mutex_unlock (&ai->lock) == 0); return ret; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ASSERT (pthread_mutex_lock (&ai->lock) == 0); ai->value = new_value; ASSERT (pthread_mutex_unlock (&ai->lock) == 0); } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-digest.h��������������������������������������������������������0000664�0000000�0000000�00000005524�14110572173�0020154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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 <stdio.h> #include <stdlib.h> #include <sys/resource.h> #include <sys/time.h> struct timings_state { /* Filled when the timings start. */ struct timeval real_start; struct timeval user_start; struct timeval sys_start; /* Filled when the timings end. */ long real_usec; long user_usec; long sys_usec; }; static void timing_start (struct timings_state *ts) { struct rusage usage; getrusage (RUSAGE_SELF, &usage); ts->user_start = usage.ru_utime; ts->sys_start = usage.ru_stime; gettimeofday (&ts->real_start, NULL); } static void timing_end (struct timings_state *ts) { struct timeval real_end; struct rusage usage; gettimeofday (&real_end, NULL); getrusage (RUSAGE_SELF, &usage); ts->real_usec = (real_end.tv_sec - ts->real_start.tv_sec) * 1000000 + real_end.tv_usec - ts->real_start.tv_usec; ts->user_usec = (usage.ru_utime.tv_sec - ts->user_start.tv_sec) * 1000000 + usage.ru_utime.tv_usec - ts->user_start.tv_usec; ts->sys_usec = (usage.ru_stime.tv_sec - ts->sys_start.tv_sec) * 1000000 + usage.ru_stime.tv_usec - ts->sys_start.tv_usec; } static void timing_output (const struct timings_state *ts) { printf ("real %10.6f\n", (double)ts->real_usec / 1000000.0); printf ("user %7.3f\n", (double)ts->user_usec / 1000000.0); printf ("sys %7.3f\n", (double)ts->sys_usec / 1000000.0); } int main (int argc, char *argv[]) { if (argc != 3) { fprintf (stderr, "Usage: %s SIZE REPETITIONS\n", argv[0]); exit (1); } size_t size = atol (argv[1]); int repeat = atoi (argv[2]); char *memblock = (char *) malloc (size); if (!memblock) { fprintf (stderr, "%s: memory exhausted\n", argv[0]); return 1; } /* Fill the memory block. */ { size_t i; for (i = 0; i < size; i++) memblock[i] = (unsigned char) (((i * (i-1) * (i-5)) >> 6) + (i % 499) + (i % 101)); } struct timings_state ts; timing_start (&ts); int count; for (count = 0; count < repeat; count++) { char digest[64]; FUNC (memblock, size, digest); } timing_end (&ts); timing_output (&ts); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-md5.c�����������������������������������������������������������0000664�0000000�0000000�00000001534�14110572173�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the md5_buffer function. */ #include <config.h> #include "md5.h" #define FUNC md5_buffer #include "bench-digest.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-sha1.c����������������������������������������������������������0000664�0000000�0000000�00000001537�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the sha1_buffer function. */ #include <config.h> #include "sha1.h" #define FUNC sha1_buffer #include "bench-digest.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-sha224.c��������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the sha224_buffer function. */ #include <config.h> #include "sha256.h" #define FUNC sha224_buffer #include "bench-digest.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-sha256.c��������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the sha256_buffer function. */ #include <config.h> #include "sha256.h" #define FUNC sha256_buffer #include "bench-digest.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-sha384.c��������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the sha384_buffer function. */ #include <config.h> #include "sha512.h" #define FUNC sha384_buffer #include "bench-digest.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/bench-sha512.c��������������������������������������������������������0000664�0000000�0000000�00000001545�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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/>. */ /* Benchmark program for the sha512_buffer function. */ #include <config.h> #include "sha512.h" #define FUNC sha512_buffer #include "bench-digest.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/executable-script�����������������������������������������������������0000775�0000000�0000000�00000000261�14110572173�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������printf 'Halle ' printf "Potta" # This script is intentionally not immediately recognizable as a shell script. # Don't add a .sh suffix. Don't add a #! header in the first line. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/executable-script.sh��������������������������������������������������0000775�0000000�0000000�00000000231�14110572173�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������printf 'Halle ' printf "Potta" # This script is intentionally not immediately recognizable as a shell script. # Don't add a #! header in the first line. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/executable-shell-script�����������������������������������������������0000775�0000000�0000000�00000000121�14110572173�0022111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This script is a proper shell script. printf 'Halle ' printf "Potta" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017053�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/Makefile.am���������������������������������������������������0000664�0000000�0000000�00000006466�14110572173�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Makefile for the autoconf-lib-link/tests subdirectory of GNU gettext ## Copyright (C) 1995-1997, 2001-2003, 2006, 2009-2021 Free Software ## Foundation, Inc. ## ## This 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/>. ## Process this file with automake to produce Makefile.in. AUTOMAKE_OPTIONS = 1.11 gnits no-dependencies color-tests MOSTLYCLEANFILES = TESTS = rpath-1a rpath-1b \ rpath-2aaa rpath-2aab rpath-2aad \ rpath-2aba rpath-2abb rpath-2abd \ rpath-2baa rpath-2bab rpath-2bad \ rpath-2bba rpath-2bbb rpath-2bbd \ rpath-3aaa rpath-3aab rpath-3aad \ rpath-3aah \ rpath-3aba rpath-3abb rpath-3abd \ rpath-3abh \ rpath-3baa rpath-3bab rpath-3bad \ rpath-3bah \ rpath-3bba rpath-3bbb rpath-3bbd \ rpath-3bbh EXTRA_DIST = $(TESTS) \ rpathx/configure.ac rpathx/aclocal.m4 rpathx/configure \ rpathx/Makefile.am rpathx/Makefile.in rpathx/rpathx.c \ rpathy/configure.ac rpathy/aclocal.m4 rpathy/configure \ rpathy/Makefile.am rpathy/Makefile.in rpathy/rpathy.c \ rpathz/configure.ac rpathz/aclocal.m4 rpathz/configure \ rpathz/Makefile.am rpathz/Makefile.in rpathz/rpathz.c \ rpathlx/configure.ac rpathlx/aclocal.m4 rpathlx/configure \ rpathlx/Makefile.am rpathlx/Makefile.in rpathlx/usex.c \ rpathly/configure.ac rpathly/aclocal.m4 rpathly/configure \ rpathly/Makefile.am rpathly/Makefile.in rpathly/usey.c \ rpathlyx/configure.ac rpathlyx/aclocal.m4 rpathlyx/configure \ rpathlyx/Makefile.am rpathlyx/Makefile.in rpathlyx/usey.c \ rpathlz/configure.ac rpathlz/aclocal.m4 rpathlz/configure \ rpathlz/Makefile.am rpathlz/Makefile.in rpathlz/usez.c \ rpathlzyx/configure.ac rpathlzyx/aclocal.m4 rpathlzyx/configure \ rpathlzyx/Makefile.am rpathlzyx/Makefile.in rpathlzyx/usez.c \ rpath-1 rpath-2_a rpath-2_b rpath-3_a rpath-3_b README \ rpath-3aae rpath-3aag rpath-3abe rpath-3abg \ rpathcfg.sh TESTS_ENVIRONMENT = top_srcdir=$(srcdir)/../.. srcdir=$(srcdir) \ OBJEXT='@OBJEXT@' EXEEXT='@EXEEXT@' \ LIBTOOL='@LIBTOOL@' \ CC='@CC@' CFLAGS='@CFLAGS@' \ CPPFLAGS='@CPPFLAGS@' LDFLAGS='@LDFLAGS@' \ LIBDIRSTEM='@LIBDIRSTEM@' \ CONFIG_SHELL='$(SHELL)' \ $(SHELL) # Help maintaining config.rpath. rpathcfg: rpathcfg.sh top_srcdir=$(srcdir)/../.. srcdir=$(srcdir) \ CONFIG_SHELL='$(SHELL)' \ CC='@CC@' GCC='@GCC@' \ LDFLAGS='@LDFLAGS@' \ LD='@LD@' with_gnu_ld='@with_gnu_ld@' \ host='@host@' \ $(SHELL) $(srcdir)/rpathcfg.sh > rpathcfg 2> rpathcfg.log MOSTLYCLEANFILES += rpathcfg rpathcfg.log # Clean up the intermediate directory created by running the tests. distclean-local: rm -rf tst ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/README��������������������������������������������������������0000664�0000000�0000000�00000005546�14110572173�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Tests for config.rpath and lib-link.m4. rpath-1 w | +---- a = static, b = shared rpath-2 u v w | | | | | +---- a = static/static, b = static/shared, | | c = shared/static, d = shared/shared. | | | +------ a = all libraries and the program have the same prefix, | b = the libraries are in different directories. | +-------- a = all shared libraries use the libtool *.la files for resolving dependencies, b = dependencies are given as AC_LIB_LINKFLAGS argument instead. rpath-3 u v w | | | | | +---- a = static/static/static, b = static/static/shared, | | c = static/shared/static, d = static/shared/shared, | | e = shared/static/static, f = shared/static/shared, | | g = shared/shared/static, h = shared/shared/shared. | | | +------ a = all libraries and the program have the same prefix, | b = the libraries are in different directories. | +-------- a = all shared libraries use the libtool *.la files for resolving dependencies, b = dependencies are given as AC_LIB_LINKFLAGS argument instead. The rpath-2* tests are sensitive to - incomplete shared library support in the system, - bugs in libtool that creates the shared libraries, - bugs in lib-link.m4. The rpath-3* tests are sensitive to - incomplete shared library support in the system, - bugs in libtool that creates the shared libraries. Known failures: * On all platforms supporting shared libraries, rpath-3aae rpath-3aag rpath-3abe rpath-3abg fail. This is a libtool 1.4.2 bug: When a shared library depends on a static library indirectly through two different dependency paths, libtool attempts to link together invalid sets of object files. * OSF/1 4.0: the tests rpath-2bbd rpath-3bbd rpath-3bbf rpath-3bbg rpath-3bbh fail, because -rpath options are not cumulative: The last -rpath option overrides all previous ones. One would need to pass all directories, separated by colons, in a single -rpath option. * On Linux/x86_64: the tests rpath-2aac rpath-2abc rpath-2bac rpath-2bbc rpath-3aac rpath-3aaf rpath-3abc rpath-3abf rpath-3bac rpath-3bae rpath-3baf rpath-3bag rpath-3bbc rpath-3bbe rpath-3bbf rpath-3bbg fail, because code from static libraries not compiled with -fPIC cannot be integrated into shared libraries: linker error about relocations. * Solaris: the tests rpath-3bae rpath-3bbe rpath-3aaf rpath-3abf rpath-3baf rpath-3bbf fail, because code from static libraries not compiled with -fPIC cannot be integrated into shared libraries: linker error "Text relocation remains". * Cygwin: The tests rpath-2aac rpath-2abc rpath-3aac rpath-3aaf rpath-3abc rpath-3abf fail. ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-1�������������������������������������������������������0000664�0000000�0000000�00000002144�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Common portion of all rpath-1* tests. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } tmpfiles="$tmpfiles $rp-prefix" rm -rf $rp-prefix mkdir $rp-prefix tmpfiles="$tmpfiles $tstdir/$rp-build1" rm -rf $tstdir/$rp-build1 mkdir $tstdir/$rp-build1 (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/$rp-build1 && tar xf -) (cd $tstdir/$rp-build1 ${CONFIG_SHELL-/bin/sh} ./configure $build1_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) tmpfiles="$tmpfiles $tstdir/$rp-build2" rm -rf $tstdir/$rp-build2 mkdir $tstdir/$rp-build2 (cd $srcdir/rpathlx && tar cf - *) | (cd $tstdir/$rp-build2 && tar xf -) (cd $tstdir/$rp-build2 ${CONFIG_SHELL-/bin/sh} ./configure --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make check >> make.log ) result=$? rm -rf $tmpfiles exit $result ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-1a������������������������������������������������������0000775�0000000�0000000�00000000240�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # Simple case: a static library. rp=rp1a build1_configure_flags=--disable-shared . $srcdir/rpath-1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-1b������������������������������������������������������0000775�0000000�0000000�00000000220�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # Simple case: a shared library. rp=rp1b build1_configure_flags= . $srcdir/rpath-1 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2_a�����������������������������������������������������0000664�0000000�0000000�00000003210�14110572173�0020547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Common portion of all rpath-2?a? tests. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } tmpfiles="$tmpfiles $rp-prefix" rm -rf $rp-prefix mkdir $rp-prefix tmpfiles="$tmpfiles $tstdir/$rp-build1" rm -rf $tstdir/$rp-build1 mkdir $tstdir/$rp-build1 (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/$rp-build1 && tar xf -) (cd $tstdir/$rp-build1 ${CONFIG_SHELL-/bin/sh} ./configure $build1_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix/lib/librpathx.la fi tmpfiles="$tmpfiles $tstdir/$rp-build2" rm -rf $tstdir/$rp-build2 mkdir $tstdir/$rp-build2 (cd $srcdir/rpathy && tar cf - *) | (cd $tstdir/$rp-build2 && tar xf -) (cd $tstdir/$rp-build2 ${CONFIG_SHELL-/bin/sh} ./configure $build2_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix/lib/librpathy.la fi tmpfiles="$tmpfiles $tstdir/$rp-build3" rm -rf $tstdir/$rp-build3 mkdir $tstdir/$rp-build3 (cd $srcdir/$build3_package && tar cf - *) | (cd $tstdir/$rp-build3 && tar xf -) (cd $tstdir/$rp-build3 ${CONFIG_SHELL-/bin/sh} ./configure --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make check >> make.log ) result=$? rm -rf $tmpfiles exit $result ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2_b�����������������������������������������������������0000664�0000000�0000000�00000004035�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Common portion of all rpath-2?b? tests. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } tmpfiles="$tmpfiles $rp-prefix1" rm -rf $rp-prefix1 mkdir $rp-prefix1 tmpfiles="$tmpfiles $rp-prefix2" rm -rf $rp-prefix2 mkdir $rp-prefix2 tmpfiles="$tmpfiles $rp-prefix" rm -rf $rp-prefix mkdir $rp-prefix tmpfiles="$tmpfiles $tstdir/$rp-build1" rm -rf $tstdir/$rp-build1 mkdir $tstdir/$rp-build1 (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/$rp-build1 && tar xf -) (cd $tstdir/$rp-build1 ${CONFIG_SHELL-/bin/sh} ./configure $build1_configure_flags --prefix=$builddir/$rp-prefix1 --libdir=$builddir/$rp-prefix1/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix1/lib/librpathx.la fi tmpfiles="$tmpfiles $tstdir/$rp-build2" rm -rf $tstdir/$rp-build2 mkdir $tstdir/$rp-build2 (cd $srcdir/rpathy && tar cf - *) | (cd $tstdir/$rp-build2 && tar xf -) (cd $tstdir/$rp-build2 ${CONFIG_SHELL-/bin/sh} ./configure $build2_configure_flags --prefix=$builddir/$rp-prefix2 --libdir=$builddir/$rp-prefix2/$LIBDIRSTEM --with-librpathx-prefix=$builddir/$rp-prefix1 > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix2/lib/librpathy.la fi tmpfiles="$tmpfiles $tstdir/$rp-build3" rm -rf $tstdir/$rp-build3 mkdir $tstdir/$rp-build3 (cd $srcdir/$build3_package && tar cf - *) | (cd $tstdir/$rp-build3 && tar xf -) (cd $tstdir/$rp-build3 if test $remove_la = yes; then build3_configure_flags=--with-librpathx-prefix=$builddir/$rp-prefix1 else build3_configure_flags= fi ${CONFIG_SHELL-/bin/sh} ./configure --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM --with-librpathy-prefix=$builddir/$rp-prefix2 $build3_configure_flags > configure.log 2>&1 make > make.log 2>&1 make check >> make.log ) result=$? rm -rf $tmpfiles exit $result ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2aaa����������������������������������������������������0000775�0000000�0000000�00000000424�14110572173�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library. rp=rp2aaa build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_package=rpathly remove_la=no . $srcdir/rpath-2_a ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2aab����������������������������������������������������0000775�0000000�0000000�00000000404�14110572173�0020720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library. rp=rp2aab build1_configure_flags= build2_configure_flags=--disable-shared build3_package=rpathly remove_la=no . $srcdir/rpath-2_a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2aac����������������������������������������������������0000775�0000000�0000000�00000000404�14110572173�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library. rp=rp2aac build1_configure_flags=--disable-shared build2_configure_flags= build3_package=rpathly remove_la=no . $srcdir/rpath-2_a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2aad����������������������������������������������������0000775�0000000�0000000�00000000364�14110572173�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library. rp=rp2aad build1_configure_flags= build2_configure_flags= build3_package=rpathly remove_la=no . $srcdir/rpath-2_a ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2aba����������������������������������������������������0000775�0000000�0000000�00000000506�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library. # Each library installed with a different prefix. rp=rp2aba build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_package=rpathly remove_la=no . $srcdir/rpath-2_b ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2abb����������������������������������������������������0000775�0000000�0000000�00000000466�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library. # Each library installed with a different prefix. rp=rp2abb build1_configure_flags= build2_configure_flags=--disable-shared build3_package=rpathly remove_la=no . $srcdir/rpath-2_b ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2abc����������������������������������������������������0000775�0000000�0000000�00000000466�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library. # Each library installed with a different prefix. rp=rp2abc build1_configure_flags=--disable-shared build2_configure_flags= build3_package=rpathly remove_la=no . $srcdir/rpath-2_b ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2abd����������������������������������������������������0000775�0000000�0000000�00000000446�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library. # Each library installed with a different prefix. rp=rp2abd build1_configure_flags= build2_configure_flags= build3_package=rpathly remove_la=no . $srcdir/rpath-2_b ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2baa����������������������������������������������������0000775�0000000�0000000�00000000566�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp2baa build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_a ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bab����������������������������������������������������0000775�0000000�0000000�00000000546�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp2bab build1_configure_flags= build2_configure_flags=--disable-shared build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_a ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bac����������������������������������������������������0000775�0000000�0000000�00000000546�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp2bac build1_configure_flags=--disable-shared build2_configure_flags= build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_a ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bad����������������������������������������������������0000775�0000000�0000000�00000000526�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp2bad build1_configure_flags= build2_configure_flags= build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_a ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bba����������������������������������������������������0000775�0000000�0000000�00000000650�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp2bba build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_b ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bbb����������������������������������������������������0000775�0000000�0000000�00000000630�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp2bbb build1_configure_flags= build2_configure_flags=--disable-shared build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_b ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bbc����������������������������������������������������0000775�0000000�0000000�00000000630�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp2bbc build1_configure_flags=--disable-shared build2_configure_flags= build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_b ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-2bbd����������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp2bbd build1_configure_flags= build2_configure_flags= build3_package=rpathlyx remove_la=yes . $srcdir/rpath-2_b ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3_a�����������������������������������������������������0000664�0000000�0000000�00000004134�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Common portion of all rpath-3?a? tests. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } tmpfiles="$tmpfiles $rp-prefix" rm -rf $rp-prefix mkdir $rp-prefix tmpfiles="$tmpfiles $tstdir/$rp-build1" rm -rf $tstdir/$rp-build1 mkdir $tstdir/$rp-build1 (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/$rp-build1 && tar xf -) (cd $tstdir/$rp-build1 ${CONFIG_SHELL-/bin/sh} ./configure $build1_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix/lib/librpathx.la fi tmpfiles="$tmpfiles $tstdir/$rp-build2" rm -rf $tstdir/$rp-build2 mkdir $tstdir/$rp-build2 (cd $srcdir/rpathy && tar cf - *) | (cd $tstdir/$rp-build2 && tar xf -) (cd $tstdir/$rp-build2 ${CONFIG_SHELL-/bin/sh} ./configure $build2_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix/lib/librpathy.la fi tmpfiles="$tmpfiles $tstdir/$rp-build3" rm -rf $tstdir/$rp-build3 mkdir $tstdir/$rp-build3 (cd $srcdir/rpathz && tar cf - *) | (cd $tstdir/$rp-build3 && tar xf -) (cd $tstdir/$rp-build3 ${CONFIG_SHELL-/bin/sh} ./configure $build3_configure_flags --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix/lib/librpathz.la fi tmpfiles="$tmpfiles $tstdir/$rp-build4" rm -rf $tstdir/$rp-build4 mkdir $tstdir/$rp-build4 (cd $srcdir/$build4_package && tar cf - *) | (cd $tstdir/$rp-build4 && tar xf -) (cd $tstdir/$rp-build4 ${CONFIG_SHELL-/bin/sh} ./configure --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make check >> make.log ) result=$? rm -rf $tmpfiles exit $result ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3_b�����������������������������������������������������0000664�0000000�0000000�00000005307�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Common portion of all rpath-3?b? tests. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } tmpfiles="$tmpfiles $rp-prefix1" rm -rf $rp-prefix1 mkdir $rp-prefix1 tmpfiles="$tmpfiles $rp-prefix2" rm -rf $rp-prefix2 mkdir $rp-prefix2 tmpfiles="$tmpfiles $rp-prefix3" rm -rf $rp-prefix3 mkdir $rp-prefix3 tmpfiles="$tmpfiles $rp-prefix" rm -rf $rp-prefix mkdir $rp-prefix tmpfiles="$tmpfiles $tstdir/$rp-build1" rm -rf $tstdir/$rp-build1 mkdir $tstdir/$rp-build1 (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/$rp-build1 && tar xf -) (cd $tstdir/$rp-build1 ${CONFIG_SHELL-/bin/sh} ./configure $build1_configure_flags --prefix=$builddir/$rp-prefix1 --libdir=$builddir/$rp-prefix1/$LIBDIRSTEM > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix1/lib/librpathx.la fi tmpfiles="$tmpfiles $tstdir/$rp-build2" rm -rf $tstdir/$rp-build2 mkdir $tstdir/$rp-build2 (cd $srcdir/rpathy && tar cf - *) | (cd $tstdir/$rp-build2 && tar xf -) (cd $tstdir/$rp-build2 ${CONFIG_SHELL-/bin/sh} ./configure $build2_configure_flags --prefix=$builddir/$rp-prefix2 --libdir=$builddir/$rp-prefix2/$LIBDIRSTEM --with-librpathx-prefix=$builddir/$rp-prefix1 > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix2/lib/librpathy.la fi tmpfiles="$tmpfiles $tstdir/$rp-build3" rm -rf $tstdir/$rp-build3 mkdir $tstdir/$rp-build3 (cd $srcdir/rpathz && tar cf - *) | (cd $tstdir/$rp-build3 && tar xf -) (cd $tstdir/$rp-build3 ${CONFIG_SHELL-/bin/sh} ./configure $build3_configure_flags --prefix=$builddir/$rp-prefix3 --libdir=$builddir/$rp-prefix3/$LIBDIRSTEM --with-librpathx-prefix=$builddir/$rp-prefix1 --with-librpathy-prefix=$builddir/$rp-prefix2 > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) if test $remove_la = yes; then rm -f $rp-prefix3/lib/librpathz.la fi tmpfiles="$tmpfiles $tstdir/$rp-build4" rm -rf $tstdir/$rp-build4 mkdir $tstdir/$rp-build4 (cd $srcdir/$build4_package && tar cf - *) | (cd $tstdir/$rp-build4 && tar xf -) (cd $tstdir/$rp-build4 if test $remove_la = yes; then build4_configure_flags="--with-librpathx-prefix=$builddir/$rp-prefix1 --with-librpathy-prefix=$builddir/$rp-prefix2" else build4_configure_flags= fi ${CONFIG_SHELL-/bin/sh} ./configure --prefix=$builddir/$rp-prefix --libdir=$builddir/$rp-prefix/$LIBDIRSTEM --with-librpathz-prefix=$builddir/$rp-prefix3 $build4_configure_flags > configure.log 2>&1 make > make.log 2>&1 make check >> make.log ) result=$? rm -rf $tmpfiles exit $result �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aaa����������������������������������������������������0000775�0000000�0000000�00000000546�14110572173�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a static library depending on both. rp=rp3aaa build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aab����������������������������������������������������0000775�0000000�0000000�00000000526�14110572173�0020726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a static library depending on both. rp=rp3aab build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aac����������������������������������������������������0000775�0000000�0000000�00000000526�14110572173�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a static library depending on both. rp=rp3aac build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aad����������������������������������������������������0000775�0000000�0000000�00000000506�14110572173�0020726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a static library depending on both. rp=rp3aad build1_configure_flags= build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aae����������������������������������������������������0000775�0000000�0000000�00000000526�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a shared library depending on both. rp=rp3aae build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aaf����������������������������������������������������0000775�0000000�0000000�00000000506�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a shared library depending on both. rp=rp3aaf build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aag����������������������������������������������������0000775�0000000�0000000�00000000506�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a shared library depending on both. rp=rp3aag build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aah����������������������������������������������������0000775�0000000�0000000�00000000466�14110572173�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a shared library depending on both. rp=rp3aah build1_configure_flags= build2_configure_flags= build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_a ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3aba����������������������������������������������������0000775�0000000�0000000�00000000630�14110572173�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a static library depending on both. # Each library installed with a different prefix. rp=rp3aba build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abb����������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a static library depending on both. # Each library installed with a different prefix. rp=rp3abb build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abc����������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a static library depending on both. # Each library installed with a different prefix. rp=rp3abc build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abd����������������������������������������������������0000775�0000000�0000000�00000000570�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a static library depending on both. # Each library installed with a different prefix. rp=rp3abd build1_configure_flags= build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abe����������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a shared library depending on both. # Each library installed with a different prefix. rp=rp3abe build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abf����������������������������������������������������0000775�0000000�0000000�00000000570�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a shared library depending on both. # Each library installed with a different prefix. rp=rp3abf build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abg����������������������������������������������������0000775�0000000�0000000�00000000570�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a shared library depending on both. # Each library installed with a different prefix. rp=rp3abg build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3abh����������������������������������������������������0000775�0000000�0000000�00000000550�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a shared library depending on both. # Each library installed with a different prefix. rp=rp3abh build1_configure_flags= build2_configure_flags= build3_configure_flags= build4_package=rpathlz remove_la=no . $srcdir/rpath-3_b ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3baa����������������������������������������������������0000775�0000000�0000000�00000000711�14110572173�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3baa build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a �������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bab����������������������������������������������������0000775�0000000�0000000�00000000671�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bab build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a �����������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bac����������������������������������������������������0000775�0000000�0000000�00000000671�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bac build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a �����������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bad����������������������������������������������������0000775�0000000�0000000�00000000651�14110572173�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bad build1_configure_flags= build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bae����������������������������������������������������0000775�0000000�0000000�00000000671�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bae build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a �����������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3baf����������������������������������������������������0000775�0000000�0000000�00000000651�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3baf build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bag����������������������������������������������������0000775�0000000�0000000�00000000651�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bag build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bah����������������������������������������������������0000775�0000000�0000000�00000000631�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. rp=rp3bah build1_configure_flags= build2_configure_flags= build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_a �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bba����������������������������������������������������0000775�0000000�0000000�00000000773�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bba build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b �����gnulib-20210822~d383792/tests/havelib/rpath-3bbb����������������������������������������������������0000775�0000000�0000000�00000000753�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbb build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b ���������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbc����������������������������������������������������0000775�0000000�0000000�00000000753�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbc build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b ���������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbd����������������������������������������������������0000775�0000000�0000000�00000000733�14110572173�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a static library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbd build1_configure_flags= build2_configure_flags= build3_configure_flags=--disable-shared build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b �������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbe����������������������������������������������������0000775�0000000�0000000�00000000753�14110572173�0020735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a static library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbe build1_configure_flags=--disable-shared build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b ���������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbf����������������������������������������������������0000775�0000000�0000000�00000000733�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a static library depending on a shared library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbf build1_configure_flags= build2_configure_flags=--disable-shared build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b �������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbg����������������������������������������������������0000775�0000000�0000000�00000000733�14110572173�0020735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a static library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbg build1_configure_flags=--disable-shared build2_configure_flags= build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b �������������������������������������gnulib-20210822~d383792/tests/havelib/rpath-3bbh����������������������������������������������������0000775�0000000�0000000�00000000713�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test config.rpath and AC_LIB_LINKFLAGS macro. # With dependencies: a shared library depending on a shared library, # and a shared library depending on both. # No libtool *.la files are assumed, dependencies given as AC_LIB_LINKFLAGS # argument instead. # Each library installed with a different prefix. rp=rp3bbh build1_configure_flags= build2_configure_flags= build3_configure_flags= build4_package=rpathlzyx remove_la=yes . $srcdir/rpath-3_b �����������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathcfg.sh���������������������������������������������������0000775�0000000�0000000�00000015443�14110572173�0021217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Prints information for maintaining config.rpath. # The caller should set the environment variables # top_srcdir, srcdir, CONFIG_SHELL, CC, GCC, LDFLAGS, LD, LIBDIRSTEM, with_gnu_ld, host. if test -f $top_srcdir/build-aux/config.rpath; then build_aux_dir=$top_srcdir/build-aux else build_aux_dir=$top_srcdir/../build-aux fi echo "=============== rpathcfg for $host ===============" echo echo "--------------- config.rpath output ---------------" ${CONFIG_SHELL-/bin/sh} $build_aux_dir/config.rpath "$host" | sed -e 's/^acl_cv_//' echo "--------------- experimentally determined ---------------" builddir=`pwd` global_top_auxdir=`cd "$top_srcdir"/build-aux && pwd` export global_top_auxdir tstdir='tst/dir' test -d $tstdir || { mkdir tst && mkdir $tstdir; } rm -rf tstprefix $tstdir/build tstlib eval `${CONFIG_SHELL-/bin/sh} $build_aux_dir/config.rpath "$host" | grep '^acl_cv_wl='` wl="$acl_cv_wl" # Static library suffix (normally "a"). mkdir tstprefix mkdir $tstdir/build (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/build && tar xf -) (cd $tstdir/build ${CONFIG_SHELL-/bin/sh} ./configure --disable-shared --prefix=$builddir/tstprefix --libdir=$builddir/tstprefix/${LIBDIRSTEM-lib} > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) rm -rf $tstdir/build libext= cd tstprefix/lib for f in *; do case $f in *.la) ;; *[0-9]) ;; *) libext=`echo $f | sed -e 's/^.*\.//'`;; esac if test -n "$libext"; then break fi done cd ../.. rm -rf tstprefix # Shared library suffix (normally "so"). mkdir tstprefix mkdir $tstdir/build (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/build && tar xf -) (cd $tstdir/build ${CONFIG_SHELL-/bin/sh} ./configure --disable-static --prefix=$builddir/tstprefix --libdir=$builddir/tstprefix/${LIBDIRSTEM-lib} > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) rm -rf $tstdir/build shlibext= cd tstprefix/lib || exit 1 for f in *; do case $f in *.la) ;; *[0-9]) ;; *) shlibext=`echo $f | sed -e 's/^.*\.//'`;; esac if test -n "$shlibext"; then break fi done cd ../.. rm -rf tstprefix # Prepare hardcoding tests. mkdir tstprefix mkdir $tstdir/build (cd $srcdir/rpathx && tar cf - *) | (cd $tstdir/build && tar xf -) (cd $tstdir/build ${CONFIG_SHELL-/bin/sh} ./configure --disable-static --prefix=$builddir/tstprefix --libdir=$builddir/tstprefix/${LIBDIRSTEM-lib} > configure.log 2>&1 make > make.log 2>&1 make install > install.log 2>&1 ) rm -rf $tstdir/build # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec= for spec in \ '-L$libdir' \ '-R$libdir' \ '-rpath $libdir' '${wl}-rpath ${wl}$libdir' \ '${wl}+b ${wl}$libdir' \ '${wl}-R $libdir:/usr/lib:/lib' \ '${wl}-blibpath:$libdir:/usr/lib:/lib' \ '${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' \ ; do mv tstprefix/lib tstlib libdir=`pwd`/tstprefix/lib eval flag=\"$spec\" echo 1>&2 echo "$CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag -o a.out" 1>&2 $CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag -o a.out if test $? = 0; then mv tstlib tstprefix/lib echo "ok, running created a.out." 1>&2 if ./a.out; then hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec$spec " fi else mv tstlib tstprefix/lib fi rm -f a.out done # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator= if test -n "$hardcode_libdir_flag_spec"; then spec=`echo "$hardcode_libdir_flag_spec" | sed -e '2,$d'` # Try with multiple -rpath flags. mv tstprefix/lib tstlib libdir=`pwd`/tstprefix/lib eval flag1=\"$spec\" libdir=/tmp eval flag2=\"$spec\" echo 1>&2 echo "$CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag1 $flag2 -o a.out" 1>&2 $CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag1 $flag2 -o a.out if test $? = 0; then mv tstlib tstprefix/lib echo "ok, running created a.out." 1>&2 if ./a.out; then hardcode_libdir_separator=NONE fi else mv tstlib tstprefix/lib fi rm -f a.out if test -z "$hardcode_libdir_separator"; then # Try with a single -rpath flag. mv tstprefix/lib tstlib libdir=`pwd`/tstprefix/lib:/tmp eval flag=\"$spec\" echo 1>&2 echo "$CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag -o a.out" 1>&2 $CC $LDFLAGS $srcdir/rpathlx/usex.c tstlib/librpathx.$shlibext $flag -o a.out if test $? = 0; then mv tstlib tstprefix/lib echo "ok, running created a.out." 1>&2 if ./a.out; then hardcode_libdir_separator=: fi else mv tstlib tstprefix/lib fi rm -f a.out fi if test -z "$hardcode_libdir_separator"; then echo "hardcode_libdir_separator test failed!" 1>&2 else if test "$hardcode_libdir_separator" = NONE; then hardcode_libdir_separator= fi fi fi # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=no echo 1>&2 echo "$CC $LDFLAGS $srcdir/rpathlx/usex.c tstprefix/lib/librpathx.$shlibext -o a.out" 1>&2 $CC $LDFLAGS $srcdir/rpathlx/usex.c tstprefix/lib/librpathx.$shlibext -o a.out if test $? = 0; then echo "ok, running created a.out." 1>&2 if ./a.out; then hardcode_direct=yes fi fi rm -f a.out # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=no echo 1>&2 echo "$CC $LDFLAGS $srcdir/rpathlx/usex.c -Ltstprefix/lib -lrpathx -o a.out" 1>&2 $CC $LDFLAGS $srcdir/rpathlx/usex.c -Ltstprefix/lib -lrpathx -o a.out if test $? = 0; then echo "ok, running created a.out." 1>&2 if ./a.out; then hardcode_minus_L=yes fi fi rm -f a.out # Clean up. rm -rf tstprefix $tstdir sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` cat <<EOF # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlx/������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020535�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlx/Makefile.am�������������������������������������������0000664�0000000�0000000�00000000203�14110572173�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies bin_PROGRAMS = usex usex_SOURCES = usex.c LDADD = @LIBRPATHX@ check: all ./usex ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlx/configure.ac������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0023032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AM_INIT_AUTOMAKE([gettext_rpathlx], [0]) AC_PROG_CC AC_LIB_LINKFLAGS([rpathx]) AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) ���������������������������gnulib-20210822~d383792/tests/havelib/rpathlx/usex.c������������������������������������������������0000664�0000000�0000000�00000000120�14110572173�0021656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathx_value (void); int main () { return !(rpathx_value () == 5); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathly/������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020536�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathly/Makefile.am�������������������������������������������0000664�0000000�0000000�00000000203�14110572173�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies bin_PROGRAMS = usey usey_SOURCES = usey.c LDADD = @LIBRPATHY@ check: all ./usey ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathly/configure.ac������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0023033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AM_INIT_AUTOMAKE([gettext_rpathly], [0]) AC_PROG_CC AC_LIB_LINKFLAGS([rpathy]) AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) ���������������������������gnulib-20210822~d383792/tests/havelib/rpathly/usey.c������������������������������������������������0000664�0000000�0000000�00000000121�14110572173�0021661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathy_value (void); int main () { return !(rpathy_value () == 57); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlyx/�����������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020726�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlyx/Makefile.am������������������������������������������0000664�0000000�0000000�00000000203�14110572173�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies bin_PROGRAMS = usey usey_SOURCES = usey.c LDADD = @LIBRPATHY@ check: all ./usey ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlyx/configure.ac�����������������������������������������0000664�0000000�0000000�00000002054�14110572173�0023215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AM_INIT_AUTOMAKE([gettext_rpathlyx], [0]) AC_PROG_CC AC_LIB_LINKFLAGS([rpathx]) AC_LIB_LINKFLAGS([rpathy],[rpathx]) LIBRPATHY="$LIBRPATHY $LIBRPATHX" AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlyx/usey.c�����������������������������������������������0000664�0000000�0000000�00000000121�14110572173�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathy_value (void); int main () { return !(rpathy_value () == 57); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlz/������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020537�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlz/Makefile.am�������������������������������������������0000664�0000000�0000000�00000000203�14110572173�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies bin_PROGRAMS = usez usez_SOURCES = usez.c LDADD = @LIBRPATHZ@ check: all ./usez ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlz/configure.ac������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0023034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathz. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AM_INIT_AUTOMAKE([gettext_rpathlz], [0]) AC_PROG_CC AC_LIB_LINKFLAGS([rpathz]) AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) ���������������������������gnulib-20210822~d383792/tests/havelib/rpathlz/usez.c������������������������������������������������0000664�0000000�0000000�00000000123�14110572173�0021665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathz_value (void); int main () { return !(rpathz_value () == 5171); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlzyx/����������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0021120�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlzyx/Makefile.am�����������������������������������������0000664�0000000�0000000�00000000203�14110572173�0023147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies bin_PROGRAMS = usez usez_SOURCES = usez.c LDADD = @LIBRPATHZ@ check: all ./usez ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlzyx/configure.ac����������������������������������������0000664�0000000�0000000�00000002143�14110572173�0023406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathz. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AM_INIT_AUTOMAKE([gettext_rpathlzyx], [0]) AC_PROG_CC AC_LIB_LINKFLAGS([rpathx]) AC_LIB_LINKFLAGS([rpathy],[rpathx]) AC_LIB_LINKFLAGS([rpathz],[rpathx rpathy]) LIBRPATHZ="$LIBRPATHZ $LIBRPATHY $LIBRPATHX" AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathlzyx/usez.c����������������������������������������������0000664�0000000�0000000�00000000123�14110572173�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathz_value (void); int main () { return !(rpathz_value () == 5171); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathx/�������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020361�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathx/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000231�14110572173�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies lib_LTLIBRARIES = librpathx.la librpathx_la_SOURCES = rpathx.c librpathx_la_LDFLAGS = -lc -no-undefined �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathx/configure.ac�������������������������������������������0000664�0000000�0000000�00000001736�14110572173�0022656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AC_CONFIG_MACRO_DIR([../ltm4]) AM_INIT_AUTOMAKE([gettext_rpathx], [0]) AC_PROG_CC AM_PROG_LIBTOOL AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) ����������������������������������gnulib-20210822~d383792/tests/havelib/rpathx/rpathx.c�����������������������������������������������0000664�0000000�0000000�00000000042�14110572173�0022027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������int rpathx_value () { return 5; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathy/�������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020362�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathy/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000247�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies lib_LTLIBRARIES = librpathy.la librpathy_la_SOURCES = rpathy.c librpathy_la_LDFLAGS = @LTLIBRPATHX@ -lc -no-undefined ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathy/configure.ac�������������������������������������������0000664�0000000�0000000�00000002023�14110572173�0022645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathy that depends on librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AC_CONFIG_MACRO_DIR([../ltm4]) AM_INIT_AUTOMAKE([gettext_rpathy], [0]) AC_PROG_CC AM_PROG_LIBTOOL AC_LIB_LINKFLAGS([rpathx]) AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathy/rpathy.c�����������������������������������������������0000664�0000000�0000000�00000000131�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathx_value (void); int rpathy_value () { return 10 * rpathx_value () + 7; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathz/�������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020363�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathz/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000265�14110572173�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.9.6 foreign no-dependencies lib_LTLIBRARIES = librpathz.la librpathz_la_SOURCES = rpathz.c librpathz_la_LDFLAGS = @LTLIBRPATHX@ @LTLIBRPATHY@ -lc -no-undefined �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathz/configure.ac�������������������������������������������0000664�0000000�0000000�00000002105�14110572173�0022647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathz that depends on librpathx and librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2021 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <https://www.gnu.org/licenses/>. AC_INIT([configure.ac]) AC_CONFIG_AUX_DIR([../../../build-aux]) AC_CONFIG_MACRO_DIR([../ltm4]) AM_INIT_AUTOMAKE([gettext_rpathz], [0]) AC_PROG_CC AM_PROG_LIBTOOL AC_LIB_LINKFLAGS([rpathx]) AC_LIB_LINKFLAGS([rpathy],[rpathx]) AC_SUBST([global_top_auxdir]) AC_OUTPUT([Makefile]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/havelib/rpathz/rpathz.c�����������������������������������������������0000664�0000000�0000000�00000000215�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathx_value (void); extern int rpathy_value (void); int rpathz_value () { return 1000 * rpathx_value () + 3 * rpathy_value (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/iconvsupport.c��������������������������������������������������������0000664�0000000�0000000�00000002172�14110572173�0020362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test iconv support. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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> /* Specification. */ extern int iconv_supports_encoding (const char *encoding); #if HAVE_ICONV # include <iconv.h> #endif /* Tests whether iconv() supports a given encoding. */ int iconv_supports_encoding (const char *encoding) { #if HAVE_ICONV iconv_t cd = iconv_open ("UTF-8", encoding); if (cd != (iconv_t) -1) { iconv_close (cd); return 1; } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/infinity.h������������������������������������������������������������0000664�0000000�0000000�00000003637�14110572173�0017454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for infinity. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* Infinityf () returns a 'float' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static float Infinityf () { static float zero = 0.0f; return 1.0f / zero; } #else # define Infinityf() (1.0f / 0.0f) #endif /* Infinityd () returns a 'double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static double Infinityd () { static double zero = 0.0; return 1.0 / zero; } #else # define Infinityd() (1.0 / 0.0) #endif /* Infinityl () returns a 'long double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static long double Infinityl () { static long double zero = 0.0L; return 1.0L / zero; } #else # define Infinityl() (1.0L / 0.0L) #endif �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/init.sh���������������������������������������������������������������0000664�0000000�0000000�00000054744�14110572173�0016756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# source this file; set up for tests # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This 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/>. # Using this file in a test # ========================= # # The typical skeleton of a test looks like this: # # #!/bin/sh # . "${srcdir=.}/init.sh"; path_prepend_ . # Execute some commands. # Note that these commands are executed in a subdirectory, therefore you # need to prepend "../" to relative filenames in the build directory. # Note that the "path_prepend_ ." is useful only if the body of your # test invokes programs residing in the initial directory. # For example, if the programs you want to test are in src/, and this test # script is named tests/test-1, then you would use "path_prepend_ ../src", # or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" # to all tests via automake's TESTS_ENVIRONMENT. # Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. # Use the skip_ and fail_ functions to print a diagnostic and then exit # with the corresponding exit code. # Exit $? # Executing a test that uses this file # ==================================== # # Running a single test: # $ make check TESTS=test-foo.sh # # Running a single test, with verbose output: # $ make check TESTS=test-foo.sh VERBOSE=yes # # Running a single test, keeping the temporary directory: # $ make check TESTS=test-foo.sh KEEP=yes # # Running a single test, with single-stepping: # 1. Go into a sub-shell: # $ bash # 2. Set relevant environment variables from TESTS_ENVIRONMENT in the # Makefile: # $ export srcdir=../../tests # this is an example # 3. Execute the commands from the test, copy&pasting them one by one: # $ . "$srcdir/init.sh"; path_prepend_ . # ... # 4. Finally # $ exit # ============================================================================= # Elementary diagnostics ME_=`expr "./$0" : '.*/\(.*\)$'` # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # We use a trap below for cleanup. This requires us to go through # hoops to get the right exit status transported through the handler. # So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests. # Turn off errexit here so that we don't trip the bug with OSF1/Tru64 # sh inside this function. Exit () { set +e; (exit $1); exit $1; } # Print warnings (e.g., about skipped and failed tests) to this file number. # Override by defining to say, 9, in init.cfg, and putting say, # export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2 # in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file. # This is useful when using automake's parallel tests mode, to print # the reason for skip/failure to console, rather than to the .log files. : ${stderr_fileno_=2} # Note that correct expansion of "$*" depends on IFS starting with ' '. # Always write the full diagnostic to stderr. # When stderr_fileno_ is not 2, also emit the first line of the # diagnostic to that file descriptor. warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) printf '%s\n' "$*" >&2 test $stderr_fileno_ = 2 \ || { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;; *) (IFS=' '; warn_ "$@");; esac } fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; } skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; } fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; } framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; } # ============================================================================= # Ensure the shell supports modern syntax. # Sanitize this shell to POSIX mode, if possible. DUALCASE=1; export DUALCASE if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # We require $(...) support unconditionally. # We require that the printf built-in work correctly regarding octal escapes; # this eliminates /bin/sh on AIX 7.2. # We require non-surprising "local" semantics (this eliminates dash). # This takes the admittedly draconian step of eliminating dash, because the # assignment tab=$(printf '\t') works fine, yet preceding it with "local " # transforms it into an assignment that sets the variable to the empty string. # That is too counter-intuitive, and can lead to subtle run-time malfunction. # The example below is less subtle in that with dash, it evokes the run-time # exception "dash: 1: local: 1: bad variable name". # We require a few additional shell features only when $EXEEXT is nonempty, # in order to support automatic $EXEEXT emulation: # - hyphen-containing alias names # - we prefer to use ${var#...} substitution, rather than having # to work around lack of support for that feature. # The following code attempts to find a shell with support for these features. # If the current shell passes the test, we're done. Otherwise, test other # shells until we find one that passes. If one is found, re-exec it. # If no acceptable shell is found, skip the current test. # # The "...set -x; P=1 true 2>err..." test is to disqualify any shell that # emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do. # # Use "9" to indicate success (rather than 0), in case some shell acts # like Solaris 10's /bin/sh but exits successfully instead of with status 2. # Eval this code in a subshell to determine a shell's suitability. # 10 - passes all tests; ok to use # 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score # ? - not ok gl_shell_test_script_=' test $(echo y) = y || exit 1 LC_ALL=en_US.UTF-8 printf "\\351" 2>/dev/null \ | LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \ || exit 1 printf "\\351" 2>/dev/null \ | LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \ || exit 1 f_local_() { local v=1; }; f_local_ || exit 1 f_dash_local_fail_() { local t=$(printf " 1"); }; f_dash_local_fail_ score_=10 if test "$VERBOSE" = yes; then test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9 fi test -z "$EXEEXT" && exit $score_ shopt -s expand_aliases alias a-b="echo zoo" v=abx test ${v%x} = ab \ && test ${v#a} = bx \ && test $(a-b) = zoo \ && exit $score_ ' if test "x$1" = "x--no-reexec"; then shift else # Assume a working shell. Export to subshells (setup_ needs this). gl_set_x_corrupts_stderr_=false export gl_set_x_corrupts_stderr_ # Record the first marginally acceptable shell. marginal_= # Search for a shell that meets our requirements. for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \ /bin/sh bash dash zsh pdksh fail do test "$re_shell_" = no_shell && continue # If we've made it all the way to the sentinel, "fail" without # finding even a marginal shell, skip this test. if test "$re_shell_" = fail; then test -z "$marginal_" && skip_ failed to find an adequate shell re_shell_=$marginal_ break fi # When testing the current shell, simply "eval" the test code. # Otherwise, run it via $re_shell_ -c ... if test "$re_shell_" = __current__; then # 'eval'ing this code makes Solaris 10's /bin/sh exit with # $? set to 2. It does not evaluate any of the code after the # "unexpected" first '('. Thus, we must run it in a subshell. ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 else "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null fi st_=$? # $re_shell_ works just fine. Use it. if test $st_ = 10; then gl_set_x_corrupts_stderr_=false break fi # If this is our first marginally acceptable shell, remember it. if test "$st_:$marginal_" = 9: ; then marginal_="$re_shell_" gl_set_x_corrupts_stderr_=true fi done if test "$re_shell_" != __current__; then # Found a usable shell. Preserve -v and -x. case $- in *v*x* | *x*v*) opts_=-vx ;; *v*) opts_=-v ;; *x*) opts_=-x ;; *) opts_= ;; esac re_shell=$re_shell_ export re_shell exec "$re_shell_" $opts_ "$0" --no-reexec "$@" echo "$ME_: exec failed" 1>&2 exit 127 fi fi # ============================================================================= # Ensure the shell behaves reasonably. # If this is bash, turn off all aliases. test -n "$BASH_VERSION" && unalias -a # Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to # PROG_NAME.exe), we want to support hyphen-containing names like test-acos. # That is part of the shell-selection test above. Why use aliases rather # than functions? Because support for hyphen-containing aliases is more # widespread than that for hyphen-containing function names. test -n "$EXEEXT" && test -n "$BASH_VERSION" && shopt -s expand_aliases # ============================================================================= # Creating a temporary directory (needed by the core test framework) # Create a temporary directory, much like mktemp -d does. # Written by Jim Meyering. # # Usage: mktempd_ /tmp phoey.XXXXXXXXXX # # First, try to use the mktemp program. # Failing that, we'll roll our own mktemp-like function: # - try to get random bytes from /dev/urandom # - failing that, generate output from a combination of quickly-varying # sources and gzip. Ignore non-varying gzip header, and extract # "random" bits from there. # - given those bits, map to file-name bytes using tr, and try to create # the desired directory. # - make only $MAX_TRIES_ attempts # Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. rand_bytes_ () { n_=$1 # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? # But if they have openssl, they probably have mktemp, too. chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 dev_rand_=/dev/urandom if test -r "$dev_rand_"; then # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ return fi n_plus_50_=`expr $n_ + 50` cmds_='date; date +%N; free; who -a; w; ps auxww; ps -ef' data_=` (eval "$cmds_") 2>&1 | gzip ` # Ensure that $data_ has length at least 50+$n_ while :; do len_=`echo "$data_"|wc -c` test $n_plus_50_ -le $len_ && break; data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip ` done echo "$data_" \ | dd bs=1 skip=50 count=$n_ 2>/dev/null \ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ } mktempd_ () { case $# in 2);; *) fail_ "Usage: mktempd_ DIR TEMPLATE";; esac destdir_=$1 template_=$2 MAX_TRIES_=4 # Disallow any trailing slash on specified destdir: # it would subvert the post-mktemp "case"-based destdir test. case $destdir_ in / | //) destdir_slash_=$destdir;; */) fail_ "invalid destination dir: remove trailing slash(es)";; *) destdir_slash_=$destdir_/;; esac case $template_ in *XXXX) ;; *) fail_ \ "invalid template: $template_ (must have a suffix of at least 4 X's)";; esac # First, try to use mktemp. d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` && # The resulting name must be in the specified directory. case $d in "$destdir_slash_"*) :;; *) false;; esac && # It must have created the directory. test -d "$d" && # It must have 0700 permissions. Handle sticky "S" bits. perms=`ls -dgo "$d" 2>/dev/null` && case $perms in drwx--[-S]---*) :;; *) false;; esac && { echo "$d" return } # If we reach this point, we'll have to create a directory manually. # Get a copy of the template without its suffix of X's. base_template_=`echo "$template_"|sed 's/XX*$//'` # Calculate how many X's we've just removed. template_length_=`echo "$template_" | wc -c` nx_=`echo "$base_template_" | wc -c` nx_=`expr $template_length_ - $nx_` err_= i_=1 while :; do X_=`rand_bytes_ $nx_` candidate_dir_="$destdir_slash_$base_template_$X_" err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ && { echo "$candidate_dir_"; return; } test $MAX_TRIES_ -le $i_ && break; i_=`expr $i_ + 1` done fail_ "$err_" } # ============================================================================= # Core test framework # An arbitrary prefix to help distinguish test directories. testdir_prefix_ () { printf gt; } # Set up the environment for the test to run in. setup_ () { if test "$VERBOSE" = yes; then # Test whether set -x may cause the selected shell to corrupt an # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh # from SunOS 5.11, OpenBSD 4.7 and Irix 6.5. # If enabling verbose output this way would cause trouble, simply # issue a warning and refrain. if $gl_set_x_corrupts_stderr_; then warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr" else set -x fi fi initial_cwd_=$PWD # Create and enter the temporary directory. pfx_=`testdir_prefix_` test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ || fail_ "failed to create temporary directory in $initial_cwd_" cd "$test_dir_" || fail_ "failed to cd to temporary directory" # Set variables srcdir, builddir, for the convenience of the test. case $srcdir in /* | ?:*) ;; *) srcdir="../$srcdir" ;; esac builddir=".." export srcdir builddir # As autoconf-generated configure scripts do, ensure that IFS # is defined initially, so that saving and restoring $IFS works. gl_init_sh_nl_=' ' IFS=" "" $gl_init_sh_nl_" # This trap statement, along with a trap on 0 below, ensure that the # temporary directory, $test_dir_, is removed upon exit as well as # upon receipt of any of the listed signals. for sig_ in 1 2 3 13 15; do eval "trap 'Exit $(expr $sig_ + 128)' $sig_" done } # This is a stub function that is run upon trap (upon regular exit and # interrupt). Override it with a per-test function, e.g., to unmount # a partition, or to undo any other global state changes. cleanup_ () { :; } # Run the user-overridable cleanup_ function, remove the temporary # directory and exit with the incoming value of $?. remove_tmp_ () { __st=$? cleanup_ if test "$KEEP" = yes; then echo "Not removing temporary directory $test_dir_" else # cd out of the directory we're about to remove cd "$initial_cwd_" || cd / || cd /tmp chmod -R u+rwx "$test_dir_" # If removal fails and exit status was to be 0, then change it to 1. rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } fi exit $__st } # ============================================================================= # Prepending directories to PATH # Given a directory name, DIR, if every entry in it that matches *.exe # contains only the specified bytes (see the case stmt below), then print # a space-separated list of those names and return 0. Otherwise, don't # print anything and return 1. Naming constraints apply also to DIR. find_exe_basenames_ () { feb_dir_=$1 feb_fail_=0 feb_result_= feb_sp_= for feb_file_ in $feb_dir_/*.exe; do # If there was no *.exe file, or there existed a file named "*.exe" that # was deleted between the above glob expansion and the existence test # below, just skip it. test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \ && continue # Exempt [.exe, since we can't create a function by that name, yet # we can't invoke [ by PATH search anyways due to shell builtins. test "x$feb_file_" = "x$feb_dir_/[.exe" && continue case $feb_file_ in *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; *) # Remove leading file name components as well as the .exe suffix. feb_file_=${feb_file_##*/} feb_file_=${feb_file_%.exe} feb_result_="$feb_result_$feb_sp_$feb_file_";; esac feb_sp_=' ' done test $feb_fail_ = 0 && printf %s "$feb_result_" return $feb_fail_ } # Consider the files in directory, $1. # For each file name of the form PROG.exe, create an alias named # PROG that simply invokes PROG.exe, then return 0. If any selected # file name or the directory name, $1, contains an unexpected character, # define no alias and return 1. create_exe_shims_ () { case $EXEEXT in '') return 0 ;; .exe) ;; *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; esac base_names_=`find_exe_basenames_ $1` \ || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; } if test -n "$base_names_"; then for base_ in $base_names_; do alias "$base_"="$base_$EXEEXT" done fi return 0 } # Use this function to prepend to PATH an absolute name for each # specified, possibly-$initial_cwd_-relative, directory. path_prepend_ () { while test $# != 0; do path_dir_=$1 case $path_dir_ in '') fail_ "invalid path dir: '$1'";; /* | ?:*) abs_path_dir_=$path_dir_;; *) abs_path_dir_=$initial_cwd_/$path_dir_;; esac case $abs_path_dir_ in *$PATH_SEPARATOR*) fail_ "invalid path dir: '$abs_path_dir_'";; esac PATH="$abs_path_dir_$PATH_SEPARATOR$PATH" # Create an alias, FOO, for each FOO.exe in this directory. create_exe_shims_ "$abs_path_dir_" \ || fail_ "something failed (above): $abs_path_dir_" shift done export PATH } # ============================================================================= # Convenience environment variables for the tests # ----------------------------------------------------------------------------- # Enable glibc's malloc-perturbing option. # This is useful for exposing code that depends on the fact that # malloc-related functions often return memory that is mostly zeroed. # If you have the time and cycles, use valgrind to do an even better job. : ${MALLOC_PERTURB_=87} export MALLOC_PERTURB_ # ----------------------------------------------------------------------------- # The interpreter for Bourne-shell scripts. # No special standards compatibility requirements. # Some environments, such as Android, don't have /bin/sh. if test -f /bin/sh$EXEEXT; then BOURNE_SHELL=/bin/sh else BOURNE_SHELL=sh fi # ============================================================================= # Convenience functions for the tests # ----------------------------------------------------------------------------- # Return value checking # This is used to simplify checking of the return value # which is useful when ensuring a command fails as desired. # I.e., just doing `command ... &&fail=1` will not catch # a segfault in command for example. With this helper you # instead check an explicit exit code like # returns_ 1 command ... || fail returns_ () { # Disable tracing so it doesn't interfere with stderr of the wrapped command { set +x; } 2>/dev/null local exp_exit="$1" shift "$@" test $? -eq $exp_exit && ret_=0 || ret_=1 if test "$VERBOSE" = yes && test "$gl_set_x_corrupts_stderr_" = false; then set -x fi { return $ret_; } 2>/dev/null } # ----------------------------------------------------------------------------- # Text file comparison # Emit a header similar to that from diff -u; Print the simulated "diff" # command so that the order of arguments is clear. Don't bother with @@ lines. emit_diff_u_header_ () { printf '%s\n' "diff -u $*" \ "--- $1 1970-01-01" \ "+++ $2 1970-01-01" } # Arrange not to let diff or cmp operate on /dev/null, # since on some systems (at least OSF/1 5.1), that doesn't work. # When there are not two arguments, or no argument is /dev/null, return 2. # When one argument is /dev/null and the other is not empty, # cat the nonempty file to stderr and return 1. # Otherwise, return 0. compare_dev_null_ () { test $# = 2 || return 2 if test "x$1" = x/dev/null; then test -s "$2" || return 0 emit_diff_u_header_ "$@"; sed 's/^/+/' "$2" return 1 fi if test "x$2" = x/dev/null; then test -s "$1" || return 0 emit_diff_u_header_ "$@"; sed 's/^/-/' "$1" return 1 fi return 2 } 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` && break done if test "$diff_opt_" != no; then if test -z "$diff_out_"; then compare_ () { 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 diff_status_=$? test $diff_status_ -eq 0 || cat diff.out || diff_status_=2 rm -f diff.out || diff_status_=2 return $diff_status_ } fi elif cmp -s /dev/null /dev/null 2>/dev/null; then compare_ () { cmp -s "$@"; } else compare_ () { cmp "$@"; } fi # Usage: compare EXPECTED ACTUAL # # Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more. # Otherwise, propagate $? to caller: any diffs have already been printed. compare () { # This looks like it can be factored to use a simple "case $?" # after unchecked compare_dev_null_ invocation, but that would # fail in a "set -e" environment. if compare_dev_null_ "$@"; then return 0 else case $? in 1) return 1;; *) compare_ "$@";; esac fi } # ----------------------------------------------------------------------------- # If you want to override the testdir_prefix_ function, # or to add more utility functions, use this file. test -f "$srcdir/init.cfg" \ && . "$srcdir/init.cfg" # ============================================================================= # Set up the environment for the test to run in. 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 ����������������������������gnulib-20210822~d383792/tests/locale.c��������������������������������������������������������������0000664�0000000�0000000�00000005051�14110572173�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program that prints the names of the categories of the current locale. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <locale.h> #include <stdio.h> #include <stdlib.h> /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Specification: <https://pubs.opengroup.org/onlinepubs/9699919799/utilities/locale.html> Here we implement only the invocation without any command-line options. */ static const char * defaulted_getenv (const char *variable) { const char *value = getenv (variable); return (value != NULL ? value : ""); } static void print_category (int category, const char *variable) { const char *value = defaulted_getenv (variable); if (value[0] != '\0' && defaulted_getenv ("LC_ALL")[0] == '\0') /* The variable is set in the environment and not overridden by LC_ALL. */ printf ("%s=%s\n", variable, value); else printf ("%s=\"%s\"\n", variable, setlocale (category, NULL)); } int main (void) { setlocale (LC_ALL, ""); printf ("LANG=%s\n", defaulted_getenv ("LANG")); print_category (LC_CTYPE, "LC_CTYPE"); print_category (LC_NUMERIC, "LC_NUMERIC"); print_category (LC_TIME, "LC_TIME"); print_category (LC_COLLATE, "LC_COLLATE"); print_category (LC_MONETARY, "LC_MONETARY"); print_category (LC_MESSAGES, "LC_MESSAGES"); #ifdef LC_PAPER print_category (LC_PAPER, "LC_PAPER"); #endif #ifdef LC_NAME print_category (LC_NAME, "LC_NAME"); #endif #ifdef LC_ADDRESS print_category (LC_ADDRESS, "LC_ADDRESS"); #endif #ifdef LC_TELEPHONE print_category (LC_TELEPHONE, "LC_TELEPHONE"); #endif #ifdef LC_MEASUREMENT print_category (LC_MEASUREMENT, "LC_MEASUREMENT"); #endif #ifdef LC_IDENTIFICATION print_category (LC_IDENTIFICATION, "LC_IDENTIFICATION"); #endif printf ("LC_ALL=%s\n", defaulted_getenv ("LC_ALL")); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/macros.h��������������������������������������������������������������0000664�0000000�0000000�00000011471�14110572173�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Common macros used by gnulib tests. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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/>. */ /* This file contains macros that are used by many gnulib tests. Put here only frequently used macros, say, used by 10 tests or more. */ #include <stdio.h> #include <stdlib.h> #ifndef FALLTHROUGH # if (__GNUC__ >= 7) || (__clang_major__ >= 10) # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #endif /* Define ASSERT_STREAM before including this file if ASSERT must target a stream other than stderr. */ #ifndef ASSERT_STREAM # define ASSERT_STREAM stderr #endif /* ASSERT (condition); verifies that the specified condition is fulfilled. If not, a message is printed to ASSERT_STREAM if defined (defaulting to stderr if undefined) and the program is terminated with an error code. This macro has the following properties: - The programmer specifies the expected condition, not the failure condition. This simplifies thinking. - The condition is tested always, regardless of compilation flags. (Unlike the macro from <assert.h>.) - On Unix platforms, the tester can debug the test program with a debugger (provided core dumps are enabled: "ulimit -c unlimited"). - For the sake of platforms where no debugger is available (such as some mingw systems), an error message is printed on the error stream that includes the source location of the ASSERT invocation. */ #define ASSERT(expr) \ do \ { \ if (!(expr)) \ { \ fprintf (ASSERT_STREAM, "%s:%d: assertion '%s' failed\n", \ __FILE__, __LINE__, #expr); \ fflush (ASSERT_STREAM); \ abort (); \ } \ } \ while (0) /* Like ASSERT, except that it uses no stdio. Requires #include <string.h> and #include <unistd.h>. */ #define ASSERT_NO_STDIO(expr) \ do \ { \ if (!(expr)) \ { \ WRITE_TO_STDERR (__FILE__); \ WRITE_TO_STDERR (":"); \ WRITE_MACROEXPANDED_INTEGER_TO_STDERR (__LINE__); \ WRITE_TO_STDERR (": assertion '"); \ WRITE_TO_STDERR (#expr); \ WRITE_TO_STDERR ("' failed\n"); \ abort (); \ } \ } \ while (0) #define WRITE_MACROEXPANDED_INTEGER_TO_STDERR(integer) \ WRITE_INTEGER_TO_STDERR(integer) #define WRITE_INTEGER_TO_STDERR(integer) \ WRITE_TO_STDERR (#integer) #define WRITE_TO_STDERR(string_literal) \ { \ const char *s = string_literal; \ int ret = write (2, s, strlen (s)); \ (void) ret; \ } /* SIZEOF (array) returns the number of elements of an array. It works for arrays that are declared outside functions and for local variables of array type. It does *not* work for function parameters of array type, because they are actually parameters of pointer type. */ #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* STREQ (str1, str2) Return true if two strings compare equal. */ #define STREQ(a, b) (strcmp (a, b) == 0) /* Some numbers in the interval [0,1). */ extern const float randomf[1000]; extern const double randomd[1000]; extern const long double randoml[1000]; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/minus-zero.h����������������������������������������������������������0000664�0000000�0000000�00000004526�14110572173�0017731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for floating-point negative zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ /* Keep in sync with m4/minus-zero.m4! */ #include <float.h> /* minus_zerof represents the value -0.0f. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. ICC 10.0 has a bug when optimizing the expression -zero. The expression -FLT_MIN * FLT_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static float compute_minus_zerof (void) { return -FLT_MIN * FLT_MIN; } # define minus_zerof compute_minus_zerof () #else float minus_zerof = -0.0f; #endif /* minus_zerod represents the value -0.0. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zerod (void) { return -DBL_MIN * DBL_MIN; } # define minus_zerod compute_minus_zerod () #else double minus_zerod = -0.0; #endif /* minus_zerol represents the value -0.0L. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. IRIX cc can't put -0.0L into .data, but can compute at runtime. ICC 10.0 has a bug when optimizing the expression -zero. The expression -LDBL_MIN * LDBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static long double compute_minus_zerol (void) { return -LDBL_MIN * LDBL_MIN; } # define minus_zerol compute_minus_zerol () #else long double minus_zerol = -0.0L; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/mmap-anon-util.h������������������������������������������������������0000664�0000000�0000000�00000005222�14110572173�0020451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some auxiliary stuff for using mmap & friends. Copyright (C) 2002-2021 Free Software Foundation, Inc. This 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 2 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. */ #if defined _WIN32 && !defined __CYGWIN__ /* ------------------------ Windows ------------------------ */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <winerror.h> # define PROT_NONE PAGE_NOACCESS # define PROT_READ PAGE_READONLY # define PROT_READ_WRITE PAGE_READWRITE static void * mmap_zeromap (void *map_addr_hint, size_t map_len) { if (VirtualAlloc ((void *)((uintptr_t) map_addr_hint & -0x10000), (((uintptr_t) map_addr_hint + map_len - 1) | 0xffff) + 1 - ((uintptr_t) map_addr_hint & -0x10000), MEM_RESERVE, PAGE_NOACCESS) && VirtualAlloc (map_addr_hint, map_len, MEM_COMMIT, PAGE_READWRITE)) return map_addr_hint; else return (void *)(-1); } int munmap (void *addr, size_t len) { if (VirtualFree (addr, len, MEM_DECOMMIT)) return 0; else return -1; } int mprotect (void *addr, size_t len, int prot) { DWORD oldprot; if (VirtualProtect (addr, len, prot, &oldprot)) return 0; else return -1; } #else /* ------------------------ Unix ------------------------ */ # include <sys/types.h> # include <sys/mman.h> # include <fcntl.h> # ifndef PROT_NONE # define PROT_NONE 0 # endif # define PROT_READ_WRITE (PROT_READ|PROT_WRITE) # if HAVE_MAP_ANONYMOUS # define zero_fd -1 # define map_flags MAP_ANONYMOUS | MAP_PRIVATE # else # ifndef MAP_FILE # define MAP_FILE 0 # endif static int zero_fd; # define map_flags MAP_FILE | MAP_PRIVATE # endif static void * mmap_zeromap (void *map_addr_hint, size_t map_len) { # ifdef __hpux /* HP-UX 10 mmap() often fails when given a hint. So give the OS complete freedom about the address range. */ return (void *) mmap ((void *) 0, map_len, PROT_READ_WRITE, map_flags, zero_fd, 0); # else return (void *) mmap (map_addr_hint, map_len, PROT_READ_WRITE, map_flags, zero_fd, 0); # endif } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/nan.h�����������������������������������������������������������������0000664�0000000�0000000�00000005063�14110572173�0016372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for not-a-number. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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/>. */ /* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The former does not support NaN and its isnan() implementation returns zero for all values. */ #if defined __MVS__ && defined __IBMC__ && !defined __BFP__ # error "NaN is not supported with IBM's hexadecimal floating-point format; please re-compile with -qfloat=ieee" #endif /* NaNf () returns a 'float' not-a-number. */ /* 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. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI) static float NaNf () { static float zero = 0.0f; return zero / zero; } #else # define NaNf() (0.0f / 0.0f) #endif /* NaNd () returns a 'double' not-a-number. */ /* 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. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI) static double NaNd () { static double zero = 0.0; return zero / zero; } #else # define NaNd() (0.0 / 0.0) #endif /* NaNl () returns a 'long double' not-a-number. */ /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the 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. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static long double NaNl () { static long double zero = 0.0L; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/nap.h�����������������������������������������������������������������0000664�0000000�0000000�00000010563�14110572173�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Assist in file system timestamp tests. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #ifndef GLTEST_NAP_H # define GLTEST_NAP_H # include <limits.h> # include <stdbool.h> # include <intprops.h> /* Avoid a conflict with a function called nap() on UnixWare. */ # if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer, UnixWare */ # include <unistd.h> # undef nap # define nap gl_nap # endif /* Name of the witness file. */ #define TEMPFILE BASE "nap.tmp" /* File descriptor used for the witness file. */ static int nap_fd = -1; /* Return A - B, in ns. Return 0 if the true result would be negative. Return INT_MAX if the true result would be greater than INT_MAX. */ static int diff_timespec (struct timespec a, struct timespec b) { time_t as = a.tv_sec; time_t bs = b.tv_sec; int ans = a.tv_nsec; int bns = b.tv_nsec; int sdiff; ASSERT (0 <= ans && ans < 2000000000); ASSERT (0 <= bns && bns < 2000000000); if (! (bs < as || (bs == as && bns < ans))) return 0; if (INT_SUBTRACT_WRAPV (as, bs, &sdiff) || INT_MULTIPLY_WRAPV (sdiff, 1000000000, &sdiff) || INT_ADD_WRAPV (sdiff, ans - bns, &sdiff)) return INT_MAX; return sdiff; } /* If DO_WRITE, bump the modification time of the file designated by NAP_FD. Then fetch the new STAT information of NAP_FD. */ static void nap_get_stat (struct stat *st, int do_write) { if (do_write) { ASSERT (write (nap_fd, "\n", 1) == 1); #if defined _WIN32 || defined __CYGWIN__ /* On Windows, the modification times are not changed until NAP_FD is closed. See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-writefile> */ close (nap_fd); nap_fd = open (TEMPFILE, O_RDWR, 0600); ASSERT (nap_fd != -1); lseek (nap_fd, 0, SEEK_END); #endif } ASSERT (fstat (nap_fd, st) == 0); } /* Given a file whose descriptor is FD, see whether delaying by DELAY nanoseconds causes a change in a file's mtime. OLD_ST is the file's status, recently gotten. */ static bool nap_works (int delay, struct stat old_st) { struct stat st; struct timespec delay_spec; delay_spec.tv_sec = delay / 1000000000; delay_spec.tv_nsec = delay % 1000000000; ASSERT (nanosleep (&delay_spec, 0) == 0); nap_get_stat (&st, 1); if (diff_timespec (get_stat_mtime (&st), get_stat_mtime (&old_st))) return true; return false; } static void clear_temp_file (void) { if (0 <= nap_fd) { ASSERT (close (nap_fd) != -1); ASSERT (unlink (TEMPFILE) != -1); } } /* Sleep long enough to notice a timestamp difference on the file system in the current directory. Use an adaptive approach, trying to find the smallest delay which works on the current file system to make the timestamp difference appear. Assert a maximum delay of ~2 seconds, more precisely sum(2^n) from 0 to 30 = 2^31 - 1 = 2.1s. Assumes that BASE is defined, and requires that the test module depends on nanosleep. */ static void nap (void) { struct stat old_st; static int delay = 1; if (-1 == nap_fd) { atexit (clear_temp_file); ASSERT ((nap_fd = creat (TEMPFILE, 0600)) != -1); nap_get_stat (&old_st, 0); } else { ASSERT (0 <= nap_fd); nap_get_stat (&old_st, 1); } if (1 < delay) delay = delay / 2; /* Try half of the previous delay. */ ASSERT (0 < delay); for (;;) { if (nap_works (delay, old_st)) return; if (delay <= (2147483647 - 1) / 2) { delay = delay * 2 + 1; continue; } else break; } /* Bummer: even the highest nap delay didn't work. */ ASSERT (0); } #endif /* GLTEST_NAP_H */ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/null-ptr.h������������������������������������������������������������0000664�0000000�0000000�00000002232�14110572173�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a NULL pointer, without letting the compiler know it. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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 <stdlib.h> /* Return NULL. Usual compilers are not able to infer something about the return value. */ static void * null_ptr (void) { unsigned int x = rand (); unsigned int y = x * x; if (y & 2) return (void *) -1; else return (void *) 0; } /* If you want to know why this always returns NULL, read https://en.wikipedia.org/wiki/Quadratic_residue#Prime_power_modulus . */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/randomd.c�������������������������������������������������������������0000664�0000000�0000000�00000106522�14110572173�0017237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some random 'double' numbers used by gnulib tests. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "macros.h" /* Some numbers in the interval [0,1). */ const double randomd[1000] = { /* Some not so random numbers at the beginning. */ 0.0, /* Then some numbers generated by GNU clisp. */ 0.89255299921822260894833866359, 0.56160033401164667976788987953, 0.51743003502243816003616725706, 0.78419011286685927826225711525, 0.64400370685467819470063888148, 0.38151255107934048933308886009, 0.279822118770531878839000163945, 0.51983544681375980919751125922, 0.314601557551148376372971500376, 0.44551938964685651088492647794, 0.44235192503793823441729544512, 0.0040120762636767874958681841509, 0.57608572759464216512285032474, 0.69151953350396585566714564265, 0.65634190642598148152780718322, 0.68520459394253807590733184567, 0.60728078832107635628786818115, 0.376679934380311318950949959986, 0.48893422455419005003224231708, 0.59664228319132670346209747371, 0.70162191594290728927555900075, 0.70981089000005327192380201706, 0.480574069305863387682360414433, 0.369264627455974856929910550376, 0.42224495444170593700839286742, 0.96974027194201320964041066537, 0.69950081092902694549973698004, 0.366921803754944985368022837045, 0.19460757354611588216534077527, 0.046437559879825520495822908204, 0.57694149138457596563075731094, 0.49632733844850578203860859535, 0.80735347459453553970910033766, 0.210271595033975357161360058967, 0.176539870249396534142059724214, 0.75320267419158828905982021879, 0.09535042912249636739069790414, 0.41433965906065337672703334968, 0.62189345390648146852641556292, 0.322595610794052908153116342595, 0.173860860827838938281708881865, 0.55258425878412963601205794028, 0.066559056629606284504735241978, 0.0193835990781649263368095562556, 0.127101629778251450428653553143, 0.9603475517586241593077319367, 0.68429794014738591042302507235, 0.0139808909843634026741151214975, 0.0036035679428138856395527711611, 0.072656401341518399752950821809, 0.229562863635014486626281702425, 0.88337277579960676546469424767, 0.88850212167800818244030104263, 0.208063225990716089095767541316, 0.268304917462565269805874454916, 0.3195427196271617997151392088, 0.59101407246003811289573881403, 0.972093867752368095080492689, 0.409246208960242309650511849637, 0.84250639316418167849010246997, 0.063842712141624332977179722113, 0.96470327141354888687046060373, 0.43109879978424216966175314888, 0.14551248610248934836482236208, 0.84819094513299136408788493212, 0.41166757935215520377191731704, 0.96020915727830366672170130175, 0.55313106883839046701902022583, 0.9796595451013758579218900134, 0.74222694300533435700276764516, 0.117294243075539310976051880564, 0.32216824750097146958151447387, 0.59090211400137031908131441, 0.116841680533127258304897076543, 0.83595865401141052310417569507, 0.249488155772987988074361149176, 0.67896015287499211280971531326, 0.72256498621401843299673078876, 0.327315362968271601258667297595, 0.37438214921868498405279953481, 0.76929694812658272272027330778, 0.44282297788821568912463681727, 0.59517407740270913902014268964, 0.346217547960702024419571713567, 0.68339868731911838904373225224, 0.057507087039986776837238366719, 0.1189343986186977384509521024, 0.65646666532916174831489781194, 0.80925124288745606089697795707, 0.61302937875769552609444313984, 0.64367434863387777107222872563, 0.059228300879437554416166010005, 0.76899237494115809397158171526, 0.335797991302131791511629123206, 0.72923178692628392090326699514, 0.79300056654108221012876564405, 0.58866760551158502690719665335, 0.65249222174748700395779659047, 0.79573528799715877963614353006, 0.101363067664632247385474166088, 0.392494669960902131436398643207, 0.37323453200630776302168616197, 0.29857554596542776498065634631, 0.9796202149626312305197715787, 0.58770219934833805722677794788, 0.126574575737099431915356308504, 0.51086682994362911961448609847, 0.26221303911946316754295166201, 0.87331402410090670707406246035, 0.08604799064198292716037672196, 0.77880380648915901962140523059, 0.34131646312914811415381942246, 0.422787222735822749759714960156, 0.16550478231620269333824890372, 0.84087065799129220871741135711, 0.96561976597443996963329538915, 0.059890627133354026356081805998, 0.09359839900604706997291172522, 0.61463026659668017286248279853, 0.220582135665522265733252389516, 0.30146695094150797543070759948, 0.406591688270652513808216198946, 0.206959751707199812083987569348, 0.71382992952779021033600406503, 0.98971690700151825984363090029, 0.86339958328134745391858859595, 0.70037828363249257457230217791, 0.97380974339470107231135690474, 0.9184635965630883290893011311, 0.418605216026507942885819265225, 0.61793227858714759711625818653, 0.67394880797682685081908511723, 0.98871101941805039780826467279, 0.65973593853137069988371349845, 0.93348525072186907424189028727, 0.59164378220465485142298641014, 0.95303768733773138214124075961, 0.88667310242538944858141870801, 0.83785319781204861623008709825, 0.54026788227426708201242457367, 0.74842599257855801522259951132, 0.286624102305531463268442510375, 0.41180484980938874161376712508, 0.22754664620316922947541651384, 0.62360609793949755240041318939, 0.3311618194042077047850111557, 0.315407885695867020730009836503, 0.215221706711430951961780213436, 0.168600630933631406101821024413, 0.62661489373200405241464923618, 0.95357070304277219756741072036, 0.5186418766697788447635039428, 0.70772930521061953327927296944, 0.410376884797056150221504703145, 0.39705302343406249619577860633, 0.79215885822696034431481699125, 0.157831717946112504384603002152, 0.26892306298536012837855426922, 0.15697088614321016223211167568, 0.41395315712905823355235182393, 0.043977876945327860015049914653, 0.91453495544799358550673657283, 0.46230093259088633973148827911, 0.79479146768024434444120965094, 0.1466704986407674407377422815, 0.093614591443204076599999803382, 0.66061870961706149406527099303, 0.087462146328394574476138187113, 0.79683664444310818297700615557, 0.39732728185755441060070738751, 0.141934473990413594291362391075, 0.63111751995951919258061547632, 0.78521985432793823024330967029, 0.53307346282606806792796696141, 0.61679109370763781010143645189, 0.40696293619387120891515025426, 0.68670343879278712242412028794, 0.0115112936831136012901340526452, 0.70866056737692430987650236649, 0.75378980574358943122474800795, 0.17133202766710894969283150847, 0.36771201738922655520549864974, 0.64614182581953931840374311331, 0.354495602088990708111406368474, 0.96418771817934443444348833491, 0.51633426669933834634574104246, 0.064671329812306055349433587193, 0.084335079914541732137341401384, 0.98578018340150609333535890283, 0.32988119060114570391488875477, 0.70568290443337103364762141207, 0.7501960060851696034137148851, 0.141312840936106004164373056114, 0.60721022154106372815080238296, 0.49179275887283771965744826261, 0.85530668893284708999269819019, 0.09730053915339358769067661488, 0.48817911888023094845428570434, 0.37116312252354470380676793579, 0.61870369881699387959990992873, 0.381874188039839457469043174076, 0.68193837613090719561872304949, 0.4773618313988618747215621251, 0.152383599292709764750406667286, 0.54317522808228983459963725598, 0.363848788591302782268887022354, 0.0105589810271147011378412305973, 0.55582445068669939957392951111, 0.99910376130213936748996659383, 0.90286867348280161480903197439, 0.48268382934936288156485037692, 0.0976084557356802030533675394, 0.29004949962481398455881920169, 0.99169758897256717005011514856, 0.20722895154834288274430061308, 0.50294863638464584121275744208, 0.71094033855350495714847377558, 0.94078709219520224551350834268, 0.48088262771516317628650315489, 0.80538698628980761175811796611, 0.83495029615293903361580945571, 0.67996381940825251937974905761, 0.57936805772275234468590364926, 0.41778137764942046281708286844, 0.161602687591454506771276482303, 0.093910625156097743113739432334, 0.45716763620641108625606409874, 0.96455075374827233820027584808, 0.5179966880512917274934448216, 0.046797382046060065926143985952, 0.83673567319931334127111064225, 0.44224504444533247245974476514, 0.73281179385894336737033582786, 0.5642490153724193432309549673, 0.83700200507325250303481208805, 0.152714941779871552944298597052, 0.38606607994977770238226473985, 0.0155140917516105439042442246577, 0.51621537013393688713546096688, 0.311969390991657895966526156064, 0.83890647777450698803932943984, 0.54370750820133482930695388638, 0.98636765788772465929756760473, 0.77334255661128878905675504339, 0.57070354296508751519811368688, 0.8365252076669013372866223481, 0.344601601940890721182485798794, 0.92658930620470543221158939208, 0.72724523363899270076210273102, 0.413672082025645586061788451734, 0.5132836422023222169840403333, 0.82135610583961360173883281975, 0.423835065039748889417547786563, 0.87083598844595488941471761572, 0.59009392451459866513886634656, 0.206124826643305920436961792363, 0.288685540685143988030522421633, 0.7944357933456167153993184889, 0.090945230657758780394996530608, 0.52981750421369669363095418817, 0.091368944984485824360107751981, 0.81824925769562351657564377069, 0.083315412912658535228751011063, 0.59602276778799576464600065047, 0.52258035262146456789454411102, 0.394692074165738897132014378974, 0.92031214264405188928824363967, 0.32812665356161216265971156268, 0.79754299890007289545033977389, 0.3029021512227565310021437326, 0.81425785760698537744367921928, 0.85199399843570233736733560413, 0.096629890212080240754541391968, 0.60643798959967098211181910285, 0.75368518979236587723780129098, 0.451368813651510369666120626045, 0.86189868235067352904955566961, 0.239506411296874624231401913963, 0.143392266376287906568670938457, 0.035585084401323981008798496622, 0.89407531932950775763701297226, 0.56699767164913732414312190205, 0.6107715946195223295493238966, 0.980870588312723808697191463, 0.37603666613089681502774907483, 0.19565477083291620146833762404, 0.70326913680165706368122461762, 0.98247770640436619202690080984, 0.54911931698472764719220618506, 0.96749331150477343995263612791, 0.9349501605275792139661332597, 0.067704019779021886031495084945, 0.52883185005352261786874768842, 0.03879817199556086106868125058, 0.011268895714104342862021635882, 0.86781395233112768504418642287, 0.73610697666830606371057497872, 0.22595829849389174304359852447, 0.95990840938724981323147621815, 0.5938079875208820675776232526, 0.78655922365792476391655372464, 0.51099073264725007373467108776, 0.66474884887866769539664215292, 0.88640025828226102852258218854, 0.39889893489572927635368967129, 0.76340426725003756852384366924, 0.485534753598641026618647825146, 0.55957578573824837450384728978, 0.50840543283094885180866842941, 0.0102415845792896532313226969615, 0.74666891036262398733922051708, 0.49044748088989431070743849791, 0.184017043174756439606592004597, 0.0225210121470402648790231578307, 0.096909683465740960387467976065, 0.0521874432095560437920256545446, 0.108114343037383115951564617563, 0.77430486784405922952977031491, 0.73286432949907824441702845144, 0.083559249182272369453587951223, 0.074541345541671560054508020717, 0.55130541064331728019681677403, 0.101450912226971008587146654246, 0.74564503962660370005995595861, 0.55903832180264925580029280922, 0.86098138284846671753408133719, 0.76146956314354797691373262733, 0.5569854467166466965564479865, 0.61138555623626762560168304163, 0.93778268377974305185411499629, 0.106728342608615813606903105742, 0.51139895550624845300079248199, 0.8826404150665399364200384063, 0.79849755952621824621632991954, 0.60058338183244813128378689372, 0.57271235605091257806409062354, 0.134476676178095582804914204515, 0.62710051406343298533266304307, 0.21517566131268423511744492316, 0.87763268502269127056352092234, 0.259516013975152388767641295316, 0.54026961752737864438921779715, 0.0321012344232942464157113655476, 0.047765687217921465801489989111, 0.17851281529041807770891682623, 0.67864372391481596436180177405, 0.27188630999531652193578141334, 0.76570352378902765382129471855, 0.55727605717645959087760838806, 0.40035295538031700787360193533, 0.65772683660586524086245866733, 0.87515739410383285146563935658, 0.51637173718066431535845791928, 0.32843440805452173782945632394, 0.46789250836790673252530282969, 0.153916136058705475580104911632, 0.38115724589238346986896925035, 0.96911901452270741576104655076, 0.327510878721849788805057952285, 0.52921188196053063832762822112, 0.357891066893689952162669812174, 0.8109495999496825638917226258, 0.87378695338223548954000159812, 0.071735687760291841872657613394, 0.22099818521305441851106524174, 0.61319403424123059973018445501, 0.49185069904977836269777464774, 0.8465618819298531473261910176, 0.88263955123256235889766657732, 0.264605739218701311737446373095, 0.157257748694727606809000832224, 0.61172692557424578980817509135, 0.89224381101792427145783648267, 0.049436313890546252030141534714, 0.78472068655126867546237630366, 0.94890896727672958163705440614, 0.61244719025309458330037069759, 0.69652639673616920270100103049, 0.82306805868313923466426022855, 0.4619352653236511042512479492, 0.248913888569715263431474781448, 0.64972077945521993267494748532, 0.058989138867897862567374093665, 0.97969837050674699927934092348, 0.112860503606029382332397067852, 0.9148268966080465389473749031, 0.80522292073416096202056634334, 0.80810563925192214527344776336, 0.082994810842601316055993203972, 0.58154183958194788097113770541, 0.91401321304178026032151961143, 0.064162440925738934087179609749, 0.15233762499249088696399602351, 0.05051666992337641462246832006, 0.138526581114846840617440323377, 0.3330645447918149831766264793, 0.217487368997014213919568641696, 0.61893770768550649722673903221, 0.48128956859001312165262121487, 0.67074178502738313699688470847, 0.74389636308055141796746779725, 0.78623735396470085242463142878, 0.74044466560335570728816983391, 0.44977042205766449238521848558, 0.04936658918716696558210777333, 0.46898154881467544198433735515, 0.86577421926732888331279455256, 0.351697801257336354285066689416, 0.44607679846684358775746123434, 0.68542184287580537292736482205, 0.044146424753083577398366558491, 0.84496717026871403905274974765, 0.20398318496314438897842101827, 0.75107700174605698650069666924, 0.178571061661964354577482608798, 0.67178502534981979941629966218, 0.90847842600882488644789391115, 0.073076683947302775918335357377, 0.33981323802799502107773228774, 0.88205531070102240708858032672, 0.52395959911163033140017417074, 0.339537812421755656306362620887, 0.54102447887624739438002987695, 0.99615637434542139613844677579, 0.91178029521112995461052949527, 0.75825739605806537625994927603, 0.20376049709427102495755901889, 0.414724980644126108685694310425, 0.33340705339227162790042902392, 0.63442350111338002489027718102, 0.79083735924049231993808201264, 0.7022290803727963570326957922, 0.073051026670174816217706335151, 0.50842348505687696224462184336, 0.32363091931107924009593033016, 0.097074638787613630803324174721, 0.79231345620836950165162896374, 0.46134517653790366185204412042, 0.87767180094474465071641454817, 0.30504377737897498569142680272, 0.96430402804903305707372788262, 0.58722709934909516402891605024, 0.36287829330987989626587492725, 0.341369045118572012709880807167, 0.18622546427505557603629823709, 0.71794779555885705340742601105, 0.098775720656078510422828040021, 0.94170390436210924588938028149, 0.6256516749208606216856038288, 0.84990648194056707180867958453, 0.24897158268824763099382644974, 0.67126976686560821454618204853, 0.18287142221906188751198231263, 0.58301735289988287890086250316, 0.39451451502323596545833498888, 0.64778726863510310777659172018, 0.344060647976610102257104623935, 0.8543225374577925606075052273, 0.41721025737118350088955048104, 0.346301150923723212219486824146, 0.430145349151890094004681136873, 0.083653676599147505357408467754, 0.89927285917733406113015320169, 0.87717630249665962395834008139, 0.114609060439245285884826496387, 0.19079403943711412757743782207, 0.095752662525740063245815699042, 0.79249438764728213221559489213, 0.36889557473162465630046043798, 0.076691690566591062968137595944, 0.82502767429905549906741868154, 0.7665582347663079379259164121, 0.40329445688627141530172819257, 0.76025417855373928649612014969, 0.67742016809536470259225177395, 0.56458198627250149175789836481, 0.78923506303765674533158921804, 0.242546191857944356752822856477, 0.5429792204847717222270173404, 0.7269010821579782458839227112, 0.68884017933657182784660476876, 0.037868346502260087811459749823, 0.5900507745679403546108564628, 0.2867946536016681954708929644, 0.47061390957475445523849010039, 0.51289737877965767076806069599, 0.422963220866519099525024712084, 0.056516063514784913538055836342, 0.77559606292381102490968685122, 0.44812023547000818124896526252, 0.8496368064876247362896528731, 0.272242276648834925536741986616, 0.21366791927514210787832263868, 0.458126557153035507756298880855, 0.59095285049337797286946531198, 0.41387171106200290943847880691, 0.040527832792286543640976926214, 0.84749051864346812142321430329, 0.6591922374100337646083630177, 0.30504037894556796180304594549, 0.69588062596190762407598122745, 0.54615362946297678668402889519, 0.27179536774730804380125320985, 0.16312965572910266758089041195, 0.60443803311418335000528681396, 0.76221957063947757300487766314, 0.0012561481228798307955579245318, 0.38477311712200424042679172286, 0.86336953839931184684851388121, 0.85132017314817690655384788334, 0.79741410166633177181313320738, 0.81142674213295830272567127246, 0.90095974521916505411272740187, 0.461262866736651478343958282766, 0.163149749038393754125992055513, 0.079563568933303239293664877234, 0.0076308467066608702534098522771, 0.74020408989686798939059759005, 0.68004244363120265645245845544, 0.99423282025586676895879517721, 0.256512790150101579655974619204, 0.15841489307390214447222985222, 0.53156533193583516285295078457, 0.51195175518666885397864463638, 0.2688502522458221215136352473, 0.290743998007688539265414246556, 0.375642431327791011131765421904, 0.73366824563603699669790620984, 0.89031055476039433366324605036, 0.63269458446317741594059410575, 0.79677646360837164675956632, 0.91096051787867659208019728176, 0.056411022047894420770349313174, 0.7117937367428418076554349793, 0.494496454398059649677550547185, 0.9944698091905991687808626336, 0.195654008095567563746040882677, 0.33245249703376584453346565181, 0.91671965905832444523554539619, 0.104159073216349402499760928077, 0.78250381705179599027513221262, 0.82221952254403323129879405024, 0.25404653774104883427079980313, 0.89334850648967094099280368977, 0.2721479244387740074938025269, 0.58627710421889854554604323774, 0.80740872172002770008164688167, 0.295213737773499230779293451686, 0.366266263469556210902410635735, 0.72189449997560167388059780325, 0.91339160960295327548014703572, 0.27978723834100283634925494393, 0.44312275285067091147157546317, 0.88264479919648468925459438057, 0.74860386620420068665117140949, 0.97534502025842784289380076051, 0.183653687608870314454061893335, 0.14143760686328530307343938507, 0.7794390875763962068165432699, 0.79988123088296718350409621263, 0.91344402454829897860268279997, 0.3003753710559256572305330721, 0.92236868180619898327118824659, 0.85128995509445007265453349716, 0.51226586850988855988005111668, 0.59328586801467434659081264762, 0.131543061349700789237108200816, 0.97962864281984756641024957818, 0.80003961712390827564285728721, 0.07332191035039234849987853587, 0.33710892945255754021249327366, 0.237798240512212115424045579506, 0.050628096786899757905464602857, 0.36368141580193860149061967396, 0.074547282281222729072803274018, 0.32013351651022219595136046535, 0.50087363542319392259892635316, 0.95534128322832584718763016378, 0.63089810554419660091974256912, 0.45937043591639452731937380837, 0.77794827072126710252068287081, 0.5833967217973934570703322242, 0.89948711130168823436943591707, 0.88448792344727137087709578749, 0.75774410588649351850782212564, 0.51545850808454807305763364038, 0.89535564141616759448334976604, 0.433876155086630438489414332084, 0.263145194001722566517185175524, 0.094513715303174637696079970882, 0.0067905149976316075236601623182, 0.3746548325271489972742277758, 0.81418012245523025207375976459, 0.7382555515800124086679648947, 0.71505454385778976492869269043, 0.7698698840252614242858413632, 0.53096667868591647121855295207, 0.5913146508318579789498085478, 0.82865413011200335887487636747, 0.246477924915753655378269255135, 0.7718625116939460952174295485, 0.33088224685104582360581424038, 0.077396220323469426942810035952, 0.399851739373243384531661374094, 0.74828949567652386217126904324, 0.55533476993642340021791702209, 0.475356366587838670689554086714, 0.99199926249299355831492581518, 0.60739053074816626181185925167, 0.94570422855790142383862352906, 0.67410117583869264525962136333, 0.99340016295179621471645098914, 0.30521664837678549625426072163, 0.82786899862234431119578444516, 0.0246054418785779831964997687095, 0.33057040500642957115284791089, 0.325865542252271051046671982904, 0.116469964535698881624567000313, 0.38792519202192930208550481713, 0.147033252049062199325747990948, 0.333360890210745561370686771174, 0.267717098935309378552279527125, 0.473606191830554736751491306975, 0.69379726024488030302072707274, 0.39866105325920152799379542147, 0.075996151521605600512218326895, 0.43692155239290098173990417979, 0.63183509185797834489905365016, 0.327726835190132824885685947736, 0.82769389015654780671213364517, 0.38036542617183448008870457384, 0.06416363778906221378580326597, 0.95989693996326393340364540321, 0.77473792948077472252492320019, 0.73353080354752465520384745159, 0.79531316211939777703706647305, 0.31887745411495362933791547194, 0.5504233366621661345254817397, 0.133841546560512334978343647306, 0.93323316393590598213508657757, 0.219534116905903225236593922786, 0.352227557302752346568799070044, 0.50699048681296139093781410327, 0.56063256677949754339755086295, 0.97859418495668224120337606178, 0.43217748779939454097021337034, 0.6118800794139137562939270606, 0.8826339041571606455078384688, 0.190654349423411314990846249777, 0.0272323818569649486990095499454, 0.13501820915175992368033644254, 0.34430252524220055863712676536, 0.135013324503164182485257894453, 0.83301344777287732687815180326, 0.71146270180847724757833953093, 0.059584725284656364940760846576, 0.124388342467555907606115942139, 0.86760011350010388002288781466, 0.43443235444248399222879725088, 0.62257025564267773540408523682, 0.42224480338939459869117553607, 0.122203729563367693705179104655, 0.86763329805228175173701751082, 0.61852711996472568821866689006, 0.9981036801779161471700405786, 0.177126618334123901292041594724, 0.37033568941002233661950847289, 0.81720705981865203019383851894, 0.194752883553301253160228353622, 0.5399475493930702257701115294, 0.21555050095259535717046390477, 0.031480898918419061738395489394, 0.0108626235742996694506893658131, 0.29439861659506237876675916168, 0.25969803792963051605662393213, 0.64305111681301349941082616522, 0.398301763391130971280749586885, 0.82959279528518208376169366062, 0.494452121232255582677051524076, 0.032046850110252624668328949032, 0.304808216164121089322038632124, 0.43743086801077933536332835933, 0.067635143022119684849606244687, 0.062601171413915686472972559687, 0.80704249768256597155262089974, 0.049090587901867220876053770281, 0.14290280489067737067786839775, 0.85153414385190808252068833198, 0.052035578866778404379096518691, 0.84803461110488710482683367176, 0.323391780352303842858779454674, 0.52713499343541339922976296515, 0.91034109375479019837692785976, 0.106146556890642346491650008212, 0.291532189474064930184344798145, 0.330494959183718721493342551525, 0.6236537208920888603043773443, 0.89122121355780761549659392994, 0.51799810738861013193016943087, 0.249256177739037963581221438965, 0.76322106809612787470242640888, 0.97852511972383831461233976406, 0.52255677693690499607690355455, 0.4450034860583097087122794844, 0.79114162250324775713725095404, 0.94756217345536380876998110362, 0.58677918818329126036021764787, 0.84845252924877884299669190981, 0.30081720041370757827674016113, 0.27920525653128846538023076229, 0.33471466998109052439193176801, 0.77432114969973711331784009482, 0.79975078898170550460312445454, 0.90029380309155505829673878957, 0.22735855793472972935624370264, 0.83917898101167717908999667914, 0.96001063929762371813642857618, 0.80557845129235602137075744771, 0.227828260252387705994553631692, 0.45514459312672738783331856798, 0.6996049090759249573037751274, 0.76407211467383802388153449844, 0.35750763601712374361686514082, 0.090157662209549066428683554241, 0.95043897530001474792481472865, 0.97262166470012788338731033975, 0.203045895422423613196589718133, 0.217437635156560627036179586425, 0.5222956932204809424910993278, 0.52865060708104384493756729767, 0.97715373213739469800445297208, 0.5740174414400501666597490431, 0.172348314420047937640907870932, 0.57197038071649167881433868039, 0.26289948915209002196358225729, 0.177903112174726341611524884074, 0.74917239660013094610681443816, 0.59837085384984040836442442706, 0.065070324689375259831989322427, 0.44807493892928848916566949155, 0.59027783360778386064107723777, 0.122058971772529617939528531479, 0.18965096763129552013799044806, 0.179455202785822708296801760066, 0.032170979041981235014758366854, 0.297222966386620738492021519056, 0.91323423393143490893801153646, 0.75998869946268189685327906564, 0.83934073246383862944110864099, 0.17898779712956184324621175982, 0.480986398855505957279379560397, 0.60860751560721289727164165043, 0.298927282590269088379100218673, 0.77935020447343759584143119835, 0.480545242963934573648858250607, 0.85619790637736236353631524289, 0.96488893882602300700764346564, 0.36351865634843046736230405883, 0.82895257550724293657223335349, 0.79749691055514662573933190753, 0.20106705267868388883102752272, 0.33623918491977977623116871123, 0.93256466340279772952587363977, 0.88648669501682764515636262464, 0.47662235152771500250187825963, 0.52659238455883068245922982067, 0.94111676559395948458425469814, 0.323317713690175795284098362026, 0.34796405933091263994264450729, 0.52445433363119391822452105405, 0.525140277317638922334264421, 0.64469482443585357444532895759, 0.33472685924872903603447879104, 0.42400458791646499703641118014, 0.8222662798441265944554029489, 0.75524567154228028735673060411, 0.90790601849806560799894333131, 0.75164241313793249434488428193, 0.38724602290468111557712203885, 0.36352513950081020449187506395, 0.078398790907179055722325452963, 0.5003676822199407758422514133, 0.86055044548361328714384972985, 0.66748567445598821900669819042, 0.95450644393912187127659765969, 0.9536501355878008523425355652, 0.56207573012593503802043957099, 0.99057795680550440527031916411, 0.056136908924222021770088579728, 0.89322960593560085272815946927, 0.19380351076299398770342941398, 0.036881975481577328074706357897, 0.38834900979665334617449710449, 0.77196507761008668275581490587, 0.87539115393397618421355963533, 0.9131721846286054396553858461, 0.62245648254908013430163665866, 0.56021174819199355559539089633, 0.86987294559046384230921358438, 0.474584307464076041054198211805, 0.37224942408757353492416873571, 0.198307276357215222087716993615, 0.81633548414328354008913860616, 0.071192681637945014051745371309, 0.227203421058334439883665388655, 0.50527083273847576806586104904, 0.25911353175247232791676189983, 0.103567996992606824957067451526, 0.98316826751311017109085781757, 0.99206610065531611133123425907, 0.63838444880264351660305680771, 0.90013304139719692321619239255, 0.541419881593941428911392944, 0.434681681520065487913409442927, 0.0277935905905462584654818408167, 0.28736085880215502013374946299, 0.204706679291990486471085620508, 0.29639415300325412139805373353, 0.316818074164048785111401123944, 0.58068268044073033182148412246, 0.137736206950094621238996907006, 0.80907996549523150166492783923, 0.73799561611209772635015717353, 0.84013433924397440368969968592, 0.46126521311414726401422152854, 0.78013716447507497359555980298, 0.83405708922951231042933175851, 0.6366367969739079258896472192, 0.77353748358406402598000037557, 0.17489624725635947111471117775, 0.80267952648428412026314875447, 0.80437106861315296029137160672, 0.62834462177566783487584779777, 0.31539602345858033626133832055, 0.50541890853061839219557074283, 0.0195874476781850222509795360627, 0.011676447193909007242643314705, 0.85675479754070644130150816794, 0.09391269154749661204040398199, 0.369625667102334643216258483376, 0.84311577046357953313746551837, 0.66438426715728382263582851036, 0.70530906415261448155650458603, 0.446783684004800041373395690117, 0.75627790284213576819810990131, 0.57190285913753158265774292274, 0.97785681370875218892539297465, 0.0244503386494348881614690746194, 0.48528430854909558202793141933, 0.89436155397807056672243211894, 0.40757489194485346255194449191, 0.91772837786834838909335779229, 0.28020326531649972709359017096, 0.28847822326776188982020803144, 0.93193769743225684077624356649, 0.58336147304815741644785105161, 0.4004241800179331174134885947, 0.265790823692672203607418801725, 0.4137092141145146388568879939, 0.0255090449126572366852573357318, 0.47601725598948555645487446626, 0.69141516452580797436419291497, 0.187709862166242786826507443003, 0.31177816288567708916778389045, 0.79635247302484103596788484137, 0.14648403361265752358955335086, 0.0088027047060531475573345163528, 0.90053967411241805345616039474, 0.373822238382428585287035417224, 0.94303097002109978273901800507, 0.037263906643698883423150604649, 0.98416823398276433881119247311, 0.257766562836474661728601317803, 0.09336855716941364387765222813, 0.057604551843195630210060755775, 0.37732024813036636644231432449, 0.437099108019093398068604946814, 0.0298274889889844501626534131975, 0.54161045457572229928359302347, 0.354192069739745951755754451894, 0.9952629304832433588789284291, 0.61362350596285189174752077338, 0.23176197923774029736185020682, 0.259000332877923815426717028414, 0.77171708810079063604185854121, 0.87278431247491539306511051532, 0.386310463821549823085972724515, 0.19043920209178263945663905422, 0.77200547833114724875436606573, 0.2683024354984293205497398925, 0.144270112550972640008446091075, 0.36996280314557984925474224612, 0.163548224543250866742712583905, 0.54541238293503241055380526708, 0.54270760938500008382580072956, 0.7374073253240524865446763851, 0.93470960326436177572863031654, 0.71417607213823278615975270201, 0.65837463356664939532769528292, 0.433323451649582925271830911365, 0.79664580661766246494864588315, 0.392079017934601610514677836005, 0.212454387416532999103471570235, 0.198678082418012501322802116335, 0.61525672800559338657275986197, 0.99339589895181138684928419014, 0.53563057949945927383392076793, 0.68817192513245948798192690082, 0.59671938169380086666866042956, 0.5686075254645125832635026196, 0.25860953535454698758704936914, 0.60779864941995215785819783969, 0.46515241662568547274625942204, 0.8756966078479474164213834749, 0.89153160343113076353740745469, 0.57055911159151577684982200009, 0.39366246576557783924065683256, 0.53789676931469921495851209609, 0.95842028586447684249630374944, 0.25218284880717367924827402845, 0.23718965807272971860203662735, 0.334222632819004380754702693406, 0.6370849366068287810411454729, 0.722665796162802454203702773, 0.50216248905279887048328225791, 0.34529823309520970630714708672, 0.45098892404492692601908443802, 0.64640019115293913591196874603, 0.137077316379736192931987264458, 0.29368115076039970149731521521, 0.20091822953913855557804069085, 0.066267083813833718511605782276, 0.88094596104423280074202839474, 0.071730322265966936504743175424, 0.69735904142296779896396736035, 0.91352594564083795862432502567, 0.13244220377041278512040316988, 0.6283911312781029516331064494, 0.34896540167805105781090114462, 0.6795367801751911186206756471, 0.74898526486791573083377925403, 0.71700182398199203349731046015, 0.121142833366516620257163901501, 0.32678002036857151533698078636, 0.327511655875027224450064555456, 0.0079152053645354575349489795814, 0.84748954479623021059675156738, 0.75041561033954009809301550159, 0.41101693712463238996746228193, 0.90155864029338267639417046915, 0.35464670537047753945618208157, 0.68848712573944472430623590326, 0.08893193373618063124738179594, 0.58932830480784385636485098641, 0.0501618828375381577588978271165, 0.9451968329901169788400753848, 0.074994725566097580721185016702, 0.191860088196691871607965261685, 0.67853841063536805868885844477, 0.179445375284033906887325905976, 0.84157620913886056000430779083, 0.7377942162322144186341324232, 0.231126715579023126062082806996, 0.127662509645324778320005407937, 0.63062414859560283674777403205, 0.55283326072907470543330204975, 0.81243486031688046850257374808, 0.299095175225750536694802628506, 0.34284433830834748530634854762, 0.92098838107935607957057329632, 0.6334432153537539286206936299, 0.49203336326915182548719200464, 0.70089872986754081776092540042, 0.410346112246289262244008861334, 0.689375704219352519232614571, 0.53543492718830214408075484368, 0.78985504761729292283075540625, 0.66802245726332267870092702429, 0.75600588548341120124374250114, 0.83217485519464083512235296359, 0.77758150309412736979136465746, 0.067382141804836913185384124002, 0.7289836962356747770023887674, 0.453434776313686590560640460504, 0.3160796148757468204057886796, 0.0098933475787107681104048511314, 0.3620064234142809735084479026, 0.85993179373877360456391909506, 0.90684883450763884954227285187, 0.75959171037325548903969803948, 0.91219881792279148536349496306, 0.97175430264940118917041244436, 0.292364544897748356834218017667, 0.126096590956329503351026499397, 0.058210669685805595156500555938, 0.207143479048534791976348255132, 0.202837039257860939456824357966, 0.459137240079351948795601640776, 0.65480905235794807223708347609 }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/randomf.c�������������������������������������������������������������0000664�0000000�0000000�00000057335�14110572173�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some random 'float' numbers used by gnulib tests. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "macros.h" /* Some numbers in the interval [0,1). */ const float randomf[1000] = { /* Some not so random numbers at the beginning. */ 0.0f, /* Then some numbers generated by GNU clisp. */ 0.5475547223118679f, 0.34246776881920316f, 0.5392890035773527f, 0.7659977466712314f, 0.981777728216802f, 0.5072714919036858f, 0.013067187372820088f, 0.5939129809588458f, 0.8656766279019622f, 0.543285432935587f, 0.7356789332482375f, 0.6949986883963228f, 0.24549627232115334f, 0.5284831161749963f, 0.5155532691206044f, 0.8675046320312618f, 0.352112379604797f, 0.5531511159170834f, 0.4257973252348133f, 0.7215227011042165f, 0.5575120018630739f, 0.2520519492903103f, 0.3456359201929342f, 0.25704815923113167f, 0.36057213750359796f, 0.6627651999069352f, 0.9999061791846359f, 0.9869721576506404f, 0.8396349108647587f, 0.34769391515131565f, 0.9340894521969932f, 0.5424808409822306f, 0.009382726801272945f, 0.7172447826859077f, 0.862397729700756f, 0.698392965223199f, 0.5195043146318105f, 0.49168444269756373f, 0.8264031891811243f, 0.7559060906638857f, 0.13266314830856785f, 0.2391629428441715f, 0.6017152131019616f, 0.22027189520650348f, 0.41925898119869f, 0.9274097872091516f, 0.7902048244468082f, 0.7108913340210198f, 0.10649031944572607f, 0.4266029692987955f, 0.03527535488878786f, 0.041331843037360594f, 0.5192104824436203f, 0.9009097004084897f, 0.7976802929045396f, 0.406765756509179f, 0.5500787292907248f, 0.026198771701358203f, 0.12938940955589706f, 0.6163301794397298f, 0.5965154938276138f, 0.9714248063895202f, 0.8829976598456185f, 0.3079142008721768f, 0.9019455967476253f, 0.08118502115829951f, 0.79418709457667f, 0.08285569847670116f, 0.7388464672002745f, 0.19694666240439862f, 0.8747285795149943f, 0.4980757738068192f, 0.8710864074610076f, 0.5544461192019553f, 0.5535366739219252f, 0.8531224096704118f, 0.7330647502773139f, 0.19476121177098882f, 0.003267433381226703f, 0.7096422499194498f, 0.7631455315718761f, 0.8265563116010316f, 0.08996624819434318f, 0.08077165367195172f, 0.3288910472794292f, 0.07699719779019476f, 0.3832581523706602f, 0.22795219564408464f, 0.6815889165475738f, 0.06883556931675017f, 0.6645883282279411f, 0.0026652915245360953f, 0.3775784864303784f, 0.26117239170369033f, 0.37101095156844266f, 0.6705894911858857f, 0.603874286017153f, 0.49138756556829855f, 0.4120191593751654f, 0.15568263909489088f, 0.8455843808967949f, 0.1557418126051161f, 0.7969282799780705f, 0.6416800273925315f, 0.3326260772633173f, 0.4661531928012419f, 0.5103013106325823f, 0.46851987076092605f, 0.7032404652402595f, 0.7206429381025199f, 0.07292435960930232f, 0.26118738780412243f, 0.32180268048927285f, 0.5249542931728017f, 0.2258264794550554f, 0.2284828678399492f, 0.6884274691259129f, 0.9028427989008454f, 0.17484831816153923f, 0.5692105911087638f, 0.3778739413476637f, 0.23254030393127378f, 0.8332558207361702f, 0.9232891635646061f, 0.9452459425450176f, 0.9468869628924061f, 0.49990411105993937f, 0.8052835121615703f, 0.23598814519966105f, 0.9346375252542966f, 0.41044357229222284f, 0.9578601849290597f, 0.5376856180170664f, 0.5804421889023005f, 0.5990755681813117f, 0.5626649900980665f, 0.01114715984711745f, 0.38099296950686234f, 0.5083562785373716f, 0.24612063530549f, 0.8383007212364865f, 0.07484825288434482f, 0.7845452310740546f, 0.8176442756505333f, 0.5243753925074913f, 0.2234246588313149f, 0.6959988683145881f, 0.6777945628036938f, 0.7918823099563189f, 0.18066238206421303f, 0.6121174617763946f, 0.8338310374562098f, 0.5038948004728196f, 0.38886436956574855f, 0.9803320207568946f, 0.4602032757634912f, 0.05412527741218076f, 0.9382044088494068f, 0.23864140317598603f, 0.9414557715587952f, 0.6612942338268107f, 0.32740826668173995f, 0.10119708193368793f, 0.33505965714287866f, 0.005304703518218878f, 0.36310682241912684f, 0.6544306821561172f, 0.1916648542626438f, 0.6427036807312833f, 0.1353616651564049f, 0.7012355887610057f, 0.670269522818956f, 0.638947507627987f, 0.00685994842023685f, 0.7906866411448021f, 0.8858196316591407f, 0.85496288574892f, 0.5532859704937614f, 0.37081465614037246f, 0.4267228930541903f, 0.3255019267444226f, 0.3923590572867611f, 0.5019207972191081f, 0.9797902232862864f, 0.1667975343179291f, 0.8390471483322399f, 0.5679445685493473f, 0.00009512046962745213f, 0.45101151538823403f, 0.3244510225850582f, 0.42337401605641267f, 0.3632560558453465f, 0.48498603654394945f, 0.515860662331473f, 0.41320388516425266f, 0.9376428895448298f, 0.9307849853356603f, 0.07548279994910978f, 0.7034421665811081f, 0.013999751319752951f, 0.20553606388926804f, 0.9953400980883145f, 0.3596605455054189f, 0.5299985801041905f, 0.5980702503649645f, 0.44584529489222346f, 0.6110950147623863f, 0.02720519332721516f, 0.5398541103432654f, 0.07554226650800888f, 0.7377916485007319f, 0.27797209008589085f, 0.46772518631551985f, 0.6995227578726962f, 0.018299314504517494f, 0.5197533101890219f, 0.7159174564924151f, 0.31401481228756667f, 0.1754087501884085f, 0.2343414371252982f, 0.8748889416458473f, 0.37463912913252684f, 0.7574407218983685f, 0.4095218685944908f, 0.05444539793276071f, 0.2758436508902664f, 0.8925772862586221f, 0.22065577778239298f, 0.4886560839562061f, 0.9690045575479314f, 0.8537452387766703f, 0.0696792400658569f, 0.9200736328158772f, 0.6566998223667069f, 0.8715400640964278f, 0.9190276339920213f, 0.2007452583145617f, 0.5006604301495419f, 0.6327017259805733f, 0.857981533543089f, 0.5475236631810793f, 0.2808852311685398f, 0.9016360531299835f, 0.8389324819392409f, 0.8891739411761175f, 0.9434320970155204f, 0.7024826160013178f, 0.5210728314556657f, 0.7427761116550455f, 0.9743813902633102f, 0.49922751758804185f, 0.15900465228609295f, 0.056927866293708274f, 0.5374683162905625f, 0.811366988008925f, 0.4737767033472601f, 0.45924100026451486f, 0.31289277088342415f, 0.7026159916346512f, 0.4438341070930568f, 0.34563551431634276f, 0.9747930549159781f, 0.5801628965131567f, 0.9533980463252741f, 0.24893174717601252f, 0.2448986513794148f, 0.7419699161467839f, 0.23576281752326345f, 0.9242374345660919f, 0.4598503387538809f, 0.10962620252985711f, 0.049016989099534225f, 0.5886347360153683f, 0.5896957681859412f, 0.5842408608241418f, 0.5216841155798321f, 0.7526600754348718f, 0.6450527673201871f, 0.4628863883569321f, 0.6057869947432948f, 0.08108383618535264f, 0.41044780813790116f, 0.35308995880396477f, 0.0748353993141323f, 0.7204865144956878f, 0.4413265461569904f, 0.02286682967133724f, 0.004231535125555408f, 0.5311300599041392f, 0.2622309592838903f, 0.6238069610974072f, 0.6716002009400331f, 0.6606287579797276f, 0.7036581684316972f, 0.7247049992611678f, 0.8145407433117775f, 0.8969135886157091f, 0.3150808305983249f, 0.5932347165328861f, 0.18329926845587996f, 0.23799853066687315f, 0.7916453739552266f, 0.16317700382333922f, 0.3258669468350087f, 0.11603765281949063f, 0.3520402097383645f, 0.1246869681502828f, 0.5429926306737362f, 0.7131828947710726f, 0.005037728464599378f, 0.5751169077704663f, 0.9506250180875058f, 0.8067379081113383f, 0.642204624596683f, 0.6678748943357707f, 0.587273011513372f, 0.5811104131949243f, 0.894287809592808f, 0.6968416827790679f, 0.5037866695731186f, 0.8440565666448908f, 0.6887701845863844f, 0.05382575568815118f, 0.773064218810266f, 0.0847268319196075f, 0.4460976271155538f, 0.49657056809264966f, 0.35717772971205564f, 0.8110108736895665f, 0.8520804289905334f, 0.16480597646493933f, 0.7694189401912689f, 0.6036686195088797f, 0.14396385934147382f, 0.7818475345445793f, 0.46877396423993034f, 0.32477019528439555f, 0.8476730820339115f, 0.47924322727230084f, 0.9243121667109215f, 0.9179278277053134f, 0.9037267988146616f, 0.681963981964578f, 0.28700090261401956f, 0.2378229620136808f, 0.11932701828815362f, 0.4916476784995466f, 0.6064420813583503f, 0.34653213546577744f, 0.8841153835228883f, 0.005380110934837701f, 0.5300287045156323f, 0.7141513111823722f, 0.08710723862634762f, 0.007533428463922465f, 0.4220243811288321f, 0.7612123211607961f, 0.17229439887322673f, 0.47214472116396167f, 0.8400677642801001f, 0.18040158655594019f, 0.27041698182568075f, 0.31334242153361336f, 0.30659067767705417f, 0.4750731574716808f, 0.3444131407672746f, 0.8213216526064782f, 0.3126692013651349f, 0.15205733226941598f, 0.2860368906407802f, 0.2213649460559033f, 0.4917843362221145f, 0.006269299195295508f, 0.9011489888529892f, 0.7934080780628001f, 0.9010175764584769f, 0.9346112847206529f, 0.7211791925140819f, 0.98965974261415f, 0.3471560530710205f, 0.7166737866794407f, 0.5782587701443399f, 0.9877569165032273f, 0.6952311870087973f, 0.19973417756504908f, 0.8815298996070806f, 0.11697949495089088f, 0.09696564445257949f, 0.3255505102604569f, 0.5321211100868853f, 0.5950002583612376f, 0.07665704336219492f, 0.4364518839972684f, 0.4142976899942117f, 0.012690667384570586f, 0.41197255828637647f, 0.29822755675061974f, 0.40028527386485613f, 0.004468667483390476f, 0.7471694419866213f, 0.2773127373924035f, 0.8062613097709641f, 0.5416946531501049f, 0.8762370787863716f, 0.10976823981360184f, 0.237019947026749f, 0.28661541032862226f, 0.6334632900824139f, 0.6995620381194327f, 0.7568129386644367f, 0.4443518336754624f, 0.32891640445386783f, 0.38364174206573354f, 0.3238562389714733f, 0.5504378544998892f, 0.6663556280142761f, 0.10131154806389564f, 0.4260105781514779f, 0.6314014465283108f, 0.08106016480310774f, 0.9053970848801343f, 0.8551367166026472f, 0.1758976962249824f, 0.43507911288693335f, 0.25271502020815995f, 0.5576195001163454f, 0.3538843456722298f, 0.007408391441996454f, 0.5113335322440162f, 0.4985630827630304f, 0.9213453718913216f, 0.7165806712812219f, 0.12213589587615015f, 0.47716320602897744f, 0.2480646512080662f, 0.5131881642009434f, 0.8521737672506053f, 0.830742147409157f, 0.905940061252654f, 0.8798169522859522f, 0.5773222701067587f, 0.9649675109545004f, 0.2553523654497706f, 0.3759107558394229f, 0.03173270915740123f, 0.6477315276255807f, 0.4670723063425146f, 0.16505239786634962f, 0.9615778803671753f, 0.004209857724795429f, 0.4172236677660287f, 0.46216811862761775f, 0.12059522373101395f, 0.150587823880327f, 0.8927851836653784f, 0.8381556148202614f, 0.5449320597228242f, 0.4039634360472254f, 0.5451450181528735f, 0.31942982107700746f, 0.5447810512769755f, 0.005914655505116495f, 0.029197477421676443f, 0.21989628908424363f, 0.8503152910685781f, 0.2972465429512918f, 0.7654922983412695f, 0.6428399933730023f, 0.34942188758513915f, 0.2814063886631625f, 0.7629245529190241f, 0.5902428565937217f, 0.8547278063302949f, 0.514068905115535f, 0.939475650357859f, 0.6170146745277493f, 0.33743013428196f, 0.2563980528099574f, 0.37850013950725614f, 0.967656734157701f, 0.06541382770582327f, 0.8294761011508627f, 0.9580586187384915f, 0.13283697403899697f, 0.08317400182136891f, 0.10740988793389694f, 0.7907982984683039f, 0.7633935765511246f, 0.47103151745889704f, 0.08660073210173425f, 0.9118815410569904f, 0.8792568783747827f, 0.8211458725814851f, 0.4686958264892632f, 0.6524571162684528f, 0.31079615761213464f, 0.36782574970773996f, 0.19470502735943118f, 0.1361837534332525f, 0.3100852472567188f, 0.20963598469450906f, 0.8677907896100518f, 0.3362974381395415f, 0.2695924409888637f, 0.06080020802344055f, 0.0022314020619493835f, 0.13072478052139425f, 0.48579145266601f, 0.9694038277043615f, 0.0360548958439435f, 0.7927465270469074f, 0.9051936903219151f, 0.43988948497828106f, 0.044846368430479955f, 0.35470503710651646f, 0.7903025501952483f, 0.397351442866298f, 0.09422305185391677f, 0.28226020142921804f, 0.24299021046235592f, 0.43112935638913363f, 0.16848883348969745f, 0.8966907407638031f, 0.5227965079510017f, 0.7551931649502787f, 0.6129511091880081f, 0.9827440384434111f, 0.09764791416165375f, 0.3228304363491129f, 0.027417483946406085f, 0.019532357035312198f, 0.36450192616356725f, 0.5331281441295339f, 0.5483606192630778f, 0.4719755407501488f, 0.977406882112064f, 0.9667493326767498f, 0.4572561313262281f, 0.5802896212284382f, 0.7204922427559014f, 0.5885128074204738f, 0.052590298382207856f, 0.0850257078057971f, 0.8633748587750003f, 0.8542613167829832f, 0.7230429238161026f, 0.32515078936135267f, 0.9364866196095215f, 0.15953268411659216f, 0.15933835353815518f, 0.14668119444060002f, 0.8638290112234275f, 0.06752886600381314f, 0.6422725227505369f, 0.05935606291787421f, 0.3906428821750192f, 0.7538743309611952f, 0.34441069496127985f, 0.07886573610763825f, 0.7435076877625914f, 0.10567986756065306f, 0.5829507400483874f, 0.6921188004015523f, 0.46035589925787457f, 0.9123965430830294f, 0.9612694381632751f, 0.38306321567513635f, 0.32791194085676245f, 0.5859724376399529f, 0.3366328531446776f, 0.15654849988693675f, 0.36405512027748266f, 0.8478018248582174f, 0.5515793168788439f, 0.4977379517051803f, 0.7825992663820439f, 0.8199723041016637f, 0.8664762993974497f, 0.20456988081355598f, 0.8780001132967536f, 0.9583104061641029f, 0.03075093960964914f, 0.5307586362072558f, 0.767480025408335f, 0.26472185207532695f, 0.9302863574901106f, 0.0768494401965294f, 0.92807854995626f, 0.21632991037530513f, 0.7484940083803276f, 0.8668169718566633f, 0.46611831243541035f, 0.8489117605828772f, 0.5785595301841435f, 0.0477116521517994f, 0.05660238116876193f, 0.4321274895205861f, 0.4243582131573539f, 0.6498519666192254f, 0.49002413284687196f, 0.17405459502616338f, 0.5275378066366181f, 0.8450659610716539f, 0.7641054576151888f, 0.3925049239267835f, 0.9582832651908089f, 0.1404730815395544f, 0.6579536738774197f, 0.5906557864706367f, 0.40724633212919137f, 0.9453250684184721f, 0.726140007827964f, 0.8744637130263464f, 0.11614651156590494f, 0.9483786461009683f, 0.6502028629271439f, 0.14938541567905506f, 0.8845484058394134f, 0.7433287493335673f, 0.8850721284612192f, 0.5338852117683744f, 0.09030646762214534f, 0.13977966463344238f, 0.5379098054253879f, 0.4272507627796551f, 0.6611867582223439f, 0.5972658583765961f, 0.41688156734689885f, 0.6691959115905817f, 0.9351538361291434f, 0.21982185189899484f, 0.1873448587762514f, 0.22876660322100484f, 0.346834299797234f, 0.74859469389624f, 0.5729566556117136f, 0.8600417282991906f, 0.8776533295064971f, 0.9900067230063117f, 0.5392113255642317f, 0.16212917136246718f, 0.20713783644060546f, 0.11696510918368908f, 0.39689133838399804f, 0.4809616613933998f, 0.5028962086270113f, 0.28061482778290925f, 0.7629433903651869f, 0.09038624239948345f, 0.7867672141444203f, 0.9701423014910532f, 0.31628112082991044f, 0.09005583853336108f, 0.8146432782119785f, 0.5581245637806863f, 0.28600067990178435f, 0.45761044606550283f, 0.4074612561537845f, 0.4689258919044873f, 0.6095236869551317f, 0.6926614362904812f, 0.17087229189333075f, 0.40763895636775205f, 0.6981639522820537f, 0.4900694549026622f, 0.5410746107926108f, 0.0870749559902193f, 0.7476098022382854f, 0.8800212388800824f, 0.09432643467049251f, 0.8903026344091605f, 0.5308353481760503f, 0.2723999221244636f, 0.057624740704792954f, 0.9062271345759423f, 0.6109267084141932f, 0.8429576107595024f, 0.9580594776061538f, 0.7757259199424439f, 0.9113350734845562f, 0.6987780966068164f, 0.3483386418663157f, 0.7858222461671841f, 0.5810503231486027f, 0.26054308209329946f, 0.5459840476505373f, 0.6494085123494755f, 0.09219532375045736f, 0.2990908905891627f, 0.3237006688630618f, 0.4080216298026441f, 0.5075434461323427f, 0.06377340882985205f, 0.48841693850832646f, 0.8951570356655384f, 0.8554578634000446f, 0.9401105796209546f, 0.28649795534821476f, 0.19763483194100429f, 0.5497527352184964f, 0.07423883634402162f, 0.5726271901820882f, 0.5525111024549901f, 0.7919748779719854f, 0.4016623668018766f, 0.6798674287783886f, 0.1170365215329372f, 0.8936071105972272f, 0.517794898437164f, 0.9283834857107306f, 0.0491623877326538f, 0.45569924684198904f, 0.827801580710092f, 0.7103449614582252f, 0.3360907304981364f, 0.3434110658875834f, 0.41323682529942696f, 0.08849824808655793f, 0.8083763595701662f, 0.39298745804024204f, 0.052980440742318446f, 0.8459094513193763f, 0.7770722178998862f, 0.7886453193026567f, 0.8359686402267184f, 0.9243785757284735f, 0.7314195180970038f, 0.04689344485652891f, 0.8032233050272258f, 0.18902976543956007f, 0.5345894188523042f, 0.5457618464657904f, 0.0566774559989176f, 0.4565687633102006f, 0.5549715103758703f, 0.5364648833197362f, 0.7722977256119146f, 0.7247152075407223f, 0.17050426008009245f, 0.5749797675697298f, 0.5550038122931361f, 0.5403019372970221f, 0.0835571593703478f, 0.31104335684882956f, 0.5728847288753222f, 0.44355670005560743f, 0.8838564026074591f, 0.5720836739897385f, 0.9082135582484385f, 0.42604245354838455f, 0.2969608467653758f, 0.6795572773969863f, 0.5627540040989116f, 0.3397791307438376f, 0.5557831403802018f, 0.9352215687179875f, 0.5548704662060984f, 0.19503491740980927f, 0.33265375790545926f, 0.21482112873350812f, 0.5459314441036862f, 0.28428514030800867f, 0.6694408463675605f, 0.6066989989400801f, 0.4335081666030066f, 0.0698512488132017f, 0.3432100184701794f, 0.03283159011524972f, 0.34887497288278646f, 0.7727024563406344f, 0.10493135429536604f, 0.7897782376313944f, 0.49630130529804317f, 0.5999371092756777f, 0.22873484017595447f, 0.9470648076676018f, 0.2716449120458204f, 0.5484310240972476f, 0.8092160409549181f, 0.5404740857039461f, 0.09773761275055981f, 0.7221593653148952f, 0.24428189721651938f, 0.4977727627027194f, 0.41407409216811963f, 0.10069035691611172f, 0.3410469848642421f, 0.23435014479129213f, 0.2582900710750451f, 0.6963513752180115f, 0.4822770902665965f, 0.8562813353649777f, 0.876943749603141f, 0.037565025709907385f, 0.29088008483272565f, 0.9083164305267629f, 0.8030887226239095f, 0.9158608731237804f, 0.22993998645739155f, 0.6042849133898177f, 0.838150626109139f, 0.33405371714000753f, 0.5758030904844702f, 0.47742764644954083f, 0.37559297505251443f, 0.5930984294478054f, 0.2017055486150613f, 0.38814610483044376f, 0.5038839480330227f, 0.4551138194342286f, 0.60945368029026f, 0.8266775047665523f, 0.3262613239140131f, 0.32008100961156205f, 0.6466467404953736f, 0.4481894440740569f, 0.9347917419380432f, 0.3537095880630403f, 0.3469455187930015f, 0.7777967587549615f, 0.4762267387140793f, 0.5039807694527393f, 0.33089466084122765f, 0.02300122628077028f, 0.7471573091854371f, 0.34385894967665165f, 0.20478434271532786f, 0.9310515251261269f, 0.7559653351485073f, 0.6776733708589354f, 0.3950627534607333f, 0.6287250748226311f, 0.6890693694725202f, 0.8486796055420024f, 0.8557951070757511f, 0.38203644811395976f, 0.7189711094067612f, 0.6852818893060887f, 0.08666721619951345f, 0.21335846271710057f, 0.09159358281550112f, 0.023437837532345518f, 0.8990410489091613f, 0.31347573449050203f, 0.9304241188458786f, 0.7427256172141646f, 0.36754944074919227f, 0.18605004463131547f, 0.19494398034999616f, 0.2535918564210249f, 0.4047468782306264f, 0.4620168361099203f, 0.23086607701070172f, 0.3732648280113171f, 0.39629713611873507f, 0.3213965831498501f, 0.34965796032166974f, 0.5278428706938764f, 0.3342186363486709f, 0.4600305244394708f, 0.87487098572342f, 0.21805152007478223f, 0.8856663914319172f, 0.538739087463722f, 0.09276265080392032f, 0.6861783246559028f, 0.8347688548882991f, 0.052402848934370194f, 0.5447149970566559f, 0.7216731523238792f, 0.3350053839934308f, 0.5564614781263615f, 0.09895274639699725f, 0.5429226298138647f, 0.40963645618841205f, 0.18833820734244444f, 0.2390519629808241f, 0.6926991522147963f, 0.13767364363664059f, 0.4212854355698137f, 0.006757368446564382f, 0.8847786462175414f, 0.9629059753180412f, 0.9881506751452229f, 0.03658241461803846f, 0.7392307977715463f, 0.5634644934342894f, 0.9125683223055779f, 0.11971629445467569f, 0.34388072136862347f, 0.7194358099552696f, 0.5850654448257218f, 0.7347255283348286f, 0.5794449424978609f, 0.6160281540638518f, 0.8215999822705652f, 0.982549066685657f, 0.14583658291551338f, 0.019775044422458365f, 0.842011575285425f, 0.3632935031163117f, 0.22714291364046868f, 0.7652933567470941f, 0.1058998236152594f, 0.8323261199666414f, 0.7327762701386256f, 0.990085945097603f, 0.9434214647990755f, 0.5731605018978094f, 0.052296244741422915f, 0.5548885283342243f, 0.9185126109989331f, 0.9246437969158418f, 0.2614008976521043f, 0.08706717070307657f, 0.8620280229915241f, 0.8999363101326155f, 0.7165946124854435f, 0.08456253921940393f, 0.5123069962933747f, 0.7347935555305602f, 0.9760244023757451f, 0.5178764364609953f, 0.7006585043432928f, 0.902638056364798f, 0.9839907382214704f, 0.36761060761100584f, 0.01927020696981452f, 0.03393510518112841f, 0.45662657799100104f, 0.5350498213836747f, 0.9090357674511661f, 0.1773608497611583f, 0.4062507236059195f, 0.5632912841472252f, 0.10480745102351086f, 0.8402683058957803f, 0.7418950507272193f, 0.6064243255015211f, 0.37557090217998146f, 0.24595093137013035f, 0.8834976666080439f, 0.08425131605364489f, 0.497037788780631f, 0.24520379182090912f, 0.3272742622734103f, 0.46006110471540873f, 0.39416394939641153f, 0.3196776641087413f, 0.09975821941778973f, 0.5789469374377313f, 0.39108906997740767f, 0.11453597522913672f, 0.03801318035785928f, 0.0041676454256162065f, 0.5059973706766466f, 0.9379039051295712f, 0.8335144780298722f, 0.789065271895013f, 0.7283987068266926f, 0.6646157693552768f, 0.7772100140488211f, 0.12201749871726797f, 0.2163349395629246f, 0.4817599070562595f, 0.14324392374502237f, 0.2819470302066104f, 0.3510064305799273f, 0.9135197722938261f, 0.1488601978519304f, 0.34187227355599215f, 0.5863181027367688f, 0.5628129007635444f, 0.42797150245283f, 0.05800679832691469f, 0.03085367011276363f, 0.00722493274844116f, 0.9559042527275143f, 0.38190617770379254f, 0.6997636611964557f, 0.2867420361433859f, 0.3628144161699215f, 0.033158058905564336f, 0.37408070683251693f, 0.420779002565399f, 0.5732729666160159f, 0.5701251696241543f, 0.004957919248099851f, 0.39200630358015487f, 0.7095282154902541f, 0.39623042005509f, 0.6003221777395149f, 0.0344717437256552f, 0.19593437040782202f, 0.13929078524812377f, 0.5314571118623556f, 0.2635201193666006f, 0.002056463511965978f, 0.8413959697701179f }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/randoml.c�������������������������������������������������������������0000664�0000000�0000000�00000133477�14110572173�0017260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some random 'long double' numbers used by gnulib tests. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include "macros.h" /* Some numbers in the interval [0,1). */ const long double randoml[1000] = { /* Some not so random numbers at the beginning. */ 0.0L, /* Then some numbers generated by GNU clisp. */ 0.709874756135422554674614242046304686448L, 0.486497838502717923110029188864352615388L, 0.474019570990182753146861083750226106848L, 0.998821069612940336401792152067298257397L, 0.68230324395444341476284133813649237509L, 0.0812383212795450007980350531141537177532L, 0.43131112016001535977175708439191217567L, 0.1596337172541222285215378906083607753005L, 0.0447361192177328171952931546845870270203L, 0.669148550486018286115665314826153614017L, 0.398752708644620313955955676251505325896L, 0.600019492390024166744893736290881101244L, 0.78337397012688890834008412364808365851L, 0.747414410152603863408503379239564644402L, 0.550615721371501982864462175362996180322L, 0.0073983673767251687422683917248311760491L, 0.693846360902780799478892082407382699085L, 0.751592057901191172906159475240427353057L, 0.74000578784995401707243054106755282117L, 0.847264623235961908747497547605068838836L, 0.917431426585209425652777605148791919017L, 0.267532476015101748449269162884835638528L, 0.486834088208986505203048715784492259319L, 0.4580154564181484580770749178538567666L, 0.391521076582874764982597286237947922907L, 0.69173131929214083677828129436922728366L, 0.995268639187054867212755710743514657877L, 0.553189251912843822062196619876802699895L, 0.632300552505301947698796653386744186037L, 0.445572801006840927064646197943103543344L, 0.993634311396905276414701816228609517838L, 0.611582274481091436495638926486363711255L, 0.017611091105275929341544154464243038417L, 0.598936378040443270534796418637146416803L, 0.939730325871014729497001074244817030738L, 0.385712528561693907444911228190200940125L, 0.48796444333495738271693214259711532603L, 0.508634972895891442259656591497940133962L, 0.88453398179301716552318999435310293852L, 0.509099535482633468613040057130206639612L, 0.333677997666677081186230843198919594355L, 0.82715349353996770180499230535973424237L, 0.0372593663309767971914036990047894757662L, 0.932828780275931267421133064996449298348L, 0.486099261359133830842098860485004683725L, 0.987156392631551825781809767746170502002L, 0.824739790678073493124786291053674093535L, 0.671869573118280976952523743592826377585L, 0.48088844444394888967684860088619551899L, 0.017233021606613044454327510797750273989L, 0.988102711714879869326666071903065279145L, 0.091615081537455465573860363408517029583L, 0.0113278995312253231106729997476313183323L, 0.294349528513080028346115860151112891433L, 0.0097058790914280197566968241982258935964L, 0.715113281550035710673074854712220192465L, 0.739627170474553083453358265804562580162L, 0.588476045636558489860462119645353521893L, 0.91330346819098343970944232526748274664L, 0.281457572112513183673653575304242456425L, 0.784192391468991402261628322552430383283L, 0.504857923842698553133786835061714061812L, 0.230410937725986177704701374433825197397L, 0.535805811877939822805608704986961969659L, 0.0508287955596506952822240797812703550548L, 0.179399756999629053194209501169297540332L, 0.675837373242984020977236431747771655704L, 0.981496523455084073391380532008173135055L, 0.325845075647804753424852268729037997407L, 0.832630951427200447589084239299500129776L, 0.825354056334755646582091209610369762364L, 0.574731012869980895104127749738122205757L, 0.799028354294603017571131513193291020045L, 0.537721586879667191016369071169775496218L, 0.83846801885738807298552515294277869191L, 0.0922901597877978587435698953162723703674L, 0.434458505758559675954739433438496373717L, 0.308017320632506922735963882703835222897L, 0.0192693232310748837390370764187488626234L, 0.65275462537999797862908920689650691667L, 0.357130585286320841741290333260811815153L, 0.359562085720204868627653630044659240449L, 0.758320826841831017712067337815543048118L, 0.62169722559489484088614873429559348682L, 0.17335411409874538731529771306978631118L, 0.154077331752487118534287271363344964006L, 0.148559174998934930922746358844164455867L, 0.881316225913391098839630896554038163768L, 0.89289796752480477623907740261818685845L, 0.57786655574695620371527391411424563834L, 0.318175774295281868509200498351278930862L, 0.194978302204782205514236430086515458283L, 0.87084962252516402992532937666368998137L, 0.362113882465068209502300826516448793743L, 0.273446496762640462316848141032810658473L, 0.1471399192242189033406154289397228481905L, 0.937157507052090331728212622934524925056L, 0.600045430164287985733450402316667890373L, 0.794478865621258499047814379367829521507L, 0.889115878933706260333129391997704491913L, 0.631825206206982866021784416451887594472L, 0.966422225095067311240936396545408962515L, 0.676845470105427028205320649846678927664L, 0.671163783319728784750606328490914935783L, 0.213726274743505026386536996423761328083L, 0.99483340496284948345969144891145513965L, 0.362072360280863974302182899205431874295L, 0.89135316959373017710710890812308229361L, 0.861008403776277958081202417380537907424L, 0.518258469677886348298849030872657409393L, 0.74995117457421590827489329835282465567L, 0.141688060236646135992059548400562463963L, 0.231055693687838328234866575264314255906L, 0.128367320195147852998795956530756587271L, 0.735643745226188370911313880883935933086L, 0.481951681233521227023903083881246017963L, 0.29797778097740396719094352844253033076L, 0.259026843185033526978277511857498182853L, 0.76454793636766387350530239448634042225L, 0.921742101320371872828332060575170679558L, 0.135594574885855893452962438848740230435L, 0.249482789438500604376469100084029356821L, 0.447893460512394580798054060401740249162L, 0.841167533365717681130523968098862274883L, 0.063885342343669943206116658917625959392L, 0.49268569222220133343083683720155184169L, 0.0320364278163828327673837310979596079469L, 0.83067006037141488187036282222404336846L, 0.32687090604018629599351990634445890267L, 0.524229581985562678867475657633756672726L, 0.26442137331545990230136529620604338964L, 0.1804465247704923307363156457827584866855L, 0.219897692414720290686302976466475627349L, 0.657372240957848561373923532613997515665L, 0.94917951707325275578037456019158874452L, 0.999935336870950506894538846120127792282L, 0.334292387732229479489367107895450895382L, 0.519605753222230586160238890634421180626L, 0.2353320030331258205431171147281090084686L, 0.697837952881171466097464830413620278996L, 0.337355949172173312279209733133367570558L, 0.59624609578396787690174902306338541087L, 0.430566868363073838098964774826687118822L, 0.303143768470597821848720008902412356097L, 0.45566572082779255052299434804712613961L, 0.63651052470632278377988990008643926753L, 0.88355849548999550762491205909993278845L, 0.857627182143034336666679544569747793963L, 0.579654405386150422035981447661995358225L, 0.527551502180559045145630115424486189773L, 0.227798290812497436015108334865799792168L, 0.860285575656798735433746383563482660567L, 0.657434642899561800145850990323893418457L, 0.991915916857419346367596676050775541352L, 0.0299053482258395117883768309912517801074L, 0.494186962160200346319995839440170254278L, 0.795837941248740362154274095100822390282L, 0.213898349709271555518444444268604992712L, 0.635385838537788174234352352696939407706L, 0.1161960540496013767418067989853615145483L, 0.236636716576793997613161803474856412323L, 0.250257128320679509772248555959408855321L, 0.754809883956726591031066199439807350575L, 0.240047496212680591313028855365466345707L, 0.125918185384015376472834932789271923263L, 0.830761928512260978768305988740912711273L, 0.0833746595456954680423678981938324373477L, 0.993235018876045312632920249583820095078L, 0.74457886551486005017424251252790500917L, 0.904041666312003998553971236017433817041L, 0.99682247674917724207607173416904094376L, 0.778185258630194559195184600522592063632L, 0.617908428541966249479693433082678846704L, 0.034201434638706652764862810175677292771L, 0.1166825963578175046863759835887066398776L, 0.618184997077951045734597662867931774914L, 0.67223166229200793562043589747700629457L, 0.50367723015643325152991864733820551338L, 0.287805524504497224349445840278160308547L, 0.418530565562949537953621246456529701546L, 0.356577284504836083965140033686046682705L, 0.727797226876543100474285620953868682292L, 0.261158535215243995918166290296126543963L, 0.1233681715943113445590872776925938156L, 0.397342365090131218507373938120760734013L, 0.33651833905580176460704582099080050591L, 0.124851176251609572087737060478799388707L, 0.49869389018540295598691678028277690211L, 0.603921102513219725593707198424421456834L, 0.0288068305492076274901316515486696644854L, 0.27635950491121559708402485015430409745L, 0.0219820746750707161670181537628175322048L, 0.893266704905772978187424688068554761406L, 0.055131714446612192984065196401480701447L, 0.478917803887421452005543212818108274705L, 0.1089109338581245135310441557812062287244L, 0.451355129465699006367714322379179082201L, 0.933539696310061306235683130737189659555L, 0.295046527696521751967458467625754033345L, 0.657654030109877699469191835246373699585L, 0.699519422709288537538980841108763784234L, 0.754780411476609088293217972311402262028L, 0.940185229424181440596885768821586612845L, 0.641206442188302531301220212171259413504L, 0.483623421775598486212538785028426545698L, 0.1819507033406890598006456890391145571876L, 0.3493992184159313422014002142021878866L, 0.2282143482135155999703670773974654680736L, 0.65404355620292102948676570623901452325L, 0.000126697620991797753719907018394969483701L, 0.000128697615694221449450257101713351917085L, 0.66277677565136622936757573048183355679L, 0.954427508631091518542647272554320259L, 0.821452416615550557725422642536361482673L, 0.783949133156224682132225528942727293192L, 0.883688268329322182794294084718215227776L, 0.887198477924019626901140168907684736036L, 0.301153686936585019868640358522761168745L, 0.97031160152938862140377079439908121466L, 0.613591225576913510391808189718881180802L, 0.973773801885628446394837963774216539007L, 0.969946092528631153860793542995840284225L, 0.0552318705490405481104532089875456066346L, 0.398506652226642658353465649824893657953L, 0.577466681084525459648007205600389579233L, 0.538305717497527581210294472297571817608L, 0.0378969572225333661087665511893845011475L, 0.82821208446292402852221418490682507414L, 0.207039760611344134455359310666092356869L, 0.278071434395492049592363658721835175976L, 0.418157919791356829061560807874478279737L, 0.917935426878916775097393966246600470752L, 0.968879316988430839484738642933327229065L, 0.836847484003257581736597938908686488306L, 0.95787762740618523171012745852536482523L, 0.381833463284092269744674988738521423563L, 0.585758801118634412354899474049588357203L, 0.590675098878457580254555486356030743515L, 0.999102261786447498899644398829003134788L, 0.278723779765613710807952395929736248799L, 0.150160483677965826860533794972733497469L, 0.39044191915595120943090707935299688844L, 0.882025297705744570797306391637391855587L, 0.26053886056730883704893455389142056588L, 0.530123960707389279621444598593626923328L, 0.307497951588709795568291546230129131789L, 0.755712717002473210112772528495042985208L, 0.403971099596680128749039001982260210321L, 0.0955902605698226580325595772471302440213L, 0.733946822526846681865131682504158670327L, 0.824558199580936798107294631591949429405L, 0.355777480091076251706346214380424670616L, 0.183210308747040172107746729630689571628L, 0.943081072447366944673610412439697363267L, 0.823437046917209496498923793615721213912L, 0.272212671889142468847791216625072718846L, 0.467586497114075237282436742306271250655L, 0.965430243779957305809196327799423550657L, 0.264527585376739963287684763043832918263L, 0.78305929918791974277407705060017330726L, 0.1569161089271269079867408493909342109635L, 0.385890512318945048667111881493883277209L, 0.748768801714747310036929893375463390286L, 0.9607241213632062657075501565333113635L, 0.681005349771442926258254424282975745535L, 0.417404611754855157969846623218352380733L, 0.384922954690351156114438668003273806442L, 0.0248688875333777009659560293287195312336L, 0.289622732329138351547499030028075517487L, 0.356660798938142089830284922931103513564L, 0.1092119220339924538904809107210351902013L, 0.263044604533896828574983495057823392153L, 0.72916056882229781356884933113775509031L, 0.277279616044198734111166028359400949283L, 0.448496025651349045553194567962243478962L, 0.397797975606664545700620422788810306397L, 0.915573317477921170464219734057440942223L, 0.565957191780698852582910000301549192135L, 0.0199640867363067059474765492007910956547L, 0.380718754942963039702539139065633248878L, 0.271561535356661429325107452975658450244L, 0.65703383768996023094650337496290243735L, 0.810303462640169412310932301780031244584L, 0.34389677270659068303923976829417662132L, 0.1459701849396526086771469906702178205394L, 0.0709566883230581731990192048699199874356L, 0.0273188133279639766234319338307950998466L, 0.189257375093862859152281617127963424911L, 0.483370049027267515091110020077746913052L, 0.6121051307445822901845022667347352688L, 0.0669683489197768142011855877890933175548L, 0.0462440353376468071116256899031962430102L, 0.66179099750239749196171922709429044667L, 0.331447780875915347204488922360787127231L, 0.88878630766137716878808504113561041651L, 0.57831688009568937419273238575083437733L, 0.1665758643537997337473156606765968668944L, 0.609499751553850514507525575752744468325L, 0.842660412678850878529299409778020570114L, 0.868735885617006579468607975714721515953L, 0.518323673739076029376626898444587264186L, 0.465048961779768578307935679739067346325L, 0.739933063031511059934522150792493137138L, 0.366097491036976922528977805725731033037L, 0.622890978255856721366594654155975719428L, 0.945120241233001881267096151974150875442L, 0.711795000549305806399598132955701848342L, 0.120093380051693652573317820347038096902L, 0.461420048084338423641881546847056927696L, 0.201645977777376722385295339631509175754L, 0.1479402104137110360277226090924965371445L, 0.287960179369955828242600303166176042591L, 0.788362667534075941033937374958276358103L, 0.610312055398887641020833805884097007991L, 0.758450801974187424825814780682156814865L, 0.64208882693968320907867911523798381855L, 0.255468285690834138126389042932304445888L, 0.0370478385689831649949675007793815537737L, 0.551880617631056560992613768623601574096L, 0.559262357532227558112085482526038868046L, 0.129705275018847798920129782613409588523L, 0.1076289463968801831500602693982998566697L, 0.272506325706516323678193293634687081578L, 0.721990855538151706841764025895777805643L, 0.523084042169573467351077180119310086396L, 0.0858615712848179826840482241961243288956L, 0.589714739430299853251893655400362103563L, 0.512412326166823937685402214713910254025L, 0.802350747297003067442509635888112412853L, 0.715817091619681167941132068164905209087L, 0.0824951218034037355816988555328185436778L, 0.829228234554153070848595829448989414728L, 0.59652037694553054648270061009002150308L, 0.133585725647906582691822880117773950377L, 0.812005216254498654412124509257882599085L, 0.808142463854396488512203093936737654517L, 0.570217922503074432494487309472855783614L, 0.704017977813333280013384719294741845102L, 0.0251797587779118690185681150429720019843L, 0.676272439608475367571481578590700290242L, 0.880796414989798318500723261307937258554L, 0.387922631107753361553377889431536170676L, 0.282350224157064849683455744598629321323L, 0.721001172978128539392551761867898599807L, 0.98720056526474911920598612334425157851L, 0.9951900286811655251775209231187451065L, 0.051844546479017627818996668613208776283L, 0.103738972117399718145836730690615155693L, 0.228544758674525285763674099492074936604L, 0.429309402103194762341587536897342160049L, 0.564535575507982971760351294178163523416L, 0.999063571593237112671743187500362701266L, 0.340374156369508513494787137157934959152L, 0.778748988242111504661479799747122556733L, 0.471307010869691772647781526213794708743L, 0.289707428078962269353959639691462373973L, 0.826577651264033230456965284610788939828L, 0.860667694131974131835140122175480202008L, 0.596405567348984902495263677852931818947L, 0.79786093770390728560184577433203234578L, 0.85492142888696693237980696048371212203L, 0.57242705004809831263405538576519171441L, 0.829648119655355629047392239460860046016L, 0.783260316181642610272420809845230036294L, 0.0941718863377651336163202407301145871807L, 0.156372209579300482444127671309443664823L, 0.95045258077372510217507306087908380692L, 0.1885289021059534081345247308001373861575L, 0.660776653890123229320677431688026234587L, 0.2333507388961794003755022400755269739225L, 0.926661255852332295794894190183342387092L, 0.862240624886232672002503279536846219655L, 0.093072473040365648693897225471155002338L, 0.210437952956145192084247103889970459783L, 0.98112543168220233380555460117617724093L, 0.740174391774267645790688716222038485627L, 0.0209886798500615011013258311339617682421L, 0.41833754096087514377582590206105535614L, 0.469019942905167330505858885046130048223L, 0.715228143253914303084091910768414947468L, 0.949215045400946624794326433082702896278L, 0.0839262379919984011512905346130401074556L, 0.358856470231875479544116669678510859691L, 0.676461324144301815445903930221360844898L, 0.321802718137104975636543941512529575137L, 0.993411285955596090334951526803325817472L, 0.860164319140927797258503749506400508873L, 0.94773452678939638468420772776729628408L, 0.786167026315331965750413583155691260173L, 0.45156944204188755542678210840170293585L, 0.490807428869058127589400400723875752095L, 0.1064150484458768919266881304357565451445L, 0.324460881496927069927267886879512784128L, 0.892536276084459403262968666925514247957L, 0.626906362142556286375622503025155623158L, 0.912617117728752553677432546319200457076L, 0.670287539555608481364011494943625670644L, 0.247614513279178220157281399165275150246L, 0.328334024179281412037962820247065990969L, 0.829445540957824174480776183273738605512L, 0.1787214688659462728637669907628671276175L, 0.925570168885833135397413435137754040344L, 0.98275386432184844551191217367555375122L, 0.364711512670624901280733420446798813805L, 0.0676060703890593392691073615176801081634L, 0.01088522590112897075539168583333589679446L, 0.0611693052224598303672047526429160913973L, 0.214589347780615411637055343786045569195L, 0.698097005257153990899739747284349971478L, 0.0354356066334430559162358810601367856981L, 0.0279531560831790454930326667914520406377L, 0.939682879995515407044885888120427639943L, 0.312419879113847025637130107480365284706L, 0.429063186024752762548549652686423948472L, 0.198325752893057589388425455067795077316L, 0.653970278037364931023007417819508007502L, 0.396811027519564931158159336303275106925L, 0.50451059823222344440248588902992099958L, 0.0862505815838354201964323759027263746603L, 0.957096030216378795442646824371057760147L, 0.587610162738417619467784731999441435863L, 0.582187586992416238476426545279573456436L, 0.535716130421670802716666237861890374707L, 0.090478847153957807764386571203708454605L, 0.788473620511487574655894325144660477707L, 0.610237648835883657058234607228408957708L, 0.678372723016422015853594971922211368707L, 0.0477042323920128297852928999674240977938L, 0.916676966783686851658830754268116450562L, 0.385373716764729378193009393283577714611L, 0.51049308234047313597601380814795899816L, 0.1196704708003806819299545192341910042065L, 0.446475706132336496196697021305914636716L, 0.22995164195921866005337396330755244987L, 0.632225374693904589951305492826903497058L, 0.1049567841702419598059377515889392050297L, 0.66749284825574584532432314559877621928L, 0.730750212627697291852996268443402535667L, 0.44210748459007730373853303409845654876L, 0.165882407048533464405922485111215401752L, 0.326102079042974476137893383568312181916L, 0.894926469777796621626659556932174565354L, 0.829811268916354531033773068150153342864L, 0.0607253283595596933368529290946492114805L, 0.0677752868787034912813695724240479638585L, 0.82861506635734784945473366382511846348L, 0.160085543323090657960949278634908144601L, 0.232569451519550129004668131405568301759L, 0.848363194546104528297512566450812116666L, 0.793640414525406609723674517332020118566L, 0.0908665486135344605492576594616215607582L, 0.98524892289773367881284955458176900047L, 0.232277847265217861619371474795084074907L, 0.2478103820537262599906715455471023544214L, 0.518524645780409202282547691600231775584L, 0.726858378884955244314303315523158335615L, 0.245545705017836867827662773158398435754L, 0.2242602776132220616213985660229694803996L, 0.69321599409749039262414070240230983052L, 0.0112978587458533729787299027903363211672L, 0.201700091442640051051557572594860881596L, 0.1553158804742445432796353137546288871905L, 0.297307958467221836656545818754009116053L, 0.858321137590160233755873079497950982112L, 0.66848174756798322137180974713907803341L, 0.996344263106353369755981871581860505522L, 0.0298469963581545313060582891253178820216L, 0.5825562269883888340326171333296281312L, 0.493316240919863194534203651249074989694L, 0.25506115557073666386519530923416434445L, 0.990037777634583670683401168871182857585L, 0.111966792328779238876716387539738843995L, 0.555536981182848652400091282463345207445L, 0.281763605895317871765768390877174374161L, 0.902702281907817546029803311979267829958L, 0.526223239446627547666226037912343453756L, 0.663322588876953268851644820272004691035L, 0.925956679854174995001911256195736125327L, 0.978687628923344717267490649565202182013L, 0.295452218109470204949110043833472171496L, 0.763317372768444290934585368155544717374L, 0.41484295515622153189510360412010755096L, 0.95319138766107113957717501566306191772L, 0.449833295238493367386837134824022661087L, 0.380903660964162496124546078818966824203L, 0.0591435603332779390763767398658188273838L, 0.594973116752510574186847848340951992488L, 0.66051154347057943107777082783767373976L, 0.9590947364014878778361002605613544034L, 0.141719503437180601174660143271258240733L, 0.72942088503531365739564056985302156428L, 0.96229479992042091317494337141213026865L, 0.51401712994901482942061876482808737646L, 0.09446204537625467018781365109090483186L, 0.568441523568450417056301286402539600564L, 0.598604342726174263070596195546293250945L, 0.774951017988365558347613104226790833317L, 0.81892086730816467017537310019875247387L, 0.890143355483709851496792149649550808793L, 0.2191477338352410954693547610221317715285L, 0.726897475480314385643181203422499653L, 0.756138778886812022822443490226271392144L, 0.36128016023552084266898937740898271179L, 0.410782581318000192446155911986931996913L, 0.223641334296034708685419059866928946095L, 0.0611617201563377229556630546893173872466L, 0.0454251140845604672274274573289906520655L, 0.292039969549662442463090760177927466818L, 0.0892783972345646734854765244000589132126L, 0.98769280749877429524697464655962686569L, 0.889843464657722517503667653048728011052L, 0.651776307404858375062718114948328477704L, 0.87617575855504123004785690824244025026L, 0.338359170956885135997817905734588127076L, 0.734032684330295341291816774804886223887L, 0.862422342223053851459695185679195132964L, 0.197333977370262353727756586852240555633L, 0.586060335783457129849055206578505427124L, 0.132898852938756538479400358451026471607L, 0.548298096092246267871555639877296879195L, 0.301119859270324657077136364646995297056L, 0.02186689635349189676964089313754648484195L, 0.037538023766844046167768352700498359816L, 0.739462465806194132819844936199304370748L, 0.306338591475158278790432712666553704959L, 0.0349382326130091592369352494672121905505L, 0.12659131714329909411210854142389581492L, 0.991566243159047696662802015340988687108L, 0.265613985138476447081523915107505113653L, 0.379928020809782559672193104868857287448L, 0.3311424971073397473661763760151895103L, 0.702177302636984264408758773725210449873L, 0.975045571615360787500646118846671455125L, 0.0373462862349996603561237755410350012631L, 0.846126776062337124521510357150131165153L, 0.604046707233534456382774833817964498043L, 0.1981113045697699450375369418161865703455L, 0.0223467484405979164693956414316536174577L, 0.67121960182601511325776586363807504696L, 0.165784481427263519151726479123968726022L, 0.721784618575898210943875783221281669927L, 0.247408211201465904622132596487935205602L, 0.474174174442367430962454680799704832459L, 0.38041380356189313505762491005159753494L, 0.412834591083812886132307610186713638625L, 0.294378742681402760124595985235966036022L, 0.319576442623415298744966071520183847465L, 0.17227236515412864866186439447886640924L, 0.19227796294349462194111033545303573433L, 0.701351402612222654905938605774127547107L, 0.55598633289035034815584162421930015865L, 0.402729648554369906881359212431684355721L, 0.595951760748834493622338584190905994085L, 0.119840257870361007206544525046135477756L, 0.90443395581066590152525534589406902782L, 0.205188871300477881549673944463237196075L, 0.339175278174772519132232276502457660768L, 0.447725444308107151040888910769680233742L, 0.541239546708188153505885726785683096117L, 0.12984235126732767588700711245028426254L, 0.0534701599183773436559514525508752846737L, 0.793436019832695131646422778046763975325L, 0.718125883729211211336344362949260539072L, 0.328649037343445105052694618356980072933L, 0.113307342739499399477248133420602576291L, 0.87683936228301044929749768481864525904L, 0.212591937265603187751611886807532831791L, 0.761002958456888912899646497131654914807L, 0.220849601519164170820922984026707209176L, 0.222305857213559738578093188054272365062L, 0.651516500020930005107266726995614198887L, 0.1505613416188572288472651067305496894266L, 0.166658450989632252583252879193540688162L, 0.249417632511505538283736333645627460544L, 0.50096054904291170172998992288713266662L, 0.173701146801321486346972068110605414347L, 0.93433415280052265881674202089278791561L, 0.1167900820460300938880016624066890278452L, 0.265137084235229705213901240937609442947L, 0.110072770364904306470596762714108445086L, 0.0670575770615268870829070207384379655213L, 0.92447493539224566948960065689964970346L, 0.187517201307673207566548753071237315229L, 0.935719666366703749433556454391358561756L, 0.964002672100646458888742916175546552353L, 0.6304136194377902875122727617639812134L, 0.497041144725381002743104205240568050483L, 0.589232636183711897405482721407549359295L, 0.524588285641300028631908965527617181296L, 0.786409662511483672510756944887012261427L, 0.9924030873238807048291154748671174581L, 0.891407534733792276848059682970952672076L, 0.308538095910260975496982224956384014562L, 0.949088891149549225900320967233005245566L, 0.507378396004105004571665876613293881214L, 0.348875146873077771786031143309488031474L, 0.129717394366372388305812826098578876617L, 0.371316171885006633822161450072014737125L, 0.550162123072752251266003313454007126843L, 0.822171979807031777641565545578299345138L, 0.75171547658293988559512988487590040284L, 0.329537443635543385256682239450819107475L, 0.159687481361602477899361671181005148163L, 0.788720723813465707294018605642035752394L, 0.1031423865826241581828274573741444954832L, 0.1925157943560383416361499973635531049876L, 0.771893047929845637497166550933789470487L, 0.681189132819106369246924892765206195007L, 0.180608768713011918428603967211913698036L, 0.0869303304414286810402604783458783443746L, 0.63890744831302111307395023326393791462L, 0.531696069328179766265158866360885671855L, 0.557357572478102464274432325432400878297L, 0.765306589402879669413870462450921612475L, 0.0941202729911292570046371838018359372082L, 0.902333472113108821746674873990738636997L, 0.165516366160118370026922089795742876131L, 0.0317472434880413278821576585103363607157L, 0.706107972335163251316361316043030620453L, 0.832472986392763388669796997227437520663L, 0.769939001736494466971306881365718899207L, 0.83093185023987157595917781461722256739L, 0.1143834825195292986705373579359335590854L, 0.283326017120251162360393258571085609729L, 0.301605389836836671045912951769199753359L, 0.855854391727628505548518803309296566532L, 0.089938332734139699450960989316391404434L, 0.310225946153425747793112265736973169299L, 0.96854812596413627994714291059983626441L, 0.279767360423571836833858253122290577619L, 0.113545981876279916290815278422648489865L, 0.943101270554056170747004305255027939268L, 0.812274724978801470221644756549524210083L, 0.9678011347395447510273023981530290554L, 0.514795136336602722878788704708053145966L, 0.50560840616487841567055789750974674943L, 0.127654209842819812026603428361923670116L, 0.273727399985085036497076514726791191553L, 0.964821797874257789566527793136425594082L, 0.853392912197074096341317268954834390727L, 0.914236806849585335611299422695886165192L, 0.277335361137281076359079507288838688219L, 0.865708792613433194377422367016717680172L, 0.761947879929658945814013586634774725302L, 0.276975494384441865188273120642155257808L, 0.0678895000408079241574268817560335475378L, 0.929521528875748672899760603996998763144L, 0.44453824299955605846877126958322272066L, 0.444318159420536625223816052640621069982L, 0.42913762214779045597457741573009821738L, 0.98994873802399078252493194985812582986L, 0.93065975343157446755652147574743540714L, 0.821639107980128580428385838275355600123L, 0.031337950421787684669360817154012683829L, 0.839516942888416107002513723437531514126L, 0.785501376812531727571251496474527490183L, 0.247978681554054401906203846371863203863L, 0.985774009303654108868853196421131421187L, 0.635347409930173147315815281304257764708L, 0.40087985483327734740658289294086718422L, 0.374059729085540852289174052767716446502L, 0.367226053686019780853702834825808619761L, 0.166424328898161772576167906091392715805L, 0.838115185925303343477055122060982270143L, 0.829549684532006011608856001441012324216L, 0.059867788238866724897690318151639504149L, 0.0253429734563284738087263277549928280781L, 0.953315773263436653713242828719775352192L, 0.597536998796130884349662459732857817956L, 0.0320571321493587106457025626624408278814L, 0.477506594803204144826488443400695434979L, 0.285541992141868221897101891229394096707L, 0.764190678950226854486968785768647879005L, 0.895489776830293129781335242249167913705L, 0.570740793029533496018083006013191540077L, 0.938316924714444954315906773563465846538L, 0.56157168133328941481074926451373503549L, 0.354184283860505415751320741296599995231L, 0.778294119283540721552919906619543293274L, 0.434953011661757598127924745629053141294L, 0.37156491156117895854194599593687697796L, 0.898767478977082606651667259049374990828L, 0.21819365919403129548458400006737057993L, 0.278163373548978939704874687746089548269L, 0.1089005781457343817756962209721573336768L, 0.85152888717082537570752846642305937149L, 0.2419243481761527583754399630924438738944L, 0.69442654829377168239365980152821108287L, 0.1512336533453368944625038813397779875445L, 0.617712962492924013140729661730350287525L, 0.935400762900002313827620435729493050175L, 0.79357339902161958573967958515254111256L, 0.734250188990467683521536859220675412636L, 0.748517858206364295837674601491185485078L, 0.82520014781239194590337105462135253912L, 0.1240649365160101108753438662971422995014L, 0.479769236133748631678854875312914195598L, 0.171269492636258554036912204801376697988L, 0.833025419245729049117746814929956940986L, 0.354429813451205200141830318428840891828L, 0.474809123369344367691189422128776480146L, 0.692239655770541262287308180705629028608L, 0.271366901464125731413801963807240905363L, 0.561330233800121182669429172066686942393L, 0.0695868383638479426233449148171168522655L, 0.627576910684655924911125045007979454546L, 0.423331542652214907262628326674848471962L, 0.354725031694671387579309719042578580595L, 0.312419264533145363169359084710774849388L, 0.167819037053563697473931127337972350099L, 0.99960836112225007722014049168024866743L, 0.820598666739967434549389339457492152643L, 0.689495024741546551592649728378054973272L, 0.831455766750164249604246627812180304754L, 0.515538871956858025876039391193370146897L, 0.011724889011994886395520178564059346913L, 0.587485679650311054946861235938601293477L, 0.113010564497810081892271654273794311467L, 0.381261245177928587613552004600730320213L, 0.466933821322235841488251157296771536952L, 0.646965031311287534221872388017990968767L, 0.1811101995014685369939482409137380098995L, 0.247896943912780884738461558340983142645L, 0.989351208835640462928338658234638846217L, 0.924605283008839688813842975338096967047L, 0.232010860908797395869871518793187418799L, 0.90274859050487649728273938229764570199L, 0.664078588165617572819884867627266650356L, 0.532118803501055886836301096658125012493L, 0.854049566634563277356849166147057535436L, 0.756477818237029394317820041473365538516L, 0.84578312219074068824832318394711642503L, 0.169914247711153055959592721695068126213L, 0.50848961455796310913779527189620088788L, 0.715231849280217810525151667911662744854L, 0.59666585539439202929452535210623694053L, 0.72343578283497935670188130618697814035L, 0.982228826906846431195861293729527133844L, 0.98068755339273420823366752414155272462L, 0.805277135157133623039231303778838094716L, 0.840154168539481858495551656699708834713L, 0.41783933695481411993780663692806809771L, 0.070981740672048589027432942629842679319L, 0.96664795205679820656636930925268162457L, 0.155178444292580006807274171645675417735L, 0.276407670358590477524508525465318694191L, 0.1054964292635286397825421772930229411286L, 0.354205947516472098240472076653525679013L, 0.583456972150065135260312420865576513532L, 0.338643867118430587299252775116788065723L, 0.146467849593879827355466951871059968293L, 0.0639448405747942007938896940026153617467L, 0.846536583732599902600485371566229612512L, 0.599728399399342923058515558777947417833L, 0.140387922890235239162309673093379598453L, 0.1613160217694973394489944660056369626715L, 0.151848582163159668039725770584081620756L, 0.663365628518336712743995463098831995163L, 0.752166976367665534193146852225632451022L, 0.911311062532571765386023433215793121138L, 0.692490353635171096989434518397248623866L, 0.990512559245857089458980255962574316578L, 0.135026433195284768293027372762691869458L, 0.82220389984592453325084678614092535756L, 0.385471328555065081327630832374267955206L, 0.108251633446048989722318564345306848022L, 0.429090236713339412878596384043906547999L, 0.983421429305507423332481562450757515935L, 0.0163920521681887489391607174895946079877L, 0.634276319224952361916496263299135133978L, 0.53164375434562160610011793242431018808L, 0.92801127390978303506935520414803575609L, 0.708525110316144414918831897015500504675L, 0.722458240987313977092360928226487539067L, 0.432028911017122242491499522489684865593L, 0.0001754664935299182587224394863719217640876L, 0.384266658709383389800969077999970411222L, 0.284964603427904715461598563563830112021L, 0.1541443027599544245798778784933517572175L, 0.958338802063400795313378181913830622686L, 0.636927309395779701122460610729048286624L, 0.0963946603295477475541191401069719222887L, 0.0995190436935072136624400787867889652226L, 0.294220607618706451139091631947946466958L, 0.180831121994104393794487526888221966969L, 0.635403971764105414766318934434540385347L, 0.333929089029202997624323059191296321991L, 0.498378678845335358166419186432789231466L, 0.79769145046274241777533636404451138797L, 0.269285209299779365433012558225847643041L, 0.110524792990169183853219228066613162975L, 0.252694136970632381193559370648931722998L, 0.447232396115786457656991370803052298542L, 0.136974250599080636030665381278567779455L, 0.67243844394695156696032636816317618716L, 0.280265952023932940327982570523639258968L, 0.960024614746466668963206103951264089396L, 0.83595031847062668345135859090890188348L, 0.127840531352213174558502027846545305518L, 0.333183884044346150282363573006579940787L, 0.480504229384957927069515726093850498988L, 0.768498913093287331615443023486434378468L, 0.940413493411219283289136687423264928073L, 0.548648592555019577089750862504091661273L, 0.57814360039222917342516307696519676185L, 0.752806287004316513987155718410926624384L, 0.328211694133870995310455637563825433641L, 0.153907665030571878436793446358668488233L, 0.694742699178286984320321272531890059073L, 0.25435421168640709608520313542078743933L, 0.61387638208113240104328972389071498415L, 0.250476311300881635346483832554226742174L, 0.345809836897231980069633800588202859833L, 0.343083789419841923142937785323119943136L, 0.319174378869537109008405333721782689566L, 0.158111477528301687597604325494967120237L, 0.244000500810322900960285910812181460829L, 0.23179705702278726416861948783067588642L, 0.54682924846605062799436489677774333716L, 0.549008127982055819651521103931442895238L, 0.262583044663608129412956518168777449925L, 0.00126513153702681878410946802239924274583L, 0.942613696151881635585127791325641506562L, 0.352686443706689559388572818776843215083L, 0.90689998425792029984240460273113807702L, 0.867511650419363872431681377574762734184L, 0.280671949468087158951852027769013272607L, 0.162038690615698843560500386213858514888L, 0.71179364933082197276587611716632482938L, 0.0967402545497599384082792036477527703823L, 0.465040868275334873151726613879001199556L, 0.621004503662486553272117361134036130264L, 0.732964940483576253705474121238830973672L, 0.423374863473223783721502627532544136435L, 0.490338535425760290944218064913112069833L, 0.0243433415988311460557576165617657963508L, 0.0502339423891456566961808478207103394328L, 0.57668149339841029115236469576085057193L, 0.654589079253818313716855283653923913987L, 0.1099728579252794893221972017964445810946L, 0.95067113980240197864048876003001477344L, 0.271440369581834169312179003284604198334L, 0.067152474145377434478612939162576726923L, 0.77434193893477314687843638736266814713L, 0.2095679937785625400917773512669417520444L, 0.7681370807102749183539277908648691358L, 0.24472807400083103884984122018932641814L, 0.191307162486577428460074174309309551616L, 0.637215617752531571162184184570005111405L, 0.858141525396878877938747690015117846998L, 0.338400625200720062249435065450813258281L, 0.564981422008979753676981861330327611986L, 0.809460314261206431741632790718777271837L, 0.879343403409393604462128113991125533726L, 0.284697509116613252542034824007026845569L, 0.497023470648395180497606069099534119801L, 0.650004713241995983979792197286941523L, 0.1177129995341492896184329340448111002318L, 0.923625966014428778639333261268345799732L, 0.698837131343914189577155394009532120604L, 0.28242326745092132457477019796509942259L, 0.70025600885251684699238650783454037429L, 0.876659050276528114198964471020380705343L, 0.52914892693002332233566353042454639365L, 0.319860854431864688430502078275989809115L, 0.83483115610648557287441551698147898778L, 0.727639064249568383685922880431792837046L, 0.58743287662861037184349933549802687836L, 0.510383231616356949495559076196319035197L, 0.00229935944348919214521608305418404052343L, 0.799567224020488433652933994297769381902L, 0.343651210821093611687224166251624444254L, 0.405948097827175151257603419529941300798L, 0.456473183882957921169800992232941517586L, 0.570248304776860782392105323292264026118L, 0.534779754769153667870756893044557559557L, 0.472965511839676757434979299779809656808L, 0.137335340499076127280155831169214403285L, 0.51975901660926295231312276736119435645L, 0.8085867293332018994761547260739912451L, 0.812416413241484848007226874256949892893L, 0.852994977709961112714176162016389410712L, 0.95270886248643660114015239563660004248L, 0.845133719240648570417568652136630304138L, 0.4074980021816323645978397907609428101L, 0.335850514497730546494305840184055599972L, 0.0882622233237065445998153436898044995127L, 0.936467561027640943446178111237050277205L, 0.56676472173638044722431698799123577376L, 0.528427769051008704179988533062745663408L, 0.460890427579778855697205646060084318038L, 0.754971897131798313468797543428083655928L, 0.980733597969419782109470537306886067907L, 0.204362127415649555111877580124343815074L, 0.424822548090499017266619697426652494042L, 0.790847149074521364262028407892114384257L, 0.559922683392730473870877613727301497865L, 0.779993507158626042106006393237738208875L, 0.30516368089713691312418593599115685319L, 0.68918765842229398168455844072311006826L, 0.972291357858071465096079542885284602882L, 0.92204286423973856982373873105566928589L, 0.488649453783638471576482476648021023315L, 0.467124744623849284659862825278549932824L, 0.548051233865943557014854568009331816852L, 0.306838990296265483205551142903402056051L, 0.497005516835688988273805238236922199451L, 0.341504433884138135798086132528045458722L, 0.969816416247460790089503289400709886528L, 0.63656435610220447227337751650167349487L, 0.83588076122262875881859751942918794857L, 0.647568600604975972308348018018445212894L, 0.916061870307308870029862807808332479077L, 0.767988745496844638880672392122527991445L, 0.1623230195628039449666927123215281227666L, 0.0791082835859634251558587844284289799848L, 0.575858643610197202634665099752882990844L, 0.559159434263749620344702466000799724913L, 0.063765998380760211208741798736948488376L, 0.230557913975359017084357477142151415967L, 0.702854691657277602758421942319022953845L, 0.789516660466782621905392733079230211954L, 0.491496186820051632244513986127898500904L, 0.171499215418269578563458417238340672634L, 0.626470061831746666081979158043673024967L, 0.258903137813870706268979320963343541457L, 0.64156850108405218894694811301875120511L, 0.534043520260340661507140771088018906496L, 0.388275182018399247097875416106759899469L, 0.920936363560998030495046998224168162945L, 0.826139404694006088220407338888245165242L, 0.343561253523163451528918423980552161597L, 0.921521003270491194867019217479780072647L, 0.656212467754097185125864111703195343744L, 0.628186262290474398328350301885606581942L, 0.573227336542237665153422986363073650388L, 0.94178975003001342039795597242477049832L, 0.0408103561362355768975182155847755354614L, 0.382581672073273072487550945526454964287L, 0.152851256046525520308098129538613498254L, 0.966735024597183045592313880114075824298L, 0.215564894798334550271993595018433286244L, 0.776491530531523589201618375156272004616L, 0.912460554179311241821569665648929177608L, 0.632880016212040018958086886452474382272L, 0.711577891112709305169603082360885583086L, 0.1120655756066491784920471129299439607153L, 0.691106483958832651050573402690448368687L, 0.227442567846797646970770128970529357636L, 0.837435613090485891584882062239924101455L, 0.524389161590691896070067767400758142565L, 0.591360583466508186135247682666313136762L, 0.103155847462960450706124014839446958843L, 0.98360160577671960281465138408293984545L, 0.197665014114674630647437622579741018817L, 0.1099709194312379594014239398842185159354L, 0.394053373921474751303577685990936074485L, 0.94945354787200894450508557094182436657L, 0.372593716084661547440393809983835348274L, 0.62514674616343692328572382301636412566L, 0.2001871481416310130073795585638383984926L, 0.148432902421401306477690922498335475507L, 0.687921673269487018193347305425182239764L, 0.470940334348984370262797433659013738143L, 0.1592476430730276812200821020958787823795L, 0.296776110696565927524970058176467314578L, 0.1491253105142218631726813695413369166796L, 0.579194717868638955003571989739802264354L, 0.0730543936466744761440131951539370917776L, 0.941296077873340797733875467209629660594L, 0.76720024949523806992504865943580486187L, 0.419526107681583337049761526455092560735L, 0.00688594806937144144337797612615981618743L, 0.931682704636487927763651991274577493318L, 0.660524215847727125058815911433184924133L, 0.71780972384903067744609138100002205676L, 0.02961791918271995070621856302848439458175L, 0.692791206212428997136050006631240567502L, 0.162762426697948445642880183096693062538L, 0.183637795551464341949019870428026949035L, 0.51263789620316407488619761125039609046L, 0.90238698122728366178818828411640824056L, 0.229784208410123517024401367798925386038L, 0.227218480059027721044118324890061381517L, 0.6555059570778176955459672492237825867L, 0.929815767583615624563413584598741896834L, 0.188559597559312695774663933876436875041L, 0.396184448063913762028147791554346199354L, 0.656329540957568516760105602115555736073L, 0.1410678455413176345310401990667063246115L, 0.621004667838855651847651367745487628637L, 0.01277988784767030635209958407461792778387L, 0.69482142276844418673788732511112265014L, 0.925705031133221932065307191539105635005L, 0.925744341385232535963050430363763081603L, 0.24189467813699258571134382505828701386L, 0.646009544609703485845605410919901799L, 0.051119212999532673562206731603906295406L, 0.85076142804383409765024452942896578158L }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/signature.h�����������������������������������������������������������0000664�0000000�0000000�00000003676�14110572173�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macro for checking that a function declaration is compliant. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 SIGNATURE_CHECK /* Check that the function FN takes the specified arguments ARGS with a return type of RET. This header is designed to be included after <config.h> and the one system header that is supposed to contain the function being checked, but prior to any other system headers that are necessary for the unit test. Therefore, this file does not include any system headers, nor reference anything outside of the macro arguments. For an example, if foo.h should provide: extern int foo (char, float); then the unit test named test-foo.c would start out with: #include <config.h> #include <foo.h> #include "signature.h" SIGNATURE_CHECK (foo, int, (char, float)); #include <other.h> ... */ # define SIGNATURE_CHECK(fn, ret, args) \ SIGNATURE_CHECK1 (fn, ret, args, __LINE__) /* Necessary to allow multiple SIGNATURE_CHECK lines in a unit test. Note that the checks must not occupy the same line. */ # define SIGNATURE_CHECK1(fn, ret, args, id) \ SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */ # define SIGNATURE_CHECK2(fn, ret, args, id) \ _GL_UNUSED static ret (*signature_check ## id) args = fn #endif /* SIGNATURE_CHECK */ ������������������������������������������������������������������gnulib-20210822~d383792/tests/socket-client.h�������������������������������������������������������0000664�0000000�0000000�00000003566�14110572173�0020370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create sockets for use in tests (client side). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> /* Creates a client socket, by connecting to a server on the given port. */ static int create_client_socket (int port) { int client_socket; /* Create a client socket. */ client_socket = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP); ASSERT (client_socket >= 0); /* Connect to the server process at the specified port. */ { struct sockaddr_in addr; memset (&addr, 0, sizeof (addr)); /* needed on AIX and OSF/1 */ addr.sin_family = AF_INET; #if 0 /* Unoptimized */ inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); #elif 0 /* Nearly optimized */ addr.sin_addr.s_addr = htonl (0x7F000001); /* 127.0.0.1 */ #else /* Fully optimized */ { unsigned char dotted[4] = { 127, 0, 0, 1 }; /* 127.0.0.1 */ memcpy (&addr.sin_addr.s_addr, dotted, 4); } #endif addr.sin_port = htons (port); ASSERT (connect (client_socket, (const struct sockaddr *) &addr, sizeof (addr)) == 0); } return client_socket; } ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/socket-server.h�������������������������������������������������������0000664�0000000�0000000�00000007401�14110572173�0020410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create sockets for use in tests (server side). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> /* Creates a server that can be used to listen on incoming connections. It uses the IPv4 protocol. If PORT is 0, a port is assigned by the kernel. Returns the server. Returns the chosen port in *PPORT. */ static int create_server (int port, unsigned int max_backlog, int *pport) { int server; /* Create a server socket. */ server = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP); if (server < 0) { fputs ("Skipping test: cannot create server socket: socket() failed\n", stderr); exit (77); } /* Bind it to a local IPv4 address. */ if (port != 0) { /* Set an option for the next bind() call: Avoid an EADDRINUSE error in case there are TIME_WAIT or CLOSE_WAIT sockets hanging around on the port. (Sockets in LISTEN or ESTABLISHED state on the same port will still yield an error.) */ unsigned int flag = 1; if (setsockopt (server, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (flag)) < 0) { fputs ("Skipping test: cannot create server socket: setsockopt() failed\n", stderr); exit (77); } } { struct sockaddr_in addr; memset (&addr, 0, sizeof (addr)); /* needed on AIX and OSF/1 */ addr.sin_family = AF_INET; #if 0 /* Unoptimized */ inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); #elif 0 /* Nearly optimized */ addr.sin_addr.s_addr = htonl (0x7F000001); /* 127.0.0.1 */ #else /* Fully optimized */ { unsigned char dotted[4] = { 127, 0, 0, 1 }; /* 127.0.0.1 */ memcpy (&addr.sin_addr.s_addr, dotted, 4); } #endif addr.sin_port = htons (port); if (bind (server, (const struct sockaddr *) &addr, sizeof (addr)) < 0) { fputs ("Skipping test: cannot create server socket: bind() failed\n", stderr); exit (77); } } if (port == 0) { /* Get the port that was assigned by bind(). */ struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); if (getsockname (server, (struct sockaddr *) &addr, &addrlen) < 0) { fputs ("Skipping test: cannot create server socket: getsockname() failed\n", stderr); exit (77); } port = ntohs (addr.sin_port); } /* Start listening for a connection from the child process. */ if (listen (server, max_backlog) < 0) { fputs ("Skipping test: cannot create server socket: listen() failed\n", stderr); exit (77); } *pport = port; return server; } /* Creates a server socket, by accepting a connection to a server. */ static int create_server_socket (int server) { struct sockaddr_storage addr; socklen_t addrlen = sizeof (addr); int connected_socket = accept (server, (struct sockaddr *) &addr, &addrlen); ASSERT (connected_socket >= 0); return connected_socket; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-_Exit.c����������������������������������������������������������0000664�0000000�0000000�00000002223�14110572173�0017631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of terminating the current process. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <stdlib.h> /* But did he ever return? No he never returned, And his fate is still unlearned ... */ static _Noreturn void MTA (int); static _Noreturn void Charlie (int n) { MTA (n - 1); } static void MTA (int n) { if (n < 0) _Exit (81); Charlie (n - 1); } int main (int argc, char **argv) { MTA (argc + !!argv); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-_Exit.sh���������������������������������������������������������0000775�0000000�0000000�00000000071�14110572173�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-_Exit${EXEEXT} test $? = 81 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-accept.c���������������������������������������������������������0000664�0000000�0000000�00000002773�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test accepting a connection to a server socket. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (accept, int, (int, struct sockaddr *, socklen_t *)); #include <errno.h> #include <netinet/in.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (accept (-1, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (accept (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } �����gnulib-20210822~d383792/tests/test-accept4.c��������������������������������������������������������0000664�0000000�0000000�00000003301�14110572173�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test accepting a connection to a server socket. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (accept4, int, (int, struct sockaddr *, socklen_t *, int)); #include <errno.h> #include <fcntl.h> #include <netinet/in.h> #include <unistd.h> #include "binary-io.h" #include "sockets.h" #include "macros.h" #ifndef SOCK_CLOEXEC # define SOCK_CLOEXEC 0 #endif int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (accept4 (-1, (struct sockaddr *) &addr, &addrlen, SOCK_CLOEXEC) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (accept4 (99, (struct sockaddr *) &addr, &addrlen, SOCK_CLOEXEC) == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-access.c���������������������������������������������������������0000664�0000000�0000000�00000004523�14110572173�0020027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of access. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (access, int, (const char *, int)); #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include "root-uid.h" #include "macros.h" /* mingw and MSVC 9 lack geteuid, so setup a dummy value. */ #if !HAVE_GETEUID # define geteuid() ROOT_UID #endif #define BASE "test-access.t" int main () { /* Remove anything from prior partial run. */ unlink (BASE "f"); unlink (BASE "f1"); chmod (BASE "f2", 0600); unlink (BASE "f2"); { errno = 0; ASSERT (access (BASE "f", R_OK) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (access (BASE "f", W_OK) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (access (BASE "f", X_OK) == -1); ASSERT (errno == ENOENT); } { ASSERT (close (creat (BASE "f1", 0700)) == 0); ASSERT (access (BASE "f1", R_OK) == 0); ASSERT (access (BASE "f1", W_OK) == 0); ASSERT (access (BASE "f1", X_OK) == 0); } { ASSERT (close (creat (BASE "f2", 0600)) == 0); ASSERT (chmod (BASE "f2", 0400) == 0); ASSERT (access (BASE "f2", R_OK) == 0); if (geteuid () != ROOT_UID) { errno = 0; ASSERT (access (BASE "f2", W_OK) == -1); ASSERT (errno == EACCES); } #if defined _WIN32 && !defined __CYGWIN__ /* X_OK works like R_OK. */ ASSERT (access (BASE "f2", X_OK) == 0); #else errno = 0; ASSERT (access (BASE "f2", X_OK) == -1); ASSERT (errno == EACCES); #endif } /* Cleanup. */ ASSERT (unlink (BASE "f1") == 0); ASSERT (chmod (BASE "f2", 0600) == 0); ASSERT (unlink (BASE "f2") == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-acos.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acos() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (acos, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = acos (x); ASSERT (y >= 0.9272952180 && y <= 0.9272952181); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-acosf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acosf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (acosf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = acosf (x); ASSERT (y >= 0.9272951f && y <= 0.9272953f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-acosl.c����������������������������������������������������������0000664�0000000�0000000�00000002251�14110572173�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acosl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (acosl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = acosl (x); ASSERT (y >= 0.9272952180L && y <= 0.9272952181L); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-aligned-malloc.c�������������������������������������������������0000664�0000000�0000000�00000005617�14110572173�0021443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of allocating memory with given alignment. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> #include <stdint.h> #include <stdlib.h> #define ALIGNMENT 4 #define aligned_malloc aligned4_malloc #define aligned_free aligned4_free #include "aligned-malloc.h" #undef aligned_free #undef aligned_malloc #undef ALIGNMENT #define ALIGNMENT 8 #define aligned_malloc aligned8_malloc #define aligned_free aligned8_free #include "aligned-malloc.h" #undef aligned_free #undef aligned_malloc #undef ALIGNMENT #define ALIGNMENT 16 #define aligned_malloc aligned16_malloc #define aligned_free aligned16_free #include "aligned-malloc.h" #undef aligned_free #undef aligned_malloc #undef ALIGNMENT #define ALIGNMENT 32 #define aligned_malloc aligned32_malloc #define aligned_free aligned32_free #include "aligned-malloc.h" #undef aligned_free #undef aligned_malloc #undef ALIGNMENT #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { static size_t sizes[] = { 13, 8, 17, 450, 320, 1, 99, 4, 15, 16, 2, 76, 37, 127, 2406, 641 }; void *volatile aligned4_blocks[SIZEOF (sizes)]; void *volatile aligned8_blocks[SIZEOF (sizes)]; void *volatile aligned16_blocks[SIZEOF (sizes)]; void *volatile aligned32_blocks[SIZEOF (sizes)]; size_t i; for (i = 0; i < SIZEOF (sizes); i++) { size_t size = sizes[i]; aligned4_blocks[i] = aligned4_malloc (size); ASSERT (((uintptr_t) aligned4_blocks[i] % 4) == 0); memset (aligned4_blocks[i], 'w', size); aligned8_blocks[i] = aligned8_malloc (size); ASSERT (((uintptr_t) aligned8_blocks[i] % 8) == 0); memset (aligned8_blocks[i], 'x', size); aligned16_blocks[i] = aligned16_malloc (size); ASSERT (((uintptr_t) aligned16_blocks[i] % 16) == 0); memset (aligned16_blocks[i], 'y', size); aligned32_blocks[i] = aligned32_malloc (size); ASSERT (((uintptr_t) aligned32_blocks[i] % 32) == 0); memset (aligned32_blocks[i], 'z', size); } for (i = 0; i < SIZEOF (sizes); i++) { aligned4_free (aligned4_blocks[i]); aligned8_free (aligned8_blocks[i]); aligned16_free (aligned16_blocks[i]); aligned32_free (aligned32_blocks[i]); } return 0; } �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-aligned_alloc.c��������������������������������������������������0000664�0000000�0000000�00000006252�14110572173�0021344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of allocating memory with given alignment. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <string.h> #include "macros.h" #define ROUNDUP(x,y) (((x) + (y) - 1) & - (y)) int main (int argc, char *argv[]) { #if HAVE_ALIGNED_ALLOC static size_t sizes[] = { 13, 8, 17, 450, 320, 1, 99, 4, 15, 16, 2, 76, 37, 127, 2406, 641, 5781 }; void *volatile aligned2_blocks[SIZEOF (sizes)]; void *volatile aligned4_blocks[SIZEOF (sizes)]; void *volatile aligned8_blocks[SIZEOF (sizes)]; void *volatile aligned16_blocks[SIZEOF (sizes)]; void *volatile aligned32_blocks[SIZEOF (sizes)]; void *volatile aligned64_blocks[SIZEOF (sizes)]; size_t i; for (i = 0; i < SIZEOF (sizes); i++) { size_t size = sizes[i]; aligned2_blocks[i] = aligned_alloc (2, ROUNDUP (size, 2)); ASSERT (aligned2_blocks[i] != NULL); ASSERT (((uintptr_t) aligned2_blocks[i] % 2) == 0); memset (aligned2_blocks[i], 'u', size); aligned4_blocks[i] = aligned_alloc (4, ROUNDUP (size, 4)); ASSERT (aligned4_blocks[i] != NULL); ASSERT (((uintptr_t) aligned4_blocks[i] % 4) == 0); memset (aligned4_blocks[i], 'v', size); aligned8_blocks[i] = aligned_alloc (8, ROUNDUP (size, 8)); ASSERT (aligned8_blocks[i] != NULL); ASSERT (((uintptr_t) aligned8_blocks[i] % 8) == 0); memset (aligned8_blocks[i], 'w', size); aligned16_blocks[i] = aligned_alloc (16, ROUNDUP (size, 16)); ASSERT (aligned16_blocks[i] != NULL); ASSERT (((uintptr_t) aligned16_blocks[i] % 16) == 0); memset (aligned16_blocks[i], 'x', size); aligned32_blocks[i] = aligned_alloc (32, ROUNDUP (size, 32)); ASSERT (aligned32_blocks[i] != NULL); ASSERT (((uintptr_t) aligned32_blocks[i] % 32) == 0); memset (aligned32_blocks[i], 'y', size); aligned64_blocks[i] = aligned_alloc (64, ROUNDUP (size, 64)); ASSERT (aligned64_blocks[i] != NULL); ASSERT (((uintptr_t) aligned64_blocks[i] % 64) == 0); memset (aligned64_blocks[i], 'z', size); } for (i = 0; i < SIZEOF (sizes); i++) { free (aligned2_blocks[i]); free (aligned4_blocks[i]); free (aligned8_blocks[i]); free (aligned16_blocks[i]); free (aligned32_blocks[i]); free (aligned64_blocks[i]); } return 0; #else fputs ("Skipping test: function 'aligned_alloc' does not exist\n", stderr); return 77; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-alignof.c��������������������������������������������������������0000664�0000000�0000000�00000003061�14110572173�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <alignof.h>. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <alignof.h> #include <stddef.h> #include <stdint.h> #include "verify.h" typedef long double longdouble; typedef struct { char a[1]; } struct1; typedef struct { char a[2]; } struct2; typedef struct { char a[3]; } struct3; typedef struct { char a[4]; } struct4; #define CHECK(type) \ typedef struct { char slot1; type slot2; } type##_helper; \ verify (alignof_slot (type) == offsetof (type##_helper, slot2)); \ const int type##_slot_alignment = alignof_slot (type); \ const int type##_type_alignment = alignof_type (type); CHECK (char) CHECK (short) CHECK (int) CHECK (long) CHECK (float) CHECK (double) CHECK (longdouble) #ifdef INT64_MAX CHECK (int64_t) #endif CHECK (struct1) CHECK (struct2) CHECK (struct3) CHECK (struct4) int main () { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-alloca-opt.c�����������������������������������������������������0000664�0000000�0000000�00000002774�14110572173�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of optional automatic memory allocation. Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. This 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 <alloca.h> #if HAVE_ALLOCA static void do_allocation (int n) { void *volatile ptr = alloca (n); (void) ptr; } void (*func) (int) = do_allocation; #endif int main () { #if HAVE_ALLOCA int i; /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 100000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } #endif return 0; } ����gnulib-20210822~d383792/tests/test-arcfour.c��������������������������������������������������������0000664�0000000�0000000�00000004161�14110572173�0020225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 "arcfour.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { arcfour_context ctx; /* Test vector from Cryptlib via Libgcrypt labeled there: "from the State/Commerce Department". */ static char key_1[] = { 0x61, 0x8A, 0x63, 0xD2, 0xFB }; static char plaintext_1[] = { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C }; static const char ciphertext_1[] = { 0xF1, 0x38, 0x29, 0xC9, 0xDE }; char scratch[16]; arcfour_setkey (&ctx, key_1, sizeof (key_1)); arcfour_stream (&ctx, plaintext_1, scratch, sizeof (plaintext_1)); if (memcmp (scratch, ciphertext_1, sizeof (ciphertext_1))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", ciphertext_1[i] & 0xFF); printf ("\n"); return 1; } /* decrypt */ arcfour_setkey (&ctx, key_1, sizeof (key_1)); arcfour_stream (&ctx, scratch, scratch, sizeof (plaintext_1)); if (memcmp (scratch, plaintext_1, sizeof (plaintext_1))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", plaintext_1[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-arctwo.c���������������������������������������������������������0000664�0000000�0000000�00000013704�14110572173�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 "arctwo.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { arctwo_context ctx; char scratch[16]; /* Test vectors from Peter Gutmann's paper. */ static char key_1[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char plaintext_1[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const char ciphertext_1[] = { 0x1C, 0x19, 0x8A, 0x83, 0x8D, 0xF0, 0x28, 0xB7 }; static char key_2[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; static char plaintext_2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char ciphertext_2[] = { 0x50, 0xDC, 0x01, 0x62, 0xBD, 0x75, 0x7F, 0x31 }; /* This one was checked against libmcrypt's RFC2268. */ static char key_3[] = { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char plaintext_3[] = { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char ciphertext_3[] = { 0x8f, 0xd1, 0x03, 0x89, 0x33, 0x6b, 0xf9, 0x5e }; /* From RFC2268. */ static char key_4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char plaintext_4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char ciphertext_4[] = { 0xeb, 0xb7, 0x73, 0xf9, 0x93, 0x27, 0x8e, 0xff }; static char key_5[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static char plaintext_5[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static char ciphertext_5[] = { 0x27, 0x8b, 0x27, 0xe4, 0x2e, 0x2f, 0x0d, 0x49 }; static char key_6[] = { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char plaintext_6[] = { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; static char ciphertext_6[] = { 0x30, 0x64, 0x9e, 0xdf, 0x9b, 0xe7, 0xd2, 0xc2 }; /* First test. */ arctwo_setkey_ekb (&ctx, sizeof (key_1), key_1, 0); arctwo_encrypt (&ctx, plaintext_1, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_1, sizeof (ciphertext_1))) return 1; arctwo_setkey_ekb (&ctx, sizeof (key_1), key_1, 0); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_1, sizeof (plaintext_1))) return 1; /* Second test. */ arctwo_setkey_ekb (&ctx, sizeof (key_2), key_2, 0); arctwo_encrypt (&ctx, plaintext_2, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_2, sizeof (ciphertext_2))) return 1; arctwo_setkey_ekb (&ctx, sizeof (key_2), key_2, 0); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_2, sizeof (plaintext_2))) return 1; /* Third test. */ arctwo_setkey_ekb (&ctx, sizeof (key_3), key_3, 0); arctwo_encrypt (&ctx, plaintext_3, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_3, sizeof (ciphertext_3))) return 1; arctwo_setkey_ekb (&ctx, sizeof (key_3), key_3, 0); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_3, sizeof (plaintext_3))) return 1; /* Fourth test. */ arctwo_setkey_ekb (&ctx, sizeof (key_4), key_4, 63); arctwo_encrypt (&ctx, plaintext_4, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_4, sizeof (ciphertext_4))) { size_t i; printf ("expected:\n"); for (i = 0; i < sizeof (ciphertext_4); i++) printf ("%02x ", ciphertext_4[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < sizeof (ciphertext_4); i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } arctwo_setkey_ekb (&ctx, sizeof (key_4), key_4, 63); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_4, sizeof (plaintext_4))) return 1; /* Fifth test. */ arctwo_setkey_ekb (&ctx, sizeof (key_5), key_5, 64); arctwo_encrypt (&ctx, plaintext_5, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_5, sizeof (ciphertext_5))) { size_t i; printf ("expected:\n"); for (i = 0; i < sizeof (ciphertext_5); i++) printf ("%02x ", ciphertext_5[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < sizeof (ciphertext_5); i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } arctwo_setkey_ekb (&ctx, sizeof (key_5), key_5, 64); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_5, sizeof (plaintext_5))) return 1; /* Sixth test. */ arctwo_setkey_ekb (&ctx, 8, key_6, 64); arctwo_encrypt (&ctx, plaintext_6, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, ciphertext_6, sizeof (ciphertext_6))) { size_t i; printf ("expected:\n"); for (i = 0; i < sizeof (ciphertext_6); i++) printf ("%02x ", ciphertext_6[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < sizeof (ciphertext_6); i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } arctwo_setkey_ekb (&ctx, sizeof (key_6), key_6, 64); arctwo_decrypt (&ctx, scratch, scratch, ARCTWO_BLOCK_SIZE); if (memcmp (scratch, plaintext_6, sizeof (plaintext_6))) return 1; return 0; } ������������������������������������������������������������gnulib-20210822~d383792/tests/test-areadlink-with-size.c��������������������������������������������0000664�0000000�0000000�00000002420�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink_with_size. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "areadlink.h" #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-areadlink-with-size.t" #include "test-areadlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_areadlink (areadlink_with_size, true); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-areadlink.c������������������������������������������������������0000664�0000000�0000000�00000002604�14110572173�0020516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "areadlink.h" #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-areadlink.t" #include "test-areadlink.h" /* Wrapper for testing areadlink. */ static char * do_areadlink (char const *name, _GL_UNUSED size_t ignored) { return areadlink (name); } int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_areadlink (do_areadlink, true); } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-areadlink.h������������������������������������������������������0000664�0000000�0000000�00000005414�14110572173�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink and friends. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test areadlink(a), areadlink_with_size(a,b), and areadlinkat(AT_FDCWD,a). FUNC is the function to test; a length is always supplied, but may be ignored. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_areadlink (char * (*func) (char const *, size_t), bool print) { /* Sanity checks of failures. Mingw lacks symlink, but areadlink can still distinguish between various errors. */ errno = 0; ASSERT (func ("no_such", 1) == NULL); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", 1) == NULL); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("", 1) == NULL); ASSERT (errno == ENOENT || errno == EINVAL); errno = 0; ASSERT (func (".", 1) == NULL); ASSERT (errno == EINVAL); errno = 0; ASSERT (func ("./", 1) == NULL); ASSERT (errno == EINVAL); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func (BASE "file", 1) == NULL); ASSERT (errno == EINVAL); errno = 0; ASSERT (func (BASE "file/", 1) == NULL); ASSERT (errno == ENOTDIR || errno == EINVAL); /* AIX yields EINVAL */ ASSERT (unlink (BASE "file") == 0); /* Now test actual symlinks. */ if (symlink (BASE "dir", BASE "link")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; ASSERT (func (BASE "link/", 1) == NULL); ASSERT (errno == EINVAL); { /* Too small a guess is okay. */ char *buf = func (BASE "link", 1); ASSERT (buf); ASSERT (strcmp (buf, BASE "dir") == 0); free (buf); /* Too large a guess is okay. */ buf = func (BASE "link", 10000000); ASSERT (buf); ASSERT (strcmp (buf, BASE "dir") == 0); free (buf); } ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-areadlinkat-with-size.c������������������������������������������0000664�0000000�0000000�00000004762�14110572173�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlinkat_with_size. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "areadlink.h" #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-areadlinkat-with-size.t" #include "test-areadlink.h" static int dfd = AT_FDCWD; /* Wrapper for testing areadlinkat_with_size. */ static char * do_areadlinkat_with_size (char const *name, size_t size) { return areadlinkat_with_size (dfd, name, size); } int main (void) { int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Basic tests. */ result = test_areadlink (do_areadlinkat_with_size, false); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_areadlink (do_areadlinkat_with_size, false) == result); /* Relative tests. */ if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); else { char *buf; ASSERT (symlink ("nowhere", BASE "link") == 0); ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (chdir (BASE "dir") == 0); buf = areadlinkat_with_size (dfd, BASE "link", strlen (BASE "link")); ASSERT (buf); ASSERT (strcmp (buf, "nowhere") == 0); free (buf); errno = 0; ASSERT (areadlinkat_with_size (-1, BASE "link", 1) == NULL); ASSERT (errno == EBADF); errno = 0; ASSERT (areadlinkat_with_size (AT_FDCWD, BASE "link", 1) == NULL); ASSERT (errno == ENOENT); ASSERT (chdir ("..") == 0); ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link") == 0); } ASSERT (close (dfd) == 0); return result; } ��������������gnulib-20210822~d383792/tests/test-areadlinkat.c����������������������������������������������������0000664�0000000�0000000�00000004572�14110572173�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlinkat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "areadlink.h" #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-areadlinkat.t" #include "test-areadlink.h" static int dfd = AT_FDCWD; /* Wrapper for testing areadlinkat. */ static char * do_areadlinkat (char const *name, _GL_UNUSED size_t ignored) { return areadlinkat (dfd, name); } int main (void) { int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Basic tests. */ result = test_areadlink (do_areadlinkat, false); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_areadlink (do_areadlinkat, false) == result); /* Relative tests. */ if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); else { char *buf; ASSERT (symlink ("nowhere", BASE "link") == 0); ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (chdir (BASE "dir") == 0); buf = areadlinkat (dfd, BASE "link"); ASSERT (buf); ASSERT (strcmp (buf, "nowhere") == 0); free (buf); errno = 0; ASSERT (areadlinkat (-1, BASE "link") == NULL); ASSERT (errno == EBADF); errno = 0; ASSERT (areadlinkat (AT_FDCWD, BASE "link") == NULL); ASSERT (errno == ENOENT); ASSERT (chdir ("..") == 0); ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link") == 0); } ASSERT (close (dfd) == 0); return result; } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-argmatch.c�������������������������������������������������������0000664�0000000�0000000�00000012054�14110572173�0020352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exact or abbreviated match search. Copyright (C) 1990, 1998-1999, 2001-2021 Free Software Foundation, Inc. This 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, based on test code by David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> /* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that main's use of CHECK macros expands to code that is too complicated for gcc -fanalyzer. Suppress the resulting bogus warnings. */ #if 10 <= __GNUC__ # pragma GCC diagnostic ignored "-Wanalyzer-null-argument" #endif #include "argmatch.h" #include <stdlib.h> #include "macros.h" # define N_(Msgid) (Msgid) /* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in <config.h>, and thus must link with a definition of that function. Provide it here. */ #ifdef ARGMATCH_DIE_DECL _Noreturn ARGMATCH_DIE_DECL; ARGMATCH_DIE_DECL { exit (1); } #endif enum backup_type { no_backups, simple_backups, numbered_existing_backups, numbered_backups }; static const char *const backup_args[] = { "no", "none", "off", "simple", "never", "single", "existing", "nil", "numbered-existing", "numbered", "t", "newstyle", NULL }; static const enum backup_type backup_vals[] = { no_backups, no_backups, no_backups, simple_backups, simple_backups, simple_backups, numbered_existing_backups, numbered_existing_backups, numbered_existing_backups, numbered_backups, numbered_backups, numbered_backups }; ARGMATCH_DEFINE_GROUP(backup, enum backup_type) static const argmatch_backup_doc argmatch_backup_docs[] = { { "no", N_("never make backups (even if --backup is given)") }, { "numbered", N_("make numbered backups") }, { "existing", N_("numbered if numbered backups exist, simple otherwise") }, { "simple", N_("always make simple backups") }, { NULL, NULL } }; static const argmatch_backup_arg argmatch_backup_args[] = { { "no", no_backups }, { "none", no_backups }, { "off", no_backups }, { "simple", simple_backups }, { "never", simple_backups }, { "single", simple_backups }, { "existing", numbered_existing_backups }, { "nil", numbered_existing_backups }, { "numbered-existing", numbered_existing_backups }, { "numbered", numbered_backups }, { "t", numbered_backups }, { "newstyle", numbered_backups }, { NULL, no_backups } }; const argmatch_backup_group_type argmatch_backup_group = { argmatch_backup_args, argmatch_backup_docs, N_("\ The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\ The version control method may be selected via the --backup option or through\n\ the VERSION_CONTROL environment variable. Here are the values:\n"), NULL }; int main (int argc, char *argv[]) { #define CHECK(Input, Output) \ do { \ ASSERT (ARGMATCH (Input, backup_args, backup_vals) == Output); \ ASSERT (argmatch_backup_choice (Input) == Output); \ if (0 <= Output) \ { \ enum backup_type val \ = argmatch_backup_args[Output < 0 ? 0 : Output].val; \ ASSERT (*argmatch_backup_value ("test", Input) == val); \ ASSERT (*argmatch_backup_value ("test", \ argmatch_backup_argument (&val)) \ == val); \ } \ } while (0) /* Not found. */ CHECK ("klingon", -1); /* Exact match. */ CHECK ("none", 1); CHECK ("nil", 7); /* Too long. */ CHECK ("nilpotent", -1); /* Abbreviated. */ CHECK ("simpl", 3); CHECK ("simp", 3); CHECK ("sim", 3); /* Exact match and abbreviated. */ CHECK ("numbered", 9); CHECK ("numbere", -2); CHECK ("number", -2); CHECK ("numbe", -2); CHECK ("numb", -2); CHECK ("num", -2); CHECK ("nu", -2); CHECK ("n", -2); /* Ambiguous abbreviated. */ CHECK ("ne", -2); /* Ambiguous abbreviated, but same value ("single" and "simple"). */ CHECK ("si", 3); CHECK ("s", 3); #undef CHECK argmatch_backup_usage (stdout); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-argp-2.sh��������������������������������������������������������0000775�0000000�0000000�00000006660�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for argp. # Copyright (C) 2006-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. */ . "${srcdir=.}/init.sh"; path_prepend_ . ERR=0 unset ARGP_HELP_FMT func_compare() { # If argp was compiled without base_name, it will display full program name. # If run on mingw, it will display the program name with a .exe suffix. sed '1{ s,: [^ ]*/test-argp,: test-argp, s,: test-argp\.exe,: test-argp, }' | LC_ALL=C tr -d '\r' > out compare expected out } #### # Test --usage output cat > expected <<EOT Usage: test-argp [-tvCSOlp?V] [-f FILE] [-r FILE] [-o[ARG]] [--test] [--file=FILE] [--input=FILE] [--read=FILE] [--verbose] [--cantiga] [--sonet] [--option] [--optional[=ARG]] [--many] [--one] [--two] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ${CHECKER} test-argp${EXEEXT} --usage | func_compare || ERR=1 #### # Test working usage-indent format cat > expected <<EOT Usage: test-argp [-tvCSOlp?V] [-f FILE] [-r FILE] [-o[ARG]] [--test] [--file=FILE] [--input=FILE] [--read=FILE] [--verbose] [--cantiga] [--sonet] [--option] [--optional[=ARG]] [--many] [--one] [--two] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ARGP_HELP_FMT='usage-indent=0' ${CHECKER} test-argp${EXEEXT} --usage | func_compare || ERR=1 #### # Test --help output cat >expected <<EOT Usage: test-argp [OPTION...] ARGS... documentation string Main options -t, --test Option Group 1 -f, -r, --file=FILE, --input=FILE, --read=FILE Option with a mandatory argument -v, --verbose Simple option without arguments Option Group 1.1 -C, --cantiga create a cantiga -S, --sonet create a sonet Option Group 2 -O, --option An option -o, --optional[=ARG] Option with an optional argument. ARG is one of the following: many many units one one unit two two units Option Group 2.1 -l, --limerick create a limerick -p, --poem create a poem -?, --help give this help list --usage give a short usage message -V, --version print program version Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Report bugs to <>. EOT # Compare --help output, but filter out any bug-reporting email address. ${CHECKER} test-argp${EXEEXT} --help \ | sed 's/^\(Report bugs to \)<[^>]*>.$/\1<>./' | func_compare || ERR=1 #### # Test ambiguous option handling ${CHECKER} test-argp${EXEEXT} --optio 2>/dev/null && ERR=1 #### # Run built-in tests ${CHECKER} test-argp${EXEEXT} || ERR=1 Exit $ERR ��������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-argp-version-etc-1.sh��������������������������������������������0000775�0000000�0000000�00000002701�14110572173�0022300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for argp-version-etc. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . ERR=0 LC_ALL=C export LC_ALL cat > expected <<EOT test-argp-version-etc (PROJECT) VERSION COPYRIGHT Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Sergey Poznyakoff. EOT ${CHECKER} test-argp-version-etc${EXEEXT} --version | sed '1s/test-argp-version-etc (.*) .*/test-argp-version-etc (PROJECT) VERSION/ /^Packaged by/d 2,3 s/Copyright (C) [0-9]\{4,4\}/COPYRIGHT/' | tr -d '\015' > output compare expected output || ERR=1 Exit $ERR ���������������������������������������������������������������gnulib-20210822~d383792/tests/test-argp-version-etc.c�����������������������������������������������0000664�0000000�0000000�00000002300�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for argp-version-etc. Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of the GNUlib Library. This 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 "argp-version-etc.h" #include "argp.h" static char doc[] = "test for the argp-version-etc module"; struct argp test_argp = { NULL, NULL, NULL, doc, NULL, NULL, NULL }; const char *authors[] = { "Sergey Poznyakoff", NULL }; int main (int argc, char **argv) { argp_version_setup ("test-argp-version-etc", authors); return argp_parse (&test_argp, argc, argv, 0, NULL, NULL); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-argp.c�����������������������������������������������������������0000664�0000000�0000000�00000024501�14110572173�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for argp. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This file is part of the GNUlib Library. This 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 "argp.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #if HAVE_STRINGS_H # include <strings.h> #endif #include "macros.h" struct test_args { int test; int verbose; char *file; int read; char *hidden; int opt; char *optional; int optional_set; int group_2_1_option; int group_1_1_option; }; static struct argp_option group1_option[] = { { NULL, 0, NULL, 0, "Option Group 1", 0 }, { "verbose", 'v', NULL, 0, "Simple option without arguments", 1 }, { "file", 'f', "FILE", 0, "Option with a mandatory argument", 1 }, { "input", 0, NULL, OPTION_ALIAS, NULL, 1 }, { "read", 'r', NULL, OPTION_ALIAS, NULL, 1 }, { "hidden", 'H', "FILE", OPTION_HIDDEN, "Hidden option", 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'v': args->verbose++; break; case 'r': args->read = 1; FALLTHROUGH; case 'f': args->file = arg; break; case 'H': args->hidden = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_argp = { group1_option, group1_parser }; struct argp_child group1_child = { &group1_argp, 0, "", 1 }; static struct argp_option group1_1_option[] = { { NULL, 0, NULL, 0, "Option Group 1.1", 0 }, { "cantiga", 'C', NULL, 0, "create a cantiga" }, { "sonet", 'S', NULL, 0, "create a sonet" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'C': case 'S': args->group_1_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_1_argp = { group1_1_option, group1_1_parser }; struct argp_child group1_1_child = { &group1_1_argp, 0, "", 2 }; static struct argp_option group2_option[] = { { NULL, 0, NULL, 0, "Option Group 2", 0 }, { "option", 'O', NULL, 0, "An option", 1 }, { "optional", 'o', "ARG", OPTION_ARG_OPTIONAL, "Option with an optional argument. ARG is one of the following:", 2 }, { "one", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "one unit", 3 }, { "two", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "two units", 3 }, { "many", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "many units", 3 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'O': args->opt = 1; break; case 'o': args->optional_set = 1; args->optional = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_argp = { group2_option, group2_parser }; struct argp_child group2_child = { &group2_argp, 0, "", 2 }; static struct argp_option group2_1_option[] = { { NULL, 0, NULL, 0, "Option Group 2.1", 0 }, { "poem", 'p', NULL, 0, "create a poem" }, { "limerick", 'l', NULL, 0, "create a limerick" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'p': case 'e': args->group_2_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_1_argp = { group2_1_option, group2_1_parser }; struct argp_child group2_1_child = { &group2_1_argp, 0, "", 2 }; static struct argp_option main_options[] = { { NULL, 0, NULL, 0, "Main options", 0 }, { "test", 't', NULL, 0, NULL, 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t parse_opt (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; int i; switch (key) { case ARGP_KEY_INIT: for (i = 0; state->root_argp->children[i].argp; i++) state->child_inputs[i] = args; break; case 't': args->test = 1; break; default: return ARGP_ERR_UNKNOWN; } return 0; } const char *argp_program_version = "test_argp (" PACKAGE_NAME ") " VERSION; const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">"; static char doc[] = "documentation string"; struct argp test_argp = { main_options, parse_opt, "ARGS...", doc, NULL, NULL, NULL }; #define NARGS(a) (sizeof(a) / sizeof((a)[0]) - 1) #define ARGV0 "test-argp" #define init_args(a) memset (&(a), 0, sizeof (a)); #define INIT_TEST_COMMON(n) \ int argc = NARGS (argv); \ struct test_args test_args; \ init_args (test_args); \ test_number = n; #define INIT_TEST1(n, arg1) \ char *argv[] = { ARGV0, arg1, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST2(n, arg1, arg2) \ char *argv[] = { ARGV0, arg1, arg2, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST3(n, arg1, arg2, arg3) \ char *argv[] = { ARGV0, arg1, arg2, arg3, NULL }; \ INIT_TEST_COMMON (n) int test_number; unsigned failure_count = 0; static void fail (const char *msg) { fprintf (stderr, "Test %d: %s\n", test_number, msg); failure_count++; } static void test1 (struct argp *argp) { INIT_TEST1 (1, "--test"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } static void test2 (struct argp *argp) { INIT_TEST1 (2, "-t"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } static void test_file (struct argp *argp, int argc, char **argv, struct test_args *args) { if (argp_parse (argp, argc, argv, 0, NULL, args)) fail ("argp_parse failed"); else if (!args->file) fail ("option not processed"); else if (strcmp (args->file, "FILE")) fail ("option processed incorrectly"); } static void test3 (struct argp *argp) { INIT_TEST1 (3, "--file=FILE"); test_file (argp, argc, argv, &test_args); } static void test4 (struct argp *argp) { INIT_TEST2 (4, "--file", "FILE"); test_file (argp, argc, argv, &test_args); } static void test5 (struct argp *argp) { INIT_TEST1 (5, "--input=FILE"); test_file (argp, argc, argv, &test_args); } static void test6 (struct argp *argp) { INIT_TEST2 (6, "--input", "FILE"); test_file (argp, argc, argv, &test_args); } static void test_optional (struct argp *argp, int argc, char **argv, struct test_args *args, const char *val, const char *a) { int index; if (argp_parse (argp, argc, argv, 0, &index, args)) fail ("argp_parse failed"); else if (!args->optional_set) fail ("option not processed"); if (!val) { if (args->optional) fail ("option processed incorrectly"); } else if (strcmp (args->optional, val)) fail ("option processed incorrectly"); if (a) { if (index == argc) fail ("expected command line argument not found"); else if (strcmp (argv[index], a)) fail ("expected command line argument does not match"); } } static void test7 (struct argp *argp) { INIT_TEST1 (7, "-oARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test8 (struct argp *argp) { INIT_TEST2 (8, "-o", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } static void test9 (struct argp *argp) { INIT_TEST1 (9, "--optional=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test10 (struct argp *argp) { INIT_TEST2 (10, "--optional", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } static void test11 (struct argp *argp) { INIT_TEST1 (11, "--optiona=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test12 (struct argp *argp) { INIT_TEST3 (12, "--option", "--optional=OPT", "FILE"); test_optional (argp, argc, argv, &test_args, "OPT", "FILE"); } static void test13 (struct argp *argp) { INIT_TEST1 (1, "--cantiga"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_1_1_option != 'C') fail ("option not processed"); } static void test14 (struct argp *argp) { INIT_TEST1 (1, "--limerick"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_2_1_option != 'l') fail ("option not processed"); } static void test15 (struct argp *argp) { INIT_TEST2 (1, "-r", "FILE"); test_file (argp, argc, argv, &test_args); if (!test_args.read) fail ("short alias not recognized properly"); } typedef void (*test_fp) (struct argp *argp); static test_fp test_fun[] = { test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12, test13, test14, test15, NULL }; int main (int argc, char **argv) { struct argp_child argp_children[3], group1_children[2], group2_children[2]; test_fp *fun; group1_children[0] = group1_1_child; group1_children[1].argp = NULL; group1_argp.children = group1_children; group2_children[0] = group2_1_child; group2_children[1].argp = NULL; group2_argp.children = group2_children; argp_children[0] = group1_child; argp_children[1] = group2_child; argp_children[2].argp = NULL; test_argp.children = argp_children; if (argc > 0) { struct test_args test_args; init_args (test_args); return argp_parse (&test_argp, argc, argv, 0, NULL, &test_args); } for (fun = test_fun; *fun; fun++) (*fun) (&test_argp); if (failure_count) return 1; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-argv-iter.c������������������������������������������������������0000664�0000000�0000000�00000005647�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test argv iterator Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "argv-iter.h" #include <stdio.h> #include <string.h> #include "macros.h" #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) #define STREQ(a, b) (strcmp (a, b) == 0) static FILE * write_nul_delimited_argv (char **argv) { FILE *fp = tmpfile (); ASSERT (fp); while (*argv) { size_t len = strlen (*argv) + 1; ASSERT (fwrite (*argv, len, 1, fp) == 1); argv++; } ASSERT (fflush (fp) == 0); rewind (fp); return fp; } int main (void) { static char one[] = "1"; static char two[] = "2"; static char three[] = "3"; static char *av[][4] = { {NULL}, {one, NULL}, {one, two, NULL}, {one, two, three, NULL} }; int use_stream; for (use_stream = 0; use_stream < 2; use_stream++) { size_t i; for (i = 0; i < ARRAY_CARDINALITY (av); i++) { FILE *fp; struct argv_iterator *ai; size_t n_found = 0; if (use_stream) { /* Generate an identical list to be read via FP. */ ASSERT ((fp = write_nul_delimited_argv (av[i])) != NULL); ai = argv_iter_init_stream (fp); } else { fp = NULL; ai = argv_iter_init_argv (av[i]); } ASSERT (ai); while (1) { enum argv_iter_err ai_err; char *s = argv_iter (ai, &ai_err); ASSERT ((i == n_found) == (ai_err == AI_ERR_EOF)); ASSERT ((s == NULL) ^ (ai_err == AI_ERR_OK)); ASSERT (ai_err == AI_ERR_OK || ai_err == AI_ERR_EOF); if (ai_err == AI_ERR_OK) ++n_found; if (ai_err == AI_ERR_EOF) break; /* In stream mode, the strings are equal, but in argv mode the actual pointers are equal. */ ASSERT (use_stream ? STREQ (s, av[i][n_found - 1]) : s == av[i][n_found - 1]); } ASSERT (argv_iter_n_args (ai) == i); argv_iter_free (ai); if (fp) ASSERT (fclose (fp) == 0); } } return 0; } �����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-arpa_inet-c++.cc�������������������������������������������������0000664�0000000�0000000�00000002300�14110572173�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <arpa/inet.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <arpa/inet.h> #include "signature.h" #if GNULIB_TEST_INET_NTOP SIGNATURE_CHECK (GNULIB_NAMESPACE::inet_ntop, const char *, (int, const void *, char *, socklen_t)); #endif #if GNULIB_TEST_INET_PTON SIGNATURE_CHECK (GNULIB_NAMESPACE::inet_pton, int, (int, const char *, void *)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-arpa_inet.c������������������������������������������������������0000664�0000000�0000000�00000001564�14110572173�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <arpa/inet.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <arpa/inet.h> int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array-mergesort.c������������������������������������������������0000664�0000000�0000000�00000016175�14110572173�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of stable-sorting of an array using mergesort. Copyright (C) 2009-2021 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 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> #include <stddef.h> struct foo { double x; double index; }; #define ELEMENT struct foo #define COMPARE(a,b) ((a)->x < (b)->x ? -1 : (a)->x > (b)->x ? 1 : 0) #define STATIC static #include "array-mergesort.h" #include <stdlib.h> #include "macros.h" #define NMAX 257 static const struct foo data[NMAX] = { { 2, 0 }, { 28, 1 }, { 36, 2 }, { 43, 3 }, { 20, 4 }, { 37, 5 }, { 19, 6 }, { 37, 7 }, { 30, 8 }, { 18, 9 }, { 30, 10 }, { 49, 11 }, { 16, 12 }, { 22, 13 }, { 23, 14 }, { 3, 15 }, { 39, 16 }, { 48, 17 }, { 18, 18 }, { 18, 19 }, { 45, 20 }, { 39, 21 }, { 1, 22 }, { 44, 23 }, { 24, 24 }, { 21, 25 }, { 29, 26 }, { 3, 27 }, { 34, 28 }, { 15, 29 }, { 39, 30 }, { 11, 31 }, { 29, 32 }, { 27, 33 }, { 43, 34 }, { 31, 35 }, { 28, 36 }, { 12, 37 }, { 16, 38 }, { 34, 39 }, { 25, 40 }, { 31, 41 }, { 29, 42 }, { 36, 43 }, { 17, 44 }, { 18, 45 }, { 44, 46 }, { 22, 47 }, { 23, 48 }, { 32, 49 }, { 16, 50 }, { 47, 51 }, { 28, 52 }, { 46, 53 }, { 49, 54 }, { 24, 55 }, { 0, 56 }, { 20, 57 }, { 25, 58 }, { 42, 59 }, { 48, 60 }, { 16, 61 }, { 26, 62 }, { 32, 63 }, { 24, 64 }, { 17, 65 }, { 47, 66 }, { 47, 67 }, { 12, 68 }, { 33, 69 }, { 41, 70 }, { 36, 71 }, { 8, 72 }, { 15, 73 }, { 0, 74 }, { 32, 75 }, { 28, 76 }, { 11, 77 }, { 46, 78 }, { 34, 79 }, { 5, 80 }, { 20, 81 }, { 47, 82 }, { 25, 83 }, { 7, 84 }, { 29, 85 }, { 40, 86 }, { 5, 87 }, { 12, 88 }, { 30, 89 }, { 1, 90 }, { 22, 91 }, { 29, 92 }, { 42, 93 }, { 49, 94 }, { 30, 95 }, { 40, 96 }, { 33, 97 }, { 36, 98 }, { 12, 99 }, { 8, 100 }, { 33, 101 }, { 5, 102 }, { 31, 103 }, { 27, 104 }, { 19, 105 }, { 43, 106 }, { 37, 107 }, { 9, 108 }, { 40, 109 }, { 0, 110 }, { 35, 111 }, { 32, 112 }, { 6, 113 }, { 27, 114 }, { 28, 115 }, { 30, 116 }, { 37, 117 }, { 32, 118 }, { 41, 119 }, { 14, 120 }, { 44, 121 }, { 22, 122 }, { 26, 123 }, { 2, 124 }, { 43, 125 }, { 20, 126 }, { 32, 127 }, { 24, 128 }, { 33, 129 }, { 7, 130 }, { 17, 131 }, { 10, 132 }, { 47, 133 }, { 14, 134 }, { 29, 135 }, { 19, 136 }, { 25, 137 }, { 25, 138 }, { 13, 139 }, { 25, 140 }, { 32, 141 }, { 8, 142 }, { 37, 143 }, { 31, 144 }, { 32, 145 }, { 5, 146 }, { 45, 147 }, { 35, 148 }, { 47, 149 }, { 3, 150 }, { 4, 151 }, { 37, 152 }, { 43, 153 }, { 39, 154 }, { 18, 155 }, { 13, 156 }, { 15, 157 }, { 41, 158 }, { 34, 159 }, { 4, 160 }, { 33, 161 }, { 20, 162 }, { 4, 163 }, { 38, 164 }, { 47, 165 }, { 30, 166 }, { 41, 167 }, { 23, 168 }, { 40, 169 }, { 23, 170 }, { 35, 171 }, { 47, 172 }, { 32, 173 }, { 15, 174 }, { 15, 175 }, { 41, 176 }, { 35, 177 }, { 6, 178 }, { 18, 179 }, { 35, 180 }, { 39, 181 }, { 34, 182 }, { 6, 183 }, { 34, 184 }, { 37, 185 }, { 15, 186 }, { 6, 187 }, { 12, 188 }, { 39, 189 }, { 9, 190 }, { 48, 191 }, { 37, 192 }, { 28, 193 }, { 32, 194 }, { 1, 195 }, { 45, 196 }, { 21, 197 }, { 11, 198 }, { 32, 199 }, { 43, 200 }, { 35, 201 }, { 25, 202 }, { 4, 203 }, { 20, 204 }, { 10, 205 }, { 22, 206 }, { 44, 207 }, { 30, 208 }, { 16, 209 }, { 42, 210 }, { 13, 211 }, { 29, 212 }, { 23, 213 }, { 30, 214 }, { 25, 215 }, { 49, 216 }, { 0, 217 }, { 49, 218 }, { 29, 219 }, { 37, 220 }, { 6, 221 }, { 27, 222 }, { 31, 223 }, { 17, 224 }, { 45, 225 }, { 25, 226 }, { 15, 227 }, { 34, 228 }, { 7, 229 }, { 7, 230 }, { 4, 231 }, { 31, 232 }, { 40, 233 }, { 17, 234 }, { 2, 235 }, { 34, 236 }, { 17, 237 }, { 25, 238 }, { 5, 239 }, { 48, 240 }, { 31, 241 }, { 41, 242 }, { 45, 243 }, { 33, 244 }, { 46, 245 }, { 19, 246 }, { 17, 247 }, { 38, 248 }, { 43, 249 }, { 16, 250 }, { 5, 251 }, { 21, 252 }, { 0, 253 }, { 47, 254 }, { 40, 255 }, { 22, 256 } }; static int cmp_double (const void *a, const void *b) { return (*(const double *)a < *(const double *)b ? -1 : *(const double *)a > *(const double *)b ? 1 : 0); } int main () { size_t n; /* Test merge_sort_fromto. */ for (n = 1; n <= NMAX; n++) { struct foo *dst; struct foo *tmp; double *qsort_result; size_t i; dst = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); dst[n].x = 0x4A6A71FE; /* canary */ tmp = (struct foo *) malloc ((n / 2 + 1) * sizeof (struct foo)); tmp[n / 2].x = 0x587EF149; /* canary */ merge_sort_fromto (data, dst, n, tmp); /* Verify the canaries. */ ASSERT (dst[n].x == 0x4A6A71FE); ASSERT (tmp[n / 2].x == 0x587EF149); /* Verify the result. */ qsort_result = (double *) malloc (n * sizeof (double)); for (i = 0; i < n; i++) qsort_result[i] = data[i].x; qsort (qsort_result, n, sizeof (double), cmp_double); for (i = 0; i < n; i++) ASSERT (dst[i].x == qsort_result[i]); /* Verify the stability. */ for (i = 0; i < n; i++) if (i > 0 && dst[i - 1].x == dst[i].x) ASSERT (dst[i - 1].index < dst[i].index); free (qsort_result); free (tmp); free (dst); } /* Test merge_sort_inplace. */ for (n = 1; n <= NMAX; n++) { struct foo *src; struct foo *tmp; double *qsort_result; size_t i; src = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); src[n].x = 0x4A6A71FE; /* canary */ tmp = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); tmp[n].x = 0x587EF149; /* canary */ for (i = 0; i < n; i++) src[i] = data[i]; merge_sort_inplace (src, n, tmp); /* Verify the canaries. */ ASSERT (src[n].x == 0x4A6A71FE); ASSERT (tmp[n].x == 0x587EF149); /* Verify the result. */ qsort_result = (double *) malloc (n * sizeof (double)); for (i = 0; i < n; i++) qsort_result[i] = data[i].x; qsort (qsort_result, n, sizeof (double), cmp_double); for (i = 0; i < n; i++) ASSERT (src[i].x == qsort_result[i]); /* Verify the stability. */ for (i = 0; i < n; i++) if (i > 0 && src[i - 1].x == src[i].x) ASSERT (src[i - 1].index < src[i].index); free (qsort_result); free (tmp); free (src); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array_list.c�����������������������������������������������������0000664�0000000�0000000�00000033555�14110572173�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 "gl_array_list.h" #include <stdlib.h> #include "macros.h" static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { size_t n = gl_list_size (list1); size_t i; gl_list_node_t node2; i = 0; node2 = gl_list_first_node (list2); while (i < n && node2 != NULL) { ASSERT (gl_list_get_at (list1, i) == gl_list_node_value (list2, node2)); i++; node2 = gl_list_next_node (list2, node2); } ASSERT ((i == n) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { size_t n = gl_list_size (list1); size_t i; gl_list_node_t node2; i = n - 1; node2 = gl_list_last_node (list2); while (i != (size_t)(-1) && node2 != NULL) { ASSERT (gl_list_get_at (list1, i) == gl_list_node_value (list2, node2)); i--; node2 = gl_list_previous_node (list2, node2); } ASSERT ((i == (size_t)(-1)) == (node2 == NULL)); } int main (int argc, char *argv[]) { gl_list_t list1, list2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); check_equals (list1, list2); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); if (node1 == NULL) { ASSERT (node2 == NULL); } else { ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (index2 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); } break; } check_equals (list1, list2); } gl_list_free (list1); gl_list_free (list2); free (contents); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array_map.c������������������������������������������������������0000664�0000000�0000000�00000014611�14110572173�0020540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_array_map.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_xlist.h" #include "gl_array_list.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] struct pair { const void *key; const void *value; }; static int cmp_pairs_in_array (const void *pairptr1, const void *pairptr2) { const void *key1 = ((struct pair const *)pairptr1)->key; const void *key2 = ((struct pair const *)pairptr2)->key; return strcmp ((const char *) key1, (const char *) key2); } static void check_equals (gl_map_t map1, gl_list_t keys, gl_list_t values) { size_t n = gl_map_size (map1); struct pair *pairs_of_map1 = XNMALLOC (n, struct pair); gl_map_iterator_t iter1; const void *key1; const void *value1; size_t i; ASSERT (gl_list_size (keys) == n); ASSERT (gl_list_size (values) == n); iter1 = gl_map_iterator (map1); for (i = 0; i < n; i++) { ASSERT (gl_map_iterator_next (&iter1, &key1, &value1)); pairs_of_map1[i].key = key1; pairs_of_map1[i].value = value1; } ASSERT (!gl_map_iterator_next (&iter1, &key1, &value1)); gl_map_iterator_free (&iter1); if (n > 0) qsort (pairs_of_map1, n, sizeof (struct pair), cmp_pairs_in_array); for (i = 0; i < n; i++) { ASSERT (pairs_of_map1[i].key == gl_list_get_at (keys, i)); ASSERT (pairs_of_map1[i].value == gl_list_get_at (values, i)); } free (pairs_of_map1); } static void check_all (gl_map_t map1, gl_list_t keys, gl_list_t values) { check_equals (map1, keys, values); } int main (int argc, char *argv[]) { gl_map_t map1; gl_list_t keys; gl_list_t values; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_map_nx_create_empty (GL_ARRAY_MAP, string_equals, string_hash, NULL, NULL); ASSERT (map1 != NULL); /* Create keys and values. */ keys = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); values = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); check_all (map1, keys, values); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); bool added = gl_map_nx_put (map1, key, value); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (added == (index == (size_t)(-1))); if (added) { gl_sortedlist_add (keys, (gl_listelement_compar_fn)strcmp, key); index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); gl_list_add_at (values, index, value); } else gl_list_set_at (values, index, value); check_all (map1, keys, values); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); const void *ret = gl_map_get (map1, key); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (ret == (index != (size_t)(-1) ? gl_list_get_at (values, index) : NULL)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); bool added = gl_map_nx_put (map1, key, value); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (added == (index == (size_t)(-1))); if (added) { gl_sortedlist_add (keys, (gl_listelement_compar_fn)strcmp, key); index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); gl_list_add_at (values, index, value); } else gl_list_set_at (values, index, value); } break; case 2: { const char *key = RANDOM_OBJECT (); bool removed = gl_map_remove (map1, key); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (removed == (index != (size_t)(-1))); if (removed) { gl_list_remove_at (keys, index); gl_list_remove_at (values, index); } } break; } check_all (map1, keys, values); } gl_map_free (map1); gl_list_free (keys); gl_list_free (values); } return 0; } �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array_omap.c�����������������������������������������������������0000664�0000000�0000000�00000013152�14110572173�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_array_omap.h" #include <stdlib.h> #include <string.h> #include "gl_xlist.h" #include "gl_array_list.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_omap_t map1, gl_list_t keys, gl_list_t values) { size_t n = gl_omap_size (map1); gl_omap_iterator_t iter1; gl_list_iterator_t iterk, iterv; const void *key1; const void *value1; const void *key2; const void *value2; gl_list_node_t node; size_t i; iter1 = gl_omap_iterator (map1); iterk = gl_list_iterator (keys); iterv = gl_list_iterator (values); for (i = 0; i < n; i++) { ASSERT (gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (gl_list_iterator_next (&iterk, &key2, &node)); ASSERT (gl_list_iterator_next (&iterv, &value2, &node)); ASSERT (key1 == key2); ASSERT (value1 == value2); } ASSERT (!gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (!gl_list_iterator_next (&iterk, &key2, &node)); ASSERT (!gl_list_iterator_next (&iterv, &value2, &node)); gl_omap_iterator_free (&iter1); gl_list_iterator_free (&iterk); gl_list_iterator_free (&iterv); } static void check_all (gl_omap_t map1, gl_list_t keys, gl_list_t values) { check_equals (map1, keys, values); } int main (int argc, char *argv[]) { gl_omap_t map1; gl_list_t keys; gl_list_t values; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_omap_nx_create_empty (GL_ARRAY_OMAP, (gl_mapkey_compar_fn) strcmp, NULL, NULL); ASSERT (map1 != NULL); /* Create keys and values. */ keys = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); values = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); check_all (map1, keys, values); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); bool added = gl_omap_nx_put (map1, key, value); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (added == (index == (size_t)(-1))); if (added) { gl_sortedlist_add (keys, (gl_listelement_compar_fn)strcmp, key); index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); gl_list_add_at (values, index, value); } else gl_list_set_at (values, index, value); check_all (map1, keys, values); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); const void *ret = gl_omap_get (map1, key); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (ret == (index != (size_t)(-1) ? gl_list_get_at (values, index) : NULL)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); bool added = gl_omap_nx_put (map1, key, value); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (added == (index == (size_t)(-1))); if (added) { gl_sortedlist_add (keys, (gl_listelement_compar_fn)strcmp, key); index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); gl_list_add_at (values, index, value); } else gl_list_set_at (values, index, value); } break; case 2: { const char *key = RANDOM_OBJECT (); bool removed = gl_omap_remove (map1, key); size_t index = gl_sortedlist_indexof (keys, (gl_listelement_compar_fn)strcmp, key); ASSERT (removed == (index != (size_t)(-1))); if (removed) { gl_list_remove_at (keys, index); gl_list_remove_at (values, index); } } break; } check_all (map1, keys, values); } gl_omap_free (map1); gl_list_free (keys); gl_list_free (values); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array_oset.c�����������������������������������������������������0000664�0000000�0000000�00000013575�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 "gl_array_oset.h" #include <stdlib.h> #include <string.h> #include "gl_xlist.h" #include "gl_array_list.h" #include "macros.h" #include "test-oset-update.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_oset_t set1, gl_list_t set2) { size_t n = gl_oset_size (set1); gl_oset_iterator_t iter1; gl_list_iterator_t iter2; const void *elt1; const void *elt2; gl_list_node_t node2; size_t i; iter1 = gl_oset_iterator (set1); iter2 = gl_list_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_oset_iterator_next (&iter1, &elt1)); ASSERT (gl_list_iterator_next (&iter2, &elt2, &node2)); ASSERT (elt1 == elt2); } ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); ASSERT (!gl_list_iterator_next (&iter2, &elt2, &node2)); gl_oset_iterator_free (&iter1); gl_list_iterator_free (&iter2); } static void check_all (gl_oset_t set1, gl_list_t set2) { check_equals (set1, set2); } static bool is_at_least (const void *elt, const void *threshold) { return strcmp ((const char *) elt, (const char *) threshold) >= 0; } static size_t gl_sortedlist_indexof_atleast (gl_list_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold) { /* This implementation is slow, but easy to verify. */ size_t count = gl_list_size (set); size_t index; for (index = 0; index < count; index++) if (threshold_fn (gl_list_get_at (set, index), threshold)) return index; return (size_t)(-1); } int main (int argc, char *argv[]) { gl_oset_t set1; gl_list_t set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_oset_nx_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL ? false : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (4); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_search (set1, obj) == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL ? false : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_remove (set1, obj) == gl_sortedlist_remove (set2, (gl_listelement_compar_fn)strcmp, obj)); } break; case 3: { const char *obj = RANDOM_OBJECT (); gl_oset_iterator_t iter = gl_oset_iterator_atleast (set1, is_at_least, obj); size_t index = gl_sortedlist_indexof_atleast (set2, is_at_least, obj); const void *elt; /* Check the first two values that the iterator produces. Checking them all would make this part of the test dominate the run time of the test. */ if (index == (size_t)(-1)) ASSERT (!gl_oset_iterator_next (&iter, &elt)); else { ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == gl_list_get_at (set2, index)); if (index + 1 == gl_list_size (set2)) ASSERT (!gl_oset_iterator_next (&iter, &elt)); else { ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == gl_list_get_at (set2, index + 1)); } } gl_oset_iterator_free (&iter); } break; } check_all (set1, set2); } gl_oset_free (set1); gl_list_free (set2); } test_update (GL_ARRAY_OSET); return 0; } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-array_set.c������������������������������������������������������0000664�0000000�0000000�00000010347�14110572173�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_array_set.h" #include <stdlib.h> #include <string.h> #include "gl_xoset.h" #include "gl_array_oset.h" #include "xalloc.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static int cmp_objects_in_array (const void *objptr1, const void *objptr2) { const void *obj1 = *(const void * const *)objptr1; const void *obj2 = *(const void * const *)objptr2; return strcmp ((const char *) obj1, (const char *) obj2); } static void check_equals (gl_set_t set1, gl_oset_t set2) { size_t n = gl_set_size (set1); const void **elements_of_set1 = XNMALLOC (n, const void *); const void **elements_of_set2 = XNMALLOC (n, const void *); gl_set_iterator_t iter1; gl_oset_iterator_t iter2; const void *elt1; const void *elt2; size_t i; iter1 = gl_set_iterator (set1); iter2 = gl_oset_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_set_iterator_next (&iter1, &elt1)); ASSERT (gl_oset_iterator_next (&iter2, &elt2)); elements_of_set1[i] = elt1; elements_of_set2[i] = elt2; } ASSERT (!gl_set_iterator_next (&iter1, &elt1)); ASSERT (!gl_oset_iterator_next (&iter2, &elt2)); gl_set_iterator_free (&iter1); gl_oset_iterator_free (&iter2); if (n > 0) { qsort (elements_of_set1, n, sizeof (const void *), cmp_objects_in_array); qsort (elements_of_set2, n, sizeof (const void *), cmp_objects_in_array); } for (i = 0; i < n; i++) ASSERT (elements_of_set1[i] == elements_of_set2[i]); free (elements_of_set2); free (elements_of_set1); } static void check_all (gl_set_t set1, gl_oset_t set2) { check_equals (set1, set2); } int main (int argc, char *argv[]) { gl_set_t set1; gl_oset_t set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_set_nx_create_empty (GL_ARRAY_SET, NULL, NULL, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_oset_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_oset_add (set2, obj)); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_search (set1, obj) == gl_oset_search (set2, obj)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_oset_add (set2, obj)); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_remove (set1, obj) == gl_oset_remove (set2, obj)); } break; } check_all (set1, set2); } gl_set_free (set1); gl_oset_free (set2); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asin.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asin() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (asin, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = asin (x); ASSERT (y >= 0.6435011087 && y <= 0.6435011088); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asinf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asinf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (asinf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = asinf (x); ASSERT (y >= 0.6435011f && y <= 0.6435013f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asinl.c����������������������������������������������������������0000664�0000000�0000000�00000002251�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asinl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (asinl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = asinl (x); ASSERT (y >= 0.6435011087L && y <= 0.6435011088L); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-assert-h-c++.cc��������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <assert.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <assert.h> int main () { } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-assert-h-c++2.cc�������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <assert.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cassert> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-astrxfrm.c�������������������������������������������������������0000664�0000000�0000000�00000005672�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of astrxfrm() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "astrxfrm.h" #include <locale.h> #include <string.h> #include "macros.h" int main () { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ char *expected_transform; setlocale (LC_ALL, "de_DE.UTF-8"); /* Test resultbuf = NULL. */ { size_t length = 0; char *transform = astrxfrm (input, NULL, &length); ASSERT (transform != NULL); ASSERT (length == strlen (transform) + 1); expected_transform = transform; } /* Test resultbuf = NULL. Initial value of length is ignored here. */ { size_t length = 100; char *transform = astrxfrm (input, NULL, &length); ASSERT (transform != NULL); ASSERT (strcmp (transform, expected_transform) == 0); ASSERT (length == strlen (transform) + 1); free (transform); } /* Test resultbuf != NULL with an initial length = 0. */ { char buf[1]; size_t length = 0; char *transform; buf[0] = '@'; transform = astrxfrm (input, buf, &length); ASSERT (transform != NULL); ASSERT (transform != buf); ASSERT (strcmp (transform, expected_transform) == 0); ASSERT (length == strlen (transform) + 1); ASSERT (buf[0] == '@'); free (transform); } /* Test resultbuf != NULL with an initial length that is too small. */ { char buf[3]; size_t length = sizeof (buf) - 1; char *transform; buf[sizeof (buf) - 1] = '@'; transform = astrxfrm (input, buf, &length); ASSERT (transform != NULL); ASSERT (transform != buf); ASSERT (strcmp (transform, expected_transform) == 0); ASSERT (length == strlen (transform) + 1); ASSERT (buf[sizeof (buf) - 1] == '@'); free (transform); } /* Test resultbuf != NULL with an initial length that is large enough. */ { char buf[200]; size_t length = sizeof (buf) - 1; char *transform; buf[sizeof (buf) - 1] = '@'; transform = astrxfrm (input, buf, &length); ASSERT (transform != NULL); ASSERT (transform == buf); ASSERT (strcmp (transform, expected_transform) == 0); ASSERT (length == strlen (transform) + 1); ASSERT (buf[sizeof (buf) - 1] == '@'); } free (expected_transform); return 0; } ����������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-linked_list-strong.c�����������������������������������0000664�0000000�0000000�00000030527�14110572173�0024356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of async-safe sequential list data type implementation. Copyright (C) 2021 Free Software Foundation, Inc. This 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>, 2021. */ /* There are two notions of async-safe for a list: * A list is "strongly async-safe" if it can be iterated in any signal handler, and the signal handler will see - in the single-threaded case: either the value after or the value before the current in-progress change that was interrupted, - in the multi-threaded case: one of the most recent values for the *entire list*. * A list is "weakly async-safe" if it can be iterated in any signal handler, and - in the single-threaded case: the signal handler will see either the value after or the value before the current in-progress change that was interrupted, - in the multi-threaded case: - elements which were present in the list throughout the iteration will be seen by the iterator, - elements which were absent in the list throughout the iteration will be unseen by the iterator, - no statement regarding the elements which are being added or removed during the iteration. This unit test attempts to verify that the 'linked-list' implementation of lists is strongly async-safe. It fails the test in the multi-threaded cases (test == 2 or 3). */ #include <config.h> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #include "gl_linked_list.h" #if SIGNAL_SAFE_LIST # if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* || USE_WINDOWS_THREADS */ /* This test works only with POSIX compatible threads. With Windows threads, send_signal() has to be implemented as raise (MY_SIGNAL); hence only test == 3 tests anything, and in fact only 5 signals arrive. This small test is not able to detect a buggy implementation. Therefore mark the test as skipped in this case. */ # include <signal.h> # include <stdint.h> # include <stdlib.h> # include <unistd.h> # include <time.h> # include "glthread/thread.h" # include "glthread/yield.h" # include "macros.h" /* The signal we use for testing. For portability, it should be one of SIGINT, SIGFPE, SIGTERM. If we use SIGINT, it prevents debugging with gdb. If we use SIGFPE, it does not work right with valgrind. If we use SIGTERM, it could interfere with a system shutdown. Oh well. */ # define MY_SIGNAL SIGTERM # define RANDOM(n) (rand () % (n)) # define RANDOM_OBJECT() ((void *) (uintptr_t) RANDOM (10000)) /* test == 1: signals are executed in the mutator thread. test == 2: signals are executed in an idle thread. test == 3: signals are executed in the signal-sending thread. */ static int volatile test; /* Store the newest sum, the previous sum, the sum before the previous sum, and so on in a circular buffer. */ # define NUM_RECENT_SUMS (4*1024*1024) static uintptr_t volatile recent_sums[NUM_RECENT_SUMS]; /* 0 <= recent_sums_oldest_index < recent_sums_newest_index and recent_sums_newest_index - recent_sums_oldest_index <= NUM_RECENT_SUMS. For each i with recent_sums_oldest_index <= i < recent_sums_newest_index, the sum is actually stored at recent_sums[i % NUM_RECENT_SUMS]. */ static size_t volatile recent_sums_newest_index; static size_t volatile recent_sums_oldest_index; static void store_newest_sum (uintptr_t sum) { recent_sums_oldest_index += (recent_sums_newest_index - recent_sums_oldest_index) == NUM_RECENT_SUMS; recent_sums[recent_sums_newest_index % NUM_RECENT_SUMS] = sum; recent_sums_newest_index++; } static gl_list_t volatile list1; static gl_thread_t volatile signal_target; /* Statistics. */ static unsigned int volatile num_mutations; static unsigned int volatile num_signals_sent; static unsigned int volatile num_signals_arrived; /* Blocks the MY_SIGNAL signal in the current thread. */ static void block_sigint (void) { sigset_t mask; sigemptyset (&mask); sigaddset (&mask, MY_SIGNAL); sigprocmask (SIG_BLOCK, &mask, NULL); /* equivalent to pthread_sigmask */ } /* This thread is idle. */ static void * idle_thread (void *arg) { for (;;) gl_thread_yield (); /*NOTREACHED*/ } /* The signal handler iterates through the list and verifies that the sum of all elements in the list is one of the allowed values. */ static _GL_ASYNC_SAFE void sigint_handler (int signo) { num_signals_arrived++; uintptr_t sum = 0; { gl_list_iterator_t iter = gl_list_iterator (list1); const void *elt; while (gl_list_iterator_next (&iter, &elt, NULL)) sum += (uintptr_t) elt; gl_list_iterator_free (&iter); } bool found = false; if (test != 1) { /* The signal handler executes in a different thread than the mutator thread. By the time we get here, the mutator thread can have done any number of mutations; it is reasonable to assume that this number of mutations is small. */ size_t i; for (i = recent_sums_newest_index - 1;;) { if (sum == recent_sums[i % NUM_RECENT_SUMS] && i >= recent_sums_oldest_index) { found = true; break; } if (i <= recent_sums_oldest_index) break; i--; } } else { /* The signal handler executes in the mutator thread. Its execution interrupts a single mutation. The allowed sum is either the newest or the previous one. */ size_t i = recent_sums_newest_index - 1; found = (sum == recent_sums[i % NUM_RECENT_SUMS] || (i > recent_sums_oldest_index && sum == recent_sums[(i - 1) % NUM_RECENT_SUMS])); } if (!found) { /* POSIX does not allow uses of stdio from within a signal handler, but it should work here, because the rest of the program does not use stdio. */ size_t i = recent_sums_newest_index - 1; fprintf (stderr, "sum = %lu, expected %lu or older (after %u mutations and %u signals)\n", (unsigned long) sum, (unsigned long) recent_sums[i % NUM_RECENT_SUMS], num_mutations, num_signals_arrived); fflush (stderr); abort (); } } /* Sends a MY_SIGNAL signal to the current process. */ static void send_signal (void) { #if 0 /* This does not work for test != 3, because raise() sends the signal to the current thread always, and if test != 3 the signal is eternally blocked in the current thread; thus it will never get delivered. */ raise (MY_SIGNAL); #else /* This works: Either kill (getpid (), MY_SIGNAL); or pthread_kill (signal_target, MY_SIGNAL); The difference is that for kill(), the OS determines the (only) thread that has not blocked the signal, whereas for pthread_kill() we have manually determined this thread. */ kill (getpid (), MY_SIGNAL); #endif } /* This thread permanently sends MY_SIGNAL signals. */ static void * signal_sending_thread (void *arg) { if (test != 3) block_sigint (); int repeat; for (repeat = 1000; repeat > 0; repeat--) { num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep (&ts, NULL); } gl_thread_yield (); } printf ("Sent %u signals. Received %u signals. Done after %u mutations.\n", num_signals_sent, num_signals_arrived, num_mutations); exit (0); /*NOTREACHED*/ } /* This thread repeatedly adds and removes objects from the list. */ static void * mutator_thread (void *arg) { if (test != 1) block_sigint (); gl_list_t list2 = (gl_list_t) arg; for (num_mutations = 0; ; num_mutations++) { unsigned int operation = RANDOM (2); switch (operation) { case 0: /* Add an element. */ { const void *obj = RANDOM_OBJECT (); ASSERT (gl_list_nx_add_first (list2, obj) != NULL); uintptr_t sum_before_current_operation = recent_sums[(recent_sums_newest_index - 1) % NUM_RECENT_SUMS]; uintptr_t sum_after_current_operation = sum_before_current_operation + (uintptr_t) obj; store_newest_sum (sum_after_current_operation); ASSERT (gl_list_nx_add_first (list1, obj) != NULL); } break; case 1: /* Remove an element. */ if (gl_list_size (list2) > 0) { size_t index = RANDOM (gl_list_size (list2)); const void *obj = gl_list_get_at (list2, index); ASSERT (gl_list_remove (list2, obj)); uintptr_t sum_before_current_operation = recent_sums[(recent_sums_newest_index - 1) % NUM_RECENT_SUMS]; uintptr_t sum_after_current_operation = sum_before_current_operation - (uintptr_t) obj; store_newest_sum (sum_after_current_operation); ASSERT (gl_list_remove (list1, obj)); } break; } } /*NOTREACHED*/ } int main (int argc, char *argv[]) { test = atoi (argv[1]); /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 2) srand (atoi (argv[2])); gl_list_t list2; /* Initialize list1 and list2. */ { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); list1 = gl_list_nx_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true); ASSERT (list1 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_first (list1, contents[i]) != NULL); list2 = gl_list_nx_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); uintptr_t initial_sum = 0; for (i = 0; i < initial_size; i++) initial_sum += (uintptr_t) contents[i]; recent_sums_oldest_index = 0; recent_sums[0] = initial_sum; recent_sums_newest_index = 1; } /* Install the signal handler. It needs to be done with sigaction(), not signal(), otherwise on Solaris and AIX the program crashes at the second incoming MY_SIGNAL. */ #if 0 signal (MY_SIGNAL, sigint_handler); #else { struct sigaction action; action.sa_handler = sigint_handler; action.sa_flags = SA_RESTART | SA_NODEFER; sigemptyset (&action.sa_mask); ASSERT (sigaction (MY_SIGNAL, &action, NULL) == 0); } #endif /* Launch the threads. */ switch (test) { case 1: { signal_target = gl_thread_create (mutator_thread, list2); signal_sending_thread (NULL); abort (); } case 2: { signal_target = gl_thread_create (idle_thread, NULL); gl_thread_create (mutator_thread, list2); signal_sending_thread (NULL); abort (); } case 3: { gl_thread_create (mutator_thread, list2); signal_target = gl_thread_self (); signal_sending_thread (NULL); abort (); } default: ASSERT (false); } } # else # include <stdio.h> int main () { fputs ("Skipping test: POSIX compatible multithreading not enabled\n", stderr); return 77; } # endif #else # include <stdio.h> int main () { fputs ("Skipping test: signal-safety of linked lists is not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-linked_list-strong.sh����������������������������������0000775�0000000�0000000�00000000445�14110572173�0024545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh st=0 for i in 1 2 3 ; do ${CHECKER} ./test-asyncsafe-linked_list-strong${EXEEXT} $i result=$? if test $result = 77; then st=77 break fi if test $result != 0; then echo "test-asyncsafe-linked_list-strong.sh: test case $i failed" >&2 st=1 fi done exit $st ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-linked_list-weak.c�������������������������������������0000664�0000000�0000000�00000035400�14110572173�0023764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of async-safe sequential list data type implementation. Copyright (C) 2021 Free Software Foundation, Inc. This 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>, 2021. */ /* There are two notions of async-safe for a list: * A list is "strongly async-safe" if it can be iterated in any signal handler, and the signal handler will see - in the single-threaded case: either the value after or the value before the current in-progress change that was interrupted, - in the multi-threaded case: one of the most recent values for the *entire list*. * A list is "weakly async-safe" if it can be iterated in any signal handler, and - in the single-threaded case: the signal handler will see either the value after or the value before the current in-progress change that was interrupted, - in the multi-threaded case: - elements which were present in the list throughout the iteration will be seen by the iterator, - elements which were absent in the list throughout the iteration will be unseen by the iterator, - no statement regarding the elements which are being added or removed during the iteration. This unit test attempts to verify that the 'linked-list' implementation of lists is weakly async-safe. It fails the test in the multi-threaded cases (test == 2 or 3). */ #include <config.h> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #include "gl_linked_list.h" #if SIGNAL_SAFE_LIST # if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* || USE_WINDOWS_THREADS */ /* This test works only with POSIX compatible threads. With Windows threads, send_signal() has to be implemented as raise (MY_SIGNAL); hence only test == 3 tests anything, and in fact only 5 signals arrive. This small test is not able to detect a buggy implementation. Therefore mark the test as skipped in this case. */ # include <signal.h> # include <stdint.h> # include <stdlib.h> # include <unistd.h> # include <time.h> # include "glthread/thread.h" # include "glthread/yield.h" # include "macros.h" /* The signal we use for testing. For portability, it should be one of SIGINT, SIGFPE, SIGTERM. If we use SIGINT, it prevents debugging with gdb. If we use SIGFPE, it does not work right with valgrind. If we use SIGTERM, it could interfere with a system shutdown. Oh well. */ # define MY_SIGNAL SIGTERM /* The number of different objects we can store in a bag. Must be a multiple of 32. */ # define BAG_SIZE 512 # define RANDOM(n) (rand () % (n)) # define RANDOM_OBJECT() ((void *) (uintptr_t) RANDOM (BAG_SIZE)) /* Representation of a bag as a bit set. */ typedef struct { uint32_t bits[BAG_SIZE / 32]; } bag_t; /* Initializes a bag to empty. */ static void init_bag_empty (bag_t *bagp) { size_t i; for (i = 0; i < BAG_SIZE / 32; i++) bagp->bits[i] = 0; } /* Adds an element to a bag. */ static void add_to_bag (uintptr_t x, bag_t *bagp) { if (!(x < BAG_SIZE)) abort (); bagp->bits[x / 32] |= (1U << (x % 32)); } /* Returns a bag that contains the elements of the given list. */ static bag_t bag_from_list (gl_list_t list) { bag_t bag; init_bag_empty (&bag); { gl_list_iterator_t iter = gl_list_iterator (list); const void *elt; while (gl_list_iterator_next (&iter, &elt, NULL)) add_to_bag ((uintptr_t) elt, &bag); gl_list_iterator_free (&iter); } return bag; } /* Returns true if and only if the given bag is empty. */ _GL_ATTRIBUTE_MAYBE_UNUSED static bool bag_is_empty (bag_t bag) { size_t i; for (i = 0; i < BAG_SIZE / 32; i++) if (bag.bits[i] != 0) return false; return true; } /* Returns true if and only if BAG1 is a subset of BAG2. */ static bool bag_is_subset (bag_t bag1, bag_t bag2) { size_t i; for (i = 0; i < BAG_SIZE / 32; i++) if ((bag1.bits[i] & ~bag2.bits[i]) != 0) return false; return true; } /* Returns true if and only if the two given bags have the same elements. */ static bool bag_equals (bag_t bag1, bag_t bag2) { size_t i; for (i = 0; i < BAG_SIZE / 32; i++) if (bag1.bits[i] != bag2.bits[i]) return false; return true; } /* Returns a bag that contains the elements of BAG1 and the elements of BAG2. */ _GL_ATTRIBUTE_MAYBE_UNUSED static bag_t bag_or (bag_t bag1, bag_t bag2) { bag_t bag; size_t i; for (i = 0; i < BAG_SIZE / 32; i++) bag.bits[i] = bag1.bits[i] | bag2.bits[i]; return bag; } /* Returns a bag that contains the elements of BAG1 that are not in BAG2 and the elements of BAG2 that are not in BAG1. */ static bag_t bag_xor (bag_t bag1, bag_t bag2) { bag_t bag; size_t i; for (i = 0; i < BAG_SIZE / 32; i++) bag.bits[i] = bag1.bits[i] ^ bag2.bits[i]; return bag; } /* Returns a bag that contains the elements of BAG1 that are not in BAG2. */ _GL_ATTRIBUTE_MAYBE_UNUSED static bag_t bag_and_not (bag_t bag1, bag_t bag2) { bag_t bag; size_t i; for (i = 0; i < BAG_SIZE / 32; i++) bag.bits[i] = bag1.bits[i] & ~bag2.bits[i]; return bag; } /* test == 1: signals are executed in the mutator thread. test == 2: signals are executed in an idle thread. test == 3: signals are executed in the signal-sending thread. */ static int volatile test; /* Store the newest list's bag representation, the previous list's bag representation, and so on in a circular buffer. Store also the changes in a circular buffer. */ # define NUM_RECENT_BAGS 1024 /* can be up to (BAG_SIZE * BAG_SIZE) */ static bag_t volatile recent_bags[NUM_RECENT_BAGS]; static uintptr_t volatile recent_changes[NUM_RECENT_BAGS]; /* 0 <= recent_oldest_index <= recent_newest_index and recent_newest_index - recent_oldest_index < NUM_RECENT_BAGS. For each i with recent_oldest_index <= i <= recent_newest_index, the bag representation of the list[i] is stored at recent_bags[i % NUM_RECENT_BAGS]. For each i with recent_oldest_index <= i < recent_newest_index, the object of the change between list[i] and list[i+1] is stored at recent_changes[i % NUM_RECENT_BAGS]. */ static size_t volatile recent_newest_index; static size_t volatile recent_oldest_index; static void store_change (uintptr_t x, gl_list_t list) { recent_oldest_index += (recent_newest_index - recent_oldest_index) == NUM_RECENT_BAGS - 1; recent_changes[recent_newest_index % NUM_RECENT_BAGS] = x; recent_bags[(recent_newest_index + 1) % NUM_RECENT_BAGS] = bag_from_list (list); recent_newest_index++; } static gl_list_t volatile list1; static gl_thread_t volatile signal_target; /* Statistics. */ static unsigned int volatile num_mutations; static unsigned int volatile num_signals_sent; static unsigned int volatile num_signals_arrived; /* Blocks the MY_SIGNAL signal in the current thread. */ static void block_sigint (void) { sigset_t mask; sigemptyset (&mask); sigaddset (&mask, MY_SIGNAL); sigprocmask (SIG_BLOCK, &mask, NULL); /* equivalent to pthread_sigmask */ } /* This thread is idle. */ static void * idle_thread (void *arg) { for (;;) gl_thread_yield (); /*NOTREACHED*/ } /* The signal handler iterates through the list and verifies that the sum of all elements in the list is one of the allowed values. */ static _GL_ASYNC_SAFE void sigint_handler (int signo) { num_signals_arrived++; bag_t bag; init_bag_empty (&bag); { gl_list_iterator_t iter = gl_list_iterator (list1); const void *elt; while (gl_list_iterator_next (&iter, &elt, NULL)) add_to_bag ((uintptr_t) elt, &bag); gl_list_iterator_free (&iter); } bool found = false; if (test != 1) { /* The signal handler executes in a different thread than the mutator thread. By the time we get here, the mutator thread can have done any number of mutations; it is reasonable to assume that this number of mutations is small. */ size_t i; bag_t changes_from_i_to_newest; init_bag_empty (&changes_from_i_to_newest); for (i = recent_newest_index;;) { if (bag_is_subset (bag_xor (bag, recent_bags[i % NUM_RECENT_BAGS]), changes_from_i_to_newest) && i >= recent_oldest_index) { found = true; break; } if (i <= recent_oldest_index) break; i--; add_to_bag (recent_changes[i % NUM_RECENT_BAGS], &changes_from_i_to_newest); } } else { /* The signal handler executes in the mutator thread. Its execution interrupts a single mutation. The allowed bag is either the newest or the previous one. */ size_t i = recent_newest_index; found = (bag_equals (bag, recent_bags[i % NUM_RECENT_BAGS]) || (i > recent_oldest_index && bag_equals (bag, recent_bags[(i - 1) % NUM_RECENT_BAGS]) && i > recent_oldest_index)); } if (!found) { /* POSIX does not allow uses of stdio from within a signal handler, but it should work here, because the rest of the program does not use stdio. */ fprintf (stderr, "unexpected bag (after %u mutations and %u signals)\n", num_mutations, num_signals_arrived); fflush (stderr); abort (); } } /* Sends a MY_SIGNAL signal to the current process. */ static void send_signal (void) { #if 0 /* This does not work for test != 3, because raise() sends the signal to the current thread always, and if test != 3 the signal is eternally blocked in the current thread; thus it will never get delivered. */ raise (MY_SIGNAL); #else /* This works: Either kill (getpid (), MY_SIGNAL); or pthread_kill (signal_target, MY_SIGNAL); The difference is that for kill(), the OS determines the (only) thread that has not blocked the signal, whereas for pthread_kill() we have manually determined this thread. */ kill (getpid (), MY_SIGNAL); #endif } /* This thread permanently sends MY_SIGNAL signals. */ static void * signal_sending_thread (void *arg) { if (test != 3) block_sigint (); int repeat; for (repeat = 1000; repeat > 0; repeat--) { num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); num_signals_sent++; send_signal (); { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 1000000; nanosleep (&ts, NULL); } gl_thread_yield (); } printf ("Sent %u signals. Received %u signals. Done after %u mutations.\n", num_signals_sent, num_signals_arrived, num_mutations); exit (0); /*NOTREACHED*/ } /* This thread repeatedly adds and removes objects from the list. */ static void * mutator_thread (void *arg) { if (test != 1) block_sigint (); gl_list_t list2 = (gl_list_t) arg; for (num_mutations = 0; ; num_mutations++) { unsigned int operation = RANDOM (2); switch (operation) { case 0: /* Add an element. */ { const void *obj = RANDOM_OBJECT (); ASSERT (gl_list_nx_add_first (list2, obj) != NULL); store_change ((uintptr_t) obj, list2); ASSERT (gl_list_nx_add_first (list1, obj) != NULL); } break; case 1: /* Remove an element. */ if (gl_list_size (list2) > 0) { size_t index = RANDOM (gl_list_size (list2)); const void *obj = gl_list_get_at (list2, index); ASSERT (gl_list_remove (list2, obj)); store_change ((uintptr_t) obj, list2); ASSERT (gl_list_remove (list1, obj)); } break; } } /*NOTREACHED*/ } int main (int argc, char *argv[]) { test = atoi (argv[1]); /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 2) srand (atoi (argv[2])); gl_list_t list2; /* Initialize list1 and list2. */ { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); list1 = gl_list_nx_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true); ASSERT (list1 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_first (list1, contents[i]) != NULL); list2 = gl_list_nx_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); recent_oldest_index = 0; recent_bags[0] = bag_from_list (list2); recent_newest_index = 0; } /* Install the signal handler. It needs to be done with sigaction(), not signal(), otherwise on Solaris and AIX the program crashes at the second incoming MY_SIGNAL. */ #if 0 signal (MY_SIGNAL, sigint_handler); #else { struct sigaction action; action.sa_handler = sigint_handler; action.sa_flags = SA_RESTART | SA_NODEFER; sigemptyset (&action.sa_mask); ASSERT (sigaction (MY_SIGNAL, &action, NULL) == 0); } #endif /* Launch the threads. */ switch (test) { case 1: { signal_target = gl_thread_create (mutator_thread, list2); signal_sending_thread (NULL); abort (); } case 2: { signal_target = gl_thread_create (idle_thread, NULL); gl_thread_create (mutator_thread, list2); signal_sending_thread (NULL); abort (); } case 3: { gl_thread_create (mutator_thread, list2); signal_target = gl_thread_self (); signal_sending_thread (NULL); abort (); } default: ASSERT (false); } } # else # include <stdio.h> int main () { fputs ("Skipping test: POSIX compatible multithreading not enabled\n", stderr); return 77; } # endif #else # include <stdio.h> int main () { fputs ("Skipping test: signal-safety of linked lists is not enabled\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-linked_list-weak.sh������������������������������������0000775�0000000�0000000�00000000441�14110572173�0024154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh st=0 for i in 1 2 3 ; do ${CHECKER} ./test-asyncsafe-linked_list-weak${EXEEXT} $i result=$? if test $result = 77; then st=77 break fi if test $result != 0; then echo "test-asyncsafe-linked_list-weak.sh: test case $i failed" >&2 st=1 fi done exit $st �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-spin1.c������������������������������������������������0000664�0000000�0000000�00000003333�14110572173�0021570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of spin locks for communication between threads and signal handlers. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include "asyncsafe-spin.h" #include <signal.h> asyncsafe_spinlock_t global_spin_lock = ASYNCSAFE_SPIN_INIT; int main (void) { sigset_t set; sigemptyset (&set); sigaddset (&set, SIGINT); /* Check a spin-lock initialized through the constant initializer. */ { sigset_t saved_set; asyncsafe_spin_lock (&global_spin_lock, &set, &saved_set); asyncsafe_spin_unlock (&global_spin_lock, &saved_set); } /* Check a spin-lock initialized through asyncsafe_spin_init. */ { asyncsafe_spinlock_t local_spin_lock; int i; asyncsafe_spin_init (&local_spin_lock); for (i = 0; i < 10; i++) { sigset_t saved_set; asyncsafe_spin_lock (&local_spin_lock, &set, &saved_set); asyncsafe_spin_unlock (&local_spin_lock, &saved_set); } asyncsafe_spin_destroy (&local_spin_lock); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-asyncsafe-spin2.c������������������������������������������������0000664�0000000�0000000�00000015010�14110572173�0021564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of spin locks for communication between threads and signal handlers. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. */ #if !(defined _WIN32 && ! defined __CYGWIN__) && HAVE_PTHREAD_H && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || __clang_major__ >= 3) && !defined __ibmxl__ /* The GCC built-ins are known to work fine. */ # define REPEAT_COUNT 5000 #else /* This is quite high, because with a smaller count, say 50000, we often get an "OK" result even with the racy implementation that we pick on Fedora 13 Linux/x86_64 (gcc 4.4). */ # define REPEAT_COUNT 100000 #endif #include <signal.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "asyncsafe-spin.h" #if !ENABLE_LOCKING # define asyncsafe_spin_init(lock) (void)(lock) # define asyncsafe_spin_lock(lock, mask, saved_mask) \ ((void)(lock), (void)(mask), (void)(saved_mask)) # define asyncsafe_spin_unlock(lock, saved_mask) \ ((void)(lock), (void)(saved_mask)) # define asyncsafe_spin_destroy(lock) (void)(lock) #endif #include "glthread/lock.h" #include "glthread/thread.h" #include "glthread/yield.h" #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "atomic-int-gnulib.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif static sigset_t signals_to_block; #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test use like normal locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ static asyncsafe_spinlock_t my_lock; static void * lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { sigset_t saved_signals; int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); asyncsafe_spin_lock (&my_lock, &signals_to_block, &saved_signals); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); asyncsafe_spin_unlock (&my_lock, &saved_signals); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); asyncsafe_spin_lock (&my_lock, &signals_to_block, &saved_signals); check_accounts (); asyncsafe_spin_unlock (&my_lock, &saved_signals); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { sigset_t saved_signals; dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); asyncsafe_spin_lock (&my_lock, &signals_to_block, &saved_signals); check_accounts (); asyncsafe_spin_unlock (&my_lock, &saved_signals); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_asyncsafe_spin (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (lock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (lock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&lock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif sigemptyset (&signals_to_block); sigaddset (&signals_to_block, SIGINT); asyncsafe_spin_init (&my_lock); printf ("Starting test_asyncsafe_spin ..."); fflush (stdout); test_asyncsafe_spin (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atan.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (atan, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = atan (x); ASSERT (y >= 0.5404195002 && y <= 0.5404195003); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atan2.c����������������������������������������������������������0000664�0000000�0000000�00000003070�14110572173�0017567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (atan2, double, (double, double)); #include "macros.h" volatile double x; volatile double y; double z; int main () { /* A particular value in the first quadrant. */ x = 0.6; y = 0.8; z = atan2 (y, x); ASSERT (z >= 0.9272952180 && z <= 0.9272952181); /* A particular value in the second quadrant. */ x = -0.6; y = 0.8; z = atan2 (y, x); ASSERT (z >= 2.214297435 && z <= 2.214297436); /* A particular value in the third quadrant. */ x = -0.6; y = -0.8; z = atan2 (y, x); ASSERT (z >= -2.214297436 && z <= -2.214297435); /* A particular value in the fourth quadrant. */ x = 0.6; y = -0.8; z = atan2 (y, x); ASSERT (z >= -0.9272952181 && z <= -0.9272952180); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atan2f.c���������������������������������������������������������0000664�0000000�0000000�00000003073�14110572173�0017740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan2f() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (atan2f, float, (float, float)); #include "macros.h" volatile float x; volatile float y; float z; int main () { /* A particular value in the first quadrant. */ x = 0.6f; y = 0.8f; z = atan2f (y, x); ASSERT (z >= 0.92729515f && z <= 0.9272953f); /* A particular value in the second quadrant. */ x = -0.6f; y = 0.8f; z = atan2f (y, x); ASSERT (z >= 2.2142974f && z <= 2.2142975f); /* A particular value in the third quadrant. */ x = -0.6f; y = -0.8f; z = atan2f (y, x); ASSERT (z >= -2.2142975f && z <= -2.2142974f); /* A particular value in the fourth quadrant. */ x = 0.6f; y = -0.8f; z = atan2f (y, x); ASSERT (z >= -0.9272953f && z <= -0.92729515f); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atanf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atanf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (atanf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = atanf (x); ASSERT (y >= 0.5404194f && y <= 0.5404196f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atanl.c����������������������������������������������������������0000664�0000000�0000000�00000002251�14110572173�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atanl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (atanl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = atanl (x); ASSERT (y >= 0.5404195002L && y <= 0.5404195003L); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atexit.c���������������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of program termination handlers. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdlib.h> #include "signature.h" SIGNATURE_CHECK (atexit, int, (void (*) (void))); #include <unistd.h> #define TEMPFILE "t-atexit.tmp" static void clear_temp_file (void) { unlink (TEMPFILE); } int main (int argc, char *argv[]) { atexit (clear_temp_file); if (argc > 1) exit (atoi (argv[1])); else return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-atexit.sh��������������������������������������������������������0000775�0000000�0000000�00000001074�14110572173�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . # Check that an atexit handler is called when main() returns normally. echo > t-atexit.tmp ${CHECKER} test-atexit if test -f t-atexit.tmp; then Exit 1 fi # Check that an atexit handler is called when the program is left # through exit(0). echo > t-atexit.tmp ${CHECKER} test-atexit 0 if test -f t-atexit.tmp; then Exit 1 fi # Check that an atexit handler is called when the program is left # through exit(1). echo > t-atexit.tmp ${CHECKER} test-atexit 1 if test -f t-atexit.tmp; then Exit 1 fi Exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-avltree_list.c���������������������������������������������������0000664�0000000�0000000�00000045304�14110572173�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_avltree_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "macros.h" extern void gl_avltree_list_check_invariants (gl_list_t list); static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { gl_avltree_list_check_invariants (list2); gl_avltree_list_check_invariants (list3); check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_AVLTREE_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_AVLTREE_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-avltree_omap.c���������������������������������������������������0000664�0000000�0000000�00000007555�14110572173�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_avltree_omap.h" #include <stdlib.h> #include <string.h> #include "gl_array_omap.h" #include "macros.h" extern void gl_avltree_omap_check_invariants (gl_omap_t set); static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_omap_t map1, gl_omap_t map2) { size_t n = gl_omap_size (map1); gl_omap_iterator_t iter1, iter2; const void *key1; const void *value1; const void *key2; const void *value2; size_t i; iter1 = gl_omap_iterator (map1); iter2 = gl_omap_iterator (map2); for (i = 0; i < n; i++) { ASSERT (gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (gl_omap_iterator_next (&iter2, &key2, &value2)); ASSERT (key1 == key2); ASSERT (value1 == value2); } ASSERT (!gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (!gl_omap_iterator_next (&iter2, &key2, &value2)); gl_omap_iterator_free (&iter1); gl_omap_iterator_free (&iter2); } static void check_all (gl_omap_t map1, gl_omap_t map2) { gl_avltree_omap_check_invariants (map2); check_equals (map1, map2); } int main (int argc, char *argv[]) { gl_omap_t map1, map2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_omap_nx_create_empty (GL_ARRAY_OMAP, (gl_mapkey_compar_fn) strcmp, NULL, NULL); ASSERT (map1 != NULL); /* Create map2. */ map2 = gl_omap_nx_create_empty (GL_AVLTREE_OMAP, (gl_mapkey_compar_fn) strcmp, NULL, NULL); ASSERT (map2 != NULL); check_all (map1, map2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_omap_nx_put (map1, key, value) == gl_omap_nx_put (map2, key, value)); check_all (map1, map2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); ASSERT (gl_omap_get (map1, key) == gl_omap_get (map2, key)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_omap_nx_put (map1, key, value) == gl_omap_nx_put (map2, key, value)); } break; case 2: { const char *key = RANDOM_OBJECT (); ASSERT (gl_omap_remove (map1, key) == gl_omap_remove (map2, key)); } break; } check_all (map1, map2); } gl_omap_free (map1); gl_omap_free (map2); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-avltree_oset.c���������������������������������������������������0000664�0000000�0000000�00000012005�14110572173�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_avltree_oset.h" #include <stdlib.h> #include <string.h> #include "gl_array_oset.h" #include "macros.h" #include "test-oset-update.h" extern void gl_avltree_oset_check_invariants (gl_oset_t set); static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_oset_t set1, gl_oset_t set2) { size_t n = gl_oset_size (set1); gl_oset_iterator_t iter1, iter2; const void *elt1; const void *elt2; size_t i; iter1 = gl_oset_iterator (set1); iter2 = gl_oset_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_oset_iterator_next (&iter1, &elt1)); ASSERT (gl_oset_iterator_next (&iter2, &elt2)); ASSERT (elt1 == elt2); } ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); ASSERT (!gl_oset_iterator_next (&iter2, &elt2)); gl_oset_iterator_free (&iter1); gl_oset_iterator_free (&iter2); } static void check_all (gl_oset_t set1, gl_oset_t set2) { gl_avltree_oset_check_invariants (set2); check_equals (set1, set2); } static bool is_at_least (const void *elt, const void *threshold) { return strcmp ((const char *) elt, (const char *) threshold) >= 0; } int main (int argc, char *argv[]) { gl_oset_t set1, set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_oset_nx_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_oset_nx_create_empty (GL_AVLTREE_OSET, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set2 != NULL); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == gl_oset_nx_add (set2, obj)); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (4); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_search (set1, obj) == gl_oset_search (set2, obj)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == gl_oset_nx_add (set2, obj)); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_remove (set1, obj) == gl_oset_remove (set2, obj)); } break; case 3: { const char *obj = RANDOM_OBJECT (); gl_oset_iterator_t iter1 = gl_oset_iterator_atleast (set1, is_at_least, obj); gl_oset_iterator_t iter2 = gl_oset_iterator_atleast (set2, is_at_least, obj); const void *elt1; const void *elt2; /* Check the first two values that the iterator produces. Checking them all would make this part of the test dominate the run time of the test. */ bool havenext1 = gl_oset_iterator_next (&iter1, &elt1); bool havenext2 = gl_oset_iterator_next (&iter2, &elt2); ASSERT (havenext1 == havenext2); if (havenext1) { ASSERT (elt1 == elt2); havenext1 = gl_oset_iterator_next (&iter1, &elt1); havenext2 = gl_oset_iterator_next (&iter2, &elt2); ASSERT (havenext1 == havenext2); if (havenext1) ASSERT (elt1 == elt2); } gl_oset_iterator_free (&iter1); gl_oset_iterator_free (&iter2); } break; } check_all (set1, set2); } gl_oset_free (set1); gl_oset_free (set2); } test_update (GL_AVLTREE_OSET); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-avltreehash_list.c�����������������������������������������������0000664�0000000�0000000�00000046623�14110572173�0022136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_avltreehash_list.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_array_list.h" #include "macros.h" extern void gl_avltreehash_list_check_invariants (gl_list_t list); static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { gl_avltreehash_list_check_invariants (list2); gl_avltreehash_list_check_invariants (list3); check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_AVLTREEHASH_LIST, string_equals, string_hash, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_AVLTREEHASH_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-base32.c���������������������������������������������������������0000664�0000000�0000000�00000015310�14110572173�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Self tests for base32. Copyright (C) 2004, 2008-2021 Free Software Foundation, Inc. Based on the tests for base64 written by Simon Josefsson. Adapted for base32 by Gijs van Tulder. This 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 "base32.h" #include <stddef.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include "macros.h" int main (void) { const char *in = "abcdefghijklmnop"; const char *b32in = "MFRGGZDFMZTWQ2LKNNWG23TPOA======"; char out[255]; size_t len; bool ok; char *p; memset (out, 0x42, sizeof (out)); base32_encode (in, 0, out, 0); ASSERT (out[0] == '\x42'); memset (out, 0x42, sizeof (out)); base32_encode (in, 1, out, 10); ASSERT (memcmp (out, "ME======", 1) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 1, out, 2); ASSERT (memcmp (out, "ME======", 2) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 1, out, 3); ASSERT (memcmp (out, "ME======", 3) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 1, out, 4); ASSERT (memcmp (out, "ME======", 4) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 1, out, 8); ASSERT (memcmp (out, "ME======", 8) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 2, out, 8); ASSERT (memcmp (out, "MFRA====", 8) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 3, out, 8); ASSERT (memcmp (out, "MFRGG===", 8) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 4, out, 8); ASSERT (memcmp (out, "MFRGGZA=", 8) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 5, out, 8); ASSERT (memcmp (out, "MFRGGZDF", 8) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 6, out, 16); ASSERT (memcmp (out, "MFRGGZDFMY======", 16) == 0); memset (out, 0x42, sizeof (out)); base32_encode (in, 6, out, 100); ASSERT (memcmp (out, "MFRGGZDFMY======", 16) == 0); /* Decode. */ memset (out, 0x42, sizeof (out)); len = 0; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 0); memset (out, 0x42, sizeof (out)); len = 1; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 1); ASSERT (memcmp (out, "abcdefghijklmnop", 1) == 0); memset (out, 0x42, sizeof (out)); len = 2; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 2); ASSERT (memcmp (out, "abcdefghijklmnop", 2) == 0); memset (out, 0x42, sizeof (out)); len = 3; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 3); ASSERT (memcmp (out, "abcdefghijklmnop", 3) == 0); memset (out, 0x42, sizeof (out)); len = 4; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 4); ASSERT (memcmp (out, "abcdefghijklmnop", 4) == 0); memset (out, 0x42, sizeof (out)); len = 5; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 5); ASSERT (memcmp (out, "abcdefghijklmnop", 5) == 0); memset (out, 0x42, sizeof (out)); len = 6; ok = base32_decode (b32in, 8, out, &len); ASSERT (ok); ASSERT (len == 5); ASSERT (memcmp (out, "abcdefghijklmnop", 5) == 0); memset (out, 0x42, sizeof (out)); len = 100; ok = base32_decode (b32in, strlen (b32in), out, &len); ASSERT (ok); ASSERT (len == 16); ASSERT (memcmp (out, "abcdefghijklmnop", 16) == 0); /* Allocating encode */ len = base32_encode_alloc (in, strlen (in), &p); ASSERT (len == 32); ASSERT (strcmp (p, "MFRGGZDFMZTWQ2LKNNWG23TPOA======") == 0); free (p); len = base32_encode_alloc (in, SIZE_MAX - 5, &p); ASSERT (len == 0); /* Decode context function */ { struct base32_decode_context ctx; base32_decode_ctx_init (&ctx); len = sizeof (out); ok = base32_decode_ctx (&ctx, b32in, strlen (b32in), out, &len); ASSERT (ok); ASSERT (len == 16); ASSERT (memcmp (out, "abcdefghijklmnop", len) == 0); } /* Allocating decode context function */ ok = base32_decode_alloc_ctx (NULL, b32in, strlen (b32in), &p, &len); ASSERT (ok); ASSERT (len == 16); ASSERT (memcmp (out, "abcdefghijklmnop", len) == 0); free (p); { struct base32_decode_context ctx; const char *newlineb32 = "MFRG\nGZDFMZTWQ2LKNNW\nG23TPOA======"; base32_decode_ctx_init (&ctx); ok = base32_decode_alloc_ctx (&ctx, newlineb32, strlen (newlineb32), &p, &len); ASSERT (ok); ASSERT (len == strlen (in)); ASSERT (memcmp (p, in, len) == 0); free (p); } { struct base32_decode_context ctx; base32_decode_ctx_init (&ctx); ok = base32_decode_alloc_ctx (&ctx, "MFRGGZDFM\nZTWQ2LK", 17, &p, &len); ASSERT (ok); ASSERT (len == 10); ASSERT (memcmp (p, "abcdefghij", len) == 0); free (p); base32_decode_ctx_init (&ctx); ok = base32_decode_alloc_ctx (&ctx, "MF\n", 3, &p, &len); ASSERT (ok); ASSERT (len == 0); free (p); ok = base32_decode_alloc_ctx (&ctx, "RGGZDFMZ", 8, &p, &len); ASSERT (ok); ASSERT (len == 5); ASSERT (memcmp (p, "abcde", len) == 0); free (p); ok = base32_decode_alloc_ctx (&ctx, "TWQ2LK", 6, &p, &len); ASSERT (ok); ASSERT (len == 5); ASSERT (memcmp (p, "fghij", len) == 0); free (p); ok = base32_decode_alloc_ctx (&ctx, "", 0, &p, &len); ASSERT (ok); free (p); } { struct base32_decode_context ctx; const char *newlineb32 = "\n\n\n\n\n"; base32_decode_ctx_init (&ctx); ok = base32_decode_alloc_ctx (&ctx, newlineb32, strlen (newlineb32), &p, &len); ASSERT (ok); ASSERT (len == 0); free (p); } ok = base32_decode_alloc_ctx (NULL, " ! ", 3, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "ABC\nDEF", 7, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AA", 2, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AA=", 3, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AABBAAxx", 8, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AABBAA=X", 8, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AABBAA=X", 8, &p, &len); ASSERT (!ok); ok = base32_decode_alloc_ctx (NULL, "AABBAA=A", 8, &p, &len); ASSERT (!ok); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-base64.c���������������������������������������������������������0000664�0000000�0000000�00000013576�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Self tests for base64. Copyright (C) 2004, 2008-2021 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 "base64.h" #include <stddef.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include "macros.h" int main (void) { const char *in = "abcdefghijklmnop"; const char *b64in = "YWJjZGVmZw=="; char out[255]; size_t len; bool ok; char *p; memset (out, 0x42, sizeof (out)); base64_encode (in, 0, out, 0); ASSERT (out[0] == '\x42'); memset (out, 0x42, sizeof (out)); base64_encode (in, 1, out, 1); ASSERT (memcmp (out, "YQ==", 1) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 1, out, 2); ASSERT (memcmp (out, "YQ==", 2) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 1, out, 3); ASSERT (memcmp (out, "YQ==", 3) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 1, out, 4); ASSERT (memcmp (out, "YQ==", 4) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 1, out, 8); ASSERT (memcmp (out, "YQ==", 4) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 2, out, 4); ASSERT (memcmp (out, "YWI=", 4) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 3, out, 4); ASSERT (memcmp (out, "YWJj", 4) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 4, out, 5); ASSERT (memcmp (out, "YWJjZA==", 5) == 0); memset (out, 0x42, sizeof (out)); base64_encode (in, 4, out, 100); ASSERT (memcmp (out, "YWJjZA==", 6) == 0); /* Decode. */ memset (out, 0x42, sizeof (out)); len = 0; ok = base64_decode (b64in, 4, out, &len); ASSERT (ok); ASSERT (len == 0); memset (out, 0x42, sizeof (out)); len = 1; ok = base64_decode (b64in, 4, out, &len); ASSERT (ok); ASSERT (len == 1); ASSERT (memcmp (out, "abcdefg", 1) == 0); memset (out, 0x42, sizeof (out)); len = 2; ok = base64_decode (b64in, 4, out, &len); ASSERT (ok); ASSERT (len == 2); ASSERT (memcmp (out, "abcdefg", 2) == 0); memset (out, 0x42, sizeof (out)); len = 3; ok = base64_decode (b64in, 4, out, &len); ASSERT (ok); ASSERT (len == 3); ASSERT (memcmp (out, "abcdefg", 3) == 0); memset (out, 0x42, sizeof (out)); len = 4; ok = base64_decode (b64in, 4, out, &len); ASSERT (ok); ASSERT (len == 3); ASSERT (memcmp (out, "abcdefg", 3) == 0); memset (out, 0x42, sizeof (out)); len = 100; ok = base64_decode (b64in, strlen (b64in), out, &len); ASSERT (ok); ASSERT (len == 7); ASSERT (memcmp (out, "abcdefg", 7) == 0); /* Allocating encode */ len = base64_encode_alloc (in, strlen (in), &p); ASSERT (len == 24); ASSERT (strcmp (p, "YWJjZGVmZ2hpamtsbW5vcA==") == 0); free (p); len = base64_encode_alloc (in, SIZE_MAX - 5, &p); ASSERT (len == 0); /* Decode context function */ { struct base64_decode_context ctx; base64_decode_ctx_init (&ctx); len = sizeof (out); ok = base64_decode_ctx (&ctx, b64in, strlen (b64in), out, &len); ASSERT (ok); ASSERT (len == 7); ASSERT (memcmp (out, "abcdefg", len) == 0); } /* Allocating decode context function */ ok = base64_decode_alloc_ctx (NULL, b64in, strlen (b64in), &p, &len); ASSERT (ok); ASSERT (len == 7); ASSERT (memcmp (out, "abcdefg", len) == 0); free (p); { struct base64_decode_context ctx; const char *newlineb64 = "YWJjZG\nVmZ2hp\namtsbW5vcA=="; base64_decode_ctx_init (&ctx); ok = base64_decode_alloc_ctx (&ctx, newlineb64, strlen (newlineb64), &p, &len); ASSERT (ok); ASSERT (len == strlen (in)); ASSERT (memcmp (p, in, len) == 0); free (p); } { struct base64_decode_context ctx; base64_decode_ctx_init (&ctx); ok = base64_decode_alloc_ctx (&ctx, "YW\nJjZGVmZ2hp", 13, &p, &len); ASSERT (ok); ASSERT (len == 9); ASSERT (memcmp (p, "abcdefghi", len) == 0); free (p); base64_decode_ctx_init (&ctx); ok = base64_decode_alloc_ctx (&ctx, "YW\n", 3, &p, &len); ASSERT (ok); ASSERT (len == 0); free (p); ok = base64_decode_alloc_ctx (&ctx, "JjZGVmZ2", 8, &p, &len); ASSERT (ok); ASSERT (len == 6); ASSERT (memcmp (p, "abcdef", len) == 0); free (p); ok = base64_decode_alloc_ctx (&ctx, "hp", 2, &p, &len); ASSERT (ok); ASSERT (len == 3); ASSERT (memcmp (p, "ghi", len) == 0); free (p); ok = base64_decode_alloc_ctx (&ctx, "", 0, &p, &len); ASSERT (ok); free (p); } { struct base64_decode_context ctx; const char *newlineb64 = "\n\n\n\n\n"; base64_decode_ctx_init (&ctx); ok = base64_decode_alloc_ctx (&ctx, newlineb64, strlen (newlineb64), &p, &len); ASSERT (ok); ASSERT (len == 0); free (p); } ok = base64_decode_alloc_ctx (NULL, " ! ", 3, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "abc\ndef", 7, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aa", 2, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aa=", 3, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aax", 3, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aa=X", 4, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aa=X", 4, &p, &len); ASSERT (!ok); ok = base64_decode_alloc_ctx (NULL, "aax=X", 5, &p, &len); ASSERT (!ok); return 0; } ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-binary-io.c������������������������������������������������������0000664�0000000�0000000�00000003054�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of binary mode I/O. Copyright (C) 2005, 2007-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #include "binary-io.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" int main (int argc, char *argv[]) { /* Test the O_BINARY macro. */ { int fd = open ("t-bin-out0.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); if (write (fd, "Hello\n", 6) < 0) exit (1); close (fd); } { struct stat statbuf; if (stat ("t-bin-out0.tmp", &statbuf) < 0) exit (1); ASSERT (statbuf.st_size == 6); } switch (argv[1][0]) { case '1': /* Test the set_binary_mode() function. */ set_binary_mode (1, O_BINARY); fputs ("Hello\n", stdout); break; default: break; } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-binary-io.sh�����������������������������������������������������0000775�0000000�0000000�00000000400�14110572173�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp" ${CHECKER} ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 cmp t-bin-out0.tmp t-bin-out1.tmp > /dev/null || exit 1 rm -fr $tmpfiles exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-bind.c�����������������������������������������������������������0000664�0000000�0000000�00000003105�14110572173�0017475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test binding a server socket to a port. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (bind, int, (int, const struct sockaddr *, socklen_t)); #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (bind (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (bind (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-bitrotate.c������������������������������������������������������0000664�0000000�0000000�00000036415�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <bitrotate.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include "bitrotate.h" #include "macros.h" int main (void) { ASSERT (rotl8 (42, 0) == 42); ASSERT (rotl8 (42, 1) == 84); ASSERT (rotl8 (42, 2) == 168); ASSERT (rotl8 (42, 3) == 81); ASSERT (rotl8 (42, 4) == 162); ASSERT (rotl8 (42, 5) == 69); ASSERT (rotl8 (42, 6) == 138); ASSERT (rotl8 (42, 7) == 21); ASSERT (rotl8 (42, 8) == 42); ASSERT (rotr8 (42, 0) == 42); ASSERT (rotr8 (42, 1) == 21); ASSERT (rotr8 (42, 2) == 138); ASSERT (rotr8 (42, 3) == 69); ASSERT (rotr8 (42, 4) == 162); ASSERT (rotr8 (42, 5) == 81); ASSERT (rotr8 (42, 6) == 168); ASSERT (rotr8 (42, 7) == 84); ASSERT (rotr8 (42, 8) == 42); ASSERT (rotl16 (43981, 0) == 43981); ASSERT (rotl16 (43981, 1) == 22427); ASSERT (rotl16 (43981, 2) == 44854); ASSERT (rotl16 (43981, 3) == 24173); ASSERT (rotl16 (43981, 4) == 48346); ASSERT (rotl16 (43981, 5) == 31157); ASSERT (rotl16 (43981, 6) == 62314); ASSERT (rotl16 (43981, 7) == 59093); ASSERT (rotl16 (43981, 8) == 52651); ASSERT (rotl16 (43981, 9) == 39767); ASSERT (rotl16 (43981, 10) == 13999); ASSERT (rotl16 (43981, 11) == 27998); ASSERT (rotl16 (43981, 12) == 55996); ASSERT (rotl16 (43981, 13) == 46457); ASSERT (rotl16 (43981, 14) == 27379); ASSERT (rotl16 (43981, 15) == 54758); ASSERT (rotl16 (43981, 16) == 43981); ASSERT (rotr16 (43981, 0) == 43981); ASSERT (rotr16 (43981, 1) == 54758); ASSERT (rotr16 (43981, 2) == 27379); ASSERT (rotr16 (43981, 3) == 46457); ASSERT (rotr16 (43981, 4) == 55996); ASSERT (rotr16 (43981, 5) == 27998); ASSERT (rotr16 (43981, 6) == 13999); ASSERT (rotr16 (43981, 7) == 39767); ASSERT (rotr16 (43981, 8) == 52651); ASSERT (rotr16 (43981, 9) == 59093); ASSERT (rotr16 (43981, 10) == 62314); ASSERT (rotr16 (43981, 11) == 31157); ASSERT (rotr16 (43981, 12) == 48346); ASSERT (rotr16 (43981, 13) == 24173); ASSERT (rotr16 (43981, 14) == 44854); ASSERT (rotr16 (43981, 15) == 22427); ASSERT (rotr16 (43981, 16) == 43981); ASSERT (rotl32 (2309737967U, 1) == 324508639U); ASSERT (rotl32 (2309737967U, 2) == 649017278U); ASSERT (rotl32 (2309737967U, 3) == 1298034556U); ASSERT (rotl32 (2309737967U, 4) == 2596069112U); ASSERT (rotl32 (2309737967U, 5) == 897170929U); ASSERT (rotl32 (2309737967U, 6) == 1794341858U); ASSERT (rotl32 (2309737967U, 7) == 3588683716U); ASSERT (rotl32 (2309737967U, 8) == 2882400137U); ASSERT (rotl32 (2309737967U, 9) == 1469832979U); ASSERT (rotl32 (2309737967U, 10) == 2939665958U); ASSERT (rotl32 (2309737967U, 11) == 1584364621U); ASSERT (rotl32 (2309737967U, 12) == 3168729242U); ASSERT (rotl32 (2309737967U, 13) == 2042491189U); ASSERT (rotl32 (2309737967U, 14) == 4084982378U); ASSERT (rotl32 (2309737967U, 15) == 3874997461U); ASSERT (rotl32 (2309737967U, 16) == 3455027627U); ASSERT (rotl32 (2309737967U, 17) == 2615087959U); ASSERT (rotl32 (2309737967U, 18) == 935208623U); ASSERT (rotl32 (2309737967U, 19) == 1870417246U); ASSERT (rotl32 (2309737967U, 20) == 3740834492U); ASSERT (rotl32 (2309737967U, 21) == 3186701689U); ASSERT (rotl32 (2309737967U, 22) == 2078436083U); ASSERT (rotl32 (2309737967U, 23) == 4156872166U); ASSERT (rotl32 (2309737967U, 24) == 4018777037U); ASSERT (rotl32 (2309737967U, 25) == 3742586779U); ASSERT (rotl32 (2309737967U, 26) == 3190206263U); ASSERT (rotl32 (2309737967U, 27) == 2085445231U); ASSERT (rotl32 (2309737967U, 28) == 4170890462U); ASSERT (rotl32 (2309737967U, 29) == 4046813629U); ASSERT (rotl32 (2309737967U, 30) == 3798659963U); ASSERT (rotl32 (2309737967U, 31) == 3302352631U); ASSERT (rotr32 (2309737967U, 1) == 3302352631lU); ASSERT (rotr32 (2309737967U, 2) == 3798659963lU); ASSERT (rotr32 (2309737967U, 3) == 4046813629lU); ASSERT (rotr32 (2309737967U, 4) == 4170890462lU); ASSERT (rotr32 (2309737967U, 5) == 2085445231lU); ASSERT (rotr32 (2309737967U, 6) == 3190206263lU); ASSERT (rotr32 (2309737967U, 7) == 3742586779lU); ASSERT (rotr32 (2309737967U, 8) == 4018777037lU); ASSERT (rotr32 (2309737967U, 9) == 4156872166lU); ASSERT (rotr32 (2309737967U, 10) == 2078436083lU); ASSERT (rotr32 (2309737967U, 11) == 3186701689lU); ASSERT (rotr32 (2309737967U, 12) == 3740834492lU); ASSERT (rotr32 (2309737967U, 13) == 1870417246lU); ASSERT (rotr32 (2309737967U, 14) == 935208623lU); ASSERT (rotr32 (2309737967U, 15) == 2615087959lU); ASSERT (rotr32 (2309737967U, 16) == 3455027627lU); ASSERT (rotr32 (2309737967U, 17) == 3874997461lU); ASSERT (rotr32 (2309737967U, 18) == 4084982378lU); ASSERT (rotr32 (2309737967U, 19) == 2042491189lU); ASSERT (rotr32 (2309737967U, 20) == 3168729242lU); ASSERT (rotr32 (2309737967U, 21) == 1584364621lU); ASSERT (rotr32 (2309737967U, 22) == 2939665958lU); ASSERT (rotr32 (2309737967U, 23) == 1469832979lU); ASSERT (rotr32 (2309737967U, 24) == 2882400137lU); ASSERT (rotr32 (2309737967U, 25) == 3588683716lU); ASSERT (rotr32 (2309737967U, 26) == 1794341858lU); ASSERT (rotr32 (2309737967U, 27) == 897170929lU); ASSERT (rotr32 (2309737967U, 28) == 2596069112lU); ASSERT (rotr32 (2309737967U, 29) == 1298034556lU); ASSERT (rotr32 (2309737967U, 30) == 649017278lU); ASSERT (rotr32 (2309737967U, 31) == 324508639lU); #ifdef UINT64_MAX ASSERT (rotl64 (16045690984503098046ULL, 1) == 13644637895296644477ULL); ASSERT (rotl64 (16045690984503098046ULL, 2) == 8842531716883737339ULL); ASSERT (rotl64 (16045690984503098046ULL, 3) == 17685063433767474678ULL); ASSERT (rotl64 (16045690984503098046ULL, 4) == 16923382793825397741ULL); ASSERT (rotl64 (16045690984503098046ULL, 5) == 15400021513941243867ULL); ASSERT (rotl64 (16045690984503098046ULL, 6) == 12353298954172936119ULL); ASSERT (rotl64 (16045690984503098046ULL, 7) == 6259853834636320623ULL); ASSERT (rotl64 (16045690984503098046ULL, 8) == 12519707669272641246ULL); ASSERT (rotl64 (16045690984503098046ULL, 9) == 6592671264835730877ULL); ASSERT (rotl64 (16045690984503098046ULL, 10) == 13185342529671461754ULL); ASSERT (rotl64 (16045690984503098046ULL, 11) == 7923940985633371893ULL); ASSERT (rotl64 (16045690984503098046ULL, 12) == 15847881971266743786ULL); ASSERT (rotl64 (16045690984503098046ULL, 13) == 13249019868823935957ULL); ASSERT (rotl64 (16045690984503098046ULL, 14) == 8051295663938320299ULL); ASSERT (rotl64 (16045690984503098046ULL, 15) == 16102591327876640598ULL); ASSERT (rotl64 (16045690984503098046ULL, 16) == 13758438582043729581ULL); ASSERT (rotl64 (16045690984503098046ULL, 17) == 9070133090377907547ULL); ASSERT (rotl64 (16045690984503098046ULL, 18) == 18140266180755815094ULL); ASSERT (rotl64 (16045690984503098046ULL, 19) == 17833788287802078573ULL); ASSERT (rotl64 (16045690984503098046ULL, 20) == 17220832501894605531ULL); ASSERT (rotl64 (16045690984503098046ULL, 21) == 15994920930079659447ULL); ASSERT (rotl64 (16045690984503098046ULL, 22) == 13543097786449767279ULL); ASSERT (rotl64 (16045690984503098046ULL, 23) == 8639451499189982943ULL); ASSERT (rotl64 (16045690984503098046ULL, 24) == 17278902998379965886ULL); ASSERT (rotl64 (16045690984503098046ULL, 25) == 16111061923050380157ULL); ASSERT (rotl64 (16045690984503098046ULL, 26) == 13775379772391208699ULL); ASSERT (rotl64 (16045690984503098046ULL, 27) == 9104015471072865783ULL); ASSERT (rotl64 (16045690984503098046ULL, 28) == 18208030942145731566ULL); ASSERT (rotl64 (16045690984503098046ULL, 29) == 17969317810581911517ULL); ASSERT (rotl64 (16045690984503098046ULL, 30) == 17491891547454271419ULL); ASSERT (rotl64 (16045690984503098046ULL, 31) == 16537039021198991223ULL); ASSERT (rotl64 (16045690984503098046ULL, 32) == 14627333968688430831ULL); ASSERT (rotl64 (16045690984503098046ULL, 33) == 10807923863667310047ULL); ASSERT (rotl64 (16045690984503098046ULL, 34) == 3169103653625068479ULL); ASSERT (rotl64 (16045690984503098046ULL, 35) == 6338207307250136958ULL); ASSERT (rotl64 (16045690984503098046ULL, 36) == 12676414614500273916ULL); ASSERT (rotl64 (16045690984503098046ULL, 37) == 6906085155290996217ULL); ASSERT (rotl64 (16045690984503098046ULL, 38) == 13812170310581992434ULL); ASSERT (rotl64 (16045690984503098046ULL, 39) == 9177596547454433253ULL); ASSERT (rotl64 (16045690984503098046ULL, 40) == 18355193094908866506ULL); ASSERT (rotl64 (16045690984503098046ULL, 41) == 18263642116108181397ULL); ASSERT (rotl64 (16045690984503098046ULL, 42) == 18080540158506811179ULL); ASSERT (rotl64 (16045690984503098046ULL, 43) == 17714336243304070743ULL); ASSERT (rotl64 (16045690984503098046ULL, 44) == 16981928412898589871ULL); ASSERT (rotl64 (16045690984503098046ULL, 45) == 15517112752087628127ULL); ASSERT (rotl64 (16045690984503098046ULL, 46) == 12587481430465704639ULL); ASSERT (rotl64 (16045690984503098046ULL, 47) == 6728218787221857663ULL); ASSERT (rotl64 (16045690984503098046ULL, 48) == 13456437574443715326ULL); ASSERT (rotl64 (16045690984503098046ULL, 49) == 8466131075177879037ULL); ASSERT (rotl64 (16045690984503098046ULL, 50) == 16932262150355758074ULL); ASSERT (rotl64 (16045690984503098046ULL, 51) == 15417780227001964533ULL); ASSERT (rotl64 (16045690984503098046ULL, 52) == 12388816380294377451ULL); ASSERT (rotl64 (16045690984503098046ULL, 53) == 6330888686879203287ULL); ASSERT (rotl64 (16045690984503098046ULL, 54) == 12661777373758406574ULL); ASSERT (rotl64 (16045690984503098046ULL, 55) == 6876810673807261533ULL); ASSERT (rotl64 (16045690984503098046ULL, 56) == 13753621347614523066ULL); ASSERT (rotl64 (16045690984503098046ULL, 57) == 9060498621519494517ULL); ASSERT (rotl64 (16045690984503098046ULL, 58) == 18120997243038989034ULL); ASSERT (rotl64 (16045690984503098046ULL, 59) == 17795250412368426453ULL); ASSERT (rotl64 (16045690984503098046ULL, 60) == 17143756751027301291ULL); ASSERT (rotl64 (16045690984503098046ULL, 61) == 15840769428345050967ULL); ASSERT (rotl64 (16045690984503098046ULL, 62) == 13234794782980550319ULL); ASSERT (rotl64 (16045690984503098046ULL, 63) == 8022845492251549023ULL); ASSERT (rotr64 (16045690984503098046ULL, 1) == 8022845492251549023ULL); ASSERT (rotr64 (16045690984503098046ULL, 2) == 13234794782980550319ULL); ASSERT (rotr64 (16045690984503098046ULL, 3) == 15840769428345050967ULL); ASSERT (rotr64 (16045690984503098046ULL, 4) == 17143756751027301291ULL); ASSERT (rotr64 (16045690984503098046ULL, 5) == 17795250412368426453ULL); ASSERT (rotr64 (16045690984503098046ULL, 6) == 18120997243038989034ULL); ASSERT (rotr64 (16045690984503098046ULL, 7) == 9060498621519494517ULL); ASSERT (rotr64 (16045690984503098046ULL, 8) == 13753621347614523066ULL); ASSERT (rotr64 (16045690984503098046ULL, 9) == 6876810673807261533ULL); ASSERT (rotr64 (16045690984503098046ULL, 10) == 12661777373758406574ULL); ASSERT (rotr64 (16045690984503098046ULL, 11) == 6330888686879203287ULL); ASSERT (rotr64 (16045690984503098046ULL, 12) == 12388816380294377451ULL); ASSERT (rotr64 (16045690984503098046ULL, 13) == 15417780227001964533ULL); ASSERT (rotr64 (16045690984503098046ULL, 14) == 16932262150355758074ULL); ASSERT (rotr64 (16045690984503098046ULL, 15) == 8466131075177879037ULL); ASSERT (rotr64 (16045690984503098046ULL, 16) == 13456437574443715326ULL); ASSERT (rotr64 (16045690984503098046ULL, 17) == 6728218787221857663ULL); ASSERT (rotr64 (16045690984503098046ULL, 18) == 12587481430465704639ULL); ASSERT (rotr64 (16045690984503098046ULL, 19) == 15517112752087628127ULL); ASSERT (rotr64 (16045690984503098046ULL, 20) == 16981928412898589871ULL); ASSERT (rotr64 (16045690984503098046ULL, 21) == 17714336243304070743ULL); ASSERT (rotr64 (16045690984503098046ULL, 22) == 18080540158506811179ULL); ASSERT (rotr64 (16045690984503098046ULL, 23) == 18263642116108181397ULL); ASSERT (rotr64 (16045690984503098046ULL, 24) == 18355193094908866506ULL); ASSERT (rotr64 (16045690984503098046ULL, 25) == 9177596547454433253ULL); ASSERT (rotr64 (16045690984503098046ULL, 26) == 13812170310581992434ULL); ASSERT (rotr64 (16045690984503098046ULL, 27) == 6906085155290996217ULL); ASSERT (rotr64 (16045690984503098046ULL, 28) == 12676414614500273916ULL); ASSERT (rotr64 (16045690984503098046ULL, 29) == 6338207307250136958ULL); ASSERT (rotr64 (16045690984503098046ULL, 30) == 3169103653625068479ULL); ASSERT (rotr64 (16045690984503098046ULL, 31) == 10807923863667310047ULL); ASSERT (rotr64 (16045690984503098046ULL, 32) == 14627333968688430831ULL); ASSERT (rotr64 (16045690984503098046ULL, 33) == 16537039021198991223ULL); ASSERT (rotr64 (16045690984503098046ULL, 34) == 17491891547454271419ULL); ASSERT (rotr64 (16045690984503098046ULL, 35) == 17969317810581911517ULL); ASSERT (rotr64 (16045690984503098046ULL, 36) == 18208030942145731566ULL); ASSERT (rotr64 (16045690984503098046ULL, 37) == 9104015471072865783ULL); ASSERT (rotr64 (16045690984503098046ULL, 38) == 13775379772391208699ULL); ASSERT (rotr64 (16045690984503098046ULL, 39) == 16111061923050380157ULL); ASSERT (rotr64 (16045690984503098046ULL, 40) == 17278902998379965886ULL); ASSERT (rotr64 (16045690984503098046ULL, 41) == 8639451499189982943ULL); ASSERT (rotr64 (16045690984503098046ULL, 42) == 13543097786449767279ULL); ASSERT (rotr64 (16045690984503098046ULL, 43) == 15994920930079659447ULL); ASSERT (rotr64 (16045690984503098046ULL, 44) == 17220832501894605531ULL); ASSERT (rotr64 (16045690984503098046ULL, 45) == 17833788287802078573ULL); ASSERT (rotr64 (16045690984503098046ULL, 46) == 18140266180755815094ULL); ASSERT (rotr64 (16045690984503098046ULL, 47) == 9070133090377907547ULL); ASSERT (rotr64 (16045690984503098046ULL, 48) == 13758438582043729581ULL); ASSERT (rotr64 (16045690984503098046ULL, 49) == 16102591327876640598ULL); ASSERT (rotr64 (16045690984503098046ULL, 50) == 8051295663938320299ULL); ASSERT (rotr64 (16045690984503098046ULL, 51) == 13249019868823935957ULL); ASSERT (rotr64 (16045690984503098046ULL, 52) == 15847881971266743786ULL); ASSERT (rotr64 (16045690984503098046ULL, 53) == 7923940985633371893ULL); ASSERT (rotr64 (16045690984503098046ULL, 54) == 13185342529671461754ULL); ASSERT (rotr64 (16045690984503098046ULL, 55) == 6592671264835730877ULL); ASSERT (rotr64 (16045690984503098046ULL, 56) == 12519707669272641246ULL); ASSERT (rotr64 (16045690984503098046ULL, 57) == 6259853834636320623ULL); ASSERT (rotr64 (16045690984503098046ULL, 58) == 12353298954172936119ULL); ASSERT (rotr64 (16045690984503098046ULL, 59) == 15400021513941243867ULL); ASSERT (rotr64 (16045690984503098046ULL, 60) == 16923382793825397741ULL); ASSERT (rotr64 (16045690984503098046ULL, 61) == 17685063433767474678ULL); ASSERT (rotr64 (16045690984503098046ULL, 62) == 8842531716883737339ULL); ASSERT (rotr64 (16045690984503098046ULL, 63) == 13644637895296644477ULL); #endif /* UINT64_MAX */ return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-bitset.c���������������������������������������������������������0000664�0000000�0000000�00000025606�14110572173�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of bitset. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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 "bitset.h" #include "macros.h" #define RANDOM(n) (rand () % (n)) static void assert_bitset_equal (bitset bs1, bitset bs2) { debug_bitset (bs1); debug_bitset (bs2); ASSERT (bitset_size (bs1) == bitset_size (bs2)); for (bitset_bindex i = 0; i < bitset_size (bs1); ++i) ASSERT (bitset_test (bs1, i) == bitset_test (bs2, i)); } static void bitset_random (bitset bs) { for (bitset_bindex i = 0; i < bitset_size (bs); ++i) bitset_set (bs, RANDOM (2)); } /* Check various operations on random bitsets with two different implementations. */ static void compare (enum bitset_attr a, enum bitset_attr b) { /* bitset_list (used in many operations) uses a cache whose size is BITSET_LIST_SIZE */ const int nbits = RANDOM (2 * BITSET_LIST_SIZE); /* Four read only random initial values of type A. */ const bitset asrc0 = bitset_create (nbits, a); bitset_random (asrc0); const bitset asrc1 = bitset_create (nbits, a); bitset_random (asrc1); const bitset asrc2 = bitset_create (nbits, a); bitset_random (asrc2); const bitset asrc3 = bitset_create (nbits, a); bitset_random (asrc3); /* Four read only values of type B, equal to the values of type A. */ const bitset bsrc0 = bitset_create (nbits, b); bitset_copy (bsrc0, asrc0); const bitset bsrc1 = bitset_create (nbits, b); bitset_copy (bsrc1, asrc1); const bitset bsrc2 = bitset_create (nbits, b); bitset_copy (bsrc2, asrc2); const bitset bsrc3 = bitset_create (nbits, b); bitset_copy (bsrc3, asrc3); /* Destinations for each operation. */ bitset adst = bitset_create (nbits, a); bitset bdst = bitset_create (nbits, b); /* count */ ASSERT (bitset_count (asrc0) == bitset_count (bsrc0)); /* not */ bitset_not (adst, asrc0); bitset_not (bdst, bsrc0); assert_bitset_equal (adst, bdst); /* and */ bitset_and (adst, asrc0, asrc1); bitset_and (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); ASSERT (bitset_and_cmp (adst, asrc0, asrc1) == bitset_and_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); /* andn */ bitset_andn (adst, asrc0, asrc1); bitset_andn (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); ASSERT (bitset_andn_cmp (adst, asrc0, asrc1) == bitset_andn_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); /* or */ bitset_or (adst, asrc0, asrc1); bitset_or (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); ASSERT (bitset_or_cmp (adst, asrc0, asrc1) == bitset_or_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); /* xor */ bitset_xor (adst, asrc0, asrc1); bitset_xor (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); ASSERT (bitset_xor_cmp (adst, asrc0, asrc1) == bitset_xor_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); /* and_or */ bitset_and_or (adst, asrc0, asrc1, asrc2); bitset_and_or (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); ASSERT (bitset_and_or_cmp (adst, asrc0, asrc1, asrc2) == bitset_and_or_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); /* andn_or */ bitset_andn_or (adst, asrc0, asrc1, asrc2); bitset_andn_or (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); ASSERT (bitset_andn_or_cmp (adst, asrc0, asrc1, asrc2) == bitset_andn_or_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); /* or_and */ bitset_or_and (adst, asrc0, asrc1, asrc2); bitset_or_and (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); ASSERT (bitset_or_and_cmp (adst, asrc0, asrc1, asrc2) == bitset_or_and_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); /* ones */ bitset_ones (adst); bitset_ones (bdst); assert_bitset_equal (adst, bdst); /* zero */ bitset_zero (adst); bitset_zero (bdst); assert_bitset_equal (adst, bdst); /* first and last and FOR_EACH. */ /* Work on bdst to exercise all the bitset types (adst is BITSET_VARIABLE). */ bitset_copy (bdst, bsrc0); debug_bitset (bdst); debug_bitset (bsrc0); bitset_copy (adst, bdst); /* count. */ ASSERT (bitset_count (adst) == bitset_count (bdst)); /* first and last */ { bitset_bindex first = bitset_first (adst); ASSERT (first == bitset_first (bdst)); bitset_bindex last = bitset_last (adst); ASSERT (last == bitset_last (bdst)); ASSERT (first <= last); } /* FOR_EACH. */ { bitset_iterator iter; bitset_bindex j; bitset_bindex first = bitset_first (bdst); bitset_bindex last = bitset_last (bdst); bool seen_first = false; bool seen_last = false; BITSET_FOR_EACH (iter, bdst, j, 0) { ASSERT (first <= j && j <= last); ASSERT (bitset_test (bdst, j)); if (j == first) seen_first = true; if (j == last) seen_last = true; } if (first == BITSET_BINDEX_MAX) { ASSERT (!seen_first); ASSERT (!seen_last); } else { ASSERT (seen_first); ASSERT (seen_last); } } /* FOR_EACH_REVERSE. */ { bitset_iterator iter; bitset_bindex j; bitset_bindex first = bitset_first (bdst); bitset_bindex last = bitset_last (bdst); bool seen_first = false; bool seen_last = false; BITSET_FOR_EACH_REVERSE (iter, bdst, j, 0) { ASSERT (first <= j && j <= last); ASSERT (bitset_test (bdst, j)); if (j == first) seen_first = true; if (j == last) seen_last = true; } if (first == BITSET_BINDEX_MAX) { ASSERT (!seen_first); ASSERT (!seen_last); } else { ASSERT (seen_first); ASSERT (seen_last); } } /* resize. ARRAY bitsets cannot be resized. */ if (bitset_type_get (bsrc0) != BITSET_ARRAY) { const int nbits_new = RANDOM (256); bitset_copy (adst, asrc0); bitset_copy (bdst, bsrc0); ASSERT (nbits_new == bitset_resize (adst, nbits_new)); ASSERT (nbits_new == bitset_resize (bdst, nbits_new)); assert_bitset_equal (adst, bdst); } bitset_free (bdst); bitset_free (bsrc3); bitset_free (bsrc2); bitset_free (bsrc1); bitset_free (bsrc0); bitset_free (adst); bitset_free (asrc3); bitset_free (asrc2); bitset_free (asrc1); bitset_free (asrc0); } /* Check empty bitsets. */ static void check_zero (bitset bs) { fprintf (stderr, "check_zero\n"); bitset_zero (bs); /* count. */ ASSERT (bitset_count (bs) == 0); /* first and last */ ASSERT (bitset_first (bs) == BITSET_BINDEX_MAX); ASSERT (bitset_last (bs) == BITSET_BINDEX_MAX); /* FOR_EACH. */ { bitset_iterator iter; bitset_bindex i; BITSET_FOR_EACH (iter, bs, i, 0) ASSERT (0); BITSET_FOR_EACH_REVERSE (iter, bs, i, 0) ASSERT (0); } } /* Exercise on a single-bit values: it's easy to get the handling of the most significant bit wrong. */ static void check_one_bit (bitset bs, int bitno) { fprintf (stderr, "check_one_bit(%d)\n", bitno); bitset_zero (bs); bitset_set (bs, bitno); /* count. */ ASSERT (bitset_count (bs) == 1); /* test. */ ASSERT (bitset_test (bs, bitno)); /* first and last */ ASSERT (bitset_first (bs) == bitno); ASSERT (bitset_last (bs) == bitno); /* FOR_EACH. */ { bitset_iterator iter; bitset_bindex i; BITSET_FOR_EACH (iter, bs, i, 0) ASSERT (i == bitno); BITSET_FOR_EACH_REVERSE (iter, bs, i, 0) ASSERT (i == bitno); } } /* Check full bitsets. */ static void check_ones (bitset bs) { fprintf (stderr, "check_ones\n"); const bitset_bindex size = bitset_size (bs); bitset_ones (bs); debug_bitset (bs); /* count. */ ASSERT (bitset_count (bs) == size); /* first and last */ ASSERT (bitset_first (bs) == 0); ASSERT (bitset_last (bs) == size - 1); /* FOR_EACH. */ { bitset_iterator iter; bitset_bindex i; bitset_bindex count = 0; BITSET_FOR_EACH (iter, bs, i, 0) ASSERT (i == count++); ASSERT (count == size); BITSET_FOR_EACH_REVERSE (iter, bs, i, 0) ASSERT (i == --count); ASSERT (count == 0); } } /* Check various operations against expected values for a bitset having attributes ATTR. */ static void check_attributes (enum bitset_attr attr, int nbits) { bitset bs0 = bitset_create (nbits, attr); ASSERT (bitset_size (bs0) == nbits); ASSERT (bitset_count (bs0) == 0); ASSERT (bitset_empty_p (bs0)); bitset bs1 = bitset_create (nbits, attr); bitset_set (bs1, 1); bitset_set (bs1, 3); bitset_set (bs1, 5); ASSERT (bitset_count (bs1) == 3); ASSERT (!bitset_empty_p (bs1)); bitset bs2 = bitset_create (nbits, attr); bitset_set (bs2, 0); bitset_set (bs2, 2); bitset_set (bs2, 4); /* disjoint_p */ ASSERT (bitset_disjoint_p (bs1, bs2)); /* and */ bitset bs = bitset_create (nbits, attr); bitset_and (bs, bs1, bs2); ASSERT (bitset_count (bs) == 0); /* or */ bitset_or (bs, bs1, bs2); ASSERT (bitset_count (bs) == 6); check_zero (bs); check_ones (bs); /* Exercise on all the single-bit values: it's easy to get the handling of the most significant bit wrong. */ for (int bitno = 0; bitno < nbits; ++bitno) check_one_bit (bs, bitno); bitset_free (bs); bitset_free (bs2); bitset_free (bs1); bitset_free (bs0); } int main (void) { bitset_stats_enable (); for (int i = 0; i < 4; ++i) { /* table bitsets have elements that store 256 bits. bitset_list (used in many operations) uses a cache whose size is BITSET_LIST_SIZE. */ int nbits = i == 0 ? 1 : i == 1 ? 32 : i == 2 ? 257 : (BITSET_LIST_SIZE + 1); check_attributes (BITSET_FIXED, nbits); check_attributes (BITSET_VARIABLE, nbits); check_attributes (BITSET_DENSE, nbits); check_attributes (BITSET_SPARSE, nbits); check_attributes (BITSET_FRUGAL, nbits); check_attributes (BITSET_GREEDY, nbits); } compare (BITSET_VARIABLE, BITSET_FIXED); compare (BITSET_VARIABLE, BITSET_VARIABLE); compare (BITSET_VARIABLE, BITSET_DENSE); compare (BITSET_VARIABLE, BITSET_SPARSE); compare (BITSET_VARIABLE, BITSET_FRUGAL); compare (BITSET_VARIABLE, BITSET_GREEDY); bitset_stats_dump (stderr); return 0; } ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btoc32-1.sh������������������������������������������������������0000775�0000000�0000000�00000000557�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-btoc32${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btoc32-2.sh������������������������������������������������������0000775�0000000�0000000�00000000602�14110572173�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-btoc32${EXEEXT} 2 ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btoc32.c���������������������������������������������������������0000664�0000000�0000000�00000003351�14110572173�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of unibyte character to 32-bit wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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); if (argc > 1) switch (argv[1][0]) { case '1': /* 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 '2': /* 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; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btowc.c����������������������������������������������������������0000664�0000000�0000000�00000003311�14110572173�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of unibyte character to wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (btowc, wint_t, (int)); #include <locale.h> #include <stdio.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 (btowc (EOF) == WEOF); if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0xA0; c < 0x100; c++) ASSERT (btowc (c) != WEOF); return 0; case '2': /* Locale encoding is UTF-8. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0x80; c < 0x100; c++) ASSERT (btowc (c) == WEOF); return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btowc1.sh��������������������������������������������������������0000775�0000000�0000000�00000000556�14110572173�0020162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-btowc${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-btowc2.sh��������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-btowc${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-byteswap.c�������������������������������������������������������0000664�0000000�0000000�00000001726�14110572173�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <byteswap.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <byteswap.h> #include "macros.h" int main () { ASSERT (bswap_16 (0xABCD) == 0xCDAB); ASSERT (bswap_32 (0xDEADBEEF) == 0xEFBEADDE); return 0; } ������������������������������������������gnulib-20210822~d383792/tests/test-c-ctype.c��������������������������������������������������������0000664�0000000�0000000�00000014644�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character handling in C locale. Copyright (C) 2005, 2007-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #include "c-ctype.h" #include <ctype.h> #include <limits.h> #include <locale.h> #include "macros.h" static void test_agree_with_C_locale (void) { int c; for (c = 0; c <= UCHAR_MAX; c++) { ASSERT (c_isascii (c) == (isascii (c) != 0)); if (c_isascii (c)) { ASSERT (c_isalnum (c) == (isalnum (c) != 0)); ASSERT (c_isalpha (c) == (isalpha (c) != 0)); ASSERT (c_isblank (c) == (isblank (c) != 0)); ASSERT (c_iscntrl (c) == (iscntrl (c) != 0)); ASSERT (c_isdigit (c) == (isdigit (c) != 0)); ASSERT (c_islower (c) == (islower (c) != 0)); ASSERT (c_isgraph (c) == (isgraph (c) != 0)); ASSERT (c_isprint (c) == (isprint (c) != 0)); ASSERT (c_ispunct (c) == (ispunct (c) != 0)); ASSERT (c_isspace (c) == (isspace (c) != 0)); ASSERT (c_isupper (c) == (isupper (c) != 0)); ASSERT (c_isxdigit (c) == (isxdigit (c) != 0)); ASSERT (c_tolower (c) == tolower (c)); ASSERT (c_toupper (c) == toupper (c)); } } } static void test_all (void) { int c; int n_isascii = 0; for (c = CHAR_MIN; c <= UCHAR_MAX; c++) { if (! (0 <= c && c <= CHAR_MAX)) { ASSERT (! c_isascii (c)); ASSERT (! c_isalnum (c)); ASSERT (! c_isalpha (c)); ASSERT (! c_isblank (c)); ASSERT (! c_iscntrl (c)); ASSERT (! c_isdigit (c)); ASSERT (! c_islower (c)); ASSERT (! c_isgraph (c)); ASSERT (! c_isprint (c)); ASSERT (! c_ispunct (c)); ASSERT (! c_isspace (c)); ASSERT (! c_isupper (c)); ASSERT (! c_isxdigit (c)); ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == c); } n_isascii += c_isascii (c); #ifdef C_CTYPE_ASCII ASSERT (c_isascii (c) == (0 <= c && c <= 0x7f)); #endif ASSERT (c_isascii (c) == (c_isprint (c) || c_iscntrl (c))); ASSERT (c_isalnum (c) == (c_isalpha (c) || c_isdigit (c))); ASSERT (c_isalpha (c) == (c_islower (c) || c_isupper (c))); switch (c) { case '\t': case ' ': ASSERT (c_isblank (c) == 1); break; default: ASSERT (c_isblank (c) == 0); break; } #ifdef C_CTYPE_ASCII ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); #endif switch (c) { case '\a': case '\b': case '\f': case '\n': case '\r': case '\t': case '\v': ASSERT (c_iscntrl (c)); break; } ASSERT (! (c_iscntrl (c) && c_isprint (c))); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (c_isdigit (c) == 1); break; default: ASSERT (c_isdigit (c) == 0); break; } 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 (c_islower (c) == 1); ASSERT (c_toupper (c) == c - 'a' + 'A'); break; default: ASSERT (c_islower (c) == 0); ASSERT (c_toupper (c) == c); break; } #ifdef C_CTYPE_ASCII ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); #endif ASSERT (c_isgraph (c) == (c_isalnum (c) || c_ispunct (c))); ASSERT (c_isprint (c) == (c_isgraph (c) || c == ' ')); switch (c) { 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 '{': case '|': case '}': case '~': ASSERT (c_ispunct (c) == 1); break; default: ASSERT (c_ispunct (c) == 0); break; } switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': ASSERT (c_isspace (c) == 1); break; default: ASSERT (c_isspace (c) == 0); break; } 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 (c_isupper (c) == 1); ASSERT (c_tolower (c) == c - 'A' + 'a'); break; default: ASSERT (c_isupper (c) == 0); ASSERT (c_tolower (c) == c); break; } 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 (c_isxdigit (c) == 1); break; default: ASSERT (c_isxdigit (c) == 0); break; } } ASSERT (n_isascii == 128); } int main () { test_agree_with_C_locale (); test_all (); setlocale (LC_ALL, "de_DE"); test_all (); setlocale (LC_ALL, "ja_JP.EUC-JP"); test_all (); return 0; } ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-dtoastr.c������������������������������������������������������0000664�0000000�0000000�00000003133�14110572173�0020462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_dtoastr() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 "ftoastr.h" #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_dtoastr(). It should always use '.' as the decimal point. */ { char buf[DBL_BUFSIZE_BOUND]; c_dtoastr (buf, sizeof buf, 0, 0, 0.1); ASSERT (!strcmp (buf, "0.1")); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-dtoastr.sh�����������������������������������������������������0000664�0000000�0000000�00000000562�14110572173�0020655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-dtoastr${EXEEXT} 1 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-ldtoastr.c�����������������������������������������������������0000664�0000000�0000000�00000003137�14110572173�0020642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_ldtoastr() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 "ftoastr.h" #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_ldtoastr(). It should always use '.' as the decimal point. */ { char buf[DBL_BUFSIZE_BOUND]; c_ldtoastr (buf, sizeof buf, 0, 0, 0.1L); ASSERT (!strcmp (buf, "0.1")); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-ldtoastr.sh����������������������������������������������������0000664�0000000�0000000�00000000563�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-ldtoastr${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-snprintf.c�����������������������������������������������������0000664�0000000�0000000�00000003114�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_snprintf() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "c-snprintf.h" #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_snprintf(). It should always use '.' as the decimal point. */ { char s[16]; c_snprintf (s, sizeof s, "%#.0f", 1.0); ASSERT (!strcmp (s, "1.")); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-snprintf.sh����������������������������������������������������0000775�0000000�0000000�00000000563�14110572173�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-snprintf${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-stack.c��������������������������������������������������������0000664�0000000�0000000�00000003652�14110572173�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c-stack module. Copyright (C) 2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc. This 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 "c-stack.h" #include "exitfail.h" #include <stdio.h> #if HAVE_SETRLIMIT /* At least FreeBSD 5.0 needs extra headers before <sys/resource.h> will compile. */ # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #include "macros.h" static volatile int * recurse_1 (volatile int n, volatile int *p) { if (n >= 0) *recurse_1 (n + 1, p) += n; return p; } static int recurse (volatile int n) { int sum = 0; return *recurse_1 (n, &sum); } int main (int argc, char **argv) { #if HAVE_SETRLIMIT && defined RLIMIT_STACK /* Before starting the endless recursion, try to be friendly to the user's machine. On some Linux 2.2.x systems, there is no stack limit for user processes at all. We don't want to kill such systems. */ struct rlimit rl; rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ setrlimit (RLIMIT_STACK, &rl); #endif if (c_stack_action (NULL) == 0) { if (1 < argc) { exit_failure = 77; ++*argv[argc]; /* Intentionally dereference NULL. */ } return recurse (0); } fputs ("skipping test: ", stderr); perror ("c_stack_action"); return 77; } ��������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-stack.sh�������������������������������������������������������0000775�0000000�0000000�00000000534�14110572173�0020304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="t-c-stack.tmp" ${CHECKER} ./test-c-stack${EXEEXT} 2> t-c-stack.tmp case $? in 77) cat t-c-stack.tmp >&2; (exit 77); exit 77 ;; 1) ;; *) (exit 1); exit 1 ;; esac if grep 'stack overflow' t-c-stack.tmp >/dev/null ; then : else (exit 1); exit 1 fi rm -fr $tmpfiles exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-stack2.sh������������������������������������������������������0000775�0000000�0000000�00000002227�14110572173�0020367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="t-c-stack2.tmp" # Sanitize exit status within a subshell, since some shells fail to # redirect stderr on their message about death due to signal. (${CHECKER} ./test-c-stack${EXEEXT} 1; exit $?) 2> t-c-stack2.tmp case $? in 77) if grep 'stack overflow' t-c-stack2.tmp >/dev/null ; then if test -z "$LIBSIGSEGV"; then echo 'cannot tell stack overflow from crash; consider installing libsigsegv' >&2 exit 77 else echo 'cannot tell stack overflow from crash, in spite of libsigsegv' >&2 exit 1 fi else cat t-c-stack2.tmp >&2 exit 77 fi ;; 1) # Dereferencing NULL exits the program with status 1, # so this test doesn't check the c-stack testing harness like it should. # https://lists.gnu.org/r/grep-devel/2020-09/msg00034.html cat t-c-stack2.tmp >&2 echo 'skipping test (perhaps gcc -fsanitize=undefined is in use?)' exit 77;; 0) (exit 1); exit 1 ;; esac if grep 'program error' t-c-stack2.tmp >/dev/null ; then : else (exit 1); exit 1 fi rm -fr $tmpfiles exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-strcase.sh�����������������������������������������������������0000775�0000000�0000000�00000001245�14110572173�0020643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the C locale. ${CHECKER} ./test-c-strcasecmp${EXEEXT} || exit 1 ${CHECKER} ./test-c-strncasecmp${EXEEXT} || 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-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_FR ${CHECKER} ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi # Test in a Turkish UTF-8 locale. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 != none; then LC_ALL=$LOCALE_TR_UTF8 ${CHECKER} ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_TR_UTF8 ${CHECKER} ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-strcasecmp.c���������������������������������������������������0000664�0000000�0000000�00000004223�14110572173�0021147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "c-strcase.h" #include "c-ctype.h" #include <locale.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strcasecmp ("paragraph", "Paragraph") == 0); ASSERT (c_strcasecmp ("paragrapH", "parAgRaph") == 0); ASSERT (c_strcasecmp ("paragraph", "paraLyzed") < 0); ASSERT (c_strcasecmp ("paraLyzed", "paragraph") > 0); ASSERT (c_strcasecmp ("para", "paragraph") < 0); ASSERT (c_strcasecmp ("paragraph", "para") > 0); /* The following tests shows how c_strcasecmp() is different from strcasecmp(). */ ASSERT (c_strcasecmp ("\311mile", "\351mile") < 0); ASSERT (c_strcasecmp ("\351mile", "\311mile") > 0); /* The following tests shows how c_strcasecmp() is different from mbscasecmp(). */ ASSERT (c_strcasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") > 0); /* özgür */ ASSERT (c_strcasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strcasecmp ("turkish", "TURK\304\260SH") < 0); ASSERT (c_strcasecmp ("TURK\304\260SH", "turkish") > 0); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-strcasestr.c���������������������������������������������������0000664�0000000�0000000�00000017227�14110572173�0021210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "c-strcasestr.h" #include <stdlib.h> #include <string.h> #include "macros.h" int main () { { const char input[] = "foo"; const char *result = c_strcasestr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = c_strcasestr (input, "O"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBE"); ASSERT (result == NULL); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBCD"); ASSERT (result == input + 11); } /* Check that a long periodic needle does not cause false positives. */ { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = c_strcasestr (input, need); ASSERT (result == NULL); } { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD_DA_B5_C2_A6_20" "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = c_strcasestr (input, need); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaAAAAaaaaaaa" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strcasestr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strcasestr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'a', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = c_strcasestr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } { /* Ensure that with a barely periodic "short" needle, c_strcasestr's search does not mistakenly skip just past the match point. This use of c_strcasestr would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_GNU_ld\n"; const char* p = c_strcasestr (haystack, needle); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.D."; const char *needle = ".d."; const char* p = c_strcasestr (haystack, needle); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, c_strcasestr finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = c_strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'X', m); needle[m] = '\0'; p = c_strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-strncasecmp.c��������������������������������������������������0000664�0000000�0000000�00000006011�14110572173�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "c-strcase.h" #include "c-ctype.h" #include <locale.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strncasecmp ("paragraph", "Paragraph", 1000000) == 0); ASSERT (c_strncasecmp ("paragraph", "Paragraph", 9) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 9) == 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 10) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 9) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 5) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 4) == 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 10) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 9) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 5) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("para", "paragraph", 10) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 9) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 5) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("paragraph", "para", 10) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 9) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 5) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 4) == 0); /* The following tests shows how c_strncasecmp() is different from strncasecmp(). */ ASSERT (c_strncasecmp ("\311mily", "\351mile", 4) < 0); ASSERT (c_strncasecmp ("\351mile", "\311mily", 4) > 0); /* The following tests shows how c_strncasecmp() is different from mbsncasecmp(). */ ASSERT (c_strncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) > 0); /* özgür */ ASSERT (c_strncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strncasecmp ("turkish", "TURK\304\260SH", 7) < 0); ASSERT (c_strncasecmp ("TURK\304\260SH", "turkish", 7) > 0); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-strstr.c�������������������������������������������������������0000664�0000000�0000000�00000014777�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "c-strstr.h" #include <stdlib.h> #include <string.h> #include "macros.h" int main () { { const char input[] = "foo"; const char *result = c_strstr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = c_strstr (input, "o"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strstr (input, "ABCDABD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strstr (input, "ABCDABE"); ASSERT (result == NULL); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strstr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strstr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = c_strstr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } { /* Ensure that with a barely periodic "short" needle, c_strstr's search does not mistakenly skip just past the match point. This use of c_strstr would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_gnu_ld\n"; const char* p = c_strstr (haystack, needle); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.d."; const char *needle = ".d."; const char* p = c_strstr (haystack, needle); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, c_strstr finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = c_strstr (haystack, needle); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'x', m); needle[m] = '\0'; p = c_strstr (haystack, needle); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } �gnulib-20210822~d383792/tests/test-c-vasprintf.c����������������������������������������������������0000664�0000000�0000000�00000004032�14110572173�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_asprintf() and c_vasprintf() functions. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "c-vasprintf.h" #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" static int my_c_asprintf (char **result, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = c_vasprintf (result, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_asprintf() and c_vasprintf(). They should always use '.' as the decimal point. */ { int retval; char *s; retval = c_asprintf (&s, "%#.0f", 1.0); ASSERT (s != NULL); ASSERT (!strcmp (s, "1.")); ASSERT (retval == 2); free (s); retval = my_c_asprintf (&s, "%#.0f", 1.0); ASSERT (s != NULL); ASSERT (!strcmp (s, "1.")); ASSERT (retval == 2); free (s); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-vasprintf.sh���������������������������������������������������0000775�0000000�0000000�00000000564�14110572173�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-vasprintf${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-vsnprintf.c����������������������������������������������������0000664�0000000�0000000�00000003515�14110572173�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_vsnprintf() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "c-vsnprintf.h" #include <locale.h> #include <stdarg.h> #include <stdio.h> #include <string.h> #include "macros.h" #include <string.h> static int my_c_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = c_vsnprintf (buf, size, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_vsnprintf(). It should always use '.' as the decimal point. */ { char s[16]; my_c_snprintf (s, sizeof s, "%#.0f", 1.0); ASSERT (!strcmp (s, "1.")); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-vsnprintf.sh���������������������������������������������������0000775�0000000�0000000�00000000564�14110572173�0021233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-vsnprintf${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-xvasprintf.c���������������������������������������������������0000664�0000000�0000000�00000003666�14110572173�0021221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c_xasprintf() and c_xvasprintf() functions. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "c-xvasprintf.h" #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" static char * my_c_xasprintf (const char *format, ...) { va_list args; char *s; va_start (args, format); s = c_xvasprintf (format, args); va_end (args); return s; } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test behaviour of snprintf() as a "control group". (We should be running in a locale where ',' is the decimal point.) */ { char s[16]; snprintf (s, sizeof s, "%#.0f", 1.0); if (!strcmp (s, "1.")) { /* Skip the test, since we're not in a useful locale for testing. */ return 77; } ASSERT (!strcmp (s, "1,")); } /* Test behaviour of c_xasprintf() and c_xvasprintf(). They should always use '.' as the decimal point. */ { char *s; s = c_xasprintf ("%#.0f", 1.0); ASSERT (s != NULL); ASSERT (!strcmp (s, "1.")); free (s); s = my_c_xasprintf ("%#.0f", 1.0); ASSERT (s != NULL); ASSERT (!strcmp (s, "1.")); free (s); } return 0; } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c-xvasprintf.sh��������������������������������������������������0000775�0000000�0000000�00000000565�14110572173�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c-xvasprintf${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isalnum.c�����������������������������������������������������0000664�0000000�0000000�00000021635�14110572173�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isalnum() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ { /* 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; } ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isalnum.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isalpha.c�����������������������������������������������������0000664�0000000�0000000�00000021516�14110572173�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isalpha() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 __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 _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. */ { /* 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isalpha.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isblank.c�����������������������������������������������������0000664�0000000�0000000�00000013710�14110572173�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isblank() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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__ /* 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; } ��������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isblank.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32iscntrl.c�����������������������������������������������������0000664�0000000�0000000�00000015332�14110572173�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32iscntrl() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 __FreeBSD__ || defined __DragonFly__ || 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 __FreeBSD__ || defined __DragonFly__ || 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 __FreeBSD__ || defined __DragonFly__ || 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. */ { /* 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 __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 __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; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32iscntrl.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isdigit.c�����������������������������������������������������0000664�0000000�0000000�00000017051�14110572173�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isdigit() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ { /* 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; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isdigit.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isgraph.c�����������������������������������������������������0000664�0000000�0000000�00000020004�14110572173�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isgraph() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 _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 _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 _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 _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 _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. */ { /* 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__ /* 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__ /* 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__ /* U+E0001 LANGUAGE TAG */ is = for_character ("\323\066\225\071", 4); ASSERT (is == 0); #endif } return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isgraph.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32islower.c�����������������������������������������������������0000664�0000000�0000000�00000031506�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32islower() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 __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 __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. */ { /* 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; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32islower.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isprint.c�����������������������������������������������������0000664�0000000�0000000�00000020135�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isprint() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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) { #if !(defined _WIN32 && !defined __CYGWIN__) case '\t': case '\v': case '\f': #endif 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 _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 _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 _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. */ { /* 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__ /* 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__ /* 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__ /* U+E0001 LANGUAGE TAG */ is = for_character ("\323\066\225\071", 4); ASSERT (is == 0); #endif } return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isprint.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32ispunct.c�����������������������������������������������������0000664�0000000�0000000�00000026700�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32ispunct() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ 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 _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 __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__ /* U+E003A TAG COLON */ is = for_character ("\323\066\233\066", 4); ASSERT (is == 0); #endif } return 0; } return 1; } ����������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32ispunct.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isspace.c�����������������������������������������������������0000664�0000000�0000000�00000013707�14110572173�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isspace() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ { /* 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; } ���������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isspace.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isupper.c�����������������������������������������������������0000664�0000000�0000000�00000027734�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isupper() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ { /* 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; } ������������������������������������gnulib-20210822~d383792/tests/test-c32isupper.sh����������������������������������������������������0000775�0000000�0000000�00000001704�14110572173�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isxdigit.c����������������������������������������������������0000664�0000000�0000000�00000021355�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isxdigit() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ { /* 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; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32isxdigit.sh���������������������������������������������������0000775�0000000�0000000�00000001712�14110572173�0021112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 \ || exit 1 fi exit 0 ������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-1.sh������������������������������������������������0000775�0000000�0000000�00000000136�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-2.sh������������������������������������������������0000775�0000000�0000000�00000000146�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-3.sh������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-4.sh������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-5.sh������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-6.sh������������������������������������������������0000775�0000000�0000000�00000000140�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 54936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32-7.sh������������������������������������������������0000775�0000000�0000000�00000000216�14110572173�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb-w32.c���������������������������������������������������0000664�0000000�0000000�00000023041�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 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; 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; 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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb.c�������������������������������������������������������0000664�0000000�0000000�00000011447�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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': /* 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 '2': /* 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 '3': /* 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 '4': /* Locale encoding is GB18030. */ { 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; case '5': /* C locale; tested above. */ return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32rtomb.sh������������������������������������������������������0000775�0000000�0000000�00000001670�14110572173�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # 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} 1 \ || 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} 2 \ || 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} 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-c32rtomb${EXEEXT} 4 \ || exit 1 fi # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32rtomb${EXEEXT} 5 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32rtomb${EXEEXT} 5 || exit 1 exit 0 ������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32snrtombs-1.sh�������������������������������������������������0000775�0000000�0000000�00000000564�14110572173�0021277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32snrtombs${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32snrtombs-2.sh�������������������������������������������������0000775�0000000�0000000�00000000607�14110572173�0021276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32snrtombs${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32snrtombs-3.sh�������������������������������������������������0000775�0000000�0000000�00000000577�14110572173�0021305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32snrtombs${EXEEXT} 3 ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32snrtombs-4.sh�������������������������������������������������0000775�0000000�0000000�00000000621�14110572173�0021274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32snrtombs${EXEEXT} 4 ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32snrtombs.c����������������������������������������������������0000664�0000000�0000000�00000015437�14110572173�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of 32-bit wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (c32snrtombs, size_t, (char *, const char32_t **, size_t, size_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; if (argc > 1) { char32_t input[10]; size_t n; const char32_t *src; #define BUFSIZE 20 char buf[BUFSIZE]; size_t ret; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = '_'; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char original[] = "B\374\337er"; /* "Büßer" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = c32snrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 5); ASSERT (src == input); src = input; ret = c32snrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n <= 5 ? n : 5)); ASSERT (src == (n <= 5 ? input + n : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '2': /* Locale encoding is UTF-8. */ { const char original[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { src = input; ret = c32snrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 10); ASSERT (src == input); src = input; ret = c32snrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 9 ? 5 : n <= 10 ? n : 10)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 9 ? input + 3 : n <= 10 ? input + (n - 5) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '3': /* Locale encoding is EUC-JP. */ { const char original[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = c32snrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 8); ASSERT (src == input); src = input; ret = c32snrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 7 ? 5 : n <= 8 ? n : 8)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 7 ? input + 3 : n <= 8 ? input + (n - 3) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '4': /* Locale encoding is GB18030. */ { const char original[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { src = input; ret = c32snrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 12); ASSERT (src == input); src = input; ret = c32snrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 7 ? 3 : n < 11 ? 7 : n <= 12 ? n : 12)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 7 ? input + 2 : n < 11 ? input + 3 : n <= 12 ? input + (n - 7) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; default: return 1; } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32srtombs-1.sh��������������������������������������������������0000775�0000000�0000000�00000000563�14110572173�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32srtombs${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32srtombs-2.sh��������������������������������������������������0000775�0000000�0000000�00000000606�14110572173�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32srtombs${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32srtombs-3.sh��������������������������������������������������0000775�0000000�0000000�00000000576�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32srtombs${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32srtombs-4.sh��������������������������������������������������0000775�0000000�0000000�00000000620�14110572173�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32srtombs${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32srtombs.c�����������������������������������������������������0000664�0000000�0000000�00000015366�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of 32-bit wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (c32srtombs, size_t, (char *, const char32_t **, size_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; if (argc > 1) { char32_t input[10]; size_t n; const char32_t *src; #define BUFSIZE 20 char buf[BUFSIZE]; size_t ret; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = '_'; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char original[] = "B\374\337er"; /* "Büßer" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = c32srtombs (NULL, &src, n, NULL); ASSERT (ret == 5); ASSERT (src == input); src = input; ret = c32srtombs (buf, &src, n, NULL); ASSERT (ret == (n <= 5 ? n : 5)); ASSERT (src == (n <= 5 ? input + n : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '2': /* Locale encoding is UTF-8. */ { const char original[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { src = input; ret = c32srtombs (NULL, &src, n, NULL); ASSERT (ret == 10); ASSERT (src == input); src = input; ret = c32srtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 9 ? 5 : n <= 10 ? n : 10)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 9 ? input + 3 : n <= 10 ? input + (n - 5) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '3': /* Locale encoding is EUC-JP. */ { const char original[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = c32srtombs (NULL, &src, n, NULL); ASSERT (ret == 8); ASSERT (src == input); src = input; ret = c32srtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 7 ? 5 : n <= 8 ? n : 8)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 7 ? input + 3 : n <= 8 ? input + (n - 3) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '4': /* Locale encoding is GB18030. */ { const char original[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { src = input; ret = c32srtombs (NULL, &src, n, NULL); ASSERT (ret == 12); ASSERT (src == input); src = input; ret = c32srtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 7 ? 3 : n < 11 ? 7 : n <= 12 ? n : 12)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 7 ? input + 2 : n < 11 ? input + 3 : n <= 12 ? input + (n - 7) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; default: return 1; } return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32stombs-1.sh���������������������������������������������������0000775�0000000�0000000�00000000562�14110572173�0020735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32stombs${EXEEXT} 1 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32stombs-2.sh���������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32stombs${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32stombs-3.sh���������������������������������������������������0000775�0000000�0000000�00000000575�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32stombs${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32stombs-4.sh���������������������������������������������������0000775�0000000�0000000�00000000617�14110572173�0020741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-c32stombs${EXEEXT} 4 �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-c32stombs.c������������������������������������������������������0000664�0000000�0000000�00000012507�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of 32-bit wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (c32stombs, size_t, (char *, const char32_t *, size_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; if (argc > 1) { char32_t input[10]; size_t n; #define BUFSIZE 20 char buf[BUFSIZE]; size_t ret; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = '_'; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char original[] = "B\374\337er"; /* "Büßer" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { ret = c32stombs (NULL, input, n); ASSERT (ret == 5); ret = c32stombs (buf, input, n); ASSERT (ret == (n <= 5 ? n : 5)); ASSERT (memcmp (buf, original, ret) == 0); if (n > 5) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (n > 5) + 0] == '_'); ASSERT (buf[ret + (n > 5) + 1] == '_'); ASSERT (buf[ret + (n > 5) + 2] == '_'); } } break; case '2': /* Locale encoding is UTF-8. */ { const char original[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { ret = c32stombs (NULL, input, n); ASSERT (ret == 10); ret = c32stombs (buf, input, n); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 9 ? 5 : n <= 10 ? n : 10)); ASSERT (memcmp (buf, original, ret) == 0); if (n > 10) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (n > 10) + 0] == '_'); ASSERT (buf[ret + (n > 10) + 1] == '_'); ASSERT (buf[ret + (n > 10) + 2] == '_'); } } break; case '3': /* Locale encoding is EUC-JP. */ { const char original[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { ret = c32stombs (NULL, input, n); ASSERT (ret == 8); ret = c32stombs (buf, input, n); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 7 ? 5 : n <= 8 ? n : 8)); ASSERT (memcmp (buf, original, ret) == 0); if (n > 8) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (n > 8) + 0] == '_'); ASSERT (buf[ret + (n > 8) + 1] == '_'); ASSERT (buf[ret + (n > 8) + 2] == '_'); } } break; case '4': /* Locale encoding is GB18030. */ { const char original[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ ret = mbstoc32s (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 15; n++) { ret = c32stombs (NULL, input, n); ASSERT (ret == 12); ret = c32stombs (buf, input, n); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 7 ? 3 : n < 11 ? 7 : n <= 12 ? n : 12)); ASSERT (memcmp (buf, original, ret) == 0); if (n > 12) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (n > 12) + 0] == '_'); ASSERT (buf[ret + (n > 12) + 1] == '_'); ASSERT (buf[ret + (n > 12) + 2] == '_'); } } break; default: return 1; } return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-call_once.c������������������������������������������������������0000664�0000000�0000000�00000002054�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of once-only execution in multithreaded situations. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <threads.h> #include "macros.h" static once_flag a_once = ONCE_FLAG_INIT; static int a; static void a_init (void) { a = 42; } int main () { call_once (&a_once, a_init); ASSERT (a == 42); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-calloc-gnu.c�����������������������������������������������������0000664�0000000�0000000�00000003771�14110572173�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of calloc function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" /* Return N. Usual compilers are not able to infer something about the return value. */ static size_t identity (size_t n) { unsigned int x = rand (); unsigned int y = x * x * x * x; x++; y |= x * x * x * x; x++; y |= x * x * x * x; x++; y |= x * x * x * x; y = y >> 1; y &= -y; y -= 8; /* At this point Y is zero but GCC doesn't infer this. */ return n + y; } int main () { /* Check that calloc (0, 0) is not a NULL pointer. */ { void * volatile p = calloc (0, 0); ASSERT (p != NULL); free (p); } /* Check that calloc fails when requested to allocate a block of memory larger than PTRDIFF_MAX or SIZE_MAX bytes. Use 'identity' to avoid a compiler warning from GCC 7. 'volatile' is needed to defeat an incorrect optimization by clang 10, see <https://bugs.llvm.org/show_bug.cgi?id=46055>. */ { for (size_t n = 2; n != 0; n <<= 1) { void *volatile p = calloc (PTRDIFF_MAX / n + 1, identity (n)); ASSERT (p == NULL); ASSERT (errno == ENOMEM); p = calloc (SIZE_MAX / n + 1, identity (n)); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } } return 0; } �������gnulib-20210822~d383792/tests/test-canonicalize-lgpl.c����������������������������������������������0000664�0000000�0000000�00000022125�14110572173�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of file name canonicalization. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may "optimize" the null_ptr function, when its result gets passed to a function that has an argument declared as _GL_ARG_NONNULL. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (realpath, char *, (const char *, char *)); SIGNATURE_CHECK (canonicalize_file_name, char *, (const char *)); #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "same-inode.h" #include "ignore-value.h" #if GNULIB_defined_canonicalize_file_name # include "null-ptr.h" #endif #include "macros.h" #define BASE "t-can-lgpl.tmp" int main (void) { #if GNULIB_TEST_CANONICALIZE /* No need to test canonicalize-lgpl module if canonicalize is also in use. */ return 0; #endif /* Setup some hierarchy to be used by this test. Start by removing any leftovers from a previous partial run. */ { int fd; ignore_value (system ("rm -rf " BASE " ise")); ASSERT (mkdir (BASE, 0700) == 0); fd = creat (BASE "/tra", 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); } /* Check // handling (the easy cases, without symlinks). This // handling is not mandated by POSIX. However, many applications expect that canonicalize_file_name "canonicalizes" the file name, that is, that different results of canonicalize_file_name correspond to different files (except for hard links). */ { char *result0 = canonicalize_file_name ("/etc/passwd"); if (result0 != NULL) /* This file does not exist on native Windows. */ { char *result; result = canonicalize_file_name ("/etc//passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_file_name ("/etc///passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); /* On Windows, the syntax //host/share/filename denotes a file in a directory named 'share', exported from host 'host'. See also m4/double-slash-root.m4. */ #if !(defined _WIN32 || defined __CYGWIN__) result = canonicalize_file_name ("//etc/passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_file_name ("//etc//passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_file_name ("//etc///passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); #endif result = canonicalize_file_name ("///etc/passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_file_name ("///etc//passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_file_name ("///etc///passwd"); ASSERT (result != NULL && strcmp (result, result0) == 0); } } /* Check for ., .., intermediate // handling, and for error cases. */ { char *result = canonicalize_file_name (BASE "//./..//" BASE "/tra"); ASSERT (result != NULL); ASSERT (strstr (result, "/" BASE "/tra") == result + strlen (result) - strlen ("/" BASE "/tra")); free (result); errno = 0; result = canonicalize_file_name (""); ASSERT (result == NULL); ASSERT (errno == ENOENT); /* This test works only if the canonicalize_file_name implementation comes from gnulib. If it comes from libc, we have no way to prevent gcc from "optimizing" the null_ptr function in invalid ways. See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>. */ #if GNULIB_defined_canonicalize_file_name errno = 0; result = canonicalize_file_name (null_ptr ()); ASSERT (result == NULL); ASSERT (errno == EINVAL); #endif } /* Check that a non-directory with trailing slash yields NULL. */ { char *result; errno = 0; result = canonicalize_file_name (BASE "/tra/"); ASSERT (result == NULL); ASSERT (errno == ENOTDIR); } /* Check that a missing directory yields NULL. */ { char *result; errno = 0; result = canonicalize_file_name (BASE "/zzz/.."); ASSERT (result == NULL); ASSERT (errno == ENOENT); } /* From here on out, tests involve symlinks. */ if (symlink (BASE "/ket", "ise") != 0) { ASSERT (remove (BASE "/tra") == 0); ASSERT (rmdir (BASE) == 0); fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink ("bef", BASE "/plo") == 0); ASSERT (symlink ("tra", BASE "/huk") == 0); ASSERT (symlink ("lum", BASE "/bef") == 0); ASSERT (symlink ("wum", BASE "/ouk") == 0); ASSERT (symlink ("../ise", BASE "/ket") == 0); ASSERT (mkdir (BASE "/lum", 0700) == 0); ASSERT (symlink ("//.//../..", BASE "/droot") == 0); /* Check that the symbolic link to a file can be resolved. */ { char *result1 = canonicalize_file_name (BASE "/huk"); char *result2 = canonicalize_file_name (BASE "/tra"); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/tra"), "/" BASE "/tra") == 0); free (result1); free (result2); } /* Check that the symbolic link to a directory can be resolved. */ { char *result1 = canonicalize_file_name (BASE "/plo"); char *result2 = canonicalize_file_name (BASE "/bef"); char *result3 = canonicalize_file_name (BASE "/lum"); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (result3 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result2, result3) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/lum"), "/" BASE "/lum") == 0); free (result1); free (result2); free (result3); } /* Check that a symbolic link to a nonexistent file yields NULL. */ { char *result; errno = 0; result = canonicalize_file_name (BASE "/ouk"); ASSERT (result == NULL); ASSERT (errno == ENOENT); } /* Check that a non-directory symlink with trailing slash yields NULL, and likewise for other troublesome suffixes. */ { char const *const file_name[] = { BASE "/huk/", BASE "/huk/.", BASE "/huk/./", BASE "/huk/./.", BASE "/huk/x", BASE "/huk/..", BASE "/huk/../", BASE "/huk/../.", BASE "/huk/../x", BASE "/huk/./..", BASE "/huk/././../x", }; for (int i = 0; i < sizeof file_name / sizeof *file_name; i++) { errno = 0; ASSERT (!canonicalize_file_name (file_name[i])); ASSERT (errno == ENOTDIR); } } /* Check that a missing directory via symlink yields NULL. */ { char *result; errno = 0; result = canonicalize_file_name (BASE "/ouk/.."); ASSERT (result == NULL); ASSERT (errno == ENOENT); } /* Check that a loop of symbolic links is detected. */ { char *result; errno = 0; result = canonicalize_file_name ("ise"); ASSERT (result == NULL); ASSERT (errno == ELOOP); } /* Check that leading // within symlinks is honored correctly. */ { struct stat st1; struct stat st2; char *result1 = canonicalize_file_name ("//."); char *result2 = canonicalize_file_name (BASE "/droot"); ASSERT (result1); ASSERT (result2); ASSERT (stat ("/", &st1) == 0); ASSERT (stat ("//", &st2) == 0); /* On IBM z/OS, "/" and "//" are distinct, yet they both have st_dev == st_ino == 1. */ #ifndef __MVS__ if (SAME_INODE (st1, st2)) { ASSERT (strcmp (result1, "/") == 0); ASSERT (strcmp (result2, "/") == 0); } else #endif { ASSERT (strcmp (result1, "//") == 0); ASSERT (strcmp (result2, "//") == 0); } free (result1); free (result2); } /* Cleanup. */ ASSERT (remove (BASE "/droot") == 0); ASSERT (remove (BASE "/plo") == 0); ASSERT (remove (BASE "/huk") == 0); ASSERT (remove (BASE "/bef") == 0); ASSERT (remove (BASE "/ouk") == 0); ASSERT (remove (BASE "/ket") == 0); ASSERT (remove (BASE "/lum") == 0); ASSERT (remove (BASE "/tra") == 0); ASSERT (remove (BASE) == 0); ASSERT (remove ("ise") == 0); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-canonicalize.c���������������������������������������������������0000664�0000000�0000000�00000034777�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of file name canonicalization. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may "optimize" the null_ptr function, when its result gets passed to a function that has an argument declared as _GL_ARG_NONNULL. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include "canonicalize.h" #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "same-inode.h" #include "ignore-value.h" #if GNULIB_defined_canonicalize_file_name # include "null-ptr.h" #endif #include "macros.h" #define BASE "t-can.tmp" int main (void) { /* Setup some hierarchy to be used by this test. Start by removing any leftovers from a previous partial run. */ { int fd; ignore_value (system ("rm -rf " BASE " ise")); ASSERT (mkdir (BASE, 0700) == 0); fd = creat (BASE "/tra", 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); } /* Check // handling (the easy cases, without symlinks). This // handling is not mandated by POSIX. However, many applications expect that canonicalize_filename_mode "canonicalizes" the file name, that is, that different results of canonicalize_filename_mode correspond to different files (except for hard links). */ { char *result0 = canonicalize_file_name ("/etc/passwd"); if (result0 != NULL) /* This file does not exist on native Windows. */ { char *result; result = canonicalize_filename_mode ("/etc/passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("/etc//passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("/etc///passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); /* On Windows, the syntax //host/share/filename denotes a file in a directory named 'share', exported from host 'host'. See also m4/double-slash-root.m4. */ #if !(defined _WIN32 || defined __CYGWIN__) result = canonicalize_filename_mode ("//etc/passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("//etc//passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("//etc///passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); #endif result = canonicalize_filename_mode ("///etc/passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("///etc//passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); result = canonicalize_filename_mode ("///etc///passwd", CAN_MISSING); ASSERT (result != NULL && strcmp (result, result0) == 0); } } /* Check for ., .., intermediate // handling, and for error cases. */ { char *result1 = canonicalize_file_name (BASE "//./..//" BASE "/tra"); char *result2 = canonicalize_filename_mode (BASE "//./..//" BASE "/tra", CAN_EXISTING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strstr (result1, "/" BASE "/tra") == result1 + strlen (result1) - strlen ("/" BASE "/tra")); free (result1); free (result2); errno = 0; result1 = canonicalize_file_name (""); ASSERT (result1 == NULL); ASSERT (errno == ENOENT); errno = 0; result2 = canonicalize_filename_mode ("", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ENOENT); /* This test works only if the canonicalize_file_name implementation comes from gnulib. If it comes from libc, we have no way to prevent gcc from "optimizing" the null_ptr function in invalid ways. See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>. */ #if GNULIB_defined_canonicalize_file_name errno = 0; result1 = canonicalize_file_name (null_ptr ()); ASSERT (result1 == NULL); ASSERT (errno == EINVAL); #endif errno = 0; result2 = canonicalize_filename_mode (NULL, CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == EINVAL); errno = 0; result2 = canonicalize_filename_mode (".", CAN_MISSING | CAN_ALL_BUT_LAST); ASSERT (result2 == NULL); ASSERT (errno == EINVAL); } /* Check that a non-directory with trailing slash yields NULL. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name (BASE "/tra/"); ASSERT (result1 == NULL); ASSERT (errno == ENOTDIR); errno = 0; result2 = canonicalize_filename_mode (BASE "/tra/", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ENOTDIR); } /* Check that a missing directory yields NULL. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name (BASE "/zzz/.."); ASSERT (result1 == NULL); ASSERT (errno == ENOENT); errno = 0; result2 = canonicalize_filename_mode (BASE "/zzz/..", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ENOENT); } /* From here on out, tests involve symlinks. */ if (symlink (BASE "/ket", "ise") != 0) { ASSERT (remove (BASE "/tra") == 0); ASSERT (rmdir (BASE) == 0); fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink ("bef", BASE "/plo") == 0); ASSERT (symlink ("tra", BASE "/huk") == 0); ASSERT (symlink ("lum", BASE "/bef") == 0); ASSERT (symlink ("wum", BASE "/ouk") == 0); ASSERT (symlink ("../ise", BASE "/ket") == 0); ASSERT (mkdir (BASE "/lum", 0700) == 0); ASSERT (symlink ("s", BASE "/p") == 0); ASSERT (symlink ("d", BASE "/s") == 0); ASSERT (mkdir (BASE "/d", 0700) == 0); ASSERT (close (creat (BASE "/d/2", 0600)) == 0); ASSERT (symlink ("../s/2", BASE "/d/1") == 0); ASSERT (symlink ("//.//../..", BASE "/droot") == 0); /* Check that symbolic links are not resolved, with CAN_NOLINKS. */ { char *result1 = canonicalize_filename_mode (BASE "/huk", CAN_NOLINKS); ASSERT (result1 != NULL); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/huk"), "/" BASE "/huk") == 0); free (result1); } /* Check that the symbolic link to a file can be resolved. */ { char *result1 = canonicalize_file_name (BASE "/huk"); char *result2 = canonicalize_file_name (BASE "/tra"); char *result3 = canonicalize_filename_mode (BASE "/huk", CAN_EXISTING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (result3 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result2, result3) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/tra"), "/" BASE "/tra") == 0); free (result1); free (result2); free (result3); } /* Check that the symbolic link to a directory can be resolved. */ { char *result1 = canonicalize_file_name (BASE "/plo"); char *result2 = canonicalize_file_name (BASE "/bef"); char *result3 = canonicalize_file_name (BASE "/lum"); char *result4 = canonicalize_filename_mode (BASE "/plo", CAN_EXISTING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (result3 != NULL); ASSERT (result4 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result2, result3) == 0); ASSERT (strcmp (result3, result4) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/lum"), "/" BASE "/lum") == 0); free (result1); free (result2); free (result3); free (result4); } /* Check that a symbolic link to a nonexistent file yields NULL. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name (BASE "/ouk"); ASSERT (result1 == NULL); ASSERT (errno == ENOENT); errno = 0; result2 = canonicalize_filename_mode (BASE "/ouk", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ENOENT); } /* Check that a non-directory symlink with trailing slash yields NULL, and likewise for other troublesome suffixes. */ { char const *const file_name[] = { BASE "/huk/", BASE "/huk/.", BASE "/huk/./", BASE "/huk/./.", BASE "/huk/x", BASE "/huk/..", BASE "/huk/../", BASE "/huk/../.", BASE "/huk/../x", BASE "/huk/./..", BASE "/huk/././../x", }; for (int i = 0; i < sizeof file_name / sizeof *file_name; i++) { errno = 0; ASSERT (!canonicalize_file_name (file_name[i])); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (!canonicalize_filename_mode (file_name[i], CAN_EXISTING)); ASSERT (errno == ENOTDIR); } } /* Check that a missing directory via symlink yields NULL. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name (BASE "/ouk/.."); ASSERT (result1 == NULL); ASSERT (errno == ENOENT); errno = 0; result2 = canonicalize_filename_mode (BASE "/ouk/..", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ENOENT); } /* Check that a loop of symbolic links is detected. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name ("ise"); ASSERT (result1 == NULL); ASSERT (errno == ELOOP); errno = 0; result2 = canonicalize_filename_mode ("ise", CAN_EXISTING); ASSERT (result2 == NULL); ASSERT (errno == ELOOP); } /* Check that alternate modes can resolve missing basenames. */ { char *result1 = canonicalize_filename_mode (BASE "/zzz", CAN_ALL_BUT_LAST); char *result2 = canonicalize_filename_mode (BASE "/zzz", CAN_MISSING); char *result3 = canonicalize_filename_mode (BASE "/zzz/", CAN_ALL_BUT_LAST); char *result4 = canonicalize_filename_mode (BASE "/zzz/", CAN_MISSING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (result3 != NULL); ASSERT (result4 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result2, result3) == 0); ASSERT (strcmp (result3, result4) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/zzz"), "/" BASE "/zzz") == 0); free (result1); free (result2); free (result3); free (result4); } /* Check that alternate modes can resolve broken symlink basenames. */ { char *result1 = canonicalize_filename_mode (BASE "/ouk", CAN_ALL_BUT_LAST); char *result2 = canonicalize_filename_mode (BASE "/ouk", CAN_MISSING); char *result3 = canonicalize_filename_mode (BASE "/ouk/", CAN_ALL_BUT_LAST); char *result4 = canonicalize_filename_mode (BASE "/ouk/", CAN_MISSING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (result3 != NULL); ASSERT (result4 != NULL); ASSERT (strcmp (result1, result2) == 0); ASSERT (strcmp (result2, result3) == 0); ASSERT (strcmp (result3, result4) == 0); ASSERT (strcmp (result1 + strlen (result1) - strlen ("/" BASE "/wum"), "/" BASE "/wum") == 0); free (result1); free (result2); free (result3); free (result4); } /* Check that alternate modes can handle missing dirnames. */ { char *result1 = canonicalize_filename_mode ("t-can.zzz/zzz", CAN_ALL_BUT_LAST); char *result2 = canonicalize_filename_mode ("t-can.zzz/zzz", CAN_MISSING); ASSERT (result1 == NULL); ASSERT (result2 != NULL); ASSERT (strcmp (result2 + strlen (result2) - 14, "/t-can.zzz/zzz") == 0); free (result2); } /* Ensure that the following is resolved properly. Before 2007-09-27, it would mistakenly report a loop. */ { char *result1 = canonicalize_filename_mode (BASE, CAN_EXISTING); char *result2 = canonicalize_filename_mode (BASE "/p/1", CAN_EXISTING); ASSERT (result1 != NULL); ASSERT (result2 != NULL); ASSERT (strcmp (result2 + strlen (result1), "/d/2") == 0); free (result1); free (result2); } /* Check that leading // within symlinks is honored correctly. */ { struct stat st1; struct stat st2; char *result1 = canonicalize_file_name ("//."); char *result2 = canonicalize_filename_mode ("//.", CAN_EXISTING); char *result3 = canonicalize_file_name (BASE "/droot"); char *result4 = canonicalize_filename_mode (BASE "/droot", CAN_EXISTING); ASSERT (result1); ASSERT (result2); ASSERT (result3); ASSERT (result4); ASSERT (stat ("/", &st1) == 0); ASSERT (stat ("//", &st2) == 0); if (SAME_INODE (st1, st2)) { ASSERT (strcmp (result1, "/") == 0); ASSERT (strcmp (result2, "/") == 0); ASSERT (strcmp (result3, "/") == 0); ASSERT (strcmp (result4, "/") == 0); } else { ASSERT (strcmp (result1, "//") == 0); ASSERT (strcmp (result2, "//") == 0); ASSERT (strcmp (result3, "//") == 0); ASSERT (strcmp (result4, "//") == 0); } free (result1); free (result2); free (result3); free (result4); } /* Cleanup. */ ASSERT (remove (BASE "/droot") == 0); ASSERT (remove (BASE "/d/1") == 0); ASSERT (remove (BASE "/d/2") == 0); ASSERT (remove (BASE "/d") == 0); ASSERT (remove (BASE "/s") == 0); ASSERT (remove (BASE "/p") == 0); ASSERT (remove (BASE "/plo") == 0); ASSERT (remove (BASE "/huk") == 0); ASSERT (remove (BASE "/bef") == 0); ASSERT (remove (BASE "/ouk") == 0); ASSERT (remove (BASE "/ket") == 0); ASSERT (remove (BASE "/lum") == 0); ASSERT (remove (BASE "/tra") == 0); ASSERT (remove (BASE) == 0); ASSERT (remove ("ise") == 0); return 0; } �gnulib-20210822~d383792/tests/test-carray_list.c����������������������������������������������������0000664�0000000�0000000�00000045051�14110572173�0021103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_carray_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "macros.h" static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_CARRAY_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_CARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrt-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrt() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define CBRT cbrt #include "test-cbrt-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrt-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002276�14110572173�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrt*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (CBRT (NAN))); /* Signed zero. */ { DOUBLE y = CBRT (L_(0.0)); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); } { DOUBLE y = CBRT (MINUS_ZERO); ASSERT (y == L_(0.0)); ASSERT (!!signbit (y) == !!signbit (MINUS_ZERO)); } /* Infinity. */ ASSERT (CBRT (INFINITY) == INFINITY); ASSERT (CBRT (- INFINITY) == - INFINITY); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrt.c�����������������������������������������������������������0000664�0000000�0000000�00000002331�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrt() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cbrt, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define CBRT cbrt #define RANDOM randomd #include "test-cbrt.h" int main () { /* A particular value. */ x = 0.6; y = cbrt (x); ASSERT (y >= 0.8434326653 && y <= 0.8434326654); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrt.h�����������������������������������������������������������0000664�0000000�0000000�00000004137�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrt*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(32.0) * RANDOM[i] - L_(16.0); /* -16.0 <= x <= 16.0 */ DOUBLE y = CBRT (x); DOUBLE err = y * y * y - x; ASSERT (err > - L_(4.0) * L_(16.0) / TWO_MANT_DIG && err < L_(4.0) * L_(16.0) / TWO_MANT_DIG); } for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(32.0) * RANDOM[i] - L_(16.0); /* -16.0 <= x <= 16.0 */ DOUBLE y = L_(32.0) * RANDOM[j] - L_(16.0); /* -16.0 <= y <= 16.0 */ if (x != L_(0.0) && y != L_(0.0)) { DOUBLE z = L_(1.0) / (x * y); /* Approximately x * y * z = 1. */ DOUBLE p = CBRT (x) * CBRT (y) * CBRT (z); ASSERT (p > L_(1.0) - L_(8.0) / TWO_MANT_DIG && p < L_(1.0) + L_(8.0) / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrtf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrtf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define CBRT cbrtf #include "test-cbrt-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrtf.c����������������������������������������������������������0000664�0000000�0000000�00000002334�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrtf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cbrtf, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define CBRT cbrtf #define RANDOM randomf #include "test-cbrt.h" int main () { /* A particular value. */ x = 0.6f; y = cbrtf (x); ASSERT (y >= 0.84343266f && y <= 0.84343270f); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrtl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrtl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define CBRT cbrtl #include "test-cbrt-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cbrtl.c����������������������������������������������������������0000664�0000000�0000000�00000002362�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrtl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cbrtl, long double, (long double)); #include <float.h> #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG DBL_MANT_DIG #define CBRT cbrtl #define RANDOM randoml #include "test-cbrt.h" int main () { /* A particular value. */ x = 0.6L; y = cbrtl (x); ASSERT (y >= 0.8434326653L && y <= 0.8434326654L); test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceil-ieee.c������������������������������������������������������0000664�0000000�0000000�00000003351�14110572173�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (ceil (0.0))); ASSERT (!!signbit (ceil (minus_zerod)) == !!signbit (minus_zerod)); /* Positive numbers. */ ASSERT (!signbit (ceil (0.3))); ASSERT (!signbit (ceil (0.7))); /* Negative numbers. */ ASSERT (!!signbit (ceil (-0.3)) == !!signbit (minus_zerod)); ASSERT (!!signbit (ceil (-0.7)) == !!signbit (minus_zerod)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnand (ceil (NaNd ()))); /* Infinity. */ ASSERT (ceil (Infinityd ()) == Infinityd ()); ASSERT (ceil (- Infinityd ()) == - Infinityd ()); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceil1.c����������������������������������������������������������0000664�0000000�0000000�00000003770�14110572173�0017566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (ceil, double, (double)); #include <float.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Zero. */ ASSERT (ceil (0.0) == 0.0); ASSERT (ceil (minus_zerod) == 0.0); /* Positive numbers. */ ASSERT (ceil (0.3) == 1.0); ASSERT (ceil (0.7) == 1.0); ASSERT (ceil (1.0) == 1.0); ASSERT (ceil (1.001) == 2.0); ASSERT (ceil (1.5) == 2.0); ASSERT (ceil (1.999) == 2.0); ASSERT (ceil (2.0) == 2.0); ASSERT (ceil (65535.999) == 65536.0); ASSERT (ceil (65536.0) == 65536.0); ASSERT (ceil (2.341e31) == 2.341e31); /* Negative numbers. */ ASSERT (ceil (-0.3) == 0.0); ASSERT (ceil (-0.7) == 0.0); ASSERT (ceil (-1.0) == -1.0); ASSERT (ceil (-1.5) == -1.0); ASSERT (ceil (-1.999) == -1.0); ASSERT (ceil (-2.0) == -2.0); ASSERT (ceil (-65535.999) == -65535.0); ASSERT (ceil (-65536.0) == -65536.0); ASSERT (ceil (-2.341e31) == -2.341e31); /* Infinite numbers. */ ASSERT (ceil (Infinityd ()) == Infinityd ()); ASSERT (ceil (- Infinityd ()) == - Infinityd ()); /* NaNs. */ ASSERT (isnand (ceil (NaNd ()))); return 0; } ��������gnulib-20210822~d383792/tests/test-ceil2.c����������������������������������������������������������0000664�0000000�0000000�00000012261�14110572173�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/ceil.c. */ #define DOUBLE double #define MANT_DIG DBL_MANT_DIG #define L_(literal) literal /* -0.0. See minus-zero.h. */ #define MINUS_ZERO minus_zerod /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE ceil_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* Work around ICC's desire to optimize denormal floats to 0. */ if (z < DBL_MIN) return L_(1.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnand (x) ? isnand (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x > 0 && x <= 1 ? result == L_(1.0) : x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 : equal (result, x)); } /* Test the function for a given argument. */ static int check (double x) { /* If the reference implementation is incorrect, bail out immediately. */ double reference = ceil_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { double result = ceil (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "ceil %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 12 #define NUM_LOWBITS 4 int main () { unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 64-NUM_HIGHBITS bits. */ union { double f; uint64_t i; } janus; janus.i = ((uint64_t) highbits << (64 - NUM_HIGHBITS)) | ((uint64_t) ((int64_t) ((uint64_t) lowbits << (64 - NUM_LOWBITS)) >> (64 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceilf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000004336�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* If IEEE compliance was not requested, the ICC compiler inlines its own ceilf assembly that turns -0.0f to 0.0f; but that is a correct result when IEEE is not enforced. To avoid spurious failure, we have to provide this dummy function in order to outsmart ICC's inlining, and call our ceilf through a function pointer. */ static float dummy (float f) { return 0; } int main (int argc, _GL_UNUSED char **argv) { float (*my_ceilf) (float) = argc ? ceilf : dummy; /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (my_ceilf (0.0f))); ASSERT (!!signbit (my_ceilf (minus_zerof)) == !!signbit (minus_zerof)); /* Positive numbers. */ ASSERT (!signbit (my_ceilf (0.3f))); ASSERT (!signbit (my_ceilf (0.7f))); /* Negative numbers. */ ASSERT (!!signbit (my_ceilf (-0.3f)) == !!signbit (minus_zerof)); ASSERT (!!signbit (my_ceilf (-0.7f)) == !!signbit (minus_zerof)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanf (ceilf (NaNf ()))); /* Infinity. */ ASSERT (ceilf (Infinityf ()) == Infinityf ()); ASSERT (ceilf (- Infinityf ()) == - Infinityf ()); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceilf1.c���������������������������������������������������������0000664�0000000�0000000�00000005077�14110572173�0017736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (ceilf, float, (float)); #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* If IEEE compliance was not requested, the ICC compiler inlines its own ceilf assembly that turns -0.0f to 0.0f; but that is a correct result when IEEE is not enforced. To avoid spurious failure, we have to provide this dummy function in order to outsmart ICC's inlining, and call our ceilf through a function pointer. */ static float dummy (float f) { return 0; } int main (int argc, _GL_UNUSED char **argv) { float (*my_ceilf) (float) = argc ? ceilf : dummy; /* Zero. */ ASSERT (my_ceilf (0.0f) == 0.0f); ASSERT (my_ceilf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (my_ceilf (0.3f) == 1.0f); ASSERT (my_ceilf (0.7f) == 1.0f); ASSERT (my_ceilf (1.0f) == 1.0f); ASSERT (my_ceilf (1.001f) == 2.0f); ASSERT (my_ceilf (1.5f) == 2.0f); ASSERT (my_ceilf (1.999f) == 2.0f); ASSERT (my_ceilf (2.0f) == 2.0f); ASSERT (my_ceilf (65535.99f) == 65536.0f); ASSERT (my_ceilf (65536.0f) == 65536.0f); ASSERT (my_ceilf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (my_ceilf (-0.3f) == 0.0f); ASSERT (my_ceilf (-0.7f) == 0.0f); ASSERT (my_ceilf (-1.0f) == -1.0f); ASSERT (my_ceilf (-1.5f) == -1.0f); ASSERT (my_ceilf (-1.999f) == -1.0f); ASSERT (my_ceilf (-2.0f) == -2.0f); ASSERT (my_ceilf (-65535.99f) == -65535.0f); ASSERT (my_ceilf (-65536.0f) == -65536.0f); ASSERT (my_ceilf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (my_ceilf (Infinityf ()) == Infinityf ()); ASSERT (my_ceilf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (my_ceilf (NaNf ()))); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceilf2.c���������������������������������������������������������0000664�0000000�0000000�00000012263�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/ceil.c. */ #define DOUBLE float #define MANT_DIG FLT_MANT_DIG #define L_(literal) literal##f /* -0.0. See minus-zero.h. */ #define MINUS_ZERO minus_zerof /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE ceilf_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* Work around ICC's desire to optimize denormal floats to 0. */ if (z < FLT_MIN) return L_(1.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnanf (x) ? isnanf (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x > 0 && x <= 1 ? result == L_(1.0) : x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 : equal (result, x)); } /* Test the function for a given argument. */ static int check (float x) { /* If the reference implementation is incorrect, bail out immediately. */ float reference = ceilf_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { float result = ceilf (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "ceilf %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 12 #define NUM_LOWBITS 4 int main () { unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 32-NUM_HIGHBITS bits. */ union { float f; uint32_t i; } janus; janus.i = ((uint32_t) highbits << (32 - NUM_HIGHBITS)) | ((uint32_t) ((int32_t) ((uint32_t) lowbits << (32 - NUM_LOWBITS)) >> (32 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceill-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003511�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (ceill (0.0L))); ASSERT (!!signbit (ceill (minus_zerol)) == !!signbit (minus_zerol)); /* Positive numbers. */ ASSERT (!signbit (ceill (0.3L))); ASSERT (!signbit (ceill (0.7L))); /* Negative numbers. */ ASSERT (!!signbit (ceill (-0.3L)) == !!signbit (minus_zerol)); ASSERT (!!signbit (ceill (-0.7L)) == !!signbit (minus_zerol)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanl (ceill (NaNl ()))); /* Infinity. */ ASSERT (ceill (Infinityl ()) == Infinityl ()); ASSERT (ceill (- Infinityl ()) == - Infinityl ()); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ceill.c����������������������������������������������������������0000664�0000000�0000000�00000004226�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (ceill, long double, (long double)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Zero. */ ASSERT (ceill (0.0L) == 0.0L); ASSERT (ceill (minus_zerol) == 0.0L); /* Positive numbers. */ ASSERT (ceill (0.3L) == 1.0L); ASSERT (ceill (0.7L) == 1.0L); ASSERT (ceill (1.0L) == 1.0L); ASSERT (ceill (1.001L) == 2.0L); ASSERT (ceill (1.5L) == 2.0L); ASSERT (ceill (1.999L) == 2.0L); ASSERT (ceill (2.0L) == 2.0L); ASSERT (ceill (65535.999L) == 65536.0L); ASSERT (ceill (65536.0L) == 65536.0L); ASSERT (ceill (2.341e31L) == 2.341e31L); /* Negative numbers. */ ASSERT (ceill (-0.3L) == 0.0L); ASSERT (ceill (-0.7L) == 0.0L); ASSERT (ceill (-1.0L) == -1.0L); ASSERT (ceill (-1.5L) == -1.0L); ASSERT (ceill (-1.999L) == -1.0L); ASSERT (ceill (-2.0L) == -2.0L); ASSERT (ceill (-65535.999L) == -65535.0L); ASSERT (ceill (-65536.0L) == -65536.0L); ASSERT (ceill (-2.341e31L) == -2.341e31L); /* Infinite numbers. */ ASSERT (ceill (Infinityl ()) == Infinityl ()); ASSERT (ceill (- Infinityl ()) == - Infinityl ()); /* NaNs. */ ASSERT (isnanl (ceill (NaNl ()))); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-chdir.c����������������������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (chdir, int, (const char *)); #include "macros.h" int main (void) { ASSERT (chdir ("/") == 0); return 0; } �������������������������������������������������������������������gnulib-20210822~d383792/tests/test-chown.c����������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of chown. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (chown, int, (char const *, uid_t, gid_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "mgetgroups.h" #include "stat-time.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-chown.t" #include "test-chown.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_chown (chown, true); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-chown.h����������������������������������������������������������0000664�0000000�0000000�00000017742�14110572173�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of chown. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include "nap.h" #if !HAVE_GETEGID # define getegid() ((gid_t) -1) #endif /* This file is designed to test chown(n,o,g) and chownat(AT_FDCWD,n,o,g,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_chown (int (*func) (char const *, uid_t, gid_t), bool print) { struct stat st1; struct stat st2; gid_t *gids = NULL; int gids_count; int result; /* Solaris 8 is interesting - if the current process belongs to multiple groups, the current directory is owned by a group that the current process belongs to but different than getegid(), and the current directory does not have the S_ISGID bit, then regular files created in the directory belong to the directory's group, but symlinks belong to the current effective group id. If S_ISGID is set, then both files and symlinks belong to the directory's group. However, it is possible to run the testsuite from within a directory owned by a group we don't belong to, in which case all things that we create belong to the current effective gid. So, work around the issues by creating a subdirectory (we are guaranteed that the subdirectory will be owned by one of our current groups), change ownership of that directory to the current effective gid (which will thus succeed), then create all other files within that directory (eliminating questions on whether inheritance or current id triumphs, since the two methods resolve to the same gid). */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (stat (BASE "dir", &st1) == 0); /* Filter out mingw and file systems which have no concept of groups. */ result = func (BASE "dir", st1.st_uid, getegid ()); if (result == -1 && (errno == ENOSYS || errno == EPERM)) { ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: no support for ownership\n", stderr); return 77; } ASSERT (result == 0); ASSERT (close (creat (BASE "dir/file", 0600)) == 0); ASSERT (stat (BASE "dir/file", &st1) == 0); ASSERT (st1.st_uid != (uid_t) -1); ASSERT (st1.st_gid != (gid_t) -1); ASSERT (st1.st_gid == getegid ()); /* Sanity check of error cases. */ errno = 0; ASSERT (func ("", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/file/", -1, -1) == -1); ASSERT (errno == ENOTDIR); /* Check that -1 does not alter ownership. */ ASSERT (func (BASE "dir/file", -1, st1.st_gid) == 0); ASSERT (func (BASE "dir/file", st1.st_uid, -1) == 0); ASSERT (func (BASE "dir/file", (uid_t) -1, (gid_t) -1) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); /* Even if the values aren't changing, ctime is required to change if at least one argument is not -1. */ nap (); ASSERT (func (BASE "dir/file", st1.st_uid, st1.st_gid) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime < st2.st_ctime || (st1.st_ctime == st2.st_ctime && get_stat_ctime_ns (&st1) < get_stat_ctime_ns (&st2))); /* Test symlink behavior. */ if (symlink ("link", BASE "dir/link2")) { ASSERT (unlink (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "dir/link2", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/link2/", st1.st_uid, st1.st_gid) == -1); ASSERT (errno == ENOENT); ASSERT (symlink ("file", BASE "dir/link") == 0); /* For non-privileged users, chown can only portably succeed at changing group ownership of a file we own. If we belong to at least two groups, then verifying the correct change is simple. But if we belong to only one group, then we fall back on the other observable effect of chown: the ctime must be updated. */ gids_count = mgetgroups (NULL, st1.st_gid, &gids); if (1 < gids_count) { ASSERT (gids[1] != st1.st_gid); ASSERT (gids[1] != (gid_t) -1); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); errno = 0; ASSERT (func (BASE "dir/link2/", -1, gids[1]) == -1); ASSERT (errno == ENOTDIR); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (func (BASE "dir/link2", -1, gids[1]) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (gids[1] == st2.st_gid); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); } else { struct stat l1; struct stat l2; ASSERT (stat (BASE "dir/file", &st1) == 0); ASSERT (lstat (BASE "dir/link", &l1) == 0); ASSERT (lstat (BASE "dir/link2", &l2) == 0); nap (); errno = 0; ASSERT (func (BASE "dir/link2/", -1, st1.st_gid) == -1); ASSERT (errno == ENOTDIR); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&st1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (l1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (l2.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l2) == get_stat_ctime_ns (&st2)); ASSERT (func (BASE "dir/link2", -1, st1.st_gid) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime < st2.st_ctime || (st1.st_ctime == st2.st_ctime && get_stat_ctime_ns (&st1) < get_stat_ctime_ns (&st2))); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (l1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (l2.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l2) == get_stat_ctime_ns (&st2)); } /* Cleanup. */ free (gids); ASSERT (unlink (BASE "dir/file") == 0); ASSERT (unlink (BASE "dir/link") == 0); ASSERT (unlink (BASE "dir/link2") == 0); ASSERT (rmdir (BASE "dir") == 0); return 0; } ������������������������������gnulib-20210822~d383792/tests/test-chownat.c��������������������������������������������������������0000664�0000000�0000000�00000001767�14110572173�0020240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of chownat and lchownat Copyright 2020-2021 Free Software Foundation, Inc. This 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 "openat.h" #include "signature.h" SIGNATURE_CHECK (chownat, int, (int, char const *, uid_t, gid_t)); SIGNATURE_CHECK (lchownat, int, (int, char const *, uid_t, gid_t)); #define BASE "test-chownat.t" #define TEST_CHOWNAT #include "test-fchownat.c" ���������gnulib-20210822~d383792/tests/test-cloexec.c��������������������������������������������������������0000664�0000000�0000000�00000007777�14110572173�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating non-inheritable file descriptors. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } #if !O_BINARY # define set_binary_mode(f,m) zero () static int zero (void) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } int main (void) { const char *file = "test-cloexec.tmp"; int fd = creat (file, 0600); int fd2; int bad_fd = getdtablesize (); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_inheritable (fd)); /* Normal use of set_cloexec_flag. */ ASSERT (set_cloexec_flag (fd, true) == 0); #if !(defined _WIN32 && ! defined __CYGWIN__) ASSERT (!is_inheritable (fd)); #endif ASSERT (set_cloexec_flag (fd, false) == 0); ASSERT (is_inheritable (fd)); /* Normal use of dup_cloexec. */ fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (!is_inheritable (fd2)); ASSERT (close (fd) == 0); ASSERT (dup_cloexec (fd2) == fd); ASSERT (!is_inheritable (fd)); ASSERT (close (fd2) == 0); /* On systems that distinguish between text and binary mode, dup_cloexec reuses the mode of the source. */ set_binary_mode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_BINARY)); ASSERT (close (fd2) == 0); set_binary_mode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_TEXT)); ASSERT (close (fd2) == 0); /* Test error handling. */ errno = 0; ASSERT (set_cloexec_flag (-1, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (bad_fd, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (fd2, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (-1) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (bad_fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (fd2) == -1); ASSERT (errno == EBADF); /* Clean up. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } �gnulib-20210822~d383792/tests/test-close.c����������������������������������������������������������0000664�0000000�0000000�00000002202�14110572173�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test closing a file or socket. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (close, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (close (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (close (99) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-closein.c��������������������������������������������������������0000664�0000000�0000000�00000002625�14110572173�0020223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of closein module. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake. */ #include <config.h> #include "closein.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "binary-io.h" #include "ignore-value.h" /* With no arguments, do nothing. With arguments, attempt to consume first 6 bytes of stdin. In either case, let exit() take care of closing std streams and changing exit status if ferror(stdin). */ int main (int argc, char **argv) { char buf[7]; atexit (close_stdin); /* close_stdin currently relies on ftell, but mingw ftell is unreliable on text mode input. */ set_binary_mode (0, O_BINARY); if (argc > 2) close (0); if (argc > 1) ignore_value (fread (buf, 1, 6, stdin)); return 0; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-closein.sh�������������������������������������������������������0000775�0000000�0000000�00000001660�14110572173�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . echo Hello world > in.tmp echo world > xout.tmp fail=0 # Test with seekable stdin; follow-on process must see remaining data (${CHECKER} test-closein; cat) < in.tmp > out1.tmp || fail=1 cmp out1.tmp in.tmp || fail=1 (${CHECKER} test-closein consume; cat) < in.tmp > out2.tmp || fail=1 cmp out2.tmp xout.tmp || fail=1 # Test for lack of error on pipe. Ignore any EPIPE failures from cat. cat in.tmp 2>/dev/null | ${CHECKER} test-closein || fail=1 cat in.tmp 2>/dev/null | ${CHECKER} test-closein consume || fail=1 # Test for lack of error when nothing is read ${CHECKER} test-closein </dev/null || fail=1 ${CHECKER} test-closein <&- || fail=1 # Test for no error when EOF is read early ${CHECKER} test-closein consume </dev/null || fail=1 # Test for error when read fails because no file available ${CHECKER} test-closein consume close <&- 2>/dev/null && fail=1 Exit $fail ��������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cnd.c������������������������������������������������������������0000664�0000000�0000000�00000010715�14110572173�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of condition variables in multithreaded situations. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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> /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_COND 1 #define DO_TEST_TIMEDCOND 1 /* Whether to help the scheduler through explicit thrd_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <threads.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() thrd_yield () #else # define yield() #endif /* * Condition check */ static int cond_value = 0; static cnd_t condtest; static mtx_t lockcond; static int cnd_wait_routine (void *arg) { ASSERT (mtx_lock (&lockcond) == thrd_success); while (!cond_value) { ASSERT (cnd_wait (&condtest, &lockcond) == thrd_success); } ASSERT (mtx_unlock (&lockcond) == thrd_success); cond_value = 2; return 0; } static void test_cnd_wait () { struct timespec remain; thrd_t thread; int ret; remain.tv_sec = 2; remain.tv_nsec = 0; cond_value = 0; ASSERT (thrd_create (&thread, cnd_wait_routine, NULL) == thrd_success); do { yield (); ret = thrd_sleep (&remain, &remain); ASSERT (ret >= -1); } while (ret == -1 && (remain.tv_sec != 0 || remain.tv_nsec != 0)); /* signal condition */ ASSERT (mtx_lock (&lockcond) == thrd_success); cond_value = 1; ASSERT (cnd_signal (&condtest) == thrd_success); ASSERT (mtx_unlock (&lockcond) == thrd_success); ASSERT (thrd_join (thread, NULL) == thrd_success); if (cond_value != 2) abort (); } /* * Timed Condition check */ static int cond_timeout; static void get_ts (struct timespec *ts) { struct timeval now; gettimeofday (&now, NULL); ts->tv_sec = now.tv_sec + 1; ts->tv_nsec = now.tv_usec * 1000; } static int cnd_timedwait_routine (void *arg) { int ret; struct timespec ts; ASSERT (mtx_lock (&lockcond) == thrd_success); while (!cond_value) { get_ts (&ts); ret = cnd_timedwait (&condtest, &lockcond, &ts); if (ret == thrd_timedout) cond_timeout = 1; } ASSERT (mtx_unlock (&lockcond) == thrd_success); return 0; } static void test_cnd_timedwait (void) { struct timespec remain; thrd_t thread; int ret; remain.tv_sec = 2; remain.tv_nsec = 0; cond_value = cond_timeout = 0; ASSERT (thrd_create (&thread, cnd_timedwait_routine, NULL) == thrd_success); do { yield (); ret = thrd_sleep (&remain, &remain); ASSERT (ret >= -1); } while (ret == -1 && (remain.tv_sec != 0 || remain.tv_nsec != 0)); /* signal condition */ ASSERT (mtx_lock (&lockcond) == thrd_success); cond_value = 1; ASSERT (cnd_signal (&condtest) == thrd_success); ASSERT (mtx_unlock (&lockcond) == thrd_success); ASSERT (thrd_join (thread, NULL) == thrd_success); if (!cond_timeout) abort (); } int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif ASSERT (cnd_init (&condtest) == thrd_success); ASSERT (mtx_init (&lockcond, mtx_plain) == thrd_success); #if DO_TEST_COND printf ("Starting test_cnd_wait ..."); fflush (stdout); test_cnd_wait (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_TIMEDCOND printf ("Starting test_cnd_timedwait ..."); fflush (stdout); test_cnd_timedwait (); printf (" OK\n"); fflush (stdout); #endif return 0; } ���������������������������������������������������gnulib-20210822~d383792/tests/test-cond.c�����������������������������������������������������������0000664�0000000�0000000�00000007540�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of condition variables in multithreaded situations. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_COND 1 #define DO_TEST_TIMEDCOND 1 /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #include <unistd.h> #include "glthread/cond.h" #include "glthread/lock.h" #include "glthread/thread.h" #include "glthread/yield.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif /* * Condition check */ static int cond_value = 0; gl_cond_define_initialized(static, condtest) gl_lock_define_initialized(static, lockcond) static void * cond_routine (void *arg) { gl_lock_lock (lockcond); while (!cond_value) { gl_cond_wait (condtest, lockcond); } gl_lock_unlock (lockcond); cond_value = 2; return NULL; } static void test_cond () { int remain = 2; gl_thread_t thread; cond_value = 0; thread = gl_thread_create (cond_routine, NULL); do { yield (); remain = sleep (remain); } while (remain); /* signal condition */ gl_lock_lock (lockcond); cond_value = 1; gl_cond_signal (condtest); gl_lock_unlock (lockcond); gl_thread_join (thread, NULL); if (cond_value != 2) abort (); } /* * Timed Condition check */ static int cond_timeout; static void get_ts (struct timespec *ts) { struct timeval now; gettimeofday (&now, NULL); ts->tv_sec = now.tv_sec + 1; ts->tv_nsec = now.tv_usec * 1000; } static void * timedcond_routine (void *arg) { int ret; struct timespec ts; gl_lock_lock (lockcond); while (!cond_value) { get_ts (&ts); ret = glthread_cond_timedwait (&condtest, &lockcond, &ts); if (ret == ETIMEDOUT) cond_timeout = 1; } gl_lock_unlock (lockcond); return NULL; } static void test_timedcond (void) { int remain = 2; gl_thread_t thread; cond_value = cond_timeout = 0; thread = gl_thread_create (timedcond_routine, NULL); do { yield (); remain = sleep (remain); } while (remain); /* signal condition */ gl_lock_lock (lockcond); cond_value = 1; gl_cond_signal (condtest); gl_lock_unlock (lockcond); gl_thread_join (thread, NULL); if (!cond_timeout) abort (); } int main () { #if DO_TEST_COND printf ("Starting test_cond ..."); fflush (stdout); test_cond (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_TIMEDCOND printf ("Starting test_timedcond ..."); fflush (stdout); test_timedcond (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-connect.c��������������������������������������������������������0000664�0000000�0000000�00000003143�14110572173�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test connecting a client socket. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (connect, int, (int, const struct sockaddr *, socklen_t)); #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (connect (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (connect (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-acl-1.sh����������������������������������������������������0000775�0000000�0000000�00000000456�14110572173�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test copy-acl on the file system of /var/tmp, which usually is a local # file system. . "${srcdir=.}/init.sh"; path_prepend_ . if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi test -d $TMPDIR || Exit 77 export TMPDIR $BOURNE_SHELL "${srcdir}/test-copy-acl.sh" Exit $? ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-acl-2.sh����������������������������������������������������0000775�0000000�0000000�00000000364�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test copy-acl on the file system of the build directory, which may be # a local file system or NFS mounted. . "${srcdir=.}/init.sh"; path_prepend_ . TMPDIR=`pwd` export TMPDIR $BOURNE_SHELL "${srcdir}/test-copy-acl.sh" Exit $? ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-acl.c�������������������������������������������������������0000664�0000000�0000000�00000003256�14110572173�0020277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copying of files. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "acl.h" #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include "macros.h" int main (int argc, char *argv[]) { const char *file1; const char *file2; int fd1; struct stat statbuf; int mode; int fd2; ASSERT (argc == 3); file1 = argv[1]; file2 = argv[2]; fd1 = open (file1, O_RDONLY); if (fd1 < 0 || fstat (fd1, &statbuf) < 0) { fprintf (stderr, "could not open file \"%s\"\n", file1); exit (EXIT_FAILURE); } mode = statbuf.st_mode & 07777; fd2 = open (file2, O_WRONLY, 0600); if (fd2 < 0) { fprintf (stderr, "could not open file \"%s\"\n", file2); exit (EXIT_FAILURE); } #if USE_ACL if (copy_acl (file1, fd1, file2, fd2, mode)) exit (EXIT_FAILURE); #else chmod (file2, mode); #endif close (fd2); close (fd1); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-acl.sh������������������������������������������������������0000775�0000000�0000000�00000042636�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show all commands when run with environment variable VERBOSE=yes. test -z "$VERBOSE" || set -x test "$USE_ACL" = 0 && { echo "Skipping test: insufficient ACL support" exit 77 } # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 exit 1 } } func_tmpdir # builddir may already be set by the script that invokes this one. case "$builddir" in '') builddir=`pwd` ;; /* | ?:*) ;; *) builddir=`pwd`/$builddir ;; esac cd "$builddir" || { echo "$0: cannot determine build directory (unreadable parent dir?)" >&2 exit 1 } # Switch to a temporary directory, to increase the likelihood that ACLs are # supported on the current file system. (/tmp is usually locally mounted, # whereas the build dir is sometimes NFS-mounted.) ( cd "$tmp" # Prepare tmpfile0. rm -f tmpfile[0-9] tmpaclout[0-2] echo "Simple contents" > tmpfile0 chmod 600 tmpfile0 # Classification of the platform according to the programs available for # manipulating ACLs. # Possible values are: # linux, cygwin, freebsd, solaris, hpux, hpuxjfs, osf1, aix, macosx, irix, none. # TODO: Support also native Windows platforms (mingw). acl_flavor=none if (getfacl tmpfile0 >/dev/null) 2>/dev/null; then # Platforms with the getfacl and setfacl programs. # Linux, FreeBSD, Solaris, Cygwin. if (setfacl --help >/dev/null) 2>/dev/null; then # Linux, Cygwin. if (LC_ALL=C setfacl --help | grep ' --set-file' >/dev/null) 2>/dev/null; then # Linux. acl_flavor=linux else acl_flavor=cygwin fi else # FreeBSD, Solaris. if (LC_ALL=C setfacl 2>&1 | grep '\-x entries' >/dev/null) 2>/dev/null; then # FreeBSD. acl_flavor=freebsd else # Solaris. acl_flavor=solaris fi fi else if (lsacl / >/dev/null) 2>/dev/null; then # Platforms with the lsacl and chacl programs. # HP-UX, sometimes also IRIX. if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # HP-UX 11.11 or newer. acl_flavor=hpuxjfs else # HP-UX 11.00. acl_flavor=hpux fi else if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # Tru64, NonStop Kernel. if (getacl -m tmpfile0 >/dev/null) 2>/dev/null; then # Tru64. acl_flavor=osf1 else # NonStop Kernel. acl_flavor=nsk fi else if (aclget tmpfile0 >/dev/null) 2>/dev/null; then # AIX. acl_flavor=aix else if (fsaclctl -v >/dev/null) 2>/dev/null; then # Mac OS X. acl_flavor=macosx else if test -f /sbin/chacl; then # IRIX. acl_flavor=irix fi fi fi fi fi fi # Define a function to test for the same ACLs, from the point of view of # the programs. # func_test_same_acls file1 file2 case $acl_flavor in linux | cygwin | freebsd | solaris) func_test_same_acls () { getfacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getfacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; hpux) func_test_same_acls () { lsacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 lsacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; hpuxjfs) func_test_same_acls () { { lsacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 lsacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } && { getacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } } ;; osf1 | nsk) func_test_same_acls () { getacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; aix) func_test_same_acls () { aclget "$1" > tmpaclout1 aclget "$2" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; macosx) func_test_same_acls () { /bin/ls -le "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 /bin/ls -le "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; irix) func_test_same_acls () { /bin/ls -lD "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 /bin/ls -lD "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; none) func_test_same_acls () { : } ;; esac # func_test_copy file1 file2 # copies file1 to file2 and verifies the permissions and ACLs are the same # on both. func_test_copy () { echo "Simple contents" > "$2" chmod 600 "$2" ${CHECKER} "$builddir"/test-copy-acl${EXEEXT} "$1" "$2" || exit 1 ${CHECKER} "$builddir"/test-sameacls${EXEEXT} "$1" "$2" || exit 1 func_test_same_acls "$1" "$2" || exit 1 } func_test_copy tmpfile0 tmpfile1 if test $acl_flavor != none; then # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # Use a user and group id different from the current one, to avoid # redundant/ambiguous ACLs. myuid=`$ID -u` mygid=`$ID -g` auid=1 if test "$auid" = "$myuid"; then auid=2; fi agid=1 if test "$agid" = "$mygid"; then agid=2; fi case $acl_flavor in linux | freebsd | solaris) # Set an ACL for a user. setfacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setfacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. case $acl_flavor in freebsd) setfacl -m other::4 tmpfile0 ;; solaris) chmod o+r tmpfile0 ;; *) setfacl -m other:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. case $acl_flavor in linux) setfacl -x user:$auid tmpfile0 ;; freebsd) setfacl -x user:$auid:1 tmpfile0 ;; *) setfacl -d user:$auid:1 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile5 # Remove the ACL for other. case $acl_flavor in linux | solaris) ;; # impossible freebsd) setfacl -x other::4 tmpfile0 ;; *) setfacl -d other:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile6 # Remove the ACL for the group. case $acl_flavor in linux) setfacl -x group:$agid tmpfile0 ;; freebsd) setfacl -x group:$agid:4 tmpfile0 ;; *) setfacl -d group:$agid:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. case $acl_flavor in linux | freebsd) setfacl -m user:$auid:1 tmpfile0 setfacl -b tmpfile0 ;; *) setfacl -s user::6,group::0,other:0 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 case $acl_flavor in linux) getfacl tmpfile9 | setfacl --set-file=- tmpfile0 ;; freebsd) ;; *) getfacl tmpfile9 | setfacl -f - tmpfile0 ;; esac rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; cygwin) # Set an ACL for a group. setfacl -m group:0:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for other. setfacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the group. setfacl -d group:0 tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for other. setfacl -d other:4 tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. setfacl -s user::6,group::0,other:0 tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getfacl tmpfile9 | setfacl -f - tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; hpux) # Set an ACL for a user. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.$agid,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.%,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. chacl -d "($auid.%,--x)" tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. chacl -d "(%.$agid,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. chacl -z tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 orig=`lsacl tmpfile9 | sed -e 's/ tmpfile9$//'` rm -f tmpfile9 chacl -r "${orig}" tmpfile0 func_test_copy tmpfile0 tmpfile9 ;; hpuxjfs) # Set an ACL for a user. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 \ || setacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.$agid,r--)" tmpfile0 \ || setacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.%,r--)" tmpfile0 \ || setacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. chacl -d "($auid.%,--x)" tmpfile0 \ || setacl -d user:$auid tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. chacl -d "(%.$agid,r--)" tmpfile0 \ || setacl -d group:$agid tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. chacl -z tmpfile0 \ || { setacl -m user:$auid:1 tmpfile0 setacl -s user::6,group::0,class:7,other:0 tmpfile0 } func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 orig=`lsacl tmpfile9 | sed -e 's/ tmpfile9$//'` getacl tmpfile9 > tmpaclout0 rm -f tmpfile9 chacl -r "${orig}" tmpfile0 \ || setacl -f tmpaclout0 tmpfile0 func_test_copy tmpfile0 tmpfile9 ;; osf1) # Set an ACL for a user. setacl -u user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setacl -u group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. setacl -u other::4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. setacl -x user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile5 if false; then # would give an error "can't set ACL: Invalid argument" # Remove the ACL for other. setacl -x other::4 tmpfile0 func_test_copy tmpfile0 tmpfile6 fi # Remove the ACL for the group. setacl -x group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. setacl -u user:$auid:1 tmpfile0 setacl -b tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getacl tmpfile9 > tmpaclout0 setacl -b -U tmpaclout0 tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; nsk) # Set an ACL for a user. setacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. setacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. setacl -d user:$auid tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. setacl -d group:$agid tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. setacl -m user:$auid:1 tmpfile0 setacl -s user::6,group::0,class:7,other:0 tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getacl tmpfile9 > tmpaclout0 setacl -f tmpaclout0 tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; aix) # Set an ACL for a user. { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit --x u:$auid"; } | aclput tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit r-- g:$agid"; } | aclput tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. chmod o+r tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. aclget tmpfile0 | grep -v ' u:[^ ]*$' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. aclget tmpfile0 | grep -v ' g:[^ ]*$' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. aclget tmpfile0 | sed -e 's/enabled$/disabled/' | sed -e '/disabled$/q' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 aclget tmpfile9 | aclput tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; macosx) # Set an ACL for a user. /bin/chmod +a "user:daemon allow execute" tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. /bin/chmod +a "group:daemon allow read" tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. chmod o+r tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. /bin/chmod -a "user:daemon allow execute" tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. /bin/chmod -a "group:daemon allow read" tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. /bin/chmod -N tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 { /bin/ls -le tmpfile9 | sed -n -e 's/^ [0-9][0-9]*: //p'; echo; } | /bin/chmod -E tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; irix) # Set an ACL for a user. /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x,group:$agid:r-- tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. /sbin/chacl user::rw-,group::---,user:$auid:--x,group:$agid:r--,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. /sbin/chacl user::rw-,group::---,group:$agid:r--,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. /sbin/chacl user::rw-,group::---,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile7 ;; esac fi rm -f tmpfile[0-9] tmpaclout[0-2] ) || exit 1 rm -rf "$tmp" exit 0 ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-file-1.sh���������������������������������������������������0000775�0000000�0000000�00000000662�14110572173�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test copy-file on the file system of /var/tmp, which usually is a local # file system. . "${srcdir=.}/init.sh"; path_prepend_ . if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi test -d $TMPDIR || Exit 77 export TMPDIR $BOURNE_SHELL "${srcdir}/test-copy-file.sh" ret1=$? NO_STDERR_OUTPUT=1 $BOURNE_SHELL "${srcdir}/test-copy-file.sh" ret2=$? case $ret1 in 77 ) Exit $ret2 ;; * ) Exit $ret1 ;; esac ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-file-2.sh���������������������������������������������������0000775�0000000�0000000�00000000570�14110572173�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test copy-file on the file system of the build directory, which may be # a local file system or NFS mounted. . "${srcdir=.}/init.sh"; path_prepend_ . TMPDIR=`pwd` export TMPDIR $BOURNE_SHELL "${srcdir}/test-copy-file.sh" ret1=$? NO_STDERR_OUTPUT=1 $BOURNE_SHELL "${srcdir}/test-copy-file.sh" ret2=$? case $ret1 in 77 ) Exit $ret2 ;; * ) Exit $ret1 ;; esac ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-file.c������������������������������������������������������0000664�0000000�0000000�00000002321�14110572173�0020447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copying of files. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "copy-file.h" #include <stdlib.h> #include "macros.h" int main (int argc, char *argv[]) { const char *file1; const char *file2; int null_stderr; ASSERT (argc == 3); file1 = argv[1]; file2 = argv[2]; null_stderr = (getenv ("NO_STDERR_OUTPUT") != NULL); if (null_stderr) ASSERT (qcopy_file_preserving (file1, file2) == 0); else copy_file_preserving (file1, file2); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copy-file.sh�����������������������������������������������������0000775�0000000�0000000�00000042520�14110572173�0020647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show all commands when run with environment variable VERBOSE=yes. test -z "$VERBOSE" || set -x # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 exit 1 } } func_tmpdir # builddir may already be set by the script that invokes this one. case "$builddir" in '') builddir=`pwd` ;; /* | ?:*) ;; *) builddir=`pwd`/$builddir ;; esac cd "$builddir" || { echo "$0: cannot determine build directory (unreadable parent dir?)" >&2 exit 1 } # Switch to a temporary directory, to increase the likelihood that ACLs are # supported on the current file system. (/tmp is usually locally mounted, # whereas the build dir is sometimes NFS-mounted.) ( cd "$tmp" # Prepare tmpfile0. rm -f tmpfile[0-9] tmpaclout[0-2] echo "Simple contents" > tmpfile0 chmod 600 tmpfile0 # Classification of the platform according to the programs available for # manipulating ACLs. # Possible values are: # linux, cygwin, freebsd, solaris, hpux, hpuxjfs, osf1, aix, macosx, irix, none. # TODO: Support also native Windows platforms (mingw). acl_flavor=none if (getfacl tmpfile0 >/dev/null) 2>/dev/null; then # Platforms with the getfacl and setfacl programs. # Linux, FreeBSD, Solaris, Cygwin. if (setfacl --help >/dev/null) 2>/dev/null; then # Linux, Cygwin. if (LC_ALL=C setfacl --help | grep ' --set-file' >/dev/null) 2>/dev/null; then # Linux. acl_flavor=linux else acl_flavor=cygwin fi else # FreeBSD, Solaris. if (LC_ALL=C setfacl 2>&1 | grep '\-x entries' >/dev/null) 2>/dev/null; then # FreeBSD. acl_flavor=freebsd else # Solaris. acl_flavor=solaris fi fi else if (lsacl / >/dev/null) 2>/dev/null; then # Platforms with the lsacl and chacl programs. # HP-UX, sometimes also IRIX. if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # HP-UX 11.11 or newer. acl_flavor=hpuxjfs else # HP-UX 11.00. acl_flavor=hpux fi else if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # Tru64, NonStop Kernel. if (getacl -m tmpfile0 >/dev/null) 2>/dev/null; then # Tru64. acl_flavor=osf1 else # NonStop Kernel. acl_flavor=nsk fi else if (aclget tmpfile0 >/dev/null) 2>/dev/null; then # AIX. acl_flavor=aix else if (fsaclctl -v >/dev/null) 2>/dev/null; then # Mac OS X. acl_flavor=macosx else if test -f /sbin/chacl; then # IRIX. acl_flavor=irix fi fi fi fi fi fi # Define a function to test for the same ACLs, from the point of view of # the programs. # func_test_same_acls file1 file2 case $acl_flavor in linux | cygwin | freebsd | solaris) func_test_same_acls () { getfacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getfacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; hpux) func_test_same_acls () { lsacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 lsacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; hpuxjfs) func_test_same_acls () { { lsacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 lsacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } && { getacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } } ;; osf1 | nsk) func_test_same_acls () { getacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 getacl "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; aix) func_test_same_acls () { aclget "$1" > tmpaclout1 aclget "$2" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; macosx) func_test_same_acls () { /bin/ls -le "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 /bin/ls -le "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; irix) func_test_same_acls () { /bin/ls -lD "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1 /bin/ls -lD "$2" | sed -e "s/$2/FILENAME/g" > tmpaclout2 cmp tmpaclout1 tmpaclout2 > /dev/null } ;; none) func_test_same_acls () { : } ;; esac # func_test_copy file1 file2 # copies file1 to file2 and verifies the permissions and ACLs are the same # on both. func_test_copy () { ${CHECKER} "$builddir"/test-copy-file${EXEEXT} "$1" "$2" || exit 1 if test "$USE_ACL" != 0; then ${CHECKER} "$builddir"/test-sameacls${EXEEXT} "$1" "$2" || exit 1 func_test_same_acls "$1" "$2" || exit 1 fi } func_test_copy tmpfile0 tmpfile1 if test "$USE_ACL" != 0 && test $acl_flavor != none; then # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # Use a user and group id different from the current one, to avoid # redundant/ambiguous ACLs. myuid=`$ID -u` mygid=`$ID -g` auid=1 if test "$auid" = "$myuid"; then auid=2; fi agid=1 if test "$agid" = "$mygid"; then agid=2; fi case $acl_flavor in linux | freebsd | solaris) # Set an ACL for a user. setfacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setfacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. case $acl_flavor in freebsd) setfacl -m other::4 tmpfile0 ;; solaris) chmod o+r tmpfile0 ;; *) setfacl -m other:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. case $acl_flavor in linux) setfacl -x user:$auid tmpfile0 ;; freebsd) setfacl -x user:$auid:1 tmpfile0 ;; *) setfacl -d user:$auid:1 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile5 # Remove the ACL for other. case $acl_flavor in linux | solaris) ;; # impossible freebsd) setfacl -x other::4 tmpfile0 ;; *) setfacl -d other:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile6 # Remove the ACL for the group. case $acl_flavor in linux) setfacl -x group:$agid tmpfile0 ;; freebsd) setfacl -x group:$agid:4 tmpfile0 ;; *) setfacl -d group:$agid:4 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. case $acl_flavor in linux | freebsd) setfacl -m user:$auid:1 tmpfile0 setfacl -b tmpfile0 ;; *) setfacl -s user::6,group::0,other:0 tmpfile0 ;; esac func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 case $acl_flavor in linux) getfacl tmpfile9 | setfacl --set-file=- tmpfile0 ;; freebsd) ;; *) getfacl tmpfile9 | setfacl -f - tmpfile0 ;; esac rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; cygwin) # Set an ACL for a group. setfacl -m group:0:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for other. setfacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the group. setfacl -d group:0 tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for other. setfacl -d other:4 tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. setfacl -s user::6,group::0,other:0 tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getfacl tmpfile9 | setfacl -f - tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; hpux) # Set an ACL for a user. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.$agid,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.%,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. chacl -d "($auid.%,--x)" tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. chacl -d "(%.$agid,r--)" tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. chacl -z tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 orig=`lsacl tmpfile9 | sed -e 's/ tmpfile9$//'` rm -f tmpfile9 chacl -r "${orig}" tmpfile0 func_test_copy tmpfile0 tmpfile9 ;; hpuxjfs) # Set an ACL for a user. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 \ || setacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.$agid,r--)" tmpfile0 \ || setacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}(%.%,r--)" tmpfile0 \ || setacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. chacl -d "($auid.%,--x)" tmpfile0 \ || setacl -d user:$auid tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. chacl -d "(%.$agid,r--)" tmpfile0 \ || setacl -d group:$agid tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. chacl -z tmpfile0 \ || { setacl -m user:$auid:1 tmpfile0 setacl -s user::6,group::0,class:7,other:0 tmpfile0 } func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 orig=`lsacl tmpfile9 | sed -e 's/ tmpfile9$//'` getacl tmpfile9 > tmpaclout0 rm -f tmpfile9 chacl -r "${orig}" tmpfile0 \ || setacl -f tmpaclout0 tmpfile0 func_test_copy tmpfile0 tmpfile9 ;; osf1) # Set an ACL for a user. setacl -u user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setacl -u group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. setacl -u other::4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. setacl -x user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile5 if false; then # would give an error "can't set ACL: Invalid argument" # Remove the ACL for other. setacl -x other::4 tmpfile0 func_test_copy tmpfile0 tmpfile6 fi # Remove the ACL for the group. setacl -x group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. setacl -u user:$auid:1 tmpfile0 setacl -b tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getacl tmpfile9 > tmpaclout0 setacl -b -U tmpaclout0 tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; nsk) # Set an ACL for a user. setacl -m user:$auid:1 tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. setacl -m group:$agid:4 tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. setacl -m other:4 tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. setacl -d user:$auid tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. setacl -d group:$agid tmpfile0 func_test_copy tmpfile0 tmpfile6 # Delete all optional ACLs. setacl -m user:$auid:1 tmpfile0 setacl -s user::6,group::0,class:7,other:0 tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 getacl tmpfile9 > tmpaclout0 setacl -f tmpaclout0 tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; aix) # Set an ACL for a user. { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit --x u:$auid"; } | aclput tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit r-- g:$agid"; } | aclput tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. chmod o+r tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. aclget tmpfile0 | grep -v ' u:[^ ]*$' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. aclget tmpfile0 | grep -v ' g:[^ ]*$' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. aclget tmpfile0 | sed -e 's/enabled$/disabled/' | sed -e '/disabled$/q' | aclput tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 aclget tmpfile9 | aclput tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; macosx) # Set an ACL for a user. /bin/chmod +a "user:daemon allow execute" tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. /bin/chmod +a "group:daemon allow read" tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. chmod o+r tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. /bin/chmod -a "user:daemon allow execute" tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. /bin/chmod -a "group:daemon allow read" tmpfile0 func_test_copy tmpfile0 tmpfile7 # Delete all optional ACLs. /bin/chmod -N tmpfile0 func_test_copy tmpfile0 tmpfile8 # Copy ACLs from a file that has no ACLs. echo > tmpfile9 chmod a+x tmpfile9 { /bin/ls -le tmpfile9 | sed -n -e 's/^ [0-9][0-9]*: //p'; echo; } | /bin/chmod -E tmpfile0 rm -f tmpfile9 func_test_copy tmpfile0 tmpfile9 ;; irix) # Set an ACL for a user. /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x tmpfile0 func_test_copy tmpfile0 tmpfile2 # Set an ACL for a group. /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x,group:$agid:r-- tmpfile0 func_test_copy tmpfile0 tmpfile3 # Set an ACL for other. /sbin/chacl user::rw-,group::---,user:$auid:--x,group:$agid:r--,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile4 # Remove the ACL for the user. /sbin/chacl user::rw-,group::---,group:$agid:r--,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile5 # Remove the ACL for the group. /sbin/chacl user::rw-,group::---,other::r-- tmpfile0 func_test_copy tmpfile0 tmpfile7 ;; esac fi rm -f tmpfile[0-9] tmpaclout[0-2] ) || exit 1 rm -rf "$tmp" exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copysign.c�������������������������������������������������������0000664�0000000�0000000�00000004607�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysign() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (copysign, double, (double, double)); #include "macros.h" #include "minus-zero.h" #include <string.h> volatile double x; volatile double y; double z; double zero = 0.0; int main () { /* A particular value in the first quadrant. */ x = 0.6; y = 0.8; z = copysign (x, y); ASSERT (z == 0.6); /* A particular value in the second quadrant. */ x = -0.6; y = 0.8; z = copysign (x, y); ASSERT (z == 0.6); /* A particular value in the third quadrant. */ x = -0.6; y = -0.8; z = copysign (x, y); ASSERT (z == -0.6); /* A particular value in the fourth quadrant. */ x = 0.6; y = -0.8; z = copysign (x, y); ASSERT (z == -0.6); /* From signed zero. */ x = 1.0; y = 0.0; z = copysign (x, y); ASSERT (z == 1.0); x = 1.0; y = minus_zerod; z = copysign (x, y); /* Assume all gnulib targets support -0.0, until proven otherwise. */ ASSERT (z == -1.0); x = -1.0; y = 0.0; z = copysign (x, y); ASSERT (z == 1.0); x = -1.0; y = minus_zerod; z = copysign (x, y); ASSERT (z == -1.0); /* To signed zero. */ x = 0.0; y = 1.0; z = copysign (x, y); ASSERT (z == 0.0); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = 0.0; y = -1.0; z = copysign (x, y); ASSERT (z == 0.0); ASSERT (memcmp (&z, &zero, sizeof z) != 0); x = minus_zerod; y = 1.0; z = copysign (x, y); ASSERT (z == 0.0); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = minus_zerod; y = -1.0; z = copysign (x, y); ASSERT (z == 0.0); ASSERT (memcmp (&z, &zero, sizeof z) != 0); return 0; } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copysignf.c������������������������������������������������������0000664�0000000�0000000�00000004665�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysignf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (copysignf, float, (float, float)); #include "macros.h" #include "minus-zero.h" #include <string.h> volatile float x; volatile float y; float z; float zero = 0.0f; int main () { /* A particular value in the first quadrant. */ x = 0.6f; y = 0.8f; z = copysignf (x, y); ASSERT (z == 0.6f); /* A particular value in the second quadrant. */ x = -0.6f; y = 0.8f; z = copysignf (x, y); ASSERT (z == 0.6f); /* A particular value in the third quadrant. */ x = -0.6f; y = -0.8f; z = copysignf (x, y); ASSERT (z == -0.6f); /* A particular value in the fourth quadrant. */ x = 0.6f; y = -0.8f; z = copysignf (x, y); ASSERT (z == -0.6f); /* From signed zero. */ x = 1.0f; y = 0.0f; z = copysignf (x, y); ASSERT (z == 1.0f); x = 1.0f; y = minus_zerof; z = copysignf (x, y); /* Assume all gnulib targets support -0.0f, until proven otherwise. */ ASSERT (z == -1.0f); x = -1.0f; y = 0.0f; z = copysignf (x, y); ASSERT (z == 1.0f); x = -1.0f; y = minus_zerof; z = copysignf (x, y); ASSERT (z == -1.0f); /* To signed zero. */ x = 0.0f; y = 1.0f; z = copysignf (x, y); ASSERT (z == 0.0f); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = 0.0f; y = -1.0f; z = copysignf (x, y); ASSERT (z == 0.0f); ASSERT (memcmp (&z, &zero, sizeof z) != 0); x = minus_zerof; y = 1.0f; z = copysignf (x, y); ASSERT (z == 0.0f); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = minus_zerof; y = -1.0f; z = copysignf (x, y); ASSERT (z == 0.0f); ASSERT (memcmp (&z, &zero, sizeof z) != 0); return 0; } ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-copysignl.c������������������������������������������������������0000664�0000000�0000000�00000004737�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysignl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (copysignl, long double, (long double, long double)); #include "macros.h" #include "minus-zero.h" #include <string.h> volatile long double x; volatile long double y; long double z; long double zero = 0.0L; int main () { /* A particular value in the first quadrant. */ x = 0.6L; y = 0.8L; z = copysignl (x, y); ASSERT (z == 0.6L); /* A particular value in the second quadrant. */ x = -0.6L; y = 0.8L; z = copysignl (x, y); ASSERT (z == 0.6L); /* A particular value in the third quadrant. */ x = -0.6L; y = -0.8L; z = copysignl (x, y); ASSERT (z == -0.6L); /* A particular value in the fourth quadrant. */ x = 0.6L; y = -0.8L; z = copysignl (x, y); ASSERT (z == -0.6L); /* From signed zero. */ x = 1.0L; y = 0.0L; z = copysignl (x, y); ASSERT (z == 1.0L); x = 1.0L; y = minus_zerol; z = copysignl (x, y); /* Assume all gnulib targets support -0.0L, until proven otherwise. */ ASSERT (z == -1.0L); x = -1.0L; y = 0.0L; z = copysignl (x, y); ASSERT (z == 1.0L); x = -1.0L; y = minus_zerol; z = copysignl (x, y); ASSERT (z == -1.0L); /* To signed zero. */ x = 0.0L; y = 1.0L; z = copysignl (x, y); ASSERT (z == 0.0L); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = 0.0L; y = -1.0L; z = copysignl (x, y); ASSERT (z == 0.0L); ASSERT (memcmp (&z, &zero, sizeof z) != 0); x = minus_zerol; y = 1.0L; z = copysignl (x, y); ASSERT (z == 0.0L); ASSERT (memcmp (&z, &zero, sizeof z) == 0); x = minus_zerol; y = -1.0L; z = copysignl (x, y); ASSERT (z == 0.0L); ASSERT (memcmp (&z, &zero, sizeof z) != 0); return 0; } ���������������������������������gnulib-20210822~d383792/tests/test-cos.c������������������������������������������������������������0000664�0000000�0000000�00000002072�14110572173�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cos() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cos, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = cos (x); ASSERT (y >= 0.8253356149 && y <= 0.8253356150); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cosf.c�����������������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cosf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = cosf (x); ASSERT (y >= 0.8253355f && y <= 0.8253357f); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cosh.c�����������������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosh() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cosh, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = cosh (x); ASSERT (y >= 1.185465218 && y <= 1.185465219); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-coshf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of coshf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (coshf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = coshf (x); ASSERT (y >= 1.1854652f && y <= 1.1854653f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-cosl.c�����������������������������������������������������������0000664�0000000�0000000�00000002246�14110572173�0017526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (cosl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = cosl (x); ASSERT (y >= 0.8253356149L && y <= 0.8253356150L); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-count-leading-zeros.c��������������������������������������������0000664�0000000�0000000�00000006470�14110572173�0022462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2012-2021 Free Software Foundation, Inc. * * This 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 Eric Blake. */ #include <config.h> #include "count-leading-zeros.h" #include <limits.h> #include <stdio.h> #include "macros.h" #define UINT_BIT (sizeof (unsigned int) * CHAR_BIT) #define ULONG_BIT (sizeof (unsigned long int) * CHAR_BIT) #define ULLONG_BIT (sizeof (unsigned long long int) * CHAR_BIT) int main (int argc, char *argv[]) { int i, j; #define TEST_COUNT_LEADING_ZEROS(FUNC, TYPE, BITS, MAX, ONE) \ ASSERT (FUNC (0) == BITS); \ for (i = 0; i < BITS; i++) \ { \ ASSERT (FUNC (ONE << i) == BITS - i - 1); \ for (j = 0; j < i; j++) \ ASSERT (FUNC ((ONE << i) | (ONE << j)) == BITS - i - 1); \ } \ for (i = 0; i < 1000; i++) \ { \ /* RAND_MAX is most often 0x7fff or 0x7fffffff. */ \ TYPE value = \ (RAND_MAX <= 0xffff \ ? ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 12) \ ^ (((TYPE) rand () >> 3) << 24) \ ^ (((TYPE) rand () >> 3) << 30 << 6) \ ^ (((TYPE) rand () >> 3) << 30 << 18) \ ^ (((TYPE) rand () >> 3) << 30 << 30) \ : ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 22) \ ^ (((TYPE) rand () >> 3) << 22 << 22)); \ int count = 0; \ for (j = 0; j < BITS; j++) \ if (value & (ONE << j)) \ count = BITS - j - 1; \ ASSERT (count == FUNC (value)); \ } \ ASSERT (FUNC (MAX) == 0); TEST_COUNT_LEADING_ZEROS (count_leading_zeros, unsigned int, UINT_BIT, UINT_MAX, 1U); TEST_COUNT_LEADING_ZEROS (count_leading_zeros_l, unsigned long int, ULONG_BIT, ULONG_MAX, 1UL); TEST_COUNT_LEADING_ZEROS (count_leading_zeros_ll, unsigned long long int, ULLONG_BIT, ULLONG_MAX, 1ULL); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-count-one-bits.c�������������������������������������������������0000664�0000000�0000000�00000005761�14110572173�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2007-2021 Free Software Foundation, Inc. * * This 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 Ben Pfaff. */ #include <config.h> #include "count-one-bits.h" #include <limits.h> #include <stdio.h> #include "macros.h" #define UINT_BIT (sizeof (unsigned int) * CHAR_BIT) #define ULONG_BIT (sizeof (unsigned long int) * CHAR_BIT) #define ULLONG_BIT (sizeof (unsigned long long int) * CHAR_BIT) int main (int argc, char *argv[]) { int i, j; #define TEST_COUNT_ONE_BITS(FUNC, TYPE, BITS, MAX, ONE) \ ASSERT (FUNC (0) == 0); \ for (i = 0; i < BITS; i++) \ { \ ASSERT (FUNC (ONE << i) == 1); \ for (j = i + 1; j < BITS; j++) \ ASSERT (FUNC ((ONE << i) | (ONE << j)) == 2); \ } \ for (i = 0; i < 1000; i++) \ { \ /* RAND_MAX is most often 0x7fff or 0x7fffffff. */ \ TYPE value = \ (RAND_MAX <= 0xffff \ ? ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 12) \ ^ (((TYPE) rand () >> 3) << 24) \ ^ (((TYPE) rand () >> 3) << 30 << 6) \ ^ (((TYPE) rand () >> 3) << 30 << 18) \ ^ (((TYPE) rand () >> 3) << 30 << 30) \ : ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 22) \ ^ (((TYPE) rand () >> 3) << 22 << 22)); \ int count = 0; \ for (j = 0; j < BITS; j++) \ count += (value & (ONE << j)) != 0; \ ASSERT (count == FUNC (value)); \ } \ ASSERT (FUNC (MAX) == BITS); TEST_COUNT_ONE_BITS (count_one_bits, unsigned int, UINT_BIT, UINT_MAX, 1U); TEST_COUNT_ONE_BITS (count_one_bits_l, unsigned long int, ULONG_BIT, ULONG_MAX, 1UL); TEST_COUNT_ONE_BITS (count_one_bits_ll, unsigned long long int, ULLONG_BIT, ULLONG_MAX, 1ULL); return 0; } ���������������gnulib-20210822~d383792/tests/test-count-trailing-zeros.c�������������������������������������������0000664�0000000�0000000�00000006412�14110572173�0022664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test counting of trailing zeros. Copyright (C) 2013-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "count-trailing-zeros.h" #include <limits.h> #include <stdio.h> #include "macros.h" #define UINT_BIT (sizeof (unsigned int) * CHAR_BIT) #define ULONG_BIT (sizeof (unsigned long int) * CHAR_BIT) #define ULLONG_BIT (sizeof (unsigned long long int) * CHAR_BIT) int main (int argc, char *argv[]) { int i, j; #define TEST_COUNT_TRAILING_ZEROS(FUNC, TYPE, BITS, MAX, ONE) \ ASSERT (FUNC (0) == BITS); \ for (i = 0; i < BITS; i++) \ { \ ASSERT (FUNC (ONE << i) == i); \ for (j = 0; j < i; j++) \ ASSERT (FUNC ((ONE << i) | (ONE << j)) == j); \ } \ for (i = 0; i < 1000; i++) \ { \ /* RAND_MAX is most often 0x7fff or 0x7fffffff. */ \ TYPE value = \ (RAND_MAX <= 0xffff \ ? ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 12) \ ^ (((TYPE) rand () >> 3) << 24) \ ^ (((TYPE) rand () >> 3) << 30 << 6) \ ^ (((TYPE) rand () >> 3) << 30 << 18) \ ^ (((TYPE) rand () >> 3) << 30 << 30) \ : ((TYPE) rand () >> 3) \ ^ (((TYPE) rand () >> 3) << 22) \ ^ (((TYPE) rand () >> 3) << 22 << 22)); \ int count = 0; \ for (j = BITS - 1; 0 <= j; j--) \ if (value & (ONE << j)) \ count = j; \ ASSERT (count == FUNC (value)); \ } \ ASSERT (FUNC (MAX) == 0); TEST_COUNT_TRAILING_ZEROS (count_trailing_zeros, unsigned int, UINT_BIT, UINT_MAX, 1U); TEST_COUNT_TRAILING_ZEROS (count_trailing_zeros_l, unsigned long int, ULONG_BIT, ULONG_MAX, 1UL); TEST_COUNT_TRAILING_ZEROS (count_trailing_zeros_ll, unsigned long long int, ULLONG_BIT, ULLONG_MAX, 1ULL); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-crc.c������������������������������������������������������������0000664�0000000�0000000�00000002625�14110572173�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005-2007, 2010-2021 Free Software Foundation, Inc. * * This 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 Simon Josefsson. */ #include <config.h> #include "crc.h" #include <stdio.h> int main (int argc, char *argv[]) { uint32_t p; p = crc32_update_no_xor (42, "foo", 3); if (p != 0x46e87f05) { printf ("cunx got %lx\n", (unsigned long) p); return 1; } p = crc32_no_xor ("foo", 3); if (p != 0x7332bc33) { printf ("cnx got %lx\n", (unsigned long) p); return 1; } p = crc32_update (42, "foo", 3); if (p != 0xb9a9a617) { printf ("cu got %lx\n", (unsigned long) p); return 1; } p = crc32 ("foo", 3); if (p != 0x8c736521) { printf ("c got %lx\n", (unsigned long) p); return 1; } return 0; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-creat.c����������������������������������������������������������0000664�0000000�0000000�00000003144�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of creating a file. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <fcntl.h> #include "signature.h" SIGNATURE_CHECK (creat, int, (const char *, mode_t)); #include <errno.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-creat.t" int main (void) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); unlink (BASE "e.exe"); /* Cannot create directory. */ errno = 0; ASSERT (creat ("nonexist.ent/", 0600) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Create a regular file. */ fd = creat (BASE "file", 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Create an executable regular file. */ fd = creat (BASE "e.exe", 0700); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "e.exe") == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ctype-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000001743�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <ctype.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <ctype.h> #include "signature.h" #if 0 SIGNATURE_CHECK (GNULIB_NAMESPACE::isblank, int, (int)); #endif int main () { } �����������������������������gnulib-20210822~d383792/tests/test-ctype-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <ctype.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cctype> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ctype.c����������������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <ctype.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <ctype.h> int main (void) { return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-des.c������������������������������������������������������������0000664�0000000�0000000�00000014701�14110572173�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2007, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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/>. */ /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ #include <config.h> #include "des.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { /* * DES Maintenance Test */ { int i; char key[8] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }; char input[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; char result[8] = { 0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a }; char temp1[8], temp2[8], temp3[8]; gl_des_ctx des; for (i = 0; i < 64; ++i) { gl_des_setkey (&des, key); gl_des_ecb_encrypt (&des, input, temp1); gl_des_ecb_encrypt (&des, temp1, temp2); gl_des_setkey (&des, temp2); gl_des_ecb_decrypt (&des, temp1, temp3); memcpy (key, temp3, 8); memcpy (input, temp1, 8); } if (memcmp (temp3, result, 8)) return 1; } /* * Self made Triple-DES test (Does somebody know an official test?) */ { int i; char input[8] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; char key1[8] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 }; char key2[8] = { 0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd }; char result[8] = { 0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3 }; gl_3des_ctx des3; for (i = 0; i < 16; ++i) { gl_3des_set2keys (&des3, key1, key2); gl_3des_ecb_encrypt (&des3, input, key1); gl_3des_ecb_decrypt (&des3, input, key2); gl_3des_set3keys (&des3, key1, input, key2); gl_3des_ecb_encrypt (&des3, input, input); } if (memcmp (input, result, 8)) return 1; } /* * More Triple-DES test. These are testvectors as used by SSLeay, * thanks to Jeroen C. van Gelderen. */ { struct { char key[24]; char plain[8]; char cipher[8]; } testdata[] = { { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, { 0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00}, { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, { 0x9D, 0x64, 0x55, 0x5A, 0x9A, 0x10, 0xB8, 0x52,}, { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00} }, { { 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E, 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E, 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, { 0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, { 0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A} }, { { 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6, 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6, 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, { 0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, { 0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95} }, { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, { 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61}, { 0x3D, 0x12, 0x4F, 0xE2, 0x19, 0x8B, 0xA3, 0x18} }, { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, { 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61}, { 0xFB, 0xAB, 0xA1, 0xFF, 0x9D, 0x05, 0xE9, 0xB1} }, { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, { 0x73, 0x6F, 0x6D, 0x65, 0x64, 0x61, 0x74, 0x61}, { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72} }, { { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17, 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98, 0x64, 0x05, 0x6A, 0xBD, 0xFE, 0xA9, 0x34, 0x57}, { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6C, 0x65}, { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30} }, { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0xe6, 0xe6, 0xdd, 0x5b, 0x7e, 0x72, 0x29, 0x74} }, { { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20, 0x91, 0x07, 0xD0, 0x15, 0x89, 0x19, 0x01, 0x01, 0x19, 0x07, 0x92, 0x10, 0x98, 0x1A, 0x01, 0x01}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b} } }; char result[8]; int i; gl_3des_ctx des3; for (i = 0; i < sizeof (testdata) / sizeof (*testdata); ++i) { gl_3des_set3keys (&des3, testdata[i].key, testdata[i].key + 8, testdata[i].key + 16); gl_3des_ecb_encrypt (&des3, testdata[i].plain, result); if (memcmp (testdata[i].cipher, result, 8)) { return 1; } gl_3des_ecb_decrypt (&des3, testdata[i].cipher, result); if (memcmp (testdata[i].plain, result, 8)) { return 1; } } } return 0; } ���������������������������������������������������������������gnulib-20210822~d383792/tests/test-dfa-invalid-char-class.sh����������������������������������������0000775�0000000�0000000�00000002014�14110572173�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This use of our DFA-testing helper would fail for grep-2.21. # Copyright 2014-2021 Free Software Foundation, Inc. # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ ../src # Add "." to PATH for the use of test-dfa-match-aux. path_prepend_ . fail=0 echo 'dfaerror: invalid character class' > exp LC_ALL=C ${CHECKER} test-dfa-match-aux '[[:foo:]]' a > out 2>&1 compare exp out || fail=1 Exit $fail ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dfa-invalid-merge.sh���������������������������������������������0000775�0000000�0000000�00000002113�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # The DFA matcher would wrongly convert a regular expression like # a+a+a to a+a, thus possibly reporting a false match. # Introduced in v0.1-2111-g4299106ce # Copyright 2020-2021 Free Software Foundation, Inc. # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ ../src # Add "." to PATH for the use of test-dfa-match-aux. path_prepend_ . fail=0 LC_ALL=C returns_ 0 ${CHECKER} test-dfa-match-aux 'x+x+x+' xx > out 2>&1 compare /dev/null out || fail=1 Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dfa-match-aux.c��������������������������������������������������0000664�0000000�0000000�00000003474�14110572173�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary program to test a DFA code path that cannot be triggered by grep or gawk. Copyright 2014-2021 Free Software Foundation, Inc. This 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, 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, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <regex.h> #include <dfa.h> #include <localeinfo.h> _Noreturn void dfaerror (char const *mesg) { printf ("dfaerror: %s\n", mesg); exit (EXIT_FAILURE); } static int exit_status = EXIT_SUCCESS; void dfawarn (char const *mesg) { printf ("dfawarn: %s\n", mesg); exit_status = EXIT_FAILURE; } int main (int argc, char **argv) { struct dfa *dfa; char *beg, *end, *p; int allow_nl; struct localeinfo localeinfo; if (argc < 3) exit (EXIT_FAILURE); setlocale (LC_ALL, ""); init_localeinfo (&localeinfo); dfa = dfaalloc (); dfasyntax (dfa, &localeinfo, RE_SYNTAX_EGREP | RE_NO_EMPTY_RANGES, 0); dfacomp (argv[1], strlen (argv[1]), dfa, 0); beg = argv[2]; end = argv[2] + strlen (argv[2]); allow_nl = argc > 3 && atoi (argv[3]); p = dfaexec (dfa, beg, end, allow_nl, NULL, NULL); if (p != NULL) printf ("%zd\n", p - beg); exit (exit_status); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dfa-match.sh�����������������������������������������������������0000775�0000000�0000000�00000002623�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This would fail with grep-2.21's dfa.c. # Copyright 2014-2021 Free Software Foundation, Inc. # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ ../src # Add "." to PATH for the use of test-dfa-match-aux. path_prepend_ . if (type timeout) >/dev/null 2>&1; then # Busybox's timeout required -t until its 1.30.0 release on 2018-12-31, # after which it became compatible with coreutils' timeout. if timeout --help 2>&1 | grep BusyBox && timeout -t 0 true; then timeout_10='timeout -t 10' else timeout_10='timeout 10' fi else timeout_10= fi fail=0 ${CHECKER} test-dfa-match-aux a ba 0 > out || fail=1 compare /dev/null out || fail=1 in=$(printf "bb\nbb") $timeout_10 ${CHECKER} test-dfa-match-aux a "$in" 1 > out || fail=1 compare /dev/null out || fail=1 Exit $fail �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-di-set.c���������������������������������������������������������0000664�0000000�0000000�00000003507�14110572173�0017754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the di-set module. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "di-set.h" #include "macros.h" int main (void) { struct di_set *dis = di_set_alloc (); ASSERT (dis); di_set_free (dis); /* free with dis->ino_map still being NULL */ dis = di_set_alloc (); ASSERT (dis); ASSERT (di_set_lookup (dis, 2, 5) == 0); /* initial lookup fails */ ASSERT (di_set_insert (dis, 2, 5) == 1); /* first insertion succeeds */ ASSERT (di_set_insert (dis, 2, 5) == 0); /* duplicate fails */ ASSERT (di_set_insert (dis, 3, 5) == 1); /* diff dev, duplicate inode is ok */ ASSERT (di_set_insert (dis, 2, 8) == 1); /* same dev, different inode is ok */ ASSERT (di_set_lookup (dis, 2, 5) == 1); /* now, the lookup succeeds */ /* very large (or negative) inode number */ ASSERT (di_set_insert (dis, 5, (ino_t) -1) == 1); ASSERT (di_set_insert (dis, 5, (ino_t) -1) == 0); /* dup */ { unsigned int i; for (i = 0; i < 3000; i++) ASSERT (di_set_insert (dis, 9, i) == 1); for (i = 0; i < 3000; i++) ASSERT (di_set_insert (dis, 9, i) == 0); /* duplicate fails */ } di_set_free (dis); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-digest.h���������������������������������������������������������0000664�0000000�0000000�00000011167�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of message digests. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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/>. */ static void test_digest_on_files (int (*streamfunc) (FILE *, void *), const char *streamfunc_name, size_t digest_size, const void *expected_for_empty_file, const void *expected_for_small_file, const void *expected_for_large_file) { int pass; unlink (TESTFILE); for (pass = 0; pass < 5; pass++) { { FILE *fp = fopen (TESTFILE, "wb"); if (fp == NULL) { fprintf (stderr, "Could not create file %s.\n", TESTFILE); exit (1); } switch (pass) { case 0: /* Nothing to do for the empty file. */ break; case 2: /* Fill the small file, with some header that will be skipped. */ fputs ("ABCD", fp); FALLTHROUGH; case 1: /* Fill the small file. */ fputs ("The quick brown fox jumps over the lazy dog.\n", fp); break; case 4: /* Fill the large file, with some header that will be skipped. */ fputs ("ABCD", fp); FALLTHROUGH; case 3: /* Fill the large file (8 MiB). */ { unsigned int i; for (i = 0; i < 0x400000; i++) { unsigned char c[2]; unsigned int j = i * (i-1) * (i-5); c[0] = (unsigned char)(j >> 6); c[1] = (i % 499) + (i % 101); fwrite (c, 1, 2, fp); } } break; } if (ferror (fp)) { fprintf (stderr, "Could not write data to file %s.\n", TESTFILE); exit (1); } fclose (fp); } { /* Test an unaligned digest. */ char *digest = (char *) malloc (digest_size + 1) + 1; const void *expected; FILE *fp; int ret; switch (pass) { case 0: expected = expected_for_empty_file; break; case 1: case 2: expected = expected_for_small_file; break; case 3: case 4: expected = expected_for_large_file; break; default: abort (); } fp = fopen (TESTFILE, "rb"); if (fp == NULL) { fprintf (stderr, "Could not open file %s.\n", TESTFILE); exit (1); } switch (pass) { case 2: case 4: { char header[4]; if (fread (header, 1, sizeof (header), fp) != sizeof (header)) { fprintf (stderr, "Could not read the header of %s.\n", TESTFILE); exit (1); } } break; } ret = streamfunc (fp, digest); if (ret) { fprintf (stderr, "%s failed with error %d\n", streamfunc_name, -ret); exit (1); } if (memcmp (digest, expected, digest_size) != 0) { size_t i; fprintf (stderr, "%s produced wrong result.\n", streamfunc_name); fprintf (stderr, "Expected: "); for (i = 0; i < digest_size; i++) fprintf (stderr, "\\x%02x", ((const unsigned char *) expected)[i]); fprintf (stderr, "\n"); fprintf (stderr, "Got: "); for (i = 0; i < digest_size; i++) fprintf (stderr, "\\x%02x", ((const unsigned char *) digest)[i]); fprintf (stderr, "\n"); exit (1); } /* Verify that fp is now positioned at end of file. */ if (getc (fp) != EOF) { fprintf (stderr, "%s left the stream not at EOF\n", streamfunc_name); exit (1); } fclose (fp); free (digest - 1); } } unlink (TESTFILE); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dirent-c++.cc����������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <dirent.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <dirent.h> #include "signature.h" #if GNULIB_TEST_OPENDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::opendir, DIR *, (const char *)); #endif #if GNULIB_TEST_READDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::readdir, struct dirent *, (DIR *)); #endif #if GNULIB_TEST_REWINDDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::rewinddir, void, (DIR *)); #endif #if GNULIB_TEST_CLOSEDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::closedir, int, (DIR *)); #endif #if GNULIB_TEST_DIRFD SIGNATURE_CHECK (GNULIB_NAMESPACE::dirfd, int, (DIR *)); #endif #if GNULIB_TEST_FDOPENDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::fdopendir, DIR *, (int)); #endif #if GNULIB_TEST_SCANDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::scandir, int, (const char *, struct dirent ***, int (*) (const struct dirent *), int (*) (const struct dirent **, const struct dirent **))); #endif #if GNULIB_TEST_ALPHASORT SIGNATURE_CHECK (GNULIB_NAMESPACE::alphasort, int, (const struct dirent **, const struct dirent **)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dirent-safer.c���������������������������������������������������0000664�0000000�0000000�00000005471�14110572173�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that directory streams leave standard fds alone. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "dirent--.h" #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> /* This test intentionally closes 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; int main (void) { int i; DIR *dp; /* The dirent-safer module works without the use of fdopendir (which would also pull in fchdir and openat); but if those modules were also used, we ensure that they are safe. In particular, the gnulib version of fdopendir is unable to guarantee that dirfd(fdopendir(fd))==fd, but we can at least guarantee that if they are not equal, the fd returned by dirfd is safe. */ #if HAVE_FDOPENDIR || GNULIB_TEST_FDOPENDIR int dfd; #endif /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; #if HAVE_FDOPENDIR || GNULIB_TEST_FDOPENDIR dfd = open (".", O_RDONLY); ASSERT (STDERR_FILENO < dfd); #endif /* Four iterations, with progressively more standard descriptors closed. */ for (i = -1; i <= STDERR_FILENO; i++) { if (0 <= i) ASSERT (close (i) == 0); dp = opendir ("."); ASSERT (dp); ASSERT (dirfd (dp) == -1 || STDERR_FILENO < dirfd (dp)); ASSERT (closedir (dp) == 0); #if HAVE_FDOPENDIR || GNULIB_TEST_FDOPENDIR { int fd = fcntl (dfd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); ASSERT (STDERR_FILENO < fd); dp = fdopendir (fd); ASSERT (dp); ASSERT (dirfd (dp) == -1 || STDERR_FILENO < dirfd (dp)); ASSERT (closedir (dp) == 0); errno = 0; ASSERT (close (fd) == -1); ASSERT (errno == EBADF); } #endif } #if HAVE_FDOPENDIR || GNULIB_TEST_FDOPENDIR ASSERT (close (dfd) == 0); #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dirent.c���������������������������������������������������������0000664�0000000�0000000�00000001744�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <dirent.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <dirent.h> /* Check for existence of required types. */ _GL_UNUSED static DIR *dir; static struct dirent d; static ino_t i; int main (void) { return d.d_name[0] + i; } ����������������������������gnulib-20210822~d383792/tests/test-dirname.c��������������������������������������������������������0000664�0000000�0000000�00000020636�14110572173�0020210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the gnulib dirname module. Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc. This 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 "dirname.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> struct test { const char *name; /* Name under test. */ const char *dir; /* dir_name (name). */ const char *last; /* last_component (name). */ const char *base; /* base_name (name). */ const char *stripped; /* name after strip_trailing_slashes (name). */ bool modified; /* result of strip_trailing_slashes (name). */ bool absolute; /* IS_ABSOLUTE_FILE_NAME (name). */ }; static struct test tests[] = { {"d/f", "d", "f", "f", "d/f", false, false}, {"/d/f", "/d", "f", "f", "/d/f", false, true}, {"d/f/", "d", "f/", "f/", "d/f", true, false}, {"d/f//", "d", "f//", "f/", "d/f", true, false}, {"f", ".", "f", "f", "f", false, false}, {"/", "/", "", "/", "/", false, true}, #if DOUBLE_SLASH_IS_DISTINCT_ROOT {"//", "//", "", "//", "//", false, true}, {"//d", "//", "d", "d", "//d", false, true}, #else {"//", "/", "", "/", "/", true, true}, {"//d", "/", "d", "d", "//d", false, true}, #endif {"///", "/", "", "/", "/", true, true}, {"///a///", "/", "a///", "a/", "///a", true, true}, /* POSIX requires dirname("") and basename("") to both return ".", but dir_name and base_name are defined differently. */ {"", ".", "", "", "", false, false}, {".", ".", ".", ".", ".", false, false}, {"..", ".", "..", "..", "..", false, false}, #if ISSLASH ('\\') {"a\\", ".", "a\\", "a\\", "a", true, false}, {"a\\b", "a", "b", "b", "a\\b", false, false}, {"\\", "\\", "", "\\", "\\", false, true}, {"\\/\\", "\\", "", "\\", "\\", true, true}, {"\\\\/", "\\", "", "\\", "\\", true, true}, {"\\//", "\\", "", "\\", "\\", true, true}, {"//\\", "/", "", "/", "/", true, true}, #else {"a\\", ".", "a\\", "a\\", "a\\", false, false}, {"a\\b", ".", "a\\b", "a\\b", "a\\b", false, false}, {"\\", ".", "\\", "\\", "\\", false, false}, {"\\/\\", "\\", "\\", "\\", "\\/\\",false, false}, {"\\\\/", ".", "\\\\/","\\\\/","\\\\", true, false}, {"\\//", ".", "\\//", "\\/", "\\", true, false}, # if DOUBLE_SLASH_IS_DISTINCT_ROOT {"//\\", "//", "\\", "\\", "//\\", false, true}, # else {"//\\", "/", "\\", "\\", "//\\", false, true}, # endif #endif #if ISSLASH ('\\') # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE {"c:", "c:", "", "c:", "c:", false, false}, {"c:/", "c:/", "", "c:/", "c:/", false, true}, {"c://", "c:/", "", "c:/", "c:/", true, true}, {"c:/d", "c:/", "d", "d", "c:/d", false, true}, {"c://d", "c:/", "d", "d", "c://d",false, true}, {"c:/d/", "c:/", "d/", "d/", "c:/d", true, true}, {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, {"c:d", "c:.", "d", "d", "c:d", false, false}, {"c:d/", "c:.", "d/", "d/", "c:d", true, false}, {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, {"a:b:c", "a:.", "b:c", "./b:c","a:b:c",false, false}, {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, # else /* ! FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE */ {"c:", "c:", "", "c:", "c:", false, true}, {"c:/", "c:", "", "c:", "c:", true, true}, {"c://", "c:", "", "c:", "c:", true, true}, {"c:/d", "c:", "d", "d", "c:/d", false, true}, {"c://d", "c:", "d", "d", "c://d",false, true}, {"c:/d/", "c:", "d/", "d/", "c:/d", true, true}, {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, {"c:d", "c:", "d", "d", "c:d", false, true}, {"c:d/", "c:", "d/", "d/", "c:d", true, true}, {"c:d/f", "c:d", "f", "f", "c:d/f",false, true}, {"a:b:c", "a:", "b:c", "./b:c","a:b:c",false, true}, {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, # endif #else /* ! ISSLASH ('\\') */ {"c:", ".", "c:", "c:", "c:", false, false}, {"c:/", ".", "c:/", "c:/", "c:", true, false}, {"c://", ".", "c://", "c:/", "c:", true, false}, {"c:/d", "c:", "d", "d", "c:/d", false, false}, {"c://d", "c:", "d", "d", "c://d",false, false}, {"c:/d/", "c:", "d/", "d/", "c:/d", true, false}, {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, false}, {"c:d", ".", "c:d", "c:d", "c:d", false, false}, {"c:d/", ".", "c:d/", "c:d/", "c:d", true, false}, {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, {"a:b:c", ".", "a:b:c","a:b:c","a:b:c",false, false}, {"a/b:c", "a", "b:c", "b:c", "a/b:c",false, false}, {"a/b:c/", "a", "b:c/", "b:c/", "a/b:c",true, false}, #endif {"1:", ".", "1:", "1:", "1:", false, false}, {"1:/", ".", "1:/", "1:/", "1:", true, false}, {"/:", "/", ":", ":", "/:", false, true}, {"/:/", "/", ":/", ":/", "/:", true, true}, /* End sentinel. */ {NULL, NULL, NULL, NULL, NULL, false, false} }; int main (void) { struct test *t; bool ok = true; for (t = tests; t->name; t++) { char *dir = dir_name (t->name); int dirlen = dir_len (t->name); char *last = last_component (t->name); char *base = base_name (t->name); int baselen = base_len (base); char *stripped = strdup (t->name); bool modified = strip_trailing_slashes (stripped); bool absolute = IS_ABSOLUTE_FILE_NAME (t->name); if (! (strcmp (dir, t->dir) == 0 && (dirlen == strlen (dir) || (dirlen + 1 == strlen (dir) && dir[dirlen] == '.')))) { ok = false; printf ("dir_name '%s': got '%s' len %d," " expected '%s' len %lu\n", t->name, dir, dirlen, t->dir, (unsigned long) strlen (t->dir)); } if (strcmp (last, t->last)) { ok = false; printf ("last_component '%s': got '%s', expected '%s'\n", t->name, last, t->last); } if (! (strcmp (base, t->base) == 0 && (baselen == strlen (base) || (baselen + 1 == strlen (base) && ISSLASH (base[baselen]))))) { ok = false; printf ("base_name '%s': got '%s' len %d," " expected '%s' len %lu\n", t->name, base, baselen, t->base, (unsigned long) strlen (t->base)); } if (strcmp (stripped, t->stripped) || modified != t->modified) { ok = false; printf ("strip_trailing_slashes '%s': got %s %s, expected %s %s\n", t->name, stripped, modified ? "changed" : "unchanged", t->stripped, t->modified ? "changed" : "unchanged"); } if (t->absolute != absolute) { ok = false; printf ("'%s': got %s, expected %s\n", t->name, absolute ? "absolute" : "relative", t->absolute ? "absolute" : "relative"); } free (dir); free (base); free (stripped); } return ok ? 0 : 1; } ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000012437�14110572173�0021377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible dprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (dprintf, int, (int, const char *, ...)); #include <stddef.h> #include <stdint.h> #include <string.h> #include "infinity.h" #include "macros.h" static void test_function (int (*my_dprintf) (int, const char *, ...)) { /* Here we don't test output that may be platform dependent. The bulk of the tests is done as part of the 'vasnprintf-posix' module. */ /* Test support of size specifiers as in C99. */ my_dprintf (fileno (stdout), "%ju %d\n", (uintmax_t) 12345671, 33, 44, 55); my_dprintf (fileno (stdout), "%zu %d\n", (size_t) 12345672, 33, 44, 55); my_dprintf (fileno (stdout), "%tu %d\n", (ptrdiff_t) 12345673, 33, 44, 55); /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ /* Positive zero. */ my_dprintf (fileno (stdout), "%a %d\n", 0.0, 33, 44, 55); /* Positive infinity. */ my_dprintf (fileno (stdout), "%a %d\n", Infinityd (), 33, 44, 55); /* Negative infinity. */ my_dprintf (fileno (stdout), "%a %d\n", - Infinityd (), 33, 44, 55); /* FLAG_ZERO with infinite number. */ my_dprintf (fileno (stdout), "%010a %d\n", Infinityd (), 33, 44, 55); /* Test the support of the %f format directive. */ /* A positive number. */ my_dprintf (fileno (stdout), "%f %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_dprintf (fileno (stdout), "%f %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_dprintf (fileno (stdout), "%f %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_dprintf (fileno (stdout), "%f %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_dprintf (fileno (stdout), "%015f %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_dprintf (fileno (stdout), "%.f %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_dprintf (fileno (stdout), "%.2f %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_dprintf (fileno (stdout), "%.2f %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_dprintf (fileno (stdout), "%Lf %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_dprintf (fileno (stdout), "%Lf %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_dprintf (fileno (stdout), "%Lf %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_dprintf (fileno (stdout), "%Lf %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_dprintf (fileno (stdout), "%015Lf %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_dprintf (fileno (stdout), "%.Lf %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_dprintf (fileno (stdout), "%.2Lf %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_dprintf (fileno (stdout), "%.2Lf %d\n", 999.996L, 33, 44, 55); /* Test the support of the %F format directive. */ /* A positive number. */ my_dprintf (fileno (stdout), "%F %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_dprintf (fileno (stdout), "%F %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_dprintf (fileno (stdout), "%F %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_dprintf (fileno (stdout), "%F %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_dprintf (fileno (stdout), "%015F %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_dprintf (fileno (stdout), "%.F %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_dprintf (fileno (stdout), "%.2F %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_dprintf (fileno (stdout), "%.2F %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_dprintf (fileno (stdout), "%LF %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_dprintf (fileno (stdout), "%LF %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_dprintf (fileno (stdout), "%LF %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_dprintf (fileno (stdout), "%LF %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_dprintf (fileno (stdout), "%015LF %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_dprintf (fileno (stdout), "%.LF %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_dprintf (fileno (stdout), "%.2LF %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_dprintf (fileno (stdout), "%.2LF %d\n", 999.996L, 33, 44, 55); /* Test the support of the POSIX/XSI format strings with positions. */ my_dprintf (fileno (stdout), "%2$d %1$d\n", 33, 55); } int main (int argc, char *argv[]) { test_function (dprintf); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000000604�14110572173�0021563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-dprintf-posix.tmp t-dprintf-posix.out" ${CHECKER} ./test-dprintf-posix${EXEEXT} > t-dprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-dprintf-posix.tmp > t-dprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-dprintf-posix.out result=$? rm -fr $tmpfiles exit $result ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dprintf-posix2.c�������������������������������������������������0000664�0000000�0000000�00000006372�14110572173�0021462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible dprintf() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #if HAVE_GETRLIMIT && HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #include "resource-ext.h" /* Test against a memory leak in the fprintf replacement. */ /* Number of iterations across the loop. */ #define NUM_ROUNDS 1000 /* Number of bytes that are allowed to escape per round. */ #define MAX_ALLOC_ROUND 10000 /* Number of bytes that are allowed to escape in total. This should be at least 10 MB, since it includes the normal memory or address space of the test program. */ #define MAX_ALLOC_TOTAL (NUM_ROUNDS * MAX_ALLOC_ROUND) int main (int argc, char *argv[]) { uintptr_t initial_rusage_as; int arg; int result; /* Limit the amount of malloc()ed memory to MAX_ALLOC_TOTAL or less. */ /* On AIX systems, malloc() is limited by RLIMIT_DATA. */ #if HAVE_GETRLIMIT && HAVE_SETRLIMIT && defined RLIMIT_DATA { struct rlimit limit; if (getrlimit (RLIMIT_DATA, &limit) >= 0) { if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > MAX_ALLOC_TOTAL) limit.rlim_max = MAX_ALLOC_TOTAL; limit.rlim_cur = limit.rlim_max; (void) setrlimit (RLIMIT_DATA, &limit); } } #endif /* On all systems except AIX and OpenBSD, malloc() is limited by RLIMIT_AS. On some systems, setrlimit of RLIMIT_AS doesn't work but get_rusage_as () does. Allow the address space size to grow by at most MAX_ALLOC_TOTAL. */ initial_rusage_as = get_rusage_as (); #if !defined _AIX if (initial_rusage_as == 0) return 77; #endif arg = atoi (argv[1]); if (arg == 0) { void *memory = malloc (MAX_ALLOC_TOTAL); if (memory == NULL) return 1; memset (memory, 17, MAX_ALLOC_TOTAL); result = 78; } else { /* Perform the test and test whether it triggers a permanent memory allocation of more than MAX_ALLOC_TOTAL bytes. */ int repeat; for (repeat = 0; repeat < NUM_ROUNDS; repeat++) { /* This may produce a temporary memory allocation of 11000 bytes. but should not result in a permanent memory allocation. */ if (dprintf (STDOUT_FILENO, "%011000d\n", 17) == -1 && errno == ENOMEM) return 1; } result = 0; } if (get_rusage_as () > initial_rusage_as + MAX_ALLOC_TOTAL) return 1; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dprintf-posix2.sh������������������������������������������������0000775�0000000�0000000�00000001173�14110572173�0021647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test against a memory leak. (${CHECKER} ./test-dprintf-posix2${EXEEXT} 0 result=$? if test $result != 77 && test $result != 78; then result=1; fi exit $result ) 2>/dev/null malloc_result=$? if test $malloc_result = 77; then echo "Skipping test: no way to determine address space size" exit 77 fi ${CHECKER} ./test-dprintf-posix2${EXEEXT} 1 > /dev/null result=$? if test $result = 77; then echo "Skipping test: no way to determine address space size" exit 77 fi if test $result != 0; then exit 1 fi if test $malloc_result = 78; then echo "Skipping test: get_rusage_as() doesn't work" exit 77 fi exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dprintf.c��������������������������������������������������������0000664�0000000�0000000�00000002315�14110572173�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dprintf() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (dprintf, int, (int, const char *, ...)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (int argc, char *argv[]) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (dprintf (-1, "test") == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (dprintf (99, "test") == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dup-safer.c������������������������������������������������������0000664�0000000�0000000�00000011645�14110572173�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that dup_safer leaves standard fds alone. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "unistd--.h" #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "binary-io.h" #include "cloexec.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #if !O_BINARY # define set_binary_mode(f,m) zero () static int zero (void) { return 0; } #endif /* This test intentionally closes 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is open and inheritable across exec/spawn. */ static bool is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } /* Return true if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static bool is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } #define witness "test-dup-safer.txt" int main (void) { int i; int fd; int bad_fd = getdtablesize (); /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; /* Create file for later checks. */ fd = creat (witness, 0600); ASSERT (STDERR_FILENO < fd); /* Four iterations, with progressively more standard descriptors closed. */ for (i = -1; i <= STDERR_FILENO; i++) { if (0 <= i) ASSERT (close (i) == 0); /* Detect errors. */ errno = 0; ASSERT (dup (-1) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup (bad_fd) == -1); ASSERT (errno == EBADF); close (fd + 1); errno = 0; ASSERT (dup (fd + 1) == -1); ASSERT (errno == EBADF); /* Preserve text vs. binary. */ set_binary_mode (fd, O_BINARY); ASSERT (dup (fd) == fd + 1); ASSERT (is_open (fd + 1)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd + 1, O_BINARY)); ASSERT (close (fd + 1) == 0); set_binary_mode (fd, O_TEXT); ASSERT (dup (fd) == fd + 1); ASSERT (is_open (fd + 1)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd + 1, O_TEXT)); /* Create cloexec copy. */ ASSERT (close (fd + 1) == 0); ASSERT (fd_safer_flag (dup_cloexec (fd), O_CLOEXEC) == fd + 1); ASSERT (set_cloexec_flag (fd + 1, true) == 0); ASSERT (is_open (fd + 1)); ASSERT (!is_inheritable (fd + 1)); ASSERT (close (fd) == 0); /* dup always creates inheritable copies. Also, check that earliest slot past std fds is used. */ ASSERT (dup (fd + 1) == fd); ASSERT (is_open (fd)); ASSERT (is_inheritable (fd)); ASSERT (close (fd + 1) == 0); } /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (witness) == 0); return 0; } �������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dup.c������������������������������������������������������������0000664�0000000�0000000�00000002201�14110572173�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating a file descriptor. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (dup, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (dup (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (dup (99) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dup2.c�����������������������������������������������������������0000664�0000000�0000000�00000014025�14110572173�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating file descriptors. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (dup2, int, (int, int)); #include <errno.h> #include <fcntl.h> #if HAVE_SYS_RESOURCE_H # include <sys/resource.h> #endif #include "binary-io.h" #if GNULIB_TEST_CLOEXEC # include "cloexec.h" #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "macros.h" /* Return non-zero if FD is open. */ static int is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } #if GNULIB_TEST_CLOEXEC /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; # else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; # endif } #endif /* GNULIB_TEST_CLOEXEC */ #if !O_BINARY # define set_binary_mode(f,m) zero () static int zero (void) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } int main (void) { const char *file = "test-dup2.tmp"; char buffer[1]; int bad_fd = getdtablesize (); int fd = open (file, O_CREAT | O_TRUNC | O_RDWR, 0600); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_open (fd)); /* Ignore any other fd's leaked into this process. */ close (fd + 1); close (fd + 2); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); /* Assigning to self must be a no-op. */ ASSERT (dup2 (fd, fd) == fd); ASSERT (is_open (fd)); /* The source must be valid. */ errno = 0; ASSERT (dup2 (-1, fd) == -1); ASSERT (errno == EBADF); close (99); errno = 0; ASSERT (dup2 (99, fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup2 (AT_FDCWD, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* If the source is not open, then the destination is unaffected. */ errno = 0; ASSERT (dup2 (fd + 1, fd + 1) == -1); ASSERT (errno == EBADF); ASSERT (!is_open (fd + 1)); errno = 0; ASSERT (dup2 (fd + 1, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* The destination must be valid. */ errno = 0; ASSERT (dup2 (fd, -2) == -1); ASSERT (errno == EBADF); if (bad_fd > 256) { ASSERT (dup2 (fd, 255) == 255); ASSERT (dup2 (fd, 256) == 256); ASSERT (close (255) == 0); ASSERT (close (256) == 0); } ASSERT (dup2 (fd, bad_fd - 1) == bad_fd - 1); ASSERT (close (bad_fd - 1) == 0); errno = 0; ASSERT (dup2 (fd, bad_fd) == -1); ASSERT (errno == EBADF); /* Using dup2 can skip fds. */ ASSERT (dup2 (fd, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); /* Verify that dup2 closes the previous occupant of a fd. */ ASSERT (open ("/dev/null", O_WRONLY, 0600) == fd + 1); ASSERT (dup2 (fd + 1, fd) == fd); ASSERT (close (fd + 1) == 0); ASSERT (write (fd, "1", 1) == 1); ASSERT (dup2 (fd + 2, fd) == fd); ASSERT (lseek (fd, 0, SEEK_END) == 0); ASSERT (write (fd + 2, "2", 1) == 1); ASSERT (lseek (fd, 0, SEEK_SET) == 0); ASSERT (read (fd, buffer, 1) == 1); ASSERT (*buffer == '2'); #if GNULIB_TEST_CLOEXEC /* Any new fd created by dup2 must not be cloexec. */ ASSERT (close (fd + 2) == 0); ASSERT (dup_cloexec (fd) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 1) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 2) == fd + 2); ASSERT (!is_inheritable (fd + 1)); ASSERT (is_inheritable (fd + 2)); errno = 0; ASSERT (dup2 (fd + 1, -1) == -1); ASSERT (errno == EBADF); ASSERT (!is_inheritable (fd + 1)); #endif /* On systems that distinguish between text and binary mode, dup2 reuses the mode of the source. */ set_binary_mode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_BINARY)); set_binary_mode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_TEXT)); /* Clean up. */ ASSERT (close (fd + 2) == 0); ASSERT (close (fd + 1) == 0); ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dup3.c�����������������������������������������������������������0000664�0000000�0000000�00000011467�14110572173�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating file descriptors. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009, and Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (dup3, int, (int, int, int)); #include <errno.h> #include <fcntl.h> #include <stdbool.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is not inherited to child processes. */ static bool is_cloexec (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; ASSERT (GetHandleInformation (h, &flags)); return (flags & HANDLE_FLAG_INHERIT) == 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFD)) >= 0); return (flags & FD_CLOEXEC) != 0; #endif } int main () { int use_cloexec; int bad_fd = getdtablesize (); #if O_CLOEXEC for (use_cloexec = 0; use_cloexec <= 1; use_cloexec++) #else use_cloexec = 0; #endif { const char *file = "test-dup3.tmp"; int fd = open (file, O_CREAT | O_TRUNC | O_RDWR, 0600); int o_flags; char buffer[1]; o_flags = 0; #if O_CLOEXEC if (use_cloexec) o_flags |= O_CLOEXEC; #endif /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_open (fd)); /* Ignore any other fd's leaked into this process. */ close (fd + 1); close (fd + 2); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); /* Assigning to self is invalid. */ errno = 0; ASSERT (dup3 (fd, fd, o_flags) == -1); ASSERT (errno == EINVAL); ASSERT (is_open (fd)); /* If the source is not open, then the destination is unaffected. */ errno = 0; ASSERT (dup3 (fd + 1, fd + 2, o_flags) == -1); ASSERT (errno == EBADF); ASSERT (!is_open (fd + 2)); errno = 0; ASSERT (dup3 (fd + 1, fd, o_flags) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* The destination must be valid. */ errno = 0; ASSERT (dup3 (fd, -2, o_flags) == -1); ASSERT (errno == EBADF); if (bad_fd > 256) { ASSERT (dup3 (fd, 255, 0) == 255); ASSERT (dup3 (fd, 256, 0) == 256); ASSERT (close (255) == 0); ASSERT (close (256) == 0); } ASSERT (dup3 (fd, bad_fd - 1, 0) == bad_fd - 1); ASSERT (close (bad_fd - 1) == 0); errno = 0; ASSERT (dup3 (fd, bad_fd, o_flags) == -1); ASSERT (errno == EBADF); /* Using dup3 can skip fds. */ ASSERT (dup3 (fd, fd + 2, o_flags) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); if (use_cloexec) ASSERT (is_cloexec (fd + 2)); else ASSERT (!is_cloexec (fd + 2)); /* Verify that dup3 closes the previous occupant of a fd. */ ASSERT (open ("/dev/null", O_WRONLY, 0600) == fd + 1); ASSERT (dup3 (fd + 1, fd, o_flags) == fd); ASSERT (close (fd + 1) == 0); ASSERT (write (fd, "1", 1) == 1); ASSERT (dup3 (fd + 2, fd, o_flags) == fd); ASSERT (lseek (fd, 0, SEEK_END) == 0); ASSERT (write (fd + 2, "2", 1) == 1); ASSERT (lseek (fd, 0, SEEK_SET) == 0); ASSERT (read (fd, buffer, 1) == 1); ASSERT (*buffer == '2'); /* Clean up. */ ASSERT (close (fd + 2) == 0); ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-duplocale.c������������������������������������������������������0000664�0000000�0000000�00000014552�14110572173�0020541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of duplicating a locale object. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <locale.h> #if HAVE_WORKING_DUPLOCALE #include "signature.h" SIGNATURE_CHECK (duplocale, locale_t, (locale_t)); #include <langinfo.h> #if HAVE_MONETARY_H # include <monetary.h> #endif #include <stdio.h> #include <string.h> #include "macros.h" struct locale_dependent_values { #if HAVE_MONETARY_H char monetary[100]; #endif char numeric[100]; char time[100]; }; static void get_locale_dependent_values (struct locale_dependent_values *result) { #if HAVE_MONETARY_H strfmon (result->monetary, sizeof (result->monetary), "%n", 123.75); /* result->monetary is usually "$123.75" */ #endif snprintf (result->numeric, sizeof (result->numeric), "%g", 3.5); /* result->numeric is usually "3,5" */ strncpy (result->time, nl_langinfo (MON_1), sizeof result->time - 1); result->time[sizeof result->time - 1] = '\0'; /* result->time is usually "janvier" */ } #if HAVE_WORKING_USELOCALE static int test_with_uselocale (void) { struct locale_dependent_values expected_results; locale_t mixed1; locale_t mixed2; locale_t perthread; /* Set up a locale which is a mix between different system locales. */ setlocale (LC_ALL, "en_US.UTF-8"); setlocale (LC_NUMERIC, "de_DE.UTF-8"); setlocale (LC_TIME, "fr_FR.UTF-8"); get_locale_dependent_values (&expected_results); /* Save the locale in a locale_t object. */ mixed1 = duplocale (LC_GLOBAL_LOCALE); ASSERT (mixed1 != NULL); /* Use a per-thread locale. */ perthread = newlocale (LC_ALL_MASK, "es_ES.UTF-8", NULL); if (perthread == NULL) return 1; uselocale (perthread); /* Save the locale in a locale_t object again. */ mixed2 = duplocale (LC_GLOBAL_LOCALE); ASSERT (mixed2 != NULL); /* Set up a default locale. */ setlocale (LC_ALL, "C"); uselocale (LC_GLOBAL_LOCALE); { struct locale_dependent_values c_results; get_locale_dependent_values (&c_results); } /* Now use the saved locale mixed1 again. */ setlocale (LC_ALL, "C"); uselocale (LC_GLOBAL_LOCALE); uselocale (mixed1); { struct locale_dependent_values results; get_locale_dependent_values (&results); # if HAVE_MONETARY_H ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); # endif ASSERT (strcmp (results.numeric, expected_results.numeric) == 0); ASSERT (strcmp (results.time, expected_results.time) == 0); } /* Now use the saved locale mixed2 again. */ setlocale (LC_ALL, "C"); uselocale (LC_GLOBAL_LOCALE); uselocale (mixed2); { struct locale_dependent_values results; get_locale_dependent_values (&results); # if HAVE_MONETARY_H ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); # endif ASSERT (strcmp (results.numeric, expected_results.numeric) == 0); ASSERT (strcmp (results.time, expected_results.time) == 0); } setlocale (LC_ALL, "C"); uselocale (LC_GLOBAL_LOCALE); freelocale (mixed1); freelocale (mixed2); freelocale (perthread); return 0; } #endif #if HAVE_STRFMON_L || HAVE_SNPRINTF_L || (HAVE_NL_LANGINFO_L && HAVE_WORKING_USELOCALE) static void get_locale_dependent_values_from (struct locale_dependent_values *result, locale_t locale) { #if HAVE_STRFMON_L strfmon_l (result->monetary, sizeof (result->monetary), locale, "%n", 123.75); /* result->monetary is usually "$123.75" */ #endif #if HAVE_SNPRINTF_L snprintf_l (result->numeric, sizeof (result->numeric), locale, "%g", 3.5); /* result->numeric is usually "3,5" */ #endif #if HAVE_NL_LANGINFO_L && HAVE_WORKING_USELOCALE strcpy (result->time, nl_langinfo_l (MON_1, locale)); /* result->time is usually "janvier" */ #endif } static int test_with_locale_parameter (void) { struct locale_dependent_values expected_results; locale_t mixed1; locale_t mixed2; /* Set up a locale which is a mix between different system locales. */ setlocale (LC_ALL, "en_US.UTF-8"); setlocale (LC_NUMERIC, "de_DE.UTF-8"); setlocale (LC_TIME, "fr_FR.UTF-8"); get_locale_dependent_values (&expected_results); /* Save the locale in a locale_t object. */ mixed1 = duplocale (LC_GLOBAL_LOCALE); ASSERT (mixed1 != NULL); /* Create another locale_t object. */ mixed2 = newlocale (LC_ALL_MASK, "es_ES.UTF-8", NULL); if (mixed2 == NULL) return 1; /* Set up a default locale. */ setlocale (LC_ALL, "C"); { struct locale_dependent_values c_results; get_locale_dependent_values (&c_results); } /* Now use the saved locale mixed2. */ { struct locale_dependent_values results; get_locale_dependent_values_from (&results, mixed2); } /* Now use the saved locale mixed1 again. */ { struct locale_dependent_values results; get_locale_dependent_values_from (&results, mixed1); #if HAVE_STRFMON_L ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); #endif #if HAVE_SNPRINTF_L ASSERT (strcmp (results.numeric, expected_results.numeric) == 0); #endif #if HAVE_NL_LANGINFO_L && HAVE_WORKING_USELOCALE ASSERT (strcmp (results.time, expected_results.time) == 0); #endif } freelocale (mixed1); freelocale (mixed2); return 0; } #endif int main () { int skipped = 0; #if HAVE_WORKING_USELOCALE skipped |= test_with_uselocale (); #endif #if HAVE_STRFMON_L || HAVE_SNPRINTF_L || (HAVE_NL_LANGINFO_L && HAVE_WORKING_USELOCALE) skipped |= test_with_locale_parameter (); #endif if (skipped) { fprintf (stderr, "Skipping test: Spanish Unicode locale is not installed\n"); return 77; } return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: function duplocale not available\n"); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-dynarray.c�������������������������������������������������������0000664�0000000�0000000�00000002506�14110572173�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of type-safe arrays that grow dynamically. Copyright (C) 2021 Free Software Foundation, Inc. This 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 2, 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>, 2021. */ #include <config.h> #define DYNARRAY_STRUCT int_sequence #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX intseq_ #include "dynarray.h" #include "macros.h" #define N 100000 static int value_at (long long int i) { return (i % 13) + ((i * i) % 251); } int main () { struct int_sequence s; int i; intseq_init (&s); for (i = 0; i < N; i++) intseq_add (&s, value_at (i)); for (i = N - 1; i >= N / 2; i--) { ASSERT (* intseq_at (&s, i) == value_at (i)); intseq_remove_last (&s); } intseq_free (&s); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-echo.sh����������������������������������������������������������0000775�0000000�0000000�00000012414�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # func_exit STATUS # exit with status func_exit () { (exit $1); exit $1 } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. func_fatal_error () { echo "test-echo.sh: *** $1" 1>&2 echo "test-echo.sh: *** Stop." 1>&2 func_exit 1 } # Ensure an 'echo' command that does not interpret backslashes. # Test cases: # echo '\n' | wc -l prints 1 when OK, 2 when KO # echo '\t' | grep t > /dev/null has return code 0 when OK, 1 when KO # This problem is a weird heritage from SVR4. BSD got it right (except that # BSD echo interprets '-n' as an option, which is also not desirable). # Nowadays the problem occurs in 4 situations: # - in bash, when the shell option xpg_echo is set (bash >= 2.04) # or when it was built with --enable-usg-echo-default (bash >= 2.0) # or when it was built with DEFAULT_ECHO_TO_USG (bash < 2.0), # - in zsh, when sh-emulation is not set, # - in ksh (e.g. AIX /bin/sh and Solaris /usr/xpg4/bin/sh are ksh instances, # and HP-UX /bin/sh and IRIX /bin/sh behave similarly), # - in Solaris /bin/sh and OSF/1 /bin/sh. # We try the following workarounds: # - for all: respawn using $CONFIG_SHELL if that is set and works. # - for bash >= 2.04: unset the shell option xpg_echo. # - for bash >= 2.0: define echo to a function that uses the printf built-in. # - for bash < 2.0: define echo to a function that uses cat of a here document. # - for zsh: turn sh-emulation on. # - for ksh: alias echo to 'print -r'. # - for ksh: alias echo to a function that uses cat of a here document. # - for Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh and rely on # the ksh workaround. # - otherwise: respawn using /bin/sh and rely on the workarounds. # When respawning, we pass --no-reexec as first argument, so as to avoid # turning this script into a fork bomb in unlucky situations. have_echo= if echo '\t' | grep t > /dev/null; then have_echo=yes # Lucky! fi # Try the workarounds. # Respawn using $CONFIG_SHELL if that is set and works. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -n "$CONFIG_SHELL" \ && test -f "$CONFIG_SHELL" \ && $CONFIG_SHELL -c 'echo '\t' | grep t > /dev/null'; then exec $CONFIG_SHELL "$0" --no-reexec "$@" exit 127 fi # For bash >= 2.04: unset the shell option xpg_echo. if test -z "$have_echo" \ && test -n "$BASH_VERSION" \ && (shopt -o xpg_echo; echo '\t' | grep t > /dev/null) 2>/dev/null; then shopt -o xpg_echo have_echo=yes fi # For bash >= 2.0: define echo to a function that uses the printf built-in. # For bash < 2.0: define echo to a function that uses cat of a here document. # (There is no win in using 'printf' over 'cat' if it is not a shell built-in.) if test -z "$have_echo" \ && test -n "$BASH_VERSION"; then \ if type printf 2>/dev/null | grep / > /dev/null; then # 'printf' is not a shell built-in. echo () { cat <<EOF $* EOF } else # 'printf' is a shell built-in. echo () { printf '%s\n' "$*" } fi if echo '\t' | grep t > /dev/null; then have_echo=yes fi fi # For zsh: turn sh-emulation on. if test -z "$have_echo" \ && test -n "$ZSH_VERSION" \ && (emulate sh) >/dev/null 2>&1; then emulate sh fi # For ksh: alias echo to 'print -r'. if test -z "$have_echo" \ && (type print) >/dev/null 2>&1; then # A 'print' command exists. if type print 2>/dev/null | grep / > /dev/null; then : else # 'print' is a shell built-in. if (print -r '\told' | grep told > /dev/null) 2>/dev/null; then # 'print' is the ksh shell built-in. alias echo='print -r' fi fi fi if test -z "$have_echo" \ && echo '\t' | grep t > /dev/null; then have_echo=yes fi # For ksh: alias echo to a function that uses cat of a here document. # The ksh manual page says: # "Aliasing is performed when scripts are read, not while they are executed. # Therefore, for an alias to take effect, the alias definition command has # to be executed before the command which references the alias is read." # Because of this, we have to play strange tricks with have_echo, to ensure # that the top-level statement containing the test starts after the 'alias' # command. if test -z "$have_echo"; then bsd_echo () { cat <<EOF $* EOF } alias echo=bsd_echo 2>/dev/null fi if test -z "$have_echo" \ && echo '\t' | grep t > /dev/null; then have_echo=yes fi if test -z "$have_echo"; then unalias echo 2>/dev/null fi # For Solaris /bin/sh and OSF/1 /bin/sh: respawn using /bin/ksh. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -f /bin/ksh; then exec /bin/ksh "$0" --no-reexec "$@" exit 127 fi # Otherwise: respawn using /bin/sh. if test -z "$have_echo" \ && test "X$1" != "X--no-reexec" \ && test -f /bin/sh; then exec /bin/sh "$0" --no-reexec "$@" exit 127 fi if test -z "$have_echo"; then func_fatal_error "Shell does not support 'echo' correctly. Please install GNU bash and set the environment variable CONFIG_SHELL to point to it." fi if echo '\t' | grep t > /dev/null; then : # Works fine now. else func_fatal_error "Shell does not support 'echo' correctly. Workaround does not work. Please report this as a bug to bug-gnulib@gnu.org." fi if test "X$1" = "X--no-reexec"; then shift fi # This command determines the exit code. echo '\t' | grep t > /dev/null ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-environ.c��������������������������������������������������������0000664�0000000�0000000�00000002730�14110572173�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of environ variable. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include <string.h> int main () { /* The environment variables that are set even in the weirdest situations are HOME and PATH. POSIX says that HOME is initialized by the system, and that PATH may be unset. But in practice it's more frequent to see HOME unset and PATH set. So we test the presence of PATH. */ char **remaining_variables = environ; char *string; for (; (string = *remaining_variables) != NULL; remaining_variables++) { if (strncmp (string, "PATH=", 5) == 0) /* Found the PATH environment variable. */ return 0; } /* Failed to find the PATH environment variable. */ return 1; } ����������������������������������������gnulib-20210822~d383792/tests/test-erf.c������������������������������������������������������������0000664�0000000�0000000�00000002072�14110572173�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of erf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (erf, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = erf (x); ASSERT (y >= 0.6038560908 && y <= 0.6038560909); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-erfc.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of erfc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (erfc, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = erfc (x); ASSERT (y >= 0.3961439091 && y <= 0.3961439092); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-errno-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <errno.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <errno.h> int main () { } �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-errno-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <errno.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cerrno> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-errno.c����������������������������������������������������������0000664�0000000�0000000�00000005555�14110572173�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <errno.h> substitute. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <errno.h> /* Verify that the POSIX mandated errno values exist and can be used as initializers outside of a function. The variable names happen to match the Linux/x86 error numbers. */ int e1 = EPERM; int e2 = ENOENT; int e3 = ESRCH; int e4 = EINTR; int e5 = EIO; int e6 = ENXIO; int e7 = E2BIG; int e8 = ENOEXEC; int e9 = EBADF; int e10 = ECHILD; int e11 = EAGAIN; int e11a = EWOULDBLOCK; int e12 = ENOMEM; int e13 = EACCES; int e14 = EFAULT; int e16 = EBUSY; int e17 = EEXIST; int e18 = EXDEV; int e19 = ENODEV; int e20 = ENOTDIR; int e21 = EISDIR; int e22 = EINVAL; int e23 = ENFILE; int e24 = EMFILE; int e25 = ENOTTY; int e26 = ETXTBSY; int e27 = EFBIG; int e28 = ENOSPC; int e29 = ESPIPE; int e30 = EROFS; int e31 = EMLINK; int e32 = EPIPE; int e33 = EDOM; int e34 = ERANGE; int e35 = EDEADLK; int e36 = ENAMETOOLONG; int e37 = ENOLCK; int e38 = ENOSYS; int e39 = ENOTEMPTY; int e40 = ELOOP; int e42 = ENOMSG; int e43 = EIDRM; int e67 = ENOLINK; int e71 = EPROTO; int e72 = EMULTIHOP; int e74 = EBADMSG; int e75 = EOVERFLOW; int e84 = EILSEQ; int e88 = ENOTSOCK; int e89 = EDESTADDRREQ; int e90 = EMSGSIZE; int e91 = EPROTOTYPE; int e92 = ENOPROTOOPT; int e93 = EPROTONOSUPPORT; int e95 = EOPNOTSUPP; int e95a = ENOTSUP; int e97 = EAFNOSUPPORT; int e98 = EADDRINUSE; int e99 = EADDRNOTAVAIL; int e100 = ENETDOWN; int e101 = ENETUNREACH; int e102 = ENETRESET; int e103 = ECONNABORTED; int e104 = ECONNRESET; int e105 = ENOBUFS; int e106 = EISCONN; int e107 = ENOTCONN; int e110 = ETIMEDOUT; int e111 = ECONNREFUSED; int e113 = EHOSTUNREACH; int e114 = EALREADY; int e115 = EINPROGRESS; int e116 = ESTALE; int e122 = EDQUOT; int e125 = ECANCELED; int e130 = EOWNERDEAD; int e131 = ENOTRECOVERABLE; /* Don't verify that these errno values are all different, except for possibly EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has ENOTSUP == EOPNOTSUPP. */ int main () { /* Verify that errno can be assigned. */ errno = EOVERFLOW; /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ if (errno == EINVAL) return 1; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude.c��������������������������������������������������������0000664�0000000�0000000�00000006230�14110572173�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for exclude. Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of the GNUlib Library. This 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 <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <stdbool.h> #include <fnmatch.h> #include "exclude.h" #include "error.h" #include "argmatch.h" #ifndef FNM_CASEFOLD # define FNM_CASEFOLD 0 #endif #ifndef FNM_LEADING_DIR # define FNM_LEADING_DIR 0 #endif char const * const exclude_keywords[] = { "noescape", "pathname", "period", "leading_dir", "casefold", "anchored", "include", "wildcards", NULL }; int exclude_flags[] = { FNM_NOESCAPE, FNM_PATHNAME, FNM_PERIOD, FNM_LEADING_DIR, FNM_CASEFOLD, EXCLUDE_ANCHORED, EXCLUDE_INCLUDE, EXCLUDE_WILDCARDS }; ARGMATCH_VERIFY (exclude_keywords, exclude_flags); /* Some packages define ARGMATCH_DIE and ARGMATCH_DIE_DECL in <config.h>, and thus must link with a definition of that function. Provide it here. */ #ifdef ARGMATCH_DIE_DECL _Noreturn ARGMATCH_DIE_DECL; ARGMATCH_DIE_DECL { exit (1); } #endif int main (int argc, char **argv) { int exclude_options = 0; struct exclude *exclude = new_exclude (); if (argc == 1) error (1, 0, "usage: %s file -- words...", argv[0]); while (--argc) { char *opt = *++argv; if (opt[0] == '-') { int neg = 0; int flag; char *s = opt + 1; if (opt[1] == '-' && opt[2] == 0) { argc--; break; } if (strlen (s) > 3 && memcmp (s, "no-", 3) == 0) { neg = 1; s += 3; } flag = XARGMATCH (opt, s, exclude_keywords, exclude_flags); if (neg) exclude_options &= ~flag; else exclude_options |= flag; /* Skip this test if invoked with -leading-dir on a system that lacks support for FNM_LEADING_DIR. */ if (strcmp (s, "leading_dir") == 0 && FNM_LEADING_DIR == 0) exit (77); /* Likewise for -casefold and FNM_CASEFOLD. */ if (strcmp (s, "casefold") == 0 && FNM_CASEFOLD == 0) exit (77); } else if (add_exclude_file (add_exclude, exclude, opt, exclude_options, '\n') != 0) error (1, errno, "error loading %s", opt); } for (; argc; --argc) { char *word = *++argv; printf ("%s: %d\n", word, excluded_file_name (exclude, word)); } free_exclude (exclude); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude1.sh������������������������������������������������������0000775�0000000�0000000�00000002442�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test literal matches cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT foo: 0 foo*: 1 bar: 1 foobar: 0 baz: 0 bar/qux: 0 EOT ${CHECKER} test-exclude in -- foo 'foo*' bar foobar baz bar/qux > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude2.sh������������������������������������������������������0000775�0000000�0000000�00000002475�14110572173�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 cat > in <<EOT foo* bar Baz EOT # Test case-insensitive literal matches cat > expected <<EOT foo: 0 foo*: 1 bar: 1 foobar: 0 baz: 1 bar/qux: 0 EOT ${CHECKER} test-exclude -casefold in -- foo 'foo*' bar foobar baz bar/qux > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude3.sh������������������������������������������������������0000775�0000000�0000000�00000002443�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test include cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT foo: 1 foo*: 0 bar: 0 foobar: 1 baz: 1 bar/qux: 1 EOT ${CHECKER} test-exclude -include in -- foo 'foo*' bar foobar baz bar/qux > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude4.sh������������������������������������������������������0000775�0000000�0000000�00000002354�14110572173�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test wildcard matching cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT foobar: 1 EOT ${CHECKER} test-exclude -wildcards in -- foobar > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude5.sh������������������������������������������������������0000775�0000000�0000000�00000002431�14110572173�0020473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test FNM_LEADING_DIR cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT bar: 1 bar/qux: 1 barz: 0 foo/bar: 1 EOT ${CHECKER} test-exclude -leading_dir in -- bar bar/qux barz foo/bar > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude6.sh������������������������������������������������������0000775�0000000�0000000�00000002357�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test anchored cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT bar: 1 foo/bar: 0 EOT ${CHECKER} test-exclude -anchored in -- bar foo/bar > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude7.sh������������������������������������������������������0000775�0000000�0000000�00000002473�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test exclude precedence cat > in <<EOT foo* bar Baz EOT cat > expected <<EOT bar: 0 bar: 1 EOT ${CHECKER} test-exclude in -include in -- bar > out || exit $? ${CHECKER} test-exclude -include in -no-include in -- bar >> out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exclude8.sh������������������������������������������������������0000775�0000000�0000000�00000002416�14110572173�0020501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2010-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 # Test escaped metacharacters. cat > in <<'EOT' f\*e b[a\*]r EOT cat > expected <<'EOT' f*e: 1 file: 0 bar: 1 EOT ${CHECKER} test-exclude -wildcards in -- 'f*e' 'file' 'bar' > out || exit $? # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. case $(echo r | tr -d '\r') in '') cr='\015';; *) cr='\r';; esac # normalize output LC_ALL=C tr -d "$cr" < out > k && mv k out compare expected out || fail=1 Exit $fail ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exec-child.c�����������������������������������������������������0000664�0000000�0000000�00000002423�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Callee program for the tests of the exec*() functions. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include <stdlib.h> /* Do not use any gnulib replacements, since this program should link against as few libraries as possible. */ #undef printf int main (int argc, char* argv[]) { /* Print the arguments. */ int i; printf ("argc = %d\n", argc); for (i = 1; i < argc; i++) printf ("argv[%d] = |%s|\n", i, argv[i]); /* Print a particular environment variable. */ const char *var = "Hommingberg"; if (getenv (var) != NULL) printf ("%s = |%s|\n", var, getenv (var)); return 49; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execl-main.c�����������������������������������������������������0000664�0000000�0000000�00000002370�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execl(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execl, int, (const char *, const char *, ...)); #include <stdio.h> int main () { const char *progname = "./test-exec-child"; execl (progname, progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL); perror ("execl"); return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execl.sh���������������������������������������������������������0000775�0000000�0000000�00000002410�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execl(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. ${CHECKER} ./test-execl-main${EXEEXT} > test-execl.tmp result=$? test $result = 49 || exit 1 LC_ALL=C tr -d '\r' < test-execl.tmp > test-execl.out || exit 1 cat > test-execl.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || EOF : ${DIFF=diff} ${DIFF} test-execl.ok test-execl.out result=$? rm -f test-execl.tmp test-execl.out test-execl.ok exit $result ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execle-main.c����������������������������������������������������0000664�0000000�0000000�00000003001�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execle(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execle, int, (const char *, const char *, ...)); #include <stdio.h> int main () { const char *progname = "./test-exec-child"; const char *env[3] = { #ifdef __CYGWIN__ /* The Cygwin DLLs needed by the program are in /bin. */ "PATH=.:/bin", #else "PATH=.", #endif "Hommingberg=Gepardenforelle", NULL }; execle (progname, progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL, env); perror ("execle"); return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execle.sh��������������������������������������������������������0000775�0000000�0000000�00000002463�14110572173�0020227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execle(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. ${CHECKER} ./test-execle-main${EXEEXT} > test-execle.tmp result=$? test $result = 49 || exit 1 LC_ALL=C tr -d '\r' < test-execle.tmp > test-execle.out || exit 1 cat > test-execle.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || Hommingberg = |Gepardenforelle| EOF : ${DIFF=diff} ${DIFF} test-execle.ok test-execle.out result=$? rm -f test-execle.tmp test-execle.out test-execle.ok exit $result �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execlp-main.c����������������������������������������������������0000664�0000000�0000000�00000002406�14110572173�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execlp(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execlp, int, (const char *, const char *, ...)); #include <stdio.h> int main () { const char *progname = "test-exec-child"; execlp (progname, progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL); perror ("execlp"); return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execlp.sh��������������������������������������������������������0000775�0000000�0000000�00000002707�14110572173�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execlp(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. rm -rf test-execlp-subdir mkdir test-execlp-subdir (cd test-execlp-subdir && PATH="..:$PATH" ${CHECKER} ../test-execlp-main${EXEEXT}) > test-execlp.tmp result=$? test $result = 49 || { rm -rf test-execlp-subdir; exit 1; } LC_ALL=C tr -d '\r' < test-execlp.tmp > test-execlp.out || { rm -rf test-execlp-subdir; exit 1; } cat > test-execlp.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || EOF : ${DIFF=diff} ${DIFF} test-execlp.ok test-execlp.out result=$? rm -rf test-execlp-subdir test-execlp.tmp test-execlp.out test-execlp.ok exit $result ���������������������������������������������������������gnulib-20210822~d383792/tests/test-execute-child.c��������������������������������������������������0000664�0000000�0000000�00000016160�14110572173�0021311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-execute-main. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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, 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/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstat. It might be defined as a macro. Also, 'stat' might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h /* Return non-zero if FD is opened to a device. */ static int is_device (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ struct _stat st; return _fstat (fd, &st) >= 0 && !((st.st_mode & S_IFMT) == S_IFREG); #else struct stat st; return fstat (fd, &st) >= 0 && !S_ISREG (st.st_mode); #endif } /* Now include the other header files. */ #include <fcntl.h> #include <signal.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle, _isatty, _chdir, _getcwd. */ # include <io.h> #endif /* In this file, we use only system functions, no overrides from gnulib. */ #undef atoi #undef fcntl #undef fflush #undef fgetc #undef fprintf #undef fputs #undef getcwd #undef isatty #undef raise #undef read #undef sprintf #undef strcmp #undef strlen #undef write #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } #endif /* Return non-zero if FD is open. */ static int is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } int main (int argc, char *argv[]) { if (argc == 1) /* Check an invocation without arguments. Check the exit code. */ return 40; int test = atoi (argv[1]); switch (test) { case 2: /* Check argument passing. */ return !(argc == 12 && strcmp (argv[2], "abc def") == 0 && strcmp (argv[3], "abc\"def\"ghi") == 0 && strcmp (argv[4], "xyz\"") == 0 && strcmp (argv[5], "abc\\def\\ghi") == 0 && strcmp (argv[6], "xyz\\") == 0 && strcmp (argv[7], "???") == 0 && strcmp (argv[8], "***") == 0 && strcmp (argv[9], "") == 0 && strcmp (argv[10], "foo") == 0 && strcmp (argv[11], "") == 0); #if !(defined _WIN32 && !defined __CYGWIN__) case 3: /* Check SIGPIPE handling with ignore_sigpipe = false. */ case 4: /* Check SIGPIPE handling with ignore_sigpipe = true. */ raise (SIGPIPE); return 71; #endif case 5: /* Check other signal. */ raise (SIGINT); return 71; case 6: /* Check stdin is inherited. */ return !(fgetc (stdin) == 'F' && fgetc (stdin) == 'o'); case 7: /* Check null_stdin = true. */ return !(fgetc (stdin) == EOF); case 8: /* Check stdout is inherited, part 1 (regular file). */ return !(fputs ("bar", stdout) != EOF && fflush (stdout) == 0); case 9: /* Check stdout is inherited, part 2 (device). */ case 10: /* Check null_stdout = true. */ return !is_device (STDOUT_FILENO); case 11: /* Check stderr is inherited, part 1 (regular file). */ return !(fputs ("bar", stderr) != EOF && fflush (stderr) == 0); case 12: /* Check stderr is inherited, part 2 (device). */ case 13: /* Check null_stderr = true. */ return !is_device (STDERR_FILENO); case 14: case 15: /* Check file descriptors >= 3 can be inherited. */ case 16: /* Check file descriptors >= 3 with O_CLOEXEC bit are not inherited. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Avoid exceptions from within _get_osfhandle. */ _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); #endif { char buf[300]; buf[0] = '\0'; char *p = buf; int fd; for (fd = 0; fd < 20; fd++) if (is_open (fd)) { sprintf (p, "%d ", fd); p += strlen (p); } const char *expected = (test < 16 ? "0 1 2 10 " : "0 1 2 "); if (strcmp (buf, expected) == 0) return 0; else { fprintf (stderr, "Test case %d: %s\n", test, buf); fflush (stderr); return 1; } } case 17: /* Check that file descriptors >= 3, open for reading, can be inherited, including the file position. */ { char buf[6]; int n = read (10, buf, sizeof (buf)); return !(n == 4 && memcmp (buf, "obar", 4) == 0); } case 18: /* Check that file descriptors >= 3, open for writing, can be inherited, including the file position. */ { int n = write (10, "bar", 3); return !(n == 3); } case 19: /* Check that file descriptors >= 3, when inherited, preserve their isatty() property, part 1 (regular file). */ case 20: /* Check that file descriptors >= 3, when inherited, preserve their isatty() property, part 2 (character devices). */ { #if defined _WIN32 && ! defined __CYGWIN__ return 4 + 2 * (_isatty (10) != 0) + (_isatty (11) != 0); #else return 4 + 2 * (isatty (10) != 0) + (isatty (11) != 0); #endif } case 21: /* Check execution in a different directory. */ { char cwd[1024]; #if defined _WIN32 && ! defined __CYGWIN__ if (_chdir ("..") != 0) return 1; if (_getcwd (cwd, sizeof (cwd)) == NULL) return 2; #else if (chdir ("..") != 0) return 1; if (getcwd (cwd, sizeof (cwd)) == NULL) return 2; #endif return (argc == 3 && strcmp (argv[2], cwd) == 0 ? 0 : 3); } default: abort (); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execute-main.c���������������������������������������������������0000664�0000000�0000000�00000035555�14110572173�0021163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execute. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 "execute.h" #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get _isatty, _getcwd. */ # include <io.h> #endif #include "read-file.h" #include "macros.h" /* The name of the "always silent" device. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # define DEV_NULL "NUL" #else /* Unix API. */ # define DEV_NULL "/dev/null" #endif #define BASE "test-execute" int main (int argc, char *argv[]) { if (argc != 3) { fprintf (stderr, "%s: need 2 arguments\n", argv[0]); return 2; } char *prog_path = argv[1]; const char *progname = "test-execute-child"; int test = atoi (argv[2]); switch (test) { case 14: case 15: case 16: /* Close file descriptors that have been inherited from the parent process and that would cause failures in test-execute-child.c. Such file descriptors have been seen: - with GNU make, when invoked as 'make -j N' with j > 1, - in some versions of the KDE desktop environment, - on NetBSD, - in MacPorts with the "trace mode" enabled. */ #if HAVE_CLOSE_RANGE if (close_range (3, 20 - 1, 0) < 0) #endif { int fd; for (fd = 3; fd < 20; fd++) close (fd); } default: break; } switch (test) { case 0: { /* Check an invocation without arguments. Check the exit code. */ const char *prog_argv[2] = { prog_path, NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 40); } break; case 1: { /* Check an invocation of a non-existent program. */ const char *prog_argv[3] = { "./non-existent", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 127); } break; case 2: { /* Check argument passing. */ const char *prog_argv[13] = { prog_path, "2", "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 3: #if !(defined _WIN32 && !defined __CYGWIN__) { /* Check SIGPIPE handling with ignore_sigpipe = false. */ const char *prog_argv[3] = { prog_path, "3", NULL }; int termsig = 0x7DEADBEE; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, &termsig); ASSERT (ret == 127); ASSERT (termsig == SIGPIPE); } #endif break; case 4: #if !(defined _WIN32 && !defined __CYGWIN__) { /* Check SIGPIPE handling with ignore_sigpipe = true. */ const char *prog_argv[3] = { prog_path, "4", NULL }; int termsig = 0x7DEADBEE; int ret = execute (progname, prog_argv[0], prog_argv, NULL, true, false, false, false, true, false, &termsig); ASSERT (ret == 0); ASSERT (termsig == SIGPIPE); } #endif break; case 5: { /* Check other signal. */ const char *prog_argv[3] = { prog_path, "5", NULL }; int termsig = 0x7DEADBEE; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, &termsig); ASSERT (ret == 127); #if defined _WIN32 && !defined __CYGWIN__ ASSERT (termsig == SIGTERM); /* dummy, from WTERMSIG in <sys/wait.h> */ #else ASSERT (termsig == SIGINT); #endif } break; case 6: { /* Check stdin is inherited. */ FILE *fp = fopen (BASE ".tmp", "w"); fputs ("Foo", fp); ASSERT (fclose (fp) == 0); fp = freopen (BASE ".tmp", "r", stdin); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "6", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stdin) == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 7: { /* Check null_stdin = true. */ FILE *fp = fopen (BASE ".tmp", "w"); fputs ("Foo", fp); ASSERT (fclose (fp) == 0); fp = freopen (BASE ".tmp", "r", stdin); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "7", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, true, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stdin) == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 8: { /* Check stdout is inherited, part 1 (regular file). */ FILE *fp = freopen (BASE ".tmp", "w", stdout); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "8", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stdout) == 0); size_t length; char *contents = read_file (BASE ".tmp", 0, &length); ASSERT (length == 3 && memcmp (contents, "bar", 3) == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 9: { /* Check stdout is inherited, part 2 (device). */ FILE *fp = freopen (DEV_NULL, "w", stdout); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "9", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 10: { /* Check null_stdout = true. */ FILE *fp = freopen (BASE ".tmp", "w", stdout); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "10", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, true, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stdout) == 0); size_t length; (void) read_file (BASE ".tmp", 0, &length); ASSERT (length == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 11: { /* Check stderr is inherited, part 1 (regular file). */ FILE *fp = freopen (BASE ".tmp", "w", stderr); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "11", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stderr) == 0); size_t length; char *contents = read_file (BASE ".tmp", 0, &length); ASSERT (length == 3 && memcmp (contents, "bar", 3) == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 12: { /* Check stderr is inherited, part 2 (device). */ FILE *fp = freopen (DEV_NULL, "w", stderr); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "12", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 13: { /* Check null_stderr = true. */ FILE *fp = freopen (BASE ".tmp", "w", stderr); ASSERT (fp != NULL); const char *prog_argv[3] = { prog_path, "13", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, true, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (stderr) == 0); size_t length; (void) read_file (BASE ".tmp", 0, &length); ASSERT (length == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 14: { /* Check file descriptors >= 3 can be inherited. */ ASSERT (dup2 (STDOUT_FILENO, 10) >= 0); const char *prog_argv[3] = { prog_path, "14", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, true, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 15: { /* Check file descriptors >= 3 can be inherited. */ ASSERT (fcntl (STDOUT_FILENO, F_DUPFD, 10) >= 0); const char *prog_argv[3] = { prog_path, "15", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, true, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 16: { /* Check file descriptors >= 3 with O_CLOEXEC bit are not inherited. */ ASSERT (fcntl (STDOUT_FILENO, F_DUPFD_CLOEXEC, 10) >= 0); const char *prog_argv[3] = { prog_path, "16", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, true, false, false, false, true, false, NULL); ASSERT (ret == 0); } break; case 17: { /* Check that file descriptors >= 3, open for reading, can be inherited, including the file position. */ FILE *fp = fopen (BASE ".tmp", "w"); fputs ("Foobar", fp); ASSERT (fclose (fp) == 0); int fd = open (BASE ".tmp", O_RDONLY); ASSERT (fd >= 0 && fd < 10); ASSERT (dup2 (fd, 10) >= 0); close (fd); fd = 10; char buf[2]; ASSERT (read (fd, buf, sizeof (buf)) == sizeof (buf)); /* The file position is now 2. */ const char *prog_argv[3] = { prog_path, "17", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); close (fd); ASSERT (remove (BASE ".tmp") == 0); } break; case 18: { /* Check that file descriptors >= 3, open for writing, can be inherited, including the file position. */ remove (BASE ".tmp"); int fd = open (BASE ".tmp", O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0 && fd < 10); ASSERT (dup2 (fd, 10) >= 0); close (fd); fd = 10; ASSERT (write (fd, "Foo", 3) == 3); /* The file position is now 3. */ const char *prog_argv[3] = { prog_path, "18", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); close (fd); size_t length; char *contents = read_file (BASE ".tmp", 0, &length); ASSERT (length == 6 && memcmp (contents, "Foobar", 6) == 0); ASSERT (remove (BASE ".tmp") == 0); } break; case 19: { /* Check that file descriptors >= 3, when inherited, preserve their isatty() property, part 1 (regular file). */ FILE *fp = fopen (BASE ".tmp", "w"); fputs ("Foo", fp); ASSERT (fclose (fp) == 0); int fd_in = open (BASE ".tmp", O_RDONLY); ASSERT (fd_in >= 0 && fd_in < 10); int fd_out = open (BASE ".tmp", O_WRONLY | O_APPEND); ASSERT (fd_out >= 0 && fd_out < 10); ASSERT (dup2 (fd_in, 10) >= 0); close (fd_in); fd_in = 10; ASSERT (dup2 (fd_out, 11) >= 0); close (fd_out); fd_out = 11; const char *prog_argv[3] = { prog_path, "19", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); #if defined _WIN32 && ! defined __CYGWIN__ ASSERT (ret == 4 + 2 * (_isatty (10) != 0) + (_isatty (11) != 0)); #else ASSERT (ret == 4 + 2 * (isatty (10) != 0) + (isatty (11) != 0)); #endif close (fd_in); close (fd_out); ASSERT (remove (BASE ".tmp") == 0); } break; case 20: { /* Check that file descriptors >= 3, when inherited, preserve their isatty() property, part 2 (character devices). */ ASSERT (dup2 (STDIN_FILENO, 10) >= 0); int fd_in = 10; ASSERT (dup2 (STDOUT_FILENO, 11) >= 0); int fd_out = 11; const char *prog_argv[3] = { prog_path, "20", NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); #if defined _WIN32 && ! defined __CYGWIN__ ASSERT (ret == 4 + 2 * (_isatty (10) != 0) + (_isatty (11) != 0)); #else ASSERT (ret == 4 + 2 * (isatty (10) != 0) + (isatty (11) != 0)); #endif close (fd_in); close (fd_out); } break; case 21: { /* Check execution in a different directory. */ rmdir (BASE ".sub"); ASSERT (mkdir (BASE ".sub", 0700) == 0); char cwd[1024]; #if defined _WIN32 && ! defined __CYGWIN__ ASSERT (_getcwd (cwd, sizeof (cwd)) != NULL); #else ASSERT (getcwd (cwd, sizeof (cwd)) != NULL); #endif const char *prog_argv[4] = { prog_path, "21", cwd, NULL }; int ret = execute (progname, prog_argv[0], prog_argv, BASE ".sub", false, false, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (rmdir (BASE ".sub") == 0); } break; default: ASSERT (false); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execute-script.c�������������������������������������������������0000664�0000000�0000000�00000005716�14110572173�0021537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execute. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 "execute.h" #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include "read-file.h" #include "macros.h" #define DATA_FILENAME "test-execute-script.tmp" int main () { unlink (DATA_FILENAME); /* Check an invocation of an executable script. This should only be supported if the script has a '#!' marker; otherwise it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>. POSIX says that the execlp() and execvp() functions support executing shell scripts <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>, but this is considered an antiquated feature. */ /* This test is an extension of "Check stdout is inherited, part 1 (regular file)" in test-execute-main.c. */ FILE *fp = freopen (DATA_FILENAME, "w", stdout); ASSERT (fp != NULL); { size_t i; for (i = 0; i < 2; i++) { const char *progname = (i == 0 ? "executable-script" : "executable-script.sh"); const char *prog_path = (i == 0 ? SRCDIR "executable-script" : SRCDIR "executable-script.sh"); const char *prog_argv[2] = { prog_path, NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 127); } } #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, scripts - even with '#!' marker - are not executable. Only .bat and .cmd files are. */ ASSERT (fclose (fp) == 0); ASSERT (unlink (DATA_FILENAME) == 0); fprintf (stderr, "Skipping test: scripts are not executable on this platform.\n"); return 77; #else { const char *progname = "executable-shell-script"; const char *prog_path = SRCDIR "executable-shell-script"; const char *prog_argv[2] = { prog_path, NULL }; int ret = execute (progname, prog_argv[0], prog_argv, NULL, false, false, false, false, true, false, NULL); ASSERT (ret == 0); ASSERT (fclose (fp) == 0); size_t length; char *contents = read_file (DATA_FILENAME, 0, &length); ASSERT (length == 11 && memcmp (contents, "Halle Potta", 11) == 0); } ASSERT (unlink (DATA_FILENAME) == 0); return 0; #endif } ��������������������������������������������������gnulib-20210822~d383792/tests/test-execute.sh�������������������������������������������������������0000775�0000000�0000000�00000000361�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh st=0 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; do ${CHECKER} ./test-execute-main${EXEEXT} ./test-execute-child${EXEEXT} $i \ || { echo test-execute.sh: test case $i failed >&2; st=1; } done exit $st �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execv-main.c�����������������������������������������������������0000664�0000000�0000000�00000002415�14110572173�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execv(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execv, int, (const char *, char * const *)); #include <stdio.h> int main () { const char *progname = "./test-exec-child"; const char *argv[12] = { progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL }; execv (progname, (char * const *) argv); perror ("execv"); return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execv.sh���������������������������������������������������������0000775�0000000�0000000�00000002410�14110572173�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execv(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. ${CHECKER} ./test-execv-main${EXEEXT} > test-execv.tmp result=$? test $result = 49 || exit 1 LC_ALL=C tr -d '\r' < test-execv.tmp > test-execv.out || exit 1 cat > test-execv.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || EOF : ${DIFF=diff} ${DIFF} test-execv.ok test-execv.out result=$? rm -f test-execv.tmp test-execv.out test-execv.ok exit $result ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execve-main.c����������������������������������������������������0000664�0000000�0000000�00000003041�14110572173�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execve(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execve, int, (const char *, char * const *, char * const *)); #include <stdio.h> int main () { const char *progname = "./test-exec-child"; const char *env[3] = { #ifdef __CYGWIN__ /* The Cygwin DLLs needed by the program are in /bin. */ "PATH=.:/bin", #else "PATH=.", #endif "Hommingberg=Gepardenforelle", NULL }; const char *argv[12] = { progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL }; execve (progname, (char * const *) argv, (char * const *) env); perror ("execve"); return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execve.sh��������������������������������������������������������0000775�0000000�0000000�00000002463�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execve(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. ${CHECKER} ./test-execve-main${EXEEXT} > test-execve.tmp result=$? test $result = 49 || exit 1 LC_ALL=C tr -d '\r' < test-execve.tmp > test-execve.out || exit 1 cat > test-execve.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || Hommingberg = |Gepardenforelle| EOF : ${DIFF=diff} ${DIFF} test-execve.ok test-execve.out result=$? rm -f test-execve.tmp test-execve.out test-execve.ok exit $result �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execvp-main.c����������������������������������������������������0000664�0000000�0000000�00000002417�14110572173�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execvp(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execvp, int, (const char *, char * const *)); #include <stdio.h> int main () { const char *progname = "test-exec-child"; const char *argv[12] = { progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL }; execvp (progname, (char * const *) argv); perror ("execvp"); return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execvp.sh��������������������������������������������������������0000775�0000000�0000000�00000002707�14110572173�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execvp(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. rm -rf test-execvp-subdir mkdir test-execvp-subdir (cd test-execvp-subdir && PATH="..:$PATH" ${CHECKER} ../test-execvp-main${EXEEXT}) > test-execvp.tmp result=$? test $result = 49 || { rm -rf test-execvp-subdir; exit 1; } LC_ALL=C tr -d '\r' < test-execvp.tmp > test-execvp.out || { rm -rf test-execvp-subdir; exit 1; } cat > test-execvp.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || EOF : ${DIFF=diff} ${DIFF} test-execvp.ok test-execvp.out result=$? rm -rf test-execvp-subdir test-execvp.tmp test-execvp.out test-execvp.ok exit $result ���������������������������������������������������������gnulib-20210822~d383792/tests/test-execvpe-main.c���������������������������������������������������0000664�0000000�0000000�00000003043�14110572173�0021143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execvpe(). Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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>, 2020. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (execvpe, int, (const char *, char * const *, char * const *)); #include <stdio.h> int main () { const char *progname = "test-exec-child"; const char *env[3] = { #ifdef __CYGWIN__ /* The Cygwin DLLs needed by the program are in /bin. */ "PATH=.:/bin", #else "PATH=.", #endif "Hommingberg=Gepardenforelle", NULL }; const char *argv[12] = { progname, "abc def", "abc\"def\"ghi", "xyz\"", "abc\\def\\ghi", "xyz\\", "???", "***", "", "foo", "", NULL }; execvpe (progname, (char * const *) argv, (char * const *) env); perror ("execvpe"); return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-execvpe.sh�������������������������������������������������������0000775�0000000�0000000�00000002770�14110572173�0020422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of execvpe(). # # Copyright (C) 2020-2021 Free Software Foundation, Inc. # # This 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>, 2020. rm -rf test-execvpe-subdir mkdir test-execvpe-subdir (cd test-execvpe-subdir && PATH="..:$PATH" ${CHECKER} ../test-execvpe-main${EXEEXT}) > test-execvpe.tmp result=$? test $result = 49 || { rm -rf test-execvpe-subdir; exit 1; } LC_ALL=C tr -d '\r' < test-execvpe.tmp > test-execvpe.out || { rm -rf test-execvpe-subdir; exit 1; } cat > test-execvpe.ok <<\EOF argc = 11 argv[1] = |abc def| argv[2] = |abc"def"ghi| argv[3] = |xyz"| argv[4] = |abc\def\ghi| argv[5] = |xyz\| argv[6] = |???| argv[7] = |***| argv[8] = || argv[9] = |foo| argv[10] = || Hommingberg = |Gepardenforelle| EOF : ${DIFF=diff} ${DIFF} test-execvpe.ok test-execvpe.out result=$? rm -rf test-execvpe-subdir test-execvpe.tmp test-execvpe.out test-execvpe.ok exit $result ��������gnulib-20210822~d383792/tests/test-exp-ieee.c�������������������������������������������������������0000664�0000000�0000000�00000002206�14110572173�0020263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define EXP exp #include "test-exp-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp-ieee.h�������������������������������������������������������0000664�0000000�0000000�00000002330�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Underflow. */ { volatile DOUBLE z = EXP (-100000.0); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } /* NaN. */ ASSERT (ISNAN (EXP (NAN))); /* Zero. */ ASSERT (EXP (L_(0.0)) == L_(1.0)); ASSERT (EXP (MINUS_ZERO) == L_(1.0)); /* Infinity. */ { DOUBLE z = EXP (- INFINITY); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } ASSERT (EXP (INFINITY) == INFINITY); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp.c������������������������������������������������������������0000664�0000000�0000000�00000002321�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (exp, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define EXP exp #define RANDOM randomd #include "test-exp.h" int main () { /* A particular value. */ x = 0.6; y = exp (x); ASSERT (y >= 1.822118800 && y <= 1.822118801); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp.h������������������������������������������������������������0000664�0000000�0000000�00000005564�14110572173�0017375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in expl.c to 53 bits of precision. */ L_(1350.0) #else L_(4.0) #endif : L_(2.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = EXP (x); DOUBLE z = EXP (- x); DOUBLE err = y * z - L_(1.0); ASSERT (y > L_(0.0)); ASSERT (z > L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ L_(2400.0) #else L_(24.0) #endif : L_(24.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(32.0) * RANDOM[i] - L_(16.0); /* -16.0 <= x <= 16.0 */ DOUBLE y = L_(32.0) * RANDOM[j] - L_(16.0); /* -16.0 <= y <= 16.0 */ DOUBLE z = - x - y; /* Approximately x + y + z = 0. */ DOUBLE err = EXP (x) * EXP (y) * EXP (z) - L_(1.0); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define EXP2 exp2 #include "test-exp2-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002337�14110572173�0020357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Underflow. */ { volatile DOUBLE z = EXP2 (-100000.0); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } /* NaN. */ ASSERT (ISNAN (EXP2 (NAN))); /* Zero. */ ASSERT (EXP2 (L_(0.0)) == L_(1.0)); ASSERT (EXP2 (MINUS_ZERO) == L_(1.0)); /* Infinity. */ { DOUBLE z = EXP2 (- INFINITY); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } ASSERT (EXP2 (INFINITY) == INFINITY); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2.c�����������������������������������������������������������0000664�0000000�0000000�00000002417�14110572173�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (exp2, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MAX_EXP DBL_MAX_EXP #define MIN_EXP DBL_MIN_EXP #define EXP2 exp2 #define RANDOM randomd #include "test-exp2.h" int main () { /* A particular value. */ x = 0.6; y = exp2 (x); ASSERT (y >= 1.515716566 && y <= 1.515716567); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2.h�����������������������������������������������������������0000664�0000000�0000000�00000007243�14110572173�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Integral arguments. */ { DOUBLE x = L_(0.0); DOUBLE y = EXP2 (x); ASSERT (y == L_(1.0)); } /* <https://sourceware.org/bugzilla/show_bug.cgi?id=13824> */ #if !(defined __linux__ && (defined __sparc__ || defined __powerpc__)) { int e; DOUBLE x; DOUBLE y; for (e = 0, x = L_(0.0), y = L_(1.0); e <= MAX_EXP - 1; e++, x = x + L_(1.0), y = y * L_(2.0)) { /* Invariant: x = e, y = 2^e. */ DOUBLE z = EXP2 (x); ASSERT (z == y); } } { int e; DOUBLE x; DOUBLE y; for (e = 0, x = L_(0.0), y = L_(1.0); e >= MIN_EXP - 1; e--, x = x - L_(1.0), y = y * L_(0.5)) { /* Invariant: x = e, y = 2^e. */ DOUBLE z = EXP2 (x); ASSERT (z == y); } } #endif /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in exp2l.c to 53 bits of precision. */ L_(1350.0) #else L_(3.0) #endif : L_(3.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = EXP2 (x); DOUBLE z = EXP2 (- x); DOUBLE err = y * z - L_(1.0); ASSERT (y > L_(0.0)); ASSERT (z > L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ L_(2300.0) #else L_(29.0) #endif : L_(11.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(32.0) * RANDOM[i] - L_(16.0); /* -16.0 <= x <= 16.0 */ DOUBLE y = L_(32.0) * RANDOM[j] - L_(16.0); /* -16.0 <= y <= 16.0 */ DOUBLE z = - x - y; /* Approximately x + y + z = 0. */ DOUBLE err = EXP2 (x) * EXP2 (y) * EXP2 (z) - L_(1.0); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2f-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2f() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define EXP2 exp2f #include "test-exp2-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2f.c����������������������������������������������������������0000664�0000000�0000000�00000002427�14110572173�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2f() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (exp2f, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MAX_EXP FLT_MAX_EXP #define MIN_EXP FLT_MIN_EXP #define EXP2 exp2f #define RANDOM randomf #include "test-exp2.h" int main () { /* A particular value. */ x = 0.6f; y = exp2f (x); ASSERT (y >= 1.5157164f && y <= 1.5157167f); test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2l-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2l() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define EXP2 exp2l #include "test-exp2-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-exp2l.c����������������������������������������������������������0000664�0000000�0000000�00000002575�14110572173�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp2l() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (exp2l, long double, (long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MAX_EXP LDBL_MAX_EXP #define MIN_EXP LDBL_MIN_EXP #define EXP2 exp2l #define RANDOM randoml #include "test-exp2.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = exp2l (x); ASSERT (y >= 1.515716566L && y <= 1.515716567L); test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expf-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define EXP expf #include "test-exp-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expf.c�����������������������������������������������������������0000664�0000000�0000000�00000002331�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (expf, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define EXP expf #define RANDOM randomf #include "test-exp.h" int main () { /* A particular value. */ x = 0.6f; y = expf (x); ASSERT (y >= 1.8221188f && y <= 1.8221189f); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expl-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002220�14110572173�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define EXP expl #include "test-exp-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expl.c�����������������������������������������������������������0000664�0000000�0000000�00000002475�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (expl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define EXP expl #define RANDOM randoml #include "test-exp.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = expl (x); ASSERT (y >= 1.822118800L && y <= 1.822118801L); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-explicit_bzero.c�������������������������������������������������0000664�0000000�0000000�00000011650�14110572173�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of explicit_bzero() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include <string.h> #include "signature.h" SIGNATURE_CHECK (explicit_bzero, void, (void *, size_t)); #include <stdbool.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include "vma-iter.h" #include "macros.h" /* Suppress GCC warning that do_secret_stuff (2) reads uninitialized local storage. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif #define SECRET "xyzzy1729" #define SECRET_SIZE 9 static char zero[SECRET_SIZE] = { 0 }; /* Enable this to verify that the test is effective. */ #if 0 # define explicit_bzero(a, n) memset (a, '\0', n) #endif /* =================== Verify operation on static memory =================== */ static char stbuf[SECRET_SIZE]; static void test_static (void) { memcpy (stbuf, SECRET, SECRET_SIZE); explicit_bzero (stbuf, SECRET_SIZE); ASSERT (memcmp (zero, stbuf, SECRET_SIZE) == 0); } /* =============== Verify operation on heap-allocated memory =============== */ /* Test whether an address range is mapped in memory. */ #if VMA_ITERATE_SUPPORTED struct locals { uintptr_t range_start; uintptr_t range_end; }; static int vma_iterate_callback (void *data, uintptr_t start, uintptr_t end, unsigned int flags) { struct locals *lp = (struct locals *) data; /* Remove from [range_start, range_end) the part at the beginning or at the end that is covered by [start, end). */ if (start <= lp->range_start && end > lp->range_start) lp->range_start = (end < lp->range_end ? end : lp->range_end); if (start < lp->range_end && end >= lp->range_end) lp->range_end = (start > lp->range_start ? start : lp->range_start); return 0; } static bool is_range_mapped (uintptr_t range_start, uintptr_t range_end) { struct locals l; l.range_start = range_start; l.range_end = range_end; vma_iterate (vma_iterate_callback, &l); return l.range_start == l.range_end; } #else static bool is_range_mapped (uintptr_t range_start, uintptr_t range_end) { return true; } #endif static void test_heap (void) { char *heapbuf = (char *) malloc (SECRET_SIZE); uintptr_t addr = (uintptr_t) heapbuf; memcpy (heapbuf, SECRET, SECRET_SIZE); explicit_bzero (heapbuf, SECRET_SIZE); free (heapbuf); if (is_range_mapped (addr, addr + SECRET_SIZE)) { /* some implementation could override freed memory by canaries so compare against secret */ ASSERT (memcmp (heapbuf, SECRET, SECRET_SIZE) != 0); printf ("test_heap: address range is still mapped after free().\n"); } else printf ("test_heap: address range is unmapped after free().\n"); } /* =============== Verify operation on stack-allocated memory =============== */ /* There are two passes: 1. Put a secret in memory and invoke explicit_bzero on it. 2. Verify that the memory has been erased. Implement them in the same function, so that they access the same memory range on the stack. That way, the test verifies that the compiler does not eliminate a call to explicit_bzero, even if data flow analysis reveals that the stack area is dead at the end of the function. */ static int _GL_ATTRIBUTE_NOINLINE do_secret_stuff (volatile int pass) { char stackbuf[SECRET_SIZE]; if (pass == 1) { memcpy (stackbuf, SECRET, SECRET_SIZE); explicit_bzero (stackbuf, SECRET_SIZE); return 0; } else /* pass == 2 */ { return memcmp (zero, stackbuf, SECRET_SIZE) != 0; } } static void test_stack (void) { int count = 0; int repeat; for (repeat = 1000; repeat > 0; repeat--) { do_secret_stuff (1); count += do_secret_stuff (2); } /* If explicit_bzero works, count is near 0. (It may be > 0 if there were some asynchronous signal invocations between the two calls of do_secret_stuff.) If explicit_bzero is optimized away by the compiler, count comes out as approximately 1000. */ printf ("test_stack: count = %d\n", count); ASSERT (count < 50); } /* ========================================================================== */ int main () { test_static (); test_heap (); test_stack (); return 0; } ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define EXPM1 expm1 #include "test-expm1-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000002374�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Underflow. */ ASSERT (EXPM1 (-100000.0) == - L_(1.0)); /* NaN. */ ASSERT (ISNAN (EXPM1 (NAN))); /* Zero. */ { DOUBLE z = EXPM1 (L_(0.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = EXPM1 (MINUS_ZERO); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } /* Infinity. */ ASSERT (EXPM1 (- INFINITY) == - L_(1.0)); ASSERT (EXPM1 (INFINITY) == INFINITY); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1.c����������������������������������������������������������0000664�0000000�0000000�00000002371�14110572173�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (expm1, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MIN_EXP DBL_MIN_EXP #define EXPM1 expm1 #define RANDOM randomd #include "test-expm1.h" int main () { /* A particular value. */ x = 0.6; y = expm1 (x); ASSERT (y >= 0.822118800 && y <= 0.822118801); test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1.h����������������������������������������������������������0000664�0000000�0000000�00000006711�14110572173�0017626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Arguments near zero. */ { DOUBLE x; for (i = -1, x = L_(0.5); i >= MIN_EXP; i--, x *= L_(0.5)) { DOUBLE y; y = EXPM1 (x); #ifdef __MINGW32__ /* mingw returns a value that is slightly too small. */ ASSERT (y >= x * (L_(1.0) - L_(1.0) / TWO_MANT_DIG)); #else ASSERT (y >= x); #endif ASSERT (y < L_(1.5) * x); y = EXPM1 (- x); ASSERT (y >= - x); ASSERT (y < - L_(0.5) * x); } } /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in expl.c to 53 bits of precision. */ L_(1024.0) #else L_(5.0) #endif : L_(5.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(2.0) * RANDOM[i]; /* 0.0 <= x <= 2.0 */ DOUBLE y = EXPM1 (x); DOUBLE z = EXPM1 (- x); DOUBLE err = y + (1 + y) * z; ASSERT (y >= L_(0.0)); ASSERT (z <= L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ L_(1536.0) #else L_(11.0) #endif : L_(9.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(2.0) * RANDOM[i] - L_(1.0); /* -1.0 <= x <= 1.0 */ DOUBLE y = L_(2.0) * RANDOM[j] - L_(1.0); /* -1.0 <= y <= 1.0 */ DOUBLE z = - x - y; /* Approximately x + y + z = 0. */ { DOUBLE a = EXPM1 (x); DOUBLE b = EXPM1 (y); DOUBLE c = EXPM1 (z); DOUBLE err = a + (1 + a) * (b + (1 + b) * c); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } } volatile DOUBLE x; DOUBLE y; �������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1f-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1f() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define EXPM1 expm1f #include "test-expm1-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1f.c���������������������������������������������������������0000664�0000000�0000000�00000002401�14110572173�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1f() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (expm1f, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MIN_EXP FLT_MIN_EXP #define EXPM1 expm1f #define RANDOM randomf #include "test-expm1.h" int main () { /* A particular value. */ x = 0.6f; y = expm1f (x); ASSERT (y >= 0.8221187f && y <= 0.8221189f); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1l-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0020672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1l() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define EXPM1 expm1l #include "test-expm1-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-expm1l.c���������������������������������������������������������0000664�0000000�0000000�00000002546�14110572173�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expm1l() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (expm1l, long double, (long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MIN_EXP LDBL_MIN_EXP #define EXPM1 expm1l #define RANDOM randoml #include "test-expm1.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = expm1l (x); ASSERT (y >= 0.822118800L && y <= 0.822118801L); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabs-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabs() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define FABS fabs #include "test-fabs-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabs-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (FABS (NAN))); /* Signed zero. */ { DOUBLE y = FABS (L_(0.0)); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); } { DOUBLE y = FABS (MINUS_ZERO); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); } /* Infinity. */ ASSERT (FABS (INFINITY) == INFINITY); ASSERT (FABS (- INFINITY) == INFINITY); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabs.c�����������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0017505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabs() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fabs, double, (double)); #include <string.h> #include "macros.h" #include "minus-zero.h" #define DOUBLE double #define L_(literal) literal #define MINUS_ZERO minus_zerod #define FABS fabs #define RANDOM randomd #include "test-fabs.h" int main () { /* A particular positive value. */ x = 0.6; y = fabs (x); ASSERT (y == 0.6); /* A particular negative value. */ x = -0.6; y = fabs (x); ASSERT (y == 0.6); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabs.h�����������������������������������������������������������0000664�0000000�0000000�00000002355�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabs*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { volatile DOUBLE x; DOUBLE y; /* Signed zero. */ x = L_(0.0); y = FABS (x); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); x = MINUS_ZERO; y = FABS (x); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); /* Randomized tests. */ { int i; for (i = 0; i < SIZEOF (RANDOM); i++) { x = L_(10.0) * RANDOM[i]; /* 0.0 <= x <= 10.0 */ ASSERT (FABS (x) == x); ASSERT (FABS (- x) == x); } } } volatile DOUBLE x; DOUBLE y; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabsf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabsf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define FABS fabsf #include "test-fabs-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabsf.c����������������������������������������������������������0000664�0000000�0000000�00000002504�14110572173�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabsf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fabsf, float, (float)); #include <string.h> #include "macros.h" #include "minus-zero.h" #define DOUBLE float #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define FABS fabsf #define RANDOM randomf #include "test-fabs.h" int main () { /* A particular positive value. */ x = 0.6f; y = fabsf (x); ASSERT (y == 0.6f); /* A particular negative value. */ x = -0.6f; y = fabsf (x); ASSERT (y == 0.6f); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabsl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabsl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define FABS fabsl #include "test-fabs-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fabsl.c����������������������������������������������������������0000664�0000000�0000000�00000002526�14110572173�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabsl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fabsl, long double, (long double)); #include <string.h> #include "macros.h" #include "minus-zero.h" #define DOUBLE long double #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define FABS fabsl #define RANDOM randoml #include "test-fabs.h" int main () { /* A particular positive value. */ x = 0.6L; y = fabsl (x); ASSERT (y == 0.6L); /* A particular negative value. */ x = -0.6L; y = fabsl (x); ASSERT (y == 0.6L); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-faccessat.c������������������������������������������������������0000664�0000000�0000000�00000004551�14110572173�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test checking user's permissions for a file. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (faccessat, int, (int, const char *, int, int)); #include <errno.h> #include <fcntl.h> #include "macros.h" #define BASE "test-faccessat.t" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (faccessat (-1, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (faccessat (99, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } /* Test behavior with trailing slash. */ unlink (BASE "file"); ASSERT (faccessat (AT_FDCWD, ".", X_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, "./", X_OK, 0) == 0); ASSERT (close (open (BASE "file", O_CREAT | O_WRONLY, 0)) == 0); ASSERT (faccessat (AT_FDCWD, BASE "file", F_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "file/", F_OK, 0) != 0); unlink (BASE "link1"); if (symlink (".", BASE "link1") == 0) { ASSERT (faccessat (AT_FDCWD, BASE "link1", X_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "link1/", X_OK, 0) == 0); unlink (BASE "link2"); ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (faccessat (AT_FDCWD, BASE "link2", F_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "link2/", F_OK, 0) != 0); unlink (BASE "link2"); unlink (BASE "link3"); ASSERT (symlink (BASE "no-such-file", BASE "link3") == 0); ASSERT (faccessat (AT_FDCWD, BASE "link3", F_OK, 0) != 0); ASSERT (faccessat (AT_FDCWD, BASE "link3/", F_OK, 0) != 0); unlink (BASE "link3"); } unlink (BASE "link1"); unlink (BASE "file"); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fbufmode.c�������������������������������������������������������0000664�0000000�0000000�00000004502�14110572173�0020352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fbufmode() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "fbufmode.h" #include <stdio.h> #include "macros.h" #define TESTFILE "t-fbufmode.tmp" /* ISO C99 disallows more than one setvbuf call on a given stream, and HP-UX 11 and musl libc indeed don't support such use of setvbuf. Therefore allocate a new stream for each possible mode value. */ static int test_mode (int mode) { FILE *fp; char buf[5]; /* Open it for reading. */ fp = fopen (TESTFILE, "r"); switch (mode) { case _IONBF: ASSERT (setvbuf (fp, NULL, _IONBF, 0) == 0); ASSERT (fbufmode (fp) == _IONBF); break; case _IOLBF: ASSERT (setvbuf (fp, buf, _IOLBF, 5) == 0); /* mingw's setvbuf implements _IOLBF the same way as _IOFBF. */ ASSERT (fbufmode (fp) == _IOLBF || fbufmode (fp) == _IOFBF); break; case _IOFBF: ASSERT (setvbuf (fp, buf, _IOFBF, 5) == 0); ASSERT (fbufmode (fp) == _IOFBF); break; default: break; } fclose (fp); return 0; } int main () { int ret; /* Create a file with some contents. */ { FILE *fp; fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; if (fwrite ("foobarsh", 1, 8, fp) < 8) goto skip; if (fclose (fp)) goto skip; } ret = test_mode (_IONBF); if (ret != 0) goto fail; ret = test_mode (_IOLBF); if (ret != 0) goto fail; ret = test_mode (_IOFBF); if (ret != 0) goto fail; return 0; fail: return ret; skip: fprintf (stderr, "Skipping test: file operations failed.\n"); return 77; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fchdir.c���������������������������������������������������������0000664�0000000�0000000�00000005612�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory named by a file descriptor. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (fchdir, int, (int)); #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include "cloexec.h" #include "macros.h" int main (void) { char *cwd; int fd; int i; cwd = getcwd (NULL, 0); ASSERT (cwd); fd = open (".", O_RDONLY); ASSERT (0 <= fd); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchdir (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchdir (99) == -1); ASSERT (errno == EBADF); } /* Check for other failure cases. */ { int bad_fd = open ("/dev/null", O_RDONLY); ASSERT (0 <= bad_fd); errno = 0; ASSERT (fchdir (bad_fd) == -1); ASSERT (errno == ENOTDIR); ASSERT (close (bad_fd) == 0); } /* Repeat test twice, once in '.' and once in '..'. */ for (i = 0; i < 2; i++) { ASSERT (chdir (&".."[1 - i]) == 0); ASSERT (fchdir (fd) == 0); { size_t len = strlen (cwd) + 1; char *new_dir = malloc (len); ASSERT (new_dir); ASSERT (getcwd (new_dir, len) == new_dir); ASSERT (strcmp (cwd, new_dir) == 0); free (new_dir); } /* For second iteration, use a cloned fd, to ensure that dup remembers whether an fd was associated with a directory. */ if (!i) { int new_fd = dup (fd); ASSERT (0 <= new_fd); ASSERT (close (fd) == 0); ASSERT (dup2 (new_fd, fd) == fd); ASSERT (close (new_fd) == 0); ASSERT (dup_cloexec (fd) == new_fd); ASSERT (dup2 (new_fd, fd) == fd); ASSERT (close (new_fd) == 0); ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, new_fd) == new_fd); ASSERT (close (fd) == 0); ASSERT (fcntl (new_fd, F_DUPFD, fd) == fd); ASSERT (close (new_fd) == 0); #if GNULIB_TEST_DUP3 ASSERT (dup3 (fd, new_fd, 0) == new_fd); ASSERT (dup3 (new_fd, fd, 0) == fd); ASSERT (close (new_fd) == 0); #endif } } free (cwd); return 0; } ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fchmod.c���������������������������������������������������������0000664�0000000�0000000�00000003341�14110572173�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing the protections of a file. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fchmod, int, (int, mode_t)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "macros.h" #define BASE "test-fchmod." int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchmod (-1, 0600) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchmod (99, 0600) == -1); ASSERT (errno == EBADF); } /* Test that fchmod works on regular files. */ { struct stat statbuf; int fd; unlink (BASE "file"); ASSERT (close (creat (BASE "file", 0600)) == 0); fd = open (BASE "file", O_RDWR); ASSERT (fd >= 0); ASSERT (fchmod (fd, 0400) == 0); ASSERT (stat (BASE "file", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0400); ASSERT (close (fd) == 0); /* Clean up. */ ASSERT (chmod (BASE "file", 0600) == 0); ASSERT (unlink (BASE "file") == 0); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fchmodat.c�������������������������������������������������������0000664�0000000�0000000�00000005374�14110572173�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing the protections of a file relative to an open directory. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fchmodat, int, (int, const char *, mode_t, int)); #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include "macros.h" #define BASE "test-fchmodat." int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchmodat (-1, "foo", 0600, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchmodat (99, "foo", 0600, 0) == -1); ASSERT (errno == EBADF); } /* Test that fchmodat works on regular files. */ { struct stat statbuf; unlink (BASE "file"); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (fchmodat (AT_FDCWD, BASE "file", 0400, 0) == 0); ASSERT (stat (BASE "file", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0400); errno = 0; ASSERT (fchmodat (AT_FDCWD, BASE "file/", 0600, 0) == -1); ASSERT (errno == ENOTDIR); /* Clean up. */ ASSERT (chmod (BASE "file", 0600) == 0); ASSERT (unlink (BASE "file") == 0); } /* Test that fchmodat works on directories. */ { struct stat statbuf; rmdir (BASE "dir"); ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (fchmodat (AT_FDCWD, BASE "dir", 0500, 0) == 0); ASSERT (stat (BASE "dir", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0500); ASSERT (fchmodat (AT_FDCWD, BASE "dir/", 0700, 0) == 0); /* Clean up. */ ASSERT (rmdir (BASE "dir") == 0); } /* Test that fchmodat works on non-symlinks, when given the AT_SYMLINK_NOFOLLOW flag. */ { struct stat statbuf; unlink (BASE "file"); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (fchmodat (AT_FDCWD, BASE "file", 0400, AT_SYMLINK_NOFOLLOW) == 0); ASSERT (stat (BASE "file", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0400); /* Clean up. */ ASSERT (chmod (BASE "file", 0600) == 0); ASSERT (unlink (BASE "file") == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fchown.c���������������������������������������������������������0000664�0000000�0000000�00000002303�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fchown. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (fchown, int, (int, uid_t, gid_t)); #include <errno.h> #include "macros.h" int main (int argc, char *argv[]) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchown (-1, getuid (), getgid ()) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchown (99, getuid (), getgid ()) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fchownat.c�������������������������������������������������������0000664�0000000�0000000�00000005462�14110572173�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fchownat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (fchownat, int, (int, char const *, uid_t, gid_t, int)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "mgetgroups.h" #include "openat.h" #include "stat-time.h" #include "ignore-value.h" #include "macros.h" #ifndef BASE # define BASE "test-fchownat.t" #endif #include "test-chown.h" #include "test-lchown.h" static int dfd = AT_FDCWD; /* Wrapper around fchownat to test chown behavior. */ static int do_chown (char const *name, uid_t user, gid_t group) { #ifdef TEST_CHOWNAT return chownat (dfd, name, user, group); #else return fchownat (dfd, name, user, group, 0); #endif } /* Wrapper around fchownat to test lchown behavior. */ static int do_lchown (char const *name, uid_t user, gid_t group) { #ifdef TEST_CHOWNAT return lchownat (dfd, name, user, group); #else return fchownat (dfd, name, user, group, AT_SYMLINK_NOFOLLOW); #endif } int main (_GL_UNUSED int argc, char *argv[]) { int result1; /* Skip because of no chown/symlink support. */ int result2; /* Skip because of no lchown support. */ /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchownat (-1, "foo", getuid (), getgid (), 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchownat (99, "foo", getuid (), getgid (), 0) == -1); ASSERT (errno == EBADF); } /* Basic tests. */ result1 = test_chown (do_chown, true); result2 = test_lchown (do_lchown, result1 == 0); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_chown (do_chown, false) == result1); ASSERT (test_lchown (do_lchown, false) == result2); /* We expect 0/0, 0/77, or 77/77, but not 77/0. */ ASSERT (result1 <= result2); ASSERT (close (dfd) == 0); /* FIXME - add additional tests of dfd not at current directory. */ return result1 | result2; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fclose.c���������������������������������������������������������0000664�0000000�0000000�00000005446�14110572173�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fclose module. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fclose, int, (FILE *)); #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #define BASE "test-fclose.t" int main (int argc, char **argv) { const char buf[] = "hello world"; int fd; int fd2; FILE *f; /* Prepare a seekable file. */ fd = open (BASE, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (0 <= fd); ASSERT (write (fd, buf, sizeof buf) == sizeof buf); ASSERT (lseek (fd, 1, SEEK_SET) == 1); /* Create an output stream visiting the file; when it is closed, all other file descriptors visiting the file must see the new file position. */ fd2 = dup (fd); ASSERT (0 <= fd2); f = fdopen (fd2, "w"); ASSERT (f); ASSERT (fputc (buf[1], f) == buf[1]); ASSERT (fclose (f) == 0); errno = 0; ASSERT (lseek (fd2, 0, SEEK_CUR) == -1); ASSERT (errno == EBADF); ASSERT (lseek (fd, 0, SEEK_CUR) == 2); /* Likewise for an input stream. */ fd2 = dup (fd); ASSERT (0 <= fd2); f = fdopen (fd2, "r"); ASSERT (f); ASSERT (fgetc (f) == buf[2]); ASSERT (fclose (f) == 0); errno = 0; ASSERT (lseek (fd2, 0, SEEK_CUR) == -1); ASSERT (errno == EBADF); ASSERT (lseek (fd, 0, SEEK_CUR) == 3); /* Test that fclose() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fdopen (fd, "w+"); ASSERT (fp != NULL); ASSERT (close (fd) == 0); errno = 0; ASSERT (fclose (fp) == EOF); ASSERT (errno == EBADF); } /* Test that fclose() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { errno = 0; ASSERT (fclose (fp) == EOF); ASSERT (errno == EBADF); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { errno = 0; ASSERT (fclose (fp) == EOF); ASSERT (errno == EBADF); } } /* Clean up. */ ASSERT (remove (BASE) == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fcntl-h-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0020636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fcntl.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <fcntl.h> #include "signature.h" #if GNULIB_TEST_CREAT SIGNATURE_CHECK (GNULIB_NAMESPACE::creat, int, (const char *, mode_t)); #endif #if GNULIB_TEST_FCNTL SIGNATURE_CHECK (GNULIB_NAMESPACE::fcntl, int, (int, int, ...)); #endif #if GNULIB_TEST_OPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::open, int, (const char *, int, ...)); #endif #if GNULIB_TEST_OPENAT SIGNATURE_CHECK (GNULIB_NAMESPACE::openat, int, (int, char const *, int, ...)); #endif int main () { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fcntl-h.c��������������������������������������������������������0000664�0000000�0000000�00000005543�14110572173�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fcntl.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <fcntl.h> /* Check that the various O_* macros are defined. */ int o = (O_DIRECT | O_DIRECTORY | O_DSYNC | O_IGNORE_CTTY | O_NDELAY | O_NOATIME | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINK | O_NOLINKS | O_NOTRANS | O_RSYNC | O_SYNC | O_TTY_INIT | O_BINARY | O_TEXT); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the FD_* macros are defined. */ int i = FD_CLOEXEC; /* Check that the types are all defined. */ pid_t t1; off_t t2; mode_t t3; int main (void) { /* Ensure no overlap in SEEK_*. */ switch (0) { case SEEK_CUR: case SEEK_END: case SEEK_SET: ; } /* Ensure no dangerous overlap in non-zero gnulib-defined replacements. */ switch (O_RDONLY) { /* Access modes */ case O_RDONLY: case O_WRONLY: case O_RDWR: #if O_EXEC && O_EXEC != O_RDONLY case O_EXEC: #endif #if O_SEARCH && O_EXEC != O_SEARCH && O_SEARCH != O_RDONLY case O_SEARCH: #endif i = ! (~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)); break; /* Everyone should have these */ case O_CREAT: case O_EXCL: case O_TRUNC: case O_APPEND: break; /* These might be 0 or O_RDONLY, only test non-zero versions. */ #if O_CLOEXEC case O_CLOEXEC: #endif #if O_DIRECT case O_DIRECT: #endif #if O_DIRECTORY case O_DIRECTORY: #endif #if O_DSYNC case O_DSYNC: #endif #if O_IGNORE_CTTY case O_IGNORE_CTTY: #endif #if O_NOATIME case O_NOATIME: #endif #if O_NONBLOCK case O_NONBLOCK: #endif #if O_NOCTTY case O_NOCTTY: #endif #if O_NOFOLLOW case O_NOFOLLOW: #endif #if O_NOLINK case O_NOLINK: #endif #if O_NOLINKS case O_NOLINKS: #endif #if O_NOTRANS case O_NOTRANS: #endif #if O_RSYNC && O_RSYNC != O_DSYNC case O_RSYNC: #endif #if O_SYNC && O_SYNC != O_DSYNC && O_SYNC != O_RSYNC case O_SYNC: #endif #if O_TTY_INIT case O_TTY_INIT: #endif #if O_BINARY case O_BINARY: #endif #if O_TEXT case O_TEXT: #endif ; } return !i; } �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fcntl-safer.c����������������������������������������������������0000664�0000000�0000000�00000002042�14110572173�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "fcntl--.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-fcntl-safer.t" #include "test-open.h" int main (void) { return test_open (open, true); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fcntl.c����������������������������������������������������������0000664�0000000�0000000�00000025120�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fcntl(2). Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (fcntl, int, (int, int, ...)); /* Helpers. */ #include <errno.h> #include <stdarg.h> #include <stdbool.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" #if !O_BINARY # define set_binary_mode(f,m) zero () static int zero (void) { return 0; } #endif /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is open and inheritable across exec/spawn. */ static bool is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return false; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static bool is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } /* Since native fcntl can have more supported operations than our replacement is aware of, and since various operations assign different types to the vararg argument, a wrapper around fcntl must be able to pass a vararg of unknown type on through to the original fcntl. Make sure that this works properly: func1 behaves like the original fcntl interpreting the vararg as an int or a pointer to a struct, and func2 behaves like rpl_fcntl that doesn't know what type to forward. */ struct dummy_struct { long filler; int value; }; static int func1 (int a, ...) { va_list arg; int i; va_start (arg, a); if (a < 4) i = va_arg (arg, int); else { struct dummy_struct *s = va_arg (arg, struct dummy_struct *); i = s->value; } va_end (arg); return i; } static int func2 (int a, ...) { va_list arg; void *p; va_start (arg, a); p = va_arg (arg, void *); va_end (arg); return func1 (a, p); } /* Ensure that all supported fcntl actions are distinct, and usable in preprocessor expressions. */ static void check_flags (void) { switch (0) { case F_DUPFD: #if F_DUPFD #endif case F_DUPFD_CLOEXEC: #if F_DUPFD_CLOEXEC #endif case F_GETFD: #if F_GETFD #endif #ifdef F_SETFD case F_SETFD: # if F_SETFD # endif #endif #ifdef F_GETFL case F_GETFL: # if F_GETFL # endif #endif #ifdef F_SETFL case F_SETFL: # if F_SETFL # endif #endif #ifdef F_GETOWN case F_GETOWN: # if F_GETOWN # endif #endif #ifdef F_SETOWN case F_SETOWN: # if F_SETOWN # endif #endif #ifdef F_GETLK case F_GETLK: # if F_GETLK # endif #endif #ifdef F_SETLK case F_SETLK: # if F_SETLK # endif #endif #ifdef F_SETLKW case F_SETLKW: # if F_SETLKW # endif #endif default: ; } } int main (int argc, char *argv[]) { if (argc > 1) /* child process */ return (is_open (10) ? 42 : 0); const char *file = "test-fcntl.tmp"; int fd; int bad_fd = getdtablesize (); /* Sanity check that rpl_fcntl is likely to work. */ ASSERT (func2 (1, 2) == 2); ASSERT (func2 (2, -2) == -2); ASSERT (func2 (3, 0x80000000) == 0x80000000); { struct dummy_struct s = { 0L, 4 }; ASSERT (func2 (4, &s) == 4); } check_flags (); /* Assume std descriptors were provided by invoker, and ignore fds that might have been inherited. */ fd = creat (file, 0600); ASSERT (STDERR_FILENO < fd); close (fd + 1); close (fd + 2); /* For F_DUPFD*, the source must be valid. */ errno = 0; ASSERT (fcntl (-1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (-1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); /* For F_DUPFD*, the destination must be valid. */ errno = 0; ASSERT (fcntl (fd, F_DUPFD, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD, bad_fd) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, bad_fd) == -1); ASSERT (errno == EINVAL || errno == EMFILE /* WSL */); /* For F_DUPFD*, check for correct inheritance, as well as preservation of text vs. binary. */ set_binary_mode (fd, O_BINARY); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (fcntl (fd, F_DUPFD, fd) == fd + 1); ASSERT (is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 1, O_BINARY)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 2, O_BINARY)); ASSERT (close (fd) == 0); set_binary_mode (fd + 2, O_TEXT); ASSERT (fcntl (fd + 2, F_DUPFD, fd + 1) == fd + 1); ASSERT (!is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd + 1, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd + 2, F_DUPFD_CLOEXEC, 0) == fd); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (!is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 2) == 0); /* Test F_GETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFD) == -1); ASSERT (errno == EBADF); /* Test F_GETFD, the FD_CLOEXEC bit. */ { int result = fcntl (fd, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == FD_CLOEXEC); ASSERT (dup (fd) == fd + 1); result = fcntl (fd + 1, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == 0); ASSERT (close (fd + 1) == 0); } #ifdef F_SETFD /* Test F_SETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFD, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETFL /* Test F_GETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFL) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETFL /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFL, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETOWN /* Test F_GETOWN on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETOWN) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETOWN /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); #endif /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); /* Close file descriptors that may have been inherited from the parent process and that would cause failures below. Such file descriptors have been seen: - with GNU make, when invoked as 'make -j N' with j > 1, - in some versions of the KDE desktop environment, - on NetBSD, - in MacPorts with the "trace mode" enabled. */ (void) close (10); /* Test whether F_DUPFD_CLOEXEC is effective. */ ASSERT (fcntl (1, F_DUPFD_CLOEXEC, 10) >= 0); #if defined _WIN32 && !defined __CYGWIN__ return _execl ("./test-fcntl", "./test-fcntl", "child", NULL); #else return execl ("./test-fcntl", "./test-fcntl", "child", NULL); #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fdatasync.c������������������������������������������������������0000664�0000000�0000000�00000004223�14110572173�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fdatasync() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (fdatasync, int, (int)); #include <errno.h> #include <fcntl.h> #include "macros.h" int main (void) { int fd; const char *file = "test-fdatasync.txt"; /* Assuming stdin and stdout are ttys, fdatasync is allowed to fail, but may succeed as an extension. */ for (fd = 0; fd < 2; fd++) if (fdatasync (fd) != 0) { ASSERT (errno == EINVAL /* POSIX */ || errno == ENOTSUP /* seen on Mac OS X 10.5 */ || errno == EBADF /* seen on AIX 7.1 */ || errno == EIO /* seen on mingw */ ); } /* fdatasync must fail on invalid fd. */ { errno = 0; ASSERT (fdatasync (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fdatasync (99) == -1); ASSERT (errno == EBADF); } fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); ASSERT (0 <= fd); ASSERT (write (fd, "hello", 5) == 5); ASSERT (fdatasync (fd) == 0); ASSERT (close (fd) == 0); #if 0 /* POSIX is self-contradictory on whether fdatasync must fail on read-only file descriptors. Glibc allows it, as does our implementation if fsync allows it. */ fd = open (file, O_RDONLY); ASSERT (0 <= fd); errno = 0; ASSERT (fdatasync (fd) == -1); ASSERT (errno == EBADF); ASSERT (close (fd) == 0); #endif ASSERT (unlink (file) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fdopen.c���������������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test opening a stream with a file descriptor. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fdopen, FILE *, (int, const char *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test behavior on failure. POSIX makes it hard to check for 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. */ int i; for (i = 0; i < 1000; i++) { errno = 0; if (! fdopen (STDOUT_FILENO, "w")) { ASSERT (errno != 0); break; } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fdopendir.c������������������������������������������������������0000664�0000000�0000000�00000004300�14110572173�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test opening a directory stream from a file descriptor. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <dirent.h> #include "signature.h" SIGNATURE_CHECK (fdopendir, DIR *, (int)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "macros.h" int main (_GL_UNUSED int argc, char *argv[]) { DIR *d; int fd; /* A non-directory cannot be turned into a directory stream. */ fd = open ("test-fdopendir.tmp", O_RDONLY | O_CREAT, 0600); ASSERT (0 <= fd); errno = 0; ASSERT (fdopendir (fd) == NULL); ASSERT (errno == ENOTDIR); ASSERT (close (fd) == 0); ASSERT (unlink ("test-fdopendir.tmp") == 0); /* A bad fd cannot be turned into a stream. */ { errno = 0; ASSERT (fdopendir (-1) == NULL); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fdopendir (99) == NULL); ASSERT (errno == EBADF); } /* This should work. */ fd = open (".", O_RDONLY); ASSERT (0 <= fd); d = fdopendir (fd); ASSERT (d); /* fdopendir should not close fd. */ ASSERT (dup2 (fd, fd) == fd); /* Don't test dirfd here. dirfd (d) must return fd on current POSIX platforms, but on pre-2008 platforms or on non-POSIX platforms dirfd (fd) might return some other descriptor, or -1, and gnulib does not work around this porting problem. */ ASSERT (closedir (d) == 0); /* Now we can guarantee that fd must be closed. */ errno = 0; ASSERT (dup2 (fd, fd) == -1); ASSERT (errno == EBADF); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fdutimensat.c����������������������������������������������������0000664�0000000�0000000�00000010617�14110572173�0021112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fdutimensat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "utimens.h" #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-fdutimensat.t" #include "test-futimens.h" #include "test-lutimens.h" #include "test-utimens.h" static int dfd = AT_FDCWD; /* Wrap fdutimensat to behave like futimens. */ static int do_futimens (int fd, struct timespec const times[2]) { return fdutimensat (fd, dfd, NULL, times, 0); } /* Test the use of file descriptors alongside a name. */ static int do_fdutimens (char const *name, struct timespec const times[2]) { int result; int nofollow_result; int nofollow_errno; int fd = openat (dfd, name, O_WRONLY); if (fd < 0) fd = openat (dfd, name, O_RDONLY); errno = 0; nofollow_result = fdutimensat (fd, dfd, name, times, AT_SYMLINK_NOFOLLOW); nofollow_errno = errno; result = fdutimensat (fd, dfd, name, times, 0); ASSERT (result == nofollow_result || (nofollow_result == -1 && nofollow_errno == ENOSYS)); if (0 <= fd) { int saved_errno = errno; close (fd); errno = saved_errno; } return result; } /* Wrap lutimensat to behave like lutimens. */ static int do_lutimens (const char *name, struct timespec const times[2]) { return lutimensat (dfd, name, times); } /* Wrap fdutimensat to behave like lutimens. */ static int do_lutimens1 (const char *name, struct timespec const times[2]) { return fdutimensat (-1, dfd, name, times, AT_SYMLINK_NOFOLLOW); } /* Wrap fdutimensat to behave like utimens. */ static int do_utimens (const char *name, struct timespec const times[2]) { return fdutimensat (-1, dfd, name, times, 0); } int main (void) { int result1; /* Skip because of no symlink support. */ int result2; /* Skip because of no futimens support. */ int result3; /* Skip because of no lutimens support. */ int fd; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Basic tests. */ result1 = test_utimens (do_utimens, true); ASSERT (test_utimens (do_fdutimens, false) == result1); result2 = test_futimens (do_futimens, result1 == 0); result3 = test_lutimens (do_lutimens, (result1 + result2) == 0); /* We expect 0/0, 0/77, or 77/77, but not 77/0. */ ASSERT (result1 <= result3); ASSERT (test_lutimens (do_lutimens1, (result1 + result2) == 0) == result3); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_utimens (do_utimens, false) == result1); ASSERT (test_utimens (do_fdutimens, false) == result1); ASSERT (test_futimens (do_futimens, false) == result2); ASSERT (test_lutimens (do_lutimens, false) == result3); ASSERT (test_lutimens (do_lutimens1, false) == result3); /* Directory relative tests. */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (chdir (BASE "dir") == 0); fd = creat ("file", 0600); ASSERT (0 <= fd); errno = 0; ASSERT (fdutimensat (AT_FDCWD, fd, ".", NULL, 0) == -1); ASSERT (errno == ENOTDIR); { struct timespec ts[2]; struct stat st; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; ASSERT (fdutimensat (fd, dfd, BASE "dir/file", ts, 0) == 0); ASSERT (stat ("file", &st) == 0); ASSERT (st.st_atime == Y2K); ASSERT (get_stat_atime_ns (&st) == 0); ASSERT (st.st_mtime == Y2K); ASSERT (get_stat_mtime_ns (&st) == 0); } ASSERT (close (fd) == 0); ASSERT (close (dfd) == 0); errno = 0; ASSERT (fdutimensat (-1, dfd, ".", NULL, 0) == -1); ASSERT (errno == EBADF); /* Cleanup. */ ASSERT (chdir ("..") == 0); ASSERT (unlink (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); return result1 | result2 | result3; } �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fflush.c���������������������������������������������������������0000664�0000000�0000000�00000012170�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fflush() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake, 2007. */ #include <config.h> /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fflush, int, (FILE *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { FILE *f; char buffer[10]; int fd; /* Create test file. */ f = fopen ("test-fflush.txt", "w"); if (!f || fwrite ("1234567890ABCDEFG", 1, 17, f) != 17 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); unlink ("test-fflush.txt"); return 1; } /* Test fflush. */ f = fopen ("test-fflush.txt", "r"); ASSERT (f != NULL); fd = fileno (f); if (!f || 0 > fd || fread (buffer, 1, 5, f) != 5) { fputs ("Failed initial read of sample file.\n", stderr); if (f) fclose (f); unlink ("test-fflush.txt"); return 1; } /* For deterministic results, ensure f read a bigger buffer. This is not the case on BeOS, nor on uClibc. */ #if !(defined __BEOS__ || defined __UCLIBC__) if (lseek (fd, 0, SEEK_CUR) == 5) { fputs ("Sample file was not buffered after fread.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } #endif /* POSIX requires fflush-fseek to set file offset of fd. */ if (fflush (f) != 0 || fseeko (f, 0, SEEK_CUR) != 0) { fputs ("Failed to flush-fseek sample file.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } /* Check that offset is correct. */ if (lseek (fd, 0, SEEK_CUR) != 5) { fprintf (stderr, "File offset is wrong after fseek: %ld.\n", (long) lseek (fd, 0, SEEK_CUR)); fclose (f); unlink ("test-fflush.txt"); return 1; } if (ftell (f) != 5) { fprintf (stderr, "ftell result is wrong after fseek: %ld.\n", (long) ftell (f)); fclose (f); unlink ("test-fflush.txt"); return 1; } /* Check that file reading resumes at correct location. */ if (fgetc (f) != '6') { fputs ("Failed to read next byte after fseek.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } /* For deterministic results, ensure f read a bigger buffer. */ if (lseek (fd, 0, SEEK_CUR) == 6) { fputs ("Sample file was not buffered after fgetc.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } /* POSIX requires fflush-fseeko to set file offset of fd. */ if (fflush (f) != 0 || fseeko (f, 0, SEEK_CUR) != 0) { fputs ("Failed to flush-fseeko sample file.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } /* Check that offset is correct. */ if (lseek (fd, 0, SEEK_CUR) != 6) { fprintf (stderr, "File offset is wrong after fseeko: %ld.\n", (long) lseek (fd, 0, SEEK_CUR)); fclose (f); unlink ("test-fflush.txt"); return 1; } if (ftell (f) != 6) { fprintf (stderr, "ftell result is wrong after fseeko: %ld.\n", (long) ftell (f)); fclose (f); unlink ("test-fflush.txt"); return 1; } /* Check that file reading resumes at correct location. */ if (fgetc (f) != '7') { fputs ("Failed to read next byte after fseeko.\n", stderr); fclose (f); unlink ("test-fflush.txt"); return 1; } fclose (f); /* Test that fflush() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen ("test-fflush.txt", "w"); ASSERT (fp != NULL); fputc ('x', fp); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fflush (fp) == EOF); ASSERT (errno == EBADF); fclose (fp); } /* Test that fflush() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { fputc ('x', fp); errno = 0; ASSERT (fflush (fp) == EOF); ASSERT (errno == EBADF); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { fputc ('x', fp); errno = 0; ASSERT (fflush (fp) == EOF); ASSERT (errno == EBADF); } } /* Clean up. */ unlink ("test-fflush.txt"); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fflush2.c��������������������������������������������������������0000664�0000000�0000000�00000005531�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fflush() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "binary-io.h" #include "macros.h" int main (int argc, char **argv) { int c; /* Avoid the well-known bugs of fflush() on streams in O_TEXT mode on native Windows platforms. */ set_binary_mode (0, O_BINARY); if (argc > 1) switch (argv[1][0]) { case '1': /* Check fflush after a backup ungetc() call. This is case 1a in terms of <https://lists.gnu.org/r/bug-gnulib/2008-03/msg00131.html>, according to the Austin Group's resolution on 2009-01-08. */ c = fgetc (stdin); ASSERT (c == '#'); c = fgetc (stdin); ASSERT (c == '!'); /* Here the file-position indicator must be 2. */ c = ungetc ('!', stdin); ASSERT (c == '!'); fflush (stdin); /* Here the file-position indicator must be 1. */ c = fgetc (stdin); ASSERT (c == '!'); c = fgetc (stdin); ASSERT (c == '/'); return 0; case '2': /* Check fflush after a non-backup ungetc() call. This is case 2a in terms of <https://lists.gnu.org/r/bug-gnulib/2008-03/msg00131.html>, according to the Austin Group's resolution on 2009-01-08. */ /* Check that fflush after a non-backup ungetc() call discards the ungetc buffer. This is mandated by POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html>: "...any characters pushed back onto the stream by ungetc() or ungetwc() that have not subsequently been read from the stream shall be discarded..." */ c = fgetc (stdin); ASSERT (c == '#'); c = fgetc (stdin); ASSERT (c == '!'); /* Here the file-position indicator must be 2. */ c = ungetc ('@', stdin); ASSERT (c == '@'); fflush (stdin); /* Here the file-position indicator must be 1. */ c = fgetc (stdin); ASSERT (c == '!'); c = fgetc (stdin); ASSERT (c == '/'); return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fflush2.sh�������������������������������������������������������0000775�0000000�0000000�00000000567�14110572173�0020336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Execute the test only with seekable input stream. # The behaviour of fflush() on a non-seekable input stream is undefined. ${CHECKER} ./test-fflush2${EXEEXT} 1 < "$srcdir/test-fflush2.sh" || exit $? ${CHECKER} ./test-fflush2${EXEEXT} 2 < "$srcdir/test-fflush2.sh" || exit $? #cat "$srcdir/test-fflush2.sh" | ${CHECKER} ./test-fflush2${EXEEXT} || exit $? exit 0 �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ffs.c������������������������������������������������������������0000664�0000000�0000000�00000003243�14110572173�0017342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 Eric Blake. */ #include <config.h> #include <strings.h> #include "signature.h" SIGNATURE_CHECK (ffs, int, (int)); #include <limits.h> #include "macros.h" #define NBITS (sizeof (int) * CHAR_BIT) static int naive (int i) { unsigned int j; for (j = 0; j < NBITS; j++) if (i & (1U << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { int x; int i; for (x = -128; x <= 128; x++) ASSERT (ffs (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (ffs (1U << i) == naive (1U << i)); ASSERT (ffs (1U << i) == i + 1); ASSERT (ffs (-1U << i) == i + 1); } for (i = 0; i < NBITS - 1; i++) { ASSERT (ffs (3U << i) == i + 1); ASSERT (ffs (-3U << i) == i + 1); } for (i = 0; i < NBITS - 2; i++) { ASSERT (ffs (5U << i) == i + 1); ASSERT (ffs (-5U << i) == i + 1); ASSERT (ffs (7U << i) == i + 1); ASSERT (ffs (-7U << i) == i + 1); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ffsl.c�����������������������������������������������������������0000664�0000000�0000000�00000003321�14110572173�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 Eric Blake. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (ffsl, int, (long int)); #include <limits.h> #include "macros.h" #define NBITS (sizeof (long int) * CHAR_BIT) static int naive (long int i) { unsigned long int j; for (j = 0; j < NBITS; j++) if (i & (1UL << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { long int x; int i; for (x = -128; x <= 128; x++) ASSERT (ffsl (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (ffsl (1UL << i) == naive (1UL << i)); ASSERT (ffsl (1UL << i) == i + 1); ASSERT (ffsl (-1UL << i) == i + 1); } for (i = 0; i < NBITS - 1; i++) { ASSERT (ffsl (3UL << i) == i + 1); ASSERT (ffsl (-3UL << i) == i + 1); } for (i = 0; i < NBITS - 2; i++) { ASSERT (ffsl (5UL << i) == i + 1); ASSERT (ffsl (-5UL << i) == i + 1); ASSERT (ffsl (7UL << i) == i + 1); ASSERT (ffsl (-7UL << i) == i + 1); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ffsll.c����������������������������������������������������������0000664�0000000�0000000�00000003400�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 Eric Blake. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (ffsll, int, (long long int)); #include <limits.h> #include "macros.h" #define NBITS (sizeof (long long int) * CHAR_BIT) static int naive (long long int i) { unsigned long long int j; for (j = 0; j < NBITS; j++) if (i & (1ULL << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { long long int x; int i; for (x = -128; x <= 128; x++) ASSERT (ffsll (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (ffsll (1ULL << i) == naive (1ULL << i)); ASSERT (ffsll (1ULL << i) == i + 1); ASSERT (ffsll (-1ULL << i) == i + 1); } for (i = 0; i < NBITS - 1; i++) { ASSERT (ffsll (3ULL << i) == i + 1); ASSERT (ffsll (-3ULL << i) == i + 1); } for (i = 0; i < NBITS - 2; i++) { ASSERT (ffsll (5ULL << i) == i + 1); ASSERT (ffsll (-5ULL << i) == i + 1); ASSERT (ffsll (7ULL << i) == i + 1); ASSERT (ffsll (-7ULL << i) == i + 1); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fgetc.c����������������������������������������������������������0000664�0000000�0000000�00000004765�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fgetc() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fgetc, int, (FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fgetc.txt"; /* We don't have an fgetc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fgetc() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fgetc() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } �����������gnulib-20210822~d383792/tests/test-file-has-acl-1.sh������������������������������������������������0000775�0000000�0000000�00000000466�14110572173�0021346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test file-has-acl on the file system of /var/tmp, which usually is a local # file system. . "${srcdir=.}/init.sh"; path_prepend_ . if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi test -d $TMPDIR || Exit 77 export TMPDIR $BOURNE_SHELL "${srcdir}/test-file-has-acl.sh" Exit $? ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-file-has-acl-2.sh������������������������������������������������0000775�0000000�0000000�00000000374�14110572173�0021345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test file-has-acl on the file system of the build directory, which may be # a local file system or NFS mounted. . "${srcdir=.}/init.sh"; path_prepend_ . TMPDIR=`pwd` export TMPDIR $BOURNE_SHELL "${srcdir}/test-file-has-acl.sh" Exit $? ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-file-has-acl.c���������������������������������������������������0000664�0000000�0000000�00000003415�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for presence of ACL. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "acl.h" #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include "macros.h" int main (int argc, char *argv[]) { const char *file; struct stat statbuf; ASSERT (argc == 2); file = argv[1]; if (stat (file, &statbuf) < 0) { fprintf (stderr, "could not access file \"%s\"\n", file); exit (EXIT_FAILURE); } /* Check against possible infinite loop in file_has_acl. */ #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ { int alarm_value = 5; signal (SIGALRM, SIG_DFL); alarm (alarm_value); } #endif #if USE_ACL { int ret = file_has_acl (file, &statbuf); if (ret < 0) { fprintf (stderr, "could not access the ACL of file \"%s\"\n", file); exit (EXIT_FAILURE); } printf ("%s\n", ret ? "yes" : "no"); } #else printf ("no\n"); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-file-has-acl.sh��������������������������������������������������0000775�0000000�0000000�00000023676�14110572173�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show all commands when run with environment variable VERBOSE=yes. test -z "$VERBOSE" || set -x test "$USE_ACL" = 0 && { echo "Skipping test: insufficient ACL support" exit 77 } # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 exit 1 } } func_tmpdir # builddir may already be set by the script that invokes this one. case "$builddir" in '') builddir=`pwd` ;; /* | ?:*) ;; *) builddir=`pwd`/$builddir ;; esac cd "$builddir" || { echo "$0: cannot determine build directory (unreadable parent dir?)" >&2 exit 1 } # Switch to a temporary directory, to increase the likelihood that ACLs are # supported on the current file system. (/tmp is usually locally mounted, # whereas the build dir is sometimes NFS-mounted.) ( cd "$tmp" # Prepare tmpfile0. rm -f tmpfile[0-9] tmp.err echo "Simple contents" > tmpfile0 chmod 600 tmpfile0 # Classification of the platform according to the programs available for # manipulating ACLs. # Possible values are: # linux, cygwin, freebsd, solaris, hpux, hpuxjfs, osf1, aix, macosx, irix, none. # TODO: Support also native Windows platforms (mingw). acl_flavor=none if (getfacl tmpfile0 >/dev/null) 2>/dev/null; then # Platforms with the getfacl and setfacl programs. # Linux, FreeBSD, Solaris, Cygwin. if (setfacl --help >/dev/null) 2>/dev/null; then # Linux, Cygwin. if (LC_ALL=C setfacl --help | grep ' --set-file' >/dev/null) 2>/dev/null; then # Linux. acl_flavor=linux else acl_flavor=cygwin fi else # FreeBSD, Solaris. if (LC_ALL=C setfacl 2>&1 | grep '\-x entries' >/dev/null) 2>/dev/null; then # FreeBSD. acl_flavor=freebsd else # Solaris. acl_flavor=solaris fi fi else if (lsacl / >/dev/null) 2>/dev/null; then # Platforms with the lsacl and chacl programs. # HP-UX, sometimes also IRIX. if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # HP-UX 11.11 or newer. acl_flavor=hpuxjfs else # HP-UX 11.00. acl_flavor=hpux fi else if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # Tru64, NonStop Kernel. if (getacl -m tmpfile0 >/dev/null) 2>/dev/null; then # Tru64. acl_flavor=osf1 else # NonStop Kernel. acl_flavor=nsk fi else if (aclget tmpfile0 >/dev/null) 2>/dev/null; then # AIX. acl_flavor=aix else if (fsaclctl -v >/dev/null) 2>/dev/null; then # Mac OS X. acl_flavor=macosx else if test -f /sbin/chacl; then # IRIX. acl_flavor=irix fi fi fi fi fi fi # func_test_file_has_acl file expected # tests the result of the file_has_acl function on file, and checks that it # matches the expected value. func_test_file_has_acl () { res=`${CHECKER} "$builddir"/test-file-has-acl${EXEEXT} "$1"` test "$res" = "$2" || { echo "file_has_acl(\"$1\") returned $res, expected $2" 1>&2 exit 1 } } # func_test_has_acl file expected # tests the result of the file_has_acl function on file, and checks that it # matches the expected value, also taking into account the system's 'ls' # program. case $acl_flavor in freebsd | solaris | hpux | macosx) case $acl_flavor in freebsd | solaris | hpux) acl_ls_option="-ld" ;; macosx) acl_ls_option="-lde" ;; esac func_test_has_acl () { func_test_file_has_acl "$1" "$2" case `/bin/ls $acl_ls_option "$1" | sed 1q` in ??????????+*) test "$2" = yes || { echo "/bin/ls $acl_ls_option $1 shows an ACL, but expected $2" 1>&2 exit 1 } ;; ??????????" "*) test "$2" = no || { echo "/bin/ls $acl_ls_option $1 shows no ACL, but expected $2" 1>&2 exit 1 } ;; esac } ;; irix) func_test_has_acl () { func_test_file_has_acl "$1" "$2" case `/bin/ls -ldD "$1" | sed 1q` in *" []") test "$2" = no || { echo "/bin/ls -ldD $1 shows no ACL, but expected $2" 1>&2 exit 1 } ;; *) test "$2" = yes || { echo "/bin/ls -ldD $1 shows an ACL, but expected $2" 1>&2 exit 1 } ;; esac } ;; *) func_test_has_acl () { func_test_file_has_acl "$1" "$2" } ;; esac func_test_has_acl tmpfile0 no mkdir tmpdir0 func_test_has_acl tmpdir0 no if test $acl_flavor != none; then # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # Use a user and group id different from the current one, to avoid # redundant/ambiguous ACLs. myuid=`$ID -u` mygid=`$ID -g` auid=1 if test "$auid" = "$myuid"; then auid=2; fi agid=1 if test "$agid" = "$mygid"; then agid=2; fi case $acl_flavor in linux | freebsd | solaris) # Set an ACL for a user. if setfacl -m user:$auid:1 tmpfile0; then func_test_has_acl tmpfile0 yes # Remove the ACL for the user. case $acl_flavor in linux) setfacl -x user:$auid tmpfile0 ;; freebsd) setfacl -x user:$auid:1 tmpfile0 ;; *) setfacl -d user:$auid:1 tmpfile0 ;; esac # On Linux and FreeBSD, the ACL for the mask is implicitly added. # On Solaris, it is always there. case $acl_flavor in linux | freebsd) func_test_has_acl tmpfile0 yes ;; *) func_test_has_acl tmpfile0 no ;; esac # Remove the ACL for the mask, if it was implicitly added. case $acl_flavor in linux | freebsd) setfacl -x mask: tmpfile0 ;; *) setfacl -d mask: tmpfile0 ;; esac func_test_has_acl tmpfile0 no fi ;; cygwin) # Set an ACL for a group. if setfacl -m group:0:1 tmpfile0; then func_test_has_acl tmpfile0 yes # Remove the ACL for the group. setfacl -d group:0 tmpfile0 func_test_has_acl tmpfile0 no fi ;; hpux | hpuxjfs) # Set an ACL for a user. orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` if chacl -r "${orig}($auid.%,--x)" tmpfile0; then func_test_has_acl tmpfile0 yes # Remove the ACL for the user. chacl -d "($auid.%,--x)" tmpfile0 func_test_has_acl tmpfile0 no else if test $acl_flavor = hpuxjfs; then # Set an ACL for a user. setacl -m user:$auid:1 tmpfile0 func_test_has_acl tmpfile0 yes # Remove the ACL for the user. setacl -d user:$auid tmpfile0 func_test_has_acl tmpfile0 no fi fi ;; osf1) # Set an ACL for a user. setacl -u user:$auid:1 tmpfile0 2> tmp.err cat tmp.err 1>&2 if grep 'Error:' tmp.err > /dev/null \ || grep 'Operation not supported' tmp.err > /dev/null; then : else func_test_has_acl tmpfile0 yes # Remove the ACL for the user. setacl -x user:$auid:1 tmpfile0 func_test_has_acl tmpfile0 no fi ;; nsk) # Set an ACL for a user. setacl -m user:$auid:1 tmpfile0 func_test_has_acl tmpfile0 yes # Remove the ACL for the user. setacl -d user:$auid tmpfile0 func_test_has_acl tmpfile0 no ;; aix) # Set an ACL for a user. { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit --x u:$auid"; } | aclput tmpfile0 if aclget tmpfile0 | grep enabled > /dev/null; then func_test_has_acl tmpfile0 yes # Remove the ACL for the user. aclget tmpfile0 | grep -v ' u:[^ ]*$' | aclput tmpfile0 func_test_has_acl tmpfile0 no fi ;; macosx) # Set an ACL for a user. /bin/chmod +a "user:daemon allow execute" tmpfile0 func_test_has_acl tmpfile0 yes # Remove the ACL for the user. /bin/chmod -a "user:daemon allow execute" tmpfile0 func_test_has_acl tmpfile0 no ;; irix) # Set an ACL for a user. /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x tmpfile0 2> tmp.err cat tmp.err 1>&2 if test -s tmp.err; then :; else func_test_has_acl tmpfile0 yes # Remove the ACL for the user. /sbin/chacl user::rw-,group::---,other::--- tmpfile0 func_test_has_acl tmpfile0 no fi ;; esac fi rm -f tmpfile[0-9] tmp.err rm -rf tmpdir0 ) || exit 1 rm -rf "$tmp" exit 0 ������������������������������������������������������������������gnulib-20210822~d383792/tests/test-filenamecat.c����������������������������������������������������0000664�0000000�0000000�00000005234�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of concatenation of two arbitrary file names. Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "filenamecat.h" #include "idx.h" #include <stdbool.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main (_GL_UNUSED int argc, char *argv[]) { static char const *const tests[][3] = { {"a", "b", "a/b"}, {"a/", "b", "a/b"}, {"a/", "/b", "a/b"}, {"a", "/b", "a/b"}, {"/", "b", "/b"}, {"/", "/b", "/./b"}, /* This result could be shorter. */ {"/", "/", "/./"}, /* This result could be shorter. */ {"a", "/", "a/"}, /* this might deserve a diagnostic */ {"/a", "/", "/a/"}, /* this might deserve a diagnostic */ {"a", "//b", "a//b"}, {"", "a", "a"}, /* this might deserve a diagnostic */ }; unsigned int i; bool fail = false; for (i = 0; i < sizeof tests / sizeof tests[0]; i++) { char *base_in_result; char const *const *t = tests[i]; char *res = file_name_concat (t[0], t[1], &base_in_result); idx_t prefixlen = base_in_result - res; size_t t0len = strlen (t[0]); size_t reslen = strlen (res); if (strcmp (res, t[2]) != 0) { fprintf (stderr, "test #%u: got %s, expected %s\n", i, res, t[2]); fail = true; } if (strcmp (t[1], base_in_result) != 0) { fprintf (stderr, "test #%u: base %s != base_in_result %s\n", i, t[1], base_in_result); fail = true; } if (! (0 <= prefixlen && prefixlen <= reslen)) { fprintf (stderr, "test #%u: base_in_result is not in result\n", i); fail = true; } if (reslen < t0len || memcmp (res, t[0], t0len) != 0) { fprintf (stderr, "test #%u: %s is not a prefix of %s\n", i, t[0], res); fail = true; } free (res); } exit (fail ? EXIT_FAILURE : EXIT_SUCCESS); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-filevercmp.c�����������������������������������������������������0000664�0000000�0000000�00000005361�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filevercmp() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 "filevercmp.h" #include <stddef.h> #include "macros.h" /* set of well sorted examples */ static const char *const examples[] = { "", ".", "..", ".0", ".9", ".A", ".Z", ".a~", ".a", ".b~", ".b", ".z", ".zz~", ".zz", ".zz.~1~", ".zz.0", "0", "9", "A", "Z", "a~", "a", "a.b~", "a.b", "a.bc~", "a.bc", "b~", "b", "gcc-c++-10.fc9.tar.gz", "gcc-c++-10.fc9.tar.gz.~1~", "gcc-c++-10.fc9.tar.gz.~2~", "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2", "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2.~1~", "glibc-2-0.1.beta1.fc10.rpm", "glibc-common-5-0.2.beta2.fc9.ebuild", "glibc-common-5-0.2b.deb", "glibc-common-11b.ebuild", "glibc-common-11-0.6rc2.ebuild", "libstdc++-0.5.8.11-0.7rc2.fc10.tar.gz", "libstdc++-4a.fc8.tar.gz", "libstdc++-4.10.4.20040204svn.rpm", "libstdc++-devel-3.fc8.ebuild", "libstdc++-devel-3a.fc9.tar.gz", "libstdc++-devel-8.fc8.deb", "libstdc++-devel-8.6.2-0.4b.fc8", "nss_ldap-1-0.2b.fc9.tar.bz2", "nss_ldap-1-0.6rc2.fc8.tar.gz", "nss_ldap-1.0-0.1a.tar.gz", "nss_ldap-10beta1.fc8.tar.gz", "nss_ldap-10.11.8.6.20040204cvs.fc10.ebuild", "z", "zz~", "zz", "zz.~1~", "zz.0", "#.b#", NULL }; int main (void) { const char *const *i; /* Following tests taken from test-strverscmp.c */ ASSERT (filevercmp ("", "") == 0); ASSERT (filevercmp ("a", "a") == 0); ASSERT (filevercmp ("a", "b") < 0); ASSERT (filevercmp ("b", "a") > 0); ASSERT (filevercmp ("a0", "a") > 0); ASSERT (filevercmp ("00", "01") < 0); ASSERT (filevercmp ("01", "010") < 0); ASSERT (filevercmp ("9", "10") < 0); ASSERT (filevercmp ("0a", "0") > 0); /* compare each version string with each other - O(n^2) */ for (i = examples; *i; i++) { const char *const *j; for (j = examples; *j; j++) { int result = filevercmp (*i, *j); if (result < 0) ASSERT (i < j); else if (0 < result) ASSERT (j < i); else ASSERT (i == j); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-float-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000001603�14110572173�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <float.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <float.h> int main () { } �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-float-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <float.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cfloat> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-float.c����������������������������������������������������������0000664�0000000�0000000�00000021625�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <float.h> substitute. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <float.h> #include "fpucw.h" #include "macros.h" /* Check that FLT_RADIX is a constant expression. */ int a[] = { FLT_RADIX }; #if FLT_RADIX == 2 /* Return 2^n. */ static float pow2f (int n) { int k = n; volatile float x = 1; volatile float y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5f; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static double pow2d (int n) { int k = n; volatile double x = 1; volatile double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static long double pow2l (int n) { int k = n; volatile long double x = 1; volatile long double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5L; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* ----------------------- 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) { /* Check that the value of FLT_MIN_EXP is well parenthesized. */ ASSERT ((FLT_MIN_EXP % 101111) == (FLT_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((FLT_MIN_10_EXP % 101111) == (FLT_MIN_10_EXP) % 101111); /* Check that 'float' is as specified in IEEE 754. */ ASSERT (FLT_MANT_DIG == 24); ASSERT (FLT_MIN_EXP == -125); ASSERT (FLT_MAX_EXP == 128); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_DIG. */ ASSERT (FLT_DIG == (int) ((FLT_MANT_DIG - 1) * 0.30103)); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_MAX_10_EXP. */ ASSERT (FLT_MAX_10_EXP == (int) (FLT_MAX_EXP * 0.30103)); /* Check the value of FLT_MAX. */ { volatile float m = FLT_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float pow2_n = pow2f (n); /* 2^n */ volatile float x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of FLT_MIN. */ { volatile float m = FLT_MIN; volatile float x = pow2f (FLT_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of FLT_EPSILON. */ { volatile float e = FLT_EPSILON; volatile float me; int n; me = 1.0f + e; ASSERT (me > 1.0f); ASSERT (me - 1.0f == e); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float half_n = pow2f (- n); /* 2^-n */ volatile float x = me - half_n; if (x < me) ASSERT (x <= 1.0f); } } } /* ----------------------- 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) { /* Check that the value of DBL_MIN_EXP is well parenthesized. */ ASSERT ((DBL_MIN_EXP % 101111) == (DBL_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((DBL_MIN_10_EXP % 101111) == (DBL_MIN_10_EXP) % 101111); /* Check that 'double' is as specified in IEEE 754. */ ASSERT (DBL_MANT_DIG == 53); ASSERT (DBL_MIN_EXP == -1021); ASSERT (DBL_MAX_EXP == 1024); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_DIG. */ ASSERT (DBL_DIG == (int) ((DBL_MANT_DIG - 1) * 0.30103)); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_MAX_10_EXP. */ ASSERT (DBL_MAX_10_EXP == (int) (DBL_MAX_EXP * 0.30103)); /* Check the value of DBL_MAX. */ { volatile double m = DBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double pow2_n = pow2d (n); /* 2^n */ volatile double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of DBL_MIN. */ { volatile double m = DBL_MIN; volatile double x = pow2d (DBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of DBL_EPSILON. */ { volatile double e = DBL_EPSILON; volatile double me; int n; me = 1.0 + e; ASSERT (me > 1.0); ASSERT (me - 1.0 == e); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double half_n = pow2d (- n); /* 2^-n */ volatile double x = me - half_n; if (x < me) ASSERT (x <= 1.0); } } } /* -------------------- 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) { /* Check that the value of LDBL_MIN_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_EXP % 101111) == (LDBL_MIN_EXP) % 101111); /* Check that the value of LDBL_MIN_10_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_10_EXP % 101111) == (LDBL_MIN_10_EXP) % 101111); /* Check that 'long double' is at least as wide as 'double'. */ ASSERT (LDBL_MANT_DIG >= DBL_MANT_DIG); ASSERT (LDBL_MIN_EXP - LDBL_MANT_DIG <= DBL_MIN_EXP - DBL_MANT_DIG); ASSERT (LDBL_MAX_EXP >= DBL_MAX_EXP); /* Check the value of LDBL_DIG. */ ASSERT (LDBL_DIG == (int)((LDBL_MANT_DIG - 1) * 0.30103)); /* Check the value of LDBL_MIN_10_EXP. */ ASSERT (LDBL_MIN_10_EXP == - (int) (- (LDBL_MIN_EXP - 1) * 0.30103)); /* Check the value of LDBL_MAX_10_EXP. */ ASSERT (LDBL_MAX_10_EXP == (int) (LDBL_MAX_EXP * 0.30103)); /* Check the value of LDBL_MAX. */ { volatile long double m = LDBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double pow2_n = pow2l (n); /* 2^n */ volatile long double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of LDBL_MIN. */ { volatile long double m = LDBL_MIN; volatile long double x = pow2l (LDBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of LDBL_EPSILON. */ { volatile long double e = LDBL_EPSILON; volatile long double me; int n; me = 1.0L + e; ASSERT (me > 1.0L); ASSERT (me - 1.0L == e); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double half_n = pow2l (- n); /* 2^-n */ volatile long double x = me - half_n; if (x < me) ASSERT (x <= 1.0L); } } } int main () { test_float (); test_double (); { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_long_double (); END_LONG_DOUBLE_ROUNDING (); } return 0; } #else int main () { fprintf (stderr, "Skipping test: FLT_RADIX is not 2.\n"); return 77; } #endif �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-flock.c����������������������������������������������������������0000664�0000000�0000000�00000007460�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of flock() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <sys/file.h> #include "signature.h" SIGNATURE_CHECK (flock, int, (int, int)); #include <fcntl.h> #include <unistd.h> #include <errno.h> #include "macros.h" static void test_shared (const char *file, int fd) { /* Should be able to acquire several shared locks on a file, through * different file table entries. */ int fd2, r; ASSERT (flock (fd, LOCK_SH) == 0); fd2 = open (file, O_RDWR, 0644); ASSERT (fd2 >= 0); r = flock (fd2, LOCK_SH | LOCK_NB); ASSERT (r == 0); /* Was able to acquire a second shared lock. */ ASSERT (flock (fd, LOCK_UN) == 0); ASSERT (close (fd2) == 0); } static void test_exclusive (const char *file, int fd) { /* Should not be able to acquire more than one exclusive lock on a file. */ int fd2, r; ASSERT (flock (fd, LOCK_EX) == 0); fd2 = open (file, O_RDWR, 0644); ASSERT (fd2 >= 0); r = flock (fd2, LOCK_EX | LOCK_NB); ASSERT (r == -1); /* Was unable to acquire a second exclusive lock. */ #if 0 /* The Linux manual page of flock(2) says: "A process may only hold one type of lock (shared or exclusive) on a file. Subsequent flock() calls on an already locked file will convert an existing lock to the new lock mode." So, the call below should convert the exclusive lock for fd to a shared and thus succeeds. The fact that it doesn't but instead fails is apparently a bug. */ /* The Solaris manual page of flock(2) says: "More than one process may hold a shared lock for a file at any given time, but multiple exclusive, or both shared and exclusive, locks may not exist simultaneously on a file. ... Requesting a lock on an object that is already locked normally causes the caller to block until the lock may be acquired. If LOCK_NB is included in operation, then this will not happen; instead, the call will fail and the error EWOULDBLOCK will be returned." So, the call below should fail and set errno to EWOULDBLOCK. The fact that it succeeds is apparently a bug. */ r = flock (fd2, LOCK_SH | LOCK_NB); ASSERT (r == -1); #endif ASSERT (flock (fd, LOCK_UN) == 0); ASSERT (close (fd2) == 0); } int main (int argc, char *argv[]) { int fd; const char *file = "test-flock.txt"; /* Open a non-empty file for testing. */ fd = open (file, O_RDWR | O_CREAT | O_TRUNC, 0644); ASSERT (fd >= 0); ASSERT (write (fd, "hello", 5) == 5); #if defined __linux__ || defined __ANDROID__ /* Invalid operation codes are rejected by the Linux implementation and by the gnulib replacement, but not by the Mac OS X implementation. */ ASSERT (flock (fd, LOCK_SH | LOCK_EX) == -1); ASSERT (errno == EINVAL); ASSERT (flock (fd, LOCK_SH | LOCK_UN) == -1); ASSERT (errno == EINVAL); ASSERT (flock (fd, LOCK_EX | LOCK_UN) == -1); ASSERT (errno == EINVAL); ASSERT (flock (fd, 0) == -1); ASSERT (errno == EINVAL); #endif test_shared (file, fd); test_exclusive (file, fd); /* Close and remove the test file. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floor-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003362�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (floor (0.0))); ASSERT (!!signbit (floor (minus_zerod)) == !!signbit (minus_zerod)); /* Positive numbers. */ ASSERT (!signbit (floor (0.3))); ASSERT (!signbit (floor (0.7))); /* Negative numbers. */ ASSERT (!!signbit (floor (-0.3)) == !!signbit (minus_zerod)); ASSERT (!!signbit (floor (-0.7)) == !!signbit (minus_zerod)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnand (floor (NaNd ()))); /* Infinity. */ ASSERT (floor (Infinityd ()) == Infinityd ()); ASSERT (floor (- Infinityd ()) == - Infinityd ()); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floor1.c���������������������������������������������������������0000664�0000000�0000000�00000004041�14110572173�0017763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (floor, double, (double)); #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main (int argc, _GL_UNUSED char **argv) { /* Zero. */ ASSERT (floor (0.0) == 0.0); ASSERT (floor (minus_zerod) == 0.0); /* Positive numbers. */ ASSERT (floor (0.3) == 0.0); ASSERT (floor (0.7) == 0.0); ASSERT (floor (1.0) == 1.0); ASSERT (floor (1.5) == 1.0); ASSERT (floor (1.999) == 1.0); ASSERT (floor (2.0) == 2.0); ASSERT (floor (65535.999) == 65535.0); ASSERT (floor (65536.0) == 65536.0); ASSERT (floor (2.341e31) == 2.341e31); /* Negative numbers. */ ASSERT (floor (-0.3) == -1.0); ASSERT (floor (-0.7) == -1.0); ASSERT (floor (-1.0) == -1.0); ASSERT (floor (-1.001) == -2.0); ASSERT (floor (-1.5) == -2.0); ASSERT (floor (-1.999) == -2.0); ASSERT (floor (-2.0) == -2.0); ASSERT (floor (-65535.999) == -65536.0); ASSERT (floor (-65536.0) == -65536.0); ASSERT (floor (-2.341e31) == -2.341e31); /* Infinite numbers. */ ASSERT (floor (Infinityd ()) == Infinityd ()); ASSERT (floor (- Infinityd ()) == - Infinityd ()); /* NaNs. */ ASSERT (isnand (floor (NaNd ()))); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floor2.c���������������������������������������������������������0000664�0000000�0000000�00000012340�14110572173�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnand-nolibm.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/floor.c. */ #define DOUBLE double #define MANT_DIG DBL_MANT_DIG #define L_(literal) literal /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE floor_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* Work around ICC's desire to optimize denormal floats to 0. */ if (z > -DBL_MIN) return L_(-1.0); /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnand (x) ? isnand (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x < 0 && x >= -1 ? result == - L_(1.0) : x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 : equal (result, x)); } /* Test the function for a given argument. */ static int check (double x) { /* If the reference implementation is incorrect, bail out immediately. */ double reference = floor_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { double result = floor (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "floor %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 15 #define NUM_LOWBITS 4 int main () { #ifdef UINT64_MAX unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 64-NUM_HIGHBITS bits. */ union { double f; uint64_t i; } janus; janus.i = ((uint64_t) highbits << (64 - NUM_HIGHBITS)) | ((uint64_t) ((int64_t) ((uint64_t) lowbits << (64 - NUM_LOWBITS)) >> (64 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); #else fprintf (stderr, "Skipping test: no 64-bit integer type available\n"); return 77; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floorf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000004353�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* If IEEE compliance was not requested, the ICC compiler inlines its own floorf assembly that turns -0.0f to 0.0f; but that is a correct result when IEEE is not enforced. To avoid spurious failure, we have to provide this dummy function in order to outsmart ICC's inlining, and call our floorf through a function pointer. */ static float dummy (float f) { return 0; } int main (int argc, _GL_UNUSED char **argv) { float (*my_floorf) (float) = argc ? floorf : dummy; /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (my_floorf (0.0f))); ASSERT (!!signbit (my_floorf (minus_zerof)) == !!signbit (minus_zerof)); /* Positive numbers. */ ASSERT (!signbit (my_floorf (0.3f))); ASSERT (!signbit (my_floorf (0.7f))); /* Negative numbers. */ ASSERT (!!signbit (my_floorf (-0.3f)) == !!signbit (minus_zerof)); ASSERT (!!signbit (my_floorf (-0.7f)) == !!signbit (minus_zerof)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanf (floorf (NaNf ()))); /* Infinity. */ ASSERT (floorf (Infinityf ()) == Infinityf ()); ASSERT (floorf (- Infinityf ()) == - Infinityf ()); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floorf1.c��������������������������������������������������������0000664�0000000�0000000�00000005140�14110572173�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (floorf, float, (float)); #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* If IEEE compliance was not requested, the ICC compiler inlines its own floorf assembly that turns -0.0f to 0.0f; but that is a correct result when IEEE is not enforced. To avoid spurious failure, we have to provide this dummy function in order to outsmart ICC's inlining, and call our floorf through a function pointer. */ static float dummy (float f) { return 0; } int main (int argc, _GL_UNUSED char **argv) { float (*my_floorf) (float) = argc ? floorf : dummy; /* Zero. */ ASSERT (my_floorf (0.0f) == 0.0f); ASSERT (my_floorf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (my_floorf (0.3f) == 0.0f); ASSERT (my_floorf (0.7f) == 0.0f); ASSERT (my_floorf (1.0f) == 1.0f); ASSERT (my_floorf (1.5f) == 1.0f); ASSERT (my_floorf (1.999f) == 1.0f); ASSERT (my_floorf (2.0f) == 2.0f); ASSERT (my_floorf (65535.99f) == 65535.0f); ASSERT (my_floorf (65536.0f) == 65536.0f); ASSERT (my_floorf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (my_floorf (-0.3f) == -1.0f); ASSERT (my_floorf (-0.7f) == -1.0f); ASSERT (my_floorf (-1.0f) == -1.0f); ASSERT (my_floorf (-1.001f) == -2.0f); ASSERT (my_floorf (-1.5f) == -2.0f); ASSERT (my_floorf (-1.999f) == -2.0f); ASSERT (my_floorf (-2.0f) == -2.0f); ASSERT (my_floorf (-65535.99f) == -65536.0f); ASSERT (my_floorf (-65536.0f) == -65536.0f); ASSERT (my_floorf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (my_floorf (Infinityf ()) == Infinityf ()); ASSERT (my_floorf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (my_floorf (NaNf ()))); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floorf2.c��������������������������������������������������������0000664�0000000�0000000�00000012155�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnanf-nolibm.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/floor.c. */ #define DOUBLE float #define MANT_DIG FLT_MANT_DIG #define L_(literal) literal##f /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE floorf_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* Work around ICC's desire to optimize denormal floats to 0. */ if (z > -FLT_MIN) return L_(-1.0); /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnanf (x) ? isnanf (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x < 0 && x >= -1 ? result == - L_(1.0) : x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 : equal (result, x)); } /* Test the function for a given argument. */ static int check (float x) { /* If the reference implementation is incorrect, bail out immediately. */ float reference = floorf_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { float result = floorf (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "floorf %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 12 #define NUM_LOWBITS 4 int main () { unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 32-NUM_HIGHBITS bits. */ union { float f; uint32_t i; } janus; janus.i = ((uint32_t) highbits << (32 - NUM_HIGHBITS)) | ((uint32_t) ((int32_t) ((uint32_t) lowbits << (32 - NUM_LOWBITS)) >> (32 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floorl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000003522�14110572173�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (floorl (0.0L))); ASSERT (!!signbit (floorl (minus_zerol)) == !!signbit (minus_zerol)); /* Positive numbers. */ ASSERT (!signbit (floorl (0.3L))); ASSERT (!signbit (floorl (0.7L))); /* Negative numbers. */ ASSERT (!!signbit (floorl (-0.3L)) == !!signbit (minus_zerol)); ASSERT (!!signbit (floorl (-0.7L)) == !!signbit (minus_zerol)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanl (floorl (NaNl ()))); /* Infinity. */ ASSERT (floorl (Infinityl ()) == Infinityl ()); ASSERT (floorl (- Infinityl ()) == - Infinityl ()); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-floorl.c���������������������������������������������������������0000664�0000000�0000000�00000004263�14110572173�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (floorl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Zero. */ ASSERT (floorl (0.0L) == 0.0L); ASSERT (floorl (minus_zerol) == 0.0L); /* Positive numbers. */ ASSERT (floorl (0.3L) == 0.0L); ASSERT (floorl (0.7L) == 0.0L); ASSERT (floorl (1.0L) == 1.0L); ASSERT (floorl (1.5L) == 1.0L); ASSERT (floorl (1.999L) == 1.0L); ASSERT (floorl (2.0L) == 2.0L); ASSERT (floorl (65535.999L) == 65535.0L); ASSERT (floorl (65536.0L) == 65536.0L); ASSERT (floorl (2.341e31L) == 2.341e31L); /* Negative numbers. */ ASSERT (floorl (-0.3L) == -1.0L); ASSERT (floorl (-0.7L) == -1.0L); ASSERT (floorl (-1.0L) == -1.0L); ASSERT (floorl (-1.001L) == -2.0L); ASSERT (floorl (-1.5L) == -2.0L); ASSERT (floorl (-1.999L) == -2.0L); ASSERT (floorl (-2.0L) == -2.0L); ASSERT (floorl (-65535.999L) == -65536.0L); ASSERT (floorl (-65536.0L) == -65536.0L); ASSERT (floorl (-2.341e31L) == -2.341e31L); /* Infinite numbers. */ ASSERT (floorl (Infinityl ()) == Infinityl ()); ASSERT (floorl (- Infinityl ()) == - Infinityl ()); /* NaNs. */ ASSERT (isnanl (floorl (NaNl ()))); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma-ieee.c�������������������������������������������������������0000664�0000000�0000000�00000002117�14110572173�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fma() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define FMA fma #include "test-fma-ieee.h" int main () { test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma-ieee.h�������������������������������������������������������0000664�0000000�0000000�00000006141�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (FMA (NAN, L_(3.0), L_(5.0)))); ASSERT (ISNAN (FMA (NAN, L_(0.0), L_(5.0)))); ASSERT (ISNAN (FMA (L_(2.0), NAN, L_(5.0)))); ASSERT (ISNAN (FMA (L_(0.0), NAN, L_(5.0)))); ASSERT (ISNAN (FMA (NAN, NAN, L_(5.0)))); ASSERT (ISNAN (FMA (NAN, L_(3.0), NAN))); ASSERT (ISNAN (FMA (NAN, L_(0.0), NAN))); ASSERT (ISNAN (FMA (L_(2.0), NAN, NAN))); ASSERT (ISNAN (FMA (L_(0.0), NAN, NAN))); ASSERT (ISNAN (FMA (NAN, NAN, NAN))); /* Infinity. */ ASSERT (ISNAN (FMA (INFINITY, L_(2.0), - INFINITY))); ASSERT (ISNAN (FMA (INFINITY, - L_(2.0), INFINITY))); ASSERT (ISNAN (FMA (- INFINITY, L_(2.0), INFINITY))); ASSERT (ISNAN (FMA (- INFINITY, - L_(2.0), - INFINITY))); ASSERT (ISNAN (FMA (L_(2.0), INFINITY, - INFINITY))); ASSERT (ISNAN (FMA (L_(2.0), - INFINITY, INFINITY))); ASSERT (ISNAN (FMA (- L_(2.0), INFINITY, INFINITY))); ASSERT (ISNAN (FMA (- L_(2.0), - INFINITY, - INFINITY))); ASSERT (FMA (INFINITY, L_(2.0), INFINITY) == INFINITY); ASSERT (FMA (INFINITY, - L_(2.0), - INFINITY) == - INFINITY); ASSERT (FMA (- INFINITY, L_(2.0), - INFINITY) == - INFINITY); ASSERT (FMA (- INFINITY, - L_(2.0), INFINITY) == INFINITY); ASSERT (FMA (L_(2.0), INFINITY, INFINITY) == INFINITY); ASSERT (FMA (L_(2.0), - INFINITY, - INFINITY) == - INFINITY); ASSERT (FMA (- L_(2.0), INFINITY, - INFINITY) == - INFINITY); ASSERT (FMA (- L_(2.0), - INFINITY, INFINITY) == INFINITY); /* Infinity times zero is NaN. */ ASSERT (ISNAN (FMA (INFINITY, L_(0.0), L_(7.0)))); ASSERT (ISNAN (FMA (INFINITY, L_(0.0), INFINITY))); ASSERT (ISNAN (FMA (INFINITY, L_(0.0), NAN))); ASSERT (ISNAN (FMA (- INFINITY, L_(0.0), L_(7.0)))); ASSERT (ISNAN (FMA (- INFINITY, L_(0.0), INFINITY))); ASSERT (ISNAN (FMA (- INFINITY, L_(0.0), NAN))); ASSERT (ISNAN (FMA (L_(0.0), INFINITY, L_(7.0)))); ASSERT (ISNAN (FMA (L_(0.0), INFINITY, INFINITY))); ASSERT (ISNAN (FMA (L_(0.0), INFINITY, NAN))); ASSERT (ISNAN (FMA (L_(0.0), - INFINITY, L_(7.0)))); ASSERT (ISNAN (FMA (L_(0.0), - INFINITY, INFINITY))); ASSERT (ISNAN (FMA (L_(0.0), - INFINITY, NAN))); /* NaN in the z argument. */ ASSERT (ISNAN (FMA (L_(2.0), L_(3.0), NAN))); ASSERT (ISNAN (FMA (L_(2.0), INFINITY, NAN))); ASSERT (ISNAN (FMA (INFINITY, L_(3.0), NAN))); ASSERT (ISNAN (FMA (INFINITY, INFINITY, NAN))); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma1.c�����������������������������������������������������������0000664�0000000�0000000�00000002277�14110572173�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fma(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fma, double, (double, double, double)); #include "isnand-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #include "test-fma1.h" int main () { test_function (fma); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma1.h�����������������������������������������������������������0000664�0000000�0000000�00000011264�14110572173�0017417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fused multiply-add. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ static void test_function (DOUBLE (*my_fma) (DOUBLE, DOUBLE, DOUBLE)) { volatile DOUBLE x; volatile DOUBLE y; volatile DOUBLE z; volatile DOUBLE result; volatile DOUBLE expected; /* Combinations with NaN. */ /* "If x or y are NaN, a NaN shall be returned." */ { x = NAN; y = NAN; z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = NAN; y = NAN; z = L_(1.0); result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = NAN; y = L_(0.0); z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = NAN; y = L_(0.0); z = L_(1.0); result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = L_(0.0); y = NAN; z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = L_(0.0); y = NAN; z = L_(1.0); result = my_fma (x, y, z); ASSERT (ISNAN (result)); } /* "If x*y is not 0*Inf nor Inf*0 and z is a NaN, a NaN shall be returned." */ { x = L_(3.0); y = - L_(2.0); z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } /* "If one of x and y is infinite, the other is zero, and z is a NaN, a NaN shall be returned and a domain error may occur." */ { x = INFINITY; y = L_(0.0); z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = L_(0.0); y = INFINITY; z = NAN; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } /* Combinations with Infinity. */ /* "If x multiplied by y is an exact infinity and z is also an infinity but with the opposite sign, a domain error shall occur, and either a NaN (if supported), or an implementation-defined value shall be returned." */ { x = INFINITY; y = L_(3.0); z = - INFINITY; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = INFINITY; y = - L_(3.0); z = INFINITY; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = L_(3.0); y = INFINITY; z = - INFINITY; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = - L_(3.0); y = INFINITY; z = INFINITY; result = my_fma (x, y, z); ASSERT (ISNAN (result)); } /* "If one of x and y is infinite, the other is zero, and z is not a NaN, a domain error shall occur, and either a NaN (if supported), or an implementation-defined value shall be returned." */ { x = INFINITY; y = L_(0.0); z = L_(5.0); result = my_fma (x, y, z); ASSERT (ISNAN (result)); } { x = L_(0.0); y = INFINITY; z = L_(5.0); result = my_fma (x, y, z); ASSERT (ISNAN (result)); } /* Infinite results. */ { x = - L_(2.0); y = L_(3.0); z = INFINITY; result = my_fma (x, y, z); expected = INFINITY; ASSERT (result == expected); } { x = INFINITY; y = L_(3.0); z = INFINITY; result = my_fma (x, y, z); expected = INFINITY; ASSERT (result == expected); } { x = INFINITY; y = - L_(3.0); z = - INFINITY; result = my_fma (x, y, z); expected = - INFINITY; ASSERT (result == expected); } { x = L_(3.0); y = INFINITY; z = INFINITY; result = my_fma (x, y, z); expected = INFINITY; ASSERT (result == expected); } { x = - L_(3.0); y = INFINITY; z = - INFINITY; result = my_fma (x, y, z); expected = - INFINITY; ASSERT (result == expected); } /* Combinations with zero. */ { x = L_(0.0); y = L_(3.0); z = L_(11.0); result = my_fma (x, y, z); expected = L_(11.0); ASSERT (result == expected); } { x = L_(3.0); y = L_(0.0); z = L_(11.0); result = my_fma (x, y, z); expected = L_(11.0); ASSERT (result == expected); } { x = L_(3.0); y = L_(4.0); z = L_(0.0); result = my_fma (x, y, z); expected = L_(12.0); ASSERT (result == expected); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma2.c�����������������������������������������������������������0000664�0000000�0000000�00000002433�14110572173�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fma(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "float+.h" #include "infinity.h" #include "macros.h" #undef INFINITY #define DOUBLE double #define LDEXP ldexp const int MIN_EXP = DBL_MIN_EXP; /* for gdb */ #define MIN_EXP DBL_MIN_EXP const int MAX_EXP = DBL_MAX_EXP; /* for gdb */ #define MAX_EXP DBL_MAX_EXP const int MANT_BIT = DBL_MANT_BIT; /* for gdb */ #define MANT_BIT DBL_MANT_BIT #define INFINITY Infinityd () #define L_(literal) literal #include "test-fma2.h" int main () { test_function (fma); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fma2.h�����������������������������������������������������������0000664�0000000�0000000�00000060201�14110572173�0017413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fused multiply-add. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ /* Returns 2^e as a DOUBLE. */ #define POW2(e) \ LDEXP (L_(1.0), e) /* One could define XE_RANGE and YE_RANGE to 5 or 60, but this would slow down the test without the expectation of catching more bugs. */ #define XE_RANGE 0 #define YE_RANGE 0 /* Define to 1 if you want to allow the behaviour of the 'double-double' implementation of 'long double' (seen on IRIX 6.5 and Linux/PowerPC). This floating-point type does not follow IEEE 754. */ #if MANT_BIT == LDBL_MANT_BIT && LDBL_MANT_BIT == 2 * DBL_MANT_BIT # define FORGIVE_DOUBLEDOUBLE_BUG 1 #else # define FORGIVE_DOUBLEDOUBLE_BUG 0 #endif /* Subnormal numbers appear to not work as expected on IRIX 6.5. */ #ifdef __sgi # define MIN_SUBNORMAL_EXP (MIN_EXP - 1) #else # define MIN_SUBNORMAL_EXP (MIN_EXP - MANT_BIT) #endif /* Check rounding behaviour. */ static void test_function (DOUBLE (*my_fma) (DOUBLE, DOUBLE, DOUBLE)) { /* Array mapping n to (-1)^n. */ static const DOUBLE pow_m1[] = { L_(1.0), - L_(1.0), L_(1.0), - L_(1.0), L_(1.0), - L_(1.0), L_(1.0), - L_(1.0) }; /* A product x * y that consists of two bits. */ { volatile DOUBLE x; volatile DOUBLE y; volatile DOUBLE z; volatile DOUBLE result; volatile DOUBLE expected; int xs; int xe; int ys; int ye; int ze; DOUBLE sign; for (xs = 0; xs < 2; xs++) for (xe = -XE_RANGE; xe <= XE_RANGE; xe++) { x = pow_m1[xs] * POW2 (xe); /* (-1)^xs * 2^xe */ for (ys = 0; ys < 2; ys++) for (ye = -YE_RANGE; ye <= YE_RANGE; ye++) { y = pow_m1[ys] * POW2 (ye); /* (-1)^ys * 2^ye */ sign = pow_m1[xs + ys]; /* Test addition (same signs). */ for (ze = MIN_EXP - MANT_BIT; ze <= MAX_EXP - 1;) { z = sign * POW2 (ze); /* (-1)^(xs+ys) * 2^ze */ result = my_fma (x, y, z); if (xe + ye >= ze + MANT_BIT) expected = sign * POW2 (xe + ye); else if (xe + ye > ze - MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (ze)); else expected = z; ASSERT (result == expected); ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } /* Test subtraction (opposite signs). */ for (ze = MIN_EXP - MANT_BIT; ze <= MAX_EXP - 1;) { z = - sign * POW2 (ze); /* (-1)^(xs+ys+1) * 2^ze */ result = my_fma (x, y, z); if (xe + ye > ze + MANT_BIT) expected = sign * POW2 (xe + ye); else if (xe + ye >= ze) expected = sign * (POW2 (xe + ye) - POW2 (ze)); else if (xe + ye > ze - 1 - MANT_BIT) expected = - sign * (POW2 (ze) - POW2 (xe + ye)); else expected = z; ASSERT (result == expected); ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } } } } /* A product x * y that consists of three bits. */ { volatile DOUBLE x; volatile DOUBLE y; volatile DOUBLE z; volatile DOUBLE result; volatile DOUBLE expected; int i; int xs; int xe; int ys; int ye; int ze; DOUBLE sign; for (i = 1; i <= MANT_BIT - 1; i++) for (xs = 0; xs < 2; xs++) for (xe = -XE_RANGE; xe <= XE_RANGE; xe++) { x = /* (-1)^xs * (2^xe + 2^(xe-i)) */ pow_m1[xs] * (POW2 (xe) + POW2 (xe - i)); for (ys = 0; ys < 2; ys++) for (ye = -YE_RANGE; ye <= YE_RANGE; ye++) { y = /* (-1)^ys * (2^ye + 2^(ye-i)) */ pow_m1[ys] * (POW2 (ye) + POW2 (ye - i)); sign = pow_m1[xs + ys]; /* The exact value of x * y is (-1)^(xs+ys) * (2^(xe+ye) + 2^(xe+ye-i+1) + 2^(xe+ye-2*i)) */ /* Test addition (same signs). */ for (ze = MIN_SUBNORMAL_EXP; ze <= MAX_EXP - 1;) { z = sign * POW2 (ze); /* (-1)^(xs+ys) * 2^ze */ result = my_fma (x, y, z); if (FORGIVE_DOUBLEDOUBLE_BUG) if ((xe + ye > ze && xe + ye < ze + MANT_BIT && i == DBL_MANT_BIT) || (xe + ye == ze + DBL_MANT_BIT && i == DBL_MANT_BIT + 1) || (xe + ye == ze + MANT_BIT - 1 && i == 1)) goto skip1; if (xe + ye > ze + MANT_BIT) { if (2 * i > MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else if (2 * i == MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - MANT_BIT + 1)); else expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze + MANT_BIT) { if (2 * i >= MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - MANT_BIT + 1)); else if (2 * i == MANT_BIT - 1) /* round-to-even rounds up */ expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i + 1)); else expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye > ze - MANT_BIT + 2 * i) expected = sign * (POW2 (ze) + POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); else if (xe + ye >= ze - MANT_BIT + i) expected = sign * (POW2 (ze) + POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else if (xe + ye == ze - MANT_BIT + i - 1) { if (i == 1) expected = sign * (POW2 (ze) + POW2 (ze - MANT_BIT + 1)); else expected = sign * (POW2 (ze) + POW2 (xe + ye) + POW2 (ze - MANT_BIT + 1)); } else if (xe + ye >= ze - MANT_BIT + 1) expected = sign * (POW2 (ze) + POW2 (xe + ye)); else if (xe + ye == ze - MANT_BIT) expected = sign * (POW2 (ze) + POW2 (ze - MANT_BIT + 1)); else if (xe + ye == ze - MANT_BIT - 1) { if (i == 1) expected = sign * (POW2 (ze) + POW2 (ze - MANT_BIT + 1)); else expected = z; } else expected = z; ASSERT (result == expected); skip1: ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } /* Test subtraction (opposite signs). */ if (i > 1) for (ze = MIN_SUBNORMAL_EXP; ze <= MAX_EXP - 1;) { z = - sign * POW2 (ze); /* (-1)^(xs+ys+1) * 2^ze */ result = my_fma (x, y, z); if (FORGIVE_DOUBLEDOUBLE_BUG) if ((xe + ye == ze && i == MANT_BIT - 1) || (xe + ye > ze && xe + ye <= ze + DBL_MANT_BIT - 1 && i == DBL_MANT_BIT + 1) || (xe + ye >= ze + DBL_MANT_BIT - 1 && xe + ye < ze + MANT_BIT && xe + ye == ze + i - 1) || (xe + ye > ze + DBL_MANT_BIT && xe + ye < ze + MANT_BIT && i == DBL_MANT_BIT)) goto skip2; if (xe + ye == ze) { /* maximal extinction */ expected = sign * (POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze - 1) { /* significant extinction */ if (2 * i > MANT_BIT) expected = sign * (- POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else expected = sign * (- POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye > ze + MANT_BIT) { if (2 * i >= MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze + MANT_BIT) { if (2 * i >= MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else if (2 * i == MANT_BIT - 1) /* round-to-even rounds down */ expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else /* round-to-even rounds up */ expected = sign * (POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); } else if (xe + ye >= ze - MANT_BIT + 2 * i) expected = sign * (- POW2 (ze) + POW2 (xe + ye) + POW2 (xe + ye - i + 1) + POW2 (xe + ye - 2 * i)); else if (xe + ye >= ze - MANT_BIT + i - 1) expected = sign * (- POW2 (ze) + POW2 (xe + ye) + POW2 (xe + ye - i + 1)); else if (xe + ye == ze - MANT_BIT + i - 2) expected = sign * (- POW2 (ze) + POW2 (xe + ye) + POW2 (ze - MANT_BIT)); else if (xe + ye >= ze - MANT_BIT) expected = sign * (- POW2 (ze) + POW2 (xe + ye)); else if (xe + ye == ze - MANT_BIT - 1) expected = sign * (- POW2 (ze) + POW2 (ze - MANT_BIT)); else expected = z; ASSERT (result == expected); skip2: ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } } } } /* TODO: Similar tests with x = (-1)^xs * (2^xe - 2^(xe-i)), y = (-1)^ys * (2^ye - 2^(ye-i)) */ /* A product x * y that consists of one segment of bits (or, if you prefer, two bits, one with positive weight and one with negative weight). */ { volatile DOUBLE x; volatile DOUBLE y; volatile DOUBLE z; volatile DOUBLE result; volatile DOUBLE expected; int i; int xs; int xe; int ys; int ye; int ze; DOUBLE sign; for (i = 1; i <= MANT_BIT - 1; i++) for (xs = 0; xs < 2; xs++) for (xe = -XE_RANGE; xe <= XE_RANGE; xe++) { x = /* (-1)^xs * (2^xe + 2^(xe-i)) */ pow_m1[xs] * (POW2 (xe) + POW2 (xe - i)); for (ys = 0; ys < 2; ys++) for (ye = -YE_RANGE; ye <= YE_RANGE; ye++) { y = /* (-1)^ys * (2^ye - 2^(ye-i)) */ pow_m1[ys] * (POW2 (ye) - POW2 (ye - i)); sign = pow_m1[xs + ys]; /* The exact value of x * y is (-1)^(xs+ys) * (2^(xe+ye) - 2^(xe+ye-2*i)) */ /* Test addition (same signs). */ for (ze = MIN_EXP - MANT_BIT; ze <= MAX_EXP - 1;) { z = sign * POW2 (ze); /* (-1)^(xs+ys) * 2^ze */ result = my_fma (x, y, z); if (FORGIVE_DOUBLEDOUBLE_BUG) if ((xe + ye == ze + MANT_BIT && i > DBL_MANT_BIT) || (xe + ye < ze + MANT_BIT && xe + ye >= ze && i == DBL_MANT_BIT) || (xe + ye < ze && xe + ye == ze - MANT_BIT + 2 * i)) goto skip3; if (xe + ye > ze + MANT_BIT + 1) { if (2 * i > MANT_BIT) expected = sign * POW2 (xe + ye); else expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze + MANT_BIT + 1) { if (2 * i >= MANT_BIT) expected = sign * POW2 (xe + ye); else expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - 2 * i)); } else if (xe + ye >= ze - MANT_BIT + 2 * i) { if (2 * i > MANT_BIT) expected = sign * (POW2 (xe + ye) + POW2 (ze)); else expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - 2 * i) + POW2 (ze)); } else if (xe + ye >= ze - MANT_BIT + 1) expected = sign * (POW2 (ze) + POW2 (xe + ye)); else expected = z; ASSERT (result == expected); skip3: ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } /* Test subtraction (opposite signs). */ if (i > 1) for (ze = MIN_SUBNORMAL_EXP; ze <= MAX_EXP - 1;) { z = - sign * POW2 (ze); /* (-1)^(xs+ys+1) * 2^ze */ result = my_fma (x, y, z); if (FORGIVE_DOUBLEDOUBLE_BUG) if (xe + ye > ze && xe + ye < ze + DBL_MANT_BIT && xe + ye == ze + 2 * i - LDBL_MANT_BIT) goto skip4; if (xe + ye == ze) { /* maximal extinction */ expected = sign * - POW2 (xe + ye - 2 * i); } else if (xe + ye > ze + MANT_BIT + 1) { if (2 * i > MANT_BIT + 1) expected = sign * POW2 (xe + ye); else if (2 * i == MANT_BIT + 1) expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - MANT_BIT)); else expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze + MANT_BIT + 1) { if (2 * i > MANT_BIT) expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - MANT_BIT)); else if (2 * i == MANT_BIT) expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - MANT_BIT + 1)); else expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze + MANT_BIT) { if (2 * i > MANT_BIT + 1) expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - MANT_BIT)); else if (2 * i == MANT_BIT + 1) expected = sign * (POW2 (xe + ye) - POW2 (xe + ye - MANT_BIT + 1)); else expected = sign * (POW2 (xe + ye) - POW2 (ze) - POW2 (xe + ye - 2 * i)); } else if (xe + ye > ze - MANT_BIT + 2 * i) { if (2 * i > MANT_BIT) expected = sign * (POW2 (xe + ye) - POW2 (ze)); else expected = sign * (POW2 (xe + ye) - POW2 (ze) - POW2 (xe + ye - 2 * i)); } else if (xe + ye == ze - MANT_BIT + 2 * i) expected = sign * (- POW2 (ze) + POW2 (xe + ye) - POW2 (xe + ye - 2 * i)); else if (xe + ye >= ze - MANT_BIT) expected = sign * (- POW2 (ze) + POW2 (xe + ye)); else expected = z; ASSERT (result == expected); skip4: ze++; /* Shortcut some values of ze, to speed up the test. */ if (ze == MIN_EXP + MANT_BIT) ze = - 2 * MANT_BIT - 1; else if (ze == 2 * MANT_BIT) ze = MAX_EXP - MANT_BIT - 1; } } } } /* TODO: Tests with denormalized results. */ /* Tests with temporary overflow. */ { volatile DOUBLE x = POW2 (MAX_EXP - 1); volatile DOUBLE y = POW2 (MAX_EXP - 1); volatile DOUBLE z = - INFINITY; volatile DOUBLE result = my_fma (x, y, z); ASSERT (result == - INFINITY); } { volatile DOUBLE x = POW2 (MAX_EXP - 1); /* 2^(MAX_EXP-1) */ volatile DOUBLE y = L_(2.0); /* 2^1 */ volatile DOUBLE z = /* -(2^MAX_EXP - 2^(MAX_EXP-MANT_BIT)) */ - LDEXP (POW2 (MAX_EXP - 1) - POW2 (MAX_EXP - MANT_BIT - 1), 1); volatile DOUBLE result = my_fma (x, y, z); if (!FORGIVE_DOUBLEDOUBLE_BUG) ASSERT (result == POW2 (MAX_EXP - MANT_BIT)); } { volatile DOUBLE x = POW2 (MAX_EXP - 1); /* 2^(MAX_EXP-1) */ volatile DOUBLE y = L_(3.0); /* 3 */ volatile DOUBLE z = - LDEXP (L_(5.0), MAX_EXP - 3); /* -5*2^(MAX_EXP-3) */ volatile DOUBLE result = my_fma (x, y, z); ASSERT (result == LDEXP (L_(7.0), MAX_EXP - 3)); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmaf-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002123�14110572173�0020376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmaf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define FMA fmaf #include "test-fma-ieee.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmaf1.c����������������������������������������������������������0000664�0000000�0000000�00000002300�14110572173�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmaf(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fmaf, float, (float, float, float)); #include "isnanf-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #include "test-fma1.h" int main () { test_function (fmaf); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmaf2.c����������������������������������������������������������0000664�0000000�0000000�00000002440�14110572173�0017555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmaf(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "float+.h" #include "infinity.h" #include "macros.h" #undef INFINITY #define DOUBLE float #define LDEXP ldexpf const int MIN_EXP = FLT_MIN_EXP; /* for gdb */ #define MIN_EXP FLT_MIN_EXP const int MAX_EXP = FLT_MAX_EXP; /* for gdb */ #define MAX_EXP FLT_MAX_EXP const int MANT_BIT = FLT_MANT_BIT; /* for gdb */ #define MANT_BIT FLT_MANT_BIT #define INFINITY Infinityf () #define L_(literal) literal##f #include "test-fma2.h" int main () { test_function (fmaf); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmal-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002131�14110572173�0020403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmal() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define FMA fmal #include "test-fma-ieee.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmal1.c����������������������������������������������������������0000664�0000000�0000000�00000002460�14110572173�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmal(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fmal, long double, (long double, long double, long double)); #include "fpucw.h" #include "isnanl-nolibm.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #include "test-fma1.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_function (fmal); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmal2.c����������������������������������������������������������0000664�0000000�0000000�00000002576�14110572173�0017575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmal(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <math.h> #include "fpucw.h" #include "float+.h" #include "infinity.h" #include "macros.h" #undef INFINITY #define DOUBLE long double #define LDEXP ldexpl const int MIN_EXP = LDBL_MIN_EXP; /* for gdb */ #define MIN_EXP LDBL_MIN_EXP const int MAX_EXP = LDBL_MAX_EXP; /* for gdb */ #define MAX_EXP LDBL_MAX_EXP const int MANT_BIT = LDBL_MANT_BIT; /* for gdb */ #define MANT_BIT LDBL_MANT_BIT #define INFINITY Infinityl () #define L_(literal) literal##L #include "test-fma2.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_function (fmal); return 0; } ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmod-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmod() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define FMOD fmod #include "test-fmod-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmod-ieee.h������������������������������������������������������0000664�0000000�0000000�00000005154�14110572173�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmod*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (FMOD (NAN, L_(2.0)))); ASSERT (ISNAN (FMOD (NAN, L_(0.0)))); ASSERT (ISNAN (FMOD (L_(2.0), NAN))); ASSERT (ISNAN (FMOD (L_(0.0), NAN))); ASSERT (ISNAN (FMOD (NAN, NAN))); /* y is zero. */ ASSERT (ISNAN (FMOD (L_(2.0), L_(0.0)))); ASSERT (ISNAN (FMOD (L_(2.0), MINUS_ZERO))); ASSERT (ISNAN (FMOD (INFINITY, L_(0.0)))); ASSERT (ISNAN (FMOD (INFINITY, MINUS_ZERO))); /* x is infinite. */ ASSERT (ISNAN (FMOD (INFINITY, L_(2.0)))); ASSERT (ISNAN (FMOD (INFINITY, - L_(2.0)))); /* x is zero. */ { DOUBLE z = FMOD (L_(0.0), L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = FMOD (MINUS_ZERO, L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } { DOUBLE z = FMOD (L_(0.0), - L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = FMOD (MINUS_ZERO, - L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } { DOUBLE z = FMOD (L_(0.0), INFINITY); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = FMOD (MINUS_ZERO, INFINITY); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } { DOUBLE z = FMOD (L_(0.0), - INFINITY); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = FMOD (MINUS_ZERO, - INFINITY); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } /* y is infinite. */ { DOUBLE z = FMOD (L_(2.5), INFINITY); ASSERT (z == L_(2.5)); } { DOUBLE z = FMOD (L_(2.5), - INFINITY); ASSERT (z == L_(2.5)); } { DOUBLE z = FMOD (- L_(2.5), INFINITY); ASSERT (z == - L_(2.5)); } { DOUBLE z = FMOD (- L_(2.5), - INFINITY); ASSERT (z == - L_(2.5)); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmod.c�����������������������������������������������������������0000664�0000000�0000000�00000002431�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmod() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fmod, double, (double, double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MAX_EXP DBL_MAX_EXP #define FMOD fmod #define RANDOM randomd #include "test-fmod.h" int main () { /* A particular value. */ x = 9.245907126; y = 3.141592654; z = fmod (x, y); ASSERT (z >= 2.962721817 && z <= 2.962721819); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmod.h�����������������������������������������������������������0000664�0000000�0000000�00000010713�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmod*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static DOUBLE my_ldexp (DOUBLE x, int d) { for (; d > 0; d--) x *= L_(2.0); for (; d < 0; d++) x *= L_(0.5); return x; } static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = FMOD (x, y); ASSERT (z >= L_(0.0)); ASSERT (z < y); z -= x - (int) (x / y) * y; ASSERT (/* The common case. */ (z > - L_(16.0) / TWO_MANT_DIG && z < L_(16.0) / TWO_MANT_DIG) || /* rounding error: x / y computed too large */ (z > y - L_(16.0) / TWO_MANT_DIG && z < y + L_(16.0) / TWO_MANT_DIG) || /* rounding error: x / y computed too small */ (z > - y - L_(16.0) / TWO_MANT_DIG && z < - y + L_(16.0) / TWO_MANT_DIG)); } } for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(1.0e9) * RANDOM[i]; /* 0.0 <= x <= 10^9 */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = FMOD (x, y); DOUBLE r; ASSERT (z >= L_(0.0)); ASSERT (z < y); { /* Determine the quotient x / y in two steps, because it may be > 2^31. */ int q1 = (int) (x / y / L_(65536.0)); int q2 = (int) ((x - q1 * L_(65536.0) * y) / y); DOUBLE q = (DOUBLE) q1 * L_(65536.0) + (DOUBLE) q2; r = x - q * y; } /* The absolute error of z can be up to 1e9/2^MANT_DIG. The absolute error of r can also be up to 1e9/2^MANT_DIG. Therefore the error of z - r can be twice as large. */ z -= r; ASSERT (/* The common case. */ (z > - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < L_(2.0) * L_(1.0e9) / TWO_MANT_DIG) || /* rounding error: x / y computed too large */ (z > y - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < y + L_(2.0) * L_(1.0e9) / TWO_MANT_DIG) || /* rounding error: x / y computed too small */ (z > - y - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < - y + L_(2.0) * L_(1.0e9) / TWO_MANT_DIG)); } } { int large_exp = (MAX_EXP - 1 < 1000 ? MAX_EXP - 1 : 1000); DOUBLE large = my_ldexp (L_(1.0), large_exp); /* = 2^large_exp */ for (i = 0; i < SIZEOF (RANDOM) / 10; i++) for (j = 0; j < SIZEOF (RANDOM) / 10; j++) { DOUBLE x = large * RANDOM[i]; /* 0.0 <= x <= 2^large_exp */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = FMOD (x, y); /* Regardless how large the rounding errors are, the result must be >= 0, < y. */ ASSERT (z >= L_(0.0)); ASSERT (z < y); } } } } volatile DOUBLE x; volatile DOUBLE y; DOUBLE z; �����������������������������������������������������gnulib-20210822~d383792/tests/test-fmodf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmodf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define FMOD fmodf #include "test-fmod-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmodf.c����������������������������������������������������������0000664�0000000�0000000�00000002431�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmodf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fmodf, float, (float, float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MAX_EXP FLT_MAX_EXP #define FMOD fmodf #define RANDOM randomf #include "test-fmod.h" int main () { /* A particular value. */ x = 9.245907f; y = 3.141593f; z = fmodf (x, y); ASSERT (z >= 2.962720f && z <= 2.962722f); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmodl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmodl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define FMOD fmodl #include "test-fmod-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fmodl.c����������������������������������������������������������0000664�0000000�0000000�00000002614�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmodl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (fmodl, long double, (long double, long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MAX_EXP LDBL_MAX_EXP #define FMOD fmodl #define RANDOM randoml #include "test-fmod.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 9.245907126L; y = 3.141592654L; z = fmodl (x, y); ASSERT (z >= 2.962721817L && z <= 2.962721819L); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fnmatch-h-c++.cc�������������������������������������������������0000664�0000000�0000000�00000002046�14110572173�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fnmatch.h> substitute in C++ mode. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <fnmatch.h> #include "signature.h" #if GNULIB_TEST_FNMATCH SIGNATURE_CHECK (GNULIB_NAMESPACE::fnmatch, int, (const char *, const char *, int)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fnmatch-h.c������������������������������������������������������0000664�0000000�0000000�00000001766�14110572173�0020441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fnmatch.h> substitute. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <fnmatch.h> /* Check that the various FNM_* macros are defined. */ int ret = FNM_NOMATCH; int options[] = { FNM_PATHNAME, FNM_PERIOD, FNM_NOESCAPE }; int main (void) { return 0; } ����������gnulib-20210822~d383792/tests/test-fnmatch.c��������������������������������������������������������0000664�0000000�0000000�00000004222�14110572173�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fnmatch string matching function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include <fnmatch.h> #include "signature.h" SIGNATURE_CHECK (fnmatch, int, (char const *, char const *, int)); #include "macros.h" int main () { int res; ASSERT (res = fnmatch ("", "", 0) == 0); ASSERT (res = fnmatch ("*", "", 0) == 0); ASSERT (res = fnmatch ("*", "foo", 0) == 0); ASSERT (res = fnmatch ("*", "bar", 0) == 0); ASSERT (res = fnmatch ("*", "*", 0) == 0); ASSERT (res = fnmatch ("**", "f", 0) == 0); ASSERT (res = fnmatch ("**", "foo.txt", 0) == 0); ASSERT (res = fnmatch ("*.*", "foo.txt", 0) == 0); ASSERT (res = fnmatch ("foo*.txt", "foobar.txt", 0) == 0); ASSERT (res = fnmatch ("foo.txt", "foo.txt", 0) == 0); ASSERT (res = fnmatch ("foo\\.txt", "foo.txt", 0) == 0); ASSERT (res = fnmatch ("foo\\.txt", "foo.txt", FNM_NOESCAPE) == FNM_NOMATCH); /* Verify that an unmatched [ is treated as a literal, as POSIX requires. This test ensures that glibc Bugzilla bug #12378 stays fixed. */ ASSERT (res = fnmatch ("[/b", "[/b", 0) == 0); ASSERT (fnmatch ("[[:alpha:]'[:alpha:]\0]", "a", 0) == FNM_NOMATCH); ASSERT (fnmatch ("[a[.\0.]]", "a", 0) == FNM_NOMATCH); #ifdef FNM_EXTMATCH ASSERT (fnmatch ("**(!()", "**(!()", FNM_EXTMATCH) == 0); #endif #ifdef FNM_LEADING_DIR ASSERT (fnmatch ("x?y", "x/y/z", FNM_PATHNAME | FNM_LEADING_DIR) == FNM_NOMATCH); #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fopen-gnu.c������������������������������������������������������0000664�0000000�0000000�00000004372�14110572173�0020466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "macros.h" #define BASE "test-fopen-gnu.t" /* 0x1a is an EOF on Windows. */ #define DATA "abc\x1axyz" int main (void) { FILE *f; int fd; int flags; char buf[16]; /* Remove anything from prior partial run. */ unlink (BASE "file"); unlink (BASE "binary"); /* Create the file. */ f = fopen (BASE "file", "w"); ASSERT (f); fd = fileno (f); ASSERT (fd >= 0); flags = fcntl (fd, F_GETFD); ASSERT (flags >= 0); ASSERT ((flags & FD_CLOEXEC) == 0); ASSERT (fclose (f) == 0); /* Create the file and check the 'e' mode. */ f = fopen (BASE "file", "we"); ASSERT (f); fd = fileno (f); ASSERT (fd >= 0); flags = fcntl (fd, F_GETFD); ASSERT (flags >= 0); ASSERT ((flags & FD_CLOEXEC) != 0); ASSERT (fclose (f) == 0); /* Open the file and check the 'x' mode. */ f = fopen (BASE "file", "ax"); ASSERT (f == NULL); ASSERT (errno == EEXIST); /* Open a binary file and check that the 'e' mode doesn't interfere. */ f = fopen (BASE "binary", "wbe"); ASSERT (f); ASSERT (fwrite (DATA, 1, sizeof (DATA)-1, f) == sizeof (DATA)-1); ASSERT (fclose (f) == 0); f = fopen (BASE "binary", "rbe"); ASSERT (f); ASSERT (fread (buf, 1, sizeof (buf), f) == sizeof (DATA)-1); ASSERT (fclose (f) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "binary") == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fopen-safer.c����������������������������������������������������0000664�0000000�0000000�00000001661�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "stdio--.h" #define BASE "test-fopen-safer.t" #include "test-fopen.h" int main (void) { return test_fopen (); } �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fopen.c����������������������������������������������������������0000664�0000000�0000000�00000002000�14110572173�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fopen, FILE *, (char const *, char const *)); #define BASE "test-fopen.t" #include "test-fopen.h" int main (void) { return test_fopen (); } gnulib-20210822~d383792/tests/test-fopen.h����������������������������������������������������������0000664�0000000�0000000�00000005057�14110572173�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> and a form of <stdio.h> first. */ #include <errno.h> #include <unistd.h> #include "macros.h" /* Test fopen. Assumes BASE is defined. */ static int test_fopen (void) { FILE *f; /* Remove anything from prior partial run. */ unlink (BASE "file"); /* Read requires existing file. */ errno = 0; ASSERT (fopen (BASE "file", "r") == NULL); ASSERT (errno == ENOENT); /* Write can create a file. */ f = fopen (BASE "file", "w"); ASSERT (f); ASSERT (fclose (f) == 0); /* Trailing slash is invalid on non-directory. */ errno = 0; ASSERT (fopen (BASE "file/", "r") == NULL); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); errno = 0; ASSERT (fopen (BASE "file/", "r+") == NULL); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); /* Cannot create a directory. */ errno = 0; ASSERT (fopen ("nonexist.ent/", "w") == NULL); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Directories cannot be opened for writing. */ errno = 0; ASSERT (fopen (".", "w") == NULL); ASSERT (errno == EISDIR || errno == EINVAL || errno == EACCES); errno = 0; ASSERT (fopen ("./", "w") == NULL); ASSERT (errno == EISDIR || errno == EINVAL || errno == EACCES); errno = 0; ASSERT (fopen (".", "r+") == NULL); ASSERT (errno == EISDIR || errno == EINVAL || errno == EACCES); errno = 0; ASSERT (fopen ("./", "r+") == NULL); ASSERT (errno == EISDIR || errno == EINVAL || errno == EACCES); /* /dev/null must exist, and be writable. */ f = fopen ("/dev/null", "r"); ASSERT (f); ASSERT (fclose (f) == 0); f = fopen ("/dev/null", "w"); ASSERT (f); ASSERT (fclose (f) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-forkpty.c��������������������������������������������������������0000664�0000000�0000000�00000002435�14110572173�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pty.h and forkpty function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include <pty.h> #include "signature.h" SIGNATURE_CHECK (forkpty, int, (int *, char *, struct termios const *, struct winsize const *)); #include <stdio.h> int main () { int res; int amaster; res = forkpty (&amaster, NULL, NULL, NULL); if (res == 0) { /* child process */ } else if (res > 0) { /* parent */ } else { printf ("forkpty returned %d\n", res); return 1; } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fpending.c�������������������������������������������������������0000664�0000000�0000000�00000002057�14110572173�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ensure that __fpending works. Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "fpending.h" #include <stdio.h> #include <stdlib.h> #include "macros.h" int main (void) { ASSERT (__fpending (stdout) == 0); fputs ("foo", stdout); ASSERT (__fpending (stdout) == 3); fflush (stdout); ASSERT (__fpending (stdout) == 0); exit (0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fpending.sh������������������������������������������������������0000775�0000000�0000000�00000000240�14110572173�0020543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfile= trap 'rm -fr $tmpfile' 1 2 3 15 tmpfile=test-fpending.t ${CHECKER} ./test-fpending${EXEEXT} > $tmpfile || exit 1 rm -fr $tmpfile exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002176�14110572173�0021400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fprintf, int, (FILE *, char const *, ...)); #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-fprintf-posix.h" int main (int argc, char *argv[]) { test_function (fprintf); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix.h��������������������������������������������������0000664�0000000�0000000�00000011260�14110572173�0021377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "infinity.h" static void test_function (int (*my_fprintf) (FILE *, const char *, ...)) { /* Here we don't test output that may be platform dependent. The bulk of the tests is done as part of the 'vasnprintf-posix' module. */ /* Test support of size specifiers as in C99. */ my_fprintf (stdout, "%ju %d\n", (uintmax_t) 12345671, 33, 44, 55); my_fprintf (stdout, "%zu %d\n", (size_t) 12345672, 33, 44, 55); my_fprintf (stdout, "%tu %d\n", (ptrdiff_t) 12345673, 33, 44, 55); /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ /* Positive zero. */ my_fprintf (stdout, "%a %d\n", 0.0, 33, 44, 55); /* Positive infinity. */ my_fprintf (stdout, "%a %d\n", Infinityd (), 33, 44, 55); /* Negative infinity. */ my_fprintf (stdout, "%a %d\n", - Infinityd (), 33, 44, 55); /* FLAG_ZERO with infinite number. */ my_fprintf (stdout, "%010a %d\n", Infinityd (), 33, 44, 55); /* Test the support of the %f format directive. */ /* A positive number. */ my_fprintf (stdout, "%f %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_fprintf (stdout, "%f %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_fprintf (stdout, "%f %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_fprintf (stdout, "%f %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_fprintf (stdout, "%015f %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_fprintf (stdout, "%.f %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_fprintf (stdout, "%.2f %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_fprintf (stdout, "%.2f %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_fprintf (stdout, "%Lf %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_fprintf (stdout, "%Lf %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_fprintf (stdout, "%Lf %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_fprintf (stdout, "%Lf %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_fprintf (stdout, "%015Lf %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_fprintf (stdout, "%.Lf %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_fprintf (stdout, "%.2Lf %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_fprintf (stdout, "%.2Lf %d\n", 999.996L, 33, 44, 55); /* Test the support of the %F format directive. */ /* A positive number. */ my_fprintf (stdout, "%F %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_fprintf (stdout, "%F %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_fprintf (stdout, "%F %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_fprintf (stdout, "%F %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_fprintf (stdout, "%015F %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_fprintf (stdout, "%.F %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_fprintf (stdout, "%.2F %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_fprintf (stdout, "%.2F %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_fprintf (stdout, "%LF %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_fprintf (stdout, "%LF %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_fprintf (stdout, "%LF %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_fprintf (stdout, "%LF %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_fprintf (stdout, "%015LF %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_fprintf (stdout, "%.LF %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_fprintf (stdout, "%.2LF %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_fprintf (stdout, "%.2LF %d\n", 999.996L, 33, 44, 55); /* Test the support of the POSIX/XSI format strings with positions. */ my_fprintf (stdout, "%2$d %1$d\n", 33, 55); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000000604�14110572173�0021565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-fprintf-posix.tmp t-fprintf-posix.out" ${CHECKER} ./test-fprintf-posix${EXEEXT} > t-fprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-fprintf-posix.tmp > t-fprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-fprintf-posix.out result=$? rm -fr $tmpfiles exit $result ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix2.c�������������������������������������������������0000664�0000000�0000000�00000006603�14110572173�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> /* This test assumes getrlimit() and setrlimit(). With "gcc -fcheck-pointer-bounds -mmpx -static", it produces an endless loop of "Saw a #BR!" messages. */ #if HAVE_GETRLIMIT && HAVE_SETRLIMIT && !defined __CHKP__ #include <stdlib.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <string.h> #include <errno.h> int main (int argc, char *argv[]) { struct rlimit limit; int arg; int ret; /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif arg = atoi (argv[1]); switch (arg) { case 0: { void *memory = malloc (10000000); if (memory == NULL) return 1; memset (memory, 17, 10000000); return 78; } case 1: ret = fprintf (stdout, "%.10000000f", 1.0); return !(ret == 10000002 || (ret < 0 && errno == ENOMEM)); case 2: ret = fprintf (stdout, "%.10000000f", -1.0); return !(ret == 10000003 || (ret < 0 && errno == ENOMEM)); case 3: ret = fprintf (stdout, "%.10000000e", 1.0); return !(ret >= 10000006 || (ret < 0 && errno == ENOMEM)); case 4: ret = fprintf (stdout, "%.10000000d", 1); return !(ret == 10000000 || (ret < 0 && errno == ENOMEM)); case 5: ret = fprintf (stdout, "%.10000000d", -1); return !(ret == 10000001 || (ret < 0 && errno == ENOMEM)); case 6: ret = fprintf (stdout, "%.10000000u", 1); return !(ret == 10000000 || (ret < 0 && errno == ENOMEM)); } return 0; } #else int main (int argc, char *argv[]) { return 77; } #endif �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix2.sh������������������������������������������������0000775�0000000�0000000�00000001256�14110572173�0021653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test out-of-memory handling. (${CHECKER} ./test-fprintf-posix2${EXEEXT} 0 result=$? if test $result != 77 && test $result != 78; then result=1; fi exit $result ) 2>/dev/null malloc_result=$? if test $malloc_result = 77; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi for arg in 1 2 3 4 5 6 do ${CHECKER} ./test-fprintf-posix2${EXEEXT} $arg > /dev/null result=$? if test $result = 77; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi if test $result != 0; then exit 1 fi done if test $malloc_result = 78; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix3.c�������������������������������������������������0000664�0000000�0000000�00000007573�14110572173�0021471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <stdio.h> #if defined __APPLE__ && defined __MACH__ /* macOS */ /* On macOS 10.13, this test fails, because the address space size increases by 10 MB to 42 MB during the test's execution. But it's not a malloc leak, as can be seen by running the 'leaks' program. And it does not fail if the test's output is redirected to /dev/null. Probably piping a lot of output to stdout, when not redirected to /dev/null, allocates intermediate buffers in the virtual address space. */ int main () { fprintf (stderr, "Skipping test: cannot trust address space size on this platform\n"); return 78; } #else #include <stdlib.h> #include <string.h> #include <errno.h> #if HAVE_GETRLIMIT && HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #include "resource-ext.h" /* Test against a memory leak in the fprintf replacement. */ /* Number of iterations across the loop. */ #define NUM_ROUNDS 1000 /* Number of bytes that are allowed to escape per round. */ #define MAX_ALLOC_ROUND 10000 /* Number of bytes that are allowed to escape in total. This should be at least 10 MB, since it includes the normal memory or address space of the test program. */ #define MAX_ALLOC_TOTAL (NUM_ROUNDS * MAX_ALLOC_ROUND) int main (int argc, char *argv[]) { uintptr_t initial_rusage_as; int arg; int result; /* Limit the amount of malloc()ed memory to MAX_ALLOC_TOTAL or less. */ /* On AIX systems, malloc() is limited by RLIMIT_DATA. */ #if HAVE_GETRLIMIT && HAVE_SETRLIMIT && defined RLIMIT_DATA { struct rlimit limit; if (getrlimit (RLIMIT_DATA, &limit) >= 0) { if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > MAX_ALLOC_TOTAL) limit.rlim_max = MAX_ALLOC_TOTAL; limit.rlim_cur = limit.rlim_max; (void) setrlimit (RLIMIT_DATA, &limit); } } #endif /* On all systems except AIX and OpenBSD, malloc() is limited by RLIMIT_AS. On some systems, setrlimit of RLIMIT_AS doesn't work but get_rusage_as () does. Allow the address space size to grow by at most MAX_ALLOC_TOTAL. */ initial_rusage_as = get_rusage_as (); #if !defined _AIX if (initial_rusage_as == 0) return 77; #endif arg = atoi (argv[1]); if (arg == 0) { void *memory = malloc (MAX_ALLOC_TOTAL); if (memory == NULL) return 1; memset (memory, 17, MAX_ALLOC_TOTAL); result = 80; } else { /* Perform the test and test whether it triggers a permanent memory allocation of more than MAX_ALLOC_TOTAL bytes. */ int repeat; for (repeat = 0; repeat < NUM_ROUNDS; repeat++) { /* This may produce a temporary memory allocation of 11000 bytes. but should not result in a permanent memory allocation. */ if (fprintf (stdout, "%011000d\n", 17) == -1 && errno == ENOMEM) return 2; } result = 0; } if (get_rusage_as () > initial_rusage_as + MAX_ALLOC_TOTAL + 100000) return 3; return result; } #endif /* !macOS */ �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fprintf-posix3.sh������������������������������������������������0000775�0000000�0000000�00000001244�14110572173�0021651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test against a memory leak. (${CHECKER} ./test-fprintf-posix3${EXEEXT} 0 result=$? if test $result != 77 && test $result != 78 && test $result != 80; then result=1; fi exit $result ) 2>/dev/null malloc_result=$? if test $malloc_result = 77; then echo "Skipping test: no way to determine address space size" exit 77 fi if test $malloc_result = 78; then echo "Skipping test: cannot trust address space size on this platform" exit 77 fi ${CHECKER} ./test-fprintf-posix3${EXEEXT} 1 > /dev/null result=$? if test $result = 77; then echo "Skipping test: no way to determine address space size" exit 77 fi if test $result != 0; then exit 1 fi exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fpurge.c���������������������������������������������������������0000664�0000000�0000000�00000007534�14110572173�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fpurge() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include <string.h> #include "macros.h" #define TESTFILE "t-fpurge.tmp" int main (void) { int check_filepos; for (check_filepos = 0; check_filepos <= 1; check_filepos++) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; if (fwrite ("foobarsh", 1, 8, fp) < 8) goto skip; if (fclose (fp)) goto skip; /* The file's contents is now "foobarsh". */ /* Open it in read-write mode. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; if (fseek (fp, 3, SEEK_CUR)) goto skip; if (fwrite ("g", 1, 1, fp) < 1) goto skip; if (fflush (fp)) goto skip; if (fwrite ("bz", 1, 2, fp) < 2) goto skip; /* Discard pending write. */ ASSERT (fpurge (fp) == 0); /* Verify that when discarding pending output, the file position is set back to where it was before the write calls. */ if (check_filepos) ASSERT (ftell (fp) == 4); ASSERT (fclose (fp) == 0); /* Open it in read-only mode. */ fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; /* Verify that the pending writes before the fpurge were really discarded. */ { char buf[8]; if (fread (buf, 1, 7, fp) < 7) goto skip; ASSERT (memcmp (buf, "foogars", 7) == 0); } /* Discard the buffered 'h'. */ if (check_filepos) ASSERT (ftell (fp) == 7); ASSERT (fpurge (fp) == 0); /* Verify that when discarding pending input, the file position is advanced to match the end of the previously read input. */ if (check_filepos) ASSERT (ftell (fp) == 8); ASSERT (getc (fp) == EOF); ASSERT (fclose (fp) == 0); /* The file's contents is now "foogarsh". */ /* Ensure that purging a read does not corrupt subsequent writes. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; if (fseek (fp, -1, SEEK_END)) goto skip; ASSERT (getc (fp) == 'h'); ASSERT (getc (fp) == EOF); if (check_filepos) ASSERT (ftell (fp) == 8); ASSERT (fpurge (fp) == 0); if (check_filepos) ASSERT (ftell (fp) == 8); ASSERT (putc ('!', fp) == '!'); if (check_filepos) ASSERT (ftell (fp) == 9); ASSERT (fclose (fp) == 0); fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; { char buf[10]; ASSERT (fread (buf, 1, 10, fp) == 9); ASSERT (memcmp (buf, "foogarsh!", 9) == 0); } ASSERT (fclose (fp) == 0); /* The file's contents is now "foogarsh!". */ } remove (TESTFILE); return 0; skip: fprintf (stderr, "Skipping test: prerequisite file operations failed.\n"); remove (TESTFILE); return 77; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fputc.c����������������������������������������������������������0000664�0000000�0000000�00000004656�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fputc() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fputc, int, (int, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fputc.txt"; /* We don't have an fputc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fputc() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "w"); ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fputc() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fread.c����������������������������������������������������������0000664�0000000�0000000�00000005161�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fread() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fread.txt"; /* We don't have an fread() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fread() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); char buf[5]; ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fread (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fread() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadable.c������������������������������������������������������0000664�0000000�0000000�00000005475�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadable() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include "freadable.h" #include <stdio.h> #include "macros.h" #define TESTFILE "t-freadable.tmp" int main () { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; ASSERT (!freadable (fp)); if (fwrite ("foobarsh", 1, 8, fp) < 8) goto skip; ASSERT (!freadable (fp)); if (fclose (fp)) goto skip; /* Open it in read-only mode. */ fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; ASSERT (freadable (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (freadable (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (freadable (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (freadable (fp)); fflush (fp); ASSERT (freadable (fp)); if (fgetc (fp) != 'a') goto skip; ASSERT (freadable (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; ASSERT (freadable (fp)); if (fclose (fp)) goto skip; /* Open it in read-write mode. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; ASSERT (freadable (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (freadable (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (freadable (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (freadable (fp)); fflush (fp); ASSERT (freadable (fp)); if (fgetc (fp) != 'a') goto skip; ASSERT (freadable (fp)); if (fputc ('z', fp) != 'z') goto skip; ASSERT (freadable (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; ASSERT (freadable (fp)); if (fclose (fp)) goto skip; /* Open it in append mode. */ fp = fopen (TESTFILE, "a"); if (fp == NULL) goto skip; ASSERT (!freadable (fp)); if (fwrite ("bla", 1, 3, fp) < 3) goto skip; ASSERT (!freadable (fp)); if (fclose (fp)) goto skip; return 0; skip: fprintf (stderr, "Skipping test: file operations failed.\n"); return 77; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadahead.c�����������������������������������������������������0000664�0000000�0000000�00000004157�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadahead() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "freadahead.h" #include <stdlib.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { int nbytes = atoi (argv[1]); if (nbytes > 0) { void *buf = malloc (nbytes); ASSERT (fread (buf, 1, nbytes, stdin) == nbytes); free (buf); } if (nbytes == 0) ASSERT (freadahead (stdin) == 0); else { if (lseek (0, 0, SEEK_CUR) == nbytes) /* An unbuffered stdio, such as BeOS or on uClibc compiled without __STDIO_BUFFERS. */ ASSERT (freadahead (stdin) == 0); else { /* Normal buffered stdio. */ size_t buffered; int c, c2; ASSERT (freadahead (stdin) != 0); buffered = freadahead (stdin); c = fgetc (stdin); ASSERT (freadahead (stdin) == buffered - 1); ungetc (c, stdin); ASSERT (freadahead (stdin) == buffered); c2 = fgetc (stdin); ASSERT (c2 == c); ASSERT (freadahead (stdin) == buffered - 1); c = '@'; ungetc (c, stdin); ASSERT (freadahead (stdin) == buffered); c2 = fgetc (stdin); ASSERT (c2 == c); ASSERT (freadahead (stdin) == buffered - 1); } } /* Free memory allocated during ungetc(). */ fclose (stdin); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadahead.sh����������������������������������������������������0000775�0000000�0000000�00000000264�14110572173�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-freadahead${EXEEXT} 0 < "$srcdir/test-freadahead.sh" || exit 1 ${CHECKER} ./test-freadahead${EXEEXT} 5 < "$srcdir/test-freadahead.sh" || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freading.c�������������������������������������������������������0000664�0000000�0000000�00000011124�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freading() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include "freading.h" #include <stdio.h> #include "macros.h" #define TESTFILE "t-freading.tmp" int main (void) { FILE *fp; /* Create a file with some contents. Write-only file is never reading. */ fp = fopen (TESTFILE, "w"); ASSERT (fp); ASSERT (!freading (fp)); ASSERT (fwrite ("foobarsh", 1, 8, fp) == 8); ASSERT (!freading (fp)); ASSERT (fclose (fp) == 0); /* Open it in read-only mode. Read-only file is always reading. */ fp = fopen (TESTFILE, "r"); ASSERT (fp); ASSERT (freading (fp)); ASSERT (fgetc (fp) == 'f'); ASSERT (freading (fp)); ASSERT (fseek (fp, 2, SEEK_CUR) == 0); ASSERT (freading (fp)); ASSERT (fgetc (fp) == 'b'); ASSERT (freading (fp)); fflush (fp); ASSERT (freading (fp)); ASSERT (fgetc (fp) == 'a'); ASSERT (freading (fp)); ASSERT (fseek (fp, 0, SEEK_END) == 0); ASSERT (freading (fp)); ASSERT (fclose (fp) == 0); /* Open it in read-write mode. POSIX requires a reposition (fseek, fsetpos, rewind) or EOF when transitioning from read to write; freading is only deterministic after input or output, but this test case should be portable even on open, after reposition, and at EOF. */ /* First a scenario with only fgetc, fseek, fputc. */ fp = fopen (TESTFILE, "r+"); ASSERT (fp); ASSERT (!freading (fp)); ASSERT (fgetc (fp) == 'f'); ASSERT (freading (fp)); ASSERT (fseek (fp, 2, SEEK_CUR) == 0); /* freading (fp) is undefined here, but fwriting (fp) is false. */ ASSERT (fgetc (fp) == 'b'); ASSERT (freading (fp)); /* This fseek call is necessary when switching from reading to writing. See the description of fopen(), ISO C 99 7.19.5.3.(6). */ ASSERT (fseek (fp, 0, SEEK_CUR) == 0); /* freading (fp) is undefined here, but fwriting (fp) is false. */ ASSERT (fputc ('x', fp) == 'x'); ASSERT (!freading (fp)); ASSERT (fseek (fp, 0, SEEK_END) == 0); /* freading (fp) is undefined here, because on some implementations (e.g. glibc) fseek causes a buffer to be read. fwriting (fp) is undefined as well. */ ASSERT (fclose (fp) == 0); /* Open it in read-write mode. POSIX requires a reposition (fseek, fsetpos, rewind) or EOF when transitioning from read to write; freading is only deterministic after input or output, but this test case should be portable even on open, after reposition, and at EOF. */ /* Here a scenario that includes fflush. */ fp = fopen (TESTFILE, "r+"); ASSERT (fp); ASSERT (!freading (fp)); ASSERT (fgetc (fp) == 'f'); ASSERT (freading (fp)); ASSERT (fseek (fp, 2, SEEK_CUR) == 0); /* freading (fp) is undefined here, but fwriting (fp) is false. */ ASSERT (fgetc (fp) == 'b'); ASSERT (freading (fp)); fflush (fp); /* freading (fp) is undefined here, but fwriting (fp) is false. */ ASSERT (fgetc (fp) == 'x'); ASSERT (freading (fp)); /* This fseek call is necessary when switching from reading to writing. See the description of fopen(), ISO C 99 7.19.5.3.(6). */ ASSERT (fseek (fp, 0, SEEK_CUR) == 0); /* freading (fp) is undefined here, but fwriting (fp) is false. */ ASSERT (fputc ('z', fp) == 'z'); ASSERT (!freading (fp)); ASSERT (fseek (fp, 0, SEEK_END) == 0); /* freading (fp) is undefined here, because on some implementations (e.g. glibc) fseek causes a buffer to be read. fwriting (fp) is undefined as well. */ ASSERT (fclose (fp) == 0); /* Open it in append mode. Write-only file is never reading. */ fp = fopen (TESTFILE, "a"); ASSERT (fp); ASSERT (!freading (fp)); ASSERT (fwrite ("bla", 1, 3, fp) == 3); ASSERT (!freading (fp)); ASSERT (fclose (fp) == 0); ASSERT (remove (TESTFILE) == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadptr.c�������������������������������������������������������0000664�0000000�0000000�00000005540�14110572173�0020375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadptr() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "freadptr.h" #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { int nbytes = atoi (argv[1]); { void *buf = malloc (nbytes); ASSERT (fread (buf, 1, nbytes, stdin) == nbytes); free (buf); } if (lseek (0, 0, SEEK_CUR) == nbytes) { /* An unbuffered stdio, such as BeOS or on uClibc compiled without __STDIO_BUFFERS. Or stdin is a pipe. */ size_t size; ASSERT (freadptr (stdin, &size) == NULL); } else { /* Normal buffered stdio. */ const char stdin_contents[] = "#!/bin/sh\n\n${CHECKER} ./test-freadptr${EXEEXT} 5 < \"$srcdir/test-freadptr.sh\" || exit 1\ncat \"$srcdir/test-freadptr.sh\" | ${CHECKER} ./test-freadptr${EXEEXT} 5 || exit 1\nexit 0\n"; const char *expected = stdin_contents + nbytes; size_t available1; size_t available2; size_t available3; /* Test normal behaviour. */ { const char *ptr = freadptr (stdin, &available1); ASSERT (ptr != NULL); ASSERT (available1 != 0); ASSERT (available1 <= strlen (expected)); ASSERT (memcmp (ptr, expected, available1) == 0); } /* Test behaviour after normal ungetc. */ ungetc (fgetc (stdin), stdin); { const char *ptr = freadptr (stdin, &available2); if (ptr != NULL) { ASSERT (available2 == available1); ASSERT (memcmp (ptr, expected, available2) == 0); } } /* Test behaviour after arbitrary ungetc. */ fgetc (stdin); ungetc ('@', stdin); { const char *ptr = freadptr (stdin, &available3); if (ptr != NULL) { ASSERT (available3 == 1 || available3 == available1); ASSERT (ptr[0] == '@'); if (available3 > 1) { ASSERT (memcmp (ptr + 1, expected + 1, available3 - 1) == 0); } } } } /* Free memory allocated during ungetc(). */ fclose (stdin); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadptr.sh������������������������������������������������������0000775�0000000�0000000�00000000260�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-freadptr${EXEEXT} 5 < "$srcdir/test-freadptr.sh" || exit 1 cat "$srcdir/test-freadptr.sh" | ${CHECKER} ./test-freadptr${EXEEXT} 5 || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadptr2.c������������������������������������������������������0000664�0000000�0000000�00000003123�14110572173�0020452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadptr() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "freadptr.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" static int freadptrbufsize (FILE *fp) { size_t size = 0; freadptr (fp, &size); return size; } int main (int argc, char **argv) { int nbytes = atoi (argv[1]); if (nbytes > 0) { void *buf = malloc (nbytes); ASSERT (fread (buf, 1, nbytes, stdin) == nbytes); free (buf); } if (nbytes == 0) ASSERT (freadptrbufsize (stdin) == 0); else { if (lseek (0, 0, SEEK_CUR) == nbytes) /* An unbuffered stdio, such as BeOS or on uClibc compiled without __STDIO_BUFFERS. */ ASSERT (freadptrbufsize (stdin) == 0); else /* Normal buffered stdio. */ ASSERT (freadptrbufsize (stdin) != 0); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadptr2.sh�����������������������������������������������������0000775�0000000�0000000�00000000260�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-freadptr2${EXEEXT} 0 < "$srcdir/test-freadptr2.sh" || exit 1 ${CHECKER} ./test-freadptr2${EXEEXT} 5 < "$srcdir/test-freadptr2.sh" || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadseek.c������������������������������������������������������0000664�0000000�0000000�00000006103�14110572173�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadseek() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "freadseek.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { static const char stdin_contents[] = "#!/bin/sh\n\n${CHECKER} ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < \"$srcdir/test-freadseek.sh\" || exit 1\ncat \"$srcdir/test-freadseek.sh\" | ${CHECKER} ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 || exit 1\nexit 0\n"; int nbytes1 = atoi (argv[1]); int nbytes2 = atoi (argv[2]); int nbytes3 = atoi (argv[3]); int nbytes4 = atoi (argv[4]); int nbytes5 = atoi (argv[5]); int nbytes6 = atoi (argv[6]); int nbytes7 = atoi (argv[7]); void *buf1 = malloc (nbytes1); void *buf3 = malloc (nbytes3); void *buf5 = malloc (nbytes5); void *buf7 = malloc (nbytes7); /* A private variable to keep track of the position. */ size_t position = 0; ASSERT (fread (buf1, 1, nbytes1, stdin) == nbytes1); ASSERT (memcmp (buf1, stdin_contents + position, nbytes1) == 0); position += nbytes1; /* Test normal behaviour. */ ASSERT (freadseek (stdin, nbytes2) == 0); position += nbytes2; ASSERT (fread (buf3, 1, nbytes3, stdin) == nbytes3); ASSERT (memcmp (buf3, stdin_contents + position, nbytes3) == 0); position += nbytes3; /* Test behaviour after normal ungetc. */ ungetc (fgetc (stdin), stdin); ASSERT (freadseek (stdin, nbytes4) == 0); position += nbytes4; ASSERT (fread (buf5, 1, nbytes5, stdin) == nbytes5); ASSERT (memcmp (buf5, stdin_contents + position, nbytes5) == 0); position += nbytes5; /* Test behaviour after arbitrary ungetc. */ fgetc (stdin); ungetc ('@', stdin); ASSERT (freadseek (stdin, nbytes6) == 0); position += nbytes6; ASSERT (fread (buf7, 1, nbytes7, stdin) == nbytes7); ASSERT (memcmp (buf7, stdin_contents + position, nbytes7) == 0); position += nbytes7; /* Test move to end of file. */ ASSERT (freadseek (stdin, strlen (stdin_contents) - position) == 0); ASSERT (fgetc (stdin) == EOF); ASSERT (!ferror (stdin)); #if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ /* Test move beyond end of file. */ ASSERT (freadseek (stdin, 1000000) == 0); ASSERT (fgetc (stdin) == EOF); ASSERT (!ferror (stdin)); #endif free (buf7); free (buf5); free (buf3); free (buf1); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freadseek.sh�����������������������������������������������������0000775�0000000�0000000�00000000322�14110572173�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < "$srcdir/test-freadseek.sh" || exit 1 cat "$srcdir/test-freadseek.sh" | ${CHECKER} ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-free.c�����������������������������������������������������������0000664�0000000�0000000�00000013760�14110572173�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of free() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #if defined __linux__ # include <fcntl.h> # include <stdint.h> # include <string.h> # include <sys/mman.h> #endif #include "macros.h" /* The indirection through a volatile function pointer is necessary to prevent a GCC optimization. Without it, when optimizing, GCC would "know" that errno is unchanged by calling free(ptr), when ptr was the result of a malloc(...) call in the same function. */ static int get_errno (void) { volatile int err = errno; return err; } static int (* volatile get_errno_func) (void) = get_errno; int main () { /* Check that free() preserves errno. */ { errno = 1789; /* Liberté, égalité, fraternité. */ free (NULL); ASSERT_NO_STDIO (get_errno_func () == 1789); } { /* Small memory allocations. */ #define N 10000 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (15); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } { /* Medium memory allocations. */ #define N 1000 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (729); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } { /* Large memory allocations. */ #define N 10 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (5318153); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } /* Test a less common code path. When malloc() is based on mmap(), free() can sometimes call munmap(). munmap() usually succeeds, but fails in a particular situation: when - it has to unmap the middle part of a VMA, and - the number of VMAs of a process is limited and the limit is already reached. The latter condition is fulfilled on Linux, when the file /proc/sys/vm/max_map_count exists. This file contains the limit - for Linux >= 2.4.19: 65536 (DEFAULT_MAX_MAP_COUNT in linux/include/linux/sched.h) - for Linux >= 2.6.31: 65530 (DEFAULT_MAX_MAP_COUNT in linux/include/linux/mm.h). But do not test it with glibc < 2.15, since that triggers a glibc internal abort: "malloc.c:3551: munmap_chunk: Assertion `ret == 0' failed." */ #if defined __linux__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ < 15) if (open ("/proc/sys/vm/max_map_count", O_RDONLY) >= 0) { /* Preparations. */ size_t pagesize = getpagesize (); void *firstpage_backup = malloc (pagesize); void *lastpage_backup = malloc (pagesize); /* Allocate a large memory area, as a bumper, so that the MAP_FIXED allocation later will not overwrite parts of the memory areas allocated to ld.so or libc.so. */ void *bumper_region = mmap (NULL, 0x1000000, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); /* A file descriptor pointing to a regular file. */ int fd = open ("test-free", O_RDONLY); if (firstpage_backup != NULL && lastpage_backup != NULL && bumper_region != (void *)(-1) && fd >= 0) { /* Do a large memory allocation. */ size_t big_size = 0x1000000; void * volatile ptr = malloc (big_size - 0x100); char *ptr_aligned = (char *) ((uintptr_t) ptr & ~(pagesize - 1)); /* This large memory allocation allocated a memory area from ptr_aligned to ptr_aligned + big_size. Enlarge this memory area by adding a page before and a page after it. */ memcpy (firstpage_backup, ptr_aligned, pagesize); memcpy (lastpage_backup, ptr_aligned + big_size - pagesize, pagesize); if (mmap (ptr_aligned - pagesize, pagesize + big_size + pagesize, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0) != (void *)(-1)) { memcpy (ptr_aligned, firstpage_backup, pagesize); memcpy (ptr_aligned + big_size - pagesize, lastpage_backup, pagesize); /* Now add as many mappings as we can. Stop at 65536, in order not to crash the machine (in case the limit has been increased by the system administrator). */ size_t i; for (i = 0; i < 65536; i++) if (mmap (NULL, pagesize, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, 0) == (void *)(-1)) break; /* Now the number of VMAs of this process has hopefully attained its limit. */ errno = 1789; /* This call to free() is supposed to call munmap (ptr_aligned, big_size); which increases the number of VMAs by 1, which is supposed to fail. */ free (ptr); ASSERT_NO_STDIO (get_errno_func () == 1789); } } } #endif return 0; } ����������������gnulib-20210822~d383792/tests/test-freopen-safer.c��������������������������������������������������0000664�0000000�0000000�00000005421�14110572173�0021320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of reopening a stream. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include "stdio--.h" /* Helpers. */ #include <unistd.h> /* This test intentionally closes 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; int main (void) { FILE *fp; /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; { FILE *tmp; ASSERT (tmp = fopen ("/dev/null", "r")); ASSERT (STDERR_FILENO < fileno (tmp)); ASSERT (fp = fopen ("/dev/null", "w")); ASSERT (fileno (tmp) < fileno (fp)); ASSERT (fclose (tmp) == 0); } /* Gap in fds. */ ASSERT (freopen ("/dev/null", "r+", fp) == fp); ASSERT (STDERR_FILENO < fileno (fp)); ASSERT (freopen ("/dev/null", "r", stdin) == stdin); ASSERT (STDIN_FILENO == fileno (stdin)); ASSERT (freopen ("/dev/null", "w", stdout) == stdout); ASSERT (STDOUT_FILENO == fileno (stdout)); ASSERT (freopen ("/dev/null", "w", stderr) == stderr); ASSERT (STDERR_FILENO == fileno (stderr)); /* fd 0 closed. */ ASSERT (close (STDIN_FILENO) == 0); ASSERT (freopen ("/dev/null", "w", stdout) == stdout); ASSERT (STDOUT_FILENO == fileno (stdout)); ASSERT (freopen ("/dev/null", "w", stderr) == stderr); ASSERT (STDERR_FILENO == fileno (stderr)); ASSERT (freopen ("/dev/null", "a", fp) == fp); ASSERT (STDERR_FILENO < fileno (fp)); /* fd 1 closed. */ ASSERT (close (STDOUT_FILENO) == 0); ASSERT (freopen ("/dev/null", "w", stderr) == stderr); ASSERT (STDERR_FILENO == fileno (stderr)); ASSERT (freopen ("/dev/null", "a+", fp) == fp); ASSERT (STDERR_FILENO < fileno (fp)); /* fd 2 closed. */ ASSERT (close (STDERR_FILENO) == 0); ASSERT (freopen ("/dev/null", "w+", fp) == fp); ASSERT (STDERR_FILENO < fileno (fp)); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-freopen.c��������������������������������������������������������0000664�0000000�0000000�00000004271�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (freopen, FILE *, (char const *, char const *, FILE *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main () { const char *filename = "test-freopen.txt"; close (STDIN_FILENO); ASSERT (freopen ("/dev/null", "r", stdin) != NULL); ASSERT (getchar () == EOF); ASSERT (!ferror (stdin)); ASSERT (feof (stdin)); #if 0 /* freopen (NULL, ...) is unsupported on most platforms. */ /* Test that freopen() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "w+"); ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (freopen (NULL, "r", fp) == NULL); perror("freopen"); ASSERT (errno == EBADF); fclose (fp); } /* Test that freopen() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w+"); if (fp != NULL) { errno = 0; ASSERT (freopen (NULL, "r", fp) == NULL); ASSERT (errno == EBADF); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w+"); if (fp != NULL) { errno = 0; ASSERT (freopen (NULL, "r", fp) == NULL); ASSERT (errno == EBADF); fclose (fp); } } #endif /* Clean up. */ unlink (filename); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexp-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002253�14110572173�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define FREXP frexp #include "test-frexp-ieee.h" int main () { test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexp-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000003174�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ { int exp = -9999; DOUBLE mantissa; mantissa = FREXP (NAN, &exp); ASSERT (ISNAN (mantissa)); } /* Signed zero. */ { int exp = -9999; DOUBLE mantissa; mantissa = FREXP (L_(0.0), &exp); ASSERT (mantissa == L_(0.0)); ASSERT (!signbit (mantissa)); ASSERT (exp == 0); } { int exp = -9999; DOUBLE mantissa; mantissa = FREXP (MINUS_ZERO, &exp); ASSERT (mantissa == L_(0.0)); ASSERT (!!signbit (mantissa) == !!signbit (MINUS_ZERO)); ASSERT (exp == 0); } /* Infinity. */ { int exp = -9999; DOUBLE mantissa; mantissa = FREXP (INFINITY, &exp); ASSERT (mantissa == INFINITY); } { int exp = -9999; DOUBLE mantissa; mantissa = FREXP (- INFINITY, &exp); ASSERT (mantissa == - INFINITY); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexp.c����������������������������������������������������������0000664�0000000�0000000�00000003657�14110572173�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (frexp, double, (double, int *)); #include <float.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() function. */ #undef exp #define exp exponent #undef INFINITY #undef NAN #define DOUBLE double /* The use of 'volatile' guarantees that excess precision bits are dropped when dealing with denormalized numbers. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ #define VOLATILE volatile #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define MAX_EXP DBL_MAX_EXP #define MIN_EXP DBL_MIN_EXP #define MIN_NORMAL_EXP DBL_MIN_EXP #define FREXP frexp #define RANDOM randomd #include "test-frexp.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexp.h����������������������������������������������������������0000664�0000000�0000000�00000011203�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static DOUBLE my_ldexp (DOUBLE x, int d) { for (; d > 0; d--) x *= L_(2.0); for (; d < 0; d++) x *= L_(0.5); return x; } static void test_function (void) { int i; VOLATILE DOUBLE x; { /* NaN. */ int exp = -9999; DOUBLE mantissa; x = NAN; mantissa = FREXP (x, &exp); ASSERT (ISNAN (mantissa)); } { /* Positive infinity. */ int exp = -9999; DOUBLE mantissa; x = INFINITY; mantissa = FREXP (x, &exp); ASSERT (mantissa == x); } { /* Negative infinity. */ int exp = -9999; DOUBLE mantissa; x = - INFINITY; mantissa = FREXP (x, &exp); ASSERT (mantissa == x); } { /* Positive zero. */ int exp = -9999; DOUBLE mantissa; x = L_(0.0); mantissa = FREXP (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (!signbit (mantissa)); } { /* Negative zero. */ int exp = -9999; DOUBLE mantissa; x = MINUS_ZERO; mantissa = FREXP (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (signbit (mantissa)); } for (i = 1, x = L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.5)); } for (i = 1, x = L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.5)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.5)); } for (i = 1, x = - L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == - L_(0.5)); } for (i = 1, x = - L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == - L_(0.5)); } for (; i >= MIN_EXP - 100 && x < L_(0.0); i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == - L_(0.5)); } for (i = 1, x = L_(1.01); i <= MAX_EXP; i++, x *= L_(2.0)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.505)); } for (i = 1, x = L_(1.01); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.505)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa >= L_(0.5)); ASSERT (mantissa < L_(1.0)); ASSERT (mantissa == my_ldexp (x, - exp)); } for (i = 1, x = L_(1.73205); i <= MAX_EXP; i++, x *= L_(2.0)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.866025)); } for (i = 1, x = L_(1.73205); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i); ASSERT (mantissa == L_(0.866025)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (exp == i || exp == i + 1); ASSERT (mantissa >= L_(0.5)); ASSERT (mantissa < L_(1.0)); ASSERT (mantissa == my_ldexp (x, - exp)); } /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { x = L_(20.0) * RANDOM[i] - L_(10.0); /* -10.0 <= x <= 10.0 */ { int exp = -9999; DOUBLE mantissa = FREXP (x, &exp); ASSERT (x == my_ldexp (mantissa, exp)); } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexpf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002256�14110572173�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define FREXP frexpf #include "test-frexp-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexpf.c���������������������������������������������������������0000664�0000000�0000000�00000003110�14110572173�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a float into fraction and mantissa. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (frexpf, float, (float, int *)); #include <float.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() function. */ #undef exp #define exp exponent #undef INFINITY #undef NAN #define DOUBLE float #define VOLATILE volatile #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define MAX_EXP FLT_MAX_EXP #define MIN_EXP FLT_MIN_EXP #define MIN_NORMAL_EXP FLT_MIN_EXP #define FREXP frexpf #define RANDOM randomf #include "test-frexp.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexpl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002264�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define FREXP frexpl #include "test-frexp-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-frexpl.c���������������������������������������������������������0000664�0000000�0000000�00000004307�14110572173�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a 'long double' into fraction and mantissa. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (frexpl, long double, (long double, int *)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() function. */ #undef exp #define exp exponent #undef INFINITY #undef NAN #define DOUBLE long double #define VOLATILE #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define MAX_EXP LDBL_MAX_EXP #define MIN_EXP LDBL_MIN_EXP /* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -964. Similarly, on PowerPC machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -968. For exponents below that, the precision may be truncated to the precision used for 'double'. */ #ifdef __sgi # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) #elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) #else # define MIN_NORMAL_EXP LDBL_MIN_EXP #endif #define FREXP frexpl #define RANDOM randoml #include "test-frexp.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseek.c����������������������������������������������������������0000664�0000000�0000000�00000004355�14110572173�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseek() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if the user requested GNULIB_POSIXCHECK. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fseek, int, (FILE *, long, int)); #include "macros.h" #ifndef FUNC_UNGETC_BROKEN # define FUNC_UNGETC_BROKEN 0 #endif int main (int argc, char **argv) { /* Assume stdin is non-empty, seekable, and starts with '#!/bin/sh' iff argc > 1. */ int expected = argc > 1 ? 0 : -1; ASSERT (fseek (stdin, 0, SEEK_CUR) == expected); if (argc > 1) { /* Test that fseek discards previously read ungetc data. */ int ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ungetc (ch, stdin) == ch); ASSERT (fseek (stdin, 2, SEEK_SET) == 0); ch = fgetc (stdin); ASSERT (ch == '/'); if (2 < argc) { if (FUNC_UNGETC_BROKEN) { fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", stderr); return 77; } /* Test that fseek discards random ungetc data. */ ASSERT (ungetc (ch ^ 0xff, stdin) == (ch ^ 0xff)); } ASSERT (fseek (stdin, 0, SEEK_END) == 0); ASSERT (fgetc (stdin) == EOF); /* Test that fseek resets end-of-file marker. */ ASSERT (feof (stdin)); ASSERT (fseek (stdin, 0, SEEK_END) == 0); ASSERT (!feof (stdin)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseek.sh���������������������������������������������������������0000775�0000000�0000000�00000000216�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-fseek${EXEEXT} 1 < "$srcdir/test-fseek.sh" || exit 1 echo hi | ${CHECKER} ./test-fseek${EXEEXT} || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseek2.sh��������������������������������������������������������0000775�0000000�0000000�00000000120�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-fseek${EXEEXT} 1 2 < "$srcdir/test-fseek2.sh" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko.c���������������������������������������������������������0000664�0000000�0000000�00000004575�14110572173�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fseeko, int, (FILE *, off_t, int)); #include "macros.h" #ifndef FUNC_UNGETC_BROKEN # define FUNC_UNGETC_BROKEN 0 #endif int main (int argc, _GL_UNUSED char **argv) { /* Assume stdin is non-empty, seekable, and starts with '#!/bin/sh' iff argc > 1. */ int expected = argc > 1 ? 0 : -1; /* Exit with success only if fseek/fseeko agree. */ int r1 = fseeko (stdin, 0, SEEK_CUR); int r2 = fseek (stdin, 0, SEEK_CUR); ASSERT (r1 == r2 && r1 == expected); if (argc > 1) { /* Test that fseek discards previously read ungetc data. */ int ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ungetc (ch, stdin) == ch); ASSERT (fseeko (stdin, 2, SEEK_SET) == 0); ch = fgetc (stdin); ASSERT (ch == '/'); if (2 < argc) { if (FUNC_UNGETC_BROKEN) { fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", stderr); return 77; } /* Test that fseek discards random ungetc data. */ ASSERT (ungetc (ch ^ 0xff, stdin) == (ch ^ 0xff)); } ASSERT (fseeko (stdin, 0, SEEK_END) == 0); ASSERT (fgetc (stdin) == EOF); /* Test that fseek resets end-of-file marker. */ ASSERT (feof (stdin)); ASSERT (fseeko (stdin, 0, SEEK_END) == 0); ASSERT (!feof (stdin)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko.sh��������������������������������������������������������0000775�0000000�0000000�00000000221�14110572173�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-fseeko${EXEEXT} 1 < "$srcdir/test-fseeko.sh" || exit 1 echo hi | ${CHECKER} ./test-fseeko${EXEEXT} || exit 1 exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko2.sh�������������������������������������������������������0000775�0000000�0000000�00000000122�14110572173�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-fseeko${EXEEXT} 1 2 < "$srcdir/test-fseeko2.sh" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko3.c��������������������������������������������������������0000664�0000000�0000000�00000002405�14110572173�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Eric Blake <eblake@redhat.com>, 2011. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include "macros.h" int main (int argc, char **argv) { int do_initial_ftell = atoi (argv[1]); const char *filename = argv[2]; FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); if (do_initial_ftell) { off_t pos = ftell (fp); ASSERT (pos == 0); } ASSERT (fseeko (fp, 0, SEEK_END) == 0); { off_t pos = ftell (fp); ASSERT (pos > 0); } ASSERT (fclose (fp) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko3.sh�������������������������������������������������������0000775�0000000�0000000�00000000246�14110572173�0020316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-fseeko3${EXEEXT} 0 "$srcdir/test-fseeko3.sh" || exit 1 ${CHECKER} ./test-fseeko3${EXEEXT} 1 "$srcdir/test-fseeko3.sh" || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko4.c��������������������������������������������������������0000664�0000000�0000000�00000003573�14110572173�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <errno.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { const char *filename = argv[1]; /* Test that fseeko() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (ftell (fp) == 0); ASSERT (fseeko (fp, 0, SEEK_END) == 0); ASSERT (ftell (fp) > 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fseeko (fp, 0, SEEK_SET) == -1); ASSERT (errno == EBADF); fclose (fp); } /* Test that fseeko() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { errno = 0; ASSERT (fseeko (fp, 0, SEEK_END) == -1); ASSERT (errno == EBADF); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { errno = 0; ASSERT (fseeko (fp, 0, SEEK_END) == -1); ASSERT (errno == EBADF); fclose (fp); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseeko4.sh�������������������������������������������������������0000775�0000000�0000000�00000000132�14110572173�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-fseeko4${EXEEXT} "$srcdir/test-fseeko4.sh" || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fseterr.c��������������������������������������������������������0000664�0000000�0000000�00000002357�14110572173�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test setting the error indicator of a stream. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 "fseterr.h" #include <stdio.h> #include <stdlib.h> int main () { /* All streams are initially created with the error indicator cleared. */ if (ferror (stdout)) abort (); /* Verify that fseterr() works. */ fseterr (stdout); if (!ferror (stdout)) abort (); /* Verify fseterr's effect can be undone by clearerr(). */ clearerr (stdout); if (ferror (stdout)) abort (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fstat.c����������������������������������������������������������0000664�0000000�0000000�00000002375�14110572173�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstat() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fstat, int, (int, struct stat *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (int argc, char *argv[]) { /* Test behaviour for invalid file descriptors. */ { struct stat statbuf; errno = 0; ASSERT (fstat (-1, &statbuf) == -1); ASSERT (errno == EBADF); } { struct stat statbuf; close (99); errno = 0; ASSERT (fstat (99, &statbuf) == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fstatat.c��������������������������������������������������������0000664�0000000�0000000�00000005223�14110572173�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstatat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fstatat, int, (int, char const *, struct stat *, int)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "openat.h" #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #ifndef BASE # define BASE "test-fstatat.t" #endif #include "test-lstat.h" #include "test-stat.h" static int dfd = AT_FDCWD; /* Wrapper around fstatat to test stat behavior. */ static int do_stat (char const *name, struct stat *st) { #ifdef TEST_STATAT return statat (dfd, name, st); #else return fstatat (dfd, name, st, 0); #endif } /* Wrapper around fstatat to test lstat behavior. */ static int do_lstat (char const *name, struct stat *st) { #ifdef TEST_STATAT return lstatat (dfd, name, st); #else return fstatat (dfd, name, st, AT_SYMLINK_NOFOLLOW); #endif } int main (_GL_UNUSED int argc, char *argv[]) { int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { struct stat statbuf; errno = 0; ASSERT (fstatat (-1, "foo", &statbuf, 0) == -1); ASSERT (errno == EBADF); } { struct stat statbuf; close (99); errno = 0; ASSERT (fstatat (99, "foo", &statbuf, 0) == -1); ASSERT (errno == EBADF); } result = test_stat_func (do_stat, false); ASSERT (test_lstat_func (do_lstat, false) == result); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_stat_func (do_stat, false) == result); ASSERT (test_lstat_func (do_lstat, false) == result); ASSERT (close (dfd) == 0); /* FIXME - add additional tests of dfd not at current directory. */ if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fstrcmp.c��������������������������������������������������������0000664�0000000�0000000�00000004721�14110572173�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fuzzy string comparison. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "fstrcmp.h" #include <stdbool.h> #include "macros.h" static bool check_fstrcmp (const char *string1, const char *string2, double expected) { /* The use of 'volatile' guarantees that excess precision bits are dropped before the addition and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that msgmerge results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ { volatile double result = fstrcmp (string1, string2); if (!(result == expected)) return false; } { volatile double result = fstrcmp_bounded (string1, string2, expected); if (!(result == expected)) return false; } { double bound = expected * 0.5; /* implies bound <= expected */ volatile double result = fstrcmp_bounded (string1, string2, bound); if (!(result == expected)) return false; } { double bound = (1 + expected) * 0.5; if (expected < bound) { volatile double result = fstrcmp_bounded (string1, string2, bound); if (!(result < bound)) return false; } } return true; } int main (int argc, char *argv[]) { ASSERT (check_fstrcmp ("Langstrumpf", "Langstrumpf", 1.0)); ASSERT (check_fstrcmp ("Levenshtein", "Levenstein", 20./21.)); ASSERT (check_fstrcmp ("Levenstein", "Levenshtein", 20./21.)); ASSERT (check_fstrcmp ("xy", "yx", 1./2.)); ASSERT (check_fstrcmp ("George Bush", "Abraham Lincoln", 2./13.)); ASSERT (check_fstrcmp ("George Bush", "George \"Bugs\" Moran", 2./3.)); return 0; } �����������������������������������������������gnulib-20210822~d383792/tests/test-fsync.c����������������������������������������������������������0000664�0000000�0000000�00000004301�14110572173�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fsync() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (fsync, int, (int)); #include <errno.h> #include <fcntl.h> #include "macros.h" int main (void) { int fd; const char *file = "test-fsync.txt"; /* Assuming stdin and stdout are ttys, fsync is allowed to fail, but may succeed as an extension. */ for (fd = 0; fd < 2; fd++) if (fsync (fd) != 0) { ASSERT (errno == EINVAL /* POSIX */ || errno == ENOTSUP /* seen on Mac OS X 10.5 */ || errno == EBADF /* seen on AIX 7.1 */ || errno == EIO /* seen on mingw */ ); } /* fsync must fail on invalid fd. */ { errno = 0; ASSERT (fsync (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fsync (99) == -1); ASSERT (errno == EBADF); } fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); ASSERT (0 <= fd); ASSERT (write (fd, "hello", 5) == 5); ASSERT (fsync (fd) == 0); ASSERT (close (fd) == 0); /* For a read-only regular file input file descriptor, fsync should succeed (since at least atime changes can be synchronized). On AIX and Cygwin, this test would fail. */ #if !(defined _AIX || defined __CYGWIN__) fd = open (file, O_RDONLY); ASSERT (0 <= fd); { char buf[1]; ASSERT (read (fd, buf, sizeof buf) == sizeof buf); } ASSERT (fsync (fd) == 0); ASSERT (close (fd) == 0); #endif ASSERT (unlink (file) == 0); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftell.c����������������������������������������������������������0000664�0000000�0000000�00000005431�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftell() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (ftell, long, (FILE *)); #include "binary-io.h" #include "macros.h" #ifndef FUNC_UNGETC_BROKEN # define FUNC_UNGETC_BROKEN 0 #endif int main (int argc, char **argv) { int ch; /* Assume stdin is seekable iff argc > 1. */ if (argc == 1) { ASSERT (ftell (stdin) == -1); return 0; } /* mingw ftell is unreliable on text mode input. */ set_binary_mode (0, O_BINARY); /* Simple tests. */ ASSERT (ftell (stdin) == 0); ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 1); /* Test ftell after ungetc of read input. */ ch = ungetc ('#', stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 0); ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 1); /* Test ftell after fseek. */ ASSERT (fseek (stdin, 2, SEEK_SET) == 0); ASSERT (ftell (stdin) == 2); /* Test ftell after random ungetc. */ ch = fgetc (stdin); ASSERT (ch == '/'); ch = ungetc ('@', stdin); ASSERT (ch == '@'); ASSERT (ftell (stdin) == 2); ch = fgetc (stdin); ASSERT (ch == '@'); ASSERT (ftell (stdin) == 3); if (2 < argc) { if (FUNC_UNGETC_BROKEN) { fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", stderr); return 77; } /* Test ftell after ungetc without read. */ ASSERT (fseek (stdin, 0, SEEK_CUR) == 0); ASSERT (ftell (stdin) == 3); ch = ungetc ('~', stdin); ASSERT (ch == '~'); ASSERT (ftell (stdin) == 2); } #if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ /* Test ftell beyond end of file. */ ASSERT (fseek (stdin, 0, SEEK_END) == 0); ch = ftell (stdin); ASSERT (fseek (stdin, 10, SEEK_END) == 0); ASSERT (ftell (stdin) == ch + 10); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftell.sh���������������������������������������������������������0000775�0000000�0000000�00000000216�14110572173�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-ftell${EXEEXT} 1 < "$srcdir/test-ftell.sh" || exit 1 echo hi | ${CHECKER} ./test-ftell${EXEEXT} || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftell2.sh��������������������������������������������������������0000775�0000000�0000000�00000000120�14110572173�0020136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-ftell${EXEEXT} 1 2 < "$srcdir/test-ftell2.sh" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftell3.c���������������������������������������������������������0000664�0000000�0000000�00000004024�14110572173�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftell() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include <string.h> #include "macros.h" #define TESTFILE "t-ftell3.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; if (fwrite ("foogarsh", 1, 8, fp) < 8) goto skip; if (fclose (fp)) goto skip; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; if (fseek (fp, -1, SEEK_END)) goto skip; ASSERT (getc (fp) == 'h'); ASSERT (getc (fp) == EOF); ASSERT (ftell (fp) == 8); ASSERT (ftell (fp) == 8); ASSERT (putc ('!', fp) == '!'); ASSERT (ftell (fp) == 9); ASSERT (fclose (fp) == 0); fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; { char buf[10]; ASSERT (fread (buf, 1, 10, fp) == 9); ASSERT (memcmp (buf, "foogarsh!", 9) == 0); } ASSERT (fclose (fp) == 0); /* The file's contents is now "foogarsh!". */ remove (TESTFILE); return 0; skip: fprintf (stderr, "Skipping test: prerequisite file operations failed.\n"); remove (TESTFILE); return 77; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello.c���������������������������������������������������������0000664�0000000�0000000�00000006315�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (ftello, off_t, (FILE *)); #include "binary-io.h" #include "macros.h" #ifndef FUNC_UNGETC_BROKEN # define FUNC_UNGETC_BROKEN 0 #endif int main (int argc, _GL_UNUSED char **argv) { int ch; /* Assume stdin is seekable iff argc > 1. */ if (argc == 1) { ASSERT (ftell (stdin) == -1); ASSERT (ftello (stdin) == -1); return 0; } /* mingw ftell is unreliable on text mode input. */ set_binary_mode (0, O_BINARY); /* Simple tests. For each test, make sure ftell and ftello agree. */ ASSERT (ftell (stdin) == 0); ASSERT (ftello (stdin) == 0); ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 1); ASSERT (ftello (stdin) == 1); /* Test ftell after ungetc of read input. */ ch = ungetc ('#', stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 0); ASSERT (ftello (stdin) == 0); ch = fgetc (stdin); ASSERT (ch == '#'); ASSERT (ftell (stdin) == 1); ASSERT (ftello (stdin) == 1); /* Test ftell after fseek. */ ASSERT (fseek (stdin, 2, SEEK_SET) == 0); ASSERT (ftell (stdin) == 2); ASSERT (ftello (stdin) == 2); /* Test ftell after random ungetc. */ ch = fgetc (stdin); ASSERT (ch == '/'); ch = ungetc ('@', stdin); ASSERT (ch == '@'); ASSERT (ftell (stdin) == 2); ASSERT (ftello (stdin) == 2); ch = fgetc (stdin); ASSERT (ch == '@'); ASSERT (ftell (stdin) == 3); ASSERT (ftello (stdin) == 3); if (2 < argc) { if (FUNC_UNGETC_BROKEN) { fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", stderr); return 77; } /* Test ftell after ungetc without read. */ ASSERT (fseek (stdin, 0, SEEK_CUR) == 0); ASSERT (ftell (stdin) == 3); ASSERT (ftello (stdin) == 3); ch = ungetc ('~', stdin); ASSERT (ch == '~'); ASSERT (ftell (stdin) == 2); ASSERT (ftello (stdin) == 2); } #if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ /* Test ftell beyond end of file. */ ASSERT (fseek (stdin, 0, SEEK_END) == 0); ch = ftello (stdin); ASSERT (fseek (stdin, 10, SEEK_END) == 0); ASSERT (ftell (stdin) == ch + 10); ASSERT (ftello (stdin) == ch + 10); #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello.sh��������������������������������������������������������0000775�0000000�0000000�00000000221�14110572173�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-ftello${EXEEXT} 1 < "$srcdir/test-ftello.sh" || exit 1 echo hi | ${CHECKER} ./test-ftello${EXEEXT} || exit 1 exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello2.sh�������������������������������������������������������0000775�0000000�0000000�00000000122�14110572173�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-ftello${EXEEXT} 1 2 < "$srcdir/test-ftello2.sh" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello3.c��������������������������������������������������������0000664�0000000�0000000�00000004031�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include <stdio.h> #include <string.h> #include "macros.h" #define TESTFILE "t-ftello3.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; if (fwrite ("foogarsh", 1, 8, fp) < 8) goto skip; if (fclose (fp)) goto skip; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; if (fseek (fp, -1, SEEK_END)) goto skip; ASSERT (getc (fp) == 'h'); ASSERT (getc (fp) == EOF); ASSERT (ftello (fp) == 8); ASSERT (ftello (fp) == 8); ASSERT (putc ('!', fp) == '!'); ASSERT (ftello (fp) == 9); ASSERT (fclose (fp) == 0); fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; { char buf[10]; ASSERT (fread (buf, 1, 10, fp) == 9); ASSERT (memcmp (buf, "foogarsh!", 9) == 0); } ASSERT (fclose (fp) == 0); /* The file's contents is now "foogarsh!". */ remove (TESTFILE); return 0; skip: fprintf (stderr, "Skipping test: prerequisite file operations failed.\n"); remove (TESTFILE); return 77; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello4.c��������������������������������������������������������0000664�0000000�0000000�00000003402�14110572173�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <errno.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { const char *filename = argv[1]; /* Test that ftello() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (ftello (fp) == (off_t)-1); ASSERT (errno == EBADF); fclose (fp); } /* Test that ftello() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { errno = 0; ASSERT (ftello (fp) == (off_t)-1); ASSERT (errno == EBADF); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { errno = 0; ASSERT (ftello (fp) == (off_t)-1); ASSERT (errno == EBADF); fclose (fp); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftello4.sh�������������������������������������������������������0000775�0000000�0000000�00000000132�14110572173�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-ftello4${EXEEXT} "$srcdir/test-ftello4.sh" || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftruncate.c������������������������������������������������������0000664�0000000�0000000�00000003017�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test truncating a file. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (ftruncate, int, (int, off_t)); #include <errno.h> #include <fcntl.h> #include "macros.h" int main (int argc, char *argv[]) { const char *filename = argv[1]; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (ftruncate (-1, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (ftruncate (99, 0) == -1); ASSERT (errno == EBADF); } /* Test behaviour for read-only file descriptors. */ { int fd = open (filename, O_RDONLY); ASSERT (fd >= 0); errno = 0; ASSERT (ftruncate (fd, 0) == -1); ASSERT (errno == EBADF || errno == EINVAL || errno == EACCES /* seen on mingw */ ); close (fd); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ftruncate.sh�����������������������������������������������������0000775�0000000�0000000�00000000121�14110572173�0020742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-ftruncate${EXEEXT} "$srcdir/test-ftruncate.sh" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fts.c������������������������������������������������������������0000664�0000000�0000000�00000010634�14110572173�0017362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the fts function. Copyright 2017-2021 Free Software Foundation, Inc. This 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 <fts_.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #define BASE "t-fts.tmp" static char base[] = BASE; /* Not const, since argv needs non-const. */ static char const base_d[] = BASE "/d"; static char *const argv[2] = { base, 0 }; static void perror_exit (char const *message, int status) { perror (message); exit (status); } /* alloc/dealloc to ensure structures initialized appropriately. */ static void fts_dealloc (void) { static char dir[] = "./"; static char *const curr_dir[2] = { dir, 0 }; FTS *ftsp = fts_open (curr_dir, FTS_NOSTAT | FTS_PHYSICAL | FTS_CWDFD, 0); if (ftsp) { if (fts_close (ftsp) != 0) perror_exit ("fts_close", 9); } else perror_exit (base, 10); } /* Remove BASE and all files under it. */ static void remove_tree (void) { FTSENT *e; FTS *ftsp = fts_open (argv, FTS_NOSTAT | FTS_PHYSICAL | FTS_CWDFD, 0); if (ftsp) { while ((e = fts_read (ftsp))) { int status = 0; switch (e->fts_info) { case FTS_DP: status = unlinkat (ftsp->fts_cwd_fd, e->fts_accpath, AT_REMOVEDIR); break; case FTS_F: case FTS_NSOK: status = unlinkat (ftsp->fts_cwd_fd, e->fts_accpath, 0); break; } if (status != 0) perror_exit (e->fts_path, 1); } if (fts_close (ftsp) != 0) perror_exit ("fts_close", 2); } else if (errno != ENOENT) perror_exit (base, 3); } int main (void) { FTS *ftsp; FTSENT *e; char buf[sizeof BASE + 100]; int i; enum { needles = 4 }; int needles_seen = 0; struct stat st; remove_tree (); /* Create directories BASE, BASE/d, BASE/d/1, BASE/d/2, ..., BASE/d/65536, to stress-test fts. Stop if directory creation fails due to EMFILE or EMLINK problems, or if BASE/d's link count no longer matches the Unix tradition. See: https://bugzilla.kernel.org/show_bug.cgi?id=196405 for more info. */ if (mkdir (BASE, 0777) != 0) perror_exit (base, 4); if (mkdir (base_d, 0777) != 0) perror_exit (base_d, 5); for (i = 1; i <= 65536; i++) { sprintf (buf, "%s/d/%i", base, i); if (mkdir (buf, 0777) != 0) { if (errno == EMFILE || errno == EMLINK) break; if (i <= needles) perror_exit (buf, 77); break; } if (needles < i && stat (base_d, &st) == 0 && st.st_nlink != i + 2) break; } /* Create empty files BASE/d/1/needle etc. */ for (i = 1; i <= needles; i++) { int fd; sprintf (buf, "%s/d/%d/needle", base, i); fd = open (buf, O_WRONLY | O_CREAT, 0666); if (fd < 0 || close (fd) != 0) perror_exit (buf, 77); } /* Use fts to look for the needles. */ ftsp = fts_open (argv, FTS_SEEDOT | FTS_NOSTAT | FTS_PHYSICAL | FTS_CWDFD, 0); if (!ftsp) perror_exit (base, 6); while ((e = fts_read (ftsp))) needles_seen += strcmp (e->fts_name, "needle") == 0; int fts_read_errno = errno; fflush (stdout); if (fts_read_errno) { errno = fts_read_errno; perror_exit ("fts_read", 7); } if (fts_close (ftsp) != 0) perror_exit (base, 8); /* Report an error if we did not find the needles. */ if (needles_seen != needles) { fprintf (stderr, "%d needles found (should be %d)\n", needles_seen, needles); return 1; } remove_tree (); if (stat (base, &st) == 0) { fprintf (stderr, "fts could not remove directory\n"); return 1; } fts_dealloc (); return 0; } ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-func.c�����������������������������������������������������������0000664�0000000�0000000�00000002324�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether __func__ is available Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <string.h> #include "macros.h" int main () { ASSERT (strlen (__func__) > 0); /* On SunPRO C 5.9, sizeof __func__ evaluates to 0. The compiler warns: "warning: null dimension: sizeof()". */ #if !defined __SUNPRO_C ASSERT (strlen (__func__) + 1 == sizeof __func__); #endif ASSERT (strcmp (__func__, "main") == 0 || strcmp (__func__, "<unknown function>") == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-futimens.c�������������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of futimens. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (futimens, int, (int, struct timespec const[2])); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "stat-time.h" #include "timespec.h" #include "utimecmp.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-futimens.t" #include "test-futimens.h" int main (void) { /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); return test_futimens (futimens, true); } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-futimens.h�������������������������������������������������������0000664�0000000�0000000�00000012567�14110572173�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "test-utimens-common.h" /* This file is designed to test both fdutimens(a,NULL,b) and futimens(a,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined. If PRINT, warn before skipping tests with status 77. */ static int test_futimens (int (*func) (int, struct timespec const *), bool print) { int fd = creat (BASE "file", 0600); int result; struct stat st1; struct stat st2; ASSERT (0 <= fd); /* Sanity check. */ ASSERT (fstat (fd, &st1) == 0); nap (); errno = 0; result = func (fd, NULL); if (result == -1 && errno == ENOSYS) { ASSERT (close (fd) == 0); ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: " "setting fd time not supported on this file system\n", stderr); return 77; } ASSERT (!result); ASSERT (fstat (fd, &st2) == 0); /* If utimens truncates to worse resolution than the file system supports, then time can appear to go backwards between now and a follow-up utimens with UTIME_NOW or a NULL timespec. Use UTIMECMP_TRUNCATE_SOURCE to compensate, with st1 as the source. */ ASSERT (0 <= utimecmp (BASE "file", &st2, &st1, UTIMECMP_TRUNCATE_SOURCE)); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); { /* On some NFS systems, the 'now' timestamp of creat or a NULL timespec is determined by the server, but the 'now' timestamp determined by gettime() (as is done when using UTIME_NOW) is determined by the client; since the two machines are not necessarily on the same clock, this is another case where time can appear to go backwards. The rest of this test cares about client time, so manually use gettime() to set both times. */ struct timespec ts[2]; gettime (&ts[0]); ts[1] = ts[0]; ASSERT (func (fd, ts) == 0); ASSERT (fstat (fd, &st1) == 0); nap (); } /* Invalid arguments. */ { errno = 0; ASSERT (func (AT_FDCWD, NULL) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (func (-1, NULL) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (func (99, NULL) == -1); ASSERT (errno == EBADF); } { int fd0 = dup (0); ASSERT (0 <= fd0); ASSERT (close (fd0) == 0); errno = 0; ASSERT (func (fd0, NULL) == -1); ASSERT (errno == EBADF); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = UTIME_BOGUS_POS; ts[1].tv_sec = Y2K; ts[1].tv_nsec = 0; errno = 0; ASSERT (func (fd, ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1].tv_sec = Y2K; ts[1].tv_nsec = UTIME_BOGUS_NEG; errno = 0; ASSERT (func (fd, ts) == -1); ASSERT (errno == EINVAL); } ASSERT (fstat (fd, &st2) == 0); ASSERT (st1.st_atime == st2.st_atime); ASSERT (get_stat_atime_ns (&st1) == get_stat_atime_ns (&st2)); ASSERT (utimecmp (BASE "file", &st1, &st2, 0) == 0); /* Set both times. */ { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = BILLION / 2 - 1; ts[1].tv_sec = Y2K; ts[1].tv_nsec = BILLION - 1; ASSERT (func (fd, ts) == 0); ASSERT (fstat (fd, &st2) == 0); ASSERT (st2.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st2)); ASSERT (get_stat_atime_ns (&st2) < BILLION / 2); ASSERT (st2.st_mtime == Y2K); ASSERT (0 <= get_stat_mtime_ns (&st2)); ASSERT (get_stat_mtime_ns (&st2) < BILLION); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); } /* Play with UTIME_OMIT, UTIME_NOW. */ { struct stat st3; struct timespec ts[2]; ts[0].tv_sec = BILLION; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 0; ts[1].tv_nsec = UTIME_NOW; nap (); ASSERT (func (fd, ts) == 0); ASSERT (fstat (fd, &st3) == 0); ASSERT (st3.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st3)); ASSERT (get_stat_atime_ns (&st3) <= BILLION / 2); ASSERT (utimecmp (BASE "file", &st1, &st3, UTIMECMP_TRUNCATE_SOURCE) <= 0); if (check_ctime) ASSERT (ctime_compare (&st2, &st3) < 0); nap (); ts[0].tv_nsec = 0; ts[1].tv_nsec = UTIME_OMIT; ASSERT (func (fd, ts) == 0); ASSERT (fstat (fd, &st2) == 0); ASSERT (st2.st_atime == BILLION); ASSERT (get_stat_atime_ns (&st2) == 0); ASSERT (st3.st_mtime == st2.st_mtime); ASSERT (get_stat_mtime_ns (&st3) == get_stat_mtime_ns (&st2)); if (check_ctime > 0) ASSERT (ctime_compare (&st3, &st2) < 0); } /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (BASE "file") == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fwritable.c������������������������������������������������������0000664�0000000�0000000�00000005500�14110572173�0020541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwritable() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include "fwritable.h" #include <stdio.h> #include "macros.h" #define TESTFILE "t-fwritable.tmp" int main () { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; ASSERT (fwritable (fp)); if (fwrite ("foobarsh", 1, 8, fp) < 8) goto skip; ASSERT (fwritable (fp)); if (fclose (fp)) goto skip; /* Open it in read-only mode. */ fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; ASSERT (!fwritable (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (!fwritable (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (!fwritable (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (!fwritable (fp)); fflush (fp); ASSERT (!fwritable (fp)); if (fgetc (fp) != 'a') goto skip; ASSERT (!fwritable (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; ASSERT (!fwritable (fp)); if (fclose (fp)) goto skip; /* Open it in read-write mode. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; ASSERT (fwritable (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (fwritable (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (fwritable (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (fwritable (fp)); fflush (fp); ASSERT (fwritable (fp)); if (fgetc (fp) != 'a') goto skip; ASSERT (fwritable (fp)); if (fputc ('z', fp) != 'z') goto skip; ASSERT (fwritable (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; ASSERT (fwritable (fp)); if (fclose (fp)) goto skip; /* Open it in append mode. */ fp = fopen (TESTFILE, "a"); if (fp == NULL) goto skip; ASSERT (fwritable (fp)); if (fwrite ("bla", 1, 3, fp) < 3) goto skip; ASSERT (fwritable (fp)); if (fclose (fp)) goto skip; return 0; skip: fprintf (stderr, "Skipping test: file operations failed.\n"); return 77; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fwrite.c���������������������������������������������������������0000664�0000000�0000000�00000005131�14110572173�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwrite() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fwrite.txt"; /* We don't have an fwrite() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fwrite() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "w"); char buf[5] = "world"; ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fwrite() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-fwriting.c�������������������������������������������������������0000664�0000000�0000000�00000011273�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwriting() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> /* None of the files accessed by this test are large, so disable the fseek link warning if we are not using the gnulib fseek module. */ #define _GL_NO_LARGE_FILES #include "fwriting.h" #include <stdio.h> #include "macros.h" #define TESTFILE "t-fwriting.tmp" int main () { FILE *fp; /* Create a file with some contents. Write-only file is always writing. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) goto skip; ASSERT (fwriting (fp)); if (fwrite ("foobarsh", 1, 8, fp) < 8) goto skip; ASSERT (fwriting (fp)); if (fclose (fp)) goto skip; /* Open it in read-only mode. Read-only file is never writing. */ fp = fopen (TESTFILE, "r"); if (fp == NULL) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (!fwriting (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (!fwriting (fp)); fflush (fp); ASSERT (!fwriting (fp)); if (fgetc (fp) != 'a') goto skip; ASSERT (!fwriting (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; ASSERT (!fwriting (fp)); if (fclose (fp)) goto skip; /* Open it in read-write mode. POSIX requires a reposition (fseek, fsetpos, rewind) or fflush when transitioning from write to read, fwriting is only deterministic after input or output, but this test case should be portable even on open, after reposition, and after fflush. */ /* First a scenario with only fgetc, fseek, fputc. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (!fwriting (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (!fwriting (fp)); /* This fseek call is necessary when switching from reading to writing. See the description of fopen(), ISO C 99 7.19.5.3.(6). */ if (fseek (fp, 0, SEEK_CUR) != 0) goto skip; ASSERT (!fwriting (fp)); if (fputc ('x', fp) != 'x') goto skip; ASSERT (fwriting (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; /* freading (fp) is undefined here, because on some implementations (e.g. glibc) fseek causes a buffer to be read. fwriting (fp) is undefined as well. */ if (fclose (fp)) goto skip; /* Open it in read-write mode. POSIX requires a reposition (fseek, fsetpos, rewind) or fflush when transitioning from write to read, fwriting is only deterministic after input or output, but this test case should be portable even on open, after reposition, and after fflush. */ /* Here a scenario that includes fflush. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'f') goto skip; ASSERT (!fwriting (fp)); if (fseek (fp, 2, SEEK_CUR)) goto skip; ASSERT (!fwriting (fp)); if (fgetc (fp) != 'b') goto skip; ASSERT (!fwriting (fp)); fflush (fp); ASSERT (!fwriting (fp)); if (fgetc (fp) != 'x') goto skip; ASSERT (!fwriting (fp)); /* This fseek call is necessary when switching from reading to writing. See the description of fopen(), ISO C 99 7.19.5.3.(6). */ if (fseek (fp, 0, SEEK_CUR) != 0) goto skip; ASSERT (!fwriting (fp)); if (fputc ('z', fp) != 'z') goto skip; ASSERT (fwriting (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; /* freading (fp) is undefined here, because on some implementations (e.g. glibc) fseek causes a buffer to be read. fwriting (fp) is undefined as well. */ if (fclose (fp)) goto skip; /* Open it in append mode. */ fp = fopen (TESTFILE, "a"); if (fp == NULL) goto skip; ASSERT (fwriting (fp)); if (fwrite ("bla", 1, 3, fp) < 3) goto skip; ASSERT (fwriting (fp)); if (fclose (fp)) goto skip; return 0; skip: fprintf (stderr, "Skipping test: file operations failed.\n"); return 77; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-arcfour.c�����������������������������������������������������0000664�0000000�0000000�00000005043�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { gc_cipher_handle ctx; /* Test vector from Cryptlib via Libgcrypt labeled there: "from the State/Commerce Department". */ static char key_1[] = { 0x61, 0x8A, 0x63, 0xD2, 0xFB }; static char plaintext_1[] = { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C }; static const char ciphertext_1[] = { 0xF1, 0x38, 0x29, 0xC9, 0xDE }; char scratch[16]; Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } rc = gc_cipher_open (GC_ARCFOUR40, GC_STREAM, &ctx); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, sizeof (key_1), key_1); if (rc != GC_OK) return 1; memcpy (scratch, plaintext_1, sizeof (plaintext_1)); rc = gc_cipher_encrypt_inline (ctx, sizeof (plaintext_1), scratch); if (rc != GC_OK) return 1; if (memcmp (scratch, ciphertext_1, sizeof (ciphertext_1))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", ciphertext_1[i] & 0xFF); printf ("\n"); return 1; } /* decrypt */ rc = gc_cipher_setkey (ctx, sizeof (key_1), key_1); if (rc != GC_OK) return 1; rc = gc_cipher_decrypt_inline (ctx, sizeof (plaintext_1), scratch); if (rc != GC_OK) return 1; if (memcmp (scratch, plaintext_1, sizeof (plaintext_1))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", plaintext_1[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } gc_cipher_close (ctx); gc_done (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-arctwo.c������������������������������������������������������0000664�0000000�0000000�00000004700�14110572173�0020451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { gc_cipher_handle ctx; /* Test vectors from RFC 2268. */ static char key[8] = "\xff\xff\xff\xff\xff\xff\xff\xff"; static char plaintext[8] = "\xff\xff\xff\xff\xff\xff\xff\xff"; static const char ciphertext[8] = "\x27\x8b\x27\xe4\x2e\x2f\x0d\x49"; char scratch[16]; Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } rc = gc_cipher_open (GC_ARCTWO40, GC_ECB, &ctx); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, sizeof (key), key); if (rc != GC_OK) return 1; memcpy (scratch, plaintext, sizeof (plaintext)); rc = gc_cipher_encrypt_inline (ctx, sizeof (plaintext), scratch); if (rc != GC_OK) return 1; if (memcmp (scratch, ciphertext, sizeof (ciphertext))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", ciphertext[i] & 0xFF); printf ("\n"); return 1; } /* decrypt */ rc = gc_cipher_setkey (ctx, sizeof (key), key); if (rc != GC_OK) return 1; rc = gc_cipher_decrypt_inline (ctx, sizeof (plaintext), scratch); if (rc != GC_OK) return 1; if (memcmp (scratch, plaintext, sizeof (plaintext))) { size_t i; printf ("expected:\n"); for (i = 0; i < 5; i++) printf ("%02x ", plaintext[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 5; i++) printf ("%02x ", scratch[i] & 0xFF); printf ("\n"); return 1; } gc_cipher_close (ctx); gc_done (); return 0; } ����������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-des.c���������������������������������������������������������0000664�0000000�0000000�00000004421�14110572173�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* * DES Maintenance Test */ { int i; char key[8] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }; char input[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; char result[8] = { 0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a }; char temp1[8], temp2[8], temp3[8]; gc_cipher_handle ctx_array[64]; for (i = 0; i < 64; ++i) { gc_cipher_handle ctx; rc = gc_cipher_open (GC_DES, GC_ECB, &ctx); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, 8, key); if (rc != GC_OK) return 1; memcpy (temp1, input, 8); rc = gc_cipher_encrypt_inline (ctx, 8, temp1); if (rc != GC_OK) return 1; memcpy (temp2, temp1, 8); rc = gc_cipher_encrypt_inline (ctx, 8, temp2); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, 8, temp2); if (rc != GC_OK) return 1; memcpy (temp3, temp1, 8); rc = gc_cipher_decrypt_inline (ctx, 8, temp3); if (rc != GC_OK) return 1; memcpy (key, temp3, 8); memcpy (input, temp1, 8); ctx_array[i] = ctx; } if (memcmp (temp3, result, 8)) return 1; for (i = 0; i < 64; ++i) gc_cipher_close (ctx_array[i]); } gc_done (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-hmac-md5.c����������������������������������������������������0000664�0000000�0000000�00000003747�14110572173�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* Test vectors from RFC 2104. */ { char *key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; size_t key_len = 16; char *data = "Hi There"; size_t data_len = 8; char *digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d"; char out[16]; /* key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b key_len = 16 bytes data = "Hi There" data_len = 8 bytes digest = 0x9294727a3638bb1c13f48ef8158bfc9d */ if (gc_hmac_md5 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, 16) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } } gc_done (); return 0; } �������������������������gnulib-20210822~d383792/tests/test-gc-hmac-sha1.c���������������������������������������������������0000664�0000000�0000000�00000003446�14110572173�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; size_t key_len = 16; char *data = "Hi There"; size_t data_len = 8; char *digest = "\x67\x5b\x0b\x3a\x1b\x4d\xdf\x4e\x12\x48" "\x72\xda\x6c\x2f\x63\x2b\xfe\xd9\x57\xe9"; char out[GC_SHA1_DIGEST_SIZE]; if (gc_hmac_sha1 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, GC_SHA1_DIGEST_SIZE) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } } gc_done (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-hmac-sha256.c�������������������������������������������������0000664�0000000�0000000�00000003611�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; size_t key_len = 20; char *data = "Hi There"; size_t data_len = 8; char *digest = "\xb0\x34\x4c\x61\xd8\xdb\x38\x53\x5c\xa8\xaf\xce\xaf\x0b\xf1\x2b\x88\x1d\xc2\x00\xc9\x83\x3d\xa7\x26\xe9\x37\x6c\x2e\x32\xcf\xf7"; char out[GC_SHA256_DIGEST_SIZE]; if (gc_hmac_sha256 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, GC_SHA256_DIGEST_SIZE) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < GC_SHA256_DIGEST_SIZE; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < GC_SHA256_DIGEST_SIZE; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } } gc_done (); return 0; } �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-hmac-sha512.c�������������������������������������������������0000664�0000000�0000000�00000004011�14110572173�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; size_t key_len = 20; char *data = "Hi There"; size_t data_len = 8; char *digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0\x23\x79\xf4\xe2\xce\x4e\xc2\x78\x7a\xd0\xb3\x05\x45\xe1\x7c\xde\xda\xa8\x33\xb7\xd6\xb8\xa7\x02\x03\x8b\x27\x4e\xae\xa3\xf4\xe4\xbe\x9d\x91\x4e\xeb\x61\xf1\x70\x2e\x69\x6c\x20\x3a\x12\x68\x54"; char out[GC_SHA512_DIGEST_SIZE]; if (gc_hmac_sha512 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, GC_SHA512_DIGEST_SIZE) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < GC_SHA512_DIGEST_SIZE; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < GC_SHA512_DIGEST_SIZE; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } } gc_done (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-md2.c���������������������������������������������������������0000664�0000000�0000000�00000005744�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* Test vectors from RFC 1319. */ { char *in = "abcdefghijklmnopqrstuvwxyz"; size_t inlen = strlen (in); char *expect = "\x4e\x8d\xdf\xf3\x65\x02\x92\xab\x5a\x41\x08\xc3\xaa\x47\x94\x0b"; char out[16]; const char *p; if (gc_md2 (in, inlen, out) != 0) { printf ("gc_md2 call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md2 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_buffer (GC_MD2, in, inlen, out) != 0) { printf ("gc_hash_buffer(MD2) call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md2 2 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_MD2) != 16) { printf ("gc_hash_digest_length (GC_MD2) failed\n"); return 1; } if ((rc = gc_hash_open (GC_MD2, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_MD2) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 16) != 0) { size_t i; printf ("md2 3 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } ����������������������������gnulib-20210822~d383792/tests/test-gc-md4.c���������������������������������������������������������0000664�0000000�0000000�00000006050�14110572173�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* Test vectors from RFC 1320. */ { const char *in = "abc"; size_t inlen = strlen (in); const char *expect = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d"; char out[16]; const char *p; /* MD4 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b */ if (gc_md4 (in, inlen, out) != 0) { printf ("gc_md4 call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md4 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_buffer (GC_MD4, in, inlen, out) != 0) { printf ("gc_hash_buffer(MD4) call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md4 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_MD4) != 16) { printf ("gc_hash_digest_length (GC_MD4) failed\n"); return 1; } if ((rc = gc_hash_open (GC_MD4, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_MD4) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 16) != 0) { size_t i; printf ("md4 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-md5.c���������������������������������������������������������0000664�0000000�0000000�00000006065�14110572173�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* Test vectors from RFC 1321. */ { char *in = "abcdefghijklmnopqrstuvwxyz"; size_t inlen = strlen (in); char *expect = "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00\x7d\xfb\x49\x6c\xca\x67\xe1\x3b"; char out[16]; const char *p; /* MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b */ if (gc_md5 (in, inlen, out) != 0) { printf ("gc_md5 call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md5 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_buffer (GC_MD5, in, inlen, out) != 0) { printf ("gc_hash_buffer(MD5) call failed\n"); return 1; } if (memcmp (out, expect, 16) != 0) { size_t i; printf ("md5 2 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_MD5) != 16) { printf ("gc_hash_digest_length (GC_MD5) failed\n"); return 1; } if ((rc = gc_hash_open (GC_MD5, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_MD5) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 16) != 0) { size_t i; printf ("md5 3 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-pbkdf2-sha1.c�������������������������������������������������0000664�0000000�0000000�00000010244�14110572173�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2002-2005, 2007, 2010-2021 Free Software Foundation, Inc. * * This 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, 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 Simon Josefsson. */ #include <config.h> #include "gc.h" #include <stdio.h> #include <string.h> /* Test vectors from RFC 3962. */ #define G_CLEF "\xF0\x9D\x84\x9E" struct pkcs5 { int iterations; const char *password; const char *salt; int dklen; const char *expected; }; const struct pkcs5 pkcs5[] = { {1, "password", "ATHENA.MIT.EDUraeburn", 16, "\xCD\xED\xB5\x28\x1B\xB2\xF8\x01\x56\x5A\x11\x22\xB2\x56\x35\x15"}, {2, "password", "ATHENA.MIT.EDUraeburn", 16, "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d"}, {2, "password", "ATHENA.MIT.EDUraeburn", 32, "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d" "\xa0\x53\x78\xb9\x32\x44\xec\x8f\x48\xa9\x9e\x61\xad\x79\x9d\x86"}, {1200, "password", "ATHENA.MIT.EDUraeburn", 16, "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b"}, {1200, "password", "ATHENA.MIT.EDUraeburn", 32, "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b" "\xa7\xe5\x2d\xdb\xc5\xe5\x14\x2f\x70\x8a\x31\xe2\xe6\x2b\x1e\x13"}, {5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 16, "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49"}, {5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 32, "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49" "\x3f\x98\xd2\x03\xe6\xbe\x49\xa6\xad\xf4\xfa\x57\x4b\x6e\x64\xee"}, {1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase equals block size", 16, "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9"}, {1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase equals block size", 32, "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9" "\xc5\xec\x59\xf1\xa4\x52\xf5\xcc\x9a\xd9\x40\xfe\xa0\x59\x8e\xd1"}, {1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase exceeds block size", 16, "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61"}, {1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase exceeds block size", 32, "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61" "\x1a\x8b\x4d\x28\x26\x01\xdb\x3b\x36\xbe\x92\x46\x91\x5e\xc8\x2a"}, {50, G_CLEF "\x00", "EXAMPLE.COMpianist", 16, "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39"}, {50, G_CLEF "\x00", "EXAMPLE.COMpianist", 32, "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39" "\xe7\xfe\x37\xa0\xc4\x1e\x02\xc2\x81\xff\x30\x69\xe1\xe9\x4f\x52"}, {500, "All n-entities must communicate with other n-entities via n-1 " "entiteeheehees", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 16, "\x6A\x89\x70\xBF\x68\xC9\x2C\xAE\xA8\x4A\x8D\xF2\x85\x10\x85\x86"} }; int main (int argc, char *argv[]) { size_t i; int rc; char out[BUFSIZ]; for (i = 0; i < sizeof (pkcs5) / sizeof (pkcs5[0]); i++) { rc = gc_pbkdf2_sha1 (pkcs5[i].password, strlen (pkcs5[i].password), pkcs5[i].salt, strlen (pkcs5[i].salt), pkcs5[i].iterations, out, pkcs5[i].dklen); if (rc != GC_OK) { printf ("PKCS5 entry %ld failed fatally: %d\n", (unsigned long) i, rc); return 1; } if (memcmp (pkcs5[i].expected, out, pkcs5[i].dklen) != 0) { printf ("PKCS5 entry %ld failed\n", (unsigned long) i); return 1; } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-pbkdf2.c������������������������������������������������������0000664�0000000�0000000�00000011530�14110572173�0020321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2002-2005, 2007, 2010-2021 Free Software Foundation, Inc. * * This 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, 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 Simon Josefsson. */ #include <config.h> #include "gc.h" #include <stdio.h> #include <string.h> /* Test vectors from RFC 3962. */ #define G_CLEF "\xF0\x9D\x84\x9E" struct pkcs5 { Gc_hash hash; int iterations; const char *password; const char *salt; int dklen; const char *expected; }; const struct pkcs5 pkcs5[] = { #if GNULIB_GC_HMAC_SHA1 {GC_SHA1, 1, "password", "ATHENA.MIT.EDUraeburn", 16, "\xCD\xED\xB5\x28\x1B\xB2\xF8\x01\x56\x5A\x11\x22\xB2\x56\x35\x15"}, {GC_SHA1, 2, "password", "ATHENA.MIT.EDUraeburn", 16, "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d"}, {GC_SHA1, 2, "password", "ATHENA.MIT.EDUraeburn", 32, "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d" "\xa0\x53\x78\xb9\x32\x44\xec\x8f\x48\xa9\x9e\x61\xad\x79\x9d\x86"}, {GC_SHA1, 1200, "password", "ATHENA.MIT.EDUraeburn", 16, "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b"}, {GC_SHA1, 1200, "password", "ATHENA.MIT.EDUraeburn", 32, "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b" "\xa7\xe5\x2d\xdb\xc5\xe5\x14\x2f\x70\x8a\x31\xe2\xe6\x2b\x1e\x13"}, {GC_SHA1, 5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 16, "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49"}, {GC_SHA1, 5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 32, "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49" "\x3f\x98\xd2\x03\xe6\xbe\x49\xa6\xad\xf4\xfa\x57\x4b\x6e\x64\xee"}, {GC_SHA1, 1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase equals block size", 16, "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9"}, {GC_SHA1, 1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase equals block size", 32, "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9" "\xc5\xec\x59\xf1\xa4\x52\xf5\xcc\x9a\xd9\x40\xfe\xa0\x59\x8e\xd1"}, {GC_SHA1, 1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase exceeds block size", 16, "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61"}, {GC_SHA1, 1200, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "pass phrase exceeds block size", 32, "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61" "\x1a\x8b\x4d\x28\x26\x01\xdb\x3b\x36\xbe\x92\x46\x91\x5e\xc8\x2a"}, {GC_SHA1, 50, G_CLEF "\x00", "EXAMPLE.COMpianist", 16, "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39"}, {GC_SHA1, 50, G_CLEF "\x00", "EXAMPLE.COMpianist", 32, "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39" "\xe7\xfe\x37\xa0\xc4\x1e\x02\xc2\x81\xff\x30\x69\xe1\xe9\x4f\x52"}, {GC_SHA1, 500, "All n-entities must communicate with other n-entities via n-1 " "entiteeheehees", "\x12\x34\x56\x78\x78\x56\x34\x12\x00", 16, "\x6A\x89\x70\xBF\x68\xC9\x2C\xAE\xA8\x4A\x8D\xF2\x85\x10\x85\x86"}, #endif #if GNULIB_GC_HMAC_SHA256 {GC_SHA256, 4096, "pencil", "\x5b\x6d\x99\x68\x9d\x12\x35\x8e\xec\xa0\x4b\x14\x12\x36\xfa\x81", 32, "\xc4\xa4\x95\x10\x32\x3a\xb4\xf9\x52\xca\xc1\xfa\x99\x44\x19\x39" "\xe7\x8e\xa7\x4d\x6b\xe8\x1d\xdf\x70\x96\xe8\x75\x13\xdc\x61\x5d"} #endif }; int main (int argc, char *argv[]) { size_t i; int rc; char out[BUFSIZ]; rc = gc_pbkdf2_hmac (GC_MD2, "p", 1, "s", 1, 42, out, 17); if (rc != GC_INVALID_HASH) { printf ("PBKDF2 accepts invalid MD2 hash %d\n", rc); return 1; } for (i = 0; i < sizeof (pkcs5) / sizeof (pkcs5[0]); i++) { rc = gc_pbkdf2_hmac (pkcs5[i].hash, pkcs5[i].password, strlen (pkcs5[i].password), pkcs5[i].salt, strlen (pkcs5[i].salt), pkcs5[i].iterations, out, pkcs5[i].dklen); if (rc != GC_OK) { printf ("PKCS5 entry %ld failed fatally: %d\n", (unsigned long) i, rc); return 1; } if (memcmp (pkcs5[i].expected, out, pkcs5[i].dklen) != 0) { printf ("PKCS5 entry %ld failed\n", (unsigned long) i); return 1; } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-rijndael.c����������������������������������������������������0000664�0000000�0000000�00000007570�14110572173�0020752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char buf[16]; char key[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char pt[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char ct[] = "\xC3\x4C\x05\x2C\xC0\xDA\x8D\x73" "\x45\x1A\xFE\x5F\x03\xBE\x29\x7F"; gc_cipher_handle ctx; size_t i; rc = gc_cipher_open (GC_AES128, GC_ECB, &ctx); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, 16, key); if (rc != GC_OK) return 1; memcpy (buf, pt, 16); for (i = 0; i < 10000; i++) { rc = gc_cipher_encrypt_inline (ctx, 16, buf); if (rc != GC_OK) { printf ("encrypt failed %d\n", rc); return 1; } } if (memcmp (buf, ct, 16) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", ct[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } for (i = 0; i < 10000; i++) { rc = gc_cipher_decrypt_inline (ctx, 16, buf); if (rc != GC_OK) { printf ("decrypt failed %d\n", rc); return 1; } } if (memcmp (buf, pt, 16) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", pt[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } gc_cipher_close (ctx); } { char buf[16]; char iv[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char key[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char pt[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char ct[] = "\x66\xe9\x4b\xd4\xef\x8a\x2c\x3b" "\x88\x4c\xfa\x59\xca\x34\x2b\x2e"; gc_cipher_handle ctx; size_t i; rc = gc_cipher_open (GC_AES128, GC_CBC, &ctx); if (rc != GC_OK) return 1; rc = gc_cipher_setkey (ctx, 16, key); if (rc != GC_OK) return 1; rc = gc_cipher_setiv (ctx, 16, iv); if (rc != GC_OK) return 1; memcpy (buf, pt, 16); for (i = 0; i < 10000; i++) { rc = gc_cipher_encrypt_inline (ctx, 16, buf); if (rc != GC_OK) { printf ("encrypt failed %d\n", rc); return 1; } } if (memcmp (buf, ct, 16) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", ct[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } gc_cipher_close (ctx); } gc_done (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-sha1.c��������������������������������������������������������0000664�0000000�0000000�00000005762�14110572173�0020017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *in = "abcdefgh"; size_t inlen = strlen (in); char *expect = "\x42\x5a\xf1\x2a\x07\x43\x50\x2b" "\x32\x2e\x93\xa0\x15\xbc\xf8\x68\xe3\x24\xd5\x6a"; char out[20]; const char *p; if (gc_sha1 (in, inlen, out) != 0) { printf ("gc_sha1 call failed\n"); return 1; } if (memcmp (out, expect, 20) != 0) { size_t i; printf ("sha1 test1 mismatch. expected:\n"); for (i = 0; i < 20; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 20; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } rc = gc_hash_buffer (GC_SHA1, "abcdefgh", 8, out); if (rc != GC_OK) { printf ("gc_hash_buffer(sha1) call failed: %d\n", rc); return 1; } if (memcmp (out, expect, 20) != 0) { size_t i; printf ("sha1 test2 mismatch. expected:\n"); for (i = 0; i < 20; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 20; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_SHA1) != 20) { printf ("gc_hash_digest_length (GC_SHA1) failed\n"); return 1; } if ((rc = gc_hash_open (GC_SHA1, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_SHA1) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 20) != 0) { size_t i; printf ("sha1 test3 mismatch. expected:\n"); for (i = 0; i < 20; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 20; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } ��������������gnulib-20210822~d383792/tests/test-gc-sha256.c������������������������������������������������������0000664�0000000�0000000�00000006143�14110572173�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *in = "abcdefghijklmnopqrstuvwxyz"; size_t inlen = strlen (in); char *expect = "\x71\xc4\x80\xdf\x93\xd6\xae\x2f\x1e\xfa\xd1\x44\x7c\x66\xc9\x52" "\x5e\x31\x62\x18\xcf\x51\xfc\x8d\x9e\xd8\x32\xf2\xda\xf1\x8b\x73"; char out[32]; const char *p; if (gc_sha256 (in, inlen, out) != 0) { printf ("gc_sha256 call failed\n"); return 1; } if (memcmp (out, expect, 32) != 0) { size_t i; printf ("sha256 test1 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } rc = gc_hash_buffer (GC_SHA256, "abcdefghijklmnopqrstuvwxyz", 26, out); if (rc != GC_OK) { printf ("gc_hash_buffer(sha256) call failed: %d\n", rc); return 1; } if (memcmp (out, expect, 32) != 0) { size_t i; printf ("sha256 test2 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_SHA256) != 32) { printf ("gc_hash_digest_length (GC_SHA256) failed\n"); return 1; } if ((rc = gc_hash_open (GC_SHA256, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_SHA256) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 32) != 0) { size_t i; printf ("sha256 test3 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-sha512.c������������������������������������������������������0000664�0000000�0000000�00000006365�14110572173�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } { char *in = "abcdefghijklmnopqrstuvwxyz"; size_t inlen = strlen (in); char *expect = "\x4d\xbf\xf8\x6c\xc2\xca\x1b\xae\x1e\x16\x46\x8a\x05\xcb\x98\x81" "\xc9\x7f\x17\x53\xbc\xe3\x61\x90\x34\x89\x8f\xaa\x1a\xab\xe4\x29" "\x95\x5a\x1b\xf8\xec\x48\x3d\x74\x21\xfe\x3c\x16\x46\x61\x3a\x59" "\xed\x54\x41\xfb\x0f\x32\x13\x89\xf7\x7f\x48\xa8\x79\xc7\xb1\xf1"; char out[64]; const char *p; if (gc_sha512 (in, inlen, out) != 0) { printf ("gc_sha512 call failed\n"); return 1; } if (memcmp (out, expect, 64) != 0) { size_t i; printf ("sha512 test1 mismatch. expected:\n"); for (i = 0; i < 64; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 64; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } rc = gc_hash_buffer (GC_SHA512, "abcdefghijklmnopqrstuvwxyz", 26, out); if (rc != GC_OK) { printf ("gc_hash_buffer(sha512) call failed: %d\n", rc); return 1; } if (memcmp (out, expect, 64) != 0) { size_t i; printf ("sha512 test2 mismatch. expected:\n"); for (i = 0; i < 64; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 64; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_SHA512) != 64) { printf ("gc_hash_digest_length (GC_SHA512) failed\n"); return 1; } if ((rc = gc_hash_open (GC_SHA512, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_SHA512) failed (%d)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 64) != 0) { size_t i; printf ("sha512 test3 mismatch. expected:\n"); for (i = 0; i < 64; i++) printf ("%02x ", expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 64; i++) printf ("%02x ", p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc-sm3.c���������������������������������������������������������0000664�0000000�0000000�00000006245�14110572173�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2017-2021 Free Software Foundation, Inc. * Written by Jia Zhang <qianyue.zj@alibaba-inc.com> * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; gc_hash_handle h; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } /* Test vector from GM/T 004-2012. */ { const char *in = "abc"; size_t inlen = strlen (in); const char *expect = "\x66\xc7\xf0\xf4\x62\xee\xed\xd9\xd1" "\xf2\xd4\x6b\xdc\x10\xe4\xe2\x41\x67\xc4\x87\x5c" "\xf2\xf7\xa2\x29\x7d\xa0\x2b\x8f\x4b\xa8\xe0"; char out[32]; const char *p; if (gc_sm3 (in, inlen, out) != 0) { printf ("gc_sm3 call failed\n"); return 1; } if (memcmp (out, expect, 32) != 0) { size_t i; printf ("sm3 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) out[i] & 0xFF); printf ("\n"); return 1; } rc = gc_hash_buffer (GC_SM3, "abc", 3, out); if (rc != GC_OK) { printf ("gc_hash_buffer(sm3) call failed: %u\n", rc); return 1; } if (memcmp (out, expect, 32) != 0) { size_t i; printf ("sm3' mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) out[i] & 0xFF); printf ("\n"); return 1; } if (gc_hash_digest_length (GC_SM3) != 32) { printf ("gc_hash_digest_length (GC_SM3) failed\n"); return 1; } if ((rc = gc_hash_open (GC_SM3, 0, &h)) != GC_OK) { printf ("gc_hash_open(GC_SM3) failed (%u)\n", rc); return 1; } gc_hash_write (h, inlen, in); p = gc_hash_read (h); if (!p) { printf ("gc_hash_read failed\n"); return 1; } if (memcmp (p, expect, 32) != 0) { size_t i; printf ("sm3 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) expect[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", (unsigned int) p[i] & 0xFF); printf ("\n"); return 1; } gc_hash_close (h); } gc_done (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gc.c�������������������������������������������������������������0000664�0000000�0000000�00000001751�14110572173�0017157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005-2006, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 "gc.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { Gc_rc rc; rc = gc_init (); if (rc != GC_OK) { printf ("gc_init() failed\n"); return 1; } gc_done (); return 0; } �����������������������gnulib-20210822~d383792/tests/test-get-rusage-as.c��������������������������������������������������0000664�0000000�0000000�00000003124�14110572173�0021226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getter for RLIMIT_AS. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "resource-ext.h" #include <stdio.h> #include <stdlib.h> #include "macros.h" void *memchunk1; void *memchunk2; int main () { uintptr_t value1, value2, value3; value1 = get_rusage_as (); memchunk1 = malloc (0x88); value2 = get_rusage_as (); memchunk2 = malloc (0x281237); value3 = get_rusage_as (); if (value1 == 0 && value2 == 0 && value3 == 0) { fprintf (stderr, "Skipping test: no way to determine address space size\n"); return 77; } else { /* The address space size is positive. */ ASSERT (value1 > 0); /* Allocating memory should not decrease the address space size. */ ASSERT (value2 >= value1); ASSERT (value3 >= value2); /* Allocating 2.5 MB of memory should increase the address space size. */ ASSERT (value3 > value1); return 0; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-get-rusage-data.c������������������������������������������������0000664�0000000�0000000�00000003476�14110572173�0021546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getter for RLIMIT_DATA. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "resource-ext.h" #include <stdio.h> #include <stdlib.h> #include "macros.h" void *memchunk1; void *memchunk2; int main () { uintptr_t value1, value2, value3; value1 = get_rusage_data (); memchunk1 = malloc (0x88); value2 = get_rusage_data (); memchunk2 = malloc (0x281237); value3 = get_rusage_data (); if (value1 == 0 && value2 == 0 && value3 == 0) { fprintf (stderr, "Skipping test: no way to determine data segment size\n"); return 77; } else { /* The data segment size is positive, except possibly at the beginning. */ ASSERT (value2 > 0); /* Allocating memory should not decrease the data segment size. */ ASSERT (value2 >= value1); ASSERT (value3 >= value2); #if !(__GLIBC__ == 2 || MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __OpenBSD__ || defined _WIN32 || defined __CYGWIN__) /* Allocating 2.5 MB of memory should increase the data segment size. */ ASSERT (value3 > value1); #endif return 0; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getaddrinfo.c����������������������������������������������������0000664�0000000�0000000�00000012015�14110572173�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the getaddrinfo module. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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 Simon Josefsson. */ #include <config.h> #include <netdb.h> #include "signature.h" SIGNATURE_CHECK (gai_strerror, char const *, (int)); /* On native Windows, these two functions may have the __stdcall calling convention. But the SIGNATURE_CHECK works only for functions with __cdecl calling convention. */ #if !(defined _WIN32 && !defined __CYGWIN__) SIGNATURE_CHECK (freeaddrinfo, void, (struct addrinfo *)); SIGNATURE_CHECK (getaddrinfo, int, (char const *, char const *, struct addrinfo const *, struct addrinfo **)); #endif #include <arpa/inet.h> #include <errno.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include "sockets.h" /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif /* BeOS does not have AF_UNSPEC. */ #ifndef AF_UNSPEC # define AF_UNSPEC 0 #endif #ifndef EAI_SERVICE # define EAI_SERVICE 0 #endif static int simple (char const *host, char const *service) { char buf[BUFSIZ]; static int skip = 0; struct addrinfo hints; struct addrinfo *ai0, *ai; int res; int err; /* Once we skipped the test, do not try anything else */ if (skip) return 0; dbgprintf ("Finding %s service %s...\n", host, service); /* This initializes "hints" but does not use it. Is there a reason for this? If so, please fix this comment. */ memset (&hints, 0, sizeof (hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; res = getaddrinfo (host, service, 0, &ai0); err = errno; dbgprintf ("res %d: %s\n", res, gai_strerror (res)); if (res != 0) { /* EAI_AGAIN is returned if no network is available. Don't fail the test merely because someone is down the country on their in-law's farm. */ if (res == EAI_AGAIN) { skip++; fprintf (stderr, "skipping getaddrinfo test: no network?\n"); return 77; } /* IRIX reports EAI_NONAME for "https". Don't fail the test merely because of this. */ if (res == EAI_NONAME) return 0; /* Solaris reports EAI_SERVICE for "http" and "https". Don't fail the test merely because of this. */ if (res == EAI_SERVICE) return 0; #ifdef EAI_NODATA /* AIX reports EAI_NODATA for "https". Don't fail the test merely because of this. */ if (res == EAI_NODATA) return 0; #endif /* Provide details if errno was set. */ if (res == EAI_SYSTEM) fprintf (stderr, "system error: %s\n", strerror (err)); return 1; } for (ai = ai0; ai; ai = ai->ai_next) { void *ai_addr = ai->ai_addr; struct sockaddr_in *sock_addr = ai_addr; dbgprintf ("\tflags %x\n", ai->ai_flags + 0u); dbgprintf ("\tfamily %x\n", ai->ai_family + 0u); dbgprintf ("\tsocktype %x\n", ai->ai_socktype + 0u); dbgprintf ("\tprotocol %x\n", ai->ai_protocol + 0u); dbgprintf ("\taddrlen %lu: ", (unsigned long) ai->ai_addrlen); dbgprintf ("\tFound %s\n", inet_ntop (ai->ai_family, &sock_addr->sin_addr, buf, sizeof (buf) - 1)); if (ai->ai_canonname) dbgprintf ("\tFound %s...\n", ai->ai_canonname); { char ipbuf[BUFSIZ]; char portbuf[BUFSIZ]; res = getnameinfo (ai->ai_addr, ai->ai_addrlen, ipbuf, sizeof (ipbuf) - 1, portbuf, sizeof (portbuf) - 1, NI_NUMERICHOST|NI_NUMERICSERV); dbgprintf ("\t\tgetnameinfo %d: %s\n", res, gai_strerror (res)); if (res == 0) { dbgprintf ("\t\tip %s\n", ipbuf); dbgprintf ("\t\tport %s\n", portbuf); } } } freeaddrinfo (ai0); return 0; } #define HOST1 "www.gnu.org" #define SERV1 "http" #define HOST2 "www.ibm.com" #define SERV2 "https" #define HOST3 "microsoft.com" #define SERV3 "http" #define HOST4 "google.org" #define SERV4 "ldap" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); return simple (HOST1, SERV1) + simple (HOST2, SERV2) + simple (HOST3, SERV3) + simple (HOST4, SERV4); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getcwd-lgpl.c����������������������������������������������������0000664�0000000�0000000�00000005106�14110572173�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getcwd() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (getcwd, char *, (char *, size_t)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char **argv) { char *pwd1; char *pwd2; /* If the user provides an argument, attempt to chdir there first. */ if (1 < argc) { if (chdir (argv[1]) == 0) printf ("changed to directory %s\n", argv[1]); } pwd1 = getcwd (NULL, 0); ASSERT (pwd1 && *pwd1); if (1 < argc) printf ("cwd=%s\n", pwd1); /* Make sure the result is usable. */ ASSERT (chdir (pwd1) == 0); ASSERT (chdir (".//./.") == 0); /* Make sure that result is normalized. */ pwd2 = getcwd (NULL, 0); ASSERT (pwd2); ASSERT (strcmp (pwd1, pwd2) == 0); free (pwd2); { size_t len = strlen (pwd1); ssize_t i = len - 10; if (i < 1) i = 1; pwd2 = getcwd (NULL, len + 1); ASSERT (pwd2); free (pwd2); pwd2 = malloc (len + 2); for ( ; i <= len; i++) { char *tmp; errno = 0; ASSERT (getcwd (pwd2, i) == NULL); ASSERT (errno == ERANGE); /* Allow either glibc or BSD behavior, since POSIX allows both. */ errno = 0; tmp = getcwd (NULL, i); if (tmp) { ASSERT (strcmp (pwd1, tmp) == 0); free (tmp); } else { ASSERT (errno == ERANGE); } } ASSERT (getcwd (pwd2, len + 1) == pwd2); pwd2[len] = '/'; pwd2[len + 1] = '\0'; } ASSERT (strstr (pwd2, "/./") == NULL); ASSERT (strstr (pwd2, "/../") == NULL); ASSERT (strstr (pwd2 + 1 + (pwd2[1] == '/'), "//") == NULL); /* Validate a POSIX requirement on size. */ errno = 0; ASSERT (getcwd(pwd2, 0) == NULL); ASSERT (errno == EINVAL); free (pwd1); free (pwd2); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getcwd.c���������������������������������������������������������0000664�0000000�0000000�00000016413�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getcwd() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "pathmax.h" #include "macros.h" #if !(HAVE_GETPAGESIZE || defined getpagesize) # define getpagesize() 0 #endif /* This size is chosen to be larger than PATH_MAX (4k), yet smaller than the 16kB pagesize on ia64 linux. Those conditions make the code below trigger a bug in glibc's getcwd implementation before 2.4.90-10. */ #define TARGET_LEN (5 * 1024) #if defined HAVE_OPENAT || (defined GNULIB_OPENAT && defined HAVE_FDOPENDIR) # define HAVE_OPENAT_SUPPORT 1 #else # define HAVE_OPENAT_SUPPORT 0 #endif /* Keep this test in sync with m4/getcwd-abort-bug.m4. */ static int test_abort_bug (void) { char *cwd; size_t initial_cwd_len; int fail = 0; /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ #ifdef PATH_MAX int bug_possible = PATH_MAX < getpagesize (); #else int bug_possible = 0; #endif if (! bug_possible) return 0; cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); if (HAVE_OPENAT_SUPPORT) { static char const dir_name[] = "confdir-14B---"; size_t desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / sizeof dir_name); size_t d; for (d = 0; d < desired_depth; d++) { if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0) { if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT)) fail = 3; /* Unable to construct deep hierarchy. */ break; } } /* If libc has the bug in question, this invocation of getcwd results in a failed assertion. */ cwd = getcwd (NULL, 0); if (cwd == NULL) fail = 4; /* getcwd didn't assert, but it failed for a long name where the answer could have been learned. */ free (cwd); /* Call rmdir first, in case the above chdir failed. */ rmdir (dir_name); while (0 < d--) { if (chdir ("..") < 0) { fail = 5; break; } rmdir (dir_name); } } return fail; } /* The length of this name must be 8. */ #define DIR_NAME "confdir3" #define DIR_NAME_LEN 8 #define DIR_NAME_SIZE (DIR_NAME_LEN + 1) /* The length of "../". */ #define DOTDOTSLASH_LEN 3 /* Leftover bytes in the buffer, to work around library or OS bugs. */ #define BUF_SLOP 20 /* Keep this test in sync with m4/getcwd-path-max.m4. */ static int test_long_name (void) { #ifndef PATH_MAX /* The Hurd doesn't define this, so getcwd can't exhibit the bug -- at least not on a local file system. And if we were to start worrying about remote file systems, we'd have to enable the wrapper function all of the time, just to be safe. That's not worth the cost. */ return 0; #elif ((INT_MAX / (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) \ - DIR_NAME_SIZE - BUF_SLOP) \ <= PATH_MAX) /* FIXME: Assuming there's a system for which this is true, this should be done in a compile test. */ return 0; #else char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) + DIR_NAME_SIZE + BUF_SLOP]; char *cwd = getcwd (buf, PATH_MAX); size_t initial_cwd_len; size_t cwd_len; int fail = 0; size_t n_chdirs = 0; if (cwd == NULL) return 1; cwd_len = initial_cwd_len = strlen (cwd); while (1) { # ifdef HAVE_GETCWD_SHORTER /* On OS/X <= 10.9 for example, we're restricted to shorter paths as lstat() doesn't support more than PATH_MAX. */ size_t dotdot_max = PATH_MAX * 2; # else size_t dotdot_max = PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN); # endif char *c = NULL; cwd_len += DIR_NAME_SIZE; /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't be too long for getcwd if it can't even be created. On Linux with the 9p file system, mkdir fails with error EINVAL when cwd_len gets too long; ignore this failure because the getcwd() system call produces good results whereas the gnulib substitute calls getdents64 which fails with error EPROTO. For other errors, be pessimistic and consider that as a failure, too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT)) #ifdef __linux__ if (! (errno == EINVAL)) #endif fail = 2; break; } if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE) { c = getcwd (buf, PATH_MAX); if (!c && errno == ENOENT) { fail = 3; break; } if (c) { fail = 4; break; } if (! (errno == ERANGE || errno == ENAMETOOLONG)) { fail = 5; break; } } if (dotdot_max <= cwd_len - initial_cwd_len) { if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len) break; c = getcwd (buf, cwd_len + 1); if (!c) { if (! (errno == ERANGE || errno == ENOENT || errno == ENAMETOOLONG)) { fail = 6; break; } if (HAVE_OPENAT_SUPPORT || errno == ERANGE || errno == ENOENT) { fail = 7; break; } } } if (c && strlen (c) != cwd_len) { fail = 8; break; } ++n_chdirs; } /* Leaving behind such a deep directory is not polite. So clean up here, right away, even though the driving shell script would also clean up. */ { size_t i; /* Try rmdir first, in case the chdir failed. */ rmdir (DIR_NAME); for (i = 0; i <= n_chdirs; i++) { if (chdir ("..") < 0) break; if (rmdir (DIR_NAME) != 0) break; } } return fail; #endif } int main (int argc, char **argv) { return test_abort_bug () * 10 + test_long_name (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getcwd.sh��������������������������������������������������������0000775�0000000�0000000�00000000125�14110572173�0020230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . ${CHECKER} test-getcwd Exit $? �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getdelim.c�������������������������������������������������������0000664�0000000�0000000�00000004655�14110572173�0020366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdelim() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (getdelim, ssize_t, (char **, size_t *, int, FILE *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getdelim.txt", "wb"); if (!f || fwrite ("anAnbcnd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } f = fopen ("test-getdelim.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "an") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "An") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer. */ line = malloc (1); len = 1; result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (strcmp (line, "bcn") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getdelim (&line, &len, 'n', f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getdelim.txt"); return 0; } �����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getdomainname.c��������������������������������������������������0000664�0000000�0000000�00000003154�14110572173�0021375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This 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> /* Get getdomainname() declaration. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getdomainname, int, (char *, size_t)); #include <stdio.h> #include <string.h> #include <errno.h> #define YPMAXDOMAIN 64 #define NODOMAINNAME "magic-gnulib-test-string" int main (int argc, _GL_UNUSED char *argv[]) { char buf[YPMAXDOMAIN]; int rc; if (strlen (NODOMAINNAME) >= YPMAXDOMAIN) { printf ("YPMAXDOMAIN impossibly small?! %d\n", YPMAXDOMAIN); return 2; } strcpy (buf, NODOMAINNAME); rc = getdomainname (buf, sizeof (buf)); if (rc != 0) { printf ("getdomainname failed, rc %d errno %d\n", rc, errno); return 1; } if (strcmp (buf, NODOMAINNAME) == 0) { printf ("getdomainname left buffer untouched.\n"); return 1; } if (argc > 1) printf ("domainname: %s\n", buf); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getdtablesize.c��������������������������������������������������0000664�0000000�0000000�00000002151�14110572173�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdtablesize() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (getdtablesize, int, (void)); #include "macros.h" int main (int argc, char *argv[]) { ASSERT (getdtablesize () >= 3); ASSERT (dup2 (0, getdtablesize() - 1) == getdtablesize () - 1); ASSERT (dup2 (0, getdtablesize()) == -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getentropy.c�����������������������������������������������������0000664�0000000�0000000�00000003033�14110572173�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the getentropy function. Copyright 2020-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <unistd.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (getentropy, int, (void *, size_t)); #include "macros.h" char empty_buf[256]; char buf[256]; int main (int argc, char *argv[]) { /* If this test fails, there's something wrong with the setup anyway. */ ASSERT (getentropy (buf, sizeof buf) == 0); /* This test fails with probability 2**-2048. (Run it again if so. :-) */ ASSERT (memcmp (buf, empty_buf, sizeof buf) != 0); /* It is very unlikely that two calls to getentropy produce the same results. */ { char buf1[8]; char buf2[8]; ASSERT (getentropy (buf1, sizeof (buf1)) == 0); ASSERT (getentropy (buf2, sizeof (buf2)) == 0); ASSERT (memcmp (buf1, buf2, sizeof (buf1)) != 0); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getgroups.c������������������������������������������������������0000664�0000000�0000000�00000005217�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of getgroups. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getgroups, int, (int, gid_t[])); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. GCC >= 10 with glibc >= 2.32 would otherwise trigger warnings, even without any -W options, because getgroups() is declared with __attribute__ ((__access__ (__write_only__, 2, 1))) */ #if __GNUC__ >= 7 # pragma GCC diagnostic ignored "-Wstringop-overflow" #endif int main (int argc, _GL_UNUSED char **argv) { int result; gid_t *groups; errno = 0; result = getgroups (0, NULL); if (result == -1 && errno == ENOSYS) { fputs ("skipping test: no support for groups\n", stderr); return 77; } ASSERT (0 <= result); ASSERT (result + 1 < SIZE_MAX / sizeof *groups); groups = malloc ((result + 1) * sizeof *groups); ASSERT (groups); groups[result] = -1; /* Check for EINVAL handling. Not all processes have supplemental groups, and getgroups does not have to return the effective gid, so a result of 0 is reasonable. Also, we can't test for EINVAL if result is 1, because of how getgroups treats 0. */ if (1 < result) { errno = 0; ASSERT (getgroups (result - 1, groups) == -1); ASSERT (errno == EINVAL); } ASSERT (getgroups (result, groups) == result); ASSERT (getgroups (result + 1, groups) == result); ASSERT (groups[result] == -1); errno = 0; ASSERT (getgroups (-1, NULL) == -1); ASSERT (errno == EINVAL); /* The automated unit test, with no arguments, ends here. However, for debugging purposes, you can pass a command-line argument to list the returned groups. */ if (1 < argc) { int i; for (i = 0; i < result; i++) printf ("%d\n", (int) groups[i]); } free (groups); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-gethostname.c����������������������������������������������������0000664�0000000�0000000�00000003202�14110572173�0021075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This 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> /* Get gethostname() declaration. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (gethostname, int, (char *, size_t)); /* Get HOST_NAME_MAX definition. */ #include <limits.h> #include <stdio.h> #include <string.h> #include <errno.h> #define NOHOSTNAME "magic-gnulib-test-string" int main (int argc, _GL_UNUSED char *argv[]) { char buf[HOST_NAME_MAX]; int rc; if (strlen (NOHOSTNAME) >= HOST_NAME_MAX) { printf ("HOST_NAME_MAX impossibly small?! %d\n", HOST_NAME_MAX); return 2; } strcpy (buf, NOHOSTNAME); rc = gethostname (buf, sizeof (buf)); if (rc != 0) { printf ("gethostname failed, rc %d errno %d\n", rc, errno); return 1; } if (strcmp (buf, NOHOSTNAME) == 0) { printf ("gethostname left buffer untouched.\n"); return 1; } if (argc > 1) printf ("hostname: %s\n", buf); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getline.c��������������������������������������������������������0000664�0000000�0000000�00000004632�14110572173�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getline() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (getline, ssize_t, (char **, size_t *, FILE *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getline.txt", "wb"); if (!f || fwrite ("a\nA\nbc\nd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getline.txt"); return 1; } f = fopen ("test-getline.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getline.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "a\n") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "A\n") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer, must not leak. */ len = 1; line = malloc (len); result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (strcmp (line, "bc\n") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getline (&line, &len, f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getline.txt"); return 0; } ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getloadavg.c�����������������������������������������������������0000664�0000000�0000000�00000004426�14110572173�0020705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting load average. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 (getloadavg, int, (double [], int)); #include <errno.h> #include <stdio.h> #include <unistd.h> static void check_avg (int minutes, double avg, int printit) { if (printit) printf ("%d-minute: %f ", minutes, avg); else { /* Plausibility checks. */ if (avg < 0.01) printf ("suspiciously low %d-minute average: %f\n", minutes, avg); if (avg > 1000000) printf ("suspiciously high %d-minute average: %f\n", minutes, avg); } if (avg < 0 || avg != avg) exit (minutes); } /* This program can also be used as a manual test, by invoking it with an argument; it then prints the load average. If the argument is nonzero, the manual test repeats forever, sleeping for the stated interval between each iteration. */ int main (int argc, char **argv) { int naptime = 0; if (argc > 1) naptime = atoi (argv[1]); while (1) { double avg[3]; int loads = getloadavg (avg, 3); if (loads == -1) { if (! (errno == ENOSYS || errno == ENOTSUP || errno == ENOENT)) return 1; perror ("Skipping test; load average not supported"); return 77; } if (loads > 0) check_avg (1, avg[0], argc > 1); if (loads > 1) check_avg (5, avg[1], argc > 1); if (loads > 2) check_avg (15, avg[2], argc > 1); if (loads > 0 && argc > 1) putchar ('\n'); if (naptime == 0) break; sleep (naptime); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getlogin.c�������������������������������������������������������0000664�0000000�0000000�00000002426�14110572173�0020376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting user name. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 and Paul Eggert. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getlogin, char *, (void)); #include "test-getlogin.h" int main (void) { /* Test value. */ char *buf = getlogin (); int err = buf ? 0 : errno; #if defined __sun if (buf == NULL && err == 0) { /* This can happen on Solaris 11 OpenIndiana in the MATE desktop. */ fprintf (stderr, "Skipping test: no entry in /var/adm/utmpx.\n"); exit (77); } #endif test_getlogin_result (buf, err); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getlogin.h�������������������������������������������������������0000664�0000000�0000000�00000004770�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting user name. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 and Paul Eggert. */ #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if !(defined _WIN32 && !defined __CYGWIN__) # include <pwd.h> #endif #include <sys/stat.h> #include <sys/types.h> #include "macros.h" static void test_getlogin_result (const char *buf, int err) { if (err != 0) { if (err == ENOENT) { /* This can happen on GNU/Linux. */ fprintf (stderr, "Skipping test: no entry in utmp file.\n"); exit (77); } /* It fails when stdin is not connected to a tty. */ ASSERT (err == ENOTTY || err == EINVAL /* seen on Linux/SPARC */ || err == ENXIO ); #if !defined __hpux /* On HP-UX 11.11 it fails anyway. */ ASSERT (! isatty (0)); #endif fprintf (stderr, "Skipping test: stdin is not a tty.\n"); exit (77); } /* Compare against the value from the environment. */ #if !(defined _WIN32 && !defined __CYGWIN__) /* Unix platform */ { struct stat stat_buf; struct passwd *pwd; if (!isatty (STDIN_FILENO)) { fprintf (stderr, "Skipping test: stdin is not a tty.\n"); exit (77); } ASSERT (fstat (STDIN_FILENO, &stat_buf) == 0); pwd = getpwnam (buf); if (! pwd) { fprintf (stderr, "Skipping test: %s: no such user\n", buf); exit (77); } ASSERT (pwd->pw_uid == stat_buf.st_uid); } #endif #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows platform. Note: This test would fail on Cygwin in an ssh session, because sshd sets USERNAME=SYSTEM. */ { const char *name = getenv ("USERNAME"); if (name != NULL && name[0] != '\0') ASSERT (strcmp (buf, name) == 0); } #endif } ��������gnulib-20210822~d383792/tests/test-getlogin_r.c�����������������������������������������������������0000664�0000000�0000000�00000003456�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting user name. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 and Paul Eggert. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getlogin_r, int, (char *, size_t)); #include "test-getlogin.h" int main (void) { /* Test value. */ /* Test with a large enough buffer. */ char buf[1024]; int err = getlogin_r (buf, sizeof buf); #if defined __sun if (err == EINVAL) { /* This can happen on Solaris 11 OpenIndiana in the MATE desktop. */ fprintf (stderr, "Skipping test: no entry in /var/adm/utmpx.\n"); exit (77); } #endif test_getlogin_result (buf, err); /* Test with a small buffer. */ { char smallbuf[1024]; size_t n = strlen (buf); size_t i; for (i = 0; i <= n; i++) { err = getlogin_r (smallbuf, i); if (i == 0) ASSERT (err == ERANGE || err == EINVAL); else ASSERT (err == ERANGE); } } /* Test with a huge buffer. */ { static char hugebuf[70000]; ASSERT (getlogin_r (hugebuf, sizeof (hugebuf)) == 0); ASSERT (strcmp (hugebuf, buf) == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getndelim2.c�����������������������������������������������������0000664�0000000�0000000�00000010362�14110572173�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getndelim2() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include "getndelim2.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { FILE *f; char *line = NULL; size_t len = 0; ssize_t result; /* Create test file. */ f = fopen ("test-getndelim2.txt", "wb+"); if (!f || fwrite ("a\nbc\nd\0f", 1, 8, f) != 8) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getndelim2.txt"); return 1; } rewind (f); /* Unlimited lines. */ /* Test initial allocation, which must include trailing NUL. */ result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\n', f); ASSERT (result == 2); ASSERT (strcmp (line, "a\n") == 0); ASSERT (2 < len); /* Test growth of buffer, must not leak. */ free (line); line = malloc (1); len = 0; result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, EOF, '\n', f); ASSERT (result == 3); ASSERT (strcmp (line, "bc\n") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', EOF, f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', EOF, f); ASSERT (result == -1); /* Using offset and nmax. */ /* Limit growth to four bytes, including NUL, but parse to next 'd'. */ free (line); rewind (f); line = malloc (8); memset (line, 'e', 8); len = 8; result = getndelim2 (&line, &len, 6, 10, 'd', 'd', f); ASSERT (result == 3); ASSERT (10 == len); ASSERT (strcmp (line, "eeeeeea\nb") == 0); /* No change if offset larger than limit. */ result = getndelim2 (&line, &len, len, 1, EOF, EOF, f); ASSERT (result == -1); ASSERT (10 == len); ASSERT (strcmp (line, "eeeeeea\nb") == 0); /* Consume to end of file, including embedded NUL. */ result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, EOF, EOF, f); ASSERT (result == 2); ASSERT (10 == len); ASSERT (memcmp (line, "\0f\0eeea\nb", 10) == 0); result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f); ASSERT (result == -1); /* Larger file size. */ rewind (f); { int i; for (i = 0; i < 16; i++) fprintf (f, "%500x%c", i + 0u, i % 2 ? '\n' : '\r'); } rewind (f); { char buffer[502]; result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f); ASSERT (result == 501); ASSERT (501 < len); memset (buffer, ' ', 499); buffer[499] = '0'; buffer[500] = '\r'; buffer[501] = '\0'; ASSERT (strcmp (buffer, line) == 0); result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f); ASSERT (result == 501); ASSERT (501 < len); buffer[499] = '1'; buffer[500] = '\n'; ASSERT (strcmp (buffer, line) == 0); result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, 'g', 'f', f); ASSERT (result == 501 * 14 - 1); ASSERT (501 * 14 <= len); buffer[499] = 'f'; buffer[500] = '\0'; ASSERT (strcmp (buffer, line + 501 * 13) == 0); result = getndelim2 (&line, &len, 501 * 14 - 1, GETNLINE_NO_LIMIT, EOF, EOF, f); ASSERT (result == 1); buffer[500] = '\n'; ASSERT (strcmp (buffer, line + 501 * 13) == 0); result = getndelim2 (&line, &len, 501 * 14 - 1, GETNLINE_NO_LIMIT, EOF, EOF, f); buffer[500] = '\0'; ASSERT (strcmp (buffer, line + 501 * 13) == 0); ASSERT (result == -1); } fclose (f); remove ("test-getndelim2.txt"); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getopt-gnu.c�����������������������������������������������������0000664�0000000�0000000�00000003631�14110572173�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in <unistd.h>, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in <getopt.h>, not in <unistd.h>. This is what we are testing here. */ #include <getopt.h> #ifndef __getopt_argv_const # define __getopt_argv_const const #endif #include "signature.h" SIGNATURE_CHECK (getopt_long, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); SIGNATURE_CHECK (getopt_long_only, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); #define TEST_GETOPT_GNU 1 #define TEST_GETOPT_TMP_NAME "test-getopt-gnu.tmp" #include "test-getopt-main.h" �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getopt-main.h����������������������������������������������������0000664�0000000�0000000�00000004114�14110572173�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include "signature.h" SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* This test intentionally remaps 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #include "test-getopt.h" #if TEST_GETOPT_GNU # include "test-getopt_long.h" #endif int main (void) { /* This test validates that stderr is used correctly, so move the original into fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (TEST_GETOPT_TMP_NAME, "w", stderr) == stderr); /* These default values are required by POSIX. */ ASSERT (optind == 1); ASSERT (opterr != 0); setenv ("POSIXLY_CORRECT", "1", 1); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long_posix (); #endif unsetenv ("POSIXLY_CORRECT"); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long (); test_getopt_long_only (); #endif ASSERT (fclose (stderr) == 0); ASSERT (remove (TEST_GETOPT_TMP_NAME) == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getopt-posix.c���������������������������������������������������0000664�0000000�0000000�00000002733�14110572173�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in <unistd.h>, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in <getopt.h>, not in <unistd.h>. Nevertheless the getopt() function should also be found in <unistd.h>. */ #include <unistd.h> #define TEST_GETOPT_GNU 0 #define TEST_GETOPT_TMP_NAME "test-getopt-posix.tmp" #include "test-getopt-main.h" �������������������������������������gnulib-20210822~d383792/tests/test-getopt.h���������������������������������������������������������0000664�0000000�0000000�00000125655�14110572173�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <stdbool.h> /* The glibc/gnulib implementation of getopt supports setting optind = 0, but not all other implementations do. This matters for getopt. But for getopt_long, we require GNU compatibility. */ #if defined __GETOPT_PREFIX || (__GLIBC__ >= 2 && !defined __UCLIBC__) # define OPTIND_MIN 0 #elif HAVE_DECL_OPTRESET # define OPTIND_MIN (optreset = 1) #else # define OPTIND_MIN 1 #endif static void getopt_loop (int argc, const char **argv, const char *options, int *a_seen, int *b_seen, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized, bool *message_issued) { int c; int pos = ftell (stderr); while ((c = getopt (argc, (char **) argv, options)) != -1) { switch (c) { case 'a': (*a_seen)++; break; case 'b': (*b_seen)++; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } *message_issued = pos < ftell (stderr); } static void test_getopt (void) { int start; bool posixly = !!getenv ("POSIXLY_CORRECT"); /* See comment in getopt.c: glibc gets a LSB-compliant getopt. Standalone applications get a POSIX-compliant getopt. */ #if defined __GETOPT_PREFIX || !(__GLIBC__ >= 2 || defined __MINGW32__) /* Using getopt from gnulib or from a non-glibc system. */ posixly = true; #endif /* Test processing of boolean options. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } /* Test processing of options with arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } #if GNULIB_TEST_GETOPT_GNU /* Test processing of options with optional arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that invalid options are recognized; and that both opterr and leading ':' can silence output. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } /* Check for missing argument behavior. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } /* Check that by default, non-options arguments are moved to the end. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* Check that the '-' flag causes non-options to be returned in order. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); ASSERT (!output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (!output); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:-", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); ASSERT (output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that the '+' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:+", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* If GNU extensions are supported, require compliance with POSIX interpretation on leading '+' behavior. http://austingroupbugs.net/view.php?id=191 */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 3); ASSERT (!output); } /* Check that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 Technically, POSIX says the presence of ';' in the opt-string gives unspecified behavior, so we only test this when GNU compliance is desired. */ for (start = OPTIND_MIN; start <= 1; start++) { int argc = 0; const char *argv[10]; int pos = ftell (stderr); argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = start; opterr = 1; ASSERT (getopt (argc, (char **) argv, "W;") == 'W'); ASSERT (ftell (stderr) == pos); ASSERT (optind == 2); } #endif /* GNULIB_TEST_GETOPT_GNU */ } �����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getopt_long.h����������������������������������������������������0000664�0000000�0000000�00000175506�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static int a_seen; static int b_seen; static int q_seen; static const struct option long_options_required[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", required_argument, NULL, 'p' }, { "quetsche", required_argument, &q_seen, 1 }, { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; static const struct option long_options_optional[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", optional_argument, NULL, 'p' }, { "quetsche", optional_argument, &q_seen, 1 }, { NULL, 0, NULL, 0 } }; static void getopt_long_loop (int argc, const char **argv, const char *options, const struct option *long_options, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized) { int option_index = -1; int c; opterr = 0; q_seen = 0; while ((c = getopt_long (argc, (char **) argv, options, long_options, &option_index)) != -1) { switch (c) { case 0: /* An option with a non-NULL flag pointer was processed. */ if (q_seen) *q_value = optarg; break; case 'a': a_seen++; break; case 'b': b_seen = 1; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } } /* Reduce casting, so we can use string literals elsewhere. getopt_long takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long (void) { int start; /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtr"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtre"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtrem"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremely"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } /* Check that -W handles unknown options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 'W'); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-Wunknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "unknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } /* Test that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", NULL, &option_index); ASSERT (c == 'W'); ASSERT (optind == 2); } /* Test processing of boolean short options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of boolean long options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of boolean long options via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abW;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "beta"; argv[argc++] = "-W"; argv[argc++] = "alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "aW;b", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of short options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "--q"; argv[argc++] = "baz"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:W;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:W;q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-Wq"; argv[argc++] = "baz"; argv[argc++] = "-W"; argv[argc++] = "p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 6); } /* Test processing of short options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); /* ASSERT (p_value == NULL); */ ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that invalid options are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); } /* Check that unexpected arguments are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--a="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'a'); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--b="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); /* When flag is non-zero, glibc sets optopt anyway, but BSD leaves optopt unchanged. */ ASSERT (unrecognized == 1 || unrecognized == 0); ASSERT (optind == 4); } /* Check that by default, non-options arguments are moved to the end. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Check that the '-' flag causes non-options to be returned in order. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:-", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that the '+' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:+", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Test behavior of getopt_long when POSIXLY_CORRECT is set in the environment. Options with optional arguments should not change behavior just because of an environment variable. https://lists.gnu.org/r/bug-m4/2006-09/msg00028.html */ static void test_getopt_long_posix (void) { int start; /* Check that POSIXLY_CORRECT stops parsing the same as leading '+'. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that POSIXLY_CORRECT doesn't change optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } /* Check that leading - still sees options after non-options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "billy"; argv[argc++] = "-b"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 1); ASSERT (strcmp (non_options[0], "billy") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Reduce casting, so we can use string literals elsewhere. getopt_long_only takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long_only (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long_only (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long_only (void) { /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'b'); ASSERT (b_seen == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 0); ASSERT (b_seen == 1); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx:", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); ASSERT (optarg == NULL); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtras"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (strcmp (optarg, "tras") == 0); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getpass.c��������������������������������������������������������0000664�0000000�0000000�00000001722�14110572173�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getpass implementation. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 <stdio.h> #include "getpass.h" int main (int argc, char *argv[]) { char *pass = getpass ("Enter password: "); printf ("The password is '%s'\n", pass); return 0; } ����������������������������������������������gnulib-20210822~d383792/tests/test-getpeername.c����������������������������������������������������0000664�0000000�0000000�00000002767�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getpeername() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (getpeername, int, (int, struct sockaddr *, socklen_t *)); #include <errno.h> #include <netinet/in.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (getpeername (-1, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (getpeername (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } ���������gnulib-20210822~d383792/tests/test-getprogname.c����������������������������������������������������0000664�0000000�0000000�00000004007�14110572173�0021073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the gnulib getprogname module. Copyright (C) 2016-2021 Free Software Foundation, Inc. This 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 "getprogname.h" #include <string.h> #include <assert.h> #ifdef __hpux # define STREQ(a, b) (strncmp (a, b, 14) == 0) #else # define STREQ(a, b) (strcmp (a, b) == 0) #endif int main (void) { char const *p = getprogname (); /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "lt-" prefix here. */ if (strncmp (p, "lt-", 3) == 0) p += 3; /* Note: You can make this test fail a) by running it on a case-insensitive file system (such as on Windows, Cygwin, or on Mac OS X with a case-insensitive HFS+ file system), with an invocation that contains upper case characters, e.g. test-GETPROGNAME, b) by hardlinking or symlinking it to a different name (e.g. test-foo) and invoking it through that name. That's not the intended use. The Makefile always invokes it as 'test-getprogname${EXEEXT}'. */ #if defined __CYGWIN__ /* The Cygwin getprogname() function strips the ".exe" suffix. */ assert (STREQ (p, "test-getprogname")); #else assert (STREQ (p, "test-getprogname" EXEEXT)); #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getrandom.c������������������������������������������������������0000664�0000000�0000000�00000005106�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting random bytes. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ #include <config.h> #include <sys/random.h> #include "signature.h" SIGNATURE_CHECK (getrandom, ssize_t, (void *, size_t, unsigned int)); #include <errno.h> #include <string.h> #include "macros.h" int main (void) { char buf1[8]; char buf2[8]; char large_buf[100000]; ssize_t ret; /* Check that different calls produce different results (with a high probability). */ ret = getrandom (buf1, sizeof (buf1), 0); if (ret < 0) ASSERT (errno == ENOSYS); else { ret = getrandom (buf2, sizeof (buf2), 0); if (ret < 0) ASSERT (errno == ENOSYS); else { /* It is very unlikely that two calls to getrandom produce the same results. */ ASSERT (memcmp (buf1, buf2, sizeof (buf1)) != 0); } } /* Likewise with the "truly random" number generator. */ ret = getrandom (buf1, sizeof (buf1), GRND_RANDOM); if (ret < 0) ASSERT (errno == ENOSYS); else { ret = getrandom (buf2, sizeof (buf2), GRND_RANDOM); if (ret < 0) ASSERT (errno == ENOSYS); else { /* It is very unlikely that two calls to getrandom produce the same results. */ ASSERT (memcmp (buf1, buf2, sizeof (buf1)) != 0); } } /* Check that GRND_NONBLOCK works. */ ret = getrandom (large_buf, sizeof (large_buf), GRND_RANDOM | GRND_NONBLOCK); ASSERT (ret <= (ssize_t) sizeof (large_buf)); /* It is very unlikely that so many truly random bytes were ready. */ if (ret < 0) ASSERT (errno == ENOSYS || errno == EAGAIN || errno == EINVAL /* Solaris */); else ASSERT (ret > 0); if (getrandom (buf1, 1, 0) < 1) if (getrandom (buf1, 1, GRND_RANDOM) < 1) { fputs ("Skipping test: getrandom is ineffective\n", stderr); return 77; } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getrusage.c������������������������������������������������������0000664�0000000�0000000�00000005046�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting resource utilization. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <sys/resource.h> #include "signature.h" SIGNATURE_CHECK (getrusage, int, (int, struct rusage *)); #include <sys/time.h> #include "macros.h" volatile unsigned int counter; int main (void) { struct rusage before; struct rusage after; int ret; ret = getrusage (RUSAGE_SELF, &before); ASSERT (ret == 0); /* Busy-loop for one second. */ { struct timeval t0; ASSERT (gettimeofday (&t0, NULL) == 0); for (;;) { struct timeval t; int i; for (i = 0; i < 1000000; i++) counter++; ASSERT (gettimeofday (&t, NULL) == 0); if (t.tv_sec - t0.tv_sec > 1 || (t.tv_sec - t0.tv_sec == 1 && t.tv_usec >= t0.tv_usec)) break; } } ret = getrusage (RUSAGE_SELF, &after); ASSERT (ret == 0); ASSERT (after.ru_utime.tv_sec >= before.ru_utime.tv_sec); ASSERT (after.ru_stime.tv_sec >= before.ru_stime.tv_sec); { /* Compute time spent during busy-looping (in usec). */ unsigned int spent_utime = (after.ru_utime.tv_sec > before.ru_utime.tv_sec ? (after.ru_utime.tv_sec - before.ru_utime.tv_sec - 1) * 1000000U + after.ru_utime.tv_usec + (1000000U - before.ru_utime.tv_usec) : after.ru_utime.tv_usec - before.ru_utime.tv_usec); unsigned int spent_stime = (after.ru_stime.tv_sec > before.ru_stime.tv_sec ? (after.ru_stime.tv_sec - before.ru_stime.tv_sec - 1) * 1000000U + after.ru_stime.tv_usec + (1000000U - before.ru_stime.tv_usec) : after.ru_stime.tv_usec - before.ru_stime.tv_usec); ASSERT (spent_utime + spent_stime <= 2 * 1000000U); /* Assume that the load during this busy-looping was less than 100. */ ASSERT (spent_utime + spent_stime > 10000U); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getsockname.c����������������������������������������������������0000664�0000000�0000000�00000004737�14110572173�0021075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getsockname() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (getsockname, int, (int, struct sockaddr *, socklen_t *)); #include <stdio.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <errno.h> #include "sockets.h" #include "macros.h" static int open_server_socket (void) { int s, x; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "0.0.0.0", &ia.sin_addr); /* Port 0 means that the system should assign a port. */ ia.sin_port = htons (0); if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) { perror ("bind"); exit (77); } if (listen (s, 1) < 0) { perror ("listen"); exit (77); } return s; } int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (getsockname (-1, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (getsockname (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } /* Test behaviour for a server socket. */ { int s = open_server_socket (); struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); memset (&addr, 0, sizeof (addr)); ASSERT (getsockname (s, (struct sockaddr *) &addr, &addrlen) == 0); ASSERT (addr.sin_family == AF_INET); ASSERT (ntohs (addr.sin_port) != 0); } return 0; } ���������������������������������gnulib-20210822~d383792/tests/test-getsockopt.c�����������������������������������������������������0000664�0000000�0000000�00000002756�14110572173�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getsockopt() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (getsockopt, int, (int, int, int, void *, socklen_t *)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { int value; socklen_t value_len = sizeof (value); errno = 0; ASSERT (getsockopt (-1, SOL_SOCKET, SO_REUSEADDR, &value, &value_len) == -1); ASSERT (errno == EBADF); } { int value; socklen_t value_len = sizeof (value); close (99); errno = 0; ASSERT (getsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, &value_len) == -1); ASSERT (errno == EBADF); } return 0; } ������������������gnulib-20210822~d383792/tests/test-gettimeofday.c���������������������������������������������������0000664�0000000�0000000�00000002451�14110572173�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. * Written by Jim Meyering. * * This 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 <sys/time.h> #include "signature.h" SIGNATURE_CHECK (gettimeofday, int, (struct timeval *, GETTIMEOFDAY_TIMEZONE *)); #include <time.h> #include <stdio.h> #include <string.h> int main (void) { time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) { fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); return 1; } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-getumask.c�������������������������������������������������������0000664�0000000�0000000�00000002327�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of retrieving the umask of the process. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (getumask, mode_t, (void)); #include "macros.h" int main (void) { int mask; mask = getumask (); ASSERT (mask >= 0); #if !ASSUME_UMASK_CONSTANT /* These tests fail if the umask is required to not change. */ umask (002); mask = getumask (); ASSERT (mask == 002); umask (077); mask = getumask (); ASSERT (mask == 077); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-glob-h-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002367�14110572173�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glob/globfree functions in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <glob.h> #include "signature.h" #if GNULIB_TEST_GLOB SIGNATURE_CHECK (GNULIB_NAMESPACE::glob, int, (const char *, int, _gl_glob_errfunc_fn, glob_t *)); #endif #if GNULIB_TEST_GLOB SIGNATURE_CHECK (GNULIB_NAMESPACE::globfree, void, (glob_t *)); #endif #if GNULIB_TEST_GLOB SIGNATURE_CHECK (GNULIB_NAMESPACE::glob_pattern_p, int, (const char *, int)); #endif int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-glob-h.c���������������������������������������������������������0000664�0000000�0000000�00000002530�14110572173�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <glob.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include <glob.h> #include "macros.h" /* Check that size_t is defined. */ size_t a; /* Check that the various GLOB_* macros are defined. */ int flags[] = { GLOB_APPEND, GLOB_DOOFFS, GLOB_ERR, GLOB_MARK, GLOB_NOCHECK, GLOB_NOESCAPE, GLOB_NOSORT }; int ret[] = { GLOB_ABORTED, GLOB_NOMATCH, GLOB_NOSPACE }; int main () { glob_t g; /* Make sure glob_t struct members exists. */ ASSERT (sizeof (g.gl_pathc)); ASSERT (sizeof (g.gl_pathv)); ASSERT (sizeof (g.gl_offs)); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-glob.c�����������������������������������������������������������0000664�0000000�0000000�00000005242�14110572173�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glob/globfree functions. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include <glob.h> #include "signature.h" SIGNATURE_CHECK (glob, int, (char const *, int, int (*) (char const *, int), glob_t *)); SIGNATURE_CHECK (globfree, void, (glob_t *)); #include <errno.h> #include <string.h> #include <unistd.h> #include "macros.h" #define BASE "test-glob.t" #define GL_NO_SUCH_FILE "/gnulib-magic-does-not-exist" int main () { int res; glob_t g; res = glob (".", 0, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 1); globfree (&g); res = glob (".", GLOB_NOSORT, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 1); globfree (&g); res = glob (".", GLOB_MARK, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 1); res = glob (".", GLOB_APPEND, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 2); globfree (&g); res = glob (".", GLOB_NOESCAPE, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 1); globfree (&g); res = glob ("./*", 0, NULL, &g); ASSERT (res == 0 && g.gl_pathc >= 1); globfree (&g); res = glob (GL_NO_SUCH_FILE, 0, NULL, &g); ASSERT (res == GLOB_NOMATCH); res = glob (GL_NO_SUCH_FILE, GLOB_NOCHECK, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 1); ASSERT (strcmp (g.gl_pathv[0], GL_NO_SUCH_FILE) == 0); globfree (&g); if ((symlink (GL_NO_SUCH_FILE, BASE "globlink1") == 0 || errno == EEXIST) && (symlink (".", BASE "globlink2") == 0 || errno == EEXIST)) { res = glob (BASE "globlink[12]", 0, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 2); ASSERT (strcmp (g.gl_pathv[0], BASE "globlink1") == 0); ASSERT (strcmp (g.gl_pathv[1], BASE "globlink2") == 0); globfree (&g); res = glob (BASE "globlink[12]", GLOB_MARK, NULL, &g); ASSERT (res == 0 && g.gl_pathc == 2); ASSERT (strcmp (g.gl_pathv[0], BASE "globlink1") == 0); ASSERT (strcmp (g.gl_pathv[1], BASE "globlink2/") == 0); globfree (&g); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-grantpt.c��������������������������������������������������������0000664�0000000�0000000�00000003254�14110572173�0020245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test acquiring ownership of the slave side of a pseudo-terminal. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 (grantpt, int, (int)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. These calls don't fail on OpenBSD (with gnulib's replacement) and on musl libc. */ { int ret; errno = 0; ret = grantpt (-1); if (ret != 0) { ASSERT (ret == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ || errno == 0 /* seen on Solaris 8 */ ); } } { int ret; close (99); errno = 0; ret = grantpt (99); if (ret != 0) { ASSERT (ret == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ || errno == 0 /* seen on Solaris 8 */ ); } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hamt.c�����������������������������������������������������������0000664�0000000�0000000�00000021371�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of persistent hash array mapped trie implementation. Copyright (C) 2021 Free Software Foundation, Inc. This 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 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>, 2021. */ #include <config.h> #include "hamt.h" #include "macros.h" #include "xalloc.h" typedef struct { Hamt_entry entry; int val; } Element; static int entry_value (const void *elt) { return ((Element *) elt)->val; } static size_t hash_element (const void *elt) { return entry_value (elt) & ~3; /* We drop the last bits so that we can test hash collisions. */ } static bool compare_element (const void *elt1, const void *elt2) { return entry_value (elt1) == entry_value (elt2); } static void free_element (Hamt_entry *elt) { free (elt); } static Hamt_entry * make_element (int n) { Element *elt = XMALLOC (Element); elt->val = n; return hamt_element (&elt->entry); } static Hamt * test_hamt_create (void) { return hamt_create (hash_element, compare_element, free_element); } static int sum = 0; static int flag; static bool proc (Hamt_entry *elt, void *data) { if (data == &flag) { sum += entry_value (elt); return true; } if (sum > 0) { sum = 0; return true; } return false; } static void test_general (void) { Hamt *hamt = test_hamt_create (); Hamt_entry *x5 = make_element (5); Hamt_entry *p = x5; Hamt *hamt1 = hamt_insert (hamt, &p); ASSERT (hamt1 != hamt); ASSERT (hamt_lookup (hamt, x5) == NULL); ASSERT (hamt_lookup (hamt1, x5) == x5); hamt_free (hamt); Hamt_entry *y5 = make_element (5); p = y5; Hamt *hamt2 = hamt_insert (hamt1, &p); ASSERT (hamt2 == hamt1); ASSERT (p == x5); ASSERT (hamt_lookup (hamt1, y5) == x5); p = y5; hamt = hamt_replace (hamt1, &p); ASSERT (p == x5); ASSERT (hamt_lookup (hamt, y5) == y5); hamt_free (hamt); y5 = make_element (5); Hamt_entry *z37 = make_element (37); p = z37; hamt2 = hamt_insert (hamt1, &p); ASSERT (hamt2 != hamt1); ASSERT (p == z37); ASSERT (hamt_lookup (hamt1, z37) == NULL); ASSERT (hamt_lookup (hamt2, z37) == z37); hamt_free (hamt1); ASSERT (hamt_lookup (hamt2, x5) == x5); ASSERT (hamt_lookup (hamt2, z37) == z37); ASSERT (hamt_do_while (hamt2, proc, &flag) == 2); ASSERT (sum == 42); ASSERT (hamt_do_while (hamt2, proc, NULL) == 1); ASSERT (sum == 0); p = y5; hamt1 = hamt_remove (hamt2, &p); ASSERT (hamt1 != hamt2); ASSERT (p == x5); ASSERT (hamt_lookup (hamt1, x5) == NULL); ASSERT (hamt_lookup (hamt2, x5) == x5); hamt_free (hamt1); Hamt_entry *x4 = make_element (4); hamt1 = hamt_insert (hamt2, &x4); hamt_free (hamt2); Hamt_entry *x6 = make_element (6); hamt2 = hamt_insert (hamt1, &x6); hamt_free (hamt1); ASSERT (hamt_do_while (hamt2, proc, &flag) == 4); ASSERT (sum == 52); hamt1 = hamt_remove (hamt2, &x4); sum = 0; ASSERT (hamt_do_while (hamt2, proc, &flag) == 4); ASSERT (sum == 52); sum = 0; ASSERT (hamt_do_while (hamt1, proc, &flag) == 3); ASSERT (sum == 48); hamt_free (hamt1); hamt_free (hamt2); free_element (y5); } static bool true_processor (_GL_ATTRIBUTE_MAYBE_UNUSED Hamt_entry *elt, _GL_ATTRIBUTE_MAYBE_UNUSED void *data) { return true; } static size_t element_count (Hamt *hamt) { return hamt_do_while (hamt, true_processor, NULL); } struct find_values_context { size_t n; int *elts; bool *found; }; static bool find_values_processor (Hamt_entry *entry, void *data) { struct find_values_context *ctx = data; int val = entry_value (entry); for (size_t i = 0; i < ctx->n; ++i) if (ctx->elts [i] == val && !ctx->found [i]) { ctx->found [i] = true; return true; } return false; } static bool find_values (Hamt *hamt, size_t n, int *elts) { bool *found = XCALLOC (n, bool); struct find_values_context ctx = {n, elts, found}; bool res = hamt_do_while (hamt, find_values_processor, &ctx) == n; free (found); return res; } static size_t insert_values (Hamt **hamt, size_t n, int *elts, bool destructive) { size_t cnt = 0; for (size_t i = 0; i < n; ++i) { Hamt_entry *p = make_element (elts [i]); Hamt_entry *q = p; if (destructive) { if (hamt_insert_x (*hamt, &p)) ++cnt; else free_element (q); } else { Hamt *new_hamt = hamt_insert (*hamt, &p); if (new_hamt != *hamt) { hamt_free (*hamt); *hamt = new_hamt; ++cnt; } else { free_element (q); } } } return cnt; } static size_t replace_values (Hamt **hamt, size_t n, int *elts, bool destructive) { size_t cnt = 0; for (size_t i = 0; i < n; ++i) { Hamt_entry *p = make_element (elts [i]); if (destructive) { if (hamt_replace_x (*hamt, p)) ++cnt; } else { Hamt *new_hamt = hamt_replace (*hamt, &p); hamt_free (*hamt); *hamt = new_hamt; if (p != NULL) ++cnt; } } return cnt; } static size_t remove_values (Hamt **hamt, size_t n, int *elts, bool destructive) { size_t cnt = 0; for (size_t i = 0; i < n; ++i) { Hamt_entry *p = make_element (elts [i]); Hamt_entry *q = p; if (destructive) { if (hamt_remove_x (*hamt, p)) ++cnt; } else { Hamt *new_hamt = hamt_remove (*hamt, &p); if (new_hamt != *hamt) { hamt_free (*hamt); *hamt = new_hamt; ++cnt; } } free (q); } return cnt; } static int val_array1 [10] = {1, 2, 3, 4, 33, 34, 35, 36, 1024, 1025}; static int val_array2 [10] = {1, 2, 34, 36, 1025, 32768, 32769, 32770, 32771, 32772}; static void test_functional_update (void) { Hamt *hamt = test_hamt_create (); ASSERT (insert_values (&hamt, 10, val_array1, false) == 10); ASSERT (element_count (hamt) == 10); ASSERT (find_values (hamt, 10, val_array1)); ASSERT (insert_values (&hamt, 10, val_array2, false) == 5); ASSERT (element_count (hamt) == 15); ASSERT (remove_values (&hamt, 10, val_array1, false) == 10); ASSERT (element_count (hamt) == 5); ASSERT (remove_values (&hamt, 10, val_array2, false) == 5); ASSERT (element_count (hamt) == 0); ASSERT (replace_values (&hamt, 10, val_array1, false) == 0); ASSERT (element_count (hamt) == 10); ASSERT (find_values (hamt, 10, val_array1)); ASSERT (replace_values (&hamt, 10, val_array2, false) == 5); ASSERT (element_count (hamt) == 15); hamt_free (hamt); } static void test_destructive_update (void) { Hamt *hamt = test_hamt_create (); ASSERT (insert_values (&hamt, 10, val_array1, true) == 10); ASSERT (element_count (hamt) == 10); ASSERT (find_values (hamt, 10, val_array1)); ASSERT (insert_values (&hamt, 10, val_array2, true) == 5); ASSERT (element_count (hamt) == 15); ASSERT (remove_values (&hamt, 10, val_array1, true) == 10); ASSERT (element_count (hamt) == 5); ASSERT (remove_values (&hamt, 10, val_array2, true) == 5); ASSERT (element_count (hamt) == 0); ASSERT (replace_values (&hamt, 10, val_array1, true) == 0); ASSERT (element_count (hamt) == 10); ASSERT (find_values (hamt, 10, val_array1)); ASSERT (replace_values (&hamt, 10, val_array2, true) == 5); ASSERT (element_count (hamt) == 15); hamt_free (hamt); } static void test_iterator (void) { Hamt *hamt = test_hamt_create (); ASSERT (insert_values (&hamt, 10, val_array1, true) == 10); Hamt_iterator iter [1] = {hamt_iterator (hamt)}; size_t cnt = 0; bool found [10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Hamt_entry *p; while (hamt_iterator_next (iter, &p)) { for (size_t i = 0; i < 10; ++i) if (val_array1 [i] == entry_value (p)) { ASSERT (!found [i]); found [i] = true; ++cnt; break; } } ASSERT (cnt == 10); hamt_iterator_free (iter); hamt_free (hamt); } int main (void) { test_general (); test_functional_update (); test_destructive_update (); test_iterator (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hard-locale.c����������������������������������������������������0000664�0000000�0000000�00000007062�14110572173�0020742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of determination whether a locale is different from the "C" locale. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 "hard-locale.h" #include <locale.h> #include <stdbool.h> #include <stdio.h> #include <string.h> /* True if all locale names are accepted and all locales are trivial. This is the case e.g. on OpenBSD 3.8. */ static bool all_trivial; static int test_one (const char *name, int failure_bitmask) { if (setlocale (LC_ALL, name) != NULL) { bool expected; /* 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__ expected = true; #else expected = !all_trivial; #endif if (hard_locale (LC_CTYPE) != expected) { if (expected) fprintf (stderr, "Unexpected: The category LC_CTYPE of the locale '%s' is not equivalent to C or POSIX.\n", name); else fprintf (stderr, "Unexpected: The category LC_CTYPE of the locale '%s' is equivalent to C or POSIX.\n", name); return 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. */ #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 */ expected = true; #else expected = !all_trivial; #endif if (hard_locale (LC_COLLATE) != expected) { if (expected) fprintf (stderr, "Unexpected: The category LC_COLLATE of the locale '%s' is not equivalent to C or POSIX.\n", name); else fprintf (stderr, "Unexpected: The category LC_COLLATE of the locale '%s' is equivalent to C or POSIX.\n", name); return failure_bitmask; } } return 0; } int main () { int fail = 0; /* The initial locale is the "C" or "POSIX" locale. */ if (hard_locale (LC_CTYPE) || hard_locale (LC_COLLATE)) { fprintf (stderr, "The initial locale should not be hard!\n"); fail |= 1; } all_trivial = (setlocale (LC_ALL, "foobar") != NULL); fail |= test_one ("de", 2); fail |= test_one ("de_DE", 4); fail |= test_one ("de_DE.ISO8859-1", 8); fail |= test_one ("de_DE.iso88591", 8); fail |= test_one ("de_DE.UTF-8", 16); fail |= test_one ("de_DE.utf8", 16); fail |= test_one ("german", 32); fail |= test_one ("C.UTF-8", 64); return fail; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hash.c�����������������������������������������������������������0000664�0000000�0000000�00000015102�14110572173�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2009-2021 Free Software Foundation, Inc. * Written by Jim Meyering * * This 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 "hash.h" #include "hash-pjw.h" #include "inttostr.h" #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <unistd.h> #include "macros.h" #define STREQ(a, b) (strcmp (a, b) == 0) #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) static bool hash_compare_strings (void const *x, void const *y) { ASSERT (x != y); return STREQ (x, y) ? true : false; } static void hash_freer (void *x) { free (x); } static void insert_new (Hash_table *ht, const void *ent) { void *e = hash_insert (ht, ent); ASSERT (e == ent); } static bool walk (void *ent, void *data) { char *str = ent; unsigned int *map = data; switch (*str) { case 'a': *map |= 1; return true; case 'b': *map |= 2; return true; case 'c': *map |= 4; return true; } *map |= 8; return false; } static int get_seed (char const *str, unsigned int *seed) { size_t len = strlen (str); if (len == 0 || strspn (str, "0123456789") != len || 10 < len) return 1; *seed = atoi (str); return 0; } int main (int argc, char **argv) { unsigned int i; unsigned int k; unsigned int table_size[] = {1, 2, 3, 4, 5, 23, 53}; Hash_table *ht; Hash_tuning tuning; hash_reset_tuning (&tuning); tuning.shrink_threshold = 0.3; tuning.shrink_factor = 0.707; tuning.growth_threshold = 1.5; tuning.growth_factor = 2.0; tuning.is_n_buckets = true; if (1 < argc) { unsigned int seed; if (get_seed (argv[1], &seed) != 0) { fprintf (stderr, "invalid seed: %s\n", argv[1]); exit (EXIT_FAILURE); } srand (seed); } for (i = 0; i < ARRAY_CARDINALITY (table_size); i++) { size_t sz = table_size[i]; ht = hash_initialize (sz, NULL, hash_pjw, hash_compare_strings, NULL); ASSERT (ht); insert_new (ht, "a"); { char *str1 = strdup ("a"); char *str2; ASSERT (str1); str2 = hash_insert (ht, str1); ASSERT (str1 != str2); ASSERT (STREQ (str1, str2)); free (str1); } insert_new (ht, "b"); insert_new (ht, "c"); i = 0; ASSERT (hash_do_for_each (ht, walk, &i) == 3); ASSERT (i == 7); { void *buf[5] = { NULL }; ASSERT (hash_get_entries (ht, NULL, 0) == 0); ASSERT (hash_get_entries (ht, buf, 5) == 3); ASSERT (STREQ (buf[0], "a") || STREQ (buf[0], "b") || STREQ (buf[0], "c")); } ASSERT (hash_remove (ht, "a")); ASSERT (hash_remove (ht, "a") == NULL); ASSERT (hash_remove (ht, "b")); ASSERT (hash_remove (ht, "c")); ASSERT (hash_rehash (ht, 47)); ASSERT (hash_rehash (ht, 467)); /* Free an empty table. */ hash_clear (ht); hash_free (ht); ht = hash_initialize (sz, NULL, hash_pjw, hash_compare_strings, NULL); ASSERT (ht); insert_new (ht, "z"); insert_new (ht, "y"); insert_new (ht, "x"); insert_new (ht, "w"); insert_new (ht, "v"); insert_new (ht, "u"); hash_clear (ht); ASSERT (hash_get_n_entries (ht) == 0); hash_free (ht); /* Test pointer hashing. */ ht = hash_initialize (sz, NULL, NULL, NULL, NULL); ASSERT (ht); { char *str = strdup ("a"); ASSERT (str); insert_new (ht, "a"); insert_new (ht, str); ASSERT (hash_lookup (ht, str) == str); free (str); } hash_free (ht); } hash_reset_tuning (&tuning); tuning.shrink_threshold = 0.3; tuning.shrink_factor = 0.707; tuning.growth_threshold = 1.5; tuning.growth_factor = 2.0; tuning.is_n_buckets = true; /* Invalid tuning. */ ht = hash_initialize (4651, &tuning, hash_pjw, hash_compare_strings, hash_freer); ASSERT (!ht); /* Alternate tuning. */ tuning.growth_threshold = 0.89; /* Run with default tuning, then with custom tuning settings. */ for (k = 0; k < 2; k++) { Hash_tuning const *tune = (k == 0 ? NULL : &tuning); /* Now, each entry is malloc'd. */ ht = hash_initialize (4651, tune, hash_pjw, hash_compare_strings, hash_freer); ASSERT (ht); for (i = 0; i < 10000; i++) { unsigned int op = rand () % 10; switch (op) { case 0: case 1: case 2: case 3: case 4: case 5: { char buf[50]; char const *p = uinttostr (i, buf); char *p_dup = strdup (p); ASSERT (p_dup); insert_new (ht, p_dup); } break; case 6: { size_t n = hash_get_n_entries (ht); ASSERT (hash_rehash (ht, n + rand () % 20)); } break; case 7: { size_t n = hash_get_n_entries (ht); size_t delta = rand () % 20; if (delta < n) ASSERT (hash_rehash (ht, n - delta)); } break; case 8: case 9: { /* Delete a random entry. */ size_t n = hash_get_n_entries (ht); if (n) { size_t kk = rand () % n; void const *p; void *v; for (p = hash_get_first (ht); kk; --kk, p = hash_get_next (ht, p)) { /* empty */ } ASSERT (p); v = hash_remove (ht, p); ASSERT (v); free (v); } break; } } ASSERT (hash_table_ok (ht)); } hash_free (ht); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hash_map.c�������������������������������������������������������0000664�0000000�0000000�00000012305�14110572173�0020343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_hash_map.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_array_map.h" #include "xalloc.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] struct pair { const void *key; const void *value; }; static int cmp_pairs_in_array (const void *pairptr1, const void *pairptr2) { const void *key1 = ((struct pair const *)pairptr1)->key; const void *key2 = ((struct pair const *)pairptr2)->key; return strcmp ((const char *) key1, (const char *) key2); } static void check_equals (gl_map_t map1, gl_map_t map2) { size_t n = gl_map_size (map1); struct pair *pairs_of_map1 = XNMALLOC (n, struct pair); struct pair *pairs_of_map2 = XNMALLOC (n, struct pair); gl_map_iterator_t iter1, iter2; const void *key1; const void *value1; const void *key2; const void *value2; size_t i; iter1 = gl_map_iterator (map1); iter2 = gl_map_iterator (map2); for (i = 0; i < n; i++) { ASSERT (gl_map_iterator_next (&iter1, &key1, &value1)); ASSERT (gl_map_iterator_next (&iter2, &key2, &value2)); pairs_of_map1[i].key = key1; pairs_of_map1[i].value = value1; pairs_of_map2[i].key = key2; pairs_of_map2[i].value = value2; } ASSERT (!gl_map_iterator_next (&iter1, &key1, &value1)); ASSERT (!gl_map_iterator_next (&iter2, &key2, &value2)); gl_map_iterator_free (&iter1); gl_map_iterator_free (&iter2); if (n > 0) { qsort (pairs_of_map1, n, sizeof (struct pair), cmp_pairs_in_array); qsort (pairs_of_map2, n, sizeof (struct pair), cmp_pairs_in_array); } for (i = 0; i < n; i++) { ASSERT (pairs_of_map1[i].key == pairs_of_map2[i].key); ASSERT (pairs_of_map1[i].value == pairs_of_map2[i].value); } free (pairs_of_map2); free (pairs_of_map1); } static void check_all (gl_map_t map1, gl_map_t map2) { check_equals (map1, map2); } int main (int argc, char *argv[]) { gl_map_t map1, map2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_map_nx_create_empty (GL_ARRAY_MAP, string_equals, string_hash, NULL, NULL); ASSERT (map1 != NULL); /* Create map2. */ map2 = gl_map_nx_create_empty (GL_HASH_MAP, string_equals, string_hash, NULL, NULL); ASSERT (map2 != NULL); check_all (map1, map2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_map_nx_put (map1, key, value) == gl_map_nx_put (map2, key, value)); check_all (map1, map2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); ASSERT (gl_map_get (map1, key) == gl_map_get (map2, key)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_map_nx_put (map1, key, value) == gl_map_nx_put (map2, key, value)); } break; case 2: { const char *key = RANDOM_OBJECT (); ASSERT (gl_map_remove (map1, key) == gl_map_remove (map2, key)); } break; } check_all (map1, map2); } gl_map_free (map1); gl_map_free (map2); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hash_set.c�������������������������������������������������������0000664�0000000�0000000�00000011063�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_hash_set.h" #include <stdlib.h> #include <string.h> #include "gl_array_set.h" #include "xalloc.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static int cmp_objects_in_array (const void *objptr1, const void *objptr2) { const void *obj1 = *(const void * const *)objptr1; const void *obj2 = *(const void * const *)objptr2; return strcmp ((const char *) obj1, (const char *) obj2); } static void check_equals (gl_set_t set1, gl_set_t set2) { size_t n = gl_set_size (set1); const void **elements_of_set1 = XNMALLOC (n, const void *); const void **elements_of_set2 = XNMALLOC (n, const void *); gl_set_iterator_t iter1; gl_set_iterator_t iter2; const void *elt1; const void *elt2; size_t i; iter1 = gl_set_iterator (set1); iter2 = gl_set_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_set_iterator_next (&iter1, &elt1)); ASSERT (gl_set_iterator_next (&iter2, &elt2)); elements_of_set1[i] = elt1; elements_of_set2[i] = elt2; } ASSERT (!gl_set_iterator_next (&iter1, &elt1)); ASSERT (!gl_set_iterator_next (&iter2, &elt2)); gl_set_iterator_free (&iter1); gl_set_iterator_free (&iter2); if (n > 0) { qsort (elements_of_set1, n, sizeof (const void *), cmp_objects_in_array); qsort (elements_of_set2, n, sizeof (const void *), cmp_objects_in_array); } for (i = 0; i < n; i++) ASSERT (elements_of_set1[i] == elements_of_set2[i]); free (elements_of_set2); free (elements_of_set1); } static void check_all (gl_set_t set1, gl_set_t set2) { check_equals (set1, set2); } static bool string_equals (const void *elt1, const void *elt2) { return strcmp ((const char *) elt1, (const char *) elt2) == 0; } static size_t string_hashcode (const void *elt) { size_t hashcode = 0; const char *s; for (s = (const char *) elt; *s != '\0'; s++) hashcode += (unsigned char) *s; return hashcode; } int main (int argc, char *argv[]) { gl_set_t set1, set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_set_nx_create_empty (GL_ARRAY_SET, string_equals, string_hashcode, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_set_nx_create_empty (GL_HASH_SET, string_equals, string_hashcode, NULL); ASSERT (set2 != NULL); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_set_nx_add (set2, obj)); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_search (set1, obj) == gl_set_search (set2, obj)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_set_nx_add (set2, obj)); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_remove (set1, obj) == gl_set_remove (set2, obj)); } break; } check_all (set1, set2); } gl_set_free (set1); gl_set_free (set2); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hmac-md5.c�������������������������������������������������������0000664�0000000�0000000�00000005304�14110572173�0020157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * * This 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 Simon Josefsson. */ #include <config.h> #include "hmac.h" #include <stdio.h> #include <stdlib.h> #include <string.h> /* Test vectors from RFC 2104. */ static void hmac_check (const void *key, size_t key_len, const void *data, size_t data_len, const char *digest) { char out[16]; if (hmac_md5 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); exit (1); } if (memcmp (digest, out, 16) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 16; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 16; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); exit (1); } } int main (int argc, char *argv[]) { { char key[16]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d"; hmac_check (key, key_len, data, data_len, digest); } { char *key = "Jefe"; size_t key_len = 4; char *data = "what do ya want for nothing?"; size_t data_len = 28; char *digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38"; hmac_check (key, key_len, data, data_len, digest); } { char key[16]; size_t key_len = sizeof key; memset (key, '\xAA', sizeof key); char data[50]; size_t data_len = sizeof data; memset (data, '\xDD', sizeof data); char *digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6"; hmac_check (key, key_len, data, data_len, digest); } { char key[65]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\xd6\x07\x5b\xee\x4d\x91\x80\xd8\xd1\xa2\x99\x29\x5e\x7c\xc9\xcb"; hmac_check (key, key_len, data, data_len, digest); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hmac-sha1.c������������������������������������������������������0000664�0000000�0000000�00000005405�14110572173�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * * This 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 Simon Josefsson. */ #include <config.h> #include "hmac.h" #include <stdio.h> #include <stdlib.h> #include <string.h> static void hmac_check (const void *key, size_t key_len, const void *data, size_t data_len, const char *digest) { char out[20]; if (hmac_sha1 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); exit (1); } if (memcmp (digest, out, 20) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 20; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 20; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); exit (1); } } int main (int argc, char *argv[]) { { char key[16]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\x67\x5b\x0b\x3a\x1b\x4d\xdf\x4e\x12\x48\x72\xda\x6c\x2f\x63\x2b" "\xfe\xd9\x57\xe9"; hmac_check (key, key_len, data, data_len, digest); } { char *key = "Jefe"; size_t key_len = 4; char *data = "what do ya want for nothing?"; size_t data_len = 28; char *digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c" "\x25\x9a\x7c\x79"; hmac_check (key, key_len, data, data_len, digest); } { char key[20]; size_t key_len = sizeof key; memset (key, '\xAA', sizeof key); char data[50]; size_t data_len = sizeof data; memset (data, '\xDD', sizeof data); char *digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f" "\x63\xf1\x75\xd3"; hmac_check (key, key_len, data, data_len, digest); } { char key[65]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\x29\xda\xa9\xe9\xcc\x4b\x9f\x09\x48\x29\xdc\xd4\x03\xc0\x69\x27" "\xd8\xa9\x53\x93"; hmac_check (key, key_len, data, data_len, digest); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hmac-sha256.c����������������������������������������������������0000664�0000000�0000000�00000005745�14110572173�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * * This 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 Simon Josefsson. Test vectors from RFC 4231. */ #include <config.h> #include "hmac.h" #include <stdio.h> #include <stdlib.h> #include <string.h> static void hmac_check (const void *key, size_t key_len, const void *data, size_t data_len, const char *digest) { char out[32]; if (hmac_sha256 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); exit (1); } if (memcmp (digest, out, 32) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 32; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 32; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); exit (1); } } int main (int argc, char *argv[]) { { char key[20]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\xb0\x34\x4c\x61\xd8\xdb\x38\x53\x5c\xa8\xaf\xce\xaf\x0b\xf1\x2b" "\x88\x1d\xc2\x00\xc9\x83\x3d\xa7\x26\xe9\x37\x6c\x2e\x32\xcf\xf7"; hmac_check (key, key_len, data, data_len, digest); } { char *key = "Jefe"; size_t key_len = 4; char *data = "what do ya want for nothing?"; size_t data_len = 28; char *digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e\x6a\x04\x24\x26\x08\x95\x75\xc7" "\x5a\x00\x3f\x08\x9d\x27\x39\x83\x9d\xec\x58\xb9\x64\xec\x38\x43"; hmac_check (key, key_len, data, data_len, digest); } { char key[20]; size_t key_len = sizeof key; memset (key, '\xAA', sizeof key); char data[50]; size_t data_len = sizeof data; memset (data, '\xDD', sizeof data); char *digest = "\x77\x3e\xa9\x1e\x36\x80\x0e\x46\x85\x4d\xb8\xeb\xd0\x91\x81\xa7" "\x29\x59\x09\x8b\x3e\xf8\xc1\x22\xd9\x63\x55\x14\xce\xd5\x65\xfe"; hmac_check (key, key_len, data, data_len, digest); } { char key[65]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\x72\x7b\x82\xfb\xa2\x64\x39\x3c\x5d\x67\xfd\x6d\x6a\xd7\x83\xe9" "\x01\x9a\x1f\xa6\xa8\x57\xfc\xcb\x70\xf5\x85\x2f\x04\xbe\x5d\x5d"; hmac_check (key, key_len, data, data_len, digest); } return 0; } ���������������������������gnulib-20210822~d383792/tests/test-hmac-sha512.c����������������������������������������������������0000664�0000000�0000000�00000007056�14110572173�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * * This 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 Simon Josefsson. Test vectors from RFC 4231. */ #include <config.h> #include "hmac.h" #include <stdio.h> #include <stdlib.h> #include <string.h> static void hmac_check (const void *key, size_t key_len, const void *data, size_t data_len, const char *digest) { char out[64]; if (hmac_sha512 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); exit (1); } if (memcmp (digest, out, 64) != 0) { size_t i; printf ("hash 1 mismatch. expected:\n"); for (i = 0; i < 64; i++) printf ("%02x ", digest[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < 64; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); exit (1); } } int main (int argc, char *argv[]) { { char key[20]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0" "\x23\x79\xf4\xe2\xce\x4e\xc2\x78\x7a\xd0\xb3\x05\x45\xe1\x7c\xde" "\xda\xa8\x33\xb7\xd6\xb8\xa7\x02\x03\x8b\x27\x4e\xae\xa3\xf4\xe4" "\xbe\x9d\x91\x4e\xeb\x61\xf1\x70\x2e\x69\x6c\x20\x3a\x12\x68\x54"; hmac_check (key, key_len, data, data_len, digest); } { char *key = "Jefe"; size_t key_len = 4; char *data = "what do ya want for nothing?"; size_t data_len = 28; char *digest = "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3" "\x87\xbd\x64\x22\x2e\x83\x1f\xd6\x10\x27\x0c\xd7\xea\x25\x05\x54" "\x97\x58\xbf\x75\xc0\x5a\x99\x4a\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd" "\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b\x63\x6e\x07\x0a\x38\xbc\xe7\x37"; hmac_check (key, key_len, data, data_len, digest); } { char key[20]; size_t key_len = sizeof key; memset (key, '\xAA', sizeof key); char data[50]; size_t data_len = sizeof data; memset (data, '\xDD', sizeof data); char *digest = "\xfa\x73\xb0\x08\x9d\x56\xa2\x84\xef\xb0\xf0\x75\x6c\x89\x0b\xe9" "\xb1\xb5\xdb\xdd\x8e\xe8\x1a\x36\x55\xf8\x3e\x33\xb2\x27\x9d\x39" "\xbf\x3e\x84\x82\x79\xa7\x22\xc8\x06\xb4\x85\xa4\x7e\x67\xc8\x07" "\xb9\x46\xa3\x37\xbe\xe8\x94\x26\x74\x27\x88\x59\xe1\x32\x92\xfb"; hmac_check (key, key_len, data, data_len, digest); } { char key[129]; size_t key_len = sizeof key; memset (key, '\x0b', sizeof key); char *data = "Hi There"; size_t data_len = 8; char *digest = "\xaa\x1c\x23\xfe\x04\x0c\x4f\x3e\x65\x45\xa9\x15\x4e\x33\x9d\x17" "\xff\xb5\x27\x2e\x0a\x54\x5b\x84\xd3\x8b\x9b\xf8\xe2\xc7\x46\x4d" "\xf2\xd6\x2b\xb5\x00\x05\x57\x68\x6f\x85\x10\xeb\x43\x02\xa0\xca" "\xe6\xb5\xdd\x1f\x37\x00\xbe\xae\xde\x75\x5f\x86\xfd\xbe\xb4\x8f"; hmac_check (key, key_len, data, data_len, digest); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypot-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypot() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define HYPOT hypot #include "test-hypot-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypot-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000003203�14110572173�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypot*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Infinity. */ ASSERT (HYPOT (INFINITY, L_(2.0)) == INFINITY); ASSERT (HYPOT (- INFINITY, L_(2.0)) == INFINITY); ASSERT (HYPOT (INFINITY, - L_(2.0)) == INFINITY); ASSERT (HYPOT (- INFINITY, - L_(2.0)) == INFINITY); ASSERT (HYPOT (L_(2.0), INFINITY) == INFINITY); ASSERT (HYPOT (L_(2.0), - INFINITY) == INFINITY); ASSERT (HYPOT (- L_(2.0), INFINITY) == INFINITY); ASSERT (HYPOT (- L_(2.0), - INFINITY) == INFINITY); /* Mixed Infinity and NaN. */ ASSERT (HYPOT (INFINITY, NAN) == INFINITY); ASSERT (HYPOT (- INFINITY, NAN) == INFINITY); ASSERT (HYPOT (NAN, INFINITY) == INFINITY); ASSERT (HYPOT (NAN, - INFINITY) == INFINITY); /* NaN. */ ASSERT (ISNAN (HYPOT (NAN, L_(2.0)))); ASSERT (ISNAN (HYPOT (NAN, - L_(2.0)))); ASSERT (ISNAN (HYPOT (L_(2.0), NAN))); ASSERT (ISNAN (HYPOT (- L_(2.0), NAN))); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypot.c����������������������������������������������������������0000664�0000000�0000000�00000002515�14110572173�0017730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypot() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (hypot, double, (double, double)); #include <float.h> #include "macros.h" #undef MIN #undef MAX #define DOUBLE double #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MIN DBL_MIN #define MAX DBL_MAX #define HYPOT hypot #define RANDOM randomd #include "test-hypot.h" int main () { /* A particular value. */ x = 0.4; y = 0.6; z = hypot (x, y); ASSERT (z >= 0.7211102550 && z <= 0.7211102551); test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypot.h����������������������������������������������������������0000664�0000000�0000000�00000004215�14110572173�0017734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypot*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); { volatile DOUBLE x; volatile DOUBLE y; volatile DOUBLE z; /* Overflow. */ x = MAX; y = MAX * L_(0.5); z = HYPOT (x, y); ASSERT (z == HUGEVAL); /* No underflow. */ x = MIN; y = L_(0.0); z = HYPOT (x, y); ASSERT (z == MIN); /* No underflow. */ x = MIN * L_(2.0); y = MIN * L_(3.0); z = HYPOT (x, y); ASSERT (z >= MIN * L_(2.0) && z <= MIN * L_(4.0)); } /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5;j++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = L_(16.0) * RANDOM[j]; /* 0.0 <= y <= 16.0 */ DOUBLE z = HYPOT (x, y); DOUBLE err = z * z - (x * x + y * y); ASSERT (z >= L_(0.0)); ASSERT (err >= - L_(4.0) * L_(16.0) * L_(16.0) / TWO_MANT_DIG && err <= L_(4.0) * L_(16.0) * L_(16.0) / TWO_MANT_DIG); } } volatile DOUBLE x; volatile DOUBLE y; DOUBLE z; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypotf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypotf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define HYPOT hypotf #include "test-hypot-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypotf.c���������������������������������������������������������0000664�0000000�0000000�00000002516�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypotf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (hypotf, float, (float, float)); #include <float.h> #include "macros.h" #undef MIN #undef MAX #define DOUBLE float #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MIN FLT_MIN #define MAX FLT_MAX #define HYPOT hypotf #define RANDOM randomf #include "test-hypot.h" int main () { /* A particular value. */ x = 0.4f; y = 0.6f; z = hypot (x, y); ASSERT (z >= 0.7211102f && z <= 0.7211103f); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypotl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypotl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define HYPOT hypotl #include "test-hypot-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-hypotl.c���������������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypotl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (hypotl, long double, (long double, long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #undef MIN #undef MAX #define DOUBLE long double #define HUGEVAL HUGE_VALL #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MIN LDBL_MIN #define MAX LDBL_MAX #define HYPOT hypotl #define RANDOM randoml #include "test-hypot.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.4L; y = 0.6L; z = hypotl (x, y); ASSERT (z >= 0.7211102550L && z <= 0.7211102551L); test_function (); return 0; } ��������������������������������������������������������������gnulib-20210822~d383792/tests/test-i-ring.c���������������������������������������������������������0000664�0000000�0000000�00000003045�14110572173�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the simple ring buffer. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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 Jim Meyering */ #include <config.h> #include "i-ring.h" #include "macros.h" int main (void) { int o; I_ring ir; i_ring_init (&ir, -1); o = i_ring_push (&ir, 1); ASSERT (o == -1); o = i_ring_push (&ir, 2); ASSERT (o == -1); o = i_ring_push (&ir, 3); ASSERT (o == -1); o = i_ring_push (&ir, 4); ASSERT (o == -1); o = i_ring_push (&ir, 5); ASSERT (o == 1); o = i_ring_push (&ir, 6); ASSERT (o == 2); o = i_ring_push (&ir, 7); ASSERT (o == 3); o = i_ring_pop (&ir); ASSERT (o == 7); o = i_ring_pop (&ir); ASSERT (o == 6); o = i_ring_pop (&ir); ASSERT (o == 5); o = i_ring_pop (&ir); ASSERT (o == 4); ASSERT (i_ring_empty (&ir)); o = i_ring_push (&ir, 8); ASSERT (o == -1); o = i_ring_pop (&ir); ASSERT (o == 8); ASSERT (i_ring_empty (&ir)); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iconv-h-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002471�14110572173�0020642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <iconv.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if HAVE_ICONV # include <iconv.h> # include "signature.h" #if GNULIB_TEST_ICONV SIGNATURE_CHECK (GNULIB_NAMESPACE::iconv_open, iconv_t, (const char *, const char *)); #endif #if GNULIB_TEST_ICONV SIGNATURE_CHECK (GNULIB_NAMESPACE::iconv, size_t, (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *)); #endif #if GNULIB_TEST_ICONV SIGNATURE_CHECK (GNULIB_NAMESPACE::iconv_close, int, (iconv_t)); #endif #endif int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iconv-h.c��������������������������������������������������������0000664�0000000�0000000�00000001500�14110572173�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <iconv.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> #if HAVE_ICONV # include <iconv.h> #endif int main () { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iconv-utf.c������������������������������������������������������0000664�0000000�0000000�00000021571�14110572173�0020502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> #if HAVE_ICONV # include <iconv.h> #endif #include <errno.h> #include <string.h> #include "macros.h" /* If compiling on an EBCDIC system, keep the test strings in ASCII. */ #if defined __IBMC__ && 'A' != 0x41 # pragma convert("ISO8859-1") # define CONVERT_ENABLED #endif /* The text is "Japanese (日本語) [\U0001D50D\U0001D51E\U0001D52D]". */ const char test_utf8_string[] = "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; const char test_utf16be_string[] = "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; const char test_utf16le_string[] = "J\000a\000p\000a\000n\000e\000s\000e\000 \000(\000\345\145\054\147\236\212)\000 \000[\000\065\330\015\335\065\330\036\335\065\330\055\335]\000"; const char test_utf32be_string[] = "\000\000\000J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\145\345\000\000\147\054\000\000\212\236\000\000\000)\000\000\000 \000\000\000[\000\001\325\015\000\001\325\036\000\001\325\055\000\000\000]"; const char test_utf32le_string[] = "J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\000\345\145\000\000\054\147\000\000\236\212\000\000)\000\000\000 \000\000\000[\000\000\000\015\325\001\000\036\325\001\000\055\325\001\000]\000\000\000"; #ifdef CONVERT_ENABLED # pragma convert(pop) #endif int main () { #if HAVE_ICONV /* Assume that iconv() supports at least the encoding UTF-8. */ /* Test conversion from UTF-8 to UTF-16BE with no errors. */ { #define input test_utf8_string #define expected test_utf16be_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-16BE", "UTF-8"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-8 to UTF-16LE with no errors. */ { #define input test_utf8_string #define expected test_utf16le_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-16LE", "UTF-8"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-8 to UTF-32BE with no errors. */ { #define input test_utf8_string #define expected test_utf32be_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-32BE", "UTF-8"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-8 to UTF-32LE with no errors. */ { #define input test_utf8_string #define expected test_utf32le_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-32LE", "UTF-8"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-16BE to UTF-8 with no errors. */ { #define input test_utf16be_string #define expected test_utf8_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-8", "UTF-16BE"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-16LE to UTF-8 with no errors. */ { #define input test_utf16le_string #define expected test_utf8_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-8", "UTF-16LE"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-32BE to UTF-8 with no errors. */ { #define input test_utf32be_string #define expected test_utf8_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-8", "UTF-32BE"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } /* Test conversion from UTF-32LE to UTF-8 with no errors. */ { #define input test_utf32le_string #define expected test_utf8_string iconv_t cd; char buf[100]; const char *inptr; size_t inbytesleft; char *outptr; size_t outbytesleft; size_t res; cd = iconv_open ("UTF-8", "UTF-32LE"); ASSERT (cd != (iconv_t)(-1)); inptr = input; inbytesleft = sizeof (input) - 1; outptr = buf; outbytesleft = sizeof (buf); res = iconv (cd, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + (sizeof (expected) - 1)); ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); ASSERT (iconv_close (cd) == 0); #undef input #undef expected } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iconv.c����������������������������������������������������������0000664�0000000�0000000�00000012145�14110572173�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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> #if HAVE_ICONV # include <iconv.h> # ifndef ICONV_CONST # define ICONV_CONST /* empty */ # endif #include "signature.h" SIGNATURE_CHECK (iconv, size_t, (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *)); SIGNATURE_CHECK (iconv_close, int, (iconv_t x)); SIGNATURE_CHECK (iconv_open, iconv_t, (char const *, char const *)); #endif #include <errno.h> #include <string.h> #include "macros.h" int main () { #if HAVE_ICONV /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, and UTF-8. */ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); #if defined __MVS__ && defined __IBMC__ /* String literals below are in ASCII, not EBCDIC. */ # pragma convert("ISO8859-1") # define CONVERT_ENABLED #endif ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + strlen (expected)); ASSERT (memcmp (buf, expected, strlen (expected)) == 0); } /* Test conversion from ISO-8859-1 to UTF-8 with E2BIG. */ { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == (size_t)(-1) && errno == E2BIG); ASSERT (inbytesleft == 1); ASSERT (outbytesleft == 1); ASSERT ((unsigned char) buf[1] == 0xAD); ASSERT ((unsigned char) buf[0] == 0xDE); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ { static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == 0 && inbytesleft == 0); ASSERT (outptr == buf + strlen (expected)); ASSERT (memcmp (buf, expected, strlen (expected)) == 0); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == (size_t)(-1)) { ASSERT (errno == EILSEQ); ASSERT (inbytesleft == strlen (input) && outptr == buf); } else { ASSERT (res == 1); ASSERT (inbytesleft == 0); } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ { static const char input[] = "\342"; char buf[10]; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (ICONV_CONST char **) &inptr, &inbytesleft, &outptr, &outbytesleft); ASSERT (res == (size_t)(-1) && errno == EINVAL); ASSERT (inbytesleft == 1 && outptr == buf); } iconv_close (cd_88591_to_utf8); iconv_close (cd_utf8_to_88591); #ifdef CONVERT_ENABLED # pragma convert(pop) #endif #endif /* HAVE_ICONV */ return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iconvme.c��������������������������������������������������������0000664�0000000�0000000�00000004114�14110572173�0020222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Recode strings between character sets, using iconv. Copyright (C) 2004-2005, 2009-2021 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 <stdio.h> #include "iconvme.h" int main (int ac, char *av[]) { char *in = NULL, *out = NULL; char *to = NULL, *from = NULL; if (ac > 1) from = av[1]; if (ac > 2) to = av[2]; if (ac > 3) in = av[3]; if (!in) { size_t len = 0; printf ("Enter string to convert:\n\t> "); if (getline (&in, &len, stdin) < 0) perror ("getline"); if (in[strlen (in) - 1] == '\n') in[strlen (in) - 1] = '\0'; } if (!to) { size_t len = 0; printf ("Enter destination code set:\n\t> "); if (getline (&to, &len, stdin) < 0) perror ("getline"); if (to[strlen (to) - 1] == '\n') to[strlen (to) - 1] = '\0'; } if (!from) { size_t len = 0; printf ("Enter source code set:\n\t> "); if (getline (&from, &len, stdin) < 0) perror ("getline"); if (from[strlen (from) - 1] == '\n') from[strlen (from) - 1] = '\0'; } printf (" Input string: '%s'\n" "From code set: '%s'\n" " To code set: '%s'\n", in, from, to); out = iconv_string (in, from, to); if (out == NULL) perror ("iconv"); else { printf ("\nOutput: '%s'\n", out); free (out); } return EXIT_SUCCESS; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-drop.c����������������������������������������������������0000664�0000000�0000000�00000006476�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dropping uid/gid privileges of the current process permanently. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "idpriv.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" static void show_uids () { #if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ uid_t real; uid_t effective; uid_t saved; ASSERT (getresuid (&real, &effective, &saved) >= 0); printf ("uids: real=%d effective=%d saved=%d", (int) real, (int) effective, (int) saved); #elif HAVE_GETEUID printf ("uids: real=%d effective=%d", (int) getuid (), (int) geteuid ()); #elif HAVE_GETUID printf ("uids: real=%d", (int) getuid ()); #endif } static void show_gids () { #if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ gid_t real; gid_t effective; gid_t saved; ASSERT (getresgid (&real, &effective, &saved) >= 0); printf ("gids: real=%d effective=%d saved=%d", (int) real, (int) effective, (int) saved); #elif HAVE_GETEGID printf ("gids: real=%d effective=%d", (int) getgid (), (int) getegid ()); #elif HAVE_GETGID printf ("gids: real=%d", (int) getgid ()); #endif } static void show (const char *prefix) { printf ("%s ", prefix); show_uids (); printf (" "); show_gids (); printf ("\n"); } int main (int argc, char *argv[]) { bool verbose = false; int i; #if HAVE_GETUID int uid = getuid (); #endif #if HAVE_GETGID int gid = getgid (); #endif /* Parse arguments. -v enables verbose output. */ for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strcmp (arg, "-v") == 0) verbose = true; } if (verbose) show ("before drop:"); ASSERT (idpriv_drop () == 0); if (verbose) show ("after drop: "); /* Verify that the privileges have really been dropped. */ #if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ { uid_t real; uid_t effective; uid_t saved; if (getresuid (&real, &effective, &saved) < 0 || real != uid || effective != uid || saved != uid) abort (); } #else # if HAVE_GETEUID if (geteuid () != uid) abort (); # endif # if HAVE_GETUID if (getuid () != uid) abort (); # endif #endif #if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ { gid_t real; gid_t effective; gid_t saved; if (getresgid (&real, &effective, &saved) < 0 || real != gid || effective != gid || saved != gid) abort (); } #else # if HAVE_GETEGID if (getegid () != gid) abort (); # endif # if HAVE_GETGID if (getgid () != gid) abort (); # endif #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-drop.sh���������������������������������������������������0000775�0000000�0000000�00000001432�14110572173�0021214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # The user's original uid and gid. uid=`$ID -u` gid=`$ID -g` if test `$ID -u` = 0; then # No need to ask for a password. "${srcdir}/test-idpriv-drop.su.sh" "$uid" "$gid" else echo "Need root privileges for the 'test-idpriv-drop' test. Deny if you don't trust." > /dev/tty if (type sudo) > /dev/null 2>&1; then # Use the 'sudo' program. sudo "${srcdir}/test-idpriv-drop.su.sh" "$uid" "$gid" else # Use the 'su' program. su root -c "${srcdir}/test-idpriv-drop.su.sh \"$uid\" \"$gid\"" fi result=$? case $result in 0) exit 0;; 77) exit 77;; 13) exit 1;; *) echo "Skipping test: root privileges not granted"; exit 77;; esac fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-drop.su.sh������������������������������������������������0000775�0000000�0000000�00000003265�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This script must be run as superuser. origuid=$1 origgid=$2 # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi if test `$ID -u` != 0; then echo "Skipping test: not superuser" exit 77 fi ${CHECKER} ./test-idpriv-drop${EXEEXT} || exit 13 # normal chown root:root test-idpriv-drop${EXEEXT} 2>/dev/null || \ chown root:wheel test-idpriv-drop${EXEEXT} 2>/dev/null || \ { echo "Skipping test: root privilege not sufficient on this file system" exit 77 } chmod 4755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid root chmod 2755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setgid root chmod 6755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid and setgid root if chown nobody test-idpriv-drop${EXEEXT} 2>/dev/null; then chmod 4755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid nobody chmod 2755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setgid root chmod 6755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid nobody and setgid root fi if chown root:nobody test-idpriv-drop${EXEEXT} 2>/dev/null; then chmod 4755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid root chmod 2755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setgid nobody chmod 6755 test-idpriv-drop${EXEEXT} ./test-idpriv-drop${EXEEXT} || exit 13 # setuid root and setgid nobody fi chown "$origuid:$origgid" test-idpriv-drop${EXEEXT} chmod 755 test-idpriv-drop${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-droptemp.c������������������������������������������������0000664�0000000�0000000�00000006722�14110572173�0021716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dropping uid/gid privileges of the current process temporarily. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "idpriv.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" static void show_uids () { #if HAVE_GETRESUID /* glibc, FreeBSD, OpenBSD, HP-UX */ uid_t real; uid_t effective; uid_t saved; ASSERT (getresuid (&real, &effective, &saved) >= 0); printf ("uids: real=%d effective=%d saved=%d", (int) real, (int) effective, (int) saved); #elif HAVE_GETEUID printf ("uids: real=%d effective=%d", (int) getuid (), (int) geteuid ()); #elif HAVE_GETUID printf ("uids: real=%d", (int) getuid ()); #endif } static void show_gids () { #if HAVE_GETRESGID /* glibc, FreeBSD, OpenBSD, HP-UX */ gid_t real; gid_t effective; gid_t saved; ASSERT (getresgid (&real, &effective, &saved) >= 0); printf ("gids: real=%d effective=%d saved=%d", (int) real, (int) effective, (int) saved); #elif HAVE_GETEGID printf ("gids: real=%d effective=%d", (int) getgid (), (int) getegid ()); #elif HAVE_GETGID printf ("gids: real=%d", (int) getgid ()); #endif } static void show (const char *prefix) { printf ("%s ", prefix); show_uids (); printf (" "); show_gids (); printf ("\n"); } int main (int argc, char *argv[]) { bool verbose = false; int i; #if HAVE_GETUID int uid = getuid (); #endif #if HAVE_GETEUID int privileged_uid = geteuid (); #endif #if HAVE_GETGID int gid = getgid (); #endif #if HAVE_GETEGID int privileged_gid = getegid (); #endif /* Parse arguments. -v enables verbose output. */ for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strcmp (arg, "-v") == 0) verbose = true; } for (i = 0; i < 3; i++) { if (verbose) show ("before droptemp:"); ASSERT (idpriv_temp_drop () == 0); if (verbose) show ("privileged: "); /* Verify that the privileges have really been dropped. */ #if HAVE_GETEUID if (geteuid () != uid) abort (); #endif #if HAVE_GETUID if (getuid () != uid) abort (); #endif #if HAVE_GETEGID if (getegid () != gid) abort (); #endif #if HAVE_GETGID if (getgid () != gid) abort (); #endif ASSERT (idpriv_temp_restore () == 0); if (verbose) show ("unprivileged: "); /* Verify that the privileges have really been acquired again. */ #if HAVE_GETEUID if (geteuid () != privileged_uid) abort (); #endif #if HAVE_GETUID if (getuid () != uid) abort (); #endif #if HAVE_GETEGID if (getegid () != privileged_gid) abort (); #endif #if HAVE_GETGID if (getgid () != gid) abort (); #endif } return 0; } ����������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-droptemp.sh�����������������������������������������������0000775�0000000�0000000�00000001452�14110572173�0022104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # The user's original uid and gid. uid=`$ID -u` gid=`$ID -g` if test `$ID -u` = 0; then # No need to ask for a password. "${srcdir}/test-idpriv-droptemp.su.sh" "$uid" "$gid" else echo "Need root privileges for the 'test-idpriv-droptemp' test. Deny if you don't trust." > /dev/tty if (type sudo) > /dev/null 2>&1; then # Use the 'sudo' program. sudo "${srcdir}/test-idpriv-droptemp.su.sh" "$uid" "$gid" else # Use the 'su' program. su root -c "${srcdir}/test-idpriv-droptemp.su.sh \"$uid\" \"$gid\"" fi result=$? case $result in 0) exit 0;; 77) exit 77;; 13) exit 1;; *) echo "Skipping test: root privileges not granted"; exit 77;; esac fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-idpriv-droptemp.su.sh��������������������������������������������0000775�0000000�0000000�00000003361�14110572173�0022533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This script must be run as superuser. origuid=$1 origgid=$2 # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi if test `$ID -u` != 0; then echo "Skipping test: not superuser" exit 77 fi ${CHECKER} ./test-idpriv-droptemp${EXEEXT} || exit 13 # normal chown root:root test-idpriv-droptemp${EXEEXT} 2>/dev/null || \ chown root:wheel test-idpriv-droptemp${EXEEXT} 2>/dev/null || \ { echo "Skipping test: root privilege not sufficient on this file system" exit 77 } chmod 4755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid root chmod 2755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setgid root chmod 6755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid and setgid root if chown nobody test-idpriv-droptemp${EXEEXT} 2>/dev/null; then chmod 4755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid nobody chmod 2755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setgid root chmod 6755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid nobody and setgid root fi if chown root:nobody test-idpriv-droptemp${EXEEXT} 2>/dev/null; then chmod 4755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid root chmod 2755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setgid nobody chmod 6755 test-idpriv-droptemp${EXEEXT} ./test-idpriv-droptemp${EXEEXT} || exit 13 # setuid root and setgid nobody fi chown "$origuid:$origgid" test-idpriv-droptemp${EXEEXT} chmod 755 test-idpriv-droptemp${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ieee754-h.c������������������������������������������������������0000664�0000000�0000000�00000003750�14110572173�0020163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test <ieee754.h>. Copyright 2018-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <ieee754.h> #include <stdio.h> static struct { float x; unsigned sign; unsigned exponent; unsigned frac; } const float_tests[] = { {0, 0, 0, 0}, {-0.0, 1, 0, 0}, {0.1, 0, 0x7b, 0x4ccccd} }; static struct { double x; unsigned sign; unsigned exponent; unsigned frac_hi; unsigned frac_lo; } const double_tests[] = { {0, 0, 0, 0}, {-0.0, 1, 0, 0 }, {0.1, 0, 0x3fb, 0x99999, 0x9999999a} }; int main (void) { int i; for (i = 0; i < sizeof float_tests / sizeof *float_tests; i++) { union ieee754_float u; u.f = float_tests[i].x; if (float_tests[i].sign != u.ieee.negative) return 1; if (float_tests[i].exponent != u.ieee.exponent) return 2; if (float_tests[i].frac != u.ieee.mantissa) return 3; } for (i = 0; i < sizeof double_tests / sizeof *double_tests; i++) { union ieee754_double u; u.d = double_tests[i].x; if (double_tests[i].sign != u.ieee.negative) return 4; if (double_tests[i].exponent != u.ieee.exponent) return 5; if (double_tests[i].frac_hi != u.ieee.mantissa0) return 6; if (double_tests[i].frac_lo != u.ieee.mantissa1) return 7; } return 0; } ������������������������gnulib-20210822~d383792/tests/test-ignore-value.c���������������������������������������������������0000664�0000000�0000000�00000003206�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "ignore-value" module. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Eric Blake. */ #include <config.h> #include "ignore-value.h" #include <stdio.h> #include "attribute.h" struct s { int i; }; NODISCARD static char doChar (void); NODISCARD static int doInt (void); NODISCARD static off_t doOff (void); NODISCARD static void *doPtr (void); NODISCARD static struct s doStruct (void); static char doChar (void) { return 0; } static int doInt (void) { return 0; } static off_t doOff (void) { return 0; } static void * doPtr (void) { return NULL; } static struct s doStruct (void) { static struct s s1; return s1; } int main (void) { /* If this test can compile with -Werror and the same warnings as the rest of the project, then we are properly silencing warnings about ignored return values. */ ignore_value (doChar ()); ignore_value (doInt ()); ignore_value (doOff ()); ignore_value (doPtr ()); ignore_value (doStruct ()); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ilogb.c����������������������������������������������������������0000664�0000000�0000000�00000003356�14110572173�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ilogb() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (ilogb, int, (double)); #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double /* The use of 'volatile' guarantees that excess precision bits are dropped when dealing with denormalized numbers. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ #define VOLATILE volatile #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define MAX_EXP DBL_MAX_EXP #define MIN_EXP DBL_MIN_EXP #define MIN_NORMAL_EXP DBL_MIN_EXP #define ILOGB ilogb #define RANDOM randomd #include "test-ilogb.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ilogb.h����������������������������������������������������������0000664�0000000�0000000�00000006770�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ilogb*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static DOUBLE my_ldexp (DOUBLE x, int d) { for (; d > 0; d--) x *= L_(2.0); for (; d < 0; d++) x *= L_(0.5); return x; } static void test_function (void) { int i; VOLATILE DOUBLE x; int y; /* Some particular values. */ x = L_(0.6); y = ILOGB (x); ASSERT (y == -1); x = L_(1.2); y = ILOGB (x); ASSERT (y == 0); x = L_(2.1); y = ILOGB (x); ASSERT (y == 1); x = L_(3.9); y = ILOGB (x); ASSERT (y == 1); x = L_(4.0); y = ILOGB (x); ASSERT (y == (FLT_RADIX == 2 ? 2 : 1)); x = L_(0.25); y = ILOGB (x); ASSERT (y == (FLT_RADIX == 2 ? -2 : -1)); /* Zero. */ ASSERT (ILOGB (L_(0.0)) == FP_ILOGB0); ASSERT (ILOGB (MINUS_ZERO) == FP_ILOGB0); /* Infinity. */ ASSERT (ILOGB (INFINITY) == INT_MAX); ASSERT (ILOGB (- INFINITY) == INT_MAX); /* NaN. */ ASSERT (ILOGB (NAN) == FP_ILOGBNAN); /* From here on, this test assumes FLT_RADIX == 2. */ for (i = 1, x = L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = - L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = - L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (; i >= MIN_EXP - 100 && x < L_(0.0); i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = L_(1.01); i <= MAX_EXP; i++, x *= L_(2.0)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = L_(1.01); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = L_(1.73205); i <= MAX_EXP; i++, x *= L_(2.0)) { y = ILOGB (x); ASSERT (y == i - 1); } for (i = 1, x = L_(1.73205); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = ILOGB (x); ASSERT (y == i - 1 || y == i); } /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { x = L_(20.0) * RANDOM[i] - L_(10.0); /* -10.0 <= x <= 10.0 */ if (x != L_(0.0)) { DOUBLE abs_x = (x < L_(0.0) ? - x : x); y = ILOGB (x); ASSERT (abs_x >= my_ldexp (L_(1.0), y)); ASSERT (abs_x < my_ldexp (L_(1.0), y + 1)); } } } volatile DOUBLE x; DOUBLE y; ��������gnulib-20210822~d383792/tests/test-ilogbf.c���������������������������������������������������������0000664�0000000�0000000�00000002612�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ilogbf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (ilogbf, int, (float)); #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define VOLATILE volatile #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define MAX_EXP FLT_MAX_EXP #define MIN_EXP FLT_MIN_EXP #define MIN_NORMAL_EXP FLT_MIN_EXP #define ILOGB ilogbf #define RANDOM randomf #include "test-ilogb.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ilogbl.c���������������������������������������������������������0000664�0000000�0000000�00000003651�14110572173�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ilogbl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (ilogbl, int, (long double)); #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define VOLATILE #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define MAX_EXP LDBL_MAX_EXP #define MIN_EXP LDBL_MIN_EXP /* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -964. Similarly, on PowerPC machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -968. For exponents below that, the precision may be truncated to the precision used for 'double'. */ #ifdef __sgi # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) #elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) #else # define MIN_NORMAL_EXP LDBL_MIN_EXP #endif #define ILOGB ilogbl #define RANDOM randoml #include "test-ilogb.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-imaxabs.c��������������������������������������������������������0000664�0000000�0000000�00000002113�14110572173�0020203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 <inttypes.h> #include "signature.h" SIGNATURE_CHECK (imaxabs, intmax_t, (intmax_t)); #include "macros.h" int main (void) { { intmax_t result = imaxabs (0); ASSERT (result == 0); } { intmax_t result = imaxabs (23); ASSERT (result == 23); } { intmax_t result = imaxabs (-23); ASSERT (result == 23); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-imaxdiv.c��������������������������������������������������������0000664�0000000�0000000�00000002506�14110572173�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 <inttypes.h> #include "signature.h" SIGNATURE_CHECK (imaxdiv, imaxdiv_t, (intmax_t, intmax_t)); #include "macros.h" int main (void) { { imaxdiv_t result = imaxdiv (101, 7); ASSERT (result.quot == 14); ASSERT (result.rem == 3); } { imaxdiv_t result = imaxdiv (-101, 7); ASSERT (result.quot == -14); ASSERT (result.rem == -3); } { imaxdiv_t result = imaxdiv (101, -7); ASSERT (result.quot == -14); ASSERT (result.rem == 3); } { imaxdiv_t result = imaxdiv (-101, -7); ASSERT (result.quot == 14); ASSERT (result.rem == -3); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-immutable.c������������������������������������������������������0000664�0000000�0000000�00000007141�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of immutable data. Copyright (C) 2021 Free Software Foundation, Inc. This 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>, 2021. */ #include <config.h> #include "immutable.h" #include <signal.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include "macros.h" struct data { int x; long y; }; #if IMMUTABLE_EFFECTIVE static _GL_ASYNC_SAFE _Noreturn void segv_handler (int signo) { _Exit (0); } static void install_segv_handler (void) { signal (SIGSEGV, segv_handler); # if (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ signal (SIGBUS, segv_handler); # endif } #endif int main (int argc, char *argv[]) { if (argc != 2) { fprintf (stderr, "%s: need 1 argument\n", argv[0]); return 1; } int test = atoi (argv[1]); switch (test) { case 0: /* Indicates whether the implementation effectively rejects writes to immutable data. */ #if !IMMUTABLE_EFFECTIVE fputs ("Skipping test: immutability cannot be enforced\n", stderr); return 77; #else break; #endif case 1: /* Correct use of immmalloc. */ { struct data *wp; struct data const *p; wp = (struct data *) immmalloc (sizeof (struct data)); ASSERT (wp != NULL); wp->x = 7; wp->y = 42; p = immfreeze (wp); ASSERT (p->x == 7); ASSERT (p->y == 42); immfree (p); } break; case 2: /* Catch invalid write access. */ { struct data *wp; struct data const *p; wp = (struct data *) immmalloc (sizeof (struct data)); ASSERT (wp != NULL); wp->x = 7; wp->y = 42; p = immfreeze (wp); #if IMMUTABLE_EFFECTIVE install_segv_handler (); #endif /* This assignment should crash. */ ((struct data *) p)->y = 77; #if IMMUTABLE_EFFECTIVE return 1; #endif } break; case 3: /* Catch invalid write access while another data object is not frozen. */ { struct data *wp; struct data const *p; struct data *wp2; wp = (struct data *) immmalloc (sizeof (struct data)); ASSERT (wp != NULL); wp->x = 7; wp->y = 42; p = immfreeze (wp); ASSERT (p->x == 7); ASSERT (p->y == 42); wp2 = (struct data *) immmalloc (sizeof (struct data)); ASSERT (wp2 != NULL); wp2->x = 7; #if IMMUTABLE_EFFECTIVE install_segv_handler (); #endif /* This assignment should crash. */ ((struct data *) p)->y = 42; #if IMMUTABLE_EFFECTIVE return 1; #endif } break; case 4: /* Correct use of immstrdup. */ { const char *s = immstrdup ("Hello"); ASSERT (strlen (s) == 5); ASSERT (strcmp (s, "Hello") == 0); immfree (s); } break; default: ASSERT (false); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-immutable.sh�����������������������������������������������������0000664�0000000�0000000�00000000435�14110572173�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Print "Skipping test" if immutability cannot be enforced. ./test-immutable${EXEEXT} 0 if test $? = 77; then exit 77; fi st=0 for i in 1 2 3 4 ; do ${CHECKER} ./test-immutable${EXEEXT} $i \ || { echo test-immutable.sh: test case $i failed >&2; st=1; } done exit $st �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inet_ntop.c������������������������������������������������������0000664�0000000�0000000�00000003100�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of inet_ntop function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <arpa/inet.h> #include "signature.h" SIGNATURE_CHECK (inet_ntop, char const *, (int, void const *, char *, socklen_t)); #include <netinet/in.h> #include <sys/socket.h> #include <string.h> #include "macros.h" int main (void) { #if defined AF_INET /* HAVE_IPV4 */ { struct in_addr internal; char printable[16]; const char *result; /* This machine was for a long time known as ma2s2.mathematik.uni-karlsruhe.de. */ # ifdef WORDS_BIGENDIAN internal.s_addr = 0x810D7302; # else internal.s_addr = 0x02730D81; # endif result = inet_ntop (AF_INET, &internal, printable, sizeof (printable)); ASSERT (result != NULL); ASSERT (strcmp (result, "129.13.115.2") == 0); } #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inet_pton.c������������������������������������������������������0000664�0000000�0000000�00000003330�14110572173�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of inet_pton function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <arpa/inet.h> #include "signature.h" SIGNATURE_CHECK (inet_pton, int, (int, const char *, void *)); #include <netinet/in.h> #include <sys/socket.h> #include "macros.h" int main (void) { #if defined AF_INET /* HAVE_IPV4 */ { /* This machine was for a long time known as ma2s2.mathematik.uni-karlsruhe.de. */ const char printable[] = "129.13.115.2"; struct in_addr internal; int ret; ret = inet_pton (AF_INET, printable, &internal); ASSERT (ret == 1); /* Verify that internal is filled in network byte order. */ ASSERT (((unsigned char *) &internal)[0] == 0x81); ASSERT (((unsigned char *) &internal)[1] == 0x0D); ASSERT (((unsigned char *) &internal)[2] == 0x73); ASSERT (((unsigned char *) &internal)[3] == 0x02); # ifdef WORDS_BIGENDIAN ASSERT (internal.s_addr == 0x810D7302); # else ASSERT (internal.s_addr == 0x02730D81); # endif } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-init.sh����������������������������������������������������������0000775�0000000�0000000�00000004634�14110572173�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for init.sh # Copyright (C) 2011-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . fail=0 test_compare() { touch empty || fail=1 echo xyz > in || fail=1 compare /dev/null /dev/null >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" # "err" should be empty, too, but has "set -x" output when VERBOSE=yes case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null empty >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare in in >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null in >out 2>err && fail=1 cat <<\EOF > exp diff -u /dev/null in --- /dev/null 1970-01-01 +++ in 1970-01-01 +xyz EOF compare exp out || fail=1 case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare empty in >out 2>err && fail=1 # Compare against expected output only if compare is using diff -u. if grep @ out >/dev/null; then # Remove the TAB-date suffix on each --- and +++ line, # for both the expected and the actual output files. # Also remove the @@ line, since Solaris 5.10 and GNU diff formats differ: # -@@ -0,0 +1 @@ # +@@ -1,0 +1,1 @@ # Also, remove space after leading '+', since AIX 7.1 diff outputs a space. sed 's/ .*//;/^@@/d;s/^+ /+/' out > k && mv k out cat <<\EOF > exp --- empty +++ in +xyz EOF compare exp out || fail=1 fi case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac } test_compare Exit $fail ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ino-map.c��������������������������������������������������������0000664�0000000�0000000�00000002744�14110572173�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the ino-map module. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "ino-map.h" #include "macros.h" int main () { enum { INO_MAP_INIT = 123 }; struct ino_map *ino_map = ino_map_alloc (INO_MAP_INIT); ASSERT (ino_map != NULL); ASSERT (ino_map_insert (ino_map, 42) == INO_MAP_INIT); ASSERT (ino_map_insert (ino_map, 42) == INO_MAP_INIT); ASSERT (ino_map_insert (ino_map, 398) == INO_MAP_INIT + 1); ASSERT (ino_map_insert (ino_map, 398) == INO_MAP_INIT + 1); ASSERT (ino_map_insert (ino_map, 0) == INO_MAP_INIT + 2); ASSERT (ino_map_insert (ino_map, 0) == INO_MAP_INIT + 2); { int i; for (i = 0; i < 100; i++) { ASSERT (ino_map_insert (ino_map, 10000 + i) == INO_MAP_INIT + 3 + i); } } ino_map_free (ino_map); return 0; } ����������������������������gnulib-20210822~d383792/tests/test-integer_length.c�������������������������������������������������0000664�0000000�0000000�00000003447�14110572173�0021570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "integer_length.h" #include <limits.h> #include "macros.h" #define NBITS (sizeof (unsigned int) * CHAR_BIT) static int naive (unsigned int x) { int j; for (j = NBITS - 1; j >= 0; j--) if (x & (1U << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { unsigned int x; int i; for (x = 0; x <= 256; x++) ASSERT (integer_length (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (integer_length (1U << i) == naive (1U << i)); ASSERT (integer_length (1U << i) == i + 1); ASSERT (integer_length (-1U << i) == NBITS); } for (i = 0; i < NBITS - 1; i++) ASSERT (integer_length (3U << i) == i + 2); for (i = 0; i < NBITS - 2; i++) ASSERT (integer_length (-3U << i) == NBITS); for (i = 0; i < NBITS - 2; i++) { ASSERT (integer_length (5U << i) == i + 3); ASSERT (integer_length (7U << i) == i + 3); } for (i = 0; i < NBITS - 3; i++) { ASSERT (integer_length (-5U << i) == NBITS); ASSERT (integer_length (-7U << i) == NBITS); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-integer_length_l.c�����������������������������������������������0000664�0000000�0000000�00000003513�14110572173�0022075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length_l(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "integer_length.h" #include <limits.h> #include "macros.h" #define NBITS (sizeof (unsigned long) * CHAR_BIT) static int naive (unsigned long x) { int j; for (j = NBITS - 1; j >= 0; j--) if (x & (1UL << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { unsigned long x; int i; for (x = 0; x <= 256; x++) ASSERT (integer_length_l (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (integer_length_l (1UL << i) == naive (1UL << i)); ASSERT (integer_length_l (1UL << i) == i + 1); ASSERT (integer_length_l (-1UL << i) == NBITS); } for (i = 0; i < NBITS - 1; i++) ASSERT (integer_length_l (3UL << i) == i + 2); for (i = 0; i < NBITS - 2; i++) ASSERT (integer_length_l (-3UL << i) == NBITS); for (i = 0; i < NBITS - 2; i++) { ASSERT (integer_length_l (5UL << i) == i + 3); ASSERT (integer_length_l (7UL << i) == i + 3); } for (i = 0; i < NBITS - 3; i++) { ASSERT (integer_length_l (-5UL << i) == NBITS); ASSERT (integer_length_l (-7UL << i) == NBITS); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-integer_length_ll.c����������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length_ll(). Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "integer_length.h" #include <limits.h> #include "macros.h" #define NBITS (sizeof (unsigned long long) * CHAR_BIT) static int naive (unsigned long long x) { int j; for (j = NBITS - 1; j >= 0; j--) if (x & (1ULL << j)) return j + 1; return 0; } int main (int argc, char *argv[]) { unsigned long x; int i; for (x = 0; x <= 256; x++) ASSERT (integer_length_ll (x) == naive (x)); for (i = 0; i < NBITS; i++) { ASSERT (integer_length_ll (1ULL << i) == naive (1ULL << i)); ASSERT (integer_length_ll (1ULL << i) == i + 1); ASSERT (integer_length_ll (-1ULL << i) == NBITS); } for (i = 0; i < NBITS - 1; i++) ASSERT (integer_length_ll (3ULL << i) == i + 2); for (i = 0; i < NBITS - 2; i++) ASSERT (integer_length_ll (-3ULL << i) == NBITS); for (i = 0; i < NBITS - 2; i++) { ASSERT (integer_length_ll (5ULL << i) == i + 3); ASSERT (integer_length_ll (7ULL << i) == i + 3); } for (i = 0; i < NBITS - 3; i++) { ASSERT (integer_length_ll (-5ULL << i) == NBITS); ASSERT (integer_length_ll (-7ULL << i) == NBITS); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-intprops.c�������������������������������������������������������0000664�0000000�0000000�00000050173�14110572173�0020446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test intprops.h. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ /* Tell gcc not to warn about the long expressions that the overflow macros expand to, or about the (X < 0) expressions. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" # pragma GCC diagnostic ignored "-Wtype-limits" /* Work around a bug in GCC 6.1 and earlier; see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971 */ # pragma GCC diagnostic ignored "-Woverflow" #endif #include <config.h> #include "intprops.h" #include "verify.h" #include <stdbool.h> #include <inttypes.h> #include <limits.h> #include "macros.h" /* Compile-time verification of expression X. In this file, we need it as a statement, rather than as a declaration. */ #define verify_stmt(x) do { verify (x); } while (0) /* VERIFY (X) uses a static assertion for compilers that are known to work, and falls back on a dynamic assertion for other compilers. These tests should be checkable via 'verify' rather than 'ASSERT', but using 'verify' would run into a bug with HP-UX 11.23 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #if __GNUC__ || __clang__ || __SUNPRO_C # define VERIFY(x) verify_stmt (x) #else # define VERIFY(x) ASSERT (x) #endif #define DONTCARE __LINE__ int int_minus_2 = -2; int int_1 = 1; int main (void) { /* Use VERIFY for tests that must be integer constant expressions, ASSERT otherwise. */ /* TYPE_IS_INTEGER. */ ASSERT (TYPE_IS_INTEGER (bool)); ASSERT (TYPE_IS_INTEGER (char)); ASSERT (TYPE_IS_INTEGER (signed char)); ASSERT (TYPE_IS_INTEGER (unsigned char)); ASSERT (TYPE_IS_INTEGER (short int)); ASSERT (TYPE_IS_INTEGER (unsigned short int)); ASSERT (TYPE_IS_INTEGER (int)); ASSERT (TYPE_IS_INTEGER (unsigned int)); ASSERT (TYPE_IS_INTEGER (long int)); ASSERT (TYPE_IS_INTEGER (unsigned long int)); ASSERT (TYPE_IS_INTEGER (intmax_t)); ASSERT (TYPE_IS_INTEGER (uintmax_t)); ASSERT (! TYPE_IS_INTEGER (float)); ASSERT (! TYPE_IS_INTEGER (double)); ASSERT (! TYPE_IS_INTEGER (long double)); /* TYPE_SIGNED. */ /* VERIFY (! TYPE_SIGNED (bool)); // not guaranteed by gnulib substitute */ VERIFY (TYPE_SIGNED (signed char)); VERIFY (! TYPE_SIGNED (unsigned char)); VERIFY (TYPE_SIGNED (short int)); VERIFY (! TYPE_SIGNED (unsigned short int)); VERIFY (TYPE_SIGNED (int)); VERIFY (! TYPE_SIGNED (unsigned int)); VERIFY (TYPE_SIGNED (long int)); VERIFY (! TYPE_SIGNED (unsigned long int)); VERIFY (TYPE_SIGNED (intmax_t)); VERIFY (! TYPE_SIGNED (uintmax_t)); ASSERT (TYPE_SIGNED (float)); ASSERT (TYPE_SIGNED (double)); ASSERT (TYPE_SIGNED (long double)); /* Integer representation. Check that it is two's complement. */ VERIFY (INT_MIN + INT_MAX < 0); /* TYPE_MINIMUM, TYPE_MAXIMUM. */ VERIFY (TYPE_MINIMUM (char) == CHAR_MIN); VERIFY (TYPE_MAXIMUM (char) == CHAR_MAX); VERIFY (TYPE_MINIMUM (unsigned char) == 0); VERIFY (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); VERIFY (TYPE_MINIMUM (signed char) == SCHAR_MIN); VERIFY (TYPE_MAXIMUM (signed char) == SCHAR_MAX); VERIFY (TYPE_MINIMUM (short int) == SHRT_MIN); VERIFY (TYPE_MAXIMUM (short int) == SHRT_MAX); VERIFY (TYPE_MINIMUM (unsigned short int) == 0); VERIFY (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); VERIFY (TYPE_MINIMUM (int) == INT_MIN); VERIFY (TYPE_MAXIMUM (int) == INT_MAX); VERIFY (TYPE_MINIMUM (unsigned int) == 0); VERIFY (TYPE_MAXIMUM (unsigned int) == UINT_MAX); VERIFY (TYPE_MINIMUM (long int) == LONG_MIN); VERIFY (TYPE_MAXIMUM (long int) == LONG_MAX); VERIFY (TYPE_MINIMUM (unsigned long int) == 0); VERIFY (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); #ifdef LLONG_MAX verify_stmt (TYPE_MINIMUM (long long int) == LLONG_MIN); verify_stmt (TYPE_MAXIMUM (long long int) == LLONG_MAX); verify_stmt (TYPE_MINIMUM (unsigned long long int) == 0); verify_stmt (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); #endif VERIFY (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); VERIFY (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); VERIFY (TYPE_MINIMUM (uintmax_t) == 0); VERIFY (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); /* TYPE_WIDTH. */ #ifdef CHAR_WIDTH verify_stmt (TYPE_WIDTH (char) == CHAR_WIDTH); verify_stmt (TYPE_WIDTH (signed char) == SCHAR_WIDTH); verify_stmt (TYPE_WIDTH (unsigned char) == UCHAR_WIDTH); verify_stmt (TYPE_WIDTH (short int) == SHRT_WIDTH); verify_stmt (TYPE_WIDTH (unsigned short int) == USHRT_WIDTH); verify_stmt (TYPE_WIDTH (int) == INT_WIDTH); verify_stmt (TYPE_WIDTH (unsigned int) == UINT_WIDTH); verify_stmt (TYPE_WIDTH (long int) == LONG_WIDTH); verify_stmt (TYPE_WIDTH (unsigned long int) == ULONG_WIDTH); #ifdef LLONG_WIDTH verify_stmt (TYPE_WIDTH (long long int) == LLONG_WIDTH); verify_stmt (TYPE_WIDTH (unsigned long long int) == ULLONG_WIDTH); #endif #endif /* INT_BITS_STRLEN_BOUND. */ VERIFY (INT_BITS_STRLEN_BOUND (1) == 1); VERIFY (INT_BITS_STRLEN_BOUND (2620) == 789); /* INT_STRLEN_BOUND, INT_BUFSIZE_BOUND. */ #ifdef INT32_MAX /* POSIX guarantees int32_t; this ports to non-POSIX. */ VERIFY (INT_STRLEN_BOUND (int32_t) == sizeof ("-2147483648") - 1); VERIFY (INT_BUFSIZE_BOUND (int32_t) == sizeof ("-2147483648")); #endif #ifdef INT64_MAX VERIFY (INT_STRLEN_BOUND (int64_t) == sizeof ("-9223372036854775808") - 1); VERIFY (INT_BUFSIZE_BOUND (int64_t) == sizeof ("-9223372036854775808")); #endif /* All the INT_<op>_RANGE_OVERFLOW tests are equally valid as 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, 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) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, b, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a, b) == (v)) #define CHECK_SBINOP(op, opname, a, b, t, v, vres) \ CHECK_BINOP(op, opname, a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_##opname##_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) op (b)))); \ } #define CHECK_UNOP(op, opname, a, t, v) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a) == (v)) /* INT_<op>_RANGE_OVERFLOW, INT_<op>_OVERFLOW. */ VERIFY (INT_ADD_RANGE_OVERFLOW (INT_MAX, 1, INT_MIN, INT_MAX)); VERIFY (INT_ADD_OVERFLOW (INT_MAX, 1)); CHECK_SBINOP (+, ADD, INT_MAX, 1, int, true, INT_MIN); CHECK_SBINOP (+, ADD, INT_MAX, -1, int, false, INT_MAX - 1); CHECK_SBINOP (+, ADD, INT_MIN, 1, int, false, INT_MIN + 1); CHECK_SBINOP (+, ADD, INT_MIN, -1, int, true, INT_MAX); CHECK_BINOP (+, ADD, UINT_MAX, 1u, unsigned int, true, 0u); CHECK_BINOP (+, ADD, 0u, 1u, unsigned int, false, 1u); CHECK_SBINOP (-, SUBTRACT, INT_MAX, 1, int, false, INT_MAX - 1); CHECK_SBINOP (-, SUBTRACT, INT_MAX, -1, int, true, INT_MIN); CHECK_SBINOP (-, SUBTRACT, INT_MIN, 1, int, true, INT_MAX); CHECK_SBINOP (-, SUBTRACT, INT_MIN, -1, int, false, INT_MIN - -1); CHECK_BINOP (-, SUBTRACT, UINT_MAX, 1u, unsigned int, false, UINT_MAX - 1u); CHECK_BINOP (-, SUBTRACT, 0u, 1u, unsigned int, true, 0u - 1u); CHECK_UNOP (-, NEGATE, INT_MIN, int, true); CHECK_UNOP (-, NEGATE, 0, int, false); CHECK_UNOP (-, NEGATE, INT_MAX, int, false); CHECK_UNOP (-, NEGATE, 0u, unsigned int, false); CHECK_UNOP (-, NEGATE, 1u, unsigned int, true); CHECK_UNOP (-, NEGATE, UINT_MAX, unsigned int, true); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MAX, int, true, 1); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MIN, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MAX, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MIN, int, true, 0); CHECK_SBINOP (*, MULTIPLY, -1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); #if !defined __HP_cc CHECK_SBINOP (*, MULTIPLY, LONG_MIN / INT_MAX, (long int) INT_MAX, long int, false, LONG_MIN - LONG_MIN % INT_MAX); #endif CHECK_BINOP (/, DIVIDE, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_BINOP (/, DIVIDE, INT_MAX, 1, int, false, INT_MAX); CHECK_BINOP (/, DIVIDE, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN / -1u); CHECK_BINOP (%, REMAINDER, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), 0); CHECK_BINOP (%, REMAINDER, INT_MAX, 1, int, false, 0); CHECK_BINOP (%, REMAINDER, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN % -1u); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX, 1, unsigned int, true, UINT_MAX << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2 + 1, 1, unsigned int, true, (UINT_MAX / 2 + 1) << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2, 1, unsigned int, false, (UINT_MAX / 2) << 1); /* INT_<op>_OVERFLOW and INT_<op>_WRAPV with mixed types. */ #define CHECK_SUM(a, b, t, v, vres) \ CHECK_SUM1 (a, b, t, v, vres); \ CHECK_SUM1 (b, a, t, v, vres) #define CHECK_SUM_WRAPV(a, b, t, v, vres, okres) \ CHECK_SUM_WRAPV1 (a, b, t, v, vres, okres); \ CHECK_SUM_WRAPV1 (b, a, t, v, vres, okres) #define CHECK_SUM1(a, b, t, v, vres) \ VERIFY (INT_ADD_OVERFLOW (a, b) == (v)); \ CHECK_SUM_WRAPV1 (a, b, t, v, vres, (a) + (b)) #define CHECK_SUM_WRAPV1(a, b, t, v, vres, okres) \ { \ t result; \ ASSERT (INT_ADD_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : (okres))); \ } CHECK_SUM (-1, LONG_MIN, long int, true, LONG_MAX); CHECK_SUM (-1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SUM (-1L, INT_MIN, long int, INT_MIN == LONG_MIN, INT_MIN == LONG_MIN ? INT_MAX : DONTCARE); CHECK_SUM (0u, -1, unsigned int, true, 0u + -1); CHECK_SUM (0u, 0, unsigned int, false, DONTCARE); CHECK_SUM (0u, 1, unsigned int, false, DONTCARE); CHECK_SUM (1, LONG_MAX, long int, true, LONG_MIN); CHECK_SUM (1, UINT_MAX, unsigned int, true, 0u); CHECK_SUM (1L, INT_MAX, long int, INT_MAX == LONG_MAX, INT_MAX == LONG_MAX ? INT_MIN : DONTCARE); CHECK_SUM (1u, INT_MAX, unsigned int, INT_MAX == UINT_MAX, 1u + INT_MAX); CHECK_SUM (1u, INT_MIN, unsigned int, true, 1u + INT_MIN); CHECK_SUM_WRAPV (-1, 1u, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-1, 1ul, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-1l, 1u, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-100, 1000u, int, false, DONTCARE, 900); CHECK_SUM_WRAPV (INT_MIN, UINT_MAX, int, false, DONTCARE, INT_MAX); CHECK_SUM_WRAPV (1u, INT_MAX, int, true, INT_MIN, DONTCARE); CHECK_SUM_WRAPV (INT_MAX, 1, long int, LONG_MAX <= INT_MAX, INT_MIN, INT_MAX + 1L); CHECK_SUM_WRAPV (UINT_MAX, 1, long int, LONG_MAX <= UINT_MAX, 0, UINT_MAX + 1L); CHECK_SUM_WRAPV (INT_MAX, 1, unsigned long int, ULONG_MAX <= INT_MAX, 0, INT_MAX + 1uL); CHECK_SUM_WRAPV (UINT_MAX, 1, unsigned long int, ULONG_MAX <= UINT_MAX, 0, UINT_MAX + 1uL); { long int result; ASSERT (INT_ADD_WRAPV (1, INT_MAX, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_ADD_WRAPV (-1, INT_MIN, &result) == (INT_MIN == LONG_MIN)); } #define CHECK_DIFFERENCE(a, b, t, v, vres) \ VERIFY (INT_SUBTRACT_OVERFLOW (a, b) == (v)) #define CHECK_SDIFFERENCE(a, b, t, v, vres) \ CHECK_DIFFERENCE (a, b, t, v, vres); \ CHECK_SDIFFERENCE_WRAPV (a, b, t, v, vres) #define CHECK_SDIFFERENCE_WRAPV(a, b, t, v, vres) \ { \ t result; \ ASSERT (INT_SUBTRACT_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) - (b)))); \ } CHECK_DIFFERENCE (INT_MAX, 1u, unsigned int, UINT_MAX < INT_MAX - 1, INT_MAX - 1u); CHECK_DIFFERENCE (UINT_MAX, 1, unsigned int, false, UINT_MAX - 1); CHECK_DIFFERENCE (0u, -1, unsigned int, false, 0u - -1); CHECK_DIFFERENCE (UINT_MAX, -1, unsigned int, true, UINT_MAX - -1); CHECK_DIFFERENCE (INT_MIN, 1u, unsigned int, true, INT_MIN - 1u); CHECK_DIFFERENCE (-1, 0u, unsigned int, true, -1 - 0u); CHECK_SDIFFERENCE (-1, INT_MIN, int, false, -1 - INT_MIN); CHECK_SDIFFERENCE (-1, INT_MAX, int, false, -1 - INT_MAX); CHECK_SDIFFERENCE (0, INT_MIN, int, INT_MIN < -INT_MAX, INT_MIN); CHECK_SDIFFERENCE (0, INT_MAX, int, false, 0 - INT_MAX); CHECK_SDIFFERENCE_WRAPV (-1, 1u, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (-1, 1ul, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (-1l, 1u, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (0u, INT_MAX, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (1u, INT_MIN, int, true, 1u - INT_MIN); { long int result; ASSERT (INT_SUBTRACT_WRAPV (INT_MAX, -1, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_SUBTRACT_WRAPV (INT_MIN, 1, &result) == (INT_MAX == LONG_MAX)); } #define CHECK_PRODUCT(a, b, t, v, vres) \ CHECK_PRODUCT1 (a, b, t, v, vres); \ CHECK_PRODUCT1 (b, a, t, v, vres) #define CHECK_SPRODUCT(a, b, t, v, vres) \ CHECK_SPRODUCT1 (a, b, t, v, vres); \ CHECK_SPRODUCT1 (b, a, t, v, vres) #define CHECK_SPRODUCT_WRAPV(a, b, t, v, vres) \ CHECK_SPRODUCT_WRAPV1 (a, b, t, v, vres); \ CHECK_SPRODUCT_WRAPV1 (b, a, t, v, vres) #define CHECK_PRODUCT1(a, b, t, v, vres) \ VERIFY (INT_MULTIPLY_OVERFLOW (a, b) == (v)) #define CHECK_SPRODUCT1(a, b, t, v, vres) \ CHECK_PRODUCT1 (a, b, t, v, vres); \ CHECK_SPRODUCT_WRAPV1 (a, b, t, v, vres) #define CHECK_SPRODUCT_WRAPV1(a, b, t, v, vres) \ { \ t result; \ ASSERT (INT_MULTIPLY_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) * (b)))); \ } CHECK_PRODUCT (-1, 1u, unsigned int, true, -1 * 1u); CHECK_SPRODUCT (-1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_PRODUCT (-1, UINT_MAX, unsigned int, true, -1 * UINT_MAX); CHECK_SPRODUCT (-32768, LONG_MAX / -32768 - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (-12345, LONG_MAX / -12345, long int, false, DONTCARE); CHECK_SPRODUCT (0, -1, int, false, DONTCARE); CHECK_SPRODUCT (0, 0, int, false, DONTCARE); CHECK_PRODUCT (0, 0u, unsigned int, false, DONTCARE); CHECK_SPRODUCT (0, 1, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (0, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, -1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0u, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MIN, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (1u, INT_MIN, unsigned int, true, 1u * INT_MIN); CHECK_PRODUCT (1u, INT_MAX, unsigned int, UINT_MAX < INT_MAX, 1u * INT_MAX); CHECK_PRODUCT (INT_MAX, UINT_MAX, unsigned int, true, INT_MAX * UINT_MAX); CHECK_PRODUCT (INT_MAX, ULONG_MAX, unsigned long int, true, INT_MAX * ULONG_MAX); #if !defined __HP_cc CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN, long int, false, DONTCARE); #endif CHECK_PRODUCT (INT_MIN, UINT_MAX, unsigned int, true, INT_MIN * UINT_MAX); CHECK_PRODUCT (INT_MIN, ULONG_MAX, unsigned long int, true, INT_MIN * ULONG_MAX); CHECK_SPRODUCT_WRAPV (-1, INT_MAX + 1u, int, false, DONTCARE); CHECK_SPRODUCT_WRAPV (-1, 1u, int, false, DONTCARE); CHECK_SPRODUCT (0, ULONG_MAX, int, false, DONTCARE); CHECK_SPRODUCT (0u, LONG_MIN, int, false, DONTCARE); { long int result; ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) == (LONG_MAX / INT_MAX < INT_MAX)); ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) || result == INT_MAX * (long int) INT_MAX); ASSERT (INT_MULTIPLY_WRAPV (INT_MIN, INT_MIN, &result) || result == INT_MIN * (long int) INT_MIN); } # ifdef LLONG_MAX { long long int result; ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) == (LLONG_MAX / LONG_MAX < LONG_MAX)); ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) || result == LONG_MAX * (long long int) LONG_MAX); ASSERT (INT_MULTIPLY_WRAPV (LONG_MIN, LONG_MIN, &result) || result == LONG_MIN * (long long int) LONG_MIN); } # endif /* Check for GCC bug 91450. */ { unsigned long long result; ASSERT (INT_MULTIPLY_WRAPV (int_minus_2, int_1, &result) && result == -2); } #define CHECK_QUOTIENT(a, b, v) VERIFY (INT_DIVIDE_OVERFLOW (a, b) == (v)) CHECK_QUOTIENT (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_QUOTIENT (INT_MIN, UINT_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINTMAX_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINT_MAX, false); CHECK_QUOTIENT (-11, 10u, true); CHECK_QUOTIENT (-10, 10u, true); CHECK_QUOTIENT (-9, 10u, false); CHECK_QUOTIENT (11u, -10, true); CHECK_QUOTIENT (10u, -10, true); CHECK_QUOTIENT (9u, -10, false); #define CHECK_REMAINDER(a, b, v) VERIFY (INT_REMAINDER_OVERFLOW (a, b) == (v)) CHECK_REMAINDER (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_REMAINDER (-1, UINT_MAX, true); CHECK_REMAINDER ((intmax_t) -1, UINTMAX_MAX, true); CHECK_REMAINDER (INTMAX_MIN, UINT_MAX, (INTMAX_MAX < UINT_MAX && - (unsigned int) INTMAX_MIN % UINT_MAX != 0)); CHECK_REMAINDER (INT_MIN, ULONG_MAX, INT_MIN % ULONG_MAX != 1); CHECK_REMAINDER (1u, -1, false); CHECK_REMAINDER (37*39u, -39, false); CHECK_REMAINDER (37*39u + 1, -39, true); CHECK_REMAINDER (37*39u - 1, -39, true); CHECK_REMAINDER (LONG_MAX, -INT_MAX, false); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inttostr.c�������������������������������������������������������0000664�0000000�0000000�00000010201�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test inttostr functions, and incidentally, INT_BUFSIZE_BOUND Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "inttostr.h" #include "intprops.h" #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" #define STREQ(a, b) (strcmp (a, b) == 0) #define IS_TIGHT(T) (_GL_SIGNED_TYPE_OR_EXPR (T) == TYPE_SIGNED (T)) #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* Verify that an inttostr function works as advertised. Convert maximum and minimum (per-type, T) values using both snprintf -- with a cast to intmax_t or uintmax_t -- and FN, and compare the resulting strings. Use malloc for the inttostr buffer, so that if we ever exceed the usually-tight INT_BUFSIZE_BOUND, tools like valgrind will detect the failure. */ #define CK(T, Fn) \ do \ { \ char ref[100]; \ char *buf = malloc (INT_BUFSIZE_BOUND (T)); \ char const *p; \ ASSERT (buf); \ *buf = '\0'; \ ASSERT \ ((TYPE_SIGNED (T) \ ? snprintf (ref, sizeof ref, "%jd", (intmax_t) TYPE_MINIMUM (T)) \ : snprintf (ref, sizeof ref, "%ju", (uintmax_t) TYPE_MINIMUM (T))) \ < sizeof ref); \ ASSERT (STREQ ((p = Fn (TYPE_MINIMUM (T), buf)), ref)); \ /* Ensure that INT_BUFSIZE_BOUND is tight for signed types. */ \ ASSERT (! TYPE_SIGNED (T) || (p == buf && *p == '-')); \ ASSERT \ ((TYPE_SIGNED (T) \ ? snprintf (ref, sizeof ref, "%jd", (intmax_t) TYPE_MAXIMUM (T)) \ : snprintf (ref, sizeof ref, "%ju", (uintmax_t) TYPE_MAXIMUM (T))) \ < sizeof ref); \ ASSERT (STREQ ((p = Fn (TYPE_MAXIMUM (T), buf)), ref)); \ /* For unsigned types, the bound is not always tight. */ \ ASSERT (! IS_TIGHT (T) || TYPE_SIGNED (T) \ || (p == buf && ISDIGIT (*p))); \ free (buf); \ } \ while (0) int main (void) { size_t b_size = 2; char *b = malloc (b_size); ASSERT (b); /* Ideally we would rely on the snprintf-posix module, in which case this guard would not be required, but due to limitations in gnulib's implementation (see modules/snprintf-posix), we cannot. */ if (snprintf (b, b_size, "%ju", (uintmax_t) 3) == 1 && b[0] == '3' && b[1] == '\0') { CK (int, inttostr); CK (unsigned int, uinttostr); CK (off_t, offtostr); CK (uintmax_t, umaxtostr); CK (intmax_t, imaxtostr); free (b); return 0; } /* snprintf doesn't accept %ju; skip this test. */ free (b); return 77; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inttypes-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002225�14110572173�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <inttypes.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2017. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <inttypes.h> #include "signature.h" #if GNULIB_TEST_STRTOIMAX SIGNATURE_CHECK (GNULIB_NAMESPACE::strtoimax, intmax_t, (const char *, char **, int)); #endif #if GNULIB_TEST_STRTOUMAX SIGNATURE_CHECK (GNULIB_NAMESPACE::strtoumax, uintmax_t, (const char *, char **, int)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inttypes-c++2.cc�������������������������������������������������0000664�0000000�0000000�00000001541�14110572173�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <inttypes.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if __cplusplus >= 201103 # include <cinttypes> #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-inttypes.c�������������������������������������������������������0000664�0000000�0000000�00000006061�14110572173�0020444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <inttypes.h> substitute. Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc. This 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 <inttypes.h> #include <stddef.h> /* Tests for macros supposed to be defined in inttypes.h. */ const char *k = /* implicit string concatenation */ #ifdef INT8_MAX PRId8 PRIi8 #endif #ifdef UINT8_MAX PRIo8 PRIu8 PRIx8 PRIX8 #endif #ifdef INT16_MAX PRId16 PRIi16 #endif #ifdef UINT16_MAX PRIo16 PRIu16 PRIx16 PRIX16 #endif #ifdef INT32_MAX PRId32 PRIi32 #endif #ifdef UINT32_MAX PRIo32 PRIu32 PRIx32 PRIX32 #endif #ifdef INT64_MAX PRId64 PRIi64 #endif #ifdef UINT64_MAX PRIo64 PRIu64 PRIx64 PRIX64 #endif PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 PRIdLEAST64 PRIiLEAST64 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 PRIdFAST64 PRIiFAST64 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX #ifdef INTPTR_MAX PRIdPTR PRIiPTR #endif #ifdef UINTPTR_MAX PRIoPTR PRIuPTR PRIxPTR PRIXPTR #endif ; const char *l = /* implicit string concatenation */ #ifdef INT8_MAX SCNd8 SCNi8 #endif #ifdef UINT8_MAX SCNo8 SCNu8 SCNx8 #endif #ifdef INT16_MAX SCNd16 SCNi16 #endif #ifdef UINT16_MAX SCNo16 SCNu16 SCNx16 #endif #ifdef INT32_MAX SCNd32 SCNi32 #endif #ifdef UINT32_MAX SCNo32 SCNu32 SCNx32 #endif #ifdef INT64_MAX SCNd64 SCNi64 #endif #ifdef UINT64_MAX SCNo64 SCNu64 SCNx64 #endif SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 SCNdLEAST64 SCNiLEAST64 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 SCNdFAST64 SCNiFAST64 SCNoFAST64 SCNuFAST64 SCNxFAST64 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX #ifdef INTPTR_MAX SCNdPTR SCNiPTR #endif #ifdef UINTPTR_MAX SCNoPTR SCNuPTR SCNxPTR #endif ; int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ioctl.c����������������������������������������������������������0000664�0000000�0000000�00000002415�14110572173�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ioctl() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <sys/ioctl.h> #include "signature.h" SIGNATURE_CHECK (ioctl, int, (int, int, ...)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { #ifdef FIONREAD /* Test behaviour for invalid file descriptors. */ { int value; errno = 0; ASSERT (ioctl (-1, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } { int value; close (99); errno = 0; ASSERT (ioctl (99, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isatty.c���������������������������������������������������������0000664�0000000�0000000�00000004404�14110572173�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test isatty() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (isatty, int, (int)); #include <errno.h> #include <fcntl.h> #include "macros.h" /* The name of the "always silent" device. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # define DEV_NULL "NUL" #else /* Unix API. */ # define DEV_NULL "/dev/null" #endif int main (void) { const char *file = "test-isatty.txt"; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (isatty (-1) == 0); ASSERT (errno == EBADF || errno == 0 /* seen on IRIX 6.5, Solaris 10 */ ); } { close (99); errno = 0; ASSERT (isatty (99) == 0); ASSERT (errno == EBADF || errno == 0 /* seen on IRIX 6.5, Solaris 10 */ ); } /* Test behaviour for regular files. */ { int fd; fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); ASSERT (0 <= fd); ASSERT (write (fd, "hello", 5) == 5); ASSERT (close (fd) == 0); fd = open (file, O_RDONLY); ASSERT (0 <= fd); ASSERT (! isatty (fd)); ASSERT (close (fd) == 0); } /* Test behaviour for pipes. */ { int fd[2]; ASSERT (pipe (fd) == 0); ASSERT (! isatty (fd[0])); ASSERT (! isatty (fd[1])); ASSERT (close (fd[0]) == 0); ASSERT (close (fd[1]) == 0); } /* Test behaviour for /dev/null. */ { int fd; fd = open (DEV_NULL, O_RDONLY); ASSERT (0 <= fd); ASSERT (! isatty (fd)); ASSERT (close (fd) == 0); } ASSERT (unlink (file) == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isblank.c��������������������������������������������������������0000664�0000000�0000000�00000003052�14110572173�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isblank() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <ctype.h> #include "signature.h" SIGNATURE_CHECK (isblank, int, (int)); #include <limits.h> #include <stdio.h> #include "macros.h" int main (int argc, char *argv[]) { unsigned int c; /* Verify the property in the "C" locale. 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. */ for (c = 0; c <= UCHAR_MAX; c++) ASSERT (!isblank (c) == !(c == ' ' || c == '\t')); ASSERT (!isblank (EOF)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isfinite.c�������������������������������������������������������0000664�0000000�0000000�00000016771�14110572173�0020410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isfinite() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Ben Pfaff, 2007, using Bruno Haible's code as a template. */ #include <config.h> #include <math.h> /* isfinite must be a macro. */ #ifndef isfinite # error missing declaration #endif #include <float.h> #include <limits.h> #include "infinity.h" #include "macros.h" float zerof = 0.0f; double zerod = 0.0; long double zerol = 0.0L; static void test_isfinitef () { /* Zero. */ ASSERT (isfinite (0.0f)); /* Subnormal values. */ ASSERT (isfinite (FLT_MIN / 2)); ASSERT (isfinite (-FLT_MIN / 2)); /* Finite values. */ ASSERT (isfinite (3.141f)); ASSERT (isfinite (3.141e30f)); ASSERT (isfinite (3.141e-30f)); ASSERT (isfinite (-2.718f)); ASSERT (isfinite (-2.718e30f)); ASSERT (isfinite (-2.718e-30f)); /* Infinite values. */ ASSERT (!isfinite (Infinityf ())); ASSERT (!isfinite (- Infinityf ())); /* Quiet NaN. */ ASSERT (!isfinite (zerof / zerof)); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* 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; ASSERT (!isfinite (m.value)); #undef NWORDS } #endif } static void test_isfinited () { /* Zero. */ ASSERT (isfinite (0.0)); /* Subnormal values. */ ASSERT (isfinite (DBL_MIN / 2)); ASSERT (isfinite (-DBL_MIN / 2)); /* Finite values. */ ASSERT (isfinite (3.141)); ASSERT (isfinite (3.141e30)); ASSERT (isfinite (3.141e-30)); ASSERT (isfinite (-2.718)); ASSERT (isfinite (-2.718e30)); ASSERT (isfinite (-2.718e-30)); /* Infinite values. */ ASSERT (!isfinite (Infinityd ())); ASSERT (!isfinite (- Infinityd ())); /* Quiet NaN. */ ASSERT (!isfinite (zerod / zerod)); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* 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; ASSERT (!isfinite (m.value)); #undef NWORDS } #endif } static void test_isfinitel () { #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* Zero. */ ASSERT (isfinite (0.0L)); /* Subnormal values. */ ASSERT (isfinite (LDBL_MIN / 2)); ASSERT (isfinite (-LDBL_MIN / 2)); /* Finite values. */ ASSERT (isfinite (3.141L)); ASSERT (isfinite (3.141e30L)); ASSERT (isfinite (3.141e-30L)); ASSERT (isfinite (-2.718L)); ASSERT (isfinite (-2.718e30L)); ASSERT (isfinite (-2.718e-30L)); /* Infinite values. */ ASSERT (!isfinite (Infinityl ())); ASSERT (!isfinite (- Infinityl ())); /* Quiet NaN. */ ASSERT (!isfinite (zerol / zerol)); #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 = 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; ASSERT (!isfinite (m.value)); } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (!isfinite (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (!isfinite (x.value)); } /* isfinite should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isfinite (x.value) || !isfinite (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isfinite (x.value) || !isfinite (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isfinite (x.value) || !isfinite (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isfinite (x.value) || !isfinite (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isfinite (x.value) || !isfinite (x.value)); } #endif #undef NWORDS } int main () { test_isfinitef (); test_isfinited (); test_isfinitel (); return 0; } �������gnulib-20210822~d383792/tests/test-isinf.c����������������������������������������������������������0000664�0000000�0000000�00000017012�14110572173�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isinf() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Ben Pfaff, 2008, using Bruno Haible's code as a template. */ #include <config.h> #include <math.h> /* isinf must be a macro. */ #ifndef isinf # error missing declaration #endif #include <float.h> #include <limits.h> #include "infinity.h" #include "macros.h" float zerof = 0.0f; double zerod = 0.0; long double zerol = 0.0L; static void test_isinff () { /* Zero. */ ASSERT (!isinf (0.0f)); /* Subnormal values. */ ASSERT (!isinf (FLT_MIN / 2)); ASSERT (!isinf (-FLT_MIN / 2)); /* Finite values. */ ASSERT (!isinf (3.141f)); ASSERT (!isinf (3.141e30f)); ASSERT (!isinf (3.141e-30f)); ASSERT (!isinf (-2.718f)); ASSERT (!isinf (-2.718e30f)); ASSERT (!isinf (-2.718e-30f)); ASSERT (!isinf (FLT_MAX)); ASSERT (!isinf (-FLT_MAX)); /* Infinite values. */ ASSERT (isinf (Infinityf ())); ASSERT (isinf (- Infinityf ())); /* Quiet NaN. */ ASSERT (!isinf (zerof / zerof)); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* 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; ASSERT (!isinf (m.value)); #undef NWORDS } #endif } static void test_isinfd () { /* Zero. */ ASSERT (!isinf (0.0)); /* Subnormal values. */ ASSERT (!isinf (DBL_MIN / 2)); ASSERT (!isinf (-DBL_MIN / 2)); /* Finite values. */ ASSERT (!isinf (3.141)); ASSERT (!isinf (3.141e30)); ASSERT (!isinf (3.141e-30)); ASSERT (!isinf (-2.718)); ASSERT (!isinf (-2.718e30)); ASSERT (!isinf (-2.718e-30)); ASSERT (!isinf (DBL_MAX)); ASSERT (!isinf (-DBL_MAX)); /* Infinite values. */ ASSERT (isinf (Infinityd ())); ASSERT (isinf (- Infinityd ())); /* Quiet NaN. */ ASSERT (!isinf (zerod / zerod)); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* 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; ASSERT (!isinf (m.value)); #undef NWORDS } #endif } static void test_isinfl () { #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* Zero. */ ASSERT (!isinf (0.0L)); /* Subnormal values. */ ASSERT (!isinf (LDBL_MIN / 2)); ASSERT (!isinf (-LDBL_MIN / 2)); /* Finite values. */ ASSERT (!isinf (3.141L)); ASSERT (!isinf (3.141e30L)); ASSERT (!isinf (3.141e-30L)); ASSERT (!isinf (-2.718L)); ASSERT (!isinf (-2.718e30L)); ASSERT (!isinf (-2.718e-30L)); ASSERT (!isinf (LDBL_MAX)); ASSERT (!isinf (-LDBL_MAX)); /* Infinite values. */ ASSERT (isinf (Infinityl ())); ASSERT (isinf (- Infinityl ())); /* Quiet NaN. */ ASSERT (!isinf (zerol / zerol)); #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 = 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; ASSERT (!isinf (m.value)); } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (!isinf (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (!isinf (x.value)); } /* isinf should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isinf (x.value) || !isinf (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isinf (x.value) || !isinf (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isinf (x.value) || !isinf (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isinf (x.value) || !isinf (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isinf (x.value) || !isinf (x.value)); } #endif #undef NWORDS } int main () { test_isinff (); test_isinfd (); test_isinfl (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnan.c����������������������������������������������������������0000664�0000000�0000000�00000016074�14110572173�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Ben Pfaff <blp@cs.stanford.edu>, from code by Bruno Haible <bruno@clisp.org>. */ #include <config.h> #include <math.h> /* isnan must be a macro. */ #ifndef isnan # error missing declaration #endif #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" static void test_float (void) { /* Finite values. */ ASSERT (!isnan (3.141f)); ASSERT (!isnan (3.141e30f)); ASSERT (!isnan (3.141e-30f)); ASSERT (!isnan (-2.718f)); ASSERT (!isnan (-2.718e30f)); ASSERT (!isnan (-2.718e-30f)); ASSERT (!isnan (0.0f)); ASSERT (!isnan (minus_zerof)); /* Infinite values. */ ASSERT (!isnan (Infinityf ())); ASSERT (!isnan (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnan (NaNf ())); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDSF \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDSF]; } 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 < NWORDSF / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif if (FLT_EXPBIT0_WORD < NWORDSF / 2) m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; else m.word[0] |= (unsigned int) 1; ASSERT (isnan (m.value)); } #endif } static void test_double (void) { /* Finite values. */ ASSERT (!isnan (3.141)); ASSERT (!isnan (3.141e30)); ASSERT (!isnan (3.141e-30)); ASSERT (!isnan (-2.718)); ASSERT (!isnan (-2.718e30)); ASSERT (!isnan (-2.718e-30)); ASSERT (!isnan (0.0)); ASSERT (!isnan (minus_zerod)); /* Infinite values. */ ASSERT (!isnan (Infinityd ())); ASSERT (!isnan (- Infinityd ())); /* Quiet NaN. */ ASSERT (isnan (NaNd ())); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDSD \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDSD]; } 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 < NWORDSD / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDSD / 2 ? 1 : - 1)] |= (unsigned int) 1 << DBL_EXPBIT0_BIT; ASSERT (isnan (m.value)); } #endif } static void test_long_double (void) { #define NWORDSL \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDSL]; long double value; } memory_long_double; /* Finite values. */ ASSERT (!isnan (3.141L)); ASSERT (!isnan (3.141e30L)); ASSERT (!isnan (3.141e-30L)); ASSERT (!isnan (-2.718L)); ASSERT (!isnan (-2.718e30L)); ASSERT (!isnan (-2.718e-30L)); ASSERT (!isnan (0.0L)); ASSERT (!isnan (minus_zerol)); /* Infinite values. */ ASSERT (!isnan (Infinityl ())); ASSERT (!isnan (- Infinityl ())); /* Quiet NaN. */ ASSERT (isnan (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 NWORDSL #define NWORDSL \ ((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 < NWORDSL / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDSL / 2 ? 1 : - 1)] |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; ASSERT (isnan (m.value)); } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (isnan (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (isnan (x.value)); } /* isnan should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnan (x.value) || !isnan (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnan (x.value) || !isnan (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnan (x.value) || !isnan (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnan (x.value) || !isnan (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnan (x.value) || !isnan (x.value)); } #endif } int main () { test_float (); test_double (); test_long_double (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnand-nolibm.c��������������������������������������������������0000664�0000000�0000000�00000001455�14110572173�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "isnand-nolibm.h" #include "test-isnand.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnand.c���������������������������������������������������������0000664�0000000�0000000�00000001444�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "test-isnand.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnand.h���������������������������������������������������������0000664�0000000�0000000�00000004025�14110572173�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnand (3.141)); ASSERT (!isnand (3.141e30)); ASSERT (!isnand (3.141e-30)); ASSERT (!isnand (-2.718)); ASSERT (!isnand (-2.718e30)); ASSERT (!isnand (-2.718e-30)); ASSERT (!isnand (0.0)); ASSERT (!isnand (minus_zerod)); /* Infinite values. */ ASSERT (!isnand (Infinityd ())); ASSERT (!isnand (- Infinityd ())); /* Quiet NaN. */ ASSERT (isnand (NaNd ())); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* 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)); } #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanf-nolibm.c��������������������������������������������������0000664�0000000�0000000�00000001455�14110572173�0021323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "isnanf-nolibm.h" #include "test-isnanf.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanf.c���������������������������������������������������������0000664�0000000�0000000�00000001444�14110572173�0020043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "test-isnanf.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanf.h���������������������������������������������������������0000664�0000000�0000000�00000004101�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnanf (3.141f)); ASSERT (!isnanf (3.141e30f)); ASSERT (!isnanf (3.141e-30f)); ASSERT (!isnanf (-2.718f)); ASSERT (!isnanf (-2.718e30f)); ASSERT (!isnanf (-2.718e-30f)); ASSERT (!isnanf (0.0f)); ASSERT (!isnanf (minus_zerof)); /* Infinite values. */ ASSERT (!isnanf (Infinityf ())); ASSERT (!isnanf (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnanf (NaNf ())); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* 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)); } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanl-nolibm.c��������������������������������������������������0000664�0000000�0000000�00000001554�14110572173�0021331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 "isnanl-nolibm.h" #include "test-isnanl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanl.c���������������������������������������������������������0000664�0000000�0000000�00000001535�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "test-isnanl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-isnanl.h���������������������������������������������������������0000664�0000000�0000000�00000010777�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.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)); ASSERT (!isnanl (3.141e-30L)); ASSERT (!isnanl (-2.718L)); ASSERT (!isnanl (-2.718e30L)); ASSERT (!isnanl (-2.718e-30L)); ASSERT (!isnanl (0.0L)); ASSERT (!isnanl (minus_zerol)); /* Infinite values. */ ASSERT (!isnanl (Infinityl ())); 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)); } #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 /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { 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) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } #endif return 0; } �gnulib-20210822~d383792/tests/test-iswblank.c�������������������������������������������������������0000664�0000000�0000000�00000002043�14110572173�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswblank() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "macros.h" /* Check that WEOF is defined. */ wint_t e = WEOF; int main (void) { /* Check that the function exist as a function or as a macro. */ (void) iswblank (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswblank (e)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iswdigit.c�������������������������������������������������������0000664�0000000�0000000�00000017056�14110572173�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswdigit() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 (iswdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of iswdigit 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 iswdigit (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 = iswdigit (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. */ { /* 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iswdigit.sh������������������������������������������������������0000775�0000000�0000000�00000001670�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-iswdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-iswdigit${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-iswdigit${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-iswdigit${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-iswdigit${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-iswdigit${EXEEXT} 4 \ || exit 1 fi exit 0 ������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iswxdigit.c������������������������������������������������������0000664�0000000�0000000�00000021362�14110572173�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswxdigit() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 (iswxdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of iswxdigit 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 iswxdigit (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 = iswxdigit (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. */ { /* 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; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-iswxdigit.sh�����������������������������������������������������0000775�0000000�0000000�00000001676�14110572173�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-iswxdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-iswxdigit${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-iswxdigit${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-iswxdigit${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-iswxdigit${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-iswxdigit${EXEEXT} 4 \ || exit 1 fi exit 0 ������������������������������������������������������������������gnulib-20210822~d383792/tests/test-j0.c�������������������������������������������������������������0000664�0000000�0000000�00000002071�14110572173�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of j0() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (j0, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = j0 (x); ASSERT (y >= -0.4025564102 && y <= -0.4025564101); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-j1.c�������������������������������������������������������������0000664�0000000�0000000�00000002067�14110572173�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of j1() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (j1, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = j1 (x); ASSERT (y >= 0.0128210029 && y <= 0.0128210030); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-jn.c�������������������������������������������������������������0000664�0000000�0000000�00000004204�14110572173�0017171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of jn() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (jn, double, (int, double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = jn (0, x); ASSERT (y >= -0.4025564102 && y <= -0.4025564101); /* A particular value. */ x = 3.8; y = jn (1, x); ASSERT (y >= 0.0128210029 && y <= 0.0128210030); /* A particular value. */ x = 3.8; y = jn (2, x); ASSERT (y >= 0.4093043064 && y <= 0.4093043065); /* A particular value. */ x = 3.8; y = jn (3, x); ASSERT (y >= 0.4180256354 && y <= 0.4180256355); /* A particular value. */ x = 3.8; y = jn (4, x); ASSERT (y >= 0.2507361705 && y <= 0.2507361706); /* A particular value. */ x = 3.8; y = jn (5, x); ASSERT (y >= 0.1098399867 && y <= 0.1098399868); /* A particular value. */ x = 3.8; y = jn (6, x); ASSERT (y >= 0.0383164262 && y <= 0.0383164263); /* A particular value. */ x = 3.8; y = jn (7, x); ASSERT (y >= 0.0111592540 && y <= 0.0111592541); /* A particular value. */ x = 3.8; y = jn (8, x); ASSERT (y >= 0.0027966149 && y <= 0.0027966150); /* A particular value. */ x = 3.8; y = jn (9, x); ASSERT (y >= 0.0006159669 && y <= 0.0006159670); /* A particular value. */ x = 3.8; y = jn (10, x); ASSERT (y >= 0.0001211233 && y <= 0.0001211234); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-langinfo-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002012�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <langinfo.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <langinfo.h> #include "signature.h" #if GNULIB_TEST_NL_LANGINFO SIGNATURE_CHECK (GNULIB_NAMESPACE::nl_langinfo, char *, (nl_item)); #endif int main () { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-langinfo.c�������������������������������������������������������0000664�0000000�0000000�00000003572�14110572173�0020366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <langinfo.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <langinfo.h> /* Check that all the nl_item values are defined. */ int items[] = { /* nl_langinfo items of the LC_CTYPE category */ CODESET, /* nl_langinfo items of the LC_NUMERIC category */ RADIXCHAR, THOUSEP, /* nl_langinfo items of the LC_TIME category */ D_T_FMT, D_FMT, T_FMT, T_FMT_AMPM, AM_STR, PM_STR, DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7, ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7, MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7, MON_8, MON_9, MON_10, MON_11, MON_12, ABMON_1, ABMON_2, ABMON_3, ABMON_4, ABMON_5, ABMON_6, ABMON_7, ABMON_8, ABMON_9, ABMON_10, ABMON_11, ABMON_12, ERA, ERA_D_FMT, ERA_D_T_FMT, ERA_T_FMT, ALT_DIGITS, /* nl_langinfo items of the LC_MONETARY category */ CRNCYSTR, /* nl_langinfo items of the LC_MESSAGES category */ YESEXPR, NOEXPR }; int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lchmod.c���������������������������������������������������������0000664�0000000�0000000�00000004605�14110572173�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing the protections of a file. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (lchmod, int, (const char *, mode_t)); #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include "macros.h" #define BASE "test-lchmod." int main (void) { /* Test that lchmod works on regular files. */ { struct stat statbuf; unlink (BASE "file"); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (lchmod (BASE "file", 0400) == 0); ASSERT (stat (BASE "file", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0400); errno = 0; ASSERT (lchmod (BASE "file/", 0600) == -1); ASSERT (errno == ENOTDIR); /* Clean up. */ ASSERT (chmod (BASE "file", 0600) == 0); ASSERT (unlink (BASE "file") == 0); } /* Test that lchmod works on directories. */ { struct stat statbuf; rmdir (BASE "dir"); ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (lchmod (BASE "dir", 0500) == 0); ASSERT (stat (BASE "dir", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0500); ASSERT (lchmod (BASE "dir/", 0700) == 0); /* Clean up. */ ASSERT (rmdir (BASE "dir") == 0); } /* Test that lchmod on symlinks does not modify the symlink target. */ { unlink (BASE "file"); unlink (BASE "link"); if (symlink (BASE "file", BASE "link") == 0) { struct stat statbuf; ASSERT (close (creat (BASE "file", 0600)) == 0); lchmod (BASE "link", 0400); ASSERT (stat (BASE "file", &statbuf) >= 0); ASSERT ((statbuf.st_mode & 0700) == 0600); } /* Clean up. */ unlink (BASE "file"); unlink (BASE "link"); } return 0; } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lchown.c���������������������������������������������������������0000664�0000000�0000000�00000002474�14110572173�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of lchown. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (lchown, int, (char const *, uid_t, gid_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "mgetgroups.h" #include "stat-time.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-lchown.t" #include "test-lchown.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_lchown (lchown, true); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lchown.h���������������������������������������������������������0000664�0000000�0000000�00000023741�14110572173�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of lchown. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include "nap.h" #if !HAVE_GETEGID # define getegid() ((gid_t) -1) #endif #ifndef HAVE_LCHMOD # define HAVE_LCHMOD 0 #endif #ifndef CHOWN_CHANGE_TIME_BUG # define CHOWN_CHANGE_TIME_BUG 0 #endif /* This file is designed to test lchown(n,o,g) and chownat(AT_FDCWD,n,o,g,AT_SYMLINK_NOFOLLOW). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_lchown (int (*func) (char const *, uid_t, gid_t), bool print) { struct stat st1; struct stat st2; gid_t *gids = NULL; int gids_count; int result; /* Solaris 8 is interesting - if the current process belongs to multiple groups, the current directory is owned by a group that the current process belongs to but different than getegid(), and the current directory does not have the S_ISGID bit, then regular files created in the directory belong to the directory's group, but symlinks belong to the current effective group id. If S_ISGID is set, then both files and symlinks belong to the directory's group. However, it is possible to run the testsuite from within a directory owned by a group we don't belong to, in which case all things that we create belong to the current effective gid. So, work around the issues by creating a subdirectory (we are guaranteed that the subdirectory will be owned by one of our current groups), change ownership of that directory to the current effective gid (which will thus succeed), then create all other files within that directory (eliminating questions on whether inheritance or current id triumphs, since the two methods resolve to the same gid). */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (stat (BASE "dir", &st1) == 0); /* Filter out mingw and file systems which have no concept of groups. */ result = func (BASE "dir", st1.st_uid, getegid ()); if (result == -1 && (errno == ENOSYS || errno == EPERM)) { ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: no support for ownership\n", stderr); return 77; } ASSERT (result == 0); ASSERT (close (creat (BASE "dir/file", 0600)) == 0); ASSERT (stat (BASE "dir/file", &st1) == 0); ASSERT (st1.st_uid != (uid_t) -1); ASSERT (st1.st_gid != (gid_t) -1); ASSERT (st1.st_gid == getegid ()); /* Sanity check of error cases. */ errno = 0; ASSERT (func ("", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", -1, -1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/file/", -1, -1) == -1); ASSERT (errno == ENOTDIR); /* Check that -1 does not alter ownership. */ ASSERT (func (BASE "dir/file", -1, st1.st_gid) == 0); ASSERT (func (BASE "dir/file", st1.st_uid, -1) == 0); ASSERT (func (BASE "dir/file", (uid_t) -1, (gid_t) -1) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); /* Even if the values aren't changing, ctime is required to change if at least one argument is not -1. */ nap (); ASSERT (func (BASE "dir/file", st1.st_uid, st1.st_gid) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime < st2.st_ctime || (st1.st_ctime == st2.st_ctime && get_stat_ctime_ns (&st1) < get_stat_ctime_ns (&st2))); /* Test symlink behavior. */ if (symlink ("link", BASE "dir/link2")) { ASSERT (unlink (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } result = func (BASE "dir/link2", -1, -1); if (result == -1 && (errno == ENOSYS || errno == EOPNOTSUPP)) { ASSERT (unlink (BASE "dir/file") == 0); ASSERT (unlink (BASE "dir/link2") == 0); ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: symlink ownership not supported\n", stderr); return 77; } ASSERT (result == 0); errno = 0; ASSERT (func (BASE "dir/link2/", st1.st_uid, st1.st_gid) == -1); ASSERT (errno == ENOENT); ASSERT (symlink ("file", BASE "dir/link") == 0); ASSERT (mkdir (BASE "dir/sub", 0700) == 0); ASSERT (symlink ("sub", BASE "dir/link3") == 0); /* For non-privileged users, lchown can only portably succeed at changing group ownership of a file we own. If we belong to at least two groups, then verifying the correct change is simple. But if we belong to only one group, then we fall back on the other observable effect of lchown: the ctime must be updated. */ gids_count = mgetgroups (NULL, st1.st_gid, &gids); if (1 < gids_count) { ASSERT (gids[1] != st1.st_gid); ASSERT (gids[1] != (gid_t) -1); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); errno = 0; ASSERT (func (BASE "dir/link2/", -1, gids[1]) == -1); ASSERT (errno == ENOTDIR); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (func (BASE "dir/link2", -1, gids[1]) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (gids[1] == st2.st_gid); /* Trailing slash follows through to directory. */ ASSERT (lstat (BASE "dir/link3", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/sub", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (func (BASE "dir/link3/", -1, gids[1]) == 0); ASSERT (lstat (BASE "dir/link3", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (st1.st_gid == st2.st_gid); ASSERT (lstat (BASE "dir/sub", &st2) == 0); ASSERT (st1.st_uid == st2.st_uid); ASSERT (gids[1] == st2.st_gid); } else if (!CHOWN_CHANGE_TIME_BUG || HAVE_LCHMOD) { /* If we don't have lchmod, and lchown fails to change ctime, then we can't test this part of lchown. */ struct stat l1; struct stat l2; ASSERT (stat (BASE "dir/file", &st1) == 0); ASSERT (lstat (BASE "dir/link", &l1) == 0); ASSERT (lstat (BASE "dir/link2", &l2) == 0); nap (); errno = 0; ASSERT (func (BASE "dir/link2/", -1, st1.st_gid) == -1); ASSERT (errno == ENOTDIR); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&st1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (l1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (l2.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l2) == get_stat_ctime_ns (&st2)); ASSERT (func (BASE "dir/link2", -1, st1.st_gid) == 0); ASSERT (stat (BASE "dir/file", &st2) == 0); ASSERT (st1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&st1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link", &st2) == 0); ASSERT (l1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/link2", &st2) == 0); ASSERT (l2.st_ctime < st2.st_ctime || (l2.st_ctime == st2.st_ctime && get_stat_ctime_ns (&l2) < get_stat_ctime_ns (&st2))); /* Trailing slash follows through to directory. */ ASSERT (lstat (BASE "dir/sub", &st1) == 0); ASSERT (lstat (BASE "dir/link3", &l1) == 0); nap (); ASSERT (func (BASE "dir/link3/", -1, st1.st_gid) == 0); ASSERT (lstat (BASE "dir/link3", &st2) == 0); ASSERT (l1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&l1) == get_stat_ctime_ns (&st2)); ASSERT (lstat (BASE "dir/sub", &st2) == 0); ASSERT (st1.st_ctime < st2.st_ctime || (st1.st_ctime == st2.st_ctime && get_stat_ctime_ns (&st1) < get_stat_ctime_ns (&st2))); } /* Cleanup. */ free (gids); ASSERT (unlink (BASE "dir/file") == 0); ASSERT (unlink (BASE "dir/link") == 0); ASSERT (unlink (BASE "dir/link2") == 0); ASSERT (unlink (BASE "dir/link3") == 0); ASSERT (rmdir (BASE "dir/sub") == 0); ASSERT (rmdir (BASE "dir") == 0); return 0; } �������������������������������gnulib-20210822~d383792/tests/test-ldexp-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LDEXP ldexp #include "test-ldexp-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexp-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000003007�14110572173�0020610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int exp; /* [MX] shaded specification in POSIX. */ /* NaN. */ for (exp = -100000; exp <= 100000; exp += 100000) ASSERT (ISNAN (LDEXP (NAN, exp))); /* Signed zero. */ for (exp = -100000; exp <= 100000; exp += 100000) { DOUBLE z = LDEXP (L_(0.0), exp); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } for (exp = -100000; exp <= 100000; exp += 100000) { DOUBLE z = LDEXP (MINUS_ZERO, exp); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } /* Infinity. */ for (exp = -100000; exp <= 100000; exp += 100000) ASSERT (LDEXP (INFINITY, exp) == INFINITY); for (exp = -100000; exp <= 100000; exp += 100000) ASSERT (LDEXP (- INFINITY, exp) == - INFINITY); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexp.c����������������������������������������������������������0000664�0000000�0000000�00000002563�14110572173�0017704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (ldexp, double, (double, int)); #include <float.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define MIN_EXP DBL_MIN_EXP #define MAX_EXP DBL_MAX_EXP #define LDEXP ldexp #define RANDOM randomd #include "test-ldexp.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexp.h����������������������������������������������������������0000664�0000000�0000000�00000007401�14110572173�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp*() function family. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 2010. */ static void test_function (void) { int i; volatile DOUBLE x; volatile DOUBLE y; /* A particular value. */ { x = L_(0.6); y = LDEXP (x, 0); ASSERT (y >= L_(0.5999999999) && y <= L_(0.6000000001)); } { x = L_(0.6); y = LDEXP (x, 1); ASSERT (y >= L_(1.199999999) && y <= L_(1.200000001)); } { x = L_(0.6); y = LDEXP (x, -1); ASSERT (y >= L_(0.2999999999) && y <= L_(0.3000000001)); } { /* NaN. */ x = NAN; y = LDEXP (x, 0); ASSERT (ISNAN (y)); y = LDEXP (x, 5); ASSERT (ISNAN (y)); y = LDEXP (x, -5); ASSERT (ISNAN (y)); } { /* Positive infinity. */ x = INFINITY; y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x); y = LDEXP (x, -5); ASSERT (y == x); } { /* Negative infinity. */ x = - INFINITY; y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x); y = LDEXP (x, -5); ASSERT (y == x); } { /* Positive zero. */ x = L_(0.0); y = LDEXP (x, 0); ASSERT (y == x); ASSERT (!signbit (x)); y = LDEXP (x, 5); ASSERT (y == x); ASSERT (!signbit (x)); y = LDEXP (x, -5); ASSERT (y == x); ASSERT (!signbit (x)); } { /* Negative zero. */ x = MINUS_ZERO; y = LDEXP (x, 0); ASSERT (y == x); ASSERT (signbit (x)); y = LDEXP (x, 5); ASSERT (y == x); ASSERT (signbit (x)); y = LDEXP (x, -5); ASSERT (y == x); ASSERT (signbit (x)); } { /* Positive finite number. */ x = L_(1.73205); y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x * L_(32.0)); y = LDEXP (x, -5); ASSERT (y == x * L_(0.03125)); } { /* Negative finite number. */ x = - L_(20.085536923187667742); y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x * L_(32.0)); y = LDEXP (x, -5); ASSERT (y == x * L_(0.03125)); } for (i = 1, x = L_(1.73205); i <= MAX_EXP; i++, x *= L_(2.0)) { y = LDEXP (x, 0); ASSERT (y == x); { volatile DOUBLE expected; y = LDEXP (x, 5); expected = x * L_(32.0); ASSERT (y == expected); } y = LDEXP (x, -5); ASSERT (y == x * 0.03125L); } for (i = 1, x = L_(1.73205); i >= MIN_EXP; i--, x *= L_(0.5)) { y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x * L_(32.0)); if (i - 5 >= MIN_EXP) { y = LDEXP (x, -5); ASSERT (y == x * L_(0.03125)); } } for (; i >= LDBL_MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = LDEXP (x, 0); ASSERT (y == x); y = LDEXP (x, 5); ASSERT (y == x * L_(32.0)); } /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { int u, v; x = L_(20.0) * RANDOM[i] - L_(10.0); /* -10.0 <= x <= 10.0 */ /* LDEXP only does rounding when it returns a denormalized number or there is underflow. It doesn't happen here. */ for (u = -10; u <= 10; u++) for (v = -10; v <= 10; v++) ASSERT (LDEXP (x, u + v) == LDEXP (LDEXP (x, u), v)); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexpf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexpf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LDEXP ldexpf #include "test-ldexp-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexpf.c���������������������������������������������������������0000664�0000000�0000000�00000002566�14110572173�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexpf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (ldexpf, float, (float, int)); #include <float.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define MIN_EXP FLT_MIN_EXP #define MAX_EXP FLT_MAX_EXP #define LDEXP ldexpf #define RANDOM randomf #include "test-ldexp.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexpl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexpl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LDEXP ldexpl #include "test-ldexp-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ldexpl.c���������������������������������������������������������0000664�0000000�0000000�00000002760�14110572173�0020057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of multiplying a 'long double' by a power of 2. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (ldexpl, long double, (long double, int)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define MIN_EXP LDBL_MIN_EXP #define MAX_EXP LDBL_MAX_EXP #define LDEXP ldexpl #define RANDOM randoml #include "test-ldexp.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_function (); return 0; } ����������������gnulib-20210822~d383792/tests/test-lgamma.c���������������������������������������������������������0000664�0000000�0000000�00000002143�14110572173�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lgamma() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (lgamma, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = lgamma (x); /* Γ(x) = 1.4891922488... */ ASSERT (y >= 0.3982338580 && y <= 0.3982338581); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-libgmp.c���������������������������������������������������������0000664�0000000�0000000�00000004510�14110572173�0020034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of libgmp or its mini-gmp substitute. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <gmp.h> #include <limits.h> #include <string.h> #include "verify.h" #include "macros.h" #ifndef MINI_GMP_LIMB_TYPE /* Verify that the gmp.h header file was generated for the same machine word size as we are using. */ verify (GMP_NUMB_BITS == sizeof (mp_limb_t) * CHAR_BIT); #endif int main () { #ifndef MINI_GMP_LIMB_TYPE /* Verify that the gmp.h header file and the libgmp library come from the same GMP version. */ { char gmp_header_version[32]; sprintf (gmp_header_version, "%d.%d.%d", __GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL); if (strcmp (gmp_version, gmp_header_version) != 0) { char gmp_header_version2[32]; if (__GNU_MP_VERSION_PATCHLEVEL > 0 || (sprintf (gmp_header_version2, "%d.%d", __GNU_MP_VERSION, __GNU_MP_VERSION_MINOR), strcmp (gmp_version, gmp_header_version2) != 0)) { fprintf (stderr, "gmp header version (%s) does not match gmp library version (%s).\n", gmp_header_version, gmp_version); exit (1); } } } #endif /* A simple sanity check that 2 + 2 = 4. */ static mp_limb_t const twobody[] = { 2 }; static mpz_t const two = MPZ_ROINIT_N ((mp_limb_t *) twobody, 1); ASSERT (mpz_fits_slong_p (two)); ASSERT (mpz_get_si (two) == 2); mpz_t four; mpz_init (four); mpz_add (four, two, two); ASSERT (mpz_fits_slong_p (four)); ASSERT (mpz_get_si (four) == 4); mpz_clear (four); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-libtextstyle-default.css�����������������������������������������0000664�0000000�0000000�00000000356�14110572173�0023312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* This file is in the public domain. Styling rules for the color-hello example. */ .name { text-decoration : underline; } .boy-name { background-color : rgb(123,201,249); } .girl-name { background-color : rgb(250,149,158); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-libtextstyle.c���������������������������������������������������0000664�0000000�0000000�00000006030�14110572173�0021315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ad-hoc testing program for GNU libtextstyle. Copyright (C) 2018-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 <textstyle.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main (int argc, char *argv[]) { const char *program_name = argv[0]; int i; /* Parse the command-line arguments. */ for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strncmp (arg, "--color=", 8) == 0) handle_color_option (arg + 8); else if (strncmp (arg, "--style=", 8) == 0) handle_style_option (arg + 8); else if (arg[0] == '-') { fprintf (stderr, "%s: invalid argument: %s\n", program_name, arg); exit (1); } else /* Handle non-option arguments here. */ ; } /* Handle the --color=test special argument. */ if (color_test_mode) { print_color_test (); exit (0); } #if HAVE_LIBTEXTSTYLE if (color_mode == color_yes || (color_mode == color_tty && isatty (STDOUT_FILENO) && getenv ("NO_COLOR") == NULL) || color_mode == color_html) { /* If no style file is explicitly specified, use the default in the source directory. */ if (style_file_name == NULL) style_file_name = SRCDIR "test-libtextstyle-default.css"; } else /* No styling. */ style_file_name = NULL; #endif /* Create a terminal output stream that uses this style file. */ styled_ostream_t stream = (color_mode == color_html ? html_styled_ostream_create (file_ostream_create (stdout), style_file_name) : styled_ostream_create (STDOUT_FILENO, "(stdout)", TTYCTL_AUTO, style_file_name)); ostream_write_str (stream, "Hello "); /* Associate the entire full name in CSS class 'name'. */ styled_ostream_begin_use_class (stream, "name"); ostream_write_str (stream, "Dr. "); styled_ostream_begin_use_class (stream, "boy-name"); ostream_write_str (stream, "Linus"); styled_ostream_end_use_class (stream, "boy-name"); ostream_write_str (stream, " Pauling"); /* Terminate the name. */ styled_ostream_end_use_class (stream, "name"); ostream_write_str (stream, "!\n"); /* Flush and close the terminal stream. */ styled_ostream_free (stream); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-limits-h-c++.cc��������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <limits.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <limits.h> int main () { } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-limits-h-c++2.cc�������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <limits.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <climits> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-limits-h.c�������������������������������������������������������0000664�0000000�0000000�00000010040�14110572173�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <limits.h> substitute. Copyright 2016-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <limits.h> #include "verify.h" #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" #endif #define verify_width(width, min, max) \ verify ((max) >> ((width) - 1 - ((min) < 0)) == 1) /* Macros borrowed from intprops.h. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* Type width macros. */ int type_bits[] = { CHAR_BIT, WORD_BIT, LONG_BIT }; verify_width (CHAR_BIT, CHAR_MIN, CHAR_MAX); verify_width (WORD_BIT, INT_MIN, INT_MAX); verify_width (LONG_BIT, LONG_MIN, LONG_MAX); /* Numerical limit macros. */ char limits1[] = { CHAR_MIN, CHAR_MAX }; verify (TYPE_MINIMUM (char) == CHAR_MIN); verify (TYPE_MAXIMUM (char) == CHAR_MAX); signed char limits2[] = { SCHAR_MIN, SCHAR_MAX }; verify (TYPE_MINIMUM (signed char) == SCHAR_MIN); verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX); unsigned char limits3[] = { UCHAR_MAX }; verify (TYPE_MINIMUM (unsigned char) == 0); verify (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); short limits4[] = { SHRT_MIN, SHRT_MAX }; verify (TYPE_MINIMUM (short int) == SHRT_MIN); verify (TYPE_MAXIMUM (short int) == SHRT_MAX); unsigned short limits5[] = { USHRT_MAX }; verify (TYPE_MINIMUM (unsigned short int) == 0); verify (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); int limits6[] = { INT_MIN, INT_MAX }; verify (TYPE_MINIMUM (int) == INT_MIN); verify (TYPE_MAXIMUM (int) == INT_MAX); unsigned int limits7[] = { UINT_MAX }; verify (TYPE_MINIMUM (unsigned int) == 0); verify (TYPE_MAXIMUM (unsigned int) == UINT_MAX); long limits8[] = { LONG_MIN, LONG_MAX }; verify (TYPE_MINIMUM (long int) == LONG_MIN); verify (TYPE_MAXIMUM (long int) == LONG_MAX); unsigned long limits9[] = { ULONG_MAX }; verify (TYPE_MINIMUM (unsigned long int) == 0); verify (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); long long limits10[] = { LLONG_MIN, LLONG_MAX }; verify (TYPE_MINIMUM (long long int) == LLONG_MIN); verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); unsigned long long limits11[] = { ULLONG_MAX }; verify (TYPE_MINIMUM (unsigned long long int) == 0); verify (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); /* Macros specified by ISO/IEC TS 18661-1:2014. */ verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX); verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); verify_width (UCHAR_WIDTH, 0, UCHAR_MAX); verify_width (SHRT_WIDTH, SHRT_MIN, SHRT_MAX); verify_width (USHRT_WIDTH, 0, USHRT_MAX); verify_width (INT_WIDTH, INT_MIN, INT_MAX); verify_width (UINT_WIDTH, 0, UINT_MAX); verify_width (LONG_WIDTH, LONG_MIN, LONG_MAX); 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. */ int bool_attrs[] = { BOOL_MAX, BOOL_WIDTH }; verify (BOOL_MAX == (((1U << (BOOL_WIDTH - 1)) - 1) * 2) + 1); int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-link.c�����������������������������������������������������������0000664�0000000�0000000�00000002401�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of link() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (link, int, (char const *, char const *)); #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-link.t" #include "test-link.h" int main (void) { /* Remove any garbage left from previous partial runs. */ ignore_value (system ("rm -rf " BASE "*")); return test_link (link, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-link.h�����������������������������������������������������������0000664�0000000�0000000�00000013555�14110572173�0017535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of link() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* This file is designed to test both link(a,b) and linkat(AT_FDCWD,a,AT_FDCWD,b,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping tests with status 77. This test does not try to create hard links to symlinks, but does test other aspects of symlink. */ static int test_link (int (*func) (char const *, char const *), bool print) { int fd; int ret; /* Create first file. */ fd = open (BASE "a", O_CREAT | O_EXCL | O_WRONLY, 0600); ASSERT (0 <= fd); ASSERT (write (fd, "hello", 5) == 5); ASSERT (close (fd) == 0); /* Not all file systems support link. Mingw doesn't have reliable st_nlink on hard links, but our implementation does fail with EPERM on poor file systems, and we can detect the inferior stat() via st_ino. Cygwin 1.5.x copies rather than links files on those file systems, but there, st_nlink and st_ino are reliable. */ ret = func (BASE "a", BASE "b"); if (!ret) { struct stat st; ASSERT (stat (BASE "b", &st) == 0); if (st.st_ino && st.st_nlink != 2) { ASSERT (unlink (BASE "b") == 0); errno = EPERM; ret = -1; } } if (ret == -1) { /* If the device does not support hard links, errno is EPERM on Linux, EOPNOTSUPP on FreeBSD. */ switch (errno) { case EPERM: case EOPNOTSUPP: if (print) fputs ("skipping test: " "hard links not supported on this file system\n", stderr); ASSERT (unlink (BASE "a") == 0); return 77; default: perror ("link"); return 1; } } ASSERT (ret == 0); /* Now, for some behavior tests. Modify the contents of 'b', and ensure that 'a' can see it, both while 'b' exists and after. */ fd = open (BASE "b", O_APPEND | O_WRONLY); ASSERT (0 <= fd); ASSERT (write (fd, "world", 5) == 5); ASSERT (close (fd) == 0); { char buf[11] = { 0 }; fd = open (BASE "a", O_RDONLY); ASSERT (0 <= fd); ASSERT (read (fd, buf, 10) == 10); ASSERT (strcmp (buf, "helloworld") == 0); ASSERT (close (fd) == 0); ASSERT (unlink (BASE "b") == 0); fd = open (BASE "a", O_RDONLY); ASSERT (0 <= fd); ASSERT (read (fd, buf, 10) == 10); ASSERT (strcmp (buf, "helloworld") == 0); ASSERT (close (fd) == 0); } /* Test for various error conditions. */ ASSERT (mkdir (BASE "d", 0700) == 0); errno = 0; ASSERT (func (BASE "a", ".") == -1); ASSERT (errno == EEXIST || errno == EINVAL); errno = 0; ASSERT (func (BASE "a", BASE "a") == -1); ASSERT (errno == EEXIST); ASSERT (func (BASE "a", BASE "b") == 0); errno = 0; ASSERT (func (BASE "a", BASE "b") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func (BASE "a", BASE "d") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func (BASE "c", BASE "e") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "a", BASE "c/.") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "a/", BASE "c") == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); errno = 0; ASSERT (func (BASE "a", BASE "c/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT || errno == EINVAL); /* Most platforms reject hard links to directories, and even on those that do permit it, most users can't create them. We assume that if this test is run as root and we managed to create a hard link, then unlink better be able to clean it up. */ { int result; errno = 0; result = func (BASE "d", BASE "c"); if (result == 0) { /* Probably root on Solaris. */ ASSERT (unlink (BASE "c") == 0); } else { /* Most everyone else. */ ASSERT (errno == EPERM || errno == EACCES || errno == EISDIR); errno = 0; ASSERT (func (BASE "d/.", BASE "c") == -1); ASSERT (errno == EPERM || errno == EACCES || errno == EISDIR || errno == EINVAL); errno = 0; ASSERT (func (BASE "d/.//", BASE "c") == -1); ASSERT (errno == EPERM || errno == EACCES || errno == EISDIR || errno == EINVAL); } } ASSERT (unlink (BASE "a") == 0); errno = 0; ASSERT (unlink (BASE "c") == -1); ASSERT (errno == ENOENT); ASSERT (rmdir (BASE "d") == 0); /* Test invalid use of symlink. */ if (symlink (BASE "a", BASE "link") != 0) { ASSERT (unlink (BASE "b") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "b", BASE "link/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT || errno == EEXIST || errno == EINVAL); errno = 0; ASSERT (func (BASE "b", BASE "link") == -1); ASSERT (errno == EEXIST); ASSERT (rename (BASE "b", BASE "a") == 0); errno = 0; ASSERT (func (BASE "link/", BASE "b") == -1); ASSERT (errno == ENOTDIR || errno == EEXIST || errno == EINVAL); /* Clean up. */ ASSERT (unlink (BASE "a") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-linkat.c���������������������������������������������������������0000664�0000000�0000000�00000032063�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of linkat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (linkat, int, (int, char const *, int, char const *, int)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "areadlink.h" #include "filenamecat.h" #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-linkat.t" #include "test-link.h" static int dfd1 = AT_FDCWD; static int dfd2 = AT_FDCWD; static int flag = AT_SYMLINK_FOLLOW; /* Wrapper to test linkat like link. */ static int do_link (char const *name1, char const *name2) { return linkat (dfd1, name1, dfd2, name2, flag); } /* Can we expect that link() and linkat(), when called on a symlink, increment the link count of that symlink? */ #if LINK_FOLLOWS_SYMLINKS == 0 # define EXPECT_LINK_HARDLINKS_SYMLINKS 1 #elif LINK_FOLLOWS_SYMLINKS == -1 extern int __xpg4; # define EXPECT_LINK_HARDLINKS_SYMLINKS (__xpg4 == 0) #else # define EXPECT_LINK_HARDLINKS_SYMLINKS 0 #endif /* Wrapper to see if two symlinks act the same. */ static void check_same_link (char const *name1, char const *name2) { struct stat st1; struct stat st2; char *contents1; char *contents2; ASSERT (lstat (name1, &st1) == 0); ASSERT (lstat (name2, &st2) == 0); contents1 = areadlink_with_size (name1, st1.st_size); contents2 = areadlink_with_size (name2, st2.st_size); ASSERT (contents1); ASSERT (contents2); ASSERT (strcmp (contents1, contents2) == 0); if (EXPECT_LINK_HARDLINKS_SYMLINKS) ASSERT (SAME_INODE (st1, st2)); free (contents1); free (contents2); } int main (void) { int i; int dfd; char *cwd; int result; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (linkat (-1, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (linkat (99, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (close (creat (BASE "oo", 0600)) == 0); { errno = 0; ASSERT (linkat (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (linkat (AT_FDCWD, BASE "oo", 99, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (unlink (BASE "oo") == 0); /* Test basic link functionality, without mentioning symlinks. */ result = test_link (do_link, true); dfd1 = open (".", O_RDONLY); ASSERT (0 <= dfd1); ASSERT (test_link (do_link, false) == result); dfd2 = dfd1; ASSERT (test_link (do_link, false) == result); dfd1 = AT_FDCWD; ASSERT (test_link (do_link, false) == result); flag = 0; ASSERT (test_link (do_link, false) == result); dfd1 = dfd2; ASSERT (test_link (do_link, false) == result); dfd2 = AT_FDCWD; ASSERT (test_link (do_link, false) == result); ASSERT (close (dfd1) == 0); dfd1 = AT_FDCWD; ASSERT (test_link (do_link, false) == result); /* Create locations to manipulate. */ ASSERT (mkdir (BASE "sub1", 0700) == 0); ASSERT (mkdir (BASE "sub2", 0700) == 0); ASSERT (close (creat (BASE "00", 0600)) == 0); cwd = getcwd (NULL, 0); ASSERT (cwd); dfd = open (BASE "sub1", O_RDONLY); ASSERT (0 <= dfd); ASSERT (chdir (BASE "sub2") == 0); /* There are 16 possible scenarios, based on whether an fd is AT_FDCWD or real, whether a file is absolute or relative, coupled with whether flag is set for 32 iterations. To ensure that we test all of the code paths (rather than triggering early normalization optimizations), we use a loop to repeatedly rename a file in the parent directory, use an fd open on subdirectory 1, all while executing in subdirectory 2; all relative names are thus given with a leading "../". Finally, the last scenario (two relative paths given, neither one AT_FDCWD) has two paths, based on whether the two fds are equivalent, so we do the other variant after the loop. */ for (i = 0; i < 32; i++) { int fd1 = (i & 8) ? dfd : AT_FDCWD; char *file1 = mfile_name_concat ((i & 4) ? ".." : cwd, BASE "xx", NULL); int fd2 = (i & 2) ? dfd : AT_FDCWD; char *file2 = mfile_name_concat ((i & 1) ? ".." : cwd, BASE "xx", NULL); ASSERT (file1); ASSERT (file2); flag = (i & 0x10 ? AT_SYMLINK_FOLLOW : 0); ASSERT (sprintf (strchr (file1, '\0') - 2, "%02d", i) == 2); ASSERT (sprintf (strchr (file2, '\0') - 2, "%02d", i + 1) == 2); ASSERT (linkat (fd1, file1, fd2, file2, flag) == 0); ASSERT (unlinkat (fd1, file1, 0) == 0); free (file1); free (file2); } dfd2 = open ("..", O_RDONLY); ASSERT (0 <= dfd2); ASSERT (linkat (dfd, "../" BASE "32", dfd2, BASE "33", 0) == 0); ASSERT (linkat (dfd, "../" BASE "33", dfd2, BASE "34", AT_SYMLINK_FOLLOW) == 0); ASSERT (close (dfd2) == 0); /* Now we change back to the parent directory, and set dfd to ".", in order to test behavior on symlinks. */ ASSERT (chdir ("..") == 0); ASSERT (close (dfd) == 0); if (symlink (BASE "sub1", BASE "link1")) { ASSERT (unlink (BASE "32") == 0); ASSERT (unlink (BASE "33") == 0); ASSERT (unlink (BASE "34") == 0); ASSERT (rmdir (BASE "sub1") == 0); ASSERT (rmdir (BASE "sub2") == 0); free (cwd); if (!result) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (symlink (BASE "34", BASE "link2") == 0); ASSERT (symlink (BASE "link3", BASE "link3") == 0); ASSERT (symlink (BASE "nowhere", BASE "link4") == 0); /* Link cannot overwrite existing files. */ errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (linkat (dfd, BASE "link1/", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1/", 0) == -1); ASSERT (errno == EEXIST || errno == ENOTDIR); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES); errno = 0; ASSERT (linkat (dfd, BASE "link1/", dfd, BASE "sub1", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES || errno == EINVAL); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1/", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES || errno == EINVAL); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link2", 0) == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link2", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link3", 0) == -1); ASSERT (errno == EEXIST || errno == ELOOP); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link3", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES || errno == ELOOP); errno = 0; ASSERT (linkat (dfd, BASE "link2", dfd, BASE "link3", 0) == -1); ASSERT (errno == EEXIST || errno == ELOOP); errno = 0; ASSERT (linkat (dfd, BASE "link2", dfd, BASE "link3", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == ELOOP); /* AT_SYMLINK_FOLLOW only follows first argument, not second. */ errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link4", 0) == -1); ASSERT (errno == EEXIST); ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link4", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES); errno = 0; ASSERT (linkat (dfd, BASE "34", dfd, BASE "link4", 0) == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (linkat (dfd, BASE "34", dfd, BASE "link4", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EEXIST); /* Trailing slash handling. */ errno = 0; ASSERT (linkat (dfd, BASE "link2/", dfd, BASE "link5", 0) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (linkat (dfd, BASE "link2/", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); errno = 0; ASSERT (linkat (dfd, BASE "link3/", dfd, BASE "link5", 0) == -1); ASSERT (errno == ELOOP); errno = 0; ASSERT (linkat (dfd, BASE "link3/", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ELOOP || errno == EINVAL); errno = 0; ASSERT (linkat (dfd, BASE "link4/", dfd, BASE "link5", 0) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (linkat (dfd, BASE "link4/", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ENOENT || errno == EINVAL); /* Check for hard links to symlinks. */ ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link5", 0) == 0); check_same_link (BASE "link1", BASE "link5"); ASSERT (unlink (BASE "link5") == 0); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == EPERM || errno == EACCES); ASSERT (linkat (dfd, BASE "link2", dfd, BASE "link5", 0) == 0); check_same_link (BASE "link2", BASE "link5"); ASSERT (unlink (BASE "link5") == 0); ASSERT (linkat (dfd, BASE "link2", dfd, BASE "file", AT_SYMLINK_FOLLOW) == 0); errno = 0; ASSERT (areadlink (BASE "file") == NULL); ASSERT (errno == EINVAL); ASSERT (unlink (BASE "file") == 0); ASSERT (linkat (dfd, BASE "link3", dfd, BASE "link5", 0) == 0); check_same_link (BASE "link3", BASE "link5"); ASSERT (unlink (BASE "link5") == 0); errno = 0; ASSERT (linkat (dfd, BASE "link3", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ELOOP); ASSERT (linkat (dfd, BASE "link4", dfd, BASE "link5", 0) == 0); check_same_link (BASE "link4", BASE "link5"); ASSERT (unlink (BASE "link5") == 0); errno = 0; ASSERT (linkat (dfd, BASE "link4", dfd, BASE "link5", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ENOENT); /* Check that symlink to symlink to file is followed all the way. */ ASSERT (symlink (BASE "link2", BASE "link5") == 0); ASSERT (linkat (dfd, BASE "link5", dfd, BASE "link6", 0) == 0); check_same_link (BASE "link5", BASE "link6"); ASSERT (unlink (BASE "link6") == 0); ASSERT (linkat (dfd, BASE "link5", dfd, BASE "file", AT_SYMLINK_FOLLOW) == 0); errno = 0; ASSERT (areadlink (BASE "file") == NULL); ASSERT (errno == EINVAL); ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link5") == 0); ASSERT (symlink (BASE "link3", BASE "link5") == 0); errno = 0; ASSERT (linkat (dfd, BASE "link5", dfd, BASE "file", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ELOOP); ASSERT (unlink (BASE "link5") == 0); ASSERT (symlink (BASE "link4", BASE "link5") == 0); errno = 0; ASSERT (linkat (dfd, BASE "link5", dfd, BASE "file", AT_SYMLINK_FOLLOW) == -1); ASSERT (errno == ENOENT); /* Now for some real fun with directory crossing. */ ASSERT (symlink (cwd, BASE "sub1/link") == 0); ASSERT (symlink (".././/" BASE "sub1/link/" BASE "link2", BASE "sub2/link") == 0); ASSERT (close (dfd) == 0); dfd = open (BASE "sub1", O_RDONLY); ASSERT (0 <= dfd); dfd2 = open (BASE "sub2", O_RDONLY); ASSERT (0 < dfd2); ASSERT (linkat (dfd, "../" BASE "sub2/link", dfd2, "./..//" BASE "sub1/file", AT_SYMLINK_FOLLOW) == 0); errno = 0; ASSERT (areadlink (BASE "sub1/file") == NULL); ASSERT (errno == EINVAL); /* Cleanup. */ ASSERT (close (dfd) == 0); ASSERT (close (dfd2) == 0); ASSERT (unlink (BASE "sub1/file") == 0); ASSERT (unlink (BASE "sub1/link") == 0); ASSERT (unlink (BASE "sub2/link") == 0); ASSERT (unlink (BASE "32") == 0); ASSERT (unlink (BASE "33") == 0); ASSERT (unlink (BASE "34") == 0); ASSERT (rmdir (BASE "sub1") == 0); ASSERT (rmdir (BASE "sub2") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); ASSERT (unlink (BASE "link5") == 0); free (cwd); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-linked_list.c����������������������������������������������������0000664�0000000�0000000�00000045051�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_linked_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "macros.h" static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_LINKED_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-linkedhash_list.c������������������������������������������������0000664�0000000�0000000�00000046354�14110572173�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_linkedhash_list.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_array_list.h" #include "macros.h" static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_LINKEDHASH_LIST, string_equals, string_hash, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_LINKEDHASH_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-linkedhash_map.c�������������������������������������������������0000664�0000000�0000000�00000012321�14110572173�0021530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_linkedhash_map.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_array_map.h" #include "xalloc.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] struct pair { const void *key; const void *value; }; static int cmp_pairs_in_array (const void *pairptr1, const void *pairptr2) { const void *key1 = ((struct pair const *)pairptr1)->key; const void *key2 = ((struct pair const *)pairptr2)->key; return strcmp ((const char *) key1, (const char *) key2); } static void check_equals (gl_map_t map1, gl_map_t map2) { size_t n = gl_map_size (map1); struct pair *pairs_of_map1 = XNMALLOC (n, struct pair); struct pair *pairs_of_map2 = XNMALLOC (n, struct pair); gl_map_iterator_t iter1, iter2; const void *key1; const void *value1; const void *key2; const void *value2; size_t i; iter1 = gl_map_iterator (map1); iter2 = gl_map_iterator (map2); for (i = 0; i < n; i++) { ASSERT (gl_map_iterator_next (&iter1, &key1, &value1)); ASSERT (gl_map_iterator_next (&iter2, &key2, &value2)); pairs_of_map1[i].key = key1; pairs_of_map1[i].value = value1; pairs_of_map2[i].key = key2; pairs_of_map2[i].value = value2; } ASSERT (!gl_map_iterator_next (&iter1, &key1, &value1)); ASSERT (!gl_map_iterator_next (&iter2, &key2, &value2)); gl_map_iterator_free (&iter1); gl_map_iterator_free (&iter2); if (n > 0) { qsort (pairs_of_map1, n, sizeof (struct pair), cmp_pairs_in_array); qsort (pairs_of_map2, n, sizeof (struct pair), cmp_pairs_in_array); } for (i = 0; i < n; i++) { ASSERT (pairs_of_map1[i].key == pairs_of_map2[i].key); ASSERT (pairs_of_map1[i].value == pairs_of_map2[i].value); } free (pairs_of_map2); free (pairs_of_map1); } static void check_all (gl_map_t map1, gl_map_t map2) { check_equals (map1, map2); } int main (int argc, char *argv[]) { gl_map_t map1, map2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_map_nx_create_empty (GL_ARRAY_MAP, string_equals, string_hash, NULL, NULL); ASSERT (map1 != NULL); /* Create map2. */ map2 = gl_map_nx_create_empty (GL_LINKEDHASH_MAP, string_equals, string_hash, NULL, NULL); ASSERT (map2 != NULL); check_all (map1, map2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_map_nx_put (map1, key, value) == gl_map_nx_put (map2, key, value)); check_all (map1, map2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); ASSERT (gl_map_get (map1, key) == gl_map_get (map2, key)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_map_nx_put (map1, key, value) == gl_map_nx_put (map2, key, value)); } break; case 2: { const char *key = RANDOM_OBJECT (); ASSERT (gl_map_remove (map1, key) == gl_map_remove (map2, key)); } break; } check_all (map1, map2); } gl_map_free (map1); gl_map_free (map2); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-linkedhash_set.c�������������������������������������������������0000664�0000000�0000000�00000011077�14110572173�0021555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_linkedhash_set.h" #include <stdlib.h> #include <string.h> #include "gl_array_set.h" #include "xalloc.h" #include "macros.h" static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static int cmp_objects_in_array (const void *objptr1, const void *objptr2) { const void *obj1 = *(const void * const *)objptr1; const void *obj2 = *(const void * const *)objptr2; return strcmp ((const char *) obj1, (const char *) obj2); } static void check_equals (gl_set_t set1, gl_set_t set2) { size_t n = gl_set_size (set1); const void **elements_of_set1 = XNMALLOC (n, const void *); const void **elements_of_set2 = XNMALLOC (n, const void *); gl_set_iterator_t iter1; gl_set_iterator_t iter2; const void *elt1; const void *elt2; size_t i; iter1 = gl_set_iterator (set1); iter2 = gl_set_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_set_iterator_next (&iter1, &elt1)); ASSERT (gl_set_iterator_next (&iter2, &elt2)); elements_of_set1[i] = elt1; elements_of_set2[i] = elt2; } ASSERT (!gl_set_iterator_next (&iter1, &elt1)); ASSERT (!gl_set_iterator_next (&iter2, &elt2)); gl_set_iterator_free (&iter1); gl_set_iterator_free (&iter2); if (n > 0) { qsort (elements_of_set1, n, sizeof (const void *), cmp_objects_in_array); qsort (elements_of_set2, n, sizeof (const void *), cmp_objects_in_array); } for (i = 0; i < n; i++) ASSERT (elements_of_set1[i] == elements_of_set2[i]); free (elements_of_set2); free (elements_of_set1); } static void check_all (gl_set_t set1, gl_set_t set2) { check_equals (set1, set2); } static bool string_equals (const void *elt1, const void *elt2) { return strcmp ((const char *) elt1, (const char *) elt2) == 0; } static size_t string_hashcode (const void *elt) { size_t hashcode = 0; const char *s; for (s = (const char *) elt; *s != '\0'; s++) hashcode += (unsigned char) *s; return hashcode; } int main (int argc, char *argv[]) { gl_set_t set1, set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_set_nx_create_empty (GL_ARRAY_SET, string_equals, string_hashcode, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_set_nx_create_empty (GL_LINKEDHASH_SET, string_equals, string_hashcode, NULL); ASSERT (set2 != NULL); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_set_nx_add (set2, obj)); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_search (set1, obj) == gl_set_search (set2, obj)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_nx_add (set1, obj) == gl_set_nx_add (set2, obj)); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_set_remove (set1, obj) == gl_set_remove (set2, obj)); } break; } check_all (set1, set2); } gl_set_free (set1); gl_set_free (set2); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-list-c++.cc������������������������������������������������������0000664�0000000�0000000�00000004313�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of list data type implementation as a C++ class. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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 "gl_list.hh" #include "gl_array_list.h" #include <string.h> #include "macros.h" static const char A[] = "A"; static const char C[] = "C"; static const char D[] = "D"; int main (int argc, char *argv[]) { gl_List<const char *> list1; list1 = gl_List<const char *> (GL_ARRAY_LIST, NULL, NULL, NULL, true); list1.add_last (A); list1.add_last (C); list1.add_last (D); list1.add_last (C); ASSERT (list1.size () == 4); gl_List<const char *>::iterator iter1 = list1.begin (); { const char *elt; ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "A") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "D") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (!iter1.next (elt)); } gl_List<const char *> list2 = gl_List<const char *> (list1, 1, 3); gl_List<const char *>::iterator iter2 = list2.begin (); { const char *elt; ASSERT (iter2.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (iter2.next (elt)); ASSERT (strcmp (elt, "D") == 0); ASSERT (!iter1.next (elt)); } ASSERT (list2.indexof (A) == (size_t)(-1)); ASSERT (list2.indexof (D) == 1); ASSERT (list2.sortedlist_indexof (strcmp, "A") == (size_t)(-1)); ASSERT (list2.sortedlist_indexof (strcmp, "D") == 1); list2.free (); list1.free (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-listen.c���������������������������������������������������������0000664�0000000�0000000�00000002342�14110572173�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test listen() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (listen, int, (int, int)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (listen (-1, 1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (listen (99 ,1) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-localcharset.c���������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0021226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manual test of localcharset() function. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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/>. */ /* This program prints the result of locale_charset in the current locale. One way to use it is: $ for l in `locale -a`; do echo -n "$l "; LANG=$l ./test-localcharset; done \ | sort -k 2 */ #include <config.h> #include "localcharset.h" #include <locale.h> #include <stdio.h> int main (void) { setlocale (LC_ALL, ""); printf ("%s\n", locale_charset ()); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-locale-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002656�14110572173�0020543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <locale.h> #include "signature.h" #if GNULIB_TEST_LOCALECONV SIGNATURE_CHECK (GNULIB_NAMESPACE::localeconv, struct lconv *, (void)); #endif #if GNULIB_TEST_SETLOCALE SIGNATURE_CHECK (GNULIB_NAMESPACE::setlocale, char *, (int, const char *)); #endif #if 0 SIGNATURE_CHECK (GNULIB_NAMESPACE::newlocale, locale_t, (int, const char *, locale_t)); #endif #if GNULIB_TEST_DUPLOCALE && HAVE_WORKING_DUPLOCALE SIGNATURE_CHECK (GNULIB_NAMESPACE::duplocale, locale_t, (locale_t)); #endif #if 0 SIGNATURE_CHECK (GNULIB_NAMESPACE::freelocale, void, (locale_t)); #endif int main () { } ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-locale-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <clocale> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-locale.c���������������������������������������������������������0000664�0000000�0000000�00000004424�14110572173�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <locale.h> #include "verify.h" int a[] = { LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME }; /* Check that the 'struct lconv' type is defined. */ struct lconv l; int ls; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main () { #if HAVE_WORKING_NEWLOCALE /* Check that the locale_t type and the LC_GLOBAL_LOCALE macro are defined. */ locale_t b = LC_GLOBAL_LOCALE; (void) b; #endif /* Check that 'struct lconv' has the ISO C and POSIX specified members. */ ls += sizeof (*l.decimal_point); ls += sizeof (*l.thousands_sep); ls += sizeof (*l.grouping); ls += sizeof (*l.mon_decimal_point); ls += sizeof (*l.mon_thousands_sep); ls += sizeof (*l.mon_grouping); ls += sizeof (*l.positive_sign); ls += sizeof (*l.negative_sign); ls += sizeof (*l.currency_symbol); ls += sizeof (l.frac_digits); ls += sizeof (l.p_cs_precedes); ls += sizeof (l.p_sign_posn); ls += sizeof (l.p_sep_by_space); ls += sizeof (l.n_cs_precedes); ls += sizeof (l.n_sign_posn); ls += sizeof (l.n_sep_by_space); ls += sizeof (*l.int_curr_symbol); ls += sizeof (l.int_frac_digits); ls += sizeof (l.int_p_cs_precedes); ls += sizeof (l.int_p_sign_posn); ls += sizeof (l.int_p_sep_by_space); ls += sizeof (l.int_n_cs_precedes); ls += sizeof (l.int_n_sign_posn); ls += sizeof (l.int_n_sep_by_space); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-localeconv.c�����������������������������������������������������0000664�0000000�0000000�00000004502�14110572173�0020710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of localeconv() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <locale.h> #include "signature.h" SIGNATURE_CHECK (localeconv, struct lconv *, (void)); #include <limits.h> #include <string.h> #include "macros.h" int main () { /* Test localeconv() result in the "C" locale. */ { struct lconv *l = localeconv (); ASSERT (STREQ (l->decimal_point, ".")); ASSERT (STREQ (l->thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun || defined __CYGWIN__) ASSERT (STREQ (l->grouping, "")); #endif ASSERT (STREQ (l->mon_decimal_point, "")); ASSERT (STREQ (l->mon_thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun || defined __CYGWIN__) ASSERT (STREQ (l->mon_grouping, "")); #endif ASSERT (STREQ (l->positive_sign, "")); ASSERT (STREQ (l->negative_sign, "")); ASSERT (STREQ (l->currency_symbol, "")); ASSERT (l->frac_digits == CHAR_MAX); ASSERT (l->p_cs_precedes == CHAR_MAX); ASSERT (l->p_sign_posn == CHAR_MAX); ASSERT (l->p_sep_by_space == CHAR_MAX); ASSERT (l->n_cs_precedes == CHAR_MAX); ASSERT (l->n_sign_posn == CHAR_MAX); ASSERT (l->n_sep_by_space == CHAR_MAX); ASSERT (STREQ (l->int_curr_symbol, "")); ASSERT (l->int_frac_digits == CHAR_MAX); ASSERT (l->int_p_cs_precedes == CHAR_MAX); ASSERT (l->int_p_sign_posn == CHAR_MAX); ASSERT (l->int_p_sep_by_space == CHAR_MAX); ASSERT (l->int_n_cs_precedes == CHAR_MAX); ASSERT (l->int_n_sign_posn == CHAR_MAX); ASSERT (l->int_n_sep_by_space == CHAR_MAX); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-localename.c�����������������������������������������������������0000664�0000000�0000000�00000060061�14110572173�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_locale_name function and its variants. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "localename.h" #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" #if HAVE_WORKING_NEWLOCALE && HAVE_WORKING_USELOCALE && !HAVE_FAKE_LOCALES # define HAVE_GOOD_USELOCALE 1 #endif #if HAVE_GOOD_USELOCALE static struct { int cat; int mask; const char *string; } const categories[] = { { LC_CTYPE, LC_CTYPE_MASK, "LC_CTYPE" }, { LC_NUMERIC, LC_NUMERIC_MASK, "LC_NUMERIC" }, { LC_TIME, LC_TIME_MASK, "LC_TIME" }, { LC_COLLATE, LC_COLLATE_MASK, "LC_COLLATE" }, { LC_MONETARY, LC_MONETARY_MASK, "LC_MONETARY" }, { LC_MESSAGES, LC_MESSAGES_MASK, "LC_MESSAGES" } # ifdef LC_PAPER , { LC_PAPER, LC_PAPER_MASK, "LC_PAPER" } # endif # ifdef LC_NAME , { LC_NAME, LC_NAME_MASK, "LC_NAME" } # endif # ifdef LC_ADDRESS , { LC_ADDRESS, LC_ADDRESS_MASK, "LC_ADDRESS" } # endif # ifdef LC_TELEPHONE , { LC_TELEPHONE, LC_TELEPHONE_MASK, "LC_TELEPHONE" } # endif # ifdef LC_MEASUREMENT , { LC_MEASUREMENT, LC_MEASUREMENT_MASK, "LC_MEASUREMENT" } # endif # ifdef LC_IDENTIFICATION , { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK, "LC_IDENTIFICATION" } # endif }; #endif /* Test the gl_locale_name() function. */ static void test_locale_name (void) { const char *ret; const char *name; /* Check that gl_locale_name returns non-NULL. */ ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL); /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name returns the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); /* Need also to unset all environment variables that specify standard or non-standard locale categories. Otherwise, on glibc systems, when some of these variables are set and reference a nonexistent locale, the setlocale (LC_ALL, "") call below would fail. */ unsetenv ("LC_COLLATE"); unsetenv ("LC_MONETARY"); unsetenv ("LC_TIME"); unsetenv ("LC_ADDRESS"); unsetenv ("LC_IDENTIFICATION"); unsetenv ("LC_MEASUREMENT"); unsetenv ("LC_NAME"); unsetenv ("LC_PAPER"); 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); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); 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); 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); 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); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 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); 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); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, here, gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") returns NULL and gl_locale_name_posix (LC_CTYPE, "LC_CTYPE") returns either "de_DE" or "de_DE.UTF-8". */ ASSERT (strcmp (name, "de_DE") == 0 || strcmp (name, "de_DE.UTF-8") == 0); #else ASSERT (strcmp (name, "de_DE.UTF-8") == 0); #endif name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } #endif } /* Test the gl_locale_name_thread() function. */ static void test_locale_name_thread (void) { /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_thread returns NULL when no thread locale is set. */ uselocale (LC_GLOBAL_LOCALE); ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that gl_locale_name_thread considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { const char *name; uselocale (locale); name = gl_locale_name_thread (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name_thread distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name_thread (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } /* Check that gl_locale_name_thread returns a string that is allocated with indefinite extent. */ { /* Try many locale names in turn, in order to defeat possible caches. */ static const char * const choices[] = { "C", "POSIX", "af_ZA", "af_ZA.UTF-8", "am_ET", "am_ET.UTF-8", "be_BY", "be_BY.UTF-8", "bg_BG", "bg_BG.UTF-8", "ca_ES", "ca_ES.UTF-8", "cs_CZ", "cs_CZ.UTF-8", "da_DK", "da_DK.UTF-8", "de_AT", "de_AT.UTF-8", "de_CH", "de_CH.UTF-8", "de_DE", "de_DE.UTF-8", "el_GR", "el_GR.UTF-8", "en_AU", "en_AU.UTF-8", "en_CA", "en_CA.UTF-8", "en_GB", "en_GB.UTF-8", "en_IE", "en_IE.UTF-8", "en_NZ", "en_NZ.UTF-8", "en_US", "en_US.UTF-8", "es_ES", "es_ES.UTF-8", "et_EE", "et_EE.UTF-8", "eu_ES", "eu_ES.UTF-8", "fi_FI", "fi_FI.UTF-8", "fr_BE", "fr_BE.UTF-8", "fr_CA", "fr_CA.UTF-8", "fr_CH", "fr_CH.UTF-8", "fr_FR", "fr_FR.UTF-8", "he_IL", "he_IL.UTF-8", "hr_HR", "hr_HR.UTF-8", "hu_HU", "hu_HU.UTF-8", "hy_AM", "is_IS", "is_IS.UTF-8", "it_CH", "it_CH.UTF-8", "it_IT", "it_IT.UTF-8", "ja_JP.UTF-8", "kk_KZ", "kk_KZ.UTF-8", "ko_KR.UTF-8", "lt_LT", "lt_LT.UTF-8", "nl_BE", "nl_BE.UTF-8", "nl_NL", "nl_NL.UTF-8", "no_NO", "no_NO.UTF-8", "pl_PL", "pl_PL.UTF-8", "pt_BR", "pt_BR.UTF-8", "pt_PT", "pt_PT.UTF-8", "ro_RO", "ro_RO.UTF-8", "ru_RU", "ru_RU.UTF-8", "sk_SK", "sk_SK.UTF-8", "sl_SI", "sl_SI.UTF-8", "sv_SE", "sv_SE.UTF-8", "tr_TR", "tr_TR.UTF-8", "uk_UA", "uk_UA.UTF-8", "zh_CN", "zh_CN.UTF-8", "zh_HK", "zh_HK.UTF-8", "zh_TW", "zh_TW.UTF-8" }; /* Remember which locales are available. */ unsigned char /* bool */ available[SIZEOF (choices)]; /* Array of remembered results of gl_locale_name_thread. */ const char *unsaved_names[SIZEOF (choices)][SIZEOF (categories)]; /* Array of remembered results of gl_locale_name_thread, stored in safe memory. */ char *saved_names[SIZEOF (choices)][SIZEOF (categories)]; unsigned int j; for (j = 0; j < SIZEOF (choices); j++) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); available[j] = (locale != NULL); if (locale != NULL) { unsigned int i; uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { unsaved_names[j][i] = gl_locale_name_thread (categories[i].cat, categories[i].string); saved_names[j][i] = strdup (unsaved_names[j][i]); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); } /* Allocate many locales, without freeing them. This is an attempt at overwriting as much of the previously allocated memory as possible. */ for (j = SIZEOF (choices); j > 0; ) { j--; if (available[j]) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); unsigned int i; ASSERT (locale != NULL); uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { const char *name = gl_locale_name_thread (categories[i].cat, categories[i].string); ASSERT (strcmp (unsaved_names[j][i], name) == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); free (saved_names[j][i]); } } } #else /* Check that gl_locale_name_thread always returns NULL. */ ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); #endif } /* Test the gl_locale_name_posix() function. */ static void test_locale_name_posix (void) { const char *ret; const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_posix returns either NULL or the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); /* Need also to unset all environment variables that specify standard or non-standard locale categories. Otherwise, on glibc systems, when some of these variables are set and reference a nonexistent locale, the setlocale (LC_ALL, "") call below would fail. */ unsetenv ("LC_COLLATE"); unsetenv ("LC_MONETARY"); unsetenv ("LC_TIME"); unsetenv ("LC_ADDRESS"); unsetenv ("LC_IDENTIFICATION"); unsetenv ("LC_MEASUREMENT"); unsetenv ("LC_NAME"); unsetenv ("LC_PAPER"); unsetenv ("LC_TELEPHONE"); 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); name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); 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); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); #if defined _WIN32 && !defined __CYGWIN__ ASSERT (strcmp (name, "de_DE") == 0 || strcmp (name, "de_DE.UTF-8") == 0); #else ASSERT (strcmp (name, "de_DE.UTF-8") == 0); #endif name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_posix ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_environ() function. */ static void test_locale_name_environ (void) { const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_environ returns NULL. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); ASSERT (gl_locale_name_environ (LC_NUMERIC, "LC_NUMERIC") == NULL); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_environ ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_default() function. */ static void test_locale_name_default (void) { const char *name = gl_locale_name_default (); ASSERT (name != NULL); /* Only Mac OS X and Windows have a facility for the user to set the default locale. */ #if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __CYGWIN__)) ASSERT (strcmp (name, "C") == 0); #endif #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_default ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); ASSERT (strcmp (gl_locale_name_default (), name) == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } int main () { test_locale_name (); test_locale_name_thread (); test_locale_name_posix (); test_locale_name_environ (); test_locale_name_default (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lock.c�����������������������������������������������������������0000664�0000000�0000000�00000037607�14110572173�0017527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS #if USE_ISOC_THREADS # define TEST_ISOC_THREADS 1 #endif #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_ISOC_AND_POSIX_THREADS # define TEST_ISOC_AND_POSIX_THREADS 1 #endif #if USE_WINDOWS_THREADS # define TEST_WINDOWS_THREADS 1 #endif /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_LOCK 1 #define DO_TEST_RWLOCK 1 #define DO_TEST_RECURSIVE_LOCK 1 #define DO_TEST_ONCE 1 /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !ENABLE_LOCKING # undef USE_ISOC_THREADS # undef USE_POSIX_THREADS # undef USE_ISOC_AND_POSIX_THREADS # undef USE_WINDOWS_THREADS #endif #include "glthread/lock.h" #if !ENABLE_LOCKING # if TEST_ISOC_THREADS # define USE_ISOC_THREADS 1 # endif # if TEST_POSIX_THREADS # define USE_POSIX_THREADS 1 # endif # if TEST_ISOC_AND_POSIX_THREADS # define USE_ISOC_AND_POSIX_THREADS 1 # endif # if TEST_WINDOWS_THREADS # define USE_WINDOWS_THREADS 1 # endif #endif #include "glthread/thread.h" #include "glthread/yield.h" #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "atomic-int-gnulib.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test normal (non-recursive) locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ gl_lock_define_initialized(static, my_lock) static void * lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (lock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (lock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&lock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ----------------- Test read-write (non-recursive) locks ----------------- */ /* Test read-write locks by having several bank accounts and several threads which shuffle around money between the accounts and several other threads that check that all the money is still there. */ gl_rwlock_define_initialized(static, my_rwlock) static void * rwlock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before wrlock\n", gl_thread_self_pointer ()); gl_rwlock_wrlock (my_rwlock); dbgprintf ("Mutator %p after wrlock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_rwlock_unlock (my_rwlock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int rwlock_checker_done; static void * rwlock_checker_thread (void *arg) { while (get_atomic_int_value (&rwlock_checker_done) == 0) { dbgprintf ("Checker %p before check rdlock\n", gl_thread_self_pointer ()); gl_rwlock_rdlock (my_rwlock); check_accounts (); gl_rwlock_unlock (my_rwlock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_rwlock (void) { int i; gl_thread_t checkerthreads[THREAD_COUNT]; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&rwlock_checker_done); set_atomic_int_value (&rwlock_checker_done, 0); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) checkerthreads[i] = gl_thread_create (rwlock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (rwlock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&rwlock_checker_done, 1); for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (checkerthreads[i], NULL); check_accounts (); } /* -------------------------- Test recursive locks -------------------------- */ /* Test recursive locks by having several bank accounts and several threads which shuffle around money between the accounts (recursively) and another thread checking that all the money is still there. */ gl_recursive_lock_define_initialized(static, my_reclock) static void recshuffle (void) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ if (((unsigned int) rand () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); } static void * reclock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { recshuffle (); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int reclock_checker_done; static void * reclock_checker_thread (void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_recursive_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&reclock_checker_done); set_atomic_int_value (&reclock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (reclock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (reclock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&reclock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ------------------------ Test once-only execution ------------------------ */ /* Test once-only execution by having several threads attempt to grab a once-only task simultaneously (triggered by releasing a read-write lock). */ gl_once_define(static, fresh_once) static int ready[THREAD_COUNT]; static gl_lock_t ready_lock[THREAD_COUNT]; #if ENABLE_LOCKING static gl_rwlock_t fire_signal[REPEAT_COUNT]; #else static volatile int fire_signal_state; #endif static gl_once_t once_control; static int performed; gl_lock_define_initialized(static, performed_lock) static void once_execute (void) { gl_lock_lock (performed_lock); performed++; gl_lock_unlock (performed_lock); } static void * once_contender_thread (void *arg) { int id = (int) (intptr_t) arg; int repeat; for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Tell the main thread that we're ready. */ gl_lock_lock (ready_lock[id]); ready[id] = 1; gl_lock_unlock (ready_lock[id]); if (repeat == REPEAT_COUNT) break; dbgprintf ("Contender %p waiting for signal for round %d\n", gl_thread_self_pointer (), repeat); #if ENABLE_LOCKING /* Wait for the signal to go. */ gl_rwlock_rdlock (fire_signal[repeat]); /* And don't hinder the others (if the scheduler is unfair). */ gl_rwlock_unlock (fire_signal[repeat]); #else /* Wait for the signal to go. */ while (fire_signal_state <= repeat) yield (); #endif dbgprintf ("Contender %p got the signal for round %d\n", gl_thread_self_pointer (), repeat); /* Contend for execution. */ gl_once (once_control, once_execute); } return NULL; } static void test_once (void) { int i, repeat; gl_thread_t threads[THREAD_COUNT]; /* Initialize all variables. */ for (i = 0; i < THREAD_COUNT; i++) { ready[i] = 0; gl_lock_init (ready_lock[i]); } #if ENABLE_LOCKING for (i = 0; i < REPEAT_COUNT; i++) gl_rwlock_init (fire_signal[i]); #else fire_signal_state = 0; #endif #if ENABLE_LOCKING /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) gl_rwlock_wrlock (fire_signal[i]); #endif /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (once_contender_thread, (void *) (intptr_t) i); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchronizing for round %d\n", repeat); for (;;) { int ready_count = 0; for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready_count += ready[i]; gl_lock_unlock (ready_lock[i]); } if (ready_count == THREAD_COUNT) break; yield (); } dbgprintf ("Main thread after synchronizing for round %d\n", repeat); if (repeat > 0) { /* Check that exactly one thread executed the once_execute() function. */ if (performed != 1) abort (); } if (repeat == REPEAT_COUNT) break; /* Preparation for the next round: Initialize once_control. */ memcpy (&once_control, &fresh_once, sizeof (gl_once_t)); /* Preparation for the next round: Reset the performed counter. */ performed = 0; /* Preparation for the next round: Reset the ready flags. */ for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready[i] = 0; gl_lock_unlock (ready_lock[i]); } /* Signal all threads simultaneously. */ dbgprintf ("Main thread giving signal for round %d\n", repeat); #if ENABLE_LOCKING gl_rwlock_unlock (fire_signal[repeat]); #else fire_signal_state = repeat + 1; #endif } /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif #if DO_TEST_LOCK printf ("Starting test_lock ..."); fflush (stdout); test_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RWLOCK printf ("Starting test_rwlock ..."); fflush (stdout); test_rwlock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RECURSIVE_LOCK printf ("Starting test_recursive_lock ..."); fflush (stdout); test_recursive_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_ONCE printf ("Starting test_once ..."); fflush (stdout); test_once (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log-ieee.c�������������������������������������������������������0000664�0000000�0000000�00000002206�14110572173�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LOG log #include "test-log-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log-ieee.h�������������������������������������������������������0000664�0000000�0000000�00000002324�14110572173�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Negative arguments. */ ASSERT (ISNAN (LOG (- L_(0.00001)))); ASSERT (ISNAN (LOG (- L_(1.0)))); ASSERT (ISNAN (LOG (- L_(1000000.0)))); ASSERT (ISNAN (LOG (- INFINITY))); /* NaN. */ ASSERT (ISNAN (LOG (NAN))); /* Only rational value. */ { DOUBLE z = LOG (L_(1.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } /* Infinity. */ ASSERT (LOG (INFINITY) == INFINITY); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log.c������������������������������������������������������������0000664�0000000�0000000�00000002445�14110572173�0017350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log, double, (double)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE double #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MINUS_ZERO minus_zerod #define LOG log #define RANDOM randomd #include "test-log.h" int main () { /* A particular value. */ x = 0.6; y = log (x); ASSERT (y >= -0.5108256238 && y <= -0.5108256237); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log.h������������������������������������������������������������0000664�0000000�0000000�00000006604�14110572173�0017356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Pole. */ { DOUBLE z = LOG (L_(0.0)); ASSERT (z == - HUGEVAL); } { DOUBLE z = LOG (MINUS_ZERO); ASSERT (z == - HUGEVAL); } /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in logl.c to 53 bits of precision. */ L_(40.0) #else L_(3.0) #endif : L_(3.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i] + L_(1.0); /* 1.0 <= x <= 17.0 */ DOUBLE y = LOG (x); DOUBLE z = LOG (L_(1.0) / x); DOUBLE err = y + z; ASSERT (y >= L_(0.0)); ASSERT (z <= L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in logl.c to 53 bits of precision. */ L_(85.0) #else L_(7.0) #endif : L_(7.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[i]) - L_(1.0); DOUBLE y = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[j]) - L_(1.0); /* 1/16 <= x,y <= 16 */ DOUBLE z = L_(1.0) / (x * y); /* Approximately x * y * z = 1. */ DOUBLE err = LOG (x) + LOG (y) + LOG (z); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LOG10 log10 #include "test-log10-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000002344�14110572173�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Negative arguments. */ ASSERT (ISNAN (LOG10 (- L_(0.00001)))); ASSERT (ISNAN (LOG10 (- L_(1.0)))); ASSERT (ISNAN (LOG10 (- L_(1000000.0)))); ASSERT (ISNAN (LOG10 (- INFINITY))); /* NaN. */ ASSERT (ISNAN (LOG10 (NAN))); /* Only rational value. */ { DOUBLE z = LOG10 (L_(1.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } /* Infinity. */ ASSERT (LOG10 (INFINITY) == INFINITY); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10.c����������������������������������������������������������0000664�0000000�0000000�00000002461�14110572173�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log10, double, (double)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE double #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MINUS_ZERO minus_zerod #define LOG10 log10 #define RANDOM randomd #include "test-log10.h" int main () { /* A particular value. */ x = 0.6; y = log10 (x); ASSERT (y >= -0.2218487497 && y <= -0.2218487496); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10.h����������������������������������������������������������0000664�0000000�0000000�00000006630�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Pole. */ { DOUBLE z = LOG10 (L_(0.0)); ASSERT (z == - HUGEVAL); } { DOUBLE z = LOG10 (MINUS_ZERO); ASSERT (z == - HUGEVAL); } /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log10l.c to 53 bits of precision. */ L_(18.0) #else L_(3.0) #endif : L_(3.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i] + L_(1.0); /* 1.0 <= x <= 17.0 */ DOUBLE y = LOG10 (x); DOUBLE z = LOG10 (L_(1.0) / x); DOUBLE err = y + z; ASSERT (y >= L_(0.0)); ASSERT (z <= L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log10l.c to 53 bits of precision. */ L_(38.0) #else L_(5.0) #endif : L_(5.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[i]) - L_(1.0); DOUBLE y = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[j]) - L_(1.0); /* 1/16 <= x,y <= 16 */ DOUBLE z = L_(1.0) / (x * y); /* Approximately x * y * z = 1. */ DOUBLE err = LOG10 (x) + LOG10 (y) + LOG10 (z); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10f-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10f() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LOG10 log10f #include "test-log10-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10f.c���������������������������������������������������������0000664�0000000�0000000�00000002470�14110572173�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10f() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log10f, float, (float)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE float #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MINUS_ZERO minus_zerof #define LOG10 log10f #define RANDOM randomf #include "test-log10.h" int main () { /* A particular value. */ x = 0.6f; y = log10f (x); ASSERT (y >= -0.2218488f && y <= -0.2218487f); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10l-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10l() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOG10 log10l #include "test-log10-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log10l.c���������������������������������������������������������0000664�0000000�0000000�00000002636�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10l() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log10l, long double, (long double)); #include <float.h> #include "minus-zero.h" #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define HUGEVAL HUGE_VALL #define MANT_DIG LDBL_MANT_DIG #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOG10 log10l #define RANDOM randoml #include "test-log10.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = log10l (x); ASSERT (y >= -0.2218487497L && y <= -0.2218487496L); test_function (); return 0; } ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1p-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1p() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LOG1P log1p #include "test-log1p-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1p-ieee.h�����������������������������������������������������0000664�0000000�0000000�00000002540�14110572173�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1p*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Negative arguments. */ ASSERT (ISNAN (LOG1P (- L_(1.00001)))); ASSERT (ISNAN (LOG1P (- L_(2.0)))); ASSERT (ISNAN (LOG1P (- L_(1000000.0)))); ASSERT (ISNAN (LOG1P (- INFINITY))); /* NaN. */ ASSERT (ISNAN (LOG1P (NAN))); /* Only rational value. */ { DOUBLE z = LOG1P (L_(0.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = LOG1P (MINUS_ZERO); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } /* Infinity. */ ASSERT (LOG1P (INFINITY) == INFINITY); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1p.c����������������������������������������������������������0000664�0000000�0000000�00000002370�14110572173�0017606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1p() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log1p, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define LOG1P log1p #define RANDOM randomd #include "test-log1p.h" int main () { /* A particular value. */ x = 0.6; y = log1p (x); ASSERT (y >= 0.4700036292 && y <= 0.4700036293); test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1p.h����������������������������������������������������������0000664�0000000�0000000�00000006606�14110572173�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1p*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Pole. */ { DOUBLE z = LOG1P (L_(-1.0)); ASSERT (z == - HUGEVAL); } /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log1pl.c to 53 bits of precision. */ L_(900.0) #else L_(26.0) #endif : L_(13.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = LOG1P (x); DOUBLE z = LOG1P (- x / (L_(1.0) + x)); DOUBLE err = y + z; ASSERT (y >= L_(0.0)); ASSERT (z <= L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log1pl.c to 53 bits of precision. */ L_(1020.0) #else L_(65.0) #endif : L_(61.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[i]) - L_(2.0); DOUBLE y = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[j]) - L_(2.0); /* -15/16 <= x,y <= 15 */ DOUBLE z = L_(1.0) / ((L_(1.0) + x) * (L_(1.0) + y)) - L_(1.0); /* Approximately (1+x) * (1+y) * (1+z) = 1. */ DOUBLE err = LOG1P (x) + LOG1P (y) + LOG1P (z); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1pf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0020655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1pf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LOG1P log1pf #include "test-log1p-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1pf.c���������������������������������������������������������0000664�0000000�0000000�00000002372�14110572173�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1pf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log1pf, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define LOG1P log1pf #define RANDOM randomf #include "test-log1p.h" int main () { /* A particular value. */ x = 0.6f; y = log1pf (x); ASSERT (y >= 0.4700036f && y <= 0.4700037f); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1pl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000002230�14110572173�0020662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1pl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOG1P log1pl #include "test-log1p-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log1pl.c���������������������������������������������������������0000664�0000000�0000000�00000002545�14110572173�0017766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1pl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log1pl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define HUGEVAL HUGE_VALL #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define LOG1P log1pl #define RANDOM randoml #include "test-log1p.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = log1pl (x); ASSERT (y >= 0.4700036292L && y <= 0.4700036293L); test_function (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LOG2 log2 #include "test-log2-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002334�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Negative arguments. */ ASSERT (ISNAN (LOG2 (- L_(0.00001)))); ASSERT (ISNAN (LOG2 (- L_(1.0)))); ASSERT (ISNAN (LOG2 (- L_(1000000.0)))); ASSERT (ISNAN (LOG2 (- INFINITY))); /* NaN. */ ASSERT (ISNAN (LOG2 (NAN))); /* Only rational value. */ { DOUBLE z = LOG2 (L_(1.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } /* Infinity. */ ASSERT (LOG2 (INFINITY) == INFINITY); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2.c�����������������������������������������������������������0000664�0000000�0000000�00000002543�14110572173�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log2, double, (double)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE double #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MAX_EXP DBL_MAX_EXP #define MIN_EXP DBL_MIN_EXP #define MINUS_ZERO minus_zerod #define LOG2 log2 #define RANDOM randomd #include "test-log2.h" int main () { /* A particular value. */ x = 0.6; y = log2 (x); ASSERT (y >= -0.7369655942 && y <= -0.7369655941); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2.h�����������������������������������������������������������0000664�0000000�0000000�00000007761�14110572173�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Pole. */ ASSERT (LOG2 (L_(0.0)) == - HUGEVAL); ASSERT (LOG2 (MINUS_ZERO) == - HUGEVAL); /* Integral values. */ { DOUBLE x = L_(1.0); DOUBLE y = LOG2 (x); ASSERT (y == L_(0.0)); } { int e; DOUBLE x; DOUBLE y; for (e = 0, x = L_(0.0), y = L_(1.0); e <= MAX_EXP - 1; e++, x = x + L_(1.0), y = y * L_(2.0)) { /* Invariant: x = e, y = 2^e. */ DOUBLE z = LOG2 (y); ASSERT (z == x); } } { int e; DOUBLE x; DOUBLE y; for (e = 0, x = L_(0.0), y = L_(1.0); e >= MIN_EXP - 1; e--, x = x - L_(1.0), y = y * L_(0.5)) { /* Invariant: x = e, y = 2^e. */ DOUBLE z = LOG2 (y); ASSERT (z == x); } } /* Randomized tests. */ { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log2l.c to 53 bits of precision. */ L_(8193.0) #else L_(5.0) #endif : L_(5.0)); for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i] + L_(1.0); /* 1.0 <= x <= 17.0 */ DOUBLE y = LOG2 (x); DOUBLE z = LOG2 (L_(1.0) / x); DOUBLE err = y + z; ASSERT (y >= L_(0.0)); ASSERT (z <= L_(0.0)); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } { /* Error bound, in ulps. */ const DOUBLE err_bound = (sizeof (DOUBLE) > sizeof (double) ? #if defined __i386__ && defined __FreeBSD__ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. The compiler has truncated all 'long double' literals in log2l.c to 53 bits of precision. */ L_(8193.0) #else L_(9.0) #endif : L_(9.0)); for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[i]) - L_(1.0); DOUBLE y = L_(17.0) / (L_(16.0) - L_(15.0) * RANDOM[j]) - L_(1.0); /* 1/16 <= x,y <= 16 */ DOUBLE z = L_(1.0) / (x * y); /* Approximately x * y * z = 1. */ DOUBLE err = LOG2 (x) + LOG2 (y) + LOG2 (z); ASSERT (err > - err_bound / TWO_MANT_DIG && err < err_bound / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ���������������gnulib-20210822~d383792/tests/test-log2f-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2f() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LOG2 log2f #include "test-log2-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2f.c����������������������������������������������������������0000664�0000000�0000000�00000002541�14110572173�0017575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2f() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log2f, float, (float)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE float #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MAX_EXP FLT_MAX_EXP #define MIN_EXP FLT_MIN_EXP #define MINUS_ZERO minus_zerof #define LOG2 log2f #define RANDOM randomf #include "test-log2.h" int main () { /* A particular value. */ x = 0.6f; y = log2f (x); ASSERT (y >= -0.73697f && y <= -0.73696f); test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2l-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2l() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOG2 log2l #include "test-log2-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-log2l.c����������������������������������������������������������0000664�0000000�0000000�00000002722�14110572173�0017604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log2l() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (log2l, long double, (long double)); #include <float.h> #include "fpucw.h" #include "minus-zero.h" #include "macros.h" #define DOUBLE long double #define HUGEVAL HUGE_VALL #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MAX_EXP LDBL_MAX_EXP #define MIN_EXP LDBL_MIN_EXP #define MINUS_ZERO minus_zerol #define LOG2 log2l #define RANDOM randoml #include "test-log2.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = log2l (x); ASSERT (y >= -0.7369655942L && y <= -0.7369655941L); test_function (); return 0; } ����������������������������������������������gnulib-20210822~d383792/tests/test-logb-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logb() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define LOGB logb #include "test-logb-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logb-ieee.h������������������������������������������������������0000664�0000000�0000000�00000001716�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1b*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (LOGB (NAN))); /* Infinity. */ ASSERT (LOGB (INFINITY) == INFINITY); ASSERT (LOGB (- INFINITY) == INFINITY); } ��������������������������������������������������gnulib-20210822~d383792/tests/test-logb.c�����������������������������������������������������������0000664�0000000�0000000�00000003174�14110572173�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logb() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (logb, double, (double)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE double /* The use of 'volatile' guarantees that excess precision bits are dropped when dealing with denormalized numbers. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ #define VOLATILE volatile #define HUGEVAL HUGE_VAL #define L_(literal) literal #define MINUS_ZERO minus_zerod #define MAX_EXP DBL_MAX_EXP #define MIN_EXP DBL_MIN_EXP #define MIN_NORMAL_EXP DBL_MIN_EXP #define LOGB logb #define RANDOM randomd #include "test-logb.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logb.h�����������������������������������������������������������0000664�0000000�0000000�00000007062�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logb*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static DOUBLE my_ldexp (DOUBLE x, int d) { for (; d > 0; d--) x *= L_(2.0); for (; d < 0; d++) x *= L_(0.5); return x; } static void test_function (void) { int i; VOLATILE DOUBLE x; DOUBLE y; /* Some particular values. */ x = L_(0.6); y = LOGB (x); ASSERT (y == - L_(1.0)); x = L_(1.2); y = LOGB (x); ASSERT (y == L_(0.0)); x = L_(2.1); y = LOGB (x); ASSERT (y == L_(1.0)); x = L_(3.9); y = LOGB (x); ASSERT (y == L_(1.0)); x = L_(4.0); y = LOGB (x); ASSERT (y == (FLT_RADIX == 2 ? L_(2.0) : L_(1.0))); x = L_(0.25); y = LOGB (x); ASSERT (y == (FLT_RADIX == 2 ? - L_(2.0) : - L_(1.0))); /* Zero. */ ASSERT (LOGB (L_(0.0)) == - HUGEVAL); ASSERT (LOGB (MINUS_ZERO) == - HUGEVAL); /* From here on, this test assumes FLT_RADIX == 2. */ for (i = 1, x = L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = - L_(1.0); i <= MAX_EXP; i++, x *= L_(2.0)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = - L_(1.0); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (; i >= MIN_EXP - 100 && x < L_(0.0); i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = L_(1.01); i <= MAX_EXP; i++, x *= L_(2.0)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = L_(1.01); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = L_(1.73205); i <= MAX_EXP; i++, x *= L_(2.0)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (i = 1, x = L_(1.73205); i >= MIN_NORMAL_EXP; i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1)); } for (; i >= MIN_EXP - 100 && x > L_(0.0); i--, x *= L_(0.5)) { y = LOGB (x); ASSERT (y == (DOUBLE)(i - 1) || y == (DOUBLE)i); } /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { x = L_(20.0) * RANDOM[i] - L_(10.0); /* -10.0 <= x <= 10.0 */ if (x != L_(0.0)) { DOUBLE abs_x = (x < L_(0.0) ? - x : x); y = LOGB (x); ASSERT (y == (DOUBLE) (int) y); ASSERT (abs_x >= my_ldexp (L_(1.0), (int) y)); ASSERT (abs_x < my_ldexp (L_(1.0), (int) y + 1)); } } } volatile DOUBLE x; DOUBLE y; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logbf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logbf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LOGB logbf #include "test-logb-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logbf.c����������������������������������������������������������0000664�0000000�0000000�00000002430�14110572173�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logbf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (logbf, float, (float)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE float #define VOLATILE volatile #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define MAX_EXP FLT_MAX_EXP #define MIN_EXP FLT_MIN_EXP #define MIN_NORMAL_EXP FLT_MIN_EXP #define LOGB logbf #define RANDOM randomf #include "test-logb.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logbl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logbl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOGB logbl #include "test-logb-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logbl.c����������������������������������������������������������0000664�0000000�0000000�00000003475�14110572173�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logbl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (logbl, long double, (long double)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE long double #define VOLATILE #define HUGEVAL HUGE_VALL #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define MAX_EXP LDBL_MAX_EXP #define MIN_EXP LDBL_MIN_EXP /* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -964. Similarly, on PowerPC machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -968. For exponents below that, the precision may be truncated to the precision used for 'double'. */ #ifdef __sgi # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) #elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) #else # define MIN_NORMAL_EXP LDBL_MIN_EXP #endif #define LOGB logbl #define RANDOM randoml #include "test-logb.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logf-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define LOG logf #include "test-log-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logf.c�����������������������������������������������������������0000664�0000000�0000000�00000002454�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (logf, float, (float)); #include <float.h> #include "minus-zero.h" #include "macros.h" #define DOUBLE float #define HUGEVAL HUGE_VALF #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MINUS_ZERO minus_zerof #define LOG logf #define RANDOM randomf #include "test-log.h" int main () { /* A particular value. */ x = 0.6f; y = logf (x); ASSERT (y >= -0.5108257f && y <= -0.5108256f); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-login_tty.c������������������������������������������������������0000664�0000000�0000000�00000003651�14110572173�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of login_tty() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ extern int login_tty (int); #include <errno.h> #include <pty.h> #include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> int main () { int master; int slave; /* Open a pseudo-terminal, as a master-slave pair. */ { int res = openpty (&master, &slave, NULL, NULL, NULL); if (res != 0) { fprintf (stderr, "openpty returned %d\n", res); return 1; } } /* Create a new session and make it the controlling tty of this session. */ { int res = login_tty (slave); if (res < 0) { fprintf (stderr, "login_tty failed\n"); return 1; } } /* From here on, we cannot use stderr for error messages any more. If a test fails, just abort. */ /* Check that fd = 0, 1, 2 are now open to the controlling terminal for the current process and that it is a session of its own. */ { int fd; for (fd = 0; fd < 3; fd++) if (!(tcgetpgrp (fd) == getpid ())) abort (); for (fd = 0; fd < 3; fd++) { int sid = tcgetsid (fd); if (!(sid == -1 ? errno == ENOSYS : sid == getpid ())) abort (); } } return 0; } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logl-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002220�14110572173�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define LOG logl #include "test-log-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-logl.c�����������������������������������������������������������0000664�0000000�0000000�00000002622�14110572173�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (logl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "minus-zero.h" #include "macros.h" #define DOUBLE long double #define HUGEVAL HUGE_VALL #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MINUS_ZERO minus_zerol #define LOG logl #define RANDOM randoml #include "test-log.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = logl (x); ASSERT (y >= -0.5108256238L && y <= -0.5108256237L); test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lseek.c����������������������������������������������������������0000664�0000000�0000000�00000006323�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lseek() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Eric Blake, 2007. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (lseek, off_t, (int, off_t, int)); #include <errno.h> #include "macros.h" /* ARGC must be 2; *ARGV[1] is '0' if stdin and stdout are files, '1' if they are pipes, and '2' if they are closed. Check for proper semantics of lseek. */ int main (int argc, char **argv) { if (argc != 2) return 2; switch (*argv[1]) { case '0': /* regular files */ ASSERT (lseek (0, (off_t)2, SEEK_SET) == 2); ASSERT (lseek (0, (off_t)-4, SEEK_CUR) == -1); ASSERT (errno == EINVAL); errno = 0; #if ! defined __BEOS__ /* POSIX says that the last lseek call, when failing, does not change the current offset. But BeOS sets it to 0. */ ASSERT (lseek (0, (off_t)0, SEEK_CUR) == 2); #endif #if 0 /* leads to SIGSYS on IRIX 6.5 */ ASSERT (lseek (0, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1); ASSERT (errno == EINVAL); #endif ASSERT (lseek (1, (off_t)2, SEEK_SET) == 2); errno = 0; ASSERT (lseek (1, (off_t)-4, SEEK_CUR) == -1); ASSERT (errno == EINVAL); errno = 0; #if ! defined __BEOS__ /* POSIX says that the last lseek call, when failing, does not change the current offset. But BeOS sets it to 0. */ ASSERT (lseek (1, (off_t)0, SEEK_CUR) == 2); #endif #if 0 /* leads to SIGSYS on IRIX 6.5 */ ASSERT (lseek (1, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1); ASSERT (errno == EINVAL); #endif break; case '1': /* pipes */ errno = 0; ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == ESPIPE); errno = 0; ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == ESPIPE); break; case '2': /* closed */ /* Explicitly close file descriptors 0 and 1. The <&- and >&- in the invoking shell are not enough on HP-UX. */ close (0); close (1); errno = 0; ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == EBADF); /* Test behaviour for invalid file descriptors. */ errno = 0; ASSERT (lseek (-1, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == EBADF); close (99); errno = 0; ASSERT (lseek (99, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == EBADF); break; default: return 1; } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lseek.sh���������������������������������������������������������0000775�0000000�0000000�00000000650�14110572173�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles= trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles=t-lseek.tmp # seekable files ${CHECKER} ./test-lseek${EXEEXT} 0 < "$srcdir/test-lseek.sh" > t-lseek.tmp || exit 1 # pipes echo hi | { ${CHECKER} ./test-lseek${EXEEXT} 1; echo $? > t-lseek.tmp; cat > /dev/null; } | cat test "`cat t-lseek.tmp`" = "0" || exit 1 # closed descriptors ${CHECKER} ./test-lseek${EXEEXT} 2 <&- >&- || exit 1 rm -rf $tmpfiles exit 0 ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lstat.c����������������������������������������������������������0000664�0000000�0000000�00000003406�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson, 2008; and Eric Blake, 2009. */ #include <config.h> #include <sys/stat.h> /* Caution: lstat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) lstat rather than rpl_lstat. Most code should not use the address of lstat. */ #include "signature.h" SIGNATURE_CHECK (lstat, int, (char const *, struct stat *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-lstat.t" #include "test-lstat.h" /* Wrapper around lstat, which works even if lstat is a function-like macro, where test_lstat_func(lstat) would do the wrong thing. */ static int do_lstat (char const *name, struct stat *st) { return lstat (name, st); } int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_lstat_func (do_lstat, true); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lstat.h����������������������������������������������������������0000664�0000000�0000000�00000007651�14110572173�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson, 2008; and Eric Blake, 2009. */ /* This file is designed to test both lstat(n,buf) and fstatat(AT_FDCWD,n,buf,AT_SYMLINK_NOFOLLOW). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_lstat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; /* Test for common directories. */ ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (SAME_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)); #endif ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("..", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); /* Test for error conditions. */ errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); ASSERT (S_ISREG (st1.st_mode)); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior both with and without trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (stat (BASE "link1", &st2) == 0); 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)); #endif ASSERT (func (BASE "link2", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "link3", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (func (BASE "link4", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); return 0; } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-lutimens.h�������������������������������������������������������0000664�0000000�0000000�00000015734�14110572173�0020441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "test-utimens-common.h" /* This file is designed to test both lutimens(a,b) and utimensat(AT_FDCWD,a,b,AT_SYMLINK_NOFOLLOW). FUNC is the function to test. Assumes that BASE and ASSERT are already defined. If PRINT, warn before skipping tests with status 77. */ static int test_lutimens (int (*func) (char const *, struct timespec const *), bool print) { int result; int saved_errno; struct stat st1; struct stat st2; bool atime_supported = true; /* Non-symlinks should be handled just like utimens. */ errno = 0; ASSERT (func ("no_such", NULL) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", NULL) == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); errno = 0; ASSERT (func ("", NULL) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (stat (BASE "file", &st1) == 0); ASSERT (st1.st_atime != Y2K); ASSERT (st1.st_mtime != Y2K); { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; errno = 0; ASSERT (func (BASE "file/", ts) == -1); ASSERT (errno == ENOTDIR); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st1.st_atime == st2.st_atime); ASSERT (st1.st_mtime == st2.st_mtime); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; nap (); ASSERT (func (BASE "file", ts) == 0); } ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st2.st_atime == Y2K); ASSERT (st2.st_mtime == Y2K); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); /* Play with symlink timestamps. */ if (symlink (BASE "file", BASE "link")) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; result = func (BASE "link", NULL); saved_errno = errno; /* Make sure we did not reference through link by accident. */ ASSERT (stat (BASE "file", &st1) == 0); ASSERT (st1.st_atime == Y2K); ASSERT (st1.st_mtime == Y2K); ASSERT (lstat (BASE "link", &st1) == 0); ASSERT (st1.st_atime != Y2K); ASSERT (st1.st_mtime != Y2K); ASSERT (unlink (BASE "file") == 0); if (result == -1 && saved_errno == ENOSYS) { ASSERT (unlink (BASE "link") == 0); if (print) fputs ("skipping test: " "setting symlink time not supported on this file system\n", stderr); return 77; } ASSERT (!result); ASSERT (lstat (BASE "link", &st1) == 0); /* On cygwin, lstat() changes atime of symlinks, so that lutimens can only effectively modify mtime. */ nap (); ASSERT (lstat (BASE "link", &st2) == 0); if (st1.st_atime != st2.st_atime || get_stat_atime_ns (&st1) != get_stat_atime_ns (&st2)) atime_supported = false; ASSERT (st1.st_ctime == st2.st_ctime); ASSERT (get_stat_ctime_ns (&st1) == get_stat_ctime_ns (&st2)); /* Invalid arguments. */ { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = UTIME_BOGUS_POS; ts[1].tv_sec = Y2K; ts[1].tv_nsec = 0; errno = 0; ASSERT (func (BASE "link", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1].tv_sec = Y2K; ts[1].tv_nsec = UTIME_BOGUS_NEG; errno = 0; ASSERT (func (BASE "link", ts) == -1); ASSERT (errno == EINVAL); } ASSERT (lstat (BASE "link", &st2) == 0); if (atime_supported) { ASSERT (st1.st_atime == st2.st_atime); ASSERT (get_stat_atime_ns (&st1) == get_stat_atime_ns (&st2)); } ASSERT (utimecmp (BASE "link", &st1, &st2, 0) == 0); /* Set both times. */ { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = BILLION / 2 - 1; ts[1].tv_sec = Y2K; ts[1].tv_nsec = BILLION - 1; nap (); ASSERT (func (BASE "link", ts) == 0); ASSERT (lstat (BASE "link", &st2) == 0); if (atime_supported) { ASSERT (st2.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st2)); ASSERT (get_stat_atime_ns (&st2) < BILLION / 2); } ASSERT (st2.st_mtime == Y2K); ASSERT (0 <= get_stat_mtime_ns (&st2)); ASSERT (get_stat_mtime_ns (&st2) < BILLION); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); } /* Play with UTIME_OMIT, UTIME_NOW. */ { struct stat st3; struct timespec ts[2]; ts[0].tv_sec = BILLION; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 0; ts[1].tv_nsec = UTIME_NOW; nap (); ASSERT (func (BASE "link", ts) == 0); ASSERT (lstat (BASE "link", &st3) == 0); if (atime_supported) { ASSERT (st3.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st3)); ASSERT (get_stat_atime_ns (&st3) < BILLION / 2); } ASSERT (utimecmp (BASE "link", &st1, &st3, 0) <= 0); if (check_ctime) ASSERT (ctime_compare (&st2, &st3) < 0); nap (); ts[0].tv_nsec = 0; ts[1].tv_nsec = UTIME_OMIT; ASSERT (func (BASE "link", ts) == 0); ASSERT (lstat (BASE "link", &st2) == 0); if (atime_supported) { ASSERT (st2.st_atime == BILLION); ASSERT (get_stat_atime_ns (&st2) == 0); } ASSERT (st3.st_mtime == st2.st_mtime); ASSERT (get_stat_mtime_ns (&st3) == get_stat_mtime_ns (&st2)); if (check_ctime > 0) ASSERT (ctime_compare (&st3, &st2) < 0); } /* Symlink to directory. */ ASSERT (unlink (BASE "link") == 0); ASSERT (symlink (BASE "dir", BASE "link") == 0); ASSERT (mkdir (BASE "dir", 0700) == 0); { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; ASSERT (func (BASE "link/", ts) == 0); } /* On cygwin 1.5, stat() changes atime of directories, so only check mtime. */ ASSERT (stat (BASE "dir", &st1) == 0); ASSERT (st1.st_mtime == Y2K); ASSERT (lstat (BASE "link", &st1) == 0); ASSERT (st1.st_atime != Y2K); ASSERT (st1.st_mtime != Y2K); ASSERT (func (BASE "link", NULL) == 0); ASSERT (stat (BASE "dir", &st1) == 0); ASSERT (st1.st_mtime == Y2K); ASSERT (lstat (BASE "link", &st1) == 0); ASSERT (st1.st_atime != Y2K); ASSERT (st1.st_mtime != Y2K); /* Cleanup. */ ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } ������������������������������������gnulib-20210822~d383792/tests/test-malloc-gnu.c�����������������������������������������������������0000664�0000000�0000000�00000002365�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of malloc function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" int main (int argc, char **argv) { /* Check that malloc (0) is not a NULL pointer. */ void *volatile p = malloc (0); ASSERT (p != NULL); free (p); /* Check that malloc (n) fails when n exceeds PTRDIFF_MAX. */ if (PTRDIFF_MAX < SIZE_MAX) { size_t one = argc != 12345; p = malloc (PTRDIFF_MAX + one); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-malloc-h-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002030�14110572173�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <malloc.h> substitute in C++ mode. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <malloc.h> #include "signature.h" #if GNULIB_TEST_MEMALIGN && HAVE_MEMALIGN SIGNATURE_CHECK (GNULIB_NAMESPACE::memalign, void *, (size_t, size_t)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-malloc-h.c�������������������������������������������������������0000664�0000000�0000000�00000001550�14110572173�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <malloc.h> substitute. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> #include <malloc.h> int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-malloca.c��������������������������������������������������������0000664�0000000�0000000�00000003072�14110572173�0020174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of safe automatic memory allocation. Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #include "malloca.h" #include <stdlib.h> static void do_allocation (int n) { void *volatile ptr = malloca (n); freea (ptr); safe_alloca (n); } void (*func) (int) = do_allocation; int main () { int i; /* This slows down malloc a lot. */ unsetenv ("MALLOC_PERTURB_"); /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 50000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-map-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000004161�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of map data type implementation as a C++ class. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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 "gl_map.hh" #include "gl_array_map.h" #include <string.h> #include "macros.h" static const int integers[6] = { 0, 1, 2, 3, 4, 5 }; static bool streq (const char *str1, const char *str2) { return strcmp (str1, str2) == 0; } int main (int argc, char *argv[]) { gl_Map<const char *, const int *> map1; map1 = gl_Map<const char *, const int *> (GL_ARRAY_MAP, streq, NULL, NULL, NULL); map1.put ("five", integers); map1.put ("one", integers + 1); map1.put ("two", integers + 2); map1.put ("three", integers + 3); map1.put ("four", integers + 4); map1.put ("five", integers + 5); ASSERT (map1.size () == 5); ASSERT (map1.get ("two")[0] == 2); gl_Map<const char *, const int *>::iterator iter1 = map1.begin (); const char *key; const int *val; ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "five") == 0); ASSERT (*val == 5); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "one") == 0); ASSERT (*val == 1); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "two") == 0); ASSERT (*val == 2); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "three") == 0); ASSERT (*val == 3); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "four") == 0); ASSERT (*val == 4); ASSERT (!iter1.next (key, val)); map1.free (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-math-c++.cc������������������������������������������������������0000664�0000000�0000000�00000030536�14110572173�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <math.h> #include "signature.h" /* Signature check for a function that takes a real-floating argument. Check that each overloaded function with the specified signature exists in the GNULIB_NAMESPACE namespace. */ #define REAL_FLOATING_CHECK(func,\ rettype1, parameters1,\ rettype2, parameters2,\ rettype3, parameters3) \ OVERLOADED_CHECK (func, rettype1, parameters1, _1); \ OVERLOADED_CHECK (func, rettype2, parameters2, _2); \ OVERLOADED_CHECK (func, rettype3, parameters3, _3) #define OVERLOADED_CHECK(func, rettype, parameters, suffix) \ _GL_UNUSED static rettype (* signature_check_ ## func ## suffix) parameters \ = static_cast<rettype(*)parameters>(GNULIB_NAMESPACE::func) /* Keep these checks in the same order as math.in.h! */ #if GNULIB_TEST_ACOSF SIGNATURE_CHECK (GNULIB_NAMESPACE::acosf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::acos, double, (double)); #if GNULIB_TEST_ACOSL SIGNATURE_CHECK (GNULIB_NAMESPACE::acosl, long double, (long double)); #endif #if GNULIB_TEST_ASINF SIGNATURE_CHECK (GNULIB_NAMESPACE::asinf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::asin, double, (double)); #if GNULIB_TEST_ASINL SIGNATURE_CHECK (GNULIB_NAMESPACE::asinl, long double, (long double)); #endif #if GNULIB_TEST_ATANF SIGNATURE_CHECK (GNULIB_NAMESPACE::atanf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::atan, double, (double)); #if GNULIB_TEST_ATANL SIGNATURE_CHECK (GNULIB_NAMESPACE::atanl, long double, (long double)); #endif #if GNULIB_TEST_ATAN2F SIGNATURE_CHECK (GNULIB_NAMESPACE::atan2f, float, (float, float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::atan2, double, (double, double)); #if GNULIB_TEST_CBRTF SIGNATURE_CHECK (GNULIB_NAMESPACE::cbrtf, float, (float)); #endif #if GNULIB_TEST_CBRT SIGNATURE_CHECK (GNULIB_NAMESPACE::cbrt, double, (double)); #endif #if GNULIB_TEST_CBRTL SIGNATURE_CHECK (GNULIB_NAMESPACE::cbrtl, long double, (long double)); #endif #if GNULIB_TEST_CEILF SIGNATURE_CHECK (GNULIB_NAMESPACE::ceilf, float, (float)); #endif #if GNULIB_TEST_CEIL SIGNATURE_CHECK (GNULIB_NAMESPACE::ceil, double, (double)); #endif #if GNULIB_TEST_CEILL SIGNATURE_CHECK (GNULIB_NAMESPACE::ceill, long double, (long double)); #endif #if GNULIB_TEST_COPYSIGNF SIGNATURE_CHECK (GNULIB_NAMESPACE::copysignf, float, (float, float)); #endif #if GNULIB_TEST_COPYSIGN SIGNATURE_CHECK (GNULIB_NAMESPACE::copysign, double, (double, double)); #endif #if GNULIB_TEST_COPYSIGNL SIGNATURE_CHECK (GNULIB_NAMESPACE::copysignl, long double, (long double, long double)); #endif #if GNULIB_TEST_COSF SIGNATURE_CHECK (GNULIB_NAMESPACE::cosf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::cos, double, (double)); #if GNULIB_TEST_COSL SIGNATURE_CHECK (GNULIB_NAMESPACE::cosl, long double, (long double)); #endif #if GNULIB_TEST_COSHF SIGNATURE_CHECK (GNULIB_NAMESPACE::coshf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::cosh, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::erf, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::erfc, double, (double)); #if GNULIB_TEST_EXPF SIGNATURE_CHECK (GNULIB_NAMESPACE::expf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::exp, double, (double)); #if GNULIB_TEST_EXPL SIGNATURE_CHECK (GNULIB_NAMESPACE::expl, long double, (long double)); #endif #if GNULIB_TEST_EXP2F SIGNATURE_CHECK (GNULIB_NAMESPACE::exp2f, float, (float)); #endif #if GNULIB_TEST_EXP2 SIGNATURE_CHECK (GNULIB_NAMESPACE::exp2, double, (double)); #endif #if GNULIB_TEST_EXP2L SIGNATURE_CHECK (GNULIB_NAMESPACE::exp2l, long double, (long double)); #endif #if GNULIB_TEST_EXPM1F SIGNATURE_CHECK (GNULIB_NAMESPACE::expm1f, float, (float)); #endif #if GNULIB_TEST_EXPM1 SIGNATURE_CHECK (GNULIB_NAMESPACE::expm1, double, (double)); #endif #if GNULIB_TEST_EXPM1L SIGNATURE_CHECK (GNULIB_NAMESPACE::expm1l, long double, (long double)); #endif #if GNULIB_TEST_FABSF SIGNATURE_CHECK (GNULIB_NAMESPACE::fabsf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::fabs, double, (double)); #if GNULIB_TEST_FABSL SIGNATURE_CHECK (GNULIB_NAMESPACE::fabsl, long double, (long double)); #endif #if GNULIB_TEST_FLOORF SIGNATURE_CHECK (GNULIB_NAMESPACE::floorf, float, (float)); #endif #if GNULIB_TEST_FLOOR SIGNATURE_CHECK (GNULIB_NAMESPACE::floor, double, (double)); #endif #if GNULIB_TEST_FLOORL SIGNATURE_CHECK (GNULIB_NAMESPACE::floorl, long double, (long double)); #endif #if GNULIB_TEST_FMAF SIGNATURE_CHECK (GNULIB_NAMESPACE::fmaf, float, (float, float, float)); #endif #if GNULIB_TEST_FMA SIGNATURE_CHECK (GNULIB_NAMESPACE::fma, double, (double, double, double)); #endif #if GNULIB_TEST_FMAL SIGNATURE_CHECK (GNULIB_NAMESPACE::fmal, long double, (long double, long double, long double)); #endif #if GNULIB_TEST_FMODF SIGNATURE_CHECK (GNULIB_NAMESPACE::fmodf, float, (float, float)); #endif #if GNULIB_TEST_FMOD SIGNATURE_CHECK (GNULIB_NAMESPACE::fmod, double, (double, double)); #endif #if GNULIB_TEST_FMODL SIGNATURE_CHECK (GNULIB_NAMESPACE::fmodl, long double, (long double, long double)); #endif #if GNULIB_TEST_FREXPF SIGNATURE_CHECK (GNULIB_NAMESPACE::frexpf, float, (float, int *)); #endif #if GNULIB_TEST_FREXP SIGNATURE_CHECK (GNULIB_NAMESPACE::frexp, double, (double, int *)); #endif #if GNULIB_TEST_FREXPL SIGNATURE_CHECK (GNULIB_NAMESPACE::frexpl, long double, (long double, int *)); #endif #if GNULIB_TEST_HYPOTF SIGNATURE_CHECK (GNULIB_NAMESPACE::hypotf, float, (float, float)); #endif #if GNULIB_TEST_HYPOT SIGNATURE_CHECK (GNULIB_NAMESPACE::hypot, double, (double, double)); #endif #if GNULIB_TEST_HYPOTL SIGNATURE_CHECK (GNULIB_NAMESPACE::hypotl, long double, (long double, long double)); #endif #if GNULIB_TEST_ILOGBF SIGNATURE_CHECK (GNULIB_NAMESPACE::ilogbf, int, (float)); #endif #if GNULIB_TEST_ILOGB SIGNATURE_CHECK (GNULIB_NAMESPACE::ilogb, int, (double)); #endif #if GNULIB_TEST_ILOGBL SIGNATURE_CHECK (GNULIB_NAMESPACE::ilogbl, int, (long double)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::j0, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::j1, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::jn, double, (int, double)); #if GNULIB_TEST_LDEXPF SIGNATURE_CHECK (GNULIB_NAMESPACE::ldexpf, float, (float, int)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::ldexp, double, (double, int)); #if GNULIB_TEST_LDEXPL SIGNATURE_CHECK (GNULIB_NAMESPACE::ldexpl, long double, (long double, int)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::lgamma, double, (double)); #if GNULIB_TEST_LOGF SIGNATURE_CHECK (GNULIB_NAMESPACE::logf, float, (float)); #endif #if GNULIB_TEST_LOG SIGNATURE_CHECK (GNULIB_NAMESPACE::log, double, (double)); #endif #if GNULIB_TEST_LOGL SIGNATURE_CHECK (GNULIB_NAMESPACE::logl, long double, (long double)); #endif #if GNULIB_TEST_LOG10F SIGNATURE_CHECK (GNULIB_NAMESPACE::log10f, float, (float)); #endif #if GNULIB_TEST_LOG10 SIGNATURE_CHECK (GNULIB_NAMESPACE::log10, double, (double)); #endif #if GNULIB_TEST_LOG10L SIGNATURE_CHECK (GNULIB_NAMESPACE::log10l, long double, (long double)); #endif #if GNULIB_TEST_LOG1PF SIGNATURE_CHECK (GNULIB_NAMESPACE::log1pf, float, (float)); #endif #if GNULIB_TEST_LOG1P SIGNATURE_CHECK (GNULIB_NAMESPACE::log1p, double, (double)); #endif #if GNULIB_TEST_LOG1PL SIGNATURE_CHECK (GNULIB_NAMESPACE::log1pl, long double, (long double)); #endif #if GNULIB_TEST_LOG2F SIGNATURE_CHECK (GNULIB_NAMESPACE::log2f, float, (float)); #endif #if GNULIB_TEST_LOG2 SIGNATURE_CHECK (GNULIB_NAMESPACE::log2, double, (double)); #endif #if GNULIB_TEST_LOG2L SIGNATURE_CHECK (GNULIB_NAMESPACE::log2l, long double, (long double)); #endif #if GNULIB_TEST_LOGBF SIGNATURE_CHECK (GNULIB_NAMESPACE::logbf, float, (float)); #endif #if GNULIB_TEST_LOGB SIGNATURE_CHECK (GNULIB_NAMESPACE::logb, double, (double)); #endif #if GNULIB_TEST_LOGBL SIGNATURE_CHECK (GNULIB_NAMESPACE::logbl, long double, (long double)); #endif #if GNULIB_TEST_MODFF SIGNATURE_CHECK (GNULIB_NAMESPACE::modff, float, (float, float *)); #endif #if GNULIB_TEST_MODF SIGNATURE_CHECK (GNULIB_NAMESPACE::modf, double, (double, double *)); #endif #if GNULIB_TEST_MODFL SIGNATURE_CHECK (GNULIB_NAMESPACE::modfl, long double, (long double, long double *)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::nextafter, double, (double, double)); #if GNULIB_TEST_POWF SIGNATURE_CHECK (GNULIB_NAMESPACE::powf, float, (float, float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::pow, double, (double, double)); #if GNULIB_TEST_REMAINDERF SIGNATURE_CHECK (GNULIB_NAMESPACE::remainderf, float, (float, float)); #endif #if GNULIB_TEST_REMAINDER SIGNATURE_CHECK (GNULIB_NAMESPACE::remainder, double, (double, double)); #endif #if GNULIB_TEST_REMAINDERL SIGNATURE_CHECK (GNULIB_NAMESPACE::remainderl, long double, (long double, long double)); #endif #if GNULIB_TEST_RINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::rintf, float, (float)); #endif #if GNULIB_TEST_RINT SIGNATURE_CHECK (GNULIB_NAMESPACE::rint, double, (double)); #endif #if GNULIB_TEST_RINTL SIGNATURE_CHECK (GNULIB_NAMESPACE::rintl, long double, (long double)); #endif #if GNULIB_TEST_ROUNDF SIGNATURE_CHECK (GNULIB_NAMESPACE::roundf, float, (float)); #endif #if GNULIB_TEST_ROUND SIGNATURE_CHECK (GNULIB_NAMESPACE::round, double, (double)); #endif #if GNULIB_TEST_ROUNDL SIGNATURE_CHECK (GNULIB_NAMESPACE::roundl, long double, (long double)); #endif #if GNULIB_TEST_SINF SIGNATURE_CHECK (GNULIB_NAMESPACE::sinf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::sin, double, (double)); #if GNULIB_TEST_SINL SIGNATURE_CHECK (GNULIB_NAMESPACE::sinl, long double, (long double)); #endif #if GNULIB_TEST_SINHF SIGNATURE_CHECK (GNULIB_NAMESPACE::sinhf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::sinh, double, (double)); #if GNULIB_TEST_SQRTF SIGNATURE_CHECK (GNULIB_NAMESPACE::sqrtf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::sqrt, double, (double)); #if GNULIB_TEST_SQRTL SIGNATURE_CHECK (GNULIB_NAMESPACE::sqrtl, long double, (long double)); #endif #if GNULIB_TEST_TANF SIGNATURE_CHECK (GNULIB_NAMESPACE::tanf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::tan, double, (double)); #if GNULIB_TEST_TANL SIGNATURE_CHECK (GNULIB_NAMESPACE::tanl, long double, (long double)); #endif #if GNULIB_TEST_TANHF SIGNATURE_CHECK (GNULIB_NAMESPACE::tanhf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::tanh, double, (double)); #if GNULIB_TEST_TRUNCF SIGNATURE_CHECK (GNULIB_NAMESPACE::truncf, float, (float)); #endif #if GNULIB_TEST_TRUNC SIGNATURE_CHECK (GNULIB_NAMESPACE::trunc, double, (double)); #endif #if GNULIB_TEST_TRUNCL SIGNATURE_CHECK (GNULIB_NAMESPACE::truncl, long double, (long double)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::y0, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::y1, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::yn, double, (int, double)); #if GNULIB_TEST_ISFINITE # ifdef isfinite # warning "isfinite should not be a macro in C++" # endif REAL_FLOATING_CHECK (isfinite, bool, (float), bool, (double), bool, (long double)); #endif #if GNULIB_TEST_ISINF # ifdef isinf # warning "isinf should not be a macro in C++" # endif REAL_FLOATING_CHECK (isinf, bool, (float), bool, (double), bool, (long double)); #endif #if GNULIB_TEST_ISNAN # ifdef isnan # warning "isnan should not be a macro in C++" # endif REAL_FLOATING_CHECK (isnan, bool, (float), bool, (double), bool, (long double)); #endif #if GNULIB_TEST_SIGNBIT # ifdef signbit # warning "signbit should not be a macro in C++" # endif REAL_FLOATING_CHECK (signbit, bool, (float), bool, (double), bool, (long double)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-math-c++2.cc�����������������������������������������������������0000664�0000000�0000000�00000001465�14110572173�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cmath> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-math.c�����������������������������������������������������������0000664�0000000�0000000�00000004351�14110572173�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #ifndef NAN # error NAN should be defined choke me #endif #ifndef HUGE_VALF # error HUGE_VALF should be defined choke me #endif #ifndef HUGE_VAL # error HUGE_VAL should be defined choke me #endif #ifndef HUGE_VALL # error HUGE_VALL should be defined choke me #endif #ifndef FP_ILOGB0 # error FP_ILOGB0 should be defined choke me #endif #ifndef FP_ILOGBNAN # error FP_ILOGBNAN should be defined choke me #endif #include <limits.h> #include "macros.h" #if 0 /* Check that NAN expands into a constant expression. */ static float n = NAN; #endif /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equalf (float x, float y) { return x == y; } static int numeric_equald (double x, double y) { return x == y; } static int numeric_equall (long double x, long double y) { return x == y; } int main (void) { double d = NAN; double zero = 0.0; ASSERT (!numeric_equald (d, d)); d = HUGE_VAL; ASSERT (numeric_equald (d, 1.0 / zero)); ASSERT (numeric_equalf (HUGE_VALF, HUGE_VALF + HUGE_VALF)); ASSERT (numeric_equald (HUGE_VAL, HUGE_VAL + HUGE_VAL)); ASSERT (numeric_equall (HUGE_VALL, HUGE_VALL + HUGE_VALL)); /* Check the value of FP_ILOGB0. */ ASSERT (FP_ILOGB0 == INT_MIN || FP_ILOGB0 == - INT_MAX); /* Check the value of FP_ILOGBNAN. */ ASSERT (FP_ILOGBNAN == INT_MIN || FP_ILOGBNAN == INT_MAX); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecmp.c���������������������������������������������������0000664�0000000�0000000�00000003211�14110572173�0021210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "mbmemcasecmp.h" #include <locale.h> #include <stdbool.h> #include <string.h> #include "macros.h" #include "test-mbmemcasecmp.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_ascii (mbmemcasecmp); if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ test_iso_8859_1 (mbmemcasecmp, true); return 0; case '2': /* Locale encoding is UTF-8, locale is not Turkish. */ test_utf_8 (mbmemcasecmp, false); return 0; case '3': /* Locale encoding is UTF-8, locale is Turkish. */ test_utf_8 (mbmemcasecmp, true); return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecmp.h���������������������������������������������������0000664�0000000�0000000�00000036225�14110572173�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_casecmp) (const char *, size_t, const char *, size_t)) { /* Empty string. */ { ASSERT (my_casecmp (NULL, 0, NULL, 0) == 0); } { static const char input[] = { 'x', 'y' }; ASSERT (my_casecmp (input, SIZEOF (input), NULL, 0) > 0); ASSERT (my_casecmp (NULL, 0, input, SIZEOF (input)) < 0); ASSERT (my_casecmp (input, SIZEOF (input), input, SIZEOF (input)) == 0); } /* Normal lexicographic order. */ { static const char input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; static const char input2[] = { 'A', 'm', 'i', 'g', 'o' }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) < 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1)) > 0); } /* Shorter and longer strings. */ { static const char input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; static const char input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) < 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1)) > 0); } ASSERT (my_casecmp ("paragraph", 9, "Paragraph", 9) == 0); ASSERT (my_casecmp ("paragrapH", 9, "parAgRaph", 9) == 0); ASSERT (my_casecmp ("paragraph", 9, "paraLyzed", 9) < 0); ASSERT (my_casecmp ("paraLyzed", 9, "paragraph", 9) > 0); ASSERT (my_casecmp ("para", 4, "paragraph", 9) < 0); ASSERT (my_casecmp ("paragraph", 9, "para", 4) > 0); /* Embedded NULs. */ ASSERT (my_casecmp ("1\0", 2, "2\0", 2) < 0); ASSERT (my_casecmp ("2\0", 2, "1\0", 2) > 0); ASSERT (my_casecmp ("x\0""1", 3, "x\0""2", 3) < 0); ASSERT (my_casecmp ("x\0""2", 3, "x\0""1", 3) > 0); } static void test_iso_8859_1 (int (*my_casecmp) (const char *, size_t, const char *, size_t), bool assume_byte_values) { #if ! defined __osf__ /* This test fails on OSF/1 5.1. */ { static const char input1[] = { 'H', 0xF6, 'h', 'l', 'e' }; static const char input2[] = { 'H', 0xD6, 'h', 'L', 'e' }; static const char input3[] = { 'H', 0xF6, 'h', 'l', 'e', 'n' }; static const char input4[] = { 'H', 0xD6, 'h', 'L', 'e', 'n' }; static const char input5[] = { 'H', 'u', 'r', 'z' }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1)) == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4)) == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3)) == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3)) < 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4)) < 0); if (assume_byte_values) { /* These results are the opposite of those in test-ulc-casecmp.c, because my_casecmp compares precomposed characters, whereas ulc_casecmp compares decomposed character sequences. */ ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5)) > 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5)) > 0); } } #endif #if 0 /* This functionality requires ulc_casecmp. */ /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const char input1[] = { 0x68, 0x65, 0x69, 0xDF }; static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } #endif } static void test_utf_8 (int (*my_casecmp) (const char *, size_t, const char *, size_t), bool turkish) { /* The following tests shows how my_casecmp() is different from strcasecmp(). */ ASSERT (my_casecmp ("\303\266zg\303\274r", 7, "\303\226ZG\303\234R", 7) == 0); /* özgür */ ASSERT (my_casecmp ("\303\226ZG\303\234R", 7, "\303\266zg\303\274r", 7) == 0); /* özgür */ /* This test shows how strings of different size can compare equal. */ if (turkish) { ASSERT (my_casecmp ("turkish", 7, "TURK\304\260SH", 8) == 0); ASSERT (my_casecmp ("TURK\304\260SH", 8, "turkish", 7) == 0); } #if 0 /* This functionality requires ulc_casecmp. */ /* Normalization effects. */ { static const char input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; static const char input2[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e' }; static const char input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; static const char input4[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e', 'n' }; static const char input5[] = { 'H', 'u', 'r', 'z' }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1)) == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4)) == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3)) == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3)) < 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4)) < 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5)) < 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5)) < 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const char input1[] = { 0xC3, 0x84 }; static const char input2[] = { 0x41, 0xCC, 0x88 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const char input1[] = { 0xC7, 0x9E }; static const char input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const char input1[] = { 0xE1, 0xBF, 0x81 }; static const char input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const char input1[] = { 0xEA, 0xB8, 0x80 }; static const char input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; static const char input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3)) == 0); } { /* HANGUL SYLLABLE GEU */ static const char input1[] = { 0xEA, 0xB7, 0xB8 }; static const char input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } #endif /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const char input1[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const char input2[] = { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const char input3[] = { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; (void) input1; #if 0 /* This functionality requires ulc_casecmp. */ ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3)) == 0); #endif ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3)) == 0); } #if 0 /* This functionality requires ulc_casecmp. */ /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const char input1[] = { 0xC5, 0x89 }; static const char input2[] = { 0xCA, 0xBC, 0x6E }; static const char input3[] = { 0xCA, 0xBC, 0x4E }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const char input1[] = { 0xCE, 0x90 }; static const char input2[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } #endif /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const char input[] = { 0x49 }; static const char casefolded[] = { 0x69 }; static const char casefolded_tr[] = { 0xC4, 0xB1 }; if (!turkish) ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); else ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const char input[] = { 0x69 }; static const char casefolded[] = { 0x49 }; static const char casefolded_tr[] = { 0xC4, 0xB0 }; if (!turkish) ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); else ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const char input[] = { 0xC4, 0xB0 }; static const char casefolded[] = { 0x69, 0xCC, 0x87 }; static const char casefolded_tr[] = { 0x69 }; (void) casefolded; if (!turkish) { #if 0 /* This functionality requires ulc_casecmp. */ ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); #endif } else ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const char input[] = { 0xC4, 0xB1 }; static const char casefolded[] = { 0x49 }; if (!turkish) ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) > 0); else ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); } { /* "topkapı" */ static const char input[] = { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; static const char casefolded[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; if (!turkish) ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) < 0); else ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); } #if 0 /* This functionality requires ulc_casecmp. */ /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const char input1[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); } #endif /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const char input1[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const char input2[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 }; static const char input3[] = { 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 }; (void) input1; #if 0 /* This functionality requires ulc_casecmp. */ ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2)) == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3)) == 0); #endif ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3)) == 0); } #if 0 /* This functionality requires ulc_casecmp. */ /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const char input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const char casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const char casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed)) != 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded)) == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); } #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecmp1.sh�������������������������������������������������0000775�0000000�0000000�00000000565�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbmemcasecmp${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecmp2.sh�������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0021465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbmemcasecmp${EXEEXT} 2 ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecmp3.sh�������������������������������������������������0000775�0000000�0000000�00000000614�14110572173�0021472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbmemcasecmp${EXEEXT} 3 ��������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecoll.c��������������������������������������������������0000664�0000000�0000000�00000003470�14110572173�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "mbmemcasecoll.h" #include <locale.h> #include <stdbool.h> #include <string.h> #include "macros.h" #include "test-mbmemcasecmp.h" static int mbmemcasecoll_hard (const char *s1, size_t s1len, const char *s2, size_t s2len) { return mbmemcasecoll (s1, s1len, s2, s2len, true); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_ascii (mbmemcasecoll_hard); if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ test_iso_8859_1 (mbmemcasecoll_hard, false); return 0; case '2': /* Locale encoding is UTF-8, locale is not Turkish. */ test_utf_8 (mbmemcasecoll_hard, false); return 0; case '3': /* Locale encoding is UTF-8, locale is Turkish. */ test_utf_8 (mbmemcasecoll_hard, true); return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecoll1.sh������������������������������������������������0000775�0000000�0000000�00000000566�14110572173�0021650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbmemcasecoll${EXEEXT} 1 ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecoll2.sh������������������������������������������������0000775�0000000�0000000�00000000611�14110572173�0021640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbmemcasecoll${EXEEXT} 2 �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbmemcasecoll3.sh������������������������������������������������0000775�0000000�0000000�00000000615�14110572173�0021645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbmemcasecoll${EXEEXT} 3 �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-1.sh����������������������������������������������������0000775�0000000�0000000�00000000561�14110572173�0020550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 1 �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-2.sh����������������������������������������������������0000775�0000000�0000000�00000000604�14110572173�0020547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 2 ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-3.sh����������������������������������������������������0000775�0000000�0000000�00000000574�14110572173�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 3 ������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-4.sh����������������������������������������������������0000775�0000000�0000000�00000000616�14110572173�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 4 ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-5.sh����������������������������������������������������0000775�0000000�0000000�00000000255�14110572173�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 5 || exit LC_ALL=POSIX \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 5 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-1.sh������������������������������������������������0000775�0000000�0000000�00000000136�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-2.sh������������������������������������������������0000775�0000000�0000000�00000000146�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-3.sh������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-4.sh������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-5.sh������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-6.sh������������������������������������������������0000775�0000000�0000000�00000000140�14110572173�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 54936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32-7.sh������������������������������������������������0000775�0000000�0000000�00000000216�14110572173�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32-w32.c���������������������������������������������������0000664�0000000�0000000�00000056062�14110572173�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to 32-bit wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "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); /* gnulib's implementation returns (size_t)(-2). The AIX 5.1 implementation returns (size_t)(-1). glibc's implementation returns 0. */ ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); 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); 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); 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); 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); 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); 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 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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; 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); 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); 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); 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; 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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtoc32.c�������������������������������������������������������0000664�0000000�0000000�00000027550�14110572173�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to 32-bit wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <string.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) { 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 '*': 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 argv[1] starts with '5' so we are testing all nonnull bytes. */ buf[0] = c; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&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 (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)); } if (argc > 1) switch (argv[1][0]) { case '1': /* 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'); 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 (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 '2': /* 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 '3': /* 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); 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 (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 (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 '4': /* Locale encoding is GB18030. */ { 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 (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 (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 (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; case '5': /* C locale; tested above. */ return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-1.sh�������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-2.sh�������������������������������������������������0000775�0000000�0000000�00000000145�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-3.sh�������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-4.sh�������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-5.sh�������������������������������������������������0000775�0000000�0000000�00000000133�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-6.sh�������������������������������������������������0000775�0000000�0000000�00000000137�14110572173�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32-7.sh�������������������������������������������������0000775�0000000�0000000�00000000215�14110572173�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc-w32.c����������������������������������������������������0000664�0000000�0000000�00000054446�14110572173�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include <errno.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) { mbstate_t state; wchar_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 (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } # endif /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); /* gnulib's implementation returns (size_t)(-2). The AIX 5.1 implementation returns (size_t)(-1). glibc's implementation returns 0. */ ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtowc (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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_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 = (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 == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'x'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\302'); ASSERT (wc == 0x0622); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\341'); ASSERT (wc == 0x0644); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\346'); ASSERT (wc == 0x0648); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'y'); ASSERT (mbsinit (&state)); } 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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); 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 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); 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 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); 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 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&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[] = "B\250\271\201\060\211\070er"; /* "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, 7, &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, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[7] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 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, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } 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; } } 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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc.c��������������������������������������������������������0000664�0000000�0000000�00000026057�14110572173�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; wchar_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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); ASSERT (ret == (size_t)(-2)); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (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) { 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 '*': 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 argv[1] starts with '5' so we are testing all nonnull bytes. */ 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 (mbsinit (&state)); ret = mbrtowc (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 = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "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 == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '2': /* Locale encoding is UTF-8. */ { 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 (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 (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)); } return 0; case '3': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); } return 0; case '4': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "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, 7, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[7] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '5': /* C locale; tested above. */ return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc1.sh������������������������������������������������������0000775�0000000�0000000�00000000560�14110572173�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 1 ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc2.sh������������������������������������������������������0000775�0000000�0000000�00000000603�14110572173�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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} 2 �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc3.sh������������������������������������������������������0000775�0000000�0000000�00000000573�14110572173�0020522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbrtowc${EXEEXT} 3 �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc4.sh������������������������������������������������������0000775�0000000�0000000�00000000615�14110572173�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbrtowc${EXEEXT} 4 �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbrtowc5.sh������������������������������������������������������0000775�0000000�0000000�00000000253�14110572173�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasecmp.c�����������������������������������������������������0000664�0000000�0000000�00000003462�14110572173�0020704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbscasecmp ("paragraph", "Paragraph") == 0); ASSERT (mbscasecmp ("paragrapH", "parAgRaph") == 0); ASSERT (mbscasecmp ("paragraph", "paraLyzed") < 0); ASSERT (mbscasecmp ("paraLyzed", "paragraph") > 0); ASSERT (mbscasecmp ("para", "paragraph") < 0); ASSERT (mbscasecmp ("paragraph", "para") > 0); /* The following tests shows how mbscasecmp() is different from strcasecmp(). */ ASSERT (mbscasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") == 0); /* özgür */ ASSERT (mbscasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") == 0); /* özgür */ /* This test shows how strings of different size can compare equal. */ ASSERT (mbscasecmp ("turkish", "TURK\304\260SH") == 0); ASSERT (mbscasecmp ("TURK\304\260SH", "turkish") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasecmp.sh����������������������������������������������������0000775�0000000�0000000�00000000610�14110572173�0021067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbscasecmp${EXEEXT} ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr1.c����������������������������������������������������0000664�0000000�0000000�00000006707�14110572173�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <stdlib.h> #include "macros.h" int main () { /* This test is executed in the C locale. */ { const char input[] = "foo"; const char *result = mbscasestr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = mbscasestr (input, "O"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = mbscasestr (input, "ABCDaBD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = mbscasestr (input, "ABCDaBE"); ASSERT (result == NULL); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaAAAAaaaaaaa" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbscasestr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbscasestr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'a', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = mbscasestr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } return 0; } ���������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr2.c����������������������������������������������������0000664�0000000�0000000�00000010305�14110572173�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include <stdlib.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "f\303\266\303\266"; const char *result = mbscasestr (input, ""); ASSERT (result == input); } { const char input[] = "f\303\266\303\266"; const char *result = mbscasestr (input, "\303\266"); ASSERT (result == input + 1); } { const char input[] = "f\303\266\303\266"; const char *result = mbscasestr (input, "\266\303"); ASSERT (result == NULL); } { const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ const char *result = mbscasestr (input, "\303\244BCD\303\204BD"); /* "äBCDÄBD" */ ASSERT (result == input + 19); } { const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ const char *result = mbscasestr (input, "\303\204BCD\303\204BE"); /* "ÄBCDÄBE" */ ASSERT (result == NULL); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'a', m); haystack[0] = '\303'; haystack[1] = '\204'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbscasestr (haystack, needle) == haystack + 2); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbscasestr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 3); char *needle = (char *) malloc (m + 3); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = '\303'; haystack[2 * m + 1] = '\247'; haystack[2 * m + 2] = '\0'; memset (needle, 'a', m); needle[m] = '\303'; needle[m + 1] = '\207'; needle[m + 2] = '\0'; result = mbscasestr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr2.sh���������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0021206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbscasestr2${EXEEXT} ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr3.c����������������������������������������������������0000664�0000000�0000000�00000005006�14110572173�0021014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbscasestr (input, " "); ASSERT (result == input + 4); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbscasestr (input, " "); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */ const char *result = mbscasestr (input, "2"); ASSERT (result == input + 3); } /* The following tests show how mbscasestr() is different from strcasestr(). */ { const char input[] = "\313\320\320\320"; /* "诵行" */ const char *result = mbscasestr (input, "\320\320"); /* "行" */ ASSERT (result == input + 2); } { const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123运行。" */ const char *result = mbscasestr (input, "2"); ASSERT (result == input + 5); } { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbscasestr (input, "\276\300"); /* "纠" */ ASSERT (result == NULL); } { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbscasestr (input, "\375 "); /* invalid multibyte sequence */ ASSERT (result == NULL); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr3.sh���������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbscasestr3${EXEEXT} ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr4.c����������������������������������������������������0000664�0000000�0000000�00000003312�14110572173�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "GOLD NEEDLE BEATS TIN NEEDLE"; ASSERT (mbscasestr (input, "Needle") == input + 5); } /* The following tests show how mbscasestr() is different from strcasestr(). */ { const char input[] = "s\303\266zc\303\274k"; /* sözcük */ ASSERT (mbscasestr (input, "\303\266z") == input + 1); ASSERT (mbscasestr (input, "\303\266c") == NULL); } /* This test shows how a string of larger size can be found in a string of smaller size. */ { const char input[] = "*Tbilisi imini*"; ASSERT (mbscasestr (input, "TB\304\260L\304\260S\304\260 \304\260m\304\260n\304\260") == input + 1); /* TBİLİSİ İmİnİ */ } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscasestr4.sh���������������������������������������������������0000775�0000000�0000000�00000000611�14110572173�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbscasestr4${EXEEXT} �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbschr.c���������������������������������������������������������0000664�0000000�0000000�00000004040�14110572173�0020036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbschr (input, ' '); ASSERT (result == input + 4); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbschr (input, ' '); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 3); } /* This test shows how mbschr() is different from strchr(). */ { const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123运行。" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 5); } { const char input[] = "\312\300\275\347\304\343\272\303\243\241"; /* "世界你好!" */ const char *result = mbschr (input, '!'); ASSERT (result == NULL); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbschr.sh��������������������������������������������������������0000775�0000000�0000000�00000000600�14110572173�0020227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbschr${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscspn.c��������������������������������������������������������0000664�0000000�0000000�00000003544�14110572173�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character among a given set of characters. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbscspn ("Some text", "") == 9); { const char input[] = "A long sentence"; ASSERT (mbscspn (input, "aeiou") == 3); ASSERT (mbscspn (input, "iI") == 15); } /* The following tests shows how mbscspn() is different from strcspn(). */ { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbscspn (input, "\303\244\303\274") == 7); /* "äü" */ } #if 0 /* This would be for a GB18030 locale. */ { const char input[] = "B\201\060\213\062se B\250\271bchen"; /* "Böse Bübchen" */ ASSERT (mbscspn (input, "\201\060\212\061\250\271") == 9); /* "äü" */ } #endif { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbscspn (input, "\303") == 14); /* invalid multibyte sequence */ } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbscspn.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbscspn${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsinit.c��������������������������������������������������������0000664�0000000�0000000�00000002677�14110572173�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test for initial conversion state. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbsinit, int, (const mbstate_t *)); #include <locale.h> #include "macros.h" int main (int argc, char *argv[]) { static mbstate_t state; ASSERT (mbsinit (NULL)); ASSERT (mbsinit (&state)); if (argc > 1) { static const char input[1] = "\303"; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (!mbsinit (&state)); } return 0; } �����������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsinit.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsinit${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsncasecmp.c����������������������������������������������������0000664�0000000�0000000�00000005202�14110572173�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbsncasecmp ("paragraph", "Paragraph", 1000000) == 0); ASSERT (mbsncasecmp ("paragraph", "Paragraph", 9) == 0); ASSERT (mbsncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); ASSERT (mbsncasecmp ("paragrapH", "parAgRaph", 9) == 0); ASSERT (mbsncasecmp ("paragraph", "paraLyzed", 10) < 0); ASSERT (mbsncasecmp ("paragraph", "paraLyzed", 9) < 0); ASSERT (mbsncasecmp ("paragraph", "paraLyzed", 5) < 0); ASSERT (mbsncasecmp ("paragraph", "paraLyzed", 4) == 0); ASSERT (mbsncasecmp ("paraLyzed", "paragraph", 10) > 0); ASSERT (mbsncasecmp ("paraLyzed", "paragraph", 9) > 0); ASSERT (mbsncasecmp ("paraLyzed", "paragraph", 5) > 0); ASSERT (mbsncasecmp ("paraLyzed", "paragraph", 4) == 0); ASSERT (mbsncasecmp ("para", "paragraph", 10) < 0); ASSERT (mbsncasecmp ("para", "paragraph", 9) < 0); ASSERT (mbsncasecmp ("para", "paragraph", 5) < 0); ASSERT (mbsncasecmp ("para", "paragraph", 4) == 0); ASSERT (mbsncasecmp ("paragraph", "para", 10) > 0); ASSERT (mbsncasecmp ("paragraph", "para", 9) > 0); ASSERT (mbsncasecmp ("paragraph", "para", 5) > 0); ASSERT (mbsncasecmp ("paragraph", "para", 4) == 0); /* The following tests shows how mbsncasecmp() is different from strncasecmp(). */ ASSERT (mbsncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) == 0); /* özgür */ ASSERT (mbsncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) == 0); /* özgür */ /* This test shows how strings of different size can compare equal. */ ASSERT (mbsncasecmp ("turkish", "TURK\304\260SH", 7) == 0); ASSERT (mbsncasecmp ("TURK\304\260SH", "turkish", 7) == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsncasecmp.sh���������������������������������������������������0000775�0000000�0000000�00000000611�14110572173�0021246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbsncasecmp${EXEEXT} �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtoc32s-1.sh�������������������������������������������������0000775�0000000�0000000�00000000564�14110572173�0021277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtoc32s${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtoc32s-2.sh�������������������������������������������������0000775�0000000�0000000�00000000607�14110572173�0021276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtoc32s${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtoc32s-3.sh�������������������������������������������������0000775�0000000�0000000�00000000577�14110572173�0021305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtoc32s${EXEEXT} 3 ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtoc32s-4.sh�������������������������������������������������0000775�0000000�0000000�00000000621�14110572173�0021274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtoc32s${EXEEXT} 4 ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtoc32s.c����������������������������������������������������0000664�0000000�0000000�00000023344�14110572173�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to 32-bit wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (mbsnrtoc32s, size_t, (char32_t *, const char **, size_t, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <string.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 NUL byte input. */ { const char *src; memset (&state, '\0', sizeof (mbstate_t)); src = ""; ret = mbsnrtoc32s (NULL, &src, 1, 0, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); src = ""; ret = mbsnrtoc32s (NULL, &src, 1, 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; src = ""; ret = mbsnrtoc32s (&wc, &src, 1, 0, &state); ASSERT (ret == 0); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; src = ""; ret = mbsnrtoc32s (&wc, &src, 1, 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); } if (argc > 1) { int unlimited; for (unlimited = 0; unlimited < 2; unlimited++) { #define BUFSIZE 10 char32_t buf[BUFSIZE]; const char *src; mbstate_t temp_state; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (char32_t) 0xBADFACE; } switch (argv[1][0]) { case '1': /* 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'); ASSERT (mbsinit (&state)); input[1] = '\0'; src = input + 2; temp_state = state; ret = mbsnrtoc32s (NULL, &src, 4, unlimited ? BUFSIZE : 1, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 2); ASSERT (mbsinit (&state)); src = input + 2; ret = mbsnrtoc32s (buf, &src, 4, unlimited ? BUFSIZE : 1, &state); ASSERT (ret == (unlimited ? 3 : 1)); ASSERT (src == (unlimited ? NULL : input + 3)); ASSERT (c32tob (buf[0]) == (unsigned char) '\337'); if (unlimited) { ASSERT (buf[1] == 'e'); ASSERT (buf[2] == 'r'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[1] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '2': /* 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'; src = input + 2; temp_state = state; ret = mbsnrtoc32s (NULL, &src, 9, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsnrtoc32s (buf, &src, 9, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 5)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 0x1F60B); /* expect Unicode encoding */ ASSERT (buf[3] == '!'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '3': /* 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); 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'; src = input + 4; temp_state = state; ret = mbsnrtoc32s (NULL, &src, 5, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 4); ASSERT (!mbsinit (&state)); src = input + 4; ret = mbsnrtoc32s (buf, &src, 5, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '>'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '4': /* Locale encoding is GB18030. */ { 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'; src = input + 2; temp_state = state; ret = mbsnrtoc32s (NULL, &src, 11, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsnrtoc32s (buf, &src, 11, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (c32tob (buf[2]) == EOF); ASSERT (buf[3] == '!'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; default: return 1; } } return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtowcs.c�����������������������������������������������������0000664�0000000�0000000�00000023147�14110572173�0020772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbsnrtowcs, size_t, (wchar_t *, char const **, size_t, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL byte input. */ { const char *src; memset (&state, '\0', sizeof (mbstate_t)); src = ""; ret = mbsnrtowcs (NULL, &src, 1, 0, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); src = ""; ret = mbsnrtowcs (NULL, &src, 1, 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsnrtowcs (&wc, &src, 1, 0, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsnrtowcs (&wc, &src, 1, 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); } if (argc > 1) { int unlimited; for (unlimited = 0; unlimited < 2; unlimited++) { #define BUFSIZE 10 wchar_t buf[BUFSIZE]; const char *src; mbstate_t temp_state; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (wchar_t) 0xBADFACE; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "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 == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (mbsinit (&state)); input[1] = '\0'; src = input + 2; temp_state = state; ret = mbsnrtowcs (NULL, &src, 4, unlimited ? BUFSIZE : 1, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 2); ASSERT (mbsinit (&state)); src = input + 2; ret = mbsnrtowcs (buf, &src, 4, unlimited ? BUFSIZE : 1, &state); ASSERT (ret == (unlimited ? 3 : 1)); ASSERT (src == (unlimited ? NULL : input + 3)); ASSERT (wctob (buf[0]) == (unsigned char) '\337'); if (unlimited) { ASSERT (buf[1] == 'e'); ASSERT (buf[2] == 'r'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (wchar_t) 0xBADFACE); } else ASSERT (buf[1] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '2': /* Locale encoding is UTF-8. */ { 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'; src = input + 2; temp_state = state; ret = mbsnrtowcs (NULL, &src, 6, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsnrtowcs (buf, &src, 6, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 5)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 'e'); ASSERT (buf[3] == 'r'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '3': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; src = input + 4; temp_state = state; ret = mbsnrtowcs (NULL, &src, 5, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 4); ASSERT (!mbsinit (&state)); src = input + 4; ret = mbsnrtowcs (buf, &src, 5, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '>'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '4': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "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'; src = input + 2; temp_state = state; ret = mbsnrtowcs (NULL, &src, 8, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsnrtowcs (buf, &src, 8, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 'e'); ASSERT (buf[3] == 'r'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; default: return 1; } } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtowcs1.sh���������������������������������������������������0000775�0000000�0000000�00000000563�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtowcs${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtowcs2.sh���������������������������������������������������0000775�0000000�0000000�00000000606�14110572173�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtowcs${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtowcs3.sh���������������������������������������������������0000775�0000000�0000000�00000000576�14110572173�0021251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtowcs${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsnrtowcs4.sh���������������������������������������������������0000775�0000000�0000000�00000000620�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsnrtowcs${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbspbrk.c��������������������������������������������������������0000664�0000000�0000000�00000003231�14110572173�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character among a given set of characters. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbspbrk ("Some text", "") == NULL); { const char input[] = "A long sentence"; ASSERT (mbspbrk (input, "aeiou") == input + 3); ASSERT (mbspbrk (input, "iI") == NULL); } /* The following tests shows how mbspbrk() is different from strpbrk(). */ { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303\244\303\274") == input + 7); /* "äü" */ } { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303") == NULL); /* invalid multibyte sequence */ } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbspbrk.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbspbrk${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbspcasecmp.c����������������������������������������������������0000664�0000000�0000000�00000004627�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char string[] = "paragraph"; ASSERT (mbspcasecmp (string, "Paragraph") == string + 9); } { const char string[] = "paragrapH"; ASSERT (mbspcasecmp (string, "parAgRaph") == string + 9); } { const char string[] = "paragraph"; ASSERT (mbspcasecmp (string, "paraLyzed") == NULL); } { const char string[] = "paraLyzed"; ASSERT (mbspcasecmp (string, "paragraph") == NULL); } { const char string[] = "para"; ASSERT (mbspcasecmp (string, "paragraph") == NULL); } { const char string[] = "paragraph"; ASSERT (mbspcasecmp (string, "para") == string + 4); } /* The following tests shows how mbspcasecmp() is different from strncasecmp(). */ { const char string[] = "\303\266zg\303\274rt\303\274k"; /* özgürtük */ ASSERT (mbspcasecmp (string, "\303\226ZG\303\234R") == string + 7); /* özgür */ } { const char string[] = "\303\226ZG\303\234Rt\303\274k"; /* özgürtük */ ASSERT (mbspcasecmp (string, "\303\266zg\303\274r") == string + 7); /* özgür */ } /* This test shows how strings of different size can compare equal. */ { const char string[] = "turkishtime"; ASSERT (mbspcasecmp (string, "TURK\304\260SH") == string + 7); } { const char string[] = "TURK\304\260SHK\303\234LT\303\234R"; ASSERT (mbspcasecmp (string, "turkish") == string + 8); } return 0; } ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbspcasecmp.sh���������������������������������������������������0000775�0000000�0000000�00000000611�14110572173�0021250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific Turkish locale is installed. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no turkish Unicode locale is installed" else echo "Skipping test: no turkish Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_TR_UTF8 \ ${CHECKER} ./test-mbspcasecmp${EXEEXT} �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrchr.c��������������������������������������������������������0000664�0000000�0000000�00000003635�14110572173�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for the last occurrence of a character. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbsrchr (input, ' '); ASSERT (result == input + 9); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbsrchr (input, ' '); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */ const char *result = mbsrchr (input, '2'); ASSERT (result == input + 3); } /* This test shows how mbschr() is different from strchr(). */ { const char input[] = "\203\062\332\066123\324\313\203\062\332\066\320\320\241\243"; /* "씋123运씋行。" */ const char *result = mbsrchr (input, '2'); ASSERT (result == input + 5); } return 0; } ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrchr.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbsrchr${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtoc32s-1.sh��������������������������������������������������0000775�0000000�0000000�00000000563�14110572173�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtoc32s${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtoc32s-2.sh��������������������������������������������������0000775�0000000�0000000�00000000606�14110572173�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtoc32s${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtoc32s-3.sh��������������������������������������������������0000775�0000000�0000000�00000000576�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtoc32s${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtoc32s-4.sh��������������������������������������������������0000775�0000000�0000000�00000000620�14110572173�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtoc32s${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtoc32s.c�����������������������������������������������������0000664�0000000�0000000�00000023251�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to 32-bit wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (mbsrtoc32s, size_t, (char32_t *, const char **, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <string.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 NUL byte input. */ { const char *src; memset (&state, '\0', sizeof (mbstate_t)); src = ""; ret = mbsrtoc32s (NULL, &src, 0, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); src = ""; ret = mbsrtoc32s (NULL, &src, 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; src = ""; ret = mbsrtoc32s (&wc, &src, 0, &state); ASSERT (ret == 0); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; src = ""; ret = mbsrtoc32s (&wc, &src, 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); } if (argc > 1) { int unlimited; for (unlimited = 0; unlimited < 2; unlimited++) { #define BUFSIZE 10 char32_t buf[BUFSIZE]; const char *src; mbstate_t temp_state; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (char32_t) 0xBADFACE; } switch (argv[1][0]) { case '1': /* 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'); ASSERT (mbsinit (&state)); input[1] = '\0'; src = input + 2; temp_state = state; ret = mbsrtoc32s (NULL, &src, unlimited ? BUFSIZE : 1, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 2); ASSERT (mbsinit (&state)); src = input + 2; ret = mbsrtoc32s (buf, &src, unlimited ? BUFSIZE : 1, &state); ASSERT (ret == (unlimited ? 3 : 1)); ASSERT (src == (unlimited ? NULL : input + 3)); ASSERT (c32tob (buf[0]) == (unsigned char) '\337'); if (unlimited) { ASSERT (buf[1] == 'e'); ASSERT (buf[2] == 'r'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[1] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '2': /* 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'; src = input + 2; temp_state = state; ret = mbsrtoc32s (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsrtoc32s (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 5)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 0x1F60B); /* expect Unicode encoding */ ASSERT (buf[3] == '!'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '3': /* 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); 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'; src = input + 4; temp_state = state; ret = mbsrtoc32s (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 4); ASSERT (!mbsinit (&state)); src = input + 4; ret = mbsrtoc32s (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '>'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '4': /* Locale encoding is GB18030. */ { 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'; src = input + 2; temp_state = state; ret = mbsrtoc32s (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsrtoc32s (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (c32tob (buf[2]) == EOF); ASSERT (buf[3] == '!'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; default: return 1; } } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtowcs.c������������������������������������������������������0000664�0000000�0000000�00000023055�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbsrtowcs, size_t, (wchar_t *, char const **, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL byte input. */ { const char *src; memset (&state, '\0', sizeof (mbstate_t)); src = ""; ret = mbsrtowcs (NULL, &src, 0, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); src = ""; ret = mbsrtowcs (NULL, &src, 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsrtowcs (&wc, &src, 0, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsrtowcs (&wc, &src, 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); } if (argc > 1) { int unlimited; for (unlimited = 0; unlimited < 2; unlimited++) { #define BUFSIZE 10 wchar_t buf[BUFSIZE]; const char *src; mbstate_t temp_state; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (wchar_t) 0xBADFACE; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "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 == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (mbsinit (&state)); input[1] = '\0'; src = input + 2; temp_state = state; ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 1, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 2); ASSERT (mbsinit (&state)); src = input + 2; ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 1, &state); ASSERT (ret == (unlimited ? 3 : 1)); ASSERT (src == (unlimited ? NULL : input + 3)); ASSERT (wctob (buf[0]) == (unsigned char) '\337'); if (unlimited) { ASSERT (buf[1] == 'e'); ASSERT (buf[2] == 'r'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (wchar_t) 0xBADFACE); } else ASSERT (buf[1] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '2': /* Locale encoding is UTF-8. */ { 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'; src = input + 2; temp_state = state; ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 5)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 'e'); ASSERT (buf[3] == 'r'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '3': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; src = input + 4; temp_state = state; ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 4); ASSERT (!mbsinit (&state)); src = input + 4; ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '>'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; case '4': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "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'; src = input + 2; temp_state = state; ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); src = input + 2; ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); ASSERT (ret == (unlimited ? 4 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == 'e'); ASSERT (buf[3] == 'r'); ASSERT (buf[4] == 0); ASSERT (buf[5] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } break; default: return 1; } } return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtowcs1.sh����������������������������������������������������0000775�0000000�0000000�00000000562�14110572173�0021064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtowcs${EXEEXT} 1 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtowcs2.sh����������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtowcs${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtowcs3.sh����������������������������������������������������0000775�0000000�0000000�00000000575�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtowcs${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsrtowcs4.sh����������������������������������������������������0000775�0000000�0000000�00000000617�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsrtowcs${EXEEXT} 4 �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsspn.c���������������������������������������������������������0000664�0000000�0000000�00000003511�14110572173�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character outside a given set of characters. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbsspn ("Some text", "") == 0); ASSERT (mbsspn ("A long sentence", " ") == 0); ASSERT (mbsspn (" xy", "aei ou") == 2); ASSERT (mbsspn ("eau", "aeiou") == 3); /* The following tests shows how mbsspn() is different from strspn(). */ { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303\266") == 2); /* "ö" */ ASSERT (mbsspn (input, "\303\244") == 0); /* "ä" */ ASSERT (mbsspn (input, "\303\274\303\266") == 4); /* "üö" */ ASSERT (mbsspn (input, "\303\244\303\274") == 0); /* "äü" */ ASSERT (mbsspn (input, "\303\244\303\266") == 2); /* "äö" */ } { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303") == 0); /* invalid multibyte sequence */ } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsspn.sh��������������������������������������������������������0000775�0000000�0000000�00000000600�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsspn${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsstr1.c��������������������������������������������������������0000664�0000000�0000000�00000006515�14110572173�0020164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <stdlib.h> #include "macros.h" int main () { /* This test is executed in the C locale. */ { const char input[] = "foo"; const char *result = mbsstr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = mbsstr (input, "o"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = mbsstr (input, "ABCDABD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = mbsstr (input, "ABCDABE"); ASSERT (result == NULL); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbsstr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbsstr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = mbsstr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsstr2.c��������������������������������������������������������0000664�0000000�0000000�00000010245�14110572173�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include <stdlib.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "f\303\266\303\266"; const char *result = mbsstr (input, ""); ASSERT (result == input); } { const char input[] = "f\303\266\303\266"; const char *result = mbsstr (input, "\303\266"); ASSERT (result == input + 1); } { const char input[] = "f\303\266\303\266"; const char *result = mbsstr (input, "\266\303"); ASSERT (result == NULL); } { const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ const char *result = mbsstr (input, "\303\204BCD\303\204BD"); /* "ÄBCDÄBD" */ ASSERT (result == input + 19); } { const char input[] = "\303\204BC \303\204BCD\303\204B \303\204BCD\303\204BCD\303\204BDE"; /* "ÄBC ÄBCDÄB ÄBCDÄBCDÄBDE" */ const char *result = mbsstr (input, "\303\204BCD\303\204BE"); /* "ÄBCDÄBE" */ ASSERT (result == NULL); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = '\303'; haystack[1] = '\204'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbsstr (haystack, needle) == haystack + 2); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207" "A\303\207A\303\207A\303\207A\303\207A\303\207A\303\207"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (mbsstr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 3); char *needle = (char *) malloc (m + 3); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = '\303'; haystack[2 * m + 1] = '\207'; haystack[2 * m + 2] = '\0'; memset (needle, 'A', m); needle[m] = '\303'; needle[m + 1] = '\207'; needle[m + 2] = '\0'; result = mbsstr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsstr2.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbsstr2${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbsstr3.c��������������������������������������������������������0000664�0000000�0000000�00000004714�14110572173�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbsstr (input, " "); ASSERT (result == input + 4); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbsstr (input, " "); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */ const char *result = mbsstr (input, "2"); ASSERT (result == input + 3); } /* The following tests show how mbsstr() is different from strstr(). */ { const char input[] = "\313\320\320\320"; /* "诵行" */ const char *result = mbsstr (input, "\320\320"); /* "行" */ ASSERT (result == input + 2); } { const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123运行。" */ const char *result = mbsstr (input, "2"); ASSERT (result == input + 5); } { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbsstr (input, "\276\300"); /* "纠" */ ASSERT (result == NULL); } { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbsstr (input, "\375 "); /* invalid multibyte sequence */ ASSERT (result == NULL); } return 0; } ����������������������������������������������������gnulib-20210822~d383792/tests/test-mbsstr3.sh�������������������������������������������������������0000775�0000000�0000000�00000000601�14110572173�0020347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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 chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbsstr3${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbstoc32s-1.sh���������������������������������������������������0000775�0000000�0000000�00000000562�14110572173�0020735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbstoc32s${EXEEXT} 1 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbstoc32s-2.sh���������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbstoc32s${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbstoc32s-3.sh���������������������������������������������������0000775�0000000�0000000�00000000575�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbstoc32s${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbstoc32s-4.sh���������������������������������������������������0000775�0000000�0000000�00000000617�14110572173�0020741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-mbstoc32s${EXEEXT} 4 �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mbstoc32s.c������������������������������������������������������0000664�0000000�0000000�00000016662�14110572173�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to 32-bit wide string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 (mbstoc32s, size_t, (char32_t *, const char *, size_t)); #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { char32_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL byte input. */ { const char *src; src = ""; ret = mbstoc32s (NULL, src, 0); ASSERT (ret == 0); src = ""; ret = mbstoc32s (NULL, src, 1); ASSERT (ret == 0); wc = (char32_t) 0xBADFACE; src = ""; ret = mbstoc32s (&wc, src, 0); ASSERT (ret == 0); ASSERT (wc == (char32_t) 0xBADFACE); wc = (char32_t) 0xBADFACE; src = ""; ret = mbstoc32s (&wc, src, 1); ASSERT (ret == 0); ASSERT (wc == 0); } if (argc > 1) { int unlimited; for (unlimited = 0; unlimited < 2; unlimited++) { #define BUFSIZE 10 char32_t buf[BUFSIZE]; const char *src; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = (char32_t) 0xBADFACE; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "Büßer" */ wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input, 1); ASSERT (ret == 1); ASSERT (wc == 'B'); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input + 1, 1); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\374'); input[1] = '\0'; src = input + 2; ret = mbstoc32s (NULL, src, unlimited ? BUFSIZE : 1); ASSERT (ret == 3); src = input + 2; ret = mbstoc32s (buf, src, unlimited ? BUFSIZE : 1); ASSERT (ret == (unlimited ? 3 : 1)); ASSERT (c32tob (buf[0]) == (unsigned char) '\337'); if (unlimited) { ASSERT (buf[1] == 'e'); ASSERT (buf[2] == 'r'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[1] == (char32_t) 0xBADFACE); } break; case '2': /* Locale encoding is UTF-8. */ { char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input, 1); ASSERT (ret == 1); ASSERT (wc == 's'); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input + 1, 1); ASSERT (ret == 1); ASSERT (wc == 0x00FC); /* expect Unicode encoding */ input[1] = '\0'; input[2] = '\0'; src = input + 3; ret = mbstoc32s (NULL, src, unlimited ? BUFSIZE : 2); ASSERT (ret == 3); src = input + 3; ret = mbstoc32s (buf, src, unlimited ? BUFSIZE : 2); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (buf[0] == 0x00DF); /* expect Unicode encoding */ ASSERT (buf[1] == 0x1F60B); /* expect Unicode encoding */ if (unlimited) { ASSERT (buf[2] == '!'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); } break; case '3': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input, 1); ASSERT (ret == 1); ASSERT (wc == '<'); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input + 1, 1); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); input[1] = '\0'; input[2] = '\0'; src = input + 3; ret = mbstoc32s (NULL, src, unlimited ? BUFSIZE : 2); ASSERT (ret == 3); src = input + 3; ret = mbstoc32s (buf, src, unlimited ? BUFSIZE : 2); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '>'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); } break; case '4': /* Locale encoding is GB18030. */ { char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input, 1); ASSERT (ret == 1); ASSERT (wc == 's'); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbstoc32s (&wc, input + 1, 1); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); input[1] = '\0'; src = input + 3; ret = mbstoc32s (NULL, src, unlimited ? BUFSIZE : 2); ASSERT (ret == 3); src = input + 3; ret = mbstoc32s (buf, src, unlimited ? BUFSIZE : 2); ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (c32tob (buf[0]) == EOF); ASSERT (c32tob (buf[1]) == EOF); if (unlimited) { ASSERT (buf[2] == '!'); ASSERT (buf[3] == 0); ASSERT (buf[4] == (char32_t) 0xBADFACE); } else ASSERT (buf[2] == (char32_t) 0xBADFACE); } break; default: return 1; } } return 0; } return 1; } ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-md2.c������������������������������������������������������������0000664�0000000�0000000�00000003615�14110572173�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * * This 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, 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 Simon Josefsson. */ #include <config.h> #include "md2.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { const char *in1 = "abc"; const char *out1 = "\xda\x85\x3b\x0d\x3f\x88\xd9\x9b\x30\x28\x3a\x69\xe6\xde\xd6\xbb"; const char *in2 = "abcdefghijklmnopqrstuvwxyz"; const char *out2 = "\x4e\x8d\xdf\xf3\x65\x02\x92\xab\x5a\x41\x08\xc3\xaa\x47\x94\x0b"; char buf[MD2_DIGEST_SIZE]; if (memcmp (md2_buffer (in1, strlen (in1), buf), out1, MD2_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD2_DIGEST_SIZE; i++) printf ("%02x ", out1[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD2_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } if (memcmp (md2_buffer (in2, strlen (in2), buf), out2, MD2_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD2_DIGEST_SIZE; i++) printf ("%02x ", out2[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD2_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } return 0; } �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-md4.c������������������������������������������������������������0000664�0000000�0000000�00000003653�14110572173�0017255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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, 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 Simon Josefsson. */ #include <config.h> #include "md4.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { const char *in1 = "abc"; const char *out1 = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d"; const char *in2 = "abcdefghijklmnopqrstuvwxyz"; const char *out2 = "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd\xee\xa8\xed\x63\xdf\x41\x2d\xa9"; char buf[MD4_DIGEST_SIZE]; if (memcmp (md4_buffer (in1, strlen (in1), buf), out1, MD4_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD4_DIGEST_SIZE; i++) printf ("%02x ", out1[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD4_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } if (memcmp (md4_buffer (in2, strlen (in2), buf), out2, MD4_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD4_DIGEST_SIZE; i++) printf ("%02x ", out2[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD4_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } return 0; } �������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-md5.c������������������������������������������������������������0000664�0000000�0000000�00000004630�14110572173�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 Simon Josefsson. */ #include <config.h> #include "md5.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #define TESTFILE "test-md5.data" #include "test-digest.h" int main (void) { /* Test vectors from RFC 1321. */ const char *in1 = "abc"; const char *out1 = "\x90\x01\x50\x98\x3C\xD2\x4F\xB0\xD6\x96\x3F\x7D\x28\xE1\x7F\x72"; const char *in2 = "message digest"; const char *out2 = "\xF9\x6B\x69\x7D\x7C\xB7\x93\x8D\x52\x5A\x2F\x31\xAA\xF1\x61\xD0"; char buf[MD5_DIGEST_SIZE]; if (memcmp (md5_buffer (in1, strlen (in1), buf), out1, MD5_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", out1[i] & 0xFFu); printf ("\ncomputed:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFFu); printf ("\n"); return 1; } if (memcmp (md5_buffer (in2, strlen (in2), buf), out2, MD5_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", out2[i] & 0xFFu); printf ("\ncomputed:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFFu); printf ("\n"); return 1; } /* Test md5_stream. */ test_digest_on_files (md5_stream, "md5_stream", 16, "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\x09\x98\xec\xf8\x42\x7e", "\x0d\x70\x06\xcd\x05\x5e\x94\xcf\x61\x45\x87\xe1\xd2\xae\x0c\x8e", "\xec\x99\x67\x9b\xff\xc0\xf9\xb0\x6d\x18\x30\x6b\x06\xd6\x56\x23"); return 0; } ��������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memalign.c�������������������������������������������������������0000664�0000000�0000000�00000006020�14110572173�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of allocating memory with given alignment. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> #if HAVE_MEMALIGN /* Specification. */ # include <malloc.h> # include <stdint.h> # include <stdlib.h> # include <string.h> # include "macros.h" int main (int argc, char *argv[]) { static size_t sizes[] = { 13, 8, 17, 450, 320, 1, 99, 4, 15, 16, 2, 76, 37, 127, 2406, 641, 5781 }; void *aligned2_blocks[SIZEOF (sizes)]; void *aligned4_blocks[SIZEOF (sizes)]; void *aligned8_blocks[SIZEOF (sizes)]; void *aligned16_blocks[SIZEOF (sizes)]; void *aligned32_blocks[SIZEOF (sizes)]; void *aligned64_blocks[SIZEOF (sizes)]; size_t i; for (i = 0; i < SIZEOF (sizes); i++) { size_t size = sizes[i]; aligned2_blocks[i] = memalign (2, size); ASSERT (aligned2_blocks[i] != NULL); ASSERT (((uintptr_t) aligned2_blocks[i] % 2) == 0); memset (aligned2_blocks[i], 'u', size); aligned4_blocks[i] = memalign (4, size); ASSERT (aligned4_blocks[i] != NULL); ASSERT (((uintptr_t) aligned4_blocks[i] % 4) == 0); memset (aligned4_blocks[i], 'v', size); aligned8_blocks[i] = memalign (8, size); ASSERT (aligned8_blocks[i] != NULL); ASSERT (((uintptr_t) aligned8_blocks[i] % 8) == 0); memset (aligned8_blocks[i], 'w', size); aligned16_blocks[i] = memalign (16, size); ASSERT (aligned16_blocks[i] != NULL); ASSERT (((uintptr_t) aligned16_blocks[i] % 16) == 0); memset (aligned16_blocks[i], 'x', size); aligned32_blocks[i] = memalign (32, size); ASSERT (aligned32_blocks[i] != NULL); ASSERT (((uintptr_t) aligned32_blocks[i] % 32) == 0); memset (aligned32_blocks[i], 'y', size); aligned64_blocks[i] = memalign (64, size); ASSERT (aligned64_blocks[i] != NULL); ASSERT (((uintptr_t) aligned64_blocks[i] % 64) == 0); memset (aligned64_blocks[i], 'z', size); } for (i = 0; i < SIZEOF (sizes); i++) { free (aligned2_blocks[i]); free (aligned4_blocks[i]); free (aligned8_blocks[i]); free (aligned16_blocks[i]); free (aligned32_blocks[i]); free (aligned64_blocks[i]); } return 0; } #else # include <stdio.h> int main (int argc, char *argv[]) { fputs ("Skipping test: function 'memalign' does not exist\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memcasecmp.c�����������������������������������������������������0000664�0000000�0000000�00000004557�14110572173�0020707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson and Bruno Haible * * This 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 "memcasecmp.h" #include <string.h> #include "zerosize-ptr.h" #include "macros.h" int main (void) { /* Test equal / not equal distinction. */ void *page_boundary1 = zerosize_ptr (); void *page_boundary2 = zerosize_ptr (); if (page_boundary1 && page_boundary2) ASSERT (memcasecmp (page_boundary1, page_boundary2, 0) == 0); ASSERT (memcasecmp ("foo", "foobar", 2) == 0); ASSERT (memcasecmp ("foo", "foobar", 3) == 0); ASSERT (memcasecmp ("foo", "foobar", 4) != 0); ASSERT (memcasecmp ("foo", "bar", 1) != 0); ASSERT (memcasecmp ("foo", "bar", 3) != 0); /* Test less / equal / greater distinction. */ ASSERT (memcasecmp ("foo", "moo", 4) < 0); ASSERT (memcasecmp ("moo", "foo", 4) > 0); ASSERT (memcasecmp ("oomph", "oops", 3) < 0); ASSERT (memcasecmp ("oops", "oomph", 3) > 0); ASSERT (memcasecmp ("foo", "foobar", 4) < 0); ASSERT (memcasecmp ("foobar", "foo", 4) > 0); /* Test embedded NULs. */ ASSERT (memcasecmp ("1\0", "2\0", 2) < 0); ASSERT (memcasecmp ("2\0", "1\0", 2) > 0); ASSERT (memcasecmp ("x\0""1", "x\0""2", 3) < 0); ASSERT (memcasecmp ("x\0""2", "x\0""1", 3) > 0); /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); ASSERT (memcasecmp (a, b, 16) < 0); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memchr.c���������������������������������������������������������0000664�0000000�0000000�00000007431�14110572173�0020042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (memchr, void *, (void const *, int, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMCHR (char *) memchr int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; /* Basic behavior tests. */ ASSERT (MEMCHR (input, 'a', n) == input); ASSERT (MEMCHR (input, 'a', 0) == NULL); { void *page_boundary = zerosize_ptr (); if (page_boundary) ASSERT (MEMCHR (page_boundary, 'a', 0) == NULL); } ASSERT (MEMCHR (input, 'b', n) == input + 1); ASSERT (MEMCHR (input, 'c', n) == input + 2); ASSERT (MEMCHR (input, 'd', n) == input + 1026); ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input + 1, 0x789abc00 | 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input, 'f', n) == NULL); ASSERT (MEMCHR (input, '\0', n) == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMCHR (input, 'c', n) == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMCHR (input + i, j, 256) == input + i + j); } } } /* Check that memchr() does not read past the first occurrence of the byte being searched. See the Austin Group's clarification <https://www.opengroup.org/austin/docs/austin_454.txt>. Test both '\0' and something else, since some implementations special-case searching for NUL. */ { char *page_boundary = (char *) zerosize_ptr (); /* Too small, and we miss cache line boundary tests; too large, and the test takes cubically longer to complete. */ int limit = 257; if (page_boundary != NULL) { for (n = 1; n <= limit; n++) { char *mem = page_boundary - n; memset (mem, 'X', n); ASSERT (MEMCHR (mem, 'U', n) == NULL); ASSERT (MEMCHR (mem, 0, n) == NULL); { size_t i; size_t k; for (i = 0; i < n; i++) { mem[i] = 'U'; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 'U', k) == mem + i); mem[i] = 0; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 0, k) == mem + i); mem[i] = 'X'; } } } } } free (input); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memchr2.c��������������������������������������������������������0000664�0000000�0000000�00000005743�14110572173�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake * * This 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 "memchr2.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMCHR2 (char *) memchr2 int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; /* Basic behavior tests. */ ASSERT (MEMCHR2 (input, 'a', 'b', n) == input); ASSERT (MEMCHR2 (input, 'b', 'a', n) == input); ASSERT (MEMCHR2 (input, 'a', 'b', 0) == NULL); void *page_boundary = zerosize_ptr (); if (page_boundary) ASSERT (MEMCHR2 (page_boundary, 'a', 'b', 0) == NULL); ASSERT (MEMCHR2 (input, 'b', 'd', n) == input + 1); ASSERT (MEMCHR2 (input + 2, 'b', 'd', n - 2) == input + 1026); ASSERT (MEMCHR2 (input, 'd', 'e', n) == input + 1026); ASSERT (MEMCHR2 (input, 'e', 'd', n) == input + 1026); ASSERT (MEMCHR2 (input + 1, 'a', 'e', n - 1) == input + n - 2); ASSERT (MEMCHR2 (input + 1, 'e', 'a', n - 1) == input + n - 2); ASSERT (MEMCHR2 (input, 'f', 'g', n) == NULL); ASSERT (MEMCHR2 (input, 'f', '\0', n) == NULL); ASSERT (MEMCHR2 (input, 'a', 'a', n) == input); ASSERT (MEMCHR2 (input + 1, 'a', 'a', n - 1) == input + n - 1); ASSERT (MEMCHR2 (input, 'f', 'f', n) == NULL); /* Check that a very long haystack is handled quickly if one of the two bytes is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMCHR2 (input, 'c', 'e', n) == input + 2); ASSERT (MEMCHR2 (input, 'e', 'c', n) == input + 2); ASSERT (MEMCHR2 (input, 'c', '\0', n) == input + 2); ASSERT (MEMCHR2 (input, '\0', 'c', n) == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMCHR2 (input + i, j, 0xff, 256) == input + i + j); ASSERT (MEMCHR2 (input + i, 0xff, j, 256) == input + i + j); } } } free (input); return 0; } �����������������������������gnulib-20210822~d383792/tests/test-memcmp.c���������������������������������������������������������0000664�0000000�0000000�00000005174�14110572173�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (memcmp, int, (void const *, void const *, size_t)); #include "zerosize-ptr.h" #include "macros.h" int main (void) { int (* volatile memcmp_ptr) (const void *, const void *, size_t) = memcmp; /* Test equal / not equal distinction. */ void *page_boundary1 = zerosize_ptr (); void *page_boundary2 = zerosize_ptr (); if (page_boundary1 && page_boundary2) ASSERT (memcmp (page_boundary1, page_boundary2, 0) == 0); ASSERT (memcmp ("foo", "foobar", 2) == 0); ASSERT (memcmp ("foo", "foobar", 3) == 0); ASSERT (memcmp ("foo", "foobar", 4) != 0); ASSERT (memcmp ("foo", "bar", 1) != 0); ASSERT (memcmp ("foo", "bar", 3) != 0); /* Test less / equal / greater distinction. */ ASSERT (memcmp ("foo", "moo", 4) < 0); ASSERT (memcmp ("moo", "foo", 4) > 0); ASSERT (memcmp ("oomph", "oops", 3) < 0); ASSERT (memcmp ("oops", "oomph", 3) > 0); ASSERT (memcmp ("foo", "foobar", 4) < 0); ASSERT (memcmp ("foobar", "foo", 4) > 0); /* Some old versions of memcmp were not 8-bit clean. */ /* Use the function pointer here, because otherwise this test is sometimes miscompiled by 'clang'. See <https://bugs.llvm.org/show_bug.cgi?id=40063>. */ ASSERT (memcmp_ptr ("\100", "\201", 1) < 0); ASSERT (memcmp_ptr ("\201", "\100", 1) > 0); ASSERT (memcmp_ptr ("\200", "\201", 1) < 0); ASSERT (memcmp_ptr ("\201", "\200", 1) > 0); /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); ASSERT (memcmp (a, b, 16) < 0); } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memcoll.c��������������������������������������������������������0000664�0000000�0000000�00000003346�14110572173�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson and Bruno Haible * * This 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 "memcoll.h" #include <string.h> #include "macros.h" int main (void) { /* Test equal / not equal distinction. */ ASSERT (memcoll0 ("", 1, "", 1) == 0); ASSERT (memcoll0 ("fo", 3, "fo", 3) == 0); ASSERT (memcoll0 ("foo", 4, "foo", 4) == 0); ASSERT (memcoll0 ("foo\0", 5, "foob", 5) != 0); ASSERT (memcoll0 ("f", 2, "b", 2) != 0); ASSERT (memcoll0 ("foo", 4, "bar", 4) != 0); /* Test less / equal / greater distinction. */ ASSERT (memcoll0 ("foo\0", 5, "moo\0", 5) < 0); ASSERT (memcoll0 ("moo\0", 5, "foo\0", 5) > 0); ASSERT (memcoll0 ("oom", 4, "oop", 4) < 0); ASSERT (memcoll0 ("oop", 4, "oom", 4) > 0); ASSERT (memcoll0 ("foo\0", 5, "foob", 5) < 0); ASSERT (memcoll0 ("foob", 5, "foo\0", 5) > 0); /* Test embedded NULs. */ ASSERT (memcoll0 ("1\0", 3, "2\0", 3) < 0); ASSERT (memcoll0 ("2\0", 3, "1\0", 3) > 0); ASSERT (memcoll0 ("x\0""1", 4, "x\0""2", 4) < 0); ASSERT (memcoll0 ("x\0""2", 4, "x\0""1", 4) > 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memmem.c���������������������������������������������������������0000664�0000000�0000000�00000022361�14110572173�0020043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc. * Written by Bruno Haible and Eric Blake * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (memmem, void *, (void const *, size_t, void const *, size_t)); #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "zerosize-ptr.h" #include "macros.h" int main (int argc, char *argv[]) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. All known platforms that lack alarm also lack memmem, and the replacement memmem is known to not take too long. */ int alarm_value = 100; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { const char input[] = "foo"; const char *result = memmem (input, strlen (input), "", 0); ASSERT (result == input); } { const char input[] = "foo"; const char *result = memmem (input, strlen (input), "o", 1); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = memmem (input, strlen (input), "ABCDABD", 7); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = memmem (input, strlen (input), "ABCDABE", 7); ASSERT (result == NULL); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = memmem (input, strlen (input), "ABCDABCD", 8); ASSERT (result == input + 11); } /* Check that length 0 does not dereference the pointer. */ void *page_boundary = zerosize_ptr (); if (page_boundary) { { const char *result = memmem (page_boundary, 0, "foo", 3); ASSERT (result == NULL); } { const char input[] = "foo"; const char *result = memmem (input, strlen (input), page_boundary, 0); ASSERT (result == input); } } /* Check that a long periodic needle does not cause false positives. */ { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = memmem (input, strlen (input), need, strlen (need)); ASSERT (result == NULL); } { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD_DA_B5_C2_A6_20" "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = memmem (input, strlen (input), need, strlen (need)); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; size_t n = strlen (needle); char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; for (; repeat > 0; repeat--) { ASSERT (memmem (haystack, m, needle, n) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; size_t n = strlen (haystack); char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); for (; repeat > 0; repeat--) { ASSERT (memmem (haystack, n, needle, m) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; memset (needle, 'A', m); needle[m] = 'B'; result = memmem (haystack, 2 * m + 1, needle, m + 1); ASSERT (result == haystack + m); } free (needle); free (haystack); } /* Check that long needles not present in a haystack can be handled with sublinear speed. */ { size_t repeat = 10000; size_t m = 1000000; size_t n = 1000; char *haystack = (char *) malloc (m); char *needle = (char *) malloc (n); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', m); memset (needle, 'B', n); for (; repeat > 0; repeat--) { result = memmem (haystack, m, needle, n); ASSERT (result == NULL); } } free (haystack); free (needle); } { /* Ensure that with a barely periodic "short" needle, memmem's search does not mistakenly skip just past the match point. This use of memmem would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_gnu_ld\n"; const char* p = memmem (haystack, strlen (haystack), needle, strlen (needle)); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.d."; const char *needle = ".d."; const char* p = memmem (haystack, strlen (haystack), needle, strlen (needle)); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, memmem finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = memmem (haystack, strlen (haystack), needle, strlen (needle)); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'x', m); needle[m] = '\0'; p = memmem (haystack, strlen (haystack), needle, strlen (needle)); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-memrchr.c��������������������������������������������������������0000664�0000000�0000000�00000005161�14110572173�0020222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (memrchr, void *, (void const *, int, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Work around GCC bug 101494. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) && __GNUC__ < 12 # pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMRCHR (char *) memrchr int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[n - 1] = 'a'; input[n - 2] = 'b'; memset (input + n - 1026, 'c', 1024); memset (input + 2, 'd', n - 1028); input[1] = 'e'; input[0] = 'a'; /* Basic behavior tests. */ ASSERT (MEMRCHR (input, 'a', n) == input + n - 1); ASSERT (MEMRCHR (input, 'a', 0) == NULL); void *page_boundary = zerosize_ptr (); if (page_boundary) ASSERT (MEMRCHR (page_boundary, 'a', 0) == NULL); ASSERT (MEMRCHR (input, 'b', n) == input + n - 2); ASSERT (MEMRCHR (input, 'c', n) == input + n - 3); ASSERT (MEMRCHR (input, 'd', n) == input + n - 1027); ASSERT (MEMRCHR (input, 'a', n - 1) == input); ASSERT (MEMRCHR (input, 'e', n - 1) == input + 1); ASSERT (MEMRCHR (input, 'f', n) == NULL); ASSERT (MEMRCHR (input, '\0', n) == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the end. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMRCHR (input, 'c', n) == input + n - 3); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMRCHR (input + i, j, 256) == input + i + j); } } } free (input); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkdir.c����������������������������������������������������������0000664�0000000�0000000�00000002375�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkdir. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (mkdir, int, (char const *, mode_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-mkdir.t" #include "test-mkdir.h" int main (void) { /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); return test_mkdir (mkdir, true); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkdir.h����������������������������������������������������������0000664�0000000�0000000�00000006212�14110572173�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of mkdir() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* This file is designed to test both mkdir(a,b) and mkdirat(AT_FDCWD,a,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping tests with status 77 when symlinks are unsupported. */ static int test_mkdir (int (*func) (char const *, mode_t), bool print) { /* Test basic error handling. */ ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func (BASE "file", 0700) == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func (BASE "file/", 0700) == -1); ASSERT (errno == ENOTDIR || errno == EEXIST); errno = 0; ASSERT (func (BASE "file/dir", 0700) == -1); ASSERT (errno == ENOTDIR || errno == ENOENT || errno == EOPNOTSUPP); ASSERT (unlink (BASE "file") == 0); errno = 0; ASSERT (func ("", 0700) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/sub", 0700) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/.", 0700) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "dir/.//", 0700) == -1); ASSERT (errno == ENOENT); /* Test trailing slash handling. */ ASSERT (func (BASE "dir", 0700) == 0); errno = 0; ASSERT (func (BASE "dir", 0700) == -1); ASSERT (errno == EEXIST); ASSERT (rmdir (BASE "dir") == 0); ASSERT (func (BASE "dir/", 0700) == 0); errno = 0; ASSERT (func (BASE "dir/", 0700) == -1); ASSERT (errno == EEXIST); ASSERT (rmdir (BASE "dir") == 0); /* Test symlink behavior. POSIX requires the creation of directories through a dangling symlink with trailing slash, but GNU does not yet implement that, so we support either behavior for now. */ if (symlink (BASE "dir", BASE "link")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "link", 0700) == -1); ASSERT (errno == EEXIST); { int result; errno = 0; result = func (BASE "link/", 0700); if (!result) ASSERT (rmdir (BASE "dir") == 0); else { ASSERT (result == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (rmdir (BASE "dir") == -1); ASSERT (errno == ENOENT); } } errno = 0; ASSERT (func (BASE "link/.", 0700) == -1); ASSERT (errno == ENOENT); ASSERT (unlink (BASE "link") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkdirat.c��������������������������������������������������������0000664�0000000�0000000�00000005031�14110572173�0020214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkdirat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (mkdirat, int, (int, char const *, mode_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-mkdirat.t" #include "test-mkdir.h" static int dfd = AT_FDCWD; /* Wrapper to test mkdirat like mkdir. */ static int do_mkdir (char const *name, mode_t mode) { return mkdirat (dfd, name, mode); } int main (_GL_UNUSED int argc, char *argv[]) { int result; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (mkdirat (-1, "foo", 0700) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (mkdirat (99, "foo", 0700) == -1); ASSERT (errno == EBADF); } /* Test basic mkdir functionality. */ result = test_mkdir (do_mkdir, false); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_mkdir (do_mkdir, false) == result); /* Tests specific to mkdirat. */ ASSERT (mkdirat (dfd, BASE "dir1", 0700) == 0); ASSERT (chdir (BASE "dir1") == 0); ASSERT (close (dfd) == 0); dfd = open ("..", O_RDONLY); ASSERT (0 <= dfd); ASSERT (mkdirat (dfd, BASE "dir2", 0700) == 0); ASSERT (close (dfd) == 0); errno = 0; ASSERT (mkdirat (dfd, BASE "dir3", 0700) == -1); ASSERT (errno == EBADF); dfd = open ("/dev/null", O_RDONLY); ASSERT (0 <= dfd); errno = 0; ASSERT (mkdirat (dfd, "dir3", 0700) == -1); ASSERT (errno == ENOTDIR); ASSERT (close (dfd) == 0); ASSERT (chdir ("..") == 0); ASSERT (rmdir (BASE "dir1") == 0); ASSERT (rmdir (BASE "dir2") == 0); return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkfifo.c���������������������������������������������������������0000664�0000000�0000000�00000002407�14110572173�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifo. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (mkfifo, int, (char const *, mode_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-mkfifo.t" #include "test-mkfifo.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_mkfifo (mkfifo, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkfifo.h���������������������������������������������������������0000664�0000000�0000000�00000005226�14110572173�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifo and friends. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test mkfifo(n,m), mknod(n,m|S_IFIFO,0), mkfifoat(AT_FDCWD,n,m), and mknodat(AT_FDCWD,n,m|S_IFIFO,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_mkfifo (int (*func) (char const *, mode_t), bool print) { int result = func (BASE "fifo", 0600); struct stat st; if (result == -1 && errno == ENOSYS) { if (print) fputs ("skipping test: no support for named fifos\n", stderr); return 77; } ASSERT (result == 0); ASSERT (stat (BASE "fifo", &st) == 0); ASSERT (S_ISFIFO (st.st_mode)); /* Sanity checks of failures. */ errno = 0; ASSERT (func ("", S_IRUSR | S_IWUSR) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (".", 0600) == -1); /* Allow HP-UX 11.11's EISDIR, even though POSIX says it's wrong, since it doesn't really hurt anything and we lack the energy to fix it. */ ASSERT (errno == EEXIST || errno == EINVAL || errno == EISDIR); errno = 0; ASSERT (func (BASE "fifo", 0600) == -1); ASSERT (errno == EEXIST); ASSERT (unlink (BASE "fifo") == 0); errno = 0; ASSERT (func (BASE "fifo/", 0600) == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); /* Test trailing slash behavior. */ if (symlink (BASE "fifo", BASE "link")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "link", 0600) == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func (BASE "link/", 0600) == -1); ASSERT (errno == EEXIST || errno == ENOENT || errno == ENOTDIR); errno = 0; ASSERT (unlink (BASE "fifo") == -1); ASSERT (errno == ENOENT); ASSERT (unlink (BASE "link") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mkfifoat.c�������������������������������������������������������0000664�0000000�0000000�00000010457�14110572173�0020371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifoat and mknodat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (mkfifoat, int, (int, char const *, mode_t)); SIGNATURE_CHECK (mknodat, int, (int, char const *, mode_t, dev_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-mkfifoat.t" #include "test-mkfifo.h" typedef int (*test_func) (int, char const *, mode_t); static int dfd = AT_FDCWD; /* Wrapper to test mknodat like mkfifoat. */ static int test_mknodat (int fd, char const *name, mode_t mode) { /* This is the only portable use of mknodat, per POSIX. */ return mknodat (fd, name, mode | S_IFIFO, 0); } /* Wrapper to test mkfifoat like mkfifo. */ static int do_mkfifoat (char const *name, mode_t mode) { return mkfifoat (dfd, name, mode); } /* Wrapper to test mknodat like mkfifo. */ static int do_mknodat (char const *name, mode_t mode) { return mknodat (dfd, name, mode | S_IFIFO, 0); } int main (void) { int i; test_func funcs[2] = { mkfifoat, test_mknodat }; int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Basic tests. */ result = test_mkfifo (do_mkfifoat, true); ASSERT (test_mkfifo (do_mknodat, false) == result); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_mkfifo (do_mkfifoat, false) == result); ASSERT (test_mkfifo (do_mknodat, false) == result); /* Test directory-relative handling of both functions. */ for (i = 0; i < 2; i++) { struct stat st; test_func func = funcs[i]; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (func (-1, "foo", 0600) == -1); ASSERT (errno == EBADF || errno == ENOSYS /* seen on mingw */ ); } { close (99); errno = 0; ASSERT (func (99, "foo", 0600) == -1); ASSERT (errno == EBADF || errno == ENOSYS /* seen on mingw */ ); } /* Create fifo while cwd is '.', then stat it from '..'. */ if (func (AT_FDCWD, BASE "fifo", 0600) != 0) ASSERT (errno == ENOSYS); /* seen on native Windows */ else { errno = 0; ASSERT (func (dfd, BASE "fifo", 0600) == -1); ASSERT (errno == EEXIST); ASSERT (chdir ("..") == 0); errno = 0; ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, 0) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (fstatat (dfd, BASE "fifo", &st, 0) == 0); ASSERT (S_ISFIFO (st.st_mode)); ASSERT (unlinkat (dfd, BASE "fifo", 0) == 0); } /* Create fifo while cwd is '..', then stat it from '.'. */ if (func (dfd, BASE "fifo", 0600) != 0) ASSERT (errno == ENOSYS); /* seen on native Windows */ else { ASSERT (fchdir (dfd) == 0); errno = 0; ASSERT (func (AT_FDCWD, BASE "fifo", 0600) == -1); ASSERT (errno == EEXIST); memset (&st, 0, sizeof st); ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) == 0); ASSERT (S_ISFIFO (st.st_mode)); memset (&st, 0, sizeof st); ASSERT (fstatat (dfd, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) == 0); ASSERT (S_ISFIFO (st.st_mode)); ASSERT (unlink (BASE "fifo") == 0); } } ASSERT (close (dfd) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mknod.c����������������������������������������������������������0000664�0000000�0000000�00000003042�14110572173�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mknod. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (mknod, int, (char const *, mode_t, dev_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-mknod.t" #include "test-mkfifo.h" /* Wrapper around mknod, to create fifos. */ static int do_mknod (char const *name, mode_t mode) { return mknod (name, mode | S_IFIFO, 0); } int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* We can only portably test creation of fifos. Anything else requires root privileges and knowledge of device numbers. */ return test_mkfifo (do_mknod, true); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modf-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define MODF modf #include "test-modf-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modf-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002743�14110572173�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modf*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ { DOUBLE integer_part = -9999; DOUBLE fractional_part = MODF (NAN, &integer_part); ASSERT (ISNAN (integer_part)); ASSERT (ISNAN (fractional_part)); } /* Infinity. */ { DOUBLE integer_part = -9999; DOUBLE fractional_part = MODF (INFINITY, &integer_part); ASSERT (integer_part == INFINITY); ASSERT (fractional_part == L_(0.0)); ASSERT (!signbit (fractional_part)); } { DOUBLE integer_part = -9999; DOUBLE fractional_part = MODF (- INFINITY, &integer_part); ASSERT (integer_part == - INFINITY); ASSERT (fractional_part == L_(0.0)); ASSERT (!!signbit (fractional_part) == !!signbit (MINUS_ZERO)); } } �����������������������������gnulib-20210822~d383792/tests/test-modf.c�����������������������������������������������������������0000664�0000000�0000000�00000002643�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (modf, double, (double, double *)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MODF modf #define RANDOM randomd #include "test-modf.h" int main () { /* A particular positive value. */ x = 5.972406760; y = modf (x, &z); ASSERT (y >= 0.972406759 && y <= 0.972406761); ASSERT (z == 5.0); /* A particular negative value. */ x = -5.972406760; y = modf (x, &z); ASSERT (y >= -0.972406761 && y <= -0.972406759); ASSERT (z == -5.0); test_function (); return 0; } ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modf.h�����������������������������������������������������������0000664�0000000�0000000�00000003532�14110572173�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modf*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = RANDOM[i]; /* 0.0 <= x < 1.0 */ DOUBLE y; DOUBLE z; y = MODF (x, &z); ASSERT (z == L_(0.0)); ASSERT (y == x); y = MODF (- x, &z); ASSERT (z == L_(0.0)); ASSERT (y == - x); y = MODF (L_(1.0) + x, &z); ASSERT (z == L_(1.0)); y -= x; ASSERT (y >= - L_(1.0) / TWO_MANT_DIG); ASSERT (y <= L_(1.0) / TWO_MANT_DIG); y = MODF (- L_(1.0) - x, &z); ASSERT (z == - L_(1.0)); y -= - x; ASSERT (y >= - L_(1.0) / TWO_MANT_DIG); ASSERT (y <= L_(1.0) / TWO_MANT_DIG); } } volatile DOUBLE x; DOUBLE y; DOUBLE z; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modff-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modff() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define MODF modff #include "test-modf-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modff.c����������������������������������������������������������0000664�0000000�0000000�00000002642�14110572173�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modff() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (modff, float, (float, float *)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MODF modff #define RANDOM randomf #include "test-modf.h" int main () { /* A particular positive value. */ x = 5.972407f; y = modff (x, &z); ASSERT (y >= 0.972406f && y <= 0.972408f); ASSERT (z == 5.0f); /* A particular negative value. */ x = -5.972407f; y = modff (x, &z); ASSERT (y >= -0.972408f && y <= -0.972406f); ASSERT (z == -5.0f); test_function (); return 0; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modfl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modfl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define MODF modfl #include "test-modf-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-modfl.c����������������������������������������������������������0000664�0000000�0000000�00000003031�14110572173�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modfl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (modfl, long double, (long double, long double *)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MODF modfl #define RANDOM randoml #include "test-modf.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular positive value. */ x = 5.972406760L; y = modfl (x, &z); ASSERT (y >= 0.972406759L && y <= 0.972406761L); ASSERT (z == 5.0); /* A particular negative value. */ x = -5.972406760L; y = modfl (x, &z); ASSERT (y >= -0.972406761L && y <= -0.972406759L); ASSERT (z == -5.0L); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-monetary-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002200�14110572173�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <monetary.h> substitute in C++ mode. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2017. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if HAVE_MONETARY_H # include <monetary.h> #endif #include "signature.h" #if GNULIB_TEST_STRFMON_L SIGNATURE_CHECK (GNULIB_NAMESPACE::strfmon_l, ssize_t, (char *s, size_t maxsize, locale_t locale, const char *format, ...)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-monetary.c�������������������������������������������������������0000664�0000000�0000000�00000001604�14110572173�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <monetary.h> substitute. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2017. */ #include <config.h> #if HAVE_MONETARY_H # include <monetary.h> #endif int main () { return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-mtx.c������������������������������������������������������������0000664�0000000�0000000�00000033225�14110572173�0017377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_LOCK 1 #define DO_TEST_RECURSIVE_LOCK 1 #define DO_TEST_ONCE 1 /* Whether to help the scheduler through explicit thrd_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <threads.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "glthread/lock.h" #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #include "atomic-int-isoc.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() thrd_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define thrd_current_pointer() (*((void **) thrd_current ().__)) #elif defined __sun /* On Solaris, thrd_t is merely an 'unsigned int'. */ # define thrd_current_pointer() ((void *) (uintptr_t) thrd_current ()) #else # define thrd_current_pointer() ((void *) thrd_current ()) #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test normal (non-recursive) locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ static mtx_t my_lock; static int lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_lock) == thrd_success); dbgprintf ("Mutator %p after lock\n", thrd_current_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", thrd_current_pointer ()); ASSERT (mtx_unlock (&my_lock) == thrd_success); dbgprintf ("Mutator %p after unlock\n", thrd_current_pointer ()); dbgprintf ("Mutator %p before check lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_lock) == thrd_success); check_accounts (); ASSERT (mtx_unlock (&my_lock) == thrd_success); dbgprintf ("Mutator %p after check unlock\n", thrd_current_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", thrd_current_pointer ()); return 0; } static struct atomic_int lock_checker_done; static int lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_lock) == thrd_success); check_accounts (); ASSERT (mtx_unlock (&my_lock) == thrd_success); dbgprintf ("Checker %p after check unlock\n", thrd_current_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", thrd_current_pointer ()); return 0; } static void test_mtx_plain (void) { int i; thrd_t checkerthread; thrd_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ ASSERT (thrd_create (&checkerthread, lock_checker_thread, NULL) == thrd_success); for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_create (&threads[i], lock_mutator_thread, NULL) == thrd_success); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_join (threads[i], NULL) == thrd_success); set_atomic_int_value (&lock_checker_done, 1); ASSERT (thrd_join (checkerthread, NULL) == thrd_success); check_accounts (); } /* -------------------------- Test recursive locks -------------------------- */ /* Test recursive locks by having several bank accounts and several threads which shuffle around money between the accounts (recursively) and another thread checking that all the money is still there. */ static mtx_t my_reclock; static void recshuffle (void) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_reclock) == thrd_success); dbgprintf ("Mutator %p after lock\n", thrd_current_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ if (((unsigned int) rand () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", thrd_current_pointer ()); ASSERT (mtx_unlock (&my_reclock) == thrd_success); dbgprintf ("Mutator %p after unlock\n", thrd_current_pointer ()); } static int reclock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { recshuffle (); dbgprintf ("Mutator %p before check lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_reclock) == thrd_success); check_accounts (); ASSERT (mtx_unlock (&my_reclock) == thrd_success); dbgprintf ("Mutator %p after check unlock\n", thrd_current_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", thrd_current_pointer ()); return 0; } static struct atomic_int reclock_checker_done; static int reclock_checker_thread (void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", thrd_current_pointer ()); ASSERT (mtx_lock (&my_reclock) == thrd_success); check_accounts (); ASSERT (mtx_unlock (&my_reclock) == thrd_success); dbgprintf ("Checker %p after check unlock\n", thrd_current_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", thrd_current_pointer ()); return 0; } static void test_mtx_recursive (void) { int i; thrd_t checkerthread; thrd_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&reclock_checker_done); set_atomic_int_value (&reclock_checker_done, 0); /* Spawn the threads. */ ASSERT (thrd_create (&checkerthread, reclock_checker_thread, NULL) == thrd_success); for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_create (&threads[i], reclock_mutator_thread, NULL) == thrd_success); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_join (threads[i], NULL) == thrd_success); set_atomic_int_value (&reclock_checker_done, 1); ASSERT (thrd_join (checkerthread, NULL) == thrd_success); check_accounts (); } /* ------------------------ Test once-only execution ------------------------ */ /* Test once-only execution by having several threads attempt to grab a once-only task simultaneously (triggered by releasing a read-write lock). */ static once_flag fresh_once = ONCE_FLAG_INIT; static int ready[THREAD_COUNT]; static mtx_t ready_lock[THREAD_COUNT]; #if ENABLE_LOCKING static gl_rwlock_t fire_signal[REPEAT_COUNT]; #else static volatile int fire_signal_state; #endif static once_flag once_control; static int performed; static mtx_t performed_lock; static void once_execute (void) { ASSERT (mtx_lock (&performed_lock) == thrd_success); performed++; ASSERT (mtx_unlock (&performed_lock) == thrd_success); } static int once_contender_thread (void *arg) { int id = (int) (intptr_t) arg; int repeat; for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Tell the main thread that we're ready. */ ASSERT (mtx_lock (&ready_lock[id]) == thrd_success); ready[id] = 1; ASSERT (mtx_unlock (&ready_lock[id]) == thrd_success); if (repeat == REPEAT_COUNT) break; dbgprintf ("Contender %p waiting for signal for round %d\n", thrd_current_pointer (), repeat); #if ENABLE_LOCKING /* Wait for the signal to go. */ gl_rwlock_rdlock (fire_signal[repeat]); /* And don't hinder the others (if the scheduler is unfair). */ gl_rwlock_unlock (fire_signal[repeat]); #else /* Wait for the signal to go. */ while (fire_signal_state <= repeat) yield (); #endif dbgprintf ("Contender %p got the signal for round %d\n", thrd_current_pointer (), repeat); /* Contend for execution. */ call_once (&once_control, once_execute); } return 0; } static void test_once (void) { int i, repeat; thrd_t threads[THREAD_COUNT]; /* Initialize all variables. */ for (i = 0; i < THREAD_COUNT; i++) { ready[i] = 0; ASSERT (mtx_init (&ready_lock[i], mtx_plain) == thrd_success); } #if ENABLE_LOCKING for (i = 0; i < REPEAT_COUNT; i++) gl_rwlock_init (fire_signal[i]); #else fire_signal_state = 0; #endif #if ENABLE_LOCKING /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) gl_rwlock_wrlock (fire_signal[i]); #endif /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_create (&threads[i], once_contender_thread, (void *) (intptr_t) i) == thrd_success); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchronizing for round %d\n", repeat); for (;;) { int ready_count = 0; for (i = 0; i < THREAD_COUNT; i++) { ASSERT (mtx_lock (&ready_lock[i]) == thrd_success); ready_count += ready[i]; ASSERT (mtx_unlock (&ready_lock[i]) == thrd_success); } if (ready_count == THREAD_COUNT) break; yield (); } dbgprintf ("Main thread after synchronizing for round %d\n", repeat); if (repeat > 0) { /* Check that exactly one thread executed the once_execute() function. */ if (performed != 1) abort (); } if (repeat == REPEAT_COUNT) break; /* Preparation for the next round: Initialize once_control. */ memcpy (&once_control, &fresh_once, sizeof (once_flag)); /* Preparation for the next round: Reset the performed counter. */ performed = 0; /* Preparation for the next round: Reset the ready flags. */ for (i = 0; i < THREAD_COUNT; i++) { ASSERT (mtx_lock (&ready_lock[i]) == thrd_success); ready[i] = 0; ASSERT (mtx_unlock (&ready_lock[i]) == thrd_success); } /* Signal all threads simultaneously. */ dbgprintf ("Main thread giving signal for round %d\n", repeat); #if ENABLE_LOCKING gl_rwlock_unlock (fire_signal[repeat]); #else fire_signal_state = repeat + 1; #endif } /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_join (threads[i], NULL) == thrd_success); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif ASSERT (mtx_init (&my_lock, mtx_plain) == thrd_success); ASSERT (mtx_init (&my_reclock, mtx_plain | mtx_recursive) == thrd_success); ASSERT (mtx_init (&performed_lock, mtx_plain) == thrd_success); #if DO_TEST_LOCK printf ("Starting test_mtx_plain ..."); fflush (stdout); test_mtx_plain (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RECURSIVE_LOCK printf ("Starting test_mtx_recursive ..."); fflush (stdout); test_mtx_recursive (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_ONCE printf ("Starting test_once ..."); fflush (stdout); test_once (); printf (" OK\n"); fflush (stdout); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nanosleep.c������������������������������������������������������0000664�0000000�0000000�00000004263�14110572173�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nanosleep() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <time.h> #include "signature.h" SIGNATURE_CHECK (nanosleep, int, (struct timespec const *, struct timespec *)); #include <errno.h> #include <signal.h> #include <unistd.h> #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { struct timespec ts; ts.tv_sec = 1000; ts.tv_nsec = -1; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); ts.tv_nsec = 1000000000; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); ts.tv_sec = 0; ts.tv_nsec = 1; ASSERT (nanosleep (&ts, &ts) == 0); /* Remaining time is only defined on EINTR failure; but on success, it is typically either 0 or unchanged from input. At any rate, it shouldn't be randomly changed to unrelated values. */ ASSERT (ts.tv_sec == 0); ASSERT (ts.tv_nsec == 0 || ts.tv_nsec == 1); ts.tv_nsec = 0; ASSERT (nanosleep (&ts, NULL) == 0); #if HAVE_DECL_ALARM { const time_t pentecost = 50 * 24 * 60 * 60; /* 50 days. */ signal (SIGALRM, handle_alarm); alarm (1); ts.tv_sec = pentecost; ts.tv_nsec = 999999999; errno = 0; ASSERT (nanosleep (&ts, &ts) == -1); ASSERT (errno == EINTR); ASSERT (pentecost - 10 < ts.tv_sec && ts.tv_sec <= pentecost); ASSERT (0 <= ts.tv_nsec && ts.tv_nsec <= 999999999); } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-net_if.c���������������������������������������������������������0000664�0000000�0000000�00000005257�14110572173�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <net/if.h> functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2010. */ #include <config.h> #include <net/if.h> /* We do not yet have replacements for if_* functions on systems that lack a native <net/if.h>. */ #if HAVE_NET_IF_H && HAVE_IF_NAMEINDEX # include "signature.h" SIGNATURE_CHECK (if_freenameindex, void, (struct if_nameindex *)); SIGNATURE_CHECK (if_indextoname, char *, (unsigned int, char *)); SIGNATURE_CHECK (if_nameindex, struct if_nameindex *, (void)); SIGNATURE_CHECK (if_nametoindex, unsigned int, (const char *)); #endif #include <stddef.h> /* NULL */ #include <stdio.h> /* fprintf */ int main (int argc, char *argv[]) { #if HAVE_NET_IF_H && HAVE_IF_NAMEINDEX struct if_nameindex *ifnp, *p; p = ifnp = if_nameindex (); if (ifnp == NULL) { fputs ("if_nameindex returned NULL\n", stderr); return 1; } while (p->if_index) { unsigned int idx; char buf[IF_NAMESIZE]; char *q; if (argc > 1) printf ("index %d name %s\n", p->if_index, p->if_name); idx = if_nametoindex (p->if_name); if (idx != p->if_index) { fprintf (stderr, "if_nametoindex (%s) = %d != %d\n", p->if_name, idx, p->if_index); return 1; } q = if_indextoname (p->if_index, buf); if (q == NULL) { fprintf (stderr, "if_indextoname (%d) returned NULL\n", p->if_index); return 1; } if (q != buf) { fprintf (stderr, "if_indextoname (%d) buffer mismatch?\n", p->if_index); return 1; } if (strcmp (p->if_name, q) != 0) { fprintf (stderr, "if_indextoname (%s) = %s ?!\n", p->if_name, q); return 1; } p++; } if_freenameindex (ifnp); #endif /* HAVE_NET_IF_H */ #if !HAVE_NET_IF_H || HAVE_IF_NAMEINDEX { static struct if_nameindex ni; return !IF_NAMESIZE + ni.if_index + !!ni.if_name; } #else return 0; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-netdb-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000002642�14110572173�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netdb.h> substitute in C++ mode. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <netdb.h> #include "signature.h" #if GNULIB_TEST_GETADDRINFO SIGNATURE_CHECK (GNULIB_NAMESPACE::getaddrinfo, int, (const char *, const char *, const struct addrinfo *, struct addrinfo **)); SIGNATURE_CHECK (GNULIB_NAMESPACE::freeaddrinfo, void, (struct addrinfo *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::gai_strerror, const char *, (int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::getnameinfo, int, (const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int)); #endif int main () { } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-netdb.c����������������������������������������������������������0000664�0000000�0000000�00000002005�14110572173�0017653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netdb.h> substitute. Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include <netdb.h> /* Check that the 'struct hostent' type is defined. */ struct hostent t1; /* Check that the 'socklen_t' type is defined. */ socklen_t t2; int main (void) { return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-netinet_in.c�����������������������������������������������������0000664�0000000�0000000�00000001566�14110572173�0020726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netinet/in.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <netinet/in.h> int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nextafter.c������������������������������������������������������0000664�0000000�0000000�00000002561�14110572173�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nextafter() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (nextafter, double, (double, double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 1.628947572; /* Towards 0. */ y = nextafter (x, 0); ASSERT (y < x); ASSERT (y > 1.628947571); y = nextafter (y, x + x); ASSERT (y == x); /* Towards infinity. */ y = nextafter (x, x + x); ASSERT (y > x); ASSERT (y < 1.628947573); y = nextafter (y, 0); ASSERT (y == x); /* Towards itself. */ y = nextafter (x, x); ASSERT (y == x); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nl_langinfo-mt.c�������������������������������������������������0000664�0000000�0000000�00000013631�14110572173�0021472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for nl_langinfo(). Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define FRENCH "French_France" # define GERMAN "German_Germany" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define FRENCH "fr_FR" # define GERMAN "de_DE" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = FRENCH ENCODING; static const char LOCALE3[] = GERMAN ENCODING; static char *expected1; static void * thread1_func (void *arg) { for (;;) { const char *value = nl_langinfo (CODESET); if (strcmp (expected1, value) != 0) { fprintf (stderr, "thread1 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected2; static void * thread2_func (void *arg) { for (;;) { const char *value = nl_langinfo (PM_STR); if (strcmp (expected2, value) != 0) { fprintf (stderr, "thread2 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected3; static void * thread3_func (void *arg) { for (;;) { const char *value = nl_langinfo (DAY_2); if (strcmp (expected3, value) != 0) { fprintf (stderr, "thread3 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected4; static void * thread4_func (void *arg) { for (;;) { const char *value = nl_langinfo (ALTMON_2); if (strcmp (expected4, value) != 0) { fprintf (stderr, "thread4 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected5; static void * thread5_func (void *arg) { for (;;) { const char *value = nl_langinfo (CRNCYSTR); if (strcmp (expected5, value) != 0) { fprintf (stderr, "thread5 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected6; static void * thread6_func (void *arg) { for (;;) { const char *value = nl_langinfo (RADIXCHAR); if (strcmp (expected6, value) != 0) { fprintf (stderr, "thread6 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * threadN_func (void *arg) { for (;;) { nl_langinfo (CODESET); /* LC_CTYPE */ /* locale charmap */ nl_langinfo (AM_STR); /* LC_TIME */ /* locale -k am_pm */ nl_langinfo (PM_STR); /* LC_TIME */ /* locale -k am_pm */ nl_langinfo (DAY_2); /* LC_TIME */ /* locale -k day */ nl_langinfo (DAY_5); /* LC_TIME */ /* locale -k day */ nl_langinfo (ALTMON_2); /* LC_TIME */ /* locale -k alt_mon */ nl_langinfo (ALTMON_9); /* LC_TIME */ /* locale -k alt_mon */ nl_langinfo (CRNCYSTR); /* LC_MONETARY */ /* locale -k currency_symbol */ nl_langinfo (RADIXCHAR); /* LC_NUMERIC */ /* locale -k decimal_point */ nl_langinfo (THOUSEP); /* LC_NUMERIC */ /* locale -k thousands_sep */ } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_MONETARY, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected1 = strdup (nl_langinfo (CODESET)); expected2 = strdup (nl_langinfo (PM_STR)); expected3 = strdup (nl_langinfo (DAY_2)); expected4 = strdup (nl_langinfo (ALTMON_2)); expected5 = strdup (nl_langinfo (CRNCYSTR)); expected6 = strdup (nl_langinfo (RADIXCHAR)); /* Create the checker threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); gl_thread_create (thread3_func, NULL); gl_thread_create (thread4_func, NULL); gl_thread_create (thread5_func, NULL); gl_thread_create (thread6_func, NULL); /* Create the disturber thread. */ gl_thread_create (threadN_func, NULL); /* Let them run for 2 seconds. */ { struct timespec duration; duration.tv_sec = (argc > 1 ? atoi (argv[1]) : 2); duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nl_langinfo.c����������������������������������������������������0000664�0000000�0000000�00000014063�14110572173�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nl_langinfo replacement. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <langinfo.h> #include "signature.h" SIGNATURE_CHECK (nl_langinfo, char *, (nl_item)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "c-strcase.h" #include "macros.h" /* For GCC >= 4.3, silence the warnings "comparison of unsigned expression >= 0 is always true" in this file. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # pragma GCC diagnostic ignored "-Wtype-limits" #endif int main (int argc, char *argv[]) { int pass = atoi (argv[1]); /* pass locale 0 C 1 traditional French locale 2 French UTF-8 locale */ setlocale (LC_ALL, ""); /* nl_langinfo items of the LC_CTYPE category */ ASSERT (strlen (nl_langinfo (CODESET)) > 0); if (pass == 2) { const char *codeset = nl_langinfo (CODESET); ASSERT (c_strcasecmp (codeset, "UTF-8") == 0 || c_strcasecmp (codeset, "UTF8") == 0); } /* nl_langinfo items of the LC_NUMERIC category */ ASSERT (strlen (nl_langinfo (RADIXCHAR)) > 0); ASSERT (strlen (nl_langinfo (THOUSEP)) >= 0); /* nl_langinfo items of the LC_TIME category */ ASSERT (strlen (nl_langinfo (D_T_FMT)) > 0); ASSERT (strlen (nl_langinfo (D_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT_AMPM)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (AM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (PM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (DAY_1)) > 0); ASSERT (strlen (nl_langinfo (DAY_2)) > 0); ASSERT (strlen (nl_langinfo (DAY_3)) > 0); ASSERT (strlen (nl_langinfo (DAY_4)) > 0); ASSERT (strlen (nl_langinfo (DAY_5)) > 0); ASSERT (strlen (nl_langinfo (DAY_6)) > 0); ASSERT (strlen (nl_langinfo (DAY_7)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_1)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_2)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_3)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_4)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_5)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_6)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_7)) > 0); ASSERT (strlen (nl_langinfo (MON_1)) > 0); ASSERT (strlen (nl_langinfo (MON_2)) > 0); ASSERT (strlen (nl_langinfo (MON_3)) > 0); ASSERT (strlen (nl_langinfo (MON_4)) > 0); ASSERT (strlen (nl_langinfo (MON_5)) > 0); ASSERT (strlen (nl_langinfo (MON_6)) > 0); ASSERT (strlen (nl_langinfo (MON_7)) > 0); ASSERT (strlen (nl_langinfo (MON_8)) > 0); ASSERT (strlen (nl_langinfo (MON_9)) > 0); ASSERT (strlen (nl_langinfo (MON_10)) > 0); ASSERT (strlen (nl_langinfo (MON_11)) > 0); ASSERT (strlen (nl_langinfo (MON_12)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_1)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_2)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_3)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_4)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_5)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_6)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_7)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_8)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_9)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_10)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_11)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_12)) > 0); /* In the tested locales, alternate month names and month names ought to be the same. */ ASSERT (strcmp (nl_langinfo (ALTMON_1), nl_langinfo (MON_1)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_2), nl_langinfo (MON_2)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_3), nl_langinfo (MON_3)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_4), nl_langinfo (MON_4)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_5), nl_langinfo (MON_5)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_6), nl_langinfo (MON_6)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_7), nl_langinfo (MON_7)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_8), nl_langinfo (MON_8)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_9), nl_langinfo (MON_9)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_10), nl_langinfo (MON_10)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_11), nl_langinfo (MON_11)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_12), nl_langinfo (MON_12)) == 0); ASSERT (strlen (nl_langinfo (ABMON_1)) > 0); ASSERT (strlen (nl_langinfo (ABMON_2)) > 0); ASSERT (strlen (nl_langinfo (ABMON_3)) > 0); ASSERT (strlen (nl_langinfo (ABMON_4)) > 0); ASSERT (strlen (nl_langinfo (ABMON_5)) > 0); ASSERT (strlen (nl_langinfo (ABMON_6)) > 0); ASSERT (strlen (nl_langinfo (ABMON_7)) > 0); ASSERT (strlen (nl_langinfo (ABMON_8)) > 0); ASSERT (strlen (nl_langinfo (ABMON_9)) > 0); ASSERT (strlen (nl_langinfo (ABMON_10)) > 0); ASSERT (strlen (nl_langinfo (ABMON_11)) > 0); ASSERT (strlen (nl_langinfo (ABMON_12)) > 0); ASSERT (strlen (nl_langinfo (ERA)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_T_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_T_FMT)) >= 0); ASSERT (nl_langinfo (ALT_DIGITS) != NULL); /* nl_langinfo items of the LC_MONETARY category */ { const char *currency = nl_langinfo (CRNCYSTR); ASSERT (strlen (currency) >= 0); #if !defined __NetBSD__ if (pass > 0) ASSERT (strlen (currency) >= 1); #endif } /* nl_langinfo items of the LC_MESSAGES category */ ASSERT (strlen (nl_langinfo (YESEXPR)) > 0); ASSERT (strlen (nl_langinfo (NOEXPR)) > 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nl_langinfo.sh���������������������������������������������������0000775�0000000�0000000�00000000726�14110572173�0021250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh LC_ALL=C ${CHECKER} ./test-nl_langinfo${EXEEXT} 0 || exit 1 # Test whether a specific traditional locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-nl_langinfo${EXEEXT} 1 || 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-nl_langinfo${EXEEXT} 2 || exit 1 fi exit 0 ������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-misc.h�����������������������������������������������0000664�0000000�0000000�00000006222�14110572173�0022025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Delay (in microseconds) to sleep when write() or read() returned -1 with errno = EAGAIN. */ #define SMALL_DELAY 10000 /* Return a memory area, filled with the data to be transferred. */ static unsigned char * init_data (size_t data_block_size) { unsigned char *data; unsigned int i; data = (unsigned char *) malloc (2 * data_block_size); ASSERT (data != NULL); for (i = 0; i < 2 * data_block_size; i++) data[i] = (unsigned char) (i * i + (7 * i) % 61 + 4); return data; } #if ENABLE_DEBUGGING # include <stdarg.h> static int dbgfprintf (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3); static int dbgfprintf (FILE *fp, const char *format, ...) { /* Accumulate the entire line in a buffer, so that the output on fp is done atomically. */ char line[1024]; size_t line_len; struct timeval current_time; va_list args; int ret; line_len = 0; gettimeofday (¤t_time, NULL); ret = snprintf (line, sizeof (line), "%.6f ", current_time.tv_sec + (double) current_time.tv_usec * 1e-6); if (ret < 0) return -1; line_len = strlen (line); va_start (args, format); ret = vsnprintf (line + line_len, sizeof (line) - line_len, format, args); va_end (args); if (ret < 0) return -1; line_len += strlen (line + line_len); ret = fwrite (line, 1, line_len, fp); /* Make sure the debugging information is output, so that the order of the messages reflects the timeline of events, and so that the output is not lost if the program crashes afterwards (relevant on mingw). */ fflush (fp); return ret; } #else # define dbgfprintf if (1) ; else fprintf #endif /* Return a textual description of the error code ERR, if FAILED is true. Return an empty string if FAILED is false. */ static const char * dbgstrerror (bool failed, int err) { static char buf[256]; if (failed) { sprintf (buf, " %d %s", err, strerror (err)); return buf; } else return ""; } #define TIMING_DECLS \ struct timeval before_time; \ struct timeval after_time; \ double spent_time; #define START_TIMING \ gettimeofday (&before_time, NULL); #define END_TIMING \ gettimeofday (&after_time, NULL); \ spent_time = \ (after_time.tv_sec - before_time.tv_sec) \ + ((double) after_time.tv_usec - (double) before_time.tv_usec) * 1e-6; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-pipe-child.c�����������������������������������������0000664�0000000�0000000�00000002766�14110572173�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-nonblocking-pipe-main. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> #include "binary-io.h" #include "macros.h" #include "test-nonblocking-pipe.h" #define PROG_ROLE "child" #include "test-nonblocking-reader.h" int main (int argc, char *argv[]) { int test = atoi (argv[1]); /* Close unused file descriptors. */ close (STDOUT_FILENO); /* STDIN_FILENO was created as binary in the parent process. But since an fd's mode is stored in the process, not in the kernel, on native Windows we need to set it as binary in the child process again. */ set_binary_mode (STDIN_FILENO, O_BINARY); main_reader_loop (test, PIPE_DATA_BLOCK_SIZE, STDIN_FILENO); return 0; } ����������gnulib-20210822~d383792/tests/test-nonblocking-pipe-main.c������������������������������������������0000664�0000000�0000000�00000005477�14110572173�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write on pipes. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <process.h> #else # include <spawn.h> #endif #include "nonblocking.h" #include "wait-process.h" #include "macros.h" #include "test-nonblocking-pipe.h" #define PROG_ROLE "main" #include "test-nonblocking-writer.h" int main (int argc, char *argv[]) { const char *child_path; int test; int fd[2]; pid_t child; int exitcode; child_path = argv[1]; test = atoi (argv[2]); /* Create a pipe. */ ASSERT (pipe (fd) >= 0); /* Map fd[0] to STDIN_FILENO and fd[1] to STDOUT_FILENO, because on Windows, the only three file descriptors that are inherited by child processes are STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. */ if (fd[0] != STDIN_FILENO) { ASSERT (dup2 (fd[0], STDIN_FILENO) >= 0); close (fd[0]); } if (fd[1] != STDOUT_FILENO) { ASSERT (dup2 (fd[1], STDOUT_FILENO) >= 0); close (fd[1]); } /* Prepare the file descriptors. */ if (test & 1) ASSERT (set_nonblocking_flag (STDOUT_FILENO, true) >= 0); if (test & 2) ASSERT (set_nonblocking_flag (STDIN_FILENO, true) >= 0); /* Spawn the child process. */ { const char *child_argv[3]; child_argv[0] = child_path; child_argv[1] = argv[2]; child_argv[2] = NULL; #if defined _WIN32 && ! defined __CYGWIN__ child = _spawnvpe (P_NOWAIT, child_path, child_argv, (const char **) environ); ASSERT (child >= 0); #else { pid_t child_pid; int err = posix_spawnp (&child_pid, child_path, NULL, NULL, (char **) child_argv, environ); ASSERT (err == 0); child = child_pid; } #endif } /* Close unused file descriptors. */ close (STDIN_FILENO); exitcode = main_writer_loop (test, PIPE_DATA_BLOCK_SIZE, STDOUT_FILENO, false); { int err = wait_subprocess (child, child_path, false, false, false, false, NULL); ASSERT (err == 0); } return exitcode; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-pipe.h�����������������������������������������������0000664�0000000�0000000�00000004023�14110572173�0022024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* A data block ought to be larger than the size of the in-kernel buffer. Working values of PIPE_DATA_BLOCK_SIZE, depending on kernel: Platform PIPE_DATA_BLOCK_SIZE Linux >= 63489 Linux/SPARC >= 126977 Linux/IA-64, Linux/MIPS >= 253953 Linux/PPC64 >= 1048576 FreeBSD, OpenBSD, Mac OS X >= 65537 AIX >= 32769 HP-UX >= 8193 IRIX >= 10241 OSF/1 >= 262145 Solaris <= 7 >= 10241 Solaris >= 8 >= 20481 z/OS >= 131073 Cygwin >= 65537 native Windows >= 4097 (depends on the _pipe argument) */ #if defined __MVS__ || defined __osf__ || (defined __linux__ && (defined __ia64__ || defined __mips__)) # define PIPE_DATA_BLOCK_SIZE 270000 #elif defined __linux__ && defined __sparc__ # define PIPE_DATA_BLOCK_SIZE 140000 #elif defined __linux__ && defined __powerpc__ # define PIPE_DATA_BLOCK_SIZE 1100000 #elif defined _WIN32 && !defined __CYGWIN__ # define PIPE_DATA_BLOCK_SIZE 10000 #else # define PIPE_DATA_BLOCK_SIZE 70000 #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-pipe.sh����������������������������������������������0000775�0000000�0000000�00000001473�14110572173�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Note: This test fails on Cygwin 1.5.x, because the non-blocking flag has # apparently no effect on STDOUT_FILENO. It is fixed in Cygwin 1.7. # Test blocking write() with blocking read(). # Commented out because this test succeeds on all platforms anyway. #${CHECKER} ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 0 || exit 1 # Test non-blocking write() with blocking read(). ${CHECKER} ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 1 || exit 1 # Test blocking write() with non-blocking read(). ${CHECKER} ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 2 || exit 1 # Test non-blocking write() with non-blocking read(). ${CHECKER} ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 3 || exit 1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-reader.h���������������������������������������������0000664�0000000�0000000�00000014415�14110572173�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The reader part of a test program for non-blocking communication. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* This program implements 4 tests: test == 0: Test blocking write() with blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) 1 s write(20000) Return from read(10000) 2 s Next read(10000) 2 s Return from write(20000) Return from read(10000) test == 1: Test non-blocking write() with blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) 1 s write(20000) Return from read(10000) Return with at least 10000, Repeatedly continue write() of the rest 2 s Next read(10000) 2 s Return from write(10000) Return from read(10000) test == 2: Test blocking write() with non-blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) repeatedly polling 1 s write(20000) Return from read(10000) 2 s Next read(10000) 2 s Return from write(20000) Return from read(10000) test == 3: Test non-blocking write() with non-blocking read(). */ #include "test-nonblocking-misc.h" static ssize_t full_read (size_t fd, void *buf, size_t count) { size_t bytes_read; bytes_read = 0; while (bytes_read < count) { TIMING_DECLS ssize_t ret; int saved_errno; dbgfprintf (stderr, "%s: >> read (%lu)\n", PROG_ROLE, (unsigned long) (count - bytes_read)); START_TIMING ret = read (fd, (char *) buf + bytes_read, count - bytes_read); saved_errno = errno; END_TIMING dbgfprintf (stderr, "%s: << read -> %ld%s\n", PROG_ROLE, (long) ret, dbgstrerror (ret < 0, saved_errno)); if (ret < 0) return -1; else { ASSERT (ret > 0); bytes_read += ret; } } return bytes_read; } static ssize_t full_read_from_nonblocking_fd (size_t fd, void *buf, size_t count) { size_t bytes_read; bytes_read = 0; while (bytes_read < count) { TIMING_DECLS ssize_t ret; int saved_errno; dbgfprintf (stderr, "%s: >> read (%lu)\n", PROG_ROLE, (unsigned long) (count - bytes_read)); START_TIMING ret = read (fd, (char *) buf + bytes_read, count - bytes_read); saved_errno = errno; END_TIMING dbgfprintf (stderr, "%s: << read -> %ld%s\n", PROG_ROLE, (long) ret, dbgstrerror (ret < 0, saved_errno)); /* This assertion fails if the non-blocking flag is effectively not set on fd. */ ASSERT (spent_time < 0.5); if (ret < 0) { ASSERT (saved_errno == EAGAIN || saved_errno == EWOULDBLOCK); usleep (SMALL_DELAY); } else { ASSERT (ret > 0); bytes_read += ret; } } return bytes_read; } /* Execute the reader loop. */ static void main_reader_loop (int test, size_t data_block_size, int fd) { unsigned char *expected; unsigned char *data; /* Set up the expected data. */ expected = init_data (data_block_size); data = (unsigned char *) malloc (2 * data_block_size); ASSERT (data != NULL); switch (test) { TIMING_DECLS ssize_t ret; case 0: /* Test blocking write() with blocking read(). */ case 1: /* Test non-blocking write() with blocking read(). */ START_TIMING ret = full_read (fd, data, data_block_size); END_TIMING ASSERT (ret == data_block_size); ASSERT (memcmp (data, expected, data_block_size) == 0); ASSERT (spent_time > 0.5); /* This assertion fails if data_block_size is very large and ENABLE_DEBUGGING is 1. */ ASSERT (spent_time < 1.5); usleep (1000000); START_TIMING ret = full_read (fd, data, data_block_size); END_TIMING ASSERT (ret == data_block_size); ASSERT (memcmp (data, expected + data_block_size, data_block_size) == 0); /* This assertion fails if data_block_size is much larger than needed and SMALL_DELAY is too large. */ ASSERT (spent_time < 0.5); break; case 2: /* Test blocking write() with non-blocking read(). */ case 3: /* Test non-blocking write() with non-blocking read(). */ START_TIMING ret = full_read_from_nonblocking_fd (fd, data, data_block_size); END_TIMING ASSERT (ret == data_block_size); ASSERT (memcmp (data, expected, data_block_size) == 0); ASSERT (spent_time > 0.5); /* This assertion fails if data_block_size is much larger than needed and SMALL_DELAY is too large, or if data_block_size is very large and ENABLE_DEBUGGING is 1. */ ASSERT (spent_time < 1.5); usleep (1000000); START_TIMING ret = full_read_from_nonblocking_fd (fd, data, data_block_size); END_TIMING ASSERT (ret == data_block_size); ASSERT (memcmp (data, expected + data_block_size, data_block_size) == 0); /* This assertion fails if data_block_size is much larger than needed and SMALL_DELAY is too large. */ ASSERT (spent_time < 0.5); break; default: abort (); } free (data); free (expected); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-socket-child.c���������������������������������������0000664�0000000�0000000�00000002707�14110572173�0023442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-nonblocking-socket-main. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> #include "nonblocking.h" #include "macros.h" #include "socket-client.h" #include "test-nonblocking-socket.h" #define PROG_ROLE "child" #include "test-nonblocking-reader.h" int main (int argc, char *argv[]) { int test = atoi (argv[1]); int port = atoi (argv[2]); int client_socket; /* Create a client socket. */ client_socket = create_client_socket (port); /* Prepare the file descriptor. */ if (test & 2) ASSERT (set_nonblocking_flag (client_socket, true) >= 0); main_reader_loop (test, SOCKET_DATA_BLOCK_SIZE, client_socket); return 0; } ���������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-socket-main.c����������������������������������������0000664�0000000�0000000�00000006072�14110572173�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write on sockets. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> #include <sys/socket.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <process.h> #else # include <spawn.h> #endif #include "nonblocking.h" #include "wait-process.h" #include "macros.h" #include "socket-server.h" #include "test-nonblocking-socket.h" #define PROG_ROLE "main" #include "test-nonblocking-writer.h" int main (int argc, char *argv[]) { const char *child_path; int test; int server; int port; pid_t child; int server_socket; int exitcode; child_path = argv[1]; test = atoi (argv[2]); /* Create a server socket. */ server = create_server (0, 1, &port); /* Spawn the child process. */ { char port_arg[10+1]; const char *child_argv[4]; sprintf (port_arg, "%u", port); child_argv[0] = child_path; child_argv[1] = argv[2]; child_argv[2] = port_arg; child_argv[3] = NULL; #if defined _WIN32 && ! defined __CYGWIN__ child = _spawnvpe (P_NOWAIT, child_path, child_argv, (const char **) environ); ASSERT (child >= 0); #else { pid_t child_pid; int err = posix_spawnp (&child_pid, child_path, NULL, NULL, (char **) child_argv, environ); ASSERT (err == 0); child = child_pid; } #endif } /* Accept a connection from the child process. */ server_socket = create_server_socket (server); /* Prepare the file descriptor. */ if (test & 1) ASSERT (set_nonblocking_flag (server_socket, true) >= 0); #if ENABLE_DEBUGGING # ifdef SO_SNDBUF { int value; socklen_t value_len = sizeof (value); if (getsockopt (server_socket, SOL_SOCKET, SO_SNDBUF, &value, &value_len) >= 0) fprintf (stderr, "SO_SNDBUF = %d\n", value); } # endif # ifdef SO_RCVBUF { int value; socklen_t value_len = sizeof (value); if (getsockopt (server_socket, SOL_SOCKET, SO_RCVBUF, &value, &value_len) >= 0) fprintf (stderr, "SO_RCVBUF = %d\n", value); } # endif #endif exitcode = main_writer_loop (test, SOCKET_DATA_BLOCK_SIZE, server_socket, SOCKET_HAS_LARGE_BUFFER); { int err = wait_subprocess (child, child_path, false, false, false, false, NULL); ASSERT (err == 0); } return exitcode; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-socket.h���������������������������������������������0000664�0000000�0000000�00000004714�14110572173�0022366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* A data block ought to be larger than the size of the in-kernel buffer. Working values of SOCKET_DATA_BLOCK_SIZE, depending on kernel: Platform SOCKET_DATA_BLOCK_SIZE Linux >= 7350000 (depends on circumstances) Linux/Android >= 1700000 (approx.) FreeBSD >= 107521 OpenBSD >= 106430 (depends on circumstances) Mac OS X >= 680000 (depends on circumstances) AIX 5.1 >= 125713 AIX 7.1 >= 200000 (depends on circumstances) HP-UX >= 114689 IRIX >= 61089 OSF/1 >= 122881 Solaris 7 >= 63000 (depends on circumstances) Solaris 8 >= 49153 Solaris 9 >= 73729 Solaris 10 >= 98305 Solaris 11 2010-11 >= 73729 Cygwin 1.5.x >= 66294401 but then write() fails with ENOBUFS Cygwin 1.7.x >= 163838 (depends on circumstances) native Windows >= 66294401 */ #define SOCKET_DATA_BLOCK_SIZE 1000000 /* On Linux, Mac OS X, Cygwin 1.5.x, native Windows, sockets have very large buffers in the kernel, so that write() calls succeed before the reader has started reading, even if fd is blocking and the amount of data is larger than 1 MB. */ #if defined __linux__ || defined __ANDROID__ || (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __CYGWIN__ # define SOCKET_HAS_LARGE_BUFFER 1 #else # define SOCKET_HAS_LARGE_BUFFER 0 #endif ����������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-socket.sh��������������������������������������������0000775�0000000�0000000�00000001166�14110572173�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test blocking write() with blocking read(). ${CHECKER} ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 0 || exit 1 # Test non-blocking write() with blocking read(). ${CHECKER} ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 1 || exit 1 # Test blocking write() with non-blocking read(). ${CHECKER} ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 2 || exit 1 # Test non-blocking write() with non-blocking read(). ${CHECKER} ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 3 || exit 1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nonblocking-writer.h���������������������������������������������0000664�0000000�0000000�00000014773�14110572173�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The writer part of a test program for non-blocking communication. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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/>. */ /* This program implements 4 tests: test == 0: Test blocking write() with blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) 1 s write(20000) Return from read(10000) 2 s Next read(10000) 2 s Return from write(20000) Return from read(10000) test == 1: Test non-blocking write() with blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) 1 s write(20000) Return from read(10000) Return with at least 10000, Repeatedly continue write() of the rest 2 s Next read(10000) 2 s Return from write(10000) Return from read(10000) test == 2: Test blocking write() with non-blocking read(). Timeline Main process Child process 0 s Start Start, read(10000) repeatedly polling 1 s write(20000) Return from read(10000) 2 s Next read(10000) 2 s Return from write(20000) Return from read(10000) test == 3: Test non-blocking write() with non-blocking read(). */ #include "test-nonblocking-misc.h" /* Execute the writer loop. Returns 0 if successful, 1 if data_block_size is too small. */ static int main_writer_loop (int test, size_t data_block_size, int fd, bool has_large_buffer) { int too_small = 0; unsigned char *data; /* Set up the data to transfer. */ data = init_data (data_block_size); switch (test) { TIMING_DECLS ssize_t ret; case 0: /* Test blocking write() with blocking read(). */ case 2: /* Test blocking write() with non-blocking read(). */ { int saved_errno; usleep (1000000); dbgfprintf (stderr, "%s:1: >> write (%lu)\n", PROG_ROLE, (unsigned long) (2 * data_block_size)); START_TIMING ret = write (fd, data, 2 * data_block_size); saved_errno = errno; END_TIMING dbgfprintf (stderr, "%s:1: << write -> %ld%s\n", PROG_ROLE, (long) ret, dbgstrerror (ret < 0, saved_errno)); ASSERT (ret == 2 * data_block_size); if (!has_large_buffer) { /* This assertion fails if data_block_size is too small. */ if (!(spent_time > 0.5)) { fprintf (stderr, "%s:1: spent_time = %g, data_block_size too small\n", PROG_ROLE, spent_time); too_small = 1; } } ASSERT (spent_time < 1.5); } break; case 1: /* Test non-blocking write() with blocking read(). */ case 3: /* Test non-blocking write() with non-blocking read(). */ { size_t bytes_written; int saved_errno; usleep (1000000); bytes_written = 0; while (bytes_written < 2 * data_block_size) { dbgfprintf (stderr, "%s:2: >> write (%lu)\n", PROG_ROLE, (unsigned long) (2 * data_block_size - bytes_written)); START_TIMING ret = write (fd, data + bytes_written, 2 * data_block_size - bytes_written); saved_errno = errno; END_TIMING dbgfprintf (stderr, "%s:2: << write -> %ld%s\n", PROG_ROLE, (long) ret, dbgstrerror (ret < 0, saved_errno)); if (ret < 0 && bytes_written >= data_block_size) { ASSERT (saved_errno == EAGAIN || saved_errno == EWOULDBLOCK); ASSERT (spent_time < 0.5); break; } /* This assertion fails if the non-blocking flag is effectively not set on fd. */ ASSERT (spent_time < 0.5); if (ret < 0) { ASSERT (saved_errno == EAGAIN || saved_errno == EWOULDBLOCK); usleep (SMALL_DELAY); } else { /* This assertion fails if data_block_size is too small. */ if (!(ret > 0)) { fprintf (stderr, "%s:1: spent_time = %g, data_block_size too small\n", PROG_ROLE, spent_time); too_small = 1; } bytes_written += ret; } } ASSERT (bytes_written >= data_block_size); while (bytes_written < 2 * data_block_size) { dbgfprintf (stderr, "%s:3: >> write (%lu)\n", PROG_ROLE, (unsigned long) (2 * data_block_size - bytes_written)); START_TIMING ret = write (fd, data + bytes_written, 2 * data_block_size - bytes_written); saved_errno = errno; END_TIMING dbgfprintf (stderr, "%s:3: << write -> %ld%s\n", PROG_ROLE, (long) ret, dbgstrerror (ret < 0, saved_errno)); ASSERT (spent_time < 0.5); if (ret < 0) { ASSERT (saved_errno == EAGAIN || saved_errno == EWOULDBLOCK); usleep (SMALL_DELAY); } else { ASSERT (ret > 0); bytes_written += ret; } } } break; default: abort (); } free (data); return too_small; } �����gnulib-20210822~d383792/tests/test-nonblocking.c����������������������������������������������������0000664�0000000�0000000�00000010046�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test manipulation of non-blocking flag. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2011. */ #include <config.h> #include "nonblocking.h" #include <errno.h> #include <fcntl.h> #include <sys/socket.h> #include <unistd.h> #include "macros.h" int main (void) { const char *file = "test-nonblock.tmp"; int fd_file; int fd_pipe[2]; fd_file = creat (file, 0600); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd_file); /* Test regular files; setting nonblocking on file is unspecified. */ ASSERT (get_nonblocking_flag (fd_file) == 0); ASSERT (set_nonblocking_flag (fd_file, false) == 0); ASSERT (get_nonblocking_flag (fd_file) == 0); ASSERT (close (fd_file) == 0); ASSERT (unlink (file) == 0); /* Test directories; setting nonblocking is unspecified. */ fd_file = open (".", O_RDONLY); if (STDERR_FILENO < fd_file) { /* mingw can't open directories unless fchdir module is active. */ ASSERT (get_nonblocking_flag (fd_file) == 0); ASSERT (set_nonblocking_flag (fd_file, false) == 0); ASSERT (get_nonblocking_flag (fd_file) == 0); ASSERT (close (fd_file) == 0); } /* Test pipes. */ ASSERT (pipe (fd_pipe) == 0); ASSERT (get_nonblocking_flag (fd_pipe[0]) == 0); ASSERT (get_nonblocking_flag (fd_pipe[1]) == 0); ASSERT (set_nonblocking_flag (fd_pipe[0], true) == 0); ASSERT (get_nonblocking_flag (fd_pipe[0]) == 1); ASSERT (get_nonblocking_flag (fd_pipe[1]) == 0); ASSERT (set_nonblocking_flag (fd_pipe[1], true) == 0); ASSERT (set_nonblocking_flag (fd_pipe[0], false) == 0); ASSERT (get_nonblocking_flag (fd_pipe[0]) == 0); ASSERT (get_nonblocking_flag (fd_pipe[1]) == 1); ASSERT (close (fd_pipe[0]) == 0); ASSERT (close (fd_pipe[1]) == 0); #if GNULIB_TEST_PIPE2 ASSERT (pipe2 (fd_pipe, O_NONBLOCK) == 0); ASSERT (get_nonblocking_flag (fd_pipe[0]) == 1); ASSERT (get_nonblocking_flag (fd_pipe[1]) == 1); ASSERT (close (fd_pipe[0]) == 0); ASSERT (close (fd_pipe[1]) == 0); #endif /* GNULIB_TEST_PIPE2 */ #if GNULIB_TEST_SOCKET { /* Test sockets. */ bool sock_works = true; int fd_sock; # if defined _WIN32 && ! defined __CYGWIN__ /* For now, we can't get nonblocking status of windows sockets. */ sock_works = false; # endif fd_sock = socket (AF_INET, SOCK_STREAM, 0); ASSERT (get_nonblocking_flag (fd_sock) == (sock_works ? 0 : -1)); ASSERT (set_nonblocking_flag (fd_sock, true) == 0); ASSERT (get_nonblocking_flag (fd_sock) == (sock_works ? 1 : -1)); ASSERT (set_nonblocking_flag (fd_sock, false) == 0); ASSERT (get_nonblocking_flag (fd_sock) == (sock_works ? 0 : -1)); ASSERT (close (fd_sock) == 0); # if SOCK_NONBLOCK fd_sock = socket (AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); ASSERT (get_nonblocking_flag (fd_sock) == (sock_works ? 1 : -1)); ASSERT (close (fd_sock) == 0); # endif /* SOCK_NONBLOCK */ } #endif /* GNULIB_TEST_SOCKET */ /* Test error handling. */ { errno = 0; ASSERT (get_nonblocking_flag (-1) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (set_nonblocking_flag (-1, false) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (set_nonblocking_flag (-1, true) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (set_nonblocking_flag (getdtablesize (), false) == -1); ASSERT (errno == EBADF); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-noreturn-c++.cc��������������������������������������������������0000664�0000000�0000000�00000003002�14110572173�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of macros for declaring functions as non-returning. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2017. */ #include <config.h> #include <noreturn.h> /* Test _GL_NORETURN_FUNC on function declarations. */ extern "C" { _GL_NORETURN_FUNC void func1_c (void); } _GL_NORETURN_FUNC extern void func1_cxx (void); /* Test _GL_NORETURN_FUNC on function definitions. */ _GL_NORETURN_FUNC void funcd_cxx (void) { for (;;) ; } /* Test _GL_NORETURN_FUNCPTR. */ _GL_NORETURN_FUNCPTR void (*func1_c_ptr) (void) = func1_c; _GL_NORETURN_FUNCPTR void (*func1_cxx_ptr) (void) = func1_cxx; _GL_NORETURN_FUNCPTR void (*funcd_cxx_ptr) (void) = funcd_cxx; /* These could also be defined in a separate compilation unit. */ void func1_c (void) { for (;;) ; } void func1_cxx (void) { for (;;) ; } int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-noreturn.c�������������������������������������������������������0000664�0000000�0000000�00000003155�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of macros for declaring functions as non-returning. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2017. */ #include <config.h> #include <noreturn.h> /* Test _GL_NORETURN_FUNC on function declarations. */ _GL_NORETURN_FUNC extern void func1 (void); extern _GL_NORETURN_FUNC void func2 (void); extern void _GL_NORETURN_FUNC func3 (void); /* Test _GL_NORETURN_FUNC on function definitions. */ _GL_NORETURN_FUNC void funcd (void) { for (;;) ; } /* Test _GL_NORETURN_FUNCPTR. */ _GL_NORETURN_FUNCPTR void (*func1_ptr) (void) = func1; _GL_NORETURN_FUNCPTR void (*func2_ptr) (void) = func2; _GL_NORETURN_FUNCPTR void (*func3_ptr) (void) = func3; _GL_NORETURN_FUNCPTR void (*funcd_ptr) (void) = funcd; /* These could also be defined in a separate compilation unit. */ void func1 (void) { for (;;) ; } void func2 (void) { for (;;) ; } void func3 (void) { for (;;) ; } int main () { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-nstrftime.c������������������������������������������������������0000664�0000000�0000000�00000021503�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that nstrftime works as required. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "strftime.h" #include "intprops.h" #include <errno.h> #include <limits.h> #include <stdio.h> #include <string.h> #include <time.h> #include <unistd.h> #include "macros.h" #define STREQ(a, b) (strcmp (a, b) == 0) /* Support for settings like TZ='<+00>0' was added in IEEE Std 1003.1-2001. */ #define TZ_ANGLE_BRACKETS_SHOULD_WORK (200112 <= _POSIX_VERSION) struct posixtm_test { time_t in; int in_ns; char const *fmt; char const *exp; }; static struct posixtm_test const T[] = { { 1300000000, 0, "%F", "2011-03-13" }, { 0, 10, "%T.%N", "00:00:00.000000010" }, { 56, 123456789, "%T.%12N", "00:00:56.123456789000" }, { 0, 0, NULL, NULL } }; static int posixtm_test (void) { int fail = 0; unsigned int i; for (i = 0; T[i].fmt; i++) { char buf[1000]; time_t t = T[i].in; struct tm *tm = gmtime (&t); size_t n; ASSERT (tm); n = nstrftime (buf, sizeof buf, T[i].fmt, tm, 0, T[i].in_ns); if (n == 0) { fail = 1; printf ("nstrftime failed with format %s\n", T[i].fmt); } if (! STREQ (buf, T[i].exp)) { fail = 1; printf ("%s: result mismatch: got %s, expected %s\n", T[i].fmt, buf, T[i].exp); } } return fail; } struct tzalloc_test { timezone_t tz; char const *setting; }; static struct tzalloc_test TZ[] = { #define Pacific 0 { 0, "PST8PDT,M3.2.0,M11.1.0" }, #define Arizona 1 { 0, "MST7" }, #define UTC 2 { 0, 0 }, #define CentEur 3 { 0, "CET-1CEST,M3.5.0,M10.5.0/3" }, #define Japan 4 { 0, "JST-9" }, #define NZ 5 { 0, "NZST-12NZDT,M9.5.0,M4.1.0/3" }, #define Unknown 6 { 0, "<-00>0" }, { 0 } }; struct localtime_rz_test { /* Input parameters. */ struct tzalloc_test *tza; time_t t; /* Expected result. */ char const *exp; /* Determines if an incorrectly unset tm_isdst results in failure or just a warning. */ int ahistorical; }; static struct localtime_rz_test LT[] = { { TZ+Pacific, 0, "1969-12-31 16:00:00 -0800 (PST)", 0 }, { TZ+Arizona, 0, "1969-12-31 17:00:00 -0700 (MST)", 0 }, { TZ+UTC , 0, "1970-01-01 00:00:00 +0000 (UTC)", 0 }, { TZ+CentEur, 0, "1970-01-01 01:00:00 +0100 (CET)", 0 }, { TZ+Japan , 0, "1970-01-01 09:00:00 +0900 (JST)", 0 }, { TZ+NZ , 0, "1970-01-01 13:00:00 +1300 (NZDT)", 1 }, { TZ+Pacific, 500000001, "1985-11-04 16:53:21 -0800 (PST)", 0 }, { TZ+Arizona, 500000001, "1985-11-04 17:53:21 -0700 (MST)", 0 }, { TZ+UTC , 500000001, "1985-11-05 00:53:21 +0000 (UTC)", 0 }, { TZ+CentEur, 500000001, "1985-11-05 01:53:21 +0100 (CET)", 1 }, { TZ+Japan , 500000001, "1985-11-05 09:53:21 +0900 (JST)", 0 }, { TZ+NZ , 500000001, "1985-11-05 13:53:21 +1300 (NZDT)", 0 }, { TZ+Pacific, 1000000002, "2001-09-08 18:46:42 -0700 (PDT)", 0 }, { TZ+Arizona, 1000000002, "2001-09-08 18:46:42 -0700 (MST)", 0 }, { TZ+UTC , 1000000002, "2001-09-09 01:46:42 +0000 (UTC)", 0 }, { TZ+CentEur, 1000000002, "2001-09-09 03:46:42 +0200 (CEST)", 0 }, { TZ+Japan , 1000000002, "2001-09-09 10:46:42 +0900 (JST)", 0 }, { TZ+NZ , 1000000002, "2001-09-09 13:46:42 +1200 (NZST)", 0 }, #if TZ_ANGLE_BRACKETS_SHOULD_WORK { TZ+Unknown, 0, "1970-01-01 00:00:00 -0000 (-00)", 0 }, { TZ+Unknown, 500000001, "1985-11-05 00:53:21 -0000 (-00)", 0 }, { TZ+Unknown, 1000000002, "2001-09-09 01:46:42 -0000 (-00)", 0 }, #endif { 0 } }; static int tzalloc_test (void) { int fail = 0; int i; for (i = 0; LT[i].tza; i++) { struct tzalloc_test *tza = LT[i].tza; long lt = LT[i].t; timezone_t tz = tza->tz; char const *setting; static char const format[] = "%Y-%m-%d %H:%M:%S %z (%Z)"; char buf[1000]; struct tm tm; size_t n; if (!tz && tza->setting) { tz = tzalloc (tza->setting); if (!tz) { fail = 1; printf ("%s: tzalloc: %s\n", TZ[i].setting, strerror (errno)); continue; } tza->tz = tz; } setting = tza->setting ? tza->setting : "UTC0"; if (!localtime_rz (tz, <[i].t, &tm)) { fail = 1; printf ("%s: %ld: localtime_rz: %s\n", setting, lt, strerror (errno)); continue; } n = nstrftime (buf, sizeof buf, format, &tm, tz, 0); if (n == 0) { fail = 1; printf ("%s: %ld: nstrftime failed\n", setting, lt); continue; } if (! (STREQ (buf, LT[i].exp) || (!tz && n == strlen (LT[i].exp) && memcmp (buf, LT[i].exp, n - sizeof "(GMT)" + 1) == 0 && STREQ (buf + n - sizeof "(GMT)" + 1, "(GMT)")))) { /* Don't fail for unhandled dst in ahistorical entries, as gnulib doesn't currently fix that issue, seen on Darwin 14. */ if (!LT[i].ahistorical || tm.tm_isdst) fail = 1; printf ("%s: expected \"%s\", got \"%s\"\n", setting, LT[i].exp, buf); } } return fail; } static int quarter_test (void) { int result = 0; size_t mon; /* Check %q. */ for (mon = 1; mon <= 12; mon++) { char out[2]; char exp[2] = {0,}; struct tm qtm = { .tm_mon = mon - 1 }; char fmt[3] = {'%','q','\0'}; size_t r = nstrftime (out, sizeof (out), fmt, &qtm, 0, 0); if (r == 0) { puts ("nstrftime(\"%q\") failed"); result = 1; break; } exp[0] = mon < 4 ? '1' : mon < 7 ? '2' : mon < 10 ? '3' : '4'; if (strcmp (out, exp) != 0) { printf ("nstrftime %%q: expected \"%s\", got \"%s\"\n", exp, out); result = 1; break; } } return result; } static int errno_test (void) { int fail = 0; struct tm tm = { .tm_year = 2020 - 1900, .tm_mday = 1 }; char buf[INT_BUFSIZE_BOUND (time_t)]; size_t n; int bigyear = LLONG_MAX - 1900 < INT_MAX ? LLONG_MAX - 1900 : INT_MAX; errno = 0; n = nstrftime (buf, 0, "%m", &tm, 0, 0); if (! (n == 0 && errno == ERANGE)) { fail = 1; printf ("nstrftime failed to set errno = ERANGE\n"); } errno = 0; n = nstrftime (buf, sizeof buf, "", &tm, 0, 0); if (! (n == 0 && errno == 0)) { fail = 1; printf ("nstrftime failed to leave errno alone\n"); } tm.tm_year = bigyear; errno = 0; n = nstrftime (buf, sizeof buf, "%s", &tm, 0, 0); if (n == 0) { if (errno != EOVERFLOW) { fail = 1; printf ("nstrftime failed to set errno = EOVERFLOW\n"); } if (mktime_z (0, &tm) != (time_t) -1) { fail = 1; printf ("nstrftime %%s failed but mktime_z worked for tm_year=%d\n", bigyear); } } else { long long int text_seconds = atoll (buf); if (text_seconds <= (LLONG_MAX - 1 < TYPE_MAXIMUM (time_t) ? LLONG_MAX - 1 : TYPE_MAXIMUM (time_t))) { time_t bigtime = text_seconds; struct tm *tmp = gmtime (&bigtime); if (!tmp) { fail = 1; printf ("gmtime failed on nstrftime result\n"); } else { char buf1[sizeof buf]; size_t n1 = nstrftime (buf1, sizeof buf1, "%s", tmp, 0, 0); buf1[n1] = '\0'; if (! STREQ (buf, buf1)) { fail = 1; printf ("nstrftime %%s first returned '%s', then '%s'\n", buf, buf1); } } } } return fail; } int main (void) { int fail = 0; fail |= posixtm_test (); fail |= tzalloc_test (); fail |= quarter_test (); fail |= errno_test (); return fail; } /* Local Variables: indent-tabs-mode: nil End: */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-obstack-printf.c�������������������������������������������������0000664�0000000�0000000�00000007137�14110572173�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of obstack_printf() and obstack_vprintf() functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (obstack_printf, int, (struct obstack *, char const *, ...)); SIGNATURE_CHECK (obstack_vprintf, int, (struct obstack *, char const *, va_list)); #include "obstack.h" #include "xalloc.h" #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "macros.h" #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free static void test_function (int (*my_obstack_printf) (struct obstack *, const char *, ...)) { struct obstack obs; obstack_init (&obs); /* In general, be careful that arguments to obstack_* don't have side effects, as not all compilers evaluate macro arguments only once. */ /* Grow the obstack to near its boundary, then check that short output longer than the obstack free space grows the obstack. */ { char *base = obstack_base (&obs); char *new_base; int result; int room = obstack_room (&obs) - 4; obstack_blank_fast (&obs, room); result = my_obstack_printf (&obs, "%d %s", 123, "456"); ASSERT (result == 7); ASSERT (result + room == obstack_object_size (&obs)); obstack_1grow (&obs, 0); new_base = obstack_finish (&obs); ASSERT (base != new_base); ASSERT (strcmp (new_base + room, "123 456") == 0); } /* Check that strings shorter than the obstack free space don't cause a reshuffling of the obstack. */ { char *base = obstack_base (&obs); char *new_base; int result; int room = obstack_room (&obs); ASSERT (8 < room); result = my_obstack_printf (&obs, "%d %s", 123, "456"); ASSERT (result == 7); ASSERT (result == obstack_object_size (&obs)); new_base = obstack_base (&obs); ASSERT (base == new_base); ASSERT (strncmp (base, "123 456", result) == 0); obstack_finish (&obs); } /* Check for generating much more output than a chunk size. */ { char *base = obstack_base (&obs); char *new_base; int result; int i; ASSERT (obstack_chunk_size (&obs) < 10000); result = my_obstack_printf (&obs, "%010000d", 0); ASSERT (result == 10000); ASSERT (result == obstack_object_size (&obs)); new_base = obstack_base (&obs); ASSERT (base != new_base); for (i = 0; i < 10000; i++) ASSERT (new_base[i] == '0'); } obstack_free (&obs, NULL); } static int my_obstack_printf (struct obstack *obs, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = obstack_vprintf (obs, format, args); va_end (args); return ret; } static void test_obstack_vprintf () { test_function (my_obstack_printf); } static void test_obstack_printf () { test_function (obstack_printf); } int main (int argc, char *argv[]) { test_obstack_vprintf (); test_obstack_printf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-omap-c++.cc������������������������������������������������������0000664�0000000�0000000�00000004033�14110572173�0020227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered map data type implementation as a C++ class. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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 "gl_omap.hh" #include "gl_array_omap.h" #include <string.h> #include "macros.h" static const int integers[6] = { 0, 1, 2, 3, 4, 5 }; int main (int argc, char *argv[]) { gl_OMap<const char *, const int *> map1; map1 = gl_OMap<const char *, const int *> (GL_ARRAY_OMAP, strcmp, NULL, NULL); map1.put ("five", integers); map1.put ("one", integers + 1); map1.put ("two", integers + 2); map1.put ("three", integers + 3); map1.put ("four", integers + 4); map1.put ("five", integers + 5); ASSERT (map1.size () == 5); ASSERT (map1.get ("two")[0] == 2); gl_OMap<const char *, const int *>::iterator iter1 = map1.begin (); const char *key; const int *val; ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "five") == 0); ASSERT (*val == 5); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "four") == 0); ASSERT (*val == 4); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "one") == 0); ASSERT (*val == 1); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "three") == 0); ASSERT (*val == 3); ASSERT (iter1.next (key, val)); ASSERT (strcmp (key, "two") == 0); ASSERT (*val == 2); ASSERT (!iter1.next (key, val)); map1.free (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-once.c�����������������������������������������������������������0000664�0000000�0000000�00000002044�14110572173�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of once-only execution in multithreaded situations. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include "glthread/lock.h" #include "macros.h" gl_once_define(static, a_once) static int a; static void a_init (void) { a = 42; } int main () { gl_once (a_once, a_init); ASSERT (a == 42); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-open.c�����������������������������������������������������������0000664�0000000�0000000�00000002150�14110572173�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <fcntl.h> #include "signature.h" SIGNATURE_CHECK (open, int, (char const *, int, ...)); #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-open.t" #include "test-open.h" int main (void) { return test_open (open, true); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-open.h�����������������������������������������������������������0000664�0000000�0000000�00000010037�14110572173�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* 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 pointer when _FORTIFY_SOURCE is positive. */ #if __GLIBC__ && defined __always_inline # define ALWAYS_INLINE __always_inline #else # define ALWAYS_INLINE #endif /* This file is designed to test both open(n,buf[,mode]) and openat(AT_FDCWD,n,buf[,mode]). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static ALWAYS_INLINE int test_open (int (*func) (char const *, int, ...), bool print) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); unlink (BASE "e.exe"); unlink (BASE "link"); /* Cannot create directory. */ errno = 0; ASSERT (func ("nonexist.ent/", O_CREAT | O_RDONLY, 0600) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Create a regular file. */ fd = func (BASE "file", O_CREAT | O_RDONLY, 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Create an executable regular file. */ fd = func (BASE "e.exe", O_CREAT | O_RDONLY, 0700); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Trailing slash handling. */ errno = 0; ASSERT (func (BASE "file/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); /* Directories cannot be opened for writing. */ errno = 0; ASSERT (func (".", O_WRONLY) == -1); ASSERT (errno == EISDIR || errno == EACCES); /* /dev/null must exist, and be writable. */ fd = func ("/dev/null", O_RDONLY); ASSERT (0 <= fd); { char c; ASSERT (read (fd, &c, 1) == 0); } ASSERT (close (fd) == 0); fd = func ("/dev/null", O_WRONLY); ASSERT (0 <= fd); ASSERT (write (fd, "c", 1) == 1); ASSERT (close (fd) == 0); /* Although O_NONBLOCK on regular files can be ignored, it must not cause a failure. */ fd = func (BASE "file", O_NONBLOCK | O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* O_CLOEXEC must be honoured. */ if (O_CLOEXEC) { /* Since the O_CLOEXEC handling goes through a special code path at its first invocation, test it twice. */ int i; for (i = 0; i < 2; i++) { int flags; fd = func (BASE "file", O_CLOEXEC | O_RDONLY); ASSERT (0 <= fd); flags = fcntl (fd, F_GETFD); ASSERT (flags >= 0); ASSERT ((flags & FD_CLOEXEC) != 0); ASSERT (close (fd) == 0); } } /* Symlink handling, where supported. */ if (symlink (BASE "file", BASE "link") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "link/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR); fd = func (BASE "link", O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "e.exe") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-openat-safer.c���������������������������������������������������0000664�0000000�0000000�00000007656�14110572173�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that openat_safer leave standard fds alone. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "fcntl--.h" #include <errno.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> /* This test intentionally closes 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #define witness "test-openat-safer.txt" int main (void) { int i; int j; int dfd; int fd; char buf[2]; /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; /* Create handle for future use. */ dfd = openat (AT_FDCWD, ".", O_RDONLY); ASSERT (STDERR_FILENO < dfd); /* Create file for later checks. */ remove (witness); fd = openat (dfd, witness, O_WRONLY | O_CREAT | O_EXCL, 0600); ASSERT (STDERR_FILENO < fd); ASSERT (write (fd, "hi", 2) == 2); ASSERT (close (fd) == 0); /* Four iterations, with progressively more standard descriptors closed. */ for (i = -1; i <= STDERR_FILENO; i++) { ASSERT (fchdir (dfd) == 0); if (0 <= i) ASSERT (close (i) == 0); /* Execute once in ".", once in "..". */ for (j = 0; j <= 1; j++) { if (j) ASSERT (chdir ("..") == 0); /* Check for error detection. */ errno = 0; ASSERT (openat (AT_FDCWD, "", O_RDONLY) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (openat (dfd, "", O_RDONLY) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (openat (-1, ".", O_RDONLY) == -1); ASSERT (errno == EBADF); /* Check for trailing slash and /dev/null handling. */ errno = 0; ASSERT (openat (dfd, "nonexist.ent/", O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); errno = 0; ASSERT (openat (dfd, witness "/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); #if defined __linux__ || defined __ANDROID__ /* Using a bad directory is okay for absolute paths. */ fd = openat (-1, "/dev/null", O_WRONLY); ASSERT (STDERR_FILENO < fd); #endif /* Using a non-directory is wrong for relative paths. */ errno = 0; fd = open ("/dev/null", O_RDONLY); ASSERT (STDERR_FILENO < fd); ASSERT (openat (fd, ".", O_RDONLY) == -1); ASSERT (errno == EBADF || errno == ENOTDIR); ASSERT (close (fd) == 0); /* Check for our witness file. */ fd = openat (dfd, witness, O_RDONLY | O_NOFOLLOW); ASSERT (STDERR_FILENO < fd); ASSERT (read (fd, buf, 2) == 2); ASSERT (buf[0] == 'h' && buf[1] == 'i'); ASSERT (close (fd) == 0); } } ASSERT (fchdir (dfd) == 0); ASSERT (unlink (witness) == 0); ASSERT (close (dfd) == 0); return 0; } ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-openat.c���������������������������������������������������������0000664�0000000�0000000�00000005144�14110572173�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that openat works. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (openat, int, (int, char const *, int, ...)); #include <errno.h> #include <stdarg.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-openat.t" #include "test-open.h" static int dfd = AT_FDCWD; /* Wrapper around openat to test open behavior. */ static int do_open (char const *name, int flags, ...) { if (flags & O_CREAT) { mode_t mode = 0; va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); return openat (dfd, name, flags, mode); } return openat (dfd, name, flags); } int main (_GL_UNUSED int argc, char *argv[]) { int result; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (openat (-1, "foo", O_RDONLY) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (openat (99, "foo", O_RDONLY) == -1); ASSERT (errno == EBADF); } /* Basic checks. */ result = test_open (do_open, false); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_open (do_open, false) == result); ASSERT (close (dfd) == 0); /* Check that even when *-safer modules are in use, plain openat can land in fd 0. Do this test last, since it is destructive to stdin. */ ASSERT (close (STDIN_FILENO) == 0); ASSERT (openat (AT_FDCWD, ".", O_RDONLY) == STDIN_FILENO); { dfd = open (".", O_RDONLY); ASSERT (STDIN_FILENO < dfd); ASSERT (chdir ("..") == 0); ASSERT (close (STDIN_FILENO) == 0); ASSERT (openat (dfd, ".", O_RDONLY) == STDIN_FILENO); ASSERT (close (dfd) == 0); } return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-openpty.c��������������������������������������������������������0000664�0000000�0000000�00000006113�14110572173�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pty.h and openpty function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009 and Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include <pty.h> #include "signature.h" SIGNATURE_CHECK (openpty, int, (int *, int *, char *, struct termios const *, struct winsize const *)); #include <stdio.h> #include <string.h> #include <termios.h> #include <unistd.h> int main () { { #ifndef _WIN32 int master; int slave; /* Open a pseudo-terminal, as a master-slave pair. */ { int res = openpty (&master, &slave, NULL, NULL, NULL); if (res != 0) { fprintf (stderr, "openpty returned %d\n", res); return 1; } } /* Set the terminal characteristics. On Linux or Mac OS X, they can be set on either the master or the slave; the effect is the same. But on Solaris, they have to be set on the master; tcgetattr on the slave fails. */ { int tcfd = slave; /* You can try tcfd = master; here. */ struct termios attributes; if (tcgetattr (tcfd, &attributes) < 0) { fprintf (stderr, "tcgetattr failed\n"); return 1; } /* Enable canonical processing, including erase. */ attributes.c_lflag |= ECHO | ICANON | ECHOE; attributes.c_cc[VERASE] = '\177'; if (tcsetattr (tcfd, TCSANOW, &attributes) < 0) { fprintf (stderr, "tcsetattr failed\n"); return 1; } } /* Write into the master side. */ { static const char input[] = "Hello worst\177\177ld!\n"; if (write (master, input, strlen (input)) < (int) strlen (input)) { fprintf (stderr, "write failed\n"); return 1; } } /* Read from the slave side. */ { char buf[100]; int res = read (slave, buf, sizeof (buf)); static const char expected[] = "Hello world!\n"; if (res < 0) { fprintf (stderr, "read failed\n"); return 1; } if (!(res == strlen (expected) && memcmp (buf, expected, strlen (expected)) == 0)) { fprintf (stderr, "read result unexpected\n"); return 1; } } /* Close the master side before the slave side gets closed. This is necessary on Mac OS X 10.4.11. */ close (master); #endif } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-oset-c++.cc������������������������������������������������������0000664�0000000�0000000�00000005015�14110572173�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation as a C++ class. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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 "gl_oset.hh" #include "gl_array_oset.h" #include <string.h> #include "macros.h" static int reverse_strcmp (const char *str1, const char *str2) { int cmp = strcmp (str1, str2); return (cmp > 0 ? -1 : cmp < 0 ? 1 : 0); } static void action (const char *str, int *data) { const_cast<char *> (str) [0] += *data; } static bool is_at_most (const char *str, const char *threshold) { return strcmp (str, threshold) <= 0; } int main (int argc, char *argv[]) { char A[2] = "A"; gl_OSet<const char *> set1; set1 = gl_OSet<const char *> (GL_ARRAY_OSET, reverse_strcmp, NULL); set1.add (A); set1.add ("C"); set1.add ("D"); set1.add ("C"); ASSERT (set1.size () == 3); { gl_OSet<const char *>::iterator iter1 = set1.begin (); const char *elt; ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "D") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "A") == 0); ASSERT (!iter1.next (elt)); } int data = 'Z' - 'A'; ASSERT (set1.update (A, action, &data) == 1); { gl_OSet<const char *>::iterator iter2 = set1.begin (); const char *elt; ASSERT (iter2.next (elt)); ASSERT (strcmp (elt, "Z") == 0); ASSERT (iter2.next (elt)); ASSERT (strcmp (elt, "D") == 0); ASSERT (iter2.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (!iter2.next (elt)); } { gl_OSet<const char *>::iterator iter3 = set1.begin_atleast (is_at_most, "R"); const char *elt; ASSERT (iter3.next (elt)); ASSERT (strcmp (elt, "D") == 0); ASSERT (iter3.next (elt)); ASSERT (strcmp (elt, "C") == 0); ASSERT (!iter3.next (elt)); } set1.free (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-oset-update.h����������������������������������������������������0000664�0000000�0000000�00000010345�14110572173�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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/>. */ static void action (const void *str, void *data) { ((char *) str)[0] += *(int *)data; } static void test_update (gl_oset_implementation_t implementation) { char A[2] = "A"; char B[2] = "B"; char C[2] = "C"; char D[2] = "D"; gl_oset_t set1 = gl_oset_nx_create_empty (implementation, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set1 != NULL); /* Fill the set. */ ASSERT (gl_oset_nx_add (set1, C) == 1); ASSERT (gl_oset_nx_add (set1, A) == 1); ASSERT (gl_oset_nx_add (set1, B) == 1); ASSERT (gl_oset_nx_add (set1, D) == 1); /* Verify that set1 = ["A", "B", "C", "D"]. */ { gl_oset_iterator_t iter = gl_oset_iterator (set1); const void *elt; ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == A); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == B); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == C); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == D); ASSERT (!gl_oset_iterator_next (&iter, &elt)); } /* Make a side effect on an element in the set, that moves the element. */ { int data = 'G' - 'B'; ASSERT (gl_oset_update (set1, B, action, &data) == 1); } /* Verify that set1 = ["A", "C", "D", "G"]. */ { gl_oset_iterator_t iter = gl_oset_iterator (set1); const void *elt; ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == A); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == C); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == D); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == B); ASSERT (!gl_oset_iterator_next (&iter, &elt)); } /* Make a side effect on an element in the set, that does not move the element. */ { int data = 'E' - 'D'; ASSERT (gl_oset_update (set1, D, action, &data) == 0); } /* Verify that set1 = ["A", "C", "E", "G"]. */ { gl_oset_iterator_t iter = gl_oset_iterator (set1); const void *elt; ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == A); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == C); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == D); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == B); ASSERT (!gl_oset_iterator_next (&iter, &elt)); } /* Make a side effect on an element in the set, that provokes a collision. */ { int data = 'G' - 'A'; ASSERT (gl_oset_update (set1, A, action, &data) == -1); } /* Verify that set1 = ["C", "E", "G"]. */ { gl_oset_iterator_t iter = gl_oset_iterator (set1); const void *elt; ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == C); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == D); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == B); ASSERT (!gl_oset_iterator_next (&iter, &elt)); } /* Make a side effect on an element that is not in the set. */ { int data = 'R' - 'G'; ASSERT (gl_oset_update (set1, A, action, &data) == 0); } /* Verify that set1 = ["C", "E", "G"]. */ { gl_oset_iterator_t iter = gl_oset_iterator (set1); const void *elt; ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == C); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == D); ASSERT (gl_oset_iterator_next (&iter, &elt)); ASSERT (elt == B); ASSERT (!gl_oset_iterator_next (&iter, &elt)); } gl_oset_free (set1); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-parse-datetime.c�������������������������������������������������0000664�0000000�0000000�00000035720�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of parse_datetime() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include "parse-datetime.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #ifdef DEBUG #define LOG(str, now, res) \ printf ("string '%s' diff %d %d\n", \ str, res.tv_sec - now.tv_sec, res.tv_nsec - now.tv_nsec); #else #define LOG(str, now, res) (void) 0 #endif static const char *const day_table[] = { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", NULL }; #if ! HAVE_TM_GMTOFF /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) #define TM_YEAR_BASE 1900 /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. The body of this function is taken directly from the GNU C Library; see src/strftime.c. */ static long int tm_diff (struct tm const *a, struct tm const *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = a4 / 25 - (a4 % 25 < 0); int b100 = b4 / 25 - (b4 % 25 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); long int ayear = a->tm_year; long int years = ayear - b->tm_year; long int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ static long gmt_offset (time_t s) { long gmtoff; #if !HAVE_TM_GMTOFF struct tm tm_local = *localtime (&s); struct tm tm_gmt = *gmtime (&s); gmtoff = tm_diff (&tm_local, &tm_gmt); #else gmtoff = localtime (&s)->tm_gmtoff; #endif return gmtoff; } int main (_GL_UNUSED int argc, char **argv) { struct timespec result; struct timespec result2; struct timespec expected; struct timespec now; const char *p; int i; long gmtoff; time_t ref_time = 1304250918; /* Set the time zone to US Eastern time with the 2012 rules. This should disable any leap second support. Otherwise, there will be a problem with glibc on sites that default to leap seconds; see <https://bugs.gnu.org/12206>. */ setenv ("TZ", "EST5EDT,M3.2.0,M11.1.0", 1); gmtoff = gmt_offset (ref_time); /* ISO 8601 extended date and time of day representation, 'T' separator, local time zone */ p = "2011-05-01T11:55:18"; expected.tv_sec = ref_time - gmtoff; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601 extended date and time of day representation, ' ' separator, local time zone */ p = "2011-05-01 11:55:18"; expected.tv_sec = ref_time - gmtoff; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601, extended date and time of day representation, 'T' separator, UTC */ p = "2011-05-01T11:55:18Z"; expected.tv_sec = ref_time; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601, extended date and time of day representation, ' ' separator, UTC */ p = "2011-05-01 11:55:18Z"; expected.tv_sec = ref_time; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601 extended date and time of day representation, 'T' separator, w/UTC offset */ p = "2011-05-01T11:55:18-07:00"; expected.tv_sec = 1304276118; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601 extended date and time of day representation, ' ' separator, w/UTC offset */ p = "2011-05-01 11:55:18-07:00"; expected.tv_sec = 1304276118; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601 extended date and time of day representation, 'T' separator, w/hour only UTC offset */ p = "2011-05-01T11:55:18-07"; expected.tv_sec = 1304276118; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); /* ISO 8601 extended date and time of day representation, ' ' separator, w/hour only UTC offset */ p = "2011-05-01 11:55:18-07"; expected.tv_sec = 1304276118; expected.tv_nsec = 0; ASSERT (parse_datetime (&result, p, 0)); LOG (p, expected, result); ASSERT (expected.tv_sec == result.tv_sec && expected.tv_nsec == result.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "now"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (now.tv_sec == result.tv_sec && now.tv_nsec == result.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "tomorrow"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (now.tv_sec + 24 * 60 * 60 == result.tv_sec && now.tv_nsec == result.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "yesterday"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (now.tv_sec - 24 * 60 * 60 == result.tv_sec && now.tv_nsec == result.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "4 hours"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (now.tv_sec + 4 * 60 * 60 == result.tv_sec && now.tv_nsec == result.tv_nsec); /* test if timezone is not being ignored for day offset */ now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+400 +24 hours"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+400 +1 day"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); /* test if several time zones formats are handled same way */ now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+14:00"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+14"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); p = "UTC+1400"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC-14:00"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC-14"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); p = "UTC-1400"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+0:15"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+0015"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC-1:30"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC-130"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); /* TZ out of range should cause parse_datetime failure */ now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+25:00"; ASSERT (!parse_datetime (&result, p, &now)); /* Check for several invalid countable dayshifts */ now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+4:00 +40 yesterday"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 next yesterday"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 tomorrow ago"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 tomorrow hence"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 40 now ago"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 last tomorrow"; ASSERT (!parse_datetime (&result, p, &now)); p = "UTC+4:00 -4 today"; ASSERT (!parse_datetime (&result, p, &now)); /* And check correct usage of dayshifts */ now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+400 tomorrow"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+400 +1 day"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); p = "UTC+400 1 day hence"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+400 yesterday"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+400 1 day ago"; ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); now.tv_sec = 4711; now.tv_nsec = 1267; p = "UTC+400 now"; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); p = "UTC+400 +0 minutes"; /* silly, but simple "UTC+400" is different*/ ASSERT (parse_datetime (&result2, p, &now)); LOG (p, now, result2); ASSERT (result.tv_sec == result2.tv_sec && result.tv_nsec == result2.tv_nsec); /* Check that some "next Monday", "last Wednesday", etc. are correct. */ setenv ("TZ", "UTC0", 1); for (i = 0; day_table[i]; i++) { unsigned int thur2 = 7 * 24 * 3600; /* 2nd thursday */ char tmp[32]; sprintf (tmp, "NEXT %s", day_table[i]); now.tv_sec = thur2 + 4711; now.tv_nsec = 1267; ASSERT (parse_datetime (&result, tmp, &now)); LOG (tmp, now, result); ASSERT (result.tv_nsec == 0); ASSERT (result.tv_sec == thur2 + (i == 4 ? 7 : (i + 3) % 7) * 24 * 3600); sprintf (tmp, "LAST %s", day_table[i]); now.tv_sec = thur2 + 4711; now.tv_nsec = 1267; ASSERT (parse_datetime (&result, tmp, &now)); LOG (tmp, now, result); ASSERT (result.tv_nsec == 0); ASSERT (result.tv_sec == thur2 + ((i + 3) % 7 - 7) * 24 * 3600); } p = "THURSDAY UTC+00"; /* The epoch was on Thursday. */ now.tv_sec = 0; now.tv_nsec = 0; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (result.tv_sec == now.tv_sec && result.tv_nsec == now.tv_nsec); p = "FRIDAY UTC+00"; now.tv_sec = 0; now.tv_nsec = 0; ASSERT (parse_datetime (&result, p, &now)); LOG (p, now, result); ASSERT (result.tv_sec == 24 * 3600 && result.tv_nsec == now.tv_nsec); /* Exercise a sign-extension bug. Before July 2012, an input starting with a high-bit-set byte would be treated like "0". */ ASSERT ( ! parse_datetime (&result, "\xb0", &now)); /* Exercise TZ="" parsing code. */ /* These two would infloop or segfault before Feb 2014. */ ASSERT ( ! parse_datetime (&result, "TZ=\"\"\"", &now)); ASSERT ( ! parse_datetime (&result, "TZ=\"\" \"", &now)); /* Exercise invalid patterns. */ ASSERT ( ! parse_datetime (&result, "TZ=\"", &now)); ASSERT ( ! parse_datetime (&result, "TZ=\"\\\"", &now)); ASSERT ( ! parse_datetime (&result, "TZ=\"\\n", &now)); ASSERT ( ! parse_datetime (&result, "TZ=\"\\n\"", &now)); /* Exercise valid patterns. */ ASSERT ( parse_datetime (&result, "TZ=\"\"", &now)); ASSERT ( parse_datetime (&result, "TZ=\"\" ", &now)); ASSERT ( parse_datetime (&result, " TZ=\"\"", &now)); /* Exercise patterns which may be valid or invalid, depending on the platform. */ #if !defined __NetBSD__ ASSERT ( parse_datetime (&result, "TZ=\"\\\\\"", &now)); ASSERT ( parse_datetime (&result, "TZ=\"\\\"\"", &now)); #endif /* Outlandishly-long time zone abbreviations should not cause problems. */ { static char const bufprefix[] = "TZ=\""; long int tzname_max = -1; errno = 0; #ifdef _SC_TZNAME_MAX tzname_max = sysconf (_SC_TZNAME_MAX); #endif enum { tzname_alloc = 2000 }; if (tzname_max < 0) tzname_max = errno ? 6 : tzname_alloc; int tzname_len = tzname_alloc < tzname_max ? tzname_alloc : tzname_max; static char const bufsuffix[] = "0\" 1970-01-01 01:02:03.123456789"; enum { bufsize = sizeof bufprefix - 1 + tzname_alloc + sizeof bufsuffix }; char buf[bufsize]; memcpy (buf, bufprefix, sizeof bufprefix - 1); memset (buf + sizeof bufprefix - 1, 'X', tzname_len); strcpy (buf + sizeof bufprefix - 1 + tzname_len, bufsuffix); ASSERT (parse_datetime (&result, buf, &now)); LOG (buf, now, result); ASSERT (result.tv_sec == 1 * 60 * 60 + 2 * 60 + 3 && result.tv_nsec == 123456789); } return 0; } ������������������������������������������������gnulib-20210822~d383792/tests/test-parse-duration.c�������������������������������������������������0000664�0000000�0000000�00000002767�14110572173�0021533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of parsing durations. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include "parse-duration.h" int main (int argc, char *argv[]) { if (--argc <= 0) { fprintf (stderr, "USAGE: %s <time-spec> [...]", argv[0]); return 1; } do { char const * arg = *++argv; time_t res = parse_duration (arg); if (errno != 0) { fprintf (stderr, "could not parse time: %s\n\terr %d - %s\n", arg, errno, strerror (errno)); return 1; } printf ("%u\n", (unsigned int)res); } while (--argc > 0); return 0; } /* * Local Variables: * mode: C * c-file-style: "gnu" * indent-tabs-mode: nil * End: * end of parse-duration.c */ ���������gnulib-20210822~d383792/tests/test-parse-duration.sh������������������������������������������������0000775�0000000�0000000�00000003276�14110572173�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show all commands when run with environment variable VERBOSE=yes. test -z "$VERBOSE" || set -x prog=test-parse-duration exe=`pwd`/${prog}${EXEEXT} nl=' ' # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 exit 1 } } die () { echo "${prog} fatal error: $*" >&2 exit 1 } func_tmpdir trap 'rm -rf "${tmp}"' EXIT tmpf="${tmp}/tests.txt" cat > "${tmpf}" <<- _EOF_ 1 Y 2 M 3 W 4 d 5 h 6 m 7 s P 00010225 T 05:06:07 P 1Y2M3W4D T 5H6M7S 1 Y 2 M 25 D 5:6:7 1 Y 2 M 25 d 5h 6:7 1 Y 2 M 25 d 5h 6m 7 P 1-2-25 T 5:6:7 _EOF_ exec 3< "${tmpf}" while read line <&3 do v=`${CHECKER} ${exe} "${line}"` || { ls -l "${tmpf}"; die "Failed: ${exe} '${line}'"; } test $v -eq 38898367 || die $v is not 38898367 done exec 3>&- ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-passfd.c���������������������������������������������������������0000664�0000000�0000000�00000005720�14110572173�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of passing file descriptors. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 "passfd.h" #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/wait.h> #include "macros.h" int main () { #if HAVE_SOCKETPAIR int pair[2]; int ret; pid_t pid; int status; int fdnull; int fd; struct stat st; # if HAVE_DECL_ALARM /* Avoid hanging on failure. */ int alarm_value = 5; signal (SIGALRM, SIG_DFL); alarm (alarm_value); # endif fdnull = open ("/dev/null", O_RDWR); if (fdnull < 0) { perror ("Could not open /dev/null"); return 1; } ret = socketpair (AF_UNIX, SOCK_STREAM, 0, pair); if (ret < 0) { perror ("socket pair failed"); return 2; } pid = fork (); if (pid == -1) { perror ("fork"); return 3; } if (pid == 0) { ret = sendfd (pair[1], fdnull); if (ret == -1) { perror ("sendfd"); return 64; } return 0; } /* father */ else { ASSERT (close (pair[1]) == 0); fd = recvfd (pair[0], 0); if (fd == -1) { perror ("recvfd"); return 16; } ret = waitpid (pid, &status, 0); if (ret == -1) { perror ("waitpid"); return 17; } ASSERT (ret == pid); if (!WIFEXITED (status)) { fprintf (stderr, "Child does not normally exit\n"); return 65; } ret = WEXITSTATUS (status); if (ret != 0) { fprintf (stderr, "Send fd fail\n"); return ret; } /* try to stat new fd */ ret = fstat (fd, &st); if (ret < 0) { perror ("fstat"); return 80; } /* Check behavior when sender no longer around */ errno = 0; fd = recvfd (pair[0], 0); ASSERT (fd == -1); ASSERT (errno == ENOTCONN); return 0; } #else errno = 0; ASSERT(sendfd (0, 0) == -1); ASSERT(errno == ENOSYS); errno = 0; ASSERT(recvfd (0, 0) == -1); ASSERT(errno == ENOSYS); fputs ("skipping test: socketpair not supported on this system\n", stderr); return 77; #endif } ������������������������������������������������gnulib-20210822~d383792/tests/test-pathmax.c��������������������������������������������������������0000664�0000000�0000000�00000001704�14110572173�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of "pathmax.h". Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include "pathmax.h" /* Check that PATH_MAX is a constant if it is defined. */ #ifdef PATH_MAX int a = PATH_MAX; #endif int main (void) { return 0; } ������������������������������������������������������������gnulib-20210822~d383792/tests/test-perror.c���������������������������������������������������������0000664�0000000�0000000�00000002057�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (perror, void, (char const *)); #include <errno.h> int main (int argc, char **argv) { const char *prefix = (argc > 1 ? argv[1] : NULL); errno = EACCES; perror (prefix); errno = ETIMEDOUT; perror (prefix); errno = EOVERFLOW; perror (prefix); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-perror.sh��������������������������������������������������������0000775�0000000�0000000�00000001757�14110572173�0020300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . # Test NULL prefix. Result should not contain a number, except in lines that # start with 'EDC' (IBM z/OS libc produces an error identifier before the # error message). ${CHECKER} test-perror 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror.tmp grep -v '^EDC' t-perror.tmp | grep '[0-9]' > /dev/null \ && fail_ "result should not contain a number" # Test empty prefix. Result should be the same. ${CHECKER} test-perror '' 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror1.tmp diff t-perror.tmp t-perror1.tmp \ || fail_ "empty prefix should behave like NULL argument" # Test non-empty prefix. ${CHECKER} test-perror foo 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror3.tmp sed -e 's/^/foo: /' < t-perror.tmp > t-perror2.tmp diff t-perror2.tmp t-perror3.tmp || fail_ "prefix applied incorrectly" # Test exit status. ${CHECKER} test-perror >out 2>/dev/null || fail_ "unexpected exit status" test -s out && fail_ "unexpected output" Exit 0 �����������������gnulib-20210822~d383792/tests/test-perror2.c��������������������������������������������������������0000664�0000000�0000000�00000006521�14110572173�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> /* 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #define BASE "test-perror2" int main (void) { /* We change fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (BASE ".tmp", "w+", stderr) == stderr); /* Test that perror does not clobber strerror buffer. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); errno = EACCES; perror (""); errno = -5; perror (""); ASSERT (!ferror (stderr)); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } /* Test that perror uses the same message as strerror. */ { int errs[] = { EACCES, 0, -3, }; int i; for (i = 0; i < SIZEOF (errs); i++) { char buf[256]; const char *err = strerror (errs[i]); ASSERT (err); ASSERT (strlen (err) < sizeof buf); rewind (stderr); ASSERT (ftruncate (fileno (stderr), 0) == 0); errno = errs[i]; perror (NULL); ASSERT (!ferror (stderr)); rewind (stderr); ASSERT (fgets (buf, sizeof buf, stderr) == buf); ASSERT (strstr (buf, err)); } } /* Test that perror reports write failure. */ { ASSERT (freopen (BASE ".tmp", "r", stderr) == stderr); ASSERT (setvbuf (stderr, NULL, _IONBF, BUFSIZ) == 0); errno = -1; ASSERT (!ferror (stderr)); perror (NULL); #if 0 /* Commented out until cygwin behaves: https://sourceware.org/ml/newlib/2011/msg00228.html */ ASSERT (errno > 0); /* Commented out until glibc behaves: https://sourceware.org/bugzilla/show_bug.cgi?id=12792 */ ASSERT (ferror (stderr)); #endif } ASSERT (fclose (stderr) == 0); ASSERT (remove (BASE ".tmp") == 0); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-gi1.c������������������������������������������������0000664�0000000�0000000�00000005710�14110572173�0021463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filtering of data through a subprocess. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2009. This 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 "pipe-filter.h" #include "binary-io.h" #include "c-ctype.h" #include "read-file.h" #include "macros.h" /* Pipe a text file through 'LC_ALL=C tr "[a-z]" "[A-Z]"', or equivalently, 'tr "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"', which converts ASCII characters from lower case to upper case. */ struct locals { const char *input; size_t nread; char buf[19]; }; static void * prepare_read (size_t *num_bytes_p, void *private_data) { struct locals *l = (struct locals *) private_data; *num_bytes_p = sizeof (l->buf); return l->buf; } static void done_read (void *data_read, size_t num_bytes_read, void *private_data) { struct locals *l = (struct locals *) private_data; const char *p = l->input + l->nread; const char *q = (const char *) data_read; size_t i; for (i = 0; i < num_bytes_read; i++, q++) { /* Handle conversion NL -> CRLF possibly done by the child process. */ if (!(O_BINARY && *q == '\r')) { char orig = *p; char expected = c_toupper (orig); ASSERT (*q == expected); p++; } } l->nread = p - l->input; } int main (int argc, char *argv[]) { const char *tr_program; const char *input_filename; size_t input_size; char *input; ASSERT (argc == 3); tr_program = argv[1]; /* Read some text from a file. */ input_filename = argv[2]; input = read_file (input_filename, RF_BINARY, &input_size); ASSERT (input != NULL); /* Convert it to uppercase, line by line. */ { const char *argv[4]; struct locals l; struct pipe_filter_gi *f; int result; l.input = input; l.nread = 0; argv[0] = tr_program; argv[1] = "abcdefghijklmnopqrstuvwxyz"; argv[2] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; argv[3] = NULL; f = pipe_filter_gi_create ("tr", tr_program, argv, false, true, prepare_read, done_read, &l); ASSERT (f != NULL); result = pipe_filter_gi_write (f, input, input_size); ASSERT (result == 0); result = pipe_filter_gi_close (f); ASSERT (result == 0); ASSERT (l.nread == input_size); } free (input); return 0; } ��������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-gi1.sh�����������������������������������������������0000775�0000000�0000000�00000001133�14110572173�0021651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Find a 'tr' program that supports character ranges in the POSIX syntax. # Solaris /usr/bin/tr does not. if test -f /usr/xpg6/bin/tr; then TR=/usr/xpg6/bin/tr else if test -f /usr/xpg4/bin/tr; then TR=/usr/xpg4/bin/tr else TR=tr fi fi # A small file. ${CHECKER} ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-gi1.sh" || exit 1 # A medium-sized file. ${CHECKER} ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-gi1.c" || exit 1 # A large file. ${CHECKER} ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-vasnprintf-posix.c" || exit 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-gi2-child.c������������������������������������������0000664�0000000�0000000�00000002364�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-pipe-filter-gi2-main. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Paolo Bonzini <bonzini@gnu.org>, 2009. This 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 <stdio.h> #include <stdlib.h> int main () { /* Repeatedly: Read two integers i and j, then output all integers in the range i..j, one per line. */ for (;;) { int i, j; if (scanf (" %d", &i) != 1) break; if (scanf (" %d", &j) != 1) break; if (j == -1) exit (i); while (i <= j) printf ("abcdefghijklmnopqrstuvwxyz%d\n", i++); } exit (0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-gi2-main.c�������������������������������������������0000664�0000000�0000000�00000007615�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test harness for pipe-filter-gi. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Paolo Bonzini <bonzini@gnu.org>, 2009. This 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 "pipe-filter.h" #include <stdio.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <signal.h> #include "full-write.h" #include "macros.h" /* 0.1 sec pause */ static void small_nap (void) { usleep (100000); } static char static_buf[5]; static void * prepare_read (size_t *num_bytes_p, void *private_data) { *num_bytes_p = sizeof (static_buf); return static_buf; } /* Callback that ignores the data that has been read. */ static void ignore_done_read (void *data_read, size_t num_bytes_read, void *private_data) { } /* Callback that outputs the data that has been read. */ static void output_done_read (void *data_read, size_t num_bytes_read, void *private_data) { full_write (STDOUT_FILENO, data_read, num_bytes_read); } static void pipe_filter_gi_write_string (struct pipe_filter_gi *f, const char *string) { pipe_filter_gi_write (f, string, strlen (string)); } int main (int argc, char **argv) { struct pipe_filter_gi *f; const char *path[] = { NULL, NULL }; ASSERT (argc == 2); /* Test writing to a nonexistent program traps sooner or later. */ { int rc; path[0] = "/nonexistent/blah"; f = pipe_filter_gi_create ("pipe-filter-test", path[0], path, true, false, prepare_read, ignore_done_read, NULL); small_nap (); rc = pipe_filter_gi_write (f, "", 1); ASSERT (rc == 127 || rc == -1); rc = pipe_filter_gi_close (f); ASSERT (rc == 127 || rc == -1); printf ("Test 1 passed.\n"); fflush (stdout); } /* Test returning the exit status. */ { path[0] = argv[1]; f = pipe_filter_gi_create ("pipe-filter-test", path[0], path, false, false, prepare_read, ignore_done_read, NULL); pipe_filter_gi_write_string (f, "1 -1"); ASSERT (pipe_filter_gi_close (f) == 1); printf ("Test 2 passed.\n"); fflush (stdout); } /* Same, but test returning the status in pipe_filter_gi_write. */ { int rc; path[0] = argv[1]; f = pipe_filter_gi_create ("pipe-filter-test", path[0], path, false, false, prepare_read, ignore_done_read, NULL); pipe_filter_gi_write_string (f, "1 -1\n"); /* tell the child to terminate */ small_nap (); /* let the child terminate */ rc = pipe_filter_gi_write (f, " ", 1); /* write to a closed pipe */ ASSERT (rc == -1 && errno == EPIPE); /* Closing the filter must report same error again, for consistency with pipe_filter_ii_execute. The subprocess' exit status is not returned. */ rc = pipe_filter_gi_close (f); ASSERT (rc == -1 && errno == EPIPE); printf ("Test 3 passed.\n"); fflush (stdout); } /* Now test asynchronous I/O. */ { path[0] = argv[1]; f = pipe_filter_gi_create ("pipe-filter-test", path[0], path, false, true, prepare_read, output_done_read, NULL); pipe_filter_gi_write_string (f, "1 50\n"); pipe_filter_gi_write_string (f, "51\n"); pipe_filter_gi_write_string (f, "100"); ASSERT (pipe_filter_gi_close (f) == 0); printf ("Test 4 passed.\n"); fflush (stdout); } return 0; } �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-gi2.sh�����������������������������������������������0000775�0000000�0000000�00000002227�14110572173�0021657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # pipe-filter test driver. # # Copyright (C) 2009-2021 Free Software Foundation, Inc. # Written by Paolo Bonzini <bonzini@gnu.org>, 2009. # # This 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/>. */ ${CHECKER} ./test-pipe-filter-gi2-main${EXEEXT} ./test-pipe-filter-gi2-child${EXEEXT} | { set -e read a && test "$a" = "Test 1 passed." read a && test "$a" = "Test 2 passed." read a && test "$a" = "Test 3 passed." i=1 while test $i -le 100; do read a && test "$a" = "abcdefghijklmnopqrstuvwxyz$i" i=`expr $i + 1` done read a && test "$a" = "Test 4 passed." } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-ii1.c������������������������������������������������0000664�0000000�0000000�00000006716�14110572173�0021474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filtering of data through a subprocess. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2009. This 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 "pipe-filter.h" #include "binary-io.h" #include "c-ctype.h" #include "read-file.h" #include "macros.h" /* Pipe a text file through 'LC_ALL=C tr "[a-z]" "[A-Z]"', or equivalently, 'tr "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"', which converts ASCII characters from lower case to upper case. */ struct locals { const char *input; size_t size; size_t nwritten; size_t nread; char buf[19]; }; static const void * prepare_write (size_t *num_bytes_p, void *private_data) { struct locals *l = (struct locals *) private_data; if (l->nwritten < l->size) { *num_bytes_p = l->size - l->nwritten; return l->input + l->nwritten; } else return NULL; } static void done_write (void *data_written, size_t num_bytes_written, void *private_data) { struct locals *l = (struct locals *) private_data; l->nwritten += num_bytes_written; } static void * prepare_read (size_t *num_bytes_p, void *private_data) { struct locals *l = (struct locals *) private_data; *num_bytes_p = sizeof (l->buf); return l->buf; } static void done_read (void *data_read, size_t num_bytes_read, void *private_data) { struct locals *l = (struct locals *) private_data; const char *p = l->input + l->nread; const char *q = (const char *) data_read; size_t i; for (i = 0; i < num_bytes_read; i++, q++) { /* Handle conversion NL -> CRLF possibly done by the child process. */ if (!(O_BINARY && *q == '\r')) { char orig = *p; char expected = c_toupper (orig); ASSERT (*q == expected); p++; } } l->nread = p - l->input; } int main (int argc, char *argv[]) { const char *tr_program; const char *input_filename; size_t input_size; char *input; ASSERT (argc == 3); tr_program = argv[1]; /* Read some text from a file. */ input_filename = argv[2]; input = read_file (input_filename, RF_BINARY, &input_size); ASSERT (input != NULL); /* Convert it to uppercase, line by line. */ { const char *argv[4]; struct locals l; int result; l.input = input; l.size = input_size; l.nwritten = 0; l.nread = 0; argv[0] = tr_program; argv[1] = "abcdefghijklmnopqrstuvwxyz"; argv[2] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; argv[3] = NULL; result = pipe_filter_ii_execute ("tr", tr_program, argv, false, true, prepare_write, done_write, prepare_read, done_read, &l); ASSERT (result == 0); ASSERT (l.nwritten == input_size); ASSERT (l.nread == input_size); } free (input); return 0; } ��������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-ii1.sh�����������������������������������������������0000775�0000000�0000000�00000001133�14110572173�0021653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Find a 'tr' program that supports character ranges in the POSIX syntax. # Solaris /usr/bin/tr does not. if test -f /usr/xpg6/bin/tr; then TR=/usr/xpg6/bin/tr else if test -f /usr/xpg4/bin/tr; then TR=/usr/xpg4/bin/tr else TR=tr fi fi # A small file. ${CHECKER} ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-ii1.sh" || exit 1 # A medium-sized file. ${CHECKER} ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-ii1.c" || exit 1 # A large file. ${CHECKER} ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-vasnprintf-posix.c" || exit 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-ii2-child.c������������������������������������������0000664�0000000�0000000�00000002516�14110572173�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-pipe-filter-ii2-main. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Paolo Bonzini <bonzini@gnu.org>, 2009. This 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 <stdio.h> #include <stdlib.h> #include <unistd.h> #include "binary-io.h" int main () { set_binary_mode (STDOUT_FILENO, O_BINARY); /* Repeatedly: Read two integers i and j, then output all integers in the range i..j, one per line. */ for (;;) { int i, j; if (scanf (" %d", &i) != 1) break; if (scanf (" %d", &j) != 1) break; if (j == -1) exit (i); while (i <= j) printf ("abcdefghijklmnopqrstuvwxyz%d\n", i++); } exit (0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-ii2-main.c�������������������������������������������0000664�0000000�0000000�00000007442�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test harness for pipe-filter-ii. Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Paolo Bonzini <bonzini@gnu.org>, 2009. This 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 "pipe-filter.h" #include <stdio.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <signal.h> #include "binary-io.h" #include "full-write.h" #include "macros.h" struct locals { const char *input; size_t size; size_t nwritten; size_t nread; char buf[5]; }; static const void * prepare_write (size_t *num_bytes_p, void *private_data) { struct locals *l = (struct locals *) private_data; if (l->nwritten < l->size) { *num_bytes_p = l->size - l->nwritten; return l->input + l->nwritten; } else return NULL; } static void done_write (void *data_written, size_t num_bytes_written, void *private_data) { struct locals *l = (struct locals *) private_data; l->nwritten += num_bytes_written; } static void * prepare_read (size_t *num_bytes_p, void *private_data) { struct locals *l = (struct locals *) private_data; *num_bytes_p = sizeof (l->buf); return l->buf; } /* Callback that ignores the data that has been read. */ static void ignore_done_read (void *data_read, size_t num_bytes_read, void *private_data) { } /* Callback that outputs the data that has been read. */ static void output_done_read (void *data_read, size_t num_bytes_read, void *private_data) { full_write (STDOUT_FILENO, data_read, num_bytes_read); } int main (int argc, char **argv) { const char *path[] = { NULL, NULL }; ASSERT (argc == 2); set_binary_mode (STDOUT_FILENO, O_BINARY); /* Test writing to a nonexistent program traps sooner or later. */ { struct locals l; int rc; l.input = ""; l.size = 1; l.nwritten = 0; l.nread = 0; path[0] = "/nonexistent/blah"; rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, true, false, prepare_write, done_write, prepare_read, ignore_done_read, &l); ASSERT (rc == 127 || rc == -1); printf ("Test 1 passed.\n"); fflush (stdout); } /* Test returning the exit status. */ { struct locals l; int rc; l.input = "1 -1"; l.size = strlen (l.input); l.nwritten = 0; l.nread = 0; path[0] = argv[1]; rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, false, false, prepare_write, done_write, prepare_read, ignore_done_read, &l); ASSERT (rc == 1); printf ("Test 2 passed.\n"); fflush (stdout); } /* Now test asynchronous I/O. */ { struct locals l; int rc; l.input = "1 50\n51\n100"; l.size = strlen (l.input); l.nwritten = 0; l.nread = 0; path[0] = argv[1]; rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, false, true, prepare_write, done_write, prepare_read, output_done_read, &l); ASSERT (rc == 0); printf ("Test 3 passed.\n"); fflush (stdout); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe-filter-ii2.sh�����������������������������������������������0000775�0000000�0000000�00000002156�14110572173�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # pipe-filter test driver. # # Copyright (C) 2009-2021 Free Software Foundation, Inc. # Written by Paolo Bonzini <bonzini@gnu.org>, 2009. # # This 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/>. */ ${CHECKER} ./test-pipe-filter-ii2-main${EXEEXT} ./test-pipe-filter-ii2-child${EXEEXT} | { set -e read a && test "$a" = "Test 1 passed." read a && test "$a" = "Test 2 passed." i=1 while test $i -le 100; do read a && test "$a" = "abcdefghijklmnopqrstuvwxyz$i" i=`expr $i + 1` done read a && test "$a" = "Test 3 passed." } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe.c�����������������������������������������������������������0000664�0000000�0000000�00000005243�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pipe. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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, 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (pipe, int, (int[2])); #include <fcntl.h> #include <stdbool.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is not inherited to child processes. */ static bool is_cloexec (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; ASSERT (GetHandleInformation (h, &flags)); return (flags & HANDLE_FLAG_INHERIT) == 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFD)) >= 0); return (flags & FD_CLOEXEC) != 0; #endif } /* Return true if FD is in non-blocking mode. */ static bool is_nonblocking (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* We don't use the non-blocking mode for sockets here. */ return 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFL)) >= 0); return (flags & O_NONBLOCK) != 0; #endif } int main () { int fd[2]; fd[0] = -1; fd[1] = -1; ASSERT (pipe (fd) >= 0); ASSERT (fd[0] >= 0); ASSERT (fd[1] >= 0); ASSERT (fd[0] != fd[1]); ASSERT (is_open (fd[0])); ASSERT (is_open (fd[1])); ASSERT (!is_cloexec (fd[0])); ASSERT (!is_cloexec (fd[1])); ASSERT (!is_nonblocking (fd[0])); ASSERT (!is_nonblocking (fd[1])); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pipe2.c����������������������������������������������������������0000664�0000000�0000000�00000007215�14110572173�0017606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pipe2. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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, 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (pipe2, int, (int[2], int)); #include <fcntl.h> #include <stdbool.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" #if GNULIB_NONBLOCKING # include "nonblocking.h" #endif /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is not inherited to child processes. */ static bool is_cloexec (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; ASSERT (GetHandleInformation (h, &flags)); return (flags & HANDLE_FLAG_INHERIT) == 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFD)) >= 0); return (flags & FD_CLOEXEC) != 0; #endif } #if ! GNULIB_NONBLOCKING static int get_nonblocking_flag (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ return 0; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif int flags; ASSERT ((flags = fcntl (fd, F_GETFL)) >= 0); return (flags & O_NONBLOCK) != 0; # endif } #endif int main () { int use_nonblocking; int use_cloexec; for (use_nonblocking = 0; use_nonblocking <= !!O_NONBLOCK; use_nonblocking++) for (use_cloexec = 0; use_cloexec <= !!O_CLOEXEC; use_cloexec++) { int o_flags; int fd[2]; o_flags = 0; if (use_nonblocking) o_flags |= O_NONBLOCK; if (use_cloexec) o_flags |= O_CLOEXEC; fd[0] = -1; fd[1] = -1; ASSERT (pipe2 (fd, o_flags) >= 0); ASSERT (fd[0] >= 0); ASSERT (fd[1] >= 0); ASSERT (fd[0] != fd[1]); ASSERT (is_open (fd[0])); ASSERT (is_open (fd[1])); if (use_cloexec) { ASSERT (is_cloexec (fd[0])); ASSERT (is_cloexec (fd[1])); } else { ASSERT (!is_cloexec (fd[0])); ASSERT (!is_cloexec (fd[1])); } if (use_nonblocking) { ASSERT (get_nonblocking_flag (fd[0]) == 1); ASSERT (get_nonblocking_flag (fd[1]) == 1); } else { ASSERT (get_nonblocking_flag (fd[0]) == 0); ASSERT (get_nonblocking_flag (fd[1]) == 0); } ASSERT (close (fd[0]) == 0); ASSERT (close (fd[1]) == 0); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-poll-h-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002006�14110572173�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <poll.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <poll.h> #include "signature.h" #if GNULIB_TEST_POLL SIGNATURE_CHECK (GNULIB_NAMESPACE::poll, int, (struct pollfd *, nfds_t, int)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-poll-h.c���������������������������������������������������������0000664�0000000�0000000�00000002103�14110572173�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <poll.h> substitute. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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, 2010. */ #include <config.h> #include <poll.h> /* Check that the nfds_t type is defined. */ nfds_t a; /* Check that the various POLL* macros are defined. */ int b = POLLIN | POLLPRI | POLLOUT | POLLERR | POLLHUP | POLLNVAL | POLLRDNORM | POLLRDBAND | POLLWRNORM | POLLWRBAND; int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-poll.c�����������������������������������������������������������0000664�0000000�0000000�00000020563�14110572173�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of poll() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Paolo Bonzini. */ #include <config.h> /* Specification. */ #include <poll.h> #include "signature.h" SIGNATURE_CHECK (poll, int, (struct pollfd[], nfds_t, int)); #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <stdlib.h> #include <stdbool.h> #include <sys/ioctl.h> #include <errno.h> #include "macros.h" #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #ifdef WINDOWS_NATIVE #include <io.h> #define pipe(x) _pipe(x, 256, O_BINARY) #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #ifdef HAVE_SYS_WAIT_H #include <sys/wait.h> #endif #define TEST_PORT 12345 /* Minimal testing infrastructure. */ static int failures; static void failed (const char *reason) { if (++failures > 1) printf (" "); printf ("failed (%s)\n", reason); } static int test (void (*fn) (void), const char *msg) { failures = 0; printf ("%s... ", msg); fflush (stdout); fn (); if (!failures) printf ("passed\n"); return failures; } /* Funny socket code. */ static int open_server_socket () { int s, x; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) { perror ("bind"); exit (77); } if (listen (s, 1) < 0) { perror ("listen"); exit (77); } return s; } static int connect_to_socket (int blocking) { int s; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (!blocking) { #ifdef WINDOWS_NATIVE unsigned long iMode = 1; ioctl (s, FIONBIO, (char *) &iMode); #elif defined F_GETFL int oldflags = fcntl (s, F_GETFL, NULL); if (!(oldflags & O_NONBLOCK)) fcntl (s, F_SETFL, oldflags | O_NONBLOCK); #endif } if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0 && (blocking || errno != EINPROGRESS)) { perror ("connect"); exit (77); } return s; } /* A slightly more convenient interface to poll(2). */ static int poll1 (int fd, int ev, int time) { struct pollfd pfd; int r; pfd.fd = fd; pfd.events = ev; pfd.revents = -1; r = poll (&pfd, 1, time); if (r < 0) return r; if (pfd.revents & ~(POLLHUP | POLLERR | POLLNVAL | ev)) failed ("invalid flag combination (unrequested events)"); return pfd.revents; } static int poll1_nowait (int fd, int ev) { return poll1 (fd, ev, 0); } static int poll1_wait (int fd, int ev) { return poll1 (fd, ev, -1); } /* Test poll(2) for TTYs. */ #ifdef INTERACTIVE static void test_tty (void) { if (poll1_nowait (0, POLLIN | POLLRDNORM) != 0) failed ("can read"); if (poll1_nowait (0, POLLOUT) == 0) failed ("cannot write"); if (poll1_wait (0, POLLIN | POLLRDNORM) == 0) failed ("return with infinite timeout"); getchar (); if (poll1_nowait (0, POLLIN | POLLRDNORM) != 0) failed ("can read after getc"); } #endif /* Test poll(2) for unconnected nonblocking sockets. */ static void test_connect_first (void) { int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; int c1, c2; if (poll1_nowait (s, POLLIN | POLLRDNORM | POLLRDBAND) != 0) failed ("can read, socket not connected"); c1 = connect_to_socket (false); if (poll1_wait (s, POLLIN | POLLRDNORM | POLLRDBAND) != (POLLIN | POLLRDNORM)) failed ("expecting POLLIN | POLLRDNORM on passive socket"); if (poll1_nowait (s, POLLIN | POLLRDBAND) != POLLIN) failed ("expecting POLLIN on passive socket"); if (poll1_nowait (s, POLLRDNORM | POLLRDBAND) != POLLRDNORM) failed ("expecting POLLRDNORM on passive socket"); addrlen = sizeof (ia); c2 = accept (s, (struct sockaddr *) &ia, &addrlen); close (s); close (c1); close (c2); } /* Test poll(2) for unconnected blocking sockets. */ static void test_accept_first (void) { #ifndef WINDOWS_NATIVE int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; char buf[3]; int c, pid; pid = fork (); if (pid < 0) return; if (pid == 0) { addrlen = sizeof (ia); c = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (c >= 0); close (s); ASSERT (write (c, "foo", 3) == 3); ASSERT (read (c, buf, 3) == 3); shutdown (c, SHUT_RD); close (c); exit (0); } else { close (s); c = connect_to_socket (true); ASSERT (c >= 0); if (poll1_nowait (c, POLLOUT | POLLWRNORM | POLLRDBAND) != (POLLOUT | POLLWRNORM)) failed ("cannot write after blocking connect"); ASSERT (write (c, "foo", 3) == 3); wait (&pid); if (poll1_wait (c, POLLIN) != POLLIN) failed ("cannot read data left in the socket by closed process"); ASSERT (read (c, buf, 3) == 3); ASSERT (write (c, "foo", 3) == 3); int revents = poll1_wait (c, POLLIN | POLLOUT); # ifdef __linux__ if ((revents & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); # else (void) revents; # endif close (c); } #endif } /* Common code for pipes and connected sockets. */ static void test_pair (int rd, int wd) { char buf[3]; if (poll1_wait (wd, POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM | POLLRDBAND) != (POLLOUT | POLLWRNORM)) failed ("expecting POLLOUT | POLLWRNORM before writing"); if (poll1_nowait (wd, POLLIN | POLLRDNORM | POLLOUT | POLLRDBAND) != POLLOUT) failed ("expecting POLLOUT before writing"); if (poll1_nowait (wd, POLLIN | POLLRDNORM | POLLWRNORM | POLLRDBAND) != POLLWRNORM) failed ("expecting POLLWRNORM before writing"); ASSERT (write (wd, "foo", 3) == 3); if (poll1_wait (rd, POLLIN | POLLRDNORM) != (POLLIN | POLLRDNORM)) failed ("expecting POLLIN | POLLRDNORM after writing"); if (poll1_nowait (rd, POLLIN) != POLLIN) failed ("expecting POLLIN after writing"); if (poll1_nowait (rd, POLLRDNORM) != POLLRDNORM) failed ("expecting POLLRDNORM after writing"); ASSERT (read (rd, buf, 3) == 3); } /* Test poll(2) on connected sockets. */ static void test_socket_pair (void) { struct sockaddr_in ia; socklen_t addrlen = sizeof (ia); int s = open_server_socket (); int c1 = connect_to_socket (false); int c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (s >= 0); ASSERT (c1 >= 0); ASSERT (c2 >= 0); close (s); test_pair (c1, c2); close (c1); ASSERT (write (c2, "foo", 3) == 3); int revents = poll1_nowait (c2, POLLIN | POLLOUT); #ifdef __linux__ if ((revents & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); #else (void) revents; #endif close (c2); } /* Test poll(2) on pipes. */ static void test_pipe (void) { int fd[2]; ASSERT (pipe (fd) >= 0); test_pair (fd[0], fd[1]); close (fd[0]); int revents = poll1_wait (fd[1], POLLIN | POLLOUT); #if !defined _AIX if ((revents & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); #else (void) revents; #endif close (fd[1]); } /* Do them all. */ int main () { int result; #ifdef INTERACTIVE printf ("Please press Enter\n"); test (test_tty, "TTY"); #endif result = test (test_connect_first, "Unconnected socket test"); result += test (test_socket_pair, "Connected sockets test"); result += test (test_accept_first, "General socket test with fork"); result += test (test_pipe, "Pipe test"); exit (result); } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-popen-safer.c����������������������������������������������������0000664�0000000�0000000�00000004320�14110572173�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include "stdio--.h" /* Helpers. */ #include <sys/wait.h> #include <unistd.h> /* This test intentionally closes 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. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; int main (int argc, char **argv) { FILE *fp; int status; /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (fp = popen ("exit 0", "r")); ASSERT (STDERR_FILENO < fileno (fp)); status = pclose (fp); ASSERT (WIFEXITED (status)); ASSERT (!WEXITSTATUS (status)); ASSERT (fclose (stdin) == 0); ASSERT (fp = popen ("exit 0", "r")); ASSERT (STDERR_FILENO < fileno (fp)); status = pclose (fp); ASSERT (WIFEXITED (status)); ASSERT (!WEXITSTATUS (status)); ASSERT (fclose (stdout) == 0); ASSERT (fp = popen ("exit 0", "r")); ASSERT (STDERR_FILENO < fileno (fp)); status = pclose (fp); ASSERT (WIFEXITED (status)); ASSERT (!WEXITSTATUS (status)); ASSERT (fclose (stderr) == 0); ASSERT (fp = popen ("exit 0", "r")); ASSERT (STDERR_FILENO < fileno (fp)); status = pclose (fp); ASSERT (WIFEXITED (status)); ASSERT (!WEXITSTATUS (status)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-popen-safer2.c���������������������������������������������������0000664�0000000�0000000�00000001570�14110572173�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include "stdio--.h" #include "test-popen.h" ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-popen.c����������������������������������������������������������0000664�0000000�0000000�00000001766�14110572173�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (popen, FILE *, (char const *, char const *)); SIGNATURE_CHECK (pclose, int, (FILE *)); #include "test-popen.h" ����������gnulib-20210822~d383792/tests/test-popen.h����������������������������������������������������������0000664�0000000�0000000�00000005203�14110572173�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* Include <config.h> and a form of <stdio.h> first. */ /* Helpers. */ #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <unistd.h> #include "macros.h" int main (int argc, char **argv) { size_t len; char *cmd; int i; /* Children - use the pipe. */ if (argc > 1) { if (*argv[1] == 'r') /* Parent is reading, so we write. */ ASSERT (putchar ('c') == 'c'); else /* Parent is writing, so we read. */ ASSERT (getchar () == 'p'); /* Test that parent can read non-zero status. */ return 42; } /* Parent - create read and write child, once under normal circumstances and once with stdin and stdout closed. */ len = strlen (argv[0]); cmd = malloc (len + 3); /* Adding " r" and NUL. */ ASSERT (cmd); /* We count on argv[0] not containing any shell metacharacters. */ strcpy (cmd, argv[0]); cmd[len] = ' '; cmd[len + 2] = '\0'; for (i = 0; i < 2; i++) { FILE *child; int status; if (i) { ASSERT (fclose (stdin) == 0); ASSERT (fclose (stdout) == 0); } cmd[len + 1] = 'r'; ASSERT (child = popen (cmd, "r")); ASSERT (fgetc (child) == 'c'); status = pclose (child); ASSERT (WIFEXITED (status)); ASSERT (WEXITSTATUS (status) == 42); if (i) { ASSERT (dup2 (STDIN_FILENO, STDIN_FILENO) == -1); ASSERT (dup2 (STDOUT_FILENO, STDOUT_FILENO) == -1); } cmd[len + 1] = 'w'; ASSERT (child = popen (cmd, "w")); ASSERT (fputc ('p', child) == 'p'); status = pclose (child); ASSERT (WIFEXITED (status)); ASSERT (WEXITSTATUS (status) == 42); if (i) { ASSERT (dup2 (STDIN_FILENO, STDIN_FILENO) == -1); ASSERT (dup2 (STDOUT_FILENO, STDOUT_FILENO) == -1); } } free (cmd); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_memalign.c�������������������������������������������������0000664�0000000�0000000�00000006432�14110572173�0021602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of allocating memory with given alignment. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { #if HAVE_POSIX_MEMALIGN static size_t sizes[] = { 13, 8, 17, 450, 320, 1, 99, 4, 15, 16, 2, 76, 37, 127, 2406, 641, 5781 }; void *aligned2_blocks[SIZEOF (sizes)]; void *aligned4_blocks[SIZEOF (sizes)]; void *aligned8_blocks[SIZEOF (sizes)]; void *aligned16_blocks[SIZEOF (sizes)]; void *aligned32_blocks[SIZEOF (sizes)]; void *aligned64_blocks[SIZEOF (sizes)]; size_t i; for (i = 0; i < SIZEOF (sizes); i++) { size_t size = sizes[i]; if (sizeof (void *) <= 2) { ASSERT (posix_memalign (&aligned2_blocks[i], 2, size) == 0); ASSERT (aligned2_blocks[i] != NULL); ASSERT (((uintptr_t) aligned2_blocks[i] % 2) == 0); memset (aligned2_blocks[i], 'u', size); } if (sizeof (void *) <= 4) { ASSERT (posix_memalign (&aligned4_blocks[i], 4, size) == 0); ASSERT (aligned4_blocks[i] != NULL); ASSERT (((uintptr_t) aligned4_blocks[i] % 4) == 0); memset (aligned4_blocks[i], 'v', size); } ASSERT (posix_memalign (&aligned8_blocks[i], 8, size) == 0); ASSERT (aligned8_blocks[i] != NULL); ASSERT (((uintptr_t) aligned8_blocks[i] % 8) == 0); memset (aligned8_blocks[i], 'w', size); ASSERT (posix_memalign (&aligned16_blocks[i], 16, size) == 0); ASSERT (aligned16_blocks[i] != NULL); ASSERT (((uintptr_t) aligned16_blocks[i] % 16) == 0); memset (aligned16_blocks[i], 'x', size); ASSERT (posix_memalign (&aligned32_blocks[i], 32, size) == 0); ASSERT (aligned32_blocks[i] != NULL); ASSERT (((uintptr_t) aligned32_blocks[i] % 32) == 0); memset (aligned32_blocks[i], 'y', size); ASSERT (posix_memalign (&aligned64_blocks[i], 64, size) == 0); ASSERT (aligned64_blocks[i] != NULL); ASSERT (((uintptr_t) aligned64_blocks[i] % 64) == 0); memset (aligned64_blocks[i], 'z', size); } for (i = 0; i < SIZEOF (sizes); i++) { if (sizeof (void *) <= 2) free (aligned2_blocks[i]); if (sizeof (void *) <= 4) free (aligned4_blocks[i]); free (aligned8_blocks[i]); free (aligned16_blocks[i]); free (aligned32_blocks[i]); free (aligned64_blocks[i]); } return 0; #else fputs ("Skipping test: function 'aligned_alloc' does not exist\n", stderr); return 77; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_openpt.c���������������������������������������������������0000664�0000000�0000000�00000003756�14110572173�0021324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_openpt function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Eric Blake <eblake@redhat.com>, 2011. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (posix_openpt, int, (int)); #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #if defined __sun || defined __hpux /* Solaris, HP-UX */ # include <stropts.h> #endif #include "macros.h" int main (void) { int master; int slave; char *name; /* Open the master of a pseudo-terminal pair. */ master = posix_openpt (O_RDWR | O_NOCTTY); if (master < 0 && errno == ENOSYS) { fputs ("skipping: platform lacks pty support\n", stderr); return 77; } ASSERT (0 <= master); name = ptsname (master); ASSERT (name); ASSERT (grantpt (master) == 0); ASSERT (unlockpt (master) == 0); slave = open (name, O_RDWR); ASSERT (0 <= slave); #if defined __sun || defined __hpux /* Solaris, HP-UX */ ASSERT (ioctl (slave, I_PUSH, "ptem") == 0); ASSERT (ioctl (slave, I_PUSH, "ldterm") == 0); # if defined __sun ASSERT (ioctl (slave, I_PUSH, "ttcompat") == 0); # endif #endif ASSERT (isatty (slave)); /* Close the master side before the slave side gets closed. This is necessary on Mac OS X 10.4.11. */ ASSERT (close (master) == 0); ASSERT (close (slave) == 0); return 0; } ������������������gnulib-20210822~d383792/tests/test-posix_spawn-chdir.c����������������������������������������������0000664�0000000�0000000�00000012415�14110572173�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with 'chdir' action. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <spawn.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "findprog.h" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } static void test (const char *pwd_prog) { char *argv[2] = { (char *) "pwd", NULL }; int ifd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int fd; FILE *fp; char line[80]; int line_len; int status; int exitstatus; if (pipe (ifd) < 0 || (ifd[0] = fd_safer (ifd[0])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); #ifdef SIGHUP sigaddset (&fatal_signal_set, SIGHUP); #endif #ifdef SIGPIPE sigaddset (&fatal_signal_set, SIGPIPE); #endif sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ifd[1], STDOUT_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) != 0 || (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0 || (err = posix_spawn_file_actions_addchdir (&actions, "/")) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, #if defined _WIN32 && !defined __CYGWIN__ 0 #else (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0 #endif ) || (err = posix_spawnp (&child, pwd_prog, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); errno = err; perror ("subprocess failed"); exit (1); } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ifd[1]); fd = ifd[0]; fp = fdopen (fd, "rb"); if (fp == NULL) { fprintf (stderr, "fdopen() failed\n"); exit (1); } line_len = fread (line, 1, 80, fp); if (line_len < 2) { fprintf (stderr, "could not read expected output\n"); exit (1); } if (!(line_len == 2 && memcmp (line, "/\n", 2) == 0)) #if defined _WIN32 && !defined __CYGWIN__ /* If the pwd program is Cygwin's pwd, its output in the root directory is "/cygdrive/N", where N is a lowercase letter. */ if (!(line_len > 11 && memcmp (line, "/cygdrive/", 10) == 0 && line[10] >= 'a' && line[10] <= 'z' && ((line_len == 12 && line[11] == '\n') || (line_len == 13 && line[11] == '\r' && line[12] == '\n')))) #endif { fprintf (stderr, "read output is not the expected output\n"); exit (1); } fclose (fp); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } } int main () { test ("pwd"); /* Verify that if a program is given as a relative file name with at least one slash, it is interpreted w.r.t. the current directory after chdir has been executed. */ { const char *abs_pwd_prog = find_in_path ("pwd"); if (abs_pwd_prog != NULL && abs_pwd_prog[0] == '/' && abs_pwd_prog[1] != '0' && abs_pwd_prog[1] != '/') test (&abs_pwd_prog[1]); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-dup2-stdin.c�����������������������������������������0000664�0000000�0000000�00000010175�14110572173�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function: writing to a subprocess. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-dup2-stdin.sh" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } int main () { char *argv[3] = { (char *) BOURNE_SHELL, (char *) CHILD_PROGRAM_FILENAME, NULL }; int ofd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int fd; FILE *fp; int written; int status; int exitstatus; if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); #ifdef SIGHUP sigaddset (&fatal_signal_set, SIGHUP); #endif #ifdef SIGPIPE sigaddset (&fatal_signal_set, SIGPIPE); #endif sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, #if defined _WIN32 && !defined __CYGWIN__ 0 #else (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0 #endif ) || (err = posix_spawnp (&child, BOURNE_SHELL, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); errno = err; perror ("subprocess failed"); exit (1); } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ofd[0]); fd = ofd[1]; fp = fdopen (fd, "w"); if (fp == NULL) { fprintf (stderr, "fdopen() failed\n"); exit (1); } written = fwrite ("Halle Potta\n", 1, 12, fp); if (written < 12) { fprintf (stderr, "could not write input\n"); exit (1); } fclose (fp); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-dup2-stdin.in.sh�������������������������������������0000664�0000000�0000000�00000000061�14110572173�0023715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh read line test "$line" = "Halle Potta" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-dup2-stdout.c����������������������������������������0000664�0000000�0000000�00000013102�14110572173�0023321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function: reading from a subprocess. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawnp, int, (pid_t *, char const *, posix_spawn_file_actions_t const *, posix_spawnattr_t const *, char *const[], char *const[])); SIGNATURE_CHECK (posix_spawnattr_init, int, (posix_spawnattr_t *)); SIGNATURE_CHECK (posix_spawnattr_destroy, int, (posix_spawnattr_t *)); SIGNATURE_CHECK (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *, sigset_t const *)); SIGNATURE_CHECK (posix_spawnattr_setflags, int, (posix_spawnattr_t *, short)); SIGNATURE_CHECK (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *)); SIGNATURE_CHECK (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *)); SIGNATURE_CHECK (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *, int)); SIGNATURE_CHECK (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *, int, char const *, int, mode_t)); SIGNATURE_CHECK (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *, int, int)); #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-dup2-stdout.sh" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } int main () { char *argv[3] = { (char *) BOURNE_SHELL, (char *) CHILD_PROGRAM_FILENAME, NULL }; int ifd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int fd; FILE *fp; char line[80]; int status; int exitstatus; if (pipe (ifd) < 0 || (ifd[0] = fd_safer (ifd[0])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); #ifdef SIGHUP sigaddset (&fatal_signal_set, SIGHUP); #endif #ifdef SIGPIPE sigaddset (&fatal_signal_set, SIGPIPE); #endif sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ifd[1], STDOUT_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) != 0 || (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, #if defined _WIN32 && !defined __CYGWIN__ 0 #else (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0 #endif ) || (err = posix_spawnp (&child, BOURNE_SHELL, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); errno = err; perror ("subprocess failed"); exit (1); } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ifd[1]); fd = ifd[0]; fp = fdopen (fd, "r"); if (fp == NULL) { fprintf (stderr, "fdopen() failed\n"); exit (1); } if (fread (line, 1, 80, fp) < 12) { fprintf (stderr, "could not read expected output\n"); exit (1); } if (memcmp (line, "Halle Potta", 11) != 0) { fprintf (stderr, "read output is not the expected output\n"); exit (1); } fclose (fp); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-dup2-stdout.in.sh������������������������������������0000664�0000000�0000000�00000000035�14110572173�0024117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh echo "Halle Potta" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-fchdir.c���������������������������������������������0000664�0000000�0000000�00000011641�14110572173�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with 'fchdir' action. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <spawn.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "findprog.h" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } static void test (const char *pwd_prog) { char *argv[2] = { (char *) "pwd", NULL }; int rootfd; int ifd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int fd; FILE *fp; char line[80]; int status; int exitstatus; rootfd = open ("/", O_RDONLY); if (rootfd < 0) { perror ("cannot open directory"); exit (1); } if (pipe (ifd) < 0 || (ifd[0] = fd_safer (ifd[0])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); #ifdef SIGHUP sigaddset (&fatal_signal_set, SIGHUP); #endif #ifdef SIGPIPE sigaddset (&fatal_signal_set, SIGPIPE); #endif sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ifd[1], STDOUT_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) != 0 || (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0 || (err = posix_spawn_file_actions_addfchdir (&actions, rootfd)) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, #if defined _WIN32 && !defined __CYGWIN__ 0 #else (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0 #endif ) || (err = posix_spawnp (&child, pwd_prog, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); errno = err; perror ("subprocess failed"); exit (1); } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ifd[1]); fd = ifd[0]; fp = fdopen (fd, "r"); if (fp == NULL) { fprintf (stderr, "fdopen() failed\n"); exit (1); } if (fread (line, 1, 80, fp) < 2) { fprintf (stderr, "could not read expected output\n"); exit (1); } if (memcmp (line, "/\n", 2) != 0) { fprintf (stderr, "read output is not the expected output\n"); exit (1); } fclose (fp); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } } int main () { test ("pwd"); /* Verify that if a program is given as a relative file name with at least one slash, it is interpreted w.r.t. the current directory after fchdir has been executed. */ { const char *abs_pwd_prog = find_in_path ("pwd"); if (abs_pwd_prog != NULL && abs_pwd_prog[0] == '/' && abs_pwd_prog[1] != '0' && abs_pwd_prog[1] != '/') test (&abs_pwd_prog[1]); } return 0; } �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-inherit0.c�������������������������������������������0000664�0000000�0000000�00000007367�14110572173�0022671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with an inherited file descriptor 0. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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>, 2020. */ /* Test whether passing a file descriptor open for reading, including the current file position, works. */ #include <config.h> #include <spawn.h> #include <errno.h> #include <signal.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-inherit0" #define DATA_FILENAME "test-posix_spawn-inh0-data.tmp" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle Potta", 1, 11, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 1; } /* Open the data file for reading. */ fp = freopen (DATA_FILENAME, "rb", stdin); if (fp == NULL) { perror ("cannot open data file"); return 1; } if (fflush (fp) || fseek (fp, 6, SEEK_SET)) /* needs gnulib module 'fflush' */ { perror ("cannot seek in data file"); return 1; } /* Test whether the child reads from fd 0 at the current file position. */ if ((err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, NULL, NULL, argv, environ)) != 0) { errno = err; perror ("subprocess failed"); return 1; } status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } /* Clean up data file. */ unlink (DATA_FILENAME); return 0; } static int child_main (void) { /* Read from STDIN_FILENO. */ char buf[1024]; int nread = fread (buf, 1, sizeof (buf), stdin); if (!(nread == 5 && memcmp (buf, "Potta", 5) == 0)) { fprintf (stderr, "child: read %d bytes, expected %d bytes\n", nread, 5); return 1; } return 0; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } return exitstatus; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-inherit1.c�������������������������������������������0000664�0000000�0000000�00000007521�14110572173�0022662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with an inherited file descriptor 1. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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>, 2020. */ /* Test whether passing a file descriptor open for writing, including the current file position, works. */ #include <config.h> #include <spawn.h> #include <errno.h> #include <signal.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-inherit1" #define DATA_FILENAME "test-posix_spawn-inh1-data.tmp" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = freopen (DATA_FILENAME, "wb", stdout); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle X", 1, 7, fp); if (fflush (fp) || fseek (fp, 6, SEEK_SET)) { perror ("cannot prepare data file"); return 1; } /* Test whether the child writes to fd 1 at the current file position. */ if ((err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, NULL, NULL, argv, environ)) != 0) { errno = err; perror ("subprocess failed"); return 1; } status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } /* Check the contents of the data file. */ fp = fopen (DATA_FILENAME, "rb"); if (fp == NULL) { perror ("cannot open data file"); return 1; } char buf[1024]; int nread = fread (buf, 1, sizeof (buf), fp); if (!(nread == 11 && memcmp (buf, "Halle Potta", 11) == 0)) { fprintf (stderr, "data file wrong: has %d bytes, expected %d bytes\n", nread, 11); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } /* Clean up data file. */ unlink (DATA_FILENAME); return 0; } static int child_main (void) { /* Write to STDOUT_FILENO. */ fwrite ("Potta", 1, 5, stdout); /* No 'fflush (stdout);' is needed. It is implicit when the child process exits. */ return 0; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } return exitstatus; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-open1.c����������������������������������������������0000664�0000000�0000000�00000010710�14110572173�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with 'open' action. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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. */ /* Test whether posix_spawn_file_actions_addopen supports filename arguments that contain special characters such as '*'. */ #include <config.h> #include <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn, int, (pid_t *, char const *, posix_spawn_file_actions_t const *, posix_spawnattr_t const *, char *const[], char *const[])); #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-open1" #define DATA_FILENAME "t!#$%&'()*+,-;=?@[\\]^_`{|}~.tmp" /* On Windows (including Cygwin), '*' '?' '\\' '|' cannot be used in file names. */ #if defined _WIN32 || defined __CYGWIN__ # undef DATA_FILENAME # define DATA_FILENAME "t!#$%&'()+,-;=@[]^_`{}~.tmp" #endif static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; posix_spawn_file_actions_t actions; bool actions_allocated; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle Potta", 1, 11, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 1; } /* Avoid reading from our stdin, as it could block. */ if (freopen ("/dev/null", "rb", stdin) == NULL) { perror ("cannot redirect stdin"); return 1; } /* Test whether posix_spawn_file_actions_addopen with this file name actually works, by spawning a child that reads from this file. */ actions_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); errno = err; perror ("subprocess failed"); return 1; } posix_spawn_file_actions_destroy (&actions); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } return 0; } static int child_main (void) { char buf[1024]; /* See if reading from STDIN_FILENO yields the expected contents. */ if (fread (buf, 1, sizeof (buf), stdin) == 11 && memcmp (buf, "Halle Potta", 11) == 0) return 0; else return 2; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } unlink (DATA_FILENAME); return exitstatus; } ��������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-open2.c����������������������������������������������0000664�0000000�0000000�00000010331�14110572173�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function with 'open' action and O_APPEND flag. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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>, 2020. */ /* Test whether posix_spawn_file_actions_addopen supports the O_APPEND flag. */ #include <config.h> #include <spawn.h> #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #define CHILD_PROGRAM_FILENAME "test-posix_spawn-open2" #define DATA_FILENAME "test-posix_spawn-open2-data.tmp" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; posix_spawn_file_actions_t actions; bool actions_allocated; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle ", 1, 6, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 1; } /* Test whether posix_spawn_file_actions_addopen with O_APPEND flag causes the child to append to this file. */ actions_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, DATA_FILENAME, O_RDWR | O_APPEND, 0600)) != 0 || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); errno = err; perror ("subprocess failed"); return 1; } posix_spawn_file_actions_destroy (&actions); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } /* Check the contents of the data file. */ fp = fopen (DATA_FILENAME, "rb"); if (fp == NULL) { perror ("cannot open data file"); return 1; } char buf[1024]; int nread = fread (buf, 1, sizeof (buf), fp); if (!(nread == 11 && memcmp (buf, "Halle Potta", 11) == 0)) { fprintf (stderr, "data file wrong: has %d bytes, expected %d bytes\n", nread, 11); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } /* Clean up data file. */ unlink (DATA_FILENAME); return 0; } static int child_main (void) { /* Write to STDOUT_FILENO. */ fwrite ("Potta", 1, 5, stdout); /* No 'fflush (stdout);' is needed. It is implicit when the child process exits. */ return 0; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } return exitstatus; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn-script.c���������������������������������������������0000664�0000000�0000000�00000011117�14110572173�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 <spawn.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "macros.h" #define DATA_FILENAME "test-posix_spawn-script.tmp" int main () { unlink (DATA_FILENAME); /* Check an invocation of an executable script. This should only be supported if the script has a '#!' marker; otherwise it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>. POSIX says that the execlp() and execvp() functions support executing shell scripts <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>, but this is considered an antiquated feature. */ pid_t child; posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); ASSERT (posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, DATA_FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0600) == 0); { size_t i; for (i = 0; i < 2; i++) { const char *prog_path = (i == 0 ? SRCDIR "executable-script" : SRCDIR "executable-script.sh"); const char *prog_argv[2] = { prog_path, NULL }; int err = posix_spawn (&child, prog_path, &actions, NULL, (char **) prog_argv, environ); if (err != ENOEXEC) { if (err != 0) { errno = err; perror ("posix_spawn"); return 1; } /* Wait for child. */ int status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } int exitstatus = WEXITSTATUS (status); if (exitstatus != 127) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } } } } #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, scripts - even with '#!' marker - are not executable. Only .bat and .cmd files are. */ fprintf (stderr, "Skipping test: scripts are not executable on this platform.\n"); return 77; #else { const char *prog_path = SRCDIR "executable-shell-script"; const char *prog_argv[2] = { prog_path, NULL }; int err = posix_spawn (&child, prog_path, &actions, NULL, (char **) prog_argv, environ); if (err != 0) { errno = err; perror ("posix_spawn"); return 1; } posix_spawn_file_actions_destroy (&actions); /* Wait for child. */ int status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } int exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } /* Check the contents of the data file. */ FILE *fp = fopen (DATA_FILENAME, "rb"); if (fp == NULL) { perror ("cannot open data file"); return 1; } char buf[1024]; int nread = fread (buf, 1, sizeof (buf), fp); if (!(nread == 11 && memcmp (buf, "Halle Potta", 11) == 0)) { fprintf (stderr, "data file wrong: has %d bytes, expected %d bytes\n", nread, 11); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } } #endif /* Clean up data file. */ unlink (DATA_FILENAME); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn_file_actions_addchdir.c������������������������������0000664�0000000�0000000�00000002415�14110572173�0025477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addchdir() function. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *, const char *)); #include <errno.h> #include <fcntl.h> #include <limits.h> #include <unistd.h> #include "macros.h" int main (void) { posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); ASSERT (posix_spawn_file_actions_addchdir (&actions, "/") == 0); posix_spawn_file_actions_destroy (&actions); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn_file_actions_addclose.c������������������������������0000664�0000000�0000000�00000003546�14110572173�0025521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addclose() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *, int)); #include <errno.h> #include <limits.h> #include <unistd.h> #include "macros.h" /* Return a file descriptor that is too big to use. Prefer the smallest such fd, except use OPEN_MAX if it is defined and is greater than getdtablesize (), as that's how OS X works. */ static int big_fd (void) { int fd = getdtablesize (); #ifdef OPEN_MAX if (fd < OPEN_MAX) fd = OPEN_MAX; #endif return fd; } int main (void) { posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (posix_spawn_file_actions_addclose (&actions, -1) == EBADF); } /* This behaviour is not mandated by POSIX, but happens to pass on all platforms. */ { int bad_fd = big_fd (); errno = 0; ASSERT (posix_spawn_file_actions_addclose (&actions, bad_fd) == EBADF); } posix_spawn_file_actions_destroy (&actions); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn_file_actions_adddup2.c�������������������������������0000664�0000000�0000000�00000003724�14110572173�0025264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_adddup2() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *, int, int)); #include <errno.h> #include <limits.h> #include <unistd.h> #include "macros.h" /* Return a file descriptor that is too big to use. Prefer the smallest such fd, except use OPEN_MAX if it is defined and is greater than getdtablesize (), as that's how OS X works. */ static int big_fd (void) { int fd = getdtablesize (); #ifdef OPEN_MAX if (fd < OPEN_MAX) fd = OPEN_MAX; #endif return fd; } int main (void) { int bad_fd = big_fd (); posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, -1, 2) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, bad_fd, 2) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, 2, -1) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, 2, bad_fd) == EBADF); } posix_spawn_file_actions_destroy (&actions); return 0; } ��������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn_file_actions_addfchdir.c�����������������������������0000664�0000000�0000000�00000002405�14110572173�0025644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addfchdir() function. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *, int)); #include <errno.h> #include <fcntl.h> #include <limits.h> #include <unistd.h> #include "macros.h" int main (void) { posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); ASSERT (posix_spawn_file_actions_addfchdir (&actions, 3) == 0); posix_spawn_file_actions_destroy (&actions); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posix_spawn_file_actions_addopen.c�������������������������������0000664�0000000�0000000�00000003741�14110572173�0025352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addopen() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <spawn.h> #include "signature.h" SIGNATURE_CHECK (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *, int, const char *, int, mode_t)); #include <errno.h> #include <fcntl.h> #include <limits.h> #include <unistd.h> #include "macros.h" /* Return a file descriptor that is too big to use. Prefer the smallest such fd, except use OPEN_MAX if it is defined and is greater than getdtablesize (), as that's how OS X works. */ static int big_fd (void) { int fd = getdtablesize (); #ifdef OPEN_MAX if (fd < OPEN_MAX) fd = OPEN_MAX; #endif return fd; } int main (void) { posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (posix_spawn_file_actions_addopen (&actions, -1, "foo", 0, O_RDONLY) == EBADF); } { int bad_fd = big_fd (); errno = 0; ASSERT (posix_spawn_file_actions_addopen (&actions, bad_fd, "foo", 0, O_RDONLY) == EBADF); } posix_spawn_file_actions_destroy (&actions); return 0; } �������������������������������gnulib-20210822~d383792/tests/test-posix_spawnp-script.c��������������������������������������������0000664�0000000�0000000�00000011124�14110572173�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawnp() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 <spawn.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "macros.h" #define DATA_FILENAME "test-posix_spawn-script.tmp" int main () { unlink (DATA_FILENAME); /* Check an invocation of an executable script. This should only be supported if the script has a '#!' marker; otherwise it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>. POSIX says that the execlp() and execvp() functions support executing shell scripts <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>, but this is considered an antiquated feature. */ pid_t child; posix_spawn_file_actions_t actions; ASSERT (posix_spawn_file_actions_init (&actions) == 0); ASSERT (posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, DATA_FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0600) == 0); { size_t i; for (i = 0; i < 2; i++) { const char *prog_path = (i == 0 ? SRCDIR "executable-script" : SRCDIR "executable-script.sh"); const char *prog_argv[2] = { prog_path, NULL }; int err = posix_spawnp (&child, prog_path, &actions, NULL, (char **) prog_argv, environ); if (err != ENOEXEC) { if (err != 0) { errno = err; perror ("posix_spawn"); return 1; } /* Wait for child. */ int status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } int exitstatus = WEXITSTATUS (status); if (exitstatus != 127) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } } } } #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, scripts - even with '#!' marker - are not executable. Only .bat and .cmd files are. */ fprintf (stderr, "Skipping test: scripts are not executable on this platform.\n"); return 77; #else { const char *prog_path = SRCDIR "executable-shell-script"; const char *prog_argv[2] = { prog_path, NULL }; int err = posix_spawnp (&child, prog_path, &actions, NULL, (char **) prog_argv, environ); if (err != 0) { errno = err; perror ("posix_spawn"); return 1; } posix_spawn_file_actions_destroy (&actions); /* Wait for child. */ int status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 1; } int exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 1; } /* Check the contents of the data file. */ FILE *fp = fopen (DATA_FILENAME, "rb"); if (fp == NULL) { perror ("cannot open data file"); return 1; } char buf[1024]; int nread = fread (buf, 1, sizeof (buf), fp); if (!(nread == 11 && memcmp (buf, "Halle Potta", 11) == 0)) { fprintf (stderr, "data file wrong: has %d bytes, expected %d bytes\n", nread, 11); return 1; } if (fclose (fp)) { perror ("cannot close data file"); return 1; } } #endif /* Clean up data file. */ unlink (DATA_FILENAME); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-posixtm.c��������������������������������������������������������0000664�0000000�0000000�00000016205�14110572173�0020271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that posixtime works as required. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "posixtm.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <time.h> #include "intprops.h" #include "macros.h" struct posixtm_test { char const *in; unsigned int syntax_bits; bool valid; int_least64_t t_expected; }; /* Test mainly with syntax_bits == LY. */ enum { LY = PDS_CENTURY | PDS_SECONDS }; static struct posixtm_test const T[] = { /* no year specified; cross-check via another posixtime call */ { "12131415.16", LY, 1, 0}, /* ??? Dec 13 14:15:16 ???? */ { "12131415", LY, 1, 0}, /* ??? Dec 13 14:15:00 ???? */ #if !((defined __APPLE__ && defined __MACH__) || defined __sun) /* These two tests fail on 64-bit Mac OS X 10.5 and on 64-bit Solaris up through at least Solaris 11.3, which is off by one day for timestamps before 0001-01-01 00:00:00 UTC. */ { "000001010000.00", LY, 1, - INT64_C (62167219200)},/* Sat Jan 1 00:00:00 0 */ { "000012312359.59", LY, 1, - INT64_C (62135596801)},/* Fri Dec 31 23:59:59 0 */ #endif { "000101010000.00", LY, 1, - INT64_C (62135596800)},/* Sat Jan 1 00:00:00 1 */ { "190112132045.51", LY, 1, - INT64_C (2147483649)},/* Fri Dec 13 20:45:51 1901 */ { "190112132045.52", LY, 1, - INT64_C (2147483648)},/* Fri Dec 13 20:45:52 1901 */ { "190112132045.53", LY, 1, -2147483647}, /* Fri Dec 13 20:45:53 1901 */ { "190112132046.52", LY, 1, -2147483588}, /* Fri Dec 13 20:46:52 1901 */ { "190112132145.52", LY, 1, -2147480048}, /* Fri Dec 13 21:45:52 1901 */ { "190112142045.52", LY, 1, -2147397248}, /* Sat Dec 14 20:45:52 1901 */ { "190201132045.52", LY, 1, -2144805248}, /* Mon Jan 13 20:45:52 1902 */ { "196912312359.59", LY, 1, -1}, /* Wed Dec 31 23:59:59 1969 */ { "197001010000.00", LY, 1, 0}, /* Thu Jan 1 00:00:00 1970 */ { "197001010000.01", LY, 1, 1}, /* Thu Jan 1 00:00:01 1970 */ { "197001010001.00", LY, 1, 60}, /* Thu Jan 1 00:01:00 1970 */ { "197001010000.60", LY, 1, 60}, /* Thu Jan 1 00:01:00 1970 */ { "197001010100.00", LY, 1, 3600}, /* Thu Jan 1 01:00:00 1970 */ { "197001020000.00", LY, 1, 86400}, /* Fri Jan 2 00:00:00 1970 */ { "197002010000.00", LY, 1, 2678400}, /* Sun Feb 1 00:00:00 1970 */ { "197101010000.00", LY, 1, 31536000}, /* Fri Jan 1 00:00:00 1971 */ { "197001000000.00", LY, 0, 0}, /* -- */ { "197000010000.00", LY, 0, 0}, /* -- */ { "197001010060.00", LY, 0, 0}, /* -- */ { "197001012400.00", LY, 0, 0}, /* -- */ { "197001320000.00", LY, 0, 0}, /* -- */ { "197013010000.00", LY, 0, 0}, /* -- */ { "203801190314.06", LY, 1, 2147483646}, /* Tue Jan 19 03:14:06 2038 */ { "203801190314.07", LY, 1, 2147483647}, /* Tue Jan 19 03:14:07 2038 */ { "203801190314.08", LY, 1, INT64_C ( 2147483648)},/* Tue Jan 19 03:14:08 2038 */ { "999912312359.59", LY, 1, INT64_C (253402300799)},/* Fri Dec 31 23:59:59 9999 */ { "1112131415", LY, 1, 1323785700}, /* Tue Dec 13 14:15:00 2011 */ { "1112131415.16", LY, 1, 1323785716}, /* Tue Dec 13 14:15:16 2011 */ { "201112131415.16", LY, 1, 1323785716}, /* Tue Dec 13 14:15:16 2011 */ { "191112131415.16", LY, 1, -1831974284}, /* Wed Dec 13 14:15:16 1911 */ { "203712131415.16", LY, 1, 2144326516}, /* Sun Dec 13 14:15:16 2037 */ { "3712131415.16", LY, 1, 2144326516}, /* Sun Dec 13 14:15:16 2037 */ { "6812131415.16", LY, 1, INT64_C ( 3122633716)},/* Thu Dec 13 14:15:16 2068 */ { "6912131415.16", LY, 1, -1590284}, /* Sat Dec 13 14:15:16 1969 */ { "7012131415.16", LY, 1, 29945716}, /* Sun Dec 13 14:15:16 1970 */ { "1213141599", PDS_TRAILING_YEAR, 1, 945094500}, /* Mon Dec 13 14:15:00 1999 */ { "1213141500", PDS_TRAILING_YEAR, 1, 976716900}, /* Wed Dec 13 14:15:00 2000 */ { NULL, 0, 0, 0} }; int main (void) { unsigned int i; int fail = 0; char curr_year_str[30]; struct tm *tm; time_t t_now; int err; size_t n_bytes; /* The above test data requires Universal Time, e.g., TZ="UTC0". */ err = setenv ("TZ", "UTC0", 1); ASSERT (err == 0); t_now = time (NULL); ASSERT (t_now != (time_t) -1); tm = localtime (&t_now); ASSERT (tm); n_bytes = strftime (curr_year_str, sizeof curr_year_str, "%Y", tm); ASSERT (0 < n_bytes); for (i = 0; T[i].in; i++) { time_t t_out; time_t t_exp; bool ok; /* Some tests assume that time_t is signed. If it is unsigned and the result is negative, skip the test. */ if (T[i].t_expected < 0 && ! TYPE_SIGNED (time_t)) { printf ("skipping %s: result is negative, " "but your time_t is unsigned\n", T[i].in); continue; } if (! (TYPE_MINIMUM (time_t) <= T[i].t_expected && T[i].t_expected <= TYPE_MAXIMUM (time_t))) { printf ("skipping %s: result is out of range of your time_t\n", T[i].in); continue; } t_exp = T[i].t_expected; /* If an input string does not specify the year number, determine the expected output by calling posixtime with an otherwise equivalent string that starts with the current year. */ if (8 <= strlen (T[i].in) && (T[i].in[8] == '.' || T[i].in[8] == '\0')) { char tmp_buf[20]; stpcpy (stpcpy (tmp_buf, curr_year_str), T[i].in); ASSERT (posixtime (&t_exp, tmp_buf, T[i].syntax_bits)); } ok = posixtime (&t_out, T[i].in, T[i].syntax_bits); if (ok != !!T[i].valid) { printf ("%s return value mismatch: got %d, expected %d\n", T[i].in, !!ok, T[i].valid); fail = 1; continue; } if (!ok) continue; if (t_out != t_exp) { printf ("%s mismatch (-: actual; +:expected)\n-%12ld\n+%12ld\n", T[i].in, (long) t_out, (long) t_exp); fail = 1; } } return fail; } /* Local Variables: indent-tabs-mode: nil End: */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pow.c������������������������������������������������������������0000664�0000000�0000000�00000002143�14110572173�0017367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pow() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (pow, double, (double, double)); #include "macros.h" volatile double x; volatile double y; double z; int main () { /* A particular value. */ x = 243.0; y = 1.2; z = pow (x, y); ASSERT (z >= 728.9999999 && z <= 729.0000001); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-powf.c�����������������������������������������������������������0000664�0000000�0000000�00000002141�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of powf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (powf, float, (float, float)); #include "macros.h" volatile float x; volatile float y; float z; int main () { /* A particular value. */ x = 243.0f; y = 1.2f; z = powf (x, y); ASSERT (z >= 728.999f && z <= 729.001f); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pread.c����������������������������������������������������������0000664�0000000�0000000�00000004670�14110572173�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the pread function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (pread, ssize_t, (int, void *, size_t, off_t)); #include <sys/types.h> #include <fcntl.h> #include <errno.h> #include "macros.h" #define N (sizeof buf - 1) int main (void) { char const *file = "in"; int fd; char buf[] = "0123456789"; off_t pos; ASSERT (file); fd = open (file, O_CREAT | O_WRONLY, 0600); ASSERT (0 <= fd); ASSERT (write (fd, buf, N) == N); ASSERT (close (fd) == 0); fd = open (file, O_RDONLY); ASSERT (0 <= fd); for (pos = 0; pos < 3; pos++) { size_t i; off_t init_pos = lseek (fd, pos, SEEK_SET); ASSERT (init_pos == pos); for (i = 0; i < N; i++) { char byte_buf; ASSERT (pread (fd, &byte_buf, 1, i) == 1); ASSERT (byte_buf == buf[i]); ASSERT (lseek (fd, 0, SEEK_CUR) == init_pos); } } { /* Invalid offset must evoke failure with EINVAL. */ char byte; ASSERT (pread (fd, &byte, 1, (off_t) -1) == -1); ASSERT (errno == EINVAL || errno == EFBIG /* seen on OpenBSD 4.9 */ ); } ASSERT (close (fd) == 0); { char byte; /* Trying to operate on a pipe must evoke failure with ESPIPE. This assumes that stdin is a pipe, and hence not seekable. */ ASSERT (pread (STDIN_FILENO, &byte, 1, 1) == -1); ASSERT (errno == ESPIPE); } /* Test behaviour for invalid file descriptors. */ { char byte; errno = 0; ASSERT (pread (-1, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } { char byte; close (99); errno = 0; ASSERT (pread (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } ������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pread.sh���������������������������������������������������������0000775�0000000�0000000�00000000153�14110572173�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 : | ${CHECKER} test-pread || fail=1 Exit $fail ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-frexp.c���������������������������������������������������0000664�0000000�0000000�00000007056�14110572173�0021216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "printf-frexp.h" #include <float.h> #include "macros.h" static double my_ldexp (double x, int d) { for (; d > 0; d--) x *= 2.0; for (; d < 0; d++) x *= 0.5; return x; } int main () { int i; /* The use of 'volatile' guarantees that excess precision bits are dropped when dealing with denormalized numbers. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile double x; for (i = 1, x = 1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.0); } for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.0); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == DBL_MIN_EXP - 1); ASSERT (mantissa == my_ldexp (1.0, i - DBL_MIN_EXP)); } for (i = 1, x = 1.01; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.01); } for (i = 1, x = 1.01; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.01); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == DBL_MIN_EXP - 1); ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); ASSERT (mantissa == my_ldexp (x, - exp)); } for (i = 1, x = 1.73205; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.73205); } for (i = 1, x = 1.73205; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.73205); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = printf_frexp (x, &exp); ASSERT (exp == DBL_MIN_EXP - 1); ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); ASSERT (mantissa == my_ldexp (x, - exp)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-frexpl.c��������������������������������������������������0000664�0000000�0000000�00000010106�14110572173�0021360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a 'long double' into fraction and mantissa. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "printf-frexpl.h" #include <float.h> #include "fpucw.h" #include "macros.h" /* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -964. Similarly, on PowerPC machines, LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' is -968. For exponents below that, the precision may be truncated to the precision used for 'double'. */ #ifdef __sgi # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) # define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP #elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ # define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) # define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP #else # define MIN_NORMAL_EXP LDBL_MIN_EXP # define MIN_SUBNORMAL_EXP (LDBL_MIN_EXP - 100) #endif static long double my_ldexp (long double x, int d) { for (; d > 0; d--) x *= 2.0L; for (; d < 0; d++) x *= 0.5L; return x; } int main () { int i; long double x; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.0L); } for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.0L); } for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == LDBL_MIN_EXP - 1); ASSERT (mantissa == my_ldexp (1.0L, i - LDBL_MIN_EXP)); } for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.01L); } for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.01L); } for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == LDBL_MIN_EXP - 1); ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); ASSERT (mantissa == my_ldexp (x, - exp)); } for (i = 1, x = 1.73205L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.73205L); } for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == i - 1); ASSERT (mantissa == 1.73205L); } for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = printf_frexpl (x, &exp); ASSERT (exp == LDBL_MIN_EXP - 1); ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); ASSERT (mantissa == my_ldexp (x, - exp)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-posix.c���������������������������������������������������0000664�0000000�0000000�00000003262�14110572173�0021227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible printf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (printf, int, (char const *, ...)); #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-printf-posix.h" int main (int argc, char *argv[]) { test_function (printf); return 0; } /* Test whether __attribute__ (__format__ (...)) still works. */ #if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__) && !defined __STRICT_ANSI__ extern int func1 (char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern int func2 (char *, size_t, const char *, ...) __attribute__ ((__format__ (printf, 3, 4))); extern int func3 (char *, size_t, const char *, ...) __attribute__ ((format (__printf__, 3, 4))); extern int func4 (char *, size_t, const char *, ...) __attribute__ ((format (printf, 3, 4))); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-posix.h���������������������������������������������������0000664�0000000�0000000�00000010662�14110572173�0021236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "infinity.h" static void test_function (int (*my_printf) (const char *, ...)) { /* Here we don't test output that may be platform dependent. The bulk of the tests is done as part of the 'vasnprintf-posix' module. */ /* Test support of size specifiers as in C99. */ my_printf ("%ju %d\n", (uintmax_t) 12345671, 33, 44, 55); my_printf ("%zu %d\n", (size_t) 12345672, 33, 44, 55); my_printf ("%tu %d\n", (ptrdiff_t) 12345673, 33, 44, 55); /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ /* Positive zero. */ my_printf ("%a %d\n", 0.0, 33, 44, 55); /* Positive infinity. */ my_printf ("%a %d\n", Infinityd (), 33, 44, 55); /* Negative infinity. */ my_printf ("%a %d\n", - Infinityd (), 33, 44, 55); /* FLAG_ZERO with infinite number. */ /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ my_printf ("%010a %d\n", Infinityd (), 33, 44, 55); /* Test the support of the %f format directive. */ /* A positive number. */ my_printf ("%f %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_printf ("%f %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_printf ("%f %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_printf ("%f %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_printf ("%015f %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_printf ("%.f %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_printf ("%.2f %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_printf ("%.2f %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_printf ("%Lf %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_printf ("%Lf %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_printf ("%Lf %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_printf ("%Lf %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_printf ("%015Lf %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_printf ("%.Lf %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_printf ("%.2Lf %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_printf ("%.2Lf %d\n", 999.996L, 33, 44, 55); /* Test the support of the %F format directive. */ /* A positive number. */ my_printf ("%F %d\n", 12.75, 33, 44, 55); /* A larger positive number. */ my_printf ("%F %d\n", 1234567.0, 33, 44, 55); /* A negative number. */ my_printf ("%F %d\n", -0.03125, 33, 44, 55); /* Positive zero. */ my_printf ("%F %d\n", 0.0, 33, 44, 55); /* FLAG_ZERO. */ my_printf ("%015F %d\n", 1234.0, 33, 44, 55); /* Precision. */ my_printf ("%.F %d\n", 1234.0, 33, 44, 55); /* Precision with no rounding. */ my_printf ("%.2F %d\n", 999.95, 33, 44, 55); /* Precision with rounding. */ my_printf ("%.2F %d\n", 999.996, 33, 44, 55); /* A positive number. */ my_printf ("%LF %d\n", 12.75L, 33, 44, 55); /* A larger positive number. */ my_printf ("%LF %d\n", 1234567.0L, 33, 44, 55); /* A negative number. */ my_printf ("%LF %d\n", -0.03125L, 33, 44, 55); /* Positive zero. */ my_printf ("%LF %d\n", 0.0L, 33, 44, 55); /* FLAG_ZERO. */ my_printf ("%015LF %d\n", 1234.0L, 33, 44, 55); /* Precision. */ my_printf ("%.LF %d\n", 1234.0L, 33, 44, 55); /* Precision with no rounding. */ my_printf ("%.2LF %d\n", 999.95L, 33, 44, 55); /* Precision with rounding. */ my_printf ("%.2LF %d\n", 999.996L, 33, 44, 55); /* Test the support of the POSIX/XSI format strings with positions. */ my_printf ("%2$d %1$d\n", 33, 55); } ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-posix.output����������������������������������������������0000664�0000000�0000000�00000000761�14110572173�0022346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������12345671 33 12345672 33 12345673 33 0x0p+0 33 inf 33 -inf 33 inf 33 12.750000 33 1234567.000000 33 -0.031250 33 0.000000 33 00001234.000000 33 1234 33 999.95 33 1000.00 33 12.750000 33 1234567.000000 33 -0.031250 33 0.000000 33 00001234.000000 33 1234 33 999.95 33 1000.00 33 12.750000 33 1234567.000000 33 -0.031250 33 0.000000 33 00001234.000000 33 1234 33 999.95 33 1000.00 33 12.750000 33 1234567.000000 33 -0.031250 33 0.000000 33 00001234.000000 33 1234 33 999.95 33 1000.00 33 55 33 ���������������gnulib-20210822~d383792/tests/test-printf-posix.sh��������������������������������������������������0000775�0000000�0000000�00000000575�14110572173�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-printf-posix.tmp t-printf-posix.out" ${CHECKER} ./test-printf-posix${EXEEXT} > t-printf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-printf-posix.tmp > t-printf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-printf-posix.out result=$? rm -fr $tmpfiles exit $result �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-posix2.c��������������������������������������������������0000664�0000000�0000000�00000006514�14110572173�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible printf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> /* This test assumes getrlimit() and setrlimit(). With "gcc -fcheck-pointer-bounds -mmpx -static", it produces an endless loop of "Saw a #BR!" messages. */ #if HAVE_GETRLIMIT && HAVE_SETRLIMIT && !defined __CHKP__ #include <stdlib.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <string.h> #include <errno.h> int main (int argc, char *argv[]) { struct rlimit limit; int arg; int ret; /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 10000000) limit.rlim_max = 10000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif arg = atoi (argv[1]); switch (arg) { case 0: { void *memory = malloc (10000000); if (memory == NULL) return 1; memset (memory, 17, 10000000); return 78; } case 1: ret = printf ("%.10000000f", 1.0); return !(ret == 10000002 || (ret < 0 && errno == ENOMEM)); case 2: ret = printf ("%.10000000f", -1.0); return !(ret == 10000003 || (ret < 0 && errno == ENOMEM)); case 3: ret = printf ("%.10000000e", 1.0); return !(ret >= 10000006 || (ret < 0 && errno == ENOMEM)); case 4: ret = printf ("%.10000000d", 1); return !(ret == 10000000 || (ret < 0 && errno == ENOMEM)); case 5: ret = printf ("%.10000000d", -1); return !(ret == 10000001 || (ret < 0 && errno == ENOMEM)); case 6: ret = printf ("%.10000000u", 1); return !(ret == 10000000 || (ret < 0 && errno == ENOMEM)); } return 0; } #else int main (int argc, char *argv[]) { return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-printf-posix2.sh�������������������������������������������������0000775�0000000�0000000�00000001254�14110572173�0021503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test out-of-memory handling. (${CHECKER} ./test-printf-posix2${EXEEXT} 0 result=$? if test $result != 77 && test $result != 78; then result=1; fi exit $result ) 2>/dev/null malloc_result=$? if test $malloc_result = 77; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi for arg in 1 2 3 4 5 6 do ${CHECKER} ./test-printf-posix2${EXEEXT} $arg > /dev/null result=$? if test $result = 77; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi if test $result != 0; then exit 1 fi done if test $malloc_result = 78; then echo "Skipping test: getrlimit and setrlimit don't work" exit 77 fi exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-priv-set.c�������������������������������������������������������0000664�0000000�0000000�00000006343�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the priv-set module. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 David Bartley <dtbartle@csclub.uwaterloo.ca>, 2007. */ #include <config.h> #include "priv-set.h" #if HAVE_GETPPRIV && HAVE_PRIV_H # include <priv.h> #endif #include <unistd.h> #include <errno.h> #include <sys/types.h> #include "macros.h" int main (void) { #if HAVE_GETPPRIV && HAVE_PRIV_H priv_set_t *set; ASSERT (set = priv_allocset ()); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 1); /* Do a series of removes and restores making sure that the results are consistent with our ismember function and solaris' priv_ismember. */ ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 1); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 1); ASSERT (priv_set_restore (PRIV_PROC_EXEC) == -1); ASSERT (errno == EINVAL); ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 1); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 1); ASSERT (priv_set_remove (PRIV_PROC_EXEC) == 0); ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 0); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 0); ASSERT (priv_set_remove (PRIV_PROC_EXEC) == -1); ASSERT (errno == EINVAL); ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 0); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 0); ASSERT (priv_set_restore (PRIV_PROC_EXEC) == 0); ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 1); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 1); ASSERT (priv_set_restore (PRIV_PROC_EXEC) == -1); ASSERT (errno == EINVAL); ASSERT (priv_set_ismember (PRIV_PROC_EXEC) == 1); ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); ASSERT (priv_ismember (set, PRIV_PROC_EXEC) == 1); /* Test the priv_set_linkdir wrappers. */ ASSERT (getppriv (PRIV_EFFECTIVE, set) == 0); if (priv_ismember (set, PRIV_SYS_LINKDIR)) { ASSERT (priv_set_restore_linkdir () == -1); ASSERT (errno == EINVAL); ASSERT (priv_set_remove_linkdir () == 0); ASSERT (priv_set_remove_linkdir () == -1); ASSERT (errno == EINVAL); ASSERT (priv_set_restore_linkdir () == 0); } #else ASSERT (priv_set_restore_linkdir () == -1); ASSERT (priv_set_remove_linkdir () == -1); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pselect.c��������������������������������������������������������0000664�0000000�0000000�00000002651�14110572173�0020225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pselect() substitute. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/select.h> #include "signature.h" SIGNATURE_CHECK (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); #include "test-select.h" static int my_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { struct timespec ts; struct timespec *pts = NULL; if (timeout) { ts.tv_sec = timeout->tv_sec; ts.tv_nsec = timeout->tv_usec * 1000; pts = &ts; } return pselect (nfds, readfds, writefds, exceptfds, pts, NULL); } int main (void) { return test_function (my_select); } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-c++.cc���������������������������������������������������0000664�0000000�0000000�00000021071�14110572173�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <pthread.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <pthread.h> #include "signature.h" /* =========== Thread functions =========== */ #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_create, int, (pthread_t *, const pthread_attr_t *, void * (*) (void*), void *)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_attr_init, int, (pthread_attr_t *)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_attr_getdetachstate, int, (const pthread_attr_t *, int *)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_attr_setdetachstate, int, (pthread_attr_t *, int)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_attr_destroy, int, (pthread_attr_t *)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_self, pthread_t, (void)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_equal, int, (pthread_t, pthread_t)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_detach, int, (pthread_t)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_join, int, (pthread_t, void **)); #endif #if GNULIB_TEST_PTHREAD_THREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_exit, void, (void *)); #endif /* =========== Once-only control (initialization) functions =========== */ #if GNULIB_TEST_PTHREAD_ONCE SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_once, int, (pthread_once_t *, void (*) (void))); #endif /* =========== Mutex functions =========== */ #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_init, int, (pthread_mutex_t *, const pthread_mutexattr_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_init, int, (pthread_mutexattr_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *, int *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_settype, int, (pthread_mutexattr_t *, int)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *, int *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *, int)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutexattr_destroy, int, (pthread_mutexattr_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_lock, int, (pthread_mutex_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_trylock, int, (pthread_mutex_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX_TIMEDLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_timedlock, int, (pthread_mutex_t *, const struct timespec *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_unlock, int, (pthread_mutex_t *)); #endif #if GNULIB_TEST_PTHREAD_MUTEX SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_mutex_destroy, int, (pthread_mutex_t *)); #endif /* =========== Read-write lock functions =========== */ #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_init, int, (pthread_rwlock_t *, const pthread_rwlockattr_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlockattr_init, int, (pthread_rwlockattr_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_rdlock, int, (pthread_rwlock_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_wrlock, int, (pthread_rwlock_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_trywrlock, int, (pthread_rwlock_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *, const struct timespec *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *, const struct timespec *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_unlock, int, (pthread_rwlock_t *)); #endif #if GNULIB_TEST_PTHREAD_RWLOCK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_rwlock_destroy, int, (pthread_rwlock_t *)); #endif /* =========== Condition variable functions =========== */ #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_init, int, (pthread_cond_t *, const pthread_condattr_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_condattr_init, int, (pthread_condattr_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_condattr_destroy, int, (pthread_condattr_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_wait, int, (pthread_cond_t *, pthread_mutex_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_timedwait, int, (pthread_cond_t *, pthread_mutex_t *, const struct timespec *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_signal, int, (pthread_cond_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_broadcast, int, (pthread_cond_t *)); #endif #if GNULIB_TEST_PTHREAD_COND SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_cond_destroy, int, (pthread_cond_t *)); #endif /* =========== Thread-specific storage functions =========== */ #if GNULIB_TEST_PTHREAD_TSS SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_key_create, int, (pthread_key_t *, void (*) (void *))); #endif #if GNULIB_TEST_PTHREAD_TSS SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_setspecific, int, (pthread_key_t, const void *)); #endif #if GNULIB_TEST_PTHREAD_TSS SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_getspecific, void *, (pthread_key_t)); #endif #if GNULIB_TEST_PTHREAD_TSS SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_key_delete, int, (pthread_key_t)); #endif /* =========== Spinlock functions =========== */ #if GNULIB_TEST_PTHREAD_SPIN SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_spin_init, int, (pthread_spinlock_t *, int)); #endif #if GNULIB_TEST_PTHREAD_SPIN SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_spin_lock, int, (pthread_spinlock_t *)); #endif #if GNULIB_TEST_PTHREAD_SPIN SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_spin_trylock, int, (pthread_spinlock_t *)); #endif #if GNULIB_TEST_PTHREAD_SPIN SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_spin_unlock, int, (pthread_spinlock_t *)); #endif #if GNULIB_TEST_PTHREAD_SPIN SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_spin_destroy, int, (pthread_spinlock_t *)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-cond.c���������������������������������������������������0000664�0000000�0000000�00000012111�14110572173�0021126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of condition variables in multithreaded situations. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_COND 1 #define DO_TEST_TIMEDCOND 1 /* Whether to help the scheduler through explicit sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* * Condition check */ static int cond_value = 0; static pthread_cond_t condtest; static pthread_mutex_t lockcond; static void * pthread_cond_wait_routine (void *arg) { ASSERT (pthread_mutex_lock (&lockcond) == 0); while (!cond_value) { ASSERT (pthread_cond_wait (&condtest, &lockcond) == 0); } ASSERT (pthread_mutex_unlock (&lockcond) == 0); cond_value = 2; return NULL; } static void test_pthread_cond_wait () { struct timespec remain; pthread_t thread; int ret; remain.tv_sec = 2; remain.tv_nsec = 0; cond_value = 0; ASSERT (pthread_create (&thread, NULL, pthread_cond_wait_routine, NULL) == 0); do { yield (); ret = nanosleep (&remain, &remain); ASSERT (ret >= -1); } while (ret == -1 && (remain.tv_sec != 0 || remain.tv_nsec != 0)); /* signal condition */ ASSERT (pthread_mutex_lock (&lockcond) == 0); cond_value = 1; ASSERT (pthread_cond_signal (&condtest) == 0); ASSERT (pthread_mutex_unlock (&lockcond) == 0); ASSERT (pthread_join (thread, NULL) == 0); if (cond_value != 2) abort (); } /* * Timed Condition check */ static int cond_timeout; static void get_ts (struct timespec *ts) { struct timeval now; gettimeofday (&now, NULL); ts->tv_sec = now.tv_sec + 1; ts->tv_nsec = now.tv_usec * 1000; } static void * pthread_cond_timedwait_routine (void *arg) { int ret; struct timespec ts; ASSERT (pthread_mutex_lock (&lockcond) == 0); while (!cond_value) { get_ts (&ts); ret = pthread_cond_timedwait (&condtest, &lockcond, &ts); if (ret == ETIMEDOUT) cond_timeout = 1; } ASSERT (pthread_mutex_unlock (&lockcond) == 0); return NULL; } static void test_pthread_cond_timedwait (void) { struct timespec remain; pthread_t thread; int ret; remain.tv_sec = 2; remain.tv_nsec = 0; cond_value = cond_timeout = 0; ASSERT (pthread_create (&thread, NULL, pthread_cond_timedwait_routine, NULL) == 0); do { yield (); ret = nanosleep (&remain, &remain); ASSERT (ret >= -1); } while (ret == -1 && (remain.tv_sec != 0 || remain.tv_nsec != 0)); /* signal condition */ ASSERT (pthread_mutex_lock (&lockcond) == 0); cond_value = 1; ASSERT (pthread_cond_signal (&condtest) == 0); ASSERT (pthread_mutex_unlock (&lockcond) == 0); ASSERT (pthread_join (thread, NULL) == 0); if (!cond_timeout) abort (); } int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif ASSERT (pthread_cond_init (&condtest, NULL) == 0); { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&lockcond, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } #if DO_TEST_COND printf ("Starting test_pthread_cond_wait ..."); fflush (stdout); test_pthread_cond_wait (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_TIMEDCOND printf ("Starting test_pthread_cond_timedwait ..."); fflush (stdout); test_pthread_cond_timedwait (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-mutex.c��������������������������������������������������0000664�0000000�0000000�00000023512�14110572173�0021354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_LOCK 1 #define DO_TEST_RECURSIVE_LOCK 1 /* Whether to help the scheduler through explicit sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #include "atomic-int-posix.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define pthread_self_pointer() (*((void **) pthread_self ().__)) #else # define pthread_self_pointer() ((void *) (uintptr_t) pthread_self ()) #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test normal (non-recursive) locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ static pthread_mutex_t my_lock; static void * lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_lock) == 0); dbgprintf ("Mutator %p after lock\n", pthread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_unlock (&my_lock) == 0); dbgprintf ("Mutator %p after unlock\n", pthread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_lock) == 0); check_accounts (); ASSERT (pthread_mutex_unlock (&my_lock) == 0); dbgprintf ("Mutator %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", pthread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_lock) == 0); check_accounts (); ASSERT (pthread_mutex_unlock (&my_lock) == 0); dbgprintf ("Checker %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_pthread_mutex_normal (void) { int i; pthread_t checkerthread; pthread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ ASSERT (pthread_create (&checkerthread, NULL, lock_checker_thread, NULL) == 0); for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, lock_mutator_thread, NULL) == 0); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); set_atomic_int_value (&lock_checker_done, 1); ASSERT (pthread_join (checkerthread, NULL) == 0); check_accounts (); } /* -------------------------- Test recursive locks -------------------------- */ /* Test recursive locks by having several bank accounts and several threads which shuffle around money between the accounts (recursively) and another thread checking that all the money is still there. */ static pthread_mutex_t my_reclock; static void recshuffle (void) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_reclock) == 0); dbgprintf ("Mutator %p after lock\n", pthread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ if (((unsigned int) rand () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_unlock (&my_reclock) == 0); dbgprintf ("Mutator %p after unlock\n", pthread_self_pointer ()); } static void * reclock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { recshuffle (); dbgprintf ("Mutator %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_reclock) == 0); check_accounts (); ASSERT (pthread_mutex_unlock (&my_reclock) == 0); dbgprintf ("Mutator %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", pthread_self_pointer ()); return NULL; } static struct atomic_int reclock_checker_done; static void * reclock_checker_thread (void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_mutex_lock (&my_reclock) == 0); check_accounts (); ASSERT (pthread_mutex_unlock (&my_reclock) == 0); dbgprintf ("Checker %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_pthread_mutex_recursive (void) { int i; pthread_t checkerthread; pthread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&reclock_checker_done); set_atomic_int_value (&reclock_checker_done, 0); /* Spawn the threads. */ ASSERT (pthread_create (&checkerthread, NULL, reclock_checker_thread, NULL) == 0); for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, reclock_mutator_thread, NULL) == 0); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); set_atomic_int_value (&reclock_checker_done, 1); ASSERT (pthread_join (checkerthread, NULL) == 0); check_accounts (); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&my_lock, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE) == 0); ASSERT (pthread_mutex_init (&my_reclock, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } #if DO_TEST_LOCK printf ("Starting test_pthread_mutex_normal ..."); fflush (stdout); test_pthread_mutex_normal (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RECURSIVE_LOCK printf ("Starting test_pthread_mutex_recursive ..."); fflush (stdout); test_pthread_mutex_recursive (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-once1.c��������������������������������������������������0000664�0000000�0000000�00000002105�14110572173�0021212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of once-only execution in multithreaded situations. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <pthread.h> #include "macros.h" static pthread_once_t a_once = PTHREAD_ONCE_INIT; static int a; static void a_init (void) { a = 42; } int main () { ASSERT (pthread_once (&a_once, a_init) == 0); ASSERT (a == 42); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-once2.c��������������������������������������������������0000664�0000000�0000000�00000017550�14110572173�0021225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of once-only execution in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Whether to help the scheduler through explicit sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define pthread_self_pointer() (*((void **) pthread_self ().__)) #else # define pthread_self_pointer() ((void *) (uintptr_t) pthread_self ()) #endif /* ------------------------ Test once-only execution ------------------------ */ /* Test once-only execution by having several threads attempt to grab a once-only task simultaneously (triggered by releasing a read-write lock). */ static pthread_once_t fresh_once = PTHREAD_ONCE_INIT; static int ready[THREAD_COUNT]; static pthread_mutex_t ready_lock[THREAD_COUNT]; #if ENABLE_LOCKING static pthread_rwlock_t fire_signal[REPEAT_COUNT]; #else static volatile int fire_signal_state; #endif static pthread_once_t once_control; static int performed; static pthread_mutex_t performed_lock; static void once_execute (void) { ASSERT (pthread_mutex_lock (&performed_lock) == 0); performed++; ASSERT (pthread_mutex_unlock (&performed_lock) == 0); } static void * once_contender_thread (void *arg) { int id = (int) (intptr_t) arg; int repeat; for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Tell the main thread that we're ready. */ ASSERT (pthread_mutex_lock (&ready_lock[id]) == 0); ready[id] = 1; ASSERT (pthread_mutex_unlock (&ready_lock[id]) == 0); if (repeat == REPEAT_COUNT) break; dbgprintf ("Contender %p waiting for signal for round %d\n", pthread_self_pointer (), repeat); #if ENABLE_LOCKING /* Wait for the signal to go. */ ASSERT (pthread_rwlock_rdlock (&fire_signal[repeat]) == 0); /* And don't hinder the others (if the scheduler is unfair). */ ASSERT (pthread_rwlock_unlock (&fire_signal[repeat]) == 0); #else /* Wait for the signal to go. */ while (fire_signal_state <= repeat) yield (); #endif dbgprintf ("Contender %p got the signal for round %d\n", pthread_self_pointer (), repeat); /* Contend for execution. */ ASSERT (pthread_once (&once_control, once_execute) == 0); } return NULL; } static void test_once (void) { int i, repeat; pthread_t threads[THREAD_COUNT]; /* Initialize all variables. */ for (i = 0; i < THREAD_COUNT; i++) { pthread_mutexattr_t attr; ready[i] = 0; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&ready_lock[i], &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } #if ENABLE_LOCKING for (i = 0; i < REPEAT_COUNT; i++) ASSERT (pthread_rwlock_init (&fire_signal[i], NULL) == 0); #else fire_signal_state = 0; #endif #if ENABLE_LOCKING /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) ASSERT (pthread_rwlock_wrlock (&fire_signal[i]) == 0); #endif /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, once_contender_thread, (void *) (intptr_t) i) == 0); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchronizing for round %d\n", repeat); for (;;) { int ready_count = 0; for (i = 0; i < THREAD_COUNT; i++) { ASSERT (pthread_mutex_lock (&ready_lock[i]) == 0); ready_count += ready[i]; ASSERT (pthread_mutex_unlock (&ready_lock[i]) == 0); } if (ready_count == THREAD_COUNT) break; yield (); } dbgprintf ("Main thread after synchronizing for round %d\n", repeat); if (repeat > 0) { /* Check that exactly one thread executed the once_execute() function. */ if (performed != 1) abort (); } if (repeat == REPEAT_COUNT) break; /* Preparation for the next round: Initialize once_control. */ memcpy (&once_control, &fresh_once, sizeof (pthread_once_t)); /* Preparation for the next round: Reset the performed counter. */ performed = 0; /* Preparation for the next round: Reset the ready flags. */ for (i = 0; i < THREAD_COUNT; i++) { ASSERT (pthread_mutex_lock (&ready_lock[i]) == 0); ready[i] = 0; ASSERT (pthread_mutex_unlock (&ready_lock[i]) == 0); } /* Signal all threads simultaneously. */ dbgprintf ("Main thread giving signal for round %d\n", repeat); #if ENABLE_LOCKING ASSERT (pthread_rwlock_unlock (&fire_signal[repeat]) == 0); #else fire_signal_state = repeat + 1; #endif } /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&performed_lock, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } printf ("Starting test_once ..."); fflush (stdout); test_once (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-rwlock.c�������������������������������������������������0000664�0000000�0000000�00000013726�14110572173�0021521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of read-write locks in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Whether to help the scheduler through explicit sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #include "atomic-int-posix.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define pthread_self_pointer() (*((void **) pthread_self ().__)) #else # define pthread_self_pointer() ((void *) (uintptr_t) pthread_self ()) #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ----------------- Test read-write (non-recursive) locks ----------------- */ /* Test read-write locks by having several bank accounts and several threads which shuffle around money between the accounts and several other threads that check that all the money is still there. */ static pthread_rwlock_t my_rwlock = PTHREAD_RWLOCK_INITIALIZER; static void * rwlock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before wrlock\n", pthread_self_pointer ()); ASSERT (pthread_rwlock_wrlock (&my_rwlock) == 0); dbgprintf ("Mutator %p after wrlock\n", pthread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", pthread_self_pointer ()); ASSERT (pthread_rwlock_unlock (&my_rwlock) == 0); dbgprintf ("Mutator %p after unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", pthread_self_pointer ()); return NULL; } static struct atomic_int rwlock_checker_done; static void * rwlock_checker_thread (void *arg) { while (get_atomic_int_value (&rwlock_checker_done) == 0) { dbgprintf ("Checker %p before check rdlock\n", pthread_self_pointer ()); ASSERT (pthread_rwlock_rdlock (&my_rwlock) == 0); check_accounts (); ASSERT (pthread_rwlock_unlock (&my_rwlock) == 0); dbgprintf ("Checker %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_rwlock (void) { int i; pthread_t checkerthreads[THREAD_COUNT]; pthread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&rwlock_checker_done); set_atomic_int_value (&rwlock_checker_done, 0); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&checkerthreads[i], NULL, rwlock_checker_thread, NULL) == 0); for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, rwlock_mutator_thread, NULL) == 0); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); set_atomic_int_value (&rwlock_checker_done, 1); for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (checkerthreads[i], NULL) == 0); check_accounts (); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif printf ("Starting test_rwlock ..."); fflush (stdout); test_rwlock (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ������������������������������������������gnulib-20210822~d383792/tests/test-pthread-spin.c���������������������������������������������������0000664�0000000�0000000�00000013644�14110572173�0021170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX spin locks. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Whether to help the scheduler through explicit sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #include "atomic-int-posix.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define pthread_self_pointer() (*((void **) pthread_self ().__)) #else # define pthread_self_pointer() ((void *) (uintptr_t) pthread_self ()) #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test use like normal locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ static pthread_spinlock_t my_lock; static void * lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", pthread_self_pointer ()); ASSERT (pthread_spin_lock (&my_lock) == 0); dbgprintf ("Mutator %p after lock\n", pthread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", pthread_self_pointer ()); ASSERT (pthread_spin_unlock (&my_lock) == 0); dbgprintf ("Mutator %p after unlock\n", pthread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_spin_lock (&my_lock) == 0); check_accounts (); ASSERT (pthread_spin_unlock (&my_lock) == 0); dbgprintf ("Mutator %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", pthread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", pthread_self_pointer ()); ASSERT (pthread_spin_lock (&my_lock) == 0); check_accounts (); ASSERT (pthread_spin_unlock (&my_lock) == 0); dbgprintf ("Checker %p after check unlock\n", pthread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_pthread_spin (void) { int i; pthread_t checkerthread; pthread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ ASSERT (pthread_create (&checkerthread, NULL, lock_checker_thread, NULL) == 0); for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, lock_mutator_thread, NULL) == 0); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); set_atomic_int_value (&lock_checker_done, 1); ASSERT (pthread_join (checkerthread, NULL) == 0); check_accounts (); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif ASSERT (pthread_spin_init (&my_lock, 0) == 0); printf ("Starting test_pthread_spin ..."); fflush (stdout); test_pthread_spin (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-thread.c�������������������������������������������������0000664�0000000�0000000�00000003643�14110572173�0021464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_create () function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <pthread.h> #include <stdio.h> #include <string.h> #include "macros.h" static pthread_t main_thread_before; static pthread_t main_thread_after; static pthread_t worker_thread; #define MAGIC ((void *) 1266074729) static volatile int work_done; static void * worker_thread_func (void *arg) { work_done = 1; return MAGIC; } int main () { main_thread_before = pthread_self (); if (pthread_create (&worker_thread, NULL, worker_thread_func, NULL) == 0) { void *ret; /* Check that pthread_self () has the same value before than after the first call to pthread_create (). */ main_thread_after = pthread_self (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (pthread_t)) == 0); ASSERT (pthread_join (worker_thread, &ret) == 0); /* Check the return value of the thread. */ ASSERT (ret == MAGIC); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { fputs ("pthread_create failed\n", stderr); return 1; } } ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread-tss.c����������������������������������������������������0000664�0000000�0000000�00000035334�14110572173�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thread-specific storage in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #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 sched_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if EXPLICIT_YIELD # include <sched.h> #endif #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define pthread_self_pointer() (*((void **) pthread_self ().__)) #else # define pthread_self_pointer() ((void *) (uintptr_t) pthread_self ()) #endif static void perhaps_yield (void) { /* Call yield () only with a certain probability, otherwise the sequence of thread activations may be too predictable. */ if ((((unsigned int) rand () >> 3) % 4) == 0) yield (); } /* ----------------------- Test thread-local storage ----------------------- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 16 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #define KEYS_COUNT 4 static pthread_key_t mykeys[KEYS_COUNT]; static void * worker_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; int i, j, repeat; unsigned int values[KEYS_COUNT]; dbgprintf ("Worker %p started\n", pthread_self_pointer ()); /* Initialize the per-thread storage. */ for (i = 0; i < KEYS_COUNT; i++) { values[i] = (((unsigned int) rand () >> 3) % 1000000) * THREAD_COUNT + id; /* Hopefully no arithmetic overflow. */ if ((values[i] % THREAD_COUNT) != id) abort (); } perhaps_yield (); /* Verify that the initial value is NULL. */ dbgprintf ("Worker %p before initial verify\n", pthread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if (pthread_getspecific (mykeys[i]) != NULL) abort (); dbgprintf ("Worker %p after initial verify\n", pthread_self_pointer ()); perhaps_yield (); /* Initialize the per-thread storage. */ dbgprintf ("Worker %p before first pthread_setspecific\n", pthread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { unsigned int *ptr = (unsigned int *) malloc (sizeof (unsigned int)); *ptr = values[i]; ASSERT (pthread_setspecific (mykeys[i], ptr) == 0); } dbgprintf ("Worker %p after first pthread_setspecific\n", pthread_self_pointer ()); perhaps_yield (); /* Shuffle around the pointers. */ for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { dbgprintf ("Worker %p doing value swapping\n", pthread_self_pointer ()); i = ((unsigned int) rand () >> 3) % KEYS_COUNT; j = ((unsigned int) rand () >> 3) % KEYS_COUNT; if (i != j) { void *vi = pthread_getspecific (mykeys[i]); void *vj = pthread_getspecific (mykeys[j]); ASSERT (pthread_setspecific (mykeys[i], vj) == 0); ASSERT (pthread_setspecific (mykeys[j], vi) == 0); } perhaps_yield (); } /* Verify that all the values are from this thread. */ dbgprintf ("Worker %p before final verify\n", pthread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if ((*(unsigned int *) pthread_getspecific (mykeys[i]) % THREAD_COUNT) != id) abort (); dbgprintf ("Worker %p after final verify\n", pthread_self_pointer ()); perhaps_yield (); dbgprintf ("Worker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_tss (void) { int pass, i; for (pass = 0; pass < 2; pass++) { pthread_t threads[THREAD_COUNT]; if (pass == 0) for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_create (&mykeys[i], free) == 0); else for (i = KEYS_COUNT - 1; i >= 0; i--) ASSERT (pthread_key_create (&mykeys[i], free) == 0); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_create (&threads[i], NULL, worker_thread, (void *) (uintptr_t) i) == 0); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (pthread_join (threads[i], NULL) == 0); for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_delete (mykeys[i]) == 0); } } #undef KEYS_COUNT #undef REPEAT_COUNT #undef THREAD_COUNT /* --------------- Test thread-local storage with destructors --------------- */ /* Number of simultaneous threads. */ #if defined __ANDROID__ # define THREAD_COUNT 5 /* to avoid a pthread_key_create failure */ #else # define THREAD_COUNT 10 #endif /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 static pthread_mutex_t sumlock; static uintptr_t sum; static void inc_sum (uintptr_t value) { ASSERT (pthread_mutex_lock (&sumlock) == 0); sum += value; ASSERT (pthread_mutex_unlock (&sumlock) == 0); } static void destructor0 (void *value) { if ((((uintptr_t) value - 1) % 10) != 0) abort (); inc_sum ((uintptr_t) value); } static void destructor1 (void *value) { if ((((uintptr_t) value - 1) % 10) != 1) abort (); inc_sum ((uintptr_t) value); } static void destructor2 (void *value) { if ((((uintptr_t) value - 1) % 10) != 2) abort (); inc_sum ((uintptr_t) value); } static void destructor3 (void *value) { if ((((uintptr_t) value - 1) % 10) != 3) abort (); inc_sum ((uintptr_t) value); } static void destructor4 (void *value) { if ((((uintptr_t) value - 1) % 10) != 4) abort (); inc_sum ((uintptr_t) value); } static void destructor5 (void *value) { if ((((uintptr_t) value - 1) % 10) != 5) abort (); inc_sum ((uintptr_t) value); } static void destructor6 (void *value) { if ((((uintptr_t) value - 1) % 10) != 6) abort (); inc_sum ((uintptr_t) value); } static void destructor7 (void *value) { if ((((uintptr_t) value - 1) % 10) != 7) abort (); inc_sum ((uintptr_t) value); } static void destructor8 (void *value) { if ((((uintptr_t) value - 1) % 10) != 8) abort (); inc_sum ((uintptr_t) value); } static void destructor9 (void *value) { if ((((uintptr_t) value - 1) % 10) != 9) abort (); inc_sum ((uintptr_t) value); } static void (*destructor_table[10]) (void *) = { destructor0, destructor1, destructor2, destructor3, destructor4, destructor5, destructor6, destructor7, destructor8, destructor9 }; static pthread_key_t dtorcheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that uses destructors that verify that the destructor belongs to the right thread. */ static void * dtorcheck1_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; pthread_key_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_create (&keys[i], destructor_table[i]) == 0); for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_setspecific (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == 0); return NULL; } static void test_tss_dtorcheck1 (void) { pthread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_create (&threads[id], NULL, dtorcheck1_thread, (void *) (uintptr_t) id) == 0); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_join (threads[id], NULL) == 0); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_delete (dtorcheck_keys[id][i]) == 0); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } /* Worker thread that uses destructors that verify that the destructor belongs to the right key allocated within the thread. */ static void * dtorcheck2_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; pthread_key_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_create (&keys[i], destructor_table[id]) == 0); for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_setspecific (keys[i], (void *) (uintptr_t) (10 * i + id + 1)) == 0); return NULL; } static void test_tss_dtorcheck2 (void) { pthread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_create (&threads[id], NULL, dtorcheck2_thread, (void *) (uintptr_t) id) == 0); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_join (threads[id], NULL) == 0); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_delete (dtorcheck_keys[id][i]) == 0); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef KEYS_COUNT #undef THREAD_COUNT /* --- Test thread-local storage with with races between init and destroy --- */ /* Number of simultaneous threads. */ #if defined __ANDROID__ # define THREAD_COUNT 5 /* to avoid a pthread_key_create failure */ #else # define THREAD_COUNT 10 #endif /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 /* Number of times to destroy and reallocate a key in each thread. */ #define REPEAT_COUNT 100000 static pthread_key_t racecheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that does many destructions and reallocations of keys, and also uses destructors that verify that the destructor belongs to the right key. */ static void * racecheck_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; pthread_key_t *keys = racecheck_keys[id]; /* an array of KEYS_COUNT keys */ int repeat; int i; dbgprintf ("Worker %p started\n", pthread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { ASSERT (pthread_key_create (&keys[i], destructor_table[i]) == 0); ASSERT (pthread_setspecific (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == 0); } for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { i = ((unsigned int) rand () >> 3) % KEYS_COUNT; dbgprintf ("Worker %p reallocating key %d\n", pthread_self_pointer (), i); ASSERT (pthread_key_delete (keys[i]) == 0); ASSERT (pthread_key_create (&keys[i], destructor_table[i]) == 0); ASSERT (pthread_setspecific (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == 0); } dbgprintf ("Worker %p dying.\n", pthread_self_pointer ()); return NULL; } static void test_tss_racecheck (void) { pthread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_create (&threads[id], NULL, racecheck_thread, (void *) (uintptr_t) id) == 0); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (pthread_join (threads[id], NULL) == 0); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) ASSERT (pthread_key_delete (racecheck_keys[id][i]) == 0); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef REPEAT_COUNT #undef KEYS_COUNT #undef THREAD_COUNT /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { pthread_mutexattr_t attr; ASSERT (pthread_mutexattr_init (&attr) == 0); ASSERT (pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_NORMAL) == 0); ASSERT (pthread_mutex_init (&sumlock, &attr) == 0); ASSERT (pthread_mutexattr_destroy (&attr) == 0); } printf ("Starting test_tss ..."); fflush (stdout); test_tss (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_dtorcheck1 ..."); fflush (stdout); test_tss_dtorcheck1 (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_dtorcheck2 ..."); fflush (stdout); test_tss_dtorcheck2 (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_racecheck ..."); fflush (stdout); test_tss_racecheck (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread.c��������������������������������������������������������0000664�0000000�0000000�00000004546�14110572173�0020222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <pthread.h> substitute. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <pthread.h> #include "verify.h" /* Check that the types are all defined. */ pthread_t t1; pthread_attr_t t2; pthread_once_t t3 = PTHREAD_ONCE_INIT; pthread_mutex_t t4 = PTHREAD_MUTEX_INITIALIZER; pthread_mutexattr_t t5; pthread_rwlock_t t6 = PTHREAD_RWLOCK_INITIALIZER; pthread_rwlockattr_t t7; pthread_cond_t t8 = PTHREAD_COND_INITIALIZER; pthread_condattr_t t9; pthread_key_t t10; pthread_spinlock_t t11; #ifdef TODO /* Not implemented in gnulib yet */ pthread_barrier_t t12; pthread_barrierattr_t t13; #endif /* Check that the various macros are defined. */ /* Constants for pthread_attr_setdetachstate(). */ int ds[] = { PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED }; /* Constants for pthread_exit(). */ void *canceled = PTHREAD_CANCELED; /* Constants for pthread_mutexattr_settype(). */ int mt[] = { PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK }; #ifdef TODO /* Not implemented in gnulib yet */ /* Constants for pthread_mutexattr_setrobust(). */ int mr[] = { PTHREAD_MUTEX_ROBUST, PTHREAD_MUTEX_STALLED }; /* Constants for pthread_barrierattr_setpshared(). */ int bp[] = { PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE }; /* Constants for pthread_barrier_wait(). */ int bw[] = { PTHREAD_BARRIER_SERIAL_THREAD }; /* Constants for pthread_setcancelstate(). */ int cs[] = { PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DISABLE }; /* Constants for pthread_setcanceltype(). */ int ct[] = { PTHREAD_CANCEL_DEFERRED, PTHREAD_CANCEL_ASYNCHRONOUS }; #endif int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread_sigmask1.c�����������������������������������������������0000664�0000000�0000000�00000004676�14110572173�0022025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a single-threaded program. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <signal.h> #include "signature.h" SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" #if !(defined _WIN32 && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; int pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); /* Block SIGINT. */ 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); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif ������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pthread_sigmask2.c�����������������������������������������������0000664�0000000�0000000�00000005146�14110572173�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a multi-threaded program. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <signal.h> #include <errno.h> #include <pthread.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS static pthread_t main_thread; static pthread_t killer_thread; static void * killer_thread_func (void *arg) { sleep (1); pthread_kill (main_thread, SIGINT); return NULL; } static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ /* This call returns 0 on NetBSD 8.0. */ #if !defined __NetBSD__ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); #endif /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from another thread. */ main_thread = pthread_self (); ASSERT (pthread_create (&killer_thread, NULL, killer_thread_func, NULL) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); /* Clean up the thread. This avoid a "ThreadSanitizer: thread leak" warning from "gcc -fsanitize=thread". */ ASSERT (pthread_join (killer_thread, NULL) == 0); return 0; } #else int main () { fputs ("Skipping test: POSIX threads not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ptsname.c��������������������������������������������������������0000664�0000000�0000000�00000013373�14110572173�0020240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ptsname(3). Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 (ptsname, char *, (int)); #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "same-inode.h" #include "macros.h" /* Compare two slave names. On some systems, there are hard links in the /dev/ directory. For example, on OSF/1 5.1, /dev/ttyp0 == /dev/pts/0 /dev/ttyp9 == /dev/pts/9 /dev/ttypa == /dev/pts/10 /dev/ttype == /dev/pts/14 */ static int same_slave (const char *slave_name1, const char *slave_name2) { struct stat statbuf1; struct stat statbuf2; return (strcmp (slave_name1, slave_name2) == 0 || (stat (slave_name1, &statbuf1) >= 0 && stat (slave_name2, &statbuf2) >= 0 && SAME_INODE (statbuf1, statbuf2))); } int main (void) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ # if defined _AIX int alarm_value = 20; # else int alarm_value = 5; # endif signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { char *result; errno = 0; result = ptsname (-1); ASSERT (result == NULL); ASSERT (errno == EBADF || errno == ENOTTY /* seen on glibc */ ); } { int fd; char *result; /* Open the controlling tty of the current process. */ fd = open ("/dev/tty", O_RDONLY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open controlling tty\n"); return 77; } result = ptsname (fd); /* The result is usually NULL, because /dev/tty is a slave, not a master. */ if (result != NULL) { ASSERT (memcmp (result, "/dev/", 5) == 0); } close (fd); } #if defined __sun || defined __DragonFly__ /* Solaris has BSD-style /dev/pty[p-r][0-9a-f] files, but the function ptsname() does not work on them. DragonFly BSD has only /dev/ptmx. */ { int fd; char *result; /* Open the controlling tty of the current process. */ fd = open ("/dev/ptmx", O_RDWR | O_NOCTTY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n"); return 77; } result = ptsname (fd); ASSERT (result != NULL); ASSERT (memcmp (result, "/dev/pts/", 9) == 0); close (fd); } #elif defined _AIX /* AIX has BSD-style /dev/ptyp[0-9a-f] files, and the function ptsname() produces the corresponding /dev/ttyp[0-9a-f] file for each. But opening such a pty causes the process to hang in a state where it does not even react to the SIGALRM signal for N * 15 seconds, where N is the number of opened ptys, either in the close (fd) call or - when this close (fd) call is commented out - at the process exit. So, better don't use these BSD-style ptys. The modern way to open a pty is to go through /dev/ptc. */ { int fd; char *result; /* Open a pty master. */ fd = open ("/dev/ptc", O_RDWR | O_NOCTTY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n"); return 77; } result = ptsname (fd); ASSERT (result != NULL); ASSERT (memcmp (result, "/dev/pts/", 9) == 0); /* This close (fd) call takes 15 seconds. It would be interruptible by the SIGALRM timer, but then this test would report failure. */ close (fd); } #else /* Try various master names of Mac OS X: /dev/pty[p-w][0-9a-f] */ { int char1; int char2; for (char1 = 'p'; char1 <= 'w'; char1++) for (char2 = '0'; char2 <= 'f'; (char2 == '9' ? char2 = 'a' : char2++)) { char master_name[32]; int fd; sprintf (master_name, "/dev/pty%c%c", char1, char2); fd = open (master_name, O_RDONLY); if (fd >= 0) { char *result; char slave_name[32]; result = ptsname (fd); ASSERT (result != NULL); sprintf (slave_name, "/dev/tty%c%c", char1, char2); ASSERT (same_slave (result, slave_name)); close (fd); } } } /* Try various master names of *BSD: /dev/pty[p-sP-S][0-9a-v] */ { int upper; int char1; int char2; for (upper = 0; upper <= 1; upper++) for (char1 = (upper ? 'P' : 'p'); char1 <= (upper ? 'S' : 's'); char1++) for (char2 = '0'; char2 <= 'v'; (char2 == '9' ? char2 = 'a' : char2++)) { char master_name[32]; int fd; sprintf (master_name, "/dev/pty%c%c", char1, char2); fd = open (master_name, O_RDONLY); if (fd >= 0) { char *result; char slave_name[32]; result = ptsname (fd); ASSERT (result != NULL); sprintf (slave_name, "/dev/tty%c%c", char1, char2); ASSERT (same_slave (result, slave_name)); close (fd); } } } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ptsname_r.c������������������������������������������������������0000664�0000000�0000000�00000016742�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ptsname_r(3). Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc may "optimize" the null_ptr function, when its result gets passed to a function that has an argument declared as _GL_ARG_NONNULL. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (ptsname_r, int, (int, char *, size_t)); #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "same-inode.h" #if GNULIB_defined_ptsname_r # include "null-ptr.h" #endif #include "macros.h" /* Compare two slave names. On some systems, there are hard links in the /dev/ directory. For example, on OSF/1 5.1, /dev/ttyp0 == /dev/pts/0 /dev/ttyp9 == /dev/pts/9 /dev/ttypa == /dev/pts/10 /dev/ttype == /dev/pts/14 */ static int same_slave (const char *slave_name1, const char *slave_name2) { struct stat statbuf1; struct stat statbuf2; return (strcmp (slave_name1, slave_name2) == 0 || (stat (slave_name1, &statbuf1) >= 0 && stat (slave_name2, &statbuf2) >= 0 && SAME_INODE (statbuf1, statbuf2))); } static void test_errors (int fd, const char *slave) { char buffer[256]; size_t len; size_t buflen_max; size_t buflen; int result; len = strlen (slave); buflen_max = len + 5; if (buflen_max > sizeof buffer) buflen_max = sizeof buffer; for (buflen = 0; buflen <= buflen_max; buflen++) { memset (buffer, 'X', sizeof buffer); result = ptsname_r (fd, buffer, buflen); if (buflen > len) { ASSERT (result == 0); ASSERT (buffer[0] == '/'); } else { ASSERT (result != 0); ASSERT (result == ERANGE); ASSERT (buffer[0] == 'X'); } } /* This test works only if the ptsname_r implementation comes from gnulib. If it comes from libc, we have no way to prevent gcc from "optimizing" the null_ptr function in invalid ways. See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>. */ #if GNULIB_defined_ptsname_r result = ptsname_r (fd, null_ptr (), 0); ASSERT (result != 0); ASSERT (result == EINVAL); #endif } int main (void) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ # if defined _AIX int alarm_value = 20; # else int alarm_value = 5; # endif signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { char buffer[256]; int result; result = ptsname_r (-1, buffer, sizeof buffer); ASSERT (result != 0); ASSERT (result == EBADF || result == ENOTTY); } { int fd; char buffer[256]; int result; /* Open the controlling tty of the current process. */ fd = open ("/dev/tty", O_RDONLY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open controlling tty\n"); return 77; } result = ptsname_r (fd, buffer, sizeof buffer); /* The result is usually NULL, because /dev/tty is a slave, not a master. */ if (result == 0) { ASSERT (memcmp (buffer, "/dev/", 5) == 0); } close (fd); } #if defined __sun || defined __DragonFly__ /* Solaris has BSD-style /dev/pty[p-r][0-9a-f] files, but the function ptsname() does not work on them. DragonFly BSD has only /dev/ptmx. */ { int fd; char buffer[256]; int result; /* Open a pty master. */ fd = open ("/dev/ptmx", O_RDWR | O_NOCTTY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n"); return 77; } result = ptsname_r (fd, buffer, sizeof buffer); ASSERT (result == 0); ASSERT (memcmp (buffer, "/dev/pts/", 9) == 0); test_errors (fd, buffer); close (fd); } #elif defined _AIX /* AIX has BSD-style /dev/ptyp[0-9a-f] files, and the function ptsname() produces the corresponding /dev/ttyp[0-9a-f] file for each. But opening such a pty causes the process to hang in a state where it does not even react to the SIGALRM signal for N * 15 seconds, where N is the number of opened ptys, either in the close (fd) call or - when this close (fd) call is commented out - at the process exit. So, better don't use these BSD-style ptys. The modern way to open a pty is to go through /dev/ptc. */ { int fd; char buffer[256]; int result; /* Open a pty master. */ fd = open ("/dev/ptc", O_RDWR | O_NOCTTY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open pseudo-terminal\n"); return 77; } result = ptsname_r (fd, buffer, sizeof buffer); ASSERT (result == 0); ASSERT (memcmp (buffer, "/dev/pts/", 9) == 0); test_errors (fd, buffer); /* This close (fd) call takes 15 seconds. It would be interruptible by the SIGALRM timer, but then this test would report failure. */ close (fd); } #else /* Try various master names of Mac OS X: /dev/pty[p-w][0-9a-f] */ { int char1; int char2; for (char1 = 'p'; char1 <= 'w'; char1++) for (char2 = '0'; char2 <= 'f'; (char2 == '9' ? char2 = 'a' : char2++)) { char master_name[32]; int fd; sprintf (master_name, "/dev/pty%c%c", char1, char2); fd = open (master_name, O_RDONLY); if (fd >= 0) { char buffer[256]; int result; char slave_name[32]; result = ptsname_r (fd, buffer, sizeof buffer); ASSERT (result == 0); sprintf (slave_name, "/dev/tty%c%c", char1, char2); ASSERT (same_slave (buffer, slave_name)); test_errors (fd, buffer); /* This call hangs on AIX. */ close (fd); } } } /* Try various master names of *BSD: /dev/pty[p-sP-S][0-9a-v] */ { int upper; int char1; int char2; for (upper = 0; upper <= 1; upper++) for (char1 = (upper ? 'P' : 'p'); char1 <= (upper ? 'S' : 's'); char1++) for (char2 = '0'; char2 <= 'v'; (char2 == '9' ? char2 = 'a' : char2++)) { char master_name[32]; int fd; sprintf (master_name, "/dev/pty%c%c", char1, char2); fd = open (master_name, O_RDONLY); if (fd >= 0) { char buffer[256]; int result; char slave_name[32]; result = ptsname_r (fd, buffer, sizeof buffer); ASSERT (result == 0); sprintf (slave_name, "/dev/tty%c%c", char1, char2); ASSERT (same_slave (buffer, slave_name)); test_errors (fd, buffer); close (fd); } } } #endif return 0; } ������������������������������gnulib-20210822~d383792/tests/test-pty-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000002413�14110572173�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <pty.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <pty.h> #include "signature.h" #if GNULIB_TEST_FORKPTY SIGNATURE_CHECK (GNULIB_NAMESPACE::forkpty, int, (int *, char *, struct termios const *, struct winsize const *)); #endif #if GNULIB_TEST_OPENPTY SIGNATURE_CHECK (GNULIB_NAMESPACE::openpty, int, (int *, int *, char *, struct termios const *, struct winsize const *)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pwrite.c���������������������������������������������������������0000664�0000000�0000000�00000004352�14110572173�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the pwrite function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (pwrite, ssize_t, (int, const void *, size_t, off_t)); #include <sys/types.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include "macros.h" #define N (sizeof buf - 1) int main (void) { char const *file = "out"; int fd; char buf[] = "0123456789"; off_t pos = 2; size_t i; off_t init_pos; ASSERT (file); fd = open (file, O_CREAT | O_WRONLY, 0600); ASSERT (0 <= fd); ASSERT (write (fd, buf, N) == N); ASSERT (close (fd) == 0); fd = open (file, O_WRONLY, 0600); ASSERT (0 <= fd); init_pos = lseek (fd, pos, SEEK_SET); ASSERT (init_pos == pos); for (i = 0; i < N; i+=2) { const char byte = 'W'; ASSERT (pwrite (fd, &byte, 1, i) == 1); ASSERT (lseek (fd, 0, SEEK_CUR) == init_pos); } { /* Invalid offset must evoke failure with EINVAL. */ const char byte = 'b'; ASSERT (pwrite (fd, &byte, 1, (off_t) -1) == -1); ASSERT (errno == EINVAL); } ASSERT (close (fd) == 0); { fd = open (file, O_RDONLY); ASSERT (0 <= fd); ASSERT (read (fd, buf, N) == N); ASSERT (close (fd) == 0); ASSERT (strcmp ("W1W3W5W7W9",buf) == 0); } /* Test behaviour for invalid file descriptors. */ { char byte = 'x'; errno = 0; ASSERT (pwrite (-1, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } { char byte = 'x'; close (99); errno = 0; ASSERT (pwrite (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-pwrite.sh��������������������������������������������������������0000775�0000000�0000000�00000000150�14110572173�0020263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 ${CHECKER} test-pwrite || fail=1 Exit $fail ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-qsort_r.c��������������������������������������������������������0000664�0000000�0000000�00000002527�14110572173�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test qsort_r. Copyright 2014-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <stdlib.h> #include <string.h> int cmp (void const *va, void const *vb, void *varg) { char const *a = va; char const *b = vb; int *arg = varg; return (*a < *b ? -1 : *a > *b) * *arg; } int main (void) { char buf[] = "thequickbrownfoxjumpedoverthelazydogs"; int forward = 1; int reverse = -1; qsort_r (buf, sizeof buf - 1, 1, cmp, &forward); if (strcmp (buf, "abcddeeeefghhijklmnoooopqrrsttuuvwxyz") != 0) return 1; qsort_r (buf, sizeof buf - 1, 1, cmp, &reverse); if (strcmp (buf, "zyxwvuuttsrrqpoooonmlkjihhgfeeeeddcba") != 0) return 1; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-quotearg-simple.c������������������������������������������������0000664�0000000�0000000�00000037340�14110572173�0021707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include "quotearg.h" #include <ctype.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "localcharset.h" #include "macros.h" #include "zerosize-ptr.h" #include "test-quotearg.h" static struct result_groups results_g[] = { /* literal_quoting_style */ { { "", "\0""1\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ } }, /* shell_quoting_style */ { { "''", "\0""1\0", 3, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", "'a\\b'", "\"a' b\"", LQ RQ, LQ RQ }, { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", "'a\\b'", "\"a' b\"", LQ RQ, LQ RQ }, { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", LQ RQ, LQ RQ } }, /* shell_always_quoting_style */ { { "''", "'\0""1\0'", 5, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "'" LQ RQ "'", "'" LQ RQ "'" }, { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "'" LQ RQ "'", "'" LQ RQ "'" }, { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "'" LQ RQ "'", "'" LQ RQ "'" } }, /* shell_escape_quoting_style */ { { "''", "''$'\\0''1'$'\\0'", 15, "simple", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "a:b", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", LQ RQ }, { "''", "''$'\\0''1'$'\\0'", 15, "simple", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "a:b", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", LQ RQ }, { "''", "''$'\\0''1'$'\\0'", 15, "simple", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", LQ RQ } }, /* shell_escape_always_quoting_style */ { { "''", "''$'\\0''1'$'\\0'", 15, "'simple'", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "''$'\\0''1'$'\\0'", 15, "'simple'", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "''$'\\0''1'$'\\0'", 15, "'simple'", "' '$'\\t\\n'\\''\"'$'\\033''?""?/\\'", "'a:b'", "'a\\b'", "\"a' b\"", "''$'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" } }, /* c_quoting_style */ { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } }, /* c_maybe_quoting_style */ { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ } }, /* escape_quoting_style */ { { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a\\:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ } }, /* locale_quoting_style */ { { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a\\:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" } }, /* clocale_quoting_style */ { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } } }; static struct result_groups flag_results[] = { /* literal_quoting_style and QA_ELIDE_NULL_BYTES */ { { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, LQ RQ } }, /* c_quoting_style and QA_ELIDE_OUTER_QUOTES */ { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "a\\b", "a' b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ } }, /* c_quoting_style and QA_SPLIT_TRIGRAPHS */ { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"", "\"a' b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" } } }; static char const *custom_quotes[][2] = { { "", "" }, { "'", "'" }, { "(", ")" }, { ":", " " }, { " ", ":" }, { "# ", "\n" }, { "\"'", "'\"" } }; static struct result_groups custom_results[] = { /* left_quote = right_quote = "" */ { { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a\\:b", "a\\\\b", "a' b", LQ_ENC RQ_ENC, LQ RQ } }, /* left_quote = right_quote = "'" */ { { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a\\:b'", "'a\\\\b'", "'a\\' b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" } }, /* left_quote = "(" and right_quote = ")" */ { { "()", "(\\0001\\0)", 9, "(simple)", "( \\t\\n'\"\\033?""?/\\\\)", "(a:b)", "(a\\\\b)", "(a' b)", "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, { "()", "(\\0001\\0)", 9, "(simple)", "( \\t\\n'\"\\033?""?/\\\\)", "(a:b)", "(a\\\\b)", "(a' b)", "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, { "()", "(\\0001\\0)", 9, "(simple)", "( \\t\\n'\"\\033?""?/\\\\)", "(a\\:b)", "(a\\\\b)", "(a' b)", "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" } }, /* left_quote = ":" and right_quote = " " */ { { ": ", ":\\0001\\0 ", 9, ":simple ", ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a:b ", ":a\\\\b ", ":a'\\ b ", ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, { ": ", ":\\0001\\0 ", 9, ":simple ", ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a:b ", ":a\\\\b ", ":a'\\ b ", ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, { ": ", ":\\0001\\0 ", 9, ":simple ", ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a\\:b ", ":a\\\\b ", ":a'\\ b ", ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " } }, /* left_quote = " " and right_quote = ":" */ { { " :", " \\0001\\0:", 9, " simple:", " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", " a' b:", " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, { " :", " \\0001\\0:", 9, " simple:", " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", " a' b:", " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, { " :", " \\0001\\0:", 9, " simple:", " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", " a' b:", " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" } }, /* left_quote = "# " and right_quote = "\n" */ { { "# \n", "# \\0001\\0\n", 10, "# simple\n", "# \\t\\n'\"\\033?""?/\\\\\n", "# a:b\n", "# a\\\\b\n", "# a' b\n", "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" }, { "# \n", "# \\0001\\0\n", 10, "# simple\n", "# \\t\\n'\"\\033?""?/\\\\\n", "# a:b\n", "# a\\\\b\n", "# a' b\n", "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" }, { "# \n", "# \\0001\\0\n", 10, "# simple\n", "# \\t\\n'\"\\033?""?/\\\\\n", "# a\\:b\n", "# a\\\\b\n", "# a' b\n", "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" } }, /* left_quote = "\"'" and right_quote = "'\"" */ { { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", "\"'a' b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", "\"'a' b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a\\:b'\"", "\"'a\\\\b'\"", "\"'a' b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" } } }; static char * use_quote_double_quotes (const char *str, size_t *len) { char *p = *len == SIZE_MAX ? quotearg_char (str, '"') : quotearg_char_mem (str, *len, '"'); *len = strlen (p); return p; } int main (_GL_UNUSED int argc, char *argv[]) { int i; bool ascii_only = MB_CUR_MAX == 1 && !isprint ((unsigned char) LQ[0]); /* This part of the program is hard-wired to the C locale since it does not call setlocale. However, according to POSIX, the use of 8-bit bytes in a character context in the C locale gives unspecified results (that is, the C locale charset is allowed to be unibyte with 8-bit bytes rejected [ASCII], unibyte with 8-bit bytes being characters [often ISO-8859-1], or multibyte [often UTF-8]). We assume that the latter two cases will be indistinguishable in this test - that is, the LQ and RQ sequences will pass through unchanged in either type of charset. So when testing for quoting of str7, use the ascii_only flag to decide what to expect for the 8-bit data being quoted. */ ASSERT (!isprint ('\033')); for (i = literal_quoting_style; i <= clocale_quoting_style; i++) { set_quoting_style (NULL, (enum quoting_style) i); if (!(i == locale_quoting_style || i == clocale_quoting_style) || (strcmp (locale_charset (), "ASCII") == 0 || strcmp (locale_charset (), "ANSI_X3.4-1968") == 0)) { compare_strings (use_quotearg_buffer, &results_g[i].group1, ascii_only); compare_strings (use_quotearg, &results_g[i].group2, ascii_only); if (i == c_quoting_style) compare_strings (use_quote_double_quotes, &results_g[i].group2, ascii_only); compare_strings (use_quotearg_colon, &results_g[i].group3, ascii_only); } } set_quoting_style (NULL, literal_quoting_style); ASSERT (set_quoting_flags (NULL, QA_ELIDE_NULL_BYTES) == 0); compare_strings (use_quotearg_buffer, &flag_results[0].group1, ascii_only); compare_strings (use_quotearg, &flag_results[0].group2, ascii_only); compare_strings (use_quotearg_colon, &flag_results[0].group3, ascii_only); set_quoting_style (NULL, c_quoting_style); ASSERT (set_quoting_flags (NULL, QA_ELIDE_OUTER_QUOTES) == QA_ELIDE_NULL_BYTES); compare_strings (use_quotearg_buffer, &flag_results[1].group1, ascii_only); compare_strings (use_quotearg, &flag_results[1].group2, ascii_only); compare_strings (use_quote_double_quotes, &flag_results[1].group2, ascii_only); compare_strings (use_quotearg_colon, &flag_results[1].group3, ascii_only); ASSERT (set_quoting_flags (NULL, QA_SPLIT_TRIGRAPHS) == QA_ELIDE_OUTER_QUOTES); compare_strings (use_quotearg_buffer, &flag_results[2].group1, ascii_only); compare_strings (use_quotearg, &flag_results[2].group2, ascii_only); compare_strings (use_quote_double_quotes, &flag_results[2].group2, ascii_only); compare_strings (use_quotearg_colon, &flag_results[2].group3, ascii_only); ASSERT (set_quoting_flags (NULL, 0) == QA_SPLIT_TRIGRAPHS); for (i = 0; i < sizeof custom_quotes / sizeof *custom_quotes; ++i) { set_custom_quoting (NULL, custom_quotes[i][0], custom_quotes[i][1]); compare_strings (use_quotearg_buffer, &custom_results[i].group1, ascii_only); compare_strings (use_quotearg, &custom_results[i].group2, ascii_only); compare_strings (use_quotearg_colon, &custom_results[i].group3, ascii_only); } { /* Trigger the bug whereby quotearg_buffer would read beyond the NUL that defines the end of the string being quoted. Use an input string whose NUL is the last byte before an unreadable page. */ char *z = zerosize_ptr (); if (z) { size_t q_len = 1024; char *q = malloc (q_len + 1); char buf[10]; memset (q, 'Q', q_len); q[q_len] = 0; /* Z points to the boundary between a readable/writable page and one that is neither readable nor writable. Position our string so its NUL is at the end of the writable one. */ char const *str = "____"; size_t s_len = strlen (str); z -= s_len + 1; memcpy (z, str, s_len + 1); set_custom_quoting (NULL, q, q); /* Whether this actually triggers a SEGV depends on the implementation of memcmp: whether it compares only byte-at- a-time, and from left to right (no SEGV) or some other way. */ size_t n = quotearg_buffer (buf, sizeof buf, z, SIZE_MAX, NULL); ASSERT (n == s_len + 2 * q_len); ASSERT (memcmp (buf, q, sizeof buf) == 0); free (q); } } quotearg_free (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-quotearg.c�������������������������������������������������������0000664�0000000�0000000�00000007246�14110572173�0020422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include "quotearg.h" #include <locale.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "gettext.h" #include "macros.h" #if ENABLE_NLS # include "test-quotearg.h" static struct result_groups locale_results[] = { /* locale_quoting_style */ { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ}, { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ } }, /* clocale_quoting_style */ { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ }, { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ, LQ "a' b" RQ, LQ LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ } } }; #endif /* ENABLE_NLS */ int main (_GL_UNUSED int argc, char *argv[]) { #if ENABLE_NLS /* Clean up environment. */ unsetenv ("LANGUAGE"); unsetenv ("LC_ALL"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_CTYPE"); unsetenv ("LANG"); unsetenv ("OUTPUT_CHARSET"); /* This program part runs in a French UTF-8 locale. It uses the test-quotearg.mo message catalog. */ { const char *locale_name = getenv ("LOCALE"); if (locale_name != NULL && strcmp (locale_name, "none") != 0 && setenv ("LC_ALL", locale_name, 1) == 0 && setlocale (LC_ALL, "") != NULL) { textdomain ("test-quotearg"); bindtextdomain ("test-quotearg", getenv ("LOCALEDIR")); set_quoting_style (NULL, locale_quoting_style); compare_strings (use_quotearg_buffer, &locale_results[0].group1, false); compare_strings (use_quotearg, &locale_results[0].group2, false); compare_strings (use_quotearg_colon, &locale_results[0].group3, false); set_quoting_style (NULL, clocale_quoting_style); compare_strings (use_quotearg_buffer, &locale_results[1].group1, false); compare_strings (use_quotearg, &locale_results[1].group2, false); compare_strings (use_quotearg_colon, &locale_results[1].group3, false); quotearg_free (); return 0; } } fputs ("Skipping test: no french Unicode locale is installed\n", stderr); return 77; #else fputs ("Skipping test: internationalization is disabled\n", stderr); return 77; #endif /* ENABLE_NLS */ } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-quotearg.h�������������������������������������������������������0000664�0000000�0000000�00000007450�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ struct result_strings { char const *str1; /* Translation of "". */ char const *str2; /* Translation of "\0""1\0". */ size_t len2; /* Length of str2. */ char const *str3; /* Translation of "simple". */ char const *str4; /* Translation of " \t\n'\"\033?""?/\\". */ char const *str5; /* Translation of "a:b". */ char const *str6; /* Translation of "a\\b". */ char const *str7; /* Translation of "a' b". */ char const *str8a; /* Translation of LQ RQ, in ASCII charset. */ char const *str8b; /* Translation of LQ RQ, in Latin1 or UTF-8 charset. */ }; struct result_groups { struct result_strings group1; /* Via quotearg_buffer. */ struct result_strings group2; /* Via quotearg{,_mem}. */ struct result_strings group3; /* Via quotearg_colon{,_mem}. */ }; /* These quotes are borrowed from a pt_PT.utf8 translation. */ # define LQ "\302\253" # define RQ "\302\273" # define LQ_ENC "\\302\\253" # define RQ_ENC "\\302\\273" # define RQ_ESC "\\\302\273" static struct result_strings inputs = { "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", "a' b", LQ RQ, NULL }; static void compare (char const *a, size_t la, char const *b, size_t lb) { ASSERT (la == lb); ASSERT (memcmp (a, b, la) == 0); ASSERT (b[lb] == '\0'); } static void compare_strings (char *(func) (char const *, size_t *), struct result_strings *results, bool ascii_only) { size_t len; char *p; len = 0; p = func (inputs.str1, &len); compare (results->str1, strlen (results->str1), p, len); len = inputs.len2; p = func (inputs.str2, &len); compare (results->str2, results->len2, p, len); len = SIZE_MAX; p = func (inputs.str3, &len); compare (results->str3, strlen (results->str3), p, len); len = strlen (inputs.str4); p = func (inputs.str4, &len); compare (results->str4, strlen (results->str4), p, len); len = SIZE_MAX; p = func (inputs.str5, &len); compare (results->str5, strlen (results->str5), p, len); len = strlen (inputs.str6); p = func (inputs.str6, &len); compare (results->str6, strlen (results->str6), p, len); len = strlen (inputs.str7); p = func (inputs.str7, &len); compare (results->str7, strlen (results->str7), p, len); len = strlen (inputs.str8a); p = func (inputs.str8a, &len); if (ascii_only) compare (results->str8a, strlen (results->str8a), p, len); else compare (results->str8b, strlen (results->str8b), p, len); } static char * use_quotearg_buffer (const char *str, size_t *len) { static char buf[100]; size_t size; memset (buf, 0xa5, 100); size = quotearg_buffer (buf, 100, str, *len, NULL); *len = size; ASSERT ((unsigned char) buf[size + 1] == 0xa5); return buf; } static char * use_quotearg (const char *str, size_t *len) { char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len); *len = strlen (p); return p; } static char * use_quotearg_colon (const char *str, size_t *len) { char *p = (*len == SIZE_MAX ? quotearg_colon (str) : quotearg_colon_mem (str, *len)); *len = strlen (p); return p; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-quotearg.sh������������������������������������������������������0000775�0000000�0000000�00000002366�14110572173�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Choose an existing locale. The locale encoding does not matter; see the # comment in test-quotearg.po. if test $LOCALE_FR_UTF8 != none; then locale=$LOCALE_FR_UTF8 else if test $LOCALE_FR != none; then locale=$LOCALE_FR else locale=none fi fi # Work around a limitation of gettext() on native Windows in gettext 0.18.1: # the locale identifiers in the environment variables LC_ALL etc. have to # be in Unix conventions, not in native Window conventions. if test $locale = French_France.65001; then locale=fr_FR.UTF-8 fi if test $locale = French_France.1252; then locale=fr_FR.CP1252 fi # Work around a bug on Solaris 11 systems with no GNU gettext installed. # See gettext/gettext-tools/tests/init.cfg. localedir="$srcdir/testlocale" if test $locale != none && test $locale != fr; then case "$host_os" in solaris2.11) mkdir -p testlocale cp -R "$srcdir/testlocale/fr" "testlocale/$locale" localedir="testlocale" ;; esac fi LOCALE=$locale LOCALEDIR="$localedir" \ ${CHECKER} ./test-quotearg${EXEEXT} result=$? if test $locale != none && test $locale != fr; then case "$host_os" in solaris2.11) rm -rf "testlocale/$locale" rmdir testlocale 2>/dev/null ;; esac fi exit $result ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-raise.c����������������������������������������������������������0000664�0000000�0000000�00000002666�14110572173�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test raising a signal. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <signal.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (raise, int, (int)); #include <stdlib.h> #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. */ static _Noreturn void handler (int sig) { _exit (0); } int main (void) { /* Test behaviour for invalid argument. */ ASSERT (raise (-1) != 0); /* Test behaviour for SIGINT. */ ASSERT (signal (SIGINT, handler) != SIG_ERR); raise (SIGINT); /* We should not get here, because the handler takes away the control. */ exit (1); } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-random.c���������������������������������������������������������0000664�0000000�0000000�00000002540�14110572173�0020043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test random. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-random_r.c�������������������������������������������������������0000664�0000000�0000000�00000003540�14110572173�0020365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test random_r. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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" 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rawmemchr.c������������������������������������������������������0000664�0000000�0000000�00000004755�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (rawmemchr, void *, (void const *, int)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define RAWMEMCHR (char *) rawmemchr int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (RAWMEMCHR (input, 'a') == input); ASSERT (RAWMEMCHR (input, 'b') == input + 1); ASSERT (RAWMEMCHR (input, 'c') == input + 2); ASSERT (RAWMEMCHR (input, 'd') == input + 1026); ASSERT (RAWMEMCHR (input + 1, 'a') == input + n - 1); ASSERT (RAWMEMCHR (input + 1, 'e') == input + n - 2); ASSERT (RAWMEMCHR (input + 1, 0x789abc00 | 'e') == input + n - 2); ASSERT (RAWMEMCHR (input, '\0') == input + n); /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (RAWMEMCHR (input + i, j) == input + i + j); } } } /* Ensure that no unaligned oversized reads occur. */ { char *page_boundary = (char *) zerosize_ptr (); size_t i; if (!page_boundary) page_boundary = input + 4096; memset (page_boundary - 512, '1', 511); page_boundary[-1] = '2'; for (i = 1; i <= 512; i++) ASSERT (RAWMEMCHR (page_boundary - i, (i * 0x01010100) | '2') == page_boundary - 1); } free (input); return 0; } �������������������gnulib-20210822~d383792/tests/test-rbtree_list.c����������������������������������������������������0000664�0000000�0000000�00000045276�14110572173�0021116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_rbtree_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "macros.h" extern void gl_rbtree_list_check_invariants (gl_list_t list); static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { gl_rbtree_list_check_invariants (list2); gl_rbtree_list_check_invariants (list3); check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_RBTREE_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_RBTREE_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rbtree_omap.c����������������������������������������������������0000664�0000000�0000000�00000007551�14110572173�0021071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered map data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2018. This 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 "gl_rbtree_omap.h" #include <stdlib.h> #include <string.h> #include "gl_array_omap.h" #include "macros.h" extern void gl_rbtree_omap_check_invariants (gl_omap_t set); static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_omap_t map1, gl_omap_t map2) { size_t n = gl_omap_size (map1); gl_omap_iterator_t iter1, iter2; const void *key1; const void *value1; const void *key2; const void *value2; size_t i; iter1 = gl_omap_iterator (map1); iter2 = gl_omap_iterator (map2); for (i = 0; i < n; i++) { ASSERT (gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (gl_omap_iterator_next (&iter2, &key2, &value2)); ASSERT (key1 == key2); ASSERT (value1 == value2); } ASSERT (!gl_omap_iterator_next (&iter1, &key1, &value1)); ASSERT (!gl_omap_iterator_next (&iter2, &key2, &value2)); gl_omap_iterator_free (&iter1); gl_omap_iterator_free (&iter2); } static void check_all (gl_omap_t map1, gl_omap_t map2) { gl_rbtree_omap_check_invariants (map2); check_equals (map1, map2); } int main (int argc, char *argv[]) { gl_omap_t map1, map2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create map1. */ map1 = gl_omap_nx_create_empty (GL_ARRAY_OMAP, (gl_mapkey_compar_fn) strcmp, NULL, NULL); ASSERT (map1 != NULL); /* Create map2. */ map2 = gl_omap_nx_create_empty (GL_RBTREE_OMAP, (gl_mapkey_compar_fn) strcmp, NULL, NULL); ASSERT (map2 != NULL); check_all (map1, map2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_omap_nx_put (map1, key, value) == gl_omap_nx_put (map2, key, value)); check_all (map1, map2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (3); switch (operation) { case 0: { const char *key = RANDOM_OBJECT (); ASSERT (gl_omap_get (map1, key) == gl_omap_get (map2, key)); } break; case 1: { const char *key = RANDOM_OBJECT (); const char *value = RANDOM_OBJECT (); ASSERT (gl_omap_nx_put (map1, key, value) == gl_omap_nx_put (map2, key, value)); } break; case 2: { const char *key = RANDOM_OBJECT (); ASSERT (gl_omap_remove (map1, key) == gl_omap_remove (map2, key)); } break; } check_all (map1, map2); } gl_omap_free (map1); gl_omap_free (map2); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rbtree_oset.c����������������������������������������������������0000664�0000000�0000000�00000012000�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_rbtree_oset.h" #include <stdlib.h> #include <string.h> #include "gl_array_oset.h" #include "macros.h" #include "test-oset-update.h" extern void gl_rbtree_oset_check_invariants (gl_oset_t set); static const char *objects[30] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" }; #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_oset_t set1, gl_oset_t set2) { size_t n = gl_oset_size (set1); gl_oset_iterator_t iter1, iter2; const void *elt1; const void *elt2; size_t i; iter1 = gl_oset_iterator (set1); iter2 = gl_oset_iterator (set2); for (i = 0; i < n; i++) { ASSERT (gl_oset_iterator_next (&iter1, &elt1)); ASSERT (gl_oset_iterator_next (&iter2, &elt2)); ASSERT (elt1 == elt2); } ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); ASSERT (!gl_oset_iterator_next (&iter2, &elt2)); gl_oset_iterator_free (&iter1); gl_oset_iterator_free (&iter2); } static void check_all (gl_oset_t set1, gl_oset_t set2) { gl_rbtree_oset_check_invariants (set2); check_equals (set1, set2); } static bool is_at_least (const void *elt, const void *threshold) { return strcmp ((const char *) elt, (const char *) threshold) >= 0; } int main (int argc, char *argv[]) { gl_oset_t set1, set2; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (20); size_t i; unsigned int repeat; /* Create set1. */ set1 = gl_oset_nx_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set1 != NULL); /* Create set2. */ set2 = gl_oset_nx_create_empty (GL_RBTREE_OSET, (gl_setelement_compar_fn) strcmp, NULL); ASSERT (set2 != NULL); check_all (set1, set2); /* Initialize them. */ for (i = 0; i < initial_size; i++) { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == gl_oset_nx_add (set2, obj)); check_all (set1, set2); } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (4); switch (operation) { case 0: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_search (set1, obj) == gl_oset_search (set2, obj)); } break; case 1: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_nx_add (set1, obj) == gl_oset_nx_add (set2, obj)); } break; case 2: { const char *obj = RANDOM_OBJECT (); ASSERT (gl_oset_remove (set1, obj) == gl_oset_remove (set2, obj)); } break; case 3: { const char *obj = RANDOM_OBJECT (); gl_oset_iterator_t iter1 = gl_oset_iterator_atleast (set1, is_at_least, obj); gl_oset_iterator_t iter2 = gl_oset_iterator_atleast (set2, is_at_least, obj); const void *elt1; const void *elt2; /* Check the first two values that the iterator produces. Checking them all would make this part of the test dominate the run time of the test. */ bool havenext1 = gl_oset_iterator_next (&iter1, &elt1); bool havenext2 = gl_oset_iterator_next (&iter2, &elt2); ASSERT (havenext1 == havenext2); if (havenext1) { ASSERT (elt1 == elt2); havenext1 = gl_oset_iterator_next (&iter1, &elt1); havenext2 = gl_oset_iterator_next (&iter2, &elt2); ASSERT (havenext1 == havenext2); if (havenext1) ASSERT (elt1 == elt2); } gl_oset_iterator_free (&iter1); gl_oset_iterator_free (&iter2); } break; } check_all (set1, set2); } gl_oset_free (set1); gl_oset_free (set2); } test_update (GL_RBTREE_OSET); return 0; } gnulib-20210822~d383792/tests/test-rbtreehash_list.c������������������������������������������������0000664�0000000�0000000�00000046615�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 "gl_rbtreehash_list.h" #include <limits.h> #include <stdlib.h> #include <string.h> #include "gl_array_list.h" #include "macros.h" extern void gl_rbtreehash_list_check_invariants (gl_list_t list); static const char *objects[15] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" }; #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) static bool string_equals (const void *x1, const void *x2) { const char *s1 = x1; const char *s2 = x2; return strcmp (s1, s2) == 0; } /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t string_hash (const void *x) { const char *s = x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } #define RANDOM(n) (rand () % (n)) #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] static void check_equals (gl_list_t list1, gl_list_t list2) { size_t n, i; n = gl_list_size (list1); ASSERT (n == gl_list_size (list2)); for (i = 0; i < n; i++) { ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); } } static void check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_first_node (list1); gl_list_node_t node2 = gl_list_first_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_next_node (list1, node1); node2 = gl_list_next_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) { gl_list_node_t node1 = gl_list_last_node (list1); gl_list_node_t node2 = gl_list_last_node (list2); while (node1 != NULL && node2 != NULL) { ASSERT (gl_list_node_value (list1, node1) == gl_list_node_value (list2, node2)); node1 = gl_list_previous_node (list1, node1); node2 = gl_list_previous_node (list2, node2); } ASSERT ((node1 == NULL) == (node2 == NULL)); } static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { gl_rbtreehash_list_check_invariants (list2); gl_rbtreehash_list_check_invariants (list3); check_equals (list1, list2); check_equals (list1, list3); } int main (int argc, char *argv[]) { gl_list_t list1, list2, list3; /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_RBTREEHASH_LIST, string_equals, string_hash, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); /* Create list3. */ list3 = gl_list_nx_create (GL_RBTREEHASH_LIST, string_equals, string_hash, NULL, true, initial_size, contents); ASSERT (list3 != NULL); check_all (list1, list2, list3); check_equals_by_forward_iteration (list1, list2); check_equals_by_backward_iteration (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); node3 = gl_list_nx_set_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); if (node1 == NULL) { ASSERT (node2 == NULL); ASSERT (node3 == NULL); } else { ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2, index3; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); index3 = gl_list_indexof (list3, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); ASSERT (index3 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (index3 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (gl_list_get_at (list3, index3) == obj); ASSERT (index2 == index1); ASSERT (index3 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); ASSERT (gl_list_get_at (list3, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_last (list3, obj); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); node3 = gl_list_nx_add_first (list3, obj2); ASSERT (node3 != NULL); node3 = gl_list_nx_add_before (list3, node3, obj0); ASSERT (node3 != NULL); node3 = gl_list_nx_add_after (list3, node3, obj1); ASSERT (node3 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_node_value (list3, node3) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); ASSERT (gl_list_get_at (list3, 0) == obj0); ASSERT (gl_list_get_at (list3, 1) == obj1); ASSERT (gl_list_get_at (list3, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2, node3; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); node3 = gl_list_nx_add_at (list3, index, obj); ASSERT (node3 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list3, index) == obj); ASSERT (gl_list_node_value (list3, node3) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) == gl_list_get_at (list2, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) == gl_list_get_at (list2, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2, node3; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); node3 = gl_list_search (list3, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (node3 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_remove_node (list3, node3)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_remove_at (list3, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: /* remove first element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_first (list1); ASSERT (gl_list_remove_first (list2) == removed1); ASSERT (gl_list_remove_first (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 12: /* remove last element */ { size_t n = gl_list_size (list1); bool removed1 = gl_list_remove_last (list1); ASSERT (gl_list_remove_last (list2) == removed1); ASSERT (gl_list_remove_last (list3) == removed1); ASSERT (gl_list_size (list1) == n - (int) removed1); } break; case 13: case 14: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 15: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (!gl_list_remove (list3, obj)); ASSERT (gl_list_size (list1) == n); } break; case 16: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); iter3 = gl_list_iterator (list3); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; case 17: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2, iter3; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); iter3 = gl_list_iterator_from_to (list3, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); ASSERT (gl_list_get_at (list3, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); gl_list_iterator_free (&iter3); } break; } check_all (list1, list2, list3); } gl_list_free (list1); gl_list_free (list2); gl_list_free (list3); free (contents); } return 0; } �������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-read-file.c������������������������������������������������������0000664�0000000�0000000�00000006250�14110572173�0020415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2006-2007, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 "read-file.h" #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "macros.h" #define FILE1 "/etc/resolv.conf" #define FILE2 "/dev/null" static int test_read_file (int flags) { struct stat statbuf; int err = 0; /* We can perform the test only if the file exists and is readable. Test whether it exists, then assume it is world-readable. */ if (stat (FILE1, &statbuf) >= 0) { size_t len; char *out = read_file (FILE1, flags, &len); if (!out) { perror ("Could not read file"); err = 1; } else { if (out[len] != '\0') { perror ("BAD: out[len] not zero"); err = 1; } if (S_ISREG (statbuf.st_mode)) { /* FILE1 is a regular file or a symlink to a regular file. */ if (len != statbuf.st_size) { fprintf (stderr, "Read %lu from %s...\n", (unsigned long) len, FILE1); err = 1; } } else { /* Assume FILE1 is not empty. */ if (len == 0) { fprintf (stderr, "Read nothing from %s\n", FILE1); err = 1; } } free (out); } } /* We can perform the test only if the file exists and is readable. Test whether it exists, then assume it is world-readable. */ if (stat (FILE2, &statbuf) >= 0) { size_t len; char *out = read_file (FILE2, flags, &len); if (!out) { perror ("Could not read file"); err = 1; } else { if (out[len] != '\0') { perror ("BAD: out[len] not zero"); err = 1; } /* /dev/null should always be empty. Ignore statbuf.st_size, since it is not a regular file. */ if (len != 0) { fprintf (stderr, "Read %lu from %s...\n", (unsigned long) len, FILE2); err = 1; } free (out); } } return err; } int main (void) { ASSERT (!test_read_file (0)); ASSERT (!test_read_file (RF_BINARY)); ASSERT (!test_read_file (RF_SENSITIVE)); ASSERT (!test_read_file (RF_BINARY | RF_SENSITIVE)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-read.c�����������������������������������������������������������0000664�0000000�0000000�00000003461�14110572173�0017501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the read() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (read, ssize_t, (int, void *, size_t)); #include <errno.h> #include <fcntl.h> #include <string.h> #include "macros.h" int main (void) { const char *filename = "test-read.tmp"; int fd; /* Create a file with a simple contents. */ fd = open (filename, O_CREAT | O_WRONLY, 0600); ASSERT (fd >= 0); ASSERT (write (fd, "Hello World", 11) == 11); ASSERT (close (fd) == 0); /* Read from the middle of the file. */ fd = open (filename, O_RDONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 6, SEEK_SET) == 6); { char buf[10]; ssize_t ret = read (fd, buf, 10); ASSERT (ret == 5); ASSERT (memcmp (buf, "World", 5) == 0); } ASSERT (close (fd) == 0); /* Test behaviour for invalid file descriptors. */ { char byte; errno = 0; ASSERT (read (-1, &byte, 1) == -1); ASSERT (errno == EBADF); } { char byte; close (99); errno = 0; ASSERT (read (99, &byte, 1) == -1); ASSERT (errno == EBADF); } /* Clean up. */ unlink (filename); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-readlink.c�������������������������������������������������������0000664�0000000�0000000�00000002463�14110572173�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (readlink, ssize_t, (char const *, char *, size_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-readlink.t" #include "test-readlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_readlink (readlink, true); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-readlink.h�������������������������������������������������������0000664�0000000�0000000�00000010131�14110572173�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both readlink(a,b,c) and readlinkat(AT_FDCWD,a,b,c). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_readlink (ssize_t (*func) (char const *, char *, size_t), bool print) { char buf[80]; /* Sanity checks of failures. Mingw lacks symlink, but readlink can still distinguish between various errors. */ memset (buf, 0xff, sizeof buf); errno = 0; ASSERT (func ("no_such", buf, sizeof buf) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", buf, sizeof buf) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("", buf, sizeof buf) == -1); ASSERT (errno == ENOENT || errno == EINVAL); errno = 0; ASSERT (func (".", buf, sizeof buf) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (func ("./", buf, sizeof buf) == -1); ASSERT (errno == EINVAL); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func (BASE "file", buf, sizeof buf) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (func (BASE "file/", buf, sizeof buf) == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); /* AIX yields EINVAL */ /* Now test actual symlinks. */ if (symlink (BASE "dir", BASE "link")) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; ASSERT (func (BASE "link/", buf, sizeof buf) == -1); ASSERT (errno == EINVAL); ASSERT (symlink (BASE "link", BASE "link2") == 0); errno = 0; ASSERT (func (BASE "link2/", buf, sizeof buf) == -1); ASSERT (errno == EINVAL); ASSERT (unlink (BASE "link2") == 0); ASSERT (symlink (BASE "file", BASE "link2") == 0); errno = 0; ASSERT (func (BASE "link2/", buf, sizeof buf) == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); /* AIX yields EINVAL */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link2") == 0); { /* Up till now, no readlink has been successful, so buf should be unchanged. */ int i; for (i = 0; i < sizeof buf; i++) ASSERT (buf[i] == (char) 0xff); } { size_t len = strlen (BASE "dir"); /* When passing too small of a buffer, expect the truncated length, or an ERANGE failure. However, a size of 0 is not portable enough to test. */ ssize_t result; errno = 0; result = readlink (BASE "link", buf, 1); if (result == -1) { ASSERT (errno == ERANGE); ASSERT (buf[0] == (char) 0xff); } else { ASSERT (result == 1); ASSERT (buf[0] == BASE[0]); } ASSERT (buf[1] == (char) 0xff); ASSERT (func (BASE "link", buf, len) == len); ASSERT (strncmp (buf, BASE "dir", len) == 0); ASSERT (buf[len] == (char) 0xff); ASSERT (func (BASE "link", buf, sizeof buf) == len); ASSERT (strncmp (buf, BASE "dir", len) == 0); /* POSIX says rest of buf is unspecified; but in practice, it is either left alone, or NUL-terminated. */ ASSERT (buf[len] == '\0' || buf[len] == (char) 0xff); } ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-readlinkat.c�����������������������������������������������������0000664�0000000�0000000�00000007003�14110572173�0020700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlinkat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (readlinkat, ssize_t, (int, char const *, char *, size_t)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #ifndef HAVE_SYMLINK # define HAVE_SYMLINK 0 #endif #define BASE "test-readlinkat.t" #include "test-readlink.h" static int dfd = AT_FDCWD; static ssize_t do_readlink (char const *name, char *buf, size_t len) { return readlinkat (dfd, name, buf, len); } int main (void) { char buf[80]; int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (readlinkat (-1, "foo", buf, sizeof buf) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (readlinkat (99, "foo", buf, sizeof buf) == -1); ASSERT (errno == EBADF); } /* Perform same checks as counterpart functions. */ result = test_readlink (do_readlink, false); dfd = openat (AT_FDCWD, ".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_readlink (do_readlink, false) == result); /* Now perform some cross-directory checks. Skip everything else on mingw. */ if (HAVE_SYMLINK) { const char *contents = "don't matter!"; ssize_t exp = strlen (contents); /* Create link while cwd is '.', then read it in '..'. */ ASSERT (symlinkat (contents, AT_FDCWD, BASE "link") == 0); errno = 0; ASSERT (symlinkat (contents, dfd, BASE "link") == -1); ASSERT (errno == EEXIST); ASSERT (chdir ("..") == 0); errno = 0; ASSERT (readlinkat (AT_FDCWD, BASE "link", buf, sizeof buf) == -1); ASSERT (errno == ENOENT); ASSERT (readlinkat (dfd, BASE "link", buf, sizeof buf) == exp); ASSERT (strncmp (contents, buf, exp) == 0); ASSERT (unlinkat (dfd, BASE "link", 0) == 0); /* Create link while cwd is '..', then read it in '.'. */ ASSERT (symlinkat (contents, dfd, BASE "link") == 0); ASSERT (fchdir (dfd) == 0); errno = 0; ASSERT (symlinkat (contents, AT_FDCWD, BASE "link") == -1); ASSERT (errno == EEXIST); buf[0] = '\0'; ASSERT (readlinkat (AT_FDCWD, BASE "link", buf, sizeof buf) == exp); ASSERT (strncmp (contents, buf, exp) == 0); buf[0] = '\0'; ASSERT (readlinkat (dfd, BASE "link", buf, sizeof buf) == exp); ASSERT (strncmp (contents, buf, exp) == 0); ASSERT (unlink (BASE "link") == 0); } ASSERT (close (dfd) == 0); if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-readtokens.c�����������������������������������������������������0000664�0000000�0000000�00000004504�14110572173�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the readtokens module. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <stdbool.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <stdio.h> #include <unistd.h> #include "readtokens.h" #include "closeout.h" #include "macros.h" static void basic (void) { char const *filename = "in.827"; int fd = open (filename, O_CREAT | O_WRONLY, 0600); ASSERT (fd >= 0); ASSERT (write (fd, "a|b;c+d", 7) == 7); ASSERT (close (fd) == 0); { token_buffer tb; FILE *fp = fopen (filename, "r"); ASSERT (fp); init_tokenbuffer (&tb); ASSERT (readtoken (fp, "|;", 2, &tb) == 1 && tb.buffer[0] == 'a'); ASSERT (readtoken (fp, "|;", 2, &tb) == 1 && tb.buffer[0] == 'b'); ASSERT (readtoken (fp, "+", 1, &tb) == 1 && tb.buffer[0] == 'c'); ASSERT (readtoken (fp, "-", 1, &tb) == 1 && tb.buffer[0] == 'd'); ASSERT (readtoken (fp, "%", 0, &tb) == (size_t) -1); ASSERT ( ! ferror (fp)); ASSERT (fclose (fp) == 0); } } int main (int argc, char **argv) { token_buffer tb; char const *delim; size_t delim_len; atexit (close_stdout); if (argc == 1) { basic (); return 0; } init_tokenbuffer (&tb); if (argc != 2) return 99; delim = argv[1]; delim_len = strlen (delim); if (STREQ (delim, "\\0")) { delim = ""; delim_len = 1; } while (1) { size_t token_length = readtoken (stdin, delim, delim_len, &tb); if (token_length == (size_t) -1) break; fwrite (tb.buffer, 1, token_length, stdout); putchar (':'); } putchar ('\n'); free (tb.buffer); ASSERT ( ! ferror (stdin)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-readtokens.sh����������������������������������������������������0000775�0000000�0000000�00000001114�14110572173�0021111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 ${CHECKER} test-readtokens || fail=1 # Simplest case. echo a:b:c: > exp || fail=1 printf a:b:c | ${CHECKER} test-readtokens : > out 2>&1 || fail=1 compare exp out || fail=1 # Use NUL as the delimiter. echo a:b:c: > exp || fail=1 printf 'a\0b\0c' | ${CHECKER} test-readtokens '\0' > out 2>&1 || fail=1 compare exp out || fail=1 # Two delimiter bytes, and adjacent delimiters in the input. echo a:b:c: > exp || fail=1 printf a:-:b-:c:: | ${CHECKER} test-readtokens :- > out 2>&1 || fail=1 compare exp out || fail=1 Exit $fail ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-realloc-gnu.c����������������������������������������������������0000664�0000000�0000000�00000002677�14110572173�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of realloc function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" int main (int argc, char **argv) { /* Check that realloc (NULL, 0) is not a NULL pointer. */ void *volatile p = realloc (NULL, 0); ASSERT (p != NULL); /* Check that realloc (p, n) fails when p is non-null and n exceeds PTRDIFF_MAX. */ if (PTRDIFF_MAX < SIZE_MAX) { size_t one = argc != 12345; p = realloc (p, PTRDIFF_MAX + one); ASSERT (p == NULL); /* Avoid a test failure due to glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=27870>. */ if (!getenv ("MALLOC_CHECK_")) ASSERT (errno == ENOMEM); } free (p); return 0; } �����������������������������������������������������������������gnulib-20210822~d383792/tests/test-reallocarray.c���������������������������������������������������0000664�0000000�0000000�00000003226�14110572173�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of reallocarray function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "signature.h" SIGNATURE_CHECK (reallocarray, void *, (void *, size_t, size_t)); #include "macros.h" int main () { /* Check that reallocarray fails when requested to allocate a block of memory larger than PTRDIFF_MAX or SIZE_MAX bytes. */ for (size_t n = 2; n != 0; n <<= 1) { void *volatile p = NULL; if (PTRDIFF_MAX / n + 1 <= SIZE_MAX) { p = reallocarray (p, PTRDIFF_MAX / n + 1, n); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } p = reallocarray (p, SIZE_MAX / n + 1, n); ASSERT (p == NULL); ASSERT (errno == ENOMEM || errno == EOVERFLOW /* NetBSD */); /* Reallocarray should not crash with zero sizes. */ p = reallocarray (p, 0, n); p = reallocarray (p, n, 0); free (p); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-recv.c�����������������������������������������������������������0000664�0000000�0000000�00000002444�14110572173�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the recv() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (recv, ssize_t, (int, void *, size_t, int)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { char byte; errno = 0; ASSERT (recv (-1, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } { char byte; close (99); errno = 0; ASSERT (recv (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-recvfrom.c�������������������������������������������������������0000664�0000000�0000000�00000003173�14110572173�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the recvfrom() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (recvfrom, ssize_t, (int, void *, size_t, int, struct sockaddr *, socklen_t *)); #include <errno.h> #include <netinet/in.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { char byte; struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (recvfrom (-1, &byte, 1, 0, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { char byte; struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (recvfrom (99, &byte, 1, 0, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-regex-quote.c����������������������������������������������������0000664�0000000�0000000�00000004740�14110572173�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of constructing a regular expression from a literal string. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "regex-quote.h" #include <string.h> #include "regex.h" #include "xalloc.h" #include "macros.h" static void check (const char *literal, int cflags, const char *expected) { struct regex_quote_spec spec; char *result; size_t length; spec = regex_quote_spec_posix (cflags, false); result = regex_quote (literal, &spec); ASSERT (strcmp (result, expected) == 0); length = regex_quote_length (literal, &spec); ASSERT (length == strlen (result)); free (result); result = (char *) xmalloc (1 + length + 1 + 1); result[0] = '^'; strcpy (regex_quote_copy (result + 1, literal, &spec), "$"); { regex_t regex; regmatch_t match[1]; ASSERT (regcomp (®ex, result, cflags) == 0); ASSERT (regexec (®ex, literal, 1, match, 0) == 0); ASSERT (match[0].rm_so == 0); ASSERT (match[0].rm_eo == strlen (literal)); regfree (®ex); } free (result); spec = regex_quote_spec_posix (cflags, true); result = regex_quote (literal, &spec); length = regex_quote_length (literal, &spec); ASSERT (length == strlen (result)); { regex_t regex; regmatch_t match[1]; ASSERT (regcomp (®ex, result, cflags) == 0); ASSERT (regexec (®ex, literal, 1, match, 0) == 0); ASSERT (match[0].rm_so == 0); ASSERT (match[0].rm_eo == strlen (literal)); regfree (®ex); } free (result); } static void test_bre (void) { check ("aBc", 0, "aBc"); check ("(foo[$HOME])", 0, "(foo\\[\\$HOME\\])"); } static void test_ere (void) { check ("aBc", REG_EXTENDED, "aBc"); check ("(foo[$HOME])", REG_EXTENDED, "\\(foo\\[\\$HOME\\]\\)"); } int main () { test_bre (); test_ere (); return 0; } ��������������������������������gnulib-20210822~d383792/tests/test-regex.c����������������������������������������������������������0000664�0000000�0000000�00000042726�14110572173�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test regular expressions Copyright 1996-2001, 2003-2021 Free Software Foundation, Inc. This 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 "regex.h" #include <locale.h> #include <limits.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wctype.h> #if HAVE_DECL_ALARM # include <unistd.h> # include <signal.h> #endif #include "localcharset.h" static int exit_status; static void report_error (char const *format, ...) { va_list args; va_start (args, format); fprintf (stderr, "test-regex: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); va_end (args); exit_status = 1; } /* Check whether it's really a UTF-8 locale. On mingw, setlocale (LC_ALL, "en_US.UTF-8") succeeds but returns "English_United States.1252", with locale_charset () returning "CP1252". */ static int really_utf8 (void) { return strcmp (locale_charset (), "UTF-8") == 0; } /* Tests supposed to match; copied from glibc posix/bug-regex11.c. */ static struct { const char *pattern; const char *string; int flags, nmatch; regmatch_t rm[5]; } const tests[] = { /* Test for newline handling in regex. */ { "[^~]*~", "\nx~y", 0, 2, { { 0, 3 }, { -1, -1 } } }, /* Other tests. */ { "a(.*)b", "a b", REG_EXTENDED, 2, { { 0, 3 }, { 1, 2 } } }, { ".*|\\([KIO]\\)\\([^|]*\\).*|?[KIO]", "10~.~|P|K0|I10|O16|?KSb", 0, 3, { { 0, 21 }, { 15, 16 }, { 16, 18 } } }, { ".*|\\([KIO]\\)\\([^|]*\\).*|?\\1", "10~.~|P|K0|I10|O16|?KSb", 0, 3, { { 0, 21 }, { 8, 9 }, { 9, 10 } } }, { "^\\(a*\\)\\1\\{9\\}\\(a\\{0,9\\}\\)\\([0-9]*;.*[^a]\\2\\([0-9]\\)\\)", "a1;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9aa2aa1a0", 0, 5, { { 0, 67 }, { 0, 0 }, { 0, 1 }, { 1, 67 }, { 66, 67 } } }, /* Test for BRE expression anchoring. POSIX says just that this may match; in glibc regex it always matched, so avoid changing it. */ { "\\(^\\|foo\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } }, { "\\(foo\\|^\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } }, /* In ERE this must be treated as an anchor. */ { "(^|foo)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } }, { "(foo|^)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } }, /* Here ^ cannot be treated as an anchor according to POSIX. */ { "(^|foo)bar", "(^|foo)bar", 0, 2, { { 0, 10 }, { -1, -1 } } }, { "(foo|^)bar", "(foo|^)bar", 0, 2, { { 0, 10 }, { -1, -1 } } }, /* More tests on backreferences. */ { "()\\1", "x", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } }, { "()x\\1", "x", REG_EXTENDED, 2, { { 0, 1 }, { 0, 0 } } }, { "()\\1*\\1*", "", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } }, { "([0-9]).*\\1(a*)", "7;7a6", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } }, { "([0-9]).*\\1(a*)", "7;7a", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } }, { "(b)()c\\1", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 1 }, { 1, 1 } } }, { "()(b)c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } }, { "a(b)()c\\1", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 2 }, { 2, 2 } } }, { "a()(b)c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } }, { "()(b)\\1c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } }, { "(b())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 1 } } }, { "a()(b)\\1c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } }, { "a()d(b)\\1c\\2", "adbcb", REG_EXTENDED, 3, { { 0, 5 }, { 1, 1 }, { 2, 3 } } }, { "a(b())\\2\\1", "abbbb", REG_EXTENDED, 3, { { 0, 3 }, { 1, 2 }, { 2, 2 } } }, { "(bb())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 4 }, { 0, 2 }, { 2, 2 } } }, { "^([^,]*),\\1,\\1$", "a,a,a", REG_EXTENDED, 2, { { 0, 5 }, { 0, 1 } } }, { "^([^,]*),\\1,\\1$", "ab,ab,ab", REG_EXTENDED, 2, { { 0, 8 }, { 0, 2 } } }, { "^([^,]*),\\1,\\1,\\1$", "abc,abc,abc,abc", REG_EXTENDED, 2, { { 0, 15 }, { 0, 3 } } }, { "^(.?)(.?)(.?)(.?)(.?).?\\5\\4\\3\\2\\1$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "abcdedcba", REG_EXTENDED, 1, { { 0, 9 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "ababababa", REG_EXTENDED, 1, { { 0, 9 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$", "ababababa", REG_EXTENDED, 1, { { 0, 9 } } }, /* Test for *+ match. */ { "^a*+(.)", "ab", REG_EXTENDED, 2, { { 0, 2 }, { 1, 2 } } }, /* Test for ** match. */ { "^(a*)*(.)", "ab", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 2 } } }, }; static void bug_regex11 (void) { regex_t re; regmatch_t rm[5]; size_t i; int n; for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) { n = regcomp (&re, tests[i].pattern, tests[i].flags); if (n != 0) { char buf[500]; regerror (n, &re, buf, sizeof (buf)); report_error ("%s: regcomp %zd failed: %s", tests[i].pattern, i, buf); continue; } if (regexec (&re, tests[i].string, tests[i].nmatch, rm, 0)) { report_error ("%s: regexec %zd failed", tests[i].pattern, i); regfree (&re); continue; } for (n = 0; n < tests[i].nmatch; ++n) if (rm[n].rm_so != tests[i].rm[n].rm_so || rm[n].rm_eo != tests[i].rm[n].rm_eo) { if (tests[i].rm[n].rm_so == -1 && tests[i].rm[n].rm_eo == -1) break; report_error ("%s: regexec %zd match failure rm[%d] %d..%d", tests[i].pattern, i, n, (int) rm[n].rm_so, (int) rm[n].rm_eo); break; } regfree (&re); } } int main (void) { static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; #if HAVE_DECL_ALARM /* In case a bug causes glibc to go into an infinite loop. The tests should take less than 10 s on a reasonably modern CPU. */ int alarm_value = 1000; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif bug_regex11 (); if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != -1) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (really_utf8 ()) { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (! setlocale (LC_ALL, "C")) { report_error ("setlocale \"C\" failed"); return exit_status; } } if (setlocale (LC_ALL, "tr_TR.UTF-8")) { if (really_utf8 () && towupper (L'i') == 0x0130 /* U+0130; see below. */) { re_set_syntax (RE_SYNTAX_GREP | RE_ICASE); memset (®ex, 0, sizeof regex); static char const pat[] = "i"; s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { /* UTF-8 encoding of U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE. In Turkish, this is the upper-case equivalent of ASCII "i". Older versions of Gnulib failed to match "i" to U+0130 when ignoring case in Turkish <https://bugs.gnu.org/43577>. */ static char const data[] = "\xc4\xb0"; memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != 0) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (! setlocale (LC_ALL, "C")) { report_error ("setlocale \"C\" failed"); return exit_status; } } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); static char const pat_3957[] = "a[^x]b"; s = re_compile_pattern (pat_3957, sizeof pat_3957 - 1, ®ex); if (s) report_error ("%s: %s", pat_3957, s); else { /* This should fail, but succeeds for glibc-2.5. */ memset (®s, 0, sizeof regs); static char const data[] = "a\nb"; i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != -1) report_error ("re_search '%s' on '%s' returned %d", pat_3957, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; static char const pat75[] = "a[[:@:>@:]]b\n"; s = re_compile_pattern (pat75, sizeof pat75 - 1, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { report_error ("re_compile_pattern: failed to reject '%s'", pat75); regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); static char const pat_b_a[] = "a[b-a]"; s = re_compile_pattern (pat_b_a, sizeof pat_b_a - 1, ®ex); if (s == 0) { report_error ("re_compile_pattern: failed to reject '%s'", pat_b_a); regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); static char const pat_213[] = "{1"; s = re_compile_pattern (pat_213, sizeof pat_213 - 1, ®ex); if (s) report_error ("%s: %s", pat_213, s); else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); static char const pat_stolfi[] = "[an\371]*n"; s = re_compile_pattern (pat_stolfi, sizeof pat_stolfi - 1, ®ex); if (s) report_error ("%s: %s", pat_stolfi, s); /* This should match, but does not for glibc-2.2.1. */ else { memset (®s, 0, sizeof regs); static char const data[] = "an"; i = re_match (®ex, data, sizeof data - 1, 0, ®s); if (i != 2) report_error ("re_match '%s' on '%s' at 2 returned %d", pat_stolfi, data, i); regfree (®ex); free (regs.start); free (regs.end); } memset (®ex, 0, sizeof regex); static char const pat_x[] = "x"; s = re_compile_pattern (pat_x, sizeof pat_x - 1, ®ex); if (s) report_error ("%s: %s", pat_x, s); /* glibc-2.2.93 does not work with a negative RANGE argument. */ else { memset (®s, 0, sizeof regs); static char const data[] = "wxy"; i = re_search (®ex, data, sizeof data - 1, 2, -2, ®s); if (i != 1) report_error ("re_search '%s' on '%s' returned %d", pat_x, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat_x, 1, ®ex); if (s) report_error ("%s: %s", pat_x, s); else { memset (®s, 0, sizeof regs); static char const data[] = "WXY"; i = re_search (®ex, data, sizeof data - 1, 0, 3, ®s); if (i < 0) report_error ("re_search '%s' on '%s' returned %d", pat_x, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\(a*\\)*a*\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) report_error ("%s: %s", pat_sub2, s); else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) report_error ("re_search '%s' on '%s' returned %d", pat_sub2, data, i); else if (regs.num_regs < 2) report_error ("re_search '%s' on '%s' returned only %d registers", pat_sub2, data, (int) regs.num_regs); else if (! (regs.start[0] == 0 && regs.end[0] == 1)) report_error ("re_search '%s' on '%s' returned wrong match [%d,%d)", pat_sub2, data, (int) regs.start[0], (int) regs.end[0]); else if (! (regs.start[1] == 0 && regs.end[1] == 0)) report_error ("re_search '%s' on '%s' returned wrong submatch [%d,%d)", pat_sub2, data, (int) regs.start[1], (int) regs.end[1]); regfree (®ex); free (regs.start); free (regs.end); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); static char const pat_shelton[] = "[[:alnum:]_-]\\\\+$"; s = re_compile_pattern (pat_shelton, sizeof pat_shelton - 1, ®ex); if (s) report_error ("%s: %s", pat_shelton, s); else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (REG_STARTEND == 0) report_error ("REG_STARTEND is zero"); /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); static char const pat_badback[] = "0|()0|\\1|0"; s = re_compile_pattern (pat_badback, sizeof pat_badback, ®ex); if (!s && re_search (®ex, "x", 1, 0, 1, ®s) != -1) s = "mishandled invalid back reference"; if (s && strcmp (s, "Invalid back reference") != 0) report_error ("%s: %s", pat_badback, s); #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) report_error ("regoff_t values are too narrow"); #endif return exit_status; } ������������������������������������������gnulib-20210822~d383792/tests/test-remainder-ieee.c�������������������������������������������������0000664�0000000�0000000�00000002236�14110572173�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainder() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define REMAINDER remainder #include "test-remainder-ieee.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainder-ieee.h�������������������������������������������������0000664�0000000�0000000�00000004023�14110572173�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainder*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (REMAINDER (NAN, L_(2.0)))); ASSERT (ISNAN (REMAINDER (NAN, L_(0.0)))); ASSERT (ISNAN (REMAINDER (L_(2.0), NAN))); ASSERT (ISNAN (REMAINDER (L_(0.0), NAN))); ASSERT (ISNAN (REMAINDER (NAN, NAN))); /* y is zero. */ ASSERT (ISNAN (REMAINDER (L_(2.0), L_(0.0)))); ASSERT (ISNAN (REMAINDER (L_(2.0), MINUS_ZERO))); ASSERT (ISNAN (REMAINDER (INFINITY, L_(0.0)))); ASSERT (ISNAN (REMAINDER (INFINITY, MINUS_ZERO))); /* x is infinite. */ ASSERT (ISNAN (REMAINDER (INFINITY, L_(2.0)))); ASSERT (ISNAN (REMAINDER (INFINITY, - L_(2.0)))); /* The following tests originally applied to the FMOD function. They are not specified for the REMAINDER function by POSIX. */ /* x is zero. */ { DOUBLE z = REMAINDER (L_(0.0), L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = REMAINDER (MINUS_ZERO, L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } { DOUBLE z = REMAINDER (L_(0.0), - L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!signbit (z)); } { DOUBLE z = REMAINDER (MINUS_ZERO, - L_(2.0)); ASSERT (z == L_(0.0)); ASSERT (!!signbit (z) == !!signbit (MINUS_ZERO)); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainder.c������������������������������������������������������0000664�0000000�0000000�00000002471�14110572173�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainder() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (remainder, double, (double, double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define MAX_EXP DBL_MAX_EXP #define REMAINDER remainder #define RANDOM randomd #include "test-remainder.h" int main () { /* A particular value. */ x = 9.245907126; y = 3.141592654; z = remainder (x, y); ASSERT (z >= -0.178870837 && z <= -0.178870835); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainder.h������������������������������������������������������0000664�0000000�0000000�00000011276�14110572173�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainder*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static DOUBLE my_ldexp (DOUBLE x, int d) { for (; d > 0; d--) x *= L_(2.0); for (; d < 0; d++) x *= L_(0.5); return x; } static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = REMAINDER (x, y); ASSERT (z >= - L_(0.5) * y); ASSERT (z <= L_(0.5) * y); z -= x - (int) ((L_(2.0) * x + y) / (L_(2.0) * y)) * y; ASSERT (/* The common case. */ (z > - L_(2.0) * L_(16.0) / TWO_MANT_DIG && z < L_(2.0) * L_(16.0) / TWO_MANT_DIG) || /* rounding error: 2x+y / 2y computed too large */ (z > y - L_(2.0) * L_(16.0) / TWO_MANT_DIG && z < y + L_(2.0) * L_(16.0) / TWO_MANT_DIG) || /* rounding error: 2x+y / 2y computed too small */ (z > - y - L_(2.0) * L_(16.0) / TWO_MANT_DIG && z < - y + L_(2.0) * L_(16.0) / TWO_MANT_DIG)); } } for (i = 0; i < SIZEOF (RANDOM) / 5; i++) for (j = 0; j < SIZEOF (RANDOM) / 5; j++) { DOUBLE x = L_(1.0e9) * RANDOM[i]; /* 0.0 <= x <= 10^9 */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = REMAINDER (x, y); DOUBLE r; ASSERT (z >= - L_(0.5) * y); ASSERT (z <= L_(0.5) * y); { /* Determine the quotient 2x+y / 2y in two steps, because it may be > 2^31. */ int q1 = (int) (x / y / L_(65536.0)); int q2 = (int) ((L_(2.0) * (x - q1 * L_(65536.0) * y) + y) / (L_(2.0) * y)); DOUBLE q = (DOUBLE) q1 * L_(65536.0) + (DOUBLE) q2; r = x - q * y; } /* The absolute error of z can be up to 1e9/2^MANT_DIG. The absolute error of r can also be up to 1e9/2^MANT_DIG. Therefore the error of z - r can be twice as large. */ z -= r; ASSERT (/* The common case. */ (z > - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < L_(2.0) * L_(1.0e9) / TWO_MANT_DIG) || /* rounding error: 2x+y / 2y computed too large */ (z > y - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < y + L_(2.0) * L_(1.0e9) / TWO_MANT_DIG) || /* rounding error: 2x+y / 2y computed too small */ (z > - y - L_(2.0) * L_(1.0e9) / TWO_MANT_DIG && z < - y + L_(2.0) * L_(1.0e9) / TWO_MANT_DIG)); } } { int large_exp = (MAX_EXP - 1 < 1000 ? MAX_EXP - 1 : 1000); DOUBLE large = my_ldexp (L_(1.0), large_exp); /* = 2^large_exp */ for (i = 0; i < SIZEOF (RANDOM) / 10; i++) for (j = 0; j < SIZEOF (RANDOM) / 10; j++) { DOUBLE x = large * RANDOM[i]; /* 0.0 <= x <= 2^large_exp */ DOUBLE y = RANDOM[j]; /* 0.0 <= y < 1.0 */ if (y > L_(0.0)) { DOUBLE z = REMAINDER (x, y); /* Regardless how large the rounding errors are, the result must be >= -y/2, <= y/2. */ ASSERT (z >= - L_(0.5) * y); ASSERT (z <= L_(0.5) * y); } } } } volatile DOUBLE x; volatile DOUBLE y; DOUBLE z; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainderf-ieee.c������������������������������������������������0000664�0000000�0000000�00000002242�14110572173�0021603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainderf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define REMAINDER remainderf #include "test-remainder-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainderf.c�����������������������������������������������������0000664�0000000�0000000�00000002474�14110572173�0020705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainderf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (remainderf, float, (float, float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define MAX_EXP FLT_MAX_EXP #define REMAINDER remainderf #define RANDOM randomf #include "test-remainder.h" int main () { /* A particular value. */ x = 9.245907126f; y = 3.141592654f; z = remainderf (x, y); ASSERT (z >= -0.1788714f && z <= -0.1788708f); test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainderl-ieee.c������������������������������������������������0000664�0000000�0000000�00000002250�14110572173�0021610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainderl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define REMAINDER remainderl #include "test-remainder-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remainderl.c�����������������������������������������������������0000664�0000000�0000000�00000002654�14110572173�0020713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainderl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (remainderl, long double, (long double, long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG LDBL_MANT_DIG #define MAX_EXP LDBL_MAX_EXP #define REMAINDER remainderl #define RANDOM randoml #include "test-remainder.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 9.245907126L; y = 3.141592654L; z = remainderl (x, y); ASSERT (z >= -0.178870837L && z <= -0.178870835L); test_function (); return 0; } ������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-remove.c���������������������������������������������������������0000664�0000000�0000000�00000007074�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of remove. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (remove, int, (char const *)); #include <fcntl.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-remove.t" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Setup. */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (close (creat (BASE "dir/file", 0600)) == 0); /* Basic error conditions. */ errno = 0; ASSERT (remove ("") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (remove ("nosuch") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (remove ("nosuch/") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (remove (".") == -1); ASSERT (errno == EINVAL || errno == EBUSY); /* Resulting errno after ".." or "/" is too varied to test; it is reasonable to see any of EINVAL, EEXIST, ENOTEMPTY, EACCES. */ ASSERT (remove ("..") == -1); ASSERT (remove ("/") == -1); ASSERT (remove ("///") == -1); errno = 0; ASSERT (remove (BASE "dir/file/") == -1); ASSERT (errno == ENOTDIR); /* Non-empty directory. */ errno = 0; ASSERT (remove (BASE "dir") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); /* Non-directory. */ ASSERT (remove (BASE "dir/file") == 0); /* Empty directory. */ errno = 0; ASSERT (remove (BASE "dir/.//") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST); ASSERT (remove (BASE "dir") == 0); /* Test symlink behavior. Specifying trailing slash should remove referent directory, or cause ENOTDIR failure, but not touch symlink. */ if (symlink (BASE "dir", BASE "link") != 0) { fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; if (remove (BASE "link/") == 0) { struct stat st; errno = 0; ASSERT (stat (BASE "link", &st) == -1); ASSERT (errno == ENOENT); } else ASSERT (remove (BASE "dir") == 0); { struct stat st; ASSERT (lstat (BASE "link", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } ASSERT (remove (BASE "link") == 0); /* Trailing slash on symlink to non-directory is an error. */ ASSERT (symlink (BASE "loop", BASE "loop") == 0); errno = 0; ASSERT (remove (BASE "loop/") == -1); ASSERT (errno == ELOOP || errno == ENOTDIR); ASSERT (remove (BASE "loop") == 0); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (symlink (BASE "file", BASE "link") == 0); errno = 0; ASSERT (remove (BASE "link/") == -1); ASSERT (errno == ENOTDIR); ASSERT (remove (BASE "link") == 0); ASSERT (remove (BASE "file") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rename.c���������������������������������������������������������0000664�0000000�0000000�00000002415�14110572173�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rename() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (rename, int, (char const *, char const *)); #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-rename.t" #include "test-rename.h" int main (void) { /* Remove any garbage left from previous partial runs. */ ignore_value (system ("rm -rf " BASE "*")); return test_rename (rename, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rename.h���������������������������������������������������������0000664�0000000�0000000�00000063076�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rename() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* This file is designed to test both rename(a,b) and renameat(AT_FDCWD,a,AT_FDCWD,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ /* Tests whether a file, given by a file name without slashes, exists in the current directory, by scanning the directory entries. */ static bool dentry_exists (const char *filename) { bool exists = false; DIR *dir = opendir ("."); ASSERT (dir != NULL); for (;;) { struct dirent *d = readdir (dir); if (d == NULL) break; if (strcmp (d->d_name, filename) == 0) { exists = true; break; } } ASSERT (closedir (dir) == 0); return exists; } /* Asserts that a specific file, given by a file name without slashes, does not exist in the current directory. */ static void assert_nonexistent (const char *filename) { struct stat st; /* The usual way to test the presence of a file is via stat() or lstat(). */ errno = 0; if (stat (filename, &st) == -1) ASSERT (errno == ENOENT); else { /* But after renaming a directory over an empty directory on an NFS- mounted file system, on Linux 2.6.18, for a period of 30 seconds the old directory name is "present" according to stat() but "nonexistent" according to dentry_exists(). */ ASSERT (!dentry_exists (filename)); /* Remove the old directory name, so that subsequent mkdir calls succeed. */ (void) rmdir (filename); } } static int test_rename (int (*func) (char const *, char const *), bool print) { /* Setup. */ struct stat st; int fd = creat (BASE "file", 0600); ASSERT (0 <= fd); ASSERT (write (fd, "hi", 2) == 2); ASSERT (close (fd) == 0); ASSERT (mkdir (BASE "dir", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ */ /* Obvious errors. */ { /* Missing source. */ { errno = 0; ASSERT (func (BASE "missing", BASE "missing") == -1); ASSERT (errno == ENOENT); } { errno = 0; ASSERT (func (BASE "missing/", BASE "missing") == -1); ASSERT (errno == ENOENT); } { errno = 0; ASSERT (func (BASE "missing", BASE "missing/") == -1); ASSERT (errno == ENOENT); } } { /* Empty operand. */ { errno = 0; ASSERT (func ("", BASE "missing") == -1); ASSERT (errno == ENOENT); } { errno = 0; ASSERT (func (BASE "file", "") == -1); ASSERT (errno == ENOENT); } { errno = 0; ASSERT (func (BASE "", "") == -1); ASSERT (errno == ENOENT); } } /* Files. */ { /* Trailing slash. */ { errno = 0; ASSERT (func (BASE "file", BASE "file2/") == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "file/", BASE "file2") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (stat (BASE "file2", &st) == -1); ASSERT (errno == ENOENT); } } { /* Simple rename. */ ASSERT (func (BASE "file", BASE "file2") == 0); errno = 0; ASSERT (stat (BASE "file", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (stat (BASE "file2", &st) == 0); ASSERT (st.st_size == 2); } /* Files present here: {BASE}file2 {BASE}dir/ */ { /* Overwrite. */ ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func (BASE "file2", BASE "file/") == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "file2", BASE "file") == 0); memset (&st, 0, sizeof st); ASSERT (stat (BASE "file", &st) == 0); ASSERT (st.st_size == 2); errno = 0; ASSERT (stat (BASE "file2", &st) == -1); ASSERT (errno == ENOENT); } /* Files present here: {BASE}file {BASE}dir/ */ /* Directories. */ { /* Simple rename. */ { ASSERT (func (BASE "dir", BASE "dir2/") == 0); errno = 0; ASSERT (stat (BASE "dir", &st) == -1); ASSERT (errno == ENOENT); ASSERT (stat (BASE "dir2", &st) == 0); } /* Files present here: {BASE}file {BASE}dir2/ */ { ASSERT (func (BASE "dir2/", BASE "dir") == 0); ASSERT (stat (BASE "dir", &st) == 0); errno = 0; ASSERT (stat (BASE "dir2", &st) == -1); ASSERT (errno == ENOENT); } /* Files present here: {BASE}file {BASE}dir/ */ { ASSERT (func (BASE "dir", BASE "dir2") == 0); errno = 0; ASSERT (stat (BASE "dir", &st) == -1); ASSERT (errno == ENOENT); ASSERT (stat (BASE "dir2", &st) == 0); } /* Files present here: {BASE}file {BASE}dir2/ */ { /* Empty onto empty. */ ASSERT (mkdir (BASE "dir", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ ASSERT (func (BASE "dir2", BASE "dir") == 0); /* Files present here: {BASE}file {BASE}dir/ */ ASSERT (mkdir (BASE "dir2", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ ASSERT (func (BASE "dir2", BASE "dir/") == 0); /* Files present here: {BASE}file {BASE}dir/ */ ASSERT (mkdir (BASE "dir2", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ ASSERT (func (BASE "dir2/", BASE "dir") == 0); /* Files present here: {BASE}file {BASE}dir/ */ ASSERT (mkdir (BASE "dir2", 0700) == 0); } /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ { /* Empty onto full. */ ASSERT (close (creat (BASE "dir/file", 0600)) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir/file {BASE}dir2/ */ { errno = 0; ASSERT (func (BASE "dir2", BASE "dir") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); } { errno = 0; ASSERT (func (BASE "dir2/", BASE "dir") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); } { errno = 0; ASSERT (func (BASE "dir2", BASE "dir/") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); } } { /* Full onto empty. */ ASSERT (func (BASE "dir", BASE "dir2") == 0); assert_nonexistent (BASE "dir"); ASSERT (stat (BASE "dir2/file", &st) == 0); /* Files present here: {BASE}file {BASE}dir2/ {BASE}dir2/file */ ASSERT (mkdir (BASE "dir", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ {BASE}dir2/file */ { ASSERT (func (BASE "dir2/", BASE "dir") == 0); ASSERT (stat (BASE "dir/file", &st) == 0); errno = 0; ASSERT (stat (BASE "dir2", &st) == -1); ASSERT (errno == ENOENT); } /* Files present here: {BASE}file {BASE}dir/ {BASE}dir/file */ ASSERT (mkdir (BASE "dir2", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir/file {BASE}dir2/ */ { ASSERT (func (BASE "dir", BASE "dir2/") == 0); assert_nonexistent (BASE "dir"); ASSERT (stat (BASE "dir2/file", &st) == 0); } /* Files present here: {BASE}file {BASE}dir2/ {BASE}dir2/file */ ASSERT (unlink (BASE "dir2/file") == 0); } /* Files present here: {BASE}file {BASE}dir2/ */ { /* Reject trailing dot. */ { errno = 0; ASSERT (func (BASE "dir2", BASE "dir/.") == -1); ASSERT (errno == EINVAL || errno == ENOENT); } ASSERT (mkdir (BASE "dir", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ { errno = 0; ASSERT (func (BASE "dir2", BASE "dir/.") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EISDIR || errno == ENOTEMPTY || errno == EEXIST || errno == ENOENT /* WSL */); } { errno = 0; ASSERT (func (BASE "dir2/.", BASE "dir") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOENT /* WSL */); } ASSERT (rmdir (BASE "dir") == 0); /* Files present here: {BASE}file {BASE}dir2/ */ { errno = 0; ASSERT (func (BASE "dir2", BASE "dir/.//") == -1); ASSERT (errno == EINVAL || errno == ENOENT); } ASSERT (mkdir (BASE "dir", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir2/ */ { errno = 0; ASSERT (func (BASE "dir2", BASE "dir/.//") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EISDIR || errno == ENOTEMPTY || errno == EEXIST || errno == ENOENT /* WSL */); } { errno = 0; ASSERT (func (BASE "dir2/.//", BASE "dir") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOENT /* WSL */); } ASSERT (rmdir (BASE "dir2") == 0); /* Files present here: {BASE}file {BASE}dir/ */ } { /* Move into subdir. */ { errno = 0; ASSERT (func (BASE "dir", BASE "dir/sub") == -1); ASSERT (errno == EINVAL || errno == EACCES); } { errno = 0; ASSERT (stat (BASE "dir/sub", &st) == -1); ASSERT (errno == ENOENT); } ASSERT (mkdir (BASE "dir/sub", 0700) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir/sub/ */ { errno = 0; ASSERT (func (BASE "dir", BASE "dir/sub") == -1); ASSERT (errno == EINVAL); ASSERT (stat (BASE "dir/sub", &st) == 0); } ASSERT (rmdir (BASE "dir/sub") == 0); } } /* Files present here: {BASE}file {BASE}dir/ */ /* Mixing file and directory. */ { { /* File onto dir. */ { errno = 0; ASSERT (func (BASE "file", BASE "dir") == -1); ASSERT (errno == EISDIR || errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "file", BASE "dir/") == -1); ASSERT (errno == EISDIR || errno == ENOTDIR); } } { /* Dir onto file. */ { errno = 0; ASSERT (func (BASE "dir", BASE "file") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "dir/", BASE "file") == -1); ASSERT (errno == ENOTDIR); } } } /* Hard links. */ { /* File onto self. */ ASSERT (func (BASE "file", BASE "file") == 0); memset (&st, 0, sizeof st); ASSERT (stat (BASE "file", &st) == 0); ASSERT (st.st_size == 2); } /* Files present here: {BASE}file {BASE}dir/ */ { /* Empty dir onto self. */ ASSERT (func (BASE "dir", BASE "dir") == 0); ASSERT (stat (BASE "dir", &st) == 0); } /* Files present here: {BASE}file {BASE}dir/ */ ASSERT (close (creat (BASE "dir/file", 0600)) == 0); /* Files present here: {BASE}file {BASE}dir/ {BASE}dir/file */ { /* Full dir onto self. */ ASSERT (func (BASE "dir", BASE "dir") == 0); } ASSERT (unlink (BASE "dir/file") == 0); /* Files present here: {BASE}file {BASE}dir/ */ { /* Not all file systems support link. Mingw doesn't have reliable st_nlink on hard links, but our implementation does fail with EPERM on poor file systems, and we can detect the inferior stat() via st_ino. Cygwin 1.5.x copies rather than links files on those file systems, but there, st_nlink and st_ino are reliable. */ int ret = link (BASE "file", BASE "file2"); if (!ret) { memset (&st, 0, sizeof st); ASSERT (stat (BASE "file2", &st) == 0); if (st.st_ino && st.st_nlink != 2) { ASSERT (unlink (BASE "file2") == 0); errno = EPERM; ret = -1; } } if (ret == -1) { /* If the device does not support hard links, errno is EPERM on Linux, EOPNOTSUPP on FreeBSD. */ switch (errno) { case EPERM: case EOPNOTSUPP: if (print) fputs ("skipping test: " "hard links not supported on this file system\n", stderr); ASSERT (unlink (BASE "file") == 0); ASSERT (rmdir (BASE "dir") == 0); return 77; default: perror ("link"); return 1; } } ASSERT (ret == 0); } /* Files present here: {BASE}file {BASE}file2 (hard link to file) {BASE}dir/ */ { /* File onto hard link. */ ASSERT (func (BASE "file", BASE "file2") == 0); memset (&st, 0, sizeof st); if (stat (BASE "file", &st) != 0) { /* This can happen on NetBSD. */ ASSERT (errno == ENOENT); ASSERT (link (BASE "file2", BASE "file") == 0); ASSERT (stat (BASE "file", &st) == 0); } ASSERT (st.st_size == 2); memset (&st, 0, sizeof st); ASSERT (stat (BASE "file2", &st) == 0); ASSERT (st.st_size == 2); } /* Files present here: {BASE}file {BASE}file2 {BASE}dir/ */ ASSERT (unlink (BASE "file2") == 0); /* Files present here: {BASE}file {BASE}dir/ */ /* Symlinks. */ if (symlink (BASE "file", BASE "link1")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); ASSERT (unlink (BASE "file") == 0); ASSERT (rmdir (BASE "dir") == 0); return 77; } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ { /* Simple rename. */ ASSERT (func (BASE "link1", BASE "link2") == 0); ASSERT (stat (BASE "file", &st) == 0); errno = 0; ASSERT (lstat (BASE "link1", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } /* Files present here: {BASE}file {BASE}link2 -> {BASE}file {BASE}dir/ */ { /* Overwrite. */ ASSERT (symlink (BASE "nowhere", BASE "link1") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}nowhere {BASE}link2 -> {BASE}file {BASE}dir/ */ { ASSERT (func (BASE "link2", BASE "link1") == 0); memset (&st, 0, sizeof st); ASSERT (stat (BASE "link1", &st) == 0); ASSERT (st.st_size == 2); errno = 0; ASSERT (lstat (BASE "link2", &st) == -1); ASSERT (errno == ENOENT); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ { /* Symlink loop. */ ASSERT (symlink (BASE "link2", BASE "link2") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}link2 {BASE}dir/ */ { ASSERT (func (BASE "link2", BASE "link2") == 0); } { errno = 0; ASSERT (func (BASE "link2/", BASE "link2") == -1); ASSERT (errno == ELOOP || errno == ENOTDIR); } ASSERT (func (BASE "link2", BASE "link3") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link3 -> {BASE}link2 {BASE}dir/ */ ASSERT (unlink (BASE "link3") == 0); } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ { /* Dangling link. */ ASSERT (symlink (BASE "nowhere", BASE "link2") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}nowhere {BASE}dir/ */ { ASSERT (func (BASE "link2", BASE "link3") == 0); errno = 0; ASSERT (lstat (BASE "link2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link3", &st) == 0); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link3 -> {BASE}nowhere {BASE}dir/ */ { /* Trailing slash on dangling. */ { errno = 0; ASSERT (func (BASE "link3/", BASE "link2") == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "link3", BASE "link2/") == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); } { errno = 0; ASSERT (lstat (BASE "link2", &st) == -1); ASSERT (errno == ENOENT); } memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link3", &st) == 0); } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link3 -> {BASE}nowhere {BASE}dir/ */ { /* Trailing slash on link to file. */ { errno = 0; ASSERT (func (BASE "link1/", BASE "link2") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "link1", BASE "link3/") == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link3 -> {BASE}nowhere {BASE}dir/ */ /* Mixing symlink and file. */ { /* File onto link. */ ASSERT (close (creat (BASE "file2", 0600)) == 0); /* Files present here: {BASE}file {BASE}file2 {BASE}link1 -> {BASE}file {BASE}link3 -> {BASE}nowhere {BASE}dir/ */ { ASSERT (func (BASE "file2", BASE "link3") == 0); errno = 0; ASSERT (stat (BASE "file2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link3", &st) == 0); ASSERT (S_ISREG (st.st_mode)); } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link3 {BASE}dir/ */ ASSERT (unlink (BASE "link3") == 0); } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ { /* Link onto file. */ ASSERT (symlink (BASE "nowhere", BASE "link2") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}nowhere {BASE}dir/ */ ASSERT (close (creat (BASE "file2", 0600)) == 0); /* Files present here: {BASE}file {BASE}file2 {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}nowhere {BASE}dir/ */ { ASSERT (func (BASE "link2", BASE "file2") == 0); errno = 0; ASSERT (lstat (BASE "link2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "file2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } /* Files present here: {BASE}file {BASE}file2 -> {BASE}nowhere {BASE}link1 -> {BASE}file {BASE}dir/ */ ASSERT (unlink (BASE "file2") == 0); } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ { /* Trailing slash. */ { errno = 0; ASSERT (func (BASE "file/", BASE "link1") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "file", BASE "link1/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); } { errno = 0; ASSERT (func (BASE "link1/", BASE "file") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "link1", BASE "file/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "file", &st) == 0); ASSERT (S_ISREG (st.st_mode)); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link1", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ /* Mixing symlink and directory. */ { /* Directory onto link. */ { errno = 0; ASSERT (func (BASE "dir", BASE "link1") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "dir/", BASE "link1") == -1); ASSERT (errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "dir", BASE "link1/") == -1); ASSERT (errno == ENOTDIR); } } { /* Link onto directory. */ { errno = 0; ASSERT (func (BASE "link1", BASE "dir") == -1); ASSERT (errno == EISDIR || errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "link1", BASE "dir/") == -1); ASSERT (errno == EISDIR || errno == ENOTDIR); } { errno = 0; ASSERT (func (BASE "link1/", BASE "dir") == -1); ASSERT (errno == ENOTDIR); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link1", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "dir", &st) == 0); ASSERT (S_ISDIR (st.st_mode)); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}dir/ */ /* POSIX requires rename("link-to-dir/","other") to rename "dir" and leave "link-to-dir" dangling, but GNU rejects this. POSIX requires rename("dir","dangling/") to create the directory so that "dangling/" now resolves, but GNU rejects this. While we prefer GNU behavior, we don't enforce it. However, we do test that the system either follows POSIX in both cases, or follows GNU. */ { int result; ASSERT (symlink (BASE "dir2", BASE "link2") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}dir2 {BASE}dir/ */ errno = 0; result = func (BASE "dir", BASE "link2/"); if (result == 0) { /* POSIX. */ errno = 0; ASSERT (lstat (BASE "dir", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "dir2", &st) == 0); ASSERT (S_ISDIR (st.st_mode)); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}dir2 {BASE}dir2/ */ { ASSERT (func (BASE "link2/", BASE "dir") == 0); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "dir", &st) == 0); ASSERT (S_ISDIR (st.st_mode)); errno = 0; ASSERT (lstat (BASE "dir2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } } else { /* GNU. */ ASSERT (result == -1); ASSERT (errno == ENOTDIR); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "dir", &st) == 0); ASSERT (S_ISDIR (st.st_mode)); errno = 0; ASSERT (lstat (BASE "dir2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); ASSERT (unlink (BASE "link2") == 0); ASSERT (symlink (BASE "dir", BASE "link2") == 0); /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}dir {BASE}dir/ */ errno = 0; /* OpenBSD notices that link2/ and dir are the same. */ result = func (BASE "link2/", BASE "dir"); if (result) /* GNU/Linux rejects attempts to use link2/. */ { ASSERT (result == -1); ASSERT (errno == ENOTDIR || errno == EISDIR); } memset (&st, 0, sizeof st); ASSERT (lstat (BASE "dir", &st) == 0); ASSERT (S_ISDIR (st.st_mode)); errno = 0; ASSERT (lstat (BASE "dir2", &st) == -1); ASSERT (errno == ENOENT); memset (&st, 0, sizeof st); ASSERT (lstat (BASE "link2", &st) == 0); ASSERT (S_ISLNK (st.st_mode)); } } /* Files present here: {BASE}file {BASE}link1 -> {BASE}file {BASE}link2 -> {BASE}dir or {BASE}dir2 {BASE}dir/ */ /* Clean up. */ ASSERT (unlink (BASE "file") == 0); ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-renameat.c�������������������������������������������������������0000664�0000000�0000000�00000014727�14110572173�0020371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of renameat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (renameat, int, (int, char const *, int, char const *)); #include <dirent.h> #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "filenamecat.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-renameat.t" #include "test-rename.h" static int dfd1 = AT_FDCWD; static int dfd2 = AT_FDCWD; /* Wrapper to test renameat like rename. */ static int do_rename (char const *name1, char const *name2) { return renameat (dfd1, name1, dfd2, name2); } int main (void) { int i; int dfd; char *cwd; int result; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (renameat (-1, "foo", AT_FDCWD, "bar") == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (renameat (99, "foo", AT_FDCWD, "bar") == -1); ASSERT (errno == EBADF); } ASSERT (close (creat (BASE "oo", 0600)) == 0); { errno = 0; ASSERT (renameat (AT_FDCWD, BASE "oo", -1, "bar") == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (renameat (AT_FDCWD, BASE "oo", 99, "bar") == -1); ASSERT (errno == EBADF); } ASSERT (unlink (BASE "oo") == 0); /* Test basic rename functionality, using current directory. */ result = test_rename (do_rename, false); dfd1 = open (".", O_RDONLY); ASSERT (0 <= dfd1); ASSERT (test_rename (do_rename, false) == result); dfd2 = dfd1; ASSERT (test_rename (do_rename, false) == result); dfd1 = AT_FDCWD; ASSERT (test_rename (do_rename, false) == result); ASSERT (close (dfd2) == 0); /* Create locations to manipulate. */ ASSERT (mkdir (BASE "sub1", 0700) == 0); ASSERT (mkdir (BASE "sub2", 0700) == 0); dfd = creat (BASE "00", 0600); ASSERT (0 <= dfd); ASSERT (close (dfd) == 0); cwd = getcwd (NULL, 0); ASSERT (cwd); dfd = open (BASE "sub1", O_RDONLY); ASSERT (0 <= dfd); ASSERT (chdir (BASE "sub2") == 0); /* There are 16 possible scenarios, based on whether an fd is AT_FDCWD or real, and whether a file is absolute or relative. To ensure that we test all of the code paths (rather than triggering early normalization optimizations), we use a loop to repeatedly rename a file in the parent directory, use an fd open on subdirectory 1, all while executing in subdirectory 2; all relative names are thus given with a leading "../". Finally, the last scenario (two relative paths given, neither one AT_FDCWD) has two paths, based on whether the two fds are equivalent, so we do the other variant after the loop. */ for (i = 0; i < 16; i++) { int fd1 = (i & 8) ? dfd : AT_FDCWD; char *file1 = file_name_concat ((i & 4) ? ".." : cwd, BASE "xx", NULL); int fd2 = (i & 2) ? dfd : AT_FDCWD; char *file2 = file_name_concat ((i & 1) ? ".." : cwd, BASE "xx", NULL); ASSERT (sprintf (strchr (file1, '\0') - 2, "%02d", i) == 2); ASSERT (sprintf (strchr (file2, '\0') - 2, "%02d", i + 1) == 2); ASSERT (renameat (fd1, file1, fd2, file2) == 0); free (file1); free (file2); } dfd2 = open ("..", O_RDONLY); ASSERT (0 <= dfd2); ASSERT (renameat (dfd, "../" BASE "16", dfd2, BASE "17") == 0); ASSERT (close (dfd2) == 0); /* Now we change back to the parent directory, and set dfd to "."; using dfd in remaining tests will expose any bugs if emulation via /proc/self/fd doesn't check for empty names. */ ASSERT (chdir ("..") == 0); ASSERT (close (dfd) == 0); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; ASSERT (renameat (dfd, BASE "sub1", dfd, BASE "sub2") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); ASSERT (unlink (BASE "sub2/file") == 0); errno = 0; ASSERT (renameat (dfd, BASE "sub2", dfd, BASE "sub1/.") == -1); ASSERT (errno == EINVAL || errno == EISDIR || errno == EBUSY || errno == ENOTEMPTY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; ASSERT (renameat (dfd, BASE "sub2/.", dfd, BASE "sub1") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; ASSERT (renameat (dfd, BASE "17", dfd, BASE "sub1") == -1); ASSERT (errno == EISDIR); errno = 0; ASSERT (renameat (dfd, BASE "nosuch", dfd, BASE "18") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameat (dfd, "", dfd, BASE "17") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameat (dfd, BASE "17", dfd, "") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameat (dfd, BASE "sub2", dfd, BASE "17") == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (renameat (dfd, BASE "17/", dfd, BASE "18") == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (renameat (dfd, BASE "17", dfd, BASE "18/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); /* Finally, make sure we can overwrite existing files. */ ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; ASSERT (renameat (dfd, BASE "sub2", dfd, BASE "sub1") == 0); ASSERT (renameat (dfd, BASE "sub1/file", dfd, BASE "17") == 0); /* Cleanup. */ ASSERT (close (dfd) == 0); errno = 0; ASSERT (unlink (BASE "sub1/file") == -1); ASSERT (errno == ENOENT); ASSERT (unlink (BASE "17") == 0); ASSERT (rmdir (BASE "sub1") == 0); errno = 0; ASSERT (rmdir (BASE "sub2") == -1); ASSERT (errno == ENOENT); free (cwd); if (result) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } �����������������������������������������gnulib-20210822~d383792/tests/test-renameatu.c������������������������������������������������������0000664�0000000�0000000�00000015676�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test renameatu. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <renameatu.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (renameatu, int, (int, char const *, int, char const *, unsigned int)); #include <dirent.h> #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "filenamecat.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-renameatu.t" #include "test-rename.h" static int dfd1 = AT_FDCWD; static int dfd2 = AT_FDCWD; /* Wrapper to test renameatu like rename. */ static int do_rename (char const *name1, char const *name2) { return renameatu (dfd1, name1, dfd2, name2, 0); } int main (void) { int i; int dfd; char *cwd; int result; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (renameatu (-1, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (renameatu (99, "foo", AT_FDCWD, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (close (creat (BASE "oo", 0600)) == 0); { errno = 0; ASSERT (renameatu (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (renameatu (AT_FDCWD, BASE "oo", 99, "bar", 0) == -1); ASSERT (errno == EBADF); } ASSERT (unlink (BASE "oo") == 0); /* Test basic rename functionality, using current directory. */ result = test_rename (do_rename, false); dfd1 = open (".", O_RDONLY); ASSERT (0 <= dfd1); ASSERT (test_rename (do_rename, false) == result); dfd2 = dfd1; ASSERT (test_rename (do_rename, false) == result); dfd1 = AT_FDCWD; ASSERT (test_rename (do_rename, false) == result); ASSERT (close (dfd2) == 0); /* Create locations to manipulate. */ ASSERT (mkdir (BASE "sub1", 0700) == 0); ASSERT (mkdir (BASE "sub2", 0700) == 0); dfd = creat (BASE "00", 0600); ASSERT (0 <= dfd); ASSERT (close (dfd) == 0); cwd = getcwd (NULL, 0); ASSERT (cwd); dfd = open (BASE "sub1", O_RDONLY); ASSERT (0 <= dfd); ASSERT (chdir (BASE "sub2") == 0); /* There are 16 possible scenarios, based on whether an fd is AT_FDCWD or real, and whether a file is absolute or relative. To ensure that we test all of the code paths (rather than triggering early normalization optimizations), we use a loop to repeatedly rename a file in the parent directory, use an fd open on subdirectory 1, all while executing in subdirectory 2; all relative names are thus given with a leading "../". Finally, the last scenario (two relative paths given, neither one AT_FDCWD) has two paths, based on whether the two fds are equivalent, so we do the other variant after the loop. */ for (i = 0; i < 16; i++) { int fd1 = (i & 8) ? dfd : AT_FDCWD; char *file1 = file_name_concat ((i & 4) ? ".." : cwd, BASE "xx", NULL); int fd2 = (i & 2) ? dfd : AT_FDCWD; char *file2 = file_name_concat ((i & 1) ? ".." : cwd, BASE "xx", NULL); ASSERT (sprintf (strchr (file1, '\0') - 2, "%02d", i) == 2); ASSERT (sprintf (strchr (file2, '\0') - 2, "%02d", i + 1) == 2); ASSERT (renameatu (fd1, file1, fd2, file2, 0) == 0); free (file1); free (file2); } dfd2 = open ("..", O_RDONLY); ASSERT (0 <= dfd2); ASSERT (renameatu (dfd, "../" BASE "16", dfd2, BASE "17", 0) == 0); ASSERT (close (dfd2) == 0); /* Now we change back to the parent directory, and set dfd to "."; using dfd in remaining tests will expose any bugs if emulation via /proc/self/fd doesn't check for empty names. */ ASSERT (chdir ("..") == 0); ASSERT (close (dfd) == 0); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; ASSERT (renameatu (dfd, BASE "sub1", dfd, BASE "sub2", 0) == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); ASSERT (unlink (BASE "sub2/file") == 0); errno = 0; ASSERT (renameatu (dfd, BASE "sub2", dfd, BASE "sub1/.", 0) == -1); ASSERT (errno == EINVAL || errno == EISDIR || errno == EBUSY || errno == ENOTEMPTY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; ASSERT (renameatu (dfd, BASE "sub2/.", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOENT /* WSL */); errno = 0; ASSERT (renameatu (dfd, BASE "17", dfd, BASE "sub1", 0) == -1); ASSERT (errno == EISDIR); errno = 0; ASSERT (renameatu (dfd, BASE "nosuch", dfd, BASE "18", 0) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameatu (dfd, "", dfd, BASE "17", 0) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameatu (dfd, BASE "17", dfd, "", 0) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (renameatu (dfd, BASE "sub2", dfd, BASE "17", 0) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (renameatu (dfd, BASE "17/", dfd, BASE "18", 0) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (renameatu (dfd, BASE "17", dfd, BASE "18/", 0) == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); /* Finally, make sure we cannot overwrite existing files. */ ASSERT (close (creat (BASE "sub2/file", 0600)) == 0); errno = 0; ASSERT ((renameatu (dfd, BASE "sub2/file", dfd, BASE "sub2/file", RENAME_NOREPLACE) == -1) && errno == EEXIST); errno = 0; ASSERT ((renameatu (dfd, BASE "sub2", dfd, BASE "sub2", RENAME_NOREPLACE) == -1) && errno == EEXIST); errno = 0; ASSERT ((renameatu (dfd, BASE "sub2", dfd, BASE "sub1", RENAME_NOREPLACE) == -1) && errno == EEXIST); errno = 0; ASSERT ((renameatu (dfd, BASE "sub2/file", dfd, BASE "17", RENAME_NOREPLACE) == -1) && errno == EEXIST); /* Cleanup. */ ASSERT (close (dfd) == 0); ASSERT (unlink (BASE "sub2/file") == 0); ASSERT (unlink (BASE "17") == 0); ASSERT (rmdir (BASE "sub1") == 0); ASSERT (rmdir (BASE "sub2") == 0); free (cwd); if (result) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } ������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rijndael.c�������������������������������������������������������0000664�0000000�0000000�00000005770�14110572173�0020363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 "rijndael-api-fst.h" #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { int rc; rijndaelKeyInstance key; rijndaelCipherInstance cipher; char in[RIJNDAEL_BITSPERBLOCK / 8]; char out[RIJNDAEL_BITSPERBLOCK / 8]; char pt[] = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00"; char ct[] = "\xC3\x4C\x05\x2C\xC0\xDA\x8D\x73" "\x45\x1A\xFE\x5F\x03\xBE\x29\x7F"; size_t i; rc = rijndaelMakeKey (&key, RIJNDAEL_DIR_ENCRYPT, 128, "00000000000000000000000000000000"); if (rc != 0) printf ("makeKey failed %d\n", rc); rc = rijndaelCipherInit (&cipher, RIJNDAEL_MODE_ECB, NULL); if (rc != 0) printf ("cipherInit failed %d\n", rc); memset (in, 0, RIJNDAEL_BITSPERBLOCK / 8); for (i = 0; i < 10000; i++) { rc = rijndaelBlockEncrypt (&cipher, &key, in, 128, out); if (rc < 0) printf ("blockEncrypt failed %d\n", rc); memcpy (in, out, RIJNDAEL_BITSPERBLOCK / 8); } if (memcmp (out, ct, RIJNDAEL_BITSPERBLOCK / 8) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < RIJNDAEL_BITSPERBLOCK / 8; i++) printf ("%02x ", ct[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < RIJNDAEL_BITSPERBLOCK / 8; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } rc = rijndaelMakeKey (&key, RIJNDAEL_DIR_DECRYPT, 128, "00000000000000000000000000000000"); if (rc != 0) printf ("makeKey failed %d\n", rc); rc = rijndaelCipherInit (&cipher, RIJNDAEL_MODE_ECB, NULL); if (rc != 0) printf ("cipherInit failed %d\n", rc); for (i = 0; i < 10000; i++) { memcpy (in, out, RIJNDAEL_BITSPERBLOCK / 8); rc = rijndaelBlockDecrypt (&cipher, &key, in, 128, out); if (rc < 0) printf ("blockEncrypt failed %d\n", rc); } if (memcmp (out, pt, RIJNDAEL_BITSPERBLOCK / 8) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < RIJNDAEL_BITSPERBLOCK / 8; i++) printf ("%02x ", pt[i] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < RIJNDAEL_BITSPERBLOCK / 8; i++) printf ("%02x ", out[i] & 0xFF); printf ("\n"); return 1; } return 0; } ��������gnulib-20210822~d383792/tests/test-rint-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rint() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define RINT rint #include "test-rint-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rint-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002276�14110572173�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rint*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (ISNAN (RINT (NAN))); /* Signed zero. */ { DOUBLE y = RINT (L_(0.0)); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); } { DOUBLE y = RINT (MINUS_ZERO); ASSERT (y == L_(0.0)); ASSERT (!!signbit (y) == !!signbit (MINUS_ZERO)); } /* Infinity. */ ASSERT (RINT (INFINITY) == INFINITY); ASSERT (RINT (- INFINITY) == - INFINITY); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rint.c�����������������������������������������������������������0000664�0000000�0000000�00000005646�14110572173�0017551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rint() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (rint, double, (double)); #include <float.h> #include <stdio.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define RINT rint #define RANDOM randomd #include "test-rint.h" int main () { /* Consider the current rounding mode, cf. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html> */ if (FLT_ROUNDS == 1) { /* The current rounding mode is round-to-nearest (the default in IEEE 754). */ /* Zero. */ ASSERT (rint (0.0) == 0.0); ASSERT (rint (minus_zerod) == 0.0); /* Positive numbers. */ ASSERT (rint (0.3) == 0.0); ASSERT (rint (0.5) == 0.0); /* unlike round() */ ASSERT (rint (0.7) == 1.0); ASSERT (rint (1.0) == 1.0); ASSERT (rint (1.5) == 2.0); ASSERT (rint (1.999) == 2.0); ASSERT (rint (2.0) == 2.0); ASSERT (rint (2.1) == 2.0); ASSERT (rint (2.5) == 2.0); /* unlike round() */ ASSERT (rint (2.7) == 3.0); ASSERT (rint (65535.999) == 65536.0); ASSERT (rint (65536.0) == 65536.0); ASSERT (rint (65536.001) == 65536.0); ASSERT (rint (2.341e31) == 2.341e31); /* Negative numbers. */ ASSERT (rint (-0.3) == 0.0); ASSERT (rint (-0.5) == 0.0); /* unlike round() */ ASSERT (rint (-0.7) == -1.0); ASSERT (rint (-1.0) == -1.0); ASSERT (rint (-1.5) == -2.0); ASSERT (rint (-1.999) == -2.0); ASSERT (rint (-2.0) == -2.0); ASSERT (rint (-2.1) == -2.0); ASSERT (rint (-2.5) == -2.0); /* unlike round() */ ASSERT (rint (-2.7) == -3.0); ASSERT (rint (-65535.999) == -65536.0); ASSERT (rint (-65536.0) == -65536.0); ASSERT (rint (-65536.001) == -65536.0); ASSERT (rint (-2.341e31) == -2.341e31); test_function (); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } ������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rint.h�����������������������������������������������������������0000664�0000000�0000000�00000003105�14110572173�0017542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rint*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* Infinite numbers. */ ASSERT (RINT (INFINITY) == INFINITY); ASSERT (RINT (- INFINITY) == - INFINITY); /* NaNs. */ ASSERT (ISNAN (RINT (NAN))); /* Randomized tests. */ { int i; for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x; x = L_(0.5) * RANDOM[i]; ASSERT (RINT (x) == L_(0.0)); x = - x; ASSERT (RINT (x) == L_(0.0)); x = L_(1.0) - L_(0.5) * RANDOM[i]; ASSERT (RINT (x) == L_(1.0)); x = - x; ASSERT (RINT (x) == - L_(1.0)); x = L_(1.0) + L_(0.5) * RANDOM[i]; ASSERT (RINT (x) == L_(1.0)); x = - x; ASSERT (RINT (x) == - L_(1.0)); x = L_(2.0) - L_(0.5) * RANDOM[i]; ASSERT (RINT (x) == L_(2.0)); x = - x; ASSERT (RINT (x) == - L_(2.0)); } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rintf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define RINT rintf #include "test-rint-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rintf.c����������������������������������������������������������0000664�0000000�0000000�00000006002�14110572173�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (rintf, float, (float)); #include <float.h> #include <stdio.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define RINT rintf #define RANDOM randomf #include "test-rint.h" int main () { /* Consider the current rounding mode, cf. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html> */ if (FLT_ROUNDS == 1) { /* The current rounding mode is round-to-nearest (the default in IEEE 754). */ /* Zero. */ ASSERT (rintf (0.0f) == 0.0f); ASSERT (rintf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (rintf (0.3f) == 0.0f); ASSERT (rintf (0.5f) == 0.0f); /* unlike roundf() */ ASSERT (rintf (0.7f) == 1.0f); ASSERT (rintf (1.0f) == 1.0f); ASSERT (rintf (1.5f) == 2.0f); ASSERT (rintf (1.999f) == 2.0f); ASSERT (rintf (2.0f) == 2.0f); ASSERT (rintf (2.1f) == 2.0f); ASSERT (rintf (2.5f) == 2.0f); /* unlike roundf() */ ASSERT (rintf (2.7f) == 3.0f); ASSERT (rintf (65535.99f) == 65536.0f); ASSERT (rintf (65536.0f) == 65536.0f); ASSERT (rintf (65536.01f) == 65536.0f); ASSERT (rintf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (rintf (-0.3f) == 0.0f); ASSERT (rintf (-0.5f) == 0.0f); /* unlike roundf() */ ASSERT (rintf (-0.7f) == -1.0f); ASSERT (rintf (-1.0f) == -1.0f); ASSERT (rintf (-1.5f) == -2.0f); ASSERT (rintf (-1.999f) == -2.0f); ASSERT (rintf (-2.0f) == -2.0f); ASSERT (rintf (-2.1f) == -2.0f); ASSERT (rintf (-2.5f) == -2.0f); /* unlike roundf() */ ASSERT (rintf (-2.7f) == -3.0f); ASSERT (rintf (-65535.99f) == -65536.0f); ASSERT (rintf (-65536.0f) == -65536.0f); ASSERT (rintf (-65536.01f) == -65536.0f); ASSERT (rintf (-2.341e31f) == -2.341e31f); test_function (); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rintl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define RINT rintl #include "test-rint-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rintl.c����������������������������������������������������������0000664�0000000�0000000�00000006152�14110572173�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (rintl, long double, (long double)); #include <float.h> #include <stdio.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define RINT rintl #define RANDOM randoml #include "test-rint.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Consider the current rounding mode, cf. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html> */ if (FLT_ROUNDS == 1) { /* The current rounding mode is round-to-nearest (the default in IEEE 754). */ /* Zero. */ ASSERT (rintl (0.0L) == 0.0L); ASSERT (rintl (minus_zerol) == 0.0L); /* Positive numbers. */ ASSERT (rintl (0.3L) == 0.0L); ASSERT (rintl (0.5L) == 0.0L); /* unlike roundl() */ ASSERT (rintl (0.7L) == 1.0L); ASSERT (rintl (1.0L) == 1.0L); ASSERT (rintl (1.5L) == 2.0L); ASSERT (rintl (1.999L) == 2.0L); ASSERT (rintl (2.0L) == 2.0L); ASSERT (rintl (2.1L) == 2.0L); ASSERT (rintl (2.5L) == 2.0L); /* unlike roundl() */ ASSERT (rintl (2.7L) == 3.0L); ASSERT (rintl (65535.999L) == 65536.0L); ASSERT (rintl (65536.0L) == 65536.0L); ASSERT (rintl (65536.001L) == 65536.0L); ASSERT (rintl (2.341e31L) == 2.341e31L); /* Negative numbers. */ ASSERT (rintl (-0.3L) == 0.0L); ASSERT (rintl (-0.5L) == 0.0L); /* unlike roundl() */ ASSERT (rintl (-0.7L) == -1.0L); ASSERT (rintl (-1.0L) == -1.0L); ASSERT (rintl (-1.5L) == -2.0L); ASSERT (rintl (-1.999L) == -2.0L); ASSERT (rintl (-2.0L) == -2.0L); ASSERT (rintl (-2.1L) == -2.0L); ASSERT (rintl (-2.5L) == -2.0L); /* unlike roundl() */ ASSERT (rintl (-2.7L) == -3.0L); ASSERT (rintl (-65535.999L) == -65536.0L); ASSERT (rintl (-65536.0L) == -65536.0L); ASSERT (rintl (-65536.001L) == -65536.0L); ASSERT (rintl (-2.341e31L) == -2.341e31L); test_function (); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rmdir.c����������������������������������������������������������0000664�0000000�0000000�00000002376�14110572173�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of rmdir. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (rmdir, int, (char const *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-rmdir.t" #include "test-rmdir.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_rmdir_func (rmdir, true); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rmdir.h����������������������������������������������������������0000664�0000000�0000000�00000006426�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of rmdir. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both rmdir(n) and unlinkat(AT_FDCWD,n,AT_REMOVEDIR). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, then warn before returning status 77 when symlinks are unsupported. */ static int test_rmdir_func (int (*func) (char const *name), bool print) { /* Setup. */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (close (creat (BASE "dir/file", 0600)) == 0); /* Basic error conditions. */ errno = 0; ASSERT (func ("") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "nosuch") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "nosuch/") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (".") == -1); ASSERT (errno == EINVAL || errno == EBUSY); /* Resulting errno after ".." or "/" is too varied to test; it is reasonable to see any of EINVAL, EBUSY, EEXIST, ENOTEMPTY, EACCES, EPERM. */ ASSERT (func ("..") == -1); ASSERT (func ("/") == -1); ASSERT (func ("///") == -1); errno = 0; ASSERT (func (BASE "dir/file/") == -1); ASSERT (errno == ENOTDIR); /* Non-empty directory. */ errno = 0; ASSERT (func (BASE "dir") == -1); ASSERT (errno == EEXIST || errno == ENOTEMPTY); /* Non-directory. */ errno = 0; ASSERT (func (BASE "dir/file") == -1); ASSERT (errno == ENOTDIR); /* Empty directory. */ ASSERT (unlink (BASE "dir/file") == 0); errno = 0; ASSERT (func (BASE "dir/.//") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST || errno == ENOTEMPTY); ASSERT (func (BASE "dir") == 0); /* Test symlink behavior. Specifying trailing slash should remove referent directory (POSIX), or cause ENOTDIR failure (Linux), but not touch symlink. We prefer the Linux behavior for its intuitiveness (especially compared to rmdir("symlink-to-file/")), but not enough to penalize POSIX systems with an rpl_rmdir. */ if (symlink (BASE "dir", BASE "link") != 0) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; if (func (BASE "link/") == 0) { struct stat st; errno = 0; ASSERT (stat (BASE "link", &st) == -1); ASSERT (errno == ENOENT); } else { ASSERT (errno == ENOTDIR); ASSERT (func (BASE "dir") == 0); } ASSERT (unlink (BASE "link") == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-round-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003361�14110572173�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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, 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (round (0.0))); ASSERT (!!signbit (round (minus_zerod)) == !!signbit (minus_zerod)); /* Positive numbers. */ ASSERT (!signbit (round (0.3))); ASSERT (!signbit (round (0.7))); /* Negative numbers. */ ASSERT (!!signbit (round (-0.3)) == !!signbit (minus_zerod)); ASSERT (!!signbit (round (-0.7)) == !!signbit (minus_zerod)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnand (round (NaNd ()))); /* Infinity. */ ASSERT (round (Infinityd ()) == Infinityd ()); ASSERT (round (- Infinityd ()) == - Infinityd ()); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-round1.c���������������������������������������������������������0000664�0000000�0000000�00000004331�14110572173�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Ben Pfaff <blp@gnu.org>, 2007. Based heavily on Bruno Haible's test-trunc.c. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (round, double, (double)); #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Zero. */ ASSERT (round (0.0) == 0.0); ASSERT (round (minus_zerod) == 0.0); /* Positive numbers. */ ASSERT (round (0.3) == 0.0); ASSERT (round (0.5) == 1.0); ASSERT (round (0.7) == 1.0); ASSERT (round (1.0) == 1.0); ASSERT (round (1.5) == 2.0); ASSERT (round (2.5) == 3.0); ASSERT (round (1.999) == 2.0); ASSERT (round (2.0) == 2.0); ASSERT (round (65535.999) == 65536.0); ASSERT (round (65536.0) == 65536.0); ASSERT (round (65536.001) == 65536.0); ASSERT (round (2.341e31) == 2.341e31); /* Negative numbers. */ ASSERT (round (-0.3) == 0.0); ASSERT (round (-0.5) == -1.0); ASSERT (round (-0.7) == -1.0); ASSERT (round (-1.0) == -1.0); ASSERT (round (-1.5) == -2.0); ASSERT (round (-2.5) == -3.0); ASSERT (round (-1.999) == -2.0); ASSERT (round (-2.0) == -2.0); ASSERT (round (-65535.999) == -65536.0); ASSERT (round (-65536.0) == -65536.0); ASSERT (round (-65536.001) == -65536.0); ASSERT (round (-2.341e31) == -2.341e31); /* Infinite numbers. */ ASSERT (round (Infinityd ()) == Infinityd ()); ASSERT (round (- Infinityd ()) == - Infinityd ()); /* NaNs. */ ASSERT (isnand (round (NaNd ()))); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-round2.c���������������������������������������������������������0000664�0000000�0000000�00000006662�14110572173�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 Ben Pfaff <blp@gnu.org>, 2007. Heavily based on code by Bruno Haible. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ /* Get the two reference implementations of round under the names round_reference1 and round_reference2. round.c will #include <config.h> for us. */ #define FLOOR_BASED_ROUND round_reference1 #define FLOOR_FREE_ROUND round_reference2 #include "round.c" #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include "verify.h" #ifdef USE_LONG_DOUBLE # error Long double not supported. #elif ! defined USE_FLOAT # include "isnand-nolibm.h" # define ISNAN isnand # define FUNCTION "round" # define DOUBLE_UINT uint64_t # define DOUBLE_BITS 64 # define NUM_HIGHBITS 13 # define NUM_LOWBITS 4 #else /* defined USE_FLOAT */ # include "isnanf-nolibm.h" # define ISNAN isnanf # define FUNCTION "roundf" # define DOUBLE_UINT uint32_t # define DOUBLE_BITS 32 # define NUM_HIGHBITS 12 # define NUM_LOWBITS 4 #endif /* Test for equality. */ static bool equal (const char *message, DOUBLE x, DOUBLE y0, DOUBLE y1) { if (ISNAN (y0) ? ISNAN (y1) : y0 == y1) return true; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "%s: "FUNCTION"(%g(%a)) = %g(%a) or %g(%a)?\n", message, x, x, y0, y0, y1, y1); #endif return false; } } /* Test the function for a given argument. */ static bool check (DOUBLE x) { DOUBLE ref1 = round_reference1 (x); DOUBLE ref2 = round_reference2 (x); DOUBLE result = ROUND (x); /* If the reference implementations disagree, bail out immediately. */ if (!equal ("reference implementations disagree", x, ref1, ref2)) exit (EXIT_FAILURE); /* If the actual implementation is wrong, return an error code. */ return equal ("bad round implementation", x, ref1, result); } int main (void) { DOUBLE_UINT highbits, lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to DOUBLE_BITS-NUM_HIGHBITS bits. */ union { DOUBLE f; DOUBLE_UINT i; } janus; verify (sizeof janus.f == sizeof janus.i); janus.i = lowbits | (highbits << (DOUBLE_BITS - NUM_HIGHBITS)); if (lowbits >> (NUM_LOWBITS - 1)) janus.i |= ((DOUBLE_UINT) -1 >> (NUM_LOWBITS + NUM_HIGHBITS) << NUM_LOWBITS); if (!check (janus.f)) error = true; } return (error ? 1 : 0); } ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-roundf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000003377�14110572173�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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, 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (roundf (0.0f))); ASSERT (!!signbit (roundf (minus_zerof)) == !!signbit (minus_zerof)); /* Positive numbers. */ ASSERT (!signbit (roundf (0.3f))); ASSERT (!signbit (roundf (0.7f))); /* Negative numbers. */ ASSERT (!!signbit (roundf (-0.3f)) == !!signbit (minus_zerof)); ASSERT (!!signbit (roundf (-0.7f)) == !!signbit (minus_zerof)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanf (roundf (NaNf ()))); /* Infinity. */ ASSERT (roundf (Infinityf ()) == Infinityf ()); ASSERT (roundf (- Infinityf ()) == - Infinityf ()); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-roundf1.c��������������������������������������������������������0000664�0000000�0000000�00000004445�14110572173�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Ben Pfaff <blp@gnu.org>, 2007. Based heavily on Bruno Haible's test-truncf.c. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (roundf, float, (float)); #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Zero. */ ASSERT (roundf (0.0f) == 0.0f); ASSERT (roundf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (roundf (0.3f) == 0.0f); ASSERT (roundf (0.5f) == 1.0f); ASSERT (roundf (0.7f) == 1.0f); ASSERT (roundf (1.0f) == 1.0f); ASSERT (roundf (1.5f) == 2.0f); ASSERT (roundf (2.5f) == 3.0f); ASSERT (roundf (1.999f) == 2.0f); ASSERT (roundf (2.0f) == 2.0f); ASSERT (roundf (65535.99f) == 65536.0f); ASSERT (roundf (65536.0f) == 65536.0f); ASSERT (roundf (65536.01f) == 65536.0f); ASSERT (roundf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (roundf (-0.3f) == 0.0f); ASSERT (roundf (-0.5f) == -1.0f); ASSERT (roundf (-0.7f) == -1.0f); ASSERT (roundf (-1.0f) == -1.0f); ASSERT (roundf (-1.5f) == -2.0f); ASSERT (roundf (-2.5f) == -3.0f); ASSERT (roundf (-1.999f) == -2.0f); ASSERT (roundf (-2.0f) == -2.0f); ASSERT (roundf (-65535.99f) == -65536.0f); ASSERT (roundf (-65536.0f) == -65536.0f); ASSERT (roundf (-65536.01f) == -65536.0f); ASSERT (roundf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (roundf (Infinityf ()) == Infinityf ()); ASSERT (roundf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (roundf (NaNf ()))); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-roundf2.c��������������������������������������������������������0000664�0000000�0000000�00000000053�14110572173�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define USE_FLOAT #include "test-round2.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-roundl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000003521�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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, 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 <math.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (roundl (0.0L))); ASSERT (!!signbit (roundl (minus_zerol)) == !!signbit (minus_zerol)); /* Positive numbers. */ ASSERT (!signbit (roundl (0.3L))); ASSERT (!signbit (roundl (0.7L))); /* Negative numbers. */ ASSERT (!!signbit (roundl (-0.3L)) == !!signbit (minus_zerol)); ASSERT (!!signbit (roundl (-0.7L)) == !!signbit (minus_zerol)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanl (roundl (NaNl ()))); /* Infinity. */ ASSERT (roundl (Infinityl ()) == Infinityl ()); ASSERT (roundl (- Infinityl ()) == - Infinityl ()); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-roundl.c���������������������������������������������������������0000664�0000000�0000000�00000004633�14110572173�0020073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Ben Pfaff <blp@gnu.org>, 2007. Based heavily on Bruno Haible's test-truncl.c. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (roundl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Zero. */ ASSERT (roundl (0.0L) == 0.0L); ASSERT (roundl (minus_zerol) == 0.0L); /* Positive numbers. */ ASSERT (roundl (0.3L) == 0.0L); ASSERT (roundl (0.5L) == 1.0L); ASSERT (roundl (0.7L) == 1.0L); ASSERT (roundl (1.0L) == 1.0L); ASSERT (roundl (1.5L) == 2.0L); ASSERT (roundl (2.5L) == 3.0L); ASSERT (roundl (1.999L) == 2.0L); ASSERT (roundl (2.0L) == 2.0L); ASSERT (roundl (65535.999L) == 65536.0L); ASSERT (roundl (65536.0L) == 65536.0L); ASSERT (roundl (65536.001L) == 65536.0L); ASSERT (roundl (2.341e31L) == 2.341e31L); /* Negative numbers. */ ASSERT (roundl (-0.3L) == 0.0L); ASSERT (roundl (-0.5L) == -1.0L); ASSERT (roundl (-0.7L) == -1.0L); ASSERT (roundl (-1.0L) == -1.0L); ASSERT (roundl (-1.5L) == -2.0L); ASSERT (roundl (-2.5L) == -3.0L); ASSERT (roundl (-1.999L) == -2.0L); ASSERT (roundl (-2.0L) == -2.0L); ASSERT (roundl (-65535.999L) == -65536.0L); ASSERT (roundl (-65536.0L) == -65536.0L); ASSERT (roundl (-65536.001L) == -65536.0L); ASSERT (roundl (-2.341e31L) == -2.341e31L); /* Infinite numbers. */ ASSERT (roundl (Infinityl ()) == Infinityl ()); ASSERT (roundl (- Infinityl ()) == - Infinityl ()); /* NaNs. */ ASSERT (isnanl (roundl (NaNl ()))); return 0; } �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-rwlock1.c��������������������������������������������������������0000664�0000000�0000000�00000012612�14110572173�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glthread_rwlock_rdlock function. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2005. Inspired by https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c by Intel Corporation. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS #include "glthread/lock.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "glthread/thread.h" /* Verify that in a situation where - an rwlock is taken by a reader and has a writer waiting, - an additional reader requests the lock, - the waiting writer and the requesting reader threads have the same priority, the requesting reader thread gets blocked, so that at some point the waiting writer can acquire the lock. Without such a guarantee, when there a N readers and each of the readers spends more than 1/Nth of the time with the lock held, there is a high probability that the waiting writer will not get the lock in a given finite time, a phenomenon called "writer starvation". Without such a guarantee, applications have a hard time avoiding writer starvation. POSIX:2008 makes this requirement only for implementations that support TPS (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO and SCHED_RR, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html but test verifies the guarantee regardless of TPS and regardless of scheduling policy. */ #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (fprintf (stderr, "Unexpected outcome %d\n", n), abort ()) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static gl_rwlock_t lock; static gl_thread_t reader1; static gl_thread_t writer; static gl_thread_t reader2; static gl_thread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static gl_lock_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (glthread_lock_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (glthread_lock_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9 omitted. */ /* Step 10: Launch a timer, to test whether the next call blocks. */ if (glthread_create (&timer, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = glthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (glthread_lock_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (glthread_create (&reader2, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (glthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = gl_thread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (glthread_rwlock_init (&lock)) UNEXPECTED (1); if (glthread_lock_init (&baton)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (glthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (glthread_create (&writer, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-safe-alloc.c�����������������������������������������������������0000664�0000000�0000000�00000002247�14110572173�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test the safe-alloc macros * * Copyright (C) 2009-2021 Free Software Foundation, Inc. * * This 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. * * This 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 this library; if not, see <https://www.gnu.org/licenses/>. * * Author: David Lutterkort <lutter@redhat.com> */ #include <config.h> #include "safe-alloc.h" #include "macros.h" int main () { struct tst { int a; int b; }; struct tst *p = NULL; int r; r = ALLOC (p); ASSERT (r >= 0); ASSERT (p->a == 0 && p->b == 0); p->a = p->b = 42; r = REALLOC_N (p, 5); ASSERT (p[0].a == 42 && p[0].b == 42); FREE (p); ASSERT (p == NULL); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sameacls.c�������������������������������������������������������0000664�0000000�0000000�00000053342�14110572173�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether two files have the same ACLs. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #if HAVE_ACL_GET_FILE || HAVE_FACL || HAVE_GETACL || HAVE_ACLX_GET || HAVE_STATACL || HAVE_ACLSORT # include <sys/types.h> # include <sys/acl.h> #endif #if HAVE_ACLV_H # include <sys/types.h> # include <aclv.h> #endif #include "read-file.h" #include "xalloc.h" #include "macros.h" int main (int argc, char *argv[]) { const char *file1; const char *file2; ASSERT (argc == 3); file1 = argv[1]; file2 = argv[2]; /* Compare the contents of the two files. */ { size_t size1; char *contents1; size_t size2; char *contents2; contents1 = read_file (file1, 0, &size1); if (contents1 == NULL) { fprintf (stderr, "error reading file %s: errno = %d\n", file1, errno); fflush (stderr); abort (); } contents2 = read_file (file2, 0, &size2); if (contents2 == NULL) { fprintf (stderr, "error reading file %s: errno = %d\n", file2, errno); fflush (stderr); abort (); } if (size2 != size1) { fprintf (stderr, "files %s and %s have different sizes\n", file1, file2); fflush (stderr); abort (); } if (memcmp (contents1, contents2, size1) != 0) { fprintf (stderr, "files %s and %s have different contents\n", file1, file2); fflush (stderr); abort (); } free (contents2); free (contents1); } /* Compare the access permissions of the two files, including ACLs. */ { struct stat statbuf1; struct stat statbuf2; if (stat (file1, &statbuf1) < 0) { fprintf (stderr, "error accessing file %s: errno = %d\n", file1, errno); fflush (stderr); abort (); } if (stat (file2, &statbuf2) < 0) { fprintf (stderr, "error accessing file %s: errno = %d\n", file2, errno); fflush (stderr); abort (); } if (statbuf1.st_mode != statbuf2.st_mode) { fprintf (stderr, "files %s and %s have different access modes: %03o and %03o\n", file1, file2, (unsigned int) statbuf1.st_mode, (unsigned int) statbuf2.st_mode); return 1; } } { #if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */ static const int types[] = { ACL_TYPE_ACCESS # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ , ACL_TYPE_EXTENDED # endif }; int t; for (t = 0; t < sizeof (types) / sizeof (types[0]); t++) { int type = types[t]; acl_t acl1; char *text1; int errno1; acl_t acl2; char *text2; int errno2; acl1 = acl_get_file (file1, type); if (acl1 == (acl_t)NULL) { text1 = NULL; errno1 = errno; } else { text1 = acl_to_text (acl1, NULL); if (text1 == NULL) errno1 = errno; else errno1 = 0; } acl2 = acl_get_file (file2, type); if (acl2 == (acl_t)NULL) { text2 = NULL; errno2 = errno; } else { text2 = acl_to_text (acl2, NULL); if (text2 == NULL) errno2 = errno; else errno2 = 0; } if (acl1 != (acl_t)NULL) { if (acl2 != (acl_t)NULL) { if (text1 != NULL) { if (text2 != NULL) { if (strcmp (text1, text2) != 0) { fprintf (stderr, "files %s and %s have different ACLs:\n%s\n%s\n", file1, file2, text1, text2); return 1; } } else { fprintf (stderr, "file %s has a valid ACL, but file %s has an invalid ACL\n", file1, file2); return 1; } } else { if (text2 != NULL) { fprintf (stderr, "file %s has an invalid ACL, but file %s has a valid ACL\n", file1, file2); return 1; } else { if (errno1 != errno2) { fprintf (stderr, "files %s and %s have differently invalid ACLs, errno = %d vs. %d\n", file1, file2, errno1, errno2); return 1; } } } } else { fprintf (stderr, "file %s has an ACL, but file %s has no ACL\n", file1, file2); return 1; } } else { if (acl2 != (acl_t)NULL) { fprintf (stderr, "file %s has no ACL, but file %s has an ACL\n", file1, file2); return 1; } } acl_free (text2); if (acl2 != (acl_t)NULL) acl_free (acl2); acl_free (text1); if (acl1 != (acl_t)NULL) acl_free (acl1); } #elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ int count1; int count2; count1 = acl (file1, GETACLCNT, 0, NULL); if (count1 < 0 && errno == ENOSYS) /* Can happen on Solaris 10 with ZFS */ count1 = 0; count2 = acl (file2, GETACLCNT, 0, NULL); if (count2 < 0 && errno == ENOSYS) /* Can happen on Solaris 10 with ZFS */ count2 = 0; if (count1 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", file1, file2, count1, count2); return 1; } else { aclent_t *entries1 = XNMALLOC (count1, aclent_t); aclent_t *entries2 = XNMALLOC (count2, aclent_t); int i; if (count1 > 0 && acl (file1, GETACL, count1, entries1) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 > 0 && acl (file2, GETACL, count2, entries2) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); fflush (stderr); abort (); } for (i = 0; i < count1; i++) { if (entries1[i].a_type != entries2[i].a_type) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", file1, file2, i, entries1[i].a_type, entries2[i].a_type); return 1; } if (entries1[i].a_id != entries2[i].a_id) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); return 1; } if (entries1[i].a_perm != entries2[i].a_perm) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); return 1; } } free (entries2); free (entries1); } # ifdef ACE_GETACL count1 = acl (file1, ACE_GETACLCNT, 0, NULL); if (count1 < 0 && errno == EINVAL) count1 = 0; count2 = acl (file2, ACE_GETACLCNT, 0, NULL); if (count2 < 0 && errno == EINVAL) count2 = 0; if (count1 < 0) { fprintf (stderr, "error accessing the ACE-ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 < 0) { fprintf (stderr, "error accessing the ACE-ACLs of file %s\n", file2); fflush (stderr); abort (); } { ace_t *entries1 = XNMALLOC (count1, ace_t); ace_t *entries2 = XNMALLOC (count2, ace_t); int ret; int i; ret = acl (file1, ACE_GETACL, count1, entries1); if (ret < 0 && errno == EINVAL) count1 = 0; else if (ret < count1) { fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file1); fflush (stderr); abort (); } ret = acl (file2, ACE_GETACL, count2, entries2); if (ret < 0 && errno == EINVAL) count2 = 0; else if (ret < count2) { fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file2); fflush (stderr); abort (); } if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACE-ACLs: %d and %d\n", file1, file2, count1, count2); return 1; } for (i = 0; i < count1; i++) { if (entries1[i].a_type != entries2[i].a_type) { fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different types %d and %d\n", file1, file2, i, entries1[i].a_type, entries2[i].a_type); return 1; } if (entries1[i].a_who != entries2[i].a_who) { fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different ids %d and %d\n", file1, file2, i, (int)entries1[i].a_who, (int)entries2[i].a_who); return 1; } if (entries1[i].a_access_mask != entries2[i].a_access_mask) { fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different access masks %03o and %03o\n", file1, file2, i, (unsigned int) entries1[i].a_access_mask, (unsigned int) entries2[i].a_access_mask); return 1; } if (entries1[i].a_flags != entries2[i].a_flags) { fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different flags 0x%x and 0x%x\n", file1, file2, i, (unsigned int) entries1[i].a_flags, (unsigned int) entries2[i].a_flags); return 1; } } free (entries2); free (entries1); } # endif #elif HAVE_GETACL /* HP-UX */ int count1; int count2; count1 = getacl (file1, 0, NULL); if (count1 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)) count1 = 0; count2 = getacl (file2, 0, NULL); if (count2 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)) count2 = 0; if (count1 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", file1, file2, count1, count2); return 1; } else if (count1 > 0) { struct acl_entry *entries1 = XNMALLOC (count1, struct acl_entry); struct acl_entry *entries2 = XNMALLOC (count2, struct acl_entry); int i; if (getacl (file1, count1, entries1) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (getacl (file2, count2, entries2) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); fflush (stderr); abort (); } for (i = 0; i < count1; i++) { if (entries1[i].uid != entries2[i].uid) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different uids %d and %d\n", file1, file2, i, (int)entries1[i].uid, (int)entries2[i].uid); return 1; } if (entries1[i].gid != entries2[i].gid) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different gids %d and %d\n", file1, file2, i, (int)entries1[i].gid, (int)entries2[i].gid); return 1; } if (entries1[i].mode != entries2[i].mode) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", file1, file2, i, (unsigned int) entries1[i].mode, (unsigned int) entries2[i].mode); return 1; } } free (entries2); free (entries1); } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ { struct acl dummy_entries[NACLVENTRIES]; count1 = acl ((char *) file1, ACL_CNT, NACLVENTRIES, dummy_entries); if (count1 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL)) count1 = 0; count2 = acl ((char *) file2, ACL_CNT, NACLVENTRIES, dummy_entries); if (count2 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL)) count2 = 0; } if (count1 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", file1, file2, count1, count2); return 1; } else if (count1 > 0) { struct acl *entries1 = XNMALLOC (count1, struct acl); struct acl *entries2 = XNMALLOC (count2, struct acl); int i; if (acl ((char *) file1, ACL_GET, count1, entries1) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (acl ((char *) file2, ACL_GET, count2, entries2) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); fflush (stderr); abort (); } for (i = 0; i < count1; i++) { if (entries1[i].a_type != entries2[i].a_type) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", file1, file2, i, entries1[i].a_type, entries2[i].a_type); return 1; } if (entries1[i].a_id != entries2[i].a_id) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); return 1; } if (entries1[i].a_perm != entries2[i].a_perm) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); return 1; } } free (entries2); free (entries1); } # endif #elif HAVE_ACLX_GET /* AIX */ acl_type_t type1; char acl1[1000]; size_t aclsize1 = sizeof (acl1); mode_t mode1; char text1[1000]; size_t textsize1 = sizeof (text1); acl_type_t type2; char acl2[1000]; size_t aclsize2 = sizeof (acl2); mode_t mode2; char text2[1000]; size_t textsize2 = sizeof (text2); /* The docs say that type1 being 0 is equivalent to ACL_ANY, but it is not true, in AIX 5.3. */ type1.u64 = ACL_ANY; if (aclx_get (file1, 0, &type1, acl1, &aclsize1, &mode1) < 0) { if (errno == ENOSYS) text1[0] = '\0'; else { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } } else if (aclx_printStr (text1, &textsize1, acl1, aclsize1, type1, file1, 0) < 0) { fprintf (stderr, "cannot convert the ACLs of file %s to text\n", file1); fflush (stderr); abort (); } /* The docs say that type2 being 0 is equivalent to ACL_ANY, but it is not true, in AIX 5.3. */ type2.u64 = ACL_ANY; if (aclx_get (file2, 0, &type2, acl2, &aclsize2, &mode2) < 0) { if (errno == ENOSYS) text2[0] = '\0'; else { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } } else if (aclx_printStr (text2, &textsize2, acl2, aclsize2, type2, file2, 0) < 0) { fprintf (stderr, "cannot convert the ACLs of file %s to text\n", file2); fflush (stderr); abort (); } if (strcmp (text1, text2) != 0) { fprintf (stderr, "files %s and %s have different ACLs:\n%s\n%s\n", file1, file2, text1, text2); return 1; } #elif HAVE_STATACL /* older AIX */ union { struct acl a; char room[4096]; } acl1; union { struct acl a; char room[4096]; } acl2; unsigned int i; if (statacl (file1, STX_NORMAL, &acl1.a, sizeof (acl1)) < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (statacl (file2, STX_NORMAL, &acl2.a, sizeof (acl2)) < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } if (acl1.a.acl_len != acl2.a.acl_len) { fprintf (stderr, "files %s and %s have different ACL lengths: %u and %u\n", file1, file2, acl1.a.acl_len, acl2.a.acl_len); return 1; } if (acl1.a.acl_mode != acl2.a.acl_mode) { fprintf (stderr, "files %s and %s have different ACL modes: %03o and %03o\n", file1, file2, acl1.a.acl_mode, acl2.a.acl_mode); return 1; } if (acl1.a.u_access != acl2.a.u_access || acl1.a.g_access != acl2.a.g_access || acl1.a.o_access != acl2.a.o_access) { fprintf (stderr, "files %s and %s have different ACL access masks: %03o %03o %03o and %03o %03o %03o\n", file1, file2, acl1.a.u_access, acl1.a.g_access, acl1.a.o_access, acl2.a.u_access, acl2.a.g_access, acl2.a.o_access); return 1; } if (memcmp (acl1.a.acl_ext, acl2.a.acl_ext, acl1.a.acl_len) != 0) { fprintf (stderr, "files %s and %s have different ACL entries\n", file1, file2); return 1; } #elif HAVE_ACLSORT /* NonStop Kernel */ int count1; int count2; count1 = acl ((char *) file1, ACL_CNT, NACLENTRIES, NULL); count2 = acl ((char *) file2, ACL_CNT, NACLENTRIES, NULL); if (count1 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (count2 < 0) { fprintf (stderr, "error accessing the ACLs of file %s\n", file2); fflush (stderr); abort (); } if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", file1, file2, count1, count2); return 1; } else if (count1 > 0) { struct acl *entries1 = XNMALLOC (count1, struct acl); struct acl *entries2 = XNMALLOC (count2, struct acl); int i; if (acl ((char *) file1, ACL_GET, count1, entries1) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); fflush (stderr); abort (); } if (acl ((char *) file2, ACL_GET, count2, entries2) < count1) { fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); fflush (stderr); abort (); } for (i = 0; i < count1; i++) { if (entries1[i].a_type != entries2[i].a_type) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", file1, file2, i, entries1[i].a_type, entries2[i].a_type); return 1; } if (entries1[i].a_id != entries2[i].a_id) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); return 1; } if (entries1[i].a_perm != entries2[i].a_perm) { fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); return 1; } } free (entries2); free (entries1); } #endif } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sched.c����������������������������������������������������������0000664�0000000�0000000�00000002303�14110572173�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sched.h> substitute. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <sched.h> /* Check that 'struct sched_param' is defined. */ static struct sched_param a; /* Check that the SCHED_* macros are defined and compile-time constants. */ int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; /* Check that the types are all defined. */ pid_t t1; static int f1; int main () { /* Check fields of 'struct sched_param'. */ f1 = a.sched_priority; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-scratch-buffer.c�������������������������������������������������0000664�0000000�0000000�00000006151�14110572173�0021463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of scratch_buffer functions. Copyright (C) 2018-2021 Free Software Foundation, Inc. This 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>, 2018. */ #include <config.h> #include <scratch_buffer.h> #include <string.h> #include "macros.h" static int byte_at (unsigned long long int i) { return ((i % 13) + ((i * i) % 251)) & 0xff; } int main () { /* Check scratch_buffer_set_array_size. */ { size_t sizes[] = { 100, 1000, 10000, 100000 }; size_t s; for (s = 0; s < SIZEOF (sizes); s++) { size_t size = sizes[s]; struct scratch_buffer buf; bool ok; size_t i; scratch_buffer_init (&buf); ok = scratch_buffer_set_array_size (&buf, size, 1); ASSERT (ok); for (i = 0; i < size; i++) ((unsigned char *) buf.data)[i] = byte_at (i); memset (buf.data, 'x', buf.length); memset (buf.data, 'y', size); scratch_buffer_free (&buf); } } /* Check scratch_buffer_grow. */ { size_t sizes[] = { 100, 1000, 10000, 100000 }; size_t s; for (s = 0; s < SIZEOF (sizes); s++) { size_t size = sizes[s]; struct scratch_buffer buf; bool ok; size_t i; scratch_buffer_init (&buf); while (buf.length < size) { ok = scratch_buffer_grow (&buf); ASSERT (ok); } for (i = 0; i < size; i++) ((unsigned char *) buf.data)[i] = byte_at (i); memset (buf.data, 'x', buf.length); memset (buf.data, 'y', size); scratch_buffer_free (&buf); } } /* Check scratch_buffer_grow_preserve. */ { size_t sizes[] = { 100, 1000, 10000, 100000 }; struct scratch_buffer buf; size_t s; size_t size; bool ok; size_t i; scratch_buffer_init (&buf); s = 0; size = sizes[s]; ok = scratch_buffer_set_array_size (&buf, size, 1); ASSERT (ok); for (i = 0; i < size; i++) ((unsigned char *) buf.data)[i] = byte_at (i); for (; s < SIZEOF (sizes); s++) { size_t oldsize = size; size = sizes[s]; while (buf.length < size) { ok = scratch_buffer_grow_preserve (&buf); ASSERT (ok); } for (i = 0; i < oldsize; i++) ASSERT(((unsigned char *) buf.data)[i] == byte_at (i)); for (i = oldsize; i < size; i++) ((unsigned char *) buf.data)[i] = byte_at (i); } scratch_buffer_free (&buf); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-search-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002611�14110572173�0020540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <search.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <search.h> #include "signature.h" #if GNULIB_TEST_TSEARCH SIGNATURE_CHECK (GNULIB_NAMESPACE::tsearch, void *, (const void *, void **, _gl_search_compar_fn)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tfind, void *, (const void *, void *const *, _gl_search_compar_fn)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tdelete, void *, (const void *, void **, _gl_search_compar_fn)); SIGNATURE_CHECK (GNULIB_NAMESPACE::twalk, void, (const void *, _gl_search_action_fn)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-search.c���������������������������������������������������������0000664�0000000�0000000�00000001552�14110572173�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <search.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <search.h> int main () { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-select-fd.c������������������������������������������������������0000664�0000000�0000000�00000004426�14110572173�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading or writing from a given file descriptor. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <stdlib.h> #include <sys/select.h> int main (int argc, char *argv[]) { if (argc == 4) { char mode = argv[1][0]; if (mode == 'r' || mode == 'w') { int fd = atoi (argv[2]); if (fd >= 0) { const char *result_file_name = argv[3]; FILE *result_file = fopen (result_file_name, "wb"); if (result_file != NULL) { fd_set fds; struct timeval timeout; int ret; FD_ZERO (&fds); FD_SET (fd, &fds); timeout.tv_sec = 0; timeout.tv_usec = 10000; ret = (mode == 'r' ? select (fd + 1, &fds, NULL, NULL, &timeout) : select (fd + 1, NULL, &fds, NULL, &timeout)); if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (fd, &fds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } fprintf (result_file, "%d\n", ret); exit (0); } } } } fprintf (stderr, "Usage: test-select-fd mode fd result-file-name\n"); exit (1); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-select-in.sh�����������������������������������������������������0000775�0000000�0000000�00000001735�14110572173�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test select() on file descriptors opened for reading. # This test is known to fail on Solaris 2.6 and older, due to its handling # of /dev/null. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-select-in.tmp" # Regular files. rm -f t-select-in.tmp ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < ./test-select-fd${EXEEXT} test `cat t-select-in.tmp` = "1" || exit 1 # Pipes. rm -f t-select-in.tmp { sleep 1; echo abc; } | \ { ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; cat > /dev/null; } test `cat t-select-in.tmp` = "0" || exit 1 rm -f t-select-in.tmp echo abc | { sleep 1; ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; } test `cat t-select-in.tmp` = "1" || exit 1 # Special files. # This part of the test is known to fail on Solaris 2.6 and older. rm -f t-select-in.tmp ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < /dev/null test `cat t-select-in.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 �����������������������������������gnulib-20210822~d383792/tests/test-select-out.sh����������������������������������������������������0000775�0000000�0000000�00000001644�14110572173�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test select() on file descriptors opened for writing. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-select-out.out t-select-out.tmp" # Regular files. rm -f t-select-out.tmp ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > t-select-out.out test `cat t-select-out.tmp` = "1" || exit 1 # Pipes. if false; then # This test fails on some platforms. rm -f t-select-out.tmp ( { echo abc; ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | { sleep 1; cat; } ) > /dev/null test `cat t-select-out.tmp` = "0" || exit 1 fi rm -f t-select-out.tmp ( { sleep 1; echo abc; ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | cat) > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 # Special files. rm -f t-select-out.tmp ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 ��������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-select-stdin.c���������������������������������������������������0000664�0000000�0000000�00000004333�14110572173�0021163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading from stdin. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <stdlib.h> #include <sys/select.h> #include <sys/time.h> #include <unistd.h> #include "macros.h" int main (void) { printf ("Applying select() from standard input. Press Ctrl-C to abort.\n"); for (;;) { struct timeval before; struct timeval after; unsigned long spent_usec; fd_set readfds; struct timeval timeout; int ret; gettimeofday (&before, NULL); FD_ZERO (&readfds); FD_SET (0, &readfds); timeout.tv_sec = 0; timeout.tv_usec = 500000; ret = select (1, &readfds, NULL, NULL, &timeout); gettimeofday (&after, NULL); spent_usec = (after.tv_sec - before.tv_sec) * 1000000 + after.tv_usec - before.tv_usec; if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (0, &readfds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } if (ret == 0) { if (spent_usec < 250000) { fprintf (stderr, "returned too early\n"); exit (1); } /* Timeout */ printf ("."); ASSERT (fflush (stdout) == 0); } else { char c; printf ("Input available! Trying to read 1 byte...\n"); ASSERT (read (0, &c, 1) == 1); } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-select.c���������������������������������������������������������0000664�0000000�0000000�00000002026�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini, 2008. */ #include <config.h> #include <sys/select.h> #include "signature.h" SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); #include "test-select.h" int main (void) { return test_function (select); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-select.h���������������������������������������������������������0000664�0000000�0000000�00000026411�14110572173�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini, 2008. */ #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <stdbool.h> #include <sys/ioctl.h> #include <errno.h> #include "macros.h" #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #ifdef HAVE_SYS_WAIT_H # include <sys/wait.h> #endif #define TEST_PORT 12345 typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *); /* Minimal testing infrastructure. */ static int failures; static void failed (const char *reason) { if (++failures > 1) printf (" "); printf ("failed (%s)\n", reason); } static int test (void (*fn) (select_fn), select_fn my_select, const char *msg) { failures = 0; printf ("%s... ", msg); fflush (stdout); fn (my_select); if (!failures) printf ("passed\n"); return failures; } /* Funny socket code. */ static int open_server_socket (void) { int s, x; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) { perror ("bind"); exit (77); } if (listen (s, 1) < 0) { perror ("listen"); exit (77); } return s; } static int connect_to_socket (bool blocking) { int s; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (!blocking) { #ifdef WINDOWS_NATIVE unsigned long iMode = 1; ioctl (s, FIONBIO, (char *) &iMode); #elif defined F_GETFL int oldflags = fcntl (s, F_GETFL, NULL); if (!(oldflags & O_NONBLOCK)) fcntl (s, F_SETFL, oldflags | O_NONBLOCK); #endif } if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0 && (blocking || errno != EINPROGRESS)) { perror ("connect"); exit (77); } return s; } /* A slightly more convenient interface to select(2). Waits until a specific event occurs on a file descriptor FD. EV is a bit mask of events to look for: SEL_IN - input can be polled without blocking, SEL_OUT - output can be provided without blocking, SEL_EXC - an exception occurred, A maximum wait time is specified by TIMEOUT. *TIMEOUT = { 0, 0 } means to return immediately, TIMEOUT = NULL means to wait indefinitely. */ enum { SEL_IN = 1, SEL_OUT = 2, SEL_EXC = 4 }; static int do_select (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; int r, rev; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); r = my_select (fd + 1, &rfds, &wfds, &xfds, timeout); if (r < 0) return r; rev = 0; if (FD_ISSET (fd, &rfds)) rev |= SEL_IN; if (FD_ISSET (fd, &wfds)) rev |= SEL_OUT; if (FD_ISSET (fd, &xfds)) rev |= SEL_EXC; if (rev && r == 0) failed ("select returned 0"); if (rev & ~ev) failed ("select returned unrequested events"); return rev; } static int do_select_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select (fd, ev, &tv0, my_select); } static int do_select_wait (int fd, int ev, select_fn my_select) { return do_select (fd, ev, NULL, my_select); } /* Test select(2) for TTYs. */ #ifdef INTERACTIVE static void test_tty (select_fn my_select) { if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read"); if (do_select_nowait (0, SEL_OUT, my_select) == 0) failed ("cannot write"); if (do_select_wait (0, SEL_IN, my_select) == 0) failed ("return with infinite timeout"); getchar (); if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read after getc"); } #endif static int do_select_bad_nfd_nowait (int nfd, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; errno = 0; return my_select (nfd, NULL, NULL, NULL, &tv0); } static void test_bad_nfd (select_fn my_select) { if (do_select_bad_nfd_nowait (-1, my_select) != -1 || errno != EINVAL) failed ("invalid errno after negative nfds"); /* Can't test FD_SETSIZE + 1 for EINVAL, since some systems allow dynamically larger set size by redefining FD_SETSIZE anywhere up to the actual maximum fd. */ #if 0 if (do_select_bad_nfd_nowait (FD_SETSIZE + 1, my_select) != -1 || errno != EINVAL) failed ("invalid errno after bogus nfds"); #endif } /* Test select(2) on invalid file descriptors. */ static int do_select_bad_fd (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); errno = 0; return my_select (fd + 1, &rfds, &wfds, &xfds, timeout); /* In this case, when fd is invalid, on some platforms, the bit for fd is left alone in the fd_set, whereas on other platforms it is cleared. So, don't check the bit for fd here. */ } static int do_select_bad_fd_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select_bad_fd (fd, ev, &tv0, my_select); } static void test_bad_fd (select_fn my_select) { /* This tests fails on OSF/1 and native Windows, even with fd = 16. */ #if !(defined __osf__ || defined WINDOWS_NATIVE) int fd; /* On Linux, Mac OS X, *BSD, values of fd like 99 or 399 are discarded by the kernel early and therefore do *not* lead to EBADF, as required by POSIX. */ # if defined __linux__ || (defined __APPLE__ && defined __MACH__) || (defined __FreeBSD__ || defined __DragonFly__) || defined __OpenBSD__ || defined __NetBSD__ fd = 14; # else fd = 99; # endif /* Even on the best POSIX compliant platforms, values of fd >= FD_SETSIZE require an nfds argument that is > FD_SETSIZE and thus may lead to EINVAL, not EBADF. */ if (fd >= FD_SETSIZE) fd = FD_SETSIZE - 1; close (fd); if (do_select_bad_fd_nowait (fd, SEL_IN, my_select) == 0 || errno != EBADF) failed ("invalid fd among rfds"); if (do_select_bad_fd_nowait (fd, SEL_OUT, my_select) == 0 || errno != EBADF) failed ("invalid fd among wfds"); if (do_select_bad_fd_nowait (fd, SEL_EXC, my_select) == 0 || errno != EBADF) failed ("invalid fd among xfds"); #endif } /* Test select(2) for unconnected nonblocking sockets. */ static void test_connect_first (select_fn my_select) { int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; int c1, c2; if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != 0) failed ("can read, socket not connected"); c1 = connect_to_socket (false); if (do_select_wait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); addrlen = sizeof (ia); c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (close (c1) == 0); ASSERT (close (c2) == 0); } /* Test select(2) for unconnected blocking sockets. */ static void test_accept_first (select_fn my_select) { #ifndef WINDOWS_NATIVE int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; char buf[3]; int c, pid; pid = fork (); if (pid < 0) return; if (pid == 0) { addrlen = sizeof (ia); c = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (write (c, "foo", 3) == 3); ASSERT (read (c, buf, 3) == 3); shutdown (c, SHUT_RD); ASSERT (close (c) == 0); exit (0); } else { ASSERT (close (s) == 0); c = connect_to_socket (true); if (do_select_nowait (c, SEL_OUT, my_select) != SEL_OUT) failed ("cannot write after blocking connect"); ASSERT (write (c, "foo", 3) == 3); wait (&pid); if (do_select_wait (c, SEL_IN, my_select) != SEL_IN) failed ("cannot read data left in the socket by closed process"); ASSERT (read (c, buf, 3) == 3); ASSERT (write (c, "foo", 3) == 3); (void) close (c); /* may fail with errno = ECONNRESET */ } #endif } /* Common code for pipes and connected sockets. */ static void test_pair (int rd, int wd, select_fn my_select) { char buf[3]; if (do_select_wait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); if (do_select_nowait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); ASSERT (write (wd, "foo", 3) == 3); if (do_select_wait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); if (do_select_nowait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); ASSERT (read (rd, buf, 3) == 3); } /* Test select(2) on connected sockets. */ static void test_socket_pair (select_fn my_select) { struct sockaddr_in ia; socklen_t addrlen = sizeof (ia); int s = open_server_socket (); int c1 = connect_to_socket (false); int c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); test_pair (c1, c2, my_select); ASSERT (close (c1) == 0); ASSERT (write (c2, "foo", 3) == 3); (void) close (c2); /* may fail with errno = ECONNRESET */ } /* Test select(2) on pipes. */ static void test_pipe (select_fn my_select) { int fd[2]; ASSERT (pipe (fd) == 0); test_pair (fd[0], fd[1], my_select); ASSERT (close (fd[0]) == 0); ASSERT (close (fd[1]) == 0); } /* Do them all. */ static int test_function (select_fn my_select) { int result = 0; #ifdef INTERACTIVE printf ("Please press Enter\n"); test (test_tty, "TTY", my_select); #endif result += test (test_bad_nfd, my_select, "Invalid nfd test"); result += test (test_bad_fd, my_select, "Invalid fd test"); result += test (test_connect_first, my_select, "Unconnected socket test"); result += test (test_socket_pair, my_select, "Connected sockets test"); result += test (test_accept_first, my_select, "General socket test with fork"); result += test (test_pipe, my_select, "Pipe test"); return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-send.c�����������������������������������������������������������0000664�0000000�0000000�00000002466�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the send() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (send, ssize_t, (int, const void *, size_t, int)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { char byte = 'x'; errno = 0; ASSERT (send (-1, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } { char byte = 'x'; close (99); errno = 0; ASSERT (send (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sendto.c���������������������������������������������������������0000664�0000000�0000000�00000003421�14110572173�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the sendto() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (sendto, ssize_t, (int, const void *, size_t, int, const struct sockaddr *, socklen_t)); #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { char byte = 'x'; errno = 0; ASSERT (sendto (-1, &byte, 1, 0, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { char byte = 'x'; close (99); errno = 0; ASSERT (sendto (99, &byte, 1, 0, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-set-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000003274�14110572173�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of set data type implementation as a C++ class. Copyright (C) 2020-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2020. This 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 "gl_set.hh" #include "gl_array_set.h" #include <string.h> #include "macros.h" static const char A[] = "A"; static const char C[] = "C"; static const char D[] = "D"; int main (int argc, char *argv[]) { gl_Set<const char *> set1; set1 = gl_Set<const char *> (GL_ARRAY_SET, NULL, NULL, NULL); set1.add (A); set1.add (C); set1.add (D); set1.add (C); ASSERT (set1.size () == 3); gl_Set<const char *>::iterator iter1 = set1.begin (); const char *elt; ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "A") == 0 || strcmp (elt, "D") == 0 || strcmp (elt, "C") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "A") == 0 || strcmp (elt, "D") == 0 || strcmp (elt, "C") == 0); ASSERT (iter1.next (elt)); ASSERT (strcmp (elt, "A") == 0 || strcmp (elt, "D") == 0 || strcmp (elt, "C") == 0); ASSERT (!iter1.next (elt)); set1.free (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-set-mode-acl-1.sh������������������������������������������������0000775�0000000�0000000�00000000466�14110572173�0021373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test set-mode-acl on the file system of /var/tmp, which usually is a local # file system. . "${srcdir=.}/init.sh"; path_prepend_ . if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi test -d $TMPDIR || Exit 77 export TMPDIR $BOURNE_SHELL "${srcdir}/test-set-mode-acl.sh" Exit $? ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-set-mode-acl-2.sh������������������������������������������������0000775�0000000�0000000�00000000374�14110572173�0021372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test set-mode-acl on the file system of the build directory, which may be # a local file system or NFS mounted. . "${srcdir=.}/init.sh"; path_prepend_ . TMPDIR=`pwd` export TMPDIR $BOURNE_SHELL "${srcdir}/test-set-mode-acl.sh" Exit $? ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-set-mode-acl.c���������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting an ACL equivalent to a mode. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "acl.h" #include <stdlib.h> #include "macros.h" int main (int argc, char *argv[]) { const char *file; int mode; ASSERT (argc == 3); file = argv[1]; mode = strtol (argv[2], NULL, 8); set_acl (file, -1, mode); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-set-mode-acl.sh��������������������������������������������������0000775�0000000�0000000�00000015773�14110572173�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show all commands when run with environment variable VERBOSE=yes. test -z "$VERBOSE" || set -x test "$USE_ACL" = 0 && { echo "Skipping test: insufficient ACL support" exit 77 } # func_tmpdir # creates a temporary directory. # Sets variable # - tmp pathname of freshly created temporary directory func_tmpdir () { # Use the environment variable TMPDIR, falling back to /tmp. This allows # users to specify a different temporary directory, for example, if their # /tmp is filled up or too small. : ${TMPDIR=/tmp} { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=$TMPDIR/gl$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 exit 1 } } func_tmpdir # builddir may already be set by the script that invokes this one. case "$builddir" in '') builddir=`pwd` ;; /* | ?:*) ;; *) builddir=`pwd`/$builddir ;; esac cd "$builddir" || { echo "$0: cannot determine build directory (unreadable parent dir?)" >&2 exit 1 } # Switch to a temporary directory, to increase the likelihood that ACLs are # supported on the current file system. (/tmp is usually locally mounted, # whereas the build dir is sometimes NFS-mounted.) ( cd "$tmp" # Prepare tmpfile0. rm -f tmpfile[0-9] echo "Simple contents" > tmpfile0 chmod 600 tmpfile0 # Classification of the platform according to the programs available for # manipulating ACLs. # Possible values are: # linux, cygwin, freebsd, solaris, hpux, hpuxjfs, osf1, aix, macosx, irix, none. # TODO: Support also native Windows platforms (mingw). acl_flavor=none if (getfacl tmpfile0 >/dev/null) 2>/dev/null; then # Platforms with the getfacl and setfacl programs. # Linux, FreeBSD, Solaris, Cygwin. if (setfacl --help >/dev/null) 2>/dev/null; then # Linux, Cygwin. if (LC_ALL=C setfacl --help | grep ' --set-file' >/dev/null) 2>/dev/null; then # Linux. acl_flavor=linux else acl_flavor=cygwin fi else # FreeBSD, Solaris. if (LC_ALL=C setfacl 2>&1 | grep '\-x entries' >/dev/null) 2>/dev/null; then # FreeBSD. acl_flavor=freebsd else # Solaris. acl_flavor=solaris fi fi else if (lsacl / >/dev/null) 2>/dev/null; then # Platforms with the lsacl and chacl programs. # HP-UX, sometimes also IRIX. if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # HP-UX 11.11 or newer. acl_flavor=hpuxjfs else # HP-UX 11.00. acl_flavor=hpux fi else if (getacl tmpfile0 >/dev/null) 2>/dev/null; then # Tru64, NonStop Kernel. if (getacl -m tmpfile0 >/dev/null) 2>/dev/null; then # Tru64. acl_flavor=osf1 else # NonStop Kernel. acl_flavor=nsk fi else if (aclget tmpfile0 >/dev/null) 2>/dev/null; then # AIX. acl_flavor=aix else if (fsaclctl -v >/dev/null) 2>/dev/null; then # Mac OS X. acl_flavor=macosx else if test -f /sbin/chacl; then # IRIX. acl_flavor=irix fi fi fi fi fi fi if test $acl_flavor != none; then # A POSIX compliant 'id' program. if test -f /usr/xpg4/bin/id; then ID=/usr/xpg4/bin/id else ID=id fi # Use a user and group id different from the current one, to avoid # redundant/ambiguous ACLs. myuid=`$ID -u` mygid=`$ID -g` auid=1 if test "$auid" = "$myuid"; then auid=2; fi agid=1 if test "$agid" = "$mygid"; then agid=2; fi fi for mode in 700 400 200 100 644 650 605 011 4700 2070; do rm -f tmpfile0 tmpfile1 tmpfile2 # Prepare a file with no ACL. echo "Anything" > tmpfile0 # If a mode is not supported (e.g. 2070 on FreeBSD), we skip testing it. if chmod $mode tmpfile0 2>/dev/null; then modestring0=`ls -l tmpfile0 | dd ibs=1 count=10 2>/dev/null` # Prepare a file with no ACL. echo "Some contents" > tmpfile1 chmod 600 tmpfile1 # Try to set the ACL to only the given mode. ${CHECKER} "$builddir"/test-set-mode-acl${EXEEXT} tmpfile1 $mode # Verify that tmpfile1 has no ACL and has the desired mode. modestring=`ls -l tmpfile1 | dd ibs=1 count=10 2>/dev/null` if test "x$modestring" != "x$modestring0"; then echo "mode = $mode: tmpfile1 has wrong mode: $modestring" 1>&2 exit 1 fi if test `${CHECKER} "$builddir"/test-file-has-acl${EXEEXT} tmpfile1` != no; then echo "mode = $mode: tmpfile1 got an ACL" 1>&2 exit 1 fi if test $acl_flavor != none; then # Prepare a file with an ACL. echo "Special contents" > tmpfile2 chmod 600 tmpfile2 # Set an ACL for a user (or group). case $acl_flavor in linux | freebsd | solaris) setfacl -m user:$auid:1 tmpfile0 ;; cygwin) setfacl -m group:0:1 tmpfile0 ;; hpux) orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 ;; hpuxjfs) orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'` chacl -r "${orig}($auid.%,--x)" tmpfile0 \ || setacl -m user:$auid:1 tmpfile0 ;; osf1) setacl -u user:$auid:1 tmpfile0 ;; nsk) setacl -m user:$auid:1 tmpfile0 ;; aix) { aclget tmpfile0 | sed -e 's/disabled$/enabled/'; echo " permit --x u:$auid"; } | aclput tmpfile0 ;; macosx) /bin/chmod +a "user:daemon allow execute" tmpfile0 ;; irix) /sbin/chacl user::rw-,group::---,other::---,user:$auid:--x tmpfile0 ;; esac # Try to set the ACL to only the given mode. ${CHECKER} "$builddir"/test-set-mode-acl${EXEEXT} tmpfile2 $mode # Verify that tmpfile2 has no ACL and has the desired mode. modestring=`ls -l tmpfile2 | dd ibs=1 count=10 2>/dev/null` if test "x$modestring" != "x$modestring0"; then echo "mode = $mode: tmpfile2 has wrong mode: $modestring" 1>&2 exit 1 fi if test `${CHECKER} "$builddir"/test-file-has-acl${EXEEXT} tmpfile2` != no; then echo "mode = $mode: tmpfile2 still has an ACL" 1>&2 exit 1 fi fi fi done rm -f tmpfile[0-9] ) || exit 1 rm -rf "$tmp" exit 0 �����gnulib-20210822~d383792/tests/test-setenv.c���������������������������������������������������������0000664�0000000�0000000�00000003107�14110572173�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of setenv. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (setenv, int, (char const *, char const *, int)); #include <errno.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test overwriting. */ ASSERT (setenv ("a", "==", -1) == 0); ASSERT (setenv ("a", "2", 0) == 0); ASSERT (strcmp (getenv ("a"), "==") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (setenv ("", "", 1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (setenv ("a=b", "", 0) == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (setenv (NULL, "", 0) == -1); ASSERT (errno == EINVAL); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sethostname1.c���������������������������������������������������0000664�0000000�0000000�00000002245�14110572173�0021200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * Written by Ben Walton. * * This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (sethostname, int, (const char *, size_t)); int do_dangerous_things; int main () { /* Some code that has a link-time dependency to the sethostname() function and that is likely not optimized away by compilers. */ if (do_dangerous_things) { /* Never executed. */ int ret = sethostname ("oprah", 5); (void) ret; } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sethostname2.c���������������������������������������������������0000664�0000000�0000000�00000007622�14110572173�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * Written by Ben Walton. * * This 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 <unistd.h> /* for HOST_NAME_MAX */ #include <limits.h> /* for strlen */ #include <string.h> #include <errno.h> #include <stdio.h> #include "root-uid.h" #include "macros.h" #define TESTHOSTNAME "gnulib-hostname" /* mingw and MSVC 9 lack geteuid, so setup a dummy value. On Cygwin, geteuid() may return non-zero even for user accounts with administrator privileges, so use a dummy value as well. */ #if !HAVE_GETEUID || defined __CYGWIN__ # define geteuid() ROOT_UID #endif int main (int argc, _GL_UNUSED char *argv[]) { char origname[HOST_NAME_MAX]; char newname[HOST_NAME_MAX]; char longname[HOST_NAME_MAX + 2]; int rcs, i; /* skip the tests if we don't have root privilege. this does not consider things like CAP_SYS_ADMIN (linux) or PRIV_SYS_ADMIN (solaris), etc. systems without a working geteuid (mingw, MSVC 9) will always skip this test. */ if (geteuid () != ROOT_UID) { fprintf (stderr, "Skipping test: insufficient permissions.\n"); return 77; } /* we want to ensure we can do a get/set/get check to ensure the change is accepted. record the current name so it can be restored later */ ASSERT (gethostname (origname, sizeof (origname)) == 0); /* try setting a valid hostname. if it fails -1/ENOSYS, we will skip the test for long names as this is an indication we're using the stub function that doesn't do anything on this platform. */ rcs = sethostname (TESTHOSTNAME, strlen (TESTHOSTNAME)); if (rcs != 0) { if (rcs == -1 && errno == ENOSYS) { fprintf (stderr, "Skipping test: sethostname is not really implemented.\n"); return 77; } else if (rcs == -1 && (errno == EPERM || errno == EACCES)) /* Cygwin */ { fprintf (stderr, "Skipping test: insufficient permissions.\n"); return 77; } else { fprintf (stderr, "error setting valid hostname.\n"); return 1; } } else { ASSERT (gethostname (newname, sizeof (newname)) == 0); /* On Windows, a hostname change becomes effective only after a reboot. */ #if !(defined _WIN32 || defined __CYGWIN__) /* if we don't get back what we put in, there is no need to restore the original name as we will assume it was not properly changed. */ if (strcmp (newname, TESTHOSTNAME) != 0) { fprintf (stderr, "set/get comparison failed.\n"); return 1; } #endif } /* glibc does allow setting a zero length name, so the lower bound needs no test. validate that we are constrained by HOST_NAME_MAX */ for (i = 0; i < (HOST_NAME_MAX + 1); i++) longname[i] = 'a'; longname[i] = '\0'; rcs = sethostname (longname, (HOST_NAME_MAX + 1)); if (rcs != -1) { /* attempt to restore the original name. */ ASSERT (sethostname (origname, strlen (origname)) == 0); fprintf (stderr, "setting a too long hostname succeeded.\n"); return 1; } /* restore the original name. */ ASSERT (sethostname (origname, strlen (origname)) == 0); return 0; } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale1.c�����������������������������������������������������0000664�0000000�0000000�00000003407�14110572173�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <locale.h> #include "signature.h" SIGNATURE_CHECK (setlocale, char *, (int, const char *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { char *name1; char *name2; /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; name1 = strdup (setlocale (LC_ALL, NULL)); /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL) return 1; name2 = strdup (setlocale (LC_ALL, NULL)); ASSERT (name1); ASSERT (name2); /* Test that the two results are the same. */ ASSERT (strcmp (name1, name2) == 0); free (name1); free (name2); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale1.sh����������������������������������������������������0000775�0000000�0000000�00000001562�14110572173�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} : ${LOCALE_JA=ja_JP} : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none \ && test $LOCALE_JA = none && test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale2.c�����������������������������������������������������0000664�0000000�0000000�00000003350�14110572173�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, "") != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for implicit %s\n", getenv ("LC_ALL")); return 1; } /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for explicit %s\n", getenv ("LC_ALL")); return 1; } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale2.sh����������������������������������������������������0000775�0000000�0000000�00000001365�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test locale names with likely unsupported encoding in Unix syntax. for name in ar_SA.ISO-8859-1 fr_FR.CP1251 zh_TW.GB18030 zh_CN.BIG5; do env LC_ALL=$name ${CHECKER} ./test-setlocale2${EXEEXT} 1 || exit 1 done # Test locale names with likely unsupported encoding in native Windows syntax. for name in "Arabic_Saudi Arabia.1252" "Arabic_Saudi Arabia.65001" \ French_France.65001 Japanese_Japan.65001 Turkish_Turkey.65001 \ Chinese_Taiwan.65001 Chinese_China.54936 Chinese_China.65001; do # Here we use 'env' to set the LC_ALL environment variable, because on # Solaris 11.0, the /bin/sh refuses to do it for Turkish_Turkey.65001. env LC_ALL="$name" ${CHECKER} ./test-setlocale2${EXEEXT} 1 || exit 1 done exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale_null-mt-all.c������������������������������������������0000664�0000000�0000000�00000007775�14110572173�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for setlocale_null_r (LC_ALL, ...). Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define GERMAN "German_Germany" # define FRENCH "French_France" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define GERMAN "de_DE" # define FRENCH "fr_FR" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = GERMAN ENCODING; static const char LOCALE3[] = FRENCH ENCODING; static char *expected; static void * thread1_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) abort (); if (strcmp (expected, buf) != 0) { fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * thread2_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_ALL_MAX]; setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)); setlocale_null_r (LC_ALL, buf, sizeof (buf)); } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_TIME, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected = strdup (setlocale (LC_ALL, NULL)); /* Create the two threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); /* Let them run for 5 seconds. */ { struct timespec duration; duration.tv_sec = 5; duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif /* Without locking, the results of this test would be: glibc OK musl libc crash < 10 sec macOS crash < 1 sec FreeBSD crash < 1 sec NetBSD crash < 2 sec OpenBSD crash < 1 sec AIX crash < 2 sec HP-UX OK IRIX OK Solaris 10 OK Solaris 11.0 OK Solaris 11.4 OK Solaris OpenIndiana OK Haiku crash < 1 sec Cygwin crash < 1 sec mingw OK MSVC OK (assuming compiler option /MD !) */ ���gnulib-20210822~d383792/tests/test-setlocale_null-mt-one.c������������������������������������������0000664�0000000�0000000�00000007673�14110572173�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for setlocale_null_r (LC_xxx, ...). Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define GERMAN "German_Germany" # define FRENCH "French_France" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define GERMAN "de_DE" # define FRENCH "fr_FR" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = GERMAN ENCODING; static const char LOCALE3[] = FRENCH ENCODING; static char *expected; static void * thread1_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_MAX]; if (setlocale_null_r (LC_NUMERIC, buf, sizeof (buf))) abort (); if (strcmp (expected, buf) != 0) { fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * thread2_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_MAX]; setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)); setlocale_null_r (LC_TIME, buf, sizeof (buf)); } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_TIME, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected = strdup (setlocale (LC_NUMERIC, NULL)); /* Create the two threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); /* Let them run for 2 seconds. */ { struct timespec duration; duration.tv_sec = 2; duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif /* Without locking, the results of this test would be: glibc OK musl libc OK macOS OK FreeBSD OK NetBSD OK OpenBSD crash < 1 sec AIX crash < 2 sec HP-UX OK IRIX OK Solaris 10 OK Solaris 11.0 OK Solaris 11.4 OK Solaris OpenIndiana OK Haiku OK Cygwin OK mingw OK MSVC OK (assuming compiler option /MD !) */ ���������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setlocale_null.c�������������������������������������������������0000664�0000000�0000000�00000002152�14110572173�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setlocale_null_r function. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <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() can be used with $(LIB_SETLOCALE_NULL). */ return setlocale_null_r (LC_ALL, buf, sizeof (buf)) != 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-setsockopt.c�����������������������������������������������������0000664�0000000�0000000�00000002656�14110572173�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test setsockopt() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (setsockopt, int, (int, int, int, const void *, socklen_t)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { int value = 1; errno = 0; ASSERT (setsockopt (-1, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } { int value = 1; close (99); errno = 0; ASSERT (setsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sh-quote.c�������������������������������������������������������0000664�0000000�0000000�00000013573�14110572173�0020340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sh-quote module. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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>, 2012. */ #include <config.h> /* Specification. */ #include "sh-quote.h" #include <limits.h> #include <string.h> #include "macros.h" static void check_one (const char *input, const char *expected) { char buf[1000]; size_t output_len; char *output; char *bufend; output_len = shell_quote_length (input); output = shell_quote (input); ASSERT (strlen (output) == output_len); ASSERT (output_len <= sizeof (buf) - 2); memset (buf, '\0', output_len + 1); buf[output_len + 1] = '%'; bufend = shell_quote_copy (buf, input); ASSERT (bufend == buf + output_len); ASSERT (memcmp (buf, output, output_len + 1) == 0); ASSERT (buf[output_len + 1] == '%'); ASSERT (strcmp (output, expected) == 0); free (output); } int main (void) { /* Check the shell_quote_length, shell_quote_copy, shell_quote functions. */ { int c; /* Empty argument. */ check_one ("", "''"); /* Identifier or number. */ check_one ("foo", "foo"); check_one ("phr0ck", "phr0ck"); /* Whitespace would be interpreted as argument separator by the shell. */ check_one ("foo\tbar", "'foo\tbar'"); check_one ("foo\nbar", "'foo\nbar'"); check_one ("foo\rbar", "'foo\rbar'"); check_one ("foo bar", "'foo bar'"); /* '!' at the beginning of argv[0] would introduce a negated command. */ check_one ("!foo", "'!foo'"); /* '"' would be interpreted as the start of a string. */ check_one ("\"foo\"bar", "'\"foo\"bar'"); /* '#' at the beginning of an argument would be interpreted as the start of a comment. */ check_one ("#foo", "'#foo'"); /* '$' at the beginning of an argument would be interpreted as a variable reference. */ check_one ("$foo", "'$foo'"); /* '&' at the beginning of an argument would be interpreted as a background task indicator. */ check_one ("&", "'&'"); /* "'" would be interpreted as the start of a string. */ check_one ("'foo'bar", "\"'foo'bar\""); /* '(' at the beginning of argv[0] would introduce a subshell command. */ check_one ("(", "'('"); /* ')' at the beginning of an argument would be interpreted as the end of the command. */ check_one (")", "')'"); /* '*' would be interpreted as a wildcard character. */ check_one ("*", "'*'"); check_one ("*foo", "'*foo'"); /* ';' at the beginning of an argument would be interpreted as an empty statement in argv[0] and as the end of the command otherwise. */ check_one (";", "';'"); check_one ("foo;", "'foo;'"); /* '<' would be interpreted as a redirection of stdin. */ check_one ("<", "'<'"); /* '=' inside argv[0] would be interpreted as an environment variable assignment. */ check_one ("foo=bar", "'foo=bar'"); /* '>' would be interpreted as a redirection of stdout. */ check_one (">", "'>'"); /* '?' would be interpreted as a wildcard character. */ check_one ("?", "'?'"); check_one ("foo?bar", "'foo?bar'"); /* '^' would be interpreted in old /bin/sh, e.g. SunOS 4.1.4. */ check_one ("^", "'^'"); /* "[...]" would be interpreted as a wildcard pattern. */ check_one ("[", "'['"); check_one ("]", "]"); /* or "']'" */ /* '\' would be interpreted as an escape character. */ check_one ("\\foo", "'\\foo'"); /* '`' would be interpreted as the start of a command substitution. */ check_one ("`foo", "'`foo'"); /* '{' at the beginning of argv[0] would introduce a complex command. */ check_one ("{", "'{'"); /* '|' at the beginning of an argument would be interpreted as a pipe between commands. */ check_one ("|", "'|'"); /* '}' at the beginning of an argument would be interpreted as the end of the command. */ check_one ("}", "'}'"); /* '~' at the beginning of an argument would be interpreted as a reference to a user's home directory. */ check_one ("~", "'~'"); check_one ("~foo", "'~foo'"); /* A string that contains both ' and ". */ check_one ("foo'bar\"baz", "'foo'\\''bar\"baz'"); /* or "\"foo'bar\\\"baz\"" */ /* All other characters don't need quoting. */ for (c = 1; c <= UCHAR_MAX; c++) if (strchr ("\t\n\r !\"#$&'()*;<=>?^[\\]`{|}~", c) == NULL) { char s[5]; s[0] = 'a'; s[1] = (char) c; s[2] = 'z'; s[3] = (char) c; s[4] = '\0'; check_one (s, s); } } /* Check the shell_quote_argv function. */ { const char *argv[1]; char *result; argv[0] = NULL; result = shell_quote_argv (argv); ASSERT (strcmp (result, "") == 0); free (result); } { const char *argv[2]; char *result; argv[0] = "foo bar/baz"; argv[1] = NULL; result = shell_quote_argv (argv); ASSERT (strcmp (result, "'foo bar/baz'") == 0); /* or "\"foo bar/baz\"" */ free (result); } { const char *argv[3]; char *result; argv[0] = "foo bar/baz"; argv[1] = "$"; argv[2] = NULL; result = shell_quote_argv (argv); ASSERT (strcmp (result, "'foo bar/baz' '$'") == 0); /* or "\"foo bar/baz\" \"\\$\"" */ free (result); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sha1.c�����������������������������������������������������������0000664�0000000�0000000�00000003660�14110572173�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson * * This 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 "sha1.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #define TESTFILE "test-sha1.data" #include "test-digest.h" int main (void) { const char *in1 = "abcdefgh"; const char *out1 = "\x42\x5a\xf1\x2a\x07\x43\x50\x2b" "\x32\x2e\x93\xa0\x15\xbc\xf8\x68\xe3\x24\xd5\x6a"; char buf[SHA1_DIGEST_SIZE]; if (memcmp (sha1_buffer (in1, strlen (in1), buf), out1, SHA1_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < SHA1_DIGEST_SIZE; i++) printf ("%02x ", out1[i] & 0xFFu); printf ("\ncomputed:\n"); for (i = 0; i < SHA1_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFFu); printf ("\n"); return 1; } /* Test sha1_stream. */ test_digest_on_files (sha1_stream, "sha1_stream", 20, "\xda\x39\xa3\xee\x5e\x6b\x4b\x0d\x32\x55\xbf\xef\x95\x60\x18\x90\xaf\xd8\x07\x09", "\x9c\x04\xcd\x63\x72\x07\x7e\x9b\x11\xf7\x0c\xa1\x11\xc9\x80\x7d\xc7\x13\x7e\x4b", "\x91\xab\x6b\x1b\x8d\x29\x25\x3c\xcb\x8d\xce\xb7\x7a\x25\x26\x2c\x92\xc9\x22\x09"); return 0; } ��������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sha256.c���������������������������������������������������������0000664�0000000�0000000�00000003747�14110572173�0017605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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 "sha256.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #define TESTFILE "test-sha256.data" #include "test-digest.h" int main (void) { /* Test sha224_stream. */ test_digest_on_files (sha224_stream, "sha224_stream", 28, "\xd1\x4a\x02\x8c\x2a\x3a\x2b\xc9\x47\x61\x02\xbb\x28\x82\x34\xc4\x15\xa2\xb0\x1f\x82\x8e\xa6\x2a\xc5\xb3\xe4\x2f", "\xe8\x87\x99\xb0\xd0\xd5\xbe\xcc\x67\x91\x83\x7f\xa9\x53\x88\xd4\x05\x6f\x12\x50\xa5\x11\xd1\x48\x29\x76\x66\x63", "\x86\xa2\x5a\xc3\x6a\x70\x8e\xf3\x4e\x78\x55\xf0\xb1\x97\x8a\xa8\x61\x78\x6c\xb8\x87\xcd\x5c\xf1\x19\x3b\x53\xe4"); /* Test sha256_stream. */ test_digest_on_files (sha256_stream, "sha256_stream", 32, "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9\x24\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52\xb8\x55", "\xb4\x7c\xc0\xf1\x04\xb6\x2d\x4c\x7c\x30\xbc\xd6\x8f\xd8\xe6\x76\x13\xe2\x87\xdc\x4a\xd8\xc3\x10\xef\x10\xcb\xad\xea\x9c\x43\x80", "\xe5\x19\x95\xff\x0b\xc4\x95\xcf\x49\xdd\x31\x42\x0a\x6b\xe0\x6b\x38\xef\xef\x43\xab\xa6\xf4\x76\x64\x32\x99\x4a\x47\x1a\x0f\xb5"); return 0; } �������������������������gnulib-20210822~d383792/tests/test-sha512.c���������������������������������������������������������0000664�0000000�0000000�00000005127�14110572173�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2018-2021 Free Software Foundation, Inc. * * This 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 "sha512.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "macros.h" #define TESTFILE "test-sha512.data" #include "test-digest.h" int main (void) { /* Test sha384_stream. */ test_digest_on_files (sha384_stream, "sha384_stream", 48, "\x38\xb0\x60\xa7\x51\xac\x96\x38\x4c\xd9\x32\x7e\xb1\xb1\xe3\x6a\x21\xfd\xb7\x11\x14\xbe\x07\x43\x4c\x0c\xc7\xbf\x63\xf6\xe1\xda\x27\x4e\xde\xbf\xe7\x6f\x65\xfb\xd5\x1a\xd2\xf1\x48\x98\xb9\x5b", "\xd5\x1d\x28\xd0\x14\x1e\x56\xf6\x92\x95\x2e\xa1\x48\x61\x89\x8e\x2b\x41\x7b\x92\x28\x31\xe0\xf4\xbc\xdb\xc3\x26\xa7\xfe\x1e\x9d\x95\x63\x18\x2e\x83\xd3\xa8\xaf\x66\xf6\x85\x36\xe0\xd4\x2b\x88", "\xab\x32\x29\xa1\xc8\x43\xce\x38\x85\x93\xb3\xa6\x7f\x5a\x36\xdc\xda\xf2\xac\x33\x22\x80\xee\xbc\x5b\x1b\x70\x8b\x9b\x96\x4b\xc1\x75\x60\x00\xae\xdc\xfd\x60\x70\x24\x7f\x0b\x8b\x3a\x89\xd3\xbb"); /* Test sha512_stream. */ test_digest_on_files (sha512_stream, "sha512_stream", 64, "\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80\x07\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c\xe9\xce\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87\x7e\xec\x2f\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a\xf9\x27\xda\x3e", "\x02\x0d\xa0\xf4\xd8\xa4\xc8\xbf\xbc\x98\x27\x40\x27\x74\x00\x61\xd7\xdf\x52\xee\x07\x09\x1e\xd6\x59\x5a\x08\x3e\x0f\x45\x32\x7b\xbe\x59\x42\x43\x12\xd8\x6f\x21\x8b\x74\xed\x2e\x25\x50\x7a\xba\xf5\xc7\xa5\xfc\xf4\xca\xfc\xf9\x53\x8b\x70\x58\x08\xfd\x55\xec", "\x38\x34\x58\xf3\xde\x68\x70\x33\x0c\xa4\xd4\x71\x4d\x0f\x41\xc5\xed\xc9\xf4\x67\x3e\x19\x0f\x87\x2b\x53\x72\x00\xa8\x35\x73\xf7\x0b\xf1\xf2\x0d\x9a\xa8\xd6\x08\x65\x2f\xe2\x28\xbd\x2d\x0c\xd5\xd6\xd4\xd3\xb2\x84\x3e\x32\x32\x5d\x62\x54\x7b\x39\xfd\x47\x04"); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-shutdown.c�������������������������������������������������������0000664�0000000�0000000�00000002372�14110572173�0020441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the shutdown() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (shutdown, int, (int, int)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (shutdown (-1, SHUT_RD) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (shutdown (99, SHUT_RD) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigabbrev_np.c���������������������������������������������������0000664�0000000�0000000�00000015453�14110572173�0021233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigabbrev_np() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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> /* Specification. */ #include <string.h> #include "signature.h" SIGNATURE_CHECK (sigabbrev_np, const char *, (int)); #include <signal.h> #include "macros.h" int main (void) { /* Signals specified by ISO C. */ ASSERT (strcmp (sigabbrev_np (SIGABRT), "ABRT") == 0); ASSERT (strcmp (sigabbrev_np (SIGFPE), "FPE") == 0); ASSERT (strcmp (sigabbrev_np (SIGILL), "ILL") == 0); ASSERT (strcmp (sigabbrev_np (SIGINT), "INT") == 0); ASSERT (strcmp (sigabbrev_np (SIGSEGV), "SEGV") == 0); ASSERT (strcmp (sigabbrev_np (SIGTERM), "TERM") == 0); /* Signals specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> */ #ifdef SIGALRM ASSERT (strcmp (sigabbrev_np (SIGALRM), "ALRM") == 0); #endif #ifdef SIGBUS ASSERT (strcmp (sigabbrev_np (SIGBUS), "BUS") == 0); #endif #ifdef SIGCHLD ASSERT (strcmp (sigabbrev_np (SIGCHLD), "CHLD") == 0); #endif #ifdef SIGCONT ASSERT (strcmp (sigabbrev_np (SIGCONT), "CONT") == 0); #endif #ifdef SIGHUP ASSERT (strcmp (sigabbrev_np (SIGHUP), "HUP") == 0); #endif #ifdef SIGKILL ASSERT (strcmp (sigabbrev_np (SIGKILL), "KILL") == 0); #endif #ifdef SIGPIPE ASSERT (strcmp (sigabbrev_np (SIGPIPE), "PIPE") == 0); #endif #ifdef SIGQUIT ASSERT (strcmp (sigabbrev_np (SIGQUIT), "QUIT") == 0); #endif #ifdef SIGSTOP ASSERT (strcmp (sigabbrev_np (SIGSTOP), "STOP") == 0); #endif #ifdef SIGTSTP ASSERT (strcmp (sigabbrev_np (SIGTSTP), "TSTP") == 0); #endif #ifdef SIGTTIN ASSERT (strcmp (sigabbrev_np (SIGTTIN), "TTIN") == 0); #endif #ifdef SIGTTOU ASSERT (strcmp (sigabbrev_np (SIGTTOU), "TTOU") == 0); #endif #ifdef SIGUSR1 ASSERT (strcmp (sigabbrev_np (SIGUSR1), "USR1") == 0); #endif #ifdef SIGUSR2 ASSERT (strcmp (sigabbrev_np (SIGUSR2), "USR2") == 0); #endif #ifdef SIGPOLL ASSERT (strcmp (sigabbrev_np (SIGPOLL), "POLL") == 0); #endif #ifdef SIGPROF ASSERT (strcmp (sigabbrev_np (SIGPROF), "PROF") == 0); #endif #ifdef SIGSYS ASSERT (strcmp (sigabbrev_np (SIGSYS), "SYS") == 0); #endif #ifdef SIGTRAP ASSERT (strcmp (sigabbrev_np (SIGTRAP), "TRAP") == 0); #endif #ifdef SIGURG ASSERT (strcmp (sigabbrev_np (SIGURG), "URG") == 0); #endif #ifdef SIGVTALRM ASSERT (strcmp (sigabbrev_np (SIGVTALRM), "VTALRM") == 0); #endif #ifdef SIGXCPU ASSERT (strcmp (sigabbrev_np (SIGXCPU), "XCPU") == 0); #endif #ifdef SIGXFSZ ASSERT (strcmp (sigabbrev_np (SIGXFSZ), "XFSZ") == 0); #endif /* Other signals on other systems. */ /* native Windows */ #ifdef SIGBREAK ASSERT (strcmp (sigabbrev_np (SIGBREAK), "BREAK") == 0); #endif /* IRIX */ #ifdef SIGCKPT ASSERT (strcmp (sigabbrev_np (SIGCKPT), "CKPT") == 0); #endif /* AIX */ #ifdef SIGCPUFAIL ASSERT (strcmp (sigabbrev_np (SIGCPUFAIL), "CPUFAIL") == 0); #endif /* AIX */ #ifdef SIGDANGER ASSERT (strcmp (sigabbrev_np (SIGDANGER), "DANGER") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */ #ifdef SIGEMT ASSERT (strcmp (sigabbrev_np (SIGEMT), "EMT") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #ifdef SIGINFO ASSERT (strcmp (sigabbrev_np (SIGINFO), "INFO") == 0); #endif /* AIX */ #ifdef SIGKAP ASSERT (strcmp (sigabbrev_np (SIGKAP), "KAP") == 0); #endif /* Haiku */ #ifdef SIGKILLTHR ASSERT (strcmp (sigabbrev_np (SIGKILLTHR), "KILLTHR") == 0); #endif /* Minix */ #ifdef SIGKMEM ASSERT (strcmp (sigabbrev_np (SIGKMEM), "KMEM") == 0); #endif /* Minix */ #ifdef SIGKMESS ASSERT (strcmp (sigabbrev_np (SIGKMESS), "KMESS") == 0); #endif /* Minix */ #ifdef SIGKSIG ASSERT (strcmp (sigabbrev_np (SIGKSIG), "KSIG") == 0); #endif /* Minix */ #ifdef SIGKSIGSM ASSERT (strcmp (sigabbrev_np (SIGKSIGSM), "KSIGSM") == 0); #endif /* FreeBSD */ #ifdef SIGLIBRT ASSERT (strcmp (sigabbrev_np (SIGLIBRT), "LIBRT") == 0); #endif /* AIX */ #ifdef SIGMIGRATE ASSERT (strcmp (sigabbrev_np (SIGMIGRATE), "MIGRATE") == 0); #endif /* AIX */ #ifdef SIGMSG ASSERT (strcmp (sigabbrev_np (SIGMSG), "MSG") == 0); #endif /* AIX */ #ifdef SIGPRE ASSERT (strcmp (sigabbrev_np (SIGPRE), "PRE") == 0); #endif /* IRIX */ #ifdef SIGPTINTR ASSERT (strcmp (sigabbrev_np (SIGPTINTR), "PTINTR") == 0); #endif /* IRIX */ #ifdef SIGPTRESCHED ASSERT (strcmp (sigabbrev_np (SIGPTRESCHED), "PTRESCHED") == 0); #endif /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */ #ifdef SIGPWR ASSERT (strcmp (sigabbrev_np (SIGPWR), "PWR") == 0); #endif /* AIX */ #ifdef SIGRECONFIG ASSERT (strcmp (sigabbrev_np (SIGRECONFIG), "RECONFIG") == 0); #endif /* AIX */ #ifdef SIGRECOVERY ASSERT (strcmp (sigabbrev_np (SIGRECOVERY), "RECOVERY") == 0); #endif /* IRIX */ #ifdef SIGRESTART ASSERT (strcmp (sigabbrev_np (SIGRESTART), "RESTART") == 0); #endif /* AIX */ #ifdef SIGRETRACT ASSERT (strcmp (sigabbrev_np (SIGRETRACT), "RETRACT") == 0); #endif /* AIX */ #ifdef SIGSAK ASSERT (strcmp (sigabbrev_np (SIGSAK), "SAK") == 0); #endif /* Minix */ #ifdef SIGSNDELAY ASSERT (strcmp (sigabbrev_np (SIGSNDELAY), "SNDELAY") == 0); #endif /* AIX */ #ifdef SIGSOUND ASSERT (strcmp (sigabbrev_np (SIGSOUND), "SOUND") == 0); #endif /* Linux */ #ifdef SIGSTKFLT ASSERT (strcmp (sigabbrev_np (SIGSTKFLT), "STKFLT") == 0); #endif /* AIX */ #ifdef SIGSYSERROR ASSERT (strcmp (sigabbrev_np (SIGSYSERROR), "SYSERROR") == 0); #endif /* AIX */ #ifdef SIGTALRM ASSERT (strcmp (sigabbrev_np (SIGTALRM), "TALRM") == 0); #endif /* FreeBSD, OpenBSD */ #ifdef SIGTHR ASSERT (strcmp (sigabbrev_np (SIGTHR), "THR") == 0); #endif /* IRIX */ #ifdef SIGUME ASSERT (strcmp (sigabbrev_np (SIGUME), "UME") == 0); #endif /* AIX */ #ifdef SIGVIRT ASSERT (strcmp (sigabbrev_np (SIGVIRT), "VIRT") == 0); #endif /* AIX */ #ifdef SIGWAITING ASSERT (strcmp (sigabbrev_np (SIGWAITING), "WAITING") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, Haiku */ #ifdef SIGWINCH ASSERT (strcmp (sigabbrev_np (SIGWINCH), "WINCH") == 0); #endif ASSERT (sigabbrev_np (-714) == NULL); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigaction.c������������������������������������������������������0000664�0000000�0000000�00000006775�14110572173�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigaction() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include <signal.h> #include "signature.h" SIGNATURE_CHECK (sigaction, int, (int, struct sigaction const *, struct sigaction *)); #include <stddef.h> #include "macros.h" #ifndef SA_NOCLDSTOP # define SA_NOCLDSTOP 0 #endif #ifndef SA_ONSTACK # define SA_ONSTACK 0 #endif #ifndef SA_RESETHAND # define SA_RESETHAND 0 #endif #ifndef SA_RESTART # define SA_RESTART 0 #endif #ifndef SA_SIGINFO # define SA_SIGINFO 0 #endif #ifndef SA_NOCLDWAIT # define SA_NOCLDWAIT 0 #endif /* Define a mask of flags required by POSIX. Some implementations provide other flags as extensions, such as SA_RESTORER, that we must ignore in this test. */ #define MASK_SA_FLAGS (SA_NOCLDSTOP | SA_ONSTACK | SA_RESETHAND | SA_RESTART \ | SA_SIGINFO | SA_NOCLDWAIT | SA_NODEFER) /* This test is unsafe in the presence of an asynchronous SIGABRT, because we install a signal-handler that is intentionally not async-safe. Hopefully, this does not lead to too many reports of false failures, since people don't generally use 'kill -s SIGABRT' to end a runaway program. */ static void handler (int sig) { static int entry_count; struct sigaction sa; ASSERT (sig == SIGABRT); ASSERT (sigaction (SIGABRT, NULL, &sa) == 0); ASSERT ((sa.sa_flags & SA_SIGINFO) == 0); switch (entry_count++) { case 0: ASSERT ((sa.sa_flags & SA_RESETHAND) == 0); ASSERT (sa.sa_handler == handler); break; case 1: /* This assertion fails on glibc-2.3.6 systems with LinuxThreads, when this program is linked with -lpthread, due to the sigaction() override in libpthread.so. */ #if !(defined __GLIBC__ || defined __UCLIBC__) ASSERT (sa.sa_handler == SIG_DFL); #endif break; default: ASSERT (0); } } int main (void) { struct sigaction sa; struct sigaction old_sa; sa.sa_handler = handler; sa.sa_flags = 0; ASSERT (sigemptyset (&sa.sa_mask) == 0); ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); ASSERT (raise (SIGABRT) == 0); sa.sa_flags = SA_RESETHAND | SA_NODEFER; ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); ASSERT ((old_sa.sa_flags & MASK_SA_FLAGS) == 0); ASSERT (old_sa.sa_handler == handler); ASSERT (raise (SIGABRT) == 0); sa.sa_handler = SIG_DFL; ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); ASSERT ((old_sa.sa_flags & SA_SIGINFO) == 0); #if !(defined __GLIBC__ || defined __UCLIBC__) /* see above */ ASSERT (old_sa.sa_handler == SIG_DFL); #endif sa.sa_handler = SIG_IGN; ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); ASSERT (raise (SIGABRT) == 0); ASSERT (sigaction (SIGABRT, NULL, &old_sa) == 0); ASSERT (old_sa.sa_handler == SIG_IGN); ASSERT (raise (SIGABRT) == 0); return 0; } ���gnulib-20210822~d383792/tests/test-sigdescr_np.c����������������������������������������������������0000664�0000000�0000000�00000017356�14110572173�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigdescr_np() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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> /* Specification. */ #include <string.h> #include "signature.h" SIGNATURE_CHECK (sigdescr_np, const char *, (int)); #include <signal.h> #include "macros.h" int main (void) { /* Signals specified by ISO C. */ ASSERT (strcmp (sigdescr_np (SIGABRT), "Aborted") == 0); ASSERT (strcmp (sigdescr_np (SIGFPE), "Floating point exception") == 0 || strcmp (sigdescr_np (SIGFPE), "Arithmetic exception") == 0); ASSERT (strcmp (sigdescr_np (SIGILL), "Illegal instruction") == 0); ASSERT (strcmp (sigdescr_np (SIGINT), "Interrupt") == 0); ASSERT (strcmp (sigdescr_np (SIGSEGV), "Segmentation fault") == 0); ASSERT (strcmp (sigdescr_np (SIGTERM), "Terminated") == 0); /* Signals specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> */ #ifdef SIGALRM ASSERT (strcmp (sigdescr_np (SIGALRM), "Alarm clock") == 0); #endif #ifdef SIGBUS ASSERT (strcmp (sigdescr_np (SIGBUS), "Bus error") == 0); #endif #ifdef SIGCHLD ASSERT (strcmp (sigdescr_np (SIGCHLD), "Child exited") == 0 /* glibc */ || strcmp (sigdescr_np (SIGCHLD), "Child stopped or exited") == 0); #endif #ifdef SIGCONT ASSERT (strcmp (sigdescr_np (SIGCONT), "Continued") == 0); #endif #ifdef SIGHUP ASSERT (strcmp (sigdescr_np (SIGHUP), "Hangup") == 0); #endif #ifdef SIGKILL ASSERT (strcmp (sigdescr_np (SIGKILL), "Killed") == 0); #endif #ifdef SIGPIPE ASSERT (strcmp (sigdescr_np (SIGPIPE), "Broken pipe") == 0); #endif #ifdef SIGQUIT ASSERT (strcmp (sigdescr_np (SIGQUIT), "Quit") == 0); #endif #ifdef SIGSTOP ASSERT (strcmp (sigdescr_np (SIGSTOP), "Stopped (signal)") == 0); #endif #ifdef SIGTSTP ASSERT (strcmp (sigdescr_np (SIGTSTP), "Stopped") == 0); #endif #ifdef SIGTTIN ASSERT (strcmp (sigdescr_np (SIGTTIN), "Stopped (tty input)") == 0); #endif #ifdef SIGTTOU ASSERT (strcmp (sigdescr_np (SIGTTOU), "Stopped (tty output)") == 0); #endif #ifdef SIGUSR1 ASSERT (strcmp (sigdescr_np (SIGUSR1), "User defined signal 1") == 0); #endif #ifdef SIGUSR2 ASSERT (strcmp (sigdescr_np (SIGUSR2), "User defined signal 2") == 0); #endif #ifdef SIGPOLL ASSERT (strcmp (sigdescr_np (SIGPOLL), "I/O possible") == 0); #endif #ifdef SIGPROF ASSERT (strcmp (sigdescr_np (SIGPROF), "Profiling timer expired") == 0); #endif #ifdef SIGSYS ASSERT (strcmp (sigdescr_np (SIGSYS), "Bad system call") == 0); #endif #ifdef SIGTRAP ASSERT (strcmp (sigdescr_np (SIGTRAP), "Trace/breakpoint trap") == 0); #endif #ifdef SIGURG ASSERT (strcmp (sigdescr_np (SIGURG), "Urgent I/O condition") == 0); #endif #ifdef SIGVTALRM ASSERT (strcmp (sigdescr_np (SIGVTALRM), "Virtual timer expired") == 0); #endif #ifdef SIGXCPU ASSERT (strcmp (sigdescr_np (SIGXCPU), "CPU time limit exceeded") == 0); #endif #ifdef SIGXFSZ ASSERT (strcmp (sigdescr_np (SIGXFSZ), "File size limit exceeded") == 0); #endif /* Other signals on other systems. */ /* native Windows */ #ifdef SIGBREAK ASSERT (strcmp (sigdescr_np (SIGBREAK), "Ctrl-Break") == 0); #endif /* IRIX */ #ifdef SIGCKPT ASSERT (strcmp (sigdescr_np (SIGCKPT), "Checkpoint") == 0); #endif /* AIX */ #ifdef SIGCPUFAIL ASSERT (strcmp (sigdescr_np (SIGCPUFAIL), "CPU going down") == 0); #endif /* AIX */ #ifdef SIGDANGER ASSERT (strcmp (sigdescr_np (SIGDANGER), "Swap space nearly exhausted") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */ #ifdef SIGEMT ASSERT (strcmp (sigdescr_np (SIGEMT), "Instruction emulation needed") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #ifdef SIGINFO ASSERT (strcmp (sigdescr_np (SIGINFO), "Information request") == 0); #endif /* AIX */ #ifdef SIGKAP ASSERT (strcmp (sigdescr_np (SIGKAP), "Keep Alive Poll") == 0); #endif /* Haiku */ #ifdef SIGKILLTHR ASSERT (strcmp (sigdescr_np (SIGKILLTHR), "Kill thread") == 0); #endif /* Minix */ #ifdef SIGKMEM ASSERT (strcmp (sigdescr_np (SIGKMEM), "Kernel memory request") == 0); #endif /* Minix */ #ifdef SIGKMESS ASSERT (strcmp (sigdescr_np (SIGKMESS), "Kernel message") == 0); #endif /* Minix */ #ifdef SIGKSIG ASSERT (strcmp (sigdescr_np (SIGKSIG), "Kernel signal") == 0); #endif /* Minix */ #ifdef SIGKSIGSM ASSERT (strcmp (sigdescr_np (SIGKSIGSM), "Kernel signal for signal manager") == 0); #endif /* FreeBSD */ #ifdef SIGLIBRT ASSERT (strcmp (sigdescr_np (SIGLIBRT), "Real-time library interrupt") == 0); #endif /* AIX */ #ifdef SIGMIGRATE ASSERT (strcmp (sigdescr_np (SIGMIGRATE), "Process migration") == 0); #endif /* AIX */ #ifdef SIGMSG ASSERT (strcmp (sigdescr_np (SIGMSG), "Message in the ring") == 0); #endif /* AIX */ #ifdef SIGPRE ASSERT (strcmp (sigdescr_np (SIGPRE), "Programmed exception") == 0); #endif /* IRIX */ #ifdef SIGPTINTR ASSERT (strcmp (sigdescr_np (SIGPTINTR), "Pthread interrupt") == 0); #endif /* IRIX */ #ifdef SIGPTRESCHED ASSERT (strcmp (sigdescr_np (SIGPTRESCHED), "Pthread rescheduling") == 0); #endif /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */ #ifdef SIGPWR ASSERT (strcmp (sigdescr_np (SIGPWR), "Power failure") == 0); #endif /* AIX */ #ifdef SIGRECONFIG ASSERT (strcmp (sigdescr_np (SIGRECONFIG), "Dynamic logical partitioning changed") == 0); #endif /* AIX */ #ifdef SIGRECOVERY ASSERT (strcmp (sigdescr_np (SIGRECOVERY), "Kernel recovery") == 0); #endif /* IRIX */ #ifdef SIGRESTART ASSERT (strcmp (sigdescr_np (SIGRESTART), "Checkpoint restart") == 0); #endif /* AIX */ #ifdef SIGRETRACT ASSERT (strcmp (sigdescr_np (SIGRETRACT), "Retracting Keep Alive Poll") == 0); #endif /* AIX */ #ifdef SIGSAK ASSERT (strcmp (sigdescr_np (SIGSAK), "Secure Attention Key") == 0); #endif /* Minix */ #ifdef SIGSNDELAY ASSERT (strcmp (sigdescr_np (SIGSNDELAY), "Done sending message") == 0); #endif /* AIX */ #ifdef SIGSOUND ASSERT (strcmp (sigdescr_np (SIGSOUND), "Sound configuration changed") == 0); #endif /* Linux */ #ifdef SIGSTKFLT ASSERT (strcmp (sigdescr_np (SIGSTKFLT), "Stack fault") == 0); #endif /* AIX */ #ifdef SIGSYSERROR ASSERT (strcmp (sigdescr_np (SIGSYSERROR), "Kernel error") == 0); #endif /* AIX */ #ifdef SIGTALRM ASSERT (strcmp (sigdescr_np (SIGTALRM), "Thread alarm clock") == 0); #endif /* FreeBSD, OpenBSD */ #ifdef SIGTHR ASSERT (strcmp (sigdescr_np (SIGTHR), "Thread library interrupt") == 0); #endif /* IRIX */ #ifdef SIGUME ASSERT (strcmp (sigdescr_np (SIGUME), "Uncorrectable memory error") == 0); #endif /* AIX */ #ifdef SIGVIRT ASSERT (strcmp (sigdescr_np (SIGVIRT), "Virtual time alarm clock") == 0); #endif /* AIX */ #ifdef SIGWAITING ASSERT (strcmp (sigdescr_np (SIGWAITING), "Thread waiting") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, Haiku */ #ifdef SIGWINCH ASSERT (strcmp (sigdescr_np (SIGWINCH), "Window changed") == 0 /* glibc */ || strcmp (sigdescr_np (SIGWINCH), "Window size changed") == 0); #endif ASSERT (sigdescr_np (-714) == NULL); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-signal-h-c++.cc��������������������������������������������������0000664�0000000�0000000�00000004007�14110572173�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <signal.h> #include "signature.h" #if GNULIB_TEST_PTHREAD_SIGMASK SIGNATURE_CHECK (GNULIB_NAMESPACE::pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); #endif #if GNULIB_TEST_RAISE SIGNATURE_CHECK (GNULIB_NAMESPACE::raise, int, (int)); #endif #if GNULIB_TEST_SIGPROCMASK SIGNATURE_CHECK (GNULIB_NAMESPACE::sigismember, int, (const sigset_t *, int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigemptyset, int, (sigset_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigaddset, int, (sigset_t *, int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigdelset, int, (sigset_t *, int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigfillset, int, (sigset_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigpending, int, (sigset_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::sigprocmask, int, (int, const sigset_t *, sigset_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::signal, _gl_function_taking_int_returning_void_t, (int, _gl_function_taking_int_returning_void_t)); #endif #if GNULIB_TEST_SIGACTION SIGNATURE_CHECK (GNULIB_NAMESPACE::sigaction, int, (int, const struct sigaction *, struct sigaction *)); #endif int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-signal-h-c++2.cc�������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0021062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <csignal> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-signal-h.c�������������������������������������������������������0000664�0000000�0000000�00000004753�14110572173�0020275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <signal.h> /* Check for required types. */ struct { size_t a; uid_t b; volatile sig_atomic_t c; sigset_t d; pid_t e; #if 0 /* Not guaranteed by gnulib. */ pthread_t f; struct timespec g; #endif } s; /* Check that NSIG is defined. */ int nsig = NSIG; int main (void) { switch (0) { /* The following are guaranteed by C. */ case 0: case SIGABRT: case SIGFPE: case SIGILL: case SIGINT: case SIGSEGV: case SIGTERM: /* The following is guaranteed by gnulib. */ #if GNULIB_SIGPIPE || defined SIGPIPE case SIGPIPE: #endif /* Ensure no conflict with other standardized names. */ #ifdef SIGALRM case SIGALRM: #endif /* On Haiku, SIGBUS is mistakenly equal to SIGSEGV. */ #if defined SIGBUS && SIGBUS != SIGSEGV case SIGBUS: #endif #ifdef SIGCHLD case SIGCHLD: #endif #ifdef SIGCONT case SIGCONT: #endif #ifdef SIGHUP case SIGHUP: #endif #ifdef SIGKILL case SIGKILL: #endif #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGSTOP case SIGSTOP: #endif #ifdef SIGTSTP case SIGTSTP: #endif #ifdef SIGTTIN case SIGTTIN: #endif #ifdef SIGTTOU case SIGTTOU: #endif #ifdef SIGUSR1 case SIGUSR1: #endif #ifdef SIGUSR2 case SIGUSR2: #endif #ifdef SIGSYS case SIGSYS: #endif #ifdef SIGTRAP case SIGTRAP: #endif #ifdef SIGURG case SIGURG: #endif #ifdef SIGVTALRM case SIGVTALRM: #endif #ifdef SIGXCPU case SIGXCPU: #endif #ifdef SIGXFSZ case SIGXFSZ: #endif /* SIGRTMIN and SIGRTMAX need not be compile-time constants. */ #if 0 # ifdef SIGRTMIN case SIGRTMIN: # endif # ifdef SIGRTMAX case SIGRTMAX: # endif #endif ; } return s.a + s.b + s.c + s.e; } ���������������������gnulib-20210822~d383792/tests/test-signbit.c��������������������������������������������������������0000664�0000000�0000000�00000012673�14110572173�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of signbit() substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> /* signbit must be a macro. */ #ifndef signbit # error missing declaration #endif #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "macros.h" float zerof = 0.0f; double zerod = 0.0; long double zerol = 0.0L; static void test_signbitf () { /* Finite values. */ ASSERT (!signbit (3.141f)); ASSERT (!signbit (3.141e30f)); ASSERT (!signbit (3.141e-30f)); ASSERT (signbit (-2.718f)); ASSERT (signbit (-2.718e30f)); ASSERT (signbit (-2.718e-30f)); /* Zeros. */ ASSERT (!signbit (0.0f)); if (1.0f / minus_zerof < 0) ASSERT (signbit (minus_zerof)); else ASSERT (!signbit (minus_zerof)); /* Infinite values. */ ASSERT (!signbit (Infinityf ())); ASSERT (signbit (- Infinityf ())); /* Quiet NaN. */ (void) signbit (zerof / zerof); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* 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 } #endif } static void test_signbitd () { /* Finite values. */ ASSERT (!signbit (3.141)); ASSERT (!signbit (3.141e30)); ASSERT (!signbit (3.141e-30)); ASSERT (signbit (-2.718)); ASSERT (signbit (-2.718e30)); ASSERT (signbit (-2.718e-30)); /* Zeros. */ ASSERT (!signbit (0.0)); if (1.0 / minus_zerod < 0) ASSERT (signbit (minus_zerod)); else ASSERT (!signbit (minus_zerod)); /* Infinite values. */ ASSERT (!signbit (Infinityd ())); ASSERT (signbit (- Infinityd ())); /* Quiet NaN. */ (void) signbit (zerod / zerod); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* 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 } #endif } static void test_signbitl () { /* Finite values. */ ASSERT (!signbit (3.141L)); ASSERT (!signbit (3.141e30L)); ASSERT (!signbit (3.141e-30L)); ASSERT (signbit (-2.718L)); ASSERT (signbit (-2.718e30L)); ASSERT (signbit (-2.718e-30L)); /* Zeros. */ ASSERT (!signbit (0.0L)); if (1.0L / minus_zerol < 0) ASSERT (signbit (minus_zerol)); else ASSERT (!signbit (minus_zerol)); /* Infinite values. */ ASSERT (!signbit (Infinityl ())); ASSERT (signbit (- Infinityl ())); /* Quiet NaN. */ (void) signbit (zerol / zerol); #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT /* 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 } #endif } int main () { test_signbitf (); test_signbitd (); test_signbitl (); return 0; } ���������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigpipe.c��������������������������������������������������������0000664�0000000�0000000�00000003566�14110572173�0020234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of SIGPIPE handling. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 <signal.h> /* Check that SIGPIPE is defined. */ int s = SIGPIPE; #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" static void handler (int sig) { exit (0); } int main (int argc, char **argv) { char mode = argv[1][0]; switch (mode) { case 'A': signal (SIGPIPE, SIG_DFL); break; case 'B': signal (SIGPIPE, SIG_IGN); break; case 'C': signal (SIGPIPE, handler); break; } /* Produce infinite output. Since it is piped into "head -1", the writes must ultimately fail. */ for (;;) { char c[2] = { 'y', '\n' }; int ret = write (1, c, sizeof (c)); if (ret <= 0) { switch (mode) { case 'B': /* The write() call should have failed with EPIPE. */ if (ret < 0 && errno == EPIPE) exit (0); FALLTHROUGH; case 'A': /* The process should silently die. */ case 'C': /* The handler should have been called. */ fprintf (stderr, "write() returned %d with error %d.\n", ret, errno); exit (1); } } } } ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigpipe.sh�������������������������������������������������������0000775�0000000�0000000�00000001523�14110572173�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 # Test signal's default behaviour. tmpfiles="$tmpfiles t-sigpipeA.tmp" ${CHECKER} ./test-sigpipe${EXEEXT} A 2> t-sigpipeA.tmp | head -1 > /dev/null if test -s t-sigpipeA.tmp; then LC_ALL=C tr -d '\r' < t-sigpipeA.tmp rm -fr $tmpfiles; exit 1 fi # Test signal's ignored behaviour. tmpfiles="$tmpfiles t-sigpipeB.tmp" ${CHECKER} ./test-sigpipe${EXEEXT} B 2> t-sigpipeB.tmp | head -1 > /dev/null if test -s t-sigpipeB.tmp; then LC_ALL=C tr -d '\r' < t-sigpipeB.tmp rm -fr $tmpfiles; exit 1 fi # Test signal's behaviour when a handler is installed. tmpfiles="$tmpfiles t-sigpipeC.tmp" ${CHECKER} ./test-sigpipe${EXEEXT} C 2> t-sigpipeC.tmp | head -1 > /dev/null if test -s t-sigpipeC.tmp; then LC_ALL=C tr -d '\r' < t-sigpipeC.tmp rm -fr $tmpfiles; exit 1 fi rm -fr $tmpfiles exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigprocmask.c����������������������������������������������������0000664�0000000�0000000�00000005060�14110572173�0021105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigprocmask. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <signal.h> #include "signature.h" SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" #if !(defined _WIN32 && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; pid_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); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (sigprocmask (1729, &set, NULL) == -1); ASSERT (errno == EINVAL); /* Block SIGINT. */ 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); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (sigprocmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to sigprocmask(), at least one of those signals shall be delivered before the call to sigprocmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigsegv-catch-segv1.c��������������������������������������������0000664�0000000�0000000�00000006123�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that the handler is called, with the right fault address. Copyright (C) 2002-2021 Free Software Foundation, Inc. This 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 2 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. */ #include <config.h> /* Specification. */ #include "sigsegv.h" #include <stdint.h> #include <stdio.h> #if HAVE_SIGSEGV_RECOVERY # include "mmap-anon-util.h" # include <stdlib.h> # if SIGSEGV_FAULT_ADDRESS_ALIGNMENT > 1UL # include <unistd.h> # define SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS (getpagesize () - 1) # else # define SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS 0 # endif uintptr_t page; volatile int handler_called = 0; static int handler (void *fault_address, int serious) { handler_called++; if (handler_called > 10) abort (); if (fault_address != (void *)((page + 0x678) & ~SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS)) abort (); if (mprotect ((void *) page, 0x4000, PROT_READ_WRITE) == 0) return 1; return 0; } static void crasher (uintptr_t p) { *(volatile int *) (p + 0x678) = 42; } int main () { int prot_unwritable; void *p; /* Preparations. */ # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY, 0644); # endif # if defined __linux__ && defined __sparc__ /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as PROT_READ | PROT_WRITE. */ prot_unwritable = PROT_NONE; # else prot_unwritable = PROT_READ; # endif /* Setup some mmaped memory. */ p = mmap_zeromap ((void *) 0x12340000, 0x4000); if (p == (void *)(-1)) { fprintf (stderr, "mmap_zeromap failed.\n"); exit (2); } page = (uintptr_t) p; /* Make it read-only. */ if (mprotect ((void *) page, 0x4000, prot_unwritable) < 0) { fprintf (stderr, "mprotect failed.\n"); exit (2); } /* Test whether it's possible to make it read-write after it was read-only. This is not possible on Cygwin. */ if (mprotect ((void *) page, 0x4000, PROT_READ_WRITE) < 0 || mprotect ((void *) page, 0x4000, prot_unwritable) < 0) { fprintf (stderr, "mprotect failed.\n"); exit (2); } /* Install the SIGSEGV handler. */ sigsegv_install_handler (&handler); /* The first write access should invoke the handler and then complete. */ crasher (page); /* The second write access should not invoke the handler. */ crasher (page); /* Check that the handler was called only once. */ if (handler_called != 1) exit (1); /* Test passed! */ printf ("Test passed.\n"); return 0; } #else int main () { return 77; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigsegv-catch-segv2.c��������������������������������������������0000664�0000000�0000000�00000006642�14110572173�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that the handler can be exited multiple times. Copyright (C) 2002-2021 Free Software Foundation, Inc. This 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 2 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. */ #include <config.h> /* Specification. */ #include "sigsegv.h" #include <stdint.h> #include <stdio.h> #if HAVE_SIGSEGV_RECOVERY # if defined _WIN32 && !defined __CYGWIN__ /* Windows doesn't have sigset_t. */ typedef int sigset_t; # define sigemptyset(set) # define sigprocmask(how,set,oldset) # endif # include "mmap-anon-util.h" # include <stdlib.h> /* for abort, exit */ # include <signal.h> # include <setjmp.h> # if SIGSEGV_FAULT_ADDRESS_ALIGNMENT > 1UL # include <unistd.h> # define SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS (getpagesize () - 1) # else # define SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS 0 # endif jmp_buf mainloop; sigset_t mainsigset; volatile int pass = 0; uintptr_t page; volatile int handler_called = 0; static void handler_continuation (void *arg1, void *arg2, void *arg3) { longjmp (mainloop, pass); } int handler (void *fault_address, int serious) { handler_called++; if (handler_called > 10) abort (); if (fault_address != (void *)((page + 0x678 + 8 * pass) & ~SIGSEGV_FAULT_ADDRESS_ROUNDOFF_BITS)) abort (); pass++; printf ("Fault %d caught.\n", pass); sigprocmask (SIG_SETMASK, &mainsigset, NULL); return sigsegv_leave_handler (handler_continuation, NULL, NULL, NULL); } void crasher (uintptr_t p) { *(volatile int *) (p + 0x678 + 8 * pass) = 42; } int main () { int prot_unwritable; void *p; sigset_t emptyset; /* Preparations. */ # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY, 0644); # endif # if defined __linux__ && defined __sparc__ /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as PROT_READ | PROT_WRITE. */ prot_unwritable = PROT_NONE; # else prot_unwritable = PROT_READ; # endif /* Setup some mmaped memory. */ p = mmap_zeromap ((void *) 0x12340000, 0x4000); if (p == (void *)(-1)) { fprintf (stderr, "mmap_zeromap failed.\n"); exit (2); } page = (uintptr_t) p; /* Make it read-only. */ if (mprotect ((void *) page, 0x4000, prot_unwritable) < 0) { fprintf (stderr, "mprotect failed.\n"); exit (2); } /* Install the SIGSEGV handler. */ if (sigsegv_install_handler (&handler) < 0) exit (2); /* Save the current signal mask. */ sigemptyset (&emptyset); sigprocmask (SIG_BLOCK, &emptyset, &mainsigset); /* Provoke two SIGSEGVs in a row. */ switch (setjmp (mainloop)) { case 0: case 1: printf ("Doing SIGSEGV pass %d.\n", pass + 1); crasher (page); printf ("no SIGSEGV?!\n"); exit (1); case 2: break; default: abort (); } /* Test passed! */ printf ("Test passed.\n"); return 0; } #else int main () { return 77; } #endif ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigsegv-catch-stackoverflow1.c�����������������������������������0000664�0000000�0000000�00000007300�14110572173�0024261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the stack overflow handler. Copyright (C) 2002-2021 Free Software Foundation, Inc. This 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 2 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 and Eric Blake. */ #include <config.h> /* Specification. */ #include "sigsegv.h" #include <stdio.h> #include <limits.h> #if HAVE_STACK_OVERFLOW_RECOVERY # if defined _WIN32 && !defined __CYGWIN__ /* Windows doesn't have sigset_t. */ typedef int sigset_t; # define sigemptyset(set) # define sigprocmask(how,set,oldset) # endif # include <stddef.h> /* needed for NULL on SunOS4 */ # include <stdlib.h> /* for abort, exit */ # include <signal.h> # include <setjmp.h> # if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> # endif # include "altstack-util.h" static jmp_buf mainloop; static sigset_t mainsigset; static volatile int pass = 0; static volatile char *stack_lower_bound; static volatile char *stack_upper_bound; static void stackoverflow_handler_continuation (void *arg1, void *arg2, void *arg3) { int arg = (int) (long) arg1; longjmp (mainloop, arg); } static void stackoverflow_handler (int emergency, stackoverflow_context_t scp) { char dummy; volatile char *addr = &dummy; if (!(addr >= stack_lower_bound && addr <= stack_upper_bound)) abort (); pass++; printf ("Stack overflow %d caught.\n", pass); sigprocmask (SIG_SETMASK, &mainsigset, NULL); sigsegv_leave_handler (stackoverflow_handler_continuation, (void *) (long) (emergency ? -1 : pass), NULL, NULL); } static volatile int * recurse_1 (int n, volatile int *p) { if (n < INT_MAX) *recurse_1 (n + 1, p) += n; return p; } static int recurse (volatile int n) { return *recurse_1 (n, &n); } int main () { sigset_t emptyset; # if HAVE_SETRLIMIT && defined RLIMIT_STACK /* Before starting the endless recursion, try to be friendly to the user's machine. On some Linux 2.2.x systems, there is no stack limit for user processes at all. We don't want to kill such systems. */ struct rlimit rl; rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ setrlimit (RLIMIT_STACK, &rl); # endif /* Prepare the storage for the alternate stack. */ prepare_alternate_stack (); /* Install the stack overflow handler. */ if (stackoverflow_install_handler (&stackoverflow_handler, mystack, MYSTACK_SIZE) < 0) exit (2); stack_lower_bound = mystack; stack_upper_bound = mystack + MYSTACK_SIZE - 1; /* Save the current signal mask. */ sigemptyset (&emptyset); sigprocmask (SIG_BLOCK, &emptyset, &mainsigset); /* Provoke two stack overflows in a row. */ switch (setjmp (mainloop)) { case -1: printf ("emergency exit\n"); exit (1); case 0: case 1: printf ("Starting recursion pass %d.\n", pass + 1); recurse (0); printf ("no endless recursion?!\n"); exit (1); case 2: break; default: abort (); } /* Validate that the alternate stack did not overflow. */ check_alternate_stack_no_overflow (); printf ("Test passed.\n"); exit (0); } #else int main () { return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sigsegv-catch-stackoverflow2.c�����������������������������������0000664�0000000�0000000�00000012304�14110572173�0024262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that stack overflow and SIGSEGV are correctly distinguished. Copyright (C) 2002-2021 Free Software Foundation, Inc. This 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 2 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 and Eric Blake. */ #include <config.h> /* Specification. */ #include "sigsegv.h" #include <stdint.h> #include <stdio.h> #include <limits.h> #if HAVE_STACK_OVERFLOW_RECOVERY && HAVE_SIGSEGV_RECOVERY # if defined _WIN32 && !defined __CYGWIN__ /* Windows doesn't have sigset_t. */ typedef int sigset_t; # define sigemptyset(set) # define sigprocmask(how,set,oldset) # endif # include "mmap-anon-util.h" # include <stddef.h> /* needed for NULL on SunOS4 */ # include <stdlib.h> /* for abort, exit */ # include <signal.h> # include <setjmp.h> # if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> # endif # include "altstack-util.h" static jmp_buf mainloop; static sigset_t mainsigset; static volatile int pass = 0; static uintptr_t page; static volatile int *null_pointer_to_volatile_int /* = NULL */; static void stackoverflow_handler_continuation (void *arg1, void *arg2, void *arg3) { int arg = (int) (long) arg1; longjmp (mainloop, arg); } static void stackoverflow_handler (int emergency, stackoverflow_context_t scp) { pass++; if (pass <= 2) printf ("Stack overflow %d caught.\n", pass); else { printf ("Segmentation violation misdetected as stack overflow.\n"); exit (1); } sigprocmask (SIG_SETMASK, &mainsigset, NULL); sigsegv_leave_handler (stackoverflow_handler_continuation, (void *) (long) (emergency ? -1 : pass), NULL, NULL); } static int sigsegv_handler (void *address, int emergency) { /* This test is necessary to distinguish stack overflow and SIGSEGV. */ if (!emergency) return 0; pass++; if (pass <= 2) { printf ("Stack overflow %d missed.\n", pass); exit (1); } else printf ("Segmentation violation correctly detected.\n"); sigprocmask (SIG_SETMASK, &mainsigset, NULL); return sigsegv_leave_handler (stackoverflow_handler_continuation, (void *) (long) pass, NULL, NULL); } static volatile int * recurse_1 (int n, volatile int *p) { if (n < INT_MAX) *recurse_1 (n + 1, p) += n; return p; } static int recurse (volatile int n) { return *recurse_1 (n, &n); } int main () { int prot_unwritable; void *p; sigset_t emptyset; # if HAVE_SETRLIMIT && defined RLIMIT_STACK /* Before starting the endless recursion, try to be friendly to the user's machine. On some Linux 2.2.x systems, there is no stack limit for user processes at all. We don't want to kill such systems. */ struct rlimit rl; rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ setrlimit (RLIMIT_STACK, &rl); # endif /* Prepare the storage for the alternate stack. */ prepare_alternate_stack (); /* Install the stack overflow handler. */ if (stackoverflow_install_handler (&stackoverflow_handler, mystack, MYSTACK_SIZE) < 0) exit (2); /* Preparations. */ # if !HAVE_MAP_ANONYMOUS zero_fd = open ("/dev/zero", O_RDONLY, 0644); # endif # if defined __linux__ && defined __sparc__ /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as PROT_READ | PROT_WRITE. */ prot_unwritable = PROT_NONE; # else prot_unwritable = PROT_READ; # endif /* Setup some mmaped memory. */ p = mmap_zeromap ((void *) 0x12340000, 0x4000); if (p == (void *)(-1)) { fprintf (stderr, "mmap_zeromap failed.\n"); exit (2); } page = (uintptr_t) p; /* Make it read-only. */ if (mprotect ((void *) page, 0x4000, prot_unwritable) < 0) { fprintf (stderr, "mprotect failed.\n"); exit (2); } /* Install the SIGSEGV handler. */ if (sigsegv_install_handler (&sigsegv_handler) < 0) exit (2); /* Save the current signal mask. */ sigemptyset (&emptyset); sigprocmask (SIG_BLOCK, &emptyset, &mainsigset); /* Provoke two stack overflows in a row. */ switch (setjmp (mainloop)) { case -1: printf ("emergency exit\n"); exit (1); case 0: case 1: printf ("Starting recursion pass %d.\n", pass + 1); recurse (0); printf ("no endless recursion?!\n"); exit (1); case 2: *(volatile int *) (page + 0x678) = 42; break; case 3: *null_pointer_to_volatile_int = 42; break; case 4: break; default: abort (); } /* Validate that the alternate stack did not overflow. */ check_alternate_stack_no_overflow (); printf ("Test passed.\n"); exit (0); } #else int main () { return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-simple-atomic.c��������������������������������������������������0000664�0000000�0000000�00000014726�14110572173�0021337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of simple atomic operations for multithreading. Copyright (C) 2021 Free Software Foundation, Inc. This 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>, 2021. */ #include <config.h> #include "simple-atomic.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 operations performed in each thread. With a smaller count, say 100, we often get an "OK" result even with the racy implementation. */ #define REPEAT_COUNT 1000 #include "glthread/thread.h" #include "glthread/yield.h" #include "macros.h" #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif /* Counters for each thread. */ static unsigned int counter[THREAD_COUNT][5]; /* A variable of type 'unsigned int'. */ static unsigned int int_variable; static void * int_mutator_thread (void *arg) { int *pcounter = (int *) arg; int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { if (atomic_compare_and_swap (&int_variable, 0, 10) == 0) pcounter[0]++; yield (); if (atomic_compare_and_swap (&int_variable, 14, 17) == 14) pcounter[1]++; yield (); if (atomic_compare_and_swap (&int_variable, 20, 0) == 20) pcounter[2]++; yield (); if (atomic_compare_and_swap (&int_variable, 10, 14) == 10) pcounter[3]++; yield (); if (atomic_compare_and_swap (&int_variable, 17, 20) == 17) pcounter[4]++; yield (); } return NULL; } /* A variable of type 'uintptr_t'. */ static uintptr_t ptr_variable; static void * ptr_mutator_thread (void *arg) { int *pcounter = (int *) arg; int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { if (atomic_compare_and_swap_ptr (&ptr_variable, 0, 10) == 0) pcounter[0]++; yield (); if (atomic_compare_and_swap_ptr (&ptr_variable, 14, 17) == 14) pcounter[1]++; yield (); if (atomic_compare_and_swap_ptr (&ptr_variable, 20, 0) == 20) pcounter[2]++; yield (); if (atomic_compare_and_swap_ptr (&ptr_variable, 10, 14) == 10) pcounter[3]++; yield (); if (atomic_compare_and_swap_ptr (&ptr_variable, 17, 20) == 17) pcounter[4]++; yield (); } return NULL; } int main () { /* Check simple uses of atomic_compare_and_swap. */ { unsigned int x[3] = { 0xDEADBEEFU, 11, 0xDEADBEEFU }; ASSERT (atomic_compare_and_swap (&x[1], 0, 17) == 11); ASSERT (x[1] == 11); ASSERT (atomic_compare_and_swap (&x[1], 4, 11) == 11); ASSERT (x[1] == 11); ASSERT (atomic_compare_and_swap (&x[1], 11, 15) == 11); ASSERT (x[1] == 15); ASSERT (x[0] == 0xDEADBEEFU); ASSERT (x[2] == 0xDEADBEEFU); } /* Check simple uses of atomic_compare_and_swap_ptr. */ { uintptr_t v1 = ~(uintptr_t)0 / 3; uintptr_t v2 = ~(uintptr_t)0 / 5 * 4; uintptr_t v3 = ~(uintptr_t)0 / 7 * 3; uintptr_t x[3] = { 0xDEADBEEFU, v1, 0xDEADBEEFU }; ASSERT (atomic_compare_and_swap_ptr (&x[1], 0, v3) == v1); ASSERT (x[1] == v1); ASSERT (atomic_compare_and_swap_ptr (&x[1], 4, v1) == v1); ASSERT (x[1] == v1); ASSERT (atomic_compare_and_swap_ptr (&x[1], v1, v2) == v1); ASSERT (x[1] == v2); ASSERT (x[0] == 0xDEADBEEFU); ASSERT (x[2] == 0xDEADBEEFU); } /* Check atomicity of atomic_compare_and_swap. */ { void * (*funcs[2]) (void *) = { int_mutator_thread, ptr_mutator_thread }; int f; for (f = 0; f < 2; f++) { void * (*func) (void *) = funcs[f]; int i, j; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < THREAD_COUNT; i++) for (j = 0; j < 5; j++) counter[i][j] = 0; /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (func, &counter[i][0]); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); /* Sum up the work that the threads have done. */ unsigned int sum[5]; for (j = 0; j < 5; j++) { sum[j] = 0; for (i = 0; i < THREAD_COUNT; i++) sum[j] += counter[i][j]; } /* If things went atomically, the threads have moved the variable's value through the cycle 0 -> 10 -> 14 -> 17 -> 20 -> 0 ... a large number of times. sum[0] is the number of transitions 0 -> 10. sum[3] is the number of transitions 10 -> 14. sum[1] is the number of transitions 14 -> 17. sum[4] is the number of transitions 17 -> 20. sum[2] is the number of transitions 20 -> 0. Since the cycle started at 0 and ends anywhere (namely, when all threads when through their loop REPEAT_COUNT times), the sequence sum[0], sum[3], sum[1], sum[4], sum[2], sum[0] - 1 must be monotonically decreasing. If things did not go atomically, the counters don't exhibit this pattern. */ printf ("Counters: %u %u %u %u %u\n", sum[0], sum[3], sum[1], sum[4], sum[2]); ASSERT ((sum[0] == sum[3] || sum[0] == sum[3] + 1) && (sum[3] == sum[1] || sum[3] == sum[1] + 1) && (sum[1] == sum[4] || sum[1] == sum[4] + 1) && (sum[4] == sum[2] || sum[4] == sum[2] + 1) && (sum[2] + 1 == sum[0] || sum[2] == sum[0])); } } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ������������������������������������������gnulib-20210822~d383792/tests/test-sin.c������������������������������������������������������������0000664�0000000�0000000�00000002072�14110572173�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sin() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sin, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = sin (x); ASSERT (y >= 0.5646424733 && y <= 0.5646424734); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sinf.c�����������������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sinf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = sinf (x); ASSERT (y >= 0.5646424f && y <= 0.5646426f); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sinh.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinh() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sinh, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = sinh (x); ASSERT (y >= 0.6366535821 && y <= 0.6366535822); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sinhf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinhf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sinhf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = sinhf (x); ASSERT (y >= 0.6366535f && y <= 0.6366537f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sinl.c�����������������������������������������������������������0000664�0000000�0000000�00000002246�14110572173�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sinl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = sinl (x); ASSERT (y >= 0.5646424733L && y <= 0.5646424734L); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sleep.c����������������������������������������������������������0000664�0000000�0000000�00000002633�14110572173�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sleep() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (sleep, unsigned int, (unsigned int)); #include <signal.h> #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { ASSERT (sleep (1) <= 1); ASSERT (sleep (0) == 0); #if HAVE_DECL_ALARM { const unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); ASSERT (pentecost - 10 < remaining && remaining <= pentecost); } #endif return 0; } �����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sm3.c������������������������������������������������������������0000664�0000000�0000000�00000003703�14110572173�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2017-2021 Free Software Foundation, Inc. * Written by Jia Zhang <qianyue.zj@alibaba-inc.com> * * This 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 "sm3.h" #include <stdio.h> #include <string.h> static int test (const char *in, const char *out) { char buf[SM3_DIGEST_SIZE]; if (memcmp (sm3_buffer (in, strlen (in), buf), out, SM3_DIGEST_SIZE) != 0) { size_t i; printf ("expected:\n"); for (i = 0; i < SM3_DIGEST_SIZE; i++) printf ("%02x ", out[i] & 0xFFu); printf ("\ncomputed:\n"); for (i = 0; i < SM3_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFFu); printf ("\n"); return 1; } return 0; } int main (void) { /* Test vectors from GM/T 004-2012 */ const char *in[] = { "abc", "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd", }; const char *out[] = { "\x66\xc7\xf0\xf4\x62\xee\xed\xd9\xd1\xf2\xd4\x6b\xdc\x10\xe4\xe2" "\x41\x67\xc4\x87\x5c\xf2\xf7\xa2\x29\x7d\xa0\x2b\x8f\x4b\xa8\xe0", "\xde\xbe\x9f\xf9\x22\x75\xb8\xa1\x38\x60\x48\x89\xc1\x8e\x5a\x4d" "\x6f\xdb\x70\xe5\x38\x7e\x57\x65\x29\x3d\xcb\xa3\x9c\x0c\x57\x32", }; size_t i; for (i = 0; i < sizeof (in) / sizeof (in[0]); i++) { if (test (in[i], out[i])) return 1; } return 0; } �������������������������������������������������������������gnulib-20210822~d383792/tests/test-snprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002077�14110572173�0021573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible snprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <float.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-snprintf-posix.h" int main (int argc, char *argv[]) { test_function (snprintf); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-snprintf-posix.h�������������������������������������������������0000664�0000000�0000000�00000316563�14110572173�0021610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsnprintf() and snprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "minus-zero.h" #include "infinity.h" #include "nan.h" /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = minus_zerod; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } #else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } #endif static int strmatch (const char *pattern, const char *string) { if (strlen (pattern) != strlen (string)) return 0; for (; *pattern != '\0'; pattern++, string++) if (*pattern != '*' && *string != *pattern) return 0; return 1; } /* Test whether string[start_index..end_index-1] is a valid textual representation of NaN. */ static int strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static void test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { char buf[8]; int size; char result[5000]; /* Test return value convention. */ for (size = 0; size <= 8; size++) { int retval; memcpy (buf, "DEADBEEF", 8); retval = my_snprintf (buf, size, "%d", 12345); ASSERT (retval == 5); if (size < 6) { if (size > 0) { ASSERT (memcmp (buf, "12345", size - 1) == 0); ASSERT (buf[size - 1] == '\0'); } ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); } else { ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } } /* Test support of size specifiers as in C99. */ { int retval = my_snprintf (result, sizeof (result), "%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (strcmp (result, "12345671 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (strcmp (result, "12345672 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (strcmp (result, "12345673 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%Lg %d", (long double) 1.5, 33, 44, 55); ASSERT (strcmp (result, "1.5 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%a %d", 3.1416015625, 33, 44, 55); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%A %d", -3.1416015625, 33, 44, 55); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%a %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%a %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%a %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%a %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%a %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding near the decimal point. */ int retval = my_snprintf (result, sizeof (result), "%.0a %d", 1.5, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 0. */ int retval = my_snprintf (result, sizeof (result), "%.0a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 1. */ int retval = my_snprintf (result, sizeof (result), "%.1a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 2. */ int retval = my_snprintf (result, sizeof (result), "%.2a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 3. */ int retval = my_snprintf (result, sizeof (result), "%.3a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. */ int retval = my_snprintf (result, sizeof (result), "%.3a %d", 1.49999, 33, 44, 55); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug. */ int retval = my_snprintf (result, sizeof (result), "%.1a %d", 1.999, 33, 44, 55); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* Small precision. */ int retval = my_snprintf (result, sizeof (result), "%.10a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Large precision. */ int retval = my_snprintf (result, sizeof (result), "%.50a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.cp+0 33") == 0 || strcmp (result, "0x3.8p-1 33") == 0 || strcmp (result, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#a %d", 1.0, 33, 44, 55); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%010a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%010a %d", Infinityd (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050a %d", NaNd (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%La %d", 3.1416015625L, 33, 44, 55); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%LA %d", -3.1416015625L, 33, 44, 55); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%La %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%La %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%La %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%La %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%La %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* snprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Rounding near the decimal point. */ int retval = my_snprintf (result, sizeof (result), "%.0La %d", 1.5L, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 0. */ int retval = my_snprintf (result, sizeof (result), "%.0La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 1. */ int retval = my_snprintf (result, sizeof (result), "%.1La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 2. */ int retval = my_snprintf (result, sizeof (result), "%.2La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 3. */ int retval = my_snprintf (result, sizeof (result), "%.3La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. */ int retval = my_snprintf (result, sizeof (result), "%.3La %d", 1.49999L, 33, 44, 55); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ int retval = my_snprintf (result, sizeof (result), "%.1La %d", 1.999L, 33, 44, 55); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* Small precision. */ int retval = my_snprintf (result, sizeof (result), "%.10La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Large precision. */ int retval = my_snprintf (result, sizeof (result), "%.50La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.cp+0 33") == 0 || strcmp (result, "0x3.8p-1 33") == 0 || strcmp (result, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#La %d", 1.0L, 33, 44, 55); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%010La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%010La %d", Infinityl (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050La %d", NaNl (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %f format directive. */ { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%f %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%f %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "0.000000" }, { 1.234321234321234e-36, "0.000000" }, { 1.234321234321234e-35, "0.000000" }, { 1.234321234321234e-34, "0.000000" }, { 1.234321234321234e-33, "0.000000" }, { 1.234321234321234e-32, "0.000000" }, { 1.234321234321234e-31, "0.000000" }, { 1.234321234321234e-30, "0.000000" }, { 1.234321234321234e-29, "0.000000" }, { 1.234321234321234e-28, "0.000000" }, { 1.234321234321234e-27, "0.000000" }, { 1.234321234321234e-26, "0.000000" }, { 1.234321234321234e-25, "0.000000" }, { 1.234321234321234e-24, "0.000000" }, { 1.234321234321234e-23, "0.000000" }, { 1.234321234321234e-22, "0.000000" }, { 1.234321234321234e-21, "0.000000" }, { 1.234321234321234e-20, "0.000000" }, { 1.234321234321234e-19, "0.000000" }, { 1.234321234321234e-18, "0.000000" }, { 1.234321234321234e-17, "0.000000" }, { 1.234321234321234e-16, "0.000000" }, { 1.234321234321234e-15, "0.000000" }, { 1.234321234321234e-14, "0.000000" }, { 1.234321234321234e-13, "0.000000" }, { 1.234321234321234e-12, "0.000000" }, { 1.234321234321234e-11, "0.000000" }, { 1.234321234321234e-10, "0.000000" }, { 1.234321234321234e-9, "0.000000" }, { 1.234321234321234e-8, "0.000000" }, { 1.234321234321234e-7, "0.000000" }, { 1.234321234321234e-6, "0.000001" }, { 1.234321234321234e-5, "0.000012" }, { 1.234321234321234e-4, "0.000123" }, { 1.234321234321234e-3, "0.001234" }, { 1.234321234321234e-2, "0.012343" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.234321" }, { 1.234321234321234e1, "12.343212" }, { 1.234321234321234e2, "123.432123" }, { 1.234321234321234e3, "1234.321234" }, { 1.234321234321234e4, "12343.212343" }, { 1.234321234321234e5, "123432.123432" }, { 1.234321234321234e6, "1234321.234321" }, { 1.234321234321234e7, "12343212.343212" }, { 1.234321234321234e8, "123432123.432123" }, { 1.234321234321234e9, "1234321234.321234" }, { 1.234321234321234e10, "12343212343.2123**" }, { 1.234321234321234e11, "123432123432.123***" }, { 1.234321234321234e12, "1234321234321.23****" }, { 1.234321234321234e13, "12343212343212.3*****" }, { 1.234321234321234e14, "123432123432123.******" }, { 1.234321234321234e15, "1234321234321234.000000" }, { 1.234321234321234e16, "123432123432123**.000000" }, { 1.234321234321234e17, "123432123432123***.000000" }, { 1.234321234321234e18, "123432123432123****.000000" }, { 1.234321234321234e19, "123432123432123*****.000000" }, { 1.234321234321234e20, "123432123432123******.000000" }, { 1.234321234321234e21, "123432123432123*******.000000" }, { 1.234321234321234e22, "123432123432123********.000000" }, { 1.234321234321234e23, "123432123432123*********.000000" }, { 1.234321234321234e24, "123432123432123**********.000000" }, { 1.234321234321234e25, "123432123432123***********.000000" }, { 1.234321234321234e26, "123432123432123************.000000" }, { 1.234321234321234e27, "123432123432123*************.000000" }, { 1.234321234321234e28, "123432123432123**************.000000" }, { 1.234321234321234e29, "123432123432123***************.000000" }, { 1.234321234321234e30, "123432123432123****************.000000" }, { 1.234321234321234e31, "123432123432123*****************.000000" }, { 1.234321234321234e32, "123432123432123******************.000000" }, { 1.234321234321234e33, "123432123432123*******************.000000" }, { 1.234321234321234e34, "123432123432123********************.000000" }, { 1.234321234321234e35, "123432123432123*********************.000000" }, { 1.234321234321234e36, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%f", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%f %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%f %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%f %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%f %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%f %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%015f %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015f %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.f %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2f %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2f %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "0.000000" }, { 1.234321234321234e-36L, "0.000000" }, { 1.234321234321234e-35L, "0.000000" }, { 1.234321234321234e-34L, "0.000000" }, { 1.234321234321234e-33L, "0.000000" }, { 1.234321234321234e-32L, "0.000000" }, { 1.234321234321234e-31L, "0.000000" }, { 1.234321234321234e-30L, "0.000000" }, { 1.234321234321234e-29L, "0.000000" }, { 1.234321234321234e-28L, "0.000000" }, { 1.234321234321234e-27L, "0.000000" }, { 1.234321234321234e-26L, "0.000000" }, { 1.234321234321234e-25L, "0.000000" }, { 1.234321234321234e-24L, "0.000000" }, { 1.234321234321234e-23L, "0.000000" }, { 1.234321234321234e-22L, "0.000000" }, { 1.234321234321234e-21L, "0.000000" }, { 1.234321234321234e-20L, "0.000000" }, { 1.234321234321234e-19L, "0.000000" }, { 1.234321234321234e-18L, "0.000000" }, { 1.234321234321234e-17L, "0.000000" }, { 1.234321234321234e-16L, "0.000000" }, { 1.234321234321234e-15L, "0.000000" }, { 1.234321234321234e-14L, "0.000000" }, { 1.234321234321234e-13L, "0.000000" }, { 1.234321234321234e-12L, "0.000000" }, { 1.234321234321234e-11L, "0.000000" }, { 1.234321234321234e-10L, "0.000000" }, { 1.234321234321234e-9L, "0.000000" }, { 1.234321234321234e-8L, "0.000000" }, { 1.234321234321234e-7L, "0.000000" }, { 1.234321234321234e-6L, "0.000001" }, { 1.234321234321234e-5L, "0.000012" }, { 1.234321234321234e-4L, "0.000123" }, { 1.234321234321234e-3L, "0.001234" }, { 1.234321234321234e-2L, "0.012343" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.234321" }, { 1.234321234321234e1L, "12.343212" }, { 1.234321234321234e2L, "123.432123" }, { 1.234321234321234e3L, "1234.321234" }, { 1.234321234321234e4L, "12343.212343" }, { 1.234321234321234e5L, "123432.123432" }, { 1.234321234321234e6L, "1234321.234321" }, { 1.234321234321234e7L, "12343212.343212" }, { 1.234321234321234e8L, "123432123.432123" }, { 1.234321234321234e9L, "1234321234.321234" }, { 1.234321234321234e10L, "12343212343.2123**" }, { 1.234321234321234e11L, "123432123432.123***" }, { 1.234321234321234e12L, "1234321234321.23****" }, { 1.234321234321234e13L, "12343212343212.3*****" }, { 1.234321234321234e14L, "123432123432123.******" }, { 1.234321234321234e15L, "1234321234321234.000000" }, { 1.234321234321234e16L, "123432123432123**.000000" }, { 1.234321234321234e17L, "123432123432123***.000000" }, { 1.234321234321234e18L, "123432123432123****.000000" }, { 1.234321234321234e19L, "123432123432123*****.000000" }, { 1.234321234321234e20L, "123432123432123******.000000" }, { 1.234321234321234e21L, "123432123432123*******.000000" }, { 1.234321234321234e22L, "123432123432123********.000000" }, { 1.234321234321234e23L, "123432123432123*********.000000" }, { 1.234321234321234e24L, "123432123432123**********.000000" }, { 1.234321234321234e25L, "123432123432123***********.000000" }, { 1.234321234321234e26L, "123432123432123************.000000" }, { 1.234321234321234e27L, "123432123432123*************.000000" }, { 1.234321234321234e28L, "123432123432123**************.000000" }, { 1.234321234321234e29L, "123432123432123***************.000000" }, { 1.234321234321234e30L, "123432123432123****************.000000" }, { 1.234321234321234e31L, "123432123432123*****************.000000" }, { 1.234321234321234e32L, "123432123432123******************.000000" }, { 1.234321234321234e33L, "123432123432123*******************.000000" }, { 1.234321234321234e34L, "123432123432123********************.000000" }, { 1.234321234321234e35L, "123432123432123*********************.000000" }, { 1.234321234321234e36L, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%Lf", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* snprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%015Lf %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015Lf %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.Lf %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2Lf %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2Lf %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %F format directive. */ { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%F %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%F %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%F %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%F %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%F %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%F %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%F %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%F %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO. */ int retval = my_snprintf (result, sizeof (result), "%015F %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015F %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.F %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2F %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2F %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%LF %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO. */ int retval = my_snprintf (result, sizeof (result), "%015LF %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015LF %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.LF %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2LF %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.2LF %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %e format directive. */ { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%e %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%e %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.234321e-37" }, { 1.234321234321234e-36, "1.234321e-36" }, { 1.234321234321234e-35, "1.234321e-35" }, { 1.234321234321234e-34, "1.234321e-34" }, { 1.234321234321234e-33, "1.234321e-33" }, { 1.234321234321234e-32, "1.234321e-32" }, { 1.234321234321234e-31, "1.234321e-31" }, { 1.234321234321234e-30, "1.234321e-30" }, { 1.234321234321234e-29, "1.234321e-29" }, { 1.234321234321234e-28, "1.234321e-28" }, { 1.234321234321234e-27, "1.234321e-27" }, { 1.234321234321234e-26, "1.234321e-26" }, { 1.234321234321234e-25, "1.234321e-25" }, { 1.234321234321234e-24, "1.234321e-24" }, { 1.234321234321234e-23, "1.234321e-23" }, { 1.234321234321234e-22, "1.234321e-22" }, { 1.234321234321234e-21, "1.234321e-21" }, { 1.234321234321234e-20, "1.234321e-20" }, { 1.234321234321234e-19, "1.234321e-19" }, { 1.234321234321234e-18, "1.234321e-18" }, { 1.234321234321234e-17, "1.234321e-17" }, { 1.234321234321234e-16, "1.234321e-16" }, { 1.234321234321234e-15, "1.234321e-15" }, { 1.234321234321234e-14, "1.234321e-14" }, { 1.234321234321234e-13, "1.234321e-13" }, { 1.234321234321234e-12, "1.234321e-12" }, { 1.234321234321234e-11, "1.234321e-11" }, { 1.234321234321234e-10, "1.234321e-10" }, { 1.234321234321234e-9, "1.234321e-09" }, { 1.234321234321234e-8, "1.234321e-08" }, { 1.234321234321234e-7, "1.234321e-07" }, { 1.234321234321234e-6, "1.234321e-06" }, { 1.234321234321234e-5, "1.234321e-05" }, { 1.234321234321234e-4, "1.234321e-04" }, { 1.234321234321234e-3, "1.234321e-03" }, { 1.234321234321234e-2, "1.234321e-02" }, { 1.234321234321234e-1, "1.234321e-01" }, { 1.234321234321234, "1.234321e+00" }, { 1.234321234321234e1, "1.234321e+01" }, { 1.234321234321234e2, "1.234321e+02" }, { 1.234321234321234e3, "1.234321e+03" }, { 1.234321234321234e4, "1.234321e+04" }, { 1.234321234321234e5, "1.234321e+05" }, { 1.234321234321234e6, "1.234321e+06" }, { 1.234321234321234e7, "1.234321e+07" }, { 1.234321234321234e8, "1.234321e+08" }, { 1.234321234321234e9, "1.234321e+09" }, { 1.234321234321234e10, "1.234321e+10" }, { 1.234321234321234e11, "1.234321e+11" }, { 1.234321234321234e12, "1.234321e+12" }, { 1.234321234321234e13, "1.234321e+13" }, { 1.234321234321234e14, "1.234321e+14" }, { 1.234321234321234e15, "1.234321e+15" }, { 1.234321234321234e16, "1.234321e+16" }, { 1.234321234321234e17, "1.234321e+17" }, { 1.234321234321234e18, "1.234321e+18" }, { 1.234321234321234e19, "1.234321e+19" }, { 1.234321234321234e20, "1.234321e+20" }, { 1.234321234321234e21, "1.234321e+21" }, { 1.234321234321234e22, "1.234321e+22" }, { 1.234321234321234e23, "1.234321e+23" }, { 1.234321234321234e24, "1.234321e+24" }, { 1.234321234321234e25, "1.234321e+25" }, { 1.234321234321234e26, "1.234321e+26" }, { 1.234321234321234e27, "1.234321e+27" }, { 1.234321234321234e28, "1.234321e+28" }, { 1.234321234321234e29, "1.234321e+29" }, { 1.234321234321234e30, "1.234321e+30" }, { 1.234321234321234e31, "1.234321e+31" }, { 1.234321234321234e32, "1.234321e+32" }, { 1.234321234321234e33, "1.234321e+33" }, { 1.234321234321234e34, "1.234321e+34" }, { 1.234321234321234e35, "1.234321e+35" }, { 1.234321234321234e36, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%e", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%e %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%e %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%e %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%e %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%e %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%15e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-15e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.e %d", 9.75, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%015e %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015e %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.e %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.4e %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.4e %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.234321e-37" }, { 1.234321234321234e-36L, "1.234321e-36" }, { 1.234321234321234e-35L, "1.234321e-35" }, { 1.234321234321234e-34L, "1.234321e-34" }, { 1.234321234321234e-33L, "1.234321e-33" }, { 1.234321234321234e-32L, "1.234321e-32" }, { 1.234321234321234e-31L, "1.234321e-31" }, { 1.234321234321234e-30L, "1.234321e-30" }, { 1.234321234321234e-29L, "1.234321e-29" }, { 1.234321234321234e-28L, "1.234321e-28" }, { 1.234321234321234e-27L, "1.234321e-27" }, { 1.234321234321234e-26L, "1.234321e-26" }, { 1.234321234321234e-25L, "1.234321e-25" }, { 1.234321234321234e-24L, "1.234321e-24" }, { 1.234321234321234e-23L, "1.234321e-23" }, { 1.234321234321234e-22L, "1.234321e-22" }, { 1.234321234321234e-21L, "1.234321e-21" }, { 1.234321234321234e-20L, "1.234321e-20" }, { 1.234321234321234e-19L, "1.234321e-19" }, { 1.234321234321234e-18L, "1.234321e-18" }, { 1.234321234321234e-17L, "1.234321e-17" }, { 1.234321234321234e-16L, "1.234321e-16" }, { 1.234321234321234e-15L, "1.234321e-15" }, { 1.234321234321234e-14L, "1.234321e-14" }, { 1.234321234321234e-13L, "1.234321e-13" }, { 1.234321234321234e-12L, "1.234321e-12" }, { 1.234321234321234e-11L, "1.234321e-11" }, { 1.234321234321234e-10L, "1.234321e-10" }, { 1.234321234321234e-9L, "1.234321e-09" }, { 1.234321234321234e-8L, "1.234321e-08" }, { 1.234321234321234e-7L, "1.234321e-07" }, { 1.234321234321234e-6L, "1.234321e-06" }, { 1.234321234321234e-5L, "1.234321e-05" }, { 1.234321234321234e-4L, "1.234321e-04" }, { 1.234321234321234e-3L, "1.234321e-03" }, { 1.234321234321234e-2L, "1.234321e-02" }, { 1.234321234321234e-1L, "1.234321e-01" }, { 1.234321234321234L, "1.234321e+00" }, { 1.234321234321234e1L, "1.234321e+01" }, { 1.234321234321234e2L, "1.234321e+02" }, { 1.234321234321234e3L, "1.234321e+03" }, { 1.234321234321234e4L, "1.234321e+04" }, { 1.234321234321234e5L, "1.234321e+05" }, { 1.234321234321234e6L, "1.234321e+06" }, { 1.234321234321234e7L, "1.234321e+07" }, { 1.234321234321234e8L, "1.234321e+08" }, { 1.234321234321234e9L, "1.234321e+09" }, { 1.234321234321234e10L, "1.234321e+10" }, { 1.234321234321234e11L, "1.234321e+11" }, { 1.234321234321234e12L, "1.234321e+12" }, { 1.234321234321234e13L, "1.234321e+13" }, { 1.234321234321234e14L, "1.234321e+14" }, { 1.234321234321234e15L, "1.234321e+15" }, { 1.234321234321234e16L, "1.234321e+16" }, { 1.234321234321234e17L, "1.234321e+17" }, { 1.234321234321234e18L, "1.234321e+18" }, { 1.234321234321234e19L, "1.234321e+19" }, { 1.234321234321234e20L, "1.234321e+20" }, { 1.234321234321234e21L, "1.234321e+21" }, { 1.234321234321234e22L, "1.234321e+22" }, { 1.234321234321234e23L, "1.234321e+23" }, { 1.234321234321234e24L, "1.234321e+24" }, { 1.234321234321234e25L, "1.234321e+25" }, { 1.234321234321234e26L, "1.234321e+26" }, { 1.234321234321234e27L, "1.234321e+27" }, { 1.234321234321234e28L, "1.234321e+28" }, { 1.234321234321234e29L, "1.234321e+29" }, { 1.234321234321234e30L, "1.234321e+30" }, { 1.234321234321234e31L, "1.234321e+31" }, { 1.234321234321234e32L, "1.234321e+32" }, { 1.234321234321234e33L, "1.234321e+33" }, { 1.234321234321234e34L, "1.234321e+34" }, { 1.234321234321234e35L, "1.234321e+35" }, { 1.234321234321234e36L, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%Le", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* snprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%15Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-15Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.Le %d", 9.75L, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%015Le %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015Le %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.Le %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.4Le %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.4Le %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %g format directive. */ { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%g %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%g %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.23432e-37" }, { 1.234321234321234e-36, "1.23432e-36" }, { 1.234321234321234e-35, "1.23432e-35" }, { 1.234321234321234e-34, "1.23432e-34" }, { 1.234321234321234e-33, "1.23432e-33" }, { 1.234321234321234e-32, "1.23432e-32" }, { 1.234321234321234e-31, "1.23432e-31" }, { 1.234321234321234e-30, "1.23432e-30" }, { 1.234321234321234e-29, "1.23432e-29" }, { 1.234321234321234e-28, "1.23432e-28" }, { 1.234321234321234e-27, "1.23432e-27" }, { 1.234321234321234e-26, "1.23432e-26" }, { 1.234321234321234e-25, "1.23432e-25" }, { 1.234321234321234e-24, "1.23432e-24" }, { 1.234321234321234e-23, "1.23432e-23" }, { 1.234321234321234e-22, "1.23432e-22" }, { 1.234321234321234e-21, "1.23432e-21" }, { 1.234321234321234e-20, "1.23432e-20" }, { 1.234321234321234e-19, "1.23432e-19" }, { 1.234321234321234e-18, "1.23432e-18" }, { 1.234321234321234e-17, "1.23432e-17" }, { 1.234321234321234e-16, "1.23432e-16" }, { 1.234321234321234e-15, "1.23432e-15" }, { 1.234321234321234e-14, "1.23432e-14" }, { 1.234321234321234e-13, "1.23432e-13" }, { 1.234321234321234e-12, "1.23432e-12" }, { 1.234321234321234e-11, "1.23432e-11" }, { 1.234321234321234e-10, "1.23432e-10" }, { 1.234321234321234e-9, "1.23432e-09" }, { 1.234321234321234e-8, "1.23432e-08" }, { 1.234321234321234e-7, "1.23432e-07" }, { 1.234321234321234e-6, "1.23432e-06" }, { 1.234321234321234e-5, "1.23432e-05" }, { 1.234321234321234e-4, "0.000123432" }, { 1.234321234321234e-3, "0.00123432" }, { 1.234321234321234e-2, "0.0123432" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.23432" }, { 1.234321234321234e1, "12.3432" }, { 1.234321234321234e2, "123.432" }, { 1.234321234321234e3, "1234.32" }, { 1.234321234321234e4, "12343.2" }, { 1.234321234321234e5, "123432" }, { 1.234321234321234e6, "1.23432e+06" }, { 1.234321234321234e7, "1.23432e+07" }, { 1.234321234321234e8, "1.23432e+08" }, { 1.234321234321234e9, "1.23432e+09" }, { 1.234321234321234e10, "1.23432e+10" }, { 1.234321234321234e11, "1.23432e+11" }, { 1.234321234321234e12, "1.23432e+12" }, { 1.234321234321234e13, "1.23432e+13" }, { 1.234321234321234e14, "1.23432e+14" }, { 1.234321234321234e15, "1.23432e+15" }, { 1.234321234321234e16, "1.23432e+16" }, { 1.234321234321234e17, "1.23432e+17" }, { 1.234321234321234e18, "1.23432e+18" }, { 1.234321234321234e19, "1.23432e+19" }, { 1.234321234321234e20, "1.23432e+20" }, { 1.234321234321234e21, "1.23432e+21" }, { 1.234321234321234e22, "1.23432e+22" }, { 1.234321234321234e23, "1.23432e+23" }, { 1.234321234321234e24, "1.23432e+24" }, { 1.234321234321234e25, "1.23432e+25" }, { 1.234321234321234e26, "1.23432e+26" }, { 1.234321234321234e27, "1.23432e+27" }, { 1.234321234321234e28, "1.23432e+28" }, { 1.234321234321234e29, "1.23432e+29" }, { 1.234321234321234e30, "1.23432e+30" }, { 1.234321234321234e31, "1.23432e+31" }, { 1.234321234321234e32, "1.23432e+32" }, { 1.234321234321234e33, "1.23432e+33" }, { 1.234321234321234e34, "1.23432e+34" }, { 1.234321234321234e35, "1.23432e+35" }, { 1.234321234321234e36, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%g", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%g %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%g %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%g %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%g %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%g %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.g %d", 9.75, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%010g %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015g %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.g %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.5g %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.5g %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.23432e-37" }, { 1.234321234321234e-36L, "1.23432e-36" }, { 1.234321234321234e-35L, "1.23432e-35" }, { 1.234321234321234e-34L, "1.23432e-34" }, { 1.234321234321234e-33L, "1.23432e-33" }, { 1.234321234321234e-32L, "1.23432e-32" }, { 1.234321234321234e-31L, "1.23432e-31" }, { 1.234321234321234e-30L, "1.23432e-30" }, { 1.234321234321234e-29L, "1.23432e-29" }, { 1.234321234321234e-28L, "1.23432e-28" }, { 1.234321234321234e-27L, "1.23432e-27" }, { 1.234321234321234e-26L, "1.23432e-26" }, { 1.234321234321234e-25L, "1.23432e-25" }, { 1.234321234321234e-24L, "1.23432e-24" }, { 1.234321234321234e-23L, "1.23432e-23" }, { 1.234321234321234e-22L, "1.23432e-22" }, { 1.234321234321234e-21L, "1.23432e-21" }, { 1.234321234321234e-20L, "1.23432e-20" }, { 1.234321234321234e-19L, "1.23432e-19" }, { 1.234321234321234e-18L, "1.23432e-18" }, { 1.234321234321234e-17L, "1.23432e-17" }, { 1.234321234321234e-16L, "1.23432e-16" }, { 1.234321234321234e-15L, "1.23432e-15" }, { 1.234321234321234e-14L, "1.23432e-14" }, { 1.234321234321234e-13L, "1.23432e-13" }, { 1.234321234321234e-12L, "1.23432e-12" }, { 1.234321234321234e-11L, "1.23432e-11" }, { 1.234321234321234e-10L, "1.23432e-10" }, { 1.234321234321234e-9L, "1.23432e-09" }, { 1.234321234321234e-8L, "1.23432e-08" }, { 1.234321234321234e-7L, "1.23432e-07" }, { 1.234321234321234e-6L, "1.23432e-06" }, { 1.234321234321234e-5L, "1.23432e-05" }, { 1.234321234321234e-4L, "0.000123432" }, { 1.234321234321234e-3L, "0.00123432" }, { 1.234321234321234e-2L, "0.0123432" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.23432" }, { 1.234321234321234e1L, "12.3432" }, { 1.234321234321234e2L, "123.432" }, { 1.234321234321234e3L, "1234.32" }, { 1.234321234321234e4L, "12343.2" }, { 1.234321234321234e5L, "123432" }, { 1.234321234321234e6L, "1.23432e+06" }, { 1.234321234321234e7L, "1.23432e+07" }, { 1.234321234321234e8L, "1.23432e+08" }, { 1.234321234321234e9L, "1.23432e+09" }, { 1.234321234321234e10L, "1.23432e+10" }, { 1.234321234321234e11L, "1.23432e+11" }, { 1.234321234321234e12L, "1.23432e+12" }, { 1.234321234321234e13L, "1.23432e+13" }, { 1.234321234321234e14L, "1.23432e+14" }, { 1.234321234321234e15L, "1.23432e+15" }, { 1.234321234321234e16L, "1.23432e+16" }, { 1.234321234321234e17L, "1.23432e+17" }, { 1.234321234321234e18L, "1.23432e+18" }, { 1.234321234321234e19L, "1.23432e+19" }, { 1.234321234321234e20L, "1.23432e+20" }, { 1.234321234321234e21L, "1.23432e+21" }, { 1.234321234321234e22L, "1.23432e+22" }, { 1.234321234321234e23L, "1.23432e+23" }, { 1.234321234321234e24L, "1.23432e+24" }, { 1.234321234321234e25L, "1.23432e+25" }, { 1.234321234321234e26L, "1.23432e+26" }, { 1.234321234321234e27L, "1.23432e+27" }, { 1.234321234321234e28L, "1.23432e+28" }, { 1.234321234321234e29L, "1.23432e+29" }, { 1.234321234321234e30L, "1.23432e+30" }, { 1.234321234321234e31L, "1.23432e+31" }, { 1.234321234321234e32L, "1.23432e+32" }, { 1.234321234321234e33L, "1.23432e+33" }, { 1.234321234321234e34L, "1.23432e+34" }, { 1.234321234321234e35L, "1.23432e+35" }, { 1.234321234321234e36L, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_snprintf (result, sizeof (result), "%Lg", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_snprintf (result, sizeof (result), "%Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* snprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_snprintf (result, sizeof (result), "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_snprintf (result, sizeof (result), "%10Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_snprintf (result, sizeof (result), "%-10Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_snprintf (result, sizeof (result), "%+Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_snprintf (result, sizeof (result), "% Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_snprintf (result, sizeof (result), "%#.Lg %d", 9.75L, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_snprintf (result, sizeof (result), "%010Lg %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_snprintf (result, sizeof (result), "%015Lg %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_snprintf (result, sizeof (result), "%050Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_snprintf (result, sizeof (result), "%.Lg %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_snprintf (result, sizeof (result), "%.5Lg %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_snprintf (result, sizeof (result), "%.5Lg %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %n format directive. */ { int count = -1; int retval = my_snprintf (result, sizeof (result), "%d %n", 123, &count, 33, 44, 55); ASSERT (strcmp (result, "123 ") == 0); ASSERT (retval == strlen (result)); ASSERT (count == 4); } /* Test the support of the POSIX/XSI format strings with positions. */ { int retval = my_snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the grouping flag. */ { int retval = my_snprintf (result, sizeof (result), "%'d %d", 1234567, 99); ASSERT (result[strlen (result) - 1] == '9'); ASSERT (retval == strlen (result)); } /* Test the support of the left-adjust flag. */ { int retval = my_snprintf (result, sizeof (result), "a%*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "a%-*sc", 3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "a%-*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } /* Test the support of large precision. */ { int retval = my_snprintf (result, sizeof (result), "%.4000d %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.*d %d", 4000, 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.4000d %d", -1234567, 99); size_t i; ASSERT (result[0] == '-'); for (i = 0; i < 4000 - 7; i++) ASSERT (result[1 + i] == '0'); ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.4000u %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.4000o %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.4000x %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 6; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%#.4000x %d", 1234567, 99); size_t i; ASSERT (result[0] == '0'); ASSERT (result[1] == 'x'); for (i = 0; i < 4000 - 6; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.4000f %d", 1.0, 99); size_t i; ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 4000; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000, " 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_snprintf (result, sizeof (result), "%.511f %d", 1.0, 99); size_t i; ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 511; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 511, " 99") == 0); ASSERT (retval == strlen (result)); } { char input[5000]; int retval; size_t i; for (i = 0; i < sizeof (input) - 1; i++) input[i] = 'a' + ((1000000 / (i + 1)) % 26); input[i] = '\0'; retval = my_snprintf (result, sizeof (result), "%.4000s %d", input, 99); ASSERT (memcmp (result, input, 4000) == 0); ASSERT (strcmp (result + 4000, " 99") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %s format directive. */ /* To verify that these tests succeed, it is necessary to run them under a tool that checks against invalid memory accesses, such as ElectricFence or "valgrind --tool=memcheck". */ { size_t i; for (i = 1; i <= 8; i++) { char *block; int retval; block = (char *) malloc (i); memcpy (block, "abcdefgh", i); retval = my_snprintf (result, sizeof (result), "%.*s", (int) i, block); ASSERT (memcmp (result, block, i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (block); } } #if HAVE_WCHAR_T { size_t i; for (i = 1; i <= 8; i++) { wchar_t *block; size_t j; int retval; block = (wchar_t *) malloc (i * sizeof (wchar_t)); for (j = 0; j < i; j++) block[j] = "abcdefgh"[j]; retval = my_snprintf (result, sizeof (result), "%.*ls", (int) i, block); ASSERT (memcmp (result, "abcdefgh", i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (block); } } #endif } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-snprintf.c�������������������������������������������������������0000664�0000000�0000000�00000003723�14110572173�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of snprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (snprintf, int, (char *, size_t, char const *, ...)); #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { char buf[8]; int size; int retval; retval = snprintf (NULL, 0, "%d", 12345); ASSERT (retval == 5); for (size = 0; size <= 8; size++) { memcpy (buf, "DEADBEEF", 8); retval = snprintf (buf, size, "%d", 12345); ASSERT (retval == 5); if (size < 6) { if (size > 0) { ASSERT (memcmp (buf, "12345", size - 1) == 0); ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); } #if !CHECK_SNPRINTF_POSIX if (size > 0) #endif ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); } else { ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } } /* Test the support of the POSIX/XSI format strings with positions. */ { char result[100]; retval = snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } return 0; } ���������������������������������������������gnulib-20210822~d383792/tests/test-sockets.c��������������������������������������������������������0000664�0000000�0000000�00000002164�14110572173�0020240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This 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 <stdio.h> #include "sockets.h" int main (void) { int err; err = gl_sockets_startup (SOCKETS_1_1); if (err != 0) { printf ("wsastartup failed %d\n", err); return 1; } err = gl_sockets_cleanup (); if (err != 0) { printf ("wsacleanup failed %d\n", err); return 1; } (void) gl_fd_to_handle (0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-spawn-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000012135�14110572173�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <spawn.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <spawn.h> #include "signature.h" #if GNULIB_TEST_POSIX_SPAWN SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn, int, (pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char *const[], char *const[])); #endif #if GNULIB_TEST_POSIX_SPAWNP SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnp, int, (pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char *const[], char *const[])); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_INIT SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_init, int, (posix_spawnattr_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_DESTROY SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_destroy, int, (posix_spawnattr_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETSIGDEFAULT SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *, sigset_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETSIGDEFAULT SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *, const sigset_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETSIGMASK SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *, sigset_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setsigmask, int, (posix_spawnattr_t *, const sigset_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETFLAGS SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getflags, int, (const posix_spawnattr_t *, short int *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setflags, int, (posix_spawnattr_t *, short int)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETPGROUP SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *, pid_t *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETPGROUP SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setpgroup, int, (posix_spawnattr_t *, pid_t)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETSCHEDPOLICY SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *, int *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETSCHEDPOLICY SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *, int)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_GETSCHEDPARAM SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *, struct sched_param *)); #endif #if GNULIB_TEST_POSIX_SPAWNATTR_SETSCHEDPARAM SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawnattr_setschedparam, int, (posix_spawnattr_t *, const struct sched_param *)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *, int, const char *, int, mode_t)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *, int)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *, int, int)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *, const char *)); #endif #if GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *, int)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-spawn-pipe-child.c�����������������������������������������������0000664�0000000�0000000�00000007475�14110572173�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-spawn-pipe-main. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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, 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 <errno.h> #include <fcntl.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif /* Depending on arguments, this test intentionally closes stderr or starts life with stderr closed. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; /* In this file, we use only system functions, no overrides from gnulib. */ #undef atoi #undef close #undef fcntl #undef fdopen #undef fflush #undef fprintf #undef read #undef write #if defined _WIN32 && !defined __CYGWIN__ # define fdopen _fdopen #endif #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } #endif /* Return non-zero if FD is open. */ static int is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } int main (int argc, char *argv[]) { /* fd 2 might be closed, but fd BACKUP_STDERR_FILENO is the original stderr. */ myerr = fdopen (BACKUP_STDERR_FILENO, "w"); if (!myerr) return 2; ASSERT (argc == 2); #if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Avoid exceptions from within _get_osfhandle. */ _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); #endif /* Read one byte from fd 0, and write its value plus one to fd 1. fd 2 should be closed iff the argument is 1. Check that no other file descriptors leaked. */ char buffer[2] = { 's', 't' }; ASSERT (read (STDIN_FILENO, buffer, 2) == 1); buffer[0]++; ASSERT (write (STDOUT_FILENO, buffer, 1) == 1); switch (atoi (argv[1])) { case 0: /* Expect fd 2 is open. */ ASSERT (is_open (STDERR_FILENO)); break; case 1: /* Expect fd 2 is closed. But on HP-UX 11, fd 2 gets automatically re-opened to /dev/null if it was closed. Similarly on native Windows. Future POSIX will allow this, see <http://austingroupbugs.net/view.php?id=173>. */ #if !(defined __hpux || (defined _WIN32 && ! defined __CYGWIN__)) ASSERT (! is_open (STDERR_FILENO)); #endif break; default: ASSERT (0); } int fd; for (fd = 3; fd < 7; fd++) { errno = 0; ASSERT (close (fd) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-spawn-pipe-main.c������������������������������������������������0000664�0000000�0000000�00000006717�14110572173�0021602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of create_pipe_bidi/wait_subprocess. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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, 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 "spawn-pipe.h" #include "wait-process.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* Depending on arguments, this test intentionally closes stderr or starts life with stderr closed. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; /* Create a bi-directional pipe to a test child, and validate that the child program returns the expected output. PROG is the program to run in the child process. STDERR_CLOSED is true if we have already closed fd 2. */ static void test_pipe (const char *prog, bool stderr_closed) { int fd[2]; const char *argv[3]; pid_t pid; char buffer[2] = { 'a', 't' }; /* Set up child. */ argv[0] = prog; argv[1] = (stderr_closed ? "1" : "0"); argv[2] = NULL; pid = create_pipe_bidi (prog, prog, argv, NULL, false, true, true, fd); ASSERT (0 <= pid); ASSERT (STDERR_FILENO < fd[0]); ASSERT (STDERR_FILENO < fd[1]); /* Push child's input. */ ASSERT (write (fd[1], buffer, 1) == 1); ASSERT (close (fd[1]) == 0); /* Get child's output. */ ASSERT (read (fd[0], buffer, 2) == 1); /* Wait for child. */ ASSERT (wait_subprocess (pid, prog, true, false, true, true, NULL) == 0); ASSERT (close (fd[0]) == 0); /* Check the result. */ ASSERT (buffer[0] == 'b'); ASSERT (buffer[1] == 't'); } int main (int argc, char *argv[]) { int test; int fd; if (argc != 3) { fprintf (stderr, "%s: need 2 arguments\n", argv[0]); return 2; } /* We might close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; /* Selectively close various standard fds, to verify the child process is not impacted by this. */ test = atoi (argv[2]); switch (test) { case 0: break; case 1: close (0); break; case 2: close (1); break; case 3: close (0); close (1); break; case 4: close (2); break; case 5: close (0); close (2); break; case 6: close (1); close (2); break; case 7: close (0); close (1); close (2); break; default: ASSERT (false); } /* Plug any file descriptor leaks inherited from outside world before starting, so that child has a clean slate (at least for the fds that we might be manipulating). */ for (fd = 3; fd < 7; fd++) close (fd); test_pipe (argv[1], test >= 4); return 0; } �������������������������������������������������gnulib-20210822~d383792/tests/test-spawn-pipe-script.c����������������������������������������������0000664�0000000�0000000�00000006264�14110572173�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of create_pipe_in/wait_subprocess. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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 "spawn-pipe.h" #include "wait-process.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include "macros.h" int main () { /* Check an invocation of an executable script. This should only be supported if the script has a '#!' marker; otherwise it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>. POSIX says that the execlp() and execvp() functions support executing shell scripts <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>, but this is considered an antiquated feature. */ int fd[1]; pid_t pid; { size_t i; for (i = 0; i < 2; i++) { const char *progname = (i == 0 ? "executable-script" : "executable-script.sh"); const char *prog_path = (i == 0 ? SRCDIR "executable-script" : SRCDIR "executable-script.sh"); const char *prog_argv[2] = { prog_path, NULL }; pid = create_pipe_in (progname, prog_argv[0], prog_argv, NULL, NULL, false, true, false, fd); if (pid >= 0) { /* Wait for child. */ ASSERT (wait_subprocess (pid, progname, true, true, true, false, NULL) == 127); } else { ASSERT (pid == -1); ASSERT (errno == ENOEXEC); } } } #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, scripts - even with '#!' marker - are not executable. Only .bat and .cmd files are. */ fprintf (stderr, "Skipping test: scripts are not executable on this platform.\n"); return 77; #else { const char *progname = "executable-shell-script"; const char *prog_path = SRCDIR "executable-shell-script"; const char *prog_argv[2] = { prog_path, NULL }; pid = create_pipe_in (progname, prog_argv[0], prog_argv, NULL, NULL, false, true, false, fd); ASSERT (pid >= 0); ASSERT (fd[0] > STDERR_FILENO); /* Get child's output. */ char buffer[1024]; FILE *fp = fdopen (fd[0], "r"); ASSERT (fp != NULL); ASSERT (fread (buffer, 1, sizeof (buffer), fp) == 11); /* Check the result. */ ASSERT (memcmp (buffer, "Halle Potta", 11) == 0); /* Wait for child. */ ASSERT (wait_subprocess (pid, progname, true, false, true, true, NULL) == 0); ASSERT (fclose (fp) == 0); } return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-spawn-pipe.sh����������������������������������������������������0000775�0000000�0000000�00000000322�14110572173�0021035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh st=0 for i in 0 1 2 3 4 5 6 7 ; do ${CHECKER} ./test-spawn-pipe-main${EXEEXT} ./test-spawn-pipe-child${EXEEXT} $i \ || { echo test-spawn-pipe.sh: iteration $i failed >&2; st=1; } done exit $st ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-spawn.c����������������������������������������������������������0000664�0000000�0000000�00000003144�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <spawn.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <spawn.h> /* Check for existence of required types. */ struct check { posix_spawnattr_t a; posix_spawn_file_actions_t b; mode_t c; pid_t d; sigset_t e; } s; /* struct sched_param is allowed to be an incomplete type without <sched.h>, but must have a forward declaration to avoid a compilation error in the following usage. */ extern void f (struct sched_param *g); #include <sched.h> extern void f (struct sched_param *g); int main (void) { switch (POSIX_SPAWN_RESETIDS) { case POSIX_SPAWN_RESETIDS: case POSIX_SPAWN_SETPGROUP: case POSIX_SPAWN_SETSIGDEF: case POSIX_SPAWN_SETSIGMASK: case (POSIX_SPAWN_SETSCHEDPARAM != 0 ? POSIX_SPAWN_SETSCHEDPARAM : -1): case (POSIX_SPAWN_SETSCHEDULER != 0 ? POSIX_SPAWN_SETSCHEDULER : -2): ; } return s.c + s.d; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002221�14110572173�0021404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible sprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (sprintf, int, (char *, char const *, ...)); #include <float.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-sprintf-posix.h" int main (int argc, char *argv[]) { test_function (sprintf); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sprintf-posix.h��������������������������������������������������0000664�0000000�0000000�00000304753�14110572173�0021430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "minus-zero.h" #include "infinity.h" #include "nan.h" /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = minus_zerod; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } #else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } #endif static int strmatch (const char *pattern, const char *string) { if (strlen (pattern) != strlen (string)) return 0; for (; *pattern != '\0'; pattern++, string++) if (*pattern != '*' && *string != *pattern) return 0; return 1; } /* Test whether string[start_index..end_index-1] is a valid textual representation of NaN. */ static int strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static void test_function (int (*my_sprintf) (char *, const char *, ...)) { char result[5000]; char buf[8]; /* Test return value convention. */ { int retval; memcpy (buf, "DEADBEEF", 8); retval = my_sprintf (buf, "%d", 12345); ASSERT (retval == 5); ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } /* Test support of size specifiers as in C99. */ { int retval = my_sprintf (result, "%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (strcmp (result, "12345671 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (strcmp (result, "12345672 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (strcmp (result, "12345673 33") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%Lg %d", (long double) 1.5, 33, 44, 55); ASSERT (strcmp (result, "1.5 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ int retval = my_sprintf (result, "%a %d", 3.1416015625, 33, 44, 55); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_sprintf (result, "%A %d", -3.1416015625, 33, 44, 55); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%a %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%a %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%a %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%a %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%a %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding near the decimal point. */ int retval = my_sprintf (result, "%.0a %d", 1.5, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 0. */ int retval = my_sprintf (result, "%.0a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 1. */ int retval = my_sprintf (result, "%.1a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 2. */ int retval = my_sprintf (result, "%.2a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 3. */ int retval = my_sprintf (result, "%.3a %d", 1.51, 33, 44, 55); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. */ int retval = my_sprintf (result, "%.3a %d", 1.49999, 33, 44, 55); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug. */ int retval = my_sprintf (result, "%.1a %d", 1.999, 33, 44, 55); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_sprintf (result, "%10a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* Small precision. */ int retval = my_sprintf (result, "%.10a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Large precision. */ int retval = my_sprintf (result, "%.50a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% a %d", 1.75, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x1.cp+0 33") == 0 || strcmp (result, "0x3.8p-1 33") == 0 || strcmp (result, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#a %d", 1.0, 33, 44, 55); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%010a %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%010a %d", Infinityd (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050a %d", NaNd (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_sprintf (result, "%La %d", 3.1416015625L, 33, 44, 55); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_sprintf (result, "%LA %d", -3.1416015625L, 33, 44, 55); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%La %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%La %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%La %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%La %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%La %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* sprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Rounding near the decimal point. */ int retval = my_sprintf (result, "%.0La %d", 1.5L, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 0. */ int retval = my_sprintf (result, "%.0La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 1. */ int retval = my_sprintf (result, "%.1La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 2. */ int retval = my_sprintf (result, "%.2La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding with precision 3. */ int retval = my_sprintf (result, "%.3La %d", 1.51L, 33, 44, 55); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. */ int retval = my_sprintf (result, "%.3La %d", 1.49999L, 33, 44, 55); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ int retval = my_sprintf (result, "%.1La %d", 1.999L, 33, 44, 55); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_sprintf (result, "%10La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* Small precision. */ int retval = my_sprintf (result, "%.10La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* Large precision. */ int retval = my_sprintf (result, "%.50La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% La %d", 1.75L, 33, 44, 55); 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); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x1.cp+0 33") == 0 || strcmp (result, "0x3.8p-1 33") == 0 || strcmp (result, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#La %d", 1.0L, 33, 44, 55); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%010La %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%010La %d", Infinityl (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050La %d", NaNl (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %f format directive. */ { /* A positive number. */ int retval = my_sprintf (result, "%f %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%f %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "0.000000" }, { 1.234321234321234e-36, "0.000000" }, { 1.234321234321234e-35, "0.000000" }, { 1.234321234321234e-34, "0.000000" }, { 1.234321234321234e-33, "0.000000" }, { 1.234321234321234e-32, "0.000000" }, { 1.234321234321234e-31, "0.000000" }, { 1.234321234321234e-30, "0.000000" }, { 1.234321234321234e-29, "0.000000" }, { 1.234321234321234e-28, "0.000000" }, { 1.234321234321234e-27, "0.000000" }, { 1.234321234321234e-26, "0.000000" }, { 1.234321234321234e-25, "0.000000" }, { 1.234321234321234e-24, "0.000000" }, { 1.234321234321234e-23, "0.000000" }, { 1.234321234321234e-22, "0.000000" }, { 1.234321234321234e-21, "0.000000" }, { 1.234321234321234e-20, "0.000000" }, { 1.234321234321234e-19, "0.000000" }, { 1.234321234321234e-18, "0.000000" }, { 1.234321234321234e-17, "0.000000" }, { 1.234321234321234e-16, "0.000000" }, { 1.234321234321234e-15, "0.000000" }, { 1.234321234321234e-14, "0.000000" }, { 1.234321234321234e-13, "0.000000" }, { 1.234321234321234e-12, "0.000000" }, { 1.234321234321234e-11, "0.000000" }, { 1.234321234321234e-10, "0.000000" }, { 1.234321234321234e-9, "0.000000" }, { 1.234321234321234e-8, "0.000000" }, { 1.234321234321234e-7, "0.000000" }, { 1.234321234321234e-6, "0.000001" }, { 1.234321234321234e-5, "0.000012" }, { 1.234321234321234e-4, "0.000123" }, { 1.234321234321234e-3, "0.001234" }, { 1.234321234321234e-2, "0.012343" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.234321" }, { 1.234321234321234e1, "12.343212" }, { 1.234321234321234e2, "123.432123" }, { 1.234321234321234e3, "1234.321234" }, { 1.234321234321234e4, "12343.212343" }, { 1.234321234321234e5, "123432.123432" }, { 1.234321234321234e6, "1234321.234321" }, { 1.234321234321234e7, "12343212.343212" }, { 1.234321234321234e8, "123432123.432123" }, { 1.234321234321234e9, "1234321234.321234" }, { 1.234321234321234e10, "12343212343.2123**" }, { 1.234321234321234e11, "123432123432.123***" }, { 1.234321234321234e12, "1234321234321.23****" }, { 1.234321234321234e13, "12343212343212.3*****" }, { 1.234321234321234e14, "123432123432123.******" }, { 1.234321234321234e15, "1234321234321234.000000" }, { 1.234321234321234e16, "123432123432123**.000000" }, { 1.234321234321234e17, "123432123432123***.000000" }, { 1.234321234321234e18, "123432123432123****.000000" }, { 1.234321234321234e19, "123432123432123*****.000000" }, { 1.234321234321234e20, "123432123432123******.000000" }, { 1.234321234321234e21, "123432123432123*******.000000" }, { 1.234321234321234e22, "123432123432123********.000000" }, { 1.234321234321234e23, "123432123432123*********.000000" }, { 1.234321234321234e24, "123432123432123**********.000000" }, { 1.234321234321234e25, "123432123432123***********.000000" }, { 1.234321234321234e26, "123432123432123************.000000" }, { 1.234321234321234e27, "123432123432123*************.000000" }, { 1.234321234321234e28, "123432123432123**************.000000" }, { 1.234321234321234e29, "123432123432123***************.000000" }, { 1.234321234321234e30, "123432123432123****************.000000" }, { 1.234321234321234e31, "123432123432123*****************.000000" }, { 1.234321234321234e32, "123432123432123******************.000000" }, { 1.234321234321234e33, "123432123432123*******************.000000" }, { 1.234321234321234e34, "123432123432123********************.000000" }, { 1.234321234321234e35, "123432123432123*********************.000000" }, { 1.234321234321234e36, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%f", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%f %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%f %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%f %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%f %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%f %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_sprintf (result, "%10f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.f %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%015f %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015f %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.f %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.2f %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.2f %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_sprintf (result, "%Lf %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%Lf %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "0.000000" }, { 1.234321234321234e-36L, "0.000000" }, { 1.234321234321234e-35L, "0.000000" }, { 1.234321234321234e-34L, "0.000000" }, { 1.234321234321234e-33L, "0.000000" }, { 1.234321234321234e-32L, "0.000000" }, { 1.234321234321234e-31L, "0.000000" }, { 1.234321234321234e-30L, "0.000000" }, { 1.234321234321234e-29L, "0.000000" }, { 1.234321234321234e-28L, "0.000000" }, { 1.234321234321234e-27L, "0.000000" }, { 1.234321234321234e-26L, "0.000000" }, { 1.234321234321234e-25L, "0.000000" }, { 1.234321234321234e-24L, "0.000000" }, { 1.234321234321234e-23L, "0.000000" }, { 1.234321234321234e-22L, "0.000000" }, { 1.234321234321234e-21L, "0.000000" }, { 1.234321234321234e-20L, "0.000000" }, { 1.234321234321234e-19L, "0.000000" }, { 1.234321234321234e-18L, "0.000000" }, { 1.234321234321234e-17L, "0.000000" }, { 1.234321234321234e-16L, "0.000000" }, { 1.234321234321234e-15L, "0.000000" }, { 1.234321234321234e-14L, "0.000000" }, { 1.234321234321234e-13L, "0.000000" }, { 1.234321234321234e-12L, "0.000000" }, { 1.234321234321234e-11L, "0.000000" }, { 1.234321234321234e-10L, "0.000000" }, { 1.234321234321234e-9L, "0.000000" }, { 1.234321234321234e-8L, "0.000000" }, { 1.234321234321234e-7L, "0.000000" }, { 1.234321234321234e-6L, "0.000001" }, { 1.234321234321234e-5L, "0.000012" }, { 1.234321234321234e-4L, "0.000123" }, { 1.234321234321234e-3L, "0.001234" }, { 1.234321234321234e-2L, "0.012343" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.234321" }, { 1.234321234321234e1L, "12.343212" }, { 1.234321234321234e2L, "123.432123" }, { 1.234321234321234e3L, "1234.321234" }, { 1.234321234321234e4L, "12343.212343" }, { 1.234321234321234e5L, "123432.123432" }, { 1.234321234321234e6L, "1234321.234321" }, { 1.234321234321234e7L, "12343212.343212" }, { 1.234321234321234e8L, "123432123.432123" }, { 1.234321234321234e9L, "1234321234.321234" }, { 1.234321234321234e10L, "12343212343.2123**" }, { 1.234321234321234e11L, "123432123432.123***" }, { 1.234321234321234e12L, "1234321234321.23****" }, { 1.234321234321234e13L, "12343212343212.3*****" }, { 1.234321234321234e14L, "123432123432123.******" }, { 1.234321234321234e15L, "1234321234321234.000000" }, { 1.234321234321234e16L, "123432123432123**.000000" }, { 1.234321234321234e17L, "123432123432123***.000000" }, { 1.234321234321234e18L, "123432123432123****.000000" }, { 1.234321234321234e19L, "123432123432123*****.000000" }, { 1.234321234321234e20L, "123432123432123******.000000" }, { 1.234321234321234e21L, "123432123432123*******.000000" }, { 1.234321234321234e22L, "123432123432123********.000000" }, { 1.234321234321234e23L, "123432123432123*********.000000" }, { 1.234321234321234e24L, "123432123432123**********.000000" }, { 1.234321234321234e25L, "123432123432123***********.000000" }, { 1.234321234321234e26L, "123432123432123************.000000" }, { 1.234321234321234e27L, "123432123432123*************.000000" }, { 1.234321234321234e28L, "123432123432123**************.000000" }, { 1.234321234321234e29L, "123432123432123***************.000000" }, { 1.234321234321234e30L, "123432123432123****************.000000" }, { 1.234321234321234e31L, "123432123432123*****************.000000" }, { 1.234321234321234e32L, "123432123432123******************.000000" }, { 1.234321234321234e33L, "123432123432123*******************.000000" }, { 1.234321234321234e34L, "123432123432123********************.000000" }, { 1.234321234321234e35L, "123432123432123*********************.000000" }, { 1.234321234321234e36L, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%Lf", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%Lf %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%Lf %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%Lf %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%Lf %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%Lf %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* sprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%Lf %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_sprintf (result, "%10Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.Lf %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%015Lf %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015Lf %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.Lf %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.2Lf %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.2Lf %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %F format directive. */ { /* A positive number. */ int retval = my_sprintf (result, "%F %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%F %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_sprintf (result, "%F %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%F %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%F %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%F %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%F %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%F %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO. */ int retval = my_sprintf (result, "%015F %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015F %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.F %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.2F %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.2F %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_sprintf (result, "%LF %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%LF %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* A negative number. */ int retval = my_sprintf (result, "%LF %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%LF %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%LF %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%LF %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%LF %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%LF %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO. */ int retval = my_sprintf (result, "%015LF %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015LF %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.LF %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.2LF %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.2LF %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %e format directive. */ { /* A positive number. */ int retval = my_sprintf (result, "%e %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%e %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.234321e-37" }, { 1.234321234321234e-36, "1.234321e-36" }, { 1.234321234321234e-35, "1.234321e-35" }, { 1.234321234321234e-34, "1.234321e-34" }, { 1.234321234321234e-33, "1.234321e-33" }, { 1.234321234321234e-32, "1.234321e-32" }, { 1.234321234321234e-31, "1.234321e-31" }, { 1.234321234321234e-30, "1.234321e-30" }, { 1.234321234321234e-29, "1.234321e-29" }, { 1.234321234321234e-28, "1.234321e-28" }, { 1.234321234321234e-27, "1.234321e-27" }, { 1.234321234321234e-26, "1.234321e-26" }, { 1.234321234321234e-25, "1.234321e-25" }, { 1.234321234321234e-24, "1.234321e-24" }, { 1.234321234321234e-23, "1.234321e-23" }, { 1.234321234321234e-22, "1.234321e-22" }, { 1.234321234321234e-21, "1.234321e-21" }, { 1.234321234321234e-20, "1.234321e-20" }, { 1.234321234321234e-19, "1.234321e-19" }, { 1.234321234321234e-18, "1.234321e-18" }, { 1.234321234321234e-17, "1.234321e-17" }, { 1.234321234321234e-16, "1.234321e-16" }, { 1.234321234321234e-15, "1.234321e-15" }, { 1.234321234321234e-14, "1.234321e-14" }, { 1.234321234321234e-13, "1.234321e-13" }, { 1.234321234321234e-12, "1.234321e-12" }, { 1.234321234321234e-11, "1.234321e-11" }, { 1.234321234321234e-10, "1.234321e-10" }, { 1.234321234321234e-9, "1.234321e-09" }, { 1.234321234321234e-8, "1.234321e-08" }, { 1.234321234321234e-7, "1.234321e-07" }, { 1.234321234321234e-6, "1.234321e-06" }, { 1.234321234321234e-5, "1.234321e-05" }, { 1.234321234321234e-4, "1.234321e-04" }, { 1.234321234321234e-3, "1.234321e-03" }, { 1.234321234321234e-2, "1.234321e-02" }, { 1.234321234321234e-1, "1.234321e-01" }, { 1.234321234321234, "1.234321e+00" }, { 1.234321234321234e1, "1.234321e+01" }, { 1.234321234321234e2, "1.234321e+02" }, { 1.234321234321234e3, "1.234321e+03" }, { 1.234321234321234e4, "1.234321e+04" }, { 1.234321234321234e5, "1.234321e+05" }, { 1.234321234321234e6, "1.234321e+06" }, { 1.234321234321234e7, "1.234321e+07" }, { 1.234321234321234e8, "1.234321e+08" }, { 1.234321234321234e9, "1.234321e+09" }, { 1.234321234321234e10, "1.234321e+10" }, { 1.234321234321234e11, "1.234321e+11" }, { 1.234321234321234e12, "1.234321e+12" }, { 1.234321234321234e13, "1.234321e+13" }, { 1.234321234321234e14, "1.234321e+14" }, { 1.234321234321234e15, "1.234321e+15" }, { 1.234321234321234e16, "1.234321e+16" }, { 1.234321234321234e17, "1.234321e+17" }, { 1.234321234321234e18, "1.234321e+18" }, { 1.234321234321234e19, "1.234321e+19" }, { 1.234321234321234e20, "1.234321e+20" }, { 1.234321234321234e21, "1.234321e+21" }, { 1.234321234321234e22, "1.234321e+22" }, { 1.234321234321234e23, "1.234321e+23" }, { 1.234321234321234e24, "1.234321e+24" }, { 1.234321234321234e25, "1.234321e+25" }, { 1.234321234321234e26, "1.234321e+26" }, { 1.234321234321234e27, "1.234321e+27" }, { 1.234321234321234e28, "1.234321e+28" }, { 1.234321234321234e29, "1.234321e+29" }, { 1.234321234321234e30, "1.234321e+30" }, { 1.234321234321234e31, "1.234321e+31" }, { 1.234321234321234e32, "1.234321e+32" }, { 1.234321234321234e33, "1.234321e+33" }, { 1.234321234321234e34, "1.234321e+34" }, { 1.234321234321234e35, "1.234321e+35" }, { 1.234321234321234e36, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%e", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%e %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%e %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%e %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%e %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%e %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_sprintf (result, "%15e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-15e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.e %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.e %d", 9.75, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%015e %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015e %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.e %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.4e %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.4e %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_sprintf (result, "%Le %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%Le %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.234321e-37" }, { 1.234321234321234e-36L, "1.234321e-36" }, { 1.234321234321234e-35L, "1.234321e-35" }, { 1.234321234321234e-34L, "1.234321e-34" }, { 1.234321234321234e-33L, "1.234321e-33" }, { 1.234321234321234e-32L, "1.234321e-32" }, { 1.234321234321234e-31L, "1.234321e-31" }, { 1.234321234321234e-30L, "1.234321e-30" }, { 1.234321234321234e-29L, "1.234321e-29" }, { 1.234321234321234e-28L, "1.234321e-28" }, { 1.234321234321234e-27L, "1.234321e-27" }, { 1.234321234321234e-26L, "1.234321e-26" }, { 1.234321234321234e-25L, "1.234321e-25" }, { 1.234321234321234e-24L, "1.234321e-24" }, { 1.234321234321234e-23L, "1.234321e-23" }, { 1.234321234321234e-22L, "1.234321e-22" }, { 1.234321234321234e-21L, "1.234321e-21" }, { 1.234321234321234e-20L, "1.234321e-20" }, { 1.234321234321234e-19L, "1.234321e-19" }, { 1.234321234321234e-18L, "1.234321e-18" }, { 1.234321234321234e-17L, "1.234321e-17" }, { 1.234321234321234e-16L, "1.234321e-16" }, { 1.234321234321234e-15L, "1.234321e-15" }, { 1.234321234321234e-14L, "1.234321e-14" }, { 1.234321234321234e-13L, "1.234321e-13" }, { 1.234321234321234e-12L, "1.234321e-12" }, { 1.234321234321234e-11L, "1.234321e-11" }, { 1.234321234321234e-10L, "1.234321e-10" }, { 1.234321234321234e-9L, "1.234321e-09" }, { 1.234321234321234e-8L, "1.234321e-08" }, { 1.234321234321234e-7L, "1.234321e-07" }, { 1.234321234321234e-6L, "1.234321e-06" }, { 1.234321234321234e-5L, "1.234321e-05" }, { 1.234321234321234e-4L, "1.234321e-04" }, { 1.234321234321234e-3L, "1.234321e-03" }, { 1.234321234321234e-2L, "1.234321e-02" }, { 1.234321234321234e-1L, "1.234321e-01" }, { 1.234321234321234L, "1.234321e+00" }, { 1.234321234321234e1L, "1.234321e+01" }, { 1.234321234321234e2L, "1.234321e+02" }, { 1.234321234321234e3L, "1.234321e+03" }, { 1.234321234321234e4L, "1.234321e+04" }, { 1.234321234321234e5L, "1.234321e+05" }, { 1.234321234321234e6L, "1.234321e+06" }, { 1.234321234321234e7L, "1.234321e+07" }, { 1.234321234321234e8L, "1.234321e+08" }, { 1.234321234321234e9L, "1.234321e+09" }, { 1.234321234321234e10L, "1.234321e+10" }, { 1.234321234321234e11L, "1.234321e+11" }, { 1.234321234321234e12L, "1.234321e+12" }, { 1.234321234321234e13L, "1.234321e+13" }, { 1.234321234321234e14L, "1.234321e+14" }, { 1.234321234321234e15L, "1.234321e+15" }, { 1.234321234321234e16L, "1.234321e+16" }, { 1.234321234321234e17L, "1.234321e+17" }, { 1.234321234321234e18L, "1.234321e+18" }, { 1.234321234321234e19L, "1.234321e+19" }, { 1.234321234321234e20L, "1.234321e+20" }, { 1.234321234321234e21L, "1.234321e+21" }, { 1.234321234321234e22L, "1.234321e+22" }, { 1.234321234321234e23L, "1.234321e+23" }, { 1.234321234321234e24L, "1.234321e+24" }, { 1.234321234321234e25L, "1.234321e+25" }, { 1.234321234321234e26L, "1.234321e+26" }, { 1.234321234321234e27L, "1.234321e+27" }, { 1.234321234321234e28L, "1.234321e+28" }, { 1.234321234321234e29L, "1.234321e+29" }, { 1.234321234321234e30L, "1.234321e+30" }, { 1.234321234321234e31L, "1.234321e+31" }, { 1.234321234321234e32L, "1.234321e+32" }, { 1.234321234321234e33L, "1.234321e+33" }, { 1.234321234321234e34L, "1.234321e+34" }, { 1.234321234321234e35L, "1.234321e+35" }, { 1.234321234321234e36L, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%Le", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%Le %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%Le %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%Le %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%Le %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%Le %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* sprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%Le %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_sprintf (result, "%15Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-15Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.Le %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.Le %d", 9.75L, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%015Le %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015Le %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.Le %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.4Le %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.4Le %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %g format directive. */ { /* A positive number. */ int retval = my_sprintf (result, "%g %d", 12.75, 33, 44, 55); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%g %d", 1234567.0, 33, 44, 55); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.23432e-37" }, { 1.234321234321234e-36, "1.23432e-36" }, { 1.234321234321234e-35, "1.23432e-35" }, { 1.234321234321234e-34, "1.23432e-34" }, { 1.234321234321234e-33, "1.23432e-33" }, { 1.234321234321234e-32, "1.23432e-32" }, { 1.234321234321234e-31, "1.23432e-31" }, { 1.234321234321234e-30, "1.23432e-30" }, { 1.234321234321234e-29, "1.23432e-29" }, { 1.234321234321234e-28, "1.23432e-28" }, { 1.234321234321234e-27, "1.23432e-27" }, { 1.234321234321234e-26, "1.23432e-26" }, { 1.234321234321234e-25, "1.23432e-25" }, { 1.234321234321234e-24, "1.23432e-24" }, { 1.234321234321234e-23, "1.23432e-23" }, { 1.234321234321234e-22, "1.23432e-22" }, { 1.234321234321234e-21, "1.23432e-21" }, { 1.234321234321234e-20, "1.23432e-20" }, { 1.234321234321234e-19, "1.23432e-19" }, { 1.234321234321234e-18, "1.23432e-18" }, { 1.234321234321234e-17, "1.23432e-17" }, { 1.234321234321234e-16, "1.23432e-16" }, { 1.234321234321234e-15, "1.23432e-15" }, { 1.234321234321234e-14, "1.23432e-14" }, { 1.234321234321234e-13, "1.23432e-13" }, { 1.234321234321234e-12, "1.23432e-12" }, { 1.234321234321234e-11, "1.23432e-11" }, { 1.234321234321234e-10, "1.23432e-10" }, { 1.234321234321234e-9, "1.23432e-09" }, { 1.234321234321234e-8, "1.23432e-08" }, { 1.234321234321234e-7, "1.23432e-07" }, { 1.234321234321234e-6, "1.23432e-06" }, { 1.234321234321234e-5, "1.23432e-05" }, { 1.234321234321234e-4, "0.000123432" }, { 1.234321234321234e-3, "0.00123432" }, { 1.234321234321234e-2, "0.0123432" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.23432" }, { 1.234321234321234e1, "12.3432" }, { 1.234321234321234e2, "123.432" }, { 1.234321234321234e3, "1234.32" }, { 1.234321234321234e4, "12343.2" }, { 1.234321234321234e5, "123432" }, { 1.234321234321234e6, "1.23432e+06" }, { 1.234321234321234e7, "1.23432e+07" }, { 1.234321234321234e8, "1.23432e+08" }, { 1.234321234321234e9, "1.23432e+09" }, { 1.234321234321234e10, "1.23432e+10" }, { 1.234321234321234e11, "1.23432e+11" }, { 1.234321234321234e12, "1.23432e+12" }, { 1.234321234321234e13, "1.23432e+13" }, { 1.234321234321234e14, "1.23432e+14" }, { 1.234321234321234e15, "1.23432e+15" }, { 1.234321234321234e16, "1.23432e+16" }, { 1.234321234321234e17, "1.23432e+17" }, { 1.234321234321234e18, "1.23432e+18" }, { 1.234321234321234e19, "1.23432e+19" }, { 1.234321234321234e20, "1.23432e+20" }, { 1.234321234321234e21, "1.23432e+21" }, { 1.234321234321234e22, "1.23432e+22" }, { 1.234321234321234e23, "1.23432e+23" }, { 1.234321234321234e24, "1.23432e+24" }, { 1.234321234321234e25, "1.23432e+25" }, { 1.234321234321234e26, "1.23432e+26" }, { 1.234321234321234e27, "1.23432e+27" }, { 1.234321234321234e28, "1.23432e+28" }, { 1.234321234321234e29, "1.23432e+29" }, { 1.234321234321234e30, "1.23432e+30" }, { 1.234321234321234e31, "1.23432e+31" }, { 1.234321234321234e32, "1.23432e+32" }, { 1.234321234321234e33, "1.23432e+33" }, { 1.234321234321234e34, "1.23432e+34" }, { 1.234321234321234e35, "1.23432e+35" }, { 1.234321234321234e36, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%g", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%g %d", -0.03125, 33, 44, 55); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%g %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%g %d", minus_zerod, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%g %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%g %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Width. */ int retval = my_sprintf (result, "%10g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.g %d", 9.75, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%010g %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015g %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.g %d", 1234.0, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.5g %d", 999.951, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.5g %d", 999.996, 33, 44, 55); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); } { /* A positive number. */ int retval = my_sprintf (result, "%Lg %d", 12.75L, 33, 44, 55); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); } { /* A larger positive number. */ int retval = my_sprintf (result, "%Lg %d", 1234567.0L, 33, 44, 55); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.23432e-37" }, { 1.234321234321234e-36L, "1.23432e-36" }, { 1.234321234321234e-35L, "1.23432e-35" }, { 1.234321234321234e-34L, "1.23432e-34" }, { 1.234321234321234e-33L, "1.23432e-33" }, { 1.234321234321234e-32L, "1.23432e-32" }, { 1.234321234321234e-31L, "1.23432e-31" }, { 1.234321234321234e-30L, "1.23432e-30" }, { 1.234321234321234e-29L, "1.23432e-29" }, { 1.234321234321234e-28L, "1.23432e-28" }, { 1.234321234321234e-27L, "1.23432e-27" }, { 1.234321234321234e-26L, "1.23432e-26" }, { 1.234321234321234e-25L, "1.23432e-25" }, { 1.234321234321234e-24L, "1.23432e-24" }, { 1.234321234321234e-23L, "1.23432e-23" }, { 1.234321234321234e-22L, "1.23432e-22" }, { 1.234321234321234e-21L, "1.23432e-21" }, { 1.234321234321234e-20L, "1.23432e-20" }, { 1.234321234321234e-19L, "1.23432e-19" }, { 1.234321234321234e-18L, "1.23432e-18" }, { 1.234321234321234e-17L, "1.23432e-17" }, { 1.234321234321234e-16L, "1.23432e-16" }, { 1.234321234321234e-15L, "1.23432e-15" }, { 1.234321234321234e-14L, "1.23432e-14" }, { 1.234321234321234e-13L, "1.23432e-13" }, { 1.234321234321234e-12L, "1.23432e-12" }, { 1.234321234321234e-11L, "1.23432e-11" }, { 1.234321234321234e-10L, "1.23432e-10" }, { 1.234321234321234e-9L, "1.23432e-09" }, { 1.234321234321234e-8L, "1.23432e-08" }, { 1.234321234321234e-7L, "1.23432e-07" }, { 1.234321234321234e-6L, "1.23432e-06" }, { 1.234321234321234e-5L, "1.23432e-05" }, { 1.234321234321234e-4L, "0.000123432" }, { 1.234321234321234e-3L, "0.00123432" }, { 1.234321234321234e-2L, "0.0123432" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.23432" }, { 1.234321234321234e1L, "12.3432" }, { 1.234321234321234e2L, "123.432" }, { 1.234321234321234e3L, "1234.32" }, { 1.234321234321234e4L, "12343.2" }, { 1.234321234321234e5L, "123432" }, { 1.234321234321234e6L, "1.23432e+06" }, { 1.234321234321234e7L, "1.23432e+07" }, { 1.234321234321234e8L, "1.23432e+08" }, { 1.234321234321234e9L, "1.23432e+09" }, { 1.234321234321234e10L, "1.23432e+10" }, { 1.234321234321234e11L, "1.23432e+11" }, { 1.234321234321234e12L, "1.23432e+12" }, { 1.234321234321234e13L, "1.23432e+13" }, { 1.234321234321234e14L, "1.23432e+14" }, { 1.234321234321234e15L, "1.23432e+15" }, { 1.234321234321234e16L, "1.23432e+16" }, { 1.234321234321234e17L, "1.23432e+17" }, { 1.234321234321234e18L, "1.23432e+18" }, { 1.234321234321234e19L, "1.23432e+19" }, { 1.234321234321234e20L, "1.23432e+20" }, { 1.234321234321234e21L, "1.23432e+21" }, { 1.234321234321234e22L, "1.23432e+22" }, { 1.234321234321234e23L, "1.23432e+23" }, { 1.234321234321234e24L, "1.23432e+24" }, { 1.234321234321234e25L, "1.23432e+25" }, { 1.234321234321234e26L, "1.23432e+26" }, { 1.234321234321234e27L, "1.23432e+27" }, { 1.234321234321234e28L, "1.23432e+28" }, { 1.234321234321234e29L, "1.23432e+29" }, { 1.234321234321234e30L, "1.23432e+30" }, { 1.234321234321234e31L, "1.23432e+31" }, { 1.234321234321234e32L, "1.23432e+32" }, { 1.234321234321234e33L, "1.23432e+33" }, { 1.234321234321234e34L, "1.23432e+34" }, { 1.234321234321234e35L, "1.23432e+35" }, { 1.234321234321234e36L, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { int retval = my_sprintf (result, "%Lg", data[k].value); const char *expected = data[k].string; ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ int retval = my_sprintf (result, "%Lg %d", -0.03125L, 33, 44, 55); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive zero. */ int retval = my_sprintf (result, "%Lg %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ int retval = my_sprintf (result, "%Lg %d", minus_zerol, 33, 44, 55); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); } { /* Positive infinity. */ int retval = my_sprintf (result, "%Lg %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ int retval = my_sprintf (result, "%Lg %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ int retval = my_sprintf (result, "%Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%La %d", x.value, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } /* sprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; int retval = my_sprintf (result, "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; int retval = my_sprintf (result, "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; int retval = my_sprintf (result, "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; int retval = my_sprintf (result, "%Lg %d", x.value, 33, 44, 55); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); } #endif { /* Width. */ int retval = my_sprintf (result, "%10Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_LEFT. */ int retval = my_sprintf (result, "%-10Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SHOWSIGN. */ int retval = my_sprintf (result, "%+Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_SPACE. */ int retval = my_sprintf (result, "% Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ int retval = my_sprintf (result, "%#.Lg %d", 9.75L, 33, 44, 55); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with finite number. */ int retval = my_sprintf (result, "%010Lg %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with infinite number. */ int retval = my_sprintf (result, "%015Lg %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ int retval = my_sprintf (result, "%050Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision. */ int retval = my_sprintf (result, "%.Lg %d", 1234.0L, 33, 44, 55); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with no rounding. */ int retval = my_sprintf (result, "%.5Lg %d", 999.951L, 33, 44, 55); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); } { /* Precision with rounding. */ int retval = my_sprintf (result, "%.5Lg %d", 999.996L, 33, 44, 55); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %n format directive. */ { int count = -1; int retval = my_sprintf (result, "%d %n", 123, &count, 33, 44, 55); ASSERT (strcmp (result, "123 ") == 0); ASSERT (retval == strlen (result)); ASSERT (count == 4); } /* Test the support of the POSIX/XSI format strings with positions. */ { int retval = my_sprintf (result, "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the grouping flag. */ { int retval = my_sprintf (result, "%'d %d", 1234567, 99); ASSERT (result[strlen (result) - 1] == '9'); ASSERT (retval == strlen (result)); } /* Test the support of the left-adjust flag. */ { int retval = my_sprintf (result, "a%*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "a%-*sc", 3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "a%-*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } /* Test the support of large precision. */ { int retval = my_sprintf (result, "%.4000d %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.*d %d", 4000, 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.4000d %d", -1234567, 99); size_t i; ASSERT (result[0] == '-'); for (i = 0; i < 4000 - 7; i++) ASSERT (result[1 + i] == '0'); ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.4000u %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.4000o %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.4000x %d", 1234567, 99); size_t i; for (i = 0; i < 4000 - 6; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%#.4000x %d", 1234567, 99); size_t i; ASSERT (result[0] == '0'); ASSERT (result[1] == 'x'); for (i = 0; i < 4000 - 6; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.4000f %d", 1.0, 99); size_t i; ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 4000; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000, " 99") == 0); ASSERT (retval == strlen (result)); } { int retval = my_sprintf (result, "%.511f %d", 1.0, 99); size_t i; ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 511; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 511, " 99") == 0); ASSERT (retval == strlen (result)); } { char input[5000]; int retval; size_t i; for (i = 0; i < sizeof (input) - 1; i++) input[i] = 'a' + ((1000000 / (i + 1)) % 26); input[i] = '\0'; retval = my_sprintf (result, "%.4000s %d", input, 99); ASSERT (memcmp (result, input, 4000) == 0); ASSERT (strcmp (result + 4000, " 99") == 0); ASSERT (retval == strlen (result)); } /* Test the support of the %s format directive. */ /* To verify that these tests succeed, it is necessary to run them under a tool that checks against invalid memory accesses, such as ElectricFence or "valgrind --tool=memcheck". */ { size_t i; for (i = 1; i <= 8; i++) { char *block; int retval; block = (char *) malloc (i); memcpy (block, "abcdefgh", i); retval = my_sprintf (result, "%.*s", (int) i, block); ASSERT (memcmp (result, block, i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (block); } } #if HAVE_WCHAR_T { size_t i; for (i = 1; i <= 8; i++) { wchar_t *block; size_t j; int retval; block = (wchar_t *) malloc (i * sizeof (wchar_t)); for (j = 0; j < i; j++) block[j] = "abcdefgh"[j]; retval = my_sprintf (result, "%.*ls", (int) i, block); ASSERT (memcmp (result, "abcdefgh", i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (block); } } #endif } ���������������������gnulib-20210822~d383792/tests/test-sqrt-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002212�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrt() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE double #define ISNAN isnand #define INFINITY Infinityd () #define NAN NaNd () #define L_(literal) literal #define MINUS_ZERO minus_zerod #define SQRT sqrt #include "test-sqrt-ieee.h" int main () { test_function (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrt-ieee.h������������������������������������������������������0000664�0000000�0000000�00000002370�14110572173�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrt*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { /* [MX] shaded specification in POSIX. */ /* Negative values. */ ASSERT (ISNAN (SQRT (- L_(0.3)))); /* NaN. */ ASSERT (ISNAN (SQRT (NAN))); /* Signed zero. */ { DOUBLE y = SQRT (L_(0.0)); ASSERT (y == L_(0.0)); ASSERT (!signbit (y)); } { DOUBLE y = SQRT (MINUS_ZERO); ASSERT (y == L_(0.0)); ASSERT (!!signbit (y) == !!signbit (MINUS_ZERO)); } /* Infinity. */ ASSERT (SQRT (INFINITY) == INFINITY); ASSERT (ISNAN (SQRT (- INFINITY))); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrt.c�����������������������������������������������������������0000664�0000000�0000000�00000002331�14110572173�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrt() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sqrt, double, (double)); #include <float.h> #include "macros.h" #define DOUBLE double #define L_(literal) literal #define MANT_DIG DBL_MANT_DIG #define SQRT sqrt #define RANDOM randomd #include "test-sqrt.h" int main () { /* A particular value. */ x = 0.6; y = sqrt (x); ASSERT (y >= 0.7745966692 && y <= 0.7745966693); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrt.h�����������������������������������������������������������0000664�0000000�0000000�00000004073�14110572173�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrt*() function family. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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/>. */ static void test_function (void) { int i; int j; const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); /* Randomized tests. */ for (i = 0; i < SIZEOF (RANDOM); i++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = SQRT (x); DOUBLE err = y * y - x; ASSERT (y >= L_(0.0)); ASSERT (err > - L_(16.0) / TWO_MANT_DIG && err < L_(16.0) / TWO_MANT_DIG); } for (i = 0; i < SIZEOF (RANDOM) / 4; i++) for (j = 0; j < SIZEOF (RANDOM) / 4; j++) { DOUBLE x = L_(16.0) * RANDOM[i]; /* 0.0 <= x <= 16.0 */ DOUBLE y = L_(16.0) * RANDOM[j]; /* 0.0 <= y <= 16.0 */ if (x > L_(0.0) && y > L_(0.0)) { DOUBLE z = L_(1.0) / (x * y); /* Approximately x * y * z = 1. */ DOUBLE p = SQRT (x) * SQRT (y) * SQRT (z); ASSERT (p > L_(1.0) - L_(4.0) / TWO_MANT_DIG && p < L_(1.0) + L_(4.0) / TWO_MANT_DIG); } } } volatile DOUBLE x; DOUBLE y; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrtf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002216�14110572173�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtf() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE float #define ISNAN isnanf #define INFINITY Infinityf () #define NAN NaNf () #define L_(literal) literal##f #define MINUS_ZERO minus_zerof #define SQRT sqrtf #include "test-sqrt-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrtf.c����������������������������������������������������������0000664�0000000�0000000�00000002337�14110572173�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sqrtf, float, (float)); #include <float.h> #include "macros.h" #define DOUBLE float #define L_(literal) literal##f #define MANT_DIG FLT_MANT_DIG #define SQRT sqrtf #define RANDOM randomf #include "test-sqrt.h" int main () { /* A particular value. */ x = 0.6f; y = sqrtf (x); ASSERT (y >= 0.7745966f && y <= 0.7745967f); test_function (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrtl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002224�14110572173�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtl() function. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" #undef INFINITY #undef NAN #define DOUBLE long double #define ISNAN isnanl #define INFINITY Infinityl () #define NAN NaNl () #define L_(literal) literal##L #define MINUS_ZERO minus_zerol #define SQRT sqrtl #include "test-sqrt-ieee.h" int main () { test_function (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sqrtl.c����������������������������������������������������������0000664�0000000�0000000�00000003346�14110572173�0017735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (sqrtl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "macros.h" #define DOUBLE long double #define L_(literal) literal##L #define MANT_DIG DBL_MANT_DIG #define SQRT sqrtl #define RANDOM randoml #include "test-sqrt.h" static long double my_ldexpl (long double x, int d) { for (; d > 0; d--) x *= 2.0L; for (; d < 0; d++) x *= 0.5L; return x; } int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = sqrtl (x); ASSERT (y >= 0.7745966692L && y <= 0.7745966693L); /* Another particular value. */ { long double z; long double err; x = 8.1974099812331540680810141969554806865L; y = sqrtl (x); z = y * y - x; err = my_ldexpl (z, LDBL_MANT_DIG); if (err < 0) err = - err; ASSERT (err <= 100.0L); } test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ssfmalloc.c������������������������������������������������������0000664�0000000�0000000�00000017456�14110572173�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of simple and straight-forward malloc implementation. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #include <config.h> #include <stdint.h> #include <stdlib.h> #if defined _WIN32 && !defined __CYGWIN__ /* Declare VirtualAlloc(), GetSystemInfo. */ # define WIN32_LEAN_AND_MEAN # define WIN32_EXTRA_LEAN # include <windows.h> #else /* Declare getpagesize(). */ # include <unistd.h> /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # ifdef __hpux extern # ifdef __cplusplus "C" # endif int getpagesize (void); # endif /* Declare mmap(). */ # include <sys/types.h> # include <sys/mman.h> /* Some old mmap() implementations require the flag MAP_VARIABLE whenever you pass an addr == NULL. */ # ifndef MAP_VARIABLE # define MAP_VARIABLE 0 # endif #endif /* ================= Back end of the malloc implementation ================= */ /* The memory page size. Once it is initialized, a power of 2. Typically 4096 or 8192. */ static uintptr_t pagesize; /* Initializes pagesize. */ static void init_pagesize (void) { #if defined _WIN32 && !defined __CYGWIN__ /* GetSystemInfo <https://msdn.microsoft.com/en-us/library/ms724381.aspx> <https://msdn.microsoft.com/en-us/library/ms724958.aspx> */ SYSTEM_INFO info; GetSystemInfo (&info); pagesize = info.dwPageSize; #else pagesize = getpagesize (); #endif } /* Allocates a contiguous set of pages of memory. size > 0, must be a multiple of pagesize. Returns a multiple of PAGESIZE, or 0 upon failure. */ static uintptr_t alloc_pages (size_t size) { #if defined _WIN32 && !defined __CYGWIN__ /* VirtualAlloc <https://msdn.microsoft.com/en-us/library/aa366887.aspx> <https://msdn.microsoft.com/en-us/library/aa366786.aspx> */ void *mem = VirtualAlloc (NULL, size, MEM_COMMIT, PAGE_READWRITE); if (mem == NULL) return 0; return (uintptr_t) mem; #else /* Use mmap with the MAP_ANONYMOUS or MAP_ANON flag. */ void *mem = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_VARIABLE, -1, 0); if (mem == (void *)(-1)) return 0; return (uintptr_t) mem; #endif } /* Frees a contiguous set of pages of memory, returned by alloc_pages. size > 0, must be a multiple of pagesize. */ static void free_pages (uintptr_t pages, size_t size) { #if defined _WIN32 && !defined __CYGWIN__ /* VirtualFree <https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualfree> */ if (!VirtualFree ((void *) pages, 0, MEM_RELEASE)) abort (); #else if ((pages & (pagesize - 1)) != 0) abort (); if (munmap ((void *) pages, size) < 0) abort (); #endif } /* Cygwin defines PAGESIZE in <limits.h>. */ #undef PAGESIZE /* ======================= Instantiate the front end ======================= */ #define PAGESIZE pagesize /* On Cygwin and Linux/PowerPC, PAGESIZE is 65536. On macOS 11, it is 16384. On all other platforms, it is either 4096 or 8192. */ #if defined __CYGWIN__ || (defined __linux__ && defined __powerpc__) # define PAGESIZE_MAX 65536 #else # define PAGESIZE_MAX 16384 #endif #define ALLOC_PAGES alloc_pages #define FREE_PAGES free_pages #define ALIGNMENT (sizeof (void *)) /* or 8 or 16 or 32 */ #define PAGE_RESERVED_HEADER_SIZE (3 * UINTPTR_WIDTH / 8) /* = 3 * sizeof (void *) */ #include "ssfmalloc.h" /* ================================= Tests ================================= */ #include <limits.h> #include <string.h> #include "macros.h" /* Fills a block of a given size with some contents. */ static void fill_block (uintptr_t block, size_t size) { unsigned char code = (size % (UCHAR_MAX - 1)) + 1; memset ((char *) block, code, size); } /* Verifies that the contents of a block is still present (i.e. has not accidentally been overwritten by other operations). */ static void verify_block (uintptr_t block, size_t size) { unsigned char code = (size % (UCHAR_MAX - 1)) + 1; char *p = (char *) block; for (; size > 0; p++, size--) if ((unsigned char) *p != code) abort (); } static size_t block_sizes[] = { /* Small blocks. */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 24, 31, 32, 37, 42, 49, 57, 63, 64, 65, 71, 77, 83, 96, 99, 110, 119, 127, 128, 130, 144, 150, 157, 161, 169, 180, 192, 199, 204, 210, 224, 225, 236, 241, 249, 255, 256, /* Medium blocks. */ 257, 281, 284, 294, 301, 308, 341, 447, 525, 659, 771, 842, 729, 999, 1000, 1020, 1023, 1024, 1025, 1280, 1414, 2047, 2048, 2049, 2096, 2401, 2613, 2843, 3010, 3213, 3512, 3678, 3801, 3900, /* Large blocks. */ 4000, 4060, 4080, 4090, 4095, 4096, 4097, 4121, 5381, 7814, 8191, 8192, 8193, 11238, 16383, 16384, 16385, 20184, 51202, 135010 }; #define RANDOM(n) (rand () % (n)) #define RANDOM_BLOCK_SIZE() block_sizes[RANDOM (SIZEOF (block_sizes))] int main (int argc, char *argv[]) { /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); init_pagesize (); /* Randomly allocate and deallocate blocks. Also verify that there are no unexpected modifications to the contents of these blocks. */ { unsigned int repeat; char *blocks[SIZEOF (block_sizes)]; { size_t i; for (i = 0; i < SIZEOF (block_sizes); i++) blocks[i] = NULL; } for (repeat = 0; repeat < 100000; repeat++) { unsigned int operation = RANDOM (2); switch (operation) { case 0: { /* Allocate a block. */ size_t i = RANDOM (SIZEOF (block_sizes)); size_t size = block_sizes[i]; if (blocks[i] == NULL) { uintptr_t block = allocate_block (size); if (block == 0) abort (); fill_block (block, size); blocks[i] = (char *) block; } } break; case 1: { /* Free a block. */ size_t i = RANDOM (SIZEOF (block_sizes)); size_t size = block_sizes[i]; if (blocks[i] != NULL) { uintptr_t block = (uintptr_t) blocks[i]; verify_block (block, size); free_block (block); blocks[i] = NULL; } } break; } } /* Free the remaining blocks. */ { size_t i; for (i = 0; i < SIZEOF (block_sizes); i++) if (blocks[i] != NULL) { uintptr_t block = (uintptr_t) blocks[i]; size_t size = block_sizes[i]; verify_block (block, size); free_block (block); } } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stack.c����������������������������������������������������������0000664�0000000�0000000�00000004403�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of the type-safe stack data type. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>, 2020. */ #include <config.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include "assure.h" #include "xalloc.h" #include "macros.h" #define GL_STACK_ELEMENT int #define GL_STACK_STORAGECLASS static #include "stack.h" #define GL_STACK_ELEMENT const char * #define GL_STACK_STORAGECLASS static #define GL_STACK_NAME string_stack #include "stack.h" int main (void) { stack_type int_stack; stack_init (&int_stack); ASSERT (stack_size (&int_stack) == 0); ASSERT (stack_empty (&int_stack)); stack_push (&int_stack, 0); stack_push (&int_stack, 1); stack_push (&int_stack, 2); stack_push (&int_stack, 3); stack_push (&int_stack, 4); stack_push (&int_stack, 5); stack_push (&int_stack, 6); stack_push (&int_stack, 7); stack_push (&int_stack, 8); stack_push (&int_stack, 9); ASSERT (stack_size (&int_stack) == 10); ASSERT (!stack_empty (&int_stack)); ASSERT (stack_top (&int_stack) == 9); ASSERT (stack_size (&int_stack) == 10); ASSERT (stack_pop (&int_stack) == 9); ASSERT (stack_size (&int_stack) == 9); stack_discard (&int_stack); ASSERT (stack_size (&int_stack) == 8); ASSERT (stack_top (&int_stack) == 7); stack_destroy (&int_stack); string_stack_type string_stack [1]; string_stack_init (string_stack); string_stack_push (string_stack, "foo"); ASSERT (STREQ (string_stack_pop (string_stack), "foo")); ASSERT (string_stack_empty (string_stack)); string_stack_destroy (string_stack); return EXIT_SUCCESS; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stat-time.c������������������������������������������������������0000664�0000000�0000000�00000015241�14110572173�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stat-time.h>. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 James Youngman <jay@gnu.org>, 2007. */ #include <config.h> #include "stat-time.h" #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #include <time.h> #include "macros.h" #define BASE "test-stat-time.t" #include "nap.h" enum { NFILES = 4 }; static char filename_stamp1[50]; static char filename_testfile[50]; static char filename_stamp2[50]; static char filename_stamp3[50]; /* Use file names that are different at each run. This is necessary for test_birthtime() to pass on native Windows: On this platform, the file system apparently remembers the creation time of a file even after it is removed and created anew. See "Windows NT Contains File System Tunneling Capabilities" <https://support.microsoft.com/en-us/help/172190/> */ static void initialize_filenames (void) { long t = (long) time (NULL); sprintf (filename_stamp1, "t-stt-%ld-stamp1", t); sprintf (filename_testfile, "t-stt-%ld-testfile", t); sprintf (filename_stamp2, "t-stt-%ld-stamp2", t); sprintf (filename_stamp3, "t-stt-%ld-stamp3", t); } static int force_unlink (const char *filename) { /* This chmod is necessary on mingw, where unlink() of a read-only file fails with EPERM. */ chmod (filename, 0600); return unlink (filename); } static void cleanup (int sig) { /* Remove temporary files. */ force_unlink (filename_stamp1); force_unlink (filename_testfile); force_unlink (filename_stamp2); force_unlink (filename_stamp3); if (sig != 0) _exit (1); } static int open_file (const char *filename, int flags) { int fd = open (filename, flags | O_WRONLY, 0500); if (fd >= 0) { close (fd); return 1; } else { return 0; } } static void create_file (const char *filename) { ASSERT (open_file (filename, O_CREAT | O_EXCL)); } static void do_stat (const char *filename, struct stat *p) { ASSERT (stat (filename, p) == 0); } static void prepare_test (struct stat *statinfo, struct timespec *modtimes) { int i; create_file (filename_stamp1); nap (); create_file (filename_testfile); nap (); create_file (filename_stamp2); nap (); ASSERT (chmod (filename_testfile, 0400) == 0); nap (); create_file (filename_stamp3); do_stat (filename_stamp1, &statinfo[0]); do_stat (filename_testfile, &statinfo[1]); do_stat (filename_stamp2, &statinfo[2]); do_stat (filename_stamp3, &statinfo[3]); /* Now use our access functions. */ for (i = 0; i < NFILES; ++i) { modtimes[i] = get_stat_mtime (&statinfo[i]); } } static void test_mtime (const struct stat *statinfo, struct timespec *modtimes) { int i; /* Use the struct stat fields directly. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime || (statinfo[0].st_mtime == statinfo[2].st_mtime && (get_stat_mtime_ns (&statinfo[0]) < get_stat_mtime_ns (&statinfo[2])))); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime || (statinfo[2].st_mtime == statinfo[3].st_mtime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_mtime_ns (&statinfo[3])))); /* Now check the result of the access functions. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec || (modtimes[0].tv_sec == modtimes[2].tv_sec && modtimes[0].tv_nsec < modtimes[2].tv_nsec)); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (modtimes[2].tv_sec < modtimes[3].tv_sec || (modtimes[2].tv_sec == modtimes[3].tv_sec && modtimes[2].tv_nsec < modtimes[3].tv_nsec)); /* verify equivalence */ for (i = 0; i < NFILES; ++i) { struct timespec ts; ts = get_stat_mtime (&statinfo[i]); ASSERT (ts.tv_sec == statinfo[i].st_mtime); } } #if defined _WIN32 && !defined __CYGWIN__ /* Skip the ctime tests on native Windows platforms, because their st_ctime is either the same as st_mtime (plus or minus an offset) or set to the file _creation_ time, and is not influenced by rename or chmod. */ # define test_ctime(ignored) ((void) 0) #else static void test_ctime (const struct stat *statinfo) { /* On some buggy NFS clients, mtime and ctime are disproportionately skewed from one another. Skip this test in that case. */ if (statinfo[0].st_mtime != statinfo[0].st_ctime) return; /* mtime(stamp2) < ctime(testfile) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime || (statinfo[2].st_mtime == statinfo[1].st_ctime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_ctime_ns (&statinfo[1])))); } #endif static void test_birthtime (const struct stat *statinfo, const struct timespec *modtimes, struct timespec *birthtimes) { int i; /* Collect the birth times. */ for (i = 0; i < NFILES; ++i) { birthtimes[i] = get_stat_birthtime (&statinfo[i]); if (birthtimes[i].tv_nsec < 0) return; } /* mtime(stamp1) < birthtime(testfile) */ ASSERT (modtimes[0].tv_sec < birthtimes[1].tv_sec || (modtimes[0].tv_sec == birthtimes[1].tv_sec && modtimes[0].tv_nsec < birthtimes[1].tv_nsec)); /* birthtime(testfile) < mtime(stamp2) */ ASSERT (birthtimes[1].tv_sec < modtimes[2].tv_sec || (birthtimes[1].tv_sec == modtimes[2].tv_sec && birthtimes[1].tv_nsec < modtimes[2].tv_nsec)); } int main (void) { struct stat statinfo[NFILES]; struct timespec modtimes[NFILES]; struct timespec birthtimes[NFILES]; initialize_filenames (); #ifdef SIGHUP signal (SIGHUP, cleanup); #endif #ifdef SIGINT signal (SIGINT, cleanup); #endif #ifdef SIGQUIT signal (SIGQUIT, cleanup); #endif #ifdef SIGTERM signal (SIGTERM, cleanup); #endif cleanup (0); prepare_test (statinfo, modtimes); test_mtime (statinfo, modtimes); test_ctime (statinfo); test_birthtime (statinfo, modtimes, birthtimes); cleanup (0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stat.c�����������������������������������������������������������0000664�0000000�0000000�00000003134�14110572173�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> /* Caution: stat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) stat rather than rpl_stat. Most code should not use the address of stat. */ #include "signature.h" SIGNATURE_CHECK (stat, int, (char const *, struct stat *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "same-inode.h" #include "macros.h" #define BASE "test-stat.t" #include "test-stat.h" /* Wrapper around stat, which works even if stat is a function-like macro, where test_stat_func(stat) would do the wrong thing. */ static int do_stat (char const *name, struct stat *st) { return stat (name, st); } int main (void) { return test_stat_func (do_stat, true); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stat.h�����������������������������������������������������������0000664�0000000�0000000�00000006423�14110572173�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both stat(n,buf) and fstatat(AT_FDCWD,n,buf,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_stat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; char *cwd = getcwd (NULL, 0); ASSERT (cwd); ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (SAME_INODE (st1, st2)); #endif ASSERT (func (cwd, &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (SAME_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)); #endif errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior with trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); free (cwd); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-statat.c���������������������������������������������������������0000664�0000000�0000000�00000001767�14110572173�0020075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of statat and lstatat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "openat.h" #include "signature.h" SIGNATURE_CHECK (statat, int, (int, char const *, struct stat *)); SIGNATURE_CHECK (lstatat, int, (int, char const *, struct stat *)); #define BASE "test-statat.t" #define TEST_STATAT #include "test-fstatat.c" ���������gnulib-20210822~d383792/tests/test-stdalign.c�������������������������������������������������������0000664�0000000�0000000�00000007770�14110572173�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdalign.h>. Copyright 2009-2021 Free Software Foundation, Inc. This 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 Paul Eggert, inspired by Bruno Haible's test-alignof.c. */ #include <config.h> #include <stdalign.h> #include <stddef.h> #include <stdint.h> #include "verify.h" #include "macros.h" typedef long double longdouble; typedef struct { char a[1]; } struct1; typedef struct { char a[2]; } struct2; typedef struct { char a[3]; } struct3; typedef struct { char a[4]; } struct4; verify (__alignof_is_defined == 1); #ifndef alignof # error "alignof is not a macro" #endif #if __alignas_is_defined verify (__alignas_is_defined == 1); # ifndef alignas # error "alignas is not a macro" # endif /* mingw can go up only to 8. 8 is all that GNU Emacs needs, so let's limit the test to 8 for now. */ # define TEST_ALIGNMENT 8 #else # define _Alignas(alignment) # define alignas(alignment) # define TEST_ALIGNMENT 1 #endif #define CHECK_STATIC(type) \ typedef struct { char slot1; type slot2; } type##_helper; \ verify (alignof (type) == offsetof (type##_helper, slot2)); \ verify (_Alignof (type) == alignof (type)); \ const int type##_alignment = alignof (type); \ type alignas (TEST_ALIGNMENT) static_##type##_alignas; \ type _Alignas (TEST_ALIGNMENT) static_##type##_Alignas #define CHECK_ALIGNED(var) ASSERT ((uintptr_t) &(var) % TEST_ALIGNMENT == 0) CHECK_STATIC (char); CHECK_STATIC (short); CHECK_STATIC (int); CHECK_STATIC (long); #ifdef INT64_MAX CHECK_STATIC (int64_t); #endif CHECK_STATIC (float); CHECK_STATIC (double); /* CHECK_STATIC (longdouble); */ CHECK_STATIC (struct1); CHECK_STATIC (struct2); CHECK_STATIC (struct3); CHECK_STATIC (struct4); int main () { #if defined __SUNPRO_C && __SUNPRO_C < 0x5150 /* Avoid a test failure due to Sun Studio Developer Bug Report #2125432. */ fputs ("Skipping test: known Sun C compiler bug\n", stderr); return 77; #elif defined __HP_cc && __ia64 /* Avoid a test failure due to HP-UX Itanium cc bug; see: https://lists.gnu.org/r/bug-gnulib/2017-03/msg00078.html */ fputs ("Skipping test: known HP-UX Itanium cc compiler bug\n", stderr); return 77; #elif defined __clang__ && defined __ibmxl__ /* Avoid a test failure with IBM xlc 16.1. It ignores alignas (8), _Alignas (8), and __attribute__ ((__aligned__ (8))). */ fputs ("Skipping test: known AIX XL C compiler deficiency\n", stderr); return 77; #else CHECK_ALIGNED (static_char_alignas); CHECK_ALIGNED (static_char_Alignas); CHECK_ALIGNED (static_short_alignas); CHECK_ALIGNED (static_short_Alignas); CHECK_ALIGNED (static_int_alignas); CHECK_ALIGNED (static_int_Alignas); CHECK_ALIGNED (static_long_alignas); CHECK_ALIGNED (static_long_Alignas); # ifdef INT64_MAX CHECK_ALIGNED (static_int64_t_alignas); CHECK_ALIGNED (static_int64_t_Alignas); # endif CHECK_ALIGNED (static_float_alignas); CHECK_ALIGNED (static_float_Alignas); CHECK_ALIGNED (static_double_alignas); CHECK_ALIGNED (static_double_Alignas); /* CHECK_ALIGNED (static_longdouble_alignas); */ /* CHECK_ALIGNED (static_longdouble_Alignas); */ CHECK_ALIGNED (static_struct1_alignas); CHECK_ALIGNED (static_struct1_Alignas); CHECK_ALIGNED (static_struct2_alignas); CHECK_ALIGNED (static_struct2_Alignas); CHECK_ALIGNED (static_struct3_alignas); CHECK_ALIGNED (static_struct3_Alignas); CHECK_ALIGNED (static_struct4_alignas); CHECK_ALIGNED (static_struct4_Alignas); return 0; #endif } ��������gnulib-20210822~d383792/tests/test-stdarg-c++.cc����������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdarg.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stdarg.h> int main () { } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdarg-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdarg.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstdarg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdbool-c++.cc���������������������������������������������������0000664�0000000�0000000�00000001607�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdbool.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stdbool.h> int main () { } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdbool-c++2.cc��������������������������������������������������0000664�0000000�0000000�00000001537�14110572173�0021031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdbool.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if __cplusplus >= 201103 # include <cstdbool> #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdbool.c��������������������������������������������������������0000664�0000000�0000000�00000007327�14110572173�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdbool.h> substitute. Copyright (C) 2002-2007, 2009-2021 Free Software Foundation, Inc. This 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. */ /* Define ADDRESS_CHECK_OKAY if it is OK to assign an address to a 'bool' and this does not generate a warning (because we want this test to succeed even when using gcc's -Werror). */ #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) \ || (__clang_major__ >= 4) /* We can silence the warning. */ # pragma GCC diagnostic ignored "-Waddress" # define ADDRESS_CHECK_OKAY #elif defined __GNUC__ || defined __clang__ /* There may be a warning. */ #else /* Ignore warnings from other compilers. */ # define ADDRESS_CHECK_OKAY #endif #include <config.h> #include <stdbool.h> #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif /* Several tests cannot be guaranteed with gnulib's <stdbool.h>, at least, not for all compilers and compiler options. */ #if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__ struct s { _Bool s: 1; _Bool t; } s; #endif char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; #if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__ /* See above. */ char d[(bool) 0.5 == true ? 1 : -1]; # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* C99 may plausibly be interpreted as not requiring support for a cast from a variable's address to bool in a static initializer. So treat it like a GCC extension. */ # if defined __GNUC__ || defined __clang__ bool e = &s; # endif # endif char f[(_Bool) 0.0 == false ? 1 : -1]; #endif char g[true]; char h[sizeof (_Bool)]; #if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__ /* See above. */ char i[sizeof s.t]; #endif enum { j = false, k = true, l = false * true, m = true * 256 }; _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { int error = 0; #if HAVE_STDBOOL_H || 3 <= __GNUC_ || 4 <= __clang_major___ /* See above. */ # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* A cast from a variable's address to bool is valid in expressions. */ { bool e1 = &s; if (!e1) error = 1; } # endif #endif /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html This is a runtime test, since a corresponding compile-time test would rely on initializer extensions. */ { char digs[] = "0123456789"; if (&(digs + 5)[-2 + (bool) 1] != &digs[4]) error = 1; } return error; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stddef-c++.cc����������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0020546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stddef.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stddef.h> int main () { } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stddef-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0020631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stddef.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstddef> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stddef.c���������������������������������������������������������0000664�0000000�0000000�00000005425�14110572173�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stddef.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stddef.h> #include <limits.h> #include <stdalign.h> #include "verify.h" /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; max_align_t x; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that offsetof produces integer constants with correct type. */ struct d { char e; char f; }; /* Solaris 10 has a bug where offsetof is under-parenthesized, and cannot be used as an arbitrary expression. However, since it is unlikely to bite real code, we ignore that short-coming. */ /* verify (sizeof offsetof (struct d, e) == sizeof (size_t)); */ verify (sizeof (offsetof (struct d, e)) == sizeof (size_t)); verify (offsetof (struct d, f) == 1); /* offsetof promotes to an unsigned integer if and only if sizes do not fit in int. */ verify ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); /* Check max_align_t's alignment. */ verify (alignof (double) <= alignof (max_align_t)); verify (alignof (int) <= alignof (max_align_t)); verify (alignof (long double) <= alignof (max_align_t)); verify (alignof (long int) <= alignof (max_align_t)); verify (alignof (ptrdiff_t) <= alignof (max_align_t)); verify (alignof (size_t) <= alignof (max_align_t)); verify (alignof (wchar_t) <= alignof (max_align_t)); verify (alignof (struct d) <= alignof (max_align_t)); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ verify (__alignof__ (double) <= __alignof__ (max_align_t)); verify (__alignof__ (int) <= __alignof__ (max_align_t)); verify (__alignof__ (long double) <= __alignof__ (max_align_t)); verify (__alignof__ (long int) <= __alignof__ (max_align_t)); verify (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); verify (__alignof__ (size_t) <= __alignof__ (max_align_t)); verify (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); verify (__alignof__ (struct d) <= __alignof__ (max_align_t)); #endif int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdint-c++.cc����������������������������������������������������0000664�0000000�0000000�00000001605�14110572173�0020602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdint.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stdint.h> int main () { } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdint-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001535�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdint.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if __cplusplus >= 201103 # include <cstdint> #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdint.c���������������������������������������������������������0000664�0000000�0000000�00000033506�14110572173�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdint.h> substitute. Copyright (C) 2006-2021 Free Software Foundation, Inc. This 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>, 2006. */ #include <config.h> /* Whether to enable pedantic checks. */ #define DO_PEDANTIC 0 #include <stdint.h> #include "verify.h" #include "intprops.h" #if ((__GNUC__ >= 2) || (__clang_major__ >= 4)) && DO_PEDANTIC # define verify_same_types(expr1,expr2) \ extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ extern void _verify_func(__LINE__) (__typeof__ (expr2) *); # define _verify_func(line) _verify_func2(line) # define _verify_func2(line) verify_func_ ## line #else # define verify_same_types(expr1,expr2) extern void verify_func (int) #endif /* 7.18.1.1. Exact-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; verify (TYPE_MINIMUM (int8_t) == INT8_MIN); verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); verify_same_types (INT8_MIN, (int8_t) 0 + 0); verify_same_types (INT8_MAX, (int8_t) 0 + 0); int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; verify (TYPE_MINIMUM (int16_t) == INT16_MIN); verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); verify_same_types (INT16_MIN, (int16_t) 0 + 0); verify_same_types (INT16_MAX, (int16_t) 0 + 0); int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; verify (TYPE_MINIMUM (int32_t) == INT32_MIN); verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); verify_same_types (INT32_MIN, (int32_t) 0 + 0); verify_same_types (INT32_MAX, (int32_t) 0 + 0); #ifdef INT64_MAX int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; verify (TYPE_MINIMUM (int64_t) == INT64_MIN); verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); verify_same_types (INT64_MIN, (int64_t) 0 + 0); verify_same_types (INT64_MAX, (int64_t) 0 + 0); #endif uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); #ifdef UINT64_MAX uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); #endif #if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX /* ok */ #else err or; #endif #if UINT8_MAX && UINT16_MAX && UINT32_MAX /* ok */ #else err or; #endif /* 7.18.1.2. Minimum-width integer types */ /* 7.18.2.2. Limits of minimum-width integer types */ int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); #ifdef INT_LEAST64_MAX int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); #endif uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); #ifdef UINT_LEAST64_MAX uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); #endif #if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX /* ok */ #else err or; #endif #if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.3. Fastest minimum-width integer types */ /* 7.18.2.3. Limits of fastest minimum-width integer types */ int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); #ifdef INT_FAST64_MAX int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); #endif uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); #ifdef UINT_FAST64_MAX uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); #endif #if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX /* ok */ #else err or; #endif #if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* 7.18.2.4. Limits of integer types capable of holding object pointers */ intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; verify (sizeof (void *) <= sizeof (intptr_t)); verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); uintptr_t h[2] = { 17, UINTPTR_MAX }; verify (sizeof (void *) <= sizeof (uintptr_t)); verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); 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 */ /* 7.18.2.5. Limits of greatest-width integer types */ intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); /* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in the preprocessor. */ #if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) #if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX /* ok */ #else err or; #endif #endif /* 7.18.3. Limits of other integer types */ #include <stddef.h> verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); #if PTRDIFF_MIN && PTRDIFF_MAX /* ok */ #else err or; #endif #include <signal.h> verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); #if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX /* ok */ #else err or; #endif verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); verify_same_types (SIZE_MAX, (size_t) 0 + 0); #if SIZE_MAX /* ok */ #else err or; #endif #if HAVE_WCHAR_T verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); # if WCHAR_MIN != 17 && WCHAR_MAX /* ok */ # else err or; # endif #endif #if HAVE_WINT_T # include <wchar.h> verify (TYPE_MINIMUM (wint_t) == WINT_MIN); verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); verify_same_types (WINT_MIN, (wint_t) 0 + 0); verify_same_types (WINT_MAX, (wint_t) 0 + 0); # if WINT_MIN != 17 && WINT_MAX /* ok */ # else err or; # endif #endif /* 7.18.4. Macros for integer constants */ verify (INT8_C (17) == 17); verify_same_types (INT8_C (17), (int_least8_t)0 + 0); verify (UINT8_C (17) == 17); verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); verify (INT16_C (17) == 17); verify_same_types (INT16_C (17), (int_least16_t)0 + 0); verify (UINT16_C (17) == 17); verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); verify (INT32_C (17) == 17); verify_same_types (INT32_C (17), (int_least32_t)0 + 0); verify (UINT32_C (17) == 17); verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); #ifdef INT64_C verify (INT64_C (17) == 17); verify_same_types (INT64_C (17), (int_least64_t)0 + 0); #endif #ifdef UINT64_C verify (UINT64_C (17) == 17); verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); #endif verify (INTMAX_C (17) == 17); verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); verify (UINTMAX_C (17) == 17); verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); /* Use _GL_VERIFY (with a fixed-length diagnostic string) rather than verify, because the latter would require forming each stringified expression, and many of these would be so long as to trigger a warning/error like this: test-stdint.c:407:1: error: string length '6980' is greater than the \ length '4095' ISO C99 compilers are required to support \ [-Werror=overlength-strings] */ #define verify_width(width, min, max) \ _GL_VERIFY ((max) >> ((width) - 1 - ((min) < 0)) == 1, \ "verify_width check", -) /* Macros specified by ISO/IEC TS 18661-1:2014. */ #ifdef INT8_MAX verify_width (INT8_WIDTH, INT8_MIN, INT8_MAX); #endif #ifdef UINT8_MAX verify_width (UINT8_WIDTH, 0, UINT8_MAX); #endif #ifdef INT16_MAX verify_width (INT16_WIDTH, INT16_MIN, INT16_MAX); #endif #ifdef UINT16_MAX verify_width (UINT16_WIDTH, 0, UINT16_MAX); #endif #ifdef INT32_MAX verify_width (INT32_WIDTH, INT32_MIN, INT32_MAX); #endif #ifdef UINT32_MAX verify_width (UINT32_WIDTH, 0, UINT32_MAX); #endif #ifdef INT64_MAX verify_width (INT64_WIDTH, INT64_MIN, INT64_MAX); #endif #ifdef UINT64_MAX verify_width (UINT64_WIDTH, 0, UINT64_MAX); #endif verify_width (INT_LEAST8_WIDTH, INT_LEAST8_MIN, INT_LEAST8_MAX); verify_width (UINT_LEAST8_WIDTH, 0, UINT_LEAST8_MAX); verify_width (INT_LEAST16_WIDTH, INT_LEAST16_MIN, INT_LEAST16_MAX); verify_width (UINT_LEAST16_WIDTH, 0, UINT_LEAST16_MAX); verify_width (INT_LEAST32_WIDTH, INT_LEAST32_MIN, INT_LEAST32_MAX); verify_width (UINT_LEAST32_WIDTH, 0, UINT_LEAST32_MAX); verify_width (INT_LEAST64_WIDTH, INT_LEAST64_MIN, INT_LEAST64_MAX); verify_width (UINT_LEAST64_WIDTH, 0, UINT_LEAST64_MAX); verify_width (INT_FAST8_WIDTH, INT_FAST8_MIN, INT_FAST8_MAX); verify_width (UINT_FAST8_WIDTH, 0, UINT_FAST8_MAX); verify_width (INT_FAST16_WIDTH, INT_FAST16_MIN, INT_FAST16_MAX); verify_width (UINT_FAST16_WIDTH, 0, UINT_FAST16_MAX); 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); verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX); verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX); verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); verify_width (SIZE_WIDTH, 0, SIZE_MAX); verify_width (WCHAR_WIDTH, WCHAR_MIN, WCHAR_MAX); #ifdef WINT_MAX verify_width (WINT_WIDTH, WINT_MIN, WINT_MAX); #endif #ifdef SIG_ATOMIC_MAX verify_width (SIG_ATOMIC_WIDTH, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX); #endif int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdio-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000014610�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stdio.h> #include "signature.h" #if GNULIB_TEST_DPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::dprintf, int, (int, const char *, ...)); #endif #if GNULIB_TEST_FCLOSE SIGNATURE_CHECK (GNULIB_NAMESPACE::fclose, int, (FILE *)); #endif #if GNULIB_TEST_FDOPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::fdopen, FILE *, (int, const char *)); #endif #if GNULIB_TEST_FFLUSH SIGNATURE_CHECK (GNULIB_NAMESPACE::fflush, int, (FILE *)); #endif #if GNULIB_TEST_FGETC SIGNATURE_CHECK (GNULIB_NAMESPACE::fgetc, int, (FILE *)); #endif #if GNULIB_TEST_FGETS SIGNATURE_CHECK (GNULIB_NAMESPACE::fgets, char *, (char *, int, FILE *)); #endif #if GNULIB_TEST_FOPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::fopen, FILE *, (const char *, const char *)); #endif #if GNULIB_TEST_FPRINTF_POSIX || GNULIB_TEST_FPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::fprintf, int, (FILE *, const char *, ...)); #endif #if GNULIB_TEST_FPURGE SIGNATURE_CHECK (GNULIB_NAMESPACE::fpurge, int, (FILE *)); #endif #if GNULIB_TEST_FPUTC SIGNATURE_CHECK (GNULIB_NAMESPACE::fputc, int, (int, FILE *)); #endif #if GNULIB_TEST_FPUTS SIGNATURE_CHECK (GNULIB_NAMESPACE::fputs, int, (const char *, FILE *)); #endif #if GNULIB_TEST_FREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::fread, size_t, (void *, size_t, size_t, FILE *)); #endif #if GNULIB_TEST_FREOPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::freopen, FILE *, (const char *, const char *, FILE *)); #endif #if GNULIB_TEST_FSCANF SIGNATURE_CHECK (GNULIB_NAMESPACE::fscanf, int, (FILE *, const char *, ...)); #endif #if GNULIB_TEST_FSEEK SIGNATURE_CHECK (GNULIB_NAMESPACE::fseek, int, (FILE *, long, int)); #endif #if GNULIB_TEST_FSEEKO SIGNATURE_CHECK (GNULIB_NAMESPACE::fseeko, int, (FILE *, off_t, int)); #endif #if GNULIB_TEST_FTELL SIGNATURE_CHECK (GNULIB_NAMESPACE::ftell, long, (FILE *)); #endif #if GNULIB_TEST_FTELLO SIGNATURE_CHECK (GNULIB_NAMESPACE::ftello, off_t, (FILE *)); #endif #if GNULIB_TEST_FWRITE SIGNATURE_CHECK (GNULIB_NAMESPACE::fwrite, size_t, (const void *, size_t, size_t, FILE *)); #endif #if GNULIB_TEST_GETC SIGNATURE_CHECK (GNULIB_NAMESPACE::getc, int, (FILE *)); #endif #if GNULIB_TEST_GETCHAR SIGNATURE_CHECK (GNULIB_NAMESPACE::getchar, int, (void)); #endif #if GNULIB_TEST_GETDELIM SIGNATURE_CHECK (GNULIB_NAMESPACE::getdelim, ssize_t, (char **, size_t *, int, FILE *)); #endif #if GNULIB_TEST_GETLINE SIGNATURE_CHECK (GNULIB_NAMESPACE::getline, ssize_t, (char **, size_t *, FILE *)); #endif /* Don't bother testing gets; it should never be used. */ #if GNULIB_TEST_OBSTACK_PRINTF || GNULIB_TEST_OBSTACK_PRINTF_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::obstack_printf, int, (struct obstack *, const char *, ...)); SIGNATURE_CHECK (GNULIB_NAMESPACE::obstack_vprintf, int, (struct obstack *, const char *, va_list)); #endif #if GNULIB_TEST_PCLOSE SIGNATURE_CHECK (GNULIB_NAMESPACE::pclose, int, (FILE *)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::pclose, int, (FILE *)); #if GNULIB_TEST_PERROR SIGNATURE_CHECK (GNULIB_NAMESPACE::perror, void, (const char *)); #endif #if GNULIB_TEST_POPEN SIGNATURE_CHECK (GNULIB_NAMESPACE::popen, FILE *, (const char *, const char *)); #endif #if GNULIB_TEST_PRINTF_POSIX || GNULIB_TEST_PRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::printf, int, (const char *, ...)); #endif #if GNULIB_TEST_PUTC SIGNATURE_CHECK (GNULIB_NAMESPACE::putc, int, (int, FILE *)); #endif #if GNULIB_TEST_PUTCHAR SIGNATURE_CHECK (GNULIB_NAMESPACE::putchar, int, (int)); #endif #if GNULIB_TEST_PUTS SIGNATURE_CHECK (GNULIB_NAMESPACE::puts, int, (const char *)); #endif #if GNULIB_TEST_REMOVE SIGNATURE_CHECK (GNULIB_NAMESPACE::remove, int, (const char *)); #endif #if GNULIB_TEST_RENAME SIGNATURE_CHECK (GNULIB_NAMESPACE::rename, int, (const char *, const char *)); #endif #if GNULIB_TEST_RENAMEAT SIGNATURE_CHECK (GNULIB_NAMESPACE::renameat, int, (int, char const *, int, char const *)); #endif #if GNULIB_TEST_SCANF SIGNATURE_CHECK (GNULIB_NAMESPACE::scanf, int, (const char *, ...)); #endif #if GNULIB_TEST_SNPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::snprintf, int, (char *, size_t, const char *, ...)); #endif #if GNULIB_TEST_SPRINTF_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::sprintf, int, (char *, const char *, ...)); #endif #if GNULIB_TEST_TMPFILE SIGNATURE_CHECK (GNULIB_NAMESPACE::tmpfile, FILE *, (void)); #endif #if GNULIB_TEST_VASPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::asprintf, int, (char **, const char *, ...)); SIGNATURE_CHECK (GNULIB_NAMESPACE::vasprintf, int, (char **, const char *, va_list)); #endif #if GNULIB_TEST_VDPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::vdprintf, int, (int, const char *, va_list)); #endif #if GNULIB_TEST_VFPRINTF_POSIX || GNULIB_TEST_VFPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::vfprintf, int, (FILE *, const char *, va_list)); #endif #if GNULIB_TEST_VFSCANF SIGNATURE_CHECK (GNULIB_NAMESPACE::vfscanf, int, (FILE *, const char *, va_list)); #endif #if GNULIB_TEST_VPRINTF_POSIX || GNULIB_TEST_VPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::vprintf, int, (const char *, va_list)); #endif #if GNULIB_TEST_VSCANF SIGNATURE_CHECK (GNULIB_NAMESPACE::vscanf, int, (const char *, va_list)); #endif #if GNULIB_TEST_VSNPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::vsnprintf, int, (char *, size_t, const char *, va_list)); #endif #if GNULIB_TEST_VSPRINTF_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::vsprintf, int, (char *, const char *, va_list)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdio-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstdio> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdio.c����������������������������������������������������������0000664�0000000�0000000�00000002323�14110572173�0017704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "verify.h" /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that the types are all defined. */ fpos_t t1; off_t t2; size_t t3; ssize_t t4; va_list t5; int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdlib-c++.cc����������������������������������������������������0000664�0000000�0000000�00000013105�14110572173�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <stdlib.h> #include "signature.h" #if GNULIB_TEST__EXIT SIGNATURE_CHECK (GNULIB_NAMESPACE::_Exit, void, (int)); #endif #if GNULIB_TEST_ALIGNED_ALLOC && HAVE_ALIGNED_ALLOC SIGNATURE_CHECK (GNULIB_NAMESPACE::aligned_alloc, void *, (size_t, size_t)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::atexit, int, (void (*) (void))); #if GNULIB_TEST_ATOLL SIGNATURE_CHECK (GNULIB_NAMESPACE::atoll, long long, (const char *)); #endif #if GNULIB_TEST_CALLOC_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::calloc, void *, (size_t, size_t)); #endif #if GNULIB_TEST_CANONICALIZE_FILE_NAME SIGNATURE_CHECK (GNULIB_NAMESPACE::canonicalize_file_name, char *, (const char *)); #endif #if GNULIB_TEST_FREE_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::free, void, (void *)); #endif #if GNULIB_TEST_GETLOADAVG SIGNATURE_CHECK (GNULIB_NAMESPACE::getloadavg, int, (double[], int)); #endif #if GNULIB_TEST_GETSUBOPT SIGNATURE_CHECK (GNULIB_NAMESPACE::getsubopt, int, (char **, char *const *, char **)); #endif #if GNULIB_TEST_GRANTPT SIGNATURE_CHECK (GNULIB_NAMESPACE::grantpt, int, (int)); #endif #if GNULIB_TEST_MALLOC_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::malloc, void *, (size_t)); #endif #if GNULIB_TEST_MBTOWC SIGNATURE_CHECK (GNULIB_NAMESPACE::mbtowc, int, (wchar_t *, const char *, size_t)); #endif #if GNULIB_TEST_MKDTEMP SIGNATURE_CHECK (GNULIB_NAMESPACE::mkdtemp, char *, (char *)); #endif #if GNULIB_TEST_MKOSTEMP SIGNATURE_CHECK (GNULIB_NAMESPACE::mkostemp, int, (char *, int)); #endif #if GNULIB_TEST_MKOSTEMPS SIGNATURE_CHECK (GNULIB_NAMESPACE::mkostemps, int, (char *, int, int)); #endif #if GNULIB_TEST_MKSTEMP SIGNATURE_CHECK (GNULIB_NAMESPACE::mkstemp, int, (char *)); #endif #if GNULIB_TEST_MKSTEMPS SIGNATURE_CHECK (GNULIB_NAMESPACE::mkstemps, int, (char *, int)); #endif #if GNULIB_TEST_POSIX_MEMALIGN && HAVE_POSIX_MEMALIGN SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_memalign, int, (void **, size_t, size_t)); #endif #if GNULIB_TEST_POSIX_OPENPT SIGNATURE_CHECK (GNULIB_NAMESPACE::posix_openpt, int, (int)); #endif #if GNULIB_TEST_PTSNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::ptsname, char *, (int)); #endif #if GNULIB_TEST_PTSNAME_R SIGNATURE_CHECK (GNULIB_NAMESPACE::ptsname_r, int, (int, char *, size_t)); #endif #if GNULIB_TEST_PUTENV SIGNATURE_CHECK (GNULIB_NAMESPACE::putenv, int, (char *)); #endif #if GNULIB_TEST_QSORT_R SIGNATURE_CHECK (GNULIB_NAMESPACE::qsort_r, void, (void *, size_t, size_t, int (*) (void const *, void const *, void *), void *)); #endif #if GNULIB_TEST_RANDOM SIGNATURE_CHECK (GNULIB_NAMESPACE::random, long, (void)); #endif #if GNULIB_TEST_RANDOM SIGNATURE_CHECK (GNULIB_NAMESPACE::srandom, void, (unsigned int)); #endif #if GNULIB_TEST_RANDOM SIGNATURE_CHECK (GNULIB_NAMESPACE::initstate, char *, (unsigned int, char *, size_t)); #endif #if GNULIB_TEST_RANDOM SIGNATURE_CHECK (GNULIB_NAMESPACE::setstate, char *, (char *)); #endif #if GNULIB_TEST_RANDOM_R SIGNATURE_CHECK (GNULIB_NAMESPACE::random_r, int, (struct random_data *, int32_t *)); #endif #if GNULIB_TEST_RANDOM_R SIGNATURE_CHECK (GNULIB_NAMESPACE::srandom_r, int, (unsigned int, struct random_data *)); #endif #if GNULIB_TEST_RANDOM_R SIGNATURE_CHECK (GNULIB_NAMESPACE::initstate_r, int, (unsigned int, char *, size_t, struct random_data *)); #endif #if GNULIB_TEST_RANDOM_R SIGNATURE_CHECK (GNULIB_NAMESPACE::setstate_r, int, (char *, struct random_data *)); #endif #if GNULIB_TEST_REALLOC_POSIX SIGNATURE_CHECK (GNULIB_NAMESPACE::realloc, void *, (void *, size_t)); #endif #if GNULIB_TEST_REALPATH SIGNATURE_CHECK (GNULIB_NAMESPACE::realpath, char *, (const char *, char *)); #endif #if GNULIB_TEST_RPMATCH SIGNATURE_CHECK (GNULIB_NAMESPACE::rpmatch, int, (const char *)); #endif #if GNULIB_TEST_SECURE_GETENV SIGNATURE_CHECK (GNULIB_NAMESPACE::secure_getenv, char *, (char const *)); #endif #if GNULIB_TEST_SETENV SIGNATURE_CHECK (GNULIB_NAMESPACE::setenv, int, (const char *, const char *, int)); #endif #if GNULIB_TEST_STRTOD SIGNATURE_CHECK (GNULIB_NAMESPACE::strtod, double, (const char *, char **)); #endif #if GNULIB_TEST_STRTOLL SIGNATURE_CHECK (GNULIB_NAMESPACE::strtoll, long long, (const char *, char **, int)); #endif #if GNULIB_TEST_STRTOULL SIGNATURE_CHECK (GNULIB_NAMESPACE::strtoull, unsigned long long, (const char *, char **, int)); #endif #if GNULIB_TEST_UNLOCKPT SIGNATURE_CHECK (GNULIB_NAMESPACE::unlockpt, int, (int)); #endif #if GNULIB_TEST_UNSETENV SIGNATURE_CHECK (GNULIB_NAMESPACE::unsetenv, int, (const char *)); #endif #if GNULIB_TEST_WCTOMB SIGNATURE_CHECK (GNULIB_NAMESPACE::wctomb, int, (char *, wchar_t)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdlib-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstdlib> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdlib.c���������������������������������������������������������0000664�0000000�0000000�00000002625�14110572173�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdlib.h> #include "verify.h" /* Check that EXIT_SUCCESS is 0, per POSIX. */ static int exitcode = EXIT_SUCCESS; #if EXIT_SUCCESS "oops" #endif /* Check for GNU value (not guaranteed by POSIX, but is guaranteed by gnulib). */ #if EXIT_FAILURE != 1 "oops" #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); #if GNULIB_TEST_SYSTEM_POSIX # include "test-sys_wait.h" #else # define test_sys_wait_macros() 0 #endif int main (void) { if (test_sys_wait_macros ()) return 1; return exitcode; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stdnoreturn.c����������������������������������������������������0000664�0000000�0000000�00000001637�14110572173�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdnoreturn.h>. Copyright 2012-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include <stdnoreturn.h> #include <stdlib.h> noreturn void does_not_return (void) { exit (0); } int main (void) { does_not_return (); } �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stpncpy.c��������������������������������������������������������0000664�0000000�0000000�00000003542�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the system defined function stpncpy(). Copyright (C) 2003, 2008-2021 Free Software Foundation, Inc. This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (stpncpy, char *, (char *, char const *, size_t)); #include <stdio.h> int main () { char from[10]; char to[10]; int i, j, k, h; char *ret; for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) for (k = 0; k < 10; k++) { memset (from, 'X', sizeof from); memcpy (from, "SourceString", i); if (i < 10) from[i] = '\0'; memset (to, 'Y', sizeof to); memcpy (to, "Destination", k); if (k < 10) to[k] = '\0'; ret = stpncpy (to, from, j); printf ("i = %2d, j = %2d, k = %2d: from = ", i, j, k); for (h = 0; h < 10; h++) if (from[h] >= 0x20 && from[h] < 0x7f) putchar (from[h]); else printf ("\\x%02x", from[h]); printf (" to = "); for (h = 0; h < 10; h++) if (to[h] >= 0x20 && to[h] < 0x7f) putchar (to[h]); else printf ("\\x%02x", to[h]); printf (" ret = to + %d\n", ret - to); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stpncpy.out.aix433�����������������������������������������������0000664�0000000�0000000�00000243220�14110572173�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������i = 0, j = 0, k = 0: from = \x00XXXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 0, j = 0, k = 1: from = \x00XXXXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 0, j = 0, k = 2: from = \x00XXXXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 0, j = 0, k = 3: from = \x00XXXXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 0, j = 0, k = 4: from = \x00XXXXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 0, j = 0, k = 5: from = \x00XXXXXXXXX to = Desti\x00YYYY ret = to + 0 i = 0, j = 0, k = 6: from = \x00XXXXXXXXX to = Destin\x00YYY ret = to + 0 i = 0, j = 0, k = 7: from = \x00XXXXXXXXX to = Destina\x00YY ret = to + 0 i = 0, j = 0, k = 8: from = \x00XXXXXXXXX to = Destinat\x00Y ret = to + 0 i = 0, j = 0, k = 9: from = \x00XXXXXXXXX to = Destinati\x00 ret = to + 0 i = 0, j = 1, k = 0: from = \x00XXXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 0, j = 1, k = 1: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 0 i = 0, j = 1, k = 2: from = \x00XXXXXXXXX to = \x00e\x00YYYYYYY ret = to + 0 i = 0, j = 1, k = 3: from = \x00XXXXXXXXX to = \x00es\x00YYYYYY ret = to + 0 i = 0, j = 1, k = 4: from = \x00XXXXXXXXX to = \x00est\x00YYYYY ret = to + 0 i = 0, j = 1, k = 5: from = \x00XXXXXXXXX to = \x00esti\x00YYYY ret = to + 0 i = 0, j = 1, k = 6: from = \x00XXXXXXXXX to = \x00estin\x00YYY ret = to + 0 i = 0, j = 1, k = 7: from = \x00XXXXXXXXX to = \x00estina\x00YY ret = to + 0 i = 0, j = 1, k = 8: from = \x00XXXXXXXXX to = \x00estinat\x00Y ret = to + 0 i = 0, j = 1, k = 9: from = \x00XXXXXXXXX to = \x00estinati\x00 ret = to + 0 i = 0, j = 2, k = 0: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 1 i = 0, j = 2, k = 1: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 1 i = 0, j = 2, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 1 i = 0, j = 2, k = 3: from = \x00XXXXXXXXX to = \x00\x00s\x00YYYYYY ret = to + 1 i = 0, j = 2, k = 4: from = \x00XXXXXXXXX to = \x00\x00st\x00YYYYY ret = to + 1 i = 0, j = 2, k = 5: from = \x00XXXXXXXXX to = \x00\x00sti\x00YYYY ret = to + 1 i = 0, j = 2, k = 6: from = \x00XXXXXXXXX to = \x00\x00stin\x00YYY ret = to + 1 i = 0, j = 2, k = 7: from = \x00XXXXXXXXX to = \x00\x00stina\x00YY ret = to + 1 i = 0, j = 2, k = 8: from = \x00XXXXXXXXX to = \x00\x00stinat\x00Y ret = to + 1 i = 0, j = 2, k = 9: from = \x00XXXXXXXXX to = \x00\x00stinati\x00 ret = to + 1 i = 0, j = 3, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 2 i = 0, j = 3, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 2 i = 0, j = 3, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 2 i = 0, j = 3, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 2 i = 0, j = 3, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00t\x00YYYYY ret = to + 2 i = 0, j = 3, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00ti\x00YYYY ret = to + 2 i = 0, j = 3, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00tin\x00YYY ret = to + 2 i = 0, j = 3, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00tina\x00YY ret = to + 2 i = 0, j = 3, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00tinat\x00Y ret = to + 2 i = 0, j = 3, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00tinati\x00 ret = to + 2 i = 0, j = 4, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 3 i = 0, j = 4, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 3 i = 0, j = 4, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 3 i = 0, j = 4, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 3 i = 0, j = 4, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 3 i = 0, j = 4, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00i\x00YYYY ret = to + 3 i = 0, j = 4, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00in\x00YYY ret = to + 3 i = 0, j = 4, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00ina\x00YY ret = to + 3 i = 0, j = 4, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00inat\x00Y ret = to + 3 i = 0, j = 4, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00inati\x00 ret = to + 3 i = 0, j = 5, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 4 i = 0, j = 5, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 4 i = 0, j = 5, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 4 i = 0, j = 5, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 4 i = 0, j = 5, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 4 i = 0, j = 5, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 4 i = 0, j = 5, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00n\x00YYY ret = to + 4 i = 0, j = 5, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00na\x00YY ret = to + 4 i = 0, j = 5, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00nat\x00Y ret = to + 4 i = 0, j = 5, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00nati\x00 ret = to + 4 i = 0, j = 6, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 0, j = 6, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 5 i = 0, j = 6, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00a\x00YY ret = to + 5 i = 0, j = 6, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00at\x00Y ret = to + 5 i = 0, j = 6, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00ati\x00 ret = to + 5 i = 0, j = 7, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 0, j = 7, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 6 i = 0, j = 7, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00t\x00Y ret = to + 6 i = 0, j = 7, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00ti\x00 ret = to + 6 i = 0, j = 8, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 0, j = 8, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 7 i = 0, j = 8, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00i\x00 ret = to + 7 i = 0, j = 9, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 0, j = 9, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 8 i = 1, j = 0, k = 0: from = S\x00XXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 1, j = 0, k = 1: from = S\x00XXXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 1, j = 0, k = 2: from = S\x00XXXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 1, j = 0, k = 3: from = S\x00XXXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 1, j = 0, k = 4: from = S\x00XXXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 1, j = 0, k = 5: from = S\x00XXXXXXXX to = Desti\x00YYYY ret = to + 0 i = 1, j = 0, k = 6: from = S\x00XXXXXXXX to = Destin\x00YYY ret = to + 0 i = 1, j = 0, k = 7: from = S\x00XXXXXXXX to = Destina\x00YY ret = to + 0 i = 1, j = 0, k = 8: from = S\x00XXXXXXXX to = Destinat\x00Y ret = to + 0 i = 1, j = 0, k = 9: from = S\x00XXXXXXXX to = Destinati\x00 ret = to + 0 i = 1, j = 1, k = 0: from = S\x00XXXXXXXX to = SYYYYYYYYY ret = to + 0 i = 1, j = 1, k = 1: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 0 i = 1, j = 1, k = 2: from = S\x00XXXXXXXX to = Se\x00YYYYYYY ret = to + 0 i = 1, j = 1, k = 3: from = S\x00XXXXXXXX to = Ses\x00YYYYYY ret = to + 0 i = 1, j = 1, k = 4: from = S\x00XXXXXXXX to = Sest\x00YYYYY ret = to + 0 i = 1, j = 1, k = 5: from = S\x00XXXXXXXX to = Sesti\x00YYYY ret = to + 0 i = 1, j = 1, k = 6: from = S\x00XXXXXXXX to = Sestin\x00YYY ret = to + 0 i = 1, j = 1, k = 7: from = S\x00XXXXXXXX to = Sestina\x00YY ret = to + 0 i = 1, j = 1, k = 8: from = S\x00XXXXXXXX to = Sestinat\x00Y ret = to + 0 i = 1, j = 1, k = 9: from = S\x00XXXXXXXX to = Sestinati\x00 ret = to + 0 i = 1, j = 2, k = 0: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 1, j = 2, k = 1: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 1, j = 2, k = 2: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 1 i = 1, j = 2, k = 3: from = S\x00XXXXXXXX to = S\x00s\x00YYYYYY ret = to + 1 i = 1, j = 2, k = 4: from = S\x00XXXXXXXX to = S\x00st\x00YYYYY ret = to + 1 i = 1, j = 2, k = 5: from = S\x00XXXXXXXX to = S\x00sti\x00YYYY ret = to + 1 i = 1, j = 2, k = 6: from = S\x00XXXXXXXX to = S\x00stin\x00YYY ret = to + 1 i = 1, j = 2, k = 7: from = S\x00XXXXXXXX to = S\x00stina\x00YY ret = to + 1 i = 1, j = 2, k = 8: from = S\x00XXXXXXXX to = S\x00stinat\x00Y ret = to + 1 i = 1, j = 2, k = 9: from = S\x00XXXXXXXX to = S\x00stinati\x00 ret = to + 1 i = 1, j = 3, k = 0: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 2 i = 1, j = 3, k = 1: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 2 i = 1, j = 3, k = 2: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 2 i = 1, j = 3, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 2 i = 1, j = 3, k = 4: from = S\x00XXXXXXXX to = S\x00\x00t\x00YYYYY ret = to + 2 i = 1, j = 3, k = 5: from = S\x00XXXXXXXX to = S\x00\x00ti\x00YYYY ret = to + 2 i = 1, j = 3, k = 6: from = S\x00XXXXXXXX to = S\x00\x00tin\x00YYY ret = to + 2 i = 1, j = 3, k = 7: from = S\x00XXXXXXXX to = S\x00\x00tina\x00YY ret = to + 2 i = 1, j = 3, k = 8: from = S\x00XXXXXXXX to = S\x00\x00tinat\x00Y ret = to + 2 i = 1, j = 3, k = 9: from = S\x00XXXXXXXX to = S\x00\x00tinati\x00 ret = to + 2 i = 1, j = 4, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 3 i = 1, j = 4, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 3 i = 1, j = 4, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 3 i = 1, j = 4, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 3 i = 1, j = 4, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 3 i = 1, j = 4, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00i\x00YYYY ret = to + 3 i = 1, j = 4, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00in\x00YYY ret = to + 3 i = 1, j = 4, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00ina\x00YY ret = to + 3 i = 1, j = 4, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00inat\x00Y ret = to + 3 i = 1, j = 4, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00inati\x00 ret = to + 3 i = 1, j = 5, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 4 i = 1, j = 5, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 4 i = 1, j = 5, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 4 i = 1, j = 5, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 4 i = 1, j = 5, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 4 i = 1, j = 5, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 4 i = 1, j = 5, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00n\x00YYY ret = to + 4 i = 1, j = 5, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00na\x00YY ret = to + 4 i = 1, j = 5, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00nat\x00Y ret = to + 4 i = 1, j = 5, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00nati\x00 ret = to + 4 i = 1, j = 6, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 5 i = 1, j = 6, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 5 i = 1, j = 6, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00a\x00YY ret = to + 5 i = 1, j = 6, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00at\x00Y ret = to + 5 i = 1, j = 6, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00ati\x00 ret = to + 5 i = 1, j = 7, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 6 i = 1, j = 7, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 6 i = 1, j = 7, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00t\x00Y ret = to + 6 i = 1, j = 7, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00ti\x00 ret = to + 6 i = 1, j = 8, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 1, j = 8, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 7 i = 1, j = 8, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00i\x00 ret = to + 7 i = 1, j = 9, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 1, j = 9, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 8 i = 2, j = 0, k = 0: from = So\x00XXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 2, j = 0, k = 1: from = So\x00XXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 2, j = 0, k = 2: from = So\x00XXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 2, j = 0, k = 3: from = So\x00XXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 2, j = 0, k = 4: from = So\x00XXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 2, j = 0, k = 5: from = So\x00XXXXXXX to = Desti\x00YYYY ret = to + 0 i = 2, j = 0, k = 6: from = So\x00XXXXXXX to = Destin\x00YYY ret = to + 0 i = 2, j = 0, k = 7: from = So\x00XXXXXXX to = Destina\x00YY ret = to + 0 i = 2, j = 0, k = 8: from = So\x00XXXXXXX to = Destinat\x00Y ret = to + 0 i = 2, j = 0, k = 9: from = So\x00XXXXXXX to = Destinati\x00 ret = to + 0 i = 2, j = 1, k = 0: from = So\x00XXXXXXX to = SYYYYYYYYY ret = to + 0 i = 2, j = 1, k = 1: from = So\x00XXXXXXX to = S\x00YYYYYYYY ret = to + 0 i = 2, j = 1, k = 2: from = So\x00XXXXXXX to = Se\x00YYYYYYY ret = to + 0 i = 2, j = 1, k = 3: from = So\x00XXXXXXX to = Ses\x00YYYYYY ret = to + 0 i = 2, j = 1, k = 4: from = So\x00XXXXXXX to = Sest\x00YYYYY ret = to + 0 i = 2, j = 1, k = 5: from = So\x00XXXXXXX to = Sesti\x00YYYY ret = to + 0 i = 2, j = 1, k = 6: from = So\x00XXXXXXX to = Sestin\x00YYY ret = to + 0 i = 2, j = 1, k = 7: from = So\x00XXXXXXX to = Sestina\x00YY ret = to + 0 i = 2, j = 1, k = 8: from = So\x00XXXXXXX to = Sestinat\x00Y ret = to + 0 i = 2, j = 1, k = 9: from = So\x00XXXXXXX to = Sestinati\x00 ret = to + 0 i = 2, j = 2, k = 0: from = So\x00XXXXXXX to = SoYYYYYYYY ret = to + 1 i = 2, j = 2, k = 1: from = So\x00XXXXXXX to = SoYYYYYYYY ret = to + 1 i = 2, j = 2, k = 2: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 1 i = 2, j = 2, k = 3: from = So\x00XXXXXXX to = Sos\x00YYYYYY ret = to + 1 i = 2, j = 2, k = 4: from = So\x00XXXXXXX to = Sost\x00YYYYY ret = to + 1 i = 2, j = 2, k = 5: from = So\x00XXXXXXX to = Sosti\x00YYYY ret = to + 1 i = 2, j = 2, k = 6: from = So\x00XXXXXXX to = Sostin\x00YYY ret = to + 1 i = 2, j = 2, k = 7: from = So\x00XXXXXXX to = Sostina\x00YY ret = to + 1 i = 2, j = 2, k = 8: from = So\x00XXXXXXX to = Sostinat\x00Y ret = to + 1 i = 2, j = 2, k = 9: from = So\x00XXXXXXX to = Sostinati\x00 ret = to + 1 i = 2, j = 3, k = 0: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 1: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 2: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 3: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 3, k = 4: from = So\x00XXXXXXX to = So\x00t\x00YYYYY ret = to + 2 i = 2, j = 3, k = 5: from = So\x00XXXXXXX to = So\x00ti\x00YYYY ret = to + 2 i = 2, j = 3, k = 6: from = So\x00XXXXXXX to = So\x00tin\x00YYY ret = to + 2 i = 2, j = 3, k = 7: from = So\x00XXXXXXX to = So\x00tina\x00YY ret = to + 2 i = 2, j = 3, k = 8: from = So\x00XXXXXXX to = So\x00tinat\x00Y ret = to + 2 i = 2, j = 3, k = 9: from = So\x00XXXXXXX to = So\x00tinati\x00 ret = to + 2 i = 2, j = 4, k = 0: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 3 i = 2, j = 4, k = 1: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 3 i = 2, j = 4, k = 2: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 3 i = 2, j = 4, k = 3: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 3 i = 2, j = 4, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 3 i = 2, j = 4, k = 5: from = So\x00XXXXXXX to = So\x00\x00i\x00YYYY ret = to + 3 i = 2, j = 4, k = 6: from = So\x00XXXXXXX to = So\x00\x00in\x00YYY ret = to + 3 i = 2, j = 4, k = 7: from = So\x00XXXXXXX to = So\x00\x00ina\x00YY ret = to + 3 i = 2, j = 4, k = 8: from = So\x00XXXXXXX to = So\x00\x00inat\x00Y ret = to + 3 i = 2, j = 4, k = 9: from = So\x00XXXXXXX to = So\x00\x00inati\x00 ret = to + 3 i = 2, j = 5, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 4 i = 2, j = 5, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 4 i = 2, j = 5, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 4 i = 2, j = 5, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 4 i = 2, j = 5, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 4 i = 2, j = 5, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 4 i = 2, j = 5, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00n\x00YYY ret = to + 4 i = 2, j = 5, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00na\x00YY ret = to + 4 i = 2, j = 5, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00nat\x00Y ret = to + 4 i = 2, j = 5, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00nati\x00 ret = to + 4 i = 2, j = 6, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 5 i = 2, j = 6, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 5 i = 2, j = 6, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00a\x00YY ret = to + 5 i = 2, j = 6, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00at\x00Y ret = to + 5 i = 2, j = 6, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00ati\x00 ret = to + 5 i = 2, j = 7, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 6 i = 2, j = 7, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 6 i = 2, j = 7, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00t\x00Y ret = to + 6 i = 2, j = 7, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00ti\x00 ret = to + 6 i = 2, j = 8, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 7 i = 2, j = 8, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 7 i = 2, j = 8, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00i\x00 ret = to + 7 i = 2, j = 9, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 2, j = 9, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 8 i = 3, j = 0, k = 0: from = Sou\x00XXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 3, j = 0, k = 1: from = Sou\x00XXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 3, j = 0, k = 2: from = Sou\x00XXXXXX to = De\x00YYYYYYY ret = to + 0 i = 3, j = 0, k = 3: from = Sou\x00XXXXXX to = Des\x00YYYYYY ret = to + 0 i = 3, j = 0, k = 4: from = Sou\x00XXXXXX to = Dest\x00YYYYY ret = to + 0 i = 3, j = 0, k = 5: from = Sou\x00XXXXXX to = Desti\x00YYYY ret = to + 0 i = 3, j = 0, k = 6: from = Sou\x00XXXXXX to = Destin\x00YYY ret = to + 0 i = 3, j = 0, k = 7: from = Sou\x00XXXXXX to = Destina\x00YY ret = to + 0 i = 3, j = 0, k = 8: from = Sou\x00XXXXXX to = Destinat\x00Y ret = to + 0 i = 3, j = 0, k = 9: from = Sou\x00XXXXXX to = Destinati\x00 ret = to + 0 i = 3, j = 1, k = 0: from = Sou\x00XXXXXX to = SYYYYYYYYY ret = to + 0 i = 3, j = 1, k = 1: from = Sou\x00XXXXXX to = S\x00YYYYYYYY ret = to + 0 i = 3, j = 1, k = 2: from = Sou\x00XXXXXX to = Se\x00YYYYYYY ret = to + 0 i = 3, j = 1, k = 3: from = Sou\x00XXXXXX to = Ses\x00YYYYYY ret = to + 0 i = 3, j = 1, k = 4: from = Sou\x00XXXXXX to = Sest\x00YYYYY ret = to + 0 i = 3, j = 1, k = 5: from = Sou\x00XXXXXX to = Sesti\x00YYYY ret = to + 0 i = 3, j = 1, k = 6: from = Sou\x00XXXXXX to = Sestin\x00YYY ret = to + 0 i = 3, j = 1, k = 7: from = Sou\x00XXXXXX to = Sestina\x00YY ret = to + 0 i = 3, j = 1, k = 8: from = Sou\x00XXXXXX to = Sestinat\x00Y ret = to + 0 i = 3, j = 1, k = 9: from = Sou\x00XXXXXX to = Sestinati\x00 ret = to + 0 i = 3, j = 2, k = 0: from = Sou\x00XXXXXX to = SoYYYYYYYY ret = to + 1 i = 3, j = 2, k = 1: from = Sou\x00XXXXXX to = SoYYYYYYYY ret = to + 1 i = 3, j = 2, k = 2: from = Sou\x00XXXXXX to = So\x00YYYYYYY ret = to + 1 i = 3, j = 2, k = 3: from = Sou\x00XXXXXX to = Sos\x00YYYYYY ret = to + 1 i = 3, j = 2, k = 4: from = Sou\x00XXXXXX to = Sost\x00YYYYY ret = to + 1 i = 3, j = 2, k = 5: from = Sou\x00XXXXXX to = Sosti\x00YYYY ret = to + 1 i = 3, j = 2, k = 6: from = Sou\x00XXXXXX to = Sostin\x00YYY ret = to + 1 i = 3, j = 2, k = 7: from = Sou\x00XXXXXX to = Sostina\x00YY ret = to + 1 i = 3, j = 2, k = 8: from = Sou\x00XXXXXX to = Sostinat\x00Y ret = to + 1 i = 3, j = 2, k = 9: from = Sou\x00XXXXXX to = Sostinati\x00 ret = to + 1 i = 3, j = 3, k = 0: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 2 i = 3, j = 3, k = 1: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 2 i = 3, j = 3, k = 2: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 2 i = 3, j = 3, k = 3: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 2 i = 3, j = 3, k = 4: from = Sou\x00XXXXXX to = Sout\x00YYYYY ret = to + 2 i = 3, j = 3, k = 5: from = Sou\x00XXXXXX to = Souti\x00YYYY ret = to + 2 i = 3, j = 3, k = 6: from = Sou\x00XXXXXX to = Soutin\x00YYY ret = to + 2 i = 3, j = 3, k = 7: from = Sou\x00XXXXXX to = Soutina\x00YY ret = to + 2 i = 3, j = 3, k = 8: from = Sou\x00XXXXXX to = Soutinat\x00Y ret = to + 2 i = 3, j = 3, k = 9: from = Sou\x00XXXXXX to = Soutinati\x00 ret = to + 2 i = 3, j = 4, k = 0: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 1: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 2: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 3: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 4, k = 5: from = Sou\x00XXXXXX to = Sou\x00i\x00YYYY ret = to + 3 i = 3, j = 4, k = 6: from = Sou\x00XXXXXX to = Sou\x00in\x00YYY ret = to + 3 i = 3, j = 4, k = 7: from = Sou\x00XXXXXX to = Sou\x00ina\x00YY ret = to + 3 i = 3, j = 4, k = 8: from = Sou\x00XXXXXX to = Sou\x00inat\x00Y ret = to + 3 i = 3, j = 4, k = 9: from = Sou\x00XXXXXX to = Sou\x00inati\x00 ret = to + 3 i = 3, j = 5, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 4 i = 3, j = 5, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 4 i = 3, j = 5, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 4 i = 3, j = 5, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 4 i = 3, j = 5, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 4 i = 3, j = 5, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 4 i = 3, j = 5, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00n\x00YYY ret = to + 4 i = 3, j = 5, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00na\x00YY ret = to + 4 i = 3, j = 5, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00nat\x00Y ret = to + 4 i = 3, j = 5, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00nati\x00 ret = to + 4 i = 3, j = 6, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 5 i = 3, j = 6, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 5 i = 3, j = 6, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00a\x00YY ret = to + 5 i = 3, j = 6, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00at\x00Y ret = to + 5 i = 3, j = 6, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00ati\x00 ret = to + 5 i = 3, j = 7, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 6 i = 3, j = 7, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 6 i = 3, j = 7, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00t\x00Y ret = to + 6 i = 3, j = 7, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00ti\x00 ret = to + 6 i = 3, j = 8, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 7 i = 3, j = 8, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 7 i = 3, j = 8, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00i\x00 ret = to + 7 i = 3, j = 9, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 8 i = 3, j = 9, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00\x00 ret = to + 8 i = 4, j = 0, k = 0: from = Sour\x00XXXXX to = \x00YYYYYYYYY ret = to + 0 i = 4, j = 0, k = 1: from = Sour\x00XXXXX to = D\x00YYYYYYYY ret = to + 0 i = 4, j = 0, k = 2: from = Sour\x00XXXXX to = De\x00YYYYYYY ret = to + 0 i = 4, j = 0, k = 3: from = Sour\x00XXXXX to = Des\x00YYYYYY ret = to + 0 i = 4, j = 0, k = 4: from = Sour\x00XXXXX to = Dest\x00YYYYY ret = to + 0 i = 4, j = 0, k = 5: from = Sour\x00XXXXX to = Desti\x00YYYY ret = to + 0 i = 4, j = 0, k = 6: from = Sour\x00XXXXX to = Destin\x00YYY ret = to + 0 i = 4, j = 0, k = 7: from = Sour\x00XXXXX to = Destina\x00YY ret = to + 0 i = 4, j = 0, k = 8: from = Sour\x00XXXXX to = Destinat\x00Y ret = to + 0 i = 4, j = 0, k = 9: from = Sour\x00XXXXX to = Destinati\x00 ret = to + 0 i = 4, j = 1, k = 0: from = Sour\x00XXXXX to = SYYYYYYYYY ret = to + 0 i = 4, j = 1, k = 1: from = Sour\x00XXXXX to = S\x00YYYYYYYY ret = to + 0 i = 4, j = 1, k = 2: from = Sour\x00XXXXX to = Se\x00YYYYYYY ret = to + 0 i = 4, j = 1, k = 3: from = Sour\x00XXXXX to = Ses\x00YYYYYY ret = to + 0 i = 4, j = 1, k = 4: from = Sour\x00XXXXX to = Sest\x00YYYYY ret = to + 0 i = 4, j = 1, k = 5: from = Sour\x00XXXXX to = Sesti\x00YYYY ret = to + 0 i = 4, j = 1, k = 6: from = Sour\x00XXXXX to = Sestin\x00YYY ret = to + 0 i = 4, j = 1, k = 7: from = Sour\x00XXXXX to = Sestina\x00YY ret = to + 0 i = 4, j = 1, k = 8: from = Sour\x00XXXXX to = Sestinat\x00Y ret = to + 0 i = 4, j = 1, k = 9: from = Sour\x00XXXXX to = Sestinati\x00 ret = to + 0 i = 4, j = 2, k = 0: from = Sour\x00XXXXX to = SoYYYYYYYY ret = to + 1 i = 4, j = 2, k = 1: from = Sour\x00XXXXX to = SoYYYYYYYY ret = to + 1 i = 4, j = 2, k = 2: from = Sour\x00XXXXX to = So\x00YYYYYYY ret = to + 1 i = 4, j = 2, k = 3: from = Sour\x00XXXXX to = Sos\x00YYYYYY ret = to + 1 i = 4, j = 2, k = 4: from = Sour\x00XXXXX to = Sost\x00YYYYY ret = to + 1 i = 4, j = 2, k = 5: from = Sour\x00XXXXX to = Sosti\x00YYYY ret = to + 1 i = 4, j = 2, k = 6: from = Sour\x00XXXXX to = Sostin\x00YYY ret = to + 1 i = 4, j = 2, k = 7: from = Sour\x00XXXXX to = Sostina\x00YY ret = to + 1 i = 4, j = 2, k = 8: from = Sour\x00XXXXX to = Sostinat\x00Y ret = to + 1 i = 4, j = 2, k = 9: from = Sour\x00XXXXX to = Sostinati\x00 ret = to + 1 i = 4, j = 3, k = 0: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 2 i = 4, j = 3, k = 1: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 2 i = 4, j = 3, k = 2: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 2 i = 4, j = 3, k = 3: from = Sour\x00XXXXX to = Sou\x00YYYYYY ret = to + 2 i = 4, j = 3, k = 4: from = Sour\x00XXXXX to = Sout\x00YYYYY ret = to + 2 i = 4, j = 3, k = 5: from = Sour\x00XXXXX to = Souti\x00YYYY ret = to + 2 i = 4, j = 3, k = 6: from = Sour\x00XXXXX to = Soutin\x00YYY ret = to + 2 i = 4, j = 3, k = 7: from = Sour\x00XXXXX to = Soutina\x00YY ret = to + 2 i = 4, j = 3, k = 8: from = Sour\x00XXXXX to = Soutinat\x00Y ret = to + 2 i = 4, j = 3, k = 9: from = Sour\x00XXXXX to = Soutinati\x00 ret = to + 2 i = 4, j = 4, k = 0: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 3 i = 4, j = 4, k = 1: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 3 i = 4, j = 4, k = 2: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 3 i = 4, j = 4, k = 3: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 3 i = 4, j = 4, k = 4: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 3 i = 4, j = 4, k = 5: from = Sour\x00XXXXX to = Souri\x00YYYY ret = to + 3 i = 4, j = 4, k = 6: from = Sour\x00XXXXX to = Sourin\x00YYY ret = to + 3 i = 4, j = 4, k = 7: from = Sour\x00XXXXX to = Sourina\x00YY ret = to + 3 i = 4, j = 4, k = 8: from = Sour\x00XXXXX to = Sourinat\x00Y ret = to + 3 i = 4, j = 4, k = 9: from = Sour\x00XXXXX to = Sourinati\x00 ret = to + 3 i = 4, j = 5, k = 0: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 1: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 2: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 3: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 4: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 5, k = 6: from = Sour\x00XXXXX to = Sour\x00n\x00YYY ret = to + 4 i = 4, j = 5, k = 7: from = Sour\x00XXXXX to = Sour\x00na\x00YY ret = to + 4 i = 4, j = 5, k = 8: from = Sour\x00XXXXX to = Sour\x00nat\x00Y ret = to + 4 i = 4, j = 5, k = 9: from = Sour\x00XXXXX to = Sour\x00nati\x00 ret = to + 4 i = 4, j = 6, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 5 i = 4, j = 6, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 5 i = 4, j = 6, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00a\x00YY ret = to + 5 i = 4, j = 6, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00at\x00Y ret = to + 5 i = 4, j = 6, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00ati\x00 ret = to + 5 i = 4, j = 7, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 6 i = 4, j = 7, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 6 i = 4, j = 7, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00t\x00Y ret = to + 6 i = 4, j = 7, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00ti\x00 ret = to + 6 i = 4, j = 8, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 7 i = 4, j = 8, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 7 i = 4, j = 8, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00i\x00 ret = to + 7 i = 4, j = 9, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 8 i = 4, j = 9, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00\x00 ret = to + 8 i = 5, j = 0, k = 0: from = Sourc\x00XXXX to = \x00YYYYYYYYY ret = to + 0 i = 5, j = 0, k = 1: from = Sourc\x00XXXX to = D\x00YYYYYYYY ret = to + 0 i = 5, j = 0, k = 2: from = Sourc\x00XXXX to = De\x00YYYYYYY ret = to + 0 i = 5, j = 0, k = 3: from = Sourc\x00XXXX to = Des\x00YYYYYY ret = to + 0 i = 5, j = 0, k = 4: from = Sourc\x00XXXX to = Dest\x00YYYYY ret = to + 0 i = 5, j = 0, k = 5: from = Sourc\x00XXXX to = Desti\x00YYYY ret = to + 0 i = 5, j = 0, k = 6: from = Sourc\x00XXXX to = Destin\x00YYY ret = to + 0 i = 5, j = 0, k = 7: from = Sourc\x00XXXX to = Destina\x00YY ret = to + 0 i = 5, j = 0, k = 8: from = Sourc\x00XXXX to = Destinat\x00Y ret = to + 0 i = 5, j = 0, k = 9: from = Sourc\x00XXXX to = Destinati\x00 ret = to + 0 i = 5, j = 1, k = 0: from = Sourc\x00XXXX to = SYYYYYYYYY ret = to + 0 i = 5, j = 1, k = 1: from = Sourc\x00XXXX to = S\x00YYYYYYYY ret = to + 0 i = 5, j = 1, k = 2: from = Sourc\x00XXXX to = Se\x00YYYYYYY ret = to + 0 i = 5, j = 1, k = 3: from = Sourc\x00XXXX to = Ses\x00YYYYYY ret = to + 0 i = 5, j = 1, k = 4: from = Sourc\x00XXXX to = Sest\x00YYYYY ret = to + 0 i = 5, j = 1, k = 5: from = Sourc\x00XXXX to = Sesti\x00YYYY ret = to + 0 i = 5, j = 1, k = 6: from = Sourc\x00XXXX to = Sestin\x00YYY ret = to + 0 i = 5, j = 1, k = 7: from = Sourc\x00XXXX to = Sestina\x00YY ret = to + 0 i = 5, j = 1, k = 8: from = Sourc\x00XXXX to = Sestinat\x00Y ret = to + 0 i = 5, j = 1, k = 9: from = Sourc\x00XXXX to = Sestinati\x00 ret = to + 0 i = 5, j = 2, k = 0: from = Sourc\x00XXXX to = SoYYYYYYYY ret = to + 1 i = 5, j = 2, k = 1: from = Sourc\x00XXXX to = SoYYYYYYYY ret = to + 1 i = 5, j = 2, k = 2: from = Sourc\x00XXXX to = So\x00YYYYYYY ret = to + 1 i = 5, j = 2, k = 3: from = Sourc\x00XXXX to = Sos\x00YYYYYY ret = to + 1 i = 5, j = 2, k = 4: from = Sourc\x00XXXX to = Sost\x00YYYYY ret = to + 1 i = 5, j = 2, k = 5: from = Sourc\x00XXXX to = Sosti\x00YYYY ret = to + 1 i = 5, j = 2, k = 6: from = Sourc\x00XXXX to = Sostin\x00YYY ret = to + 1 i = 5, j = 2, k = 7: from = Sourc\x00XXXX to = Sostina\x00YY ret = to + 1 i = 5, j = 2, k = 8: from = Sourc\x00XXXX to = Sostinat\x00Y ret = to + 1 i = 5, j = 2, k = 9: from = Sourc\x00XXXX to = Sostinati\x00 ret = to + 1 i = 5, j = 3, k = 0: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 2 i = 5, j = 3, k = 1: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 2 i = 5, j = 3, k = 2: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 2 i = 5, j = 3, k = 3: from = Sourc\x00XXXX to = Sou\x00YYYYYY ret = to + 2 i = 5, j = 3, k = 4: from = Sourc\x00XXXX to = Sout\x00YYYYY ret = to + 2 i = 5, j = 3, k = 5: from = Sourc\x00XXXX to = Souti\x00YYYY ret = to + 2 i = 5, j = 3, k = 6: from = Sourc\x00XXXX to = Soutin\x00YYY ret = to + 2 i = 5, j = 3, k = 7: from = Sourc\x00XXXX to = Soutina\x00YY ret = to + 2 i = 5, j = 3, k = 8: from = Sourc\x00XXXX to = Soutinat\x00Y ret = to + 2 i = 5, j = 3, k = 9: from = Sourc\x00XXXX to = Soutinati\x00 ret = to + 2 i = 5, j = 4, k = 0: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 3 i = 5, j = 4, k = 1: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 3 i = 5, j = 4, k = 2: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 3 i = 5, j = 4, k = 3: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 3 i = 5, j = 4, k = 4: from = Sourc\x00XXXX to = Sour\x00YYYYY ret = to + 3 i = 5, j = 4, k = 5: from = Sourc\x00XXXX to = Souri\x00YYYY ret = to + 3 i = 5, j = 4, k = 6: from = Sourc\x00XXXX to = Sourin\x00YYY ret = to + 3 i = 5, j = 4, k = 7: from = Sourc\x00XXXX to = Sourina\x00YY ret = to + 3 i = 5, j = 4, k = 8: from = Sourc\x00XXXX to = Sourinat\x00Y ret = to + 3 i = 5, j = 4, k = 9: from = Sourc\x00XXXX to = Sourinati\x00 ret = to + 3 i = 5, j = 5, k = 0: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 4 i = 5, j = 5, k = 1: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 4 i = 5, j = 5, k = 2: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 4 i = 5, j = 5, k = 3: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 4 i = 5, j = 5, k = 4: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 4 i = 5, j = 5, k = 5: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 4 i = 5, j = 5, k = 6: from = Sourc\x00XXXX to = Sourcn\x00YYY ret = to + 4 i = 5, j = 5, k = 7: from = Sourc\x00XXXX to = Sourcna\x00YY ret = to + 4 i = 5, j = 5, k = 8: from = Sourc\x00XXXX to = Sourcnat\x00Y ret = to + 4 i = 5, j = 5, k = 9: from = Sourc\x00XXXX to = Sourcnati\x00 ret = to + 4 i = 5, j = 6, k = 0: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 1: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 2: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 3: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 4: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 5: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 6, k = 7: from = Sourc\x00XXXX to = Sourc\x00a\x00YY ret = to + 5 i = 5, j = 6, k = 8: from = Sourc\x00XXXX to = Sourc\x00at\x00Y ret = to + 5 i = 5, j = 6, k = 9: from = Sourc\x00XXXX to = Sourc\x00ati\x00 ret = to + 5 i = 5, j = 7, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 6 i = 5, j = 7, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 6 i = 5, j = 7, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00t\x00Y ret = to + 6 i = 5, j = 7, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00ti\x00 ret = to + 6 i = 5, j = 8, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 7 i = 5, j = 8, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 7 i = 5, j = 8, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00\x00i\x00 ret = to + 7 i = 5, j = 9, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 8 i = 5, j = 9, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00\x00 ret = to + 8 i = 6, j = 0, k = 0: from = Source\x00XXX to = \x00YYYYYYYYY ret = to + 0 i = 6, j = 0, k = 1: from = Source\x00XXX to = D\x00YYYYYYYY ret = to + 0 i = 6, j = 0, k = 2: from = Source\x00XXX to = De\x00YYYYYYY ret = to + 0 i = 6, j = 0, k = 3: from = Source\x00XXX to = Des\x00YYYYYY ret = to + 0 i = 6, j = 0, k = 4: from = Source\x00XXX to = Dest\x00YYYYY ret = to + 0 i = 6, j = 0, k = 5: from = Source\x00XXX to = Desti\x00YYYY ret = to + 0 i = 6, j = 0, k = 6: from = Source\x00XXX to = Destin\x00YYY ret = to + 0 i = 6, j = 0, k = 7: from = Source\x00XXX to = Destina\x00YY ret = to + 0 i = 6, j = 0, k = 8: from = Source\x00XXX to = Destinat\x00Y ret = to + 0 i = 6, j = 0, k = 9: from = Source\x00XXX to = Destinati\x00 ret = to + 0 i = 6, j = 1, k = 0: from = Source\x00XXX to = SYYYYYYYYY ret = to + 0 i = 6, j = 1, k = 1: from = Source\x00XXX to = S\x00YYYYYYYY ret = to + 0 i = 6, j = 1, k = 2: from = Source\x00XXX to = Se\x00YYYYYYY ret = to + 0 i = 6, j = 1, k = 3: from = Source\x00XXX to = Ses\x00YYYYYY ret = to + 0 i = 6, j = 1, k = 4: from = Source\x00XXX to = Sest\x00YYYYY ret = to + 0 i = 6, j = 1, k = 5: from = Source\x00XXX to = Sesti\x00YYYY ret = to + 0 i = 6, j = 1, k = 6: from = Source\x00XXX to = Sestin\x00YYY ret = to + 0 i = 6, j = 1, k = 7: from = Source\x00XXX to = Sestina\x00YY ret = to + 0 i = 6, j = 1, k = 8: from = Source\x00XXX to = Sestinat\x00Y ret = to + 0 i = 6, j = 1, k = 9: from = Source\x00XXX to = Sestinati\x00 ret = to + 0 i = 6, j = 2, k = 0: from = Source\x00XXX to = SoYYYYYYYY ret = to + 1 i = 6, j = 2, k = 1: from = Source\x00XXX to = SoYYYYYYYY ret = to + 1 i = 6, j = 2, k = 2: from = Source\x00XXX to = So\x00YYYYYYY ret = to + 1 i = 6, j = 2, k = 3: from = Source\x00XXX to = Sos\x00YYYYYY ret = to + 1 i = 6, j = 2, k = 4: from = Source\x00XXX to = Sost\x00YYYYY ret = to + 1 i = 6, j = 2, k = 5: from = Source\x00XXX to = Sosti\x00YYYY ret = to + 1 i = 6, j = 2, k = 6: from = Source\x00XXX to = Sostin\x00YYY ret = to + 1 i = 6, j = 2, k = 7: from = Source\x00XXX to = Sostina\x00YY ret = to + 1 i = 6, j = 2, k = 8: from = Source\x00XXX to = Sostinat\x00Y ret = to + 1 i = 6, j = 2, k = 9: from = Source\x00XXX to = Sostinati\x00 ret = to + 1 i = 6, j = 3, k = 0: from = Source\x00XXX to = SouYYYYYYY ret = to + 2 i = 6, j = 3, k = 1: from = Source\x00XXX to = SouYYYYYYY ret = to + 2 i = 6, j = 3, k = 2: from = Source\x00XXX to = SouYYYYYYY ret = to + 2 i = 6, j = 3, k = 3: from = Source\x00XXX to = Sou\x00YYYYYY ret = to + 2 i = 6, j = 3, k = 4: from = Source\x00XXX to = Sout\x00YYYYY ret = to + 2 i = 6, j = 3, k = 5: from = Source\x00XXX to = Souti\x00YYYY ret = to + 2 i = 6, j = 3, k = 6: from = Source\x00XXX to = Soutin\x00YYY ret = to + 2 i = 6, j = 3, k = 7: from = Source\x00XXX to = Soutina\x00YY ret = to + 2 i = 6, j = 3, k = 8: from = Source\x00XXX to = Soutinat\x00Y ret = to + 2 i = 6, j = 3, k = 9: from = Source\x00XXX to = Soutinati\x00 ret = to + 2 i = 6, j = 4, k = 0: from = Source\x00XXX to = SourYYYYYY ret = to + 3 i = 6, j = 4, k = 1: from = Source\x00XXX to = SourYYYYYY ret = to + 3 i = 6, j = 4, k = 2: from = Source\x00XXX to = SourYYYYYY ret = to + 3 i = 6, j = 4, k = 3: from = Source\x00XXX to = SourYYYYYY ret = to + 3 i = 6, j = 4, k = 4: from = Source\x00XXX to = Sour\x00YYYYY ret = to + 3 i = 6, j = 4, k = 5: from = Source\x00XXX to = Souri\x00YYYY ret = to + 3 i = 6, j = 4, k = 6: from = Source\x00XXX to = Sourin\x00YYY ret = to + 3 i = 6, j = 4, k = 7: from = Source\x00XXX to = Sourina\x00YY ret = to + 3 i = 6, j = 4, k = 8: from = Source\x00XXX to = Sourinat\x00Y ret = to + 3 i = 6, j = 4, k = 9: from = Source\x00XXX to = Sourinati\x00 ret = to + 3 i = 6, j = 5, k = 0: from = Source\x00XXX to = SourcYYYYY ret = to + 4 i = 6, j = 5, k = 1: from = Source\x00XXX to = SourcYYYYY ret = to + 4 i = 6, j = 5, k = 2: from = Source\x00XXX to = SourcYYYYY ret = to + 4 i = 6, j = 5, k = 3: from = Source\x00XXX to = SourcYYYYY ret = to + 4 i = 6, j = 5, k = 4: from = Source\x00XXX to = SourcYYYYY ret = to + 4 i = 6, j = 5, k = 5: from = Source\x00XXX to = Sourc\x00YYYY ret = to + 4 i = 6, j = 5, k = 6: from = Source\x00XXX to = Sourcn\x00YYY ret = to + 4 i = 6, j = 5, k = 7: from = Source\x00XXX to = Sourcna\x00YY ret = to + 4 i = 6, j = 5, k = 8: from = Source\x00XXX to = Sourcnat\x00Y ret = to + 4 i = 6, j = 5, k = 9: from = Source\x00XXX to = Sourcnati\x00 ret = to + 4 i = 6, j = 6, k = 0: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 1: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 2: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 3: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 4: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 5: from = Source\x00XXX to = SourceYYYY ret = to + 5 i = 6, j = 6, k = 6: from = Source\x00XXX to = Source\x00YYY ret = to + 5 i = 6, j = 6, k = 7: from = Source\x00XXX to = Sourcea\x00YY ret = to + 5 i = 6, j = 6, k = 8: from = Source\x00XXX to = Sourceat\x00Y ret = to + 5 i = 6, j = 6, k = 9: from = Source\x00XXX to = Sourceati\x00 ret = to + 5 i = 6, j = 7, k = 0: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 1: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 2: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 3: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 4: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 5: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 6: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 7: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 7, k = 8: from = Source\x00XXX to = Source\x00t\x00Y ret = to + 6 i = 6, j = 7, k = 9: from = Source\x00XXX to = Source\x00ti\x00 ret = to + 6 i = 6, j = 8, k = 0: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 1: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 2: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 3: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 4: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 5: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 6: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 7: from = Source\x00XXX to = Source\x00\x00YY ret = to + 7 i = 6, j = 8, k = 8: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 7 i = 6, j = 8, k = 9: from = Source\x00XXX to = Source\x00\x00i\x00 ret = to + 7 i = 6, j = 9, k = 0: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 1: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 2: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 3: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 4: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 5: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 6: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 7: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 8: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 8 i = 6, j = 9, k = 9: from = Source\x00XXX to = Source\x00\x00\x00\x00 ret = to + 8 i = 7, j = 0, k = 0: from = SourceS\x00XX to = \x00YYYYYYYYY ret = to + 0 i = 7, j = 0, k = 1: from = SourceS\x00XX to = D\x00YYYYYYYY ret = to + 0 i = 7, j = 0, k = 2: from = SourceS\x00XX to = De\x00YYYYYYY ret = to + 0 i = 7, j = 0, k = 3: from = SourceS\x00XX to = Des\x00YYYYYY ret = to + 0 i = 7, j = 0, k = 4: from = SourceS\x00XX to = Dest\x00YYYYY ret = to + 0 i = 7, j = 0, k = 5: from = SourceS\x00XX to = Desti\x00YYYY ret = to + 0 i = 7, j = 0, k = 6: from = SourceS\x00XX to = Destin\x00YYY ret = to + 0 i = 7, j = 0, k = 7: from = SourceS\x00XX to = Destina\x00YY ret = to + 0 i = 7, j = 0, k = 8: from = SourceS\x00XX to = Destinat\x00Y ret = to + 0 i = 7, j = 0, k = 9: from = SourceS\x00XX to = Destinati\x00 ret = to + 0 i = 7, j = 1, k = 0: from = SourceS\x00XX to = SYYYYYYYYY ret = to + 0 i = 7, j = 1, k = 1: from = SourceS\x00XX to = S\x00YYYYYYYY ret = to + 0 i = 7, j = 1, k = 2: from = SourceS\x00XX to = Se\x00YYYYYYY ret = to + 0 i = 7, j = 1, k = 3: from = SourceS\x00XX to = Ses\x00YYYYYY ret = to + 0 i = 7, j = 1, k = 4: from = SourceS\x00XX to = Sest\x00YYYYY ret = to + 0 i = 7, j = 1, k = 5: from = SourceS\x00XX to = Sesti\x00YYYY ret = to + 0 i = 7, j = 1, k = 6: from = SourceS\x00XX to = Sestin\x00YYY ret = to + 0 i = 7, j = 1, k = 7: from = SourceS\x00XX to = Sestina\x00YY ret = to + 0 i = 7, j = 1, k = 8: from = SourceS\x00XX to = Sestinat\x00Y ret = to + 0 i = 7, j = 1, k = 9: from = SourceS\x00XX to = Sestinati\x00 ret = to + 0 i = 7, j = 2, k = 0: from = SourceS\x00XX to = SoYYYYYYYY ret = to + 1 i = 7, j = 2, k = 1: from = SourceS\x00XX to = SoYYYYYYYY ret = to + 1 i = 7, j = 2, k = 2: from = SourceS\x00XX to = So\x00YYYYYYY ret = to + 1 i = 7, j = 2, k = 3: from = SourceS\x00XX to = Sos\x00YYYYYY ret = to + 1 i = 7, j = 2, k = 4: from = SourceS\x00XX to = Sost\x00YYYYY ret = to + 1 i = 7, j = 2, k = 5: from = SourceS\x00XX to = Sosti\x00YYYY ret = to + 1 i = 7, j = 2, k = 6: from = SourceS\x00XX to = Sostin\x00YYY ret = to + 1 i = 7, j = 2, k = 7: from = SourceS\x00XX to = Sostina\x00YY ret = to + 1 i = 7, j = 2, k = 8: from = SourceS\x00XX to = Sostinat\x00Y ret = to + 1 i = 7, j = 2, k = 9: from = SourceS\x00XX to = Sostinati\x00 ret = to + 1 i = 7, j = 3, k = 0: from = SourceS\x00XX to = SouYYYYYYY ret = to + 2 i = 7, j = 3, k = 1: from = SourceS\x00XX to = SouYYYYYYY ret = to + 2 i = 7, j = 3, k = 2: from = SourceS\x00XX to = SouYYYYYYY ret = to + 2 i = 7, j = 3, k = 3: from = SourceS\x00XX to = Sou\x00YYYYYY ret = to + 2 i = 7, j = 3, k = 4: from = SourceS\x00XX to = Sout\x00YYYYY ret = to + 2 i = 7, j = 3, k = 5: from = SourceS\x00XX to = Souti\x00YYYY ret = to + 2 i = 7, j = 3, k = 6: from = SourceS\x00XX to = Soutin\x00YYY ret = to + 2 i = 7, j = 3, k = 7: from = SourceS\x00XX to = Soutina\x00YY ret = to + 2 i = 7, j = 3, k = 8: from = SourceS\x00XX to = Soutinat\x00Y ret = to + 2 i = 7, j = 3, k = 9: from = SourceS\x00XX to = Soutinati\x00 ret = to + 2 i = 7, j = 4, k = 0: from = SourceS\x00XX to = SourYYYYYY ret = to + 3 i = 7, j = 4, k = 1: from = SourceS\x00XX to = SourYYYYYY ret = to + 3 i = 7, j = 4, k = 2: from = SourceS\x00XX to = SourYYYYYY ret = to + 3 i = 7, j = 4, k = 3: from = SourceS\x00XX to = SourYYYYYY ret = to + 3 i = 7, j = 4, k = 4: from = SourceS\x00XX to = Sour\x00YYYYY ret = to + 3 i = 7, j = 4, k = 5: from = SourceS\x00XX to = Souri\x00YYYY ret = to + 3 i = 7, j = 4, k = 6: from = SourceS\x00XX to = Sourin\x00YYY ret = to + 3 i = 7, j = 4, k = 7: from = SourceS\x00XX to = Sourina\x00YY ret = to + 3 i = 7, j = 4, k = 8: from = SourceS\x00XX to = Sourinat\x00Y ret = to + 3 i = 7, j = 4, k = 9: from = SourceS\x00XX to = Sourinati\x00 ret = to + 3 i = 7, j = 5, k = 0: from = SourceS\x00XX to = SourcYYYYY ret = to + 4 i = 7, j = 5, k = 1: from = SourceS\x00XX to = SourcYYYYY ret = to + 4 i = 7, j = 5, k = 2: from = SourceS\x00XX to = SourcYYYYY ret = to + 4 i = 7, j = 5, k = 3: from = SourceS\x00XX to = SourcYYYYY ret = to + 4 i = 7, j = 5, k = 4: from = SourceS\x00XX to = SourcYYYYY ret = to + 4 i = 7, j = 5, k = 5: from = SourceS\x00XX to = Sourc\x00YYYY ret = to + 4 i = 7, j = 5, k = 6: from = SourceS\x00XX to = Sourcn\x00YYY ret = to + 4 i = 7, j = 5, k = 7: from = SourceS\x00XX to = Sourcna\x00YY ret = to + 4 i = 7, j = 5, k = 8: from = SourceS\x00XX to = Sourcnat\x00Y ret = to + 4 i = 7, j = 5, k = 9: from = SourceS\x00XX to = Sourcnati\x00 ret = to + 4 i = 7, j = 6, k = 0: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 1: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 2: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 3: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 4: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 5: from = SourceS\x00XX to = SourceYYYY ret = to + 5 i = 7, j = 6, k = 6: from = SourceS\x00XX to = Source\x00YYY ret = to + 5 i = 7, j = 6, k = 7: from = SourceS\x00XX to = Sourcea\x00YY ret = to + 5 i = 7, j = 6, k = 8: from = SourceS\x00XX to = Sourceat\x00Y ret = to + 5 i = 7, j = 6, k = 9: from = SourceS\x00XX to = Sourceati\x00 ret = to + 5 i = 7, j = 7, k = 0: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 1: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 2: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 3: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 4: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 5: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 6: from = SourceS\x00XX to = SourceSYYY ret = to + 6 i = 7, j = 7, k = 7: from = SourceS\x00XX to = SourceS\x00YY ret = to + 6 i = 7, j = 7, k = 8: from = SourceS\x00XX to = SourceSt\x00Y ret = to + 6 i = 7, j = 7, k = 9: from = SourceS\x00XX to = SourceSti\x00 ret = to + 6 i = 7, j = 8, k = 0: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 1: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 2: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 3: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 4: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 5: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 6: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 7: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 8: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 8, k = 9: from = SourceS\x00XX to = SourceS\x00i\x00 ret = to + 7 i = 7, j = 9, k = 0: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 1: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 2: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 3: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 4: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 5: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 6: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 7: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 8: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 8 i = 7, j = 9, k = 9: from = SourceS\x00XX to = SourceS\x00\x00\x00 ret = to + 8 i = 8, j = 0, k = 0: from = SourceSt\x00X to = \x00YYYYYYYYY ret = to + 0 i = 8, j = 0, k = 1: from = SourceSt\x00X to = D\x00YYYYYYYY ret = to + 0 i = 8, j = 0, k = 2: from = SourceSt\x00X to = De\x00YYYYYYY ret = to + 0 i = 8, j = 0, k = 3: from = SourceSt\x00X to = Des\x00YYYYYY ret = to + 0 i = 8, j = 0, k = 4: from = SourceSt\x00X to = Dest\x00YYYYY ret = to + 0 i = 8, j = 0, k = 5: from = SourceSt\x00X to = Desti\x00YYYY ret = to + 0 i = 8, j = 0, k = 6: from = SourceSt\x00X to = Destin\x00YYY ret = to + 0 i = 8, j = 0, k = 7: from = SourceSt\x00X to = Destina\x00YY ret = to + 0 i = 8, j = 0, k = 8: from = SourceSt\x00X to = Destinat\x00Y ret = to + 0 i = 8, j = 0, k = 9: from = SourceSt\x00X to = Destinati\x00 ret = to + 0 i = 8, j = 1, k = 0: from = SourceSt\x00X to = SYYYYYYYYY ret = to + 0 i = 8, j = 1, k = 1: from = SourceSt\x00X to = S\x00YYYYYYYY ret = to + 0 i = 8, j = 1, k = 2: from = SourceSt\x00X to = Se\x00YYYYYYY ret = to + 0 i = 8, j = 1, k = 3: from = SourceSt\x00X to = Ses\x00YYYYYY ret = to + 0 i = 8, j = 1, k = 4: from = SourceSt\x00X to = Sest\x00YYYYY ret = to + 0 i = 8, j = 1, k = 5: from = SourceSt\x00X to = Sesti\x00YYYY ret = to + 0 i = 8, j = 1, k = 6: from = SourceSt\x00X to = Sestin\x00YYY ret = to + 0 i = 8, j = 1, k = 7: from = SourceSt\x00X to = Sestina\x00YY ret = to + 0 i = 8, j = 1, k = 8: from = SourceSt\x00X to = Sestinat\x00Y ret = to + 0 i = 8, j = 1, k = 9: from = SourceSt\x00X to = Sestinati\x00 ret = to + 0 i = 8, j = 2, k = 0: from = SourceSt\x00X to = SoYYYYYYYY ret = to + 1 i = 8, j = 2, k = 1: from = SourceSt\x00X to = SoYYYYYYYY ret = to + 1 i = 8, j = 2, k = 2: from = SourceSt\x00X to = So\x00YYYYYYY ret = to + 1 i = 8, j = 2, k = 3: from = SourceSt\x00X to = Sos\x00YYYYYY ret = to + 1 i = 8, j = 2, k = 4: from = SourceSt\x00X to = Sost\x00YYYYY ret = to + 1 i = 8, j = 2, k = 5: from = SourceSt\x00X to = Sosti\x00YYYY ret = to + 1 i = 8, j = 2, k = 6: from = SourceSt\x00X to = Sostin\x00YYY ret = to + 1 i = 8, j = 2, k = 7: from = SourceSt\x00X to = Sostina\x00YY ret = to + 1 i = 8, j = 2, k = 8: from = SourceSt\x00X to = Sostinat\x00Y ret = to + 1 i = 8, j = 2, k = 9: from = SourceSt\x00X to = Sostinati\x00 ret = to + 1 i = 8, j = 3, k = 0: from = SourceSt\x00X to = SouYYYYYYY ret = to + 2 i = 8, j = 3, k = 1: from = SourceSt\x00X to = SouYYYYYYY ret = to + 2 i = 8, j = 3, k = 2: from = SourceSt\x00X to = SouYYYYYYY ret = to + 2 i = 8, j = 3, k = 3: from = SourceSt\x00X to = Sou\x00YYYYYY ret = to + 2 i = 8, j = 3, k = 4: from = SourceSt\x00X to = Sout\x00YYYYY ret = to + 2 i = 8, j = 3, k = 5: from = SourceSt\x00X to = Souti\x00YYYY ret = to + 2 i = 8, j = 3, k = 6: from = SourceSt\x00X to = Soutin\x00YYY ret = to + 2 i = 8, j = 3, k = 7: from = SourceSt\x00X to = Soutina\x00YY ret = to + 2 i = 8, j = 3, k = 8: from = SourceSt\x00X to = Soutinat\x00Y ret = to + 2 i = 8, j = 3, k = 9: from = SourceSt\x00X to = Soutinati\x00 ret = to + 2 i = 8, j = 4, k = 0: from = SourceSt\x00X to = SourYYYYYY ret = to + 3 i = 8, j = 4, k = 1: from = SourceSt\x00X to = SourYYYYYY ret = to + 3 i = 8, j = 4, k = 2: from = SourceSt\x00X to = SourYYYYYY ret = to + 3 i = 8, j = 4, k = 3: from = SourceSt\x00X to = SourYYYYYY ret = to + 3 i = 8, j = 4, k = 4: from = SourceSt\x00X to = Sour\x00YYYYY ret = to + 3 i = 8, j = 4, k = 5: from = SourceSt\x00X to = Souri\x00YYYY ret = to + 3 i = 8, j = 4, k = 6: from = SourceSt\x00X to = Sourin\x00YYY ret = to + 3 i = 8, j = 4, k = 7: from = SourceSt\x00X to = Sourina\x00YY ret = to + 3 i = 8, j = 4, k = 8: from = SourceSt\x00X to = Sourinat\x00Y ret = to + 3 i = 8, j = 4, k = 9: from = SourceSt\x00X to = Sourinati\x00 ret = to + 3 i = 8, j = 5, k = 0: from = SourceSt\x00X to = SourcYYYYY ret = to + 4 i = 8, j = 5, k = 1: from = SourceSt\x00X to = SourcYYYYY ret = to + 4 i = 8, j = 5, k = 2: from = SourceSt\x00X to = SourcYYYYY ret = to + 4 i = 8, j = 5, k = 3: from = SourceSt\x00X to = SourcYYYYY ret = to + 4 i = 8, j = 5, k = 4: from = SourceSt\x00X to = SourcYYYYY ret = to + 4 i = 8, j = 5, k = 5: from = SourceSt\x00X to = Sourc\x00YYYY ret = to + 4 i = 8, j = 5, k = 6: from = SourceSt\x00X to = Sourcn\x00YYY ret = to + 4 i = 8, j = 5, k = 7: from = SourceSt\x00X to = Sourcna\x00YY ret = to + 4 i = 8, j = 5, k = 8: from = SourceSt\x00X to = Sourcnat\x00Y ret = to + 4 i = 8, j = 5, k = 9: from = SourceSt\x00X to = Sourcnati\x00 ret = to + 4 i = 8, j = 6, k = 0: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 1: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 2: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 3: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 4: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 5: from = SourceSt\x00X to = SourceYYYY ret = to + 5 i = 8, j = 6, k = 6: from = SourceSt\x00X to = Source\x00YYY ret = to + 5 i = 8, j = 6, k = 7: from = SourceSt\x00X to = Sourcea\x00YY ret = to + 5 i = 8, j = 6, k = 8: from = SourceSt\x00X to = Sourceat\x00Y ret = to + 5 i = 8, j = 6, k = 9: from = SourceSt\x00X to = Sourceati\x00 ret = to + 5 i = 8, j = 7, k = 0: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 1: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 2: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 3: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 4: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 5: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 6: from = SourceSt\x00X to = SourceSYYY ret = to + 6 i = 8, j = 7, k = 7: from = SourceSt\x00X to = SourceS\x00YY ret = to + 6 i = 8, j = 7, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 6 i = 8, j = 7, k = 9: from = SourceSt\x00X to = SourceSti\x00 ret = to + 6 i = 8, j = 8, k = 0: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 1: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 2: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 3: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 4: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 5: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 6: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 7: from = SourceSt\x00X to = SourceStYY ret = to + 7 i = 8, j = 8, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 7 i = 8, j = 8, k = 9: from = SourceSt\x00X to = SourceSti\x00 ret = to + 7 i = 8, j = 9, k = 0: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 1: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 2: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 3: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 4: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 5: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 6: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 7: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 9: from = SourceSt\x00X to = SourceSt\x00\x00 ret = to + 8 i = 9, j = 0, k = 0: from = SourceStr\x00 to = \x00YYYYYYYYY ret = to + 0 i = 9, j = 0, k = 1: from = SourceStr\x00 to = D\x00YYYYYYYY ret = to + 0 i = 9, j = 0, k = 2: from = SourceStr\x00 to = De\x00YYYYYYY ret = to + 0 i = 9, j = 0, k = 3: from = SourceStr\x00 to = Des\x00YYYYYY ret = to + 0 i = 9, j = 0, k = 4: from = SourceStr\x00 to = Dest\x00YYYYY ret = to + 0 i = 9, j = 0, k = 5: from = SourceStr\x00 to = Desti\x00YYYY ret = to + 0 i = 9, j = 0, k = 6: from = SourceStr\x00 to = Destin\x00YYY ret = to + 0 i = 9, j = 0, k = 7: from = SourceStr\x00 to = Destina\x00YY ret = to + 0 i = 9, j = 0, k = 8: from = SourceStr\x00 to = Destinat\x00Y ret = to + 0 i = 9, j = 0, k = 9: from = SourceStr\x00 to = Destinati\x00 ret = to + 0 i = 9, j = 1, k = 0: from = SourceStr\x00 to = SYYYYYYYYY ret = to + 0 i = 9, j = 1, k = 1: from = SourceStr\x00 to = S\x00YYYYYYYY ret = to + 0 i = 9, j = 1, k = 2: from = SourceStr\x00 to = Se\x00YYYYYYY ret = to + 0 i = 9, j = 1, k = 3: from = SourceStr\x00 to = Ses\x00YYYYYY ret = to + 0 i = 9, j = 1, k = 4: from = SourceStr\x00 to = Sest\x00YYYYY ret = to + 0 i = 9, j = 1, k = 5: from = SourceStr\x00 to = Sesti\x00YYYY ret = to + 0 i = 9, j = 1, k = 6: from = SourceStr\x00 to = Sestin\x00YYY ret = to + 0 i = 9, j = 1, k = 7: from = SourceStr\x00 to = Sestina\x00YY ret = to + 0 i = 9, j = 1, k = 8: from = SourceStr\x00 to = Sestinat\x00Y ret = to + 0 i = 9, j = 1, k = 9: from = SourceStr\x00 to = Sestinati\x00 ret = to + 0 i = 9, j = 2, k = 0: from = SourceStr\x00 to = SoYYYYYYYY ret = to + 1 i = 9, j = 2, k = 1: from = SourceStr\x00 to = SoYYYYYYYY ret = to + 1 i = 9, j = 2, k = 2: from = SourceStr\x00 to = So\x00YYYYYYY ret = to + 1 i = 9, j = 2, k = 3: from = SourceStr\x00 to = Sos\x00YYYYYY ret = to + 1 i = 9, j = 2, k = 4: from = SourceStr\x00 to = Sost\x00YYYYY ret = to + 1 i = 9, j = 2, k = 5: from = SourceStr\x00 to = Sosti\x00YYYY ret = to + 1 i = 9, j = 2, k = 6: from = SourceStr\x00 to = Sostin\x00YYY ret = to + 1 i = 9, j = 2, k = 7: from = SourceStr\x00 to = Sostina\x00YY ret = to + 1 i = 9, j = 2, k = 8: from = SourceStr\x00 to = Sostinat\x00Y ret = to + 1 i = 9, j = 2, k = 9: from = SourceStr\x00 to = Sostinati\x00 ret = to + 1 i = 9, j = 3, k = 0: from = SourceStr\x00 to = SouYYYYYYY ret = to + 2 i = 9, j = 3, k = 1: from = SourceStr\x00 to = SouYYYYYYY ret = to + 2 i = 9, j = 3, k = 2: from = SourceStr\x00 to = SouYYYYYYY ret = to + 2 i = 9, j = 3, k = 3: from = SourceStr\x00 to = Sou\x00YYYYYY ret = to + 2 i = 9, j = 3, k = 4: from = SourceStr\x00 to = Sout\x00YYYYY ret = to + 2 i = 9, j = 3, k = 5: from = SourceStr\x00 to = Souti\x00YYYY ret = to + 2 i = 9, j = 3, k = 6: from = SourceStr\x00 to = Soutin\x00YYY ret = to + 2 i = 9, j = 3, k = 7: from = SourceStr\x00 to = Soutina\x00YY ret = to + 2 i = 9, j = 3, k = 8: from = SourceStr\x00 to = Soutinat\x00Y ret = to + 2 i = 9, j = 3, k = 9: from = SourceStr\x00 to = Soutinati\x00 ret = to + 2 i = 9, j = 4, k = 0: from = SourceStr\x00 to = SourYYYYYY ret = to + 3 i = 9, j = 4, k = 1: from = SourceStr\x00 to = SourYYYYYY ret = to + 3 i = 9, j = 4, k = 2: from = SourceStr\x00 to = SourYYYYYY ret = to + 3 i = 9, j = 4, k = 3: from = SourceStr\x00 to = SourYYYYYY ret = to + 3 i = 9, j = 4, k = 4: from = SourceStr\x00 to = Sour\x00YYYYY ret = to + 3 i = 9, j = 4, k = 5: from = SourceStr\x00 to = Souri\x00YYYY ret = to + 3 i = 9, j = 4, k = 6: from = SourceStr\x00 to = Sourin\x00YYY ret = to + 3 i = 9, j = 4, k = 7: from = SourceStr\x00 to = Sourina\x00YY ret = to + 3 i = 9, j = 4, k = 8: from = SourceStr\x00 to = Sourinat\x00Y ret = to + 3 i = 9, j = 4, k = 9: from = SourceStr\x00 to = Sourinati\x00 ret = to + 3 i = 9, j = 5, k = 0: from = SourceStr\x00 to = SourcYYYYY ret = to + 4 i = 9, j = 5, k = 1: from = SourceStr\x00 to = SourcYYYYY ret = to + 4 i = 9, j = 5, k = 2: from = SourceStr\x00 to = SourcYYYYY ret = to + 4 i = 9, j = 5, k = 3: from = SourceStr\x00 to = SourcYYYYY ret = to + 4 i = 9, j = 5, k = 4: from = SourceStr\x00 to = SourcYYYYY ret = to + 4 i = 9, j = 5, k = 5: from = SourceStr\x00 to = Sourc\x00YYYY ret = to + 4 i = 9, j = 5, k = 6: from = SourceStr\x00 to = Sourcn\x00YYY ret = to + 4 i = 9, j = 5, k = 7: from = SourceStr\x00 to = Sourcna\x00YY ret = to + 4 i = 9, j = 5, k = 8: from = SourceStr\x00 to = Sourcnat\x00Y ret = to + 4 i = 9, j = 5, k = 9: from = SourceStr\x00 to = Sourcnati\x00 ret = to + 4 i = 9, j = 6, k = 0: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 1: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 2: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 3: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 4: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 5: from = SourceStr\x00 to = SourceYYYY ret = to + 5 i = 9, j = 6, k = 6: from = SourceStr\x00 to = Source\x00YYY ret = to + 5 i = 9, j = 6, k = 7: from = SourceStr\x00 to = Sourcea\x00YY ret = to + 5 i = 9, j = 6, k = 8: from = SourceStr\x00 to = Sourceat\x00Y ret = to + 5 i = 9, j = 6, k = 9: from = SourceStr\x00 to = Sourceati\x00 ret = to + 5 i = 9, j = 7, k = 0: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 1: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 2: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 3: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 4: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 5: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 6: from = SourceStr\x00 to = SourceSYYY ret = to + 6 i = 9, j = 7, k = 7: from = SourceStr\x00 to = SourceS\x00YY ret = to + 6 i = 9, j = 7, k = 8: from = SourceStr\x00 to = SourceSt\x00Y ret = to + 6 i = 9, j = 7, k = 9: from = SourceStr\x00 to = SourceSti\x00 ret = to + 6 i = 9, j = 8, k = 0: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 1: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 2: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 3: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 4: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 5: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 6: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 7: from = SourceStr\x00 to = SourceStYY ret = to + 7 i = 9, j = 8, k = 8: from = SourceStr\x00 to = SourceSt\x00Y ret = to + 7 i = 9, j = 8, k = 9: from = SourceStr\x00 to = SourceSti\x00 ret = to + 7 i = 9, j = 9, k = 0: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 1: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 2: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 3: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 4: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 5: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 6: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 7: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 8: from = SourceStr\x00 to = SourceStrY ret = to + 8 i = 9, j = 9, k = 9: from = SourceStr\x00 to = SourceStr\x00 ret = to + 8 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-stpncpy.out.glibc������������������������������������������������0000664�0000000�0000000�00000243220�14110572173�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������i = 0, j = 0, k = 0: from = \x00XXXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 0, j = 0, k = 1: from = \x00XXXXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 0, j = 0, k = 2: from = \x00XXXXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 0, j = 0, k = 3: from = \x00XXXXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 0, j = 0, k = 4: from = \x00XXXXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 0, j = 0, k = 5: from = \x00XXXXXXXXX to = Desti\x00YYYY ret = to + 0 i = 0, j = 0, k = 6: from = \x00XXXXXXXXX to = Destin\x00YYY ret = to + 0 i = 0, j = 0, k = 7: from = \x00XXXXXXXXX to = Destina\x00YY ret = to + 0 i = 0, j = 0, k = 8: from = \x00XXXXXXXXX to = Destinat\x00Y ret = to + 0 i = 0, j = 0, k = 9: from = \x00XXXXXXXXX to = Destinati\x00 ret = to + 0 i = 0, j = 1, k = 0: from = \x00XXXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 0, j = 1, k = 1: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 0 i = 0, j = 1, k = 2: from = \x00XXXXXXXXX to = \x00e\x00YYYYYYY ret = to + 0 i = 0, j = 1, k = 3: from = \x00XXXXXXXXX to = \x00es\x00YYYYYY ret = to + 0 i = 0, j = 1, k = 4: from = \x00XXXXXXXXX to = \x00est\x00YYYYY ret = to + 0 i = 0, j = 1, k = 5: from = \x00XXXXXXXXX to = \x00esti\x00YYYY ret = to + 0 i = 0, j = 1, k = 6: from = \x00XXXXXXXXX to = \x00estin\x00YYY ret = to + 0 i = 0, j = 1, k = 7: from = \x00XXXXXXXXX to = \x00estina\x00YY ret = to + 0 i = 0, j = 1, k = 8: from = \x00XXXXXXXXX to = \x00estinat\x00Y ret = to + 0 i = 0, j = 1, k = 9: from = \x00XXXXXXXXX to = \x00estinati\x00 ret = to + 0 i = 0, j = 2, k = 0: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 0 i = 0, j = 2, k = 1: from = \x00XXXXXXXXX to = \x00\x00YYYYYYYY ret = to + 0 i = 0, j = 2, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 0 i = 0, j = 2, k = 3: from = \x00XXXXXXXXX to = \x00\x00s\x00YYYYYY ret = to + 0 i = 0, j = 2, k = 4: from = \x00XXXXXXXXX to = \x00\x00st\x00YYYYY ret = to + 0 i = 0, j = 2, k = 5: from = \x00XXXXXXXXX to = \x00\x00sti\x00YYYY ret = to + 0 i = 0, j = 2, k = 6: from = \x00XXXXXXXXX to = \x00\x00stin\x00YYY ret = to + 0 i = 0, j = 2, k = 7: from = \x00XXXXXXXXX to = \x00\x00stina\x00YY ret = to + 0 i = 0, j = 2, k = 8: from = \x00XXXXXXXXX to = \x00\x00stinat\x00Y ret = to + 0 i = 0, j = 2, k = 9: from = \x00XXXXXXXXX to = \x00\x00stinati\x00 ret = to + 0 i = 0, j = 3, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 0 i = 0, j = 3, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 0 i = 0, j = 3, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00YYYYYYY ret = to + 0 i = 0, j = 3, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 0 i = 0, j = 3, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00t\x00YYYYY ret = to + 0 i = 0, j = 3, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00ti\x00YYYY ret = to + 0 i = 0, j = 3, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00tin\x00YYY ret = to + 0 i = 0, j = 3, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00tina\x00YY ret = to + 0 i = 0, j = 3, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00tinat\x00Y ret = to + 0 i = 0, j = 3, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00tinati\x00 ret = to + 0 i = 0, j = 4, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 0 i = 0, j = 4, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 0 i = 0, j = 4, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 0 i = 0, j = 4, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00YYYYYY ret = to + 0 i = 0, j = 4, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 4, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00i\x00YYYY ret = to + 0 i = 0, j = 4, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00in\x00YYY ret = to + 0 i = 0, j = 4, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00ina\x00YY ret = to + 0 i = 0, j = 4, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00inat\x00Y ret = to + 0 i = 0, j = 4, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00inati\x00 ret = to + 0 i = 0, j = 5, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 5, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 5, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 5, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 5, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00YYYYY ret = to + 0 i = 0, j = 5, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 5, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00n\x00YYY ret = to + 0 i = 0, j = 5, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00na\x00YY ret = to + 0 i = 0, j = 5, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00nat\x00Y ret = to + 0 i = 0, j = 5, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00nati\x00 ret = to + 0 i = 0, j = 6, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00YYYY ret = to + 0 i = 0, j = 6, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 6, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00a\x00YY ret = to + 0 i = 0, j = 6, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00at\x00Y ret = to + 0 i = 0, j = 6, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00ati\x00 ret = to + 0 i = 0, j = 7, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00YYY ret = to + 0 i = 0, j = 7, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 7, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00t\x00Y ret = to + 0 i = 0, j = 7, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00ti\x00 ret = to + 0 i = 0, j = 8, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00YY ret = to + 0 i = 0, j = 8, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 8, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00i\x00 ret = to + 0 i = 0, j = 9, k = 0: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 1: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 2: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 3: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 4: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 5: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 6: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 7: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 8: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 0 i = 0, j = 9, k = 9: from = \x00XXXXXXXXX to = \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 0 i = 1, j = 0, k = 0: from = S\x00XXXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 1, j = 0, k = 1: from = S\x00XXXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 1, j = 0, k = 2: from = S\x00XXXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 1, j = 0, k = 3: from = S\x00XXXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 1, j = 0, k = 4: from = S\x00XXXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 1, j = 0, k = 5: from = S\x00XXXXXXXX to = Desti\x00YYYY ret = to + 0 i = 1, j = 0, k = 6: from = S\x00XXXXXXXX to = Destin\x00YYY ret = to + 0 i = 1, j = 0, k = 7: from = S\x00XXXXXXXX to = Destina\x00YY ret = to + 0 i = 1, j = 0, k = 8: from = S\x00XXXXXXXX to = Destinat\x00Y ret = to + 0 i = 1, j = 0, k = 9: from = S\x00XXXXXXXX to = Destinati\x00 ret = to + 0 i = 1, j = 1, k = 0: from = S\x00XXXXXXXX to = SYYYYYYYYY ret = to + 1 i = 1, j = 1, k = 1: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 1, j = 1, k = 2: from = S\x00XXXXXXXX to = Se\x00YYYYYYY ret = to + 1 i = 1, j = 1, k = 3: from = S\x00XXXXXXXX to = Ses\x00YYYYYY ret = to + 1 i = 1, j = 1, k = 4: from = S\x00XXXXXXXX to = Sest\x00YYYYY ret = to + 1 i = 1, j = 1, k = 5: from = S\x00XXXXXXXX to = Sesti\x00YYYY ret = to + 1 i = 1, j = 1, k = 6: from = S\x00XXXXXXXX to = Sestin\x00YYY ret = to + 1 i = 1, j = 1, k = 7: from = S\x00XXXXXXXX to = Sestina\x00YY ret = to + 1 i = 1, j = 1, k = 8: from = S\x00XXXXXXXX to = Sestinat\x00Y ret = to + 1 i = 1, j = 1, k = 9: from = S\x00XXXXXXXX to = Sestinati\x00 ret = to + 1 i = 1, j = 2, k = 0: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 1, j = 2, k = 1: from = S\x00XXXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 1, j = 2, k = 2: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 1 i = 1, j = 2, k = 3: from = S\x00XXXXXXXX to = S\x00s\x00YYYYYY ret = to + 1 i = 1, j = 2, k = 4: from = S\x00XXXXXXXX to = S\x00st\x00YYYYY ret = to + 1 i = 1, j = 2, k = 5: from = S\x00XXXXXXXX to = S\x00sti\x00YYYY ret = to + 1 i = 1, j = 2, k = 6: from = S\x00XXXXXXXX to = S\x00stin\x00YYY ret = to + 1 i = 1, j = 2, k = 7: from = S\x00XXXXXXXX to = S\x00stina\x00YY ret = to + 1 i = 1, j = 2, k = 8: from = S\x00XXXXXXXX to = S\x00stinat\x00Y ret = to + 1 i = 1, j = 2, k = 9: from = S\x00XXXXXXXX to = S\x00stinati\x00 ret = to + 1 i = 1, j = 3, k = 0: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 1 i = 1, j = 3, k = 1: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 1 i = 1, j = 3, k = 2: from = S\x00XXXXXXXX to = S\x00\x00YYYYYYY ret = to + 1 i = 1, j = 3, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 1 i = 1, j = 3, k = 4: from = S\x00XXXXXXXX to = S\x00\x00t\x00YYYYY ret = to + 1 i = 1, j = 3, k = 5: from = S\x00XXXXXXXX to = S\x00\x00ti\x00YYYY ret = to + 1 i = 1, j = 3, k = 6: from = S\x00XXXXXXXX to = S\x00\x00tin\x00YYY ret = to + 1 i = 1, j = 3, k = 7: from = S\x00XXXXXXXX to = S\x00\x00tina\x00YY ret = to + 1 i = 1, j = 3, k = 8: from = S\x00XXXXXXXX to = S\x00\x00tinat\x00Y ret = to + 1 i = 1, j = 3, k = 9: from = S\x00XXXXXXXX to = S\x00\x00tinati\x00 ret = to + 1 i = 1, j = 4, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 1 i = 1, j = 4, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 1 i = 1, j = 4, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 1 i = 1, j = 4, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00YYYYYY ret = to + 1 i = 1, j = 4, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 4, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00i\x00YYYY ret = to + 1 i = 1, j = 4, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00in\x00YYY ret = to + 1 i = 1, j = 4, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00ina\x00YY ret = to + 1 i = 1, j = 4, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00inat\x00Y ret = to + 1 i = 1, j = 4, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00inati\x00 ret = to + 1 i = 1, j = 5, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 5, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 5, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 5, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 5, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00YYYYY ret = to + 1 i = 1, j = 5, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 5, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00n\x00YYY ret = to + 1 i = 1, j = 5, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00na\x00YY ret = to + 1 i = 1, j = 5, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00nat\x00Y ret = to + 1 i = 1, j = 5, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00nati\x00 ret = to + 1 i = 1, j = 6, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00YYYY ret = to + 1 i = 1, j = 6, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 6, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00a\x00YY ret = to + 1 i = 1, j = 6, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00at\x00Y ret = to + 1 i = 1, j = 6, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00ati\x00 ret = to + 1 i = 1, j = 7, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00YYY ret = to + 1 i = 1, j = 7, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 7, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00t\x00Y ret = to + 1 i = 1, j = 7, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00ti\x00 ret = to + 1 i = 1, j = 8, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00YY ret = to + 1 i = 1, j = 8, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 8, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00i\x00 ret = to + 1 i = 1, j = 9, k = 0: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 1: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 2: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 3: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 4: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 5: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 6: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 7: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 8: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00Y ret = to + 1 i = 1, j = 9, k = 9: from = S\x00XXXXXXXX to = S\x00\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 1 i = 2, j = 0, k = 0: from = So\x00XXXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 2, j = 0, k = 1: from = So\x00XXXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 2, j = 0, k = 2: from = So\x00XXXXXXX to = De\x00YYYYYYY ret = to + 0 i = 2, j = 0, k = 3: from = So\x00XXXXXXX to = Des\x00YYYYYY ret = to + 0 i = 2, j = 0, k = 4: from = So\x00XXXXXXX to = Dest\x00YYYYY ret = to + 0 i = 2, j = 0, k = 5: from = So\x00XXXXXXX to = Desti\x00YYYY ret = to + 0 i = 2, j = 0, k = 6: from = So\x00XXXXXXX to = Destin\x00YYY ret = to + 0 i = 2, j = 0, k = 7: from = So\x00XXXXXXX to = Destina\x00YY ret = to + 0 i = 2, j = 0, k = 8: from = So\x00XXXXXXX to = Destinat\x00Y ret = to + 0 i = 2, j = 0, k = 9: from = So\x00XXXXXXX to = Destinati\x00 ret = to + 0 i = 2, j = 1, k = 0: from = So\x00XXXXXXX to = SYYYYYYYYY ret = to + 1 i = 2, j = 1, k = 1: from = So\x00XXXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 2, j = 1, k = 2: from = So\x00XXXXXXX to = Se\x00YYYYYYY ret = to + 1 i = 2, j = 1, k = 3: from = So\x00XXXXXXX to = Ses\x00YYYYYY ret = to + 1 i = 2, j = 1, k = 4: from = So\x00XXXXXXX to = Sest\x00YYYYY ret = to + 1 i = 2, j = 1, k = 5: from = So\x00XXXXXXX to = Sesti\x00YYYY ret = to + 1 i = 2, j = 1, k = 6: from = So\x00XXXXXXX to = Sestin\x00YYY ret = to + 1 i = 2, j = 1, k = 7: from = So\x00XXXXXXX to = Sestina\x00YY ret = to + 1 i = 2, j = 1, k = 8: from = So\x00XXXXXXX to = Sestinat\x00Y ret = to + 1 i = 2, j = 1, k = 9: from = So\x00XXXXXXX to = Sestinati\x00 ret = to + 1 i = 2, j = 2, k = 0: from = So\x00XXXXXXX to = SoYYYYYYYY ret = to + 2 i = 2, j = 2, k = 1: from = So\x00XXXXXXX to = SoYYYYYYYY ret = to + 2 i = 2, j = 2, k = 2: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 2, k = 3: from = So\x00XXXXXXX to = Sos\x00YYYYYY ret = to + 2 i = 2, j = 2, k = 4: from = So\x00XXXXXXX to = Sost\x00YYYYY ret = to + 2 i = 2, j = 2, k = 5: from = So\x00XXXXXXX to = Sosti\x00YYYY ret = to + 2 i = 2, j = 2, k = 6: from = So\x00XXXXXXX to = Sostin\x00YYY ret = to + 2 i = 2, j = 2, k = 7: from = So\x00XXXXXXX to = Sostina\x00YY ret = to + 2 i = 2, j = 2, k = 8: from = So\x00XXXXXXX to = Sostinat\x00Y ret = to + 2 i = 2, j = 2, k = 9: from = So\x00XXXXXXX to = Sostinati\x00 ret = to + 2 i = 2, j = 3, k = 0: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 1: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 2: from = So\x00XXXXXXX to = So\x00YYYYYYY ret = to + 2 i = 2, j = 3, k = 3: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 3, k = 4: from = So\x00XXXXXXX to = So\x00t\x00YYYYY ret = to + 2 i = 2, j = 3, k = 5: from = So\x00XXXXXXX to = So\x00ti\x00YYYY ret = to + 2 i = 2, j = 3, k = 6: from = So\x00XXXXXXX to = So\x00tin\x00YYY ret = to + 2 i = 2, j = 3, k = 7: from = So\x00XXXXXXX to = So\x00tina\x00YY ret = to + 2 i = 2, j = 3, k = 8: from = So\x00XXXXXXX to = So\x00tinat\x00Y ret = to + 2 i = 2, j = 3, k = 9: from = So\x00XXXXXXX to = So\x00tinati\x00 ret = to + 2 i = 2, j = 4, k = 0: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 4, k = 1: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 4, k = 2: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 4, k = 3: from = So\x00XXXXXXX to = So\x00\x00YYYYYY ret = to + 2 i = 2, j = 4, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 4, k = 5: from = So\x00XXXXXXX to = So\x00\x00i\x00YYYY ret = to + 2 i = 2, j = 4, k = 6: from = So\x00XXXXXXX to = So\x00\x00in\x00YYY ret = to + 2 i = 2, j = 4, k = 7: from = So\x00XXXXXXX to = So\x00\x00ina\x00YY ret = to + 2 i = 2, j = 4, k = 8: from = So\x00XXXXXXX to = So\x00\x00inat\x00Y ret = to + 2 i = 2, j = 4, k = 9: from = So\x00XXXXXXX to = So\x00\x00inati\x00 ret = to + 2 i = 2, j = 5, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 5, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 5, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 5, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 5, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00YYYYY ret = to + 2 i = 2, j = 5, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 5, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00n\x00YYY ret = to + 2 i = 2, j = 5, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00na\x00YY ret = to + 2 i = 2, j = 5, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00nat\x00Y ret = to + 2 i = 2, j = 5, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00nati\x00 ret = to + 2 i = 2, j = 6, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00YYYY ret = to + 2 i = 2, j = 6, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 6, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00a\x00YY ret = to + 2 i = 2, j = 6, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00at\x00Y ret = to + 2 i = 2, j = 6, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00ati\x00 ret = to + 2 i = 2, j = 7, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00YYY ret = to + 2 i = 2, j = 7, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 7, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00t\x00Y ret = to + 2 i = 2, j = 7, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00ti\x00 ret = to + 2 i = 2, j = 8, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00YY ret = to + 2 i = 2, j = 8, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 8, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00i\x00 ret = to + 2 i = 2, j = 9, k = 0: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 1: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 2: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 3: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 4: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 5: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 6: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 7: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 8: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00Y ret = to + 2 i = 2, j = 9, k = 9: from = So\x00XXXXXXX to = So\x00\x00\x00\x00\x00\x00\x00\x00 ret = to + 2 i = 3, j = 0, k = 0: from = Sou\x00XXXXXX to = \x00YYYYYYYYY ret = to + 0 i = 3, j = 0, k = 1: from = Sou\x00XXXXXX to = D\x00YYYYYYYY ret = to + 0 i = 3, j = 0, k = 2: from = Sou\x00XXXXXX to = De\x00YYYYYYY ret = to + 0 i = 3, j = 0, k = 3: from = Sou\x00XXXXXX to = Des\x00YYYYYY ret = to + 0 i = 3, j = 0, k = 4: from = Sou\x00XXXXXX to = Dest\x00YYYYY ret = to + 0 i = 3, j = 0, k = 5: from = Sou\x00XXXXXX to = Desti\x00YYYY ret = to + 0 i = 3, j = 0, k = 6: from = Sou\x00XXXXXX to = Destin\x00YYY ret = to + 0 i = 3, j = 0, k = 7: from = Sou\x00XXXXXX to = Destina\x00YY ret = to + 0 i = 3, j = 0, k = 8: from = Sou\x00XXXXXX to = Destinat\x00Y ret = to + 0 i = 3, j = 0, k = 9: from = Sou\x00XXXXXX to = Destinati\x00 ret = to + 0 i = 3, j = 1, k = 0: from = Sou\x00XXXXXX to = SYYYYYYYYY ret = to + 1 i = 3, j = 1, k = 1: from = Sou\x00XXXXXX to = S\x00YYYYYYYY ret = to + 1 i = 3, j = 1, k = 2: from = Sou\x00XXXXXX to = Se\x00YYYYYYY ret = to + 1 i = 3, j = 1, k = 3: from = Sou\x00XXXXXX to = Ses\x00YYYYYY ret = to + 1 i = 3, j = 1, k = 4: from = Sou\x00XXXXXX to = Sest\x00YYYYY ret = to + 1 i = 3, j = 1, k = 5: from = Sou\x00XXXXXX to = Sesti\x00YYYY ret = to + 1 i = 3, j = 1, k = 6: from = Sou\x00XXXXXX to = Sestin\x00YYY ret = to + 1 i = 3, j = 1, k = 7: from = Sou\x00XXXXXX to = Sestina\x00YY ret = to + 1 i = 3, j = 1, k = 8: from = Sou\x00XXXXXX to = Sestinat\x00Y ret = to + 1 i = 3, j = 1, k = 9: from = Sou\x00XXXXXX to = Sestinati\x00 ret = to + 1 i = 3, j = 2, k = 0: from = Sou\x00XXXXXX to = SoYYYYYYYY ret = to + 2 i = 3, j = 2, k = 1: from = Sou\x00XXXXXX to = SoYYYYYYYY ret = to + 2 i = 3, j = 2, k = 2: from = Sou\x00XXXXXX to = So\x00YYYYYYY ret = to + 2 i = 3, j = 2, k = 3: from = Sou\x00XXXXXX to = Sos\x00YYYYYY ret = to + 2 i = 3, j = 2, k = 4: from = Sou\x00XXXXXX to = Sost\x00YYYYY ret = to + 2 i = 3, j = 2, k = 5: from = Sou\x00XXXXXX to = Sosti\x00YYYY ret = to + 2 i = 3, j = 2, k = 6: from = Sou\x00XXXXXX to = Sostin\x00YYY ret = to + 2 i = 3, j = 2, k = 7: from = Sou\x00XXXXXX to = Sostina\x00YY ret = to + 2 i = 3, j = 2, k = 8: from = Sou\x00XXXXXX to = Sostinat\x00Y ret = to + 2 i = 3, j = 2, k = 9: from = Sou\x00XXXXXX to = Sostinati\x00 ret = to + 2 i = 3, j = 3, k = 0: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 3 i = 3, j = 3, k = 1: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 3 i = 3, j = 3, k = 2: from = Sou\x00XXXXXX to = SouYYYYYYY ret = to + 3 i = 3, j = 3, k = 3: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 3, k = 4: from = Sou\x00XXXXXX to = Sout\x00YYYYY ret = to + 3 i = 3, j = 3, k = 5: from = Sou\x00XXXXXX to = Souti\x00YYYY ret = to + 3 i = 3, j = 3, k = 6: from = Sou\x00XXXXXX to = Soutin\x00YYY ret = to + 3 i = 3, j = 3, k = 7: from = Sou\x00XXXXXX to = Soutina\x00YY ret = to + 3 i = 3, j = 3, k = 8: from = Sou\x00XXXXXX to = Soutinat\x00Y ret = to + 3 i = 3, j = 3, k = 9: from = Sou\x00XXXXXX to = Soutinati\x00 ret = to + 3 i = 3, j = 4, k = 0: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 1: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 2: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 3: from = Sou\x00XXXXXX to = Sou\x00YYYYYY ret = to + 3 i = 3, j = 4, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 4, k = 5: from = Sou\x00XXXXXX to = Sou\x00i\x00YYYY ret = to + 3 i = 3, j = 4, k = 6: from = Sou\x00XXXXXX to = Sou\x00in\x00YYY ret = to + 3 i = 3, j = 4, k = 7: from = Sou\x00XXXXXX to = Sou\x00ina\x00YY ret = to + 3 i = 3, j = 4, k = 8: from = Sou\x00XXXXXX to = Sou\x00inat\x00Y ret = to + 3 i = 3, j = 4, k = 9: from = Sou\x00XXXXXX to = Sou\x00inati\x00 ret = to + 3 i = 3, j = 5, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 5, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 5, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 5, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 5, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00YYYYY ret = to + 3 i = 3, j = 5, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 5, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00n\x00YYY ret = to + 3 i = 3, j = 5, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00na\x00YY ret = to + 3 i = 3, j = 5, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00nat\x00Y ret = to + 3 i = 3, j = 5, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00nati\x00 ret = to + 3 i = 3, j = 6, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00YYYY ret = to + 3 i = 3, j = 6, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 6, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00a\x00YY ret = to + 3 i = 3, j = 6, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00at\x00Y ret = to + 3 i = 3, j = 6, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00ati\x00 ret = to + 3 i = 3, j = 7, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00YYY ret = to + 3 i = 3, j = 7, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 7, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00t\x00Y ret = to + 3 i = 3, j = 7, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00ti\x00 ret = to + 3 i = 3, j = 8, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00YY ret = to + 3 i = 3, j = 8, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 8, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00i\x00 ret = to + 3 i = 3, j = 9, k = 0: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 1: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 2: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 3: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 4: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 5: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 6: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 7: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 8: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00Y ret = to + 3 i = 3, j = 9, k = 9: from = Sou\x00XXXXXX to = Sou\x00\x00\x00\x00\x00\x00\x00 ret = to + 3 i = 4, j = 0, k = 0: from = Sour\x00XXXXX to = \x00YYYYYYYYY ret = to + 0 i = 4, j = 0, k = 1: from = Sour\x00XXXXX to = D\x00YYYYYYYY ret = to + 0 i = 4, j = 0, k = 2: from = Sour\x00XXXXX to = De\x00YYYYYYY ret = to + 0 i = 4, j = 0, k = 3: from = Sour\x00XXXXX to = Des\x00YYYYYY ret = to + 0 i = 4, j = 0, k = 4: from = Sour\x00XXXXX to = Dest\x00YYYYY ret = to + 0 i = 4, j = 0, k = 5: from = Sour\x00XXXXX to = Desti\x00YYYY ret = to + 0 i = 4, j = 0, k = 6: from = Sour\x00XXXXX to = Destin\x00YYY ret = to + 0 i = 4, j = 0, k = 7: from = Sour\x00XXXXX to = Destina\x00YY ret = to + 0 i = 4, j = 0, k = 8: from = Sour\x00XXXXX to = Destinat\x00Y ret = to + 0 i = 4, j = 0, k = 9: from = Sour\x00XXXXX to = Destinati\x00 ret = to + 0 i = 4, j = 1, k = 0: from = Sour\x00XXXXX to = SYYYYYYYYY ret = to + 1 i = 4, j = 1, k = 1: from = Sour\x00XXXXX to = S\x00YYYYYYYY ret = to + 1 i = 4, j = 1, k = 2: from = Sour\x00XXXXX to = Se\x00YYYYYYY ret = to + 1 i = 4, j = 1, k = 3: from = Sour\x00XXXXX to = Ses\x00YYYYYY ret = to + 1 i = 4, j = 1, k = 4: from = Sour\x00XXXXX to = Sest\x00YYYYY ret = to + 1 i = 4, j = 1, k = 5: from = Sour\x00XXXXX to = Sesti\x00YYYY ret = to + 1 i = 4, j = 1, k = 6: from = Sour\x00XXXXX to = Sestin\x00YYY ret = to + 1 i = 4, j = 1, k = 7: from = Sour\x00XXXXX to = Sestina\x00YY ret = to + 1 i = 4, j = 1, k = 8: from = Sour\x00XXXXX to = Sestinat\x00Y ret = to + 1 i = 4, j = 1, k = 9: from = Sour\x00XXXXX to = Sestinati\x00 ret = to + 1 i = 4, j = 2, k = 0: from = Sour\x00XXXXX to = SoYYYYYYYY ret = to + 2 i = 4, j = 2, k = 1: from = Sour\x00XXXXX to = SoYYYYYYYY ret = to + 2 i = 4, j = 2, k = 2: from = Sour\x00XXXXX to = So\x00YYYYYYY ret = to + 2 i = 4, j = 2, k = 3: from = Sour\x00XXXXX to = Sos\x00YYYYYY ret = to + 2 i = 4, j = 2, k = 4: from = Sour\x00XXXXX to = Sost\x00YYYYY ret = to + 2 i = 4, j = 2, k = 5: from = Sour\x00XXXXX to = Sosti\x00YYYY ret = to + 2 i = 4, j = 2, k = 6: from = Sour\x00XXXXX to = Sostin\x00YYY ret = to + 2 i = 4, j = 2, k = 7: from = Sour\x00XXXXX to = Sostina\x00YY ret = to + 2 i = 4, j = 2, k = 8: from = Sour\x00XXXXX to = Sostinat\x00Y ret = to + 2 i = 4, j = 2, k = 9: from = Sour\x00XXXXX to = Sostinati\x00 ret = to + 2 i = 4, j = 3, k = 0: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 3 i = 4, j = 3, k = 1: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 3 i = 4, j = 3, k = 2: from = Sour\x00XXXXX to = SouYYYYYYY ret = to + 3 i = 4, j = 3, k = 3: from = Sour\x00XXXXX to = Sou\x00YYYYYY ret = to + 3 i = 4, j = 3, k = 4: from = Sour\x00XXXXX to = Sout\x00YYYYY ret = to + 3 i = 4, j = 3, k = 5: from = Sour\x00XXXXX to = Souti\x00YYYY ret = to + 3 i = 4, j = 3, k = 6: from = Sour\x00XXXXX to = Soutin\x00YYY ret = to + 3 i = 4, j = 3, k = 7: from = Sour\x00XXXXX to = Soutina\x00YY ret = to + 3 i = 4, j = 3, k = 8: from = Sour\x00XXXXX to = Soutinat\x00Y ret = to + 3 i = 4, j = 3, k = 9: from = Sour\x00XXXXX to = Soutinati\x00 ret = to + 3 i = 4, j = 4, k = 0: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 4 i = 4, j = 4, k = 1: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 4 i = 4, j = 4, k = 2: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 4 i = 4, j = 4, k = 3: from = Sour\x00XXXXX to = SourYYYYYY ret = to + 4 i = 4, j = 4, k = 4: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 4, k = 5: from = Sour\x00XXXXX to = Souri\x00YYYY ret = to + 4 i = 4, j = 4, k = 6: from = Sour\x00XXXXX to = Sourin\x00YYY ret = to + 4 i = 4, j = 4, k = 7: from = Sour\x00XXXXX to = Sourina\x00YY ret = to + 4 i = 4, j = 4, k = 8: from = Sour\x00XXXXX to = Sourinat\x00Y ret = to + 4 i = 4, j = 4, k = 9: from = Sour\x00XXXXX to = Sourinati\x00 ret = to + 4 i = 4, j = 5, k = 0: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 1: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 2: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 3: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 4: from = Sour\x00XXXXX to = Sour\x00YYYYY ret = to + 4 i = 4, j = 5, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 5, k = 6: from = Sour\x00XXXXX to = Sour\x00n\x00YYY ret = to + 4 i = 4, j = 5, k = 7: from = Sour\x00XXXXX to = Sour\x00na\x00YY ret = to + 4 i = 4, j = 5, k = 8: from = Sour\x00XXXXX to = Sour\x00nat\x00Y ret = to + 4 i = 4, j = 5, k = 9: from = Sour\x00XXXXX to = Sour\x00nati\x00 ret = to + 4 i = 4, j = 6, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00YYYY ret = to + 4 i = 4, j = 6, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 6, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00a\x00YY ret = to + 4 i = 4, j = 6, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00at\x00Y ret = to + 4 i = 4, j = 6, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00ati\x00 ret = to + 4 i = 4, j = 7, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00YYY ret = to + 4 i = 4, j = 7, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 7, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00t\x00Y ret = to + 4 i = 4, j = 7, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00ti\x00 ret = to + 4 i = 4, j = 8, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00YY ret = to + 4 i = 4, j = 8, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 8, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00i\x00 ret = to + 4 i = 4, j = 9, k = 0: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 1: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 2: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 3: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 4: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 5: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 6: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 7: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 8: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00Y ret = to + 4 i = 4, j = 9, k = 9: from = Sour\x00XXXXX to = Sour\x00\x00\x00\x00\x00\x00 ret = to + 4 i = 5, j = 0, k = 0: from = Sourc\x00XXXX to = \x00YYYYYYYYY ret = to + 0 i = 5, j = 0, k = 1: from = Sourc\x00XXXX to = D\x00YYYYYYYY ret = to + 0 i = 5, j = 0, k = 2: from = Sourc\x00XXXX to = De\x00YYYYYYY ret = to + 0 i = 5, j = 0, k = 3: from = Sourc\x00XXXX to = Des\x00YYYYYY ret = to + 0 i = 5, j = 0, k = 4: from = Sourc\x00XXXX to = Dest\x00YYYYY ret = to + 0 i = 5, j = 0, k = 5: from = Sourc\x00XXXX to = Desti\x00YYYY ret = to + 0 i = 5, j = 0, k = 6: from = Sourc\x00XXXX to = Destin\x00YYY ret = to + 0 i = 5, j = 0, k = 7: from = Sourc\x00XXXX to = Destina\x00YY ret = to + 0 i = 5, j = 0, k = 8: from = Sourc\x00XXXX to = Destinat\x00Y ret = to + 0 i = 5, j = 0, k = 9: from = Sourc\x00XXXX to = Destinati\x00 ret = to + 0 i = 5, j = 1, k = 0: from = Sourc\x00XXXX to = SYYYYYYYYY ret = to + 1 i = 5, j = 1, k = 1: from = Sourc\x00XXXX to = S\x00YYYYYYYY ret = to + 1 i = 5, j = 1, k = 2: from = Sourc\x00XXXX to = Se\x00YYYYYYY ret = to + 1 i = 5, j = 1, k = 3: from = Sourc\x00XXXX to = Ses\x00YYYYYY ret = to + 1 i = 5, j = 1, k = 4: from = Sourc\x00XXXX to = Sest\x00YYYYY ret = to + 1 i = 5, j = 1, k = 5: from = Sourc\x00XXXX to = Sesti\x00YYYY ret = to + 1 i = 5, j = 1, k = 6: from = Sourc\x00XXXX to = Sestin\x00YYY ret = to + 1 i = 5, j = 1, k = 7: from = Sourc\x00XXXX to = Sestina\x00YY ret = to + 1 i = 5, j = 1, k = 8: from = Sourc\x00XXXX to = Sestinat\x00Y ret = to + 1 i = 5, j = 1, k = 9: from = Sourc\x00XXXX to = Sestinati\x00 ret = to + 1 i = 5, j = 2, k = 0: from = Sourc\x00XXXX to = SoYYYYYYYY ret = to + 2 i = 5, j = 2, k = 1: from = Sourc\x00XXXX to = SoYYYYYYYY ret = to + 2 i = 5, j = 2, k = 2: from = Sourc\x00XXXX to = So\x00YYYYYYY ret = to + 2 i = 5, j = 2, k = 3: from = Sourc\x00XXXX to = Sos\x00YYYYYY ret = to + 2 i = 5, j = 2, k = 4: from = Sourc\x00XXXX to = Sost\x00YYYYY ret = to + 2 i = 5, j = 2, k = 5: from = Sourc\x00XXXX to = Sosti\x00YYYY ret = to + 2 i = 5, j = 2, k = 6: from = Sourc\x00XXXX to = Sostin\x00YYY ret = to + 2 i = 5, j = 2, k = 7: from = Sourc\x00XXXX to = Sostina\x00YY ret = to + 2 i = 5, j = 2, k = 8: from = Sourc\x00XXXX to = Sostinat\x00Y ret = to + 2 i = 5, j = 2, k = 9: from = Sourc\x00XXXX to = Sostinati\x00 ret = to + 2 i = 5, j = 3, k = 0: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 3 i = 5, j = 3, k = 1: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 3 i = 5, j = 3, k = 2: from = Sourc\x00XXXX to = SouYYYYYYY ret = to + 3 i = 5, j = 3, k = 3: from = Sourc\x00XXXX to = Sou\x00YYYYYY ret = to + 3 i = 5, j = 3, k = 4: from = Sourc\x00XXXX to = Sout\x00YYYYY ret = to + 3 i = 5, j = 3, k = 5: from = Sourc\x00XXXX to = Souti\x00YYYY ret = to + 3 i = 5, j = 3, k = 6: from = Sourc\x00XXXX to = Soutin\x00YYY ret = to + 3 i = 5, j = 3, k = 7: from = Sourc\x00XXXX to = Soutina\x00YY ret = to + 3 i = 5, j = 3, k = 8: from = Sourc\x00XXXX to = Soutinat\x00Y ret = to + 3 i = 5, j = 3, k = 9: from = Sourc\x00XXXX to = Soutinati\x00 ret = to + 3 i = 5, j = 4, k = 0: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 4 i = 5, j = 4, k = 1: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 4 i = 5, j = 4, k = 2: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 4 i = 5, j = 4, k = 3: from = Sourc\x00XXXX to = SourYYYYYY ret = to + 4 i = 5, j = 4, k = 4: from = Sourc\x00XXXX to = Sour\x00YYYYY ret = to + 4 i = 5, j = 4, k = 5: from = Sourc\x00XXXX to = Souri\x00YYYY ret = to + 4 i = 5, j = 4, k = 6: from = Sourc\x00XXXX to = Sourin\x00YYY ret = to + 4 i = 5, j = 4, k = 7: from = Sourc\x00XXXX to = Sourina\x00YY ret = to + 4 i = 5, j = 4, k = 8: from = Sourc\x00XXXX to = Sourinat\x00Y ret = to + 4 i = 5, j = 4, k = 9: from = Sourc\x00XXXX to = Sourinati\x00 ret = to + 4 i = 5, j = 5, k = 0: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 5 i = 5, j = 5, k = 1: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 5 i = 5, j = 5, k = 2: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 5 i = 5, j = 5, k = 3: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 5 i = 5, j = 5, k = 4: from = Sourc\x00XXXX to = SourcYYYYY ret = to + 5 i = 5, j = 5, k = 5: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 5, k = 6: from = Sourc\x00XXXX to = Sourcn\x00YYY ret = to + 5 i = 5, j = 5, k = 7: from = Sourc\x00XXXX to = Sourcna\x00YY ret = to + 5 i = 5, j = 5, k = 8: from = Sourc\x00XXXX to = Sourcnat\x00Y ret = to + 5 i = 5, j = 5, k = 9: from = Sourc\x00XXXX to = Sourcnati\x00 ret = to + 5 i = 5, j = 6, k = 0: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 1: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 2: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 3: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 4: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 5: from = Sourc\x00XXXX to = Sourc\x00YYYY ret = to + 5 i = 5, j = 6, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 6, k = 7: from = Sourc\x00XXXX to = Sourc\x00a\x00YY ret = to + 5 i = 5, j = 6, k = 8: from = Sourc\x00XXXX to = Sourc\x00at\x00Y ret = to + 5 i = 5, j = 6, k = 9: from = Sourc\x00XXXX to = Sourc\x00ati\x00 ret = to + 5 i = 5, j = 7, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00YYY ret = to + 5 i = 5, j = 7, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 7, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00t\x00Y ret = to + 5 i = 5, j = 7, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00ti\x00 ret = to + 5 i = 5, j = 8, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00YY ret = to + 5 i = 5, j = 8, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 8, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00\x00i\x00 ret = to + 5 i = 5, j = 9, k = 0: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 1: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 2: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 3: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 4: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 5: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 6: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 7: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 8: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00Y ret = to + 5 i = 5, j = 9, k = 9: from = Sourc\x00XXXX to = Sourc\x00\x00\x00\x00\x00 ret = to + 5 i = 6, j = 0, k = 0: from = Source\x00XXX to = \x00YYYYYYYYY ret = to + 0 i = 6, j = 0, k = 1: from = Source\x00XXX to = D\x00YYYYYYYY ret = to + 0 i = 6, j = 0, k = 2: from = Source\x00XXX to = De\x00YYYYYYY ret = to + 0 i = 6, j = 0, k = 3: from = Source\x00XXX to = Des\x00YYYYYY ret = to + 0 i = 6, j = 0, k = 4: from = Source\x00XXX to = Dest\x00YYYYY ret = to + 0 i = 6, j = 0, k = 5: from = Source\x00XXX to = Desti\x00YYYY ret = to + 0 i = 6, j = 0, k = 6: from = Source\x00XXX to = Destin\x00YYY ret = to + 0 i = 6, j = 0, k = 7: from = Source\x00XXX to = Destina\x00YY ret = to + 0 i = 6, j = 0, k = 8: from = Source\x00XXX to = Destinat\x00Y ret = to + 0 i = 6, j = 0, k = 9: from = Source\x00XXX to = Destinati\x00 ret = to + 0 i = 6, j = 1, k = 0: from = Source\x00XXX to = SYYYYYYYYY ret = to + 1 i = 6, j = 1, k = 1: from = Source\x00XXX to = S\x00YYYYYYYY ret = to + 1 i = 6, j = 1, k = 2: from = Source\x00XXX to = Se\x00YYYYYYY ret = to + 1 i = 6, j = 1, k = 3: from = Source\x00XXX to = Ses\x00YYYYYY ret = to + 1 i = 6, j = 1, k = 4: from = Source\x00XXX to = Sest\x00YYYYY ret = to + 1 i = 6, j = 1, k = 5: from = Source\x00XXX to = Sesti\x00YYYY ret = to + 1 i = 6, j = 1, k = 6: from = Source\x00XXX to = Sestin\x00YYY ret = to + 1 i = 6, j = 1, k = 7: from = Source\x00XXX to = Sestina\x00YY ret = to + 1 i = 6, j = 1, k = 8: from = Source\x00XXX to = Sestinat\x00Y ret = to + 1 i = 6, j = 1, k = 9: from = Source\x00XXX to = Sestinati\x00 ret = to + 1 i = 6, j = 2, k = 0: from = Source\x00XXX to = SoYYYYYYYY ret = to + 2 i = 6, j = 2, k = 1: from = Source\x00XXX to = SoYYYYYYYY ret = to + 2 i = 6, j = 2, k = 2: from = Source\x00XXX to = So\x00YYYYYYY ret = to + 2 i = 6, j = 2, k = 3: from = Source\x00XXX to = Sos\x00YYYYYY ret = to + 2 i = 6, j = 2, k = 4: from = Source\x00XXX to = Sost\x00YYYYY ret = to + 2 i = 6, j = 2, k = 5: from = Source\x00XXX to = Sosti\x00YYYY ret = to + 2 i = 6, j = 2, k = 6: from = Source\x00XXX to = Sostin\x00YYY ret = to + 2 i = 6, j = 2, k = 7: from = Source\x00XXX to = Sostina\x00YY ret = to + 2 i = 6, j = 2, k = 8: from = Source\x00XXX to = Sostinat\x00Y ret = to + 2 i = 6, j = 2, k = 9: from = Source\x00XXX to = Sostinati\x00 ret = to + 2 i = 6, j = 3, k = 0: from = Source\x00XXX to = SouYYYYYYY ret = to + 3 i = 6, j = 3, k = 1: from = Source\x00XXX to = SouYYYYYYY ret = to + 3 i = 6, j = 3, k = 2: from = Source\x00XXX to = SouYYYYYYY ret = to + 3 i = 6, j = 3, k = 3: from = Source\x00XXX to = Sou\x00YYYYYY ret = to + 3 i = 6, j = 3, k = 4: from = Source\x00XXX to = Sout\x00YYYYY ret = to + 3 i = 6, j = 3, k = 5: from = Source\x00XXX to = Souti\x00YYYY ret = to + 3 i = 6, j = 3, k = 6: from = Source\x00XXX to = Soutin\x00YYY ret = to + 3 i = 6, j = 3, k = 7: from = Source\x00XXX to = Soutina\x00YY ret = to + 3 i = 6, j = 3, k = 8: from = Source\x00XXX to = Soutinat\x00Y ret = to + 3 i = 6, j = 3, k = 9: from = Source\x00XXX to = Soutinati\x00 ret = to + 3 i = 6, j = 4, k = 0: from = Source\x00XXX to = SourYYYYYY ret = to + 4 i = 6, j = 4, k = 1: from = Source\x00XXX to = SourYYYYYY ret = to + 4 i = 6, j = 4, k = 2: from = Source\x00XXX to = SourYYYYYY ret = to + 4 i = 6, j = 4, k = 3: from = Source\x00XXX to = SourYYYYYY ret = to + 4 i = 6, j = 4, k = 4: from = Source\x00XXX to = Sour\x00YYYYY ret = to + 4 i = 6, j = 4, k = 5: from = Source\x00XXX to = Souri\x00YYYY ret = to + 4 i = 6, j = 4, k = 6: from = Source\x00XXX to = Sourin\x00YYY ret = to + 4 i = 6, j = 4, k = 7: from = Source\x00XXX to = Sourina\x00YY ret = to + 4 i = 6, j = 4, k = 8: from = Source\x00XXX to = Sourinat\x00Y ret = to + 4 i = 6, j = 4, k = 9: from = Source\x00XXX to = Sourinati\x00 ret = to + 4 i = 6, j = 5, k = 0: from = Source\x00XXX to = SourcYYYYY ret = to + 5 i = 6, j = 5, k = 1: from = Source\x00XXX to = SourcYYYYY ret = to + 5 i = 6, j = 5, k = 2: from = Source\x00XXX to = SourcYYYYY ret = to + 5 i = 6, j = 5, k = 3: from = Source\x00XXX to = SourcYYYYY ret = to + 5 i = 6, j = 5, k = 4: from = Source\x00XXX to = SourcYYYYY ret = to + 5 i = 6, j = 5, k = 5: from = Source\x00XXX to = Sourc\x00YYYY ret = to + 5 i = 6, j = 5, k = 6: from = Source\x00XXX to = Sourcn\x00YYY ret = to + 5 i = 6, j = 5, k = 7: from = Source\x00XXX to = Sourcna\x00YY ret = to + 5 i = 6, j = 5, k = 8: from = Source\x00XXX to = Sourcnat\x00Y ret = to + 5 i = 6, j = 5, k = 9: from = Source\x00XXX to = Sourcnati\x00 ret = to + 5 i = 6, j = 6, k = 0: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 1: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 2: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 3: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 4: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 5: from = Source\x00XXX to = SourceYYYY ret = to + 6 i = 6, j = 6, k = 6: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 6, k = 7: from = Source\x00XXX to = Sourcea\x00YY ret = to + 6 i = 6, j = 6, k = 8: from = Source\x00XXX to = Sourceat\x00Y ret = to + 6 i = 6, j = 6, k = 9: from = Source\x00XXX to = Sourceati\x00 ret = to + 6 i = 6, j = 7, k = 0: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 1: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 2: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 3: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 4: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 5: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 6: from = Source\x00XXX to = Source\x00YYY ret = to + 6 i = 6, j = 7, k = 7: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 7, k = 8: from = Source\x00XXX to = Source\x00t\x00Y ret = to + 6 i = 6, j = 7, k = 9: from = Source\x00XXX to = Source\x00ti\x00 ret = to + 6 i = 6, j = 8, k = 0: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 1: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 2: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 3: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 4: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 5: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 6: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 7: from = Source\x00XXX to = Source\x00\x00YY ret = to + 6 i = 6, j = 8, k = 8: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 8, k = 9: from = Source\x00XXX to = Source\x00\x00i\x00 ret = to + 6 i = 6, j = 9, k = 0: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 1: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 2: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 3: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 4: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 5: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 6: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 7: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 8: from = Source\x00XXX to = Source\x00\x00\x00Y ret = to + 6 i = 6, j = 9, k = 9: from = Source\x00XXX to = Source\x00\x00\x00\x00 ret = to + 6 i = 7, j = 0, k = 0: from = SourceS\x00XX to = \x00YYYYYYYYY ret = to + 0 i = 7, j = 0, k = 1: from = SourceS\x00XX to = D\x00YYYYYYYY ret = to + 0 i = 7, j = 0, k = 2: from = SourceS\x00XX to = De\x00YYYYYYY ret = to + 0 i = 7, j = 0, k = 3: from = SourceS\x00XX to = Des\x00YYYYYY ret = to + 0 i = 7, j = 0, k = 4: from = SourceS\x00XX to = Dest\x00YYYYY ret = to + 0 i = 7, j = 0, k = 5: from = SourceS\x00XX to = Desti\x00YYYY ret = to + 0 i = 7, j = 0, k = 6: from = SourceS\x00XX to = Destin\x00YYY ret = to + 0 i = 7, j = 0, k = 7: from = SourceS\x00XX to = Destina\x00YY ret = to + 0 i = 7, j = 0, k = 8: from = SourceS\x00XX to = Destinat\x00Y ret = to + 0 i = 7, j = 0, k = 9: from = SourceS\x00XX to = Destinati\x00 ret = to + 0 i = 7, j = 1, k = 0: from = SourceS\x00XX to = SYYYYYYYYY ret = to + 1 i = 7, j = 1, k = 1: from = SourceS\x00XX to = S\x00YYYYYYYY ret = to + 1 i = 7, j = 1, k = 2: from = SourceS\x00XX to = Se\x00YYYYYYY ret = to + 1 i = 7, j = 1, k = 3: from = SourceS\x00XX to = Ses\x00YYYYYY ret = to + 1 i = 7, j = 1, k = 4: from = SourceS\x00XX to = Sest\x00YYYYY ret = to + 1 i = 7, j = 1, k = 5: from = SourceS\x00XX to = Sesti\x00YYYY ret = to + 1 i = 7, j = 1, k = 6: from = SourceS\x00XX to = Sestin\x00YYY ret = to + 1 i = 7, j = 1, k = 7: from = SourceS\x00XX to = Sestina\x00YY ret = to + 1 i = 7, j = 1, k = 8: from = SourceS\x00XX to = Sestinat\x00Y ret = to + 1 i = 7, j = 1, k = 9: from = SourceS\x00XX to = Sestinati\x00 ret = to + 1 i = 7, j = 2, k = 0: from = SourceS\x00XX to = SoYYYYYYYY ret = to + 2 i = 7, j = 2, k = 1: from = SourceS\x00XX to = SoYYYYYYYY ret = to + 2 i = 7, j = 2, k = 2: from = SourceS\x00XX to = So\x00YYYYYYY ret = to + 2 i = 7, j = 2, k = 3: from = SourceS\x00XX to = Sos\x00YYYYYY ret = to + 2 i = 7, j = 2, k = 4: from = SourceS\x00XX to = Sost\x00YYYYY ret = to + 2 i = 7, j = 2, k = 5: from = SourceS\x00XX to = Sosti\x00YYYY ret = to + 2 i = 7, j = 2, k = 6: from = SourceS\x00XX to = Sostin\x00YYY ret = to + 2 i = 7, j = 2, k = 7: from = SourceS\x00XX to = Sostina\x00YY ret = to + 2 i = 7, j = 2, k = 8: from = SourceS\x00XX to = Sostinat\x00Y ret = to + 2 i = 7, j = 2, k = 9: from = SourceS\x00XX to = Sostinati\x00 ret = to + 2 i = 7, j = 3, k = 0: from = SourceS\x00XX to = SouYYYYYYY ret = to + 3 i = 7, j = 3, k = 1: from = SourceS\x00XX to = SouYYYYYYY ret = to + 3 i = 7, j = 3, k = 2: from = SourceS\x00XX to = SouYYYYYYY ret = to + 3 i = 7, j = 3, k = 3: from = SourceS\x00XX to = Sou\x00YYYYYY ret = to + 3 i = 7, j = 3, k = 4: from = SourceS\x00XX to = Sout\x00YYYYY ret = to + 3 i = 7, j = 3, k = 5: from = SourceS\x00XX to = Souti\x00YYYY ret = to + 3 i = 7, j = 3, k = 6: from = SourceS\x00XX to = Soutin\x00YYY ret = to + 3 i = 7, j = 3, k = 7: from = SourceS\x00XX to = Soutina\x00YY ret = to + 3 i = 7, j = 3, k = 8: from = SourceS\x00XX to = Soutinat\x00Y ret = to + 3 i = 7, j = 3, k = 9: from = SourceS\x00XX to = Soutinati\x00 ret = to + 3 i = 7, j = 4, k = 0: from = SourceS\x00XX to = SourYYYYYY ret = to + 4 i = 7, j = 4, k = 1: from = SourceS\x00XX to = SourYYYYYY ret = to + 4 i = 7, j = 4, k = 2: from = SourceS\x00XX to = SourYYYYYY ret = to + 4 i = 7, j = 4, k = 3: from = SourceS\x00XX to = SourYYYYYY ret = to + 4 i = 7, j = 4, k = 4: from = SourceS\x00XX to = Sour\x00YYYYY ret = to + 4 i = 7, j = 4, k = 5: from = SourceS\x00XX to = Souri\x00YYYY ret = to + 4 i = 7, j = 4, k = 6: from = SourceS\x00XX to = Sourin\x00YYY ret = to + 4 i = 7, j = 4, k = 7: from = SourceS\x00XX to = Sourina\x00YY ret = to + 4 i = 7, j = 4, k = 8: from = SourceS\x00XX to = Sourinat\x00Y ret = to + 4 i = 7, j = 4, k = 9: from = SourceS\x00XX to = Sourinati\x00 ret = to + 4 i = 7, j = 5, k = 0: from = SourceS\x00XX to = SourcYYYYY ret = to + 5 i = 7, j = 5, k = 1: from = SourceS\x00XX to = SourcYYYYY ret = to + 5 i = 7, j = 5, k = 2: from = SourceS\x00XX to = SourcYYYYY ret = to + 5 i = 7, j = 5, k = 3: from = SourceS\x00XX to = SourcYYYYY ret = to + 5 i = 7, j = 5, k = 4: from = SourceS\x00XX to = SourcYYYYY ret = to + 5 i = 7, j = 5, k = 5: from = SourceS\x00XX to = Sourc\x00YYYY ret = to + 5 i = 7, j = 5, k = 6: from = SourceS\x00XX to = Sourcn\x00YYY ret = to + 5 i = 7, j = 5, k = 7: from = SourceS\x00XX to = Sourcna\x00YY ret = to + 5 i = 7, j = 5, k = 8: from = SourceS\x00XX to = Sourcnat\x00Y ret = to + 5 i = 7, j = 5, k = 9: from = SourceS\x00XX to = Sourcnati\x00 ret = to + 5 i = 7, j = 6, k = 0: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 1: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 2: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 3: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 4: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 5: from = SourceS\x00XX to = SourceYYYY ret = to + 6 i = 7, j = 6, k = 6: from = SourceS\x00XX to = Source\x00YYY ret = to + 6 i = 7, j = 6, k = 7: from = SourceS\x00XX to = Sourcea\x00YY ret = to + 6 i = 7, j = 6, k = 8: from = SourceS\x00XX to = Sourceat\x00Y ret = to + 6 i = 7, j = 6, k = 9: from = SourceS\x00XX to = Sourceati\x00 ret = to + 6 i = 7, j = 7, k = 0: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 1: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 2: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 3: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 4: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 5: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 6: from = SourceS\x00XX to = SourceSYYY ret = to + 7 i = 7, j = 7, k = 7: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 7, k = 8: from = SourceS\x00XX to = SourceSt\x00Y ret = to + 7 i = 7, j = 7, k = 9: from = SourceS\x00XX to = SourceSti\x00 ret = to + 7 i = 7, j = 8, k = 0: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 1: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 2: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 3: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 4: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 5: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 6: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 7: from = SourceS\x00XX to = SourceS\x00YY ret = to + 7 i = 7, j = 8, k = 8: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 8, k = 9: from = SourceS\x00XX to = SourceS\x00i\x00 ret = to + 7 i = 7, j = 9, k = 0: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 1: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 2: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 3: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 4: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 5: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 6: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 7: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 8: from = SourceS\x00XX to = SourceS\x00\x00Y ret = to + 7 i = 7, j = 9, k = 9: from = SourceS\x00XX to = SourceS\x00\x00\x00 ret = to + 7 i = 8, j = 0, k = 0: from = SourceSt\x00X to = \x00YYYYYYYYY ret = to + 0 i = 8, j = 0, k = 1: from = SourceSt\x00X to = D\x00YYYYYYYY ret = to + 0 i = 8, j = 0, k = 2: from = SourceSt\x00X to = De\x00YYYYYYY ret = to + 0 i = 8, j = 0, k = 3: from = SourceSt\x00X to = Des\x00YYYYYY ret = to + 0 i = 8, j = 0, k = 4: from = SourceSt\x00X to = Dest\x00YYYYY ret = to + 0 i = 8, j = 0, k = 5: from = SourceSt\x00X to = Desti\x00YYYY ret = to + 0 i = 8, j = 0, k = 6: from = SourceSt\x00X to = Destin\x00YYY ret = to + 0 i = 8, j = 0, k = 7: from = SourceSt\x00X to = Destina\x00YY ret = to + 0 i = 8, j = 0, k = 8: from = SourceSt\x00X to = Destinat\x00Y ret = to + 0 i = 8, j = 0, k = 9: from = SourceSt\x00X to = Destinati\x00 ret = to + 0 i = 8, j = 1, k = 0: from = SourceSt\x00X to = SYYYYYYYYY ret = to + 1 i = 8, j = 1, k = 1: from = SourceSt\x00X to = S\x00YYYYYYYY ret = to + 1 i = 8, j = 1, k = 2: from = SourceSt\x00X to = Se\x00YYYYYYY ret = to + 1 i = 8, j = 1, k = 3: from = SourceSt\x00X to = Ses\x00YYYYYY ret = to + 1 i = 8, j = 1, k = 4: from = SourceSt\x00X to = Sest\x00YYYYY ret = to + 1 i = 8, j = 1, k = 5: from = SourceSt\x00X to = Sesti\x00YYYY ret = to + 1 i = 8, j = 1, k = 6: from = SourceSt\x00X to = Sestin\x00YYY ret = to + 1 i = 8, j = 1, k = 7: from = SourceSt\x00X to = Sestina\x00YY ret = to + 1 i = 8, j = 1, k = 8: from = SourceSt\x00X to = Sestinat\x00Y ret = to + 1 i = 8, j = 1, k = 9: from = SourceSt\x00X to = Sestinati\x00 ret = to + 1 i = 8, j = 2, k = 0: from = SourceSt\x00X to = SoYYYYYYYY ret = to + 2 i = 8, j = 2, k = 1: from = SourceSt\x00X to = SoYYYYYYYY ret = to + 2 i = 8, j = 2, k = 2: from = SourceSt\x00X to = So\x00YYYYYYY ret = to + 2 i = 8, j = 2, k = 3: from = SourceSt\x00X to = Sos\x00YYYYYY ret = to + 2 i = 8, j = 2, k = 4: from = SourceSt\x00X to = Sost\x00YYYYY ret = to + 2 i = 8, j = 2, k = 5: from = SourceSt\x00X to = Sosti\x00YYYY ret = to + 2 i = 8, j = 2, k = 6: from = SourceSt\x00X to = Sostin\x00YYY ret = to + 2 i = 8, j = 2, k = 7: from = SourceSt\x00X to = Sostina\x00YY ret = to + 2 i = 8, j = 2, k = 8: from = SourceSt\x00X to = Sostinat\x00Y ret = to + 2 i = 8, j = 2, k = 9: from = SourceSt\x00X to = Sostinati\x00 ret = to + 2 i = 8, j = 3, k = 0: from = SourceSt\x00X to = SouYYYYYYY ret = to + 3 i = 8, j = 3, k = 1: from = SourceSt\x00X to = SouYYYYYYY ret = to + 3 i = 8, j = 3, k = 2: from = SourceSt\x00X to = SouYYYYYYY ret = to + 3 i = 8, j = 3, k = 3: from = SourceSt\x00X to = Sou\x00YYYYYY ret = to + 3 i = 8, j = 3, k = 4: from = SourceSt\x00X to = Sout\x00YYYYY ret = to + 3 i = 8, j = 3, k = 5: from = SourceSt\x00X to = Souti\x00YYYY ret = to + 3 i = 8, j = 3, k = 6: from = SourceSt\x00X to = Soutin\x00YYY ret = to + 3 i = 8, j = 3, k = 7: from = SourceSt\x00X to = Soutina\x00YY ret = to + 3 i = 8, j = 3, k = 8: from = SourceSt\x00X to = Soutinat\x00Y ret = to + 3 i = 8, j = 3, k = 9: from = SourceSt\x00X to = Soutinati\x00 ret = to + 3 i = 8, j = 4, k = 0: from = SourceSt\x00X to = SourYYYYYY ret = to + 4 i = 8, j = 4, k = 1: from = SourceSt\x00X to = SourYYYYYY ret = to + 4 i = 8, j = 4, k = 2: from = SourceSt\x00X to = SourYYYYYY ret = to + 4 i = 8, j = 4, k = 3: from = SourceSt\x00X to = SourYYYYYY ret = to + 4 i = 8, j = 4, k = 4: from = SourceSt\x00X to = Sour\x00YYYYY ret = to + 4 i = 8, j = 4, k = 5: from = SourceSt\x00X to = Souri\x00YYYY ret = to + 4 i = 8, j = 4, k = 6: from = SourceSt\x00X to = Sourin\x00YYY ret = to + 4 i = 8, j = 4, k = 7: from = SourceSt\x00X to = Sourina\x00YY ret = to + 4 i = 8, j = 4, k = 8: from = SourceSt\x00X to = Sourinat\x00Y ret = to + 4 i = 8, j = 4, k = 9: from = SourceSt\x00X to = Sourinati\x00 ret = to + 4 i = 8, j = 5, k = 0: from = SourceSt\x00X to = SourcYYYYY ret = to + 5 i = 8, j = 5, k = 1: from = SourceSt\x00X to = SourcYYYYY ret = to + 5 i = 8, j = 5, k = 2: from = SourceSt\x00X to = SourcYYYYY ret = to + 5 i = 8, j = 5, k = 3: from = SourceSt\x00X to = SourcYYYYY ret = to + 5 i = 8, j = 5, k = 4: from = SourceSt\x00X to = SourcYYYYY ret = to + 5 i = 8, j = 5, k = 5: from = SourceSt\x00X to = Sourc\x00YYYY ret = to + 5 i = 8, j = 5, k = 6: from = SourceSt\x00X to = Sourcn\x00YYY ret = to + 5 i = 8, j = 5, k = 7: from = SourceSt\x00X to = Sourcna\x00YY ret = to + 5 i = 8, j = 5, k = 8: from = SourceSt\x00X to = Sourcnat\x00Y ret = to + 5 i = 8, j = 5, k = 9: from = SourceSt\x00X to = Sourcnati\x00 ret = to + 5 i = 8, j = 6, k = 0: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 1: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 2: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 3: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 4: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 5: from = SourceSt\x00X to = SourceYYYY ret = to + 6 i = 8, j = 6, k = 6: from = SourceSt\x00X to = Source\x00YYY ret = to + 6 i = 8, j = 6, k = 7: from = SourceSt\x00X to = Sourcea\x00YY ret = to + 6 i = 8, j = 6, k = 8: from = SourceSt\x00X to = Sourceat\x00Y ret = to + 6 i = 8, j = 6, k = 9: from = SourceSt\x00X to = Sourceati\x00 ret = to + 6 i = 8, j = 7, k = 0: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 1: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 2: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 3: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 4: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 5: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 6: from = SourceSt\x00X to = SourceSYYY ret = to + 7 i = 8, j = 7, k = 7: from = SourceSt\x00X to = SourceS\x00YY ret = to + 7 i = 8, j = 7, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 7 i = 8, j = 7, k = 9: from = SourceSt\x00X to = SourceSti\x00 ret = to + 7 i = 8, j = 8, k = 0: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 1: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 2: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 3: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 4: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 5: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 6: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 7: from = SourceSt\x00X to = SourceStYY ret = to + 8 i = 8, j = 8, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 8, k = 9: from = SourceSt\x00X to = SourceSti\x00 ret = to + 8 i = 8, j = 9, k = 0: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 1: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 2: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 3: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 4: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 5: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 6: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 7: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 8: from = SourceSt\x00X to = SourceSt\x00Y ret = to + 8 i = 8, j = 9, k = 9: from = SourceSt\x00X to = SourceSt\x00\x00 ret = to + 8 i = 9, j = 0, k = 0: from = SourceStr\x00 to = \x00YYYYYYYYY ret = to + 0 i = 9, j = 0, k = 1: from = SourceStr\x00 to = D\x00YYYYYYYY ret = to + 0 i = 9, j = 0, k = 2: from = SourceStr\x00 to = De\x00YYYYYYY ret = to + 0 i = 9, j = 0, k = 3: from = SourceStr\x00 to = Des\x00YYYYYY ret = to + 0 i = 9, j = 0, k = 4: from = SourceStr\x00 to = Dest\x00YYYYY ret = to + 0 i = 9, j = 0, k = 5: from = SourceStr\x00 to = Desti\x00YYYY ret = to + 0 i = 9, j = 0, k = 6: from = SourceStr\x00 to = Destin\x00YYY ret = to + 0 i = 9, j = 0, k = 7: from = SourceStr\x00 to = Destina\x00YY ret = to + 0 i = 9, j = 0, k = 8: from = SourceStr\x00 to = Destinat\x00Y ret = to + 0 i = 9, j = 0, k = 9: from = SourceStr\x00 to = Destinati\x00 ret = to + 0 i = 9, j = 1, k = 0: from = SourceStr\x00 to = SYYYYYYYYY ret = to + 1 i = 9, j = 1, k = 1: from = SourceStr\x00 to = S\x00YYYYYYYY ret = to + 1 i = 9, j = 1, k = 2: from = SourceStr\x00 to = Se\x00YYYYYYY ret = to + 1 i = 9, j = 1, k = 3: from = SourceStr\x00 to = Ses\x00YYYYYY ret = to + 1 i = 9, j = 1, k = 4: from = SourceStr\x00 to = Sest\x00YYYYY ret = to + 1 i = 9, j = 1, k = 5: from = SourceStr\x00 to = Sesti\x00YYYY ret = to + 1 i = 9, j = 1, k = 6: from = SourceStr\x00 to = Sestin\x00YYY ret = to + 1 i = 9, j = 1, k = 7: from = SourceStr\x00 to = Sestina\x00YY ret = to + 1 i = 9, j = 1, k = 8: from = SourceStr\x00 to = Sestinat\x00Y ret = to + 1 i = 9, j = 1, k = 9: from = SourceStr\x00 to = Sestinati\x00 ret = to + 1 i = 9, j = 2, k = 0: from = SourceStr\x00 to = SoYYYYYYYY ret = to + 2 i = 9, j = 2, k = 1: from = SourceStr\x00 to = SoYYYYYYYY ret = to + 2 i = 9, j = 2, k = 2: from = SourceStr\x00 to = So\x00YYYYYYY ret = to + 2 i = 9, j = 2, k = 3: from = SourceStr\x00 to = Sos\x00YYYYYY ret = to + 2 i = 9, j = 2, k = 4: from = SourceStr\x00 to = Sost\x00YYYYY ret = to + 2 i = 9, j = 2, k = 5: from = SourceStr\x00 to = Sosti\x00YYYY ret = to + 2 i = 9, j = 2, k = 6: from = SourceStr\x00 to = Sostin\x00YYY ret = to + 2 i = 9, j = 2, k = 7: from = SourceStr\x00 to = Sostina\x00YY ret = to + 2 i = 9, j = 2, k = 8: from = SourceStr\x00 to = Sostinat\x00Y ret = to + 2 i = 9, j = 2, k = 9: from = SourceStr\x00 to = Sostinati\x00 ret = to + 2 i = 9, j = 3, k = 0: from = SourceStr\x00 to = SouYYYYYYY ret = to + 3 i = 9, j = 3, k = 1: from = SourceStr\x00 to = SouYYYYYYY ret = to + 3 i = 9, j = 3, k = 2: from = SourceStr\x00 to = SouYYYYYYY ret = to + 3 i = 9, j = 3, k = 3: from = SourceStr\x00 to = Sou\x00YYYYYY ret = to + 3 i = 9, j = 3, k = 4: from = SourceStr\x00 to = Sout\x00YYYYY ret = to + 3 i = 9, j = 3, k = 5: from = SourceStr\x00 to = Souti\x00YYYY ret = to + 3 i = 9, j = 3, k = 6: from = SourceStr\x00 to = Soutin\x00YYY ret = to + 3 i = 9, j = 3, k = 7: from = SourceStr\x00 to = Soutina\x00YY ret = to + 3 i = 9, j = 3, k = 8: from = SourceStr\x00 to = Soutinat\x00Y ret = to + 3 i = 9, j = 3, k = 9: from = SourceStr\x00 to = Soutinati\x00 ret = to + 3 i = 9, j = 4, k = 0: from = SourceStr\x00 to = SourYYYYYY ret = to + 4 i = 9, j = 4, k = 1: from = SourceStr\x00 to = SourYYYYYY ret = to + 4 i = 9, j = 4, k = 2: from = SourceStr\x00 to = SourYYYYYY ret = to + 4 i = 9, j = 4, k = 3: from = SourceStr\x00 to = SourYYYYYY ret = to + 4 i = 9, j = 4, k = 4: from = SourceStr\x00 to = Sour\x00YYYYY ret = to + 4 i = 9, j = 4, k = 5: from = SourceStr\x00 to = Souri\x00YYYY ret = to + 4 i = 9, j = 4, k = 6: from = SourceStr\x00 to = Sourin\x00YYY ret = to + 4 i = 9, j = 4, k = 7: from = SourceStr\x00 to = Sourina\x00YY ret = to + 4 i = 9, j = 4, k = 8: from = SourceStr\x00 to = Sourinat\x00Y ret = to + 4 i = 9, j = 4, k = 9: from = SourceStr\x00 to = Sourinati\x00 ret = to + 4 i = 9, j = 5, k = 0: from = SourceStr\x00 to = SourcYYYYY ret = to + 5 i = 9, j = 5, k = 1: from = SourceStr\x00 to = SourcYYYYY ret = to + 5 i = 9, j = 5, k = 2: from = SourceStr\x00 to = SourcYYYYY ret = to + 5 i = 9, j = 5, k = 3: from = SourceStr\x00 to = SourcYYYYY ret = to + 5 i = 9, j = 5, k = 4: from = SourceStr\x00 to = SourcYYYYY ret = to + 5 i = 9, j = 5, k = 5: from = SourceStr\x00 to = Sourc\x00YYYY ret = to + 5 i = 9, j = 5, k = 6: from = SourceStr\x00 to = Sourcn\x00YYY ret = to + 5 i = 9, j = 5, k = 7: from = SourceStr\x00 to = Sourcna\x00YY ret = to + 5 i = 9, j = 5, k = 8: from = SourceStr\x00 to = Sourcnat\x00Y ret = to + 5 i = 9, j = 5, k = 9: from = SourceStr\x00 to = Sourcnati\x00 ret = to + 5 i = 9, j = 6, k = 0: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 1: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 2: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 3: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 4: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 5: from = SourceStr\x00 to = SourceYYYY ret = to + 6 i = 9, j = 6, k = 6: from = SourceStr\x00 to = Source\x00YYY ret = to + 6 i = 9, j = 6, k = 7: from = SourceStr\x00 to = Sourcea\x00YY ret = to + 6 i = 9, j = 6, k = 8: from = SourceStr\x00 to = Sourceat\x00Y ret = to + 6 i = 9, j = 6, k = 9: from = SourceStr\x00 to = Sourceati\x00 ret = to + 6 i = 9, j = 7, k = 0: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 1: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 2: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 3: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 4: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 5: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 6: from = SourceStr\x00 to = SourceSYYY ret = to + 7 i = 9, j = 7, k = 7: from = SourceStr\x00 to = SourceS\x00YY ret = to + 7 i = 9, j = 7, k = 8: from = SourceStr\x00 to = SourceSt\x00Y ret = to + 7 i = 9, j = 7, k = 9: from = SourceStr\x00 to = SourceSti\x00 ret = to + 7 i = 9, j = 8, k = 0: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 1: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 2: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 3: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 4: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 5: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 6: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 7: from = SourceStr\x00 to = SourceStYY ret = to + 8 i = 9, j = 8, k = 8: from = SourceStr\x00 to = SourceSt\x00Y ret = to + 8 i = 9, j = 8, k = 9: from = SourceStr\x00 to = SourceSti\x00 ret = to + 8 i = 9, j = 9, k = 0: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 1: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 2: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 3: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 4: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 5: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 6: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 7: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 8: from = SourceStr\x00 to = SourceStrY ret = to + 9 i = 9, j = 9, k = 9: from = SourceStr\x00 to = SourceStr\x00 ret = to + 9 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strcasestr.c�����������������������������������������������������0000664�0000000�0000000�00000020052�14110572173�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (strcasestr, char *, (char const *, char const *)); #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. All known platforms that lack alarm also lack strcasestr, and the replacement strcasestr is known to not take too long. */ int alarm_value = 50; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { const char input[] = "foo"; const char *result = strcasestr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = strcasestr (input, "O"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strcasestr (input, "ABCDaBD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strcasestr (input, "ABCDaBE"); ASSERT (result == NULL); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strcasestr (input, "ABCDaBCD"); ASSERT (result == input + 11); } /* Check that a long periodic needle does not cause false positives. */ { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = strcasestr (input, need); ASSERT (result == NULL); } { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD_DA_B5_C2_A6_20" "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = strcasestr (input, need); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaAAAAaaaaaaa" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (strcasestr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (strcasestr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'a', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = strcasestr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } { /* Ensure that with a barely periodic "short" needle, strcasestr's search does not mistakenly skip just past the match point. This use of strcasestr would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_GNU_ld\n"; const char* p = strcasestr (haystack, needle); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.D."; const char *needle = ".d."; const char* p = strcasestr (haystack, needle); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, strcasestr finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'X', m); needle[m] = '\0'; p = strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strchrnul.c������������������������������������������������������0000664�0000000�0000000�00000004447�14110572173�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (strchrnul, char *, (char const *, int)); #include <stdlib.h> #include "macros.h" int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (strchrnul (input, 'a') == input); ASSERT (strchrnul (input, 'b') == input + 1); ASSERT (strchrnul (input, 'c') == input + 2); ASSERT (strchrnul (input, 'd') == input + 1026); ASSERT (strchrnul (input + 1, 'a') == input + n - 1); ASSERT (strchrnul (input + 1, 'e') == input + n - 2); ASSERT (strchrnul (input, 'f') == input + n); ASSERT (strchrnul (input, '\0') == input + n); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (strchrnul (input, 'c') == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = (j + 1) & 0xff; for (j = 1; j < 256; j++) { ASSERT (strchrnul (input + i, j) == input + i + j - 1); input[i + j - 1] = (j == 1 ? 2 : 1); ASSERT (strchrnul (input + i, j) == input + i + 255); input[i + j - 1] = j; } } } free (input); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strerror.c�������������������������������������������������������0000664�0000000�0000000�00000003710�14110572173�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strerror, char *, (int)); #include <errno.h> #include "macros.h" int main (void) { char *str; errno = 0; str = strerror (EACCES); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (ETIMEDOUT); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (EOVERFLOW); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; str = strerror (0); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); ASSERT (strstr (str, "nknown") == NULL); ASSERT (strstr (str, "ndefined") == NULL); /* POSIX requires strerror to produce a non-NULL result for all inputs; as an extension, we also guarantee a non-empty result. Reporting EINVAL is optional. */ errno = 0; str = strerror (-3); ASSERT (str); ASSERT (*str); ASSERT (errno == 0 || errno == EINVAL); return 0; } ��������������������������������������������������������gnulib-20210822~d383792/tests/test-strerror_r.c�����������������������������������������������������0000664�0000000�0000000�00000011464�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror_r() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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 <string.h> #include "signature.h" SIGNATURE_CHECK (strerror_r, int, (int, char *, size_t)); #include <errno.h> #include "macros.h" int main (void) { char buf[100]; int ret; /* Test results with valid errnum and enough room. */ errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EACCES, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (ETIMEDOUT, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EOVERFLOW, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; buf[0] = '\0'; ret = strerror_r (0, buf, sizeof buf); ASSERT (ret == 0); ASSERT (buf[0]); ASSERT (errno == 0); ASSERT (strstr (buf, "nknown") == NULL); ASSERT (strstr (buf, "ndefined") == NULL); /* Test results with out-of-range errnum and enough room. POSIX allows an empty string on success, and allows an unchanged buf on error, but these are not useful, so we guarantee contents. */ errno = 0; buf[0] = '^'; ret = strerror_r (-3, buf, sizeof buf); ASSERT (ret == 0 || ret == EINVAL); ASSERT (buf[0] != '^'); ASSERT (*buf); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* Test results with a too small buffer. POSIX requires an error; only ERANGE for 0 and valid errors, and a choice of ERANGE or EINVAL for out-of-range values. On error, POSIX permits buf to be empty, unchanged, or unterminated, but these are not useful, so we guarantee NUL-terminated truncated contents for all but size 0. http://austingroupbugs.net/view.php?id=398. Also ensure that no out-of-bounds writes occur. */ { int errs[] = { EACCES, 0, -3, }; int j; buf[sizeof buf - 1] = '\0'; for (j = 0; j < SIZEOF (errs); j++) { int err = errs[j]; char buf2[sizeof buf] = ""; size_t len; size_t i; strerror_r (err, buf2, sizeof buf2); len = strlen (buf2); ASSERT (len < sizeof buf); for (i = 0; i <= len; i++) { memset (buf, '^', sizeof buf - 1); errno = 0; ret = strerror_r (err, buf, i); ASSERT (errno == 0); if (j == 2) ASSERT (ret == ERANGE || ret == EINVAL); else ASSERT (ret == ERANGE); if (i) { ASSERT (strncmp (buf, buf2, i - 1) == 0); ASSERT (buf[i - 1] == '\0'); } ASSERT (strspn (buf + i, "^") == sizeof buf - 1 - i); } strcpy (buf, "BADFACE"); errno = 0; ret = strerror_r (err, buf, len + 1); ASSERT (ret != ERANGE); ASSERT (errno == 0); ASSERT (strcmp (buf, buf2) == 0); } } #if GNULIB_STRERROR /* Test that strerror_r does not clobber strerror buffer. On some platforms, this test can only succeed if gnulib also replaces strerror. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); strerror_r (EACCES, buf, sizeof buf); strerror_r (-5, buf, sizeof buf); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strerrorname_np.c������������������������������������������������0000664�0000000�0000000�00000124654�14110572173�0022016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerrorname_np() function. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 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> /* Specification. */ #include <string.h> #include "signature.h" SIGNATURE_CHECK (strerrorname_np, const char *, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Error codes specified by ISO C. */ ASSERT (strcmp (strerrorname_np (EDOM), "EDOM") == 0); ASSERT (strcmp (strerrorname_np (EILSEQ), "EILSEQ") == 0); ASSERT (strcmp (strerrorname_np (ERANGE), "ERANGE") == 0); /* Error codes specified by POSIX. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html> */ #if defined E2BIG ASSERT (strcmp (strerrorname_np (E2BIG), "E2BIG") == 0); #endif #if defined EACCES ASSERT (strcmp (strerrorname_np (EACCES), "EACCES") == 0); #endif #if defined EADDRINUSE ASSERT (strcmp (strerrorname_np (EADDRINUSE), "EADDRINUSE") == 0); #endif #if defined EADDRNOTAVAIL ASSERT (strcmp (strerrorname_np (EADDRNOTAVAIL), "EADDRNOTAVAIL") == 0); #endif #if defined EAFNOSUPPORT ASSERT (strcmp (strerrorname_np (EAFNOSUPPORT), "EAFNOSUPPORT") == 0); #endif #if defined EAGAIN ASSERT (strcmp (strerrorname_np (EAGAIN), "EAGAIN") == 0); #endif #if defined EALREADY ASSERT (strcmp (strerrorname_np (EALREADY), "EALREADY") == 0); #endif #if defined EBADF ASSERT (strcmp (strerrorname_np (EBADF), "EBADF") == 0); #endif #if defined EBADMSG ASSERT (strcmp (strerrorname_np (EBADMSG), "EBADMSG") == 0); #endif #if defined EBUSY ASSERT (strcmp (strerrorname_np (EBUSY), "EBUSY") == 0); #endif #if defined ECANCELED ASSERT (strcmp (strerrorname_np (ECANCELED), "ECANCELED") == 0); #endif #if defined ECHILD ASSERT (strcmp (strerrorname_np (ECHILD), "ECHILD") == 0); #endif #if defined ECONNABORTED ASSERT (strcmp (strerrorname_np (ECONNABORTED), "ECONNABORTED") == 0); #endif #if defined ECONNREFUSED ASSERT (strcmp (strerrorname_np (ECONNREFUSED), "ECONNREFUSED") == 0); #endif #if defined ECONNRESET ASSERT (strcmp (strerrorname_np (ECONNRESET), "ECONNRESET") == 0); #endif #if defined EDEADLK ASSERT (strcmp (strerrorname_np (EDEADLK), "EDEADLK") == 0); #endif #if defined EDESTADDRREQ ASSERT (strcmp (strerrorname_np (EDESTADDRREQ), "EDESTADDRREQ") == 0); #endif #if defined EDQUOT ASSERT (strcmp (strerrorname_np (EDQUOT), "EDQUOT") == 0); #endif #if defined EEXIST ASSERT (strcmp (strerrorname_np (EEXIST), "EEXIST") == 0); #endif #if defined EFAULT ASSERT (strcmp (strerrorname_np (EFAULT), "EFAULT") == 0); #endif #if defined EFBIG ASSERT (strcmp (strerrorname_np (EFBIG), "EFBIG") == 0); #endif #if defined EHOSTUNREACH ASSERT (strcmp (strerrorname_np (EHOSTUNREACH), "EHOSTUNREACH") == 0); #endif #if defined EIDRM ASSERT (strcmp (strerrorname_np (EIDRM), "EIDRM") == 0); #endif #if defined EINPROGRESS ASSERT (strcmp (strerrorname_np (EINPROGRESS), "EINPROGRESS") == 0); #endif #if defined EINTR ASSERT (strcmp (strerrorname_np (EINTR), "EINTR") == 0); #endif #if defined EINVAL ASSERT (strcmp (strerrorname_np (EINVAL), "EINVAL") == 0); #endif #if defined EIO ASSERT (strcmp (strerrorname_np (EIO), "EIO") == 0); #endif #if defined EISCONN ASSERT (strcmp (strerrorname_np (EISCONN), "EISCONN") == 0); #endif #if defined EISDIR ASSERT (strcmp (strerrorname_np (EISDIR), "EISDIR") == 0); #endif #if defined ELOOP ASSERT (strcmp (strerrorname_np (ELOOP), "ELOOP") == 0); #endif #if defined EMFILE ASSERT (strcmp (strerrorname_np (EMFILE), "EMFILE") == 0); #endif #if defined EMLINK ASSERT (strcmp (strerrorname_np (EMLINK), "EMLINK") == 0); #endif #if defined EMSGSIZE ASSERT (strcmp (strerrorname_np (EMSGSIZE), "EMSGSIZE") == 0); #endif #if defined EMULTIHOP ASSERT (strcmp (strerrorname_np (EMULTIHOP), "EMULTIHOP") == 0); #endif #if defined ENAMETOOLONG ASSERT (strcmp (strerrorname_np (ENAMETOOLONG), "ENAMETOOLONG") == 0); #endif #if defined ENETDOWN ASSERT (strcmp (strerrorname_np (ENETDOWN), "ENETDOWN") == 0); #endif #if defined ENETRESET ASSERT (strcmp (strerrorname_np (ENETRESET), "ENETRESET") == 0); #endif #if defined ENETUNREACH ASSERT (strcmp (strerrorname_np (ENETUNREACH), "ENETUNREACH") == 0); #endif #if defined ENFILE ASSERT (strcmp (strerrorname_np (ENFILE), "ENFILE") == 0); #endif #if defined ENOBUFS ASSERT (strcmp (strerrorname_np (ENOBUFS), "ENOBUFS") == 0); #endif #if defined ENODATA ASSERT (strcmp (strerrorname_np (ENODATA), "ENODATA") == 0); #endif #if defined ENODEV ASSERT (strcmp (strerrorname_np (ENODEV), "ENODEV") == 0); #endif #if defined ENOENT ASSERT (strcmp (strerrorname_np (ENOENT), "ENOENT") == 0); #endif #if defined ENOEXEC ASSERT (strcmp (strerrorname_np (ENOEXEC), "ENOEXEC") == 0); #endif #if defined ENOLCK ASSERT (strcmp (strerrorname_np (ENOLCK), "ENOLCK") == 0); #endif #if defined ENOLINK ASSERT (strcmp (strerrorname_np (ENOLINK), "ENOLINK") == 0); #endif #if defined ENOMEM ASSERT (strcmp (strerrorname_np (ENOMEM), "ENOMEM") == 0); #endif #if defined ENOMSG ASSERT (strcmp (strerrorname_np (ENOMSG), "ENOMSG") == 0); #endif #if defined ENOPROTOOPT ASSERT (strcmp (strerrorname_np (ENOPROTOOPT), "ENOPROTOOPT") == 0); #endif #if defined ENOSPC ASSERT (strcmp (strerrorname_np (ENOSPC), "ENOSPC") == 0); #endif #if defined ENOSR ASSERT (strcmp (strerrorname_np (ENOSR), "ENOSR") == 0); #endif #if defined ENOSTR ASSERT (strcmp (strerrorname_np (ENOSTR), "ENOSTR") == 0); #endif #if defined ENOSYS ASSERT (strcmp (strerrorname_np (ENOSYS), "ENOSYS") == 0); #endif #if defined ENOTCONN ASSERT (strcmp (strerrorname_np (ENOTCONN), "ENOTCONN") == 0); #endif #if defined ENOTDIR ASSERT (strcmp (strerrorname_np (ENOTDIR), "ENOTDIR") == 0); #endif #if defined ENOTEMPTY && ENOTEMPTY != EEXIST ASSERT (strcmp (strerrorname_np (ENOTEMPTY), "ENOTEMPTY") == 0); #endif #if defined ENOTRECOVERABLE ASSERT (strcmp (strerrorname_np (ENOTRECOVERABLE), "ENOTRECOVERABLE") == 0); #endif #if defined ENOTSOCK ASSERT (strcmp (strerrorname_np (ENOTSOCK), "ENOTSOCK") == 0); #endif #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP ASSERT (strcmp (strerrorname_np (ENOTSUP), "ENOTSUP") == 0); #endif #if defined ENOTTY ASSERT (strcmp (strerrorname_np (ENOTTY), "ENOTTY") == 0); #endif #if defined ENXIO ASSERT (strcmp (strerrorname_np (ENXIO), "ENXIO") == 0); #endif #if defined EOPNOTSUPP ASSERT (strcmp (strerrorname_np (EOPNOTSUPP), "EOPNOTSUPP") == 0); #endif #if defined EOVERFLOW ASSERT (strcmp (strerrorname_np (EOVERFLOW), "EOVERFLOW") == 0); #endif #if defined EOWNERDEAD ASSERT (strcmp (strerrorname_np (EOWNERDEAD), "EOWNERDEAD") == 0); #endif #if defined EPERM ASSERT (strcmp (strerrorname_np (EPERM), "EPERM") == 0); #endif #if defined EPIPE ASSERT (strcmp (strerrorname_np (EPIPE), "EPIPE") == 0); #endif #if defined EPROTO ASSERT (strcmp (strerrorname_np (EPROTO), "EPROTO") == 0); #endif #if defined EPROTONOSUPPORT ASSERT (strcmp (strerrorname_np (EPROTONOSUPPORT), "EPROTONOSUPPORT") == 0); #endif #if defined EPROTOTYPE ASSERT (strcmp (strerrorname_np (EPROTOTYPE), "EPROTOTYPE") == 0); #endif #if defined EROFS ASSERT (strcmp (strerrorname_np (EROFS), "EROFS") == 0); #endif #if defined ESPIPE ASSERT (strcmp (strerrorname_np (ESPIPE), "ESPIPE") == 0); #endif #if defined ESRCH ASSERT (strcmp (strerrorname_np (ESRCH), "ESRCH") == 0); #endif #if defined ESTALE ASSERT (strcmp (strerrorname_np (ESTALE), "ESTALE") == 0); #endif #if defined ETIME ASSERT (strcmp (strerrorname_np (ETIME), "ETIME") == 0); #endif #if defined ETIMEDOUT ASSERT (strcmp (strerrorname_np (ETIMEDOUT), "ETIMEDOUT") == 0); #endif #if defined ETXTBSY ASSERT (strcmp (strerrorname_np (ETXTBSY), "ETXTBSY") == 0); #endif #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN ASSERT (strcmp (strerrorname_np (EWOULDBLOCK), "EWOULDBLOCK") == 0); #endif #if defined EXDEV ASSERT (strcmp (strerrorname_np (EXDEV), "EXDEV") == 0); #endif /* Other error codes on other systems. */ /* Solaris */ #if defined EADI ASSERT (strcmp (strerrorname_np (EADI), "EADI") == 0); #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined EADV ASSERT (strcmp (strerrorname_np (EADV), "EADV") == 0); #endif /* OSF/1 */ #if defined EAIO ASSERT (strcmp (strerrorname_np (EAIO), "EAIO") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined EAUTH ASSERT (strcmp (strerrorname_np (EAUTH), "EAUTH") == 0); #endif /* GNU/Hurd */ #if defined EBACKGROUND ASSERT (strcmp (strerrorname_np (EBACKGROUND), "EBACKGROUND") == 0); #endif /* Mac OS X */ #if defined EBADARCH ASSERT (strcmp (strerrorname_np (EBADARCH), "EBADARCH") == 0); #endif /* Minix */ #if defined EBADCALL ASSERT (strcmp (strerrorname_np (EBADCALL), "EBADCALL") == 0); #endif /* Minix */ #if defined EBADCPU ASSERT (strcmp (strerrorname_np (EBADCPU), "EBADCPU") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADE ASSERT (strcmp (strerrorname_np (EBADE), "EBADE") == 0); #endif /* Minix */ #if defined EBADEPT ASSERT (strcmp (strerrorname_np (EBADEPT), "EBADEPT") == 0); #endif /* Mac OS X */ #if defined EBADEXEC ASSERT (strcmp (strerrorname_np (EBADEXEC), "EBADEXEC") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADFD ASSERT (strcmp (strerrorname_np (EBADFD), "EBADFD") == 0); #endif /* IRIX */ #if defined EBADFILT ASSERT (strcmp (strerrorname_np (EBADFILT), "EBADFILT") == 0); #endif /* Minix */ #if defined EBADIOCTL ASSERT (strcmp (strerrorname_np (EBADIOCTL), "EBADIOCTL") == 0); #endif /* Mac OS X */ #if defined EBADMACHO ASSERT (strcmp (strerrorname_np (EBADMACHO), "EBADMACHO") == 0); #endif /* Minix */ #if defined EBADMODE ASSERT (strcmp (strerrorname_np (EBADMODE), "EBADMODE") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADR ASSERT (strcmp (strerrorname_np (EBADR), "EBADR") == 0); #endif /* Minix */ #if defined EBADREQUEST ASSERT (strcmp (strerrorname_np (EBADREQUEST), "EBADREQUEST") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EBADRPC ASSERT (strcmp (strerrorname_np (EBADRPC), "EBADRPC") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADRQC ASSERT (strcmp (strerrorname_np (EBADRQC), "EBADRQC") == 0); #endif /* IRIX */ #if defined EBADRSPEC ASSERT (strcmp (strerrorname_np (EBADRSPEC), "EBADRSPEC") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBADSLT ASSERT (strcmp (strerrorname_np (EBADSLT), "EBADSLT") == 0); #endif /* IRIX */ #if defined EBADTSPEC ASSERT (strcmp (strerrorname_np (EBADTSPEC), "EBADTSPEC") == 0); #endif /* HP-UX */ #if defined EBADVER ASSERT (strcmp (strerrorname_np (EBADVER), "EBADVER") == 0); #endif /* IRIX */ #if defined EBDHDL ASSERT (strcmp (strerrorname_np (EBDHDL), "EBDHDL") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EBFONT ASSERT (strcmp (strerrorname_np (EBFONT), "EBFONT") == 0); #endif /* IRIX */ #if defined EBUFSIZE ASSERT (strcmp (strerrorname_np (EBUFSIZE), "EBUFSIZE") == 0); #endif /* Minix */ #if defined ECALLDENIED ASSERT (strcmp (strerrorname_np (ECALLDENIED), "ECALLDENIED") == 0); #endif /* IRIX */ #if defined ECANTEXTENT ASSERT (strcmp (strerrorname_np (ECANTEXTENT), "ECANTEXTENT") == 0); #endif /* FreeBSD */ #if defined ECAPMODE ASSERT (strcmp (strerrorname_np (ECAPMODE), "ECAPMODE") == 0); #endif /* Cygwin */ #if defined ECASECLASH ASSERT (strcmp (strerrorname_np (ECASECLASH), "ECASECLASH") == 0); #endif /* IRIX */ #if defined ECELLDOWN ASSERT (strcmp (strerrorname_np (ECELLDOWN), "ECELLDOWN") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ECHRNG ASSERT (strcmp (strerrorname_np (ECHRNG), "ECHRNG") == 0); #endif /* IRIX */ #if defined ECKPT ASSERT (strcmp (strerrorname_np (ECKPT), "ECKPT") == 0); #endif /* IRIX */ #if defined ECLOCKCPU ASSERT (strcmp (strerrorname_np (ECLOCKCPU), "ECLOCKCPU") == 0); #endif /* OSF/1 */ #if defined ECLONEME && ECLONEME != ERESTART ASSERT (strcmp (strerrorname_np (ECLONEME), "ECLONEME") == 0); #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ECOMM ASSERT (strcmp (strerrorname_np (ECOMM), "ECOMM") == 0); #endif /* HP-UX */ #if defined ECONFIG ASSERT (strcmp (strerrorname_np (ECONFIG), "ECONFIG") == 0); #endif /* IRIX */ #if defined ECONTROLLER ASSERT (strcmp (strerrorname_np (ECONTROLLER), "ECONTROLLER") == 0); #endif /* AIX */ #if defined ECORRUPT ASSERT (strcmp (strerrorname_np (ECORRUPT), "ECORRUPT") == 0); #endif /* GNU/Hurd */ #if defined ED ASSERT (strcmp (strerrorname_np (ED), "ED") == 0); #endif /* Minix */ #if defined EDEADEPT ASSERT (strcmp (strerrorname_np (EDEADEPT), "EDEADEPT") == 0); #endif /* IRIX, Solaris, Cygwin */ #if defined EDEADLOCK && EDEADLOCK != EDEADLK ASSERT (strcmp (strerrorname_np (EDEADLOCK), "EDEADLOCK") == 0); #endif /* Minix */ #if defined EDEADSRCDST ASSERT (strcmp (strerrorname_np (EDEADSRCDST), "EDEADSRCDST") == 0); #endif /* IRIX */ #if defined EDELAY ASSERT (strcmp (strerrorname_np (EDELAY), "EDELAY") == 0); #endif /* IRIX */ #if defined EDESTROYED ASSERT (strcmp (strerrorname_np (EDESTROYED), "EDESTROYED") == 0); #endif /* Mac OS X */ #if defined EDEVERR ASSERT (strcmp (strerrorname_np (EDEVERR), "EDEVERR") == 0); #endif /* GNU/Hurd */ #if defined EDIED ASSERT (strcmp (strerrorname_np (EDIED), "EDIED") == 0); #endif /* IRIX */ #if defined EDIRCORRUPTED ASSERT (strcmp (strerrorname_np (EDIRCORRUPTED), "EDIRCORRUPTED") == 0); #endif /* FreeBSD */ #if defined EDIRIOCTL ASSERT (strcmp (strerrorname_np (EDIRIOCTL), "EDIRIOCTL") == 0); #endif /* OSF/1 */ #if defined EDIRTY ASSERT (strcmp (strerrorname_np (EDIRTY), "EDIRTY") == 0); #endif /* IRIX */ #if defined EDISJOINT ASSERT (strcmp (strerrorname_np (EDISJOINT), "EDISJOINT") == 0); #endif /* AIX */ #if defined EDIST ASSERT (strcmp (strerrorname_np (EDIST), "EDIST") == 0); #endif /* Minix */ #if defined EDONTREPLY ASSERT (strcmp (strerrorname_np (EDONTREPLY), "EDONTREPLY") == 0); #endif /* FreeBSD */ #if defined EDOOFUS ASSERT (strcmp (strerrorname_np (EDOOFUS), "EDOOFUS") == 0); #endif /* Linux, HP-UX, Cygwin */ #if defined EDOTDOT ASSERT (strcmp (strerrorname_np (EDOTDOT), "EDOTDOT") == 0); #endif /* OSF/1 */ #if defined EDUPPKG ASSERT (strcmp (strerrorname_np (EDUPPKG), "EDUPPKG") == 0); #endif /* GNU/Hurd */ #if defined ED_ALREADY_OPEN ASSERT (strcmp (strerrorname_np (ED_ALREADY_OPEN), "ED_ALREADY_OPEN") == 0); #endif /* GNU/Hurd */ #if defined ED_DEVICE_DOWN ASSERT (strcmp (strerrorname_np (ED_DEVICE_DOWN), "ED_DEVICE_DOWN") == 0); #endif /* GNU/Hurd */ #if defined ED_INVALID_OPERATION ASSERT (strcmp (strerrorname_np (ED_INVALID_OPERATION), "ED_INVALID_OPERATION") == 0); #endif /* GNU/Hurd */ #if defined ED_INVALID_RECNUM ASSERT (strcmp (strerrorname_np (ED_INVALID_RECNUM), "ED_INVALID_RECNUM") == 0); #endif /* GNU/Hurd */ #if defined ED_INVALID_SIZE ASSERT (strcmp (strerrorname_np (ED_INVALID_SIZE), "ED_INVALID_SIZE") == 0); #endif /* GNU/Hurd */ #if defined ED_IO_ERROR ASSERT (strcmp (strerrorname_np (ED_IO_ERROR), "ED_IO_ERROR") == 0); #endif /* GNU/Hurd */ #if defined ED_NO_MEMORY ASSERT (strcmp (strerrorname_np (ED_NO_MEMORY), "ED_NO_MEMORY") == 0); #endif /* GNU/Hurd */ #if defined ED_NO_SUCH_DEVICE ASSERT (strcmp (strerrorname_np (ED_NO_SUCH_DEVICE), "ED_NO_SUCH_DEVICE") == 0); #endif /* GNU/Hurd */ #if defined ED_READ_ONLY ASSERT (strcmp (strerrorname_np (ED_READ_ONLY), "ED_READ_ONLY") == 0); #endif /* GNU/Hurd */ #if defined ED_WOULD_BLOCK ASSERT (strcmp (strerrorname_np (ED_WOULD_BLOCK), "ED_WOULD_BLOCK") == 0); #endif /* IRIX */ #if defined EEMPTY ASSERT (strcmp (strerrorname_np (EEMPTY), "EEMPTY") == 0); #endif /* OSF/1 */ #if defined EEMULATE ASSERT (strcmp (strerrorname_np (EEMULATE), "EEMULATE") == 0); #endif /* IRIX */ #if defined EENDOFMINOR ASSERT (strcmp (strerrorname_np (EENDOFMINOR), "EENDOFMINOR") == 0); #endif /* IRIX */ #if defined EENQUEUED ASSERT (strcmp (strerrorname_np (EENQUEUED), "EENQUEUED") == 0); #endif /* OSF/1 */ #if defined EFAIL ASSERT (strcmp (strerrorname_np (EFAIL), "EFAIL") == 0); #endif /* AIX */ #if defined EFORMAT ASSERT (strcmp (strerrorname_np (EFORMAT), "EFORMAT") == 0); #endif /* Haiku */ #if defined EFPOS ASSERT (strcmp (strerrorname_np (EFPOS), "EFPOS") == 0); #endif /* IRIX */ #if defined EFSCORRUPTED ASSERT (strcmp (strerrorname_np (EFSCORRUPTED), "EFSCORRUPTED") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix, Cygwin */ #if defined EFTYPE ASSERT (strcmp (strerrorname_np (EFTYPE), "EFTYPE") == 0); #endif /* Minix */ #if defined EGENERIC ASSERT (strcmp (strerrorname_np (EGENERIC), "EGENERIC") == 0); #endif /* GNU/Hurd */ #if defined EGRATUITOUS ASSERT (strcmp (strerrorname_np (EGRATUITOUS), "EGRATUITOUS") == 0); #endif /* GNU/Hurd */ #if defined EGREGIOUS ASSERT (strcmp (strerrorname_np (EGREGIOUS), "EGREGIOUS") == 0); #endif /* IRIX */ #if defined EGROUPLOOP ASSERT (strcmp (strerrorname_np (EGROUPLOOP), "EGROUPLOOP") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EHOSTDOWN ASSERT (strcmp (strerrorname_np (EHOSTDOWN), "EHOSTDOWN") == 0); #endif /* Linux */ #if defined EHWPOISON ASSERT (strcmp (strerrorname_np (EHWPOISON), "EHWPOISON") == 0); #endif /* GNU/Hurd */ #if defined EIEIO ASSERT (strcmp (strerrorname_np (EIEIO), "EIEIO") == 0); #endif /* IRIX */ #if defined EINIT ASSERT (strcmp (strerrorname_np (EINIT), "EINIT") == 0); #endif /* OSF/1 */ #if defined EINPROG ASSERT (strcmp (strerrorname_np (EINPROG), "EINPROG") == 0); #endif /* IRIX */ #if defined EINVALMODE ASSERT (strcmp (strerrorname_np (EINVALMODE), "EINVALMODE") == 0); #endif /* IRIX */ #if defined EINVALSTATE ASSERT (strcmp (strerrorname_np (EINVALSTATE), "EINVALSTATE") == 0); #endif /* IRIX */ #if defined EINVALTIME ASSERT (strcmp (strerrorname_np (EINVALTIME), "EINVALTIME") == 0); #endif /* IRIX */ #if defined EIORESID ASSERT (strcmp (strerrorname_np (EIORESID), "EIORESID") == 0); #endif /* OpenBSD */ #if defined EIPSEC ASSERT (strcmp (strerrorname_np (EIPSEC), "EIPSEC") == 0); #endif /* Linux, IRIX */ #if defined EISNAM ASSERT (strcmp (strerrorname_np (EISNAM), "EISNAM") == 0); #endif /* IRIX */ #if defined EJOINED ASSERT (strcmp (strerrorname_np (EJOINED), "EJOINED") == 0); #endif /* FreeBSD, OSF/1 */ #if defined EJUSTRETURN ASSERT (strcmp (strerrorname_np (EJUSTRETURN), "EJUSTRETURN") == 0); #endif /* GNU/Hurd */ #if defined EKERN_ABORTED ASSERT (strcmp (strerrorname_np (EKERN_ABORTED), "EKERN_ABORTED") == 0); #endif /* GNU/Hurd */ #if defined EKERN_FAILURE ASSERT (strcmp (strerrorname_np (EKERN_FAILURE), "EKERN_FAILURE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INTERRUPTED ASSERT (strcmp (strerrorname_np (EKERN_INTERRUPTED), "EKERN_INTERRUPTED") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_ADDRESS ASSERT (strcmp (strerrorname_np (EKERN_INVALID_ADDRESS), "EKERN_INVALID_ADDRESS") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_ARGUMENT ASSERT (strcmp (strerrorname_np (EKERN_INVALID_ARGUMENT), "EKERN_INVALID_ARGUMENT") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_CAPABILITY ASSERT (strcmp (strerrorname_np (EKERN_INVALID_CAPABILITY), "EKERN_INVALID_CAPABILITY") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_HOST ASSERT (strcmp (strerrorname_np (EKERN_INVALID_HOST), "EKERN_INVALID_HOST") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_NAME ASSERT (strcmp (strerrorname_np (EKERN_INVALID_NAME), "EKERN_INVALID_NAME") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_RIGHT ASSERT (strcmp (strerrorname_np (EKERN_INVALID_RIGHT), "EKERN_INVALID_RIGHT") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_TASK ASSERT (strcmp (strerrorname_np (EKERN_INVALID_TASK), "EKERN_INVALID_TASK") == 0); #endif /* GNU/Hurd */ #if defined EKERN_INVALID_VALUE ASSERT (strcmp (strerrorname_np (EKERN_INVALID_VALUE), "EKERN_INVALID_VALUE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_ERROR ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_ERROR), "EKERN_MEMORY_ERROR") == 0); #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_FAILURE ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_FAILURE), "EKERN_MEMORY_FAILURE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_MEMORY_PRESENT ASSERT (strcmp (strerrorname_np (EKERN_MEMORY_PRESENT), "EKERN_MEMORY_PRESENT") == 0); #endif /* GNU/Hurd */ #if defined EKERN_NAME_EXISTS ASSERT (strcmp (strerrorname_np (EKERN_NAME_EXISTS), "EKERN_NAME_EXISTS") == 0); #endif /* GNU/Hurd */ #if defined EKERN_NOT_IN_SET ASSERT (strcmp (strerrorname_np (EKERN_NOT_IN_SET), "EKERN_NOT_IN_SET") == 0); #endif /* GNU/Hurd */ #if defined EKERN_NOT_RECEIVER ASSERT (strcmp (strerrorname_np (EKERN_NOT_RECEIVER), "EKERN_NOT_RECEIVER") == 0); #endif /* GNU/Hurd */ #if defined EKERN_NO_ACCESS ASSERT (strcmp (strerrorname_np (EKERN_NO_ACCESS), "EKERN_NO_ACCESS") == 0); #endif /* GNU/Hurd */ #if defined EKERN_NO_SPACE ASSERT (strcmp (strerrorname_np (EKERN_NO_SPACE), "EKERN_NO_SPACE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_PROTECTION_FAILURE ASSERT (strcmp (strerrorname_np (EKERN_PROTECTION_FAILURE), "EKERN_PROTECTION_FAILURE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_RESOURCE_SHORTAGE ASSERT (strcmp (strerrorname_np (EKERN_RESOURCE_SHORTAGE), "EKERN_RESOURCE_SHORTAGE") == 0); #endif /* GNU/Hurd */ #if defined EKERN_RIGHT_EXISTS ASSERT (strcmp (strerrorname_np (EKERN_RIGHT_EXISTS), "EKERN_RIGHT_EXISTS") == 0); #endif /* GNU/Hurd */ #if defined EKERN_TERMINATED ASSERT (strcmp (strerrorname_np (EKERN_TERMINATED), "EKERN_TERMINATED") == 0); #endif /* GNU/Hurd */ #if defined EKERN_TIMEDOUT ASSERT (strcmp (strerrorname_np (EKERN_TIMEDOUT), "EKERN_TIMEDOUT") == 0); #endif /* GNU/Hurd */ #if defined EKERN_UREFS_OVERFLOW ASSERT (strcmp (strerrorname_np (EKERN_UREFS_OVERFLOW), "EKERN_UREFS_OVERFLOW") == 0); #endif /* GNU/Hurd */ #if defined EKERN_WRITE_PROTECTION_FAILURE ASSERT (strcmp (strerrorname_np (EKERN_WRITE_PROTECTION_FAILURE), "EKERN_WRITE_PROTECTION_FAILURE") == 0); #endif /* Linux */ #if defined EKEYEXPIRED ASSERT (strcmp (strerrorname_np (EKEYEXPIRED), "EKEYEXPIRED") == 0); #endif /* Linux */ #if defined EKEYREJECTED ASSERT (strcmp (strerrorname_np (EKEYREJECTED), "EKEYREJECTED") == 0); #endif /* Linux */ #if defined EKEYREVOKED ASSERT (strcmp (strerrorname_np (EKEYREVOKED), "EKEYREVOKED") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL2HLT ASSERT (strcmp (strerrorname_np (EL2HLT), "EL2HLT") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL2NSYNC ASSERT (strcmp (strerrorname_np (EL2NSYNC), "EL2NSYNC") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL3HLT ASSERT (strcmp (strerrorname_np (EL3HLT), "EL3HLT") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EL3RST ASSERT (strcmp (strerrorname_np (EL3RST), "EL3RST") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined ELAST && 0 ASSERT (strcmp (strerrorname_np (ELAST), "ELAST") == 0); #endif /* Cygwin */ #if defined ELBIN ASSERT (strcmp (strerrorname_np (ELBIN), "ELBIN") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBACC ASSERT (strcmp (strerrorname_np (ELIBACC), "ELIBACC") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBBAD ASSERT (strcmp (strerrorname_np (ELIBBAD), "ELIBBAD") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBEXEC ASSERT (strcmp (strerrorname_np (ELIBEXEC), "ELIBEXEC") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBMAX ASSERT (strcmp (strerrorname_np (ELIBMAX), "ELIBMAX") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ELIBSCN ASSERT (strcmp (strerrorname_np (ELIBSCN), "ELIBSCN") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ELNRNG ASSERT (strcmp (strerrorname_np (ELNRNG), "ELNRNG") == 0); #endif /* Minix */ #if defined ELOCKED ASSERT (strcmp (strerrorname_np (ELOCKED), "ELOCKED") == 0); #endif /* Solaris */ #if defined ELOCKUNMAPPED ASSERT (strcmp (strerrorname_np (ELOCKUNMAPPED), "ELOCKUNMAPPED") == 0); #endif /* IRIX */ #if defined ELOGINLIM ASSERT (strcmp (strerrorname_np (ELOGINLIM), "ELOGINLIM") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_BODY_ERROR ASSERT (strcmp (strerrorname_np (EMACH_RCV_BODY_ERROR), "EMACH_RCV_BODY_ERROR") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_HEADER_ERROR ASSERT (strcmp (strerrorname_np (EMACH_RCV_HEADER_ERROR), "EMACH_RCV_HEADER_ERROR") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_INTERRUPTED ASSERT (strcmp (strerrorname_np (EMACH_RCV_INTERRUPTED), "EMACH_RCV_INTERRUPTED") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_DATA ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_DATA), "EMACH_RCV_INVALID_DATA") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_NAME ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_NAME), "EMACH_RCV_INVALID_NAME") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_INVALID_NOTIFY ASSERT (strcmp (strerrorname_np (EMACH_RCV_INVALID_NOTIFY), "EMACH_RCV_INVALID_NOTIFY") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_IN_PROGRESS ASSERT (strcmp (strerrorname_np (EMACH_RCV_IN_PROGRESS), "EMACH_RCV_IN_PROGRESS") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_IN_SET ASSERT (strcmp (strerrorname_np (EMACH_RCV_IN_SET), "EMACH_RCV_IN_SET") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_PORT_CHANGED ASSERT (strcmp (strerrorname_np (EMACH_RCV_PORT_CHANGED), "EMACH_RCV_PORT_CHANGED") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_PORT_DIED ASSERT (strcmp (strerrorname_np (EMACH_RCV_PORT_DIED), "EMACH_RCV_PORT_DIED") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_TIMED_OUT ASSERT (strcmp (strerrorname_np (EMACH_RCV_TIMED_OUT), "EMACH_RCV_TIMED_OUT") == 0); #endif /* GNU/Hurd */ #if defined EMACH_RCV_TOO_LARGE ASSERT (strcmp (strerrorname_np (EMACH_RCV_TOO_LARGE), "EMACH_RCV_TOO_LARGE") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INTERRUPTED ASSERT (strcmp (strerrorname_np (EMACH_SEND_INTERRUPTED), "EMACH_SEND_INTERRUPTED") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_DATA ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_DATA), "EMACH_SEND_INVALID_DATA") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_DEST ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_DEST), "EMACH_SEND_INVALID_DEST") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_HEADER ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_HEADER), "EMACH_SEND_INVALID_HEADER") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_MEMORY ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_MEMORY), "EMACH_SEND_INVALID_MEMORY") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_NOTIFY ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_NOTIFY), "EMACH_SEND_INVALID_NOTIFY") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_REPLY ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_REPLY), "EMACH_SEND_INVALID_REPLY") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_RIGHT ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_RIGHT), "EMACH_SEND_INVALID_RIGHT") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_INVALID_TYPE ASSERT (strcmp (strerrorname_np (EMACH_SEND_INVALID_TYPE), "EMACH_SEND_INVALID_TYPE") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_IN_PROGRESS ASSERT (strcmp (strerrorname_np (EMACH_SEND_IN_PROGRESS), "EMACH_SEND_IN_PROGRESS") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_MSG_TOO_SMALL ASSERT (strcmp (strerrorname_np (EMACH_SEND_MSG_TOO_SMALL), "EMACH_SEND_MSG_TOO_SMALL") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_NOTIFY_IN_PROGRESS ASSERT (strcmp (strerrorname_np (EMACH_SEND_NOTIFY_IN_PROGRESS), "EMACH_SEND_NOTIFY_IN_PROGRESS") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_NO_BUFFER ASSERT (strcmp (strerrorname_np (EMACH_SEND_NO_BUFFER), "EMACH_SEND_NO_BUFFER") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_NO_NOTIFY ASSERT (strcmp (strerrorname_np (EMACH_SEND_NO_NOTIFY), "EMACH_SEND_NO_NOTIFY") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_TIMED_OUT ASSERT (strcmp (strerrorname_np (EMACH_SEND_TIMED_OUT), "EMACH_SEND_TIMED_OUT") == 0); #endif /* GNU/Hurd */ #if defined EMACH_SEND_WILL_NOTIFY ASSERT (strcmp (strerrorname_np (EMACH_SEND_WILL_NOTIFY), "EMACH_SEND_WILL_NOTIFY") == 0); #endif /* AIX, OSF/1 */ #if defined EMEDIA ASSERT (strcmp (strerrorname_np (EMEDIA), "EMEDIA") == 0); #endif /* Linux, OpenBSD */ #if defined EMEDIUMTYPE ASSERT (strcmp (strerrorname_np (EMEDIUMTYPE), "EMEDIUMTYPE") == 0); #endif /* IRIX */ #if defined EMEMRETRY ASSERT (strcmp (strerrorname_np (EMEMRETRY), "EMEMRETRY") == 0); #endif /* IRIX */ #if defined EMIGRATED ASSERT (strcmp (strerrorname_np (EMIGRATED), "EMIGRATED") == 0); #endif /* IRIX */ #if defined EMIGRATING ASSERT (strcmp (strerrorname_np (EMIGRATING), "EMIGRATING") == 0); #endif /* GNU/Hurd */ #if defined EMIG_ARRAY_TOO_LARGE ASSERT (strcmp (strerrorname_np (EMIG_ARRAY_TOO_LARGE), "EMIG_ARRAY_TOO_LARGE") == 0); #endif /* GNU/Hurd */ #if defined EMIG_BAD_ARGUMENTS ASSERT (strcmp (strerrorname_np (EMIG_BAD_ARGUMENTS), "EMIG_BAD_ARGUMENTS") == 0); #endif /* GNU/Hurd */ #if defined EMIG_BAD_ID ASSERT (strcmp (strerrorname_np (EMIG_BAD_ID), "EMIG_BAD_ID") == 0); #endif /* GNU/Hurd */ #if defined EMIG_DESTROY_REQUEST ASSERT (strcmp (strerrorname_np (EMIG_DESTROY_REQUEST), "EMIG_DESTROY_REQUEST") == 0); #endif /* GNU/Hurd */ #if defined EMIG_EXCEPTION ASSERT (strcmp (strerrorname_np (EMIG_EXCEPTION), "EMIG_EXCEPTION") == 0); #endif /* GNU/Hurd */ #if defined EMIG_NO_REPLY ASSERT (strcmp (strerrorname_np (EMIG_NO_REPLY), "EMIG_NO_REPLY") == 0); #endif /* GNU/Hurd */ #if defined EMIG_REMOTE_ERROR ASSERT (strcmp (strerrorname_np (EMIG_REMOTE_ERROR), "EMIG_REMOTE_ERROR") == 0); #endif /* GNU/Hurd */ #if defined EMIG_REPLY_MISMATCH ASSERT (strcmp (strerrorname_np (EMIG_REPLY_MISMATCH), "EMIG_REPLY_MISMATCH") == 0); #endif /* GNU/Hurd */ #if defined EMIG_SERVER_DIED ASSERT (strcmp (strerrorname_np (EMIG_SERVER_DIED), "EMIG_SERVER_DIED") == 0); #endif /* GNU/Hurd */ #if defined EMIG_TYPE_ERROR ASSERT (strcmp (strerrorname_np (EMIG_TYPE_ERROR), "EMIG_TYPE_ERROR") == 0); #endif /* OSF/1 */ #if defined EMTIMERS ASSERT (strcmp (strerrorname_np (EMTIMERS), "EMTIMERS") == 0); #endif /* IRIX */ #if defined EMUSTRUN ASSERT (strcmp (strerrorname_np (EMUSTRUN), "EMUSTRUN") == 0); #endif /* Linux, IRIX */ #if defined ENAVAIL ASSERT (strcmp (strerrorname_np (ENAVAIL), "ENAVAIL") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */ #if defined ENEEDAUTH ASSERT (strcmp (strerrorname_np (ENEEDAUTH), "ENEEDAUTH") == 0); #endif /* IRIX */ #if defined ENFSREMOTE ASSERT (strcmp (strerrorname_np (ENFSREMOTE), "ENFSREMOTE") == 0); #endif /* Cygwin */ #if defined ENMFILE ASSERT (strcmp (strerrorname_np (ENMFILE), "ENMFILE") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ENOANO ASSERT (strcmp (strerrorname_np (ENOANO), "ENOANO") == 0); #endif /* IRIX */ #if defined ENOATTACH ASSERT (strcmp (strerrorname_np (ENOATTACH), "ENOATTACH") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Minix */ #if defined ENOATTR ASSERT (strcmp (strerrorname_np (ENOATTR), "ENOATTR") == 0); #endif /* IRIX */ #if defined ENOBWD ASSERT (strcmp (strerrorname_np (ENOBWD), "ENOBWD") == 0); #endif /* MirBSD */ #if defined ENOCOFFEE ASSERT (strcmp (strerrorname_np (ENOCOFFEE), "ENOCOFFEE") == 0); #endif /* Minix */ #if defined ENOCONN ASSERT (strcmp (strerrorname_np (ENOCONN), "ENOCONN") == 0); #endif /* AIX */ #if defined ENOCONNECT ASSERT (strcmp (strerrorname_np (ENOCONNECT), "ENOCONNECT") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined ENOCSI ASSERT (strcmp (strerrorname_np (ENOCSI), "ENOCSI") == 0); #endif /* IRIX */ #if defined ENOEXIST ASSERT (strcmp (strerrorname_np (ENOEXIST), "ENOEXIST") == 0); #endif /* IRIX */ #if defined ENOINTRGROUP ASSERT (strcmp (strerrorname_np (ENOINTRGROUP), "ENOINTRGROUP") == 0); #endif /* FreeBSD */ #if defined ENOIOCTL ASSERT (strcmp (strerrorname_np (ENOIOCTL), "ENOIOCTL") == 0); #endif /* Linux */ #if defined ENOKEY ASSERT (strcmp (strerrorname_np (ENOKEY), "ENOKEY") == 0); #endif /* IRIX */ #if defined ENOLIMFILE ASSERT (strcmp (strerrorname_np (ENOLIMFILE), "ENOLIMFILE") == 0); #endif /* HP-UX */ #if defined ENOLOAD ASSERT (strcmp (strerrorname_np (ENOLOAD), "ENOLOAD") == 0); #endif /* IRIX */ #if defined ENOLOGIN ASSERT (strcmp (strerrorname_np (ENOLOGIN), "ENOLOGIN") == 0); #endif /* HP-UX */ #if defined ENOMATCH ASSERT (strcmp (strerrorname_np (ENOMATCH), "ENOMATCH") == 0); #endif /* Linux, OpenBSD, Cygwin */ #if defined ENOMEDIUM ASSERT (strcmp (strerrorname_np (ENOMEDIUM), "ENOMEDIUM") == 0); #endif /* IRIX */ #if defined ENOMESSAGE ASSERT (strcmp (strerrorname_np (ENOMESSAGE), "ENOMESSAGE") == 0); #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ENONET ASSERT (strcmp (strerrorname_np (ENONET), "ENONET") == 0); #endif /* Linux, HP-UX, IRIX, OSF/1, Solaris, Cygwin */ #if defined ENOPKG ASSERT (strcmp (strerrorname_np (ENOPKG), "ENOPKG") == 0); #endif /* Mac OS X */ #if defined ENOPOLICY ASSERT (strcmp (strerrorname_np (ENOPOLICY), "ENOPOLICY") == 0); #endif /* IRIX */ #if defined ENOPROC ASSERT (strcmp (strerrorname_np (ENOPROC), "ENOPROC") == 0); #endif /* HP-UX */ #if defined ENOREG ASSERT (strcmp (strerrorname_np (ENOREG), "ENOREG") == 0); #endif /* IRIX */ #if defined ENOSERVICE ASSERT (strcmp (strerrorname_np (ENOSERVICE), "ENOSERVICE") == 0); #endif /* Cygwin */ #if defined ENOSHARE ASSERT (strcmp (strerrorname_np (ENOSHARE), "ENOSHARE") == 0); #endif /* HP-UX, OSF/1 */ #if defined ENOSYM ASSERT (strcmp (strerrorname_np (ENOSYM), "ENOSYM") == 0); #endif /* Solaris */ #if defined ENOTACTIVE ASSERT (strcmp (strerrorname_np (ENOTACTIVE), "ENOTACTIVE") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ENOTBLK ASSERT (strcmp (strerrorname_np (ENOTBLK), "ENOTBLK") == 0); #endif /* FreeBSD */ #if defined ENOTCAPABLE ASSERT (strcmp (strerrorname_np (ENOTCAPABLE), "ENOTCAPABLE") == 0); #endif /* IRIX */ #if defined ENOTCONTROLLER ASSERT (strcmp (strerrorname_np (ENOTCONTROLLER), "ENOTCONTROLLER") == 0); #endif /* IRIX */ #if defined ENOTENQUEUED ASSERT (strcmp (strerrorname_np (ENOTENQUEUED), "ENOTENQUEUED") == 0); #endif /* IRIX */ #if defined ENOTJOINED ASSERT (strcmp (strerrorname_np (ENOTJOINED), "ENOTJOINED") == 0); #endif /* Linux, IRIX */ #if defined ENOTNAM ASSERT (strcmp (strerrorname_np (ENOTNAM), "ENOTNAM") == 0); #endif /* AIX, Minix */ #if defined ENOTREADY ASSERT (strcmp (strerrorname_np (ENOTREADY), "ENOTREADY") == 0); #endif /* AIX */ #if defined ENOTRUST ASSERT (strcmp (strerrorname_np (ENOTRUST), "ENOTRUST") == 0); #endif /* IRIX */ #if defined ENOTSTOPPED ASSERT (strcmp (strerrorname_np (ENOTSTOPPED), "ENOTSTOPPED") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ENOTUNIQ ASSERT (strcmp (strerrorname_np (ENOTUNIQ), "ENOTUNIQ") == 0); #endif /* HP-UX */ #if defined ENOUNLD ASSERT (strcmp (strerrorname_np (ENOUNLD), "ENOUNLD") == 0); #endif /* HP-UX */ #if defined ENOUNREG ASSERT (strcmp (strerrorname_np (ENOUNREG), "ENOUNREG") == 0); #endif /* Minix */ #if defined ENOURG ASSERT (strcmp (strerrorname_np (ENOURG), "ENOURG") == 0); #endif /* native Windows */ #if defined EOTHER ASSERT (strcmp (strerrorname_np (EOTHER), "EOTHER") == 0); #endif /* Minix */ #if defined EPACKSIZE ASSERT (strcmp (strerrorname_np (EPACKSIZE), "EPACKSIZE") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EPFNOSUPPORT ASSERT (strcmp (strerrorname_np (EPFNOSUPPORT), "EPFNOSUPPORT") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, OSF/1, Minix, Cygwin */ #if defined EPROCLIM ASSERT (strcmp (strerrorname_np (EPROCLIM), "EPROCLIM") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROCUNAVAIL ASSERT (strcmp (strerrorname_np (EPROCUNAVAIL), "EPROCUNAVAIL") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROGMISMATCH ASSERT (strcmp (strerrorname_np (EPROGMISMATCH), "EPROGMISMATCH") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined EPROGUNAVAIL ASSERT (strcmp (strerrorname_np (EPROGUNAVAIL), "EPROGUNAVAIL") == 0); #endif /* Mac OS X */ #if defined EPWROFF ASSERT (strcmp (strerrorname_np (EPWROFF), "EPWROFF") == 0); #endif /* Mac OS X */ #if defined EQFULL ASSERT (strcmp (strerrorname_np (EQFULL), "EQFULL") == 0); #endif /* HP-UX */ #if defined ERELOC ASSERT (strcmp (strerrorname_np (ERELOC), "ERELOC") == 0); #endif /* OSF/1 */ #if defined ERELOCATED ASSERT (strcmp (strerrorname_np (ERELOCATED), "ERELOCATED") == 0); #endif /* FreeBSD */ #if defined ERELOOKUP ASSERT (strcmp (strerrorname_np (ERELOOKUP), "ERELOOKUP") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EREMCHG ASSERT (strcmp (strerrorname_np (EREMCHG), "EREMCHG") == 0); #endif /* IRIX */ #if defined EREMDEV ASSERT (strcmp (strerrorname_np (EREMDEV), "EREMDEV") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined EREMOTE ASSERT (strcmp (strerrorname_np (EREMOTE), "EREMOTE") == 0); #endif /* Linux, IRIX */ #if defined EREMOTEIO ASSERT (strcmp (strerrorname_np (EREMOTEIO), "EREMOTEIO") == 0); #endif /* HP-UX */ #if defined EREMOTERELEASE ASSERT (strcmp (strerrorname_np (EREMOTERELEASE), "EREMOTERELEASE") == 0); #endif /* Linux, FreeBSD, AIX, IRIX, OSF/1, Solaris, Minix */ #if defined ERESTART ASSERT (strcmp (strerrorname_np (ERESTART), "ERESTART") == 0); #endif /* Linux */ #if defined ERFKILL ASSERT (strcmp (strerrorname_np (ERFKILL), "ERFKILL") == 0); #endif /* Mac OS X, FreeBSD, NetBSD, OpenBSD, OSF/1, Minix */ #if defined ERPCMISMATCH ASSERT (strcmp (strerrorname_np (ERPCMISMATCH), "ERPCMISMATCH") == 0); #endif /* AIX */ #if defined ESAD ASSERT (strcmp (strerrorname_np (ESAD), "ESAD") == 0); #endif /* Mac OS X */ #if defined ESHLIBVERS ASSERT (strcmp (strerrorname_np (ESHLIBVERS), "ESHLIBVERS") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Haiku, Cygwin */ #if defined ESHUTDOWN ASSERT (strcmp (strerrorname_np (ESHUTDOWN), "ESHUTDOWN") == 0); #endif /* Haiku */ #if defined ESIGPARM ASSERT (strcmp (strerrorname_np (ESIGPARM), "ESIGPARM") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ESOCKTNOSUPPORT ASSERT (strcmp (strerrorname_np (ESOCKTNOSUPPORT), "ESOCKTNOSUPPORT") == 0); #endif /* AIX, OSF/1 */ #if defined ESOFT ASSERT (strcmp (strerrorname_np (ESOFT), "ESOFT") == 0); #endif /* Linux, HP-UX, IRIX, Solaris, Cygwin */ #if defined ESRMNT ASSERT (strcmp (strerrorname_np (ESRMNT), "ESRMNT") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined ESTRPIPE ASSERT (strcmp (strerrorname_np (ESTRPIPE), "ESTRPIPE") == 0); #endif /* OSF/1 */ #if defined ESUCCESS ASSERT (strcmp (strerrorname_np (ESUCCESS), "ESUCCESS") == 0); #endif /* AIX */ #if defined ESYSERROR ASSERT (strcmp (strerrorname_np (ESYSERROR), "ESYSERROR") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined ETOOMANYREFS ASSERT (strcmp (strerrorname_np (ETOOMANYREFS), "ETOOMANYREFS") == 0); #endif /* Minix */ #if defined ETRAPDENIED ASSERT (strcmp (strerrorname_np (ETRAPDENIED), "ETRAPDENIED") == 0); #endif /* Linux, IRIX */ #if defined EUCLEAN ASSERT (strcmp (strerrorname_np (EUCLEAN), "EUCLEAN") == 0); #endif /* Linux, AIX, HP-UX, IRIX, Solaris, Cygwin */ #if defined EUNATCH ASSERT (strcmp (strerrorname_np (EUNATCH), "EUNATCH") == 0); #endif /* Minix */ #if defined EURG ASSERT (strcmp (strerrorname_np (EURG), "EURG") == 0); #endif /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, Minix, Cygwin */ #if defined EUSERS ASSERT (strcmp (strerrorname_np (EUSERS), "EUSERS") == 0); #endif /* OSF/1 */ #if defined EVERSION ASSERT (strcmp (strerrorname_np (EVERSION), "EVERSION") == 0); #endif /* IRIX */ #if defined EWRONGFS ASSERT (strcmp (strerrorname_np (EWRONGFS), "EWRONGFS") == 0); #endif /* AIX */ #if defined EWRPROTECT ASSERT (strcmp (strerrorname_np (EWRPROTECT), "EWRPROTECT") == 0); #endif /* Linux, IRIX, Solaris, Cygwin */ #if defined EXFULL ASSERT (strcmp (strerrorname_np (EXFULL), "EXFULL") == 0); #endif ASSERT (strerrorname_np (20200830) == NULL); ASSERT (strerrorname_np (-714) == NULL); return 0; } ������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strfmon_l.c������������������������������������������������������0000664�0000000�0000000�00000005527�14110572173�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2017-2021 Free Software Foundation, Inc. * * This 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> #if HAVE_MONETARY_H # include <monetary.h> #endif #include "signature.h" #if HAVE_STRFMON_L SIGNATURE_CHECK (strfmon_l, ssize_t, (char *s, size_t maxsize, locale_t locale, const char *format, ...)); #endif #include <locale.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (void) { #if HAVE_STRFMON_L /* Simple test in the C locale. */ { char buf[80]; locale_t loc; ssize_t ret; loc = newlocale (LC_ALL_MASK, "C", NULL); ASSERT (loc != NULL); ret = strfmon_l (buf, sizeof (buf), loc, "%^#5.0n", 123.4); ASSERT ( (ret == 5 && strcmp (buf, " 123") == 0) /* AIX, Solaris */ || (ret == 6 && strcmp (buf, " 123") == 0) /* glibc */ || (ret == 7 && strcmp (buf, " 123 ") == 0) /* Mac OS X */ ); } /* Test whether the decimal point comes from the right locale: glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=19633>. */ if (setlocale (LC_ALL, "en_US.UTF-8") == NULL) { fprintf (stderr, "Skipping test: English Unicode locale is not installed\n"); return 77; } if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) { fprintf (stderr, "Skipping test: English Unicode locale is not installed\n"); return 77; } { char expected_buf[80]; locale_t loc; char buf[80]; setlocale (LC_ALL, "en_US.UTF-8"); ASSERT (strfmon (expected_buf, sizeof (expected_buf), "%.2n", 123.5) >= 0); setlocale (LC_ALL, "de_DE.UTF-8"); loc = newlocale (LC_ALL_MASK, "en_US.UTF-8", NULL); ASSERT (strfmon_l (buf, sizeof (buf), loc, "%.2n", 123.5) >= 0); ASSERT (strcmp (buf, expected_buf) == 0); freelocale (loc); } { char expected_buf[80]; locale_t loc; char buf[80]; setlocale (LC_ALL, "de_DE.UTF-8"); ASSERT (strfmon (expected_buf, sizeof (expected_buf), "%.2n", 123.5) >= 0); setlocale (LC_ALL, "en_US.UTF-8"); loc = newlocale (LC_ALL_MASK, "de_DE.UTF-8", NULL); ASSERT (strfmon_l (buf, sizeof (buf), loc, "%.2n", 123.5) >= 0); ASSERT (strcmp (buf, expected_buf) == 0); freelocale (loc); } #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-striconv.c�������������������������������������������������������0000664�0000000�0000000�00000014215�14110572173�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "striconv.h" #if HAVE_ICONV # include <iconv.h> #endif #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main () { #if HAVE_ICONV /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, and UTF-8. */ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); /* ------------------------- Test mem_cd_iconv() ------------------------- */ /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = NULL; size_t length = 0; int retval = mem_cd_iconv (input, strlen (input), cd_88591_to_utf8, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ { static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = NULL; size_t length = 0; int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ { static const char input[] = "\342\202\254"; /* EURO SIGN */ char *result = NULL; size_t length = 0; int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, &result, &length); ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ { static const char input[] = "\342"; char *result = NULL; size_t length = 0; int retval = mem_cd_iconv (input, strlen (input), cd_utf8_to_88591, &result, &length); ASSERT (retval == 0); ASSERT (length == 0); free (result); } /* ------------------------- Test str_cd_iconv() ------------------------- */ /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = str_cd_iconv (input, cd_88591_to_utf8); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ { static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_cd_iconv (input, cd_utf8_to_88591); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ { static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ char *result = str_cd_iconv (input, cd_utf8_to_88591); ASSERT (result == NULL && errno == EILSEQ); } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ { static const char input[] = "\342"; char *result = str_cd_iconv (input, cd_utf8_to_88591); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } iconv_close (cd_88591_to_utf8); iconv_close (cd_utf8_to_88591); /* -------------------------- Test str_iconv() -------------------------- */ /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = str_iconv (input, "ISO-8859-1", "UTF-8"); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ { static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ { static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); ASSERT (result == NULL && errno == EILSEQ); } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ { static const char input[] = "\342"; char *result = str_iconv (input, "UTF-8", "ISO-8859-1"); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-striconveh.c�����������������������������������������������������0000664�0000000�0000000�00000125177�14110572173�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion with error handling. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "striconveh.h" #if HAVE_ICONV # include <iconv.h> #endif #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t indirect; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ iconv_t cd_ascii_to_88591 = iconv_open ("ISO-8859-1", "ASCII"); iconv_t cd_88591_to_88592 = iconv_open ("ISO-8859-2", "ISO-8859-1"); iconv_t cd_88592_to_88591 = iconv_open ("ISO-8859-1", "ISO-8859-2"); iconv_t cd_ascii_to_utf8 = iconv_open ("UTF-8", "ASCII"); iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); 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"); iconveh_t cdeh_ascii_to_88591; iconveh_t cdeh_ascii_to_88591_indirectly; iconveh_t cdeh_88592_to_88591; iconveh_t cdeh_88592_to_88591_indirectly; iconveh_t cdeh_ascii_to_utf8; iconveh_t cdeh_88591_to_utf8; iconveh_t cdeh_utf8_to_88591; iconveh_t cdeh_utf7_to_utf8; ASSERT (cd_ascii_to_utf8 != (iconv_t)(-1)); ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); ASSERT (cd_88592_to_utf8 != (iconv_t)(-1)); ASSERT (cd_utf8_to_88592 != (iconv_t)(-1)); cdeh_ascii_to_88591.cd = cd_ascii_to_88591; cdeh_ascii_to_88591.cd1 = cd_ascii_to_utf8; cdeh_ascii_to_88591.cd2 = cd_utf8_to_88591; cdeh_ascii_to_88591_indirectly.cd = (iconv_t)(-1); cdeh_ascii_to_88591_indirectly.cd1 = cd_ascii_to_utf8; cdeh_ascii_to_88591_indirectly.cd2 = cd_utf8_to_88591; cdeh_88592_to_88591.cd = cd_88592_to_88591; cdeh_88592_to_88591.cd1 = cd_88592_to_utf8; cdeh_88592_to_88591.cd2 = cd_utf8_to_88591; cdeh_88592_to_88591_indirectly.cd = (iconv_t)(-1); cdeh_88592_to_88591_indirectly.cd1 = cd_88592_to_utf8; cdeh_88592_to_88591_indirectly.cd2 = cd_utf8_to_88591; cdeh_ascii_to_utf8.cd = cd_ascii_to_utf8; cdeh_ascii_to_utf8.cd1 = cd_ascii_to_utf8; cdeh_ascii_to_utf8.cd2 = (iconv_t)(-1); cdeh_88591_to_utf8.cd = cd_88591_to_utf8; cdeh_88591_to_utf8.cd1 = cd_88591_to_utf8; cdeh_88591_to_utf8.cd2 = (iconv_t)(-1); cdeh_utf8_to_88591.cd = cd_utf8_to_88591; cdeh_utf8_to_88591.cd1 = (iconv_t)(-1); cdeh_utf8_to_88591.cd2 = cd_utf8_to_88591; cdeh_utf7_to_utf8.cd = cd_utf7_to_utf8; cdeh_utf7_to_utf8.cd1 = cd_utf7_to_utf8; cdeh_utf7_to_utf8.cd2 = (iconv_t)(-1); /* ------------------------ Test mem_cd_iconveh() ------------------------ */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), (indirect ? &cdeh_88592_to_88591_indirectly : &cdeh_88592_to_88591), handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } } /* Test conversion from ASCII to ISO-8859-1 with invalid input (EILSEQ). */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafa? Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), (indirect ? &cdeh_ascii_to_88591_indirectly : &cdeh_ascii_to_88591), handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: case iconveh_escape_sequence: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), (indirect ? &cdeh_88592_to_88591_indirectly : &cdeh_88592_to_88591), handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 5)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_88591_to_utf8, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == (i < 1 ? i : i < 12 ? i + 1 : i < 18 ? i + 2 : i + 3)); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_utf8_to_88591, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 41; i++) ASSERT (offsets[i] == (i < 1 ? i : i == 1 ? (size_t)(-1) : i < 13 ? i - 1 : i == 13 ? (size_t)(-1) : i < 20 ? i - 2 : i == 20 ? (size_t)(-1) : i < 40 ? i - 3 : (size_t)(-1))); ASSERT (offsets[41] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ASCII to UTF-8 with invalid input (EILSEQ). */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafa? Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_ascii_to_utf8, handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: case iconveh_escape_sequence: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_utf8_to_88591, handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i - 1)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i + 4)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_utf8_to_88591, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == 0); if (o) { ASSERT (offsets[0] == 0); ASSERT (offsets[1] == MAGIC); free (offsets); } free (result); } } if (cd_utf7_to_utf8 != (iconv_t)(-1)) { /* Disabled on Solaris, because Solaris 9 iconv() is buggy: it returns -1 / EILSEQ when converting the 7th byte of the input "+VDLYP9hA". */ # if !(defined __sun && !defined _LIBICONV_VERSION) /* Test conversion from UTF-7 to UTF-8 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; /* This is base64 encoded 0x54 0x32 0xD8 0x3F 0xD8 0x40. It would convert to U+5432 U+D83F U+D840 but these are Unicode surrogates. */ static const char input[] = "+VDLYP9hA"; static const char expected1[] = "\345\220\262"; /* 吲 glibc */ static const char expected2[] = ""; /* libiconv */ char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, 7, &cdeh_utf7_to_utf8, handler, NULL, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected1) || length == strlen (expected2)); ASSERT (result != NULL); if (length == strlen (expected1)) ASSERT (memcmp (result, expected1, strlen (expected1)) == 0); else ASSERT (memcmp (result, expected2, strlen (expected2)) == 0); free (result); } /* Disabled on NetBSD, because NetBSD 5.0 iconv() is buggy: it converts the input "+2D/YQNhB" to U+1FED8 U+3FD8 U+40D8. */ # if !(defined __NetBSD__ && !defined _LIBICONV_VERSION) /* Test conversion from UTF-7 to UTF-8 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; /* This is base64 encoded 0xD8 0x3F 0xD8 0x40 0xD8 0x41. It would convert to U+D83F U+D840 U+D841 but these are Unicode surrogates. */ static const char input[] = "+2D/YQNhB"; char *result = NULL; size_t length = 0; int retval = mem_cd_iconveh (input, strlen (input), &cdeh_utf7_to_utf8, handler, NULL, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); break; case iconveh_question_mark: case iconveh_escape_sequence: { /* glibc result */ static const char expected1[] = "?????"; /* libiconv <= 1.12 result */ static const char expected2[] = "?2D/YQNhB"; /* libiconv behaviour changed in version 1.13: the result is '?' U+0FF6 U+1036; this is U+D83F U+D840 U+D841 shifted left by 6 bits. */ static const char expected3[] = "?\340\277\266\341\200\266"; ASSERT (retval == 0); ASSERT (length == strlen (expected1) || length == strlen (expected2) || length == strlen (expected3)); ASSERT (result != NULL); if (length == strlen (expected1)) ASSERT (memcmp (result, expected1, strlen (expected1)) == 0); else if (length == strlen (expected2)) ASSERT (memcmp (result, expected2, strlen (expected2)) == 0); else ASSERT (memcmp (result, expected3, strlen (expected3)) == 0); free (result); } break; } } # endif # endif } /* ------------------------ Test str_cd_iconveh() ------------------------ */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_cd_iconveh (input, (indirect ? &cdeh_88592_to_88591_indirectly : &cdeh_88592_to_88591), handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } } /* Test conversion from ASCII to ISO-8859-1 with invalid input (EILSEQ). */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafa? Maszkowski */ char *result = str_cd_iconveh (input, (indirect ? &cdeh_ascii_to_88591_indirectly : &cdeh_ascii_to_88591), handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: case iconveh_escape_sequence: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (indirect = 0; indirect <= 1; indirect++) { for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ char *result = str_cd_iconveh (input, (indirect ? &cdeh_88592_to_88591_indirectly : &cdeh_88592_to_88591), handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = str_cd_iconveh (input, &cdeh_88591_to_utf8, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_cd_iconveh (input, &cdeh_utf8_to_88591, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from ASCII to UTF-8 with invalid input (EILSEQ). */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafa? Maszkowski */ char *result = str_cd_iconveh (input, &cdeh_ascii_to_utf8, handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: case iconveh_escape_sequence: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ char *result = str_cd_iconveh (input, &cdeh_utf8_to_88591, handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Costs: 27 ?"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Costs: 27 \\u20AC"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; char *result = str_cd_iconveh (input, &cdeh_utf8_to_88591, handler); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } if (cd_88591_to_88592 != (iconv_t)(-1)) iconv_close (cd_88591_to_88592); if (cd_88592_to_88591 != (iconv_t)(-1)) iconv_close (cd_88592_to_88591); iconv_close (cd_88591_to_utf8); iconv_close (cd_utf8_to_88591); iconv_close (cd_88592_to_utf8); iconv_close (cd_utf8_to_88592); /* ------------------------- Test mem_iconveh() ------------------------- */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "ISO-8859-2", "ISO-8859-1", handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "ISO-8859-2", "ISO-8859-1", handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 5)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "ISO-8859-1", "UTF-8", handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == (i < 1 ? i : i < 12 ? i + 1 : i < 18 ? i + 2 : i + 3)); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "UTF-8", "ISO-8859-1", handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 41; i++) ASSERT (offsets[i] == (i < 1 ? i : i == 1 ? (size_t)(-1) : i < 13 ? i - 1 : i == 13 ? (size_t)(-1) : i < 20 ? i - 2 : i == 20 ? (size_t)(-1) : i < 40 ? i - 3 : (size_t)(-1))); ASSERT (offsets[41] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "UTF-8", "ISO-8859-1", handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i - 1)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i + 4)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveh (input, strlen (input), "UTF-8", "ISO-8859-1", handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == 0); if (o) { ASSERT (offsets[0] == 0); ASSERT (offsets[1] == MAGIC); free (offsets); } free (result); } } /* ------------------------- Test str_iconveh() ------------------------- */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_iconveh (input, "ISO-8859-2", "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ char *result = str_iconveh (input, "ISO-8859-2", "ISO-8859-1", handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = str_iconveh (input, "ISO-8859-1", "UTF-8", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Costs: 27 ?"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Costs: 27 \\u20AC"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } /* -------------------------------- Done. -------------------------------- */ if (cd_ascii_to_88591 != (iconv_t)(-1)) iconv_close (cd_ascii_to_88591); iconv_close (cd_ascii_to_utf8); if (cd_utf7_to_utf8 != (iconv_t)(-1)) iconv_close (cd_utf7_to_utf8); #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-striconveha.c����������������������������������������������������0000664�0000000�0000000�00000057433�14110572173�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion with error handling and autodetection. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "striconveha.h" #if HAVE_ICONV # include <iconv.h> #endif #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" extern int iconv_supports_encoding (const char *encoding); /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* ------------------------- Test mem_iconveha() ------------------------- */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "ISO-8859-2", "ISO-8859-1", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "ISO-8859-2", "ISO-8859-1", false, handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 5)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "ISO-8859-1", "UTF-8", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == (i < 1 ? i : i < 12 ? i + 1 : i < 18 ? i + 2 : i + 3)); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "UTF-8", "ISO-8859-1", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 41; i++) ASSERT (offsets[i] == (i < 1 ? i : i == 1 ? (size_t)(-1) : i < 13 ? i - 1 : i == 13 ? (size_t)(-1) : i < 20 ? i - 2 : i == 20 ? (size_t)(-1) : i < 40 ? i - 3 : (size_t)(-1))); ASSERT (offsets[41] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "UTF-8", "ISO-8859-1", false, handler, offsets, &result, &length); switch (handler) { case iconveh_error: ASSERT (retval == -1 && errno == EILSEQ); ASSERT (result == NULL); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i - 1)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i + 4)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "UTF-8", "ISO-8859-1", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == 0); if (o) { ASSERT (offsets[0] == 0); ASSERT (offsets[1] == MAGIC); free (offsets); } free (result); } } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "autodetect_jp", "UTF-8", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "autodetect_jp", "UTF-8", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "autodetect_jp", "UTF-8", false, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i == 0 ? 0 : i == 5 ? 3 : i == 7 ? 6 : i == 9 ? 9 : i == 11 ? 12 : i == 13 ? 15 : (size_t)(-1))); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } } # endif # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ static const char expected[] = "Costs: 27 EUR"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); char *result = NULL; size_t length = 0; int retval = mem_iconveha (input, strlen (input), "UTF-8", "ISO-8859-1", true, handler, offsets, &result, &length); ASSERT (retval == 0); ASSERT (length == strlen (expected)); ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); if (o) { for (i = 0; i < 13; i++) ASSERT (offsets[i] == (i < 11 ? i : (size_t)(-1))); ASSERT (offsets[13] == MAGIC); free (offsets); } free (result); } } # endif /* ------------------------- Test str_iconveha() ------------------------- */ /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; char *result = str_iconveha (input, "ISO-8859-1", "UTF-8", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Costs: 27 ?"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Costs: 27 \\u20AC"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\342"; char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } } # endif # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ static const char expected[] = "Costs: 27 EUR"; char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", true, handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } # endif #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-string-buffer.c��������������������������������������������������0000664�0000000�0000000�00000006051�14110572173�0021341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of buffer that accumulates a string by piecewise concatenation. Copyright (C) 2021 Free Software Foundation, Inc. This 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 2, 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>, 2021. */ #include <config.h> #include "string-buffer.h" #include <string.h> #include "macros.h" static int my_appendf (struct string_buffer *buffer, const char *formatstring, ...) { va_list args; va_start (args, formatstring); int ret = sb_appendvf (buffer, formatstring, args); va_end (args); return ret; } char invalid_format_string_1[] = "%&"; char invalid_format_string_2[] = "%^"; int main () { /* Test simple string concatenation. */ { struct string_buffer buffer; sb_init (&buffer); char *s = sb_dupfree (&buffer); ASSERT (s != NULL && strcmp (s, "") == 0); free (s); } { struct string_buffer buffer; sb_init (&buffer); sb_append (&buffer, "abc"); sb_append (&buffer, ""); sb_append (&buffer, "defg"); char *s = sb_dupfree (&buffer); ASSERT (s != NULL && strcmp (s, "abcdefg") == 0); free (s); } /* Test printf-like formatting. */ { struct string_buffer buffer; sb_init (&buffer); sb_append (&buffer, "<"); sb_appendf (&buffer, "%x", 3735928559U); sb_append (&buffer, ">"); char *s = sb_dupfree (&buffer); ASSERT (s != NULL && strcmp (s, "<deadbeef>") == 0); free (s); } /* Test vprintf-like formatting. */ { struct string_buffer buffer; sb_init (&buffer); sb_append (&buffer, "<"); my_appendf (&buffer, "%x", 3735928559U); sb_append (&buffer, ">"); char *s = sb_dupfree (&buffer); ASSERT (s != NULL && strcmp (s, "<deadbeef>") == 0); free (s); } /* Test printf-like formatting failure. On all systems except AIX, trying to convert the wide-character 0x76543210 to a multibyte string (in the "C" locale) fails. On all systems where REPLACE_VSNPRINTF=1 (this includes AIX), i.e. where the Gnulib implementation of vsnprintf() is used), invalid format directives make the *printf call fail. */ { struct string_buffer buffer; sb_init (&buffer); sb_append (&buffer, "<"); sb_appendf (&buffer, "%lc", 0x76543210); sb_append (&buffer, "|"); sb_appendf (&buffer, invalid_format_string_1, 1); sb_append (&buffer, "|"); sb_appendf (&buffer, invalid_format_string_2, 2); sb_append (&buffer, ">"); char *s = sb_dupfree (&buffer); ASSERT (s == NULL); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-string-c++.cc����������������������������������������������������0000664�0000000�0000000�00000010650�14110572173�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <string.h> #include "signature.h" #if GNULIB_TEST_FFSL SIGNATURE_CHECK (GNULIB_NAMESPACE::ffsl, int, (long int)); #endif #if GNULIB_TEST_FFSLL SIGNATURE_CHECK (GNULIB_NAMESPACE::ffsll, int, (long long int)); #endif #if GNULIB_TEST_MEMCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::memchr, void *, (void const *, int, size_t)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::memcmp, int, // (void const *, void const *, size_t)); #if GNULIB_TEST_MEMMEM SIGNATURE_CHECK (GNULIB_NAMESPACE::memmem, void *, (void const *, size_t, void const *, size_t)); #endif #if GNULIB_TEST_MEMPCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::mempcpy, void *, (void *, void const *, size_t)); #endif #if GNULIB_TEST_MEMRCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::memrchr, void *, (void const *, int, size_t)); #endif #if GNULIB_TEST_RAWMEMCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::rawmemchr, void *, (void const *, int)); #endif #if GNULIB_TEST_STPCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::stpcpy, char *, (char *, char const *)); #endif #if GNULIB_TEST_STPNCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::stpncpy, char *, (char *, char const *, size_t)); #endif #if GNULIB_TEST_STRCHRNUL SIGNATURE_CHECK (GNULIB_NAMESPACE::strchrnul, char *, (char const *, int)); #endif #if GNULIB_TEST_STRDUP SIGNATURE_CHECK (GNULIB_NAMESPACE::strdup, char *, (char const *)); #endif #if GNULIB_TEST_STRNCAT SIGNATURE_CHECK (GNULIB_NAMESPACE::strncat, char *, (char *, const char *, size_t)); #endif #if GNULIB_TEST_STRNDUP SIGNATURE_CHECK (GNULIB_NAMESPACE::strndup, char *, (char const *, size_t)); #endif #if GNULIB_TEST_STRNLEN SIGNATURE_CHECK (GNULIB_NAMESPACE::strnlen, size_t, (char const *, size_t)); #endif #if GNULIB_TEST_STRPBRK SIGNATURE_CHECK (GNULIB_NAMESPACE::strpbrk, char *, (char const *, char const *)); #endif #if GNULIB_TEST_STRSEP SIGNATURE_CHECK (GNULIB_NAMESPACE::strsep, char *, (char **, char const *)); #endif #if GNULIB_TEST_STRSTR SIGNATURE_CHECK (GNULIB_NAMESPACE::strstr, char *, (const char *, const char *)); #endif #if GNULIB_TEST_STRCASESTR SIGNATURE_CHECK (GNULIB_NAMESPACE::strcasestr, char *, (const char *, const char *)); #endif #if GNULIB_TEST_STRTOK_R SIGNATURE_CHECK (GNULIB_NAMESPACE::strtok_r, char *, (char *, char const *, char **)); #endif #if GNULIB_TEST_MBSLEN SIGNATURE_CHECK (GNULIB_NAMESPACE::mbslen, size_t, (const char *)); #endif #if GNULIB_TEST_MBSCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::mbschr, char *, (const char *, int)); #endif #if GNULIB_TEST_MBSRCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsrchr, char *, (const char *, int)); #endif #if GNULIB_TEST_MBSPBRK SIGNATURE_CHECK (GNULIB_NAMESPACE::mbspbrk, char *, (const char *, const char *)); #endif #if GNULIB_TEST_STRERROR SIGNATURE_CHECK (GNULIB_NAMESPACE::strerror, char *, (int)); #endif #if GNULIB_TEST_STRERROR_R SIGNATURE_CHECK (GNULIB_NAMESPACE::strerror_r, int, (int, char *, size_t)); #endif #if GNULIB_TEST_STRERRORNAME_NP SIGNATURE_CHECK (GNULIB_NAMESPACE::strerrorname_np, const char *, (int)); #endif #if GNULIB_TEST_SIGABBREV_NP SIGNATURE_CHECK (GNULIB_NAMESPACE::sigabbrev_np, const char *, (int)); #endif #if GNULIB_TEST_SIGDESCR_NP SIGNATURE_CHECK (GNULIB_NAMESPACE::sigdescr_np, const char *, (int)); #endif #if GNULIB_TEST_STRSIGNAL SIGNATURE_CHECK (GNULIB_NAMESPACE::strsignal, char *, (int)); #endif #if GNULIB_TEST_STRVERSCMP SIGNATURE_CHECK (GNULIB_NAMESPACE::strverscmp, int, (const char *, const char *)); #endif int main () { } ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-string-c++2.cc���������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstring> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-string.c���������������������������������������������������������0000664�0000000�0000000�00000002010�14110572173�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <string.h> #include "verify.h" /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strings-c++.cc���������������������������������������������������0000664�0000000�0000000�00000001761�14110572173�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <strings.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2017. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <strings.h> #include "signature.h" #if GNULIB_TEST_FFS SIGNATURE_CHECK (GNULIB_NAMESPACE::ffs, int, (int)); #endif int main () { } ���������������gnulib-20210822~d383792/tests/test-strings.c��������������������������������������������������������0000664�0000000�0000000�00000001554�14110572173�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <strings.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <strings.h> int main () { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strncat.c��������������������������������������������������������0000664�0000000�0000000�00000004464�14110572173�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strncat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strncat, char *, (char *, const char *, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT char #define U_STRNCAT strncat #define MAGIC ((char) 0xBA) #include "unistr/test-strncat.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" in UTF-8 encoding. */ static const char input[] = { 'G', 'r', (char) 0xC3, (char) 0xBC, (char) 0xC3, (char) 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', (char) 0xD0, (char) 0x97, (char) 0xD0, (char) 0xB4, (char) 0xD1, (char) 0x80, (char) 0xD0, (char) 0xB0, (char) 0xD0, (char) 0xB2, (char) 0xD1, (char) 0x81, (char) 0xD1, (char) 0x82, (char) 0xD0, (char) 0xB2, (char) 0xD1, (char) 0x83, (char) 0xD0, (char) 0xB9, (char) 0xD1, (char) 0x82, (char) 0xD0, (char) 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', (char) 0xC2, (char) 0xB1, 's', 'q', 'r', 't', '(', 'b', (char) 0xC2, (char) 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', (char) 0xE6, (char) 0x97, (char) 0xA5, (char) 0xE6, (char) 0x9C, (char) 0xAC, (char) 0xE8, (char) 0xAA, (char) 0x9E, ',', (char) 0xE4, (char) 0xB8, (char) 0xAD, (char) 0xE6, (char) 0x96, (char) 0x87, ',', (char) 0xED, (char) 0x95, (char) 0x9C, (char) 0xEA, (char) 0xB8, (char) 0x80, '\0' }; check (input, SIZEOF (input)); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strnlen.c��������������������������������������������������������0000664�0000000�0000000�00000003362�14110572173�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2010-2021 Free Software Foundation, Inc. * Written by Eric Blake * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (strnlen, size_t, (char const *, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" int main (void) { size_t i; char *page_boundary = (char *) zerosize_ptr (); if (!page_boundary) { page_boundary = malloc (0x1000); ASSERT (page_boundary); page_boundary += 0x1000; } /* Basic behavior tests. */ ASSERT (strnlen ("a", 0) == 0); ASSERT (strnlen ("a", 1) == 1); ASSERT (strnlen ("a", 2) == 1); ASSERT (strnlen ("", 0x100000) == 0); /* Memory fence and alignment testing. */ for (i = 0; i < 512; i++) { char *start = page_boundary - i; size_t j = i; memset (start, 'x', i); do { if (i != j) { start[j] = 0; ASSERT (strnlen (start, i + j) == j); } ASSERT (strnlen (start, i) == j); ASSERT (strnlen (start, j) == j); } while (j--); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strsignal.c������������������������������������������������������0000664�0000000�0000000�00000004406�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strsignal() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Colin Watson <cjwatson@debian.org>, 2008. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strsignal, char *, (int)); #include <signal.h> #include "macros.h" #if HAVE_DECL_SYS_SIGLIST # define ASSERT_DESCRIPTION(actual, expected) #else /* In this case, we can guarantee some signal descriptions. But allow the actual result to be longer than the expected result. */ # define ASSERT_DESCRIPTION(actual, expected) \ ASSERT (strncmp (actual, expected, strlen (expected)) == 0) #endif int main (void) { /* Work around bug in cygwin 1.5.25 <string.h> by declaring str as const char *, even though strsignal is supposed to return char *. At any rate, this doesn't hurt, since POSIX 200x states that "The string pointed to shall not be modified by the application." */ const char *str; /* We try a couple of signals, since not all signals are supported everywhere. Notwithstanding the #ifdef for neatness, SIGINT should in fact be available on all platforms. */ #ifdef SIGHUP str = strsignal (SIGHUP); ASSERT (str); ASSERT (*str); ASSERT_DESCRIPTION (str, "Hangup"); #endif #ifdef SIGINT str = strsignal (SIGINT); ASSERT (str); ASSERT (*str); ASSERT_DESCRIPTION (str, "Interrupt"); #endif /* Test that for out-of-range signal numbers the result is usable. */ str = strsignal (-1); ASSERT (str); ASSERT (str != (char *) -1); ASSERT (strlen (str)); str = strsignal (9249234); ASSERT (str); ASSERT (str != (char *) -1); ASSERT (strlen (str)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strstr.c���������������������������������������������������������0000664�0000000�0000000�00000021405�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc. * Written by Bruno Haible and Eric Blake * * This 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 <string.h> #include "signature.h" SIGNATURE_CHECK (strstr, char *, (char const *, char const *)); #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "zerosize-ptr.h" #include "macros.h" int main (int argc, char *argv[]) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. All known platforms that lack alarm also have a quadratic strstr, and the replacement strstr is known to not take too long. */ int alarm_value = 50; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif { const char input[] = "foo"; const char *result = strstr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = strstr (input, "o"); ASSERT (result == input + 1); } { /* On some platforms, the memchr() functions reads past the first occurrence of the byte to be searched, leading to an out-of-bounds read access for strstr(). See <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737>. This is a bug in memchr(), see the Austin Group's clarification <https://www.opengroup.org/austin/docs/austin_454.txt>. */ const char *fix = "aBaaaaaaaaaaax"; char *page_boundary = (char *) zerosize_ptr (); size_t len = strlen (fix) + 1; char *input = page_boundary ? page_boundary - len : malloc (len); const char *result; strcpy (input, fix); result = strstr (input, "B1x"); ASSERT (result == NULL); if (!page_boundary) free (input); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strstr (input, "ABCDABD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strstr (input, "ABCDABE"); ASSERT (result == NULL); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = strstr (input, "ABCDABCD"); ASSERT (result == input + 11); } /* Check that a long periodic needle does not cause false positives. */ { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = strstr (input, need); ASSERT (result == NULL); } { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD_DA_B5_C2_A6_20" "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = strstr (input, need); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (strstr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (strstr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = strstr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } /* Sublinear speed is only possible in memmem; strstr must examine every character of haystack to find its length. */ { /* Ensure that with a barely periodic "short" needle, strstr's search does not mistakenly skip just past the match point. This use of strstr would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_gnu_ld\n"; const char* p = strstr (haystack, needle); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.d."; const char *needle = ".d."; const char* p = strstr (haystack, needle); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, strstr finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = strstr (haystack, needle); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'x', m); needle[m] = '\0'; p = strstr (haystack, needle); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtod.c���������������������������������������������������������0000664�0000000�0000000�00000067755�14110572173�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake * * This 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 (strtod, double, (char const *, char **)); #include <errno.h> #include <float.h> #include <math.h> #include <string.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "macros.h" /* Avoid requiring -lm just for fabs. */ #define FABS(d) ((d) < 0.0 ? -(d) : (d)) int main (void) { int status = 0; /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " ."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " .e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +.e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " in"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " na"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple floating point values. */ { const char input[] = "1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ".5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1e+0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "5e-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 4); ASSERT (errno == 0); } /* Zero. */ { const char input[] = "0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = ".0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "0e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "0e+9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "0e-9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); ASSERT (errno == 0); } /* Suffixes. */ { const char input[] = "1f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1.f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e-"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1E 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "00x1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* Mac OS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xg"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0XP"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x.p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } /* Overflow/underflow. */ { const char input[] = "1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); ASSERT (ptr == input + 9); /* OSF/1 5.1 */ ASSERT (errno == ERANGE); } { const char input[] = "-1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (0.0 <= result && result <= DBL_MIN); ASSERT (!signbit (result)); ASSERT (ptr == input + 9); ASSERT (errno == ERANGE); } { const char input[] = "-1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (-DBL_MIN <= result && result <= 0.0); #if 0 /* FIXME - this is glibc bug 5995; POSIX allows returning positive 0 on negative underflow, even though quality of implementation demands preserving the sign. Disable this test until fixed glibc is more prevalent. */ ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* glibc-2.3.6, mingw */ #endif ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x1P 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Infinity. */ { const char input[] = "iNf"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "-InF"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 4); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 4.0, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinite"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } { const char input[] = "infinitY"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinitY."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } /* NaN. Some processors set the sign bit of the default NaN, so all we check is that using a sign changes the result. */ { const char input[] = "-nan"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); /* HP-UX 11.11 */ #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "+nan("; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (!!signbit (result1) == !!signbit (result2)); ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "-nan()"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = " nan()."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); #endif } { /* The behavior of nan(0) is implementation-defined, but all implementations we know of which handle optional n-char-sequences handle nan(0) the same as nan(). */ const char input[] = "-nan(0)."; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } /* Hex. */ { const char input[] = "0xa"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0XA"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1P+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0X1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1a"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Large buffers. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '\t', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '0', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } #if 0 /* Newlib has an artificial limit of 20000 for the exponent. TODO - gnulib should fix this. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '.'; memset (input + 1, '0', m - 10); input[m - 9] = '1'; input[m - 8] = 'e'; input[m - 7] = '+'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); /* OSF/1 5.1 */ ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '1'; memset (input + 1, '0', m - 9); input[m - 8] = 'e'; input[m - 7] = '-'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } #endif { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '-'; input[1] = '0'; input[2] = 'e'; input[3] = '1'; memset (input + 4, '0', m - 3); input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } /* Rounding. */ /* TODO - is it worth some tests of rounding for typical IEEE corner cases, such as .5 ULP rounding up to the smallest denormal and not causing underflow, or DBL_MIN - .5 ULP not causing an infinite loop? */ return status; } �������������������gnulib-20210822~d383792/tests/test-strtod1.c��������������������������������������������������������0000664�0000000�0000000�00000005235�14110572173�0020167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strtod() in a French locale. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <locale.h> #include "macros.h" int main (int argc, char *argv[]) { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "1,"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ",5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1,5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.5); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1.5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 1 && result == 1.0) || (ptr == input + 3 && result == 1.5)); ASSERT (errno == 0); } { const char input[] = "123.456,789"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 3 && result == 123.0) || (ptr == input + 7 && result > 123.45 && result < 123.46)); ASSERT (errno == 0); } { const char input[] = "123,456.789"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result > 123.45 && result < 123.46); ASSERT (ptr == input + 7); ASSERT (errno == 0); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtod1.sh�������������������������������������������������������0000775�0000000�0000000�00000001034�14110572173�0020353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-strtod1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-strtod1${EXEEXT} || exit 1 fi exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtoimax.c������������������������������������������������������0000664�0000000�0000000�00000010252�14110572173�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 <inttypes.h> #include "signature.h" #ifndef strtoimax SIGNATURE_CHECK (strtoimax, intmax_t, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == -23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == -2147483647 - 1); ASSERT (ptr == input + 11); ASSERT (errno == 0); } if (sizeof (intmax_t) > sizeof (int)) { const char input[] = "4294967295"; char *ptr; intmax_t result; errno = 0; result = strtoimax (input, &ptr, 10); ASSERT (result == (intmax_t) 65535 * (intmax_t) 65537); ASSERT (ptr == input + 10); ASSERT (errno == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtol.c���������������������������������������������������������0000664�0000000�0000000�00000012464�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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" #ifndef strtol SIGNATURE_CHECK (strtol, long, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == -23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == -2147483647 - 1); ASSERT (ptr == input + 11); ASSERT (errno == 0); } if (sizeof (long) > sizeof (int)) { const char input[] = "4294967295"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == (long) 4294967295UL); ASSERT (ptr == input + 10); ASSERT (errno == 0); } /* Hexadecimal integer syntax. */ { const char input[] = "0x2A"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 16); ASSERT (result == 42L); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 0); ASSERT (result == 42L); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 10); ASSERT (result == 0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 16); ASSERT (result == 0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long result; errno = 0; result = strtol (input, &ptr, 0); ASSERT (result == 0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtold.c��������������������������������������������������������0000664�0000000�0000000�00000063572�14110572173�0020272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2021 Free Software Foundation, Inc. * Written by Eric Blake * * This 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 (strtold, long double, (char const *, char **)); #include <errno.h> #include <float.h> #include <math.h> #include <string.h> #include "isnanl-nolibm.h" #include "minus-zero.h" #include "macros.h" /* Avoid requiring -lm just for fabsl. */ #define FABSL(d) ((d) < 0.0L ? -(d) : (d)) int main (void) { int status = 0; /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " ."; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " .e0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +.e-0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " in"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " na"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple floating point values. */ { const char input[] = "1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1."; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ".5"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.5L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == -1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1e+0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e-0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 10.0L); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "5e-1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.5L); ASSERT (ptr == input + 4); ASSERT (errno == 0); } /* Zero. */ { const char input[] = "0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = ".0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "0e0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "0e+9999999"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "0e-9999999"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!!signbit (result) == !!signbit (minus_zerol)); /* IRIX 6.5 */ ASSERT (ptr == input + 2); ASSERT (errno == 0); } /* Suffixes. */ { const char input[] = "1f"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1.f"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e+"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e-"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1E 2"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* HP-UX 11.31/ia64, IRIX 6.5 */ ASSERT (ptr == input + 1); /* HP-UX 11.31/ia64, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "00x1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0x"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!!signbit (result) == !!signbit (minus_zerol)); /* Mac OS X 10.5, IRIX 6.5 */ ASSERT (ptr == input + 2); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0xg"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0xp"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0XP"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0x."; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0xp+"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0xp+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "0x.p+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.2, Mac OS X 10.5, Haiku */ ASSERT (errno == 0); } { const char input[] = "1p+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1P+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 1); ASSERT (errno == 0); } /* Overflow/underflow. */ { const char input[] = "1E1000000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == HUGE_VALL); ASSERT (ptr == input + 9); ASSERT (errno == ERANGE); } { const char input[] = "-1E1000000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == -HUGE_VALL); ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E-100000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (0.0L <= result && result <= LDBL_MIN); ASSERT (!signbit (result)); ASSERT (ptr == input + 9); ASSERT (errno == ERANGE); } { const char input[] = "-1E-100000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (-LDBL_MIN <= result && result <= 0.0L); #if 0 /* FIXME - this is glibc bug 5995; POSIX allows returning positive 0 on negative underflow, even though quality of implementation demands preserving the sign. Disable this test until fixed glibc is more prevalent. */ ASSERT (!!signbit (result) == !!signbit (minus_zerol)); /* glibc-2.3.2, Haiku */ #endif ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E 1000000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* HP-UX 11.31/ia64, IRIX 6.5 */ ASSERT (ptr == input + 1); /* HP-UX 11.31/ia64, IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64, IRIX 6.5 */ } { const char input[] = "0x1P 1000000"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* HP-UX 11.31/ia64, IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* HP-UX 11.31/ia64, IRIX 6.5, mingw */ ASSERT (errno == 0); } /* Infinity. */ { const char input[] = "iNf"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == HUGE_VALL); /* IRIX 6.5 */ ASSERT (ptr == input + 3); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ } { const char input[] = "-InF"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == -HUGE_VALL); /* IRIX 6.5 */ ASSERT (ptr == input + 4); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ } { const char input[] = "infinite"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == HUGE_VALL); /* IRIX 6.5 */ ASSERT (ptr == input + 3); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ } { const char input[] = "infinitY"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == HUGE_VALL); /* IRIX 6.5 */ ASSERT (ptr == input + 8); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ } { const char input[] = "infinitY."; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == HUGE_VALL); /* IRIX 6.5 */ ASSERT (ptr == input + 8); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ } /* NaN. Some processors set the sign bit of the default NaN, so all we check is that using a sign changes the result. */ { const char input[] = "-nan"; char *ptr1; char *ptr2; long double result1; long double result2; errno = 0; result1 = strtold (input, &ptr1); result2 = strtold (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnanl (result1)); /* IRIX 6.5 */ ASSERT (isnanl (result2)); /* IRIX 6.5 */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); # endif ASSERT (ptr1 == input + 4); /* IRIX 6.5 */ ASSERT (ptr2 == input + 4); /* IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ #else ASSERT (result1 == 0.0L); ASSERT (result2 == 0.0L); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "+nan("; char *ptr1; char *ptr2; long double result1; long double result2; errno = 0; result1 = strtold (input, &ptr1); result2 = strtold (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnanl (result1)); /* IRIX 6.5 */ ASSERT (isnanl (result2)); /* IRIX 6.5 */ ASSERT (!!signbit (result1) == !!signbit (result2)); ASSERT (ptr1 == input + 4); /* Mac OS X 10.5, IRIX 6.5 */ ASSERT (ptr2 == input + 4); /* Mac OS X 10.5, IRIX 6.5 */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ #else ASSERT (result1 == 0.0L); ASSERT (result2 == 0.0L); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "-nan()"; char *ptr1; char *ptr2; long double result1; long double result2; errno = 0; result1 = strtold (input, &ptr1); result2 = strtold (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnanl (result1)); /* IRIX 6.5 */ ASSERT (isnanl (result2)); /* IRIX 6.5 */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.2, musl libc, OpenBSD 6.0, IRIX 6.5, mingw, Haiku */ # endif ASSERT (ptr1 == input + 6); /* glibc-2.3.2, IRIX 6.5, mingw, Haiku */ ASSERT (ptr2 == input + 6); /* glibc-2.3.2, IRIX 6.5, mingw, Haiku */ ASSERT (errno == 0); /* HP-UX 11.31/ia64, Haiku */ #else ASSERT (result1 == 0.0L); ASSERT (result2 == 0.0L); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = " nan()."; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnanl (result)); /* IRIX 6.5 */ ASSERT (ptr == input + 6); /* glibc-2.3.2, IRIX 6.5, mingw, Haiku */ ASSERT (errno == 0); /* HP-UX 11.31/ia64, Haiku */ #else ASSERT (result == 0.0L); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); #endif } { /* The behavior of nan(0) is implementation-defined, but all implementations we know of which handle optional n-char-sequences handle nan(0) the same as nan(). */ const char input[] = "-nan(0)."; char *ptr1; char *ptr2; long double result1; long double result2; errno = 0; result1 = strtold (input, &ptr1); result2 = strtold (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnanl (result1)); /* IRIX 6.5 */ ASSERT (isnanl (result2)); /* IRIX 6.5 */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); # endif ASSERT (ptr1 == input + 7); /* glibc-2.3.2, IRIX 6.5, mingw, Haiku */ ASSERT (ptr2 == input + 7); /* glibc-2.3.2, IRIX 6.5, mingw, Haiku */ ASSERT (errno == 0); /* HP-UX 11.31/ia64 */ #else ASSERT (result1 == 0.0L); ASSERT (result2 == 0.0L); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } /* Hex. */ { const char input[] = "0xa"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 10.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0XA"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 10.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1P+"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 2.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 6); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0X1P+1"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 2.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 6); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1a"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 2.0L); /* IRIX 6.5, mingw */ ASSERT (ptr == input + 6); /* IRIX 6.5, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p 2"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* HP-UX 11.31/ia64, IRIX 6.5, mingw */ ASSERT (ptr == input + 3); /* HP-UX 11.31/ia64, IRIX 6.5, mingw */ ASSERT (errno == 0); } /* Large buffers. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; long double result; memset (input, '\t', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; long double result; memset (input, '0', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } #if 0 /* Newlib has an artificial limit of 20000 for the exponent. TODO - gnulib should fix this. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; long double result; input[0] = '.'; memset (input + 1, '0', m - 10); input[m - 9] = '1'; input[m - 8] = 'e'; input[m - 7] = '+'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* Mac OS X 10.5, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.3, IRIX 6.5, mingw */ ASSERT (ptr == input + m); ASSERT (errno == 0); /* Mac OS X 10.5, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.3, IRIX 6.5, mingw */ } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; long double result; input[0] = '1'; memset (input + 1, '0', m - 9); input[m - 8] = 'e'; input[m - 7] = '-'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); /* Mac OS X 10.5, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.3, IRIX 6.5, mingw */ ASSERT (ptr == input + m); ASSERT (errno == 0); /* Mac OS X 10.5, FreeBSD 11.0, NetBSD 7.1, OpenBSD 6.0, Minix 3.3, IRIX 6.5, mingw */ } free (input); } #endif { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; long double result; input[0] = '-'; input[1] = '0'; input[2] = 'e'; input[3] = '1'; memset (input + 4, '0', m - 3); input[m] = '\0'; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.0L); ASSERT (!!signbit (result) == !!signbit (minus_zerol)); /* IRIX 6.5 */ ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } /* Rounding. */ /* TODO - is it worth some tests of rounding for typical IEEE corner cases, such as .5 ULP rounding up to the smallest denormal and not causing underflow, or LDBL_MIN - .5 ULP not causing an infinite loop? */ return status; } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtold1.c�������������������������������������������������������0000664�0000000�0000000�00000005314�14110572173�0020341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strtold() in a French locale. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <errno.h> #include <locale.h> #include "macros.h" int main (int argc, char *argv[]) { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "1,"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.0L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ",5"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 0.5L); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1,5"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result == 1.5L); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1.5"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 1 && result == 1.0L) || (ptr == input + 3 && result == 1.5L)); ASSERT (errno == 0); } { const char input[] = "123.456,789"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 3 && result == 123.0L) || (ptr == input + 7 && result > 123.45L && result < 123.46L)); ASSERT (errno == 0); } { const char input[] = "123,456.789"; char *ptr; long double result; errno = 0; result = strtold (input, &ptr); ASSERT (result > 123.45L && result < 123.46L); ASSERT (ptr == input + 7); ASSERT (errno == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtold1.sh������������������������������������������������������0000775�0000000�0000000�00000001036�14110572173�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-strtold1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-strtold1${EXEEXT} || exit 1 fi exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtoll.c��������������������������������������������������������0000664�0000000�0000000�00000012674�14110572173�0020277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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" #ifndef strtoll SIGNATURE_CHECK (strtoll, long long, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == -23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == -2147483647 - 1); ASSERT (ptr == input + 11); ASSERT (errno == 0); } if (sizeof (long long) > sizeof (int)) { const char input[] = "4294967295"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 65535LL * 65537LL); ASSERT (ptr == input + 10); ASSERT (errno == 0); } /* Hexadecimal integer syntax. */ { const char input[] = "0x2A"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0LL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 16); ASSERT (result == 42LL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 0); ASSERT (result == 42LL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 10); ASSERT (result == 0LL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 16); ASSERT (result == 0LL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; long long result; errno = 0; result = strtoll (input, &ptr, 0); ASSERT (result == 0LL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } return 0; } ��������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtoul.c��������������������������������������������������������0000664�0000000�0000000�00000012717�14110572173�0020306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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" #ifndef strtoul SIGNATURE_CHECK (strtoul, unsigned long, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == - 23UL); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == - 2147483648UL); ASSERT (ptr == input + 11); ASSERT (errno == 0); } { const char input[] = "4294967295"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 4294967295U); ASSERT (ptr == input + 10); ASSERT (errno == 0); } /* Hexadecimal integer syntax. */ { const char input[] = "0x2A"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0UL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 16); ASSERT (result == 42UL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 0); ASSERT (result == 42UL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 10); ASSERT (result == 0UL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 16); ASSERT (result == 0UL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long result; errno = 0; result = strtoul (input, &ptr, 0); ASSERT (result == 0UL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } return 0; } �������������������������������������������������gnulib-20210822~d383792/tests/test-strtoull.c�������������������������������������������������������0000664�0000000�0000000�00000013126�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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" #ifndef strtoull SIGNATURE_CHECK (strtoull, unsigned long long, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == - 23ULL); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == - 2147483648ULL); ASSERT (ptr == input + 11); ASSERT (errno == 0); } { const char input[] = "4294967295"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 4294967295U); ASSERT (ptr == input + 10); ASSERT (errno == 0); } /* Hexadecimal integer syntax. */ { const char input[] = "0x2A"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0ULL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 16); ASSERT (result == 42ULL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x2A"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 0); ASSERT (result == 42ULL); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 10); ASSERT (result == 0ULL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 16); ASSERT (result == 0ULL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; unsigned long long result; errno = 0; result = strtoull (input, &ptr, 0); ASSERT (result == 0ULL); ASSERT (ptr == input + 1); ASSERT (errno == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strtoumax.c������������������������������������������������������0000664�0000000�0000000�00000010174�14110572173�0020633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2011-2021 Free Software Foundation, Inc. * * This 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 <inttypes.h> #include "signature.h" #ifndef strtoumax SIGNATURE_CHECK (strtoumax, uintmax_t, (const char *, char **, int)); #endif #include <errno.h> #include "macros.h" int main (void) { /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " -"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple integer values. */ { const char input[] = "0"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "+0"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "23"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 23"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "+23"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "-23"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == - (uintmax_t) 23); ASSERT (ptr == input + 3); ASSERT (errno == 0); } /* Large integer values. */ { const char input[] = "2147483647"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 2147483647); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-2147483648"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == - (uintmax_t) 2147483648U); ASSERT (ptr == input + 11); ASSERT (errno == 0); } { const char input[] = "4294967295"; char *ptr; uintmax_t result; errno = 0; result = strtoumax (input, &ptr, 10); ASSERT (result == 4294967295U); ASSERT (ptr == input + 10); ASSERT (errno == 0); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-strverscmp.c�����������������������������������������������������0000664�0000000�0000000�00000003560�14110572173�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strverscmp() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strverscmp, int, (const char *, const char *)); #include "macros.h" int main (void) { ASSERT (strverscmp ("", "") == 0); ASSERT (strverscmp ("a", "a") == 0); ASSERT (strverscmp ("a", "b") < 0); ASSERT (strverscmp ("b", "a") > 0); ASSERT (strverscmp ("000", "00") < 0); ASSERT (strverscmp ("00", "000") > 0); ASSERT (strverscmp ("a0", "a") > 0); ASSERT (strverscmp ("00", "01") < 0); ASSERT (strverscmp ("01", "010") < 0); ASSERT (strverscmp ("010", "09") < 0); ASSERT (strverscmp ("09", "0") < 0); ASSERT (strverscmp ("9", "10") < 0); ASSERT (strverscmp ("0a", "0") > 0); /* From glibc bug 9913. */ { static char const a[] = "B0075022800016.gbp.corp.com"; static char const b[] = "B007502280067.gbp.corp.com"; static char const c[] = "B007502357019.GBP.CORP.COM"; ASSERT (strverscmp (a, b) < 0); ASSERT (strverscmp (b, c) < 0); ASSERT (strverscmp (a, c) < 0); ASSERT (strverscmp (b, a) > 0); ASSERT (strverscmp (c, b) > 0); ASSERT (strverscmp (c, a) > 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-supersede-fopen.h������������������������������������������������0000664�0000000�0000000�00000020724�14110572173�0021700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests for opening a file without destroying an old file with the same name. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ static void test_fopen_supersede (bool supersede_if_exists, bool supersede_if_does_not_exist) { char xtemplate[] = "gnulibtestXXXXXX"; char *dir = mkdtemp (xtemplate); char *filename = file_name_concat (dir, "test.mo", NULL); struct stat statbuf; /* Test the case that the file does not yet exist. */ { ASSERT (stat (filename, &statbuf) < 0); struct supersede_final_action action; FILE *fp = fopen_supersede (filename, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("Hello world\n", 1, 12, fp) == 12 && fflush (fp) == 0); if (supersede_if_does_not_exist) ASSERT (stat (filename, &statbuf) < 0); else ASSERT (stat (filename, &statbuf) == 0); ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (filename, &statbuf) == 0); size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); } /* Test the case that the file exists and is a regular file. */ { ASSERT (stat (filename, &statbuf) == 0); dev_t orig_dev = statbuf.st_dev; ino_t orig_ino = statbuf.st_ino; struct supersede_final_action action; FILE *fp = fopen_supersede (filename, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("Foobar\n", 1, 7, fp) == 7 && fflush (fp) == 0); ASSERT (stat (filename, &statbuf) == 0); { size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); if (supersede_if_exists) { ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); } else { ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); } } ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (filename, &statbuf) == 0); size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); if (supersede_if_exists) { /* Verify that the file now has a different inode number, on the same device. */ #if !(defined _WIN32 && !defined __CYGWIN__) ASSERT (memcmp (&orig_dev, &statbuf.st_dev, sizeof (dev_t)) == 0); ASSERT (memcmp (&orig_ino, &statbuf.st_ino, sizeof (ino_t)) != 0); #endif } } /* Test the case that the file exists and is a character device. */ { ASSERT (stat (DEV_NULL, &statbuf) == 0); struct supersede_final_action action; FILE *fp = fopen_supersede (DEV_NULL, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("Foobar\n", 1, 7, fp) == 7 && fflush (fp) == 0); ASSERT (stat (DEV_NULL, &statbuf) == 0); ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (DEV_NULL, &statbuf) == 0); } /* Test the case that the file is a symbolic link to an existing regular file. */ { const char *linkname = "link1"; unlink (linkname); if (symlink (filename, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) == 0); dev_t orig_dev = statbuf.st_dev; ino_t orig_ino = statbuf.st_ino; struct supersede_final_action action; FILE *fp = fopen_supersede (linkname, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("New\n", 1, 4, fp) == 4 && fflush (fp) == 0); ASSERT (stat (linkname, &statbuf) == 0); { size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); if (supersede_if_exists) { ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); } else { ASSERT (file_size == 4); ASSERT (memcmp (file_contents, "New\n", 4) == 0); } } ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); ASSERT (file_size == 4); ASSERT (memcmp (file_contents, "New\n", 4) == 0); if (supersede_if_exists) { /* Verify that the file now has a different inode number, on the same device. */ #if !(defined _WIN32 && !defined __CYGWIN__) ASSERT (memcmp (&orig_dev, &statbuf.st_dev, sizeof (dev_t)) == 0); ASSERT (memcmp (&orig_ino, &statbuf.st_ino, sizeof (ino_t)) != 0); #endif } /* Clean up. */ unlink (linkname); } } /* Test the case that the file is a symbolic link to an existing character device. */ { const char *linkname = "link2"; unlink (linkname); if (symlink (DEV_NULL, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) == 0); struct supersede_final_action action; FILE *fp = fopen_supersede (linkname, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("New\n", 1, 4, fp) == 4 && fflush (fp) == 0); ASSERT (stat (linkname, &statbuf) == 0); ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); /* Clean up. */ unlink (linkname); } } /* Clean up. */ unlink (filename); /* Test the case that the file is a symbolic link to a nonexistent file in an existing directory. */ { const char *linkname = "link3"; unlink (linkname); if (symlink (filename, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) < 0); struct supersede_final_action action; FILE *fp = fopen_supersede (linkname, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp != NULL); ASSERT (fwrite ("Hello world\n", 1, 12, fp) == 12 && fflush (fp) == 0); if (supersede_if_does_not_exist) ASSERT (stat (linkname, &statbuf) < 0); else ASSERT (stat (linkname, &statbuf) == 0); ASSERT (fclose_supersede (fp, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); /* Clean up. */ unlink (linkname); } } /* Test the case that the file is a symbolic link to a nonexistent file in a nonexistent directory. */ { const char *linkname = "link4"; unlink (linkname); if (symlink ("/nonexistent/gnulibtest8237/24715863701440", linkname) >= 0) { ASSERT (stat (linkname, &statbuf) < 0); struct supersede_final_action action; FILE *fp = fopen_supersede (linkname, "wb", supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fp == NULL); ASSERT (errno == ENOENT); ASSERT (stat (linkname, &statbuf) < 0); /* Clean up. */ unlink (linkname); } } /* Clean up. */ unlink (filename); rmdir (dir); } ��������������������������������������������gnulib-20210822~d383792/tests/test-supersede-open.h�������������������������������������������������0000664�0000000�0000000�00000020747�14110572173�0021537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests for opening a file without destroying an old file with the same name. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ static void test_open_supersede (bool supersede_if_exists, bool supersede_if_does_not_exist) { char xtemplate[] = "gnulibtestXXXXXX"; char *dir = mkdtemp (xtemplate); char *filename = file_name_concat (dir, "test.mo", NULL); struct stat statbuf; /* Test the case that the file does not yet exist. */ { ASSERT (stat (filename, &statbuf) < 0); struct supersede_final_action action; int fd = open_supersede (filename, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "Hello world\n", 12) == 12); if (supersede_if_does_not_exist) ASSERT (stat (filename, &statbuf) < 0); else ASSERT (stat (filename, &statbuf) == 0); ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (filename, &statbuf) == 0); size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); } /* Test the case that the file exists and is a regular file. */ { ASSERT (stat (filename, &statbuf) == 0); dev_t orig_dev = statbuf.st_dev; ino_t orig_ino = statbuf.st_ino; struct supersede_final_action action; int fd = open_supersede (filename, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "Foobar\n", 7) == 7); ASSERT (stat (filename, &statbuf) == 0); { size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); if (supersede_if_exists) { ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); } else { ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); } } ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (filename, &statbuf) == 0); size_t file_size; char *file_contents = read_file (filename, RF_BINARY, &file_size); ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); if (supersede_if_exists) { /* Verify that the file now has a different inode number, on the same device. */ #if !(defined _WIN32 && !defined __CYGWIN__) ASSERT (memcmp (&orig_dev, &statbuf.st_dev, sizeof (dev_t)) == 0); ASSERT (memcmp (&orig_ino, &statbuf.st_ino, sizeof (ino_t)) != 0); #endif } } /* Test the case that the file exists and is a character device. */ { ASSERT (stat (DEV_NULL, &statbuf) == 0); struct supersede_final_action action; int fd = open_supersede (DEV_NULL, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "Foobar\n", 7) == 7); ASSERT (stat (DEV_NULL, &statbuf) == 0); ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (DEV_NULL, &statbuf) == 0); } /* Test the case that the file is a symbolic link to an existing regular file. */ { const char *linkname = "link1"; unlink (linkname); if (symlink (filename, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) == 0); dev_t orig_dev = statbuf.st_dev; ino_t orig_ino = statbuf.st_ino; struct supersede_final_action action; int fd = open_supersede (linkname, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "New\n", 4) == 4); ASSERT (stat (linkname, &statbuf) == 0); { size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); if (supersede_if_exists) { ASSERT (file_size == 7); ASSERT (memcmp (file_contents, "Foobar\n", 7) == 0); } else { ASSERT (file_size == 4); ASSERT (memcmp (file_contents, "New\n", 4) == 0); } } ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); ASSERT (file_size == 4); ASSERT (memcmp (file_contents, "New\n", 4) == 0); if (supersede_if_exists) { /* Verify that the file now has a different inode number, on the same device. */ #if !(defined _WIN32 && !defined __CYGWIN__) ASSERT (memcmp (&orig_dev, &statbuf.st_dev, sizeof (dev_t)) == 0); ASSERT (memcmp (&orig_ino, &statbuf.st_ino, sizeof (ino_t)) != 0); #endif } /* Clean up. */ unlink (linkname); } } /* Test the case that the file is a symbolic link to an existing character device. */ { const char *linkname = "link2"; unlink (linkname); if (symlink (DEV_NULL, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) == 0); struct supersede_final_action action; int fd = open_supersede (linkname, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "New\n", 4) == 4); ASSERT (stat (linkname, &statbuf) == 0); ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); /* Clean up. */ unlink (linkname); } } /* Clean up. */ unlink (filename); /* Test the case that the file is a symbolic link to a nonexistent file in an existing directory. */ { const char *linkname = "link3"; unlink (linkname); if (symlink (filename, linkname) >= 0) { ASSERT (stat (linkname, &statbuf) < 0); struct supersede_final_action action; int fd = open_supersede (linkname, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd >= 0); ASSERT (write (fd, "Hello world\n", 12) == 12); if (supersede_if_does_not_exist) ASSERT (stat (linkname, &statbuf) < 0); else ASSERT (stat (linkname, &statbuf) == 0); ASSERT (close_supersede (fd, &action) == 0); ASSERT (stat (linkname, &statbuf) == 0); size_t file_size; char *file_contents = read_file (linkname, RF_BINARY, &file_size); ASSERT (file_size == 12); ASSERT (memcmp (file_contents, "Hello world\n", 12) == 0); /* Clean up. */ unlink (linkname); } } /* Test the case that the file is a symbolic link to a nonexistent file in a nonexistent directory. */ { const char *linkname = "link4"; unlink (linkname); if (symlink ("/nonexistent/gnulibtest8237/24715863701440", linkname) >= 0) { ASSERT (stat (linkname, &statbuf) < 0); struct supersede_final_action action; int fd = open_supersede (linkname, O_RDWR | O_BINARY | O_TRUNC, 0666, supersede_if_exists, supersede_if_does_not_exist, &action); ASSERT (fd < 0); ASSERT (errno == ENOENT); ASSERT (stat (linkname, &statbuf) < 0); /* Clean up. */ unlink (linkname); } } /* Clean up. */ unlink (filename); rmdir (dir); } �������������������������gnulib-20210822~d383792/tests/test-supersede.c������������������������������������������������������0000664�0000000�0000000�00000003254�14110572173�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests for opening a file without destroying an old file with the same name. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ #include <config.h> /* Specification. */ #include "supersede.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "filenamecat.h" #include "read-file.h" #include "macros.h" /* The name of the "always silent" device. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ # define DEV_NULL "NUL" #else /* Unix API. */ # define DEV_NULL "/dev/null" #endif #include "test-supersede-open.h" #include "test-supersede-fopen.h" int main (void) { test_open_supersede (false, false); test_open_supersede (false, true); test_open_supersede (true, false); test_open_supersede (true, true); test_fopen_supersede (false, false); test_fopen_supersede (false, true); test_fopen_supersede (true, false); test_fopen_supersede (true, true); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-symlink.c��������������������������������������������������������0000664�0000000�0000000�00000002423�14110572173�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (symlink, int, (char const *, char const *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-symlink.t" #include "test-symlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_symlink (symlink, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-symlink.h��������������������������������������������������������0000664�0000000�0000000�00000006157�14110572173�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both symlink(a,b) and symlinkat(a,AT_FDCWD,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_symlink (int (*func) (char const *, char const *), bool print) { if (func ("nowhere", BASE "link1")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } /* Some systems allow the creation of 0-length symlinks as a synonym for "."; but most reject it. */ { int status; errno = 0; status = func ("", BASE "link2"); if (status == -1) ASSERT (errno == ENOENT || errno == EINVAL); else { ASSERT (status == 0); ASSERT (unlink (BASE "link2") == 0); } } /* Sanity checks of failures. */ errno = 0; ASSERT (func ("nowhere", "") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nowhere", ".") == -1); ASSERT (errno == EEXIST || errno == EINVAL); errno = 0; ASSERT (func ("somewhere", BASE "link1") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "link2/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; ASSERT (func ("nowhere", BASE "dir") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "dir/") == -1); ASSERT (errno == EEXIST || errno == EINVAL || errno == ENOENT /* Lustre FS on Linux */); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func ("nowhere", BASE "file") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "file/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); /* Trailing slash must always be rejected. */ ASSERT (unlink (BASE "link1") == 0); ASSERT (func (BASE "link2", BASE "link1") == 0); errno = 0; ASSERT (func (BASE "nowhere", BASE "link1/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); errno = 0; ASSERT (unlink (BASE "link2") == -1); ASSERT (errno == ENOENT); /* Cleanup. */ ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-symlinkat.c������������������������������������������������������0000664�0000000�0000000�00000004343�14110572173�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlinkat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (symlinkat, int, (char const *, int, char const *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #ifndef HAVE_SYMLINK # define HAVE_SYMLINK 0 #endif #define BASE "test-symlinkat.t" #include "test-symlink.h" static int dfd = AT_FDCWD; static int do_symlink (char const *contents, char const *name) { return symlinkat (contents, dfd, name); } int main (void) { int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (symlinkat ("foo", -1, "bar") == -1); ASSERT (errno == EBADF || errno == ENOSYS /* seen on mingw */ ); } { close (99); errno = 0; ASSERT (symlinkat ("foo", 99, "bar") == -1); ASSERT (errno == EBADF || errno == ENOSYS /* seen on mingw */ ); } /* Perform same checks as counterpart functions. */ result = test_symlink (do_symlink, false); dfd = openat (AT_FDCWD, ".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_symlink (do_symlink, false) == result); ASSERT (close (dfd) == 0); if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_file.c�������������������������������������������������������0000664�0000000�0000000�00000001745�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/file.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/file.h> int main (void) { switch (0) { case LOCK_SH: case LOCK_EX: case LOCK_NB: case LOCK_UN: ; default: ; } return 0; } ���������������������������gnulib-20210822~d383792/tests/test-sys_ioctl-c++.cc�������������������������������������������������0000664�0000000�0000000�00000002003�14110572173�0021276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/ioctl.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/ioctl.h> #include "signature.h" #if GNULIB_TEST_IOCTL SIGNATURE_CHECK (GNULIB_NAMESPACE::ioctl, int, (int, int, ...)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_ioctl.c������������������������������������������������������0000664�0000000�0000000�00000001551�14110572173�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/ioctl.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/ioctl.h> int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_random-c++.cc������������������������������������������������0000664�0000000�0000000�00000002040�14110572173�0021445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/random.h> substitute in C++ mode. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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>, 2020. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/random.h> #include "signature.h" #if GNULIB_TEST_GETRANDOM SIGNATURE_CHECK (GNULIB_NAMESPACE::getrandom, ssize_t, (void *, size_t, unsigned int)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_random.c�����������������������������������������������������0000664�0000000�0000000�00000001651�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/random.h> substitute. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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 <sys/random.h> /* Check that the necessary constants are defined. */ int flags[] = { GRND_RANDOM, GRND_NONBLOCK }; int main (void) { return 0; } ���������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_resource-c++.cc����������������������������������������������0000664�0000000�0000000�00000002030�14110572173�0022013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/resource.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2017. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/resource.h> #include "signature.h" #if GNULIB_TEST_GETRUSAGE SIGNATURE_CHECK (GNULIB_NAMESPACE::getrusage, int, (int, struct rusage *)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_resource.c���������������������������������������������������0000664�0000000�0000000�00000003020�14110572173�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/resource.h> substitute. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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 <sys/resource.h> /* Check that necessary types are defined. */ #ifdef TODO /* Not implemented in gnulib yet */ rlim_t t1; struct rlimit t2; #endif struct rusage t3; #ifdef TODO struct timeval t4; id_t t5; time_t t10; suseconds_t t11; fd_set t12; #endif /* Check that the necessary constants are defined. */ #ifdef TODO /* Not implemented in gnulib yet */ int prios[] = { PRIO_PROCESS, PRIO_PGRP, PRIO_USER }; int rlims[] = { RLIM_INFINITY, RLIM_SAVED_MAX, RLIM_SAVED_CUR }; #endif int rusages[] = { RUSAGE_SELF, RUSAGE_CHILDREN }; #ifdef TODO int rlimits[] = { RLIMIT_CORE, RLIMIT_CPU, RLIMIT_DATA, RLIMIT_FSIZE, RLIMIT_NOFILE, RLIMIT_STACK, RLIMIT_AS }; #endif int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_select-c++.cc������������������������������������������������0000664�0000000�0000000�00000002453�14110572173�0021454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/select.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/select.h> #include "signature.h" #if GNULIB_TEST_PSELECT SIGNATURE_CHECK (GNULIB_NAMESPACE::pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, sigset_t const *restrict)); #endif #if GNULIB_TEST_SELECT SIGNATURE_CHECK (GNULIB_NAMESPACE::select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_select.c�����������������������������������������������������0000664�0000000�0000000�00000003362�14110572173�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/select.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <sys/select.h> #include "signature.h" /* The following may be macros without underlying functions, so only check signature if they are not macros. */ #ifndef FD_CLR SIGNATURE_CHECK (FD_CLR, void, (int, fd_set *)); #endif #ifndef FD_ISSET SIGNATURE_CHECK (FD_ISSET, void, (int, fd_set *)); #endif #ifndef FD_SET SIGNATURE_CHECK (FD_SET, int, (int, fd_set *)); #endif #ifndef FD_ZERO 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) { /* Check that FD_ZERO can be used. This should not yield a warning such as "warning: implicit declaration of function 'memset'". */ fd_set fds; FD_ZERO (&fds); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_socket-c++.cc������������������������������������������������0000664�0000000�0000000�00000005607�14110572173�0021471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/socket.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/socket.h> #include "signature.h" #if GNULIB_TEST_SOCKET SIGNATURE_CHECK (GNULIB_NAMESPACE::socket, int, (int, int, int)); #endif #if GNULIB_TEST_CONNECT SIGNATURE_CHECK (GNULIB_NAMESPACE::connect, int, (int, const struct sockaddr *, socklen_t)); #endif #if GNULIB_TEST_ACCEPT SIGNATURE_CHECK (GNULIB_NAMESPACE::accept, int, (int, struct sockaddr *, socklen_t *)); #endif #if GNULIB_TEST_BIND SIGNATURE_CHECK (GNULIB_NAMESPACE::bind, int, (int, const struct sockaddr *, socklen_t)); #endif #if GNULIB_TEST_GETPEERNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::getpeername, int, (int, struct sockaddr *, socklen_t *)); #endif #if GNULIB_TEST_GETSOCKNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::getsockname, int, (int, struct sockaddr *, socklen_t *)); #endif #if GNULIB_TEST_GETSOCKOPT SIGNATURE_CHECK (GNULIB_NAMESPACE::getsockopt, int, (int, int, int, void *, socklen_t *)); #endif #if GNULIB_TEST_LISTEN SIGNATURE_CHECK (GNULIB_NAMESPACE::listen, int, (int, int)); #endif #if GNULIB_TEST_RECV SIGNATURE_CHECK (GNULIB_NAMESPACE::recv, ssize_t, (int, void *, size_t, int)); #endif #if GNULIB_TEST_SEND SIGNATURE_CHECK (GNULIB_NAMESPACE::send, ssize_t, (int, const void *, size_t, int)); #endif #if GNULIB_TEST_RECVFROM SIGNATURE_CHECK (GNULIB_NAMESPACE::recvfrom, ssize_t, (int, void *, size_t, int, struct sockaddr *, socklen_t *)); #endif #if GNULIB_TEST_SENDTO SIGNATURE_CHECK (GNULIB_NAMESPACE::sendto, ssize_t, (int, const void *, size_t, int, const struct sockaddr *, socklen_t)); #endif #if GNULIB_TEST_SETSOCKOPT SIGNATURE_CHECK (GNULIB_NAMESPACE::setsockopt, int, (int, int, int, const void *, socklen_t)); #endif #if GNULIB_TEST_SHUTDOWN SIGNATURE_CHECK (GNULIB_NAMESPACE::shutdown, int, (int, int)); #endif #if GNULIB_TEST_ACCEPT4 SIGNATURE_CHECK (GNULIB_NAMESPACE::accept4, int, (int, struct sockaddr *, socklen_t *, int)); #endif int main () { } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_socket.c�����������������������������������������������������0000664�0000000�0000000�00000003301�14110572173�0020745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/socket.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <sys/socket.h> #include <errno.h> #if HAVE_SHUTDOWN /* Check some integer constant expressions. */ int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; #endif /* Check that the 'socklen_t' type is defined. */ socklen_t t1; /* Check that the 'size_t' and 'ssize_t' types are defined. */ size_t t2; ssize_t t3; /* Check that 'struct iovec' is defined. */ struct iovec io; /* Check that a minimal set of 'struct msghdr' is defined. */ struct msghdr msg; int main (void) { struct sockaddr_storage x; sa_family_t i; /* Check some errno values. */ switch (ENOTSOCK) { case ENOTSOCK: case EADDRINUSE: case ENETRESET: case ECONNABORTED: case ECONNRESET: case ENOTCONN: case ESHUTDOWN: break; } x.ss_family = 42; i = 42; msg.msg_iov = &io; return (x.ss_family - i + msg.msg_namelen + msg.msg_iov->iov_len + msg.msg_iovlen); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_stat-c++.cc��������������������������������������������������0000664�0000000�0000000�00000005140�14110572173�0021144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/stat.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/stat.h> #include "signature.h" #if GNULIB_TEST_FCHMODAT SIGNATURE_CHECK (GNULIB_NAMESPACE::fchmodat, int, (int, char const *, mode_t, int)); #endif #if GNULIB_TEST_FSTAT SIGNATURE_CHECK (GNULIB_NAMESPACE::fstat, int, (int, struct stat *)); #endif #if GNULIB_TEST_FSTATAT SIGNATURE_CHECK (GNULIB_NAMESPACE::fstatat, int, (int, char const *, struct stat *, int)); #endif #if GNULIB_TEST_FUTIMENS SIGNATURE_CHECK (GNULIB_NAMESPACE::futimens, int, (int, struct timespec const[2])); #endif #if GNULIB_TEST_GETUMASK SIGNATURE_CHECK (GNULIB_NAMESPACE::getumask, mode_t, (void)); #endif #if GNULIB_TEST_LCHMOD SIGNATURE_CHECK (GNULIB_NAMESPACE::lchmod, int, (const char *, mode_t)); #endif #if GNULIB_TEST_LSTAT SIGNATURE_CHECK (GNULIB_NAMESPACE::lstat, int, (const char *, struct stat *)); #endif SIGNATURE_CHECK (GNULIB_NAMESPACE::mkdir, int, (char const *, mode_t)); #if GNULIB_TEST_MKDIRAT SIGNATURE_CHECK (GNULIB_NAMESPACE::mkdirat, int, (int, char const *, mode_t)); #endif #if GNULIB_TEST_MKFIFO SIGNATURE_CHECK (GNULIB_NAMESPACE::mkfifo, int, (char const *, mode_t)); #endif #if GNULIB_TEST_MKFIFOAT SIGNATURE_CHECK (GNULIB_NAMESPACE::mkfifoat, int, (int, char const *, mode_t)); #endif #if GNULIB_TEST_MKNOD SIGNATURE_CHECK (GNULIB_NAMESPACE::mknod, int, (char const *, mode_t, dev_t)); #endif #if GNULIB_TEST_MKNODAT SIGNATURE_CHECK (GNULIB_NAMESPACE::mknodat, int, (int, char const *, mode_t, dev_t)); #endif #if GNULIB_TEST_STAT //SIGNATURE_CHECK (GNULIB_NAMESPACE::stat, int, (const char *, struct stat *)); #endif #if GNULIB_TEST_UTIMENSAT SIGNATURE_CHECK (GNULIB_NAMESPACE::utimensat, int, (int, char const *, struct timespec const[2], int)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_stat.c�������������������������������������������������������0000664�0000000�0000000�00000016266�14110572173�0020446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/stat.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <sys/stat.h> #include "verify.h" /* Check the existence of some macros. */ int a[] = { S_IFMT, #ifdef S_IFBLK /* missing on MSVC */ S_IFBLK, #endif S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, #ifdef S_IFLNK /* missing on native Windows and DJGPP */ S_IFLNK, #endif #ifdef S_IFSOCK /* missing on native Windows and DJGPP */ S_IFSOCK, #endif S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, S_ISVTX, S_ISBLK (S_IFREG), S_ISCHR (S_IFREG), S_ISDIR (S_IFREG), S_ISFIFO (S_IFREG), S_ISREG (S_IFREG), S_ISLNK (S_IFREG), S_ISSOCK (S_IFREG), S_ISDOOR (S_IFREG), S_ISMPB (S_IFREG), S_ISMPX (S_IFREG), S_ISNAM (S_IFREG), S_ISNWK (S_IFREG), S_ISPORT (S_IFREG), S_ISCTG (S_IFREG), S_ISOFD (S_IFREG), S_ISOFL (S_IFREG), S_ISWHT (S_IFREG) }; /* Sanity checks. */ verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); #ifdef S_IFBLK verify (S_ISBLK (S_IFBLK)); #endif verify (!S_ISBLK (S_IFCHR)); verify (!S_ISBLK (S_IFDIR)); verify (!S_ISBLK (S_IFIFO)); verify (!S_ISBLK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISBLK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISBLK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISCHR (S_IFBLK)); #endif verify (S_ISCHR (S_IFCHR)); verify (!S_ISCHR (S_IFDIR)); verify (!S_ISCHR (S_IFIFO)); verify (!S_ISCHR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISCHR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISCHR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISDIR (S_IFBLK)); #endif verify (!S_ISDIR (S_IFCHR)); verify (S_ISDIR (S_IFDIR)); verify (!S_ISDIR (S_IFIFO)); verify (!S_ISDIR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISDIR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISDIR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISFIFO (S_IFBLK)); #endif verify (!S_ISFIFO (S_IFCHR)); verify (!S_ISFIFO (S_IFDIR)); verify (S_ISFIFO (S_IFIFO)); verify (!S_ISFIFO (S_IFREG)); #ifdef S_IFLNK verify (!S_ISFIFO (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISFIFO (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISREG (S_IFBLK)); #endif verify (!S_ISREG (S_IFCHR)); verify (!S_ISREG (S_IFDIR)); verify (!S_ISREG (S_IFIFO)); verify (S_ISREG (S_IFREG)); #ifdef S_IFLNK verify (!S_ISREG (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISREG (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISLNK (S_IFBLK)); #endif verify (!S_ISLNK (S_IFCHR)); verify (!S_ISLNK (S_IFDIR)); verify (!S_ISLNK (S_IFIFO)); verify (!S_ISLNK (S_IFREG)); #ifdef S_IFLNK verify (S_ISLNK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISLNK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISSOCK (S_IFBLK)); #endif verify (!S_ISSOCK (S_IFCHR)); verify (!S_ISSOCK (S_IFDIR)); verify (!S_ISSOCK (S_IFIFO)); verify (!S_ISSOCK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISSOCK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (S_ISSOCK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISDOOR (S_IFBLK)); #endif verify (!S_ISDOOR (S_IFCHR)); verify (!S_ISDOOR (S_IFDIR)); verify (!S_ISDOOR (S_IFIFO)); verify (!S_ISDOOR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISDOOR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISDOOR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISMPB (S_IFBLK)); #endif verify (!S_ISMPB (S_IFCHR)); verify (!S_ISMPB (S_IFDIR)); verify (!S_ISMPB (S_IFIFO)); verify (!S_ISMPB (S_IFREG)); #ifdef S_IFLNK verify (!S_ISMPB (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISMPB (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISMPX (S_IFBLK)); #endif verify (!S_ISMPX (S_IFCHR)); verify (!S_ISMPX (S_IFDIR)); verify (!S_ISMPX (S_IFIFO)); verify (!S_ISMPX (S_IFREG)); #ifdef S_IFLNK verify (!S_ISMPX (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISMPX (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISNAM (S_IFBLK)); #endif verify (!S_ISNAM (S_IFCHR)); verify (!S_ISNAM (S_IFDIR)); verify (!S_ISNAM (S_IFIFO)); verify (!S_ISNAM (S_IFREG)); #ifdef S_IFLNK verify (!S_ISNAM (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISNAM (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISNWK (S_IFBLK)); #endif verify (!S_ISNWK (S_IFCHR)); verify (!S_ISNWK (S_IFDIR)); verify (!S_ISNWK (S_IFIFO)); verify (!S_ISNWK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISNWK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISNWK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISPORT (S_IFBLK)); #endif verify (!S_ISPORT (S_IFCHR)); verify (!S_ISPORT (S_IFDIR)); verify (!S_ISPORT (S_IFIFO)); verify (!S_ISPORT (S_IFREG)); #ifdef S_IFLNK verify (!S_ISPORT (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISPORT (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISCTG (S_IFBLK)); #endif verify (!S_ISCTG (S_IFCHR)); verify (!S_ISCTG (S_IFDIR)); verify (!S_ISCTG (S_IFIFO)); verify (!S_ISCTG (S_IFREG)); #ifdef S_IFLNK verify (!S_ISCTG (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISCTG (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISOFD (S_IFBLK)); #endif verify (!S_ISOFD (S_IFCHR)); verify (!S_ISOFD (S_IFDIR)); verify (!S_ISOFD (S_IFIFO)); verify (!S_ISOFD (S_IFREG)); #ifdef S_IFLNK verify (!S_ISOFD (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISOFD (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISOFL (S_IFBLK)); #endif verify (!S_ISOFL (S_IFCHR)); verify (!S_ISOFL (S_IFDIR)); verify (!S_ISOFL (S_IFIFO)); verify (!S_ISOFL (S_IFREG)); #ifdef S_IFLNK verify (!S_ISOFL (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISOFL (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISWHT (S_IFBLK)); #endif verify (!S_ISWHT (S_IFCHR)); verify (!S_ISWHT (S_IFDIR)); verify (!S_ISWHT (S_IFIFO)); verify (!S_ISWHT (S_IFREG)); #ifdef S_IFLNK verify (!S_ISWHT (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISWHT (S_IFSOCK)); #endif /* POSIX 2008 requires traditional encoding of permission constants. */ verify (S_IRWXU == 00700); verify (S_IRUSR == 00400); verify (S_IWUSR == 00200); verify (S_IXUSR == 00100); verify (S_IRWXG == 00070); verify (S_IRGRP == 00040); verify (S_IWGRP == 00020); verify (S_IXGRP == 00010); verify (S_IRWXO == 00007); verify (S_IROTH == 00004); verify (S_IWOTH == 00002); verify (S_IXOTH == 00001); verify (S_ISUID == 04000); verify (S_ISGID == 02000); verify (S_ISVTX == 01000); #if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \ || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \ || UTIME_NOW == UTIME_OMIT) invalid UTIME macros #endif /* Check the existence of some types. */ nlink_t t1; off_t t2; mode_t t3; struct timespec st; int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_time-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002053�14110572173�0021127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/time.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/time.h> #include "signature.h" #if GNULIB_TEST_GETTIMEOFDAY SIGNATURE_CHECK (GNULIB_NAMESPACE::gettimeofday, int, (struct timeval *, void *)); #endif int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_time.c�������������������������������������������������������0000664�0000000�0000000�00000002150�14110572173�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/time.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <sys/time.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]; int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_times.c������������������������������������������������������0000664�0000000�0000000�00000001734�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/times.h> substitute. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include <sys/times.h> static struct tms tms; int main (void) { clock_t t = tms.tms_utime + tms.tms_stime + tms.tms_cutime + tms.tms_cstime; return t; } ������������������������������������gnulib-20210822~d383792/tests/test-sys_types-c++.cc�������������������������������������������������0000664�0000000�0000000�00000001613�14110572173�0021336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/types.h> substitute in C++ mode. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/types.h> int main () { } ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_types.c������������������������������������������������������0000664�0000000�0000000�00000001722�14110572173�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/types.h> substitute. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <sys/types.h> /* Check that the types are all defined. */ pid_t t1; size_t t2; ssize_t t3; off_t t4; mode_t t5; int main (void) { return 0; } ����������������������������������������������gnulib-20210822~d383792/tests/test-sys_uio.c��������������������������������������������������������0000664�0000000�0000000�00000001736�14110572173�0020263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/uio.h> substitute. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Eric Blake <eblake@redhat.com>, 2011. */ #include <config.h> #include <sys/uio.h> /* Check that necessary types are defined. */ size_t a; ssize_t b; struct iovec c; int main (void) { return a + b + !!c.iov_base + c.iov_len; } ����������������������������������gnulib-20210822~d383792/tests/test-sys_utsname.c����������������������������������������������������0000664�0000000�0000000�00000002111�14110572173�0021127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/utsname.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <sys/utsname.h> #include <string.h> int main () { struct utsname buf; strcpy (buf.sysname, "Linux"); strcpy (buf.nodename, "hobbybox"); strcpy (buf.release, "3.141.592"); strcpy (buf.version, "GENERIC"); strcpy (buf.machine, "i586"); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_wait-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002013�14110572173�0021131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/wait.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <sys/wait.h> #include "signature.h" #if GNULIB_TEST_WAITPID SIGNATURE_CHECK (GNULIB_NAMESPACE::waitpid, pid_t, (pid_t, int *, int)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_wait.c�������������������������������������������������������0000664�0000000�0000000�00000002257�14110572173�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/wait.h> substitute. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/wait.h> /* Check for existence of required types. */ static pid_t a; #include "test-sys_wait.h" int main (void) { if (test_sys_wait_macros ()) return 1; #if 0 switch (WCONTINUED) { /* Gnulib doesn't guarantee these, yet. */ case WCONTINUED: case WEXITED: case WNOWAIT: case WSTOPPED: break; } #endif return a ? 1 : 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sys_wait.h�������������������������������������������������������0000664�0000000�0000000�00000003616�14110572173�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of macros shared between <sys/wait.h> and <stdlib.h>. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2010. */ static int test_sys_wait_macros (void) { /* Check subset of <sys/wait.h> macros that must be visible here. Note that some of these macros are only portable when operating on an lvalue. */ int i; for (i = 0; i < 0x8000; i = (i ? i << 1 : 1)) { /* POSIX requires that for all valid process statuses, that exactly one of these three macros is true. But not all possible 16-bit values map to valid process status. Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 or 0x8000 to flag that core was also dumped. Since we don't know which byte is WIFEXITED, we skip the both possible bits that can signal core dump. */ if (i == 0x80) continue; if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) return 1; } i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); switch (i) { #if 0 /* Gnulib doesn't guarantee these, yet. */ case WNOHANG: case WUNTRACED: #endif break; } return 0; } ������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-sysexits.c�������������������������������������������������������0000664�0000000�0000000�00000002552�14110572173�0020461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sysexits.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <sysexits.h> int exitcode; int main () { /* Check that all EX_* symbols are defined to integer constant expressions with mutually different values. */ switch (exitcode) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-system-quote-child.c���������������������������������������������0000664�0000000�0000000�00000003745�14110572173�0022333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-system-quote-main. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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, 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 <stdio.h> #include <string.h> /* Do not use any gnulib replacements, since this program should link against as few libraries as possible. */ #undef fclose #undef fopen #undef fprintf #undef fread /* Restore the original fopen definition on AIX. */ #if defined _AIX && defined _LARGE_FILES # define fopen fopen64 #endif #define EXPECTED_DATA_FILE "t-sq-data.tmp" int main (int argc, char *argv[]) { const char *arg; char expected_data[1000]; size_t expected_data_len; if (argc < 2) /* Expected one data argument, received none. */ return 2; if (argc > 2) /* Expected one data argument, received more than one. */ return 3; arg = argv[1]; /* Read the contents of EXPECTED_DATA_FILE. */ { FILE *fp = fopen (EXPECTED_DATA_FILE, "rb"); if (fp == NULL) return 4; expected_data_len = fread (expected_data, 1, sizeof (expected_data), fp); if (fclose (fp)) return 5; } if (!(strlen (arg) == expected_data_len && memcmp (arg, expected_data, expected_data_len) == 0)) { /* arg is not as expected. */ fprintf (stderr, "expected: %.*s\nreceived: %s\n", (int)expected_data_len, expected_data, arg); return 1; } else return 0; } ���������������������������gnulib-20210822~d383792/tests/test-system-quote-main.c����������������������������������������������0000664�0000000�0000000�00000025144�14110572173�0022171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of system-quote module. Copyright (C) 2012-2021 Free Software Foundation, Inc. This 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, 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>, 2012. */ #include <config.h> /* Specification. */ #include "system-quote.h" #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE #endif #include <limits.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #include "macros.h" #define EXPECTED_DATA_FILE "t-sq-data.tmp" static int failed; static void check_one (enum system_command_interpreter interpreter, const char *prog, const char *input) { char buf[1000]; size_t output_len; char *output; char *bufend; output_len = system_quote_length (interpreter, input); output = system_quote (interpreter, input); ASSERT (strlen (output) == output_len); ASSERT (output_len <= sizeof (buf) - 2); memset (buf, '\0', output_len + 1); buf[output_len + 1] = '%'; bufend = system_quote_copy (buf, interpreter, input); ASSERT (bufend == buf + output_len); ASSERT (memcmp (buf, output, output_len + 1) == 0); ASSERT (buf[output_len + 1] == '%'); /* Store INPUT in EXPECTED_DATA_FILE, for verification by the child process. */ { FILE *fp = fopen (EXPECTED_DATA_FILE, "wb"); if (fp == NULL) exit (3); if (fwrite (input, 1, strlen (input), fp) != strlen (input)) exit (4); if (fclose (fp)) exit (5); } /* Invoke the child process through system() and popen(). */ { char command[1000]; sprintf (command, "%s %s", prog, output); switch (interpreter) { case SCI_SYSTEM: #ifdef WINDOWS_NATIVE case SCI_WINDOWS_CMD: #endif { int exitcode = system (command); if (exitcode != 0) { fprintf (stderr, "for input = |%s|: system() command failed with status %d: %s\n", input, exitcode, command); failed = 1; } } { FILE *fp = popen (command, "r"); int exitcode = pclose (fp); if (exitcode != 0) { fprintf (stderr, "for input = |%s|: popen() command failed with status %d: %s\n", input, exitcode, command); failed = 1; } } break; #ifdef WINDOWS_NATIVE case SCI_WINDOWS_CREATEPROCESS: { PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; sinfo.cb = sizeof (STARTUPINFO); sinfo.lpReserved = NULL; sinfo.lpDesktop = NULL; sinfo.lpTitle = NULL; sinfo.cbReserved2 = 0; sinfo.lpReserved2 = NULL; sinfo.dwFlags = STARTF_USESTDHANDLES; sinfo.hStdInput = GetStdHandle (STD_INPUT_HANDLE); sinfo.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE); sinfo.hStdError = GetStdHandle (STD_ERROR_HANDLE); if (CreateProcess (NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &sinfo, &pinfo)) { DWORD exitcode; CloseHandle (pinfo.hThread); if (WaitForSingleObject (pinfo.hProcess, INFINITE) == WAIT_OBJECT_0) { if (GetExitCodeProcess (pinfo.hProcess, &exitcode)) { if (exitcode != 0) { fprintf (stderr, "for input = |%s|: CreateProcess() command failed with status %d: %s\n", input, exitcode, command); failed = 1; } } else { fprintf (stderr, "for input = |%s|: GetExitCodeProcess failed, GetLastError() = %u\n", input, GetLastError ()); failed = 1; } } else { fprintf (stderr, "for input = |%s|: WaitForSingleObject failed\n", input); failed = 1; } CloseHandle (pinfo.hProcess); } else { fprintf (stderr, "for input = |%s|: CreateProcess failed, GetLastError() = %u\n", input, GetLastError ()); failed = 1; } } break; #endif default: break; } } free (output); } static void check_all (enum system_command_interpreter interpreter, bool windows_cmd_limitations, const char *prog) { /* Check the system_quote_length, system_quote_copy, system_quote functions. */ { int c; /* Empty argument. */ check_one (interpreter, prog, ""); /* Identifier or number. */ check_one (interpreter, prog, "foo"); check_one (interpreter, prog, "phr0ck"); /* Whitespace would be interpreted as argument separator by the shell. */ check_one (interpreter, prog, "foo\tbar"); if (!windows_cmd_limitations) { check_one (interpreter, prog, "foo\nbar"); check_one (interpreter, prog, "foo\rbar"); } check_one (interpreter, prog, "foo bar"); /* '!' at the beginning of argv[0] would introduce a negated command. */ check_one (interpreter, prog, "!foo"); /* '"' would be interpreted as the start of a string. */ check_one (interpreter, prog, "\"foo\"bar"); /* '#' at the beginning of an argument would be interpreted as the start of a comment. */ check_one (interpreter, prog, "#foo"); /* '$' at the beginning of an argument would be interpreted as a variable reference. */ check_one (interpreter, prog, "$foo"); /* '&' at the beginning of an argument would be interpreted as a background task indicator. */ check_one (interpreter, prog, "&"); /* "'" would be interpreted as the start of a string. */ check_one (interpreter, prog, "'foo'bar"); /* '(' at the beginning of argv[0] would introduce a subshell command. */ check_one (interpreter, prog, "("); /* ')' at the beginning of an argument would be interpreted as the end of the command. */ check_one (interpreter, prog, ")"); /* '*' would be interpreted as a wildcard character. */ check_one (interpreter, prog, "*"); check_one (interpreter, prog, "*foo"); /* ';' at the beginning of an argument would be interpreted as an empty statement in argv[0] and as the end of the command otherwise. */ check_one (interpreter, prog, ";"); check_one (interpreter, prog, "foo;"); /* '<' would be interpreted as a redirection of stdin. */ check_one (interpreter, prog, "<"); /* '=' inside argv[0] would be interpreted as an environment variable assignment. */ check_one (interpreter, prog, "foo=bar"); /* '>' would be interpreted as a redirection of stdout. */ check_one (interpreter, prog, ">"); /* '?' would be interpreted as a wildcard character. */ check_one (interpreter, prog, "?"); check_one (interpreter, prog, "??"); check_one (interpreter, prog, "???"); check_one (interpreter, prog, "????"); check_one (interpreter, prog, "?????"); check_one (interpreter, prog, "??????"); check_one (interpreter, prog, "???????"); check_one (interpreter, prog, "????????"); check_one (interpreter, prog, "?????????"); check_one (interpreter, prog, "??????????"); check_one (interpreter, prog, "foo?bar"); /* '^' would be interpreted in old /bin/sh, e.g. SunOS 4.1.4. */ check_one (interpreter, prog, "^"); /* "[...]" would be interpreted as a wildcard pattern. */ check_one (interpreter, prog, "["); check_one (interpreter, prog, "]"); /* '\' would be interpreted as an escape character. */ check_one (interpreter, prog, "\\foo"); /* '`' would be interpreted as the start of a command substitution. */ check_one (interpreter, prog, "`foo"); /* '{' at the beginning of argv[0] would introduce a complex command. */ check_one (interpreter, prog, "{"); /* '|' at the beginning of an argument would be interpreted as a pipe between commands. */ check_one (interpreter, prog, "|"); /* '}' at the beginning of an argument would be interpreted as the end of the command. */ check_one (interpreter, prog, "}"); /* '~' at the beginning of an argument would be interpreted as a reference to a user's home directory. */ check_one (interpreter, prog, "~"); check_one (interpreter, prog, "~foo"); /* A string that contains both ' and ". */ check_one (interpreter, prog, "foo'bar\"baz"); /* '%' is used for environment variable references in Windows cmd.exe. */ check_one (interpreter, prog, "%"); check_one (interpreter, prog, "%%"); check_one (interpreter, prog, "%foo%"); check_one (interpreter, prog, "%PATH%"); /* All other characters don't need quoting. */ for (c = 1; c <= UCHAR_MAX; c++) if (strchr ("\t\n\r !\"#$&'()*;<=>?^[\\]`{|}~", c) == NULL) { char s[5]; s[0] = 'a'; s[1] = (char) c; s[2] = 'z'; s[3] = (char) c; s[4] = '\0'; check_one (interpreter, prog, s); } } } int main (int argc, char *argv[]) { char *prog; if (argc != 2) { fprintf (stderr, "%s: need 1 argument\n", argv[0]); return 2; } prog = argv[1]; #ifdef WINDOWS_NATIVE /* Make PROG suitable for native Windows system calls and cmd.exe: Replace '/' with '\\'. */ { char *p; for (p = prog; *p != '\0'; p++) if (*p == '/') *p = '\\'; } #endif #ifdef WINDOWS_NATIVE check_all (SCI_SYSTEM, true, prog); /* equivalent to SCI_WINDOWS_CMD */ check_all (SCI_WINDOWS_CREATEPROCESS, false, prog); check_all (SCI_WINDOWS_CMD, true, prog); #else check_all (SCI_SYSTEM, false, prog); /* equivalent to SCI_POSIX_SH */ #endif /* Clean up. */ unlink (EXPECTED_DATA_FILE); return failed; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-system-quote.sh��������������������������������������������������0000775�0000000�0000000�00000000133�14110572173�0021431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-system-quote-main${EXEEXT} ./test-system-quote-child${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tan.c������������������������������������������������������������0000664�0000000�0000000�00000002072�14110572173�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tan() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (tan, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = tan (x); ASSERT (y >= 0.6841368083 && y <= 0.6841368084); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tanf.c�����������������������������������������������������������0000664�0000000�0000000�00000002073�14110572173�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (tanf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = tanf (x); ASSERT (y >= 0.6841368f && y <= 0.6841369f); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tanh.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanh() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (tanh, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = tanh (x); ASSERT (y >= 0.5370495669 && y <= 0.5370495670); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tanhf.c����������������������������������������������������������0000664�0000000�0000000�00000002076�14110572173�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanhf() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010-2011. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (tanhf, float, (float)); #include "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = tanhf (x); ASSERT (y >= 0.5370495f && y <= 0.5370497f); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tanl.c�����������������������������������������������������������0000664�0000000�0000000�00000002246�14110572173�0017524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanl() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (tanl, long double, (long double)); #include "fpucw.h" #include "macros.h" volatile long double x; long double y; int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* A particular value. */ x = 0.6L; y = tanl (x); ASSERT (y >= 0.6841368083L && y <= 0.6841368084L); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-term-style-control-hello.c���������������������������������������0000664�0000000�0000000�00000011577�14110572173�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple test program for the term-style-control module. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. This 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> /* Specification. */ #include "term-style-control.h" #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include "full-write.h" /* This program outputs the line: Hello Dr. Linus Pauling! with underlining here: _________________ and a cyan background color here: _____ */ /* ECMA-48 / ISO 6429 escape sequences. See https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters */ static const char set_underline_on[] = "\033[4m"; static const char set_underline_off[] = "\033[24m"; static const char set_background_color_cyan[] = "\033[46m"; static const char set_background_color_default[] = "\033[49m"; struct term_style_user_data { /* These fields are marked volatile, because they are accessed from the async-safe function async_set_attributes_from_default. */ bool volatile underline; bool volatile background_color_cyan; struct term_style_control_data ctrl_data; }; static struct term_style_control_data * get_control_data (struct term_style_user_data *user_data) { return &user_data->ctrl_data; } static void restore (struct term_style_user_data *user_data) { fputs (set_underline_off, stdout); fputs (set_background_color_default, stdout); fflush (stdout); } static _GL_ASYNC_SAFE void async_restore (struct term_style_user_data *user_data) { /* No <stdio.h> calls here! */ full_write (STDOUT_FILENO, set_underline_off, strlen (set_underline_off)); full_write (STDOUT_FILENO, set_background_color_default, strlen (set_background_color_default)); } static _GL_ASYNC_SAFE void async_set_attributes_from_default (struct term_style_user_data *user_data) { /* No <stdio.h> calls here! */ if (user_data->underline) full_write (STDOUT_FILENO, set_underline_on, strlen (set_underline_on)); if (user_data->background_color_cyan) full_write (STDOUT_FILENO, set_background_color_cyan, strlen (set_background_color_cyan)); } static const struct term_style_controller controller = { get_control_data, restore, async_restore, async_set_attributes_from_default }; int main (int argc, char *argv[]) { struct term_style_user_data user_data; /* Initialization. */ user_data.underline = false; user_data.background_color_cyan = false; activate_term_style_controller (&controller, &user_data, STDOUT_FILENO, TTYCTL_AUTO); /* As long as no styling is needed, we can stay in the default mode. */ fputs ("Hello ", stdout); fflush (stdout); /* Before any styling, enable the non-default mode. */ activate_term_non_default_mode (&controller, &user_data); /* Set user_data.underline *before* emitting the appropriate escape sequences, otherwise async_set_attributes_from_default will not do its job correctly. */ user_data.underline = true; fputs (set_underline_on, stdout); fflush (stdout); fputs ("Dr. ", stdout); fflush (stdout); /* Set user_data.background_color_cyan *before* emitting the appropriate escape sequences, otherwise async_set_attributes_from_default will not do its job correctly. */ user_data.background_color_cyan = true; fputs (set_background_color_cyan, stdout); fflush (stdout); fputs ("Linus", stdout); fflush (stdout); user_data.background_color_cyan = false; fputs (set_background_color_default, stdout); fflush (stdout); fputs (" Pauling", stdout); fflush (stdout); user_data.underline = false; fputs (set_underline_off, stdout); fflush (stdout); /* Needed as a prerequisite of the deactivate_term_style_controller call below. */ deactivate_term_non_default_mode (&controller, &user_data); fputs ("!\n", stdout); /* If the user_data was allocated in heap memory, with indefinite extent, this call would be optional. But since we have allocated it on the stack, we must deactivate it before it goes out of scope. Otherwise we get undefined behaviour in an atexit() handler. */ deactivate_term_style_controller (&controller, &user_data); return 0; } ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-term-style-control-yes.c�����������������������������������������0000664�0000000�0000000�00000010250�14110572173�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Interactive test program for the term-style-control module. Copyright (C) 2019-2021 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2019. This 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> /* Specification. */ #include "term-style-control.h" #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include "full-write.h" /* This program outputs an endless amount of lines, each consisting of a single 'y', in red color and underlined. It can be used to exercise race conditions caused by - simultaneous keyboard input on the terminal, - pressing Ctrl-C, - pressing Ctrl-Z and then "fg". */ /* ECMA-48 / ISO 6429 escape sequences. See https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters */ static const char set_underline_on[] = "\033[4m"; static const char set_underline_off[] = "\033[24m"; static const char set_foreground_color_red[] = "\033[31m"; static const char set_foreground_color_default[] = "\033[39m"; struct term_style_user_data { /* This field is marked volatile, because it is accessed from the async-safe function async_set_attributes_from_default. */ bool volatile red_and_underline; struct term_style_control_data ctrl_data; }; static struct term_style_control_data * get_control_data (struct term_style_user_data *user_data) { return &user_data->ctrl_data; } static void restore (struct term_style_user_data *user_data) { fputs (set_underline_off, stdout); fputs (set_foreground_color_default, stdout); fflush (stdout); } static _GL_ASYNC_SAFE void async_restore (struct term_style_user_data *user_data) { /* No <stdio.h> calls here! */ full_write (STDOUT_FILENO, set_underline_off, strlen (set_underline_off)); full_write (STDOUT_FILENO, set_foreground_color_default, strlen (set_foreground_color_default)); } static _GL_ASYNC_SAFE void async_set_attributes_from_default (struct term_style_user_data *user_data) { /* No <stdio.h> calls here! */ if (user_data->red_and_underline) { full_write (STDOUT_FILENO, set_underline_on, strlen (set_underline_on)); full_write (STDOUT_FILENO, set_foreground_color_red, strlen (set_foreground_color_red)); } } static const struct term_style_controller controller = { get_control_data, restore, async_restore, async_set_attributes_from_default }; int main (int argc, char *argv[]) { struct term_style_user_data user_data; /* Initialization. */ user_data.red_and_underline = false; activate_term_style_controller (&controller, &user_data, STDOUT_FILENO, TTYCTL_AUTO); for (;;) { /* Before any styling, enable the non-default mode. */ activate_term_non_default_mode (&controller, &user_data); /* Set user_data.red_and_underline *before* emitting the appropriate escape sequences, otherwise async_set_attributes_from_default will not do its job correctly. */ user_data.red_and_underline = true; fputs (set_underline_on, stdout); fputs (set_foreground_color_red, stdout); fflush (stdout); fputs ("y", stdout); fflush (stdout); /* Revert to the default style before emitting a newline. */ user_data.red_and_underline = false; fputs (set_underline_off, stdout); fputs (set_foreground_color_default, stdout); fflush (stdout); /* Optional. */ deactivate_term_non_default_mode (&controller, &user_data); fputs ("\n", stdout); fflush (stdout); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-termios-c++.cc���������������������������������������������������0000664�0000000�0000000�00000001775�14110572173�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <termios.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <termios.h> #include "signature.h" #if GNULIB_TEST_TCGETSID SIGNATURE_CHECK (GNULIB_NAMESPACE::tcgetsid, pid_t, (int)); #endif int main () { } ���gnulib-20210822~d383792/tests/test-termios.c��������������������������������������������������������0000664�0000000�0000000�00000001642�14110572173�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <termios.h> substitute. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <termios.h> /* Check that the types are all defined. */ pid_t t1; int main (void) { return 0; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-thrd_create.c����������������������������������������������������0000664�0000000�0000000�00000003605�14110572173�0021052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thrd_create () macro. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <threads.h> #include <stdio.h> #include <string.h> #include "macros.h" static thrd_t main_thread_before; static thrd_t main_thread_after; static thrd_t worker_thread; #define MAGIC 1266074729 static volatile int work_done; static int worker_thread_func (void *arg) { work_done = 1; return MAGIC; } int main () { main_thread_before = thrd_current (); if (thrd_create (&worker_thread, worker_thread_func, NULL) == thrd_success) { int ret; /* Check that thrd_current () has the same value before than after the first call to thrd_create (). */ main_thread_after = thrd_current (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (thrd_t)) == 0); ASSERT (thrd_join (worker_thread, &ret) == thrd_success); /* Check the return value of the thread. */ ASSERT (ret == MAGIC); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { fputs ("thrd_create failed\n", stderr); return 1; } } ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-thrd_current.c���������������������������������������������������0000664�0000000�0000000�00000001637�14110572173�0021274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thrd_current () function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include <threads.h> thrd_t main_thread; int main () { main_thread = thrd_current (); return 0; } �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-thread_create.c��������������������������������������������������0000664�0000000�0000000�00000004134�14110572173�0021356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_create () macro. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include "glthread/thread.h" #include <stdio.h> #include <string.h> #include "macros.h" static gl_thread_t main_thread_before; static gl_thread_t main_thread_after; static gl_thread_t worker_thread; static int dummy; static volatile int work_done; static void * worker_thread_func (void *arg) { work_done = 1; return &dummy; } int main () { main_thread_before = gl_thread_self (); if (glthread_create (&worker_thread, worker_thread_func, NULL) == 0) { void *ret; /* Check that gl_thread_self () has the same value before than after the first call to gl_thread_create (). */ main_thread_after = gl_thread_self (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (gl_thread_t)) == 0); gl_thread_join (worker_thread, &ret); /* Check the return value of the thread. */ ASSERT (ret == &dummy); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS fputs ("glthread_create failed\n", stderr); return 1; #else fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; #endif } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-thread_local.c���������������������������������������������������0000664�0000000�0000000�00000012447�14110572173�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thread-local storage in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #include <threads.h> #ifdef thread_local /* Whether to help the scheduler through explicit thrd_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 16 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #include <stdint.h> #include <stdio.h> #include <stdlib.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() thrd_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define thrd_current_pointer() (*((void **) thrd_current ().__)) #elif defined __sun /* On Solaris, thrd_t is merely an 'unsigned int'. */ # define thrd_current_pointer() ((void *) (uintptr_t) thrd_current ()) #else # define thrd_current_pointer() ((void *) thrd_current ()) #endif static void perhaps_yield (void) { /* Call yield () only with a certain probability, otherwise the sequence of thread activations may be too predictable. */ if ((((unsigned int) rand () >> 3) % 4) == 0) yield (); } /* ----------------------- Test thread-local storage ----------------------- */ #define KEYS_COUNT 4 static unsigned int thread_local value0; static unsigned int thread_local value1; static unsigned int thread_local value2; static unsigned int thread_local value3; static int worker_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; int i, j, repeat; unsigned int *values[KEYS_COUNT] = { &value0, &value1, &value2, &value3 }; dbgprintf ("Worker %p started\n", thrd_current_pointer ()); /* Initialize the per-thread storage. */ dbgprintf ("Worker %p before first assignment\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { *values[i] = (((unsigned int) rand () >> 3) % 1000000) * THREAD_COUNT + id; /* Hopefully no arithmetic overflow. */ if ((*values[i] % THREAD_COUNT) != id) abort (); } dbgprintf ("Worker %p after first assignment\n", thrd_current_pointer ()); perhaps_yield (); /* Shuffle around the pointers. */ for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { dbgprintf ("Worker %p doing value swapping\n", thrd_current_pointer ()); i = ((unsigned int) rand () >> 3) % KEYS_COUNT; j = ((unsigned int) rand () >> 3) % KEYS_COUNT; if (i != j) { unsigned int vi = *values[i]; unsigned int vj = *values[j]; *values[i] = vj; *values[j] = vi; } perhaps_yield (); } /* Verify that all the values are from this thread. */ dbgprintf ("Worker %p before final verify\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if ((*values[i] % THREAD_COUNT) != id) abort (); dbgprintf ("Worker %p after final verify\n", thrd_current_pointer ()); perhaps_yield (); dbgprintf ("Worker %p dying.\n", thrd_current_pointer ()); return 0; } static void test_thread_local (void) { int pass, i; for (pass = 0; pass < 2; pass++) { thrd_t threads[THREAD_COUNT]; /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_create (&threads[i], worker_thread, (void *) (uintptr_t) i) == thrd_success); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_join (threads[i], NULL) == thrd_success); } } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif printf ("Starting test_thread_local ..."); fflush (stdout); test_thread_local (); printf (" OK\n"); fflush (stdout); return 0; } #else /* No thread-local storage support available in the compiler and linker. */ #include <stdio.h> int main () { fputs ("Skipping test: thread_local not supported\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-thread_self.c����������������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_self () macro. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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>, 2011. */ #include <config.h> #include "glthread/thread.h" gl_thread_t main_thread; int main () { /* Check that gl_thread_self () can be used with just $(LIBTHREAD), not $(LIBMULTITHREAD), i.e. in libraries that are multithread-safe but don't create threads themselves. */ /* This is not the case on AIX with --enable-threads=isoc+posix, because in this case, $(LIBTHREAD) is empty whereas $(LIBMULTITHREAD) is '-lpthread'. */ #if !defined _AIX main_thread = gl_thread_self (); #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-threads-c++.cc���������������������������������������������������0000664�0000000�0000000�00000005531�14110572173�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <threads.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <threads.h> #include "signature.h" #if GNULIB_TEST_THRD SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_create, int, (thrd_t *, thrd_start_t, void *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_current, thrd_t, (void)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_equal, int, (thrd_t, thrd_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_sleep, int, (const struct timespec *, struct timespec *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_yield, void, (void)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_detach, int, (thrd_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_join, int, (thrd_t, int *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::thrd_exit, void, (int)); #endif #if GNULIB_TEST_MTX SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_init, int, (mtx_t *, int)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_lock, int, (mtx_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_trylock, int, (mtx_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_timedlock, int, (mtx_t *, const struct timespec *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_unlock, int, (mtx_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mtx_destroy, void, (mtx_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::call_once, void, (once_flag *, void (*) (void))); #endif #if GNULIB_TEST_CND SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_init, int, (cnd_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_wait, int, (cnd_t *, mtx_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_timedwait, int, (cnd_t *, mtx_t *, const struct timespec *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_signal, int, (cnd_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_broadcast, int, (cnd_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::cnd_destroy, void, (cnd_t *)); #endif #if GNULIB_TEST_TSS SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_create, int, (tss_t *, tss_dtor_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_set, int, (tss_t, void *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_get, void *, (tss_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tss_delete, void, (tss_t)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-threads.c��������������������������������������������������������0000664�0000000�0000000�00000003074�14110572173�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <threads.h> substitute. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <threads.h> /* Don't check that thread_local is defined. We cannot define it properly on some platforms. */ /* Check that ONCE_FLAG_INIT is defined. */ #ifndef ONCE_FLAG_INIT "oops1" #endif once_flag a = ONCE_FLAG_INIT; /* Check that TSS_DTOR_ITERATIONS is defined. */ #ifndef TSS_DTOR_ITERATIONS "oops2" #endif int b = TSS_DTOR_ITERATIONS; int main (void) { /* Ensure no overlap in thrd_*. */ switch (0) { case thrd_success: case thrd_timedout: case thrd_busy: case thrd_nomem: case thrd_error: ; } /* Ensure no overlap among valid types for mtx_init. */ switch (0) { case mtx_plain: case mtx_timed: case mtx_plain | mtx_recursive: case mtx_timed | mtx_recursive: ; } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-time-c++.cc������������������������������������������������������0000664�0000000�0000000�00000005207�14110572173�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <time.h> #include "signature.h" #if GNULIB_TEST_TIMESPEC_GET SIGNATURE_CHECK (GNULIB_NAMESPACE::timespec_get, int, (struct timespec *, int)); #endif #if GNULIB_TEST_NANOSLEEP SIGNATURE_CHECK (GNULIB_NAMESPACE::nanosleep, int, (struct timespec const *, struct timespec *)); #endif #if GNULIB_TEST_TZSET SIGNATURE_CHECK (GNULIB_NAMESPACE::tzset, void, (void)); #endif #if GNULIB_TEST_MKTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::mktime, time_t, (struct tm *)); #endif #if GNULIB_TEST_TIME_R SIGNATURE_CHECK (GNULIB_NAMESPACE::localtime_r, struct tm *, (time_t const *, struct tm *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::gmtime_r, struct tm *, (time_t const *, struct tm *)); #endif #if GNULIB_TEST_LOCALTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::localtime, struct tm *, (time_t const *)); #endif #if 0 SIGNATURE_CHECK (GNULIB_NAMESPACE::gmtime, struct tm *, (time_t const *)); #endif #if GNULIB_TEST_STRPTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::strptime, char *, (char const *, char const *, struct tm *)); #endif #if GNULIB_TEST_CTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::ctime, char *, (time_t const *)); #endif #if GNULIB_TEST_STRFTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::strftime, size_t, (char *, size_t, const char *, const struct tm *)); #endif #if GNULIB_TEST_TIMERZ SIGNATURE_CHECK (GNULIB_NAMESPACE::tzalloc, timezone_t, (char const *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::tzfree, void, (timezone_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::localtime_rz, struct tm *, (timezone_t, time_t const *, struct tm *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::mktime_z, time_t, (timezone_t, struct tm *)); #endif #if GNULIB_TEST_TIMEGM SIGNATURE_CHECK (GNULIB_NAMESPACE::timegm, time_t, (struct tm *)); #endif int main () { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-time-c++2.cc�����������������������������������������������������0000664�0000000�0000000�00000001465�14110572173�0020321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <ctime> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-time.c�����������������������������������������������������������0000664�0000000�0000000�00000002532�14110572173�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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> #include "verify.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. */ verify (sizeof NULL == sizeof (void *)); /* Check that TIME_UTC is defined and a positive integer. */ int t3 = TIME_UTC; verify (TIME_UTC > 0); int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-times.c����������������������������������������������������������0000664�0000000�0000000�00000005471�14110572173�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of times function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include <sys/times.h> #include "signature.h" SIGNATURE_CHECK (times, clock_t, (struct tms *)); #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <unistd.h> #include <math.h> static int doublecmp (const void *p, const void *q) { double a = *(double *) p; double b = *(double *) q; return a < b ? -1 : a > b ? 1 : 0; } int main (int argc, char *argv[]) { struct tms tms; clock_t t; #ifndef _SC_CLK_TCK clock_t clk_tck = CLK_TCK; #else clock_t clk_tck = sysconf (_SC_CLK_TCK); #endif t = times (&tms); if (t == (clock_t) -1) { perror ("times"); return EXIT_FAILURE; } if (argc > 1) { printf ("clk_tck %ld\n", (long int) clk_tck); printf ("t %ld\n", (long int) t); printf ("tms.tms_utime %ldms\n", ((long int) tms.tms_utime * 1000) / (long int) clk_tck); printf ("tms.tms_stime %ldms\n", ((long int) tms.tms_stime * 1000) / (long int) clk_tck); printf ("tms.tms_cutime %ldms\n", ((long int) tms.tms_cutime * 1000) / (long int) clk_tck); printf ("tms.tms_cstime %ldms\n", ((long int) tms.tms_cstime * 1000) / (long int) clk_tck); } if (argc > 1) { size_t size = atoi (argv[1]); double *base; size_t i; base = malloc (size * sizeof (double)); for (i = 0; i < size; i++) base[i] = i * i; qsort (base, size, sizeof (double), doublecmp); free (base); } t = times (&tms); if (t == (clock_t) -1) { perror ("times"); return EXIT_FAILURE; } if (argc > 1) { printf ("clk_tck %ld\n", (long int) clk_tck); printf ("t %ld\n", (long int) t); printf ("tms.tms_utime %ldms\n", ((long int) tms.tms_utime * 1000) / (long int) clk_tck); printf ("tms.tms_stime %ldms\n", ((long int) tms.tms_stime * 1000) / (long int) clk_tck); printf ("tms.tms_cutime %ldms\n", ((long int) tms.tms_cutime * 1000) / (long int) clk_tck); printf ("tms.tms_cstime %ldms\n", ((long int) tms.tms_cstime * 1000) / (long int) clk_tck); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-timespec.c�������������������������������������������������������0000664�0000000�0000000�00000010761�14110572173�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test timespec functions. Copyright 2015-2021 Free Software Foundation, Inc. This 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 Paul Eggert. */ #include <config.h> #include "timespec.h" #include "intprops.h" #include "macros.h" #include <stdbool.h> #include <limits.h> static struct { int s; int ns; } const prototype[] = { { INT_MIN, 0 }, { INT_MIN, 1 }, { INT_MIN, TIMESPEC_HZ - 1 }, { INT_MIN + 1, 0 }, { INT_MIN + 1, 1 }, { INT_MIN + 1, TIMESPEC_HZ - 1 }, { -1, 0 }, { -1, 1 }, { -1, TIMESPEC_HZ - 1 }, { 0, 0 }, { 0, 1 }, { 0, TIMESPEC_HZ - 1 }, { 1, 0 }, { 1, 1 }, { 1, TIMESPEC_HZ - 1 }, { 1234567890, 0 }, { 1234567890, 1 }, { 1234567890, TIMESPEC_HZ - 1 }, { INT_MAX - 1, 0 }, { INT_MAX - 1, 1 }, { INT_MAX - 1, TIMESPEC_HZ - 1 }, { INT_MAX, 0 }, { INT_MAX, 1 }, { INT_MAX, TIMESPEC_HZ - 1 }, { INT_MAX, 2 * TIMESPEC_HZ } }; enum { nprototypes = sizeof prototype / sizeof *prototype }; static bool valid (struct timespec a) { return 0 <= a.tv_nsec && a.tv_nsec < TIMESPEC_HZ; } static int sign (int i) { return i < 0 ? -1 : 0 < i; } static int cmp (struct timespec a, struct timespec b) { return sign (timespec_cmp (a, b)); } static bool eq (struct timespec a, struct timespec b) { return timespec_cmp (a, b) == 0; } static bool extremal (struct timespec a) { return ((a.tv_sec == TYPE_MINIMUM (time_t) && a.tv_nsec == 0) || (a.tv_sec == TYPE_MAXIMUM (time_t) && a.tv_nsec == TIMESPEC_HZ - 1)); } int main (void) { int i, j, k; struct timespec test[nprototypes + 1]; int ntests; int computed_hz = 1; struct timespec prevroundtrip; test[0] = make_timespec (TYPE_MINIMUM (time_t), -1); ntests = 1; for (i = 0; i < nprototypes; i++) { int s = prototype[i].s; if (TYPE_SIGNED (time_t) || 0 <= s) { time_t t = (s <= INT_MIN + 1 ? s - INT_MIN + TYPE_MINIMUM (time_t) : INT_MAX - 1 <= s ? s - INT_MAX + TYPE_MAXIMUM (time_t) : s); test[ntests++] = make_timespec (t, prototype[i].ns); } } for (i = 0; i < LOG10_TIMESPEC_HZ; i++) computed_hz *= 10; ASSERT (computed_hz == TIMESPEC_HZ); for (i = 0; i < ntests; i++) { struct timespec a = test[i]; struct timespec roundtrip = dtotimespec (timespectod (a)); if (i != 0) ASSERT (cmp (prevroundtrip, roundtrip) <= 0); prevroundtrip = roundtrip; ASSERT (sign (timespec_sign (a)) == cmp (a, make_timespec (0, 0))); if (valid (a)) for (j = 0; j < ntests; j++) { struct timespec b = test[j]; if (valid (b)) { struct timespec sum = timespec_add (a, b); struct timespec diff = timespec_sub (a, b); struct timespec rdiff = timespec_sub (b, a); ASSERT (cmp (a, b) == sign (i - j)); ASSERT (eq (sum, timespec_add (b, a))); if (! extremal (sum)) { ASSERT (eq (a, timespec_sub (sum, b))); ASSERT (eq (b, timespec_sub (sum, a))); for (k = 0; k < ntests; k++) { struct timespec c = test[k]; if (valid (c)) { struct timespec sumbc = timespec_add (b, c); if (! extremal (sumbc)) ASSERT (eq (timespec_add (a, sumbc), timespec_add (sum, c))); } } } if (! extremal (diff)) ASSERT (eq (a, timespec_add (diff, b))); if (! extremal (rdiff)) ASSERT (eq (b, timespec_add (rdiff, a))); } } } return 0; } ���������������gnulib-20210822~d383792/tests/test-timespec_get.c���������������������������������������������������0000664�0000000�0000000�00000003015�14110572173�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of timespec_get() function. Copyright (C) 2021 Free Software Foundation, Inc. This 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. */ #include <config.h> #include <time.h> #include "signature.h" SIGNATURE_CHECK (timespec_get, int, (struct timespec *ts, int base)); #include "macros.h" int main (void) { struct timespec ts1; time_t tt2; struct timespec ts3; time_t tt4; ASSERT (timespec_get (&ts1, TIME_UTC)); tt2 = time (NULL); ASSERT (timespec_get (&ts3, TIME_UTC)); tt4 = time (NULL); /* Verify monotonicity of timespec_get(). */ ASSERT (ts1.tv_sec < ts3.tv_sec || (ts1.tv_sec == ts3.tv_sec && ts1.tv_nsec <= ts3.tv_nsec)); /* Verify monotonicity of time(). */ ASSERT (tt2 <= tt4); /* Verify that the tv_sec field of the result is the same as time(NULL). */ ASSERT (ts1.tv_sec <= tt2); ASSERT (tt2 <= ts3.tv_sec); ASSERT (ts3.tv_sec <= tt4); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tls.c������������������������������������������������������������0000664�0000000�0000000�00000032505�14110572173�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thread-local storage in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS # define TEST_ISOC_THREADS 1 #endif #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_WINDOWS_THREADS # define TEST_WINDOWS_THREADS 1 #endif /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "glthread/tls.h" #include "glthread/thread.h" #include "glthread/lock.h" #include "glthread/yield.h" #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif static void perhaps_yield (void) { /* This helps making the sequence of thread activations less predictable. */ if ((((unsigned int) rand () >> 3) % 4) == 0) yield (); } /* ----------------------- Test thread-local storage ----------------------- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 16 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #define KEYS_COUNT 4 static gl_tls_key_t mykeys[KEYS_COUNT]; static void * worker_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; int i, j, repeat; unsigned int values[KEYS_COUNT]; dbgprintf ("Worker %p started\n", gl_thread_self_pointer ()); /* Initialize the per-thread storage. */ for (i = 0; i < KEYS_COUNT; i++) { values[i] = (((unsigned int) rand () >> 3) % 1000000) * THREAD_COUNT + id; /* Hopefully no arithmetic overflow. */ if ((values[i] % THREAD_COUNT) != id) abort (); } perhaps_yield (); /* Verify that the initial value is NULL. */ dbgprintf ("Worker %p before initial verify\n", gl_thread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if (gl_tls_get (mykeys[i]) != NULL) abort (); dbgprintf ("Worker %p after initial verify\n", gl_thread_self_pointer ()); perhaps_yield (); /* Initialize the per-thread storage. */ dbgprintf ("Worker %p before first tls_set\n", gl_thread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { unsigned int *ptr = (unsigned int *) malloc (sizeof (unsigned int)); *ptr = values[i]; gl_tls_set (mykeys[i], ptr); } dbgprintf ("Worker %p after first tls_set\n", gl_thread_self_pointer ()); perhaps_yield (); /* Shuffle around the pointers. */ for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { dbgprintf ("Worker %p doing value swapping\n", gl_thread_self_pointer ()); i = ((unsigned int) rand () >> 3) % KEYS_COUNT; j = ((unsigned int) rand () >> 3) % KEYS_COUNT; if (i != j) { void *vi = gl_tls_get (mykeys[i]); void *vj = gl_tls_get (mykeys[j]); gl_tls_set (mykeys[i], vj); gl_tls_set (mykeys[j], vi); } perhaps_yield (); } /* Verify that all the values are from this thread. */ dbgprintf ("Worker %p before final verify\n", gl_thread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if ((*(unsigned int *) gl_tls_get (mykeys[i]) % THREAD_COUNT) != id) abort (); dbgprintf ("Worker %p after final verify\n", gl_thread_self_pointer ()); perhaps_yield (); dbgprintf ("Worker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_tls (void) { int pass, i; for (pass = 0; pass < 2; pass++) { gl_thread_t threads[THREAD_COUNT]; if (pass == 0) for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_init (mykeys[i], free); else for (i = KEYS_COUNT - 1; i >= 0; i--) gl_tls_key_init (mykeys[i], free); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (worker_thread, (void *) (uintptr_t) i); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_destroy (mykeys[i]); } } #undef KEYS_COUNT #undef REPEAT_COUNT #undef THREAD_COUNT /* --------------- Test thread-local storage with destructors --------------- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 gl_lock_define_initialized(static, sumlock) static uintptr_t sum; static void inc_sum (uintptr_t value) { gl_lock_lock (sumlock); sum += value; gl_lock_unlock (sumlock); } static void destructor0 (void *value) { if ((((uintptr_t) value - 1) % 10) != 0) abort (); inc_sum ((uintptr_t) value); } static void destructor1 (void *value) { if ((((uintptr_t) value - 1) % 10) != 1) abort (); inc_sum ((uintptr_t) value); } static void destructor2 (void *value) { if ((((uintptr_t) value - 1) % 10) != 2) abort (); inc_sum ((uintptr_t) value); } static void destructor3 (void *value) { if ((((uintptr_t) value - 1) % 10) != 3) abort (); inc_sum ((uintptr_t) value); } static void destructor4 (void *value) { if ((((uintptr_t) value - 1) % 10) != 4) abort (); inc_sum ((uintptr_t) value); } static void destructor5 (void *value) { if ((((uintptr_t) value - 1) % 10) != 5) abort (); inc_sum ((uintptr_t) value); } static void destructor6 (void *value) { if ((((uintptr_t) value - 1) % 10) != 6) abort (); inc_sum ((uintptr_t) value); } static void destructor7 (void *value) { if ((((uintptr_t) value - 1) % 10) != 7) abort (); inc_sum ((uintptr_t) value); } static void destructor8 (void *value) { if ((((uintptr_t) value - 1) % 10) != 8) abort (); inc_sum ((uintptr_t) value); } static void destructor9 (void *value) { if ((((uintptr_t) value - 1) % 10) != 9) abort (); inc_sum ((uintptr_t) value); } static void (*destructor_table[10]) (void *) = { destructor0, destructor1, destructor2, destructor3, destructor4, destructor5, destructor6, destructor7, destructor8, destructor9 }; static gl_tls_key_t dtorcheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that uses destructors that verify that the destructor belongs to the right thread. */ static void * dtorcheck1_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; gl_tls_key_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_init (keys[i], destructor_table[i]); for (i = 0; i < KEYS_COUNT; i++) gl_tls_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)); return NULL; } static void test_tls_dtorcheck1 (void) { gl_thread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) threads[id] = gl_thread_create (dtorcheck1_thread, (void *) (uintptr_t) id); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) gl_thread_join (threads[id], NULL); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_destroy (dtorcheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } /* Worker thread that uses destructors that verify that the destructor belongs to the right key allocated within the thread. */ static void * dtorcheck2_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; gl_tls_key_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_init (keys[i], destructor_table[id]); for (i = 0; i < KEYS_COUNT; i++) gl_tls_set (keys[i], (void *) (uintptr_t) (10 * i + id + 1)); return NULL; } static void test_tls_dtorcheck2 (void) { gl_thread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) threads[id] = gl_thread_create (dtorcheck2_thread, (void *) (uintptr_t) id); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) gl_thread_join (threads[id], NULL); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_destroy (dtorcheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef KEYS_COUNT #undef THREAD_COUNT /* --- Test thread-local storage with with races between init and destroy --- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 /* Number of times to destroy and reallocate a key in each thread. */ #define REPEAT_COUNT 100000 static gl_tls_key_t racecheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that does many destructions and reallocations of keys, and also uses destructors that verify that the destructor belongs to the right key. */ static void * racecheck_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; gl_tls_key_t *keys = racecheck_keys[id]; /* an array of KEYS_COUNT keys */ int repeat; int i; dbgprintf ("Worker %p started\n", gl_thread_self_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { gl_tls_key_init (keys[i], destructor_table[i]); gl_tls_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)); } for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { i = ((unsigned int) rand () >> 3) % KEYS_COUNT; dbgprintf ("Worker %p reallocating key %d\n", gl_thread_self_pointer (), i); gl_tls_key_destroy (keys[i]); gl_tls_key_init (keys[i], destructor_table[i]); gl_tls_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)); } dbgprintf ("Worker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_tls_racecheck (void) { gl_thread_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) threads[id] = gl_thread_create (racecheck_thread, (void *) (uintptr_t) id); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) gl_thread_join (threads[id], NULL); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) gl_tls_key_destroy (racecheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef REPEAT_COUNT #undef KEYS_COUNT #undef THREAD_COUNT /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif printf ("Starting test_tls ..."); fflush (stdout); test_tls (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tls_dtorcheck1 ..."); fflush (stdout); test_tls_dtorcheck1 (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tls_dtorcheck2 ..."); fflush (stdout); test_tls_dtorcheck2 (); printf (" OK\n"); fflush (stdout); /* This test hangs with the mingw-w64 winpthreads. */ #if (defined _WIN32 && ! defined __CYGWIN__) && TEST_POSIX_THREADS fputs ("Skipping test: it is known to hang with the mingw-w64 winpthreads.\n", stderr); exit (77); #else printf ("Starting test_tls_racecheck ..."); fflush (stdout); test_tls_racecheck (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-trunc-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003345�14110572173�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (trunc (0.0))); ASSERT (!!signbit (trunc (minus_zerod)) == !!signbit (minus_zerod)); /* Positive numbers. */ ASSERT (!signbit (trunc (0.3))); ASSERT (!signbit (trunc (0.7))); /* Negative numbers. */ ASSERT (!!signbit (trunc (-0.3)) == !!signbit (minus_zerod)); ASSERT (!!signbit (trunc (-0.7)) == !!signbit (minus_zerod)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnand (trunc (NaNd ()))); /* Infinity. */ ASSERT (trunc (Infinityd ()) == Infinityd ()); ASSERT (trunc (- Infinityd ()) == - Infinityd ()); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-trunc1.c���������������������������������������������������������0000664�0000000�0000000�00000003717�14110572173�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (trunc, double, (double)); #include "isnand-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Zero. */ ASSERT (trunc (0.0) == 0.0); ASSERT (trunc (minus_zerod) == 0.0); /* Positive numbers. */ ASSERT (trunc (0.3) == 0.0); ASSERT (trunc (0.7) == 0.0); ASSERT (trunc (1.0) == 1.0); ASSERT (trunc (1.5) == 1.0); ASSERT (trunc (1.999) == 1.0); ASSERT (trunc (2.0) == 2.0); ASSERT (trunc (65535.999) == 65535.0); ASSERT (trunc (65536.0) == 65536.0); ASSERT (trunc (2.341e31) == 2.341e31); /* Negative numbers. */ ASSERT (trunc (-0.3) == 0.0); ASSERT (trunc (-0.7) == 0.0); ASSERT (trunc (-1.0) == -1.0); ASSERT (trunc (-1.5) == -1.0); ASSERT (trunc (-1.999) == -1.0); ASSERT (trunc (-2.0) == -2.0); ASSERT (trunc (-65535.999) == -65535.0); ASSERT (trunc (-65536.0) == -65536.0); ASSERT (trunc (-2.341e31) == -2.341e31); /* Infinite numbers. */ ASSERT (trunc (Infinityd ()) == Infinityd ()); ASSERT (trunc (- Infinityd ()) == - Infinityd ()); /* NaNs. */ ASSERT (isnand (trunc (NaNd ()))); return 0; } �������������������������������������������������gnulib-20210822~d383792/tests/test-trunc2.c���������������������������������������������������������0000664�0000000�0000000�00000012533�14110572173�0020003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/trunc.c. */ #define DOUBLE double #define MANT_DIG DBL_MANT_DIG #define L_(literal) literal /* -0.0. See minus-zero.h. */ #define MINUS_ZERO minus_zerod /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE trunc_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnand (x) ? isnand (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x >= 0 ? (x < 1 ? result == L_(0.0) : x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 : equal (result, x)) : (x > -1 ? result == L_(0.0) : x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 : equal (result, x))); } /* Test the function for a given argument. */ static int check (double x) { /* If the reference implementation is incorrect, bail out immediately. */ double reference = trunc_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { double result = trunc (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "trunc %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 13 #define NUM_LOWBITS 4 int main () { unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 32-NUM_HIGHBITS bits. */ union { double f; uint64_t i; } janus; janus.i = ((uint64_t) highbits << (64 - NUM_HIGHBITS)) | ((uint64_t) ((int64_t) ((uint64_t) lowbits << (64 - NUM_LOWBITS)) >> (64 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncate.c�������������������������������������������������������0000664�0000000�0000000�00000005360�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test truncating a file. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (truncate, int, (const char *, off_t)); #include <errno.h> #include <fcntl.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-truncate.t" int main (int argc, char *argv[]) { /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); { int fd = open (BASE "file", O_RDWR | O_TRUNC | O_CREAT, 0600); ASSERT (fd >= 0); ASSERT (write (fd, "Hello", 5) == 5); close (fd); } { int fd = open (BASE "file", O_RDONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 0, SEEK_END) == 5); close (fd); } /* Test increasing the size. */ ASSERT (truncate (BASE "file", 314159) == 0); { int fd = open (BASE "file", O_RDONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 0, SEEK_END) == 314159); close (fd); } /* Test reducing the size. */ ASSERT (truncate (BASE "file", 3) == 0); { int fd = open (BASE "file", O_RDONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 0, SEEK_END) == 3); close (fd); } /* Test reducing the size to 0. */ ASSERT (truncate (BASE "file", 0) == 0); { int fd = open (BASE "file", O_RDONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 0, SEEK_END) == 0); close (fd); } /* Test behaviour for nonexistent files. */ { errno = 0; ASSERT (truncate ("/nonexistent", 0) == -1); ASSERT (errno == ENOENT); } /* Test behaviour for directories. */ { errno = 0; ASSERT (truncate (".", 0) == -1); ASSERT (errno == EISDIR || /* on native Windows */ errno == EACCES); } /* Test behaviour for trailing slashes. */ { errno = 0; ASSERT (truncate (BASE "file/", 0) == -1); ASSERT (errno == ENOTDIR || /* on native Windows */ errno == EINVAL); } /* Test behaviour for invalid lengths. */ { errno = 0; ASSERT (truncate (BASE "file", -3) == -1); ASSERT (errno == EINVAL); } /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncf-ieee.c����������������������������������������������������0000664�0000000�0000000�00000003363�14110572173�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (truncf (0.0f))); ASSERT (!!signbit (truncf (minus_zerof)) == !!signbit (minus_zerof)); /* Positive numbers. */ ASSERT (!signbit (truncf (0.3f))); ASSERT (!signbit (truncf (0.7f))); /* Negative numbers. */ ASSERT (!!signbit (truncf (-0.3f)) == !!signbit (minus_zerof)); ASSERT (!!signbit (truncf (-0.7f)) == !!signbit (minus_zerof)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanf (truncf (NaNf ()))); /* Infinity. */ ASSERT (truncf (Infinityf ()) == Infinityf ()); ASSERT (truncf (- Infinityf ()) == - Infinityf ()); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncf1.c��������������������������������������������������������0000664�0000000�0000000�00000004012�14110572173�0020141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (truncf, float, (float)); #include "isnanf-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Zero. */ ASSERT (truncf (0.0f) == 0.0f); ASSERT (truncf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (truncf (0.3f) == 0.0f); ASSERT (truncf (0.7f) == 0.0f); ASSERT (truncf (1.0f) == 1.0f); ASSERT (truncf (1.5f) == 1.0f); ASSERT (truncf (1.999f) == 1.0f); ASSERT (truncf (2.0f) == 2.0f); ASSERT (truncf (65535.99f) == 65535.0f); ASSERT (truncf (65536.0f) == 65536.0f); ASSERT (truncf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (truncf (-0.3f) == 0.0f); ASSERT (truncf (-0.7f) == 0.0f); ASSERT (truncf (-1.0f) == -1.0f); ASSERT (truncf (-1.5f) == -1.0f); ASSERT (truncf (-1.999f) == -1.0f); ASSERT (truncf (-2.0f) == -2.0f); ASSERT (truncf (-65535.99f) == -65535.0f); ASSERT (truncf (-65536.0f) == -65536.0f); ASSERT (truncf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (truncf (Infinityf ()) == Infinityf ()); ASSERT (truncf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (truncf (NaNf ()))); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncf2.c��������������������������������������������������������0000664�0000000�0000000�00000012535�14110572173�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* When this test fails on some platform, build it together with the gnulib module 'fprintf-posix' for optimal debugging output. */ #include <config.h> #include <math.h> #include <float.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include "isnanf-nolibm.h" #include "minus-zero.h" #include "macros.h" /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* The reference implementation, taken from lib/trunc.c. */ #define DOUBLE float #define MANT_DIG FLT_MANT_DIG #define L_(literal) literal##f /* -0.0. See minus-zero.h. */ #define MINUS_ZERO minus_zerof /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE truncf_reference (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* For -1 < x < 0, return -0.0 regardless of the current rounding mode. */ if (z > L_(-1.0)) z = MINUS_ZERO; /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ else if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding up. */ if (z < y) z += L_(1.0); } } return z; } /* Test for equality. */ static int equal (DOUBLE x, DOUBLE y) { return (isnanf (x) ? isnanf (y) : x == y); } /* Test whether the result for a given argument is correct. */ static bool correct_result_p (DOUBLE x, DOUBLE result) { return (x >= 0 ? (x < 1 ? result == L_(0.0) : x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 : equal (result, x)) : (x > -1 ? result == L_(0.0) : x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 : equal (result, x))); } /* Test the function for a given argument. */ static int check (float x) { /* If the reference implementation is incorrect, bail out immediately. */ float reference = truncf_reference (x); ASSERT (correct_result_p (x, reference)); /* If the actual implementation is wrong, return an error code. */ { float result = truncf (x); if (correct_result_p (x, result)) return 0; else { #if GNULIB_TEST_FPRINTF_POSIX fprintf (stderr, "truncf %g(%a) = %g(%a) or %g(%a)?\n", x, x, reference, reference, result, result); #endif return 1; } } } #define NUM_HIGHBITS 12 #define NUM_LOWBITS 4 int main () { unsigned int highbits; unsigned int lowbits; int error = 0; for (highbits = 0; highbits < (1 << NUM_HIGHBITS); highbits++) for (lowbits = 0; lowbits < (1 << NUM_LOWBITS); lowbits++) { /* Combine highbits and lowbits into a floating-point number, sign-extending the lowbits to 32-NUM_HIGHBITS bits. */ union { float f; uint32_t i; } janus; janus.i = ((uint32_t) highbits << (32 - NUM_HIGHBITS)) | ((uint32_t) ((int32_t) ((uint32_t) lowbits << (32 - NUM_LOWBITS)) >> (32 - NUM_LOWBITS - NUM_HIGHBITS)) >> NUM_HIGHBITS); error |= check (janus.f); } return (error ? 1 : 0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncl-ieee.c����������������������������������������������������0000664�0000000�0000000�00000003505�14110572173�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <math.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (truncl (0.0L))); ASSERT (!!signbit (truncl (minus_zerol)) == !!signbit (minus_zerol)); /* Positive numbers. */ ASSERT (!signbit (truncl (0.3L))); ASSERT (!signbit (truncl (0.7L))); /* Negative numbers. */ ASSERT (!!signbit (truncl (-0.3L)) == !!signbit (minus_zerol)); ASSERT (!!signbit (truncl (-0.7L)) == !!signbit (minus_zerol)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanl (truncl (NaNl ()))); /* Infinity. */ ASSERT (truncl (Infinityl ()) == Infinityl ()); ASSERT (truncl (- Infinityl ()) == - Infinityl ()); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-truncl.c���������������������������������������������������������0000664�0000000�0000000�00000004176�14110572173�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <math.h> #include "signature.h" SIGNATURE_CHECK (truncl, long double, (long double)); #include <float.h> #include "fpucw.h" #include "isnanl-nolibm.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Zero. */ ASSERT (truncl (0.0L) == 0.0L); ASSERT (truncl (minus_zerol) == 0.0L); /* Positive numbers. */ ASSERT (truncl (0.3L) == 0.0L); ASSERT (truncl (0.7L) == 0.0L); ASSERT (truncl (1.0L) == 1.0L); ASSERT (truncl (1.5L) == 1.0L); ASSERT (truncl (1.999L) == 1.0L); ASSERT (truncl (2.0L) == 2.0L); ASSERT (truncl (65535.999L) == 65535.0L); ASSERT (truncl (65536.0L) == 65536.0L); ASSERT (truncl (2.341e31L) == 2.341e31L); /* Negative numbers. */ ASSERT (truncl (-0.3L) == 0.0L); ASSERT (truncl (-0.7L) == 0.0L); ASSERT (truncl (-1.0L) == -1.0L); ASSERT (truncl (-1.5L) == -1.0L); ASSERT (truncl (-1.999L) == -1.0L); ASSERT (truncl (-2.0L) == -2.0L); ASSERT (truncl (-65535.999L) == -65535.0L); ASSERT (truncl (-65536.0L) == -65536.0L); ASSERT (truncl (-2.341e31L) == -2.341e31L); /* Infinite numbers. */ ASSERT (truncl (Infinityl ()) == Infinityl ()); ASSERT (truncl (- Infinityl ()) == - Infinityl ()); /* NaNs. */ ASSERT (isnanl (truncl (NaNl ()))); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tsearch.c��������������������������������������������������������0000664�0000000�0000000�00000021234�14110572173�0020215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test program for tsearch et al. Copyright (C) 1997, 2000-2001, 2007-2021 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 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. 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 this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <search.h> #include "signature.h" SIGNATURE_CHECK (tdelete, void *, (void const *, void **, int (*) (void const *, void const *))); SIGNATURE_CHECK (tfind, void *, (void const *, void * const *, int (*) (void const *, void const *))); SIGNATURE_CHECK (tsearch, void *, (void const *, void **, int (*) (void const *, void const *))); SIGNATURE_CHECK (twalk, void, (void const *, void (*) (void const *, VISIT, int))); #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" #define SEED 0 #if HAVE_TSEARCH /* The system's tsearch() is not expected to keep the tree balanced. */ # define BALANCED 0 #else /* The gnulib replacement tsearch() should keep the tree balanced. */ # define BALANCED 1 #endif #define PASSES 100 #if BALANCED #include <math.h> #define SIZE 1000 #else #define SIZE 100 #endif #undef random #define random() (int) ((unsigned int) rand () >> 3) enum order { ascending, descending, randomorder }; enum action { build, build_and_del, delete, find }; /* Set to 1 if a test is flunked. */ static int error = 0; /* The keys we add to the tree. */ static int x[SIZE]; /* Pointers into the key array, possibly permuted, to define an order for insertion/removal. */ static int y[SIZE]; /* Flags set for each element visited during a tree walk. */ static int z[SIZE]; /* Depths for all the elements, to check that the depth is constant for all three visits. */ static int depths[SIZE]; /* Maximum depth during a tree walk. */ static int max_depth; /* Compare two keys. */ static int cmp_fn (const void *a, const void *b) { return *(const int *) a - *(const int *) b; } /* Permute an array of integers. */ static void memfry (int *string) { int i; for (i = 0; i < SIZE; ++i) { int32_t j; int c; j = random () % SIZE; c = string[i]; string[i] = string[j]; string[j] = c; } } static void walk_action (const void *nodep, const VISIT which, const int depth) { int key = **(int **) nodep; if (depth > max_depth) max_depth = depth; if (which == leaf || which == preorder) { ++z[key]; depths[key] = depth; } else { if (depths[key] != depth) { fputs ("Depth for one element is not constant during tree walk.\n", stdout); } } } static void walk_tree (void *root, int expected_count) { int i; memset (z, 0, sizeof z); max_depth = 0; twalk (root, walk_action); for (i = 0; i < expected_count; ++i) if (z[i] != 1) { fputs ("Node was not visited.\n", stdout); error = 1; } #if BALANCED if (max_depth > log (expected_count) * 2 + 2) #else if (max_depth > expected_count) #endif { fputs ("Depth too large during tree walk.\n", stdout); error = 1; } } /* Perform an operation on a tree. */ static void mangle_tree (enum order how, enum action what, void **root, int lag) { int i; if (how == randomorder) { for (i = 0; i < SIZE; ++i) y[i] = i; memfry (y); } for (i = 0; i < SIZE + lag; ++i) { void *elem; int j, k; switch (how) { case randomorder: if (i >= lag) k = y[i - lag]; else /* Ensure that the array index is within bounds. */ k = y[(SIZE - i - 1 + lag) % SIZE]; j = y[i % SIZE]; break; case ascending: k = i - lag; j = i; break; case descending: k = SIZE - i - 1 + lag; j = SIZE - i - 1; break; default: /* This never should happen, but gcc isn't smart enough to recognize it. */ abort (); } switch (what) { case build_and_del: case build: if (i < SIZE) { if (tfind (x + j, (void *const *) root, cmp_fn) != NULL) { fputs ("Found element which is not in tree yet.\n", stdout); error = 1; } elem = tsearch (x + j, root, cmp_fn); if (elem == NULL || tfind (x + j, (void *const *) root, cmp_fn) == NULL) { fputs ("Couldn't find element after it was added.\n", stdout); error = 1; } } if (what == build || i < lag) break; j = k; FALLTHROUGH; case delete: elem = tfind (x + j, (void *const *) root, cmp_fn); if (elem == NULL || tdelete (x + j, root, cmp_fn) == NULL) { fputs ("Error deleting element.\n", stdout); error = 1; } break; case find: if (tfind (x + j, (void *const *) root, cmp_fn) == NULL) { fputs ("Couldn't find element after it was added.\n", stdout); error = 1; } break; } } } int main (int argc, char **argv) { int total_error = 0; void *root = NULL; int i, j; #if HAVE_INITSTATE static char state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; initstate (SEED, state, 8); #endif for (i = 0; i < SIZE; ++i) x[i] = i; /* Do this loop several times to get different permutations for the random case. */ fputs ("Series I\n", stdout); for (i = 0; i < PASSES; ++i) { fprintf (stdout, "Pass %d... ", i + 1); fflush (stdout); error = 0; mangle_tree (ascending, build, &root, 0); mangle_tree (ascending, find, &root, 0); mangle_tree (descending, find, &root, 0); mangle_tree (randomorder, find, &root, 0); walk_tree (root, SIZE); mangle_tree (ascending, delete, &root, 0); mangle_tree (ascending, build, &root, 0); walk_tree (root, SIZE); mangle_tree (descending, delete, &root, 0); mangle_tree (ascending, build, &root, 0); walk_tree (root, SIZE); mangle_tree (randomorder, delete, &root, 0); mangle_tree (descending, build, &root, 0); mangle_tree (ascending, find, &root, 0); mangle_tree (descending, find, &root, 0); mangle_tree (randomorder, find, &root, 0); walk_tree (root, SIZE); mangle_tree (descending, delete, &root, 0); mangle_tree (descending, build, &root, 0); walk_tree (root, SIZE); mangle_tree (descending, delete, &root, 0); mangle_tree (descending, build, &root, 0); walk_tree (root, SIZE); mangle_tree (randomorder, delete, &root, 0); mangle_tree (randomorder, build, &root, 0); mangle_tree (ascending, find, &root, 0); mangle_tree (descending, find, &root, 0); mangle_tree (randomorder, find, &root, 0); walk_tree (root, SIZE); mangle_tree (randomorder, delete, &root, 0); for (j = 1; j < SIZE; j *= 2) { mangle_tree (randomorder, build_and_del, &root, j); } fputs (error ? " failed!\n" : " ok.\n", stdout); total_error |= error; } fputs ("Series II\n", stdout); for (i = 1; i < SIZE; i *= 2) { fprintf (stdout, "For size %d... ", i); fflush (stdout); error = 0; mangle_tree (ascending, build_and_del, &root, i); mangle_tree (descending, build_and_del, &root, i); mangle_tree (ascending, build_and_del, &root, i); mangle_tree (descending, build_and_del, &root, i); mangle_tree (ascending, build_and_del, &root, i); mangle_tree (descending, build_and_del, &root, i); mangle_tree (ascending, build_and_del, &root, i); mangle_tree (descending, build_and_del, &root, i); fputs (error ? " failed!\n" : " ok.\n", stdout); total_error |= error; } return total_error; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tsearch.sh�������������������������������������������������������0000775�0000000�0000000�00000000361�14110572173�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-tsearch.out" ${CHECKER} ./test-tsearch${EXEEXT} > t-tsearch.out 2>&1 test $? = 0 || { cat t-tsearch.out 1>&2; rm -f $tmpfiles; exit 1; } rm -f $tmpfiles exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-tss.c������������������������������������������������������������0000664�0000000�0000000�00000033176�14110572173�0017405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thread-local storage in multithreaded situations. Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc. This 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>, 2005. */ #include <config.h> /* Whether to help the scheduler through explicit thrd_yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 #include <threads.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "macros.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() thrd_yield () #else # define yield() #endif /* Returns a reference to the current thread as a pointer, for debugging. */ #if defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define thrd_current_pointer() (*((void **) thrd_current ().__)) #elif defined __sun /* On Solaris, thrd_t is merely an 'unsigned int'. */ # define thrd_current_pointer() ((void *) (uintptr_t) thrd_current ()) #else # define thrd_current_pointer() ((void *) thrd_current ()) #endif static void perhaps_yield (void) { /* Call yield () only with a certain probability, otherwise the sequence of thread activations may be too predictable. */ if ((((unsigned int) rand () >> 3) % 4) == 0) yield (); } /* ----------------------- Test thread-local storage ----------------------- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 16 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #define KEYS_COUNT 4 static tss_t mykeys[KEYS_COUNT]; static int worker_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; int i, j, repeat; unsigned int values[KEYS_COUNT]; dbgprintf ("Worker %p started\n", thrd_current_pointer ()); /* Initialize the per-thread storage. */ for (i = 0; i < KEYS_COUNT; i++) { values[i] = (((unsigned int) rand () >> 3) % 1000000) * THREAD_COUNT + id; /* Hopefully no arithmetic overflow. */ if ((values[i] % THREAD_COUNT) != id) abort (); } perhaps_yield (); /* Verify that the initial value is NULL. */ dbgprintf ("Worker %p before initial verify\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if (tss_get (mykeys[i]) != NULL) abort (); dbgprintf ("Worker %p after initial verify\n", thrd_current_pointer ()); perhaps_yield (); /* Initialize the per-thread storage. */ dbgprintf ("Worker %p before first tss_set\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { unsigned int *ptr = (unsigned int *) malloc (sizeof (unsigned int)); *ptr = values[i]; ASSERT (tss_set (mykeys[i], ptr) == thrd_success); } dbgprintf ("Worker %p after first tss_set\n", thrd_current_pointer ()); perhaps_yield (); /* Shuffle around the pointers. */ for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { dbgprintf ("Worker %p doing value swapping\n", thrd_current_pointer ()); i = ((unsigned int) rand () >> 3) % KEYS_COUNT; j = ((unsigned int) rand () >> 3) % KEYS_COUNT; if (i != j) { void *vi = tss_get (mykeys[i]); void *vj = tss_get (mykeys[j]); ASSERT (tss_set (mykeys[i], vj) == thrd_success); ASSERT (tss_set (mykeys[j], vi) == thrd_success); } perhaps_yield (); } /* Verify that all the values are from this thread. */ dbgprintf ("Worker %p before final verify\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) if ((*(unsigned int *) tss_get (mykeys[i]) % THREAD_COUNT) != id) abort (); dbgprintf ("Worker %p after final verify\n", thrd_current_pointer ()); perhaps_yield (); dbgprintf ("Worker %p dying.\n", thrd_current_pointer ()); return 0; } static void test_tss (void) { int pass, i; for (pass = 0; pass < 2; pass++) { thrd_t threads[THREAD_COUNT]; if (pass == 0) for (i = 0; i < KEYS_COUNT; i++) ASSERT (tss_create (&mykeys[i], free) == thrd_success); else for (i = KEYS_COUNT - 1; i >= 0; i--) ASSERT (tss_create (&mykeys[i], free) == thrd_success); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_create (&threads[i], worker_thread, (void *) (uintptr_t) i) == thrd_success); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ASSERT (thrd_join (threads[i], NULL) == thrd_success); for (i = 0; i < KEYS_COUNT; i++) tss_delete (mykeys[i]); } } #undef KEYS_COUNT #undef REPEAT_COUNT #undef THREAD_COUNT /* --------------- Test thread-local storage with destructors --------------- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 static mtx_t sumlock; static uintptr_t sum; static void inc_sum (uintptr_t value) { ASSERT (mtx_lock (&sumlock) == thrd_success); sum += value; ASSERT (mtx_unlock (&sumlock) == thrd_success); } static void destructor0 (void *value) { if ((((uintptr_t) value - 1) % 10) != 0) abort (); inc_sum ((uintptr_t) value); } static void destructor1 (void *value) { if ((((uintptr_t) value - 1) % 10) != 1) abort (); inc_sum ((uintptr_t) value); } static void destructor2 (void *value) { if ((((uintptr_t) value - 1) % 10) != 2) abort (); inc_sum ((uintptr_t) value); } static void destructor3 (void *value) { if ((((uintptr_t) value - 1) % 10) != 3) abort (); inc_sum ((uintptr_t) value); } static void destructor4 (void *value) { if ((((uintptr_t) value - 1) % 10) != 4) abort (); inc_sum ((uintptr_t) value); } static void destructor5 (void *value) { if ((((uintptr_t) value - 1) % 10) != 5) abort (); inc_sum ((uintptr_t) value); } static void destructor6 (void *value) { if ((((uintptr_t) value - 1) % 10) != 6) abort (); inc_sum ((uintptr_t) value); } static void destructor7 (void *value) { if ((((uintptr_t) value - 1) % 10) != 7) abort (); inc_sum ((uintptr_t) value); } static void destructor8 (void *value) { if ((((uintptr_t) value - 1) % 10) != 8) abort (); inc_sum ((uintptr_t) value); } static void destructor9 (void *value) { if ((((uintptr_t) value - 1) % 10) != 9) abort (); inc_sum ((uintptr_t) value); } static void (*destructor_table[10]) (void *) = { destructor0, destructor1, destructor2, destructor3, destructor4, destructor5, destructor6, destructor7, destructor8, destructor9 }; static tss_t dtorcheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that uses destructors that verify that the destructor belongs to the right thread. */ static int dtorcheck1_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; tss_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) ASSERT (tss_create (&keys[i], destructor_table[i]) == thrd_success); for (i = 0; i < KEYS_COUNT; i++) ASSERT (tss_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == thrd_success); return 0; } static void test_tss_dtorcheck1 (void) { thrd_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_create (&threads[id], dtorcheck1_thread, (void *) (uintptr_t) id) == thrd_success); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_join (threads[id], NULL) == thrd_success); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) tss_delete (dtorcheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } /* Worker thread that uses destructors that verify that the destructor belongs to the right key allocated within the thread. */ static int dtorcheck2_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; tss_t *keys = dtorcheck_keys[id]; /* an array of KEYS_COUNT keys */ int i; for (i = 0; i < KEYS_COUNT; i++) ASSERT (tss_create (&keys[i], destructor_table[id]) == thrd_success); for (i = 0; i < KEYS_COUNT; i++) ASSERT (tss_set (keys[i], (void *) (uintptr_t) (10 * i + id + 1)) == thrd_success); return 0; } static void test_tss_dtorcheck2 (void) { thrd_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_create (&threads[id], dtorcheck2_thread, (void *) (uintptr_t) id) == thrd_success); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_join (threads[id], NULL) == thrd_success); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) tss_delete (dtorcheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef KEYS_COUNT #undef THREAD_COUNT /* --- Test thread-local storage with with races between init and destroy --- */ /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of keys to allocate in each thread. */ #define KEYS_COUNT 10 /* Number of times to destroy and reallocate a key in each thread. */ #define REPEAT_COUNT 100000 static tss_t racecheck_keys[THREAD_COUNT][KEYS_COUNT]; /* Worker thread that does many destructions and reallocations of keys, and also uses destructors that verify that the destructor belongs to the right key. */ static int racecheck_thread (void *arg) { unsigned int id = (unsigned int) (uintptr_t) arg; tss_t *keys = racecheck_keys[id]; /* an array of KEYS_COUNT keys */ int repeat; int i; dbgprintf ("Worker %p started\n", thrd_current_pointer ()); for (i = 0; i < KEYS_COUNT; i++) { ASSERT (tss_create (&keys[i], destructor_table[i]) == thrd_success); ASSERT (tss_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == thrd_success); } for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { i = ((unsigned int) rand () >> 3) % KEYS_COUNT; dbgprintf ("Worker %p reallocating key %d\n", thrd_current_pointer (), i); tss_delete (keys[i]); ASSERT (tss_create (&keys[i], destructor_table[i]) == thrd_success); ASSERT (tss_set (keys[i], (void *) (uintptr_t) (10 * id + i + 1)) == thrd_success); } dbgprintf ("Worker %p dying.\n", thrd_current_pointer ()); return 0; } static void test_tss_racecheck (void) { thrd_t threads[THREAD_COUNT]; unsigned int id; int i; uintptr_t expected_sum; sum = 0; /* Spawn the threads. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_create (&threads[id], racecheck_thread, (void *) (uintptr_t) id) == thrd_success); /* Wait for the threads to terminate. */ for (id = 0; id < THREAD_COUNT; id++) ASSERT (thrd_join (threads[id], NULL) == thrd_success); /* Clean up the keys. */ for (id = 0; id < THREAD_COUNT; id++) for (i = 0; i < KEYS_COUNT; i++) tss_delete (racecheck_keys[id][i]); /* Check that the destructor was invoked for each key. */ expected_sum = 10 * KEYS_COUNT * (THREAD_COUNT * (THREAD_COUNT - 1) / 2) + THREAD_COUNT * (KEYS_COUNT * (KEYS_COUNT - 1) / 2) + THREAD_COUNT * KEYS_COUNT; if (sum != expected_sum) abort (); } #undef REPEAT_COUNT #undef KEYS_COUNT #undef THREAD_COUNT /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif ASSERT (mtx_init (&sumlock, mtx_plain) == thrd_success); printf ("Starting test_tss ..."); fflush (stdout); test_tss (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_dtorcheck1 ..."); fflush (stdout); test_tss_dtorcheck1 (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_dtorcheck2 ..."); fflush (stdout); test_tss_dtorcheck2 (); printf (" OK\n"); fflush (stdout); printf ("Starting test_tss_racecheck ..."); fflush (stdout); test_tss_racecheck (); printf (" OK\n"); fflush (stdout); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-ttyname_r.c������������������������������������������������������0000664�0000000�0000000�00000003322�14110572173�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ttyname_r(3). Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (ttyname_r, int, (int, char *, size_t)); #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include "macros.h" int main (void) { int fd; char buf[100]; /* Open the controlling tty of the current process. */ fd = open ("/dev/tty", O_RDONLY); if (fd < 0) { fprintf (stderr, "Skipping test: cannot open controlling tty\n"); return 77; } ASSERT (ttyname_r (fd, buf, 1) == ERANGE); ASSERT (ttyname_r (fd, buf, sizeof (buf)) == 0); ASSERT (memcmp (buf, "/dev/", 5) == 0); /* Test behaviour for invalid file descriptors. */ { int err = ttyname_r (-1, buf, sizeof (buf)); ASSERT (err == EBADF || err == ENOTTY /* seen on FreeBSD 6.4 */ ); } { int err; close (99); err = ttyname_r (99, buf, sizeof (buf)); ASSERT (err == EBADF || err == ENOTTY /* seen on FreeBSD 6.4 */ ); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-u64.c������������������������������������������������������������0000664�0000000�0000000�00000002222�14110572173�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <u64.h> Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include <u64.h> int main (void) { u64 i = u64init (42, 4711); u64 j, k, l; j = u64hilo (42, 4711); if (u64lt (i, j) || u64lt (j, i)) return 1; i = u64hilo (0, 42); j = u64hilo (0, 43); if (!u64lt (i, j)) return 1; k = u64plus (i, j); l = u64hilo (0, 42 + 43); if (u64lt (k, l) || u64lt (l, k)) return 1; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-uchar-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000006666�14110572173�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <uchar.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <uchar.h> #include "signature.h" #if GNULIB_TEST_BTOC32 SIGNATURE_CHECK (GNULIB_NAMESPACE::btoc32, wint_t, (int)); #endif #if GNULIB_TEST_C32ISALNUM SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isalnum, int, (wint_t)); #endif #if GNULIB_TEST_C32ISALPHA SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isalpha, int, (wint_t)); #endif #if GNULIB_TEST_C32ISBLANK SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isblank, int, (wint_t)); #endif #if GNULIB_TEST_C32ISCNTRL SIGNATURE_CHECK (GNULIB_NAMESPACE::c32iscntrl, int, (wint_t)); #endif #if GNULIB_TEST_C32ISDIGIT SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isdigit, int, (wint_t)); #endif #if GNULIB_TEST_C32ISGRAPH SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isgraph, int, (wint_t)); #endif #if GNULIB_TEST_C32ISLOWER SIGNATURE_CHECK (GNULIB_NAMESPACE::c32islower, int, (wint_t)); #endif #if GNULIB_TEST_C32ISPRINT SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isprint, int, (wint_t)); #endif #if GNULIB_TEST_C32ISPUNCT SIGNATURE_CHECK (GNULIB_NAMESPACE::c32ispunct, int, (wint_t)); #endif #if GNULIB_TEST_C32ISSPACE SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isspace, int, (wint_t)); #endif #if GNULIB_TEST_C32ISUPPER SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isupper, int, (wint_t)); #endif #if GNULIB_TEST_C32ISXDIGIT SIGNATURE_CHECK (GNULIB_NAMESPACE::c32isxdigit, int, (wint_t)); #endif #if GNULIB_TEST_C32RTOMB SIGNATURE_CHECK (GNULIB_NAMESPACE::c32rtomb, size_t, (char *, char32_t , mbstate_t *)); #endif #if GNULIB_TEST_C32SNRTOMBS SIGNATURE_CHECK (GNULIB_NAMESPACE::c32snrtombs, size_t, (char *, const char32_t **, size_t, size_t, mbstate_t *)); #endif #if GNULIB_TEST_C32SRTOMBS SIGNATURE_CHECK (GNULIB_NAMESPACE::c32srtombs, size_t, (char *, const char32_t **, size_t, mbstate_t *)); #endif #if GNULIB_TEST_C32STOMBS SIGNATURE_CHECK (GNULIB_NAMESPACE::c32stombs, size_t, (char *, const char32_t *, size_t)); #endif #if GNULIB_TEST_C32TOB SIGNATURE_CHECK (GNULIB_NAMESPACE::c32tob, int, (wint_t)); #endif #if GNULIB_TEST_MBRTOC32 SIGNATURE_CHECK (GNULIB_NAMESPACE::mbrtoc32, size_t, (char32_t *, const char *, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBSNRTOC32S SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsnrtoc32s, size_t, (char32_t *, const char **, size_t, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBSRTOC32S SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsrtoc32s, size_t, (char32_t *, const char **, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBSTOC32S SIGNATURE_CHECK (GNULIB_NAMESPACE::mbstoc32s, size_t, (char32_t *, const char *, size_t)); #endif int main () { } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-uchar-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001533�14110572173�0020461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <uchar.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #if __cplusplus >= 201103 # include <cuchar> #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-uchar.c����������������������������������������������������������0000664�0000000�0000000�00000002655�14110572173�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <uchar.h> substitute. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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> #include "verify.h" /* Check that the types are defined. */ mbstate_t a = { 0 }; size_t b = 5; char16_t c = 'x'; char32_t d = 'y'; /* Check that char16_t and char32_t are unsigned types. */ verify ((char16_t)(-1) >= 0); #if !defined __HP_cc verify ((char32_t)(-1) >= 0); #endif /* Check that char32_t is at least 31 bits wide. */ verify ((char32_t)0x7FFFFFFF != (char32_t)0x3FFFFFFF); /* Check that _GL_LARGE_CHAR32_T is correctly defined. */ #if _GL_LARGE_CHAR32_T verify (sizeof (char32_t) > sizeof (wchar_t)); #else verify (sizeof (char32_t) == sizeof (wchar_t)); #endif int main (void) { return 0; } �����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-uname.c����������������������������������������������������������0000664�0000000�0000000�00000003751�14110572173�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of system information. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <sys/utsname.h> #include "signature.h" SIGNATURE_CHECK (uname, int, (struct utsname *)); #include <stdio.h> #include <string.h> #include "macros.h" /* This program can be called with no arguments, then it performs a unit test. Or it can be called with 1 argument, then it prints the uname contents to standard output. */ int main (int argc, char *argv[]) { struct utsname buf; memset (&buf, '?', sizeof (buf)); ASSERT (uname (&buf) >= 0); /* Verify that every field's value is NUL terminated. */ ASSERT (strlen (buf.sysname) < sizeof (buf.sysname)); ASSERT (strlen (buf.nodename) < sizeof (buf.nodename)); ASSERT (strlen (buf.release) < sizeof (buf.release)); ASSERT (strlen (buf.version) < sizeof (buf.version)); ASSERT (strlen (buf.machine) < sizeof (buf.machine)); if (argc > 1) { /* Show the result. */ printf ("uname -n = nodename = %s\n", buf.nodename); printf ("uname -s = sysname = %s\n", buf.sysname); printf ("uname -r = release = %s\n", buf.release); printf ("uname -v = version = %s\n", buf.version); printf ("uname -m = machine or cpu = %s\n", buf.machine); } return 0; } �����������������������gnulib-20210822~d383792/tests/test-unicodeio.c������������������������������������������������������0000664�0000000�0000000�00000004115�14110572173�0020541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests for Unicode character output. Copyright (C) 2020-2021 Free Software Foundation, Inc. This 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, 2020. */ #include <config.h> /* Specification. */ #include "unicodeio.h" #include <locale.h> #include <string.h> #include "macros.h" #define TEST_CODE 0x2022 #define TEST_CODE_AS_UTF8 "\xe2\x80\xa2" #define TEST_CODE_AS_GB18030 "\x81\x36\xa6\x31" static char result[64]; static long success_callback (const char *buf, size_t buflen, void *callback_arg) { memcpy (result, buf, buflen); result[buflen] = '\0'; return 42; } static long failure_callback (unsigned int code, const char *msg, void *callback_arg) { ASSERT (code == TEST_CODE); strcpy (result, "."); return 55; } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; switch (unicode_to_mb (TEST_CODE, success_callback, failure_callback, NULL)) { case 42: if (argc > 1) switch (argv[1][0]) { case '1': /* On some platforms, the "C" locale has UTF-8 encoding. */ case '2': ASSERT (strcmp (result, TEST_CODE_AS_UTF8) == 0); break; case '3': ASSERT (strcmp (result, TEST_CODE_AS_GB18030) == 0); break; } break; case 55: ASSERT (strcmp (result, ".") == 0); break; default: ASSERT (0); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unicodeio1.sh����������������������������������������������������0000775�0000000�0000000�00000000125�14110572173�0021012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the C locale. LC_ALL=C \ ${CHECKER} ./test-unicodeio${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unicodeio2.sh����������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-unicodeio${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unicodeio3.sh����������������������������������������������������0000775�0000000�0000000�00000000617�14110572173�0021022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-unicodeio${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unistd-c++.cc����������������������������������������������������0000664�0000000�0000000�00000016222�14110572173�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <unistd.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <unistd.h> #include "signature.h" #if GNULIB_TEST_ACCESS SIGNATURE_CHECK (GNULIB_NAMESPACE::access, int, (const char *, int)); #endif #if GNULIB_TEST_CHDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::chdir, int, (const char *)); #endif #if GNULIB_TEST_CHOWN SIGNATURE_CHECK (GNULIB_NAMESPACE::chown, int, (const char *, uid_t, gid_t)); #endif #if GNULIB_TEST_CLOSE SIGNATURE_CHECK (GNULIB_NAMESPACE::close, int, (int)); #endif #if GNULIB_TEST_DUP SIGNATURE_CHECK (GNULIB_NAMESPACE::dup, int, (int)); #endif #if GNULIB_TEST_DUP2 SIGNATURE_CHECK (GNULIB_NAMESPACE::dup2, int, (int, int)); #endif #if GNULIB_TEST_DUP3 SIGNATURE_CHECK (GNULIB_NAMESPACE::dup3, int, (int, int, int)); #endif #if GNULIB_TEST_EXECL SIGNATURE_CHECK (GNULIB_NAMESPACE::execl, int, (const char *, const char *, ...)); #endif #if GNULIB_TEST_EXECLE SIGNATURE_CHECK (GNULIB_NAMESPACE::execle, int, (const char *, const char *, ...)); #endif #if GNULIB_TEST_EXECLP SIGNATURE_CHECK (GNULIB_NAMESPACE::execlp, int, (const char *, const char *, ...)); #endif #if GNULIB_TEST_EXECV SIGNATURE_CHECK (GNULIB_NAMESPACE::execv, int, (const char *, char * const *)); #endif #if GNULIB_TEST_EXECVE SIGNATURE_CHECK (GNULIB_NAMESPACE::execve, int, (const char *, char * const *, char * const *)); #endif #if GNULIB_TEST_EXECVP SIGNATURE_CHECK (GNULIB_NAMESPACE::execvp, int, (const char *, char * const *)); #endif #if GNULIB_TEST_EXECVPE SIGNATURE_CHECK (GNULIB_NAMESPACE::execvpe, int, (const char *, char * const *, char * const *)); #endif #if GNULIB_TEST_EUIDACCESS SIGNATURE_CHECK (GNULIB_NAMESPACE::euidaccess, int, (const char *, int)); #endif #if GNULIB_TEST_FACCESSAT SIGNATURE_CHECK (GNULIB_NAMESPACE::faccessat, int, (int, char const *, int, int)); #endif #if GNULIB_TEST_FCHDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::fchdir, int, (int)); #endif #if GNULIB_TEST_FCHOWNAT SIGNATURE_CHECK (GNULIB_NAMESPACE::fchownat, int, (int, char const *, uid_t, gid_t, int)); #endif #if GNULIB_TEST_FDATASYNC SIGNATURE_CHECK (GNULIB_NAMESPACE::fdatasync, int, (int)); #endif #if GNULIB_TEST_FSYNC SIGNATURE_CHECK (GNULIB_NAMESPACE::fsync, int, (int)); #endif #if GNULIB_TEST_FTRUNCATE SIGNATURE_CHECK (GNULIB_NAMESPACE::ftruncate, int, (int, off_t)); #endif #if GNULIB_TEST_GETCWD SIGNATURE_CHECK (GNULIB_NAMESPACE::getcwd, char *, (char *, size_t)); #endif #if GNULIB_TEST_GETDOMAINNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::getdomainname, int, (char *, size_t)); #endif #if GNULIB_TEST_GETDTABLESIZE SIGNATURE_CHECK (GNULIB_NAMESPACE::getdtablesize, int, (void)); #endif #if GNULIB_TEST_GETENTROPY SIGNATURE_CHECK (GNULIB_NAMESPACE::getentropy, int, (void *, size_t)); #endif #if GNULIB_TEST_GETGROUPS SIGNATURE_CHECK (GNULIB_NAMESPACE::getgroups, int, (int, gid_t *)); #endif #if GNULIB_TEST_GETHOSTNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::gethostname, int, (char *, size_t)); #endif #if GNULIB_TEST_GETLOGIN SIGNATURE_CHECK (GNULIB_NAMESPACE::getlogin, char *, (void)); #endif #if GNULIB_TEST_GETLOGIN_R SIGNATURE_CHECK (GNULIB_NAMESPACE::getlogin_r, int, (char *, size_t)); #endif #if GNULIB_TEST_GETPAGESIZE SIGNATURE_CHECK (GNULIB_NAMESPACE::getpagesize, int, (void)); #endif #if GNULIB_TEST_GETPASS SIGNATURE_CHECK (GNULIB_NAMESPACE::getpass, char *, (const char *)); #endif #if GNULIB_TEST_GETUSERSHELL SIGNATURE_CHECK (GNULIB_NAMESPACE::getusershell, char *, (void)); #endif #if GNULIB_TEST_GETUSERSHELL SIGNATURE_CHECK (GNULIB_NAMESPACE::setusershell, void, (void)); #endif #if GNULIB_TEST_GETUSERSHELL SIGNATURE_CHECK (GNULIB_NAMESPACE::endusershell, void, (void)); #endif #if GNULIB_TEST_GROUP_MEMBER SIGNATURE_CHECK (GNULIB_NAMESPACE::group_member, int, (gid_t)); #endif #if GNULIB_TEST_ISATTY SIGNATURE_CHECK (GNULIB_NAMESPACE::isatty, int, (int)); #endif #if GNULIB_TEST_LCHOWN SIGNATURE_CHECK (GNULIB_NAMESPACE::lchown, int, (char const *, uid_t, gid_t)); #endif #if GNULIB_TEST_LINK SIGNATURE_CHECK (GNULIB_NAMESPACE::link, int, (const char *, const char *)); #endif #if GNULIB_TEST_LINKAT SIGNATURE_CHECK (GNULIB_NAMESPACE::linkat, int, (int, const char *, int, const char *, int)); #endif #if GNULIB_TEST_LSEEK SIGNATURE_CHECK (GNULIB_NAMESPACE::lseek, off_t, (int, off_t, int)); #endif #if GNULIB_TEST_PIPE SIGNATURE_CHECK (GNULIB_NAMESPACE::pipe, int, (int[2])); #endif #if GNULIB_TEST_PIPE2 SIGNATURE_CHECK (GNULIB_NAMESPACE::pipe2, int, (int[2], int)); #endif #if GNULIB_TEST_PREAD SIGNATURE_CHECK (GNULIB_NAMESPACE::pread, ssize_t, (int, void *, size_t, off_t)); #endif #if GNULIB_TEST_PWRITE SIGNATURE_CHECK (GNULIB_NAMESPACE::pwrite, ssize_t, (int, const void *, size_t, off_t)); #endif #if GNULIB_TEST_READ SIGNATURE_CHECK (GNULIB_NAMESPACE::read, ssize_t, (int, void *, size_t)); #endif #if GNULIB_TEST_READLINK SIGNATURE_CHECK (GNULIB_NAMESPACE::readlink, ssize_t, (const char *, char *, size_t)); #endif #if GNULIB_TEST_READLINKAT SIGNATURE_CHECK (GNULIB_NAMESPACE::readlinkat, ssize_t, (int, char const *, char *, size_t)); #endif #if GNULIB_TEST_RMDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::rmdir, int, (char const *)); #endif #if GNULIB_TEST_SETHOSTNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::sethostname, int, (const char *, size_t)); #endif #if GNULIB_TEST_SLEEP SIGNATURE_CHECK (GNULIB_NAMESPACE::sleep, unsigned int, (unsigned int)); #endif #if GNULIB_TEST_SYMLINK SIGNATURE_CHECK (GNULIB_NAMESPACE::symlink, int, (char const *, char const *)); #endif #if GNULIB_TEST_SYMLINKAT SIGNATURE_CHECK (GNULIB_NAMESPACE::symlinkat, int, (char const *, int, char const *)); #endif #if GNULIB_TEST_TRUNCATE SIGNATURE_CHECK (GNULIB_NAMESPACE::truncate, int, (const char *, off_t)); #endif #if GNULIB_TEST_TTYNAME_R SIGNATURE_CHECK (GNULIB_NAMESPACE::ttyname_r, int, (int fd, char *buf, size_t buflen)); #endif #if GNULIB_TEST_UNLINK SIGNATURE_CHECK (GNULIB_NAMESPACE::unlink, int, (char const *)); #endif #if GNULIB_TEST_UNLINKAT SIGNATURE_CHECK (GNULIB_NAMESPACE::unlinkat, int, (int, char const *, int)); #endif #if GNULIB_TEST_USLEEP SIGNATURE_CHECK (GNULIB_NAMESPACE::usleep, int, (useconds_t)); #endif #if GNULIB_TEST_WRITE SIGNATURE_CHECK (GNULIB_NAMESPACE::write, ssize_t, (int, const void *, size_t)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unistd.c���������������������������������������������������������0000664�0000000�0000000�00000003050�14110572173�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <unistd.h> substitute. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "verify.h" /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the various *_FILENO macros are defined. */ #if ! (defined STDIN_FILENO \ && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) missing or broken *_FILENO macros #endif /* Check that the types are all defined. */ size_t t1; ssize_t t2; #ifdef TODO /* Not implemented in gnulib yet */ uid_t t3; gid_t t4; #endif off_t t5; pid_t t6; #ifdef TODO useconds_t t7; intptr_t t8; #endif int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unlink.c���������������������������������������������������������0000664�0000000�0000000�00000002457�14110572173�0020072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (unlink, int, (char const *)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "unlinkdir.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-unlink.t" #include "test-unlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_unlink_func (unlink, true); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unlink.h���������������������������������������������������������0000664�0000000�0000000�00000005756�14110572173�0020104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlink. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both unlink(n) and unlinkat(AT_FDCWD,n,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, then warn before returning status 77 when symlinks are unsupported. */ static int test_unlink_func (int (*func) (char const *name), bool print) { /* Setup. */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (close (creat (BASE "dir/file", 0600)) == 0); /* Basic error conditions. */ errno = 0; ASSERT (func ("") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "nosuch") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "nosuch/") == -1); ASSERT (errno == ENOENT); /* Resulting errno after directories is rather varied across implementations (EPERM, EINVAL, EACCES, EBUSY, EISDIR, ENOTSUP); however, we must be careful to not attempt unlink on a directory unless we know it must fail. */ if (cannot_unlink_dir ()) { ASSERT (func (".") == -1); ASSERT (func ("..") == -1); ASSERT (func ("/") == -1); ASSERT (func (BASE "dir") == -1); ASSERT (mkdir (BASE "dir1", 0700) == 0); ASSERT (func (BASE "dir1") == -1); ASSERT (rmdir (BASE "dir1") == 0); } errno = 0; ASSERT (func (BASE "dir/file/") == -1); ASSERT (errno == ENOTDIR); /* Test symlink behavior. Specifying trailing slash will attempt unlink of a directory, so only attempt it if we know it must fail. */ if (symlink (BASE "dir", BASE "link") != 0) { ASSERT (func (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } if (cannot_unlink_dir ()) ASSERT (func (BASE "link/") == -1); ASSERT (func (BASE "link") == 0); ASSERT (symlink (BASE "dir/file", BASE "link") == 0); errno = 0; ASSERT (func (BASE "link/") == -1); ASSERT (errno == ENOTDIR); /* Order here proves unlink of a symlink does not follow through to the file. */ ASSERT (func (BASE "link") == 0); ASSERT (func (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); return 0; } ������������������gnulib-20210822~d383792/tests/test-unlinkat.c�������������������������������������������������������0000664�0000000�0000000�00000004653�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlinkat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (unlinkat, int, (int, char const *, int)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "unlinkdir.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-unlinkat.t" #include "test-rmdir.h" #include "test-unlink.h" static int dfd = AT_FDCWD; /* Wrapper around unlinkat to test rmdir behavior. */ static int rmdirat (char const *name) { return unlinkat (dfd, name, AT_REMOVEDIR); } /* Wrapper around unlinkat to test unlink behavior. */ static int unlinker (char const *name) { return unlinkat (dfd, name, 0); } int main (_GL_UNUSED int argc, char *argv[]) { /* FIXME: Add tests of fd other than ".". */ int result1; int result2; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (unlinkat (-1, "foo", 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (unlinkat (99, "foo", 0) == -1); ASSERT (errno == EBADF); } result1 = test_rmdir_func (rmdirat, false); result2 = test_unlink_func (unlinker, false); ASSERT (result1 == result2); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); result2 = test_rmdir_func (rmdirat, false); ASSERT (result1 == result2); result2 = test_unlink_func (unlinker, false); ASSERT (result1 == result2); ASSERT (close (dfd) == 0); if (result1 == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result1; } �������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unlockpt.c�������������������������������������������������������0000664�0000000�0000000�00000002576�14110572173�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test unlocking of the slave side of a pseudo-terminal. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 (unlockpt, int, (int)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ #if !defined __NetBSD__ /* known bug on NetBSD 5.1 */ { errno = 0; ASSERT (unlockpt (-1) == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ ); } { close (99); errno = 0; ASSERT (unlockpt (99) == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ ); } #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-unsetenv.c�������������������������������������������������������0000664�0000000�0000000�00000003376�14110572173�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unsetenv. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (unsetenv, int, (char const *)); #include <errno.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (void) { char entry[] = "b=2"; /* Test removal when multiple entries present. */ ASSERT (putenv ((char *) "a=1") == 0); ASSERT (putenv (entry) == 0); entry[0] = 'a'; /* Unspecified what getenv("a") would be at this point. */ ASSERT (unsetenv ("a") == 0); /* Both entries will be removed. */ ASSERT (getenv ("a") == NULL); ASSERT (unsetenv ("a") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (unsetenv ("") == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (unsetenv ("a=b") == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (unsetenv (NULL) == -1); ASSERT (errno == EINVAL); #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-update-copyright.sh����������������������������������������������0000775�0000000�0000000�00000042715�14110572173�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test suite for update-copyright. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. diffout=`diff -u /dev/null /dev/null 2>&1` if test x"$diffout" = x"" && test $? -eq 0; then compare() { diff -u "$@"; } else compare() { cmp "$@"; } fi # Ensure the update-copyright program gets found. PATH=$abs_aux_dir:$PATH export PATH TMP_BASE=update-copyright.test trap 'rm -f $TMP_BASE*' 0 1 2 3 15 ## --------------------------------- ## ## Skip if user does not have perl. ## ## --------------------------------- ## TMP=$TMP_BASE s=$TMP-script cat <<\EOF > $s #!/bin/sh #! -*-perl-*- # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx -pi "$0" "$@"' if 0; s/a/b/ EOF chmod a+x $s echo a > $TMP-in ./$s $TMP-in 2>/dev/null && test b = "`cat $TMP-in 2>/dev/null`" || { printf '%s\n' "$0: skipping this test;" \ 'your system has insufficient support for Perl' 1>&2 exit 77 } # Skip this test if Perl is too old. FIXME: 5.8.0 is just a guess. # We have a report that 5.6.1 is inadequate and that 5.8.0 works. perl -e 'require 5.8.0' || { echo '$0: skipping this test; Perl version is too old' 1>&2 exit 77 } # Do not let a different envvar setting perturb results. UPDATE_COPYRIGHT_MAX_LINE_LENGTH=72 export UPDATE_COPYRIGHT_MAX_LINE_LENGTH ## ----------------------------- ## ## Examples from documentation. ## ## ----------------------------- ## TMP=$TMP_BASE-ex cat > $TMP.1 <<EOF Copyright @copyright{} 1990-2005, 2007-2009 Free Software Foundation, Inc. EOF cat > $TMP.2 <<EOF # Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF cat > $TMP.3 <<EOF /* * Copyright © 90,2005,2007-2009 * Free Software Foundation, Inc. */ EOF cat > $TMP.4 <<EOF ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF cat > $TMP.5 <<EOF Copyright (C) 1990-2005, 2007-2009 Acme, Inc. EOF cat > $TMP.6 <<EOF ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. Copyright (C) 1990-2005, 2007-2009 Free Software Foundation, Inc. EOF cat > $TMP.7 <<EOF Copyright (C) 1990-2005, 2007-2009 Acme, Inc. # Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2009 \ update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare - $TMP-stderr <<EOF || exit 1 $TMP.4: warning: copyright statement not found $TMP.5: warning: copyright statement not found EOF compare - $TMP.1 <<EOF || exit 1 Copyright @copyright{} 1990-2005, 2007-2009 Free Software Foundation, Inc. EOF compare - $TMP.2 <<EOF || exit 1 # Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF compare - $TMP.3 <<EOF || exit 1 /* * Copyright © 90,2005,2007-2009 * Free Software Foundation, Inc. */ EOF compare - $TMP.4 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF compare - $TMP.5 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. EOF compare - $TMP.6 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. Copyright (C) 1990-2005, 2007-2009 Free Software Foundation, Inc. EOF compare - $TMP.7 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. # Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare - $TMP-stderr <<EOF || exit 1 $TMP.4: warning: copyright statement not found $TMP.5: warning: copyright statement not found EOF compare - $TMP.1 <<EOF || exit 1 Copyright @copyright{} 1990-2005, 2007-2010 Free Software Foundation, Inc. EOF compare - $TMP.2 <<EOF || exit 1 # Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. EOF compare - $TMP.3 <<EOF || exit 1 /* * Copyright © 1990, 2005, 2007-2010 Free Software Foundation, Inc. */ EOF compare - $TMP.4 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF compare - $TMP.5 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. EOF compare - $TMP.6 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. EOF compare - $TMP.7 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. # Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_FORCE=1 \ update-copyright $TMP.? 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare - $TMP-stderr <<EOF || exit 1 $TMP.4: warning: copyright statement not found $TMP.5: warning: copyright statement not found EOF compare - $TMP.1 <<EOF || exit 1 Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. EOF compare - $TMP.2 <<EOF || exit 1 # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, # 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free # Software Foundation, Inc. EOF compare - $TMP.3 <<EOF || exit 1 /* * Copyright © 1990, 2005, 2007, 2008, 2009, 2010 Free Software * Foundation, Inc. */ EOF compare - $TMP.4 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. EOF compare - $TMP.5 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. EOF compare - $TMP.6 <<EOF || exit 1 ## Copyright (C) 1990-2005, 2007-2009 Free Software # Foundation, Inc. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. EOF compare - $TMP.7 <<EOF || exit 1 Copyright (C) 1990-2005, 2007-2009 Acme, Inc. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, # 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free # Software Foundation, Inc. EOF rm $TMP* ## -------------- ## ## Current year. ## ## -------------- ## TMP=$TMP_BASE-current-year YEAR=`date +%Y` cat > $TMP <<EOF '\" Copyright (C) 2006 '\" Free Software Foundation, '\" Inc. EOF update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 '\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_USE_INTERVALS=1 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 '\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc. EOF rm $TMP* ## ------------------ ## ## Surrounding text. ## ## ------------------ ## TMP=$TMP_BASE-surrounding-text cat > $TMP <<EOF Undisturbed text. dnl Undisturbed text. dnl Copyright (C) 89 dnl Free Software Foundation, Inc. dnl Undisturbed text. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 Undisturbed text. dnl Undisturbed text. dnl Copyright (C) 1989, 2010 Free Software Foundation, Inc. dnl Undisturbed text. EOF rm $TMP* ## --------------- ## ## Widest prefix. ## ## --------------- ## TMP=$TMP_BASE-widest-prefix cat > $TMP <<EOF #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, #### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #### 2008 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, #### 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, #### 2006, 2007, 2008, 2010 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 #### Copyright (C) 1976-1988, 1999-2008, 2010-2011 Free Software #### Foundation, Inc. EOF rm $TMP* ## ------------------- ## ## Prefix too large. ## ## ------------------- ## TMP=$TMP_BASE-prefix-too-large cat > $TMP <<EOF #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, #### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #### 2008 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare - $TMP-stderr <<EOF || exit 1 $TMP: warning: copyright statement not found EOF compare - $TMP <<EOF || exit 1 #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, #### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #### 2008 Free Software Foundation, Inc. EOF rm $TMP* ## ------------- ## ## Blank lines. ## ## ------------- ## TMP=$TMP_BASE-blank-lines cat > $TMP <<EOF #Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, # #1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #2008 Free Software Foundation, Inc. Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare - $TMP-stderr <<EOF || exit 1 $TMP: warning: copyright statement not found EOF compare - $TMP <<EOF || exit 1 #Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, # #1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #2008 Free Software Foundation, Inc. Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. EOF rm $TMP* ## -------------- ## ## Leading tabs. ## ## -------------- ## TMP=$TMP_BASE-leading-tabs cat > $TMP <<EOF Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 Copyright (C) 1987-1988, 1991-2011 Free Software Foundation, Inc. EOF rm $TMP* ## -------------------- ## ## Unusual whitespace. ## ## -------------------- ## TMP=$TMP_BASE-unusual-ws cat > $TMP <<EOF # Copyright (C) 87-88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, # 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, # 2009 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 # Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, # 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 # Copyright (C) 1987-1988, 1991-2011 Free Software # Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=2 \ UPDATE_COPYRIGHT_FORCE=1 update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 # Copyright (C) 1987-2011 Free Software Foundation, Inc. EOF rm $TMP* ## --------- ## ## DOS EOL. ## ## --------- ## TMP=$TMP_BASE-dos-eol tr @ '\015' > $TMP <<\EOF Rem Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@ Rem 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@ Rem 2009 Free Software Foundation, Inc.@ EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 tr @ '\015' > $TMP-exp <<\EOF Rem Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@ Rem 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@ Rem 2009, 2010 Free Software Foundation, Inc.@ EOF compare $TMP-exp $TMP || exit 1 rm $TMP* ## --------------- ## ## Omitted "(C)". ## ## --------------- ## TMP=$TMP_BASE-omitted-circle-c cat > $TMP <<EOF Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP <<EOF || exit 1 Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. EOF rm $TMP* ## ------------------ ## ## C-style comments. ## ## ------------------ ## TMP=$TMP_BASE-c-style-comments cat > $TMP.star <<EOF /* Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, * 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, * 2009 Free Software Foundation, Inc. */ EOF cat > $TMP.space <<EOF /*Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. */ EOF cat > $TMP.single-line <<EOF /* Copyright 87, 1991, 1992 Free Software Foundation, Inc. */ EOF cat > $TMP.single-line-wrapped <<EOF /* Copyright 1988, 1991, 1992, 1993 Free Software Foundation, Inc. */ EOF cat > $TMP.extra-text-star <<EOF /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. End * More comments. */ EOF cat > $TMP.extra-text-space <<EOF /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. *** * End of comments. */ EOF cat > $TMP.two-digit-final-is-substr-of-first <<EOF /* Copyright 1991, 99 Free Software Foundation, Inc. */ EOF UPDATE_COPYRIGHT_YEAR=2010 \ update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr compare /dev/null $TMP-stdout || exit 1 compare /dev/null $TMP-stderr || exit 1 compare - $TMP.star <<EOF || exit 1 /* Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, * 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, * 2009, 2010 Free Software Foundation, Inc. */ EOF compare - $TMP.space <<EOF || exit 1 /*Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. */ EOF compare - $TMP.single-line <<EOF || exit 1 /* Copyright 1987, 1991, 1992, 2010 Free Software Foundation, Inc. */ EOF compare - $TMP.single-line-wrapped <<EOF || exit 1 /* Copyright 1988, 1991, 1992, 1993, 2010 Free Software Foundation, * Inc. */ EOF compare - $TMP.extra-text-star <<EOF || exit 1 /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation, * Inc. End * More comments. */ EOF compare - $TMP.extra-text-space <<EOF || exit 1 /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation, Inc. *** * End of comments. */ EOF compare - $TMP.two-digit-final-is-substr-of-first <<EOF || exit 1 /* Copyright 1991, 1999, 2010 Free Software Foundation, Inc. */ EOF rm $TMP* exit 0 ���������������������������������������������������gnulib-20210822~d383792/tests/test-userspec.c�������������������������������������������������������0000664�0000000�0000000�00000013465�14110572173�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test userspec.c Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Jim Meyering. */ #include <config.h> #include "userspec.h" #include <stdio.h> #include <assert.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <sys/types.h> #include <pwd.h> #include <grp.h> #include "xalloc.h" #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) struct test { const char *in; uid_t uid; gid_t gid; const char *user_name; const char *group_name; const char *result; }; static struct test T[] = { { "", -1, -1, "", "", NULL}, { ":", -1, -1, "", "", NULL}, { "+0:+0", 0, 0, "", "", NULL}, { ":+1", -1, 1, "", "", NULL}, { "+1", 1, -1, "", "", NULL}, { ":+0", -1, 0, "", "", NULL}, { "+22:+42", 22, 42, "", "", NULL}, /* (uint32_t)-1 should be invalid everywhere */ { "+4294967295:+4294967295", 0, 0, NULL, NULL, "invalid user"}, /* likewise, but with only the group being invalid */ { "+0:+4294967295", 0, 0, NULL, NULL, "invalid group"}, { ":+4294967295", 0, 0, NULL, NULL, "invalid group"}, /* and only the user being invalid */ { "+4294967295:+0", 0, 0, NULL, NULL, "invalid user"}, /* and using 2^32 */ { "+4294967296:+4294967296", 0, 0, NULL, NULL, "invalid user"}, { "+0:+4294967296", 0, 0, NULL, NULL, "invalid group"}, { ":+4294967296", 0, 0, NULL, NULL, "invalid group"}, { "+4294967296:+0", 0, 0, NULL, NULL, "invalid user"}, /* numeric user and no group is invalid */ { "+4294967295:", 0, 0, NULL, NULL, "invalid spec"}, { "+4294967296:", 0, 0, NULL, NULL, "invalid spec"}, { "+1:", 0, 0, NULL, NULL, "invalid spec"}, { "+0:", 0, 0, NULL, NULL, "invalid spec"}, /* "username:" must expand to UID:GID where GID is username's login group */ /* Add an entry like the following to the table, if possible. { "U_NAME:", UID,GID, U_NAME, G_NAME, NULL}, */ { NULL, 0, 0, NULL, NULL, ""}, /* place-holder */ { NULL, 0, 0, NULL, NULL, ""} }; #define STREQ(a, b) (strcmp (a, b) == 0) static char const * maybe_null (char const *s) { return s ? s : "NULL"; } static bool same_diag (char const *s, char const *t) { if (s == NULL && t == NULL) return true; if (s == NULL || t == NULL) return false; return STREQ (s, t); } int main (void) { unsigned int i; int fail = 0; /* Find a UID that has both a user name and login group name, but skip UID 0. */ { uid_t uid; for (uid = 1200; 0 < uid; uid--) { struct group *gr; struct passwd *pw = getpwuid (uid); unsigned int j; size_t len; if (!pw || !pw->pw_name || !(gr = getgrgid (pw->pw_gid)) || !gr->gr_name) continue; j = ARRAY_CARDINALITY (T) - 2; assert (T[j].in == NULL); assert (T[j+1].in == NULL); len = strlen (pw->pw_name); /* Store "username:" in T[j].in. */ { char *t = xmalloc (len + 1 + 1); memcpy (t, pw->pw_name, len); t[len] = ':'; t[len+1] = '\0'; T[j].in = t; } T[j].uid = uid; T[j].gid = gr->gr_gid; T[j].user_name = xstrdup (pw->pw_name); T[j].group_name = xstrdup (gr->gr_name); T[j].result = NULL; break; } } for (i = 0; T[i].in; i++) { uid_t uid = (uid_t) -1; gid_t gid = (gid_t) -1; char *user_name; char *group_name; char const *diag = parse_user_spec (T[i].in, &uid, &gid, &user_name, &group_name); free (user_name); free (group_name); if (!same_diag (diag, T[i].result)) { printf ("%s return value mismatch: got %s, expected %s\n", T[i].in, maybe_null (diag), maybe_null (T[i].result)); fail = 1; continue; } if (diag) continue; if (uid != T[i].uid || gid != T[i].gid) { printf ("%s mismatch (-: expected uid,gid; +:actual)\n" "-%3lu,%3lu\n+%3lu,%3lu\n", T[i].in, (unsigned long int) T[i].uid, (unsigned long int) T[i].gid, (unsigned long int) uid, (unsigned long int) gid); fail = 1; } if (!T[i].result) continue; /* Expected a non-NULL result diagnostic, yet got NULL. */ diag = "NULL"; printf ("%s diagnostic mismatch (-: expected diagnostic; +:actual)\n" "-%s\n+%s\n", T[i].in, T[i].result, diag); fail = 1; } /* Ensure NULL parameters are ignored. */ { uid_t uid = (uid_t) -1; char const *diag = parse_user_spec ("", &uid, NULL, NULL, NULL); if (diag) { printf ("unexpected error: %s\n", diag); fail = 1; } } return fail; } /* Local Variables: indent-tabs-mode: nil End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-usleep.c���������������������������������������������������������0000664�0000000�0000000�00000002112�14110572173�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of usleep() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (usleep, int, (useconds_t)); #include <time.h> #include "macros.h" int main (void) { time_t start = time (NULL); ASSERT (usleep (1000000) == 0); ASSERT (start < time (NULL)); ASSERT (usleep (0) == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utime-h-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002043�14110572173�0020642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <utime.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2017. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <utime.h> #include "signature.h" #if GNULIB_TEST_UTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::utime, int, (const char *, const struct utimbuf *)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utime-h.c��������������������������������������������������������0000664�0000000�0000000�00000001754�14110572173�0020141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <utime.h> substitute. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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>, 2017. */ #include <config.h> #include <utime.h> /* Check that 'struct utimbuf' is defined. */ struct utimbuf b; int main (void) { b.actime = b.modtime = 1493490248; /* 2017-04-29 18:24:08 GMT */ return 0; } ��������������������gnulib-20210822~d383792/tests/test-utime.c����������������������������������������������������������0000664�0000000�0000000�00000010422�14110572173�0017704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of utime. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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 <utime.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-utime.t" #include "test-utimens-common.h" /* If PRINT, warn before skipping tests with status 77. */ static int test_utime (bool print) { struct stat st1; struct stat st2; ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (stat (BASE "file", &st1) == 0); nap (); ASSERT (utime (BASE "file", NULL) == 0); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (0 <= utimecmp (BASE "file", &st2, &st1, UTIMECMP_TRUNCATE_SOURCE)); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); { /* On some NFS systems, the 'now' timestamp of creat or a NULL utimbuf is determined by the server, but the 'now' timestamp determined by time() is determined by the client; since the two machines are not necessarily on the same clock, this is another case where time can appear to go backwards. The rest of this test cares about client time, so manually use time() to set both times. */ struct utimbuf ts; ts.actime = ts.modtime = time (NULL); ASSERT (utime (BASE "file", &ts) == 0); ASSERT (stat (BASE "file", &st1) == 0); nap (); } /* Invalid arguments. */ errno = 0; ASSERT (utime ("no_such", NULL) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (utime ("no_such/", NULL) == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); errno = 0; ASSERT (utime ("", NULL) == -1); ASSERT (errno == ENOENT); { struct utimbuf ts; ts.actime = ts.modtime = Y2K; errno = 0; ASSERT (utime (BASE "file/", &ts) == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); } ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st1.st_atime == st2.st_atime); ASSERT (get_stat_atime_ns (&st1) == get_stat_atime_ns (&st2)); ASSERT (utimecmp (BASE "file", &st1, &st2, 0) == 0); /* Set both times. */ { struct utimbuf ts; ts.actime = ts.modtime = Y2K; ASSERT (utime (BASE "file", &ts) == 0); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st2.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st2)); ASSERT (get_stat_atime_ns (&st2) < BILLION / 2); ASSERT (st2.st_mtime == Y2K); ASSERT (0 <= get_stat_mtime_ns (&st2)); ASSERT (get_stat_mtime_ns (&st2) < BILLION); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); } /* Make sure this dereferences symlinks. */ if (symlink (BASE "file", BASE "link")) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (lstat (BASE "link", &st1) == 0); ASSERT (st1.st_mtime != Y2K); errno = 0; ASSERT (utime (BASE "link/", NULL) == -1); ASSERT (errno == ENOTDIR); { struct utimbuf ts; ts.actime = ts.modtime = Y2K; ASSERT (utime (BASE "link", &ts) == 0); ASSERT (lstat (BASE "link", &st2) == 0); /* Can't compare atimes, since lstat() changes symlink atime on cygwin. */ ASSERT (st1.st_mtime == st2.st_mtime); ASSERT (stat (BASE "link", &st2) == 0); ASSERT (st2.st_mtime == Y2K); ASSERT (get_stat_mtime_ns (&st2) == 0); } /* Cleanup. */ ASSERT (unlink (BASE "link") == 0); ASSERT (unlink (BASE "file") == 0); return 0; } int main (void) { int result1; /* Skip because of no symlink support. */ /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); result1 = test_utime (true); return result1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utimens-common.h�������������������������������������������������0000664�0000000�0000000�00000005414�14110572173�0021545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* This file defines some prerequisites useful to utime-related tests. */ #ifndef GL_TEST_UTIMENS_COMMON # define GL_TEST_UTIMENS_COMMON # include <fcntl.h> # include <errno.h> # include <string.h> # include <sys/stat.h> # include <unistd.h> /* Gnulib modules. */ # include "stat-time.h" # include "timespec.h" # include "utimecmp.h" /* Gnulib test header. */ # include "nap.h" enum { BILLION = 1000 * 1000 * 1000, Y2K = 946684800, /* Jan 1, 2000, in seconds since epoch. */ /* Bogus positive and negative tv_nsec values closest to valid range, but without colliding with UTIME_NOW or UTIME_OMIT. */ UTIME_BOGUS_POS = BILLION + ((UTIME_NOW == BILLION || UTIME_OMIT == BILLION) ? (1 + (UTIME_NOW == BILLION + 1) + (UTIME_OMIT == BILLION + 1)) : 0), UTIME_BOGUS_NEG = -1 - ((UTIME_NOW == -1 || UTIME_OMIT == -1) ? (1 + (UTIME_NOW == -2) + (UTIME_OMIT == -2)) : 0) }; # if defined _WIN32 && !defined __CYGWIN__ /* Skip ctime tests on native Windows, since it is either a copy of mtime or birth time (depending on the file system), rather than a properly tracked change time. See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ # define check_ctime 0 # elif defined __APPLE__ && defined __MACH__ /* On macOS, the ctime is not updated when only the st_atime changes. */ # define check_ctime -1 # else # define check_ctime 1 # endif /* Compare two st_ctime values. Return -1, 0 or 1, respectively when A's st_ctime is smaller than, equal to or greater than B's. */ static int ctime_compare (struct stat const *a, struct stat const *b) { if (a->st_ctime < b->st_ctime) return -1; else if (b->st_ctime < a->st_ctime) return 1; else if (get_stat_ctime_ns (a) < get_stat_ctime_ns (b)) return -1; else if (get_stat_ctime_ns (b) < get_stat_ctime_ns (a)) return 1; else return 0; } #endif /* GL_TEST_UTIMENS_COMMON */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utimens.c��������������������������������������������������������0000664�0000000�0000000�00000004351�14110572173�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of utimens. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "utimens.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-utimens.t" #include "test-futimens.h" #include "test-lutimens.h" #include "test-utimens.h" /* Wrap fdutimens to behave like futimens. */ static int do_futimens (int fd, struct timespec const times[2]) { return fdutimens (fd, NULL, times); } /* Test the use of file descriptors alongside a name. */ static int do_fdutimens (char const *name, struct timespec const times[2]) { int result; int fd = open (name, O_WRONLY); if (fd < 0) fd = open (name, O_RDONLY); errno = 0; result = fdutimens (fd, name, times); if (0 <= fd) { int saved_errno = errno; close (fd); errno = saved_errno; } return result; } int main (void) { int result1; /* Skip because of no symlink support. */ int result2; /* Skip because of no futimens support. */ int result3; /* Skip because of no lutimens support. */ /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); result1 = test_utimens (utimens, true); ASSERT (test_utimens (do_fdutimens, false) == result1); /* Print only one skip message. */ result2 = test_futimens (do_futimens, result1 == 0); result3 = test_lutimens (lutimens, (result1 + result2) == 0); /* We expect 0/0, 0/77, or 77/77, but not 77/0. */ ASSERT (result1 <= result3); return result1 | result2 | result3; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utimens.h��������������������������������������������������������0000664�0000000�0000000�00000014102�14110572173�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 "test-utimens-common.h" /* This file is designed to test both utimens(a,b) and utimensat(AT_FDCWD,a,b,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined. If PRINT, warn before skipping tests with status 77. */ static int test_utimens (int (*func) (char const *, struct timespec const *), bool print) { struct stat st1; struct stat st2; ASSERT (close (creat (BASE "file", 0600)) == 0); /* If utimens truncates to worse resolution than the file system supports, then time can appear to go backwards between now and a follow-up utimens with UTIME_NOW or a NULL timespec. Use UTIMECMP_TRUNCATE_SOURCE to compensate, with st1 as the source. */ ASSERT (stat (BASE "file", &st1) == 0); nap (); ASSERT (func (BASE "file", NULL) == 0); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (0 <= utimecmp (BASE "file", &st2, &st1, UTIMECMP_TRUNCATE_SOURCE)); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); { /* On some NFS systems, the 'now' timestamp of creat or a NULL timespec is determined by the server, but the 'now' timestamp determined by gettime() (as is done when using UTIME_NOW) is determined by the client; since the two machines are not necessarily on the same clock, this is another case where time can appear to go backwards. The rest of this test cares about client time, so manually use gettime() to set both times. */ struct timespec ts[2]; gettime (&ts[0]); ts[1] = ts[0]; ASSERT (func (BASE "file", ts) == 0); ASSERT (stat (BASE "file", &st1) == 0); nap (); } /* Invalid arguments. */ errno = 0; ASSERT (func ("no_such", NULL) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("no_such/", NULL) == -1); ASSERT (errno == ENOENT || errno == ENOTDIR); errno = 0; ASSERT (func ("", NULL) == -1); ASSERT (errno == ENOENT); { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = UTIME_BOGUS_POS; ts[1].tv_sec = Y2K; ts[1].tv_nsec = 0; errno = 0; ASSERT (func (BASE "file", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1].tv_sec = Y2K; ts[1].tv_nsec = UTIME_BOGUS_NEG; errno = 0; ASSERT (func (BASE "file", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; errno = 0; ASSERT (func (BASE "file/", ts) == -1); ASSERT (errno == ENOTDIR || errno == EINVAL); } ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st1.st_atime == st2.st_atime); ASSERT (get_stat_atime_ns (&st1) == get_stat_atime_ns (&st2)); ASSERT (utimecmp (BASE "file", &st1, &st2, 0) == 0); /* Set both times. */ { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = BILLION / 2 - 1; ts[1].tv_sec = Y2K; ts[1].tv_nsec = BILLION - 1; ASSERT (func (BASE "file", ts) == 0); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st2.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st2)); ASSERT (get_stat_atime_ns (&st2) < BILLION / 2); ASSERT (st2.st_mtime == Y2K); ASSERT (0 <= get_stat_mtime_ns (&st2)); ASSERT (get_stat_mtime_ns (&st2) < BILLION); if (check_ctime) ASSERT (ctime_compare (&st1, &st2) < 0); } /* Play with UTIME_OMIT, UTIME_NOW. */ { struct stat st3; struct timespec ts[2]; ts[0].tv_sec = BILLION; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 0; ts[1].tv_nsec = UTIME_NOW; nap (); ASSERT (func (BASE "file", ts) == 0); ASSERT (stat (BASE "file", &st3) == 0); ASSERT (st3.st_atime == Y2K); ASSERT (0 <= get_stat_atime_ns (&st3)); ASSERT (get_stat_atime_ns (&st3) < BILLION / 2); /* See comment above about this utimecmp call. */ ASSERT (0 <= utimecmp (BASE "file", &st3, &st1, UTIMECMP_TRUNCATE_SOURCE)); if (check_ctime) ASSERT (ctime_compare (&st2, &st3) < 0); nap (); ts[0].tv_nsec = 0; ts[1].tv_nsec = UTIME_OMIT; ASSERT (func (BASE "file", ts) == 0); ASSERT (stat (BASE "file", &st2) == 0); ASSERT (st2.st_atime == BILLION); ASSERT (get_stat_atime_ns (&st2) == 0); ASSERT (st3.st_mtime == st2.st_mtime); ASSERT (get_stat_mtime_ns (&st3) == get_stat_mtime_ns (&st2)); if (check_ctime > 0) ASSERT (ctime_compare (&st3, &st2) < 0); } /* Make sure this dereferences symlinks. */ if (symlink (BASE "file", BASE "link")) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (lstat (BASE "link", &st1) == 0); ASSERT (st1.st_mtime != Y2K); errno = 0; ASSERT (func (BASE "link/", NULL) == -1); ASSERT (errno == ENOTDIR); { struct timespec ts[2]; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1] = ts[0]; ASSERT (func (BASE "link", ts) == 0); ASSERT (lstat (BASE "link", &st2) == 0); /* Can't compare atimes, since lstat() changes symlink atime on cygwin. */ ASSERT (st1.st_mtime == st2.st_mtime); ASSERT (stat (BASE "link", &st2) == 0); ASSERT (st2.st_mtime == Y2K); ASSERT (get_stat_mtime_ns (&st2) == 0); } /* Cleanup. */ ASSERT (unlink (BASE "link") == 0); ASSERT (unlink (BASE "file") == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-utimensat.c������������������������������������������������������0000664�0000000�0000000�00000006761�14110572173�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of utimensat. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (utimensat, int, (int, char const *, struct timespec const[2], int)); #include <fcntl.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "stat-time.h" #include "timespec.h" #include "utimecmp.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-utimensat.t" #include "test-lutimens.h" #include "test-utimens.h" static int dfd = AT_FDCWD; /* Wrap utimensat to behave like utimens. */ static int do_utimensat (char const *name, struct timespec const times[2]) { return utimensat (dfd, name, times, 0); } /* Wrap utimensat to behave like lutimens. */ static int do_lutimensat (char const *name, struct timespec const times[2]) { return utimensat (dfd, name, times, AT_SYMLINK_NOFOLLOW); } int main (void) { int result1; /* Skip because of no symlink support. */ int result2; /* Skip because of no lutimens support. */ int fd; /* Clean up any trash from prior testsuite runs. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (utimensat (-1, "foo", NULL, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (utimensat (99, "foo", NULL, 0) == -1); ASSERT (errno == EBADF); } /* Basic tests. */ result1 = test_utimens (do_utimensat, true); result2 = test_lutimens (do_lutimensat, result1 == 0); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_utimens (do_utimensat, false) == result1); ASSERT (test_lutimens (do_lutimensat, false) == result2); /* We expect 0/0, 0/77, or 77/77, but not 77/0. */ ASSERT (result1 <= result2); /* Directory-relative tests. */ ASSERT (mkdir (BASE "dir", 0700) == 0); ASSERT (chdir (BASE "dir") == 0); fd = creat ("file", 0600); ASSERT (0 <= fd); errno = 0; ASSERT (utimensat (fd, ".", NULL, 0) == -1); ASSERT (errno == ENOTDIR); { struct timespec ts[2]; struct stat st; ts[0].tv_sec = Y2K; ts[0].tv_nsec = 0; ts[1].tv_sec = Y2K; ts[1].tv_nsec = 0; ASSERT (utimensat (dfd, BASE "dir/file", ts, AT_SYMLINK_NOFOLLOW) == 0); ASSERT (stat ("file", &st) == 0); ASSERT (st.st_atime == Y2K); ASSERT (get_stat_atime_ns (&st) == 0); ASSERT (st.st_mtime == Y2K); ASSERT (get_stat_mtime_ns (&st) == 0); } ASSERT (close (fd) == 0); ASSERT (close (dfd) == 0); errno = 0; ASSERT (utimensat (dfd, ".", NULL, 0) == -1); ASSERT (errno == EBADF); /* Cleanup. */ ASSERT (chdir ("..") == 0); ASSERT (unlink (BASE "dir/file") == 0); ASSERT (rmdir (BASE "dir") == 0); return result1 | result2; } ���������������gnulib-20210822~d383792/tests/test-vasnprintf-posix.c�����������������������������������������������0000664�0000000�0000000�00000361206�14110572173�0022124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "vasnprintf.h" #include <errno.h> #include <float.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = minus_zerod; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } #else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } #endif static int strmatch (const char *pattern, const char *string) { if (strlen (pattern) != strlen (string)) return 0; for (; *pattern != '\0'; pattern++, string++) if (*pattern != '*' && *string != *pattern) return 0; return 1; } /* Test whether string[start_index..end_index-1] is a valid textual representation of NaN. */ static int strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { char buf[8]; int size; /* Test return value convention. */ for (size = 0; size <= 8; size++) { size_t length = size; char *result = my_asnprintf (NULL, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } /* Test support of size specifiers as in C99. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345671 33") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345672 33") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345673 33") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", (long double) 1.5, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.5 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", 3.1416015625, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%A %d", -3.1416015625, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%a %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding near the decimal point. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.0a %d", 1.5, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1p+0 33") == 0 || strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 0. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.0a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 1. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.1a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 2. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 3. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.3a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.3a %d", 1.49999, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.1a %d", 1.999, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10a %d", 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); ASSERT (length == strlen (result)); free (result); } { /* Small precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.10a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Large precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.50a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10a %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+a %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% a %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#a %d", 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, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#a %d", 1.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010a %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050a %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", 3.1416015625L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LA %d", -3.1416015625L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } /* asnprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } #endif { /* Rounding near the decimal point. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.0La %d", 1.5L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 0. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.0La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 1. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.1La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 2. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding with precision 3. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.3La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.3La %d", 1.49999L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.1La %d", 1.999L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10La %d", 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); ASSERT (length == strlen (result)); free (result); } { /* Small precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.10La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Large precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.50La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10La %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+La %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% La %d", 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); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#La %d", 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, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#La %d", 1.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010La %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050La %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %f format directive. */ { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "0.000000" }, { 1.234321234321234e-36, "0.000000" }, { 1.234321234321234e-35, "0.000000" }, { 1.234321234321234e-34, "0.000000" }, { 1.234321234321234e-33, "0.000000" }, { 1.234321234321234e-32, "0.000000" }, { 1.234321234321234e-31, "0.000000" }, { 1.234321234321234e-30, "0.000000" }, { 1.234321234321234e-29, "0.000000" }, { 1.234321234321234e-28, "0.000000" }, { 1.234321234321234e-27, "0.000000" }, { 1.234321234321234e-26, "0.000000" }, { 1.234321234321234e-25, "0.000000" }, { 1.234321234321234e-24, "0.000000" }, { 1.234321234321234e-23, "0.000000" }, { 1.234321234321234e-22, "0.000000" }, { 1.234321234321234e-21, "0.000000" }, { 1.234321234321234e-20, "0.000000" }, { 1.234321234321234e-19, "0.000000" }, { 1.234321234321234e-18, "0.000000" }, { 1.234321234321234e-17, "0.000000" }, { 1.234321234321234e-16, "0.000000" }, { 1.234321234321234e-15, "0.000000" }, { 1.234321234321234e-14, "0.000000" }, { 1.234321234321234e-13, "0.000000" }, { 1.234321234321234e-12, "0.000000" }, { 1.234321234321234e-11, "0.000000" }, { 1.234321234321234e-10, "0.000000" }, { 1.234321234321234e-9, "0.000000" }, { 1.234321234321234e-8, "0.000000" }, { 1.234321234321234e-7, "0.000000" }, { 1.234321234321234e-6, "0.000001" }, { 1.234321234321234e-5, "0.000012" }, { 1.234321234321234e-4, "0.000123" }, { 1.234321234321234e-3, "0.001234" }, { 1.234321234321234e-2, "0.012343" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.234321" }, { 1.234321234321234e1, "12.343212" }, { 1.234321234321234e2, "123.432123" }, { 1.234321234321234e3, "1234.321234" }, { 1.234321234321234e4, "12343.212343" }, { 1.234321234321234e5, "123432.123432" }, { 1.234321234321234e6, "1234321.234321" }, { 1.234321234321234e7, "12343212.343212" }, { 1.234321234321234e8, "123432123.432123" }, { 1.234321234321234e9, "1234321234.321234" }, { 1.234321234321234e10, "12343212343.2123**" }, { 1.234321234321234e11, "123432123432.123***" }, { 1.234321234321234e12, "1234321234321.23****" }, { 1.234321234321234e13, "12343212343212.3*****" }, { 1.234321234321234e14, "123432123432123.******" }, { 1.234321234321234e15, "1234321234321234.000000" }, { 1.234321234321234e16, "123432123432123**.000000" }, { 1.234321234321234e17, "123432123432123***.000000" }, { 1.234321234321234e18, "123432123432123****.000000" }, { 1.234321234321234e19, "123432123432123*****.000000" }, { 1.234321234321234e20, "123432123432123******.000000" }, { 1.234321234321234e21, "123432123432123*******.000000" }, { 1.234321234321234e22, "123432123432123********.000000" }, { 1.234321234321234e23, "123432123432123*********.000000" }, { 1.234321234321234e24, "123432123432123**********.000000" }, { 1.234321234321234e25, "123432123432123***********.000000" }, { 1.234321234321234e26, "123432123432123************.000000" }, { 1.234321234321234e27, "123432123432123*************.000000" }, { 1.234321234321234e28, "123432123432123**************.000000" }, { 1.234321234321234e29, "123432123432123***************.000000" }, { 1.234321234321234e30, "123432123432123****************.000000" }, { 1.234321234321234e31, "123432123432123*****************.000000" }, { 1.234321234321234e32, "123432123432123******************.000000" }, { 1.234321234321234e33, "123432123432123*******************.000000" }, { 1.234321234321234e34, "123432123432123********************.000000" }, { 1.234321234321234e35, "123432123432123*********************.000000" }, { 1.234321234321234e36, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%f", data[k].value); ASSERT (result != NULL); ASSERT (strmatch (data[k].string, result)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%f %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015f %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015f %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050f %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.f %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2f %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2f %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "0.000000" }, { 1.234321234321234e-36L, "0.000000" }, { 1.234321234321234e-35L, "0.000000" }, { 1.234321234321234e-34L, "0.000000" }, { 1.234321234321234e-33L, "0.000000" }, { 1.234321234321234e-32L, "0.000000" }, { 1.234321234321234e-31L, "0.000000" }, { 1.234321234321234e-30L, "0.000000" }, { 1.234321234321234e-29L, "0.000000" }, { 1.234321234321234e-28L, "0.000000" }, { 1.234321234321234e-27L, "0.000000" }, { 1.234321234321234e-26L, "0.000000" }, { 1.234321234321234e-25L, "0.000000" }, { 1.234321234321234e-24L, "0.000000" }, { 1.234321234321234e-23L, "0.000000" }, { 1.234321234321234e-22L, "0.000000" }, { 1.234321234321234e-21L, "0.000000" }, { 1.234321234321234e-20L, "0.000000" }, { 1.234321234321234e-19L, "0.000000" }, { 1.234321234321234e-18L, "0.000000" }, { 1.234321234321234e-17L, "0.000000" }, { 1.234321234321234e-16L, "0.000000" }, { 1.234321234321234e-15L, "0.000000" }, { 1.234321234321234e-14L, "0.000000" }, { 1.234321234321234e-13L, "0.000000" }, { 1.234321234321234e-12L, "0.000000" }, { 1.234321234321234e-11L, "0.000000" }, { 1.234321234321234e-10L, "0.000000" }, { 1.234321234321234e-9L, "0.000000" }, { 1.234321234321234e-8L, "0.000000" }, { 1.234321234321234e-7L, "0.000000" }, { 1.234321234321234e-6L, "0.000001" }, { 1.234321234321234e-5L, "0.000012" }, { 1.234321234321234e-4L, "0.000123" }, { 1.234321234321234e-3L, "0.001234" }, { 1.234321234321234e-2L, "0.012343" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.234321" }, { 1.234321234321234e1L, "12.343212" }, { 1.234321234321234e2L, "123.432123" }, { 1.234321234321234e3L, "1234.321234" }, { 1.234321234321234e4L, "12343.212343" }, { 1.234321234321234e5L, "123432.123432" }, { 1.234321234321234e6L, "1234321.234321" }, { 1.234321234321234e7L, "12343212.343212" }, { 1.234321234321234e8L, "123432123.432123" }, { 1.234321234321234e9L, "1234321234.321234" }, { 1.234321234321234e10L, "12343212343.2123**" }, { 1.234321234321234e11L, "123432123432.123***" }, { 1.234321234321234e12L, "1234321234321.23****" }, { 1.234321234321234e13L, "12343212343212.3*****" }, { 1.234321234321234e14L, "123432123432123.******" }, { 1.234321234321234e15L, "1234321234321234.000000" }, { 1.234321234321234e16L, "123432123432123**.000000" }, { 1.234321234321234e17L, "123432123432123***.000000" }, { 1.234321234321234e18L, "123432123432123****.000000" }, { 1.234321234321234e19L, "123432123432123*****.000000" }, { 1.234321234321234e20L, "123432123432123******.000000" }, { 1.234321234321234e21L, "123432123432123*******.000000" }, { 1.234321234321234e22L, "123432123432123********.000000" }, { 1.234321234321234e23L, "123432123432123*********.000000" }, { 1.234321234321234e24L, "123432123432123**********.000000" }, { 1.234321234321234e25L, "123432123432123***********.000000" }, { 1.234321234321234e26L, "123432123432123************.000000" }, { 1.234321234321234e27L, "123432123432123*************.000000" }, { 1.234321234321234e28L, "123432123432123**************.000000" }, { 1.234321234321234e29L, "123432123432123***************.000000" }, { 1.234321234321234e30L, "123432123432123****************.000000" }, { 1.234321234321234e31L, "123432123432123*****************.000000" }, { 1.234321234321234e32L, "123432123432123******************.000000" }, { 1.234321234321234e33L, "123432123432123*******************.000000" }, { 1.234321234321234e34L, "123432123432123********************.000000" }, { 1.234321234321234e35L, "123432123432123*********************.000000" }, { 1.234321234321234e36L, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%Lf", data[k].value); ASSERT (result != NULL); ASSERT (strmatch (data[k].string, result)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } /* asnprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } #endif { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015Lf %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015Lf %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050Lf %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.Lf %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2Lf %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2Lf %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%F %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015F %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015F %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.F %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2F %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2F %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%LF %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015LF %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015LF %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.LF %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2LF %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.2LF %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.234321e-37" }, { 1.234321234321234e-36, "1.234321e-36" }, { 1.234321234321234e-35, "1.234321e-35" }, { 1.234321234321234e-34, "1.234321e-34" }, { 1.234321234321234e-33, "1.234321e-33" }, { 1.234321234321234e-32, "1.234321e-32" }, { 1.234321234321234e-31, "1.234321e-31" }, { 1.234321234321234e-30, "1.234321e-30" }, { 1.234321234321234e-29, "1.234321e-29" }, { 1.234321234321234e-28, "1.234321e-28" }, { 1.234321234321234e-27, "1.234321e-27" }, { 1.234321234321234e-26, "1.234321e-26" }, { 1.234321234321234e-25, "1.234321e-25" }, { 1.234321234321234e-24, "1.234321e-24" }, { 1.234321234321234e-23, "1.234321e-23" }, { 1.234321234321234e-22, "1.234321e-22" }, { 1.234321234321234e-21, "1.234321e-21" }, { 1.234321234321234e-20, "1.234321e-20" }, { 1.234321234321234e-19, "1.234321e-19" }, { 1.234321234321234e-18, "1.234321e-18" }, { 1.234321234321234e-17, "1.234321e-17" }, { 1.234321234321234e-16, "1.234321e-16" }, { 1.234321234321234e-15, "1.234321e-15" }, { 1.234321234321234e-14, "1.234321e-14" }, { 1.234321234321234e-13, "1.234321e-13" }, { 1.234321234321234e-12, "1.234321e-12" }, { 1.234321234321234e-11, "1.234321e-11" }, { 1.234321234321234e-10, "1.234321e-10" }, { 1.234321234321234e-9, "1.234321e-09" }, { 1.234321234321234e-8, "1.234321e-08" }, { 1.234321234321234e-7, "1.234321e-07" }, { 1.234321234321234e-6, "1.234321e-06" }, { 1.234321234321234e-5, "1.234321e-05" }, { 1.234321234321234e-4, "1.234321e-04" }, { 1.234321234321234e-3, "1.234321e-03" }, { 1.234321234321234e-2, "1.234321e-02" }, { 1.234321234321234e-1, "1.234321e-01" }, { 1.234321234321234, "1.234321e+00" }, { 1.234321234321234e1, "1.234321e+01" }, { 1.234321234321234e2, "1.234321e+02" }, { 1.234321234321234e3, "1.234321e+03" }, { 1.234321234321234e4, "1.234321e+04" }, { 1.234321234321234e5, "1.234321e+05" }, { 1.234321234321234e6, "1.234321e+06" }, { 1.234321234321234e7, "1.234321e+07" }, { 1.234321234321234e8, "1.234321e+08" }, { 1.234321234321234e9, "1.234321e+09" }, { 1.234321234321234e10, "1.234321e+10" }, { 1.234321234321234e11, "1.234321e+11" }, { 1.234321234321234e12, "1.234321e+12" }, { 1.234321234321234e13, "1.234321e+13" }, { 1.234321234321234e14, "1.234321e+14" }, { 1.234321234321234e15, "1.234321e+15" }, { 1.234321234321234e16, "1.234321e+16" }, { 1.234321234321234e17, "1.234321e+17" }, { 1.234321234321234e18, "1.234321e+18" }, { 1.234321234321234e19, "1.234321e+19" }, { 1.234321234321234e20, "1.234321e+20" }, { 1.234321234321234e21, "1.234321e+21" }, { 1.234321234321234e22, "1.234321e+22" }, { 1.234321234321234e23, "1.234321e+23" }, { 1.234321234321234e24, "1.234321e+24" }, { 1.234321234321234e25, "1.234321e+25" }, { 1.234321234321234e26, "1.234321e+26" }, { 1.234321234321234e27, "1.234321e+27" }, { 1.234321234321234e28, "1.234321e+28" }, { 1.234321234321234e29, "1.234321e+29" }, { 1.234321234321234e30, "1.234321e+30" }, { 1.234321234321234e31, "1.234321e+31" }, { 1.234321234321234e32, "1.234321e+32" }, { 1.234321234321234e33, "1.234321e+33" }, { 1.234321234321234e34, "1.234321e+34" }, { 1.234321234321234e35, "1.234321e+35" }, { 1.234321234321234e36, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%e", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%e %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%15e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-15e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.e %d", 9.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015e %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015e %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050e %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.e %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.4e %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.4e %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.234321e-37" }, { 1.234321234321234e-36L, "1.234321e-36" }, { 1.234321234321234e-35L, "1.234321e-35" }, { 1.234321234321234e-34L, "1.234321e-34" }, { 1.234321234321234e-33L, "1.234321e-33" }, { 1.234321234321234e-32L, "1.234321e-32" }, { 1.234321234321234e-31L, "1.234321e-31" }, { 1.234321234321234e-30L, "1.234321e-30" }, { 1.234321234321234e-29L, "1.234321e-29" }, { 1.234321234321234e-28L, "1.234321e-28" }, { 1.234321234321234e-27L, "1.234321e-27" }, { 1.234321234321234e-26L, "1.234321e-26" }, { 1.234321234321234e-25L, "1.234321e-25" }, { 1.234321234321234e-24L, "1.234321e-24" }, { 1.234321234321234e-23L, "1.234321e-23" }, { 1.234321234321234e-22L, "1.234321e-22" }, { 1.234321234321234e-21L, "1.234321e-21" }, { 1.234321234321234e-20L, "1.234321e-20" }, { 1.234321234321234e-19L, "1.234321e-19" }, { 1.234321234321234e-18L, "1.234321e-18" }, { 1.234321234321234e-17L, "1.234321e-17" }, { 1.234321234321234e-16L, "1.234321e-16" }, { 1.234321234321234e-15L, "1.234321e-15" }, { 1.234321234321234e-14L, "1.234321e-14" }, { 1.234321234321234e-13L, "1.234321e-13" }, { 1.234321234321234e-12L, "1.234321e-12" }, { 1.234321234321234e-11L, "1.234321e-11" }, { 1.234321234321234e-10L, "1.234321e-10" }, { 1.234321234321234e-9L, "1.234321e-09" }, { 1.234321234321234e-8L, "1.234321e-08" }, { 1.234321234321234e-7L, "1.234321e-07" }, { 1.234321234321234e-6L, "1.234321e-06" }, { 1.234321234321234e-5L, "1.234321e-05" }, { 1.234321234321234e-4L, "1.234321e-04" }, { 1.234321234321234e-3L, "1.234321e-03" }, { 1.234321234321234e-2L, "1.234321e-02" }, { 1.234321234321234e-1L, "1.234321e-01" }, { 1.234321234321234L, "1.234321e+00" }, { 1.234321234321234e1L, "1.234321e+01" }, { 1.234321234321234e2L, "1.234321e+02" }, { 1.234321234321234e3L, "1.234321e+03" }, { 1.234321234321234e4L, "1.234321e+04" }, { 1.234321234321234e5L, "1.234321e+05" }, { 1.234321234321234e6L, "1.234321e+06" }, { 1.234321234321234e7L, "1.234321e+07" }, { 1.234321234321234e8L, "1.234321e+08" }, { 1.234321234321234e9L, "1.234321e+09" }, { 1.234321234321234e10L, "1.234321e+10" }, { 1.234321234321234e11L, "1.234321e+11" }, { 1.234321234321234e12L, "1.234321e+12" }, { 1.234321234321234e13L, "1.234321e+13" }, { 1.234321234321234e14L, "1.234321e+14" }, { 1.234321234321234e15L, "1.234321e+15" }, { 1.234321234321234e16L, "1.234321e+16" }, { 1.234321234321234e17L, "1.234321e+17" }, { 1.234321234321234e18L, "1.234321e+18" }, { 1.234321234321234e19L, "1.234321e+19" }, { 1.234321234321234e20L, "1.234321e+20" }, { 1.234321234321234e21L, "1.234321e+21" }, { 1.234321234321234e22L, "1.234321e+22" }, { 1.234321234321234e23L, "1.234321e+23" }, { 1.234321234321234e24L, "1.234321e+24" }, { 1.234321234321234e25L, "1.234321e+25" }, { 1.234321234321234e26L, "1.234321e+26" }, { 1.234321234321234e27L, "1.234321e+27" }, { 1.234321234321234e28L, "1.234321e+28" }, { 1.234321234321234e29L, "1.234321e+29" }, { 1.234321234321234e30L, "1.234321e+30" }, { 1.234321234321234e31L, "1.234321e+31" }, { 1.234321234321234e32L, "1.234321e+32" }, { 1.234321234321234e33L, "1.234321e+33" }, { 1.234321234321234e34L, "1.234321e+34" }, { 1.234321234321234e35L, "1.234321e+35" }, { 1.234321234321234e36L, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%Le", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } /* asnprintf should print something even for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } #endif { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%15Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-15Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.Le %d", 9.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015Le %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015Le %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050Le %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.Le %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.4Le %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.4Le %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.23432e-37" }, { 1.234321234321234e-36, "1.23432e-36" }, { 1.234321234321234e-35, "1.23432e-35" }, { 1.234321234321234e-34, "1.23432e-34" }, { 1.234321234321234e-33, "1.23432e-33" }, { 1.234321234321234e-32, "1.23432e-32" }, { 1.234321234321234e-31, "1.23432e-31" }, { 1.234321234321234e-30, "1.23432e-30" }, { 1.234321234321234e-29, "1.23432e-29" }, { 1.234321234321234e-28, "1.23432e-28" }, { 1.234321234321234e-27, "1.23432e-27" }, { 1.234321234321234e-26, "1.23432e-26" }, { 1.234321234321234e-25, "1.23432e-25" }, { 1.234321234321234e-24, "1.23432e-24" }, { 1.234321234321234e-23, "1.23432e-23" }, { 1.234321234321234e-22, "1.23432e-22" }, { 1.234321234321234e-21, "1.23432e-21" }, { 1.234321234321234e-20, "1.23432e-20" }, { 1.234321234321234e-19, "1.23432e-19" }, { 1.234321234321234e-18, "1.23432e-18" }, { 1.234321234321234e-17, "1.23432e-17" }, { 1.234321234321234e-16, "1.23432e-16" }, { 1.234321234321234e-15, "1.23432e-15" }, { 1.234321234321234e-14, "1.23432e-14" }, { 1.234321234321234e-13, "1.23432e-13" }, { 1.234321234321234e-12, "1.23432e-12" }, { 1.234321234321234e-11, "1.23432e-11" }, { 1.234321234321234e-10, "1.23432e-10" }, { 1.234321234321234e-9, "1.23432e-09" }, { 1.234321234321234e-8, "1.23432e-08" }, { 1.234321234321234e-7, "1.23432e-07" }, { 1.234321234321234e-6, "1.23432e-06" }, { 1.234321234321234e-5, "1.23432e-05" }, { 1.234321234321234e-4, "0.000123432" }, { 1.234321234321234e-3, "0.00123432" }, { 1.234321234321234e-2, "0.0123432" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.23432" }, { 1.234321234321234e1, "12.3432" }, { 1.234321234321234e2, "123.432" }, { 1.234321234321234e3, "1234.32" }, { 1.234321234321234e4, "12343.2" }, { 1.234321234321234e5, "123432" }, { 1.234321234321234e6, "1.23432e+06" }, { 1.234321234321234e7, "1.23432e+07" }, { 1.234321234321234e8, "1.23432e+08" }, { 1.234321234321234e9, "1.23432e+09" }, { 1.234321234321234e10, "1.23432e+10" }, { 1.234321234321234e11, "1.23432e+11" }, { 1.234321234321234e12, "1.23432e+12" }, { 1.234321234321234e13, "1.23432e+13" }, { 1.234321234321234e14, "1.23432e+14" }, { 1.234321234321234e15, "1.23432e+15" }, { 1.234321234321234e16, "1.23432e+16" }, { 1.234321234321234e17, "1.23432e+17" }, { 1.234321234321234e18, "1.23432e+18" }, { 1.234321234321234e19, "1.23432e+19" }, { 1.234321234321234e20, "1.23432e+20" }, { 1.234321234321234e21, "1.23432e+21" }, { 1.234321234321234e22, "1.23432e+22" }, { 1.234321234321234e23, "1.23432e+23" }, { 1.234321234321234e24, "1.23432e+24" }, { 1.234321234321234e25, "1.23432e+25" }, { 1.234321234321234e26, "1.23432e+26" }, { 1.234321234321234e27, "1.23432e+27" }, { 1.234321234321234e28, "1.23432e+28" }, { 1.234321234321234e29, "1.23432e+29" }, { 1.234321234321234e30, "1.23432e+30" }, { 1.234321234321234e31, "1.23432e+31" }, { 1.234321234321234e32, "1.23432e+32" }, { 1.234321234321234e33, "1.23432e+33" }, { 1.234321234321234e34, "1.23432e+34" }, { 1.234321234321234e35, "1.23432e+35" }, { 1.234321234321234e36, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%g", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%g %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.g %d", 9.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010g %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015g %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050g %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.g %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.5g %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.5g %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* A larger positive number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.23432e-37" }, { 1.234321234321234e-36L, "1.23432e-36" }, { 1.234321234321234e-35L, "1.23432e-35" }, { 1.234321234321234e-34L, "1.23432e-34" }, { 1.234321234321234e-33L, "1.23432e-33" }, { 1.234321234321234e-32L, "1.23432e-32" }, { 1.234321234321234e-31L, "1.23432e-31" }, { 1.234321234321234e-30L, "1.23432e-30" }, { 1.234321234321234e-29L, "1.23432e-29" }, { 1.234321234321234e-28L, "1.23432e-28" }, { 1.234321234321234e-27L, "1.23432e-27" }, { 1.234321234321234e-26L, "1.23432e-26" }, { 1.234321234321234e-25L, "1.23432e-25" }, { 1.234321234321234e-24L, "1.23432e-24" }, { 1.234321234321234e-23L, "1.23432e-23" }, { 1.234321234321234e-22L, "1.23432e-22" }, { 1.234321234321234e-21L, "1.23432e-21" }, { 1.234321234321234e-20L, "1.23432e-20" }, { 1.234321234321234e-19L, "1.23432e-19" }, { 1.234321234321234e-18L, "1.23432e-18" }, { 1.234321234321234e-17L, "1.23432e-17" }, { 1.234321234321234e-16L, "1.23432e-16" }, { 1.234321234321234e-15L, "1.23432e-15" }, { 1.234321234321234e-14L, "1.23432e-14" }, { 1.234321234321234e-13L, "1.23432e-13" }, { 1.234321234321234e-12L, "1.23432e-12" }, { 1.234321234321234e-11L, "1.23432e-11" }, { 1.234321234321234e-10L, "1.23432e-10" }, { 1.234321234321234e-9L, "1.23432e-09" }, { 1.234321234321234e-8L, "1.23432e-08" }, { 1.234321234321234e-7L, "1.23432e-07" }, { 1.234321234321234e-6L, "1.23432e-06" }, { 1.234321234321234e-5L, "1.23432e-05" }, { 1.234321234321234e-4L, "0.000123432" }, { 1.234321234321234e-3L, "0.00123432" }, { 1.234321234321234e-2L, "0.0123432" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.23432" }, { 1.234321234321234e1L, "12.3432" }, { 1.234321234321234e2L, "123.432" }, { 1.234321234321234e3L, "1234.32" }, { 1.234321234321234e4L, "12343.2" }, { 1.234321234321234e5L, "123432" }, { 1.234321234321234e6L, "1.23432e+06" }, { 1.234321234321234e7L, "1.23432e+07" }, { 1.234321234321234e8L, "1.23432e+08" }, { 1.234321234321234e9L, "1.23432e+09" }, { 1.234321234321234e10L, "1.23432e+10" }, { 1.234321234321234e11L, "1.23432e+11" }, { 1.234321234321234e12L, "1.23432e+12" }, { 1.234321234321234e13L, "1.23432e+13" }, { 1.234321234321234e14L, "1.23432e+14" }, { 1.234321234321234e15L, "1.23432e+15" }, { 1.234321234321234e16L, "1.23432e+16" }, { 1.234321234321234e17L, "1.23432e+17" }, { 1.234321234321234e18L, "1.23432e+18" }, { 1.234321234321234e19L, "1.23432e+19" }, { 1.234321234321234e20L, "1.23432e+20" }, { 1.234321234321234e21L, "1.23432e+21" }, { 1.234321234321234e22L, "1.23432e+22" }, { 1.234321234321234e23L, "1.23432e+23" }, { 1.234321234321234e24L, "1.23432e+24" }, { 1.234321234321234e25L, "1.23432e+25" }, { 1.234321234321234e26L, "1.23432e+26" }, { 1.234321234321234e27L, "1.23432e+27" }, { 1.234321234321234e28L, "1.23432e+28" }, { 1.234321234321234e29L, "1.23432e+29" }, { 1.234321234321234e30L, "1.23432e+30" }, { 1.234321234321234e31L, "1.23432e+31" }, { 1.234321234321234e32L, "1.23432e+32" }, { 1.234321234321234e33L, "1.23432e+33" }, { 1.234321234321234e34L, "1.23432e+34" }, { 1.234321234321234e35L, "1.23432e+35" }, { 1.234321234321234e36L, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { size_t length; char *result = my_asnprintf (NULL, &length, "%Lg", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (length == strlen (result)); free (result); } } { /* A negative number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative zero. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Positive infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Negative infinity. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } /* asnprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; size_t length; char *result = my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (length == strlen (result)); ASSERT (3 < length && strcmp (result + length - 3, " 33") == 0); free (result); } #endif { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%+Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_SPACE. */ size_t length; char *result = my_asnprintf (NULL, &length, "% Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ALT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%#.Lg %d", 9.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010Lg %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ size_t length; char *result = my_asnprintf (NULL, &length, "%015Lg %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ size_t length; char *result = my_asnprintf (NULL, &length, "%050Lg %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.Lg %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with no rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.5Lg %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Precision with rounding. */ size_t length; char *result = my_asnprintf (NULL, &length, "%.5Lg %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %n format directive. */ { int count = -1; size_t length; char *result = my_asnprintf (NULL, &length, "%d %n", 123, &count, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "123 ") == 0); ASSERT (length == strlen (result)); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%2$d %1$d", 33, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "55 33") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the grouping flag. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[strlen (result) - 1] == '9'); ASSERT (length == strlen (result)); free (result); } /* Test the support of the left-adjust flag. */ { size_t length; char *result = my_asnprintf (NULL, &length, "a%*sc", -3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "a%-*sc", 3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "a%-*sc", -3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of large precision. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000d %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.*d %d", 4000, 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000d %d", -1234567, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '-'); for (i = 0; i < 4000 - 7; i++) ASSERT (result[1 + i] == '0'); ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000u %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000o %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000x %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 6; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%#.4000x %d", 1234567, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '0'); ASSERT (result[1] == 'x'); for (i = 0; i < 4000 - 6; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.4000f %d", 1.0, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 4000; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000, " 99") == 0); ASSERT (length == strlen (result)); free (result); } { size_t length; char *result = my_asnprintf (NULL, &length, "%.511f %d", 1.0, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 511; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 511, " 99") == 0); ASSERT (length == strlen (result)); free (result); } { char input[5000]; size_t length; char *result; size_t i; for (i = 0; i < sizeof (input) - 1; i++) input[i] = 'a' + ((1000000 / (i + 1)) % 26); input[i] = '\0'; result = my_asnprintf (NULL, &length, "%.4000s %d", input, 99); ASSERT (result != NULL); ASSERT (memcmp (result, input, 4000) == 0); ASSERT (strcmp (result + 4000, " 99") == 0); ASSERT (length == strlen (result)); free (result); } /* Test the support of the %s format directive. */ /* To verify that these tests succeed, it is necessary to run them under a tool that checks against invalid memory accesses, such as ElectricFence or "valgrind --tool=memcheck". */ { size_t i; for (i = 1; i <= 8; i++) { char *block; size_t length; char *result; block = (char *) malloc (i); memcpy (block, "abcdefgh", i); result = my_asnprintf (NULL, &length, "%.*s", (int) i, block); ASSERT (result != NULL); ASSERT (memcmp (result, block, i) == 0); ASSERT (result[i] == '\0'); ASSERT (length == strlen (result)); free (result); free (block); } } #if HAVE_WCHAR_T { size_t i; for (i = 1; i <= 8; i++) { wchar_t *block; size_t j; size_t length; char *result; block = (wchar_t *) malloc (i * sizeof (wchar_t)); for (j = 0; j < i; j++) block[j] = "abcdefgh"[j]; result = my_asnprintf (NULL, &length, "%.*ls", (int) i, block); ASSERT (result != NULL); ASSERT (memcmp (result, "abcdefgh", i) == 0); ASSERT (result[i] == '\0'); ASSERT (length == strlen (result)); free (result); free (block); } } #endif #if HAVE_WCHAR_T /* Test that converting an invalid wchar_t[] to char[] fails with EILSEQ. */ { static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 }; size_t length; char *result = my_asnprintf (NULL, &length, "%ls %d", input, 99); if (result == NULL) ASSERT (errno == EILSEQ); else free (result); } { static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 }; size_t length; char *result = my_asnprintf (NULL, &length, "%3ls %d", input, 99); if (result == NULL) ASSERT (errno == EILSEQ); else free (result); } { static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 }; size_t length; char *result = my_asnprintf (NULL, &length, "%.1ls %d", input, 99); if (result == NULL) ASSERT (errno == EILSEQ); else free (result); } { static const wchar_t input[] = { (wchar_t) 1702057263, 114, 0 }; size_t length; char *result = my_asnprintf (NULL, &length, "%3.1ls %d", input, 99); if (result == NULL) ASSERT (errno == EILSEQ); else free (result); } #endif #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) && !defined __UCLIBC__ /* Test that the 'I' flag is supported. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%Id %d", 1234567, 99); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567 99") == 0); ASSERT (length == strlen (result)); free (result); } #endif } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } static void test_asnprintf () { test_function (asnprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); test_asnprintf (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vasnprintf-posix2.c����������������������������������������������0000664�0000000�0000000�00000003714�14110572173�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "vasnprintf.h" #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test that a locale dependent decimal point is used. */ { size_t length; char *result = asnprintf (NULL, &length, "%.1a", 1.0); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1,0p+0") == 0 || strcmp (result, "0x2,0p-1") == 0 || strcmp (result, "0x4,0p-2") == 0 || strcmp (result, "0x8,0p-3") == 0); ASSERT (length == strlen (result)); free (result); } /* Test that a locale dependent decimal point is used. */ { size_t length; char *result = asnprintf (NULL, &length, "%.1La", 1.0L); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1,0p+0") == 0 || strcmp (result, "0x2,0p-1") == 0 || strcmp (result, "0x4,0p-2") == 0 || strcmp (result, "0x8,0p-3") == 0); ASSERT (length == strlen (result)); free (result); } return 0; } ����������������������������������������������������gnulib-20210822~d383792/tests/test-vasnprintf-posix2.sh���������������������������������������������0000775�0000000�0000000�00000000774�14110572173�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a french locale is installed. : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR != none; then testlocale=$LOCALE_FR else if test $LOCALE_FR_UTF8 != none; then testlocale=$LOCALE_FR_UTF8 else if test -f /usr/bin/localedef; then echo "Skipping test: no french locale is installed" else echo "Skipping test: no french locale is supported" fi exit 77 fi fi LC_ALL=$testlocale \ ${CHECKER} ./test-vasnprintf-posix2${EXEEXT} ����gnulib-20210822~d383792/tests/test-vasnprintf-posix3.c����������������������������������������������0000664�0000000�0000000�00000005013�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "vasnprintf.h" #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* glibc >= 2.2 supports the 'I' flag, and in glibc >= 2.2.3 the fa_IR locale defines the 'outdigits' to be U+06F0..U+06F9. So we test for glibc >= 2.3. */ #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__ static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { /* Test that the 'I' flag is supported. */ { size_t length; char *result = my_asnprintf (NULL, &length, "%Id %d", 1234567, 99); static const char expected[] = /* "۱۲۳۴۵۶۷ 99" */ "\xDB\xB1\xDB\xB2\xDB\xB3\xDB\xB4\xDB\xB5\xDB\xB6\xDB\xB7 99"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); ASSERT (length == strlen (result)); free (result); } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } static void test_asnprintf () { test_function (asnprintf); } #endif int main (int argc, char *argv[]) { #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__ /* Select a locale with Arabic 'outdigits'. */ if (setlocale (LC_ALL, "fa_IR.UTF-8") == NULL) { fprintf (stderr, "Skipping test: no Iranian locale is installed\n"); return 77; } test_vasnprintf (); test_asnprintf (); return 0; #else fprintf (stderr, "Skipping test: not a glibc >= 2.3 system\n"); return 77; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vasnprintf.c�����������������������������������������������������0000664�0000000�0000000�00000006637�14110572173�0020770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vasnprintf() and asnprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "vasnprintf.h" #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { char buf[8]; int size; for (size = 0; size <= 8; size++) { size_t length = size; char *result = my_asnprintf (NULL, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); if (size < 5 + 1) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } /* Note: This test assumes IEEE 754 representation of 'double' floats. */ for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%2.0f", 1.6314159265358979e+125); ASSERT (result != NULL); /* The exact result and the result on glibc systems is 163141592653589790215729350939528493057529598899734151772468186268423257777068536614838678161083520756952076273094236944990208 On Cygwin, the result is 163141592653589790215729350939528493057529600000000000000000000000000000000000000000000000000000000000000000000000000000000000 On HP-UX 11.31 / hppa and IRIX 6.5, the result is 163141592653589790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */ ASSERT (strlen (result) == 126); ASSERT (memcmp (result, "163141592653589790", 18) == 0); ASSERT (length == 126); if (size < 126 + 1) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } static void test_asnprintf () { test_function (asnprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); test_asnprintf (); return 0; } �������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vasprintf-posix.c������������������������������������������������0000664�0000000�0000000�00000350501�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasprintf() and asprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <float.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "minus-zero.h" #include "infinity.h" #include "nan.h" /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = minus_zerod; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ #ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } #else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } #endif static int strmatch (const char *pattern, const char *string) { if (strlen (pattern) != strlen (string)) return 0; for (; *pattern != '\0'; pattern++, string++) if (*pattern != '*' && *string != *pattern) return 0; return 1; } /* Test whether string[start_index..end_index-1] is a valid textual representation of NaN. */ static int strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static void test_function (int (*my_asprintf) (char **, const char *, ...)) { int repeat; /* Test return value convention. */ for (repeat = 0; repeat <= 8; repeat++) { char *result; int retval = asprintf (&result, "%d", 12345); ASSERT (retval == 5); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); free (result); } /* Test support of size specifiers as in C99. */ { char *result; int retval = my_asprintf (&result, "%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345671 33") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345672 33") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345673 33") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%Lg %d", (long double) 1.5, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.5 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%a %d", 3.1416015625, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%A %d", -3.1416015625, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%a %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%a %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%a %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%a %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%a %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding near the decimal point. */ char *result; int retval = my_asprintf (&result, "%.0a %d", 1.5, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1p+0 33") == 0 || strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 0. */ char *result; int retval = my_asprintf (&result, "%.0a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1p+0 33") == 0 || strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 1. */ char *result; int retval = my_asprintf (&result, "%.1a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 2. */ char *result; int retval = my_asprintf (&result, "%.2a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 3. */ char *result; int retval = my_asprintf (&result, "%.3a %d", 1.51, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. */ char *result; int retval = my_asprintf (&result, "%.3a %d", 1.49999, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug. */ char *result; int retval = my_asprintf (&result, "%.1a %d", 1.999, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Width. */ char *result; int retval = my_asprintf (&result, "%10a %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* Small precision. */ char *result; int retval = my_asprintf (&result, "%.10a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Large precision. */ char *result; int retval = my_asprintf (&result, "%.50a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10a %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+a %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% a %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#a %d", 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, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#a %d", 1.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%010a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%010a %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050a %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%La %d", 3.1416015625L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%LA %d", -3.1416015625L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 || strcmp (result, "-0X3.244P+0 33") == 0 || strcmp (result, "-0X6.488P-1 33") == 0 || strcmp (result, "-0XC.91P-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%La %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x0p+0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%La %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0x0p+0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%La %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%La %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%La %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* asprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%La %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } #endif { /* Rounding near the decimal point. */ char *result; int retval = my_asprintf (&result, "%.0La %d", 1.5L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 0. */ char *result; int retval = my_asprintf (&result, "%.0La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x2p+0 33") == 0 || strcmp (result, "0x3p-1 33") == 0 || strcmp (result, "0x6p-2 33") == 0 || strcmp (result, "0xcp-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 1. */ char *result; int retval = my_asprintf (&result, "%.1La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.8p+0 33") == 0 || strcmp (result, "0x3.0p-1 33") == 0 || strcmp (result, "0x6.1p-2 33") == 0 || strcmp (result, "0xc.1p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 2. */ char *result; int retval = my_asprintf (&result, "%.2La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.83p+0 33") == 0 || strcmp (result, "0x3.05p-1 33") == 0 || strcmp (result, "0x6.0ap-2 33") == 0 || strcmp (result, "0xc.14p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding with precision 3. */ char *result; int retval = my_asprintf (&result, "%.3La %d", 1.51L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.829p+0 33") == 0 || strcmp (result, "0x3.052p-1 33") == 0 || strcmp (result, "0x6.0a4p-2 33") == 0 || strcmp (result, "0xc.148p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. */ char *result; int retval = my_asprintf (&result, "%.3La %d", 1.49999L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.800p+0 33") == 0 || strcmp (result, "0x3.000p-1 33") == 0 || strcmp (result, "0x6.000p-2 33") == 0 || strcmp (result, "0xc.000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Rounding can turn a ...FFF into a ...000. This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ char *result; int retval = my_asprintf (&result, "%.1La %d", 1.999L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.0p+1 33") == 0 || strcmp (result, "0x2.0p+0 33") == 0 || strcmp (result, "0x4.0p-1 33") == 0 || strcmp (result, "0x8.0p-2 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Width. */ char *result; int retval = my_asprintf (&result, "%10La %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* Small precision. */ char *result; int retval = my_asprintf (&result, "%.10La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Large precision. */ char *result; int retval = my_asprintf (&result, "%.50La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10La %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+La %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% La %d", 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); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#La %d", 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, "0x7.p-2 33") == 0 || strcmp (result, "0xe.p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#La %d", 1.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.p+0 33") == 0 || strcmp (result, "0x2.p-1 33") == 0 || strcmp (result, "0x4.p-2 33") == 0 || strcmp (result, "0x8.p-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%010La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x001.cp+0 33") == 0 || strcmp (result, "0x003.8p-1 33") == 0 || strcmp (result, "0x00007p-2 33") == 0 || strcmp (result, "0x0000ep-3 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%010La %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); /* "0000000inf 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050La %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); /* "0000000nan 33" is not a valid result; see <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %f format directive. */ { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%f %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%f %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "0.000000" }, { 1.234321234321234e-36, "0.000000" }, { 1.234321234321234e-35, "0.000000" }, { 1.234321234321234e-34, "0.000000" }, { 1.234321234321234e-33, "0.000000" }, { 1.234321234321234e-32, "0.000000" }, { 1.234321234321234e-31, "0.000000" }, { 1.234321234321234e-30, "0.000000" }, { 1.234321234321234e-29, "0.000000" }, { 1.234321234321234e-28, "0.000000" }, { 1.234321234321234e-27, "0.000000" }, { 1.234321234321234e-26, "0.000000" }, { 1.234321234321234e-25, "0.000000" }, { 1.234321234321234e-24, "0.000000" }, { 1.234321234321234e-23, "0.000000" }, { 1.234321234321234e-22, "0.000000" }, { 1.234321234321234e-21, "0.000000" }, { 1.234321234321234e-20, "0.000000" }, { 1.234321234321234e-19, "0.000000" }, { 1.234321234321234e-18, "0.000000" }, { 1.234321234321234e-17, "0.000000" }, { 1.234321234321234e-16, "0.000000" }, { 1.234321234321234e-15, "0.000000" }, { 1.234321234321234e-14, "0.000000" }, { 1.234321234321234e-13, "0.000000" }, { 1.234321234321234e-12, "0.000000" }, { 1.234321234321234e-11, "0.000000" }, { 1.234321234321234e-10, "0.000000" }, { 1.234321234321234e-9, "0.000000" }, { 1.234321234321234e-8, "0.000000" }, { 1.234321234321234e-7, "0.000000" }, { 1.234321234321234e-6, "0.000001" }, { 1.234321234321234e-5, "0.000012" }, { 1.234321234321234e-4, "0.000123" }, { 1.234321234321234e-3, "0.001234" }, { 1.234321234321234e-2, "0.012343" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.234321" }, { 1.234321234321234e1, "12.343212" }, { 1.234321234321234e2, "123.432123" }, { 1.234321234321234e3, "1234.321234" }, { 1.234321234321234e4, "12343.212343" }, { 1.234321234321234e5, "123432.123432" }, { 1.234321234321234e6, "1234321.234321" }, { 1.234321234321234e7, "12343212.343212" }, { 1.234321234321234e8, "123432123.432123" }, { 1.234321234321234e9, "1234321234.321234" }, { 1.234321234321234e10, "12343212343.2123**" }, { 1.234321234321234e11, "123432123432.123***" }, { 1.234321234321234e12, "1234321234321.23****" }, { 1.234321234321234e13, "12343212343212.3*****" }, { 1.234321234321234e14, "123432123432123.******" }, { 1.234321234321234e15, "1234321234321234.000000" }, { 1.234321234321234e16, "123432123432123**.000000" }, { 1.234321234321234e17, "123432123432123***.000000" }, { 1.234321234321234e18, "123432123432123****.000000" }, { 1.234321234321234e19, "123432123432123*****.000000" }, { 1.234321234321234e20, "123432123432123******.000000" }, { 1.234321234321234e21, "123432123432123*******.000000" }, { 1.234321234321234e22, "123432123432123********.000000" }, { 1.234321234321234e23, "123432123432123*********.000000" }, { 1.234321234321234e24, "123432123432123**********.000000" }, { 1.234321234321234e25, "123432123432123***********.000000" }, { 1.234321234321234e26, "123432123432123************.000000" }, { 1.234321234321234e27, "123432123432123*************.000000" }, { 1.234321234321234e28, "123432123432123**************.000000" }, { 1.234321234321234e29, "123432123432123***************.000000" }, { 1.234321234321234e30, "123432123432123****************.000000" }, { 1.234321234321234e31, "123432123432123*****************.000000" }, { 1.234321234321234e32, "123432123432123******************.000000" }, { 1.234321234321234e33, "123432123432123*******************.000000" }, { 1.234321234321234e34, "123432123432123********************.000000" }, { 1.234321234321234e35, "123432123432123*********************.000000" }, { 1.234321234321234e36, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%f", data[k].value); ASSERT (result != NULL); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%f %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%f %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%f %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%f %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%f %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%f %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Width. */ char *result; int retval = my_asprintf (&result, "%10f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.f %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%015f %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015f %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050f %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.f %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.2f %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.2f %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%Lf %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%Lf %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "0.000000" }, { 1.234321234321234e-36L, "0.000000" }, { 1.234321234321234e-35L, "0.000000" }, { 1.234321234321234e-34L, "0.000000" }, { 1.234321234321234e-33L, "0.000000" }, { 1.234321234321234e-32L, "0.000000" }, { 1.234321234321234e-31L, "0.000000" }, { 1.234321234321234e-30L, "0.000000" }, { 1.234321234321234e-29L, "0.000000" }, { 1.234321234321234e-28L, "0.000000" }, { 1.234321234321234e-27L, "0.000000" }, { 1.234321234321234e-26L, "0.000000" }, { 1.234321234321234e-25L, "0.000000" }, { 1.234321234321234e-24L, "0.000000" }, { 1.234321234321234e-23L, "0.000000" }, { 1.234321234321234e-22L, "0.000000" }, { 1.234321234321234e-21L, "0.000000" }, { 1.234321234321234e-20L, "0.000000" }, { 1.234321234321234e-19L, "0.000000" }, { 1.234321234321234e-18L, "0.000000" }, { 1.234321234321234e-17L, "0.000000" }, { 1.234321234321234e-16L, "0.000000" }, { 1.234321234321234e-15L, "0.000000" }, { 1.234321234321234e-14L, "0.000000" }, { 1.234321234321234e-13L, "0.000000" }, { 1.234321234321234e-12L, "0.000000" }, { 1.234321234321234e-11L, "0.000000" }, { 1.234321234321234e-10L, "0.000000" }, { 1.234321234321234e-9L, "0.000000" }, { 1.234321234321234e-8L, "0.000000" }, { 1.234321234321234e-7L, "0.000000" }, { 1.234321234321234e-6L, "0.000001" }, { 1.234321234321234e-5L, "0.000012" }, { 1.234321234321234e-4L, "0.000123" }, { 1.234321234321234e-3L, "0.001234" }, { 1.234321234321234e-2L, "0.012343" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.234321" }, { 1.234321234321234e1L, "12.343212" }, { 1.234321234321234e2L, "123.432123" }, { 1.234321234321234e3L, "1234.321234" }, { 1.234321234321234e4L, "12343.212343" }, { 1.234321234321234e5L, "123432.123432" }, { 1.234321234321234e6L, "1234321.234321" }, { 1.234321234321234e7L, "12343212.343212" }, { 1.234321234321234e8L, "123432123.432123" }, { 1.234321234321234e9L, "1234321234.321234" }, { 1.234321234321234e10L, "12343212343.2123**" }, { 1.234321234321234e11L, "123432123432.123***" }, { 1.234321234321234e12L, "1234321234321.23****" }, { 1.234321234321234e13L, "12343212343212.3*****" }, { 1.234321234321234e14L, "123432123432123.******" }, { 1.234321234321234e15L, "1234321234321234.000000" }, { 1.234321234321234e16L, "123432123432123**.000000" }, { 1.234321234321234e17L, "123432123432123***.000000" }, { 1.234321234321234e18L, "123432123432123****.000000" }, { 1.234321234321234e19L, "123432123432123*****.000000" }, { 1.234321234321234e20L, "123432123432123******.000000" }, { 1.234321234321234e21L, "123432123432123*******.000000" }, { 1.234321234321234e22L, "123432123432123********.000000" }, { 1.234321234321234e23L, "123432123432123*********.000000" }, { 1.234321234321234e24L, "123432123432123**********.000000" }, { 1.234321234321234e25L, "123432123432123***********.000000" }, { 1.234321234321234e26L, "123432123432123************.000000" }, { 1.234321234321234e27L, "123432123432123*************.000000" }, { 1.234321234321234e28L, "123432123432123**************.000000" }, { 1.234321234321234e29L, "123432123432123***************.000000" }, { 1.234321234321234e30L, "123432123432123****************.000000" }, { 1.234321234321234e31L, "123432123432123*****************.000000" }, { 1.234321234321234e32L, "123432123432123******************.000000" }, { 1.234321234321234e33L, "123432123432123*******************.000000" }, { 1.234321234321234e34L, "123432123432123********************.000000" }, { 1.234321234321234e35L, "123432123432123*********************.000000" }, { 1.234321234321234e36L, "123432123432123**********************.000000" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%Lf", data[k].value); ASSERT (result != NULL); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%Lf %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%Lf %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%Lf %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%Lf %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%Lf %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%Lf %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* asprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } #endif { /* Width. */ char *result; int retval = my_asprintf (&result, "%10Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.Lf %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%015Lf %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015Lf %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050Lf %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.Lf %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.2Lf %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.2Lf %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%F %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%F %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%F %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%F %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%F %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%F %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%F %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%F %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO. */ char *result; int retval = my_asprintf (&result, "%015F %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015F %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.F %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.2F %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.2F %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%LF %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%LF %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234567.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%LF %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.031250 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%LF %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%LF %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%LF %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "INF 33") == 0 || strcmp (result, "INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%LF %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-INF 33") == 0 || strcmp (result, "-INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%LF %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO. */ char *result; int retval = my_asprintf (&result, "%015LF %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "00001234.000000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015LF %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -INF 33") == 0 || strcmp (result, " -INFINITY 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.LF %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.2LF %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.2LF %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000.00 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%e %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%e %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.234321e-37" }, { 1.234321234321234e-36, "1.234321e-36" }, { 1.234321234321234e-35, "1.234321e-35" }, { 1.234321234321234e-34, "1.234321e-34" }, { 1.234321234321234e-33, "1.234321e-33" }, { 1.234321234321234e-32, "1.234321e-32" }, { 1.234321234321234e-31, "1.234321e-31" }, { 1.234321234321234e-30, "1.234321e-30" }, { 1.234321234321234e-29, "1.234321e-29" }, { 1.234321234321234e-28, "1.234321e-28" }, { 1.234321234321234e-27, "1.234321e-27" }, { 1.234321234321234e-26, "1.234321e-26" }, { 1.234321234321234e-25, "1.234321e-25" }, { 1.234321234321234e-24, "1.234321e-24" }, { 1.234321234321234e-23, "1.234321e-23" }, { 1.234321234321234e-22, "1.234321e-22" }, { 1.234321234321234e-21, "1.234321e-21" }, { 1.234321234321234e-20, "1.234321e-20" }, { 1.234321234321234e-19, "1.234321e-19" }, { 1.234321234321234e-18, "1.234321e-18" }, { 1.234321234321234e-17, "1.234321e-17" }, { 1.234321234321234e-16, "1.234321e-16" }, { 1.234321234321234e-15, "1.234321e-15" }, { 1.234321234321234e-14, "1.234321e-14" }, { 1.234321234321234e-13, "1.234321e-13" }, { 1.234321234321234e-12, "1.234321e-12" }, { 1.234321234321234e-11, "1.234321e-11" }, { 1.234321234321234e-10, "1.234321e-10" }, { 1.234321234321234e-9, "1.234321e-09" }, { 1.234321234321234e-8, "1.234321e-08" }, { 1.234321234321234e-7, "1.234321e-07" }, { 1.234321234321234e-6, "1.234321e-06" }, { 1.234321234321234e-5, "1.234321e-05" }, { 1.234321234321234e-4, "1.234321e-04" }, { 1.234321234321234e-3, "1.234321e-03" }, { 1.234321234321234e-2, "1.234321e-02" }, { 1.234321234321234e-1, "1.234321e-01" }, { 1.234321234321234, "1.234321e+00" }, { 1.234321234321234e1, "1.234321e+01" }, { 1.234321234321234e2, "1.234321e+02" }, { 1.234321234321234e3, "1.234321e+03" }, { 1.234321234321234e4, "1.234321e+04" }, { 1.234321234321234e5, "1.234321e+05" }, { 1.234321234321234e6, "1.234321e+06" }, { 1.234321234321234e7, "1.234321e+07" }, { 1.234321234321234e8, "1.234321e+08" }, { 1.234321234321234e9, "1.234321e+09" }, { 1.234321234321234e10, "1.234321e+10" }, { 1.234321234321234e11, "1.234321e+11" }, { 1.234321234321234e12, "1.234321e+12" }, { 1.234321234321234e13, "1.234321e+13" }, { 1.234321234321234e14, "1.234321e+14" }, { 1.234321234321234e15, "1.234321e+15" }, { 1.234321234321234e16, "1.234321e+16" }, { 1.234321234321234e17, "1.234321e+17" }, { 1.234321234321234e18, "1.234321e+18" }, { 1.234321234321234e19, "1.234321e+19" }, { 1.234321234321234e20, "1.234321e+20" }, { 1.234321234321234e21, "1.234321e+21" }, { 1.234321234321234e22, "1.234321e+22" }, { 1.234321234321234e23, "1.234321e+23" }, { 1.234321234321234e24, "1.234321e+24" }, { 1.234321234321234e25, "1.234321e+25" }, { 1.234321234321234e26, "1.234321e+26" }, { 1.234321234321234e27, "1.234321e+27" }, { 1.234321234321234e28, "1.234321e+28" }, { 1.234321234321234e29, "1.234321e+29" }, { 1.234321234321234e30, "1.234321e+30" }, { 1.234321234321234e31, "1.234321e+31" }, { 1.234321234321234e32, "1.234321e+32" }, { 1.234321234321234e33, "1.234321e+33" }, { 1.234321234321234e34, "1.234321e+34" }, { 1.234321234321234e35, "1.234321e+35" }, { 1.234321234321234e36, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%e", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%e %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%e %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%e %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%e %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%e %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%e %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Width. */ char *result; int retval = my_asprintf (&result, "%15e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-15e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.e %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.e %d", 9.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%015e %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015e %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050e %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.e %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.4e %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.4e %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%Le %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%Le %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.234567e+06 33") == 0 || strcmp (result, "1.234567e+006 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.234321e-37" }, { 1.234321234321234e-36L, "1.234321e-36" }, { 1.234321234321234e-35L, "1.234321e-35" }, { 1.234321234321234e-34L, "1.234321e-34" }, { 1.234321234321234e-33L, "1.234321e-33" }, { 1.234321234321234e-32L, "1.234321e-32" }, { 1.234321234321234e-31L, "1.234321e-31" }, { 1.234321234321234e-30L, "1.234321e-30" }, { 1.234321234321234e-29L, "1.234321e-29" }, { 1.234321234321234e-28L, "1.234321e-28" }, { 1.234321234321234e-27L, "1.234321e-27" }, { 1.234321234321234e-26L, "1.234321e-26" }, { 1.234321234321234e-25L, "1.234321e-25" }, { 1.234321234321234e-24L, "1.234321e-24" }, { 1.234321234321234e-23L, "1.234321e-23" }, { 1.234321234321234e-22L, "1.234321e-22" }, { 1.234321234321234e-21L, "1.234321e-21" }, { 1.234321234321234e-20L, "1.234321e-20" }, { 1.234321234321234e-19L, "1.234321e-19" }, { 1.234321234321234e-18L, "1.234321e-18" }, { 1.234321234321234e-17L, "1.234321e-17" }, { 1.234321234321234e-16L, "1.234321e-16" }, { 1.234321234321234e-15L, "1.234321e-15" }, { 1.234321234321234e-14L, "1.234321e-14" }, { 1.234321234321234e-13L, "1.234321e-13" }, { 1.234321234321234e-12L, "1.234321e-12" }, { 1.234321234321234e-11L, "1.234321e-11" }, { 1.234321234321234e-10L, "1.234321e-10" }, { 1.234321234321234e-9L, "1.234321e-09" }, { 1.234321234321234e-8L, "1.234321e-08" }, { 1.234321234321234e-7L, "1.234321e-07" }, { 1.234321234321234e-6L, "1.234321e-06" }, { 1.234321234321234e-5L, "1.234321e-05" }, { 1.234321234321234e-4L, "1.234321e-04" }, { 1.234321234321234e-3L, "1.234321e-03" }, { 1.234321234321234e-2L, "1.234321e-02" }, { 1.234321234321234e-1L, "1.234321e-01" }, { 1.234321234321234L, "1.234321e+00" }, { 1.234321234321234e1L, "1.234321e+01" }, { 1.234321234321234e2L, "1.234321e+02" }, { 1.234321234321234e3L, "1.234321e+03" }, { 1.234321234321234e4L, "1.234321e+04" }, { 1.234321234321234e5L, "1.234321e+05" }, { 1.234321234321234e6L, "1.234321e+06" }, { 1.234321234321234e7L, "1.234321e+07" }, { 1.234321234321234e8L, "1.234321e+08" }, { 1.234321234321234e9L, "1.234321e+09" }, { 1.234321234321234e10L, "1.234321e+10" }, { 1.234321234321234e11L, "1.234321e+11" }, { 1.234321234321234e12L, "1.234321e+12" }, { 1.234321234321234e13L, "1.234321e+13" }, { 1.234321234321234e14L, "1.234321e+14" }, { 1.234321234321234e15L, "1.234321e+15" }, { 1.234321234321234e16L, "1.234321e+16" }, { 1.234321234321234e17L, "1.234321e+17" }, { 1.234321234321234e18L, "1.234321e+18" }, { 1.234321234321234e19L, "1.234321e+19" }, { 1.234321234321234e20L, "1.234321e+20" }, { 1.234321234321234e21L, "1.234321e+21" }, { 1.234321234321234e22L, "1.234321e+22" }, { 1.234321234321234e23L, "1.234321e+23" }, { 1.234321234321234e24L, "1.234321e+24" }, { 1.234321234321234e25L, "1.234321e+25" }, { 1.234321234321234e26L, "1.234321e+26" }, { 1.234321234321234e27L, "1.234321e+27" }, { 1.234321234321234e28L, "1.234321e+28" }, { 1.234321234321234e29L, "1.234321e+29" }, { 1.234321234321234e30L, "1.234321e+30" }, { 1.234321234321234e31L, "1.234321e+31" }, { 1.234321234321234e32L, "1.234321e+32" }, { 1.234321234321234e33L, "1.234321e+33" }, { 1.234321234321234e34L, "1.234321e+34" }, { 1.234321234321234e35L, "1.234321e+35" }, { 1.234321234321234e36L, "1.234321e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%Le", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%Le %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-3.125000e-02 33") == 0 || strcmp (result, "-3.125000e-002 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%Le %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0.000000e+00 33") == 0 || strcmp (result, "0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%Le %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0.000000e+00 33") == 0 || strcmp (result, "-0.000000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%Le %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%Le %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%Le %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* asprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } #endif { /* Width. */ char *result; int retval = my_asprintf (&result, "%15Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-15Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.750000e+00 33") == 0 || strcmp (result, "+1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.750000e+00 33") == 0 || strcmp (result, " 1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.750000e+00 33") == 0 || strcmp (result, "1.750000e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.Le %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2.e+00 33") == 0 || strcmp (result, "2.e+000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.Le %d", 9.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%015Le %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0001.234000e+03 33") == 0 || strcmp (result, "001.234000e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015Le %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050Le %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.Le %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.4Le %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "9.9995e+02 33") == 0 || strcmp (result, "9.9995e+002 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.4Le %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.0000e+03 33") == 0 || strcmp (result, "1.0000e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%g %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%g %d", 1234567.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { double value; const char *string; } data[] = { { 1.234321234321234e-37, "1.23432e-37" }, { 1.234321234321234e-36, "1.23432e-36" }, { 1.234321234321234e-35, "1.23432e-35" }, { 1.234321234321234e-34, "1.23432e-34" }, { 1.234321234321234e-33, "1.23432e-33" }, { 1.234321234321234e-32, "1.23432e-32" }, { 1.234321234321234e-31, "1.23432e-31" }, { 1.234321234321234e-30, "1.23432e-30" }, { 1.234321234321234e-29, "1.23432e-29" }, { 1.234321234321234e-28, "1.23432e-28" }, { 1.234321234321234e-27, "1.23432e-27" }, { 1.234321234321234e-26, "1.23432e-26" }, { 1.234321234321234e-25, "1.23432e-25" }, { 1.234321234321234e-24, "1.23432e-24" }, { 1.234321234321234e-23, "1.23432e-23" }, { 1.234321234321234e-22, "1.23432e-22" }, { 1.234321234321234e-21, "1.23432e-21" }, { 1.234321234321234e-20, "1.23432e-20" }, { 1.234321234321234e-19, "1.23432e-19" }, { 1.234321234321234e-18, "1.23432e-18" }, { 1.234321234321234e-17, "1.23432e-17" }, { 1.234321234321234e-16, "1.23432e-16" }, { 1.234321234321234e-15, "1.23432e-15" }, { 1.234321234321234e-14, "1.23432e-14" }, { 1.234321234321234e-13, "1.23432e-13" }, { 1.234321234321234e-12, "1.23432e-12" }, { 1.234321234321234e-11, "1.23432e-11" }, { 1.234321234321234e-10, "1.23432e-10" }, { 1.234321234321234e-9, "1.23432e-09" }, { 1.234321234321234e-8, "1.23432e-08" }, { 1.234321234321234e-7, "1.23432e-07" }, { 1.234321234321234e-6, "1.23432e-06" }, { 1.234321234321234e-5, "1.23432e-05" }, { 1.234321234321234e-4, "0.000123432" }, { 1.234321234321234e-3, "0.00123432" }, { 1.234321234321234e-2, "0.0123432" }, { 1.234321234321234e-1, "0.123432" }, { 1.234321234321234, "1.23432" }, { 1.234321234321234e1, "12.3432" }, { 1.234321234321234e2, "123.432" }, { 1.234321234321234e3, "1234.32" }, { 1.234321234321234e4, "12343.2" }, { 1.234321234321234e5, "123432" }, { 1.234321234321234e6, "1.23432e+06" }, { 1.234321234321234e7, "1.23432e+07" }, { 1.234321234321234e8, "1.23432e+08" }, { 1.234321234321234e9, "1.23432e+09" }, { 1.234321234321234e10, "1.23432e+10" }, { 1.234321234321234e11, "1.23432e+11" }, { 1.234321234321234e12, "1.23432e+12" }, { 1.234321234321234e13, "1.23432e+13" }, { 1.234321234321234e14, "1.23432e+14" }, { 1.234321234321234e15, "1.23432e+15" }, { 1.234321234321234e16, "1.23432e+16" }, { 1.234321234321234e17, "1.23432e+17" }, { 1.234321234321234e18, "1.23432e+18" }, { 1.234321234321234e19, "1.23432e+19" }, { 1.234321234321234e20, "1.23432e+20" }, { 1.234321234321234e21, "1.23432e+21" }, { 1.234321234321234e22, "1.23432e+22" }, { 1.234321234321234e23, "1.23432e+23" }, { 1.234321234321234e24, "1.23432e+24" }, { 1.234321234321234e25, "1.23432e+25" }, { 1.234321234321234e26, "1.23432e+26" }, { 1.234321234321234e27, "1.23432e+27" }, { 1.234321234321234e28, "1.23432e+28" }, { 1.234321234321234e29, "1.23432e+29" }, { 1.234321234321234e30, "1.23432e+30" }, { 1.234321234321234e31, "1.23432e+31" }, { 1.234321234321234e32, "1.23432e+32" }, { 1.234321234321234e33, "1.23432e+33" }, { 1.234321234321234e34, "1.23432e+34" }, { 1.234321234321234e35, "1.23432e+35" }, { 1.234321234321234e36, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%g", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%g %d", -0.03125, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%g %d", 0.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%g %d", minus_zerod, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%g %d", Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%g %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%g %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Width. */ char *result; int retval = my_asprintf (&result, "%10g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.g %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.g %d", 9.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%010g %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015g %d", - Infinityd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050g %d", NaNd (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.g %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.5g %d", 999.951, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.5g %d", 999.996, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A positive number. */ char *result; int retval = my_asprintf (&result, "%Lg %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* A larger positive number. */ char *result; int retval = my_asprintf (&result, "%Lg %d", 1234567.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.23457e+06 33") == 0 || strcmp (result, "1.23457e+006 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Small and large positive numbers. */ static struct { long double value; const char *string; } data[] = { { 1.234321234321234e-37L, "1.23432e-37" }, { 1.234321234321234e-36L, "1.23432e-36" }, { 1.234321234321234e-35L, "1.23432e-35" }, { 1.234321234321234e-34L, "1.23432e-34" }, { 1.234321234321234e-33L, "1.23432e-33" }, { 1.234321234321234e-32L, "1.23432e-32" }, { 1.234321234321234e-31L, "1.23432e-31" }, { 1.234321234321234e-30L, "1.23432e-30" }, { 1.234321234321234e-29L, "1.23432e-29" }, { 1.234321234321234e-28L, "1.23432e-28" }, { 1.234321234321234e-27L, "1.23432e-27" }, { 1.234321234321234e-26L, "1.23432e-26" }, { 1.234321234321234e-25L, "1.23432e-25" }, { 1.234321234321234e-24L, "1.23432e-24" }, { 1.234321234321234e-23L, "1.23432e-23" }, { 1.234321234321234e-22L, "1.23432e-22" }, { 1.234321234321234e-21L, "1.23432e-21" }, { 1.234321234321234e-20L, "1.23432e-20" }, { 1.234321234321234e-19L, "1.23432e-19" }, { 1.234321234321234e-18L, "1.23432e-18" }, { 1.234321234321234e-17L, "1.23432e-17" }, { 1.234321234321234e-16L, "1.23432e-16" }, { 1.234321234321234e-15L, "1.23432e-15" }, { 1.234321234321234e-14L, "1.23432e-14" }, { 1.234321234321234e-13L, "1.23432e-13" }, { 1.234321234321234e-12L, "1.23432e-12" }, { 1.234321234321234e-11L, "1.23432e-11" }, { 1.234321234321234e-10L, "1.23432e-10" }, { 1.234321234321234e-9L, "1.23432e-09" }, { 1.234321234321234e-8L, "1.23432e-08" }, { 1.234321234321234e-7L, "1.23432e-07" }, { 1.234321234321234e-6L, "1.23432e-06" }, { 1.234321234321234e-5L, "1.23432e-05" }, { 1.234321234321234e-4L, "0.000123432" }, { 1.234321234321234e-3L, "0.00123432" }, { 1.234321234321234e-2L, "0.0123432" }, { 1.234321234321234e-1L, "0.123432" }, { 1.234321234321234L, "1.23432" }, { 1.234321234321234e1L, "12.3432" }, { 1.234321234321234e2L, "123.432" }, { 1.234321234321234e3L, "1234.32" }, { 1.234321234321234e4L, "12343.2" }, { 1.234321234321234e5L, "123432" }, { 1.234321234321234e6L, "1.23432e+06" }, { 1.234321234321234e7L, "1.23432e+07" }, { 1.234321234321234e8L, "1.23432e+08" }, { 1.234321234321234e9L, "1.23432e+09" }, { 1.234321234321234e10L, "1.23432e+10" }, { 1.234321234321234e11L, "1.23432e+11" }, { 1.234321234321234e12L, "1.23432e+12" }, { 1.234321234321234e13L, "1.23432e+13" }, { 1.234321234321234e14L, "1.23432e+14" }, { 1.234321234321234e15L, "1.23432e+15" }, { 1.234321234321234e16L, "1.23432e+16" }, { 1.234321234321234e17L, "1.23432e+17" }, { 1.234321234321234e18L, "1.23432e+18" }, { 1.234321234321234e19L, "1.23432e+19" }, { 1.234321234321234e20L, "1.23432e+20" }, { 1.234321234321234e21L, "1.23432e+21" }, { 1.234321234321234e22L, "1.23432e+22" }, { 1.234321234321234e23L, "1.23432e+23" }, { 1.234321234321234e24L, "1.23432e+24" }, { 1.234321234321234e25L, "1.23432e+25" }, { 1.234321234321234e26L, "1.23432e+26" }, { 1.234321234321234e27L, "1.23432e+27" }, { 1.234321234321234e28L, "1.23432e+28" }, { 1.234321234321234e29L, "1.23432e+29" }, { 1.234321234321234e30L, "1.23432e+30" }, { 1.234321234321234e31L, "1.23432e+31" }, { 1.234321234321234e32L, "1.23432e+32" }, { 1.234321234321234e33L, "1.23432e+33" }, { 1.234321234321234e34L, "1.23432e+34" }, { 1.234321234321234e35L, "1.23432e+35" }, { 1.234321234321234e36L, "1.23432e+36" } }; size_t k; for (k = 0; k < SIZEOF (data); k++) { char *result; int retval = my_asprintf (&result, "%Lg", data[k].value); const char *expected = data[k].string; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 /* Some implementations produce exponents with 3 digits. */ || (expected[strlen (expected) - 4] == 'e' && strlen (result) == strlen (expected) + 1 && memcmp (result, expected, strlen (expected) - 2) == 0 && result[strlen (expected) - 2] == '0' && strcmp (result + strlen (expected) - 1, expected + strlen (expected) - 2) == 0)); ASSERT (retval == strlen (result)); free (result); } } { /* A negative number. */ char *result; int retval = my_asprintf (&result, "%Lg %d", -0.03125L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-0.03125 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive zero. */ char *result; int retval = my_asprintf (&result, "%Lg %d", 0.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative zero. */ char *result; int retval = my_asprintf (&result, "%Lg %d", minus_zerol, 33, 44, 55); ASSERT (result != NULL); if (have_minus_zero ()) ASSERT (strcmp (result, "-0 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Positive infinity. */ char *result; int retval = my_asprintf (&result, "%Lg %d", Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "inf 33") == 0 || strcmp (result, "infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Negative infinity. */ char *result; int retval = my_asprintf (&result, "%Lg %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "-inf 33") == 0 || strcmp (result, "-infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* NaN. */ char *result; int retval = my_asprintf (&result, "%Lg %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } #if CHECK_PRINTF_SAFE && ((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 { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* asprintf should print something for noncanonical values. */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char *result; int retval = my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); ASSERT (result != NULL); ASSERT (retval == strlen (result)); ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0); free (result); } #endif { /* Width. */ char *result; int retval = my_asprintf (&result, "%10Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_LEFT. */ char *result; int retval = my_asprintf (&result, "%-10Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SHOWSIGN. */ char *result; int retval = my_asprintf (&result, "%+Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "+1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_SPACE. */ char *result; int retval = my_asprintf (&result, "% Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " 1.75 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.75000 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.Lg %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ALT. */ char *result; int retval = my_asprintf (&result, "%#.Lg %d", 9.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.e+01 33") == 0 || strcmp (result, "1.e+001 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with finite number. */ char *result; int retval = my_asprintf (&result, "%010Lg %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0000001234 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with infinite number. */ char *result; int retval = my_asprintf (&result, "%015Lg %d", - Infinityl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " -inf 33") == 0 || strcmp (result, " -infinity 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* FLAG_ZERO with NaN. */ char *result; int retval = my_asprintf (&result, "%050Lg %d", NaNl (), 33, 44, 55); ASSERT (result != NULL); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision. */ char *result; int retval = my_asprintf (&result, "%.Lg %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with no rounding. */ char *result; int retval = my_asprintf (&result, "%.5Lg %d", 999.951L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "999.95 33") == 0); ASSERT (retval == strlen (result)); free (result); } { /* Precision with rounding. */ char *result; int retval = my_asprintf (&result, "%.5Lg %d", 999.996L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1000 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %n format directive. */ { int count = -1; char *result; int retval = my_asprintf (&result, "%d %n", 123, &count, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "123 ") == 0); ASSERT (retval == strlen (result)); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { char *result; int retval = my_asprintf (&result, "%2$d %1$d", 33, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the grouping flag. */ { char *result; int retval = my_asprintf (&result, "%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[strlen (result) - 1] == '9'); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the left-adjust flag. */ { char *result; int retval = my_asprintf (&result, "a%*sc", -3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "a%-*sc", 3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "a%-*sc", -3, "b"); ASSERT (result != NULL); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of large precision. */ { char *result; int retval = my_asprintf (&result, "%.4000d %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.*d %d", 4000, 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.4000d %d", -1234567, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '-'); for (i = 0; i < 4000 - 7; i++) ASSERT (result[1 + i] == '0'); ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.4000u %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.4000o %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 7; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.4000x %d", 1234567, 99); size_t i; ASSERT (result != NULL); for (i = 0; i < 4000 - 6; i++) ASSERT (result[i] == '0'); ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%#.4000x %d", 1234567, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '0'); ASSERT (result[1] == 'x'); for (i = 0; i < 4000 - 6; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.4000f %d", 1.0, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 4000; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 4000, " 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char *result; int retval = my_asprintf (&result, "%.511f %d", 1.0, 99); size_t i; ASSERT (result != NULL); ASSERT (result[0] == '1'); ASSERT (result[1] == '.'); for (i = 0; i < 511; i++) ASSERT (result[2 + i] == '0'); ASSERT (strcmp (result + 2 + 511, " 99") == 0); ASSERT (retval == strlen (result)); free (result); } { char input[5000]; char *result; int retval; size_t i; for (i = 0; i < sizeof (input) - 1; i++) input[i] = 'a' + ((1000000 / (i + 1)) % 26); input[i] = '\0'; retval = my_asprintf (&result, "%.4000s %d", input, 99); ASSERT (result != NULL); ASSERT (memcmp (result, input, 4000) == 0); ASSERT (strcmp (result + 4000, " 99") == 0); ASSERT (retval == strlen (result)); free (result); } /* Test the support of the %s format directive. */ /* To verify that these tests succeed, it is necessary to run them under a tool that checks against invalid memory accesses, such as ElectricFence or "valgrind --tool=memcheck". */ { size_t i; for (i = 1; i <= 8; i++) { char *block; char *result; int retval; block = (char *) malloc (i); memcpy (block, "abcdefgh", i); retval = my_asprintf (&result, "%.*s", (int) i, block); ASSERT (result != NULL); ASSERT (memcmp (result, block, i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (result); free (block); } } #if HAVE_WCHAR_T { size_t i; for (i = 1; i <= 8; i++) { wchar_t *block; size_t j; char *result; int retval; block = (wchar_t *) malloc (i * sizeof (wchar_t)); for (j = 0; j < i; j++) block[j] = "abcdefgh"[j]; retval = my_asprintf (&result, "%.*ls", (int) i, block); ASSERT (result != NULL); ASSERT (memcmp (result, "abcdefgh", i) == 0); ASSERT (result[i] == '\0'); ASSERT (retval == strlen (result)); free (result); free (block); } } #endif } static int my_asprintf (char **result, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vasprintf (result, format, args); va_end (args); return ret; } static void test_vasprintf () { test_function (my_asprintf); } static void test_asprintf () { test_function (asprintf); } int main (int argc, char *argv[]) { test_vasprintf (); test_asprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vasprintf.c������������������������������������������������������0000664�0000000�0000000�00000004716�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vasprintf() and asprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (asprintf, int, (char **, char const *, ...)); SIGNATURE_CHECK (vasprintf, int, (char **, char const *, va_list)); #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "macros.h" static int my_asprintf (char **result, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vasprintf (result, format, args); va_end (args); return ret; } static void test_vasprintf () { int repeat; for (repeat = 0; repeat <= 8; repeat++) { char *result; int retval = my_asprintf (&result, "%d", 12345); ASSERT (retval == 5); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); free (result); } for (repeat = 0; repeat <= 8; repeat++) { char *result; int retval = my_asprintf (&result, "%08lx", 12345UL); ASSERT (retval == 8); ASSERT (result != NULL); ASSERT (strcmp (result, "00003039") == 0); free (result); } } static void test_asprintf () { int repeat; for (repeat = 0; repeat <= 8; repeat++) { char *result; int retval = asprintf (&result, "%d", 12345); ASSERT (retval == 5); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); free (result); } for (repeat = 0; repeat <= 8; repeat++) { char *result; int retval = asprintf (&result, "%08lx", 12345UL); ASSERT (retval == 8); ASSERT (result != NULL); ASSERT (strcmp (result, "00003039") == 0); free (result); } } int main (int argc, char *argv[]) { test_vasprintf (); test_asprintf (); return 0; } ��������������������������������������������������gnulib-20210822~d383792/tests/test-vc-list-files-cvs.sh���������������������������������������������0000775�0000000�0000000�00000003257�14110572173�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for vc-list-files # Copyright (C) 2008-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . tmpdir=vc-cvs repo=`pwd`/$tmpdir/repo fail=0 for i in with-cvsu without; do # On the first iteration, test using cvsu, if it's in your path. # On the second iteration, ensure that cvsu fails, so we'll # exercise the awk-using code. if test $i = without; then printf '%s\n' '#!/bin/sh' 'exit 1' > cvsu chmod a+x cvsu PATH=`pwd`:$PATH export PATH fi ok=0 mkdir $tmpdir && cd $tmpdir && # without cvs, skip the test { ( cvs -Q -d "$repo" init ) > /dev/null 2>&1 \ || skip_ "cvs not found in PATH"; } && mkdir w && cd w && mkdir d && touch d/a b c && cvs -Q -d "$repo" import -m imp m M M0 && cvs -Q -d "$repo" co m && cd m && printf '%s\n' b c d/a > expected && $BOURNE_SHELL "$abs_aux_dir/vc-list-files" | sort > actual && compare expected actual && ok=1 test $ok = 0 && fail=1 done Exit $fail �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vc-list-files-git.sh���������������������������������������������0000775�0000000�0000000�00000002655�14110572173�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for vc-list-files # Copyright (C) 2008-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . tmpdir=vc-git-$$ GIT_DIR= GIT_WORK_TREE=; unset GIT_DIR GIT_WORK_TREE fail=1 mkdir $tmpdir && cd $tmpdir && # without git, skip the test # The double use of 'exit' is needed for the reference to $? inside the trap. { ( git init -q ) > /dev/null 2>&1 \ || skip_ "git not found in PATH"; } && mkdir d && touch d/a b c && git config user.email "you@example.com" && git config user.name "Your Name" && git add . > /dev/null && git commit -q -a -m log && printf '%s\n' b c d/a > expected && $BOURNE_SHELL "$abs_aux_dir/vc-list-files" > actual && compare expected actual && fail=0 Exit $fail �����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vdprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002507�14110572173�0021562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vdprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (vdprintf, int, (int, char const *, va_list)); #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-fprintf-posix.h" static int my_fprintf (FILE *fp, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vdprintf (fileno (fp), format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { test_function (my_fprintf); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vdprintf-posix.sh������������������������������������������������0000775�0000000�0000000�00000000613�14110572173�0021751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-vdprintf-posix.tmp t-vdprintf-posix.out" ${CHECKER} ./test-vdprintf-posix${EXEEXT} > t-vdprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-vdprintf-posix.tmp > t-vdprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-vdprintf-posix.out result=$? rm -fr $tmpfiles exit $result ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vdprintf.c�������������������������������������������������������0000664�0000000�0000000�00000002621�14110572173�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vdprintf() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (vdprintf, int, (int, const char *, va_list)); #include <errno.h> #include <unistd.h> #include "macros.h" static int my_dprintf (int fd, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vdprintf (fd, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (my_dprintf (-1, "test") == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (my_dprintf (99, "test") == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-verify-try.c�����������������������������������������������������0000664�0000000�0000000�00000001620�14110572173�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "verify" module. Copyright (C) 2017-2021 Free Software Foundation, Inc. This 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/>. */ /* This is a separate source file, so that the execution of test-verify.sh does not interfere with the building of the 'test-verify' program. */ #include "test-verify.c" ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-verify.c���������������������������������������������������������0000664�0000000�0000000�00000006166�14110572173�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "verify" module. Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc. This 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. */ #include <config.h> #include "verify.h" #ifndef EXP_FAIL # define EXP_FAIL 0 #endif /* ======================= Test verify, verify_expr ======================= */ int gx; enum { A, B, C }; #if EXP_FAIL == 1 verify (gx >= 0); /* should give ERROR: non-constant expression */ #endif verify (C == 2); /* should be ok */ #if EXP_FAIL == 2 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ enum { item = verify_expr (1 == 1, 10 * 0 + 17) /* should be ok */ }; static int function (int n) { #if EXP_FAIL == 3 verify (n >= 0); /* should give ERROR: non-constant expression */ #endif verify (C == 2); /* should be ok */ #if EXP_FAIL == 4 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ if (n) return ((void) verify_expr (1 == 1, 1), verify_expr (1 == 1, 8)); /* should be ok */ #if EXP_FAIL == 5 return verify_expr (1 == 2, 5); /* should give ERROR */ #endif return 0; } /* ============================== Test assume ============================== */ static int f (int a) { return a; } typedef struct { unsigned int context : 4; unsigned int halt : 1; } state; void test_assume_expressions (state *s); int test_assume_optimization (int x); _Noreturn void test_assume_noreturn (void); void test_assume_expressions (state *s) { /* Check that 'assume' accepts a function call, even of a non-const function. */ assume (f (1)); /* Check that 'assume' accepts a bit-field expression. */ assume (s->halt); } int test_assume_optimization (int x) { /* Check that the compiler uses 'assume' for optimization. This function, when compiled with optimization, should have code equivalent to return x + 3; Use 'objdump --disassemble test-verify.o' to verify this. */ assume (x >= 4); return (x > 1 ? x + 3 : 2 * x + 10); } _Noreturn void test_assume_noreturn (void) { /* Check that the compiler's data-flow analysis recognizes 'assume (0)'. This function should not elicit a warning. */ assume (0); } /* ============================== Main ===================================== */ int main (void) { state s = { 0, 1 }; test_assume_expressions (&s); test_assume_optimization (5); return !(function (0) == 0 && function (1) == 8); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-verify.sh��������������������������������������������������������0000775�0000000�0000000�00000001325�14110572173�0020262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh" # We are not interested in triggering bugs in the compilers and tools # (such as gcc 4.3.1 on openSUSE 11.0). unset MALLOC_PERTURB_ # Rather than figure out how to invoke the compiler with the right # include path ourselves, we let make do it: (cd "$initial_cwd_" \ && rm -f test-verify-try.o \ && $MAKE test-verify-try.o >/dev/null 2>&1) \ || skip_ "cannot compile error-free" # Now, prove that we encounter all expected compilation failures: : >out : >err for i in 1 2 3 4 5; do (cd "$initial_cwd_" rm -f test-verify-try.o $MAKE CFLAGS=-DEXP_FAIL=$i test-verify-try.o) >>out 2>>err \ && { warn_ "compiler didn't detect verification failure $i"; fail=1; } done Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-version-etc.c����������������������������������������������������0000664�0000000�0000000�00000002024�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for version-etc. Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of the GNUlib Library. This 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 "version-etc.h" #define AUTHORS "Sergey Poznyakoff", "Eric Blake" int main (_GL_UNUSED int argc, char **argv) { version_etc (stdout, "test-version-etc", "dummy", "0", AUTHORS, (const char *) NULL); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-version-etc.sh���������������������������������������������������0000775�0000000�0000000�00000002677�14110572173�0021227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for version-etc. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . TMP=ve-expected.tmp LC_ALL=C export LC_ALL ERR=0 cat > $TMP <<EOT test-version-etc (PROJECT) VERSION COPYRIGHT Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Sergey Poznyakoff and Eric Blake. EOT ${CHECKER} test-version-etc${EXEEXT} --version | sed '1s/test-version-etc (.*) .*/test-version-etc (PROJECT) VERSION/ /^Packaged by/d 2,3 s/Copyright (C) [0-9]\{4,4\}/COPYRIGHT/' | tr -d '\015' | compare $TMP - || ERR=1 rm $TMP exit $ERR �����������������������������������������������������������������gnulib-20210822~d383792/tests/test-vfprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002501�14110572173�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vfprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (vfprintf, int, (FILE *, char const *, va_list)); #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-fprintf-posix.h" static int my_fprintf (FILE *fp, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vfprintf (fp, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { test_function (my_fprintf); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vfprintf-posix.sh������������������������������������������������0000775�0000000�0000000�00000000613�14110572173�0021753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-vfprintf-posix.tmp t-vfprintf-posix.out" ${CHECKER} ./test-vfprintf-posix${EXEEXT} > t-vfprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-vfprintf-posix.tmp > t-vfprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-vfprintf-posix.out result=$? rm -fr $tmpfiles exit $result ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vfprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (vprintf, int, (char const *, va_list)); #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-printf-posix.h" static int my_printf (const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vprintf (format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { test_function (my_printf); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000000604�14110572173�0021605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-vprintf-posix.tmp t-vprintf-posix.out" ${CHECKER} ./test-vprintf-posix${EXEEXT} > t-vprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-vprintf-posix.tmp > t-vprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-vprintf-posix.out result=$? rm -fr $tmpfiles exit $result ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vsnprintf-posix.c������������������������������������������������0000664�0000000�0000000�00000002450�14110572173�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <float.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-snprintf-posix.h" static int my_snprintf (char *str, size_t size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (str, size, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { test_function (my_snprintf); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vsnprintf.c������������������������������������������������������0000664�0000000�0000000�00000004305�14110572173�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (vsnprintf, int, (char *, size_t, char const *, va_list)); #include <stdarg.h> #include <string.h> #include "macros.h" static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { char buf[8]; int size; int retval; retval = my_snprintf (NULL, 0, "%d", 12345); ASSERT (retval == 5); for (size = 0; size <= 8; size++) { memcpy (buf, "DEADBEEF", 8); retval = my_snprintf (buf, size, "%d", 12345); ASSERT (retval == 5); if (size < 6) { if (size > 0) { ASSERT (memcmp (buf, "12345", size - 1) == 0); ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); } #if !CHECK_VSNPRINTF_POSIX if (size > 0) #endif ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); } else { ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } } /* Test the support of the POSIX/XSI format strings with positions. */ { char result[100]; retval = my_snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-vsprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002552�14110572173�0021601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (vsprintf, int, (char *, char const *, va_list)); #include <float.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-sprintf-posix.h" static int my_sprintf (char *str, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsprintf (str, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { test_function (my_sprintf); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wchar-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000014442�14110572173�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <wchar.h> #include "signature.h" #if GNULIB_TEST_BTOWC SIGNATURE_CHECK (GNULIB_NAMESPACE::btowc, wint_t, (int)); #endif #if GNULIB_TEST_WCTOB SIGNATURE_CHECK (GNULIB_NAMESPACE::wctob, int, (wint_t)); #endif #if GNULIB_TEST_MBSINIT SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsinit, int, (const mbstate_t *)); #endif #if GNULIB_TEST_MBRTOWC SIGNATURE_CHECK (GNULIB_NAMESPACE::mbrtowc, size_t, (wchar_t *, const char *, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBRLEN SIGNATURE_CHECK (GNULIB_NAMESPACE::mbrlen, size_t, (const char *, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBSRTOWCS SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsrtowcs, size_t, (wchar_t *, const char **, size_t, mbstate_t *)); #endif #if GNULIB_TEST_MBSNRTOWCS SIGNATURE_CHECK (GNULIB_NAMESPACE::mbsnrtowcs, size_t, (wchar_t *, const char **, size_t, size_t, mbstate_t *)); #endif #if GNULIB_TEST_WCRTOMB SIGNATURE_CHECK (GNULIB_NAMESPACE::wcrtomb, size_t, (char *, wchar_t, mbstate_t *)); #endif #if GNULIB_TEST_WCSRTOMBS SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsrtombs, size_t, (char *, const wchar_t **, size_t, mbstate_t *)); #endif #if GNULIB_TEST_WCSNRTOMBS SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsnrtombs, size_t, (char *, const wchar_t **, size_t, size_t, mbstate_t *)); #endif #if GNULIB_TEST_WCWIDTH SIGNATURE_CHECK (GNULIB_NAMESPACE::wcwidth, int, (wchar_t)); #endif #if GNULIB_TEST_WMEMCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t)); #endif #if GNULIB_TEST_WMEMCMP SIGNATURE_CHECK (GNULIB_NAMESPACE::wmemcmp, int, (const wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WMEMCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wmemcpy, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WMEMMOVE SIGNATURE_CHECK (GNULIB_NAMESPACE::wmemmove, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WMEMPCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wmempcpy, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WMEMSET SIGNATURE_CHECK (GNULIB_NAMESPACE::wmemset, wchar_t *, (wchar_t *, wchar_t, size_t)); #endif #if GNULIB_TEST_WCSLEN SIGNATURE_CHECK (GNULIB_NAMESPACE::wcslen, size_t, (const wchar_t *)); #endif #if GNULIB_TEST_WCSNLEN SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsnlen, size_t, (const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscpy, wchar_t *, (wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCPCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wcpcpy, wchar_t *, (wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSNCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsncpy, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCPNCPY SIGNATURE_CHECK (GNULIB_NAMESPACE::wcpncpy, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSCAT SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscat, wchar_t *, (wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSNCAT SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsncat, wchar_t *, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSCMP SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscmp, int, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSNCMP SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsncmp, int, (const wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSCASECMP SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscasecmp, int, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSNCASECMP SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsncasecmp, int, (const wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSCOLL SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscoll, int, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSXFRM SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsxfrm, size_t, (wchar_t *, const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSDUP SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsdup, wchar_t *, (const wchar_t *)); #endif #if GNULIB_TEST_WCSCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::wcschr, wchar_t *, (const wchar_t *, wchar_t)); #endif #if GNULIB_TEST_WCSRCHR SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsrchr, wchar_t *, (const wchar_t *, wchar_t)); #endif #if GNULIB_TEST_WCSCSPN SIGNATURE_CHECK (GNULIB_NAMESPACE::wcscspn, size_t, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSSPN SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsspn, size_t, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSPBRK SIGNATURE_CHECK (GNULIB_NAMESPACE::wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSSTR SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsstr, wchar_t *, (const wchar_t *, const wchar_t *)); #endif #if GNULIB_TEST_WCSTOK SIGNATURE_CHECK (GNULIB_NAMESPACE::wcstok, wchar_t *, (wchar_t *, const wchar_t *, wchar_t **)); #endif #if GNULIB_TEST_WCSWIDTH SIGNATURE_CHECK (GNULIB_NAMESPACE::wcswidth, int, (const wchar_t *, size_t)); #endif #if GNULIB_TEST_WCSFTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsftime, size_t, (wchar_t *, size_t, const wchar_t *, const struct tm *)); #endif int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wchar-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001467�14110572173�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cwchar> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wchar-c++3.cc����������������������������������������������������0000664�0000000�0000000�00000001536�14110572173�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <wchar.h> #include <cstring> #include <sstream> ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wchar.c����������������������������������������������������������0000664�0000000�0000000�00000002136�14110572173�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "verify.h" /* Check that the types wchar_t and wint_t are defined. */ wchar_t a = 'c'; wint_t b = 'x'; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-1.sh�������������������������������������������������0000775�0000000�0000000�00000000135�14110572173�0021200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-2.sh�������������������������������������������������0000775�0000000�0000000�00000000145�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-3.sh�������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-4.sh�������������������������������������������������0000775�0000000�0000000�00000000134�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-5.sh�������������������������������������������������0000775�0000000�0000000�00000000133�14110572173�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-6.sh�������������������������������������������������0000775�0000000�0000000�00000000137�14110572173�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32-7.sh�������������������������������������������������0000775�0000000�0000000�00000000215�14110572173�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb-w32.c����������������������������������������������������0000664�0000000�0000000�00000022141�14110572173�0020650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.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 = wcrtomb (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 = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('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 = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\374", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (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 = wcrtomb (buf, 0x0622, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\302", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0644, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\341", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0648, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\346", 1) == 0); ASSERT (buf[1] == '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 = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\223\372", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\226\173", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (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 = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\244\351", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\245\273", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (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 = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\310\325", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\261\276", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (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 "B\250\271\201\060\211\070er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\250\271", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); ASSERT (buf[4] == 'x'); } 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; } } 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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb.c��������������������������������������������������������0000664�0000000�0000000�00000011131�14110572173�0020234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcrtomb, size_t, (char *, wchar_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) { wchar_t wc; char buf[64]; int iret; size_t ret; wc = (wchar_t) 0xBADFACE; iret = mbtowc (&wc, s, n); ASSERT (iret == n); ret = wcrtomb (buf, wc, NULL); ASSERT (ret == n); ASSERT (memcmp (buf, s, n) == 0); /* Test special calling convention, passing a NULL pointer. */ ret = wcrtomb (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 = wcrtomb (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 = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('x'), NULL); ASSERT (ret == 1); } if (argc > 1) switch (argv[1][0]) { case '1': /* 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 '2': /* Locale encoding is UTF-8. */ { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 2); } return 0; case '3': /* 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 '4': /* Locale encoding is GB18030. */ { const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 4); } return 0; case '5': /* C locale; tested above. */ return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcrtomb.sh�������������������������������������������������������0000775�0000000�0000000�00000001662�14110572173�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # 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 \ || 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-wcrtomb${EXEEXT} 2 \ || 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-wcrtomb${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-wcrtomb${EXEEXT} 4 \ || 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 ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsnrtombs.c�����������������������������������������������������0000664�0000000�0000000�00000015057�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcsnrtombs, size_t, (char *, wchar_t const **, size_t, size_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; if (argc > 1) { wchar_t input[10]; size_t n; const wchar_t *src; #define BUFSIZE 20 char buf[BUFSIZE]; size_t ret; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = '_'; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char original[] = "B\374\337er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsnrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 5); ASSERT (src == input); src = input; ret = wcsnrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n <= 5 ? n : 5)); ASSERT (src == (n <= 5 ? input + n : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '2': /* Locale encoding is UTF-8. */ { const char original[] = "B\303\274\303\237er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsnrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 7); ASSERT (src == input); src = input; ret = wcsnrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n <= 7 ? n : 7)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n <= 7 ? input + (n - 2) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '3': /* Locale encoding is EUC-JP. */ { const char original[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsnrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 8); ASSERT (src == input); src = input; ret = wcsnrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 7 ? 5 : n <= 8 ? n : 8)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 7 ? input + 3 : n <= 8 ? input + (n - 3) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '4': /* Locale encoding is GB18030. */ { const char original[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsnrtombs (NULL, &src, 6, n, NULL); ASSERT (ret == 9); ASSERT (src == input); src = input; ret = wcsnrtombs (buf, &src, 6, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 7 ? 3 : n <= 9 ? n : 9)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 7 ? input + 2 : n <= 9 ? input + (n - 4) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; default: return 1; } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsnrtombs1.sh���������������������������������������������������0000775�0000000�0000000�00000000563�14110572173�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsnrtombs${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsnrtombs2.sh���������������������������������������������������0000775�0000000�0000000�00000000606�14110572173�0021242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsnrtombs${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsnrtombs3.sh���������������������������������������������������0000775�0000000�0000000�00000000576�14110572173�0021251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsnrtombs${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsnrtombs4.sh���������������������������������������������������0000775�0000000�0000000�00000000620�14110572173�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsnrtombs${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsrtombs.c������������������������������������������������������0000664�0000000�0000000�00000015005�14110572173�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide string to string. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcsrtombs, size_t, (char *, wchar_t const **, size_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; if (argc > 1) { wchar_t input[10]; size_t n; const wchar_t *src; #define BUFSIZE 20 char buf[BUFSIZE]; size_t ret; { size_t i; for (i = 0; i < BUFSIZE; i++) buf[i] = '_'; } switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char original[] = "B\374\337er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsrtombs (NULL, &src, n, NULL); ASSERT (ret == 5); ASSERT (src == input); src = input; ret = wcsrtombs (buf, &src, n, NULL); ASSERT (ret == (n <= 5 ? n : 5)); ASSERT (src == (n <= 5 ? input + n : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '2': /* Locale encoding is UTF-8. */ { const char original[] = "B\303\274\303\237er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsrtombs (NULL, &src, n, NULL); ASSERT (ret == 7); ASSERT (src == input); src = input; ret = wcsrtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n <= 7 ? n : 7)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n <= 7 ? input + (n - 2) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '3': /* Locale encoding is EUC-JP. */ { const char original[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsrtombs (NULL, &src, n, NULL); ASSERT (ret == 8); ASSERT (src == input); src = input; ret = wcsrtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 5 ? 3 : n < 7 ? 5 : n <= 8 ? n : 8)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 5 ? input + 2 : n < 7 ? input + 3 : n <= 8 ? input + (n - 3) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; case '4': /* Locale encoding is GB18030. */ { const char original[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ ret = mbstowcs (input, original, 10); ASSERT (ret == 5); for (n = 0; n < 10; n++) { src = input; ret = wcsrtombs (NULL, &src, n, NULL); ASSERT (ret == 9); ASSERT (src == input); src = input; ret = wcsrtombs (buf, &src, n, NULL); ASSERT (ret == (n < 1 ? n : n < 3 ? 1 : n < 7 ? 3 : n <= 9 ? n : 9)); ASSERT (src == (n < 1 ? input + n : n < 3 ? input + 1 : n < 7 ? input + 2 : n <= 9 ? input + (n - 4) : NULL)); ASSERT (memcmp (buf, original, ret) == 0); if (src == NULL) ASSERT (buf[ret] == '\0'); ASSERT (buf[ret + (src == NULL) + 0] == '_'); ASSERT (buf[ret + (src == NULL) + 1] == '_'); ASSERT (buf[ret + (src == NULL) + 2] == '_'); } } break; default: return 1; } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsrtombs1.sh����������������������������������������������������0000775�0000000�0000000�00000000562�14110572173�0021064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsrtombs${EXEEXT} 1 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsrtombs2.sh����������������������������������������������������0000775�0000000�0000000�00000000605�14110572173�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsrtombs${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsrtombs3.sh����������������������������������������������������0000775�0000000�0000000�00000000575�14110572173�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsrtombs${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcsrtombs4.sh����������������������������������������������������0000775�0000000�0000000�00000000617�14110572173�0021070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-wcsrtombs${EXEEXT} 4 �����������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wcstok.c���������������������������������������������������������0000664�0000000�0000000�00000003036�14110572173�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide string to string. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); #include <string.h> #include "macros.h" int main () { wchar_t string[] = L"hello world!"; wchar_t delim[] = L" "; wchar_t *ptr; wchar_t *ret; ret = wcstok (string, delim, &ptr); ASSERT (ret == string); ASSERT (memcmp (string, L"hello\0 world!", 14 * sizeof (wchar_t)) == 0); ASSERT (ptr == string + 6); ret = wcstok (NULL, delim, &ptr); ASSERT (ret == string + 7); ASSERT (memcmp (string, L"hello\0 world!", 14 * sizeof (wchar_t)) == 0); ASSERT (ptr == NULL || *ptr == L'\0'); ret = wcstok (NULL, delim, &ptr); ASSERT (ret == NULL); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wctype-h-c++.cc��������������������������������������������������0000664�0000000�0000000�00000004401�14110572173�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute in C++ mode. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (GNULIB_NAMESPACE::iswalnum, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswalpha, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswcntrl, int, (wint_t)); #if GNULIB_TEST_ISWDIGIT SIGNATURE_CHECK (GNULIB_NAMESPACE::iswdigit, int, (wint_t)); #endif SIGNATURE_CHECK (GNULIB_NAMESPACE::iswgraph, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswlower, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswprint, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswpunct, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswspace, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswupper, int, (wint_t)); #if GNULIB_TEST_ISWXDIGIT SIGNATURE_CHECK (GNULIB_NAMESPACE::iswxdigit, int, (wint_t)); #endif #if GNULIB_TEST_ISWBLANK SIGNATURE_CHECK (GNULIB_NAMESPACE::iswblank, int, (wint_t)); #endif #if GNULIB_TEST_WCTYPE SIGNATURE_CHECK (GNULIB_NAMESPACE::wctype, wctype_t, (const char *)); #endif #if GNULIB_TEST_ISWCTYPE SIGNATURE_CHECK (GNULIB_NAMESPACE::iswctype, int, (wint_t, wctype_t)); #endif SIGNATURE_CHECK (GNULIB_NAMESPACE::towlower, wint_t, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::towupper, wint_t, (wint_t)); #if GNULIB_TEST_WCTRANS SIGNATURE_CHECK (GNULIB_NAMESPACE::wctrans, wctrans_t, (const char *)); #endif #if GNULIB_TEST_TOWCTRANS SIGNATURE_CHECK (GNULIB_NAMESPACE::towctrans, wint_t, (wint_t, wctrans_t)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wctype-h-c++2.cc�������������������������������������������������0000664�0000000�0000000�00000001471�14110572173�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute in C++ mode. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cwctype> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-wctype-h.c�������������������������������������������������������0000664�0000000�0000000�00000003766�14110572173�0020336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <wctype.h> #include "macros.h" /* Check that the type wint_t is defined. */ wint_t a = 'x'; /* Check that WEOF is defined. */ wint_t e = WEOF; /* Check that the type wctype_t is defined. */ wctype_t p; /* Check that the type wctrans_t is defined. */ wctrans_t q; int main (void) { /* Check that the isw* functions exist as functions or as macros. */ (void) iswalnum (0); (void) iswalpha (0); (void) iswcntrl (0); (void) iswdigit (0); (void) iswgraph (0); (void) iswlower (0); (void) iswprint (0); (void) iswpunct (0); (void) iswspace (0); (void) iswupper (0); (void) iswxdigit (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswalnum (e)); ASSERT (!iswalpha (e)); ASSERT (!iswcntrl (e)); ASSERT (!iswdigit (e)); ASSERT (!iswgraph (e)); ASSERT (!iswlower (e)); ASSERT (!iswprint (e)); ASSERT (!iswpunct (e)); ASSERT (!iswspace (e)); ASSERT (!iswupper (e)); ASSERT (!iswxdigit (e)); /* Check that the tow* functions exist as functions or as macros. */ (void) towlower (0); (void) towupper (0); /* Check that the tow* functions map WEOF to WEOF. */ ASSERT (towlower (e) == e); ASSERT (towupper (e) == e); return 0; } ����������gnulib-20210822~d383792/tests/test-wcwidth.c��������������������������������������������������������0000664�0000000�0000000�00000007443�14110572173�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of wcwidth() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcwidth, int, (wchar_t)); #include <locale.h> #include <string.h> #include "c-ctype.h" #include "localcharset.h" #include "macros.h" int main () { wchar_t wc; #if !GNULIB_WCHAR_SINGLE_LOCALE # ifdef C_CTYPE_ASCII /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (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 (wcwidth (wc) == 1); /* Test width of some non-spacing characters. */ ASSERT (wcwidth (0x0301) == 0); ASSERT (wcwidth (0x05B0) == 0); /* Test width of some format control characters. */ ASSERT (wcwidth (0x200E) <= 0); ASSERT (wcwidth (0x2060) <= 0); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0xE0001) <= 0); ASSERT (wcwidth (0xE0044) <= 0); #endif /* 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 (wcwidth (0x200B) <= 0); ASSERT (wcwidth (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 wcwidth(), 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 (wcwidth (0x2202) == 1); /* Test width of some CJK characters. */ ASSERT (wcwidth (0x3000) == 2); ASSERT (wcwidth (0xB250) == 2); ASSERT (wcwidth (0xFF1A) == 2); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0x20369) == 2); ASSERT (wcwidth (0x2F876) == 2); #endif } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-write.c����������������������������������������������������������0000664�0000000�0000000�00000004006�14110572173�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the write() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (write, ssize_t, (int, const void *, size_t)); #include <errno.h> #include <fcntl.h> #include <string.h> #include "macros.h" int main (void) { const char *filename = "test-write.tmp"; int fd; /* Create a file with a simple contents. */ fd = open (filename, O_CREAT | O_WRONLY, 0600); ASSERT (fd >= 0); ASSERT (write (fd, "Hello World", 11) == 11); ASSERT (close (fd) == 0); /* Write into the middle of the file. */ fd = open (filename, O_WRONLY); ASSERT (fd >= 0); ASSERT (lseek (fd, 6, SEEK_SET) == 6); ASSERT (write (fd, "fascination", 11) == 11); /* Verify the contents of the file. */ { char buf[64]; int rfd = open (filename, O_RDONLY); ASSERT (rfd >= 0); ASSERT (read (rfd, buf, sizeof (buf)) == 17); ASSERT (close (rfd) == 0); ASSERT (memcmp (buf, "Hello fascination", 17) == 0); } ASSERT (close (fd) == 0); /* Test behaviour for invalid file descriptors. */ { char byte = 'x'; errno = 0; ASSERT (write (-1, &byte, 1) == -1); ASSERT (errno == EBADF); } { char byte = 'x'; close (99); errno = 0; ASSERT (write (99, &byte, 1) == -1); ASSERT (errno == EBADF); } /* Clean up. */ unlink (filename); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xalloc-die.c�����������������������������������������������������0000664�0000000�0000000�00000001634�14110572173�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xalloc_die() function. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include "xalloc.h" int main (_GL_UNUSED int argc, char **argv) { xalloc_die (); return 0; } ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xalloc-die.sh����������������������������������������������������0000775�0000000�0000000�00000002122�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test suite for xalloc_die. # Copyright (C) 2009-2021 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This 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/>. . "${srcdir=.}/init.sh"; path_prepend_ . ${CHECKER} test-xalloc-die${EXEEXT} > out 2> err case $? in 1) ;; *) Exit 1;; esac tr -d '\015' < err \ | sed 's,.*test-xalloc-die[.ex]*:,test-xalloc-die:,' > err2 || Exit 1 compare - err2 <<\EOF || Exit 1 test-xalloc-die: memory exhausted EOF test -s out && Exit 1 Exit $fail ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xfprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002127�14110572173�0021564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of error-checking xfprintf() function with POSIX compatible formatting. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "xprintf.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-fprintf-posix.h" int main (_GL_UNUSED int argc, char *argv[]) { test_function (xfprintf); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xmemdup0.c�������������������������������������������������������0000664�0000000�0000000�00000003623�14110572173�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xmemdup0() function. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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, 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include "xmemdup0.h" #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char **argv) { char buffer[10] = { 'a', 'b', 'c', 'd', '\0', 'f', 'g', 'h', 'i', 'j' }; /* Empty string. */ { char *result = xmemdup0 (NULL, 0); ASSERT (result); ASSERT (!*result); free (result); } { char *result = xmemdup0 ("", 0); ASSERT (result); ASSERT (!*result); free (result); } /* Various buffer lengths. */ { char *result = xmemdup0 (buffer, 4); ASSERT (result); ASSERT (strcmp (result, buffer) == 0); free (result); } { char *result = xmemdup0 (buffer, 5); ASSERT (result); ASSERT (strcmp (result, buffer) == 0); ASSERT (result[5] == '\0'); free (result); } { char *result = xmemdup0 (buffer, 9); ASSERT (result); ASSERT (memcmp (result, buffer, 9) == 0); ASSERT (result[9] == '\0'); free (result); } { char *result = xmemdup0 (buffer, 10); ASSERT (result); ASSERT (memcmp (result, buffer, 10) == 0); ASSERT (result[10] == '\0'); free (result); } return 0; } �������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002100�14110572173�0021405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of error-checking xprintf() function with POSIX compatible formatting. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "xprintf.h" #include <stddef.h> #include <stdint.h> #include <string.h> #include "macros.h" #include "test-printf-posix.h" int main (_GL_UNUSED int argc, char *argv[]) { test_function (xprintf); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000001367�14110572173�0021616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-xprintf-posix.tmp t-xprintf-posix.out" ${CHECKER} ./test-xprintf-posix${EXEEXT} > t-xprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-xprintf-posix.tmp > t-xprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-xprintf-posix.out test $? = 0 || { rm -fr $tmpfiles; exit 1; } tmpfiles="$tmpfiles t-xfprintf-posix.tmp t-xfprintf-posix.out" ${CHECKER} ./test-xfprintf-posix${EXEEXT} > t-xfprintf-posix.tmp || exit 1 LC_ALL=C tr -d '\r' < t-xfprintf-posix.tmp > t-xfprintf-posix.out || exit 1 : ${DIFF=diff} ${DIFF} "${srcdir}/test-printf-posix.output" t-xfprintf-posix.out test $? = 0 || { rm -fr $tmpfiles; exit 1; } rm -fr $tmpfiles exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstdopen.c�������������������������������������������������������0000664�0000000�0000000�00000001625�14110572173�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xstdopen() function. Copyright (C) 2019-2021 Free Software Foundation, Inc. This 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 "xstdopen.h" #include <fcntl.h> #include "macros.h" int main (void) { xstdopen (); ASSERT (open ("Makefile", O_RDONLY) >= 3); return 0; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstdopen.sh������������������������������������������������������0000775�0000000�0000000�00000001157�14110572173�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test with all of stdin, stdout, stderr open. ${CHECKER} ./test-xstdopen${EXEEXT} || exit 1 # The syntax for closed file descriptors in sh scripts is specified by POSIX in # section 2.7.5 of # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html # Test with stdin closed. ${CHECKER} ./test-xstdopen${EXEEXT} <&- || exit 1 # Test with stdout closed. ${CHECKER} ./test-xstdopen${EXEEXT} >&- || exit 1 # Test with stderr closed. ${CHECKER} ./test-xstdopen${EXEEXT} 2>&- || exit 1 # Test with all of stdin, stdout, stderr closed. ${CHECKER} ./test-xstdopen${EXEEXT} <&- >&- 2>&- || exit 1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoimax.c�����������������������������������������������������0000664�0000000�0000000�00000000152�14110572173�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoimax #define __strtol_t intmax_t #define __spec PRIdMAX #include "test-xstrtol.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoimax.sh����������������������������������������������������0000775�0000000�0000000�00000002261�14110572173�0021200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoimax ${CHECKER} test-xstrtoimax 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoimax -1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoimax 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtoimax ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtoimax $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtoimax x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoimax 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoimax 010 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoimax MiB >> out 2>&1 || result=1 # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. if echo solaris | tr -d '\r' | grep solais > /dev/null; then cr='\015' else cr='\r' fi # normalize output LC_ALL=C tr -d "$cr" < out > k mv k out # compare expected output cat > exp <<EOF 1->1 () -1->-1 () 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () EOF compare exp out || result=1 Exit $result �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtol.c��������������������������������������������������������0000664�0000000�0000000�00000003015�14110572173�0020300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xstrtol module. Copyright (C) 1995-1996, 1998-2001, 2003-2021 Free Software Foundation, Inc. This 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 <inttypes.h> #include <stdlib.h> #include <stdio.h> #include "xstrtol-error.h" #include "error.h" #ifndef __xstrtol # define __xstrtol xstrtol # define __strtol_t long int # define __spec "ld" #endif /* Don't show the program name in error messages. */ static void print_no_progname (void) { } int main (int argc, char **argv) { strtol_error s_err; int i; error_print_progname = print_no_progname; for (i = 1; i < argc; i++) { char *p; __strtol_t val; s_err = __xstrtol (argv[i], &p, 0, &val, "bckMw0"); if (s_err == LONGINT_OK) { printf ("%s->%" __spec " (%s)\n", argv[i], val, p); } else { xstrtol_fatal (s_err, -2, 'X', NULL, argv[i]); } } exit (0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtol.sh�������������������������������������������������������0000775�0000000�0000000�00000004054�14110572173�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtol ${CHECKER} test-xstrtol 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtol -1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtol 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtol ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtol $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtol x >> out 2>&1 && result=1 ${CHECKER} test-xstrtol 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtol 010 >> out 2>&1 || result=1 # suffix without integer is valid ${CHECKER} test-xstrtol MiB >> out 2>&1 || result=1 ${CHECKER} test-xstrtol 1bB >> out 2>&1 && result=1 # test xstrtoul ${CHECKER} test-xstrtoul 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoul -1 >> out 2>&1 && result=1 ${CHECKER} test-xstrtoul 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtoul ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtoul $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtoul x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoul 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoul 010 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoul MiB >> out 2>&1 || result=1 ${CHECKER} test-xstrtoul 1bB >> out 2>&1 && result=1 # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. if echo solaris | tr -d '\r' | grep solais > /dev/null; then cr='\015' else cr='\r' fi # normalize output LC_ALL=C tr -d "$cr" < out > k mv k out # compare expected output cat > expected <<EOF 1->1 () -1->-1 () 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () invalid suffix in X argument '1bB' 1->1 () invalid X argument '-1' 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () invalid suffix in X argument '1bB' EOF compare expected out || result=1 Exit $result ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoll.c�������������������������������������������������������0000664�0000000�0000000�00000000154�14110572173�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoll #define __strtol_t long long int #define __spec PRId64 #include "test-xstrtol.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoll.sh������������������������������������������������������0000775�0000000�0000000�00000003621�14110572173�0020652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoll ${CHECKER} test-xstrtoll 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoll -1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoll 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtoll ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtoll $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtoll x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoll 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoll 010 >> out 2>&1 || result=1 # suffix without integer is valid ${CHECKER} test-xstrtoll MiB >> out 2>&1 || result=1 # test xstrtoull ${CHECKER} test-xstrtoull 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoull -1 >> out 2>&1 && result=1 ${CHECKER} test-xstrtoull 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtoull ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtoull $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtoull x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoull 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoull 010 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoull MiB >> out 2>&1 || result=1 # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. if echo solaris | tr -d '\r' | grep solais > /dev/null; then cr='\015' else cr='\r' fi # normalize output LC_ALL=C tr -d "$cr" < out > k mv k out # compare expected output cat > expected <<EOF 1->1 () -1->-1 () 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () 1->1 () invalid X argument '-1' 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () EOF compare expected out || result=1 Exit $result ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoul.c�������������������������������������������������������0000664�0000000�0000000�00000000156�14110572173�0020470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoul #define __strtol_t unsigned long int #define __spec "lu" #include "test-xstrtol.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoull.c������������������������������������������������������0000664�0000000�0000000�00000000166�14110572173�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoull #define __strtol_t unsigned long long int #define __spec PRIu64 #include "test-xstrtol.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoumax.c�����������������������������������������������������0000664�0000000�0000000�00000000153�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoumax #define __strtol_t uintmax_t #define __spec PRIuMAX #include "test-xstrtol.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xstrtoumax.sh����������������������������������������������������0000775�0000000�0000000�00000002277�14110572173�0021223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoumax ${CHECKER} test-xstrtoumax 1 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoumax -1 >> out 2>&1 && result=1 ${CHECKER} test-xstrtoumax 1k >> out 2>&1 || result=1 ${CHECKER} test-xstrtoumax ${too_big}h >> out 2>&1 && result=1 ${CHECKER} test-xstrtoumax $too_big >> out 2>&1 && result=1 ${CHECKER} test-xstrtoumax x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoumax 9x >> out 2>&1 && result=1 ${CHECKER} test-xstrtoumax 010 >> out 2>&1 || result=1 ${CHECKER} test-xstrtoumax MiB >> out 2>&1 || result=1 # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. if echo solaris | tr -d '\r' | grep solais > /dev/null; then cr='\015' else cr='\r' fi # normalize output LC_ALL=C tr -d "$cr" < out > k mv k out # compare expected output cat > exp <<EOF 1->1 () invalid X argument '-1' 1k->1024 () invalid suffix in X argument '${too_big}h' X argument '$too_big' too large invalid X argument 'x' invalid suffix in X argument '9x' 010->8 () MiB->1048576 () EOF compare exp out || result=1 Exit $result ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-xvasprintf.c�����������������������������������������������������0000664�0000000�0000000�00000006504�14110572173�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xvasprintf() and xasprintf() functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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. */ /* Tell GCC not to warn about the specific edge cases tested here. */ #if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wformat-zero-length" # pragma GCC diagnostic ignored "-Wformat-nonliteral" # pragma GCC diagnostic ignored "-Wformat-security" #endif #include <config.h> #include "xvasprintf.h" #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "macros.h" static char * my_xasprintf (const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = xvasprintf (format, args); va_end (args); return ret; } static void test_xvasprintf (void) { int repeat; char *result; for (repeat = 0; repeat <= 8; repeat++) { result = my_xasprintf ("%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); free (result); } { /* Silence gcc warning about zero-length format string. */ const char *empty = ""; result = my_xasprintf (empty); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } result = my_xasprintf ("%s", "foo"); ASSERT (result != NULL); ASSERT (strcmp (result, "foo") == 0); free (result); result = my_xasprintf ("%s%s", "foo", "bar"); ASSERT (result != NULL); ASSERT (strcmp (result, "foobar") == 0); free (result); result = my_xasprintf ("%s%sbaz", "foo", "bar"); ASSERT (result != NULL); ASSERT (strcmp (result, "foobarbaz") == 0); free (result); } static void test_xasprintf (void) { int repeat; char *result; for (repeat = 0; repeat <= 8; repeat++) { result = xasprintf ("%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); free (result); } { /* Silence gcc warning about zero-length format string, and about "format not a string literal and no format" (whatever that means) . */ const char *empty = ""; result = xasprintf (empty, empty); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } result = xasprintf ("%s", "foo"); ASSERT (result != NULL); ASSERT (strcmp (result, "foo") == 0); free (result); result = xasprintf ("%s%s", "foo", "bar"); ASSERT (result != NULL); ASSERT (strcmp (result, "foobar") == 0); free (result); result = my_xasprintf ("%s%sbaz", "foo", "bar"); ASSERT (result != NULL); ASSERT (strcmp (result, "foobarbaz") == 0); free (result); } int main (_GL_UNUSED int argc, char *argv[]) { test_xvasprintf (); test_xasprintf (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-y0.c�������������������������������������������������������������0000664�0000000�0000000�00000002067�14110572173�0017117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of y0() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (y0, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = y0 (x); ASSERT (y >= 0.0645032466 && y <= 0.0645032467); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-y1.c�������������������������������������������������������������0000664�0000000�0000000�00000002067�14110572173�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of y1() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (y1, double, (double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = y1 (x); ASSERT (y >= 0.4141146893 && y <= 0.4141146894); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-yesno.c����������������������������������������������������������0000664�0000000�0000000�00000004065�14110572173�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of yesno module. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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, 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> /* Specification. */ #include "yesno.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "closein.h" #include "binary-io.h" /* Test yesno. Without arguments, read one line. If first argument is zero, close stdin before attempting to read one line. Otherwise, read the number of lines specified by first argument. */ int main (int argc, char **argv) { int i = 1; /* yesno recommends that all clients use close_stdin in main. */ atexit (close_stdin); /* But on mingw, close_stdin leaves stdin's file descriptor at the expected position (i.e. where this program left off reading) only if its mode has been set to O_BINARY. If it has been set to O_TEXT, and the file descriptor is seekable, and stdin is buffered, the MSVCRT runtime ends up setting the file descriptor's position to the expected position _minus_ the number of LFs not preceded by CR that were read between the expected position and the last filled buffer end position. (I.e. the repositioning from the end-of-buffer to the expected position does not work if the input file contains end-of-line markers in Unix convention.) */ set_binary_mode (0, O_BINARY); if (1 < argc) i = atoi (argv[1]); if (!i) { i = 1; close (0); } while (i--) puts (yesno () ? "Y" : "N"); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-yesno.sh���������������������������������������������������������0000775�0000000�0000000�00000003337�14110572173�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . # For now, only test with C locale LC_ALL=C export LC_ALL # Find out how to remove carriage returns from output. Solaris /usr/ucb/tr # does not understand '\r'. if echo solaris | tr -d '\r' | grep solais > /dev/null; then cr='\015' else cr='\r' fi # Test with seekable stdin; the follow-on process must see remaining data. tr @ '\177' <<EOF > in.tmp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn - entire line consumed y@n - backspace does not change result y does not match either yesexpr or noexpr n EOF cat <<EOF > xout.tmp N Y Y N n EOF fail=0 (${CHECKER} test-yesno; ${CHECKER} test-yesno 3; cat) < in.tmp > out1.tmp || fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 (${CHECKER} test-yesno 3; ${CHECKER} test-yesno; cat) < in.tmp > out1.tmp || fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 # Test for behavior on pipe cat <<EOF > xout.tmp Y N EOF echo yes | ${CHECKER} test-yesno 2 > out1.tmp || fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 # Test for behavior with no EOL at EOF cat <<EOF > xout.tmp Y EOF printf y | ${CHECKER} test-yesno 1 > out1.tmp || fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 # Test for behavior on EOF cat <<EOF > xout.tmp N EOF ${CHECKER} test-yesno </dev/null > out1.tmp || fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 # Test for behavior when stdin is closed ${CHECKER} test-yesno 0 <&- > out1.tmp 2> err.tmp && fail=1 LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 cmp xout.tmp out.tmp || fail=1 test -s err.tmp || fail=1 Exit $fail �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/test-yn.c�������������������������������������������������������������0000664�0000000�0000000�00000004210�14110572173�0017205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of yn() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <math.h> #include "signature.h" SIGNATURE_CHECK (yn, double, (int, double)); #include "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 3.8; y = yn (0, x); ASSERT (y >= 0.0645032466 && y <= 0.0645032467); /* A particular value. */ x = 3.8; y = yn (1, x); ASSERT (y >= 0.4141146893 && y <= 0.4141146894); /* A particular value. */ x = 3.8; y = yn (2, x); ASSERT (y >= 0.1534518529 && y <= 0.1534518530); /* A particular value. */ x = 3.8; y = yn (3, x); ASSERT (y >= -0.2525864231 && y <= -0.2525864230); /* A particular value. */ x = 3.8; y = yn (4, x); ASSERT (y >= -0.5522725209 && y <= -0.5522725208); /* A particular value. */ x = 3.8; y = yn (5, x); ASSERT (y >= -0.9100925684 && y <= -0.9100925683); /* A particular value. */ x = 3.8; y = yn (6, x); ASSERT (y >= -1.842707923 && y <= -1.842707922); /* A particular value. */ x = 3.8; y = yn (7, x); ASSERT (y >= -4.908985081 && y <= -4.908985080); /* A particular value. */ x = 3.8; y = yn (8, x); ASSERT (y >= -16.24302659 && y <= -16.24302658); /* A particular value. */ x = 3.8; y = yn (9, x); ASSERT (y >= -63.48270581 && y <= -63.48270580); /* A particular value. */ x = 3.8; y = yn (10, x); ASSERT (y >= -284.4645273 && y <= -284.4645272); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/testlocale/�����������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017600�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/testlocale/fr/��������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0020207�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/testlocale/fr/LC_MESSAGES/��������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0021774�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/testlocale/fr/LC_MESSAGES/test-quotearg.mo����������������������������0000664�0000000�0000000�00000000132�14110572173�0025131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,������<������P������R������T������W���������������������'�`�»�«���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/testlocale/fr/LC_MESSAGES/test-quotearg.po����������������������������0000664�0000000�0000000�00000001267�14110572173�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Message catalog that maps the ASCII replacements for single-quote characters # to real single-quote characters. # The header entry is commented out on purpose, so that gettext() performs no # no character set conversion from the PO file's encoding to the locale # encoding. This allows us to use the same PO file in various locales. #msgid "" #msgstr "" #"Project-Id-Version: GNU gnulib\n" #"PO-Revision-Date: 2009-01-26 01:02+01:00\n" #"Last-Translator: Eric Blake <ebb9@byu.net>\n" #"Language-Team: Undetermined <und@li.org>\n" #"MIME-Version: 1.0\n" #"Content-Type: text/plain; charset=UTF-8\n" #"Content-Transfer-Encoding: 8bit\n" msgid "`" msgstr "\302\253" msgid "'" msgstr "\302\273" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017070�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-casecmp.h������������������������������������������������0000664�0000000�0000000�00000004554�14110572173�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_casecmp) (const UNIT *, size_t, const UNIT *, size_t, const char *, uninorm_t, int *), uninorm_t nf) { /* Empty string. */ { int cmp; ASSERT (my_casecmp (NULL, 0, NULL, 0, NULL, nf, &cmp) == 0); ASSERT (cmp == 0); } { static const UNIT input[] = { 'x', 'y' }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), NULL, 0, NULL, nf, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_casecmp (NULL, 0, input, SIZEOF (input), NULL, nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input, SIZEOF (input), input, SIZEOF (input), NULL, nf, &cmp) == 0); ASSERT (cmp == 0); } /* Normal lexicographic order. */ { static const UNIT input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; static const UNIT input2[] = { 'A', 'm', 'i', 'g', 'o' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, nf, &cmp) == 0); ASSERT (cmp == 1); } /* Shorter and longer strings. */ { static const UNIT input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; static const UNIT input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, nf, &cmp) == 0); ASSERT (cmp == 1); } } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-cased.c��������������������������������������������������0000664�0000000�0000000�00000010172�14110572173�0021271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x01BA }, { 0x01BC, 0x01BF }, { 0x01C4, 0x0293 }, { 0x0295, 0x02B8 }, { 0x02C0, 0x02C1 }, { 0x02E0, 0x02E4 }, { 0x0345, 0x0345 }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2134 }, { 0x2139, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x217F }, { 0x2183, 0x2184 }, { 0x24B6, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA640, 0xA66D }, { 0xA680, 0xA69D }, { 0xA722, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F8, 0xA7FA }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x118A0, 0x118DF }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E900, 0x1E943 }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 } #define PREDICATE(c) uc_is_cased (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ignorable.c����������������������������������������������0000664�0000000�0000000�00000022717�14110572173�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002E, 0x002E }, { 0x003A, 0x003A }, { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x00A8, 0x00A8 }, { 0x00AD, 0x00AD }, { 0x00AF, 0x00AF }, { 0x00B4, 0x00B4 }, { 0x00B7, 0x00B8 }, { 0x02B9, 0x02BF }, { 0x02C2, 0x02DF }, { 0x02E5, 0x0344 }, { 0x0346, 0x036F }, { 0x0374, 0x0375 }, { 0x0384, 0x0385 }, { 0x0387, 0x0387 }, { 0x0483, 0x0489 }, { 0x0559, 0x0559 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x05F4, 0x05F4 }, { 0x0600, 0x0605 }, { 0x0610, 0x061A }, { 0x061C, 0x061C }, { 0x0640, 0x0640 }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DD }, { 0x06DF, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0816, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0971, 0x0971 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D01 }, { 0x0D41, 0x0D44 }, { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E46, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1037 }, { 0x1039, 0x103A }, { 0x103D, 0x103E }, { 0x1058, 0x1059 }, { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x10FC, 0x10FC }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180E }, { 0x1843, 0x1843 }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA7, 0x1AA7 }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x200B, 0x200F }, { 0x2018, 0x2019 }, { 0x2024, 0x2024 }, { 0x2027, 0x2027 }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x302A, 0x302D }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x3099, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA67F, 0xA67F }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA700, 0xA721 }, { 0xA788, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9CF, 0xA9CF }, { 0xA9E5, 0xA9E6 }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA70, 0xAA70 }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADD, 0xAADD }, { 0xAAEC, 0xAAED }, { 0xAAF3, 0xAAF4 }, { 0xAAF6, 0xAAF6 }, { 0xAB5B, 0xAB5B }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFBB2, 0xFBC1 }, { 0xFE00, 0xFE0F }, { 0xFE13, 0xFE13 }, { 0xFE20, 0xFE2F }, { 0xFE52, 0xFE52 }, { 0xFE55, 0xFE55 }, { 0xFEFF, 0xFEFF }, { 0xFF07, 0xFF07 }, { 0xFF0E, 0xFF0E }, { 0xFF1A, 0xFF1A }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F }, { 0xFFE3, 0xFFE3 }, { 0xFFF9, 0xFFFB }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111CA, 0x111CC }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133C, 0x1133C }, { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16B40, 0x16B43 }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x1BC9D, 0x1BC9E }, { 0x1BCA0, 0x1BCA3 }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0x1F3FB, 0x1F3FF }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_case_ignorable (c) #include "test-predicate-part2.h" �������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-is-cased.h�����������������������������������������������0000664�0000000�0000000�00000003441�14110572173�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for a Unicode string. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.0, chapter 3. */ { static const UNIT input[] = { 'A', 'B', 'C' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'a', 'b', 'c' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'a', 'B', 'c' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'a', 'B', 'c', '1', '2', '3' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { '1', '2', '3' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-is-casefolded.h������������������������������������������0000664�0000000�0000000�00000002775�14110572173�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) { { static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } ���gnulib-20210822~d383792/tests/unicase/test-is-lowercase.h�������������������������������������������0000664�0000000�0000000�00000005323�14110572173�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.0, chapter 3. */ { static const UNIT input[] = { 'a' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'a', '2' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { '3' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } /* Test cases from Unicode 5.1.0. */ { static const UNIT input[] = { 'H', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'h', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'H', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'h', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-is-titlecase.h�������������������������������������������0000664�0000000�0000000�00000005323�14110572173�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.0, chapter 3. */ { static const UNIT input[] = { 'A' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'A', '2' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { '3' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } /* Test cases from Unicode 5.1.0. */ { static const UNIT input[] = { 'H', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'h', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'H', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'h', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-is-uppercase.h�������������������������������������������0000664�0000000�0000000�00000005323�14110572173�0022621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.0, chapter 3. */ { static const UNIT input[] = { 'A' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'A', '2' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { '3' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } /* Test cases from Unicode 5.1.0. */ { static const UNIT input[] = { 'H', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const UNIT input[] = { 'h', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'H', 'h' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const UNIT input[] = { 'h', 'H' }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-locale-language.c����������������������������������������0000664�0000000�0000000�00000002333�14110572173�0023232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of language code determination. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <locale.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { const char *expected; const char *language; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; expected = argv[1]; language = uc_locale_language (); ASSERT (strcmp (language, expected) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-locale-language.sh���������������������������������������0000775�0000000�0000000�00000001555�14110572173�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh LC_ALL=C ${CHECKER} ./test-locale-language${EXEEXT} '' || exit 1 : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-locale-language${EXEEXT} fr || exit 1 fi : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-locale-language${EXEEXT} fr || exit 1 fi : ${LOCALE_JA=ja_JP} if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ${CHECKER} ./test-locale-language${EXEEXT} ja || exit 1 fi : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 != none; then LC_ALL=$LOCALE_TR_UTF8 ${CHECKER} ./test-locale-language${EXEEXT} tr || exit 1 fi : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN ${CHECKER} ./test-locale-language${EXEEXT} zh || exit 1 fi exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-mapping-part1.h������������������������������������������0000664�0000000�0000000�00000002045�14110572173�0022677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unicase.h" #include <string.h> #include "macros.h" /* Pair of Unicode characters. */ typedef struct { ucs4_t ch; ucs4_t value; } pair_t; /* Characters and their mapping values, ignoring no-op mappings, in increasing order. */ static const pair_t mapping[] = { �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-mapping-part2.h������������������������������������������0000664�0000000�0000000�00000002051�14110572173�0022675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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/>. */ }; int main () { unsigned int c; size_t i; c = 0; for (i = 0; i < SIZEOF (mapping); i++) { for (; c < mapping[i].ch; c++) ASSERT (MAP (c) == c); ASSERT (MAP (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (MAP (c) == c); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-predicate-part1.h����������������������������������������0000664�0000000�0000000�00000002056�14110572173�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unicase/caseprop.h" #include <string.h> #include "macros.h" /* Interval of Unicode characters. */ typedef struct { ucs4_t start; ucs4_t end; } interval_t; /* Set of Unicode characters, described as list of intervals, in increasing order. */ static const interval_t set[] = { ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-predicate-part2.h����������������������������������������0000664�0000000�0000000�00000002064�14110572173�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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/>. */ }; int main () { unsigned int c; size_t i; c = 0; for (i = 0; i < SIZEOF (set); i++) { for (; c < set[i].start; c++) ASSERT (!PREDICATE (c)); for (; c <= set[i].end; c++) ASSERT (PREDICATE (c)); } for (; c < 0x110000; c++) ASSERT (!PREDICATE (c)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-casecmp.c��������������������������������������������0000664�0000000�0000000�00000031343�14110572173�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint16_t #include "test-casecmp.h" #undef UNIT static void test_nonascii (int (*my_casecmp) (const uint16_t *, size_t, const uint16_t *, size_t, const char *, uninorm_t, int *)) { /* Normalization effects. */ { static const uint16_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; static const uint16_t input2[] = { 'H', 'O', 0x0308, 'h', 'L', 'e' }; static const uint16_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; static const uint16_t input4[] = { 'H', 'O', 0x0308, 'h', 'L', 'e', 'n' }; static const uint16_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input1[] = { 0x00C4 }; static const uint16_t input2[] = { 0x0041, 0x0308 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input1[] = { 0x01DE }; static const uint16_t input2[] = { 0x0041, 0x0308, 0x0304 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input1[] = { 0x1FC1 }; static const uint16_t input2[] = { 0x00A8, 0x0342 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input1[] = { 0xAE00 }; static const uint16_t input2[] = { 0xADF8, 0x11AF }; static const uint16_t input3[] = { 0x1100, 0x1173, 0x11AF }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input1[] = { 0xADF8 }; static const uint16_t input2[] = { 0x1100, 0x1173 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input1[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t input2[] = { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t input3[] = { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint16_t input1[] = { 0x0149 }; static const uint16_t input2[] = { 0x02BC, 0x006E }; static const uint16_t input3[] = { 0x02BC, 0x004E }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint16_t input1[] = { 0x0390 }; static const uint16_t input2[] = { 0x03B9, 0x0308, 0x0301 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint16_t input[] = { 0x0049 }; static const uint16_t casefolded[] = { 0x0069 }; static const uint16_t casefolded_tr[] = { 0x0131 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER I */ static const uint16_t input[] = { 0x0069 }; static const uint16_t casefolded[] = { 0x0049 }; static const uint16_t casefolded_tr[] = { 0x0130 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint16_t input[] = { 0x0130 }; static const uint16_t casefolded[] = { 0x0069, 0x0307 }; static const uint16_t casefolded_tr[] = { 0x0069 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint16_t input[] = { 0x0131 }; static const uint16_t casefolded[] = { 0x0049 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* "topkapı" */ static const uint16_t input[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; static const uint16_t casefolded[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint16_t input1[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint16_t input2[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint16_t input1[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint16_t input2[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 }; static const uint16_t input3[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint16_t input[] = { 0x01F0, 0x0323 }; static const uint16_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; static const uint16_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); ASSERT (cmp != 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u16_casecmp, UNINORM_NFD); test_nonascii (u16_casecmp); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-casecoll.c�������������������������������������������0000664�0000000�0000000�00000002276�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint16_t #include "test-casecmp.h" #undef UNIT int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll on ASCII strings should behave like strcasecmp. */ test_ascii (u16_casecoll, UNINORM_NFC); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-casefold.c�������������������������������������������0000664�0000000�0000000�00000020456�14110572173�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_casefold (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t casefolded[] = { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint16_t input[] = { 0x0149 }; static const uint16_t casefolded[] = { 0x02BC, 0x006E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint16_t input[] = { 0x0390 }; static const uint16_t casefolded[] = { 0x03B9, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint16_t input[] = { 0x0049 }; static const uint16_t casefolded[] = { 0x0069 }; static const uint16_t casefolded_tr[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint16_t input[] = { 0x0069 }; static const uint16_t casefolded[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint16_t input[] = { 0x0130 }; static const uint16_t casefolded[] = { 0x0069, 0x0307 }; static const uint16_t casefolded_tr[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint16_t input[] = { 0x0131 }; static const uint16_t casefolded[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* "topkapı" */ static const uint16_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint16_t casefolded[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint16_t casefolded[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint16_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint16_t casefolded[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint16_t input[] = { 0x01F0, 0x0323 }; static const uint16_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; static const uint16_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; static const uint16_t casefolded_normalized[] = { 0x01F0, 0x0323 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-is-cased.c�������������������������������������������0000664�0000000�0000000�00000002003�14110572173�0022305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-16 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #include "test-is-cased.h" #undef UNIT int main () { test_ascii (u16_is_cased); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-is-casefolded.c��������������������������������������0000664�0000000�0000000�00000002547�14110572173�0023334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #include "test-is-casefolded.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint16_t input[] = { 0x00DF }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } int main () { test_ascii (u16_is_casefolded); test_nonascii (u16_is_casefolded); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-is-lowercase.c���������������������������������������0000664�0000000�0000000�00000004000�14110572173�0023211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #include "test-is-lowercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint16_t input[] = { 0x24D7 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x24BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint16_t input[] = { 0x02B0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x1D34 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x02BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u16_is_lowercase); test_nonascii (u16_is_lowercase); return 0; } gnulib-20210822~d383792/tests/unicase/test-u16-is-titlecase.c���������������������������������������0000664�0000000�0000000�00000002021�14110572173�0023203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #include "test-is-titlecase.h" #undef UNIT int main () { test_ascii (u16_is_titlecase); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-is-uppercase.c���������������������������������������0000664�0000000�0000000�00000004000�14110572173�0023214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #include "test-is-uppercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint16_t input[] = { 0x24D7 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint16_t input[] = { 0x24BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x02B0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x1D34 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint16_t input[] = { 0x02BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u16_is_uppercase); test_nonascii (u16_is_uppercase); return 0; } gnulib-20210822~d383792/tests/unicase/test-u16-tolower.c��������������������������������������������0000664�0000000�0000000�00000024162�14110572173�0022322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_tolower (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t casemapped[] = { 'g', 'r', 0x00FC, 0x00DF, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint16_t input[] = { 0x0049 }; static const uint16_t casemapped[] = { 0x0069 }; static const uint16_t casemapped_tr[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint16_t input[] = { 0x0069 }; static const uint16_t casemapped[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint16_t input[] = { 0x0130 }; static const uint16_t casemapped[] = { 0x0069, 0x0307 }; static const uint16_t casemapped_tr[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint16_t input[] = { 0x0131 }; static const uint16_t casemapped[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "TOPKAPI" */ static const uint16_t input[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; static const uint16_t casemapped[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "HEIß" */ static const uint16_t input[] = { 0x0048, 0x0045, 0x0049, 0x00DF }; static const uint16_t casemapped[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ static const uint16_t input[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; static const uint16_t casemapped[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Σ" -> "σ" */ static const uint16_t input[] = { 0x03A3 }; static const uint16_t casemapped[] = { 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ" -> "ας" */ static const uint16_t input[] = { 0x0391, 0x03A3 }; static const uint16_t casemapped[] = { 0x03B1, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if not followed by a case-ignorable sequence and then a cased letter. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* "ΑΣΑ" -> "ασα" */ static const uint16_t input[] = { 0x0391, 0x03A3, 0x0391 }; static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x03B1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:" -> "ας:" */ static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A }; static const uint16_t casemapped[] = { 0x03B1, 0x03C2, 0x003A }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:Α" -> "ασ:α" */ static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x0391 }; static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x03B1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A }; static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A, 0x0020 }; static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A, 0x0020 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if preceded by a case-ignorable sequence and a cased letter before it. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* ":Σ" -> ":σ" */ static const uint16_t input[] = { 0x003A, 0x03A3 }; static const uint16_t casemapped[] = { 0x003A, 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Α:Σ" -> "α:ς" */ static const uint16_t input[] = { 0x0391, 0x003A, 0x03A3 }; static const uint16_t casemapped[] = { 0x03B1, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ͺ:Σ" -> "ͺ:ς" */ static const uint16_t input[] = { 0x037A, 0x003A, 0x03A3 }; static const uint16_t casemapped[] = { 0x037A, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* " ͺ:Σ" -> " ͺ:ς" */ static const uint16_t input[] = { 0x0020, 0x037A, 0x003A, 0x03A3 }; static const uint16_t casemapped[] = { 0x0020, 0x037A, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-totitle.c��������������������������������������������0000664�0000000�0000000�00000020012�14110572173�0022301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_totitle (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'R', 0x00DC, 0x00DF, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t casemapped[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'q', 'r', 't', '(', 'B', 0x00B2, '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint16_t input[] = { 0x0149 }; static const uint16_t casemapped[] = { 0x02BC, 0x004E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint16_t input[] = { 0x0390 }; static const uint16_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint16_t input[] = { 0x0049 }; static const uint16_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint16_t input[] = { 0x0069 }; static const uint16_t casemapped[] = { 0x0049 }; static const uint16_t casemapped_tr[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint16_t input[] = { 0x0130 }; static const uint16_t casemapped[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint16_t input[] = { 0x0131 }; static const uint16_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint16_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint16_t casemapped[] = { 0x0054, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint16_t casemapped[] = { 0x0048, 0x0065, 0x0069, 0x00DF }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint16_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint16_t casemapped[] = { 0x03A0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03A0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint16_t input[] = { 0x01F0, 0x0323 }; static const uint16_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; static const uint16_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u16-toupper.c��������������������������������������������0000664�0000000�0000000�00000020032�14110572173�0022315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_toupper (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t casemapped[] = { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint16_t input[] = { 0x0149 }; static const uint16_t casemapped[] = { 0x02BC, 0x004E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint16_t input[] = { 0x0390 }; static const uint16_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint16_t input[] = { 0x0049 }; static const uint16_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint16_t input[] = { 0x0069 }; static const uint16_t casemapped[] = { 0x0049 }; static const uint16_t casemapped_tr[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint16_t input[] = { 0x0130 }; static const uint16_t casemapped[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint16_t input[] = { 0x0131 }; static const uint16_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint16_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint16_t casemapped[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint16_t casemapped[] = { 0x0048, 0x0045, 0x0049, 0x0053, 0x0053 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint16_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint16_t casemapped[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint16_t input[] = { 0x01F0, 0x0323 }; static const uint16_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; static const uint16_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-casecmp.c��������������������������������������������0000664�0000000�0000000�00000031343�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint32_t #include "test-casecmp.h" #undef UNIT static void test_nonascii (int (*my_casecmp) (const uint32_t *, size_t, const uint32_t *, size_t, const char *, uninorm_t, int *)) { /* Normalization effects. */ { static const uint32_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; static const uint32_t input2[] = { 'H', 'O', 0x0308, 'h', 'L', 'e' }; static const uint32_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; static const uint32_t input4[] = { 'H', 'O', 0x0308, 'h', 'L', 'e', 'n' }; static const uint32_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input1[] = { 0x00C4 }; static const uint32_t input2[] = { 0x0041, 0x0308 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input1[] = { 0x01DE }; static const uint32_t input2[] = { 0x0041, 0x0308, 0x0304 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input1[] = { 0x1FC1 }; static const uint32_t input2[] = { 0x00A8, 0x0342 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input1[] = { 0xAE00 }; static const uint32_t input2[] = { 0xADF8, 0x11AF }; static const uint32_t input3[] = { 0x1100, 0x1173, 0x11AF }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input1[] = { 0xADF8 }; static const uint32_t input2[] = { 0x1100, 0x1173 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input1[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t input2[] = { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t input3[] = { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint32_t input1[] = { 0x0149 }; static const uint32_t input2[] = { 0x02BC, 0x006E }; static const uint32_t input3[] = { 0x02BC, 0x004E }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint32_t input1[] = { 0x0390 }; static const uint32_t input2[] = { 0x03B9, 0x0308, 0x0301 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint32_t input[] = { 0x0049 }; static const uint32_t casefolded[] = { 0x0069 }; static const uint32_t casefolded_tr[] = { 0x0131 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER I */ static const uint32_t input[] = { 0x0069 }; static const uint32_t casefolded[] = { 0x0049 }; static const uint32_t casefolded_tr[] = { 0x0130 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint32_t input[] = { 0x0130 }; static const uint32_t casefolded[] = { 0x0069, 0x0307 }; static const uint32_t casefolded_tr[] = { 0x0069 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint32_t input[] = { 0x0131 }; static const uint32_t casefolded[] = { 0x0049 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* "topkapı" */ static const uint32_t input[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; static const uint32_t casefolded[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint32_t input1[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint32_t input2[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint32_t input1[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint32_t input2[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 }; static const uint32_t input3[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint32_t input[] = { 0x01F0, 0x0323 }; static const uint32_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; static const uint32_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); ASSERT (cmp != 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u32_casecmp, UNINORM_NFD); test_nonascii (u32_casecmp); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-casecoll.c�������������������������������������������0000664�0000000�0000000�00000002276�14110572173�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint32_t #include "test-casecmp.h" #undef UNIT int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll on ASCII strings should behave like strcasecmp. */ test_ascii (u32_casecoll, UNINORM_NFC); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-casefold.c�������������������������������������������0000664�0000000�0000000�00000020456�14110572173�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_casefold (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t casefolded[] = { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint32_t input[] = { 0x0149 }; static const uint32_t casefolded[] = { 0x02BC, 0x006E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint32_t input[] = { 0x0390 }; static const uint32_t casefolded[] = { 0x03B9, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint32_t input[] = { 0x0049 }; static const uint32_t casefolded[] = { 0x0069 }; static const uint32_t casefolded_tr[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint32_t input[] = { 0x0069 }; static const uint32_t casefolded[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint32_t input[] = { 0x0130 }; static const uint32_t casefolded[] = { 0x0069, 0x0307 }; static const uint32_t casefolded_tr[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint32_t input[] = { 0x0131 }; static const uint32_t casefolded[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* "topkapı" */ static const uint32_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint32_t casefolded[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint32_t casefolded[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint32_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint32_t casefolded[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint32_t input[] = { 0x01F0, 0x0323 }; static const uint32_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; static const uint32_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; static const uint32_t casefolded_normalized[] = { 0x01F0, 0x0323 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-is-cased.c�������������������������������������������0000664�0000000�0000000�00000002003�14110572173�0022303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-32 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint32_t #include "test-is-cased.h" #undef UNIT int main () { test_ascii (u32_is_cased); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-is-casefolded.c��������������������������������������0000664�0000000�0000000�00000002547�14110572173�0023332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint32_t #include "test-is-casefolded.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint32_t input[] = { 0x00DF }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } int main () { test_ascii (u32_is_casefolded); test_nonascii (u32_is_casefolded); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-is-lowercase.c���������������������������������������0000664�0000000�0000000�00000004000�14110572173�0023207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint32_t #include "test-is-lowercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint32_t input[] = { 0x24D7 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x24BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint32_t input[] = { 0x02B0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x1D34 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x02BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u32_is_lowercase); test_nonascii (u32_is_lowercase); return 0; } gnulib-20210822~d383792/tests/unicase/test-u32-is-titlecase.c���������������������������������������0000664�0000000�0000000�00000002021�14110572173�0023201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint32_t #include "test-is-titlecase.h" #undef UNIT int main () { test_ascii (u32_is_titlecase); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-is-uppercase.c���������������������������������������0000664�0000000�0000000�00000004000�14110572173�0023212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint32_t #include "test-is-uppercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint32_t input[] = { 0x24D7 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint32_t input[] = { 0x24BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x02B0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x1D34 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint32_t input[] = { 0x02BD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u32_is_uppercase); test_nonascii (u32_is_uppercase); return 0; } gnulib-20210822~d383792/tests/unicase/test-u32-tolower.c��������������������������������������������0000664�0000000�0000000�00000024162�14110572173�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_tolower (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t casemapped[] = { 'g', 'r', 0x00FC, 0x00DF, ' ', 'g', 'o', 't', 't', '.', ' ', 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint32_t input[] = { 0x0049 }; static const uint32_t casemapped[] = { 0x0069 }; static const uint32_t casemapped_tr[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint32_t input[] = { 0x0069 }; static const uint32_t casemapped[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint32_t input[] = { 0x0130 }; static const uint32_t casemapped[] = { 0x0069, 0x0307 }; static const uint32_t casemapped_tr[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint32_t input[] = { 0x0131 }; static const uint32_t casemapped[] = { 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "TOPKAPI" */ static const uint32_t input[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; static const uint32_t casemapped[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "HEIß" */ static const uint32_t input[] = { 0x0048, 0x0045, 0x0049, 0x00DF }; static const uint32_t casemapped[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ static const uint32_t input[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; static const uint32_t casemapped[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Σ" -> "σ" */ static const uint32_t input[] = { 0x03A3 }; static const uint32_t casemapped[] = { 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ" -> "ας" */ static const uint32_t input[] = { 0x0391, 0x03A3 }; static const uint32_t casemapped[] = { 0x03B1, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if not followed by a case-ignorable sequence and then a cased letter. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* "ΑΣΑ" -> "ασα" */ static const uint32_t input[] = { 0x0391, 0x03A3, 0x0391 }; static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x03B1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:" -> "ας:" */ static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A }; static const uint32_t casemapped[] = { 0x03B1, 0x03C2, 0x003A }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:Α" -> "ασ:α" */ static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x0391 }; static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x03B1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A }; static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A, 0x0020 }; static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A, 0x0020 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if preceded by a case-ignorable sequence and a cased letter before it. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* ":Σ" -> ":σ" */ static const uint32_t input[] = { 0x003A, 0x03A3 }; static const uint32_t casemapped[] = { 0x003A, 0x03C3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Α:Σ" -> "α:ς" */ static const uint32_t input[] = { 0x0391, 0x003A, 0x03A3 }; static const uint32_t casemapped[] = { 0x03B1, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ͺ:Σ" -> "ͺ:ς" */ static const uint32_t input[] = { 0x037A, 0x003A, 0x03A3 }; static const uint32_t casemapped[] = { 0x037A, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* " ͺ:Σ" -> " ͺ:ς" */ static const uint32_t input[] = { 0x0020, 0x037A, 0x003A, 0x03A3 }; static const uint32_t casemapped[] = { 0x0020, 0x037A, 0x003A, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-totitle.c��������������������������������������������0000664�0000000�0000000�00000020012�14110572173�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_totitle (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'R', 0x00DC, 0x00DF, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t casemapped[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'q', 'r', 't', '(', 'B', 0x00B2, '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint32_t input[] = { 0x0149 }; static const uint32_t casemapped[] = { 0x02BC, 0x004E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint32_t input[] = { 0x0390 }; static const uint32_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint32_t input[] = { 0x0049 }; static const uint32_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint32_t input[] = { 0x0069 }; static const uint32_t casemapped[] = { 0x0049 }; static const uint32_t casemapped_tr[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint32_t input[] = { 0x0130 }; static const uint32_t casemapped[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint32_t input[] = { 0x0131 }; static const uint32_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint32_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint32_t casemapped[] = { 0x0054, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint32_t casemapped[] = { 0x0048, 0x0065, 0x0069, 0x00DF }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint32_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint32_t casemapped[] = { 0x03A0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03A0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint32_t input[] = { 0x01F0, 0x0323 }; static const uint32_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; static const uint32_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u32-toupper.c��������������������������������������������0000664�0000000�0000000�00000020032�14110572173�0022313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_toupper (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t casemapped[] = { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, 0x0419, 0x0422, 0x0415, '!', ' ', 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint32_t input[] = { 0x0149 }; static const uint32_t casemapped[] = { 0x02BC, 0x004E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint32_t input[] = { 0x0390 }; static const uint32_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint32_t input[] = { 0x0049 }; static const uint32_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint32_t input[] = { 0x0069 }; static const uint32_t casemapped[] = { 0x0049 }; static const uint32_t casemapped_tr[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint32_t input[] = { 0x0130 }; static const uint32_t casemapped[] = { 0x0130 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint32_t input[] = { 0x0131 }; static const uint32_t casemapped[] = { 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint32_t input[] = { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; static const uint32_t casemapped[] = { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; static const uint32_t casemapped[] = { 0x0048, 0x0045, 0x0049, 0x0053, 0x0053 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint32_t input[] = { 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 }; static const uint32_t casemapped[] = { 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint32_t input[] = { 0x01F0, 0x0323 }; static const uint32_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; static const uint32_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-casecmp.c���������������������������������������������0000664�0000000�0000000�00000033041�14110572173�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint8_t #include "test-casecmp.h" #undef UNIT static void test_nonascii (int (*my_casecmp) (const uint8_t *, size_t, const uint8_t *, size_t, const char *, uninorm_t, int *)) { /* Normalization effects. */ { static const uint8_t input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; static const uint8_t input2[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e' }; static const uint8_t input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; static const uint8_t input4[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e', 'n' }; static const uint8_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input1[] = { 0xC3, 0x84 }; static const uint8_t input2[] = { 0x41, 0xCC, 0x88 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input1[] = { 0xC7, 0x9E }; static const uint8_t input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input1[] = { 0xE1, 0xBF, 0x81 }; static const uint8_t input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input1[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; static const uint8_t input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input1[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input1[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t input2[] = { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t input3[] = { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint8_t input1[] = { 0xC5, 0x89 }; static const uint8_t input2[] = { 0xCA, 0xBC, 0x6E }; static const uint8_t input3[] = { 0xCA, 0xBC, 0x4E }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint8_t input1[] = { 0xCE, 0x90 }; static const uint8_t input2[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint8_t input[] = { 0x49 }; static const uint8_t casefolded[] = { 0x69 }; static const uint8_t casefolded_tr[] = { 0xC4, 0xB1 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER I */ static const uint8_t input[] = { 0x69 }; static const uint8_t casefolded[] = { 0x49 }; static const uint8_t casefolded_tr[] = { 0xC4, 0xB0 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint8_t input[] = { 0xC4, 0xB0 }; static const uint8_t casefolded[] = { 0x69, 0xCC, 0x87 }; static const uint8_t casefolded_tr[] = { 0x69 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint8_t input[] = { 0xC4, 0xB1 }; static const uint8_t casefolded[] = { 0x49 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* "topkapı" */ static const uint8_t input[] = { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; static const uint8_t casefolded[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint8_t input1[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const uint8_t input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint8_t input1[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const uint8_t input2[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 }; static const uint8_t input3[] = { 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const uint8_t casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const uint8_t casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); ASSERT (cmp != 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u8_casecmp, UNINORM_NFD); test_nonascii (u8_casecmp); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-casecoll.c��������������������������������������������0000664�0000000�0000000�00000002273�14110572173�0022334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "uninorm.h" #include "macros.h" #define UNIT uint8_t #include "test-casecmp.h" #undef UNIT int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll on ASCII strings should behave like strcasecmp. */ test_ascii (u8_casecoll, UNINORM_NFC); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-casefold.c��������������������������������������������0000664�0000000�0000000�00000021410�14110572173�0022321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_casefold (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_casefold (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t casefolded[] = { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint8_t input[] = { 0xC5, 0x89 }; static const uint8_t casefolded[] = { 0xCA, 0xBC, 0x6E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint8_t input[] = { 0xCE, 0x90 }; static const uint8_t casefolded[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint8_t input[] = { 0x49 }; static const uint8_t casefolded[] = { 0x69 }; static const uint8_t casefolded_tr[] = { 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint8_t input[] = { 0x69 }; static const uint8_t casefolded[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint8_t input[] = { 0xC4, 0xB0 }; static const uint8_t casefolded[] = { 0x69, 0xCC, 0x87 }; static const uint8_t casefolded_tr[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint8_t input[] = { 0xC4, 0xB1 }; static const uint8_t casefolded[] = { 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } { /* "topkapı" */ static const uint8_t input[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; static const uint8_t casefolded[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const uint8_t casefolded[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint8_t input[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const uint8_t casefolded[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const uint8_t casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const uint8_t casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; static const uint8_t casefolded_normalized[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-is-cased.c��������������������������������������������0000664�0000000�0000000�00000002000�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-8 string. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint8_t #include "test-is-cased.h" #undef UNIT int main () { test_ascii (u8_is_cased); return 0; } gnulib-20210822~d383792/tests/unicase/test-u8-is-casefolded.c���������������������������������������0000664�0000000�0000000�00000002545�14110572173�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is already case-folded. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint8_t #include "test-is-casefolded.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint8_t input[] = { 0xC3, 0x9F }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } } int main () { test_ascii (u8_is_casefolded); test_nonascii (u8_is_casefolded); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-is-lowercase.c����������������������������������������0000664�0000000�0000000�00000004034�14110572173�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely lower case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint8_t #include "test-is-lowercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint8_t input[] = { 0xE2, 0x93, 0x97 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xE2, 0x92, 0xBD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint8_t input[] = { 0xCA, 0xB0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xE1, 0x80, 0xB4 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xCA, 0xBD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u8_is_lowercase); test_nonascii (u8_is_lowercase); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-is-titlecase.c����������������������������������������0000664�0000000�0000000�00000002016�14110572173�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely title case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint8_t #include "test-is-titlecase.h" #undef UNIT int main () { test_ascii (u8_is_titlecase); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-is-uppercase.c����������������������������������������0000664�0000000�0000000�00000004034�14110572173�0023144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely upper case. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include "unistr.h" #include "macros.h" #define UNIT uint8_t #include "test-is-uppercase.h" #undef UNIT static void test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) { /* Test cases from Unicode 5.1.0. */ { static const uint8_t input[] = { 0xE2, 0x93, 0x97 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == false); } { static const uint8_t input[] = { 0xE2, 0x92, 0xBD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xCA, 0xB0 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xE1, 0x80, 0xB4 }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } { static const uint8_t input[] = { 0xCA, 0xBD }; bool result; ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); ASSERT (result == true); } } int main () { test_ascii (u8_is_uppercase); test_nonascii (u8_is_uppercase); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-tolower.c���������������������������������������������0000664�0000000�0000000�00000025255�14110572173�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_tolower (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_tolower (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t casemapped[] = { 'g', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'g', 'o', 't', 't', '.', ' ', 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint8_t input[] = { 0x49 }; static const uint8_t casemapped[] = { 0x69 }; static const uint8_t casemapped_tr[] = { 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER I */ static const uint8_t input[] = { 0x69 }; static const uint8_t casemapped[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint8_t input[] = { 0xC4, 0xB0 }; static const uint8_t casemapped[] = { 0x69, 0xCC, 0x87 }; static const uint8_t casemapped_tr[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint8_t input[] = { 0xC4, 0xB1}; static const uint8_t casemapped[] = { 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "TOPKAPI" */ static const uint8_t input[] = { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; static const uint8_t casemapped[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "HEIß" */ static const uint8_t input[] = { 0x48, 0x45, 0x49, 0xC3, 0x9F }; static const uint8_t casemapped[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ static const uint8_t input[] = { 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Σ" -> "σ" */ static const uint8_t input[] = { 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0xCF, 0x83 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ" -> "ας" */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if not followed by a case-ignorable sequence and then a cased letter. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* "ΑΣΑ" -> "ασα" */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0xCE, 0x91 }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0xCE, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:" -> "ας:" */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x82, 0x3A }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:Α" -> "ασ:α" */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCE, 0x91 }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCE, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCD, 0xBA }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCD, 0xBA }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCD, 0xBA, 0x20 }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCD, 0xBA, 0x20 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* It's a final sigma only if preceded by a case-ignorable sequence and a cased letter before it. Note that U+0345 and U+037A are simultaneously case-ignorable and cased (which is a bit paradoxical). */ { /* ":Σ" -> ":σ" */ static const uint8_t input[] = { 0x3A, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0x3A, 0xCF, 0x83 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "Α:Σ" -> "α:ς" */ static const uint8_t input[] = { 0xCE, 0x91, 0x3A, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0xCE, 0xB1, 0x3A, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "ͺ:Σ" -> "ͺ:ς" */ static const uint8_t input[] = { 0xCD, 0xBA, 0x3A, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0xCD, 0xBA, 0x3A, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* " ͺ:Σ" -> " ͺ:ς" */ static const uint8_t input[] = { 0x20, 0xCD, 0xBA, 0x3A, 0xCE, 0xA3 }; static const uint8_t casemapped[] = { 0x20, 0xCD, 0xBA, 0x3A, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-u8-totitle.c���������������������������������������������0000664�0000000�0000000�00000020754�14110572173�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_totitle (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_totitle (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'R', 0xC3, 0x9C, 0xC3, 0x9F, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t casemapped[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'q', 'r', 't', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint8_t input[] = { 0xC5, 0x89 }; static const uint8_t casemapped[] = { 0xCA, 0xBC, 0x4E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint8_t input[] = { 0xCE, 0x90 }; static const uint8_t casemapped[] = { 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint8_t input[] = { 0x49 }; static const uint8_t casemapped[] = { 0x49 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint8_t input[] = { 0x69 }; static const uint8_t casemapped[] = { 0x49 }; static const uint8_t casemapped_tr[] = { 0xC4, 0xB0 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint8_t input[] = { 0xC4, 0xB0 }; static const uint8_t casemapped[] = { 0xC4, 0xB0 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint8_t input[] = { 0xC4, 0xB1 }; static const uint8_t casemapped[] = { 0x49 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint8_t input[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; static const uint8_t casemapped[] = { 0x54, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const uint8_t casemapped[] = { 0x48, 0x65, 0x69, 0xC3, 0x9F }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint8_t input[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const uint8_t casemapped[] = { 0xCE, 0xA0, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCE, 0xA0, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const uint8_t casemapped[] = { 0x4A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const uint8_t casemapped_normalized[] = { 0x4A, 0xCC, 0xA3, 0xCC, 0x8C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ��������������������gnulib-20210822~d383792/tests/unicase/test-u8-toupper.c���������������������������������������������0000664�0000000�0000000�00000020746�14110572173�0022252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <stdlib.h> #include "unistr.h" #include "uninorm.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const char *iso639_language, uninorm_t nf, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_toupper (input, input_length, iso639_language, nf, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_toupper (input, input_length, iso639_language, nf, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t casemapped[] = { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const uint8_t input[] = { 0xC5, 0x89 }; static const uint8_t casemapped[] = { 0xCA, 0xBC, 0x4E }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const uint8_t input[] = { 0xCE, 0x90 }; static const uint8_t casemapped[] = { 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const uint8_t input[] = { 0x49 }; static const uint8_t casemapped[] = { 0x49 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER I */ static const uint8_t input[] = { 0x69 }; static const uint8_t casemapped[] = { 0x49 }; static const uint8_t casemapped_tr[] = { 0xC4, 0xB0 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const uint8_t input[] = { 0xC4, 0xB0 }; static const uint8_t casemapped[] = { 0xC4, 0xB0 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const uint8_t input[] = { 0xC4, 0xB1 }; static const uint8_t casemapped[] = { 0x49 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } { /* "topkapı" */ static const uint8_t input[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; static const uint8_t casemapped[] = { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const uint8_t casemapped[] = { 0x48, 0x45, 0x49, 0x53, 0x53 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const uint8_t input[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const uint8_t casemapped[] = { 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const uint8_t casemapped[] = { 0x4A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const uint8_t casemapped_normalized[] = { 0x4A, 0xCC, 0xA3, 0xCC, 0x8C }; ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); } return 0; } ��������������������������gnulib-20210822~d383792/tests/unicase/test-uc_tolower.c���������������������������������������������0000664�0000000�0000000�00000077603�14110572173�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. Copyright (C) 2009 Free Software Foundation, Inc. This 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/>. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ #include "test-mapping-part1.h" { 0x0041, 0x0061 }, { 0x0042, 0x0062 }, { 0x0043, 0x0063 }, { 0x0044, 0x0064 }, { 0x0045, 0x0065 }, { 0x0046, 0x0066 }, { 0x0047, 0x0067 }, { 0x0048, 0x0068 }, { 0x0049, 0x0069 }, { 0x004A, 0x006A }, { 0x004B, 0x006B }, { 0x004C, 0x006C }, { 0x004D, 0x006D }, { 0x004E, 0x006E }, { 0x004F, 0x006F }, { 0x0050, 0x0070 }, { 0x0051, 0x0071 }, { 0x0052, 0x0072 }, { 0x0053, 0x0073 }, { 0x0054, 0x0074 }, { 0x0055, 0x0075 }, { 0x0056, 0x0076 }, { 0x0057, 0x0077 }, { 0x0058, 0x0078 }, { 0x0059, 0x0079 }, { 0x005A, 0x007A }, { 0x00C0, 0x00E0 }, { 0x00C1, 0x00E1 }, { 0x00C2, 0x00E2 }, { 0x00C3, 0x00E3 }, { 0x00C4, 0x00E4 }, { 0x00C5, 0x00E5 }, { 0x00C6, 0x00E6 }, { 0x00C7, 0x00E7 }, { 0x00C8, 0x00E8 }, { 0x00C9, 0x00E9 }, { 0x00CA, 0x00EA }, { 0x00CB, 0x00EB }, { 0x00CC, 0x00EC }, { 0x00CD, 0x00ED }, { 0x00CE, 0x00EE }, { 0x00CF, 0x00EF }, { 0x00D0, 0x00F0 }, { 0x00D1, 0x00F1 }, { 0x00D2, 0x00F2 }, { 0x00D3, 0x00F3 }, { 0x00D4, 0x00F4 }, { 0x00D5, 0x00F5 }, { 0x00D6, 0x00F6 }, { 0x00D8, 0x00F8 }, { 0x00D9, 0x00F9 }, { 0x00DA, 0x00FA }, { 0x00DB, 0x00FB }, { 0x00DC, 0x00FC }, { 0x00DD, 0x00FD }, { 0x00DE, 0x00FE }, { 0x0100, 0x0101 }, { 0x0102, 0x0103 }, { 0x0104, 0x0105 }, { 0x0106, 0x0107 }, { 0x0108, 0x0109 }, { 0x010A, 0x010B }, { 0x010C, 0x010D }, { 0x010E, 0x010F }, { 0x0110, 0x0111 }, { 0x0112, 0x0113 }, { 0x0114, 0x0115 }, { 0x0116, 0x0117 }, { 0x0118, 0x0119 }, { 0x011A, 0x011B }, { 0x011C, 0x011D }, { 0x011E, 0x011F }, { 0x0120, 0x0121 }, { 0x0122, 0x0123 }, { 0x0124, 0x0125 }, { 0x0126, 0x0127 }, { 0x0128, 0x0129 }, { 0x012A, 0x012B }, { 0x012C, 0x012D }, { 0x012E, 0x012F }, { 0x0130, 0x0069 }, { 0x0132, 0x0133 }, { 0x0134, 0x0135 }, { 0x0136, 0x0137 }, { 0x0139, 0x013A }, { 0x013B, 0x013C }, { 0x013D, 0x013E }, { 0x013F, 0x0140 }, { 0x0141, 0x0142 }, { 0x0143, 0x0144 }, { 0x0145, 0x0146 }, { 0x0147, 0x0148 }, { 0x014A, 0x014B }, { 0x014C, 0x014D }, { 0x014E, 0x014F }, { 0x0150, 0x0151 }, { 0x0152, 0x0153 }, { 0x0154, 0x0155 }, { 0x0156, 0x0157 }, { 0x0158, 0x0159 }, { 0x015A, 0x015B }, { 0x015C, 0x015D }, { 0x015E, 0x015F }, { 0x0160, 0x0161 }, { 0x0162, 0x0163 }, { 0x0164, 0x0165 }, { 0x0166, 0x0167 }, { 0x0168, 0x0169 }, { 0x016A, 0x016B }, { 0x016C, 0x016D }, { 0x016E, 0x016F }, { 0x0170, 0x0171 }, { 0x0172, 0x0173 }, { 0x0174, 0x0175 }, { 0x0176, 0x0177 }, { 0x0178, 0x00FF }, { 0x0179, 0x017A }, { 0x017B, 0x017C }, { 0x017D, 0x017E }, { 0x0181, 0x0253 }, { 0x0182, 0x0183 }, { 0x0184, 0x0185 }, { 0x0186, 0x0254 }, { 0x0187, 0x0188 }, { 0x0189, 0x0256 }, { 0x018A, 0x0257 }, { 0x018B, 0x018C }, { 0x018E, 0x01DD }, { 0x018F, 0x0259 }, { 0x0190, 0x025B }, { 0x0191, 0x0192 }, { 0x0193, 0x0260 }, { 0x0194, 0x0263 }, { 0x0196, 0x0269 }, { 0x0197, 0x0268 }, { 0x0198, 0x0199 }, { 0x019C, 0x026F }, { 0x019D, 0x0272 }, { 0x019F, 0x0275 }, { 0x01A0, 0x01A1 }, { 0x01A2, 0x01A3 }, { 0x01A4, 0x01A5 }, { 0x01A6, 0x0280 }, { 0x01A7, 0x01A8 }, { 0x01A9, 0x0283 }, { 0x01AC, 0x01AD }, { 0x01AE, 0x0288 }, { 0x01AF, 0x01B0 }, { 0x01B1, 0x028A }, { 0x01B2, 0x028B }, { 0x01B3, 0x01B4 }, { 0x01B5, 0x01B6 }, { 0x01B7, 0x0292 }, { 0x01B8, 0x01B9 }, { 0x01BC, 0x01BD }, { 0x01C4, 0x01C6 }, { 0x01C5, 0x01C6 }, { 0x01C7, 0x01C9 }, { 0x01C8, 0x01C9 }, { 0x01CA, 0x01CC }, { 0x01CB, 0x01CC }, { 0x01CD, 0x01CE }, { 0x01CF, 0x01D0 }, { 0x01D1, 0x01D2 }, { 0x01D3, 0x01D4 }, { 0x01D5, 0x01D6 }, { 0x01D7, 0x01D8 }, { 0x01D9, 0x01DA }, { 0x01DB, 0x01DC }, { 0x01DE, 0x01DF }, { 0x01E0, 0x01E1 }, { 0x01E2, 0x01E3 }, { 0x01E4, 0x01E5 }, { 0x01E6, 0x01E7 }, { 0x01E8, 0x01E9 }, { 0x01EA, 0x01EB }, { 0x01EC, 0x01ED }, { 0x01EE, 0x01EF }, { 0x01F1, 0x01F3 }, { 0x01F2, 0x01F3 }, { 0x01F4, 0x01F5 }, { 0x01F6, 0x0195 }, { 0x01F7, 0x01BF }, { 0x01F8, 0x01F9 }, { 0x01FA, 0x01FB }, { 0x01FC, 0x01FD }, { 0x01FE, 0x01FF }, { 0x0200, 0x0201 }, { 0x0202, 0x0203 }, { 0x0204, 0x0205 }, { 0x0206, 0x0207 }, { 0x0208, 0x0209 }, { 0x020A, 0x020B }, { 0x020C, 0x020D }, { 0x020E, 0x020F }, { 0x0210, 0x0211 }, { 0x0212, 0x0213 }, { 0x0214, 0x0215 }, { 0x0216, 0x0217 }, { 0x0218, 0x0219 }, { 0x021A, 0x021B }, { 0x021C, 0x021D }, { 0x021E, 0x021F }, { 0x0220, 0x019E }, { 0x0222, 0x0223 }, { 0x0224, 0x0225 }, { 0x0226, 0x0227 }, { 0x0228, 0x0229 }, { 0x022A, 0x022B }, { 0x022C, 0x022D }, { 0x022E, 0x022F }, { 0x0230, 0x0231 }, { 0x0232, 0x0233 }, { 0x023A, 0x2C65 }, { 0x023B, 0x023C }, { 0x023D, 0x019A }, { 0x023E, 0x2C66 }, { 0x0241, 0x0242 }, { 0x0243, 0x0180 }, { 0x0244, 0x0289 }, { 0x0245, 0x028C }, { 0x0246, 0x0247 }, { 0x0248, 0x0249 }, { 0x024A, 0x024B }, { 0x024C, 0x024D }, { 0x024E, 0x024F }, { 0x0370, 0x0371 }, { 0x0372, 0x0373 }, { 0x0376, 0x0377 }, { 0x037F, 0x03F3 }, { 0x0386, 0x03AC }, { 0x0388, 0x03AD }, { 0x0389, 0x03AE }, { 0x038A, 0x03AF }, { 0x038C, 0x03CC }, { 0x038E, 0x03CD }, { 0x038F, 0x03CE }, { 0x0391, 0x03B1 }, { 0x0392, 0x03B2 }, { 0x0393, 0x03B3 }, { 0x0394, 0x03B4 }, { 0x0395, 0x03B5 }, { 0x0396, 0x03B6 }, { 0x0397, 0x03B7 }, { 0x0398, 0x03B8 }, { 0x0399, 0x03B9 }, { 0x039A, 0x03BA }, { 0x039B, 0x03BB }, { 0x039C, 0x03BC }, { 0x039D, 0x03BD }, { 0x039E, 0x03BE }, { 0x039F, 0x03BF }, { 0x03A0, 0x03C0 }, { 0x03A1, 0x03C1 }, { 0x03A3, 0x03C3 }, { 0x03A4, 0x03C4 }, { 0x03A5, 0x03C5 }, { 0x03A6, 0x03C6 }, { 0x03A7, 0x03C7 }, { 0x03A8, 0x03C8 }, { 0x03A9, 0x03C9 }, { 0x03AA, 0x03CA }, { 0x03AB, 0x03CB }, { 0x03CF, 0x03D7 }, { 0x03D8, 0x03D9 }, { 0x03DA, 0x03DB }, { 0x03DC, 0x03DD }, { 0x03DE, 0x03DF }, { 0x03E0, 0x03E1 }, { 0x03E2, 0x03E3 }, { 0x03E4, 0x03E5 }, { 0x03E6, 0x03E7 }, { 0x03E8, 0x03E9 }, { 0x03EA, 0x03EB }, { 0x03EC, 0x03ED }, { 0x03EE, 0x03EF }, { 0x03F4, 0x03B8 }, { 0x03F7, 0x03F8 }, { 0x03F9, 0x03F2 }, { 0x03FA, 0x03FB }, { 0x03FD, 0x037B }, { 0x03FE, 0x037C }, { 0x03FF, 0x037D }, { 0x0400, 0x0450 }, { 0x0401, 0x0451 }, { 0x0402, 0x0452 }, { 0x0403, 0x0453 }, { 0x0404, 0x0454 }, { 0x0405, 0x0455 }, { 0x0406, 0x0456 }, { 0x0407, 0x0457 }, { 0x0408, 0x0458 }, { 0x0409, 0x0459 }, { 0x040A, 0x045A }, { 0x040B, 0x045B }, { 0x040C, 0x045C }, { 0x040D, 0x045D }, { 0x040E, 0x045E }, { 0x040F, 0x045F }, { 0x0410, 0x0430 }, { 0x0411, 0x0431 }, { 0x0412, 0x0432 }, { 0x0413, 0x0433 }, { 0x0414, 0x0434 }, { 0x0415, 0x0435 }, { 0x0416, 0x0436 }, { 0x0417, 0x0437 }, { 0x0418, 0x0438 }, { 0x0419, 0x0439 }, { 0x041A, 0x043A }, { 0x041B, 0x043B }, { 0x041C, 0x043C }, { 0x041D, 0x043D }, { 0x041E, 0x043E }, { 0x041F, 0x043F }, { 0x0420, 0x0440 }, { 0x0421, 0x0441 }, { 0x0422, 0x0442 }, { 0x0423, 0x0443 }, { 0x0424, 0x0444 }, { 0x0425, 0x0445 }, { 0x0426, 0x0446 }, { 0x0427, 0x0447 }, { 0x0428, 0x0448 }, { 0x0429, 0x0449 }, { 0x042A, 0x044A }, { 0x042B, 0x044B }, { 0x042C, 0x044C }, { 0x042D, 0x044D }, { 0x042E, 0x044E }, { 0x042F, 0x044F }, { 0x0460, 0x0461 }, { 0x0462, 0x0463 }, { 0x0464, 0x0465 }, { 0x0466, 0x0467 }, { 0x0468, 0x0469 }, { 0x046A, 0x046B }, { 0x046C, 0x046D }, { 0x046E, 0x046F }, { 0x0470, 0x0471 }, { 0x0472, 0x0473 }, { 0x0474, 0x0475 }, { 0x0476, 0x0477 }, { 0x0478, 0x0479 }, { 0x047A, 0x047B }, { 0x047C, 0x047D }, { 0x047E, 0x047F }, { 0x0480, 0x0481 }, { 0x048A, 0x048B }, { 0x048C, 0x048D }, { 0x048E, 0x048F }, { 0x0490, 0x0491 }, { 0x0492, 0x0493 }, { 0x0494, 0x0495 }, { 0x0496, 0x0497 }, { 0x0498, 0x0499 }, { 0x049A, 0x049B }, { 0x049C, 0x049D }, { 0x049E, 0x049F }, { 0x04A0, 0x04A1 }, { 0x04A2, 0x04A3 }, { 0x04A4, 0x04A5 }, { 0x04A6, 0x04A7 }, { 0x04A8, 0x04A9 }, { 0x04AA, 0x04AB }, { 0x04AC, 0x04AD }, { 0x04AE, 0x04AF }, { 0x04B0, 0x04B1 }, { 0x04B2, 0x04B3 }, { 0x04B4, 0x04B5 }, { 0x04B6, 0x04B7 }, { 0x04B8, 0x04B9 }, { 0x04BA, 0x04BB }, { 0x04BC, 0x04BD }, { 0x04BE, 0x04BF }, { 0x04C0, 0x04CF }, { 0x04C1, 0x04C2 }, { 0x04C3, 0x04C4 }, { 0x04C5, 0x04C6 }, { 0x04C7, 0x04C8 }, { 0x04C9, 0x04CA }, { 0x04CB, 0x04CC }, { 0x04CD, 0x04CE }, { 0x04D0, 0x04D1 }, { 0x04D2, 0x04D3 }, { 0x04D4, 0x04D5 }, { 0x04D6, 0x04D7 }, { 0x04D8, 0x04D9 }, { 0x04DA, 0x04DB }, { 0x04DC, 0x04DD }, { 0x04DE, 0x04DF }, { 0x04E0, 0x04E1 }, { 0x04E2, 0x04E3 }, { 0x04E4, 0x04E5 }, { 0x04E6, 0x04E7 }, { 0x04E8, 0x04E9 }, { 0x04EA, 0x04EB }, { 0x04EC, 0x04ED }, { 0x04EE, 0x04EF }, { 0x04F0, 0x04F1 }, { 0x04F2, 0x04F3 }, { 0x04F4, 0x04F5 }, { 0x04F6, 0x04F7 }, { 0x04F8, 0x04F9 }, { 0x04FA, 0x04FB }, { 0x04FC, 0x04FD }, { 0x04FE, 0x04FF }, { 0x0500, 0x0501 }, { 0x0502, 0x0503 }, { 0x0504, 0x0505 }, { 0x0506, 0x0507 }, { 0x0508, 0x0509 }, { 0x050A, 0x050B }, { 0x050C, 0x050D }, { 0x050E, 0x050F }, { 0x0510, 0x0511 }, { 0x0512, 0x0513 }, { 0x0514, 0x0515 }, { 0x0516, 0x0517 }, { 0x0518, 0x0519 }, { 0x051A, 0x051B }, { 0x051C, 0x051D }, { 0x051E, 0x051F }, { 0x0520, 0x0521 }, { 0x0522, 0x0523 }, { 0x0524, 0x0525 }, { 0x0526, 0x0527 }, { 0x0528, 0x0529 }, { 0x052A, 0x052B }, { 0x052C, 0x052D }, { 0x052E, 0x052F }, { 0x0531, 0x0561 }, { 0x0532, 0x0562 }, { 0x0533, 0x0563 }, { 0x0534, 0x0564 }, { 0x0535, 0x0565 }, { 0x0536, 0x0566 }, { 0x0537, 0x0567 }, { 0x0538, 0x0568 }, { 0x0539, 0x0569 }, { 0x053A, 0x056A }, { 0x053B, 0x056B }, { 0x053C, 0x056C }, { 0x053D, 0x056D }, { 0x053E, 0x056E }, { 0x053F, 0x056F }, { 0x0540, 0x0570 }, { 0x0541, 0x0571 }, { 0x0542, 0x0572 }, { 0x0543, 0x0573 }, { 0x0544, 0x0574 }, { 0x0545, 0x0575 }, { 0x0546, 0x0576 }, { 0x0547, 0x0577 }, { 0x0548, 0x0578 }, { 0x0549, 0x0579 }, { 0x054A, 0x057A }, { 0x054B, 0x057B }, { 0x054C, 0x057C }, { 0x054D, 0x057D }, { 0x054E, 0x057E }, { 0x054F, 0x057F }, { 0x0550, 0x0580 }, { 0x0551, 0x0581 }, { 0x0552, 0x0582 }, { 0x0553, 0x0583 }, { 0x0554, 0x0584 }, { 0x0555, 0x0585 }, { 0x0556, 0x0586 }, { 0x10A0, 0x2D00 }, { 0x10A1, 0x2D01 }, { 0x10A2, 0x2D02 }, { 0x10A3, 0x2D03 }, { 0x10A4, 0x2D04 }, { 0x10A5, 0x2D05 }, { 0x10A6, 0x2D06 }, { 0x10A7, 0x2D07 }, { 0x10A8, 0x2D08 }, { 0x10A9, 0x2D09 }, { 0x10AA, 0x2D0A }, { 0x10AB, 0x2D0B }, { 0x10AC, 0x2D0C }, { 0x10AD, 0x2D0D }, { 0x10AE, 0x2D0E }, { 0x10AF, 0x2D0F }, { 0x10B0, 0x2D10 }, { 0x10B1, 0x2D11 }, { 0x10B2, 0x2D12 }, { 0x10B3, 0x2D13 }, { 0x10B4, 0x2D14 }, { 0x10B5, 0x2D15 }, { 0x10B6, 0x2D16 }, { 0x10B7, 0x2D17 }, { 0x10B8, 0x2D18 }, { 0x10B9, 0x2D19 }, { 0x10BA, 0x2D1A }, { 0x10BB, 0x2D1B }, { 0x10BC, 0x2D1C }, { 0x10BD, 0x2D1D }, { 0x10BE, 0x2D1E }, { 0x10BF, 0x2D1F }, { 0x10C0, 0x2D20 }, { 0x10C1, 0x2D21 }, { 0x10C2, 0x2D22 }, { 0x10C3, 0x2D23 }, { 0x10C4, 0x2D24 }, { 0x10C5, 0x2D25 }, { 0x10C7, 0x2D27 }, { 0x10CD, 0x2D2D }, { 0x13A0, 0xAB70 }, { 0x13A1, 0xAB71 }, { 0x13A2, 0xAB72 }, { 0x13A3, 0xAB73 }, { 0x13A4, 0xAB74 }, { 0x13A5, 0xAB75 }, { 0x13A6, 0xAB76 }, { 0x13A7, 0xAB77 }, { 0x13A8, 0xAB78 }, { 0x13A9, 0xAB79 }, { 0x13AA, 0xAB7A }, { 0x13AB, 0xAB7B }, { 0x13AC, 0xAB7C }, { 0x13AD, 0xAB7D }, { 0x13AE, 0xAB7E }, { 0x13AF, 0xAB7F }, { 0x13B0, 0xAB80 }, { 0x13B1, 0xAB81 }, { 0x13B2, 0xAB82 }, { 0x13B3, 0xAB83 }, { 0x13B4, 0xAB84 }, { 0x13B5, 0xAB85 }, { 0x13B6, 0xAB86 }, { 0x13B7, 0xAB87 }, { 0x13B8, 0xAB88 }, { 0x13B9, 0xAB89 }, { 0x13BA, 0xAB8A }, { 0x13BB, 0xAB8B }, { 0x13BC, 0xAB8C }, { 0x13BD, 0xAB8D }, { 0x13BE, 0xAB8E }, { 0x13BF, 0xAB8F }, { 0x13C0, 0xAB90 }, { 0x13C1, 0xAB91 }, { 0x13C2, 0xAB92 }, { 0x13C3, 0xAB93 }, { 0x13C4, 0xAB94 }, { 0x13C5, 0xAB95 }, { 0x13C6, 0xAB96 }, { 0x13C7, 0xAB97 }, { 0x13C8, 0xAB98 }, { 0x13C9, 0xAB99 }, { 0x13CA, 0xAB9A }, { 0x13CB, 0xAB9B }, { 0x13CC, 0xAB9C }, { 0x13CD, 0xAB9D }, { 0x13CE, 0xAB9E }, { 0x13CF, 0xAB9F }, { 0x13D0, 0xABA0 }, { 0x13D1, 0xABA1 }, { 0x13D2, 0xABA2 }, { 0x13D3, 0xABA3 }, { 0x13D4, 0xABA4 }, { 0x13D5, 0xABA5 }, { 0x13D6, 0xABA6 }, { 0x13D7, 0xABA7 }, { 0x13D8, 0xABA8 }, { 0x13D9, 0xABA9 }, { 0x13DA, 0xABAA }, { 0x13DB, 0xABAB }, { 0x13DC, 0xABAC }, { 0x13DD, 0xABAD }, { 0x13DE, 0xABAE }, { 0x13DF, 0xABAF }, { 0x13E0, 0xABB0 }, { 0x13E1, 0xABB1 }, { 0x13E2, 0xABB2 }, { 0x13E3, 0xABB3 }, { 0x13E4, 0xABB4 }, { 0x13E5, 0xABB5 }, { 0x13E6, 0xABB6 }, { 0x13E7, 0xABB7 }, { 0x13E8, 0xABB8 }, { 0x13E9, 0xABB9 }, { 0x13EA, 0xABBA }, { 0x13EB, 0xABBB }, { 0x13EC, 0xABBC }, { 0x13ED, 0xABBD }, { 0x13EE, 0xABBE }, { 0x13EF, 0xABBF }, { 0x13F0, 0x13F8 }, { 0x13F1, 0x13F9 }, { 0x13F2, 0x13FA }, { 0x13F3, 0x13FB }, { 0x13F4, 0x13FC }, { 0x13F5, 0x13FD }, { 0x1E00, 0x1E01 }, { 0x1E02, 0x1E03 }, { 0x1E04, 0x1E05 }, { 0x1E06, 0x1E07 }, { 0x1E08, 0x1E09 }, { 0x1E0A, 0x1E0B }, { 0x1E0C, 0x1E0D }, { 0x1E0E, 0x1E0F }, { 0x1E10, 0x1E11 }, { 0x1E12, 0x1E13 }, { 0x1E14, 0x1E15 }, { 0x1E16, 0x1E17 }, { 0x1E18, 0x1E19 }, { 0x1E1A, 0x1E1B }, { 0x1E1C, 0x1E1D }, { 0x1E1E, 0x1E1F }, { 0x1E20, 0x1E21 }, { 0x1E22, 0x1E23 }, { 0x1E24, 0x1E25 }, { 0x1E26, 0x1E27 }, { 0x1E28, 0x1E29 }, { 0x1E2A, 0x1E2B }, { 0x1E2C, 0x1E2D }, { 0x1E2E, 0x1E2F }, { 0x1E30, 0x1E31 }, { 0x1E32, 0x1E33 }, { 0x1E34, 0x1E35 }, { 0x1E36, 0x1E37 }, { 0x1E38, 0x1E39 }, { 0x1E3A, 0x1E3B }, { 0x1E3C, 0x1E3D }, { 0x1E3E, 0x1E3F }, { 0x1E40, 0x1E41 }, { 0x1E42, 0x1E43 }, { 0x1E44, 0x1E45 }, { 0x1E46, 0x1E47 }, { 0x1E48, 0x1E49 }, { 0x1E4A, 0x1E4B }, { 0x1E4C, 0x1E4D }, { 0x1E4E, 0x1E4F }, { 0x1E50, 0x1E51 }, { 0x1E52, 0x1E53 }, { 0x1E54, 0x1E55 }, { 0x1E56, 0x1E57 }, { 0x1E58, 0x1E59 }, { 0x1E5A, 0x1E5B }, { 0x1E5C, 0x1E5D }, { 0x1E5E, 0x1E5F }, { 0x1E60, 0x1E61 }, { 0x1E62, 0x1E63 }, { 0x1E64, 0x1E65 }, { 0x1E66, 0x1E67 }, { 0x1E68, 0x1E69 }, { 0x1E6A, 0x1E6B }, { 0x1E6C, 0x1E6D }, { 0x1E6E, 0x1E6F }, { 0x1E70, 0x1E71 }, { 0x1E72, 0x1E73 }, { 0x1E74, 0x1E75 }, { 0x1E76, 0x1E77 }, { 0x1E78, 0x1E79 }, { 0x1E7A, 0x1E7B }, { 0x1E7C, 0x1E7D }, { 0x1E7E, 0x1E7F }, { 0x1E80, 0x1E81 }, { 0x1E82, 0x1E83 }, { 0x1E84, 0x1E85 }, { 0x1E86, 0x1E87 }, { 0x1E88, 0x1E89 }, { 0x1E8A, 0x1E8B }, { 0x1E8C, 0x1E8D }, { 0x1E8E, 0x1E8F }, { 0x1E90, 0x1E91 }, { 0x1E92, 0x1E93 }, { 0x1E94, 0x1E95 }, { 0x1E9E, 0x00DF }, { 0x1EA0, 0x1EA1 }, { 0x1EA2, 0x1EA3 }, { 0x1EA4, 0x1EA5 }, { 0x1EA6, 0x1EA7 }, { 0x1EA8, 0x1EA9 }, { 0x1EAA, 0x1EAB }, { 0x1EAC, 0x1EAD }, { 0x1EAE, 0x1EAF }, { 0x1EB0, 0x1EB1 }, { 0x1EB2, 0x1EB3 }, { 0x1EB4, 0x1EB5 }, { 0x1EB6, 0x1EB7 }, { 0x1EB8, 0x1EB9 }, { 0x1EBA, 0x1EBB }, { 0x1EBC, 0x1EBD }, { 0x1EBE, 0x1EBF }, { 0x1EC0, 0x1EC1 }, { 0x1EC2, 0x1EC3 }, { 0x1EC4, 0x1EC5 }, { 0x1EC6, 0x1EC7 }, { 0x1EC8, 0x1EC9 }, { 0x1ECA, 0x1ECB }, { 0x1ECC, 0x1ECD }, { 0x1ECE, 0x1ECF }, { 0x1ED0, 0x1ED1 }, { 0x1ED2, 0x1ED3 }, { 0x1ED4, 0x1ED5 }, { 0x1ED6, 0x1ED7 }, { 0x1ED8, 0x1ED9 }, { 0x1EDA, 0x1EDB }, { 0x1EDC, 0x1EDD }, { 0x1EDE, 0x1EDF }, { 0x1EE0, 0x1EE1 }, { 0x1EE2, 0x1EE3 }, { 0x1EE4, 0x1EE5 }, { 0x1EE6, 0x1EE7 }, { 0x1EE8, 0x1EE9 }, { 0x1EEA, 0x1EEB }, { 0x1EEC, 0x1EED }, { 0x1EEE, 0x1EEF }, { 0x1EF0, 0x1EF1 }, { 0x1EF2, 0x1EF3 }, { 0x1EF4, 0x1EF5 }, { 0x1EF6, 0x1EF7 }, { 0x1EF8, 0x1EF9 }, { 0x1EFA, 0x1EFB }, { 0x1EFC, 0x1EFD }, { 0x1EFE, 0x1EFF }, { 0x1F08, 0x1F00 }, { 0x1F09, 0x1F01 }, { 0x1F0A, 0x1F02 }, { 0x1F0B, 0x1F03 }, { 0x1F0C, 0x1F04 }, { 0x1F0D, 0x1F05 }, { 0x1F0E, 0x1F06 }, { 0x1F0F, 0x1F07 }, { 0x1F18, 0x1F10 }, { 0x1F19, 0x1F11 }, { 0x1F1A, 0x1F12 }, { 0x1F1B, 0x1F13 }, { 0x1F1C, 0x1F14 }, { 0x1F1D, 0x1F15 }, { 0x1F28, 0x1F20 }, { 0x1F29, 0x1F21 }, { 0x1F2A, 0x1F22 }, { 0x1F2B, 0x1F23 }, { 0x1F2C, 0x1F24 }, { 0x1F2D, 0x1F25 }, { 0x1F2E, 0x1F26 }, { 0x1F2F, 0x1F27 }, { 0x1F38, 0x1F30 }, { 0x1F39, 0x1F31 }, { 0x1F3A, 0x1F32 }, { 0x1F3B, 0x1F33 }, { 0x1F3C, 0x1F34 }, { 0x1F3D, 0x1F35 }, { 0x1F3E, 0x1F36 }, { 0x1F3F, 0x1F37 }, { 0x1F48, 0x1F40 }, { 0x1F49, 0x1F41 }, { 0x1F4A, 0x1F42 }, { 0x1F4B, 0x1F43 }, { 0x1F4C, 0x1F44 }, { 0x1F4D, 0x1F45 }, { 0x1F59, 0x1F51 }, { 0x1F5B, 0x1F53 }, { 0x1F5D, 0x1F55 }, { 0x1F5F, 0x1F57 }, { 0x1F68, 0x1F60 }, { 0x1F69, 0x1F61 }, { 0x1F6A, 0x1F62 }, { 0x1F6B, 0x1F63 }, { 0x1F6C, 0x1F64 }, { 0x1F6D, 0x1F65 }, { 0x1F6E, 0x1F66 }, { 0x1F6F, 0x1F67 }, { 0x1F88, 0x1F80 }, { 0x1F89, 0x1F81 }, { 0x1F8A, 0x1F82 }, { 0x1F8B, 0x1F83 }, { 0x1F8C, 0x1F84 }, { 0x1F8D, 0x1F85 }, { 0x1F8E, 0x1F86 }, { 0x1F8F, 0x1F87 }, { 0x1F98, 0x1F90 }, { 0x1F99, 0x1F91 }, { 0x1F9A, 0x1F92 }, { 0x1F9B, 0x1F93 }, { 0x1F9C, 0x1F94 }, { 0x1F9D, 0x1F95 }, { 0x1F9E, 0x1F96 }, { 0x1F9F, 0x1F97 }, { 0x1FA8, 0x1FA0 }, { 0x1FA9, 0x1FA1 }, { 0x1FAA, 0x1FA2 }, { 0x1FAB, 0x1FA3 }, { 0x1FAC, 0x1FA4 }, { 0x1FAD, 0x1FA5 }, { 0x1FAE, 0x1FA6 }, { 0x1FAF, 0x1FA7 }, { 0x1FB8, 0x1FB0 }, { 0x1FB9, 0x1FB1 }, { 0x1FBA, 0x1F70 }, { 0x1FBB, 0x1F71 }, { 0x1FBC, 0x1FB3 }, { 0x1FC8, 0x1F72 }, { 0x1FC9, 0x1F73 }, { 0x1FCA, 0x1F74 }, { 0x1FCB, 0x1F75 }, { 0x1FCC, 0x1FC3 }, { 0x1FD8, 0x1FD0 }, { 0x1FD9, 0x1FD1 }, { 0x1FDA, 0x1F76 }, { 0x1FDB, 0x1F77 }, { 0x1FE8, 0x1FE0 }, { 0x1FE9, 0x1FE1 }, { 0x1FEA, 0x1F7A }, { 0x1FEB, 0x1F7B }, { 0x1FEC, 0x1FE5 }, { 0x1FF8, 0x1F78 }, { 0x1FF9, 0x1F79 }, { 0x1FFA, 0x1F7C }, { 0x1FFB, 0x1F7D }, { 0x1FFC, 0x1FF3 }, { 0x2126, 0x03C9 }, { 0x212A, 0x006B }, { 0x212B, 0x00E5 }, { 0x2132, 0x214E }, { 0x2160, 0x2170 }, { 0x2161, 0x2171 }, { 0x2162, 0x2172 }, { 0x2163, 0x2173 }, { 0x2164, 0x2174 }, { 0x2165, 0x2175 }, { 0x2166, 0x2176 }, { 0x2167, 0x2177 }, { 0x2168, 0x2178 }, { 0x2169, 0x2179 }, { 0x216A, 0x217A }, { 0x216B, 0x217B }, { 0x216C, 0x217C }, { 0x216D, 0x217D }, { 0x216E, 0x217E }, { 0x216F, 0x217F }, { 0x2183, 0x2184 }, { 0x24B6, 0x24D0 }, { 0x24B7, 0x24D1 }, { 0x24B8, 0x24D2 }, { 0x24B9, 0x24D3 }, { 0x24BA, 0x24D4 }, { 0x24BB, 0x24D5 }, { 0x24BC, 0x24D6 }, { 0x24BD, 0x24D7 }, { 0x24BE, 0x24D8 }, { 0x24BF, 0x24D9 }, { 0x24C0, 0x24DA }, { 0x24C1, 0x24DB }, { 0x24C2, 0x24DC }, { 0x24C3, 0x24DD }, { 0x24C4, 0x24DE }, { 0x24C5, 0x24DF }, { 0x24C6, 0x24E0 }, { 0x24C7, 0x24E1 }, { 0x24C8, 0x24E2 }, { 0x24C9, 0x24E3 }, { 0x24CA, 0x24E4 }, { 0x24CB, 0x24E5 }, { 0x24CC, 0x24E6 }, { 0x24CD, 0x24E7 }, { 0x24CE, 0x24E8 }, { 0x24CF, 0x24E9 }, { 0x2C00, 0x2C30 }, { 0x2C01, 0x2C31 }, { 0x2C02, 0x2C32 }, { 0x2C03, 0x2C33 }, { 0x2C04, 0x2C34 }, { 0x2C05, 0x2C35 }, { 0x2C06, 0x2C36 }, { 0x2C07, 0x2C37 }, { 0x2C08, 0x2C38 }, { 0x2C09, 0x2C39 }, { 0x2C0A, 0x2C3A }, { 0x2C0B, 0x2C3B }, { 0x2C0C, 0x2C3C }, { 0x2C0D, 0x2C3D }, { 0x2C0E, 0x2C3E }, { 0x2C0F, 0x2C3F }, { 0x2C10, 0x2C40 }, { 0x2C11, 0x2C41 }, { 0x2C12, 0x2C42 }, { 0x2C13, 0x2C43 }, { 0x2C14, 0x2C44 }, { 0x2C15, 0x2C45 }, { 0x2C16, 0x2C46 }, { 0x2C17, 0x2C47 }, { 0x2C18, 0x2C48 }, { 0x2C19, 0x2C49 }, { 0x2C1A, 0x2C4A }, { 0x2C1B, 0x2C4B }, { 0x2C1C, 0x2C4C }, { 0x2C1D, 0x2C4D }, { 0x2C1E, 0x2C4E }, { 0x2C1F, 0x2C4F }, { 0x2C20, 0x2C50 }, { 0x2C21, 0x2C51 }, { 0x2C22, 0x2C52 }, { 0x2C23, 0x2C53 }, { 0x2C24, 0x2C54 }, { 0x2C25, 0x2C55 }, { 0x2C26, 0x2C56 }, { 0x2C27, 0x2C57 }, { 0x2C28, 0x2C58 }, { 0x2C29, 0x2C59 }, { 0x2C2A, 0x2C5A }, { 0x2C2B, 0x2C5B }, { 0x2C2C, 0x2C5C }, { 0x2C2D, 0x2C5D }, { 0x2C2E, 0x2C5E }, { 0x2C60, 0x2C61 }, { 0x2C62, 0x026B }, { 0x2C63, 0x1D7D }, { 0x2C64, 0x027D }, { 0x2C67, 0x2C68 }, { 0x2C69, 0x2C6A }, { 0x2C6B, 0x2C6C }, { 0x2C6D, 0x0251 }, { 0x2C6E, 0x0271 }, { 0x2C6F, 0x0250 }, { 0x2C70, 0x0252 }, { 0x2C72, 0x2C73 }, { 0x2C75, 0x2C76 }, { 0x2C7E, 0x023F }, { 0x2C7F, 0x0240 }, { 0x2C80, 0x2C81 }, { 0x2C82, 0x2C83 }, { 0x2C84, 0x2C85 }, { 0x2C86, 0x2C87 }, { 0x2C88, 0x2C89 }, { 0x2C8A, 0x2C8B }, { 0x2C8C, 0x2C8D }, { 0x2C8E, 0x2C8F }, { 0x2C90, 0x2C91 }, { 0x2C92, 0x2C93 }, { 0x2C94, 0x2C95 }, { 0x2C96, 0x2C97 }, { 0x2C98, 0x2C99 }, { 0x2C9A, 0x2C9B }, { 0x2C9C, 0x2C9D }, { 0x2C9E, 0x2C9F }, { 0x2CA0, 0x2CA1 }, { 0x2CA2, 0x2CA3 }, { 0x2CA4, 0x2CA5 }, { 0x2CA6, 0x2CA7 }, { 0x2CA8, 0x2CA9 }, { 0x2CAA, 0x2CAB }, { 0x2CAC, 0x2CAD }, { 0x2CAE, 0x2CAF }, { 0x2CB0, 0x2CB1 }, { 0x2CB2, 0x2CB3 }, { 0x2CB4, 0x2CB5 }, { 0x2CB6, 0x2CB7 }, { 0x2CB8, 0x2CB9 }, { 0x2CBA, 0x2CBB }, { 0x2CBC, 0x2CBD }, { 0x2CBE, 0x2CBF }, { 0x2CC0, 0x2CC1 }, { 0x2CC2, 0x2CC3 }, { 0x2CC4, 0x2CC5 }, { 0x2CC6, 0x2CC7 }, { 0x2CC8, 0x2CC9 }, { 0x2CCA, 0x2CCB }, { 0x2CCC, 0x2CCD }, { 0x2CCE, 0x2CCF }, { 0x2CD0, 0x2CD1 }, { 0x2CD2, 0x2CD3 }, { 0x2CD4, 0x2CD5 }, { 0x2CD6, 0x2CD7 }, { 0x2CD8, 0x2CD9 }, { 0x2CDA, 0x2CDB }, { 0x2CDC, 0x2CDD }, { 0x2CDE, 0x2CDF }, { 0x2CE0, 0x2CE1 }, { 0x2CE2, 0x2CE3 }, { 0x2CEB, 0x2CEC }, { 0x2CED, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0xA640, 0xA641 }, { 0xA642, 0xA643 }, { 0xA644, 0xA645 }, { 0xA646, 0xA647 }, { 0xA648, 0xA649 }, { 0xA64A, 0xA64B }, { 0xA64C, 0xA64D }, { 0xA64E, 0xA64F }, { 0xA650, 0xA651 }, { 0xA652, 0xA653 }, { 0xA654, 0xA655 }, { 0xA656, 0xA657 }, { 0xA658, 0xA659 }, { 0xA65A, 0xA65B }, { 0xA65C, 0xA65D }, { 0xA65E, 0xA65F }, { 0xA660, 0xA661 }, { 0xA662, 0xA663 }, { 0xA664, 0xA665 }, { 0xA666, 0xA667 }, { 0xA668, 0xA669 }, { 0xA66A, 0xA66B }, { 0xA66C, 0xA66D }, { 0xA680, 0xA681 }, { 0xA682, 0xA683 }, { 0xA684, 0xA685 }, { 0xA686, 0xA687 }, { 0xA688, 0xA689 }, { 0xA68A, 0xA68B }, { 0xA68C, 0xA68D }, { 0xA68E, 0xA68F }, { 0xA690, 0xA691 }, { 0xA692, 0xA693 }, { 0xA694, 0xA695 }, { 0xA696, 0xA697 }, { 0xA698, 0xA699 }, { 0xA69A, 0xA69B }, { 0xA722, 0xA723 }, { 0xA724, 0xA725 }, { 0xA726, 0xA727 }, { 0xA728, 0xA729 }, { 0xA72A, 0xA72B }, { 0xA72C, 0xA72D }, { 0xA72E, 0xA72F }, { 0xA732, 0xA733 }, { 0xA734, 0xA735 }, { 0xA736, 0xA737 }, { 0xA738, 0xA739 }, { 0xA73A, 0xA73B }, { 0xA73C, 0xA73D }, { 0xA73E, 0xA73F }, { 0xA740, 0xA741 }, { 0xA742, 0xA743 }, { 0xA744, 0xA745 }, { 0xA746, 0xA747 }, { 0xA748, 0xA749 }, { 0xA74A, 0xA74B }, { 0xA74C, 0xA74D }, { 0xA74E, 0xA74F }, { 0xA750, 0xA751 }, { 0xA752, 0xA753 }, { 0xA754, 0xA755 }, { 0xA756, 0xA757 }, { 0xA758, 0xA759 }, { 0xA75A, 0xA75B }, { 0xA75C, 0xA75D }, { 0xA75E, 0xA75F }, { 0xA760, 0xA761 }, { 0xA762, 0xA763 }, { 0xA764, 0xA765 }, { 0xA766, 0xA767 }, { 0xA768, 0xA769 }, { 0xA76A, 0xA76B }, { 0xA76C, 0xA76D }, { 0xA76E, 0xA76F }, { 0xA779, 0xA77A }, { 0xA77B, 0xA77C }, { 0xA77D, 0x1D79 }, { 0xA77E, 0xA77F }, { 0xA780, 0xA781 }, { 0xA782, 0xA783 }, { 0xA784, 0xA785 }, { 0xA786, 0xA787 }, { 0xA78B, 0xA78C }, { 0xA78D, 0x0265 }, { 0xA790, 0xA791 }, { 0xA792, 0xA793 }, { 0xA796, 0xA797 }, { 0xA798, 0xA799 }, { 0xA79A, 0xA79B }, { 0xA79C, 0xA79D }, { 0xA79E, 0xA79F }, { 0xA7A0, 0xA7A1 }, { 0xA7A2, 0xA7A3 }, { 0xA7A4, 0xA7A5 }, { 0xA7A6, 0xA7A7 }, { 0xA7A8, 0xA7A9 }, { 0xA7AA, 0x0266 }, { 0xA7AB, 0x025C }, { 0xA7AC, 0x0261 }, { 0xA7AD, 0x026C }, { 0xA7AE, 0x026A }, { 0xA7B0, 0x029E }, { 0xA7B1, 0x0287 }, { 0xA7B2, 0x029D }, { 0xA7B3, 0xAB53 }, { 0xA7B4, 0xA7B5 }, { 0xA7B6, 0xA7B7 }, { 0xFF21, 0xFF41 }, { 0xFF22, 0xFF42 }, { 0xFF23, 0xFF43 }, { 0xFF24, 0xFF44 }, { 0xFF25, 0xFF45 }, { 0xFF26, 0xFF46 }, { 0xFF27, 0xFF47 }, { 0xFF28, 0xFF48 }, { 0xFF29, 0xFF49 }, { 0xFF2A, 0xFF4A }, { 0xFF2B, 0xFF4B }, { 0xFF2C, 0xFF4C }, { 0xFF2D, 0xFF4D }, { 0xFF2E, 0xFF4E }, { 0xFF2F, 0xFF4F }, { 0xFF30, 0xFF50 }, { 0xFF31, 0xFF51 }, { 0xFF32, 0xFF52 }, { 0xFF33, 0xFF53 }, { 0xFF34, 0xFF54 }, { 0xFF35, 0xFF55 }, { 0xFF36, 0xFF56 }, { 0xFF37, 0xFF57 }, { 0xFF38, 0xFF58 }, { 0xFF39, 0xFF59 }, { 0xFF3A, 0xFF5A }, { 0x10400, 0x10428 }, { 0x10401, 0x10429 }, { 0x10402, 0x1042A }, { 0x10403, 0x1042B }, { 0x10404, 0x1042C }, { 0x10405, 0x1042D }, { 0x10406, 0x1042E }, { 0x10407, 0x1042F }, { 0x10408, 0x10430 }, { 0x10409, 0x10431 }, { 0x1040A, 0x10432 }, { 0x1040B, 0x10433 }, { 0x1040C, 0x10434 }, { 0x1040D, 0x10435 }, { 0x1040E, 0x10436 }, { 0x1040F, 0x10437 }, { 0x10410, 0x10438 }, { 0x10411, 0x10439 }, { 0x10412, 0x1043A }, { 0x10413, 0x1043B }, { 0x10414, 0x1043C }, { 0x10415, 0x1043D }, { 0x10416, 0x1043E }, { 0x10417, 0x1043F }, { 0x10418, 0x10440 }, { 0x10419, 0x10441 }, { 0x1041A, 0x10442 }, { 0x1041B, 0x10443 }, { 0x1041C, 0x10444 }, { 0x1041D, 0x10445 }, { 0x1041E, 0x10446 }, { 0x1041F, 0x10447 }, { 0x10420, 0x10448 }, { 0x10421, 0x10449 }, { 0x10422, 0x1044A }, { 0x10423, 0x1044B }, { 0x10424, 0x1044C }, { 0x10425, 0x1044D }, { 0x10426, 0x1044E }, { 0x10427, 0x1044F }, { 0x104B0, 0x104D8 }, { 0x104B1, 0x104D9 }, { 0x104B2, 0x104DA }, { 0x104B3, 0x104DB }, { 0x104B4, 0x104DC }, { 0x104B5, 0x104DD }, { 0x104B6, 0x104DE }, { 0x104B7, 0x104DF }, { 0x104B8, 0x104E0 }, { 0x104B9, 0x104E1 }, { 0x104BA, 0x104E2 }, { 0x104BB, 0x104E3 }, { 0x104BC, 0x104E4 }, { 0x104BD, 0x104E5 }, { 0x104BE, 0x104E6 }, { 0x104BF, 0x104E7 }, { 0x104C0, 0x104E8 }, { 0x104C1, 0x104E9 }, { 0x104C2, 0x104EA }, { 0x104C3, 0x104EB }, { 0x104C4, 0x104EC }, { 0x104C5, 0x104ED }, { 0x104C6, 0x104EE }, { 0x104C7, 0x104EF }, { 0x104C8, 0x104F0 }, { 0x104C9, 0x104F1 }, { 0x104CA, 0x104F2 }, { 0x104CB, 0x104F3 }, { 0x104CC, 0x104F4 }, { 0x104CD, 0x104F5 }, { 0x104CE, 0x104F6 }, { 0x104CF, 0x104F7 }, { 0x104D0, 0x104F8 }, { 0x104D1, 0x104F9 }, { 0x104D2, 0x104FA }, { 0x104D3, 0x104FB }, { 0x10C80, 0x10CC0 }, { 0x10C81, 0x10CC1 }, { 0x10C82, 0x10CC2 }, { 0x10C83, 0x10CC3 }, { 0x10C84, 0x10CC4 }, { 0x10C85, 0x10CC5 }, { 0x10C86, 0x10CC6 }, { 0x10C87, 0x10CC7 }, { 0x10C88, 0x10CC8 }, { 0x10C89, 0x10CC9 }, { 0x10C8A, 0x10CCA }, { 0x10C8B, 0x10CCB }, { 0x10C8C, 0x10CCC }, { 0x10C8D, 0x10CCD }, { 0x10C8E, 0x10CCE }, { 0x10C8F, 0x10CCF }, { 0x10C90, 0x10CD0 }, { 0x10C91, 0x10CD1 }, { 0x10C92, 0x10CD2 }, { 0x10C93, 0x10CD3 }, { 0x10C94, 0x10CD4 }, { 0x10C95, 0x10CD5 }, { 0x10C96, 0x10CD6 }, { 0x10C97, 0x10CD7 }, { 0x10C98, 0x10CD8 }, { 0x10C99, 0x10CD9 }, { 0x10C9A, 0x10CDA }, { 0x10C9B, 0x10CDB }, { 0x10C9C, 0x10CDC }, { 0x10C9D, 0x10CDD }, { 0x10C9E, 0x10CDE }, { 0x10C9F, 0x10CDF }, { 0x10CA0, 0x10CE0 }, { 0x10CA1, 0x10CE1 }, { 0x10CA2, 0x10CE2 }, { 0x10CA3, 0x10CE3 }, { 0x10CA4, 0x10CE4 }, { 0x10CA5, 0x10CE5 }, { 0x10CA6, 0x10CE6 }, { 0x10CA7, 0x10CE7 }, { 0x10CA8, 0x10CE8 }, { 0x10CA9, 0x10CE9 }, { 0x10CAA, 0x10CEA }, { 0x10CAB, 0x10CEB }, { 0x10CAC, 0x10CEC }, { 0x10CAD, 0x10CED }, { 0x10CAE, 0x10CEE }, { 0x10CAF, 0x10CEF }, { 0x10CB0, 0x10CF0 }, { 0x10CB1, 0x10CF1 }, { 0x10CB2, 0x10CF2 }, { 0x118A0, 0x118C0 }, { 0x118A1, 0x118C1 }, { 0x118A2, 0x118C2 }, { 0x118A3, 0x118C3 }, { 0x118A4, 0x118C4 }, { 0x118A5, 0x118C5 }, { 0x118A6, 0x118C6 }, { 0x118A7, 0x118C7 }, { 0x118A8, 0x118C8 }, { 0x118A9, 0x118C9 }, { 0x118AA, 0x118CA }, { 0x118AB, 0x118CB }, { 0x118AC, 0x118CC }, { 0x118AD, 0x118CD }, { 0x118AE, 0x118CE }, { 0x118AF, 0x118CF }, { 0x118B0, 0x118D0 }, { 0x118B1, 0x118D1 }, { 0x118B2, 0x118D2 }, { 0x118B3, 0x118D3 }, { 0x118B4, 0x118D4 }, { 0x118B5, 0x118D5 }, { 0x118B6, 0x118D6 }, { 0x118B7, 0x118D7 }, { 0x118B8, 0x118D8 }, { 0x118B9, 0x118D9 }, { 0x118BA, 0x118DA }, { 0x118BB, 0x118DB }, { 0x118BC, 0x118DC }, { 0x118BD, 0x118DD }, { 0x118BE, 0x118DE }, { 0x118BF, 0x118DF }, { 0x1E900, 0x1E922 }, { 0x1E901, 0x1E923 }, { 0x1E902, 0x1E924 }, { 0x1E903, 0x1E925 }, { 0x1E904, 0x1E926 }, { 0x1E905, 0x1E927 }, { 0x1E906, 0x1E928 }, { 0x1E907, 0x1E929 }, { 0x1E908, 0x1E92A }, { 0x1E909, 0x1E92B }, { 0x1E90A, 0x1E92C }, { 0x1E90B, 0x1E92D }, { 0x1E90C, 0x1E92E }, { 0x1E90D, 0x1E92F }, { 0x1E90E, 0x1E930 }, { 0x1E90F, 0x1E931 }, { 0x1E910, 0x1E932 }, { 0x1E911, 0x1E933 }, { 0x1E912, 0x1E934 }, { 0x1E913, 0x1E935 }, { 0x1E914, 0x1E936 }, { 0x1E915, 0x1E937 }, { 0x1E916, 0x1E938 }, { 0x1E917, 0x1E939 }, { 0x1E918, 0x1E93A }, { 0x1E919, 0x1E93B }, { 0x1E91A, 0x1E93C }, { 0x1E91B, 0x1E93D }, { 0x1E91C, 0x1E93E }, { 0x1E91D, 0x1E93F }, { 0x1E91E, 0x1E940 }, { 0x1E91F, 0x1E941 }, { 0x1E920, 0x1E942 }, { 0x1E921, 0x1E943 } #define MAP(c) uc_tolower (c) #include "test-mapping-part2.h" �����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-uc_totitle.c���������������������������������������������0000664�0000000�0000000�00000100433�14110572173�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. Copyright (C) 2009 Free Software Foundation, Inc. This 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/>. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ #include "test-mapping-part1.h" { 0x0061, 0x0041 }, { 0x0062, 0x0042 }, { 0x0063, 0x0043 }, { 0x0064, 0x0044 }, { 0x0065, 0x0045 }, { 0x0066, 0x0046 }, { 0x0067, 0x0047 }, { 0x0068, 0x0048 }, { 0x0069, 0x0049 }, { 0x006A, 0x004A }, { 0x006B, 0x004B }, { 0x006C, 0x004C }, { 0x006D, 0x004D }, { 0x006E, 0x004E }, { 0x006F, 0x004F }, { 0x0070, 0x0050 }, { 0x0071, 0x0051 }, { 0x0072, 0x0052 }, { 0x0073, 0x0053 }, { 0x0074, 0x0054 }, { 0x0075, 0x0055 }, { 0x0076, 0x0056 }, { 0x0077, 0x0057 }, { 0x0078, 0x0058 }, { 0x0079, 0x0059 }, { 0x007A, 0x005A }, { 0x00B5, 0x039C }, { 0x00E0, 0x00C0 }, { 0x00E1, 0x00C1 }, { 0x00E2, 0x00C2 }, { 0x00E3, 0x00C3 }, { 0x00E4, 0x00C4 }, { 0x00E5, 0x00C5 }, { 0x00E6, 0x00C6 }, { 0x00E7, 0x00C7 }, { 0x00E8, 0x00C8 }, { 0x00E9, 0x00C9 }, { 0x00EA, 0x00CA }, { 0x00EB, 0x00CB }, { 0x00EC, 0x00CC }, { 0x00ED, 0x00CD }, { 0x00EE, 0x00CE }, { 0x00EF, 0x00CF }, { 0x00F0, 0x00D0 }, { 0x00F1, 0x00D1 }, { 0x00F2, 0x00D2 }, { 0x00F3, 0x00D3 }, { 0x00F4, 0x00D4 }, { 0x00F5, 0x00D5 }, { 0x00F6, 0x00D6 }, { 0x00F8, 0x00D8 }, { 0x00F9, 0x00D9 }, { 0x00FA, 0x00DA }, { 0x00FB, 0x00DB }, { 0x00FC, 0x00DC }, { 0x00FD, 0x00DD }, { 0x00FE, 0x00DE }, { 0x00FF, 0x0178 }, { 0x0101, 0x0100 }, { 0x0103, 0x0102 }, { 0x0105, 0x0104 }, { 0x0107, 0x0106 }, { 0x0109, 0x0108 }, { 0x010B, 0x010A }, { 0x010D, 0x010C }, { 0x010F, 0x010E }, { 0x0111, 0x0110 }, { 0x0113, 0x0112 }, { 0x0115, 0x0114 }, { 0x0117, 0x0116 }, { 0x0119, 0x0118 }, { 0x011B, 0x011A }, { 0x011D, 0x011C }, { 0x011F, 0x011E }, { 0x0121, 0x0120 }, { 0x0123, 0x0122 }, { 0x0125, 0x0124 }, { 0x0127, 0x0126 }, { 0x0129, 0x0128 }, { 0x012B, 0x012A }, { 0x012D, 0x012C }, { 0x012F, 0x012E }, { 0x0131, 0x0049 }, { 0x0133, 0x0132 }, { 0x0135, 0x0134 }, { 0x0137, 0x0136 }, { 0x013A, 0x0139 }, { 0x013C, 0x013B }, { 0x013E, 0x013D }, { 0x0140, 0x013F }, { 0x0142, 0x0141 }, { 0x0144, 0x0143 }, { 0x0146, 0x0145 }, { 0x0148, 0x0147 }, { 0x014B, 0x014A }, { 0x014D, 0x014C }, { 0x014F, 0x014E }, { 0x0151, 0x0150 }, { 0x0153, 0x0152 }, { 0x0155, 0x0154 }, { 0x0157, 0x0156 }, { 0x0159, 0x0158 }, { 0x015B, 0x015A }, { 0x015D, 0x015C }, { 0x015F, 0x015E }, { 0x0161, 0x0160 }, { 0x0163, 0x0162 }, { 0x0165, 0x0164 }, { 0x0167, 0x0166 }, { 0x0169, 0x0168 }, { 0x016B, 0x016A }, { 0x016D, 0x016C }, { 0x016F, 0x016E }, { 0x0171, 0x0170 }, { 0x0173, 0x0172 }, { 0x0175, 0x0174 }, { 0x0177, 0x0176 }, { 0x017A, 0x0179 }, { 0x017C, 0x017B }, { 0x017E, 0x017D }, { 0x017F, 0x0053 }, { 0x0180, 0x0243 }, { 0x0183, 0x0182 }, { 0x0185, 0x0184 }, { 0x0188, 0x0187 }, { 0x018C, 0x018B }, { 0x0192, 0x0191 }, { 0x0195, 0x01F6 }, { 0x0199, 0x0198 }, { 0x019A, 0x023D }, { 0x019E, 0x0220 }, { 0x01A1, 0x01A0 }, { 0x01A3, 0x01A2 }, { 0x01A5, 0x01A4 }, { 0x01A8, 0x01A7 }, { 0x01AD, 0x01AC }, { 0x01B0, 0x01AF }, { 0x01B4, 0x01B3 }, { 0x01B6, 0x01B5 }, { 0x01B9, 0x01B8 }, { 0x01BD, 0x01BC }, { 0x01BF, 0x01F7 }, { 0x01C4, 0x01C5 }, { 0x01C6, 0x01C5 }, { 0x01C7, 0x01C8 }, { 0x01C9, 0x01C8 }, { 0x01CA, 0x01CB }, { 0x01CC, 0x01CB }, { 0x01CE, 0x01CD }, { 0x01D0, 0x01CF }, { 0x01D2, 0x01D1 }, { 0x01D4, 0x01D3 }, { 0x01D6, 0x01D5 }, { 0x01D8, 0x01D7 }, { 0x01DA, 0x01D9 }, { 0x01DC, 0x01DB }, { 0x01DD, 0x018E }, { 0x01DF, 0x01DE }, { 0x01E1, 0x01E0 }, { 0x01E3, 0x01E2 }, { 0x01E5, 0x01E4 }, { 0x01E7, 0x01E6 }, { 0x01E9, 0x01E8 }, { 0x01EB, 0x01EA }, { 0x01ED, 0x01EC }, { 0x01EF, 0x01EE }, { 0x01F1, 0x01F2 }, { 0x01F3, 0x01F2 }, { 0x01F5, 0x01F4 }, { 0x01F9, 0x01F8 }, { 0x01FB, 0x01FA }, { 0x01FD, 0x01FC }, { 0x01FF, 0x01FE }, { 0x0201, 0x0200 }, { 0x0203, 0x0202 }, { 0x0205, 0x0204 }, { 0x0207, 0x0206 }, { 0x0209, 0x0208 }, { 0x020B, 0x020A }, { 0x020D, 0x020C }, { 0x020F, 0x020E }, { 0x0211, 0x0210 }, { 0x0213, 0x0212 }, { 0x0215, 0x0214 }, { 0x0217, 0x0216 }, { 0x0219, 0x0218 }, { 0x021B, 0x021A }, { 0x021D, 0x021C }, { 0x021F, 0x021E }, { 0x0223, 0x0222 }, { 0x0225, 0x0224 }, { 0x0227, 0x0226 }, { 0x0229, 0x0228 }, { 0x022B, 0x022A }, { 0x022D, 0x022C }, { 0x022F, 0x022E }, { 0x0231, 0x0230 }, { 0x0233, 0x0232 }, { 0x023C, 0x023B }, { 0x023F, 0x2C7E }, { 0x0240, 0x2C7F }, { 0x0242, 0x0241 }, { 0x0247, 0x0246 }, { 0x0249, 0x0248 }, { 0x024B, 0x024A }, { 0x024D, 0x024C }, { 0x024F, 0x024E }, { 0x0250, 0x2C6F }, { 0x0251, 0x2C6D }, { 0x0252, 0x2C70 }, { 0x0253, 0x0181 }, { 0x0254, 0x0186 }, { 0x0256, 0x0189 }, { 0x0257, 0x018A }, { 0x0259, 0x018F }, { 0x025B, 0x0190 }, { 0x025C, 0xA7AB }, { 0x0260, 0x0193 }, { 0x0261, 0xA7AC }, { 0x0263, 0x0194 }, { 0x0265, 0xA78D }, { 0x0266, 0xA7AA }, { 0x0268, 0x0197 }, { 0x0269, 0x0196 }, { 0x026A, 0xA7AE }, { 0x026B, 0x2C62 }, { 0x026C, 0xA7AD }, { 0x026F, 0x019C }, { 0x0271, 0x2C6E }, { 0x0272, 0x019D }, { 0x0275, 0x019F }, { 0x027D, 0x2C64 }, { 0x0280, 0x01A6 }, { 0x0283, 0x01A9 }, { 0x0287, 0xA7B1 }, { 0x0288, 0x01AE }, { 0x0289, 0x0244 }, { 0x028A, 0x01B1 }, { 0x028B, 0x01B2 }, { 0x028C, 0x0245 }, { 0x0292, 0x01B7 }, { 0x029D, 0xA7B2 }, { 0x029E, 0xA7B0 }, { 0x0345, 0x0399 }, { 0x0371, 0x0370 }, { 0x0373, 0x0372 }, { 0x0377, 0x0376 }, { 0x037B, 0x03FD }, { 0x037C, 0x03FE }, { 0x037D, 0x03FF }, { 0x03AC, 0x0386 }, { 0x03AD, 0x0388 }, { 0x03AE, 0x0389 }, { 0x03AF, 0x038A }, { 0x03B1, 0x0391 }, { 0x03B2, 0x0392 }, { 0x03B3, 0x0393 }, { 0x03B4, 0x0394 }, { 0x03B5, 0x0395 }, { 0x03B6, 0x0396 }, { 0x03B7, 0x0397 }, { 0x03B8, 0x0398 }, { 0x03B9, 0x0399 }, { 0x03BA, 0x039A }, { 0x03BB, 0x039B }, { 0x03BC, 0x039C }, { 0x03BD, 0x039D }, { 0x03BE, 0x039E }, { 0x03BF, 0x039F }, { 0x03C0, 0x03A0 }, { 0x03C1, 0x03A1 }, { 0x03C2, 0x03A3 }, { 0x03C3, 0x03A3 }, { 0x03C4, 0x03A4 }, { 0x03C5, 0x03A5 }, { 0x03C6, 0x03A6 }, { 0x03C7, 0x03A7 }, { 0x03C8, 0x03A8 }, { 0x03C9, 0x03A9 }, { 0x03CA, 0x03AA }, { 0x03CB, 0x03AB }, { 0x03CC, 0x038C }, { 0x03CD, 0x038E }, { 0x03CE, 0x038F }, { 0x03D0, 0x0392 }, { 0x03D1, 0x0398 }, { 0x03D5, 0x03A6 }, { 0x03D6, 0x03A0 }, { 0x03D7, 0x03CF }, { 0x03D9, 0x03D8 }, { 0x03DB, 0x03DA }, { 0x03DD, 0x03DC }, { 0x03DF, 0x03DE }, { 0x03E1, 0x03E0 }, { 0x03E3, 0x03E2 }, { 0x03E5, 0x03E4 }, { 0x03E7, 0x03E6 }, { 0x03E9, 0x03E8 }, { 0x03EB, 0x03EA }, { 0x03ED, 0x03EC }, { 0x03EF, 0x03EE }, { 0x03F0, 0x039A }, { 0x03F1, 0x03A1 }, { 0x03F2, 0x03F9 }, { 0x03F3, 0x037F }, { 0x03F5, 0x0395 }, { 0x03F8, 0x03F7 }, { 0x03FB, 0x03FA }, { 0x0430, 0x0410 }, { 0x0431, 0x0411 }, { 0x0432, 0x0412 }, { 0x0433, 0x0413 }, { 0x0434, 0x0414 }, { 0x0435, 0x0415 }, { 0x0436, 0x0416 }, { 0x0437, 0x0417 }, { 0x0438, 0x0418 }, { 0x0439, 0x0419 }, { 0x043A, 0x041A }, { 0x043B, 0x041B }, { 0x043C, 0x041C }, { 0x043D, 0x041D }, { 0x043E, 0x041E }, { 0x043F, 0x041F }, { 0x0440, 0x0420 }, { 0x0441, 0x0421 }, { 0x0442, 0x0422 }, { 0x0443, 0x0423 }, { 0x0444, 0x0424 }, { 0x0445, 0x0425 }, { 0x0446, 0x0426 }, { 0x0447, 0x0427 }, { 0x0448, 0x0428 }, { 0x0449, 0x0429 }, { 0x044A, 0x042A }, { 0x044B, 0x042B }, { 0x044C, 0x042C }, { 0x044D, 0x042D }, { 0x044E, 0x042E }, { 0x044F, 0x042F }, { 0x0450, 0x0400 }, { 0x0451, 0x0401 }, { 0x0452, 0x0402 }, { 0x0453, 0x0403 }, { 0x0454, 0x0404 }, { 0x0455, 0x0405 }, { 0x0456, 0x0406 }, { 0x0457, 0x0407 }, { 0x0458, 0x0408 }, { 0x0459, 0x0409 }, { 0x045A, 0x040A }, { 0x045B, 0x040B }, { 0x045C, 0x040C }, { 0x045D, 0x040D }, { 0x045E, 0x040E }, { 0x045F, 0x040F }, { 0x0461, 0x0460 }, { 0x0463, 0x0462 }, { 0x0465, 0x0464 }, { 0x0467, 0x0466 }, { 0x0469, 0x0468 }, { 0x046B, 0x046A }, { 0x046D, 0x046C }, { 0x046F, 0x046E }, { 0x0471, 0x0470 }, { 0x0473, 0x0472 }, { 0x0475, 0x0474 }, { 0x0477, 0x0476 }, { 0x0479, 0x0478 }, { 0x047B, 0x047A }, { 0x047D, 0x047C }, { 0x047F, 0x047E }, { 0x0481, 0x0480 }, { 0x048B, 0x048A }, { 0x048D, 0x048C }, { 0x048F, 0x048E }, { 0x0491, 0x0490 }, { 0x0493, 0x0492 }, { 0x0495, 0x0494 }, { 0x0497, 0x0496 }, { 0x0499, 0x0498 }, { 0x049B, 0x049A }, { 0x049D, 0x049C }, { 0x049F, 0x049E }, { 0x04A1, 0x04A0 }, { 0x04A3, 0x04A2 }, { 0x04A5, 0x04A4 }, { 0x04A7, 0x04A6 }, { 0x04A9, 0x04A8 }, { 0x04AB, 0x04AA }, { 0x04AD, 0x04AC }, { 0x04AF, 0x04AE }, { 0x04B1, 0x04B0 }, { 0x04B3, 0x04B2 }, { 0x04B5, 0x04B4 }, { 0x04B7, 0x04B6 }, { 0x04B9, 0x04B8 }, { 0x04BB, 0x04BA }, { 0x04BD, 0x04BC }, { 0x04BF, 0x04BE }, { 0x04C2, 0x04C1 }, { 0x04C4, 0x04C3 }, { 0x04C6, 0x04C5 }, { 0x04C8, 0x04C7 }, { 0x04CA, 0x04C9 }, { 0x04CC, 0x04CB }, { 0x04CE, 0x04CD }, { 0x04CF, 0x04C0 }, { 0x04D1, 0x04D0 }, { 0x04D3, 0x04D2 }, { 0x04D5, 0x04D4 }, { 0x04D7, 0x04D6 }, { 0x04D9, 0x04D8 }, { 0x04DB, 0x04DA }, { 0x04DD, 0x04DC }, { 0x04DF, 0x04DE }, { 0x04E1, 0x04E0 }, { 0x04E3, 0x04E2 }, { 0x04E5, 0x04E4 }, { 0x04E7, 0x04E6 }, { 0x04E9, 0x04E8 }, { 0x04EB, 0x04EA }, { 0x04ED, 0x04EC }, { 0x04EF, 0x04EE }, { 0x04F1, 0x04F0 }, { 0x04F3, 0x04F2 }, { 0x04F5, 0x04F4 }, { 0x04F7, 0x04F6 }, { 0x04F9, 0x04F8 }, { 0x04FB, 0x04FA }, { 0x04FD, 0x04FC }, { 0x04FF, 0x04FE }, { 0x0501, 0x0500 }, { 0x0503, 0x0502 }, { 0x0505, 0x0504 }, { 0x0507, 0x0506 }, { 0x0509, 0x0508 }, { 0x050B, 0x050A }, { 0x050D, 0x050C }, { 0x050F, 0x050E }, { 0x0511, 0x0510 }, { 0x0513, 0x0512 }, { 0x0515, 0x0514 }, { 0x0517, 0x0516 }, { 0x0519, 0x0518 }, { 0x051B, 0x051A }, { 0x051D, 0x051C }, { 0x051F, 0x051E }, { 0x0521, 0x0520 }, { 0x0523, 0x0522 }, { 0x0525, 0x0524 }, { 0x0527, 0x0526 }, { 0x0529, 0x0528 }, { 0x052B, 0x052A }, { 0x052D, 0x052C }, { 0x052F, 0x052E }, { 0x0561, 0x0531 }, { 0x0562, 0x0532 }, { 0x0563, 0x0533 }, { 0x0564, 0x0534 }, { 0x0565, 0x0535 }, { 0x0566, 0x0536 }, { 0x0567, 0x0537 }, { 0x0568, 0x0538 }, { 0x0569, 0x0539 }, { 0x056A, 0x053A }, { 0x056B, 0x053B }, { 0x056C, 0x053C }, { 0x056D, 0x053D }, { 0x056E, 0x053E }, { 0x056F, 0x053F }, { 0x0570, 0x0540 }, { 0x0571, 0x0541 }, { 0x0572, 0x0542 }, { 0x0573, 0x0543 }, { 0x0574, 0x0544 }, { 0x0575, 0x0545 }, { 0x0576, 0x0546 }, { 0x0577, 0x0547 }, { 0x0578, 0x0548 }, { 0x0579, 0x0549 }, { 0x057A, 0x054A }, { 0x057B, 0x054B }, { 0x057C, 0x054C }, { 0x057D, 0x054D }, { 0x057E, 0x054E }, { 0x057F, 0x054F }, { 0x0580, 0x0550 }, { 0x0581, 0x0551 }, { 0x0582, 0x0552 }, { 0x0583, 0x0553 }, { 0x0584, 0x0554 }, { 0x0585, 0x0555 }, { 0x0586, 0x0556 }, { 0x13F8, 0x13F0 }, { 0x13F9, 0x13F1 }, { 0x13FA, 0x13F2 }, { 0x13FB, 0x13F3 }, { 0x13FC, 0x13F4 }, { 0x13FD, 0x13F5 }, { 0x1C80, 0x0412 }, { 0x1C81, 0x0414 }, { 0x1C82, 0x041E }, { 0x1C83, 0x0421 }, { 0x1C84, 0x0422 }, { 0x1C85, 0x0422 }, { 0x1C86, 0x042A }, { 0x1C87, 0x0462 }, { 0x1C88, 0xA64A }, { 0x1D79, 0xA77D }, { 0x1D7D, 0x2C63 }, { 0x1E01, 0x1E00 }, { 0x1E03, 0x1E02 }, { 0x1E05, 0x1E04 }, { 0x1E07, 0x1E06 }, { 0x1E09, 0x1E08 }, { 0x1E0B, 0x1E0A }, { 0x1E0D, 0x1E0C }, { 0x1E0F, 0x1E0E }, { 0x1E11, 0x1E10 }, { 0x1E13, 0x1E12 }, { 0x1E15, 0x1E14 }, { 0x1E17, 0x1E16 }, { 0x1E19, 0x1E18 }, { 0x1E1B, 0x1E1A }, { 0x1E1D, 0x1E1C }, { 0x1E1F, 0x1E1E }, { 0x1E21, 0x1E20 }, { 0x1E23, 0x1E22 }, { 0x1E25, 0x1E24 }, { 0x1E27, 0x1E26 }, { 0x1E29, 0x1E28 }, { 0x1E2B, 0x1E2A }, { 0x1E2D, 0x1E2C }, { 0x1E2F, 0x1E2E }, { 0x1E31, 0x1E30 }, { 0x1E33, 0x1E32 }, { 0x1E35, 0x1E34 }, { 0x1E37, 0x1E36 }, { 0x1E39, 0x1E38 }, { 0x1E3B, 0x1E3A }, { 0x1E3D, 0x1E3C }, { 0x1E3F, 0x1E3E }, { 0x1E41, 0x1E40 }, { 0x1E43, 0x1E42 }, { 0x1E45, 0x1E44 }, { 0x1E47, 0x1E46 }, { 0x1E49, 0x1E48 }, { 0x1E4B, 0x1E4A }, { 0x1E4D, 0x1E4C }, { 0x1E4F, 0x1E4E }, { 0x1E51, 0x1E50 }, { 0x1E53, 0x1E52 }, { 0x1E55, 0x1E54 }, { 0x1E57, 0x1E56 }, { 0x1E59, 0x1E58 }, { 0x1E5B, 0x1E5A }, { 0x1E5D, 0x1E5C }, { 0x1E5F, 0x1E5E }, { 0x1E61, 0x1E60 }, { 0x1E63, 0x1E62 }, { 0x1E65, 0x1E64 }, { 0x1E67, 0x1E66 }, { 0x1E69, 0x1E68 }, { 0x1E6B, 0x1E6A }, { 0x1E6D, 0x1E6C }, { 0x1E6F, 0x1E6E }, { 0x1E71, 0x1E70 }, { 0x1E73, 0x1E72 }, { 0x1E75, 0x1E74 }, { 0x1E77, 0x1E76 }, { 0x1E79, 0x1E78 }, { 0x1E7B, 0x1E7A }, { 0x1E7D, 0x1E7C }, { 0x1E7F, 0x1E7E }, { 0x1E81, 0x1E80 }, { 0x1E83, 0x1E82 }, { 0x1E85, 0x1E84 }, { 0x1E87, 0x1E86 }, { 0x1E89, 0x1E88 }, { 0x1E8B, 0x1E8A }, { 0x1E8D, 0x1E8C }, { 0x1E8F, 0x1E8E }, { 0x1E91, 0x1E90 }, { 0x1E93, 0x1E92 }, { 0x1E95, 0x1E94 }, { 0x1E9B, 0x1E60 }, { 0x1EA1, 0x1EA0 }, { 0x1EA3, 0x1EA2 }, { 0x1EA5, 0x1EA4 }, { 0x1EA7, 0x1EA6 }, { 0x1EA9, 0x1EA8 }, { 0x1EAB, 0x1EAA }, { 0x1EAD, 0x1EAC }, { 0x1EAF, 0x1EAE }, { 0x1EB1, 0x1EB0 }, { 0x1EB3, 0x1EB2 }, { 0x1EB5, 0x1EB4 }, { 0x1EB7, 0x1EB6 }, { 0x1EB9, 0x1EB8 }, { 0x1EBB, 0x1EBA }, { 0x1EBD, 0x1EBC }, { 0x1EBF, 0x1EBE }, { 0x1EC1, 0x1EC0 }, { 0x1EC3, 0x1EC2 }, { 0x1EC5, 0x1EC4 }, { 0x1EC7, 0x1EC6 }, { 0x1EC9, 0x1EC8 }, { 0x1ECB, 0x1ECA }, { 0x1ECD, 0x1ECC }, { 0x1ECF, 0x1ECE }, { 0x1ED1, 0x1ED0 }, { 0x1ED3, 0x1ED2 }, { 0x1ED5, 0x1ED4 }, { 0x1ED7, 0x1ED6 }, { 0x1ED9, 0x1ED8 }, { 0x1EDB, 0x1EDA }, { 0x1EDD, 0x1EDC }, { 0x1EDF, 0x1EDE }, { 0x1EE1, 0x1EE0 }, { 0x1EE3, 0x1EE2 }, { 0x1EE5, 0x1EE4 }, { 0x1EE7, 0x1EE6 }, { 0x1EE9, 0x1EE8 }, { 0x1EEB, 0x1EEA }, { 0x1EED, 0x1EEC }, { 0x1EEF, 0x1EEE }, { 0x1EF1, 0x1EF0 }, { 0x1EF3, 0x1EF2 }, { 0x1EF5, 0x1EF4 }, { 0x1EF7, 0x1EF6 }, { 0x1EF9, 0x1EF8 }, { 0x1EFB, 0x1EFA }, { 0x1EFD, 0x1EFC }, { 0x1EFF, 0x1EFE }, { 0x1F00, 0x1F08 }, { 0x1F01, 0x1F09 }, { 0x1F02, 0x1F0A }, { 0x1F03, 0x1F0B }, { 0x1F04, 0x1F0C }, { 0x1F05, 0x1F0D }, { 0x1F06, 0x1F0E }, { 0x1F07, 0x1F0F }, { 0x1F10, 0x1F18 }, { 0x1F11, 0x1F19 }, { 0x1F12, 0x1F1A }, { 0x1F13, 0x1F1B }, { 0x1F14, 0x1F1C }, { 0x1F15, 0x1F1D }, { 0x1F20, 0x1F28 }, { 0x1F21, 0x1F29 }, { 0x1F22, 0x1F2A }, { 0x1F23, 0x1F2B }, { 0x1F24, 0x1F2C }, { 0x1F25, 0x1F2D }, { 0x1F26, 0x1F2E }, { 0x1F27, 0x1F2F }, { 0x1F30, 0x1F38 }, { 0x1F31, 0x1F39 }, { 0x1F32, 0x1F3A }, { 0x1F33, 0x1F3B }, { 0x1F34, 0x1F3C }, { 0x1F35, 0x1F3D }, { 0x1F36, 0x1F3E }, { 0x1F37, 0x1F3F }, { 0x1F40, 0x1F48 }, { 0x1F41, 0x1F49 }, { 0x1F42, 0x1F4A }, { 0x1F43, 0x1F4B }, { 0x1F44, 0x1F4C }, { 0x1F45, 0x1F4D }, { 0x1F51, 0x1F59 }, { 0x1F53, 0x1F5B }, { 0x1F55, 0x1F5D }, { 0x1F57, 0x1F5F }, { 0x1F60, 0x1F68 }, { 0x1F61, 0x1F69 }, { 0x1F62, 0x1F6A }, { 0x1F63, 0x1F6B }, { 0x1F64, 0x1F6C }, { 0x1F65, 0x1F6D }, { 0x1F66, 0x1F6E }, { 0x1F67, 0x1F6F }, { 0x1F70, 0x1FBA }, { 0x1F71, 0x1FBB }, { 0x1F72, 0x1FC8 }, { 0x1F73, 0x1FC9 }, { 0x1F74, 0x1FCA }, { 0x1F75, 0x1FCB }, { 0x1F76, 0x1FDA }, { 0x1F77, 0x1FDB }, { 0x1F78, 0x1FF8 }, { 0x1F79, 0x1FF9 }, { 0x1F7A, 0x1FEA }, { 0x1F7B, 0x1FEB }, { 0x1F7C, 0x1FFA }, { 0x1F7D, 0x1FFB }, { 0x1F80, 0x1F88 }, { 0x1F81, 0x1F89 }, { 0x1F82, 0x1F8A }, { 0x1F83, 0x1F8B }, { 0x1F84, 0x1F8C }, { 0x1F85, 0x1F8D }, { 0x1F86, 0x1F8E }, { 0x1F87, 0x1F8F }, { 0x1F90, 0x1F98 }, { 0x1F91, 0x1F99 }, { 0x1F92, 0x1F9A }, { 0x1F93, 0x1F9B }, { 0x1F94, 0x1F9C }, { 0x1F95, 0x1F9D }, { 0x1F96, 0x1F9E }, { 0x1F97, 0x1F9F }, { 0x1FA0, 0x1FA8 }, { 0x1FA1, 0x1FA9 }, { 0x1FA2, 0x1FAA }, { 0x1FA3, 0x1FAB }, { 0x1FA4, 0x1FAC }, { 0x1FA5, 0x1FAD }, { 0x1FA6, 0x1FAE }, { 0x1FA7, 0x1FAF }, { 0x1FB0, 0x1FB8 }, { 0x1FB1, 0x1FB9 }, { 0x1FB3, 0x1FBC }, { 0x1FBE, 0x0399 }, { 0x1FC3, 0x1FCC }, { 0x1FD0, 0x1FD8 }, { 0x1FD1, 0x1FD9 }, { 0x1FE0, 0x1FE8 }, { 0x1FE1, 0x1FE9 }, { 0x1FE5, 0x1FEC }, { 0x1FF3, 0x1FFC }, { 0x214E, 0x2132 }, { 0x2170, 0x2160 }, { 0x2171, 0x2161 }, { 0x2172, 0x2162 }, { 0x2173, 0x2163 }, { 0x2174, 0x2164 }, { 0x2175, 0x2165 }, { 0x2176, 0x2166 }, { 0x2177, 0x2167 }, { 0x2178, 0x2168 }, { 0x2179, 0x2169 }, { 0x217A, 0x216A }, { 0x217B, 0x216B }, { 0x217C, 0x216C }, { 0x217D, 0x216D }, { 0x217E, 0x216E }, { 0x217F, 0x216F }, { 0x2184, 0x2183 }, { 0x24D0, 0x24B6 }, { 0x24D1, 0x24B7 }, { 0x24D2, 0x24B8 }, { 0x24D3, 0x24B9 }, { 0x24D4, 0x24BA }, { 0x24D5, 0x24BB }, { 0x24D6, 0x24BC }, { 0x24D7, 0x24BD }, { 0x24D8, 0x24BE }, { 0x24D9, 0x24BF }, { 0x24DA, 0x24C0 }, { 0x24DB, 0x24C1 }, { 0x24DC, 0x24C2 }, { 0x24DD, 0x24C3 }, { 0x24DE, 0x24C4 }, { 0x24DF, 0x24C5 }, { 0x24E0, 0x24C6 }, { 0x24E1, 0x24C7 }, { 0x24E2, 0x24C8 }, { 0x24E3, 0x24C9 }, { 0x24E4, 0x24CA }, { 0x24E5, 0x24CB }, { 0x24E6, 0x24CC }, { 0x24E7, 0x24CD }, { 0x24E8, 0x24CE }, { 0x24E9, 0x24CF }, { 0x2C30, 0x2C00 }, { 0x2C31, 0x2C01 }, { 0x2C32, 0x2C02 }, { 0x2C33, 0x2C03 }, { 0x2C34, 0x2C04 }, { 0x2C35, 0x2C05 }, { 0x2C36, 0x2C06 }, { 0x2C37, 0x2C07 }, { 0x2C38, 0x2C08 }, { 0x2C39, 0x2C09 }, { 0x2C3A, 0x2C0A }, { 0x2C3B, 0x2C0B }, { 0x2C3C, 0x2C0C }, { 0x2C3D, 0x2C0D }, { 0x2C3E, 0x2C0E }, { 0x2C3F, 0x2C0F }, { 0x2C40, 0x2C10 }, { 0x2C41, 0x2C11 }, { 0x2C42, 0x2C12 }, { 0x2C43, 0x2C13 }, { 0x2C44, 0x2C14 }, { 0x2C45, 0x2C15 }, { 0x2C46, 0x2C16 }, { 0x2C47, 0x2C17 }, { 0x2C48, 0x2C18 }, { 0x2C49, 0x2C19 }, { 0x2C4A, 0x2C1A }, { 0x2C4B, 0x2C1B }, { 0x2C4C, 0x2C1C }, { 0x2C4D, 0x2C1D }, { 0x2C4E, 0x2C1E }, { 0x2C4F, 0x2C1F }, { 0x2C50, 0x2C20 }, { 0x2C51, 0x2C21 }, { 0x2C52, 0x2C22 }, { 0x2C53, 0x2C23 }, { 0x2C54, 0x2C24 }, { 0x2C55, 0x2C25 }, { 0x2C56, 0x2C26 }, { 0x2C57, 0x2C27 }, { 0x2C58, 0x2C28 }, { 0x2C59, 0x2C29 }, { 0x2C5A, 0x2C2A }, { 0x2C5B, 0x2C2B }, { 0x2C5C, 0x2C2C }, { 0x2C5D, 0x2C2D }, { 0x2C5E, 0x2C2E }, { 0x2C61, 0x2C60 }, { 0x2C65, 0x023A }, { 0x2C66, 0x023E }, { 0x2C68, 0x2C67 }, { 0x2C6A, 0x2C69 }, { 0x2C6C, 0x2C6B }, { 0x2C73, 0x2C72 }, { 0x2C76, 0x2C75 }, { 0x2C81, 0x2C80 }, { 0x2C83, 0x2C82 }, { 0x2C85, 0x2C84 }, { 0x2C87, 0x2C86 }, { 0x2C89, 0x2C88 }, { 0x2C8B, 0x2C8A }, { 0x2C8D, 0x2C8C }, { 0x2C8F, 0x2C8E }, { 0x2C91, 0x2C90 }, { 0x2C93, 0x2C92 }, { 0x2C95, 0x2C94 }, { 0x2C97, 0x2C96 }, { 0x2C99, 0x2C98 }, { 0x2C9B, 0x2C9A }, { 0x2C9D, 0x2C9C }, { 0x2C9F, 0x2C9E }, { 0x2CA1, 0x2CA0 }, { 0x2CA3, 0x2CA2 }, { 0x2CA5, 0x2CA4 }, { 0x2CA7, 0x2CA6 }, { 0x2CA9, 0x2CA8 }, { 0x2CAB, 0x2CAA }, { 0x2CAD, 0x2CAC }, { 0x2CAF, 0x2CAE }, { 0x2CB1, 0x2CB0 }, { 0x2CB3, 0x2CB2 }, { 0x2CB5, 0x2CB4 }, { 0x2CB7, 0x2CB6 }, { 0x2CB9, 0x2CB8 }, { 0x2CBB, 0x2CBA }, { 0x2CBD, 0x2CBC }, { 0x2CBF, 0x2CBE }, { 0x2CC1, 0x2CC0 }, { 0x2CC3, 0x2CC2 }, { 0x2CC5, 0x2CC4 }, { 0x2CC7, 0x2CC6 }, { 0x2CC9, 0x2CC8 }, { 0x2CCB, 0x2CCA }, { 0x2CCD, 0x2CCC }, { 0x2CCF, 0x2CCE }, { 0x2CD1, 0x2CD0 }, { 0x2CD3, 0x2CD2 }, { 0x2CD5, 0x2CD4 }, { 0x2CD7, 0x2CD6 }, { 0x2CD9, 0x2CD8 }, { 0x2CDB, 0x2CDA }, { 0x2CDD, 0x2CDC }, { 0x2CDF, 0x2CDE }, { 0x2CE1, 0x2CE0 }, { 0x2CE3, 0x2CE2 }, { 0x2CEC, 0x2CEB }, { 0x2CEE, 0x2CED }, { 0x2CF3, 0x2CF2 }, { 0x2D00, 0x10A0 }, { 0x2D01, 0x10A1 }, { 0x2D02, 0x10A2 }, { 0x2D03, 0x10A3 }, { 0x2D04, 0x10A4 }, { 0x2D05, 0x10A5 }, { 0x2D06, 0x10A6 }, { 0x2D07, 0x10A7 }, { 0x2D08, 0x10A8 }, { 0x2D09, 0x10A9 }, { 0x2D0A, 0x10AA }, { 0x2D0B, 0x10AB }, { 0x2D0C, 0x10AC }, { 0x2D0D, 0x10AD }, { 0x2D0E, 0x10AE }, { 0x2D0F, 0x10AF }, { 0x2D10, 0x10B0 }, { 0x2D11, 0x10B1 }, { 0x2D12, 0x10B2 }, { 0x2D13, 0x10B3 }, { 0x2D14, 0x10B4 }, { 0x2D15, 0x10B5 }, { 0x2D16, 0x10B6 }, { 0x2D17, 0x10B7 }, { 0x2D18, 0x10B8 }, { 0x2D19, 0x10B9 }, { 0x2D1A, 0x10BA }, { 0x2D1B, 0x10BB }, { 0x2D1C, 0x10BC }, { 0x2D1D, 0x10BD }, { 0x2D1E, 0x10BE }, { 0x2D1F, 0x10BF }, { 0x2D20, 0x10C0 }, { 0x2D21, 0x10C1 }, { 0x2D22, 0x10C2 }, { 0x2D23, 0x10C3 }, { 0x2D24, 0x10C4 }, { 0x2D25, 0x10C5 }, { 0x2D27, 0x10C7 }, { 0x2D2D, 0x10CD }, { 0xA641, 0xA640 }, { 0xA643, 0xA642 }, { 0xA645, 0xA644 }, { 0xA647, 0xA646 }, { 0xA649, 0xA648 }, { 0xA64B, 0xA64A }, { 0xA64D, 0xA64C }, { 0xA64F, 0xA64E }, { 0xA651, 0xA650 }, { 0xA653, 0xA652 }, { 0xA655, 0xA654 }, { 0xA657, 0xA656 }, { 0xA659, 0xA658 }, { 0xA65B, 0xA65A }, { 0xA65D, 0xA65C }, { 0xA65F, 0xA65E }, { 0xA661, 0xA660 }, { 0xA663, 0xA662 }, { 0xA665, 0xA664 }, { 0xA667, 0xA666 }, { 0xA669, 0xA668 }, { 0xA66B, 0xA66A }, { 0xA66D, 0xA66C }, { 0xA681, 0xA680 }, { 0xA683, 0xA682 }, { 0xA685, 0xA684 }, { 0xA687, 0xA686 }, { 0xA689, 0xA688 }, { 0xA68B, 0xA68A }, { 0xA68D, 0xA68C }, { 0xA68F, 0xA68E }, { 0xA691, 0xA690 }, { 0xA693, 0xA692 }, { 0xA695, 0xA694 }, { 0xA697, 0xA696 }, { 0xA699, 0xA698 }, { 0xA69B, 0xA69A }, { 0xA723, 0xA722 }, { 0xA725, 0xA724 }, { 0xA727, 0xA726 }, { 0xA729, 0xA728 }, { 0xA72B, 0xA72A }, { 0xA72D, 0xA72C }, { 0xA72F, 0xA72E }, { 0xA733, 0xA732 }, { 0xA735, 0xA734 }, { 0xA737, 0xA736 }, { 0xA739, 0xA738 }, { 0xA73B, 0xA73A }, { 0xA73D, 0xA73C }, { 0xA73F, 0xA73E }, { 0xA741, 0xA740 }, { 0xA743, 0xA742 }, { 0xA745, 0xA744 }, { 0xA747, 0xA746 }, { 0xA749, 0xA748 }, { 0xA74B, 0xA74A }, { 0xA74D, 0xA74C }, { 0xA74F, 0xA74E }, { 0xA751, 0xA750 }, { 0xA753, 0xA752 }, { 0xA755, 0xA754 }, { 0xA757, 0xA756 }, { 0xA759, 0xA758 }, { 0xA75B, 0xA75A }, { 0xA75D, 0xA75C }, { 0xA75F, 0xA75E }, { 0xA761, 0xA760 }, { 0xA763, 0xA762 }, { 0xA765, 0xA764 }, { 0xA767, 0xA766 }, { 0xA769, 0xA768 }, { 0xA76B, 0xA76A }, { 0xA76D, 0xA76C }, { 0xA76F, 0xA76E }, { 0xA77A, 0xA779 }, { 0xA77C, 0xA77B }, { 0xA77F, 0xA77E }, { 0xA781, 0xA780 }, { 0xA783, 0xA782 }, { 0xA785, 0xA784 }, { 0xA787, 0xA786 }, { 0xA78C, 0xA78B }, { 0xA791, 0xA790 }, { 0xA793, 0xA792 }, { 0xA797, 0xA796 }, { 0xA799, 0xA798 }, { 0xA79B, 0xA79A }, { 0xA79D, 0xA79C }, { 0xA79F, 0xA79E }, { 0xA7A1, 0xA7A0 }, { 0xA7A3, 0xA7A2 }, { 0xA7A5, 0xA7A4 }, { 0xA7A7, 0xA7A6 }, { 0xA7A9, 0xA7A8 }, { 0xA7B5, 0xA7B4 }, { 0xA7B7, 0xA7B6 }, { 0xAB53, 0xA7B3 }, { 0xAB70, 0x13A0 }, { 0xAB71, 0x13A1 }, { 0xAB72, 0x13A2 }, { 0xAB73, 0x13A3 }, { 0xAB74, 0x13A4 }, { 0xAB75, 0x13A5 }, { 0xAB76, 0x13A6 }, { 0xAB77, 0x13A7 }, { 0xAB78, 0x13A8 }, { 0xAB79, 0x13A9 }, { 0xAB7A, 0x13AA }, { 0xAB7B, 0x13AB }, { 0xAB7C, 0x13AC }, { 0xAB7D, 0x13AD }, { 0xAB7E, 0x13AE }, { 0xAB7F, 0x13AF }, { 0xAB80, 0x13B0 }, { 0xAB81, 0x13B1 }, { 0xAB82, 0x13B2 }, { 0xAB83, 0x13B3 }, { 0xAB84, 0x13B4 }, { 0xAB85, 0x13B5 }, { 0xAB86, 0x13B6 }, { 0xAB87, 0x13B7 }, { 0xAB88, 0x13B8 }, { 0xAB89, 0x13B9 }, { 0xAB8A, 0x13BA }, { 0xAB8B, 0x13BB }, { 0xAB8C, 0x13BC }, { 0xAB8D, 0x13BD }, { 0xAB8E, 0x13BE }, { 0xAB8F, 0x13BF }, { 0xAB90, 0x13C0 }, { 0xAB91, 0x13C1 }, { 0xAB92, 0x13C2 }, { 0xAB93, 0x13C3 }, { 0xAB94, 0x13C4 }, { 0xAB95, 0x13C5 }, { 0xAB96, 0x13C6 }, { 0xAB97, 0x13C7 }, { 0xAB98, 0x13C8 }, { 0xAB99, 0x13C9 }, { 0xAB9A, 0x13CA }, { 0xAB9B, 0x13CB }, { 0xAB9C, 0x13CC }, { 0xAB9D, 0x13CD }, { 0xAB9E, 0x13CE }, { 0xAB9F, 0x13CF }, { 0xABA0, 0x13D0 }, { 0xABA1, 0x13D1 }, { 0xABA2, 0x13D2 }, { 0xABA3, 0x13D3 }, { 0xABA4, 0x13D4 }, { 0xABA5, 0x13D5 }, { 0xABA6, 0x13D6 }, { 0xABA7, 0x13D7 }, { 0xABA8, 0x13D8 }, { 0xABA9, 0x13D9 }, { 0xABAA, 0x13DA }, { 0xABAB, 0x13DB }, { 0xABAC, 0x13DC }, { 0xABAD, 0x13DD }, { 0xABAE, 0x13DE }, { 0xABAF, 0x13DF }, { 0xABB0, 0x13E0 }, { 0xABB1, 0x13E1 }, { 0xABB2, 0x13E2 }, { 0xABB3, 0x13E3 }, { 0xABB4, 0x13E4 }, { 0xABB5, 0x13E5 }, { 0xABB6, 0x13E6 }, { 0xABB7, 0x13E7 }, { 0xABB8, 0x13E8 }, { 0xABB9, 0x13E9 }, { 0xABBA, 0x13EA }, { 0xABBB, 0x13EB }, { 0xABBC, 0x13EC }, { 0xABBD, 0x13ED }, { 0xABBE, 0x13EE }, { 0xABBF, 0x13EF }, { 0xFF41, 0xFF21 }, { 0xFF42, 0xFF22 }, { 0xFF43, 0xFF23 }, { 0xFF44, 0xFF24 }, { 0xFF45, 0xFF25 }, { 0xFF46, 0xFF26 }, { 0xFF47, 0xFF27 }, { 0xFF48, 0xFF28 }, { 0xFF49, 0xFF29 }, { 0xFF4A, 0xFF2A }, { 0xFF4B, 0xFF2B }, { 0xFF4C, 0xFF2C }, { 0xFF4D, 0xFF2D }, { 0xFF4E, 0xFF2E }, { 0xFF4F, 0xFF2F }, { 0xFF50, 0xFF30 }, { 0xFF51, 0xFF31 }, { 0xFF52, 0xFF32 }, { 0xFF53, 0xFF33 }, { 0xFF54, 0xFF34 }, { 0xFF55, 0xFF35 }, { 0xFF56, 0xFF36 }, { 0xFF57, 0xFF37 }, { 0xFF58, 0xFF38 }, { 0xFF59, 0xFF39 }, { 0xFF5A, 0xFF3A }, { 0x10428, 0x10400 }, { 0x10429, 0x10401 }, { 0x1042A, 0x10402 }, { 0x1042B, 0x10403 }, { 0x1042C, 0x10404 }, { 0x1042D, 0x10405 }, { 0x1042E, 0x10406 }, { 0x1042F, 0x10407 }, { 0x10430, 0x10408 }, { 0x10431, 0x10409 }, { 0x10432, 0x1040A }, { 0x10433, 0x1040B }, { 0x10434, 0x1040C }, { 0x10435, 0x1040D }, { 0x10436, 0x1040E }, { 0x10437, 0x1040F }, { 0x10438, 0x10410 }, { 0x10439, 0x10411 }, { 0x1043A, 0x10412 }, { 0x1043B, 0x10413 }, { 0x1043C, 0x10414 }, { 0x1043D, 0x10415 }, { 0x1043E, 0x10416 }, { 0x1043F, 0x10417 }, { 0x10440, 0x10418 }, { 0x10441, 0x10419 }, { 0x10442, 0x1041A }, { 0x10443, 0x1041B }, { 0x10444, 0x1041C }, { 0x10445, 0x1041D }, { 0x10446, 0x1041E }, { 0x10447, 0x1041F }, { 0x10448, 0x10420 }, { 0x10449, 0x10421 }, { 0x1044A, 0x10422 }, { 0x1044B, 0x10423 }, { 0x1044C, 0x10424 }, { 0x1044D, 0x10425 }, { 0x1044E, 0x10426 }, { 0x1044F, 0x10427 }, { 0x104D8, 0x104B0 }, { 0x104D9, 0x104B1 }, { 0x104DA, 0x104B2 }, { 0x104DB, 0x104B3 }, { 0x104DC, 0x104B4 }, { 0x104DD, 0x104B5 }, { 0x104DE, 0x104B6 }, { 0x104DF, 0x104B7 }, { 0x104E0, 0x104B8 }, { 0x104E1, 0x104B9 }, { 0x104E2, 0x104BA }, { 0x104E3, 0x104BB }, { 0x104E4, 0x104BC }, { 0x104E5, 0x104BD }, { 0x104E6, 0x104BE }, { 0x104E7, 0x104BF }, { 0x104E8, 0x104C0 }, { 0x104E9, 0x104C1 }, { 0x104EA, 0x104C2 }, { 0x104EB, 0x104C3 }, { 0x104EC, 0x104C4 }, { 0x104ED, 0x104C5 }, { 0x104EE, 0x104C6 }, { 0x104EF, 0x104C7 }, { 0x104F0, 0x104C8 }, { 0x104F1, 0x104C9 }, { 0x104F2, 0x104CA }, { 0x104F3, 0x104CB }, { 0x104F4, 0x104CC }, { 0x104F5, 0x104CD }, { 0x104F6, 0x104CE }, { 0x104F7, 0x104CF }, { 0x104F8, 0x104D0 }, { 0x104F9, 0x104D1 }, { 0x104FA, 0x104D2 }, { 0x104FB, 0x104D3 }, { 0x10CC0, 0x10C80 }, { 0x10CC1, 0x10C81 }, { 0x10CC2, 0x10C82 }, { 0x10CC3, 0x10C83 }, { 0x10CC4, 0x10C84 }, { 0x10CC5, 0x10C85 }, { 0x10CC6, 0x10C86 }, { 0x10CC7, 0x10C87 }, { 0x10CC8, 0x10C88 }, { 0x10CC9, 0x10C89 }, { 0x10CCA, 0x10C8A }, { 0x10CCB, 0x10C8B }, { 0x10CCC, 0x10C8C }, { 0x10CCD, 0x10C8D }, { 0x10CCE, 0x10C8E }, { 0x10CCF, 0x10C8F }, { 0x10CD0, 0x10C90 }, { 0x10CD1, 0x10C91 }, { 0x10CD2, 0x10C92 }, { 0x10CD3, 0x10C93 }, { 0x10CD4, 0x10C94 }, { 0x10CD5, 0x10C95 }, { 0x10CD6, 0x10C96 }, { 0x10CD7, 0x10C97 }, { 0x10CD8, 0x10C98 }, { 0x10CD9, 0x10C99 }, { 0x10CDA, 0x10C9A }, { 0x10CDB, 0x10C9B }, { 0x10CDC, 0x10C9C }, { 0x10CDD, 0x10C9D }, { 0x10CDE, 0x10C9E }, { 0x10CDF, 0x10C9F }, { 0x10CE0, 0x10CA0 }, { 0x10CE1, 0x10CA1 }, { 0x10CE2, 0x10CA2 }, { 0x10CE3, 0x10CA3 }, { 0x10CE4, 0x10CA4 }, { 0x10CE5, 0x10CA5 }, { 0x10CE6, 0x10CA6 }, { 0x10CE7, 0x10CA7 }, { 0x10CE8, 0x10CA8 }, { 0x10CE9, 0x10CA9 }, { 0x10CEA, 0x10CAA }, { 0x10CEB, 0x10CAB }, { 0x10CEC, 0x10CAC }, { 0x10CED, 0x10CAD }, { 0x10CEE, 0x10CAE }, { 0x10CEF, 0x10CAF }, { 0x10CF0, 0x10CB0 }, { 0x10CF1, 0x10CB1 }, { 0x10CF2, 0x10CB2 }, { 0x118C0, 0x118A0 }, { 0x118C1, 0x118A1 }, { 0x118C2, 0x118A2 }, { 0x118C3, 0x118A3 }, { 0x118C4, 0x118A4 }, { 0x118C5, 0x118A5 }, { 0x118C6, 0x118A6 }, { 0x118C7, 0x118A7 }, { 0x118C8, 0x118A8 }, { 0x118C9, 0x118A9 }, { 0x118CA, 0x118AA }, { 0x118CB, 0x118AB }, { 0x118CC, 0x118AC }, { 0x118CD, 0x118AD }, { 0x118CE, 0x118AE }, { 0x118CF, 0x118AF }, { 0x118D0, 0x118B0 }, { 0x118D1, 0x118B1 }, { 0x118D2, 0x118B2 }, { 0x118D3, 0x118B3 }, { 0x118D4, 0x118B4 }, { 0x118D5, 0x118B5 }, { 0x118D6, 0x118B6 }, { 0x118D7, 0x118B7 }, { 0x118D8, 0x118B8 }, { 0x118D9, 0x118B9 }, { 0x118DA, 0x118BA }, { 0x118DB, 0x118BB }, { 0x118DC, 0x118BC }, { 0x118DD, 0x118BD }, { 0x118DE, 0x118BE }, { 0x118DF, 0x118BF }, { 0x1E922, 0x1E900 }, { 0x1E923, 0x1E901 }, { 0x1E924, 0x1E902 }, { 0x1E925, 0x1E903 }, { 0x1E926, 0x1E904 }, { 0x1E927, 0x1E905 }, { 0x1E928, 0x1E906 }, { 0x1E929, 0x1E907 }, { 0x1E92A, 0x1E908 }, { 0x1E92B, 0x1E909 }, { 0x1E92C, 0x1E90A }, { 0x1E92D, 0x1E90B }, { 0x1E92E, 0x1E90C }, { 0x1E92F, 0x1E90D }, { 0x1E930, 0x1E90E }, { 0x1E931, 0x1E90F }, { 0x1E932, 0x1E910 }, { 0x1E933, 0x1E911 }, { 0x1E934, 0x1E912 }, { 0x1E935, 0x1E913 }, { 0x1E936, 0x1E914 }, { 0x1E937, 0x1E915 }, { 0x1E938, 0x1E916 }, { 0x1E939, 0x1E917 }, { 0x1E93A, 0x1E918 }, { 0x1E93B, 0x1E919 }, { 0x1E93C, 0x1E91A }, { 0x1E93D, 0x1E91B }, { 0x1E93E, 0x1E91C }, { 0x1E93F, 0x1E91D }, { 0x1E940, 0x1E91E }, { 0x1E941, 0x1E91F }, { 0x1E942, 0x1E920 }, { 0x1E943, 0x1E921 } #define MAP(c) uc_totitle (c) #include "test-mapping-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-uc_toupper.c���������������������������������������������0000664�0000000�0000000�00000100433�14110572173�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. Copyright (C) 2009 Free Software Foundation, Inc. This 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/>. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ #include "test-mapping-part1.h" { 0x0061, 0x0041 }, { 0x0062, 0x0042 }, { 0x0063, 0x0043 }, { 0x0064, 0x0044 }, { 0x0065, 0x0045 }, { 0x0066, 0x0046 }, { 0x0067, 0x0047 }, { 0x0068, 0x0048 }, { 0x0069, 0x0049 }, { 0x006A, 0x004A }, { 0x006B, 0x004B }, { 0x006C, 0x004C }, { 0x006D, 0x004D }, { 0x006E, 0x004E }, { 0x006F, 0x004F }, { 0x0070, 0x0050 }, { 0x0071, 0x0051 }, { 0x0072, 0x0052 }, { 0x0073, 0x0053 }, { 0x0074, 0x0054 }, { 0x0075, 0x0055 }, { 0x0076, 0x0056 }, { 0x0077, 0x0057 }, { 0x0078, 0x0058 }, { 0x0079, 0x0059 }, { 0x007A, 0x005A }, { 0x00B5, 0x039C }, { 0x00E0, 0x00C0 }, { 0x00E1, 0x00C1 }, { 0x00E2, 0x00C2 }, { 0x00E3, 0x00C3 }, { 0x00E4, 0x00C4 }, { 0x00E5, 0x00C5 }, { 0x00E6, 0x00C6 }, { 0x00E7, 0x00C7 }, { 0x00E8, 0x00C8 }, { 0x00E9, 0x00C9 }, { 0x00EA, 0x00CA }, { 0x00EB, 0x00CB }, { 0x00EC, 0x00CC }, { 0x00ED, 0x00CD }, { 0x00EE, 0x00CE }, { 0x00EF, 0x00CF }, { 0x00F0, 0x00D0 }, { 0x00F1, 0x00D1 }, { 0x00F2, 0x00D2 }, { 0x00F3, 0x00D3 }, { 0x00F4, 0x00D4 }, { 0x00F5, 0x00D5 }, { 0x00F6, 0x00D6 }, { 0x00F8, 0x00D8 }, { 0x00F9, 0x00D9 }, { 0x00FA, 0x00DA }, { 0x00FB, 0x00DB }, { 0x00FC, 0x00DC }, { 0x00FD, 0x00DD }, { 0x00FE, 0x00DE }, { 0x00FF, 0x0178 }, { 0x0101, 0x0100 }, { 0x0103, 0x0102 }, { 0x0105, 0x0104 }, { 0x0107, 0x0106 }, { 0x0109, 0x0108 }, { 0x010B, 0x010A }, { 0x010D, 0x010C }, { 0x010F, 0x010E }, { 0x0111, 0x0110 }, { 0x0113, 0x0112 }, { 0x0115, 0x0114 }, { 0x0117, 0x0116 }, { 0x0119, 0x0118 }, { 0x011B, 0x011A }, { 0x011D, 0x011C }, { 0x011F, 0x011E }, { 0x0121, 0x0120 }, { 0x0123, 0x0122 }, { 0x0125, 0x0124 }, { 0x0127, 0x0126 }, { 0x0129, 0x0128 }, { 0x012B, 0x012A }, { 0x012D, 0x012C }, { 0x012F, 0x012E }, { 0x0131, 0x0049 }, { 0x0133, 0x0132 }, { 0x0135, 0x0134 }, { 0x0137, 0x0136 }, { 0x013A, 0x0139 }, { 0x013C, 0x013B }, { 0x013E, 0x013D }, { 0x0140, 0x013F }, { 0x0142, 0x0141 }, { 0x0144, 0x0143 }, { 0x0146, 0x0145 }, { 0x0148, 0x0147 }, { 0x014B, 0x014A }, { 0x014D, 0x014C }, { 0x014F, 0x014E }, { 0x0151, 0x0150 }, { 0x0153, 0x0152 }, { 0x0155, 0x0154 }, { 0x0157, 0x0156 }, { 0x0159, 0x0158 }, { 0x015B, 0x015A }, { 0x015D, 0x015C }, { 0x015F, 0x015E }, { 0x0161, 0x0160 }, { 0x0163, 0x0162 }, { 0x0165, 0x0164 }, { 0x0167, 0x0166 }, { 0x0169, 0x0168 }, { 0x016B, 0x016A }, { 0x016D, 0x016C }, { 0x016F, 0x016E }, { 0x0171, 0x0170 }, { 0x0173, 0x0172 }, { 0x0175, 0x0174 }, { 0x0177, 0x0176 }, { 0x017A, 0x0179 }, { 0x017C, 0x017B }, { 0x017E, 0x017D }, { 0x017F, 0x0053 }, { 0x0180, 0x0243 }, { 0x0183, 0x0182 }, { 0x0185, 0x0184 }, { 0x0188, 0x0187 }, { 0x018C, 0x018B }, { 0x0192, 0x0191 }, { 0x0195, 0x01F6 }, { 0x0199, 0x0198 }, { 0x019A, 0x023D }, { 0x019E, 0x0220 }, { 0x01A1, 0x01A0 }, { 0x01A3, 0x01A2 }, { 0x01A5, 0x01A4 }, { 0x01A8, 0x01A7 }, { 0x01AD, 0x01AC }, { 0x01B0, 0x01AF }, { 0x01B4, 0x01B3 }, { 0x01B6, 0x01B5 }, { 0x01B9, 0x01B8 }, { 0x01BD, 0x01BC }, { 0x01BF, 0x01F7 }, { 0x01C5, 0x01C4 }, { 0x01C6, 0x01C4 }, { 0x01C8, 0x01C7 }, { 0x01C9, 0x01C7 }, { 0x01CB, 0x01CA }, { 0x01CC, 0x01CA }, { 0x01CE, 0x01CD }, { 0x01D0, 0x01CF }, { 0x01D2, 0x01D1 }, { 0x01D4, 0x01D3 }, { 0x01D6, 0x01D5 }, { 0x01D8, 0x01D7 }, { 0x01DA, 0x01D9 }, { 0x01DC, 0x01DB }, { 0x01DD, 0x018E }, { 0x01DF, 0x01DE }, { 0x01E1, 0x01E0 }, { 0x01E3, 0x01E2 }, { 0x01E5, 0x01E4 }, { 0x01E7, 0x01E6 }, { 0x01E9, 0x01E8 }, { 0x01EB, 0x01EA }, { 0x01ED, 0x01EC }, { 0x01EF, 0x01EE }, { 0x01F2, 0x01F1 }, { 0x01F3, 0x01F1 }, { 0x01F5, 0x01F4 }, { 0x01F9, 0x01F8 }, { 0x01FB, 0x01FA }, { 0x01FD, 0x01FC }, { 0x01FF, 0x01FE }, { 0x0201, 0x0200 }, { 0x0203, 0x0202 }, { 0x0205, 0x0204 }, { 0x0207, 0x0206 }, { 0x0209, 0x0208 }, { 0x020B, 0x020A }, { 0x020D, 0x020C }, { 0x020F, 0x020E }, { 0x0211, 0x0210 }, { 0x0213, 0x0212 }, { 0x0215, 0x0214 }, { 0x0217, 0x0216 }, { 0x0219, 0x0218 }, { 0x021B, 0x021A }, { 0x021D, 0x021C }, { 0x021F, 0x021E }, { 0x0223, 0x0222 }, { 0x0225, 0x0224 }, { 0x0227, 0x0226 }, { 0x0229, 0x0228 }, { 0x022B, 0x022A }, { 0x022D, 0x022C }, { 0x022F, 0x022E }, { 0x0231, 0x0230 }, { 0x0233, 0x0232 }, { 0x023C, 0x023B }, { 0x023F, 0x2C7E }, { 0x0240, 0x2C7F }, { 0x0242, 0x0241 }, { 0x0247, 0x0246 }, { 0x0249, 0x0248 }, { 0x024B, 0x024A }, { 0x024D, 0x024C }, { 0x024F, 0x024E }, { 0x0250, 0x2C6F }, { 0x0251, 0x2C6D }, { 0x0252, 0x2C70 }, { 0x0253, 0x0181 }, { 0x0254, 0x0186 }, { 0x0256, 0x0189 }, { 0x0257, 0x018A }, { 0x0259, 0x018F }, { 0x025B, 0x0190 }, { 0x025C, 0xA7AB }, { 0x0260, 0x0193 }, { 0x0261, 0xA7AC }, { 0x0263, 0x0194 }, { 0x0265, 0xA78D }, { 0x0266, 0xA7AA }, { 0x0268, 0x0197 }, { 0x0269, 0x0196 }, { 0x026A, 0xA7AE }, { 0x026B, 0x2C62 }, { 0x026C, 0xA7AD }, { 0x026F, 0x019C }, { 0x0271, 0x2C6E }, { 0x0272, 0x019D }, { 0x0275, 0x019F }, { 0x027D, 0x2C64 }, { 0x0280, 0x01A6 }, { 0x0283, 0x01A9 }, { 0x0287, 0xA7B1 }, { 0x0288, 0x01AE }, { 0x0289, 0x0244 }, { 0x028A, 0x01B1 }, { 0x028B, 0x01B2 }, { 0x028C, 0x0245 }, { 0x0292, 0x01B7 }, { 0x029D, 0xA7B2 }, { 0x029E, 0xA7B0 }, { 0x0345, 0x0399 }, { 0x0371, 0x0370 }, { 0x0373, 0x0372 }, { 0x0377, 0x0376 }, { 0x037B, 0x03FD }, { 0x037C, 0x03FE }, { 0x037D, 0x03FF }, { 0x03AC, 0x0386 }, { 0x03AD, 0x0388 }, { 0x03AE, 0x0389 }, { 0x03AF, 0x038A }, { 0x03B1, 0x0391 }, { 0x03B2, 0x0392 }, { 0x03B3, 0x0393 }, { 0x03B4, 0x0394 }, { 0x03B5, 0x0395 }, { 0x03B6, 0x0396 }, { 0x03B7, 0x0397 }, { 0x03B8, 0x0398 }, { 0x03B9, 0x0399 }, { 0x03BA, 0x039A }, { 0x03BB, 0x039B }, { 0x03BC, 0x039C }, { 0x03BD, 0x039D }, { 0x03BE, 0x039E }, { 0x03BF, 0x039F }, { 0x03C0, 0x03A0 }, { 0x03C1, 0x03A1 }, { 0x03C2, 0x03A3 }, { 0x03C3, 0x03A3 }, { 0x03C4, 0x03A4 }, { 0x03C5, 0x03A5 }, { 0x03C6, 0x03A6 }, { 0x03C7, 0x03A7 }, { 0x03C8, 0x03A8 }, { 0x03C9, 0x03A9 }, { 0x03CA, 0x03AA }, { 0x03CB, 0x03AB }, { 0x03CC, 0x038C }, { 0x03CD, 0x038E }, { 0x03CE, 0x038F }, { 0x03D0, 0x0392 }, { 0x03D1, 0x0398 }, { 0x03D5, 0x03A6 }, { 0x03D6, 0x03A0 }, { 0x03D7, 0x03CF }, { 0x03D9, 0x03D8 }, { 0x03DB, 0x03DA }, { 0x03DD, 0x03DC }, { 0x03DF, 0x03DE }, { 0x03E1, 0x03E0 }, { 0x03E3, 0x03E2 }, { 0x03E5, 0x03E4 }, { 0x03E7, 0x03E6 }, { 0x03E9, 0x03E8 }, { 0x03EB, 0x03EA }, { 0x03ED, 0x03EC }, { 0x03EF, 0x03EE }, { 0x03F0, 0x039A }, { 0x03F1, 0x03A1 }, { 0x03F2, 0x03F9 }, { 0x03F3, 0x037F }, { 0x03F5, 0x0395 }, { 0x03F8, 0x03F7 }, { 0x03FB, 0x03FA }, { 0x0430, 0x0410 }, { 0x0431, 0x0411 }, { 0x0432, 0x0412 }, { 0x0433, 0x0413 }, { 0x0434, 0x0414 }, { 0x0435, 0x0415 }, { 0x0436, 0x0416 }, { 0x0437, 0x0417 }, { 0x0438, 0x0418 }, { 0x0439, 0x0419 }, { 0x043A, 0x041A }, { 0x043B, 0x041B }, { 0x043C, 0x041C }, { 0x043D, 0x041D }, { 0x043E, 0x041E }, { 0x043F, 0x041F }, { 0x0440, 0x0420 }, { 0x0441, 0x0421 }, { 0x0442, 0x0422 }, { 0x0443, 0x0423 }, { 0x0444, 0x0424 }, { 0x0445, 0x0425 }, { 0x0446, 0x0426 }, { 0x0447, 0x0427 }, { 0x0448, 0x0428 }, { 0x0449, 0x0429 }, { 0x044A, 0x042A }, { 0x044B, 0x042B }, { 0x044C, 0x042C }, { 0x044D, 0x042D }, { 0x044E, 0x042E }, { 0x044F, 0x042F }, { 0x0450, 0x0400 }, { 0x0451, 0x0401 }, { 0x0452, 0x0402 }, { 0x0453, 0x0403 }, { 0x0454, 0x0404 }, { 0x0455, 0x0405 }, { 0x0456, 0x0406 }, { 0x0457, 0x0407 }, { 0x0458, 0x0408 }, { 0x0459, 0x0409 }, { 0x045A, 0x040A }, { 0x045B, 0x040B }, { 0x045C, 0x040C }, { 0x045D, 0x040D }, { 0x045E, 0x040E }, { 0x045F, 0x040F }, { 0x0461, 0x0460 }, { 0x0463, 0x0462 }, { 0x0465, 0x0464 }, { 0x0467, 0x0466 }, { 0x0469, 0x0468 }, { 0x046B, 0x046A }, { 0x046D, 0x046C }, { 0x046F, 0x046E }, { 0x0471, 0x0470 }, { 0x0473, 0x0472 }, { 0x0475, 0x0474 }, { 0x0477, 0x0476 }, { 0x0479, 0x0478 }, { 0x047B, 0x047A }, { 0x047D, 0x047C }, { 0x047F, 0x047E }, { 0x0481, 0x0480 }, { 0x048B, 0x048A }, { 0x048D, 0x048C }, { 0x048F, 0x048E }, { 0x0491, 0x0490 }, { 0x0493, 0x0492 }, { 0x0495, 0x0494 }, { 0x0497, 0x0496 }, { 0x0499, 0x0498 }, { 0x049B, 0x049A }, { 0x049D, 0x049C }, { 0x049F, 0x049E }, { 0x04A1, 0x04A0 }, { 0x04A3, 0x04A2 }, { 0x04A5, 0x04A4 }, { 0x04A7, 0x04A6 }, { 0x04A9, 0x04A8 }, { 0x04AB, 0x04AA }, { 0x04AD, 0x04AC }, { 0x04AF, 0x04AE }, { 0x04B1, 0x04B0 }, { 0x04B3, 0x04B2 }, { 0x04B5, 0x04B4 }, { 0x04B7, 0x04B6 }, { 0x04B9, 0x04B8 }, { 0x04BB, 0x04BA }, { 0x04BD, 0x04BC }, { 0x04BF, 0x04BE }, { 0x04C2, 0x04C1 }, { 0x04C4, 0x04C3 }, { 0x04C6, 0x04C5 }, { 0x04C8, 0x04C7 }, { 0x04CA, 0x04C9 }, { 0x04CC, 0x04CB }, { 0x04CE, 0x04CD }, { 0x04CF, 0x04C0 }, { 0x04D1, 0x04D0 }, { 0x04D3, 0x04D2 }, { 0x04D5, 0x04D4 }, { 0x04D7, 0x04D6 }, { 0x04D9, 0x04D8 }, { 0x04DB, 0x04DA }, { 0x04DD, 0x04DC }, { 0x04DF, 0x04DE }, { 0x04E1, 0x04E0 }, { 0x04E3, 0x04E2 }, { 0x04E5, 0x04E4 }, { 0x04E7, 0x04E6 }, { 0x04E9, 0x04E8 }, { 0x04EB, 0x04EA }, { 0x04ED, 0x04EC }, { 0x04EF, 0x04EE }, { 0x04F1, 0x04F0 }, { 0x04F3, 0x04F2 }, { 0x04F5, 0x04F4 }, { 0x04F7, 0x04F6 }, { 0x04F9, 0x04F8 }, { 0x04FB, 0x04FA }, { 0x04FD, 0x04FC }, { 0x04FF, 0x04FE }, { 0x0501, 0x0500 }, { 0x0503, 0x0502 }, { 0x0505, 0x0504 }, { 0x0507, 0x0506 }, { 0x0509, 0x0508 }, { 0x050B, 0x050A }, { 0x050D, 0x050C }, { 0x050F, 0x050E }, { 0x0511, 0x0510 }, { 0x0513, 0x0512 }, { 0x0515, 0x0514 }, { 0x0517, 0x0516 }, { 0x0519, 0x0518 }, { 0x051B, 0x051A }, { 0x051D, 0x051C }, { 0x051F, 0x051E }, { 0x0521, 0x0520 }, { 0x0523, 0x0522 }, { 0x0525, 0x0524 }, { 0x0527, 0x0526 }, { 0x0529, 0x0528 }, { 0x052B, 0x052A }, { 0x052D, 0x052C }, { 0x052F, 0x052E }, { 0x0561, 0x0531 }, { 0x0562, 0x0532 }, { 0x0563, 0x0533 }, { 0x0564, 0x0534 }, { 0x0565, 0x0535 }, { 0x0566, 0x0536 }, { 0x0567, 0x0537 }, { 0x0568, 0x0538 }, { 0x0569, 0x0539 }, { 0x056A, 0x053A }, { 0x056B, 0x053B }, { 0x056C, 0x053C }, { 0x056D, 0x053D }, { 0x056E, 0x053E }, { 0x056F, 0x053F }, { 0x0570, 0x0540 }, { 0x0571, 0x0541 }, { 0x0572, 0x0542 }, { 0x0573, 0x0543 }, { 0x0574, 0x0544 }, { 0x0575, 0x0545 }, { 0x0576, 0x0546 }, { 0x0577, 0x0547 }, { 0x0578, 0x0548 }, { 0x0579, 0x0549 }, { 0x057A, 0x054A }, { 0x057B, 0x054B }, { 0x057C, 0x054C }, { 0x057D, 0x054D }, { 0x057E, 0x054E }, { 0x057F, 0x054F }, { 0x0580, 0x0550 }, { 0x0581, 0x0551 }, { 0x0582, 0x0552 }, { 0x0583, 0x0553 }, { 0x0584, 0x0554 }, { 0x0585, 0x0555 }, { 0x0586, 0x0556 }, { 0x13F8, 0x13F0 }, { 0x13F9, 0x13F1 }, { 0x13FA, 0x13F2 }, { 0x13FB, 0x13F3 }, { 0x13FC, 0x13F4 }, { 0x13FD, 0x13F5 }, { 0x1C80, 0x0412 }, { 0x1C81, 0x0414 }, { 0x1C82, 0x041E }, { 0x1C83, 0x0421 }, { 0x1C84, 0x0422 }, { 0x1C85, 0x0422 }, { 0x1C86, 0x042A }, { 0x1C87, 0x0462 }, { 0x1C88, 0xA64A }, { 0x1D79, 0xA77D }, { 0x1D7D, 0x2C63 }, { 0x1E01, 0x1E00 }, { 0x1E03, 0x1E02 }, { 0x1E05, 0x1E04 }, { 0x1E07, 0x1E06 }, { 0x1E09, 0x1E08 }, { 0x1E0B, 0x1E0A }, { 0x1E0D, 0x1E0C }, { 0x1E0F, 0x1E0E }, { 0x1E11, 0x1E10 }, { 0x1E13, 0x1E12 }, { 0x1E15, 0x1E14 }, { 0x1E17, 0x1E16 }, { 0x1E19, 0x1E18 }, { 0x1E1B, 0x1E1A }, { 0x1E1D, 0x1E1C }, { 0x1E1F, 0x1E1E }, { 0x1E21, 0x1E20 }, { 0x1E23, 0x1E22 }, { 0x1E25, 0x1E24 }, { 0x1E27, 0x1E26 }, { 0x1E29, 0x1E28 }, { 0x1E2B, 0x1E2A }, { 0x1E2D, 0x1E2C }, { 0x1E2F, 0x1E2E }, { 0x1E31, 0x1E30 }, { 0x1E33, 0x1E32 }, { 0x1E35, 0x1E34 }, { 0x1E37, 0x1E36 }, { 0x1E39, 0x1E38 }, { 0x1E3B, 0x1E3A }, { 0x1E3D, 0x1E3C }, { 0x1E3F, 0x1E3E }, { 0x1E41, 0x1E40 }, { 0x1E43, 0x1E42 }, { 0x1E45, 0x1E44 }, { 0x1E47, 0x1E46 }, { 0x1E49, 0x1E48 }, { 0x1E4B, 0x1E4A }, { 0x1E4D, 0x1E4C }, { 0x1E4F, 0x1E4E }, { 0x1E51, 0x1E50 }, { 0x1E53, 0x1E52 }, { 0x1E55, 0x1E54 }, { 0x1E57, 0x1E56 }, { 0x1E59, 0x1E58 }, { 0x1E5B, 0x1E5A }, { 0x1E5D, 0x1E5C }, { 0x1E5F, 0x1E5E }, { 0x1E61, 0x1E60 }, { 0x1E63, 0x1E62 }, { 0x1E65, 0x1E64 }, { 0x1E67, 0x1E66 }, { 0x1E69, 0x1E68 }, { 0x1E6B, 0x1E6A }, { 0x1E6D, 0x1E6C }, { 0x1E6F, 0x1E6E }, { 0x1E71, 0x1E70 }, { 0x1E73, 0x1E72 }, { 0x1E75, 0x1E74 }, { 0x1E77, 0x1E76 }, { 0x1E79, 0x1E78 }, { 0x1E7B, 0x1E7A }, { 0x1E7D, 0x1E7C }, { 0x1E7F, 0x1E7E }, { 0x1E81, 0x1E80 }, { 0x1E83, 0x1E82 }, { 0x1E85, 0x1E84 }, { 0x1E87, 0x1E86 }, { 0x1E89, 0x1E88 }, { 0x1E8B, 0x1E8A }, { 0x1E8D, 0x1E8C }, { 0x1E8F, 0x1E8E }, { 0x1E91, 0x1E90 }, { 0x1E93, 0x1E92 }, { 0x1E95, 0x1E94 }, { 0x1E9B, 0x1E60 }, { 0x1EA1, 0x1EA0 }, { 0x1EA3, 0x1EA2 }, { 0x1EA5, 0x1EA4 }, { 0x1EA7, 0x1EA6 }, { 0x1EA9, 0x1EA8 }, { 0x1EAB, 0x1EAA }, { 0x1EAD, 0x1EAC }, { 0x1EAF, 0x1EAE }, { 0x1EB1, 0x1EB0 }, { 0x1EB3, 0x1EB2 }, { 0x1EB5, 0x1EB4 }, { 0x1EB7, 0x1EB6 }, { 0x1EB9, 0x1EB8 }, { 0x1EBB, 0x1EBA }, { 0x1EBD, 0x1EBC }, { 0x1EBF, 0x1EBE }, { 0x1EC1, 0x1EC0 }, { 0x1EC3, 0x1EC2 }, { 0x1EC5, 0x1EC4 }, { 0x1EC7, 0x1EC6 }, { 0x1EC9, 0x1EC8 }, { 0x1ECB, 0x1ECA }, { 0x1ECD, 0x1ECC }, { 0x1ECF, 0x1ECE }, { 0x1ED1, 0x1ED0 }, { 0x1ED3, 0x1ED2 }, { 0x1ED5, 0x1ED4 }, { 0x1ED7, 0x1ED6 }, { 0x1ED9, 0x1ED8 }, { 0x1EDB, 0x1EDA }, { 0x1EDD, 0x1EDC }, { 0x1EDF, 0x1EDE }, { 0x1EE1, 0x1EE0 }, { 0x1EE3, 0x1EE2 }, { 0x1EE5, 0x1EE4 }, { 0x1EE7, 0x1EE6 }, { 0x1EE9, 0x1EE8 }, { 0x1EEB, 0x1EEA }, { 0x1EED, 0x1EEC }, { 0x1EEF, 0x1EEE }, { 0x1EF1, 0x1EF0 }, { 0x1EF3, 0x1EF2 }, { 0x1EF5, 0x1EF4 }, { 0x1EF7, 0x1EF6 }, { 0x1EF9, 0x1EF8 }, { 0x1EFB, 0x1EFA }, { 0x1EFD, 0x1EFC }, { 0x1EFF, 0x1EFE }, { 0x1F00, 0x1F08 }, { 0x1F01, 0x1F09 }, { 0x1F02, 0x1F0A }, { 0x1F03, 0x1F0B }, { 0x1F04, 0x1F0C }, { 0x1F05, 0x1F0D }, { 0x1F06, 0x1F0E }, { 0x1F07, 0x1F0F }, { 0x1F10, 0x1F18 }, { 0x1F11, 0x1F19 }, { 0x1F12, 0x1F1A }, { 0x1F13, 0x1F1B }, { 0x1F14, 0x1F1C }, { 0x1F15, 0x1F1D }, { 0x1F20, 0x1F28 }, { 0x1F21, 0x1F29 }, { 0x1F22, 0x1F2A }, { 0x1F23, 0x1F2B }, { 0x1F24, 0x1F2C }, { 0x1F25, 0x1F2D }, { 0x1F26, 0x1F2E }, { 0x1F27, 0x1F2F }, { 0x1F30, 0x1F38 }, { 0x1F31, 0x1F39 }, { 0x1F32, 0x1F3A }, { 0x1F33, 0x1F3B }, { 0x1F34, 0x1F3C }, { 0x1F35, 0x1F3D }, { 0x1F36, 0x1F3E }, { 0x1F37, 0x1F3F }, { 0x1F40, 0x1F48 }, { 0x1F41, 0x1F49 }, { 0x1F42, 0x1F4A }, { 0x1F43, 0x1F4B }, { 0x1F44, 0x1F4C }, { 0x1F45, 0x1F4D }, { 0x1F51, 0x1F59 }, { 0x1F53, 0x1F5B }, { 0x1F55, 0x1F5D }, { 0x1F57, 0x1F5F }, { 0x1F60, 0x1F68 }, { 0x1F61, 0x1F69 }, { 0x1F62, 0x1F6A }, { 0x1F63, 0x1F6B }, { 0x1F64, 0x1F6C }, { 0x1F65, 0x1F6D }, { 0x1F66, 0x1F6E }, { 0x1F67, 0x1F6F }, { 0x1F70, 0x1FBA }, { 0x1F71, 0x1FBB }, { 0x1F72, 0x1FC8 }, { 0x1F73, 0x1FC9 }, { 0x1F74, 0x1FCA }, { 0x1F75, 0x1FCB }, { 0x1F76, 0x1FDA }, { 0x1F77, 0x1FDB }, { 0x1F78, 0x1FF8 }, { 0x1F79, 0x1FF9 }, { 0x1F7A, 0x1FEA }, { 0x1F7B, 0x1FEB }, { 0x1F7C, 0x1FFA }, { 0x1F7D, 0x1FFB }, { 0x1F80, 0x1F88 }, { 0x1F81, 0x1F89 }, { 0x1F82, 0x1F8A }, { 0x1F83, 0x1F8B }, { 0x1F84, 0x1F8C }, { 0x1F85, 0x1F8D }, { 0x1F86, 0x1F8E }, { 0x1F87, 0x1F8F }, { 0x1F90, 0x1F98 }, { 0x1F91, 0x1F99 }, { 0x1F92, 0x1F9A }, { 0x1F93, 0x1F9B }, { 0x1F94, 0x1F9C }, { 0x1F95, 0x1F9D }, { 0x1F96, 0x1F9E }, { 0x1F97, 0x1F9F }, { 0x1FA0, 0x1FA8 }, { 0x1FA1, 0x1FA9 }, { 0x1FA2, 0x1FAA }, { 0x1FA3, 0x1FAB }, { 0x1FA4, 0x1FAC }, { 0x1FA5, 0x1FAD }, { 0x1FA6, 0x1FAE }, { 0x1FA7, 0x1FAF }, { 0x1FB0, 0x1FB8 }, { 0x1FB1, 0x1FB9 }, { 0x1FB3, 0x1FBC }, { 0x1FBE, 0x0399 }, { 0x1FC3, 0x1FCC }, { 0x1FD0, 0x1FD8 }, { 0x1FD1, 0x1FD9 }, { 0x1FE0, 0x1FE8 }, { 0x1FE1, 0x1FE9 }, { 0x1FE5, 0x1FEC }, { 0x1FF3, 0x1FFC }, { 0x214E, 0x2132 }, { 0x2170, 0x2160 }, { 0x2171, 0x2161 }, { 0x2172, 0x2162 }, { 0x2173, 0x2163 }, { 0x2174, 0x2164 }, { 0x2175, 0x2165 }, { 0x2176, 0x2166 }, { 0x2177, 0x2167 }, { 0x2178, 0x2168 }, { 0x2179, 0x2169 }, { 0x217A, 0x216A }, { 0x217B, 0x216B }, { 0x217C, 0x216C }, { 0x217D, 0x216D }, { 0x217E, 0x216E }, { 0x217F, 0x216F }, { 0x2184, 0x2183 }, { 0x24D0, 0x24B6 }, { 0x24D1, 0x24B7 }, { 0x24D2, 0x24B8 }, { 0x24D3, 0x24B9 }, { 0x24D4, 0x24BA }, { 0x24D5, 0x24BB }, { 0x24D6, 0x24BC }, { 0x24D7, 0x24BD }, { 0x24D8, 0x24BE }, { 0x24D9, 0x24BF }, { 0x24DA, 0x24C0 }, { 0x24DB, 0x24C1 }, { 0x24DC, 0x24C2 }, { 0x24DD, 0x24C3 }, { 0x24DE, 0x24C4 }, { 0x24DF, 0x24C5 }, { 0x24E0, 0x24C6 }, { 0x24E1, 0x24C7 }, { 0x24E2, 0x24C8 }, { 0x24E3, 0x24C9 }, { 0x24E4, 0x24CA }, { 0x24E5, 0x24CB }, { 0x24E6, 0x24CC }, { 0x24E7, 0x24CD }, { 0x24E8, 0x24CE }, { 0x24E9, 0x24CF }, { 0x2C30, 0x2C00 }, { 0x2C31, 0x2C01 }, { 0x2C32, 0x2C02 }, { 0x2C33, 0x2C03 }, { 0x2C34, 0x2C04 }, { 0x2C35, 0x2C05 }, { 0x2C36, 0x2C06 }, { 0x2C37, 0x2C07 }, { 0x2C38, 0x2C08 }, { 0x2C39, 0x2C09 }, { 0x2C3A, 0x2C0A }, { 0x2C3B, 0x2C0B }, { 0x2C3C, 0x2C0C }, { 0x2C3D, 0x2C0D }, { 0x2C3E, 0x2C0E }, { 0x2C3F, 0x2C0F }, { 0x2C40, 0x2C10 }, { 0x2C41, 0x2C11 }, { 0x2C42, 0x2C12 }, { 0x2C43, 0x2C13 }, { 0x2C44, 0x2C14 }, { 0x2C45, 0x2C15 }, { 0x2C46, 0x2C16 }, { 0x2C47, 0x2C17 }, { 0x2C48, 0x2C18 }, { 0x2C49, 0x2C19 }, { 0x2C4A, 0x2C1A }, { 0x2C4B, 0x2C1B }, { 0x2C4C, 0x2C1C }, { 0x2C4D, 0x2C1D }, { 0x2C4E, 0x2C1E }, { 0x2C4F, 0x2C1F }, { 0x2C50, 0x2C20 }, { 0x2C51, 0x2C21 }, { 0x2C52, 0x2C22 }, { 0x2C53, 0x2C23 }, { 0x2C54, 0x2C24 }, { 0x2C55, 0x2C25 }, { 0x2C56, 0x2C26 }, { 0x2C57, 0x2C27 }, { 0x2C58, 0x2C28 }, { 0x2C59, 0x2C29 }, { 0x2C5A, 0x2C2A }, { 0x2C5B, 0x2C2B }, { 0x2C5C, 0x2C2C }, { 0x2C5D, 0x2C2D }, { 0x2C5E, 0x2C2E }, { 0x2C61, 0x2C60 }, { 0x2C65, 0x023A }, { 0x2C66, 0x023E }, { 0x2C68, 0x2C67 }, { 0x2C6A, 0x2C69 }, { 0x2C6C, 0x2C6B }, { 0x2C73, 0x2C72 }, { 0x2C76, 0x2C75 }, { 0x2C81, 0x2C80 }, { 0x2C83, 0x2C82 }, { 0x2C85, 0x2C84 }, { 0x2C87, 0x2C86 }, { 0x2C89, 0x2C88 }, { 0x2C8B, 0x2C8A }, { 0x2C8D, 0x2C8C }, { 0x2C8F, 0x2C8E }, { 0x2C91, 0x2C90 }, { 0x2C93, 0x2C92 }, { 0x2C95, 0x2C94 }, { 0x2C97, 0x2C96 }, { 0x2C99, 0x2C98 }, { 0x2C9B, 0x2C9A }, { 0x2C9D, 0x2C9C }, { 0x2C9F, 0x2C9E }, { 0x2CA1, 0x2CA0 }, { 0x2CA3, 0x2CA2 }, { 0x2CA5, 0x2CA4 }, { 0x2CA7, 0x2CA6 }, { 0x2CA9, 0x2CA8 }, { 0x2CAB, 0x2CAA }, { 0x2CAD, 0x2CAC }, { 0x2CAF, 0x2CAE }, { 0x2CB1, 0x2CB0 }, { 0x2CB3, 0x2CB2 }, { 0x2CB5, 0x2CB4 }, { 0x2CB7, 0x2CB6 }, { 0x2CB9, 0x2CB8 }, { 0x2CBB, 0x2CBA }, { 0x2CBD, 0x2CBC }, { 0x2CBF, 0x2CBE }, { 0x2CC1, 0x2CC0 }, { 0x2CC3, 0x2CC2 }, { 0x2CC5, 0x2CC4 }, { 0x2CC7, 0x2CC6 }, { 0x2CC9, 0x2CC8 }, { 0x2CCB, 0x2CCA }, { 0x2CCD, 0x2CCC }, { 0x2CCF, 0x2CCE }, { 0x2CD1, 0x2CD0 }, { 0x2CD3, 0x2CD2 }, { 0x2CD5, 0x2CD4 }, { 0x2CD7, 0x2CD6 }, { 0x2CD9, 0x2CD8 }, { 0x2CDB, 0x2CDA }, { 0x2CDD, 0x2CDC }, { 0x2CDF, 0x2CDE }, { 0x2CE1, 0x2CE0 }, { 0x2CE3, 0x2CE2 }, { 0x2CEC, 0x2CEB }, { 0x2CEE, 0x2CED }, { 0x2CF3, 0x2CF2 }, { 0x2D00, 0x10A0 }, { 0x2D01, 0x10A1 }, { 0x2D02, 0x10A2 }, { 0x2D03, 0x10A3 }, { 0x2D04, 0x10A4 }, { 0x2D05, 0x10A5 }, { 0x2D06, 0x10A6 }, { 0x2D07, 0x10A7 }, { 0x2D08, 0x10A8 }, { 0x2D09, 0x10A9 }, { 0x2D0A, 0x10AA }, { 0x2D0B, 0x10AB }, { 0x2D0C, 0x10AC }, { 0x2D0D, 0x10AD }, { 0x2D0E, 0x10AE }, { 0x2D0F, 0x10AF }, { 0x2D10, 0x10B0 }, { 0x2D11, 0x10B1 }, { 0x2D12, 0x10B2 }, { 0x2D13, 0x10B3 }, { 0x2D14, 0x10B4 }, { 0x2D15, 0x10B5 }, { 0x2D16, 0x10B6 }, { 0x2D17, 0x10B7 }, { 0x2D18, 0x10B8 }, { 0x2D19, 0x10B9 }, { 0x2D1A, 0x10BA }, { 0x2D1B, 0x10BB }, { 0x2D1C, 0x10BC }, { 0x2D1D, 0x10BD }, { 0x2D1E, 0x10BE }, { 0x2D1F, 0x10BF }, { 0x2D20, 0x10C0 }, { 0x2D21, 0x10C1 }, { 0x2D22, 0x10C2 }, { 0x2D23, 0x10C3 }, { 0x2D24, 0x10C4 }, { 0x2D25, 0x10C5 }, { 0x2D27, 0x10C7 }, { 0x2D2D, 0x10CD }, { 0xA641, 0xA640 }, { 0xA643, 0xA642 }, { 0xA645, 0xA644 }, { 0xA647, 0xA646 }, { 0xA649, 0xA648 }, { 0xA64B, 0xA64A }, { 0xA64D, 0xA64C }, { 0xA64F, 0xA64E }, { 0xA651, 0xA650 }, { 0xA653, 0xA652 }, { 0xA655, 0xA654 }, { 0xA657, 0xA656 }, { 0xA659, 0xA658 }, { 0xA65B, 0xA65A }, { 0xA65D, 0xA65C }, { 0xA65F, 0xA65E }, { 0xA661, 0xA660 }, { 0xA663, 0xA662 }, { 0xA665, 0xA664 }, { 0xA667, 0xA666 }, { 0xA669, 0xA668 }, { 0xA66B, 0xA66A }, { 0xA66D, 0xA66C }, { 0xA681, 0xA680 }, { 0xA683, 0xA682 }, { 0xA685, 0xA684 }, { 0xA687, 0xA686 }, { 0xA689, 0xA688 }, { 0xA68B, 0xA68A }, { 0xA68D, 0xA68C }, { 0xA68F, 0xA68E }, { 0xA691, 0xA690 }, { 0xA693, 0xA692 }, { 0xA695, 0xA694 }, { 0xA697, 0xA696 }, { 0xA699, 0xA698 }, { 0xA69B, 0xA69A }, { 0xA723, 0xA722 }, { 0xA725, 0xA724 }, { 0xA727, 0xA726 }, { 0xA729, 0xA728 }, { 0xA72B, 0xA72A }, { 0xA72D, 0xA72C }, { 0xA72F, 0xA72E }, { 0xA733, 0xA732 }, { 0xA735, 0xA734 }, { 0xA737, 0xA736 }, { 0xA739, 0xA738 }, { 0xA73B, 0xA73A }, { 0xA73D, 0xA73C }, { 0xA73F, 0xA73E }, { 0xA741, 0xA740 }, { 0xA743, 0xA742 }, { 0xA745, 0xA744 }, { 0xA747, 0xA746 }, { 0xA749, 0xA748 }, { 0xA74B, 0xA74A }, { 0xA74D, 0xA74C }, { 0xA74F, 0xA74E }, { 0xA751, 0xA750 }, { 0xA753, 0xA752 }, { 0xA755, 0xA754 }, { 0xA757, 0xA756 }, { 0xA759, 0xA758 }, { 0xA75B, 0xA75A }, { 0xA75D, 0xA75C }, { 0xA75F, 0xA75E }, { 0xA761, 0xA760 }, { 0xA763, 0xA762 }, { 0xA765, 0xA764 }, { 0xA767, 0xA766 }, { 0xA769, 0xA768 }, { 0xA76B, 0xA76A }, { 0xA76D, 0xA76C }, { 0xA76F, 0xA76E }, { 0xA77A, 0xA779 }, { 0xA77C, 0xA77B }, { 0xA77F, 0xA77E }, { 0xA781, 0xA780 }, { 0xA783, 0xA782 }, { 0xA785, 0xA784 }, { 0xA787, 0xA786 }, { 0xA78C, 0xA78B }, { 0xA791, 0xA790 }, { 0xA793, 0xA792 }, { 0xA797, 0xA796 }, { 0xA799, 0xA798 }, { 0xA79B, 0xA79A }, { 0xA79D, 0xA79C }, { 0xA79F, 0xA79E }, { 0xA7A1, 0xA7A0 }, { 0xA7A3, 0xA7A2 }, { 0xA7A5, 0xA7A4 }, { 0xA7A7, 0xA7A6 }, { 0xA7A9, 0xA7A8 }, { 0xA7B5, 0xA7B4 }, { 0xA7B7, 0xA7B6 }, { 0xAB53, 0xA7B3 }, { 0xAB70, 0x13A0 }, { 0xAB71, 0x13A1 }, { 0xAB72, 0x13A2 }, { 0xAB73, 0x13A3 }, { 0xAB74, 0x13A4 }, { 0xAB75, 0x13A5 }, { 0xAB76, 0x13A6 }, { 0xAB77, 0x13A7 }, { 0xAB78, 0x13A8 }, { 0xAB79, 0x13A9 }, { 0xAB7A, 0x13AA }, { 0xAB7B, 0x13AB }, { 0xAB7C, 0x13AC }, { 0xAB7D, 0x13AD }, { 0xAB7E, 0x13AE }, { 0xAB7F, 0x13AF }, { 0xAB80, 0x13B0 }, { 0xAB81, 0x13B1 }, { 0xAB82, 0x13B2 }, { 0xAB83, 0x13B3 }, { 0xAB84, 0x13B4 }, { 0xAB85, 0x13B5 }, { 0xAB86, 0x13B6 }, { 0xAB87, 0x13B7 }, { 0xAB88, 0x13B8 }, { 0xAB89, 0x13B9 }, { 0xAB8A, 0x13BA }, { 0xAB8B, 0x13BB }, { 0xAB8C, 0x13BC }, { 0xAB8D, 0x13BD }, { 0xAB8E, 0x13BE }, { 0xAB8F, 0x13BF }, { 0xAB90, 0x13C0 }, { 0xAB91, 0x13C1 }, { 0xAB92, 0x13C2 }, { 0xAB93, 0x13C3 }, { 0xAB94, 0x13C4 }, { 0xAB95, 0x13C5 }, { 0xAB96, 0x13C6 }, { 0xAB97, 0x13C7 }, { 0xAB98, 0x13C8 }, { 0xAB99, 0x13C9 }, { 0xAB9A, 0x13CA }, { 0xAB9B, 0x13CB }, { 0xAB9C, 0x13CC }, { 0xAB9D, 0x13CD }, { 0xAB9E, 0x13CE }, { 0xAB9F, 0x13CF }, { 0xABA0, 0x13D0 }, { 0xABA1, 0x13D1 }, { 0xABA2, 0x13D2 }, { 0xABA3, 0x13D3 }, { 0xABA4, 0x13D4 }, { 0xABA5, 0x13D5 }, { 0xABA6, 0x13D6 }, { 0xABA7, 0x13D7 }, { 0xABA8, 0x13D8 }, { 0xABA9, 0x13D9 }, { 0xABAA, 0x13DA }, { 0xABAB, 0x13DB }, { 0xABAC, 0x13DC }, { 0xABAD, 0x13DD }, { 0xABAE, 0x13DE }, { 0xABAF, 0x13DF }, { 0xABB0, 0x13E0 }, { 0xABB1, 0x13E1 }, { 0xABB2, 0x13E2 }, { 0xABB3, 0x13E3 }, { 0xABB4, 0x13E4 }, { 0xABB5, 0x13E5 }, { 0xABB6, 0x13E6 }, { 0xABB7, 0x13E7 }, { 0xABB8, 0x13E8 }, { 0xABB9, 0x13E9 }, { 0xABBA, 0x13EA }, { 0xABBB, 0x13EB }, { 0xABBC, 0x13EC }, { 0xABBD, 0x13ED }, { 0xABBE, 0x13EE }, { 0xABBF, 0x13EF }, { 0xFF41, 0xFF21 }, { 0xFF42, 0xFF22 }, { 0xFF43, 0xFF23 }, { 0xFF44, 0xFF24 }, { 0xFF45, 0xFF25 }, { 0xFF46, 0xFF26 }, { 0xFF47, 0xFF27 }, { 0xFF48, 0xFF28 }, { 0xFF49, 0xFF29 }, { 0xFF4A, 0xFF2A }, { 0xFF4B, 0xFF2B }, { 0xFF4C, 0xFF2C }, { 0xFF4D, 0xFF2D }, { 0xFF4E, 0xFF2E }, { 0xFF4F, 0xFF2F }, { 0xFF50, 0xFF30 }, { 0xFF51, 0xFF31 }, { 0xFF52, 0xFF32 }, { 0xFF53, 0xFF33 }, { 0xFF54, 0xFF34 }, { 0xFF55, 0xFF35 }, { 0xFF56, 0xFF36 }, { 0xFF57, 0xFF37 }, { 0xFF58, 0xFF38 }, { 0xFF59, 0xFF39 }, { 0xFF5A, 0xFF3A }, { 0x10428, 0x10400 }, { 0x10429, 0x10401 }, { 0x1042A, 0x10402 }, { 0x1042B, 0x10403 }, { 0x1042C, 0x10404 }, { 0x1042D, 0x10405 }, { 0x1042E, 0x10406 }, { 0x1042F, 0x10407 }, { 0x10430, 0x10408 }, { 0x10431, 0x10409 }, { 0x10432, 0x1040A }, { 0x10433, 0x1040B }, { 0x10434, 0x1040C }, { 0x10435, 0x1040D }, { 0x10436, 0x1040E }, { 0x10437, 0x1040F }, { 0x10438, 0x10410 }, { 0x10439, 0x10411 }, { 0x1043A, 0x10412 }, { 0x1043B, 0x10413 }, { 0x1043C, 0x10414 }, { 0x1043D, 0x10415 }, { 0x1043E, 0x10416 }, { 0x1043F, 0x10417 }, { 0x10440, 0x10418 }, { 0x10441, 0x10419 }, { 0x10442, 0x1041A }, { 0x10443, 0x1041B }, { 0x10444, 0x1041C }, { 0x10445, 0x1041D }, { 0x10446, 0x1041E }, { 0x10447, 0x1041F }, { 0x10448, 0x10420 }, { 0x10449, 0x10421 }, { 0x1044A, 0x10422 }, { 0x1044B, 0x10423 }, { 0x1044C, 0x10424 }, { 0x1044D, 0x10425 }, { 0x1044E, 0x10426 }, { 0x1044F, 0x10427 }, { 0x104D8, 0x104B0 }, { 0x104D9, 0x104B1 }, { 0x104DA, 0x104B2 }, { 0x104DB, 0x104B3 }, { 0x104DC, 0x104B4 }, { 0x104DD, 0x104B5 }, { 0x104DE, 0x104B6 }, { 0x104DF, 0x104B7 }, { 0x104E0, 0x104B8 }, { 0x104E1, 0x104B9 }, { 0x104E2, 0x104BA }, { 0x104E3, 0x104BB }, { 0x104E4, 0x104BC }, { 0x104E5, 0x104BD }, { 0x104E6, 0x104BE }, { 0x104E7, 0x104BF }, { 0x104E8, 0x104C0 }, { 0x104E9, 0x104C1 }, { 0x104EA, 0x104C2 }, { 0x104EB, 0x104C3 }, { 0x104EC, 0x104C4 }, { 0x104ED, 0x104C5 }, { 0x104EE, 0x104C6 }, { 0x104EF, 0x104C7 }, { 0x104F0, 0x104C8 }, { 0x104F1, 0x104C9 }, { 0x104F2, 0x104CA }, { 0x104F3, 0x104CB }, { 0x104F4, 0x104CC }, { 0x104F5, 0x104CD }, { 0x104F6, 0x104CE }, { 0x104F7, 0x104CF }, { 0x104F8, 0x104D0 }, { 0x104F9, 0x104D1 }, { 0x104FA, 0x104D2 }, { 0x104FB, 0x104D3 }, { 0x10CC0, 0x10C80 }, { 0x10CC1, 0x10C81 }, { 0x10CC2, 0x10C82 }, { 0x10CC3, 0x10C83 }, { 0x10CC4, 0x10C84 }, { 0x10CC5, 0x10C85 }, { 0x10CC6, 0x10C86 }, { 0x10CC7, 0x10C87 }, { 0x10CC8, 0x10C88 }, { 0x10CC9, 0x10C89 }, { 0x10CCA, 0x10C8A }, { 0x10CCB, 0x10C8B }, { 0x10CCC, 0x10C8C }, { 0x10CCD, 0x10C8D }, { 0x10CCE, 0x10C8E }, { 0x10CCF, 0x10C8F }, { 0x10CD0, 0x10C90 }, { 0x10CD1, 0x10C91 }, { 0x10CD2, 0x10C92 }, { 0x10CD3, 0x10C93 }, { 0x10CD4, 0x10C94 }, { 0x10CD5, 0x10C95 }, { 0x10CD6, 0x10C96 }, { 0x10CD7, 0x10C97 }, { 0x10CD8, 0x10C98 }, { 0x10CD9, 0x10C99 }, { 0x10CDA, 0x10C9A }, { 0x10CDB, 0x10C9B }, { 0x10CDC, 0x10C9C }, { 0x10CDD, 0x10C9D }, { 0x10CDE, 0x10C9E }, { 0x10CDF, 0x10C9F }, { 0x10CE0, 0x10CA0 }, { 0x10CE1, 0x10CA1 }, { 0x10CE2, 0x10CA2 }, { 0x10CE3, 0x10CA3 }, { 0x10CE4, 0x10CA4 }, { 0x10CE5, 0x10CA5 }, { 0x10CE6, 0x10CA6 }, { 0x10CE7, 0x10CA7 }, { 0x10CE8, 0x10CA8 }, { 0x10CE9, 0x10CA9 }, { 0x10CEA, 0x10CAA }, { 0x10CEB, 0x10CAB }, { 0x10CEC, 0x10CAC }, { 0x10CED, 0x10CAD }, { 0x10CEE, 0x10CAE }, { 0x10CEF, 0x10CAF }, { 0x10CF0, 0x10CB0 }, { 0x10CF1, 0x10CB1 }, { 0x10CF2, 0x10CB2 }, { 0x118C0, 0x118A0 }, { 0x118C1, 0x118A1 }, { 0x118C2, 0x118A2 }, { 0x118C3, 0x118A3 }, { 0x118C4, 0x118A4 }, { 0x118C5, 0x118A5 }, { 0x118C6, 0x118A6 }, { 0x118C7, 0x118A7 }, { 0x118C8, 0x118A8 }, { 0x118C9, 0x118A9 }, { 0x118CA, 0x118AA }, { 0x118CB, 0x118AB }, { 0x118CC, 0x118AC }, { 0x118CD, 0x118AD }, { 0x118CE, 0x118AE }, { 0x118CF, 0x118AF }, { 0x118D0, 0x118B0 }, { 0x118D1, 0x118B1 }, { 0x118D2, 0x118B2 }, { 0x118D3, 0x118B3 }, { 0x118D4, 0x118B4 }, { 0x118D5, 0x118B5 }, { 0x118D6, 0x118B6 }, { 0x118D7, 0x118B7 }, { 0x118D8, 0x118B8 }, { 0x118D9, 0x118B9 }, { 0x118DA, 0x118BA }, { 0x118DB, 0x118BB }, { 0x118DC, 0x118BC }, { 0x118DD, 0x118BD }, { 0x118DE, 0x118BE }, { 0x118DF, 0x118BF }, { 0x1E922, 0x1E900 }, { 0x1E923, 0x1E901 }, { 0x1E924, 0x1E902 }, { 0x1E925, 0x1E903 }, { 0x1E926, 0x1E904 }, { 0x1E927, 0x1E905 }, { 0x1E928, 0x1E906 }, { 0x1E929, 0x1E907 }, { 0x1E92A, 0x1E908 }, { 0x1E92B, 0x1E909 }, { 0x1E92C, 0x1E90A }, { 0x1E92D, 0x1E90B }, { 0x1E92E, 0x1E90C }, { 0x1E92F, 0x1E90D }, { 0x1E930, 0x1E90E }, { 0x1E931, 0x1E90F }, { 0x1E932, 0x1E910 }, { 0x1E933, 0x1E911 }, { 0x1E934, 0x1E912 }, { 0x1E935, 0x1E913 }, { 0x1E936, 0x1E914 }, { 0x1E937, 0x1E915 }, { 0x1E938, 0x1E916 }, { 0x1E939, 0x1E917 }, { 0x1E93A, 0x1E918 }, { 0x1E93B, 0x1E919 }, { 0x1E93C, 0x1E91A }, { 0x1E93D, 0x1E91B }, { 0x1E93E, 0x1E91C }, { 0x1E93F, 0x1E91D }, { 0x1E940, 0x1E91E }, { 0x1E941, 0x1E91F }, { 0x1E942, 0x1E920 }, { 0x1E943, 0x1E921 } #define MAP(c) uc_toupper (c) #include "test-mapping-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecmp.c��������������������������������������������0000664�0000000�0000000�00000037174�14110572173�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <locale.h> #include "macros.h" #define UNIT char #include "test-casecmp.h" #undef UNIT static void test_iso_8859_1 (int (*my_casecmp) (const char *, size_t, const char *, size_t, const char *, uninorm_t, int *)) { { static const char input1[] = { 'H', 0xF6, 'h', 'l', 'e' }; static const char input2[] = { 'H', 0xD6, 'h', 'L', 'e' }; static const char input3[] = { 'H', 0xF6, 'h', 'l', 'e', 'n' }; static const char input4[] = { 'H', 0xD6, 'h', 'L', 'e', 'n' }; static const char input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const char input1[] = { 0x68, 0x65, 0x69, 0xDF }; static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } } static void test_utf_8 (int (*my_casecmp) (const char *, size_t, const char *, size_t, const char *, uninorm_t, int *)) { /* Normalization effects. */ { static const char input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; static const char input2[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e' }; static const char input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; static const char input4[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e', 'n' }; static const char input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const char input1[] = { 0xC3, 0x84 }; static const char input2[] = { 0x41, 0xCC, 0x88 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const char input1[] = { 0xC7, 0x9E }; static const char input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const char input1[] = { 0xE1, 0xBF, 0x81 }; static const char input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const char input1[] = { 0xEA, 0xB8, 0x80 }; static const char input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; static const char input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const char input1[] = { 0xEA, 0xB7, 0xB8 }; static const char input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const char input1[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const char input2[] = { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const char input3[] = { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can increase the number of Unicode characters. */ { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ static const char input1[] = { 0xC5, 0x89 }; static const char input2[] = { 0xCA, 0xBC, 0x6E }; static const char input3[] = { 0xCA, 0xBC, 0x4E }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ static const char input1[] = { 0xCE, 0x90 }; static const char input2[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } /* Turkish letters i İ ı I */ { /* LATIN CAPITAL LETTER I */ static const char input[] = { 0x49 }; static const char casefolded[] = { 0x69 }; static const char casefolded_tr[] = { 0xC4, 0xB1 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER I */ static const char input[] = { 0x69 }; static const char casefolded[] = { 0x49 }; static const char casefolded_tr[] = { 0xC4, 0xB0 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ static const char input[] = { 0xC4, 0xB0 }; static const char casefolded[] = { 0x69, 0xCC, 0x87 }; static const char casefolded_tr[] = { 0x69 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN SMALL LETTER DOTLESS I */ static const char input[] = { 0xC4, 0xB1 }; static const char casefolded[] = { 0x49 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } { /* "topkapı" */ static const char input[] = { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; static const char casefolded[] = { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Uppercasing can increase the number of Unicode characters. */ { /* "heiß" */ static const char input1[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mappings for some characters can depend on the surrounding characters. */ { /* "περισσότερες πληροφορίες" */ static const char input1[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 }; static const char input2[] = { 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 }; static const char input3[] = { 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 }; int cmp; ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); } /* Case mapping can require subsequent normalization. */ { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ static const char input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; static const char casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; static const char casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; int cmp; ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); ASSERT (cmp != 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_ascii (ulc_casecmp, UNINORM_NFD); if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ test_iso_8859_1 (ulc_casecmp); return 0; case '2': /* Locale encoding is UTF-8. */ test_utf_8 (ulc_casecmp); return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecmp1.sh������������������������������������������0000775�0000000�0000000�00000000564�14110572173�0022666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-ulc-casecmp${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecmp2.sh������������������������������������������0000775�0000000�0000000�00000000607�14110572173�0022665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-ulc-casecmp${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecoll.c�������������������������������������������0000664�0000000�0000000�00000002512�14110572173�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "unicase.h" #include <locale.h> #include "uninorm.h" #include "macros.h" #define UNIT char #include "test-casecmp.h" #undef UNIT int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll on ASCII strings should behave like strcasecmp. */ test_ascii (ulc_casecoll, UNINORM_NFC); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecoll1.sh�����������������������������������������0000775�0000000�0000000�00000000563�14110572173�0023037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-ulc-casecoll${EXEEXT} ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unicase/test-ulc-casecoll2.sh�����������������������������������������0000775�0000000�0000000�00000000606�14110572173�0023036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-ulc-casecoll${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017122�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u16-conv-from-enc.c��������������������������������������0000664�0000000�0000000�00000021066�14110572173�0023332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-16 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint16_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint16_t *result = u16_conv_from_encoding ("ISO-8859-1", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint16_t expected[] = { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i' }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint16_t *result = u16_conv_from_encoding ("ISO-8859-2", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i == 0 ? 0 : i == 5 ? 1 : i == 7 ? 2 : i == 9 ? 3 : i == 11 ? 4 : i == 13 ? 5 : (size_t)(-1))); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } } # endif #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u16-conv-to-enc.c����������������������������������������0000664�0000000�0000000�00000014017�14110572173�0023007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-16 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-16 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF }; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); size_t length; char *result = u16_conv_to_encoding ("ISO-8859-1", handler, input, SIZEOF (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-16 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i' }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); size_t length = 0xdead; char *result = u16_conv_to_encoding ("ISO-8859-1", handler, input, SIZEOF (input), offsets, NULL, &length); switch (handler) { case iconveh_error: ASSERT (result == NULL); ASSERT (errno == EILSEQ); ASSERT (length == 0xdead); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0 || memcmp (result, expected_translit, length) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 5)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-16 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = { 0xD845 }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); size_t length; char *result = u16_conv_to_encoding ("ISO-8859-1", handler, input, SIZEOF (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == strlen ("")); if (o) { ASSERT (offsets[0] == 0); ASSERT (offsets[1] == MAGIC); free (offsets); } free (result); } } #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u16-strconv-from-enc.c�����������������������������������0000664�0000000�0000000�00000011241�14110572173�0024055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-16 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint16_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 }; uint16_t *result = u16_strconv_from_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint16_t expected[] = { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; uint16_t *result = u16_strconv_from_encoding (input, "ISO-8859-2", handler); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint16_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } } # endif #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u16-strconv-to-enc.c�������������������������������������0000664�0000000�0000000�00000007104�14110572173�0023537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-16 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-16 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 }; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-16 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 || strcmp (result, expected_translit) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } # if 0 /* Test conversion from UTF-16 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint16_t input[] = { 0xD845, 0 }; char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } # endif #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u32-conv-from-enc.c��������������������������������������0000664�0000000�0000000�00000021066�14110572173�0023330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-32 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint32_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint32_t *result = u32_conv_from_encoding ("ISO-8859-1", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint32_t expected[] = { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i' }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint32_t *result = u32_conv_from_encoding ("ISO-8859-2", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == SIZEOF (expected)); ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i == 0 ? 0 : i == 5 ? 1 : i == 7 ? 2 : i == 9 ? 3 : i == 11 ? 4 : i == 13 ? 5 : (size_t)(-1))); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } } # endif #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u32-conv-to-enc.c����������������������������������������0000664�0000000�0000000�00000012226�14110572173�0023005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-32 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-32 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint32_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF }; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); size_t length; char *result = u32_conv_to_encoding ("ISO-8859-1", handler, input, SIZEOF (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == i); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-32 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint32_t input[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i' }; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); size_t length = 0xdead; char *result = u32_conv_to_encoding ("ISO-8859-1", handler, input, SIZEOF (input), offsets, NULL, &length); switch (handler) { case iconveh_error: ASSERT (result == NULL); ASSERT (errno == EILSEQ); ASSERT (length == 0xdead); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0 || memcmp (result, expected_translit, length) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == i); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 5)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } break; } } } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u32-strconv-from-enc.c�����������������������������������0000664�0000000�0000000�00000011241�14110572173�0024053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-32 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint32_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 }; uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint32_t expected[] = { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-2", handler); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-16. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint32_t expected[] = /* こんにちは */ { 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 }; uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } } # endif #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u32-strconv-to-enc.c�������������������������������������0000664�0000000�0000000�00000006250�14110572173�0023536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-32 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-32 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint32_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ { 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 }; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-32 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint32_t input[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 || strcmp (result, expected_translit) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u8-conv-from-enc.c���������������������������������������0000664�0000000�0000000�00000020636�14110572173�0023255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-8 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint8_t expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint8_t *result = u8_conv_from_encoding ("ISO-8859-1", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == u8_strlen (expected)); ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); if (o) { for (i = 0; i < 37; i++) ASSERT (offsets[i] == (i < 1 ? i : i < 12 ? i + 1 : i < 18 ? i + 2 : i + 3)); ASSERT (offsets[37] == MAGIC); free (offsets); } free (result); } } /* Test conversion from ISO-8859-2 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint8_t expected[] = "Rafa\305\202 Maszkowski"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint8_t *result = u8_conv_from_encoding ("ISO-8859-2", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == u8_strlen (expected)); ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i < 5 ? i : i + 1)); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == u8_strlen (expected)); ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == u8_strlen (expected)); ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); if (o) { for (i = 0; i < 10; i++) ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); ASSERT (offsets[10] == MAGIC); free (offsets); } free (result); } } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); size_t length; uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, input, strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == u8_strlen (expected)); ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); if (o) { for (i = 0; i < 16; i++) ASSERT (offsets[i] == (i == 0 ? 0 : i == 5 ? 3 : i == 7 ? 6 : i == 9 ? 9 : i == 11 ? 12 : i == 13 ? 15 : (size_t)(-1))); ASSERT (offsets[16] == MAGIC); free (offsets); } free (result); } } } # endif #endif return 0; } ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u8-conv-to-enc.c�����������������������������������������0000664�0000000�0000000�00000014672�14110572173�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-8 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" /* Magic number for detecting bounds violations. */ #define MAGIC 0x1983EFF1 static size_t * new_offsets (size_t n) { size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); offsets[n] = MAGIC; return offsets; } int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); size_t length; char *result = u8_conv_to_encoding ("ISO-8859-1", handler, input, u8_strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 41; i++) ASSERT (offsets[i] == (i < 1 ? i : i == 1 ? (size_t)(-1) : i < 13 ? i - 1 : i == 13 ? (size_t)(-1) : i < 20 ? i - 2 : i == 20 ? (size_t)(-1) : i < 40 ? i - 3 : i == 40 ? (size_t)(-1) : i - 4)); ASSERT (offsets[41] == MAGIC); free (offsets); } free (result); } } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); size_t length = 0xdead; char *result = u8_conv_to_encoding ("ISO-8859-1", handler, input, u8_strlen (input), offsets, NULL, &length); switch (handler) { case iconveh_error: ASSERT (result == NULL); ASSERT (errno == EILSEQ); ASSERT (length == 0xdead); if (o) free (offsets); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0 || memcmp (result, expected_translit, length) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i - 1)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (length == strlen (expected)); ASSERT (memcmp (result, expected, length) == 0); if (o) { for (i = 0; i < 17; i++) ASSERT (offsets[i] == (i < 5 ? i : i == 5 ? (size_t)(-1) : i + 4)); ASSERT (offsets[17] == MAGIC); free (offsets); } free (result); } break; } } } /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "\342"; for (o = 0; o < 2; o++) { size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); size_t length; char *result = u8_conv_to_encoding ("ISO-8859-1", handler, input, u8_strlen (input), offsets, NULL, &length); ASSERT (result != NULL); ASSERT (length == strlen ("")); if (o) { ASSERT (offsets[0] == 0); ASSERT (offsets[1] == MAGIC); free (offsets); } free (result); } } #endif return 0; } ����������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u8-strconv-from-enc.c������������������������������������0000664�0000000�0000000�00000010412�14110572173�0023775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-8 from legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <stdlib.h> #include "unistr.h" #include "macros.h" extern int iconv_supports_encoding (const char *encoding); int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; static const uint8_t expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; uint8_t *result = u8_strconv_from_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test conversion from ISO-8859-2 to UTF-8 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ static const uint8_t expected[] = "Rafa\305\202 Maszkowski"; uint8_t *result = u8_strconv_from_encoding (input, "ISO-8859-2", handler); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* 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 (iconv_supports_encoding ("ISO-2022-JP-2")) { /* Test conversions from autodetect_jp to UTF-8. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } } # endif #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniconv/test-u8-strconv-to-enc.c��������������������������������������0000664�0000000�0000000�00000006363�14110572173�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-8 to legacy encodings. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniconv.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main () { #if HAVE_ICONV static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, ISO-8859-2, and UTF-8. */ /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); switch (handler) { case iconveh_error: ASSERT (result == NULL && errno == EILSEQ); break; case iconveh_question_mark: { static const char expected[] = "Rafa? Maszkowski"; static const char expected_translit[] = "Rafal Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0 || strcmp (result, expected_translit) == 0); free (result); } break; case iconveh_escape_sequence: { static const char expected[] = "Rafa\\u0142 Maszkowski"; ASSERT (result != NULL); ASSERT (strcmp (result, expected) == 0); free (result); } break; } } # if 0 /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ for (h = 0; h < SIZEOF (handlers); h++) { enum iconv_ilseq_handler handler = handlers[h]; static const uint8_t input[] = "\342"; char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); ASSERT (result != NULL); ASSERT (strcmp (result, "") == 0); free (result); } # endif #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017301�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-bidi_byname.c�������������������������������������������0000664�0000000�0000000�00000016047�14110572173�0022674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_bidi_class_byname ("L") == UC_BIDI_L); ASSERT (uc_bidi_class_byname ("LRE") == UC_BIDI_LRE); ASSERT (uc_bidi_class_byname ("LRO") == UC_BIDI_LRO); ASSERT (uc_bidi_class_byname ("R") == UC_BIDI_R); ASSERT (uc_bidi_class_byname ("AL") == UC_BIDI_AL); ASSERT (uc_bidi_class_byname ("RLE") == UC_BIDI_RLE); ASSERT (uc_bidi_class_byname ("RLO") == UC_BIDI_RLO); ASSERT (uc_bidi_class_byname ("PDF") == UC_BIDI_PDF); ASSERT (uc_bidi_class_byname ("EN") == UC_BIDI_EN); ASSERT (uc_bidi_class_byname ("ES") == UC_BIDI_ES); ASSERT (uc_bidi_class_byname ("ET") == UC_BIDI_ET); ASSERT (uc_bidi_class_byname ("AN") == UC_BIDI_AN); ASSERT (uc_bidi_class_byname ("CS") == UC_BIDI_CS); ASSERT (uc_bidi_class_byname ("NSM") == UC_BIDI_NSM); ASSERT (uc_bidi_class_byname ("BN") == UC_BIDI_BN); ASSERT (uc_bidi_class_byname ("B") == UC_BIDI_B); ASSERT (uc_bidi_class_byname ("S") == UC_BIDI_S); ASSERT (uc_bidi_class_byname ("WS") == UC_BIDI_WS); ASSERT (uc_bidi_class_byname ("ON") == UC_BIDI_ON); ASSERT (uc_bidi_class_byname ("ARABIC LETTER") == UC_BIDI_AL); ASSERT (uc_bidi_class_byname ("Arabic Letter") == UC_BIDI_AL); ASSERT (uc_bidi_class_byname ("Arabic_Letter") == UC_BIDI_AL); ASSERT (uc_bidi_class_byname ("ArabicLetter") == UC_BIDI_AL); ASSERT (uc_bidi_class_byname ("ARABIC NUMBER") == UC_BIDI_AN); ASSERT (uc_bidi_class_byname ("Arabic Number") == UC_BIDI_AN); ASSERT (uc_bidi_class_byname ("Arabic_Number") == UC_BIDI_AN); ASSERT (uc_bidi_class_byname ("ArabicNumber") == UC_BIDI_AN); ASSERT (uc_bidi_class_byname ("PARAGRAPH SEPARATOR") == UC_BIDI_B); ASSERT (uc_bidi_class_byname ("Paragraph Separator") == UC_BIDI_B); ASSERT (uc_bidi_class_byname ("Paragraph_Separator") == UC_BIDI_B); ASSERT (uc_bidi_class_byname ("ParagraphSeparator") == UC_BIDI_B); ASSERT (uc_bidi_class_byname ("BOUNDARY NEUTRAL") == UC_BIDI_BN); ASSERT (uc_bidi_class_byname ("Boundary Neutral") == UC_BIDI_BN); ASSERT (uc_bidi_class_byname ("Boundary_Neutral") == UC_BIDI_BN); ASSERT (uc_bidi_class_byname ("BoundaryNeutral") == UC_BIDI_BN); ASSERT (uc_bidi_class_byname ("COMMON SEPARATOR") == UC_BIDI_CS); ASSERT (uc_bidi_class_byname ("Common Separator") == UC_BIDI_CS); ASSERT (uc_bidi_class_byname ("Common_Separator") == UC_BIDI_CS); ASSERT (uc_bidi_class_byname ("CommonSeparator") == UC_BIDI_CS); ASSERT (uc_bidi_class_byname ("EUROPEAN NUMBER") == UC_BIDI_EN); ASSERT (uc_bidi_class_byname ("European Number") == UC_BIDI_EN); ASSERT (uc_bidi_class_byname ("European_Number") == UC_BIDI_EN); ASSERT (uc_bidi_class_byname ("EuropeanNumber") == UC_BIDI_EN); ASSERT (uc_bidi_class_byname ("EUROPEAN SEPARATOR") == UC_BIDI_ES); ASSERT (uc_bidi_class_byname ("European Separator") == UC_BIDI_ES); ASSERT (uc_bidi_class_byname ("European_Separator") == UC_BIDI_ES); ASSERT (uc_bidi_class_byname ("EuropeanSeparator") == UC_BIDI_ES); ASSERT (uc_bidi_class_byname ("EUROPEAN TERMINATOR") == UC_BIDI_ET); ASSERT (uc_bidi_class_byname ("European Terminator") == UC_BIDI_ET); ASSERT (uc_bidi_class_byname ("European_Terminator") == UC_BIDI_ET); ASSERT (uc_bidi_class_byname ("EuropeanTerminator") == UC_BIDI_ET); ASSERT (uc_bidi_class_byname ("LEFT TO RIGHT") == UC_BIDI_L); ASSERT (uc_bidi_class_byname ("Left To Right") == UC_BIDI_L); ASSERT (uc_bidi_class_byname ("Left_To_Right") == UC_BIDI_L); ASSERT (uc_bidi_class_byname ("LeftToRight") == UC_BIDI_L); ASSERT (uc_bidi_class_byname ("LEFT TO RIGHT EMBEDDING") == UC_BIDI_LRE); ASSERT (uc_bidi_class_byname ("Left To Right Embedding") == UC_BIDI_LRE); ASSERT (uc_bidi_class_byname ("Left_To_Right_Embedding") == UC_BIDI_LRE); ASSERT (uc_bidi_class_byname ("LeftToRightEmbedding") == UC_BIDI_LRE); ASSERT (uc_bidi_class_byname ("LEFT TO RIGHT OVERRIDE") == UC_BIDI_LRO); ASSERT (uc_bidi_class_byname ("Left To Right Override") == UC_BIDI_LRO); ASSERT (uc_bidi_class_byname ("Left_To_Right_Override") == UC_BIDI_LRO); ASSERT (uc_bidi_class_byname ("LeftToRightOverride") == UC_BIDI_LRO); ASSERT (uc_bidi_class_byname ("NONSPACING MARK") == UC_BIDI_NSM); ASSERT (uc_bidi_class_byname ("Nonspacing Mark") == UC_BIDI_NSM); ASSERT (uc_bidi_class_byname ("Nonspacing_Mark") == UC_BIDI_NSM); ASSERT (uc_bidi_class_byname ("NonspacingMark") == UC_BIDI_NSM); ASSERT (uc_bidi_class_byname ("OTHER NEUTRAL") == UC_BIDI_ON); ASSERT (uc_bidi_class_byname ("Other Neutral") == UC_BIDI_ON); ASSERT (uc_bidi_class_byname ("Other_Neutral") == UC_BIDI_ON); ASSERT (uc_bidi_class_byname ("OtherNeutral") == UC_BIDI_ON); ASSERT (uc_bidi_class_byname ("POP DIRECTIONAL FORMAT") == UC_BIDI_PDF); ASSERT (uc_bidi_class_byname ("Pop Directional Format") == UC_BIDI_PDF); ASSERT (uc_bidi_class_byname ("Pop_Directional_Format") == UC_BIDI_PDF); ASSERT (uc_bidi_class_byname ("PopDirectionalFormat") == UC_BIDI_PDF); ASSERT (uc_bidi_class_byname ("RIGHT TO LEFT") == UC_BIDI_R); ASSERT (uc_bidi_class_byname ("Right To Left") == UC_BIDI_R); ASSERT (uc_bidi_class_byname ("Right_To_Left") == UC_BIDI_R); ASSERT (uc_bidi_class_byname ("RightToLeft") == UC_BIDI_R); ASSERT (uc_bidi_class_byname ("RIGHT TO LEFT EMBEDDING") == UC_BIDI_RLE); ASSERT (uc_bidi_class_byname ("Right To Left Embedding") == UC_BIDI_RLE); ASSERT (uc_bidi_class_byname ("Right_To_Left_Embedding") == UC_BIDI_RLE); ASSERT (uc_bidi_class_byname ("RightToLeftEmbedding") == UC_BIDI_RLE); ASSERT (uc_bidi_class_byname ("RIGHT TO LEFT OVERRIDE") == UC_BIDI_RLO); ASSERT (uc_bidi_class_byname ("Right To Left Override") == UC_BIDI_RLO); ASSERT (uc_bidi_class_byname ("Right_To_Left_Override") == UC_BIDI_RLO); ASSERT (uc_bidi_class_byname ("RightToLeftOverride") == UC_BIDI_RLO); ASSERT (uc_bidi_class_byname ("SEGMENT SEPARATOR") == UC_BIDI_S); ASSERT (uc_bidi_class_byname ("Segment Separator") == UC_BIDI_S); ASSERT (uc_bidi_class_byname ("Segment_Separator") == UC_BIDI_S); ASSERT (uc_bidi_class_byname ("SegmentSeparator") == UC_BIDI_S); ASSERT (uc_bidi_class_byname ("WHITE SPACE") == UC_BIDI_WS); ASSERT (uc_bidi_class_byname ("White Space") == UC_BIDI_WS); ASSERT (uc_bidi_class_byname ("White_Space") == UC_BIDI_WS); ASSERT (uc_bidi_class_byname ("WhiteSpace") == UC_BIDI_WS); ASSERT (uc_bidi_class_byname ("X") < 0); ASSERT (uc_bidi_class_byname ("") < 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-bidi_longname.c�����������������������������������������0000664�0000000�0000000�00000004716�14110572173�0023221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_AL), "Arabic Letter") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_AN), "Arabic Number") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_B), "Paragraph Separator") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_BN), "Boundary Neutral") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_CS), "Common Separator") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_EN), "European Number") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_ES), "European Separator") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_ET), "European Terminator") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_L), "Left To Right") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_LRE), "Left To Right Embedding") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_LRO), "Left To Right Override") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_NSM), "Nonspacing Mark") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_ON), "Other Neutral") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_PDF), "Pop Directional Format") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_R), "Right To Left") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_RLE), "Right To Left Embedding") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_RLO), "Right To Left Override") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_S), "Segment Separator") == 0); ASSERT (strcmp (uc_bidi_class_long_name (UC_BIDI_WS), "White Space") == 0); ASSERT (uc_bidi_class_long_name (-1) == NULL); return 0; } ��������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-bidi_name.c���������������������������������������������0000664�0000000�0000000�00000001730�14110572173�0022332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_bidi_class_name (UC_BIDI_NSM), "NSM") == 0); ASSERT (uc_bidi_class_name (-1) == NULL); return 0; } ����������������������������������������gnulib-20210822~d383792/tests/unictype/test-bidi_of.c�����������������������������������������������0000664�0000000�0000000�00000001765�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_bidi_class ('x') == UC_BIDI_L); ASSERT (uc_bidi_class (0x05D7) == UC_BIDI_R); ASSERT (uc_bidi_class ('7') == UC_BIDI_EN); return 0; } �����������gnulib-20210822~d383792/tests/unictype/test-bidi_test.c���������������������������������������������0000664�0000000�0000000�00000002625�14110572173�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_is_bidi_class ('x', UC_BIDI_L)); ASSERT (!uc_is_bidi_class ('x', UC_BIDI_R)); ASSERT (!uc_is_bidi_class ('x', UC_BIDI_EN)); ASSERT (uc_is_bidi_class (0x05D7, UC_BIDI_R)); ASSERT (!uc_is_bidi_class (0x05D7, UC_BIDI_L)); ASSERT (!uc_is_bidi_class (0x05D7, UC_BIDI_EN)); ASSERT (uc_is_bidi_class ('7', UC_BIDI_EN)); ASSERT (!uc_is_bidi_class ('7', UC_BIDI_L)); ASSERT (!uc_is_bidi_class ('7', UC_BIDI_R)); { unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (uc_is_bidi_class (c, uc_bidi_class (c))); } return 0; } �����������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-block_list.c��������������������������������������������0000664�0000000�0000000�00000002514�14110572173�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { const uc_block_t *blocks; size_t nblocks; uc_all_blocks (&blocks, &nblocks); { const uc_block_t *latin_block = NULL; const uc_block_t *hebrew_block = NULL; size_t i; for (i = 0; i < nblocks; i++) { if (strcmp (blocks[i].name, "Latin") == 0) latin_block = &blocks[i]; if (strcmp (blocks[i].name, "Hebrew") == 0) hebrew_block = &blocks[i]; } ASSERT (latin_block == NULL); ASSERT (hebrew_block != NULL); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-block_of.c����������������������������������������������0000664�0000000�0000000�00000003266�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_block ('x')->name, "Basic Latin") == 0); ASSERT (strcmp (uc_block (0x20AC)->name, "Currency Symbols") == 0); { unsigned int c; for (c = 0; c < 0x110000; c++) { const uc_block_t *block = uc_block (c); ASSERT (block == NULL || uc_is_block (c, block)); } } { const uc_block_t *blocks; size_t nblocks; size_t i; uc_all_blocks (&blocks, &nblocks); for (i = 0; i < nblocks; i++) { if (strcmp (blocks[i].name, "Hebrew") == 0) { ASSERT (uc_block (0x05DE) == &blocks[i]); ASSERT (uc_is_block (0x05DE, &blocks[i])); } } for (i = 0; i < nblocks; i++) { unsigned int c; for (c = blocks[i].start; c <= blocks[i].end; c++) ASSERT (uc_block (c) == &blocks[i]); } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-block_test.c��������������������������������������������0000664�0000000�0000000�00000002250�14110572173�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uc_block_t b; b.start = 0x20000; b.end = 0x2A6D6; b.name = "CJK Supplemental Area"; ASSERT (!uc_is_block (0x5678, &b)); ASSERT (!uc_is_block (0x1FFFF, &b)); ASSERT (uc_is_block (0x20000, &b)); ASSERT (uc_is_block (0x25678, &b)); ASSERT (uc_is_block (0x2A6D6, &b)); ASSERT (!uc_is_block (0x2A6D7, &b)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_C.c�����������������������������������������������0000664�0000000�0000000�00000040753�14110572173�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F }, { 0x00AD, 0x00AD }, { 0x0378, 0x0379 }, { 0x0380, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0530, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 0x058C }, { 0x0590, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EF }, { 0x05F5, 0x0605 }, { 0x061C, 0x061D }, { 0x06DD, 0x06DD }, { 0x070E, 0x070F }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, { 0x07FB, 0x07FF }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x089F }, { 0x08B5, 0x08B5 }, { 0x08BE, 0x08D3 }, { 0x08E2, 0x08E2 }, { 0x0984, 0x0984 }, { 0x098D, 0x098E }, { 0x0991, 0x0992 }, { 0x09A9, 0x09A9 }, { 0x09B1, 0x09B1 }, { 0x09B3, 0x09B5 }, { 0x09BA, 0x09BB }, { 0x09C5, 0x09C6 }, { 0x09C9, 0x09CA }, { 0x09CF, 0x09D6 }, { 0x09D8, 0x09DB }, { 0x09DE, 0x09DE }, { 0x09E4, 0x09E5 }, { 0x09FC, 0x0A00 }, { 0x0A04, 0x0A04 }, { 0x0A0B, 0x0A0E }, { 0x0A11, 0x0A12 }, { 0x0A29, 0x0A29 }, { 0x0A31, 0x0A31 }, { 0x0A34, 0x0A34 }, { 0x0A37, 0x0A37 }, { 0x0A3A, 0x0A3B }, { 0x0A3D, 0x0A3D }, { 0x0A43, 0x0A46 }, { 0x0A49, 0x0A4A }, { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A58 }, { 0x0A5D, 0x0A5D }, { 0x0A5F, 0x0A65 }, { 0x0A76, 0x0A80 }, { 0x0A84, 0x0A84 }, { 0x0A8E, 0x0A8E }, { 0x0A92, 0x0A92 }, { 0x0AA9, 0x0AA9 }, { 0x0AB1, 0x0AB1 }, { 0x0AB4, 0x0AB4 }, { 0x0ABA, 0x0ABB }, { 0x0AC6, 0x0AC6 }, { 0x0ACA, 0x0ACA }, { 0x0ACE, 0x0ACF }, { 0x0AD1, 0x0ADF }, { 0x0AE4, 0x0AE5 }, { 0x0AF2, 0x0AF8 }, { 0x0AFA, 0x0B00 }, { 0x0B04, 0x0B04 }, { 0x0B0D, 0x0B0E }, { 0x0B11, 0x0B12 }, { 0x0B29, 0x0B29 }, { 0x0B31, 0x0B31 }, { 0x0B34, 0x0B34 }, { 0x0B3A, 0x0B3B }, { 0x0B45, 0x0B46 }, { 0x0B49, 0x0B4A }, { 0x0B4E, 0x0B55 }, { 0x0B58, 0x0B5B }, { 0x0B5E, 0x0B5E }, { 0x0B64, 0x0B65 }, { 0x0B78, 0x0B81 }, { 0x0B84, 0x0B84 }, { 0x0B8B, 0x0B8D }, { 0x0B91, 0x0B91 }, { 0x0B96, 0x0B98 }, { 0x0B9B, 0x0B9B }, { 0x0B9D, 0x0B9D }, { 0x0BA0, 0x0BA2 }, { 0x0BA5, 0x0BA7 }, { 0x0BAB, 0x0BAD }, { 0x0BBA, 0x0BBD }, { 0x0BC3, 0x0BC5 }, { 0x0BC9, 0x0BC9 }, { 0x0BCE, 0x0BCF }, { 0x0BD1, 0x0BD6 }, { 0x0BD8, 0x0BE5 }, { 0x0BFB, 0x0BFF }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5B, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C84, 0x0C84 }, { 0x0C8D, 0x0C8D }, { 0x0C91, 0x0C91 }, { 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB }, { 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 }, { 0x0CD7, 0x0CDD }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, { 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0D00 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 0x0DE5 }, { 0x0DF0, 0x0DF1 }, { 0x0DF5, 0x0E00 }, { 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 }, { 0x0E85, 0x0E86 }, { 0x0E89, 0x0E89 }, { 0x0E8B, 0x0E8C }, { 0x0E8E, 0x0E93 }, { 0x0E98, 0x0E98 }, { 0x0EA0, 0x0EA0 }, { 0x0EA4, 0x0EA4 }, { 0x0EA6, 0x0EA6 }, { 0x0EA8, 0x0EA9 }, { 0x0EAC, 0x0EAC }, { 0x0EBA, 0x0EBA }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 }, { 0x0EC7, 0x0EC7 }, { 0x0ECE, 0x0ECF }, { 0x0EDA, 0x0EDB }, { 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC }, { 0x10CE, 0x10CF }, { 0x1249, 0x1249 }, { 0x124E, 0x124F }, { 0x1257, 0x1257 }, { 0x1259, 0x1259 }, { 0x125E, 0x125F }, { 0x1289, 0x1289 }, { 0x128E, 0x128F }, { 0x12B1, 0x12B1 }, { 0x12B6, 0x12B7 }, { 0x12BF, 0x12BF }, { 0x12C1, 0x12C1 }, { 0x12C6, 0x12C7 }, { 0x12D7, 0x12D7 }, { 0x1311, 0x1311 }, { 0x1316, 0x1317 }, { 0x135B, 0x135C }, { 0x137D, 0x137F }, { 0x139A, 0x139F }, { 0x13F6, 0x13F7 }, { 0x13FE, 0x13FF }, { 0x169D, 0x169F }, { 0x16F9, 0x16FF }, { 0x170D, 0x170D }, { 0x1715, 0x171F }, { 0x1737, 0x173F }, { 0x1754, 0x175F }, { 0x176D, 0x176D }, { 0x1771, 0x1771 }, { 0x1774, 0x177F }, { 0x17DE, 0x17DF }, { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180E, 0x180F }, { 0x181A, 0x181F }, { 0x1878, 0x187F }, { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, { 0x191F, 0x191F }, { 0x192C, 0x192F }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, { 0x196E, 0x196F }, { 0x1975, 0x197F }, { 0x19AC, 0x19AF }, { 0x19CA, 0x19CF }, { 0x19DB, 0x19DD }, { 0x1A1C, 0x1A1D }, { 0x1A5F, 0x1A5F }, { 0x1A7D, 0x1A7E }, { 0x1A8A, 0x1A8F }, { 0x1A9A, 0x1A9F }, { 0x1AAE, 0x1AAF }, { 0x1ABF, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C89, 0x1CBF }, { 0x1CC8, 0x1CCF }, { 0x1CF7, 0x1CF7 }, { 0x1CFA, 0x1CFF }, { 0x1DF6, 0x1DFA }, { 0x1F16, 0x1F17 }, { 0x1F1E, 0x1F1F }, { 0x1F46, 0x1F47 }, { 0x1F4E, 0x1F4F }, { 0x1F58, 0x1F58 }, { 0x1F5A, 0x1F5A }, { 0x1F5C, 0x1F5C }, { 0x1F5E, 0x1F5E }, { 0x1F7E, 0x1F7F }, { 0x1FB5, 0x1FB5 }, { 0x1FC5, 0x1FC5 }, { 0x1FD4, 0x1FD5 }, { 0x1FDC, 0x1FDC }, { 0x1FF0, 0x1FF1 }, { 0x1FF5, 0x1FF5 }, { 0x1FFF, 0x1FFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x206F }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, { 0x209D, 0x209F }, { 0x20BF, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218C, 0x218F }, { 0x23FF, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B97 }, { 0x2BBA, 0x2BBC }, { 0x2BC9, 0x2BC9 }, { 0x2BD2, 0x2BEB }, { 0x2BF0, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF4, 0x2CF8 }, { 0x2D26, 0x2D26 }, { 0x2D28, 0x2D2C }, { 0x2D2E, 0x2D2F }, { 0x2D68, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E45, 0x2E7F }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x312E, 0x3130 }, { 0x318F, 0x318F }, { 0x31BB, 0x31BF }, { 0x31E4, 0x31EF }, { 0x321F, 0x321F }, { 0x32FF, 0x32FF }, { 0x4DB6, 0x4DBF }, { 0x9FD6, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA6F8, 0xA6FF }, { 0xA7AF, 0xA7AF }, { 0xA7B8, 0xA7F6 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C6, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FE, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9FF, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xAB2F }, { 0xAB66, 0xAB6F }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xF8FF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC2, 0xFBD2 }, { 0xFD40, 0xFD4F }, { 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDEF }, { 0xFDFE, 0xFDFF }, { 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFE6F }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFF00 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFD0, 0xFFD1 }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFFB }, { 0xFFFE, 0xFFFF }, { 0x1000C, 0x1000C }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x1003E, 0x1003E }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x100FB, 0x100FF }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x1018F, 0x1018F }, { 0x1019C, 0x1019F }, { 0x101A1, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x102FC, 0x102FF }, { 0x10324, 0x1032F }, { 0x1034B, 0x1034F }, { 0x1037B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x104D4, 0x104D7 }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x10564, 0x1056E }, { 0x10570, 0x105FF }, { 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1089F, 0x108A6 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108F6, 0x108FA }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x1097F }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10AE7, 0x10AEA }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B9D, 0x10BA8 }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D00, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107E }, { 0x110BD, 0x110BD }, { 0x110C2, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110FA, 0x110FF }, { 0x11135, 0x11135 }, { 0x11144, 0x1114F }, { 0x11177, 0x1117F }, { 0x111CE, 0x111CF }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x11212, 0x11212 }, { 0x1123F, 0x1127F }, { 0x11287, 0x11287 }, { 0x11289, 0x11289 }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x112AA, 0x112AF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x11304, 0x11304 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x11329, 0x11329 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x1133A, 0x1133B }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x1134E, 0x1134F }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11364, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1145A, 0x1145A }, { 0x1145C, 0x1145C }, { 0x1145E, 0x1147F }, { 0x114C8, 0x114CF }, { 0x114DA, 0x1157F }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x11645, 0x1164F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x116B8, 0x116BF }, { 0x116CA, 0x116FF }, { 0x1171A, 0x1171C }, { 0x1172C, 0x1172F }, { 0x11740, 0x1189F }, { 0x118F3, 0x118FE }, { 0x11900, 0x11ABF }, { 0x11AF9, 0x11BFF }, { 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F }, { 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 }, { 0x11CB7, 0x11FFF }, { 0x1239A, 0x123FF }, { 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12FFF }, { 0x1342F, 0x143FF }, { 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D }, { 0x16A70, 0x16ACF }, { 0x16AEE, 0x16AEF }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16B5A, 0x16B5A }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B90, 0x16EFF }, { 0x16F45, 0x16F4F }, { 0x16F7F, 0x16F8E }, { 0x16FA0, 0x16FDF }, { 0x16FE1, 0x16FFF }, { 0x187ED, 0x187FF }, { 0x18AF3, 0x1AFFF }, { 0x1B002, 0x1BBFF }, { 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F }, { 0x1BC89, 0x1BC8F }, { 0x1BC9A, 0x1BC9B }, { 0x1BCA0, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D173, 0x1D17A }, { 0x1D1E9, 0x1D1FF }, { 0x1D246, 0x1D2FF }, { 0x1D357, 0x1D35F }, { 0x1D372, 0x1D3FF }, { 0x1D455, 0x1D455 }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D4A3, 0x1D4A4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D4BA, 0x1D4BA }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D506, 0x1D506 }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DFFF }, { 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E94B, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EDFF }, { 0x1EE04, 0x1EE04 }, { 0x1EE20, 0x1EE20 }, { 0x1EE23, 0x1EE23 }, { 0x1EE25, 0x1EE26 }, { 0x1EE28, 0x1EE28 }, { 0x1EE33, 0x1EE33 }, { 0x1EE38, 0x1EE38 }, { 0x1EE3A, 0x1EE3A }, { 0x1EE3C, 0x1EE41 }, { 0x1EE43, 0x1EE46 }, { 0x1EE48, 0x1EE48 }, { 0x1EE4A, 0x1EE4A }, { 0x1EE4C, 0x1EE4C }, { 0x1EE50, 0x1EE50 }, { 0x1EE53, 0x1EE53 }, { 0x1EE55, 0x1EE56 }, { 0x1EE58, 0x1EE58 }, { 0x1EE5A, 0x1EE5A }, { 0x1EE5C, 0x1EE5C }, { 0x1EE5E, 0x1EE5E }, { 0x1EE60, 0x1EE60 }, { 0x1EE63, 0x1EE63 }, { 0x1EE65, 0x1EE66 }, { 0x1EE6B, 0x1EE6B }, { 0x1EE73, 0x1EE73 }, { 0x1EE78, 0x1EE78 }, { 0x1EE7D, 0x1EE7D }, { 0x1EE7F, 0x1EE7F }, { 0x1EE8A, 0x1EE8A }, { 0x1EE9C, 0x1EEA0 }, { 0x1EEA4, 0x1EEA4 }, { 0x1EEAA, 0x1EEAA }, { 0x1EEBC, 0x1EEEF }, { 0x1EEF2, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF }, { 0x1F10D, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16C, 0x1F16F }, { 0x1F1AD, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F6D3, 0x1F6DF }, { 0x1F6ED, 0x1F6EF }, { 0x1F6F7, 0x1F6FF }, { 0x1F774, 0x1F77F }, { 0x1F7D5, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F90F }, { 0x1F91F, 0x1F91F }, { 0x1F928, 0x1F92F }, { 0x1F931, 0x1F932 }, { 0x1F93F, 0x1F93F }, { 0x1F94C, 0x1F94F }, { 0x1F95F, 0x1F97F }, { 0x1F992, 0x1F9BF }, { 0x1F9C1, 0x1FFFF }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2F7FF }, { 0x2FA1E, 0xE00FF }, { 0xE01F0, 0x10FFFF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_C) #include "test-predicate-part2.h" ���������������������gnulib-20210822~d383792/tests/unictype/test-categ_Cc.c����������������������������������������������0000664�0000000�0000000�00000001715�14110572173�0022116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cc) #include "test-predicate-part2.h" ���������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Cf.c����������������������������������������������0000664�0000000�0000000�00000002527�14110572173�0022123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x0600, 0x0605 }, { 0x061C, 0x061C }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cf) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Cn.c����������������������������������������������0000664�0000000�0000000�00000040621�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0378, 0x0379 }, { 0x0380, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0530, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 0x058C }, { 0x0590, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EF }, { 0x05F5, 0x05FF }, { 0x061D, 0x061D }, { 0x070E, 0x070E }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, { 0x07FB, 0x07FF }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x089F }, { 0x08B5, 0x08B5 }, { 0x08BE, 0x08D3 }, { 0x0984, 0x0984 }, { 0x098D, 0x098E }, { 0x0991, 0x0992 }, { 0x09A9, 0x09A9 }, { 0x09B1, 0x09B1 }, { 0x09B3, 0x09B5 }, { 0x09BA, 0x09BB }, { 0x09C5, 0x09C6 }, { 0x09C9, 0x09CA }, { 0x09CF, 0x09D6 }, { 0x09D8, 0x09DB }, { 0x09DE, 0x09DE }, { 0x09E4, 0x09E5 }, { 0x09FC, 0x0A00 }, { 0x0A04, 0x0A04 }, { 0x0A0B, 0x0A0E }, { 0x0A11, 0x0A12 }, { 0x0A29, 0x0A29 }, { 0x0A31, 0x0A31 }, { 0x0A34, 0x0A34 }, { 0x0A37, 0x0A37 }, { 0x0A3A, 0x0A3B }, { 0x0A3D, 0x0A3D }, { 0x0A43, 0x0A46 }, { 0x0A49, 0x0A4A }, { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A58 }, { 0x0A5D, 0x0A5D }, { 0x0A5F, 0x0A65 }, { 0x0A76, 0x0A80 }, { 0x0A84, 0x0A84 }, { 0x0A8E, 0x0A8E }, { 0x0A92, 0x0A92 }, { 0x0AA9, 0x0AA9 }, { 0x0AB1, 0x0AB1 }, { 0x0AB4, 0x0AB4 }, { 0x0ABA, 0x0ABB }, { 0x0AC6, 0x0AC6 }, { 0x0ACA, 0x0ACA }, { 0x0ACE, 0x0ACF }, { 0x0AD1, 0x0ADF }, { 0x0AE4, 0x0AE5 }, { 0x0AF2, 0x0AF8 }, { 0x0AFA, 0x0B00 }, { 0x0B04, 0x0B04 }, { 0x0B0D, 0x0B0E }, { 0x0B11, 0x0B12 }, { 0x0B29, 0x0B29 }, { 0x0B31, 0x0B31 }, { 0x0B34, 0x0B34 }, { 0x0B3A, 0x0B3B }, { 0x0B45, 0x0B46 }, { 0x0B49, 0x0B4A }, { 0x0B4E, 0x0B55 }, { 0x0B58, 0x0B5B }, { 0x0B5E, 0x0B5E }, { 0x0B64, 0x0B65 }, { 0x0B78, 0x0B81 }, { 0x0B84, 0x0B84 }, { 0x0B8B, 0x0B8D }, { 0x0B91, 0x0B91 }, { 0x0B96, 0x0B98 }, { 0x0B9B, 0x0B9B }, { 0x0B9D, 0x0B9D }, { 0x0BA0, 0x0BA2 }, { 0x0BA5, 0x0BA7 }, { 0x0BAB, 0x0BAD }, { 0x0BBA, 0x0BBD }, { 0x0BC3, 0x0BC5 }, { 0x0BC9, 0x0BC9 }, { 0x0BCE, 0x0BCF }, { 0x0BD1, 0x0BD6 }, { 0x0BD8, 0x0BE5 }, { 0x0BFB, 0x0BFF }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5B, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C84, 0x0C84 }, { 0x0C8D, 0x0C8D }, { 0x0C91, 0x0C91 }, { 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB }, { 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 }, { 0x0CD7, 0x0CDD }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, { 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0D00 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 0x0DE5 }, { 0x0DF0, 0x0DF1 }, { 0x0DF5, 0x0E00 }, { 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 }, { 0x0E85, 0x0E86 }, { 0x0E89, 0x0E89 }, { 0x0E8B, 0x0E8C }, { 0x0E8E, 0x0E93 }, { 0x0E98, 0x0E98 }, { 0x0EA0, 0x0EA0 }, { 0x0EA4, 0x0EA4 }, { 0x0EA6, 0x0EA6 }, { 0x0EA8, 0x0EA9 }, { 0x0EAC, 0x0EAC }, { 0x0EBA, 0x0EBA }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 }, { 0x0EC7, 0x0EC7 }, { 0x0ECE, 0x0ECF }, { 0x0EDA, 0x0EDB }, { 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC }, { 0x10CE, 0x10CF }, { 0x1249, 0x1249 }, { 0x124E, 0x124F }, { 0x1257, 0x1257 }, { 0x1259, 0x1259 }, { 0x125E, 0x125F }, { 0x1289, 0x1289 }, { 0x128E, 0x128F }, { 0x12B1, 0x12B1 }, { 0x12B6, 0x12B7 }, { 0x12BF, 0x12BF }, { 0x12C1, 0x12C1 }, { 0x12C6, 0x12C7 }, { 0x12D7, 0x12D7 }, { 0x1311, 0x1311 }, { 0x1316, 0x1317 }, { 0x135B, 0x135C }, { 0x137D, 0x137F }, { 0x139A, 0x139F }, { 0x13F6, 0x13F7 }, { 0x13FE, 0x13FF }, { 0x169D, 0x169F }, { 0x16F9, 0x16FF }, { 0x170D, 0x170D }, { 0x1715, 0x171F }, { 0x1737, 0x173F }, { 0x1754, 0x175F }, { 0x176D, 0x176D }, { 0x1771, 0x1771 }, { 0x1774, 0x177F }, { 0x17DE, 0x17DF }, { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180F, 0x180F }, { 0x181A, 0x181F }, { 0x1878, 0x187F }, { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, { 0x191F, 0x191F }, { 0x192C, 0x192F }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, { 0x196E, 0x196F }, { 0x1975, 0x197F }, { 0x19AC, 0x19AF }, { 0x19CA, 0x19CF }, { 0x19DB, 0x19DD }, { 0x1A1C, 0x1A1D }, { 0x1A5F, 0x1A5F }, { 0x1A7D, 0x1A7E }, { 0x1A8A, 0x1A8F }, { 0x1A9A, 0x1A9F }, { 0x1AAE, 0x1AAF }, { 0x1ABF, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C89, 0x1CBF }, { 0x1CC8, 0x1CCF }, { 0x1CF7, 0x1CF7 }, { 0x1CFA, 0x1CFF }, { 0x1DF6, 0x1DFA }, { 0x1F16, 0x1F17 }, { 0x1F1E, 0x1F1F }, { 0x1F46, 0x1F47 }, { 0x1F4E, 0x1F4F }, { 0x1F58, 0x1F58 }, { 0x1F5A, 0x1F5A }, { 0x1F5C, 0x1F5C }, { 0x1F5E, 0x1F5E }, { 0x1F7E, 0x1F7F }, { 0x1FB5, 0x1FB5 }, { 0x1FC5, 0x1FC5 }, { 0x1FD4, 0x1FD5 }, { 0x1FDC, 0x1FDC }, { 0x1FF0, 0x1FF1 }, { 0x1FF5, 0x1FF5 }, { 0x1FFF, 0x1FFF }, { 0x2065, 0x2065 }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, { 0x209D, 0x209F }, { 0x20BF, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218C, 0x218F }, { 0x23FF, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B97 }, { 0x2BBA, 0x2BBC }, { 0x2BC9, 0x2BC9 }, { 0x2BD2, 0x2BEB }, { 0x2BF0, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF4, 0x2CF8 }, { 0x2D26, 0x2D26 }, { 0x2D28, 0x2D2C }, { 0x2D2E, 0x2D2F }, { 0x2D68, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E45, 0x2E7F }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x312E, 0x3130 }, { 0x318F, 0x318F }, { 0x31BB, 0x31BF }, { 0x31E4, 0x31EF }, { 0x321F, 0x321F }, { 0x32FF, 0x32FF }, { 0x4DB6, 0x4DBF }, { 0x9FD6, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA6F8, 0xA6FF }, { 0xA7AF, 0xA7AF }, { 0xA7B8, 0xA7F6 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C6, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FE, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9FF, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xAB2F }, { 0xAB66, 0xAB6F }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xD7FF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC2, 0xFBD2 }, { 0xFD40, 0xFD4F }, { 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDEF }, { 0xFDFE, 0xFDFF }, { 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFE6F }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE }, { 0xFF00, 0xFF00 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFD0, 0xFFD1 }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 0x1000C, 0x1000C }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x1003E, 0x1003E }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x100FB, 0x100FF }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x1018F, 0x1018F }, { 0x1019C, 0x1019F }, { 0x101A1, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x102FC, 0x102FF }, { 0x10324, 0x1032F }, { 0x1034B, 0x1034F }, { 0x1037B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x104D4, 0x104D7 }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x10564, 0x1056E }, { 0x10570, 0x105FF }, { 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1089F, 0x108A6 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108F6, 0x108FA }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x1097F }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10AE7, 0x10AEA }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B9D, 0x10BA8 }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D00, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107E }, { 0x110C2, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110FA, 0x110FF }, { 0x11135, 0x11135 }, { 0x11144, 0x1114F }, { 0x11177, 0x1117F }, { 0x111CE, 0x111CF }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x11212, 0x11212 }, { 0x1123F, 0x1127F }, { 0x11287, 0x11287 }, { 0x11289, 0x11289 }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x112AA, 0x112AF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x11304, 0x11304 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x11329, 0x11329 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x1133A, 0x1133B }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x1134E, 0x1134F }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11364, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1145A, 0x1145A }, { 0x1145C, 0x1145C }, { 0x1145E, 0x1147F }, { 0x114C8, 0x114CF }, { 0x114DA, 0x1157F }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x11645, 0x1164F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x116B8, 0x116BF }, { 0x116CA, 0x116FF }, { 0x1171A, 0x1171C }, { 0x1172C, 0x1172F }, { 0x11740, 0x1189F }, { 0x118F3, 0x118FE }, { 0x11900, 0x11ABF }, { 0x11AF9, 0x11BFF }, { 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F }, { 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 }, { 0x11CB7, 0x11FFF }, { 0x1239A, 0x123FF }, { 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12FFF }, { 0x1342F, 0x143FF }, { 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D }, { 0x16A70, 0x16ACF }, { 0x16AEE, 0x16AEF }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16B5A, 0x16B5A }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B90, 0x16EFF }, { 0x16F45, 0x16F4F }, { 0x16F7F, 0x16F8E }, { 0x16FA0, 0x16FDF }, { 0x16FE1, 0x16FFF }, { 0x187ED, 0x187FF }, { 0x18AF3, 0x1AFFF }, { 0x1B002, 0x1BBFF }, { 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F }, { 0x1BC89, 0x1BC8F }, { 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1E9, 0x1D1FF }, { 0x1D246, 0x1D2FF }, { 0x1D357, 0x1D35F }, { 0x1D372, 0x1D3FF }, { 0x1D455, 0x1D455 }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D4A3, 0x1D4A4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D4BA, 0x1D4BA }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D506, 0x1D506 }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DFFF }, { 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E94B, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EDFF }, { 0x1EE04, 0x1EE04 }, { 0x1EE20, 0x1EE20 }, { 0x1EE23, 0x1EE23 }, { 0x1EE25, 0x1EE26 }, { 0x1EE28, 0x1EE28 }, { 0x1EE33, 0x1EE33 }, { 0x1EE38, 0x1EE38 }, { 0x1EE3A, 0x1EE3A }, { 0x1EE3C, 0x1EE41 }, { 0x1EE43, 0x1EE46 }, { 0x1EE48, 0x1EE48 }, { 0x1EE4A, 0x1EE4A }, { 0x1EE4C, 0x1EE4C }, { 0x1EE50, 0x1EE50 }, { 0x1EE53, 0x1EE53 }, { 0x1EE55, 0x1EE56 }, { 0x1EE58, 0x1EE58 }, { 0x1EE5A, 0x1EE5A }, { 0x1EE5C, 0x1EE5C }, { 0x1EE5E, 0x1EE5E }, { 0x1EE60, 0x1EE60 }, { 0x1EE63, 0x1EE63 }, { 0x1EE65, 0x1EE66 }, { 0x1EE6B, 0x1EE6B }, { 0x1EE73, 0x1EE73 }, { 0x1EE78, 0x1EE78 }, { 0x1EE7D, 0x1EE7D }, { 0x1EE7F, 0x1EE7F }, { 0x1EE8A, 0x1EE8A }, { 0x1EE9C, 0x1EEA0 }, { 0x1EEA4, 0x1EEA4 }, { 0x1EEAA, 0x1EEAA }, { 0x1EEBC, 0x1EEEF }, { 0x1EEF2, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF }, { 0x1F10D, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16C, 0x1F16F }, { 0x1F1AD, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F6D3, 0x1F6DF }, { 0x1F6ED, 0x1F6EF }, { 0x1F6F7, 0x1F6FF }, { 0x1F774, 0x1F77F }, { 0x1F7D5, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F90F }, { 0x1F91F, 0x1F91F }, { 0x1F928, 0x1F92F }, { 0x1F931, 0x1F932 }, { 0x1F93F, 0x1F93F }, { 0x1F94C, 0x1F94F }, { 0x1F95F, 0x1F97F }, { 0x1F992, 0x1F9BF }, { 0x1F9C1, 0x1FFFF }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2F7FF }, { 0x2FA1E, 0xE0000 }, { 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, { 0xE01F0, 0xEFFFF }, { 0xFFFFE, 0xFFFFF }, { 0x10FFFE, 0x10FFFF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cn) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Co.c����������������������������������������������0000664�0000000�0000000�00000001753�14110572173�0022134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0xE000, 0xF8FF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Co) #include "test-predicate-part2.h" ���������������������gnulib-20210822~d383792/tests/unictype/test-categ_Cs.c����������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0022142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0xD800, 0xDFFF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cs) #include "test-predicate-part2.h" ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_L.c�����������������������������������������������0000664�0000000�0000000�00000035240�14110572173�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x064A }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07CA, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09F0, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0E01, 0x0E30 }, { 0x0E32, 0x0E33 }, { 0x0E40, 0x0E46 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x103F }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16F1, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1877 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BBA, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2183, 0x2184 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3006 }, { 0x3031, 0x3035 }, { 0x303B, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6E5 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9EF }, { 0xA9FA, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x10340 }, { 0x10342, 0x10349 }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x10400, 0x1049D }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x11103, 0x11126 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111DA, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11680, 0x116AA }, { 0x11700, 0x11719 }, { 0x118A0, 0x118DF }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_L) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_LC.c����������������������������������������������0000664�0000000�0000000�00000007667�14110572173�0022103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x01BA }, { 0x01BC, 0x01BF }, { 0x01C4, 0x0293 }, { 0x0295, 0x02AF }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D00, 0x1D2B }, { 0x1D6B, 0x1D77 }, { 0x1D79, 0x1D9A }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2134 }, { 0x2139, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2183, 0x2184 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2C7B }, { 0x2C7E, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA640, 0xA66D }, { 0xA680, 0xA69B }, { 0xA722, 0xA76F }, { 0xA771, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7FA, 0xA7FA }, { 0xAB30, 0xAB5A }, { 0xAB60, 0xAB65 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x118A0, 0x118DF }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E900, 0x1E943 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_LC) #include "test-predicate-part2.h" �������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Ll.c����������������������������������������������0000664�0000000�0000000�00000037467�14110572173�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0138 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0149 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018D }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019B }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AA, 0x01AB }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01BA }, { 0x01BD, 0x01BF }, { 0x01C6, 0x01C6 }, { 0x01C9, 0x01C9 }, { 0x01CC, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01F0 }, { 0x01F3, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0221, 0x0221 }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0239 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0293 }, { 0x0295, 0x02AF }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037B, 0x037D }, { 0x0390, 0x0390 }, { 0x03AC, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FC }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0587 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D00, 0x1D2B }, { 0x1D6B, 0x1D77 }, { 0x1D79, 0x1D9A }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E9D }, { 0x1E9F, 0x1E9F }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F50, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1F87 }, { 0x1F90, 0x1F97 }, { 0x1FA0, 0x1FA7 }, { 0x1FB0, 0x1FB4 }, { 0x1FB6, 0x1FB7 }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FC7 }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FD7 }, { 0x1FE0, 0x1FE7 }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FF7 }, { 0x210A, 0x210A }, { 0x210E, 0x210F }, { 0x2113, 0x2113 }, { 0x212F, 0x212F }, { 0x2134, 0x2134 }, { 0x2139, 0x2139 }, { 0x213C, 0x213D }, { 0x2146, 0x2149 }, { 0x214E, 0x214E }, { 0x2184, 0x2184 }, { 0x2C30, 0x2C5E }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C71, 0x2C71 }, { 0x2C73, 0x2C74 }, { 0x2C76, 0x2C7B }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE4 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69B }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA731 }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA76F }, { 0xA771, 0xA778 }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA78E, 0xA78E }, { 0xA791, 0xA791 }, { 0xA793, 0xA795 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xA7FA, 0xA7FA }, { 0xAB30, 0xAB5A }, { 0xAB60, 0xAB65 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x1D41A, 0x1D433 }, { 0x1D44E, 0x1D454 }, { 0x1D456, 0x1D467 }, { 0x1D482, 0x1D49B }, { 0x1D4B6, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D4CF }, { 0x1D4EA, 0x1D503 }, { 0x1D51E, 0x1D537 }, { 0x1D552, 0x1D56B }, { 0x1D586, 0x1D59F }, { 0x1D5BA, 0x1D5D3 }, { 0x1D5EE, 0x1D607 }, { 0x1D622, 0x1D63B }, { 0x1D656, 0x1D66F }, { 0x1D68A, 0x1D6A5 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6E1 }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D71B }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D755 }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D78F }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7C9 }, { 0x1D7CB, 0x1D7CB }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Ll) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Lm.c����������������������������������������������0000664�0000000�0000000�00000004373�14110572173�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x02B0, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0374, 0x0374 }, { 0x037A, 0x037A }, { 0x0559, 0x0559 }, { 0x0640, 0x0640 }, { 0x06E5, 0x06E6 }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0971, 0x0971 }, { 0x0E46, 0x0E46 }, { 0x0EC6, 0x0EC6 }, { 0x10FC, 0x10FC }, { 0x17D7, 0x17D7 }, { 0x1843, 0x1843 }, { 0x1AA7, 0x1AA7 }, { 0x1C78, 0x1C7D }, { 0x1D2C, 0x1D6A }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DBF }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2C7C, 0x2C7D }, { 0x2D6F, 0x2D6F }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x309D, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA67F, 0xA67F }, { 0xA69C, 0xA69D }, { 0xA717, 0xA71F }, { 0xA770, 0xA770 }, { 0xA788, 0xA788 }, { 0xA7F8, 0xA7F9 }, { 0xA9CF, 0xA9CF }, { 0xA9E6, 0xA9E6 }, { 0xAA70, 0xAA70 }, { 0xAADD, 0xAADD }, { 0xAAF3, 0xAAF4 }, { 0xAB5C, 0xAB5F }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F }, { 0x16B40, 0x16B43 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lm) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Lo.c����������������������������������������������0000664�0000000�0000000�00000027203�14110572173�0022143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AA, 0x00AA }, { 0x00BA, 0x00BA }, { 0x01BB, 0x01BB }, { 0x01C0, 0x01C3 }, { 0x0294, 0x0294 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x063F }, { 0x0641, 0x064A }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07CA, 0x07EA }, { 0x0800, 0x0815 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0972, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09F0, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0E01, 0x0E30 }, { 0x0E32, 0x0E33 }, { 0x0E40, 0x0E45 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x103F }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x10D0, 0x10FA }, { 0x10FD, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16F1, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1842 }, { 0x1844, 0x1877 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BBA, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C77 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x2135, 0x2138 }, { 0x2D30, 0x2D67 }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x3006, 0x3006 }, { 0x303C, 0x303C }, { 0x3041, 0x3096 }, { 0x309F, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FF, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA014 }, { 0xA016, 0xA48C }, { 0xA4D0, 0xA4F7 }, { 0xA500, 0xA60B }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA66E, 0xA66E }, { 0xA6A0, 0xA6E5 }, { 0xA78F, 0xA78F }, { 0xA7F7, 0xA7F7 }, { 0xA7FB, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9E0, 0xA9E4 }, { 0xA9E7, 0xA9EF }, { 0xA9FA, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA6F }, { 0xAA71, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADC }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF2 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF66, 0xFF6F }, { 0xFF71, 0xFF9D }, { 0xFFA0, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x10340 }, { 0x10342, 0x10349 }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x10450, 0x1049D }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x11103, 0x11126 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111DA, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11680, 0x116AA }, { 0x11700, 0x11719 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1E800, 0x1E8C4 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lo) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Lt.c����������������������������������������������0000664�0000000�0000000�00000002215�14110572173�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x01C5, 0x01C5 }, { 0x01C8, 0x01C8 }, { 0x01CB, 0x01CB }, { 0x01F2, 0x01F2 }, { 0x1F88, 0x1F8F }, { 0x1F98, 0x1F9F }, { 0x1FA8, 0x1FAF }, { 0x1FBC, 0x1FBC }, { 0x1FCC, 0x1FCC }, { 0x1FFC, 0x1FFC } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lt) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Lu.c����������������������������������������������0000664�0000000�0000000�00000037255�14110572173�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DE }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x014A, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C4 }, { 0x01C7, 0x01C7 }, { 0x01CA, 0x01CA }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F1 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03CF, 0x03CF }, { 0x03D2, 0x03D4 }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F4, 0x03F4 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1FB8, 0x1FBB }, { 0x1FC8, 0x1FCB }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF8, 0x1FFB }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210B, 0x210D }, { 0x2110, 0x2112 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x2130, 0x2133 }, { 0x213E, 0x213F }, { 0x2145, 0x2145 }, { 0x2183, 0x2183 }, { 0x2C00, 0x2C2E }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x1D400, 0x1D419 }, { 0x1D434, 0x1D44D }, { 0x1D468, 0x1D481 }, { 0x1D49C, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B5 }, { 0x1D4D0, 0x1D4E9 }, { 0x1D504, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D538, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D56C, 0x1D585 }, { 0x1D5A0, 0x1D5B9 }, { 0x1D5D4, 0x1D5ED }, { 0x1D608, 0x1D621 }, { 0x1D63C, 0x1D655 }, { 0x1D670, 0x1D689 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6E2, 0x1D6FA }, { 0x1D71C, 0x1D734 }, { 0x1D756, 0x1D76E }, { 0x1D790, 0x1D7A8 }, { 0x1D7CA, 0x1D7CA }, { 0x1E900, 0x1E921 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lu) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_M.c�����������������������������������������������0000664�0000000�0000000�00000015624�14110572173�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0300, 0x036F }, { 0x0483, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06DF, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0903 }, { 0x093A, 0x093C }, { 0x093E, 0x094F }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0983 }, { 0x09BC, 0x09BC }, { 0x09BE, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CD }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A03 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0ABC, 0x0ABC }, { 0x0ABE, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B03 }, { 0x0B3C, 0x0B3C }, { 0x0B3E, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD7, 0x0BD7 }, { 0x0C00, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D03 }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4D }, { 0x0D57, 0x0D57 }, { 0x0D62, 0x0D63 }, { 0x0D82, 0x0D83 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF3 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F3E, 0x0F3F }, { 0x0F71, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102B, 0x103E }, { 0x1056, 0x1059 }, { 0x105E, 0x1060 }, { 0x1062, 0x1064 }, { 0x1067, 0x106D }, { 0x1071, 0x1074 }, { 0x1082, 0x108D }, { 0x108F, 0x108F }, { 0x109A, 0x109D }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAD }, { 0x1BE6, 0x1BF3 }, { 0x1C24, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA953 }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9C0 }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA7B, 0xAA7D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEB, 0xAAEF }, { 0xAAF5, 0xAAF6 }, { 0xABE3, 0xABEA }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11000, 0x11002 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11082 }, { 0x110B0, 0x110BA }, { 0x11100, 0x11102 }, { 0x11127, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11182 }, { 0x111B3, 0x111C0 }, { 0x111CA, 0x111CC }, { 0x1122C, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112EA }, { 0x11300, 0x11303 }, { 0x1133C, 0x1133C }, { 0x1133E, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11435, 0x11446 }, { 0x114B0, 0x114C3 }, { 0x115AF, 0x115B5 }, { 0x115B8, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11630, 0x11640 }, { 0x116AB, 0x116B7 }, { 0x1171D, 0x1172B }, { 0x11C2F, 0x11C36 }, { 0x11C38, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F51, 0x16F7E }, { 0x16F8F, 0x16F92 }, { 0x1BC9D, 0x1BC9E }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_M) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Mc.c����������������������������������������������0000664�0000000�0000000�00000011201�14110572173�0022117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0903, 0x0903 }, { 0x093B, 0x093B }, { 0x093E, 0x0940 }, { 0x0949, 0x094C }, { 0x094E, 0x094F }, { 0x0982, 0x0983 }, { 0x09BE, 0x09C0 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CC }, { 0x09D7, 0x09D7 }, { 0x0A03, 0x0A03 }, { 0x0A3E, 0x0A40 }, { 0x0A83, 0x0A83 }, { 0x0ABE, 0x0AC0 }, { 0x0AC9, 0x0AC9 }, { 0x0ACB, 0x0ACC }, { 0x0B02, 0x0B03 }, { 0x0B3E, 0x0B3E }, { 0x0B40, 0x0B40 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4C }, { 0x0B57, 0x0B57 }, { 0x0BBE, 0x0BBF }, { 0x0BC1, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCC }, { 0x0BD7, 0x0BD7 }, { 0x0C01, 0x0C03 }, { 0x0C41, 0x0C44 }, { 0x0C82, 0x0C83 }, { 0x0CBE, 0x0CBE }, { 0x0CC0, 0x0CC4 }, { 0x0CC7, 0x0CC8 }, { 0x0CCA, 0x0CCB }, { 0x0CD5, 0x0CD6 }, { 0x0D02, 0x0D03 }, { 0x0D3E, 0x0D40 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4C }, { 0x0D57, 0x0D57 }, { 0x0D82, 0x0D83 }, { 0x0DCF, 0x0DD1 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF3 }, { 0x0F3E, 0x0F3F }, { 0x0F7F, 0x0F7F }, { 0x102B, 0x102C }, { 0x1031, 0x1031 }, { 0x1038, 0x1038 }, { 0x103B, 0x103C }, { 0x1056, 0x1057 }, { 0x1062, 0x1064 }, { 0x1067, 0x106D }, { 0x1083, 0x1084 }, { 0x1087, 0x108C }, { 0x108F, 0x108F }, { 0x109A, 0x109C }, { 0x17B6, 0x17B6 }, { 0x17BE, 0x17C5 }, { 0x17C7, 0x17C8 }, { 0x1923, 0x1926 }, { 0x1929, 0x192B }, { 0x1930, 0x1931 }, { 0x1933, 0x1938 }, { 0x1A19, 0x1A1A }, { 0x1A55, 0x1A55 }, { 0x1A57, 0x1A57 }, { 0x1A61, 0x1A61 }, { 0x1A63, 0x1A64 }, { 0x1A6D, 0x1A72 }, { 0x1B04, 0x1B04 }, { 0x1B35, 0x1B35 }, { 0x1B3B, 0x1B3B }, { 0x1B3D, 0x1B41 }, { 0x1B43, 0x1B44 }, { 0x1B82, 0x1B82 }, { 0x1BA1, 0x1BA1 }, { 0x1BA6, 0x1BA7 }, { 0x1BAA, 0x1BAA }, { 0x1BE7, 0x1BE7 }, { 0x1BEA, 0x1BEC }, { 0x1BEE, 0x1BEE }, { 0x1BF2, 0x1BF3 }, { 0x1C24, 0x1C2B }, { 0x1C34, 0x1C35 }, { 0x1CE1, 0x1CE1 }, { 0x1CF2, 0x1CF3 }, { 0x302E, 0x302F }, { 0xA823, 0xA824 }, { 0xA827, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C3 }, { 0xA952, 0xA953 }, { 0xA983, 0xA983 }, { 0xA9B4, 0xA9B5 }, { 0xA9BA, 0xA9BB }, { 0xA9BD, 0xA9C0 }, { 0xAA2F, 0xAA30 }, { 0xAA33, 0xAA34 }, { 0xAA4D, 0xAA4D }, { 0xAA7B, 0xAA7B }, { 0xAA7D, 0xAA7D }, { 0xAAEB, 0xAAEB }, { 0xAAEE, 0xAAEF }, { 0xAAF5, 0xAAF5 }, { 0xABE3, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEA }, { 0xABEC, 0xABEC }, { 0x11000, 0x11000 }, { 0x11002, 0x11002 }, { 0x11082, 0x11082 }, { 0x110B0, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x1112C, 0x1112C }, { 0x11182, 0x11182 }, { 0x111B3, 0x111B5 }, { 0x111BF, 0x111C0 }, { 0x1122C, 0x1122E }, { 0x11232, 0x11233 }, { 0x11235, 0x11235 }, { 0x112E0, 0x112E2 }, { 0x11302, 0x11303 }, { 0x1133E, 0x1133F }, { 0x11341, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11435, 0x11437 }, { 0x11440, 0x11441 }, { 0x11445, 0x11445 }, { 0x114B0, 0x114B2 }, { 0x114B9, 0x114B9 }, { 0x114BB, 0x114BE }, { 0x114C1, 0x114C1 }, { 0x115AF, 0x115B1 }, { 0x115B8, 0x115BB }, { 0x115BE, 0x115BE }, { 0x11630, 0x11632 }, { 0x1163B, 0x1163C }, { 0x1163E, 0x1163E }, { 0x116AC, 0x116AC }, { 0x116AE, 0x116AF }, { 0x116B6, 0x116B6 }, { 0x11720, 0x11721 }, { 0x11726, 0x11726 }, { 0x11C2F, 0x11C2F }, { 0x11C3E, 0x11C3E }, { 0x11CA9, 0x11CA9 }, { 0x11CB1, 0x11CB1 }, { 0x11CB4, 0x11CB4 }, { 0x16F51, 0x16F7E }, { 0x1D165, 0x1D166 }, { 0x1D16D, 0x1D172 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mc) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Me.c����������������������������������������������0000664�0000000�0000000�00000002025�14110572173�0022125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0488, 0x0489 }, { 0x1ABE, 0x1ABE }, { 0x20DD, 0x20E0 }, { 0x20E2, 0x20E4 }, { 0xA670, 0xA672 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Me) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Mn.c����������������������������������������������0000664�0000000�0000000�00000017373�14110572173�0022152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0300, 0x036F }, { 0x0483, 0x0487 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06DF, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D01 }, { 0x0D41, 0x0D44 }, { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1037 }, { 0x1039, 0x103A }, { 0x103D, 0x103E }, { 0x1058, 0x1059 }, { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABD }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302D }, { 0x3099, 0x309A }, { 0xA66F, 0xA66F }, { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEC, 0xAAED }, { 0xAAF6, 0xAAF6 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111CA, 0x111CC }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133C, 0x1133C }, { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F8F, 0x16F92 }, { 0x1BC9D, 0x1BC9E }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mn) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_N.c�����������������������������������������������0000664�0000000�0000000�00000007304�14110572173�0021766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x00B2, 0x00B3 }, { 0x00B9, 0x00B9 }, { 0x00BC, 0x00BE }, { 0x0660, 0x0669 }, { 0x06F0, 0x06F9 }, { 0x07C0, 0x07C9 }, { 0x0966, 0x096F }, { 0x09E6, 0x09EF }, { 0x09F4, 0x09F9 }, { 0x0A66, 0x0A6F }, { 0x0AE6, 0x0AEF }, { 0x0B66, 0x0B6F }, { 0x0B72, 0x0B77 }, { 0x0BE6, 0x0BF2 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C7E }, { 0x0CE6, 0x0CEF }, { 0x0D58, 0x0D5E }, { 0x0D66, 0x0D78 }, { 0x0DE6, 0x0DEF }, { 0x0E50, 0x0E59 }, { 0x0ED0, 0x0ED9 }, { 0x0F20, 0x0F33 }, { 0x1040, 0x1049 }, { 0x1090, 0x1099 }, { 0x1369, 0x137C }, { 0x16EE, 0x16F0 }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1810, 0x1819 }, { 0x1946, 0x194F }, { 0x19D0, 0x19DA }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1B50, 0x1B59 }, { 0x1BB0, 0x1BB9 }, { 0x1C40, 0x1C49 }, { 0x1C50, 0x1C59 }, { 0x2070, 0x2070 }, { 0x2074, 0x2079 }, { 0x2080, 0x2089 }, { 0x2150, 0x2182 }, { 0x2185, 0x2189 }, { 0x2460, 0x249B }, { 0x24EA, 0x24FF }, { 0x2776, 0x2793 }, { 0x2CFD, 0x2CFD }, { 0x3007, 0x3007 }, { 0x3021, 0x3029 }, { 0x3038, 0x303A }, { 0x3192, 0x3195 }, { 0x3220, 0x3229 }, { 0x3248, 0x324F }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA620, 0xA629 }, { 0xA6E6, 0xA6EF }, { 0xA830, 0xA835 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 0xA9F0, 0xA9F9 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x10107, 0x10133 }, { 0x10140, 0x10178 }, { 0x1018A, 0x1018B }, { 0x102E1, 0x102FB }, { 0x10320, 0x10323 }, { 0x10341, 0x10341 }, { 0x1034A, 0x1034A }, { 0x103D1, 0x103D5 }, { 0x104A0, 0x104A9 }, { 0x10858, 0x1085F }, { 0x10879, 0x1087F }, { 0x108A7, 0x108AF }, { 0x108FB, 0x108FF }, { 0x10916, 0x1091B }, { 0x109BC, 0x109BD }, { 0x109C0, 0x109CF }, { 0x109D2, 0x109FF }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10A9D, 0x10A9F }, { 0x10AEB, 0x10AEF }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10BA9, 0x10BAF }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11052, 0x1106F }, { 0x110F0, 0x110F9 }, { 0x11136, 0x1113F }, { 0x111D0, 0x111D9 }, { 0x111E1, 0x111F4 }, { 0x112F0, 0x112F9 }, { 0x11450, 0x11459 }, { 0x114D0, 0x114D9 }, { 0x11650, 0x11659 }, { 0x116C0, 0x116C9 }, { 0x11730, 0x1173B }, { 0x118E0, 0x118F2 }, { 0x11C50, 0x11C6C }, { 0x12400, 0x1246E }, { 0x16A60, 0x16A69 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x1D360, 0x1D371 }, { 0x1D7CE, 0x1D7FF }, { 0x1E8C7, 0x1E8CF }, { 0x1E950, 0x1E959 }, { 0x1F100, 0x1F10C } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_N) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Nd.c����������������������������������������������0000664�0000000�0000000�00000004317�14110572173�0022133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0660, 0x0669 }, { 0x06F0, 0x06F9 }, { 0x07C0, 0x07C9 }, { 0x0966, 0x096F }, { 0x09E6, 0x09EF }, { 0x0A66, 0x0A6F }, { 0x0AE6, 0x0AEF }, { 0x0B66, 0x0B6F }, { 0x0BE6, 0x0BEF }, { 0x0C66, 0x0C6F }, { 0x0CE6, 0x0CEF }, { 0x0D66, 0x0D6F }, { 0x0DE6, 0x0DEF }, { 0x0E50, 0x0E59 }, { 0x0ED0, 0x0ED9 }, { 0x0F20, 0x0F29 }, { 0x1040, 0x1049 }, { 0x1090, 0x1099 }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1946, 0x194F }, { 0x19D0, 0x19D9 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1B50, 0x1B59 }, { 0x1BB0, 0x1BB9 }, { 0x1C40, 0x1C49 }, { 0x1C50, 0x1C59 }, { 0xA620, 0xA629 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 0xA9F0, 0xA9F9 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x104A0, 0x104A9 }, { 0x11066, 0x1106F }, { 0x110F0, 0x110F9 }, { 0x11136, 0x1113F }, { 0x111D0, 0x111D9 }, { 0x112F0, 0x112F9 }, { 0x11450, 0x11459 }, { 0x114D0, 0x114D9 }, { 0x11650, 0x11659 }, { 0x116C0, 0x116C9 }, { 0x11730, 0x11739 }, { 0x118E0, 0x118E9 }, { 0x11C50, 0x11C59 }, { 0x16A60, 0x16A69 }, { 0x16B50, 0x16B59 }, { 0x1D7CE, 0x1D7FF }, { 0x1E950, 0x1E959 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nd) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Nl.c����������������������������������������������0000664�0000000�0000000�00000002307�14110572173�0022140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x16EE, 0x16F0 }, { 0x2160, 0x2182 }, { 0x2185, 0x2188 }, { 0x3007, 0x3007 }, { 0x3021, 0x3029 }, { 0x3038, 0x303A }, { 0xA6E6, 0xA6EF }, { 0x10140, 0x10174 }, { 0x10341, 0x10341 }, { 0x1034A, 0x1034A }, { 0x103D1, 0x103D5 }, { 0x12400, 0x1246E } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nl) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_No.c����������������������������������������������0000664�0000000�0000000�00000004573�14110572173�0022152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00B2, 0x00B3 }, { 0x00B9, 0x00B9 }, { 0x00BC, 0x00BE }, { 0x09F4, 0x09F9 }, { 0x0B72, 0x0B77 }, { 0x0BF0, 0x0BF2 }, { 0x0C78, 0x0C7E }, { 0x0D58, 0x0D5E }, { 0x0D70, 0x0D78 }, { 0x0F2A, 0x0F33 }, { 0x1369, 0x137C }, { 0x17F0, 0x17F9 }, { 0x19DA, 0x19DA }, { 0x2070, 0x2070 }, { 0x2074, 0x2079 }, { 0x2080, 0x2089 }, { 0x2150, 0x215F }, { 0x2189, 0x2189 }, { 0x2460, 0x249B }, { 0x24EA, 0x24FF }, { 0x2776, 0x2793 }, { 0x2CFD, 0x2CFD }, { 0x3192, 0x3195 }, { 0x3220, 0x3229 }, { 0x3248, 0x324F }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA830, 0xA835 }, { 0x10107, 0x10133 }, { 0x10175, 0x10178 }, { 0x1018A, 0x1018B }, { 0x102E1, 0x102FB }, { 0x10320, 0x10323 }, { 0x10858, 0x1085F }, { 0x10879, 0x1087F }, { 0x108A7, 0x108AF }, { 0x108FB, 0x108FF }, { 0x10916, 0x1091B }, { 0x109BC, 0x109BD }, { 0x109C0, 0x109CF }, { 0x109D2, 0x109FF }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10A9D, 0x10A9F }, { 0x10AEB, 0x10AEF }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10BA9, 0x10BAF }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11052, 0x11065 }, { 0x111E1, 0x111F4 }, { 0x1173A, 0x1173B }, { 0x118EA, 0x118F2 }, { 0x11C5A, 0x11C6C }, { 0x16B5B, 0x16B61 }, { 0x1D360, 0x1D371 }, { 0x1E8C7, 0x1E8CF }, { 0x1F100, 0x1F10C } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_No) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_P.c�����������������������������������������������0000664�0000000�0000000�00000011656�14110572173�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0023 }, { 0x0025, 0x002A }, { 0x002C, 0x002F }, { 0x003A, 0x003B }, { 0x003F, 0x0040 }, { 0x005B, 0x005D }, { 0x005F, 0x005F }, { 0x007B, 0x007B }, { 0x007D, 0x007D }, { 0x00A1, 0x00A1 }, { 0x00A7, 0x00A7 }, { 0x00AB, 0x00AB }, { 0x00B6, 0x00B7 }, { 0x00BB, 0x00BB }, { 0x00BF, 0x00BF }, { 0x037E, 0x037E }, { 0x0387, 0x0387 }, { 0x055A, 0x055F }, { 0x0589, 0x058A }, { 0x05BE, 0x05BE }, { 0x05C0, 0x05C0 }, { 0x05C3, 0x05C3 }, { 0x05C6, 0x05C6 }, { 0x05F3, 0x05F4 }, { 0x0609, 0x060A }, { 0x060C, 0x060D }, { 0x061B, 0x061B }, { 0x061E, 0x061F }, { 0x066A, 0x066D }, { 0x06D4, 0x06D4 }, { 0x0700, 0x070D }, { 0x07F7, 0x07F9 }, { 0x0830, 0x083E }, { 0x085E, 0x085E }, { 0x0964, 0x0965 }, { 0x0970, 0x0970 }, { 0x0AF0, 0x0AF0 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F14, 0x0F14 }, { 0x0F3A, 0x0F3D }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1360, 0x1368 }, { 0x1400, 0x1400 }, { 0x166D, 0x166E }, { 0x169B, 0x169C }, { 0x16EB, 0x16ED }, { 0x1735, 0x1736 }, { 0x17D4, 0x17D6 }, { 0x17D8, 0x17DA }, { 0x1800, 0x180A }, { 0x1944, 0x1945 }, { 0x1A1E, 0x1A1F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1B5A, 0x1B60 }, { 0x1BFC, 0x1BFF }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CC0, 0x1CC7 }, { 0x1CD3, 0x1CD3 }, { 0x2010, 0x2027 }, { 0x2030, 0x2043 }, { 0x2045, 0x2051 }, { 0x2053, 0x205E }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2308, 0x230B }, { 0x2329, 0x232A }, { 0x2768, 0x2775 }, { 0x27C5, 0x27C6 }, { 0x27E6, 0x27EF }, { 0x2983, 0x2998 }, { 0x29D8, 0x29DB }, { 0x29FC, 0x29FD }, { 0x2CF9, 0x2CFC }, { 0x2CFE, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2E00, 0x2E2E }, { 0x2E30, 0x2E44 }, { 0x3001, 0x3003 }, { 0x3008, 0x3011 }, { 0x3014, 0x301F }, { 0x3030, 0x3030 }, { 0x303D, 0x303D }, { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA673, 0xA673 }, { 0xA67E, 0xA67E }, { 0xA6F2, 0xA6F7 }, { 0xA874, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA8F8, 0xA8FA }, { 0xA8FC, 0xA8FC }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 0xAAF0, 0xAAF1 }, { 0xABEB, 0xABEB }, { 0xFD3E, 0xFD3F }, { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE61 }, { 0xFE63, 0xFE63 }, { 0xFE68, 0xFE68 }, { 0xFE6A, 0xFE6B }, { 0xFF01, 0xFF03 }, { 0xFF05, 0xFF0A }, { 0xFF0C, 0xFF0F }, { 0xFF1A, 0xFF1B }, { 0xFF1F, 0xFF20 }, { 0xFF3B, 0xFF3D }, { 0xFF3F, 0xFF3F }, { 0xFF5B, 0xFF5B }, { 0xFF5D, 0xFF5D }, { 0xFF5F, 0xFF65 }, { 0x10100, 0x10102 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x1056F, 0x1056F }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10AF0, 0x10AF6 }, { 0x10B39, 0x10B3F }, { 0x10B99, 0x10B9C }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x11140, 0x11143 }, { 0x11174, 0x11175 }, { 0x111C5, 0x111C9 }, { 0x111CD, 0x111CD }, { 0x111DB, 0x111DB }, { 0x111DD, 0x111DF }, { 0x11238, 0x1123D }, { 0x112A9, 0x112A9 }, { 0x1144B, 0x1144F }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x114C6, 0x114C6 }, { 0x115C1, 0x115D7 }, { 0x11641, 0x11643 }, { 0x11660, 0x1166C }, { 0x1173C, 0x1173E }, { 0x11C41, 0x11C45 }, { 0x11C70, 0x11C71 }, { 0x12470, 0x12474 }, { 0x16A6E, 0x16A6F }, { 0x16AF5, 0x16AF5 }, { 0x16B37, 0x16B3B }, { 0x16B44, 0x16B44 }, { 0x1BC9F, 0x1BC9F }, { 0x1DA87, 0x1DA8B }, { 0x1E95E, 0x1E95F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_P) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Pc.c����������������������������������������������0000664�0000000�0000000�00000002055�14110572173�0022131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x005F, 0x005F }, { 0x203F, 0x2040 }, { 0x2054, 0x2054 }, { 0xFE33, 0xFE34 }, { 0xFE4D, 0xFE4F }, { 0xFF3F, 0xFF3F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pc) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Pd.c����������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0022137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002D, 0x002D }, { 0x058A, 0x058A }, { 0x05BE, 0x05BE }, { 0x1400, 0x1400 }, { 0x1806, 0x1806 }, { 0x2010, 0x2015 }, { 0x2E17, 0x2E17 }, { 0x2E1A, 0x2E1A }, { 0x2E3A, 0x2E3B }, { 0x2E40, 0x2E40 }, { 0x301C, 0x301C }, { 0x3030, 0x3030 }, { 0x30A0, 0x30A0 }, { 0xFE31, 0xFE32 }, { 0xFE58, 0xFE58 }, { 0xFE63, 0xFE63 }, { 0xFF0D, 0xFF0D } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pd) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Pe.c����������������������������������������������0000664�0000000�0000000�00000005135�14110572173�0022135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0029, 0x0029 }, { 0x005D, 0x005D }, { 0x007D, 0x007D }, { 0x0F3B, 0x0F3B }, { 0x0F3D, 0x0F3D }, { 0x169C, 0x169C }, { 0x2046, 0x2046 }, { 0x207E, 0x207E }, { 0x208E, 0x208E }, { 0x2309, 0x2309 }, { 0x230B, 0x230B }, { 0x232A, 0x232A }, { 0x2769, 0x2769 }, { 0x276B, 0x276B }, { 0x276D, 0x276D }, { 0x276F, 0x276F }, { 0x2771, 0x2771 }, { 0x2773, 0x2773 }, { 0x2775, 0x2775 }, { 0x27C6, 0x27C6 }, { 0x27E7, 0x27E7 }, { 0x27E9, 0x27E9 }, { 0x27EB, 0x27EB }, { 0x27ED, 0x27ED }, { 0x27EF, 0x27EF }, { 0x2984, 0x2984 }, { 0x2986, 0x2986 }, { 0x2988, 0x2988 }, { 0x298A, 0x298A }, { 0x298C, 0x298C }, { 0x298E, 0x298E }, { 0x2990, 0x2990 }, { 0x2992, 0x2992 }, { 0x2994, 0x2994 }, { 0x2996, 0x2996 }, { 0x2998, 0x2998 }, { 0x29D9, 0x29D9 }, { 0x29DB, 0x29DB }, { 0x29FD, 0x29FD }, { 0x2E23, 0x2E23 }, { 0x2E25, 0x2E25 }, { 0x2E27, 0x2E27 }, { 0x2E29, 0x2E29 }, { 0x3009, 0x3009 }, { 0x300B, 0x300B }, { 0x300D, 0x300D }, { 0x300F, 0x300F }, { 0x3011, 0x3011 }, { 0x3015, 0x3015 }, { 0x3017, 0x3017 }, { 0x3019, 0x3019 }, { 0x301B, 0x301B }, { 0x301E, 0x301F }, { 0xFD3E, 0xFD3E }, { 0xFE18, 0xFE18 }, { 0xFE36, 0xFE36 }, { 0xFE38, 0xFE38 }, { 0xFE3A, 0xFE3A }, { 0xFE3C, 0xFE3C }, { 0xFE3E, 0xFE3E }, { 0xFE40, 0xFE40 }, { 0xFE42, 0xFE42 }, { 0xFE44, 0xFE44 }, { 0xFE48, 0xFE48 }, { 0xFE5A, 0xFE5A }, { 0xFE5C, 0xFE5C }, { 0xFE5E, 0xFE5E }, { 0xFF09, 0xFF09 }, { 0xFF3D, 0xFF3D }, { 0xFF5D, 0xFF5D }, { 0xFF60, 0xFF60 }, { 0xFF63, 0xFF63 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pe) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Pf.c����������������������������������������������0000664�0000000�0000000�00000002215�14110572173�0022132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00BB, 0x00BB }, { 0x2019, 0x2019 }, { 0x201D, 0x201D }, { 0x203A, 0x203A }, { 0x2E03, 0x2E03 }, { 0x2E05, 0x2E05 }, { 0x2E0A, 0x2E0A }, { 0x2E0D, 0x2E0D }, { 0x2E1D, 0x2E1D }, { 0x2E21, 0x2E21 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pf) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Pi.c����������������������������������������������0000664�0000000�0000000�00000002245�14110572173�0022140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AB, 0x00AB }, { 0x2018, 0x2018 }, { 0x201B, 0x201C }, { 0x201F, 0x201F }, { 0x2039, 0x2039 }, { 0x2E02, 0x2E02 }, { 0x2E04, 0x2E04 }, { 0x2E09, 0x2E09 }, { 0x2E0C, 0x2E0C }, { 0x2E1C, 0x2E1C }, { 0x2E20, 0x2E20 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pi) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Po.c����������������������������������������������0000664�0000000�0000000�00000011547�14110572173�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0023 }, { 0x0025, 0x0027 }, { 0x002A, 0x002A }, { 0x002C, 0x002C }, { 0x002E, 0x002F }, { 0x003A, 0x003B }, { 0x003F, 0x0040 }, { 0x005C, 0x005C }, { 0x00A1, 0x00A1 }, { 0x00A7, 0x00A7 }, { 0x00B6, 0x00B7 }, { 0x00BF, 0x00BF }, { 0x037E, 0x037E }, { 0x0387, 0x0387 }, { 0x055A, 0x055F }, { 0x0589, 0x0589 }, { 0x05C0, 0x05C0 }, { 0x05C3, 0x05C3 }, { 0x05C6, 0x05C6 }, { 0x05F3, 0x05F4 }, { 0x0609, 0x060A }, { 0x060C, 0x060D }, { 0x061B, 0x061B }, { 0x061E, 0x061F }, { 0x066A, 0x066D }, { 0x06D4, 0x06D4 }, { 0x0700, 0x070D }, { 0x07F7, 0x07F9 }, { 0x0830, 0x083E }, { 0x085E, 0x085E }, { 0x0964, 0x0965 }, { 0x0970, 0x0970 }, { 0x0AF0, 0x0AF0 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F14, 0x0F14 }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1360, 0x1368 }, { 0x166D, 0x166E }, { 0x16EB, 0x16ED }, { 0x1735, 0x1736 }, { 0x17D4, 0x17D6 }, { 0x17D8, 0x17DA }, { 0x1800, 0x1805 }, { 0x1807, 0x180A }, { 0x1944, 0x1945 }, { 0x1A1E, 0x1A1F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1B5A, 0x1B60 }, { 0x1BFC, 0x1BFF }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CC0, 0x1CC7 }, { 0x1CD3, 0x1CD3 }, { 0x2016, 0x2017 }, { 0x2020, 0x2027 }, { 0x2030, 0x2038 }, { 0x203B, 0x203E }, { 0x2041, 0x2043 }, { 0x2047, 0x2051 }, { 0x2053, 0x2053 }, { 0x2055, 0x205E }, { 0x2CF9, 0x2CFC }, { 0x2CFE, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2E00, 0x2E01 }, { 0x2E06, 0x2E08 }, { 0x2E0B, 0x2E0B }, { 0x2E0E, 0x2E16 }, { 0x2E18, 0x2E19 }, { 0x2E1B, 0x2E1B }, { 0x2E1E, 0x2E1F }, { 0x2E2A, 0x2E2E }, { 0x2E30, 0x2E39 }, { 0x2E3C, 0x2E3F }, { 0x2E41, 0x2E41 }, { 0x2E43, 0x2E44 }, { 0x3001, 0x3003 }, { 0x303D, 0x303D }, { 0x30FB, 0x30FB }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA673, 0xA673 }, { 0xA67E, 0xA67E }, { 0xA6F2, 0xA6F7 }, { 0xA874, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA8F8, 0xA8FA }, { 0xA8FC, 0xA8FC }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 0xAAF0, 0xAAF1 }, { 0xABEB, 0xABEB }, { 0xFE10, 0xFE16 }, { 0xFE19, 0xFE19 }, { 0xFE30, 0xFE30 }, { 0xFE45, 0xFE46 }, { 0xFE49, 0xFE4C }, { 0xFE50, 0xFE52 }, { 0xFE54, 0xFE57 }, { 0xFE5F, 0xFE61 }, { 0xFE68, 0xFE68 }, { 0xFE6A, 0xFE6B }, { 0xFF01, 0xFF03 }, { 0xFF05, 0xFF07 }, { 0xFF0A, 0xFF0A }, { 0xFF0C, 0xFF0C }, { 0xFF0E, 0xFF0F }, { 0xFF1A, 0xFF1B }, { 0xFF1F, 0xFF20 }, { 0xFF3C, 0xFF3C }, { 0xFF61, 0xFF61 }, { 0xFF64, 0xFF65 }, { 0x10100, 0x10102 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x1056F, 0x1056F }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10AF0, 0x10AF6 }, { 0x10B39, 0x10B3F }, { 0x10B99, 0x10B9C }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x11140, 0x11143 }, { 0x11174, 0x11175 }, { 0x111C5, 0x111C9 }, { 0x111CD, 0x111CD }, { 0x111DB, 0x111DB }, { 0x111DD, 0x111DF }, { 0x11238, 0x1123D }, { 0x112A9, 0x112A9 }, { 0x1144B, 0x1144F }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x114C6, 0x114C6 }, { 0x115C1, 0x115D7 }, { 0x11641, 0x11643 }, { 0x11660, 0x1166C }, { 0x1173C, 0x1173E }, { 0x11C41, 0x11C45 }, { 0x11C70, 0x11C71 }, { 0x12470, 0x12474 }, { 0x16A6E, 0x16A6F }, { 0x16AF5, 0x16AF5 }, { 0x16B37, 0x16B3B }, { 0x16B44, 0x16B44 }, { 0x1BC9F, 0x1BC9F }, { 0x1DA87, 0x1DA8B }, { 0x1E95E, 0x1E95F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Po) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Ps.c����������������������������������������������0000664�0000000�0000000�00000005245�14110572173�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0028, 0x0028 }, { 0x005B, 0x005B }, { 0x007B, 0x007B }, { 0x0F3A, 0x0F3A }, { 0x0F3C, 0x0F3C }, { 0x169B, 0x169B }, { 0x201A, 0x201A }, { 0x201E, 0x201E }, { 0x2045, 0x2045 }, { 0x207D, 0x207D }, { 0x208D, 0x208D }, { 0x2308, 0x2308 }, { 0x230A, 0x230A }, { 0x2329, 0x2329 }, { 0x2768, 0x2768 }, { 0x276A, 0x276A }, { 0x276C, 0x276C }, { 0x276E, 0x276E }, { 0x2770, 0x2770 }, { 0x2772, 0x2772 }, { 0x2774, 0x2774 }, { 0x27C5, 0x27C5 }, { 0x27E6, 0x27E6 }, { 0x27E8, 0x27E8 }, { 0x27EA, 0x27EA }, { 0x27EC, 0x27EC }, { 0x27EE, 0x27EE }, { 0x2983, 0x2983 }, { 0x2985, 0x2985 }, { 0x2987, 0x2987 }, { 0x2989, 0x2989 }, { 0x298B, 0x298B }, { 0x298D, 0x298D }, { 0x298F, 0x298F }, { 0x2991, 0x2991 }, { 0x2993, 0x2993 }, { 0x2995, 0x2995 }, { 0x2997, 0x2997 }, { 0x29D8, 0x29D8 }, { 0x29DA, 0x29DA }, { 0x29FC, 0x29FC }, { 0x2E22, 0x2E22 }, { 0x2E24, 0x2E24 }, { 0x2E26, 0x2E26 }, { 0x2E28, 0x2E28 }, { 0x2E42, 0x2E42 }, { 0x3008, 0x3008 }, { 0x300A, 0x300A }, { 0x300C, 0x300C }, { 0x300E, 0x300E }, { 0x3010, 0x3010 }, { 0x3014, 0x3014 }, { 0x3016, 0x3016 }, { 0x3018, 0x3018 }, { 0x301A, 0x301A }, { 0x301D, 0x301D }, { 0xFD3F, 0xFD3F }, { 0xFE17, 0xFE17 }, { 0xFE35, 0xFE35 }, { 0xFE37, 0xFE37 }, { 0xFE39, 0xFE39 }, { 0xFE3B, 0xFE3B }, { 0xFE3D, 0xFE3D }, { 0xFE3F, 0xFE3F }, { 0xFE41, 0xFE41 }, { 0xFE43, 0xFE43 }, { 0xFE47, 0xFE47 }, { 0xFE59, 0xFE59 }, { 0xFE5B, 0xFE5B }, { 0xFE5D, 0xFE5D }, { 0xFF08, 0xFF08 }, { 0xFF3B, 0xFF3B }, { 0xFF5B, 0xFF5B }, { 0xFF5F, 0xFF5F }, { 0xFF62, 0xFF62 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Ps) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_S.c�����������������������������������������������0000664�0000000�0000000�00000014226�14110572173�0021774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x002B, 0x002B }, { 0x003C, 0x003E }, { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x007C, 0x007C }, { 0x007E, 0x007E }, { 0x00A2, 0x00A6 }, { 0x00A8, 0x00A9 }, { 0x00AC, 0x00AC }, { 0x00AE, 0x00B1 }, { 0x00B4, 0x00B4 }, { 0x00B8, 0x00B8 }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x02C2, 0x02C5 }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02EB }, { 0x02ED, 0x02ED }, { 0x02EF, 0x02FF }, { 0x0375, 0x0375 }, { 0x0384, 0x0385 }, { 0x03F6, 0x03F6 }, { 0x0482, 0x0482 }, { 0x058D, 0x058F }, { 0x0606, 0x0608 }, { 0x060B, 0x060B }, { 0x060E, 0x060F }, { 0x06DE, 0x06DE }, { 0x06E9, 0x06E9 }, { 0x06FD, 0x06FE }, { 0x07F6, 0x07F6 }, { 0x09F2, 0x09F3 }, { 0x09FA, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0B70, 0x0B70 }, { 0x0BF3, 0x0BFA }, { 0x0C7F, 0x0C7F }, { 0x0D4F, 0x0D4F }, { 0x0D79, 0x0D79 }, { 0x0E3F, 0x0E3F }, { 0x0F01, 0x0F03 }, { 0x0F13, 0x0F13 }, { 0x0F15, 0x0F17 }, { 0x0F1A, 0x0F1F }, { 0x0F34, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0FBE, 0x0FC5 }, { 0x0FC7, 0x0FCC }, { 0x0FCE, 0x0FCF }, { 0x0FD5, 0x0FD8 }, { 0x109E, 0x109F }, { 0x1390, 0x1399 }, { 0x17DB, 0x17DB }, { 0x1940, 0x1940 }, { 0x19DE, 0x19FF }, { 0x1B61, 0x1B6A }, { 0x1B74, 0x1B7C }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2044, 0x2044 }, { 0x2052, 0x2052 }, { 0x207A, 0x207C }, { 0x208A, 0x208C }, { 0x20A0, 0x20BE }, { 0x2100, 0x2101 }, { 0x2103, 0x2106 }, { 0x2108, 0x2109 }, { 0x2114, 0x2114 }, { 0x2116, 0x2118 }, { 0x211E, 0x2123 }, { 0x2125, 0x2125 }, { 0x2127, 0x2127 }, { 0x2129, 0x2129 }, { 0x212E, 0x212E }, { 0x213A, 0x213B }, { 0x2140, 0x2144 }, { 0x214A, 0x214D }, { 0x214F, 0x214F }, { 0x218A, 0x218B }, { 0x2190, 0x2307 }, { 0x230C, 0x2328 }, { 0x232B, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x249C, 0x24E9 }, { 0x2500, 0x2767 }, { 0x2794, 0x27C4 }, { 0x27C7, 0x27E5 }, { 0x27F0, 0x2982 }, { 0x2999, 0x29D7 }, { 0x29DC, 0x29FB }, { 0x29FE, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2CE5, 0x2CEA }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3004, 0x3004 }, { 0x3012, 0x3013 }, { 0x3020, 0x3020 }, { 0x3036, 0x3037 }, { 0x303E, 0x303F }, { 0x309B, 0x309C }, { 0x3190, 0x3191 }, { 0x3196, 0x319F }, { 0x31C0, 0x31E3 }, { 0x3200, 0x321E }, { 0x322A, 0x3247 }, { 0x3250, 0x3250 }, { 0x3260, 0x327F }, { 0x328A, 0x32B0 }, { 0x32C0, 0x32FE }, { 0x3300, 0x33FF }, { 0x4DC0, 0x4DFF }, { 0xA490, 0xA4C6 }, { 0xA700, 0xA716 }, { 0xA720, 0xA721 }, { 0xA789, 0xA78A }, { 0xA828, 0xA82B }, { 0xA836, 0xA839 }, { 0xAA77, 0xAA79 }, { 0xAB5B, 0xAB5B }, { 0xFB29, 0xFB29 }, { 0xFBB2, 0xFBC1 }, { 0xFDFC, 0xFDFD }, { 0xFE62, 0xFE62 }, { 0xFE64, 0xFE66 }, { 0xFE69, 0xFE69 }, { 0xFF04, 0xFF04 }, { 0xFF0B, 0xFF0B }, { 0xFF1C, 0xFF1E }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFF5C, 0xFF5C }, { 0xFF5E, 0xFF5E }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFFC, 0xFFFD }, { 0x10137, 0x1013F }, { 0x10179, 0x10189 }, { 0x1018C, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FC }, { 0x10877, 0x10878 }, { 0x10AC8, 0x10AC8 }, { 0x1173F, 0x1173F }, { 0x16B3C, 0x16B3F }, { 0x16B45, 0x16B45 }, { 0x1BC9C, 0x1BC9C }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D16A, 0x1D16C }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1E8 }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D6C1, 0x1D6C1 }, { 0x1D6DB, 0x1D6DB }, { 0x1D6FB, 0x1D6FB }, { 0x1D715, 0x1D715 }, { 0x1D735, 0x1D735 }, { 0x1D74F, 0x1D74F }, { 0x1D76F, 0x1D76F }, { 0x1D789, 0x1D789 }, { 0x1D7A9, 0x1D7A9 }, { 0x1D7C3, 0x1D7C3 }, { 0x1D800, 0x1D9FF }, { 0x1DA37, 0x1DA3A }, { 0x1DA6D, 0x1DA74 }, { 0x1DA76, 0x1DA83 }, { 0x1DA85, 0x1DA86 }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F16B }, { 0x1F170, 0x1F1AC }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_S) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Sc.c����������������������������������������������0000664�0000000�0000000�00000002465�14110572173�0022141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x00A2, 0x00A5 }, { 0x058F, 0x058F }, { 0x060B, 0x060B }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x20A0, 0x20BE }, { 0xA838, 0xA838 }, { 0xFDFC, 0xFDFC }, { 0xFE69, 0xFE69 }, { 0xFF04, 0xFF04 }, { 0xFFE0, 0xFFE1 }, { 0xFFE5, 0xFFE6 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sc) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Sk.c����������������������������������������������0000664�0000000�0000000�00000003127�14110572173�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x00A8, 0x00A8 }, { 0x00AF, 0x00AF }, { 0x00B4, 0x00B4 }, { 0x00B8, 0x00B8 }, { 0x02C2, 0x02C5 }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02EB }, { 0x02ED, 0x02ED }, { 0x02EF, 0x02FF }, { 0x0375, 0x0375 }, { 0x0384, 0x0385 }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x309B, 0x309C }, { 0xA700, 0xA716 }, { 0xA720, 0xA721 }, { 0xA789, 0xA78A }, { 0xAB5B, 0xAB5B }, { 0xFBB2, 0xFBC1 }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFFE3, 0xFFE3 }, { 0x1F3FB, 0x1F3FF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sk) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Sm.c����������������������������������������������0000664�0000000�0000000�00000004663�14110572173�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002B, 0x002B }, { 0x003C, 0x003E }, { 0x007C, 0x007C }, { 0x007E, 0x007E }, { 0x00AC, 0x00AC }, { 0x00B1, 0x00B1 }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x03F6, 0x03F6 }, { 0x0606, 0x0608 }, { 0x2044, 0x2044 }, { 0x2052, 0x2052 }, { 0x207A, 0x207C }, { 0x208A, 0x208C }, { 0x2118, 0x2118 }, { 0x2140, 0x2144 }, { 0x214B, 0x214B }, { 0x2190, 0x2194 }, { 0x219A, 0x219B }, { 0x21A0, 0x21A0 }, { 0x21A3, 0x21A3 }, { 0x21A6, 0x21A6 }, { 0x21AE, 0x21AE }, { 0x21CE, 0x21CF }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 }, { 0x21F4, 0x22FF }, { 0x2320, 0x2321 }, { 0x237C, 0x237C }, { 0x239B, 0x23B3 }, { 0x23DC, 0x23E1 }, { 0x25B7, 0x25B7 }, { 0x25C1, 0x25C1 }, { 0x25F8, 0x25FF }, { 0x266F, 0x266F }, { 0x27C0, 0x27C4 }, { 0x27C7, 0x27E5 }, { 0x27F0, 0x27FF }, { 0x2900, 0x2982 }, { 0x2999, 0x29D7 }, { 0x29DC, 0x29FB }, { 0x29FE, 0x2AFF }, { 0x2B30, 0x2B44 }, { 0x2B47, 0x2B4C }, { 0xFB29, 0xFB29 }, { 0xFE62, 0xFE62 }, { 0xFE64, 0xFE66 }, { 0xFF0B, 0xFF0B }, { 0xFF1C, 0xFF1E }, { 0xFF5C, 0xFF5C }, { 0xFF5E, 0xFF5E }, { 0xFFE2, 0xFFE2 }, { 0xFFE9, 0xFFEC }, { 0x1D6C1, 0x1D6C1 }, { 0x1D6DB, 0x1D6DB }, { 0x1D6FB, 0x1D6FB }, { 0x1D715, 0x1D715 }, { 0x1D735, 0x1D735 }, { 0x1D74F, 0x1D74F }, { 0x1D76F, 0x1D76F }, { 0x1D789, 0x1D789 }, { 0x1D7A9, 0x1D7A9 }, { 0x1D7C3, 0x1D7C3 }, { 0x1EEF0, 0x1EEF1 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sm) #include "test-predicate-part2.h" �����������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_So.c����������������������������������������������0000664�0000000�0000000�00000012143�14110572173�0022147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00A6, 0x00A6 }, { 0x00A9, 0x00A9 }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B0 }, { 0x0482, 0x0482 }, { 0x058D, 0x058E }, { 0x060E, 0x060F }, { 0x06DE, 0x06DE }, { 0x06E9, 0x06E9 }, { 0x06FD, 0x06FE }, { 0x07F6, 0x07F6 }, { 0x09FA, 0x09FA }, { 0x0B70, 0x0B70 }, { 0x0BF3, 0x0BF8 }, { 0x0BFA, 0x0BFA }, { 0x0C7F, 0x0C7F }, { 0x0D4F, 0x0D4F }, { 0x0D79, 0x0D79 }, { 0x0F01, 0x0F03 }, { 0x0F13, 0x0F13 }, { 0x0F15, 0x0F17 }, { 0x0F1A, 0x0F1F }, { 0x0F34, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0FBE, 0x0FC5 }, { 0x0FC7, 0x0FCC }, { 0x0FCE, 0x0FCF }, { 0x0FD5, 0x0FD8 }, { 0x109E, 0x109F }, { 0x1390, 0x1399 }, { 0x1940, 0x1940 }, { 0x19DE, 0x19FF }, { 0x1B61, 0x1B6A }, { 0x1B74, 0x1B7C }, { 0x2100, 0x2101 }, { 0x2103, 0x2106 }, { 0x2108, 0x2109 }, { 0x2114, 0x2114 }, { 0x2116, 0x2117 }, { 0x211E, 0x2123 }, { 0x2125, 0x2125 }, { 0x2127, 0x2127 }, { 0x2129, 0x2129 }, { 0x212E, 0x212E }, { 0x213A, 0x213B }, { 0x214A, 0x214A }, { 0x214C, 0x214D }, { 0x214F, 0x214F }, { 0x218A, 0x218B }, { 0x2195, 0x2199 }, { 0x219C, 0x219F }, { 0x21A1, 0x21A2 }, { 0x21A4, 0x21A5 }, { 0x21A7, 0x21AD }, { 0x21AF, 0x21CD }, { 0x21D0, 0x21D1 }, { 0x21D3, 0x21D3 }, { 0x21D5, 0x21F3 }, { 0x2300, 0x2307 }, { 0x230C, 0x231F }, { 0x2322, 0x2328 }, { 0x232B, 0x237B }, { 0x237D, 0x239A }, { 0x23B4, 0x23DB }, { 0x23E2, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x249C, 0x24E9 }, { 0x2500, 0x25B6 }, { 0x25B8, 0x25C0 }, { 0x25C2, 0x25F7 }, { 0x2600, 0x266E }, { 0x2670, 0x2767 }, { 0x2794, 0x27BF }, { 0x2800, 0x28FF }, { 0x2B00, 0x2B2F }, { 0x2B45, 0x2B46 }, { 0x2B4D, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2CE5, 0x2CEA }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3004, 0x3004 }, { 0x3012, 0x3013 }, { 0x3020, 0x3020 }, { 0x3036, 0x3037 }, { 0x303E, 0x303F }, { 0x3190, 0x3191 }, { 0x3196, 0x319F }, { 0x31C0, 0x31E3 }, { 0x3200, 0x321E }, { 0x322A, 0x3247 }, { 0x3250, 0x3250 }, { 0x3260, 0x327F }, { 0x328A, 0x32B0 }, { 0x32C0, 0x32FE }, { 0x3300, 0x33FF }, { 0x4DC0, 0x4DFF }, { 0xA490, 0xA4C6 }, { 0xA828, 0xA82B }, { 0xA836, 0xA837 }, { 0xA839, 0xA839 }, { 0xAA77, 0xAA79 }, { 0xFDFD, 0xFDFD }, { 0xFFE4, 0xFFE4 }, { 0xFFE8, 0xFFE8 }, { 0xFFED, 0xFFEE }, { 0xFFFC, 0xFFFD }, { 0x10137, 0x1013F }, { 0x10179, 0x10189 }, { 0x1018C, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FC }, { 0x10877, 0x10878 }, { 0x10AC8, 0x10AC8 }, { 0x1173F, 0x1173F }, { 0x16B3C, 0x16B3F }, { 0x16B45, 0x16B45 }, { 0x1BC9C, 0x1BC9C }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D16A, 0x1D16C }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1E8 }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D800, 0x1D9FF }, { 0x1DA37, 0x1DA3A }, { 0x1DA6D, 0x1DA74 }, { 0x1DA76, 0x1DA83 }, { 0x1DA85, 0x1DA86 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F16B }, { 0x1F170, 0x1F1AC }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F3FA }, { 0x1F400, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_So) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Z.c�����������������������������������������������0000664�0000000�0000000�00000002134�14110572173�0021776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x2000, 0x200A }, { 0x2028, 0x2029 }, { 0x202F, 0x202F }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Z) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Zl.c����������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0022162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2028, 0x2028 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zl) #include "test-predicate-part2.h" ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Zp.c����������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0022166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2029, 0x2029 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zp) #include "test-predicate-part2.h" ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_Zs.c����������������������������������������������0000664�0000000�0000000�00000002105�14110572173�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x2000, 0x200A }, { 0x202F, 0x202F }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zs) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_and.c���������������������������������������������0000664�0000000�0000000�00000002334�14110572173�0022331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uc_general_category_t ct = uc_general_category_and ( uc_general_category_or (UC_LETTER, UC_DECIMAL_DIGIT_NUMBER), uc_general_category_or (UC_UPPERCASE_LETTER, UC_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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_and_not.c�����������������������������������������0000664�0000000�0000000�00000002340�14110572173�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" 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)); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_byname.c������������������������������������������0000664�0000000�0000000�00000040412�14110572173�0023041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <stdbool.h> #include <string.h> #include "macros.h" static bool category_equals (uc_general_category_t category1, uc_general_category_t category2) { return (category1.bitmask == category2.bitmask && category1.generic == category2.generic && (category1.generic ? category1.lookup.lookup_fn == category2.lookup.lookup_fn : category1.lookup.table == category2.lookup.table)); } int main () { ASSERT (category_equals (uc_general_category_byname ("L"), UC_CATEGORY_L)); ASSERT (category_equals (uc_general_category_byname ("LC"), UC_CATEGORY_LC)); ASSERT (category_equals (uc_general_category_byname ("Lu"), UC_CATEGORY_Lu)); ASSERT (category_equals (uc_general_category_byname ("Ll"), UC_CATEGORY_Ll)); ASSERT (category_equals (uc_general_category_byname ("Lt"), UC_CATEGORY_Lt)); ASSERT (category_equals (uc_general_category_byname ("Lm"), UC_CATEGORY_Lm)); ASSERT (category_equals (uc_general_category_byname ("Lo"), UC_CATEGORY_Lo)); ASSERT (category_equals (uc_general_category_byname ("M"), UC_CATEGORY_M)); ASSERT (category_equals (uc_general_category_byname ("Mn"), UC_CATEGORY_Mn)); ASSERT (category_equals (uc_general_category_byname ("Mc"), UC_CATEGORY_Mc)); ASSERT (category_equals (uc_general_category_byname ("Me"), UC_CATEGORY_Me)); ASSERT (category_equals (uc_general_category_byname ("N"), UC_CATEGORY_N)); ASSERT (category_equals (uc_general_category_byname ("Nd"), UC_CATEGORY_Nd)); ASSERT (category_equals (uc_general_category_byname ("Nl"), UC_CATEGORY_Nl)); ASSERT (category_equals (uc_general_category_byname ("No"), UC_CATEGORY_No)); ASSERT (category_equals (uc_general_category_byname ("P"), UC_CATEGORY_P)); ASSERT (category_equals (uc_general_category_byname ("Pc"), UC_CATEGORY_Pc)); ASSERT (category_equals (uc_general_category_byname ("Pd"), UC_CATEGORY_Pd)); ASSERT (category_equals (uc_general_category_byname ("Ps"), UC_CATEGORY_Ps)); ASSERT (category_equals (uc_general_category_byname ("Pe"), UC_CATEGORY_Pe)); ASSERT (category_equals (uc_general_category_byname ("Pi"), UC_CATEGORY_Pi)); ASSERT (category_equals (uc_general_category_byname ("Pf"), UC_CATEGORY_Pf)); ASSERT (category_equals (uc_general_category_byname ("Po"), UC_CATEGORY_Po)); ASSERT (category_equals (uc_general_category_byname ("S"), UC_CATEGORY_S)); ASSERT (category_equals (uc_general_category_byname ("Sm"), UC_CATEGORY_Sm)); ASSERT (category_equals (uc_general_category_byname ("Sc"), UC_CATEGORY_Sc)); ASSERT (category_equals (uc_general_category_byname ("Sk"), UC_CATEGORY_Sk)); ASSERT (category_equals (uc_general_category_byname ("So"), UC_CATEGORY_So)); ASSERT (category_equals (uc_general_category_byname ("Z"), UC_CATEGORY_Z)); ASSERT (category_equals (uc_general_category_byname ("Zs"), UC_CATEGORY_Zs)); ASSERT (category_equals (uc_general_category_byname ("Zl"), UC_CATEGORY_Zl)); ASSERT (category_equals (uc_general_category_byname ("Zp"), UC_CATEGORY_Zp)); ASSERT (category_equals (uc_general_category_byname ("C"), UC_CATEGORY_C)); ASSERT (category_equals (uc_general_category_byname ("Cc"), UC_CATEGORY_Cc)); ASSERT (category_equals (uc_general_category_byname ("Cf"), UC_CATEGORY_Cf)); ASSERT (category_equals (uc_general_category_byname ("Cs"), UC_CATEGORY_Cs)); ASSERT (category_equals (uc_general_category_byname ("Co"), UC_CATEGORY_Co)); ASSERT (category_equals (uc_general_category_byname ("Cn"), UC_CATEGORY_Cn)); ASSERT (category_equals (uc_general_category_byname ("LETTER"), UC_CATEGORY_L)); ASSERT (category_equals (uc_general_category_byname ("Letter"), UC_CATEGORY_L)); ASSERT (category_equals (uc_general_category_byname ("CASED LETTER"), UC_CATEGORY_LC)); ASSERT (category_equals (uc_general_category_byname ("Cased Letter"), UC_CATEGORY_LC)); ASSERT (category_equals (uc_general_category_byname ("Cased_Letter"), UC_CATEGORY_LC)); ASSERT (category_equals (uc_general_category_byname ("CasedLetter"), UC_CATEGORY_LC)); ASSERT (category_equals (uc_general_category_byname ("UPPERCASE LETTER"), UC_CATEGORY_Lu)); ASSERT (category_equals (uc_general_category_byname ("Uppercase Letter"), UC_CATEGORY_Lu)); ASSERT (category_equals (uc_general_category_byname ("Uppercase_Letter"), UC_CATEGORY_Lu)); ASSERT (category_equals (uc_general_category_byname ("UppercaseLetter"), UC_CATEGORY_Lu)); ASSERT (category_equals (uc_general_category_byname ("LOWERCASE LETTER"), UC_CATEGORY_Ll)); ASSERT (category_equals (uc_general_category_byname ("Lowercase Letter"), UC_CATEGORY_Ll)); ASSERT (category_equals (uc_general_category_byname ("Lowercase_Letter"), UC_CATEGORY_Ll)); ASSERT (category_equals (uc_general_category_byname ("LowercaseLetter"), UC_CATEGORY_Ll)); ASSERT (category_equals (uc_general_category_byname ("TITLECASE LETTER"), UC_CATEGORY_Lt)); ASSERT (category_equals (uc_general_category_byname ("Titlecase Letter"), UC_CATEGORY_Lt)); ASSERT (category_equals (uc_general_category_byname ("Titlecase_Letter"), UC_CATEGORY_Lt)); ASSERT (category_equals (uc_general_category_byname ("TitlecaseLetter"), UC_CATEGORY_Lt)); ASSERT (category_equals (uc_general_category_byname ("MODIFIER LETTER"), UC_CATEGORY_Lm)); ASSERT (category_equals (uc_general_category_byname ("Modifier Letter"), UC_CATEGORY_Lm)); ASSERT (category_equals (uc_general_category_byname ("Modifier_Letter"), UC_CATEGORY_Lm)); ASSERT (category_equals (uc_general_category_byname ("ModifierLetter"), UC_CATEGORY_Lm)); ASSERT (category_equals (uc_general_category_byname ("OTHER LETTER"), UC_CATEGORY_Lo)); ASSERT (category_equals (uc_general_category_byname ("Other Letter"), UC_CATEGORY_Lo)); ASSERT (category_equals (uc_general_category_byname ("Other_Letter"), UC_CATEGORY_Lo)); ASSERT (category_equals (uc_general_category_byname ("OtherLetter"), UC_CATEGORY_Lo)); ASSERT (category_equals (uc_general_category_byname ("MARK"), UC_CATEGORY_M)); ASSERT (category_equals (uc_general_category_byname ("Mark"), UC_CATEGORY_M)); ASSERT (category_equals (uc_general_category_byname ("NONSPACING MARK"), UC_CATEGORY_Mn)); ASSERT (category_equals (uc_general_category_byname ("Nonspacing Mark"), UC_CATEGORY_Mn)); ASSERT (category_equals (uc_general_category_byname ("Nonspacing_Mark"), UC_CATEGORY_Mn)); ASSERT (category_equals (uc_general_category_byname ("NonspacingMark"), UC_CATEGORY_Mn)); ASSERT (category_equals (uc_general_category_byname ("SPACING MARK"), UC_CATEGORY_Mc)); ASSERT (category_equals (uc_general_category_byname ("Spacing Mark"), UC_CATEGORY_Mc)); ASSERT (category_equals (uc_general_category_byname ("Spacing_Mark"), UC_CATEGORY_Mc)); ASSERT (category_equals (uc_general_category_byname ("SpacingMark"), UC_CATEGORY_Mc)); ASSERT (category_equals (uc_general_category_byname ("ENCLOSING MARK"), UC_CATEGORY_Me)); ASSERT (category_equals (uc_general_category_byname ("Enclosing Mark"), UC_CATEGORY_Me)); ASSERT (category_equals (uc_general_category_byname ("Enclosing_Mark"), UC_CATEGORY_Me)); ASSERT (category_equals (uc_general_category_byname ("EnclosingMark"), UC_CATEGORY_Me)); ASSERT (category_equals (uc_general_category_byname ("NUMBER"), UC_CATEGORY_N)); ASSERT (category_equals (uc_general_category_byname ("Number"), UC_CATEGORY_N)); ASSERT (category_equals (uc_general_category_byname ("DECIMAL NUMBER"), UC_CATEGORY_Nd)); ASSERT (category_equals (uc_general_category_byname ("Decimal Number"), UC_CATEGORY_Nd)); ASSERT (category_equals (uc_general_category_byname ("Decimal_Number"), UC_CATEGORY_Nd)); ASSERT (category_equals (uc_general_category_byname ("DecimalNumber"), UC_CATEGORY_Nd)); ASSERT (category_equals (uc_general_category_byname ("LETTER NUMBER"), UC_CATEGORY_Nl)); ASSERT (category_equals (uc_general_category_byname ("Letter Number"), UC_CATEGORY_Nl)); ASSERT (category_equals (uc_general_category_byname ("Letter_Number"), UC_CATEGORY_Nl)); ASSERT (category_equals (uc_general_category_byname ("LetterNumber"), UC_CATEGORY_Nl)); ASSERT (category_equals (uc_general_category_byname ("OTHER NUMBER"), UC_CATEGORY_No)); ASSERT (category_equals (uc_general_category_byname ("Other Number"), UC_CATEGORY_No)); ASSERT (category_equals (uc_general_category_byname ("Other_Number"), UC_CATEGORY_No)); ASSERT (category_equals (uc_general_category_byname ("OtherNumber"), UC_CATEGORY_No)); ASSERT (category_equals (uc_general_category_byname ("PUNCTUATION"), UC_CATEGORY_P)); ASSERT (category_equals (uc_general_category_byname ("Punctuation"), UC_CATEGORY_P)); ASSERT (category_equals (uc_general_category_byname ("CONNECTOR PUNCTUATION"), UC_CATEGORY_Pc)); ASSERT (category_equals (uc_general_category_byname ("Connector Punctuation"), UC_CATEGORY_Pc)); ASSERT (category_equals (uc_general_category_byname ("Connector_Punctuation"), UC_CATEGORY_Pc)); ASSERT (category_equals (uc_general_category_byname ("ConnectorPunctuation"), UC_CATEGORY_Pc)); ASSERT (category_equals (uc_general_category_byname ("DASH PUNCTUATION"), UC_CATEGORY_Pd)); ASSERT (category_equals (uc_general_category_byname ("Dash Punctuation"), UC_CATEGORY_Pd)); ASSERT (category_equals (uc_general_category_byname ("Dash_Punctuation"), UC_CATEGORY_Pd)); ASSERT (category_equals (uc_general_category_byname ("DashPunctuation"), UC_CATEGORY_Pd)); ASSERT (category_equals (uc_general_category_byname ("OPEN PUNCTUATION"), UC_CATEGORY_Ps)); ASSERT (category_equals (uc_general_category_byname ("Open Punctuation"), UC_CATEGORY_Ps)); ASSERT (category_equals (uc_general_category_byname ("Open_Punctuation"), UC_CATEGORY_Ps)); ASSERT (category_equals (uc_general_category_byname ("OpenPunctuation"), UC_CATEGORY_Ps)); ASSERT (category_equals (uc_general_category_byname ("CLOSE PUNCTUATION"), UC_CATEGORY_Pe)); ASSERT (category_equals (uc_general_category_byname ("Close Punctuation"), UC_CATEGORY_Pe)); ASSERT (category_equals (uc_general_category_byname ("Close_Punctuation"), UC_CATEGORY_Pe)); ASSERT (category_equals (uc_general_category_byname ("ClosePunctuation"), UC_CATEGORY_Pe)); ASSERT (category_equals (uc_general_category_byname ("INITIAL PUNCTUATION"), UC_CATEGORY_Pi)); ASSERT (category_equals (uc_general_category_byname ("Initial Punctuation"), UC_CATEGORY_Pi)); ASSERT (category_equals (uc_general_category_byname ("Initial_Punctuation"), UC_CATEGORY_Pi)); ASSERT (category_equals (uc_general_category_byname ("InitialPunctuation"), UC_CATEGORY_Pi)); ASSERT (category_equals (uc_general_category_byname ("FINAL PUNCTUATION"), UC_CATEGORY_Pf)); ASSERT (category_equals (uc_general_category_byname ("Final Punctuation"), UC_CATEGORY_Pf)); ASSERT (category_equals (uc_general_category_byname ("Final_Punctuation"), UC_CATEGORY_Pf)); ASSERT (category_equals (uc_general_category_byname ("FinalPunctuation"), UC_CATEGORY_Pf)); ASSERT (category_equals (uc_general_category_byname ("OTHER PUNCTUATION"), UC_CATEGORY_Po)); ASSERT (category_equals (uc_general_category_byname ("Other Punctuation"), UC_CATEGORY_Po)); ASSERT (category_equals (uc_general_category_byname ("Other_Punctuation"), UC_CATEGORY_Po)); ASSERT (category_equals (uc_general_category_byname ("OtherPunctuation"), UC_CATEGORY_Po)); ASSERT (category_equals (uc_general_category_byname ("SYMBOL"), UC_CATEGORY_S)); ASSERT (category_equals (uc_general_category_byname ("Symbol"), UC_CATEGORY_S)); ASSERT (category_equals (uc_general_category_byname ("MATH SYMBOL"), UC_CATEGORY_Sm)); ASSERT (category_equals (uc_general_category_byname ("Math Symbol"), UC_CATEGORY_Sm)); ASSERT (category_equals (uc_general_category_byname ("Math_Symbol"), UC_CATEGORY_Sm)); ASSERT (category_equals (uc_general_category_byname ("MathSymbol"), UC_CATEGORY_Sm)); ASSERT (category_equals (uc_general_category_byname ("CURRENCY SYMBOL"), UC_CATEGORY_Sc)); ASSERT (category_equals (uc_general_category_byname ("Currency Symbol"), UC_CATEGORY_Sc)); ASSERT (category_equals (uc_general_category_byname ("Currency_Symbol"), UC_CATEGORY_Sc)); ASSERT (category_equals (uc_general_category_byname ("CurrencySymbol"), UC_CATEGORY_Sc)); ASSERT (category_equals (uc_general_category_byname ("MODIFIER SYMBOL"), UC_CATEGORY_Sk)); ASSERT (category_equals (uc_general_category_byname ("Modifier Symbol"), UC_CATEGORY_Sk)); ASSERT (category_equals (uc_general_category_byname ("Modifier_Symbol"), UC_CATEGORY_Sk)); ASSERT (category_equals (uc_general_category_byname ("ModifierSymbol"), UC_CATEGORY_Sk)); ASSERT (category_equals (uc_general_category_byname ("OTHER SYMBOL"), UC_CATEGORY_So)); ASSERT (category_equals (uc_general_category_byname ("Other Symbol"), UC_CATEGORY_So)); ASSERT (category_equals (uc_general_category_byname ("Other_Symbol"), UC_CATEGORY_So)); ASSERT (category_equals (uc_general_category_byname ("OtherSymbol"), UC_CATEGORY_So)); ASSERT (category_equals (uc_general_category_byname ("SEPARATOR"), UC_CATEGORY_Z)); ASSERT (category_equals (uc_general_category_byname ("Separator"), UC_CATEGORY_Z)); ASSERT (category_equals (uc_general_category_byname ("SPACE SEPARATOR"), UC_CATEGORY_Zs)); ASSERT (category_equals (uc_general_category_byname ("Space Separator"), UC_CATEGORY_Zs)); ASSERT (category_equals (uc_general_category_byname ("Space_Separator"), UC_CATEGORY_Zs)); ASSERT (category_equals (uc_general_category_byname ("SpaceSeparator"), UC_CATEGORY_Zs)); ASSERT (category_equals (uc_general_category_byname ("LINE SEPARATOR"), UC_CATEGORY_Zl)); ASSERT (category_equals (uc_general_category_byname ("Line Separator"), UC_CATEGORY_Zl)); ASSERT (category_equals (uc_general_category_byname ("Line_Separator"), UC_CATEGORY_Zl)); ASSERT (category_equals (uc_general_category_byname ("LineSeparator"), UC_CATEGORY_Zl)); ASSERT (category_equals (uc_general_category_byname ("PARAGRAPH SEPARATOR"), UC_CATEGORY_Zp)); ASSERT (category_equals (uc_general_category_byname ("Paragraph Separator"), UC_CATEGORY_Zp)); ASSERT (category_equals (uc_general_category_byname ("Paragraph_Separator"), UC_CATEGORY_Zp)); ASSERT (category_equals (uc_general_category_byname ("ParagraphSeparator"), UC_CATEGORY_Zp)); ASSERT (category_equals (uc_general_category_byname ("OTHER"), UC_CATEGORY_C)); ASSERT (category_equals (uc_general_category_byname ("Other"), UC_CATEGORY_C)); ASSERT (category_equals (uc_general_category_byname ("CONTROL"), UC_CATEGORY_Cc)); ASSERT (category_equals (uc_general_category_byname ("Control"), UC_CATEGORY_Cc)); ASSERT (category_equals (uc_general_category_byname ("FORMAT"), UC_CATEGORY_Cf)); ASSERT (category_equals (uc_general_category_byname ("Format"), UC_CATEGORY_Cf)); ASSERT (category_equals (uc_general_category_byname ("SURROGATE"), UC_CATEGORY_Cs)); ASSERT (category_equals (uc_general_category_byname ("Surrogate"), UC_CATEGORY_Cs)); ASSERT (category_equals (uc_general_category_byname ("PRIVATE USE"), UC_CATEGORY_Co)); ASSERT (category_equals (uc_general_category_byname ("Private Use"), UC_CATEGORY_Co)); ASSERT (category_equals (uc_general_category_byname ("Private_Use"), UC_CATEGORY_Co)); ASSERT (category_equals (uc_general_category_byname ("PrivateUse"), UC_CATEGORY_Co)); 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; for (c = 0x30; c <= 0x39; c++) ASSERT (uc_is_general_category (c, ct)); for (c = 0x40; c < 0x80; c++) ASSERT (!uc_is_general_category (c, ct)); } { uc_general_category_t ct = uc_general_category_byname ("Foo"); unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (!uc_is_general_category (c, ct)); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_longname.c����������������������������������������0000664�0000000�0000000�00000002204�14110572173�0023363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_general_category_long_name (UC_CATEGORY_Z), "Separator") == 0); ASSERT (strcmp (uc_general_category_long_name (UC_CATEGORY_Nl), "Letter Number") == 0); ASSERT (uc_general_category_long_name (uc_general_category_or (UC_CATEGORY_Z, UC_CATEGORY_Nl)) == NULL); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_name.c��������������������������������������������0000664�0000000�0000000�00000002134�14110572173�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_general_category_name (UC_CATEGORY_Z), "Z") == 0); ASSERT (strcmp (uc_general_category_name (UC_CATEGORY_Nl), "Nl") == 0); ASSERT (uc_general_category_name (uc_general_category_or (UC_CATEGORY_Z, UC_CATEGORY_Nl)) == NULL); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_none.c��������������������������������������������0000664�0000000�0000000�00000001766�14110572173�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uc_general_category_t ct = _UC_CATEGORY_NONE; unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (!uc_is_general_category (c, ct)); return 0; } ����������gnulib-20210822~d383792/tests/unictype/test-categ_of.c����������������������������������������������0000664�0000000�0000000�00000003061�14110572173�0022171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { { unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (uc_is_general_category (c, uc_general_category (c))); } { uc_general_category_t decimal_digits = uc_general_category ('7'); unsigned int c; for (c = 0x30; c <= 0x39; c++) ASSERT (uc_is_general_category (c, decimal_digits)); for (c = 0x40; c < 0x80; c++) ASSERT (!uc_is_general_category (c, decimal_digits)); } { uc_general_category_t lowercase_letters = uc_general_category ('x'); unsigned int c; for (c = 0x41; c <= 0x5A; c++) ASSERT (!uc_is_general_category (c, lowercase_letters)); for (c = 0x61; c <= 0x7A; c++) ASSERT (uc_is_general_category (c, lowercase_letters)); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_or.c����������������������������������������������0000664�0000000�0000000�00000002075�14110572173�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uc_general_category_t ct = uc_general_category_or (UC_LETTER, UC_NUMBER); ASSERT (uc_is_general_category ('a', ct)); ASSERT (uc_is_general_category ('7', ct)); ASSERT (!uc_is_general_category ('$', ct)); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-categ_test_withtable.c����������������������������������0000664�0000000�0000000�00000002314�14110572173�0024607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uint32_t ctmask = (UC_CATEGORY_MASK_L | UC_CATEGORY_MASK_N) & ~(UC_CATEGORY_MASK_Lu | UC_CATEGORY_MASK_Nd); ASSERT (!uc_is_general_category_withtable ('A', ctmask)); ASSERT (uc_is_general_category_withtable ('a', ctmask)); ASSERT (!uc_is_general_category_withtable ('7', ctmask)); ASSERT (uc_is_general_category_withtable (0x00B2, ctmask)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-combiningclass.c����������������������������������������0000664�0000000�0000000�00000002151�14110572173�0023414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_combining_class ('x') == UC_CCC_NR); ASSERT (uc_combining_class (0x0300) == UC_CCC_A); ASSERT (uc_combining_class (0x0319) == UC_CCC_B); ASSERT (uc_combining_class (0x0327) == UC_CCC_ATB); ASSERT (uc_combining_class (0x093C) == UC_CCC_NK); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-combiningclass_byname.c���������������������������������0000664�0000000�0000000�00000014612�14110572173�0024754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining group functions. Copyright (C) 2011 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 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_combining_class_byname ("NR") == UC_CCC_NR); ASSERT (uc_combining_class_byname ("OV") == UC_CCC_OV); ASSERT (uc_combining_class_byname ("NK") == UC_CCC_NK); ASSERT (uc_combining_class_byname ("KV") == UC_CCC_KV); ASSERT (uc_combining_class_byname ("VR") == UC_CCC_VR); ASSERT (uc_combining_class_byname ("ATBL") == UC_CCC_ATBL); ASSERT (uc_combining_class_byname ("ATB") == UC_CCC_ATB); ASSERT (uc_combining_class_byname ("ATA") == UC_CCC_ATA); ASSERT (uc_combining_class_byname ("ATAR") == UC_CCC_ATAR); ASSERT (uc_combining_class_byname ("BL") == UC_CCC_BL); ASSERT (uc_combining_class_byname ("B") == UC_CCC_B); ASSERT (uc_combining_class_byname ("BR") == UC_CCC_BR); ASSERT (uc_combining_class_byname ("L") == UC_CCC_L); ASSERT (uc_combining_class_byname ("R") == UC_CCC_R); ASSERT (uc_combining_class_byname ("AL") == UC_CCC_AL); ASSERT (uc_combining_class_byname ("A") == UC_CCC_A); ASSERT (uc_combining_class_byname ("AR") == UC_CCC_AR); ASSERT (uc_combining_class_byname ("DB") == UC_CCC_DB); ASSERT (uc_combining_class_byname ("DA") == UC_CCC_DA); ASSERT (uc_combining_class_byname ("IS") == UC_CCC_IS); ASSERT (uc_combining_class_byname ("NOT REORDERED") == UC_CCC_NR); ASSERT (uc_combining_class_byname ("Not Reordered") == UC_CCC_NR); ASSERT (uc_combining_class_byname ("Not_Reordered") == UC_CCC_NR); ASSERT (uc_combining_class_byname ("NotReordered") == UC_CCC_NR); ASSERT (uc_combining_class_byname ("OVERLAY") == UC_CCC_OV); ASSERT (uc_combining_class_byname ("Overlay") == UC_CCC_OV); ASSERT (uc_combining_class_byname ("NUKTA") == UC_CCC_NK); ASSERT (uc_combining_class_byname ("Nukta") == UC_CCC_NK); ASSERT (uc_combining_class_byname ("KANA VOICING") == UC_CCC_KV); ASSERT (uc_combining_class_byname ("Kana Voicing") == UC_CCC_KV); ASSERT (uc_combining_class_byname ("Kana_Voicing") == UC_CCC_KV); ASSERT (uc_combining_class_byname ("KanaVoicing") == UC_CCC_KV); ASSERT (uc_combining_class_byname ("VIRAMA") == UC_CCC_VR); ASSERT (uc_combining_class_byname ("Virama") == UC_CCC_VR); ASSERT (uc_combining_class_byname ("ATTACHED BELOW LEFT") == UC_CCC_ATBL); ASSERT (uc_combining_class_byname ("Attached Below Left") == UC_CCC_ATBL); ASSERT (uc_combining_class_byname ("Attached_Below_Left") == UC_CCC_ATBL); ASSERT (uc_combining_class_byname ("AttachedBelowLeft") == UC_CCC_ATBL); ASSERT (uc_combining_class_byname ("ATTACHED BELOW") == UC_CCC_ATB); ASSERT (uc_combining_class_byname ("Attached Below") == UC_CCC_ATB); ASSERT (uc_combining_class_byname ("Attached_Below") == UC_CCC_ATB); ASSERT (uc_combining_class_byname ("AttachedBelow") == UC_CCC_ATB); ASSERT (uc_combining_class_byname ("ATTACHED ABOVE") == UC_CCC_ATA); ASSERT (uc_combining_class_byname ("Attached Above") == UC_CCC_ATA); ASSERT (uc_combining_class_byname ("Attached_Above") == UC_CCC_ATA); ASSERT (uc_combining_class_byname ("AttachedAbove") == UC_CCC_ATA); ASSERT (uc_combining_class_byname ("ATTACHED ABOVE RIGHT") == UC_CCC_ATAR); ASSERT (uc_combining_class_byname ("Attached Above Right") == UC_CCC_ATAR); ASSERT (uc_combining_class_byname ("Attached_Above_Right") == UC_CCC_ATAR); ASSERT (uc_combining_class_byname ("AttachedAboveRight") == UC_CCC_ATAR); ASSERT (uc_combining_class_byname ("BELOW LEFT") == UC_CCC_BL); ASSERT (uc_combining_class_byname ("Below Left") == UC_CCC_BL); ASSERT (uc_combining_class_byname ("Below_Left") == UC_CCC_BL); ASSERT (uc_combining_class_byname ("BelowLeft") == UC_CCC_BL); ASSERT (uc_combining_class_byname ("BELOW") == UC_CCC_B); ASSERT (uc_combining_class_byname ("Below") == UC_CCC_B); ASSERT (uc_combining_class_byname ("BELOW RIGHT") == UC_CCC_BR); ASSERT (uc_combining_class_byname ("Below Right") == UC_CCC_BR); ASSERT (uc_combining_class_byname ("Below_Right") == UC_CCC_BR); ASSERT (uc_combining_class_byname ("BelowRight") == UC_CCC_BR); ASSERT (uc_combining_class_byname ("LEFT") == UC_CCC_L); ASSERT (uc_combining_class_byname ("Left") == UC_CCC_L); ASSERT (uc_combining_class_byname ("RIGHT") == UC_CCC_R); ASSERT (uc_combining_class_byname ("Right") == UC_CCC_R); ASSERT (uc_combining_class_byname ("ABOVE LEFT") == UC_CCC_AL); ASSERT (uc_combining_class_byname ("Above Left") == UC_CCC_AL); ASSERT (uc_combining_class_byname ("Above_Left") == UC_CCC_AL); ASSERT (uc_combining_class_byname ("AboveLeft") == UC_CCC_AL); ASSERT (uc_combining_class_byname ("ABOVE") == UC_CCC_A); ASSERT (uc_combining_class_byname ("ABOVE RIGHT") == UC_CCC_AR); ASSERT (uc_combining_class_byname ("Above Right") == UC_CCC_AR); ASSERT (uc_combining_class_byname ("Above_Right") == UC_CCC_AR); ASSERT (uc_combining_class_byname ("AboveRight") == UC_CCC_AR); ASSERT (uc_combining_class_byname ("DOUBLE BELOW") == UC_CCC_DB); ASSERT (uc_combining_class_byname ("Double Below") == UC_CCC_DB); ASSERT (uc_combining_class_byname ("Double_Below") == UC_CCC_DB); ASSERT (uc_combining_class_byname ("DoubleBelow") == UC_CCC_DB); ASSERT (uc_combining_class_byname ("DOUBLE ABOVE") == UC_CCC_DA); ASSERT (uc_combining_class_byname ("Double Above") == UC_CCC_DA); ASSERT (uc_combining_class_byname ("Double_Above") == UC_CCC_DA); ASSERT (uc_combining_class_byname ("DoubleAbove") == UC_CCC_DA); ASSERT (uc_combining_class_byname ("IOTA SUBSCRIPT") == UC_CCC_IS); ASSERT (uc_combining_class_byname ("Iota Subscript") == UC_CCC_IS); ASSERT (uc_combining_class_byname ("Iota_Subscript") == UC_CCC_IS); ASSERT (uc_combining_class_byname ("IotaSubscript") == UC_CCC_IS); return 0; } ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-combiningclass_longname.c�������������������������������0000664�0000000�0000000�00000005142�14110572173�0025277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_NR), "Not Reordered") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_OV), "Overlay") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_NK), "Nukta") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_KV), "Kana Voicing") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_VR), "Virama") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_ATBL), "Attached Below Left") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_ATB), "Attached Below") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_ATA), "Attached Above") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_ATAR), "Attached Above Right") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_BL), "Below Left") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_B), "Below") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_BR), "Below Right") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_L), "Left") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_R), "Right") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_AL), "Above Left") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_A), "Above") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_AR), "Above Right") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_DB), "Double Below") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_DA), "Double Above") == 0); ASSERT (strcmp (uc_combining_class_long_name (UC_CCC_IS), "Iota Subscript") == 0); ASSERT (uc_combining_class_long_name (-5) == NULL); ASSERT (uc_combining_class_long_name (163) == NULL); ASSERT (uc_combining_class_long_name (255) == NULL); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-combiningclass_name.c�����������������������������������0000664�0000000�0000000�00000004510�14110572173�0024415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2011 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (strcmp (uc_combining_class_name (UC_CCC_NR), "NR") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_OV), "OV") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_NK), "NK") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_KV), "KV") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_VR), "VR") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_ATBL), "ATBL") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_ATB), "ATB") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_ATA), "ATA") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_ATAR), "ATAR") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_BL), "BL") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_B), "B") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_BR), "BR") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_L), "L") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_R), "R") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_AL), "AL") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_A), "A") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_AR), "AR") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_DB), "DB") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_DA), "DA") == 0); ASSERT (strcmp (uc_combining_class_name (UC_CCC_IS), "IS") == 0); ASSERT (uc_combining_class_name (-5) == NULL); ASSERT (uc_combining_class_name (163) == NULL); ASSERT (uc_combining_class_name (255) == NULL); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_alnum.c�������������������������������������������0000664�0000000�0000000�00000037434�14110572173�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0345, 0x0345 }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x064A }, { 0x0660, 0x0669 }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09E6, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0BE6, 0x0BEF }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DE6, 0x0DEF }, { 0x0E01, 0x0E2E }, { 0x0E30, 0x0E3A }, { 0x0E40, 0x0E45 }, { 0x0E47, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F20, 0x0F29 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x1049 }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x1090, 0x1099 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x249C, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11103, 0x11126 }, { 0x11136, 0x1113F }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x112F0, 0x112F9 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11450, 0x11459 }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116AA }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x11730, 0x11739 }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1A5, 0x1F1A5 }, { 0x1F1E6, 0x1F1FF }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_alnum (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_alpha.c�������������������������������������������0000664�0000000�0000000�00000037404�14110572173�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0345, 0x0345 }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x064A }, { 0x0660, 0x0669 }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09E6, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0BE6, 0x0BEF }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DE6, 0x0DEF }, { 0x0E01, 0x0E2E }, { 0x0E30, 0x0E3A }, { 0x0E40, 0x0E45 }, { 0x0E47, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F20, 0x0F29 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x1049 }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x1090, 0x1099 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x249C, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11103, 0x11126 }, { 0x11136, 0x1113F }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x112F0, 0x112F9 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11450, 0x11459 }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116AA }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x11730, 0x11739 }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1A5, 0x1F1A5 }, { 0x1F1E6, 0x1F1FF }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_alpha (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_blank.c�������������������������������������������0000664�0000000�0000000�00000002052�14110572173�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x0009 }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_blank (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_cntrl.c�������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F }, { 0x2028, 0x2029 } #define PREDICATE(c) uc_is_cntrl (c) #include "test-predicate-part2.h" ������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_digit.c�������������������������������������������0000664�0000000�0000000�00000001632�14110572173�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 } #define PREDICATE(c) uc_is_digit (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_graph.c�������������������������������������������0000664�0000000�0000000�00000040756�14110572173�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037F }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F4 }, { 0x0600, 0x061C }, { 0x061E, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x0800, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x08D4, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09FB }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AF1 }, { 0x0AF9, 0x0AF9 }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B77 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BFA }, { 0x0C00, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D01, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4F }, { 0x0D54, 0x0D63 }, { 0x0D66, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF4 }, { 0x0E01, 0x0E3A }, { 0x0E3F, 0x0E5B }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB9 }, { 0x0EBB, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x137C }, { 0x1380, 0x1399 }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1400, 0x167F }, { 0x1681, 0x169C }, { 0x16A0, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1736 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180E }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A1B }, { 0x1A1E, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA0, 0x1AAD }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B7C }, { 0x1B80, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C88 }, { 0x1CC0, 0x1CC7 }, { 0x1CD0, 0x1CF6 }, { 0x1CF8, 0x1CF9 }, { 0x1D00, 0x1DF5 }, { 0x1DFB, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FC4 }, { 0x1FC6, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FDD, 0x1FEF }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFE }, { 0x2007, 0x2007 }, { 0x200B, 0x2027 }, { 0x202A, 0x205E }, { 0x2060, 0x2064 }, { 0x2066, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20BE }, { 0x20D0, 0x20F0 }, { 0x2100, 0x218B }, { 0x2190, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CF3 }, { 0x2CF9, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E44 }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3001, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x3190, 0x31BA }, { 0x31C0, 0x31E3 }, { 0x31F0, 0x321E }, { 0x3220, 0x32FE }, { 0x3300, 0x4DB5 }, { 0x4DC0, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA6F7 }, { 0xA700, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C5 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA8FD }, { 0xA900, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAAC2 }, { 0xAADB, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB65 }, { 0xAB70, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBC1 }, { 0xFBD3, 0xFD3F }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFD }, { 0xFE00, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102FB }, { 0x10300, 0x10323 }, { 0x10330, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x1056F, 0x1056F }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1089E }, { 0x108A7, 0x108AF }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x108FB, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10980, 0x109B7 }, { 0x109BC, 0x109CF }, { 0x109D2, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A9F }, { 0x10AC0, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B91 }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11000, 0x1104D }, { 0x11052, 0x1106F }, { 0x1107F, 0x110C1 }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x11143 }, { 0x11150, 0x11176 }, { 0x11180, 0x111CD }, { 0x111D0, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x11200, 0x11211 }, { 0x11213, 0x1123E }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A9 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133C, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x11459 }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x11480, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115DD }, { 0x11600, 0x11644 }, { 0x11650, 0x11659 }, { 0x11660, 0x1166C }, { 0x11680, 0x116B7 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x1171D, 0x1172B }, { 0x11730, 0x1173F }, { 0x118A0, 0x118F2 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C45 }, { 0x11C50, 0x11C6C }, { 0x11C70, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12470, 0x12474 }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A6E, 0x16A6F }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF5 }, { 0x16B00, 0x16B45 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9C, 0x1BCA3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1E8 }, { 0x1D200, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D371 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8D6 }, { 0x1E900, 0x1E94A }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F10C }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F16B }, { 0x1F170, 0x1F1AC }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_graph (c) #include "test-predicate-part2.h" ������������������gnulib-20210822~d383792/tests/unictype/test-ctype_lower.c�������������������������������������������0000664�0000000�0000000�00000036164�14110572173�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0137 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0148 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018C }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019A }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01B9 }, { 0x01BD, 0x01BD }, { 0x01BF, 0x01BF }, { 0x01C5, 0x01C6 }, { 0x01C8, 0x01C9 }, { 0x01CB, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01EF }, { 0x01F2, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0233 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0254 }, { 0x0256, 0x0257 }, { 0x0259, 0x0259 }, { 0x025B, 0x025C }, { 0x0260, 0x0261 }, { 0x0263, 0x0263 }, { 0x0265, 0x0266 }, { 0x0268, 0x026C }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0287, 0x028C }, { 0x0292, 0x0292 }, { 0x029D, 0x029E }, { 0x0345, 0x0345 }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037B, 0x037D }, { 0x03AC, 0x03AF }, { 0x03B1, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FB }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0586 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D79, 0x1D79 }, { 0x1D7D, 0x1D7D }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E95 }, { 0x1E9B, 0x1E9B }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F51, 0x1F51 }, { 0x1F53, 0x1F53 }, { 0x1F55, 0x1F55 }, { 0x1F57, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1F87 }, { 0x1F90, 0x1F97 }, { 0x1FA0, 0x1FA7 }, { 0x1FB0, 0x1FB1 }, { 0x1FB3, 0x1FB3 }, { 0x1FBE, 0x1FBE }, { 0x1FC3, 0x1FC3 }, { 0x1FD0, 0x1FD1 }, { 0x1FE0, 0x1FE1 }, { 0x1FE5, 0x1FE5 }, { 0x1FF3, 0x1FF3 }, { 0x214E, 0x214E }, { 0x2170, 0x217F }, { 0x2184, 0x2184 }, { 0x24D0, 0x24E9 }, { 0x2C30, 0x2C5E }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C73, 0x2C73 }, { 0x2C76, 0x2C76 }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE3 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69B }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA72F }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA76F }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA791, 0xA791 }, { 0xA793, 0xA793 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xAB53, 0xAB53 }, { 0xAB70, 0xABBF }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_lower (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_print.c�������������������������������������������0000664�0000000�0000000�00000040646�14110572173�0022774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0020, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037F }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F4 }, { 0x0600, 0x061C }, { 0x061E, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x0800, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x08D4, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09FB }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AF1 }, { 0x0AF9, 0x0AF9 }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B77 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BFA }, { 0x0C00, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D01, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4F }, { 0x0D54, 0x0D63 }, { 0x0D66, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF4 }, { 0x0E01, 0x0E3A }, { 0x0E3F, 0x0E5B }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB9 }, { 0x0EBB, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x137C }, { 0x1380, 0x1399 }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1400, 0x169C }, { 0x16A0, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1736 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180E }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A1B }, { 0x1A1E, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA0, 0x1AAD }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B7C }, { 0x1B80, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C88 }, { 0x1CC0, 0x1CC7 }, { 0x1CD0, 0x1CF6 }, { 0x1CF8, 0x1CF9 }, { 0x1D00, 0x1DF5 }, { 0x1DFB, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FC4 }, { 0x1FC6, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FDD, 0x1FEF }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFE }, { 0x2000, 0x2027 }, { 0x202A, 0x2064 }, { 0x2066, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20BE }, { 0x20D0, 0x20F0 }, { 0x2100, 0x218B }, { 0x2190, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CF3 }, { 0x2CF9, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E44 }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3000, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x3190, 0x31BA }, { 0x31C0, 0x31E3 }, { 0x31F0, 0x321E }, { 0x3220, 0x32FE }, { 0x3300, 0x4DB5 }, { 0x4DC0, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA6F7 }, { 0xA700, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C5 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA8FD }, { 0xA900, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAAC2 }, { 0xAADB, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB65 }, { 0xAB70, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBC1 }, { 0xFBD3, 0xFD3F }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFD }, { 0xFE00, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102FB }, { 0x10300, 0x10323 }, { 0x10330, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x1056F, 0x1056F }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1089E }, { 0x108A7, 0x108AF }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x108FB, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10980, 0x109B7 }, { 0x109BC, 0x109CF }, { 0x109D2, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A9F }, { 0x10AC0, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B91 }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11000, 0x1104D }, { 0x11052, 0x1106F }, { 0x1107F, 0x110C1 }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x11143 }, { 0x11150, 0x11176 }, { 0x11180, 0x111CD }, { 0x111D0, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x11200, 0x11211 }, { 0x11213, 0x1123E }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A9 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133C, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x11459 }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x11480, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115DD }, { 0x11600, 0x11644 }, { 0x11650, 0x11659 }, { 0x11660, 0x1166C }, { 0x11680, 0x116B7 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x1171D, 0x1172B }, { 0x11730, 0x1173F }, { 0x118A0, 0x118F2 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C45 }, { 0x11C50, 0x11C6C }, { 0x11C70, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12470, 0x12474 }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A6E, 0x16A6F }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF5 }, { 0x16B00, 0x16B45 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9C, 0x1BCA3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1E8 }, { 0x1D200, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D371 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8D6 }, { 0x1E900, 0x1E94A }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F10C }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F16B }, { 0x1F170, 0x1F1AC }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_print (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_punct.c�������������������������������������������0000664�0000000�0000000�00000031250�14110572173�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x002F }, { 0x003A, 0x0040 }, { 0x005B, 0x0060 }, { 0x007B, 0x007E }, { 0x00A0, 0x00A9 }, { 0x00AB, 0x00B4 }, { 0x00B6, 0x00B9 }, { 0x00BB, 0x00BF }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x02C2, 0x02C5 }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02EB }, { 0x02ED, 0x02ED }, { 0x02EF, 0x0344 }, { 0x0346, 0x036F }, { 0x0375, 0x0375 }, { 0x037E, 0x037E }, { 0x0384, 0x0385 }, { 0x0387, 0x0387 }, { 0x03F6, 0x03F6 }, { 0x0482, 0x0489 }, { 0x055A, 0x055F }, { 0x0589, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05F3, 0x05F4 }, { 0x0600, 0x061C }, { 0x061E, 0x061F }, { 0x064B, 0x065F }, { 0x066A, 0x066D }, { 0x0670, 0x0670 }, { 0x06D4, 0x06D4 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06ED }, { 0x06FD, 0x06FE }, { 0x0700, 0x070D }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x07F6, 0x07F9 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0830, 0x083E }, { 0x0859, 0x085B }, { 0x085E, 0x085E }, { 0x08D4, 0x0903 }, { 0x093A, 0x093C }, { 0x093E, 0x094F }, { 0x0951, 0x0957 }, { 0x0962, 0x0965 }, { 0x0970, 0x0970 }, { 0x0981, 0x0983 }, { 0x09BC, 0x09BC }, { 0x09BE, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CD }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x09F2, 0x09FB }, { 0x0A01, 0x0A03 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0ABC, 0x0ABC }, { 0x0ABE, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0AF0, 0x0AF1 }, { 0x0B01, 0x0B03 }, { 0x0B3C, 0x0B3C }, { 0x0B3E, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B70, 0x0B70 }, { 0x0B72, 0x0B77 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD7, 0x0BD7 }, { 0x0BF0, 0x0BFA }, { 0x0C00, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C78, 0x0C7F }, { 0x0C81, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D03 }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4D }, { 0x0D4F, 0x0D4F }, { 0x0D57, 0x0D5E }, { 0x0D62, 0x0D63 }, { 0x0D70, 0x0D79 }, { 0x0D82, 0x0D83 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF4 }, { 0x0E2F, 0x0E2F }, { 0x0E3F, 0x0E3F }, { 0x0E46, 0x0E46 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F01, 0x0F1F }, { 0x0F2A, 0x0F3F }, { 0x0F71, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x102B, 0x103E }, { 0x104A, 0x104F }, { 0x1056, 0x1059 }, { 0x105E, 0x1060 }, { 0x1062, 0x1064 }, { 0x1067, 0x106D }, { 0x1071, 0x1074 }, { 0x1082, 0x108D }, { 0x108F, 0x108F }, { 0x109A, 0x109F }, { 0x10FB, 0x10FB }, { 0x135D, 0x137C }, { 0x1390, 0x1399 }, { 0x1400, 0x1400 }, { 0x166D, 0x166E }, { 0x169B, 0x169C }, { 0x16EB, 0x16ED }, { 0x1712, 0x1714 }, { 0x1732, 0x1736 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17D6 }, { 0x17D8, 0x17DB }, { 0x17DD, 0x17DD }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180E }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x1945 }, { 0x19DA, 0x19DA }, { 0x19DE, 0x19FF }, { 0x1A17, 0x1A1B }, { 0x1A1E, 0x1A1F }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B5A, 0x1B7C }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAD }, { 0x1BE6, 0x1BF3 }, { 0x1BFC, 0x1BFF }, { 0x1C24, 0x1C37 }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CC0, 0x1CC7 }, { 0x1CD0, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2007, 0x2007 }, { 0x200B, 0x2027 }, { 0x202A, 0x205E }, { 0x2060, 0x2064 }, { 0x2066, 0x2070 }, { 0x2074, 0x207E }, { 0x2080, 0x208E }, { 0x20A0, 0x20BE }, { 0x20D0, 0x20F0 }, { 0x2100, 0x2101 }, { 0x2103, 0x2106 }, { 0x2108, 0x2109 }, { 0x2114, 0x2114 }, { 0x2116, 0x2118 }, { 0x211E, 0x2123 }, { 0x2125, 0x2125 }, { 0x2127, 0x2127 }, { 0x212E, 0x212E }, { 0x213A, 0x213B }, { 0x2140, 0x2144 }, { 0x214A, 0x214D }, { 0x214F, 0x215F }, { 0x2189, 0x218B }, { 0x2190, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x249B }, { 0x24EA, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2CE5, 0x2CEA }, { 0x2CEF, 0x2CF1 }, { 0x2CF9, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2E2E }, { 0x2E30, 0x2E44 }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3001, 0x3004 }, { 0x3008, 0x3020 }, { 0x302A, 0x3030 }, { 0x3036, 0x3037 }, { 0x303D, 0x303F }, { 0x3099, 0x309C }, { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0x3190, 0x319F }, { 0x31C0, 0x31E3 }, { 0x3200, 0x321E }, { 0x3220, 0x32FE }, { 0x3300, 0x33FF }, { 0x4DC0, 0x4DFF }, { 0xA490, 0xA4C6 }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA66F, 0xA67E }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F7 }, { 0xA700, 0xA716 }, { 0xA720, 0xA721 }, { 0xA789, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA82B }, { 0xA830, 0xA839 }, { 0xA874, 0xA877 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C5 }, { 0xA8CE, 0xA8CF }, { 0xA8E0, 0xA8F1 }, { 0xA8F8, 0xA8FA }, { 0xA8FC, 0xA8FC }, { 0xA926, 0xA92F }, { 0xA947, 0xA953 }, { 0xA95F, 0xA95F }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA5C, 0xAA5F }, { 0xAA77, 0xAA79 }, { 0xAA7B, 0xAA7D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADE, 0xAADF }, { 0xAAEB, 0xAAF1 }, { 0xAAF5, 0xAAF6 }, { 0xAB5B, 0xAB5B }, { 0xABE3, 0xABED }, { 0xE000, 0xF8FF }, { 0xFB1E, 0xFB1E }, { 0xFB29, 0xFB29 }, { 0xFBB2, 0xFBC1 }, { 0xFD3E, 0xFD3F }, { 0xFDFC, 0xFDFD }, { 0xFE00, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFF0F }, { 0xFF1A, 0xFF20 }, { 0xFF3B, 0xFF40 }, { 0xFF5B, 0xFF65 }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1013F }, { 0x10175, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x102E0, 0x102FB }, { 0x10320, 0x10323 }, { 0x10376, 0x1037A }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x1056F, 0x1056F }, { 0x10857, 0x1085F }, { 0x10877, 0x1087F }, { 0x108A7, 0x108AF }, { 0x108FB, 0x108FF }, { 0x10916, 0x1091B }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x109BC, 0x109BD }, { 0x109C0, 0x109CF }, { 0x109D2, 0x109FF }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A7D, 0x10A7F }, { 0x10A9D, 0x10A9F }, { 0x10AC8, 0x10AC8 }, { 0x10AE5, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B39, 0x10B3F }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11000, 0x11002 }, { 0x11038, 0x1104D }, { 0x11052, 0x11065 }, { 0x1107F, 0x11082 }, { 0x110B0, 0x110C1 }, { 0x11100, 0x11102 }, { 0x11127, 0x11134 }, { 0x11140, 0x11143 }, { 0x11173, 0x11175 }, { 0x11180, 0x11182 }, { 0x111B3, 0x111C0 }, { 0x111C5, 0x111CD }, { 0x111DB, 0x111DB }, { 0x111DD, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x1122C, 0x1123E }, { 0x112A9, 0x112A9 }, { 0x112DF, 0x112EA }, { 0x11300, 0x11303 }, { 0x1133C, 0x1133C }, { 0x1133E, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11435, 0x11446 }, { 0x1144B, 0x1144F }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x114B0, 0x114C3 }, { 0x114C6, 0x114C6 }, { 0x115AF, 0x115B5 }, { 0x115B8, 0x115D7 }, { 0x115DC, 0x115DD }, { 0x11630, 0x11643 }, { 0x11660, 0x1166C }, { 0x116AB, 0x116B7 }, { 0x1171D, 0x1172B }, { 0x1173A, 0x1173F }, { 0x118EA, 0x118F2 }, { 0x11C2F, 0x11C36 }, { 0x11C38, 0x11C3F }, { 0x11C41, 0x11C45 }, { 0x11C5A, 0x11C6C }, { 0x11C70, 0x11C71 }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12470, 0x12474 }, { 0x16A6E, 0x16A6F }, { 0x16AF0, 0x16AF5 }, { 0x16B30, 0x16B3F }, { 0x16B44, 0x16B45 }, { 0x16B5B, 0x16B61 }, { 0x16F51, 0x16F7E }, { 0x16F8F, 0x16F92 }, { 0x1BC9C, 0x1BCA3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1E8 }, { 0x1D200, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D371 }, { 0x1D6C1, 0x1D6C1 }, { 0x1D6DB, 0x1D6DB }, { 0x1D6FB, 0x1D6FB }, { 0x1D715, 0x1D715 }, { 0x1D735, 0x1D735 }, { 0x1D74F, 0x1D74F }, { 0x1D76F, 0x1D76F }, { 0x1D789, 0x1D789 }, { 0x1D7A9, 0x1D7A9 }, { 0x1D7C3, 0x1D7C3 }, { 0x1D800, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8C7, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0x1E95E, 0x1E95F }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F10C }, { 0x1F12D, 0x1F12E }, { 0x1F14A, 0x1F14F }, { 0x1F16A, 0x1F16B }, { 0x1F18B, 0x1F1A4 }, { 0x1F1A6, 0x1F1AC }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_punct (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_space.c�������������������������������������������0000664�0000000�0000000�00000002102�14110572173�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x2028, 0x2029 }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_space (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_upper.c�������������������������������������������0000664�0000000�0000000�00000035334�14110572173�0022771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DE }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x014A, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C5 }, { 0x01C7, 0x01C8 }, { 0x01CA, 0x01CB }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F2 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03CF, 0x03CF }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F4, 0x03F4 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1F88, 0x1F8F }, { 0x1F98, 0x1F9F }, { 0x1FA8, 0x1FAF }, { 0x1FB8, 0x1FBC }, { 0x1FC8, 0x1FCC }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF8, 0x1FFC }, { 0x2126, 0x2126 }, { 0x212A, 0x212B }, { 0x2132, 0x2132 }, { 0x2160, 0x216F }, { 0x2183, 0x2183 }, { 0x24B6, 0x24CF }, { 0x2C00, 0x2C2E }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x1E900, 0x1E921 } #define PREDICATE(c) uc_is_upper (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-ctype_xdigit.c������������������������������������������0000664�0000000�0000000�00000001713�14110572173�0023120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x0046 }, { 0x0061, 0x0066 } #define PREDICATE(c) uc_is_xdigit (c) #include "test-predicate-part2.h" �����������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-decdigit.c����������������������������������������������0000664�0000000�0000000�00000002446�14110572173�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" static const struct { unsigned int ch; int value; } mapping[] = { #include "test-decdigit.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_decimal_value (c) == -1); /* Here c = mapping[i].ch. */ ASSERT (uc_decimal_value (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (uc_decimal_value (c) == -1); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-decdigit.h����������������������������������������������0000664�0000000�0000000�00000027506�14110572173�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decimal digit values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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/>. */ { 0x0030, 0 }, { 0x0031, 1 }, { 0x0032, 2 }, { 0x0033, 3 }, { 0x0034, 4 }, { 0x0035, 5 }, { 0x0036, 6 }, { 0x0037, 7 }, { 0x0038, 8 }, { 0x0039, 9 }, { 0x0660, 0 }, { 0x0661, 1 }, { 0x0662, 2 }, { 0x0663, 3 }, { 0x0664, 4 }, { 0x0665, 5 }, { 0x0666, 6 }, { 0x0667, 7 }, { 0x0668, 8 }, { 0x0669, 9 }, { 0x06F0, 0 }, { 0x06F1, 1 }, { 0x06F2, 2 }, { 0x06F3, 3 }, { 0x06F4, 4 }, { 0x06F5, 5 }, { 0x06F6, 6 }, { 0x06F7, 7 }, { 0x06F8, 8 }, { 0x06F9, 9 }, { 0x07C0, 0 }, { 0x07C1, 1 }, { 0x07C2, 2 }, { 0x07C3, 3 }, { 0x07C4, 4 }, { 0x07C5, 5 }, { 0x07C6, 6 }, { 0x07C7, 7 }, { 0x07C8, 8 }, { 0x07C9, 9 }, { 0x0966, 0 }, { 0x0967, 1 }, { 0x0968, 2 }, { 0x0969, 3 }, { 0x096A, 4 }, { 0x096B, 5 }, { 0x096C, 6 }, { 0x096D, 7 }, { 0x096E, 8 }, { 0x096F, 9 }, { 0x09E6, 0 }, { 0x09E7, 1 }, { 0x09E8, 2 }, { 0x09E9, 3 }, { 0x09EA, 4 }, { 0x09EB, 5 }, { 0x09EC, 6 }, { 0x09ED, 7 }, { 0x09EE, 8 }, { 0x09EF, 9 }, { 0x0A66, 0 }, { 0x0A67, 1 }, { 0x0A68, 2 }, { 0x0A69, 3 }, { 0x0A6A, 4 }, { 0x0A6B, 5 }, { 0x0A6C, 6 }, { 0x0A6D, 7 }, { 0x0A6E, 8 }, { 0x0A6F, 9 }, { 0x0AE6, 0 }, { 0x0AE7, 1 }, { 0x0AE8, 2 }, { 0x0AE9, 3 }, { 0x0AEA, 4 }, { 0x0AEB, 5 }, { 0x0AEC, 6 }, { 0x0AED, 7 }, { 0x0AEE, 8 }, { 0x0AEF, 9 }, { 0x0B66, 0 }, { 0x0B67, 1 }, { 0x0B68, 2 }, { 0x0B69, 3 }, { 0x0B6A, 4 }, { 0x0B6B, 5 }, { 0x0B6C, 6 }, { 0x0B6D, 7 }, { 0x0B6E, 8 }, { 0x0B6F, 9 }, { 0x0BE6, 0 }, { 0x0BE7, 1 }, { 0x0BE8, 2 }, { 0x0BE9, 3 }, { 0x0BEA, 4 }, { 0x0BEB, 5 }, { 0x0BEC, 6 }, { 0x0BED, 7 }, { 0x0BEE, 8 }, { 0x0BEF, 9 }, { 0x0C66, 0 }, { 0x0C67, 1 }, { 0x0C68, 2 }, { 0x0C69, 3 }, { 0x0C6A, 4 }, { 0x0C6B, 5 }, { 0x0C6C, 6 }, { 0x0C6D, 7 }, { 0x0C6E, 8 }, { 0x0C6F, 9 }, { 0x0CE6, 0 }, { 0x0CE7, 1 }, { 0x0CE8, 2 }, { 0x0CE9, 3 }, { 0x0CEA, 4 }, { 0x0CEB, 5 }, { 0x0CEC, 6 }, { 0x0CED, 7 }, { 0x0CEE, 8 }, { 0x0CEF, 9 }, { 0x0D66, 0 }, { 0x0D67, 1 }, { 0x0D68, 2 }, { 0x0D69, 3 }, { 0x0D6A, 4 }, { 0x0D6B, 5 }, { 0x0D6C, 6 }, { 0x0D6D, 7 }, { 0x0D6E, 8 }, { 0x0D6F, 9 }, { 0x0DE6, 0 }, { 0x0DE7, 1 }, { 0x0DE8, 2 }, { 0x0DE9, 3 }, { 0x0DEA, 4 }, { 0x0DEB, 5 }, { 0x0DEC, 6 }, { 0x0DED, 7 }, { 0x0DEE, 8 }, { 0x0DEF, 9 }, { 0x0E50, 0 }, { 0x0E51, 1 }, { 0x0E52, 2 }, { 0x0E53, 3 }, { 0x0E54, 4 }, { 0x0E55, 5 }, { 0x0E56, 6 }, { 0x0E57, 7 }, { 0x0E58, 8 }, { 0x0E59, 9 }, { 0x0ED0, 0 }, { 0x0ED1, 1 }, { 0x0ED2, 2 }, { 0x0ED3, 3 }, { 0x0ED4, 4 }, { 0x0ED5, 5 }, { 0x0ED6, 6 }, { 0x0ED7, 7 }, { 0x0ED8, 8 }, { 0x0ED9, 9 }, { 0x0F20, 0 }, { 0x0F21, 1 }, { 0x0F22, 2 }, { 0x0F23, 3 }, { 0x0F24, 4 }, { 0x0F25, 5 }, { 0x0F26, 6 }, { 0x0F27, 7 }, { 0x0F28, 8 }, { 0x0F29, 9 }, { 0x1040, 0 }, { 0x1041, 1 }, { 0x1042, 2 }, { 0x1043, 3 }, { 0x1044, 4 }, { 0x1045, 5 }, { 0x1046, 6 }, { 0x1047, 7 }, { 0x1048, 8 }, { 0x1049, 9 }, { 0x1090, 0 }, { 0x1091, 1 }, { 0x1092, 2 }, { 0x1093, 3 }, { 0x1094, 4 }, { 0x1095, 5 }, { 0x1096, 6 }, { 0x1097, 7 }, { 0x1098, 8 }, { 0x1099, 9 }, { 0x17E0, 0 }, { 0x17E1, 1 }, { 0x17E2, 2 }, { 0x17E3, 3 }, { 0x17E4, 4 }, { 0x17E5, 5 }, { 0x17E6, 6 }, { 0x17E7, 7 }, { 0x17E8, 8 }, { 0x17E9, 9 }, { 0x1810, 0 }, { 0x1811, 1 }, { 0x1812, 2 }, { 0x1813, 3 }, { 0x1814, 4 }, { 0x1815, 5 }, { 0x1816, 6 }, { 0x1817, 7 }, { 0x1818, 8 }, { 0x1819, 9 }, { 0x1946, 0 }, { 0x1947, 1 }, { 0x1948, 2 }, { 0x1949, 3 }, { 0x194A, 4 }, { 0x194B, 5 }, { 0x194C, 6 }, { 0x194D, 7 }, { 0x194E, 8 }, { 0x194F, 9 }, { 0x19D0, 0 }, { 0x19D1, 1 }, { 0x19D2, 2 }, { 0x19D3, 3 }, { 0x19D4, 4 }, { 0x19D5, 5 }, { 0x19D6, 6 }, { 0x19D7, 7 }, { 0x19D8, 8 }, { 0x19D9, 9 }, { 0x1A80, 0 }, { 0x1A81, 1 }, { 0x1A82, 2 }, { 0x1A83, 3 }, { 0x1A84, 4 }, { 0x1A85, 5 }, { 0x1A86, 6 }, { 0x1A87, 7 }, { 0x1A88, 8 }, { 0x1A89, 9 }, { 0x1A90, 0 }, { 0x1A91, 1 }, { 0x1A92, 2 }, { 0x1A93, 3 }, { 0x1A94, 4 }, { 0x1A95, 5 }, { 0x1A96, 6 }, { 0x1A97, 7 }, { 0x1A98, 8 }, { 0x1A99, 9 }, { 0x1B50, 0 }, { 0x1B51, 1 }, { 0x1B52, 2 }, { 0x1B53, 3 }, { 0x1B54, 4 }, { 0x1B55, 5 }, { 0x1B56, 6 }, { 0x1B57, 7 }, { 0x1B58, 8 }, { 0x1B59, 9 }, { 0x1BB0, 0 }, { 0x1BB1, 1 }, { 0x1BB2, 2 }, { 0x1BB3, 3 }, { 0x1BB4, 4 }, { 0x1BB5, 5 }, { 0x1BB6, 6 }, { 0x1BB7, 7 }, { 0x1BB8, 8 }, { 0x1BB9, 9 }, { 0x1C40, 0 }, { 0x1C41, 1 }, { 0x1C42, 2 }, { 0x1C43, 3 }, { 0x1C44, 4 }, { 0x1C45, 5 }, { 0x1C46, 6 }, { 0x1C47, 7 }, { 0x1C48, 8 }, { 0x1C49, 9 }, { 0x1C50, 0 }, { 0x1C51, 1 }, { 0x1C52, 2 }, { 0x1C53, 3 }, { 0x1C54, 4 }, { 0x1C55, 5 }, { 0x1C56, 6 }, { 0x1C57, 7 }, { 0x1C58, 8 }, { 0x1C59, 9 }, { 0xA620, 0 }, { 0xA621, 1 }, { 0xA622, 2 }, { 0xA623, 3 }, { 0xA624, 4 }, { 0xA625, 5 }, { 0xA626, 6 }, { 0xA627, 7 }, { 0xA628, 8 }, { 0xA629, 9 }, { 0xA8D0, 0 }, { 0xA8D1, 1 }, { 0xA8D2, 2 }, { 0xA8D3, 3 }, { 0xA8D4, 4 }, { 0xA8D5, 5 }, { 0xA8D6, 6 }, { 0xA8D7, 7 }, { 0xA8D8, 8 }, { 0xA8D9, 9 }, { 0xA900, 0 }, { 0xA901, 1 }, { 0xA902, 2 }, { 0xA903, 3 }, { 0xA904, 4 }, { 0xA905, 5 }, { 0xA906, 6 }, { 0xA907, 7 }, { 0xA908, 8 }, { 0xA909, 9 }, { 0xA9D0, 0 }, { 0xA9D1, 1 }, { 0xA9D2, 2 }, { 0xA9D3, 3 }, { 0xA9D4, 4 }, { 0xA9D5, 5 }, { 0xA9D6, 6 }, { 0xA9D7, 7 }, { 0xA9D8, 8 }, { 0xA9D9, 9 }, { 0xA9F0, 0 }, { 0xA9F1, 1 }, { 0xA9F2, 2 }, { 0xA9F3, 3 }, { 0xA9F4, 4 }, { 0xA9F5, 5 }, { 0xA9F6, 6 }, { 0xA9F7, 7 }, { 0xA9F8, 8 }, { 0xA9F9, 9 }, { 0xAA50, 0 }, { 0xAA51, 1 }, { 0xAA52, 2 }, { 0xAA53, 3 }, { 0xAA54, 4 }, { 0xAA55, 5 }, { 0xAA56, 6 }, { 0xAA57, 7 }, { 0xAA58, 8 }, { 0xAA59, 9 }, { 0xABF0, 0 }, { 0xABF1, 1 }, { 0xABF2, 2 }, { 0xABF3, 3 }, { 0xABF4, 4 }, { 0xABF5, 5 }, { 0xABF6, 6 }, { 0xABF7, 7 }, { 0xABF8, 8 }, { 0xABF9, 9 }, { 0xFF10, 0 }, { 0xFF11, 1 }, { 0xFF12, 2 }, { 0xFF13, 3 }, { 0xFF14, 4 }, { 0xFF15, 5 }, { 0xFF16, 6 }, { 0xFF17, 7 }, { 0xFF18, 8 }, { 0xFF19, 9 }, { 0x104A0, 0 }, { 0x104A1, 1 }, { 0x104A2, 2 }, { 0x104A3, 3 }, { 0x104A4, 4 }, { 0x104A5, 5 }, { 0x104A6, 6 }, { 0x104A7, 7 }, { 0x104A8, 8 }, { 0x104A9, 9 }, { 0x11066, 0 }, { 0x11067, 1 }, { 0x11068, 2 }, { 0x11069, 3 }, { 0x1106A, 4 }, { 0x1106B, 5 }, { 0x1106C, 6 }, { 0x1106D, 7 }, { 0x1106E, 8 }, { 0x1106F, 9 }, { 0x110F0, 0 }, { 0x110F1, 1 }, { 0x110F2, 2 }, { 0x110F3, 3 }, { 0x110F4, 4 }, { 0x110F5, 5 }, { 0x110F6, 6 }, { 0x110F7, 7 }, { 0x110F8, 8 }, { 0x110F9, 9 }, { 0x11136, 0 }, { 0x11137, 1 }, { 0x11138, 2 }, { 0x11139, 3 }, { 0x1113A, 4 }, { 0x1113B, 5 }, { 0x1113C, 6 }, { 0x1113D, 7 }, { 0x1113E, 8 }, { 0x1113F, 9 }, { 0x111D0, 0 }, { 0x111D1, 1 }, { 0x111D2, 2 }, { 0x111D3, 3 }, { 0x111D4, 4 }, { 0x111D5, 5 }, { 0x111D6, 6 }, { 0x111D7, 7 }, { 0x111D8, 8 }, { 0x111D9, 9 }, { 0x112F0, 0 }, { 0x112F1, 1 }, { 0x112F2, 2 }, { 0x112F3, 3 }, { 0x112F4, 4 }, { 0x112F5, 5 }, { 0x112F6, 6 }, { 0x112F7, 7 }, { 0x112F8, 8 }, { 0x112F9, 9 }, { 0x11450, 0 }, { 0x11451, 1 }, { 0x11452, 2 }, { 0x11453, 3 }, { 0x11454, 4 }, { 0x11455, 5 }, { 0x11456, 6 }, { 0x11457, 7 }, { 0x11458, 8 }, { 0x11459, 9 }, { 0x114D0, 0 }, { 0x114D1, 1 }, { 0x114D2, 2 }, { 0x114D3, 3 }, { 0x114D4, 4 }, { 0x114D5, 5 }, { 0x114D6, 6 }, { 0x114D7, 7 }, { 0x114D8, 8 }, { 0x114D9, 9 }, { 0x11650, 0 }, { 0x11651, 1 }, { 0x11652, 2 }, { 0x11653, 3 }, { 0x11654, 4 }, { 0x11655, 5 }, { 0x11656, 6 }, { 0x11657, 7 }, { 0x11658, 8 }, { 0x11659, 9 }, { 0x116C0, 0 }, { 0x116C1, 1 }, { 0x116C2, 2 }, { 0x116C3, 3 }, { 0x116C4, 4 }, { 0x116C5, 5 }, { 0x116C6, 6 }, { 0x116C7, 7 }, { 0x116C8, 8 }, { 0x116C9, 9 }, { 0x11730, 0 }, { 0x11731, 1 }, { 0x11732, 2 }, { 0x11733, 3 }, { 0x11734, 4 }, { 0x11735, 5 }, { 0x11736, 6 }, { 0x11737, 7 }, { 0x11738, 8 }, { 0x11739, 9 }, { 0x118E0, 0 }, { 0x118E1, 1 }, { 0x118E2, 2 }, { 0x118E3, 3 }, { 0x118E4, 4 }, { 0x118E5, 5 }, { 0x118E6, 6 }, { 0x118E7, 7 }, { 0x118E8, 8 }, { 0x118E9, 9 }, { 0x11C50, 0 }, { 0x11C51, 1 }, { 0x11C52, 2 }, { 0x11C53, 3 }, { 0x11C54, 4 }, { 0x11C55, 5 }, { 0x11C56, 6 }, { 0x11C57, 7 }, { 0x11C58, 8 }, { 0x11C59, 9 }, { 0x16A60, 0 }, { 0x16A61, 1 }, { 0x16A62, 2 }, { 0x16A63, 3 }, { 0x16A64, 4 }, { 0x16A65, 5 }, { 0x16A66, 6 }, { 0x16A67, 7 }, { 0x16A68, 8 }, { 0x16A69, 9 }, { 0x16B50, 0 }, { 0x16B51, 1 }, { 0x16B52, 2 }, { 0x16B53, 3 }, { 0x16B54, 4 }, { 0x16B55, 5 }, { 0x16B56, 6 }, { 0x16B57, 7 }, { 0x16B58, 8 }, { 0x16B59, 9 }, { 0x1D7CE, 0 }, { 0x1D7CF, 1 }, { 0x1D7D0, 2 }, { 0x1D7D1, 3 }, { 0x1D7D2, 4 }, { 0x1D7D3, 5 }, { 0x1D7D4, 6 }, { 0x1D7D5, 7 }, { 0x1D7D6, 8 }, { 0x1D7D7, 9 }, { 0x1D7D8, 0 }, { 0x1D7D9, 1 }, { 0x1D7DA, 2 }, { 0x1D7DB, 3 }, { 0x1D7DC, 4 }, { 0x1D7DD, 5 }, { 0x1D7DE, 6 }, { 0x1D7DF, 7 }, { 0x1D7E0, 8 }, { 0x1D7E1, 9 }, { 0x1D7E2, 0 }, { 0x1D7E3, 1 }, { 0x1D7E4, 2 }, { 0x1D7E5, 3 }, { 0x1D7E6, 4 }, { 0x1D7E7, 5 }, { 0x1D7E8, 6 }, { 0x1D7E9, 7 }, { 0x1D7EA, 8 }, { 0x1D7EB, 9 }, { 0x1D7EC, 0 }, { 0x1D7ED, 1 }, { 0x1D7EE, 2 }, { 0x1D7EF, 3 }, { 0x1D7F0, 4 }, { 0x1D7F1, 5 }, { 0x1D7F2, 6 }, { 0x1D7F3, 7 }, { 0x1D7F4, 8 }, { 0x1D7F5, 9 }, { 0x1D7F6, 0 }, { 0x1D7F7, 1 }, { 0x1D7F8, 2 }, { 0x1D7F9, 3 }, { 0x1D7FA, 4 }, { 0x1D7FB, 5 }, { 0x1D7FC, 6 }, { 0x1D7FD, 7 }, { 0x1D7FE, 8 }, { 0x1D7FF, 9 }, { 0x1E950, 0 }, { 0x1E951, 1 }, { 0x1E952, 2 }, { 0x1E953, 3 }, { 0x1E954, 4 }, { 0x1E955, 5 }, { 0x1E956, 6 }, { 0x1E957, 7 }, { 0x1E958, 8 }, { 0x1E959, 9 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-digit.c�������������������������������������������������0000664�0000000�0000000�00000002435�14110572173�0021526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" static const struct { unsigned int ch; int value; } mapping[] = { #include "test-digit.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_digit_value (c) == -1); /* Here c = mapping[i].ch. */ ASSERT (uc_digit_value (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (uc_digit_value (c) == -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-digit.h�������������������������������������������������0000664�0000000�0000000�00000034337�14110572173�0021541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Digit values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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/>. */ { 0x0030, 0 }, { 0x0031, 1 }, { 0x0032, 2 }, { 0x0033, 3 }, { 0x0034, 4 }, { 0x0035, 5 }, { 0x0036, 6 }, { 0x0037, 7 }, { 0x0038, 8 }, { 0x0039, 9 }, { 0x00B2, 2 }, { 0x00B3, 3 }, { 0x00B9, 1 }, { 0x0660, 0 }, { 0x0661, 1 }, { 0x0662, 2 }, { 0x0663, 3 }, { 0x0664, 4 }, { 0x0665, 5 }, { 0x0666, 6 }, { 0x0667, 7 }, { 0x0668, 8 }, { 0x0669, 9 }, { 0x06F0, 0 }, { 0x06F1, 1 }, { 0x06F2, 2 }, { 0x06F3, 3 }, { 0x06F4, 4 }, { 0x06F5, 5 }, { 0x06F6, 6 }, { 0x06F7, 7 }, { 0x06F8, 8 }, { 0x06F9, 9 }, { 0x07C0, 0 }, { 0x07C1, 1 }, { 0x07C2, 2 }, { 0x07C3, 3 }, { 0x07C4, 4 }, { 0x07C5, 5 }, { 0x07C6, 6 }, { 0x07C7, 7 }, { 0x07C8, 8 }, { 0x07C9, 9 }, { 0x0966, 0 }, { 0x0967, 1 }, { 0x0968, 2 }, { 0x0969, 3 }, { 0x096A, 4 }, { 0x096B, 5 }, { 0x096C, 6 }, { 0x096D, 7 }, { 0x096E, 8 }, { 0x096F, 9 }, { 0x09E6, 0 }, { 0x09E7, 1 }, { 0x09E8, 2 }, { 0x09E9, 3 }, { 0x09EA, 4 }, { 0x09EB, 5 }, { 0x09EC, 6 }, { 0x09ED, 7 }, { 0x09EE, 8 }, { 0x09EF, 9 }, { 0x0A66, 0 }, { 0x0A67, 1 }, { 0x0A68, 2 }, { 0x0A69, 3 }, { 0x0A6A, 4 }, { 0x0A6B, 5 }, { 0x0A6C, 6 }, { 0x0A6D, 7 }, { 0x0A6E, 8 }, { 0x0A6F, 9 }, { 0x0AE6, 0 }, { 0x0AE7, 1 }, { 0x0AE8, 2 }, { 0x0AE9, 3 }, { 0x0AEA, 4 }, { 0x0AEB, 5 }, { 0x0AEC, 6 }, { 0x0AED, 7 }, { 0x0AEE, 8 }, { 0x0AEF, 9 }, { 0x0B66, 0 }, { 0x0B67, 1 }, { 0x0B68, 2 }, { 0x0B69, 3 }, { 0x0B6A, 4 }, { 0x0B6B, 5 }, { 0x0B6C, 6 }, { 0x0B6D, 7 }, { 0x0B6E, 8 }, { 0x0B6F, 9 }, { 0x0BE6, 0 }, { 0x0BE7, 1 }, { 0x0BE8, 2 }, { 0x0BE9, 3 }, { 0x0BEA, 4 }, { 0x0BEB, 5 }, { 0x0BEC, 6 }, { 0x0BED, 7 }, { 0x0BEE, 8 }, { 0x0BEF, 9 }, { 0x0C66, 0 }, { 0x0C67, 1 }, { 0x0C68, 2 }, { 0x0C69, 3 }, { 0x0C6A, 4 }, { 0x0C6B, 5 }, { 0x0C6C, 6 }, { 0x0C6D, 7 }, { 0x0C6E, 8 }, { 0x0C6F, 9 }, { 0x0CE6, 0 }, { 0x0CE7, 1 }, { 0x0CE8, 2 }, { 0x0CE9, 3 }, { 0x0CEA, 4 }, { 0x0CEB, 5 }, { 0x0CEC, 6 }, { 0x0CED, 7 }, { 0x0CEE, 8 }, { 0x0CEF, 9 }, { 0x0D66, 0 }, { 0x0D67, 1 }, { 0x0D68, 2 }, { 0x0D69, 3 }, { 0x0D6A, 4 }, { 0x0D6B, 5 }, { 0x0D6C, 6 }, { 0x0D6D, 7 }, { 0x0D6E, 8 }, { 0x0D6F, 9 }, { 0x0DE6, 0 }, { 0x0DE7, 1 }, { 0x0DE8, 2 }, { 0x0DE9, 3 }, { 0x0DEA, 4 }, { 0x0DEB, 5 }, { 0x0DEC, 6 }, { 0x0DED, 7 }, { 0x0DEE, 8 }, { 0x0DEF, 9 }, { 0x0E50, 0 }, { 0x0E51, 1 }, { 0x0E52, 2 }, { 0x0E53, 3 }, { 0x0E54, 4 }, { 0x0E55, 5 }, { 0x0E56, 6 }, { 0x0E57, 7 }, { 0x0E58, 8 }, { 0x0E59, 9 }, { 0x0ED0, 0 }, { 0x0ED1, 1 }, { 0x0ED2, 2 }, { 0x0ED3, 3 }, { 0x0ED4, 4 }, { 0x0ED5, 5 }, { 0x0ED6, 6 }, { 0x0ED7, 7 }, { 0x0ED8, 8 }, { 0x0ED9, 9 }, { 0x0F20, 0 }, { 0x0F21, 1 }, { 0x0F22, 2 }, { 0x0F23, 3 }, { 0x0F24, 4 }, { 0x0F25, 5 }, { 0x0F26, 6 }, { 0x0F27, 7 }, { 0x0F28, 8 }, { 0x0F29, 9 }, { 0x1040, 0 }, { 0x1041, 1 }, { 0x1042, 2 }, { 0x1043, 3 }, { 0x1044, 4 }, { 0x1045, 5 }, { 0x1046, 6 }, { 0x1047, 7 }, { 0x1048, 8 }, { 0x1049, 9 }, { 0x1090, 0 }, { 0x1091, 1 }, { 0x1092, 2 }, { 0x1093, 3 }, { 0x1094, 4 }, { 0x1095, 5 }, { 0x1096, 6 }, { 0x1097, 7 }, { 0x1098, 8 }, { 0x1099, 9 }, { 0x1369, 1 }, { 0x136A, 2 }, { 0x136B, 3 }, { 0x136C, 4 }, { 0x136D, 5 }, { 0x136E, 6 }, { 0x136F, 7 }, { 0x1370, 8 }, { 0x1371, 9 }, { 0x17E0, 0 }, { 0x17E1, 1 }, { 0x17E2, 2 }, { 0x17E3, 3 }, { 0x17E4, 4 }, { 0x17E5, 5 }, { 0x17E6, 6 }, { 0x17E7, 7 }, { 0x17E8, 8 }, { 0x17E9, 9 }, { 0x1810, 0 }, { 0x1811, 1 }, { 0x1812, 2 }, { 0x1813, 3 }, { 0x1814, 4 }, { 0x1815, 5 }, { 0x1816, 6 }, { 0x1817, 7 }, { 0x1818, 8 }, { 0x1819, 9 }, { 0x1946, 0 }, { 0x1947, 1 }, { 0x1948, 2 }, { 0x1949, 3 }, { 0x194A, 4 }, { 0x194B, 5 }, { 0x194C, 6 }, { 0x194D, 7 }, { 0x194E, 8 }, { 0x194F, 9 }, { 0x19D0, 0 }, { 0x19D1, 1 }, { 0x19D2, 2 }, { 0x19D3, 3 }, { 0x19D4, 4 }, { 0x19D5, 5 }, { 0x19D6, 6 }, { 0x19D7, 7 }, { 0x19D8, 8 }, { 0x19D9, 9 }, { 0x19DA, 1 }, { 0x1A80, 0 }, { 0x1A81, 1 }, { 0x1A82, 2 }, { 0x1A83, 3 }, { 0x1A84, 4 }, { 0x1A85, 5 }, { 0x1A86, 6 }, { 0x1A87, 7 }, { 0x1A88, 8 }, { 0x1A89, 9 }, { 0x1A90, 0 }, { 0x1A91, 1 }, { 0x1A92, 2 }, { 0x1A93, 3 }, { 0x1A94, 4 }, { 0x1A95, 5 }, { 0x1A96, 6 }, { 0x1A97, 7 }, { 0x1A98, 8 }, { 0x1A99, 9 }, { 0x1B50, 0 }, { 0x1B51, 1 }, { 0x1B52, 2 }, { 0x1B53, 3 }, { 0x1B54, 4 }, { 0x1B55, 5 }, { 0x1B56, 6 }, { 0x1B57, 7 }, { 0x1B58, 8 }, { 0x1B59, 9 }, { 0x1BB0, 0 }, { 0x1BB1, 1 }, { 0x1BB2, 2 }, { 0x1BB3, 3 }, { 0x1BB4, 4 }, { 0x1BB5, 5 }, { 0x1BB6, 6 }, { 0x1BB7, 7 }, { 0x1BB8, 8 }, { 0x1BB9, 9 }, { 0x1C40, 0 }, { 0x1C41, 1 }, { 0x1C42, 2 }, { 0x1C43, 3 }, { 0x1C44, 4 }, { 0x1C45, 5 }, { 0x1C46, 6 }, { 0x1C47, 7 }, { 0x1C48, 8 }, { 0x1C49, 9 }, { 0x1C50, 0 }, { 0x1C51, 1 }, { 0x1C52, 2 }, { 0x1C53, 3 }, { 0x1C54, 4 }, { 0x1C55, 5 }, { 0x1C56, 6 }, { 0x1C57, 7 }, { 0x1C58, 8 }, { 0x1C59, 9 }, { 0x2070, 0 }, { 0x2074, 4 }, { 0x2075, 5 }, { 0x2076, 6 }, { 0x2077, 7 }, { 0x2078, 8 }, { 0x2079, 9 }, { 0x2080, 0 }, { 0x2081, 1 }, { 0x2082, 2 }, { 0x2083, 3 }, { 0x2084, 4 }, { 0x2085, 5 }, { 0x2086, 6 }, { 0x2087, 7 }, { 0x2088, 8 }, { 0x2089, 9 }, { 0x2460, 1 }, { 0x2461, 2 }, { 0x2462, 3 }, { 0x2463, 4 }, { 0x2464, 5 }, { 0x2465, 6 }, { 0x2466, 7 }, { 0x2467, 8 }, { 0x2468, 9 }, { 0x2474, 1 }, { 0x2475, 2 }, { 0x2476, 3 }, { 0x2477, 4 }, { 0x2478, 5 }, { 0x2479, 6 }, { 0x247A, 7 }, { 0x247B, 8 }, { 0x247C, 9 }, { 0x2488, 1 }, { 0x2489, 2 }, { 0x248A, 3 }, { 0x248B, 4 }, { 0x248C, 5 }, { 0x248D, 6 }, { 0x248E, 7 }, { 0x248F, 8 }, { 0x2490, 9 }, { 0x24EA, 0 }, { 0x24F5, 1 }, { 0x24F6, 2 }, { 0x24F7, 3 }, { 0x24F8, 4 }, { 0x24F9, 5 }, { 0x24FA, 6 }, { 0x24FB, 7 }, { 0x24FC, 8 }, { 0x24FD, 9 }, { 0x24FF, 0 }, { 0x2776, 1 }, { 0x2777, 2 }, { 0x2778, 3 }, { 0x2779, 4 }, { 0x277A, 5 }, { 0x277B, 6 }, { 0x277C, 7 }, { 0x277D, 8 }, { 0x277E, 9 }, { 0x2780, 1 }, { 0x2781, 2 }, { 0x2782, 3 }, { 0x2783, 4 }, { 0x2784, 5 }, { 0x2785, 6 }, { 0x2786, 7 }, { 0x2787, 8 }, { 0x2788, 9 }, { 0x278A, 1 }, { 0x278B, 2 }, { 0x278C, 3 }, { 0x278D, 4 }, { 0x278E, 5 }, { 0x278F, 6 }, { 0x2790, 7 }, { 0x2791, 8 }, { 0x2792, 9 }, { 0xA620, 0 }, { 0xA621, 1 }, { 0xA622, 2 }, { 0xA623, 3 }, { 0xA624, 4 }, { 0xA625, 5 }, { 0xA626, 6 }, { 0xA627, 7 }, { 0xA628, 8 }, { 0xA629, 9 }, { 0xA8D0, 0 }, { 0xA8D1, 1 }, { 0xA8D2, 2 }, { 0xA8D3, 3 }, { 0xA8D4, 4 }, { 0xA8D5, 5 }, { 0xA8D6, 6 }, { 0xA8D7, 7 }, { 0xA8D8, 8 }, { 0xA8D9, 9 }, { 0xA900, 0 }, { 0xA901, 1 }, { 0xA902, 2 }, { 0xA903, 3 }, { 0xA904, 4 }, { 0xA905, 5 }, { 0xA906, 6 }, { 0xA907, 7 }, { 0xA908, 8 }, { 0xA909, 9 }, { 0xA9D0, 0 }, { 0xA9D1, 1 }, { 0xA9D2, 2 }, { 0xA9D3, 3 }, { 0xA9D4, 4 }, { 0xA9D5, 5 }, { 0xA9D6, 6 }, { 0xA9D7, 7 }, { 0xA9D8, 8 }, { 0xA9D9, 9 }, { 0xA9F0, 0 }, { 0xA9F1, 1 }, { 0xA9F2, 2 }, { 0xA9F3, 3 }, { 0xA9F4, 4 }, { 0xA9F5, 5 }, { 0xA9F6, 6 }, { 0xA9F7, 7 }, { 0xA9F8, 8 }, { 0xA9F9, 9 }, { 0xAA50, 0 }, { 0xAA51, 1 }, { 0xAA52, 2 }, { 0xAA53, 3 }, { 0xAA54, 4 }, { 0xAA55, 5 }, { 0xAA56, 6 }, { 0xAA57, 7 }, { 0xAA58, 8 }, { 0xAA59, 9 }, { 0xABF0, 0 }, { 0xABF1, 1 }, { 0xABF2, 2 }, { 0xABF3, 3 }, { 0xABF4, 4 }, { 0xABF5, 5 }, { 0xABF6, 6 }, { 0xABF7, 7 }, { 0xABF8, 8 }, { 0xABF9, 9 }, { 0xFF10, 0 }, { 0xFF11, 1 }, { 0xFF12, 2 }, { 0xFF13, 3 }, { 0xFF14, 4 }, { 0xFF15, 5 }, { 0xFF16, 6 }, { 0xFF17, 7 }, { 0xFF18, 8 }, { 0xFF19, 9 }, { 0x104A0, 0 }, { 0x104A1, 1 }, { 0x104A2, 2 }, { 0x104A3, 3 }, { 0x104A4, 4 }, { 0x104A5, 5 }, { 0x104A6, 6 }, { 0x104A7, 7 }, { 0x104A8, 8 }, { 0x104A9, 9 }, { 0x10A40, 1 }, { 0x10A41, 2 }, { 0x10A42, 3 }, { 0x10A43, 4 }, { 0x10E60, 1 }, { 0x10E61, 2 }, { 0x10E62, 3 }, { 0x10E63, 4 }, { 0x10E64, 5 }, { 0x10E65, 6 }, { 0x10E66, 7 }, { 0x10E67, 8 }, { 0x10E68, 9 }, { 0x11052, 1 }, { 0x11053, 2 }, { 0x11054, 3 }, { 0x11055, 4 }, { 0x11056, 5 }, { 0x11057, 6 }, { 0x11058, 7 }, { 0x11059, 8 }, { 0x1105A, 9 }, { 0x11066, 0 }, { 0x11067, 1 }, { 0x11068, 2 }, { 0x11069, 3 }, { 0x1106A, 4 }, { 0x1106B, 5 }, { 0x1106C, 6 }, { 0x1106D, 7 }, { 0x1106E, 8 }, { 0x1106F, 9 }, { 0x110F0, 0 }, { 0x110F1, 1 }, { 0x110F2, 2 }, { 0x110F3, 3 }, { 0x110F4, 4 }, { 0x110F5, 5 }, { 0x110F6, 6 }, { 0x110F7, 7 }, { 0x110F8, 8 }, { 0x110F9, 9 }, { 0x11136, 0 }, { 0x11137, 1 }, { 0x11138, 2 }, { 0x11139, 3 }, { 0x1113A, 4 }, { 0x1113B, 5 }, { 0x1113C, 6 }, { 0x1113D, 7 }, { 0x1113E, 8 }, { 0x1113F, 9 }, { 0x111D0, 0 }, { 0x111D1, 1 }, { 0x111D2, 2 }, { 0x111D3, 3 }, { 0x111D4, 4 }, { 0x111D5, 5 }, { 0x111D6, 6 }, { 0x111D7, 7 }, { 0x111D8, 8 }, { 0x111D9, 9 }, { 0x112F0, 0 }, { 0x112F1, 1 }, { 0x112F2, 2 }, { 0x112F3, 3 }, { 0x112F4, 4 }, { 0x112F5, 5 }, { 0x112F6, 6 }, { 0x112F7, 7 }, { 0x112F8, 8 }, { 0x112F9, 9 }, { 0x11450, 0 }, { 0x11451, 1 }, { 0x11452, 2 }, { 0x11453, 3 }, { 0x11454, 4 }, { 0x11455, 5 }, { 0x11456, 6 }, { 0x11457, 7 }, { 0x11458, 8 }, { 0x11459, 9 }, { 0x114D0, 0 }, { 0x114D1, 1 }, { 0x114D2, 2 }, { 0x114D3, 3 }, { 0x114D4, 4 }, { 0x114D5, 5 }, { 0x114D6, 6 }, { 0x114D7, 7 }, { 0x114D8, 8 }, { 0x114D9, 9 }, { 0x11650, 0 }, { 0x11651, 1 }, { 0x11652, 2 }, { 0x11653, 3 }, { 0x11654, 4 }, { 0x11655, 5 }, { 0x11656, 6 }, { 0x11657, 7 }, { 0x11658, 8 }, { 0x11659, 9 }, { 0x116C0, 0 }, { 0x116C1, 1 }, { 0x116C2, 2 }, { 0x116C3, 3 }, { 0x116C4, 4 }, { 0x116C5, 5 }, { 0x116C6, 6 }, { 0x116C7, 7 }, { 0x116C8, 8 }, { 0x116C9, 9 }, { 0x11730, 0 }, { 0x11731, 1 }, { 0x11732, 2 }, { 0x11733, 3 }, { 0x11734, 4 }, { 0x11735, 5 }, { 0x11736, 6 }, { 0x11737, 7 }, { 0x11738, 8 }, { 0x11739, 9 }, { 0x118E0, 0 }, { 0x118E1, 1 }, { 0x118E2, 2 }, { 0x118E3, 3 }, { 0x118E4, 4 }, { 0x118E5, 5 }, { 0x118E6, 6 }, { 0x118E7, 7 }, { 0x118E8, 8 }, { 0x118E9, 9 }, { 0x11C50, 0 }, { 0x11C51, 1 }, { 0x11C52, 2 }, { 0x11C53, 3 }, { 0x11C54, 4 }, { 0x11C55, 5 }, { 0x11C56, 6 }, { 0x11C57, 7 }, { 0x11C58, 8 }, { 0x11C59, 9 }, { 0x16A60, 0 }, { 0x16A61, 1 }, { 0x16A62, 2 }, { 0x16A63, 3 }, { 0x16A64, 4 }, { 0x16A65, 5 }, { 0x16A66, 6 }, { 0x16A67, 7 }, { 0x16A68, 8 }, { 0x16A69, 9 }, { 0x16B50, 0 }, { 0x16B51, 1 }, { 0x16B52, 2 }, { 0x16B53, 3 }, { 0x16B54, 4 }, { 0x16B55, 5 }, { 0x16B56, 6 }, { 0x16B57, 7 }, { 0x16B58, 8 }, { 0x16B59, 9 }, { 0x1D7CE, 0 }, { 0x1D7CF, 1 }, { 0x1D7D0, 2 }, { 0x1D7D1, 3 }, { 0x1D7D2, 4 }, { 0x1D7D3, 5 }, { 0x1D7D4, 6 }, { 0x1D7D5, 7 }, { 0x1D7D6, 8 }, { 0x1D7D7, 9 }, { 0x1D7D8, 0 }, { 0x1D7D9, 1 }, { 0x1D7DA, 2 }, { 0x1D7DB, 3 }, { 0x1D7DC, 4 }, { 0x1D7DD, 5 }, { 0x1D7DE, 6 }, { 0x1D7DF, 7 }, { 0x1D7E0, 8 }, { 0x1D7E1, 9 }, { 0x1D7E2, 0 }, { 0x1D7E3, 1 }, { 0x1D7E4, 2 }, { 0x1D7E5, 3 }, { 0x1D7E6, 4 }, { 0x1D7E7, 5 }, { 0x1D7E8, 6 }, { 0x1D7E9, 7 }, { 0x1D7EA, 8 }, { 0x1D7EB, 9 }, { 0x1D7EC, 0 }, { 0x1D7ED, 1 }, { 0x1D7EE, 2 }, { 0x1D7EF, 3 }, { 0x1D7F0, 4 }, { 0x1D7F1, 5 }, { 0x1D7F2, 6 }, { 0x1D7F3, 7 }, { 0x1D7F4, 8 }, { 0x1D7F5, 9 }, { 0x1D7F6, 0 }, { 0x1D7F7, 1 }, { 0x1D7F8, 2 }, { 0x1D7F9, 3 }, { 0x1D7FA, 4 }, { 0x1D7FB, 5 }, { 0x1D7FC, 6 }, { 0x1D7FD, 7 }, { 0x1D7FE, 8 }, { 0x1D7FF, 9 }, { 0x1E950, 0 }, { 0x1E951, 1 }, { 0x1E952, 2 }, { 0x1E953, 3 }, { 0x1E954, 4 }, { 0x1E955, 5 }, { 0x1E956, 6 }, { 0x1E957, 7 }, { 0x1E958, 8 }, { 0x1E959, 9 }, { 0x1F100, 0 }, { 0x1F101, 0 }, { 0x1F102, 1 }, { 0x1F103, 2 }, { 0x1F104, 3 }, { 0x1F105, 4 }, { 0x1F106, 5 }, { 0x1F107, 6 }, { 0x1F108, 7 }, { 0x1F109, 8 }, { 0x1F10A, 9 } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joininggroup_byname.c�����������������������������������0000664�0000000�0000000�00000027262�14110572173�0024500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining group functions. Copyright (C) 2011 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 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_joining_group_byname ("NO JOINING GROUP") == UC_JOINING_GROUP_NONE); ASSERT (uc_joining_group_byname ("No Joining Group") == UC_JOINING_GROUP_NONE); ASSERT (uc_joining_group_byname ("No_Joining_Group") == UC_JOINING_GROUP_NONE); ASSERT (uc_joining_group_byname ("NoJoiningGroup") == UC_JOINING_GROUP_NONE); ASSERT (uc_joining_group_byname ("AIN") == UC_JOINING_GROUP_AIN); ASSERT (uc_joining_group_byname ("Ain") == UC_JOINING_GROUP_AIN); ASSERT (uc_joining_group_byname ("ALAPH") == UC_JOINING_GROUP_ALAPH); ASSERT (uc_joining_group_byname ("Alaph") == UC_JOINING_GROUP_ALAPH); ASSERT (uc_joining_group_byname ("ALEF") == UC_JOINING_GROUP_ALEF); ASSERT (uc_joining_group_byname ("Alef") == UC_JOINING_GROUP_ALEF); ASSERT (uc_joining_group_byname ("BEH") == UC_JOINING_GROUP_BEH); ASSERT (uc_joining_group_byname ("Beh") == UC_JOINING_GROUP_BEH); ASSERT (uc_joining_group_byname ("BETH") == UC_JOINING_GROUP_BETH); ASSERT (uc_joining_group_byname ("Beth") == UC_JOINING_GROUP_BETH); ASSERT (uc_joining_group_byname ("BURUSHASKI YEH BARREE") == UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE); ASSERT (uc_joining_group_byname ("Burushaski Yeh Barree") == UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE); ASSERT (uc_joining_group_byname ("Burushaski_Yeh_Barree") == UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE); ASSERT (uc_joining_group_byname ("BurushaskiYehBarree") == UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE); ASSERT (uc_joining_group_byname ("DAL") == UC_JOINING_GROUP_DAL); ASSERT (uc_joining_group_byname ("Dal") == UC_JOINING_GROUP_DAL); ASSERT (uc_joining_group_byname ("DALATH RISH") == UC_JOINING_GROUP_DALATH_RISH); ASSERT (uc_joining_group_byname ("Dalath Rish") == UC_JOINING_GROUP_DALATH_RISH); ASSERT (uc_joining_group_byname ("Dalath_Rish") == UC_JOINING_GROUP_DALATH_RISH); ASSERT (uc_joining_group_byname ("DalathRish") == UC_JOINING_GROUP_DALATH_RISH); ASSERT (uc_joining_group_byname ("E") == UC_JOINING_GROUP_E); ASSERT (uc_joining_group_byname ("FARSI YEH") == UC_JOINING_GROUP_FARSI_YEH); ASSERT (uc_joining_group_byname ("Farsi Yeh") == UC_JOINING_GROUP_FARSI_YEH); ASSERT (uc_joining_group_byname ("Farsi_Yeh") == UC_JOINING_GROUP_FARSI_YEH); ASSERT (uc_joining_group_byname ("FarsiYeh") == UC_JOINING_GROUP_FARSI_YEH); ASSERT (uc_joining_group_byname ("FE") == UC_JOINING_GROUP_FE); ASSERT (uc_joining_group_byname ("Fe") == UC_JOINING_GROUP_FE); ASSERT (uc_joining_group_byname ("FEH") == UC_JOINING_GROUP_FEH); ASSERT (uc_joining_group_byname ("Feh") == UC_JOINING_GROUP_FEH); ASSERT (uc_joining_group_byname ("FINAL SEMKATH") == UC_JOINING_GROUP_FINAL_SEMKATH); ASSERT (uc_joining_group_byname ("Final Semkath") == UC_JOINING_GROUP_FINAL_SEMKATH); ASSERT (uc_joining_group_byname ("Final_Semkath") == UC_JOINING_GROUP_FINAL_SEMKATH); ASSERT (uc_joining_group_byname ("FinalSemkath") == UC_JOINING_GROUP_FINAL_SEMKATH); ASSERT (uc_joining_group_byname ("GAF") == UC_JOINING_GROUP_GAF); ASSERT (uc_joining_group_byname ("Gaf") == UC_JOINING_GROUP_GAF); ASSERT (uc_joining_group_byname ("GAMAL") == UC_JOINING_GROUP_GAMAL); ASSERT (uc_joining_group_byname ("Gamal") == UC_JOINING_GROUP_GAMAL); ASSERT (uc_joining_group_byname ("HAH") == UC_JOINING_GROUP_HAH); ASSERT (uc_joining_group_byname ("Hah") == UC_JOINING_GROUP_HAH); ASSERT (uc_joining_group_byname ("HE") == UC_JOINING_GROUP_HE); ASSERT (uc_joining_group_byname ("He") == UC_JOINING_GROUP_HE); ASSERT (uc_joining_group_byname ("HEH") == UC_JOINING_GROUP_HEH); ASSERT (uc_joining_group_byname ("Heh") == UC_JOINING_GROUP_HEH); ASSERT (uc_joining_group_byname ("HEH GOAL") == UC_JOINING_GROUP_HEH_GOAL); ASSERT (uc_joining_group_byname ("Heh Goal") == UC_JOINING_GROUP_HEH_GOAL); ASSERT (uc_joining_group_byname ("Heh_Goal") == UC_JOINING_GROUP_HEH_GOAL); ASSERT (uc_joining_group_byname ("HehGoal") == UC_JOINING_GROUP_HEH_GOAL); ASSERT (uc_joining_group_byname ("HETH") == UC_JOINING_GROUP_HETH); ASSERT (uc_joining_group_byname ("Heth") == UC_JOINING_GROUP_HETH); ASSERT (uc_joining_group_byname ("KAF") == UC_JOINING_GROUP_KAF); ASSERT (uc_joining_group_byname ("Kaf") == UC_JOINING_GROUP_KAF); ASSERT (uc_joining_group_byname ("KAPH") == UC_JOINING_GROUP_KAPH); ASSERT (uc_joining_group_byname ("Kaph") == UC_JOINING_GROUP_KAPH); ASSERT (uc_joining_group_byname ("KHAPH") == UC_JOINING_GROUP_KHAPH); ASSERT (uc_joining_group_byname ("Khaph") == UC_JOINING_GROUP_KHAPH); ASSERT (uc_joining_group_byname ("KNOTTED HEH") == UC_JOINING_GROUP_KNOTTED_HEH); ASSERT (uc_joining_group_byname ("Knotted Heh") == UC_JOINING_GROUP_KNOTTED_HEH); ASSERT (uc_joining_group_byname ("Knotted_Heh") == UC_JOINING_GROUP_KNOTTED_HEH); ASSERT (uc_joining_group_byname ("KnottedHeh") == UC_JOINING_GROUP_KNOTTED_HEH); ASSERT (uc_joining_group_byname ("LAM") == UC_JOINING_GROUP_LAM); ASSERT (uc_joining_group_byname ("Lam") == UC_JOINING_GROUP_LAM); ASSERT (uc_joining_group_byname ("LAMADH") == UC_JOINING_GROUP_LAMADH); ASSERT (uc_joining_group_byname ("Lamadh") == UC_JOINING_GROUP_LAMADH); ASSERT (uc_joining_group_byname ("MEEM") == UC_JOINING_GROUP_MEEM); ASSERT (uc_joining_group_byname ("Meem") == UC_JOINING_GROUP_MEEM); ASSERT (uc_joining_group_byname ("MIM") == UC_JOINING_GROUP_MIM); ASSERT (uc_joining_group_byname ("Mim") == UC_JOINING_GROUP_MIM); ASSERT (uc_joining_group_byname ("NOON") == UC_JOINING_GROUP_NOON); ASSERT (uc_joining_group_byname ("Noon") == UC_JOINING_GROUP_NOON); ASSERT (uc_joining_group_byname ("NUN") == UC_JOINING_GROUP_NUN); ASSERT (uc_joining_group_byname ("Nun") == UC_JOINING_GROUP_NUN); ASSERT (uc_joining_group_byname ("NYA") == UC_JOINING_GROUP_NYA); ASSERT (uc_joining_group_byname ("Nya") == UC_JOINING_GROUP_NYA); ASSERT (uc_joining_group_byname ("PE") == UC_JOINING_GROUP_PE); ASSERT (uc_joining_group_byname ("Pe") == UC_JOINING_GROUP_PE); ASSERT (uc_joining_group_byname ("QAF") == UC_JOINING_GROUP_QAF); ASSERT (uc_joining_group_byname ("Qaf") == UC_JOINING_GROUP_QAF); ASSERT (uc_joining_group_byname ("QAPH") == UC_JOINING_GROUP_QAPH); ASSERT (uc_joining_group_byname ("Qaph") == UC_JOINING_GROUP_QAPH); ASSERT (uc_joining_group_byname ("REH") == UC_JOINING_GROUP_REH); ASSERT (uc_joining_group_byname ("Reh") == UC_JOINING_GROUP_REH); ASSERT (uc_joining_group_byname ("REVERSED PE") == UC_JOINING_GROUP_REVERSED_PE); ASSERT (uc_joining_group_byname ("Reversed Pe") == UC_JOINING_GROUP_REVERSED_PE); ASSERT (uc_joining_group_byname ("Reversed_Pe") == UC_JOINING_GROUP_REVERSED_PE); ASSERT (uc_joining_group_byname ("ReversedPe") == UC_JOINING_GROUP_REVERSED_PE); ASSERT (uc_joining_group_byname ("SAD") == UC_JOINING_GROUP_SAD); ASSERT (uc_joining_group_byname ("Sad") == UC_JOINING_GROUP_SAD); ASSERT (uc_joining_group_byname ("SADHE") == UC_JOINING_GROUP_SADHE); ASSERT (uc_joining_group_byname ("Sadhe") == UC_JOINING_GROUP_SADHE); ASSERT (uc_joining_group_byname ("SEEN") == UC_JOINING_GROUP_SEEN); ASSERT (uc_joining_group_byname ("Seen") == UC_JOINING_GROUP_SEEN); ASSERT (uc_joining_group_byname ("SEMKATH") == UC_JOINING_GROUP_SEMKATH); ASSERT (uc_joining_group_byname ("Semkath") == UC_JOINING_GROUP_SEMKATH); ASSERT (uc_joining_group_byname ("SHIN") == UC_JOINING_GROUP_SHIN); ASSERT (uc_joining_group_byname ("Shin") == UC_JOINING_GROUP_SHIN); ASSERT (uc_joining_group_byname ("SWASH KAF") == UC_JOINING_GROUP_SWASH_KAF); ASSERT (uc_joining_group_byname ("Swash Kaf") == UC_JOINING_GROUP_SWASH_KAF); ASSERT (uc_joining_group_byname ("Swash_Kaf") == UC_JOINING_GROUP_SWASH_KAF); ASSERT (uc_joining_group_byname ("SwashKaf") == UC_JOINING_GROUP_SWASH_KAF); ASSERT (uc_joining_group_byname ("SYRIAC WAW") == UC_JOINING_GROUP_SYRIAC_WAW); ASSERT (uc_joining_group_byname ("Syriac Waw") == UC_JOINING_GROUP_SYRIAC_WAW); ASSERT (uc_joining_group_byname ("Syriac_Waw") == UC_JOINING_GROUP_SYRIAC_WAW); ASSERT (uc_joining_group_byname ("SyriacWaw") == UC_JOINING_GROUP_SYRIAC_WAW); ASSERT (uc_joining_group_byname ("TAH") == UC_JOINING_GROUP_TAH); ASSERT (uc_joining_group_byname ("Tah") == UC_JOINING_GROUP_TAH); ASSERT (uc_joining_group_byname ("TAW") == UC_JOINING_GROUP_TAW); ASSERT (uc_joining_group_byname ("Taw") == UC_JOINING_GROUP_TAW); ASSERT (uc_joining_group_byname ("TEH MARBUTA") == UC_JOINING_GROUP_TEH_MARBUTA); ASSERT (uc_joining_group_byname ("Teh Marbuta") == UC_JOINING_GROUP_TEH_MARBUTA); ASSERT (uc_joining_group_byname ("Teh_Marbuta") == UC_JOINING_GROUP_TEH_MARBUTA); ASSERT (uc_joining_group_byname ("TehMarbuta") == UC_JOINING_GROUP_TEH_MARBUTA); ASSERT (uc_joining_group_byname ("TEH MARBUTA GOAL") == UC_JOINING_GROUP_TEH_MARBUTA_GOAL); ASSERT (uc_joining_group_byname ("Teh Marbuta Goal") == UC_JOINING_GROUP_TEH_MARBUTA_GOAL); ASSERT (uc_joining_group_byname ("Teh_Marbuta_Goal") == UC_JOINING_GROUP_TEH_MARBUTA_GOAL); ASSERT (uc_joining_group_byname ("TehMarbutaGoal") == UC_JOINING_GROUP_TEH_MARBUTA_GOAL); ASSERT (uc_joining_group_byname ("TETH") == UC_JOINING_GROUP_TETH); ASSERT (uc_joining_group_byname ("Teth") == UC_JOINING_GROUP_TETH); ASSERT (uc_joining_group_byname ("WAW") == UC_JOINING_GROUP_WAW); ASSERT (uc_joining_group_byname ("Waw") == UC_JOINING_GROUP_WAW); ASSERT (uc_joining_group_byname ("YEH") == UC_JOINING_GROUP_YEH); ASSERT (uc_joining_group_byname ("Yeh") == UC_JOINING_GROUP_YEH); ASSERT (uc_joining_group_byname ("YEH BARREE") == UC_JOINING_GROUP_YEH_BARREE); ASSERT (uc_joining_group_byname ("Yeh Barree") == UC_JOINING_GROUP_YEH_BARREE); ASSERT (uc_joining_group_byname ("Yeh_Barree") == UC_JOINING_GROUP_YEH_BARREE); ASSERT (uc_joining_group_byname ("YehBarree") == UC_JOINING_GROUP_YEH_BARREE); ASSERT (uc_joining_group_byname ("YEH WITH TAIL") == UC_JOINING_GROUP_YEH_WITH_TAIL); ASSERT (uc_joining_group_byname ("Yeh with tail") == UC_JOINING_GROUP_YEH_WITH_TAIL); ASSERT (uc_joining_group_byname ("Yeh_with_tail") == UC_JOINING_GROUP_YEH_WITH_TAIL); ASSERT (uc_joining_group_byname ("YehWithTail") == UC_JOINING_GROUP_YEH_WITH_TAIL); ASSERT (uc_joining_group_byname ("YUDH") == UC_JOINING_GROUP_YUDH); ASSERT (uc_joining_group_byname ("Yudh") == UC_JOINING_GROUP_YUDH); ASSERT (uc_joining_group_byname ("YUDH HE") == UC_JOINING_GROUP_YUDH_HE); ASSERT (uc_joining_group_byname ("Yudh He") == UC_JOINING_GROUP_YUDH_HE); ASSERT (uc_joining_group_byname ("Yudh_He") == UC_JOINING_GROUP_YUDH_HE); ASSERT (uc_joining_group_byname ("YudhHe") == UC_JOINING_GROUP_YUDH_HE); ASSERT (uc_joining_group_byname ("ZAIN") == UC_JOINING_GROUP_ZAIN); ASSERT (uc_joining_group_byname ("Zain") == UC_JOINING_GROUP_ZAIN); ASSERT (uc_joining_group_byname ("ZHAIN") == UC_JOINING_GROUP_ZHAIN); ASSERT (uc_joining_group_byname ("Zhain") == UC_JOINING_GROUP_ZHAIN); ASSERT (uc_joining_group_byname ("SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE") < 0); ASSERT (uc_joining_group_byname ("X") < 0); ASSERT (uc_joining_group_byname ("") < 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joininggroup_name.c�������������������������������������0000664�0000000�0000000�00000014770�14110572173�0024145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining group functions. Copyright (C) 2011 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 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_joining_group_name (UC_JOINING_GROUP_NONE), "No Joining Group") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_AIN), "Ain") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_ALAPH), "Alaph") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_ALEF), "Alef") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_BEH), "Beh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_BETH), "Beth") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE), "Burushaski Yeh Barree") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_DAL), "Dal") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_DALATH_RISH), "Dalath Rish") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_E), "E") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_FARSI_YEH), "Farsi Yeh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_FE), "Fe") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_FEH), "Feh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_FINAL_SEMKATH), "Final Semkath") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_GAF), "Gaf") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_GAMAL), "Gamal") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_HAH), "Hah") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_HE), "He") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_HEH), "Heh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_HEH_GOAL), "Heh Goal") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_HETH), "Heth") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_KAF), "Kaf") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_KAPH), "Kaph") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_KHAPH), "Khaph") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_KNOTTED_HEH), "Knotted Heh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_LAM), "Lam") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_LAMADH), "Lamadh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_MEEM), "Meem") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_MIM), "Mim") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_NOON), "Noon") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_NUN), "Nun") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_NYA), "Nya") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_PE), "Pe") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_QAF), "Qaf") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_QAPH), "Qaph") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_REH), "Reh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_REVERSED_PE), "Reversed Pe") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SAD), "Sad") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SADHE), "Sadhe") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SEEN), "Seen") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SEMKATH), "Semkath") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SHIN), "Shin") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SWASH_KAF), "Swash Kaf") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_SYRIAC_WAW), "Syriac Waw") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_TAH), "Tah") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_TAW), "Taw") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_TEH_MARBUTA), "Teh Marbuta") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_TEH_MARBUTA_GOAL), "Teh Marbuta Goal") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_TETH), "Teth") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_WAW), "Waw") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_YEH), "Yeh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_YEH_BARREE), "Yeh Barree") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_YEH_WITH_TAIL), "Yeh With Tail") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_YUDH), "Yudh") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_YUDH_HE), "Yudh He") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_ZAIN), "Zain") == 0); ASSERT (strcmp (uc_joining_group_name (UC_JOINING_GROUP_ZHAIN), "Zhain") == 0); ASSERT (uc_joining_group_name (-1) == NULL); return 0; } ��������gnulib-20210822~d383792/tests/unictype/test-joininggroup_of.c���������������������������������������0000664�0000000�0000000�00000002652�14110572173�0023625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining group functions. Copyright (C) 2011 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 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-joininggroup_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_joining_group (c) == UC_JOINING_GROUP_NONE); ASSERT (uc_joining_group (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (uc_joining_group (c) == UC_JOINING_GROUP_NONE); return 0; } ��������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joininggroup_of.h���������������������������������������0000664�0000000�0000000�00000031073�14110572173�0023631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining group of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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/>. */ { 0x0620, UC_JOINING_GROUP_YEH }, { 0x0622, UC_JOINING_GROUP_ALEF }, { 0x0623, UC_JOINING_GROUP_ALEF }, { 0x0624, UC_JOINING_GROUP_WAW }, { 0x0625, UC_JOINING_GROUP_ALEF }, { 0x0626, UC_JOINING_GROUP_YEH }, { 0x0627, UC_JOINING_GROUP_ALEF }, { 0x0628, UC_JOINING_GROUP_BEH }, { 0x0629, UC_JOINING_GROUP_TEH_MARBUTA }, { 0x062A, UC_JOINING_GROUP_BEH }, { 0x062B, UC_JOINING_GROUP_BEH }, { 0x062C, UC_JOINING_GROUP_HAH }, { 0x062D, UC_JOINING_GROUP_HAH }, { 0x062E, UC_JOINING_GROUP_HAH }, { 0x062F, UC_JOINING_GROUP_DAL }, { 0x0630, UC_JOINING_GROUP_DAL }, { 0x0631, UC_JOINING_GROUP_REH }, { 0x0632, UC_JOINING_GROUP_REH }, { 0x0633, UC_JOINING_GROUP_SEEN }, { 0x0634, UC_JOINING_GROUP_SEEN }, { 0x0635, UC_JOINING_GROUP_SAD }, { 0x0636, UC_JOINING_GROUP_SAD }, { 0x0637, UC_JOINING_GROUP_TAH }, { 0x0638, UC_JOINING_GROUP_TAH }, { 0x0639, UC_JOINING_GROUP_AIN }, { 0x063A, UC_JOINING_GROUP_AIN }, { 0x063B, UC_JOINING_GROUP_GAF }, { 0x063C, UC_JOINING_GROUP_GAF }, { 0x063D, UC_JOINING_GROUP_FARSI_YEH }, { 0x063E, UC_JOINING_GROUP_FARSI_YEH }, { 0x063F, UC_JOINING_GROUP_FARSI_YEH }, { 0x0641, UC_JOINING_GROUP_FEH }, { 0x0642, UC_JOINING_GROUP_QAF }, { 0x0643, UC_JOINING_GROUP_KAF }, { 0x0644, UC_JOINING_GROUP_LAM }, { 0x0645, UC_JOINING_GROUP_MEEM }, { 0x0646, UC_JOINING_GROUP_NOON }, { 0x0647, UC_JOINING_GROUP_HEH }, { 0x0648, UC_JOINING_GROUP_WAW }, { 0x0649, UC_JOINING_GROUP_YEH }, { 0x064A, UC_JOINING_GROUP_YEH }, { 0x066E, UC_JOINING_GROUP_BEH }, { 0x066F, UC_JOINING_GROUP_QAF }, { 0x0671, UC_JOINING_GROUP_ALEF }, { 0x0672, UC_JOINING_GROUP_ALEF }, { 0x0673, UC_JOINING_GROUP_ALEF }, { 0x0675, UC_JOINING_GROUP_ALEF }, { 0x0676, UC_JOINING_GROUP_WAW }, { 0x0677, UC_JOINING_GROUP_WAW }, { 0x0678, UC_JOINING_GROUP_YEH }, { 0x0679, UC_JOINING_GROUP_BEH }, { 0x067A, UC_JOINING_GROUP_BEH }, { 0x067B, UC_JOINING_GROUP_BEH }, { 0x067C, UC_JOINING_GROUP_BEH }, { 0x067D, UC_JOINING_GROUP_BEH }, { 0x067E, UC_JOINING_GROUP_BEH }, { 0x067F, UC_JOINING_GROUP_BEH }, { 0x0680, UC_JOINING_GROUP_BEH }, { 0x0681, UC_JOINING_GROUP_HAH }, { 0x0682, UC_JOINING_GROUP_HAH }, { 0x0683, UC_JOINING_GROUP_HAH }, { 0x0684, UC_JOINING_GROUP_HAH }, { 0x0685, UC_JOINING_GROUP_HAH }, { 0x0686, UC_JOINING_GROUP_HAH }, { 0x0687, UC_JOINING_GROUP_HAH }, { 0x0688, UC_JOINING_GROUP_DAL }, { 0x0689, UC_JOINING_GROUP_DAL }, { 0x068A, UC_JOINING_GROUP_DAL }, { 0x068B, UC_JOINING_GROUP_DAL }, { 0x068C, UC_JOINING_GROUP_DAL }, { 0x068D, UC_JOINING_GROUP_DAL }, { 0x068E, UC_JOINING_GROUP_DAL }, { 0x068F, UC_JOINING_GROUP_DAL }, { 0x0690, UC_JOINING_GROUP_DAL }, { 0x0691, UC_JOINING_GROUP_REH }, { 0x0692, UC_JOINING_GROUP_REH }, { 0x0693, UC_JOINING_GROUP_REH }, { 0x0694, UC_JOINING_GROUP_REH }, { 0x0695, UC_JOINING_GROUP_REH }, { 0x0696, UC_JOINING_GROUP_REH }, { 0x0697, UC_JOINING_GROUP_REH }, { 0x0698, UC_JOINING_GROUP_REH }, { 0x0699, UC_JOINING_GROUP_REH }, { 0x069A, UC_JOINING_GROUP_SEEN }, { 0x069B, UC_JOINING_GROUP_SEEN }, { 0x069C, UC_JOINING_GROUP_SEEN }, { 0x069D, UC_JOINING_GROUP_SAD }, { 0x069E, UC_JOINING_GROUP_SAD }, { 0x069F, UC_JOINING_GROUP_TAH }, { 0x06A0, UC_JOINING_GROUP_AIN }, { 0x06A1, UC_JOINING_GROUP_FEH }, { 0x06A2, UC_JOINING_GROUP_FEH }, { 0x06A3, UC_JOINING_GROUP_FEH }, { 0x06A4, UC_JOINING_GROUP_FEH }, { 0x06A5, UC_JOINING_GROUP_FEH }, { 0x06A6, UC_JOINING_GROUP_FEH }, { 0x06A7, UC_JOINING_GROUP_QAF }, { 0x06A8, UC_JOINING_GROUP_QAF }, { 0x06A9, UC_JOINING_GROUP_GAF }, { 0x06AA, UC_JOINING_GROUP_SWASH_KAF }, { 0x06AB, UC_JOINING_GROUP_GAF }, { 0x06AC, UC_JOINING_GROUP_KAF }, { 0x06AD, UC_JOINING_GROUP_KAF }, { 0x06AE, UC_JOINING_GROUP_KAF }, { 0x06AF, UC_JOINING_GROUP_GAF }, { 0x06B0, UC_JOINING_GROUP_GAF }, { 0x06B1, UC_JOINING_GROUP_GAF }, { 0x06B2, UC_JOINING_GROUP_GAF }, { 0x06B3, UC_JOINING_GROUP_GAF }, { 0x06B4, UC_JOINING_GROUP_GAF }, { 0x06B5, UC_JOINING_GROUP_LAM }, { 0x06B6, UC_JOINING_GROUP_LAM }, { 0x06B7, UC_JOINING_GROUP_LAM }, { 0x06B8, UC_JOINING_GROUP_LAM }, { 0x06B9, UC_JOINING_GROUP_NOON }, { 0x06BA, UC_JOINING_GROUP_NOON }, { 0x06BB, UC_JOINING_GROUP_NOON }, { 0x06BC, UC_JOINING_GROUP_NOON }, { 0x06BD, UC_JOINING_GROUP_NYA }, { 0x06BE, UC_JOINING_GROUP_KNOTTED_HEH }, { 0x06BF, UC_JOINING_GROUP_HAH }, { 0x06C0, UC_JOINING_GROUP_TEH_MARBUTA }, { 0x06C1, UC_JOINING_GROUP_HEH_GOAL }, { 0x06C2, UC_JOINING_GROUP_HEH_GOAL }, { 0x06C3, UC_JOINING_GROUP_TEH_MARBUTA_GOAL }, { 0x06C4, UC_JOINING_GROUP_WAW }, { 0x06C5, UC_JOINING_GROUP_WAW }, { 0x06C6, UC_JOINING_GROUP_WAW }, { 0x06C7, UC_JOINING_GROUP_WAW }, { 0x06C8, UC_JOINING_GROUP_WAW }, { 0x06C9, UC_JOINING_GROUP_WAW }, { 0x06CA, UC_JOINING_GROUP_WAW }, { 0x06CB, UC_JOINING_GROUP_WAW }, { 0x06CC, UC_JOINING_GROUP_FARSI_YEH }, { 0x06CD, UC_JOINING_GROUP_YEH_WITH_TAIL }, { 0x06CE, UC_JOINING_GROUP_FARSI_YEH }, { 0x06CF, UC_JOINING_GROUP_WAW }, { 0x06D0, UC_JOINING_GROUP_YEH }, { 0x06D1, UC_JOINING_GROUP_YEH }, { 0x06D2, UC_JOINING_GROUP_YEH_BARREE }, { 0x06D3, UC_JOINING_GROUP_YEH_BARREE }, { 0x06D5, UC_JOINING_GROUP_TEH_MARBUTA }, { 0x06EE, UC_JOINING_GROUP_DAL }, { 0x06EF, UC_JOINING_GROUP_REH }, { 0x06FA, UC_JOINING_GROUP_SEEN }, { 0x06FB, UC_JOINING_GROUP_SAD }, { 0x06FC, UC_JOINING_GROUP_AIN }, { 0x06FF, UC_JOINING_GROUP_KNOTTED_HEH }, { 0x0710, UC_JOINING_GROUP_ALAPH }, { 0x0712, UC_JOINING_GROUP_BETH }, { 0x0713, UC_JOINING_GROUP_GAMAL }, { 0x0714, UC_JOINING_GROUP_GAMAL }, { 0x0715, UC_JOINING_GROUP_DALATH_RISH }, { 0x0716, UC_JOINING_GROUP_DALATH_RISH }, { 0x0717, UC_JOINING_GROUP_HE }, { 0x0718, UC_JOINING_GROUP_SYRIAC_WAW }, { 0x0719, UC_JOINING_GROUP_ZAIN }, { 0x071A, UC_JOINING_GROUP_HETH }, { 0x071B, UC_JOINING_GROUP_TETH }, { 0x071C, UC_JOINING_GROUP_TETH }, { 0x071D, UC_JOINING_GROUP_YUDH }, { 0x071E, UC_JOINING_GROUP_YUDH_HE }, { 0x071F, UC_JOINING_GROUP_KAPH }, { 0x0720, UC_JOINING_GROUP_LAMADH }, { 0x0721, UC_JOINING_GROUP_MIM }, { 0x0722, UC_JOINING_GROUP_NUN }, { 0x0723, UC_JOINING_GROUP_SEMKATH }, { 0x0724, UC_JOINING_GROUP_FINAL_SEMKATH }, { 0x0725, UC_JOINING_GROUP_E }, { 0x0726, UC_JOINING_GROUP_PE }, { 0x0727, UC_JOINING_GROUP_REVERSED_PE }, { 0x0728, UC_JOINING_GROUP_SADHE }, { 0x0729, UC_JOINING_GROUP_QAPH }, { 0x072A, UC_JOINING_GROUP_DALATH_RISH }, { 0x072B, UC_JOINING_GROUP_SHIN }, { 0x072C, UC_JOINING_GROUP_TAW }, { 0x072D, UC_JOINING_GROUP_BETH }, { 0x072E, UC_JOINING_GROUP_GAMAL }, { 0x072F, UC_JOINING_GROUP_DALATH_RISH }, { 0x074D, UC_JOINING_GROUP_ZHAIN }, { 0x074E, UC_JOINING_GROUP_KHAPH }, { 0x074F, UC_JOINING_GROUP_FE }, { 0x0750, UC_JOINING_GROUP_BEH }, { 0x0751, UC_JOINING_GROUP_BEH }, { 0x0752, UC_JOINING_GROUP_BEH }, { 0x0753, UC_JOINING_GROUP_BEH }, { 0x0754, UC_JOINING_GROUP_BEH }, { 0x0755, UC_JOINING_GROUP_BEH }, { 0x0756, UC_JOINING_GROUP_BEH }, { 0x0757, UC_JOINING_GROUP_HAH }, { 0x0758, UC_JOINING_GROUP_HAH }, { 0x0759, UC_JOINING_GROUP_DAL }, { 0x075A, UC_JOINING_GROUP_DAL }, { 0x075B, UC_JOINING_GROUP_REH }, { 0x075C, UC_JOINING_GROUP_SEEN }, { 0x075D, UC_JOINING_GROUP_AIN }, { 0x075E, UC_JOINING_GROUP_AIN }, { 0x075F, UC_JOINING_GROUP_AIN }, { 0x0760, UC_JOINING_GROUP_FEH }, { 0x0761, UC_JOINING_GROUP_FEH }, { 0x0762, UC_JOINING_GROUP_GAF }, { 0x0763, UC_JOINING_GROUP_GAF }, { 0x0764, UC_JOINING_GROUP_GAF }, { 0x0765, UC_JOINING_GROUP_MEEM }, { 0x0766, UC_JOINING_GROUP_MEEM }, { 0x0767, UC_JOINING_GROUP_NOON }, { 0x0768, UC_JOINING_GROUP_NOON }, { 0x0769, UC_JOINING_GROUP_NOON }, { 0x076A, UC_JOINING_GROUP_LAM }, { 0x076B, UC_JOINING_GROUP_REH }, { 0x076C, UC_JOINING_GROUP_REH }, { 0x076D, UC_JOINING_GROUP_SEEN }, { 0x076E, UC_JOINING_GROUP_HAH }, { 0x076F, UC_JOINING_GROUP_HAH }, { 0x0770, UC_JOINING_GROUP_SEEN }, { 0x0771, UC_JOINING_GROUP_REH }, { 0x0772, UC_JOINING_GROUP_HAH }, { 0x0773, UC_JOINING_GROUP_ALEF }, { 0x0774, UC_JOINING_GROUP_ALEF }, { 0x0775, UC_JOINING_GROUP_FARSI_YEH }, { 0x0776, UC_JOINING_GROUP_FARSI_YEH }, { 0x0777, UC_JOINING_GROUP_YEH }, { 0x0778, UC_JOINING_GROUP_WAW }, { 0x0779, UC_JOINING_GROUP_WAW }, { 0x077A, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE }, { 0x077B, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE }, { 0x077C, UC_JOINING_GROUP_HAH }, { 0x077D, UC_JOINING_GROUP_SEEN }, { 0x077E, UC_JOINING_GROUP_SEEN }, { 0x077F, UC_JOINING_GROUP_KAF }, { 0x08A0, UC_JOINING_GROUP_BEH }, { 0x08A1, UC_JOINING_GROUP_BEH }, { 0x08A2, UC_JOINING_GROUP_HAH }, { 0x08A3, UC_JOINING_GROUP_TAH }, { 0x08A4, UC_JOINING_GROUP_FEH }, { 0x08A5, UC_JOINING_GROUP_QAF }, { 0x08A6, UC_JOINING_GROUP_LAM }, { 0x08A7, UC_JOINING_GROUP_MEEM }, { 0x08A8, UC_JOINING_GROUP_YEH }, { 0x08A9, UC_JOINING_GROUP_YEH }, { 0x08AA, UC_JOINING_GROUP_REH }, { 0x08AB, UC_JOINING_GROUP_WAW }, { 0x08AC, UC_JOINING_GROUP_ROHINGYA_YEH }, { 0x08AE, UC_JOINING_GROUP_DAL }, { 0x08AF, UC_JOINING_GROUP_SAD }, { 0x08B0, UC_JOINING_GROUP_GAF }, { 0x08B1, UC_JOINING_GROUP_STRAIGHT_WAW }, { 0x08B2, UC_JOINING_GROUP_REH }, { 0x08B3, UC_JOINING_GROUP_AIN }, { 0x08B4, UC_JOINING_GROUP_KAF }, { 0x08B6, UC_JOINING_GROUP_BEH }, { 0x08B7, UC_JOINING_GROUP_BEH }, { 0x08B8, UC_JOINING_GROUP_BEH }, { 0x08B9, UC_JOINING_GROUP_REH }, { 0x08BA, UC_JOINING_GROUP_YEH }, { 0x08BB, UC_JOINING_GROUP_AFRICAN_FEH }, { 0x08BC, UC_JOINING_GROUP_AFRICAN_QAF }, { 0x08BD, UC_JOINING_GROUP_AFRICAN_NOON }, { 0x10AC0, UC_JOINING_GROUP_MANICHAEAN_ALEPH }, { 0x10AC1, UC_JOINING_GROUP_MANICHAEAN_BETH }, { 0x10AC2, UC_JOINING_GROUP_MANICHAEAN_BETH }, { 0x10AC3, UC_JOINING_GROUP_MANICHAEAN_GIMEL }, { 0x10AC4, UC_JOINING_GROUP_MANICHAEAN_GIMEL }, { 0x10AC5, UC_JOINING_GROUP_MANICHAEAN_DALETH }, { 0x10AC7, UC_JOINING_GROUP_MANICHAEAN_WAW }, { 0x10AC9, UC_JOINING_GROUP_MANICHAEAN_ZAYIN }, { 0x10ACA, UC_JOINING_GROUP_MANICHAEAN_ZAYIN }, { 0x10ACD, UC_JOINING_GROUP_MANICHAEAN_HETH }, { 0x10ACE, UC_JOINING_GROUP_MANICHAEAN_TETH }, { 0x10ACF, UC_JOINING_GROUP_MANICHAEAN_YODH }, { 0x10AD0, UC_JOINING_GROUP_MANICHAEAN_KAPH }, { 0x10AD1, UC_JOINING_GROUP_MANICHAEAN_KAPH }, { 0x10AD2, UC_JOINING_GROUP_MANICHAEAN_KAPH }, { 0x10AD3, UC_JOINING_GROUP_MANICHAEAN_LAMEDH }, { 0x10AD4, UC_JOINING_GROUP_MANICHAEAN_DHAMEDH }, { 0x10AD5, UC_JOINING_GROUP_MANICHAEAN_THAMEDH }, { 0x10AD6, UC_JOINING_GROUP_MANICHAEAN_MEM }, { 0x10AD7, UC_JOINING_GROUP_MANICHAEAN_NUN }, { 0x10AD8, UC_JOINING_GROUP_MANICHAEAN_SAMEKH }, { 0x10AD9, UC_JOINING_GROUP_MANICHAEAN_AYIN }, { 0x10ADA, UC_JOINING_GROUP_MANICHAEAN_AYIN }, { 0x10ADB, UC_JOINING_GROUP_MANICHAEAN_PE }, { 0x10ADC, UC_JOINING_GROUP_MANICHAEAN_PE }, { 0x10ADD, UC_JOINING_GROUP_MANICHAEAN_SADHE }, { 0x10ADE, UC_JOINING_GROUP_MANICHAEAN_QOPH }, { 0x10ADF, UC_JOINING_GROUP_MANICHAEAN_QOPH }, { 0x10AE0, UC_JOINING_GROUP_MANICHAEAN_QOPH }, { 0x10AE1, UC_JOINING_GROUP_MANICHAEAN_RESH }, { 0x10AE4, UC_JOINING_GROUP_MANICHAEAN_TAW }, { 0x10AEB, UC_JOINING_GROUP_MANICHAEAN_ONE }, { 0x10AEC, UC_JOINING_GROUP_MANICHAEAN_FIVE }, { 0x10AED, UC_JOINING_GROUP_MANICHAEAN_TEN }, { 0x10AEE, UC_JOINING_GROUP_MANICHAEAN_TWENTY }, { 0x10AEF, UC_JOINING_GROUP_MANICHAEAN_HUNDRED } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joiningtype_byname.c������������������������������������0000664�0000000�0000000�00000005733�14110572173�0024324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining type functions. Copyright (C) 2011 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 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_joining_type_byname ("U") == UC_JOINING_TYPE_U); ASSERT (uc_joining_type_byname ("T") == UC_JOINING_TYPE_T); ASSERT (uc_joining_type_byname ("C") == UC_JOINING_TYPE_C); ASSERT (uc_joining_type_byname ("L") == UC_JOINING_TYPE_L); ASSERT (uc_joining_type_byname ("R") == UC_JOINING_TYPE_R); ASSERT (uc_joining_type_byname ("D") == UC_JOINING_TYPE_D); ASSERT (uc_joining_type_byname ("JOIN CAUSING") == UC_JOINING_TYPE_C); ASSERT (uc_joining_type_byname ("Join Causing") == UC_JOINING_TYPE_C); ASSERT (uc_joining_type_byname ("Join_Causing") == UC_JOINING_TYPE_C); ASSERT (uc_joining_type_byname ("JoinCausing") == UC_JOINING_TYPE_C); ASSERT (uc_joining_type_byname ("DUAL JOINING") == UC_JOINING_TYPE_D); ASSERT (uc_joining_type_byname ("Dual Joining") == UC_JOINING_TYPE_D); ASSERT (uc_joining_type_byname ("Dual_Joining") == UC_JOINING_TYPE_D); ASSERT (uc_joining_type_byname ("DualJoining") == UC_JOINING_TYPE_D); ASSERT (uc_joining_type_byname ("LEFT JOINING") == UC_JOINING_TYPE_L); ASSERT (uc_joining_type_byname ("Left Joining") == UC_JOINING_TYPE_L); ASSERT (uc_joining_type_byname ("Left_Joining") == UC_JOINING_TYPE_L); ASSERT (uc_joining_type_byname ("LeftJoining") == UC_JOINING_TYPE_L); ASSERT (uc_joining_type_byname ("RIGHT JOINING") == UC_JOINING_TYPE_R); ASSERT (uc_joining_type_byname ("Right Joining") == UC_JOINING_TYPE_R); ASSERT (uc_joining_type_byname ("Right_Joining") == UC_JOINING_TYPE_R); ASSERT (uc_joining_type_byname ("RightJoining") == UC_JOINING_TYPE_R); ASSERT (uc_joining_type_byname ("TRANSPARENT") == UC_JOINING_TYPE_T); ASSERT (uc_joining_type_byname ("Transparent") == UC_JOINING_TYPE_T); ASSERT (uc_joining_type_byname ("NON JOINING") == UC_JOINING_TYPE_U); ASSERT (uc_joining_type_byname ("Non Joining") == UC_JOINING_TYPE_U); ASSERT (uc_joining_type_byname ("Non_Joining") == UC_JOINING_TYPE_U); ASSERT (uc_joining_type_byname ("NonJoining") == UC_JOINING_TYPE_U); ASSERT (uc_joining_type_byname ("X") < 0); ASSERT (uc_joining_type_byname ("") < 0); return 0; } �������������������������������������gnulib-20210822~d383792/tests/unictype/test-joiningtype_longname.c����������������������������������0000664�0000000�0000000�00000003017�14110572173�0024642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining type functions. Copyright (C) 2011 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 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_joining_type_long_name (UC_JOINING_TYPE_U), "Non Joining") == 0); ASSERT (strcmp (uc_joining_type_long_name (UC_JOINING_TYPE_T), "Transparent") == 0); ASSERT (strcmp (uc_joining_type_long_name (UC_JOINING_TYPE_C), "Join Causing") == 0); ASSERT (strcmp (uc_joining_type_long_name (UC_JOINING_TYPE_L), "Left Joining") == 0); ASSERT (strcmp (uc_joining_type_long_name (UC_JOINING_TYPE_R), "Right Joining") == 0); ASSERT (strcmp (uc_joining_type_long_name (UC_JOINING_TYPE_D), "Dual Joining") == 0); ASSERT (uc_joining_type_long_name (-1) == NULL); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joiningtype_name.c��������������������������������������0000664�0000000�0000000�00000002653�14110572173�0023767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining type functions. Copyright (C) 2011 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 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_joining_type_name (UC_JOINING_TYPE_U), "U") == 0); ASSERT (strcmp (uc_joining_type_name (UC_JOINING_TYPE_T), "T") == 0); ASSERT (strcmp (uc_joining_type_name (UC_JOINING_TYPE_C), "C") == 0); ASSERT (strcmp (uc_joining_type_name (UC_JOINING_TYPE_L), "L") == 0); ASSERT (strcmp (uc_joining_type_name (UC_JOINING_TYPE_R), "R") == 0); ASSERT (strcmp (uc_joining_type_name (UC_JOINING_TYPE_D), "D") == 0); ASSERT (uc_joining_type_name (-1) == NULL); return 0; } �������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joiningtype_of.c����������������������������������������0000664�0000000�0000000�00000004107�14110572173�0023447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character Arabic joining type functions. Copyright (C) 2011 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 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-joiningtype_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_joining_type (c) == UC_JOINING_TYPE_U || uc_joining_type (c) == UC_JOINING_TYPE_T); ASSERT (uc_joining_type (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (uc_joining_type (c) == UC_JOINING_TYPE_U || uc_joining_type (c) == UC_JOINING_TYPE_T); /* Test distinction between U and T. */ ASSERT (uc_joining_type (0x060C) == UC_JOINING_TYPE_U); ASSERT (uc_joining_type (0x060D) == UC_JOINING_TYPE_U); ASSERT (uc_joining_type (0x060E) == UC_JOINING_TYPE_U); ASSERT (uc_joining_type (0x060F) == UC_JOINING_TYPE_U); ASSERT (uc_joining_type (0x0610) == UC_JOINING_TYPE_T); ASSERT (uc_joining_type (0x0611) == UC_JOINING_TYPE_T); ASSERT (uc_joining_type (0x0612) == UC_JOINING_TYPE_T); ASSERT (uc_joining_type (0x0613) == UC_JOINING_TYPE_T); ASSERT (uc_joining_type (0x0614) == UC_JOINING_TYPE_T); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-joiningtype_of.h����������������������������������������0000664�0000000�0000000�00000057007�14110572173�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Arabic joining type of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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/>. */ { 0x0600, UC_JOINING_TYPE_U }, { 0x0601, UC_JOINING_TYPE_U }, { 0x0602, UC_JOINING_TYPE_U }, { 0x0603, UC_JOINING_TYPE_U }, { 0x0604, UC_JOINING_TYPE_U }, { 0x0605, UC_JOINING_TYPE_U }, { 0x0608, UC_JOINING_TYPE_U }, { 0x060B, UC_JOINING_TYPE_U }, { 0x0620, UC_JOINING_TYPE_D }, { 0x0621, UC_JOINING_TYPE_U }, { 0x0622, UC_JOINING_TYPE_R }, { 0x0623, UC_JOINING_TYPE_R }, { 0x0624, UC_JOINING_TYPE_R }, { 0x0625, UC_JOINING_TYPE_R }, { 0x0626, UC_JOINING_TYPE_D }, { 0x0627, UC_JOINING_TYPE_R }, { 0x0628, UC_JOINING_TYPE_D }, { 0x0629, UC_JOINING_TYPE_R }, { 0x062A, UC_JOINING_TYPE_D }, { 0x062B, UC_JOINING_TYPE_D }, { 0x062C, UC_JOINING_TYPE_D }, { 0x062D, UC_JOINING_TYPE_D }, { 0x062E, UC_JOINING_TYPE_D }, { 0x062F, UC_JOINING_TYPE_R }, { 0x0630, UC_JOINING_TYPE_R }, { 0x0631, UC_JOINING_TYPE_R }, { 0x0632, UC_JOINING_TYPE_R }, { 0x0633, UC_JOINING_TYPE_D }, { 0x0634, UC_JOINING_TYPE_D }, { 0x0635, UC_JOINING_TYPE_D }, { 0x0636, UC_JOINING_TYPE_D }, { 0x0637, UC_JOINING_TYPE_D }, { 0x0638, UC_JOINING_TYPE_D }, { 0x0639, UC_JOINING_TYPE_D }, { 0x063A, UC_JOINING_TYPE_D }, { 0x063B, UC_JOINING_TYPE_D }, { 0x063C, UC_JOINING_TYPE_D }, { 0x063D, UC_JOINING_TYPE_D }, { 0x063E, UC_JOINING_TYPE_D }, { 0x063F, UC_JOINING_TYPE_D }, { 0x0640, UC_JOINING_TYPE_C }, { 0x0641, UC_JOINING_TYPE_D }, { 0x0642, UC_JOINING_TYPE_D }, { 0x0643, UC_JOINING_TYPE_D }, { 0x0644, UC_JOINING_TYPE_D }, { 0x0645, UC_JOINING_TYPE_D }, { 0x0646, UC_JOINING_TYPE_D }, { 0x0647, UC_JOINING_TYPE_D }, { 0x0648, UC_JOINING_TYPE_R }, { 0x0649, UC_JOINING_TYPE_D }, { 0x064A, UC_JOINING_TYPE_D }, { 0x066E, UC_JOINING_TYPE_D }, { 0x066F, UC_JOINING_TYPE_D }, { 0x0671, UC_JOINING_TYPE_R }, { 0x0672, UC_JOINING_TYPE_R }, { 0x0673, UC_JOINING_TYPE_R }, { 0x0674, UC_JOINING_TYPE_U }, { 0x0675, UC_JOINING_TYPE_R }, { 0x0676, UC_JOINING_TYPE_R }, { 0x0677, UC_JOINING_TYPE_R }, { 0x0678, UC_JOINING_TYPE_D }, { 0x0679, UC_JOINING_TYPE_D }, { 0x067A, UC_JOINING_TYPE_D }, { 0x067B, UC_JOINING_TYPE_D }, { 0x067C, UC_JOINING_TYPE_D }, { 0x067D, UC_JOINING_TYPE_D }, { 0x067E, UC_JOINING_TYPE_D }, { 0x067F, UC_JOINING_TYPE_D }, { 0x0680, UC_JOINING_TYPE_D }, { 0x0681, UC_JOINING_TYPE_D }, { 0x0682, UC_JOINING_TYPE_D }, { 0x0683, UC_JOINING_TYPE_D }, { 0x0684, UC_JOINING_TYPE_D }, { 0x0685, UC_JOINING_TYPE_D }, { 0x0686, UC_JOINING_TYPE_D }, { 0x0687, UC_JOINING_TYPE_D }, { 0x0688, UC_JOINING_TYPE_R }, { 0x0689, UC_JOINING_TYPE_R }, { 0x068A, UC_JOINING_TYPE_R }, { 0x068B, UC_JOINING_TYPE_R }, { 0x068C, UC_JOINING_TYPE_R }, { 0x068D, UC_JOINING_TYPE_R }, { 0x068E, UC_JOINING_TYPE_R }, { 0x068F, UC_JOINING_TYPE_R }, { 0x0690, UC_JOINING_TYPE_R }, { 0x0691, UC_JOINING_TYPE_R }, { 0x0692, UC_JOINING_TYPE_R }, { 0x0693, UC_JOINING_TYPE_R }, { 0x0694, UC_JOINING_TYPE_R }, { 0x0695, UC_JOINING_TYPE_R }, { 0x0696, UC_JOINING_TYPE_R }, { 0x0697, UC_JOINING_TYPE_R }, { 0x0698, UC_JOINING_TYPE_R }, { 0x0699, UC_JOINING_TYPE_R }, { 0x069A, UC_JOINING_TYPE_D }, { 0x069B, UC_JOINING_TYPE_D }, { 0x069C, UC_JOINING_TYPE_D }, { 0x069D, UC_JOINING_TYPE_D }, { 0x069E, UC_JOINING_TYPE_D }, { 0x069F, UC_JOINING_TYPE_D }, { 0x06A0, UC_JOINING_TYPE_D }, { 0x06A1, UC_JOINING_TYPE_D }, { 0x06A2, UC_JOINING_TYPE_D }, { 0x06A3, UC_JOINING_TYPE_D }, { 0x06A4, UC_JOINING_TYPE_D }, { 0x06A5, UC_JOINING_TYPE_D }, { 0x06A6, UC_JOINING_TYPE_D }, { 0x06A7, UC_JOINING_TYPE_D }, { 0x06A8, UC_JOINING_TYPE_D }, { 0x06A9, UC_JOINING_TYPE_D }, { 0x06AA, UC_JOINING_TYPE_D }, { 0x06AB, UC_JOINING_TYPE_D }, { 0x06AC, UC_JOINING_TYPE_D }, { 0x06AD, UC_JOINING_TYPE_D }, { 0x06AE, UC_JOINING_TYPE_D }, { 0x06AF, UC_JOINING_TYPE_D }, { 0x06B0, UC_JOINING_TYPE_D }, { 0x06B1, UC_JOINING_TYPE_D }, { 0x06B2, UC_JOINING_TYPE_D }, { 0x06B3, UC_JOINING_TYPE_D }, { 0x06B4, UC_JOINING_TYPE_D }, { 0x06B5, UC_JOINING_TYPE_D }, { 0x06B6, UC_JOINING_TYPE_D }, { 0x06B7, UC_JOINING_TYPE_D }, { 0x06B8, UC_JOINING_TYPE_D }, { 0x06B9, UC_JOINING_TYPE_D }, { 0x06BA, UC_JOINING_TYPE_D }, { 0x06BB, UC_JOINING_TYPE_D }, { 0x06BC, UC_JOINING_TYPE_D }, { 0x06BD, UC_JOINING_TYPE_D }, { 0x06BE, UC_JOINING_TYPE_D }, { 0x06BF, UC_JOINING_TYPE_D }, { 0x06C0, UC_JOINING_TYPE_R }, { 0x06C1, UC_JOINING_TYPE_D }, { 0x06C2, UC_JOINING_TYPE_D }, { 0x06C3, UC_JOINING_TYPE_R }, { 0x06C4, UC_JOINING_TYPE_R }, { 0x06C5, UC_JOINING_TYPE_R }, { 0x06C6, UC_JOINING_TYPE_R }, { 0x06C7, UC_JOINING_TYPE_R }, { 0x06C8, UC_JOINING_TYPE_R }, { 0x06C9, UC_JOINING_TYPE_R }, { 0x06CA, UC_JOINING_TYPE_R }, { 0x06CB, UC_JOINING_TYPE_R }, { 0x06CC, UC_JOINING_TYPE_D }, { 0x06CD, UC_JOINING_TYPE_R }, { 0x06CE, UC_JOINING_TYPE_D }, { 0x06CF, UC_JOINING_TYPE_R }, { 0x06D0, UC_JOINING_TYPE_D }, { 0x06D1, UC_JOINING_TYPE_D }, { 0x06D2, UC_JOINING_TYPE_R }, { 0x06D3, UC_JOINING_TYPE_R }, { 0x06D5, UC_JOINING_TYPE_R }, { 0x06DD, UC_JOINING_TYPE_U }, { 0x06EE, UC_JOINING_TYPE_R }, { 0x06EF, UC_JOINING_TYPE_R }, { 0x06FA, UC_JOINING_TYPE_D }, { 0x06FB, UC_JOINING_TYPE_D }, { 0x06FC, UC_JOINING_TYPE_D }, { 0x06FF, UC_JOINING_TYPE_D }, { 0x0710, UC_JOINING_TYPE_R }, { 0x0712, UC_JOINING_TYPE_D }, { 0x0713, UC_JOINING_TYPE_D }, { 0x0714, UC_JOINING_TYPE_D }, { 0x0715, UC_JOINING_TYPE_R }, { 0x0716, UC_JOINING_TYPE_R }, { 0x0717, UC_JOINING_TYPE_R }, { 0x0718, UC_JOINING_TYPE_R }, { 0x0719, UC_JOINING_TYPE_R }, { 0x071A, UC_JOINING_TYPE_D }, { 0x071B, UC_JOINING_TYPE_D }, { 0x071C, UC_JOINING_TYPE_D }, { 0x071D, UC_JOINING_TYPE_D }, { 0x071E, UC_JOINING_TYPE_R }, { 0x071F, UC_JOINING_TYPE_D }, { 0x0720, UC_JOINING_TYPE_D }, { 0x0721, UC_JOINING_TYPE_D }, { 0x0722, UC_JOINING_TYPE_D }, { 0x0723, UC_JOINING_TYPE_D }, { 0x0724, UC_JOINING_TYPE_D }, { 0x0725, UC_JOINING_TYPE_D }, { 0x0726, UC_JOINING_TYPE_D }, { 0x0727, UC_JOINING_TYPE_D }, { 0x0728, UC_JOINING_TYPE_R }, { 0x0729, UC_JOINING_TYPE_D }, { 0x072A, UC_JOINING_TYPE_R }, { 0x072B, UC_JOINING_TYPE_D }, { 0x072C, UC_JOINING_TYPE_R }, { 0x072D, UC_JOINING_TYPE_D }, { 0x072E, UC_JOINING_TYPE_D }, { 0x072F, UC_JOINING_TYPE_R }, { 0x074D, UC_JOINING_TYPE_R }, { 0x074E, UC_JOINING_TYPE_D }, { 0x074F, UC_JOINING_TYPE_D }, { 0x0750, UC_JOINING_TYPE_D }, { 0x0751, UC_JOINING_TYPE_D }, { 0x0752, UC_JOINING_TYPE_D }, { 0x0753, UC_JOINING_TYPE_D }, { 0x0754, UC_JOINING_TYPE_D }, { 0x0755, UC_JOINING_TYPE_D }, { 0x0756, UC_JOINING_TYPE_D }, { 0x0757, UC_JOINING_TYPE_D }, { 0x0758, UC_JOINING_TYPE_D }, { 0x0759, UC_JOINING_TYPE_R }, { 0x075A, UC_JOINING_TYPE_R }, { 0x075B, UC_JOINING_TYPE_R }, { 0x075C, UC_JOINING_TYPE_D }, { 0x075D, UC_JOINING_TYPE_D }, { 0x075E, UC_JOINING_TYPE_D }, { 0x075F, UC_JOINING_TYPE_D }, { 0x0760, UC_JOINING_TYPE_D }, { 0x0761, UC_JOINING_TYPE_D }, { 0x0762, UC_JOINING_TYPE_D }, { 0x0763, UC_JOINING_TYPE_D }, { 0x0764, UC_JOINING_TYPE_D }, { 0x0765, UC_JOINING_TYPE_D }, { 0x0766, UC_JOINING_TYPE_D }, { 0x0767, UC_JOINING_TYPE_D }, { 0x0768, UC_JOINING_TYPE_D }, { 0x0769, UC_JOINING_TYPE_D }, { 0x076A, UC_JOINING_TYPE_D }, { 0x076B, UC_JOINING_TYPE_R }, { 0x076C, UC_JOINING_TYPE_R }, { 0x076D, UC_JOINING_TYPE_D }, { 0x076E, UC_JOINING_TYPE_D }, { 0x076F, UC_JOINING_TYPE_D }, { 0x0770, UC_JOINING_TYPE_D }, { 0x0771, UC_JOINING_TYPE_R }, { 0x0772, UC_JOINING_TYPE_D }, { 0x0773, UC_JOINING_TYPE_R }, { 0x0774, UC_JOINING_TYPE_R }, { 0x0775, UC_JOINING_TYPE_D }, { 0x0776, UC_JOINING_TYPE_D }, { 0x0777, UC_JOINING_TYPE_D }, { 0x0778, UC_JOINING_TYPE_R }, { 0x0779, UC_JOINING_TYPE_R }, { 0x077A, UC_JOINING_TYPE_D }, { 0x077B, UC_JOINING_TYPE_D }, { 0x077C, UC_JOINING_TYPE_D }, { 0x077D, UC_JOINING_TYPE_D }, { 0x077E, UC_JOINING_TYPE_D }, { 0x077F, UC_JOINING_TYPE_D }, { 0x07CA, UC_JOINING_TYPE_D }, { 0x07CB, UC_JOINING_TYPE_D }, { 0x07CC, UC_JOINING_TYPE_D }, { 0x07CD, UC_JOINING_TYPE_D }, { 0x07CE, UC_JOINING_TYPE_D }, { 0x07CF, UC_JOINING_TYPE_D }, { 0x07D0, UC_JOINING_TYPE_D }, { 0x07D1, UC_JOINING_TYPE_D }, { 0x07D2, UC_JOINING_TYPE_D }, { 0x07D3, UC_JOINING_TYPE_D }, { 0x07D4, UC_JOINING_TYPE_D }, { 0x07D5, UC_JOINING_TYPE_D }, { 0x07D6, UC_JOINING_TYPE_D }, { 0x07D7, UC_JOINING_TYPE_D }, { 0x07D8, UC_JOINING_TYPE_D }, { 0x07D9, UC_JOINING_TYPE_D }, { 0x07DA, UC_JOINING_TYPE_D }, { 0x07DB, UC_JOINING_TYPE_D }, { 0x07DC, UC_JOINING_TYPE_D }, { 0x07DD, UC_JOINING_TYPE_D }, { 0x07DE, UC_JOINING_TYPE_D }, { 0x07DF, UC_JOINING_TYPE_D }, { 0x07E0, UC_JOINING_TYPE_D }, { 0x07E1, UC_JOINING_TYPE_D }, { 0x07E2, UC_JOINING_TYPE_D }, { 0x07E3, UC_JOINING_TYPE_D }, { 0x07E4, UC_JOINING_TYPE_D }, { 0x07E5, UC_JOINING_TYPE_D }, { 0x07E6, UC_JOINING_TYPE_D }, { 0x07E7, UC_JOINING_TYPE_D }, { 0x07E8, UC_JOINING_TYPE_D }, { 0x07E9, UC_JOINING_TYPE_D }, { 0x07EA, UC_JOINING_TYPE_D }, { 0x07FA, UC_JOINING_TYPE_C }, { 0x0840, UC_JOINING_TYPE_R }, { 0x0841, UC_JOINING_TYPE_D }, { 0x0842, UC_JOINING_TYPE_D }, { 0x0843, UC_JOINING_TYPE_D }, { 0x0844, UC_JOINING_TYPE_D }, { 0x0845, UC_JOINING_TYPE_D }, { 0x0846, UC_JOINING_TYPE_R }, { 0x0847, UC_JOINING_TYPE_R }, { 0x0848, UC_JOINING_TYPE_D }, { 0x0849, UC_JOINING_TYPE_R }, { 0x084A, UC_JOINING_TYPE_D }, { 0x084B, UC_JOINING_TYPE_D }, { 0x084C, UC_JOINING_TYPE_D }, { 0x084D, UC_JOINING_TYPE_D }, { 0x084E, UC_JOINING_TYPE_D }, { 0x084F, UC_JOINING_TYPE_D }, { 0x0850, UC_JOINING_TYPE_D }, { 0x0851, UC_JOINING_TYPE_D }, { 0x0852, UC_JOINING_TYPE_D }, { 0x0853, UC_JOINING_TYPE_D }, { 0x0854, UC_JOINING_TYPE_R }, { 0x0855, UC_JOINING_TYPE_D }, { 0x0856, UC_JOINING_TYPE_U }, { 0x0857, UC_JOINING_TYPE_U }, { 0x0858, UC_JOINING_TYPE_U }, { 0x08A0, UC_JOINING_TYPE_D }, { 0x08A1, UC_JOINING_TYPE_D }, { 0x08A2, UC_JOINING_TYPE_D }, { 0x08A3, UC_JOINING_TYPE_D }, { 0x08A4, UC_JOINING_TYPE_D }, { 0x08A5, UC_JOINING_TYPE_D }, { 0x08A6, UC_JOINING_TYPE_D }, { 0x08A7, UC_JOINING_TYPE_D }, { 0x08A8, UC_JOINING_TYPE_D }, { 0x08A9, UC_JOINING_TYPE_D }, { 0x08AA, UC_JOINING_TYPE_R }, { 0x08AB, UC_JOINING_TYPE_R }, { 0x08AC, UC_JOINING_TYPE_R }, { 0x08AD, UC_JOINING_TYPE_U }, { 0x08AE, UC_JOINING_TYPE_R }, { 0x08AF, UC_JOINING_TYPE_D }, { 0x08B0, UC_JOINING_TYPE_D }, { 0x08B1, UC_JOINING_TYPE_R }, { 0x08B2, UC_JOINING_TYPE_R }, { 0x08B3, UC_JOINING_TYPE_D }, { 0x08B4, UC_JOINING_TYPE_D }, { 0x08B6, UC_JOINING_TYPE_D }, { 0x08B7, UC_JOINING_TYPE_D }, { 0x08B8, UC_JOINING_TYPE_D }, { 0x08B9, UC_JOINING_TYPE_R }, { 0x08BA, UC_JOINING_TYPE_D }, { 0x08BB, UC_JOINING_TYPE_D }, { 0x08BC, UC_JOINING_TYPE_D }, { 0x08BD, UC_JOINING_TYPE_D }, { 0x08E2, UC_JOINING_TYPE_U }, { 0x1806, UC_JOINING_TYPE_U }, { 0x1807, UC_JOINING_TYPE_D }, { 0x180A, UC_JOINING_TYPE_C }, { 0x180E, UC_JOINING_TYPE_U }, { 0x1820, UC_JOINING_TYPE_D }, { 0x1821, UC_JOINING_TYPE_D }, { 0x1822, UC_JOINING_TYPE_D }, { 0x1823, UC_JOINING_TYPE_D }, { 0x1824, UC_JOINING_TYPE_D }, { 0x1825, UC_JOINING_TYPE_D }, { 0x1826, UC_JOINING_TYPE_D }, { 0x1827, UC_JOINING_TYPE_D }, { 0x1828, UC_JOINING_TYPE_D }, { 0x1829, UC_JOINING_TYPE_D }, { 0x182A, UC_JOINING_TYPE_D }, { 0x182B, UC_JOINING_TYPE_D }, { 0x182C, UC_JOINING_TYPE_D }, { 0x182D, UC_JOINING_TYPE_D }, { 0x182E, UC_JOINING_TYPE_D }, { 0x182F, UC_JOINING_TYPE_D }, { 0x1830, UC_JOINING_TYPE_D }, { 0x1831, UC_JOINING_TYPE_D }, { 0x1832, UC_JOINING_TYPE_D }, { 0x1833, UC_JOINING_TYPE_D }, { 0x1834, UC_JOINING_TYPE_D }, { 0x1835, UC_JOINING_TYPE_D }, { 0x1836, UC_JOINING_TYPE_D }, { 0x1837, UC_JOINING_TYPE_D }, { 0x1838, UC_JOINING_TYPE_D }, { 0x1839, UC_JOINING_TYPE_D }, { 0x183A, UC_JOINING_TYPE_D }, { 0x183B, UC_JOINING_TYPE_D }, { 0x183C, UC_JOINING_TYPE_D }, { 0x183D, UC_JOINING_TYPE_D }, { 0x183E, UC_JOINING_TYPE_D }, { 0x183F, UC_JOINING_TYPE_D }, { 0x1840, UC_JOINING_TYPE_D }, { 0x1841, UC_JOINING_TYPE_D }, { 0x1842, UC_JOINING_TYPE_D }, { 0x1843, UC_JOINING_TYPE_D }, { 0x1844, UC_JOINING_TYPE_D }, { 0x1845, UC_JOINING_TYPE_D }, { 0x1846, UC_JOINING_TYPE_D }, { 0x1847, UC_JOINING_TYPE_D }, { 0x1848, UC_JOINING_TYPE_D }, { 0x1849, UC_JOINING_TYPE_D }, { 0x184A, UC_JOINING_TYPE_D }, { 0x184B, UC_JOINING_TYPE_D }, { 0x184C, UC_JOINING_TYPE_D }, { 0x184D, UC_JOINING_TYPE_D }, { 0x184E, UC_JOINING_TYPE_D }, { 0x184F, UC_JOINING_TYPE_D }, { 0x1850, UC_JOINING_TYPE_D }, { 0x1851, UC_JOINING_TYPE_D }, { 0x1852, UC_JOINING_TYPE_D }, { 0x1853, UC_JOINING_TYPE_D }, { 0x1854, UC_JOINING_TYPE_D }, { 0x1855, UC_JOINING_TYPE_D }, { 0x1856, UC_JOINING_TYPE_D }, { 0x1857, UC_JOINING_TYPE_D }, { 0x1858, UC_JOINING_TYPE_D }, { 0x1859, UC_JOINING_TYPE_D }, { 0x185A, UC_JOINING_TYPE_D }, { 0x185B, UC_JOINING_TYPE_D }, { 0x185C, UC_JOINING_TYPE_D }, { 0x185D, UC_JOINING_TYPE_D }, { 0x185E, UC_JOINING_TYPE_D }, { 0x185F, UC_JOINING_TYPE_D }, { 0x1860, UC_JOINING_TYPE_D }, { 0x1861, UC_JOINING_TYPE_D }, { 0x1862, UC_JOINING_TYPE_D }, { 0x1863, UC_JOINING_TYPE_D }, { 0x1864, UC_JOINING_TYPE_D }, { 0x1865, UC_JOINING_TYPE_D }, { 0x1866, UC_JOINING_TYPE_D }, { 0x1867, UC_JOINING_TYPE_D }, { 0x1868, UC_JOINING_TYPE_D }, { 0x1869, UC_JOINING_TYPE_D }, { 0x186A, UC_JOINING_TYPE_D }, { 0x186B, UC_JOINING_TYPE_D }, { 0x186C, UC_JOINING_TYPE_D }, { 0x186D, UC_JOINING_TYPE_D }, { 0x186E, UC_JOINING_TYPE_D }, { 0x186F, UC_JOINING_TYPE_D }, { 0x1870, UC_JOINING_TYPE_D }, { 0x1871, UC_JOINING_TYPE_D }, { 0x1872, UC_JOINING_TYPE_D }, { 0x1873, UC_JOINING_TYPE_D }, { 0x1874, UC_JOINING_TYPE_D }, { 0x1875, UC_JOINING_TYPE_D }, { 0x1876, UC_JOINING_TYPE_D }, { 0x1877, UC_JOINING_TYPE_D }, { 0x1880, UC_JOINING_TYPE_U }, { 0x1881, UC_JOINING_TYPE_U }, { 0x1882, UC_JOINING_TYPE_U }, { 0x1883, UC_JOINING_TYPE_U }, { 0x1884, UC_JOINING_TYPE_U }, { 0x1885, UC_JOINING_TYPE_T }, { 0x1886, UC_JOINING_TYPE_T }, { 0x1887, UC_JOINING_TYPE_D }, { 0x1888, UC_JOINING_TYPE_D }, { 0x1889, UC_JOINING_TYPE_D }, { 0x188A, UC_JOINING_TYPE_D }, { 0x188B, UC_JOINING_TYPE_D }, { 0x188C, UC_JOINING_TYPE_D }, { 0x188D, UC_JOINING_TYPE_D }, { 0x188E, UC_JOINING_TYPE_D }, { 0x188F, UC_JOINING_TYPE_D }, { 0x1890, UC_JOINING_TYPE_D }, { 0x1891, UC_JOINING_TYPE_D }, { 0x1892, UC_JOINING_TYPE_D }, { 0x1893, UC_JOINING_TYPE_D }, { 0x1894, UC_JOINING_TYPE_D }, { 0x1895, UC_JOINING_TYPE_D }, { 0x1896, UC_JOINING_TYPE_D }, { 0x1897, UC_JOINING_TYPE_D }, { 0x1898, UC_JOINING_TYPE_D }, { 0x1899, UC_JOINING_TYPE_D }, { 0x189A, UC_JOINING_TYPE_D }, { 0x189B, UC_JOINING_TYPE_D }, { 0x189C, UC_JOINING_TYPE_D }, { 0x189D, UC_JOINING_TYPE_D }, { 0x189E, UC_JOINING_TYPE_D }, { 0x189F, UC_JOINING_TYPE_D }, { 0x18A0, UC_JOINING_TYPE_D }, { 0x18A1, UC_JOINING_TYPE_D }, { 0x18A2, UC_JOINING_TYPE_D }, { 0x18A3, UC_JOINING_TYPE_D }, { 0x18A4, UC_JOINING_TYPE_D }, { 0x18A5, UC_JOINING_TYPE_D }, { 0x18A6, UC_JOINING_TYPE_D }, { 0x18A7, UC_JOINING_TYPE_D }, { 0x18A8, UC_JOINING_TYPE_D }, { 0x18AA, UC_JOINING_TYPE_D }, { 0x200C, UC_JOINING_TYPE_U }, { 0x200D, UC_JOINING_TYPE_C }, { 0x202F, UC_JOINING_TYPE_U }, { 0x2066, UC_JOINING_TYPE_U }, { 0x2067, UC_JOINING_TYPE_U }, { 0x2068, UC_JOINING_TYPE_U }, { 0x2069, UC_JOINING_TYPE_U }, { 0xA840, UC_JOINING_TYPE_D }, { 0xA841, UC_JOINING_TYPE_D }, { 0xA842, UC_JOINING_TYPE_D }, { 0xA843, UC_JOINING_TYPE_D }, { 0xA844, UC_JOINING_TYPE_D }, { 0xA845, UC_JOINING_TYPE_D }, { 0xA846, UC_JOINING_TYPE_D }, { 0xA847, UC_JOINING_TYPE_D }, { 0xA848, UC_JOINING_TYPE_D }, { 0xA849, UC_JOINING_TYPE_D }, { 0xA84A, UC_JOINING_TYPE_D }, { 0xA84B, UC_JOINING_TYPE_D }, { 0xA84C, UC_JOINING_TYPE_D }, { 0xA84D, UC_JOINING_TYPE_D }, { 0xA84E, UC_JOINING_TYPE_D }, { 0xA84F, UC_JOINING_TYPE_D }, { 0xA850, UC_JOINING_TYPE_D }, { 0xA851, UC_JOINING_TYPE_D }, { 0xA852, UC_JOINING_TYPE_D }, { 0xA853, UC_JOINING_TYPE_D }, { 0xA854, UC_JOINING_TYPE_D }, { 0xA855, UC_JOINING_TYPE_D }, { 0xA856, UC_JOINING_TYPE_D }, { 0xA857, UC_JOINING_TYPE_D }, { 0xA858, UC_JOINING_TYPE_D }, { 0xA859, UC_JOINING_TYPE_D }, { 0xA85A, UC_JOINING_TYPE_D }, { 0xA85B, UC_JOINING_TYPE_D }, { 0xA85C, UC_JOINING_TYPE_D }, { 0xA85D, UC_JOINING_TYPE_D }, { 0xA85E, UC_JOINING_TYPE_D }, { 0xA85F, UC_JOINING_TYPE_D }, { 0xA860, UC_JOINING_TYPE_D }, { 0xA861, UC_JOINING_TYPE_D }, { 0xA862, UC_JOINING_TYPE_D }, { 0xA863, UC_JOINING_TYPE_D }, { 0xA864, UC_JOINING_TYPE_D }, { 0xA865, UC_JOINING_TYPE_D }, { 0xA866, UC_JOINING_TYPE_D }, { 0xA867, UC_JOINING_TYPE_D }, { 0xA868, UC_JOINING_TYPE_D }, { 0xA869, UC_JOINING_TYPE_D }, { 0xA86A, UC_JOINING_TYPE_D }, { 0xA86B, UC_JOINING_TYPE_D }, { 0xA86C, UC_JOINING_TYPE_D }, { 0xA86D, UC_JOINING_TYPE_D }, { 0xA86E, UC_JOINING_TYPE_D }, { 0xA86F, UC_JOINING_TYPE_D }, { 0xA870, UC_JOINING_TYPE_D }, { 0xA871, UC_JOINING_TYPE_D }, { 0xA872, UC_JOINING_TYPE_L }, { 0xA873, UC_JOINING_TYPE_U }, { 0x10AC0, UC_JOINING_TYPE_D }, { 0x10AC1, UC_JOINING_TYPE_D }, { 0x10AC2, UC_JOINING_TYPE_D }, { 0x10AC3, UC_JOINING_TYPE_D }, { 0x10AC4, UC_JOINING_TYPE_D }, { 0x10AC5, UC_JOINING_TYPE_R }, { 0x10AC6, UC_JOINING_TYPE_U }, { 0x10AC7, UC_JOINING_TYPE_R }, { 0x10AC8, UC_JOINING_TYPE_U }, { 0x10AC9, UC_JOINING_TYPE_R }, { 0x10ACA, UC_JOINING_TYPE_R }, { 0x10ACB, UC_JOINING_TYPE_U }, { 0x10ACC, UC_JOINING_TYPE_U }, { 0x10ACD, UC_JOINING_TYPE_L }, { 0x10ACE, UC_JOINING_TYPE_R }, { 0x10ACF, UC_JOINING_TYPE_R }, { 0x10AD0, UC_JOINING_TYPE_R }, { 0x10AD1, UC_JOINING_TYPE_R }, { 0x10AD2, UC_JOINING_TYPE_R }, { 0x10AD3, UC_JOINING_TYPE_D }, { 0x10AD4, UC_JOINING_TYPE_D }, { 0x10AD5, UC_JOINING_TYPE_D }, { 0x10AD6, UC_JOINING_TYPE_D }, { 0x10AD7, UC_JOINING_TYPE_L }, { 0x10AD8, UC_JOINING_TYPE_D }, { 0x10AD9, UC_JOINING_TYPE_D }, { 0x10ADA, UC_JOINING_TYPE_D }, { 0x10ADB, UC_JOINING_TYPE_D }, { 0x10ADC, UC_JOINING_TYPE_D }, { 0x10ADD, UC_JOINING_TYPE_R }, { 0x10ADE, UC_JOINING_TYPE_D }, { 0x10ADF, UC_JOINING_TYPE_D }, { 0x10AE0, UC_JOINING_TYPE_D }, { 0x10AE1, UC_JOINING_TYPE_R }, { 0x10AE2, UC_JOINING_TYPE_U }, { 0x10AE3, UC_JOINING_TYPE_U }, { 0x10AE4, UC_JOINING_TYPE_R }, { 0x10AEB, UC_JOINING_TYPE_D }, { 0x10AEC, UC_JOINING_TYPE_D }, { 0x10AED, UC_JOINING_TYPE_D }, { 0x10AEE, UC_JOINING_TYPE_D }, { 0x10AEF, UC_JOINING_TYPE_R }, { 0x10B80, UC_JOINING_TYPE_D }, { 0x10B81, UC_JOINING_TYPE_R }, { 0x10B82, UC_JOINING_TYPE_D }, { 0x10B83, UC_JOINING_TYPE_R }, { 0x10B84, UC_JOINING_TYPE_R }, { 0x10B85, UC_JOINING_TYPE_R }, { 0x10B86, UC_JOINING_TYPE_D }, { 0x10B87, UC_JOINING_TYPE_D }, { 0x10B88, UC_JOINING_TYPE_D }, { 0x10B89, UC_JOINING_TYPE_R }, { 0x10B8A, UC_JOINING_TYPE_D }, { 0x10B8B, UC_JOINING_TYPE_D }, { 0x10B8C, UC_JOINING_TYPE_R }, { 0x10B8D, UC_JOINING_TYPE_D }, { 0x10B8E, UC_JOINING_TYPE_R }, { 0x10B8F, UC_JOINING_TYPE_R }, { 0x10B90, UC_JOINING_TYPE_D }, { 0x10B91, UC_JOINING_TYPE_R }, { 0x10BA9, UC_JOINING_TYPE_R }, { 0x10BAA, UC_JOINING_TYPE_R }, { 0x10BAB, UC_JOINING_TYPE_R }, { 0x10BAC, UC_JOINING_TYPE_R }, { 0x10BAD, UC_JOINING_TYPE_D }, { 0x10BAE, UC_JOINING_TYPE_D }, { 0x10BAF, UC_JOINING_TYPE_U }, { 0x1E900, UC_JOINING_TYPE_D }, { 0x1E901, UC_JOINING_TYPE_D }, { 0x1E902, UC_JOINING_TYPE_D }, { 0x1E903, UC_JOINING_TYPE_D }, { 0x1E904, UC_JOINING_TYPE_D }, { 0x1E905, UC_JOINING_TYPE_D }, { 0x1E906, UC_JOINING_TYPE_D }, { 0x1E907, UC_JOINING_TYPE_D }, { 0x1E908, UC_JOINING_TYPE_D }, { 0x1E909, UC_JOINING_TYPE_D }, { 0x1E90A, UC_JOINING_TYPE_D }, { 0x1E90B, UC_JOINING_TYPE_D }, { 0x1E90C, UC_JOINING_TYPE_D }, { 0x1E90D, UC_JOINING_TYPE_D }, { 0x1E90E, UC_JOINING_TYPE_D }, { 0x1E90F, UC_JOINING_TYPE_D }, { 0x1E910, UC_JOINING_TYPE_D }, { 0x1E911, UC_JOINING_TYPE_D }, { 0x1E912, UC_JOINING_TYPE_D }, { 0x1E913, UC_JOINING_TYPE_D }, { 0x1E914, UC_JOINING_TYPE_D }, { 0x1E915, UC_JOINING_TYPE_D }, { 0x1E916, UC_JOINING_TYPE_D }, { 0x1E917, UC_JOINING_TYPE_D }, { 0x1E918, UC_JOINING_TYPE_D }, { 0x1E919, UC_JOINING_TYPE_D }, { 0x1E91A, UC_JOINING_TYPE_D }, { 0x1E91B, UC_JOINING_TYPE_D }, { 0x1E91C, UC_JOINING_TYPE_D }, { 0x1E91D, UC_JOINING_TYPE_D }, { 0x1E91E, UC_JOINING_TYPE_D }, { 0x1E91F, UC_JOINING_TYPE_D }, { 0x1E920, UC_JOINING_TYPE_D }, { 0x1E921, UC_JOINING_TYPE_D }, { 0x1E922, UC_JOINING_TYPE_D }, { 0x1E923, UC_JOINING_TYPE_D }, { 0x1E924, UC_JOINING_TYPE_D }, { 0x1E925, UC_JOINING_TYPE_D }, { 0x1E926, UC_JOINING_TYPE_D }, { 0x1E927, UC_JOINING_TYPE_D }, { 0x1E928, UC_JOINING_TYPE_D }, { 0x1E929, UC_JOINING_TYPE_D }, { 0x1E92A, UC_JOINING_TYPE_D }, { 0x1E92B, UC_JOINING_TYPE_D }, { 0x1E92C, UC_JOINING_TYPE_D }, { 0x1E92D, UC_JOINING_TYPE_D }, { 0x1E92E, UC_JOINING_TYPE_D }, { 0x1E92F, UC_JOINING_TYPE_D }, { 0x1E930, UC_JOINING_TYPE_D }, { 0x1E931, UC_JOINING_TYPE_D }, { 0x1E932, UC_JOINING_TYPE_D }, { 0x1E933, UC_JOINING_TYPE_D }, { 0x1E934, UC_JOINING_TYPE_D }, { 0x1E935, UC_JOINING_TYPE_D }, { 0x1E936, UC_JOINING_TYPE_D }, { 0x1E937, UC_JOINING_TYPE_D }, { 0x1E938, UC_JOINING_TYPE_D }, { 0x1E939, UC_JOINING_TYPE_D }, { 0x1E93A, UC_JOINING_TYPE_D }, { 0x1E93B, UC_JOINING_TYPE_D }, { 0x1E93C, UC_JOINING_TYPE_D }, { 0x1E93D, UC_JOINING_TYPE_D }, { 0x1E93E, UC_JOINING_TYPE_D }, { 0x1E93F, UC_JOINING_TYPE_D }, { 0x1E940, UC_JOINING_TYPE_D }, { 0x1E941, UC_JOINING_TYPE_D }, { 0x1E942, UC_JOINING_TYPE_D }, { 0x1E943, UC_JOINING_TYPE_D } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-mirror.c������������������������������������������������0000664�0000000�0000000�00000002635�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ucs4_t mirrored; ASSERT (uc_mirror_char ('(', &mirrored) && mirrored == ')'); ASSERT (uc_mirror_char (')', &mirrored) && mirrored == '('); ASSERT (uc_mirror_char ('<', &mirrored) && mirrored == '>'); ASSERT (uc_mirror_char ('>', &mirrored) && mirrored == '<'); ASSERT (uc_mirror_char ('[', &mirrored) && mirrored == ']'); ASSERT (uc_mirror_char (']', &mirrored) && mirrored == '['); ASSERT (uc_mirror_char ('{', &mirrored) && mirrored == '}'); ASSERT (uc_mirror_char ('}', &mirrored) && mirrored == '{'); ASSERT (!uc_mirror_char ('X', &mirrored)); return 0; } ���������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-numeric.c�����������������������������������������������0000664�0000000�0000000�00000003113�14110572173�0022062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" static const struct { unsigned int ch; int numerator; int denominator; } mapping[] = { #include "test-numeric.h" }; int main () { unsigned int c; uc_fraction_t value; size_t i; c = 0; for (i = 0; i < SIZEOF (mapping); i++) { for (; c < mapping[i].ch; c++) { value = uc_numeric_value (c); ASSERT (value.numerator == 0 && value.denominator == 0); } /* Here c = mapping[i].ch. */ value = uc_numeric_value (c); ASSERT (value.numerator == mapping[i].numerator && value.denominator == mapping[i].denominator); c++; } for (; c < 0x110000; c++) { value = uc_numeric_value (c); ASSERT (value.numerator == 0 && value.denominator == 0); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-numeric.h�����������������������������������������������0000664�0000000�0000000�00000105032�14110572173�0022072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Numeric values of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 9.0.0. */ /* Copyright (C) 2000-2021 Free Software Foundation, Inc. This 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/>. */ { 0x0030, 0, 1 }, { 0x0031, 1, 1 }, { 0x0032, 2, 1 }, { 0x0033, 3, 1 }, { 0x0034, 4, 1 }, { 0x0035, 5, 1 }, { 0x0036, 6, 1 }, { 0x0037, 7, 1 }, { 0x0038, 8, 1 }, { 0x0039, 9, 1 }, { 0x00B2, 2, 1 }, { 0x00B3, 3, 1 }, { 0x00B9, 1, 1 }, { 0x00BC, 1, 4 }, { 0x00BD, 1, 2 }, { 0x00BE, 3, 4 }, { 0x0660, 0, 1 }, { 0x0661, 1, 1 }, { 0x0662, 2, 1 }, { 0x0663, 3, 1 }, { 0x0664, 4, 1 }, { 0x0665, 5, 1 }, { 0x0666, 6, 1 }, { 0x0667, 7, 1 }, { 0x0668, 8, 1 }, { 0x0669, 9, 1 }, { 0x06F0, 0, 1 }, { 0x06F1, 1, 1 }, { 0x06F2, 2, 1 }, { 0x06F3, 3, 1 }, { 0x06F4, 4, 1 }, { 0x06F5, 5, 1 }, { 0x06F6, 6, 1 }, { 0x06F7, 7, 1 }, { 0x06F8, 8, 1 }, { 0x06F9, 9, 1 }, { 0x07C0, 0, 1 }, { 0x07C1, 1, 1 }, { 0x07C2, 2, 1 }, { 0x07C3, 3, 1 }, { 0x07C4, 4, 1 }, { 0x07C5, 5, 1 }, { 0x07C6, 6, 1 }, { 0x07C7, 7, 1 }, { 0x07C8, 8, 1 }, { 0x07C9, 9, 1 }, { 0x0966, 0, 1 }, { 0x0967, 1, 1 }, { 0x0968, 2, 1 }, { 0x0969, 3, 1 }, { 0x096A, 4, 1 }, { 0x096B, 5, 1 }, { 0x096C, 6, 1 }, { 0x096D, 7, 1 }, { 0x096E, 8, 1 }, { 0x096F, 9, 1 }, { 0x09E6, 0, 1 }, { 0x09E7, 1, 1 }, { 0x09E8, 2, 1 }, { 0x09E9, 3, 1 }, { 0x09EA, 4, 1 }, { 0x09EB, 5, 1 }, { 0x09EC, 6, 1 }, { 0x09ED, 7, 1 }, { 0x09EE, 8, 1 }, { 0x09EF, 9, 1 }, { 0x09F4, 1, 16 }, { 0x09F5, 1, 8 }, { 0x09F6, 3, 16 }, { 0x09F7, 1, 4 }, { 0x09F8, 3, 4 }, { 0x09F9, 16, 1 }, { 0x0A66, 0, 1 }, { 0x0A67, 1, 1 }, { 0x0A68, 2, 1 }, { 0x0A69, 3, 1 }, { 0x0A6A, 4, 1 }, { 0x0A6B, 5, 1 }, { 0x0A6C, 6, 1 }, { 0x0A6D, 7, 1 }, { 0x0A6E, 8, 1 }, { 0x0A6F, 9, 1 }, { 0x0AE6, 0, 1 }, { 0x0AE7, 1, 1 }, { 0x0AE8, 2, 1 }, { 0x0AE9, 3, 1 }, { 0x0AEA, 4, 1 }, { 0x0AEB, 5, 1 }, { 0x0AEC, 6, 1 }, { 0x0AED, 7, 1 }, { 0x0AEE, 8, 1 }, { 0x0AEF, 9, 1 }, { 0x0B66, 0, 1 }, { 0x0B67, 1, 1 }, { 0x0B68, 2, 1 }, { 0x0B69, 3, 1 }, { 0x0B6A, 4, 1 }, { 0x0B6B, 5, 1 }, { 0x0B6C, 6, 1 }, { 0x0B6D, 7, 1 }, { 0x0B6E, 8, 1 }, { 0x0B6F, 9, 1 }, { 0x0B72, 1, 4 }, { 0x0B73, 1, 2 }, { 0x0B74, 3, 4 }, { 0x0B75, 1, 16 }, { 0x0B76, 1, 8 }, { 0x0B77, 3, 16 }, { 0x0BE6, 0, 1 }, { 0x0BE7, 1, 1 }, { 0x0BE8, 2, 1 }, { 0x0BE9, 3, 1 }, { 0x0BEA, 4, 1 }, { 0x0BEB, 5, 1 }, { 0x0BEC, 6, 1 }, { 0x0BED, 7, 1 }, { 0x0BEE, 8, 1 }, { 0x0BEF, 9, 1 }, { 0x0BF0, 10, 1 }, { 0x0BF1, 100, 1 }, { 0x0BF2, 1000, 1 }, { 0x0C66, 0, 1 }, { 0x0C67, 1, 1 }, { 0x0C68, 2, 1 }, { 0x0C69, 3, 1 }, { 0x0C6A, 4, 1 }, { 0x0C6B, 5, 1 }, { 0x0C6C, 6, 1 }, { 0x0C6D, 7, 1 }, { 0x0C6E, 8, 1 }, { 0x0C6F, 9, 1 }, { 0x0C78, 0, 1 }, { 0x0C79, 1, 1 }, { 0x0C7A, 2, 1 }, { 0x0C7B, 3, 1 }, { 0x0C7C, 1, 1 }, { 0x0C7D, 2, 1 }, { 0x0C7E, 3, 1 }, { 0x0CE6, 0, 1 }, { 0x0CE7, 1, 1 }, { 0x0CE8, 2, 1 }, { 0x0CE9, 3, 1 }, { 0x0CEA, 4, 1 }, { 0x0CEB, 5, 1 }, { 0x0CEC, 6, 1 }, { 0x0CED, 7, 1 }, { 0x0CEE, 8, 1 }, { 0x0CEF, 9, 1 }, { 0x0D58, 1, 160 }, { 0x0D59, 1, 40 }, { 0x0D5A, 3, 80 }, { 0x0D5B, 1, 20 }, { 0x0D5C, 1, 10 }, { 0x0D5D, 3, 20 }, { 0x0D5E, 1, 5 }, { 0x0D66, 0, 1 }, { 0x0D67, 1, 1 }, { 0x0D68, 2, 1 }, { 0x0D69, 3, 1 }, { 0x0D6A, 4, 1 }, { 0x0D6B, 5, 1 }, { 0x0D6C, 6, 1 }, { 0x0D6D, 7, 1 }, { 0x0D6E, 8, 1 }, { 0x0D6F, 9, 1 }, { 0x0D70, 10, 1 }, { 0x0D71, 100, 1 }, { 0x0D72, 1000, 1 }, { 0x0D73, 1, 4 }, { 0x0D74, 1, 2 }, { 0x0D75, 3, 4 }, { 0x0D76, 1, 16 }, { 0x0D77, 1, 8 }, { 0x0D78, 3, 16 }, { 0x0DE6, 0, 1 }, { 0x0DE7, 1, 1 }, { 0x0DE8, 2, 1 }, { 0x0DE9, 3, 1 }, { 0x0DEA, 4, 1 }, { 0x0DEB, 5, 1 }, { 0x0DEC, 6, 1 }, { 0x0DED, 7, 1 }, { 0x0DEE, 8, 1 }, { 0x0DEF, 9, 1 }, { 0x0E50, 0, 1 }, { 0x0E51, 1, 1 }, { 0x0E52, 2, 1 }, { 0x0E53, 3, 1 }, { 0x0E54, 4, 1 }, { 0x0E55, 5, 1 }, { 0x0E56, 6, 1 }, { 0x0E57, 7, 1 }, { 0x0E58, 8, 1 }, { 0x0E59, 9, 1 }, { 0x0ED0, 0, 1 }, { 0x0ED1, 1, 1 }, { 0x0ED2, 2, 1 }, { 0x0ED3, 3, 1 }, { 0x0ED4, 4, 1 }, { 0x0ED5, 5, 1 }, { 0x0ED6, 6, 1 }, { 0x0ED7, 7, 1 }, { 0x0ED8, 8, 1 }, { 0x0ED9, 9, 1 }, { 0x0F20, 0, 1 }, { 0x0F21, 1, 1 }, { 0x0F22, 2, 1 }, { 0x0F23, 3, 1 }, { 0x0F24, 4, 1 }, { 0x0F25, 5, 1 }, { 0x0F26, 6, 1 }, { 0x0F27, 7, 1 }, { 0x0F28, 8, 1 }, { 0x0F29, 9, 1 }, { 0x0F2A, 1, 2 }, { 0x0F2B, 3, 2 }, { 0x0F2C, 5, 2 }, { 0x0F2D, 7, 2 }, { 0x0F2E, 9, 2 }, { 0x0F2F, 11, 2 }, { 0x0F30, 13, 2 }, { 0x0F31, 15, 2 }, { 0x0F32, 17, 2 }, { 0x0F33, -1, 2 }, { 0x1040, 0, 1 }, { 0x1041, 1, 1 }, { 0x1042, 2, 1 }, { 0x1043, 3, 1 }, { 0x1044, 4, 1 }, { 0x1045, 5, 1 }, { 0x1046, 6, 1 }, { 0x1047, 7, 1 }, { 0x1048, 8, 1 }, { 0x1049, 9, 1 }, { 0x1090, 0, 1 }, { 0x1091, 1, 1 }, { 0x1092, 2, 1 }, { 0x1093, 3, 1 }, { 0x1094, 4, 1 }, { 0x1095, 5, 1 }, { 0x1096, 6, 1 }, { 0x1097, 7, 1 }, { 0x1098, 8, 1 }, { 0x1099, 9, 1 }, { 0x1369, 1, 1 }, { 0x136A, 2, 1 }, { 0x136B, 3, 1 }, { 0x136C, 4, 1 }, { 0x136D, 5, 1 }, { 0x136E, 6, 1 }, { 0x136F, 7, 1 }, { 0x1370, 8, 1 }, { 0x1371, 9, 1 }, { 0x1372, 10, 1 }, { 0x1373, 20, 1 }, { 0x1374, 30, 1 }, { 0x1375, 40, 1 }, { 0x1376, 50, 1 }, { 0x1377, 60, 1 }, { 0x1378, 70, 1 }, { 0x1379, 80, 1 }, { 0x137A, 90, 1 }, { 0x137B, 100, 1 }, { 0x137C, 10000, 1 }, { 0x16EE, 17, 1 }, { 0x16EF, 18, 1 }, { 0x16F0, 19, 1 }, { 0x17E0, 0, 1 }, { 0x17E1, 1, 1 }, { 0x17E2, 2, 1 }, { 0x17E3, 3, 1 }, { 0x17E4, 4, 1 }, { 0x17E5, 5, 1 }, { 0x17E6, 6, 1 }, { 0x17E7, 7, 1 }, { 0x17E8, 8, 1 }, { 0x17E9, 9, 1 }, { 0x17F0, 0, 1 }, { 0x17F1, 1, 1 }, { 0x17F2, 2, 1 }, { 0x17F3, 3, 1 }, { 0x17F4, 4, 1 }, { 0x17F5, 5, 1 }, { 0x17F6, 6, 1 }, { 0x17F7, 7, 1 }, { 0x17F8, 8, 1 }, { 0x17F9, 9, 1 }, { 0x1810, 0, 1 }, { 0x1811, 1, 1 }, { 0x1812, 2, 1 }, { 0x1813, 3, 1 }, { 0x1814, 4, 1 }, { 0x1815, 5, 1 }, { 0x1816, 6, 1 }, { 0x1817, 7, 1 }, { 0x1818, 8, 1 }, { 0x1819, 9, 1 }, { 0x1946, 0, 1 }, { 0x1947, 1, 1 }, { 0x1948, 2, 1 }, { 0x1949, 3, 1 }, { 0x194A, 4, 1 }, { 0x194B, 5, 1 }, { 0x194C, 6, 1 }, { 0x194D, 7, 1 }, { 0x194E, 8, 1 }, { 0x194F, 9, 1 }, { 0x19D0, 0, 1 }, { 0x19D1, 1, 1 }, { 0x19D2, 2, 1 }, { 0x19D3, 3, 1 }, { 0x19D4, 4, 1 }, { 0x19D5, 5, 1 }, { 0x19D6, 6, 1 }, { 0x19D7, 7, 1 }, { 0x19D8, 8, 1 }, { 0x19D9, 9, 1 }, { 0x19DA, 1, 1 }, { 0x1A80, 0, 1 }, { 0x1A81, 1, 1 }, { 0x1A82, 2, 1 }, { 0x1A83, 3, 1 }, { 0x1A84, 4, 1 }, { 0x1A85, 5, 1 }, { 0x1A86, 6, 1 }, { 0x1A87, 7, 1 }, { 0x1A88, 8, 1 }, { 0x1A89, 9, 1 }, { 0x1A90, 0, 1 }, { 0x1A91, 1, 1 }, { 0x1A92, 2, 1 }, { 0x1A93, 3, 1 }, { 0x1A94, 4, 1 }, { 0x1A95, 5, 1 }, { 0x1A96, 6, 1 }, { 0x1A97, 7, 1 }, { 0x1A98, 8, 1 }, { 0x1A99, 9, 1 }, { 0x1B50, 0, 1 }, { 0x1B51, 1, 1 }, { 0x1B52, 2, 1 }, { 0x1B53, 3, 1 }, { 0x1B54, 4, 1 }, { 0x1B55, 5, 1 }, { 0x1B56, 6, 1 }, { 0x1B57, 7, 1 }, { 0x1B58, 8, 1 }, { 0x1B59, 9, 1 }, { 0x1BB0, 0, 1 }, { 0x1BB1, 1, 1 }, { 0x1BB2, 2, 1 }, { 0x1BB3, 3, 1 }, { 0x1BB4, 4, 1 }, { 0x1BB5, 5, 1 }, { 0x1BB6, 6, 1 }, { 0x1BB7, 7, 1 }, { 0x1BB8, 8, 1 }, { 0x1BB9, 9, 1 }, { 0x1C40, 0, 1 }, { 0x1C41, 1, 1 }, { 0x1C42, 2, 1 }, { 0x1C43, 3, 1 }, { 0x1C44, 4, 1 }, { 0x1C45, 5, 1 }, { 0x1C46, 6, 1 }, { 0x1C47, 7, 1 }, { 0x1C48, 8, 1 }, { 0x1C49, 9, 1 }, { 0x1C50, 0, 1 }, { 0x1C51, 1, 1 }, { 0x1C52, 2, 1 }, { 0x1C53, 3, 1 }, { 0x1C54, 4, 1 }, { 0x1C55, 5, 1 }, { 0x1C56, 6, 1 }, { 0x1C57, 7, 1 }, { 0x1C58, 8, 1 }, { 0x1C59, 9, 1 }, { 0x2070, 0, 1 }, { 0x2074, 4, 1 }, { 0x2075, 5, 1 }, { 0x2076, 6, 1 }, { 0x2077, 7, 1 }, { 0x2078, 8, 1 }, { 0x2079, 9, 1 }, { 0x2080, 0, 1 }, { 0x2081, 1, 1 }, { 0x2082, 2, 1 }, { 0x2083, 3, 1 }, { 0x2084, 4, 1 }, { 0x2085, 5, 1 }, { 0x2086, 6, 1 }, { 0x2087, 7, 1 }, { 0x2088, 8, 1 }, { 0x2089, 9, 1 }, { 0x2150, 1, 7 }, { 0x2151, 1, 9 }, { 0x2152, 1, 10 }, { 0x2153, 1, 3 }, { 0x2154, 2, 3 }, { 0x2155, 1, 5 }, { 0x2156, 2, 5 }, { 0x2157, 3, 5 }, { 0x2158, 4, 5 }, { 0x2159, 1, 6 }, { 0x215A, 5, 6 }, { 0x215B, 1, 8 }, { 0x215C, 3, 8 }, { 0x215D, 5, 8 }, { 0x215E, 7, 8 }, { 0x215F, 1, 1 }, { 0x2160, 1, 1 }, { 0x2161, 2, 1 }, { 0x2162, 3, 1 }, { 0x2163, 4, 1 }, { 0x2164, 5, 1 }, { 0x2165, 6, 1 }, { 0x2166, 7, 1 }, { 0x2167, 8, 1 }, { 0x2168, 9, 1 }, { 0x2169, 10, 1 }, { 0x216A, 11, 1 }, { 0x216B, 12, 1 }, { 0x216C, 50, 1 }, { 0x216D, 100, 1 }, { 0x216E, 500, 1 }, { 0x216F, 1000, 1 }, { 0x2170, 1, 1 }, { 0x2171, 2, 1 }, { 0x2172, 3, 1 }, { 0x2173, 4, 1 }, { 0x2174, 5, 1 }, { 0x2175, 6, 1 }, { 0x2176, 7, 1 }, { 0x2177, 8, 1 }, { 0x2178, 9, 1 }, { 0x2179, 10, 1 }, { 0x217A, 11, 1 }, { 0x217B, 12, 1 }, { 0x217C, 50, 1 }, { 0x217D, 100, 1 }, { 0x217E, 500, 1 }, { 0x217F, 1000, 1 }, { 0x2180, 1000, 1 }, { 0x2181, 5000, 1 }, { 0x2182, 10000, 1 }, { 0x2185, 6, 1 }, { 0x2186, 50, 1 }, { 0x2187, 50000, 1 }, { 0x2188, 100000, 1 }, { 0x2189, 0, 1 }, { 0x2460, 1, 1 }, { 0x2461, 2, 1 }, { 0x2462, 3, 1 }, { 0x2463, 4, 1 }, { 0x2464, 5, 1 }, { 0x2465, 6, 1 }, { 0x2466, 7, 1 }, { 0x2467, 8, 1 }, { 0x2468, 9, 1 }, { 0x2469, 10, 1 }, { 0x246A, 11, 1 }, { 0x246B, 12, 1 }, { 0x246C, 13, 1 }, { 0x246D, 14, 1 }, { 0x246E, 15, 1 }, { 0x246F, 16, 1 }, { 0x2470, 17, 1 }, { 0x2471, 18, 1 }, { 0x2472, 19, 1 }, { 0x2473, 20, 1 }, { 0x2474, 1, 1 }, { 0x2475, 2, 1 }, { 0x2476, 3, 1 }, { 0x2477, 4, 1 }, { 0x2478, 5, 1 }, { 0x2479, 6, 1 }, { 0x247A, 7, 1 }, { 0x247B, 8, 1 }, { 0x247C, 9, 1 }, { 0x247D, 10, 1 }, { 0x247E, 11, 1 }, { 0x247F, 12, 1 }, { 0x2480, 13, 1 }, { 0x2481, 14, 1 }, { 0x2482, 15, 1 }, { 0x2483, 16, 1 }, { 0x2484, 17, 1 }, { 0x2485, 18, 1 }, { 0x2486, 19, 1 }, { 0x2487, 20, 1 }, { 0x2488, 1, 1 }, { 0x2489, 2, 1 }, { 0x248A, 3, 1 }, { 0x248B, 4, 1 }, { 0x248C, 5, 1 }, { 0x248D, 6, 1 }, { 0x248E, 7, 1 }, { 0x248F, 8, 1 }, { 0x2490, 9, 1 }, { 0x2491, 10, 1 }, { 0x2492, 11, 1 }, { 0x2493, 12, 1 }, { 0x2494, 13, 1 }, { 0x2495, 14, 1 }, { 0x2496, 15, 1 }, { 0x2497, 16, 1 }, { 0x2498, 17, 1 }, { 0x2499, 18, 1 }, { 0x249A, 19, 1 }, { 0x249B, 20, 1 }, { 0x24EA, 0, 1 }, { 0x24EB, 11, 1 }, { 0x24EC, 12, 1 }, { 0x24ED, 13, 1 }, { 0x24EE, 14, 1 }, { 0x24EF, 15, 1 }, { 0x24F0, 16, 1 }, { 0x24F1, 17, 1 }, { 0x24F2, 18, 1 }, { 0x24F3, 19, 1 }, { 0x24F4, 20, 1 }, { 0x24F5, 1, 1 }, { 0x24F6, 2, 1 }, { 0x24F7, 3, 1 }, { 0x24F8, 4, 1 }, { 0x24F9, 5, 1 }, { 0x24FA, 6, 1 }, { 0x24FB, 7, 1 }, { 0x24FC, 8, 1 }, { 0x24FD, 9, 1 }, { 0x24FE, 10, 1 }, { 0x24FF, 0, 1 }, { 0x2776, 1, 1 }, { 0x2777, 2, 1 }, { 0x2778, 3, 1 }, { 0x2779, 4, 1 }, { 0x277A, 5, 1 }, { 0x277B, 6, 1 }, { 0x277C, 7, 1 }, { 0x277D, 8, 1 }, { 0x277E, 9, 1 }, { 0x277F, 10, 1 }, { 0x2780, 1, 1 }, { 0x2781, 2, 1 }, { 0x2782, 3, 1 }, { 0x2783, 4, 1 }, { 0x2784, 5, 1 }, { 0x2785, 6, 1 }, { 0x2786, 7, 1 }, { 0x2787, 8, 1 }, { 0x2788, 9, 1 }, { 0x2789, 10, 1 }, { 0x278A, 1, 1 }, { 0x278B, 2, 1 }, { 0x278C, 3, 1 }, { 0x278D, 4, 1 }, { 0x278E, 5, 1 }, { 0x278F, 6, 1 }, { 0x2790, 7, 1 }, { 0x2791, 8, 1 }, { 0x2792, 9, 1 }, { 0x2793, 10, 1 }, { 0x2CFD, 1, 2 }, { 0x3007, 0, 1 }, { 0x3021, 1, 1 }, { 0x3022, 2, 1 }, { 0x3023, 3, 1 }, { 0x3024, 4, 1 }, { 0x3025, 5, 1 }, { 0x3026, 6, 1 }, { 0x3027, 7, 1 }, { 0x3028, 8, 1 }, { 0x3029, 9, 1 }, { 0x3038, 10, 1 }, { 0x3039, 20, 1 }, { 0x303A, 30, 1 }, { 0x3192, 1, 1 }, { 0x3193, 2, 1 }, { 0x3194, 3, 1 }, { 0x3195, 4, 1 }, { 0x3220, 1, 1 }, { 0x3221, 2, 1 }, { 0x3222, 3, 1 }, { 0x3223, 4, 1 }, { 0x3224, 5, 1 }, { 0x3225, 6, 1 }, { 0x3226, 7, 1 }, { 0x3227, 8, 1 }, { 0x3228, 9, 1 }, { 0x3229, 10, 1 }, { 0x3248, 10, 1 }, { 0x3249, 20, 1 }, { 0x324A, 30, 1 }, { 0x324B, 40, 1 }, { 0x324C, 50, 1 }, { 0x324D, 60, 1 }, { 0x324E, 70, 1 }, { 0x324F, 80, 1 }, { 0x3251, 21, 1 }, { 0x3252, 22, 1 }, { 0x3253, 23, 1 }, { 0x3254, 24, 1 }, { 0x3255, 25, 1 }, { 0x3256, 26, 1 }, { 0x3257, 27, 1 }, { 0x3258, 28, 1 }, { 0x3259, 29, 1 }, { 0x325A, 30, 1 }, { 0x325B, 31, 1 }, { 0x325C, 32, 1 }, { 0x325D, 33, 1 }, { 0x325E, 34, 1 }, { 0x325F, 35, 1 }, { 0x3280, 1, 1 }, { 0x3281, 2, 1 }, { 0x3282, 3, 1 }, { 0x3283, 4, 1 }, { 0x3284, 5, 1 }, { 0x3285, 6, 1 }, { 0x3286, 7, 1 }, { 0x3287, 8, 1 }, { 0x3288, 9, 1 }, { 0x3289, 10, 1 }, { 0x32B1, 36, 1 }, { 0x32B2, 37, 1 }, { 0x32B3, 38, 1 }, { 0x32B4, 39, 1 }, { 0x32B5, 40, 1 }, { 0x32B6, 41, 1 }, { 0x32B7, 42, 1 }, { 0x32B8, 43, 1 }, { 0x32B9, 44, 1 }, { 0x32BA, 45, 1 }, { 0x32BB, 46, 1 }, { 0x32BC, 47, 1 }, { 0x32BD, 48, 1 }, { 0x32BE, 49, 1 }, { 0x32BF, 50, 1 }, { 0xA620, 0, 1 }, { 0xA621, 1, 1 }, { 0xA622, 2, 1 }, { 0xA623, 3, 1 }, { 0xA624, 4, 1 }, { 0xA625, 5, 1 }, { 0xA626, 6, 1 }, { 0xA627, 7, 1 }, { 0xA628, 8, 1 }, { 0xA629, 9, 1 }, { 0xA6E6, 1, 1 }, { 0xA6E7, 2, 1 }, { 0xA6E8, 3, 1 }, { 0xA6E9, 4, 1 }, { 0xA6EA, 5, 1 }, { 0xA6EB, 6, 1 }, { 0xA6EC, 7, 1 }, { 0xA6ED, 8, 1 }, { 0xA6EE, 9, 1 }, { 0xA6EF, 0, 1 }, { 0xA830, 1, 4 }, { 0xA831, 1, 2 }, { 0xA832, 3, 4 }, { 0xA833, 1, 16 }, { 0xA834, 1, 8 }, { 0xA835, 3, 16 }, { 0xA8D0, 0, 1 }, { 0xA8D1, 1, 1 }, { 0xA8D2, 2, 1 }, { 0xA8D3, 3, 1 }, { 0xA8D4, 4, 1 }, { 0xA8D5, 5, 1 }, { 0xA8D6, 6, 1 }, { 0xA8D7, 7, 1 }, { 0xA8D8, 8, 1 }, { 0xA8D9, 9, 1 }, { 0xA900, 0, 1 }, { 0xA901, 1, 1 }, { 0xA902, 2, 1 }, { 0xA903, 3, 1 }, { 0xA904, 4, 1 }, { 0xA905, 5, 1 }, { 0xA906, 6, 1 }, { 0xA907, 7, 1 }, { 0xA908, 8, 1 }, { 0xA909, 9, 1 }, { 0xA9D0, 0, 1 }, { 0xA9D1, 1, 1 }, { 0xA9D2, 2, 1 }, { 0xA9D3, 3, 1 }, { 0xA9D4, 4, 1 }, { 0xA9D5, 5, 1 }, { 0xA9D6, 6, 1 }, { 0xA9D7, 7, 1 }, { 0xA9D8, 8, 1 }, { 0xA9D9, 9, 1 }, { 0xA9F0, 0, 1 }, { 0xA9F1, 1, 1 }, { 0xA9F2, 2, 1 }, { 0xA9F3, 3, 1 }, { 0xA9F4, 4, 1 }, { 0xA9F5, 5, 1 }, { 0xA9F6, 6, 1 }, { 0xA9F7, 7, 1 }, { 0xA9F8, 8, 1 }, { 0xA9F9, 9, 1 }, { 0xAA50, 0, 1 }, { 0xAA51, 1, 1 }, { 0xAA52, 2, 1 }, { 0xAA53, 3, 1 }, { 0xAA54, 4, 1 }, { 0xAA55, 5, 1 }, { 0xAA56, 6, 1 }, { 0xAA57, 7, 1 }, { 0xAA58, 8, 1 }, { 0xAA59, 9, 1 }, { 0xABF0, 0, 1 }, { 0xABF1, 1, 1 }, { 0xABF2, 2, 1 }, { 0xABF3, 3, 1 }, { 0xABF4, 4, 1 }, { 0xABF5, 5, 1 }, { 0xABF6, 6, 1 }, { 0xABF7, 7, 1 }, { 0xABF8, 8, 1 }, { 0xABF9, 9, 1 }, { 0xF96B, 3, 1 }, { 0xF973, 10, 1 }, { 0xF978, 2, 1 }, { 0xF9B2, 0, 1 }, { 0xF9D1, 6, 1 }, { 0xF9D3, 6, 1 }, { 0xF9FD, 10, 1 }, { 0xFF10, 0, 1 }, { 0xFF11, 1, 1 }, { 0xFF12, 2, 1 }, { 0xFF13, 3, 1 }, { 0xFF14, 4, 1 }, { 0xFF15, 5, 1 }, { 0xFF16, 6, 1 }, { 0xFF17, 7, 1 }, { 0xFF18, 8, 1 }, { 0xFF19, 9, 1 }, { 0x10107, 1, 1 }, { 0x10108, 2, 1 }, { 0x10109, 3, 1 }, { 0x1010A, 4, 1 }, { 0x1010B, 5, 1 }, { 0x1010C, 6, 1 }, { 0x1010D, 7, 1 }, { 0x1010E, 8, 1 }, { 0x1010F, 9, 1 }, { 0x10110, 10, 1 }, { 0x10111, 20, 1 }, { 0x10112, 30, 1 }, { 0x10113, 40, 1 }, { 0x10114, 50, 1 }, { 0x10115, 60, 1 }, { 0x10116, 70, 1 }, { 0x10117, 80, 1 }, { 0x10118, 90, 1 }, { 0x10119, 100, 1 }, { 0x1011A, 200, 1 }, { 0x1011B, 300, 1 }, { 0x1011C, 400, 1 }, { 0x1011D, 500, 1 }, { 0x1011E, 600, 1 }, { 0x1011F, 700, 1 }, { 0x10120, 800, 1 }, { 0x10121, 900, 1 }, { 0x10122, 1000, 1 }, { 0x10123, 2000, 1 }, { 0x10124, 3000, 1 }, { 0x10125, 4000, 1 }, { 0x10126, 5000, 1 }, { 0x10127, 6000, 1 }, { 0x10128, 7000, 1 }, { 0x10129, 8000, 1 }, { 0x1012A, 9000, 1 }, { 0x1012B, 10000, 1 }, { 0x1012C, 20000, 1 }, { 0x1012D, 30000, 1 }, { 0x1012E, 40000, 1 }, { 0x1012F, 50000, 1 }, { 0x10130, 60000, 1 }, { 0x10131, 70000, 1 }, { 0x10132, 80000, 1 }, { 0x10133, 90000, 1 }, { 0x10140, 1, 4 }, { 0x10141, 1, 2 }, { 0x10142, 1, 1 }, { 0x10143, 5, 1 }, { 0x10144, 50, 1 }, { 0x10145, 500, 1 }, { 0x10146, 5000, 1 }, { 0x10147, 50000, 1 }, { 0x10148, 5, 1 }, { 0x10149, 10, 1 }, { 0x1014A, 50, 1 }, { 0x1014B, 100, 1 }, { 0x1014C, 500, 1 }, { 0x1014D, 1000, 1 }, { 0x1014E, 5000, 1 }, { 0x1014F, 5, 1 }, { 0x10150, 10, 1 }, { 0x10151, 50, 1 }, { 0x10152, 100, 1 }, { 0x10153, 500, 1 }, { 0x10154, 1000, 1 }, { 0x10155, 10000, 1 }, { 0x10156, 50000, 1 }, { 0x10157, 10, 1 }, { 0x10158, 1, 1 }, { 0x10159, 1, 1 }, { 0x1015A, 1, 1 }, { 0x1015B, 2, 1 }, { 0x1015C, 2, 1 }, { 0x1015D, 2, 1 }, { 0x1015E, 2, 1 }, { 0x1015F, 5, 1 }, { 0x10160, 10, 1 }, { 0x10161, 10, 1 }, { 0x10162, 10, 1 }, { 0x10163, 10, 1 }, { 0x10164, 10, 1 }, { 0x10165, 30, 1 }, { 0x10166, 50, 1 }, { 0x10167, 50, 1 }, { 0x10168, 50, 1 }, { 0x10169, 50, 1 }, { 0x1016A, 100, 1 }, { 0x1016B, 300, 1 }, { 0x1016C, 500, 1 }, { 0x1016D, 500, 1 }, { 0x1016E, 500, 1 }, { 0x1016F, 500, 1 }, { 0x10170, 500, 1 }, { 0x10171, 1000, 1 }, { 0x10172, 5000, 1 }, { 0x10173, 5, 1 }, { 0x10174, 50, 1 }, { 0x10175, 1, 2 }, { 0x10176, 1, 2 }, { 0x10177, 2, 3 }, { 0x10178, 3, 4 }, { 0x1018A, 0, 1 }, { 0x1018B, 1, 4 }, { 0x102E1, 1, 1 }, { 0x102E2, 2, 1 }, { 0x102E3, 3, 1 }, { 0x102E4, 4, 1 }, { 0x102E5, 5, 1 }, { 0x102E6, 6, 1 }, { 0x102E7, 7, 1 }, { 0x102E8, 8, 1 }, { 0x102E9, 9, 1 }, { 0x102EA, 10, 1 }, { 0x102EB, 20, 1 }, { 0x102EC, 30, 1 }, { 0x102ED, 40, 1 }, { 0x102EE, 50, 1 }, { 0x102EF, 60, 1 }, { 0x102F0, 70, 1 }, { 0x102F1, 80, 1 }, { 0x102F2, 90, 1 }, { 0x102F3, 100, 1 }, { 0x102F4, 200, 1 }, { 0x102F5, 300, 1 }, { 0x102F6, 400, 1 }, { 0x102F7, 500, 1 }, { 0x102F8, 600, 1 }, { 0x102F9, 700, 1 }, { 0x102FA, 800, 1 }, { 0x102FB, 900, 1 }, { 0x10320, 1, 1 }, { 0x10321, 5, 1 }, { 0x10322, 10, 1 }, { 0x10323, 50, 1 }, { 0x10341, 90, 1 }, { 0x1034A, 900, 1 }, { 0x103D1, 1, 1 }, { 0x103D2, 2, 1 }, { 0x103D3, 10, 1 }, { 0x103D4, 20, 1 }, { 0x103D5, 100, 1 }, { 0x104A0, 0, 1 }, { 0x104A1, 1, 1 }, { 0x104A2, 2, 1 }, { 0x104A3, 3, 1 }, { 0x104A4, 4, 1 }, { 0x104A5, 5, 1 }, { 0x104A6, 6, 1 }, { 0x104A7, 7, 1 }, { 0x104A8, 8, 1 }, { 0x104A9, 9, 1 }, { 0x10858, 1, 1 }, { 0x10859, 2, 1 }, { 0x1085A, 3, 1 }, { 0x1085B, 10, 1 }, { 0x1085C, 20, 1 }, { 0x1085D, 100, 1 }, { 0x1085E, 1000, 1 }, { 0x1085F, 10000, 1 }, { 0x10879, 1, 1 }, { 0x1087A, 2, 1 }, { 0x1087B, 3, 1 }, { 0x1087C, 4, 1 }, { 0x1087D, 5, 1 }, { 0x1087E, 10, 1 }, { 0x1087F, 20, 1 }, { 0x108A7, 1, 1 }, { 0x108A8, 2, 1 }, { 0x108A9, 3, 1 }, { 0x108AA, 4, 1 }, { 0x108AB, 4, 1 }, { 0x108AC, 5, 1 }, { 0x108AD, 10, 1 }, { 0x108AE, 20, 1 }, { 0x108AF, 100, 1 }, { 0x108FB, 1, 1 }, { 0x108FC, 5, 1 }, { 0x108FD, 10, 1 }, { 0x108FE, 20, 1 }, { 0x108FF, 100, 1 }, { 0x10916, 1, 1 }, { 0x10917, 10, 1 }, { 0x10918, 20, 1 }, { 0x10919, 100, 1 }, { 0x1091A, 2, 1 }, { 0x1091B, 3, 1 }, { 0x109BC, 11, 12 }, { 0x109BD, 1, 2 }, { 0x109C0, 1, 1 }, { 0x109C1, 2, 1 }, { 0x109C2, 3, 1 }, { 0x109C3, 4, 1 }, { 0x109C4, 5, 1 }, { 0x109C5, 6, 1 }, { 0x109C6, 7, 1 }, { 0x109C7, 8, 1 }, { 0x109C8, 9, 1 }, { 0x109C9, 10, 1 }, { 0x109CA, 20, 1 }, { 0x109CB, 30, 1 }, { 0x109CC, 40, 1 }, { 0x109CD, 50, 1 }, { 0x109CE, 60, 1 }, { 0x109CF, 70, 1 }, { 0x109D2, 100, 1 }, { 0x109D3, 200, 1 }, { 0x109D4, 300, 1 }, { 0x109D5, 400, 1 }, { 0x109D6, 500, 1 }, { 0x109D7, 600, 1 }, { 0x109D8, 700, 1 }, { 0x109D9, 800, 1 }, { 0x109DA, 900, 1 }, { 0x109DB, 1000, 1 }, { 0x109DC, 2000, 1 }, { 0x109DD, 3000, 1 }, { 0x109DE, 4000, 1 }, { 0x109DF, 5000, 1 }, { 0x109E0, 6000, 1 }, { 0x109E1, 7000, 1 }, { 0x109E2, 8000, 1 }, { 0x109E3, 9000, 1 }, { 0x109E4, 10000, 1 }, { 0x109E5, 20000, 1 }, { 0x109E6, 30000, 1 }, { 0x109E7, 40000, 1 }, { 0x109E8, 50000, 1 }, { 0x109E9, 60000, 1 }, { 0x109EA, 70000, 1 }, { 0x109EB, 80000, 1 }, { 0x109EC, 90000, 1 }, { 0x109ED, 100000, 1 }, { 0x109EE, 200000, 1 }, { 0x109EF, 300000, 1 }, { 0x109F0, 400000, 1 }, { 0x109F1, 500000, 1 }, { 0x109F2, 600000, 1 }, { 0x109F3, 700000, 1 }, { 0x109F4, 800000, 1 }, { 0x109F5, 900000, 1 }, { 0x109F6, 1, 12 }, { 0x109F7, 2, 12 }, { 0x109F8, 3, 12 }, { 0x109F9, 4, 12 }, { 0x109FA, 5, 12 }, { 0x109FB, 6, 12 }, { 0x109FC, 7, 12 }, { 0x109FD, 8, 12 }, { 0x109FE, 9, 12 }, { 0x109FF, 10, 12 }, { 0x10A40, 1, 1 }, { 0x10A41, 2, 1 }, { 0x10A42, 3, 1 }, { 0x10A43, 4, 1 }, { 0x10A44, 10, 1 }, { 0x10A45, 20, 1 }, { 0x10A46, 100, 1 }, { 0x10A47, 1000, 1 }, { 0x10A7D, 1, 1 }, { 0x10A7E, 50, 1 }, { 0x10A9D, 1, 1 }, { 0x10A9E, 10, 1 }, { 0x10A9F, 20, 1 }, { 0x10AEB, 1, 1 }, { 0x10AEC, 5, 1 }, { 0x10AED, 10, 1 }, { 0x10AEE, 20, 1 }, { 0x10AEF, 100, 1 }, { 0x10B58, 1, 1 }, { 0x10B59, 2, 1 }, { 0x10B5A, 3, 1 }, { 0x10B5B, 4, 1 }, { 0x10B5C, 10, 1 }, { 0x10B5D, 20, 1 }, { 0x10B5E, 100, 1 }, { 0x10B5F, 1000, 1 }, { 0x10B78, 1, 1 }, { 0x10B79, 2, 1 }, { 0x10B7A, 3, 1 }, { 0x10B7B, 4, 1 }, { 0x10B7C, 10, 1 }, { 0x10B7D, 20, 1 }, { 0x10B7E, 100, 1 }, { 0x10B7F, 1000, 1 }, { 0x10BA9, 1, 1 }, { 0x10BAA, 2, 1 }, { 0x10BAB, 3, 1 }, { 0x10BAC, 4, 1 }, { 0x10BAD, 10, 1 }, { 0x10BAE, 20, 1 }, { 0x10BAF, 100, 1 }, { 0x10CFA, 1, 1 }, { 0x10CFB, 5, 1 }, { 0x10CFC, 10, 1 }, { 0x10CFD, 50, 1 }, { 0x10CFE, 100, 1 }, { 0x10CFF, 1000, 1 }, { 0x10E60, 1, 1 }, { 0x10E61, 2, 1 }, { 0x10E62, 3, 1 }, { 0x10E63, 4, 1 }, { 0x10E64, 5, 1 }, { 0x10E65, 6, 1 }, { 0x10E66, 7, 1 }, { 0x10E67, 8, 1 }, { 0x10E68, 9, 1 }, { 0x10E69, 10, 1 }, { 0x10E6A, 20, 1 }, { 0x10E6B, 30, 1 }, { 0x10E6C, 40, 1 }, { 0x10E6D, 50, 1 }, { 0x10E6E, 60, 1 }, { 0x10E6F, 70, 1 }, { 0x10E70, 80, 1 }, { 0x10E71, 90, 1 }, { 0x10E72, 100, 1 }, { 0x10E73, 200, 1 }, { 0x10E74, 300, 1 }, { 0x10E75, 400, 1 }, { 0x10E76, 500, 1 }, { 0x10E77, 600, 1 }, { 0x10E78, 700, 1 }, { 0x10E79, 800, 1 }, { 0x10E7A, 900, 1 }, { 0x10E7B, 1, 2 }, { 0x10E7C, 1, 4 }, { 0x10E7D, 1, 3 }, { 0x10E7E, 2, 3 }, { 0x11052, 1, 1 }, { 0x11053, 2, 1 }, { 0x11054, 3, 1 }, { 0x11055, 4, 1 }, { 0x11056, 5, 1 }, { 0x11057, 6, 1 }, { 0x11058, 7, 1 }, { 0x11059, 8, 1 }, { 0x1105A, 9, 1 }, { 0x1105B, 10, 1 }, { 0x1105C, 20, 1 }, { 0x1105D, 30, 1 }, { 0x1105E, 40, 1 }, { 0x1105F, 50, 1 }, { 0x11060, 60, 1 }, { 0x11061, 70, 1 }, { 0x11062, 80, 1 }, { 0x11063, 90, 1 }, { 0x11064, 100, 1 }, { 0x11065, 1000, 1 }, { 0x11066, 0, 1 }, { 0x11067, 1, 1 }, { 0x11068, 2, 1 }, { 0x11069, 3, 1 }, { 0x1106A, 4, 1 }, { 0x1106B, 5, 1 }, { 0x1106C, 6, 1 }, { 0x1106D, 7, 1 }, { 0x1106E, 8, 1 }, { 0x1106F, 9, 1 }, { 0x110F0, 0, 1 }, { 0x110F1, 1, 1 }, { 0x110F2, 2, 1 }, { 0x110F3, 3, 1 }, { 0x110F4, 4, 1 }, { 0x110F5, 5, 1 }, { 0x110F6, 6, 1 }, { 0x110F7, 7, 1 }, { 0x110F8, 8, 1 }, { 0x110F9, 9, 1 }, { 0x11136, 0, 1 }, { 0x11137, 1, 1 }, { 0x11138, 2, 1 }, { 0x11139, 3, 1 }, { 0x1113A, 4, 1 }, { 0x1113B, 5, 1 }, { 0x1113C, 6, 1 }, { 0x1113D, 7, 1 }, { 0x1113E, 8, 1 }, { 0x1113F, 9, 1 }, { 0x111D0, 0, 1 }, { 0x111D1, 1, 1 }, { 0x111D2, 2, 1 }, { 0x111D3, 3, 1 }, { 0x111D4, 4, 1 }, { 0x111D5, 5, 1 }, { 0x111D6, 6, 1 }, { 0x111D7, 7, 1 }, { 0x111D8, 8, 1 }, { 0x111D9, 9, 1 }, { 0x111E1, 1, 1 }, { 0x111E2, 2, 1 }, { 0x111E3, 3, 1 }, { 0x111E4, 4, 1 }, { 0x111E5, 5, 1 }, { 0x111E6, 6, 1 }, { 0x111E7, 7, 1 }, { 0x111E8, 8, 1 }, { 0x111E9, 9, 1 }, { 0x111EA, 10, 1 }, { 0x111EB, 20, 1 }, { 0x111EC, 30, 1 }, { 0x111ED, 40, 1 }, { 0x111EE, 50, 1 }, { 0x111EF, 60, 1 }, { 0x111F0, 70, 1 }, { 0x111F1, 80, 1 }, { 0x111F2, 90, 1 }, { 0x111F3, 100, 1 }, { 0x111F4, 1000, 1 }, { 0x112F0, 0, 1 }, { 0x112F1, 1, 1 }, { 0x112F2, 2, 1 }, { 0x112F3, 3, 1 }, { 0x112F4, 4, 1 }, { 0x112F5, 5, 1 }, { 0x112F6, 6, 1 }, { 0x112F7, 7, 1 }, { 0x112F8, 8, 1 }, { 0x112F9, 9, 1 }, { 0x11450, 0, 1 }, { 0x11451, 1, 1 }, { 0x11452, 2, 1 }, { 0x11453, 3, 1 }, { 0x11454, 4, 1 }, { 0x11455, 5, 1 }, { 0x11456, 6, 1 }, { 0x11457, 7, 1 }, { 0x11458, 8, 1 }, { 0x11459, 9, 1 }, { 0x114D0, 0, 1 }, { 0x114D1, 1, 1 }, { 0x114D2, 2, 1 }, { 0x114D3, 3, 1 }, { 0x114D4, 4, 1 }, { 0x114D5, 5, 1 }, { 0x114D6, 6, 1 }, { 0x114D7, 7, 1 }, { 0x114D8, 8, 1 }, { 0x114D9, 9, 1 }, { 0x11650, 0, 1 }, { 0x11651, 1, 1 }, { 0x11652, 2, 1 }, { 0x11653, 3, 1 }, { 0x11654, 4, 1 }, { 0x11655, 5, 1 }, { 0x11656, 6, 1 }, { 0x11657, 7, 1 }, { 0x11658, 8, 1 }, { 0x11659, 9, 1 }, { 0x116C0, 0, 1 }, { 0x116C1, 1, 1 }, { 0x116C2, 2, 1 }, { 0x116C3, 3, 1 }, { 0x116C4, 4, 1 }, { 0x116C5, 5, 1 }, { 0x116C6, 6, 1 }, { 0x116C7, 7, 1 }, { 0x116C8, 8, 1 }, { 0x116C9, 9, 1 }, { 0x11730, 0, 1 }, { 0x11731, 1, 1 }, { 0x11732, 2, 1 }, { 0x11733, 3, 1 }, { 0x11734, 4, 1 }, { 0x11735, 5, 1 }, { 0x11736, 6, 1 }, { 0x11737, 7, 1 }, { 0x11738, 8, 1 }, { 0x11739, 9, 1 }, { 0x1173A, 10, 1 }, { 0x1173B, 20, 1 }, { 0x118E0, 0, 1 }, { 0x118E1, 1, 1 }, { 0x118E2, 2, 1 }, { 0x118E3, 3, 1 }, { 0x118E4, 4, 1 }, { 0x118E5, 5, 1 }, { 0x118E6, 6, 1 }, { 0x118E7, 7, 1 }, { 0x118E8, 8, 1 }, { 0x118E9, 9, 1 }, { 0x118EA, 10, 1 }, { 0x118EB, 20, 1 }, { 0x118EC, 30, 1 }, { 0x118ED, 40, 1 }, { 0x118EE, 50, 1 }, { 0x118EF, 60, 1 }, { 0x118F0, 70, 1 }, { 0x118F1, 80, 1 }, { 0x118F2, 90, 1 }, { 0x11C50, 0, 1 }, { 0x11C51, 1, 1 }, { 0x11C52, 2, 1 }, { 0x11C53, 3, 1 }, { 0x11C54, 4, 1 }, { 0x11C55, 5, 1 }, { 0x11C56, 6, 1 }, { 0x11C57, 7, 1 }, { 0x11C58, 8, 1 }, { 0x11C59, 9, 1 }, { 0x11C5A, 1, 1 }, { 0x11C5B, 2, 1 }, { 0x11C5C, 3, 1 }, { 0x11C5D, 4, 1 }, { 0x11C5E, 5, 1 }, { 0x11C5F, 6, 1 }, { 0x11C60, 7, 1 }, { 0x11C61, 8, 1 }, { 0x11C62, 9, 1 }, { 0x11C63, 10, 1 }, { 0x11C64, 20, 1 }, { 0x11C65, 30, 1 }, { 0x11C66, 40, 1 }, { 0x11C67, 50, 1 }, { 0x11C68, 60, 1 }, { 0x11C69, 70, 1 }, { 0x11C6A, 80, 1 }, { 0x11C6B, 90, 1 }, { 0x11C6C, 100, 1 }, { 0x12400, 2, 1 }, { 0x12401, 3, 1 }, { 0x12402, 4, 1 }, { 0x12403, 5, 1 }, { 0x12404, 6, 1 }, { 0x12405, 7, 1 }, { 0x12406, 8, 1 }, { 0x12407, 9, 1 }, { 0x12408, 3, 1 }, { 0x12409, 4, 1 }, { 0x1240A, 5, 1 }, { 0x1240B, 6, 1 }, { 0x1240C, 7, 1 }, { 0x1240D, 8, 1 }, { 0x1240E, 9, 1 }, { 0x1240F, 4, 1 }, { 0x12410, 5, 1 }, { 0x12411, 6, 1 }, { 0x12412, 7, 1 }, { 0x12413, 8, 1 }, { 0x12414, 9, 1 }, { 0x12415, 1, 1 }, { 0x12416, 2, 1 }, { 0x12417, 3, 1 }, { 0x12418, 4, 1 }, { 0x12419, 5, 1 }, { 0x1241A, 6, 1 }, { 0x1241B, 7, 1 }, { 0x1241C, 8, 1 }, { 0x1241D, 9, 1 }, { 0x1241E, 1, 1 }, { 0x1241F, 2, 1 }, { 0x12420, 3, 1 }, { 0x12421, 4, 1 }, { 0x12422, 5, 1 }, { 0x12423, 2, 1 }, { 0x12424, 3, 1 }, { 0x12425, 3, 1 }, { 0x12426, 4, 1 }, { 0x12427, 5, 1 }, { 0x12428, 6, 1 }, { 0x12429, 7, 1 }, { 0x1242A, 8, 1 }, { 0x1242B, 9, 1 }, { 0x1242C, 1, 1 }, { 0x1242D, 2, 1 }, { 0x1242E, 3, 1 }, { 0x1242F, 3, 1 }, { 0x12430, 4, 1 }, { 0x12431, 5, 1 }, { 0x12432, 216000, 1 }, { 0x12433, 432000, 1 }, { 0x12434, 1, 1 }, { 0x12435, 2, 1 }, { 0x12436, 3, 1 }, { 0x12437, 3, 1 }, { 0x12438, 4, 1 }, { 0x12439, 5, 1 }, { 0x1243A, 3, 1 }, { 0x1243B, 3, 1 }, { 0x1243C, 4, 1 }, { 0x1243D, 4, 1 }, { 0x1243E, 4, 1 }, { 0x1243F, 4, 1 }, { 0x12440, 6, 1 }, { 0x12441, 7, 1 }, { 0x12442, 7, 1 }, { 0x12443, 7, 1 }, { 0x12444, 8, 1 }, { 0x12445, 8, 1 }, { 0x12446, 9, 1 }, { 0x12447, 9, 1 }, { 0x12448, 9, 1 }, { 0x12449, 9, 1 }, { 0x1244A, 2, 1 }, { 0x1244B, 3, 1 }, { 0x1244C, 4, 1 }, { 0x1244D, 5, 1 }, { 0x1244E, 6, 1 }, { 0x1244F, 1, 1 }, { 0x12450, 2, 1 }, { 0x12451, 3, 1 }, { 0x12452, 4, 1 }, { 0x12453, 4, 1 }, { 0x12454, 5, 1 }, { 0x12455, 5, 1 }, { 0x12456, 2, 1 }, { 0x12457, 3, 1 }, { 0x12458, 1, 1 }, { 0x12459, 2, 1 }, { 0x1245A, 1, 3 }, { 0x1245B, 2, 3 }, { 0x1245C, 5, 6 }, { 0x1245D, 1, 3 }, { 0x1245E, 2, 3 }, { 0x1245F, 1, 8 }, { 0x12460, 1, 4 }, { 0x12461, 1, 6 }, { 0x12462, 1, 4 }, { 0x12463, 1, 4 }, { 0x12464, 1, 2 }, { 0x12465, 1, 3 }, { 0x12466, 2, 3 }, { 0x12467, 40, 1 }, { 0x12468, 50, 1 }, { 0x12469, 4, 1 }, { 0x1246A, 5, 1 }, { 0x1246B, 6, 1 }, { 0x1246C, 7, 1 }, { 0x1246D, 8, 1 }, { 0x1246E, 9, 1 }, { 0x16A60, 0, 1 }, { 0x16A61, 1, 1 }, { 0x16A62, 2, 1 }, { 0x16A63, 3, 1 }, { 0x16A64, 4, 1 }, { 0x16A65, 5, 1 }, { 0x16A66, 6, 1 }, { 0x16A67, 7, 1 }, { 0x16A68, 8, 1 }, { 0x16A69, 9, 1 }, { 0x16B50, 0, 1 }, { 0x16B51, 1, 1 }, { 0x16B52, 2, 1 }, { 0x16B53, 3, 1 }, { 0x16B54, 4, 1 }, { 0x16B55, 5, 1 }, { 0x16B56, 6, 1 }, { 0x16B57, 7, 1 }, { 0x16B58, 8, 1 }, { 0x16B59, 9, 1 }, { 0x16B5B, 10, 1 }, { 0x16B5C, 100, 1 }, { 0x16B5D, 10000, 1 }, { 0x16B5E, 1000000, 1 }, { 0x16B5F, 100000000, 1 }, { 0x16B60, 1410065408, 1 }, { 0x16B61, -727379968, 1 }, { 0x1D360, 1, 1 }, { 0x1D361, 2, 1 }, { 0x1D362, 3, 1 }, { 0x1D363, 4, 1 }, { 0x1D364, 5, 1 }, { 0x1D365, 6, 1 }, { 0x1D366, 7, 1 }, { 0x1D367, 8, 1 }, { 0x1D368, 9, 1 }, { 0x1D369, 10, 1 }, { 0x1D36A, 20, 1 }, { 0x1D36B, 30, 1 }, { 0x1D36C, 40, 1 }, { 0x1D36D, 50, 1 }, { 0x1D36E, 60, 1 }, { 0x1D36F, 70, 1 }, { 0x1D370, 80, 1 }, { 0x1D371, 90, 1 }, { 0x1D7CE, 0, 1 }, { 0x1D7CF, 1, 1 }, { 0x1D7D0, 2, 1 }, { 0x1D7D1, 3, 1 }, { 0x1D7D2, 4, 1 }, { 0x1D7D3, 5, 1 }, { 0x1D7D4, 6, 1 }, { 0x1D7D5, 7, 1 }, { 0x1D7D6, 8, 1 }, { 0x1D7D7, 9, 1 }, { 0x1D7D8, 0, 1 }, { 0x1D7D9, 1, 1 }, { 0x1D7DA, 2, 1 }, { 0x1D7DB, 3, 1 }, { 0x1D7DC, 4, 1 }, { 0x1D7DD, 5, 1 }, { 0x1D7DE, 6, 1 }, { 0x1D7DF, 7, 1 }, { 0x1D7E0, 8, 1 }, { 0x1D7E1, 9, 1 }, { 0x1D7E2, 0, 1 }, { 0x1D7E3, 1, 1 }, { 0x1D7E4, 2, 1 }, { 0x1D7E5, 3, 1 }, { 0x1D7E6, 4, 1 }, { 0x1D7E7, 5, 1 }, { 0x1D7E8, 6, 1 }, { 0x1D7E9, 7, 1 }, { 0x1D7EA, 8, 1 }, { 0x1D7EB, 9, 1 }, { 0x1D7EC, 0, 1 }, { 0x1D7ED, 1, 1 }, { 0x1D7EE, 2, 1 }, { 0x1D7EF, 3, 1 }, { 0x1D7F0, 4, 1 }, { 0x1D7F1, 5, 1 }, { 0x1D7F2, 6, 1 }, { 0x1D7F3, 7, 1 }, { 0x1D7F4, 8, 1 }, { 0x1D7F5, 9, 1 }, { 0x1D7F6, 0, 1 }, { 0x1D7F7, 1, 1 }, { 0x1D7F8, 2, 1 }, { 0x1D7F9, 3, 1 }, { 0x1D7FA, 4, 1 }, { 0x1D7FB, 5, 1 }, { 0x1D7FC, 6, 1 }, { 0x1D7FD, 7, 1 }, { 0x1D7FE, 8, 1 }, { 0x1D7FF, 9, 1 }, { 0x1E8C7, 1, 1 }, { 0x1E8C8, 2, 1 }, { 0x1E8C9, 3, 1 }, { 0x1E8CA, 4, 1 }, { 0x1E8CB, 5, 1 }, { 0x1E8CC, 6, 1 }, { 0x1E8CD, 7, 1 }, { 0x1E8CE, 8, 1 }, { 0x1E8CF, 9, 1 }, { 0x1E950, 0, 1 }, { 0x1E951, 1, 1 }, { 0x1E952, 2, 1 }, { 0x1E953, 3, 1 }, { 0x1E954, 4, 1 }, { 0x1E955, 5, 1 }, { 0x1E956, 6, 1 }, { 0x1E957, 7, 1 }, { 0x1E958, 8, 1 }, { 0x1E959, 9, 1 }, { 0x1F100, 0, 1 }, { 0x1F101, 0, 1 }, { 0x1F102, 1, 1 }, { 0x1F103, 2, 1 }, { 0x1F104, 3, 1 }, { 0x1F105, 4, 1 }, { 0x1F106, 5, 1 }, { 0x1F107, 6, 1 }, { 0x1F108, 7, 1 }, { 0x1F109, 8, 1 }, { 0x1F10A, 9, 1 }, { 0x1F10B, 0, 1 }, { 0x1F10C, 0, 1 }, { 0x2F890, 9, 1 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_alphabetic.c�����������������������������������������0000664�0000000�0000000�00000040640�14110572173�0023223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0345, 0x0345 }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05B0, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0610, 0x061A }, { 0x0620, 0x0657 }, { 0x0659, 0x065F }, { 0x066E, 0x06D3 }, { 0x06D5, 0x06DC }, { 0x06E1, 0x06E8 }, { 0x06ED, 0x06EF }, { 0x06FA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x073F }, { 0x074D, 0x07B1 }, { 0x07CA, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0817 }, { 0x081A, 0x082C }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x08D4, 0x08DF }, { 0x08E3, 0x08E9 }, { 0x08F0, 0x093B }, { 0x093D, 0x094C }, { 0x094E, 0x0950 }, { 0x0955, 0x0963 }, { 0x0971, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CC }, { 0x09CE, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09F0, 0x09F1 }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4C }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A70, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACC }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AF9, 0x0AF9 }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4C }, { 0x0B56, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B71, 0x0B71 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCC }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0C00, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4C }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C63 }, { 0x0C80, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCC }, { 0x0CD5, 0x0CD6 }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CF1, 0x0CF2 }, { 0x0D01, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4C }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D57 }, { 0x0D5F, 0x0D63 }, { 0x0D7A, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF3 }, { 0x0E01, 0x0E3A }, { 0x0E40, 0x0E46 }, { 0x0E4D, 0x0E4D }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB9 }, { 0x0EBB, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ECD, 0x0ECD }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F81 }, { 0x0F88, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x1000, 0x1036 }, { 0x1038, 0x1038 }, { 0x103B, 0x103F }, { 0x1050, 0x1062 }, { 0x1065, 0x1068 }, { 0x106E, 0x1086 }, { 0x108E, 0x108E }, { 0x109C, 0x109D }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135F, 0x135F }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1713 }, { 0x1720, 0x1733 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17B3 }, { 0x17B6, 0x17C8 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x1938 }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x1A00, 0x1A1B }, { 0x1A20, 0x1A5E }, { 0x1A61, 0x1A74 }, { 0x1AA7, 0x1AA7 }, { 0x1B00, 0x1B33 }, { 0x1B35, 0x1B43 }, { 0x1B45, 0x1B4B }, { 0x1B80, 0x1BA9 }, { 0x1BAC, 0x1BAF }, { 0x1BBA, 0x1BE5 }, { 0x1BE7, 0x1BF1 }, { 0x1C00, 0x1C35 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF3 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1DE7, 0x1DF4 }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x24B6, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2DFF }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA674, 0xA67B }, { 0xA67F, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C3 }, { 0xA8C5, 0xA8C5 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA90A, 0xA92A }, { 0xA930, 0xA952 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9B2 }, { 0xA9B4, 0xA9BF }, { 0xA9CF, 0xA9CF }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9EF }, { 0xA9FA, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAABE }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEF }, { 0xAAF2, 0xAAF5 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABEA }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11000, 0x11045 }, { 0x11082, 0x110B8 }, { 0x110D0, 0x110E8 }, { 0x11100, 0x11132 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11180, 0x111BF }, { 0x111C1, 0x111C4 }, { 0x111DA, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x11234 }, { 0x11237, 0x11237 }, { 0x1123E, 0x1123E }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112E8 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134C }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11400, 0x11441 }, { 0x11443, 0x11445 }, { 0x11447, 0x1144A }, { 0x11480, 0x114C1 }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115BE }, { 0x115D8, 0x115DD }, { 0x11600, 0x1163E }, { 0x11640, 0x11640 }, { 0x11644, 0x11644 }, { 0x11680, 0x116B5 }, { 0x11700, 0x11719 }, { 0x1171D, 0x1172A }, { 0x118A0, 0x118DF }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C3E }, { 0x11C40, 0x11C40 }, { 0x11C72, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B36 }, { 0x16B40, 0x16B43 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9E, 0x1BC9E }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1E947, 0x1E947 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_alphabetic (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_ascii_hex_digit.c������������������������������������0000664�0000000�0000000�00000001735�14110572173�0024245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x0046 }, { 0x0061, 0x0066 } #define PREDICATE(c) uc_is_property_ascii_hex_digit (c) #include "test-predicate-part2.h" �����������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_arabic_digit.c����������������������������������0000664�0000000�0000000�00000002051�14110572173�0024511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0600, 0x0605 }, { 0x0660, 0x0669 }, { 0x066B, 0x066C }, { 0x06DD, 0x06DD }, { 0x08E2, 0x08E2 }, { 0x10E60, 0x10E7E } #define PREDICATE(c) uc_is_property_bidi_arabic_digit (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_arabic_right_to_left.c��������������������������0000664�0000000�0000000�00000004441�14110572173�0026247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0608, 0x0608 }, { 0x060B, 0x060B }, { 0x060D, 0x060D }, { 0x061B, 0x064A }, { 0x066D, 0x066F }, { 0x0671, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x0710 }, { 0x0712, 0x072F }, { 0x074B, 0x07A5 }, { 0x07B1, 0x07BF }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x2065, 0x2065 }, { 0xFB50, 0xFD3D }, { 0xFD40, 0xFDCF }, { 0xFDF0, 0xFDFC }, { 0xFDFE, 0xFDFF }, { 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFEFE }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB } #define PREDICATE(c) uc_is_property_bidi_arabic_right_to_left (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_block_separator.c�������������������������������0000664�0000000�0000000�00000002022�14110572173�0025260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x000A, 0x000A }, { 0x000D, 0x000D }, { 0x001C, 0x001E }, { 0x0085, 0x0085 }, { 0x2029, 0x2029 } #define PREDICATE(c) uc_is_property_bidi_block_separator (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_boundary_neutral.c������������������������������0000664�0000000�0000000�00000003303�14110572173�0025466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0000, 0x0008 }, { 0x000E, 0x001B }, { 0x007F, 0x0084 }, { 0x0086, 0x009F }, { 0x00AD, 0x00AD }, { 0x180E, 0x180E }, { 0x200B, 0x200D }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0xFDD0, 0xFDEF }, { 0xFEFF, 0xFEFF }, { 0xFFF0, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0x1FFFE, 0x1FFFF }, { 0x2FFFE, 0x2FFFF }, { 0x3FFFE, 0x3FFFF }, { 0x4FFFE, 0x4FFFF }, { 0x5FFFE, 0x5FFFF }, { 0x6FFFE, 0x6FFFF }, { 0x7FFFE, 0x7FFFF }, { 0x8FFFE, 0x8FFFF }, { 0x9FFFE, 0x9FFFF }, { 0xAFFFE, 0xAFFFF }, { 0xBFFFE, 0xBFFFF }, { 0xCFFFE, 0xCFFFF }, { 0xDFFFE, 0xE00FF }, { 0xE01F0, 0xE0FFF }, { 0xEFFFE, 0xEFFFF }, { 0xFFFFE, 0xFFFFF }, { 0x10FFFE, 0x10FFFF } #define PREDICATE(c) uc_is_property_bidi_boundary_neutral (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_common_separator.c������������������������������0000664�0000000�0000000�00000002323�14110572173�0025462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002C, 0x002C }, { 0x002E, 0x002F }, { 0x003A, 0x003A }, { 0x00A0, 0x00A0 }, { 0x060C, 0x060C }, { 0x202F, 0x202F }, { 0x2044, 0x2044 }, { 0xFE50, 0xFE50 }, { 0xFE52, 0xFE52 }, { 0xFE55, 0xFE55 }, { 0xFF0C, 0xFF0C }, { 0xFF0E, 0xFF0F }, { 0xFF1A, 0xFF1A } #define PREDICATE(c) uc_is_property_bidi_common_separator (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_control.c���������������������������������������0000664�0000000�0000000�00000001762�14110572173�0023600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x061C, 0x061C }, { 0x200E, 0x200F }, { 0x202A, 0x202E }, { 0x2066, 0x2069 } #define PREDICATE(c) uc_is_property_bidi_control (c) #include "test-predicate-part2.h" ��������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_embedding_or_override.c�������������������������0000664�0000000�0000000�00000001720�14110572173�0026427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x202A, 0x202B }, { 0x202D, 0x202E } #define PREDICATE(c) uc_is_property_bidi_embedding_or_override (c) #include "test-predicate-part2.h" ������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_eur_num_separator.c�����������������������������0000664�0000000�0000000�00000002164�14110572173�0025647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002B, 0x002B }, { 0x002D, 0x002D }, { 0x207A, 0x207B }, { 0x208A, 0x208B }, { 0x2212, 0x2212 }, { 0xFB29, 0xFB29 }, { 0xFE62, 0xFE63 }, { 0xFF0B, 0xFF0B }, { 0xFF0D, 0xFF0D } #define PREDICATE(c) uc_is_property_bidi_eur_num_separator (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_eur_num_terminator.c����������������������������0000664�0000000�0000000�00000002655�14110572173�0026040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0023, 0x0025 }, { 0x00A2, 0x00A5 }, { 0x00B0, 0x00B1 }, { 0x058F, 0x058F }, { 0x0609, 0x060A }, { 0x066A, 0x066A }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x2030, 0x2034 }, { 0x20A0, 0x20BE }, { 0x212E, 0x212E }, { 0x2213, 0x2213 }, { 0xA838, 0xA839 }, { 0xFE5F, 0xFE5F }, { 0xFE69, 0xFE6A }, { 0xFF03, 0xFF05 }, { 0xFFE0, 0xFFE1 }, { 0xFFE5, 0xFFE6 } #define PREDICATE(c) uc_is_property_bidi_eur_num_terminator (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_european_digit.c��������������������������������0000664�0000000�0000000�00000002277�14110572173�0025120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x00B2, 0x00B3 }, { 0x00B9, 0x00B9 }, { 0x06F0, 0x06F9 }, { 0x2070, 0x2070 }, { 0x2074, 0x2079 }, { 0x2080, 0x2089 }, { 0x2488, 0x249B }, { 0xFF10, 0xFF19 }, { 0x102E1, 0x102FB }, { 0x1D7CE, 0x1D7FF }, { 0x1F100, 0x1F10A } #define PREDICATE(c) uc_is_property_bidi_european_digit (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_hebrew_right_to_left.c��������������������������0000664�0000000�0000000�00000003405�14110572173�0026301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0590, 0x0590 }, { 0x05BE, 0x05BE }, { 0x05C0, 0x05C0 }, { 0x05C3, 0x05C3 }, { 0x05C6, 0x05C6 }, { 0x05C8, 0x05FF }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x082E, 0x0858 }, { 0x085C, 0x089F }, { 0x08B5, 0x08B5 }, { 0x08BE, 0x08D3 }, { 0x200F, 0x200F }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB4F }, { 0x10800, 0x1091E }, { 0x10920, 0x10A00 }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A10, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A40, 0x10AE4 }, { 0x10AE7, 0x10B38 }, { 0x10B40, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8CF }, { 0x1E900, 0x1E943 }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F } #define PREDICATE(c) uc_is_property_bidi_hebrew_right_to_left (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_left_to_right.c���������������������������������0000664�0000000�0000000�00000027434�14110572173�0024755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02B8 }, { 0x02BB, 0x02C1 }, { 0x02D0, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EE, 0x02EE }, { 0x0370, 0x0373 }, { 0x0376, 0x037D }, { 0x037F, 0x0383 }, { 0x0386, 0x0386 }, { 0x0388, 0x03F5 }, { 0x03F7, 0x0482 }, { 0x048A, 0x0589 }, { 0x058B, 0x058C }, { 0x0903, 0x0939 }, { 0x093B, 0x093B }, { 0x093D, 0x0940 }, { 0x0949, 0x094C }, { 0x094E, 0x0950 }, { 0x0958, 0x0961 }, { 0x0964, 0x0980 }, { 0x0982, 0x09BB }, { 0x09BD, 0x09C0 }, { 0x09C5, 0x09CC }, { 0x09CE, 0x09E1 }, { 0x09E4, 0x09F1 }, { 0x09F4, 0x09FA }, { 0x09FC, 0x0A00 }, { 0x0A03, 0x0A3B }, { 0x0A3D, 0x0A40 }, { 0x0A43, 0x0A46 }, { 0x0A49, 0x0A4A }, { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A76, 0x0A80 }, { 0x0A83, 0x0ABB }, { 0x0ABD, 0x0AC0 }, { 0x0AC6, 0x0AC6 }, { 0x0AC9, 0x0ACC }, { 0x0ACE, 0x0AE1 }, { 0x0AE4, 0x0AF0 }, { 0x0AF2, 0x0B00 }, { 0x0B02, 0x0B3B }, { 0x0B3D, 0x0B3E }, { 0x0B40, 0x0B40 }, { 0x0B45, 0x0B4C }, { 0x0B4E, 0x0B55 }, { 0x0B57, 0x0B61 }, { 0x0B64, 0x0B81 }, { 0x0B83, 0x0BBF }, { 0x0BC1, 0x0BCC }, { 0x0BCE, 0x0BF2 }, { 0x0BFB, 0x0BFF }, { 0x0C01, 0x0C3D }, { 0x0C41, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C61 }, { 0x0C64, 0x0C77 }, { 0x0C7F, 0x0C80 }, { 0x0C82, 0x0CBB }, { 0x0CBD, 0x0CCB }, { 0x0CCE, 0x0CE1 }, { 0x0CE4, 0x0D00 }, { 0x0D02, 0x0D40 }, { 0x0D45, 0x0D4C }, { 0x0D4E, 0x0D61 }, { 0x0D64, 0x0DC9 }, { 0x0DCB, 0x0DD1 }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0E30 }, { 0x0E32, 0x0E33 }, { 0x0E3B, 0x0E3E }, { 0x0E40, 0x0E46 }, { 0x0E4F, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBA, 0x0EBA }, { 0x0EBD, 0x0EC7 }, { 0x0ECE, 0x0F17 }, { 0x0F1A, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0F3E, 0x0F70 }, { 0x0F7F, 0x0F7F }, { 0x0F85, 0x0F85 }, { 0x0F88, 0x0F8C }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FC5 }, { 0x0FC7, 0x102C }, { 0x1031, 0x1031 }, { 0x1038, 0x1038 }, { 0x103B, 0x103C }, { 0x103F, 0x1057 }, { 0x105A, 0x105D }, { 0x1061, 0x1070 }, { 0x1075, 0x1081 }, { 0x1083, 0x1084 }, { 0x1087, 0x108C }, { 0x108E, 0x109C }, { 0x109E, 0x135C }, { 0x1360, 0x138F }, { 0x139A, 0x13FF }, { 0x1401, 0x167F }, { 0x1681, 0x169A }, { 0x169D, 0x1711 }, { 0x1715, 0x1731 }, { 0x1735, 0x1751 }, { 0x1754, 0x1771 }, { 0x1774, 0x17B3 }, { 0x17B6, 0x17B6 }, { 0x17BE, 0x17C5 }, { 0x17C7, 0x17C8 }, { 0x17D4, 0x17DA }, { 0x17DC, 0x17DC }, { 0x17DE, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180F, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x191F }, { 0x1923, 0x1926 }, { 0x1929, 0x1931 }, { 0x1933, 0x1938 }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, { 0x1946, 0x19DD }, { 0x1A00, 0x1A16 }, { 0x1A19, 0x1A1A }, { 0x1A1C, 0x1A55 }, { 0x1A57, 0x1A57 }, { 0x1A5F, 0x1A5F }, { 0x1A61, 0x1A61 }, { 0x1A63, 0x1A64 }, { 0x1A6D, 0x1A72 }, { 0x1A7D, 0x1A7E }, { 0x1A80, 0x1AAF }, { 0x1ABF, 0x1AFF }, { 0x1B04, 0x1B33 }, { 0x1B35, 0x1B35 }, { 0x1B3B, 0x1B3B }, { 0x1B3D, 0x1B41 }, { 0x1B43, 0x1B6A }, { 0x1B74, 0x1B7F }, { 0x1B82, 0x1BA1 }, { 0x1BA6, 0x1BA7 }, { 0x1BAA, 0x1BAA }, { 0x1BAE, 0x1BE5 }, { 0x1BE7, 0x1BE7 }, { 0x1BEA, 0x1BEC }, { 0x1BEE, 0x1BEE }, { 0x1BF2, 0x1C2B }, { 0x1C34, 0x1C35 }, { 0x1C38, 0x1CCF }, { 0x1CD3, 0x1CD3 }, { 0x1CE1, 0x1CE1 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF3 }, { 0x1CF5, 0x1CF7 }, { 0x1CFA, 0x1DBF }, { 0x1DF6, 0x1DFA }, { 0x1E00, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FCC }, { 0x1FD0, 0x1FDC }, { 0x1FE0, 0x1FEC }, { 0x1FF0, 0x1FFC }, { 0x1FFF, 0x1FFF }, { 0x200E, 0x200E }, { 0x2071, 0x2073 }, { 0x207F, 0x207F }, { 0x208F, 0x209F }, { 0x20BF, 0x20CF }, { 0x20F1, 0x20FF }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214F }, { 0x2160, 0x2188 }, { 0x218C, 0x218F }, { 0x2336, 0x237A }, { 0x2395, 0x2395 }, { 0x23FF, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x249C, 0x24E9 }, { 0x26AC, 0x26AC }, { 0x2800, 0x28FF }, { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B97 }, { 0x2BBA, 0x2BBC }, { 0x2BC9, 0x2BC9 }, { 0x2BD2, 0x2BEB }, { 0x2BF0, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF8 }, { 0x2D00, 0x2D7E }, { 0x2D80, 0x2DDF }, { 0x2E45, 0x2E7F }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2FFC, 0x2FFF }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x302E, 0x302F }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3040, 0x3098 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x31BF }, { 0x31E4, 0x321C }, { 0x321F, 0x324F }, { 0x3260, 0x327B }, { 0x327F, 0x32B0 }, { 0x32C0, 0x32CB }, { 0x32D0, 0x3376 }, { 0x337B, 0x33DD }, { 0x33E0, 0x33FE }, { 0x3400, 0x4DBF }, { 0x4E00, 0xA48F }, { 0xA4C7, 0xA60C }, { 0xA610, 0xA66E }, { 0xA680, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA6F2, 0xA6FF }, { 0xA722, 0xA787 }, { 0xA789, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA824 }, { 0xA827, 0xA827 }, { 0xA82C, 0xA837 }, { 0xA83A, 0xA873 }, { 0xA878, 0xA8C3 }, { 0xA8C6, 0xA8DF }, { 0xA8F2, 0xA925 }, { 0xA92E, 0xA946 }, { 0xA952, 0xA97F }, { 0xA983, 0xA9B2 }, { 0xA9B4, 0xA9B5 }, { 0xA9BA, 0xA9BB }, { 0xA9BD, 0xA9E4 }, { 0xA9E6, 0xAA28 }, { 0xAA2F, 0xAA30 }, { 0xAA33, 0xAA34 }, { 0xAA37, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA4D, 0xAA7B }, { 0xAA7D, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAEB }, { 0xAAEE, 0xAAF5 }, { 0xAAF7, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEC }, { 0xABEE, 0xFB1C }, { 0xFF00, 0xFF00 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFDF }, { 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFEF }, { 0x10000, 0x10100 }, { 0x10102, 0x1013F }, { 0x1018D, 0x1018F }, { 0x1019C, 0x1019F }, { 0x101A1, 0x101FC }, { 0x101FE, 0x102DF }, { 0x102FC, 0x10375 }, { 0x1037B, 0x107FF }, { 0x11000, 0x11000 }, { 0x11002, 0x11037 }, { 0x11047, 0x11051 }, { 0x11066, 0x1107E }, { 0x11082, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x110BB, 0x110FF }, { 0x11103, 0x11126 }, { 0x1112C, 0x1112C }, { 0x11135, 0x11172 }, { 0x11174, 0x1117F }, { 0x11182, 0x111B5 }, { 0x111BF, 0x111C9 }, { 0x111CD, 0x1122E }, { 0x11232, 0x11233 }, { 0x11235, 0x11235 }, { 0x11238, 0x1123D }, { 0x1123F, 0x112DE }, { 0x112E0, 0x112E2 }, { 0x112EB, 0x112FF }, { 0x11302, 0x1133B }, { 0x1133D, 0x1133F }, { 0x11341, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x11437 }, { 0x11440, 0x11441 }, { 0x11445, 0x11445 }, { 0x11447, 0x114B2 }, { 0x114B9, 0x114B9 }, { 0x114BB, 0x114BE }, { 0x114C1, 0x114C1 }, { 0x114C4, 0x115B1 }, { 0x115B6, 0x115BB }, { 0x115BE, 0x115BE }, { 0x115C1, 0x115DB }, { 0x115DE, 0x11632 }, { 0x1163B, 0x1163C }, { 0x1163E, 0x1163E }, { 0x11641, 0x1165F }, { 0x1166D, 0x116AA }, { 0x116AC, 0x116AC }, { 0x116AE, 0x116AF }, { 0x116B6, 0x116B6 }, { 0x116B8, 0x1171C }, { 0x11720, 0x11721 }, { 0x11726, 0x11726 }, { 0x1172C, 0x11C2F }, { 0x11C37, 0x11C37 }, { 0x11C3E, 0x11C91 }, { 0x11CA8, 0x11CA9 }, { 0x11CB1, 0x11CB1 }, { 0x11CB4, 0x11CB4 }, { 0x11CB7, 0x16AEF }, { 0x16AF5, 0x16B2F }, { 0x16B37, 0x16F8E }, { 0x16F93, 0x1BC9C }, { 0x1BC9F, 0x1BC9F }, { 0x1BCA4, 0x1D166 }, { 0x1D16A, 0x1D172 }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1FF }, { 0x1D246, 0x1D2FF }, { 0x1D357, 0x1D6DA }, { 0x1D6DC, 0x1D714 }, { 0x1D716, 0x1D74E }, { 0x1D750, 0x1D788 }, { 0x1D78A, 0x1D7C2 }, { 0x1D7C4, 0x1D7CD }, { 0x1D800, 0x1D9FF }, { 0x1DA37, 0x1DA3A }, { 0x1DA6D, 0x1DA74 }, { 0x1DA76, 0x1DA83 }, { 0x1DA85, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DFFF }, { 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E94B, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EDFF }, { 0x1EE04, 0x1EE04 }, { 0x1EE20, 0x1EE20 }, { 0x1EE23, 0x1EE23 }, { 0x1EE25, 0x1EE26 }, { 0x1EE28, 0x1EE28 }, { 0x1EE33, 0x1EE33 }, { 0x1EE38, 0x1EE38 }, { 0x1EE3A, 0x1EE3A }, { 0x1EE3C, 0x1EE41 }, { 0x1EE43, 0x1EE46 }, { 0x1EE48, 0x1EE48 }, { 0x1EE4A, 0x1EE4A }, { 0x1EE4C, 0x1EE4C }, { 0x1EE50, 0x1EE50 }, { 0x1EE53, 0x1EE53 }, { 0x1EE55, 0x1EE56 }, { 0x1EE58, 0x1EE58 }, { 0x1EE5A, 0x1EE5A }, { 0x1EE5C, 0x1EE5C }, { 0x1EE5E, 0x1EE5E }, { 0x1EE60, 0x1EE60 }, { 0x1EE63, 0x1EE63 }, { 0x1EE65, 0x1EE66 }, { 0x1EE6B, 0x1EE6B }, { 0x1EE73, 0x1EE73 }, { 0x1EE78, 0x1EE78 }, { 0x1EE7D, 0x1EE7D }, { 0x1EE7F, 0x1EE7F }, { 0x1EE8A, 0x1EE8A }, { 0x1EE9C, 0x1EEA0 }, { 0x1EEA4, 0x1EEA4 }, { 0x1EEAA, 0x1EEAA }, { 0x1EEBC, 0x1EEEF }, { 0x1EEF2, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF }, { 0x1F10D, 0x1F169 }, { 0x1F16C, 0x1F2FF }, { 0x1F6D3, 0x1F6DF }, { 0x1F6ED, 0x1F6EF }, { 0x1F6F7, 0x1F6FF }, { 0x1F774, 0x1F77F }, { 0x1F7D5, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F90F }, { 0x1F91F, 0x1F91F }, { 0x1F928, 0x1F92F }, { 0x1F931, 0x1F932 }, { 0x1F93F, 0x1F93F }, { 0x1F94C, 0x1F94F }, { 0x1F95F, 0x1F97F }, { 0x1F992, 0x1F9BF }, { 0x1F9C1, 0x1FFFD }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD }, { 0x40000, 0x4FFFD }, { 0x50000, 0x5FFFD }, { 0x60000, 0x6FFFD }, { 0x70000, 0x7FFFD }, { 0x80000, 0x8FFFD }, { 0x90000, 0x9FFFD }, { 0xA0000, 0xAFFFD }, { 0xB0000, 0xBFFFD }, { 0xC0000, 0xCFFFD }, { 0xD0000, 0xDFFFD }, { 0xE1000, 0xEFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_property_bidi_left_to_right (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_non_spacing_mark.c������������������������������0000664�0000000�0000000�00000017177�14110572173�0025437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0300, 0x036F }, { 0x0483, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06DF, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D01 }, { 0x0D41, 0x0D44 }, { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1037 }, { 0x1039, 0x103A }, { 0x103D, 0x103E }, { 0x1058, 0x1059 }, { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302D }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEC, 0xAAED }, { 0xAAF6, 0xAAF6 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111CA, 0x111CC }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133C, 0x1133C }, { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F8F, 0x16F92 }, { 0x1BC9D, 0x1BC9E }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_bidi_non_spacing_mark (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_other_neutral.c���������������������������������0000664�0000000�0000000�00000012236�14110572173�0024771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0022 }, { 0x0026, 0x002A }, { 0x003B, 0x0040 }, { 0x005B, 0x0060 }, { 0x007B, 0x007E }, { 0x00A1, 0x00A1 }, { 0x00A6, 0x00A9 }, { 0x00AB, 0x00AC }, { 0x00AE, 0x00AF }, { 0x00B4, 0x00B4 }, { 0x00B6, 0x00B8 }, { 0x00BB, 0x00BF }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x02B9, 0x02BA }, { 0x02C2, 0x02CF }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02ED }, { 0x02EF, 0x02FF }, { 0x0374, 0x0375 }, { 0x037E, 0x037E }, { 0x0384, 0x0385 }, { 0x0387, 0x0387 }, { 0x03F6, 0x03F6 }, { 0x058A, 0x058A }, { 0x058D, 0x058E }, { 0x0606, 0x0607 }, { 0x060E, 0x060F }, { 0x06DE, 0x06DE }, { 0x06E9, 0x06E9 }, { 0x07F6, 0x07F9 }, { 0x0BF3, 0x0BF8 }, { 0x0BFA, 0x0BFA }, { 0x0C78, 0x0C7E }, { 0x0F3A, 0x0F3D }, { 0x1390, 0x1399 }, { 0x1400, 0x1400 }, { 0x169B, 0x169C }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180A }, { 0x1940, 0x1940 }, { 0x1944, 0x1945 }, { 0x19DE, 0x19FF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2010, 0x2027 }, { 0x2035, 0x2043 }, { 0x2045, 0x205E }, { 0x207C, 0x207E }, { 0x208C, 0x208E }, { 0x2100, 0x2101 }, { 0x2103, 0x2106 }, { 0x2108, 0x2109 }, { 0x2114, 0x2114 }, { 0x2116, 0x2118 }, { 0x211E, 0x2123 }, { 0x2125, 0x2125 }, { 0x2127, 0x2127 }, { 0x2129, 0x2129 }, { 0x213A, 0x213B }, { 0x2140, 0x2144 }, { 0x214A, 0x214D }, { 0x2150, 0x215F }, { 0x2189, 0x218B }, { 0x2190, 0x2211 }, { 0x2214, 0x2335 }, { 0x237B, 0x2394 }, { 0x2396, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2487 }, { 0x24EA, 0x26AB }, { 0x26AD, 0x27FF }, { 0x2900, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2CE5, 0x2CEA }, { 0x2CF9, 0x2CFF }, { 0x2E00, 0x2E44 }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3001, 0x3004 }, { 0x3008, 0x3020 }, { 0x3030, 0x3030 }, { 0x3036, 0x3037 }, { 0x303D, 0x303F }, { 0x309B, 0x309C }, { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0x31C0, 0x31E3 }, { 0x321D, 0x321E }, { 0x3250, 0x325F }, { 0x327C, 0x327E }, { 0x32B1, 0x32BF }, { 0x32CC, 0x32CF }, { 0x3377, 0x337A }, { 0x33DE, 0x33DF }, { 0x33FF, 0x33FF }, { 0x4DC0, 0x4DFF }, { 0xA490, 0xA4C6 }, { 0xA60D, 0xA60F }, { 0xA673, 0xA673 }, { 0xA67E, 0xA67F }, { 0xA700, 0xA721 }, { 0xA788, 0xA788 }, { 0xA828, 0xA82B }, { 0xA874, 0xA877 }, { 0xFD3E, 0xFD3F }, { 0xFDFD, 0xFDFD }, { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE4F }, { 0xFE51, 0xFE51 }, { 0xFE54, 0xFE54 }, { 0xFE56, 0xFE5E }, { 0xFE60, 0xFE61 }, { 0xFE64, 0xFE66 }, { 0xFE68, 0xFE68 }, { 0xFE6B, 0xFE6B }, { 0xFF01, 0xFF02 }, { 0xFF06, 0xFF0A }, { 0xFF1B, 0xFF20 }, { 0xFF3B, 0xFF40 }, { 0xFF5B, 0xFF65 }, { 0xFFE2, 0xFFE4 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10101, 0x10101 }, { 0x10140, 0x1018C }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x1091F, 0x1091F }, { 0x10B39, 0x10B3F }, { 0x11052, 0x11065 }, { 0x11660, 0x1166C }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D6DB, 0x1D6DB }, { 0x1D715, 0x1D715 }, { 0x1D74F, 0x1D74F }, { 0x1D789, 0x1D789 }, { 0x1D7C3, 0x1D7C3 }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F10B, 0x1F10C }, { 0x1F16A, 0x1F16B }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 } #define PREDICATE(c) uc_is_property_bidi_other_neutral (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_pdf.c�������������������������������������������0000664�0000000�0000000�00000001646�14110572173�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x202C, 0x202C } #define PREDICATE(c) uc_is_property_bidi_pdf (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_segment_separator.c�����������������������������0000664�0000000�0000000�00000001744�14110572173�0025642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x0009 }, { 0x000B, 0x000B }, { 0x001F, 0x001F } #define PREDICATE(c) uc_is_property_bidi_segment_separator (c) #include "test-predicate-part2.h" ����������������������������gnulib-20210822~d383792/tests/unictype/test-pr_bidi_whitespace.c������������������������������������0000664�0000000�0000000�00000002075�14110572173�0024252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x000C, 0x000C }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x2000, 0x200A }, { 0x2028, 0x2028 }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_property_bidi_whitespace (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_byname.c���������������������������������������������0000664�0000000�0000000�00000002215�14110572173�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { { uc_property_t pr = uc_property_byname ("composite"); unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (uc_is_property (c, pr) == uc_is_property_composite (c)); } { uc_property_t pr = uc_property_byname ("foobar"); ASSERT (! uc_property_is_valid (pr)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_case_ignorable.c�������������������������������������0000664�0000000�0000000�00000023200�14110572173�0024055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0027, 0x0027 }, { 0x002E, 0x002E }, { 0x003A, 0x003A }, { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x00A8, 0x00A8 }, { 0x00AD, 0x00AD }, { 0x00AF, 0x00AF }, { 0x00B4, 0x00B4 }, { 0x00B7, 0x00B8 }, { 0x02B0, 0x036F }, { 0x0374, 0x0375 }, { 0x037A, 0x037A }, { 0x0384, 0x0385 }, { 0x0387, 0x0387 }, { 0x0483, 0x0489 }, { 0x0559, 0x0559 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x05F4, 0x05F4 }, { 0x0600, 0x0605 }, { 0x0610, 0x061A }, { 0x061C, 0x061C }, { 0x0640, 0x0640 }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DD }, { 0x06DF, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0816, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0971, 0x0971 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C00, 0x0C00 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D01 }, { 0x0D41, 0x0D44 }, { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E46, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1037 }, { 0x1039, 0x103A }, { 0x103D, 0x103E }, { 0x1058, 0x1059 }, { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x10FC, 0x10FC }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180E }, { 0x1843, 0x1843 }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA7, 0x1AA7 }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1D2C, 0x1D6A }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x200B, 0x200F }, { 0x2018, 0x2019 }, { 0x2024, 0x2024 }, { 0x2027, 0x2027 }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x20D0, 0x20F0 }, { 0x2C7C, 0x2C7D }, { 0x2CEF, 0x2CF1 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x302A, 0x302D }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x3099, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA67F, 0xA67F }, { 0xA69C, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA700, 0xA721 }, { 0xA770, 0xA770 }, { 0xA788, 0xA78A }, { 0xA7F8, 0xA7F9 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9CF, 0xA9CF }, { 0xA9E5, 0xA9E6 }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA70, 0xAA70 }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADD, 0xAADD }, { 0xAAEC, 0xAAED }, { 0xAAF3, 0xAAF4 }, { 0xAAF6, 0xAAF6 }, { 0xAB5B, 0xAB5F }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFBB2, 0xFBC1 }, { 0xFE00, 0xFE0F }, { 0xFE13, 0xFE13 }, { 0xFE20, 0xFE2F }, { 0xFE52, 0xFE52 }, { 0xFE55, 0xFE55 }, { 0xFEFF, 0xFEFF }, { 0xFF07, 0xFF07 }, { 0xFF0E, 0xFF0E }, { 0xFF1A, 0xFF1A }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F }, { 0xFFE3, 0xFFE3 }, { 0xFFF9, 0xFFFB }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111CA, 0x111CC }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133C, 0x1133C }, { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16B40, 0x16B43 }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x1BC9D, 0x1BC9E }, { 0x1BCA0, 0x1BCA3 }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0x1F3FB, 0x1F3FF }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_case_ignorable (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_cased.c����������������������������������������������0000664�0000000�0000000�00000010203�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x01BA }, { 0x01BC, 0x01BF }, { 0x01C4, 0x0293 }, { 0x0295, 0x02B8 }, { 0x02C0, 0x02C1 }, { 0x02E0, 0x02E4 }, { 0x0345, 0x0345 }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x212F, 0x2134 }, { 0x2139, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x217F }, { 0x2183, 0x2184 }, { 0x24B6, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA640, 0xA66D }, { 0xA680, 0xA69D }, { 0xA722, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F8, 0xA7FA }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x118A0, 0x118DF }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E900, 0x1E943 }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 } #define PREDICATE(c) uc_is_property_cased (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_changes_when_casefolded.c����������������������������0000664�0000000�0000000�00000036057�14110572173�0025740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00B5, 0x00B5 }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DF }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x0149, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x017F, 0x017F }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C5 }, { 0x01C7, 0x01C8 }, { 0x01CA, 0x01CB }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F2 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0345, 0x0345 }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03C2, 0x03C2 }, { 0x03CF, 0x03D1 }, { 0x03D5, 0x03D6 }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F0, 0x03F1 }, { 0x03F4, 0x03F5 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x0587, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9A, 0x1E9B }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1F80, 0x1FAF }, { 0x1FB2, 0x1FB4 }, { 0x1FB7, 0x1FBC }, { 0x1FC2, 0x1FC4 }, { 0x1FC7, 0x1FCC }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF7, 0x1FFC }, { 0x2126, 0x2126 }, { 0x212A, 0x212B }, { 0x2132, 0x2132 }, { 0x2160, 0x216F }, { 0x2183, 0x2183 }, { 0x24B6, 0x24CF }, { 0x2C00, 0x2C2E }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x1E900, 0x1E921 } #define PREDICATE(c) uc_is_property_changes_when_casefolded (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_changes_when_casemapped.c����������������������������0000664�0000000�0000000�00000007213�14110572173�0025741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x0137 }, { 0x0139, 0x018C }, { 0x018E, 0x019A }, { 0x019C, 0x01A9 }, { 0x01AC, 0x01B9 }, { 0x01BC, 0x01BD }, { 0x01BF, 0x01BF }, { 0x01C4, 0x0220 }, { 0x0222, 0x0233 }, { 0x023A, 0x0254 }, { 0x0256, 0x0257 }, { 0x0259, 0x0259 }, { 0x025B, 0x025C }, { 0x0260, 0x0261 }, { 0x0263, 0x0263 }, { 0x0265, 0x0266 }, { 0x0268, 0x026C }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0287, 0x028C }, { 0x0292, 0x0292 }, { 0x029D, 0x029E }, { 0x0345, 0x0345 }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03D1 }, { 0x03D5, 0x03F5 }, { 0x03F7, 0x03FB }, { 0x03FD, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D79, 0x1D79 }, { 0x1D7D, 0x1D7D }, { 0x1E00, 0x1E9B }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2126, 0x2126 }, { 0x212A, 0x212B }, { 0x2132, 0x2132 }, { 0x214E, 0x214E }, { 0x2160, 0x217F }, { 0x2183, 0x2184 }, { 0x24B6, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2C70 }, { 0x2C72, 0x2C73 }, { 0x2C75, 0x2C76 }, { 0x2C7E, 0x2CE3 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA640, 0xA66D }, { 0xA680, 0xA69B }, { 0xA722, 0xA72F }, { 0xA732, 0xA76F }, { 0xA779, 0xA787 }, { 0xA78B, 0xA78D }, { 0xA790, 0xA793 }, { 0xA796, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xAB53, 0xAB53 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x118A0, 0x118DF }, { 0x1E900, 0x1E943 } #define PREDICATE(c) uc_is_property_changes_when_casemapped (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_changes_when_lowercased.c����������������������������0000664�0000000�0000000�00000035367�14110572173�0026002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DE }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x014A, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C5 }, { 0x01C7, 0x01C8 }, { 0x01CA, 0x01CB }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F2 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03CF, 0x03CF }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F4, 0x03F4 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1F88, 0x1F8F }, { 0x1F98, 0x1F9F }, { 0x1FA8, 0x1FAF }, { 0x1FB8, 0x1FBC }, { 0x1FC8, 0x1FCC }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF8, 0x1FFC }, { 0x2126, 0x2126 }, { 0x212A, 0x212B }, { 0x2132, 0x2132 }, { 0x2160, 0x216F }, { 0x2183, 0x2183 }, { 0x24B6, 0x24CF }, { 0x2C00, 0x2C2E }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x1E900, 0x1E921 } #define PREDICATE(c) uc_is_property_changes_when_lowercased (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_changes_when_titlecased.c����������������������������0000664�0000000�0000000�00000036247�14110572173�0025771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0137 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0149 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018C }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019A }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01B9 }, { 0x01BD, 0x01BD }, { 0x01BF, 0x01BF }, { 0x01C4, 0x01C4 }, { 0x01C6, 0x01C7 }, { 0x01C9, 0x01CA }, { 0x01CC, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01F1 }, { 0x01F3, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0233 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0254 }, { 0x0256, 0x0257 }, { 0x0259, 0x0259 }, { 0x025B, 0x025C }, { 0x0260, 0x0261 }, { 0x0263, 0x0263 }, { 0x0265, 0x0266 }, { 0x0268, 0x026C }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0287, 0x028C }, { 0x0292, 0x0292 }, { 0x029D, 0x029E }, { 0x0345, 0x0345 }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037B, 0x037D }, { 0x0390, 0x0390 }, { 0x03AC, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FB }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0587 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D79, 0x1D79 }, { 0x1D7D, 0x1D7D }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E9B }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F50, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1F87 }, { 0x1F90, 0x1F97 }, { 0x1FA0, 0x1FA7 }, { 0x1FB0, 0x1FB4 }, { 0x1FB6, 0x1FB7 }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FC7 }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FD7 }, { 0x1FE0, 0x1FE7 }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FF7 }, { 0x214E, 0x214E }, { 0x2170, 0x217F }, { 0x2184, 0x2184 }, { 0x24D0, 0x24E9 }, { 0x2C30, 0x2C5E }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C73, 0x2C73 }, { 0x2C76, 0x2C76 }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE3 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69B }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA72F }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA76F }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA791, 0xA791 }, { 0xA793, 0xA793 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xAB53, 0xAB53 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_property_changes_when_titlecased (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_changes_when_uppercased.c����������������������������0000664�0000000�0000000�00000036217�14110572173�0026000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0137 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0149 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018C }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019A }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01B9 }, { 0x01BD, 0x01BD }, { 0x01BF, 0x01BF }, { 0x01C5, 0x01C6 }, { 0x01C8, 0x01C9 }, { 0x01CB, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01F0 }, { 0x01F2, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0233 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0254 }, { 0x0256, 0x0257 }, { 0x0259, 0x0259 }, { 0x025B, 0x025C }, { 0x0260, 0x0261 }, { 0x0263, 0x0263 }, { 0x0265, 0x0266 }, { 0x0268, 0x026C }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0287, 0x028C }, { 0x0292, 0x0292 }, { 0x029D, 0x029E }, { 0x0345, 0x0345 }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037B, 0x037D }, { 0x0390, 0x0390 }, { 0x03AC, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FB }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0587 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D79, 0x1D79 }, { 0x1D7D, 0x1D7D }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E9B }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F50, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FB7 }, { 0x1FBC, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FC7 }, { 0x1FCC, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FD7 }, { 0x1FE0, 0x1FE7 }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FF7 }, { 0x1FFC, 0x1FFC }, { 0x214E, 0x214E }, { 0x2170, 0x217F }, { 0x2184, 0x2184 }, { 0x24D0, 0x24E9 }, { 0x2C30, 0x2C5E }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C73, 0x2C73 }, { 0x2C76, 0x2C76 }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE3 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69B }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA72F }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA76F }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA791, 0xA791 }, { 0xA793, 0xA793 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xAB53, 0xAB53 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_property_changes_when_uppercased (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_combining.c������������������������������������������0000664�0000000�0000000�00000015607�14110572173�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0300, 0x036F }, { 0x0483, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06DF, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0903 }, { 0x093A, 0x093C }, { 0x093E, 0x094F }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0983 }, { 0x09BC, 0x09BC }, { 0x09BE, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CD }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A03 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0ABC, 0x0ABC }, { 0x0ABE, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B03 }, { 0x0B3C, 0x0B3C }, { 0x0B3E, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD7, 0x0BD7 }, { 0x0C00, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D03 }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4D }, { 0x0D57, 0x0D57 }, { 0x0D62, 0x0D63 }, { 0x0D82, 0x0D83 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF3 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F3E, 0x0F3F }, { 0x0F71, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102B, 0x103E }, { 0x1056, 0x1059 }, { 0x105E, 0x1060 }, { 0x1062, 0x1064 }, { 0x1067, 0x106D }, { 0x1071, 0x1074 }, { 0x1082, 0x108D }, { 0x108F, 0x108F }, { 0x109A, 0x109D }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAD }, { 0x1BE6, 0x1BF3 }, { 0x1C24, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA953 }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9C0 }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA7B, 0xAA7D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEB, 0xAAEF }, { 0xAAF5, 0xAAF6 }, { 0xABE3, 0xABEA }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11000, 0x11002 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11082 }, { 0x110B0, 0x110BA }, { 0x11100, 0x11102 }, { 0x11127, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11182 }, { 0x111B3, 0x111C0 }, { 0x111CA, 0x111CC }, { 0x1122C, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112EA }, { 0x11300, 0x11303 }, { 0x1133C, 0x1133C }, { 0x1133E, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11435, 0x11446 }, { 0x114B0, 0x114C3 }, { 0x115AF, 0x115B5 }, { 0x115B8, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11630, 0x11640 }, { 0x116AB, 0x116B7 }, { 0x1171D, 0x1172B }, { 0x11C2F, 0x11C36 }, { 0x11C38, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F51, 0x16F7E }, { 0x16F8F, 0x16F92 }, { 0x1BC9D, 0x1BC9E }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_combining (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_composite.c������������������������������������������0000664�0000000�0000000�00000017203�14110572173�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00BC, 0x00BE }, { 0x00C0, 0x00C5 }, { 0x00C7, 0x00CF }, { 0x00D1, 0x00D6 }, { 0x00D9, 0x00DD }, { 0x00E0, 0x00E5 }, { 0x00E7, 0x00EF }, { 0x00F1, 0x00F6 }, { 0x00F9, 0x00FD }, { 0x00FF, 0x010F }, { 0x0112, 0x0125 }, { 0x0128, 0x0130 }, { 0x0132, 0x0137 }, { 0x0139, 0x0140 }, { 0x0143, 0x0149 }, { 0x014C, 0x0151 }, { 0x0154, 0x0165 }, { 0x0168, 0x017E }, { 0x01A0, 0x01A1 }, { 0x01AF, 0x01B0 }, { 0x01C4, 0x01DC }, { 0x01DE, 0x01E3 }, { 0x01E6, 0x01F5 }, { 0x01F8, 0x021B }, { 0x021E, 0x021F }, { 0x0226, 0x0233 }, { 0x0344, 0x0344 }, { 0x0385, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x0390 }, { 0x03AA, 0x03B0 }, { 0x03CA, 0x03CE }, { 0x03D3, 0x03D4 }, { 0x0400, 0x0401 }, { 0x0403, 0x0403 }, { 0x0407, 0x0407 }, { 0x040C, 0x040E }, { 0x0419, 0x0419 }, { 0x0439, 0x0439 }, { 0x0450, 0x0451 }, { 0x0453, 0x0453 }, { 0x0457, 0x0457 }, { 0x045C, 0x045E }, { 0x0476, 0x0477 }, { 0x04C1, 0x04C2 }, { 0x04D0, 0x04D3 }, { 0x04D6, 0x04D7 }, { 0x04DA, 0x04DF }, { 0x04E2, 0x04E7 }, { 0x04EA, 0x04F5 }, { 0x04F8, 0x04F9 }, { 0x0587, 0x0587 }, { 0x0622, 0x0626 }, { 0x0675, 0x0678 }, { 0x06C0, 0x06C0 }, { 0x06C2, 0x06C2 }, { 0x06D3, 0x06D3 }, { 0x0929, 0x0929 }, { 0x0931, 0x0931 }, { 0x0934, 0x0934 }, { 0x0958, 0x095F }, { 0x09CB, 0x09CC }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09DF }, { 0x0A33, 0x0A33 }, { 0x0A36, 0x0A36 }, { 0x0A59, 0x0A5B }, { 0x0A5E, 0x0A5E }, { 0x0B48, 0x0B48 }, { 0x0B4B, 0x0B4C }, { 0x0B5C, 0x0B5D }, { 0x0B94, 0x0B94 }, { 0x0BCA, 0x0BCC }, { 0x0C48, 0x0C48 }, { 0x0CC0, 0x0CC0 }, { 0x0CC7, 0x0CC8 }, { 0x0CCA, 0x0CCB }, { 0x0D4A, 0x0D4C }, { 0x0DDA, 0x0DDA }, { 0x0DDC, 0x0DDE }, { 0x0E33, 0x0E33 }, { 0x0EB3, 0x0EB3 }, { 0x0EDC, 0x0EDD }, { 0x0F43, 0x0F43 }, { 0x0F4D, 0x0F4D }, { 0x0F52, 0x0F52 }, { 0x0F57, 0x0F57 }, { 0x0F5C, 0x0F5C }, { 0x0F69, 0x0F69 }, { 0x0F73, 0x0F73 }, { 0x0F75, 0x0F79 }, { 0x0F81, 0x0F81 }, { 0x0F93, 0x0F93 }, { 0x0F9D, 0x0F9D }, { 0x0FA2, 0x0FA2 }, { 0x0FA7, 0x0FA7 }, { 0x0FAC, 0x0FAC }, { 0x0FB9, 0x0FB9 }, { 0x1026, 0x1026 }, { 0x1B06, 0x1B06 }, { 0x1B08, 0x1B08 }, { 0x1B0A, 0x1B0A }, { 0x1B0C, 0x1B0C }, { 0x1B0E, 0x1B0E }, { 0x1B12, 0x1B12 }, { 0x1B3B, 0x1B3B }, { 0x1B3D, 0x1B3D }, { 0x1B40, 0x1B41 }, { 0x1B43, 0x1B43 }, { 0x1E00, 0x1E9B }, { 0x1EA0, 0x1EF9 }, { 0x1F00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F70 }, { 0x1F72, 0x1F72 }, { 0x1F74, 0x1F74 }, { 0x1F76, 0x1F76 }, { 0x1F78, 0x1F78 }, { 0x1F7A, 0x1F7A }, { 0x1F7C, 0x1F7C }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBA }, { 0x1FBC, 0x1FBC }, { 0x1FC1, 0x1FC4 }, { 0x1FC6, 0x1FC8 }, { 0x1FCA, 0x1FCA }, { 0x1FCC, 0x1FD2 }, { 0x1FD6, 0x1FDA }, { 0x1FDD, 0x1FE2 }, { 0x1FE4, 0x1FEA }, { 0x1FEC, 0x1FED }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FF8 }, { 0x1FFA, 0x1FFA }, { 0x1FFC, 0x1FFC }, { 0x2025, 0x2026 }, { 0x2033, 0x2034 }, { 0x2036, 0x2037 }, { 0x203C, 0x203C }, { 0x2047, 0x2049 }, { 0x2057, 0x2057 }, { 0x20A8, 0x20A8 }, { 0x2100, 0x2101 }, { 0x2103, 0x2103 }, { 0x2105, 0x2106 }, { 0x2109, 0x2109 }, { 0x2116, 0x2116 }, { 0x2120, 0x2122 }, { 0x213B, 0x213B }, { 0x2150, 0x215F }, { 0x2161, 0x2163 }, { 0x2165, 0x2168 }, { 0x216A, 0x216B }, { 0x2171, 0x2173 }, { 0x2175, 0x2178 }, { 0x217A, 0x217B }, { 0x2189, 0x2189 }, { 0x219A, 0x219B }, { 0x21AE, 0x21AE }, { 0x21CD, 0x21CF }, { 0x2204, 0x2204 }, { 0x2209, 0x2209 }, { 0x220C, 0x220C }, { 0x2224, 0x2224 }, { 0x2226, 0x2226 }, { 0x222C, 0x222D }, { 0x222F, 0x2230 }, { 0x2241, 0x2241 }, { 0x2244, 0x2244 }, { 0x2247, 0x2247 }, { 0x2249, 0x2249 }, { 0x2260, 0x2260 }, { 0x2262, 0x2262 }, { 0x226D, 0x2271 }, { 0x2274, 0x2275 }, { 0x2278, 0x2279 }, { 0x2280, 0x2281 }, { 0x2284, 0x2285 }, { 0x2288, 0x2289 }, { 0x22AC, 0x22AF }, { 0x22E0, 0x22E3 }, { 0x22EA, 0x22ED }, { 0x2469, 0x24B5 }, { 0x2A0C, 0x2A0C }, { 0x2A74, 0x2A76 }, { 0x2ADC, 0x2ADC }, { 0x304C, 0x304C }, { 0x304E, 0x304E }, { 0x3050, 0x3050 }, { 0x3052, 0x3052 }, { 0x3054, 0x3054 }, { 0x3056, 0x3056 }, { 0x3058, 0x3058 }, { 0x305A, 0x305A }, { 0x305C, 0x305C }, { 0x305E, 0x305E }, { 0x3060, 0x3060 }, { 0x3062, 0x3062 }, { 0x3065, 0x3065 }, { 0x3067, 0x3067 }, { 0x3069, 0x3069 }, { 0x3070, 0x3071 }, { 0x3073, 0x3074 }, { 0x3076, 0x3077 }, { 0x3079, 0x307A }, { 0x307C, 0x307D }, { 0x3094, 0x3094 }, { 0x309E, 0x309F }, { 0x30AC, 0x30AC }, { 0x30AE, 0x30AE }, { 0x30B0, 0x30B0 }, { 0x30B2, 0x30B2 }, { 0x30B4, 0x30B4 }, { 0x30B6, 0x30B6 }, { 0x30B8, 0x30B8 }, { 0x30BA, 0x30BA }, { 0x30BC, 0x30BC }, { 0x30BE, 0x30BE }, { 0x30C0, 0x30C0 }, { 0x30C2, 0x30C2 }, { 0x30C5, 0x30C5 }, { 0x30C7, 0x30C7 }, { 0x30C9, 0x30C9 }, { 0x30D0, 0x30D1 }, { 0x30D3, 0x30D4 }, { 0x30D6, 0x30D7 }, { 0x30D9, 0x30DA }, { 0x30DC, 0x30DD }, { 0x30F4, 0x30F4 }, { 0x30F7, 0x30FA }, { 0x30FE, 0x30FF }, { 0x3200, 0x321E }, { 0x3220, 0x3243 }, { 0x3250, 0x325F }, { 0x326E, 0x327E }, { 0x32B1, 0x32CF }, { 0x3300, 0x33FF }, { 0xAC00, 0xD7A4 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB1F }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFB4F }, { 0xFBEA, 0xFBFB }, { 0xFC00, 0xFC5D }, { 0xFC64, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFC }, { 0xFE71, 0xFE71 }, { 0xFE77, 0xFE77 }, { 0xFE79, 0xFE79 }, { 0xFE7B, 0xFE7B }, { 0xFE7D, 0xFE7D }, { 0xFE7F, 0xFE7F }, { 0xFEF5, 0xFEFC }, { 0x1109A, 0x1109A }, { 0x1109C, 0x1109C }, { 0x110AB, 0x110AB }, { 0x1112E, 0x1112F }, { 0x1134B, 0x1134C }, { 0x114BB, 0x114BC }, { 0x114BE, 0x114BE }, { 0x115BA, 0x115BB }, { 0x1D15E, 0x1D164 }, { 0x1D1BB, 0x1D1C0 }, { 0x1F100, 0x1F10A }, { 0x1F110, 0x1F12A }, { 0x1F12D, 0x1F12E }, { 0x1F14A, 0x1F14F }, { 0x1F16A, 0x1F16B }, { 0x1F190, 0x1F190 }, { 0x1F200, 0x1F201 }, { 0x1F240, 0x1F248 } #define PREDICATE(c) uc_is_property_composite (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_currency_symbol.c������������������������������������0000664�0000000�0000000�00000002455�14110572173�0024350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x00A2, 0x00A5 }, { 0x058F, 0x058F }, { 0x060B, 0x060B }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x20A0, 0x20BE }, { 0xA838, 0xA838 }, { 0xFDFC, 0xFDFC }, { 0xFE69, 0xFE69 }, { 0xFF04, 0xFF04 }, { 0xFFE0, 0xFFE1 }, { 0xFFE5, 0xFFE6 } #define PREDICATE(c) uc_is_property_currency_symbol (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_dash.c�����������������������������������������������0000664�0000000�0000000�00000002602�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002D, 0x002D }, { 0x058A, 0x058A }, { 0x05BE, 0x05BE }, { 0x1400, 0x1400 }, { 0x1806, 0x1806 }, { 0x2010, 0x2015 }, { 0x2053, 0x2053 }, { 0x207B, 0x207B }, { 0x208B, 0x208B }, { 0x2212, 0x2212 }, { 0x2E17, 0x2E17 }, { 0x2E1A, 0x2E1A }, { 0x2E3A, 0x2E3B }, { 0x2E40, 0x2E40 }, { 0x301C, 0x301C }, { 0x3030, 0x3030 }, { 0x30A0, 0x30A0 }, { 0xFE31, 0xFE32 }, { 0xFE58, 0xFE58 }, { 0xFE63, 0xFE63 }, { 0xFF0D, 0xFF0D } #define PREDICATE(c) uc_is_property_dash (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_decimal_digit.c��������������������������������������0000664�0000000�0000000�00000004305�14110572173�0023703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0660, 0x0669 }, { 0x06F0, 0x06F9 }, { 0x07C0, 0x07C9 }, { 0x0966, 0x096F }, { 0x09E6, 0x09EF }, { 0x0A66, 0x0A6F }, { 0x0AE6, 0x0AEF }, { 0x0B66, 0x0B6F }, { 0x0BE6, 0x0BEF }, { 0x0C66, 0x0C6F }, { 0x0CE6, 0x0CEF }, { 0x0D66, 0x0D6F }, { 0x0DE6, 0x0DEF }, { 0x0E50, 0x0E59 }, { 0x0ED0, 0x0ED9 }, { 0x0F20, 0x0F29 }, { 0x1040, 0x1049 }, { 0x1090, 0x1099 }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1946, 0x194F }, { 0x19D0, 0x19D9 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1B50, 0x1B59 }, { 0x1BB0, 0x1BB9 }, { 0x1C40, 0x1C49 }, { 0x1C50, 0x1C59 }, { 0xA620, 0xA629 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 0xA9F0, 0xA9F9 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x104A0, 0x104A9 }, { 0x11066, 0x1106F }, { 0x110F0, 0x110F9 }, { 0x11136, 0x1113F }, { 0x111D0, 0x111D9 }, { 0x112F0, 0x112F9 }, { 0x11450, 0x11459 }, { 0x114D0, 0x114D9 }, { 0x11650, 0x11659 }, { 0x116C0, 0x116C9 }, { 0x11730, 0x11739 }, { 0x118E0, 0x118E9 }, { 0x11C50, 0x11C59 }, { 0x16A60, 0x16A69 }, { 0x16B50, 0x16B59 }, { 0x1D7CE, 0x1D7FF }, { 0x1E950, 0x1E959 } #define PREDICATE(c) uc_is_property_decimal_digit (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_default_ignorable_code_point.c�����������������������0000664�0000000�0000000�00000002500�14110572173�0026771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x034F, 0x034F }, { 0x061C, 0x061C }, { 0x115F, 0x1160 }, { 0x17B4, 0x17B5 }, { 0x180B, 0x180E }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x206F }, { 0x3164, 0x3164 }, { 0xFE00, 0xFE0F }, { 0xFEFF, 0xFEFF }, { 0xFFA0, 0xFFA0 }, { 0xFFF0, 0xFFF8 }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0000, 0xE0FFF } #define PREDICATE(c) uc_is_property_default_ignorable_code_point (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_deprecated.c�����������������������������������������0000664�0000000�0000000�00000002122�14110572173�0023220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0149, 0x0149 }, { 0x0673, 0x0673 }, { 0x0F77, 0x0F77 }, { 0x0F79, 0x0F79 }, { 0x17A3, 0x17A4 }, { 0x206A, 0x206F }, { 0x2329, 0x232A }, { 0xE0001, 0xE0001 } #define PREDICATE(c) uc_is_property_deprecated (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_diacritic.c������������������������������������������0000664�0000000�0000000�00000011015�14110572173�0023054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x00A8, 0x00A8 }, { 0x00AF, 0x00AF }, { 0x00B4, 0x00B4 }, { 0x00B7, 0x00B8 }, { 0x02B0, 0x034E }, { 0x0350, 0x0357 }, { 0x035D, 0x0362 }, { 0x0374, 0x0375 }, { 0x037A, 0x037A }, { 0x0384, 0x0385 }, { 0x0483, 0x0487 }, { 0x0559, 0x0559 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C4 }, { 0x064B, 0x0652 }, { 0x0657, 0x0658 }, { 0x06DF, 0x06E0 }, { 0x06E5, 0x06E6 }, { 0x06EA, 0x06EC }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F5 }, { 0x0818, 0x0819 }, { 0x08E3, 0x08FE }, { 0x093C, 0x093C }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0971, 0x0971 }, { 0x09BC, 0x09BC }, { 0x09CD, 0x09CD }, { 0x0A3C, 0x0A3C }, { 0x0A4D, 0x0A4D }, { 0x0ABC, 0x0ABC }, { 0x0ACD, 0x0ACD }, { 0x0B3C, 0x0B3C }, { 0x0B4D, 0x0B4D }, { 0x0BCD, 0x0BCD }, { 0x0C4D, 0x0C4D }, { 0x0CBC, 0x0CBC }, { 0x0CCD, 0x0CCD }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0E47, 0x0E4C }, { 0x0E4E, 0x0E4E }, { 0x0EC8, 0x0ECC }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F3E, 0x0F3F }, { 0x0F82, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0FC6, 0x0FC6 }, { 0x1037, 0x1037 }, { 0x1039, 0x103A }, { 0x1087, 0x108D }, { 0x108F, 0x108F }, { 0x109A, 0x109B }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x1939, 0x193B }, { 0x1A75, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABD }, { 0x1B34, 0x1B34 }, { 0x1B44, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1BAA, 0x1BAB }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1D2C, 0x1D6A }, { 0x1DC4, 0x1DCF }, { 0x1DF5, 0x1DF5 }, { 0x1DFD, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2CEF, 0x2CF1 }, { 0x2E2F, 0x2E2F }, { 0x302A, 0x302F }, { 0x3099, 0x309C }, { 0x30FC, 0x30FC }, { 0xA66F, 0xA66F }, { 0xA67C, 0xA67D }, { 0xA67F, 0xA67F }, { 0xA69C, 0xA69D }, { 0xA6F0, 0xA6F1 }, { 0xA717, 0xA721 }, { 0xA788, 0xA788 }, { 0xA7F8, 0xA7F9 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA92B, 0xA92E }, { 0xA953, 0xA953 }, { 0xA9B3, 0xA9B3 }, { 0xA9C0, 0xA9C0 }, { 0xA9E5, 0xA9E5 }, { 0xAA7B, 0xAA7D }, { 0xAABF, 0xAAC2 }, { 0xAAF6, 0xAAF6 }, { 0xAB5B, 0xAB5F }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE2F }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F }, { 0xFFE3, 0xFFE3 }, { 0x102E0, 0x102E0 }, { 0x10AE5, 0x10AE6 }, { 0x110B9, 0x110BA }, { 0x11133, 0x11134 }, { 0x11173, 0x11173 }, { 0x111C0, 0x111C0 }, { 0x111CA, 0x111CC }, { 0x11235, 0x11236 }, { 0x112E9, 0x112EA }, { 0x1133C, 0x1133C }, { 0x1134D, 0x1134D }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11442, 0x11442 }, { 0x11446, 0x11446 }, { 0x114C2, 0x114C3 }, { 0x115BF, 0x115C0 }, { 0x1163F, 0x1163F }, { 0x116B6, 0x116B7 }, { 0x1172B, 0x1172B }, { 0x11C3F, 0x11C3F }, { 0x16AF0, 0x16AF4 }, { 0x16F8F, 0x16F9F }, { 0x1D167, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E946 }, { 0x1E948, 0x1E94A } #define PREDICATE(c) uc_is_property_diacritic (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_extender.c�������������������������������������������0000664�0000000�0000000�00000003070�14110572173�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00B7, 0x00B7 }, { 0x02D0, 0x02D1 }, { 0x0640, 0x0640 }, { 0x07FA, 0x07FA }, { 0x0E46, 0x0E46 }, { 0x0EC6, 0x0EC6 }, { 0x180A, 0x180A }, { 0x1843, 0x1843 }, { 0x1AA7, 0x1AA7 }, { 0x1C36, 0x1C36 }, { 0x1C7B, 0x1C7B }, { 0x3005, 0x3005 }, { 0x3031, 0x3035 }, { 0x309D, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA60C, 0xA60C }, { 0xA9CF, 0xA9CF }, { 0xA9E6, 0xA9E6 }, { 0xAA70, 0xAA70 }, { 0xAADD, 0xAADD }, { 0xAAF3, 0xAAF4 }, { 0xFF70, 0xFF70 }, { 0x1135D, 0x1135D }, { 0x115C6, 0x115C8 }, { 0x16B42, 0x16B43 }, { 0x16FE0, 0x16FE0 }, { 0x1E944, 0x1E946 } #define PREDICATE(c) uc_is_property_extender (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_format_control.c�������������������������������������0000664�0000000�0000000�00000002164�14110572173�0024156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x180E, 0x180E }, { 0x200B, 0x200B }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_format_control (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_grapheme_base.c��������������������������������������0000664�0000000�0000000�00000047123�14110572173�0023714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0020, 0x007E }, { 0x00A0, 0x00AC }, { 0x00AE, 0x02FF }, { 0x0370, 0x0377 }, { 0x037A, 0x037F }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x0482 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 0x058D, 0x058F }, { 0x05BE, 0x05BE }, { 0x05C0, 0x05C0 }, { 0x05C3, 0x05C3 }, { 0x05C6, 0x05C6 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F4 }, { 0x0606, 0x060F }, { 0x061B, 0x061B }, { 0x061E, 0x064A }, { 0x0660, 0x066F }, { 0x0671, 0x06D5 }, { 0x06DE, 0x06DE }, { 0x06E5, 0x06E6 }, { 0x06E9, 0x06E9 }, { 0x06EE, 0x070D }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0830, 0x083E }, { 0x0840, 0x0858 }, { 0x085E, 0x085E }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0903, 0x0939 }, { 0x093B, 0x093B }, { 0x093D, 0x0940 }, { 0x0949, 0x094C }, { 0x094E, 0x0950 }, { 0x0958, 0x0961 }, { 0x0964, 0x0980 }, { 0x0982, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09BF, 0x09C0 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CC }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09E6, 0x09FB }, { 0x0A03, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3E, 0x0A40 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A83, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0AC0 }, { 0x0AC9, 0x0AC9 }, { 0x0ACB, 0x0ACC }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AE6, 0x0AF1 }, { 0x0AF9, 0x0AF9 }, { 0x0B02, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B40, 0x0B40 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4C }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B66, 0x0B77 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBF, 0x0BBF }, { 0x0BC1, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCC }, { 0x0BD0, 0x0BD0 }, { 0x0BE6, 0x0BFA }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C41, 0x0C44 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C80 }, { 0x0C82, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBE }, { 0x0CC0, 0x0CC1 }, { 0x0CC3, 0x0CC4 }, { 0x0CC7, 0x0CC8 }, { 0x0CCA, 0x0CCB }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D3F, 0x0D40 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4C }, { 0x0D4E, 0x0D4F }, { 0x0D54, 0x0D56 }, { 0x0D58, 0x0D61 }, { 0x0D66, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DD0, 0x0DD1 }, { 0x0DD8, 0x0DDE }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF4 }, { 0x0E01, 0x0E30 }, { 0x0E32, 0x0E33 }, { 0x0E3F, 0x0E46 }, { 0x0E4F, 0x0E5B }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F17 }, { 0x0F1A, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0F3A, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F7F, 0x0F7F }, { 0x0F85, 0x0F85 }, { 0x0F88, 0x0F8C }, { 0x0FBE, 0x0FC5 }, { 0x0FC7, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x102C }, { 0x1031, 0x1031 }, { 0x1038, 0x1038 }, { 0x103B, 0x103C }, { 0x103F, 0x1057 }, { 0x105A, 0x105D }, { 0x1061, 0x1070 }, { 0x1075, 0x1081 }, { 0x1083, 0x1084 }, { 0x1087, 0x108C }, { 0x108E, 0x109C }, { 0x109E, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1360, 0x137C }, { 0x1380, 0x1399 }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1400, 0x169C }, { 0x16A0, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1735, 0x1736 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17B6, 0x17B6 }, { 0x17BE, 0x17C5 }, { 0x17C7, 0x17C8 }, { 0x17D4, 0x17DC }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180A }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1923, 0x1926 }, { 0x1929, 0x192B }, { 0x1930, 0x1931 }, { 0x1933, 0x1938 }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A16 }, { 0x1A19, 0x1A1A }, { 0x1A1E, 0x1A55 }, { 0x1A57, 0x1A57 }, { 0x1A61, 0x1A61 }, { 0x1A63, 0x1A64 }, { 0x1A6D, 0x1A72 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA0, 0x1AAD }, { 0x1B04, 0x1B33 }, { 0x1B35, 0x1B35 }, { 0x1B3B, 0x1B3B }, { 0x1B3D, 0x1B41 }, { 0x1B43, 0x1B4B }, { 0x1B50, 0x1B6A }, { 0x1B74, 0x1B7C }, { 0x1B82, 0x1BA1 }, { 0x1BA6, 0x1BA7 }, { 0x1BAA, 0x1BAA }, { 0x1BAE, 0x1BE5 }, { 0x1BE7, 0x1BE7 }, { 0x1BEA, 0x1BEC }, { 0x1BEE, 0x1BEE }, { 0x1BF2, 0x1BF3 }, { 0x1BFC, 0x1C2B }, { 0x1C34, 0x1C35 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C88 }, { 0x1CC0, 0x1CC7 }, { 0x1CD3, 0x1CD3 }, { 0x1CE1, 0x1CE1 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF3 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FC4 }, { 0x1FC6, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FDD, 0x1FEF }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFE }, { 0x2000, 0x200A }, { 0x2010, 0x2027 }, { 0x202F, 0x205F }, { 0x2070, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20BE }, { 0x2100, 0x218B }, { 0x2190, 0x23FE }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B98, 0x2BB9 }, { 0x2BBD, 0x2BC8 }, { 0x2BCA, 0x2BD1 }, { 0x2BEC, 0x2BEF }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2CF9, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D70 }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E00, 0x2E44 }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x3000, 0x3029 }, { 0x3030, 0x303F }, { 0x3041, 0x3096 }, { 0x309B, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x3190, 0x31BA }, { 0x31C0, 0x31E3 }, { 0x31F0, 0x321E }, { 0x3220, 0x32FE }, { 0x3300, 0x4DB5 }, { 0x4DC0, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA66E }, { 0xA673, 0xA673 }, { 0xA67E, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA6F2, 0xA6F7 }, { 0xA700, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA824 }, { 0xA827, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C3 }, { 0xA8CE, 0xA8D9 }, { 0xA8F2, 0xA8FD }, { 0xA900, 0xA925 }, { 0xA92E, 0xA946 }, { 0xA952, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA983, 0xA9B2 }, { 0xA9B4, 0xA9B5 }, { 0xA9BA, 0xA9BB }, { 0xA9BD, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9E4 }, { 0xA9E6, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA2F, 0xAA30 }, { 0xAA33, 0xAA34 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA4D, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAA7B }, { 0xAA7D, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAAEB }, { 0xAAEE, 0xAAF5 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB65 }, { 0xAB70, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEC }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBC1 }, { 0xFBD3, 0xFD3F }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFD }, { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF01, 0xFF9D }, { 0xFFA0, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFFC, 0xFFFD }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1018E }, { 0x10190, 0x1019B }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FC }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E1, 0x102FB }, { 0x10300, 0x10323 }, { 0x10330, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x1056F, 0x1056F }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1089E }, { 0x108A7, 0x108AF }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x108FB, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10980, 0x109B7 }, { 0x109BC, 0x109CF }, { 0x109D2, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A40, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A9F }, { 0x10AC0, 0x10AE4 }, { 0x10AEB, 0x10AF6 }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B91 }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11000, 0x11000 }, { 0x11002, 0x11037 }, { 0x11047, 0x1104D }, { 0x11052, 0x1106F }, { 0x11082, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11103, 0x11126 }, { 0x1112C, 0x1112C }, { 0x11136, 0x11143 }, { 0x11150, 0x11172 }, { 0x11174, 0x11176 }, { 0x11182, 0x111B5 }, { 0x111BF, 0x111C9 }, { 0x111CD, 0x111CD }, { 0x111D0, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x11200, 0x11211 }, { 0x11213, 0x1122E }, { 0x11232, 0x11233 }, { 0x11235, 0x11235 }, { 0x11238, 0x1123D }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A9 }, { 0x112B0, 0x112DE }, { 0x112E0, 0x112E2 }, { 0x112F0, 0x112F9 }, { 0x11302, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x1133F, 0x1133F }, { 0x11341, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11363 }, { 0x11400, 0x11437 }, { 0x11440, 0x11441 }, { 0x11445, 0x11445 }, { 0x11447, 0x11459 }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x11480, 0x114AF }, { 0x114B1, 0x114B2 }, { 0x114B9, 0x114B9 }, { 0x114BB, 0x114BC }, { 0x114BE, 0x114BE }, { 0x114C1, 0x114C1 }, { 0x114C4, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115AE }, { 0x115B0, 0x115B1 }, { 0x115B8, 0x115BB }, { 0x115BE, 0x115BE }, { 0x115C1, 0x115DB }, { 0x11600, 0x11632 }, { 0x1163B, 0x1163C }, { 0x1163E, 0x1163E }, { 0x11641, 0x11644 }, { 0x11650, 0x11659 }, { 0x11660, 0x1166C }, { 0x11680, 0x116AA }, { 0x116AC, 0x116AC }, { 0x116AE, 0x116AF }, { 0x116B6, 0x116B6 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x11720, 0x11721 }, { 0x11726, 0x11726 }, { 0x11730, 0x1173F }, { 0x118A0, 0x118F2 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2F }, { 0x11C3E, 0x11C3E }, { 0x11C40, 0x11C45 }, { 0x11C50, 0x11C6C }, { 0x11C70, 0x11C8F }, { 0x11CA9, 0x11CA9 }, { 0x11CB1, 0x11CB1 }, { 0x11CB4, 0x11CB4 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12470, 0x12474 }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A6E, 0x16A6F }, { 0x16AD0, 0x16AED }, { 0x16AF5, 0x16AF5 }, { 0x16B00, 0x16B2F }, { 0x16B37, 0x16B45 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9C, 0x1BC9C }, { 0x1BC9F, 0x1BC9F }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D166, 0x1D166 }, { 0x1D16A, 0x1D16D }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1E8 }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D371 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1D9FF }, { 0x1DA37, 0x1DA3A }, { 0x1DA6D, 0x1DA74 }, { 0x1DA76, 0x1DA83 }, { 0x1DA85, 0x1DA8B }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8CF }, { 0x1E900, 0x1E943 }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F10C }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F16B }, { 0x1F170, 0x1F1AC }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F6D2 }, { 0x1F6E0, 0x1F6EC }, { 0x1F6F0, 0x1F6F6 }, { 0x1F700, 0x1F773 }, { 0x1F780, 0x1F7D4 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F910, 0x1F91E }, { 0x1F920, 0x1F927 }, { 0x1F930, 0x1F930 }, { 0x1F933, 0x1F93E }, { 0x1F940, 0x1F94B }, { 0x1F950, 0x1F95E }, { 0x1F980, 0x1F991 }, { 0x1F9C0, 0x1F9C0 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_grapheme_base (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_grapheme_extend.c������������������������������������0000664�0000000�0000000�00000020263�14110572173�0024265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0300, 0x036F }, { 0x0483, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06DF, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0859, 0x085B }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0902 }, { 0x093A, 0x093A }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09BE, 0x09BE }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3E, 0x0B3F }, { 0x0B41, 0x0B44 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BBE }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0BD7, 0x0BD7 }, { 0x0C00, 0x0C00 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C81 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC2, 0x0CC2 }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D01 }, { 0x0D3E, 0x0D3E }, { 0x0D41, 0x0D44 }, { 0x0D4D, 0x0D4D }, { 0x0D57, 0x0D57 }, { 0x0D62, 0x0D63 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DCF }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DDF, 0x0DDF }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1037 }, { 0x1039, 0x103A }, { 0x103D, 0x103E }, { 0x1058, 0x1059 }, { 0x105E, 0x1060 }, { 0x1071, 0x1074 }, { 0x1082, 0x1082 }, { 0x1085, 0x1086 }, { 0x108D, 0x108D }, { 0x109D, 0x109D }, { 0x135D, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A1B, 0x1A1B }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AB0, 0x1ABE }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BAB, 0x1BAD }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF8, 0x1CF9 }, { 0x1DC0, 0x1DF5 }, { 0x1DFB, 0x1DFF }, { 0x200C, 0x200C }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA674, 0xA67D }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C5 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA7C, 0xAA7C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAAEC, 0xAAED }, { 0xAAF6, 0xAAF6 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0xFF9E, 0xFF9F }, { 0x101FD, 0x101FD }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111CA, 0x111CC }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133C, 0x1133C }, { 0x1133E, 0x1133E }, { 0x11340, 0x11340 }, { 0x11357, 0x11357 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x114B0, 0x114B0 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BD, 0x114BD }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115AF, 0x115AF }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F8F, 0x16F92 }, { 0x1BC9D, 0x1BC9E }, { 0x1D165, 0x1D165 }, { 0x1D167, 0x1D169 }, { 0x1D16E, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_grapheme_extend (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_grapheme_link.c��������������������������������������0000664�0000000�0000000�00000003673�14110572173�0023741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x094D, 0x094D }, { 0x09CD, 0x09CD }, { 0x0A4D, 0x0A4D }, { 0x0ACD, 0x0ACD }, { 0x0B4D, 0x0B4D }, { 0x0BCD, 0x0BCD }, { 0x0C4D, 0x0C4D }, { 0x0CCD, 0x0CCD }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0E3A, 0x0E3A }, { 0x0F84, 0x0F84 }, { 0x1039, 0x103A }, { 0x1714, 0x1714 }, { 0x1734, 0x1734 }, { 0x17D2, 0x17D2 }, { 0x1A60, 0x1A60 }, { 0x1B44, 0x1B44 }, { 0x1BAA, 0x1BAB }, { 0x1BF2, 0x1BF3 }, { 0x2D7F, 0x2D7F }, { 0xA806, 0xA806 }, { 0xA8C4, 0xA8C4 }, { 0xA953, 0xA953 }, { 0xA9C0, 0xA9C0 }, { 0xAAF6, 0xAAF6 }, { 0xABED, 0xABED }, { 0x10A3F, 0x10A3F }, { 0x11046, 0x11046 }, { 0x1107F, 0x1107F }, { 0x110B9, 0x110B9 }, { 0x11133, 0x11134 }, { 0x111C0, 0x111C0 }, { 0x11235, 0x11235 }, { 0x112EA, 0x112EA }, { 0x1134D, 0x1134D }, { 0x11442, 0x11442 }, { 0x114C2, 0x114C2 }, { 0x115BF, 0x115BF }, { 0x1163F, 0x1163F }, { 0x116B6, 0x116B6 }, { 0x1172B, 0x1172B }, { 0x11C3F, 0x11C3F } #define PREDICATE(c) uc_is_property_grapheme_link (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_hex_digit.c������������������������������������������0000664�0000000�0000000�00000002037�14110572173�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x0046 }, { 0x0061, 0x0066 }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF26 }, { 0xFF41, 0xFF46 } #define PREDICATE(c) uc_is_property_hex_digit (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_hyphen.c���������������������������������������������0000664�0000000�0000000�00000002174�14110572173�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002D, 0x002D }, { 0x00AD, 0x00AD }, { 0x058A, 0x058A }, { 0x1806, 0x1806 }, { 0x2010, 0x2011 }, { 0x2E17, 0x2E17 }, { 0x30FB, 0x30FB }, { 0xFE63, 0xFE63 }, { 0xFF0D, 0xFF0D }, { 0xFF65, 0xFF65 } #define PREDICATE(c) uc_is_property_hyphen (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_id_continue.c����������������������������������������0000664�0000000�0000000�00000042325�14110572173�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x005A }, { 0x005F, 0x005F }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00B7, 0x00B7 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0300, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x0483, 0x0487 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0610, 0x061A }, { 0x0620, 0x0669 }, { 0x066E, 0x06D3 }, { 0x06D5, 0x06DC }, { 0x06DF, 0x06E8 }, { 0x06EA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x082D }, { 0x0840, 0x085B }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0963 }, { 0x0966, 0x096F }, { 0x0971, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09F1 }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BEF }, { 0x0C00, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D01, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D54, 0x0D57 }, { 0x0D5F, 0x0D63 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF3 }, { 0x0E01, 0x0E3A }, { 0x0E40, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB9 }, { 0x0EBB, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F18, 0x0F19 }, { 0x0F20, 0x0F29 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F3E, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F84 }, { 0x0F86, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x1000, 0x1049 }, { 0x1050, 0x109D }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x135F }, { 0x1369, 0x1371 }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1734 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x180B, 0x180D }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x1A00, 0x1A1B }, { 0x1A20, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1AB0, 0x1ABD }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1BF3 }, { 0x1C00, 0x1C37 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CF6 }, { 0x1CF8, 0x1CF9 }, { 0x1D00, 0x1DF5 }, { 0x1DFB, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x203F, 0x2040 }, { 0x2054, 0x2054 }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20F0 }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2118, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2DFF }, { 0x3005, 0x3007 }, { 0x3021, 0x302F }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x3099, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66F }, { 0xA674, 0xA67D }, { 0xA67F, 0xA6F1 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C5 }, { 0xA8D0, 0xA8D9 }, { 0xA8E0, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA900, 0xA92D }, { 0xA930, 0xA953 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9C0 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEF }, { 0xAAF2, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABEA }, { 0xABEC, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0xFE33, 0xFE34 }, { 0xFE4D, 0xFE4F }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF3F, 0xFF3F }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x101FD, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102E0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE6 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11000, 0x11046 }, { 0x11066, 0x1106F }, { 0x1107F, 0x110BA }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x1113F }, { 0x11150, 0x11173 }, { 0x11176, 0x11176 }, { 0x11180, 0x111C4 }, { 0x111CA, 0x111CC }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x11237 }, { 0x1123E, 0x1123E }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133C, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x1144A }, { 0x11450, 0x11459 }, { 0x11480, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115C0 }, { 0x115D8, 0x115DD }, { 0x11600, 0x11640 }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116B7 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x1171D, 0x1172B }, { 0x11730, 0x11739 }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF4 }, { 0x16B00, 0x16B36 }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9D, 0x1BC9E }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E800, 0x1E8C4 }, { 0x1E8D0, 0x1E8D6 }, { 0x1E900, 0x1E94A }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_id_continue (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_id_start.c�������������������������������������������0000664�0000000�0000000�00000035226�14110572173�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x064A }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07CA, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09F0, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0E01, 0x0E30 }, { 0x0E32, 0x0E33 }, { 0x0E40, 0x0E46 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x103F }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1877 }, { 0x1880, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BBA, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2118, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309B, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9EF }, { 0xA9FA, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x11103, 0x11126 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111DA, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11680, 0x116AA }, { 0x11700, 0x11719 }, { 0x118A0, 0x118DF }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_id_start (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_ideographic.c����������������������������������������0000664�0000000�0000000�00000002357�14110572173�0023410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x3006, 0x3007 }, { 0x3021, 0x3029 }, { 0x3038, 0x303A }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_ideographic (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_ids_binary_operator.c��������������������������������0000664�0000000�0000000�00000001711�14110572173�0025161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2FF0, 0x2FF1 }, { 0x2FF4, 0x2FFB } #define PREDICATE(c) uc_is_property_ids_binary_operator (c) #include "test-predicate-part2.h" �������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_ids_trinary_operator.c�������������������������������0000664�0000000�0000000�00000001662�14110572173�0025372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2FF2, 0x2FF3 } #define PREDICATE(c) uc_is_property_ids_trinary_operator (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_ignorable_control.c����������������������������������0000664�0000000�0000000�00000002661�14110572173�0024632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0001, 0x0008 }, { 0x000E, 0x001B }, { 0x007F, 0x0084 }, { 0x0086, 0x009F }, { 0x00AD, 0x00AD }, { 0x0600, 0x0605 }, { 0x061C, 0x061C }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_ignorable_control (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_iso_control.c����������������������������������������0000664�0000000�0000000�00000001701�14110572173�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F } #define PREDICATE(c) uc_is_property_iso_control (c) #include "test-predicate-part2.h" ���������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_join_control.c���������������������������������������0000664�0000000�0000000�00000001652�14110572173�0023626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x200C, 0x200D } #define PREDICATE(c) uc_is_property_join_control (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_left_of_pair.c���������������������������������������0000664�0000000�0000000�00000003552�14110572173�0023561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0028, 0x0028 }, { 0x005B, 0x005B }, { 0x007B, 0x007B }, { 0x00AB, 0x00AB }, { 0x0F3A, 0x0F3A }, { 0x0F3C, 0x0F3C }, { 0x169B, 0x169B }, { 0x2018, 0x2018 }, { 0x201A, 0x201C }, { 0x201E, 0x201F }, { 0x2039, 0x2039 }, { 0x2045, 0x2045 }, { 0x207D, 0x207D }, { 0x208D, 0x208D }, { 0x2329, 0x2329 }, { 0x3008, 0x3008 }, { 0x300A, 0x300A }, { 0x300C, 0x300C }, { 0x300E, 0x300E }, { 0x3010, 0x3010 }, { 0x3014, 0x3014 }, { 0x3016, 0x3016 }, { 0x3018, 0x3018 }, { 0x301A, 0x301A }, { 0x301D, 0x301D }, { 0xFD3E, 0xFD3E }, { 0xFE35, 0xFE35 }, { 0xFE37, 0xFE37 }, { 0xFE39, 0xFE39 }, { 0xFE3B, 0xFE3B }, { 0xFE3D, 0xFE3D }, { 0xFE3F, 0xFE3F }, { 0xFE41, 0xFE41 }, { 0xFE43, 0xFE43 }, { 0xFE59, 0xFE59 }, { 0xFE5B, 0xFE5B }, { 0xFE5D, 0xFE5D }, { 0xFF08, 0xFF08 }, { 0xFF3B, 0xFF3B }, { 0xFF5B, 0xFF5B }, { 0xFF62, 0xFF62 } #define PREDICATE(c) uc_is_property_left_of_pair (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_line_separator.c�������������������������������������0000664�0000000�0000000�00000001654�14110572173�0024140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2028, 0x2028 } #define PREDICATE(c) uc_is_property_line_separator (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_logical_order_exception.c����������������������������0000664�0000000�0000000�00000002105�14110572173�0026004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0E40, 0x0E44 }, { 0x0EC0, 0x0EC4 }, { 0x19B5, 0x19B7 }, { 0x19BA, 0x19BA }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAAB9 }, { 0xAABB, 0xAABC } #define PREDICATE(c) uc_is_property_logical_order_exception (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_lowercase.c������������������������������������������0000664�0000000�0000000�00000037721�14110572173�0023121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0138 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0149 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018D }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019B }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AA, 0x01AB }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01BA }, { 0x01BD, 0x01BF }, { 0x01C6, 0x01C6 }, { 0x01C9, 0x01C9 }, { 0x01CC, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01F0 }, { 0x01F3, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0221, 0x0221 }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0239 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0293 }, { 0x0295, 0x02B8 }, { 0x02C0, 0x02C1 }, { 0x02E0, 0x02E4 }, { 0x0345, 0x0345 }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037A, 0x037D }, { 0x0390, 0x0390 }, { 0x03AC, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FC }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0587 }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D00, 0x1DBF }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E9D }, { 0x1E9F, 0x1E9F }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F50, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1F87 }, { 0x1F90, 0x1F97 }, { 0x1FA0, 0x1FA7 }, { 0x1FB0, 0x1FB4 }, { 0x1FB6, 0x1FB7 }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FC7 }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FD7 }, { 0x1FE0, 0x1FE7 }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FF7 }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x210A, 0x210A }, { 0x210E, 0x210F }, { 0x2113, 0x2113 }, { 0x212F, 0x212F }, { 0x2134, 0x2134 }, { 0x2139, 0x2139 }, { 0x213C, 0x213D }, { 0x2146, 0x2149 }, { 0x214E, 0x214E }, { 0x2170, 0x217F }, { 0x2184, 0x2184 }, { 0x24D0, 0x24E9 }, { 0x2C30, 0x2C5E }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C71, 0x2C71 }, { 0x2C73, 0x2C74 }, { 0x2C76, 0x2C7D }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE4 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69D }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA731 }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA778 }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA78E, 0xA78E }, { 0xA791, 0xA791 }, { 0xA793, 0xA795 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xA7F8, 0xA7FA }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABBF }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x1D41A, 0x1D433 }, { 0x1D44E, 0x1D454 }, { 0x1D456, 0x1D467 }, { 0x1D482, 0x1D49B }, { 0x1D4B6, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D4CF }, { 0x1D4EA, 0x1D503 }, { 0x1D51E, 0x1D537 }, { 0x1D552, 0x1D56B }, { 0x1D586, 0x1D59F }, { 0x1D5BA, 0x1D5D3 }, { 0x1D5EE, 0x1D607 }, { 0x1D622, 0x1D63B }, { 0x1D656, 0x1D66F }, { 0x1D68A, 0x1D6A5 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6E1 }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D71B }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D755 }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D78F }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7C9 }, { 0x1D7CB, 0x1D7CB }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_property_lowercase (c) #include "test-predicate-part2.h" �����������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_math.c�����������������������������������������������0000664�0000000�0000000�00000010350�14110572173�0022053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x002B, 0x002B }, { 0x003C, 0x003E }, { 0x005E, 0x005E }, { 0x007C, 0x007C }, { 0x007E, 0x007E }, { 0x00AC, 0x00AC }, { 0x00B1, 0x00B1 }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x03D0, 0x03D2 }, { 0x03D5, 0x03D5 }, { 0x03F0, 0x03F1 }, { 0x03F4, 0x03F6 }, { 0x0606, 0x0608 }, { 0x2016, 0x2016 }, { 0x2032, 0x2034 }, { 0x2040, 0x2040 }, { 0x2044, 0x2044 }, { 0x2052, 0x2052 }, { 0x2061, 0x2064 }, { 0x207A, 0x207E }, { 0x208A, 0x208E }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20E6 }, { 0x20EB, 0x20EF }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2118, 0x211D }, { 0x2124, 0x2124 }, { 0x2128, 0x2129 }, { 0x212C, 0x212D }, { 0x212F, 0x2131 }, { 0x2133, 0x2138 }, { 0x213C, 0x2149 }, { 0x214B, 0x214B }, { 0x2190, 0x21A7 }, { 0x21A9, 0x21AE }, { 0x21B0, 0x21B1 }, { 0x21B6, 0x21B7 }, { 0x21BC, 0x21DB }, { 0x21DD, 0x21DD }, { 0x21E4, 0x21E5 }, { 0x21F4, 0x22FF }, { 0x2308, 0x230B }, { 0x2320, 0x2321 }, { 0x237C, 0x237C }, { 0x239B, 0x23B5 }, { 0x23B7, 0x23B7 }, { 0x23D0, 0x23D0 }, { 0x23DC, 0x23E2 }, { 0x25A0, 0x25A1 }, { 0x25AE, 0x25B7 }, { 0x25BC, 0x25C1 }, { 0x25C6, 0x25C7 }, { 0x25CA, 0x25CB }, { 0x25CF, 0x25D3 }, { 0x25E2, 0x25E2 }, { 0x25E4, 0x25E4 }, { 0x25E7, 0x25EC }, { 0x25F8, 0x25FF }, { 0x2605, 0x2606 }, { 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2663 }, { 0x266D, 0x266F }, { 0x27C0, 0x27FF }, { 0x2900, 0x2AFF }, { 0x2B30, 0x2B44 }, { 0x2B47, 0x2B4C }, { 0xFB29, 0xFB29 }, { 0xFE61, 0xFE66 }, { 0xFE68, 0xFE68 }, { 0xFF0B, 0xFF0B }, { 0xFF1C, 0xFF1E }, { 0xFF3C, 0xFF3C }, { 0xFF3E, 0xFF3E }, { 0xFF5C, 0xFF5C }, { 0xFF5E, 0xFF5E }, { 0xFFE2, 0xFFE2 }, { 0xFFE9, 0xFFEC }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 } #define PREDICATE(c) uc_is_property_math (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_non_break.c������������������������������������������0000664�0000000�0000000�00000002177�14110572173�0023070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00A0, 0x00A0 }, { 0x034F, 0x034F }, { 0x035C, 0x0362 }, { 0x0F08, 0x0F08 }, { 0x0F0C, 0x0F0C }, { 0x0F12, 0x0F12 }, { 0x180E, 0x180E }, { 0x2007, 0x2007 }, { 0x2011, 0x2011 }, { 0x202F, 0x202F } #define PREDICATE(c) uc_is_property_non_break (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_not_a_character.c������������������������������������0000664�0000000�0000000�00000002547�14110572173�0024247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0xFDD0, 0xFDEF }, { 0xFFFE, 0xFFFF }, { 0x1FFFE, 0x1FFFF }, { 0x2FFFE, 0x2FFFF }, { 0x3FFFE, 0x3FFFF }, { 0x4FFFE, 0x4FFFF }, { 0x5FFFE, 0x5FFFF }, { 0x6FFFE, 0x6FFFF }, { 0x7FFFE, 0x7FFFF }, { 0x8FFFE, 0x8FFFF }, { 0x9FFFE, 0x9FFFF }, { 0xAFFFE, 0xAFFFF }, { 0xBFFFE, 0xBFFFF }, { 0xCFFFE, 0xCFFFF }, { 0xDFFFE, 0xDFFFF }, { 0xEFFFE, 0xEFFFF }, { 0xFFFFE, 0xFFFFF }, { 0x10FFFE, 0x10FFFF } #define PREDICATE(c) uc_is_property_not_a_character (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_numeric.c��������������������������������������������0000664�0000000�0000000�00000007567�14110572173�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x00B2, 0x00B3 }, { 0x00B9, 0x00B9 }, { 0x00BC, 0x00BE }, { 0x0660, 0x0669 }, { 0x06F0, 0x06F9 }, { 0x07C0, 0x07C9 }, { 0x0966, 0x096F }, { 0x09E6, 0x09EF }, { 0x09F4, 0x09F9 }, { 0x0A66, 0x0A6F }, { 0x0AE6, 0x0AEF }, { 0x0B66, 0x0B6F }, { 0x0B72, 0x0B77 }, { 0x0BE6, 0x0BF2 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C7E }, { 0x0CE6, 0x0CEF }, { 0x0D58, 0x0D5E }, { 0x0D66, 0x0D78 }, { 0x0DE6, 0x0DEF }, { 0x0E50, 0x0E59 }, { 0x0ED0, 0x0ED9 }, { 0x0F20, 0x0F33 }, { 0x1040, 0x1049 }, { 0x1090, 0x1099 }, { 0x1369, 0x137C }, { 0x16EE, 0x16F0 }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1810, 0x1819 }, { 0x1946, 0x194F }, { 0x19D0, 0x19DA }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1B50, 0x1B59 }, { 0x1BB0, 0x1BB9 }, { 0x1C40, 0x1C49 }, { 0x1C50, 0x1C59 }, { 0x2070, 0x2070 }, { 0x2074, 0x2079 }, { 0x2080, 0x2089 }, { 0x2150, 0x2183 }, { 0x2185, 0x2189 }, { 0x2460, 0x249B }, { 0x24EA, 0x24FF }, { 0x2776, 0x2793 }, { 0x2CFD, 0x2CFD }, { 0x3007, 0x3007 }, { 0x3021, 0x3029 }, { 0x3038, 0x303A }, { 0x3192, 0x3195 }, { 0x3220, 0x3229 }, { 0x3248, 0x324F }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA620, 0xA629 }, { 0xA6E6, 0xA6EF }, { 0xA830, 0xA835 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 0xA9F0, 0xA9F9 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xF96B, 0xF96B }, { 0xF973, 0xF973 }, { 0xF978, 0xF978 }, { 0xF9B2, 0xF9B2 }, { 0xF9D1, 0xF9D1 }, { 0xF9D3, 0xF9D3 }, { 0xF9FD, 0xF9FD }, { 0xFF10, 0xFF19 }, { 0x10107, 0x10133 }, { 0x10140, 0x10178 }, { 0x1018A, 0x1018B }, { 0x102E1, 0x102FB }, { 0x10320, 0x10323 }, { 0x10341, 0x10341 }, { 0x1034A, 0x1034A }, { 0x103D1, 0x103D5 }, { 0x104A0, 0x104A9 }, { 0x10858, 0x1085F }, { 0x10879, 0x1087F }, { 0x108A7, 0x108AF }, { 0x108FB, 0x108FF }, { 0x10916, 0x1091B }, { 0x109BC, 0x109BD }, { 0x109C0, 0x109CF }, { 0x109D2, 0x109FF }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10A9D, 0x10A9F }, { 0x10AEB, 0x10AEF }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10BA9, 0x10BAF }, { 0x10CFA, 0x10CFF }, { 0x10E60, 0x10E7E }, { 0x11052, 0x1106F }, { 0x110F0, 0x110F9 }, { 0x11136, 0x1113F }, { 0x111D0, 0x111D9 }, { 0x111E1, 0x111F4 }, { 0x112F0, 0x112F9 }, { 0x11450, 0x11459 }, { 0x114D0, 0x114D9 }, { 0x11650, 0x11659 }, { 0x116C0, 0x116C9 }, { 0x11730, 0x1173B }, { 0x118E0, 0x118F2 }, { 0x11C50, 0x11C6C }, { 0x12400, 0x1246E }, { 0x16A60, 0x16A69 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x1D360, 0x1D371 }, { 0x1D7CE, 0x1D7FF }, { 0x1E8C7, 0x1E8CF }, { 0x1E950, 0x1E959 }, { 0x1F100, 0x1F10C }, { 0x2F890, 0x2F890 } #define PREDICATE(c) uc_is_property_numeric (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_alphabetic.c�����������������������������������0000664�0000000�0000000�00000013046�14110572173�0024424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0345, 0x0345 }, { 0x05B0, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0610, 0x061A }, { 0x064B, 0x0657 }, { 0x0659, 0x065F }, { 0x0670, 0x0670 }, { 0x06D6, 0x06DC }, { 0x06E1, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06ED, 0x06ED }, { 0x0711, 0x0711 }, { 0x0730, 0x073F }, { 0x07A6, 0x07B0 }, { 0x0816, 0x0817 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082C }, { 0x08D4, 0x08DF }, { 0x08E3, 0x08E9 }, { 0x08F0, 0x0903 }, { 0x093A, 0x093B }, { 0x093E, 0x094C }, { 0x094E, 0x094F }, { 0x0955, 0x0957 }, { 0x0962, 0x0963 }, { 0x0981, 0x0983 }, { 0x09BE, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CC }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A03 }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4C }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0ABE, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACC }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B03 }, { 0x0B3E, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4C }, { 0x0B56, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCC }, { 0x0BD7, 0x0BD7 }, { 0x0C00, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4C }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C81, 0x0C83 }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCC }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D01, 0x0D03 }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4C }, { 0x0D57, 0x0D57 }, { 0x0D62, 0x0D63 }, { 0x0D82, 0x0D83 }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF3 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E4D, 0x0E4D }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0ECD, 0x0ECD }, { 0x0F71, 0x0F81 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x102B, 0x1036 }, { 0x1038, 0x1038 }, { 0x103B, 0x103E }, { 0x1056, 0x1059 }, { 0x105E, 0x1060 }, { 0x1062, 0x1062 }, { 0x1067, 0x1068 }, { 0x1071, 0x1074 }, { 0x1082, 0x1086 }, { 0x109C, 0x109D }, { 0x135F, 0x135F }, { 0x1712, 0x1713 }, { 0x1732, 0x1733 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B6, 0x17C8 }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x1938 }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A61, 0x1A74 }, { 0x1B00, 0x1B04 }, { 0x1B35, 0x1B43 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BA9 }, { 0x1BAC, 0x1BAD }, { 0x1BE7, 0x1BF1 }, { 0x1C24, 0x1C35 }, { 0x1CF2, 0x1CF3 }, { 0x1DE7, 0x1DF4 }, { 0x24B6, 0x24E9 }, { 0x2DE0, 0x2DFF }, { 0xA674, 0xA67B }, { 0xA69E, 0xA69F }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C3 }, { 0xA8C5, 0xA8C5 }, { 0xA926, 0xA92A }, { 0xA947, 0xA952 }, { 0xA980, 0xA983 }, { 0xA9B4, 0xA9BF }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABE }, { 0xAAEB, 0xAAEF }, { 0xAAF5, 0xAAF5 }, { 0xABE3, 0xABEA }, { 0xFB1E, 0xFB1E }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x11000, 0x11002 }, { 0x11038, 0x11045 }, { 0x11082, 0x11082 }, { 0x110B0, 0x110B8 }, { 0x11100, 0x11102 }, { 0x11127, 0x11132 }, { 0x11180, 0x11182 }, { 0x111B3, 0x111BF }, { 0x1122C, 0x11234 }, { 0x11237, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112E8 }, { 0x11300, 0x11303 }, { 0x1133E, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134C }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11435, 0x11441 }, { 0x11443, 0x11445 }, { 0x114B0, 0x114C1 }, { 0x115AF, 0x115B5 }, { 0x115B8, 0x115BE }, { 0x115DC, 0x115DD }, { 0x11630, 0x1163E }, { 0x11640, 0x11640 }, { 0x116AB, 0x116B5 }, { 0x1171D, 0x1172A }, { 0x11C2F, 0x11C36 }, { 0x11C38, 0x11C3E }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x16B30, 0x16B36 }, { 0x16F51, 0x16F7E }, { 0x1BC9E, 0x1BC9E }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E947, 0x1E947 }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 } #define PREDICATE(c) uc_is_property_other_alphabetic (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_default_ignorable_code_point.c�����������������0000664�0000000�0000000�00000002270�14110572173�0030176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x034F, 0x034F }, { 0x115F, 0x1160 }, { 0x17B4, 0x17B5 }, { 0x2065, 0x2065 }, { 0x3164, 0x3164 }, { 0xFFA0, 0xFFA0 }, { 0xFFF0, 0xFFF8 }, { 0xE0000, 0xE0000 }, { 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, { 0xE01F0, 0xE0FFF } #define PREDICATE(c) uc_is_property_other_default_ignorable_code_point (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_grapheme_extend.c������������������������������0000664�0000000�0000000�00000002723�14110572173�0025467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x09BE, 0x09BE }, { 0x09D7, 0x09D7 }, { 0x0B3E, 0x0B3E }, { 0x0B57, 0x0B57 }, { 0x0BBE, 0x0BBE }, { 0x0BD7, 0x0BD7 }, { 0x0CC2, 0x0CC2 }, { 0x0CD5, 0x0CD6 }, { 0x0D3E, 0x0D3E }, { 0x0D57, 0x0D57 }, { 0x0DCF, 0x0DCF }, { 0x0DDF, 0x0DDF }, { 0x200C, 0x200C }, { 0x302E, 0x302F }, { 0xFF9E, 0xFF9F }, { 0x1133E, 0x1133E }, { 0x11357, 0x11357 }, { 0x114B0, 0x114B0 }, { 0x114BD, 0x114BD }, { 0x115AF, 0x115AF }, { 0x1D165, 0x1D165 }, { 0x1D16E, 0x1D172 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_other_grapheme_extend (c) #include "test-predicate-part2.h" ���������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_id_continue.c����������������������������������0000664�0000000�0000000�00000001767�14110572173�0024637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00B7, 0x00B7 }, { 0x0387, 0x0387 }, { 0x1369, 0x1371 }, { 0x19DA, 0x19DA } #define PREDICATE(c) uc_is_property_other_id_continue (c) #include "test-predicate-part2.h" ���������gnulib-20210822~d383792/tests/unictype/test-pr_other_id_start.c�������������������������������������0000664�0000000�0000000�00000001764�14110572173�0024145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x1885, 0x1886 }, { 0x2118, 0x2118 }, { 0x212E, 0x212E }, { 0x309B, 0x309C } #define PREDICATE(c) uc_is_property_other_id_start (c) #include "test-predicate-part2.h" ������������gnulib-20210822~d383792/tests/unictype/test-pr_other_lowercase.c������������������������������������0000664�0000000�0000000�00000002565�14110572173�0024320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AA, 0x00AA }, { 0x00BA, 0x00BA }, { 0x02B0, 0x02B8 }, { 0x02C0, 0x02C1 }, { 0x02E0, 0x02E4 }, { 0x0345, 0x0345 }, { 0x037A, 0x037A }, { 0x1D2C, 0x1D6A }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DBF }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2170, 0x217F }, { 0x24D0, 0x24E9 }, { 0x2C7C, 0x2C7D }, { 0xA69C, 0xA69D }, { 0xA770, 0xA770 }, { 0xA7F8, 0xA7F9 }, { 0xAB5C, 0xAB5F } #define PREDICATE(c) uc_is_property_other_lowercase (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_math.c�����������������������������������������0000664�0000000�0000000�00000010240�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x005E, 0x005E }, { 0x03D0, 0x03D2 }, { 0x03D5, 0x03D5 }, { 0x03F0, 0x03F1 }, { 0x03F4, 0x03F5 }, { 0x2016, 0x2016 }, { 0x2032, 0x2034 }, { 0x2040, 0x2040 }, { 0x2061, 0x2064 }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20E6 }, { 0x20EB, 0x20EF }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2128, 0x2129 }, { 0x212C, 0x212D }, { 0x212F, 0x2131 }, { 0x2133, 0x2138 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x2195, 0x2199 }, { 0x219C, 0x219F }, { 0x21A1, 0x21A2 }, { 0x21A4, 0x21A5 }, { 0x21A7, 0x21A7 }, { 0x21A9, 0x21AD }, { 0x21B0, 0x21B1 }, { 0x21B6, 0x21B7 }, { 0x21BC, 0x21CD }, { 0x21D0, 0x21D1 }, { 0x21D3, 0x21D3 }, { 0x21D5, 0x21DB }, { 0x21DD, 0x21DD }, { 0x21E4, 0x21E5 }, { 0x2308, 0x230B }, { 0x23B4, 0x23B5 }, { 0x23B7, 0x23B7 }, { 0x23D0, 0x23D0 }, { 0x23E2, 0x23E2 }, { 0x25A0, 0x25A1 }, { 0x25AE, 0x25B6 }, { 0x25BC, 0x25C0 }, { 0x25C6, 0x25C7 }, { 0x25CA, 0x25CB }, { 0x25CF, 0x25D3 }, { 0x25E2, 0x25E2 }, { 0x25E4, 0x25E4 }, { 0x25E7, 0x25EC }, { 0x2605, 0x2606 }, { 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2663 }, { 0x266D, 0x266E }, { 0x27C5, 0x27C6 }, { 0x27E6, 0x27EF }, { 0x2983, 0x2998 }, { 0x29D8, 0x29DB }, { 0x29FC, 0x29FD }, { 0xFE61, 0xFE61 }, { 0xFE63, 0xFE63 }, { 0xFE68, 0xFE68 }, { 0xFF3C, 0xFF3C }, { 0xFF3E, 0xFF3E }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB } #define PREDICATE(c) uc_is_property_other_math (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_other_uppercase.c������������������������������������0000664�0000000�0000000�00000002023�14110572173�0024310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2160, 0x216F }, { 0x24B6, 0x24CF }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 } #define PREDICATE(c) uc_is_property_other_uppercase (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_paired_punctuation.c���������������������������������0000664�0000000�0000000�00000003040�14110572173�0025015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0028, 0x0029 }, { 0x005B, 0x005B }, { 0x005D, 0x005D }, { 0x007B, 0x007B }, { 0x007D, 0x007D }, { 0x00AB, 0x00AB }, { 0x00BB, 0x00BB }, { 0x0F3A, 0x0F3D }, { 0x169B, 0x169C }, { 0x2018, 0x201F }, { 0x2039, 0x203A }, { 0x2045, 0x2046 }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2329, 0x232A }, { 0x3008, 0x3011 }, { 0x3014, 0x301B }, { 0x301D, 0x301F }, { 0xFD3E, 0xFD3F }, { 0xFE35, 0xFE44 }, { 0xFE59, 0xFE5E }, { 0xFF08, 0xFF09 }, { 0xFF3B, 0xFF3B }, { 0xFF3D, 0xFF3D }, { 0xFF5B, 0xFF5B }, { 0xFF5D, 0xFF5D }, { 0xFF62, 0xFF63 } #define PREDICATE(c) uc_is_property_paired_punctuation (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_paragraph_separator.c��������������������������������0000664�0000000�0000000�00000001661�14110572173�0025154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2029, 0x2029 } #define PREDICATE(c) uc_is_property_paragraph_separator (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_pattern_syntax.c�������������������������������������0000664�0000000�0000000�00000003064�14110572173�0024211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x002F }, { 0x003A, 0x0040 }, { 0x005B, 0x005E }, { 0x0060, 0x0060 }, { 0x007B, 0x007E }, { 0x00A1, 0x00A7 }, { 0x00A9, 0x00A9 }, { 0x00AB, 0x00AC }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B1 }, { 0x00B6, 0x00B6 }, { 0x00BB, 0x00BB }, { 0x00BF, 0x00BF }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x2010, 0x2027 }, { 0x2030, 0x203E }, { 0x2041, 0x2053 }, { 0x2055, 0x205E }, { 0x2190, 0x245F }, { 0x2500, 0x2775 }, { 0x2794, 0x2BFF }, { 0x2E00, 0x2E7F }, { 0x3001, 0x3003 }, { 0x3008, 0x3020 }, { 0x3030, 0x3030 }, { 0xFD3E, 0xFD3F }, { 0xFE45, 0xFE46 } #define PREDICATE(c) uc_is_property_pattern_syntax (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_pattern_white_space.c��������������������������������0000664�0000000�0000000�00000002021�14110572173�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x0085, 0x0085 }, { 0x200E, 0x200F }, { 0x2028, 0x2029 } #define PREDICATE(c) uc_is_property_pattern_white_space (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_private_use.c����������������������������������������0000664�0000000�0000000�00000001737�14110572173�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0xE000, 0xF8FF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_property_private_use (c) #include "test-predicate-part2.h" ���������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_punctuation.c����������������������������������������0000664�0000000�0000000�00000011643�14110572173�0023501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0023 }, { 0x0025, 0x002A }, { 0x002C, 0x002F }, { 0x003A, 0x003B }, { 0x003F, 0x0040 }, { 0x005B, 0x005D }, { 0x005F, 0x005F }, { 0x007B, 0x007B }, { 0x007D, 0x007D }, { 0x00A1, 0x00A1 }, { 0x00A7, 0x00A7 }, { 0x00AB, 0x00AB }, { 0x00B6, 0x00B7 }, { 0x00BB, 0x00BB }, { 0x00BF, 0x00BF }, { 0x037E, 0x037E }, { 0x0387, 0x0387 }, { 0x055A, 0x055F }, { 0x0589, 0x058A }, { 0x05BE, 0x05BE }, { 0x05C0, 0x05C0 }, { 0x05C3, 0x05C3 }, { 0x05C6, 0x05C6 }, { 0x05F3, 0x05F4 }, { 0x0609, 0x060A }, { 0x060C, 0x060D }, { 0x061B, 0x061B }, { 0x061E, 0x061F }, { 0x066A, 0x066D }, { 0x06D4, 0x06D4 }, { 0x0700, 0x070D }, { 0x07F7, 0x07F9 }, { 0x0830, 0x083E }, { 0x085E, 0x085E }, { 0x0964, 0x0965 }, { 0x0970, 0x0970 }, { 0x0AF0, 0x0AF0 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F14, 0x0F14 }, { 0x0F3A, 0x0F3D }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1360, 0x1368 }, { 0x1400, 0x1400 }, { 0x166D, 0x166E }, { 0x169B, 0x169C }, { 0x16EB, 0x16ED }, { 0x1735, 0x1736 }, { 0x17D4, 0x17D6 }, { 0x17D8, 0x17DA }, { 0x1800, 0x180A }, { 0x1944, 0x1945 }, { 0x1A1E, 0x1A1F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1B5A, 0x1B60 }, { 0x1BFC, 0x1BFF }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CC0, 0x1CC7 }, { 0x1CD3, 0x1CD3 }, { 0x2010, 0x2027 }, { 0x2030, 0x2043 }, { 0x2045, 0x2051 }, { 0x2053, 0x205E }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2308, 0x230B }, { 0x2329, 0x232A }, { 0x2768, 0x2775 }, { 0x27C5, 0x27C6 }, { 0x27E6, 0x27EF }, { 0x2983, 0x2998 }, { 0x29D8, 0x29DB }, { 0x29FC, 0x29FD }, { 0x2CF9, 0x2CFC }, { 0x2CFE, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2E00, 0x2E2E }, { 0x2E30, 0x2E44 }, { 0x3001, 0x3003 }, { 0x3008, 0x3011 }, { 0x3014, 0x301F }, { 0x3030, 0x3030 }, { 0x303D, 0x303D }, { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA673, 0xA673 }, { 0xA67E, 0xA67E }, { 0xA6F2, 0xA6F7 }, { 0xA874, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA8F8, 0xA8FA }, { 0xA8FC, 0xA8FC }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 0xAAF0, 0xAAF1 }, { 0xABEB, 0xABEB }, { 0xFD3E, 0xFD3F }, { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE61 }, { 0xFE63, 0xFE63 }, { 0xFE68, 0xFE68 }, { 0xFE6A, 0xFE6B }, { 0xFF01, 0xFF03 }, { 0xFF05, 0xFF0A }, { 0xFF0C, 0xFF0F }, { 0xFF1A, 0xFF1B }, { 0xFF1F, 0xFF20 }, { 0xFF3B, 0xFF3D }, { 0xFF3F, 0xFF3F }, { 0xFF5B, 0xFF5B }, { 0xFF5D, 0xFF5D }, { 0xFF5F, 0xFF65 }, { 0x10100, 0x10102 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x1056F, 0x1056F }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10AF0, 0x10AF6 }, { 0x10B39, 0x10B3F }, { 0x10B99, 0x10B9C }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x11140, 0x11143 }, { 0x11174, 0x11175 }, { 0x111C5, 0x111C9 }, { 0x111CD, 0x111CD }, { 0x111DB, 0x111DB }, { 0x111DD, 0x111DF }, { 0x11238, 0x1123D }, { 0x112A9, 0x112A9 }, { 0x1144B, 0x1144F }, { 0x1145B, 0x1145B }, { 0x1145D, 0x1145D }, { 0x114C6, 0x114C6 }, { 0x115C1, 0x115D7 }, { 0x11641, 0x11643 }, { 0x11660, 0x1166C }, { 0x1173C, 0x1173E }, { 0x11C41, 0x11C45 }, { 0x11C70, 0x11C71 }, { 0x12470, 0x12474 }, { 0x16A6E, 0x16A6F }, { 0x16AF5, 0x16AF5 }, { 0x16B37, 0x16B3B }, { 0x16B44, 0x16B44 }, { 0x1BC9F, 0x1BC9F }, { 0x1DA87, 0x1DA8B }, { 0x1E95E, 0x1E95F } #define PREDICATE(c) uc_is_property_punctuation (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_quotation_mark.c�������������������������������������0000664�0000000�0000000�00000002314�14110572173�0024160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0022, 0x0022 }, { 0x0027, 0x0027 }, { 0x00AB, 0x00AB }, { 0x00BB, 0x00BB }, { 0x2018, 0x201F }, { 0x2039, 0x203A }, { 0x2E42, 0x2E42 }, { 0x300C, 0x300F }, { 0x301D, 0x301F }, { 0xFE41, 0xFE44 }, { 0xFF02, 0xFF02 }, { 0xFF07, 0xFF07 }, { 0xFF62, 0xFF63 } #define PREDICATE(c) uc_is_property_quotation_mark (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_radical.c��������������������������������������������0000664�0000000�0000000�00000001725�14110572173�0022527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 } #define PREDICATE(c) uc_is_property_radical (c) #include "test-predicate-part2.h" �������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_sentence_terminal.c����������������������������������0000664�0000000�0000000�00000004763�14110572173�0024634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0021 }, { 0x002E, 0x002E }, { 0x003F, 0x003F }, { 0x0589, 0x0589 }, { 0x061F, 0x061F }, { 0x06D4, 0x06D4 }, { 0x0700, 0x0702 }, { 0x07F9, 0x07F9 }, { 0x0964, 0x0965 }, { 0x104A, 0x104B }, { 0x1362, 0x1362 }, { 0x1367, 0x1368 }, { 0x166E, 0x166E }, { 0x1735, 0x1736 }, { 0x1803, 0x1803 }, { 0x1809, 0x1809 }, { 0x1944, 0x1945 }, { 0x1AA8, 0x1AAB }, { 0x1B5A, 0x1B5B }, { 0x1B5E, 0x1B5F }, { 0x1C3B, 0x1C3C }, { 0x1C7E, 0x1C7F }, { 0x203C, 0x203D }, { 0x2047, 0x2049 }, { 0x2E2E, 0x2E2E }, { 0x2E3C, 0x2E3C }, { 0x3002, 0x3002 }, { 0xA4FF, 0xA4FF }, { 0xA60E, 0xA60F }, { 0xA6F3, 0xA6F3 }, { 0xA6F7, 0xA6F7 }, { 0xA876, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA92F, 0xA92F }, { 0xA9C8, 0xA9C9 }, { 0xAA5D, 0xAA5F }, { 0xAAF0, 0xAAF1 }, { 0xABEB, 0xABEB }, { 0xFE52, 0xFE52 }, { 0xFE56, 0xFE57 }, { 0xFF01, 0xFF01 }, { 0xFF0E, 0xFF0E }, { 0xFF1F, 0xFF1F }, { 0xFF61, 0xFF61 }, { 0x10A56, 0x10A57 }, { 0x11047, 0x11048 }, { 0x110BE, 0x110C1 }, { 0x11141, 0x11143 }, { 0x111C5, 0x111C6 }, { 0x111CD, 0x111CD }, { 0x111DE, 0x111DF }, { 0x11238, 0x11239 }, { 0x1123B, 0x1123C }, { 0x112A9, 0x112A9 }, { 0x1144B, 0x1144C }, { 0x115C2, 0x115C3 }, { 0x115C9, 0x115D7 }, { 0x11641, 0x11642 }, { 0x1173C, 0x1173E }, { 0x11C41, 0x11C42 }, { 0x16A6E, 0x16A6F }, { 0x16AF5, 0x16AF5 }, { 0x16B37, 0x16B38 }, { 0x16B44, 0x16B44 }, { 0x1BC9F, 0x1BC9F }, { 0x1DA88, 0x1DA88 } #define PREDICATE(c) uc_is_property_sentence_terminal (c) #include "test-predicate-part2.h" �������������gnulib-20210822~d383792/tests/unictype/test-pr_soft_dotted.c����������������������������������������0000664�0000000�0000000�00000003223�14110572173�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0069, 0x006A }, { 0x012F, 0x012F }, { 0x0249, 0x0249 }, { 0x0268, 0x0268 }, { 0x029D, 0x029D }, { 0x02B2, 0x02B2 }, { 0x03F3, 0x03F3 }, { 0x0456, 0x0456 }, { 0x0458, 0x0458 }, { 0x1D62, 0x1D62 }, { 0x1D96, 0x1D96 }, { 0x1DA4, 0x1DA4 }, { 0x1DA8, 0x1DA8 }, { 0x1E2D, 0x1E2D }, { 0x1ECB, 0x1ECB }, { 0x2071, 0x2071 }, { 0x2148, 0x2149 }, { 0x2C7C, 0x2C7C }, { 0x1D422, 0x1D423 }, { 0x1D456, 0x1D457 }, { 0x1D48A, 0x1D48B }, { 0x1D4BE, 0x1D4BF }, { 0x1D4F2, 0x1D4F3 }, { 0x1D526, 0x1D527 }, { 0x1D55A, 0x1D55B }, { 0x1D58E, 0x1D58F }, { 0x1D5C2, 0x1D5C3 }, { 0x1D5F6, 0x1D5F7 }, { 0x1D62A, 0x1D62B }, { 0x1D65E, 0x1D65F }, { 0x1D692, 0x1D693 } #define PREDICATE(c) uc_is_property_soft_dotted (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_space.c����������������������������������������������0000664�0000000�0000000�00000002063�14110572173�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x2000, 0x200A }, { 0x202F, 0x202F }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_property_space (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_terminal_punctuation.c�������������������������������0000664�0000000�0000000�00000006250�14110572173�0025372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0021, 0x0021 }, { 0x002C, 0x002C }, { 0x002E, 0x002E }, { 0x003A, 0x003B }, { 0x003F, 0x003F }, { 0x037E, 0x037E }, { 0x0387, 0x0387 }, { 0x0589, 0x0589 }, { 0x05C3, 0x05C3 }, { 0x060C, 0x060C }, { 0x061B, 0x061B }, { 0x061F, 0x061F }, { 0x06D4, 0x06D4 }, { 0x0700, 0x070A }, { 0x070C, 0x070C }, { 0x07F8, 0x07F9 }, { 0x0830, 0x083E }, { 0x085E, 0x085E }, { 0x0964, 0x0965 }, { 0x0E5A, 0x0E5B }, { 0x0F08, 0x0F08 }, { 0x0F0D, 0x0F12 }, { 0x104A, 0x104B }, { 0x1361, 0x1368 }, { 0x166D, 0x166E }, { 0x16EB, 0x16ED }, { 0x1735, 0x1736 }, { 0x17D4, 0x17D6 }, { 0x17DA, 0x17DA }, { 0x1802, 0x1805 }, { 0x1808, 0x1809 }, { 0x1944, 0x1945 }, { 0x1AA8, 0x1AAB }, { 0x1B5A, 0x1B5B }, { 0x1B5D, 0x1B5F }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x203C, 0x203D }, { 0x2047, 0x2049 }, { 0x2E2E, 0x2E2E }, { 0x2E3C, 0x2E3C }, { 0x2E41, 0x2E41 }, { 0x3001, 0x3002 }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA6F3, 0xA6F7 }, { 0xA876, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA92F, 0xA92F }, { 0xA9C7, 0xA9C9 }, { 0xAA5D, 0xAA5F }, { 0xAADF, 0xAADF }, { 0xAAF0, 0xAAF1 }, { 0xABEB, 0xABEB }, { 0xFE50, 0xFE52 }, { 0xFE54, 0xFE57 }, { 0xFF01, 0xFF01 }, { 0xFF0C, 0xFF0C }, { 0xFF0E, 0xFF0E }, { 0xFF1A, 0xFF1B }, { 0xFF1F, 0xFF1F }, { 0xFF61, 0xFF61 }, { 0xFF64, 0xFF64 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x10A56, 0x10A57 }, { 0x10AF0, 0x10AF5 }, { 0x10B3A, 0x10B3F }, { 0x10B99, 0x10B9C }, { 0x11047, 0x1104D }, { 0x110BE, 0x110C1 }, { 0x11141, 0x11143 }, { 0x111C5, 0x111C6 }, { 0x111CD, 0x111CD }, { 0x111DE, 0x111DF }, { 0x11238, 0x1123C }, { 0x112A9, 0x112A9 }, { 0x1144B, 0x1144D }, { 0x1145B, 0x1145B }, { 0x115C2, 0x115C5 }, { 0x115C9, 0x115D7 }, { 0x11641, 0x11642 }, { 0x1173C, 0x1173E }, { 0x11C41, 0x11C43 }, { 0x11C71, 0x11C71 }, { 0x12470, 0x12474 }, { 0x16A6E, 0x16A6F }, { 0x16AF5, 0x16AF5 }, { 0x16B37, 0x16B39 }, { 0x16B44, 0x16B44 }, { 0x1BC9F, 0x1BC9F }, { 0x1DA87, 0x1DA8A } #define PREDICATE(c) uc_is_property_terminal_punctuation (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_test.c�����������������������������������������������0000664�0000000�0000000�00000002011�14110572173�0022074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { uc_property_t pr = UC_PROPERTY_COMPOSITE; unsigned int c; for (c = 0; c < 0x110000; c++) ASSERT (uc_is_property (c, pr) == uc_is_property_composite (c)); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_titlecase.c������������������������������������������0000664�0000000�0000000�00000002177�14110572173�0023107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x01C5, 0x01C5 }, { 0x01C8, 0x01C8 }, { 0x01CB, 0x01CB }, { 0x01F2, 0x01F2 }, { 0x1F88, 0x1F8F }, { 0x1F98, 0x1F9F }, { 0x1FA8, 0x1FAF }, { 0x1FBC, 0x1FBC }, { 0x1FCC, 0x1FCC }, { 0x1FFC, 0x1FFC } #define PREDICATE(c) uc_is_property_titlecase (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_unassigned_code_value.c������������������������������0000664�0000000�0000000�00000041171�14110572173�0025455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0378, 0x0379 }, { 0x0380, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0530, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 0x058C }, { 0x0590, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EF }, { 0x05F5, 0x05FF }, { 0x061D, 0x061D }, { 0x070E, 0x070E }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, { 0x07FB, 0x07FF }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x089F }, { 0x08B5, 0x08B5 }, { 0x08BE, 0x08D3 }, { 0x0984, 0x0984 }, { 0x098D, 0x098E }, { 0x0991, 0x0992 }, { 0x09A9, 0x09A9 }, { 0x09B1, 0x09B1 }, { 0x09B3, 0x09B5 }, { 0x09BA, 0x09BB }, { 0x09C5, 0x09C6 }, { 0x09C9, 0x09CA }, { 0x09CF, 0x09D6 }, { 0x09D8, 0x09DB }, { 0x09DE, 0x09DE }, { 0x09E4, 0x09E5 }, { 0x09FC, 0x0A00 }, { 0x0A04, 0x0A04 }, { 0x0A0B, 0x0A0E }, { 0x0A11, 0x0A12 }, { 0x0A29, 0x0A29 }, { 0x0A31, 0x0A31 }, { 0x0A34, 0x0A34 }, { 0x0A37, 0x0A37 }, { 0x0A3A, 0x0A3B }, { 0x0A3D, 0x0A3D }, { 0x0A43, 0x0A46 }, { 0x0A49, 0x0A4A }, { 0x0A4E, 0x0A50 }, { 0x0A52, 0x0A58 }, { 0x0A5D, 0x0A5D }, { 0x0A5F, 0x0A65 }, { 0x0A76, 0x0A80 }, { 0x0A84, 0x0A84 }, { 0x0A8E, 0x0A8E }, { 0x0A92, 0x0A92 }, { 0x0AA9, 0x0AA9 }, { 0x0AB1, 0x0AB1 }, { 0x0AB4, 0x0AB4 }, { 0x0ABA, 0x0ABB }, { 0x0AC6, 0x0AC6 }, { 0x0ACA, 0x0ACA }, { 0x0ACE, 0x0ACF }, { 0x0AD1, 0x0ADF }, { 0x0AE4, 0x0AE5 }, { 0x0AF2, 0x0AF8 }, { 0x0AFA, 0x0B00 }, { 0x0B04, 0x0B04 }, { 0x0B0D, 0x0B0E }, { 0x0B11, 0x0B12 }, { 0x0B29, 0x0B29 }, { 0x0B31, 0x0B31 }, { 0x0B34, 0x0B34 }, { 0x0B3A, 0x0B3B }, { 0x0B45, 0x0B46 }, { 0x0B49, 0x0B4A }, { 0x0B4E, 0x0B55 }, { 0x0B58, 0x0B5B }, { 0x0B5E, 0x0B5E }, { 0x0B64, 0x0B65 }, { 0x0B78, 0x0B81 }, { 0x0B84, 0x0B84 }, { 0x0B8B, 0x0B8D }, { 0x0B91, 0x0B91 }, { 0x0B96, 0x0B98 }, { 0x0B9B, 0x0B9B }, { 0x0B9D, 0x0B9D }, { 0x0BA0, 0x0BA2 }, { 0x0BA5, 0x0BA7 }, { 0x0BAB, 0x0BAD }, { 0x0BBA, 0x0BBD }, { 0x0BC3, 0x0BC5 }, { 0x0BC9, 0x0BC9 }, { 0x0BCE, 0x0BCF }, { 0x0BD1, 0x0BD6 }, { 0x0BD8, 0x0BE5 }, { 0x0BFB, 0x0BFF }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5B, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C84, 0x0C84 }, { 0x0C8D, 0x0C8D }, { 0x0C91, 0x0C91 }, { 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB }, { 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 }, { 0x0CD7, 0x0CDD }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, { 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0D00 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 0x0DE5 }, { 0x0DF0, 0x0DF1 }, { 0x0DF5, 0x0E00 }, { 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 }, { 0x0E85, 0x0E86 }, { 0x0E89, 0x0E89 }, { 0x0E8B, 0x0E8C }, { 0x0E8E, 0x0E93 }, { 0x0E98, 0x0E98 }, { 0x0EA0, 0x0EA0 }, { 0x0EA4, 0x0EA4 }, { 0x0EA6, 0x0EA6 }, { 0x0EA8, 0x0EA9 }, { 0x0EAC, 0x0EAC }, { 0x0EBA, 0x0EBA }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 }, { 0x0EC7, 0x0EC7 }, { 0x0ECE, 0x0ECF }, { 0x0EDA, 0x0EDB }, { 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC }, { 0x10CE, 0x10CF }, { 0x1249, 0x1249 }, { 0x124E, 0x124F }, { 0x1257, 0x1257 }, { 0x1259, 0x1259 }, { 0x125E, 0x125F }, { 0x1289, 0x1289 }, { 0x128E, 0x128F }, { 0x12B1, 0x12B1 }, { 0x12B6, 0x12B7 }, { 0x12BF, 0x12BF }, { 0x12C1, 0x12C1 }, { 0x12C6, 0x12C7 }, { 0x12D7, 0x12D7 }, { 0x1311, 0x1311 }, { 0x1316, 0x1317 }, { 0x135B, 0x135C }, { 0x137D, 0x137F }, { 0x139A, 0x139F }, { 0x13F6, 0x13F7 }, { 0x13FE, 0x13FF }, { 0x169D, 0x169F }, { 0x16F9, 0x16FF }, { 0x170D, 0x170D }, { 0x1715, 0x171F }, { 0x1737, 0x173F }, { 0x1754, 0x175F }, { 0x176D, 0x176D }, { 0x1771, 0x1771 }, { 0x1774, 0x177F }, { 0x17DE, 0x17DF }, { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180F, 0x180F }, { 0x181A, 0x181F }, { 0x1878, 0x187F }, { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, { 0x191F, 0x191F }, { 0x192C, 0x192F }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, { 0x196E, 0x196F }, { 0x1975, 0x197F }, { 0x19AC, 0x19AF }, { 0x19CA, 0x19CF }, { 0x19DB, 0x19DD }, { 0x1A1C, 0x1A1D }, { 0x1A5F, 0x1A5F }, { 0x1A7D, 0x1A7E }, { 0x1A8A, 0x1A8F }, { 0x1A9A, 0x1A9F }, { 0x1AAE, 0x1AAF }, { 0x1ABF, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C89, 0x1CBF }, { 0x1CC8, 0x1CCF }, { 0x1CF7, 0x1CF7 }, { 0x1CFA, 0x1CFF }, { 0x1DF6, 0x1DFA }, { 0x1F16, 0x1F17 }, { 0x1F1E, 0x1F1F }, { 0x1F46, 0x1F47 }, { 0x1F4E, 0x1F4F }, { 0x1F58, 0x1F58 }, { 0x1F5A, 0x1F5A }, { 0x1F5C, 0x1F5C }, { 0x1F5E, 0x1F5E }, { 0x1F7E, 0x1F7F }, { 0x1FB5, 0x1FB5 }, { 0x1FC5, 0x1FC5 }, { 0x1FD4, 0x1FD5 }, { 0x1FDC, 0x1FDC }, { 0x1FF0, 0x1FF1 }, { 0x1FF5, 0x1FF5 }, { 0x1FFF, 0x1FFF }, { 0x2065, 0x2065 }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, { 0x209D, 0x209F }, { 0x20BF, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218C, 0x218F }, { 0x23FF, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2B74, 0x2B75 }, { 0x2B96, 0x2B97 }, { 0x2BBA, 0x2BBC }, { 0x2BC9, 0x2BC9 }, { 0x2BD2, 0x2BEB }, { 0x2BF0, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF4, 0x2CF8 }, { 0x2D26, 0x2D26 }, { 0x2D28, 0x2D2C }, { 0x2D2E, 0x2D2F }, { 0x2D68, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E45, 0x2E7F }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 }, { 0x312E, 0x3130 }, { 0x318F, 0x318F }, { 0x31BB, 0x31BF }, { 0x31E4, 0x31EF }, { 0x321F, 0x321F }, { 0x32FF, 0x32FF }, { 0x4DB6, 0x4DBF }, { 0x9FD6, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA6F8, 0xA6FF }, { 0xA7AF, 0xA7AF }, { 0xA7B8, 0xA7F6 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C6, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FE, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9FF, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xAB2F }, { 0xAB66, 0xAB6F }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xD7FF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC2, 0xFBD2 }, { 0xFD40, 0xFD4F }, { 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDCF }, { 0xFDFE, 0xFDFF }, { 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFE6F }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE }, { 0xFF00, 0xFF00 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFD0, 0xFFD1 }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFF8 }, { 0x1000C, 0x1000C }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x1003E, 0x1003E }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x100FB, 0x100FF }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x1018F, 0x1018F }, { 0x1019C, 0x1019F }, { 0x101A1, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x102FC, 0x102FF }, { 0x10324, 0x1032F }, { 0x1034B, 0x1034F }, { 0x1037B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x104D4, 0x104D7 }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x10564, 0x1056E }, { 0x10570, 0x105FF }, { 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1089F, 0x108A6 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108F6, 0x108FA }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x1097F }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10AE7, 0x10AEA }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B9D, 0x10BA8 }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D00, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107E }, { 0x110C2, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110FA, 0x110FF }, { 0x11135, 0x11135 }, { 0x11144, 0x1114F }, { 0x11177, 0x1117F }, { 0x111CE, 0x111CF }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x11212, 0x11212 }, { 0x1123F, 0x1127F }, { 0x11287, 0x11287 }, { 0x11289, 0x11289 }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x112AA, 0x112AF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x11304, 0x11304 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x11329, 0x11329 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x1133A, 0x1133B }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x1134E, 0x1134F }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11364, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1145A, 0x1145A }, { 0x1145C, 0x1145C }, { 0x1145E, 0x1147F }, { 0x114C8, 0x114CF }, { 0x114DA, 0x1157F }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x11645, 0x1164F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x116B8, 0x116BF }, { 0x116CA, 0x116FF }, { 0x1171A, 0x1171C }, { 0x1172C, 0x1172F }, { 0x11740, 0x1189F }, { 0x118F3, 0x118FE }, { 0x11900, 0x11ABF }, { 0x11AF9, 0x11BFF }, { 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F }, { 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 }, { 0x11CB7, 0x11FFF }, { 0x1239A, 0x123FF }, { 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12FFF }, { 0x1342F, 0x143FF }, { 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D }, { 0x16A70, 0x16ACF }, { 0x16AEE, 0x16AEF }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16B5A, 0x16B5A }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B90, 0x16EFF }, { 0x16F45, 0x16F4F }, { 0x16F7F, 0x16F8E }, { 0x16FA0, 0x16FDF }, { 0x16FE1, 0x16FFF }, { 0x187ED, 0x187FF }, { 0x18AF3, 0x1AFFF }, { 0x1B002, 0x1BBFF }, { 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F }, { 0x1BC89, 0x1BC8F }, { 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1E9, 0x1D1FF }, { 0x1D246, 0x1D2FF }, { 0x1D357, 0x1D35F }, { 0x1D372, 0x1D3FF }, { 0x1D455, 0x1D455 }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D4A3, 0x1D4A4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D4BA, 0x1D4BA }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D506, 0x1D506 }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DFFF }, { 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E94B, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EDFF }, { 0x1EE04, 0x1EE04 }, { 0x1EE20, 0x1EE20 }, { 0x1EE23, 0x1EE23 }, { 0x1EE25, 0x1EE26 }, { 0x1EE28, 0x1EE28 }, { 0x1EE33, 0x1EE33 }, { 0x1EE38, 0x1EE38 }, { 0x1EE3A, 0x1EE3A }, { 0x1EE3C, 0x1EE41 }, { 0x1EE43, 0x1EE46 }, { 0x1EE48, 0x1EE48 }, { 0x1EE4A, 0x1EE4A }, { 0x1EE4C, 0x1EE4C }, { 0x1EE50, 0x1EE50 }, { 0x1EE53, 0x1EE53 }, { 0x1EE55, 0x1EE56 }, { 0x1EE58, 0x1EE58 }, { 0x1EE5A, 0x1EE5A }, { 0x1EE5C, 0x1EE5C }, { 0x1EE5E, 0x1EE5E }, { 0x1EE60, 0x1EE60 }, { 0x1EE63, 0x1EE63 }, { 0x1EE65, 0x1EE66 }, { 0x1EE6B, 0x1EE6B }, { 0x1EE73, 0x1EE73 }, { 0x1EE78, 0x1EE78 }, { 0x1EE7D, 0x1EE7D }, { 0x1EE7F, 0x1EE7F }, { 0x1EE8A, 0x1EE8A }, { 0x1EE9C, 0x1EEA0 }, { 0x1EEA4, 0x1EEA4 }, { 0x1EEAA, 0x1EEAA }, { 0x1EEBC, 0x1EEEF }, { 0x1EEF2, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF }, { 0x1F10D, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16C, 0x1F16F }, { 0x1F1AD, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F6D3, 0x1F6DF }, { 0x1F6ED, 0x1F6EF }, { 0x1F6F7, 0x1F6FF }, { 0x1F774, 0x1F77F }, { 0x1F7D5, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F90F }, { 0x1F91F, 0x1F91F }, { 0x1F928, 0x1F92F }, { 0x1F931, 0x1F932 }, { 0x1F93F, 0x1F93F }, { 0x1F94C, 0x1F94F }, { 0x1F95F, 0x1F97F }, { 0x1F992, 0x1F9BF }, { 0x1F9C1, 0x1FFFD }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 0x2B81F }, { 0x2CEA2, 0x2F7FF }, { 0x2FA1E, 0x2FFFD }, { 0x30000, 0x3FFFD }, { 0x40000, 0x4FFFD }, { 0x50000, 0x5FFFD }, { 0x60000, 0x6FFFD }, { 0x70000, 0x7FFFD }, { 0x80000, 0x8FFFD }, { 0x90000, 0x9FFFD }, { 0xA0000, 0xAFFFD }, { 0xB0000, 0xBFFFD }, { 0xC0000, 0xCFFFD }, { 0xD0000, 0xDFFFD }, { 0xE0000, 0xE0000 }, { 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, { 0xE01F0, 0xEFFFD } #define PREDICATE(c) uc_is_property_unassigned_code_value (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_unified_ideograph.c����������������������������������0000664�0000000�0000000�00000002327�14110572173�0024574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xFA0E, 0xFA0F }, { 0xFA11, 0xFA11 }, { 0xFA13, 0xFA14 }, { 0xFA1F, 0xFA1F }, { 0xFA21, 0xFA21 }, { 0xFA23, 0xFA24 }, { 0xFA27, 0xFA29 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 } #define PREDICATE(c) uc_is_property_unified_ideograph (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_uppercase.c������������������������������������������0000664�0000000�0000000�00000037435�14110572173�0023126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DE }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x014A, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C4 }, { 0x01C7, 0x01C7 }, { 0x01CA, 0x01CA }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F1 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03CF, 0x03CF }, { 0x03D2, 0x03D4 }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F4, 0x03F4 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1FB8, 0x1FBB }, { 0x1FC8, 0x1FCB }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF8, 0x1FFB }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210B, 0x210D }, { 0x2110, 0x2112 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x212D }, { 0x2130, 0x2133 }, { 0x213E, 0x213F }, { 0x2145, 0x2145 }, { 0x2160, 0x216F }, { 0x2183, 0x2183 }, { 0x24B6, 0x24CF }, { 0x2C00, 0x2C2E }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x1D400, 0x1D419 }, { 0x1D434, 0x1D44D }, { 0x1D468, 0x1D481 }, { 0x1D49C, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B5 }, { 0x1D4D0, 0x1D4E9 }, { 0x1D504, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D538, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D56C, 0x1D585 }, { 0x1D5A0, 0x1D5B9 }, { 0x1D5D4, 0x1D5ED }, { 0x1D608, 0x1D621 }, { 0x1D63C, 0x1D655 }, { 0x1D670, 0x1D689 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6E2, 0x1D6FA }, { 0x1D71C, 0x1D734 }, { 0x1D756, 0x1D76E }, { 0x1D790, 0x1D7A8 }, { 0x1D7CA, 0x1D7CA }, { 0x1E900, 0x1E921 }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F189 } #define PREDICATE(c) uc_is_property_uppercase (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_variation_selector.c���������������������������������0000664�0000000�0000000�00000001742�14110572173�0025023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x180B, 0x180D }, { 0xFE00, 0xFE0F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_variation_selector (c) #include "test-predicate-part2.h" ������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_white_space.c����������������������������������������0000664�0000000�0000000�00000002201�14110572173�0023411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x0085, 0x0085 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x2000, 0x200A }, { 0x2028, 0x2029 }, { 0x202F, 0x202F }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_property_white_space (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_xid_continue.c���������������������������������������0000664�0000000�0000000�00000042576�14110572173�0023631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x005A }, { 0x005F, 0x005F }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00B7, 0x00B7 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0300, 0x0374 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x0483, 0x0487 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0610, 0x061A }, { 0x0620, 0x0669 }, { 0x066E, 0x06D3 }, { 0x06D5, 0x06DC }, { 0x06DF, 0x06E8 }, { 0x06EA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x082D }, { 0x0840, 0x085B }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x08D4, 0x08E1 }, { 0x08E3, 0x0963 }, { 0x0966, 0x096F }, { 0x0971, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09F1 }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A75 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B56, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BEF }, { 0x0C00, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C83 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D01, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D54, 0x0D57 }, { 0x0D5F, 0x0D63 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF3 }, { 0x0E01, 0x0E3A }, { 0x0E40, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB9 }, { 0x0EBB, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECD }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F18, 0x0F19 }, { 0x0F20, 0x0F29 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F3E, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F84 }, { 0x0F86, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x1000, 0x1049 }, { 0x1050, 0x109D }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x135F }, { 0x1369, 0x1371 }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1734 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x180B, 0x180D }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x1A00, 0x1A1B }, { 0x1A20, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1AB0, 0x1ABD }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1BF3 }, { 0x1C00, 0x1C37 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CF6 }, { 0x1CF8, 0x1CF9 }, { 0x1D00, 0x1DF5 }, { 0x1DFB, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x203F, 0x2040 }, { 0x2054, 0x2054 }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20F0 }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2118, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2DFF }, { 0x3005, 0x3007 }, { 0x3021, 0x302F }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x3099, 0x309A }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66F }, { 0xA674, 0xA67D }, { 0xA67F, 0xA6F1 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C5 }, { 0xA8D0, 0xA8D9 }, { 0xA8E0, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA900, 0xA92D }, { 0xA930, 0xA953 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9C0 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEF }, { 0xAAF2, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABEA }, { 0xABEC, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFC5D }, { 0xFC64, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDF9 }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE2F }, { 0xFE33, 0xFE34 }, { 0xFE4D, 0xFE4F }, { 0xFE71, 0xFE71 }, { 0xFE73, 0xFE73 }, { 0xFE77, 0xFE77 }, { 0xFE79, 0xFE79 }, { 0xFE7B, 0xFE7B }, { 0xFE7D, 0xFE7D }, { 0xFE7F, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF3F, 0xFF3F }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x101FD, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102E0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE6 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11000, 0x11046 }, { 0x11066, 0x1106F }, { 0x1107F, 0x110BA }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x1113F }, { 0x11150, 0x11173 }, { 0x11176, 0x11176 }, { 0x11180, 0x111C4 }, { 0x111CA, 0x111CC }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x11237 }, { 0x1123E, 0x1123E }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133C, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x1144A }, { 0x11450, 0x11459 }, { 0x11480, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115C0 }, { 0x115D8, 0x115DD }, { 0x11600, 0x11640 }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116B7 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x11719 }, { 0x1171D, 0x1172B }, { 0x11730, 0x11739 }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF4 }, { 0x16B00, 0x16B36 }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F7E }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9D, 0x1BC9E }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E800, 0x1E8C4 }, { 0x1E8D0, 0x1E8D6 }, { 0x1E900, 0x1E94A }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_xid_continue (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_xid_start.c������������������������������������������0000664�0000000�0000000�00000035477�14110572173�0023144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0561, 0x0587 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F2 }, { 0x0620, 0x064A }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07CA, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x08A0, 0x08B4 }, { 0x08B6, 0x08BD }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09F0, 0x09F1 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C60, 0x0C61 }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDE, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CF1, 0x0CF2 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0E01, 0x0E30 }, { 0x0E32, 0x0E32 }, { 0x0E40, 0x0E46 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E87, 0x0E88 }, { 0x0E8A, 0x0E8A }, { 0x0E8D, 0x0E8D }, { 0x0E94, 0x0E97 }, { 0x0E99, 0x0E9F }, { 0x0EA1, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EA7 }, { 0x0EAA, 0x0EAB }, { 0x0EAD, 0x0EB0 }, { 0x0EB2, 0x0EB2 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x103F }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1877 }, { 0x1880, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BBA, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x1CF5, 0x1CF6 }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2118, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x2128 }, { 0x212A, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312D }, { 0x3131, 0x318E }, { 0x31A0, 0x31BA }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FD5 }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7AE }, { 0xA7B0, 0xA7B7 }, { 0xA7F7, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FD }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9EF }, { 0xA9FA, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB65 }, { 0xAB70, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFC5D }, { 0xFC64, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDF9 }, { 0xFE71, 0xFE71 }, { 0xFE73, 0xFE73 }, { 0xFE77, 0xFE77 }, { 0xFE79, 0xFE79 }, { 0xFE7B, 0xFE7B }, { 0xFE7D, 0xFE7D }, { 0xFE7F, 0xFEFC }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFF9D }, { 0xFFA0, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x10330, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x11103, 0x11126 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111DA, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11680, 0x116AA }, { 0x11700, 0x11719 }, { 0x118A0, 0x118DF }, { 0x118FF, 0x118FF }, { 0x11AC0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C72, 0x11C8F }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x13000, 0x1342E }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16F00, 0x16F44 }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE0 }, { 0x17000, 0x187EC }, { 0x18800, 0x18AF2 }, { 0x1B000, 0x1B001 }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_xid_start (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-pr_zero_width.c�����������������������������������������0000664�0000000�0000000�00000002512�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x0600, 0x0605 }, { 0x061C, 0x061C }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_zero_width (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-predicate-part1.h���������������������������������������0000664�0000000�0000000�00000002046�14110572173�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" /* Interval of Unicode characters. */ typedef struct { ucs4_t start; ucs4_t end; } interval_t; /* Set of Unicode characters, described as list of intervals, in increasing order. */ static const interval_t set[] = { ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-predicate-part2.h���������������������������������������0000664�0000000�0000000�00000002051�14110572173�0023413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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/>. */ }; int main () { unsigned int c; size_t i; c = 0; for (i = 0; i < SIZEOF (set); i++) { for (; c < set[i].start; c++) ASSERT (!PREDICATE (c)); for (; c <= set[i].end; c++) ASSERT (PREDICATE (c)); } for (; c < 0x110000; c++) ASSERT (!PREDICATE (c)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-scripts.c�����������������������������������������������0000664�0000000�0000000�00000004100�14110572173�0022104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { /* Test the uc_script function. */ ASSERT (strcmp (uc_script ('A')->name, "Latin") == 0); ASSERT (strcmp (uc_script ('%')->name, "Common") == 0); ASSERT (uc_script (0xE0000) == NULL); /* Test the uc_script_byname function. */ ASSERT (strcmp (uc_script_byname ("Armenian")->name, "Armenian") == 0); ASSERT (uc_script_byname ("Pekinese") == NULL); /* Test the uc_is_script function. */ ASSERT (uc_is_script ('A', uc_script_byname ("Latin"))); ASSERT (!uc_is_script ('A', uc_script_byname ("Common"))); ASSERT (!uc_is_script (0x05DA, uc_script_byname ("Latin"))); ASSERT (uc_is_script (0x05DA, uc_script_byname ("Hebrew"))); { unsigned int c; for (c = 0; c < 0x110000; c++) { const uc_script_t *script = uc_script (c); if (script != NULL) ASSERT (uc_is_script (c, script)); } } /* Test the uc_all_scripts function. */ { const uc_script_t *scripts; size_t nscripts; size_t i; bool found; uc_all_scripts (&scripts, &nscripts); found = false; for (i = 0; i < nscripts; i++) { ASSERT (scripts[i].name != NULL); if (strcmp (scripts[i].name, "Hebrew") == 0) found = true; } ASSERT (found); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-sy_c_ident.c��������������������������������������������0000664�0000000�0000000�00000002445�14110572173�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_c_ident_category ('0') == UC_IDENTIFIER_VALID); ASSERT (uc_c_ident_category ('X') == UC_IDENTIFIER_START); ASSERT (uc_c_ident_category ('+') == UC_IDENTIFIER_INVALID); ASSERT (uc_c_ident_category (0x00B2) == UC_IDENTIFIER_INVALID); ASSERT (uc_c_ident_category (0x05DA) == UC_IDENTIFIER_START); ASSERT (uc_c_ident_category (0x001B) == UC_IDENTIFIER_INVALID); ASSERT (uc_c_ident_category (0xE0001) == UC_IDENTIFIER_INVALID); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-sy_c_whitespace.c���������������������������������������0000664�0000000�0000000�00000001671�14110572173�0023600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 } #define PREDICATE(c) uc_is_c_whitespace (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-sy_java_ident.c�����������������������������������������0000664�0000000�0000000�00000002476�14110572173�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2009 Free Software Foundation, Inc. This 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 "unictype.h" #include <string.h> #include "macros.h" int main () { ASSERT (uc_java_ident_category ('0') == UC_IDENTIFIER_VALID); ASSERT (uc_java_ident_category ('X') == UC_IDENTIFIER_START); ASSERT (uc_java_ident_category ('+') == UC_IDENTIFIER_INVALID); ASSERT (uc_java_ident_category (0x00B2) == UC_IDENTIFIER_INVALID); ASSERT (uc_java_ident_category (0x05DA) == UC_IDENTIFIER_START); ASSERT (uc_java_ident_category (0x001B) == UC_IDENTIFIER_IGNORABLE); ASSERT (uc_java_ident_category (0xE0001) == UC_IDENTIFIER_IGNORABLE); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unictype/test-sy_java_whitespace.c������������������������������������0000664�0000000�0000000�00000001724�14110572173�0024276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007 Free Software Foundation, Inc. This 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 "test-predicate-part1.h" { 0x0009, 0x000A }, { 0x000C, 0x000D }, { 0x0020, 0x0020 } #define PREDICATE(c) uc_is_java_whitespace (c) #include "test-predicate-part2.h" ��������������������������������������������gnulib-20210822~d383792/tests/unigbrk/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017102�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/GraphemeBreakTest.txt�����������������������������������������0000664�0000000�0000000�00000324352�14110572173�0023211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# GraphemeBreakTest-9.0.0.txt # Date: 2016-06-02, 18:28:17 GMT # © 2016 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 http://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see http://www.unicode.org/reports/tr44/ # # Default Grapheme Break Test # # Format: # <string> (# <comment>)? # <string> contains hex Unicode code points, with # ÷ wherever there is a break opportunity, and # × wherever there is not. # <comment> the format can change, but currently it shows: # - the sample character name # - (x) the Grapheme_Cluster_Break property value for the sample character # - [x] the rule that determines whether there is a break or not # # These samples may be extended or changed in the future. # ÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0020 ÷ 261D ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0020 × 0308 ÷ 261D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0020 ÷ 1F3FB ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0020 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0020 ÷ 2764 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0020 × 0308 ÷ 2764 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0020 ÷ 1F466 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0020 × 0308 ÷ 1F466 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0020 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0020 × 0308 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 000D ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 000D ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000D × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000D ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000D ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 000D ÷ 11A8 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 000D ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000D ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000D ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 000D ÷ 2764 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000D ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] BOY (EBG) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 000D ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 000D ÷ D800 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 000D ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 000A ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 000A ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000A ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000A ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 000A ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 000A ÷ 11A8 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 000A ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000A ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000A ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 000A ÷ 2764 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000A ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] BOY (EBG) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 000A ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 000A ÷ D800 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 000A ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0001 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0001 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0001 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0001 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0001 ÷ 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0001 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0001 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0001 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0001 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0001 ÷ 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0001 ÷ 2764 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0001 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] BOY (EBG) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0001 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0001 ÷ D800 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0300 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0300 × 0308 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0300 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0300 ÷ 2764 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0300 × 0308 ÷ 2764 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0300 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0300 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0300 × 0308 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3] ÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0600 × 261D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0600 × 0308 ÷ 261D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0600 × 1F3FB ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0600 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0600 × 2764 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0600 × 0308 ÷ 2764 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0600 × 1F466 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] BOY (EBG) ÷ [0.3] ÷ 0600 × 0308 ÷ 1F466 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [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) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0600 ÷ D800 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0600 × 0308 ÷ D800 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [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) ÷ [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) ÷ [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) ÷ [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) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [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) ÷ [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) ÷ [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) ÷ [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) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [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) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0903 ÷ 261D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0903 × 0308 ÷ 261D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0903 ÷ 1F3FB ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0903 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0903 ÷ 2764 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0903 × 0308 ÷ 2764 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0903 ÷ 1F466 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0903 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [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) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0903 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0903 × 0308 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [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) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1100 ÷ 261D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1100 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1100 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1100 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1100 ÷ 2764 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1100 × 0308 ÷ 2764 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1100 ÷ 1F466 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1100 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1100 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1100 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1160 ÷ 261D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1160 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1160 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1160 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1160 ÷ 2764 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1160 × 0308 ÷ 2764 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1160 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1160 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1160 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1160 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 11A8 ÷ 261D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 11A8 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 11A8 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 11A8 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 11A8 ÷ 2764 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 11A8 × 0308 ÷ 2764 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 11A8 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 11A8 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 11A8 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 11A8 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC00 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ AC00 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ AC00 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ AC00 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ AC00 ÷ 2764 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ AC00 × 0308 ÷ 2764 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ AC00 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ AC00 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ AC00 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ AC00 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ AC01 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ AC01 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ AC01 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ AC01 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ AC01 ÷ 2764 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ AC01 × 0308 ÷ 2764 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ AC01 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ AC01 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [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) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ AC01 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ AC01 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [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] ÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F1E6 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F1E6 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F1E6 ÷ 2764 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 2764 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F1E6 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F1E6 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 261D ÷ 0020 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 261D × 0308 ÷ 0020 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 261D ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 261D × 0308 ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 261D ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 261D × 0308 ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 261D ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 261D × 0308 ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 261D × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 261D × 0308 × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 261D ÷ 0600 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 261D × 0308 ÷ 0600 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 261D × 0903 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 261D × 0308 × 0903 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 261D ÷ 1100 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 261D × 0308 ÷ 1100 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 261D ÷ 1160 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 261D × 0308 ÷ 1160 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 261D ÷ 11A8 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 261D × 0308 ÷ 11A8 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 261D ÷ AC00 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 261D × 0308 ÷ AC00 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 261D ÷ AC01 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 261D × 0308 ÷ AC01 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 261D ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 261D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 261D ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 261D × 0308 ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 261D × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 261D × 0308 × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 261D × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 261D × 0308 × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 261D ÷ 2764 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 261D × 0308 ÷ 2764 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 261D ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 261D × 0308 ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 261D ÷ 0378 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 261D × 0308 ÷ 0378 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 261D ÷ D800 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 261D × 0308 ÷ D800 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F3FB ÷ 0020 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0020 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F3FB ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F3FB ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F3FB ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F3FB × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1F3FB × 0308 × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1F3FB ÷ 0600 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0600 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1F3FB × 0903 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1F3FB × 0308 × 0903 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1F3FB ÷ 1100 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1100 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F3FB ÷ 1160 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1160 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1F3FB ÷ 11A8 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 11A8 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F3FB ÷ AC00 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F3FB × 0308 ÷ AC00 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F3FB ÷ AC01 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F3FB × 0308 ÷ AC01 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F3FB ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F3FB ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F3FB ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F3FB × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F3FB × 0308 × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F3FB ÷ 2764 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 2764 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F3FB ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F3FB ÷ 0378 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0378 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F3FB ÷ D800 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F3FB × 0308 ÷ D800 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 200D ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 200D × 0308 ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 200D ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 200D × 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 0308 ÷ 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) ÷ [0.3] ÷ 200D × 0308 ÷ 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 200D ÷ D800 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 200D × 0308 ÷ D800 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 2764 ÷ 0020 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 2764 × 0308 ÷ 0020 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 2764 ÷ 000D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 2764 × 0308 ÷ 000D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 2764 ÷ 000A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 2764 × 0308 ÷ 000A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 2764 ÷ 0001 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 2764 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 2764 × 0300 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 2764 × 0308 × 0300 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 2764 ÷ 0600 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 2764 × 0308 ÷ 0600 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 2764 × 0903 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 2764 × 0308 × 0903 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 2764 ÷ 1100 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 2764 × 0308 ÷ 1100 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 2764 ÷ 1160 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 2764 × 0308 ÷ 1160 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 2764 ÷ 11A8 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 2764 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 2764 ÷ AC00 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 2764 × 0308 ÷ AC00 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 2764 ÷ AC01 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 2764 × 0308 ÷ AC01 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 2764 ÷ 1F1E6 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 2764 ÷ 261D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 2764 × 0308 ÷ 261D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 2764 ÷ 1F3FB ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 2764 × 200D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 2764 × 0308 × 200D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 2764 ÷ 2764 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 2764 × 0308 ÷ 2764 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 2764 ÷ 1F466 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 2764 ÷ 0378 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 2764 × 0308 ÷ 0378 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 2764 ÷ D800 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 2764 × 0308 ÷ D800 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F466 ÷ 0020 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0020 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1F466 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F466 × 0308 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F466 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F466 × 0308 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F466 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 1F466 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1F466 × 0308 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 1F466 ÷ 0600 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0600 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ 1F466 × 0903 ÷ # ÷ [0.2] BOY (EBG) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1F466 × 0308 × 0903 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 1F466 ÷ 1100 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1100 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F466 ÷ 1160 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1160 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 1F466 ÷ 11A8 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F466 × 0308 ÷ 11A8 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 1F466 ÷ AC00 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F466 × 0308 ÷ AC00 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 1F466 ÷ AC01 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F466 × 0308 ÷ AC01 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 1F466 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F466 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 0308 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F466 × 0308 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F466 × 200D ÷ # ÷ [0.2] BOY (EBG) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F466 × 0308 × 200D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 1F466 ÷ 2764 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F466 × 0308 ÷ 2764 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F466 ÷ 0378 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0378 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 1F466 ÷ D800 ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 1F466 × 0308 ÷ D800 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0378 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0378 ÷ 000D ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0378 ÷ 000A ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0378 ÷ 0001 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0378 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [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) ÷ [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) × [9.1] DEVANAGARI 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) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0378 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0378 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0378 ÷ 261D ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0378 × 0308 ÷ 261D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0378 ÷ 1F3FB ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0378 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0378 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ 0378 ÷ 2764 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0378 × 0308 ÷ 2764 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0378 ÷ 1F466 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0378 × 0308 ÷ 1F466 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0378 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ 0378 ÷ D800 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 0378 × 0308 ÷ D800 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ D800 ÷ 0020 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ D800 ÷ 000D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ D800 ÷ 000A ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ D800 ÷ 0001 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <START OF HEADING> (Control) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ D800 ÷ 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ D800 ÷ 0308 × 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ D800 ÷ 0600 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] ÷ D800 ÷ 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ D800 ÷ 0308 × 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ D800 ÷ 1100 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ D800 ÷ 1160 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ D800 ÷ 11A8 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ D800 ÷ AC00 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ D800 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ D800 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ D800 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ D800 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ D800 ÷ 261D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ D800 ÷ 1F3FB ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ D800 ÷ 200D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ D800 ÷ 0308 × 200D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3] ÷ D800 ÷ 2764 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ D800 ÷ 1F466 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] BOY (EBG) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ D800 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] ÷ D800 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] ÷ D800 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3] ÷ D800 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3] ÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [0.3] ÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [0.3] ÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3] ÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 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) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 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) ÷ [0.3] ÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [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 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] ÷ 261D × 1F3FB ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 1F466 × 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) ÷ [0.3] ÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3] # # Lines: 822 # # EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u16-grapheme-breaks.c������������������������������������0000664�0000000�0000000�00000005531�14110572173�0023675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_u16_grapheme_breaks (const char *expected, ...) { size_t n = strlen (expected); uint16_t s[16]; va_list args; char breaks[16]; size_t i; ASSERT (n <= 16); memset (breaks, 0xcc, n); va_start (args, expected); for (i = 0; i < n; i++) { int unit = va_arg (args, int); ASSERT (unit >= 0); s[i] = unit; } ASSERT (va_arg (args, int) == -1); va_end (args); u16_grapheme_breaks (s, n, breaks); for (i = 0; i < n; i++) if (breaks[i] != (expected[i] == '#')) { size_t j; fprintf (stderr, "wrong grapheme breaks:\n"); fprintf (stderr, " input:"); for (j = 0; j < n; j++) fprintf (stderr, " %02x", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); abort (); } } int main (void) { /* Standalone 1-unit graphemes. */ test_u16_grapheme_breaks ("#", 'a', -1); test_u16_grapheme_breaks ("##", 'a', 'b', -1); test_u16_grapheme_breaks ("###", 'a', 'b', 'c', -1); #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u16_grapheme_breaks ("#", HIRAGANA_A, -1); test_u16_grapheme_breaks ("##", HIRAGANA_A, 'x', -1); test_u16_grapheme_breaks ("##", HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u16_grapheme_breaks ("#_", 'e', ACUTE, -1); test_u16_grapheme_breaks ("#__", 'e', ACUTE, GRAVE, -1); test_u16_grapheme_breaks ("#_#", 'e', ACUTE, 'x', -1); test_u16_grapheme_breaks ("#_#_", 'e', ACUTE, 'e', GRAVE, -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u16-grapheme-next.c��������������������������������������0000664�0000000�0000000�00000005537�14110572173�0023412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include "macros.h" static void test_u16_grapheme_next (size_t len, ...) { const uint16_t *next; uint16_t s[16]; va_list args; size_t n; va_start (args, len); n = 0; for (;;) { int unit = va_arg (args, int); if (unit == -1) break; else if (n >= sizeof s / sizeof *s) abort (); s[n++] = unit; } va_end (args); next = u16_grapheme_next (s, s + n); if (next != s + len) { size_t i; if (next == NULL) fputs ("u16_grapheme_next returned NULL", stderr); else fprintf (stderr, "u16_grapheme_next skipped %zu units", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint16_t s[] = { 'a', 'b', 'c' }; /* Empty string. */ ASSERT (u16_grapheme_next (NULL, NULL) == NULL); ASSERT (u16_grapheme_next (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u16_grapheme_next (1, 'a', -1); test_u16_grapheme_next (1, 'a', 'b', -1); test_u16_grapheme_next (1, 'a', 'b', 'c', -1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u16_grapheme_next (1, HIRAGANA_A, -1); test_u16_grapheme_next (1, HIRAGANA_A, 'x', -1); test_u16_grapheme_next (1, HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u16_grapheme_next (2, 'e', ACUTE, -1); test_u16_grapheme_next (3, 'e', ACUTE, GRAVE, -1); test_u16_grapheme_next (2, 'e', ACUTE, 'x', -1); test_u16_grapheme_next (2, 'e', ACUTE, 'e', ACUTE, -1); /* Surrogate pairs. */ test_u16_grapheme_next (2, 0xd83d, 0xde10, -1); /* 😐: neutral face. */ test_u16_grapheme_next (3, 0xd83d, 0xde10, GRAVE, -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u16-grapheme-prev.c��������������������������������������0000664�0000000�0000000�00000005604�14110572173�0023403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include "macros.h" static void test_u16_grapheme_prev (size_t len, ...) { const uint16_t *prev; const uint16_t *end; uint16_t s[16]; va_list args; size_t n; va_start (args, len); n = 0; for (;;) { int unit = va_arg (args, int); if (unit == -1) break; else if (n >= sizeof s / sizeof *s) abort (); s[n++] = unit; } va_end (args); end = s + n; prev = u16_grapheme_prev (end, s); if (prev != end - len) { size_t i; if (prev == NULL) fputs ("u16_grapheme_prev returned NULL", stderr); else fprintf (stderr, "u16_grapheme_prev skipped %zu units", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint16_t s[] = { 'a', 'b', 'c' }; /* Empty string. */ ASSERT (u16_grapheme_prev (NULL, NULL) == NULL); ASSERT (u16_grapheme_prev (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u16_grapheme_prev (1, 'a', -1); test_u16_grapheme_prev (1, 'a', 'b', -1); test_u16_grapheme_prev (1, 'a', 'b', 'c', -1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u16_grapheme_prev (1, HIRAGANA_A, -1); test_u16_grapheme_prev (1, HIRAGANA_A, 'x', -1); test_u16_grapheme_prev (1, HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u16_grapheme_prev (2, 'e', ACUTE, -1); test_u16_grapheme_prev (3, 'e', ACUTE, GRAVE, -1); test_u16_grapheme_prev (1, 'e', ACUTE, 'x', -1); test_u16_grapheme_prev (2, 'e', ACUTE, 'e', ACUTE, -1); /* Surrogate pairs. */ test_u16_grapheme_prev (2, 0xd83d, 0xde10, -1); /* 😐: neutral face. */ test_u16_grapheme_prev (3, 0xd83d, 0xde10, GRAVE, -1); return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u32-grapheme-breaks.c������������������������������������0000664�0000000�0000000�00000005531�14110572173�0023673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_u32_grapheme_breaks (const char *expected, ...) { size_t n = strlen (expected); uint32_t s[16]; va_list args; char breaks[16]; size_t i; ASSERT (n <= 16); memset (breaks, 0xcc, n); va_start (args, expected); for (i = 0; i < n; i++) { int unit = va_arg (args, int); ASSERT (unit >= 0); s[i] = unit; } ASSERT (va_arg (args, int) == -1); va_end (args); u32_grapheme_breaks (s, n, breaks); for (i = 0; i < n; i++) if (breaks[i] != (expected[i] == '#')) { size_t j; fprintf (stderr, "wrong grapheme breaks:\n"); fprintf (stderr, " input:"); for (j = 0; j < n; j++) fprintf (stderr, " %02x", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); abort (); } } int main (void) { /* Standalone 1-unit graphemes. */ test_u32_grapheme_breaks ("#", 'a', -1); test_u32_grapheme_breaks ("##", 'a', 'b', -1); test_u32_grapheme_breaks ("###", 'a', 'b', 'c', -1); #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u32_grapheme_breaks ("#", HIRAGANA_A, -1); test_u32_grapheme_breaks ("##", HIRAGANA_A, 'x', -1); test_u32_grapheme_breaks ("##", HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u32_grapheme_breaks ("#_", 'e', ACUTE, -1); test_u32_grapheme_breaks ("#__", 'e', ACUTE, GRAVE, -1); test_u32_grapheme_breaks ("#_#", 'e', ACUTE, 'x', -1); test_u32_grapheme_breaks ("#_#_", 'e', ACUTE, 'e', GRAVE, -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u32-grapheme-next.c��������������������������������������0000664�0000000�0000000�00000005567�14110572173�0023413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include "macros.h" static void test_u32_grapheme_next (size_t len, ...) { const uint32_t *next; uint32_t s[32]; va_list args; size_t n; va_start (args, len); n = 0; for (;;) { int unit = va_arg (args, int); if (unit == -1) break; else if (n >= sizeof s / sizeof *s) abort (); s[n++] = unit; } va_end (args); next = u32_grapheme_next (s, s + n); if (next != s + len) { size_t i; if (next == NULL) fputs ("u32_grapheme_next returned NULL", stderr); else fprintf (stderr, "u32_grapheme_next skipped %zu units", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint32_t s[] = { 'a', 'b', 'c' }; /* Empty string. */ ASSERT (u32_grapheme_next (NULL, NULL) == NULL); ASSERT (u32_grapheme_next (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u32_grapheme_next (1, 'a', -1); test_u32_grapheme_next (1, 'a', 'b', -1); test_u32_grapheme_next (1, 'a', 'b', 'c', -1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u32_grapheme_next (1, HIRAGANA_A, -1); test_u32_grapheme_next (1, HIRAGANA_A, 'x', -1); test_u32_grapheme_next (1, HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u32_grapheme_next (2, 'e', ACUTE, -1); test_u32_grapheme_next (3, 'e', ACUTE, GRAVE, -1); test_u32_grapheme_next (2, 'e', ACUTE, 'x', -1); test_u32_grapheme_next (2, 'e', ACUTE, 'e', ACUTE, -1); /* Outside BMP. */ #define NEUTRAL_FACE 0x1f610 /* 😐: neutral face. */ test_u32_grapheme_next (1, NEUTRAL_FACE, -1); test_u32_grapheme_next (2, NEUTRAL_FACE, GRAVE, -1); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u32-grapheme-prev.c��������������������������������������0000664�0000000�0000000�00000005634�14110572173�0023404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include "macros.h" static void test_u32_grapheme_prev (size_t len, ...) { const uint32_t *prev; const uint32_t *end; uint32_t s[16]; va_list args; size_t n; va_start (args, len); n = 0; for (;;) { int unit = va_arg (args, int); if (unit == -1) break; else if (n >= sizeof s / sizeof *s) abort (); s[n++] = unit; } va_end (args); end = s + n; prev = u32_grapheme_prev (end, s); if (prev != end - len) { size_t i; if (prev == NULL) fputs ("u32_grapheme_prev returned NULL", stderr); else fprintf (stderr, "u32_grapheme_prev skipped %zu units", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %04x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint32_t s[] = { 'a', 'b', 'c' }; /* Empty string. */ ASSERT (u32_grapheme_prev (NULL, NULL) == NULL); ASSERT (u32_grapheme_prev (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u32_grapheme_prev (1, 'a', -1); test_u32_grapheme_prev (1, 'a', 'b', -1); test_u32_grapheme_prev (1, 'a', 'b', 'c', -1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */ test_u32_grapheme_prev (1, HIRAGANA_A, -1); test_u32_grapheme_prev (1, HIRAGANA_A, 'x', -1); test_u32_grapheme_prev (1, HIRAGANA_A, HIRAGANA_A, -1); /* Combining accents. */ #define GRAVE 0x0300 /* Combining grave accent. */ #define ACUTE 0x0301 /* Combining acute accent. */ test_u32_grapheme_prev (2, 'e', ACUTE, -1); test_u32_grapheme_prev (3, 'e', ACUTE, GRAVE, -1); test_u32_grapheme_prev (1, 'e', ACUTE, 'x', -1); test_u32_grapheme_prev (2, 'e', ACUTE, 'e', ACUTE, -1); /* Outside BMP. */ #define NEUTRAL_FACE 0x1f610 /* 😐: neutral face. */ test_u32_grapheme_prev (1, NEUTRAL_FACE, -1); test_u32_grapheme_prev (2, NEUTRAL_FACE, GRAVE, -1); return 0; } ����������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u8-grapheme-breaks.c�������������������������������������0000664�0000000�0000000�00000005261�14110572173�0023616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_u8_grapheme_breaks (const char *input, const char *expected) { const uint8_t *s = (const uint8_t *) input; size_t n = strlen (expected); char *breaks; size_t i; breaks = malloc (n); if (!breaks) abort (); memset (breaks, 0xcc, n); u8_grapheme_breaks (s, n, breaks); for (i = 0; i < n; i++) if (breaks[i] != (expected[i] == '#')) { size_t j; fprintf (stderr, "wrong grapheme breaks:\n"); fprintf (stderr, " input:"); for (j = 0; j < n; j++) fprintf (stderr, " %02x", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); abort (); } free (breaks); } int main (void) { /* Standalone 1-unit graphemes. */ test_u8_grapheme_breaks ("a", "#"); test_u8_grapheme_breaks ("ab", "##"); test_u8_grapheme_breaks ("abc", "###"); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A "\343\201\202" /* あ: Hiragana letter 'a'. */ test_u8_grapheme_breaks (HIRAGANA_A, "#__"); test_u8_grapheme_breaks (HIRAGANA_A"x", "#__#"); test_u8_grapheme_breaks (HIRAGANA_A HIRAGANA_A, "#__#__"); /* Combining accents. */ #define GRAVE "\314\200" /* Combining grave accent. */ #define ACUTE "\314\201" /* Combining acute accent. */ test_u8_grapheme_breaks ("e"ACUTE, "#__"); test_u8_grapheme_breaks ("e"ACUTE GRAVE, "#____"); test_u8_grapheme_breaks ("e"ACUTE"x", "#__#"); test_u8_grapheme_breaks ("e"ACUTE "e"ACUTE, "#__#__"); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u8-grapheme-next.c���������������������������������������0000664�0000000�0000000�00000004622�14110572173�0023325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdlib.h> #include "macros.h" static void test_u8_grapheme_next (const char *input, size_t n, size_t len) { const uint8_t *s = (const uint8_t *) input; const uint8_t *next = u8_grapheme_next (s, s + n); if (next != s + len) { size_t i; if (next == NULL) fputs ("u8_grapheme_next returned NULL", stderr); else fprintf (stderr, "u8_grapheme_next skipped %zu bytes", next - s); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %02x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint8_t s[] = "abc"; /* Empty string. */ ASSERT (u8_grapheme_next (NULL, NULL) == NULL); ASSERT (u8_grapheme_next (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u8_grapheme_next ("a", 1, 1); test_u8_grapheme_next ("ab", 2, 1); test_u8_grapheme_next ("abc", 3, 1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A "\343\201\202" /* あ: Hiragana letter 'a'. */ test_u8_grapheme_next (HIRAGANA_A, 3, 3); test_u8_grapheme_next (HIRAGANA_A"x", 4, 3); test_u8_grapheme_next (HIRAGANA_A HIRAGANA_A, 6, 3); /* Combining accents. */ #define GRAVE "\314\200" /* Combining grave accent. */ #define ACUTE "\314\201" /* Combining acute accent. */ test_u8_grapheme_next ("e"ACUTE, 3, 3); test_u8_grapheme_next ("e"ACUTE GRAVE, 5, 5); test_u8_grapheme_next ("e"ACUTE"x", 4, 3); test_u8_grapheme_next ("e"ACUTE "e"ACUTE, 6, 3); return 0; } ��������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-u8-grapheme-prev.c���������������������������������������0000664�0000000�0000000�00000004657�14110572173�0023333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdlib.h> #include "macros.h" static void test_u8_grapheme_prev (const char *input, size_t n, size_t len) { const uint8_t *s = (const uint8_t *) input; const uint8_t *end = s + n; const uint8_t *prev = u8_grapheme_prev (end, s); if (prev != end - len) { size_t i; if (prev == NULL) fputs ("u8_grapheme_prev returned NULL", stderr); else fprintf (stderr, "u8_grapheme_prev skipped %zu bytes", end - prev); fprintf (stderr, ", expected %zu:\n", len); for (i = 0; i < n; i++) fprintf (stderr, " %02x", s[i]); putc ('\n', stderr); abort (); } } int main (void) { static const uint8_t s[] = "abc"; /* Empty string. */ ASSERT (u8_grapheme_prev (NULL, NULL) == NULL); ASSERT (u8_grapheme_prev (s, s) == NULL); /* Standalone 1-unit graphemes. */ test_u8_grapheme_prev ("a", 1, 1); test_u8_grapheme_prev ("ab", 2, 1); test_u8_grapheme_prev ("abc", 3, 1); /* Multi-unit, single code point graphemes. */ #define HIRAGANA_A "\343\201\202" /* あ: Hiragana letter 'a'. */ test_u8_grapheme_prev (HIRAGANA_A, 3, 3); test_u8_grapheme_prev (HIRAGANA_A"x", 4, 1); test_u8_grapheme_prev (HIRAGANA_A HIRAGANA_A, 6, 3); /* Combining accents. */ #define GRAVE "\314\200" /* Combining grave accent. */ #define ACUTE "\314\201" /* Combining acute accent. */ test_u8_grapheme_prev ("e"ACUTE, 3, 3); test_u8_grapheme_prev ("e"ACUTE GRAVE, 5, 5); test_u8_grapheme_prev ("e"ACUTE"x", 4, 1); test_u8_grapheme_prev ("e"ACUTE "e"ACUTE, 6, 3); return 0; } ���������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-gbrk-prop.c�������������������������������������������0000664�0000000�0000000�00000004106�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode grapheme break property function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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> /* Specification. */ #include <unigbrk.h> struct uc_gbrk_prop_range { ucs4_t end; int gbp; }; static const struct uc_gbrk_prop_range set[] = { #include "test-uc-gbrk-prop.h" }; #include "macros.h" const char * graphemebreakproperty_to_string (int gbp) { switch (gbp) { #define CASE(VALUE) case GBP_##VALUE: return #VALUE; CASE(OTHER) CASE(CR) CASE(LF) CASE(CONTROL) CASE(EXTEND) CASE(PREPEND) CASE(SPACINGMARK) CASE(L) CASE(V) CASE(T) CASE(LV) CASE(LVT) CASE(RI) CASE(ZWJ) CASE(EB) CASE(EM) CASE(GAZ) CASE(EBG) } abort (); } int main (void) { const struct uc_gbrk_prop_range *r; ucs4_t uc; uc = 0; for (r = set; r < set + SIZEOF (set); r++) { for (; uc < r->end; uc++) { int retval = uc_graphemeclusterbreak_property (uc); if (retval != r->gbp) { fprintf (stderr, "uc_graphemeclusterbreak_property(%#x) " "yielded %s but should have been %s\n", uc, graphemebreakproperty_to_string (retval), graphemebreakproperty_to_string (r->gbp)); fflush (stderr); abort (); } } } ASSERT (uc == 0x110000); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-gbrk-prop.h�������������������������������������������0000664�0000000�0000000�00000110653�14110572173�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode grapheme break property functions. Copyright (C) 2010 Free Software Foundation, Inc. This 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/>. */ { 0x000A, GBP_CONTROL }, { 0x000B, GBP_LF }, { 0x000D, GBP_CONTROL }, { 0x000E, GBP_CR }, { 0x0020, GBP_CONTROL }, { 0x007F, GBP_OTHER }, { 0x00A0, GBP_CONTROL }, { 0x00AD, GBP_OTHER }, { 0x00AE, GBP_CONTROL }, { 0x0300, GBP_OTHER }, { 0x0370, GBP_EXTEND }, { 0x0483, GBP_OTHER }, { 0x048A, GBP_EXTEND }, { 0x0591, GBP_OTHER }, { 0x05BE, GBP_EXTEND }, { 0x05BF, GBP_OTHER }, { 0x05C0, GBP_EXTEND }, { 0x05C1, GBP_OTHER }, { 0x05C3, GBP_EXTEND }, { 0x05C4, GBP_OTHER }, { 0x05C6, GBP_EXTEND }, { 0x05C7, GBP_OTHER }, { 0x05C8, GBP_EXTEND }, { 0x0600, GBP_OTHER }, { 0x0606, GBP_PREPEND }, { 0x0610, GBP_OTHER }, { 0x061B, GBP_EXTEND }, { 0x061C, GBP_OTHER }, { 0x061D, GBP_CONTROL }, { 0x064B, GBP_OTHER }, { 0x0660, GBP_EXTEND }, { 0x0670, GBP_OTHER }, { 0x0671, GBP_EXTEND }, { 0x06D6, GBP_OTHER }, { 0x06DD, GBP_EXTEND }, { 0x06DE, GBP_PREPEND }, { 0x06DF, GBP_OTHER }, { 0x06E5, GBP_EXTEND }, { 0x06E7, GBP_OTHER }, { 0x06E9, GBP_EXTEND }, { 0x06EA, GBP_OTHER }, { 0x06EE, GBP_EXTEND }, { 0x070F, GBP_OTHER }, { 0x0710, GBP_PREPEND }, { 0x0711, GBP_OTHER }, { 0x0712, GBP_EXTEND }, { 0x0730, GBP_OTHER }, { 0x074B, GBP_EXTEND }, { 0x07A6, GBP_OTHER }, { 0x07B1, GBP_EXTEND }, { 0x07EB, GBP_OTHER }, { 0x07F4, GBP_EXTEND }, { 0x0816, GBP_OTHER }, { 0x081A, GBP_EXTEND }, { 0x081B, GBP_OTHER }, { 0x0824, GBP_EXTEND }, { 0x0825, GBP_OTHER }, { 0x0828, GBP_EXTEND }, { 0x0829, GBP_OTHER }, { 0x082E, GBP_EXTEND }, { 0x0859, GBP_OTHER }, { 0x085C, GBP_EXTEND }, { 0x08D4, GBP_OTHER }, { 0x08E2, GBP_EXTEND }, { 0x08E3, GBP_PREPEND }, { 0x0903, GBP_EXTEND }, { 0x0904, GBP_SPACINGMARK }, { 0x093A, GBP_OTHER }, { 0x093B, GBP_EXTEND }, { 0x093C, GBP_SPACINGMARK }, { 0x093D, GBP_EXTEND }, { 0x093E, GBP_OTHER }, { 0x0941, GBP_SPACINGMARK }, { 0x0949, GBP_EXTEND }, { 0x094D, GBP_SPACINGMARK }, { 0x094E, GBP_EXTEND }, { 0x0950, GBP_SPACINGMARK }, { 0x0951, GBP_OTHER }, { 0x0958, GBP_EXTEND }, { 0x0962, GBP_OTHER }, { 0x0964, GBP_EXTEND }, { 0x0981, GBP_OTHER }, { 0x0982, GBP_EXTEND }, { 0x0984, GBP_SPACINGMARK }, { 0x09BC, GBP_OTHER }, { 0x09BD, GBP_EXTEND }, { 0x09BE, GBP_OTHER }, { 0x09BF, GBP_EXTEND }, { 0x09C1, GBP_SPACINGMARK }, { 0x09C5, GBP_EXTEND }, { 0x09C7, GBP_OTHER }, { 0x09C9, GBP_SPACINGMARK }, { 0x09CB, GBP_OTHER }, { 0x09CD, GBP_SPACINGMARK }, { 0x09CE, GBP_EXTEND }, { 0x09D7, GBP_OTHER }, { 0x09D8, GBP_EXTEND }, { 0x09E2, GBP_OTHER }, { 0x09E4, GBP_EXTEND }, { 0x0A01, GBP_OTHER }, { 0x0A03, GBP_EXTEND }, { 0x0A04, GBP_SPACINGMARK }, { 0x0A3C, GBP_OTHER }, { 0x0A3D, GBP_EXTEND }, { 0x0A3E, GBP_OTHER }, { 0x0A41, GBP_SPACINGMARK }, { 0x0A43, GBP_EXTEND }, { 0x0A47, GBP_OTHER }, { 0x0A49, GBP_EXTEND }, { 0x0A4B, GBP_OTHER }, { 0x0A4E, GBP_EXTEND }, { 0x0A51, GBP_OTHER }, { 0x0A52, GBP_EXTEND }, { 0x0A70, GBP_OTHER }, { 0x0A72, GBP_EXTEND }, { 0x0A75, GBP_OTHER }, { 0x0A76, GBP_EXTEND }, { 0x0A81, GBP_OTHER }, { 0x0A83, GBP_EXTEND }, { 0x0A84, GBP_SPACINGMARK }, { 0x0ABC, GBP_OTHER }, { 0x0ABD, GBP_EXTEND }, { 0x0ABE, GBP_OTHER }, { 0x0AC1, GBP_SPACINGMARK }, { 0x0AC6, GBP_EXTEND }, { 0x0AC7, GBP_OTHER }, { 0x0AC9, GBP_EXTEND }, { 0x0ACA, GBP_SPACINGMARK }, { 0x0ACB, GBP_OTHER }, { 0x0ACD, GBP_SPACINGMARK }, { 0x0ACE, GBP_EXTEND }, { 0x0AE2, GBP_OTHER }, { 0x0AE4, GBP_EXTEND }, { 0x0B01, GBP_OTHER }, { 0x0B02, GBP_EXTEND }, { 0x0B04, GBP_SPACINGMARK }, { 0x0B3C, GBP_OTHER }, { 0x0B3D, GBP_EXTEND }, { 0x0B3E, GBP_OTHER }, { 0x0B40, GBP_EXTEND }, { 0x0B41, GBP_SPACINGMARK }, { 0x0B45, GBP_EXTEND }, { 0x0B47, GBP_OTHER }, { 0x0B49, GBP_SPACINGMARK }, { 0x0B4B, GBP_OTHER }, { 0x0B4D, GBP_SPACINGMARK }, { 0x0B4E, GBP_EXTEND }, { 0x0B56, GBP_OTHER }, { 0x0B58, GBP_EXTEND }, { 0x0B62, GBP_OTHER }, { 0x0B64, GBP_EXTEND }, { 0x0B82, GBP_OTHER }, { 0x0B83, GBP_EXTEND }, { 0x0BBE, GBP_OTHER }, { 0x0BBF, GBP_EXTEND }, { 0x0BC0, GBP_SPACINGMARK }, { 0x0BC1, GBP_EXTEND }, { 0x0BC3, GBP_SPACINGMARK }, { 0x0BC6, GBP_OTHER }, { 0x0BC9, GBP_SPACINGMARK }, { 0x0BCA, GBP_OTHER }, { 0x0BCD, GBP_SPACINGMARK }, { 0x0BCE, GBP_EXTEND }, { 0x0BD7, GBP_OTHER }, { 0x0BD8, GBP_EXTEND }, { 0x0C00, GBP_OTHER }, { 0x0C01, GBP_EXTEND }, { 0x0C04, GBP_SPACINGMARK }, { 0x0C3E, GBP_OTHER }, { 0x0C41, GBP_EXTEND }, { 0x0C45, GBP_SPACINGMARK }, { 0x0C46, GBP_OTHER }, { 0x0C49, GBP_EXTEND }, { 0x0C4A, GBP_OTHER }, { 0x0C4E, GBP_EXTEND }, { 0x0C55, GBP_OTHER }, { 0x0C57, GBP_EXTEND }, { 0x0C62, GBP_OTHER }, { 0x0C64, GBP_EXTEND }, { 0x0C81, GBP_OTHER }, { 0x0C82, GBP_EXTEND }, { 0x0C84, GBP_SPACINGMARK }, { 0x0CBC, GBP_OTHER }, { 0x0CBD, GBP_EXTEND }, { 0x0CBE, GBP_OTHER }, { 0x0CBF, GBP_SPACINGMARK }, { 0x0CC0, GBP_EXTEND }, { 0x0CC2, GBP_SPACINGMARK }, { 0x0CC3, GBP_EXTEND }, { 0x0CC5, GBP_SPACINGMARK }, { 0x0CC6, GBP_OTHER }, { 0x0CC7, GBP_EXTEND }, { 0x0CC9, GBP_SPACINGMARK }, { 0x0CCA, GBP_OTHER }, { 0x0CCC, GBP_SPACINGMARK }, { 0x0CCE, GBP_EXTEND }, { 0x0CD5, GBP_OTHER }, { 0x0CD7, GBP_EXTEND }, { 0x0CE2, GBP_OTHER }, { 0x0CE4, GBP_EXTEND }, { 0x0D01, GBP_OTHER }, { 0x0D02, GBP_EXTEND }, { 0x0D04, GBP_SPACINGMARK }, { 0x0D3E, GBP_OTHER }, { 0x0D3F, GBP_EXTEND }, { 0x0D41, GBP_SPACINGMARK }, { 0x0D45, GBP_EXTEND }, { 0x0D46, GBP_OTHER }, { 0x0D49, GBP_SPACINGMARK }, { 0x0D4A, GBP_OTHER }, { 0x0D4D, GBP_SPACINGMARK }, { 0x0D4E, GBP_EXTEND }, { 0x0D4F, GBP_PREPEND }, { 0x0D57, GBP_OTHER }, { 0x0D58, GBP_EXTEND }, { 0x0D62, GBP_OTHER }, { 0x0D64, GBP_EXTEND }, { 0x0D82, GBP_OTHER }, { 0x0D84, GBP_SPACINGMARK }, { 0x0DCA, GBP_OTHER }, { 0x0DCB, GBP_EXTEND }, { 0x0DCF, GBP_OTHER }, { 0x0DD0, GBP_EXTEND }, { 0x0DD2, GBP_SPACINGMARK }, { 0x0DD5, GBP_EXTEND }, { 0x0DD6, GBP_OTHER }, { 0x0DD7, GBP_EXTEND }, { 0x0DD8, GBP_OTHER }, { 0x0DDF, GBP_SPACINGMARK }, { 0x0DE0, GBP_EXTEND }, { 0x0DF2, GBP_OTHER }, { 0x0DF4, GBP_SPACINGMARK }, { 0x0E31, GBP_OTHER }, { 0x0E32, GBP_EXTEND }, { 0x0E33, GBP_OTHER }, { 0x0E34, GBP_SPACINGMARK }, { 0x0E3B, GBP_EXTEND }, { 0x0E47, GBP_OTHER }, { 0x0E4F, GBP_EXTEND }, { 0x0EB1, GBP_OTHER }, { 0x0EB2, GBP_EXTEND }, { 0x0EB3, GBP_OTHER }, { 0x0EB4, GBP_SPACINGMARK }, { 0x0EBA, GBP_EXTEND }, { 0x0EBB, GBP_OTHER }, { 0x0EBD, GBP_EXTEND }, { 0x0EC8, GBP_OTHER }, { 0x0ECE, GBP_EXTEND }, { 0x0F18, GBP_OTHER }, { 0x0F1A, GBP_EXTEND }, { 0x0F35, GBP_OTHER }, { 0x0F36, GBP_EXTEND }, { 0x0F37, GBP_OTHER }, { 0x0F38, GBP_EXTEND }, { 0x0F39, GBP_OTHER }, { 0x0F3A, GBP_EXTEND }, { 0x0F3E, GBP_OTHER }, { 0x0F40, GBP_SPACINGMARK }, { 0x0F71, GBP_OTHER }, { 0x0F7F, GBP_EXTEND }, { 0x0F80, GBP_SPACINGMARK }, { 0x0F85, GBP_EXTEND }, { 0x0F86, GBP_OTHER }, { 0x0F88, GBP_EXTEND }, { 0x0F8D, GBP_OTHER }, { 0x0F98, GBP_EXTEND }, { 0x0F99, GBP_OTHER }, { 0x0FBD, GBP_EXTEND }, { 0x0FC6, GBP_OTHER }, { 0x0FC7, GBP_EXTEND }, { 0x102D, GBP_OTHER }, { 0x1031, GBP_EXTEND }, { 0x1032, GBP_SPACINGMARK }, { 0x1038, GBP_EXTEND }, { 0x1039, GBP_OTHER }, { 0x103B, GBP_EXTEND }, { 0x103D, GBP_SPACINGMARK }, { 0x103F, GBP_EXTEND }, { 0x1056, GBP_OTHER }, { 0x1058, GBP_SPACINGMARK }, { 0x105A, GBP_EXTEND }, { 0x105E, GBP_OTHER }, { 0x1061, GBP_EXTEND }, { 0x1071, GBP_OTHER }, { 0x1075, GBP_EXTEND }, { 0x1082, GBP_OTHER }, { 0x1083, GBP_EXTEND }, { 0x1084, GBP_OTHER }, { 0x1085, GBP_SPACINGMARK }, { 0x1087, GBP_EXTEND }, { 0x108D, GBP_OTHER }, { 0x108E, GBP_EXTEND }, { 0x109D, GBP_OTHER }, { 0x109E, GBP_EXTEND }, { 0x1100, GBP_OTHER }, { 0x1160, GBP_L }, { 0x11A8, GBP_V }, { 0x1200, GBP_T }, { 0x135D, GBP_OTHER }, { 0x1360, GBP_EXTEND }, { 0x1712, GBP_OTHER }, { 0x1715, GBP_EXTEND }, { 0x1732, GBP_OTHER }, { 0x1735, GBP_EXTEND }, { 0x1752, GBP_OTHER }, { 0x1754, GBP_EXTEND }, { 0x1772, GBP_OTHER }, { 0x1774, GBP_EXTEND }, { 0x17B4, GBP_OTHER }, { 0x17B6, GBP_EXTEND }, { 0x17B7, GBP_SPACINGMARK }, { 0x17BE, GBP_EXTEND }, { 0x17C6, GBP_SPACINGMARK }, { 0x17C7, GBP_EXTEND }, { 0x17C9, GBP_SPACINGMARK }, { 0x17D4, GBP_EXTEND }, { 0x17DD, GBP_OTHER }, { 0x17DE, GBP_EXTEND }, { 0x180B, GBP_OTHER }, { 0x180E, GBP_EXTEND }, { 0x180F, GBP_CONTROL }, { 0x1885, GBP_OTHER }, { 0x1887, GBP_EXTEND }, { 0x18A9, GBP_OTHER }, { 0x18AA, GBP_EXTEND }, { 0x1920, GBP_OTHER }, { 0x1923, GBP_EXTEND }, { 0x1927, GBP_SPACINGMARK }, { 0x1929, GBP_EXTEND }, { 0x192C, GBP_SPACINGMARK }, { 0x1930, GBP_OTHER }, { 0x1932, GBP_SPACINGMARK }, { 0x1933, GBP_EXTEND }, { 0x1939, GBP_SPACINGMARK }, { 0x193C, GBP_EXTEND }, { 0x1A17, GBP_OTHER }, { 0x1A19, GBP_EXTEND }, { 0x1A1B, GBP_SPACINGMARK }, { 0x1A1C, GBP_EXTEND }, { 0x1A55, GBP_OTHER }, { 0x1A56, GBP_SPACINGMARK }, { 0x1A57, GBP_EXTEND }, { 0x1A58, GBP_SPACINGMARK }, { 0x1A5F, GBP_EXTEND }, { 0x1A60, GBP_OTHER }, { 0x1A61, GBP_EXTEND }, { 0x1A62, GBP_OTHER }, { 0x1A63, GBP_EXTEND }, { 0x1A65, GBP_OTHER }, { 0x1A6D, GBP_EXTEND }, { 0x1A73, GBP_SPACINGMARK }, { 0x1A7D, GBP_EXTEND }, { 0x1A7F, GBP_OTHER }, { 0x1A80, GBP_EXTEND }, { 0x1AB0, GBP_OTHER }, { 0x1ABF, GBP_EXTEND }, { 0x1B00, GBP_OTHER }, { 0x1B04, GBP_EXTEND }, { 0x1B05, GBP_SPACINGMARK }, { 0x1B34, GBP_OTHER }, { 0x1B35, GBP_EXTEND }, { 0x1B36, GBP_SPACINGMARK }, { 0x1B3B, GBP_EXTEND }, { 0x1B3C, GBP_SPACINGMARK }, { 0x1B3D, GBP_EXTEND }, { 0x1B42, GBP_SPACINGMARK }, { 0x1B43, GBP_EXTEND }, { 0x1B45, GBP_SPACINGMARK }, { 0x1B6B, GBP_OTHER }, { 0x1B74, GBP_EXTEND }, { 0x1B80, GBP_OTHER }, { 0x1B82, GBP_EXTEND }, { 0x1B83, GBP_SPACINGMARK }, { 0x1BA1, GBP_OTHER }, { 0x1BA2, GBP_SPACINGMARK }, { 0x1BA6, GBP_EXTEND }, { 0x1BA8, GBP_SPACINGMARK }, { 0x1BAA, GBP_EXTEND }, { 0x1BAB, GBP_SPACINGMARK }, { 0x1BAE, GBP_EXTEND }, { 0x1BE6, GBP_OTHER }, { 0x1BE7, GBP_EXTEND }, { 0x1BE8, GBP_SPACINGMARK }, { 0x1BEA, GBP_EXTEND }, { 0x1BED, GBP_SPACINGMARK }, { 0x1BEE, GBP_EXTEND }, { 0x1BEF, GBP_SPACINGMARK }, { 0x1BF2, GBP_EXTEND }, { 0x1BF4, GBP_SPACINGMARK }, { 0x1C24, GBP_OTHER }, { 0x1C2C, GBP_SPACINGMARK }, { 0x1C34, GBP_EXTEND }, { 0x1C36, GBP_SPACINGMARK }, { 0x1C38, GBP_EXTEND }, { 0x1CD0, GBP_OTHER }, { 0x1CD3, GBP_EXTEND }, { 0x1CD4, GBP_OTHER }, { 0x1CE1, GBP_EXTEND }, { 0x1CE2, GBP_SPACINGMARK }, { 0x1CE9, GBP_EXTEND }, { 0x1CED, GBP_OTHER }, { 0x1CEE, GBP_EXTEND }, { 0x1CF2, GBP_OTHER }, { 0x1CF4, GBP_SPACINGMARK }, { 0x1CF5, GBP_EXTEND }, { 0x1CF8, GBP_OTHER }, { 0x1CFA, GBP_EXTEND }, { 0x1DC0, GBP_OTHER }, { 0x1DF6, GBP_EXTEND }, { 0x1DFB, GBP_OTHER }, { 0x1E00, GBP_EXTEND }, { 0x200B, GBP_OTHER }, { 0x200C, GBP_CONTROL }, { 0x200D, GBP_EXTEND }, { 0x200E, GBP_ZWJ }, { 0x2010, GBP_CONTROL }, { 0x2028, GBP_OTHER }, { 0x202F, GBP_CONTROL }, { 0x2060, GBP_OTHER }, { 0x2070, GBP_CONTROL }, { 0x20D0, GBP_OTHER }, { 0x20F1, GBP_EXTEND }, { 0x261D, GBP_OTHER }, { 0x261E, GBP_EB }, { 0x26F9, GBP_OTHER }, { 0x26FA, GBP_EB }, { 0x270A, GBP_OTHER }, { 0x270E, GBP_EB }, { 0x2764, GBP_OTHER }, { 0x2765, GBP_GAZ }, { 0x2CEF, GBP_OTHER }, { 0x2CF2, GBP_EXTEND }, { 0x2D7F, GBP_OTHER }, { 0x2D80, GBP_EXTEND }, { 0x2DE0, GBP_OTHER }, { 0x2E00, GBP_EXTEND }, { 0x302A, GBP_OTHER }, { 0x3030, GBP_EXTEND }, { 0x3099, GBP_OTHER }, { 0x309B, GBP_EXTEND }, { 0xA66F, GBP_OTHER }, { 0xA673, GBP_EXTEND }, { 0xA674, GBP_OTHER }, { 0xA67E, GBP_EXTEND }, { 0xA69E, GBP_OTHER }, { 0xA6A0, GBP_EXTEND }, { 0xA6F0, GBP_OTHER }, { 0xA6F2, GBP_EXTEND }, { 0xA802, GBP_OTHER }, { 0xA803, GBP_EXTEND }, { 0xA806, GBP_OTHER }, { 0xA807, GBP_EXTEND }, { 0xA80B, GBP_OTHER }, { 0xA80C, GBP_EXTEND }, { 0xA823, GBP_OTHER }, { 0xA825, GBP_SPACINGMARK }, { 0xA827, GBP_EXTEND }, { 0xA828, GBP_SPACINGMARK }, { 0xA880, GBP_OTHER }, { 0xA882, GBP_SPACINGMARK }, { 0xA8B4, GBP_OTHER }, { 0xA8C4, GBP_SPACINGMARK }, { 0xA8C6, GBP_EXTEND }, { 0xA8E0, GBP_OTHER }, { 0xA8F2, GBP_EXTEND }, { 0xA926, GBP_OTHER }, { 0xA92E, GBP_EXTEND }, { 0xA947, GBP_OTHER }, { 0xA952, GBP_EXTEND }, { 0xA954, GBP_SPACINGMARK }, { 0xA960, GBP_OTHER }, { 0xA97D, GBP_L }, { 0xA980, GBP_OTHER }, { 0xA983, GBP_EXTEND }, { 0xA984, GBP_SPACINGMARK }, { 0xA9B3, GBP_OTHER }, { 0xA9B4, GBP_EXTEND }, { 0xA9B6, GBP_SPACINGMARK }, { 0xA9BA, GBP_EXTEND }, { 0xA9BC, GBP_SPACINGMARK }, { 0xA9BD, GBP_EXTEND }, { 0xA9C1, GBP_SPACINGMARK }, { 0xA9E5, GBP_OTHER }, { 0xA9E6, GBP_EXTEND }, { 0xAA29, GBP_OTHER }, { 0xAA2F, GBP_EXTEND }, { 0xAA31, GBP_SPACINGMARK }, { 0xAA33, GBP_EXTEND }, { 0xAA35, GBP_SPACINGMARK }, { 0xAA37, GBP_EXTEND }, { 0xAA43, GBP_OTHER }, { 0xAA44, GBP_EXTEND }, { 0xAA4C, GBP_OTHER }, { 0xAA4D, GBP_EXTEND }, { 0xAA4E, GBP_SPACINGMARK }, { 0xAA7C, GBP_OTHER }, { 0xAA7D, GBP_EXTEND }, { 0xAAB0, GBP_OTHER }, { 0xAAB1, GBP_EXTEND }, { 0xAAB2, GBP_OTHER }, { 0xAAB5, GBP_EXTEND }, { 0xAAB7, GBP_OTHER }, { 0xAAB9, GBP_EXTEND }, { 0xAABE, GBP_OTHER }, { 0xAAC0, GBP_EXTEND }, { 0xAAC1, GBP_OTHER }, { 0xAAC2, GBP_EXTEND }, { 0xAAEB, GBP_OTHER }, { 0xAAEC, GBP_SPACINGMARK }, { 0xAAEE, GBP_EXTEND }, { 0xAAF0, GBP_SPACINGMARK }, { 0xAAF5, GBP_OTHER }, { 0xAAF6, GBP_SPACINGMARK }, { 0xAAF7, GBP_EXTEND }, { 0xABE3, GBP_OTHER }, { 0xABE5, GBP_SPACINGMARK }, { 0xABE6, GBP_EXTEND }, { 0xABE8, GBP_SPACINGMARK }, { 0xABE9, GBP_EXTEND }, { 0xABEB, GBP_SPACINGMARK }, { 0xABEC, GBP_OTHER }, { 0xABED, GBP_SPACINGMARK }, { 0xABEE, GBP_EXTEND }, { 0xAC00, GBP_OTHER }, { 0xAC01, GBP_LV }, { 0xAC1C, GBP_LVT }, { 0xAC1D, GBP_LV }, { 0xAC38, GBP_LVT }, { 0xAC39, GBP_LV }, { 0xAC54, GBP_LVT }, { 0xAC55, GBP_LV }, { 0xAC70, GBP_LVT }, { 0xAC71, GBP_LV }, { 0xAC8C, GBP_LVT }, { 0xAC8D, GBP_LV }, { 0xACA8, GBP_LVT }, { 0xACA9, GBP_LV }, { 0xACC4, GBP_LVT }, { 0xACC5, GBP_LV }, { 0xACE0, GBP_LVT }, { 0xACE1, GBP_LV }, { 0xACFC, GBP_LVT }, { 0xACFD, GBP_LV }, { 0xAD18, GBP_LVT }, { 0xAD19, GBP_LV }, { 0xAD34, GBP_LVT }, { 0xAD35, GBP_LV }, { 0xAD50, GBP_LVT }, { 0xAD51, GBP_LV }, { 0xAD6C, GBP_LVT }, { 0xAD6D, GBP_LV }, { 0xAD88, GBP_LVT }, { 0xAD89, GBP_LV }, { 0xADA4, GBP_LVT }, { 0xADA5, GBP_LV }, { 0xADC0, GBP_LVT }, { 0xADC1, GBP_LV }, { 0xADDC, GBP_LVT }, { 0xADDD, GBP_LV }, { 0xADF8, GBP_LVT }, { 0xADF9, GBP_LV }, { 0xAE14, GBP_LVT }, { 0xAE15, GBP_LV }, { 0xAE30, GBP_LVT }, { 0xAE31, GBP_LV }, { 0xAE4C, GBP_LVT }, { 0xAE4D, GBP_LV }, { 0xAE68, GBP_LVT }, { 0xAE69, GBP_LV }, { 0xAE84, GBP_LVT }, { 0xAE85, GBP_LV }, { 0xAEA0, GBP_LVT }, { 0xAEA1, GBP_LV }, { 0xAEBC, GBP_LVT }, { 0xAEBD, GBP_LV }, { 0xAED8, GBP_LVT }, { 0xAED9, GBP_LV }, { 0xAEF4, GBP_LVT }, { 0xAEF5, GBP_LV }, { 0xAF10, GBP_LVT }, { 0xAF11, GBP_LV }, { 0xAF2C, GBP_LVT }, { 0xAF2D, GBP_LV }, { 0xAF48, GBP_LVT }, { 0xAF49, GBP_LV }, { 0xAF64, GBP_LVT }, { 0xAF65, GBP_LV }, { 0xAF80, GBP_LVT }, { 0xAF81, GBP_LV }, { 0xAF9C, GBP_LVT }, { 0xAF9D, GBP_LV }, { 0xAFB8, GBP_LVT }, { 0xAFB9, GBP_LV }, { 0xAFD4, GBP_LVT }, { 0xAFD5, GBP_LV }, { 0xAFF0, GBP_LVT }, { 0xAFF1, GBP_LV }, { 0xB00C, GBP_LVT }, { 0xB00D, GBP_LV }, { 0xB028, GBP_LVT }, { 0xB029, GBP_LV }, { 0xB044, GBP_LVT }, { 0xB045, GBP_LV }, { 0xB060, GBP_LVT }, { 0xB061, GBP_LV }, { 0xB07C, GBP_LVT }, { 0xB07D, GBP_LV }, { 0xB098, GBP_LVT }, { 0xB099, GBP_LV }, { 0xB0B4, GBP_LVT }, { 0xB0B5, GBP_LV }, { 0xB0D0, GBP_LVT }, { 0xB0D1, GBP_LV }, { 0xB0EC, GBP_LVT }, { 0xB0ED, GBP_LV }, { 0xB108, GBP_LVT }, { 0xB109, GBP_LV }, { 0xB124, GBP_LVT }, { 0xB125, GBP_LV }, { 0xB140, GBP_LVT }, { 0xB141, GBP_LV }, { 0xB15C, GBP_LVT }, { 0xB15D, GBP_LV }, { 0xB178, GBP_LVT }, { 0xB179, GBP_LV }, { 0xB194, GBP_LVT }, { 0xB195, GBP_LV }, { 0xB1B0, GBP_LVT }, { 0xB1B1, GBP_LV }, { 0xB1CC, GBP_LVT }, { 0xB1CD, GBP_LV }, { 0xB1E8, GBP_LVT }, { 0xB1E9, GBP_LV }, { 0xB204, GBP_LVT }, { 0xB205, GBP_LV }, { 0xB220, GBP_LVT }, { 0xB221, GBP_LV }, { 0xB23C, GBP_LVT }, { 0xB23D, GBP_LV }, { 0xB258, GBP_LVT }, { 0xB259, GBP_LV }, { 0xB274, GBP_LVT }, { 0xB275, GBP_LV }, { 0xB290, GBP_LVT }, { 0xB291, GBP_LV }, { 0xB2AC, GBP_LVT }, { 0xB2AD, GBP_LV }, { 0xB2C8, GBP_LVT }, { 0xB2C9, GBP_LV }, { 0xB2E4, GBP_LVT }, { 0xB2E5, GBP_LV }, { 0xB300, GBP_LVT }, { 0xB301, GBP_LV }, { 0xB31C, GBP_LVT }, { 0xB31D, GBP_LV }, { 0xB338, GBP_LVT }, { 0xB339, GBP_LV }, { 0xB354, GBP_LVT }, { 0xB355, GBP_LV }, { 0xB370, GBP_LVT }, { 0xB371, GBP_LV }, { 0xB38C, GBP_LVT }, { 0xB38D, GBP_LV }, { 0xB3A8, GBP_LVT }, { 0xB3A9, GBP_LV }, { 0xB3C4, GBP_LVT }, { 0xB3C5, GBP_LV }, { 0xB3E0, GBP_LVT }, { 0xB3E1, GBP_LV }, { 0xB3FC, GBP_LVT }, { 0xB3FD, GBP_LV }, { 0xB418, GBP_LVT }, { 0xB419, GBP_LV }, { 0xB434, GBP_LVT }, { 0xB435, GBP_LV }, { 0xB450, GBP_LVT }, { 0xB451, GBP_LV }, { 0xB46C, GBP_LVT }, { 0xB46D, GBP_LV }, { 0xB488, GBP_LVT }, { 0xB489, GBP_LV }, { 0xB4A4, GBP_LVT }, { 0xB4A5, GBP_LV }, { 0xB4C0, GBP_LVT }, { 0xB4C1, GBP_LV }, { 0xB4DC, GBP_LVT }, { 0xB4DD, GBP_LV }, { 0xB4F8, GBP_LVT }, { 0xB4F9, GBP_LV }, { 0xB514, GBP_LVT }, { 0xB515, GBP_LV }, { 0xB530, GBP_LVT }, { 0xB531, GBP_LV }, { 0xB54C, GBP_LVT }, { 0xB54D, GBP_LV }, { 0xB568, GBP_LVT }, { 0xB569, GBP_LV }, { 0xB584, GBP_LVT }, { 0xB585, GBP_LV }, { 0xB5A0, GBP_LVT }, { 0xB5A1, GBP_LV }, { 0xB5BC, GBP_LVT }, { 0xB5BD, GBP_LV }, { 0xB5D8, GBP_LVT }, { 0xB5D9, GBP_LV }, { 0xB5F4, GBP_LVT }, { 0xB5F5, GBP_LV }, { 0xB610, GBP_LVT }, { 0xB611, GBP_LV }, { 0xB62C, GBP_LVT }, { 0xB62D, GBP_LV }, { 0xB648, GBP_LVT }, { 0xB649, GBP_LV }, { 0xB664, GBP_LVT }, { 0xB665, GBP_LV }, { 0xB680, GBP_LVT }, { 0xB681, GBP_LV }, { 0xB69C, GBP_LVT }, { 0xB69D, GBP_LV }, { 0xB6B8, GBP_LVT }, { 0xB6B9, GBP_LV }, { 0xB6D4, GBP_LVT }, { 0xB6D5, GBP_LV }, { 0xB6F0, GBP_LVT }, { 0xB6F1, GBP_LV }, { 0xB70C, GBP_LVT }, { 0xB70D, GBP_LV }, { 0xB728, GBP_LVT }, { 0xB729, GBP_LV }, { 0xB744, GBP_LVT }, { 0xB745, GBP_LV }, { 0xB760, GBP_LVT }, { 0xB761, GBP_LV }, { 0xB77C, GBP_LVT }, { 0xB77D, GBP_LV }, { 0xB798, GBP_LVT }, { 0xB799, GBP_LV }, { 0xB7B4, GBP_LVT }, { 0xB7B5, GBP_LV }, { 0xB7D0, GBP_LVT }, { 0xB7D1, GBP_LV }, { 0xB7EC, GBP_LVT }, { 0xB7ED, GBP_LV }, { 0xB808, GBP_LVT }, { 0xB809, GBP_LV }, { 0xB824, GBP_LVT }, { 0xB825, GBP_LV }, { 0xB840, GBP_LVT }, { 0xB841, GBP_LV }, { 0xB85C, GBP_LVT }, { 0xB85D, GBP_LV }, { 0xB878, GBP_LVT }, { 0xB879, GBP_LV }, { 0xB894, GBP_LVT }, { 0xB895, GBP_LV }, { 0xB8B0, GBP_LVT }, { 0xB8B1, GBP_LV }, { 0xB8CC, GBP_LVT }, { 0xB8CD, GBP_LV }, { 0xB8E8, GBP_LVT }, { 0xB8E9, GBP_LV }, { 0xB904, GBP_LVT }, { 0xB905, GBP_LV }, { 0xB920, GBP_LVT }, { 0xB921, GBP_LV }, { 0xB93C, GBP_LVT }, { 0xB93D, GBP_LV }, { 0xB958, GBP_LVT }, { 0xB959, GBP_LV }, { 0xB974, GBP_LVT }, { 0xB975, GBP_LV }, { 0xB990, GBP_LVT }, { 0xB991, GBP_LV }, { 0xB9AC, GBP_LVT }, { 0xB9AD, GBP_LV }, { 0xB9C8, GBP_LVT }, { 0xB9C9, GBP_LV }, { 0xB9E4, GBP_LVT }, { 0xB9E5, GBP_LV }, { 0xBA00, GBP_LVT }, { 0xBA01, GBP_LV }, { 0xBA1C, GBP_LVT }, { 0xBA1D, GBP_LV }, { 0xBA38, GBP_LVT }, { 0xBA39, GBP_LV }, { 0xBA54, GBP_LVT }, { 0xBA55, GBP_LV }, { 0xBA70, GBP_LVT }, { 0xBA71, GBP_LV }, { 0xBA8C, GBP_LVT }, { 0xBA8D, GBP_LV }, { 0xBAA8, GBP_LVT }, { 0xBAA9, GBP_LV }, { 0xBAC4, GBP_LVT }, { 0xBAC5, GBP_LV }, { 0xBAE0, GBP_LVT }, { 0xBAE1, GBP_LV }, { 0xBAFC, GBP_LVT }, { 0xBAFD, GBP_LV }, { 0xBB18, GBP_LVT }, { 0xBB19, GBP_LV }, { 0xBB34, GBP_LVT }, { 0xBB35, GBP_LV }, { 0xBB50, GBP_LVT }, { 0xBB51, GBP_LV }, { 0xBB6C, GBP_LVT }, { 0xBB6D, GBP_LV }, { 0xBB88, GBP_LVT }, { 0xBB89, GBP_LV }, { 0xBBA4, GBP_LVT }, { 0xBBA5, GBP_LV }, { 0xBBC0, GBP_LVT }, { 0xBBC1, GBP_LV }, { 0xBBDC, GBP_LVT }, { 0xBBDD, GBP_LV }, { 0xBBF8, GBP_LVT }, { 0xBBF9, GBP_LV }, { 0xBC14, GBP_LVT }, { 0xBC15, GBP_LV }, { 0xBC30, GBP_LVT }, { 0xBC31, GBP_LV }, { 0xBC4C, GBP_LVT }, { 0xBC4D, GBP_LV }, { 0xBC68, GBP_LVT }, { 0xBC69, GBP_LV }, { 0xBC84, GBP_LVT }, { 0xBC85, GBP_LV }, { 0xBCA0, GBP_LVT }, { 0xBCA1, GBP_LV }, { 0xBCBC, GBP_LVT }, { 0xBCBD, GBP_LV }, { 0xBCD8, GBP_LVT }, { 0xBCD9, GBP_LV }, { 0xBCF4, GBP_LVT }, { 0xBCF5, GBP_LV }, { 0xBD10, GBP_LVT }, { 0xBD11, GBP_LV }, { 0xBD2C, GBP_LVT }, { 0xBD2D, GBP_LV }, { 0xBD48, GBP_LVT }, { 0xBD49, GBP_LV }, { 0xBD64, GBP_LVT }, { 0xBD65, GBP_LV }, { 0xBD80, GBP_LVT }, { 0xBD81, GBP_LV }, { 0xBD9C, GBP_LVT }, { 0xBD9D, GBP_LV }, { 0xBDB8, GBP_LVT }, { 0xBDB9, GBP_LV }, { 0xBDD4, GBP_LVT }, { 0xBDD5, GBP_LV }, { 0xBDF0, GBP_LVT }, { 0xBDF1, GBP_LV }, { 0xBE0C, GBP_LVT }, { 0xBE0D, GBP_LV }, { 0xBE28, GBP_LVT }, { 0xBE29, GBP_LV }, { 0xBE44, GBP_LVT }, { 0xBE45, GBP_LV }, { 0xBE60, GBP_LVT }, { 0xBE61, GBP_LV }, { 0xBE7C, GBP_LVT }, { 0xBE7D, GBP_LV }, { 0xBE98, GBP_LVT }, { 0xBE99, GBP_LV }, { 0xBEB4, GBP_LVT }, { 0xBEB5, GBP_LV }, { 0xBED0, GBP_LVT }, { 0xBED1, GBP_LV }, { 0xBEEC, GBP_LVT }, { 0xBEED, GBP_LV }, { 0xBF08, GBP_LVT }, { 0xBF09, GBP_LV }, { 0xBF24, GBP_LVT }, { 0xBF25, GBP_LV }, { 0xBF40, GBP_LVT }, { 0xBF41, GBP_LV }, { 0xBF5C, GBP_LVT }, { 0xBF5D, GBP_LV }, { 0xBF78, GBP_LVT }, { 0xBF79, GBP_LV }, { 0xBF94, GBP_LVT }, { 0xBF95, GBP_LV }, { 0xBFB0, GBP_LVT }, { 0xBFB1, GBP_LV }, { 0xBFCC, GBP_LVT }, { 0xBFCD, GBP_LV }, { 0xBFE8, GBP_LVT }, { 0xBFE9, GBP_LV }, { 0xC004, GBP_LVT }, { 0xC005, GBP_LV }, { 0xC020, GBP_LVT }, { 0xC021, GBP_LV }, { 0xC03C, GBP_LVT }, { 0xC03D, GBP_LV }, { 0xC058, GBP_LVT }, { 0xC059, GBP_LV }, { 0xC074, GBP_LVT }, { 0xC075, GBP_LV }, { 0xC090, GBP_LVT }, { 0xC091, GBP_LV }, { 0xC0AC, GBP_LVT }, { 0xC0AD, GBP_LV }, { 0xC0C8, GBP_LVT }, { 0xC0C9, GBP_LV }, { 0xC0E4, GBP_LVT }, { 0xC0E5, GBP_LV }, { 0xC100, GBP_LVT }, { 0xC101, GBP_LV }, { 0xC11C, GBP_LVT }, { 0xC11D, GBP_LV }, { 0xC138, GBP_LVT }, { 0xC139, GBP_LV }, { 0xC154, GBP_LVT }, { 0xC155, GBP_LV }, { 0xC170, GBP_LVT }, { 0xC171, GBP_LV }, { 0xC18C, GBP_LVT }, { 0xC18D, GBP_LV }, { 0xC1A8, GBP_LVT }, { 0xC1A9, GBP_LV }, { 0xC1C4, GBP_LVT }, { 0xC1C5, GBP_LV }, { 0xC1E0, GBP_LVT }, { 0xC1E1, GBP_LV }, { 0xC1FC, GBP_LVT }, { 0xC1FD, GBP_LV }, { 0xC218, GBP_LVT }, { 0xC219, GBP_LV }, { 0xC234, GBP_LVT }, { 0xC235, GBP_LV }, { 0xC250, GBP_LVT }, { 0xC251, GBP_LV }, { 0xC26C, GBP_LVT }, { 0xC26D, GBP_LV }, { 0xC288, GBP_LVT }, { 0xC289, GBP_LV }, { 0xC2A4, GBP_LVT }, { 0xC2A5, GBP_LV }, { 0xC2C0, GBP_LVT }, { 0xC2C1, GBP_LV }, { 0xC2DC, GBP_LVT }, { 0xC2DD, GBP_LV }, { 0xC2F8, GBP_LVT }, { 0xC2F9, GBP_LV }, { 0xC314, GBP_LVT }, { 0xC315, GBP_LV }, { 0xC330, GBP_LVT }, { 0xC331, GBP_LV }, { 0xC34C, GBP_LVT }, { 0xC34D, GBP_LV }, { 0xC368, GBP_LVT }, { 0xC369, GBP_LV }, { 0xC384, GBP_LVT }, { 0xC385, GBP_LV }, { 0xC3A0, GBP_LVT }, { 0xC3A1, GBP_LV }, { 0xC3BC, GBP_LVT }, { 0xC3BD, GBP_LV }, { 0xC3D8, GBP_LVT }, { 0xC3D9, GBP_LV }, { 0xC3F4, GBP_LVT }, { 0xC3F5, GBP_LV }, { 0xC410, GBP_LVT }, { 0xC411, GBP_LV }, { 0xC42C, GBP_LVT }, { 0xC42D, GBP_LV }, { 0xC448, GBP_LVT }, { 0xC449, GBP_LV }, { 0xC464, GBP_LVT }, { 0xC465, GBP_LV }, { 0xC480, GBP_LVT }, { 0xC481, GBP_LV }, { 0xC49C, GBP_LVT }, { 0xC49D, GBP_LV }, { 0xC4B8, GBP_LVT }, { 0xC4B9, GBP_LV }, { 0xC4D4, GBP_LVT }, { 0xC4D5, GBP_LV }, { 0xC4F0, GBP_LVT }, { 0xC4F1, GBP_LV }, { 0xC50C, GBP_LVT }, { 0xC50D, GBP_LV }, { 0xC528, GBP_LVT }, { 0xC529, GBP_LV }, { 0xC544, GBP_LVT }, { 0xC545, GBP_LV }, { 0xC560, GBP_LVT }, { 0xC561, GBP_LV }, { 0xC57C, GBP_LVT }, { 0xC57D, GBP_LV }, { 0xC598, GBP_LVT }, { 0xC599, GBP_LV }, { 0xC5B4, GBP_LVT }, { 0xC5B5, GBP_LV }, { 0xC5D0, GBP_LVT }, { 0xC5D1, GBP_LV }, { 0xC5EC, GBP_LVT }, { 0xC5ED, GBP_LV }, { 0xC608, GBP_LVT }, { 0xC609, GBP_LV }, { 0xC624, GBP_LVT }, { 0xC625, GBP_LV }, { 0xC640, GBP_LVT }, { 0xC641, GBP_LV }, { 0xC65C, GBP_LVT }, { 0xC65D, GBP_LV }, { 0xC678, GBP_LVT }, { 0xC679, GBP_LV }, { 0xC694, GBP_LVT }, { 0xC695, GBP_LV }, { 0xC6B0, GBP_LVT }, { 0xC6B1, GBP_LV }, { 0xC6CC, GBP_LVT }, { 0xC6CD, GBP_LV }, { 0xC6E8, GBP_LVT }, { 0xC6E9, GBP_LV }, { 0xC704, GBP_LVT }, { 0xC705, GBP_LV }, { 0xC720, GBP_LVT }, { 0xC721, GBP_LV }, { 0xC73C, GBP_LVT }, { 0xC73D, GBP_LV }, { 0xC758, GBP_LVT }, { 0xC759, GBP_LV }, { 0xC774, GBP_LVT }, { 0xC775, GBP_LV }, { 0xC790, GBP_LVT }, { 0xC791, GBP_LV }, { 0xC7AC, GBP_LVT }, { 0xC7AD, GBP_LV }, { 0xC7C8, GBP_LVT }, { 0xC7C9, GBP_LV }, { 0xC7E4, GBP_LVT }, { 0xC7E5, GBP_LV }, { 0xC800, GBP_LVT }, { 0xC801, GBP_LV }, { 0xC81C, GBP_LVT }, { 0xC81D, GBP_LV }, { 0xC838, GBP_LVT }, { 0xC839, GBP_LV }, { 0xC854, GBP_LVT }, { 0xC855, GBP_LV }, { 0xC870, GBP_LVT }, { 0xC871, GBP_LV }, { 0xC88C, GBP_LVT }, { 0xC88D, GBP_LV }, { 0xC8A8, GBP_LVT }, { 0xC8A9, GBP_LV }, { 0xC8C4, GBP_LVT }, { 0xC8C5, GBP_LV }, { 0xC8E0, GBP_LVT }, { 0xC8E1, GBP_LV }, { 0xC8FC, GBP_LVT }, { 0xC8FD, GBP_LV }, { 0xC918, GBP_LVT }, { 0xC919, GBP_LV }, { 0xC934, GBP_LVT }, { 0xC935, GBP_LV }, { 0xC950, GBP_LVT }, { 0xC951, GBP_LV }, { 0xC96C, GBP_LVT }, { 0xC96D, GBP_LV }, { 0xC988, GBP_LVT }, { 0xC989, GBP_LV }, { 0xC9A4, GBP_LVT }, { 0xC9A5, GBP_LV }, { 0xC9C0, GBP_LVT }, { 0xC9C1, GBP_LV }, { 0xC9DC, GBP_LVT }, { 0xC9DD, GBP_LV }, { 0xC9F8, GBP_LVT }, { 0xC9F9, GBP_LV }, { 0xCA14, GBP_LVT }, { 0xCA15, GBP_LV }, { 0xCA30, GBP_LVT }, { 0xCA31, GBP_LV }, { 0xCA4C, GBP_LVT }, { 0xCA4D, GBP_LV }, { 0xCA68, GBP_LVT }, { 0xCA69, GBP_LV }, { 0xCA84, GBP_LVT }, { 0xCA85, GBP_LV }, { 0xCAA0, GBP_LVT }, { 0xCAA1, GBP_LV }, { 0xCABC, GBP_LVT }, { 0xCABD, GBP_LV }, { 0xCAD8, GBP_LVT }, { 0xCAD9, GBP_LV }, { 0xCAF4, GBP_LVT }, { 0xCAF5, GBP_LV }, { 0xCB10, GBP_LVT }, { 0xCB11, GBP_LV }, { 0xCB2C, GBP_LVT }, { 0xCB2D, GBP_LV }, { 0xCB48, GBP_LVT }, { 0xCB49, GBP_LV }, { 0xCB64, GBP_LVT }, { 0xCB65, GBP_LV }, { 0xCB80, GBP_LVT }, { 0xCB81, GBP_LV }, { 0xCB9C, GBP_LVT }, { 0xCB9D, GBP_LV }, { 0xCBB8, GBP_LVT }, { 0xCBB9, GBP_LV }, { 0xCBD4, GBP_LVT }, { 0xCBD5, GBP_LV }, { 0xCBF0, GBP_LVT }, { 0xCBF1, GBP_LV }, { 0xCC0C, GBP_LVT }, { 0xCC0D, GBP_LV }, { 0xCC28, GBP_LVT }, { 0xCC29, GBP_LV }, { 0xCC44, GBP_LVT }, { 0xCC45, GBP_LV }, { 0xCC60, GBP_LVT }, { 0xCC61, GBP_LV }, { 0xCC7C, GBP_LVT }, { 0xCC7D, GBP_LV }, { 0xCC98, GBP_LVT }, { 0xCC99, GBP_LV }, { 0xCCB4, GBP_LVT }, { 0xCCB5, GBP_LV }, { 0xCCD0, GBP_LVT }, { 0xCCD1, GBP_LV }, { 0xCCEC, GBP_LVT }, { 0xCCED, GBP_LV }, { 0xCD08, GBP_LVT }, { 0xCD09, GBP_LV }, { 0xCD24, GBP_LVT }, { 0xCD25, GBP_LV }, { 0xCD40, GBP_LVT }, { 0xCD41, GBP_LV }, { 0xCD5C, GBP_LVT }, { 0xCD5D, GBP_LV }, { 0xCD78, GBP_LVT }, { 0xCD79, GBP_LV }, { 0xCD94, GBP_LVT }, { 0xCD95, GBP_LV }, { 0xCDB0, GBP_LVT }, { 0xCDB1, GBP_LV }, { 0xCDCC, GBP_LVT }, { 0xCDCD, GBP_LV }, { 0xCDE8, GBP_LVT }, { 0xCDE9, GBP_LV }, { 0xCE04, GBP_LVT }, { 0xCE05, GBP_LV }, { 0xCE20, GBP_LVT }, { 0xCE21, GBP_LV }, { 0xCE3C, GBP_LVT }, { 0xCE3D, GBP_LV }, { 0xCE58, GBP_LVT }, { 0xCE59, GBP_LV }, { 0xCE74, GBP_LVT }, { 0xCE75, GBP_LV }, { 0xCE90, GBP_LVT }, { 0xCE91, GBP_LV }, { 0xCEAC, GBP_LVT }, { 0xCEAD, GBP_LV }, { 0xCEC8, GBP_LVT }, { 0xCEC9, GBP_LV }, { 0xCEE4, GBP_LVT }, { 0xCEE5, GBP_LV }, { 0xCF00, GBP_LVT }, { 0xCF01, GBP_LV }, { 0xCF1C, GBP_LVT }, { 0xCF1D, GBP_LV }, { 0xCF38, GBP_LVT }, { 0xCF39, GBP_LV }, { 0xCF54, GBP_LVT }, { 0xCF55, GBP_LV }, { 0xCF70, GBP_LVT }, { 0xCF71, GBP_LV }, { 0xCF8C, GBP_LVT }, { 0xCF8D, GBP_LV }, { 0xCFA8, GBP_LVT }, { 0xCFA9, GBP_LV }, { 0xCFC4, GBP_LVT }, { 0xCFC5, GBP_LV }, { 0xCFE0, GBP_LVT }, { 0xCFE1, GBP_LV }, { 0xCFFC, GBP_LVT }, { 0xCFFD, GBP_LV }, { 0xD018, GBP_LVT }, { 0xD019, GBP_LV }, { 0xD034, GBP_LVT }, { 0xD035, GBP_LV }, { 0xD050, GBP_LVT }, { 0xD051, GBP_LV }, { 0xD06C, GBP_LVT }, { 0xD06D, GBP_LV }, { 0xD088, GBP_LVT }, { 0xD089, GBP_LV }, { 0xD0A4, GBP_LVT }, { 0xD0A5, GBP_LV }, { 0xD0C0, GBP_LVT }, { 0xD0C1, GBP_LV }, { 0xD0DC, GBP_LVT }, { 0xD0DD, GBP_LV }, { 0xD0F8, GBP_LVT }, { 0xD0F9, GBP_LV }, { 0xD114, GBP_LVT }, { 0xD115, GBP_LV }, { 0xD130, GBP_LVT }, { 0xD131, GBP_LV }, { 0xD14C, GBP_LVT }, { 0xD14D, GBP_LV }, { 0xD168, GBP_LVT }, { 0xD169, GBP_LV }, { 0xD184, GBP_LVT }, { 0xD185, GBP_LV }, { 0xD1A0, GBP_LVT }, { 0xD1A1, GBP_LV }, { 0xD1BC, GBP_LVT }, { 0xD1BD, GBP_LV }, { 0xD1D8, GBP_LVT }, { 0xD1D9, GBP_LV }, { 0xD1F4, GBP_LVT }, { 0xD1F5, GBP_LV }, { 0xD210, GBP_LVT }, { 0xD211, GBP_LV }, { 0xD22C, GBP_LVT }, { 0xD22D, GBP_LV }, { 0xD248, GBP_LVT }, { 0xD249, GBP_LV }, { 0xD264, GBP_LVT }, { 0xD265, GBP_LV }, { 0xD280, GBP_LVT }, { 0xD281, GBP_LV }, { 0xD29C, GBP_LVT }, { 0xD29D, GBP_LV }, { 0xD2B8, GBP_LVT }, { 0xD2B9, GBP_LV }, { 0xD2D4, GBP_LVT }, { 0xD2D5, GBP_LV }, { 0xD2F0, GBP_LVT }, { 0xD2F1, GBP_LV }, { 0xD30C, GBP_LVT }, { 0xD30D, GBP_LV }, { 0xD328, GBP_LVT }, { 0xD329, GBP_LV }, { 0xD344, GBP_LVT }, { 0xD345, GBP_LV }, { 0xD360, GBP_LVT }, { 0xD361, GBP_LV }, { 0xD37C, GBP_LVT }, { 0xD37D, GBP_LV }, { 0xD398, GBP_LVT }, { 0xD399, GBP_LV }, { 0xD3B4, GBP_LVT }, { 0xD3B5, GBP_LV }, { 0xD3D0, GBP_LVT }, { 0xD3D1, GBP_LV }, { 0xD3EC, GBP_LVT }, { 0xD3ED, GBP_LV }, { 0xD408, GBP_LVT }, { 0xD409, GBP_LV }, { 0xD424, GBP_LVT }, { 0xD425, GBP_LV }, { 0xD440, GBP_LVT }, { 0xD441, GBP_LV }, { 0xD45C, GBP_LVT }, { 0xD45D, GBP_LV }, { 0xD478, GBP_LVT }, { 0xD479, GBP_LV }, { 0xD494, GBP_LVT }, { 0xD495, GBP_LV }, { 0xD4B0, GBP_LVT }, { 0xD4B1, GBP_LV }, { 0xD4CC, GBP_LVT }, { 0xD4CD, GBP_LV }, { 0xD4E8, GBP_LVT }, { 0xD4E9, GBP_LV }, { 0xD504, GBP_LVT }, { 0xD505, GBP_LV }, { 0xD520, GBP_LVT }, { 0xD521, GBP_LV }, { 0xD53C, GBP_LVT }, { 0xD53D, GBP_LV }, { 0xD558, GBP_LVT }, { 0xD559, GBP_LV }, { 0xD574, GBP_LVT }, { 0xD575, GBP_LV }, { 0xD590, GBP_LVT }, { 0xD591, GBP_LV }, { 0xD5AC, GBP_LVT }, { 0xD5AD, GBP_LV }, { 0xD5C8, GBP_LVT }, { 0xD5C9, GBP_LV }, { 0xD5E4, GBP_LVT }, { 0xD5E5, GBP_LV }, { 0xD600, GBP_LVT }, { 0xD601, GBP_LV }, { 0xD61C, GBP_LVT }, { 0xD61D, GBP_LV }, { 0xD638, GBP_LVT }, { 0xD639, GBP_LV }, { 0xD654, GBP_LVT }, { 0xD655, GBP_LV }, { 0xD670, GBP_LVT }, { 0xD671, GBP_LV }, { 0xD68C, GBP_LVT }, { 0xD68D, GBP_LV }, { 0xD6A8, GBP_LVT }, { 0xD6A9, GBP_LV }, { 0xD6C4, GBP_LVT }, { 0xD6C5, GBP_LV }, { 0xD6E0, GBP_LVT }, { 0xD6E1, GBP_LV }, { 0xD6FC, GBP_LVT }, { 0xD6FD, GBP_LV }, { 0xD718, GBP_LVT }, { 0xD719, GBP_LV }, { 0xD734, GBP_LVT }, { 0xD735, GBP_LV }, { 0xD750, GBP_LVT }, { 0xD751, GBP_LV }, { 0xD76C, GBP_LVT }, { 0xD76D, GBP_LV }, { 0xD788, GBP_LVT }, { 0xD789, GBP_LV }, { 0xD7A4, GBP_LVT }, { 0xD7B0, GBP_OTHER }, { 0xD7C7, GBP_V }, { 0xD7CB, GBP_OTHER }, { 0xD7FC, GBP_T }, { 0xD800, GBP_OTHER }, { 0xE000, GBP_CONTROL }, { 0xFB1E, GBP_OTHER }, { 0xFB1F, GBP_EXTEND }, { 0xFE00, GBP_OTHER }, { 0xFE10, GBP_EXTEND }, { 0xFE20, GBP_OTHER }, { 0xFE30, GBP_EXTEND }, { 0xFEFF, GBP_OTHER }, { 0xFF00, GBP_CONTROL }, { 0xFF9E, GBP_OTHER }, { 0xFFA0, GBP_EXTEND }, { 0xFFF0, GBP_OTHER }, { 0xFFFC, GBP_CONTROL }, { 0x101FD, GBP_OTHER }, { 0x101FE, GBP_EXTEND }, { 0x102E0, GBP_OTHER }, { 0x102E1, GBP_EXTEND }, { 0x10376, GBP_OTHER }, { 0x1037B, GBP_EXTEND }, { 0x10A01, GBP_OTHER }, { 0x10A04, GBP_EXTEND }, { 0x10A05, GBP_OTHER }, { 0x10A07, GBP_EXTEND }, { 0x10A0C, GBP_OTHER }, { 0x10A10, GBP_EXTEND }, { 0x10A38, GBP_OTHER }, { 0x10A3B, GBP_EXTEND }, { 0x10A3F, GBP_OTHER }, { 0x10A40, GBP_EXTEND }, { 0x10AE5, GBP_OTHER }, { 0x10AE7, GBP_EXTEND }, { 0x11000, GBP_OTHER }, { 0x11001, GBP_SPACINGMARK }, { 0x11002, GBP_EXTEND }, { 0x11003, GBP_SPACINGMARK }, { 0x11038, GBP_OTHER }, { 0x11047, GBP_EXTEND }, { 0x1107F, GBP_OTHER }, { 0x11082, GBP_EXTEND }, { 0x11083, GBP_SPACINGMARK }, { 0x110B0, GBP_OTHER }, { 0x110B3, GBP_SPACINGMARK }, { 0x110B7, GBP_EXTEND }, { 0x110B9, GBP_SPACINGMARK }, { 0x110BB, GBP_EXTEND }, { 0x110BD, GBP_OTHER }, { 0x110BE, GBP_PREPEND }, { 0x11100, GBP_OTHER }, { 0x11103, GBP_EXTEND }, { 0x11127, GBP_OTHER }, { 0x1112C, GBP_EXTEND }, { 0x1112D, GBP_SPACINGMARK }, { 0x11135, GBP_EXTEND }, { 0x11173, GBP_OTHER }, { 0x11174, GBP_EXTEND }, { 0x11180, GBP_OTHER }, { 0x11182, GBP_EXTEND }, { 0x11183, GBP_SPACINGMARK }, { 0x111B3, GBP_OTHER }, { 0x111B6, GBP_SPACINGMARK }, { 0x111BF, GBP_EXTEND }, { 0x111C1, GBP_SPACINGMARK }, { 0x111C2, GBP_OTHER }, { 0x111C4, GBP_PREPEND }, { 0x111CA, GBP_OTHER }, { 0x111CD, GBP_EXTEND }, { 0x1122C, GBP_OTHER }, { 0x1122F, GBP_SPACINGMARK }, { 0x11232, GBP_EXTEND }, { 0x11234, GBP_SPACINGMARK }, { 0x11235, GBP_EXTEND }, { 0x11236, GBP_SPACINGMARK }, { 0x11238, GBP_EXTEND }, { 0x1123E, GBP_OTHER }, { 0x1123F, GBP_EXTEND }, { 0x112DF, GBP_OTHER }, { 0x112E0, GBP_EXTEND }, { 0x112E3, GBP_SPACINGMARK }, { 0x112EB, GBP_EXTEND }, { 0x11300, GBP_OTHER }, { 0x11302, GBP_EXTEND }, { 0x11304, GBP_SPACINGMARK }, { 0x1133C, GBP_OTHER }, { 0x1133D, GBP_EXTEND }, { 0x1133E, GBP_OTHER }, { 0x1133F, GBP_EXTEND }, { 0x11340, GBP_SPACINGMARK }, { 0x11341, GBP_EXTEND }, { 0x11345, GBP_SPACINGMARK }, { 0x11347, GBP_OTHER }, { 0x11349, GBP_SPACINGMARK }, { 0x1134B, GBP_OTHER }, { 0x1134E, GBP_SPACINGMARK }, { 0x11357, GBP_OTHER }, { 0x11358, GBP_EXTEND }, { 0x11362, GBP_OTHER }, { 0x11364, GBP_SPACINGMARK }, { 0x11366, GBP_OTHER }, { 0x1136D, GBP_EXTEND }, { 0x11370, GBP_OTHER }, { 0x11375, GBP_EXTEND }, { 0x11435, GBP_OTHER }, { 0x11438, GBP_SPACINGMARK }, { 0x11440, GBP_EXTEND }, { 0x11442, GBP_SPACINGMARK }, { 0x11445, GBP_EXTEND }, { 0x11446, GBP_SPACINGMARK }, { 0x11447, GBP_EXTEND }, { 0x114B0, GBP_OTHER }, { 0x114B1, GBP_EXTEND }, { 0x114B3, GBP_SPACINGMARK }, { 0x114B9, GBP_EXTEND }, { 0x114BA, GBP_SPACINGMARK }, { 0x114BB, GBP_EXTEND }, { 0x114BD, GBP_SPACINGMARK }, { 0x114BE, GBP_EXTEND }, { 0x114BF, GBP_SPACINGMARK }, { 0x114C1, GBP_EXTEND }, { 0x114C2, GBP_SPACINGMARK }, { 0x114C4, GBP_EXTEND }, { 0x115AF, GBP_OTHER }, { 0x115B0, GBP_EXTEND }, { 0x115B2, GBP_SPACINGMARK }, { 0x115B6, GBP_EXTEND }, { 0x115B8, GBP_OTHER }, { 0x115BC, GBP_SPACINGMARK }, { 0x115BE, GBP_EXTEND }, { 0x115BF, GBP_SPACINGMARK }, { 0x115C1, GBP_EXTEND }, { 0x115DC, GBP_OTHER }, { 0x115DE, GBP_EXTEND }, { 0x11630, GBP_OTHER }, { 0x11633, GBP_SPACINGMARK }, { 0x1163B, GBP_EXTEND }, { 0x1163D, GBP_SPACINGMARK }, { 0x1163E, GBP_EXTEND }, { 0x1163F, GBP_SPACINGMARK }, { 0x11641, GBP_EXTEND }, { 0x116AB, GBP_OTHER }, { 0x116AC, GBP_EXTEND }, { 0x116AD, GBP_SPACINGMARK }, { 0x116AE, GBP_EXTEND }, { 0x116B0, GBP_SPACINGMARK }, { 0x116B6, GBP_EXTEND }, { 0x116B7, GBP_SPACINGMARK }, { 0x116B8, GBP_EXTEND }, { 0x1171D, GBP_OTHER }, { 0x11720, GBP_EXTEND }, { 0x11722, GBP_SPACINGMARK }, { 0x11726, GBP_EXTEND }, { 0x11727, GBP_SPACINGMARK }, { 0x1172C, GBP_EXTEND }, { 0x11C2F, GBP_OTHER }, { 0x11C30, GBP_SPACINGMARK }, { 0x11C37, GBP_EXTEND }, { 0x11C38, GBP_OTHER }, { 0x11C3E, GBP_EXTEND }, { 0x11C3F, GBP_SPACINGMARK }, { 0x11C40, GBP_EXTEND }, { 0x11C92, GBP_OTHER }, { 0x11CA8, GBP_EXTEND }, { 0x11CA9, GBP_OTHER }, { 0x11CAA, GBP_SPACINGMARK }, { 0x11CB1, GBP_EXTEND }, { 0x11CB2, GBP_SPACINGMARK }, { 0x11CB4, GBP_EXTEND }, { 0x11CB5, GBP_SPACINGMARK }, { 0x11CB7, GBP_EXTEND }, { 0x16AF0, GBP_OTHER }, { 0x16AF5, GBP_EXTEND }, { 0x16B30, GBP_OTHER }, { 0x16B37, GBP_EXTEND }, { 0x16F51, GBP_OTHER }, { 0x16F7F, GBP_SPACINGMARK }, { 0x16F8F, GBP_OTHER }, { 0x16F93, GBP_EXTEND }, { 0x1BC9D, GBP_OTHER }, { 0x1BC9F, GBP_EXTEND }, { 0x1BCA0, GBP_OTHER }, { 0x1BCA4, GBP_CONTROL }, { 0x1D165, GBP_OTHER }, { 0x1D166, GBP_EXTEND }, { 0x1D167, GBP_SPACINGMARK }, { 0x1D16A, GBP_EXTEND }, { 0x1D16D, GBP_OTHER }, { 0x1D16E, GBP_SPACINGMARK }, { 0x1D173, GBP_EXTEND }, { 0x1D17B, GBP_CONTROL }, { 0x1D183, GBP_EXTEND }, { 0x1D185, GBP_OTHER }, { 0x1D18C, GBP_EXTEND }, { 0x1D1AA, GBP_OTHER }, { 0x1D1AE, GBP_EXTEND }, { 0x1D242, GBP_OTHER }, { 0x1D245, GBP_EXTEND }, { 0x1DA00, GBP_OTHER }, { 0x1DA37, GBP_EXTEND }, { 0x1DA3B, GBP_OTHER }, { 0x1DA6D, GBP_EXTEND }, { 0x1DA75, GBP_OTHER }, { 0x1DA76, GBP_EXTEND }, { 0x1DA84, GBP_OTHER }, { 0x1DA85, GBP_EXTEND }, { 0x1DA9B, GBP_OTHER }, { 0x1DAA0, GBP_EXTEND }, { 0x1DAA1, GBP_OTHER }, { 0x1DAB0, GBP_EXTEND }, { 0x1E000, GBP_OTHER }, { 0x1E007, GBP_EXTEND }, { 0x1E008, GBP_OTHER }, { 0x1E019, GBP_EXTEND }, { 0x1E01B, GBP_OTHER }, { 0x1E022, GBP_EXTEND }, { 0x1E023, GBP_OTHER }, { 0x1E025, GBP_EXTEND }, { 0x1E026, GBP_OTHER }, { 0x1E02B, GBP_EXTEND }, { 0x1E8D0, GBP_OTHER }, { 0x1E8D7, GBP_EXTEND }, { 0x1E944, GBP_OTHER }, { 0x1E94B, GBP_EXTEND }, { 0x1F1E6, GBP_OTHER }, { 0x1F200, GBP_RI }, { 0x1F385, GBP_OTHER }, { 0x1F386, GBP_EB }, { 0x1F3C3, GBP_OTHER }, { 0x1F3C5, GBP_EB }, { 0x1F3CA, GBP_OTHER }, { 0x1F3CC, GBP_EB }, { 0x1F3FB, GBP_OTHER }, { 0x1F400, GBP_EM }, { 0x1F442, GBP_OTHER }, { 0x1F444, GBP_EB }, { 0x1F446, GBP_OTHER }, { 0x1F451, GBP_EB }, { 0x1F466, GBP_OTHER }, { 0x1F46A, GBP_EBG }, { 0x1F46E, GBP_OTHER }, { 0x1F46F, GBP_EB }, { 0x1F470, GBP_OTHER }, { 0x1F479, GBP_EB }, { 0x1F47C, GBP_OTHER }, { 0x1F47D, GBP_EB }, { 0x1F481, GBP_OTHER }, { 0x1F484, GBP_EB }, { 0x1F485, GBP_OTHER }, { 0x1F488, GBP_EB }, { 0x1F48B, GBP_OTHER }, { 0x1F48C, GBP_GAZ }, { 0x1F4AA, GBP_OTHER }, { 0x1F4AB, GBP_EB }, { 0x1F575, GBP_OTHER }, { 0x1F576, GBP_EB }, { 0x1F57A, GBP_OTHER }, { 0x1F57B, GBP_EB }, { 0x1F590, GBP_OTHER }, { 0x1F591, GBP_EB }, { 0x1F595, GBP_OTHER }, { 0x1F597, GBP_EB }, { 0x1F5E8, GBP_OTHER }, { 0x1F5E9, GBP_GAZ }, { 0x1F645, GBP_OTHER }, { 0x1F648, GBP_EB }, { 0x1F64B, GBP_OTHER }, { 0x1F650, GBP_EB }, { 0x1F6A3, GBP_OTHER }, { 0x1F6A4, GBP_EB }, { 0x1F6B4, GBP_OTHER }, { 0x1F6B7, GBP_EB }, { 0x1F6C0, GBP_OTHER }, { 0x1F6C1, GBP_EB }, { 0x1F918, GBP_OTHER }, { 0x1F91F, GBP_EB }, { 0x1F926, GBP_OTHER }, { 0x1F927, GBP_EB }, { 0x1F930, GBP_OTHER }, { 0x1F931, GBP_EB }, { 0x1F933, GBP_OTHER }, { 0x1F93A, GBP_EB }, { 0x1F93C, GBP_OTHER }, { 0x1F93F, GBP_EB }, { 0xE0000, GBP_OTHER }, { 0xE0020, GBP_CONTROL }, { 0xE0080, GBP_EXTEND }, { 0xE0100, GBP_CONTROL }, { 0xE01F0, GBP_EXTEND }, { 0xE1000, GBP_CONTROL }, { 0x110000, GBP_OTHER } �������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-grapheme-breaks.c�������������������������������������0000664�0000000�0000000�00000010701�14110572173�0023664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" static const char * graphemebreakproperty_to_string (int gbp) { printf ("%d\n", gbp); switch (gbp) { #define CASE(VALUE) case GBP_##VALUE: return #VALUE; CASE(OTHER) CASE(CR) CASE(LF) CASE(CONTROL) CASE(EXTEND) CASE(PREPEND) CASE(SPACINGMARK) CASE(L) CASE(V) CASE(T) CASE(LV) CASE(LVT) CASE(RI) CASE(ZWJ) CASE(EB) CASE(EM) CASE(GAZ) CASE(EBG) } abort (); } static void test_uc_grapheme_breaks (const char *expected, ucs4_t *s, size_t n, const char *filename, int lineno) { char breaks[16]; size_t i; ASSERT (n <= 16); uc_grapheme_breaks (s, n, breaks); for (i = 0; i < n; i++) if (breaks[i] != (expected[i] == '#')) { size_t j; fprintf (stderr, "wrong grapheme breaks:\n"); fprintf (stderr, " input:"); for (j = 0; j < n; j++) fprintf (stderr, " %02x", s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", expected[j] == '#'); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < n; j++) fprintf (stderr, " %d", breaks[j]); putc ('\n', stderr); abort (); } } int main (int argc, char *argv[]) { const char *filename; char line[1024]; int exit_code; FILE *stream; int lineno; if (argc != 2) { fprintf (stderr, "usage: %s FILENAME\n" "where FILENAME is the location of the GraphemeBreakTest.txt\n" "test file.\n", argv[0]); exit (1); } filename = argv[1]; stream = fopen (filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", filename); exit (1); } exit_code = 0; lineno = 0; while (fgets (line, sizeof line, stream)) { char *comment; const char *p; ucs4_t s[16]; char breaks[16]; size_t i = 0; lineno++; comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; s[0] = 0; p = line; do { p += strspn (p, " \t\r\n"); if (!strncmp (p, "\303\267" /* ÷ */, 2)) { breaks[i] = '#'; p += 2; } else if (!strncmp (p, "\303\227" /* × */, 2)) { breaks[i] = '_'; p += 2; } else { fprintf (stderr, "%s:%d.%d: syntax error expecting '÷' or '×'\n", filename, lineno, (int) (p - line + 1)); exit (1); } p += strspn (p, " \t\r\n"); if (*p == '\0') s[i] = 0; else { unsigned int next_int; int n; if (sscanf (p, "%x%n", &next_int, &n) != 1) { fprintf (stderr, "%s:%d.%d: syntax error at '%s' " "expecting hexadecimal Unicode code point number\n", filename, lineno, (int) (p - line + 1), p); exit (1); } p += n; s[i] = next_int; } p += strspn (p, " \t\r\n"); i++; } while (*p != '\0'); if (i > 0) test_uc_grapheme_breaks (breaks, s, i, filename, lineno); } return exit_code; } ���������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-grapheme-breaks.sh������������������������������������0000775�0000000�0000000�00000000143�14110572173�0024056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-uc-grapheme-breaks${EXEEXT} "${srcdir}/unigbrk/GraphemeBreakTest.txt" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-is-grapheme-break.c�����������������������������������0000664�0000000�0000000�00000013456�14110572173�0024124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function test. Copyright (C) 2010-2021 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 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/>. */ /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <unigbrk.h> #include <stdio.h> #include <stdlib.h> #include <string.h> const char * graphemebreakproperty_to_string (int gbp) { printf ("%d\n", gbp); switch (gbp) { #define CASE(VALUE) case GBP_##VALUE: return #VALUE; CASE(OTHER) CASE(CR) CASE(LF) CASE(CONTROL) CASE(EXTEND) CASE(PREPEND) CASE(SPACINGMARK) CASE(L) CASE(V) CASE(T) CASE(LV) CASE(LVT) CASE(RI) CASE(ZWJ) CASE(EB) CASE(EM) CASE(GAZ) CASE(EBG) } abort (); } int main (int argc, char *argv[]) { const char *filename; char line[1024]; int exit_code; FILE *stream; int lineno; if (argc != 2) { fprintf (stderr, "usage: %s FILENAME\n" "where FILENAME is the location of the GraphemeBreakTest.txt\n" "test file.\n", argv[0]); exit (1); } filename = argv[1]; stream = fopen (filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", filename); exit (1); } exit_code = 0; lineno = 0; while (fgets (line, sizeof line, stream)) { char *comment; const char *p; ucs4_t prev; int last_compchar_prop; size_t ri_count; lineno++; comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; last_compchar_prop = -1; ri_count = 0; prev = 0; p = line; do { bool should_break; ucs4_t next; p += strspn (p, " \t\r\n"); if (!strncmp (p, "\303\267" /* ÷ */, 2)) { should_break = true; p += 2; } else if (!strncmp (p, "\303\227" /* × */, 2)) { should_break = false; p += 2; } else { fprintf (stderr, "%s:%d.%d: syntax error expecting '÷' or '×'\n", filename, lineno, (int) (p - line + 1)); exit (1); } p += strspn (p, " \t\r\n"); if (*p == '\0') next = 0; else { unsigned int next_int; int n; if (sscanf (p, "%x%n", &next_int, &n) != 1) { fprintf (stderr, "%s:%d.%d: syntax error at '%s' " "expecting hexadecimal Unicode code point number\n", filename, lineno, (int) (p - line + 1), p); exit (1); } p += n; next = next_int; } if ((last_compchar_prop == GBP_EB || last_compchar_prop == GBP_EBG) && uc_graphemeclusterbreak_property (next) == GBP_EM) { int prev_gbp = uc_graphemeclusterbreak_property (prev); int next_gbp = uc_graphemeclusterbreak_property (next); fprintf (stderr, "%s:%d: skipping GB10: should join U+%04X (%s) " "and U+%04X (%s)\n", filename, lineno, prev, graphemebreakproperty_to_string (prev_gbp), next, graphemebreakproperty_to_string (next_gbp)); } else if (uc_graphemeclusterbreak_property (next) == GBP_RI && ri_count % 2 != 0) { int prev_gbp = uc_graphemeclusterbreak_property (prev); int next_gbp = uc_graphemeclusterbreak_property (next); fprintf (stderr, "%s:%d: skipping GB12: should join U+%04X (%s) " "and U+%04X (%s)\n", filename, lineno, prev, graphemebreakproperty_to_string (prev_gbp), next, graphemebreakproperty_to_string (next_gbp)); } else if (uc_is_grapheme_break (prev, next) != should_break) { int prev_gbp = uc_graphemeclusterbreak_property (prev); int next_gbp = uc_graphemeclusterbreak_property (next); fprintf (stderr, "%s:%d: should %s U+%04X (%s) and " "U+%04X (%s)\n", filename, lineno, should_break ? "break" : "join", prev, graphemebreakproperty_to_string (prev_gbp), next, graphemebreakproperty_to_string (next_gbp)); exit_code = 1; } p += strspn (p, " \t\r\n"); prev = next; if (!(uc_graphemeclusterbreak_property (next) == GBP_EXTEND && (last_compchar_prop == GBP_EB || last_compchar_prop == GBP_EBG))) last_compchar_prop = uc_graphemeclusterbreak_property (next); if (uc_graphemeclusterbreak_property (next) == GBP_RI) ri_count++; else ri_count = 0; } while (*p != '\0'); } return exit_code; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-uc-is-grapheme-break.sh����������������������������������0000775�0000000�0000000�00000000145�14110572173�0024306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-uc-is-grapheme-break${EXEEXT} "${srcdir}/unigbrk/GraphemeBreakTest.txt" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-ulc-grapheme-breaks.c������������������������������������0000664�0000000�0000000�00000004627�14110572173�0024052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 Ben Pfaff <blp@cs.stanford.edu>, 2010, based on code by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include "unigbrk.h" #include <locale.h> #include <stdlib.h> #include "macros.h" static bool is_8859_6_break (unsigned char c) { /* ISO-8859-6 has combining characters in positions 0xeb through 0xf2. */ return !(c >= 0xeb && c <= 0xf2); } int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test case n = 0. */ ulc_grapheme_breaks (NULL, 0, NULL); #if HAVE_ICONV { /* This is just a random collection of bytes from ISO-8859-6. (We use ISO-8859-6 because it is one of very few non-UTF-8 locale encodings supported by glibc that have combining characters.) */ static const char s[] = "ZYX\352\353W\360\361V\362"; enum { LENGTH = sizeof s - 1 }; char p[LENGTH]; size_t i; ulc_grapheme_breaks (s, LENGTH, p); for (i = 0; i < LENGTH; i++) if (p[i] != is_8859_6_break (s[i])) { size_t j; fprintf (stderr, "wrong grapheme breaks:\n"); fprintf (stderr, " input:"); for (j = 0; j < LENGTH; j++) fprintf (stderr, " %02x", (unsigned char) s[j]); putc ('\n', stderr); fprintf (stderr, "expected:"); for (j = 0; j < LENGTH; j++) fprintf (stderr, " %d", is_8859_6_break (s[j])); putc ('\n', stderr); fprintf (stderr, " actual:"); for (j = 0; j < LENGTH; j++) fprintf (stderr, " %d", p[j]); putc ('\n', stderr); abort (); } } #endif return 0; } ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unigbrk/test-ulc-grapheme-breaks.sh�����������������������������������0000775�0000000�0000000�00000000553�14110572173�0024237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in an ISO-8895-6 locale. : ${LOCALE_AR=ar_SA} if test $LOCALE_AR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional Arabic locale is installed" else echo "Skipping test: no traditional Arabic locale is supported" fi exit 77 fi LC_ALL=$LOCALE_AR \ ${CHECKER} ./test-ulc-grapheme-breaks${EXEEXT} �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017107�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u16-possible-linebreaks.c��������������������������������0000664�0000000�0000000�00000006447�14110572173�0024611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-16 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u16_possible_linebreaks (NULL, 0, "GB18030", NULL); { static const uint16_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_possible_linebreaks (input, SIZEOF (input), "GB18030", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 5 || i == 11 || i == 25 || i == 29 || i == 30 || i == 45 || i == 51 || i == 52 || i == 53 || i == 55 || i == 56 || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_possible_linebreaks (input, SIZEOF (input), "GB2312", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 5 || i == 11 || i == 25 || i == 29 || i == 30 || i == 37 || i == 45 || i == 51 || i == 52 || i == 53 || i == 55 || i == 56 || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } /* Test that a break is possible after a zero-width space followed by some regular spaces (rule LB8 in Unicode TR#14 revision 26). */ { static const uint16_t input[4] = { 'x', 0x200B, ' ', 'y' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_possible_linebreaks (input, SIZEOF (input), "UTF-8", p); for (i = 0; i < 4; i++) { ASSERT (p[i] == (i == 3 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u16-width-linebreaks.c�����������������������������������0000664�0000000�0000000�00000004562�14110572173�0024104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-16 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u16_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); { static const uint16_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 25 || i == 45 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 11 || i == 25 || i == 45 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u32-possible-linebreaks.c��������������������������������0000664�0000000�0000000�00000006447�14110572173�0024607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-32 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u32_possible_linebreaks (NULL, 0, "GB18030", NULL); { static const uint32_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_possible_linebreaks (input, SIZEOF (input), "GB18030", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 5 || i == 11 || i == 25 || i == 29 || i == 30 || i == 45 || i == 51 || i == 52 || i == 53 || i == 55 || i == 56 || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_possible_linebreaks (input, SIZEOF (input), "GB2312", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 5 || i == 11 || i == 25 || i == 29 || i == 30 || i == 37 || i == 45 || i == 51 || i == 52 || i == 53 || i == 55 || i == 56 || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } /* Test that a break is possible after a zero-width space followed by some regular spaces (rule LB8 in Unicode TR#14 revision 26). */ { static const uint32_t input[4] = { 'x', 0x200B, ' ', 'y' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_possible_linebreaks (input, SIZEOF (input), "UTF-8", p); for (i = 0; i < 4; i++) { ASSERT (p[i] == (i == 3 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u32-width-linebreaks.c�����������������������������������0000664�0000000�0000000�00000004562�14110572173�0024102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-32 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u32_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); { static const uint32_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 25 || i == 45 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); for (i = 0; i < 61; i++) { ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : i == 11 || i == 25 || i == 45 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u8-possible-linebreaks.c���������������������������������0000664�0000000�0000000�00000006156�14110572173�0024527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-8 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u8_possible_linebreaks (NULL, 0, "GB18030", NULL); { static const uint8_t input[91] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_possible_linebreaks (input, SIZEOF (input), "GB18030", p); for (i = 0; i < 91; i++) { ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : i == 7 || i == 13 || i == 39 || i == 43 || i == 44 || i == 61 || i == 67 || i == 70 || i == 73 || i == 77 || i == 80 || i == 84 || i == 87 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_possible_linebreaks (input, SIZEOF (input), "GB2312", p); for (i = 0; i < 91; i++) { ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : i == 7 || i == 13 || i == 39 || i == 43 || i == 44 || i == 52 || i == 61 || i == 67 || i == 70 || i == 73 || i == 77 || i == 80 || i == 84 || i == 87 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } /* Test that a break is possible after a zero-width space followed by some regular spaces (rule LB8 in Unicode TR#14 revision 26). */ { static const uint8_t input[6] = "x\342\200\213 y"; char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_possible_linebreaks (input, SIZEOF (input), "UTF-8", p); for (i = 0; i < 4; i++) { ASSERT (p[i] == (i == 5 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-u8-width-linebreaks.c������������������������������������0000664�0000000�0000000�00000004303�14110572173�0024016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-8 strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u8_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); { static const uint8_t input[91] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; { char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); for (i = 0; i < 91; i++) { ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : i == 39 || i == 61 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } { char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); for (i = 0; i < 91; i++) { ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : i == 13 || i == 39 || i == 61 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-ulc-possible-linebreaks.c��������������������������������0000664�0000000�0000000�00000003070�14110572173�0024746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ ulc_possible_linebreaks (NULL, 0, "GB18030", NULL); #if HAVE_ICONV { static const char input[36] = /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; char *p = (char *) malloc (SIZEOF (input)); size_t i; ulc_possible_linebreaks (input, SIZEOF (input), "ISO-8859-1", p); for (i = 0; i < 36; i++) { ASSERT (p[i] == (i == 35 ? UC_BREAK_MANDATORY : i == 5 || i == 11 || i == 15 || i == 16 || i == 31 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unilbrk/test-ulc-width-linebreaks.c�����������������������������������0000664�0000000�0000000�00000003044�14110572173�0024246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of strings. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 "unilbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ ulc_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); #if HAVE_ICONV { static const char input[36] = /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; char *p = (char *) malloc (SIZEOF (input)); size_t i; ulc_width_linebreaks (input, SIZEOF (input), 12, 0, 0, NULL, "ISO-8859-1", p); for (i = 0; i < 36; i++) { ASSERT (p[i] == (i == 35 ? UC_BREAK_MANDATORY : i == 11 || i == 16 || i == 31 ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED)); } free (p); } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniname/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017075�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniname/HangulSyllableNames.txt���������������������������������������0000664�0000000�0000000�00001715761�14110572173�0023552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Auxiliary tables for Hangul syllable names, see the Unicode 3.0 book, # sections 3.11 and 4.4. AC00;HANGUL SYLLABLE GA;Lo;0;L;;;;;N;;;;; AC01;HANGUL SYLLABLE GAG;Lo;0;L;;;;;N;;;;; AC02;HANGUL SYLLABLE GAGG;Lo;0;L;;;;;N;;;;; AC03;HANGUL SYLLABLE GAGS;Lo;0;L;;;;;N;;;;; AC04;HANGUL SYLLABLE GAN;Lo;0;L;;;;;N;;;;; AC05;HANGUL SYLLABLE GANI;Lo;0;L;;;;;N;;;;; AC06;HANGUL SYLLABLE GANH;Lo;0;L;;;;;N;;;;; AC07;HANGUL SYLLABLE GAD;Lo;0;L;;;;;N;;;;; AC08;HANGUL SYLLABLE GAL;Lo;0;L;;;;;N;;;;; AC09;HANGUL SYLLABLE GALG;Lo;0;L;;;;;N;;;;; AC0A;HANGUL SYLLABLE GALM;Lo;0;L;;;;;N;;;;; AC0B;HANGUL SYLLABLE GALB;Lo;0;L;;;;;N;;;;; AC0C;HANGUL SYLLABLE GALS;Lo;0;L;;;;;N;;;;; AC0D;HANGUL SYLLABLE GALT;Lo;0;L;;;;;N;;;;; AC0E;HANGUL SYLLABLE GALP;Lo;0;L;;;;;N;;;;; AC0F;HANGUL SYLLABLE GALH;Lo;0;L;;;;;N;;;;; AC10;HANGUL SYLLABLE GAM;Lo;0;L;;;;;N;;;;; AC11;HANGUL SYLLABLE GAB;Lo;0;L;;;;;N;;;;; AC12;HANGUL SYLLABLE GABS;Lo;0;L;;;;;N;;;;; AC13;HANGUL SYLLABLE GAS;Lo;0;L;;;;;N;;;;; AC14;HANGUL SYLLABLE GASS;Lo;0;L;;;;;N;;;;; AC15;HANGUL SYLLABLE GANG;Lo;0;L;;;;;N;;;;; AC16;HANGUL SYLLABLE GAJ;Lo;0;L;;;;;N;;;;; AC17;HANGUL SYLLABLE GAC;Lo;0;L;;;;;N;;;;; AC18;HANGUL SYLLABLE GAK;Lo;0;L;;;;;N;;;;; AC19;HANGUL SYLLABLE GAT;Lo;0;L;;;;;N;;;;; AC1A;HANGUL SYLLABLE GAP;Lo;0;L;;;;;N;;;;; AC1B;HANGUL SYLLABLE GAH;Lo;0;L;;;;;N;;;;; AC1C;HANGUL SYLLABLE GAE;Lo;0;L;;;;;N;;;;; AC1D;HANGUL SYLLABLE GAEG;Lo;0;L;;;;;N;;;;; AC1E;HANGUL SYLLABLE GAEGG;Lo;0;L;;;;;N;;;;; AC1F;HANGUL SYLLABLE GAEGS;Lo;0;L;;;;;N;;;;; AC20;HANGUL SYLLABLE GAEN;Lo;0;L;;;;;N;;;;; AC21;HANGUL SYLLABLE GAENI;Lo;0;L;;;;;N;;;;; AC22;HANGUL SYLLABLE GAENH;Lo;0;L;;;;;N;;;;; AC23;HANGUL SYLLABLE GAED;Lo;0;L;;;;;N;;;;; AC24;HANGUL SYLLABLE GAEL;Lo;0;L;;;;;N;;;;; AC25;HANGUL SYLLABLE GAELG;Lo;0;L;;;;;N;;;;; AC26;HANGUL SYLLABLE GAELM;Lo;0;L;;;;;N;;;;; AC27;HANGUL SYLLABLE GAELB;Lo;0;L;;;;;N;;;;; AC28;HANGUL SYLLABLE GAELS;Lo;0;L;;;;;N;;;;; AC29;HANGUL SYLLABLE GAELT;Lo;0;L;;;;;N;;;;; AC2A;HANGUL SYLLABLE GAELP;Lo;0;L;;;;;N;;;;; AC2B;HANGUL SYLLABLE GAELH;Lo;0;L;;;;;N;;;;; AC2C;HANGUL SYLLABLE GAEM;Lo;0;L;;;;;N;;;;; AC2D;HANGUL SYLLABLE GAEB;Lo;0;L;;;;;N;;;;; AC2E;HANGUL SYLLABLE GAEBS;Lo;0;L;;;;;N;;;;; AC2F;HANGUL SYLLABLE GAES;Lo;0;L;;;;;N;;;;; AC30;HANGUL SYLLABLE GAESS;Lo;0;L;;;;;N;;;;; AC31;HANGUL SYLLABLE GAENG;Lo;0;L;;;;;N;;;;; AC32;HANGUL SYLLABLE GAEJ;Lo;0;L;;;;;N;;;;; AC33;HANGUL SYLLABLE GAEC;Lo;0;L;;;;;N;;;;; AC34;HANGUL SYLLABLE GAEK;Lo;0;L;;;;;N;;;;; AC35;HANGUL SYLLABLE GAET;Lo;0;L;;;;;N;;;;; AC36;HANGUL SYLLABLE GAEP;Lo;0;L;;;;;N;;;;; AC37;HANGUL SYLLABLE GAEH;Lo;0;L;;;;;N;;;;; AC38;HANGUL SYLLABLE GYA;Lo;0;L;;;;;N;;;;; AC39;HANGUL SYLLABLE GYAG;Lo;0;L;;;;;N;;;;; AC3A;HANGUL SYLLABLE GYAGG;Lo;0;L;;;;;N;;;;; AC3B;HANGUL SYLLABLE GYAGS;Lo;0;L;;;;;N;;;;; AC3C;HANGUL SYLLABLE GYAN;Lo;0;L;;;;;N;;;;; AC3D;HANGUL SYLLABLE GYANI;Lo;0;L;;;;;N;;;;; AC3E;HANGUL SYLLABLE GYANH;Lo;0;L;;;;;N;;;;; AC3F;HANGUL SYLLABLE GYAD;Lo;0;L;;;;;N;;;;; AC40;HANGUL SYLLABLE GYAL;Lo;0;L;;;;;N;;;;; AC41;HANGUL SYLLABLE GYALG;Lo;0;L;;;;;N;;;;; AC42;HANGUL SYLLABLE GYALM;Lo;0;L;;;;;N;;;;; AC43;HANGUL SYLLABLE GYALB;Lo;0;L;;;;;N;;;;; AC44;HANGUL SYLLABLE GYALS;Lo;0;L;;;;;N;;;;; AC45;HANGUL SYLLABLE GYALT;Lo;0;L;;;;;N;;;;; AC46;HANGUL SYLLABLE GYALP;Lo;0;L;;;;;N;;;;; AC47;HANGUL SYLLABLE GYALH;Lo;0;L;;;;;N;;;;; AC48;HANGUL SYLLABLE GYAM;Lo;0;L;;;;;N;;;;; AC49;HANGUL SYLLABLE GYAB;Lo;0;L;;;;;N;;;;; AC4A;HANGUL SYLLABLE GYABS;Lo;0;L;;;;;N;;;;; AC4B;HANGUL SYLLABLE GYAS;Lo;0;L;;;;;N;;;;; AC4C;HANGUL SYLLABLE GYASS;Lo;0;L;;;;;N;;;;; AC4D;HANGUL SYLLABLE GYANG;Lo;0;L;;;;;N;;;;; AC4E;HANGUL SYLLABLE GYAJ;Lo;0;L;;;;;N;;;;; AC4F;HANGUL SYLLABLE GYAC;Lo;0;L;;;;;N;;;;; AC50;HANGUL SYLLABLE GYAK;Lo;0;L;;;;;N;;;;; AC51;HANGUL SYLLABLE GYAT;Lo;0;L;;;;;N;;;;; AC52;HANGUL SYLLABLE GYAP;Lo;0;L;;;;;N;;;;; AC53;HANGUL SYLLABLE GYAH;Lo;0;L;;;;;N;;;;; AC54;HANGUL SYLLABLE GYAE;Lo;0;L;;;;;N;;;;; AC55;HANGUL SYLLABLE GYAEG;Lo;0;L;;;;;N;;;;; AC56;HANGUL SYLLABLE GYAEGG;Lo;0;L;;;;;N;;;;; AC57;HANGUL SYLLABLE GYAEGS;Lo;0;L;;;;;N;;;;; AC58;HANGUL SYLLABLE GYAEN;Lo;0;L;;;;;N;;;;; AC59;HANGUL SYLLABLE GYAENI;Lo;0;L;;;;;N;;;;; AC5A;HANGUL SYLLABLE GYAENH;Lo;0;L;;;;;N;;;;; AC5B;HANGUL SYLLABLE GYAED;Lo;0;L;;;;;N;;;;; AC5C;HANGUL SYLLABLE GYAEL;Lo;0;L;;;;;N;;;;; AC5D;HANGUL SYLLABLE GYAELG;Lo;0;L;;;;;N;;;;; AC5E;HANGUL SYLLABLE GYAELM;Lo;0;L;;;;;N;;;;; AC5F;HANGUL SYLLABLE GYAELB;Lo;0;L;;;;;N;;;;; AC60;HANGUL SYLLABLE GYAELS;Lo;0;L;;;;;N;;;;; AC61;HANGUL SYLLABLE GYAELT;Lo;0;L;;;;;N;;;;; AC62;HANGUL SYLLABLE GYAELP;Lo;0;L;;;;;N;;;;; AC63;HANGUL SYLLABLE GYAELH;Lo;0;L;;;;;N;;;;; AC64;HANGUL SYLLABLE GYAEM;Lo;0;L;;;;;N;;;;; AC65;HANGUL SYLLABLE GYAEB;Lo;0;L;;;;;N;;;;; AC66;HANGUL SYLLABLE GYAEBS;Lo;0;L;;;;;N;;;;; AC67;HANGUL SYLLABLE GYAES;Lo;0;L;;;;;N;;;;; AC68;HANGUL SYLLABLE GYAESS;Lo;0;L;;;;;N;;;;; AC69;HANGUL SYLLABLE GYAENG;Lo;0;L;;;;;N;;;;; AC6A;HANGUL SYLLABLE GYAEJ;Lo;0;L;;;;;N;;;;; AC6B;HANGUL SYLLABLE GYAEC;Lo;0;L;;;;;N;;;;; AC6C;HANGUL SYLLABLE GYAEK;Lo;0;L;;;;;N;;;;; AC6D;HANGUL SYLLABLE GYAET;Lo;0;L;;;;;N;;;;; AC6E;HANGUL SYLLABLE GYAEP;Lo;0;L;;;;;N;;;;; AC6F;HANGUL SYLLABLE GYAEH;Lo;0;L;;;;;N;;;;; AC70;HANGUL SYLLABLE GEO;Lo;0;L;;;;;N;;;;; AC71;HANGUL SYLLABLE GEOG;Lo;0;L;;;;;N;;;;; AC72;HANGUL SYLLABLE GEOGG;Lo;0;L;;;;;N;;;;; AC73;HANGUL SYLLABLE GEOGS;Lo;0;L;;;;;N;;;;; AC74;HANGUL SYLLABLE GEON;Lo;0;L;;;;;N;;;;; AC75;HANGUL SYLLABLE GEONI;Lo;0;L;;;;;N;;;;; AC76;HANGUL SYLLABLE GEONH;Lo;0;L;;;;;N;;;;; AC77;HANGUL SYLLABLE GEOD;Lo;0;L;;;;;N;;;;; AC78;HANGUL SYLLABLE GEOL;Lo;0;L;;;;;N;;;;; AC79;HANGUL SYLLABLE GEOLG;Lo;0;L;;;;;N;;;;; AC7A;HANGUL SYLLABLE GEOLM;Lo;0;L;;;;;N;;;;; AC7B;HANGUL SYLLABLE GEOLB;Lo;0;L;;;;;N;;;;; AC7C;HANGUL SYLLABLE GEOLS;Lo;0;L;;;;;N;;;;; AC7D;HANGUL SYLLABLE GEOLT;Lo;0;L;;;;;N;;;;; AC7E;HANGUL SYLLABLE GEOLP;Lo;0;L;;;;;N;;;;; AC7F;HANGUL SYLLABLE GEOLH;Lo;0;L;;;;;N;;;;; AC80;HANGUL SYLLABLE GEOM;Lo;0;L;;;;;N;;;;; AC81;HANGUL SYLLABLE GEOB;Lo;0;L;;;;;N;;;;; AC82;HANGUL SYLLABLE GEOBS;Lo;0;L;;;;;N;;;;; AC83;HANGUL SYLLABLE GEOS;Lo;0;L;;;;;N;;;;; AC84;HANGUL SYLLABLE GEOSS;Lo;0;L;;;;;N;;;;; AC85;HANGUL SYLLABLE GEONG;Lo;0;L;;;;;N;;;;; AC86;HANGUL SYLLABLE GEOJ;Lo;0;L;;;;;N;;;;; AC87;HANGUL SYLLABLE GEOC;Lo;0;L;;;;;N;;;;; AC88;HANGUL SYLLABLE GEOK;Lo;0;L;;;;;N;;;;; AC89;HANGUL SYLLABLE GEOT;Lo;0;L;;;;;N;;;;; AC8A;HANGUL SYLLABLE GEOP;Lo;0;L;;;;;N;;;;; AC8B;HANGUL SYLLABLE GEOH;Lo;0;L;;;;;N;;;;; AC8C;HANGUL SYLLABLE GE;Lo;0;L;;;;;N;;;;; AC8D;HANGUL SYLLABLE GEG;Lo;0;L;;;;;N;;;;; AC8E;HANGUL SYLLABLE GEGG;Lo;0;L;;;;;N;;;;; AC8F;HANGUL SYLLABLE GEGS;Lo;0;L;;;;;N;;;;; AC90;HANGUL SYLLABLE GEN;Lo;0;L;;;;;N;;;;; AC91;HANGUL SYLLABLE GENI;Lo;0;L;;;;;N;;;;; AC92;HANGUL SYLLABLE GENH;Lo;0;L;;;;;N;;;;; AC93;HANGUL SYLLABLE GED;Lo;0;L;;;;;N;;;;; AC94;HANGUL SYLLABLE GEL;Lo;0;L;;;;;N;;;;; AC95;HANGUL SYLLABLE GELG;Lo;0;L;;;;;N;;;;; AC96;HANGUL SYLLABLE GELM;Lo;0;L;;;;;N;;;;; AC97;HANGUL SYLLABLE GELB;Lo;0;L;;;;;N;;;;; AC98;HANGUL SYLLABLE GELS;Lo;0;L;;;;;N;;;;; AC99;HANGUL SYLLABLE GELT;Lo;0;L;;;;;N;;;;; AC9A;HANGUL SYLLABLE GELP;Lo;0;L;;;;;N;;;;; AC9B;HANGUL SYLLABLE GELH;Lo;0;L;;;;;N;;;;; AC9C;HANGUL SYLLABLE GEM;Lo;0;L;;;;;N;;;;; AC9D;HANGUL SYLLABLE GEB;Lo;0;L;;;;;N;;;;; AC9E;HANGUL SYLLABLE GEBS;Lo;0;L;;;;;N;;;;; AC9F;HANGUL SYLLABLE GES;Lo;0;L;;;;;N;;;;; ACA0;HANGUL SYLLABLE GESS;Lo;0;L;;;;;N;;;;; ACA1;HANGUL SYLLABLE GENG;Lo;0;L;;;;;N;;;;; ACA2;HANGUL SYLLABLE GEJ;Lo;0;L;;;;;N;;;;; ACA3;HANGUL SYLLABLE GEC;Lo;0;L;;;;;N;;;;; ACA4;HANGUL SYLLABLE GEK;Lo;0;L;;;;;N;;;;; ACA5;HANGUL SYLLABLE GET;Lo;0;L;;;;;N;;;;; ACA6;HANGUL SYLLABLE GEP;Lo;0;L;;;;;N;;;;; ACA7;HANGUL SYLLABLE GEH;Lo;0;L;;;;;N;;;;; ACA8;HANGUL SYLLABLE GYEO;Lo;0;L;;;;;N;;;;; ACA9;HANGUL SYLLABLE GYEOG;Lo;0;L;;;;;N;;;;; ACAA;HANGUL SYLLABLE GYEOGG;Lo;0;L;;;;;N;;;;; ACAB;HANGUL SYLLABLE GYEOGS;Lo;0;L;;;;;N;;;;; ACAC;HANGUL SYLLABLE GYEON;Lo;0;L;;;;;N;;;;; ACAD;HANGUL SYLLABLE GYEONI;Lo;0;L;;;;;N;;;;; ACAE;HANGUL SYLLABLE GYEONH;Lo;0;L;;;;;N;;;;; ACAF;HANGUL SYLLABLE GYEOD;Lo;0;L;;;;;N;;;;; ACB0;HANGUL SYLLABLE GYEOL;Lo;0;L;;;;;N;;;;; ACB1;HANGUL SYLLABLE GYEOLG;Lo;0;L;;;;;N;;;;; ACB2;HANGUL SYLLABLE GYEOLM;Lo;0;L;;;;;N;;;;; ACB3;HANGUL SYLLABLE GYEOLB;Lo;0;L;;;;;N;;;;; ACB4;HANGUL SYLLABLE GYEOLS;Lo;0;L;;;;;N;;;;; ACB5;HANGUL SYLLABLE GYEOLT;Lo;0;L;;;;;N;;;;; ACB6;HANGUL SYLLABLE GYEOLP;Lo;0;L;;;;;N;;;;; ACB7;HANGUL SYLLABLE GYEOLH;Lo;0;L;;;;;N;;;;; ACB8;HANGUL SYLLABLE GYEOM;Lo;0;L;;;;;N;;;;; ACB9;HANGUL SYLLABLE GYEOB;Lo;0;L;;;;;N;;;;; ACBA;HANGUL SYLLABLE GYEOBS;Lo;0;L;;;;;N;;;;; ACBB;HANGUL SYLLABLE GYEOS;Lo;0;L;;;;;N;;;;; ACBC;HANGUL SYLLABLE GYEOSS;Lo;0;L;;;;;N;;;;; ACBD;HANGUL SYLLABLE GYEONG;Lo;0;L;;;;;N;;;;; ACBE;HANGUL SYLLABLE GYEOJ;Lo;0;L;;;;;N;;;;; ACBF;HANGUL SYLLABLE GYEOC;Lo;0;L;;;;;N;;;;; ACC0;HANGUL SYLLABLE GYEOK;Lo;0;L;;;;;N;;;;; ACC1;HANGUL SYLLABLE GYEOT;Lo;0;L;;;;;N;;;;; ACC2;HANGUL SYLLABLE GYEOP;Lo;0;L;;;;;N;;;;; ACC3;HANGUL SYLLABLE GYEOH;Lo;0;L;;;;;N;;;;; ACC4;HANGUL SYLLABLE GYE;Lo;0;L;;;;;N;;;;; ACC5;HANGUL SYLLABLE GYEG;Lo;0;L;;;;;N;;;;; ACC6;HANGUL SYLLABLE GYEGG;Lo;0;L;;;;;N;;;;; ACC7;HANGUL SYLLABLE GYEGS;Lo;0;L;;;;;N;;;;; ACC8;HANGUL SYLLABLE GYEN;Lo;0;L;;;;;N;;;;; ACC9;HANGUL SYLLABLE GYENI;Lo;0;L;;;;;N;;;;; ACCA;HANGUL SYLLABLE GYENH;Lo;0;L;;;;;N;;;;; ACCB;HANGUL SYLLABLE GYED;Lo;0;L;;;;;N;;;;; ACCC;HANGUL SYLLABLE GYEL;Lo;0;L;;;;;N;;;;; ACCD;HANGUL SYLLABLE GYELG;Lo;0;L;;;;;N;;;;; ACCE;HANGUL SYLLABLE GYELM;Lo;0;L;;;;;N;;;;; ACCF;HANGUL SYLLABLE GYELB;Lo;0;L;;;;;N;;;;; ACD0;HANGUL SYLLABLE GYELS;Lo;0;L;;;;;N;;;;; ACD1;HANGUL SYLLABLE GYELT;Lo;0;L;;;;;N;;;;; ACD2;HANGUL SYLLABLE GYELP;Lo;0;L;;;;;N;;;;; ACD3;HANGUL SYLLABLE GYELH;Lo;0;L;;;;;N;;;;; ACD4;HANGUL SYLLABLE GYEM;Lo;0;L;;;;;N;;;;; ACD5;HANGUL SYLLABLE GYEB;Lo;0;L;;;;;N;;;;; ACD6;HANGUL SYLLABLE GYEBS;Lo;0;L;;;;;N;;;;; ACD7;HANGUL SYLLABLE GYES;Lo;0;L;;;;;N;;;;; ACD8;HANGUL SYLLABLE GYESS;Lo;0;L;;;;;N;;;;; ACD9;HANGUL SYLLABLE GYENG;Lo;0;L;;;;;N;;;;; ACDA;HANGUL SYLLABLE GYEJ;Lo;0;L;;;;;N;;;;; ACDB;HANGUL SYLLABLE GYEC;Lo;0;L;;;;;N;;;;; ACDC;HANGUL SYLLABLE GYEK;Lo;0;L;;;;;N;;;;; ACDD;HANGUL SYLLABLE GYET;Lo;0;L;;;;;N;;;;; ACDE;HANGUL SYLLABLE GYEP;Lo;0;L;;;;;N;;;;; ACDF;HANGUL SYLLABLE GYEH;Lo;0;L;;;;;N;;;;; ACE0;HANGUL SYLLABLE GO;Lo;0;L;;;;;N;;;;; ACE1;HANGUL SYLLABLE GOG;Lo;0;L;;;;;N;;;;; ACE2;HANGUL SYLLABLE GOGG;Lo;0;L;;;;;N;;;;; ACE3;HANGUL SYLLABLE GOGS;Lo;0;L;;;;;N;;;;; ACE4;HANGUL SYLLABLE GON;Lo;0;L;;;;;N;;;;; ACE5;HANGUL SYLLABLE GONI;Lo;0;L;;;;;N;;;;; ACE6;HANGUL SYLLABLE GONH;Lo;0;L;;;;;N;;;;; ACE7;HANGUL SYLLABLE GOD;Lo;0;L;;;;;N;;;;; ACE8;HANGUL SYLLABLE GOL;Lo;0;L;;;;;N;;;;; ACE9;HANGUL SYLLABLE GOLG;Lo;0;L;;;;;N;;;;; ACEA;HANGUL SYLLABLE GOLM;Lo;0;L;;;;;N;;;;; ACEB;HANGUL SYLLABLE GOLB;Lo;0;L;;;;;N;;;;; ACEC;HANGUL SYLLABLE GOLS;Lo;0;L;;;;;N;;;;; ACED;HANGUL SYLLABLE GOLT;Lo;0;L;;;;;N;;;;; ACEE;HANGUL SYLLABLE GOLP;Lo;0;L;;;;;N;;;;; ACEF;HANGUL SYLLABLE GOLH;Lo;0;L;;;;;N;;;;; ACF0;HANGUL SYLLABLE GOM;Lo;0;L;;;;;N;;;;; ACF1;HANGUL SYLLABLE GOB;Lo;0;L;;;;;N;;;;; ACF2;HANGUL SYLLABLE GOBS;Lo;0;L;;;;;N;;;;; ACF3;HANGUL SYLLABLE GOS;Lo;0;L;;;;;N;;;;; ACF4;HANGUL SYLLABLE GOSS;Lo;0;L;;;;;N;;;;; ACF5;HANGUL SYLLABLE GONG;Lo;0;L;;;;;N;;;;; ACF6;HANGUL SYLLABLE GOJ;Lo;0;L;;;;;N;;;;; ACF7;HANGUL SYLLABLE GOC;Lo;0;L;;;;;N;;;;; ACF8;HANGUL SYLLABLE GOK;Lo;0;L;;;;;N;;;;; ACF9;HANGUL SYLLABLE GOT;Lo;0;L;;;;;N;;;;; ACFA;HANGUL SYLLABLE GOP;Lo;0;L;;;;;N;;;;; ACFB;HANGUL SYLLABLE GOH;Lo;0;L;;;;;N;;;;; ACFC;HANGUL SYLLABLE GWA;Lo;0;L;;;;;N;;;;; ACFD;HANGUL SYLLABLE GWAG;Lo;0;L;;;;;N;;;;; ACFE;HANGUL SYLLABLE GWAGG;Lo;0;L;;;;;N;;;;; ACFF;HANGUL SYLLABLE GWAGS;Lo;0;L;;;;;N;;;;; AD00;HANGUL SYLLABLE GWAN;Lo;0;L;;;;;N;;;;; AD01;HANGUL SYLLABLE GWANI;Lo;0;L;;;;;N;;;;; AD02;HANGUL SYLLABLE GWANH;Lo;0;L;;;;;N;;;;; AD03;HANGUL SYLLABLE GWAD;Lo;0;L;;;;;N;;;;; AD04;HANGUL SYLLABLE GWAL;Lo;0;L;;;;;N;;;;; AD05;HANGUL SYLLABLE GWALG;Lo;0;L;;;;;N;;;;; AD06;HANGUL SYLLABLE GWALM;Lo;0;L;;;;;N;;;;; AD07;HANGUL SYLLABLE GWALB;Lo;0;L;;;;;N;;;;; AD08;HANGUL SYLLABLE GWALS;Lo;0;L;;;;;N;;;;; AD09;HANGUL SYLLABLE GWALT;Lo;0;L;;;;;N;;;;; AD0A;HANGUL SYLLABLE GWALP;Lo;0;L;;;;;N;;;;; AD0B;HANGUL SYLLABLE GWALH;Lo;0;L;;;;;N;;;;; AD0C;HANGUL SYLLABLE GWAM;Lo;0;L;;;;;N;;;;; AD0D;HANGUL SYLLABLE GWAB;Lo;0;L;;;;;N;;;;; AD0E;HANGUL SYLLABLE GWABS;Lo;0;L;;;;;N;;;;; AD0F;HANGUL SYLLABLE GWAS;Lo;0;L;;;;;N;;;;; AD10;HANGUL SYLLABLE GWASS;Lo;0;L;;;;;N;;;;; AD11;HANGUL SYLLABLE GWANG;Lo;0;L;;;;;N;;;;; AD12;HANGUL SYLLABLE GWAJ;Lo;0;L;;;;;N;;;;; AD13;HANGUL SYLLABLE GWAC;Lo;0;L;;;;;N;;;;; AD14;HANGUL SYLLABLE GWAK;Lo;0;L;;;;;N;;;;; AD15;HANGUL SYLLABLE GWAT;Lo;0;L;;;;;N;;;;; AD16;HANGUL SYLLABLE GWAP;Lo;0;L;;;;;N;;;;; AD17;HANGUL SYLLABLE GWAH;Lo;0;L;;;;;N;;;;; AD18;HANGUL SYLLABLE GWAE;Lo;0;L;;;;;N;;;;; AD19;HANGUL SYLLABLE GWAEG;Lo;0;L;;;;;N;;;;; AD1A;HANGUL SYLLABLE GWAEGG;Lo;0;L;;;;;N;;;;; AD1B;HANGUL SYLLABLE GWAEGS;Lo;0;L;;;;;N;;;;; AD1C;HANGUL SYLLABLE GWAEN;Lo;0;L;;;;;N;;;;; AD1D;HANGUL SYLLABLE GWAENI;Lo;0;L;;;;;N;;;;; AD1E;HANGUL SYLLABLE GWAENH;Lo;0;L;;;;;N;;;;; AD1F;HANGUL SYLLABLE GWAED;Lo;0;L;;;;;N;;;;; AD20;HANGUL SYLLABLE GWAEL;Lo;0;L;;;;;N;;;;; AD21;HANGUL SYLLABLE GWAELG;Lo;0;L;;;;;N;;;;; AD22;HANGUL SYLLABLE GWAELM;Lo;0;L;;;;;N;;;;; AD23;HANGUL SYLLABLE GWAELB;Lo;0;L;;;;;N;;;;; AD24;HANGUL SYLLABLE GWAELS;Lo;0;L;;;;;N;;;;; AD25;HANGUL SYLLABLE GWAELT;Lo;0;L;;;;;N;;;;; AD26;HANGUL SYLLABLE GWAELP;Lo;0;L;;;;;N;;;;; AD27;HANGUL SYLLABLE GWAELH;Lo;0;L;;;;;N;;;;; AD28;HANGUL SYLLABLE GWAEM;Lo;0;L;;;;;N;;;;; AD29;HANGUL SYLLABLE GWAEB;Lo;0;L;;;;;N;;;;; AD2A;HANGUL SYLLABLE GWAEBS;Lo;0;L;;;;;N;;;;; AD2B;HANGUL SYLLABLE GWAES;Lo;0;L;;;;;N;;;;; AD2C;HANGUL SYLLABLE GWAESS;Lo;0;L;;;;;N;;;;; AD2D;HANGUL SYLLABLE GWAENG;Lo;0;L;;;;;N;;;;; AD2E;HANGUL SYLLABLE GWAEJ;Lo;0;L;;;;;N;;;;; AD2F;HANGUL SYLLABLE GWAEC;Lo;0;L;;;;;N;;;;; AD30;HANGUL SYLLABLE GWAEK;Lo;0;L;;;;;N;;;;; AD31;HANGUL SYLLABLE GWAET;Lo;0;L;;;;;N;;;;; AD32;HANGUL SYLLABLE GWAEP;Lo;0;L;;;;;N;;;;; AD33;HANGUL SYLLABLE GWAEH;Lo;0;L;;;;;N;;;;; AD34;HANGUL SYLLABLE GOE;Lo;0;L;;;;;N;;;;; AD35;HANGUL SYLLABLE GOEG;Lo;0;L;;;;;N;;;;; AD36;HANGUL SYLLABLE GOEGG;Lo;0;L;;;;;N;;;;; AD37;HANGUL SYLLABLE GOEGS;Lo;0;L;;;;;N;;;;; AD38;HANGUL SYLLABLE GOEN;Lo;0;L;;;;;N;;;;; AD39;HANGUL SYLLABLE GOENI;Lo;0;L;;;;;N;;;;; AD3A;HANGUL SYLLABLE GOENH;Lo;0;L;;;;;N;;;;; AD3B;HANGUL SYLLABLE GOED;Lo;0;L;;;;;N;;;;; AD3C;HANGUL SYLLABLE GOEL;Lo;0;L;;;;;N;;;;; AD3D;HANGUL SYLLABLE GOELG;Lo;0;L;;;;;N;;;;; AD3E;HANGUL SYLLABLE GOELM;Lo;0;L;;;;;N;;;;; AD3F;HANGUL SYLLABLE GOELB;Lo;0;L;;;;;N;;;;; AD40;HANGUL SYLLABLE GOELS;Lo;0;L;;;;;N;;;;; AD41;HANGUL SYLLABLE GOELT;Lo;0;L;;;;;N;;;;; AD42;HANGUL SYLLABLE GOELP;Lo;0;L;;;;;N;;;;; AD43;HANGUL SYLLABLE GOELH;Lo;0;L;;;;;N;;;;; AD44;HANGUL SYLLABLE GOEM;Lo;0;L;;;;;N;;;;; AD45;HANGUL SYLLABLE GOEB;Lo;0;L;;;;;N;;;;; AD46;HANGUL SYLLABLE GOEBS;Lo;0;L;;;;;N;;;;; AD47;HANGUL SYLLABLE GOES;Lo;0;L;;;;;N;;;;; AD48;HANGUL SYLLABLE GOESS;Lo;0;L;;;;;N;;;;; AD49;HANGUL SYLLABLE GOENG;Lo;0;L;;;;;N;;;;; AD4A;HANGUL SYLLABLE GOEJ;Lo;0;L;;;;;N;;;;; AD4B;HANGUL SYLLABLE GOEC;Lo;0;L;;;;;N;;;;; AD4C;HANGUL SYLLABLE GOEK;Lo;0;L;;;;;N;;;;; AD4D;HANGUL SYLLABLE GOET;Lo;0;L;;;;;N;;;;; AD4E;HANGUL SYLLABLE GOEP;Lo;0;L;;;;;N;;;;; AD4F;HANGUL SYLLABLE GOEH;Lo;0;L;;;;;N;;;;; AD50;HANGUL SYLLABLE GYO;Lo;0;L;;;;;N;;;;; AD51;HANGUL SYLLABLE GYOG;Lo;0;L;;;;;N;;;;; AD52;HANGUL SYLLABLE GYOGG;Lo;0;L;;;;;N;;;;; AD53;HANGUL SYLLABLE GYOGS;Lo;0;L;;;;;N;;;;; AD54;HANGUL SYLLABLE GYON;Lo;0;L;;;;;N;;;;; AD55;HANGUL SYLLABLE GYONI;Lo;0;L;;;;;N;;;;; AD56;HANGUL SYLLABLE GYONH;Lo;0;L;;;;;N;;;;; AD57;HANGUL SYLLABLE GYOD;Lo;0;L;;;;;N;;;;; AD58;HANGUL SYLLABLE GYOL;Lo;0;L;;;;;N;;;;; AD59;HANGUL SYLLABLE GYOLG;Lo;0;L;;;;;N;;;;; AD5A;HANGUL SYLLABLE GYOLM;Lo;0;L;;;;;N;;;;; AD5B;HANGUL SYLLABLE GYOLB;Lo;0;L;;;;;N;;;;; AD5C;HANGUL SYLLABLE GYOLS;Lo;0;L;;;;;N;;;;; AD5D;HANGUL SYLLABLE GYOLT;Lo;0;L;;;;;N;;;;; AD5E;HANGUL SYLLABLE GYOLP;Lo;0;L;;;;;N;;;;; AD5F;HANGUL SYLLABLE GYOLH;Lo;0;L;;;;;N;;;;; AD60;HANGUL SYLLABLE GYOM;Lo;0;L;;;;;N;;;;; AD61;HANGUL SYLLABLE GYOB;Lo;0;L;;;;;N;;;;; AD62;HANGUL SYLLABLE GYOBS;Lo;0;L;;;;;N;;;;; AD63;HANGUL SYLLABLE GYOS;Lo;0;L;;;;;N;;;;; AD64;HANGUL SYLLABLE GYOSS;Lo;0;L;;;;;N;;;;; AD65;HANGUL SYLLABLE GYONG;Lo;0;L;;;;;N;;;;; AD66;HANGUL SYLLABLE GYOJ;Lo;0;L;;;;;N;;;;; AD67;HANGUL SYLLABLE GYOC;Lo;0;L;;;;;N;;;;; AD68;HANGUL SYLLABLE GYOK;Lo;0;L;;;;;N;;;;; AD69;HANGUL SYLLABLE GYOT;Lo;0;L;;;;;N;;;;; AD6A;HANGUL SYLLABLE GYOP;Lo;0;L;;;;;N;;;;; AD6B;HANGUL SYLLABLE GYOH;Lo;0;L;;;;;N;;;;; AD6C;HANGUL SYLLABLE GU;Lo;0;L;;;;;N;;;;; AD6D;HANGUL SYLLABLE GUG;Lo;0;L;;;;;N;;;;; AD6E;HANGUL SYLLABLE GUGG;Lo;0;L;;;;;N;;;;; AD6F;HANGUL SYLLABLE GUGS;Lo;0;L;;;;;N;;;;; AD70;HANGUL SYLLABLE GUN;Lo;0;L;;;;;N;;;;; AD71;HANGUL SYLLABLE GUNI;Lo;0;L;;;;;N;;;;; AD72;HANGUL SYLLABLE GUNH;Lo;0;L;;;;;N;;;;; AD73;HANGUL SYLLABLE GUD;Lo;0;L;;;;;N;;;;; AD74;HANGUL SYLLABLE GUL;Lo;0;L;;;;;N;;;;; AD75;HANGUL SYLLABLE GULG;Lo;0;L;;;;;N;;;;; AD76;HANGUL SYLLABLE GULM;Lo;0;L;;;;;N;;;;; AD77;HANGUL SYLLABLE GULB;Lo;0;L;;;;;N;;;;; AD78;HANGUL SYLLABLE GULS;Lo;0;L;;;;;N;;;;; AD79;HANGUL SYLLABLE GULT;Lo;0;L;;;;;N;;;;; AD7A;HANGUL SYLLABLE GULP;Lo;0;L;;;;;N;;;;; AD7B;HANGUL SYLLABLE GULH;Lo;0;L;;;;;N;;;;; AD7C;HANGUL SYLLABLE GUM;Lo;0;L;;;;;N;;;;; AD7D;HANGUL SYLLABLE GUB;Lo;0;L;;;;;N;;;;; AD7E;HANGUL SYLLABLE GUBS;Lo;0;L;;;;;N;;;;; AD7F;HANGUL SYLLABLE GUS;Lo;0;L;;;;;N;;;;; AD80;HANGUL SYLLABLE GUSS;Lo;0;L;;;;;N;;;;; AD81;HANGUL SYLLABLE GUNG;Lo;0;L;;;;;N;;;;; AD82;HANGUL SYLLABLE GUJ;Lo;0;L;;;;;N;;;;; AD83;HANGUL SYLLABLE GUC;Lo;0;L;;;;;N;;;;; AD84;HANGUL SYLLABLE GUK;Lo;0;L;;;;;N;;;;; AD85;HANGUL SYLLABLE GUT;Lo;0;L;;;;;N;;;;; AD86;HANGUL SYLLABLE GUP;Lo;0;L;;;;;N;;;;; AD87;HANGUL SYLLABLE GUH;Lo;0;L;;;;;N;;;;; AD88;HANGUL SYLLABLE GWEO;Lo;0;L;;;;;N;;;;; AD89;HANGUL SYLLABLE GWEOG;Lo;0;L;;;;;N;;;;; AD8A;HANGUL SYLLABLE GWEOGG;Lo;0;L;;;;;N;;;;; AD8B;HANGUL SYLLABLE GWEOGS;Lo;0;L;;;;;N;;;;; AD8C;HANGUL SYLLABLE GWEON;Lo;0;L;;;;;N;;;;; AD8D;HANGUL SYLLABLE GWEONI;Lo;0;L;;;;;N;;;;; AD8E;HANGUL SYLLABLE GWEONH;Lo;0;L;;;;;N;;;;; AD8F;HANGUL SYLLABLE GWEOD;Lo;0;L;;;;;N;;;;; AD90;HANGUL SYLLABLE GWEOL;Lo;0;L;;;;;N;;;;; AD91;HANGUL SYLLABLE GWEOLG;Lo;0;L;;;;;N;;;;; AD92;HANGUL SYLLABLE GWEOLM;Lo;0;L;;;;;N;;;;; AD93;HANGUL SYLLABLE GWEOLB;Lo;0;L;;;;;N;;;;; AD94;HANGUL SYLLABLE GWEOLS;Lo;0;L;;;;;N;;;;; AD95;HANGUL SYLLABLE GWEOLT;Lo;0;L;;;;;N;;;;; AD96;HANGUL SYLLABLE GWEOLP;Lo;0;L;;;;;N;;;;; AD97;HANGUL SYLLABLE GWEOLH;Lo;0;L;;;;;N;;;;; AD98;HANGUL SYLLABLE GWEOM;Lo;0;L;;;;;N;;;;; AD99;HANGUL SYLLABLE GWEOB;Lo;0;L;;;;;N;;;;; AD9A;HANGUL SYLLABLE GWEOBS;Lo;0;L;;;;;N;;;;; AD9B;HANGUL SYLLABLE GWEOS;Lo;0;L;;;;;N;;;;; AD9C;HANGUL SYLLABLE GWEOSS;Lo;0;L;;;;;N;;;;; AD9D;HANGUL SYLLABLE GWEONG;Lo;0;L;;;;;N;;;;; AD9E;HANGUL SYLLABLE GWEOJ;Lo;0;L;;;;;N;;;;; AD9F;HANGUL SYLLABLE GWEOC;Lo;0;L;;;;;N;;;;; ADA0;HANGUL SYLLABLE GWEOK;Lo;0;L;;;;;N;;;;; ADA1;HANGUL SYLLABLE GWEOT;Lo;0;L;;;;;N;;;;; ADA2;HANGUL SYLLABLE GWEOP;Lo;0;L;;;;;N;;;;; ADA3;HANGUL SYLLABLE GWEOH;Lo;0;L;;;;;N;;;;; ADA4;HANGUL SYLLABLE GWE;Lo;0;L;;;;;N;;;;; ADA5;HANGUL SYLLABLE GWEG;Lo;0;L;;;;;N;;;;; ADA6;HANGUL SYLLABLE GWEGG;Lo;0;L;;;;;N;;;;; ADA7;HANGUL SYLLABLE GWEGS;Lo;0;L;;;;;N;;;;; ADA8;HANGUL SYLLABLE GWEN;Lo;0;L;;;;;N;;;;; ADA9;HANGUL SYLLABLE GWENI;Lo;0;L;;;;;N;;;;; ADAA;HANGUL SYLLABLE GWENH;Lo;0;L;;;;;N;;;;; ADAB;HANGUL SYLLABLE GWED;Lo;0;L;;;;;N;;;;; ADAC;HANGUL SYLLABLE GWEL;Lo;0;L;;;;;N;;;;; ADAD;HANGUL SYLLABLE GWELG;Lo;0;L;;;;;N;;;;; ADAE;HANGUL SYLLABLE GWELM;Lo;0;L;;;;;N;;;;; ADAF;HANGUL SYLLABLE GWELB;Lo;0;L;;;;;N;;;;; ADB0;HANGUL SYLLABLE GWELS;Lo;0;L;;;;;N;;;;; ADB1;HANGUL SYLLABLE GWELT;Lo;0;L;;;;;N;;;;; ADB2;HANGUL SYLLABLE GWELP;Lo;0;L;;;;;N;;;;; ADB3;HANGUL SYLLABLE GWELH;Lo;0;L;;;;;N;;;;; ADB4;HANGUL SYLLABLE GWEM;Lo;0;L;;;;;N;;;;; ADB5;HANGUL SYLLABLE GWEB;Lo;0;L;;;;;N;;;;; ADB6;HANGUL SYLLABLE GWEBS;Lo;0;L;;;;;N;;;;; ADB7;HANGUL SYLLABLE GWES;Lo;0;L;;;;;N;;;;; ADB8;HANGUL SYLLABLE GWESS;Lo;0;L;;;;;N;;;;; ADB9;HANGUL SYLLABLE GWENG;Lo;0;L;;;;;N;;;;; ADBA;HANGUL SYLLABLE GWEJ;Lo;0;L;;;;;N;;;;; ADBB;HANGUL SYLLABLE GWEC;Lo;0;L;;;;;N;;;;; ADBC;HANGUL SYLLABLE GWEK;Lo;0;L;;;;;N;;;;; ADBD;HANGUL SYLLABLE GWET;Lo;0;L;;;;;N;;;;; ADBE;HANGUL SYLLABLE GWEP;Lo;0;L;;;;;N;;;;; ADBF;HANGUL SYLLABLE GWEH;Lo;0;L;;;;;N;;;;; ADC0;HANGUL SYLLABLE GWI;Lo;0;L;;;;;N;;;;; ADC1;HANGUL SYLLABLE GWIG;Lo;0;L;;;;;N;;;;; ADC2;HANGUL SYLLABLE GWIGG;Lo;0;L;;;;;N;;;;; ADC3;HANGUL SYLLABLE GWIGS;Lo;0;L;;;;;N;;;;; ADC4;HANGUL SYLLABLE GWIN;Lo;0;L;;;;;N;;;;; ADC5;HANGUL SYLLABLE GWINI;Lo;0;L;;;;;N;;;;; ADC6;HANGUL SYLLABLE GWINH;Lo;0;L;;;;;N;;;;; ADC7;HANGUL SYLLABLE GWID;Lo;0;L;;;;;N;;;;; ADC8;HANGUL SYLLABLE GWIL;Lo;0;L;;;;;N;;;;; ADC9;HANGUL SYLLABLE GWILG;Lo;0;L;;;;;N;;;;; ADCA;HANGUL SYLLABLE GWILM;Lo;0;L;;;;;N;;;;; ADCB;HANGUL SYLLABLE GWILB;Lo;0;L;;;;;N;;;;; ADCC;HANGUL SYLLABLE GWILS;Lo;0;L;;;;;N;;;;; ADCD;HANGUL SYLLABLE GWILT;Lo;0;L;;;;;N;;;;; ADCE;HANGUL SYLLABLE GWILP;Lo;0;L;;;;;N;;;;; ADCF;HANGUL SYLLABLE GWILH;Lo;0;L;;;;;N;;;;; ADD0;HANGUL SYLLABLE GWIM;Lo;0;L;;;;;N;;;;; ADD1;HANGUL SYLLABLE GWIB;Lo;0;L;;;;;N;;;;; ADD2;HANGUL SYLLABLE GWIBS;Lo;0;L;;;;;N;;;;; ADD3;HANGUL SYLLABLE GWIS;Lo;0;L;;;;;N;;;;; ADD4;HANGUL SYLLABLE GWISS;Lo;0;L;;;;;N;;;;; ADD5;HANGUL SYLLABLE GWING;Lo;0;L;;;;;N;;;;; ADD6;HANGUL SYLLABLE GWIJ;Lo;0;L;;;;;N;;;;; ADD7;HANGUL SYLLABLE GWIC;Lo;0;L;;;;;N;;;;; ADD8;HANGUL SYLLABLE GWIK;Lo;0;L;;;;;N;;;;; ADD9;HANGUL SYLLABLE GWIT;Lo;0;L;;;;;N;;;;; ADDA;HANGUL SYLLABLE GWIP;Lo;0;L;;;;;N;;;;; ADDB;HANGUL SYLLABLE GWIH;Lo;0;L;;;;;N;;;;; ADDC;HANGUL SYLLABLE GYU;Lo;0;L;;;;;N;;;;; ADDD;HANGUL SYLLABLE GYUG;Lo;0;L;;;;;N;;;;; ADDE;HANGUL SYLLABLE GYUGG;Lo;0;L;;;;;N;;;;; ADDF;HANGUL SYLLABLE GYUGS;Lo;0;L;;;;;N;;;;; ADE0;HANGUL SYLLABLE GYUN;Lo;0;L;;;;;N;;;;; ADE1;HANGUL SYLLABLE GYUNI;Lo;0;L;;;;;N;;;;; ADE2;HANGUL SYLLABLE GYUNH;Lo;0;L;;;;;N;;;;; ADE3;HANGUL SYLLABLE GYUD;Lo;0;L;;;;;N;;;;; ADE4;HANGUL SYLLABLE GYUL;Lo;0;L;;;;;N;;;;; ADE5;HANGUL SYLLABLE GYULG;Lo;0;L;;;;;N;;;;; ADE6;HANGUL SYLLABLE GYULM;Lo;0;L;;;;;N;;;;; ADE7;HANGUL SYLLABLE GYULB;Lo;0;L;;;;;N;;;;; ADE8;HANGUL SYLLABLE GYULS;Lo;0;L;;;;;N;;;;; ADE9;HANGUL SYLLABLE GYULT;Lo;0;L;;;;;N;;;;; ADEA;HANGUL SYLLABLE GYULP;Lo;0;L;;;;;N;;;;; ADEB;HANGUL SYLLABLE GYULH;Lo;0;L;;;;;N;;;;; ADEC;HANGUL SYLLABLE GYUM;Lo;0;L;;;;;N;;;;; ADED;HANGUL SYLLABLE GYUB;Lo;0;L;;;;;N;;;;; ADEE;HANGUL SYLLABLE GYUBS;Lo;0;L;;;;;N;;;;; ADEF;HANGUL SYLLABLE GYUS;Lo;0;L;;;;;N;;;;; ADF0;HANGUL SYLLABLE GYUSS;Lo;0;L;;;;;N;;;;; ADF1;HANGUL SYLLABLE GYUNG;Lo;0;L;;;;;N;;;;; ADF2;HANGUL SYLLABLE GYUJ;Lo;0;L;;;;;N;;;;; ADF3;HANGUL SYLLABLE GYUC;Lo;0;L;;;;;N;;;;; ADF4;HANGUL SYLLABLE GYUK;Lo;0;L;;;;;N;;;;; ADF5;HANGUL SYLLABLE GYUT;Lo;0;L;;;;;N;;;;; ADF6;HANGUL SYLLABLE GYUP;Lo;0;L;;;;;N;;;;; ADF7;HANGUL SYLLABLE GYUH;Lo;0;L;;;;;N;;;;; ADF8;HANGUL SYLLABLE GEU;Lo;0;L;;;;;N;;;;; ADF9;HANGUL SYLLABLE GEUG;Lo;0;L;;;;;N;;;;; ADFA;HANGUL SYLLABLE GEUGG;Lo;0;L;;;;;N;;;;; ADFB;HANGUL SYLLABLE GEUGS;Lo;0;L;;;;;N;;;;; ADFC;HANGUL SYLLABLE GEUN;Lo;0;L;;;;;N;;;;; ADFD;HANGUL SYLLABLE GEUNI;Lo;0;L;;;;;N;;;;; ADFE;HANGUL SYLLABLE GEUNH;Lo;0;L;;;;;N;;;;; ADFF;HANGUL SYLLABLE GEUD;Lo;0;L;;;;;N;;;;; AE00;HANGUL SYLLABLE GEUL;Lo;0;L;;;;;N;;;;; AE01;HANGUL SYLLABLE GEULG;Lo;0;L;;;;;N;;;;; AE02;HANGUL SYLLABLE GEULM;Lo;0;L;;;;;N;;;;; AE03;HANGUL SYLLABLE GEULB;Lo;0;L;;;;;N;;;;; AE04;HANGUL SYLLABLE GEULS;Lo;0;L;;;;;N;;;;; AE05;HANGUL SYLLABLE GEULT;Lo;0;L;;;;;N;;;;; AE06;HANGUL SYLLABLE GEULP;Lo;0;L;;;;;N;;;;; AE07;HANGUL SYLLABLE GEULH;Lo;0;L;;;;;N;;;;; AE08;HANGUL SYLLABLE GEUM;Lo;0;L;;;;;N;;;;; AE09;HANGUL SYLLABLE GEUB;Lo;0;L;;;;;N;;;;; AE0A;HANGUL SYLLABLE GEUBS;Lo;0;L;;;;;N;;;;; AE0B;HANGUL SYLLABLE GEUS;Lo;0;L;;;;;N;;;;; AE0C;HANGUL SYLLABLE GEUSS;Lo;0;L;;;;;N;;;;; AE0D;HANGUL SYLLABLE GEUNG;Lo;0;L;;;;;N;;;;; AE0E;HANGUL SYLLABLE GEUJ;Lo;0;L;;;;;N;;;;; AE0F;HANGUL SYLLABLE GEUC;Lo;0;L;;;;;N;;;;; AE10;HANGUL SYLLABLE GEUK;Lo;0;L;;;;;N;;;;; AE11;HANGUL SYLLABLE GEUT;Lo;0;L;;;;;N;;;;; AE12;HANGUL SYLLABLE GEUP;Lo;0;L;;;;;N;;;;; AE13;HANGUL SYLLABLE GEUH;Lo;0;L;;;;;N;;;;; AE14;HANGUL SYLLABLE GYI;Lo;0;L;;;;;N;;;;; AE15;HANGUL SYLLABLE GYIG;Lo;0;L;;;;;N;;;;; AE16;HANGUL SYLLABLE GYIGG;Lo;0;L;;;;;N;;;;; AE17;HANGUL SYLLABLE GYIGS;Lo;0;L;;;;;N;;;;; AE18;HANGUL SYLLABLE GYIN;Lo;0;L;;;;;N;;;;; AE19;HANGUL SYLLABLE GYINI;Lo;0;L;;;;;N;;;;; AE1A;HANGUL SYLLABLE GYINH;Lo;0;L;;;;;N;;;;; AE1B;HANGUL SYLLABLE GYID;Lo;0;L;;;;;N;;;;; AE1C;HANGUL SYLLABLE GYIL;Lo;0;L;;;;;N;;;;; AE1D;HANGUL SYLLABLE GYILG;Lo;0;L;;;;;N;;;;; AE1E;HANGUL SYLLABLE GYILM;Lo;0;L;;;;;N;;;;; AE1F;HANGUL SYLLABLE GYILB;Lo;0;L;;;;;N;;;;; AE20;HANGUL SYLLABLE GYILS;Lo;0;L;;;;;N;;;;; AE21;HANGUL SYLLABLE GYILT;Lo;0;L;;;;;N;;;;; AE22;HANGUL SYLLABLE GYILP;Lo;0;L;;;;;N;;;;; AE23;HANGUL SYLLABLE GYILH;Lo;0;L;;;;;N;;;;; AE24;HANGUL SYLLABLE GYIM;Lo;0;L;;;;;N;;;;; AE25;HANGUL SYLLABLE GYIB;Lo;0;L;;;;;N;;;;; AE26;HANGUL SYLLABLE GYIBS;Lo;0;L;;;;;N;;;;; AE27;HANGUL SYLLABLE GYIS;Lo;0;L;;;;;N;;;;; AE28;HANGUL SYLLABLE GYISS;Lo;0;L;;;;;N;;;;; AE29;HANGUL SYLLABLE GYING;Lo;0;L;;;;;N;;;;; AE2A;HANGUL SYLLABLE GYIJ;Lo;0;L;;;;;N;;;;; AE2B;HANGUL SYLLABLE GYIC;Lo;0;L;;;;;N;;;;; AE2C;HANGUL SYLLABLE GYIK;Lo;0;L;;;;;N;;;;; AE2D;HANGUL SYLLABLE GYIT;Lo;0;L;;;;;N;;;;; AE2E;HANGUL SYLLABLE GYIP;Lo;0;L;;;;;N;;;;; AE2F;HANGUL SYLLABLE GYIH;Lo;0;L;;;;;N;;;;; AE30;HANGUL SYLLABLE GI;Lo;0;L;;;;;N;;;;; AE31;HANGUL SYLLABLE GIG;Lo;0;L;;;;;N;;;;; AE32;HANGUL SYLLABLE GIGG;Lo;0;L;;;;;N;;;;; AE33;HANGUL SYLLABLE GIGS;Lo;0;L;;;;;N;;;;; AE34;HANGUL SYLLABLE GIN;Lo;0;L;;;;;N;;;;; AE35;HANGUL SYLLABLE GINI;Lo;0;L;;;;;N;;;;; AE36;HANGUL SYLLABLE GINH;Lo;0;L;;;;;N;;;;; AE37;HANGUL SYLLABLE GID;Lo;0;L;;;;;N;;;;; AE38;HANGUL SYLLABLE GIL;Lo;0;L;;;;;N;;;;; AE39;HANGUL SYLLABLE GILG;Lo;0;L;;;;;N;;;;; AE3A;HANGUL SYLLABLE GILM;Lo;0;L;;;;;N;;;;; AE3B;HANGUL SYLLABLE GILB;Lo;0;L;;;;;N;;;;; AE3C;HANGUL SYLLABLE GILS;Lo;0;L;;;;;N;;;;; AE3D;HANGUL SYLLABLE GILT;Lo;0;L;;;;;N;;;;; AE3E;HANGUL SYLLABLE GILP;Lo;0;L;;;;;N;;;;; AE3F;HANGUL SYLLABLE GILH;Lo;0;L;;;;;N;;;;; AE40;HANGUL SYLLABLE GIM;Lo;0;L;;;;;N;;;;; AE41;HANGUL SYLLABLE GIB;Lo;0;L;;;;;N;;;;; AE42;HANGUL SYLLABLE GIBS;Lo;0;L;;;;;N;;;;; AE43;HANGUL SYLLABLE GIS;Lo;0;L;;;;;N;;;;; AE44;HANGUL SYLLABLE GISS;Lo;0;L;;;;;N;;;;; AE45;HANGUL SYLLABLE GING;Lo;0;L;;;;;N;;;;; AE46;HANGUL SYLLABLE GIJ;Lo;0;L;;;;;N;;;;; AE47;HANGUL SYLLABLE GIC;Lo;0;L;;;;;N;;;;; AE48;HANGUL SYLLABLE GIK;Lo;0;L;;;;;N;;;;; AE49;HANGUL SYLLABLE GIT;Lo;0;L;;;;;N;;;;; AE4A;HANGUL SYLLABLE GIP;Lo;0;L;;;;;N;;;;; AE4B;HANGUL SYLLABLE GIH;Lo;0;L;;;;;N;;;;; AE4C;HANGUL SYLLABLE GGA;Lo;0;L;;;;;N;;;;; AE4D;HANGUL SYLLABLE GGAG;Lo;0;L;;;;;N;;;;; AE4E;HANGUL SYLLABLE GGAGG;Lo;0;L;;;;;N;;;;; AE4F;HANGUL SYLLABLE GGAGS;Lo;0;L;;;;;N;;;;; AE50;HANGUL SYLLABLE GGAN;Lo;0;L;;;;;N;;;;; AE51;HANGUL SYLLABLE GGANI;Lo;0;L;;;;;N;;;;; AE52;HANGUL SYLLABLE GGANH;Lo;0;L;;;;;N;;;;; AE53;HANGUL SYLLABLE GGAD;Lo;0;L;;;;;N;;;;; AE54;HANGUL SYLLABLE GGAL;Lo;0;L;;;;;N;;;;; AE55;HANGUL SYLLABLE GGALG;Lo;0;L;;;;;N;;;;; AE56;HANGUL SYLLABLE GGALM;Lo;0;L;;;;;N;;;;; AE57;HANGUL SYLLABLE GGALB;Lo;0;L;;;;;N;;;;; AE58;HANGUL SYLLABLE GGALS;Lo;0;L;;;;;N;;;;; AE59;HANGUL SYLLABLE GGALT;Lo;0;L;;;;;N;;;;; AE5A;HANGUL SYLLABLE GGALP;Lo;0;L;;;;;N;;;;; AE5B;HANGUL SYLLABLE GGALH;Lo;0;L;;;;;N;;;;; AE5C;HANGUL SYLLABLE GGAM;Lo;0;L;;;;;N;;;;; AE5D;HANGUL SYLLABLE GGAB;Lo;0;L;;;;;N;;;;; AE5E;HANGUL SYLLABLE GGABS;Lo;0;L;;;;;N;;;;; AE5F;HANGUL SYLLABLE GGAS;Lo;0;L;;;;;N;;;;; AE60;HANGUL SYLLABLE GGASS;Lo;0;L;;;;;N;;;;; AE61;HANGUL SYLLABLE GGANG;Lo;0;L;;;;;N;;;;; AE62;HANGUL SYLLABLE GGAJ;Lo;0;L;;;;;N;;;;; AE63;HANGUL SYLLABLE GGAC;Lo;0;L;;;;;N;;;;; AE64;HANGUL SYLLABLE GGAK;Lo;0;L;;;;;N;;;;; AE65;HANGUL SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; AE66;HANGUL SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; AE67;HANGUL SYLLABLE GGAH;Lo;0;L;;;;;N;;;;; AE68;HANGUL SYLLABLE GGAE;Lo;0;L;;;;;N;;;;; AE69;HANGUL SYLLABLE GGAEG;Lo;0;L;;;;;N;;;;; AE6A;HANGUL SYLLABLE GGAEGG;Lo;0;L;;;;;N;;;;; AE6B;HANGUL SYLLABLE GGAEGS;Lo;0;L;;;;;N;;;;; AE6C;HANGUL SYLLABLE GGAEN;Lo;0;L;;;;;N;;;;; AE6D;HANGUL SYLLABLE GGAENI;Lo;0;L;;;;;N;;;;; AE6E;HANGUL SYLLABLE GGAENH;Lo;0;L;;;;;N;;;;; AE6F;HANGUL SYLLABLE GGAED;Lo;0;L;;;;;N;;;;; AE70;HANGUL SYLLABLE GGAEL;Lo;0;L;;;;;N;;;;; AE71;HANGUL SYLLABLE GGAELG;Lo;0;L;;;;;N;;;;; AE72;HANGUL SYLLABLE GGAELM;Lo;0;L;;;;;N;;;;; AE73;HANGUL SYLLABLE GGAELB;Lo;0;L;;;;;N;;;;; AE74;HANGUL SYLLABLE GGAELS;Lo;0;L;;;;;N;;;;; AE75;HANGUL SYLLABLE GGAELT;Lo;0;L;;;;;N;;;;; AE76;HANGUL SYLLABLE GGAELP;Lo;0;L;;;;;N;;;;; AE77;HANGUL SYLLABLE GGAELH;Lo;0;L;;;;;N;;;;; AE78;HANGUL SYLLABLE GGAEM;Lo;0;L;;;;;N;;;;; AE79;HANGUL SYLLABLE GGAEB;Lo;0;L;;;;;N;;;;; AE7A;HANGUL SYLLABLE GGAEBS;Lo;0;L;;;;;N;;;;; AE7B;HANGUL SYLLABLE GGAES;Lo;0;L;;;;;N;;;;; AE7C;HANGUL SYLLABLE GGAESS;Lo;0;L;;;;;N;;;;; AE7D;HANGUL SYLLABLE GGAENG;Lo;0;L;;;;;N;;;;; AE7E;HANGUL SYLLABLE GGAEJ;Lo;0;L;;;;;N;;;;; AE7F;HANGUL SYLLABLE GGAEC;Lo;0;L;;;;;N;;;;; AE80;HANGUL SYLLABLE GGAEK;Lo;0;L;;;;;N;;;;; AE81;HANGUL SYLLABLE GGAET;Lo;0;L;;;;;N;;;;; AE82;HANGUL SYLLABLE GGAEP;Lo;0;L;;;;;N;;;;; AE83;HANGUL SYLLABLE GGAEH;Lo;0;L;;;;;N;;;;; AE84;HANGUL SYLLABLE GGYA;Lo;0;L;;;;;N;;;;; AE85;HANGUL SYLLABLE GGYAG;Lo;0;L;;;;;N;;;;; AE86;HANGUL SYLLABLE GGYAGG;Lo;0;L;;;;;N;;;;; AE87;HANGUL SYLLABLE GGYAGS;Lo;0;L;;;;;N;;;;; AE88;HANGUL SYLLABLE GGYAN;Lo;0;L;;;;;N;;;;; AE89;HANGUL SYLLABLE GGYANI;Lo;0;L;;;;;N;;;;; AE8A;HANGUL SYLLABLE GGYANH;Lo;0;L;;;;;N;;;;; AE8B;HANGUL SYLLABLE GGYAD;Lo;0;L;;;;;N;;;;; AE8C;HANGUL SYLLABLE GGYAL;Lo;0;L;;;;;N;;;;; AE8D;HANGUL SYLLABLE GGYALG;Lo;0;L;;;;;N;;;;; AE8E;HANGUL SYLLABLE GGYALM;Lo;0;L;;;;;N;;;;; AE8F;HANGUL SYLLABLE GGYALB;Lo;0;L;;;;;N;;;;; AE90;HANGUL SYLLABLE GGYALS;Lo;0;L;;;;;N;;;;; AE91;HANGUL SYLLABLE GGYALT;Lo;0;L;;;;;N;;;;; AE92;HANGUL SYLLABLE GGYALP;Lo;0;L;;;;;N;;;;; AE93;HANGUL SYLLABLE GGYALH;Lo;0;L;;;;;N;;;;; AE94;HANGUL SYLLABLE GGYAM;Lo;0;L;;;;;N;;;;; AE95;HANGUL SYLLABLE GGYAB;Lo;0;L;;;;;N;;;;; AE96;HANGUL SYLLABLE GGYABS;Lo;0;L;;;;;N;;;;; AE97;HANGUL SYLLABLE GGYAS;Lo;0;L;;;;;N;;;;; AE98;HANGUL SYLLABLE GGYASS;Lo;0;L;;;;;N;;;;; AE99;HANGUL SYLLABLE GGYANG;Lo;0;L;;;;;N;;;;; AE9A;HANGUL SYLLABLE GGYAJ;Lo;0;L;;;;;N;;;;; AE9B;HANGUL SYLLABLE GGYAC;Lo;0;L;;;;;N;;;;; AE9C;HANGUL SYLLABLE GGYAK;Lo;0;L;;;;;N;;;;; AE9D;HANGUL SYLLABLE GGYAT;Lo;0;L;;;;;N;;;;; AE9E;HANGUL SYLLABLE GGYAP;Lo;0;L;;;;;N;;;;; AE9F;HANGUL SYLLABLE GGYAH;Lo;0;L;;;;;N;;;;; AEA0;HANGUL SYLLABLE GGYAE;Lo;0;L;;;;;N;;;;; AEA1;HANGUL SYLLABLE GGYAEG;Lo;0;L;;;;;N;;;;; AEA2;HANGUL SYLLABLE GGYAEGG;Lo;0;L;;;;;N;;;;; AEA3;HANGUL SYLLABLE GGYAEGS;Lo;0;L;;;;;N;;;;; AEA4;HANGUL SYLLABLE GGYAEN;Lo;0;L;;;;;N;;;;; AEA5;HANGUL SYLLABLE GGYAENI;Lo;0;L;;;;;N;;;;; AEA6;HANGUL SYLLABLE GGYAENH;Lo;0;L;;;;;N;;;;; AEA7;HANGUL SYLLABLE GGYAED;Lo;0;L;;;;;N;;;;; AEA8;HANGUL SYLLABLE GGYAEL;Lo;0;L;;;;;N;;;;; AEA9;HANGUL SYLLABLE GGYAELG;Lo;0;L;;;;;N;;;;; AEAA;HANGUL SYLLABLE GGYAELM;Lo;0;L;;;;;N;;;;; AEAB;HANGUL SYLLABLE GGYAELB;Lo;0;L;;;;;N;;;;; AEAC;HANGUL SYLLABLE GGYAELS;Lo;0;L;;;;;N;;;;; AEAD;HANGUL SYLLABLE GGYAELT;Lo;0;L;;;;;N;;;;; AEAE;HANGUL SYLLABLE GGYAELP;Lo;0;L;;;;;N;;;;; AEAF;HANGUL SYLLABLE GGYAELH;Lo;0;L;;;;;N;;;;; AEB0;HANGUL SYLLABLE GGYAEM;Lo;0;L;;;;;N;;;;; AEB1;HANGUL SYLLABLE GGYAEB;Lo;0;L;;;;;N;;;;; AEB2;HANGUL SYLLABLE GGYAEBS;Lo;0;L;;;;;N;;;;; AEB3;HANGUL SYLLABLE GGYAES;Lo;0;L;;;;;N;;;;; AEB4;HANGUL SYLLABLE GGYAESS;Lo;0;L;;;;;N;;;;; AEB5;HANGUL SYLLABLE GGYAENG;Lo;0;L;;;;;N;;;;; AEB6;HANGUL SYLLABLE GGYAEJ;Lo;0;L;;;;;N;;;;; AEB7;HANGUL SYLLABLE GGYAEC;Lo;0;L;;;;;N;;;;; AEB8;HANGUL SYLLABLE GGYAEK;Lo;0;L;;;;;N;;;;; AEB9;HANGUL SYLLABLE GGYAET;Lo;0;L;;;;;N;;;;; AEBA;HANGUL SYLLABLE GGYAEP;Lo;0;L;;;;;N;;;;; AEBB;HANGUL SYLLABLE GGYAEH;Lo;0;L;;;;;N;;;;; AEBC;HANGUL SYLLABLE GGEO;Lo;0;L;;;;;N;;;;; AEBD;HANGUL SYLLABLE GGEOG;Lo;0;L;;;;;N;;;;; AEBE;HANGUL SYLLABLE GGEOGG;Lo;0;L;;;;;N;;;;; AEBF;HANGUL SYLLABLE GGEOGS;Lo;0;L;;;;;N;;;;; AEC0;HANGUL SYLLABLE GGEON;Lo;0;L;;;;;N;;;;; AEC1;HANGUL SYLLABLE GGEONI;Lo;0;L;;;;;N;;;;; AEC2;HANGUL SYLLABLE GGEONH;Lo;0;L;;;;;N;;;;; AEC3;HANGUL SYLLABLE GGEOD;Lo;0;L;;;;;N;;;;; AEC4;HANGUL SYLLABLE GGEOL;Lo;0;L;;;;;N;;;;; AEC5;HANGUL SYLLABLE GGEOLG;Lo;0;L;;;;;N;;;;; AEC6;HANGUL SYLLABLE GGEOLM;Lo;0;L;;;;;N;;;;; AEC7;HANGUL SYLLABLE GGEOLB;Lo;0;L;;;;;N;;;;; AEC8;HANGUL SYLLABLE GGEOLS;Lo;0;L;;;;;N;;;;; AEC9;HANGUL SYLLABLE GGEOLT;Lo;0;L;;;;;N;;;;; AECA;HANGUL SYLLABLE GGEOLP;Lo;0;L;;;;;N;;;;; AECB;HANGUL SYLLABLE GGEOLH;Lo;0;L;;;;;N;;;;; AECC;HANGUL SYLLABLE GGEOM;Lo;0;L;;;;;N;;;;; AECD;HANGUL SYLLABLE GGEOB;Lo;0;L;;;;;N;;;;; AECE;HANGUL SYLLABLE GGEOBS;Lo;0;L;;;;;N;;;;; AECF;HANGUL SYLLABLE GGEOS;Lo;0;L;;;;;N;;;;; AED0;HANGUL SYLLABLE GGEOSS;Lo;0;L;;;;;N;;;;; AED1;HANGUL SYLLABLE GGEONG;Lo;0;L;;;;;N;;;;; AED2;HANGUL SYLLABLE GGEOJ;Lo;0;L;;;;;N;;;;; AED3;HANGUL SYLLABLE GGEOC;Lo;0;L;;;;;N;;;;; AED4;HANGUL SYLLABLE GGEOK;Lo;0;L;;;;;N;;;;; AED5;HANGUL SYLLABLE GGEOT;Lo;0;L;;;;;N;;;;; AED6;HANGUL SYLLABLE GGEOP;Lo;0;L;;;;;N;;;;; AED7;HANGUL SYLLABLE GGEOH;Lo;0;L;;;;;N;;;;; AED8;HANGUL SYLLABLE GGE;Lo;0;L;;;;;N;;;;; AED9;HANGUL SYLLABLE GGEG;Lo;0;L;;;;;N;;;;; AEDA;HANGUL SYLLABLE GGEGG;Lo;0;L;;;;;N;;;;; AEDB;HANGUL SYLLABLE GGEGS;Lo;0;L;;;;;N;;;;; AEDC;HANGUL SYLLABLE GGEN;Lo;0;L;;;;;N;;;;; AEDD;HANGUL SYLLABLE GGENI;Lo;0;L;;;;;N;;;;; AEDE;HANGUL SYLLABLE GGENH;Lo;0;L;;;;;N;;;;; AEDF;HANGUL SYLLABLE GGED;Lo;0;L;;;;;N;;;;; AEE0;HANGUL SYLLABLE GGEL;Lo;0;L;;;;;N;;;;; AEE1;HANGUL SYLLABLE GGELG;Lo;0;L;;;;;N;;;;; AEE2;HANGUL SYLLABLE GGELM;Lo;0;L;;;;;N;;;;; AEE3;HANGUL SYLLABLE GGELB;Lo;0;L;;;;;N;;;;; AEE4;HANGUL SYLLABLE GGELS;Lo;0;L;;;;;N;;;;; AEE5;HANGUL SYLLABLE GGELT;Lo;0;L;;;;;N;;;;; AEE6;HANGUL SYLLABLE GGELP;Lo;0;L;;;;;N;;;;; AEE7;HANGUL SYLLABLE GGELH;Lo;0;L;;;;;N;;;;; AEE8;HANGUL SYLLABLE GGEM;Lo;0;L;;;;;N;;;;; AEE9;HANGUL SYLLABLE GGEB;Lo;0;L;;;;;N;;;;; AEEA;HANGUL SYLLABLE GGEBS;Lo;0;L;;;;;N;;;;; AEEB;HANGUL SYLLABLE GGES;Lo;0;L;;;;;N;;;;; AEEC;HANGUL SYLLABLE GGESS;Lo;0;L;;;;;N;;;;; AEED;HANGUL SYLLABLE GGENG;Lo;0;L;;;;;N;;;;; AEEE;HANGUL SYLLABLE GGEJ;Lo;0;L;;;;;N;;;;; AEEF;HANGUL SYLLABLE GGEC;Lo;0;L;;;;;N;;;;; AEF0;HANGUL SYLLABLE GGEK;Lo;0;L;;;;;N;;;;; AEF1;HANGUL SYLLABLE GGET;Lo;0;L;;;;;N;;;;; AEF2;HANGUL SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; AEF3;HANGUL SYLLABLE GGEH;Lo;0;L;;;;;N;;;;; AEF4;HANGUL SYLLABLE GGYEO;Lo;0;L;;;;;N;;;;; AEF5;HANGUL SYLLABLE GGYEOG;Lo;0;L;;;;;N;;;;; AEF6;HANGUL SYLLABLE GGYEOGG;Lo;0;L;;;;;N;;;;; AEF7;HANGUL SYLLABLE GGYEOGS;Lo;0;L;;;;;N;;;;; AEF8;HANGUL SYLLABLE GGYEON;Lo;0;L;;;;;N;;;;; AEF9;HANGUL SYLLABLE GGYEONI;Lo;0;L;;;;;N;;;;; AEFA;HANGUL SYLLABLE GGYEONH;Lo;0;L;;;;;N;;;;; AEFB;HANGUL SYLLABLE GGYEOD;Lo;0;L;;;;;N;;;;; AEFC;HANGUL SYLLABLE GGYEOL;Lo;0;L;;;;;N;;;;; AEFD;HANGUL SYLLABLE GGYEOLG;Lo;0;L;;;;;N;;;;; AEFE;HANGUL SYLLABLE GGYEOLM;Lo;0;L;;;;;N;;;;; AEFF;HANGUL SYLLABLE GGYEOLB;Lo;0;L;;;;;N;;;;; AF00;HANGUL SYLLABLE GGYEOLS;Lo;0;L;;;;;N;;;;; AF01;HANGUL SYLLABLE GGYEOLT;Lo;0;L;;;;;N;;;;; AF02;HANGUL SYLLABLE GGYEOLP;Lo;0;L;;;;;N;;;;; AF03;HANGUL SYLLABLE GGYEOLH;Lo;0;L;;;;;N;;;;; AF04;HANGUL SYLLABLE GGYEOM;Lo;0;L;;;;;N;;;;; AF05;HANGUL SYLLABLE GGYEOB;Lo;0;L;;;;;N;;;;; AF06;HANGUL SYLLABLE GGYEOBS;Lo;0;L;;;;;N;;;;; AF07;HANGUL SYLLABLE GGYEOS;Lo;0;L;;;;;N;;;;; AF08;HANGUL SYLLABLE GGYEOSS;Lo;0;L;;;;;N;;;;; AF09;HANGUL SYLLABLE GGYEONG;Lo;0;L;;;;;N;;;;; AF0A;HANGUL SYLLABLE GGYEOJ;Lo;0;L;;;;;N;;;;; AF0B;HANGUL SYLLABLE GGYEOC;Lo;0;L;;;;;N;;;;; AF0C;HANGUL SYLLABLE GGYEOK;Lo;0;L;;;;;N;;;;; AF0D;HANGUL SYLLABLE GGYEOT;Lo;0;L;;;;;N;;;;; AF0E;HANGUL SYLLABLE GGYEOP;Lo;0;L;;;;;N;;;;; AF0F;HANGUL SYLLABLE GGYEOH;Lo;0;L;;;;;N;;;;; AF10;HANGUL SYLLABLE GGYE;Lo;0;L;;;;;N;;;;; AF11;HANGUL SYLLABLE GGYEG;Lo;0;L;;;;;N;;;;; AF12;HANGUL SYLLABLE GGYEGG;Lo;0;L;;;;;N;;;;; AF13;HANGUL SYLLABLE GGYEGS;Lo;0;L;;;;;N;;;;; AF14;HANGUL SYLLABLE GGYEN;Lo;0;L;;;;;N;;;;; AF15;HANGUL SYLLABLE GGYENI;Lo;0;L;;;;;N;;;;; AF16;HANGUL SYLLABLE GGYENH;Lo;0;L;;;;;N;;;;; AF17;HANGUL SYLLABLE GGYED;Lo;0;L;;;;;N;;;;; AF18;HANGUL SYLLABLE GGYEL;Lo;0;L;;;;;N;;;;; AF19;HANGUL SYLLABLE GGYELG;Lo;0;L;;;;;N;;;;; AF1A;HANGUL SYLLABLE GGYELM;Lo;0;L;;;;;N;;;;; AF1B;HANGUL SYLLABLE GGYELB;Lo;0;L;;;;;N;;;;; AF1C;HANGUL SYLLABLE GGYELS;Lo;0;L;;;;;N;;;;; AF1D;HANGUL SYLLABLE GGYELT;Lo;0;L;;;;;N;;;;; AF1E;HANGUL SYLLABLE GGYELP;Lo;0;L;;;;;N;;;;; AF1F;HANGUL SYLLABLE GGYELH;Lo;0;L;;;;;N;;;;; AF20;HANGUL SYLLABLE GGYEM;Lo;0;L;;;;;N;;;;; AF21;HANGUL SYLLABLE GGYEB;Lo;0;L;;;;;N;;;;; AF22;HANGUL SYLLABLE GGYEBS;Lo;0;L;;;;;N;;;;; AF23;HANGUL SYLLABLE GGYES;Lo;0;L;;;;;N;;;;; AF24;HANGUL SYLLABLE GGYESS;Lo;0;L;;;;;N;;;;; AF25;HANGUL SYLLABLE GGYENG;Lo;0;L;;;;;N;;;;; AF26;HANGUL SYLLABLE GGYEJ;Lo;0;L;;;;;N;;;;; AF27;HANGUL SYLLABLE GGYEC;Lo;0;L;;;;;N;;;;; AF28;HANGUL SYLLABLE GGYEK;Lo;0;L;;;;;N;;;;; AF29;HANGUL SYLLABLE GGYET;Lo;0;L;;;;;N;;;;; AF2A;HANGUL SYLLABLE GGYEP;Lo;0;L;;;;;N;;;;; AF2B;HANGUL SYLLABLE GGYEH;Lo;0;L;;;;;N;;;;; AF2C;HANGUL SYLLABLE GGO;Lo;0;L;;;;;N;;;;; AF2D;HANGUL SYLLABLE GGOG;Lo;0;L;;;;;N;;;;; AF2E;HANGUL SYLLABLE GGOGG;Lo;0;L;;;;;N;;;;; AF2F;HANGUL SYLLABLE GGOGS;Lo;0;L;;;;;N;;;;; AF30;HANGUL SYLLABLE GGON;Lo;0;L;;;;;N;;;;; AF31;HANGUL SYLLABLE GGONI;Lo;0;L;;;;;N;;;;; AF32;HANGUL SYLLABLE GGONH;Lo;0;L;;;;;N;;;;; AF33;HANGUL SYLLABLE GGOD;Lo;0;L;;;;;N;;;;; AF34;HANGUL SYLLABLE GGOL;Lo;0;L;;;;;N;;;;; AF35;HANGUL SYLLABLE GGOLG;Lo;0;L;;;;;N;;;;; AF36;HANGUL SYLLABLE GGOLM;Lo;0;L;;;;;N;;;;; AF37;HANGUL SYLLABLE GGOLB;Lo;0;L;;;;;N;;;;; AF38;HANGUL SYLLABLE GGOLS;Lo;0;L;;;;;N;;;;; AF39;HANGUL SYLLABLE GGOLT;Lo;0;L;;;;;N;;;;; AF3A;HANGUL SYLLABLE GGOLP;Lo;0;L;;;;;N;;;;; AF3B;HANGUL SYLLABLE GGOLH;Lo;0;L;;;;;N;;;;; AF3C;HANGUL SYLLABLE GGOM;Lo;0;L;;;;;N;;;;; AF3D;HANGUL SYLLABLE GGOB;Lo;0;L;;;;;N;;;;; AF3E;HANGUL SYLLABLE GGOBS;Lo;0;L;;;;;N;;;;; AF3F;HANGUL SYLLABLE GGOS;Lo;0;L;;;;;N;;;;; AF40;HANGUL SYLLABLE GGOSS;Lo;0;L;;;;;N;;;;; AF41;HANGUL SYLLABLE GGONG;Lo;0;L;;;;;N;;;;; AF42;HANGUL SYLLABLE GGOJ;Lo;0;L;;;;;N;;;;; AF43;HANGUL SYLLABLE GGOC;Lo;0;L;;;;;N;;;;; AF44;HANGUL SYLLABLE GGOK;Lo;0;L;;;;;N;;;;; AF45;HANGUL SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; AF46;HANGUL SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; AF47;HANGUL SYLLABLE GGOH;Lo;0;L;;;;;N;;;;; AF48;HANGUL SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; AF49;HANGUL SYLLABLE GGWAG;Lo;0;L;;;;;N;;;;; AF4A;HANGUL SYLLABLE GGWAGG;Lo;0;L;;;;;N;;;;; AF4B;HANGUL SYLLABLE GGWAGS;Lo;0;L;;;;;N;;;;; AF4C;HANGUL SYLLABLE GGWAN;Lo;0;L;;;;;N;;;;; AF4D;HANGUL SYLLABLE GGWANI;Lo;0;L;;;;;N;;;;; AF4E;HANGUL SYLLABLE GGWANH;Lo;0;L;;;;;N;;;;; AF4F;HANGUL SYLLABLE GGWAD;Lo;0;L;;;;;N;;;;; AF50;HANGUL SYLLABLE GGWAL;Lo;0;L;;;;;N;;;;; AF51;HANGUL SYLLABLE GGWALG;Lo;0;L;;;;;N;;;;; AF52;HANGUL SYLLABLE GGWALM;Lo;0;L;;;;;N;;;;; AF53;HANGUL SYLLABLE GGWALB;Lo;0;L;;;;;N;;;;; AF54;HANGUL SYLLABLE GGWALS;Lo;0;L;;;;;N;;;;; AF55;HANGUL SYLLABLE GGWALT;Lo;0;L;;;;;N;;;;; AF56;HANGUL SYLLABLE GGWALP;Lo;0;L;;;;;N;;;;; AF57;HANGUL SYLLABLE GGWALH;Lo;0;L;;;;;N;;;;; AF58;HANGUL SYLLABLE GGWAM;Lo;0;L;;;;;N;;;;; AF59;HANGUL SYLLABLE GGWAB;Lo;0;L;;;;;N;;;;; AF5A;HANGUL SYLLABLE GGWABS;Lo;0;L;;;;;N;;;;; AF5B;HANGUL SYLLABLE GGWAS;Lo;0;L;;;;;N;;;;; AF5C;HANGUL SYLLABLE GGWASS;Lo;0;L;;;;;N;;;;; AF5D;HANGUL SYLLABLE GGWANG;Lo;0;L;;;;;N;;;;; AF5E;HANGUL SYLLABLE GGWAJ;Lo;0;L;;;;;N;;;;; AF5F;HANGUL SYLLABLE GGWAC;Lo;0;L;;;;;N;;;;; AF60;HANGUL SYLLABLE GGWAK;Lo;0;L;;;;;N;;;;; AF61;HANGUL SYLLABLE GGWAT;Lo;0;L;;;;;N;;;;; AF62;HANGUL SYLLABLE GGWAP;Lo;0;L;;;;;N;;;;; AF63;HANGUL SYLLABLE GGWAH;Lo;0;L;;;;;N;;;;; AF64;HANGUL SYLLABLE GGWAE;Lo;0;L;;;;;N;;;;; AF65;HANGUL SYLLABLE GGWAEG;Lo;0;L;;;;;N;;;;; AF66;HANGUL SYLLABLE GGWAEGG;Lo;0;L;;;;;N;;;;; AF67;HANGUL SYLLABLE GGWAEGS;Lo;0;L;;;;;N;;;;; AF68;HANGUL SYLLABLE GGWAEN;Lo;0;L;;;;;N;;;;; AF69;HANGUL SYLLABLE GGWAENI;Lo;0;L;;;;;N;;;;; AF6A;HANGUL SYLLABLE GGWAENH;Lo;0;L;;;;;N;;;;; AF6B;HANGUL SYLLABLE GGWAED;Lo;0;L;;;;;N;;;;; AF6C;HANGUL SYLLABLE GGWAEL;Lo;0;L;;;;;N;;;;; AF6D;HANGUL SYLLABLE GGWAELG;Lo;0;L;;;;;N;;;;; AF6E;HANGUL SYLLABLE GGWAELM;Lo;0;L;;;;;N;;;;; AF6F;HANGUL SYLLABLE GGWAELB;Lo;0;L;;;;;N;;;;; AF70;HANGUL SYLLABLE GGWAELS;Lo;0;L;;;;;N;;;;; AF71;HANGUL SYLLABLE GGWAELT;Lo;0;L;;;;;N;;;;; AF72;HANGUL SYLLABLE GGWAELP;Lo;0;L;;;;;N;;;;; AF73;HANGUL SYLLABLE GGWAELH;Lo;0;L;;;;;N;;;;; AF74;HANGUL SYLLABLE GGWAEM;Lo;0;L;;;;;N;;;;; AF75;HANGUL SYLLABLE GGWAEB;Lo;0;L;;;;;N;;;;; AF76;HANGUL SYLLABLE GGWAEBS;Lo;0;L;;;;;N;;;;; AF77;HANGUL SYLLABLE GGWAES;Lo;0;L;;;;;N;;;;; AF78;HANGUL SYLLABLE GGWAESS;Lo;0;L;;;;;N;;;;; AF79;HANGUL SYLLABLE GGWAENG;Lo;0;L;;;;;N;;;;; AF7A;HANGUL SYLLABLE GGWAEJ;Lo;0;L;;;;;N;;;;; AF7B;HANGUL SYLLABLE GGWAEC;Lo;0;L;;;;;N;;;;; AF7C;HANGUL SYLLABLE GGWAEK;Lo;0;L;;;;;N;;;;; AF7D;HANGUL SYLLABLE GGWAET;Lo;0;L;;;;;N;;;;; AF7E;HANGUL SYLLABLE GGWAEP;Lo;0;L;;;;;N;;;;; AF7F;HANGUL SYLLABLE GGWAEH;Lo;0;L;;;;;N;;;;; AF80;HANGUL SYLLABLE GGOE;Lo;0;L;;;;;N;;;;; AF81;HANGUL SYLLABLE GGOEG;Lo;0;L;;;;;N;;;;; AF82;HANGUL SYLLABLE GGOEGG;Lo;0;L;;;;;N;;;;; AF83;HANGUL SYLLABLE GGOEGS;Lo;0;L;;;;;N;;;;; AF84;HANGUL SYLLABLE GGOEN;Lo;0;L;;;;;N;;;;; AF85;HANGUL SYLLABLE GGOENI;Lo;0;L;;;;;N;;;;; AF86;HANGUL SYLLABLE GGOENH;Lo;0;L;;;;;N;;;;; AF87;HANGUL SYLLABLE GGOED;Lo;0;L;;;;;N;;;;; AF88;HANGUL SYLLABLE GGOEL;Lo;0;L;;;;;N;;;;; AF89;HANGUL SYLLABLE GGOELG;Lo;0;L;;;;;N;;;;; AF8A;HANGUL SYLLABLE GGOELM;Lo;0;L;;;;;N;;;;; AF8B;HANGUL SYLLABLE GGOELB;Lo;0;L;;;;;N;;;;; AF8C;HANGUL SYLLABLE GGOELS;Lo;0;L;;;;;N;;;;; AF8D;HANGUL SYLLABLE GGOELT;Lo;0;L;;;;;N;;;;; AF8E;HANGUL SYLLABLE GGOELP;Lo;0;L;;;;;N;;;;; AF8F;HANGUL SYLLABLE GGOELH;Lo;0;L;;;;;N;;;;; AF90;HANGUL SYLLABLE GGOEM;Lo;0;L;;;;;N;;;;; AF91;HANGUL SYLLABLE GGOEB;Lo;0;L;;;;;N;;;;; AF92;HANGUL SYLLABLE GGOEBS;Lo;0;L;;;;;N;;;;; AF93;HANGUL SYLLABLE GGOES;Lo;0;L;;;;;N;;;;; AF94;HANGUL SYLLABLE GGOESS;Lo;0;L;;;;;N;;;;; AF95;HANGUL SYLLABLE GGOENG;Lo;0;L;;;;;N;;;;; AF96;HANGUL SYLLABLE GGOEJ;Lo;0;L;;;;;N;;;;; AF97;HANGUL SYLLABLE GGOEC;Lo;0;L;;;;;N;;;;; AF98;HANGUL SYLLABLE GGOEK;Lo;0;L;;;;;N;;;;; AF99;HANGUL SYLLABLE GGOET;Lo;0;L;;;;;N;;;;; AF9A;HANGUL SYLLABLE GGOEP;Lo;0;L;;;;;N;;;;; AF9B;HANGUL SYLLABLE GGOEH;Lo;0;L;;;;;N;;;;; AF9C;HANGUL SYLLABLE GGYO;Lo;0;L;;;;;N;;;;; AF9D;HANGUL SYLLABLE GGYOG;Lo;0;L;;;;;N;;;;; AF9E;HANGUL SYLLABLE GGYOGG;Lo;0;L;;;;;N;;;;; AF9F;HANGUL SYLLABLE GGYOGS;Lo;0;L;;;;;N;;;;; AFA0;HANGUL SYLLABLE GGYON;Lo;0;L;;;;;N;;;;; AFA1;HANGUL SYLLABLE GGYONI;Lo;0;L;;;;;N;;;;; AFA2;HANGUL SYLLABLE GGYONH;Lo;0;L;;;;;N;;;;; AFA3;HANGUL SYLLABLE GGYOD;Lo;0;L;;;;;N;;;;; AFA4;HANGUL SYLLABLE GGYOL;Lo;0;L;;;;;N;;;;; AFA5;HANGUL SYLLABLE GGYOLG;Lo;0;L;;;;;N;;;;; AFA6;HANGUL SYLLABLE GGYOLM;Lo;0;L;;;;;N;;;;; AFA7;HANGUL SYLLABLE GGYOLB;Lo;0;L;;;;;N;;;;; AFA8;HANGUL SYLLABLE GGYOLS;Lo;0;L;;;;;N;;;;; AFA9;HANGUL SYLLABLE GGYOLT;Lo;0;L;;;;;N;;;;; AFAA;HANGUL SYLLABLE GGYOLP;Lo;0;L;;;;;N;;;;; AFAB;HANGUL SYLLABLE GGYOLH;Lo;0;L;;;;;N;;;;; AFAC;HANGUL SYLLABLE GGYOM;Lo;0;L;;;;;N;;;;; AFAD;HANGUL SYLLABLE GGYOB;Lo;0;L;;;;;N;;;;; AFAE;HANGUL SYLLABLE GGYOBS;Lo;0;L;;;;;N;;;;; AFAF;HANGUL SYLLABLE GGYOS;Lo;0;L;;;;;N;;;;; AFB0;HANGUL SYLLABLE GGYOSS;Lo;0;L;;;;;N;;;;; AFB1;HANGUL SYLLABLE GGYONG;Lo;0;L;;;;;N;;;;; AFB2;HANGUL SYLLABLE GGYOJ;Lo;0;L;;;;;N;;;;; AFB3;HANGUL SYLLABLE GGYOC;Lo;0;L;;;;;N;;;;; AFB4;HANGUL SYLLABLE GGYOK;Lo;0;L;;;;;N;;;;; AFB5;HANGUL SYLLABLE GGYOT;Lo;0;L;;;;;N;;;;; AFB6;HANGUL SYLLABLE GGYOP;Lo;0;L;;;;;N;;;;; AFB7;HANGUL SYLLABLE GGYOH;Lo;0;L;;;;;N;;;;; AFB8;HANGUL SYLLABLE GGU;Lo;0;L;;;;;N;;;;; AFB9;HANGUL SYLLABLE GGUG;Lo;0;L;;;;;N;;;;; AFBA;HANGUL SYLLABLE GGUGG;Lo;0;L;;;;;N;;;;; AFBB;HANGUL SYLLABLE GGUGS;Lo;0;L;;;;;N;;;;; AFBC;HANGUL SYLLABLE GGUN;Lo;0;L;;;;;N;;;;; AFBD;HANGUL SYLLABLE GGUNI;Lo;0;L;;;;;N;;;;; AFBE;HANGUL SYLLABLE GGUNH;Lo;0;L;;;;;N;;;;; AFBF;HANGUL SYLLABLE GGUD;Lo;0;L;;;;;N;;;;; AFC0;HANGUL SYLLABLE GGUL;Lo;0;L;;;;;N;;;;; AFC1;HANGUL SYLLABLE GGULG;Lo;0;L;;;;;N;;;;; AFC2;HANGUL SYLLABLE GGULM;Lo;0;L;;;;;N;;;;; AFC3;HANGUL SYLLABLE GGULB;Lo;0;L;;;;;N;;;;; AFC4;HANGUL SYLLABLE GGULS;Lo;0;L;;;;;N;;;;; AFC5;HANGUL SYLLABLE GGULT;Lo;0;L;;;;;N;;;;; AFC6;HANGUL SYLLABLE GGULP;Lo;0;L;;;;;N;;;;; AFC7;HANGUL SYLLABLE GGULH;Lo;0;L;;;;;N;;;;; AFC8;HANGUL SYLLABLE GGUM;Lo;0;L;;;;;N;;;;; AFC9;HANGUL SYLLABLE GGUB;Lo;0;L;;;;;N;;;;; AFCA;HANGUL SYLLABLE GGUBS;Lo;0;L;;;;;N;;;;; AFCB;HANGUL SYLLABLE GGUS;Lo;0;L;;;;;N;;;;; AFCC;HANGUL SYLLABLE GGUSS;Lo;0;L;;;;;N;;;;; AFCD;HANGUL SYLLABLE GGUNG;Lo;0;L;;;;;N;;;;; AFCE;HANGUL SYLLABLE GGUJ;Lo;0;L;;;;;N;;;;; AFCF;HANGUL SYLLABLE GGUC;Lo;0;L;;;;;N;;;;; AFD0;HANGUL SYLLABLE GGUK;Lo;0;L;;;;;N;;;;; AFD1;HANGUL SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; AFD2;HANGUL SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; AFD3;HANGUL SYLLABLE GGUH;Lo;0;L;;;;;N;;;;; AFD4;HANGUL SYLLABLE GGWEO;Lo;0;L;;;;;N;;;;; AFD5;HANGUL SYLLABLE GGWEOG;Lo;0;L;;;;;N;;;;; AFD6;HANGUL SYLLABLE GGWEOGG;Lo;0;L;;;;;N;;;;; AFD7;HANGUL SYLLABLE GGWEOGS;Lo;0;L;;;;;N;;;;; AFD8;HANGUL SYLLABLE GGWEON;Lo;0;L;;;;;N;;;;; AFD9;HANGUL SYLLABLE GGWEONI;Lo;0;L;;;;;N;;;;; AFDA;HANGUL SYLLABLE GGWEONH;Lo;0;L;;;;;N;;;;; AFDB;HANGUL SYLLABLE GGWEOD;Lo;0;L;;;;;N;;;;; AFDC;HANGUL SYLLABLE GGWEOL;Lo;0;L;;;;;N;;;;; AFDD;HANGUL SYLLABLE GGWEOLG;Lo;0;L;;;;;N;;;;; AFDE;HANGUL SYLLABLE GGWEOLM;Lo;0;L;;;;;N;;;;; AFDF;HANGUL SYLLABLE GGWEOLB;Lo;0;L;;;;;N;;;;; AFE0;HANGUL SYLLABLE GGWEOLS;Lo;0;L;;;;;N;;;;; AFE1;HANGUL SYLLABLE GGWEOLT;Lo;0;L;;;;;N;;;;; AFE2;HANGUL SYLLABLE GGWEOLP;Lo;0;L;;;;;N;;;;; AFE3;HANGUL SYLLABLE GGWEOLH;Lo;0;L;;;;;N;;;;; AFE4;HANGUL SYLLABLE GGWEOM;Lo;0;L;;;;;N;;;;; AFE5;HANGUL SYLLABLE GGWEOB;Lo;0;L;;;;;N;;;;; AFE6;HANGUL SYLLABLE GGWEOBS;Lo;0;L;;;;;N;;;;; AFE7;HANGUL SYLLABLE GGWEOS;Lo;0;L;;;;;N;;;;; AFE8;HANGUL SYLLABLE GGWEOSS;Lo;0;L;;;;;N;;;;; AFE9;HANGUL SYLLABLE GGWEONG;Lo;0;L;;;;;N;;;;; AFEA;HANGUL SYLLABLE GGWEOJ;Lo;0;L;;;;;N;;;;; AFEB;HANGUL SYLLABLE GGWEOC;Lo;0;L;;;;;N;;;;; AFEC;HANGUL SYLLABLE GGWEOK;Lo;0;L;;;;;N;;;;; AFED;HANGUL SYLLABLE GGWEOT;Lo;0;L;;;;;N;;;;; AFEE;HANGUL SYLLABLE GGWEOP;Lo;0;L;;;;;N;;;;; AFEF;HANGUL SYLLABLE GGWEOH;Lo;0;L;;;;;N;;;;; AFF0;HANGUL SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; AFF1;HANGUL SYLLABLE GGWEG;Lo;0;L;;;;;N;;;;; AFF2;HANGUL SYLLABLE GGWEGG;Lo;0;L;;;;;N;;;;; AFF3;HANGUL SYLLABLE GGWEGS;Lo;0;L;;;;;N;;;;; AFF4;HANGUL SYLLABLE GGWEN;Lo;0;L;;;;;N;;;;; AFF5;HANGUL SYLLABLE GGWENI;Lo;0;L;;;;;N;;;;; AFF6;HANGUL SYLLABLE GGWENH;Lo;0;L;;;;;N;;;;; AFF7;HANGUL SYLLABLE GGWED;Lo;0;L;;;;;N;;;;; AFF8;HANGUL SYLLABLE GGWEL;Lo;0;L;;;;;N;;;;; AFF9;HANGUL SYLLABLE GGWELG;Lo;0;L;;;;;N;;;;; AFFA;HANGUL SYLLABLE GGWELM;Lo;0;L;;;;;N;;;;; AFFB;HANGUL SYLLABLE GGWELB;Lo;0;L;;;;;N;;;;; AFFC;HANGUL SYLLABLE GGWELS;Lo;0;L;;;;;N;;;;; AFFD;HANGUL SYLLABLE GGWELT;Lo;0;L;;;;;N;;;;; AFFE;HANGUL SYLLABLE GGWELP;Lo;0;L;;;;;N;;;;; AFFF;HANGUL SYLLABLE GGWELH;Lo;0;L;;;;;N;;;;; B000;HANGUL SYLLABLE GGWEM;Lo;0;L;;;;;N;;;;; B001;HANGUL SYLLABLE GGWEB;Lo;0;L;;;;;N;;;;; B002;HANGUL SYLLABLE GGWEBS;Lo;0;L;;;;;N;;;;; B003;HANGUL SYLLABLE GGWES;Lo;0;L;;;;;N;;;;; B004;HANGUL SYLLABLE GGWESS;Lo;0;L;;;;;N;;;;; B005;HANGUL SYLLABLE GGWENG;Lo;0;L;;;;;N;;;;; B006;HANGUL SYLLABLE GGWEJ;Lo;0;L;;;;;N;;;;; B007;HANGUL SYLLABLE GGWEC;Lo;0;L;;;;;N;;;;; B008;HANGUL SYLLABLE GGWEK;Lo;0;L;;;;;N;;;;; B009;HANGUL SYLLABLE GGWET;Lo;0;L;;;;;N;;;;; B00A;HANGUL SYLLABLE GGWEP;Lo;0;L;;;;;N;;;;; B00B;HANGUL SYLLABLE GGWEH;Lo;0;L;;;;;N;;;;; B00C;HANGUL SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; B00D;HANGUL SYLLABLE GGWIG;Lo;0;L;;;;;N;;;;; B00E;HANGUL SYLLABLE GGWIGG;Lo;0;L;;;;;N;;;;; B00F;HANGUL SYLLABLE GGWIGS;Lo;0;L;;;;;N;;;;; B010;HANGUL SYLLABLE GGWIN;Lo;0;L;;;;;N;;;;; B011;HANGUL SYLLABLE GGWINI;Lo;0;L;;;;;N;;;;; B012;HANGUL SYLLABLE GGWINH;Lo;0;L;;;;;N;;;;; B013;HANGUL SYLLABLE GGWID;Lo;0;L;;;;;N;;;;; B014;HANGUL SYLLABLE GGWIL;Lo;0;L;;;;;N;;;;; B015;HANGUL SYLLABLE GGWILG;Lo;0;L;;;;;N;;;;; B016;HANGUL SYLLABLE GGWILM;Lo;0;L;;;;;N;;;;; B017;HANGUL SYLLABLE GGWILB;Lo;0;L;;;;;N;;;;; B018;HANGUL SYLLABLE GGWILS;Lo;0;L;;;;;N;;;;; B019;HANGUL SYLLABLE GGWILT;Lo;0;L;;;;;N;;;;; B01A;HANGUL SYLLABLE GGWILP;Lo;0;L;;;;;N;;;;; B01B;HANGUL SYLLABLE GGWILH;Lo;0;L;;;;;N;;;;; B01C;HANGUL SYLLABLE GGWIM;Lo;0;L;;;;;N;;;;; B01D;HANGUL SYLLABLE GGWIB;Lo;0;L;;;;;N;;;;; B01E;HANGUL SYLLABLE GGWIBS;Lo;0;L;;;;;N;;;;; B01F;HANGUL SYLLABLE GGWIS;Lo;0;L;;;;;N;;;;; B020;HANGUL SYLLABLE GGWISS;Lo;0;L;;;;;N;;;;; B021;HANGUL SYLLABLE GGWING;Lo;0;L;;;;;N;;;;; B022;HANGUL SYLLABLE GGWIJ;Lo;0;L;;;;;N;;;;; B023;HANGUL SYLLABLE GGWIC;Lo;0;L;;;;;N;;;;; B024;HANGUL SYLLABLE GGWIK;Lo;0;L;;;;;N;;;;; B025;HANGUL SYLLABLE GGWIT;Lo;0;L;;;;;N;;;;; B026;HANGUL SYLLABLE GGWIP;Lo;0;L;;;;;N;;;;; B027;HANGUL SYLLABLE GGWIH;Lo;0;L;;;;;N;;;;; B028;HANGUL SYLLABLE GGYU;Lo;0;L;;;;;N;;;;; B029;HANGUL SYLLABLE GGYUG;Lo;0;L;;;;;N;;;;; B02A;HANGUL SYLLABLE GGYUGG;Lo;0;L;;;;;N;;;;; B02B;HANGUL SYLLABLE GGYUGS;Lo;0;L;;;;;N;;;;; B02C;HANGUL SYLLABLE GGYUN;Lo;0;L;;;;;N;;;;; B02D;HANGUL SYLLABLE GGYUNI;Lo;0;L;;;;;N;;;;; B02E;HANGUL SYLLABLE GGYUNH;Lo;0;L;;;;;N;;;;; B02F;HANGUL SYLLABLE GGYUD;Lo;0;L;;;;;N;;;;; B030;HANGUL SYLLABLE GGYUL;Lo;0;L;;;;;N;;;;; B031;HANGUL SYLLABLE GGYULG;Lo;0;L;;;;;N;;;;; B032;HANGUL SYLLABLE GGYULM;Lo;0;L;;;;;N;;;;; B033;HANGUL SYLLABLE GGYULB;Lo;0;L;;;;;N;;;;; B034;HANGUL SYLLABLE GGYULS;Lo;0;L;;;;;N;;;;; B035;HANGUL SYLLABLE GGYULT;Lo;0;L;;;;;N;;;;; B036;HANGUL SYLLABLE GGYULP;Lo;0;L;;;;;N;;;;; B037;HANGUL SYLLABLE GGYULH;Lo;0;L;;;;;N;;;;; B038;HANGUL SYLLABLE GGYUM;Lo;0;L;;;;;N;;;;; B039;HANGUL SYLLABLE GGYUB;Lo;0;L;;;;;N;;;;; B03A;HANGUL SYLLABLE GGYUBS;Lo;0;L;;;;;N;;;;; B03B;HANGUL SYLLABLE GGYUS;Lo;0;L;;;;;N;;;;; B03C;HANGUL SYLLABLE GGYUSS;Lo;0;L;;;;;N;;;;; B03D;HANGUL SYLLABLE GGYUNG;Lo;0;L;;;;;N;;;;; B03E;HANGUL SYLLABLE GGYUJ;Lo;0;L;;;;;N;;;;; B03F;HANGUL SYLLABLE GGYUC;Lo;0;L;;;;;N;;;;; B040;HANGUL SYLLABLE GGYUK;Lo;0;L;;;;;N;;;;; B041;HANGUL SYLLABLE GGYUT;Lo;0;L;;;;;N;;;;; B042;HANGUL SYLLABLE GGYUP;Lo;0;L;;;;;N;;;;; B043;HANGUL SYLLABLE GGYUH;Lo;0;L;;;;;N;;;;; B044;HANGUL SYLLABLE GGEU;Lo;0;L;;;;;N;;;;; B045;HANGUL SYLLABLE GGEUG;Lo;0;L;;;;;N;;;;; B046;HANGUL SYLLABLE GGEUGG;Lo;0;L;;;;;N;;;;; B047;HANGUL SYLLABLE GGEUGS;Lo;0;L;;;;;N;;;;; B048;HANGUL SYLLABLE GGEUN;Lo;0;L;;;;;N;;;;; B049;HANGUL SYLLABLE GGEUNI;Lo;0;L;;;;;N;;;;; B04A;HANGUL SYLLABLE GGEUNH;Lo;0;L;;;;;N;;;;; B04B;HANGUL SYLLABLE GGEUD;Lo;0;L;;;;;N;;;;; B04C;HANGUL SYLLABLE GGEUL;Lo;0;L;;;;;N;;;;; B04D;HANGUL SYLLABLE GGEULG;Lo;0;L;;;;;N;;;;; B04E;HANGUL SYLLABLE GGEULM;Lo;0;L;;;;;N;;;;; B04F;HANGUL SYLLABLE GGEULB;Lo;0;L;;;;;N;;;;; B050;HANGUL SYLLABLE GGEULS;Lo;0;L;;;;;N;;;;; B051;HANGUL SYLLABLE GGEULT;Lo;0;L;;;;;N;;;;; B052;HANGUL SYLLABLE GGEULP;Lo;0;L;;;;;N;;;;; B053;HANGUL SYLLABLE GGEULH;Lo;0;L;;;;;N;;;;; B054;HANGUL SYLLABLE GGEUM;Lo;0;L;;;;;N;;;;; B055;HANGUL SYLLABLE GGEUB;Lo;0;L;;;;;N;;;;; B056;HANGUL SYLLABLE GGEUBS;Lo;0;L;;;;;N;;;;; B057;HANGUL SYLLABLE GGEUS;Lo;0;L;;;;;N;;;;; B058;HANGUL SYLLABLE GGEUSS;Lo;0;L;;;;;N;;;;; B059;HANGUL SYLLABLE GGEUNG;Lo;0;L;;;;;N;;;;; B05A;HANGUL SYLLABLE GGEUJ;Lo;0;L;;;;;N;;;;; B05B;HANGUL SYLLABLE GGEUC;Lo;0;L;;;;;N;;;;; B05C;HANGUL SYLLABLE GGEUK;Lo;0;L;;;;;N;;;;; B05D;HANGUL SYLLABLE GGEUT;Lo;0;L;;;;;N;;;;; B05E;HANGUL SYLLABLE GGEUP;Lo;0;L;;;;;N;;;;; B05F;HANGUL SYLLABLE GGEUH;Lo;0;L;;;;;N;;;;; B060;HANGUL SYLLABLE GGYI;Lo;0;L;;;;;N;;;;; B061;HANGUL SYLLABLE GGYIG;Lo;0;L;;;;;N;;;;; B062;HANGUL SYLLABLE GGYIGG;Lo;0;L;;;;;N;;;;; B063;HANGUL SYLLABLE GGYIGS;Lo;0;L;;;;;N;;;;; B064;HANGUL SYLLABLE GGYIN;Lo;0;L;;;;;N;;;;; B065;HANGUL SYLLABLE GGYINI;Lo;0;L;;;;;N;;;;; B066;HANGUL SYLLABLE GGYINH;Lo;0;L;;;;;N;;;;; B067;HANGUL SYLLABLE GGYID;Lo;0;L;;;;;N;;;;; B068;HANGUL SYLLABLE GGYIL;Lo;0;L;;;;;N;;;;; B069;HANGUL SYLLABLE GGYILG;Lo;0;L;;;;;N;;;;; B06A;HANGUL SYLLABLE GGYILM;Lo;0;L;;;;;N;;;;; B06B;HANGUL SYLLABLE GGYILB;Lo;0;L;;;;;N;;;;; B06C;HANGUL SYLLABLE GGYILS;Lo;0;L;;;;;N;;;;; B06D;HANGUL SYLLABLE GGYILT;Lo;0;L;;;;;N;;;;; B06E;HANGUL SYLLABLE GGYILP;Lo;0;L;;;;;N;;;;; B06F;HANGUL SYLLABLE GGYILH;Lo;0;L;;;;;N;;;;; B070;HANGUL SYLLABLE GGYIM;Lo;0;L;;;;;N;;;;; B071;HANGUL SYLLABLE GGYIB;Lo;0;L;;;;;N;;;;; B072;HANGUL SYLLABLE GGYIBS;Lo;0;L;;;;;N;;;;; B073;HANGUL SYLLABLE GGYIS;Lo;0;L;;;;;N;;;;; B074;HANGUL SYLLABLE GGYISS;Lo;0;L;;;;;N;;;;; B075;HANGUL SYLLABLE GGYING;Lo;0;L;;;;;N;;;;; B076;HANGUL SYLLABLE GGYIJ;Lo;0;L;;;;;N;;;;; B077;HANGUL SYLLABLE GGYIC;Lo;0;L;;;;;N;;;;; B078;HANGUL SYLLABLE GGYIK;Lo;0;L;;;;;N;;;;; B079;HANGUL SYLLABLE GGYIT;Lo;0;L;;;;;N;;;;; B07A;HANGUL SYLLABLE GGYIP;Lo;0;L;;;;;N;;;;; B07B;HANGUL SYLLABLE GGYIH;Lo;0;L;;;;;N;;;;; B07C;HANGUL SYLLABLE GGI;Lo;0;L;;;;;N;;;;; B07D;HANGUL SYLLABLE GGIG;Lo;0;L;;;;;N;;;;; B07E;HANGUL SYLLABLE GGIGG;Lo;0;L;;;;;N;;;;; B07F;HANGUL SYLLABLE GGIGS;Lo;0;L;;;;;N;;;;; B080;HANGUL SYLLABLE GGIN;Lo;0;L;;;;;N;;;;; B081;HANGUL SYLLABLE GGINI;Lo;0;L;;;;;N;;;;; B082;HANGUL SYLLABLE GGINH;Lo;0;L;;;;;N;;;;; B083;HANGUL SYLLABLE GGID;Lo;0;L;;;;;N;;;;; B084;HANGUL SYLLABLE GGIL;Lo;0;L;;;;;N;;;;; B085;HANGUL SYLLABLE GGILG;Lo;0;L;;;;;N;;;;; B086;HANGUL SYLLABLE GGILM;Lo;0;L;;;;;N;;;;; B087;HANGUL SYLLABLE GGILB;Lo;0;L;;;;;N;;;;; B088;HANGUL SYLLABLE GGILS;Lo;0;L;;;;;N;;;;; B089;HANGUL SYLLABLE GGILT;Lo;0;L;;;;;N;;;;; B08A;HANGUL SYLLABLE GGILP;Lo;0;L;;;;;N;;;;; B08B;HANGUL SYLLABLE GGILH;Lo;0;L;;;;;N;;;;; B08C;HANGUL SYLLABLE GGIM;Lo;0;L;;;;;N;;;;; B08D;HANGUL SYLLABLE GGIB;Lo;0;L;;;;;N;;;;; B08E;HANGUL SYLLABLE GGIBS;Lo;0;L;;;;;N;;;;; B08F;HANGUL SYLLABLE GGIS;Lo;0;L;;;;;N;;;;; B090;HANGUL SYLLABLE GGISS;Lo;0;L;;;;;N;;;;; B091;HANGUL SYLLABLE GGING;Lo;0;L;;;;;N;;;;; B092;HANGUL SYLLABLE GGIJ;Lo;0;L;;;;;N;;;;; B093;HANGUL SYLLABLE GGIC;Lo;0;L;;;;;N;;;;; B094;HANGUL SYLLABLE GGIK;Lo;0;L;;;;;N;;;;; B095;HANGUL SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; B096;HANGUL SYLLABLE GGIP;Lo;0;L;;;;;N;;;;; B097;HANGUL SYLLABLE GGIH;Lo;0;L;;;;;N;;;;; B098;HANGUL SYLLABLE NA;Lo;0;L;;;;;N;;;;; B099;HANGUL SYLLABLE NAG;Lo;0;L;;;;;N;;;;; B09A;HANGUL SYLLABLE NAGG;Lo;0;L;;;;;N;;;;; B09B;HANGUL SYLLABLE NAGS;Lo;0;L;;;;;N;;;;; B09C;HANGUL SYLLABLE NAN;Lo;0;L;;;;;N;;;;; B09D;HANGUL SYLLABLE NANI;Lo;0;L;;;;;N;;;;; B09E;HANGUL SYLLABLE NANH;Lo;0;L;;;;;N;;;;; B09F;HANGUL SYLLABLE NAD;Lo;0;L;;;;;N;;;;; B0A0;HANGUL SYLLABLE NAL;Lo;0;L;;;;;N;;;;; B0A1;HANGUL SYLLABLE NALG;Lo;0;L;;;;;N;;;;; B0A2;HANGUL SYLLABLE NALM;Lo;0;L;;;;;N;;;;; B0A3;HANGUL SYLLABLE NALB;Lo;0;L;;;;;N;;;;; B0A4;HANGUL SYLLABLE NALS;Lo;0;L;;;;;N;;;;; B0A5;HANGUL SYLLABLE NALT;Lo;0;L;;;;;N;;;;; B0A6;HANGUL SYLLABLE NALP;Lo;0;L;;;;;N;;;;; B0A7;HANGUL SYLLABLE NALH;Lo;0;L;;;;;N;;;;; B0A8;HANGUL SYLLABLE NAM;Lo;0;L;;;;;N;;;;; B0A9;HANGUL SYLLABLE NAB;Lo;0;L;;;;;N;;;;; B0AA;HANGUL SYLLABLE NABS;Lo;0;L;;;;;N;;;;; B0AB;HANGUL SYLLABLE NAS;Lo;0;L;;;;;N;;;;; B0AC;HANGUL SYLLABLE NASS;Lo;0;L;;;;;N;;;;; B0AD;HANGUL SYLLABLE NANG;Lo;0;L;;;;;N;;;;; B0AE;HANGUL SYLLABLE NAJ;Lo;0;L;;;;;N;;;;; B0AF;HANGUL SYLLABLE NAC;Lo;0;L;;;;;N;;;;; B0B0;HANGUL SYLLABLE NAK;Lo;0;L;;;;;N;;;;; B0B1;HANGUL SYLLABLE NAT;Lo;0;L;;;;;N;;;;; B0B2;HANGUL SYLLABLE NAP;Lo;0;L;;;;;N;;;;; B0B3;HANGUL SYLLABLE NAH;Lo;0;L;;;;;N;;;;; B0B4;HANGUL SYLLABLE NAE;Lo;0;L;;;;;N;;;;; B0B5;HANGUL SYLLABLE NAEG;Lo;0;L;;;;;N;;;;; B0B6;HANGUL SYLLABLE NAEGG;Lo;0;L;;;;;N;;;;; B0B7;HANGUL SYLLABLE NAEGS;Lo;0;L;;;;;N;;;;; B0B8;HANGUL SYLLABLE NAEN;Lo;0;L;;;;;N;;;;; B0B9;HANGUL SYLLABLE NAENI;Lo;0;L;;;;;N;;;;; B0BA;HANGUL SYLLABLE NAENH;Lo;0;L;;;;;N;;;;; B0BB;HANGUL SYLLABLE NAED;Lo;0;L;;;;;N;;;;; B0BC;HANGUL SYLLABLE NAEL;Lo;0;L;;;;;N;;;;; B0BD;HANGUL SYLLABLE NAELG;Lo;0;L;;;;;N;;;;; B0BE;HANGUL SYLLABLE NAELM;Lo;0;L;;;;;N;;;;; B0BF;HANGUL SYLLABLE NAELB;Lo;0;L;;;;;N;;;;; B0C0;HANGUL SYLLABLE NAELS;Lo;0;L;;;;;N;;;;; B0C1;HANGUL SYLLABLE NAELT;Lo;0;L;;;;;N;;;;; B0C2;HANGUL SYLLABLE NAELP;Lo;0;L;;;;;N;;;;; B0C3;HANGUL SYLLABLE NAELH;Lo;0;L;;;;;N;;;;; B0C4;HANGUL SYLLABLE NAEM;Lo;0;L;;;;;N;;;;; B0C5;HANGUL SYLLABLE NAEB;Lo;0;L;;;;;N;;;;; B0C6;HANGUL SYLLABLE NAEBS;Lo;0;L;;;;;N;;;;; B0C7;HANGUL SYLLABLE NAES;Lo;0;L;;;;;N;;;;; B0C8;HANGUL SYLLABLE NAESS;Lo;0;L;;;;;N;;;;; B0C9;HANGUL SYLLABLE NAENG;Lo;0;L;;;;;N;;;;; B0CA;HANGUL SYLLABLE NAEJ;Lo;0;L;;;;;N;;;;; B0CB;HANGUL SYLLABLE NAEC;Lo;0;L;;;;;N;;;;; B0CC;HANGUL SYLLABLE NAEK;Lo;0;L;;;;;N;;;;; B0CD;HANGUL SYLLABLE NAET;Lo;0;L;;;;;N;;;;; B0CE;HANGUL SYLLABLE NAEP;Lo;0;L;;;;;N;;;;; B0CF;HANGUL SYLLABLE NAEH;Lo;0;L;;;;;N;;;;; B0D0;HANGUL SYLLABLE NYA;Lo;0;L;;;;;N;;;;; B0D1;HANGUL SYLLABLE NYAG;Lo;0;L;;;;;N;;;;; B0D2;HANGUL SYLLABLE NYAGG;Lo;0;L;;;;;N;;;;; B0D3;HANGUL SYLLABLE NYAGS;Lo;0;L;;;;;N;;;;; B0D4;HANGUL SYLLABLE NYAN;Lo;0;L;;;;;N;;;;; B0D5;HANGUL SYLLABLE NYANI;Lo;0;L;;;;;N;;;;; B0D6;HANGUL SYLLABLE NYANH;Lo;0;L;;;;;N;;;;; B0D7;HANGUL SYLLABLE NYAD;Lo;0;L;;;;;N;;;;; B0D8;HANGUL SYLLABLE NYAL;Lo;0;L;;;;;N;;;;; B0D9;HANGUL SYLLABLE NYALG;Lo;0;L;;;;;N;;;;; B0DA;HANGUL SYLLABLE NYALM;Lo;0;L;;;;;N;;;;; B0DB;HANGUL SYLLABLE NYALB;Lo;0;L;;;;;N;;;;; B0DC;HANGUL SYLLABLE NYALS;Lo;0;L;;;;;N;;;;; B0DD;HANGUL SYLLABLE NYALT;Lo;0;L;;;;;N;;;;; B0DE;HANGUL SYLLABLE NYALP;Lo;0;L;;;;;N;;;;; B0DF;HANGUL SYLLABLE NYALH;Lo;0;L;;;;;N;;;;; B0E0;HANGUL SYLLABLE NYAM;Lo;0;L;;;;;N;;;;; B0E1;HANGUL SYLLABLE NYAB;Lo;0;L;;;;;N;;;;; B0E2;HANGUL SYLLABLE NYABS;Lo;0;L;;;;;N;;;;; B0E3;HANGUL SYLLABLE NYAS;Lo;0;L;;;;;N;;;;; B0E4;HANGUL SYLLABLE NYASS;Lo;0;L;;;;;N;;;;; B0E5;HANGUL SYLLABLE NYANG;Lo;0;L;;;;;N;;;;; B0E6;HANGUL SYLLABLE NYAJ;Lo;0;L;;;;;N;;;;; B0E7;HANGUL SYLLABLE NYAC;Lo;0;L;;;;;N;;;;; B0E8;HANGUL SYLLABLE NYAK;Lo;0;L;;;;;N;;;;; B0E9;HANGUL SYLLABLE NYAT;Lo;0;L;;;;;N;;;;; B0EA;HANGUL SYLLABLE NYAP;Lo;0;L;;;;;N;;;;; B0EB;HANGUL SYLLABLE NYAH;Lo;0;L;;;;;N;;;;; B0EC;HANGUL SYLLABLE NYAE;Lo;0;L;;;;;N;;;;; B0ED;HANGUL SYLLABLE NYAEG;Lo;0;L;;;;;N;;;;; B0EE;HANGUL SYLLABLE NYAEGG;Lo;0;L;;;;;N;;;;; B0EF;HANGUL SYLLABLE NYAEGS;Lo;0;L;;;;;N;;;;; B0F0;HANGUL SYLLABLE NYAEN;Lo;0;L;;;;;N;;;;; B0F1;HANGUL SYLLABLE NYAENI;Lo;0;L;;;;;N;;;;; B0F2;HANGUL SYLLABLE NYAENH;Lo;0;L;;;;;N;;;;; B0F3;HANGUL SYLLABLE NYAED;Lo;0;L;;;;;N;;;;; B0F4;HANGUL SYLLABLE NYAEL;Lo;0;L;;;;;N;;;;; B0F5;HANGUL SYLLABLE NYAELG;Lo;0;L;;;;;N;;;;; B0F6;HANGUL SYLLABLE NYAELM;Lo;0;L;;;;;N;;;;; B0F7;HANGUL SYLLABLE NYAELB;Lo;0;L;;;;;N;;;;; B0F8;HANGUL SYLLABLE NYAELS;Lo;0;L;;;;;N;;;;; B0F9;HANGUL SYLLABLE NYAELT;Lo;0;L;;;;;N;;;;; B0FA;HANGUL SYLLABLE NYAELP;Lo;0;L;;;;;N;;;;; B0FB;HANGUL SYLLABLE NYAELH;Lo;0;L;;;;;N;;;;; B0FC;HANGUL SYLLABLE NYAEM;Lo;0;L;;;;;N;;;;; B0FD;HANGUL SYLLABLE NYAEB;Lo;0;L;;;;;N;;;;; B0FE;HANGUL SYLLABLE NYAEBS;Lo;0;L;;;;;N;;;;; B0FF;HANGUL SYLLABLE NYAES;Lo;0;L;;;;;N;;;;; B100;HANGUL SYLLABLE NYAESS;Lo;0;L;;;;;N;;;;; B101;HANGUL SYLLABLE NYAENG;Lo;0;L;;;;;N;;;;; B102;HANGUL SYLLABLE NYAEJ;Lo;0;L;;;;;N;;;;; B103;HANGUL SYLLABLE NYAEC;Lo;0;L;;;;;N;;;;; B104;HANGUL SYLLABLE NYAEK;Lo;0;L;;;;;N;;;;; B105;HANGUL SYLLABLE NYAET;Lo;0;L;;;;;N;;;;; B106;HANGUL SYLLABLE NYAEP;Lo;0;L;;;;;N;;;;; B107;HANGUL SYLLABLE NYAEH;Lo;0;L;;;;;N;;;;; B108;HANGUL SYLLABLE NEO;Lo;0;L;;;;;N;;;;; B109;HANGUL SYLLABLE NEOG;Lo;0;L;;;;;N;;;;; B10A;HANGUL SYLLABLE NEOGG;Lo;0;L;;;;;N;;;;; B10B;HANGUL SYLLABLE NEOGS;Lo;0;L;;;;;N;;;;; B10C;HANGUL SYLLABLE NEON;Lo;0;L;;;;;N;;;;; B10D;HANGUL SYLLABLE NEONI;Lo;0;L;;;;;N;;;;; B10E;HANGUL SYLLABLE NEONH;Lo;0;L;;;;;N;;;;; B10F;HANGUL SYLLABLE NEOD;Lo;0;L;;;;;N;;;;; B110;HANGUL SYLLABLE NEOL;Lo;0;L;;;;;N;;;;; B111;HANGUL SYLLABLE NEOLG;Lo;0;L;;;;;N;;;;; B112;HANGUL SYLLABLE NEOLM;Lo;0;L;;;;;N;;;;; B113;HANGUL SYLLABLE NEOLB;Lo;0;L;;;;;N;;;;; B114;HANGUL SYLLABLE NEOLS;Lo;0;L;;;;;N;;;;; B115;HANGUL SYLLABLE NEOLT;Lo;0;L;;;;;N;;;;; B116;HANGUL SYLLABLE NEOLP;Lo;0;L;;;;;N;;;;; B117;HANGUL SYLLABLE NEOLH;Lo;0;L;;;;;N;;;;; B118;HANGUL SYLLABLE NEOM;Lo;0;L;;;;;N;;;;; B119;HANGUL SYLLABLE NEOB;Lo;0;L;;;;;N;;;;; B11A;HANGUL SYLLABLE NEOBS;Lo;0;L;;;;;N;;;;; B11B;HANGUL SYLLABLE NEOS;Lo;0;L;;;;;N;;;;; B11C;HANGUL SYLLABLE NEOSS;Lo;0;L;;;;;N;;;;; B11D;HANGUL SYLLABLE NEONG;Lo;0;L;;;;;N;;;;; B11E;HANGUL SYLLABLE NEOJ;Lo;0;L;;;;;N;;;;; B11F;HANGUL SYLLABLE NEOC;Lo;0;L;;;;;N;;;;; B120;HANGUL SYLLABLE NEOK;Lo;0;L;;;;;N;;;;; B121;HANGUL SYLLABLE NEOT;Lo;0;L;;;;;N;;;;; B122;HANGUL SYLLABLE NEOP;Lo;0;L;;;;;N;;;;; B123;HANGUL SYLLABLE NEOH;Lo;0;L;;;;;N;;;;; B124;HANGUL SYLLABLE NE;Lo;0;L;;;;;N;;;;; B125;HANGUL SYLLABLE NEG;Lo;0;L;;;;;N;;;;; B126;HANGUL SYLLABLE NEGG;Lo;0;L;;;;;N;;;;; B127;HANGUL SYLLABLE NEGS;Lo;0;L;;;;;N;;;;; B128;HANGUL SYLLABLE NEN;Lo;0;L;;;;;N;;;;; B129;HANGUL SYLLABLE NENI;Lo;0;L;;;;;N;;;;; B12A;HANGUL SYLLABLE NENH;Lo;0;L;;;;;N;;;;; B12B;HANGUL SYLLABLE NED;Lo;0;L;;;;;N;;;;; B12C;HANGUL SYLLABLE NEL;Lo;0;L;;;;;N;;;;; B12D;HANGUL SYLLABLE NELG;Lo;0;L;;;;;N;;;;; B12E;HANGUL SYLLABLE NELM;Lo;0;L;;;;;N;;;;; B12F;HANGUL SYLLABLE NELB;Lo;0;L;;;;;N;;;;; B130;HANGUL SYLLABLE NELS;Lo;0;L;;;;;N;;;;; B131;HANGUL SYLLABLE NELT;Lo;0;L;;;;;N;;;;; B132;HANGUL SYLLABLE NELP;Lo;0;L;;;;;N;;;;; B133;HANGUL SYLLABLE NELH;Lo;0;L;;;;;N;;;;; B134;HANGUL SYLLABLE NEM;Lo;0;L;;;;;N;;;;; B135;HANGUL SYLLABLE NEB;Lo;0;L;;;;;N;;;;; B136;HANGUL SYLLABLE NEBS;Lo;0;L;;;;;N;;;;; B137;HANGUL SYLLABLE NES;Lo;0;L;;;;;N;;;;; B138;HANGUL SYLLABLE NESS;Lo;0;L;;;;;N;;;;; B139;HANGUL SYLLABLE NENG;Lo;0;L;;;;;N;;;;; B13A;HANGUL SYLLABLE NEJ;Lo;0;L;;;;;N;;;;; B13B;HANGUL SYLLABLE NEC;Lo;0;L;;;;;N;;;;; B13C;HANGUL SYLLABLE NEK;Lo;0;L;;;;;N;;;;; B13D;HANGUL SYLLABLE NET;Lo;0;L;;;;;N;;;;; B13E;HANGUL SYLLABLE NEP;Lo;0;L;;;;;N;;;;; B13F;HANGUL SYLLABLE NEH;Lo;0;L;;;;;N;;;;; B140;HANGUL SYLLABLE NYEO;Lo;0;L;;;;;N;;;;; B141;HANGUL SYLLABLE NYEOG;Lo;0;L;;;;;N;;;;; B142;HANGUL SYLLABLE NYEOGG;Lo;0;L;;;;;N;;;;; B143;HANGUL SYLLABLE NYEOGS;Lo;0;L;;;;;N;;;;; B144;HANGUL SYLLABLE NYEON;Lo;0;L;;;;;N;;;;; B145;HANGUL SYLLABLE NYEONI;Lo;0;L;;;;;N;;;;; B146;HANGUL SYLLABLE NYEONH;Lo;0;L;;;;;N;;;;; B147;HANGUL SYLLABLE NYEOD;Lo;0;L;;;;;N;;;;; B148;HANGUL SYLLABLE NYEOL;Lo;0;L;;;;;N;;;;; B149;HANGUL SYLLABLE NYEOLG;Lo;0;L;;;;;N;;;;; B14A;HANGUL SYLLABLE NYEOLM;Lo;0;L;;;;;N;;;;; B14B;HANGUL SYLLABLE NYEOLB;Lo;0;L;;;;;N;;;;; B14C;HANGUL SYLLABLE NYEOLS;Lo;0;L;;;;;N;;;;; B14D;HANGUL SYLLABLE NYEOLT;Lo;0;L;;;;;N;;;;; B14E;HANGUL SYLLABLE NYEOLP;Lo;0;L;;;;;N;;;;; B14F;HANGUL SYLLABLE NYEOLH;Lo;0;L;;;;;N;;;;; B150;HANGUL SYLLABLE NYEOM;Lo;0;L;;;;;N;;;;; B151;HANGUL SYLLABLE NYEOB;Lo;0;L;;;;;N;;;;; B152;HANGUL SYLLABLE NYEOBS;Lo;0;L;;;;;N;;;;; B153;HANGUL SYLLABLE NYEOS;Lo;0;L;;;;;N;;;;; B154;HANGUL SYLLABLE NYEOSS;Lo;0;L;;;;;N;;;;; B155;HANGUL SYLLABLE NYEONG;Lo;0;L;;;;;N;;;;; B156;HANGUL SYLLABLE NYEOJ;Lo;0;L;;;;;N;;;;; B157;HANGUL SYLLABLE NYEOC;Lo;0;L;;;;;N;;;;; B158;HANGUL SYLLABLE NYEOK;Lo;0;L;;;;;N;;;;; B159;HANGUL SYLLABLE NYEOT;Lo;0;L;;;;;N;;;;; B15A;HANGUL SYLLABLE NYEOP;Lo;0;L;;;;;N;;;;; B15B;HANGUL SYLLABLE NYEOH;Lo;0;L;;;;;N;;;;; B15C;HANGUL SYLLABLE NYE;Lo;0;L;;;;;N;;;;; B15D;HANGUL SYLLABLE NYEG;Lo;0;L;;;;;N;;;;; B15E;HANGUL SYLLABLE NYEGG;Lo;0;L;;;;;N;;;;; B15F;HANGUL SYLLABLE NYEGS;Lo;0;L;;;;;N;;;;; B160;HANGUL SYLLABLE NYEN;Lo;0;L;;;;;N;;;;; B161;HANGUL SYLLABLE NYENI;Lo;0;L;;;;;N;;;;; B162;HANGUL SYLLABLE NYENH;Lo;0;L;;;;;N;;;;; B163;HANGUL SYLLABLE NYED;Lo;0;L;;;;;N;;;;; B164;HANGUL SYLLABLE NYEL;Lo;0;L;;;;;N;;;;; B165;HANGUL SYLLABLE NYELG;Lo;0;L;;;;;N;;;;; B166;HANGUL SYLLABLE NYELM;Lo;0;L;;;;;N;;;;; B167;HANGUL SYLLABLE NYELB;Lo;0;L;;;;;N;;;;; B168;HANGUL SYLLABLE NYELS;Lo;0;L;;;;;N;;;;; B169;HANGUL SYLLABLE NYELT;Lo;0;L;;;;;N;;;;; B16A;HANGUL SYLLABLE NYELP;Lo;0;L;;;;;N;;;;; B16B;HANGUL SYLLABLE NYELH;Lo;0;L;;;;;N;;;;; B16C;HANGUL SYLLABLE NYEM;Lo;0;L;;;;;N;;;;; B16D;HANGUL SYLLABLE NYEB;Lo;0;L;;;;;N;;;;; B16E;HANGUL SYLLABLE NYEBS;Lo;0;L;;;;;N;;;;; B16F;HANGUL SYLLABLE NYES;Lo;0;L;;;;;N;;;;; B170;HANGUL SYLLABLE NYESS;Lo;0;L;;;;;N;;;;; B171;HANGUL SYLLABLE NYENG;Lo;0;L;;;;;N;;;;; B172;HANGUL SYLLABLE NYEJ;Lo;0;L;;;;;N;;;;; B173;HANGUL SYLLABLE NYEC;Lo;0;L;;;;;N;;;;; B174;HANGUL SYLLABLE NYEK;Lo;0;L;;;;;N;;;;; B175;HANGUL SYLLABLE NYET;Lo;0;L;;;;;N;;;;; B176;HANGUL SYLLABLE NYEP;Lo;0;L;;;;;N;;;;; B177;HANGUL SYLLABLE NYEH;Lo;0;L;;;;;N;;;;; B178;HANGUL SYLLABLE NO;Lo;0;L;;;;;N;;;;; B179;HANGUL SYLLABLE NOG;Lo;0;L;;;;;N;;;;; B17A;HANGUL SYLLABLE NOGG;Lo;0;L;;;;;N;;;;; B17B;HANGUL SYLLABLE NOGS;Lo;0;L;;;;;N;;;;; B17C;HANGUL SYLLABLE NON;Lo;0;L;;;;;N;;;;; B17D;HANGUL SYLLABLE NONI;Lo;0;L;;;;;N;;;;; B17E;HANGUL SYLLABLE NONH;Lo;0;L;;;;;N;;;;; B17F;HANGUL SYLLABLE NOD;Lo;0;L;;;;;N;;;;; B180;HANGUL SYLLABLE NOL;Lo;0;L;;;;;N;;;;; B181;HANGUL SYLLABLE NOLG;Lo;0;L;;;;;N;;;;; B182;HANGUL SYLLABLE NOLM;Lo;0;L;;;;;N;;;;; B183;HANGUL SYLLABLE NOLB;Lo;0;L;;;;;N;;;;; B184;HANGUL SYLLABLE NOLS;Lo;0;L;;;;;N;;;;; B185;HANGUL SYLLABLE NOLT;Lo;0;L;;;;;N;;;;; B186;HANGUL SYLLABLE NOLP;Lo;0;L;;;;;N;;;;; B187;HANGUL SYLLABLE NOLH;Lo;0;L;;;;;N;;;;; B188;HANGUL SYLLABLE NOM;Lo;0;L;;;;;N;;;;; B189;HANGUL SYLLABLE NOB;Lo;0;L;;;;;N;;;;; B18A;HANGUL SYLLABLE NOBS;Lo;0;L;;;;;N;;;;; B18B;HANGUL SYLLABLE NOS;Lo;0;L;;;;;N;;;;; B18C;HANGUL SYLLABLE NOSS;Lo;0;L;;;;;N;;;;; B18D;HANGUL SYLLABLE NONG;Lo;0;L;;;;;N;;;;; B18E;HANGUL SYLLABLE NOJ;Lo;0;L;;;;;N;;;;; B18F;HANGUL SYLLABLE NOC;Lo;0;L;;;;;N;;;;; B190;HANGUL SYLLABLE NOK;Lo;0;L;;;;;N;;;;; B191;HANGUL SYLLABLE NOT;Lo;0;L;;;;;N;;;;; B192;HANGUL SYLLABLE NOP;Lo;0;L;;;;;N;;;;; B193;HANGUL SYLLABLE NOH;Lo;0;L;;;;;N;;;;; B194;HANGUL SYLLABLE NWA;Lo;0;L;;;;;N;;;;; B195;HANGUL SYLLABLE NWAG;Lo;0;L;;;;;N;;;;; B196;HANGUL SYLLABLE NWAGG;Lo;0;L;;;;;N;;;;; B197;HANGUL SYLLABLE NWAGS;Lo;0;L;;;;;N;;;;; B198;HANGUL SYLLABLE NWAN;Lo;0;L;;;;;N;;;;; B199;HANGUL SYLLABLE NWANI;Lo;0;L;;;;;N;;;;; B19A;HANGUL SYLLABLE NWANH;Lo;0;L;;;;;N;;;;; B19B;HANGUL SYLLABLE NWAD;Lo;0;L;;;;;N;;;;; B19C;HANGUL SYLLABLE NWAL;Lo;0;L;;;;;N;;;;; B19D;HANGUL SYLLABLE NWALG;Lo;0;L;;;;;N;;;;; B19E;HANGUL SYLLABLE NWALM;Lo;0;L;;;;;N;;;;; B19F;HANGUL SYLLABLE NWALB;Lo;0;L;;;;;N;;;;; B1A0;HANGUL SYLLABLE NWALS;Lo;0;L;;;;;N;;;;; B1A1;HANGUL SYLLABLE NWALT;Lo;0;L;;;;;N;;;;; B1A2;HANGUL SYLLABLE NWALP;Lo;0;L;;;;;N;;;;; B1A3;HANGUL SYLLABLE NWALH;Lo;0;L;;;;;N;;;;; B1A4;HANGUL SYLLABLE NWAM;Lo;0;L;;;;;N;;;;; B1A5;HANGUL SYLLABLE NWAB;Lo;0;L;;;;;N;;;;; B1A6;HANGUL SYLLABLE NWABS;Lo;0;L;;;;;N;;;;; B1A7;HANGUL SYLLABLE NWAS;Lo;0;L;;;;;N;;;;; B1A8;HANGUL SYLLABLE NWASS;Lo;0;L;;;;;N;;;;; B1A9;HANGUL SYLLABLE NWANG;Lo;0;L;;;;;N;;;;; B1AA;HANGUL SYLLABLE NWAJ;Lo;0;L;;;;;N;;;;; B1AB;HANGUL SYLLABLE NWAC;Lo;0;L;;;;;N;;;;; B1AC;HANGUL SYLLABLE NWAK;Lo;0;L;;;;;N;;;;; B1AD;HANGUL SYLLABLE NWAT;Lo;0;L;;;;;N;;;;; B1AE;HANGUL SYLLABLE NWAP;Lo;0;L;;;;;N;;;;; B1AF;HANGUL SYLLABLE NWAH;Lo;0;L;;;;;N;;;;; B1B0;HANGUL SYLLABLE NWAE;Lo;0;L;;;;;N;;;;; B1B1;HANGUL SYLLABLE NWAEG;Lo;0;L;;;;;N;;;;; B1B2;HANGUL SYLLABLE NWAEGG;Lo;0;L;;;;;N;;;;; B1B3;HANGUL SYLLABLE NWAEGS;Lo;0;L;;;;;N;;;;; B1B4;HANGUL SYLLABLE NWAEN;Lo;0;L;;;;;N;;;;; B1B5;HANGUL SYLLABLE NWAENI;Lo;0;L;;;;;N;;;;; B1B6;HANGUL SYLLABLE NWAENH;Lo;0;L;;;;;N;;;;; B1B7;HANGUL SYLLABLE NWAED;Lo;0;L;;;;;N;;;;; B1B8;HANGUL SYLLABLE NWAEL;Lo;0;L;;;;;N;;;;; B1B9;HANGUL SYLLABLE NWAELG;Lo;0;L;;;;;N;;;;; B1BA;HANGUL SYLLABLE NWAELM;Lo;0;L;;;;;N;;;;; B1BB;HANGUL SYLLABLE NWAELB;Lo;0;L;;;;;N;;;;; B1BC;HANGUL SYLLABLE NWAELS;Lo;0;L;;;;;N;;;;; B1BD;HANGUL SYLLABLE NWAELT;Lo;0;L;;;;;N;;;;; B1BE;HANGUL SYLLABLE NWAELP;Lo;0;L;;;;;N;;;;; B1BF;HANGUL SYLLABLE NWAELH;Lo;0;L;;;;;N;;;;; B1C0;HANGUL SYLLABLE NWAEM;Lo;0;L;;;;;N;;;;; B1C1;HANGUL SYLLABLE NWAEB;Lo;0;L;;;;;N;;;;; B1C2;HANGUL SYLLABLE NWAEBS;Lo;0;L;;;;;N;;;;; B1C3;HANGUL SYLLABLE NWAES;Lo;0;L;;;;;N;;;;; B1C4;HANGUL SYLLABLE NWAESS;Lo;0;L;;;;;N;;;;; B1C5;HANGUL SYLLABLE NWAENG;Lo;0;L;;;;;N;;;;; B1C6;HANGUL SYLLABLE NWAEJ;Lo;0;L;;;;;N;;;;; B1C7;HANGUL SYLLABLE NWAEC;Lo;0;L;;;;;N;;;;; B1C8;HANGUL SYLLABLE NWAEK;Lo;0;L;;;;;N;;;;; B1C9;HANGUL SYLLABLE NWAET;Lo;0;L;;;;;N;;;;; B1CA;HANGUL SYLLABLE NWAEP;Lo;0;L;;;;;N;;;;; B1CB;HANGUL SYLLABLE NWAEH;Lo;0;L;;;;;N;;;;; B1CC;HANGUL SYLLABLE NOE;Lo;0;L;;;;;N;;;;; B1CD;HANGUL SYLLABLE NOEG;Lo;0;L;;;;;N;;;;; B1CE;HANGUL SYLLABLE NOEGG;Lo;0;L;;;;;N;;;;; B1CF;HANGUL SYLLABLE NOEGS;Lo;0;L;;;;;N;;;;; B1D0;HANGUL SYLLABLE NOEN;Lo;0;L;;;;;N;;;;; B1D1;HANGUL SYLLABLE NOENI;Lo;0;L;;;;;N;;;;; B1D2;HANGUL SYLLABLE NOENH;Lo;0;L;;;;;N;;;;; B1D3;HANGUL SYLLABLE NOED;Lo;0;L;;;;;N;;;;; B1D4;HANGUL SYLLABLE NOEL;Lo;0;L;;;;;N;;;;; B1D5;HANGUL SYLLABLE NOELG;Lo;0;L;;;;;N;;;;; B1D6;HANGUL SYLLABLE NOELM;Lo;0;L;;;;;N;;;;; B1D7;HANGUL SYLLABLE NOELB;Lo;0;L;;;;;N;;;;; B1D8;HANGUL SYLLABLE NOELS;Lo;0;L;;;;;N;;;;; B1D9;HANGUL SYLLABLE NOELT;Lo;0;L;;;;;N;;;;; B1DA;HANGUL SYLLABLE NOELP;Lo;0;L;;;;;N;;;;; B1DB;HANGUL SYLLABLE NOELH;Lo;0;L;;;;;N;;;;; B1DC;HANGUL SYLLABLE NOEM;Lo;0;L;;;;;N;;;;; B1DD;HANGUL SYLLABLE NOEB;Lo;0;L;;;;;N;;;;; B1DE;HANGUL SYLLABLE NOEBS;Lo;0;L;;;;;N;;;;; B1DF;HANGUL SYLLABLE NOES;Lo;0;L;;;;;N;;;;; B1E0;HANGUL SYLLABLE NOESS;Lo;0;L;;;;;N;;;;; B1E1;HANGUL SYLLABLE NOENG;Lo;0;L;;;;;N;;;;; B1E2;HANGUL SYLLABLE NOEJ;Lo;0;L;;;;;N;;;;; B1E3;HANGUL SYLLABLE NOEC;Lo;0;L;;;;;N;;;;; B1E4;HANGUL SYLLABLE NOEK;Lo;0;L;;;;;N;;;;; B1E5;HANGUL SYLLABLE NOET;Lo;0;L;;;;;N;;;;; B1E6;HANGUL SYLLABLE NOEP;Lo;0;L;;;;;N;;;;; B1E7;HANGUL SYLLABLE NOEH;Lo;0;L;;;;;N;;;;; B1E8;HANGUL SYLLABLE NYO;Lo;0;L;;;;;N;;;;; B1E9;HANGUL SYLLABLE NYOG;Lo;0;L;;;;;N;;;;; B1EA;HANGUL SYLLABLE NYOGG;Lo;0;L;;;;;N;;;;; B1EB;HANGUL SYLLABLE NYOGS;Lo;0;L;;;;;N;;;;; B1EC;HANGUL SYLLABLE NYON;Lo;0;L;;;;;N;;;;; B1ED;HANGUL SYLLABLE NYONI;Lo;0;L;;;;;N;;;;; B1EE;HANGUL SYLLABLE NYONH;Lo;0;L;;;;;N;;;;; B1EF;HANGUL SYLLABLE NYOD;Lo;0;L;;;;;N;;;;; B1F0;HANGUL SYLLABLE NYOL;Lo;0;L;;;;;N;;;;; B1F1;HANGUL SYLLABLE NYOLG;Lo;0;L;;;;;N;;;;; B1F2;HANGUL SYLLABLE NYOLM;Lo;0;L;;;;;N;;;;; B1F3;HANGUL SYLLABLE NYOLB;Lo;0;L;;;;;N;;;;; B1F4;HANGUL SYLLABLE NYOLS;Lo;0;L;;;;;N;;;;; B1F5;HANGUL SYLLABLE NYOLT;Lo;0;L;;;;;N;;;;; B1F6;HANGUL SYLLABLE NYOLP;Lo;0;L;;;;;N;;;;; B1F7;HANGUL SYLLABLE NYOLH;Lo;0;L;;;;;N;;;;; B1F8;HANGUL SYLLABLE NYOM;Lo;0;L;;;;;N;;;;; B1F9;HANGUL SYLLABLE NYOB;Lo;0;L;;;;;N;;;;; B1FA;HANGUL SYLLABLE NYOBS;Lo;0;L;;;;;N;;;;; B1FB;HANGUL SYLLABLE NYOS;Lo;0;L;;;;;N;;;;; B1FC;HANGUL SYLLABLE NYOSS;Lo;0;L;;;;;N;;;;; B1FD;HANGUL SYLLABLE NYONG;Lo;0;L;;;;;N;;;;; B1FE;HANGUL SYLLABLE NYOJ;Lo;0;L;;;;;N;;;;; B1FF;HANGUL SYLLABLE NYOC;Lo;0;L;;;;;N;;;;; B200;HANGUL SYLLABLE NYOK;Lo;0;L;;;;;N;;;;; B201;HANGUL SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; B202;HANGUL SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; B203;HANGUL SYLLABLE NYOH;Lo;0;L;;;;;N;;;;; B204;HANGUL SYLLABLE NU;Lo;0;L;;;;;N;;;;; B205;HANGUL SYLLABLE NUG;Lo;0;L;;;;;N;;;;; B206;HANGUL SYLLABLE NUGG;Lo;0;L;;;;;N;;;;; B207;HANGUL SYLLABLE NUGS;Lo;0;L;;;;;N;;;;; B208;HANGUL SYLLABLE NUN;Lo;0;L;;;;;N;;;;; B209;HANGUL SYLLABLE NUNI;Lo;0;L;;;;;N;;;;; B20A;HANGUL SYLLABLE NUNH;Lo;0;L;;;;;N;;;;; B20B;HANGUL SYLLABLE NUD;Lo;0;L;;;;;N;;;;; B20C;HANGUL SYLLABLE NUL;Lo;0;L;;;;;N;;;;; B20D;HANGUL SYLLABLE NULG;Lo;0;L;;;;;N;;;;; B20E;HANGUL SYLLABLE NULM;Lo;0;L;;;;;N;;;;; B20F;HANGUL SYLLABLE NULB;Lo;0;L;;;;;N;;;;; B210;HANGUL SYLLABLE NULS;Lo;0;L;;;;;N;;;;; B211;HANGUL SYLLABLE NULT;Lo;0;L;;;;;N;;;;; B212;HANGUL SYLLABLE NULP;Lo;0;L;;;;;N;;;;; B213;HANGUL SYLLABLE NULH;Lo;0;L;;;;;N;;;;; B214;HANGUL SYLLABLE NUM;Lo;0;L;;;;;N;;;;; B215;HANGUL SYLLABLE NUB;Lo;0;L;;;;;N;;;;; B216;HANGUL SYLLABLE NUBS;Lo;0;L;;;;;N;;;;; B217;HANGUL SYLLABLE NUS;Lo;0;L;;;;;N;;;;; B218;HANGUL SYLLABLE NUSS;Lo;0;L;;;;;N;;;;; B219;HANGUL SYLLABLE NUNG;Lo;0;L;;;;;N;;;;; B21A;HANGUL SYLLABLE NUJ;Lo;0;L;;;;;N;;;;; B21B;HANGUL SYLLABLE NUC;Lo;0;L;;;;;N;;;;; B21C;HANGUL SYLLABLE NUK;Lo;0;L;;;;;N;;;;; B21D;HANGUL SYLLABLE NUT;Lo;0;L;;;;;N;;;;; B21E;HANGUL SYLLABLE NUP;Lo;0;L;;;;;N;;;;; B21F;HANGUL SYLLABLE NUH;Lo;0;L;;;;;N;;;;; B220;HANGUL SYLLABLE NWEO;Lo;0;L;;;;;N;;;;; B221;HANGUL SYLLABLE NWEOG;Lo;0;L;;;;;N;;;;; B222;HANGUL SYLLABLE NWEOGG;Lo;0;L;;;;;N;;;;; B223;HANGUL SYLLABLE NWEOGS;Lo;0;L;;;;;N;;;;; B224;HANGUL SYLLABLE NWEON;Lo;0;L;;;;;N;;;;; B225;HANGUL SYLLABLE NWEONI;Lo;0;L;;;;;N;;;;; B226;HANGUL SYLLABLE NWEONH;Lo;0;L;;;;;N;;;;; B227;HANGUL SYLLABLE NWEOD;Lo;0;L;;;;;N;;;;; B228;HANGUL SYLLABLE NWEOL;Lo;0;L;;;;;N;;;;; B229;HANGUL SYLLABLE NWEOLG;Lo;0;L;;;;;N;;;;; B22A;HANGUL SYLLABLE NWEOLM;Lo;0;L;;;;;N;;;;; B22B;HANGUL SYLLABLE NWEOLB;Lo;0;L;;;;;N;;;;; B22C;HANGUL SYLLABLE NWEOLS;Lo;0;L;;;;;N;;;;; B22D;HANGUL SYLLABLE NWEOLT;Lo;0;L;;;;;N;;;;; B22E;HANGUL SYLLABLE NWEOLP;Lo;0;L;;;;;N;;;;; B22F;HANGUL SYLLABLE NWEOLH;Lo;0;L;;;;;N;;;;; B230;HANGUL SYLLABLE NWEOM;Lo;0;L;;;;;N;;;;; B231;HANGUL SYLLABLE NWEOB;Lo;0;L;;;;;N;;;;; B232;HANGUL SYLLABLE NWEOBS;Lo;0;L;;;;;N;;;;; B233;HANGUL SYLLABLE NWEOS;Lo;0;L;;;;;N;;;;; B234;HANGUL SYLLABLE NWEOSS;Lo;0;L;;;;;N;;;;; B235;HANGUL SYLLABLE NWEONG;Lo;0;L;;;;;N;;;;; B236;HANGUL SYLLABLE NWEOJ;Lo;0;L;;;;;N;;;;; B237;HANGUL SYLLABLE NWEOC;Lo;0;L;;;;;N;;;;; B238;HANGUL SYLLABLE NWEOK;Lo;0;L;;;;;N;;;;; B239;HANGUL SYLLABLE NWEOT;Lo;0;L;;;;;N;;;;; B23A;HANGUL SYLLABLE NWEOP;Lo;0;L;;;;;N;;;;; B23B;HANGUL SYLLABLE NWEOH;Lo;0;L;;;;;N;;;;; B23C;HANGUL SYLLABLE NWE;Lo;0;L;;;;;N;;;;; B23D;HANGUL SYLLABLE NWEG;Lo;0;L;;;;;N;;;;; B23E;HANGUL SYLLABLE NWEGG;Lo;0;L;;;;;N;;;;; B23F;HANGUL SYLLABLE NWEGS;Lo;0;L;;;;;N;;;;; B240;HANGUL SYLLABLE NWEN;Lo;0;L;;;;;N;;;;; B241;HANGUL SYLLABLE NWENI;Lo;0;L;;;;;N;;;;; B242;HANGUL SYLLABLE NWENH;Lo;0;L;;;;;N;;;;; B243;HANGUL SYLLABLE NWED;Lo;0;L;;;;;N;;;;; B244;HANGUL SYLLABLE NWEL;Lo;0;L;;;;;N;;;;; B245;HANGUL SYLLABLE NWELG;Lo;0;L;;;;;N;;;;; B246;HANGUL SYLLABLE NWELM;Lo;0;L;;;;;N;;;;; B247;HANGUL SYLLABLE NWELB;Lo;0;L;;;;;N;;;;; B248;HANGUL SYLLABLE NWELS;Lo;0;L;;;;;N;;;;; B249;HANGUL SYLLABLE NWELT;Lo;0;L;;;;;N;;;;; B24A;HANGUL SYLLABLE NWELP;Lo;0;L;;;;;N;;;;; B24B;HANGUL SYLLABLE NWELH;Lo;0;L;;;;;N;;;;; B24C;HANGUL SYLLABLE NWEM;Lo;0;L;;;;;N;;;;; B24D;HANGUL SYLLABLE NWEB;Lo;0;L;;;;;N;;;;; B24E;HANGUL SYLLABLE NWEBS;Lo;0;L;;;;;N;;;;; B24F;HANGUL SYLLABLE NWES;Lo;0;L;;;;;N;;;;; B250;HANGUL SYLLABLE NWESS;Lo;0;L;;;;;N;;;;; B251;HANGUL SYLLABLE NWENG;Lo;0;L;;;;;N;;;;; B252;HANGUL SYLLABLE NWEJ;Lo;0;L;;;;;N;;;;; B253;HANGUL SYLLABLE NWEC;Lo;0;L;;;;;N;;;;; B254;HANGUL SYLLABLE NWEK;Lo;0;L;;;;;N;;;;; B255;HANGUL SYLLABLE NWET;Lo;0;L;;;;;N;;;;; B256;HANGUL SYLLABLE NWEP;Lo;0;L;;;;;N;;;;; B257;HANGUL SYLLABLE NWEH;Lo;0;L;;;;;N;;;;; B258;HANGUL SYLLABLE NWI;Lo;0;L;;;;;N;;;;; B259;HANGUL SYLLABLE NWIG;Lo;0;L;;;;;N;;;;; B25A;HANGUL SYLLABLE NWIGG;Lo;0;L;;;;;N;;;;; B25B;HANGUL SYLLABLE NWIGS;Lo;0;L;;;;;N;;;;; B25C;HANGUL SYLLABLE NWIN;Lo;0;L;;;;;N;;;;; B25D;HANGUL SYLLABLE NWINI;Lo;0;L;;;;;N;;;;; B25E;HANGUL SYLLABLE NWINH;Lo;0;L;;;;;N;;;;; B25F;HANGUL SYLLABLE NWID;Lo;0;L;;;;;N;;;;; B260;HANGUL SYLLABLE NWIL;Lo;0;L;;;;;N;;;;; B261;HANGUL SYLLABLE NWILG;Lo;0;L;;;;;N;;;;; B262;HANGUL SYLLABLE NWILM;Lo;0;L;;;;;N;;;;; B263;HANGUL SYLLABLE NWILB;Lo;0;L;;;;;N;;;;; B264;HANGUL SYLLABLE NWILS;Lo;0;L;;;;;N;;;;; B265;HANGUL SYLLABLE NWILT;Lo;0;L;;;;;N;;;;; B266;HANGUL SYLLABLE NWILP;Lo;0;L;;;;;N;;;;; B267;HANGUL SYLLABLE NWILH;Lo;0;L;;;;;N;;;;; B268;HANGUL SYLLABLE NWIM;Lo;0;L;;;;;N;;;;; B269;HANGUL SYLLABLE NWIB;Lo;0;L;;;;;N;;;;; B26A;HANGUL SYLLABLE NWIBS;Lo;0;L;;;;;N;;;;; B26B;HANGUL SYLLABLE NWIS;Lo;0;L;;;;;N;;;;; B26C;HANGUL SYLLABLE NWISS;Lo;0;L;;;;;N;;;;; B26D;HANGUL SYLLABLE NWING;Lo;0;L;;;;;N;;;;; B26E;HANGUL SYLLABLE NWIJ;Lo;0;L;;;;;N;;;;; B26F;HANGUL SYLLABLE NWIC;Lo;0;L;;;;;N;;;;; B270;HANGUL SYLLABLE NWIK;Lo;0;L;;;;;N;;;;; B271;HANGUL SYLLABLE NWIT;Lo;0;L;;;;;N;;;;; B272;HANGUL SYLLABLE NWIP;Lo;0;L;;;;;N;;;;; B273;HANGUL SYLLABLE NWIH;Lo;0;L;;;;;N;;;;; B274;HANGUL SYLLABLE NYU;Lo;0;L;;;;;N;;;;; B275;HANGUL SYLLABLE NYUG;Lo;0;L;;;;;N;;;;; B276;HANGUL SYLLABLE NYUGG;Lo;0;L;;;;;N;;;;; B277;HANGUL SYLLABLE NYUGS;Lo;0;L;;;;;N;;;;; B278;HANGUL SYLLABLE NYUN;Lo;0;L;;;;;N;;;;; B279;HANGUL SYLLABLE NYUNI;Lo;0;L;;;;;N;;;;; B27A;HANGUL SYLLABLE NYUNH;Lo;0;L;;;;;N;;;;; B27B;HANGUL SYLLABLE NYUD;Lo;0;L;;;;;N;;;;; B27C;HANGUL SYLLABLE NYUL;Lo;0;L;;;;;N;;;;; B27D;HANGUL SYLLABLE NYULG;Lo;0;L;;;;;N;;;;; B27E;HANGUL SYLLABLE NYULM;Lo;0;L;;;;;N;;;;; B27F;HANGUL SYLLABLE NYULB;Lo;0;L;;;;;N;;;;; B280;HANGUL SYLLABLE NYULS;Lo;0;L;;;;;N;;;;; B281;HANGUL SYLLABLE NYULT;Lo;0;L;;;;;N;;;;; B282;HANGUL SYLLABLE NYULP;Lo;0;L;;;;;N;;;;; B283;HANGUL SYLLABLE NYULH;Lo;0;L;;;;;N;;;;; B284;HANGUL SYLLABLE NYUM;Lo;0;L;;;;;N;;;;; B285;HANGUL SYLLABLE NYUB;Lo;0;L;;;;;N;;;;; B286;HANGUL SYLLABLE NYUBS;Lo;0;L;;;;;N;;;;; B287;HANGUL SYLLABLE NYUS;Lo;0;L;;;;;N;;;;; B288;HANGUL SYLLABLE NYUSS;Lo;0;L;;;;;N;;;;; B289;HANGUL SYLLABLE NYUNG;Lo;0;L;;;;;N;;;;; B28A;HANGUL SYLLABLE NYUJ;Lo;0;L;;;;;N;;;;; B28B;HANGUL SYLLABLE NYUC;Lo;0;L;;;;;N;;;;; B28C;HANGUL SYLLABLE NYUK;Lo;0;L;;;;;N;;;;; B28D;HANGUL SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; B28E;HANGUL SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; B28F;HANGUL SYLLABLE NYUH;Lo;0;L;;;;;N;;;;; B290;HANGUL SYLLABLE NEU;Lo;0;L;;;;;N;;;;; B291;HANGUL SYLLABLE NEUG;Lo;0;L;;;;;N;;;;; B292;HANGUL SYLLABLE NEUGG;Lo;0;L;;;;;N;;;;; B293;HANGUL SYLLABLE NEUGS;Lo;0;L;;;;;N;;;;; B294;HANGUL SYLLABLE NEUN;Lo;0;L;;;;;N;;;;; B295;HANGUL SYLLABLE NEUNI;Lo;0;L;;;;;N;;;;; B296;HANGUL SYLLABLE NEUNH;Lo;0;L;;;;;N;;;;; B297;HANGUL SYLLABLE NEUD;Lo;0;L;;;;;N;;;;; B298;HANGUL SYLLABLE NEUL;Lo;0;L;;;;;N;;;;; B299;HANGUL SYLLABLE NEULG;Lo;0;L;;;;;N;;;;; B29A;HANGUL SYLLABLE NEULM;Lo;0;L;;;;;N;;;;; B29B;HANGUL SYLLABLE NEULB;Lo;0;L;;;;;N;;;;; B29C;HANGUL SYLLABLE NEULS;Lo;0;L;;;;;N;;;;; B29D;HANGUL SYLLABLE NEULT;Lo;0;L;;;;;N;;;;; B29E;HANGUL SYLLABLE NEULP;Lo;0;L;;;;;N;;;;; B29F;HANGUL SYLLABLE NEULH;Lo;0;L;;;;;N;;;;; B2A0;HANGUL SYLLABLE NEUM;Lo;0;L;;;;;N;;;;; B2A1;HANGUL SYLLABLE NEUB;Lo;0;L;;;;;N;;;;; B2A2;HANGUL SYLLABLE NEUBS;Lo;0;L;;;;;N;;;;; B2A3;HANGUL SYLLABLE NEUS;Lo;0;L;;;;;N;;;;; B2A4;HANGUL SYLLABLE NEUSS;Lo;0;L;;;;;N;;;;; B2A5;HANGUL SYLLABLE NEUNG;Lo;0;L;;;;;N;;;;; B2A6;HANGUL SYLLABLE NEUJ;Lo;0;L;;;;;N;;;;; B2A7;HANGUL SYLLABLE NEUC;Lo;0;L;;;;;N;;;;; B2A8;HANGUL SYLLABLE NEUK;Lo;0;L;;;;;N;;;;; B2A9;HANGUL SYLLABLE NEUT;Lo;0;L;;;;;N;;;;; B2AA;HANGUL SYLLABLE NEUP;Lo;0;L;;;;;N;;;;; B2AB;HANGUL SYLLABLE NEUH;Lo;0;L;;;;;N;;;;; B2AC;HANGUL SYLLABLE NYI;Lo;0;L;;;;;N;;;;; B2AD;HANGUL SYLLABLE NYIG;Lo;0;L;;;;;N;;;;; B2AE;HANGUL SYLLABLE NYIGG;Lo;0;L;;;;;N;;;;; B2AF;HANGUL SYLLABLE NYIGS;Lo;0;L;;;;;N;;;;; B2B0;HANGUL SYLLABLE NYIN;Lo;0;L;;;;;N;;;;; B2B1;HANGUL SYLLABLE NYINI;Lo;0;L;;;;;N;;;;; B2B2;HANGUL SYLLABLE NYINH;Lo;0;L;;;;;N;;;;; B2B3;HANGUL SYLLABLE NYID;Lo;0;L;;;;;N;;;;; B2B4;HANGUL SYLLABLE NYIL;Lo;0;L;;;;;N;;;;; B2B5;HANGUL SYLLABLE NYILG;Lo;0;L;;;;;N;;;;; B2B6;HANGUL SYLLABLE NYILM;Lo;0;L;;;;;N;;;;; B2B7;HANGUL SYLLABLE NYILB;Lo;0;L;;;;;N;;;;; B2B8;HANGUL SYLLABLE NYILS;Lo;0;L;;;;;N;;;;; B2B9;HANGUL SYLLABLE NYILT;Lo;0;L;;;;;N;;;;; B2BA;HANGUL SYLLABLE NYILP;Lo;0;L;;;;;N;;;;; B2BB;HANGUL SYLLABLE NYILH;Lo;0;L;;;;;N;;;;; B2BC;HANGUL SYLLABLE NYIM;Lo;0;L;;;;;N;;;;; B2BD;HANGUL SYLLABLE NYIB;Lo;0;L;;;;;N;;;;; B2BE;HANGUL SYLLABLE NYIBS;Lo;0;L;;;;;N;;;;; B2BF;HANGUL SYLLABLE NYIS;Lo;0;L;;;;;N;;;;; B2C0;HANGUL SYLLABLE NYISS;Lo;0;L;;;;;N;;;;; B2C1;HANGUL SYLLABLE NYING;Lo;0;L;;;;;N;;;;; B2C2;HANGUL SYLLABLE NYIJ;Lo;0;L;;;;;N;;;;; B2C3;HANGUL SYLLABLE NYIC;Lo;0;L;;;;;N;;;;; B2C4;HANGUL SYLLABLE NYIK;Lo;0;L;;;;;N;;;;; B2C5;HANGUL SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; B2C6;HANGUL SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; B2C7;HANGUL SYLLABLE NYIH;Lo;0;L;;;;;N;;;;; B2C8;HANGUL SYLLABLE NI;Lo;0;L;;;;;N;;;;; B2C9;HANGUL SYLLABLE NIG;Lo;0;L;;;;;N;;;;; B2CA;HANGUL SYLLABLE NIGG;Lo;0;L;;;;;N;;;;; B2CB;HANGUL SYLLABLE NIGS;Lo;0;L;;;;;N;;;;; B2CC;HANGUL SYLLABLE NIN;Lo;0;L;;;;;N;;;;; B2CD;HANGUL SYLLABLE NINI;Lo;0;L;;;;;N;;;;; B2CE;HANGUL SYLLABLE NINH;Lo;0;L;;;;;N;;;;; B2CF;HANGUL SYLLABLE NID;Lo;0;L;;;;;N;;;;; B2D0;HANGUL SYLLABLE NIL;Lo;0;L;;;;;N;;;;; B2D1;HANGUL SYLLABLE NILG;Lo;0;L;;;;;N;;;;; B2D2;HANGUL SYLLABLE NILM;Lo;0;L;;;;;N;;;;; B2D3;HANGUL SYLLABLE NILB;Lo;0;L;;;;;N;;;;; B2D4;HANGUL SYLLABLE NILS;Lo;0;L;;;;;N;;;;; B2D5;HANGUL SYLLABLE NILT;Lo;0;L;;;;;N;;;;; B2D6;HANGUL SYLLABLE NILP;Lo;0;L;;;;;N;;;;; B2D7;HANGUL SYLLABLE NILH;Lo;0;L;;;;;N;;;;; B2D8;HANGUL SYLLABLE NIM;Lo;0;L;;;;;N;;;;; B2D9;HANGUL SYLLABLE NIB;Lo;0;L;;;;;N;;;;; B2DA;HANGUL SYLLABLE NIBS;Lo;0;L;;;;;N;;;;; B2DB;HANGUL SYLLABLE NIS;Lo;0;L;;;;;N;;;;; B2DC;HANGUL SYLLABLE NISS;Lo;0;L;;;;;N;;;;; B2DD;HANGUL SYLLABLE NING;Lo;0;L;;;;;N;;;;; B2DE;HANGUL SYLLABLE NIJ;Lo;0;L;;;;;N;;;;; B2DF;HANGUL SYLLABLE NIC;Lo;0;L;;;;;N;;;;; B2E0;HANGUL SYLLABLE NIK;Lo;0;L;;;;;N;;;;; B2E1;HANGUL SYLLABLE NIT;Lo;0;L;;;;;N;;;;; B2E2;HANGUL SYLLABLE NIP;Lo;0;L;;;;;N;;;;; B2E3;HANGUL SYLLABLE NIH;Lo;0;L;;;;;N;;;;; B2E4;HANGUL SYLLABLE DA;Lo;0;L;;;;;N;;;;; B2E5;HANGUL SYLLABLE DAG;Lo;0;L;;;;;N;;;;; B2E6;HANGUL SYLLABLE DAGG;Lo;0;L;;;;;N;;;;; B2E7;HANGUL SYLLABLE DAGS;Lo;0;L;;;;;N;;;;; B2E8;HANGUL SYLLABLE DAN;Lo;0;L;;;;;N;;;;; B2E9;HANGUL SYLLABLE DANI;Lo;0;L;;;;;N;;;;; B2EA;HANGUL SYLLABLE DANH;Lo;0;L;;;;;N;;;;; B2EB;HANGUL SYLLABLE DAD;Lo;0;L;;;;;N;;;;; B2EC;HANGUL SYLLABLE DAL;Lo;0;L;;;;;N;;;;; B2ED;HANGUL SYLLABLE DALG;Lo;0;L;;;;;N;;;;; B2EE;HANGUL SYLLABLE DALM;Lo;0;L;;;;;N;;;;; B2EF;HANGUL SYLLABLE DALB;Lo;0;L;;;;;N;;;;; B2F0;HANGUL SYLLABLE DALS;Lo;0;L;;;;;N;;;;; B2F1;HANGUL SYLLABLE DALT;Lo;0;L;;;;;N;;;;; B2F2;HANGUL SYLLABLE DALP;Lo;0;L;;;;;N;;;;; B2F3;HANGUL SYLLABLE DALH;Lo;0;L;;;;;N;;;;; B2F4;HANGUL SYLLABLE DAM;Lo;0;L;;;;;N;;;;; B2F5;HANGUL SYLLABLE DAB;Lo;0;L;;;;;N;;;;; B2F6;HANGUL SYLLABLE DABS;Lo;0;L;;;;;N;;;;; B2F7;HANGUL SYLLABLE DAS;Lo;0;L;;;;;N;;;;; B2F8;HANGUL SYLLABLE DASS;Lo;0;L;;;;;N;;;;; B2F9;HANGUL SYLLABLE DANG;Lo;0;L;;;;;N;;;;; B2FA;HANGUL SYLLABLE DAJ;Lo;0;L;;;;;N;;;;; B2FB;HANGUL SYLLABLE DAC;Lo;0;L;;;;;N;;;;; B2FC;HANGUL SYLLABLE DAK;Lo;0;L;;;;;N;;;;; B2FD;HANGUL SYLLABLE DAT;Lo;0;L;;;;;N;;;;; B2FE;HANGUL SYLLABLE DAP;Lo;0;L;;;;;N;;;;; B2FF;HANGUL SYLLABLE DAH;Lo;0;L;;;;;N;;;;; B300;HANGUL SYLLABLE DAE;Lo;0;L;;;;;N;;;;; B301;HANGUL SYLLABLE DAEG;Lo;0;L;;;;;N;;;;; B302;HANGUL SYLLABLE DAEGG;Lo;0;L;;;;;N;;;;; B303;HANGUL SYLLABLE DAEGS;Lo;0;L;;;;;N;;;;; B304;HANGUL SYLLABLE DAEN;Lo;0;L;;;;;N;;;;; B305;HANGUL SYLLABLE DAENI;Lo;0;L;;;;;N;;;;; B306;HANGUL SYLLABLE DAENH;Lo;0;L;;;;;N;;;;; B307;HANGUL SYLLABLE DAED;Lo;0;L;;;;;N;;;;; B308;HANGUL SYLLABLE DAEL;Lo;0;L;;;;;N;;;;; B309;HANGUL SYLLABLE DAELG;Lo;0;L;;;;;N;;;;; B30A;HANGUL SYLLABLE DAELM;Lo;0;L;;;;;N;;;;; B30B;HANGUL SYLLABLE DAELB;Lo;0;L;;;;;N;;;;; B30C;HANGUL SYLLABLE DAELS;Lo;0;L;;;;;N;;;;; B30D;HANGUL SYLLABLE DAELT;Lo;0;L;;;;;N;;;;; B30E;HANGUL SYLLABLE DAELP;Lo;0;L;;;;;N;;;;; B30F;HANGUL SYLLABLE DAELH;Lo;0;L;;;;;N;;;;; B310;HANGUL SYLLABLE DAEM;Lo;0;L;;;;;N;;;;; B311;HANGUL SYLLABLE DAEB;Lo;0;L;;;;;N;;;;; B312;HANGUL SYLLABLE DAEBS;Lo;0;L;;;;;N;;;;; B313;HANGUL SYLLABLE DAES;Lo;0;L;;;;;N;;;;; B314;HANGUL SYLLABLE DAESS;Lo;0;L;;;;;N;;;;; B315;HANGUL SYLLABLE DAENG;Lo;0;L;;;;;N;;;;; B316;HANGUL SYLLABLE DAEJ;Lo;0;L;;;;;N;;;;; B317;HANGUL SYLLABLE DAEC;Lo;0;L;;;;;N;;;;; B318;HANGUL SYLLABLE DAEK;Lo;0;L;;;;;N;;;;; B319;HANGUL SYLLABLE DAET;Lo;0;L;;;;;N;;;;; B31A;HANGUL SYLLABLE DAEP;Lo;0;L;;;;;N;;;;; B31B;HANGUL SYLLABLE DAEH;Lo;0;L;;;;;N;;;;; B31C;HANGUL SYLLABLE DYA;Lo;0;L;;;;;N;;;;; B31D;HANGUL SYLLABLE DYAG;Lo;0;L;;;;;N;;;;; B31E;HANGUL SYLLABLE DYAGG;Lo;0;L;;;;;N;;;;; B31F;HANGUL SYLLABLE DYAGS;Lo;0;L;;;;;N;;;;; B320;HANGUL SYLLABLE DYAN;Lo;0;L;;;;;N;;;;; B321;HANGUL SYLLABLE DYANI;Lo;0;L;;;;;N;;;;; B322;HANGUL SYLLABLE DYANH;Lo;0;L;;;;;N;;;;; B323;HANGUL SYLLABLE DYAD;Lo;0;L;;;;;N;;;;; B324;HANGUL SYLLABLE DYAL;Lo;0;L;;;;;N;;;;; B325;HANGUL SYLLABLE DYALG;Lo;0;L;;;;;N;;;;; B326;HANGUL SYLLABLE DYALM;Lo;0;L;;;;;N;;;;; B327;HANGUL SYLLABLE DYALB;Lo;0;L;;;;;N;;;;; B328;HANGUL SYLLABLE DYALS;Lo;0;L;;;;;N;;;;; B329;HANGUL SYLLABLE DYALT;Lo;0;L;;;;;N;;;;; B32A;HANGUL SYLLABLE DYALP;Lo;0;L;;;;;N;;;;; B32B;HANGUL SYLLABLE DYALH;Lo;0;L;;;;;N;;;;; B32C;HANGUL SYLLABLE DYAM;Lo;0;L;;;;;N;;;;; B32D;HANGUL SYLLABLE DYAB;Lo;0;L;;;;;N;;;;; B32E;HANGUL SYLLABLE DYABS;Lo;0;L;;;;;N;;;;; B32F;HANGUL SYLLABLE DYAS;Lo;0;L;;;;;N;;;;; B330;HANGUL SYLLABLE DYASS;Lo;0;L;;;;;N;;;;; B331;HANGUL SYLLABLE DYANG;Lo;0;L;;;;;N;;;;; B332;HANGUL SYLLABLE DYAJ;Lo;0;L;;;;;N;;;;; B333;HANGUL SYLLABLE DYAC;Lo;0;L;;;;;N;;;;; B334;HANGUL SYLLABLE DYAK;Lo;0;L;;;;;N;;;;; B335;HANGUL SYLLABLE DYAT;Lo;0;L;;;;;N;;;;; B336;HANGUL SYLLABLE DYAP;Lo;0;L;;;;;N;;;;; B337;HANGUL SYLLABLE DYAH;Lo;0;L;;;;;N;;;;; B338;HANGUL SYLLABLE DYAE;Lo;0;L;;;;;N;;;;; B339;HANGUL SYLLABLE DYAEG;Lo;0;L;;;;;N;;;;; B33A;HANGUL SYLLABLE DYAEGG;Lo;0;L;;;;;N;;;;; B33B;HANGUL SYLLABLE DYAEGS;Lo;0;L;;;;;N;;;;; B33C;HANGUL SYLLABLE DYAEN;Lo;0;L;;;;;N;;;;; B33D;HANGUL SYLLABLE DYAENI;Lo;0;L;;;;;N;;;;; B33E;HANGUL SYLLABLE DYAENH;Lo;0;L;;;;;N;;;;; B33F;HANGUL SYLLABLE DYAED;Lo;0;L;;;;;N;;;;; B340;HANGUL SYLLABLE DYAEL;Lo;0;L;;;;;N;;;;; B341;HANGUL SYLLABLE DYAELG;Lo;0;L;;;;;N;;;;; B342;HANGUL SYLLABLE DYAELM;Lo;0;L;;;;;N;;;;; B343;HANGUL SYLLABLE DYAELB;Lo;0;L;;;;;N;;;;; B344;HANGUL SYLLABLE DYAELS;Lo;0;L;;;;;N;;;;; B345;HANGUL SYLLABLE DYAELT;Lo;0;L;;;;;N;;;;; B346;HANGUL SYLLABLE DYAELP;Lo;0;L;;;;;N;;;;; B347;HANGUL SYLLABLE DYAELH;Lo;0;L;;;;;N;;;;; B348;HANGUL SYLLABLE DYAEM;Lo;0;L;;;;;N;;;;; B349;HANGUL SYLLABLE DYAEB;Lo;0;L;;;;;N;;;;; B34A;HANGUL SYLLABLE DYAEBS;Lo;0;L;;;;;N;;;;; B34B;HANGUL SYLLABLE DYAES;Lo;0;L;;;;;N;;;;; B34C;HANGUL SYLLABLE DYAESS;Lo;0;L;;;;;N;;;;; B34D;HANGUL SYLLABLE DYAENG;Lo;0;L;;;;;N;;;;; B34E;HANGUL SYLLABLE DYAEJ;Lo;0;L;;;;;N;;;;; B34F;HANGUL SYLLABLE DYAEC;Lo;0;L;;;;;N;;;;; B350;HANGUL SYLLABLE DYAEK;Lo;0;L;;;;;N;;;;; B351;HANGUL SYLLABLE DYAET;Lo;0;L;;;;;N;;;;; B352;HANGUL SYLLABLE DYAEP;Lo;0;L;;;;;N;;;;; B353;HANGUL SYLLABLE DYAEH;Lo;0;L;;;;;N;;;;; B354;HANGUL SYLLABLE DEO;Lo;0;L;;;;;N;;;;; B355;HANGUL SYLLABLE DEOG;Lo;0;L;;;;;N;;;;; B356;HANGUL SYLLABLE DEOGG;Lo;0;L;;;;;N;;;;; B357;HANGUL SYLLABLE DEOGS;Lo;0;L;;;;;N;;;;; B358;HANGUL SYLLABLE DEON;Lo;0;L;;;;;N;;;;; B359;HANGUL SYLLABLE DEONI;Lo;0;L;;;;;N;;;;; B35A;HANGUL SYLLABLE DEONH;Lo;0;L;;;;;N;;;;; B35B;HANGUL SYLLABLE DEOD;Lo;0;L;;;;;N;;;;; B35C;HANGUL SYLLABLE DEOL;Lo;0;L;;;;;N;;;;; B35D;HANGUL SYLLABLE DEOLG;Lo;0;L;;;;;N;;;;; B35E;HANGUL SYLLABLE DEOLM;Lo;0;L;;;;;N;;;;; B35F;HANGUL SYLLABLE DEOLB;Lo;0;L;;;;;N;;;;; B360;HANGUL SYLLABLE DEOLS;Lo;0;L;;;;;N;;;;; B361;HANGUL SYLLABLE DEOLT;Lo;0;L;;;;;N;;;;; B362;HANGUL SYLLABLE DEOLP;Lo;0;L;;;;;N;;;;; B363;HANGUL SYLLABLE DEOLH;Lo;0;L;;;;;N;;;;; B364;HANGUL SYLLABLE DEOM;Lo;0;L;;;;;N;;;;; B365;HANGUL SYLLABLE DEOB;Lo;0;L;;;;;N;;;;; B366;HANGUL SYLLABLE DEOBS;Lo;0;L;;;;;N;;;;; B367;HANGUL SYLLABLE DEOS;Lo;0;L;;;;;N;;;;; B368;HANGUL SYLLABLE DEOSS;Lo;0;L;;;;;N;;;;; B369;HANGUL SYLLABLE DEONG;Lo;0;L;;;;;N;;;;; B36A;HANGUL SYLLABLE DEOJ;Lo;0;L;;;;;N;;;;; B36B;HANGUL SYLLABLE DEOC;Lo;0;L;;;;;N;;;;; B36C;HANGUL SYLLABLE DEOK;Lo;0;L;;;;;N;;;;; B36D;HANGUL SYLLABLE DEOT;Lo;0;L;;;;;N;;;;; B36E;HANGUL SYLLABLE DEOP;Lo;0;L;;;;;N;;;;; B36F;HANGUL SYLLABLE DEOH;Lo;0;L;;;;;N;;;;; B370;HANGUL SYLLABLE DE;Lo;0;L;;;;;N;;;;; B371;HANGUL SYLLABLE DEG;Lo;0;L;;;;;N;;;;; B372;HANGUL SYLLABLE DEGG;Lo;0;L;;;;;N;;;;; B373;HANGUL SYLLABLE DEGS;Lo;0;L;;;;;N;;;;; B374;HANGUL SYLLABLE DEN;Lo;0;L;;;;;N;;;;; B375;HANGUL SYLLABLE DENI;Lo;0;L;;;;;N;;;;; B376;HANGUL SYLLABLE DENH;Lo;0;L;;;;;N;;;;; B377;HANGUL SYLLABLE DED;Lo;0;L;;;;;N;;;;; B378;HANGUL SYLLABLE DEL;Lo;0;L;;;;;N;;;;; B379;HANGUL SYLLABLE DELG;Lo;0;L;;;;;N;;;;; B37A;HANGUL SYLLABLE DELM;Lo;0;L;;;;;N;;;;; B37B;HANGUL SYLLABLE DELB;Lo;0;L;;;;;N;;;;; B37C;HANGUL SYLLABLE DELS;Lo;0;L;;;;;N;;;;; B37D;HANGUL SYLLABLE DELT;Lo;0;L;;;;;N;;;;; B37E;HANGUL SYLLABLE DELP;Lo;0;L;;;;;N;;;;; B37F;HANGUL SYLLABLE DELH;Lo;0;L;;;;;N;;;;; B380;HANGUL SYLLABLE DEM;Lo;0;L;;;;;N;;;;; B381;HANGUL SYLLABLE DEB;Lo;0;L;;;;;N;;;;; B382;HANGUL SYLLABLE DEBS;Lo;0;L;;;;;N;;;;; B383;HANGUL SYLLABLE DES;Lo;0;L;;;;;N;;;;; B384;HANGUL SYLLABLE DESS;Lo;0;L;;;;;N;;;;; B385;HANGUL SYLLABLE DENG;Lo;0;L;;;;;N;;;;; B386;HANGUL SYLLABLE DEJ;Lo;0;L;;;;;N;;;;; B387;HANGUL SYLLABLE DEC;Lo;0;L;;;;;N;;;;; B388;HANGUL SYLLABLE DEK;Lo;0;L;;;;;N;;;;; B389;HANGUL SYLLABLE DET;Lo;0;L;;;;;N;;;;; B38A;HANGUL SYLLABLE DEP;Lo;0;L;;;;;N;;;;; B38B;HANGUL SYLLABLE DEH;Lo;0;L;;;;;N;;;;; B38C;HANGUL SYLLABLE DYEO;Lo;0;L;;;;;N;;;;; B38D;HANGUL SYLLABLE DYEOG;Lo;0;L;;;;;N;;;;; B38E;HANGUL SYLLABLE DYEOGG;Lo;0;L;;;;;N;;;;; B38F;HANGUL SYLLABLE DYEOGS;Lo;0;L;;;;;N;;;;; B390;HANGUL SYLLABLE DYEON;Lo;0;L;;;;;N;;;;; B391;HANGUL SYLLABLE DYEONI;Lo;0;L;;;;;N;;;;; B392;HANGUL SYLLABLE DYEONH;Lo;0;L;;;;;N;;;;; B393;HANGUL SYLLABLE DYEOD;Lo;0;L;;;;;N;;;;; B394;HANGUL SYLLABLE DYEOL;Lo;0;L;;;;;N;;;;; B395;HANGUL SYLLABLE DYEOLG;Lo;0;L;;;;;N;;;;; B396;HANGUL SYLLABLE DYEOLM;Lo;0;L;;;;;N;;;;; B397;HANGUL SYLLABLE DYEOLB;Lo;0;L;;;;;N;;;;; B398;HANGUL SYLLABLE DYEOLS;Lo;0;L;;;;;N;;;;; B399;HANGUL SYLLABLE DYEOLT;Lo;0;L;;;;;N;;;;; B39A;HANGUL SYLLABLE DYEOLP;Lo;0;L;;;;;N;;;;; B39B;HANGUL SYLLABLE DYEOLH;Lo;0;L;;;;;N;;;;; B39C;HANGUL SYLLABLE DYEOM;Lo;0;L;;;;;N;;;;; B39D;HANGUL SYLLABLE DYEOB;Lo;0;L;;;;;N;;;;; B39E;HANGUL SYLLABLE DYEOBS;Lo;0;L;;;;;N;;;;; B39F;HANGUL SYLLABLE DYEOS;Lo;0;L;;;;;N;;;;; B3A0;HANGUL SYLLABLE DYEOSS;Lo;0;L;;;;;N;;;;; B3A1;HANGUL SYLLABLE DYEONG;Lo;0;L;;;;;N;;;;; B3A2;HANGUL SYLLABLE DYEOJ;Lo;0;L;;;;;N;;;;; B3A3;HANGUL SYLLABLE DYEOC;Lo;0;L;;;;;N;;;;; B3A4;HANGUL SYLLABLE DYEOK;Lo;0;L;;;;;N;;;;; B3A5;HANGUL SYLLABLE DYEOT;Lo;0;L;;;;;N;;;;; B3A6;HANGUL SYLLABLE DYEOP;Lo;0;L;;;;;N;;;;; B3A7;HANGUL SYLLABLE DYEOH;Lo;0;L;;;;;N;;;;; B3A8;HANGUL SYLLABLE DYE;Lo;0;L;;;;;N;;;;; B3A9;HANGUL SYLLABLE DYEG;Lo;0;L;;;;;N;;;;; B3AA;HANGUL SYLLABLE DYEGG;Lo;0;L;;;;;N;;;;; B3AB;HANGUL SYLLABLE DYEGS;Lo;0;L;;;;;N;;;;; B3AC;HANGUL SYLLABLE DYEN;Lo;0;L;;;;;N;;;;; B3AD;HANGUL SYLLABLE DYENI;Lo;0;L;;;;;N;;;;; B3AE;HANGUL SYLLABLE DYENH;Lo;0;L;;;;;N;;;;; B3AF;HANGUL SYLLABLE DYED;Lo;0;L;;;;;N;;;;; B3B0;HANGUL SYLLABLE DYEL;Lo;0;L;;;;;N;;;;; B3B1;HANGUL SYLLABLE DYELG;Lo;0;L;;;;;N;;;;; B3B2;HANGUL SYLLABLE DYELM;Lo;0;L;;;;;N;;;;; B3B3;HANGUL SYLLABLE DYELB;Lo;0;L;;;;;N;;;;; B3B4;HANGUL SYLLABLE DYELS;Lo;0;L;;;;;N;;;;; B3B5;HANGUL SYLLABLE DYELT;Lo;0;L;;;;;N;;;;; B3B6;HANGUL SYLLABLE DYELP;Lo;0;L;;;;;N;;;;; B3B7;HANGUL SYLLABLE DYELH;Lo;0;L;;;;;N;;;;; B3B8;HANGUL SYLLABLE DYEM;Lo;0;L;;;;;N;;;;; B3B9;HANGUL SYLLABLE DYEB;Lo;0;L;;;;;N;;;;; B3BA;HANGUL SYLLABLE DYEBS;Lo;0;L;;;;;N;;;;; B3BB;HANGUL SYLLABLE DYES;Lo;0;L;;;;;N;;;;; B3BC;HANGUL SYLLABLE DYESS;Lo;0;L;;;;;N;;;;; B3BD;HANGUL SYLLABLE DYENG;Lo;0;L;;;;;N;;;;; B3BE;HANGUL SYLLABLE DYEJ;Lo;0;L;;;;;N;;;;; B3BF;HANGUL SYLLABLE DYEC;Lo;0;L;;;;;N;;;;; B3C0;HANGUL SYLLABLE DYEK;Lo;0;L;;;;;N;;;;; B3C1;HANGUL SYLLABLE DYET;Lo;0;L;;;;;N;;;;; B3C2;HANGUL SYLLABLE DYEP;Lo;0;L;;;;;N;;;;; B3C3;HANGUL SYLLABLE DYEH;Lo;0;L;;;;;N;;;;; B3C4;HANGUL SYLLABLE DO;Lo;0;L;;;;;N;;;;; B3C5;HANGUL SYLLABLE DOG;Lo;0;L;;;;;N;;;;; B3C6;HANGUL SYLLABLE DOGG;Lo;0;L;;;;;N;;;;; B3C7;HANGUL SYLLABLE DOGS;Lo;0;L;;;;;N;;;;; B3C8;HANGUL SYLLABLE DON;Lo;0;L;;;;;N;;;;; B3C9;HANGUL SYLLABLE DONI;Lo;0;L;;;;;N;;;;; B3CA;HANGUL SYLLABLE DONH;Lo;0;L;;;;;N;;;;; B3CB;HANGUL SYLLABLE DOD;Lo;0;L;;;;;N;;;;; B3CC;HANGUL SYLLABLE DOL;Lo;0;L;;;;;N;;;;; B3CD;HANGUL SYLLABLE DOLG;Lo;0;L;;;;;N;;;;; B3CE;HANGUL SYLLABLE DOLM;Lo;0;L;;;;;N;;;;; B3CF;HANGUL SYLLABLE DOLB;Lo;0;L;;;;;N;;;;; B3D0;HANGUL SYLLABLE DOLS;Lo;0;L;;;;;N;;;;; B3D1;HANGUL SYLLABLE DOLT;Lo;0;L;;;;;N;;;;; B3D2;HANGUL SYLLABLE DOLP;Lo;0;L;;;;;N;;;;; B3D3;HANGUL SYLLABLE DOLH;Lo;0;L;;;;;N;;;;; B3D4;HANGUL SYLLABLE DOM;Lo;0;L;;;;;N;;;;; B3D5;HANGUL SYLLABLE DOB;Lo;0;L;;;;;N;;;;; B3D6;HANGUL SYLLABLE DOBS;Lo;0;L;;;;;N;;;;; B3D7;HANGUL SYLLABLE DOS;Lo;0;L;;;;;N;;;;; B3D8;HANGUL SYLLABLE DOSS;Lo;0;L;;;;;N;;;;; B3D9;HANGUL SYLLABLE DONG;Lo;0;L;;;;;N;;;;; B3DA;HANGUL SYLLABLE DOJ;Lo;0;L;;;;;N;;;;; B3DB;HANGUL SYLLABLE DOC;Lo;0;L;;;;;N;;;;; B3DC;HANGUL SYLLABLE DOK;Lo;0;L;;;;;N;;;;; B3DD;HANGUL SYLLABLE DOT;Lo;0;L;;;;;N;;;;; B3DE;HANGUL SYLLABLE DOP;Lo;0;L;;;;;N;;;;; B3DF;HANGUL SYLLABLE DOH;Lo;0;L;;;;;N;;;;; B3E0;HANGUL SYLLABLE DWA;Lo;0;L;;;;;N;;;;; B3E1;HANGUL SYLLABLE DWAG;Lo;0;L;;;;;N;;;;; B3E2;HANGUL SYLLABLE DWAGG;Lo;0;L;;;;;N;;;;; B3E3;HANGUL SYLLABLE DWAGS;Lo;0;L;;;;;N;;;;; B3E4;HANGUL SYLLABLE DWAN;Lo;0;L;;;;;N;;;;; B3E5;HANGUL SYLLABLE DWANI;Lo;0;L;;;;;N;;;;; B3E6;HANGUL SYLLABLE DWANH;Lo;0;L;;;;;N;;;;; B3E7;HANGUL SYLLABLE DWAD;Lo;0;L;;;;;N;;;;; B3E8;HANGUL SYLLABLE DWAL;Lo;0;L;;;;;N;;;;; B3E9;HANGUL SYLLABLE DWALG;Lo;0;L;;;;;N;;;;; B3EA;HANGUL SYLLABLE DWALM;Lo;0;L;;;;;N;;;;; B3EB;HANGUL SYLLABLE DWALB;Lo;0;L;;;;;N;;;;; B3EC;HANGUL SYLLABLE DWALS;Lo;0;L;;;;;N;;;;; B3ED;HANGUL SYLLABLE DWALT;Lo;0;L;;;;;N;;;;; B3EE;HANGUL SYLLABLE DWALP;Lo;0;L;;;;;N;;;;; B3EF;HANGUL SYLLABLE DWALH;Lo;0;L;;;;;N;;;;; B3F0;HANGUL SYLLABLE DWAM;Lo;0;L;;;;;N;;;;; B3F1;HANGUL SYLLABLE DWAB;Lo;0;L;;;;;N;;;;; B3F2;HANGUL SYLLABLE DWABS;Lo;0;L;;;;;N;;;;; B3F3;HANGUL SYLLABLE DWAS;Lo;0;L;;;;;N;;;;; B3F4;HANGUL SYLLABLE DWASS;Lo;0;L;;;;;N;;;;; B3F5;HANGUL SYLLABLE DWANG;Lo;0;L;;;;;N;;;;; B3F6;HANGUL SYLLABLE DWAJ;Lo;0;L;;;;;N;;;;; B3F7;HANGUL SYLLABLE DWAC;Lo;0;L;;;;;N;;;;; B3F8;HANGUL SYLLABLE DWAK;Lo;0;L;;;;;N;;;;; B3F9;HANGUL SYLLABLE DWAT;Lo;0;L;;;;;N;;;;; B3FA;HANGUL SYLLABLE DWAP;Lo;0;L;;;;;N;;;;; B3FB;HANGUL SYLLABLE DWAH;Lo;0;L;;;;;N;;;;; B3FC;HANGUL SYLLABLE DWAE;Lo;0;L;;;;;N;;;;; B3FD;HANGUL SYLLABLE DWAEG;Lo;0;L;;;;;N;;;;; B3FE;HANGUL SYLLABLE DWAEGG;Lo;0;L;;;;;N;;;;; B3FF;HANGUL SYLLABLE DWAEGS;Lo;0;L;;;;;N;;;;; B400;HANGUL SYLLABLE DWAEN;Lo;0;L;;;;;N;;;;; B401;HANGUL SYLLABLE DWAENI;Lo;0;L;;;;;N;;;;; B402;HANGUL SYLLABLE DWAENH;Lo;0;L;;;;;N;;;;; B403;HANGUL SYLLABLE DWAED;Lo;0;L;;;;;N;;;;; B404;HANGUL SYLLABLE DWAEL;Lo;0;L;;;;;N;;;;; B405;HANGUL SYLLABLE DWAELG;Lo;0;L;;;;;N;;;;; B406;HANGUL SYLLABLE DWAELM;Lo;0;L;;;;;N;;;;; B407;HANGUL SYLLABLE DWAELB;Lo;0;L;;;;;N;;;;; B408;HANGUL SYLLABLE DWAELS;Lo;0;L;;;;;N;;;;; B409;HANGUL SYLLABLE DWAELT;Lo;0;L;;;;;N;;;;; B40A;HANGUL SYLLABLE DWAELP;Lo;0;L;;;;;N;;;;; B40B;HANGUL SYLLABLE DWAELH;Lo;0;L;;;;;N;;;;; B40C;HANGUL SYLLABLE DWAEM;Lo;0;L;;;;;N;;;;; B40D;HANGUL SYLLABLE DWAEB;Lo;0;L;;;;;N;;;;; B40E;HANGUL SYLLABLE DWAEBS;Lo;0;L;;;;;N;;;;; B40F;HANGUL SYLLABLE DWAES;Lo;0;L;;;;;N;;;;; B410;HANGUL SYLLABLE DWAESS;Lo;0;L;;;;;N;;;;; B411;HANGUL SYLLABLE DWAENG;Lo;0;L;;;;;N;;;;; B412;HANGUL SYLLABLE DWAEJ;Lo;0;L;;;;;N;;;;; B413;HANGUL SYLLABLE DWAEC;Lo;0;L;;;;;N;;;;; B414;HANGUL SYLLABLE DWAEK;Lo;0;L;;;;;N;;;;; B415;HANGUL SYLLABLE DWAET;Lo;0;L;;;;;N;;;;; B416;HANGUL SYLLABLE DWAEP;Lo;0;L;;;;;N;;;;; B417;HANGUL SYLLABLE DWAEH;Lo;0;L;;;;;N;;;;; B418;HANGUL SYLLABLE DOE;Lo;0;L;;;;;N;;;;; B419;HANGUL SYLLABLE DOEG;Lo;0;L;;;;;N;;;;; B41A;HANGUL SYLLABLE DOEGG;Lo;0;L;;;;;N;;;;; B41B;HANGUL SYLLABLE DOEGS;Lo;0;L;;;;;N;;;;; B41C;HANGUL SYLLABLE DOEN;Lo;0;L;;;;;N;;;;; B41D;HANGUL SYLLABLE DOENI;Lo;0;L;;;;;N;;;;; B41E;HANGUL SYLLABLE DOENH;Lo;0;L;;;;;N;;;;; B41F;HANGUL SYLLABLE DOED;Lo;0;L;;;;;N;;;;; B420;HANGUL SYLLABLE DOEL;Lo;0;L;;;;;N;;;;; B421;HANGUL SYLLABLE DOELG;Lo;0;L;;;;;N;;;;; B422;HANGUL SYLLABLE DOELM;Lo;0;L;;;;;N;;;;; B423;HANGUL SYLLABLE DOELB;Lo;0;L;;;;;N;;;;; B424;HANGUL SYLLABLE DOELS;Lo;0;L;;;;;N;;;;; B425;HANGUL SYLLABLE DOELT;Lo;0;L;;;;;N;;;;; B426;HANGUL SYLLABLE DOELP;Lo;0;L;;;;;N;;;;; B427;HANGUL SYLLABLE DOELH;Lo;0;L;;;;;N;;;;; B428;HANGUL SYLLABLE DOEM;Lo;0;L;;;;;N;;;;; B429;HANGUL SYLLABLE DOEB;Lo;0;L;;;;;N;;;;; B42A;HANGUL SYLLABLE DOEBS;Lo;0;L;;;;;N;;;;; B42B;HANGUL SYLLABLE DOES;Lo;0;L;;;;;N;;;;; B42C;HANGUL SYLLABLE DOESS;Lo;0;L;;;;;N;;;;; B42D;HANGUL SYLLABLE DOENG;Lo;0;L;;;;;N;;;;; B42E;HANGUL SYLLABLE DOEJ;Lo;0;L;;;;;N;;;;; B42F;HANGUL SYLLABLE DOEC;Lo;0;L;;;;;N;;;;; B430;HANGUL SYLLABLE DOEK;Lo;0;L;;;;;N;;;;; B431;HANGUL SYLLABLE DOET;Lo;0;L;;;;;N;;;;; B432;HANGUL SYLLABLE DOEP;Lo;0;L;;;;;N;;;;; B433;HANGUL SYLLABLE DOEH;Lo;0;L;;;;;N;;;;; B434;HANGUL SYLLABLE DYO;Lo;0;L;;;;;N;;;;; B435;HANGUL SYLLABLE DYOG;Lo;0;L;;;;;N;;;;; B436;HANGUL SYLLABLE DYOGG;Lo;0;L;;;;;N;;;;; B437;HANGUL SYLLABLE DYOGS;Lo;0;L;;;;;N;;;;; B438;HANGUL SYLLABLE DYON;Lo;0;L;;;;;N;;;;; B439;HANGUL SYLLABLE DYONI;Lo;0;L;;;;;N;;;;; B43A;HANGUL SYLLABLE DYONH;Lo;0;L;;;;;N;;;;; B43B;HANGUL SYLLABLE DYOD;Lo;0;L;;;;;N;;;;; B43C;HANGUL SYLLABLE DYOL;Lo;0;L;;;;;N;;;;; B43D;HANGUL SYLLABLE DYOLG;Lo;0;L;;;;;N;;;;; B43E;HANGUL SYLLABLE DYOLM;Lo;0;L;;;;;N;;;;; B43F;HANGUL SYLLABLE DYOLB;Lo;0;L;;;;;N;;;;; B440;HANGUL SYLLABLE DYOLS;Lo;0;L;;;;;N;;;;; B441;HANGUL SYLLABLE DYOLT;Lo;0;L;;;;;N;;;;; B442;HANGUL SYLLABLE DYOLP;Lo;0;L;;;;;N;;;;; B443;HANGUL SYLLABLE DYOLH;Lo;0;L;;;;;N;;;;; B444;HANGUL SYLLABLE DYOM;Lo;0;L;;;;;N;;;;; B445;HANGUL SYLLABLE DYOB;Lo;0;L;;;;;N;;;;; B446;HANGUL SYLLABLE DYOBS;Lo;0;L;;;;;N;;;;; B447;HANGUL SYLLABLE DYOS;Lo;0;L;;;;;N;;;;; B448;HANGUL SYLLABLE DYOSS;Lo;0;L;;;;;N;;;;; B449;HANGUL SYLLABLE DYONG;Lo;0;L;;;;;N;;;;; B44A;HANGUL SYLLABLE DYOJ;Lo;0;L;;;;;N;;;;; B44B;HANGUL SYLLABLE DYOC;Lo;0;L;;;;;N;;;;; B44C;HANGUL SYLLABLE DYOK;Lo;0;L;;;;;N;;;;; B44D;HANGUL SYLLABLE DYOT;Lo;0;L;;;;;N;;;;; B44E;HANGUL SYLLABLE DYOP;Lo;0;L;;;;;N;;;;; B44F;HANGUL SYLLABLE DYOH;Lo;0;L;;;;;N;;;;; B450;HANGUL SYLLABLE DU;Lo;0;L;;;;;N;;;;; B451;HANGUL SYLLABLE DUG;Lo;0;L;;;;;N;;;;; B452;HANGUL SYLLABLE DUGG;Lo;0;L;;;;;N;;;;; B453;HANGUL SYLLABLE DUGS;Lo;0;L;;;;;N;;;;; B454;HANGUL SYLLABLE DUN;Lo;0;L;;;;;N;;;;; B455;HANGUL SYLLABLE DUNI;Lo;0;L;;;;;N;;;;; B456;HANGUL SYLLABLE DUNH;Lo;0;L;;;;;N;;;;; B457;HANGUL SYLLABLE DUD;Lo;0;L;;;;;N;;;;; B458;HANGUL SYLLABLE DUL;Lo;0;L;;;;;N;;;;; B459;HANGUL SYLLABLE DULG;Lo;0;L;;;;;N;;;;; B45A;HANGUL SYLLABLE DULM;Lo;0;L;;;;;N;;;;; B45B;HANGUL SYLLABLE DULB;Lo;0;L;;;;;N;;;;; B45C;HANGUL SYLLABLE DULS;Lo;0;L;;;;;N;;;;; B45D;HANGUL SYLLABLE DULT;Lo;0;L;;;;;N;;;;; B45E;HANGUL SYLLABLE DULP;Lo;0;L;;;;;N;;;;; B45F;HANGUL SYLLABLE DULH;Lo;0;L;;;;;N;;;;; B460;HANGUL SYLLABLE DUM;Lo;0;L;;;;;N;;;;; B461;HANGUL SYLLABLE DUB;Lo;0;L;;;;;N;;;;; B462;HANGUL SYLLABLE DUBS;Lo;0;L;;;;;N;;;;; B463;HANGUL SYLLABLE DUS;Lo;0;L;;;;;N;;;;; B464;HANGUL SYLLABLE DUSS;Lo;0;L;;;;;N;;;;; B465;HANGUL SYLLABLE DUNG;Lo;0;L;;;;;N;;;;; B466;HANGUL SYLLABLE DUJ;Lo;0;L;;;;;N;;;;; B467;HANGUL SYLLABLE DUC;Lo;0;L;;;;;N;;;;; B468;HANGUL SYLLABLE DUK;Lo;0;L;;;;;N;;;;; B469;HANGUL SYLLABLE DUT;Lo;0;L;;;;;N;;;;; B46A;HANGUL SYLLABLE DUP;Lo;0;L;;;;;N;;;;; B46B;HANGUL SYLLABLE DUH;Lo;0;L;;;;;N;;;;; B46C;HANGUL SYLLABLE DWEO;Lo;0;L;;;;;N;;;;; B46D;HANGUL SYLLABLE DWEOG;Lo;0;L;;;;;N;;;;; B46E;HANGUL SYLLABLE DWEOGG;Lo;0;L;;;;;N;;;;; B46F;HANGUL SYLLABLE DWEOGS;Lo;0;L;;;;;N;;;;; B470;HANGUL SYLLABLE DWEON;Lo;0;L;;;;;N;;;;; B471;HANGUL SYLLABLE DWEONI;Lo;0;L;;;;;N;;;;; B472;HANGUL SYLLABLE DWEONH;Lo;0;L;;;;;N;;;;; B473;HANGUL SYLLABLE DWEOD;Lo;0;L;;;;;N;;;;; B474;HANGUL SYLLABLE DWEOL;Lo;0;L;;;;;N;;;;; B475;HANGUL SYLLABLE DWEOLG;Lo;0;L;;;;;N;;;;; B476;HANGUL SYLLABLE DWEOLM;Lo;0;L;;;;;N;;;;; B477;HANGUL SYLLABLE DWEOLB;Lo;0;L;;;;;N;;;;; B478;HANGUL SYLLABLE DWEOLS;Lo;0;L;;;;;N;;;;; B479;HANGUL SYLLABLE DWEOLT;Lo;0;L;;;;;N;;;;; B47A;HANGUL SYLLABLE DWEOLP;Lo;0;L;;;;;N;;;;; B47B;HANGUL SYLLABLE DWEOLH;Lo;0;L;;;;;N;;;;; B47C;HANGUL SYLLABLE DWEOM;Lo;0;L;;;;;N;;;;; B47D;HANGUL SYLLABLE DWEOB;Lo;0;L;;;;;N;;;;; B47E;HANGUL SYLLABLE DWEOBS;Lo;0;L;;;;;N;;;;; B47F;HANGUL SYLLABLE DWEOS;Lo;0;L;;;;;N;;;;; B480;HANGUL SYLLABLE DWEOSS;Lo;0;L;;;;;N;;;;; B481;HANGUL SYLLABLE DWEONG;Lo;0;L;;;;;N;;;;; B482;HANGUL SYLLABLE DWEOJ;Lo;0;L;;;;;N;;;;; B483;HANGUL SYLLABLE DWEOC;Lo;0;L;;;;;N;;;;; B484;HANGUL SYLLABLE DWEOK;Lo;0;L;;;;;N;;;;; B485;HANGUL SYLLABLE DWEOT;Lo;0;L;;;;;N;;;;; B486;HANGUL SYLLABLE DWEOP;Lo;0;L;;;;;N;;;;; B487;HANGUL SYLLABLE DWEOH;Lo;0;L;;;;;N;;;;; B488;HANGUL SYLLABLE DWE;Lo;0;L;;;;;N;;;;; B489;HANGUL SYLLABLE DWEG;Lo;0;L;;;;;N;;;;; B48A;HANGUL SYLLABLE DWEGG;Lo;0;L;;;;;N;;;;; B48B;HANGUL SYLLABLE DWEGS;Lo;0;L;;;;;N;;;;; B48C;HANGUL SYLLABLE DWEN;Lo;0;L;;;;;N;;;;; B48D;HANGUL SYLLABLE DWENI;Lo;0;L;;;;;N;;;;; B48E;HANGUL SYLLABLE DWENH;Lo;0;L;;;;;N;;;;; B48F;HANGUL SYLLABLE DWED;Lo;0;L;;;;;N;;;;; B490;HANGUL SYLLABLE DWEL;Lo;0;L;;;;;N;;;;; B491;HANGUL SYLLABLE DWELG;Lo;0;L;;;;;N;;;;; B492;HANGUL SYLLABLE DWELM;Lo;0;L;;;;;N;;;;; B493;HANGUL SYLLABLE DWELB;Lo;0;L;;;;;N;;;;; B494;HANGUL SYLLABLE DWELS;Lo;0;L;;;;;N;;;;; B495;HANGUL SYLLABLE DWELT;Lo;0;L;;;;;N;;;;; B496;HANGUL SYLLABLE DWELP;Lo;0;L;;;;;N;;;;; B497;HANGUL SYLLABLE DWELH;Lo;0;L;;;;;N;;;;; B498;HANGUL SYLLABLE DWEM;Lo;0;L;;;;;N;;;;; B499;HANGUL SYLLABLE DWEB;Lo;0;L;;;;;N;;;;; B49A;HANGUL SYLLABLE DWEBS;Lo;0;L;;;;;N;;;;; B49B;HANGUL SYLLABLE DWES;Lo;0;L;;;;;N;;;;; B49C;HANGUL SYLLABLE DWESS;Lo;0;L;;;;;N;;;;; B49D;HANGUL SYLLABLE DWENG;Lo;0;L;;;;;N;;;;; B49E;HANGUL SYLLABLE DWEJ;Lo;0;L;;;;;N;;;;; B49F;HANGUL SYLLABLE DWEC;Lo;0;L;;;;;N;;;;; B4A0;HANGUL SYLLABLE DWEK;Lo;0;L;;;;;N;;;;; B4A1;HANGUL SYLLABLE DWET;Lo;0;L;;;;;N;;;;; B4A2;HANGUL SYLLABLE DWEP;Lo;0;L;;;;;N;;;;; B4A3;HANGUL SYLLABLE DWEH;Lo;0;L;;;;;N;;;;; B4A4;HANGUL SYLLABLE DWI;Lo;0;L;;;;;N;;;;; B4A5;HANGUL SYLLABLE DWIG;Lo;0;L;;;;;N;;;;; B4A6;HANGUL SYLLABLE DWIGG;Lo;0;L;;;;;N;;;;; B4A7;HANGUL SYLLABLE DWIGS;Lo;0;L;;;;;N;;;;; B4A8;HANGUL SYLLABLE DWIN;Lo;0;L;;;;;N;;;;; B4A9;HANGUL SYLLABLE DWINI;Lo;0;L;;;;;N;;;;; B4AA;HANGUL SYLLABLE DWINH;Lo;0;L;;;;;N;;;;; B4AB;HANGUL SYLLABLE DWID;Lo;0;L;;;;;N;;;;; B4AC;HANGUL SYLLABLE DWIL;Lo;0;L;;;;;N;;;;; B4AD;HANGUL SYLLABLE DWILG;Lo;0;L;;;;;N;;;;; B4AE;HANGUL SYLLABLE DWILM;Lo;0;L;;;;;N;;;;; B4AF;HANGUL SYLLABLE DWILB;Lo;0;L;;;;;N;;;;; B4B0;HANGUL SYLLABLE DWILS;Lo;0;L;;;;;N;;;;; B4B1;HANGUL SYLLABLE DWILT;Lo;0;L;;;;;N;;;;; B4B2;HANGUL SYLLABLE DWILP;Lo;0;L;;;;;N;;;;; B4B3;HANGUL SYLLABLE DWILH;Lo;0;L;;;;;N;;;;; B4B4;HANGUL SYLLABLE DWIM;Lo;0;L;;;;;N;;;;; B4B5;HANGUL SYLLABLE DWIB;Lo;0;L;;;;;N;;;;; B4B6;HANGUL SYLLABLE DWIBS;Lo;0;L;;;;;N;;;;; B4B7;HANGUL SYLLABLE DWIS;Lo;0;L;;;;;N;;;;; B4B8;HANGUL SYLLABLE DWISS;Lo;0;L;;;;;N;;;;; B4B9;HANGUL SYLLABLE DWING;Lo;0;L;;;;;N;;;;; B4BA;HANGUL SYLLABLE DWIJ;Lo;0;L;;;;;N;;;;; B4BB;HANGUL SYLLABLE DWIC;Lo;0;L;;;;;N;;;;; B4BC;HANGUL SYLLABLE DWIK;Lo;0;L;;;;;N;;;;; B4BD;HANGUL SYLLABLE DWIT;Lo;0;L;;;;;N;;;;; B4BE;HANGUL SYLLABLE DWIP;Lo;0;L;;;;;N;;;;; B4BF;HANGUL SYLLABLE DWIH;Lo;0;L;;;;;N;;;;; B4C0;HANGUL SYLLABLE DYU;Lo;0;L;;;;;N;;;;; B4C1;HANGUL SYLLABLE DYUG;Lo;0;L;;;;;N;;;;; B4C2;HANGUL SYLLABLE DYUGG;Lo;0;L;;;;;N;;;;; B4C3;HANGUL SYLLABLE DYUGS;Lo;0;L;;;;;N;;;;; B4C4;HANGUL SYLLABLE DYUN;Lo;0;L;;;;;N;;;;; B4C5;HANGUL SYLLABLE DYUNI;Lo;0;L;;;;;N;;;;; B4C6;HANGUL SYLLABLE DYUNH;Lo;0;L;;;;;N;;;;; B4C7;HANGUL SYLLABLE DYUD;Lo;0;L;;;;;N;;;;; B4C8;HANGUL SYLLABLE DYUL;Lo;0;L;;;;;N;;;;; B4C9;HANGUL SYLLABLE DYULG;Lo;0;L;;;;;N;;;;; B4CA;HANGUL SYLLABLE DYULM;Lo;0;L;;;;;N;;;;; B4CB;HANGUL SYLLABLE DYULB;Lo;0;L;;;;;N;;;;; B4CC;HANGUL SYLLABLE DYULS;Lo;0;L;;;;;N;;;;; B4CD;HANGUL SYLLABLE DYULT;Lo;0;L;;;;;N;;;;; B4CE;HANGUL SYLLABLE DYULP;Lo;0;L;;;;;N;;;;; B4CF;HANGUL SYLLABLE DYULH;Lo;0;L;;;;;N;;;;; B4D0;HANGUL SYLLABLE DYUM;Lo;0;L;;;;;N;;;;; B4D1;HANGUL SYLLABLE DYUB;Lo;0;L;;;;;N;;;;; B4D2;HANGUL SYLLABLE DYUBS;Lo;0;L;;;;;N;;;;; B4D3;HANGUL SYLLABLE DYUS;Lo;0;L;;;;;N;;;;; B4D4;HANGUL SYLLABLE DYUSS;Lo;0;L;;;;;N;;;;; B4D5;HANGUL SYLLABLE DYUNG;Lo;0;L;;;;;N;;;;; B4D6;HANGUL SYLLABLE DYUJ;Lo;0;L;;;;;N;;;;; B4D7;HANGUL SYLLABLE DYUC;Lo;0;L;;;;;N;;;;; B4D8;HANGUL SYLLABLE DYUK;Lo;0;L;;;;;N;;;;; B4D9;HANGUL SYLLABLE DYUT;Lo;0;L;;;;;N;;;;; B4DA;HANGUL SYLLABLE DYUP;Lo;0;L;;;;;N;;;;; B4DB;HANGUL SYLLABLE DYUH;Lo;0;L;;;;;N;;;;; B4DC;HANGUL SYLLABLE DEU;Lo;0;L;;;;;N;;;;; B4DD;HANGUL SYLLABLE DEUG;Lo;0;L;;;;;N;;;;; B4DE;HANGUL SYLLABLE DEUGG;Lo;0;L;;;;;N;;;;; B4DF;HANGUL SYLLABLE DEUGS;Lo;0;L;;;;;N;;;;; B4E0;HANGUL SYLLABLE DEUN;Lo;0;L;;;;;N;;;;; B4E1;HANGUL SYLLABLE DEUNI;Lo;0;L;;;;;N;;;;; B4E2;HANGUL SYLLABLE DEUNH;Lo;0;L;;;;;N;;;;; B4E3;HANGUL SYLLABLE DEUD;Lo;0;L;;;;;N;;;;; B4E4;HANGUL SYLLABLE DEUL;Lo;0;L;;;;;N;;;;; B4E5;HANGUL SYLLABLE DEULG;Lo;0;L;;;;;N;;;;; B4E6;HANGUL SYLLABLE DEULM;Lo;0;L;;;;;N;;;;; B4E7;HANGUL SYLLABLE DEULB;Lo;0;L;;;;;N;;;;; B4E8;HANGUL SYLLABLE DEULS;Lo;0;L;;;;;N;;;;; B4E9;HANGUL SYLLABLE DEULT;Lo;0;L;;;;;N;;;;; B4EA;HANGUL SYLLABLE DEULP;Lo;0;L;;;;;N;;;;; B4EB;HANGUL SYLLABLE DEULH;Lo;0;L;;;;;N;;;;; B4EC;HANGUL SYLLABLE DEUM;Lo;0;L;;;;;N;;;;; B4ED;HANGUL SYLLABLE DEUB;Lo;0;L;;;;;N;;;;; B4EE;HANGUL SYLLABLE DEUBS;Lo;0;L;;;;;N;;;;; B4EF;HANGUL SYLLABLE DEUS;Lo;0;L;;;;;N;;;;; B4F0;HANGUL SYLLABLE DEUSS;Lo;0;L;;;;;N;;;;; B4F1;HANGUL SYLLABLE DEUNG;Lo;0;L;;;;;N;;;;; B4F2;HANGUL SYLLABLE DEUJ;Lo;0;L;;;;;N;;;;; B4F3;HANGUL SYLLABLE DEUC;Lo;0;L;;;;;N;;;;; B4F4;HANGUL SYLLABLE DEUK;Lo;0;L;;;;;N;;;;; B4F5;HANGUL SYLLABLE DEUT;Lo;0;L;;;;;N;;;;; B4F6;HANGUL SYLLABLE DEUP;Lo;0;L;;;;;N;;;;; B4F7;HANGUL SYLLABLE DEUH;Lo;0;L;;;;;N;;;;; B4F8;HANGUL SYLLABLE DYI;Lo;0;L;;;;;N;;;;; B4F9;HANGUL SYLLABLE DYIG;Lo;0;L;;;;;N;;;;; B4FA;HANGUL SYLLABLE DYIGG;Lo;0;L;;;;;N;;;;; B4FB;HANGUL SYLLABLE DYIGS;Lo;0;L;;;;;N;;;;; B4FC;HANGUL SYLLABLE DYIN;Lo;0;L;;;;;N;;;;; B4FD;HANGUL SYLLABLE DYINI;Lo;0;L;;;;;N;;;;; B4FE;HANGUL SYLLABLE DYINH;Lo;0;L;;;;;N;;;;; B4FF;HANGUL SYLLABLE DYID;Lo;0;L;;;;;N;;;;; B500;HANGUL SYLLABLE DYIL;Lo;0;L;;;;;N;;;;; B501;HANGUL SYLLABLE DYILG;Lo;0;L;;;;;N;;;;; B502;HANGUL SYLLABLE DYILM;Lo;0;L;;;;;N;;;;; B503;HANGUL SYLLABLE DYILB;Lo;0;L;;;;;N;;;;; B504;HANGUL SYLLABLE DYILS;Lo;0;L;;;;;N;;;;; B505;HANGUL SYLLABLE DYILT;Lo;0;L;;;;;N;;;;; B506;HANGUL SYLLABLE DYILP;Lo;0;L;;;;;N;;;;; B507;HANGUL SYLLABLE DYILH;Lo;0;L;;;;;N;;;;; B508;HANGUL SYLLABLE DYIM;Lo;0;L;;;;;N;;;;; B509;HANGUL SYLLABLE DYIB;Lo;0;L;;;;;N;;;;; B50A;HANGUL SYLLABLE DYIBS;Lo;0;L;;;;;N;;;;; B50B;HANGUL SYLLABLE DYIS;Lo;0;L;;;;;N;;;;; B50C;HANGUL SYLLABLE DYISS;Lo;0;L;;;;;N;;;;; B50D;HANGUL SYLLABLE DYING;Lo;0;L;;;;;N;;;;; B50E;HANGUL SYLLABLE DYIJ;Lo;0;L;;;;;N;;;;; B50F;HANGUL SYLLABLE DYIC;Lo;0;L;;;;;N;;;;; B510;HANGUL SYLLABLE DYIK;Lo;0;L;;;;;N;;;;; B511;HANGUL SYLLABLE DYIT;Lo;0;L;;;;;N;;;;; B512;HANGUL SYLLABLE DYIP;Lo;0;L;;;;;N;;;;; B513;HANGUL SYLLABLE DYIH;Lo;0;L;;;;;N;;;;; B514;HANGUL SYLLABLE DI;Lo;0;L;;;;;N;;;;; B515;HANGUL SYLLABLE DIG;Lo;0;L;;;;;N;;;;; B516;HANGUL SYLLABLE DIGG;Lo;0;L;;;;;N;;;;; B517;HANGUL SYLLABLE DIGS;Lo;0;L;;;;;N;;;;; B518;HANGUL SYLLABLE DIN;Lo;0;L;;;;;N;;;;; B519;HANGUL SYLLABLE DINI;Lo;0;L;;;;;N;;;;; B51A;HANGUL SYLLABLE DINH;Lo;0;L;;;;;N;;;;; B51B;HANGUL SYLLABLE DID;Lo;0;L;;;;;N;;;;; B51C;HANGUL SYLLABLE DIL;Lo;0;L;;;;;N;;;;; B51D;HANGUL SYLLABLE DILG;Lo;0;L;;;;;N;;;;; B51E;HANGUL SYLLABLE DILM;Lo;0;L;;;;;N;;;;; B51F;HANGUL SYLLABLE DILB;Lo;0;L;;;;;N;;;;; B520;HANGUL SYLLABLE DILS;Lo;0;L;;;;;N;;;;; B521;HANGUL SYLLABLE DILT;Lo;0;L;;;;;N;;;;; B522;HANGUL SYLLABLE DILP;Lo;0;L;;;;;N;;;;; B523;HANGUL SYLLABLE DILH;Lo;0;L;;;;;N;;;;; B524;HANGUL SYLLABLE DIM;Lo;0;L;;;;;N;;;;; B525;HANGUL SYLLABLE DIB;Lo;0;L;;;;;N;;;;; B526;HANGUL SYLLABLE DIBS;Lo;0;L;;;;;N;;;;; B527;HANGUL SYLLABLE DIS;Lo;0;L;;;;;N;;;;; B528;HANGUL SYLLABLE DISS;Lo;0;L;;;;;N;;;;; B529;HANGUL SYLLABLE DING;Lo;0;L;;;;;N;;;;; B52A;HANGUL SYLLABLE DIJ;Lo;0;L;;;;;N;;;;; B52B;HANGUL SYLLABLE DIC;Lo;0;L;;;;;N;;;;; B52C;HANGUL SYLLABLE DIK;Lo;0;L;;;;;N;;;;; B52D;HANGUL SYLLABLE DIT;Lo;0;L;;;;;N;;;;; B52E;HANGUL SYLLABLE DIP;Lo;0;L;;;;;N;;;;; B52F;HANGUL SYLLABLE DIH;Lo;0;L;;;;;N;;;;; B530;HANGUL SYLLABLE DDA;Lo;0;L;;;;;N;;;;; B531;HANGUL SYLLABLE DDAG;Lo;0;L;;;;;N;;;;; B532;HANGUL SYLLABLE DDAGG;Lo;0;L;;;;;N;;;;; B533;HANGUL SYLLABLE DDAGS;Lo;0;L;;;;;N;;;;; B534;HANGUL SYLLABLE DDAN;Lo;0;L;;;;;N;;;;; B535;HANGUL SYLLABLE DDANI;Lo;0;L;;;;;N;;;;; B536;HANGUL SYLLABLE DDANH;Lo;0;L;;;;;N;;;;; B537;HANGUL SYLLABLE DDAD;Lo;0;L;;;;;N;;;;; B538;HANGUL SYLLABLE DDAL;Lo;0;L;;;;;N;;;;; B539;HANGUL SYLLABLE DDALG;Lo;0;L;;;;;N;;;;; B53A;HANGUL SYLLABLE DDALM;Lo;0;L;;;;;N;;;;; B53B;HANGUL SYLLABLE DDALB;Lo;0;L;;;;;N;;;;; B53C;HANGUL SYLLABLE DDALS;Lo;0;L;;;;;N;;;;; B53D;HANGUL SYLLABLE DDALT;Lo;0;L;;;;;N;;;;; B53E;HANGUL SYLLABLE DDALP;Lo;0;L;;;;;N;;;;; B53F;HANGUL SYLLABLE DDALH;Lo;0;L;;;;;N;;;;; B540;HANGUL SYLLABLE DDAM;Lo;0;L;;;;;N;;;;; B541;HANGUL SYLLABLE DDAB;Lo;0;L;;;;;N;;;;; B542;HANGUL SYLLABLE DDABS;Lo;0;L;;;;;N;;;;; B543;HANGUL SYLLABLE DDAS;Lo;0;L;;;;;N;;;;; B544;HANGUL SYLLABLE DDASS;Lo;0;L;;;;;N;;;;; B545;HANGUL SYLLABLE DDANG;Lo;0;L;;;;;N;;;;; B546;HANGUL SYLLABLE DDAJ;Lo;0;L;;;;;N;;;;; B547;HANGUL SYLLABLE DDAC;Lo;0;L;;;;;N;;;;; B548;HANGUL SYLLABLE DDAK;Lo;0;L;;;;;N;;;;; B549;HANGUL SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; B54A;HANGUL SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; B54B;HANGUL SYLLABLE DDAH;Lo;0;L;;;;;N;;;;; B54C;HANGUL SYLLABLE DDAE;Lo;0;L;;;;;N;;;;; B54D;HANGUL SYLLABLE DDAEG;Lo;0;L;;;;;N;;;;; B54E;HANGUL SYLLABLE DDAEGG;Lo;0;L;;;;;N;;;;; B54F;HANGUL SYLLABLE DDAEGS;Lo;0;L;;;;;N;;;;; B550;HANGUL SYLLABLE DDAEN;Lo;0;L;;;;;N;;;;; B551;HANGUL SYLLABLE DDAENI;Lo;0;L;;;;;N;;;;; B552;HANGUL SYLLABLE DDAENH;Lo;0;L;;;;;N;;;;; B553;HANGUL SYLLABLE DDAED;Lo;0;L;;;;;N;;;;; B554;HANGUL SYLLABLE DDAEL;Lo;0;L;;;;;N;;;;; B555;HANGUL SYLLABLE DDAELG;Lo;0;L;;;;;N;;;;; B556;HANGUL SYLLABLE DDAELM;Lo;0;L;;;;;N;;;;; B557;HANGUL SYLLABLE DDAELB;Lo;0;L;;;;;N;;;;; B558;HANGUL SYLLABLE DDAELS;Lo;0;L;;;;;N;;;;; B559;HANGUL SYLLABLE DDAELT;Lo;0;L;;;;;N;;;;; B55A;HANGUL SYLLABLE DDAELP;Lo;0;L;;;;;N;;;;; B55B;HANGUL SYLLABLE DDAELH;Lo;0;L;;;;;N;;;;; B55C;HANGUL SYLLABLE DDAEM;Lo;0;L;;;;;N;;;;; B55D;HANGUL SYLLABLE DDAEB;Lo;0;L;;;;;N;;;;; B55E;HANGUL SYLLABLE DDAEBS;Lo;0;L;;;;;N;;;;; B55F;HANGUL SYLLABLE DDAES;Lo;0;L;;;;;N;;;;; B560;HANGUL SYLLABLE DDAESS;Lo;0;L;;;;;N;;;;; B561;HANGUL SYLLABLE DDAENG;Lo;0;L;;;;;N;;;;; B562;HANGUL SYLLABLE DDAEJ;Lo;0;L;;;;;N;;;;; B563;HANGUL SYLLABLE DDAEC;Lo;0;L;;;;;N;;;;; B564;HANGUL SYLLABLE DDAEK;Lo;0;L;;;;;N;;;;; B565;HANGUL SYLLABLE DDAET;Lo;0;L;;;;;N;;;;; B566;HANGUL SYLLABLE DDAEP;Lo;0;L;;;;;N;;;;; B567;HANGUL SYLLABLE DDAEH;Lo;0;L;;;;;N;;;;; B568;HANGUL SYLLABLE DDYA;Lo;0;L;;;;;N;;;;; B569;HANGUL SYLLABLE DDYAG;Lo;0;L;;;;;N;;;;; B56A;HANGUL SYLLABLE DDYAGG;Lo;0;L;;;;;N;;;;; B56B;HANGUL SYLLABLE DDYAGS;Lo;0;L;;;;;N;;;;; B56C;HANGUL SYLLABLE DDYAN;Lo;0;L;;;;;N;;;;; B56D;HANGUL SYLLABLE DDYANI;Lo;0;L;;;;;N;;;;; B56E;HANGUL SYLLABLE DDYANH;Lo;0;L;;;;;N;;;;; B56F;HANGUL SYLLABLE DDYAD;Lo;0;L;;;;;N;;;;; B570;HANGUL SYLLABLE DDYAL;Lo;0;L;;;;;N;;;;; B571;HANGUL SYLLABLE DDYALG;Lo;0;L;;;;;N;;;;; B572;HANGUL SYLLABLE DDYALM;Lo;0;L;;;;;N;;;;; B573;HANGUL SYLLABLE DDYALB;Lo;0;L;;;;;N;;;;; B574;HANGUL SYLLABLE DDYALS;Lo;0;L;;;;;N;;;;; B575;HANGUL SYLLABLE DDYALT;Lo;0;L;;;;;N;;;;; B576;HANGUL SYLLABLE DDYALP;Lo;0;L;;;;;N;;;;; B577;HANGUL SYLLABLE DDYALH;Lo;0;L;;;;;N;;;;; B578;HANGUL SYLLABLE DDYAM;Lo;0;L;;;;;N;;;;; B579;HANGUL SYLLABLE DDYAB;Lo;0;L;;;;;N;;;;; B57A;HANGUL SYLLABLE DDYABS;Lo;0;L;;;;;N;;;;; B57B;HANGUL SYLLABLE DDYAS;Lo;0;L;;;;;N;;;;; B57C;HANGUL SYLLABLE DDYASS;Lo;0;L;;;;;N;;;;; B57D;HANGUL SYLLABLE DDYANG;Lo;0;L;;;;;N;;;;; B57E;HANGUL SYLLABLE DDYAJ;Lo;0;L;;;;;N;;;;; B57F;HANGUL SYLLABLE DDYAC;Lo;0;L;;;;;N;;;;; B580;HANGUL SYLLABLE DDYAK;Lo;0;L;;;;;N;;;;; B581;HANGUL SYLLABLE DDYAT;Lo;0;L;;;;;N;;;;; B582;HANGUL SYLLABLE DDYAP;Lo;0;L;;;;;N;;;;; B583;HANGUL SYLLABLE DDYAH;Lo;0;L;;;;;N;;;;; B584;HANGUL SYLLABLE DDYAE;Lo;0;L;;;;;N;;;;; B585;HANGUL SYLLABLE DDYAEG;Lo;0;L;;;;;N;;;;; B586;HANGUL SYLLABLE DDYAEGG;Lo;0;L;;;;;N;;;;; B587;HANGUL SYLLABLE DDYAEGS;Lo;0;L;;;;;N;;;;; B588;HANGUL SYLLABLE DDYAEN;Lo;0;L;;;;;N;;;;; B589;HANGUL SYLLABLE DDYAENI;Lo;0;L;;;;;N;;;;; B58A;HANGUL SYLLABLE DDYAENH;Lo;0;L;;;;;N;;;;; B58B;HANGUL SYLLABLE DDYAED;Lo;0;L;;;;;N;;;;; B58C;HANGUL SYLLABLE DDYAEL;Lo;0;L;;;;;N;;;;; B58D;HANGUL SYLLABLE DDYAELG;Lo;0;L;;;;;N;;;;; B58E;HANGUL SYLLABLE DDYAELM;Lo;0;L;;;;;N;;;;; B58F;HANGUL SYLLABLE DDYAELB;Lo;0;L;;;;;N;;;;; B590;HANGUL SYLLABLE DDYAELS;Lo;0;L;;;;;N;;;;; B591;HANGUL SYLLABLE DDYAELT;Lo;0;L;;;;;N;;;;; B592;HANGUL SYLLABLE DDYAELP;Lo;0;L;;;;;N;;;;; B593;HANGUL SYLLABLE DDYAELH;Lo;0;L;;;;;N;;;;; B594;HANGUL SYLLABLE DDYAEM;Lo;0;L;;;;;N;;;;; B595;HANGUL SYLLABLE DDYAEB;Lo;0;L;;;;;N;;;;; B596;HANGUL SYLLABLE DDYAEBS;Lo;0;L;;;;;N;;;;; B597;HANGUL SYLLABLE DDYAES;Lo;0;L;;;;;N;;;;; B598;HANGUL SYLLABLE DDYAESS;Lo;0;L;;;;;N;;;;; B599;HANGUL SYLLABLE DDYAENG;Lo;0;L;;;;;N;;;;; B59A;HANGUL SYLLABLE DDYAEJ;Lo;0;L;;;;;N;;;;; B59B;HANGUL SYLLABLE DDYAEC;Lo;0;L;;;;;N;;;;; B59C;HANGUL SYLLABLE DDYAEK;Lo;0;L;;;;;N;;;;; B59D;HANGUL SYLLABLE DDYAET;Lo;0;L;;;;;N;;;;; B59E;HANGUL SYLLABLE DDYAEP;Lo;0;L;;;;;N;;;;; B59F;HANGUL SYLLABLE DDYAEH;Lo;0;L;;;;;N;;;;; B5A0;HANGUL SYLLABLE DDEO;Lo;0;L;;;;;N;;;;; B5A1;HANGUL SYLLABLE DDEOG;Lo;0;L;;;;;N;;;;; B5A2;HANGUL SYLLABLE DDEOGG;Lo;0;L;;;;;N;;;;; B5A3;HANGUL SYLLABLE DDEOGS;Lo;0;L;;;;;N;;;;; B5A4;HANGUL SYLLABLE DDEON;Lo;0;L;;;;;N;;;;; B5A5;HANGUL SYLLABLE DDEONI;Lo;0;L;;;;;N;;;;; B5A6;HANGUL SYLLABLE DDEONH;Lo;0;L;;;;;N;;;;; B5A7;HANGUL SYLLABLE DDEOD;Lo;0;L;;;;;N;;;;; B5A8;HANGUL SYLLABLE DDEOL;Lo;0;L;;;;;N;;;;; B5A9;HANGUL SYLLABLE DDEOLG;Lo;0;L;;;;;N;;;;; B5AA;HANGUL SYLLABLE DDEOLM;Lo;0;L;;;;;N;;;;; B5AB;HANGUL SYLLABLE DDEOLB;Lo;0;L;;;;;N;;;;; B5AC;HANGUL SYLLABLE DDEOLS;Lo;0;L;;;;;N;;;;; B5AD;HANGUL SYLLABLE DDEOLT;Lo;0;L;;;;;N;;;;; B5AE;HANGUL SYLLABLE DDEOLP;Lo;0;L;;;;;N;;;;; B5AF;HANGUL SYLLABLE DDEOLH;Lo;0;L;;;;;N;;;;; B5B0;HANGUL SYLLABLE DDEOM;Lo;0;L;;;;;N;;;;; B5B1;HANGUL SYLLABLE DDEOB;Lo;0;L;;;;;N;;;;; B5B2;HANGUL SYLLABLE DDEOBS;Lo;0;L;;;;;N;;;;; B5B3;HANGUL SYLLABLE DDEOS;Lo;0;L;;;;;N;;;;; B5B4;HANGUL SYLLABLE DDEOSS;Lo;0;L;;;;;N;;;;; B5B5;HANGUL SYLLABLE DDEONG;Lo;0;L;;;;;N;;;;; B5B6;HANGUL SYLLABLE DDEOJ;Lo;0;L;;;;;N;;;;; B5B7;HANGUL SYLLABLE DDEOC;Lo;0;L;;;;;N;;;;; B5B8;HANGUL SYLLABLE DDEOK;Lo;0;L;;;;;N;;;;; B5B9;HANGUL SYLLABLE DDEOT;Lo;0;L;;;;;N;;;;; B5BA;HANGUL SYLLABLE DDEOP;Lo;0;L;;;;;N;;;;; B5BB;HANGUL SYLLABLE DDEOH;Lo;0;L;;;;;N;;;;; B5BC;HANGUL SYLLABLE DDE;Lo;0;L;;;;;N;;;;; B5BD;HANGUL SYLLABLE DDEG;Lo;0;L;;;;;N;;;;; B5BE;HANGUL SYLLABLE DDEGG;Lo;0;L;;;;;N;;;;; B5BF;HANGUL SYLLABLE DDEGS;Lo;0;L;;;;;N;;;;; B5C0;HANGUL SYLLABLE DDEN;Lo;0;L;;;;;N;;;;; B5C1;HANGUL SYLLABLE DDENI;Lo;0;L;;;;;N;;;;; B5C2;HANGUL SYLLABLE DDENH;Lo;0;L;;;;;N;;;;; B5C3;HANGUL SYLLABLE DDED;Lo;0;L;;;;;N;;;;; B5C4;HANGUL SYLLABLE DDEL;Lo;0;L;;;;;N;;;;; B5C5;HANGUL SYLLABLE DDELG;Lo;0;L;;;;;N;;;;; B5C6;HANGUL SYLLABLE DDELM;Lo;0;L;;;;;N;;;;; B5C7;HANGUL SYLLABLE DDELB;Lo;0;L;;;;;N;;;;; B5C8;HANGUL SYLLABLE DDELS;Lo;0;L;;;;;N;;;;; B5C9;HANGUL SYLLABLE DDELT;Lo;0;L;;;;;N;;;;; B5CA;HANGUL SYLLABLE DDELP;Lo;0;L;;;;;N;;;;; B5CB;HANGUL SYLLABLE DDELH;Lo;0;L;;;;;N;;;;; B5CC;HANGUL SYLLABLE DDEM;Lo;0;L;;;;;N;;;;; B5CD;HANGUL SYLLABLE DDEB;Lo;0;L;;;;;N;;;;; B5CE;HANGUL SYLLABLE DDEBS;Lo;0;L;;;;;N;;;;; B5CF;HANGUL SYLLABLE DDES;Lo;0;L;;;;;N;;;;; B5D0;HANGUL SYLLABLE DDESS;Lo;0;L;;;;;N;;;;; B5D1;HANGUL SYLLABLE DDENG;Lo;0;L;;;;;N;;;;; B5D2;HANGUL SYLLABLE DDEJ;Lo;0;L;;;;;N;;;;; B5D3;HANGUL SYLLABLE DDEC;Lo;0;L;;;;;N;;;;; B5D4;HANGUL SYLLABLE DDEK;Lo;0;L;;;;;N;;;;; B5D5;HANGUL SYLLABLE DDET;Lo;0;L;;;;;N;;;;; B5D6;HANGUL SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; B5D7;HANGUL SYLLABLE DDEH;Lo;0;L;;;;;N;;;;; B5D8;HANGUL SYLLABLE DDYEO;Lo;0;L;;;;;N;;;;; B5D9;HANGUL SYLLABLE DDYEOG;Lo;0;L;;;;;N;;;;; B5DA;HANGUL SYLLABLE DDYEOGG;Lo;0;L;;;;;N;;;;; B5DB;HANGUL SYLLABLE DDYEOGS;Lo;0;L;;;;;N;;;;; B5DC;HANGUL SYLLABLE DDYEON;Lo;0;L;;;;;N;;;;; B5DD;HANGUL SYLLABLE DDYEONI;Lo;0;L;;;;;N;;;;; B5DE;HANGUL SYLLABLE DDYEONH;Lo;0;L;;;;;N;;;;; B5DF;HANGUL SYLLABLE DDYEOD;Lo;0;L;;;;;N;;;;; B5E0;HANGUL SYLLABLE DDYEOL;Lo;0;L;;;;;N;;;;; B5E1;HANGUL SYLLABLE DDYEOLG;Lo;0;L;;;;;N;;;;; B5E2;HANGUL SYLLABLE DDYEOLM;Lo;0;L;;;;;N;;;;; B5E3;HANGUL SYLLABLE DDYEOLB;Lo;0;L;;;;;N;;;;; B5E4;HANGUL SYLLABLE DDYEOLS;Lo;0;L;;;;;N;;;;; B5E5;HANGUL SYLLABLE DDYEOLT;Lo;0;L;;;;;N;;;;; B5E6;HANGUL SYLLABLE DDYEOLP;Lo;0;L;;;;;N;;;;; B5E7;HANGUL SYLLABLE DDYEOLH;Lo;0;L;;;;;N;;;;; B5E8;HANGUL SYLLABLE DDYEOM;Lo;0;L;;;;;N;;;;; B5E9;HANGUL SYLLABLE DDYEOB;Lo;0;L;;;;;N;;;;; B5EA;HANGUL SYLLABLE DDYEOBS;Lo;0;L;;;;;N;;;;; B5EB;HANGUL SYLLABLE DDYEOS;Lo;0;L;;;;;N;;;;; B5EC;HANGUL SYLLABLE DDYEOSS;Lo;0;L;;;;;N;;;;; B5ED;HANGUL SYLLABLE DDYEONG;Lo;0;L;;;;;N;;;;; B5EE;HANGUL SYLLABLE DDYEOJ;Lo;0;L;;;;;N;;;;; B5EF;HANGUL SYLLABLE DDYEOC;Lo;0;L;;;;;N;;;;; B5F0;HANGUL SYLLABLE DDYEOK;Lo;0;L;;;;;N;;;;; B5F1;HANGUL SYLLABLE DDYEOT;Lo;0;L;;;;;N;;;;; B5F2;HANGUL SYLLABLE DDYEOP;Lo;0;L;;;;;N;;;;; B5F3;HANGUL SYLLABLE DDYEOH;Lo;0;L;;;;;N;;;;; B5F4;HANGUL SYLLABLE DDYE;Lo;0;L;;;;;N;;;;; B5F5;HANGUL SYLLABLE DDYEG;Lo;0;L;;;;;N;;;;; B5F6;HANGUL SYLLABLE DDYEGG;Lo;0;L;;;;;N;;;;; B5F7;HANGUL SYLLABLE DDYEGS;Lo;0;L;;;;;N;;;;; B5F8;HANGUL SYLLABLE DDYEN;Lo;0;L;;;;;N;;;;; B5F9;HANGUL SYLLABLE DDYENI;Lo;0;L;;;;;N;;;;; B5FA;HANGUL SYLLABLE DDYENH;Lo;0;L;;;;;N;;;;; B5FB;HANGUL SYLLABLE DDYED;Lo;0;L;;;;;N;;;;; B5FC;HANGUL SYLLABLE DDYEL;Lo;0;L;;;;;N;;;;; B5FD;HANGUL SYLLABLE DDYELG;Lo;0;L;;;;;N;;;;; B5FE;HANGUL SYLLABLE DDYELM;Lo;0;L;;;;;N;;;;; B5FF;HANGUL SYLLABLE DDYELB;Lo;0;L;;;;;N;;;;; B600;HANGUL SYLLABLE DDYELS;Lo;0;L;;;;;N;;;;; B601;HANGUL SYLLABLE DDYELT;Lo;0;L;;;;;N;;;;; B602;HANGUL SYLLABLE DDYELP;Lo;0;L;;;;;N;;;;; B603;HANGUL SYLLABLE DDYELH;Lo;0;L;;;;;N;;;;; B604;HANGUL SYLLABLE DDYEM;Lo;0;L;;;;;N;;;;; B605;HANGUL SYLLABLE DDYEB;Lo;0;L;;;;;N;;;;; B606;HANGUL SYLLABLE DDYEBS;Lo;0;L;;;;;N;;;;; B607;HANGUL SYLLABLE DDYES;Lo;0;L;;;;;N;;;;; B608;HANGUL SYLLABLE DDYESS;Lo;0;L;;;;;N;;;;; B609;HANGUL SYLLABLE DDYENG;Lo;0;L;;;;;N;;;;; B60A;HANGUL SYLLABLE DDYEJ;Lo;0;L;;;;;N;;;;; B60B;HANGUL SYLLABLE DDYEC;Lo;0;L;;;;;N;;;;; B60C;HANGUL SYLLABLE DDYEK;Lo;0;L;;;;;N;;;;; B60D;HANGUL SYLLABLE DDYET;Lo;0;L;;;;;N;;;;; B60E;HANGUL SYLLABLE DDYEP;Lo;0;L;;;;;N;;;;; B60F;HANGUL SYLLABLE DDYEH;Lo;0;L;;;;;N;;;;; B610;HANGUL SYLLABLE DDO;Lo;0;L;;;;;N;;;;; B611;HANGUL SYLLABLE DDOG;Lo;0;L;;;;;N;;;;; B612;HANGUL SYLLABLE DDOGG;Lo;0;L;;;;;N;;;;; B613;HANGUL SYLLABLE DDOGS;Lo;0;L;;;;;N;;;;; B614;HANGUL SYLLABLE DDON;Lo;0;L;;;;;N;;;;; B615;HANGUL SYLLABLE DDONI;Lo;0;L;;;;;N;;;;; B616;HANGUL SYLLABLE DDONH;Lo;0;L;;;;;N;;;;; B617;HANGUL SYLLABLE DDOD;Lo;0;L;;;;;N;;;;; B618;HANGUL SYLLABLE DDOL;Lo;0;L;;;;;N;;;;; B619;HANGUL SYLLABLE DDOLG;Lo;0;L;;;;;N;;;;; B61A;HANGUL SYLLABLE DDOLM;Lo;0;L;;;;;N;;;;; B61B;HANGUL SYLLABLE DDOLB;Lo;0;L;;;;;N;;;;; B61C;HANGUL SYLLABLE DDOLS;Lo;0;L;;;;;N;;;;; B61D;HANGUL SYLLABLE DDOLT;Lo;0;L;;;;;N;;;;; B61E;HANGUL SYLLABLE DDOLP;Lo;0;L;;;;;N;;;;; B61F;HANGUL SYLLABLE DDOLH;Lo;0;L;;;;;N;;;;; B620;HANGUL SYLLABLE DDOM;Lo;0;L;;;;;N;;;;; B621;HANGUL SYLLABLE DDOB;Lo;0;L;;;;;N;;;;; B622;HANGUL SYLLABLE DDOBS;Lo;0;L;;;;;N;;;;; B623;HANGUL SYLLABLE DDOS;Lo;0;L;;;;;N;;;;; B624;HANGUL SYLLABLE DDOSS;Lo;0;L;;;;;N;;;;; B625;HANGUL SYLLABLE DDONG;Lo;0;L;;;;;N;;;;; B626;HANGUL SYLLABLE DDOJ;Lo;0;L;;;;;N;;;;; B627;HANGUL SYLLABLE DDOC;Lo;0;L;;;;;N;;;;; B628;HANGUL SYLLABLE DDOK;Lo;0;L;;;;;N;;;;; B629;HANGUL SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; B62A;HANGUL SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; B62B;HANGUL SYLLABLE DDOH;Lo;0;L;;;;;N;;;;; B62C;HANGUL SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; B62D;HANGUL SYLLABLE DDWAG;Lo;0;L;;;;;N;;;;; B62E;HANGUL SYLLABLE DDWAGG;Lo;0;L;;;;;N;;;;; B62F;HANGUL SYLLABLE DDWAGS;Lo;0;L;;;;;N;;;;; B630;HANGUL SYLLABLE DDWAN;Lo;0;L;;;;;N;;;;; B631;HANGUL SYLLABLE DDWANI;Lo;0;L;;;;;N;;;;; B632;HANGUL SYLLABLE DDWANH;Lo;0;L;;;;;N;;;;; B633;HANGUL SYLLABLE DDWAD;Lo;0;L;;;;;N;;;;; B634;HANGUL SYLLABLE DDWAL;Lo;0;L;;;;;N;;;;; B635;HANGUL SYLLABLE DDWALG;Lo;0;L;;;;;N;;;;; B636;HANGUL SYLLABLE DDWALM;Lo;0;L;;;;;N;;;;; B637;HANGUL SYLLABLE DDWALB;Lo;0;L;;;;;N;;;;; B638;HANGUL SYLLABLE DDWALS;Lo;0;L;;;;;N;;;;; B639;HANGUL SYLLABLE DDWALT;Lo;0;L;;;;;N;;;;; B63A;HANGUL SYLLABLE DDWALP;Lo;0;L;;;;;N;;;;; B63B;HANGUL SYLLABLE DDWALH;Lo;0;L;;;;;N;;;;; B63C;HANGUL SYLLABLE DDWAM;Lo;0;L;;;;;N;;;;; B63D;HANGUL SYLLABLE DDWAB;Lo;0;L;;;;;N;;;;; B63E;HANGUL SYLLABLE DDWABS;Lo;0;L;;;;;N;;;;; B63F;HANGUL SYLLABLE DDWAS;Lo;0;L;;;;;N;;;;; B640;HANGUL SYLLABLE DDWASS;Lo;0;L;;;;;N;;;;; B641;HANGUL SYLLABLE DDWANG;Lo;0;L;;;;;N;;;;; B642;HANGUL SYLLABLE DDWAJ;Lo;0;L;;;;;N;;;;; B643;HANGUL SYLLABLE DDWAC;Lo;0;L;;;;;N;;;;; B644;HANGUL SYLLABLE DDWAK;Lo;0;L;;;;;N;;;;; B645;HANGUL SYLLABLE DDWAT;Lo;0;L;;;;;N;;;;; B646;HANGUL SYLLABLE DDWAP;Lo;0;L;;;;;N;;;;; B647;HANGUL SYLLABLE DDWAH;Lo;0;L;;;;;N;;;;; B648;HANGUL SYLLABLE DDWAE;Lo;0;L;;;;;N;;;;; B649;HANGUL SYLLABLE DDWAEG;Lo;0;L;;;;;N;;;;; B64A;HANGUL SYLLABLE DDWAEGG;Lo;0;L;;;;;N;;;;; B64B;HANGUL SYLLABLE DDWAEGS;Lo;0;L;;;;;N;;;;; B64C;HANGUL SYLLABLE DDWAEN;Lo;0;L;;;;;N;;;;; B64D;HANGUL SYLLABLE DDWAENI;Lo;0;L;;;;;N;;;;; B64E;HANGUL SYLLABLE DDWAENH;Lo;0;L;;;;;N;;;;; B64F;HANGUL SYLLABLE DDWAED;Lo;0;L;;;;;N;;;;; B650;HANGUL SYLLABLE DDWAEL;Lo;0;L;;;;;N;;;;; B651;HANGUL SYLLABLE DDWAELG;Lo;0;L;;;;;N;;;;; B652;HANGUL SYLLABLE DDWAELM;Lo;0;L;;;;;N;;;;; B653;HANGUL SYLLABLE DDWAELB;Lo;0;L;;;;;N;;;;; B654;HANGUL SYLLABLE DDWAELS;Lo;0;L;;;;;N;;;;; B655;HANGUL SYLLABLE DDWAELT;Lo;0;L;;;;;N;;;;; B656;HANGUL SYLLABLE DDWAELP;Lo;0;L;;;;;N;;;;; B657;HANGUL SYLLABLE DDWAELH;Lo;0;L;;;;;N;;;;; B658;HANGUL SYLLABLE DDWAEM;Lo;0;L;;;;;N;;;;; B659;HANGUL SYLLABLE DDWAEB;Lo;0;L;;;;;N;;;;; B65A;HANGUL SYLLABLE DDWAEBS;Lo;0;L;;;;;N;;;;; B65B;HANGUL SYLLABLE DDWAES;Lo;0;L;;;;;N;;;;; B65C;HANGUL SYLLABLE DDWAESS;Lo;0;L;;;;;N;;;;; B65D;HANGUL SYLLABLE DDWAENG;Lo;0;L;;;;;N;;;;; B65E;HANGUL SYLLABLE DDWAEJ;Lo;0;L;;;;;N;;;;; B65F;HANGUL SYLLABLE DDWAEC;Lo;0;L;;;;;N;;;;; B660;HANGUL SYLLABLE DDWAEK;Lo;0;L;;;;;N;;;;; B661;HANGUL SYLLABLE DDWAET;Lo;0;L;;;;;N;;;;; B662;HANGUL SYLLABLE DDWAEP;Lo;0;L;;;;;N;;;;; B663;HANGUL SYLLABLE DDWAEH;Lo;0;L;;;;;N;;;;; B664;HANGUL SYLLABLE DDOE;Lo;0;L;;;;;N;;;;; B665;HANGUL SYLLABLE DDOEG;Lo;0;L;;;;;N;;;;; B666;HANGUL SYLLABLE DDOEGG;Lo;0;L;;;;;N;;;;; B667;HANGUL SYLLABLE DDOEGS;Lo;0;L;;;;;N;;;;; B668;HANGUL SYLLABLE DDOEN;Lo;0;L;;;;;N;;;;; B669;HANGUL SYLLABLE DDOENI;Lo;0;L;;;;;N;;;;; B66A;HANGUL SYLLABLE DDOENH;Lo;0;L;;;;;N;;;;; B66B;HANGUL SYLLABLE DDOED;Lo;0;L;;;;;N;;;;; B66C;HANGUL SYLLABLE DDOEL;Lo;0;L;;;;;N;;;;; B66D;HANGUL SYLLABLE DDOELG;Lo;0;L;;;;;N;;;;; B66E;HANGUL SYLLABLE DDOELM;Lo;0;L;;;;;N;;;;; B66F;HANGUL SYLLABLE DDOELB;Lo;0;L;;;;;N;;;;; B670;HANGUL SYLLABLE DDOELS;Lo;0;L;;;;;N;;;;; B671;HANGUL SYLLABLE DDOELT;Lo;0;L;;;;;N;;;;; B672;HANGUL SYLLABLE DDOELP;Lo;0;L;;;;;N;;;;; B673;HANGUL SYLLABLE DDOELH;Lo;0;L;;;;;N;;;;; B674;HANGUL SYLLABLE DDOEM;Lo;0;L;;;;;N;;;;; B675;HANGUL SYLLABLE DDOEB;Lo;0;L;;;;;N;;;;; B676;HANGUL SYLLABLE DDOEBS;Lo;0;L;;;;;N;;;;; B677;HANGUL SYLLABLE DDOES;Lo;0;L;;;;;N;;;;; B678;HANGUL SYLLABLE DDOESS;Lo;0;L;;;;;N;;;;; B679;HANGUL SYLLABLE DDOENG;Lo;0;L;;;;;N;;;;; B67A;HANGUL SYLLABLE DDOEJ;Lo;0;L;;;;;N;;;;; B67B;HANGUL SYLLABLE DDOEC;Lo;0;L;;;;;N;;;;; B67C;HANGUL SYLLABLE DDOEK;Lo;0;L;;;;;N;;;;; B67D;HANGUL SYLLABLE DDOET;Lo;0;L;;;;;N;;;;; B67E;HANGUL SYLLABLE DDOEP;Lo;0;L;;;;;N;;;;; B67F;HANGUL SYLLABLE DDOEH;Lo;0;L;;;;;N;;;;; B680;HANGUL SYLLABLE DDYO;Lo;0;L;;;;;N;;;;; B681;HANGUL SYLLABLE DDYOG;Lo;0;L;;;;;N;;;;; B682;HANGUL SYLLABLE DDYOGG;Lo;0;L;;;;;N;;;;; B683;HANGUL SYLLABLE DDYOGS;Lo;0;L;;;;;N;;;;; B684;HANGUL SYLLABLE DDYON;Lo;0;L;;;;;N;;;;; B685;HANGUL SYLLABLE DDYONI;Lo;0;L;;;;;N;;;;; B686;HANGUL SYLLABLE DDYONH;Lo;0;L;;;;;N;;;;; B687;HANGUL SYLLABLE DDYOD;Lo;0;L;;;;;N;;;;; B688;HANGUL SYLLABLE DDYOL;Lo;0;L;;;;;N;;;;; B689;HANGUL SYLLABLE DDYOLG;Lo;0;L;;;;;N;;;;; B68A;HANGUL SYLLABLE DDYOLM;Lo;0;L;;;;;N;;;;; B68B;HANGUL SYLLABLE DDYOLB;Lo;0;L;;;;;N;;;;; B68C;HANGUL SYLLABLE DDYOLS;Lo;0;L;;;;;N;;;;; B68D;HANGUL SYLLABLE DDYOLT;Lo;0;L;;;;;N;;;;; B68E;HANGUL SYLLABLE DDYOLP;Lo;0;L;;;;;N;;;;; B68F;HANGUL SYLLABLE DDYOLH;Lo;0;L;;;;;N;;;;; B690;HANGUL SYLLABLE DDYOM;Lo;0;L;;;;;N;;;;; B691;HANGUL SYLLABLE DDYOB;Lo;0;L;;;;;N;;;;; B692;HANGUL SYLLABLE DDYOBS;Lo;0;L;;;;;N;;;;; B693;HANGUL SYLLABLE DDYOS;Lo;0;L;;;;;N;;;;; B694;HANGUL SYLLABLE DDYOSS;Lo;0;L;;;;;N;;;;; B695;HANGUL SYLLABLE DDYONG;Lo;0;L;;;;;N;;;;; B696;HANGUL SYLLABLE DDYOJ;Lo;0;L;;;;;N;;;;; B697;HANGUL SYLLABLE DDYOC;Lo;0;L;;;;;N;;;;; B698;HANGUL SYLLABLE DDYOK;Lo;0;L;;;;;N;;;;; B699;HANGUL SYLLABLE DDYOT;Lo;0;L;;;;;N;;;;; B69A;HANGUL SYLLABLE DDYOP;Lo;0;L;;;;;N;;;;; B69B;HANGUL SYLLABLE DDYOH;Lo;0;L;;;;;N;;;;; B69C;HANGUL SYLLABLE DDU;Lo;0;L;;;;;N;;;;; B69D;HANGUL SYLLABLE DDUG;Lo;0;L;;;;;N;;;;; B69E;HANGUL SYLLABLE DDUGG;Lo;0;L;;;;;N;;;;; B69F;HANGUL SYLLABLE DDUGS;Lo;0;L;;;;;N;;;;; B6A0;HANGUL SYLLABLE DDUN;Lo;0;L;;;;;N;;;;; B6A1;HANGUL SYLLABLE DDUNI;Lo;0;L;;;;;N;;;;; B6A2;HANGUL SYLLABLE DDUNH;Lo;0;L;;;;;N;;;;; B6A3;HANGUL SYLLABLE DDUD;Lo;0;L;;;;;N;;;;; B6A4;HANGUL SYLLABLE DDUL;Lo;0;L;;;;;N;;;;; B6A5;HANGUL SYLLABLE DDULG;Lo;0;L;;;;;N;;;;; B6A6;HANGUL SYLLABLE DDULM;Lo;0;L;;;;;N;;;;; B6A7;HANGUL SYLLABLE DDULB;Lo;0;L;;;;;N;;;;; B6A8;HANGUL SYLLABLE DDULS;Lo;0;L;;;;;N;;;;; B6A9;HANGUL SYLLABLE DDULT;Lo;0;L;;;;;N;;;;; B6AA;HANGUL SYLLABLE DDULP;Lo;0;L;;;;;N;;;;; B6AB;HANGUL SYLLABLE DDULH;Lo;0;L;;;;;N;;;;; B6AC;HANGUL SYLLABLE DDUM;Lo;0;L;;;;;N;;;;; B6AD;HANGUL SYLLABLE DDUB;Lo;0;L;;;;;N;;;;; B6AE;HANGUL SYLLABLE DDUBS;Lo;0;L;;;;;N;;;;; B6AF;HANGUL SYLLABLE DDUS;Lo;0;L;;;;;N;;;;; B6B0;HANGUL SYLLABLE DDUSS;Lo;0;L;;;;;N;;;;; B6B1;HANGUL SYLLABLE DDUNG;Lo;0;L;;;;;N;;;;; B6B2;HANGUL SYLLABLE DDUJ;Lo;0;L;;;;;N;;;;; B6B3;HANGUL SYLLABLE DDUC;Lo;0;L;;;;;N;;;;; B6B4;HANGUL SYLLABLE DDUK;Lo;0;L;;;;;N;;;;; B6B5;HANGUL SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; B6B6;HANGUL SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; B6B7;HANGUL SYLLABLE DDUH;Lo;0;L;;;;;N;;;;; B6B8;HANGUL SYLLABLE DDWEO;Lo;0;L;;;;;N;;;;; B6B9;HANGUL SYLLABLE DDWEOG;Lo;0;L;;;;;N;;;;; B6BA;HANGUL SYLLABLE DDWEOGG;Lo;0;L;;;;;N;;;;; B6BB;HANGUL SYLLABLE DDWEOGS;Lo;0;L;;;;;N;;;;; B6BC;HANGUL SYLLABLE DDWEON;Lo;0;L;;;;;N;;;;; B6BD;HANGUL SYLLABLE DDWEONI;Lo;0;L;;;;;N;;;;; B6BE;HANGUL SYLLABLE DDWEONH;Lo;0;L;;;;;N;;;;; B6BF;HANGUL SYLLABLE DDWEOD;Lo;0;L;;;;;N;;;;; B6C0;HANGUL SYLLABLE DDWEOL;Lo;0;L;;;;;N;;;;; B6C1;HANGUL SYLLABLE DDWEOLG;Lo;0;L;;;;;N;;;;; B6C2;HANGUL SYLLABLE DDWEOLM;Lo;0;L;;;;;N;;;;; B6C3;HANGUL SYLLABLE DDWEOLB;Lo;0;L;;;;;N;;;;; B6C4;HANGUL SYLLABLE DDWEOLS;Lo;0;L;;;;;N;;;;; B6C5;HANGUL SYLLABLE DDWEOLT;Lo;0;L;;;;;N;;;;; B6C6;HANGUL SYLLABLE DDWEOLP;Lo;0;L;;;;;N;;;;; B6C7;HANGUL SYLLABLE DDWEOLH;Lo;0;L;;;;;N;;;;; B6C8;HANGUL SYLLABLE DDWEOM;Lo;0;L;;;;;N;;;;; B6C9;HANGUL SYLLABLE DDWEOB;Lo;0;L;;;;;N;;;;; B6CA;HANGUL SYLLABLE DDWEOBS;Lo;0;L;;;;;N;;;;; B6CB;HANGUL SYLLABLE DDWEOS;Lo;0;L;;;;;N;;;;; B6CC;HANGUL SYLLABLE DDWEOSS;Lo;0;L;;;;;N;;;;; B6CD;HANGUL SYLLABLE DDWEONG;Lo;0;L;;;;;N;;;;; B6CE;HANGUL SYLLABLE DDWEOJ;Lo;0;L;;;;;N;;;;; B6CF;HANGUL SYLLABLE DDWEOC;Lo;0;L;;;;;N;;;;; B6D0;HANGUL SYLLABLE DDWEOK;Lo;0;L;;;;;N;;;;; B6D1;HANGUL SYLLABLE DDWEOT;Lo;0;L;;;;;N;;;;; B6D2;HANGUL SYLLABLE DDWEOP;Lo;0;L;;;;;N;;;;; B6D3;HANGUL SYLLABLE DDWEOH;Lo;0;L;;;;;N;;;;; B6D4;HANGUL SYLLABLE DDWE;Lo;0;L;;;;;N;;;;; B6D5;HANGUL SYLLABLE DDWEG;Lo;0;L;;;;;N;;;;; B6D6;HANGUL SYLLABLE DDWEGG;Lo;0;L;;;;;N;;;;; B6D7;HANGUL SYLLABLE DDWEGS;Lo;0;L;;;;;N;;;;; B6D8;HANGUL SYLLABLE DDWEN;Lo;0;L;;;;;N;;;;; B6D9;HANGUL SYLLABLE DDWENI;Lo;0;L;;;;;N;;;;; B6DA;HANGUL SYLLABLE DDWENH;Lo;0;L;;;;;N;;;;; B6DB;HANGUL SYLLABLE DDWED;Lo;0;L;;;;;N;;;;; B6DC;HANGUL SYLLABLE DDWEL;Lo;0;L;;;;;N;;;;; B6DD;HANGUL SYLLABLE DDWELG;Lo;0;L;;;;;N;;;;; B6DE;HANGUL SYLLABLE DDWELM;Lo;0;L;;;;;N;;;;; B6DF;HANGUL SYLLABLE DDWELB;Lo;0;L;;;;;N;;;;; B6E0;HANGUL SYLLABLE DDWELS;Lo;0;L;;;;;N;;;;; B6E1;HANGUL SYLLABLE DDWELT;Lo;0;L;;;;;N;;;;; B6E2;HANGUL SYLLABLE DDWELP;Lo;0;L;;;;;N;;;;; B6E3;HANGUL SYLLABLE DDWELH;Lo;0;L;;;;;N;;;;; B6E4;HANGUL SYLLABLE DDWEM;Lo;0;L;;;;;N;;;;; B6E5;HANGUL SYLLABLE DDWEB;Lo;0;L;;;;;N;;;;; B6E6;HANGUL SYLLABLE DDWEBS;Lo;0;L;;;;;N;;;;; B6E7;HANGUL SYLLABLE DDWES;Lo;0;L;;;;;N;;;;; B6E8;HANGUL SYLLABLE DDWESS;Lo;0;L;;;;;N;;;;; B6E9;HANGUL SYLLABLE DDWENG;Lo;0;L;;;;;N;;;;; B6EA;HANGUL SYLLABLE DDWEJ;Lo;0;L;;;;;N;;;;; B6EB;HANGUL SYLLABLE DDWEC;Lo;0;L;;;;;N;;;;; B6EC;HANGUL SYLLABLE DDWEK;Lo;0;L;;;;;N;;;;; B6ED;HANGUL SYLLABLE DDWET;Lo;0;L;;;;;N;;;;; B6EE;HANGUL SYLLABLE DDWEP;Lo;0;L;;;;;N;;;;; B6EF;HANGUL SYLLABLE DDWEH;Lo;0;L;;;;;N;;;;; B6F0;HANGUL SYLLABLE DDWI;Lo;0;L;;;;;N;;;;; B6F1;HANGUL SYLLABLE DDWIG;Lo;0;L;;;;;N;;;;; B6F2;HANGUL SYLLABLE DDWIGG;Lo;0;L;;;;;N;;;;; B6F3;HANGUL SYLLABLE DDWIGS;Lo;0;L;;;;;N;;;;; B6F4;HANGUL SYLLABLE DDWIN;Lo;0;L;;;;;N;;;;; B6F5;HANGUL SYLLABLE DDWINI;Lo;0;L;;;;;N;;;;; B6F6;HANGUL SYLLABLE DDWINH;Lo;0;L;;;;;N;;;;; B6F7;HANGUL SYLLABLE DDWID;Lo;0;L;;;;;N;;;;; B6F8;HANGUL SYLLABLE DDWIL;Lo;0;L;;;;;N;;;;; B6F9;HANGUL SYLLABLE DDWILG;Lo;0;L;;;;;N;;;;; B6FA;HANGUL SYLLABLE DDWILM;Lo;0;L;;;;;N;;;;; B6FB;HANGUL SYLLABLE DDWILB;Lo;0;L;;;;;N;;;;; B6FC;HANGUL SYLLABLE DDWILS;Lo;0;L;;;;;N;;;;; B6FD;HANGUL SYLLABLE DDWILT;Lo;0;L;;;;;N;;;;; B6FE;HANGUL SYLLABLE DDWILP;Lo;0;L;;;;;N;;;;; B6FF;HANGUL SYLLABLE DDWILH;Lo;0;L;;;;;N;;;;; B700;HANGUL SYLLABLE DDWIM;Lo;0;L;;;;;N;;;;; B701;HANGUL SYLLABLE DDWIB;Lo;0;L;;;;;N;;;;; B702;HANGUL SYLLABLE DDWIBS;Lo;0;L;;;;;N;;;;; B703;HANGUL SYLLABLE DDWIS;Lo;0;L;;;;;N;;;;; B704;HANGUL SYLLABLE DDWISS;Lo;0;L;;;;;N;;;;; B705;HANGUL SYLLABLE DDWING;Lo;0;L;;;;;N;;;;; B706;HANGUL SYLLABLE DDWIJ;Lo;0;L;;;;;N;;;;; B707;HANGUL SYLLABLE DDWIC;Lo;0;L;;;;;N;;;;; B708;HANGUL SYLLABLE DDWIK;Lo;0;L;;;;;N;;;;; B709;HANGUL SYLLABLE DDWIT;Lo;0;L;;;;;N;;;;; B70A;HANGUL SYLLABLE DDWIP;Lo;0;L;;;;;N;;;;; B70B;HANGUL SYLLABLE DDWIH;Lo;0;L;;;;;N;;;;; B70C;HANGUL SYLLABLE DDYU;Lo;0;L;;;;;N;;;;; B70D;HANGUL SYLLABLE DDYUG;Lo;0;L;;;;;N;;;;; B70E;HANGUL SYLLABLE DDYUGG;Lo;0;L;;;;;N;;;;; B70F;HANGUL SYLLABLE DDYUGS;Lo;0;L;;;;;N;;;;; B710;HANGUL SYLLABLE DDYUN;Lo;0;L;;;;;N;;;;; B711;HANGUL SYLLABLE DDYUNI;Lo;0;L;;;;;N;;;;; B712;HANGUL SYLLABLE DDYUNH;Lo;0;L;;;;;N;;;;; B713;HANGUL SYLLABLE DDYUD;Lo;0;L;;;;;N;;;;; B714;HANGUL SYLLABLE DDYUL;Lo;0;L;;;;;N;;;;; B715;HANGUL SYLLABLE DDYULG;Lo;0;L;;;;;N;;;;; B716;HANGUL SYLLABLE DDYULM;Lo;0;L;;;;;N;;;;; B717;HANGUL SYLLABLE DDYULB;Lo;0;L;;;;;N;;;;; B718;HANGUL SYLLABLE DDYULS;Lo;0;L;;;;;N;;;;; B719;HANGUL SYLLABLE DDYULT;Lo;0;L;;;;;N;;;;; B71A;HANGUL SYLLABLE DDYULP;Lo;0;L;;;;;N;;;;; B71B;HANGUL SYLLABLE DDYULH;Lo;0;L;;;;;N;;;;; B71C;HANGUL SYLLABLE DDYUM;Lo;0;L;;;;;N;;;;; B71D;HANGUL SYLLABLE DDYUB;Lo;0;L;;;;;N;;;;; B71E;HANGUL SYLLABLE DDYUBS;Lo;0;L;;;;;N;;;;; B71F;HANGUL SYLLABLE DDYUS;Lo;0;L;;;;;N;;;;; B720;HANGUL SYLLABLE DDYUSS;Lo;0;L;;;;;N;;;;; B721;HANGUL SYLLABLE DDYUNG;Lo;0;L;;;;;N;;;;; B722;HANGUL SYLLABLE DDYUJ;Lo;0;L;;;;;N;;;;; B723;HANGUL SYLLABLE DDYUC;Lo;0;L;;;;;N;;;;; B724;HANGUL SYLLABLE DDYUK;Lo;0;L;;;;;N;;;;; B725;HANGUL SYLLABLE DDYUT;Lo;0;L;;;;;N;;;;; B726;HANGUL SYLLABLE DDYUP;Lo;0;L;;;;;N;;;;; B727;HANGUL SYLLABLE DDYUH;Lo;0;L;;;;;N;;;;; B728;HANGUL SYLLABLE DDEU;Lo;0;L;;;;;N;;;;; B729;HANGUL SYLLABLE DDEUG;Lo;0;L;;;;;N;;;;; B72A;HANGUL SYLLABLE DDEUGG;Lo;0;L;;;;;N;;;;; B72B;HANGUL SYLLABLE DDEUGS;Lo;0;L;;;;;N;;;;; B72C;HANGUL SYLLABLE DDEUN;Lo;0;L;;;;;N;;;;; B72D;HANGUL SYLLABLE DDEUNI;Lo;0;L;;;;;N;;;;; B72E;HANGUL SYLLABLE DDEUNH;Lo;0;L;;;;;N;;;;; B72F;HANGUL SYLLABLE DDEUD;Lo;0;L;;;;;N;;;;; B730;HANGUL SYLLABLE DDEUL;Lo;0;L;;;;;N;;;;; B731;HANGUL SYLLABLE DDEULG;Lo;0;L;;;;;N;;;;; B732;HANGUL SYLLABLE DDEULM;Lo;0;L;;;;;N;;;;; B733;HANGUL SYLLABLE DDEULB;Lo;0;L;;;;;N;;;;; B734;HANGUL SYLLABLE DDEULS;Lo;0;L;;;;;N;;;;; B735;HANGUL SYLLABLE DDEULT;Lo;0;L;;;;;N;;;;; B736;HANGUL SYLLABLE DDEULP;Lo;0;L;;;;;N;;;;; B737;HANGUL SYLLABLE DDEULH;Lo;0;L;;;;;N;;;;; B738;HANGUL SYLLABLE DDEUM;Lo;0;L;;;;;N;;;;; B739;HANGUL SYLLABLE DDEUB;Lo;0;L;;;;;N;;;;; B73A;HANGUL SYLLABLE DDEUBS;Lo;0;L;;;;;N;;;;; B73B;HANGUL SYLLABLE DDEUS;Lo;0;L;;;;;N;;;;; B73C;HANGUL SYLLABLE DDEUSS;Lo;0;L;;;;;N;;;;; B73D;HANGUL SYLLABLE DDEUNG;Lo;0;L;;;;;N;;;;; B73E;HANGUL SYLLABLE DDEUJ;Lo;0;L;;;;;N;;;;; B73F;HANGUL SYLLABLE DDEUC;Lo;0;L;;;;;N;;;;; B740;HANGUL SYLLABLE DDEUK;Lo;0;L;;;;;N;;;;; B741;HANGUL SYLLABLE DDEUT;Lo;0;L;;;;;N;;;;; B742;HANGUL SYLLABLE DDEUP;Lo;0;L;;;;;N;;;;; B743;HANGUL SYLLABLE DDEUH;Lo;0;L;;;;;N;;;;; B744;HANGUL SYLLABLE DDYI;Lo;0;L;;;;;N;;;;; B745;HANGUL SYLLABLE DDYIG;Lo;0;L;;;;;N;;;;; B746;HANGUL SYLLABLE DDYIGG;Lo;0;L;;;;;N;;;;; B747;HANGUL SYLLABLE DDYIGS;Lo;0;L;;;;;N;;;;; B748;HANGUL SYLLABLE DDYIN;Lo;0;L;;;;;N;;;;; B749;HANGUL SYLLABLE DDYINI;Lo;0;L;;;;;N;;;;; B74A;HANGUL SYLLABLE DDYINH;Lo;0;L;;;;;N;;;;; B74B;HANGUL SYLLABLE DDYID;Lo;0;L;;;;;N;;;;; B74C;HANGUL SYLLABLE DDYIL;Lo;0;L;;;;;N;;;;; B74D;HANGUL SYLLABLE DDYILG;Lo;0;L;;;;;N;;;;; B74E;HANGUL SYLLABLE DDYILM;Lo;0;L;;;;;N;;;;; B74F;HANGUL SYLLABLE DDYILB;Lo;0;L;;;;;N;;;;; B750;HANGUL SYLLABLE DDYILS;Lo;0;L;;;;;N;;;;; B751;HANGUL SYLLABLE DDYILT;Lo;0;L;;;;;N;;;;; B752;HANGUL SYLLABLE DDYILP;Lo;0;L;;;;;N;;;;; B753;HANGUL SYLLABLE DDYILH;Lo;0;L;;;;;N;;;;; B754;HANGUL SYLLABLE DDYIM;Lo;0;L;;;;;N;;;;; B755;HANGUL SYLLABLE DDYIB;Lo;0;L;;;;;N;;;;; B756;HANGUL SYLLABLE DDYIBS;Lo;0;L;;;;;N;;;;; B757;HANGUL SYLLABLE DDYIS;Lo;0;L;;;;;N;;;;; B758;HANGUL SYLLABLE DDYISS;Lo;0;L;;;;;N;;;;; B759;HANGUL SYLLABLE DDYING;Lo;0;L;;;;;N;;;;; B75A;HANGUL SYLLABLE DDYIJ;Lo;0;L;;;;;N;;;;; B75B;HANGUL SYLLABLE DDYIC;Lo;0;L;;;;;N;;;;; B75C;HANGUL SYLLABLE DDYIK;Lo;0;L;;;;;N;;;;; B75D;HANGUL SYLLABLE DDYIT;Lo;0;L;;;;;N;;;;; B75E;HANGUL SYLLABLE DDYIP;Lo;0;L;;;;;N;;;;; B75F;HANGUL SYLLABLE DDYIH;Lo;0;L;;;;;N;;;;; B760;HANGUL SYLLABLE DDI;Lo;0;L;;;;;N;;;;; B761;HANGUL SYLLABLE DDIG;Lo;0;L;;;;;N;;;;; B762;HANGUL SYLLABLE DDIGG;Lo;0;L;;;;;N;;;;; B763;HANGUL SYLLABLE DDIGS;Lo;0;L;;;;;N;;;;; B764;HANGUL SYLLABLE DDIN;Lo;0;L;;;;;N;;;;; B765;HANGUL SYLLABLE DDINI;Lo;0;L;;;;;N;;;;; B766;HANGUL SYLLABLE DDINH;Lo;0;L;;;;;N;;;;; B767;HANGUL SYLLABLE DDID;Lo;0;L;;;;;N;;;;; B768;HANGUL SYLLABLE DDIL;Lo;0;L;;;;;N;;;;; B769;HANGUL SYLLABLE DDILG;Lo;0;L;;;;;N;;;;; B76A;HANGUL SYLLABLE DDILM;Lo;0;L;;;;;N;;;;; B76B;HANGUL SYLLABLE DDILB;Lo;0;L;;;;;N;;;;; B76C;HANGUL SYLLABLE DDILS;Lo;0;L;;;;;N;;;;; B76D;HANGUL SYLLABLE DDILT;Lo;0;L;;;;;N;;;;; B76E;HANGUL SYLLABLE DDILP;Lo;0;L;;;;;N;;;;; B76F;HANGUL SYLLABLE DDILH;Lo;0;L;;;;;N;;;;; B770;HANGUL SYLLABLE DDIM;Lo;0;L;;;;;N;;;;; B771;HANGUL SYLLABLE DDIB;Lo;0;L;;;;;N;;;;; B772;HANGUL SYLLABLE DDIBS;Lo;0;L;;;;;N;;;;; B773;HANGUL SYLLABLE DDIS;Lo;0;L;;;;;N;;;;; B774;HANGUL SYLLABLE DDISS;Lo;0;L;;;;;N;;;;; B775;HANGUL SYLLABLE DDING;Lo;0;L;;;;;N;;;;; B776;HANGUL SYLLABLE DDIJ;Lo;0;L;;;;;N;;;;; B777;HANGUL SYLLABLE DDIC;Lo;0;L;;;;;N;;;;; B778;HANGUL SYLLABLE DDIK;Lo;0;L;;;;;N;;;;; B779;HANGUL SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; B77A;HANGUL SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; B77B;HANGUL SYLLABLE DDIH;Lo;0;L;;;;;N;;;;; B77C;HANGUL SYLLABLE RA;Lo;0;L;;;;;N;;;;; B77D;HANGUL SYLLABLE RAG;Lo;0;L;;;;;N;;;;; B77E;HANGUL SYLLABLE RAGG;Lo;0;L;;;;;N;;;;; B77F;HANGUL SYLLABLE RAGS;Lo;0;L;;;;;N;;;;; B780;HANGUL SYLLABLE RAN;Lo;0;L;;;;;N;;;;; B781;HANGUL SYLLABLE RANI;Lo;0;L;;;;;N;;;;; B782;HANGUL SYLLABLE RANH;Lo;0;L;;;;;N;;;;; B783;HANGUL SYLLABLE RAD;Lo;0;L;;;;;N;;;;; B784;HANGUL SYLLABLE RAL;Lo;0;L;;;;;N;;;;; B785;HANGUL SYLLABLE RALG;Lo;0;L;;;;;N;;;;; B786;HANGUL SYLLABLE RALM;Lo;0;L;;;;;N;;;;; B787;HANGUL SYLLABLE RALB;Lo;0;L;;;;;N;;;;; B788;HANGUL SYLLABLE RALS;Lo;0;L;;;;;N;;;;; B789;HANGUL SYLLABLE RALT;Lo;0;L;;;;;N;;;;; B78A;HANGUL SYLLABLE RALP;Lo;0;L;;;;;N;;;;; B78B;HANGUL SYLLABLE RALH;Lo;0;L;;;;;N;;;;; B78C;HANGUL SYLLABLE RAM;Lo;0;L;;;;;N;;;;; B78D;HANGUL SYLLABLE RAB;Lo;0;L;;;;;N;;;;; B78E;HANGUL SYLLABLE RABS;Lo;0;L;;;;;N;;;;; B78F;HANGUL SYLLABLE RAS;Lo;0;L;;;;;N;;;;; B790;HANGUL SYLLABLE RASS;Lo;0;L;;;;;N;;;;; B791;HANGUL SYLLABLE RANG;Lo;0;L;;;;;N;;;;; B792;HANGUL SYLLABLE RAJ;Lo;0;L;;;;;N;;;;; B793;HANGUL SYLLABLE RAC;Lo;0;L;;;;;N;;;;; B794;HANGUL SYLLABLE RAK;Lo;0;L;;;;;N;;;;; B795;HANGUL SYLLABLE RAT;Lo;0;L;;;;;N;;;;; B796;HANGUL SYLLABLE RAP;Lo;0;L;;;;;N;;;;; B797;HANGUL SYLLABLE RAH;Lo;0;L;;;;;N;;;;; B798;HANGUL SYLLABLE RAE;Lo;0;L;;;;;N;;;;; B799;HANGUL SYLLABLE RAEG;Lo;0;L;;;;;N;;;;; B79A;HANGUL SYLLABLE RAEGG;Lo;0;L;;;;;N;;;;; B79B;HANGUL SYLLABLE RAEGS;Lo;0;L;;;;;N;;;;; B79C;HANGUL SYLLABLE RAEN;Lo;0;L;;;;;N;;;;; B79D;HANGUL SYLLABLE RAENI;Lo;0;L;;;;;N;;;;; B79E;HANGUL SYLLABLE RAENH;Lo;0;L;;;;;N;;;;; B79F;HANGUL SYLLABLE RAED;Lo;0;L;;;;;N;;;;; B7A0;HANGUL SYLLABLE RAEL;Lo;0;L;;;;;N;;;;; B7A1;HANGUL SYLLABLE RAELG;Lo;0;L;;;;;N;;;;; B7A2;HANGUL SYLLABLE RAELM;Lo;0;L;;;;;N;;;;; B7A3;HANGUL SYLLABLE RAELB;Lo;0;L;;;;;N;;;;; B7A4;HANGUL SYLLABLE RAELS;Lo;0;L;;;;;N;;;;; B7A5;HANGUL SYLLABLE RAELT;Lo;0;L;;;;;N;;;;; B7A6;HANGUL SYLLABLE RAELP;Lo;0;L;;;;;N;;;;; B7A7;HANGUL SYLLABLE RAELH;Lo;0;L;;;;;N;;;;; B7A8;HANGUL SYLLABLE RAEM;Lo;0;L;;;;;N;;;;; B7A9;HANGUL SYLLABLE RAEB;Lo;0;L;;;;;N;;;;; B7AA;HANGUL SYLLABLE RAEBS;Lo;0;L;;;;;N;;;;; B7AB;HANGUL SYLLABLE RAES;Lo;0;L;;;;;N;;;;; B7AC;HANGUL SYLLABLE RAESS;Lo;0;L;;;;;N;;;;; B7AD;HANGUL SYLLABLE RAENG;Lo;0;L;;;;;N;;;;; B7AE;HANGUL SYLLABLE RAEJ;Lo;0;L;;;;;N;;;;; B7AF;HANGUL SYLLABLE RAEC;Lo;0;L;;;;;N;;;;; B7B0;HANGUL SYLLABLE RAEK;Lo;0;L;;;;;N;;;;; B7B1;HANGUL SYLLABLE RAET;Lo;0;L;;;;;N;;;;; B7B2;HANGUL SYLLABLE RAEP;Lo;0;L;;;;;N;;;;; B7B3;HANGUL SYLLABLE RAEH;Lo;0;L;;;;;N;;;;; B7B4;HANGUL SYLLABLE RYA;Lo;0;L;;;;;N;;;;; B7B5;HANGUL SYLLABLE RYAG;Lo;0;L;;;;;N;;;;; B7B6;HANGUL SYLLABLE RYAGG;Lo;0;L;;;;;N;;;;; B7B7;HANGUL SYLLABLE RYAGS;Lo;0;L;;;;;N;;;;; B7B8;HANGUL SYLLABLE RYAN;Lo;0;L;;;;;N;;;;; B7B9;HANGUL SYLLABLE RYANI;Lo;0;L;;;;;N;;;;; B7BA;HANGUL SYLLABLE RYANH;Lo;0;L;;;;;N;;;;; B7BB;HANGUL SYLLABLE RYAD;Lo;0;L;;;;;N;;;;; B7BC;HANGUL SYLLABLE RYAL;Lo;0;L;;;;;N;;;;; B7BD;HANGUL SYLLABLE RYALG;Lo;0;L;;;;;N;;;;; B7BE;HANGUL SYLLABLE RYALM;Lo;0;L;;;;;N;;;;; B7BF;HANGUL SYLLABLE RYALB;Lo;0;L;;;;;N;;;;; B7C0;HANGUL SYLLABLE RYALS;Lo;0;L;;;;;N;;;;; B7C1;HANGUL SYLLABLE RYALT;Lo;0;L;;;;;N;;;;; B7C2;HANGUL SYLLABLE RYALP;Lo;0;L;;;;;N;;;;; B7C3;HANGUL SYLLABLE RYALH;Lo;0;L;;;;;N;;;;; B7C4;HANGUL SYLLABLE RYAM;Lo;0;L;;;;;N;;;;; B7C5;HANGUL SYLLABLE RYAB;Lo;0;L;;;;;N;;;;; B7C6;HANGUL SYLLABLE RYABS;Lo;0;L;;;;;N;;;;; B7C7;HANGUL SYLLABLE RYAS;Lo;0;L;;;;;N;;;;; B7C8;HANGUL SYLLABLE RYASS;Lo;0;L;;;;;N;;;;; B7C9;HANGUL SYLLABLE RYANG;Lo;0;L;;;;;N;;;;; B7CA;HANGUL SYLLABLE RYAJ;Lo;0;L;;;;;N;;;;; B7CB;HANGUL SYLLABLE RYAC;Lo;0;L;;;;;N;;;;; B7CC;HANGUL SYLLABLE RYAK;Lo;0;L;;;;;N;;;;; B7CD;HANGUL SYLLABLE RYAT;Lo;0;L;;;;;N;;;;; B7CE;HANGUL SYLLABLE RYAP;Lo;0;L;;;;;N;;;;; B7CF;HANGUL SYLLABLE RYAH;Lo;0;L;;;;;N;;;;; B7D0;HANGUL SYLLABLE RYAE;Lo;0;L;;;;;N;;;;; B7D1;HANGUL SYLLABLE RYAEG;Lo;0;L;;;;;N;;;;; B7D2;HANGUL SYLLABLE RYAEGG;Lo;0;L;;;;;N;;;;; B7D3;HANGUL SYLLABLE RYAEGS;Lo;0;L;;;;;N;;;;; B7D4;HANGUL SYLLABLE RYAEN;Lo;0;L;;;;;N;;;;; B7D5;HANGUL SYLLABLE RYAENI;Lo;0;L;;;;;N;;;;; B7D6;HANGUL SYLLABLE RYAENH;Lo;0;L;;;;;N;;;;; B7D7;HANGUL SYLLABLE RYAED;Lo;0;L;;;;;N;;;;; B7D8;HANGUL SYLLABLE RYAEL;Lo;0;L;;;;;N;;;;; B7D9;HANGUL SYLLABLE RYAELG;Lo;0;L;;;;;N;;;;; B7DA;HANGUL SYLLABLE RYAELM;Lo;0;L;;;;;N;;;;; B7DB;HANGUL SYLLABLE RYAELB;Lo;0;L;;;;;N;;;;; B7DC;HANGUL SYLLABLE RYAELS;Lo;0;L;;;;;N;;;;; B7DD;HANGUL SYLLABLE RYAELT;Lo;0;L;;;;;N;;;;; B7DE;HANGUL SYLLABLE RYAELP;Lo;0;L;;;;;N;;;;; B7DF;HANGUL SYLLABLE RYAELH;Lo;0;L;;;;;N;;;;; B7E0;HANGUL SYLLABLE RYAEM;Lo;0;L;;;;;N;;;;; B7E1;HANGUL SYLLABLE RYAEB;Lo;0;L;;;;;N;;;;; B7E2;HANGUL SYLLABLE RYAEBS;Lo;0;L;;;;;N;;;;; B7E3;HANGUL SYLLABLE RYAES;Lo;0;L;;;;;N;;;;; B7E4;HANGUL SYLLABLE RYAESS;Lo;0;L;;;;;N;;;;; B7E5;HANGUL SYLLABLE RYAENG;Lo;0;L;;;;;N;;;;; B7E6;HANGUL SYLLABLE RYAEJ;Lo;0;L;;;;;N;;;;; B7E7;HANGUL SYLLABLE RYAEC;Lo;0;L;;;;;N;;;;; B7E8;HANGUL SYLLABLE RYAEK;Lo;0;L;;;;;N;;;;; B7E9;HANGUL SYLLABLE RYAET;Lo;0;L;;;;;N;;;;; B7EA;HANGUL SYLLABLE RYAEP;Lo;0;L;;;;;N;;;;; B7EB;HANGUL SYLLABLE RYAEH;Lo;0;L;;;;;N;;;;; B7EC;HANGUL SYLLABLE REO;Lo;0;L;;;;;N;;;;; B7ED;HANGUL SYLLABLE REOG;Lo;0;L;;;;;N;;;;; B7EE;HANGUL SYLLABLE REOGG;Lo;0;L;;;;;N;;;;; B7EF;HANGUL SYLLABLE REOGS;Lo;0;L;;;;;N;;;;; B7F0;HANGUL SYLLABLE REON;Lo;0;L;;;;;N;;;;; B7F1;HANGUL SYLLABLE REONI;Lo;0;L;;;;;N;;;;; B7F2;HANGUL SYLLABLE REONH;Lo;0;L;;;;;N;;;;; B7F3;HANGUL SYLLABLE REOD;Lo;0;L;;;;;N;;;;; B7F4;HANGUL SYLLABLE REOL;Lo;0;L;;;;;N;;;;; B7F5;HANGUL SYLLABLE REOLG;Lo;0;L;;;;;N;;;;; B7F6;HANGUL SYLLABLE REOLM;Lo;0;L;;;;;N;;;;; B7F7;HANGUL SYLLABLE REOLB;Lo;0;L;;;;;N;;;;; B7F8;HANGUL SYLLABLE REOLS;Lo;0;L;;;;;N;;;;; B7F9;HANGUL SYLLABLE REOLT;Lo;0;L;;;;;N;;;;; B7FA;HANGUL SYLLABLE REOLP;Lo;0;L;;;;;N;;;;; B7FB;HANGUL SYLLABLE REOLH;Lo;0;L;;;;;N;;;;; B7FC;HANGUL SYLLABLE REOM;Lo;0;L;;;;;N;;;;; B7FD;HANGUL SYLLABLE REOB;Lo;0;L;;;;;N;;;;; B7FE;HANGUL SYLLABLE REOBS;Lo;0;L;;;;;N;;;;; B7FF;HANGUL SYLLABLE REOS;Lo;0;L;;;;;N;;;;; B800;HANGUL SYLLABLE REOSS;Lo;0;L;;;;;N;;;;; B801;HANGUL SYLLABLE REONG;Lo;0;L;;;;;N;;;;; B802;HANGUL SYLLABLE REOJ;Lo;0;L;;;;;N;;;;; B803;HANGUL SYLLABLE REOC;Lo;0;L;;;;;N;;;;; B804;HANGUL SYLLABLE REOK;Lo;0;L;;;;;N;;;;; B805;HANGUL SYLLABLE REOT;Lo;0;L;;;;;N;;;;; B806;HANGUL SYLLABLE REOP;Lo;0;L;;;;;N;;;;; B807;HANGUL SYLLABLE REOH;Lo;0;L;;;;;N;;;;; B808;HANGUL SYLLABLE RE;Lo;0;L;;;;;N;;;;; B809;HANGUL SYLLABLE REG;Lo;0;L;;;;;N;;;;; B80A;HANGUL SYLLABLE REGG;Lo;0;L;;;;;N;;;;; B80B;HANGUL SYLLABLE REGS;Lo;0;L;;;;;N;;;;; B80C;HANGUL SYLLABLE REN;Lo;0;L;;;;;N;;;;; B80D;HANGUL SYLLABLE RENI;Lo;0;L;;;;;N;;;;; B80E;HANGUL SYLLABLE RENH;Lo;0;L;;;;;N;;;;; B80F;HANGUL SYLLABLE RED;Lo;0;L;;;;;N;;;;; B810;HANGUL SYLLABLE REL;Lo;0;L;;;;;N;;;;; B811;HANGUL SYLLABLE RELG;Lo;0;L;;;;;N;;;;; B812;HANGUL SYLLABLE RELM;Lo;0;L;;;;;N;;;;; B813;HANGUL SYLLABLE RELB;Lo;0;L;;;;;N;;;;; B814;HANGUL SYLLABLE RELS;Lo;0;L;;;;;N;;;;; B815;HANGUL SYLLABLE RELT;Lo;0;L;;;;;N;;;;; B816;HANGUL SYLLABLE RELP;Lo;0;L;;;;;N;;;;; B817;HANGUL SYLLABLE RELH;Lo;0;L;;;;;N;;;;; B818;HANGUL SYLLABLE REM;Lo;0;L;;;;;N;;;;; B819;HANGUL SYLLABLE REB;Lo;0;L;;;;;N;;;;; B81A;HANGUL SYLLABLE REBS;Lo;0;L;;;;;N;;;;; B81B;HANGUL SYLLABLE RES;Lo;0;L;;;;;N;;;;; B81C;HANGUL SYLLABLE RESS;Lo;0;L;;;;;N;;;;; B81D;HANGUL SYLLABLE RENG;Lo;0;L;;;;;N;;;;; B81E;HANGUL SYLLABLE REJ;Lo;0;L;;;;;N;;;;; B81F;HANGUL SYLLABLE REC;Lo;0;L;;;;;N;;;;; B820;HANGUL SYLLABLE REK;Lo;0;L;;;;;N;;;;; B821;HANGUL SYLLABLE RET;Lo;0;L;;;;;N;;;;; B822;HANGUL SYLLABLE REP;Lo;0;L;;;;;N;;;;; B823;HANGUL SYLLABLE REH;Lo;0;L;;;;;N;;;;; B824;HANGUL SYLLABLE RYEO;Lo;0;L;;;;;N;;;;; B825;HANGUL SYLLABLE RYEOG;Lo;0;L;;;;;N;;;;; B826;HANGUL SYLLABLE RYEOGG;Lo;0;L;;;;;N;;;;; B827;HANGUL SYLLABLE RYEOGS;Lo;0;L;;;;;N;;;;; B828;HANGUL SYLLABLE RYEON;Lo;0;L;;;;;N;;;;; B829;HANGUL SYLLABLE RYEONI;Lo;0;L;;;;;N;;;;; B82A;HANGUL SYLLABLE RYEONH;Lo;0;L;;;;;N;;;;; B82B;HANGUL SYLLABLE RYEOD;Lo;0;L;;;;;N;;;;; B82C;HANGUL SYLLABLE RYEOL;Lo;0;L;;;;;N;;;;; B82D;HANGUL SYLLABLE RYEOLG;Lo;0;L;;;;;N;;;;; B82E;HANGUL SYLLABLE RYEOLM;Lo;0;L;;;;;N;;;;; B82F;HANGUL SYLLABLE RYEOLB;Lo;0;L;;;;;N;;;;; B830;HANGUL SYLLABLE RYEOLS;Lo;0;L;;;;;N;;;;; B831;HANGUL SYLLABLE RYEOLT;Lo;0;L;;;;;N;;;;; B832;HANGUL SYLLABLE RYEOLP;Lo;0;L;;;;;N;;;;; B833;HANGUL SYLLABLE RYEOLH;Lo;0;L;;;;;N;;;;; B834;HANGUL SYLLABLE RYEOM;Lo;0;L;;;;;N;;;;; B835;HANGUL SYLLABLE RYEOB;Lo;0;L;;;;;N;;;;; B836;HANGUL SYLLABLE RYEOBS;Lo;0;L;;;;;N;;;;; B837;HANGUL SYLLABLE RYEOS;Lo;0;L;;;;;N;;;;; B838;HANGUL SYLLABLE RYEOSS;Lo;0;L;;;;;N;;;;; B839;HANGUL SYLLABLE RYEONG;Lo;0;L;;;;;N;;;;; B83A;HANGUL SYLLABLE RYEOJ;Lo;0;L;;;;;N;;;;; B83B;HANGUL SYLLABLE RYEOC;Lo;0;L;;;;;N;;;;; B83C;HANGUL SYLLABLE RYEOK;Lo;0;L;;;;;N;;;;; B83D;HANGUL SYLLABLE RYEOT;Lo;0;L;;;;;N;;;;; B83E;HANGUL SYLLABLE RYEOP;Lo;0;L;;;;;N;;;;; B83F;HANGUL SYLLABLE RYEOH;Lo;0;L;;;;;N;;;;; B840;HANGUL SYLLABLE RYE;Lo;0;L;;;;;N;;;;; B841;HANGUL SYLLABLE RYEG;Lo;0;L;;;;;N;;;;; B842;HANGUL SYLLABLE RYEGG;Lo;0;L;;;;;N;;;;; B843;HANGUL SYLLABLE RYEGS;Lo;0;L;;;;;N;;;;; B844;HANGUL SYLLABLE RYEN;Lo;0;L;;;;;N;;;;; B845;HANGUL SYLLABLE RYENI;Lo;0;L;;;;;N;;;;; B846;HANGUL SYLLABLE RYENH;Lo;0;L;;;;;N;;;;; B847;HANGUL SYLLABLE RYED;Lo;0;L;;;;;N;;;;; B848;HANGUL SYLLABLE RYEL;Lo;0;L;;;;;N;;;;; B849;HANGUL SYLLABLE RYELG;Lo;0;L;;;;;N;;;;; B84A;HANGUL SYLLABLE RYELM;Lo;0;L;;;;;N;;;;; B84B;HANGUL SYLLABLE RYELB;Lo;0;L;;;;;N;;;;; B84C;HANGUL SYLLABLE RYELS;Lo;0;L;;;;;N;;;;; B84D;HANGUL SYLLABLE RYELT;Lo;0;L;;;;;N;;;;; B84E;HANGUL SYLLABLE RYELP;Lo;0;L;;;;;N;;;;; B84F;HANGUL SYLLABLE RYELH;Lo;0;L;;;;;N;;;;; B850;HANGUL SYLLABLE RYEM;Lo;0;L;;;;;N;;;;; B851;HANGUL SYLLABLE RYEB;Lo;0;L;;;;;N;;;;; B852;HANGUL SYLLABLE RYEBS;Lo;0;L;;;;;N;;;;; B853;HANGUL SYLLABLE RYES;Lo;0;L;;;;;N;;;;; B854;HANGUL SYLLABLE RYESS;Lo;0;L;;;;;N;;;;; B855;HANGUL SYLLABLE RYENG;Lo;0;L;;;;;N;;;;; B856;HANGUL SYLLABLE RYEJ;Lo;0;L;;;;;N;;;;; B857;HANGUL SYLLABLE RYEC;Lo;0;L;;;;;N;;;;; B858;HANGUL SYLLABLE RYEK;Lo;0;L;;;;;N;;;;; B859;HANGUL SYLLABLE RYET;Lo;0;L;;;;;N;;;;; B85A;HANGUL SYLLABLE RYEP;Lo;0;L;;;;;N;;;;; B85B;HANGUL SYLLABLE RYEH;Lo;0;L;;;;;N;;;;; B85C;HANGUL SYLLABLE RO;Lo;0;L;;;;;N;;;;; B85D;HANGUL SYLLABLE ROG;Lo;0;L;;;;;N;;;;; B85E;HANGUL SYLLABLE ROGG;Lo;0;L;;;;;N;;;;; B85F;HANGUL SYLLABLE ROGS;Lo;0;L;;;;;N;;;;; B860;HANGUL SYLLABLE RON;Lo;0;L;;;;;N;;;;; B861;HANGUL SYLLABLE RONI;Lo;0;L;;;;;N;;;;; B862;HANGUL SYLLABLE RONH;Lo;0;L;;;;;N;;;;; B863;HANGUL SYLLABLE ROD;Lo;0;L;;;;;N;;;;; B864;HANGUL SYLLABLE ROL;Lo;0;L;;;;;N;;;;; B865;HANGUL SYLLABLE ROLG;Lo;0;L;;;;;N;;;;; B866;HANGUL SYLLABLE ROLM;Lo;0;L;;;;;N;;;;; B867;HANGUL SYLLABLE ROLB;Lo;0;L;;;;;N;;;;; B868;HANGUL SYLLABLE ROLS;Lo;0;L;;;;;N;;;;; B869;HANGUL SYLLABLE ROLT;Lo;0;L;;;;;N;;;;; B86A;HANGUL SYLLABLE ROLP;Lo;0;L;;;;;N;;;;; B86B;HANGUL SYLLABLE ROLH;Lo;0;L;;;;;N;;;;; B86C;HANGUL SYLLABLE ROM;Lo;0;L;;;;;N;;;;; B86D;HANGUL SYLLABLE ROB;Lo;0;L;;;;;N;;;;; B86E;HANGUL SYLLABLE ROBS;Lo;0;L;;;;;N;;;;; B86F;HANGUL SYLLABLE ROS;Lo;0;L;;;;;N;;;;; B870;HANGUL SYLLABLE ROSS;Lo;0;L;;;;;N;;;;; B871;HANGUL SYLLABLE RONG;Lo;0;L;;;;;N;;;;; B872;HANGUL SYLLABLE ROJ;Lo;0;L;;;;;N;;;;; B873;HANGUL SYLLABLE ROC;Lo;0;L;;;;;N;;;;; B874;HANGUL SYLLABLE ROK;Lo;0;L;;;;;N;;;;; B875;HANGUL SYLLABLE ROT;Lo;0;L;;;;;N;;;;; B876;HANGUL SYLLABLE ROP;Lo;0;L;;;;;N;;;;; B877;HANGUL SYLLABLE ROH;Lo;0;L;;;;;N;;;;; B878;HANGUL SYLLABLE RWA;Lo;0;L;;;;;N;;;;; B879;HANGUL SYLLABLE RWAG;Lo;0;L;;;;;N;;;;; B87A;HANGUL SYLLABLE RWAGG;Lo;0;L;;;;;N;;;;; B87B;HANGUL SYLLABLE RWAGS;Lo;0;L;;;;;N;;;;; B87C;HANGUL SYLLABLE RWAN;Lo;0;L;;;;;N;;;;; B87D;HANGUL SYLLABLE RWANI;Lo;0;L;;;;;N;;;;; B87E;HANGUL SYLLABLE RWANH;Lo;0;L;;;;;N;;;;; B87F;HANGUL SYLLABLE RWAD;Lo;0;L;;;;;N;;;;; B880;HANGUL SYLLABLE RWAL;Lo;0;L;;;;;N;;;;; B881;HANGUL SYLLABLE RWALG;Lo;0;L;;;;;N;;;;; B882;HANGUL SYLLABLE RWALM;Lo;0;L;;;;;N;;;;; B883;HANGUL SYLLABLE RWALB;Lo;0;L;;;;;N;;;;; B884;HANGUL SYLLABLE RWALS;Lo;0;L;;;;;N;;;;; B885;HANGUL SYLLABLE RWALT;Lo;0;L;;;;;N;;;;; B886;HANGUL SYLLABLE RWALP;Lo;0;L;;;;;N;;;;; B887;HANGUL SYLLABLE RWALH;Lo;0;L;;;;;N;;;;; B888;HANGUL SYLLABLE RWAM;Lo;0;L;;;;;N;;;;; B889;HANGUL SYLLABLE RWAB;Lo;0;L;;;;;N;;;;; B88A;HANGUL SYLLABLE RWABS;Lo;0;L;;;;;N;;;;; B88B;HANGUL SYLLABLE RWAS;Lo;0;L;;;;;N;;;;; B88C;HANGUL SYLLABLE RWASS;Lo;0;L;;;;;N;;;;; B88D;HANGUL SYLLABLE RWANG;Lo;0;L;;;;;N;;;;; B88E;HANGUL SYLLABLE RWAJ;Lo;0;L;;;;;N;;;;; B88F;HANGUL SYLLABLE RWAC;Lo;0;L;;;;;N;;;;; B890;HANGUL SYLLABLE RWAK;Lo;0;L;;;;;N;;;;; B891;HANGUL SYLLABLE RWAT;Lo;0;L;;;;;N;;;;; B892;HANGUL SYLLABLE RWAP;Lo;0;L;;;;;N;;;;; B893;HANGUL SYLLABLE RWAH;Lo;0;L;;;;;N;;;;; B894;HANGUL SYLLABLE RWAE;Lo;0;L;;;;;N;;;;; B895;HANGUL SYLLABLE RWAEG;Lo;0;L;;;;;N;;;;; B896;HANGUL SYLLABLE RWAEGG;Lo;0;L;;;;;N;;;;; B897;HANGUL SYLLABLE RWAEGS;Lo;0;L;;;;;N;;;;; B898;HANGUL SYLLABLE RWAEN;Lo;0;L;;;;;N;;;;; B899;HANGUL SYLLABLE RWAENI;Lo;0;L;;;;;N;;;;; B89A;HANGUL SYLLABLE RWAENH;Lo;0;L;;;;;N;;;;; B89B;HANGUL SYLLABLE RWAED;Lo;0;L;;;;;N;;;;; B89C;HANGUL SYLLABLE RWAEL;Lo;0;L;;;;;N;;;;; B89D;HANGUL SYLLABLE RWAELG;Lo;0;L;;;;;N;;;;; B89E;HANGUL SYLLABLE RWAELM;Lo;0;L;;;;;N;;;;; B89F;HANGUL SYLLABLE RWAELB;Lo;0;L;;;;;N;;;;; B8A0;HANGUL SYLLABLE RWAELS;Lo;0;L;;;;;N;;;;; B8A1;HANGUL SYLLABLE RWAELT;Lo;0;L;;;;;N;;;;; B8A2;HANGUL SYLLABLE RWAELP;Lo;0;L;;;;;N;;;;; B8A3;HANGUL SYLLABLE RWAELH;Lo;0;L;;;;;N;;;;; B8A4;HANGUL SYLLABLE RWAEM;Lo;0;L;;;;;N;;;;; B8A5;HANGUL SYLLABLE RWAEB;Lo;0;L;;;;;N;;;;; B8A6;HANGUL SYLLABLE RWAEBS;Lo;0;L;;;;;N;;;;; B8A7;HANGUL SYLLABLE RWAES;Lo;0;L;;;;;N;;;;; B8A8;HANGUL SYLLABLE RWAESS;Lo;0;L;;;;;N;;;;; B8A9;HANGUL SYLLABLE RWAENG;Lo;0;L;;;;;N;;;;; B8AA;HANGUL SYLLABLE RWAEJ;Lo;0;L;;;;;N;;;;; B8AB;HANGUL SYLLABLE RWAEC;Lo;0;L;;;;;N;;;;; B8AC;HANGUL SYLLABLE RWAEK;Lo;0;L;;;;;N;;;;; B8AD;HANGUL SYLLABLE RWAET;Lo;0;L;;;;;N;;;;; B8AE;HANGUL SYLLABLE RWAEP;Lo;0;L;;;;;N;;;;; B8AF;HANGUL SYLLABLE RWAEH;Lo;0;L;;;;;N;;;;; B8B0;HANGUL SYLLABLE ROE;Lo;0;L;;;;;N;;;;; B8B1;HANGUL SYLLABLE ROEG;Lo;0;L;;;;;N;;;;; B8B2;HANGUL SYLLABLE ROEGG;Lo;0;L;;;;;N;;;;; B8B3;HANGUL SYLLABLE ROEGS;Lo;0;L;;;;;N;;;;; B8B4;HANGUL SYLLABLE ROEN;Lo;0;L;;;;;N;;;;; B8B5;HANGUL SYLLABLE ROENI;Lo;0;L;;;;;N;;;;; B8B6;HANGUL SYLLABLE ROENH;Lo;0;L;;;;;N;;;;; B8B7;HANGUL SYLLABLE ROED;Lo;0;L;;;;;N;;;;; B8B8;HANGUL SYLLABLE ROEL;Lo;0;L;;;;;N;;;;; B8B9;HANGUL SYLLABLE ROELG;Lo;0;L;;;;;N;;;;; B8BA;HANGUL SYLLABLE ROELM;Lo;0;L;;;;;N;;;;; B8BB;HANGUL SYLLABLE ROELB;Lo;0;L;;;;;N;;;;; B8BC;HANGUL SYLLABLE ROELS;Lo;0;L;;;;;N;;;;; B8BD;HANGUL SYLLABLE ROELT;Lo;0;L;;;;;N;;;;; B8BE;HANGUL SYLLABLE ROELP;Lo;0;L;;;;;N;;;;; B8BF;HANGUL SYLLABLE ROELH;Lo;0;L;;;;;N;;;;; B8C0;HANGUL SYLLABLE ROEM;Lo;0;L;;;;;N;;;;; B8C1;HANGUL SYLLABLE ROEB;Lo;0;L;;;;;N;;;;; B8C2;HANGUL SYLLABLE ROEBS;Lo;0;L;;;;;N;;;;; B8C3;HANGUL SYLLABLE ROES;Lo;0;L;;;;;N;;;;; B8C4;HANGUL SYLLABLE ROESS;Lo;0;L;;;;;N;;;;; B8C5;HANGUL SYLLABLE ROENG;Lo;0;L;;;;;N;;;;; B8C6;HANGUL SYLLABLE ROEJ;Lo;0;L;;;;;N;;;;; B8C7;HANGUL SYLLABLE ROEC;Lo;0;L;;;;;N;;;;; B8C8;HANGUL SYLLABLE ROEK;Lo;0;L;;;;;N;;;;; B8C9;HANGUL SYLLABLE ROET;Lo;0;L;;;;;N;;;;; B8CA;HANGUL SYLLABLE ROEP;Lo;0;L;;;;;N;;;;; B8CB;HANGUL SYLLABLE ROEH;Lo;0;L;;;;;N;;;;; B8CC;HANGUL SYLLABLE RYO;Lo;0;L;;;;;N;;;;; B8CD;HANGUL SYLLABLE RYOG;Lo;0;L;;;;;N;;;;; B8CE;HANGUL SYLLABLE RYOGG;Lo;0;L;;;;;N;;;;; B8CF;HANGUL SYLLABLE RYOGS;Lo;0;L;;;;;N;;;;; B8D0;HANGUL SYLLABLE RYON;Lo;0;L;;;;;N;;;;; B8D1;HANGUL SYLLABLE RYONI;Lo;0;L;;;;;N;;;;; B8D2;HANGUL SYLLABLE RYONH;Lo;0;L;;;;;N;;;;; B8D3;HANGUL SYLLABLE RYOD;Lo;0;L;;;;;N;;;;; B8D4;HANGUL SYLLABLE RYOL;Lo;0;L;;;;;N;;;;; B8D5;HANGUL SYLLABLE RYOLG;Lo;0;L;;;;;N;;;;; B8D6;HANGUL SYLLABLE RYOLM;Lo;0;L;;;;;N;;;;; B8D7;HANGUL SYLLABLE RYOLB;Lo;0;L;;;;;N;;;;; B8D8;HANGUL SYLLABLE RYOLS;Lo;0;L;;;;;N;;;;; B8D9;HANGUL SYLLABLE RYOLT;Lo;0;L;;;;;N;;;;; B8DA;HANGUL SYLLABLE RYOLP;Lo;0;L;;;;;N;;;;; B8DB;HANGUL SYLLABLE RYOLH;Lo;0;L;;;;;N;;;;; B8DC;HANGUL SYLLABLE RYOM;Lo;0;L;;;;;N;;;;; B8DD;HANGUL SYLLABLE RYOB;Lo;0;L;;;;;N;;;;; B8DE;HANGUL SYLLABLE RYOBS;Lo;0;L;;;;;N;;;;; B8DF;HANGUL SYLLABLE RYOS;Lo;0;L;;;;;N;;;;; B8E0;HANGUL SYLLABLE RYOSS;Lo;0;L;;;;;N;;;;; B8E1;HANGUL SYLLABLE RYONG;Lo;0;L;;;;;N;;;;; B8E2;HANGUL SYLLABLE RYOJ;Lo;0;L;;;;;N;;;;; B8E3;HANGUL SYLLABLE RYOC;Lo;0;L;;;;;N;;;;; B8E4;HANGUL SYLLABLE RYOK;Lo;0;L;;;;;N;;;;; B8E5;HANGUL SYLLABLE RYOT;Lo;0;L;;;;;N;;;;; B8E6;HANGUL SYLLABLE RYOP;Lo;0;L;;;;;N;;;;; B8E7;HANGUL SYLLABLE RYOH;Lo;0;L;;;;;N;;;;; B8E8;HANGUL SYLLABLE RU;Lo;0;L;;;;;N;;;;; B8E9;HANGUL SYLLABLE RUG;Lo;0;L;;;;;N;;;;; B8EA;HANGUL SYLLABLE RUGG;Lo;0;L;;;;;N;;;;; B8EB;HANGUL SYLLABLE RUGS;Lo;0;L;;;;;N;;;;; B8EC;HANGUL SYLLABLE RUN;Lo;0;L;;;;;N;;;;; B8ED;HANGUL SYLLABLE RUNI;Lo;0;L;;;;;N;;;;; B8EE;HANGUL SYLLABLE RUNH;Lo;0;L;;;;;N;;;;; B8EF;HANGUL SYLLABLE RUD;Lo;0;L;;;;;N;;;;; B8F0;HANGUL SYLLABLE RUL;Lo;0;L;;;;;N;;;;; B8F1;HANGUL SYLLABLE RULG;Lo;0;L;;;;;N;;;;; B8F2;HANGUL SYLLABLE RULM;Lo;0;L;;;;;N;;;;; B8F3;HANGUL SYLLABLE RULB;Lo;0;L;;;;;N;;;;; B8F4;HANGUL SYLLABLE RULS;Lo;0;L;;;;;N;;;;; B8F5;HANGUL SYLLABLE RULT;Lo;0;L;;;;;N;;;;; B8F6;HANGUL SYLLABLE RULP;Lo;0;L;;;;;N;;;;; B8F7;HANGUL SYLLABLE RULH;Lo;0;L;;;;;N;;;;; B8F8;HANGUL SYLLABLE RUM;Lo;0;L;;;;;N;;;;; B8F9;HANGUL SYLLABLE RUB;Lo;0;L;;;;;N;;;;; B8FA;HANGUL SYLLABLE RUBS;Lo;0;L;;;;;N;;;;; B8FB;HANGUL SYLLABLE RUS;Lo;0;L;;;;;N;;;;; B8FC;HANGUL SYLLABLE RUSS;Lo;0;L;;;;;N;;;;; B8FD;HANGUL SYLLABLE RUNG;Lo;0;L;;;;;N;;;;; B8FE;HANGUL SYLLABLE RUJ;Lo;0;L;;;;;N;;;;; B8FF;HANGUL SYLLABLE RUC;Lo;0;L;;;;;N;;;;; B900;HANGUL SYLLABLE RUK;Lo;0;L;;;;;N;;;;; B901;HANGUL SYLLABLE RUT;Lo;0;L;;;;;N;;;;; B902;HANGUL SYLLABLE RUP;Lo;0;L;;;;;N;;;;; B903;HANGUL SYLLABLE RUH;Lo;0;L;;;;;N;;;;; B904;HANGUL SYLLABLE RWEO;Lo;0;L;;;;;N;;;;; B905;HANGUL SYLLABLE RWEOG;Lo;0;L;;;;;N;;;;; B906;HANGUL SYLLABLE RWEOGG;Lo;0;L;;;;;N;;;;; B907;HANGUL SYLLABLE RWEOGS;Lo;0;L;;;;;N;;;;; B908;HANGUL SYLLABLE RWEON;Lo;0;L;;;;;N;;;;; B909;HANGUL SYLLABLE RWEONI;Lo;0;L;;;;;N;;;;; B90A;HANGUL SYLLABLE RWEONH;Lo;0;L;;;;;N;;;;; B90B;HANGUL SYLLABLE RWEOD;Lo;0;L;;;;;N;;;;; B90C;HANGUL SYLLABLE RWEOL;Lo;0;L;;;;;N;;;;; B90D;HANGUL SYLLABLE RWEOLG;Lo;0;L;;;;;N;;;;; B90E;HANGUL SYLLABLE RWEOLM;Lo;0;L;;;;;N;;;;; B90F;HANGUL SYLLABLE RWEOLB;Lo;0;L;;;;;N;;;;; B910;HANGUL SYLLABLE RWEOLS;Lo;0;L;;;;;N;;;;; B911;HANGUL SYLLABLE RWEOLT;Lo;0;L;;;;;N;;;;; B912;HANGUL SYLLABLE RWEOLP;Lo;0;L;;;;;N;;;;; B913;HANGUL SYLLABLE RWEOLH;Lo;0;L;;;;;N;;;;; B914;HANGUL SYLLABLE RWEOM;Lo;0;L;;;;;N;;;;; B915;HANGUL SYLLABLE RWEOB;Lo;0;L;;;;;N;;;;; B916;HANGUL SYLLABLE RWEOBS;Lo;0;L;;;;;N;;;;; B917;HANGUL SYLLABLE RWEOS;Lo;0;L;;;;;N;;;;; B918;HANGUL SYLLABLE RWEOSS;Lo;0;L;;;;;N;;;;; B919;HANGUL SYLLABLE RWEONG;Lo;0;L;;;;;N;;;;; B91A;HANGUL SYLLABLE RWEOJ;Lo;0;L;;;;;N;;;;; B91B;HANGUL SYLLABLE RWEOC;Lo;0;L;;;;;N;;;;; B91C;HANGUL SYLLABLE RWEOK;Lo;0;L;;;;;N;;;;; B91D;HANGUL SYLLABLE RWEOT;Lo;0;L;;;;;N;;;;; B91E;HANGUL SYLLABLE RWEOP;Lo;0;L;;;;;N;;;;; B91F;HANGUL SYLLABLE RWEOH;Lo;0;L;;;;;N;;;;; B920;HANGUL SYLLABLE RWE;Lo;0;L;;;;;N;;;;; B921;HANGUL SYLLABLE RWEG;Lo;0;L;;;;;N;;;;; B922;HANGUL SYLLABLE RWEGG;Lo;0;L;;;;;N;;;;; B923;HANGUL SYLLABLE RWEGS;Lo;0;L;;;;;N;;;;; B924;HANGUL SYLLABLE RWEN;Lo;0;L;;;;;N;;;;; B925;HANGUL SYLLABLE RWENI;Lo;0;L;;;;;N;;;;; B926;HANGUL SYLLABLE RWENH;Lo;0;L;;;;;N;;;;; B927;HANGUL SYLLABLE RWED;Lo;0;L;;;;;N;;;;; B928;HANGUL SYLLABLE RWEL;Lo;0;L;;;;;N;;;;; B929;HANGUL SYLLABLE RWELG;Lo;0;L;;;;;N;;;;; B92A;HANGUL SYLLABLE RWELM;Lo;0;L;;;;;N;;;;; B92B;HANGUL SYLLABLE RWELB;Lo;0;L;;;;;N;;;;; B92C;HANGUL SYLLABLE RWELS;Lo;0;L;;;;;N;;;;; B92D;HANGUL SYLLABLE RWELT;Lo;0;L;;;;;N;;;;; B92E;HANGUL SYLLABLE RWELP;Lo;0;L;;;;;N;;;;; B92F;HANGUL SYLLABLE RWELH;Lo;0;L;;;;;N;;;;; B930;HANGUL SYLLABLE RWEM;Lo;0;L;;;;;N;;;;; B931;HANGUL SYLLABLE RWEB;Lo;0;L;;;;;N;;;;; B932;HANGUL SYLLABLE RWEBS;Lo;0;L;;;;;N;;;;; B933;HANGUL SYLLABLE RWES;Lo;0;L;;;;;N;;;;; B934;HANGUL SYLLABLE RWESS;Lo;0;L;;;;;N;;;;; B935;HANGUL SYLLABLE RWENG;Lo;0;L;;;;;N;;;;; B936;HANGUL SYLLABLE RWEJ;Lo;0;L;;;;;N;;;;; B937;HANGUL SYLLABLE RWEC;Lo;0;L;;;;;N;;;;; B938;HANGUL SYLLABLE RWEK;Lo;0;L;;;;;N;;;;; B939;HANGUL SYLLABLE RWET;Lo;0;L;;;;;N;;;;; B93A;HANGUL SYLLABLE RWEP;Lo;0;L;;;;;N;;;;; B93B;HANGUL SYLLABLE RWEH;Lo;0;L;;;;;N;;;;; B93C;HANGUL SYLLABLE RWI;Lo;0;L;;;;;N;;;;; B93D;HANGUL SYLLABLE RWIG;Lo;0;L;;;;;N;;;;; B93E;HANGUL SYLLABLE RWIGG;Lo;0;L;;;;;N;;;;; B93F;HANGUL SYLLABLE RWIGS;Lo;0;L;;;;;N;;;;; B940;HANGUL SYLLABLE RWIN;Lo;0;L;;;;;N;;;;; B941;HANGUL SYLLABLE RWINI;Lo;0;L;;;;;N;;;;; B942;HANGUL SYLLABLE RWINH;Lo;0;L;;;;;N;;;;; B943;HANGUL SYLLABLE RWID;Lo;0;L;;;;;N;;;;; B944;HANGUL SYLLABLE RWIL;Lo;0;L;;;;;N;;;;; B945;HANGUL SYLLABLE RWILG;Lo;0;L;;;;;N;;;;; B946;HANGUL SYLLABLE RWILM;Lo;0;L;;;;;N;;;;; B947;HANGUL SYLLABLE RWILB;Lo;0;L;;;;;N;;;;; B948;HANGUL SYLLABLE RWILS;Lo;0;L;;;;;N;;;;; B949;HANGUL SYLLABLE RWILT;Lo;0;L;;;;;N;;;;; B94A;HANGUL SYLLABLE RWILP;Lo;0;L;;;;;N;;;;; B94B;HANGUL SYLLABLE RWILH;Lo;0;L;;;;;N;;;;; B94C;HANGUL SYLLABLE RWIM;Lo;0;L;;;;;N;;;;; B94D;HANGUL SYLLABLE RWIB;Lo;0;L;;;;;N;;;;; B94E;HANGUL SYLLABLE RWIBS;Lo;0;L;;;;;N;;;;; B94F;HANGUL SYLLABLE RWIS;Lo;0;L;;;;;N;;;;; B950;HANGUL SYLLABLE RWISS;Lo;0;L;;;;;N;;;;; B951;HANGUL SYLLABLE RWING;Lo;0;L;;;;;N;;;;; B952;HANGUL SYLLABLE RWIJ;Lo;0;L;;;;;N;;;;; B953;HANGUL SYLLABLE RWIC;Lo;0;L;;;;;N;;;;; B954;HANGUL SYLLABLE RWIK;Lo;0;L;;;;;N;;;;; B955;HANGUL SYLLABLE RWIT;Lo;0;L;;;;;N;;;;; B956;HANGUL SYLLABLE RWIP;Lo;0;L;;;;;N;;;;; B957;HANGUL SYLLABLE RWIH;Lo;0;L;;;;;N;;;;; B958;HANGUL SYLLABLE RYU;Lo;0;L;;;;;N;;;;; B959;HANGUL SYLLABLE RYUG;Lo;0;L;;;;;N;;;;; B95A;HANGUL SYLLABLE RYUGG;Lo;0;L;;;;;N;;;;; B95B;HANGUL SYLLABLE RYUGS;Lo;0;L;;;;;N;;;;; B95C;HANGUL SYLLABLE RYUN;Lo;0;L;;;;;N;;;;; B95D;HANGUL SYLLABLE RYUNI;Lo;0;L;;;;;N;;;;; B95E;HANGUL SYLLABLE RYUNH;Lo;0;L;;;;;N;;;;; B95F;HANGUL SYLLABLE RYUD;Lo;0;L;;;;;N;;;;; B960;HANGUL SYLLABLE RYUL;Lo;0;L;;;;;N;;;;; B961;HANGUL SYLLABLE RYULG;Lo;0;L;;;;;N;;;;; B962;HANGUL SYLLABLE RYULM;Lo;0;L;;;;;N;;;;; B963;HANGUL SYLLABLE RYULB;Lo;0;L;;;;;N;;;;; B964;HANGUL SYLLABLE RYULS;Lo;0;L;;;;;N;;;;; B965;HANGUL SYLLABLE RYULT;Lo;0;L;;;;;N;;;;; B966;HANGUL SYLLABLE RYULP;Lo;0;L;;;;;N;;;;; B967;HANGUL SYLLABLE RYULH;Lo;0;L;;;;;N;;;;; B968;HANGUL SYLLABLE RYUM;Lo;0;L;;;;;N;;;;; B969;HANGUL SYLLABLE RYUB;Lo;0;L;;;;;N;;;;; B96A;HANGUL SYLLABLE RYUBS;Lo;0;L;;;;;N;;;;; B96B;HANGUL SYLLABLE RYUS;Lo;0;L;;;;;N;;;;; B96C;HANGUL SYLLABLE RYUSS;Lo;0;L;;;;;N;;;;; B96D;HANGUL SYLLABLE RYUNG;Lo;0;L;;;;;N;;;;; B96E;HANGUL SYLLABLE RYUJ;Lo;0;L;;;;;N;;;;; B96F;HANGUL SYLLABLE RYUC;Lo;0;L;;;;;N;;;;; B970;HANGUL SYLLABLE RYUK;Lo;0;L;;;;;N;;;;; B971;HANGUL SYLLABLE RYUT;Lo;0;L;;;;;N;;;;; B972;HANGUL SYLLABLE RYUP;Lo;0;L;;;;;N;;;;; B973;HANGUL SYLLABLE RYUH;Lo;0;L;;;;;N;;;;; B974;HANGUL SYLLABLE REU;Lo;0;L;;;;;N;;;;; B975;HANGUL SYLLABLE REUG;Lo;0;L;;;;;N;;;;; B976;HANGUL SYLLABLE REUGG;Lo;0;L;;;;;N;;;;; B977;HANGUL SYLLABLE REUGS;Lo;0;L;;;;;N;;;;; B978;HANGUL SYLLABLE REUN;Lo;0;L;;;;;N;;;;; B979;HANGUL SYLLABLE REUNI;Lo;0;L;;;;;N;;;;; B97A;HANGUL SYLLABLE REUNH;Lo;0;L;;;;;N;;;;; B97B;HANGUL SYLLABLE REUD;Lo;0;L;;;;;N;;;;; B97C;HANGUL SYLLABLE REUL;Lo;0;L;;;;;N;;;;; B97D;HANGUL SYLLABLE REULG;Lo;0;L;;;;;N;;;;; B97E;HANGUL SYLLABLE REULM;Lo;0;L;;;;;N;;;;; B97F;HANGUL SYLLABLE REULB;Lo;0;L;;;;;N;;;;; B980;HANGUL SYLLABLE REULS;Lo;0;L;;;;;N;;;;; B981;HANGUL SYLLABLE REULT;Lo;0;L;;;;;N;;;;; B982;HANGUL SYLLABLE REULP;Lo;0;L;;;;;N;;;;; B983;HANGUL SYLLABLE REULH;Lo;0;L;;;;;N;;;;; B984;HANGUL SYLLABLE REUM;Lo;0;L;;;;;N;;;;; B985;HANGUL SYLLABLE REUB;Lo;0;L;;;;;N;;;;; B986;HANGUL SYLLABLE REUBS;Lo;0;L;;;;;N;;;;; B987;HANGUL SYLLABLE REUS;Lo;0;L;;;;;N;;;;; B988;HANGUL SYLLABLE REUSS;Lo;0;L;;;;;N;;;;; B989;HANGUL SYLLABLE REUNG;Lo;0;L;;;;;N;;;;; B98A;HANGUL SYLLABLE REUJ;Lo;0;L;;;;;N;;;;; B98B;HANGUL SYLLABLE REUC;Lo;0;L;;;;;N;;;;; B98C;HANGUL SYLLABLE REUK;Lo;0;L;;;;;N;;;;; B98D;HANGUL SYLLABLE REUT;Lo;0;L;;;;;N;;;;; B98E;HANGUL SYLLABLE REUP;Lo;0;L;;;;;N;;;;; B98F;HANGUL SYLLABLE REUH;Lo;0;L;;;;;N;;;;; B990;HANGUL SYLLABLE RYI;Lo;0;L;;;;;N;;;;; B991;HANGUL SYLLABLE RYIG;Lo;0;L;;;;;N;;;;; B992;HANGUL SYLLABLE RYIGG;Lo;0;L;;;;;N;;;;; B993;HANGUL SYLLABLE RYIGS;Lo;0;L;;;;;N;;;;; B994;HANGUL SYLLABLE RYIN;Lo;0;L;;;;;N;;;;; B995;HANGUL SYLLABLE RYINI;Lo;0;L;;;;;N;;;;; B996;HANGUL SYLLABLE RYINH;Lo;0;L;;;;;N;;;;; B997;HANGUL SYLLABLE RYID;Lo;0;L;;;;;N;;;;; B998;HANGUL SYLLABLE RYIL;Lo;0;L;;;;;N;;;;; B999;HANGUL SYLLABLE RYILG;Lo;0;L;;;;;N;;;;; B99A;HANGUL SYLLABLE RYILM;Lo;0;L;;;;;N;;;;; B99B;HANGUL SYLLABLE RYILB;Lo;0;L;;;;;N;;;;; B99C;HANGUL SYLLABLE RYILS;Lo;0;L;;;;;N;;;;; B99D;HANGUL SYLLABLE RYILT;Lo;0;L;;;;;N;;;;; B99E;HANGUL SYLLABLE RYILP;Lo;0;L;;;;;N;;;;; B99F;HANGUL SYLLABLE RYILH;Lo;0;L;;;;;N;;;;; B9A0;HANGUL SYLLABLE RYIM;Lo;0;L;;;;;N;;;;; B9A1;HANGUL SYLLABLE RYIB;Lo;0;L;;;;;N;;;;; B9A2;HANGUL SYLLABLE RYIBS;Lo;0;L;;;;;N;;;;; B9A3;HANGUL SYLLABLE RYIS;Lo;0;L;;;;;N;;;;; B9A4;HANGUL SYLLABLE RYISS;Lo;0;L;;;;;N;;;;; B9A5;HANGUL SYLLABLE RYING;Lo;0;L;;;;;N;;;;; B9A6;HANGUL SYLLABLE RYIJ;Lo;0;L;;;;;N;;;;; B9A7;HANGUL SYLLABLE RYIC;Lo;0;L;;;;;N;;;;; B9A8;HANGUL SYLLABLE RYIK;Lo;0;L;;;;;N;;;;; B9A9;HANGUL SYLLABLE RYIT;Lo;0;L;;;;;N;;;;; B9AA;HANGUL SYLLABLE RYIP;Lo;0;L;;;;;N;;;;; B9AB;HANGUL SYLLABLE RYIH;Lo;0;L;;;;;N;;;;; B9AC;HANGUL SYLLABLE RI;Lo;0;L;;;;;N;;;;; B9AD;HANGUL SYLLABLE RIG;Lo;0;L;;;;;N;;;;; B9AE;HANGUL SYLLABLE RIGG;Lo;0;L;;;;;N;;;;; B9AF;HANGUL SYLLABLE RIGS;Lo;0;L;;;;;N;;;;; B9B0;HANGUL SYLLABLE RIN;Lo;0;L;;;;;N;;;;; B9B1;HANGUL SYLLABLE RINI;Lo;0;L;;;;;N;;;;; B9B2;HANGUL SYLLABLE RINH;Lo;0;L;;;;;N;;;;; B9B3;HANGUL SYLLABLE RID;Lo;0;L;;;;;N;;;;; B9B4;HANGUL SYLLABLE RIL;Lo;0;L;;;;;N;;;;; B9B5;HANGUL SYLLABLE RILG;Lo;0;L;;;;;N;;;;; B9B6;HANGUL SYLLABLE RILM;Lo;0;L;;;;;N;;;;; B9B7;HANGUL SYLLABLE RILB;Lo;0;L;;;;;N;;;;; B9B8;HANGUL SYLLABLE RILS;Lo;0;L;;;;;N;;;;; B9B9;HANGUL SYLLABLE RILT;Lo;0;L;;;;;N;;;;; B9BA;HANGUL SYLLABLE RILP;Lo;0;L;;;;;N;;;;; B9BB;HANGUL SYLLABLE RILH;Lo;0;L;;;;;N;;;;; B9BC;HANGUL SYLLABLE RIM;Lo;0;L;;;;;N;;;;; B9BD;HANGUL SYLLABLE RIB;Lo;0;L;;;;;N;;;;; B9BE;HANGUL SYLLABLE RIBS;Lo;0;L;;;;;N;;;;; B9BF;HANGUL SYLLABLE RIS;Lo;0;L;;;;;N;;;;; B9C0;HANGUL SYLLABLE RISS;Lo;0;L;;;;;N;;;;; B9C1;HANGUL SYLLABLE RING;Lo;0;L;;;;;N;;;;; B9C2;HANGUL SYLLABLE RIJ;Lo;0;L;;;;;N;;;;; B9C3;HANGUL SYLLABLE RIC;Lo;0;L;;;;;N;;;;; B9C4;HANGUL SYLLABLE RIK;Lo;0;L;;;;;N;;;;; B9C5;HANGUL SYLLABLE RIT;Lo;0;L;;;;;N;;;;; B9C6;HANGUL SYLLABLE RIP;Lo;0;L;;;;;N;;;;; B9C7;HANGUL SYLLABLE RIH;Lo;0;L;;;;;N;;;;; B9C8;HANGUL SYLLABLE MA;Lo;0;L;;;;;N;;;;; B9C9;HANGUL SYLLABLE MAG;Lo;0;L;;;;;N;;;;; B9CA;HANGUL SYLLABLE MAGG;Lo;0;L;;;;;N;;;;; B9CB;HANGUL SYLLABLE MAGS;Lo;0;L;;;;;N;;;;; B9CC;HANGUL SYLLABLE MAN;Lo;0;L;;;;;N;;;;; B9CD;HANGUL SYLLABLE MANI;Lo;0;L;;;;;N;;;;; B9CE;HANGUL SYLLABLE MANH;Lo;0;L;;;;;N;;;;; B9CF;HANGUL SYLLABLE MAD;Lo;0;L;;;;;N;;;;; B9D0;HANGUL SYLLABLE MAL;Lo;0;L;;;;;N;;;;; B9D1;HANGUL SYLLABLE MALG;Lo;0;L;;;;;N;;;;; B9D2;HANGUL SYLLABLE MALM;Lo;0;L;;;;;N;;;;; B9D3;HANGUL SYLLABLE MALB;Lo;0;L;;;;;N;;;;; B9D4;HANGUL SYLLABLE MALS;Lo;0;L;;;;;N;;;;; B9D5;HANGUL SYLLABLE MALT;Lo;0;L;;;;;N;;;;; B9D6;HANGUL SYLLABLE MALP;Lo;0;L;;;;;N;;;;; B9D7;HANGUL SYLLABLE MALH;Lo;0;L;;;;;N;;;;; B9D8;HANGUL SYLLABLE MAM;Lo;0;L;;;;;N;;;;; B9D9;HANGUL SYLLABLE MAB;Lo;0;L;;;;;N;;;;; B9DA;HANGUL SYLLABLE MABS;Lo;0;L;;;;;N;;;;; B9DB;HANGUL SYLLABLE MAS;Lo;0;L;;;;;N;;;;; B9DC;HANGUL SYLLABLE MASS;Lo;0;L;;;;;N;;;;; B9DD;HANGUL SYLLABLE MANG;Lo;0;L;;;;;N;;;;; B9DE;HANGUL SYLLABLE MAJ;Lo;0;L;;;;;N;;;;; B9DF;HANGUL SYLLABLE MAC;Lo;0;L;;;;;N;;;;; B9E0;HANGUL SYLLABLE MAK;Lo;0;L;;;;;N;;;;; B9E1;HANGUL SYLLABLE MAT;Lo;0;L;;;;;N;;;;; B9E2;HANGUL SYLLABLE MAP;Lo;0;L;;;;;N;;;;; B9E3;HANGUL SYLLABLE MAH;Lo;0;L;;;;;N;;;;; B9E4;HANGUL SYLLABLE MAE;Lo;0;L;;;;;N;;;;; B9E5;HANGUL SYLLABLE MAEG;Lo;0;L;;;;;N;;;;; B9E6;HANGUL SYLLABLE MAEGG;Lo;0;L;;;;;N;;;;; B9E7;HANGUL SYLLABLE MAEGS;Lo;0;L;;;;;N;;;;; B9E8;HANGUL SYLLABLE MAEN;Lo;0;L;;;;;N;;;;; B9E9;HANGUL SYLLABLE MAENI;Lo;0;L;;;;;N;;;;; B9EA;HANGUL SYLLABLE MAENH;Lo;0;L;;;;;N;;;;; B9EB;HANGUL SYLLABLE MAED;Lo;0;L;;;;;N;;;;; B9EC;HANGUL SYLLABLE MAEL;Lo;0;L;;;;;N;;;;; B9ED;HANGUL SYLLABLE MAELG;Lo;0;L;;;;;N;;;;; B9EE;HANGUL SYLLABLE MAELM;Lo;0;L;;;;;N;;;;; B9EF;HANGUL SYLLABLE MAELB;Lo;0;L;;;;;N;;;;; B9F0;HANGUL SYLLABLE MAELS;Lo;0;L;;;;;N;;;;; B9F1;HANGUL SYLLABLE MAELT;Lo;0;L;;;;;N;;;;; B9F2;HANGUL SYLLABLE MAELP;Lo;0;L;;;;;N;;;;; B9F3;HANGUL SYLLABLE MAELH;Lo;0;L;;;;;N;;;;; B9F4;HANGUL SYLLABLE MAEM;Lo;0;L;;;;;N;;;;; B9F5;HANGUL SYLLABLE MAEB;Lo;0;L;;;;;N;;;;; B9F6;HANGUL SYLLABLE MAEBS;Lo;0;L;;;;;N;;;;; B9F7;HANGUL SYLLABLE MAES;Lo;0;L;;;;;N;;;;; B9F8;HANGUL SYLLABLE MAESS;Lo;0;L;;;;;N;;;;; B9F9;HANGUL SYLLABLE MAENG;Lo;0;L;;;;;N;;;;; B9FA;HANGUL SYLLABLE MAEJ;Lo;0;L;;;;;N;;;;; B9FB;HANGUL SYLLABLE MAEC;Lo;0;L;;;;;N;;;;; B9FC;HANGUL SYLLABLE MAEK;Lo;0;L;;;;;N;;;;; B9FD;HANGUL SYLLABLE MAET;Lo;0;L;;;;;N;;;;; B9FE;HANGUL SYLLABLE MAEP;Lo;0;L;;;;;N;;;;; B9FF;HANGUL SYLLABLE MAEH;Lo;0;L;;;;;N;;;;; BA00;HANGUL SYLLABLE MYA;Lo;0;L;;;;;N;;;;; BA01;HANGUL SYLLABLE MYAG;Lo;0;L;;;;;N;;;;; BA02;HANGUL SYLLABLE MYAGG;Lo;0;L;;;;;N;;;;; BA03;HANGUL SYLLABLE MYAGS;Lo;0;L;;;;;N;;;;; BA04;HANGUL SYLLABLE MYAN;Lo;0;L;;;;;N;;;;; BA05;HANGUL SYLLABLE MYANI;Lo;0;L;;;;;N;;;;; BA06;HANGUL SYLLABLE MYANH;Lo;0;L;;;;;N;;;;; BA07;HANGUL SYLLABLE MYAD;Lo;0;L;;;;;N;;;;; BA08;HANGUL SYLLABLE MYAL;Lo;0;L;;;;;N;;;;; BA09;HANGUL SYLLABLE MYALG;Lo;0;L;;;;;N;;;;; BA0A;HANGUL SYLLABLE MYALM;Lo;0;L;;;;;N;;;;; BA0B;HANGUL SYLLABLE MYALB;Lo;0;L;;;;;N;;;;; BA0C;HANGUL SYLLABLE MYALS;Lo;0;L;;;;;N;;;;; BA0D;HANGUL SYLLABLE MYALT;Lo;0;L;;;;;N;;;;; BA0E;HANGUL SYLLABLE MYALP;Lo;0;L;;;;;N;;;;; BA0F;HANGUL SYLLABLE MYALH;Lo;0;L;;;;;N;;;;; BA10;HANGUL SYLLABLE MYAM;Lo;0;L;;;;;N;;;;; BA11;HANGUL SYLLABLE MYAB;Lo;0;L;;;;;N;;;;; BA12;HANGUL SYLLABLE MYABS;Lo;0;L;;;;;N;;;;; BA13;HANGUL SYLLABLE MYAS;Lo;0;L;;;;;N;;;;; BA14;HANGUL SYLLABLE MYASS;Lo;0;L;;;;;N;;;;; BA15;HANGUL SYLLABLE MYANG;Lo;0;L;;;;;N;;;;; BA16;HANGUL SYLLABLE MYAJ;Lo;0;L;;;;;N;;;;; BA17;HANGUL SYLLABLE MYAC;Lo;0;L;;;;;N;;;;; BA18;HANGUL SYLLABLE MYAK;Lo;0;L;;;;;N;;;;; BA19;HANGUL SYLLABLE MYAT;Lo;0;L;;;;;N;;;;; BA1A;HANGUL SYLLABLE MYAP;Lo;0;L;;;;;N;;;;; BA1B;HANGUL SYLLABLE MYAH;Lo;0;L;;;;;N;;;;; BA1C;HANGUL SYLLABLE MYAE;Lo;0;L;;;;;N;;;;; BA1D;HANGUL SYLLABLE MYAEG;Lo;0;L;;;;;N;;;;; BA1E;HANGUL SYLLABLE MYAEGG;Lo;0;L;;;;;N;;;;; BA1F;HANGUL SYLLABLE MYAEGS;Lo;0;L;;;;;N;;;;; BA20;HANGUL SYLLABLE MYAEN;Lo;0;L;;;;;N;;;;; BA21;HANGUL SYLLABLE MYAENI;Lo;0;L;;;;;N;;;;; BA22;HANGUL SYLLABLE MYAENH;Lo;0;L;;;;;N;;;;; BA23;HANGUL SYLLABLE MYAED;Lo;0;L;;;;;N;;;;; BA24;HANGUL SYLLABLE MYAEL;Lo;0;L;;;;;N;;;;; BA25;HANGUL SYLLABLE MYAELG;Lo;0;L;;;;;N;;;;; BA26;HANGUL SYLLABLE MYAELM;Lo;0;L;;;;;N;;;;; BA27;HANGUL SYLLABLE MYAELB;Lo;0;L;;;;;N;;;;; BA28;HANGUL SYLLABLE MYAELS;Lo;0;L;;;;;N;;;;; BA29;HANGUL SYLLABLE MYAELT;Lo;0;L;;;;;N;;;;; BA2A;HANGUL SYLLABLE MYAELP;Lo;0;L;;;;;N;;;;; BA2B;HANGUL SYLLABLE MYAELH;Lo;0;L;;;;;N;;;;; BA2C;HANGUL SYLLABLE MYAEM;Lo;0;L;;;;;N;;;;; BA2D;HANGUL SYLLABLE MYAEB;Lo;0;L;;;;;N;;;;; BA2E;HANGUL SYLLABLE MYAEBS;Lo;0;L;;;;;N;;;;; BA2F;HANGUL SYLLABLE MYAES;Lo;0;L;;;;;N;;;;; BA30;HANGUL SYLLABLE MYAESS;Lo;0;L;;;;;N;;;;; BA31;HANGUL SYLLABLE MYAENG;Lo;0;L;;;;;N;;;;; BA32;HANGUL SYLLABLE MYAEJ;Lo;0;L;;;;;N;;;;; BA33;HANGUL SYLLABLE MYAEC;Lo;0;L;;;;;N;;;;; BA34;HANGUL SYLLABLE MYAEK;Lo;0;L;;;;;N;;;;; BA35;HANGUL SYLLABLE MYAET;Lo;0;L;;;;;N;;;;; BA36;HANGUL SYLLABLE MYAEP;Lo;0;L;;;;;N;;;;; BA37;HANGUL SYLLABLE MYAEH;Lo;0;L;;;;;N;;;;; BA38;HANGUL SYLLABLE MEO;Lo;0;L;;;;;N;;;;; BA39;HANGUL SYLLABLE MEOG;Lo;0;L;;;;;N;;;;; BA3A;HANGUL SYLLABLE MEOGG;Lo;0;L;;;;;N;;;;; BA3B;HANGUL SYLLABLE MEOGS;Lo;0;L;;;;;N;;;;; BA3C;HANGUL SYLLABLE MEON;Lo;0;L;;;;;N;;;;; BA3D;HANGUL SYLLABLE MEONI;Lo;0;L;;;;;N;;;;; BA3E;HANGUL SYLLABLE MEONH;Lo;0;L;;;;;N;;;;; BA3F;HANGUL SYLLABLE MEOD;Lo;0;L;;;;;N;;;;; BA40;HANGUL SYLLABLE MEOL;Lo;0;L;;;;;N;;;;; BA41;HANGUL SYLLABLE MEOLG;Lo;0;L;;;;;N;;;;; BA42;HANGUL SYLLABLE MEOLM;Lo;0;L;;;;;N;;;;; BA43;HANGUL SYLLABLE MEOLB;Lo;0;L;;;;;N;;;;; BA44;HANGUL SYLLABLE MEOLS;Lo;0;L;;;;;N;;;;; BA45;HANGUL SYLLABLE MEOLT;Lo;0;L;;;;;N;;;;; BA46;HANGUL SYLLABLE MEOLP;Lo;0;L;;;;;N;;;;; BA47;HANGUL SYLLABLE MEOLH;Lo;0;L;;;;;N;;;;; BA48;HANGUL SYLLABLE MEOM;Lo;0;L;;;;;N;;;;; BA49;HANGUL SYLLABLE MEOB;Lo;0;L;;;;;N;;;;; BA4A;HANGUL SYLLABLE MEOBS;Lo;0;L;;;;;N;;;;; BA4B;HANGUL SYLLABLE MEOS;Lo;0;L;;;;;N;;;;; BA4C;HANGUL SYLLABLE MEOSS;Lo;0;L;;;;;N;;;;; BA4D;HANGUL SYLLABLE MEONG;Lo;0;L;;;;;N;;;;; BA4E;HANGUL SYLLABLE MEOJ;Lo;0;L;;;;;N;;;;; BA4F;HANGUL SYLLABLE MEOC;Lo;0;L;;;;;N;;;;; BA50;HANGUL SYLLABLE MEOK;Lo;0;L;;;;;N;;;;; BA51;HANGUL SYLLABLE MEOT;Lo;0;L;;;;;N;;;;; BA52;HANGUL SYLLABLE MEOP;Lo;0;L;;;;;N;;;;; BA53;HANGUL SYLLABLE MEOH;Lo;0;L;;;;;N;;;;; BA54;HANGUL SYLLABLE ME;Lo;0;L;;;;;N;;;;; BA55;HANGUL SYLLABLE MEG;Lo;0;L;;;;;N;;;;; BA56;HANGUL SYLLABLE MEGG;Lo;0;L;;;;;N;;;;; BA57;HANGUL SYLLABLE MEGS;Lo;0;L;;;;;N;;;;; BA58;HANGUL SYLLABLE MEN;Lo;0;L;;;;;N;;;;; BA59;HANGUL SYLLABLE MENI;Lo;0;L;;;;;N;;;;; BA5A;HANGUL SYLLABLE MENH;Lo;0;L;;;;;N;;;;; BA5B;HANGUL SYLLABLE MED;Lo;0;L;;;;;N;;;;; BA5C;HANGUL SYLLABLE MEL;Lo;0;L;;;;;N;;;;; BA5D;HANGUL SYLLABLE MELG;Lo;0;L;;;;;N;;;;; BA5E;HANGUL SYLLABLE MELM;Lo;0;L;;;;;N;;;;; BA5F;HANGUL SYLLABLE MELB;Lo;0;L;;;;;N;;;;; BA60;HANGUL SYLLABLE MELS;Lo;0;L;;;;;N;;;;; BA61;HANGUL SYLLABLE MELT;Lo;0;L;;;;;N;;;;; BA62;HANGUL SYLLABLE MELP;Lo;0;L;;;;;N;;;;; BA63;HANGUL SYLLABLE MELH;Lo;0;L;;;;;N;;;;; BA64;HANGUL SYLLABLE MEM;Lo;0;L;;;;;N;;;;; BA65;HANGUL SYLLABLE MEB;Lo;0;L;;;;;N;;;;; BA66;HANGUL SYLLABLE MEBS;Lo;0;L;;;;;N;;;;; BA67;HANGUL SYLLABLE MES;Lo;0;L;;;;;N;;;;; BA68;HANGUL SYLLABLE MESS;Lo;0;L;;;;;N;;;;; BA69;HANGUL SYLLABLE MENG;Lo;0;L;;;;;N;;;;; BA6A;HANGUL SYLLABLE MEJ;Lo;0;L;;;;;N;;;;; BA6B;HANGUL SYLLABLE MEC;Lo;0;L;;;;;N;;;;; BA6C;HANGUL SYLLABLE MEK;Lo;0;L;;;;;N;;;;; BA6D;HANGUL SYLLABLE MET;Lo;0;L;;;;;N;;;;; BA6E;HANGUL SYLLABLE MEP;Lo;0;L;;;;;N;;;;; BA6F;HANGUL SYLLABLE MEH;Lo;0;L;;;;;N;;;;; BA70;HANGUL SYLLABLE MYEO;Lo;0;L;;;;;N;;;;; BA71;HANGUL SYLLABLE MYEOG;Lo;0;L;;;;;N;;;;; BA72;HANGUL SYLLABLE MYEOGG;Lo;0;L;;;;;N;;;;; BA73;HANGUL SYLLABLE MYEOGS;Lo;0;L;;;;;N;;;;; BA74;HANGUL SYLLABLE MYEON;Lo;0;L;;;;;N;;;;; BA75;HANGUL SYLLABLE MYEONI;Lo;0;L;;;;;N;;;;; BA76;HANGUL SYLLABLE MYEONH;Lo;0;L;;;;;N;;;;; BA77;HANGUL SYLLABLE MYEOD;Lo;0;L;;;;;N;;;;; BA78;HANGUL SYLLABLE MYEOL;Lo;0;L;;;;;N;;;;; BA79;HANGUL SYLLABLE MYEOLG;Lo;0;L;;;;;N;;;;; BA7A;HANGUL SYLLABLE MYEOLM;Lo;0;L;;;;;N;;;;; BA7B;HANGUL SYLLABLE MYEOLB;Lo;0;L;;;;;N;;;;; BA7C;HANGUL SYLLABLE MYEOLS;Lo;0;L;;;;;N;;;;; BA7D;HANGUL SYLLABLE MYEOLT;Lo;0;L;;;;;N;;;;; BA7E;HANGUL SYLLABLE MYEOLP;Lo;0;L;;;;;N;;;;; BA7F;HANGUL SYLLABLE MYEOLH;Lo;0;L;;;;;N;;;;; BA80;HANGUL SYLLABLE MYEOM;Lo;0;L;;;;;N;;;;; BA81;HANGUL SYLLABLE MYEOB;Lo;0;L;;;;;N;;;;; BA82;HANGUL SYLLABLE MYEOBS;Lo;0;L;;;;;N;;;;; BA83;HANGUL SYLLABLE MYEOS;Lo;0;L;;;;;N;;;;; BA84;HANGUL SYLLABLE MYEOSS;Lo;0;L;;;;;N;;;;; BA85;HANGUL SYLLABLE MYEONG;Lo;0;L;;;;;N;;;;; BA86;HANGUL SYLLABLE MYEOJ;Lo;0;L;;;;;N;;;;; BA87;HANGUL SYLLABLE MYEOC;Lo;0;L;;;;;N;;;;; BA88;HANGUL SYLLABLE MYEOK;Lo;0;L;;;;;N;;;;; BA89;HANGUL SYLLABLE MYEOT;Lo;0;L;;;;;N;;;;; BA8A;HANGUL SYLLABLE MYEOP;Lo;0;L;;;;;N;;;;; BA8B;HANGUL SYLLABLE MYEOH;Lo;0;L;;;;;N;;;;; BA8C;HANGUL SYLLABLE MYE;Lo;0;L;;;;;N;;;;; BA8D;HANGUL SYLLABLE MYEG;Lo;0;L;;;;;N;;;;; BA8E;HANGUL SYLLABLE MYEGG;Lo;0;L;;;;;N;;;;; BA8F;HANGUL SYLLABLE MYEGS;Lo;0;L;;;;;N;;;;; BA90;HANGUL SYLLABLE MYEN;Lo;0;L;;;;;N;;;;; BA91;HANGUL SYLLABLE MYENI;Lo;0;L;;;;;N;;;;; BA92;HANGUL SYLLABLE MYENH;Lo;0;L;;;;;N;;;;; BA93;HANGUL SYLLABLE MYED;Lo;0;L;;;;;N;;;;; BA94;HANGUL SYLLABLE MYEL;Lo;0;L;;;;;N;;;;; BA95;HANGUL SYLLABLE MYELG;Lo;0;L;;;;;N;;;;; BA96;HANGUL SYLLABLE MYELM;Lo;0;L;;;;;N;;;;; BA97;HANGUL SYLLABLE MYELB;Lo;0;L;;;;;N;;;;; BA98;HANGUL SYLLABLE MYELS;Lo;0;L;;;;;N;;;;; BA99;HANGUL SYLLABLE MYELT;Lo;0;L;;;;;N;;;;; BA9A;HANGUL SYLLABLE MYELP;Lo;0;L;;;;;N;;;;; BA9B;HANGUL SYLLABLE MYELH;Lo;0;L;;;;;N;;;;; BA9C;HANGUL SYLLABLE MYEM;Lo;0;L;;;;;N;;;;; BA9D;HANGUL SYLLABLE MYEB;Lo;0;L;;;;;N;;;;; BA9E;HANGUL SYLLABLE MYEBS;Lo;0;L;;;;;N;;;;; BA9F;HANGUL SYLLABLE MYES;Lo;0;L;;;;;N;;;;; BAA0;HANGUL SYLLABLE MYESS;Lo;0;L;;;;;N;;;;; BAA1;HANGUL SYLLABLE MYENG;Lo;0;L;;;;;N;;;;; BAA2;HANGUL SYLLABLE MYEJ;Lo;0;L;;;;;N;;;;; BAA3;HANGUL SYLLABLE MYEC;Lo;0;L;;;;;N;;;;; BAA4;HANGUL SYLLABLE MYEK;Lo;0;L;;;;;N;;;;; BAA5;HANGUL SYLLABLE MYET;Lo;0;L;;;;;N;;;;; BAA6;HANGUL SYLLABLE MYEP;Lo;0;L;;;;;N;;;;; BAA7;HANGUL SYLLABLE MYEH;Lo;0;L;;;;;N;;;;; BAA8;HANGUL SYLLABLE MO;Lo;0;L;;;;;N;;;;; BAA9;HANGUL SYLLABLE MOG;Lo;0;L;;;;;N;;;;; BAAA;HANGUL SYLLABLE MOGG;Lo;0;L;;;;;N;;;;; BAAB;HANGUL SYLLABLE MOGS;Lo;0;L;;;;;N;;;;; BAAC;HANGUL SYLLABLE MON;Lo;0;L;;;;;N;;;;; BAAD;HANGUL SYLLABLE MONI;Lo;0;L;;;;;N;;;;; BAAE;HANGUL SYLLABLE MONH;Lo;0;L;;;;;N;;;;; BAAF;HANGUL SYLLABLE MOD;Lo;0;L;;;;;N;;;;; BAB0;HANGUL SYLLABLE MOL;Lo;0;L;;;;;N;;;;; BAB1;HANGUL SYLLABLE MOLG;Lo;0;L;;;;;N;;;;; BAB2;HANGUL SYLLABLE MOLM;Lo;0;L;;;;;N;;;;; BAB3;HANGUL SYLLABLE MOLB;Lo;0;L;;;;;N;;;;; BAB4;HANGUL SYLLABLE MOLS;Lo;0;L;;;;;N;;;;; BAB5;HANGUL SYLLABLE MOLT;Lo;0;L;;;;;N;;;;; BAB6;HANGUL SYLLABLE MOLP;Lo;0;L;;;;;N;;;;; BAB7;HANGUL SYLLABLE MOLH;Lo;0;L;;;;;N;;;;; BAB8;HANGUL SYLLABLE MOM;Lo;0;L;;;;;N;;;;; BAB9;HANGUL SYLLABLE MOB;Lo;0;L;;;;;N;;;;; BABA;HANGUL SYLLABLE MOBS;Lo;0;L;;;;;N;;;;; BABB;HANGUL SYLLABLE MOS;Lo;0;L;;;;;N;;;;; BABC;HANGUL SYLLABLE MOSS;Lo;0;L;;;;;N;;;;; BABD;HANGUL SYLLABLE MONG;Lo;0;L;;;;;N;;;;; BABE;HANGUL SYLLABLE MOJ;Lo;0;L;;;;;N;;;;; BABF;HANGUL SYLLABLE MOC;Lo;0;L;;;;;N;;;;; BAC0;HANGUL SYLLABLE MOK;Lo;0;L;;;;;N;;;;; BAC1;HANGUL SYLLABLE MOT;Lo;0;L;;;;;N;;;;; BAC2;HANGUL SYLLABLE MOP;Lo;0;L;;;;;N;;;;; BAC3;HANGUL SYLLABLE MOH;Lo;0;L;;;;;N;;;;; BAC4;HANGUL SYLLABLE MWA;Lo;0;L;;;;;N;;;;; BAC5;HANGUL SYLLABLE MWAG;Lo;0;L;;;;;N;;;;; BAC6;HANGUL SYLLABLE MWAGG;Lo;0;L;;;;;N;;;;; BAC7;HANGUL SYLLABLE MWAGS;Lo;0;L;;;;;N;;;;; BAC8;HANGUL SYLLABLE MWAN;Lo;0;L;;;;;N;;;;; BAC9;HANGUL SYLLABLE MWANI;Lo;0;L;;;;;N;;;;; BACA;HANGUL SYLLABLE MWANH;Lo;0;L;;;;;N;;;;; BACB;HANGUL SYLLABLE MWAD;Lo;0;L;;;;;N;;;;; BACC;HANGUL SYLLABLE MWAL;Lo;0;L;;;;;N;;;;; BACD;HANGUL SYLLABLE MWALG;Lo;0;L;;;;;N;;;;; BACE;HANGUL SYLLABLE MWALM;Lo;0;L;;;;;N;;;;; BACF;HANGUL SYLLABLE MWALB;Lo;0;L;;;;;N;;;;; BAD0;HANGUL SYLLABLE MWALS;Lo;0;L;;;;;N;;;;; BAD1;HANGUL SYLLABLE MWALT;Lo;0;L;;;;;N;;;;; BAD2;HANGUL SYLLABLE MWALP;Lo;0;L;;;;;N;;;;; BAD3;HANGUL SYLLABLE MWALH;Lo;0;L;;;;;N;;;;; BAD4;HANGUL SYLLABLE MWAM;Lo;0;L;;;;;N;;;;; BAD5;HANGUL SYLLABLE MWAB;Lo;0;L;;;;;N;;;;; BAD6;HANGUL SYLLABLE MWABS;Lo;0;L;;;;;N;;;;; BAD7;HANGUL SYLLABLE MWAS;Lo;0;L;;;;;N;;;;; BAD8;HANGUL SYLLABLE MWASS;Lo;0;L;;;;;N;;;;; BAD9;HANGUL SYLLABLE MWANG;Lo;0;L;;;;;N;;;;; BADA;HANGUL SYLLABLE MWAJ;Lo;0;L;;;;;N;;;;; BADB;HANGUL SYLLABLE MWAC;Lo;0;L;;;;;N;;;;; BADC;HANGUL SYLLABLE MWAK;Lo;0;L;;;;;N;;;;; BADD;HANGUL SYLLABLE MWAT;Lo;0;L;;;;;N;;;;; BADE;HANGUL SYLLABLE MWAP;Lo;0;L;;;;;N;;;;; BADF;HANGUL SYLLABLE MWAH;Lo;0;L;;;;;N;;;;; BAE0;HANGUL SYLLABLE MWAE;Lo;0;L;;;;;N;;;;; BAE1;HANGUL SYLLABLE MWAEG;Lo;0;L;;;;;N;;;;; BAE2;HANGUL SYLLABLE MWAEGG;Lo;0;L;;;;;N;;;;; BAE3;HANGUL SYLLABLE MWAEGS;Lo;0;L;;;;;N;;;;; BAE4;HANGUL SYLLABLE MWAEN;Lo;0;L;;;;;N;;;;; BAE5;HANGUL SYLLABLE MWAENI;Lo;0;L;;;;;N;;;;; BAE6;HANGUL SYLLABLE MWAENH;Lo;0;L;;;;;N;;;;; BAE7;HANGUL SYLLABLE MWAED;Lo;0;L;;;;;N;;;;; BAE8;HANGUL SYLLABLE MWAEL;Lo;0;L;;;;;N;;;;; BAE9;HANGUL SYLLABLE MWAELG;Lo;0;L;;;;;N;;;;; BAEA;HANGUL SYLLABLE MWAELM;Lo;0;L;;;;;N;;;;; BAEB;HANGUL SYLLABLE MWAELB;Lo;0;L;;;;;N;;;;; BAEC;HANGUL SYLLABLE MWAELS;Lo;0;L;;;;;N;;;;; BAED;HANGUL SYLLABLE MWAELT;Lo;0;L;;;;;N;;;;; BAEE;HANGUL SYLLABLE MWAELP;Lo;0;L;;;;;N;;;;; BAEF;HANGUL SYLLABLE MWAELH;Lo;0;L;;;;;N;;;;; BAF0;HANGUL SYLLABLE MWAEM;Lo;0;L;;;;;N;;;;; BAF1;HANGUL SYLLABLE MWAEB;Lo;0;L;;;;;N;;;;; BAF2;HANGUL SYLLABLE MWAEBS;Lo;0;L;;;;;N;;;;; BAF3;HANGUL SYLLABLE MWAES;Lo;0;L;;;;;N;;;;; BAF4;HANGUL SYLLABLE MWAESS;Lo;0;L;;;;;N;;;;; BAF5;HANGUL SYLLABLE MWAENG;Lo;0;L;;;;;N;;;;; BAF6;HANGUL SYLLABLE MWAEJ;Lo;0;L;;;;;N;;;;; BAF7;HANGUL SYLLABLE MWAEC;Lo;0;L;;;;;N;;;;; BAF8;HANGUL SYLLABLE MWAEK;Lo;0;L;;;;;N;;;;; BAF9;HANGUL SYLLABLE MWAET;Lo;0;L;;;;;N;;;;; BAFA;HANGUL SYLLABLE MWAEP;Lo;0;L;;;;;N;;;;; BAFB;HANGUL SYLLABLE MWAEH;Lo;0;L;;;;;N;;;;; BAFC;HANGUL SYLLABLE MOE;Lo;0;L;;;;;N;;;;; BAFD;HANGUL SYLLABLE MOEG;Lo;0;L;;;;;N;;;;; BAFE;HANGUL SYLLABLE MOEGG;Lo;0;L;;;;;N;;;;; BAFF;HANGUL SYLLABLE MOEGS;Lo;0;L;;;;;N;;;;; BB00;HANGUL SYLLABLE MOEN;Lo;0;L;;;;;N;;;;; BB01;HANGUL SYLLABLE MOENI;Lo;0;L;;;;;N;;;;; BB02;HANGUL SYLLABLE MOENH;Lo;0;L;;;;;N;;;;; BB03;HANGUL SYLLABLE MOED;Lo;0;L;;;;;N;;;;; BB04;HANGUL SYLLABLE MOEL;Lo;0;L;;;;;N;;;;; BB05;HANGUL SYLLABLE MOELG;Lo;0;L;;;;;N;;;;; BB06;HANGUL SYLLABLE MOELM;Lo;0;L;;;;;N;;;;; BB07;HANGUL SYLLABLE MOELB;Lo;0;L;;;;;N;;;;; BB08;HANGUL SYLLABLE MOELS;Lo;0;L;;;;;N;;;;; BB09;HANGUL SYLLABLE MOELT;Lo;0;L;;;;;N;;;;; BB0A;HANGUL SYLLABLE MOELP;Lo;0;L;;;;;N;;;;; BB0B;HANGUL SYLLABLE MOELH;Lo;0;L;;;;;N;;;;; BB0C;HANGUL SYLLABLE MOEM;Lo;0;L;;;;;N;;;;; BB0D;HANGUL SYLLABLE MOEB;Lo;0;L;;;;;N;;;;; BB0E;HANGUL SYLLABLE MOEBS;Lo;0;L;;;;;N;;;;; BB0F;HANGUL SYLLABLE MOES;Lo;0;L;;;;;N;;;;; BB10;HANGUL SYLLABLE MOESS;Lo;0;L;;;;;N;;;;; BB11;HANGUL SYLLABLE MOENG;Lo;0;L;;;;;N;;;;; BB12;HANGUL SYLLABLE MOEJ;Lo;0;L;;;;;N;;;;; BB13;HANGUL SYLLABLE MOEC;Lo;0;L;;;;;N;;;;; BB14;HANGUL SYLLABLE MOEK;Lo;0;L;;;;;N;;;;; BB15;HANGUL SYLLABLE MOET;Lo;0;L;;;;;N;;;;; BB16;HANGUL SYLLABLE MOEP;Lo;0;L;;;;;N;;;;; BB17;HANGUL SYLLABLE MOEH;Lo;0;L;;;;;N;;;;; BB18;HANGUL SYLLABLE MYO;Lo;0;L;;;;;N;;;;; BB19;HANGUL SYLLABLE MYOG;Lo;0;L;;;;;N;;;;; BB1A;HANGUL SYLLABLE MYOGG;Lo;0;L;;;;;N;;;;; BB1B;HANGUL SYLLABLE MYOGS;Lo;0;L;;;;;N;;;;; BB1C;HANGUL SYLLABLE MYON;Lo;0;L;;;;;N;;;;; BB1D;HANGUL SYLLABLE MYONI;Lo;0;L;;;;;N;;;;; BB1E;HANGUL SYLLABLE MYONH;Lo;0;L;;;;;N;;;;; BB1F;HANGUL SYLLABLE MYOD;Lo;0;L;;;;;N;;;;; BB20;HANGUL SYLLABLE MYOL;Lo;0;L;;;;;N;;;;; BB21;HANGUL SYLLABLE MYOLG;Lo;0;L;;;;;N;;;;; BB22;HANGUL SYLLABLE MYOLM;Lo;0;L;;;;;N;;;;; BB23;HANGUL SYLLABLE MYOLB;Lo;0;L;;;;;N;;;;; BB24;HANGUL SYLLABLE MYOLS;Lo;0;L;;;;;N;;;;; BB25;HANGUL SYLLABLE MYOLT;Lo;0;L;;;;;N;;;;; BB26;HANGUL SYLLABLE MYOLP;Lo;0;L;;;;;N;;;;; BB27;HANGUL SYLLABLE MYOLH;Lo;0;L;;;;;N;;;;; BB28;HANGUL SYLLABLE MYOM;Lo;0;L;;;;;N;;;;; BB29;HANGUL SYLLABLE MYOB;Lo;0;L;;;;;N;;;;; BB2A;HANGUL SYLLABLE MYOBS;Lo;0;L;;;;;N;;;;; BB2B;HANGUL SYLLABLE MYOS;Lo;0;L;;;;;N;;;;; BB2C;HANGUL SYLLABLE MYOSS;Lo;0;L;;;;;N;;;;; BB2D;HANGUL SYLLABLE MYONG;Lo;0;L;;;;;N;;;;; BB2E;HANGUL SYLLABLE MYOJ;Lo;0;L;;;;;N;;;;; BB2F;HANGUL SYLLABLE MYOC;Lo;0;L;;;;;N;;;;; BB30;HANGUL SYLLABLE MYOK;Lo;0;L;;;;;N;;;;; BB31;HANGUL SYLLABLE MYOT;Lo;0;L;;;;;N;;;;; BB32;HANGUL SYLLABLE MYOP;Lo;0;L;;;;;N;;;;; BB33;HANGUL SYLLABLE MYOH;Lo;0;L;;;;;N;;;;; BB34;HANGUL SYLLABLE MU;Lo;0;L;;;;;N;;;;; BB35;HANGUL SYLLABLE MUG;Lo;0;L;;;;;N;;;;; BB36;HANGUL SYLLABLE MUGG;Lo;0;L;;;;;N;;;;; BB37;HANGUL SYLLABLE MUGS;Lo;0;L;;;;;N;;;;; BB38;HANGUL SYLLABLE MUN;Lo;0;L;;;;;N;;;;; BB39;HANGUL SYLLABLE MUNI;Lo;0;L;;;;;N;;;;; BB3A;HANGUL SYLLABLE MUNH;Lo;0;L;;;;;N;;;;; BB3B;HANGUL SYLLABLE MUD;Lo;0;L;;;;;N;;;;; BB3C;HANGUL SYLLABLE MUL;Lo;0;L;;;;;N;;;;; BB3D;HANGUL SYLLABLE MULG;Lo;0;L;;;;;N;;;;; BB3E;HANGUL SYLLABLE MULM;Lo;0;L;;;;;N;;;;; BB3F;HANGUL SYLLABLE MULB;Lo;0;L;;;;;N;;;;; BB40;HANGUL SYLLABLE MULS;Lo;0;L;;;;;N;;;;; BB41;HANGUL SYLLABLE MULT;Lo;0;L;;;;;N;;;;; BB42;HANGUL SYLLABLE MULP;Lo;0;L;;;;;N;;;;; BB43;HANGUL SYLLABLE MULH;Lo;0;L;;;;;N;;;;; BB44;HANGUL SYLLABLE MUM;Lo;0;L;;;;;N;;;;; BB45;HANGUL SYLLABLE MUB;Lo;0;L;;;;;N;;;;; BB46;HANGUL SYLLABLE MUBS;Lo;0;L;;;;;N;;;;; BB47;HANGUL SYLLABLE MUS;Lo;0;L;;;;;N;;;;; BB48;HANGUL SYLLABLE MUSS;Lo;0;L;;;;;N;;;;; BB49;HANGUL SYLLABLE MUNG;Lo;0;L;;;;;N;;;;; BB4A;HANGUL SYLLABLE MUJ;Lo;0;L;;;;;N;;;;; BB4B;HANGUL SYLLABLE MUC;Lo;0;L;;;;;N;;;;; BB4C;HANGUL SYLLABLE MUK;Lo;0;L;;;;;N;;;;; BB4D;HANGUL SYLLABLE MUT;Lo;0;L;;;;;N;;;;; BB4E;HANGUL SYLLABLE MUP;Lo;0;L;;;;;N;;;;; BB4F;HANGUL SYLLABLE MUH;Lo;0;L;;;;;N;;;;; BB50;HANGUL SYLLABLE MWEO;Lo;0;L;;;;;N;;;;; BB51;HANGUL SYLLABLE MWEOG;Lo;0;L;;;;;N;;;;; BB52;HANGUL SYLLABLE MWEOGG;Lo;0;L;;;;;N;;;;; BB53;HANGUL SYLLABLE MWEOGS;Lo;0;L;;;;;N;;;;; BB54;HANGUL SYLLABLE MWEON;Lo;0;L;;;;;N;;;;; BB55;HANGUL SYLLABLE MWEONI;Lo;0;L;;;;;N;;;;; BB56;HANGUL SYLLABLE MWEONH;Lo;0;L;;;;;N;;;;; BB57;HANGUL SYLLABLE MWEOD;Lo;0;L;;;;;N;;;;; BB58;HANGUL SYLLABLE MWEOL;Lo;0;L;;;;;N;;;;; BB59;HANGUL SYLLABLE MWEOLG;Lo;0;L;;;;;N;;;;; BB5A;HANGUL SYLLABLE MWEOLM;Lo;0;L;;;;;N;;;;; BB5B;HANGUL SYLLABLE MWEOLB;Lo;0;L;;;;;N;;;;; BB5C;HANGUL SYLLABLE MWEOLS;Lo;0;L;;;;;N;;;;; BB5D;HANGUL SYLLABLE MWEOLT;Lo;0;L;;;;;N;;;;; BB5E;HANGUL SYLLABLE MWEOLP;Lo;0;L;;;;;N;;;;; BB5F;HANGUL SYLLABLE MWEOLH;Lo;0;L;;;;;N;;;;; BB60;HANGUL SYLLABLE MWEOM;Lo;0;L;;;;;N;;;;; BB61;HANGUL SYLLABLE MWEOB;Lo;0;L;;;;;N;;;;; BB62;HANGUL SYLLABLE MWEOBS;Lo;0;L;;;;;N;;;;; BB63;HANGUL SYLLABLE MWEOS;Lo;0;L;;;;;N;;;;; BB64;HANGUL SYLLABLE MWEOSS;Lo;0;L;;;;;N;;;;; BB65;HANGUL SYLLABLE MWEONG;Lo;0;L;;;;;N;;;;; BB66;HANGUL SYLLABLE MWEOJ;Lo;0;L;;;;;N;;;;; BB67;HANGUL SYLLABLE MWEOC;Lo;0;L;;;;;N;;;;; BB68;HANGUL SYLLABLE MWEOK;Lo;0;L;;;;;N;;;;; BB69;HANGUL SYLLABLE MWEOT;Lo;0;L;;;;;N;;;;; BB6A;HANGUL SYLLABLE MWEOP;Lo;0;L;;;;;N;;;;; BB6B;HANGUL SYLLABLE MWEOH;Lo;0;L;;;;;N;;;;; BB6C;HANGUL SYLLABLE MWE;Lo;0;L;;;;;N;;;;; BB6D;HANGUL SYLLABLE MWEG;Lo;0;L;;;;;N;;;;; BB6E;HANGUL SYLLABLE MWEGG;Lo;0;L;;;;;N;;;;; BB6F;HANGUL SYLLABLE MWEGS;Lo;0;L;;;;;N;;;;; BB70;HANGUL SYLLABLE MWEN;Lo;0;L;;;;;N;;;;; BB71;HANGUL SYLLABLE MWENI;Lo;0;L;;;;;N;;;;; BB72;HANGUL SYLLABLE MWENH;Lo;0;L;;;;;N;;;;; BB73;HANGUL SYLLABLE MWED;Lo;0;L;;;;;N;;;;; BB74;HANGUL SYLLABLE MWEL;Lo;0;L;;;;;N;;;;; BB75;HANGUL SYLLABLE MWELG;Lo;0;L;;;;;N;;;;; BB76;HANGUL SYLLABLE MWELM;Lo;0;L;;;;;N;;;;; BB77;HANGUL SYLLABLE MWELB;Lo;0;L;;;;;N;;;;; BB78;HANGUL SYLLABLE MWELS;Lo;0;L;;;;;N;;;;; BB79;HANGUL SYLLABLE MWELT;Lo;0;L;;;;;N;;;;; BB7A;HANGUL SYLLABLE MWELP;Lo;0;L;;;;;N;;;;; BB7B;HANGUL SYLLABLE MWELH;Lo;0;L;;;;;N;;;;; BB7C;HANGUL SYLLABLE MWEM;Lo;0;L;;;;;N;;;;; BB7D;HANGUL SYLLABLE MWEB;Lo;0;L;;;;;N;;;;; BB7E;HANGUL SYLLABLE MWEBS;Lo;0;L;;;;;N;;;;; BB7F;HANGUL SYLLABLE MWES;Lo;0;L;;;;;N;;;;; BB80;HANGUL SYLLABLE MWESS;Lo;0;L;;;;;N;;;;; BB81;HANGUL SYLLABLE MWENG;Lo;0;L;;;;;N;;;;; BB82;HANGUL SYLLABLE MWEJ;Lo;0;L;;;;;N;;;;; BB83;HANGUL SYLLABLE MWEC;Lo;0;L;;;;;N;;;;; BB84;HANGUL SYLLABLE MWEK;Lo;0;L;;;;;N;;;;; BB85;HANGUL SYLLABLE MWET;Lo;0;L;;;;;N;;;;; BB86;HANGUL SYLLABLE MWEP;Lo;0;L;;;;;N;;;;; BB87;HANGUL SYLLABLE MWEH;Lo;0;L;;;;;N;;;;; BB88;HANGUL SYLLABLE MWI;Lo;0;L;;;;;N;;;;; BB89;HANGUL SYLLABLE MWIG;Lo;0;L;;;;;N;;;;; BB8A;HANGUL SYLLABLE MWIGG;Lo;0;L;;;;;N;;;;; BB8B;HANGUL SYLLABLE MWIGS;Lo;0;L;;;;;N;;;;; BB8C;HANGUL SYLLABLE MWIN;Lo;0;L;;;;;N;;;;; BB8D;HANGUL SYLLABLE MWINI;Lo;0;L;;;;;N;;;;; BB8E;HANGUL SYLLABLE MWINH;Lo;0;L;;;;;N;;;;; BB8F;HANGUL SYLLABLE MWID;Lo;0;L;;;;;N;;;;; BB90;HANGUL SYLLABLE MWIL;Lo;0;L;;;;;N;;;;; BB91;HANGUL SYLLABLE MWILG;Lo;0;L;;;;;N;;;;; BB92;HANGUL SYLLABLE MWILM;Lo;0;L;;;;;N;;;;; BB93;HANGUL SYLLABLE MWILB;Lo;0;L;;;;;N;;;;; BB94;HANGUL SYLLABLE MWILS;Lo;0;L;;;;;N;;;;; BB95;HANGUL SYLLABLE MWILT;Lo;0;L;;;;;N;;;;; BB96;HANGUL SYLLABLE MWILP;Lo;0;L;;;;;N;;;;; BB97;HANGUL SYLLABLE MWILH;Lo;0;L;;;;;N;;;;; BB98;HANGUL SYLLABLE MWIM;Lo;0;L;;;;;N;;;;; BB99;HANGUL SYLLABLE MWIB;Lo;0;L;;;;;N;;;;; BB9A;HANGUL SYLLABLE MWIBS;Lo;0;L;;;;;N;;;;; BB9B;HANGUL SYLLABLE MWIS;Lo;0;L;;;;;N;;;;; BB9C;HANGUL SYLLABLE MWISS;Lo;0;L;;;;;N;;;;; BB9D;HANGUL SYLLABLE MWING;Lo;0;L;;;;;N;;;;; BB9E;HANGUL SYLLABLE MWIJ;Lo;0;L;;;;;N;;;;; BB9F;HANGUL SYLLABLE MWIC;Lo;0;L;;;;;N;;;;; BBA0;HANGUL SYLLABLE MWIK;Lo;0;L;;;;;N;;;;; BBA1;HANGUL SYLLABLE MWIT;Lo;0;L;;;;;N;;;;; BBA2;HANGUL SYLLABLE MWIP;Lo;0;L;;;;;N;;;;; BBA3;HANGUL SYLLABLE MWIH;Lo;0;L;;;;;N;;;;; BBA4;HANGUL SYLLABLE MYU;Lo;0;L;;;;;N;;;;; BBA5;HANGUL SYLLABLE MYUG;Lo;0;L;;;;;N;;;;; BBA6;HANGUL SYLLABLE MYUGG;Lo;0;L;;;;;N;;;;; BBA7;HANGUL SYLLABLE MYUGS;Lo;0;L;;;;;N;;;;; BBA8;HANGUL SYLLABLE MYUN;Lo;0;L;;;;;N;;;;; BBA9;HANGUL SYLLABLE MYUNI;Lo;0;L;;;;;N;;;;; BBAA;HANGUL SYLLABLE MYUNH;Lo;0;L;;;;;N;;;;; BBAB;HANGUL SYLLABLE MYUD;Lo;0;L;;;;;N;;;;; BBAC;HANGUL SYLLABLE MYUL;Lo;0;L;;;;;N;;;;; BBAD;HANGUL SYLLABLE MYULG;Lo;0;L;;;;;N;;;;; BBAE;HANGUL SYLLABLE MYULM;Lo;0;L;;;;;N;;;;; BBAF;HANGUL SYLLABLE MYULB;Lo;0;L;;;;;N;;;;; BBB0;HANGUL SYLLABLE MYULS;Lo;0;L;;;;;N;;;;; BBB1;HANGUL SYLLABLE MYULT;Lo;0;L;;;;;N;;;;; BBB2;HANGUL SYLLABLE MYULP;Lo;0;L;;;;;N;;;;; BBB3;HANGUL SYLLABLE MYULH;Lo;0;L;;;;;N;;;;; BBB4;HANGUL SYLLABLE MYUM;Lo;0;L;;;;;N;;;;; BBB5;HANGUL SYLLABLE MYUB;Lo;0;L;;;;;N;;;;; BBB6;HANGUL SYLLABLE MYUBS;Lo;0;L;;;;;N;;;;; BBB7;HANGUL SYLLABLE MYUS;Lo;0;L;;;;;N;;;;; BBB8;HANGUL SYLLABLE MYUSS;Lo;0;L;;;;;N;;;;; BBB9;HANGUL SYLLABLE MYUNG;Lo;0;L;;;;;N;;;;; BBBA;HANGUL SYLLABLE MYUJ;Lo;0;L;;;;;N;;;;; BBBB;HANGUL SYLLABLE MYUC;Lo;0;L;;;;;N;;;;; BBBC;HANGUL SYLLABLE MYUK;Lo;0;L;;;;;N;;;;; BBBD;HANGUL SYLLABLE MYUT;Lo;0;L;;;;;N;;;;; BBBE;HANGUL SYLLABLE MYUP;Lo;0;L;;;;;N;;;;; BBBF;HANGUL SYLLABLE MYUH;Lo;0;L;;;;;N;;;;; BBC0;HANGUL SYLLABLE MEU;Lo;0;L;;;;;N;;;;; BBC1;HANGUL SYLLABLE MEUG;Lo;0;L;;;;;N;;;;; BBC2;HANGUL SYLLABLE MEUGG;Lo;0;L;;;;;N;;;;; BBC3;HANGUL SYLLABLE MEUGS;Lo;0;L;;;;;N;;;;; BBC4;HANGUL SYLLABLE MEUN;Lo;0;L;;;;;N;;;;; BBC5;HANGUL SYLLABLE MEUNI;Lo;0;L;;;;;N;;;;; BBC6;HANGUL SYLLABLE MEUNH;Lo;0;L;;;;;N;;;;; BBC7;HANGUL SYLLABLE MEUD;Lo;0;L;;;;;N;;;;; BBC8;HANGUL SYLLABLE MEUL;Lo;0;L;;;;;N;;;;; BBC9;HANGUL SYLLABLE MEULG;Lo;0;L;;;;;N;;;;; BBCA;HANGUL SYLLABLE MEULM;Lo;0;L;;;;;N;;;;; BBCB;HANGUL SYLLABLE MEULB;Lo;0;L;;;;;N;;;;; BBCC;HANGUL SYLLABLE MEULS;Lo;0;L;;;;;N;;;;; BBCD;HANGUL SYLLABLE MEULT;Lo;0;L;;;;;N;;;;; BBCE;HANGUL SYLLABLE MEULP;Lo;0;L;;;;;N;;;;; BBCF;HANGUL SYLLABLE MEULH;Lo;0;L;;;;;N;;;;; BBD0;HANGUL SYLLABLE MEUM;Lo;0;L;;;;;N;;;;; BBD1;HANGUL SYLLABLE MEUB;Lo;0;L;;;;;N;;;;; BBD2;HANGUL SYLLABLE MEUBS;Lo;0;L;;;;;N;;;;; BBD3;HANGUL SYLLABLE MEUS;Lo;0;L;;;;;N;;;;; BBD4;HANGUL SYLLABLE MEUSS;Lo;0;L;;;;;N;;;;; BBD5;HANGUL SYLLABLE MEUNG;Lo;0;L;;;;;N;;;;; BBD6;HANGUL SYLLABLE MEUJ;Lo;0;L;;;;;N;;;;; BBD7;HANGUL SYLLABLE MEUC;Lo;0;L;;;;;N;;;;; BBD8;HANGUL SYLLABLE MEUK;Lo;0;L;;;;;N;;;;; BBD9;HANGUL SYLLABLE MEUT;Lo;0;L;;;;;N;;;;; BBDA;HANGUL SYLLABLE MEUP;Lo;0;L;;;;;N;;;;; BBDB;HANGUL SYLLABLE MEUH;Lo;0;L;;;;;N;;;;; BBDC;HANGUL SYLLABLE MYI;Lo;0;L;;;;;N;;;;; BBDD;HANGUL SYLLABLE MYIG;Lo;0;L;;;;;N;;;;; BBDE;HANGUL SYLLABLE MYIGG;Lo;0;L;;;;;N;;;;; BBDF;HANGUL SYLLABLE MYIGS;Lo;0;L;;;;;N;;;;; BBE0;HANGUL SYLLABLE MYIN;Lo;0;L;;;;;N;;;;; BBE1;HANGUL SYLLABLE MYINI;Lo;0;L;;;;;N;;;;; BBE2;HANGUL SYLLABLE MYINH;Lo;0;L;;;;;N;;;;; BBE3;HANGUL SYLLABLE MYID;Lo;0;L;;;;;N;;;;; BBE4;HANGUL SYLLABLE MYIL;Lo;0;L;;;;;N;;;;; BBE5;HANGUL SYLLABLE MYILG;Lo;0;L;;;;;N;;;;; BBE6;HANGUL SYLLABLE MYILM;Lo;0;L;;;;;N;;;;; BBE7;HANGUL SYLLABLE MYILB;Lo;0;L;;;;;N;;;;; BBE8;HANGUL SYLLABLE MYILS;Lo;0;L;;;;;N;;;;; BBE9;HANGUL SYLLABLE MYILT;Lo;0;L;;;;;N;;;;; BBEA;HANGUL SYLLABLE MYILP;Lo;0;L;;;;;N;;;;; BBEB;HANGUL SYLLABLE MYILH;Lo;0;L;;;;;N;;;;; BBEC;HANGUL SYLLABLE MYIM;Lo;0;L;;;;;N;;;;; BBED;HANGUL SYLLABLE MYIB;Lo;0;L;;;;;N;;;;; BBEE;HANGUL SYLLABLE MYIBS;Lo;0;L;;;;;N;;;;; BBEF;HANGUL SYLLABLE MYIS;Lo;0;L;;;;;N;;;;; BBF0;HANGUL SYLLABLE MYISS;Lo;0;L;;;;;N;;;;; BBF1;HANGUL SYLLABLE MYING;Lo;0;L;;;;;N;;;;; BBF2;HANGUL SYLLABLE MYIJ;Lo;0;L;;;;;N;;;;; BBF3;HANGUL SYLLABLE MYIC;Lo;0;L;;;;;N;;;;; BBF4;HANGUL SYLLABLE MYIK;Lo;0;L;;;;;N;;;;; BBF5;HANGUL SYLLABLE MYIT;Lo;0;L;;;;;N;;;;; BBF6;HANGUL SYLLABLE MYIP;Lo;0;L;;;;;N;;;;; BBF7;HANGUL SYLLABLE MYIH;Lo;0;L;;;;;N;;;;; BBF8;HANGUL SYLLABLE MI;Lo;0;L;;;;;N;;;;; BBF9;HANGUL SYLLABLE MIG;Lo;0;L;;;;;N;;;;; BBFA;HANGUL SYLLABLE MIGG;Lo;0;L;;;;;N;;;;; BBFB;HANGUL SYLLABLE MIGS;Lo;0;L;;;;;N;;;;; BBFC;HANGUL SYLLABLE MIN;Lo;0;L;;;;;N;;;;; BBFD;HANGUL SYLLABLE MINI;Lo;0;L;;;;;N;;;;; BBFE;HANGUL SYLLABLE MINH;Lo;0;L;;;;;N;;;;; BBFF;HANGUL SYLLABLE MID;Lo;0;L;;;;;N;;;;; BC00;HANGUL SYLLABLE MIL;Lo;0;L;;;;;N;;;;; BC01;HANGUL SYLLABLE MILG;Lo;0;L;;;;;N;;;;; BC02;HANGUL SYLLABLE MILM;Lo;0;L;;;;;N;;;;; BC03;HANGUL SYLLABLE MILB;Lo;0;L;;;;;N;;;;; BC04;HANGUL SYLLABLE MILS;Lo;0;L;;;;;N;;;;; BC05;HANGUL SYLLABLE MILT;Lo;0;L;;;;;N;;;;; BC06;HANGUL SYLLABLE MILP;Lo;0;L;;;;;N;;;;; BC07;HANGUL SYLLABLE MILH;Lo;0;L;;;;;N;;;;; BC08;HANGUL SYLLABLE MIM;Lo;0;L;;;;;N;;;;; BC09;HANGUL SYLLABLE MIB;Lo;0;L;;;;;N;;;;; BC0A;HANGUL SYLLABLE MIBS;Lo;0;L;;;;;N;;;;; BC0B;HANGUL SYLLABLE MIS;Lo;0;L;;;;;N;;;;; BC0C;HANGUL SYLLABLE MISS;Lo;0;L;;;;;N;;;;; BC0D;HANGUL SYLLABLE MING;Lo;0;L;;;;;N;;;;; BC0E;HANGUL SYLLABLE MIJ;Lo;0;L;;;;;N;;;;; BC0F;HANGUL SYLLABLE MIC;Lo;0;L;;;;;N;;;;; BC10;HANGUL SYLLABLE MIK;Lo;0;L;;;;;N;;;;; BC11;HANGUL SYLLABLE MIT;Lo;0;L;;;;;N;;;;; BC12;HANGUL SYLLABLE MIP;Lo;0;L;;;;;N;;;;; BC13;HANGUL SYLLABLE MIH;Lo;0;L;;;;;N;;;;; BC14;HANGUL SYLLABLE BA;Lo;0;L;;;;;N;;;;; BC15;HANGUL SYLLABLE BAG;Lo;0;L;;;;;N;;;;; BC16;HANGUL SYLLABLE BAGG;Lo;0;L;;;;;N;;;;; BC17;HANGUL SYLLABLE BAGS;Lo;0;L;;;;;N;;;;; BC18;HANGUL SYLLABLE BAN;Lo;0;L;;;;;N;;;;; BC19;HANGUL SYLLABLE BANI;Lo;0;L;;;;;N;;;;; BC1A;HANGUL SYLLABLE BANH;Lo;0;L;;;;;N;;;;; BC1B;HANGUL SYLLABLE BAD;Lo;0;L;;;;;N;;;;; BC1C;HANGUL SYLLABLE BAL;Lo;0;L;;;;;N;;;;; BC1D;HANGUL SYLLABLE BALG;Lo;0;L;;;;;N;;;;; BC1E;HANGUL SYLLABLE BALM;Lo;0;L;;;;;N;;;;; BC1F;HANGUL SYLLABLE BALB;Lo;0;L;;;;;N;;;;; BC20;HANGUL SYLLABLE BALS;Lo;0;L;;;;;N;;;;; BC21;HANGUL SYLLABLE BALT;Lo;0;L;;;;;N;;;;; BC22;HANGUL SYLLABLE BALP;Lo;0;L;;;;;N;;;;; BC23;HANGUL SYLLABLE BALH;Lo;0;L;;;;;N;;;;; BC24;HANGUL SYLLABLE BAM;Lo;0;L;;;;;N;;;;; BC25;HANGUL SYLLABLE BAB;Lo;0;L;;;;;N;;;;; BC26;HANGUL SYLLABLE BABS;Lo;0;L;;;;;N;;;;; BC27;HANGUL SYLLABLE BAS;Lo;0;L;;;;;N;;;;; BC28;HANGUL SYLLABLE BASS;Lo;0;L;;;;;N;;;;; BC29;HANGUL SYLLABLE BANG;Lo;0;L;;;;;N;;;;; BC2A;HANGUL SYLLABLE BAJ;Lo;0;L;;;;;N;;;;; BC2B;HANGUL SYLLABLE BAC;Lo;0;L;;;;;N;;;;; BC2C;HANGUL SYLLABLE BAK;Lo;0;L;;;;;N;;;;; BC2D;HANGUL SYLLABLE BAT;Lo;0;L;;;;;N;;;;; BC2E;HANGUL SYLLABLE BAP;Lo;0;L;;;;;N;;;;; BC2F;HANGUL SYLLABLE BAH;Lo;0;L;;;;;N;;;;; BC30;HANGUL SYLLABLE BAE;Lo;0;L;;;;;N;;;;; BC31;HANGUL SYLLABLE BAEG;Lo;0;L;;;;;N;;;;; BC32;HANGUL SYLLABLE BAEGG;Lo;0;L;;;;;N;;;;; BC33;HANGUL SYLLABLE BAEGS;Lo;0;L;;;;;N;;;;; BC34;HANGUL SYLLABLE BAEN;Lo;0;L;;;;;N;;;;; BC35;HANGUL SYLLABLE BAENI;Lo;0;L;;;;;N;;;;; BC36;HANGUL SYLLABLE BAENH;Lo;0;L;;;;;N;;;;; BC37;HANGUL SYLLABLE BAED;Lo;0;L;;;;;N;;;;; BC38;HANGUL SYLLABLE BAEL;Lo;0;L;;;;;N;;;;; BC39;HANGUL SYLLABLE BAELG;Lo;0;L;;;;;N;;;;; BC3A;HANGUL SYLLABLE BAELM;Lo;0;L;;;;;N;;;;; BC3B;HANGUL SYLLABLE BAELB;Lo;0;L;;;;;N;;;;; BC3C;HANGUL SYLLABLE BAELS;Lo;0;L;;;;;N;;;;; BC3D;HANGUL SYLLABLE BAELT;Lo;0;L;;;;;N;;;;; BC3E;HANGUL SYLLABLE BAELP;Lo;0;L;;;;;N;;;;; BC3F;HANGUL SYLLABLE BAELH;Lo;0;L;;;;;N;;;;; BC40;HANGUL SYLLABLE BAEM;Lo;0;L;;;;;N;;;;; BC41;HANGUL SYLLABLE BAEB;Lo;0;L;;;;;N;;;;; BC42;HANGUL SYLLABLE BAEBS;Lo;0;L;;;;;N;;;;; BC43;HANGUL SYLLABLE BAES;Lo;0;L;;;;;N;;;;; BC44;HANGUL SYLLABLE BAESS;Lo;0;L;;;;;N;;;;; BC45;HANGUL SYLLABLE BAENG;Lo;0;L;;;;;N;;;;; BC46;HANGUL SYLLABLE BAEJ;Lo;0;L;;;;;N;;;;; BC47;HANGUL SYLLABLE BAEC;Lo;0;L;;;;;N;;;;; BC48;HANGUL SYLLABLE BAEK;Lo;0;L;;;;;N;;;;; BC49;HANGUL SYLLABLE BAET;Lo;0;L;;;;;N;;;;; BC4A;HANGUL SYLLABLE BAEP;Lo;0;L;;;;;N;;;;; BC4B;HANGUL SYLLABLE BAEH;Lo;0;L;;;;;N;;;;; BC4C;HANGUL SYLLABLE BYA;Lo;0;L;;;;;N;;;;; BC4D;HANGUL SYLLABLE BYAG;Lo;0;L;;;;;N;;;;; BC4E;HANGUL SYLLABLE BYAGG;Lo;0;L;;;;;N;;;;; BC4F;HANGUL SYLLABLE BYAGS;Lo;0;L;;;;;N;;;;; BC50;HANGUL SYLLABLE BYAN;Lo;0;L;;;;;N;;;;; BC51;HANGUL SYLLABLE BYANI;Lo;0;L;;;;;N;;;;; BC52;HANGUL SYLLABLE BYANH;Lo;0;L;;;;;N;;;;; BC53;HANGUL SYLLABLE BYAD;Lo;0;L;;;;;N;;;;; BC54;HANGUL SYLLABLE BYAL;Lo;0;L;;;;;N;;;;; BC55;HANGUL SYLLABLE BYALG;Lo;0;L;;;;;N;;;;; BC56;HANGUL SYLLABLE BYALM;Lo;0;L;;;;;N;;;;; BC57;HANGUL SYLLABLE BYALB;Lo;0;L;;;;;N;;;;; BC58;HANGUL SYLLABLE BYALS;Lo;0;L;;;;;N;;;;; BC59;HANGUL SYLLABLE BYALT;Lo;0;L;;;;;N;;;;; BC5A;HANGUL SYLLABLE BYALP;Lo;0;L;;;;;N;;;;; BC5B;HANGUL SYLLABLE BYALH;Lo;0;L;;;;;N;;;;; BC5C;HANGUL SYLLABLE BYAM;Lo;0;L;;;;;N;;;;; BC5D;HANGUL SYLLABLE BYAB;Lo;0;L;;;;;N;;;;; BC5E;HANGUL SYLLABLE BYABS;Lo;0;L;;;;;N;;;;; BC5F;HANGUL SYLLABLE BYAS;Lo;0;L;;;;;N;;;;; BC60;HANGUL SYLLABLE BYASS;Lo;0;L;;;;;N;;;;; BC61;HANGUL SYLLABLE BYANG;Lo;0;L;;;;;N;;;;; BC62;HANGUL SYLLABLE BYAJ;Lo;0;L;;;;;N;;;;; BC63;HANGUL SYLLABLE BYAC;Lo;0;L;;;;;N;;;;; BC64;HANGUL SYLLABLE BYAK;Lo;0;L;;;;;N;;;;; BC65;HANGUL SYLLABLE BYAT;Lo;0;L;;;;;N;;;;; BC66;HANGUL SYLLABLE BYAP;Lo;0;L;;;;;N;;;;; BC67;HANGUL SYLLABLE BYAH;Lo;0;L;;;;;N;;;;; BC68;HANGUL SYLLABLE BYAE;Lo;0;L;;;;;N;;;;; BC69;HANGUL SYLLABLE BYAEG;Lo;0;L;;;;;N;;;;; BC6A;HANGUL SYLLABLE BYAEGG;Lo;0;L;;;;;N;;;;; BC6B;HANGUL SYLLABLE BYAEGS;Lo;0;L;;;;;N;;;;; BC6C;HANGUL SYLLABLE BYAEN;Lo;0;L;;;;;N;;;;; BC6D;HANGUL SYLLABLE BYAENI;Lo;0;L;;;;;N;;;;; BC6E;HANGUL SYLLABLE BYAENH;Lo;0;L;;;;;N;;;;; BC6F;HANGUL SYLLABLE BYAED;Lo;0;L;;;;;N;;;;; BC70;HANGUL SYLLABLE BYAEL;Lo;0;L;;;;;N;;;;; BC71;HANGUL SYLLABLE BYAELG;Lo;0;L;;;;;N;;;;; BC72;HANGUL SYLLABLE BYAELM;Lo;0;L;;;;;N;;;;; BC73;HANGUL SYLLABLE BYAELB;Lo;0;L;;;;;N;;;;; BC74;HANGUL SYLLABLE BYAELS;Lo;0;L;;;;;N;;;;; BC75;HANGUL SYLLABLE BYAELT;Lo;0;L;;;;;N;;;;; BC76;HANGUL SYLLABLE BYAELP;Lo;0;L;;;;;N;;;;; BC77;HANGUL SYLLABLE BYAELH;Lo;0;L;;;;;N;;;;; BC78;HANGUL SYLLABLE BYAEM;Lo;0;L;;;;;N;;;;; BC79;HANGUL SYLLABLE BYAEB;Lo;0;L;;;;;N;;;;; BC7A;HANGUL SYLLABLE BYAEBS;Lo;0;L;;;;;N;;;;; BC7B;HANGUL SYLLABLE BYAES;Lo;0;L;;;;;N;;;;; BC7C;HANGUL SYLLABLE BYAESS;Lo;0;L;;;;;N;;;;; BC7D;HANGUL SYLLABLE BYAENG;Lo;0;L;;;;;N;;;;; BC7E;HANGUL SYLLABLE BYAEJ;Lo;0;L;;;;;N;;;;; BC7F;HANGUL SYLLABLE BYAEC;Lo;0;L;;;;;N;;;;; BC80;HANGUL SYLLABLE BYAEK;Lo;0;L;;;;;N;;;;; BC81;HANGUL SYLLABLE BYAET;Lo;0;L;;;;;N;;;;; BC82;HANGUL SYLLABLE BYAEP;Lo;0;L;;;;;N;;;;; BC83;HANGUL SYLLABLE BYAEH;Lo;0;L;;;;;N;;;;; BC84;HANGUL SYLLABLE BEO;Lo;0;L;;;;;N;;;;; BC85;HANGUL SYLLABLE BEOG;Lo;0;L;;;;;N;;;;; BC86;HANGUL SYLLABLE BEOGG;Lo;0;L;;;;;N;;;;; BC87;HANGUL SYLLABLE BEOGS;Lo;0;L;;;;;N;;;;; BC88;HANGUL SYLLABLE BEON;Lo;0;L;;;;;N;;;;; BC89;HANGUL SYLLABLE BEONI;Lo;0;L;;;;;N;;;;; BC8A;HANGUL SYLLABLE BEONH;Lo;0;L;;;;;N;;;;; BC8B;HANGUL SYLLABLE BEOD;Lo;0;L;;;;;N;;;;; BC8C;HANGUL SYLLABLE BEOL;Lo;0;L;;;;;N;;;;; BC8D;HANGUL SYLLABLE BEOLG;Lo;0;L;;;;;N;;;;; BC8E;HANGUL SYLLABLE BEOLM;Lo;0;L;;;;;N;;;;; BC8F;HANGUL SYLLABLE BEOLB;Lo;0;L;;;;;N;;;;; BC90;HANGUL SYLLABLE BEOLS;Lo;0;L;;;;;N;;;;; BC91;HANGUL SYLLABLE BEOLT;Lo;0;L;;;;;N;;;;; BC92;HANGUL SYLLABLE BEOLP;Lo;0;L;;;;;N;;;;; BC93;HANGUL SYLLABLE BEOLH;Lo;0;L;;;;;N;;;;; BC94;HANGUL SYLLABLE BEOM;Lo;0;L;;;;;N;;;;; BC95;HANGUL SYLLABLE BEOB;Lo;0;L;;;;;N;;;;; BC96;HANGUL SYLLABLE BEOBS;Lo;0;L;;;;;N;;;;; BC97;HANGUL SYLLABLE BEOS;Lo;0;L;;;;;N;;;;; BC98;HANGUL SYLLABLE BEOSS;Lo;0;L;;;;;N;;;;; BC99;HANGUL SYLLABLE BEONG;Lo;0;L;;;;;N;;;;; BC9A;HANGUL SYLLABLE BEOJ;Lo;0;L;;;;;N;;;;; BC9B;HANGUL SYLLABLE BEOC;Lo;0;L;;;;;N;;;;; BC9C;HANGUL SYLLABLE BEOK;Lo;0;L;;;;;N;;;;; BC9D;HANGUL SYLLABLE BEOT;Lo;0;L;;;;;N;;;;; BC9E;HANGUL SYLLABLE BEOP;Lo;0;L;;;;;N;;;;; BC9F;HANGUL SYLLABLE BEOH;Lo;0;L;;;;;N;;;;; BCA0;HANGUL SYLLABLE BE;Lo;0;L;;;;;N;;;;; BCA1;HANGUL SYLLABLE BEG;Lo;0;L;;;;;N;;;;; BCA2;HANGUL SYLLABLE BEGG;Lo;0;L;;;;;N;;;;; BCA3;HANGUL SYLLABLE BEGS;Lo;0;L;;;;;N;;;;; BCA4;HANGUL SYLLABLE BEN;Lo;0;L;;;;;N;;;;; BCA5;HANGUL SYLLABLE BENI;Lo;0;L;;;;;N;;;;; BCA6;HANGUL SYLLABLE BENH;Lo;0;L;;;;;N;;;;; BCA7;HANGUL SYLLABLE BED;Lo;0;L;;;;;N;;;;; BCA8;HANGUL SYLLABLE BEL;Lo;0;L;;;;;N;;;;; BCA9;HANGUL SYLLABLE BELG;Lo;0;L;;;;;N;;;;; BCAA;HANGUL SYLLABLE BELM;Lo;0;L;;;;;N;;;;; BCAB;HANGUL SYLLABLE BELB;Lo;0;L;;;;;N;;;;; BCAC;HANGUL SYLLABLE BELS;Lo;0;L;;;;;N;;;;; BCAD;HANGUL SYLLABLE BELT;Lo;0;L;;;;;N;;;;; BCAE;HANGUL SYLLABLE BELP;Lo;0;L;;;;;N;;;;; BCAF;HANGUL SYLLABLE BELH;Lo;0;L;;;;;N;;;;; BCB0;HANGUL SYLLABLE BEM;Lo;0;L;;;;;N;;;;; BCB1;HANGUL SYLLABLE BEB;Lo;0;L;;;;;N;;;;; BCB2;HANGUL SYLLABLE BEBS;Lo;0;L;;;;;N;;;;; BCB3;HANGUL SYLLABLE BES;Lo;0;L;;;;;N;;;;; BCB4;HANGUL SYLLABLE BESS;Lo;0;L;;;;;N;;;;; BCB5;HANGUL SYLLABLE BENG;Lo;0;L;;;;;N;;;;; BCB6;HANGUL SYLLABLE BEJ;Lo;0;L;;;;;N;;;;; BCB7;HANGUL SYLLABLE BEC;Lo;0;L;;;;;N;;;;; BCB8;HANGUL SYLLABLE BEK;Lo;0;L;;;;;N;;;;; BCB9;HANGUL SYLLABLE BET;Lo;0;L;;;;;N;;;;; BCBA;HANGUL SYLLABLE BEP;Lo;0;L;;;;;N;;;;; BCBB;HANGUL SYLLABLE BEH;Lo;0;L;;;;;N;;;;; BCBC;HANGUL SYLLABLE BYEO;Lo;0;L;;;;;N;;;;; BCBD;HANGUL SYLLABLE BYEOG;Lo;0;L;;;;;N;;;;; BCBE;HANGUL SYLLABLE BYEOGG;Lo;0;L;;;;;N;;;;; BCBF;HANGUL SYLLABLE BYEOGS;Lo;0;L;;;;;N;;;;; BCC0;HANGUL SYLLABLE BYEON;Lo;0;L;;;;;N;;;;; BCC1;HANGUL SYLLABLE BYEONI;Lo;0;L;;;;;N;;;;; BCC2;HANGUL SYLLABLE BYEONH;Lo;0;L;;;;;N;;;;; BCC3;HANGUL SYLLABLE BYEOD;Lo;0;L;;;;;N;;;;; BCC4;HANGUL SYLLABLE BYEOL;Lo;0;L;;;;;N;;;;; BCC5;HANGUL SYLLABLE BYEOLG;Lo;0;L;;;;;N;;;;; BCC6;HANGUL SYLLABLE BYEOLM;Lo;0;L;;;;;N;;;;; BCC7;HANGUL SYLLABLE BYEOLB;Lo;0;L;;;;;N;;;;; BCC8;HANGUL SYLLABLE BYEOLS;Lo;0;L;;;;;N;;;;; BCC9;HANGUL SYLLABLE BYEOLT;Lo;0;L;;;;;N;;;;; BCCA;HANGUL SYLLABLE BYEOLP;Lo;0;L;;;;;N;;;;; BCCB;HANGUL SYLLABLE BYEOLH;Lo;0;L;;;;;N;;;;; BCCC;HANGUL SYLLABLE BYEOM;Lo;0;L;;;;;N;;;;; BCCD;HANGUL SYLLABLE BYEOB;Lo;0;L;;;;;N;;;;; BCCE;HANGUL SYLLABLE BYEOBS;Lo;0;L;;;;;N;;;;; BCCF;HANGUL SYLLABLE BYEOS;Lo;0;L;;;;;N;;;;; BCD0;HANGUL SYLLABLE BYEOSS;Lo;0;L;;;;;N;;;;; BCD1;HANGUL SYLLABLE BYEONG;Lo;0;L;;;;;N;;;;; BCD2;HANGUL SYLLABLE BYEOJ;Lo;0;L;;;;;N;;;;; BCD3;HANGUL SYLLABLE BYEOC;Lo;0;L;;;;;N;;;;; BCD4;HANGUL SYLLABLE BYEOK;Lo;0;L;;;;;N;;;;; BCD5;HANGUL SYLLABLE BYEOT;Lo;0;L;;;;;N;;;;; BCD6;HANGUL SYLLABLE BYEOP;Lo;0;L;;;;;N;;;;; BCD7;HANGUL SYLLABLE BYEOH;Lo;0;L;;;;;N;;;;; BCD8;HANGUL SYLLABLE BYE;Lo;0;L;;;;;N;;;;; BCD9;HANGUL SYLLABLE BYEG;Lo;0;L;;;;;N;;;;; BCDA;HANGUL SYLLABLE BYEGG;Lo;0;L;;;;;N;;;;; BCDB;HANGUL SYLLABLE BYEGS;Lo;0;L;;;;;N;;;;; BCDC;HANGUL SYLLABLE BYEN;Lo;0;L;;;;;N;;;;; BCDD;HANGUL SYLLABLE BYENI;Lo;0;L;;;;;N;;;;; BCDE;HANGUL SYLLABLE BYENH;Lo;0;L;;;;;N;;;;; BCDF;HANGUL SYLLABLE BYED;Lo;0;L;;;;;N;;;;; BCE0;HANGUL SYLLABLE BYEL;Lo;0;L;;;;;N;;;;; BCE1;HANGUL SYLLABLE BYELG;Lo;0;L;;;;;N;;;;; BCE2;HANGUL SYLLABLE BYELM;Lo;0;L;;;;;N;;;;; BCE3;HANGUL SYLLABLE BYELB;Lo;0;L;;;;;N;;;;; BCE4;HANGUL SYLLABLE BYELS;Lo;0;L;;;;;N;;;;; BCE5;HANGUL SYLLABLE BYELT;Lo;0;L;;;;;N;;;;; BCE6;HANGUL SYLLABLE BYELP;Lo;0;L;;;;;N;;;;; BCE7;HANGUL SYLLABLE BYELH;Lo;0;L;;;;;N;;;;; BCE8;HANGUL SYLLABLE BYEM;Lo;0;L;;;;;N;;;;; BCE9;HANGUL SYLLABLE BYEB;Lo;0;L;;;;;N;;;;; BCEA;HANGUL SYLLABLE BYEBS;Lo;0;L;;;;;N;;;;; BCEB;HANGUL SYLLABLE BYES;Lo;0;L;;;;;N;;;;; BCEC;HANGUL SYLLABLE BYESS;Lo;0;L;;;;;N;;;;; BCED;HANGUL SYLLABLE BYENG;Lo;0;L;;;;;N;;;;; BCEE;HANGUL SYLLABLE BYEJ;Lo;0;L;;;;;N;;;;; BCEF;HANGUL SYLLABLE BYEC;Lo;0;L;;;;;N;;;;; BCF0;HANGUL SYLLABLE BYEK;Lo;0;L;;;;;N;;;;; BCF1;HANGUL SYLLABLE BYET;Lo;0;L;;;;;N;;;;; BCF2;HANGUL SYLLABLE BYEP;Lo;0;L;;;;;N;;;;; BCF3;HANGUL SYLLABLE BYEH;Lo;0;L;;;;;N;;;;; BCF4;HANGUL SYLLABLE BO;Lo;0;L;;;;;N;;;;; BCF5;HANGUL SYLLABLE BOG;Lo;0;L;;;;;N;;;;; BCF6;HANGUL SYLLABLE BOGG;Lo;0;L;;;;;N;;;;; BCF7;HANGUL SYLLABLE BOGS;Lo;0;L;;;;;N;;;;; BCF8;HANGUL SYLLABLE BON;Lo;0;L;;;;;N;;;;; BCF9;HANGUL SYLLABLE BONI;Lo;0;L;;;;;N;;;;; BCFA;HANGUL SYLLABLE BONH;Lo;0;L;;;;;N;;;;; BCFB;HANGUL SYLLABLE BOD;Lo;0;L;;;;;N;;;;; BCFC;HANGUL SYLLABLE BOL;Lo;0;L;;;;;N;;;;; BCFD;HANGUL SYLLABLE BOLG;Lo;0;L;;;;;N;;;;; BCFE;HANGUL SYLLABLE BOLM;Lo;0;L;;;;;N;;;;; BCFF;HANGUL SYLLABLE BOLB;Lo;0;L;;;;;N;;;;; BD00;HANGUL SYLLABLE BOLS;Lo;0;L;;;;;N;;;;; BD01;HANGUL SYLLABLE BOLT;Lo;0;L;;;;;N;;;;; BD02;HANGUL SYLLABLE BOLP;Lo;0;L;;;;;N;;;;; BD03;HANGUL SYLLABLE BOLH;Lo;0;L;;;;;N;;;;; BD04;HANGUL SYLLABLE BOM;Lo;0;L;;;;;N;;;;; BD05;HANGUL SYLLABLE BOB;Lo;0;L;;;;;N;;;;; BD06;HANGUL SYLLABLE BOBS;Lo;0;L;;;;;N;;;;; BD07;HANGUL SYLLABLE BOS;Lo;0;L;;;;;N;;;;; BD08;HANGUL SYLLABLE BOSS;Lo;0;L;;;;;N;;;;; BD09;HANGUL SYLLABLE BONG;Lo;0;L;;;;;N;;;;; BD0A;HANGUL SYLLABLE BOJ;Lo;0;L;;;;;N;;;;; BD0B;HANGUL SYLLABLE BOC;Lo;0;L;;;;;N;;;;; BD0C;HANGUL SYLLABLE BOK;Lo;0;L;;;;;N;;;;; BD0D;HANGUL SYLLABLE BOT;Lo;0;L;;;;;N;;;;; BD0E;HANGUL SYLLABLE BOP;Lo;0;L;;;;;N;;;;; BD0F;HANGUL SYLLABLE BOH;Lo;0;L;;;;;N;;;;; BD10;HANGUL SYLLABLE BWA;Lo;0;L;;;;;N;;;;; BD11;HANGUL SYLLABLE BWAG;Lo;0;L;;;;;N;;;;; BD12;HANGUL SYLLABLE BWAGG;Lo;0;L;;;;;N;;;;; BD13;HANGUL SYLLABLE BWAGS;Lo;0;L;;;;;N;;;;; BD14;HANGUL SYLLABLE BWAN;Lo;0;L;;;;;N;;;;; BD15;HANGUL SYLLABLE BWANI;Lo;0;L;;;;;N;;;;; BD16;HANGUL SYLLABLE BWANH;Lo;0;L;;;;;N;;;;; BD17;HANGUL SYLLABLE BWAD;Lo;0;L;;;;;N;;;;; BD18;HANGUL SYLLABLE BWAL;Lo;0;L;;;;;N;;;;; BD19;HANGUL SYLLABLE BWALG;Lo;0;L;;;;;N;;;;; BD1A;HANGUL SYLLABLE BWALM;Lo;0;L;;;;;N;;;;; BD1B;HANGUL SYLLABLE BWALB;Lo;0;L;;;;;N;;;;; BD1C;HANGUL SYLLABLE BWALS;Lo;0;L;;;;;N;;;;; BD1D;HANGUL SYLLABLE BWALT;Lo;0;L;;;;;N;;;;; BD1E;HANGUL SYLLABLE BWALP;Lo;0;L;;;;;N;;;;; BD1F;HANGUL SYLLABLE BWALH;Lo;0;L;;;;;N;;;;; BD20;HANGUL SYLLABLE BWAM;Lo;0;L;;;;;N;;;;; BD21;HANGUL SYLLABLE BWAB;Lo;0;L;;;;;N;;;;; BD22;HANGUL SYLLABLE BWABS;Lo;0;L;;;;;N;;;;; BD23;HANGUL SYLLABLE BWAS;Lo;0;L;;;;;N;;;;; BD24;HANGUL SYLLABLE BWASS;Lo;0;L;;;;;N;;;;; BD25;HANGUL SYLLABLE BWANG;Lo;0;L;;;;;N;;;;; BD26;HANGUL SYLLABLE BWAJ;Lo;0;L;;;;;N;;;;; BD27;HANGUL SYLLABLE BWAC;Lo;0;L;;;;;N;;;;; BD28;HANGUL SYLLABLE BWAK;Lo;0;L;;;;;N;;;;; BD29;HANGUL SYLLABLE BWAT;Lo;0;L;;;;;N;;;;; BD2A;HANGUL SYLLABLE BWAP;Lo;0;L;;;;;N;;;;; BD2B;HANGUL SYLLABLE BWAH;Lo;0;L;;;;;N;;;;; BD2C;HANGUL SYLLABLE BWAE;Lo;0;L;;;;;N;;;;; BD2D;HANGUL SYLLABLE BWAEG;Lo;0;L;;;;;N;;;;; BD2E;HANGUL SYLLABLE BWAEGG;Lo;0;L;;;;;N;;;;; BD2F;HANGUL SYLLABLE BWAEGS;Lo;0;L;;;;;N;;;;; BD30;HANGUL SYLLABLE BWAEN;Lo;0;L;;;;;N;;;;; BD31;HANGUL SYLLABLE BWAENI;Lo;0;L;;;;;N;;;;; BD32;HANGUL SYLLABLE BWAENH;Lo;0;L;;;;;N;;;;; BD33;HANGUL SYLLABLE BWAED;Lo;0;L;;;;;N;;;;; BD34;HANGUL SYLLABLE BWAEL;Lo;0;L;;;;;N;;;;; BD35;HANGUL SYLLABLE BWAELG;Lo;0;L;;;;;N;;;;; BD36;HANGUL SYLLABLE BWAELM;Lo;0;L;;;;;N;;;;; BD37;HANGUL SYLLABLE BWAELB;Lo;0;L;;;;;N;;;;; BD38;HANGUL SYLLABLE BWAELS;Lo;0;L;;;;;N;;;;; BD39;HANGUL SYLLABLE BWAELT;Lo;0;L;;;;;N;;;;; BD3A;HANGUL SYLLABLE BWAELP;Lo;0;L;;;;;N;;;;; BD3B;HANGUL SYLLABLE BWAELH;Lo;0;L;;;;;N;;;;; BD3C;HANGUL SYLLABLE BWAEM;Lo;0;L;;;;;N;;;;; BD3D;HANGUL SYLLABLE BWAEB;Lo;0;L;;;;;N;;;;; BD3E;HANGUL SYLLABLE BWAEBS;Lo;0;L;;;;;N;;;;; BD3F;HANGUL SYLLABLE BWAES;Lo;0;L;;;;;N;;;;; BD40;HANGUL SYLLABLE BWAESS;Lo;0;L;;;;;N;;;;; BD41;HANGUL SYLLABLE BWAENG;Lo;0;L;;;;;N;;;;; BD42;HANGUL SYLLABLE BWAEJ;Lo;0;L;;;;;N;;;;; BD43;HANGUL SYLLABLE BWAEC;Lo;0;L;;;;;N;;;;; BD44;HANGUL SYLLABLE BWAEK;Lo;0;L;;;;;N;;;;; BD45;HANGUL SYLLABLE BWAET;Lo;0;L;;;;;N;;;;; BD46;HANGUL SYLLABLE BWAEP;Lo;0;L;;;;;N;;;;; BD47;HANGUL SYLLABLE BWAEH;Lo;0;L;;;;;N;;;;; BD48;HANGUL SYLLABLE BOE;Lo;0;L;;;;;N;;;;; BD49;HANGUL SYLLABLE BOEG;Lo;0;L;;;;;N;;;;; BD4A;HANGUL SYLLABLE BOEGG;Lo;0;L;;;;;N;;;;; BD4B;HANGUL SYLLABLE BOEGS;Lo;0;L;;;;;N;;;;; BD4C;HANGUL SYLLABLE BOEN;Lo;0;L;;;;;N;;;;; BD4D;HANGUL SYLLABLE BOENI;Lo;0;L;;;;;N;;;;; BD4E;HANGUL SYLLABLE BOENH;Lo;0;L;;;;;N;;;;; BD4F;HANGUL SYLLABLE BOED;Lo;0;L;;;;;N;;;;; BD50;HANGUL SYLLABLE BOEL;Lo;0;L;;;;;N;;;;; BD51;HANGUL SYLLABLE BOELG;Lo;0;L;;;;;N;;;;; BD52;HANGUL SYLLABLE BOELM;Lo;0;L;;;;;N;;;;; BD53;HANGUL SYLLABLE BOELB;Lo;0;L;;;;;N;;;;; BD54;HANGUL SYLLABLE BOELS;Lo;0;L;;;;;N;;;;; BD55;HANGUL SYLLABLE BOELT;Lo;0;L;;;;;N;;;;; BD56;HANGUL SYLLABLE BOELP;Lo;0;L;;;;;N;;;;; BD57;HANGUL SYLLABLE BOELH;Lo;0;L;;;;;N;;;;; BD58;HANGUL SYLLABLE BOEM;Lo;0;L;;;;;N;;;;; BD59;HANGUL SYLLABLE BOEB;Lo;0;L;;;;;N;;;;; BD5A;HANGUL SYLLABLE BOEBS;Lo;0;L;;;;;N;;;;; BD5B;HANGUL SYLLABLE BOES;Lo;0;L;;;;;N;;;;; BD5C;HANGUL SYLLABLE BOESS;Lo;0;L;;;;;N;;;;; BD5D;HANGUL SYLLABLE BOENG;Lo;0;L;;;;;N;;;;; BD5E;HANGUL SYLLABLE BOEJ;Lo;0;L;;;;;N;;;;; BD5F;HANGUL SYLLABLE BOEC;Lo;0;L;;;;;N;;;;; BD60;HANGUL SYLLABLE BOEK;Lo;0;L;;;;;N;;;;; BD61;HANGUL SYLLABLE BOET;Lo;0;L;;;;;N;;;;; BD62;HANGUL SYLLABLE BOEP;Lo;0;L;;;;;N;;;;; BD63;HANGUL SYLLABLE BOEH;Lo;0;L;;;;;N;;;;; BD64;HANGUL SYLLABLE BYO;Lo;0;L;;;;;N;;;;; BD65;HANGUL SYLLABLE BYOG;Lo;0;L;;;;;N;;;;; BD66;HANGUL SYLLABLE BYOGG;Lo;0;L;;;;;N;;;;; BD67;HANGUL SYLLABLE BYOGS;Lo;0;L;;;;;N;;;;; BD68;HANGUL SYLLABLE BYON;Lo;0;L;;;;;N;;;;; BD69;HANGUL SYLLABLE BYONI;Lo;0;L;;;;;N;;;;; BD6A;HANGUL SYLLABLE BYONH;Lo;0;L;;;;;N;;;;; BD6B;HANGUL SYLLABLE BYOD;Lo;0;L;;;;;N;;;;; BD6C;HANGUL SYLLABLE BYOL;Lo;0;L;;;;;N;;;;; BD6D;HANGUL SYLLABLE BYOLG;Lo;0;L;;;;;N;;;;; BD6E;HANGUL SYLLABLE BYOLM;Lo;0;L;;;;;N;;;;; BD6F;HANGUL SYLLABLE BYOLB;Lo;0;L;;;;;N;;;;; BD70;HANGUL SYLLABLE BYOLS;Lo;0;L;;;;;N;;;;; BD71;HANGUL SYLLABLE BYOLT;Lo;0;L;;;;;N;;;;; BD72;HANGUL SYLLABLE BYOLP;Lo;0;L;;;;;N;;;;; BD73;HANGUL SYLLABLE BYOLH;Lo;0;L;;;;;N;;;;; BD74;HANGUL SYLLABLE BYOM;Lo;0;L;;;;;N;;;;; BD75;HANGUL SYLLABLE BYOB;Lo;0;L;;;;;N;;;;; BD76;HANGUL SYLLABLE BYOBS;Lo;0;L;;;;;N;;;;; BD77;HANGUL SYLLABLE BYOS;Lo;0;L;;;;;N;;;;; BD78;HANGUL SYLLABLE BYOSS;Lo;0;L;;;;;N;;;;; BD79;HANGUL SYLLABLE BYONG;Lo;0;L;;;;;N;;;;; BD7A;HANGUL SYLLABLE BYOJ;Lo;0;L;;;;;N;;;;; BD7B;HANGUL SYLLABLE BYOC;Lo;0;L;;;;;N;;;;; BD7C;HANGUL SYLLABLE BYOK;Lo;0;L;;;;;N;;;;; BD7D;HANGUL SYLLABLE BYOT;Lo;0;L;;;;;N;;;;; BD7E;HANGUL SYLLABLE BYOP;Lo;0;L;;;;;N;;;;; BD7F;HANGUL SYLLABLE BYOH;Lo;0;L;;;;;N;;;;; BD80;HANGUL SYLLABLE BU;Lo;0;L;;;;;N;;;;; BD81;HANGUL SYLLABLE BUG;Lo;0;L;;;;;N;;;;; BD82;HANGUL SYLLABLE BUGG;Lo;0;L;;;;;N;;;;; BD83;HANGUL SYLLABLE BUGS;Lo;0;L;;;;;N;;;;; BD84;HANGUL SYLLABLE BUN;Lo;0;L;;;;;N;;;;; BD85;HANGUL SYLLABLE BUNI;Lo;0;L;;;;;N;;;;; BD86;HANGUL SYLLABLE BUNH;Lo;0;L;;;;;N;;;;; BD87;HANGUL SYLLABLE BUD;Lo;0;L;;;;;N;;;;; BD88;HANGUL SYLLABLE BUL;Lo;0;L;;;;;N;;;;; BD89;HANGUL SYLLABLE BULG;Lo;0;L;;;;;N;;;;; BD8A;HANGUL SYLLABLE BULM;Lo;0;L;;;;;N;;;;; BD8B;HANGUL SYLLABLE BULB;Lo;0;L;;;;;N;;;;; BD8C;HANGUL SYLLABLE BULS;Lo;0;L;;;;;N;;;;; BD8D;HANGUL SYLLABLE BULT;Lo;0;L;;;;;N;;;;; BD8E;HANGUL SYLLABLE BULP;Lo;0;L;;;;;N;;;;; BD8F;HANGUL SYLLABLE BULH;Lo;0;L;;;;;N;;;;; BD90;HANGUL SYLLABLE BUM;Lo;0;L;;;;;N;;;;; BD91;HANGUL SYLLABLE BUB;Lo;0;L;;;;;N;;;;; BD92;HANGUL SYLLABLE BUBS;Lo;0;L;;;;;N;;;;; BD93;HANGUL SYLLABLE BUS;Lo;0;L;;;;;N;;;;; BD94;HANGUL SYLLABLE BUSS;Lo;0;L;;;;;N;;;;; BD95;HANGUL SYLLABLE BUNG;Lo;0;L;;;;;N;;;;; BD96;HANGUL SYLLABLE BUJ;Lo;0;L;;;;;N;;;;; BD97;HANGUL SYLLABLE BUC;Lo;0;L;;;;;N;;;;; BD98;HANGUL SYLLABLE BUK;Lo;0;L;;;;;N;;;;; BD99;HANGUL SYLLABLE BUT;Lo;0;L;;;;;N;;;;; BD9A;HANGUL SYLLABLE BUP;Lo;0;L;;;;;N;;;;; BD9B;HANGUL SYLLABLE BUH;Lo;0;L;;;;;N;;;;; BD9C;HANGUL SYLLABLE BWEO;Lo;0;L;;;;;N;;;;; BD9D;HANGUL SYLLABLE BWEOG;Lo;0;L;;;;;N;;;;; BD9E;HANGUL SYLLABLE BWEOGG;Lo;0;L;;;;;N;;;;; BD9F;HANGUL SYLLABLE BWEOGS;Lo;0;L;;;;;N;;;;; BDA0;HANGUL SYLLABLE BWEON;Lo;0;L;;;;;N;;;;; BDA1;HANGUL SYLLABLE BWEONI;Lo;0;L;;;;;N;;;;; BDA2;HANGUL SYLLABLE BWEONH;Lo;0;L;;;;;N;;;;; BDA3;HANGUL SYLLABLE BWEOD;Lo;0;L;;;;;N;;;;; BDA4;HANGUL SYLLABLE BWEOL;Lo;0;L;;;;;N;;;;; BDA5;HANGUL SYLLABLE BWEOLG;Lo;0;L;;;;;N;;;;; BDA6;HANGUL SYLLABLE BWEOLM;Lo;0;L;;;;;N;;;;; BDA7;HANGUL SYLLABLE BWEOLB;Lo;0;L;;;;;N;;;;; BDA8;HANGUL SYLLABLE BWEOLS;Lo;0;L;;;;;N;;;;; BDA9;HANGUL SYLLABLE BWEOLT;Lo;0;L;;;;;N;;;;; BDAA;HANGUL SYLLABLE BWEOLP;Lo;0;L;;;;;N;;;;; BDAB;HANGUL SYLLABLE BWEOLH;Lo;0;L;;;;;N;;;;; BDAC;HANGUL SYLLABLE BWEOM;Lo;0;L;;;;;N;;;;; BDAD;HANGUL SYLLABLE BWEOB;Lo;0;L;;;;;N;;;;; BDAE;HANGUL SYLLABLE BWEOBS;Lo;0;L;;;;;N;;;;; BDAF;HANGUL SYLLABLE BWEOS;Lo;0;L;;;;;N;;;;; BDB0;HANGUL SYLLABLE BWEOSS;Lo;0;L;;;;;N;;;;; BDB1;HANGUL SYLLABLE BWEONG;Lo;0;L;;;;;N;;;;; BDB2;HANGUL SYLLABLE BWEOJ;Lo;0;L;;;;;N;;;;; BDB3;HANGUL SYLLABLE BWEOC;Lo;0;L;;;;;N;;;;; BDB4;HANGUL SYLLABLE BWEOK;Lo;0;L;;;;;N;;;;; BDB5;HANGUL SYLLABLE BWEOT;Lo;0;L;;;;;N;;;;; BDB6;HANGUL SYLLABLE BWEOP;Lo;0;L;;;;;N;;;;; BDB7;HANGUL SYLLABLE BWEOH;Lo;0;L;;;;;N;;;;; BDB8;HANGUL SYLLABLE BWE;Lo;0;L;;;;;N;;;;; BDB9;HANGUL SYLLABLE BWEG;Lo;0;L;;;;;N;;;;; BDBA;HANGUL SYLLABLE BWEGG;Lo;0;L;;;;;N;;;;; BDBB;HANGUL SYLLABLE BWEGS;Lo;0;L;;;;;N;;;;; BDBC;HANGUL SYLLABLE BWEN;Lo;0;L;;;;;N;;;;; BDBD;HANGUL SYLLABLE BWENI;Lo;0;L;;;;;N;;;;; BDBE;HANGUL SYLLABLE BWENH;Lo;0;L;;;;;N;;;;; BDBF;HANGUL SYLLABLE BWED;Lo;0;L;;;;;N;;;;; BDC0;HANGUL SYLLABLE BWEL;Lo;0;L;;;;;N;;;;; BDC1;HANGUL SYLLABLE BWELG;Lo;0;L;;;;;N;;;;; BDC2;HANGUL SYLLABLE BWELM;Lo;0;L;;;;;N;;;;; BDC3;HANGUL SYLLABLE BWELB;Lo;0;L;;;;;N;;;;; BDC4;HANGUL SYLLABLE BWELS;Lo;0;L;;;;;N;;;;; BDC5;HANGUL SYLLABLE BWELT;Lo;0;L;;;;;N;;;;; BDC6;HANGUL SYLLABLE BWELP;Lo;0;L;;;;;N;;;;; BDC7;HANGUL SYLLABLE BWELH;Lo;0;L;;;;;N;;;;; BDC8;HANGUL SYLLABLE BWEM;Lo;0;L;;;;;N;;;;; BDC9;HANGUL SYLLABLE BWEB;Lo;0;L;;;;;N;;;;; BDCA;HANGUL SYLLABLE BWEBS;Lo;0;L;;;;;N;;;;; BDCB;HANGUL SYLLABLE BWES;Lo;0;L;;;;;N;;;;; BDCC;HANGUL SYLLABLE BWESS;Lo;0;L;;;;;N;;;;; BDCD;HANGUL SYLLABLE BWENG;Lo;0;L;;;;;N;;;;; BDCE;HANGUL SYLLABLE BWEJ;Lo;0;L;;;;;N;;;;; BDCF;HANGUL SYLLABLE BWEC;Lo;0;L;;;;;N;;;;; BDD0;HANGUL SYLLABLE BWEK;Lo;0;L;;;;;N;;;;; BDD1;HANGUL SYLLABLE BWET;Lo;0;L;;;;;N;;;;; BDD2;HANGUL SYLLABLE BWEP;Lo;0;L;;;;;N;;;;; BDD3;HANGUL SYLLABLE BWEH;Lo;0;L;;;;;N;;;;; BDD4;HANGUL SYLLABLE BWI;Lo;0;L;;;;;N;;;;; BDD5;HANGUL SYLLABLE BWIG;Lo;0;L;;;;;N;;;;; BDD6;HANGUL SYLLABLE BWIGG;Lo;0;L;;;;;N;;;;; BDD7;HANGUL SYLLABLE BWIGS;Lo;0;L;;;;;N;;;;; BDD8;HANGUL SYLLABLE BWIN;Lo;0;L;;;;;N;;;;; BDD9;HANGUL SYLLABLE BWINI;Lo;0;L;;;;;N;;;;; BDDA;HANGUL SYLLABLE BWINH;Lo;0;L;;;;;N;;;;; BDDB;HANGUL SYLLABLE BWID;Lo;0;L;;;;;N;;;;; BDDC;HANGUL SYLLABLE BWIL;Lo;0;L;;;;;N;;;;; BDDD;HANGUL SYLLABLE BWILG;Lo;0;L;;;;;N;;;;; BDDE;HANGUL SYLLABLE BWILM;Lo;0;L;;;;;N;;;;; BDDF;HANGUL SYLLABLE BWILB;Lo;0;L;;;;;N;;;;; BDE0;HANGUL SYLLABLE BWILS;Lo;0;L;;;;;N;;;;; BDE1;HANGUL SYLLABLE BWILT;Lo;0;L;;;;;N;;;;; BDE2;HANGUL SYLLABLE BWILP;Lo;0;L;;;;;N;;;;; BDE3;HANGUL SYLLABLE BWILH;Lo;0;L;;;;;N;;;;; BDE4;HANGUL SYLLABLE BWIM;Lo;0;L;;;;;N;;;;; BDE5;HANGUL SYLLABLE BWIB;Lo;0;L;;;;;N;;;;; BDE6;HANGUL SYLLABLE BWIBS;Lo;0;L;;;;;N;;;;; BDE7;HANGUL SYLLABLE BWIS;Lo;0;L;;;;;N;;;;; BDE8;HANGUL SYLLABLE BWISS;Lo;0;L;;;;;N;;;;; BDE9;HANGUL SYLLABLE BWING;Lo;0;L;;;;;N;;;;; BDEA;HANGUL SYLLABLE BWIJ;Lo;0;L;;;;;N;;;;; BDEB;HANGUL SYLLABLE BWIC;Lo;0;L;;;;;N;;;;; BDEC;HANGUL SYLLABLE BWIK;Lo;0;L;;;;;N;;;;; BDED;HANGUL SYLLABLE BWIT;Lo;0;L;;;;;N;;;;; BDEE;HANGUL SYLLABLE BWIP;Lo;0;L;;;;;N;;;;; BDEF;HANGUL SYLLABLE BWIH;Lo;0;L;;;;;N;;;;; BDF0;HANGUL SYLLABLE BYU;Lo;0;L;;;;;N;;;;; BDF1;HANGUL SYLLABLE BYUG;Lo;0;L;;;;;N;;;;; BDF2;HANGUL SYLLABLE BYUGG;Lo;0;L;;;;;N;;;;; BDF3;HANGUL SYLLABLE BYUGS;Lo;0;L;;;;;N;;;;; BDF4;HANGUL SYLLABLE BYUN;Lo;0;L;;;;;N;;;;; BDF5;HANGUL SYLLABLE BYUNI;Lo;0;L;;;;;N;;;;; BDF6;HANGUL SYLLABLE BYUNH;Lo;0;L;;;;;N;;;;; BDF7;HANGUL SYLLABLE BYUD;Lo;0;L;;;;;N;;;;; BDF8;HANGUL SYLLABLE BYUL;Lo;0;L;;;;;N;;;;; BDF9;HANGUL SYLLABLE BYULG;Lo;0;L;;;;;N;;;;; BDFA;HANGUL SYLLABLE BYULM;Lo;0;L;;;;;N;;;;; BDFB;HANGUL SYLLABLE BYULB;Lo;0;L;;;;;N;;;;; BDFC;HANGUL SYLLABLE BYULS;Lo;0;L;;;;;N;;;;; BDFD;HANGUL SYLLABLE BYULT;Lo;0;L;;;;;N;;;;; BDFE;HANGUL SYLLABLE BYULP;Lo;0;L;;;;;N;;;;; BDFF;HANGUL SYLLABLE BYULH;Lo;0;L;;;;;N;;;;; BE00;HANGUL SYLLABLE BYUM;Lo;0;L;;;;;N;;;;; BE01;HANGUL SYLLABLE BYUB;Lo;0;L;;;;;N;;;;; BE02;HANGUL SYLLABLE BYUBS;Lo;0;L;;;;;N;;;;; BE03;HANGUL SYLLABLE BYUS;Lo;0;L;;;;;N;;;;; BE04;HANGUL SYLLABLE BYUSS;Lo;0;L;;;;;N;;;;; BE05;HANGUL SYLLABLE BYUNG;Lo;0;L;;;;;N;;;;; BE06;HANGUL SYLLABLE BYUJ;Lo;0;L;;;;;N;;;;; BE07;HANGUL SYLLABLE BYUC;Lo;0;L;;;;;N;;;;; BE08;HANGUL SYLLABLE BYUK;Lo;0;L;;;;;N;;;;; BE09;HANGUL SYLLABLE BYUT;Lo;0;L;;;;;N;;;;; BE0A;HANGUL SYLLABLE BYUP;Lo;0;L;;;;;N;;;;; BE0B;HANGUL SYLLABLE BYUH;Lo;0;L;;;;;N;;;;; BE0C;HANGUL SYLLABLE BEU;Lo;0;L;;;;;N;;;;; BE0D;HANGUL SYLLABLE BEUG;Lo;0;L;;;;;N;;;;; BE0E;HANGUL SYLLABLE BEUGG;Lo;0;L;;;;;N;;;;; BE0F;HANGUL SYLLABLE BEUGS;Lo;0;L;;;;;N;;;;; BE10;HANGUL SYLLABLE BEUN;Lo;0;L;;;;;N;;;;; BE11;HANGUL SYLLABLE BEUNI;Lo;0;L;;;;;N;;;;; BE12;HANGUL SYLLABLE BEUNH;Lo;0;L;;;;;N;;;;; BE13;HANGUL SYLLABLE BEUD;Lo;0;L;;;;;N;;;;; BE14;HANGUL SYLLABLE BEUL;Lo;0;L;;;;;N;;;;; BE15;HANGUL SYLLABLE BEULG;Lo;0;L;;;;;N;;;;; BE16;HANGUL SYLLABLE BEULM;Lo;0;L;;;;;N;;;;; BE17;HANGUL SYLLABLE BEULB;Lo;0;L;;;;;N;;;;; BE18;HANGUL SYLLABLE BEULS;Lo;0;L;;;;;N;;;;; BE19;HANGUL SYLLABLE BEULT;Lo;0;L;;;;;N;;;;; BE1A;HANGUL SYLLABLE BEULP;Lo;0;L;;;;;N;;;;; BE1B;HANGUL SYLLABLE BEULH;Lo;0;L;;;;;N;;;;; BE1C;HANGUL SYLLABLE BEUM;Lo;0;L;;;;;N;;;;; BE1D;HANGUL SYLLABLE BEUB;Lo;0;L;;;;;N;;;;; BE1E;HANGUL SYLLABLE BEUBS;Lo;0;L;;;;;N;;;;; BE1F;HANGUL SYLLABLE BEUS;Lo;0;L;;;;;N;;;;; BE20;HANGUL SYLLABLE BEUSS;Lo;0;L;;;;;N;;;;; BE21;HANGUL SYLLABLE BEUNG;Lo;0;L;;;;;N;;;;; BE22;HANGUL SYLLABLE BEUJ;Lo;0;L;;;;;N;;;;; BE23;HANGUL SYLLABLE BEUC;Lo;0;L;;;;;N;;;;; BE24;HANGUL SYLLABLE BEUK;Lo;0;L;;;;;N;;;;; BE25;HANGUL SYLLABLE BEUT;Lo;0;L;;;;;N;;;;; BE26;HANGUL SYLLABLE BEUP;Lo;0;L;;;;;N;;;;; BE27;HANGUL SYLLABLE BEUH;Lo;0;L;;;;;N;;;;; BE28;HANGUL SYLLABLE BYI;Lo;0;L;;;;;N;;;;; BE29;HANGUL SYLLABLE BYIG;Lo;0;L;;;;;N;;;;; BE2A;HANGUL SYLLABLE BYIGG;Lo;0;L;;;;;N;;;;; BE2B;HANGUL SYLLABLE BYIGS;Lo;0;L;;;;;N;;;;; BE2C;HANGUL SYLLABLE BYIN;Lo;0;L;;;;;N;;;;; BE2D;HANGUL SYLLABLE BYINI;Lo;0;L;;;;;N;;;;; BE2E;HANGUL SYLLABLE BYINH;Lo;0;L;;;;;N;;;;; BE2F;HANGUL SYLLABLE BYID;Lo;0;L;;;;;N;;;;; BE30;HANGUL SYLLABLE BYIL;Lo;0;L;;;;;N;;;;; BE31;HANGUL SYLLABLE BYILG;Lo;0;L;;;;;N;;;;; BE32;HANGUL SYLLABLE BYILM;Lo;0;L;;;;;N;;;;; BE33;HANGUL SYLLABLE BYILB;Lo;0;L;;;;;N;;;;; BE34;HANGUL SYLLABLE BYILS;Lo;0;L;;;;;N;;;;; BE35;HANGUL SYLLABLE BYILT;Lo;0;L;;;;;N;;;;; BE36;HANGUL SYLLABLE BYILP;Lo;0;L;;;;;N;;;;; BE37;HANGUL SYLLABLE BYILH;Lo;0;L;;;;;N;;;;; BE38;HANGUL SYLLABLE BYIM;Lo;0;L;;;;;N;;;;; BE39;HANGUL SYLLABLE BYIB;Lo;0;L;;;;;N;;;;; BE3A;HANGUL SYLLABLE BYIBS;Lo;0;L;;;;;N;;;;; BE3B;HANGUL SYLLABLE BYIS;Lo;0;L;;;;;N;;;;; BE3C;HANGUL SYLLABLE BYISS;Lo;0;L;;;;;N;;;;; BE3D;HANGUL SYLLABLE BYING;Lo;0;L;;;;;N;;;;; BE3E;HANGUL SYLLABLE BYIJ;Lo;0;L;;;;;N;;;;; BE3F;HANGUL SYLLABLE BYIC;Lo;0;L;;;;;N;;;;; BE40;HANGUL SYLLABLE BYIK;Lo;0;L;;;;;N;;;;; BE41;HANGUL SYLLABLE BYIT;Lo;0;L;;;;;N;;;;; BE42;HANGUL SYLLABLE BYIP;Lo;0;L;;;;;N;;;;; BE43;HANGUL SYLLABLE BYIH;Lo;0;L;;;;;N;;;;; BE44;HANGUL SYLLABLE BI;Lo;0;L;;;;;N;;;;; BE45;HANGUL SYLLABLE BIG;Lo;0;L;;;;;N;;;;; BE46;HANGUL SYLLABLE BIGG;Lo;0;L;;;;;N;;;;; BE47;HANGUL SYLLABLE BIGS;Lo;0;L;;;;;N;;;;; BE48;HANGUL SYLLABLE BIN;Lo;0;L;;;;;N;;;;; BE49;HANGUL SYLLABLE BINI;Lo;0;L;;;;;N;;;;; BE4A;HANGUL SYLLABLE BINH;Lo;0;L;;;;;N;;;;; BE4B;HANGUL SYLLABLE BID;Lo;0;L;;;;;N;;;;; BE4C;HANGUL SYLLABLE BIL;Lo;0;L;;;;;N;;;;; BE4D;HANGUL SYLLABLE BILG;Lo;0;L;;;;;N;;;;; BE4E;HANGUL SYLLABLE BILM;Lo;0;L;;;;;N;;;;; BE4F;HANGUL SYLLABLE BILB;Lo;0;L;;;;;N;;;;; BE50;HANGUL SYLLABLE BILS;Lo;0;L;;;;;N;;;;; BE51;HANGUL SYLLABLE BILT;Lo;0;L;;;;;N;;;;; BE52;HANGUL SYLLABLE BILP;Lo;0;L;;;;;N;;;;; BE53;HANGUL SYLLABLE BILH;Lo;0;L;;;;;N;;;;; BE54;HANGUL SYLLABLE BIM;Lo;0;L;;;;;N;;;;; BE55;HANGUL SYLLABLE BIB;Lo;0;L;;;;;N;;;;; BE56;HANGUL SYLLABLE BIBS;Lo;0;L;;;;;N;;;;; BE57;HANGUL SYLLABLE BIS;Lo;0;L;;;;;N;;;;; BE58;HANGUL SYLLABLE BISS;Lo;0;L;;;;;N;;;;; BE59;HANGUL SYLLABLE BING;Lo;0;L;;;;;N;;;;; BE5A;HANGUL SYLLABLE BIJ;Lo;0;L;;;;;N;;;;; BE5B;HANGUL SYLLABLE BIC;Lo;0;L;;;;;N;;;;; BE5C;HANGUL SYLLABLE BIK;Lo;0;L;;;;;N;;;;; BE5D;HANGUL SYLLABLE BIT;Lo;0;L;;;;;N;;;;; BE5E;HANGUL SYLLABLE BIP;Lo;0;L;;;;;N;;;;; BE5F;HANGUL SYLLABLE BIH;Lo;0;L;;;;;N;;;;; BE60;HANGUL SYLLABLE BBA;Lo;0;L;;;;;N;;;;; BE61;HANGUL SYLLABLE BBAG;Lo;0;L;;;;;N;;;;; BE62;HANGUL SYLLABLE BBAGG;Lo;0;L;;;;;N;;;;; BE63;HANGUL SYLLABLE BBAGS;Lo;0;L;;;;;N;;;;; BE64;HANGUL SYLLABLE BBAN;Lo;0;L;;;;;N;;;;; BE65;HANGUL SYLLABLE BBANI;Lo;0;L;;;;;N;;;;; BE66;HANGUL SYLLABLE BBANH;Lo;0;L;;;;;N;;;;; BE67;HANGUL SYLLABLE BBAD;Lo;0;L;;;;;N;;;;; BE68;HANGUL SYLLABLE BBAL;Lo;0;L;;;;;N;;;;; BE69;HANGUL SYLLABLE BBALG;Lo;0;L;;;;;N;;;;; BE6A;HANGUL SYLLABLE BBALM;Lo;0;L;;;;;N;;;;; BE6B;HANGUL SYLLABLE BBALB;Lo;0;L;;;;;N;;;;; BE6C;HANGUL SYLLABLE BBALS;Lo;0;L;;;;;N;;;;; BE6D;HANGUL SYLLABLE BBALT;Lo;0;L;;;;;N;;;;; BE6E;HANGUL SYLLABLE BBALP;Lo;0;L;;;;;N;;;;; BE6F;HANGUL SYLLABLE BBALH;Lo;0;L;;;;;N;;;;; BE70;HANGUL SYLLABLE BBAM;Lo;0;L;;;;;N;;;;; BE71;HANGUL SYLLABLE BBAB;Lo;0;L;;;;;N;;;;; BE72;HANGUL SYLLABLE BBABS;Lo;0;L;;;;;N;;;;; BE73;HANGUL SYLLABLE BBAS;Lo;0;L;;;;;N;;;;; BE74;HANGUL SYLLABLE BBASS;Lo;0;L;;;;;N;;;;; BE75;HANGUL SYLLABLE BBANG;Lo;0;L;;;;;N;;;;; BE76;HANGUL SYLLABLE BBAJ;Lo;0;L;;;;;N;;;;; BE77;HANGUL SYLLABLE BBAC;Lo;0;L;;;;;N;;;;; BE78;HANGUL SYLLABLE BBAK;Lo;0;L;;;;;N;;;;; BE79;HANGUL SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; BE7A;HANGUL SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; BE7B;HANGUL SYLLABLE BBAH;Lo;0;L;;;;;N;;;;; BE7C;HANGUL SYLLABLE BBAE;Lo;0;L;;;;;N;;;;; BE7D;HANGUL SYLLABLE BBAEG;Lo;0;L;;;;;N;;;;; BE7E;HANGUL SYLLABLE BBAEGG;Lo;0;L;;;;;N;;;;; BE7F;HANGUL SYLLABLE BBAEGS;Lo;0;L;;;;;N;;;;; BE80;HANGUL SYLLABLE BBAEN;Lo;0;L;;;;;N;;;;; BE81;HANGUL SYLLABLE BBAENI;Lo;0;L;;;;;N;;;;; BE82;HANGUL SYLLABLE BBAENH;Lo;0;L;;;;;N;;;;; BE83;HANGUL SYLLABLE BBAED;Lo;0;L;;;;;N;;;;; BE84;HANGUL SYLLABLE BBAEL;Lo;0;L;;;;;N;;;;; BE85;HANGUL SYLLABLE BBAELG;Lo;0;L;;;;;N;;;;; BE86;HANGUL SYLLABLE BBAELM;Lo;0;L;;;;;N;;;;; BE87;HANGUL SYLLABLE BBAELB;Lo;0;L;;;;;N;;;;; BE88;HANGUL SYLLABLE BBAELS;Lo;0;L;;;;;N;;;;; BE89;HANGUL SYLLABLE BBAELT;Lo;0;L;;;;;N;;;;; BE8A;HANGUL SYLLABLE BBAELP;Lo;0;L;;;;;N;;;;; BE8B;HANGUL SYLLABLE BBAELH;Lo;0;L;;;;;N;;;;; BE8C;HANGUL SYLLABLE BBAEM;Lo;0;L;;;;;N;;;;; BE8D;HANGUL SYLLABLE BBAEB;Lo;0;L;;;;;N;;;;; BE8E;HANGUL SYLLABLE BBAEBS;Lo;0;L;;;;;N;;;;; BE8F;HANGUL SYLLABLE BBAES;Lo;0;L;;;;;N;;;;; BE90;HANGUL SYLLABLE BBAESS;Lo;0;L;;;;;N;;;;; BE91;HANGUL SYLLABLE BBAENG;Lo;0;L;;;;;N;;;;; BE92;HANGUL SYLLABLE BBAEJ;Lo;0;L;;;;;N;;;;; BE93;HANGUL SYLLABLE BBAEC;Lo;0;L;;;;;N;;;;; BE94;HANGUL SYLLABLE BBAEK;Lo;0;L;;;;;N;;;;; BE95;HANGUL SYLLABLE BBAET;Lo;0;L;;;;;N;;;;; BE96;HANGUL SYLLABLE BBAEP;Lo;0;L;;;;;N;;;;; BE97;HANGUL SYLLABLE BBAEH;Lo;0;L;;;;;N;;;;; BE98;HANGUL SYLLABLE BBYA;Lo;0;L;;;;;N;;;;; BE99;HANGUL SYLLABLE BBYAG;Lo;0;L;;;;;N;;;;; BE9A;HANGUL SYLLABLE BBYAGG;Lo;0;L;;;;;N;;;;; BE9B;HANGUL SYLLABLE BBYAGS;Lo;0;L;;;;;N;;;;; BE9C;HANGUL SYLLABLE BBYAN;Lo;0;L;;;;;N;;;;; BE9D;HANGUL SYLLABLE BBYANI;Lo;0;L;;;;;N;;;;; BE9E;HANGUL SYLLABLE BBYANH;Lo;0;L;;;;;N;;;;; BE9F;HANGUL SYLLABLE BBYAD;Lo;0;L;;;;;N;;;;; BEA0;HANGUL SYLLABLE BBYAL;Lo;0;L;;;;;N;;;;; BEA1;HANGUL SYLLABLE BBYALG;Lo;0;L;;;;;N;;;;; BEA2;HANGUL SYLLABLE BBYALM;Lo;0;L;;;;;N;;;;; BEA3;HANGUL SYLLABLE BBYALB;Lo;0;L;;;;;N;;;;; BEA4;HANGUL SYLLABLE BBYALS;Lo;0;L;;;;;N;;;;; BEA5;HANGUL SYLLABLE BBYALT;Lo;0;L;;;;;N;;;;; BEA6;HANGUL SYLLABLE BBYALP;Lo;0;L;;;;;N;;;;; BEA7;HANGUL SYLLABLE BBYALH;Lo;0;L;;;;;N;;;;; BEA8;HANGUL SYLLABLE BBYAM;Lo;0;L;;;;;N;;;;; BEA9;HANGUL SYLLABLE BBYAB;Lo;0;L;;;;;N;;;;; BEAA;HANGUL SYLLABLE BBYABS;Lo;0;L;;;;;N;;;;; BEAB;HANGUL SYLLABLE BBYAS;Lo;0;L;;;;;N;;;;; BEAC;HANGUL SYLLABLE BBYASS;Lo;0;L;;;;;N;;;;; BEAD;HANGUL SYLLABLE BBYANG;Lo;0;L;;;;;N;;;;; BEAE;HANGUL SYLLABLE BBYAJ;Lo;0;L;;;;;N;;;;; BEAF;HANGUL SYLLABLE BBYAC;Lo;0;L;;;;;N;;;;; BEB0;HANGUL SYLLABLE BBYAK;Lo;0;L;;;;;N;;;;; BEB1;HANGUL SYLLABLE BBYAT;Lo;0;L;;;;;N;;;;; BEB2;HANGUL SYLLABLE BBYAP;Lo;0;L;;;;;N;;;;; BEB3;HANGUL SYLLABLE BBYAH;Lo;0;L;;;;;N;;;;; BEB4;HANGUL SYLLABLE BBYAE;Lo;0;L;;;;;N;;;;; BEB5;HANGUL SYLLABLE BBYAEG;Lo;0;L;;;;;N;;;;; BEB6;HANGUL SYLLABLE BBYAEGG;Lo;0;L;;;;;N;;;;; BEB7;HANGUL SYLLABLE BBYAEGS;Lo;0;L;;;;;N;;;;; BEB8;HANGUL SYLLABLE BBYAEN;Lo;0;L;;;;;N;;;;; BEB9;HANGUL SYLLABLE BBYAENI;Lo;0;L;;;;;N;;;;; BEBA;HANGUL SYLLABLE BBYAENH;Lo;0;L;;;;;N;;;;; BEBB;HANGUL SYLLABLE BBYAED;Lo;0;L;;;;;N;;;;; BEBC;HANGUL SYLLABLE BBYAEL;Lo;0;L;;;;;N;;;;; BEBD;HANGUL SYLLABLE BBYAELG;Lo;0;L;;;;;N;;;;; BEBE;HANGUL SYLLABLE BBYAELM;Lo;0;L;;;;;N;;;;; BEBF;HANGUL SYLLABLE BBYAELB;Lo;0;L;;;;;N;;;;; BEC0;HANGUL SYLLABLE BBYAELS;Lo;0;L;;;;;N;;;;; BEC1;HANGUL SYLLABLE BBYAELT;Lo;0;L;;;;;N;;;;; BEC2;HANGUL SYLLABLE BBYAELP;Lo;0;L;;;;;N;;;;; BEC3;HANGUL SYLLABLE BBYAELH;Lo;0;L;;;;;N;;;;; BEC4;HANGUL SYLLABLE BBYAEM;Lo;0;L;;;;;N;;;;; BEC5;HANGUL SYLLABLE BBYAEB;Lo;0;L;;;;;N;;;;; BEC6;HANGUL SYLLABLE BBYAEBS;Lo;0;L;;;;;N;;;;; BEC7;HANGUL SYLLABLE BBYAES;Lo;0;L;;;;;N;;;;; BEC8;HANGUL SYLLABLE BBYAESS;Lo;0;L;;;;;N;;;;; BEC9;HANGUL SYLLABLE BBYAENG;Lo;0;L;;;;;N;;;;; BECA;HANGUL SYLLABLE BBYAEJ;Lo;0;L;;;;;N;;;;; BECB;HANGUL SYLLABLE BBYAEC;Lo;0;L;;;;;N;;;;; BECC;HANGUL SYLLABLE BBYAEK;Lo;0;L;;;;;N;;;;; BECD;HANGUL SYLLABLE BBYAET;Lo;0;L;;;;;N;;;;; BECE;HANGUL SYLLABLE BBYAEP;Lo;0;L;;;;;N;;;;; BECF;HANGUL SYLLABLE BBYAEH;Lo;0;L;;;;;N;;;;; BED0;HANGUL SYLLABLE BBEO;Lo;0;L;;;;;N;;;;; BED1;HANGUL SYLLABLE BBEOG;Lo;0;L;;;;;N;;;;; BED2;HANGUL SYLLABLE BBEOGG;Lo;0;L;;;;;N;;;;; BED3;HANGUL SYLLABLE BBEOGS;Lo;0;L;;;;;N;;;;; BED4;HANGUL SYLLABLE BBEON;Lo;0;L;;;;;N;;;;; BED5;HANGUL SYLLABLE BBEONI;Lo;0;L;;;;;N;;;;; BED6;HANGUL SYLLABLE BBEONH;Lo;0;L;;;;;N;;;;; BED7;HANGUL SYLLABLE BBEOD;Lo;0;L;;;;;N;;;;; BED8;HANGUL SYLLABLE BBEOL;Lo;0;L;;;;;N;;;;; BED9;HANGUL SYLLABLE BBEOLG;Lo;0;L;;;;;N;;;;; BEDA;HANGUL SYLLABLE BBEOLM;Lo;0;L;;;;;N;;;;; BEDB;HANGUL SYLLABLE BBEOLB;Lo;0;L;;;;;N;;;;; BEDC;HANGUL SYLLABLE BBEOLS;Lo;0;L;;;;;N;;;;; BEDD;HANGUL SYLLABLE BBEOLT;Lo;0;L;;;;;N;;;;; BEDE;HANGUL SYLLABLE BBEOLP;Lo;0;L;;;;;N;;;;; BEDF;HANGUL SYLLABLE BBEOLH;Lo;0;L;;;;;N;;;;; BEE0;HANGUL SYLLABLE BBEOM;Lo;0;L;;;;;N;;;;; BEE1;HANGUL SYLLABLE BBEOB;Lo;0;L;;;;;N;;;;; BEE2;HANGUL SYLLABLE BBEOBS;Lo;0;L;;;;;N;;;;; BEE3;HANGUL SYLLABLE BBEOS;Lo;0;L;;;;;N;;;;; BEE4;HANGUL SYLLABLE BBEOSS;Lo;0;L;;;;;N;;;;; BEE5;HANGUL SYLLABLE BBEONG;Lo;0;L;;;;;N;;;;; BEE6;HANGUL SYLLABLE BBEOJ;Lo;0;L;;;;;N;;;;; BEE7;HANGUL SYLLABLE BBEOC;Lo;0;L;;;;;N;;;;; BEE8;HANGUL SYLLABLE BBEOK;Lo;0;L;;;;;N;;;;; BEE9;HANGUL SYLLABLE BBEOT;Lo;0;L;;;;;N;;;;; BEEA;HANGUL SYLLABLE BBEOP;Lo;0;L;;;;;N;;;;; BEEB;HANGUL SYLLABLE BBEOH;Lo;0;L;;;;;N;;;;; BEEC;HANGUL SYLLABLE BBE;Lo;0;L;;;;;N;;;;; BEED;HANGUL SYLLABLE BBEG;Lo;0;L;;;;;N;;;;; BEEE;HANGUL SYLLABLE BBEGG;Lo;0;L;;;;;N;;;;; BEEF;HANGUL SYLLABLE BBEGS;Lo;0;L;;;;;N;;;;; BEF0;HANGUL SYLLABLE BBEN;Lo;0;L;;;;;N;;;;; BEF1;HANGUL SYLLABLE BBENI;Lo;0;L;;;;;N;;;;; BEF2;HANGUL SYLLABLE BBENH;Lo;0;L;;;;;N;;;;; BEF3;HANGUL SYLLABLE BBED;Lo;0;L;;;;;N;;;;; BEF4;HANGUL SYLLABLE BBEL;Lo;0;L;;;;;N;;;;; BEF5;HANGUL SYLLABLE BBELG;Lo;0;L;;;;;N;;;;; BEF6;HANGUL SYLLABLE BBELM;Lo;0;L;;;;;N;;;;; BEF7;HANGUL SYLLABLE BBELB;Lo;0;L;;;;;N;;;;; BEF8;HANGUL SYLLABLE BBELS;Lo;0;L;;;;;N;;;;; BEF9;HANGUL SYLLABLE BBELT;Lo;0;L;;;;;N;;;;; BEFA;HANGUL SYLLABLE BBELP;Lo;0;L;;;;;N;;;;; BEFB;HANGUL SYLLABLE BBELH;Lo;0;L;;;;;N;;;;; BEFC;HANGUL SYLLABLE BBEM;Lo;0;L;;;;;N;;;;; BEFD;HANGUL SYLLABLE BBEB;Lo;0;L;;;;;N;;;;; BEFE;HANGUL SYLLABLE BBEBS;Lo;0;L;;;;;N;;;;; BEFF;HANGUL SYLLABLE BBES;Lo;0;L;;;;;N;;;;; BF00;HANGUL SYLLABLE BBESS;Lo;0;L;;;;;N;;;;; BF01;HANGUL SYLLABLE BBENG;Lo;0;L;;;;;N;;;;; BF02;HANGUL SYLLABLE BBEJ;Lo;0;L;;;;;N;;;;; BF03;HANGUL SYLLABLE BBEC;Lo;0;L;;;;;N;;;;; BF04;HANGUL SYLLABLE BBEK;Lo;0;L;;;;;N;;;;; BF05;HANGUL SYLLABLE BBET;Lo;0;L;;;;;N;;;;; BF06;HANGUL SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; BF07;HANGUL SYLLABLE BBEH;Lo;0;L;;;;;N;;;;; BF08;HANGUL SYLLABLE BBYEO;Lo;0;L;;;;;N;;;;; BF09;HANGUL SYLLABLE BBYEOG;Lo;0;L;;;;;N;;;;; BF0A;HANGUL SYLLABLE BBYEOGG;Lo;0;L;;;;;N;;;;; BF0B;HANGUL SYLLABLE BBYEOGS;Lo;0;L;;;;;N;;;;; BF0C;HANGUL SYLLABLE BBYEON;Lo;0;L;;;;;N;;;;; BF0D;HANGUL SYLLABLE BBYEONI;Lo;0;L;;;;;N;;;;; BF0E;HANGUL SYLLABLE BBYEONH;Lo;0;L;;;;;N;;;;; BF0F;HANGUL SYLLABLE BBYEOD;Lo;0;L;;;;;N;;;;; BF10;HANGUL SYLLABLE BBYEOL;Lo;0;L;;;;;N;;;;; BF11;HANGUL SYLLABLE BBYEOLG;Lo;0;L;;;;;N;;;;; BF12;HANGUL SYLLABLE BBYEOLM;Lo;0;L;;;;;N;;;;; BF13;HANGUL SYLLABLE BBYEOLB;Lo;0;L;;;;;N;;;;; BF14;HANGUL SYLLABLE BBYEOLS;Lo;0;L;;;;;N;;;;; BF15;HANGUL SYLLABLE BBYEOLT;Lo;0;L;;;;;N;;;;; BF16;HANGUL SYLLABLE BBYEOLP;Lo;0;L;;;;;N;;;;; BF17;HANGUL SYLLABLE BBYEOLH;Lo;0;L;;;;;N;;;;; BF18;HANGUL SYLLABLE BBYEOM;Lo;0;L;;;;;N;;;;; BF19;HANGUL SYLLABLE BBYEOB;Lo;0;L;;;;;N;;;;; BF1A;HANGUL SYLLABLE BBYEOBS;Lo;0;L;;;;;N;;;;; BF1B;HANGUL SYLLABLE BBYEOS;Lo;0;L;;;;;N;;;;; BF1C;HANGUL SYLLABLE BBYEOSS;Lo;0;L;;;;;N;;;;; BF1D;HANGUL SYLLABLE BBYEONG;Lo;0;L;;;;;N;;;;; BF1E;HANGUL SYLLABLE BBYEOJ;Lo;0;L;;;;;N;;;;; BF1F;HANGUL SYLLABLE BBYEOC;Lo;0;L;;;;;N;;;;; BF20;HANGUL SYLLABLE BBYEOK;Lo;0;L;;;;;N;;;;; BF21;HANGUL SYLLABLE BBYEOT;Lo;0;L;;;;;N;;;;; BF22;HANGUL SYLLABLE BBYEOP;Lo;0;L;;;;;N;;;;; BF23;HANGUL SYLLABLE BBYEOH;Lo;0;L;;;;;N;;;;; BF24;HANGUL SYLLABLE BBYE;Lo;0;L;;;;;N;;;;; BF25;HANGUL SYLLABLE BBYEG;Lo;0;L;;;;;N;;;;; BF26;HANGUL SYLLABLE BBYEGG;Lo;0;L;;;;;N;;;;; BF27;HANGUL SYLLABLE BBYEGS;Lo;0;L;;;;;N;;;;; BF28;HANGUL SYLLABLE BBYEN;Lo;0;L;;;;;N;;;;; BF29;HANGUL SYLLABLE BBYENI;Lo;0;L;;;;;N;;;;; BF2A;HANGUL SYLLABLE BBYENH;Lo;0;L;;;;;N;;;;; BF2B;HANGUL SYLLABLE BBYED;Lo;0;L;;;;;N;;;;; BF2C;HANGUL SYLLABLE BBYEL;Lo;0;L;;;;;N;;;;; BF2D;HANGUL SYLLABLE BBYELG;Lo;0;L;;;;;N;;;;; BF2E;HANGUL SYLLABLE BBYELM;Lo;0;L;;;;;N;;;;; BF2F;HANGUL SYLLABLE BBYELB;Lo;0;L;;;;;N;;;;; BF30;HANGUL SYLLABLE BBYELS;Lo;0;L;;;;;N;;;;; BF31;HANGUL SYLLABLE BBYELT;Lo;0;L;;;;;N;;;;; BF32;HANGUL SYLLABLE BBYELP;Lo;0;L;;;;;N;;;;; BF33;HANGUL SYLLABLE BBYELH;Lo;0;L;;;;;N;;;;; BF34;HANGUL SYLLABLE BBYEM;Lo;0;L;;;;;N;;;;; BF35;HANGUL SYLLABLE BBYEB;Lo;0;L;;;;;N;;;;; BF36;HANGUL SYLLABLE BBYEBS;Lo;0;L;;;;;N;;;;; BF37;HANGUL SYLLABLE BBYES;Lo;0;L;;;;;N;;;;; BF38;HANGUL SYLLABLE BBYESS;Lo;0;L;;;;;N;;;;; BF39;HANGUL SYLLABLE BBYENG;Lo;0;L;;;;;N;;;;; BF3A;HANGUL SYLLABLE BBYEJ;Lo;0;L;;;;;N;;;;; BF3B;HANGUL SYLLABLE BBYEC;Lo;0;L;;;;;N;;;;; BF3C;HANGUL SYLLABLE BBYEK;Lo;0;L;;;;;N;;;;; BF3D;HANGUL SYLLABLE BBYET;Lo;0;L;;;;;N;;;;; BF3E;HANGUL SYLLABLE BBYEP;Lo;0;L;;;;;N;;;;; BF3F;HANGUL SYLLABLE BBYEH;Lo;0;L;;;;;N;;;;; BF40;HANGUL SYLLABLE BBO;Lo;0;L;;;;;N;;;;; BF41;HANGUL SYLLABLE BBOG;Lo;0;L;;;;;N;;;;; BF42;HANGUL SYLLABLE BBOGG;Lo;0;L;;;;;N;;;;; BF43;HANGUL SYLLABLE BBOGS;Lo;0;L;;;;;N;;;;; BF44;HANGUL SYLLABLE BBON;Lo;0;L;;;;;N;;;;; BF45;HANGUL SYLLABLE BBONI;Lo;0;L;;;;;N;;;;; BF46;HANGUL SYLLABLE BBONH;Lo;0;L;;;;;N;;;;; BF47;HANGUL SYLLABLE BBOD;Lo;0;L;;;;;N;;;;; BF48;HANGUL SYLLABLE BBOL;Lo;0;L;;;;;N;;;;; BF49;HANGUL SYLLABLE BBOLG;Lo;0;L;;;;;N;;;;; BF4A;HANGUL SYLLABLE BBOLM;Lo;0;L;;;;;N;;;;; BF4B;HANGUL SYLLABLE BBOLB;Lo;0;L;;;;;N;;;;; BF4C;HANGUL SYLLABLE BBOLS;Lo;0;L;;;;;N;;;;; BF4D;HANGUL SYLLABLE BBOLT;Lo;0;L;;;;;N;;;;; BF4E;HANGUL SYLLABLE BBOLP;Lo;0;L;;;;;N;;;;; BF4F;HANGUL SYLLABLE BBOLH;Lo;0;L;;;;;N;;;;; BF50;HANGUL SYLLABLE BBOM;Lo;0;L;;;;;N;;;;; BF51;HANGUL SYLLABLE BBOB;Lo;0;L;;;;;N;;;;; BF52;HANGUL SYLLABLE BBOBS;Lo;0;L;;;;;N;;;;; BF53;HANGUL SYLLABLE BBOS;Lo;0;L;;;;;N;;;;; BF54;HANGUL SYLLABLE BBOSS;Lo;0;L;;;;;N;;;;; BF55;HANGUL SYLLABLE BBONG;Lo;0;L;;;;;N;;;;; BF56;HANGUL SYLLABLE BBOJ;Lo;0;L;;;;;N;;;;; BF57;HANGUL SYLLABLE BBOC;Lo;0;L;;;;;N;;;;; BF58;HANGUL SYLLABLE BBOK;Lo;0;L;;;;;N;;;;; BF59;HANGUL SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; BF5A;HANGUL SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; BF5B;HANGUL SYLLABLE BBOH;Lo;0;L;;;;;N;;;;; BF5C;HANGUL SYLLABLE BBWA;Lo;0;L;;;;;N;;;;; BF5D;HANGUL SYLLABLE BBWAG;Lo;0;L;;;;;N;;;;; BF5E;HANGUL SYLLABLE BBWAGG;Lo;0;L;;;;;N;;;;; BF5F;HANGUL SYLLABLE BBWAGS;Lo;0;L;;;;;N;;;;; BF60;HANGUL SYLLABLE BBWAN;Lo;0;L;;;;;N;;;;; BF61;HANGUL SYLLABLE BBWANI;Lo;0;L;;;;;N;;;;; BF62;HANGUL SYLLABLE BBWANH;Lo;0;L;;;;;N;;;;; BF63;HANGUL SYLLABLE BBWAD;Lo;0;L;;;;;N;;;;; BF64;HANGUL SYLLABLE BBWAL;Lo;0;L;;;;;N;;;;; BF65;HANGUL SYLLABLE BBWALG;Lo;0;L;;;;;N;;;;; BF66;HANGUL SYLLABLE BBWALM;Lo;0;L;;;;;N;;;;; BF67;HANGUL SYLLABLE BBWALB;Lo;0;L;;;;;N;;;;; BF68;HANGUL SYLLABLE BBWALS;Lo;0;L;;;;;N;;;;; BF69;HANGUL SYLLABLE BBWALT;Lo;0;L;;;;;N;;;;; BF6A;HANGUL SYLLABLE BBWALP;Lo;0;L;;;;;N;;;;; BF6B;HANGUL SYLLABLE BBWALH;Lo;0;L;;;;;N;;;;; BF6C;HANGUL SYLLABLE BBWAM;Lo;0;L;;;;;N;;;;; BF6D;HANGUL SYLLABLE BBWAB;Lo;0;L;;;;;N;;;;; BF6E;HANGUL SYLLABLE BBWABS;Lo;0;L;;;;;N;;;;; BF6F;HANGUL SYLLABLE BBWAS;Lo;0;L;;;;;N;;;;; BF70;HANGUL SYLLABLE BBWASS;Lo;0;L;;;;;N;;;;; BF71;HANGUL SYLLABLE BBWANG;Lo;0;L;;;;;N;;;;; BF72;HANGUL SYLLABLE BBWAJ;Lo;0;L;;;;;N;;;;; BF73;HANGUL SYLLABLE BBWAC;Lo;0;L;;;;;N;;;;; BF74;HANGUL SYLLABLE BBWAK;Lo;0;L;;;;;N;;;;; BF75;HANGUL SYLLABLE BBWAT;Lo;0;L;;;;;N;;;;; BF76;HANGUL SYLLABLE BBWAP;Lo;0;L;;;;;N;;;;; BF77;HANGUL SYLLABLE BBWAH;Lo;0;L;;;;;N;;;;; BF78;HANGUL SYLLABLE BBWAE;Lo;0;L;;;;;N;;;;; BF79;HANGUL SYLLABLE BBWAEG;Lo;0;L;;;;;N;;;;; BF7A;HANGUL SYLLABLE BBWAEGG;Lo;0;L;;;;;N;;;;; BF7B;HANGUL SYLLABLE BBWAEGS;Lo;0;L;;;;;N;;;;; BF7C;HANGUL SYLLABLE BBWAEN;Lo;0;L;;;;;N;;;;; BF7D;HANGUL SYLLABLE BBWAENI;Lo;0;L;;;;;N;;;;; BF7E;HANGUL SYLLABLE BBWAENH;Lo;0;L;;;;;N;;;;; BF7F;HANGUL SYLLABLE BBWAED;Lo;0;L;;;;;N;;;;; BF80;HANGUL SYLLABLE BBWAEL;Lo;0;L;;;;;N;;;;; BF81;HANGUL SYLLABLE BBWAELG;Lo;0;L;;;;;N;;;;; BF82;HANGUL SYLLABLE BBWAELM;Lo;0;L;;;;;N;;;;; BF83;HANGUL SYLLABLE BBWAELB;Lo;0;L;;;;;N;;;;; BF84;HANGUL SYLLABLE BBWAELS;Lo;0;L;;;;;N;;;;; BF85;HANGUL SYLLABLE BBWAELT;Lo;0;L;;;;;N;;;;; BF86;HANGUL SYLLABLE BBWAELP;Lo;0;L;;;;;N;;;;; BF87;HANGUL SYLLABLE BBWAELH;Lo;0;L;;;;;N;;;;; BF88;HANGUL SYLLABLE BBWAEM;Lo;0;L;;;;;N;;;;; BF89;HANGUL SYLLABLE BBWAEB;Lo;0;L;;;;;N;;;;; BF8A;HANGUL SYLLABLE BBWAEBS;Lo;0;L;;;;;N;;;;; BF8B;HANGUL SYLLABLE BBWAES;Lo;0;L;;;;;N;;;;; BF8C;HANGUL SYLLABLE BBWAESS;Lo;0;L;;;;;N;;;;; BF8D;HANGUL SYLLABLE BBWAENG;Lo;0;L;;;;;N;;;;; BF8E;HANGUL SYLLABLE BBWAEJ;Lo;0;L;;;;;N;;;;; BF8F;HANGUL SYLLABLE BBWAEC;Lo;0;L;;;;;N;;;;; BF90;HANGUL SYLLABLE BBWAEK;Lo;0;L;;;;;N;;;;; BF91;HANGUL SYLLABLE BBWAET;Lo;0;L;;;;;N;;;;; BF92;HANGUL SYLLABLE BBWAEP;Lo;0;L;;;;;N;;;;; BF93;HANGUL SYLLABLE BBWAEH;Lo;0;L;;;;;N;;;;; BF94;HANGUL SYLLABLE BBOE;Lo;0;L;;;;;N;;;;; BF95;HANGUL SYLLABLE BBOEG;Lo;0;L;;;;;N;;;;; BF96;HANGUL SYLLABLE BBOEGG;Lo;0;L;;;;;N;;;;; BF97;HANGUL SYLLABLE BBOEGS;Lo;0;L;;;;;N;;;;; BF98;HANGUL SYLLABLE BBOEN;Lo;0;L;;;;;N;;;;; BF99;HANGUL SYLLABLE BBOENI;Lo;0;L;;;;;N;;;;; BF9A;HANGUL SYLLABLE BBOENH;Lo;0;L;;;;;N;;;;; BF9B;HANGUL SYLLABLE BBOED;Lo;0;L;;;;;N;;;;; BF9C;HANGUL SYLLABLE BBOEL;Lo;0;L;;;;;N;;;;; BF9D;HANGUL SYLLABLE BBOELG;Lo;0;L;;;;;N;;;;; BF9E;HANGUL SYLLABLE BBOELM;Lo;0;L;;;;;N;;;;; BF9F;HANGUL SYLLABLE BBOELB;Lo;0;L;;;;;N;;;;; BFA0;HANGUL SYLLABLE BBOELS;Lo;0;L;;;;;N;;;;; BFA1;HANGUL SYLLABLE BBOELT;Lo;0;L;;;;;N;;;;; BFA2;HANGUL SYLLABLE BBOELP;Lo;0;L;;;;;N;;;;; BFA3;HANGUL SYLLABLE BBOELH;Lo;0;L;;;;;N;;;;; BFA4;HANGUL SYLLABLE BBOEM;Lo;0;L;;;;;N;;;;; BFA5;HANGUL SYLLABLE BBOEB;Lo;0;L;;;;;N;;;;; BFA6;HANGUL SYLLABLE BBOEBS;Lo;0;L;;;;;N;;;;; BFA7;HANGUL SYLLABLE BBOES;Lo;0;L;;;;;N;;;;; BFA8;HANGUL SYLLABLE BBOESS;Lo;0;L;;;;;N;;;;; BFA9;HANGUL SYLLABLE BBOENG;Lo;0;L;;;;;N;;;;; BFAA;HANGUL SYLLABLE BBOEJ;Lo;0;L;;;;;N;;;;; BFAB;HANGUL SYLLABLE BBOEC;Lo;0;L;;;;;N;;;;; BFAC;HANGUL SYLLABLE BBOEK;Lo;0;L;;;;;N;;;;; BFAD;HANGUL SYLLABLE BBOET;Lo;0;L;;;;;N;;;;; BFAE;HANGUL SYLLABLE BBOEP;Lo;0;L;;;;;N;;;;; BFAF;HANGUL SYLLABLE BBOEH;Lo;0;L;;;;;N;;;;; BFB0;HANGUL SYLLABLE BBYO;Lo;0;L;;;;;N;;;;; BFB1;HANGUL SYLLABLE BBYOG;Lo;0;L;;;;;N;;;;; BFB2;HANGUL SYLLABLE BBYOGG;Lo;0;L;;;;;N;;;;; BFB3;HANGUL SYLLABLE BBYOGS;Lo;0;L;;;;;N;;;;; BFB4;HANGUL SYLLABLE BBYON;Lo;0;L;;;;;N;;;;; BFB5;HANGUL SYLLABLE BBYONI;Lo;0;L;;;;;N;;;;; BFB6;HANGUL SYLLABLE BBYONH;Lo;0;L;;;;;N;;;;; BFB7;HANGUL SYLLABLE BBYOD;Lo;0;L;;;;;N;;;;; BFB8;HANGUL SYLLABLE BBYOL;Lo;0;L;;;;;N;;;;; BFB9;HANGUL SYLLABLE BBYOLG;Lo;0;L;;;;;N;;;;; BFBA;HANGUL SYLLABLE BBYOLM;Lo;0;L;;;;;N;;;;; BFBB;HANGUL SYLLABLE BBYOLB;Lo;0;L;;;;;N;;;;; BFBC;HANGUL SYLLABLE BBYOLS;Lo;0;L;;;;;N;;;;; BFBD;HANGUL SYLLABLE BBYOLT;Lo;0;L;;;;;N;;;;; BFBE;HANGUL SYLLABLE BBYOLP;Lo;0;L;;;;;N;;;;; BFBF;HANGUL SYLLABLE BBYOLH;Lo;0;L;;;;;N;;;;; BFC0;HANGUL SYLLABLE BBYOM;Lo;0;L;;;;;N;;;;; BFC1;HANGUL SYLLABLE BBYOB;Lo;0;L;;;;;N;;;;; BFC2;HANGUL SYLLABLE BBYOBS;Lo;0;L;;;;;N;;;;; BFC3;HANGUL SYLLABLE BBYOS;Lo;0;L;;;;;N;;;;; BFC4;HANGUL SYLLABLE BBYOSS;Lo;0;L;;;;;N;;;;; BFC5;HANGUL SYLLABLE BBYONG;Lo;0;L;;;;;N;;;;; BFC6;HANGUL SYLLABLE BBYOJ;Lo;0;L;;;;;N;;;;; BFC7;HANGUL SYLLABLE BBYOC;Lo;0;L;;;;;N;;;;; BFC8;HANGUL SYLLABLE BBYOK;Lo;0;L;;;;;N;;;;; BFC9;HANGUL SYLLABLE BBYOT;Lo;0;L;;;;;N;;;;; BFCA;HANGUL SYLLABLE BBYOP;Lo;0;L;;;;;N;;;;; BFCB;HANGUL SYLLABLE BBYOH;Lo;0;L;;;;;N;;;;; BFCC;HANGUL SYLLABLE BBU;Lo;0;L;;;;;N;;;;; BFCD;HANGUL SYLLABLE BBUG;Lo;0;L;;;;;N;;;;; BFCE;HANGUL SYLLABLE BBUGG;Lo;0;L;;;;;N;;;;; BFCF;HANGUL SYLLABLE BBUGS;Lo;0;L;;;;;N;;;;; BFD0;HANGUL SYLLABLE BBUN;Lo;0;L;;;;;N;;;;; BFD1;HANGUL SYLLABLE BBUNI;Lo;0;L;;;;;N;;;;; BFD2;HANGUL SYLLABLE BBUNH;Lo;0;L;;;;;N;;;;; BFD3;HANGUL SYLLABLE BBUD;Lo;0;L;;;;;N;;;;; BFD4;HANGUL SYLLABLE BBUL;Lo;0;L;;;;;N;;;;; BFD5;HANGUL SYLLABLE BBULG;Lo;0;L;;;;;N;;;;; BFD6;HANGUL SYLLABLE BBULM;Lo;0;L;;;;;N;;;;; BFD7;HANGUL SYLLABLE BBULB;Lo;0;L;;;;;N;;;;; BFD8;HANGUL SYLLABLE BBULS;Lo;0;L;;;;;N;;;;; BFD9;HANGUL SYLLABLE BBULT;Lo;0;L;;;;;N;;;;; BFDA;HANGUL SYLLABLE BBULP;Lo;0;L;;;;;N;;;;; BFDB;HANGUL SYLLABLE BBULH;Lo;0;L;;;;;N;;;;; BFDC;HANGUL SYLLABLE BBUM;Lo;0;L;;;;;N;;;;; BFDD;HANGUL SYLLABLE BBUB;Lo;0;L;;;;;N;;;;; BFDE;HANGUL SYLLABLE BBUBS;Lo;0;L;;;;;N;;;;; BFDF;HANGUL SYLLABLE BBUS;Lo;0;L;;;;;N;;;;; BFE0;HANGUL SYLLABLE BBUSS;Lo;0;L;;;;;N;;;;; BFE1;HANGUL SYLLABLE BBUNG;Lo;0;L;;;;;N;;;;; BFE2;HANGUL SYLLABLE BBUJ;Lo;0;L;;;;;N;;;;; BFE3;HANGUL SYLLABLE BBUC;Lo;0;L;;;;;N;;;;; BFE4;HANGUL SYLLABLE BBUK;Lo;0;L;;;;;N;;;;; BFE5;HANGUL SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; BFE6;HANGUL SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; BFE7;HANGUL SYLLABLE BBUH;Lo;0;L;;;;;N;;;;; BFE8;HANGUL SYLLABLE BBWEO;Lo;0;L;;;;;N;;;;; BFE9;HANGUL SYLLABLE BBWEOG;Lo;0;L;;;;;N;;;;; BFEA;HANGUL SYLLABLE BBWEOGG;Lo;0;L;;;;;N;;;;; BFEB;HANGUL SYLLABLE BBWEOGS;Lo;0;L;;;;;N;;;;; BFEC;HANGUL SYLLABLE BBWEON;Lo;0;L;;;;;N;;;;; BFED;HANGUL SYLLABLE BBWEONI;Lo;0;L;;;;;N;;;;; BFEE;HANGUL SYLLABLE BBWEONH;Lo;0;L;;;;;N;;;;; BFEF;HANGUL SYLLABLE BBWEOD;Lo;0;L;;;;;N;;;;; BFF0;HANGUL SYLLABLE BBWEOL;Lo;0;L;;;;;N;;;;; BFF1;HANGUL SYLLABLE BBWEOLG;Lo;0;L;;;;;N;;;;; BFF2;HANGUL SYLLABLE BBWEOLM;Lo;0;L;;;;;N;;;;; BFF3;HANGUL SYLLABLE BBWEOLB;Lo;0;L;;;;;N;;;;; BFF4;HANGUL SYLLABLE BBWEOLS;Lo;0;L;;;;;N;;;;; BFF5;HANGUL SYLLABLE BBWEOLT;Lo;0;L;;;;;N;;;;; BFF6;HANGUL SYLLABLE BBWEOLP;Lo;0;L;;;;;N;;;;; BFF7;HANGUL SYLLABLE BBWEOLH;Lo;0;L;;;;;N;;;;; BFF8;HANGUL SYLLABLE BBWEOM;Lo;0;L;;;;;N;;;;; BFF9;HANGUL SYLLABLE BBWEOB;Lo;0;L;;;;;N;;;;; BFFA;HANGUL SYLLABLE BBWEOBS;Lo;0;L;;;;;N;;;;; BFFB;HANGUL SYLLABLE BBWEOS;Lo;0;L;;;;;N;;;;; BFFC;HANGUL SYLLABLE BBWEOSS;Lo;0;L;;;;;N;;;;; BFFD;HANGUL SYLLABLE BBWEONG;Lo;0;L;;;;;N;;;;; BFFE;HANGUL SYLLABLE BBWEOJ;Lo;0;L;;;;;N;;;;; BFFF;HANGUL SYLLABLE BBWEOC;Lo;0;L;;;;;N;;;;; C000;HANGUL SYLLABLE BBWEOK;Lo;0;L;;;;;N;;;;; C001;HANGUL SYLLABLE BBWEOT;Lo;0;L;;;;;N;;;;; C002;HANGUL SYLLABLE BBWEOP;Lo;0;L;;;;;N;;;;; C003;HANGUL SYLLABLE BBWEOH;Lo;0;L;;;;;N;;;;; C004;HANGUL SYLLABLE BBWE;Lo;0;L;;;;;N;;;;; C005;HANGUL SYLLABLE BBWEG;Lo;0;L;;;;;N;;;;; C006;HANGUL SYLLABLE BBWEGG;Lo;0;L;;;;;N;;;;; C007;HANGUL SYLLABLE BBWEGS;Lo;0;L;;;;;N;;;;; C008;HANGUL SYLLABLE BBWEN;Lo;0;L;;;;;N;;;;; C009;HANGUL SYLLABLE BBWENI;Lo;0;L;;;;;N;;;;; C00A;HANGUL SYLLABLE BBWENH;Lo;0;L;;;;;N;;;;; C00B;HANGUL SYLLABLE BBWED;Lo;0;L;;;;;N;;;;; C00C;HANGUL SYLLABLE BBWEL;Lo;0;L;;;;;N;;;;; C00D;HANGUL SYLLABLE BBWELG;Lo;0;L;;;;;N;;;;; C00E;HANGUL SYLLABLE BBWELM;Lo;0;L;;;;;N;;;;; C00F;HANGUL SYLLABLE BBWELB;Lo;0;L;;;;;N;;;;; C010;HANGUL SYLLABLE BBWELS;Lo;0;L;;;;;N;;;;; C011;HANGUL SYLLABLE BBWELT;Lo;0;L;;;;;N;;;;; C012;HANGUL SYLLABLE BBWELP;Lo;0;L;;;;;N;;;;; C013;HANGUL SYLLABLE BBWELH;Lo;0;L;;;;;N;;;;; C014;HANGUL SYLLABLE BBWEM;Lo;0;L;;;;;N;;;;; C015;HANGUL SYLLABLE BBWEB;Lo;0;L;;;;;N;;;;; C016;HANGUL SYLLABLE BBWEBS;Lo;0;L;;;;;N;;;;; C017;HANGUL SYLLABLE BBWES;Lo;0;L;;;;;N;;;;; C018;HANGUL SYLLABLE BBWESS;Lo;0;L;;;;;N;;;;; C019;HANGUL SYLLABLE BBWENG;Lo;0;L;;;;;N;;;;; C01A;HANGUL SYLLABLE BBWEJ;Lo;0;L;;;;;N;;;;; C01B;HANGUL SYLLABLE BBWEC;Lo;0;L;;;;;N;;;;; C01C;HANGUL SYLLABLE BBWEK;Lo;0;L;;;;;N;;;;; C01D;HANGUL SYLLABLE BBWET;Lo;0;L;;;;;N;;;;; C01E;HANGUL SYLLABLE BBWEP;Lo;0;L;;;;;N;;;;; C01F;HANGUL SYLLABLE BBWEH;Lo;0;L;;;;;N;;;;; C020;HANGUL SYLLABLE BBWI;Lo;0;L;;;;;N;;;;; C021;HANGUL SYLLABLE BBWIG;Lo;0;L;;;;;N;;;;; C022;HANGUL SYLLABLE BBWIGG;Lo;0;L;;;;;N;;;;; C023;HANGUL SYLLABLE BBWIGS;Lo;0;L;;;;;N;;;;; C024;HANGUL SYLLABLE BBWIN;Lo;0;L;;;;;N;;;;; C025;HANGUL SYLLABLE BBWINI;Lo;0;L;;;;;N;;;;; C026;HANGUL SYLLABLE BBWINH;Lo;0;L;;;;;N;;;;; C027;HANGUL SYLLABLE BBWID;Lo;0;L;;;;;N;;;;; C028;HANGUL SYLLABLE BBWIL;Lo;0;L;;;;;N;;;;; C029;HANGUL SYLLABLE BBWILG;Lo;0;L;;;;;N;;;;; C02A;HANGUL SYLLABLE BBWILM;Lo;0;L;;;;;N;;;;; C02B;HANGUL SYLLABLE BBWILB;Lo;0;L;;;;;N;;;;; C02C;HANGUL SYLLABLE BBWILS;Lo;0;L;;;;;N;;;;; C02D;HANGUL SYLLABLE BBWILT;Lo;0;L;;;;;N;;;;; C02E;HANGUL SYLLABLE BBWILP;Lo;0;L;;;;;N;;;;; C02F;HANGUL SYLLABLE BBWILH;Lo;0;L;;;;;N;;;;; C030;HANGUL SYLLABLE BBWIM;Lo;0;L;;;;;N;;;;; C031;HANGUL SYLLABLE BBWIB;Lo;0;L;;;;;N;;;;; C032;HANGUL SYLLABLE BBWIBS;Lo;0;L;;;;;N;;;;; C033;HANGUL SYLLABLE BBWIS;Lo;0;L;;;;;N;;;;; C034;HANGUL SYLLABLE BBWISS;Lo;0;L;;;;;N;;;;; C035;HANGUL SYLLABLE BBWING;Lo;0;L;;;;;N;;;;; C036;HANGUL SYLLABLE BBWIJ;Lo;0;L;;;;;N;;;;; C037;HANGUL SYLLABLE BBWIC;Lo;0;L;;;;;N;;;;; C038;HANGUL SYLLABLE BBWIK;Lo;0;L;;;;;N;;;;; C039;HANGUL SYLLABLE BBWIT;Lo;0;L;;;;;N;;;;; C03A;HANGUL SYLLABLE BBWIP;Lo;0;L;;;;;N;;;;; C03B;HANGUL SYLLABLE BBWIH;Lo;0;L;;;;;N;;;;; C03C;HANGUL SYLLABLE BBYU;Lo;0;L;;;;;N;;;;; C03D;HANGUL SYLLABLE BBYUG;Lo;0;L;;;;;N;;;;; C03E;HANGUL SYLLABLE BBYUGG;Lo;0;L;;;;;N;;;;; C03F;HANGUL SYLLABLE BBYUGS;Lo;0;L;;;;;N;;;;; C040;HANGUL SYLLABLE BBYUN;Lo;0;L;;;;;N;;;;; C041;HANGUL SYLLABLE BBYUNI;Lo;0;L;;;;;N;;;;; C042;HANGUL SYLLABLE BBYUNH;Lo;0;L;;;;;N;;;;; C043;HANGUL SYLLABLE BBYUD;Lo;0;L;;;;;N;;;;; C044;HANGUL SYLLABLE BBYUL;Lo;0;L;;;;;N;;;;; C045;HANGUL SYLLABLE BBYULG;Lo;0;L;;;;;N;;;;; C046;HANGUL SYLLABLE BBYULM;Lo;0;L;;;;;N;;;;; C047;HANGUL SYLLABLE BBYULB;Lo;0;L;;;;;N;;;;; C048;HANGUL SYLLABLE BBYULS;Lo;0;L;;;;;N;;;;; C049;HANGUL SYLLABLE BBYULT;Lo;0;L;;;;;N;;;;; C04A;HANGUL SYLLABLE BBYULP;Lo;0;L;;;;;N;;;;; C04B;HANGUL SYLLABLE BBYULH;Lo;0;L;;;;;N;;;;; C04C;HANGUL SYLLABLE BBYUM;Lo;0;L;;;;;N;;;;; C04D;HANGUL SYLLABLE BBYUB;Lo;0;L;;;;;N;;;;; C04E;HANGUL SYLLABLE BBYUBS;Lo;0;L;;;;;N;;;;; C04F;HANGUL SYLLABLE BBYUS;Lo;0;L;;;;;N;;;;; C050;HANGUL SYLLABLE BBYUSS;Lo;0;L;;;;;N;;;;; C051;HANGUL SYLLABLE BBYUNG;Lo;0;L;;;;;N;;;;; C052;HANGUL SYLLABLE BBYUJ;Lo;0;L;;;;;N;;;;; C053;HANGUL SYLLABLE BBYUC;Lo;0;L;;;;;N;;;;; C054;HANGUL SYLLABLE BBYUK;Lo;0;L;;;;;N;;;;; C055;HANGUL SYLLABLE BBYUT;Lo;0;L;;;;;N;;;;; C056;HANGUL SYLLABLE BBYUP;Lo;0;L;;;;;N;;;;; C057;HANGUL SYLLABLE BBYUH;Lo;0;L;;;;;N;;;;; C058;HANGUL SYLLABLE BBEU;Lo;0;L;;;;;N;;;;; C059;HANGUL SYLLABLE BBEUG;Lo;0;L;;;;;N;;;;; C05A;HANGUL SYLLABLE BBEUGG;Lo;0;L;;;;;N;;;;; C05B;HANGUL SYLLABLE BBEUGS;Lo;0;L;;;;;N;;;;; C05C;HANGUL SYLLABLE BBEUN;Lo;0;L;;;;;N;;;;; C05D;HANGUL SYLLABLE BBEUNI;Lo;0;L;;;;;N;;;;; C05E;HANGUL SYLLABLE BBEUNH;Lo;0;L;;;;;N;;;;; C05F;HANGUL SYLLABLE BBEUD;Lo;0;L;;;;;N;;;;; C060;HANGUL SYLLABLE BBEUL;Lo;0;L;;;;;N;;;;; C061;HANGUL SYLLABLE BBEULG;Lo;0;L;;;;;N;;;;; C062;HANGUL SYLLABLE BBEULM;Lo;0;L;;;;;N;;;;; C063;HANGUL SYLLABLE BBEULB;Lo;0;L;;;;;N;;;;; C064;HANGUL SYLLABLE BBEULS;Lo;0;L;;;;;N;;;;; C065;HANGUL SYLLABLE BBEULT;Lo;0;L;;;;;N;;;;; C066;HANGUL SYLLABLE BBEULP;Lo;0;L;;;;;N;;;;; C067;HANGUL SYLLABLE BBEULH;Lo;0;L;;;;;N;;;;; C068;HANGUL SYLLABLE BBEUM;Lo;0;L;;;;;N;;;;; C069;HANGUL SYLLABLE BBEUB;Lo;0;L;;;;;N;;;;; C06A;HANGUL SYLLABLE BBEUBS;Lo;0;L;;;;;N;;;;; C06B;HANGUL SYLLABLE BBEUS;Lo;0;L;;;;;N;;;;; C06C;HANGUL SYLLABLE BBEUSS;Lo;0;L;;;;;N;;;;; C06D;HANGUL SYLLABLE BBEUNG;Lo;0;L;;;;;N;;;;; C06E;HANGUL SYLLABLE BBEUJ;Lo;0;L;;;;;N;;;;; C06F;HANGUL SYLLABLE BBEUC;Lo;0;L;;;;;N;;;;; C070;HANGUL SYLLABLE BBEUK;Lo;0;L;;;;;N;;;;; C071;HANGUL SYLLABLE BBEUT;Lo;0;L;;;;;N;;;;; C072;HANGUL SYLLABLE BBEUP;Lo;0;L;;;;;N;;;;; C073;HANGUL SYLLABLE BBEUH;Lo;0;L;;;;;N;;;;; C074;HANGUL SYLLABLE BBYI;Lo;0;L;;;;;N;;;;; C075;HANGUL SYLLABLE BBYIG;Lo;0;L;;;;;N;;;;; C076;HANGUL SYLLABLE BBYIGG;Lo;0;L;;;;;N;;;;; C077;HANGUL SYLLABLE BBYIGS;Lo;0;L;;;;;N;;;;; C078;HANGUL SYLLABLE BBYIN;Lo;0;L;;;;;N;;;;; C079;HANGUL SYLLABLE BBYINI;Lo;0;L;;;;;N;;;;; C07A;HANGUL SYLLABLE BBYINH;Lo;0;L;;;;;N;;;;; C07B;HANGUL SYLLABLE BBYID;Lo;0;L;;;;;N;;;;; C07C;HANGUL SYLLABLE BBYIL;Lo;0;L;;;;;N;;;;; C07D;HANGUL SYLLABLE BBYILG;Lo;0;L;;;;;N;;;;; C07E;HANGUL SYLLABLE BBYILM;Lo;0;L;;;;;N;;;;; C07F;HANGUL SYLLABLE BBYILB;Lo;0;L;;;;;N;;;;; C080;HANGUL SYLLABLE BBYILS;Lo;0;L;;;;;N;;;;; C081;HANGUL SYLLABLE BBYILT;Lo;0;L;;;;;N;;;;; C082;HANGUL SYLLABLE BBYILP;Lo;0;L;;;;;N;;;;; C083;HANGUL SYLLABLE BBYILH;Lo;0;L;;;;;N;;;;; C084;HANGUL SYLLABLE BBYIM;Lo;0;L;;;;;N;;;;; C085;HANGUL SYLLABLE BBYIB;Lo;0;L;;;;;N;;;;; C086;HANGUL SYLLABLE BBYIBS;Lo;0;L;;;;;N;;;;; C087;HANGUL SYLLABLE BBYIS;Lo;0;L;;;;;N;;;;; C088;HANGUL SYLLABLE BBYISS;Lo;0;L;;;;;N;;;;; C089;HANGUL SYLLABLE BBYING;Lo;0;L;;;;;N;;;;; C08A;HANGUL SYLLABLE BBYIJ;Lo;0;L;;;;;N;;;;; C08B;HANGUL SYLLABLE BBYIC;Lo;0;L;;;;;N;;;;; C08C;HANGUL SYLLABLE BBYIK;Lo;0;L;;;;;N;;;;; C08D;HANGUL SYLLABLE BBYIT;Lo;0;L;;;;;N;;;;; C08E;HANGUL SYLLABLE BBYIP;Lo;0;L;;;;;N;;;;; C08F;HANGUL SYLLABLE BBYIH;Lo;0;L;;;;;N;;;;; C090;HANGUL SYLLABLE BBI;Lo;0;L;;;;;N;;;;; C091;HANGUL SYLLABLE BBIG;Lo;0;L;;;;;N;;;;; C092;HANGUL SYLLABLE BBIGG;Lo;0;L;;;;;N;;;;; C093;HANGUL SYLLABLE BBIGS;Lo;0;L;;;;;N;;;;; C094;HANGUL SYLLABLE BBIN;Lo;0;L;;;;;N;;;;; C095;HANGUL SYLLABLE BBINI;Lo;0;L;;;;;N;;;;; C096;HANGUL SYLLABLE BBINH;Lo;0;L;;;;;N;;;;; C097;HANGUL SYLLABLE BBID;Lo;0;L;;;;;N;;;;; C098;HANGUL SYLLABLE BBIL;Lo;0;L;;;;;N;;;;; C099;HANGUL SYLLABLE BBILG;Lo;0;L;;;;;N;;;;; C09A;HANGUL SYLLABLE BBILM;Lo;0;L;;;;;N;;;;; C09B;HANGUL SYLLABLE BBILB;Lo;0;L;;;;;N;;;;; C09C;HANGUL SYLLABLE BBILS;Lo;0;L;;;;;N;;;;; C09D;HANGUL SYLLABLE BBILT;Lo;0;L;;;;;N;;;;; C09E;HANGUL SYLLABLE BBILP;Lo;0;L;;;;;N;;;;; C09F;HANGUL SYLLABLE BBILH;Lo;0;L;;;;;N;;;;; C0A0;HANGUL SYLLABLE BBIM;Lo;0;L;;;;;N;;;;; C0A1;HANGUL SYLLABLE BBIB;Lo;0;L;;;;;N;;;;; C0A2;HANGUL SYLLABLE BBIBS;Lo;0;L;;;;;N;;;;; C0A3;HANGUL SYLLABLE BBIS;Lo;0;L;;;;;N;;;;; C0A4;HANGUL SYLLABLE BBISS;Lo;0;L;;;;;N;;;;; C0A5;HANGUL SYLLABLE BBING;Lo;0;L;;;;;N;;;;; C0A6;HANGUL SYLLABLE BBIJ;Lo;0;L;;;;;N;;;;; C0A7;HANGUL SYLLABLE BBIC;Lo;0;L;;;;;N;;;;; C0A8;HANGUL SYLLABLE BBIK;Lo;0;L;;;;;N;;;;; C0A9;HANGUL SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; C0AA;HANGUL SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; C0AB;HANGUL SYLLABLE BBIH;Lo;0;L;;;;;N;;;;; C0AC;HANGUL SYLLABLE SA;Lo;0;L;;;;;N;;;;; C0AD;HANGUL SYLLABLE SAG;Lo;0;L;;;;;N;;;;; C0AE;HANGUL SYLLABLE SAGG;Lo;0;L;;;;;N;;;;; C0AF;HANGUL SYLLABLE SAGS;Lo;0;L;;;;;N;;;;; C0B0;HANGUL SYLLABLE SAN;Lo;0;L;;;;;N;;;;; C0B1;HANGUL SYLLABLE SANI;Lo;0;L;;;;;N;;;;; C0B2;HANGUL SYLLABLE SANH;Lo;0;L;;;;;N;;;;; C0B3;HANGUL SYLLABLE SAD;Lo;0;L;;;;;N;;;;; C0B4;HANGUL SYLLABLE SAL;Lo;0;L;;;;;N;;;;; C0B5;HANGUL SYLLABLE SALG;Lo;0;L;;;;;N;;;;; C0B6;HANGUL SYLLABLE SALM;Lo;0;L;;;;;N;;;;; C0B7;HANGUL SYLLABLE SALB;Lo;0;L;;;;;N;;;;; C0B8;HANGUL SYLLABLE SALS;Lo;0;L;;;;;N;;;;; C0B9;HANGUL SYLLABLE SALT;Lo;0;L;;;;;N;;;;; C0BA;HANGUL SYLLABLE SALP;Lo;0;L;;;;;N;;;;; C0BB;HANGUL SYLLABLE SALH;Lo;0;L;;;;;N;;;;; C0BC;HANGUL SYLLABLE SAM;Lo;0;L;;;;;N;;;;; C0BD;HANGUL SYLLABLE SAB;Lo;0;L;;;;;N;;;;; C0BE;HANGUL SYLLABLE SABS;Lo;0;L;;;;;N;;;;; C0BF;HANGUL SYLLABLE SAS;Lo;0;L;;;;;N;;;;; C0C0;HANGUL SYLLABLE SASS;Lo;0;L;;;;;N;;;;; C0C1;HANGUL SYLLABLE SANG;Lo;0;L;;;;;N;;;;; C0C2;HANGUL SYLLABLE SAJ;Lo;0;L;;;;;N;;;;; C0C3;HANGUL SYLLABLE SAC;Lo;0;L;;;;;N;;;;; C0C4;HANGUL SYLLABLE SAK;Lo;0;L;;;;;N;;;;; C0C5;HANGUL SYLLABLE SAT;Lo;0;L;;;;;N;;;;; C0C6;HANGUL SYLLABLE SAP;Lo;0;L;;;;;N;;;;; C0C7;HANGUL SYLLABLE SAH;Lo;0;L;;;;;N;;;;; C0C8;HANGUL SYLLABLE SAE;Lo;0;L;;;;;N;;;;; C0C9;HANGUL SYLLABLE SAEG;Lo;0;L;;;;;N;;;;; C0CA;HANGUL SYLLABLE SAEGG;Lo;0;L;;;;;N;;;;; C0CB;HANGUL SYLLABLE SAEGS;Lo;0;L;;;;;N;;;;; C0CC;HANGUL SYLLABLE SAEN;Lo;0;L;;;;;N;;;;; C0CD;HANGUL SYLLABLE SAENI;Lo;0;L;;;;;N;;;;; C0CE;HANGUL SYLLABLE SAENH;Lo;0;L;;;;;N;;;;; C0CF;HANGUL SYLLABLE SAED;Lo;0;L;;;;;N;;;;; C0D0;HANGUL SYLLABLE SAEL;Lo;0;L;;;;;N;;;;; C0D1;HANGUL SYLLABLE SAELG;Lo;0;L;;;;;N;;;;; C0D2;HANGUL SYLLABLE SAELM;Lo;0;L;;;;;N;;;;; C0D3;HANGUL SYLLABLE SAELB;Lo;0;L;;;;;N;;;;; C0D4;HANGUL SYLLABLE SAELS;Lo;0;L;;;;;N;;;;; C0D5;HANGUL SYLLABLE SAELT;Lo;0;L;;;;;N;;;;; C0D6;HANGUL SYLLABLE SAELP;Lo;0;L;;;;;N;;;;; C0D7;HANGUL SYLLABLE SAELH;Lo;0;L;;;;;N;;;;; C0D8;HANGUL SYLLABLE SAEM;Lo;0;L;;;;;N;;;;; C0D9;HANGUL SYLLABLE SAEB;Lo;0;L;;;;;N;;;;; C0DA;HANGUL SYLLABLE SAEBS;Lo;0;L;;;;;N;;;;; C0DB;HANGUL SYLLABLE SAES;Lo;0;L;;;;;N;;;;; C0DC;HANGUL SYLLABLE SAESS;Lo;0;L;;;;;N;;;;; C0DD;HANGUL SYLLABLE SAENG;Lo;0;L;;;;;N;;;;; C0DE;HANGUL SYLLABLE SAEJ;Lo;0;L;;;;;N;;;;; C0DF;HANGUL SYLLABLE SAEC;Lo;0;L;;;;;N;;;;; C0E0;HANGUL SYLLABLE SAEK;Lo;0;L;;;;;N;;;;; C0E1;HANGUL SYLLABLE SAET;Lo;0;L;;;;;N;;;;; C0E2;HANGUL SYLLABLE SAEP;Lo;0;L;;;;;N;;;;; C0E3;HANGUL SYLLABLE SAEH;Lo;0;L;;;;;N;;;;; C0E4;HANGUL SYLLABLE SYA;Lo;0;L;;;;;N;;;;; C0E5;HANGUL SYLLABLE SYAG;Lo;0;L;;;;;N;;;;; C0E6;HANGUL SYLLABLE SYAGG;Lo;0;L;;;;;N;;;;; C0E7;HANGUL SYLLABLE SYAGS;Lo;0;L;;;;;N;;;;; C0E8;HANGUL SYLLABLE SYAN;Lo;0;L;;;;;N;;;;; C0E9;HANGUL SYLLABLE SYANI;Lo;0;L;;;;;N;;;;; C0EA;HANGUL SYLLABLE SYANH;Lo;0;L;;;;;N;;;;; C0EB;HANGUL SYLLABLE SYAD;Lo;0;L;;;;;N;;;;; C0EC;HANGUL SYLLABLE SYAL;Lo;0;L;;;;;N;;;;; C0ED;HANGUL SYLLABLE SYALG;Lo;0;L;;;;;N;;;;; C0EE;HANGUL SYLLABLE SYALM;Lo;0;L;;;;;N;;;;; C0EF;HANGUL SYLLABLE SYALB;Lo;0;L;;;;;N;;;;; C0F0;HANGUL SYLLABLE SYALS;Lo;0;L;;;;;N;;;;; C0F1;HANGUL SYLLABLE SYALT;Lo;0;L;;;;;N;;;;; C0F2;HANGUL SYLLABLE SYALP;Lo;0;L;;;;;N;;;;; C0F3;HANGUL SYLLABLE SYALH;Lo;0;L;;;;;N;;;;; C0F4;HANGUL SYLLABLE SYAM;Lo;0;L;;;;;N;;;;; C0F5;HANGUL SYLLABLE SYAB;Lo;0;L;;;;;N;;;;; C0F6;HANGUL SYLLABLE SYABS;Lo;0;L;;;;;N;;;;; C0F7;HANGUL SYLLABLE SYAS;Lo;0;L;;;;;N;;;;; C0F8;HANGUL SYLLABLE SYASS;Lo;0;L;;;;;N;;;;; C0F9;HANGUL SYLLABLE SYANG;Lo;0;L;;;;;N;;;;; C0FA;HANGUL SYLLABLE SYAJ;Lo;0;L;;;;;N;;;;; C0FB;HANGUL SYLLABLE SYAC;Lo;0;L;;;;;N;;;;; C0FC;HANGUL SYLLABLE SYAK;Lo;0;L;;;;;N;;;;; C0FD;HANGUL SYLLABLE SYAT;Lo;0;L;;;;;N;;;;; C0FE;HANGUL SYLLABLE SYAP;Lo;0;L;;;;;N;;;;; C0FF;HANGUL SYLLABLE SYAH;Lo;0;L;;;;;N;;;;; C100;HANGUL SYLLABLE SYAE;Lo;0;L;;;;;N;;;;; C101;HANGUL SYLLABLE SYAEG;Lo;0;L;;;;;N;;;;; C102;HANGUL SYLLABLE SYAEGG;Lo;0;L;;;;;N;;;;; C103;HANGUL SYLLABLE SYAEGS;Lo;0;L;;;;;N;;;;; C104;HANGUL SYLLABLE SYAEN;Lo;0;L;;;;;N;;;;; C105;HANGUL SYLLABLE SYAENI;Lo;0;L;;;;;N;;;;; C106;HANGUL SYLLABLE SYAENH;Lo;0;L;;;;;N;;;;; C107;HANGUL SYLLABLE SYAED;Lo;0;L;;;;;N;;;;; C108;HANGUL SYLLABLE SYAEL;Lo;0;L;;;;;N;;;;; C109;HANGUL SYLLABLE SYAELG;Lo;0;L;;;;;N;;;;; C10A;HANGUL SYLLABLE SYAELM;Lo;0;L;;;;;N;;;;; C10B;HANGUL SYLLABLE SYAELB;Lo;0;L;;;;;N;;;;; C10C;HANGUL SYLLABLE SYAELS;Lo;0;L;;;;;N;;;;; C10D;HANGUL SYLLABLE SYAELT;Lo;0;L;;;;;N;;;;; C10E;HANGUL SYLLABLE SYAELP;Lo;0;L;;;;;N;;;;; C10F;HANGUL SYLLABLE SYAELH;Lo;0;L;;;;;N;;;;; C110;HANGUL SYLLABLE SYAEM;Lo;0;L;;;;;N;;;;; C111;HANGUL SYLLABLE SYAEB;Lo;0;L;;;;;N;;;;; C112;HANGUL SYLLABLE SYAEBS;Lo;0;L;;;;;N;;;;; C113;HANGUL SYLLABLE SYAES;Lo;0;L;;;;;N;;;;; C114;HANGUL SYLLABLE SYAESS;Lo;0;L;;;;;N;;;;; C115;HANGUL SYLLABLE SYAENG;Lo;0;L;;;;;N;;;;; C116;HANGUL SYLLABLE SYAEJ;Lo;0;L;;;;;N;;;;; C117;HANGUL SYLLABLE SYAEC;Lo;0;L;;;;;N;;;;; C118;HANGUL SYLLABLE SYAEK;Lo;0;L;;;;;N;;;;; C119;HANGUL SYLLABLE SYAET;Lo;0;L;;;;;N;;;;; C11A;HANGUL SYLLABLE SYAEP;Lo;0;L;;;;;N;;;;; C11B;HANGUL SYLLABLE SYAEH;Lo;0;L;;;;;N;;;;; C11C;HANGUL SYLLABLE SEO;Lo;0;L;;;;;N;;;;; C11D;HANGUL SYLLABLE SEOG;Lo;0;L;;;;;N;;;;; C11E;HANGUL SYLLABLE SEOGG;Lo;0;L;;;;;N;;;;; C11F;HANGUL SYLLABLE SEOGS;Lo;0;L;;;;;N;;;;; C120;HANGUL SYLLABLE SEON;Lo;0;L;;;;;N;;;;; C121;HANGUL SYLLABLE SEONI;Lo;0;L;;;;;N;;;;; C122;HANGUL SYLLABLE SEONH;Lo;0;L;;;;;N;;;;; C123;HANGUL SYLLABLE SEOD;Lo;0;L;;;;;N;;;;; C124;HANGUL SYLLABLE SEOL;Lo;0;L;;;;;N;;;;; C125;HANGUL SYLLABLE SEOLG;Lo;0;L;;;;;N;;;;; C126;HANGUL SYLLABLE SEOLM;Lo;0;L;;;;;N;;;;; C127;HANGUL SYLLABLE SEOLB;Lo;0;L;;;;;N;;;;; C128;HANGUL SYLLABLE SEOLS;Lo;0;L;;;;;N;;;;; C129;HANGUL SYLLABLE SEOLT;Lo;0;L;;;;;N;;;;; C12A;HANGUL SYLLABLE SEOLP;Lo;0;L;;;;;N;;;;; C12B;HANGUL SYLLABLE SEOLH;Lo;0;L;;;;;N;;;;; C12C;HANGUL SYLLABLE SEOM;Lo;0;L;;;;;N;;;;; C12D;HANGUL SYLLABLE SEOB;Lo;0;L;;;;;N;;;;; C12E;HANGUL SYLLABLE SEOBS;Lo;0;L;;;;;N;;;;; C12F;HANGUL SYLLABLE SEOS;Lo;0;L;;;;;N;;;;; C130;HANGUL SYLLABLE SEOSS;Lo;0;L;;;;;N;;;;; C131;HANGUL SYLLABLE SEONG;Lo;0;L;;;;;N;;;;; C132;HANGUL SYLLABLE SEOJ;Lo;0;L;;;;;N;;;;; C133;HANGUL SYLLABLE SEOC;Lo;0;L;;;;;N;;;;; C134;HANGUL SYLLABLE SEOK;Lo;0;L;;;;;N;;;;; C135;HANGUL SYLLABLE SEOT;Lo;0;L;;;;;N;;;;; C136;HANGUL SYLLABLE SEOP;Lo;0;L;;;;;N;;;;; C137;HANGUL SYLLABLE SEOH;Lo;0;L;;;;;N;;;;; C138;HANGUL SYLLABLE SE;Lo;0;L;;;;;N;;;;; C139;HANGUL SYLLABLE SEG;Lo;0;L;;;;;N;;;;; C13A;HANGUL SYLLABLE SEGG;Lo;0;L;;;;;N;;;;; C13B;HANGUL SYLLABLE SEGS;Lo;0;L;;;;;N;;;;; C13C;HANGUL SYLLABLE SEN;Lo;0;L;;;;;N;;;;; C13D;HANGUL SYLLABLE SENI;Lo;0;L;;;;;N;;;;; C13E;HANGUL SYLLABLE SENH;Lo;0;L;;;;;N;;;;; C13F;HANGUL SYLLABLE SED;Lo;0;L;;;;;N;;;;; C140;HANGUL SYLLABLE SEL;Lo;0;L;;;;;N;;;;; C141;HANGUL SYLLABLE SELG;Lo;0;L;;;;;N;;;;; C142;HANGUL SYLLABLE SELM;Lo;0;L;;;;;N;;;;; C143;HANGUL SYLLABLE SELB;Lo;0;L;;;;;N;;;;; C144;HANGUL SYLLABLE SELS;Lo;0;L;;;;;N;;;;; C145;HANGUL SYLLABLE SELT;Lo;0;L;;;;;N;;;;; C146;HANGUL SYLLABLE SELP;Lo;0;L;;;;;N;;;;; C147;HANGUL SYLLABLE SELH;Lo;0;L;;;;;N;;;;; C148;HANGUL SYLLABLE SEM;Lo;0;L;;;;;N;;;;; C149;HANGUL SYLLABLE SEB;Lo;0;L;;;;;N;;;;; C14A;HANGUL SYLLABLE SEBS;Lo;0;L;;;;;N;;;;; C14B;HANGUL SYLLABLE SES;Lo;0;L;;;;;N;;;;; C14C;HANGUL SYLLABLE SESS;Lo;0;L;;;;;N;;;;; C14D;HANGUL SYLLABLE SENG;Lo;0;L;;;;;N;;;;; C14E;HANGUL SYLLABLE SEJ;Lo;0;L;;;;;N;;;;; C14F;HANGUL SYLLABLE SEC;Lo;0;L;;;;;N;;;;; C150;HANGUL SYLLABLE SEK;Lo;0;L;;;;;N;;;;; C151;HANGUL SYLLABLE SET;Lo;0;L;;;;;N;;;;; C152;HANGUL SYLLABLE SEP;Lo;0;L;;;;;N;;;;; C153;HANGUL SYLLABLE SEH;Lo;0;L;;;;;N;;;;; C154;HANGUL SYLLABLE SYEO;Lo;0;L;;;;;N;;;;; C155;HANGUL SYLLABLE SYEOG;Lo;0;L;;;;;N;;;;; C156;HANGUL SYLLABLE SYEOGG;Lo;0;L;;;;;N;;;;; C157;HANGUL SYLLABLE SYEOGS;Lo;0;L;;;;;N;;;;; C158;HANGUL SYLLABLE SYEON;Lo;0;L;;;;;N;;;;; C159;HANGUL SYLLABLE SYEONI;Lo;0;L;;;;;N;;;;; C15A;HANGUL SYLLABLE SYEONH;Lo;0;L;;;;;N;;;;; C15B;HANGUL SYLLABLE SYEOD;Lo;0;L;;;;;N;;;;; C15C;HANGUL SYLLABLE SYEOL;Lo;0;L;;;;;N;;;;; C15D;HANGUL SYLLABLE SYEOLG;Lo;0;L;;;;;N;;;;; C15E;HANGUL SYLLABLE SYEOLM;Lo;0;L;;;;;N;;;;; C15F;HANGUL SYLLABLE SYEOLB;Lo;0;L;;;;;N;;;;; C160;HANGUL SYLLABLE SYEOLS;Lo;0;L;;;;;N;;;;; C161;HANGUL SYLLABLE SYEOLT;Lo;0;L;;;;;N;;;;; C162;HANGUL SYLLABLE SYEOLP;Lo;0;L;;;;;N;;;;; C163;HANGUL SYLLABLE SYEOLH;Lo;0;L;;;;;N;;;;; C164;HANGUL SYLLABLE SYEOM;Lo;0;L;;;;;N;;;;; C165;HANGUL SYLLABLE SYEOB;Lo;0;L;;;;;N;;;;; C166;HANGUL SYLLABLE SYEOBS;Lo;0;L;;;;;N;;;;; C167;HANGUL SYLLABLE SYEOS;Lo;0;L;;;;;N;;;;; C168;HANGUL SYLLABLE SYEOSS;Lo;0;L;;;;;N;;;;; C169;HANGUL SYLLABLE SYEONG;Lo;0;L;;;;;N;;;;; C16A;HANGUL SYLLABLE SYEOJ;Lo;0;L;;;;;N;;;;; C16B;HANGUL SYLLABLE SYEOC;Lo;0;L;;;;;N;;;;; C16C;HANGUL SYLLABLE SYEOK;Lo;0;L;;;;;N;;;;; C16D;HANGUL SYLLABLE SYEOT;Lo;0;L;;;;;N;;;;; C16E;HANGUL SYLLABLE SYEOP;Lo;0;L;;;;;N;;;;; C16F;HANGUL SYLLABLE SYEOH;Lo;0;L;;;;;N;;;;; C170;HANGUL SYLLABLE SYE;Lo;0;L;;;;;N;;;;; C171;HANGUL SYLLABLE SYEG;Lo;0;L;;;;;N;;;;; C172;HANGUL SYLLABLE SYEGG;Lo;0;L;;;;;N;;;;; C173;HANGUL SYLLABLE SYEGS;Lo;0;L;;;;;N;;;;; C174;HANGUL SYLLABLE SYEN;Lo;0;L;;;;;N;;;;; C175;HANGUL SYLLABLE SYENI;Lo;0;L;;;;;N;;;;; C176;HANGUL SYLLABLE SYENH;Lo;0;L;;;;;N;;;;; C177;HANGUL SYLLABLE SYED;Lo;0;L;;;;;N;;;;; C178;HANGUL SYLLABLE SYEL;Lo;0;L;;;;;N;;;;; C179;HANGUL SYLLABLE SYELG;Lo;0;L;;;;;N;;;;; C17A;HANGUL SYLLABLE SYELM;Lo;0;L;;;;;N;;;;; C17B;HANGUL SYLLABLE SYELB;Lo;0;L;;;;;N;;;;; C17C;HANGUL SYLLABLE SYELS;Lo;0;L;;;;;N;;;;; C17D;HANGUL SYLLABLE SYELT;Lo;0;L;;;;;N;;;;; C17E;HANGUL SYLLABLE SYELP;Lo;0;L;;;;;N;;;;; C17F;HANGUL SYLLABLE SYELH;Lo;0;L;;;;;N;;;;; C180;HANGUL SYLLABLE SYEM;Lo;0;L;;;;;N;;;;; C181;HANGUL SYLLABLE SYEB;Lo;0;L;;;;;N;;;;; C182;HANGUL SYLLABLE SYEBS;Lo;0;L;;;;;N;;;;; C183;HANGUL SYLLABLE SYES;Lo;0;L;;;;;N;;;;; C184;HANGUL SYLLABLE SYESS;Lo;0;L;;;;;N;;;;; C185;HANGUL SYLLABLE SYENG;Lo;0;L;;;;;N;;;;; C186;HANGUL SYLLABLE SYEJ;Lo;0;L;;;;;N;;;;; C187;HANGUL SYLLABLE SYEC;Lo;0;L;;;;;N;;;;; C188;HANGUL SYLLABLE SYEK;Lo;0;L;;;;;N;;;;; C189;HANGUL SYLLABLE SYET;Lo;0;L;;;;;N;;;;; C18A;HANGUL SYLLABLE SYEP;Lo;0;L;;;;;N;;;;; C18B;HANGUL SYLLABLE SYEH;Lo;0;L;;;;;N;;;;; C18C;HANGUL SYLLABLE SO;Lo;0;L;;;;;N;;;;; C18D;HANGUL SYLLABLE SOG;Lo;0;L;;;;;N;;;;; C18E;HANGUL SYLLABLE SOGG;Lo;0;L;;;;;N;;;;; C18F;HANGUL SYLLABLE SOGS;Lo;0;L;;;;;N;;;;; C190;HANGUL SYLLABLE SON;Lo;0;L;;;;;N;;;;; C191;HANGUL SYLLABLE SONI;Lo;0;L;;;;;N;;;;; C192;HANGUL SYLLABLE SONH;Lo;0;L;;;;;N;;;;; C193;HANGUL SYLLABLE SOD;Lo;0;L;;;;;N;;;;; C194;HANGUL SYLLABLE SOL;Lo;0;L;;;;;N;;;;; C195;HANGUL SYLLABLE SOLG;Lo;0;L;;;;;N;;;;; C196;HANGUL SYLLABLE SOLM;Lo;0;L;;;;;N;;;;; C197;HANGUL SYLLABLE SOLB;Lo;0;L;;;;;N;;;;; C198;HANGUL SYLLABLE SOLS;Lo;0;L;;;;;N;;;;; C199;HANGUL SYLLABLE SOLT;Lo;0;L;;;;;N;;;;; C19A;HANGUL SYLLABLE SOLP;Lo;0;L;;;;;N;;;;; C19B;HANGUL SYLLABLE SOLH;Lo;0;L;;;;;N;;;;; C19C;HANGUL SYLLABLE SOM;Lo;0;L;;;;;N;;;;; C19D;HANGUL SYLLABLE SOB;Lo;0;L;;;;;N;;;;; C19E;HANGUL SYLLABLE SOBS;Lo;0;L;;;;;N;;;;; C19F;HANGUL SYLLABLE SOS;Lo;0;L;;;;;N;;;;; C1A0;HANGUL SYLLABLE SOSS;Lo;0;L;;;;;N;;;;; C1A1;HANGUL SYLLABLE SONG;Lo;0;L;;;;;N;;;;; C1A2;HANGUL SYLLABLE SOJ;Lo;0;L;;;;;N;;;;; C1A3;HANGUL SYLLABLE SOC;Lo;0;L;;;;;N;;;;; C1A4;HANGUL SYLLABLE SOK;Lo;0;L;;;;;N;;;;; C1A5;HANGUL SYLLABLE SOT;Lo;0;L;;;;;N;;;;; C1A6;HANGUL SYLLABLE SOP;Lo;0;L;;;;;N;;;;; C1A7;HANGUL SYLLABLE SOH;Lo;0;L;;;;;N;;;;; C1A8;HANGUL SYLLABLE SWA;Lo;0;L;;;;;N;;;;; C1A9;HANGUL SYLLABLE SWAG;Lo;0;L;;;;;N;;;;; C1AA;HANGUL SYLLABLE SWAGG;Lo;0;L;;;;;N;;;;; C1AB;HANGUL SYLLABLE SWAGS;Lo;0;L;;;;;N;;;;; C1AC;HANGUL SYLLABLE SWAN;Lo;0;L;;;;;N;;;;; C1AD;HANGUL SYLLABLE SWANI;Lo;0;L;;;;;N;;;;; C1AE;HANGUL SYLLABLE SWANH;Lo;0;L;;;;;N;;;;; C1AF;HANGUL SYLLABLE SWAD;Lo;0;L;;;;;N;;;;; C1B0;HANGUL SYLLABLE SWAL;Lo;0;L;;;;;N;;;;; C1B1;HANGUL SYLLABLE SWALG;Lo;0;L;;;;;N;;;;; C1B2;HANGUL SYLLABLE SWALM;Lo;0;L;;;;;N;;;;; C1B3;HANGUL SYLLABLE SWALB;Lo;0;L;;;;;N;;;;; C1B4;HANGUL SYLLABLE SWALS;Lo;0;L;;;;;N;;;;; C1B5;HANGUL SYLLABLE SWALT;Lo;0;L;;;;;N;;;;; C1B6;HANGUL SYLLABLE SWALP;Lo;0;L;;;;;N;;;;; C1B7;HANGUL SYLLABLE SWALH;Lo;0;L;;;;;N;;;;; C1B8;HANGUL SYLLABLE SWAM;Lo;0;L;;;;;N;;;;; C1B9;HANGUL SYLLABLE SWAB;Lo;0;L;;;;;N;;;;; C1BA;HANGUL SYLLABLE SWABS;Lo;0;L;;;;;N;;;;; C1BB;HANGUL SYLLABLE SWAS;Lo;0;L;;;;;N;;;;; C1BC;HANGUL SYLLABLE SWASS;Lo;0;L;;;;;N;;;;; C1BD;HANGUL SYLLABLE SWANG;Lo;0;L;;;;;N;;;;; C1BE;HANGUL SYLLABLE SWAJ;Lo;0;L;;;;;N;;;;; C1BF;HANGUL SYLLABLE SWAC;Lo;0;L;;;;;N;;;;; C1C0;HANGUL SYLLABLE SWAK;Lo;0;L;;;;;N;;;;; C1C1;HANGUL SYLLABLE SWAT;Lo;0;L;;;;;N;;;;; C1C2;HANGUL SYLLABLE SWAP;Lo;0;L;;;;;N;;;;; C1C3;HANGUL SYLLABLE SWAH;Lo;0;L;;;;;N;;;;; C1C4;HANGUL SYLLABLE SWAE;Lo;0;L;;;;;N;;;;; C1C5;HANGUL SYLLABLE SWAEG;Lo;0;L;;;;;N;;;;; C1C6;HANGUL SYLLABLE SWAEGG;Lo;0;L;;;;;N;;;;; C1C7;HANGUL SYLLABLE SWAEGS;Lo;0;L;;;;;N;;;;; C1C8;HANGUL SYLLABLE SWAEN;Lo;0;L;;;;;N;;;;; C1C9;HANGUL SYLLABLE SWAENI;Lo;0;L;;;;;N;;;;; C1CA;HANGUL SYLLABLE SWAENH;Lo;0;L;;;;;N;;;;; C1CB;HANGUL SYLLABLE SWAED;Lo;0;L;;;;;N;;;;; C1CC;HANGUL SYLLABLE SWAEL;Lo;0;L;;;;;N;;;;; C1CD;HANGUL SYLLABLE SWAELG;Lo;0;L;;;;;N;;;;; C1CE;HANGUL SYLLABLE SWAELM;Lo;0;L;;;;;N;;;;; C1CF;HANGUL SYLLABLE SWAELB;Lo;0;L;;;;;N;;;;; C1D0;HANGUL SYLLABLE SWAELS;Lo;0;L;;;;;N;;;;; C1D1;HANGUL SYLLABLE SWAELT;Lo;0;L;;;;;N;;;;; C1D2;HANGUL SYLLABLE SWAELP;Lo;0;L;;;;;N;;;;; C1D3;HANGUL SYLLABLE SWAELH;Lo;0;L;;;;;N;;;;; C1D4;HANGUL SYLLABLE SWAEM;Lo;0;L;;;;;N;;;;; C1D5;HANGUL SYLLABLE SWAEB;Lo;0;L;;;;;N;;;;; C1D6;HANGUL SYLLABLE SWAEBS;Lo;0;L;;;;;N;;;;; C1D7;HANGUL SYLLABLE SWAES;Lo;0;L;;;;;N;;;;; C1D8;HANGUL SYLLABLE SWAESS;Lo;0;L;;;;;N;;;;; C1D9;HANGUL SYLLABLE SWAENG;Lo;0;L;;;;;N;;;;; C1DA;HANGUL SYLLABLE SWAEJ;Lo;0;L;;;;;N;;;;; C1DB;HANGUL SYLLABLE SWAEC;Lo;0;L;;;;;N;;;;; C1DC;HANGUL SYLLABLE SWAEK;Lo;0;L;;;;;N;;;;; C1DD;HANGUL SYLLABLE SWAET;Lo;0;L;;;;;N;;;;; C1DE;HANGUL SYLLABLE SWAEP;Lo;0;L;;;;;N;;;;; C1DF;HANGUL SYLLABLE SWAEH;Lo;0;L;;;;;N;;;;; C1E0;HANGUL SYLLABLE SOE;Lo;0;L;;;;;N;;;;; C1E1;HANGUL SYLLABLE SOEG;Lo;0;L;;;;;N;;;;; C1E2;HANGUL SYLLABLE SOEGG;Lo;0;L;;;;;N;;;;; C1E3;HANGUL SYLLABLE SOEGS;Lo;0;L;;;;;N;;;;; C1E4;HANGUL SYLLABLE SOEN;Lo;0;L;;;;;N;;;;; C1E5;HANGUL SYLLABLE SOENI;Lo;0;L;;;;;N;;;;; C1E6;HANGUL SYLLABLE SOENH;Lo;0;L;;;;;N;;;;; C1E7;HANGUL SYLLABLE SOED;Lo;0;L;;;;;N;;;;; C1E8;HANGUL SYLLABLE SOEL;Lo;0;L;;;;;N;;;;; C1E9;HANGUL SYLLABLE SOELG;Lo;0;L;;;;;N;;;;; C1EA;HANGUL SYLLABLE SOELM;Lo;0;L;;;;;N;;;;; C1EB;HANGUL SYLLABLE SOELB;Lo;0;L;;;;;N;;;;; C1EC;HANGUL SYLLABLE SOELS;Lo;0;L;;;;;N;;;;; C1ED;HANGUL SYLLABLE SOELT;Lo;0;L;;;;;N;;;;; C1EE;HANGUL SYLLABLE SOELP;Lo;0;L;;;;;N;;;;; C1EF;HANGUL SYLLABLE SOELH;Lo;0;L;;;;;N;;;;; C1F0;HANGUL SYLLABLE SOEM;Lo;0;L;;;;;N;;;;; C1F1;HANGUL SYLLABLE SOEB;Lo;0;L;;;;;N;;;;; C1F2;HANGUL SYLLABLE SOEBS;Lo;0;L;;;;;N;;;;; C1F3;HANGUL SYLLABLE SOES;Lo;0;L;;;;;N;;;;; C1F4;HANGUL SYLLABLE SOESS;Lo;0;L;;;;;N;;;;; C1F5;HANGUL SYLLABLE SOENG;Lo;0;L;;;;;N;;;;; C1F6;HANGUL SYLLABLE SOEJ;Lo;0;L;;;;;N;;;;; C1F7;HANGUL SYLLABLE SOEC;Lo;0;L;;;;;N;;;;; C1F8;HANGUL SYLLABLE SOEK;Lo;0;L;;;;;N;;;;; C1F9;HANGUL SYLLABLE SOET;Lo;0;L;;;;;N;;;;; C1FA;HANGUL SYLLABLE SOEP;Lo;0;L;;;;;N;;;;; C1FB;HANGUL SYLLABLE SOEH;Lo;0;L;;;;;N;;;;; C1FC;HANGUL SYLLABLE SYO;Lo;0;L;;;;;N;;;;; C1FD;HANGUL SYLLABLE SYOG;Lo;0;L;;;;;N;;;;; C1FE;HANGUL SYLLABLE SYOGG;Lo;0;L;;;;;N;;;;; C1FF;HANGUL SYLLABLE SYOGS;Lo;0;L;;;;;N;;;;; C200;HANGUL SYLLABLE SYON;Lo;0;L;;;;;N;;;;; C201;HANGUL SYLLABLE SYONI;Lo;0;L;;;;;N;;;;; C202;HANGUL SYLLABLE SYONH;Lo;0;L;;;;;N;;;;; C203;HANGUL SYLLABLE SYOD;Lo;0;L;;;;;N;;;;; C204;HANGUL SYLLABLE SYOL;Lo;0;L;;;;;N;;;;; C205;HANGUL SYLLABLE SYOLG;Lo;0;L;;;;;N;;;;; C206;HANGUL SYLLABLE SYOLM;Lo;0;L;;;;;N;;;;; C207;HANGUL SYLLABLE SYOLB;Lo;0;L;;;;;N;;;;; C208;HANGUL SYLLABLE SYOLS;Lo;0;L;;;;;N;;;;; C209;HANGUL SYLLABLE SYOLT;Lo;0;L;;;;;N;;;;; C20A;HANGUL SYLLABLE SYOLP;Lo;0;L;;;;;N;;;;; C20B;HANGUL SYLLABLE SYOLH;Lo;0;L;;;;;N;;;;; C20C;HANGUL SYLLABLE SYOM;Lo;0;L;;;;;N;;;;; C20D;HANGUL SYLLABLE SYOB;Lo;0;L;;;;;N;;;;; C20E;HANGUL SYLLABLE SYOBS;Lo;0;L;;;;;N;;;;; C20F;HANGUL SYLLABLE SYOS;Lo;0;L;;;;;N;;;;; C210;HANGUL SYLLABLE SYOSS;Lo;0;L;;;;;N;;;;; C211;HANGUL SYLLABLE SYONG;Lo;0;L;;;;;N;;;;; C212;HANGUL SYLLABLE SYOJ;Lo;0;L;;;;;N;;;;; C213;HANGUL SYLLABLE SYOC;Lo;0;L;;;;;N;;;;; C214;HANGUL SYLLABLE SYOK;Lo;0;L;;;;;N;;;;; C215;HANGUL SYLLABLE SYOT;Lo;0;L;;;;;N;;;;; C216;HANGUL SYLLABLE SYOP;Lo;0;L;;;;;N;;;;; C217;HANGUL SYLLABLE SYOH;Lo;0;L;;;;;N;;;;; C218;HANGUL SYLLABLE SU;Lo;0;L;;;;;N;;;;; C219;HANGUL SYLLABLE SUG;Lo;0;L;;;;;N;;;;; C21A;HANGUL SYLLABLE SUGG;Lo;0;L;;;;;N;;;;; C21B;HANGUL SYLLABLE SUGS;Lo;0;L;;;;;N;;;;; C21C;HANGUL SYLLABLE SUN;Lo;0;L;;;;;N;;;;; C21D;HANGUL SYLLABLE SUNI;Lo;0;L;;;;;N;;;;; C21E;HANGUL SYLLABLE SUNH;Lo;0;L;;;;;N;;;;; C21F;HANGUL SYLLABLE SUD;Lo;0;L;;;;;N;;;;; C220;HANGUL SYLLABLE SUL;Lo;0;L;;;;;N;;;;; C221;HANGUL SYLLABLE SULG;Lo;0;L;;;;;N;;;;; C222;HANGUL SYLLABLE SULM;Lo;0;L;;;;;N;;;;; C223;HANGUL SYLLABLE SULB;Lo;0;L;;;;;N;;;;; C224;HANGUL SYLLABLE SULS;Lo;0;L;;;;;N;;;;; C225;HANGUL SYLLABLE SULT;Lo;0;L;;;;;N;;;;; C226;HANGUL SYLLABLE SULP;Lo;0;L;;;;;N;;;;; C227;HANGUL SYLLABLE SULH;Lo;0;L;;;;;N;;;;; C228;HANGUL SYLLABLE SUM;Lo;0;L;;;;;N;;;;; C229;HANGUL SYLLABLE SUB;Lo;0;L;;;;;N;;;;; C22A;HANGUL SYLLABLE SUBS;Lo;0;L;;;;;N;;;;; C22B;HANGUL SYLLABLE SUS;Lo;0;L;;;;;N;;;;; C22C;HANGUL SYLLABLE SUSS;Lo;0;L;;;;;N;;;;; C22D;HANGUL SYLLABLE SUNG;Lo;0;L;;;;;N;;;;; C22E;HANGUL SYLLABLE SUJ;Lo;0;L;;;;;N;;;;; C22F;HANGUL SYLLABLE SUC;Lo;0;L;;;;;N;;;;; C230;HANGUL SYLLABLE SUK;Lo;0;L;;;;;N;;;;; C231;HANGUL SYLLABLE SUT;Lo;0;L;;;;;N;;;;; C232;HANGUL SYLLABLE SUP;Lo;0;L;;;;;N;;;;; C233;HANGUL SYLLABLE SUH;Lo;0;L;;;;;N;;;;; C234;HANGUL SYLLABLE SWEO;Lo;0;L;;;;;N;;;;; C235;HANGUL SYLLABLE SWEOG;Lo;0;L;;;;;N;;;;; C236;HANGUL SYLLABLE SWEOGG;Lo;0;L;;;;;N;;;;; C237;HANGUL SYLLABLE SWEOGS;Lo;0;L;;;;;N;;;;; C238;HANGUL SYLLABLE SWEON;Lo;0;L;;;;;N;;;;; C239;HANGUL SYLLABLE SWEONI;Lo;0;L;;;;;N;;;;; C23A;HANGUL SYLLABLE SWEONH;Lo;0;L;;;;;N;;;;; C23B;HANGUL SYLLABLE SWEOD;Lo;0;L;;;;;N;;;;; C23C;HANGUL SYLLABLE SWEOL;Lo;0;L;;;;;N;;;;; C23D;HANGUL SYLLABLE SWEOLG;Lo;0;L;;;;;N;;;;; C23E;HANGUL SYLLABLE SWEOLM;Lo;0;L;;;;;N;;;;; C23F;HANGUL SYLLABLE SWEOLB;Lo;0;L;;;;;N;;;;; C240;HANGUL SYLLABLE SWEOLS;Lo;0;L;;;;;N;;;;; C241;HANGUL SYLLABLE SWEOLT;Lo;0;L;;;;;N;;;;; C242;HANGUL SYLLABLE SWEOLP;Lo;0;L;;;;;N;;;;; C243;HANGUL SYLLABLE SWEOLH;Lo;0;L;;;;;N;;;;; C244;HANGUL SYLLABLE SWEOM;Lo;0;L;;;;;N;;;;; C245;HANGUL SYLLABLE SWEOB;Lo;0;L;;;;;N;;;;; C246;HANGUL SYLLABLE SWEOBS;Lo;0;L;;;;;N;;;;; C247;HANGUL SYLLABLE SWEOS;Lo;0;L;;;;;N;;;;; C248;HANGUL SYLLABLE SWEOSS;Lo;0;L;;;;;N;;;;; C249;HANGUL SYLLABLE SWEONG;Lo;0;L;;;;;N;;;;; C24A;HANGUL SYLLABLE SWEOJ;Lo;0;L;;;;;N;;;;; C24B;HANGUL SYLLABLE SWEOC;Lo;0;L;;;;;N;;;;; C24C;HANGUL SYLLABLE SWEOK;Lo;0;L;;;;;N;;;;; C24D;HANGUL SYLLABLE SWEOT;Lo;0;L;;;;;N;;;;; C24E;HANGUL SYLLABLE SWEOP;Lo;0;L;;;;;N;;;;; C24F;HANGUL SYLLABLE SWEOH;Lo;0;L;;;;;N;;;;; C250;HANGUL SYLLABLE SWE;Lo;0;L;;;;;N;;;;; C251;HANGUL SYLLABLE SWEG;Lo;0;L;;;;;N;;;;; C252;HANGUL SYLLABLE SWEGG;Lo;0;L;;;;;N;;;;; C253;HANGUL SYLLABLE SWEGS;Lo;0;L;;;;;N;;;;; C254;HANGUL SYLLABLE SWEN;Lo;0;L;;;;;N;;;;; C255;HANGUL SYLLABLE SWENI;Lo;0;L;;;;;N;;;;; C256;HANGUL SYLLABLE SWENH;Lo;0;L;;;;;N;;;;; C257;HANGUL SYLLABLE SWED;Lo;0;L;;;;;N;;;;; C258;HANGUL SYLLABLE SWEL;Lo;0;L;;;;;N;;;;; C259;HANGUL SYLLABLE SWELG;Lo;0;L;;;;;N;;;;; C25A;HANGUL SYLLABLE SWELM;Lo;0;L;;;;;N;;;;; C25B;HANGUL SYLLABLE SWELB;Lo;0;L;;;;;N;;;;; C25C;HANGUL SYLLABLE SWELS;Lo;0;L;;;;;N;;;;; C25D;HANGUL SYLLABLE SWELT;Lo;0;L;;;;;N;;;;; C25E;HANGUL SYLLABLE SWELP;Lo;0;L;;;;;N;;;;; C25F;HANGUL SYLLABLE SWELH;Lo;0;L;;;;;N;;;;; C260;HANGUL SYLLABLE SWEM;Lo;0;L;;;;;N;;;;; C261;HANGUL SYLLABLE SWEB;Lo;0;L;;;;;N;;;;; C262;HANGUL SYLLABLE SWEBS;Lo;0;L;;;;;N;;;;; C263;HANGUL SYLLABLE SWES;Lo;0;L;;;;;N;;;;; C264;HANGUL SYLLABLE SWESS;Lo;0;L;;;;;N;;;;; C265;HANGUL SYLLABLE SWENG;Lo;0;L;;;;;N;;;;; C266;HANGUL SYLLABLE SWEJ;Lo;0;L;;;;;N;;;;; C267;HANGUL SYLLABLE SWEC;Lo;0;L;;;;;N;;;;; C268;HANGUL SYLLABLE SWEK;Lo;0;L;;;;;N;;;;; C269;HANGUL SYLLABLE SWET;Lo;0;L;;;;;N;;;;; C26A;HANGUL SYLLABLE SWEP;Lo;0;L;;;;;N;;;;; C26B;HANGUL SYLLABLE SWEH;Lo;0;L;;;;;N;;;;; C26C;HANGUL SYLLABLE SWI;Lo;0;L;;;;;N;;;;; C26D;HANGUL SYLLABLE SWIG;Lo;0;L;;;;;N;;;;; C26E;HANGUL SYLLABLE SWIGG;Lo;0;L;;;;;N;;;;; C26F;HANGUL SYLLABLE SWIGS;Lo;0;L;;;;;N;;;;; C270;HANGUL SYLLABLE SWIN;Lo;0;L;;;;;N;;;;; C271;HANGUL SYLLABLE SWINI;Lo;0;L;;;;;N;;;;; C272;HANGUL SYLLABLE SWINH;Lo;0;L;;;;;N;;;;; C273;HANGUL SYLLABLE SWID;Lo;0;L;;;;;N;;;;; C274;HANGUL SYLLABLE SWIL;Lo;0;L;;;;;N;;;;; C275;HANGUL SYLLABLE SWILG;Lo;0;L;;;;;N;;;;; C276;HANGUL SYLLABLE SWILM;Lo;0;L;;;;;N;;;;; C277;HANGUL SYLLABLE SWILB;Lo;0;L;;;;;N;;;;; C278;HANGUL SYLLABLE SWILS;Lo;0;L;;;;;N;;;;; C279;HANGUL SYLLABLE SWILT;Lo;0;L;;;;;N;;;;; C27A;HANGUL SYLLABLE SWILP;Lo;0;L;;;;;N;;;;; C27B;HANGUL SYLLABLE SWILH;Lo;0;L;;;;;N;;;;; C27C;HANGUL SYLLABLE SWIM;Lo;0;L;;;;;N;;;;; C27D;HANGUL SYLLABLE SWIB;Lo;0;L;;;;;N;;;;; C27E;HANGUL SYLLABLE SWIBS;Lo;0;L;;;;;N;;;;; C27F;HANGUL SYLLABLE SWIS;Lo;0;L;;;;;N;;;;; C280;HANGUL SYLLABLE SWISS;Lo;0;L;;;;;N;;;;; C281;HANGUL SYLLABLE SWING;Lo;0;L;;;;;N;;;;; C282;HANGUL SYLLABLE SWIJ;Lo;0;L;;;;;N;;;;; C283;HANGUL SYLLABLE SWIC;Lo;0;L;;;;;N;;;;; C284;HANGUL SYLLABLE SWIK;Lo;0;L;;;;;N;;;;; C285;HANGUL SYLLABLE SWIT;Lo;0;L;;;;;N;;;;; C286;HANGUL SYLLABLE SWIP;Lo;0;L;;;;;N;;;;; C287;HANGUL SYLLABLE SWIH;Lo;0;L;;;;;N;;;;; C288;HANGUL SYLLABLE SYU;Lo;0;L;;;;;N;;;;; C289;HANGUL SYLLABLE SYUG;Lo;0;L;;;;;N;;;;; C28A;HANGUL SYLLABLE SYUGG;Lo;0;L;;;;;N;;;;; C28B;HANGUL SYLLABLE SYUGS;Lo;0;L;;;;;N;;;;; C28C;HANGUL SYLLABLE SYUN;Lo;0;L;;;;;N;;;;; C28D;HANGUL SYLLABLE SYUNI;Lo;0;L;;;;;N;;;;; C28E;HANGUL SYLLABLE SYUNH;Lo;0;L;;;;;N;;;;; C28F;HANGUL SYLLABLE SYUD;Lo;0;L;;;;;N;;;;; C290;HANGUL SYLLABLE SYUL;Lo;0;L;;;;;N;;;;; C291;HANGUL SYLLABLE SYULG;Lo;0;L;;;;;N;;;;; C292;HANGUL SYLLABLE SYULM;Lo;0;L;;;;;N;;;;; C293;HANGUL SYLLABLE SYULB;Lo;0;L;;;;;N;;;;; C294;HANGUL SYLLABLE SYULS;Lo;0;L;;;;;N;;;;; C295;HANGUL SYLLABLE SYULT;Lo;0;L;;;;;N;;;;; C296;HANGUL SYLLABLE SYULP;Lo;0;L;;;;;N;;;;; C297;HANGUL SYLLABLE SYULH;Lo;0;L;;;;;N;;;;; C298;HANGUL SYLLABLE SYUM;Lo;0;L;;;;;N;;;;; C299;HANGUL SYLLABLE SYUB;Lo;0;L;;;;;N;;;;; C29A;HANGUL SYLLABLE SYUBS;Lo;0;L;;;;;N;;;;; C29B;HANGUL SYLLABLE SYUS;Lo;0;L;;;;;N;;;;; C29C;HANGUL SYLLABLE SYUSS;Lo;0;L;;;;;N;;;;; C29D;HANGUL SYLLABLE SYUNG;Lo;0;L;;;;;N;;;;; C29E;HANGUL SYLLABLE SYUJ;Lo;0;L;;;;;N;;;;; C29F;HANGUL SYLLABLE SYUC;Lo;0;L;;;;;N;;;;; C2A0;HANGUL SYLLABLE SYUK;Lo;0;L;;;;;N;;;;; C2A1;HANGUL SYLLABLE SYUT;Lo;0;L;;;;;N;;;;; C2A2;HANGUL SYLLABLE SYUP;Lo;0;L;;;;;N;;;;; C2A3;HANGUL SYLLABLE SYUH;Lo;0;L;;;;;N;;;;; C2A4;HANGUL SYLLABLE SEU;Lo;0;L;;;;;N;;;;; C2A5;HANGUL SYLLABLE SEUG;Lo;0;L;;;;;N;;;;; C2A6;HANGUL SYLLABLE SEUGG;Lo;0;L;;;;;N;;;;; C2A7;HANGUL SYLLABLE SEUGS;Lo;0;L;;;;;N;;;;; C2A8;HANGUL SYLLABLE SEUN;Lo;0;L;;;;;N;;;;; C2A9;HANGUL SYLLABLE SEUNI;Lo;0;L;;;;;N;;;;; C2AA;HANGUL SYLLABLE SEUNH;Lo;0;L;;;;;N;;;;; C2AB;HANGUL SYLLABLE SEUD;Lo;0;L;;;;;N;;;;; C2AC;HANGUL SYLLABLE SEUL;Lo;0;L;;;;;N;;;;; C2AD;HANGUL SYLLABLE SEULG;Lo;0;L;;;;;N;;;;; C2AE;HANGUL SYLLABLE SEULM;Lo;0;L;;;;;N;;;;; C2AF;HANGUL SYLLABLE SEULB;Lo;0;L;;;;;N;;;;; C2B0;HANGUL SYLLABLE SEULS;Lo;0;L;;;;;N;;;;; C2B1;HANGUL SYLLABLE SEULT;Lo;0;L;;;;;N;;;;; C2B2;HANGUL SYLLABLE SEULP;Lo;0;L;;;;;N;;;;; C2B3;HANGUL SYLLABLE SEULH;Lo;0;L;;;;;N;;;;; C2B4;HANGUL SYLLABLE SEUM;Lo;0;L;;;;;N;;;;; C2B5;HANGUL SYLLABLE SEUB;Lo;0;L;;;;;N;;;;; C2B6;HANGUL SYLLABLE SEUBS;Lo;0;L;;;;;N;;;;; C2B7;HANGUL SYLLABLE SEUS;Lo;0;L;;;;;N;;;;; C2B8;HANGUL SYLLABLE SEUSS;Lo;0;L;;;;;N;;;;; C2B9;HANGUL SYLLABLE SEUNG;Lo;0;L;;;;;N;;;;; C2BA;HANGUL SYLLABLE SEUJ;Lo;0;L;;;;;N;;;;; C2BB;HANGUL SYLLABLE SEUC;Lo;0;L;;;;;N;;;;; C2BC;HANGUL SYLLABLE SEUK;Lo;0;L;;;;;N;;;;; C2BD;HANGUL SYLLABLE SEUT;Lo;0;L;;;;;N;;;;; C2BE;HANGUL SYLLABLE SEUP;Lo;0;L;;;;;N;;;;; C2BF;HANGUL SYLLABLE SEUH;Lo;0;L;;;;;N;;;;; C2C0;HANGUL SYLLABLE SYI;Lo;0;L;;;;;N;;;;; C2C1;HANGUL SYLLABLE SYIG;Lo;0;L;;;;;N;;;;; C2C2;HANGUL SYLLABLE SYIGG;Lo;0;L;;;;;N;;;;; C2C3;HANGUL SYLLABLE SYIGS;Lo;0;L;;;;;N;;;;; C2C4;HANGUL SYLLABLE SYIN;Lo;0;L;;;;;N;;;;; C2C5;HANGUL SYLLABLE SYINI;Lo;0;L;;;;;N;;;;; C2C6;HANGUL SYLLABLE SYINH;Lo;0;L;;;;;N;;;;; C2C7;HANGUL SYLLABLE SYID;Lo;0;L;;;;;N;;;;; C2C8;HANGUL SYLLABLE SYIL;Lo;0;L;;;;;N;;;;; C2C9;HANGUL SYLLABLE SYILG;Lo;0;L;;;;;N;;;;; C2CA;HANGUL SYLLABLE SYILM;Lo;0;L;;;;;N;;;;; C2CB;HANGUL SYLLABLE SYILB;Lo;0;L;;;;;N;;;;; C2CC;HANGUL SYLLABLE SYILS;Lo;0;L;;;;;N;;;;; C2CD;HANGUL SYLLABLE SYILT;Lo;0;L;;;;;N;;;;; C2CE;HANGUL SYLLABLE SYILP;Lo;0;L;;;;;N;;;;; C2CF;HANGUL SYLLABLE SYILH;Lo;0;L;;;;;N;;;;; C2D0;HANGUL SYLLABLE SYIM;Lo;0;L;;;;;N;;;;; C2D1;HANGUL SYLLABLE SYIB;Lo;0;L;;;;;N;;;;; C2D2;HANGUL SYLLABLE SYIBS;Lo;0;L;;;;;N;;;;; C2D3;HANGUL SYLLABLE SYIS;Lo;0;L;;;;;N;;;;; C2D4;HANGUL SYLLABLE SYISS;Lo;0;L;;;;;N;;;;; C2D5;HANGUL SYLLABLE SYING;Lo;0;L;;;;;N;;;;; C2D6;HANGUL SYLLABLE SYIJ;Lo;0;L;;;;;N;;;;; C2D7;HANGUL SYLLABLE SYIC;Lo;0;L;;;;;N;;;;; C2D8;HANGUL SYLLABLE SYIK;Lo;0;L;;;;;N;;;;; C2D9;HANGUL SYLLABLE SYIT;Lo;0;L;;;;;N;;;;; C2DA;HANGUL SYLLABLE SYIP;Lo;0;L;;;;;N;;;;; C2DB;HANGUL SYLLABLE SYIH;Lo;0;L;;;;;N;;;;; C2DC;HANGUL SYLLABLE SI;Lo;0;L;;;;;N;;;;; C2DD;HANGUL SYLLABLE SIG;Lo;0;L;;;;;N;;;;; C2DE;HANGUL SYLLABLE SIGG;Lo;0;L;;;;;N;;;;; C2DF;HANGUL SYLLABLE SIGS;Lo;0;L;;;;;N;;;;; C2E0;HANGUL SYLLABLE SIN;Lo;0;L;;;;;N;;;;; C2E1;HANGUL SYLLABLE SINI;Lo;0;L;;;;;N;;;;; C2E2;HANGUL SYLLABLE SINH;Lo;0;L;;;;;N;;;;; C2E3;HANGUL SYLLABLE SID;Lo;0;L;;;;;N;;;;; C2E4;HANGUL SYLLABLE SIL;Lo;0;L;;;;;N;;;;; C2E5;HANGUL SYLLABLE SILG;Lo;0;L;;;;;N;;;;; C2E6;HANGUL SYLLABLE SILM;Lo;0;L;;;;;N;;;;; C2E7;HANGUL SYLLABLE SILB;Lo;0;L;;;;;N;;;;; C2E8;HANGUL SYLLABLE SILS;Lo;0;L;;;;;N;;;;; C2E9;HANGUL SYLLABLE SILT;Lo;0;L;;;;;N;;;;; C2EA;HANGUL SYLLABLE SILP;Lo;0;L;;;;;N;;;;; C2EB;HANGUL SYLLABLE SILH;Lo;0;L;;;;;N;;;;; C2EC;HANGUL SYLLABLE SIM;Lo;0;L;;;;;N;;;;; C2ED;HANGUL SYLLABLE SIB;Lo;0;L;;;;;N;;;;; C2EE;HANGUL SYLLABLE SIBS;Lo;0;L;;;;;N;;;;; C2EF;HANGUL SYLLABLE SIS;Lo;0;L;;;;;N;;;;; C2F0;HANGUL SYLLABLE SISS;Lo;0;L;;;;;N;;;;; C2F1;HANGUL SYLLABLE SING;Lo;0;L;;;;;N;;;;; C2F2;HANGUL SYLLABLE SIJ;Lo;0;L;;;;;N;;;;; C2F3;HANGUL SYLLABLE SIC;Lo;0;L;;;;;N;;;;; C2F4;HANGUL SYLLABLE SIK;Lo;0;L;;;;;N;;;;; C2F5;HANGUL SYLLABLE SIT;Lo;0;L;;;;;N;;;;; C2F6;HANGUL SYLLABLE SIP;Lo;0;L;;;;;N;;;;; C2F7;HANGUL SYLLABLE SIH;Lo;0;L;;;;;N;;;;; C2F8;HANGUL SYLLABLE SSA;Lo;0;L;;;;;N;;;;; C2F9;HANGUL SYLLABLE SSAG;Lo;0;L;;;;;N;;;;; C2FA;HANGUL SYLLABLE SSAGG;Lo;0;L;;;;;N;;;;; C2FB;HANGUL SYLLABLE SSAGS;Lo;0;L;;;;;N;;;;; C2FC;HANGUL SYLLABLE SSAN;Lo;0;L;;;;;N;;;;; C2FD;HANGUL SYLLABLE SSANI;Lo;0;L;;;;;N;;;;; C2FE;HANGUL SYLLABLE SSANH;Lo;0;L;;;;;N;;;;; C2FF;HANGUL SYLLABLE SSAD;Lo;0;L;;;;;N;;;;; C300;HANGUL SYLLABLE SSAL;Lo;0;L;;;;;N;;;;; C301;HANGUL SYLLABLE SSALG;Lo;0;L;;;;;N;;;;; C302;HANGUL SYLLABLE SSALM;Lo;0;L;;;;;N;;;;; C303;HANGUL SYLLABLE SSALB;Lo;0;L;;;;;N;;;;; C304;HANGUL SYLLABLE SSALS;Lo;0;L;;;;;N;;;;; C305;HANGUL SYLLABLE SSALT;Lo;0;L;;;;;N;;;;; C306;HANGUL SYLLABLE SSALP;Lo;0;L;;;;;N;;;;; C307;HANGUL SYLLABLE SSALH;Lo;0;L;;;;;N;;;;; C308;HANGUL SYLLABLE SSAM;Lo;0;L;;;;;N;;;;; C309;HANGUL SYLLABLE SSAB;Lo;0;L;;;;;N;;;;; C30A;HANGUL SYLLABLE SSABS;Lo;0;L;;;;;N;;;;; C30B;HANGUL SYLLABLE SSAS;Lo;0;L;;;;;N;;;;; C30C;HANGUL SYLLABLE SSASS;Lo;0;L;;;;;N;;;;; C30D;HANGUL SYLLABLE SSANG;Lo;0;L;;;;;N;;;;; C30E;HANGUL SYLLABLE SSAJ;Lo;0;L;;;;;N;;;;; C30F;HANGUL SYLLABLE SSAC;Lo;0;L;;;;;N;;;;; C310;HANGUL SYLLABLE SSAK;Lo;0;L;;;;;N;;;;; C311;HANGUL SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; C312;HANGUL SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; C313;HANGUL SYLLABLE SSAH;Lo;0;L;;;;;N;;;;; C314;HANGUL SYLLABLE SSAE;Lo;0;L;;;;;N;;;;; C315;HANGUL SYLLABLE SSAEG;Lo;0;L;;;;;N;;;;; C316;HANGUL SYLLABLE SSAEGG;Lo;0;L;;;;;N;;;;; C317;HANGUL SYLLABLE SSAEGS;Lo;0;L;;;;;N;;;;; C318;HANGUL SYLLABLE SSAEN;Lo;0;L;;;;;N;;;;; C319;HANGUL SYLLABLE SSAENI;Lo;0;L;;;;;N;;;;; C31A;HANGUL SYLLABLE SSAENH;Lo;0;L;;;;;N;;;;; C31B;HANGUL SYLLABLE SSAED;Lo;0;L;;;;;N;;;;; C31C;HANGUL SYLLABLE SSAEL;Lo;0;L;;;;;N;;;;; C31D;HANGUL SYLLABLE SSAELG;Lo;0;L;;;;;N;;;;; C31E;HANGUL SYLLABLE SSAELM;Lo;0;L;;;;;N;;;;; C31F;HANGUL SYLLABLE SSAELB;Lo;0;L;;;;;N;;;;; C320;HANGUL SYLLABLE SSAELS;Lo;0;L;;;;;N;;;;; C321;HANGUL SYLLABLE SSAELT;Lo;0;L;;;;;N;;;;; C322;HANGUL SYLLABLE SSAELP;Lo;0;L;;;;;N;;;;; C323;HANGUL SYLLABLE SSAELH;Lo;0;L;;;;;N;;;;; C324;HANGUL SYLLABLE SSAEM;Lo;0;L;;;;;N;;;;; C325;HANGUL SYLLABLE SSAEB;Lo;0;L;;;;;N;;;;; C326;HANGUL SYLLABLE SSAEBS;Lo;0;L;;;;;N;;;;; C327;HANGUL SYLLABLE SSAES;Lo;0;L;;;;;N;;;;; C328;HANGUL SYLLABLE SSAESS;Lo;0;L;;;;;N;;;;; C329;HANGUL SYLLABLE SSAENG;Lo;0;L;;;;;N;;;;; C32A;HANGUL SYLLABLE SSAEJ;Lo;0;L;;;;;N;;;;; C32B;HANGUL SYLLABLE SSAEC;Lo;0;L;;;;;N;;;;; C32C;HANGUL SYLLABLE SSAEK;Lo;0;L;;;;;N;;;;; C32D;HANGUL SYLLABLE SSAET;Lo;0;L;;;;;N;;;;; C32E;HANGUL SYLLABLE SSAEP;Lo;0;L;;;;;N;;;;; C32F;HANGUL SYLLABLE SSAEH;Lo;0;L;;;;;N;;;;; C330;HANGUL SYLLABLE SSYA;Lo;0;L;;;;;N;;;;; C331;HANGUL SYLLABLE SSYAG;Lo;0;L;;;;;N;;;;; C332;HANGUL SYLLABLE SSYAGG;Lo;0;L;;;;;N;;;;; C333;HANGUL SYLLABLE SSYAGS;Lo;0;L;;;;;N;;;;; C334;HANGUL SYLLABLE SSYAN;Lo;0;L;;;;;N;;;;; C335;HANGUL SYLLABLE SSYANI;Lo;0;L;;;;;N;;;;; C336;HANGUL SYLLABLE SSYANH;Lo;0;L;;;;;N;;;;; C337;HANGUL SYLLABLE SSYAD;Lo;0;L;;;;;N;;;;; C338;HANGUL SYLLABLE SSYAL;Lo;0;L;;;;;N;;;;; C339;HANGUL SYLLABLE SSYALG;Lo;0;L;;;;;N;;;;; C33A;HANGUL SYLLABLE SSYALM;Lo;0;L;;;;;N;;;;; C33B;HANGUL SYLLABLE SSYALB;Lo;0;L;;;;;N;;;;; C33C;HANGUL SYLLABLE SSYALS;Lo;0;L;;;;;N;;;;; C33D;HANGUL SYLLABLE SSYALT;Lo;0;L;;;;;N;;;;; C33E;HANGUL SYLLABLE SSYALP;Lo;0;L;;;;;N;;;;; C33F;HANGUL SYLLABLE SSYALH;Lo;0;L;;;;;N;;;;; C340;HANGUL SYLLABLE SSYAM;Lo;0;L;;;;;N;;;;; C341;HANGUL SYLLABLE SSYAB;Lo;0;L;;;;;N;;;;; C342;HANGUL SYLLABLE SSYABS;Lo;0;L;;;;;N;;;;; C343;HANGUL SYLLABLE SSYAS;Lo;0;L;;;;;N;;;;; C344;HANGUL SYLLABLE SSYASS;Lo;0;L;;;;;N;;;;; C345;HANGUL SYLLABLE SSYANG;Lo;0;L;;;;;N;;;;; C346;HANGUL SYLLABLE SSYAJ;Lo;0;L;;;;;N;;;;; C347;HANGUL SYLLABLE SSYAC;Lo;0;L;;;;;N;;;;; C348;HANGUL SYLLABLE SSYAK;Lo;0;L;;;;;N;;;;; C349;HANGUL SYLLABLE SSYAT;Lo;0;L;;;;;N;;;;; C34A;HANGUL SYLLABLE SSYAP;Lo;0;L;;;;;N;;;;; C34B;HANGUL SYLLABLE SSYAH;Lo;0;L;;;;;N;;;;; C34C;HANGUL SYLLABLE SSYAE;Lo;0;L;;;;;N;;;;; C34D;HANGUL SYLLABLE SSYAEG;Lo;0;L;;;;;N;;;;; C34E;HANGUL SYLLABLE SSYAEGG;Lo;0;L;;;;;N;;;;; C34F;HANGUL SYLLABLE SSYAEGS;Lo;0;L;;;;;N;;;;; C350;HANGUL SYLLABLE SSYAEN;Lo;0;L;;;;;N;;;;; C351;HANGUL SYLLABLE SSYAENI;Lo;0;L;;;;;N;;;;; C352;HANGUL SYLLABLE SSYAENH;Lo;0;L;;;;;N;;;;; C353;HANGUL SYLLABLE SSYAED;Lo;0;L;;;;;N;;;;; C354;HANGUL SYLLABLE SSYAEL;Lo;0;L;;;;;N;;;;; C355;HANGUL SYLLABLE SSYAELG;Lo;0;L;;;;;N;;;;; C356;HANGUL SYLLABLE SSYAELM;Lo;0;L;;;;;N;;;;; C357;HANGUL SYLLABLE SSYAELB;Lo;0;L;;;;;N;;;;; C358;HANGUL SYLLABLE SSYAELS;Lo;0;L;;;;;N;;;;; C359;HANGUL SYLLABLE SSYAELT;Lo;0;L;;;;;N;;;;; C35A;HANGUL SYLLABLE SSYAELP;Lo;0;L;;;;;N;;;;; C35B;HANGUL SYLLABLE SSYAELH;Lo;0;L;;;;;N;;;;; C35C;HANGUL SYLLABLE SSYAEM;Lo;0;L;;;;;N;;;;; C35D;HANGUL SYLLABLE SSYAEB;Lo;0;L;;;;;N;;;;; C35E;HANGUL SYLLABLE SSYAEBS;Lo;0;L;;;;;N;;;;; C35F;HANGUL SYLLABLE SSYAES;Lo;0;L;;;;;N;;;;; C360;HANGUL SYLLABLE SSYAESS;Lo;0;L;;;;;N;;;;; C361;HANGUL SYLLABLE SSYAENG;Lo;0;L;;;;;N;;;;; C362;HANGUL SYLLABLE SSYAEJ;Lo;0;L;;;;;N;;;;; C363;HANGUL SYLLABLE SSYAEC;Lo;0;L;;;;;N;;;;; C364;HANGUL SYLLABLE SSYAEK;Lo;0;L;;;;;N;;;;; C365;HANGUL SYLLABLE SSYAET;Lo;0;L;;;;;N;;;;; C366;HANGUL SYLLABLE SSYAEP;Lo;0;L;;;;;N;;;;; C367;HANGUL SYLLABLE SSYAEH;Lo;0;L;;;;;N;;;;; C368;HANGUL SYLLABLE SSEO;Lo;0;L;;;;;N;;;;; C369;HANGUL SYLLABLE SSEOG;Lo;0;L;;;;;N;;;;; C36A;HANGUL SYLLABLE SSEOGG;Lo;0;L;;;;;N;;;;; C36B;HANGUL SYLLABLE SSEOGS;Lo;0;L;;;;;N;;;;; C36C;HANGUL SYLLABLE SSEON;Lo;0;L;;;;;N;;;;; C36D;HANGUL SYLLABLE SSEONI;Lo;0;L;;;;;N;;;;; C36E;HANGUL SYLLABLE SSEONH;Lo;0;L;;;;;N;;;;; C36F;HANGUL SYLLABLE SSEOD;Lo;0;L;;;;;N;;;;; C370;HANGUL SYLLABLE SSEOL;Lo;0;L;;;;;N;;;;; C371;HANGUL SYLLABLE SSEOLG;Lo;0;L;;;;;N;;;;; C372;HANGUL SYLLABLE SSEOLM;Lo;0;L;;;;;N;;;;; C373;HANGUL SYLLABLE SSEOLB;Lo;0;L;;;;;N;;;;; C374;HANGUL SYLLABLE SSEOLS;Lo;0;L;;;;;N;;;;; C375;HANGUL SYLLABLE SSEOLT;Lo;0;L;;;;;N;;;;; C376;HANGUL SYLLABLE SSEOLP;Lo;0;L;;;;;N;;;;; C377;HANGUL SYLLABLE SSEOLH;Lo;0;L;;;;;N;;;;; C378;HANGUL SYLLABLE SSEOM;Lo;0;L;;;;;N;;;;; C379;HANGUL SYLLABLE SSEOB;Lo;0;L;;;;;N;;;;; C37A;HANGUL SYLLABLE SSEOBS;Lo;0;L;;;;;N;;;;; C37B;HANGUL SYLLABLE SSEOS;Lo;0;L;;;;;N;;;;; C37C;HANGUL SYLLABLE SSEOSS;Lo;0;L;;;;;N;;;;; C37D;HANGUL SYLLABLE SSEONG;Lo;0;L;;;;;N;;;;; C37E;HANGUL SYLLABLE SSEOJ;Lo;0;L;;;;;N;;;;; C37F;HANGUL SYLLABLE SSEOC;Lo;0;L;;;;;N;;;;; C380;HANGUL SYLLABLE SSEOK;Lo;0;L;;;;;N;;;;; C381;HANGUL SYLLABLE SSEOT;Lo;0;L;;;;;N;;;;; C382;HANGUL SYLLABLE SSEOP;Lo;0;L;;;;;N;;;;; C383;HANGUL SYLLABLE SSEOH;Lo;0;L;;;;;N;;;;; C384;HANGUL SYLLABLE SSE;Lo;0;L;;;;;N;;;;; C385;HANGUL SYLLABLE SSEG;Lo;0;L;;;;;N;;;;; C386;HANGUL SYLLABLE SSEGG;Lo;0;L;;;;;N;;;;; C387;HANGUL SYLLABLE SSEGS;Lo;0;L;;;;;N;;;;; C388;HANGUL SYLLABLE SSEN;Lo;0;L;;;;;N;;;;; C389;HANGUL SYLLABLE SSENI;Lo;0;L;;;;;N;;;;; C38A;HANGUL SYLLABLE SSENH;Lo;0;L;;;;;N;;;;; C38B;HANGUL SYLLABLE SSED;Lo;0;L;;;;;N;;;;; C38C;HANGUL SYLLABLE SSEL;Lo;0;L;;;;;N;;;;; C38D;HANGUL SYLLABLE SSELG;Lo;0;L;;;;;N;;;;; C38E;HANGUL SYLLABLE SSELM;Lo;0;L;;;;;N;;;;; C38F;HANGUL SYLLABLE SSELB;Lo;0;L;;;;;N;;;;; C390;HANGUL SYLLABLE SSELS;Lo;0;L;;;;;N;;;;; C391;HANGUL SYLLABLE SSELT;Lo;0;L;;;;;N;;;;; C392;HANGUL SYLLABLE SSELP;Lo;0;L;;;;;N;;;;; C393;HANGUL SYLLABLE SSELH;Lo;0;L;;;;;N;;;;; C394;HANGUL SYLLABLE SSEM;Lo;0;L;;;;;N;;;;; C395;HANGUL SYLLABLE SSEB;Lo;0;L;;;;;N;;;;; C396;HANGUL SYLLABLE SSEBS;Lo;0;L;;;;;N;;;;; C397;HANGUL SYLLABLE SSES;Lo;0;L;;;;;N;;;;; C398;HANGUL SYLLABLE SSESS;Lo;0;L;;;;;N;;;;; C399;HANGUL SYLLABLE SSENG;Lo;0;L;;;;;N;;;;; C39A;HANGUL SYLLABLE SSEJ;Lo;0;L;;;;;N;;;;; C39B;HANGUL SYLLABLE SSEC;Lo;0;L;;;;;N;;;;; C39C;HANGUL SYLLABLE SSEK;Lo;0;L;;;;;N;;;;; C39D;HANGUL SYLLABLE SSET;Lo;0;L;;;;;N;;;;; C39E;HANGUL SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; C39F;HANGUL SYLLABLE SSEH;Lo;0;L;;;;;N;;;;; C3A0;HANGUL SYLLABLE SSYEO;Lo;0;L;;;;;N;;;;; C3A1;HANGUL SYLLABLE SSYEOG;Lo;0;L;;;;;N;;;;; C3A2;HANGUL SYLLABLE SSYEOGG;Lo;0;L;;;;;N;;;;; C3A3;HANGUL SYLLABLE SSYEOGS;Lo;0;L;;;;;N;;;;; C3A4;HANGUL SYLLABLE SSYEON;Lo;0;L;;;;;N;;;;; C3A5;HANGUL SYLLABLE SSYEONI;Lo;0;L;;;;;N;;;;; C3A6;HANGUL SYLLABLE SSYEONH;Lo;0;L;;;;;N;;;;; C3A7;HANGUL SYLLABLE SSYEOD;Lo;0;L;;;;;N;;;;; C3A8;HANGUL SYLLABLE SSYEOL;Lo;0;L;;;;;N;;;;; C3A9;HANGUL SYLLABLE SSYEOLG;Lo;0;L;;;;;N;;;;; C3AA;HANGUL SYLLABLE SSYEOLM;Lo;0;L;;;;;N;;;;; C3AB;HANGUL SYLLABLE SSYEOLB;Lo;0;L;;;;;N;;;;; C3AC;HANGUL SYLLABLE SSYEOLS;Lo;0;L;;;;;N;;;;; C3AD;HANGUL SYLLABLE SSYEOLT;Lo;0;L;;;;;N;;;;; C3AE;HANGUL SYLLABLE SSYEOLP;Lo;0;L;;;;;N;;;;; C3AF;HANGUL SYLLABLE SSYEOLH;Lo;0;L;;;;;N;;;;; C3B0;HANGUL SYLLABLE SSYEOM;Lo;0;L;;;;;N;;;;; C3B1;HANGUL SYLLABLE SSYEOB;Lo;0;L;;;;;N;;;;; C3B2;HANGUL SYLLABLE SSYEOBS;Lo;0;L;;;;;N;;;;; C3B3;HANGUL SYLLABLE SSYEOS;Lo;0;L;;;;;N;;;;; C3B4;HANGUL SYLLABLE SSYEOSS;Lo;0;L;;;;;N;;;;; C3B5;HANGUL SYLLABLE SSYEONG;Lo;0;L;;;;;N;;;;; C3B6;HANGUL SYLLABLE SSYEOJ;Lo;0;L;;;;;N;;;;; C3B7;HANGUL SYLLABLE SSYEOC;Lo;0;L;;;;;N;;;;; C3B8;HANGUL SYLLABLE SSYEOK;Lo;0;L;;;;;N;;;;; C3B9;HANGUL SYLLABLE SSYEOT;Lo;0;L;;;;;N;;;;; C3BA;HANGUL SYLLABLE SSYEOP;Lo;0;L;;;;;N;;;;; C3BB;HANGUL SYLLABLE SSYEOH;Lo;0;L;;;;;N;;;;; C3BC;HANGUL SYLLABLE SSYE;Lo;0;L;;;;;N;;;;; C3BD;HANGUL SYLLABLE SSYEG;Lo;0;L;;;;;N;;;;; C3BE;HANGUL SYLLABLE SSYEGG;Lo;0;L;;;;;N;;;;; C3BF;HANGUL SYLLABLE SSYEGS;Lo;0;L;;;;;N;;;;; C3C0;HANGUL SYLLABLE SSYEN;Lo;0;L;;;;;N;;;;; C3C1;HANGUL SYLLABLE SSYENI;Lo;0;L;;;;;N;;;;; C3C2;HANGUL SYLLABLE SSYENH;Lo;0;L;;;;;N;;;;; C3C3;HANGUL SYLLABLE SSYED;Lo;0;L;;;;;N;;;;; C3C4;HANGUL SYLLABLE SSYEL;Lo;0;L;;;;;N;;;;; C3C5;HANGUL SYLLABLE SSYELG;Lo;0;L;;;;;N;;;;; C3C6;HANGUL SYLLABLE SSYELM;Lo;0;L;;;;;N;;;;; C3C7;HANGUL SYLLABLE SSYELB;Lo;0;L;;;;;N;;;;; C3C8;HANGUL SYLLABLE SSYELS;Lo;0;L;;;;;N;;;;; C3C9;HANGUL SYLLABLE SSYELT;Lo;0;L;;;;;N;;;;; C3CA;HANGUL SYLLABLE SSYELP;Lo;0;L;;;;;N;;;;; C3CB;HANGUL SYLLABLE SSYELH;Lo;0;L;;;;;N;;;;; C3CC;HANGUL SYLLABLE SSYEM;Lo;0;L;;;;;N;;;;; C3CD;HANGUL SYLLABLE SSYEB;Lo;0;L;;;;;N;;;;; C3CE;HANGUL SYLLABLE SSYEBS;Lo;0;L;;;;;N;;;;; C3CF;HANGUL SYLLABLE SSYES;Lo;0;L;;;;;N;;;;; C3D0;HANGUL SYLLABLE SSYESS;Lo;0;L;;;;;N;;;;; C3D1;HANGUL SYLLABLE SSYENG;Lo;0;L;;;;;N;;;;; C3D2;HANGUL SYLLABLE SSYEJ;Lo;0;L;;;;;N;;;;; C3D3;HANGUL SYLLABLE SSYEC;Lo;0;L;;;;;N;;;;; C3D4;HANGUL SYLLABLE SSYEK;Lo;0;L;;;;;N;;;;; C3D5;HANGUL SYLLABLE SSYET;Lo;0;L;;;;;N;;;;; C3D6;HANGUL SYLLABLE SSYEP;Lo;0;L;;;;;N;;;;; C3D7;HANGUL SYLLABLE SSYEH;Lo;0;L;;;;;N;;;;; C3D8;HANGUL SYLLABLE SSO;Lo;0;L;;;;;N;;;;; C3D9;HANGUL SYLLABLE SSOG;Lo;0;L;;;;;N;;;;; C3DA;HANGUL SYLLABLE SSOGG;Lo;0;L;;;;;N;;;;; C3DB;HANGUL SYLLABLE SSOGS;Lo;0;L;;;;;N;;;;; C3DC;HANGUL SYLLABLE SSON;Lo;0;L;;;;;N;;;;; C3DD;HANGUL SYLLABLE SSONI;Lo;0;L;;;;;N;;;;; C3DE;HANGUL SYLLABLE SSONH;Lo;0;L;;;;;N;;;;; C3DF;HANGUL SYLLABLE SSOD;Lo;0;L;;;;;N;;;;; C3E0;HANGUL SYLLABLE SSOL;Lo;0;L;;;;;N;;;;; C3E1;HANGUL SYLLABLE SSOLG;Lo;0;L;;;;;N;;;;; C3E2;HANGUL SYLLABLE SSOLM;Lo;0;L;;;;;N;;;;; C3E3;HANGUL SYLLABLE SSOLB;Lo;0;L;;;;;N;;;;; C3E4;HANGUL SYLLABLE SSOLS;Lo;0;L;;;;;N;;;;; C3E5;HANGUL SYLLABLE SSOLT;Lo;0;L;;;;;N;;;;; C3E6;HANGUL SYLLABLE SSOLP;Lo;0;L;;;;;N;;;;; C3E7;HANGUL SYLLABLE SSOLH;Lo;0;L;;;;;N;;;;; C3E8;HANGUL SYLLABLE SSOM;Lo;0;L;;;;;N;;;;; C3E9;HANGUL SYLLABLE SSOB;Lo;0;L;;;;;N;;;;; C3EA;HANGUL SYLLABLE SSOBS;Lo;0;L;;;;;N;;;;; C3EB;HANGUL SYLLABLE SSOS;Lo;0;L;;;;;N;;;;; C3EC;HANGUL SYLLABLE SSOSS;Lo;0;L;;;;;N;;;;; C3ED;HANGUL SYLLABLE SSONG;Lo;0;L;;;;;N;;;;; C3EE;HANGUL SYLLABLE SSOJ;Lo;0;L;;;;;N;;;;; C3EF;HANGUL SYLLABLE SSOC;Lo;0;L;;;;;N;;;;; C3F0;HANGUL SYLLABLE SSOK;Lo;0;L;;;;;N;;;;; C3F1;HANGUL SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; C3F2;HANGUL SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; C3F3;HANGUL SYLLABLE SSOH;Lo;0;L;;;;;N;;;;; C3F4;HANGUL SYLLABLE SSWA;Lo;0;L;;;;;N;;;;; C3F5;HANGUL SYLLABLE SSWAG;Lo;0;L;;;;;N;;;;; C3F6;HANGUL SYLLABLE SSWAGG;Lo;0;L;;;;;N;;;;; C3F7;HANGUL SYLLABLE SSWAGS;Lo;0;L;;;;;N;;;;; C3F8;HANGUL SYLLABLE SSWAN;Lo;0;L;;;;;N;;;;; C3F9;HANGUL SYLLABLE SSWANI;Lo;0;L;;;;;N;;;;; C3FA;HANGUL SYLLABLE SSWANH;Lo;0;L;;;;;N;;;;; C3FB;HANGUL SYLLABLE SSWAD;Lo;0;L;;;;;N;;;;; C3FC;HANGUL SYLLABLE SSWAL;Lo;0;L;;;;;N;;;;; C3FD;HANGUL SYLLABLE SSWALG;Lo;0;L;;;;;N;;;;; C3FE;HANGUL SYLLABLE SSWALM;Lo;0;L;;;;;N;;;;; C3FF;HANGUL SYLLABLE SSWALB;Lo;0;L;;;;;N;;;;; C400;HANGUL SYLLABLE SSWALS;Lo;0;L;;;;;N;;;;; C401;HANGUL SYLLABLE SSWALT;Lo;0;L;;;;;N;;;;; C402;HANGUL SYLLABLE SSWALP;Lo;0;L;;;;;N;;;;; C403;HANGUL SYLLABLE SSWALH;Lo;0;L;;;;;N;;;;; C404;HANGUL SYLLABLE SSWAM;Lo;0;L;;;;;N;;;;; C405;HANGUL SYLLABLE SSWAB;Lo;0;L;;;;;N;;;;; C406;HANGUL SYLLABLE SSWABS;Lo;0;L;;;;;N;;;;; C407;HANGUL SYLLABLE SSWAS;Lo;0;L;;;;;N;;;;; C408;HANGUL SYLLABLE SSWASS;Lo;0;L;;;;;N;;;;; C409;HANGUL SYLLABLE SSWANG;Lo;0;L;;;;;N;;;;; C40A;HANGUL SYLLABLE SSWAJ;Lo;0;L;;;;;N;;;;; C40B;HANGUL SYLLABLE SSWAC;Lo;0;L;;;;;N;;;;; C40C;HANGUL SYLLABLE SSWAK;Lo;0;L;;;;;N;;;;; C40D;HANGUL SYLLABLE SSWAT;Lo;0;L;;;;;N;;;;; C40E;HANGUL SYLLABLE SSWAP;Lo;0;L;;;;;N;;;;; C40F;HANGUL SYLLABLE SSWAH;Lo;0;L;;;;;N;;;;; C410;HANGUL SYLLABLE SSWAE;Lo;0;L;;;;;N;;;;; C411;HANGUL SYLLABLE SSWAEG;Lo;0;L;;;;;N;;;;; C412;HANGUL SYLLABLE SSWAEGG;Lo;0;L;;;;;N;;;;; C413;HANGUL SYLLABLE SSWAEGS;Lo;0;L;;;;;N;;;;; C414;HANGUL SYLLABLE SSWAEN;Lo;0;L;;;;;N;;;;; C415;HANGUL SYLLABLE SSWAENI;Lo;0;L;;;;;N;;;;; C416;HANGUL SYLLABLE SSWAENH;Lo;0;L;;;;;N;;;;; C417;HANGUL SYLLABLE SSWAED;Lo;0;L;;;;;N;;;;; C418;HANGUL SYLLABLE SSWAEL;Lo;0;L;;;;;N;;;;; C419;HANGUL SYLLABLE SSWAELG;Lo;0;L;;;;;N;;;;; C41A;HANGUL SYLLABLE SSWAELM;Lo;0;L;;;;;N;;;;; C41B;HANGUL SYLLABLE SSWAELB;Lo;0;L;;;;;N;;;;; C41C;HANGUL SYLLABLE SSWAELS;Lo;0;L;;;;;N;;;;; C41D;HANGUL SYLLABLE SSWAELT;Lo;0;L;;;;;N;;;;; C41E;HANGUL SYLLABLE SSWAELP;Lo;0;L;;;;;N;;;;; C41F;HANGUL SYLLABLE SSWAELH;Lo;0;L;;;;;N;;;;; C420;HANGUL SYLLABLE SSWAEM;Lo;0;L;;;;;N;;;;; C421;HANGUL SYLLABLE SSWAEB;Lo;0;L;;;;;N;;;;; C422;HANGUL SYLLABLE SSWAEBS;Lo;0;L;;;;;N;;;;; C423;HANGUL SYLLABLE SSWAES;Lo;0;L;;;;;N;;;;; C424;HANGUL SYLLABLE SSWAESS;Lo;0;L;;;;;N;;;;; C425;HANGUL SYLLABLE SSWAENG;Lo;0;L;;;;;N;;;;; C426;HANGUL SYLLABLE SSWAEJ;Lo;0;L;;;;;N;;;;; C427;HANGUL SYLLABLE SSWAEC;Lo;0;L;;;;;N;;;;; C428;HANGUL SYLLABLE SSWAEK;Lo;0;L;;;;;N;;;;; C429;HANGUL SYLLABLE SSWAET;Lo;0;L;;;;;N;;;;; C42A;HANGUL SYLLABLE SSWAEP;Lo;0;L;;;;;N;;;;; C42B;HANGUL SYLLABLE SSWAEH;Lo;0;L;;;;;N;;;;; C42C;HANGUL SYLLABLE SSOE;Lo;0;L;;;;;N;;;;; C42D;HANGUL SYLLABLE SSOEG;Lo;0;L;;;;;N;;;;; C42E;HANGUL SYLLABLE SSOEGG;Lo;0;L;;;;;N;;;;; C42F;HANGUL SYLLABLE SSOEGS;Lo;0;L;;;;;N;;;;; C430;HANGUL SYLLABLE SSOEN;Lo;0;L;;;;;N;;;;; C431;HANGUL SYLLABLE SSOENI;Lo;0;L;;;;;N;;;;; C432;HANGUL SYLLABLE SSOENH;Lo;0;L;;;;;N;;;;; C433;HANGUL SYLLABLE SSOED;Lo;0;L;;;;;N;;;;; C434;HANGUL SYLLABLE SSOEL;Lo;0;L;;;;;N;;;;; C435;HANGUL SYLLABLE SSOELG;Lo;0;L;;;;;N;;;;; C436;HANGUL SYLLABLE SSOELM;Lo;0;L;;;;;N;;;;; C437;HANGUL SYLLABLE SSOELB;Lo;0;L;;;;;N;;;;; C438;HANGUL SYLLABLE SSOELS;Lo;0;L;;;;;N;;;;; C439;HANGUL SYLLABLE SSOELT;Lo;0;L;;;;;N;;;;; C43A;HANGUL SYLLABLE SSOELP;Lo;0;L;;;;;N;;;;; C43B;HANGUL SYLLABLE SSOELH;Lo;0;L;;;;;N;;;;; C43C;HANGUL SYLLABLE SSOEM;Lo;0;L;;;;;N;;;;; C43D;HANGUL SYLLABLE SSOEB;Lo;0;L;;;;;N;;;;; C43E;HANGUL SYLLABLE SSOEBS;Lo;0;L;;;;;N;;;;; C43F;HANGUL SYLLABLE SSOES;Lo;0;L;;;;;N;;;;; C440;HANGUL SYLLABLE SSOESS;Lo;0;L;;;;;N;;;;; C441;HANGUL SYLLABLE SSOENG;Lo;0;L;;;;;N;;;;; C442;HANGUL SYLLABLE SSOEJ;Lo;0;L;;;;;N;;;;; C443;HANGUL SYLLABLE SSOEC;Lo;0;L;;;;;N;;;;; C444;HANGUL SYLLABLE SSOEK;Lo;0;L;;;;;N;;;;; C445;HANGUL SYLLABLE SSOET;Lo;0;L;;;;;N;;;;; C446;HANGUL SYLLABLE SSOEP;Lo;0;L;;;;;N;;;;; C447;HANGUL SYLLABLE SSOEH;Lo;0;L;;;;;N;;;;; C448;HANGUL SYLLABLE SSYO;Lo;0;L;;;;;N;;;;; C449;HANGUL SYLLABLE SSYOG;Lo;0;L;;;;;N;;;;; C44A;HANGUL SYLLABLE SSYOGG;Lo;0;L;;;;;N;;;;; C44B;HANGUL SYLLABLE SSYOGS;Lo;0;L;;;;;N;;;;; C44C;HANGUL SYLLABLE SSYON;Lo;0;L;;;;;N;;;;; C44D;HANGUL SYLLABLE SSYONI;Lo;0;L;;;;;N;;;;; C44E;HANGUL SYLLABLE SSYONH;Lo;0;L;;;;;N;;;;; C44F;HANGUL SYLLABLE SSYOD;Lo;0;L;;;;;N;;;;; C450;HANGUL SYLLABLE SSYOL;Lo;0;L;;;;;N;;;;; C451;HANGUL SYLLABLE SSYOLG;Lo;0;L;;;;;N;;;;; C452;HANGUL SYLLABLE SSYOLM;Lo;0;L;;;;;N;;;;; C453;HANGUL SYLLABLE SSYOLB;Lo;0;L;;;;;N;;;;; C454;HANGUL SYLLABLE SSYOLS;Lo;0;L;;;;;N;;;;; C455;HANGUL SYLLABLE SSYOLT;Lo;0;L;;;;;N;;;;; C456;HANGUL SYLLABLE SSYOLP;Lo;0;L;;;;;N;;;;; C457;HANGUL SYLLABLE SSYOLH;Lo;0;L;;;;;N;;;;; C458;HANGUL SYLLABLE SSYOM;Lo;0;L;;;;;N;;;;; C459;HANGUL SYLLABLE SSYOB;Lo;0;L;;;;;N;;;;; C45A;HANGUL SYLLABLE SSYOBS;Lo;0;L;;;;;N;;;;; C45B;HANGUL SYLLABLE SSYOS;Lo;0;L;;;;;N;;;;; C45C;HANGUL SYLLABLE SSYOSS;Lo;0;L;;;;;N;;;;; C45D;HANGUL SYLLABLE SSYONG;Lo;0;L;;;;;N;;;;; C45E;HANGUL SYLLABLE SSYOJ;Lo;0;L;;;;;N;;;;; C45F;HANGUL SYLLABLE SSYOC;Lo;0;L;;;;;N;;;;; C460;HANGUL SYLLABLE SSYOK;Lo;0;L;;;;;N;;;;; C461;HANGUL SYLLABLE SSYOT;Lo;0;L;;;;;N;;;;; C462;HANGUL SYLLABLE SSYOP;Lo;0;L;;;;;N;;;;; C463;HANGUL SYLLABLE SSYOH;Lo;0;L;;;;;N;;;;; C464;HANGUL SYLLABLE SSU;Lo;0;L;;;;;N;;;;; C465;HANGUL SYLLABLE SSUG;Lo;0;L;;;;;N;;;;; C466;HANGUL SYLLABLE SSUGG;Lo;0;L;;;;;N;;;;; C467;HANGUL SYLLABLE SSUGS;Lo;0;L;;;;;N;;;;; C468;HANGUL SYLLABLE SSUN;Lo;0;L;;;;;N;;;;; C469;HANGUL SYLLABLE SSUNI;Lo;0;L;;;;;N;;;;; C46A;HANGUL SYLLABLE SSUNH;Lo;0;L;;;;;N;;;;; C46B;HANGUL SYLLABLE SSUD;Lo;0;L;;;;;N;;;;; C46C;HANGUL SYLLABLE SSUL;Lo;0;L;;;;;N;;;;; C46D;HANGUL SYLLABLE SSULG;Lo;0;L;;;;;N;;;;; C46E;HANGUL SYLLABLE SSULM;Lo;0;L;;;;;N;;;;; C46F;HANGUL SYLLABLE SSULB;Lo;0;L;;;;;N;;;;; C470;HANGUL SYLLABLE SSULS;Lo;0;L;;;;;N;;;;; C471;HANGUL SYLLABLE SSULT;Lo;0;L;;;;;N;;;;; C472;HANGUL SYLLABLE SSULP;Lo;0;L;;;;;N;;;;; C473;HANGUL SYLLABLE SSULH;Lo;0;L;;;;;N;;;;; C474;HANGUL SYLLABLE SSUM;Lo;0;L;;;;;N;;;;; C475;HANGUL SYLLABLE SSUB;Lo;0;L;;;;;N;;;;; C476;HANGUL SYLLABLE SSUBS;Lo;0;L;;;;;N;;;;; C477;HANGUL SYLLABLE SSUS;Lo;0;L;;;;;N;;;;; C478;HANGUL SYLLABLE SSUSS;Lo;0;L;;;;;N;;;;; C479;HANGUL SYLLABLE SSUNG;Lo;0;L;;;;;N;;;;; C47A;HANGUL SYLLABLE SSUJ;Lo;0;L;;;;;N;;;;; C47B;HANGUL SYLLABLE SSUC;Lo;0;L;;;;;N;;;;; C47C;HANGUL SYLLABLE SSUK;Lo;0;L;;;;;N;;;;; C47D;HANGUL SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; C47E;HANGUL SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; C47F;HANGUL SYLLABLE SSUH;Lo;0;L;;;;;N;;;;; C480;HANGUL SYLLABLE SSWEO;Lo;0;L;;;;;N;;;;; C481;HANGUL SYLLABLE SSWEOG;Lo;0;L;;;;;N;;;;; C482;HANGUL SYLLABLE SSWEOGG;Lo;0;L;;;;;N;;;;; C483;HANGUL SYLLABLE SSWEOGS;Lo;0;L;;;;;N;;;;; C484;HANGUL SYLLABLE SSWEON;Lo;0;L;;;;;N;;;;; C485;HANGUL SYLLABLE SSWEONI;Lo;0;L;;;;;N;;;;; C486;HANGUL SYLLABLE SSWEONH;Lo;0;L;;;;;N;;;;; C487;HANGUL SYLLABLE SSWEOD;Lo;0;L;;;;;N;;;;; C488;HANGUL SYLLABLE SSWEOL;Lo;0;L;;;;;N;;;;; C489;HANGUL SYLLABLE SSWEOLG;Lo;0;L;;;;;N;;;;; C48A;HANGUL SYLLABLE SSWEOLM;Lo;0;L;;;;;N;;;;; C48B;HANGUL SYLLABLE SSWEOLB;Lo;0;L;;;;;N;;;;; C48C;HANGUL SYLLABLE SSWEOLS;Lo;0;L;;;;;N;;;;; C48D;HANGUL SYLLABLE SSWEOLT;Lo;0;L;;;;;N;;;;; C48E;HANGUL SYLLABLE SSWEOLP;Lo;0;L;;;;;N;;;;; C48F;HANGUL SYLLABLE SSWEOLH;Lo;0;L;;;;;N;;;;; C490;HANGUL SYLLABLE SSWEOM;Lo;0;L;;;;;N;;;;; C491;HANGUL SYLLABLE SSWEOB;Lo;0;L;;;;;N;;;;; C492;HANGUL SYLLABLE SSWEOBS;Lo;0;L;;;;;N;;;;; C493;HANGUL SYLLABLE SSWEOS;Lo;0;L;;;;;N;;;;; C494;HANGUL SYLLABLE SSWEOSS;Lo;0;L;;;;;N;;;;; C495;HANGUL SYLLABLE SSWEONG;Lo;0;L;;;;;N;;;;; C496;HANGUL SYLLABLE SSWEOJ;Lo;0;L;;;;;N;;;;; C497;HANGUL SYLLABLE SSWEOC;Lo;0;L;;;;;N;;;;; C498;HANGUL SYLLABLE SSWEOK;Lo;0;L;;;;;N;;;;; C499;HANGUL SYLLABLE SSWEOT;Lo;0;L;;;;;N;;;;; C49A;HANGUL SYLLABLE SSWEOP;Lo;0;L;;;;;N;;;;; C49B;HANGUL SYLLABLE SSWEOH;Lo;0;L;;;;;N;;;;; C49C;HANGUL SYLLABLE SSWE;Lo;0;L;;;;;N;;;;; C49D;HANGUL SYLLABLE SSWEG;Lo;0;L;;;;;N;;;;; C49E;HANGUL SYLLABLE SSWEGG;Lo;0;L;;;;;N;;;;; C49F;HANGUL SYLLABLE SSWEGS;Lo;0;L;;;;;N;;;;; C4A0;HANGUL SYLLABLE SSWEN;Lo;0;L;;;;;N;;;;; C4A1;HANGUL SYLLABLE SSWENI;Lo;0;L;;;;;N;;;;; C4A2;HANGUL SYLLABLE SSWENH;Lo;0;L;;;;;N;;;;; C4A3;HANGUL SYLLABLE SSWED;Lo;0;L;;;;;N;;;;; C4A4;HANGUL SYLLABLE SSWEL;Lo;0;L;;;;;N;;;;; C4A5;HANGUL SYLLABLE SSWELG;Lo;0;L;;;;;N;;;;; C4A6;HANGUL SYLLABLE SSWELM;Lo;0;L;;;;;N;;;;; C4A7;HANGUL SYLLABLE SSWELB;Lo;0;L;;;;;N;;;;; C4A8;HANGUL SYLLABLE SSWELS;Lo;0;L;;;;;N;;;;; C4A9;HANGUL SYLLABLE SSWELT;Lo;0;L;;;;;N;;;;; C4AA;HANGUL SYLLABLE SSWELP;Lo;0;L;;;;;N;;;;; C4AB;HANGUL SYLLABLE SSWELH;Lo;0;L;;;;;N;;;;; C4AC;HANGUL SYLLABLE SSWEM;Lo;0;L;;;;;N;;;;; C4AD;HANGUL SYLLABLE SSWEB;Lo;0;L;;;;;N;;;;; C4AE;HANGUL SYLLABLE SSWEBS;Lo;0;L;;;;;N;;;;; C4AF;HANGUL SYLLABLE SSWES;Lo;0;L;;;;;N;;;;; C4B0;HANGUL SYLLABLE SSWESS;Lo;0;L;;;;;N;;;;; C4B1;HANGUL SYLLABLE SSWENG;Lo;0;L;;;;;N;;;;; C4B2;HANGUL SYLLABLE SSWEJ;Lo;0;L;;;;;N;;;;; C4B3;HANGUL SYLLABLE SSWEC;Lo;0;L;;;;;N;;;;; C4B4;HANGUL SYLLABLE SSWEK;Lo;0;L;;;;;N;;;;; C4B5;HANGUL SYLLABLE SSWET;Lo;0;L;;;;;N;;;;; C4B6;HANGUL SYLLABLE SSWEP;Lo;0;L;;;;;N;;;;; C4B7;HANGUL SYLLABLE SSWEH;Lo;0;L;;;;;N;;;;; C4B8;HANGUL SYLLABLE SSWI;Lo;0;L;;;;;N;;;;; C4B9;HANGUL SYLLABLE SSWIG;Lo;0;L;;;;;N;;;;; C4BA;HANGUL SYLLABLE SSWIGG;Lo;0;L;;;;;N;;;;; C4BB;HANGUL SYLLABLE SSWIGS;Lo;0;L;;;;;N;;;;; C4BC;HANGUL SYLLABLE SSWIN;Lo;0;L;;;;;N;;;;; C4BD;HANGUL SYLLABLE SSWINI;Lo;0;L;;;;;N;;;;; C4BE;HANGUL SYLLABLE SSWINH;Lo;0;L;;;;;N;;;;; C4BF;HANGUL SYLLABLE SSWID;Lo;0;L;;;;;N;;;;; C4C0;HANGUL SYLLABLE SSWIL;Lo;0;L;;;;;N;;;;; C4C1;HANGUL SYLLABLE SSWILG;Lo;0;L;;;;;N;;;;; C4C2;HANGUL SYLLABLE SSWILM;Lo;0;L;;;;;N;;;;; C4C3;HANGUL SYLLABLE SSWILB;Lo;0;L;;;;;N;;;;; C4C4;HANGUL SYLLABLE SSWILS;Lo;0;L;;;;;N;;;;; C4C5;HANGUL SYLLABLE SSWILT;Lo;0;L;;;;;N;;;;; C4C6;HANGUL SYLLABLE SSWILP;Lo;0;L;;;;;N;;;;; C4C7;HANGUL SYLLABLE SSWILH;Lo;0;L;;;;;N;;;;; C4C8;HANGUL SYLLABLE SSWIM;Lo;0;L;;;;;N;;;;; C4C9;HANGUL SYLLABLE SSWIB;Lo;0;L;;;;;N;;;;; C4CA;HANGUL SYLLABLE SSWIBS;Lo;0;L;;;;;N;;;;; C4CB;HANGUL SYLLABLE SSWIS;Lo;0;L;;;;;N;;;;; C4CC;HANGUL SYLLABLE SSWISS;Lo;0;L;;;;;N;;;;; C4CD;HANGUL SYLLABLE SSWING;Lo;0;L;;;;;N;;;;; C4CE;HANGUL SYLLABLE SSWIJ;Lo;0;L;;;;;N;;;;; C4CF;HANGUL SYLLABLE SSWIC;Lo;0;L;;;;;N;;;;; C4D0;HANGUL SYLLABLE SSWIK;Lo;0;L;;;;;N;;;;; C4D1;HANGUL SYLLABLE SSWIT;Lo;0;L;;;;;N;;;;; C4D2;HANGUL SYLLABLE SSWIP;Lo;0;L;;;;;N;;;;; C4D3;HANGUL SYLLABLE SSWIH;Lo;0;L;;;;;N;;;;; C4D4;HANGUL SYLLABLE SSYU;Lo;0;L;;;;;N;;;;; C4D5;HANGUL SYLLABLE SSYUG;Lo;0;L;;;;;N;;;;; C4D6;HANGUL SYLLABLE SSYUGG;Lo;0;L;;;;;N;;;;; C4D7;HANGUL SYLLABLE SSYUGS;Lo;0;L;;;;;N;;;;; C4D8;HANGUL SYLLABLE SSYUN;Lo;0;L;;;;;N;;;;; C4D9;HANGUL SYLLABLE SSYUNI;Lo;0;L;;;;;N;;;;; C4DA;HANGUL SYLLABLE SSYUNH;Lo;0;L;;;;;N;;;;; C4DB;HANGUL SYLLABLE SSYUD;Lo;0;L;;;;;N;;;;; C4DC;HANGUL SYLLABLE SSYUL;Lo;0;L;;;;;N;;;;; C4DD;HANGUL SYLLABLE SSYULG;Lo;0;L;;;;;N;;;;; C4DE;HANGUL SYLLABLE SSYULM;Lo;0;L;;;;;N;;;;; C4DF;HANGUL SYLLABLE SSYULB;Lo;0;L;;;;;N;;;;; C4E0;HANGUL SYLLABLE SSYULS;Lo;0;L;;;;;N;;;;; C4E1;HANGUL SYLLABLE SSYULT;Lo;0;L;;;;;N;;;;; C4E2;HANGUL SYLLABLE SSYULP;Lo;0;L;;;;;N;;;;; C4E3;HANGUL SYLLABLE SSYULH;Lo;0;L;;;;;N;;;;; C4E4;HANGUL SYLLABLE SSYUM;Lo;0;L;;;;;N;;;;; C4E5;HANGUL SYLLABLE SSYUB;Lo;0;L;;;;;N;;;;; C4E6;HANGUL SYLLABLE SSYUBS;Lo;0;L;;;;;N;;;;; C4E7;HANGUL SYLLABLE SSYUS;Lo;0;L;;;;;N;;;;; C4E8;HANGUL SYLLABLE SSYUSS;Lo;0;L;;;;;N;;;;; C4E9;HANGUL SYLLABLE SSYUNG;Lo;0;L;;;;;N;;;;; C4EA;HANGUL SYLLABLE SSYUJ;Lo;0;L;;;;;N;;;;; C4EB;HANGUL SYLLABLE SSYUC;Lo;0;L;;;;;N;;;;; C4EC;HANGUL SYLLABLE SSYUK;Lo;0;L;;;;;N;;;;; C4ED;HANGUL SYLLABLE SSYUT;Lo;0;L;;;;;N;;;;; C4EE;HANGUL SYLLABLE SSYUP;Lo;0;L;;;;;N;;;;; C4EF;HANGUL SYLLABLE SSYUH;Lo;0;L;;;;;N;;;;; C4F0;HANGUL SYLLABLE SSEU;Lo;0;L;;;;;N;;;;; C4F1;HANGUL SYLLABLE SSEUG;Lo;0;L;;;;;N;;;;; C4F2;HANGUL SYLLABLE SSEUGG;Lo;0;L;;;;;N;;;;; C4F3;HANGUL SYLLABLE SSEUGS;Lo;0;L;;;;;N;;;;; C4F4;HANGUL SYLLABLE SSEUN;Lo;0;L;;;;;N;;;;; C4F5;HANGUL SYLLABLE SSEUNI;Lo;0;L;;;;;N;;;;; C4F6;HANGUL SYLLABLE SSEUNH;Lo;0;L;;;;;N;;;;; C4F7;HANGUL SYLLABLE SSEUD;Lo;0;L;;;;;N;;;;; C4F8;HANGUL SYLLABLE SSEUL;Lo;0;L;;;;;N;;;;; C4F9;HANGUL SYLLABLE SSEULG;Lo;0;L;;;;;N;;;;; C4FA;HANGUL SYLLABLE SSEULM;Lo;0;L;;;;;N;;;;; C4FB;HANGUL SYLLABLE SSEULB;Lo;0;L;;;;;N;;;;; C4FC;HANGUL SYLLABLE SSEULS;Lo;0;L;;;;;N;;;;; C4FD;HANGUL SYLLABLE SSEULT;Lo;0;L;;;;;N;;;;; C4FE;HANGUL SYLLABLE SSEULP;Lo;0;L;;;;;N;;;;; C4FF;HANGUL SYLLABLE SSEULH;Lo;0;L;;;;;N;;;;; C500;HANGUL SYLLABLE SSEUM;Lo;0;L;;;;;N;;;;; C501;HANGUL SYLLABLE SSEUB;Lo;0;L;;;;;N;;;;; C502;HANGUL SYLLABLE SSEUBS;Lo;0;L;;;;;N;;;;; C503;HANGUL SYLLABLE SSEUS;Lo;0;L;;;;;N;;;;; C504;HANGUL SYLLABLE SSEUSS;Lo;0;L;;;;;N;;;;; C505;HANGUL SYLLABLE SSEUNG;Lo;0;L;;;;;N;;;;; C506;HANGUL SYLLABLE SSEUJ;Lo;0;L;;;;;N;;;;; C507;HANGUL SYLLABLE SSEUC;Lo;0;L;;;;;N;;;;; C508;HANGUL SYLLABLE SSEUK;Lo;0;L;;;;;N;;;;; C509;HANGUL SYLLABLE SSEUT;Lo;0;L;;;;;N;;;;; C50A;HANGUL SYLLABLE SSEUP;Lo;0;L;;;;;N;;;;; C50B;HANGUL SYLLABLE SSEUH;Lo;0;L;;;;;N;;;;; C50C;HANGUL SYLLABLE SSYI;Lo;0;L;;;;;N;;;;; C50D;HANGUL SYLLABLE SSYIG;Lo;0;L;;;;;N;;;;; C50E;HANGUL SYLLABLE SSYIGG;Lo;0;L;;;;;N;;;;; C50F;HANGUL SYLLABLE SSYIGS;Lo;0;L;;;;;N;;;;; C510;HANGUL SYLLABLE SSYIN;Lo;0;L;;;;;N;;;;; C511;HANGUL SYLLABLE SSYINI;Lo;0;L;;;;;N;;;;; C512;HANGUL SYLLABLE SSYINH;Lo;0;L;;;;;N;;;;; C513;HANGUL SYLLABLE SSYID;Lo;0;L;;;;;N;;;;; C514;HANGUL SYLLABLE SSYIL;Lo;0;L;;;;;N;;;;; C515;HANGUL SYLLABLE SSYILG;Lo;0;L;;;;;N;;;;; C516;HANGUL SYLLABLE SSYILM;Lo;0;L;;;;;N;;;;; C517;HANGUL SYLLABLE SSYILB;Lo;0;L;;;;;N;;;;; C518;HANGUL SYLLABLE SSYILS;Lo;0;L;;;;;N;;;;; C519;HANGUL SYLLABLE SSYILT;Lo;0;L;;;;;N;;;;; C51A;HANGUL SYLLABLE SSYILP;Lo;0;L;;;;;N;;;;; C51B;HANGUL SYLLABLE SSYILH;Lo;0;L;;;;;N;;;;; C51C;HANGUL SYLLABLE SSYIM;Lo;0;L;;;;;N;;;;; C51D;HANGUL SYLLABLE SSYIB;Lo;0;L;;;;;N;;;;; C51E;HANGUL SYLLABLE SSYIBS;Lo;0;L;;;;;N;;;;; C51F;HANGUL SYLLABLE SSYIS;Lo;0;L;;;;;N;;;;; C520;HANGUL SYLLABLE SSYISS;Lo;0;L;;;;;N;;;;; C521;HANGUL SYLLABLE SSYING;Lo;0;L;;;;;N;;;;; C522;HANGUL SYLLABLE SSYIJ;Lo;0;L;;;;;N;;;;; C523;HANGUL SYLLABLE SSYIC;Lo;0;L;;;;;N;;;;; C524;HANGUL SYLLABLE SSYIK;Lo;0;L;;;;;N;;;;; C525;HANGUL SYLLABLE SSYIT;Lo;0;L;;;;;N;;;;; C526;HANGUL SYLLABLE SSYIP;Lo;0;L;;;;;N;;;;; C527;HANGUL SYLLABLE SSYIH;Lo;0;L;;;;;N;;;;; C528;HANGUL SYLLABLE SSI;Lo;0;L;;;;;N;;;;; C529;HANGUL SYLLABLE SSIG;Lo;0;L;;;;;N;;;;; C52A;HANGUL SYLLABLE SSIGG;Lo;0;L;;;;;N;;;;; C52B;HANGUL SYLLABLE SSIGS;Lo;0;L;;;;;N;;;;; C52C;HANGUL SYLLABLE SSIN;Lo;0;L;;;;;N;;;;; C52D;HANGUL SYLLABLE SSINI;Lo;0;L;;;;;N;;;;; C52E;HANGUL SYLLABLE SSINH;Lo;0;L;;;;;N;;;;; C52F;HANGUL SYLLABLE SSID;Lo;0;L;;;;;N;;;;; C530;HANGUL SYLLABLE SSIL;Lo;0;L;;;;;N;;;;; C531;HANGUL SYLLABLE SSILG;Lo;0;L;;;;;N;;;;; C532;HANGUL SYLLABLE SSILM;Lo;0;L;;;;;N;;;;; C533;HANGUL SYLLABLE SSILB;Lo;0;L;;;;;N;;;;; C534;HANGUL SYLLABLE SSILS;Lo;0;L;;;;;N;;;;; C535;HANGUL SYLLABLE SSILT;Lo;0;L;;;;;N;;;;; C536;HANGUL SYLLABLE SSILP;Lo;0;L;;;;;N;;;;; C537;HANGUL SYLLABLE SSILH;Lo;0;L;;;;;N;;;;; C538;HANGUL SYLLABLE SSIM;Lo;0;L;;;;;N;;;;; C539;HANGUL SYLLABLE SSIB;Lo;0;L;;;;;N;;;;; C53A;HANGUL SYLLABLE SSIBS;Lo;0;L;;;;;N;;;;; C53B;HANGUL SYLLABLE SSIS;Lo;0;L;;;;;N;;;;; C53C;HANGUL SYLLABLE SSISS;Lo;0;L;;;;;N;;;;; C53D;HANGUL SYLLABLE SSING;Lo;0;L;;;;;N;;;;; C53E;HANGUL SYLLABLE SSIJ;Lo;0;L;;;;;N;;;;; C53F;HANGUL SYLLABLE SSIC;Lo;0;L;;;;;N;;;;; C540;HANGUL SYLLABLE SSIK;Lo;0;L;;;;;N;;;;; C541;HANGUL SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; C542;HANGUL SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; C543;HANGUL SYLLABLE SSIH;Lo;0;L;;;;;N;;;;; C544;HANGUL SYLLABLE A;Lo;0;L;;;;;N;;;;; C545;HANGUL SYLLABLE AG;Lo;0;L;;;;;N;;;;; C546;HANGUL SYLLABLE AGG;Lo;0;L;;;;;N;;;;; C547;HANGUL SYLLABLE AGS;Lo;0;L;;;;;N;;;;; C548;HANGUL SYLLABLE AN;Lo;0;L;;;;;N;;;;; C549;HANGUL SYLLABLE ANI;Lo;0;L;;;;;N;;;;; C54A;HANGUL SYLLABLE ANH;Lo;0;L;;;;;N;;;;; C54B;HANGUL SYLLABLE AD;Lo;0;L;;;;;N;;;;; C54C;HANGUL SYLLABLE AL;Lo;0;L;;;;;N;;;;; C54D;HANGUL SYLLABLE ALG;Lo;0;L;;;;;N;;;;; C54E;HANGUL SYLLABLE ALM;Lo;0;L;;;;;N;;;;; C54F;HANGUL SYLLABLE ALB;Lo;0;L;;;;;N;;;;; C550;HANGUL SYLLABLE ALS;Lo;0;L;;;;;N;;;;; C551;HANGUL SYLLABLE ALT;Lo;0;L;;;;;N;;;;; C552;HANGUL SYLLABLE ALP;Lo;0;L;;;;;N;;;;; C553;HANGUL SYLLABLE ALH;Lo;0;L;;;;;N;;;;; C554;HANGUL SYLLABLE AM;Lo;0;L;;;;;N;;;;; C555;HANGUL SYLLABLE AB;Lo;0;L;;;;;N;;;;; C556;HANGUL SYLLABLE ABS;Lo;0;L;;;;;N;;;;; C557;HANGUL SYLLABLE AS;Lo;0;L;;;;;N;;;;; C558;HANGUL SYLLABLE ASS;Lo;0;L;;;;;N;;;;; C559;HANGUL SYLLABLE ANG;Lo;0;L;;;;;N;;;;; C55A;HANGUL SYLLABLE AJ;Lo;0;L;;;;;N;;;;; C55B;HANGUL SYLLABLE AC;Lo;0;L;;;;;N;;;;; C55C;HANGUL SYLLABLE AK;Lo;0;L;;;;;N;;;;; C55D;HANGUL SYLLABLE AT;Lo;0;L;;;;;N;;;;; C55E;HANGUL SYLLABLE AP;Lo;0;L;;;;;N;;;;; C55F;HANGUL SYLLABLE AH;Lo;0;L;;;;;N;;;;; C560;HANGUL SYLLABLE AE;Lo;0;L;;;;;N;;;;; C561;HANGUL SYLLABLE AEG;Lo;0;L;;;;;N;;;;; C562;HANGUL SYLLABLE AEGG;Lo;0;L;;;;;N;;;;; C563;HANGUL SYLLABLE AEGS;Lo;0;L;;;;;N;;;;; C564;HANGUL SYLLABLE AEN;Lo;0;L;;;;;N;;;;; C565;HANGUL SYLLABLE AENI;Lo;0;L;;;;;N;;;;; C566;HANGUL SYLLABLE AENH;Lo;0;L;;;;;N;;;;; C567;HANGUL SYLLABLE AED;Lo;0;L;;;;;N;;;;; C568;HANGUL SYLLABLE AEL;Lo;0;L;;;;;N;;;;; C569;HANGUL SYLLABLE AELG;Lo;0;L;;;;;N;;;;; C56A;HANGUL SYLLABLE AELM;Lo;0;L;;;;;N;;;;; C56B;HANGUL SYLLABLE AELB;Lo;0;L;;;;;N;;;;; C56C;HANGUL SYLLABLE AELS;Lo;0;L;;;;;N;;;;; C56D;HANGUL SYLLABLE AELT;Lo;0;L;;;;;N;;;;; C56E;HANGUL SYLLABLE AELP;Lo;0;L;;;;;N;;;;; C56F;HANGUL SYLLABLE AELH;Lo;0;L;;;;;N;;;;; C570;HANGUL SYLLABLE AEM;Lo;0;L;;;;;N;;;;; C571;HANGUL SYLLABLE AEB;Lo;0;L;;;;;N;;;;; C572;HANGUL SYLLABLE AEBS;Lo;0;L;;;;;N;;;;; C573;HANGUL SYLLABLE AES;Lo;0;L;;;;;N;;;;; C574;HANGUL SYLLABLE AESS;Lo;0;L;;;;;N;;;;; C575;HANGUL SYLLABLE AENG;Lo;0;L;;;;;N;;;;; C576;HANGUL SYLLABLE AEJ;Lo;0;L;;;;;N;;;;; C577;HANGUL SYLLABLE AEC;Lo;0;L;;;;;N;;;;; C578;HANGUL SYLLABLE AEK;Lo;0;L;;;;;N;;;;; C579;HANGUL SYLLABLE AET;Lo;0;L;;;;;N;;;;; C57A;HANGUL SYLLABLE AEP;Lo;0;L;;;;;N;;;;; C57B;HANGUL SYLLABLE AEH;Lo;0;L;;;;;N;;;;; C57C;HANGUL SYLLABLE YA;Lo;0;L;;;;;N;;;;; C57D;HANGUL SYLLABLE YAG;Lo;0;L;;;;;N;;;;; C57E;HANGUL SYLLABLE YAGG;Lo;0;L;;;;;N;;;;; C57F;HANGUL SYLLABLE YAGS;Lo;0;L;;;;;N;;;;; C580;HANGUL SYLLABLE YAN;Lo;0;L;;;;;N;;;;; C581;HANGUL SYLLABLE YANI;Lo;0;L;;;;;N;;;;; C582;HANGUL SYLLABLE YANH;Lo;0;L;;;;;N;;;;; C583;HANGUL SYLLABLE YAD;Lo;0;L;;;;;N;;;;; C584;HANGUL SYLLABLE YAL;Lo;0;L;;;;;N;;;;; C585;HANGUL SYLLABLE YALG;Lo;0;L;;;;;N;;;;; C586;HANGUL SYLLABLE YALM;Lo;0;L;;;;;N;;;;; C587;HANGUL SYLLABLE YALB;Lo;0;L;;;;;N;;;;; C588;HANGUL SYLLABLE YALS;Lo;0;L;;;;;N;;;;; C589;HANGUL SYLLABLE YALT;Lo;0;L;;;;;N;;;;; C58A;HANGUL SYLLABLE YALP;Lo;0;L;;;;;N;;;;; C58B;HANGUL SYLLABLE YALH;Lo;0;L;;;;;N;;;;; C58C;HANGUL SYLLABLE YAM;Lo;0;L;;;;;N;;;;; C58D;HANGUL SYLLABLE YAB;Lo;0;L;;;;;N;;;;; C58E;HANGUL SYLLABLE YABS;Lo;0;L;;;;;N;;;;; C58F;HANGUL SYLLABLE YAS;Lo;0;L;;;;;N;;;;; C590;HANGUL SYLLABLE YASS;Lo;0;L;;;;;N;;;;; C591;HANGUL SYLLABLE YANG;Lo;0;L;;;;;N;;;;; C592;HANGUL SYLLABLE YAJ;Lo;0;L;;;;;N;;;;; C593;HANGUL SYLLABLE YAC;Lo;0;L;;;;;N;;;;; C594;HANGUL SYLLABLE YAK;Lo;0;L;;;;;N;;;;; C595;HANGUL SYLLABLE YAT;Lo;0;L;;;;;N;;;;; C596;HANGUL SYLLABLE YAP;Lo;0;L;;;;;N;;;;; C597;HANGUL SYLLABLE YAH;Lo;0;L;;;;;N;;;;; C598;HANGUL SYLLABLE YAE;Lo;0;L;;;;;N;;;;; C599;HANGUL SYLLABLE YAEG;Lo;0;L;;;;;N;;;;; C59A;HANGUL SYLLABLE YAEGG;Lo;0;L;;;;;N;;;;; C59B;HANGUL SYLLABLE YAEGS;Lo;0;L;;;;;N;;;;; C59C;HANGUL SYLLABLE YAEN;Lo;0;L;;;;;N;;;;; C59D;HANGUL SYLLABLE YAENI;Lo;0;L;;;;;N;;;;; C59E;HANGUL SYLLABLE YAENH;Lo;0;L;;;;;N;;;;; C59F;HANGUL SYLLABLE YAED;Lo;0;L;;;;;N;;;;; C5A0;HANGUL SYLLABLE YAEL;Lo;0;L;;;;;N;;;;; C5A1;HANGUL SYLLABLE YAELG;Lo;0;L;;;;;N;;;;; C5A2;HANGUL SYLLABLE YAELM;Lo;0;L;;;;;N;;;;; C5A3;HANGUL SYLLABLE YAELB;Lo;0;L;;;;;N;;;;; C5A4;HANGUL SYLLABLE YAELS;Lo;0;L;;;;;N;;;;; C5A5;HANGUL SYLLABLE YAELT;Lo;0;L;;;;;N;;;;; C5A6;HANGUL SYLLABLE YAELP;Lo;0;L;;;;;N;;;;; C5A7;HANGUL SYLLABLE YAELH;Lo;0;L;;;;;N;;;;; C5A8;HANGUL SYLLABLE YAEM;Lo;0;L;;;;;N;;;;; C5A9;HANGUL SYLLABLE YAEB;Lo;0;L;;;;;N;;;;; C5AA;HANGUL SYLLABLE YAEBS;Lo;0;L;;;;;N;;;;; C5AB;HANGUL SYLLABLE YAES;Lo;0;L;;;;;N;;;;; C5AC;HANGUL SYLLABLE YAESS;Lo;0;L;;;;;N;;;;; C5AD;HANGUL SYLLABLE YAENG;Lo;0;L;;;;;N;;;;; C5AE;HANGUL SYLLABLE YAEJ;Lo;0;L;;;;;N;;;;; C5AF;HANGUL SYLLABLE YAEC;Lo;0;L;;;;;N;;;;; C5B0;HANGUL SYLLABLE YAEK;Lo;0;L;;;;;N;;;;; C5B1;HANGUL SYLLABLE YAET;Lo;0;L;;;;;N;;;;; C5B2;HANGUL SYLLABLE YAEP;Lo;0;L;;;;;N;;;;; C5B3;HANGUL SYLLABLE YAEH;Lo;0;L;;;;;N;;;;; C5B4;HANGUL SYLLABLE EO;Lo;0;L;;;;;N;;;;; C5B5;HANGUL SYLLABLE EOG;Lo;0;L;;;;;N;;;;; C5B6;HANGUL SYLLABLE EOGG;Lo;0;L;;;;;N;;;;; C5B7;HANGUL SYLLABLE EOGS;Lo;0;L;;;;;N;;;;; C5B8;HANGUL SYLLABLE EON;Lo;0;L;;;;;N;;;;; C5B9;HANGUL SYLLABLE EONI;Lo;0;L;;;;;N;;;;; C5BA;HANGUL SYLLABLE EONH;Lo;0;L;;;;;N;;;;; C5BB;HANGUL SYLLABLE EOD;Lo;0;L;;;;;N;;;;; C5BC;HANGUL SYLLABLE EOL;Lo;0;L;;;;;N;;;;; C5BD;HANGUL SYLLABLE EOLG;Lo;0;L;;;;;N;;;;; C5BE;HANGUL SYLLABLE EOLM;Lo;0;L;;;;;N;;;;; C5BF;HANGUL SYLLABLE EOLB;Lo;0;L;;;;;N;;;;; C5C0;HANGUL SYLLABLE EOLS;Lo;0;L;;;;;N;;;;; C5C1;HANGUL SYLLABLE EOLT;Lo;0;L;;;;;N;;;;; C5C2;HANGUL SYLLABLE EOLP;Lo;0;L;;;;;N;;;;; C5C3;HANGUL SYLLABLE EOLH;Lo;0;L;;;;;N;;;;; C5C4;HANGUL SYLLABLE EOM;Lo;0;L;;;;;N;;;;; C5C5;HANGUL SYLLABLE EOB;Lo;0;L;;;;;N;;;;; C5C6;HANGUL SYLLABLE EOBS;Lo;0;L;;;;;N;;;;; C5C7;HANGUL SYLLABLE EOS;Lo;0;L;;;;;N;;;;; C5C8;HANGUL SYLLABLE EOSS;Lo;0;L;;;;;N;;;;; C5C9;HANGUL SYLLABLE EONG;Lo;0;L;;;;;N;;;;; C5CA;HANGUL SYLLABLE EOJ;Lo;0;L;;;;;N;;;;; C5CB;HANGUL SYLLABLE EOC;Lo;0;L;;;;;N;;;;; C5CC;HANGUL SYLLABLE EOK;Lo;0;L;;;;;N;;;;; C5CD;HANGUL SYLLABLE EOT;Lo;0;L;;;;;N;;;;; C5CE;HANGUL SYLLABLE EOP;Lo;0;L;;;;;N;;;;; C5CF;HANGUL SYLLABLE EOH;Lo;0;L;;;;;N;;;;; C5D0;HANGUL SYLLABLE E;Lo;0;L;;;;;N;;;;; C5D1;HANGUL SYLLABLE EG;Lo;0;L;;;;;N;;;;; C5D2;HANGUL SYLLABLE EGG;Lo;0;L;;;;;N;;;;; C5D3;HANGUL SYLLABLE EGS;Lo;0;L;;;;;N;;;;; C5D4;HANGUL SYLLABLE EN;Lo;0;L;;;;;N;;;;; C5D5;HANGUL SYLLABLE ENI;Lo;0;L;;;;;N;;;;; C5D6;HANGUL SYLLABLE ENH;Lo;0;L;;;;;N;;;;; C5D7;HANGUL SYLLABLE ED;Lo;0;L;;;;;N;;;;; C5D8;HANGUL SYLLABLE EL;Lo;0;L;;;;;N;;;;; C5D9;HANGUL SYLLABLE ELG;Lo;0;L;;;;;N;;;;; C5DA;HANGUL SYLLABLE ELM;Lo;0;L;;;;;N;;;;; C5DB;HANGUL SYLLABLE ELB;Lo;0;L;;;;;N;;;;; C5DC;HANGUL SYLLABLE ELS;Lo;0;L;;;;;N;;;;; C5DD;HANGUL SYLLABLE ELT;Lo;0;L;;;;;N;;;;; C5DE;HANGUL SYLLABLE ELP;Lo;0;L;;;;;N;;;;; C5DF;HANGUL SYLLABLE ELH;Lo;0;L;;;;;N;;;;; C5E0;HANGUL SYLLABLE EM;Lo;0;L;;;;;N;;;;; C5E1;HANGUL SYLLABLE EB;Lo;0;L;;;;;N;;;;; C5E2;HANGUL SYLLABLE EBS;Lo;0;L;;;;;N;;;;; C5E3;HANGUL SYLLABLE ES;Lo;0;L;;;;;N;;;;; C5E4;HANGUL SYLLABLE ESS;Lo;0;L;;;;;N;;;;; C5E5;HANGUL SYLLABLE ENG;Lo;0;L;;;;;N;;;;; C5E6;HANGUL SYLLABLE EJ;Lo;0;L;;;;;N;;;;; C5E7;HANGUL SYLLABLE EC;Lo;0;L;;;;;N;;;;; C5E8;HANGUL SYLLABLE EK;Lo;0;L;;;;;N;;;;; C5E9;HANGUL SYLLABLE ET;Lo;0;L;;;;;N;;;;; C5EA;HANGUL SYLLABLE EP;Lo;0;L;;;;;N;;;;; C5EB;HANGUL SYLLABLE EH;Lo;0;L;;;;;N;;;;; C5EC;HANGUL SYLLABLE YEO;Lo;0;L;;;;;N;;;;; C5ED;HANGUL SYLLABLE YEOG;Lo;0;L;;;;;N;;;;; C5EE;HANGUL SYLLABLE YEOGG;Lo;0;L;;;;;N;;;;; C5EF;HANGUL SYLLABLE YEOGS;Lo;0;L;;;;;N;;;;; C5F0;HANGUL SYLLABLE YEON;Lo;0;L;;;;;N;;;;; C5F1;HANGUL SYLLABLE YEONI;Lo;0;L;;;;;N;;;;; C5F2;HANGUL SYLLABLE YEONH;Lo;0;L;;;;;N;;;;; C5F3;HANGUL SYLLABLE YEOD;Lo;0;L;;;;;N;;;;; C5F4;HANGUL SYLLABLE YEOL;Lo;0;L;;;;;N;;;;; C5F5;HANGUL SYLLABLE YEOLG;Lo;0;L;;;;;N;;;;; C5F6;HANGUL SYLLABLE YEOLM;Lo;0;L;;;;;N;;;;; C5F7;HANGUL SYLLABLE YEOLB;Lo;0;L;;;;;N;;;;; C5F8;HANGUL SYLLABLE YEOLS;Lo;0;L;;;;;N;;;;; C5F9;HANGUL SYLLABLE YEOLT;Lo;0;L;;;;;N;;;;; C5FA;HANGUL SYLLABLE YEOLP;Lo;0;L;;;;;N;;;;; C5FB;HANGUL SYLLABLE YEOLH;Lo;0;L;;;;;N;;;;; C5FC;HANGUL SYLLABLE YEOM;Lo;0;L;;;;;N;;;;; C5FD;HANGUL SYLLABLE YEOB;Lo;0;L;;;;;N;;;;; C5FE;HANGUL SYLLABLE YEOBS;Lo;0;L;;;;;N;;;;; C5FF;HANGUL SYLLABLE YEOS;Lo;0;L;;;;;N;;;;; C600;HANGUL SYLLABLE YEOSS;Lo;0;L;;;;;N;;;;; C601;HANGUL SYLLABLE YEONG;Lo;0;L;;;;;N;;;;; C602;HANGUL SYLLABLE YEOJ;Lo;0;L;;;;;N;;;;; C603;HANGUL SYLLABLE YEOC;Lo;0;L;;;;;N;;;;; C604;HANGUL SYLLABLE YEOK;Lo;0;L;;;;;N;;;;; C605;HANGUL SYLLABLE YEOT;Lo;0;L;;;;;N;;;;; C606;HANGUL SYLLABLE YEOP;Lo;0;L;;;;;N;;;;; C607;HANGUL SYLLABLE YEOH;Lo;0;L;;;;;N;;;;; C608;HANGUL SYLLABLE YE;Lo;0;L;;;;;N;;;;; C609;HANGUL SYLLABLE YEG;Lo;0;L;;;;;N;;;;; C60A;HANGUL SYLLABLE YEGG;Lo;0;L;;;;;N;;;;; C60B;HANGUL SYLLABLE YEGS;Lo;0;L;;;;;N;;;;; C60C;HANGUL SYLLABLE YEN;Lo;0;L;;;;;N;;;;; C60D;HANGUL SYLLABLE YENI;Lo;0;L;;;;;N;;;;; C60E;HANGUL SYLLABLE YENH;Lo;0;L;;;;;N;;;;; C60F;HANGUL SYLLABLE YED;Lo;0;L;;;;;N;;;;; C610;HANGUL SYLLABLE YEL;Lo;0;L;;;;;N;;;;; C611;HANGUL SYLLABLE YELG;Lo;0;L;;;;;N;;;;; C612;HANGUL SYLLABLE YELM;Lo;0;L;;;;;N;;;;; C613;HANGUL SYLLABLE YELB;Lo;0;L;;;;;N;;;;; C614;HANGUL SYLLABLE YELS;Lo;0;L;;;;;N;;;;; C615;HANGUL SYLLABLE YELT;Lo;0;L;;;;;N;;;;; C616;HANGUL SYLLABLE YELP;Lo;0;L;;;;;N;;;;; C617;HANGUL SYLLABLE YELH;Lo;0;L;;;;;N;;;;; C618;HANGUL SYLLABLE YEM;Lo;0;L;;;;;N;;;;; C619;HANGUL SYLLABLE YEB;Lo;0;L;;;;;N;;;;; C61A;HANGUL SYLLABLE YEBS;Lo;0;L;;;;;N;;;;; C61B;HANGUL SYLLABLE YES;Lo;0;L;;;;;N;;;;; C61C;HANGUL SYLLABLE YESS;Lo;0;L;;;;;N;;;;; C61D;HANGUL SYLLABLE YENG;Lo;0;L;;;;;N;;;;; C61E;HANGUL SYLLABLE YEJ;Lo;0;L;;;;;N;;;;; C61F;HANGUL SYLLABLE YEC;Lo;0;L;;;;;N;;;;; C620;HANGUL SYLLABLE YEK;Lo;0;L;;;;;N;;;;; C621;HANGUL SYLLABLE YET;Lo;0;L;;;;;N;;;;; C622;HANGUL SYLLABLE YEP;Lo;0;L;;;;;N;;;;; C623;HANGUL SYLLABLE YEH;Lo;0;L;;;;;N;;;;; C624;HANGUL SYLLABLE O;Lo;0;L;;;;;N;;;;; C625;HANGUL SYLLABLE OG;Lo;0;L;;;;;N;;;;; C626;HANGUL SYLLABLE OGG;Lo;0;L;;;;;N;;;;; C627;HANGUL SYLLABLE OGS;Lo;0;L;;;;;N;;;;; C628;HANGUL SYLLABLE ON;Lo;0;L;;;;;N;;;;; C629;HANGUL SYLLABLE ONI;Lo;0;L;;;;;N;;;;; C62A;HANGUL SYLLABLE ONH;Lo;0;L;;;;;N;;;;; C62B;HANGUL SYLLABLE OD;Lo;0;L;;;;;N;;;;; C62C;HANGUL SYLLABLE OL;Lo;0;L;;;;;N;;;;; C62D;HANGUL SYLLABLE OLG;Lo;0;L;;;;;N;;;;; C62E;HANGUL SYLLABLE OLM;Lo;0;L;;;;;N;;;;; C62F;HANGUL SYLLABLE OLB;Lo;0;L;;;;;N;;;;; C630;HANGUL SYLLABLE OLS;Lo;0;L;;;;;N;;;;; C631;HANGUL SYLLABLE OLT;Lo;0;L;;;;;N;;;;; C632;HANGUL SYLLABLE OLP;Lo;0;L;;;;;N;;;;; C633;HANGUL SYLLABLE OLH;Lo;0;L;;;;;N;;;;; C634;HANGUL SYLLABLE OM;Lo;0;L;;;;;N;;;;; C635;HANGUL SYLLABLE OB;Lo;0;L;;;;;N;;;;; C636;HANGUL SYLLABLE OBS;Lo;0;L;;;;;N;;;;; C637;HANGUL SYLLABLE OS;Lo;0;L;;;;;N;;;;; C638;HANGUL SYLLABLE OSS;Lo;0;L;;;;;N;;;;; C639;HANGUL SYLLABLE ONG;Lo;0;L;;;;;N;;;;; C63A;HANGUL SYLLABLE OJ;Lo;0;L;;;;;N;;;;; C63B;HANGUL SYLLABLE OC;Lo;0;L;;;;;N;;;;; C63C;HANGUL SYLLABLE OK;Lo;0;L;;;;;N;;;;; C63D;HANGUL SYLLABLE OT;Lo;0;L;;;;;N;;;;; C63E;HANGUL SYLLABLE OP;Lo;0;L;;;;;N;;;;; C63F;HANGUL SYLLABLE OH;Lo;0;L;;;;;N;;;;; C640;HANGUL SYLLABLE WA;Lo;0;L;;;;;N;;;;; C641;HANGUL SYLLABLE WAG;Lo;0;L;;;;;N;;;;; C642;HANGUL SYLLABLE WAGG;Lo;0;L;;;;;N;;;;; C643;HANGUL SYLLABLE WAGS;Lo;0;L;;;;;N;;;;; C644;HANGUL SYLLABLE WAN;Lo;0;L;;;;;N;;;;; C645;HANGUL SYLLABLE WANI;Lo;0;L;;;;;N;;;;; C646;HANGUL SYLLABLE WANH;Lo;0;L;;;;;N;;;;; C647;HANGUL SYLLABLE WAD;Lo;0;L;;;;;N;;;;; C648;HANGUL SYLLABLE WAL;Lo;0;L;;;;;N;;;;; C649;HANGUL SYLLABLE WALG;Lo;0;L;;;;;N;;;;; C64A;HANGUL SYLLABLE WALM;Lo;0;L;;;;;N;;;;; C64B;HANGUL SYLLABLE WALB;Lo;0;L;;;;;N;;;;; C64C;HANGUL SYLLABLE WALS;Lo;0;L;;;;;N;;;;; C64D;HANGUL SYLLABLE WALT;Lo;0;L;;;;;N;;;;; C64E;HANGUL SYLLABLE WALP;Lo;0;L;;;;;N;;;;; C64F;HANGUL SYLLABLE WALH;Lo;0;L;;;;;N;;;;; C650;HANGUL SYLLABLE WAM;Lo;0;L;;;;;N;;;;; C651;HANGUL SYLLABLE WAB;Lo;0;L;;;;;N;;;;; C652;HANGUL SYLLABLE WABS;Lo;0;L;;;;;N;;;;; C653;HANGUL SYLLABLE WAS;Lo;0;L;;;;;N;;;;; C654;HANGUL SYLLABLE WASS;Lo;0;L;;;;;N;;;;; C655;HANGUL SYLLABLE WANG;Lo;0;L;;;;;N;;;;; C656;HANGUL SYLLABLE WAJ;Lo;0;L;;;;;N;;;;; C657;HANGUL SYLLABLE WAC;Lo;0;L;;;;;N;;;;; C658;HANGUL SYLLABLE WAK;Lo;0;L;;;;;N;;;;; C659;HANGUL SYLLABLE WAT;Lo;0;L;;;;;N;;;;; C65A;HANGUL SYLLABLE WAP;Lo;0;L;;;;;N;;;;; C65B;HANGUL SYLLABLE WAH;Lo;0;L;;;;;N;;;;; C65C;HANGUL SYLLABLE WAE;Lo;0;L;;;;;N;;;;; C65D;HANGUL SYLLABLE WAEG;Lo;0;L;;;;;N;;;;; C65E;HANGUL SYLLABLE WAEGG;Lo;0;L;;;;;N;;;;; C65F;HANGUL SYLLABLE WAEGS;Lo;0;L;;;;;N;;;;; C660;HANGUL SYLLABLE WAEN;Lo;0;L;;;;;N;;;;; C661;HANGUL SYLLABLE WAENI;Lo;0;L;;;;;N;;;;; C662;HANGUL SYLLABLE WAENH;Lo;0;L;;;;;N;;;;; C663;HANGUL SYLLABLE WAED;Lo;0;L;;;;;N;;;;; C664;HANGUL SYLLABLE WAEL;Lo;0;L;;;;;N;;;;; C665;HANGUL SYLLABLE WAELG;Lo;0;L;;;;;N;;;;; C666;HANGUL SYLLABLE WAELM;Lo;0;L;;;;;N;;;;; C667;HANGUL SYLLABLE WAELB;Lo;0;L;;;;;N;;;;; C668;HANGUL SYLLABLE WAELS;Lo;0;L;;;;;N;;;;; C669;HANGUL SYLLABLE WAELT;Lo;0;L;;;;;N;;;;; C66A;HANGUL SYLLABLE WAELP;Lo;0;L;;;;;N;;;;; C66B;HANGUL SYLLABLE WAELH;Lo;0;L;;;;;N;;;;; C66C;HANGUL SYLLABLE WAEM;Lo;0;L;;;;;N;;;;; C66D;HANGUL SYLLABLE WAEB;Lo;0;L;;;;;N;;;;; C66E;HANGUL SYLLABLE WAEBS;Lo;0;L;;;;;N;;;;; C66F;HANGUL SYLLABLE WAES;Lo;0;L;;;;;N;;;;; C670;HANGUL SYLLABLE WAESS;Lo;0;L;;;;;N;;;;; C671;HANGUL SYLLABLE WAENG;Lo;0;L;;;;;N;;;;; C672;HANGUL SYLLABLE WAEJ;Lo;0;L;;;;;N;;;;; C673;HANGUL SYLLABLE WAEC;Lo;0;L;;;;;N;;;;; C674;HANGUL SYLLABLE WAEK;Lo;0;L;;;;;N;;;;; C675;HANGUL SYLLABLE WAET;Lo;0;L;;;;;N;;;;; C676;HANGUL SYLLABLE WAEP;Lo;0;L;;;;;N;;;;; C677;HANGUL SYLLABLE WAEH;Lo;0;L;;;;;N;;;;; C678;HANGUL SYLLABLE OE;Lo;0;L;;;;;N;;;;; C679;HANGUL SYLLABLE OEG;Lo;0;L;;;;;N;;;;; C67A;HANGUL SYLLABLE OEGG;Lo;0;L;;;;;N;;;;; C67B;HANGUL SYLLABLE OEGS;Lo;0;L;;;;;N;;;;; C67C;HANGUL SYLLABLE OEN;Lo;0;L;;;;;N;;;;; C67D;HANGUL SYLLABLE OENI;Lo;0;L;;;;;N;;;;; C67E;HANGUL SYLLABLE OENH;Lo;0;L;;;;;N;;;;; C67F;HANGUL SYLLABLE OED;Lo;0;L;;;;;N;;;;; C680;HANGUL SYLLABLE OEL;Lo;0;L;;;;;N;;;;; C681;HANGUL SYLLABLE OELG;Lo;0;L;;;;;N;;;;; C682;HANGUL SYLLABLE OELM;Lo;0;L;;;;;N;;;;; C683;HANGUL SYLLABLE OELB;Lo;0;L;;;;;N;;;;; C684;HANGUL SYLLABLE OELS;Lo;0;L;;;;;N;;;;; C685;HANGUL SYLLABLE OELT;Lo;0;L;;;;;N;;;;; C686;HANGUL SYLLABLE OELP;Lo;0;L;;;;;N;;;;; C687;HANGUL SYLLABLE OELH;Lo;0;L;;;;;N;;;;; C688;HANGUL SYLLABLE OEM;Lo;0;L;;;;;N;;;;; C689;HANGUL SYLLABLE OEB;Lo;0;L;;;;;N;;;;; C68A;HANGUL SYLLABLE OEBS;Lo;0;L;;;;;N;;;;; C68B;HANGUL SYLLABLE OES;Lo;0;L;;;;;N;;;;; C68C;HANGUL SYLLABLE OESS;Lo;0;L;;;;;N;;;;; C68D;HANGUL SYLLABLE OENG;Lo;0;L;;;;;N;;;;; C68E;HANGUL SYLLABLE OEJ;Lo;0;L;;;;;N;;;;; C68F;HANGUL SYLLABLE OEC;Lo;0;L;;;;;N;;;;; C690;HANGUL SYLLABLE OEK;Lo;0;L;;;;;N;;;;; C691;HANGUL SYLLABLE OET;Lo;0;L;;;;;N;;;;; C692;HANGUL SYLLABLE OEP;Lo;0;L;;;;;N;;;;; C693;HANGUL SYLLABLE OEH;Lo;0;L;;;;;N;;;;; C694;HANGUL SYLLABLE YO;Lo;0;L;;;;;N;;;;; C695;HANGUL SYLLABLE YOG;Lo;0;L;;;;;N;;;;; C696;HANGUL SYLLABLE YOGG;Lo;0;L;;;;;N;;;;; C697;HANGUL SYLLABLE YOGS;Lo;0;L;;;;;N;;;;; C698;HANGUL SYLLABLE YON;Lo;0;L;;;;;N;;;;; C699;HANGUL SYLLABLE YONI;Lo;0;L;;;;;N;;;;; C69A;HANGUL SYLLABLE YONH;Lo;0;L;;;;;N;;;;; C69B;HANGUL SYLLABLE YOD;Lo;0;L;;;;;N;;;;; C69C;HANGUL SYLLABLE YOL;Lo;0;L;;;;;N;;;;; C69D;HANGUL SYLLABLE YOLG;Lo;0;L;;;;;N;;;;; C69E;HANGUL SYLLABLE YOLM;Lo;0;L;;;;;N;;;;; C69F;HANGUL SYLLABLE YOLB;Lo;0;L;;;;;N;;;;; C6A0;HANGUL SYLLABLE YOLS;Lo;0;L;;;;;N;;;;; C6A1;HANGUL SYLLABLE YOLT;Lo;0;L;;;;;N;;;;; C6A2;HANGUL SYLLABLE YOLP;Lo;0;L;;;;;N;;;;; C6A3;HANGUL SYLLABLE YOLH;Lo;0;L;;;;;N;;;;; C6A4;HANGUL SYLLABLE YOM;Lo;0;L;;;;;N;;;;; C6A5;HANGUL SYLLABLE YOB;Lo;0;L;;;;;N;;;;; C6A6;HANGUL SYLLABLE YOBS;Lo;0;L;;;;;N;;;;; C6A7;HANGUL SYLLABLE YOS;Lo;0;L;;;;;N;;;;; C6A8;HANGUL SYLLABLE YOSS;Lo;0;L;;;;;N;;;;; C6A9;HANGUL SYLLABLE YONG;Lo;0;L;;;;;N;;;;; C6AA;HANGUL SYLLABLE YOJ;Lo;0;L;;;;;N;;;;; C6AB;HANGUL SYLLABLE YOC;Lo;0;L;;;;;N;;;;; C6AC;HANGUL SYLLABLE YOK;Lo;0;L;;;;;N;;;;; C6AD;HANGUL SYLLABLE YOT;Lo;0;L;;;;;N;;;;; C6AE;HANGUL SYLLABLE YOP;Lo;0;L;;;;;N;;;;; C6AF;HANGUL SYLLABLE YOH;Lo;0;L;;;;;N;;;;; C6B0;HANGUL SYLLABLE U;Lo;0;L;;;;;N;;;;; C6B1;HANGUL SYLLABLE UG;Lo;0;L;;;;;N;;;;; C6B2;HANGUL SYLLABLE UGG;Lo;0;L;;;;;N;;;;; C6B3;HANGUL SYLLABLE UGS;Lo;0;L;;;;;N;;;;; C6B4;HANGUL SYLLABLE UN;Lo;0;L;;;;;N;;;;; C6B5;HANGUL SYLLABLE UNI;Lo;0;L;;;;;N;;;;; C6B6;HANGUL SYLLABLE UNH;Lo;0;L;;;;;N;;;;; C6B7;HANGUL SYLLABLE UD;Lo;0;L;;;;;N;;;;; C6B8;HANGUL SYLLABLE UL;Lo;0;L;;;;;N;;;;; C6B9;HANGUL SYLLABLE ULG;Lo;0;L;;;;;N;;;;; C6BA;HANGUL SYLLABLE ULM;Lo;0;L;;;;;N;;;;; C6BB;HANGUL SYLLABLE ULB;Lo;0;L;;;;;N;;;;; C6BC;HANGUL SYLLABLE ULS;Lo;0;L;;;;;N;;;;; C6BD;HANGUL SYLLABLE ULT;Lo;0;L;;;;;N;;;;; C6BE;HANGUL SYLLABLE ULP;Lo;0;L;;;;;N;;;;; C6BF;HANGUL SYLLABLE ULH;Lo;0;L;;;;;N;;;;; C6C0;HANGUL SYLLABLE UM;Lo;0;L;;;;;N;;;;; C6C1;HANGUL SYLLABLE UB;Lo;0;L;;;;;N;;;;; C6C2;HANGUL SYLLABLE UBS;Lo;0;L;;;;;N;;;;; C6C3;HANGUL SYLLABLE US;Lo;0;L;;;;;N;;;;; C6C4;HANGUL SYLLABLE USS;Lo;0;L;;;;;N;;;;; C6C5;HANGUL SYLLABLE UNG;Lo;0;L;;;;;N;;;;; C6C6;HANGUL SYLLABLE UJ;Lo;0;L;;;;;N;;;;; C6C7;HANGUL SYLLABLE UC;Lo;0;L;;;;;N;;;;; C6C8;HANGUL SYLLABLE UK;Lo;0;L;;;;;N;;;;; C6C9;HANGUL SYLLABLE UT;Lo;0;L;;;;;N;;;;; C6CA;HANGUL SYLLABLE UP;Lo;0;L;;;;;N;;;;; C6CB;HANGUL SYLLABLE UH;Lo;0;L;;;;;N;;;;; C6CC;HANGUL SYLLABLE WEO;Lo;0;L;;;;;N;;;;; C6CD;HANGUL SYLLABLE WEOG;Lo;0;L;;;;;N;;;;; C6CE;HANGUL SYLLABLE WEOGG;Lo;0;L;;;;;N;;;;; C6CF;HANGUL SYLLABLE WEOGS;Lo;0;L;;;;;N;;;;; C6D0;HANGUL SYLLABLE WEON;Lo;0;L;;;;;N;;;;; C6D1;HANGUL SYLLABLE WEONI;Lo;0;L;;;;;N;;;;; C6D2;HANGUL SYLLABLE WEONH;Lo;0;L;;;;;N;;;;; C6D3;HANGUL SYLLABLE WEOD;Lo;0;L;;;;;N;;;;; C6D4;HANGUL SYLLABLE WEOL;Lo;0;L;;;;;N;;;;; C6D5;HANGUL SYLLABLE WEOLG;Lo;0;L;;;;;N;;;;; C6D6;HANGUL SYLLABLE WEOLM;Lo;0;L;;;;;N;;;;; C6D7;HANGUL SYLLABLE WEOLB;Lo;0;L;;;;;N;;;;; C6D8;HANGUL SYLLABLE WEOLS;Lo;0;L;;;;;N;;;;; C6D9;HANGUL SYLLABLE WEOLT;Lo;0;L;;;;;N;;;;; C6DA;HANGUL SYLLABLE WEOLP;Lo;0;L;;;;;N;;;;; C6DB;HANGUL SYLLABLE WEOLH;Lo;0;L;;;;;N;;;;; C6DC;HANGUL SYLLABLE WEOM;Lo;0;L;;;;;N;;;;; C6DD;HANGUL SYLLABLE WEOB;Lo;0;L;;;;;N;;;;; C6DE;HANGUL SYLLABLE WEOBS;Lo;0;L;;;;;N;;;;; C6DF;HANGUL SYLLABLE WEOS;Lo;0;L;;;;;N;;;;; C6E0;HANGUL SYLLABLE WEOSS;Lo;0;L;;;;;N;;;;; C6E1;HANGUL SYLLABLE WEONG;Lo;0;L;;;;;N;;;;; C6E2;HANGUL SYLLABLE WEOJ;Lo;0;L;;;;;N;;;;; C6E3;HANGUL SYLLABLE WEOC;Lo;0;L;;;;;N;;;;; C6E4;HANGUL SYLLABLE WEOK;Lo;0;L;;;;;N;;;;; C6E5;HANGUL SYLLABLE WEOT;Lo;0;L;;;;;N;;;;; C6E6;HANGUL SYLLABLE WEOP;Lo;0;L;;;;;N;;;;; C6E7;HANGUL SYLLABLE WEOH;Lo;0;L;;;;;N;;;;; C6E8;HANGUL SYLLABLE WE;Lo;0;L;;;;;N;;;;; C6E9;HANGUL SYLLABLE WEG;Lo;0;L;;;;;N;;;;; C6EA;HANGUL SYLLABLE WEGG;Lo;0;L;;;;;N;;;;; C6EB;HANGUL SYLLABLE WEGS;Lo;0;L;;;;;N;;;;; C6EC;HANGUL SYLLABLE WEN;Lo;0;L;;;;;N;;;;; C6ED;HANGUL SYLLABLE WENI;Lo;0;L;;;;;N;;;;; C6EE;HANGUL SYLLABLE WENH;Lo;0;L;;;;;N;;;;; C6EF;HANGUL SYLLABLE WED;Lo;0;L;;;;;N;;;;; C6F0;HANGUL SYLLABLE WEL;Lo;0;L;;;;;N;;;;; C6F1;HANGUL SYLLABLE WELG;Lo;0;L;;;;;N;;;;; C6F2;HANGUL SYLLABLE WELM;Lo;0;L;;;;;N;;;;; C6F3;HANGUL SYLLABLE WELB;Lo;0;L;;;;;N;;;;; C6F4;HANGUL SYLLABLE WELS;Lo;0;L;;;;;N;;;;; C6F5;HANGUL SYLLABLE WELT;Lo;0;L;;;;;N;;;;; C6F6;HANGUL SYLLABLE WELP;Lo;0;L;;;;;N;;;;; C6F7;HANGUL SYLLABLE WELH;Lo;0;L;;;;;N;;;;; C6F8;HANGUL SYLLABLE WEM;Lo;0;L;;;;;N;;;;; C6F9;HANGUL SYLLABLE WEB;Lo;0;L;;;;;N;;;;; C6FA;HANGUL SYLLABLE WEBS;Lo;0;L;;;;;N;;;;; C6FB;HANGUL SYLLABLE WES;Lo;0;L;;;;;N;;;;; C6FC;HANGUL SYLLABLE WESS;Lo;0;L;;;;;N;;;;; C6FD;HANGUL SYLLABLE WENG;Lo;0;L;;;;;N;;;;; C6FE;HANGUL SYLLABLE WEJ;Lo;0;L;;;;;N;;;;; C6FF;HANGUL SYLLABLE WEC;Lo;0;L;;;;;N;;;;; C700;HANGUL SYLLABLE WEK;Lo;0;L;;;;;N;;;;; C701;HANGUL SYLLABLE WET;Lo;0;L;;;;;N;;;;; C702;HANGUL SYLLABLE WEP;Lo;0;L;;;;;N;;;;; C703;HANGUL SYLLABLE WEH;Lo;0;L;;;;;N;;;;; C704;HANGUL SYLLABLE WI;Lo;0;L;;;;;N;;;;; C705;HANGUL SYLLABLE WIG;Lo;0;L;;;;;N;;;;; C706;HANGUL SYLLABLE WIGG;Lo;0;L;;;;;N;;;;; C707;HANGUL SYLLABLE WIGS;Lo;0;L;;;;;N;;;;; C708;HANGUL SYLLABLE WIN;Lo;0;L;;;;;N;;;;; C709;HANGUL SYLLABLE WINI;Lo;0;L;;;;;N;;;;; C70A;HANGUL SYLLABLE WINH;Lo;0;L;;;;;N;;;;; C70B;HANGUL SYLLABLE WID;Lo;0;L;;;;;N;;;;; C70C;HANGUL SYLLABLE WIL;Lo;0;L;;;;;N;;;;; C70D;HANGUL SYLLABLE WILG;Lo;0;L;;;;;N;;;;; C70E;HANGUL SYLLABLE WILM;Lo;0;L;;;;;N;;;;; C70F;HANGUL SYLLABLE WILB;Lo;0;L;;;;;N;;;;; C710;HANGUL SYLLABLE WILS;Lo;0;L;;;;;N;;;;; C711;HANGUL SYLLABLE WILT;Lo;0;L;;;;;N;;;;; C712;HANGUL SYLLABLE WILP;Lo;0;L;;;;;N;;;;; C713;HANGUL SYLLABLE WILH;Lo;0;L;;;;;N;;;;; C714;HANGUL SYLLABLE WIM;Lo;0;L;;;;;N;;;;; C715;HANGUL SYLLABLE WIB;Lo;0;L;;;;;N;;;;; C716;HANGUL SYLLABLE WIBS;Lo;0;L;;;;;N;;;;; C717;HANGUL SYLLABLE WIS;Lo;0;L;;;;;N;;;;; C718;HANGUL SYLLABLE WISS;Lo;0;L;;;;;N;;;;; C719;HANGUL SYLLABLE WING;Lo;0;L;;;;;N;;;;; C71A;HANGUL SYLLABLE WIJ;Lo;0;L;;;;;N;;;;; C71B;HANGUL SYLLABLE WIC;Lo;0;L;;;;;N;;;;; C71C;HANGUL SYLLABLE WIK;Lo;0;L;;;;;N;;;;; C71D;HANGUL SYLLABLE WIT;Lo;0;L;;;;;N;;;;; C71E;HANGUL SYLLABLE WIP;Lo;0;L;;;;;N;;;;; C71F;HANGUL SYLLABLE WIH;Lo;0;L;;;;;N;;;;; C720;HANGUL SYLLABLE YU;Lo;0;L;;;;;N;;;;; C721;HANGUL SYLLABLE YUG;Lo;0;L;;;;;N;;;;; C722;HANGUL SYLLABLE YUGG;Lo;0;L;;;;;N;;;;; C723;HANGUL SYLLABLE YUGS;Lo;0;L;;;;;N;;;;; C724;HANGUL SYLLABLE YUN;Lo;0;L;;;;;N;;;;; C725;HANGUL SYLLABLE YUNI;Lo;0;L;;;;;N;;;;; C726;HANGUL SYLLABLE YUNH;Lo;0;L;;;;;N;;;;; C727;HANGUL SYLLABLE YUD;Lo;0;L;;;;;N;;;;; C728;HANGUL SYLLABLE YUL;Lo;0;L;;;;;N;;;;; C729;HANGUL SYLLABLE YULG;Lo;0;L;;;;;N;;;;; C72A;HANGUL SYLLABLE YULM;Lo;0;L;;;;;N;;;;; C72B;HANGUL SYLLABLE YULB;Lo;0;L;;;;;N;;;;; C72C;HANGUL SYLLABLE YULS;Lo;0;L;;;;;N;;;;; C72D;HANGUL SYLLABLE YULT;Lo;0;L;;;;;N;;;;; C72E;HANGUL SYLLABLE YULP;Lo;0;L;;;;;N;;;;; C72F;HANGUL SYLLABLE YULH;Lo;0;L;;;;;N;;;;; C730;HANGUL SYLLABLE YUM;Lo;0;L;;;;;N;;;;; C731;HANGUL SYLLABLE YUB;Lo;0;L;;;;;N;;;;; C732;HANGUL SYLLABLE YUBS;Lo;0;L;;;;;N;;;;; C733;HANGUL SYLLABLE YUS;Lo;0;L;;;;;N;;;;; C734;HANGUL SYLLABLE YUSS;Lo;0;L;;;;;N;;;;; C735;HANGUL SYLLABLE YUNG;Lo;0;L;;;;;N;;;;; C736;HANGUL SYLLABLE YUJ;Lo;0;L;;;;;N;;;;; C737;HANGUL SYLLABLE YUC;Lo;0;L;;;;;N;;;;; C738;HANGUL SYLLABLE YUK;Lo;0;L;;;;;N;;;;; C739;HANGUL SYLLABLE YUT;Lo;0;L;;;;;N;;;;; C73A;HANGUL SYLLABLE YUP;Lo;0;L;;;;;N;;;;; C73B;HANGUL SYLLABLE YUH;Lo;0;L;;;;;N;;;;; C73C;HANGUL SYLLABLE EU;Lo;0;L;;;;;N;;;;; C73D;HANGUL SYLLABLE EUG;Lo;0;L;;;;;N;;;;; C73E;HANGUL SYLLABLE EUGG;Lo;0;L;;;;;N;;;;; C73F;HANGUL SYLLABLE EUGS;Lo;0;L;;;;;N;;;;; C740;HANGUL SYLLABLE EUN;Lo;0;L;;;;;N;;;;; C741;HANGUL SYLLABLE EUNI;Lo;0;L;;;;;N;;;;; C742;HANGUL SYLLABLE EUNH;Lo;0;L;;;;;N;;;;; C743;HANGUL SYLLABLE EUD;Lo;0;L;;;;;N;;;;; C744;HANGUL SYLLABLE EUL;Lo;0;L;;;;;N;;;;; C745;HANGUL SYLLABLE EULG;Lo;0;L;;;;;N;;;;; C746;HANGUL SYLLABLE EULM;Lo;0;L;;;;;N;;;;; C747;HANGUL SYLLABLE EULB;Lo;0;L;;;;;N;;;;; C748;HANGUL SYLLABLE EULS;Lo;0;L;;;;;N;;;;; C749;HANGUL SYLLABLE EULT;Lo;0;L;;;;;N;;;;; C74A;HANGUL SYLLABLE EULP;Lo;0;L;;;;;N;;;;; C74B;HANGUL SYLLABLE EULH;Lo;0;L;;;;;N;;;;; C74C;HANGUL SYLLABLE EUM;Lo;0;L;;;;;N;;;;; C74D;HANGUL SYLLABLE EUB;Lo;0;L;;;;;N;;;;; C74E;HANGUL SYLLABLE EUBS;Lo;0;L;;;;;N;;;;; C74F;HANGUL SYLLABLE EUS;Lo;0;L;;;;;N;;;;; C750;HANGUL SYLLABLE EUSS;Lo;0;L;;;;;N;;;;; C751;HANGUL SYLLABLE EUNG;Lo;0;L;;;;;N;;;;; C752;HANGUL SYLLABLE EUJ;Lo;0;L;;;;;N;;;;; C753;HANGUL SYLLABLE EUC;Lo;0;L;;;;;N;;;;; C754;HANGUL SYLLABLE EUK;Lo;0;L;;;;;N;;;;; C755;HANGUL SYLLABLE EUT;Lo;0;L;;;;;N;;;;; C756;HANGUL SYLLABLE EUP;Lo;0;L;;;;;N;;;;; C757;HANGUL SYLLABLE EUH;Lo;0;L;;;;;N;;;;; C758;HANGUL SYLLABLE YI;Lo;0;L;;;;;N;;;;; C759;HANGUL SYLLABLE YIG;Lo;0;L;;;;;N;;;;; C75A;HANGUL SYLLABLE YIGG;Lo;0;L;;;;;N;;;;; C75B;HANGUL SYLLABLE YIGS;Lo;0;L;;;;;N;;;;; C75C;HANGUL SYLLABLE YIN;Lo;0;L;;;;;N;;;;; C75D;HANGUL SYLLABLE YINI;Lo;0;L;;;;;N;;;;; C75E;HANGUL SYLLABLE YINH;Lo;0;L;;;;;N;;;;; C75F;HANGUL SYLLABLE YID;Lo;0;L;;;;;N;;;;; C760;HANGUL SYLLABLE YIL;Lo;0;L;;;;;N;;;;; C761;HANGUL SYLLABLE YILG;Lo;0;L;;;;;N;;;;; C762;HANGUL SYLLABLE YILM;Lo;0;L;;;;;N;;;;; C763;HANGUL SYLLABLE YILB;Lo;0;L;;;;;N;;;;; C764;HANGUL SYLLABLE YILS;Lo;0;L;;;;;N;;;;; C765;HANGUL SYLLABLE YILT;Lo;0;L;;;;;N;;;;; C766;HANGUL SYLLABLE YILP;Lo;0;L;;;;;N;;;;; C767;HANGUL SYLLABLE YILH;Lo;0;L;;;;;N;;;;; C768;HANGUL SYLLABLE YIM;Lo;0;L;;;;;N;;;;; C769;HANGUL SYLLABLE YIB;Lo;0;L;;;;;N;;;;; C76A;HANGUL SYLLABLE YIBS;Lo;0;L;;;;;N;;;;; C76B;HANGUL SYLLABLE YIS;Lo;0;L;;;;;N;;;;; C76C;HANGUL SYLLABLE YISS;Lo;0;L;;;;;N;;;;; C76D;HANGUL SYLLABLE YING;Lo;0;L;;;;;N;;;;; C76E;HANGUL SYLLABLE YIJ;Lo;0;L;;;;;N;;;;; C76F;HANGUL SYLLABLE YIC;Lo;0;L;;;;;N;;;;; C770;HANGUL SYLLABLE YIK;Lo;0;L;;;;;N;;;;; C771;HANGUL SYLLABLE YIT;Lo;0;L;;;;;N;;;;; C772;HANGUL SYLLABLE YIP;Lo;0;L;;;;;N;;;;; C773;HANGUL SYLLABLE YIH;Lo;0;L;;;;;N;;;;; C774;HANGUL SYLLABLE I;Lo;0;L;;;;;N;;;;; C775;HANGUL SYLLABLE IG;Lo;0;L;;;;;N;;;;; C776;HANGUL SYLLABLE IGG;Lo;0;L;;;;;N;;;;; C777;HANGUL SYLLABLE IGS;Lo;0;L;;;;;N;;;;; C778;HANGUL SYLLABLE IN;Lo;0;L;;;;;N;;;;; C779;HANGUL SYLLABLE INI;Lo;0;L;;;;;N;;;;; C77A;HANGUL SYLLABLE INH;Lo;0;L;;;;;N;;;;; C77B;HANGUL SYLLABLE ID;Lo;0;L;;;;;N;;;;; C77C;HANGUL SYLLABLE IL;Lo;0;L;;;;;N;;;;; C77D;HANGUL SYLLABLE ILG;Lo;0;L;;;;;N;;;;; C77E;HANGUL SYLLABLE ILM;Lo;0;L;;;;;N;;;;; C77F;HANGUL SYLLABLE ILB;Lo;0;L;;;;;N;;;;; C780;HANGUL SYLLABLE ILS;Lo;0;L;;;;;N;;;;; C781;HANGUL SYLLABLE ILT;Lo;0;L;;;;;N;;;;; C782;HANGUL SYLLABLE ILP;Lo;0;L;;;;;N;;;;; C783;HANGUL SYLLABLE ILH;Lo;0;L;;;;;N;;;;; C784;HANGUL SYLLABLE IM;Lo;0;L;;;;;N;;;;; C785;HANGUL SYLLABLE IB;Lo;0;L;;;;;N;;;;; C786;HANGUL SYLLABLE IBS;Lo;0;L;;;;;N;;;;; C787;HANGUL SYLLABLE IS;Lo;0;L;;;;;N;;;;; C788;HANGUL SYLLABLE ISS;Lo;0;L;;;;;N;;;;; C789;HANGUL SYLLABLE ING;Lo;0;L;;;;;N;;;;; C78A;HANGUL SYLLABLE IJ;Lo;0;L;;;;;N;;;;; C78B;HANGUL SYLLABLE IC;Lo;0;L;;;;;N;;;;; C78C;HANGUL SYLLABLE IK;Lo;0;L;;;;;N;;;;; C78D;HANGUL SYLLABLE IT;Lo;0;L;;;;;N;;;;; C78E;HANGUL SYLLABLE IP;Lo;0;L;;;;;N;;;;; C78F;HANGUL SYLLABLE IH;Lo;0;L;;;;;N;;;;; C790;HANGUL SYLLABLE JA;Lo;0;L;;;;;N;;;;; C791;HANGUL SYLLABLE JAG;Lo;0;L;;;;;N;;;;; C792;HANGUL SYLLABLE JAGG;Lo;0;L;;;;;N;;;;; C793;HANGUL SYLLABLE JAGS;Lo;0;L;;;;;N;;;;; C794;HANGUL SYLLABLE JAN;Lo;0;L;;;;;N;;;;; C795;HANGUL SYLLABLE JANI;Lo;0;L;;;;;N;;;;; C796;HANGUL SYLLABLE JANH;Lo;0;L;;;;;N;;;;; C797;HANGUL SYLLABLE JAD;Lo;0;L;;;;;N;;;;; C798;HANGUL SYLLABLE JAL;Lo;0;L;;;;;N;;;;; C799;HANGUL SYLLABLE JALG;Lo;0;L;;;;;N;;;;; C79A;HANGUL SYLLABLE JALM;Lo;0;L;;;;;N;;;;; C79B;HANGUL SYLLABLE JALB;Lo;0;L;;;;;N;;;;; C79C;HANGUL SYLLABLE JALS;Lo;0;L;;;;;N;;;;; C79D;HANGUL SYLLABLE JALT;Lo;0;L;;;;;N;;;;; C79E;HANGUL SYLLABLE JALP;Lo;0;L;;;;;N;;;;; C79F;HANGUL SYLLABLE JALH;Lo;0;L;;;;;N;;;;; C7A0;HANGUL SYLLABLE JAM;Lo;0;L;;;;;N;;;;; C7A1;HANGUL SYLLABLE JAB;Lo;0;L;;;;;N;;;;; C7A2;HANGUL SYLLABLE JABS;Lo;0;L;;;;;N;;;;; C7A3;HANGUL SYLLABLE JAS;Lo;0;L;;;;;N;;;;; C7A4;HANGUL SYLLABLE JASS;Lo;0;L;;;;;N;;;;; C7A5;HANGUL SYLLABLE JANG;Lo;0;L;;;;;N;;;;; C7A6;HANGUL SYLLABLE JAJ;Lo;0;L;;;;;N;;;;; C7A7;HANGUL SYLLABLE JAC;Lo;0;L;;;;;N;;;;; C7A8;HANGUL SYLLABLE JAK;Lo;0;L;;;;;N;;;;; C7A9;HANGUL SYLLABLE JAT;Lo;0;L;;;;;N;;;;; C7AA;HANGUL SYLLABLE JAP;Lo;0;L;;;;;N;;;;; C7AB;HANGUL SYLLABLE JAH;Lo;0;L;;;;;N;;;;; C7AC;HANGUL SYLLABLE JAE;Lo;0;L;;;;;N;;;;; C7AD;HANGUL SYLLABLE JAEG;Lo;0;L;;;;;N;;;;; C7AE;HANGUL SYLLABLE JAEGG;Lo;0;L;;;;;N;;;;; C7AF;HANGUL SYLLABLE JAEGS;Lo;0;L;;;;;N;;;;; C7B0;HANGUL SYLLABLE JAEN;Lo;0;L;;;;;N;;;;; C7B1;HANGUL SYLLABLE JAENI;Lo;0;L;;;;;N;;;;; C7B2;HANGUL SYLLABLE JAENH;Lo;0;L;;;;;N;;;;; C7B3;HANGUL SYLLABLE JAED;Lo;0;L;;;;;N;;;;; C7B4;HANGUL SYLLABLE JAEL;Lo;0;L;;;;;N;;;;; C7B5;HANGUL SYLLABLE JAELG;Lo;0;L;;;;;N;;;;; C7B6;HANGUL SYLLABLE JAELM;Lo;0;L;;;;;N;;;;; C7B7;HANGUL SYLLABLE JAELB;Lo;0;L;;;;;N;;;;; C7B8;HANGUL SYLLABLE JAELS;Lo;0;L;;;;;N;;;;; C7B9;HANGUL SYLLABLE JAELT;Lo;0;L;;;;;N;;;;; C7BA;HANGUL SYLLABLE JAELP;Lo;0;L;;;;;N;;;;; C7BB;HANGUL SYLLABLE JAELH;Lo;0;L;;;;;N;;;;; C7BC;HANGUL SYLLABLE JAEM;Lo;0;L;;;;;N;;;;; C7BD;HANGUL SYLLABLE JAEB;Lo;0;L;;;;;N;;;;; C7BE;HANGUL SYLLABLE JAEBS;Lo;0;L;;;;;N;;;;; C7BF;HANGUL SYLLABLE JAES;Lo;0;L;;;;;N;;;;; C7C0;HANGUL SYLLABLE JAESS;Lo;0;L;;;;;N;;;;; C7C1;HANGUL SYLLABLE JAENG;Lo;0;L;;;;;N;;;;; C7C2;HANGUL SYLLABLE JAEJ;Lo;0;L;;;;;N;;;;; C7C3;HANGUL SYLLABLE JAEC;Lo;0;L;;;;;N;;;;; C7C4;HANGUL SYLLABLE JAEK;Lo;0;L;;;;;N;;;;; C7C5;HANGUL SYLLABLE JAET;Lo;0;L;;;;;N;;;;; C7C6;HANGUL SYLLABLE JAEP;Lo;0;L;;;;;N;;;;; C7C7;HANGUL SYLLABLE JAEH;Lo;0;L;;;;;N;;;;; C7C8;HANGUL SYLLABLE JYA;Lo;0;L;;;;;N;;;;; C7C9;HANGUL SYLLABLE JYAG;Lo;0;L;;;;;N;;;;; C7CA;HANGUL SYLLABLE JYAGG;Lo;0;L;;;;;N;;;;; C7CB;HANGUL SYLLABLE JYAGS;Lo;0;L;;;;;N;;;;; C7CC;HANGUL SYLLABLE JYAN;Lo;0;L;;;;;N;;;;; C7CD;HANGUL SYLLABLE JYANI;Lo;0;L;;;;;N;;;;; C7CE;HANGUL SYLLABLE JYANH;Lo;0;L;;;;;N;;;;; C7CF;HANGUL SYLLABLE JYAD;Lo;0;L;;;;;N;;;;; C7D0;HANGUL SYLLABLE JYAL;Lo;0;L;;;;;N;;;;; C7D1;HANGUL SYLLABLE JYALG;Lo;0;L;;;;;N;;;;; C7D2;HANGUL SYLLABLE JYALM;Lo;0;L;;;;;N;;;;; C7D3;HANGUL SYLLABLE JYALB;Lo;0;L;;;;;N;;;;; C7D4;HANGUL SYLLABLE JYALS;Lo;0;L;;;;;N;;;;; C7D5;HANGUL SYLLABLE JYALT;Lo;0;L;;;;;N;;;;; C7D6;HANGUL SYLLABLE JYALP;Lo;0;L;;;;;N;;;;; C7D7;HANGUL SYLLABLE JYALH;Lo;0;L;;;;;N;;;;; C7D8;HANGUL SYLLABLE JYAM;Lo;0;L;;;;;N;;;;; C7D9;HANGUL SYLLABLE JYAB;Lo;0;L;;;;;N;;;;; C7DA;HANGUL SYLLABLE JYABS;Lo;0;L;;;;;N;;;;; C7DB;HANGUL SYLLABLE JYAS;Lo;0;L;;;;;N;;;;; C7DC;HANGUL SYLLABLE JYASS;Lo;0;L;;;;;N;;;;; C7DD;HANGUL SYLLABLE JYANG;Lo;0;L;;;;;N;;;;; C7DE;HANGUL SYLLABLE JYAJ;Lo;0;L;;;;;N;;;;; C7DF;HANGUL SYLLABLE JYAC;Lo;0;L;;;;;N;;;;; C7E0;HANGUL SYLLABLE JYAK;Lo;0;L;;;;;N;;;;; C7E1;HANGUL SYLLABLE JYAT;Lo;0;L;;;;;N;;;;; C7E2;HANGUL SYLLABLE JYAP;Lo;0;L;;;;;N;;;;; C7E3;HANGUL SYLLABLE JYAH;Lo;0;L;;;;;N;;;;; C7E4;HANGUL SYLLABLE JYAE;Lo;0;L;;;;;N;;;;; C7E5;HANGUL SYLLABLE JYAEG;Lo;0;L;;;;;N;;;;; C7E6;HANGUL SYLLABLE JYAEGG;Lo;0;L;;;;;N;;;;; C7E7;HANGUL SYLLABLE JYAEGS;Lo;0;L;;;;;N;;;;; C7E8;HANGUL SYLLABLE JYAEN;Lo;0;L;;;;;N;;;;; C7E9;HANGUL SYLLABLE JYAENI;Lo;0;L;;;;;N;;;;; C7EA;HANGUL SYLLABLE JYAENH;Lo;0;L;;;;;N;;;;; C7EB;HANGUL SYLLABLE JYAED;Lo;0;L;;;;;N;;;;; C7EC;HANGUL SYLLABLE JYAEL;Lo;0;L;;;;;N;;;;; C7ED;HANGUL SYLLABLE JYAELG;Lo;0;L;;;;;N;;;;; C7EE;HANGUL SYLLABLE JYAELM;Lo;0;L;;;;;N;;;;; C7EF;HANGUL SYLLABLE JYAELB;Lo;0;L;;;;;N;;;;; C7F0;HANGUL SYLLABLE JYAELS;Lo;0;L;;;;;N;;;;; C7F1;HANGUL SYLLABLE JYAELT;Lo;0;L;;;;;N;;;;; C7F2;HANGUL SYLLABLE JYAELP;Lo;0;L;;;;;N;;;;; C7F3;HANGUL SYLLABLE JYAELH;Lo;0;L;;;;;N;;;;; C7F4;HANGUL SYLLABLE JYAEM;Lo;0;L;;;;;N;;;;; C7F5;HANGUL SYLLABLE JYAEB;Lo;0;L;;;;;N;;;;; C7F6;HANGUL SYLLABLE JYAEBS;Lo;0;L;;;;;N;;;;; C7F7;HANGUL SYLLABLE JYAES;Lo;0;L;;;;;N;;;;; C7F8;HANGUL SYLLABLE JYAESS;Lo;0;L;;;;;N;;;;; C7F9;HANGUL SYLLABLE JYAENG;Lo;0;L;;;;;N;;;;; C7FA;HANGUL SYLLABLE JYAEJ;Lo;0;L;;;;;N;;;;; C7FB;HANGUL SYLLABLE JYAEC;Lo;0;L;;;;;N;;;;; C7FC;HANGUL SYLLABLE JYAEK;Lo;0;L;;;;;N;;;;; C7FD;HANGUL SYLLABLE JYAET;Lo;0;L;;;;;N;;;;; C7FE;HANGUL SYLLABLE JYAEP;Lo;0;L;;;;;N;;;;; C7FF;HANGUL SYLLABLE JYAEH;Lo;0;L;;;;;N;;;;; C800;HANGUL SYLLABLE JEO;Lo;0;L;;;;;N;;;;; C801;HANGUL SYLLABLE JEOG;Lo;0;L;;;;;N;;;;; C802;HANGUL SYLLABLE JEOGG;Lo;0;L;;;;;N;;;;; C803;HANGUL SYLLABLE JEOGS;Lo;0;L;;;;;N;;;;; C804;HANGUL SYLLABLE JEON;Lo;0;L;;;;;N;;;;; C805;HANGUL SYLLABLE JEONI;Lo;0;L;;;;;N;;;;; C806;HANGUL SYLLABLE JEONH;Lo;0;L;;;;;N;;;;; C807;HANGUL SYLLABLE JEOD;Lo;0;L;;;;;N;;;;; C808;HANGUL SYLLABLE JEOL;Lo;0;L;;;;;N;;;;; C809;HANGUL SYLLABLE JEOLG;Lo;0;L;;;;;N;;;;; C80A;HANGUL SYLLABLE JEOLM;Lo;0;L;;;;;N;;;;; C80B;HANGUL SYLLABLE JEOLB;Lo;0;L;;;;;N;;;;; C80C;HANGUL SYLLABLE JEOLS;Lo;0;L;;;;;N;;;;; C80D;HANGUL SYLLABLE JEOLT;Lo;0;L;;;;;N;;;;; C80E;HANGUL SYLLABLE JEOLP;Lo;0;L;;;;;N;;;;; C80F;HANGUL SYLLABLE JEOLH;Lo;0;L;;;;;N;;;;; C810;HANGUL SYLLABLE JEOM;Lo;0;L;;;;;N;;;;; C811;HANGUL SYLLABLE JEOB;Lo;0;L;;;;;N;;;;; C812;HANGUL SYLLABLE JEOBS;Lo;0;L;;;;;N;;;;; C813;HANGUL SYLLABLE JEOS;Lo;0;L;;;;;N;;;;; C814;HANGUL SYLLABLE JEOSS;Lo;0;L;;;;;N;;;;; C815;HANGUL SYLLABLE JEONG;Lo;0;L;;;;;N;;;;; C816;HANGUL SYLLABLE JEOJ;Lo;0;L;;;;;N;;;;; C817;HANGUL SYLLABLE JEOC;Lo;0;L;;;;;N;;;;; C818;HANGUL SYLLABLE JEOK;Lo;0;L;;;;;N;;;;; C819;HANGUL SYLLABLE JEOT;Lo;0;L;;;;;N;;;;; C81A;HANGUL SYLLABLE JEOP;Lo;0;L;;;;;N;;;;; C81B;HANGUL SYLLABLE JEOH;Lo;0;L;;;;;N;;;;; C81C;HANGUL SYLLABLE JE;Lo;0;L;;;;;N;;;;; C81D;HANGUL SYLLABLE JEG;Lo;0;L;;;;;N;;;;; C81E;HANGUL SYLLABLE JEGG;Lo;0;L;;;;;N;;;;; C81F;HANGUL SYLLABLE JEGS;Lo;0;L;;;;;N;;;;; C820;HANGUL SYLLABLE JEN;Lo;0;L;;;;;N;;;;; C821;HANGUL SYLLABLE JENI;Lo;0;L;;;;;N;;;;; C822;HANGUL SYLLABLE JENH;Lo;0;L;;;;;N;;;;; C823;HANGUL SYLLABLE JED;Lo;0;L;;;;;N;;;;; C824;HANGUL SYLLABLE JEL;Lo;0;L;;;;;N;;;;; C825;HANGUL SYLLABLE JELG;Lo;0;L;;;;;N;;;;; C826;HANGUL SYLLABLE JELM;Lo;0;L;;;;;N;;;;; C827;HANGUL SYLLABLE JELB;Lo;0;L;;;;;N;;;;; C828;HANGUL SYLLABLE JELS;Lo;0;L;;;;;N;;;;; C829;HANGUL SYLLABLE JELT;Lo;0;L;;;;;N;;;;; C82A;HANGUL SYLLABLE JELP;Lo;0;L;;;;;N;;;;; C82B;HANGUL SYLLABLE JELH;Lo;0;L;;;;;N;;;;; C82C;HANGUL SYLLABLE JEM;Lo;0;L;;;;;N;;;;; C82D;HANGUL SYLLABLE JEB;Lo;0;L;;;;;N;;;;; C82E;HANGUL SYLLABLE JEBS;Lo;0;L;;;;;N;;;;; C82F;HANGUL SYLLABLE JES;Lo;0;L;;;;;N;;;;; C830;HANGUL SYLLABLE JESS;Lo;0;L;;;;;N;;;;; C831;HANGUL SYLLABLE JENG;Lo;0;L;;;;;N;;;;; C832;HANGUL SYLLABLE JEJ;Lo;0;L;;;;;N;;;;; C833;HANGUL SYLLABLE JEC;Lo;0;L;;;;;N;;;;; C834;HANGUL SYLLABLE JEK;Lo;0;L;;;;;N;;;;; C835;HANGUL SYLLABLE JET;Lo;0;L;;;;;N;;;;; C836;HANGUL SYLLABLE JEP;Lo;0;L;;;;;N;;;;; C837;HANGUL SYLLABLE JEH;Lo;0;L;;;;;N;;;;; C838;HANGUL SYLLABLE JYEO;Lo;0;L;;;;;N;;;;; C839;HANGUL SYLLABLE JYEOG;Lo;0;L;;;;;N;;;;; C83A;HANGUL SYLLABLE JYEOGG;Lo;0;L;;;;;N;;;;; C83B;HANGUL SYLLABLE JYEOGS;Lo;0;L;;;;;N;;;;; C83C;HANGUL SYLLABLE JYEON;Lo;0;L;;;;;N;;;;; C83D;HANGUL SYLLABLE JYEONI;Lo;0;L;;;;;N;;;;; C83E;HANGUL SYLLABLE JYEONH;Lo;0;L;;;;;N;;;;; C83F;HANGUL SYLLABLE JYEOD;Lo;0;L;;;;;N;;;;; C840;HANGUL SYLLABLE JYEOL;Lo;0;L;;;;;N;;;;; C841;HANGUL SYLLABLE JYEOLG;Lo;0;L;;;;;N;;;;; C842;HANGUL SYLLABLE JYEOLM;Lo;0;L;;;;;N;;;;; C843;HANGUL SYLLABLE JYEOLB;Lo;0;L;;;;;N;;;;; C844;HANGUL SYLLABLE JYEOLS;Lo;0;L;;;;;N;;;;; C845;HANGUL SYLLABLE JYEOLT;Lo;0;L;;;;;N;;;;; C846;HANGUL SYLLABLE JYEOLP;Lo;0;L;;;;;N;;;;; C847;HANGUL SYLLABLE JYEOLH;Lo;0;L;;;;;N;;;;; C848;HANGUL SYLLABLE JYEOM;Lo;0;L;;;;;N;;;;; C849;HANGUL SYLLABLE JYEOB;Lo;0;L;;;;;N;;;;; C84A;HANGUL SYLLABLE JYEOBS;Lo;0;L;;;;;N;;;;; C84B;HANGUL SYLLABLE JYEOS;Lo;0;L;;;;;N;;;;; C84C;HANGUL SYLLABLE JYEOSS;Lo;0;L;;;;;N;;;;; C84D;HANGUL SYLLABLE JYEONG;Lo;0;L;;;;;N;;;;; C84E;HANGUL SYLLABLE JYEOJ;Lo;0;L;;;;;N;;;;; C84F;HANGUL SYLLABLE JYEOC;Lo;0;L;;;;;N;;;;; C850;HANGUL SYLLABLE JYEOK;Lo;0;L;;;;;N;;;;; C851;HANGUL SYLLABLE JYEOT;Lo;0;L;;;;;N;;;;; C852;HANGUL SYLLABLE JYEOP;Lo;0;L;;;;;N;;;;; C853;HANGUL SYLLABLE JYEOH;Lo;0;L;;;;;N;;;;; C854;HANGUL SYLLABLE JYE;Lo;0;L;;;;;N;;;;; C855;HANGUL SYLLABLE JYEG;Lo;0;L;;;;;N;;;;; C856;HANGUL SYLLABLE JYEGG;Lo;0;L;;;;;N;;;;; C857;HANGUL SYLLABLE JYEGS;Lo;0;L;;;;;N;;;;; C858;HANGUL SYLLABLE JYEN;Lo;0;L;;;;;N;;;;; C859;HANGUL SYLLABLE JYENI;Lo;0;L;;;;;N;;;;; C85A;HANGUL SYLLABLE JYENH;Lo;0;L;;;;;N;;;;; C85B;HANGUL SYLLABLE JYED;Lo;0;L;;;;;N;;;;; C85C;HANGUL SYLLABLE JYEL;Lo;0;L;;;;;N;;;;; C85D;HANGUL SYLLABLE JYELG;Lo;0;L;;;;;N;;;;; C85E;HANGUL SYLLABLE JYELM;Lo;0;L;;;;;N;;;;; C85F;HANGUL SYLLABLE JYELB;Lo;0;L;;;;;N;;;;; C860;HANGUL SYLLABLE JYELS;Lo;0;L;;;;;N;;;;; C861;HANGUL SYLLABLE JYELT;Lo;0;L;;;;;N;;;;; C862;HANGUL SYLLABLE JYELP;Lo;0;L;;;;;N;;;;; C863;HANGUL SYLLABLE JYELH;Lo;0;L;;;;;N;;;;; C864;HANGUL SYLLABLE JYEM;Lo;0;L;;;;;N;;;;; C865;HANGUL SYLLABLE JYEB;Lo;0;L;;;;;N;;;;; C866;HANGUL SYLLABLE JYEBS;Lo;0;L;;;;;N;;;;; C867;HANGUL SYLLABLE JYES;Lo;0;L;;;;;N;;;;; C868;HANGUL SYLLABLE JYESS;Lo;0;L;;;;;N;;;;; C869;HANGUL SYLLABLE JYENG;Lo;0;L;;;;;N;;;;; C86A;HANGUL SYLLABLE JYEJ;Lo;0;L;;;;;N;;;;; C86B;HANGUL SYLLABLE JYEC;Lo;0;L;;;;;N;;;;; C86C;HANGUL SYLLABLE JYEK;Lo;0;L;;;;;N;;;;; C86D;HANGUL SYLLABLE JYET;Lo;0;L;;;;;N;;;;; C86E;HANGUL SYLLABLE JYEP;Lo;0;L;;;;;N;;;;; C86F;HANGUL SYLLABLE JYEH;Lo;0;L;;;;;N;;;;; C870;HANGUL SYLLABLE JO;Lo;0;L;;;;;N;;;;; C871;HANGUL SYLLABLE JOG;Lo;0;L;;;;;N;;;;; C872;HANGUL SYLLABLE JOGG;Lo;0;L;;;;;N;;;;; C873;HANGUL SYLLABLE JOGS;Lo;0;L;;;;;N;;;;; C874;HANGUL SYLLABLE JON;Lo;0;L;;;;;N;;;;; C875;HANGUL SYLLABLE JONI;Lo;0;L;;;;;N;;;;; C876;HANGUL SYLLABLE JONH;Lo;0;L;;;;;N;;;;; C877;HANGUL SYLLABLE JOD;Lo;0;L;;;;;N;;;;; C878;HANGUL SYLLABLE JOL;Lo;0;L;;;;;N;;;;; C879;HANGUL SYLLABLE JOLG;Lo;0;L;;;;;N;;;;; C87A;HANGUL SYLLABLE JOLM;Lo;0;L;;;;;N;;;;; C87B;HANGUL SYLLABLE JOLB;Lo;0;L;;;;;N;;;;; C87C;HANGUL SYLLABLE JOLS;Lo;0;L;;;;;N;;;;; C87D;HANGUL SYLLABLE JOLT;Lo;0;L;;;;;N;;;;; C87E;HANGUL SYLLABLE JOLP;Lo;0;L;;;;;N;;;;; C87F;HANGUL SYLLABLE JOLH;Lo;0;L;;;;;N;;;;; C880;HANGUL SYLLABLE JOM;Lo;0;L;;;;;N;;;;; C881;HANGUL SYLLABLE JOB;Lo;0;L;;;;;N;;;;; C882;HANGUL SYLLABLE JOBS;Lo;0;L;;;;;N;;;;; C883;HANGUL SYLLABLE JOS;Lo;0;L;;;;;N;;;;; C884;HANGUL SYLLABLE JOSS;Lo;0;L;;;;;N;;;;; C885;HANGUL SYLLABLE JONG;Lo;0;L;;;;;N;;;;; C886;HANGUL SYLLABLE JOJ;Lo;0;L;;;;;N;;;;; C887;HANGUL SYLLABLE JOC;Lo;0;L;;;;;N;;;;; C888;HANGUL SYLLABLE JOK;Lo;0;L;;;;;N;;;;; C889;HANGUL SYLLABLE JOT;Lo;0;L;;;;;N;;;;; C88A;HANGUL SYLLABLE JOP;Lo;0;L;;;;;N;;;;; C88B;HANGUL SYLLABLE JOH;Lo;0;L;;;;;N;;;;; C88C;HANGUL SYLLABLE JWA;Lo;0;L;;;;;N;;;;; C88D;HANGUL SYLLABLE JWAG;Lo;0;L;;;;;N;;;;; C88E;HANGUL SYLLABLE JWAGG;Lo;0;L;;;;;N;;;;; C88F;HANGUL SYLLABLE JWAGS;Lo;0;L;;;;;N;;;;; C890;HANGUL SYLLABLE JWAN;Lo;0;L;;;;;N;;;;; C891;HANGUL SYLLABLE JWANI;Lo;0;L;;;;;N;;;;; C892;HANGUL SYLLABLE JWANH;Lo;0;L;;;;;N;;;;; C893;HANGUL SYLLABLE JWAD;Lo;0;L;;;;;N;;;;; C894;HANGUL SYLLABLE JWAL;Lo;0;L;;;;;N;;;;; C895;HANGUL SYLLABLE JWALG;Lo;0;L;;;;;N;;;;; C896;HANGUL SYLLABLE JWALM;Lo;0;L;;;;;N;;;;; C897;HANGUL SYLLABLE JWALB;Lo;0;L;;;;;N;;;;; C898;HANGUL SYLLABLE JWALS;Lo;0;L;;;;;N;;;;; C899;HANGUL SYLLABLE JWALT;Lo;0;L;;;;;N;;;;; C89A;HANGUL SYLLABLE JWALP;Lo;0;L;;;;;N;;;;; C89B;HANGUL SYLLABLE JWALH;Lo;0;L;;;;;N;;;;; C89C;HANGUL SYLLABLE JWAM;Lo;0;L;;;;;N;;;;; C89D;HANGUL SYLLABLE JWAB;Lo;0;L;;;;;N;;;;; C89E;HANGUL SYLLABLE JWABS;Lo;0;L;;;;;N;;;;; C89F;HANGUL SYLLABLE JWAS;Lo;0;L;;;;;N;;;;; C8A0;HANGUL SYLLABLE JWASS;Lo;0;L;;;;;N;;;;; C8A1;HANGUL SYLLABLE JWANG;Lo;0;L;;;;;N;;;;; C8A2;HANGUL SYLLABLE JWAJ;Lo;0;L;;;;;N;;;;; C8A3;HANGUL SYLLABLE JWAC;Lo;0;L;;;;;N;;;;; C8A4;HANGUL SYLLABLE JWAK;Lo;0;L;;;;;N;;;;; C8A5;HANGUL SYLLABLE JWAT;Lo;0;L;;;;;N;;;;; C8A6;HANGUL SYLLABLE JWAP;Lo;0;L;;;;;N;;;;; C8A7;HANGUL SYLLABLE JWAH;Lo;0;L;;;;;N;;;;; C8A8;HANGUL SYLLABLE JWAE;Lo;0;L;;;;;N;;;;; C8A9;HANGUL SYLLABLE JWAEG;Lo;0;L;;;;;N;;;;; C8AA;HANGUL SYLLABLE JWAEGG;Lo;0;L;;;;;N;;;;; C8AB;HANGUL SYLLABLE JWAEGS;Lo;0;L;;;;;N;;;;; C8AC;HANGUL SYLLABLE JWAEN;Lo;0;L;;;;;N;;;;; C8AD;HANGUL SYLLABLE JWAENI;Lo;0;L;;;;;N;;;;; C8AE;HANGUL SYLLABLE JWAENH;Lo;0;L;;;;;N;;;;; C8AF;HANGUL SYLLABLE JWAED;Lo;0;L;;;;;N;;;;; C8B0;HANGUL SYLLABLE JWAEL;Lo;0;L;;;;;N;;;;; C8B1;HANGUL SYLLABLE JWAELG;Lo;0;L;;;;;N;;;;; C8B2;HANGUL SYLLABLE JWAELM;Lo;0;L;;;;;N;;;;; C8B3;HANGUL SYLLABLE JWAELB;Lo;0;L;;;;;N;;;;; C8B4;HANGUL SYLLABLE JWAELS;Lo;0;L;;;;;N;;;;; C8B5;HANGUL SYLLABLE JWAELT;Lo;0;L;;;;;N;;;;; C8B6;HANGUL SYLLABLE JWAELP;Lo;0;L;;;;;N;;;;; C8B7;HANGUL SYLLABLE JWAELH;Lo;0;L;;;;;N;;;;; C8B8;HANGUL SYLLABLE JWAEM;Lo;0;L;;;;;N;;;;; C8B9;HANGUL SYLLABLE JWAEB;Lo;0;L;;;;;N;;;;; C8BA;HANGUL SYLLABLE JWAEBS;Lo;0;L;;;;;N;;;;; C8BB;HANGUL SYLLABLE JWAES;Lo;0;L;;;;;N;;;;; C8BC;HANGUL SYLLABLE JWAESS;Lo;0;L;;;;;N;;;;; C8BD;HANGUL SYLLABLE JWAENG;Lo;0;L;;;;;N;;;;; C8BE;HANGUL SYLLABLE JWAEJ;Lo;0;L;;;;;N;;;;; C8BF;HANGUL SYLLABLE JWAEC;Lo;0;L;;;;;N;;;;; C8C0;HANGUL SYLLABLE JWAEK;Lo;0;L;;;;;N;;;;; C8C1;HANGUL SYLLABLE JWAET;Lo;0;L;;;;;N;;;;; C8C2;HANGUL SYLLABLE JWAEP;Lo;0;L;;;;;N;;;;; C8C3;HANGUL SYLLABLE JWAEH;Lo;0;L;;;;;N;;;;; C8C4;HANGUL SYLLABLE JOE;Lo;0;L;;;;;N;;;;; C8C5;HANGUL SYLLABLE JOEG;Lo;0;L;;;;;N;;;;; C8C6;HANGUL SYLLABLE JOEGG;Lo;0;L;;;;;N;;;;; C8C7;HANGUL SYLLABLE JOEGS;Lo;0;L;;;;;N;;;;; C8C8;HANGUL SYLLABLE JOEN;Lo;0;L;;;;;N;;;;; C8C9;HANGUL SYLLABLE JOENI;Lo;0;L;;;;;N;;;;; C8CA;HANGUL SYLLABLE JOENH;Lo;0;L;;;;;N;;;;; C8CB;HANGUL SYLLABLE JOED;Lo;0;L;;;;;N;;;;; C8CC;HANGUL SYLLABLE JOEL;Lo;0;L;;;;;N;;;;; C8CD;HANGUL SYLLABLE JOELG;Lo;0;L;;;;;N;;;;; C8CE;HANGUL SYLLABLE JOELM;Lo;0;L;;;;;N;;;;; C8CF;HANGUL SYLLABLE JOELB;Lo;0;L;;;;;N;;;;; C8D0;HANGUL SYLLABLE JOELS;Lo;0;L;;;;;N;;;;; C8D1;HANGUL SYLLABLE JOELT;Lo;0;L;;;;;N;;;;; C8D2;HANGUL SYLLABLE JOELP;Lo;0;L;;;;;N;;;;; C8D3;HANGUL SYLLABLE JOELH;Lo;0;L;;;;;N;;;;; C8D4;HANGUL SYLLABLE JOEM;Lo;0;L;;;;;N;;;;; C8D5;HANGUL SYLLABLE JOEB;Lo;0;L;;;;;N;;;;; C8D6;HANGUL SYLLABLE JOEBS;Lo;0;L;;;;;N;;;;; C8D7;HANGUL SYLLABLE JOES;Lo;0;L;;;;;N;;;;; C8D8;HANGUL SYLLABLE JOESS;Lo;0;L;;;;;N;;;;; C8D9;HANGUL SYLLABLE JOENG;Lo;0;L;;;;;N;;;;; C8DA;HANGUL SYLLABLE JOEJ;Lo;0;L;;;;;N;;;;; C8DB;HANGUL SYLLABLE JOEC;Lo;0;L;;;;;N;;;;; C8DC;HANGUL SYLLABLE JOEK;Lo;0;L;;;;;N;;;;; C8DD;HANGUL SYLLABLE JOET;Lo;0;L;;;;;N;;;;; C8DE;HANGUL SYLLABLE JOEP;Lo;0;L;;;;;N;;;;; C8DF;HANGUL SYLLABLE JOEH;Lo;0;L;;;;;N;;;;; C8E0;HANGUL SYLLABLE JYO;Lo;0;L;;;;;N;;;;; C8E1;HANGUL SYLLABLE JYOG;Lo;0;L;;;;;N;;;;; C8E2;HANGUL SYLLABLE JYOGG;Lo;0;L;;;;;N;;;;; C8E3;HANGUL SYLLABLE JYOGS;Lo;0;L;;;;;N;;;;; C8E4;HANGUL SYLLABLE JYON;Lo;0;L;;;;;N;;;;; C8E5;HANGUL SYLLABLE JYONI;Lo;0;L;;;;;N;;;;; C8E6;HANGUL SYLLABLE JYONH;Lo;0;L;;;;;N;;;;; C8E7;HANGUL SYLLABLE JYOD;Lo;0;L;;;;;N;;;;; C8E8;HANGUL SYLLABLE JYOL;Lo;0;L;;;;;N;;;;; C8E9;HANGUL SYLLABLE JYOLG;Lo;0;L;;;;;N;;;;; C8EA;HANGUL SYLLABLE JYOLM;Lo;0;L;;;;;N;;;;; C8EB;HANGUL SYLLABLE JYOLB;Lo;0;L;;;;;N;;;;; C8EC;HANGUL SYLLABLE JYOLS;Lo;0;L;;;;;N;;;;; C8ED;HANGUL SYLLABLE JYOLT;Lo;0;L;;;;;N;;;;; C8EE;HANGUL SYLLABLE JYOLP;Lo;0;L;;;;;N;;;;; C8EF;HANGUL SYLLABLE JYOLH;Lo;0;L;;;;;N;;;;; C8F0;HANGUL SYLLABLE JYOM;Lo;0;L;;;;;N;;;;; C8F1;HANGUL SYLLABLE JYOB;Lo;0;L;;;;;N;;;;; C8F2;HANGUL SYLLABLE JYOBS;Lo;0;L;;;;;N;;;;; C8F3;HANGUL SYLLABLE JYOS;Lo;0;L;;;;;N;;;;; C8F4;HANGUL SYLLABLE JYOSS;Lo;0;L;;;;;N;;;;; C8F5;HANGUL SYLLABLE JYONG;Lo;0;L;;;;;N;;;;; C8F6;HANGUL SYLLABLE JYOJ;Lo;0;L;;;;;N;;;;; C8F7;HANGUL SYLLABLE JYOC;Lo;0;L;;;;;N;;;;; C8F8;HANGUL SYLLABLE JYOK;Lo;0;L;;;;;N;;;;; C8F9;HANGUL SYLLABLE JYOT;Lo;0;L;;;;;N;;;;; C8FA;HANGUL SYLLABLE JYOP;Lo;0;L;;;;;N;;;;; C8FB;HANGUL SYLLABLE JYOH;Lo;0;L;;;;;N;;;;; C8FC;HANGUL SYLLABLE JU;Lo;0;L;;;;;N;;;;; C8FD;HANGUL SYLLABLE JUG;Lo;0;L;;;;;N;;;;; C8FE;HANGUL SYLLABLE JUGG;Lo;0;L;;;;;N;;;;; C8FF;HANGUL SYLLABLE JUGS;Lo;0;L;;;;;N;;;;; C900;HANGUL SYLLABLE JUN;Lo;0;L;;;;;N;;;;; C901;HANGUL SYLLABLE JUNI;Lo;0;L;;;;;N;;;;; C902;HANGUL SYLLABLE JUNH;Lo;0;L;;;;;N;;;;; C903;HANGUL SYLLABLE JUD;Lo;0;L;;;;;N;;;;; C904;HANGUL SYLLABLE JUL;Lo;0;L;;;;;N;;;;; C905;HANGUL SYLLABLE JULG;Lo;0;L;;;;;N;;;;; C906;HANGUL SYLLABLE JULM;Lo;0;L;;;;;N;;;;; C907;HANGUL SYLLABLE JULB;Lo;0;L;;;;;N;;;;; C908;HANGUL SYLLABLE JULS;Lo;0;L;;;;;N;;;;; C909;HANGUL SYLLABLE JULT;Lo;0;L;;;;;N;;;;; C90A;HANGUL SYLLABLE JULP;Lo;0;L;;;;;N;;;;; C90B;HANGUL SYLLABLE JULH;Lo;0;L;;;;;N;;;;; C90C;HANGUL SYLLABLE JUM;Lo;0;L;;;;;N;;;;; C90D;HANGUL SYLLABLE JUB;Lo;0;L;;;;;N;;;;; C90E;HANGUL SYLLABLE JUBS;Lo;0;L;;;;;N;;;;; C90F;HANGUL SYLLABLE JUS;Lo;0;L;;;;;N;;;;; C910;HANGUL SYLLABLE JUSS;Lo;0;L;;;;;N;;;;; C911;HANGUL SYLLABLE JUNG;Lo;0;L;;;;;N;;;;; C912;HANGUL SYLLABLE JUJ;Lo;0;L;;;;;N;;;;; C913;HANGUL SYLLABLE JUC;Lo;0;L;;;;;N;;;;; C914;HANGUL SYLLABLE JUK;Lo;0;L;;;;;N;;;;; C915;HANGUL SYLLABLE JUT;Lo;0;L;;;;;N;;;;; C916;HANGUL SYLLABLE JUP;Lo;0;L;;;;;N;;;;; C917;HANGUL SYLLABLE JUH;Lo;0;L;;;;;N;;;;; C918;HANGUL SYLLABLE JWEO;Lo;0;L;;;;;N;;;;; C919;HANGUL SYLLABLE JWEOG;Lo;0;L;;;;;N;;;;; C91A;HANGUL SYLLABLE JWEOGG;Lo;0;L;;;;;N;;;;; C91B;HANGUL SYLLABLE JWEOGS;Lo;0;L;;;;;N;;;;; C91C;HANGUL SYLLABLE JWEON;Lo;0;L;;;;;N;;;;; C91D;HANGUL SYLLABLE JWEONI;Lo;0;L;;;;;N;;;;; C91E;HANGUL SYLLABLE JWEONH;Lo;0;L;;;;;N;;;;; C91F;HANGUL SYLLABLE JWEOD;Lo;0;L;;;;;N;;;;; C920;HANGUL SYLLABLE JWEOL;Lo;0;L;;;;;N;;;;; C921;HANGUL SYLLABLE JWEOLG;Lo;0;L;;;;;N;;;;; C922;HANGUL SYLLABLE JWEOLM;Lo;0;L;;;;;N;;;;; C923;HANGUL SYLLABLE JWEOLB;Lo;0;L;;;;;N;;;;; C924;HANGUL SYLLABLE JWEOLS;Lo;0;L;;;;;N;;;;; C925;HANGUL SYLLABLE JWEOLT;Lo;0;L;;;;;N;;;;; C926;HANGUL SYLLABLE JWEOLP;Lo;0;L;;;;;N;;;;; C927;HANGUL SYLLABLE JWEOLH;Lo;0;L;;;;;N;;;;; C928;HANGUL SYLLABLE JWEOM;Lo;0;L;;;;;N;;;;; C929;HANGUL SYLLABLE JWEOB;Lo;0;L;;;;;N;;;;; C92A;HANGUL SYLLABLE JWEOBS;Lo;0;L;;;;;N;;;;; C92B;HANGUL SYLLABLE JWEOS;Lo;0;L;;;;;N;;;;; C92C;HANGUL SYLLABLE JWEOSS;Lo;0;L;;;;;N;;;;; C92D;HANGUL SYLLABLE JWEONG;Lo;0;L;;;;;N;;;;; C92E;HANGUL SYLLABLE JWEOJ;Lo;0;L;;;;;N;;;;; C92F;HANGUL SYLLABLE JWEOC;Lo;0;L;;;;;N;;;;; C930;HANGUL SYLLABLE JWEOK;Lo;0;L;;;;;N;;;;; C931;HANGUL SYLLABLE JWEOT;Lo;0;L;;;;;N;;;;; C932;HANGUL SYLLABLE JWEOP;Lo;0;L;;;;;N;;;;; C933;HANGUL SYLLABLE JWEOH;Lo;0;L;;;;;N;;;;; C934;HANGUL SYLLABLE JWE;Lo;0;L;;;;;N;;;;; C935;HANGUL SYLLABLE JWEG;Lo;0;L;;;;;N;;;;; C936;HANGUL SYLLABLE JWEGG;Lo;0;L;;;;;N;;;;; C937;HANGUL SYLLABLE JWEGS;Lo;0;L;;;;;N;;;;; C938;HANGUL SYLLABLE JWEN;Lo;0;L;;;;;N;;;;; C939;HANGUL SYLLABLE JWENI;Lo;0;L;;;;;N;;;;; C93A;HANGUL SYLLABLE JWENH;Lo;0;L;;;;;N;;;;; C93B;HANGUL SYLLABLE JWED;Lo;0;L;;;;;N;;;;; C93C;HANGUL SYLLABLE JWEL;Lo;0;L;;;;;N;;;;; C93D;HANGUL SYLLABLE JWELG;Lo;0;L;;;;;N;;;;; C93E;HANGUL SYLLABLE JWELM;Lo;0;L;;;;;N;;;;; C93F;HANGUL SYLLABLE JWELB;Lo;0;L;;;;;N;;;;; C940;HANGUL SYLLABLE JWELS;Lo;0;L;;;;;N;;;;; C941;HANGUL SYLLABLE JWELT;Lo;0;L;;;;;N;;;;; C942;HANGUL SYLLABLE JWELP;Lo;0;L;;;;;N;;;;; C943;HANGUL SYLLABLE JWELH;Lo;0;L;;;;;N;;;;; C944;HANGUL SYLLABLE JWEM;Lo;0;L;;;;;N;;;;; C945;HANGUL SYLLABLE JWEB;Lo;0;L;;;;;N;;;;; C946;HANGUL SYLLABLE JWEBS;Lo;0;L;;;;;N;;;;; C947;HANGUL SYLLABLE JWES;Lo;0;L;;;;;N;;;;; C948;HANGUL SYLLABLE JWESS;Lo;0;L;;;;;N;;;;; C949;HANGUL SYLLABLE JWENG;Lo;0;L;;;;;N;;;;; C94A;HANGUL SYLLABLE JWEJ;Lo;0;L;;;;;N;;;;; C94B;HANGUL SYLLABLE JWEC;Lo;0;L;;;;;N;;;;; C94C;HANGUL SYLLABLE JWEK;Lo;0;L;;;;;N;;;;; C94D;HANGUL SYLLABLE JWET;Lo;0;L;;;;;N;;;;; C94E;HANGUL SYLLABLE JWEP;Lo;0;L;;;;;N;;;;; C94F;HANGUL SYLLABLE JWEH;Lo;0;L;;;;;N;;;;; C950;HANGUL SYLLABLE JWI;Lo;0;L;;;;;N;;;;; C951;HANGUL SYLLABLE JWIG;Lo;0;L;;;;;N;;;;; C952;HANGUL SYLLABLE JWIGG;Lo;0;L;;;;;N;;;;; C953;HANGUL SYLLABLE JWIGS;Lo;0;L;;;;;N;;;;; C954;HANGUL SYLLABLE JWIN;Lo;0;L;;;;;N;;;;; C955;HANGUL SYLLABLE JWINI;Lo;0;L;;;;;N;;;;; C956;HANGUL SYLLABLE JWINH;Lo;0;L;;;;;N;;;;; C957;HANGUL SYLLABLE JWID;Lo;0;L;;;;;N;;;;; C958;HANGUL SYLLABLE JWIL;Lo;0;L;;;;;N;;;;; C959;HANGUL SYLLABLE JWILG;Lo;0;L;;;;;N;;;;; C95A;HANGUL SYLLABLE JWILM;Lo;0;L;;;;;N;;;;; C95B;HANGUL SYLLABLE JWILB;Lo;0;L;;;;;N;;;;; C95C;HANGUL SYLLABLE JWILS;Lo;0;L;;;;;N;;;;; C95D;HANGUL SYLLABLE JWILT;Lo;0;L;;;;;N;;;;; C95E;HANGUL SYLLABLE JWILP;Lo;0;L;;;;;N;;;;; C95F;HANGUL SYLLABLE JWILH;Lo;0;L;;;;;N;;;;; C960;HANGUL SYLLABLE JWIM;Lo;0;L;;;;;N;;;;; C961;HANGUL SYLLABLE JWIB;Lo;0;L;;;;;N;;;;; C962;HANGUL SYLLABLE JWIBS;Lo;0;L;;;;;N;;;;; C963;HANGUL SYLLABLE JWIS;Lo;0;L;;;;;N;;;;; C964;HANGUL SYLLABLE JWISS;Lo;0;L;;;;;N;;;;; C965;HANGUL SYLLABLE JWING;Lo;0;L;;;;;N;;;;; C966;HANGUL SYLLABLE JWIJ;Lo;0;L;;;;;N;;;;; C967;HANGUL SYLLABLE JWIC;Lo;0;L;;;;;N;;;;; C968;HANGUL SYLLABLE JWIK;Lo;0;L;;;;;N;;;;; C969;HANGUL SYLLABLE JWIT;Lo;0;L;;;;;N;;;;; C96A;HANGUL SYLLABLE JWIP;Lo;0;L;;;;;N;;;;; C96B;HANGUL SYLLABLE JWIH;Lo;0;L;;;;;N;;;;; C96C;HANGUL SYLLABLE JYU;Lo;0;L;;;;;N;;;;; C96D;HANGUL SYLLABLE JYUG;Lo;0;L;;;;;N;;;;; C96E;HANGUL SYLLABLE JYUGG;Lo;0;L;;;;;N;;;;; C96F;HANGUL SYLLABLE JYUGS;Lo;0;L;;;;;N;;;;; C970;HANGUL SYLLABLE JYUN;Lo;0;L;;;;;N;;;;; C971;HANGUL SYLLABLE JYUNI;Lo;0;L;;;;;N;;;;; C972;HANGUL SYLLABLE JYUNH;Lo;0;L;;;;;N;;;;; C973;HANGUL SYLLABLE JYUD;Lo;0;L;;;;;N;;;;; C974;HANGUL SYLLABLE JYUL;Lo;0;L;;;;;N;;;;; C975;HANGUL SYLLABLE JYULG;Lo;0;L;;;;;N;;;;; C976;HANGUL SYLLABLE JYULM;Lo;0;L;;;;;N;;;;; C977;HANGUL SYLLABLE JYULB;Lo;0;L;;;;;N;;;;; C978;HANGUL SYLLABLE JYULS;Lo;0;L;;;;;N;;;;; C979;HANGUL SYLLABLE JYULT;Lo;0;L;;;;;N;;;;; C97A;HANGUL SYLLABLE JYULP;Lo;0;L;;;;;N;;;;; C97B;HANGUL SYLLABLE JYULH;Lo;0;L;;;;;N;;;;; C97C;HANGUL SYLLABLE JYUM;Lo;0;L;;;;;N;;;;; C97D;HANGUL SYLLABLE JYUB;Lo;0;L;;;;;N;;;;; C97E;HANGUL SYLLABLE JYUBS;Lo;0;L;;;;;N;;;;; C97F;HANGUL SYLLABLE JYUS;Lo;0;L;;;;;N;;;;; C980;HANGUL SYLLABLE JYUSS;Lo;0;L;;;;;N;;;;; C981;HANGUL SYLLABLE JYUNG;Lo;0;L;;;;;N;;;;; C982;HANGUL SYLLABLE JYUJ;Lo;0;L;;;;;N;;;;; C983;HANGUL SYLLABLE JYUC;Lo;0;L;;;;;N;;;;; C984;HANGUL SYLLABLE JYUK;Lo;0;L;;;;;N;;;;; C985;HANGUL SYLLABLE JYUT;Lo;0;L;;;;;N;;;;; C986;HANGUL SYLLABLE JYUP;Lo;0;L;;;;;N;;;;; C987;HANGUL SYLLABLE JYUH;Lo;0;L;;;;;N;;;;; C988;HANGUL SYLLABLE JEU;Lo;0;L;;;;;N;;;;; C989;HANGUL SYLLABLE JEUG;Lo;0;L;;;;;N;;;;; C98A;HANGUL SYLLABLE JEUGG;Lo;0;L;;;;;N;;;;; C98B;HANGUL SYLLABLE JEUGS;Lo;0;L;;;;;N;;;;; C98C;HANGUL SYLLABLE JEUN;Lo;0;L;;;;;N;;;;; C98D;HANGUL SYLLABLE JEUNI;Lo;0;L;;;;;N;;;;; C98E;HANGUL SYLLABLE JEUNH;Lo;0;L;;;;;N;;;;; C98F;HANGUL SYLLABLE JEUD;Lo;0;L;;;;;N;;;;; C990;HANGUL SYLLABLE JEUL;Lo;0;L;;;;;N;;;;; C991;HANGUL SYLLABLE JEULG;Lo;0;L;;;;;N;;;;; C992;HANGUL SYLLABLE JEULM;Lo;0;L;;;;;N;;;;; C993;HANGUL SYLLABLE JEULB;Lo;0;L;;;;;N;;;;; C994;HANGUL SYLLABLE JEULS;Lo;0;L;;;;;N;;;;; C995;HANGUL SYLLABLE JEULT;Lo;0;L;;;;;N;;;;; C996;HANGUL SYLLABLE JEULP;Lo;0;L;;;;;N;;;;; C997;HANGUL SYLLABLE JEULH;Lo;0;L;;;;;N;;;;; C998;HANGUL SYLLABLE JEUM;Lo;0;L;;;;;N;;;;; C999;HANGUL SYLLABLE JEUB;Lo;0;L;;;;;N;;;;; C99A;HANGUL SYLLABLE JEUBS;Lo;0;L;;;;;N;;;;; C99B;HANGUL SYLLABLE JEUS;Lo;0;L;;;;;N;;;;; C99C;HANGUL SYLLABLE JEUSS;Lo;0;L;;;;;N;;;;; C99D;HANGUL SYLLABLE JEUNG;Lo;0;L;;;;;N;;;;; C99E;HANGUL SYLLABLE JEUJ;Lo;0;L;;;;;N;;;;; C99F;HANGUL SYLLABLE JEUC;Lo;0;L;;;;;N;;;;; C9A0;HANGUL SYLLABLE JEUK;Lo;0;L;;;;;N;;;;; C9A1;HANGUL SYLLABLE JEUT;Lo;0;L;;;;;N;;;;; C9A2;HANGUL SYLLABLE JEUP;Lo;0;L;;;;;N;;;;; C9A3;HANGUL SYLLABLE JEUH;Lo;0;L;;;;;N;;;;; C9A4;HANGUL SYLLABLE JYI;Lo;0;L;;;;;N;;;;; C9A5;HANGUL SYLLABLE JYIG;Lo;0;L;;;;;N;;;;; C9A6;HANGUL SYLLABLE JYIGG;Lo;0;L;;;;;N;;;;; C9A7;HANGUL SYLLABLE JYIGS;Lo;0;L;;;;;N;;;;; C9A8;HANGUL SYLLABLE JYIN;Lo;0;L;;;;;N;;;;; C9A9;HANGUL SYLLABLE JYINI;Lo;0;L;;;;;N;;;;; C9AA;HANGUL SYLLABLE JYINH;Lo;0;L;;;;;N;;;;; C9AB;HANGUL SYLLABLE JYID;Lo;0;L;;;;;N;;;;; C9AC;HANGUL SYLLABLE JYIL;Lo;0;L;;;;;N;;;;; C9AD;HANGUL SYLLABLE JYILG;Lo;0;L;;;;;N;;;;; C9AE;HANGUL SYLLABLE JYILM;Lo;0;L;;;;;N;;;;; C9AF;HANGUL SYLLABLE JYILB;Lo;0;L;;;;;N;;;;; C9B0;HANGUL SYLLABLE JYILS;Lo;0;L;;;;;N;;;;; C9B1;HANGUL SYLLABLE JYILT;Lo;0;L;;;;;N;;;;; C9B2;HANGUL SYLLABLE JYILP;Lo;0;L;;;;;N;;;;; C9B3;HANGUL SYLLABLE JYILH;Lo;0;L;;;;;N;;;;; C9B4;HANGUL SYLLABLE JYIM;Lo;0;L;;;;;N;;;;; C9B5;HANGUL SYLLABLE JYIB;Lo;0;L;;;;;N;;;;; C9B6;HANGUL SYLLABLE JYIBS;Lo;0;L;;;;;N;;;;; C9B7;HANGUL SYLLABLE JYIS;Lo;0;L;;;;;N;;;;; C9B8;HANGUL SYLLABLE JYISS;Lo;0;L;;;;;N;;;;; C9B9;HANGUL SYLLABLE JYING;Lo;0;L;;;;;N;;;;; C9BA;HANGUL SYLLABLE JYIJ;Lo;0;L;;;;;N;;;;; C9BB;HANGUL SYLLABLE JYIC;Lo;0;L;;;;;N;;;;; C9BC;HANGUL SYLLABLE JYIK;Lo;0;L;;;;;N;;;;; C9BD;HANGUL SYLLABLE JYIT;Lo;0;L;;;;;N;;;;; C9BE;HANGUL SYLLABLE JYIP;Lo;0;L;;;;;N;;;;; C9BF;HANGUL SYLLABLE JYIH;Lo;0;L;;;;;N;;;;; C9C0;HANGUL SYLLABLE JI;Lo;0;L;;;;;N;;;;; C9C1;HANGUL SYLLABLE JIG;Lo;0;L;;;;;N;;;;; C9C2;HANGUL SYLLABLE JIGG;Lo;0;L;;;;;N;;;;; C9C3;HANGUL SYLLABLE JIGS;Lo;0;L;;;;;N;;;;; C9C4;HANGUL SYLLABLE JIN;Lo;0;L;;;;;N;;;;; C9C5;HANGUL SYLLABLE JINI;Lo;0;L;;;;;N;;;;; C9C6;HANGUL SYLLABLE JINH;Lo;0;L;;;;;N;;;;; C9C7;HANGUL SYLLABLE JID;Lo;0;L;;;;;N;;;;; C9C8;HANGUL SYLLABLE JIL;Lo;0;L;;;;;N;;;;; C9C9;HANGUL SYLLABLE JILG;Lo;0;L;;;;;N;;;;; C9CA;HANGUL SYLLABLE JILM;Lo;0;L;;;;;N;;;;; C9CB;HANGUL SYLLABLE JILB;Lo;0;L;;;;;N;;;;; C9CC;HANGUL SYLLABLE JILS;Lo;0;L;;;;;N;;;;; C9CD;HANGUL SYLLABLE JILT;Lo;0;L;;;;;N;;;;; C9CE;HANGUL SYLLABLE JILP;Lo;0;L;;;;;N;;;;; C9CF;HANGUL SYLLABLE JILH;Lo;0;L;;;;;N;;;;; C9D0;HANGUL SYLLABLE JIM;Lo;0;L;;;;;N;;;;; C9D1;HANGUL SYLLABLE JIB;Lo;0;L;;;;;N;;;;; C9D2;HANGUL SYLLABLE JIBS;Lo;0;L;;;;;N;;;;; C9D3;HANGUL SYLLABLE JIS;Lo;0;L;;;;;N;;;;; C9D4;HANGUL SYLLABLE JISS;Lo;0;L;;;;;N;;;;; C9D5;HANGUL SYLLABLE JING;Lo;0;L;;;;;N;;;;; C9D6;HANGUL SYLLABLE JIJ;Lo;0;L;;;;;N;;;;; C9D7;HANGUL SYLLABLE JIC;Lo;0;L;;;;;N;;;;; C9D8;HANGUL SYLLABLE JIK;Lo;0;L;;;;;N;;;;; C9D9;HANGUL SYLLABLE JIT;Lo;0;L;;;;;N;;;;; C9DA;HANGUL SYLLABLE JIP;Lo;0;L;;;;;N;;;;; C9DB;HANGUL SYLLABLE JIH;Lo;0;L;;;;;N;;;;; C9DC;HANGUL SYLLABLE JJA;Lo;0;L;;;;;N;;;;; C9DD;HANGUL SYLLABLE JJAG;Lo;0;L;;;;;N;;;;; C9DE;HANGUL SYLLABLE JJAGG;Lo;0;L;;;;;N;;;;; C9DF;HANGUL SYLLABLE JJAGS;Lo;0;L;;;;;N;;;;; C9E0;HANGUL SYLLABLE JJAN;Lo;0;L;;;;;N;;;;; C9E1;HANGUL SYLLABLE JJANI;Lo;0;L;;;;;N;;;;; C9E2;HANGUL SYLLABLE JJANH;Lo;0;L;;;;;N;;;;; C9E3;HANGUL SYLLABLE JJAD;Lo;0;L;;;;;N;;;;; C9E4;HANGUL SYLLABLE JJAL;Lo;0;L;;;;;N;;;;; C9E5;HANGUL SYLLABLE JJALG;Lo;0;L;;;;;N;;;;; C9E6;HANGUL SYLLABLE JJALM;Lo;0;L;;;;;N;;;;; C9E7;HANGUL SYLLABLE JJALB;Lo;0;L;;;;;N;;;;; C9E8;HANGUL SYLLABLE JJALS;Lo;0;L;;;;;N;;;;; C9E9;HANGUL SYLLABLE JJALT;Lo;0;L;;;;;N;;;;; C9EA;HANGUL SYLLABLE JJALP;Lo;0;L;;;;;N;;;;; C9EB;HANGUL SYLLABLE JJALH;Lo;0;L;;;;;N;;;;; C9EC;HANGUL SYLLABLE JJAM;Lo;0;L;;;;;N;;;;; C9ED;HANGUL SYLLABLE JJAB;Lo;0;L;;;;;N;;;;; C9EE;HANGUL SYLLABLE JJABS;Lo;0;L;;;;;N;;;;; C9EF;HANGUL SYLLABLE JJAS;Lo;0;L;;;;;N;;;;; C9F0;HANGUL SYLLABLE JJASS;Lo;0;L;;;;;N;;;;; C9F1;HANGUL SYLLABLE JJANG;Lo;0;L;;;;;N;;;;; C9F2;HANGUL SYLLABLE JJAJ;Lo;0;L;;;;;N;;;;; C9F3;HANGUL SYLLABLE JJAC;Lo;0;L;;;;;N;;;;; C9F4;HANGUL SYLLABLE JJAK;Lo;0;L;;;;;N;;;;; C9F5;HANGUL SYLLABLE JJAT;Lo;0;L;;;;;N;;;;; C9F6;HANGUL SYLLABLE JJAP;Lo;0;L;;;;;N;;;;; C9F7;HANGUL SYLLABLE JJAH;Lo;0;L;;;;;N;;;;; C9F8;HANGUL SYLLABLE JJAE;Lo;0;L;;;;;N;;;;; C9F9;HANGUL SYLLABLE JJAEG;Lo;0;L;;;;;N;;;;; C9FA;HANGUL SYLLABLE JJAEGG;Lo;0;L;;;;;N;;;;; C9FB;HANGUL SYLLABLE JJAEGS;Lo;0;L;;;;;N;;;;; C9FC;HANGUL SYLLABLE JJAEN;Lo;0;L;;;;;N;;;;; C9FD;HANGUL SYLLABLE JJAENI;Lo;0;L;;;;;N;;;;; C9FE;HANGUL SYLLABLE JJAENH;Lo;0;L;;;;;N;;;;; C9FF;HANGUL SYLLABLE JJAED;Lo;0;L;;;;;N;;;;; CA00;HANGUL SYLLABLE JJAEL;Lo;0;L;;;;;N;;;;; CA01;HANGUL SYLLABLE JJAELG;Lo;0;L;;;;;N;;;;; CA02;HANGUL SYLLABLE JJAELM;Lo;0;L;;;;;N;;;;; CA03;HANGUL SYLLABLE JJAELB;Lo;0;L;;;;;N;;;;; CA04;HANGUL SYLLABLE JJAELS;Lo;0;L;;;;;N;;;;; CA05;HANGUL SYLLABLE JJAELT;Lo;0;L;;;;;N;;;;; CA06;HANGUL SYLLABLE JJAELP;Lo;0;L;;;;;N;;;;; CA07;HANGUL SYLLABLE JJAELH;Lo;0;L;;;;;N;;;;; CA08;HANGUL SYLLABLE JJAEM;Lo;0;L;;;;;N;;;;; CA09;HANGUL SYLLABLE JJAEB;Lo;0;L;;;;;N;;;;; CA0A;HANGUL SYLLABLE JJAEBS;Lo;0;L;;;;;N;;;;; CA0B;HANGUL SYLLABLE JJAES;Lo;0;L;;;;;N;;;;; CA0C;HANGUL SYLLABLE JJAESS;Lo;0;L;;;;;N;;;;; CA0D;HANGUL SYLLABLE JJAENG;Lo;0;L;;;;;N;;;;; CA0E;HANGUL SYLLABLE JJAEJ;Lo;0;L;;;;;N;;;;; CA0F;HANGUL SYLLABLE JJAEC;Lo;0;L;;;;;N;;;;; CA10;HANGUL SYLLABLE JJAEK;Lo;0;L;;;;;N;;;;; CA11;HANGUL SYLLABLE JJAET;Lo;0;L;;;;;N;;;;; CA12;HANGUL SYLLABLE JJAEP;Lo;0;L;;;;;N;;;;; CA13;HANGUL SYLLABLE JJAEH;Lo;0;L;;;;;N;;;;; CA14;HANGUL SYLLABLE JJYA;Lo;0;L;;;;;N;;;;; CA15;HANGUL SYLLABLE JJYAG;Lo;0;L;;;;;N;;;;; CA16;HANGUL SYLLABLE JJYAGG;Lo;0;L;;;;;N;;;;; CA17;HANGUL SYLLABLE JJYAGS;Lo;0;L;;;;;N;;;;; CA18;HANGUL SYLLABLE JJYAN;Lo;0;L;;;;;N;;;;; CA19;HANGUL SYLLABLE JJYANI;Lo;0;L;;;;;N;;;;; CA1A;HANGUL SYLLABLE JJYANH;Lo;0;L;;;;;N;;;;; CA1B;HANGUL SYLLABLE JJYAD;Lo;0;L;;;;;N;;;;; CA1C;HANGUL SYLLABLE JJYAL;Lo;0;L;;;;;N;;;;; CA1D;HANGUL SYLLABLE JJYALG;Lo;0;L;;;;;N;;;;; CA1E;HANGUL SYLLABLE JJYALM;Lo;0;L;;;;;N;;;;; CA1F;HANGUL SYLLABLE JJYALB;Lo;0;L;;;;;N;;;;; CA20;HANGUL SYLLABLE JJYALS;Lo;0;L;;;;;N;;;;; CA21;HANGUL SYLLABLE JJYALT;Lo;0;L;;;;;N;;;;; CA22;HANGUL SYLLABLE JJYALP;Lo;0;L;;;;;N;;;;; CA23;HANGUL SYLLABLE JJYALH;Lo;0;L;;;;;N;;;;; CA24;HANGUL SYLLABLE JJYAM;Lo;0;L;;;;;N;;;;; CA25;HANGUL SYLLABLE JJYAB;Lo;0;L;;;;;N;;;;; CA26;HANGUL SYLLABLE JJYABS;Lo;0;L;;;;;N;;;;; CA27;HANGUL SYLLABLE JJYAS;Lo;0;L;;;;;N;;;;; CA28;HANGUL SYLLABLE JJYASS;Lo;0;L;;;;;N;;;;; CA29;HANGUL SYLLABLE JJYANG;Lo;0;L;;;;;N;;;;; CA2A;HANGUL SYLLABLE JJYAJ;Lo;0;L;;;;;N;;;;; CA2B;HANGUL SYLLABLE JJYAC;Lo;0;L;;;;;N;;;;; CA2C;HANGUL SYLLABLE JJYAK;Lo;0;L;;;;;N;;;;; CA2D;HANGUL SYLLABLE JJYAT;Lo;0;L;;;;;N;;;;; CA2E;HANGUL SYLLABLE JJYAP;Lo;0;L;;;;;N;;;;; CA2F;HANGUL SYLLABLE JJYAH;Lo;0;L;;;;;N;;;;; CA30;HANGUL SYLLABLE JJYAE;Lo;0;L;;;;;N;;;;; CA31;HANGUL SYLLABLE JJYAEG;Lo;0;L;;;;;N;;;;; CA32;HANGUL SYLLABLE JJYAEGG;Lo;0;L;;;;;N;;;;; CA33;HANGUL SYLLABLE JJYAEGS;Lo;0;L;;;;;N;;;;; CA34;HANGUL SYLLABLE JJYAEN;Lo;0;L;;;;;N;;;;; CA35;HANGUL SYLLABLE JJYAENI;Lo;0;L;;;;;N;;;;; CA36;HANGUL SYLLABLE JJYAENH;Lo;0;L;;;;;N;;;;; CA37;HANGUL SYLLABLE JJYAED;Lo;0;L;;;;;N;;;;; CA38;HANGUL SYLLABLE JJYAEL;Lo;0;L;;;;;N;;;;; CA39;HANGUL SYLLABLE JJYAELG;Lo;0;L;;;;;N;;;;; CA3A;HANGUL SYLLABLE JJYAELM;Lo;0;L;;;;;N;;;;; CA3B;HANGUL SYLLABLE JJYAELB;Lo;0;L;;;;;N;;;;; CA3C;HANGUL SYLLABLE JJYAELS;Lo;0;L;;;;;N;;;;; CA3D;HANGUL SYLLABLE JJYAELT;Lo;0;L;;;;;N;;;;; CA3E;HANGUL SYLLABLE JJYAELP;Lo;0;L;;;;;N;;;;; CA3F;HANGUL SYLLABLE JJYAELH;Lo;0;L;;;;;N;;;;; CA40;HANGUL SYLLABLE JJYAEM;Lo;0;L;;;;;N;;;;; CA41;HANGUL SYLLABLE JJYAEB;Lo;0;L;;;;;N;;;;; CA42;HANGUL SYLLABLE JJYAEBS;Lo;0;L;;;;;N;;;;; CA43;HANGUL SYLLABLE JJYAES;Lo;0;L;;;;;N;;;;; CA44;HANGUL SYLLABLE JJYAESS;Lo;0;L;;;;;N;;;;; CA45;HANGUL SYLLABLE JJYAENG;Lo;0;L;;;;;N;;;;; CA46;HANGUL SYLLABLE JJYAEJ;Lo;0;L;;;;;N;;;;; CA47;HANGUL SYLLABLE JJYAEC;Lo;0;L;;;;;N;;;;; CA48;HANGUL SYLLABLE JJYAEK;Lo;0;L;;;;;N;;;;; CA49;HANGUL SYLLABLE JJYAET;Lo;0;L;;;;;N;;;;; CA4A;HANGUL SYLLABLE JJYAEP;Lo;0;L;;;;;N;;;;; CA4B;HANGUL SYLLABLE JJYAEH;Lo;0;L;;;;;N;;;;; CA4C;HANGUL SYLLABLE JJEO;Lo;0;L;;;;;N;;;;; CA4D;HANGUL SYLLABLE JJEOG;Lo;0;L;;;;;N;;;;; CA4E;HANGUL SYLLABLE JJEOGG;Lo;0;L;;;;;N;;;;; CA4F;HANGUL SYLLABLE JJEOGS;Lo;0;L;;;;;N;;;;; CA50;HANGUL SYLLABLE JJEON;Lo;0;L;;;;;N;;;;; CA51;HANGUL SYLLABLE JJEONI;Lo;0;L;;;;;N;;;;; CA52;HANGUL SYLLABLE JJEONH;Lo;0;L;;;;;N;;;;; CA53;HANGUL SYLLABLE JJEOD;Lo;0;L;;;;;N;;;;; CA54;HANGUL SYLLABLE JJEOL;Lo;0;L;;;;;N;;;;; CA55;HANGUL SYLLABLE JJEOLG;Lo;0;L;;;;;N;;;;; CA56;HANGUL SYLLABLE JJEOLM;Lo;0;L;;;;;N;;;;; CA57;HANGUL SYLLABLE JJEOLB;Lo;0;L;;;;;N;;;;; CA58;HANGUL SYLLABLE JJEOLS;Lo;0;L;;;;;N;;;;; CA59;HANGUL SYLLABLE JJEOLT;Lo;0;L;;;;;N;;;;; CA5A;HANGUL SYLLABLE JJEOLP;Lo;0;L;;;;;N;;;;; CA5B;HANGUL SYLLABLE JJEOLH;Lo;0;L;;;;;N;;;;; CA5C;HANGUL SYLLABLE JJEOM;Lo;0;L;;;;;N;;;;; CA5D;HANGUL SYLLABLE JJEOB;Lo;0;L;;;;;N;;;;; CA5E;HANGUL SYLLABLE JJEOBS;Lo;0;L;;;;;N;;;;; CA5F;HANGUL SYLLABLE JJEOS;Lo;0;L;;;;;N;;;;; CA60;HANGUL SYLLABLE JJEOSS;Lo;0;L;;;;;N;;;;; CA61;HANGUL SYLLABLE JJEONG;Lo;0;L;;;;;N;;;;; CA62;HANGUL SYLLABLE JJEOJ;Lo;0;L;;;;;N;;;;; CA63;HANGUL SYLLABLE JJEOC;Lo;0;L;;;;;N;;;;; CA64;HANGUL SYLLABLE JJEOK;Lo;0;L;;;;;N;;;;; CA65;HANGUL SYLLABLE JJEOT;Lo;0;L;;;;;N;;;;; CA66;HANGUL SYLLABLE JJEOP;Lo;0;L;;;;;N;;;;; CA67;HANGUL SYLLABLE JJEOH;Lo;0;L;;;;;N;;;;; CA68;HANGUL SYLLABLE JJE;Lo;0;L;;;;;N;;;;; CA69;HANGUL SYLLABLE JJEG;Lo;0;L;;;;;N;;;;; CA6A;HANGUL SYLLABLE JJEGG;Lo;0;L;;;;;N;;;;; CA6B;HANGUL SYLLABLE JJEGS;Lo;0;L;;;;;N;;;;; CA6C;HANGUL SYLLABLE JJEN;Lo;0;L;;;;;N;;;;; CA6D;HANGUL SYLLABLE JJENI;Lo;0;L;;;;;N;;;;; CA6E;HANGUL SYLLABLE JJENH;Lo;0;L;;;;;N;;;;; CA6F;HANGUL SYLLABLE JJED;Lo;0;L;;;;;N;;;;; CA70;HANGUL SYLLABLE JJEL;Lo;0;L;;;;;N;;;;; CA71;HANGUL SYLLABLE JJELG;Lo;0;L;;;;;N;;;;; CA72;HANGUL SYLLABLE JJELM;Lo;0;L;;;;;N;;;;; CA73;HANGUL SYLLABLE JJELB;Lo;0;L;;;;;N;;;;; CA74;HANGUL SYLLABLE JJELS;Lo;0;L;;;;;N;;;;; CA75;HANGUL SYLLABLE JJELT;Lo;0;L;;;;;N;;;;; CA76;HANGUL SYLLABLE JJELP;Lo;0;L;;;;;N;;;;; CA77;HANGUL SYLLABLE JJELH;Lo;0;L;;;;;N;;;;; CA78;HANGUL SYLLABLE JJEM;Lo;0;L;;;;;N;;;;; CA79;HANGUL SYLLABLE JJEB;Lo;0;L;;;;;N;;;;; CA7A;HANGUL SYLLABLE JJEBS;Lo;0;L;;;;;N;;;;; CA7B;HANGUL SYLLABLE JJES;Lo;0;L;;;;;N;;;;; CA7C;HANGUL SYLLABLE JJESS;Lo;0;L;;;;;N;;;;; CA7D;HANGUL SYLLABLE JJENG;Lo;0;L;;;;;N;;;;; CA7E;HANGUL SYLLABLE JJEJ;Lo;0;L;;;;;N;;;;; CA7F;HANGUL SYLLABLE JJEC;Lo;0;L;;;;;N;;;;; CA80;HANGUL SYLLABLE JJEK;Lo;0;L;;;;;N;;;;; CA81;HANGUL SYLLABLE JJET;Lo;0;L;;;;;N;;;;; CA82;HANGUL SYLLABLE JJEP;Lo;0;L;;;;;N;;;;; CA83;HANGUL SYLLABLE JJEH;Lo;0;L;;;;;N;;;;; CA84;HANGUL SYLLABLE JJYEO;Lo;0;L;;;;;N;;;;; CA85;HANGUL SYLLABLE JJYEOG;Lo;0;L;;;;;N;;;;; CA86;HANGUL SYLLABLE JJYEOGG;Lo;0;L;;;;;N;;;;; CA87;HANGUL SYLLABLE JJYEOGS;Lo;0;L;;;;;N;;;;; CA88;HANGUL SYLLABLE JJYEON;Lo;0;L;;;;;N;;;;; CA89;HANGUL SYLLABLE JJYEONI;Lo;0;L;;;;;N;;;;; CA8A;HANGUL SYLLABLE JJYEONH;Lo;0;L;;;;;N;;;;; CA8B;HANGUL SYLLABLE JJYEOD;Lo;0;L;;;;;N;;;;; CA8C;HANGUL SYLLABLE JJYEOL;Lo;0;L;;;;;N;;;;; CA8D;HANGUL SYLLABLE JJYEOLG;Lo;0;L;;;;;N;;;;; CA8E;HANGUL SYLLABLE JJYEOLM;Lo;0;L;;;;;N;;;;; CA8F;HANGUL SYLLABLE JJYEOLB;Lo;0;L;;;;;N;;;;; CA90;HANGUL SYLLABLE JJYEOLS;Lo;0;L;;;;;N;;;;; CA91;HANGUL SYLLABLE JJYEOLT;Lo;0;L;;;;;N;;;;; CA92;HANGUL SYLLABLE JJYEOLP;Lo;0;L;;;;;N;;;;; CA93;HANGUL SYLLABLE JJYEOLH;Lo;0;L;;;;;N;;;;; CA94;HANGUL SYLLABLE JJYEOM;Lo;0;L;;;;;N;;;;; CA95;HANGUL SYLLABLE JJYEOB;Lo;0;L;;;;;N;;;;; CA96;HANGUL SYLLABLE JJYEOBS;Lo;0;L;;;;;N;;;;; CA97;HANGUL SYLLABLE JJYEOS;Lo;0;L;;;;;N;;;;; CA98;HANGUL SYLLABLE JJYEOSS;Lo;0;L;;;;;N;;;;; CA99;HANGUL SYLLABLE JJYEONG;Lo;0;L;;;;;N;;;;; CA9A;HANGUL SYLLABLE JJYEOJ;Lo;0;L;;;;;N;;;;; CA9B;HANGUL SYLLABLE JJYEOC;Lo;0;L;;;;;N;;;;; CA9C;HANGUL SYLLABLE JJYEOK;Lo;0;L;;;;;N;;;;; CA9D;HANGUL SYLLABLE JJYEOT;Lo;0;L;;;;;N;;;;; CA9E;HANGUL SYLLABLE JJYEOP;Lo;0;L;;;;;N;;;;; CA9F;HANGUL SYLLABLE JJYEOH;Lo;0;L;;;;;N;;;;; CAA0;HANGUL SYLLABLE JJYE;Lo;0;L;;;;;N;;;;; CAA1;HANGUL SYLLABLE JJYEG;Lo;0;L;;;;;N;;;;; CAA2;HANGUL SYLLABLE JJYEGG;Lo;0;L;;;;;N;;;;; CAA3;HANGUL SYLLABLE JJYEGS;Lo;0;L;;;;;N;;;;; CAA4;HANGUL SYLLABLE JJYEN;Lo;0;L;;;;;N;;;;; CAA5;HANGUL SYLLABLE JJYENI;Lo;0;L;;;;;N;;;;; CAA6;HANGUL SYLLABLE JJYENH;Lo;0;L;;;;;N;;;;; CAA7;HANGUL SYLLABLE JJYED;Lo;0;L;;;;;N;;;;; CAA8;HANGUL SYLLABLE JJYEL;Lo;0;L;;;;;N;;;;; CAA9;HANGUL SYLLABLE JJYELG;Lo;0;L;;;;;N;;;;; CAAA;HANGUL SYLLABLE JJYELM;Lo;0;L;;;;;N;;;;; CAAB;HANGUL SYLLABLE JJYELB;Lo;0;L;;;;;N;;;;; CAAC;HANGUL SYLLABLE JJYELS;Lo;0;L;;;;;N;;;;; CAAD;HANGUL SYLLABLE JJYELT;Lo;0;L;;;;;N;;;;; CAAE;HANGUL SYLLABLE JJYELP;Lo;0;L;;;;;N;;;;; CAAF;HANGUL SYLLABLE JJYELH;Lo;0;L;;;;;N;;;;; CAB0;HANGUL SYLLABLE JJYEM;Lo;0;L;;;;;N;;;;; CAB1;HANGUL SYLLABLE JJYEB;Lo;0;L;;;;;N;;;;; CAB2;HANGUL SYLLABLE JJYEBS;Lo;0;L;;;;;N;;;;; CAB3;HANGUL SYLLABLE JJYES;Lo;0;L;;;;;N;;;;; CAB4;HANGUL SYLLABLE JJYESS;Lo;0;L;;;;;N;;;;; CAB5;HANGUL SYLLABLE JJYENG;Lo;0;L;;;;;N;;;;; CAB6;HANGUL SYLLABLE JJYEJ;Lo;0;L;;;;;N;;;;; CAB7;HANGUL SYLLABLE JJYEC;Lo;0;L;;;;;N;;;;; CAB8;HANGUL SYLLABLE JJYEK;Lo;0;L;;;;;N;;;;; CAB9;HANGUL SYLLABLE JJYET;Lo;0;L;;;;;N;;;;; CABA;HANGUL SYLLABLE JJYEP;Lo;0;L;;;;;N;;;;; CABB;HANGUL SYLLABLE JJYEH;Lo;0;L;;;;;N;;;;; CABC;HANGUL SYLLABLE JJO;Lo;0;L;;;;;N;;;;; CABD;HANGUL SYLLABLE JJOG;Lo;0;L;;;;;N;;;;; CABE;HANGUL SYLLABLE JJOGG;Lo;0;L;;;;;N;;;;; CABF;HANGUL SYLLABLE JJOGS;Lo;0;L;;;;;N;;;;; CAC0;HANGUL SYLLABLE JJON;Lo;0;L;;;;;N;;;;; CAC1;HANGUL SYLLABLE JJONI;Lo;0;L;;;;;N;;;;; CAC2;HANGUL SYLLABLE JJONH;Lo;0;L;;;;;N;;;;; CAC3;HANGUL SYLLABLE JJOD;Lo;0;L;;;;;N;;;;; CAC4;HANGUL SYLLABLE JJOL;Lo;0;L;;;;;N;;;;; CAC5;HANGUL SYLLABLE JJOLG;Lo;0;L;;;;;N;;;;; CAC6;HANGUL SYLLABLE JJOLM;Lo;0;L;;;;;N;;;;; CAC7;HANGUL SYLLABLE JJOLB;Lo;0;L;;;;;N;;;;; CAC8;HANGUL SYLLABLE JJOLS;Lo;0;L;;;;;N;;;;; CAC9;HANGUL SYLLABLE JJOLT;Lo;0;L;;;;;N;;;;; CACA;HANGUL SYLLABLE JJOLP;Lo;0;L;;;;;N;;;;; CACB;HANGUL SYLLABLE JJOLH;Lo;0;L;;;;;N;;;;; CACC;HANGUL SYLLABLE JJOM;Lo;0;L;;;;;N;;;;; CACD;HANGUL SYLLABLE JJOB;Lo;0;L;;;;;N;;;;; CACE;HANGUL SYLLABLE JJOBS;Lo;0;L;;;;;N;;;;; CACF;HANGUL SYLLABLE JJOS;Lo;0;L;;;;;N;;;;; CAD0;HANGUL SYLLABLE JJOSS;Lo;0;L;;;;;N;;;;; CAD1;HANGUL SYLLABLE JJONG;Lo;0;L;;;;;N;;;;; CAD2;HANGUL SYLLABLE JJOJ;Lo;0;L;;;;;N;;;;; CAD3;HANGUL SYLLABLE JJOC;Lo;0;L;;;;;N;;;;; CAD4;HANGUL SYLLABLE JJOK;Lo;0;L;;;;;N;;;;; CAD5;HANGUL SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; CAD6;HANGUL SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; CAD7;HANGUL SYLLABLE JJOH;Lo;0;L;;;;;N;;;;; CAD8;HANGUL SYLLABLE JJWA;Lo;0;L;;;;;N;;;;; CAD9;HANGUL SYLLABLE JJWAG;Lo;0;L;;;;;N;;;;; CADA;HANGUL SYLLABLE JJWAGG;Lo;0;L;;;;;N;;;;; CADB;HANGUL SYLLABLE JJWAGS;Lo;0;L;;;;;N;;;;; CADC;HANGUL SYLLABLE JJWAN;Lo;0;L;;;;;N;;;;; CADD;HANGUL SYLLABLE JJWANI;Lo;0;L;;;;;N;;;;; CADE;HANGUL SYLLABLE JJWANH;Lo;0;L;;;;;N;;;;; CADF;HANGUL SYLLABLE JJWAD;Lo;0;L;;;;;N;;;;; CAE0;HANGUL SYLLABLE JJWAL;Lo;0;L;;;;;N;;;;; CAE1;HANGUL SYLLABLE JJWALG;Lo;0;L;;;;;N;;;;; CAE2;HANGUL SYLLABLE JJWALM;Lo;0;L;;;;;N;;;;; CAE3;HANGUL SYLLABLE JJWALB;Lo;0;L;;;;;N;;;;; CAE4;HANGUL SYLLABLE JJWALS;Lo;0;L;;;;;N;;;;; CAE5;HANGUL SYLLABLE JJWALT;Lo;0;L;;;;;N;;;;; CAE6;HANGUL SYLLABLE JJWALP;Lo;0;L;;;;;N;;;;; CAE7;HANGUL SYLLABLE JJWALH;Lo;0;L;;;;;N;;;;; CAE8;HANGUL SYLLABLE JJWAM;Lo;0;L;;;;;N;;;;; CAE9;HANGUL SYLLABLE JJWAB;Lo;0;L;;;;;N;;;;; CAEA;HANGUL SYLLABLE JJWABS;Lo;0;L;;;;;N;;;;; CAEB;HANGUL SYLLABLE JJWAS;Lo;0;L;;;;;N;;;;; CAEC;HANGUL SYLLABLE JJWASS;Lo;0;L;;;;;N;;;;; CAED;HANGUL SYLLABLE JJWANG;Lo;0;L;;;;;N;;;;; CAEE;HANGUL SYLLABLE JJWAJ;Lo;0;L;;;;;N;;;;; CAEF;HANGUL SYLLABLE JJWAC;Lo;0;L;;;;;N;;;;; CAF0;HANGUL SYLLABLE JJWAK;Lo;0;L;;;;;N;;;;; CAF1;HANGUL SYLLABLE JJWAT;Lo;0;L;;;;;N;;;;; CAF2;HANGUL SYLLABLE JJWAP;Lo;0;L;;;;;N;;;;; CAF3;HANGUL SYLLABLE JJWAH;Lo;0;L;;;;;N;;;;; CAF4;HANGUL SYLLABLE JJWAE;Lo;0;L;;;;;N;;;;; CAF5;HANGUL SYLLABLE JJWAEG;Lo;0;L;;;;;N;;;;; CAF6;HANGUL SYLLABLE JJWAEGG;Lo;0;L;;;;;N;;;;; CAF7;HANGUL SYLLABLE JJWAEGS;Lo;0;L;;;;;N;;;;; CAF8;HANGUL SYLLABLE JJWAEN;Lo;0;L;;;;;N;;;;; CAF9;HANGUL SYLLABLE JJWAENI;Lo;0;L;;;;;N;;;;; CAFA;HANGUL SYLLABLE JJWAENH;Lo;0;L;;;;;N;;;;; CAFB;HANGUL SYLLABLE JJWAED;Lo;0;L;;;;;N;;;;; CAFC;HANGUL SYLLABLE JJWAEL;Lo;0;L;;;;;N;;;;; CAFD;HANGUL SYLLABLE JJWAELG;Lo;0;L;;;;;N;;;;; CAFE;HANGUL SYLLABLE JJWAELM;Lo;0;L;;;;;N;;;;; CAFF;HANGUL SYLLABLE JJWAELB;Lo;0;L;;;;;N;;;;; CB00;HANGUL SYLLABLE JJWAELS;Lo;0;L;;;;;N;;;;; CB01;HANGUL SYLLABLE JJWAELT;Lo;0;L;;;;;N;;;;; CB02;HANGUL SYLLABLE JJWAELP;Lo;0;L;;;;;N;;;;; CB03;HANGUL SYLLABLE JJWAELH;Lo;0;L;;;;;N;;;;; CB04;HANGUL SYLLABLE JJWAEM;Lo;0;L;;;;;N;;;;; CB05;HANGUL SYLLABLE JJWAEB;Lo;0;L;;;;;N;;;;; CB06;HANGUL SYLLABLE JJWAEBS;Lo;0;L;;;;;N;;;;; CB07;HANGUL SYLLABLE JJWAES;Lo;0;L;;;;;N;;;;; CB08;HANGUL SYLLABLE JJWAESS;Lo;0;L;;;;;N;;;;; CB09;HANGUL SYLLABLE JJWAENG;Lo;0;L;;;;;N;;;;; CB0A;HANGUL SYLLABLE JJWAEJ;Lo;0;L;;;;;N;;;;; CB0B;HANGUL SYLLABLE JJWAEC;Lo;0;L;;;;;N;;;;; CB0C;HANGUL SYLLABLE JJWAEK;Lo;0;L;;;;;N;;;;; CB0D;HANGUL SYLLABLE JJWAET;Lo;0;L;;;;;N;;;;; CB0E;HANGUL SYLLABLE JJWAEP;Lo;0;L;;;;;N;;;;; CB0F;HANGUL SYLLABLE JJWAEH;Lo;0;L;;;;;N;;;;; CB10;HANGUL SYLLABLE JJOE;Lo;0;L;;;;;N;;;;; CB11;HANGUL SYLLABLE JJOEG;Lo;0;L;;;;;N;;;;; CB12;HANGUL SYLLABLE JJOEGG;Lo;0;L;;;;;N;;;;; CB13;HANGUL SYLLABLE JJOEGS;Lo;0;L;;;;;N;;;;; CB14;HANGUL SYLLABLE JJOEN;Lo;0;L;;;;;N;;;;; CB15;HANGUL SYLLABLE JJOENI;Lo;0;L;;;;;N;;;;; CB16;HANGUL SYLLABLE JJOENH;Lo;0;L;;;;;N;;;;; CB17;HANGUL SYLLABLE JJOED;Lo;0;L;;;;;N;;;;; CB18;HANGUL SYLLABLE JJOEL;Lo;0;L;;;;;N;;;;; CB19;HANGUL SYLLABLE JJOELG;Lo;0;L;;;;;N;;;;; CB1A;HANGUL SYLLABLE JJOELM;Lo;0;L;;;;;N;;;;; CB1B;HANGUL SYLLABLE JJOELB;Lo;0;L;;;;;N;;;;; CB1C;HANGUL SYLLABLE JJOELS;Lo;0;L;;;;;N;;;;; CB1D;HANGUL SYLLABLE JJOELT;Lo;0;L;;;;;N;;;;; CB1E;HANGUL SYLLABLE JJOELP;Lo;0;L;;;;;N;;;;; CB1F;HANGUL SYLLABLE JJOELH;Lo;0;L;;;;;N;;;;; CB20;HANGUL SYLLABLE JJOEM;Lo;0;L;;;;;N;;;;; CB21;HANGUL SYLLABLE JJOEB;Lo;0;L;;;;;N;;;;; CB22;HANGUL SYLLABLE JJOEBS;Lo;0;L;;;;;N;;;;; CB23;HANGUL SYLLABLE JJOES;Lo;0;L;;;;;N;;;;; CB24;HANGUL SYLLABLE JJOESS;Lo;0;L;;;;;N;;;;; CB25;HANGUL SYLLABLE JJOENG;Lo;0;L;;;;;N;;;;; CB26;HANGUL SYLLABLE JJOEJ;Lo;0;L;;;;;N;;;;; CB27;HANGUL SYLLABLE JJOEC;Lo;0;L;;;;;N;;;;; CB28;HANGUL SYLLABLE JJOEK;Lo;0;L;;;;;N;;;;; CB29;HANGUL SYLLABLE JJOET;Lo;0;L;;;;;N;;;;; CB2A;HANGUL SYLLABLE JJOEP;Lo;0;L;;;;;N;;;;; CB2B;HANGUL SYLLABLE JJOEH;Lo;0;L;;;;;N;;;;; CB2C;HANGUL SYLLABLE JJYO;Lo;0;L;;;;;N;;;;; CB2D;HANGUL SYLLABLE JJYOG;Lo;0;L;;;;;N;;;;; CB2E;HANGUL SYLLABLE JJYOGG;Lo;0;L;;;;;N;;;;; CB2F;HANGUL SYLLABLE JJYOGS;Lo;0;L;;;;;N;;;;; CB30;HANGUL SYLLABLE JJYON;Lo;0;L;;;;;N;;;;; CB31;HANGUL SYLLABLE JJYONI;Lo;0;L;;;;;N;;;;; CB32;HANGUL SYLLABLE JJYONH;Lo;0;L;;;;;N;;;;; CB33;HANGUL SYLLABLE JJYOD;Lo;0;L;;;;;N;;;;; CB34;HANGUL SYLLABLE JJYOL;Lo;0;L;;;;;N;;;;; CB35;HANGUL SYLLABLE JJYOLG;Lo;0;L;;;;;N;;;;; CB36;HANGUL SYLLABLE JJYOLM;Lo;0;L;;;;;N;;;;; CB37;HANGUL SYLLABLE JJYOLB;Lo;0;L;;;;;N;;;;; CB38;HANGUL SYLLABLE JJYOLS;Lo;0;L;;;;;N;;;;; CB39;HANGUL SYLLABLE JJYOLT;Lo;0;L;;;;;N;;;;; CB3A;HANGUL SYLLABLE JJYOLP;Lo;0;L;;;;;N;;;;; CB3B;HANGUL SYLLABLE JJYOLH;Lo;0;L;;;;;N;;;;; CB3C;HANGUL SYLLABLE JJYOM;Lo;0;L;;;;;N;;;;; CB3D;HANGUL SYLLABLE JJYOB;Lo;0;L;;;;;N;;;;; CB3E;HANGUL SYLLABLE JJYOBS;Lo;0;L;;;;;N;;;;; CB3F;HANGUL SYLLABLE JJYOS;Lo;0;L;;;;;N;;;;; CB40;HANGUL SYLLABLE JJYOSS;Lo;0;L;;;;;N;;;;; CB41;HANGUL SYLLABLE JJYONG;Lo;0;L;;;;;N;;;;; CB42;HANGUL SYLLABLE JJYOJ;Lo;0;L;;;;;N;;;;; CB43;HANGUL SYLLABLE JJYOC;Lo;0;L;;;;;N;;;;; CB44;HANGUL SYLLABLE JJYOK;Lo;0;L;;;;;N;;;;; CB45;HANGUL SYLLABLE JJYOT;Lo;0;L;;;;;N;;;;; CB46;HANGUL SYLLABLE JJYOP;Lo;0;L;;;;;N;;;;; CB47;HANGUL SYLLABLE JJYOH;Lo;0;L;;;;;N;;;;; CB48;HANGUL SYLLABLE JJU;Lo;0;L;;;;;N;;;;; CB49;HANGUL SYLLABLE JJUG;Lo;0;L;;;;;N;;;;; CB4A;HANGUL SYLLABLE JJUGG;Lo;0;L;;;;;N;;;;; CB4B;HANGUL SYLLABLE JJUGS;Lo;0;L;;;;;N;;;;; CB4C;HANGUL SYLLABLE JJUN;Lo;0;L;;;;;N;;;;; CB4D;HANGUL SYLLABLE JJUNI;Lo;0;L;;;;;N;;;;; CB4E;HANGUL SYLLABLE JJUNH;Lo;0;L;;;;;N;;;;; CB4F;HANGUL SYLLABLE JJUD;Lo;0;L;;;;;N;;;;; CB50;HANGUL SYLLABLE JJUL;Lo;0;L;;;;;N;;;;; CB51;HANGUL SYLLABLE JJULG;Lo;0;L;;;;;N;;;;; CB52;HANGUL SYLLABLE JJULM;Lo;0;L;;;;;N;;;;; CB53;HANGUL SYLLABLE JJULB;Lo;0;L;;;;;N;;;;; CB54;HANGUL SYLLABLE JJULS;Lo;0;L;;;;;N;;;;; CB55;HANGUL SYLLABLE JJULT;Lo;0;L;;;;;N;;;;; CB56;HANGUL SYLLABLE JJULP;Lo;0;L;;;;;N;;;;; CB57;HANGUL SYLLABLE JJULH;Lo;0;L;;;;;N;;;;; CB58;HANGUL SYLLABLE JJUM;Lo;0;L;;;;;N;;;;; CB59;HANGUL SYLLABLE JJUB;Lo;0;L;;;;;N;;;;; CB5A;HANGUL SYLLABLE JJUBS;Lo;0;L;;;;;N;;;;; CB5B;HANGUL SYLLABLE JJUS;Lo;0;L;;;;;N;;;;; CB5C;HANGUL SYLLABLE JJUSS;Lo;0;L;;;;;N;;;;; CB5D;HANGUL SYLLABLE JJUNG;Lo;0;L;;;;;N;;;;; CB5E;HANGUL SYLLABLE JJUJ;Lo;0;L;;;;;N;;;;; CB5F;HANGUL SYLLABLE JJUC;Lo;0;L;;;;;N;;;;; CB60;HANGUL SYLLABLE JJUK;Lo;0;L;;;;;N;;;;; CB61;HANGUL SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; CB62;HANGUL SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; CB63;HANGUL SYLLABLE JJUH;Lo;0;L;;;;;N;;;;; CB64;HANGUL SYLLABLE JJWEO;Lo;0;L;;;;;N;;;;; CB65;HANGUL SYLLABLE JJWEOG;Lo;0;L;;;;;N;;;;; CB66;HANGUL SYLLABLE JJWEOGG;Lo;0;L;;;;;N;;;;; CB67;HANGUL SYLLABLE JJWEOGS;Lo;0;L;;;;;N;;;;; CB68;HANGUL SYLLABLE JJWEON;Lo;0;L;;;;;N;;;;; CB69;HANGUL SYLLABLE JJWEONI;Lo;0;L;;;;;N;;;;; CB6A;HANGUL SYLLABLE JJWEONH;Lo;0;L;;;;;N;;;;; CB6B;HANGUL SYLLABLE JJWEOD;Lo;0;L;;;;;N;;;;; CB6C;HANGUL SYLLABLE JJWEOL;Lo;0;L;;;;;N;;;;; CB6D;HANGUL SYLLABLE JJWEOLG;Lo;0;L;;;;;N;;;;; CB6E;HANGUL SYLLABLE JJWEOLM;Lo;0;L;;;;;N;;;;; CB6F;HANGUL SYLLABLE JJWEOLB;Lo;0;L;;;;;N;;;;; CB70;HANGUL SYLLABLE JJWEOLS;Lo;0;L;;;;;N;;;;; CB71;HANGUL SYLLABLE JJWEOLT;Lo;0;L;;;;;N;;;;; CB72;HANGUL SYLLABLE JJWEOLP;Lo;0;L;;;;;N;;;;; CB73;HANGUL SYLLABLE JJWEOLH;Lo;0;L;;;;;N;;;;; CB74;HANGUL SYLLABLE JJWEOM;Lo;0;L;;;;;N;;;;; CB75;HANGUL SYLLABLE JJWEOB;Lo;0;L;;;;;N;;;;; CB76;HANGUL SYLLABLE JJWEOBS;Lo;0;L;;;;;N;;;;; CB77;HANGUL SYLLABLE JJWEOS;Lo;0;L;;;;;N;;;;; CB78;HANGUL SYLLABLE JJWEOSS;Lo;0;L;;;;;N;;;;; CB79;HANGUL SYLLABLE JJWEONG;Lo;0;L;;;;;N;;;;; CB7A;HANGUL SYLLABLE JJWEOJ;Lo;0;L;;;;;N;;;;; CB7B;HANGUL SYLLABLE JJWEOC;Lo;0;L;;;;;N;;;;; CB7C;HANGUL SYLLABLE JJWEOK;Lo;0;L;;;;;N;;;;; CB7D;HANGUL SYLLABLE JJWEOT;Lo;0;L;;;;;N;;;;; CB7E;HANGUL SYLLABLE JJWEOP;Lo;0;L;;;;;N;;;;; CB7F;HANGUL SYLLABLE JJWEOH;Lo;0;L;;;;;N;;;;; CB80;HANGUL SYLLABLE JJWE;Lo;0;L;;;;;N;;;;; CB81;HANGUL SYLLABLE JJWEG;Lo;0;L;;;;;N;;;;; CB82;HANGUL SYLLABLE JJWEGG;Lo;0;L;;;;;N;;;;; CB83;HANGUL SYLLABLE JJWEGS;Lo;0;L;;;;;N;;;;; CB84;HANGUL SYLLABLE JJWEN;Lo;0;L;;;;;N;;;;; CB85;HANGUL SYLLABLE JJWENI;Lo;0;L;;;;;N;;;;; CB86;HANGUL SYLLABLE JJWENH;Lo;0;L;;;;;N;;;;; CB87;HANGUL SYLLABLE JJWED;Lo;0;L;;;;;N;;;;; CB88;HANGUL SYLLABLE JJWEL;Lo;0;L;;;;;N;;;;; CB89;HANGUL SYLLABLE JJWELG;Lo;0;L;;;;;N;;;;; CB8A;HANGUL SYLLABLE JJWELM;Lo;0;L;;;;;N;;;;; CB8B;HANGUL SYLLABLE JJWELB;Lo;0;L;;;;;N;;;;; CB8C;HANGUL SYLLABLE JJWELS;Lo;0;L;;;;;N;;;;; CB8D;HANGUL SYLLABLE JJWELT;Lo;0;L;;;;;N;;;;; CB8E;HANGUL SYLLABLE JJWELP;Lo;0;L;;;;;N;;;;; CB8F;HANGUL SYLLABLE JJWELH;Lo;0;L;;;;;N;;;;; CB90;HANGUL SYLLABLE JJWEM;Lo;0;L;;;;;N;;;;; CB91;HANGUL SYLLABLE JJWEB;Lo;0;L;;;;;N;;;;; CB92;HANGUL SYLLABLE JJWEBS;Lo;0;L;;;;;N;;;;; CB93;HANGUL SYLLABLE JJWES;Lo;0;L;;;;;N;;;;; CB94;HANGUL SYLLABLE JJWESS;Lo;0;L;;;;;N;;;;; CB95;HANGUL SYLLABLE JJWENG;Lo;0;L;;;;;N;;;;; CB96;HANGUL SYLLABLE JJWEJ;Lo;0;L;;;;;N;;;;; CB97;HANGUL SYLLABLE JJWEC;Lo;0;L;;;;;N;;;;; CB98;HANGUL SYLLABLE JJWEK;Lo;0;L;;;;;N;;;;; CB99;HANGUL SYLLABLE JJWET;Lo;0;L;;;;;N;;;;; CB9A;HANGUL SYLLABLE JJWEP;Lo;0;L;;;;;N;;;;; CB9B;HANGUL SYLLABLE JJWEH;Lo;0;L;;;;;N;;;;; CB9C;HANGUL SYLLABLE JJWI;Lo;0;L;;;;;N;;;;; CB9D;HANGUL SYLLABLE JJWIG;Lo;0;L;;;;;N;;;;; CB9E;HANGUL SYLLABLE JJWIGG;Lo;0;L;;;;;N;;;;; CB9F;HANGUL SYLLABLE JJWIGS;Lo;0;L;;;;;N;;;;; CBA0;HANGUL SYLLABLE JJWIN;Lo;0;L;;;;;N;;;;; CBA1;HANGUL SYLLABLE JJWINI;Lo;0;L;;;;;N;;;;; CBA2;HANGUL SYLLABLE JJWINH;Lo;0;L;;;;;N;;;;; CBA3;HANGUL SYLLABLE JJWID;Lo;0;L;;;;;N;;;;; CBA4;HANGUL SYLLABLE JJWIL;Lo;0;L;;;;;N;;;;; CBA5;HANGUL SYLLABLE JJWILG;Lo;0;L;;;;;N;;;;; CBA6;HANGUL SYLLABLE JJWILM;Lo;0;L;;;;;N;;;;; CBA7;HANGUL SYLLABLE JJWILB;Lo;0;L;;;;;N;;;;; CBA8;HANGUL SYLLABLE JJWILS;Lo;0;L;;;;;N;;;;; CBA9;HANGUL SYLLABLE JJWILT;Lo;0;L;;;;;N;;;;; CBAA;HANGUL SYLLABLE JJWILP;Lo;0;L;;;;;N;;;;; CBAB;HANGUL SYLLABLE JJWILH;Lo;0;L;;;;;N;;;;; CBAC;HANGUL SYLLABLE JJWIM;Lo;0;L;;;;;N;;;;; CBAD;HANGUL SYLLABLE JJWIB;Lo;0;L;;;;;N;;;;; CBAE;HANGUL SYLLABLE JJWIBS;Lo;0;L;;;;;N;;;;; CBAF;HANGUL SYLLABLE JJWIS;Lo;0;L;;;;;N;;;;; CBB0;HANGUL SYLLABLE JJWISS;Lo;0;L;;;;;N;;;;; CBB1;HANGUL SYLLABLE JJWING;Lo;0;L;;;;;N;;;;; CBB2;HANGUL SYLLABLE JJWIJ;Lo;0;L;;;;;N;;;;; CBB3;HANGUL SYLLABLE JJWIC;Lo;0;L;;;;;N;;;;; CBB4;HANGUL SYLLABLE JJWIK;Lo;0;L;;;;;N;;;;; CBB5;HANGUL SYLLABLE JJWIT;Lo;0;L;;;;;N;;;;; CBB6;HANGUL SYLLABLE JJWIP;Lo;0;L;;;;;N;;;;; CBB7;HANGUL SYLLABLE JJWIH;Lo;0;L;;;;;N;;;;; CBB8;HANGUL SYLLABLE JJYU;Lo;0;L;;;;;N;;;;; CBB9;HANGUL SYLLABLE JJYUG;Lo;0;L;;;;;N;;;;; CBBA;HANGUL SYLLABLE JJYUGG;Lo;0;L;;;;;N;;;;; CBBB;HANGUL SYLLABLE JJYUGS;Lo;0;L;;;;;N;;;;; CBBC;HANGUL SYLLABLE JJYUN;Lo;0;L;;;;;N;;;;; CBBD;HANGUL SYLLABLE JJYUNI;Lo;0;L;;;;;N;;;;; CBBE;HANGUL SYLLABLE JJYUNH;Lo;0;L;;;;;N;;;;; CBBF;HANGUL SYLLABLE JJYUD;Lo;0;L;;;;;N;;;;; CBC0;HANGUL SYLLABLE JJYUL;Lo;0;L;;;;;N;;;;; CBC1;HANGUL SYLLABLE JJYULG;Lo;0;L;;;;;N;;;;; CBC2;HANGUL SYLLABLE JJYULM;Lo;0;L;;;;;N;;;;; CBC3;HANGUL SYLLABLE JJYULB;Lo;0;L;;;;;N;;;;; CBC4;HANGUL SYLLABLE JJYULS;Lo;0;L;;;;;N;;;;; CBC5;HANGUL SYLLABLE JJYULT;Lo;0;L;;;;;N;;;;; CBC6;HANGUL SYLLABLE JJYULP;Lo;0;L;;;;;N;;;;; CBC7;HANGUL SYLLABLE JJYULH;Lo;0;L;;;;;N;;;;; CBC8;HANGUL SYLLABLE JJYUM;Lo;0;L;;;;;N;;;;; CBC9;HANGUL SYLLABLE JJYUB;Lo;0;L;;;;;N;;;;; CBCA;HANGUL SYLLABLE JJYUBS;Lo;0;L;;;;;N;;;;; CBCB;HANGUL SYLLABLE JJYUS;Lo;0;L;;;;;N;;;;; CBCC;HANGUL SYLLABLE JJYUSS;Lo;0;L;;;;;N;;;;; CBCD;HANGUL SYLLABLE JJYUNG;Lo;0;L;;;;;N;;;;; CBCE;HANGUL SYLLABLE JJYUJ;Lo;0;L;;;;;N;;;;; CBCF;HANGUL SYLLABLE JJYUC;Lo;0;L;;;;;N;;;;; CBD0;HANGUL SYLLABLE JJYUK;Lo;0;L;;;;;N;;;;; CBD1;HANGUL SYLLABLE JJYUT;Lo;0;L;;;;;N;;;;; CBD2;HANGUL SYLLABLE JJYUP;Lo;0;L;;;;;N;;;;; CBD3;HANGUL SYLLABLE JJYUH;Lo;0;L;;;;;N;;;;; CBD4;HANGUL SYLLABLE JJEU;Lo;0;L;;;;;N;;;;; CBD5;HANGUL SYLLABLE JJEUG;Lo;0;L;;;;;N;;;;; CBD6;HANGUL SYLLABLE JJEUGG;Lo;0;L;;;;;N;;;;; CBD7;HANGUL SYLLABLE JJEUGS;Lo;0;L;;;;;N;;;;; CBD8;HANGUL SYLLABLE JJEUN;Lo;0;L;;;;;N;;;;; CBD9;HANGUL SYLLABLE JJEUNI;Lo;0;L;;;;;N;;;;; CBDA;HANGUL SYLLABLE JJEUNH;Lo;0;L;;;;;N;;;;; CBDB;HANGUL SYLLABLE JJEUD;Lo;0;L;;;;;N;;;;; CBDC;HANGUL SYLLABLE JJEUL;Lo;0;L;;;;;N;;;;; CBDD;HANGUL SYLLABLE JJEULG;Lo;0;L;;;;;N;;;;; CBDE;HANGUL SYLLABLE JJEULM;Lo;0;L;;;;;N;;;;; CBDF;HANGUL SYLLABLE JJEULB;Lo;0;L;;;;;N;;;;; CBE0;HANGUL SYLLABLE JJEULS;Lo;0;L;;;;;N;;;;; CBE1;HANGUL SYLLABLE JJEULT;Lo;0;L;;;;;N;;;;; CBE2;HANGUL SYLLABLE JJEULP;Lo;0;L;;;;;N;;;;; CBE3;HANGUL SYLLABLE JJEULH;Lo;0;L;;;;;N;;;;; CBE4;HANGUL SYLLABLE JJEUM;Lo;0;L;;;;;N;;;;; CBE5;HANGUL SYLLABLE JJEUB;Lo;0;L;;;;;N;;;;; CBE6;HANGUL SYLLABLE JJEUBS;Lo;0;L;;;;;N;;;;; CBE7;HANGUL SYLLABLE JJEUS;Lo;0;L;;;;;N;;;;; CBE8;HANGUL SYLLABLE JJEUSS;Lo;0;L;;;;;N;;;;; CBE9;HANGUL SYLLABLE JJEUNG;Lo;0;L;;;;;N;;;;; CBEA;HANGUL SYLLABLE JJEUJ;Lo;0;L;;;;;N;;;;; CBEB;HANGUL SYLLABLE JJEUC;Lo;0;L;;;;;N;;;;; CBEC;HANGUL SYLLABLE JJEUK;Lo;0;L;;;;;N;;;;; CBED;HANGUL SYLLABLE JJEUT;Lo;0;L;;;;;N;;;;; CBEE;HANGUL SYLLABLE JJEUP;Lo;0;L;;;;;N;;;;; CBEF;HANGUL SYLLABLE JJEUH;Lo;0;L;;;;;N;;;;; CBF0;HANGUL SYLLABLE JJYI;Lo;0;L;;;;;N;;;;; CBF1;HANGUL SYLLABLE JJYIG;Lo;0;L;;;;;N;;;;; CBF2;HANGUL SYLLABLE JJYIGG;Lo;0;L;;;;;N;;;;; CBF3;HANGUL SYLLABLE JJYIGS;Lo;0;L;;;;;N;;;;; CBF4;HANGUL SYLLABLE JJYIN;Lo;0;L;;;;;N;;;;; CBF5;HANGUL SYLLABLE JJYINI;Lo;0;L;;;;;N;;;;; CBF6;HANGUL SYLLABLE JJYINH;Lo;0;L;;;;;N;;;;; CBF7;HANGUL SYLLABLE JJYID;Lo;0;L;;;;;N;;;;; CBF8;HANGUL SYLLABLE JJYIL;Lo;0;L;;;;;N;;;;; CBF9;HANGUL SYLLABLE JJYILG;Lo;0;L;;;;;N;;;;; CBFA;HANGUL SYLLABLE JJYILM;Lo;0;L;;;;;N;;;;; CBFB;HANGUL SYLLABLE JJYILB;Lo;0;L;;;;;N;;;;; CBFC;HANGUL SYLLABLE JJYILS;Lo;0;L;;;;;N;;;;; CBFD;HANGUL SYLLABLE JJYILT;Lo;0;L;;;;;N;;;;; CBFE;HANGUL SYLLABLE JJYILP;Lo;0;L;;;;;N;;;;; CBFF;HANGUL SYLLABLE JJYILH;Lo;0;L;;;;;N;;;;; CC00;HANGUL SYLLABLE JJYIM;Lo;0;L;;;;;N;;;;; CC01;HANGUL SYLLABLE JJYIB;Lo;0;L;;;;;N;;;;; CC02;HANGUL SYLLABLE JJYIBS;Lo;0;L;;;;;N;;;;; CC03;HANGUL SYLLABLE JJYIS;Lo;0;L;;;;;N;;;;; CC04;HANGUL SYLLABLE JJYISS;Lo;0;L;;;;;N;;;;; CC05;HANGUL SYLLABLE JJYING;Lo;0;L;;;;;N;;;;; CC06;HANGUL SYLLABLE JJYIJ;Lo;0;L;;;;;N;;;;; CC07;HANGUL SYLLABLE JJYIC;Lo;0;L;;;;;N;;;;; CC08;HANGUL SYLLABLE JJYIK;Lo;0;L;;;;;N;;;;; CC09;HANGUL SYLLABLE JJYIT;Lo;0;L;;;;;N;;;;; CC0A;HANGUL SYLLABLE JJYIP;Lo;0;L;;;;;N;;;;; CC0B;HANGUL SYLLABLE JJYIH;Lo;0;L;;;;;N;;;;; CC0C;HANGUL SYLLABLE JJI;Lo;0;L;;;;;N;;;;; CC0D;HANGUL SYLLABLE JJIG;Lo;0;L;;;;;N;;;;; CC0E;HANGUL SYLLABLE JJIGG;Lo;0;L;;;;;N;;;;; CC0F;HANGUL SYLLABLE JJIGS;Lo;0;L;;;;;N;;;;; CC10;HANGUL SYLLABLE JJIN;Lo;0;L;;;;;N;;;;; CC11;HANGUL SYLLABLE JJINI;Lo;0;L;;;;;N;;;;; CC12;HANGUL SYLLABLE JJINH;Lo;0;L;;;;;N;;;;; CC13;HANGUL SYLLABLE JJID;Lo;0;L;;;;;N;;;;; CC14;HANGUL SYLLABLE JJIL;Lo;0;L;;;;;N;;;;; CC15;HANGUL SYLLABLE JJILG;Lo;0;L;;;;;N;;;;; CC16;HANGUL SYLLABLE JJILM;Lo;0;L;;;;;N;;;;; CC17;HANGUL SYLLABLE JJILB;Lo;0;L;;;;;N;;;;; CC18;HANGUL SYLLABLE JJILS;Lo;0;L;;;;;N;;;;; CC19;HANGUL SYLLABLE JJILT;Lo;0;L;;;;;N;;;;; CC1A;HANGUL SYLLABLE JJILP;Lo;0;L;;;;;N;;;;; CC1B;HANGUL SYLLABLE JJILH;Lo;0;L;;;;;N;;;;; CC1C;HANGUL SYLLABLE JJIM;Lo;0;L;;;;;N;;;;; CC1D;HANGUL SYLLABLE JJIB;Lo;0;L;;;;;N;;;;; CC1E;HANGUL SYLLABLE JJIBS;Lo;0;L;;;;;N;;;;; CC1F;HANGUL SYLLABLE JJIS;Lo;0;L;;;;;N;;;;; CC20;HANGUL SYLLABLE JJISS;Lo;0;L;;;;;N;;;;; CC21;HANGUL SYLLABLE JJING;Lo;0;L;;;;;N;;;;; CC22;HANGUL SYLLABLE JJIJ;Lo;0;L;;;;;N;;;;; CC23;HANGUL SYLLABLE JJIC;Lo;0;L;;;;;N;;;;; CC24;HANGUL SYLLABLE JJIK;Lo;0;L;;;;;N;;;;; CC25;HANGUL SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; CC26;HANGUL SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; CC27;HANGUL SYLLABLE JJIH;Lo;0;L;;;;;N;;;;; CC28;HANGUL SYLLABLE CA;Lo;0;L;;;;;N;;;;; CC29;HANGUL SYLLABLE CAG;Lo;0;L;;;;;N;;;;; CC2A;HANGUL SYLLABLE CAGG;Lo;0;L;;;;;N;;;;; CC2B;HANGUL SYLLABLE CAGS;Lo;0;L;;;;;N;;;;; CC2C;HANGUL SYLLABLE CAN;Lo;0;L;;;;;N;;;;; CC2D;HANGUL SYLLABLE CANI;Lo;0;L;;;;;N;;;;; CC2E;HANGUL SYLLABLE CANH;Lo;0;L;;;;;N;;;;; CC2F;HANGUL SYLLABLE CAD;Lo;0;L;;;;;N;;;;; CC30;HANGUL SYLLABLE CAL;Lo;0;L;;;;;N;;;;; CC31;HANGUL SYLLABLE CALG;Lo;0;L;;;;;N;;;;; CC32;HANGUL SYLLABLE CALM;Lo;0;L;;;;;N;;;;; CC33;HANGUL SYLLABLE CALB;Lo;0;L;;;;;N;;;;; CC34;HANGUL SYLLABLE CALS;Lo;0;L;;;;;N;;;;; CC35;HANGUL SYLLABLE CALT;Lo;0;L;;;;;N;;;;; CC36;HANGUL SYLLABLE CALP;Lo;0;L;;;;;N;;;;; CC37;HANGUL SYLLABLE CALH;Lo;0;L;;;;;N;;;;; CC38;HANGUL SYLLABLE CAM;Lo;0;L;;;;;N;;;;; CC39;HANGUL SYLLABLE CAB;Lo;0;L;;;;;N;;;;; CC3A;HANGUL SYLLABLE CABS;Lo;0;L;;;;;N;;;;; CC3B;HANGUL SYLLABLE CAS;Lo;0;L;;;;;N;;;;; CC3C;HANGUL SYLLABLE CASS;Lo;0;L;;;;;N;;;;; CC3D;HANGUL SYLLABLE CANG;Lo;0;L;;;;;N;;;;; CC3E;HANGUL SYLLABLE CAJ;Lo;0;L;;;;;N;;;;; CC3F;HANGUL SYLLABLE CAC;Lo;0;L;;;;;N;;;;; CC40;HANGUL SYLLABLE CAK;Lo;0;L;;;;;N;;;;; CC41;HANGUL SYLLABLE CAT;Lo;0;L;;;;;N;;;;; CC42;HANGUL SYLLABLE CAP;Lo;0;L;;;;;N;;;;; CC43;HANGUL SYLLABLE CAH;Lo;0;L;;;;;N;;;;; CC44;HANGUL SYLLABLE CAE;Lo;0;L;;;;;N;;;;; CC45;HANGUL SYLLABLE CAEG;Lo;0;L;;;;;N;;;;; CC46;HANGUL SYLLABLE CAEGG;Lo;0;L;;;;;N;;;;; CC47;HANGUL SYLLABLE CAEGS;Lo;0;L;;;;;N;;;;; CC48;HANGUL SYLLABLE CAEN;Lo;0;L;;;;;N;;;;; CC49;HANGUL SYLLABLE CAENI;Lo;0;L;;;;;N;;;;; CC4A;HANGUL SYLLABLE CAENH;Lo;0;L;;;;;N;;;;; CC4B;HANGUL SYLLABLE CAED;Lo;0;L;;;;;N;;;;; CC4C;HANGUL SYLLABLE CAEL;Lo;0;L;;;;;N;;;;; CC4D;HANGUL SYLLABLE CAELG;Lo;0;L;;;;;N;;;;; CC4E;HANGUL SYLLABLE CAELM;Lo;0;L;;;;;N;;;;; CC4F;HANGUL SYLLABLE CAELB;Lo;0;L;;;;;N;;;;; CC50;HANGUL SYLLABLE CAELS;Lo;0;L;;;;;N;;;;; CC51;HANGUL SYLLABLE CAELT;Lo;0;L;;;;;N;;;;; CC52;HANGUL SYLLABLE CAELP;Lo;0;L;;;;;N;;;;; CC53;HANGUL SYLLABLE CAELH;Lo;0;L;;;;;N;;;;; CC54;HANGUL SYLLABLE CAEM;Lo;0;L;;;;;N;;;;; CC55;HANGUL SYLLABLE CAEB;Lo;0;L;;;;;N;;;;; CC56;HANGUL SYLLABLE CAEBS;Lo;0;L;;;;;N;;;;; CC57;HANGUL SYLLABLE CAES;Lo;0;L;;;;;N;;;;; CC58;HANGUL SYLLABLE CAESS;Lo;0;L;;;;;N;;;;; CC59;HANGUL SYLLABLE CAENG;Lo;0;L;;;;;N;;;;; CC5A;HANGUL SYLLABLE CAEJ;Lo;0;L;;;;;N;;;;; CC5B;HANGUL SYLLABLE CAEC;Lo;0;L;;;;;N;;;;; CC5C;HANGUL SYLLABLE CAEK;Lo;0;L;;;;;N;;;;; CC5D;HANGUL SYLLABLE CAET;Lo;0;L;;;;;N;;;;; CC5E;HANGUL SYLLABLE CAEP;Lo;0;L;;;;;N;;;;; CC5F;HANGUL SYLLABLE CAEH;Lo;0;L;;;;;N;;;;; CC60;HANGUL SYLLABLE CYA;Lo;0;L;;;;;N;;;;; CC61;HANGUL SYLLABLE CYAG;Lo;0;L;;;;;N;;;;; CC62;HANGUL SYLLABLE CYAGG;Lo;0;L;;;;;N;;;;; CC63;HANGUL SYLLABLE CYAGS;Lo;0;L;;;;;N;;;;; CC64;HANGUL SYLLABLE CYAN;Lo;0;L;;;;;N;;;;; CC65;HANGUL SYLLABLE CYANI;Lo;0;L;;;;;N;;;;; CC66;HANGUL SYLLABLE CYANH;Lo;0;L;;;;;N;;;;; CC67;HANGUL SYLLABLE CYAD;Lo;0;L;;;;;N;;;;; CC68;HANGUL SYLLABLE CYAL;Lo;0;L;;;;;N;;;;; CC69;HANGUL SYLLABLE CYALG;Lo;0;L;;;;;N;;;;; CC6A;HANGUL SYLLABLE CYALM;Lo;0;L;;;;;N;;;;; CC6B;HANGUL SYLLABLE CYALB;Lo;0;L;;;;;N;;;;; CC6C;HANGUL SYLLABLE CYALS;Lo;0;L;;;;;N;;;;; CC6D;HANGUL SYLLABLE CYALT;Lo;0;L;;;;;N;;;;; CC6E;HANGUL SYLLABLE CYALP;Lo;0;L;;;;;N;;;;; CC6F;HANGUL SYLLABLE CYALH;Lo;0;L;;;;;N;;;;; CC70;HANGUL SYLLABLE CYAM;Lo;0;L;;;;;N;;;;; CC71;HANGUL SYLLABLE CYAB;Lo;0;L;;;;;N;;;;; CC72;HANGUL SYLLABLE CYABS;Lo;0;L;;;;;N;;;;; CC73;HANGUL SYLLABLE CYAS;Lo;0;L;;;;;N;;;;; CC74;HANGUL SYLLABLE CYASS;Lo;0;L;;;;;N;;;;; CC75;HANGUL SYLLABLE CYANG;Lo;0;L;;;;;N;;;;; CC76;HANGUL SYLLABLE CYAJ;Lo;0;L;;;;;N;;;;; CC77;HANGUL SYLLABLE CYAC;Lo;0;L;;;;;N;;;;; CC78;HANGUL SYLLABLE CYAK;Lo;0;L;;;;;N;;;;; CC79;HANGUL SYLLABLE CYAT;Lo;0;L;;;;;N;;;;; CC7A;HANGUL SYLLABLE CYAP;Lo;0;L;;;;;N;;;;; CC7B;HANGUL SYLLABLE CYAH;Lo;0;L;;;;;N;;;;; CC7C;HANGUL SYLLABLE CYAE;Lo;0;L;;;;;N;;;;; CC7D;HANGUL SYLLABLE CYAEG;Lo;0;L;;;;;N;;;;; CC7E;HANGUL SYLLABLE CYAEGG;Lo;0;L;;;;;N;;;;; CC7F;HANGUL SYLLABLE CYAEGS;Lo;0;L;;;;;N;;;;; CC80;HANGUL SYLLABLE CYAEN;Lo;0;L;;;;;N;;;;; CC81;HANGUL SYLLABLE CYAENI;Lo;0;L;;;;;N;;;;; CC82;HANGUL SYLLABLE CYAENH;Lo;0;L;;;;;N;;;;; CC83;HANGUL SYLLABLE CYAED;Lo;0;L;;;;;N;;;;; CC84;HANGUL SYLLABLE CYAEL;Lo;0;L;;;;;N;;;;; CC85;HANGUL SYLLABLE CYAELG;Lo;0;L;;;;;N;;;;; CC86;HANGUL SYLLABLE CYAELM;Lo;0;L;;;;;N;;;;; CC87;HANGUL SYLLABLE CYAELB;Lo;0;L;;;;;N;;;;; CC88;HANGUL SYLLABLE CYAELS;Lo;0;L;;;;;N;;;;; CC89;HANGUL SYLLABLE CYAELT;Lo;0;L;;;;;N;;;;; CC8A;HANGUL SYLLABLE CYAELP;Lo;0;L;;;;;N;;;;; CC8B;HANGUL SYLLABLE CYAELH;Lo;0;L;;;;;N;;;;; CC8C;HANGUL SYLLABLE CYAEM;Lo;0;L;;;;;N;;;;; CC8D;HANGUL SYLLABLE CYAEB;Lo;0;L;;;;;N;;;;; CC8E;HANGUL SYLLABLE CYAEBS;Lo;0;L;;;;;N;;;;; CC8F;HANGUL SYLLABLE CYAES;Lo;0;L;;;;;N;;;;; CC90;HANGUL SYLLABLE CYAESS;Lo;0;L;;;;;N;;;;; CC91;HANGUL SYLLABLE CYAENG;Lo;0;L;;;;;N;;;;; CC92;HANGUL SYLLABLE CYAEJ;Lo;0;L;;;;;N;;;;; CC93;HANGUL SYLLABLE CYAEC;Lo;0;L;;;;;N;;;;; CC94;HANGUL SYLLABLE CYAEK;Lo;0;L;;;;;N;;;;; CC95;HANGUL SYLLABLE CYAET;Lo;0;L;;;;;N;;;;; CC96;HANGUL SYLLABLE CYAEP;Lo;0;L;;;;;N;;;;; CC97;HANGUL SYLLABLE CYAEH;Lo;0;L;;;;;N;;;;; CC98;HANGUL SYLLABLE CEO;Lo;0;L;;;;;N;;;;; CC99;HANGUL SYLLABLE CEOG;Lo;0;L;;;;;N;;;;; CC9A;HANGUL SYLLABLE CEOGG;Lo;0;L;;;;;N;;;;; CC9B;HANGUL SYLLABLE CEOGS;Lo;0;L;;;;;N;;;;; CC9C;HANGUL SYLLABLE CEON;Lo;0;L;;;;;N;;;;; CC9D;HANGUL SYLLABLE CEONI;Lo;0;L;;;;;N;;;;; CC9E;HANGUL SYLLABLE CEONH;Lo;0;L;;;;;N;;;;; CC9F;HANGUL SYLLABLE CEOD;Lo;0;L;;;;;N;;;;; CCA0;HANGUL SYLLABLE CEOL;Lo;0;L;;;;;N;;;;; CCA1;HANGUL SYLLABLE CEOLG;Lo;0;L;;;;;N;;;;; CCA2;HANGUL SYLLABLE CEOLM;Lo;0;L;;;;;N;;;;; CCA3;HANGUL SYLLABLE CEOLB;Lo;0;L;;;;;N;;;;; CCA4;HANGUL SYLLABLE CEOLS;Lo;0;L;;;;;N;;;;; CCA5;HANGUL SYLLABLE CEOLT;Lo;0;L;;;;;N;;;;; CCA6;HANGUL SYLLABLE CEOLP;Lo;0;L;;;;;N;;;;; CCA7;HANGUL SYLLABLE CEOLH;Lo;0;L;;;;;N;;;;; CCA8;HANGUL SYLLABLE CEOM;Lo;0;L;;;;;N;;;;; CCA9;HANGUL SYLLABLE CEOB;Lo;0;L;;;;;N;;;;; CCAA;HANGUL SYLLABLE CEOBS;Lo;0;L;;;;;N;;;;; CCAB;HANGUL SYLLABLE CEOS;Lo;0;L;;;;;N;;;;; CCAC;HANGUL SYLLABLE CEOSS;Lo;0;L;;;;;N;;;;; CCAD;HANGUL SYLLABLE CEONG;Lo;0;L;;;;;N;;;;; CCAE;HANGUL SYLLABLE CEOJ;Lo;0;L;;;;;N;;;;; CCAF;HANGUL SYLLABLE CEOC;Lo;0;L;;;;;N;;;;; CCB0;HANGUL SYLLABLE CEOK;Lo;0;L;;;;;N;;;;; CCB1;HANGUL SYLLABLE CEOT;Lo;0;L;;;;;N;;;;; CCB2;HANGUL SYLLABLE CEOP;Lo;0;L;;;;;N;;;;; CCB3;HANGUL SYLLABLE CEOH;Lo;0;L;;;;;N;;;;; CCB4;HANGUL SYLLABLE CE;Lo;0;L;;;;;N;;;;; CCB5;HANGUL SYLLABLE CEG;Lo;0;L;;;;;N;;;;; CCB6;HANGUL SYLLABLE CEGG;Lo;0;L;;;;;N;;;;; CCB7;HANGUL SYLLABLE CEGS;Lo;0;L;;;;;N;;;;; CCB8;HANGUL SYLLABLE CEN;Lo;0;L;;;;;N;;;;; CCB9;HANGUL SYLLABLE CENI;Lo;0;L;;;;;N;;;;; CCBA;HANGUL SYLLABLE CENH;Lo;0;L;;;;;N;;;;; CCBB;HANGUL SYLLABLE CED;Lo;0;L;;;;;N;;;;; CCBC;HANGUL SYLLABLE CEL;Lo;0;L;;;;;N;;;;; CCBD;HANGUL SYLLABLE CELG;Lo;0;L;;;;;N;;;;; CCBE;HANGUL SYLLABLE CELM;Lo;0;L;;;;;N;;;;; CCBF;HANGUL SYLLABLE CELB;Lo;0;L;;;;;N;;;;; CCC0;HANGUL SYLLABLE CELS;Lo;0;L;;;;;N;;;;; CCC1;HANGUL SYLLABLE CELT;Lo;0;L;;;;;N;;;;; CCC2;HANGUL SYLLABLE CELP;Lo;0;L;;;;;N;;;;; CCC3;HANGUL SYLLABLE CELH;Lo;0;L;;;;;N;;;;; CCC4;HANGUL SYLLABLE CEM;Lo;0;L;;;;;N;;;;; CCC5;HANGUL SYLLABLE CEB;Lo;0;L;;;;;N;;;;; CCC6;HANGUL SYLLABLE CEBS;Lo;0;L;;;;;N;;;;; CCC7;HANGUL SYLLABLE CES;Lo;0;L;;;;;N;;;;; CCC8;HANGUL SYLLABLE CESS;Lo;0;L;;;;;N;;;;; CCC9;HANGUL SYLLABLE CENG;Lo;0;L;;;;;N;;;;; CCCA;HANGUL SYLLABLE CEJ;Lo;0;L;;;;;N;;;;; CCCB;HANGUL SYLLABLE CEC;Lo;0;L;;;;;N;;;;; CCCC;HANGUL SYLLABLE CEK;Lo;0;L;;;;;N;;;;; CCCD;HANGUL SYLLABLE CET;Lo;0;L;;;;;N;;;;; CCCE;HANGUL SYLLABLE CEP;Lo;0;L;;;;;N;;;;; CCCF;HANGUL SYLLABLE CEH;Lo;0;L;;;;;N;;;;; CCD0;HANGUL SYLLABLE CYEO;Lo;0;L;;;;;N;;;;; CCD1;HANGUL SYLLABLE CYEOG;Lo;0;L;;;;;N;;;;; CCD2;HANGUL SYLLABLE CYEOGG;Lo;0;L;;;;;N;;;;; CCD3;HANGUL SYLLABLE CYEOGS;Lo;0;L;;;;;N;;;;; CCD4;HANGUL SYLLABLE CYEON;Lo;0;L;;;;;N;;;;; CCD5;HANGUL SYLLABLE CYEONI;Lo;0;L;;;;;N;;;;; CCD6;HANGUL SYLLABLE CYEONH;Lo;0;L;;;;;N;;;;; CCD7;HANGUL SYLLABLE CYEOD;Lo;0;L;;;;;N;;;;; CCD8;HANGUL SYLLABLE CYEOL;Lo;0;L;;;;;N;;;;; CCD9;HANGUL SYLLABLE CYEOLG;Lo;0;L;;;;;N;;;;; CCDA;HANGUL SYLLABLE CYEOLM;Lo;0;L;;;;;N;;;;; CCDB;HANGUL SYLLABLE CYEOLB;Lo;0;L;;;;;N;;;;; CCDC;HANGUL SYLLABLE CYEOLS;Lo;0;L;;;;;N;;;;; CCDD;HANGUL SYLLABLE CYEOLT;Lo;0;L;;;;;N;;;;; CCDE;HANGUL SYLLABLE CYEOLP;Lo;0;L;;;;;N;;;;; CCDF;HANGUL SYLLABLE CYEOLH;Lo;0;L;;;;;N;;;;; CCE0;HANGUL SYLLABLE CYEOM;Lo;0;L;;;;;N;;;;; CCE1;HANGUL SYLLABLE CYEOB;Lo;0;L;;;;;N;;;;; CCE2;HANGUL SYLLABLE CYEOBS;Lo;0;L;;;;;N;;;;; CCE3;HANGUL SYLLABLE CYEOS;Lo;0;L;;;;;N;;;;; CCE4;HANGUL SYLLABLE CYEOSS;Lo;0;L;;;;;N;;;;; CCE5;HANGUL SYLLABLE CYEONG;Lo;0;L;;;;;N;;;;; CCE6;HANGUL SYLLABLE CYEOJ;Lo;0;L;;;;;N;;;;; CCE7;HANGUL SYLLABLE CYEOC;Lo;0;L;;;;;N;;;;; CCE8;HANGUL SYLLABLE CYEOK;Lo;0;L;;;;;N;;;;; CCE9;HANGUL SYLLABLE CYEOT;Lo;0;L;;;;;N;;;;; CCEA;HANGUL SYLLABLE CYEOP;Lo;0;L;;;;;N;;;;; CCEB;HANGUL SYLLABLE CYEOH;Lo;0;L;;;;;N;;;;; CCEC;HANGUL SYLLABLE CYE;Lo;0;L;;;;;N;;;;; CCED;HANGUL SYLLABLE CYEG;Lo;0;L;;;;;N;;;;; CCEE;HANGUL SYLLABLE CYEGG;Lo;0;L;;;;;N;;;;; CCEF;HANGUL SYLLABLE CYEGS;Lo;0;L;;;;;N;;;;; CCF0;HANGUL SYLLABLE CYEN;Lo;0;L;;;;;N;;;;; CCF1;HANGUL SYLLABLE CYENI;Lo;0;L;;;;;N;;;;; CCF2;HANGUL SYLLABLE CYENH;Lo;0;L;;;;;N;;;;; CCF3;HANGUL SYLLABLE CYED;Lo;0;L;;;;;N;;;;; CCF4;HANGUL SYLLABLE CYEL;Lo;0;L;;;;;N;;;;; CCF5;HANGUL SYLLABLE CYELG;Lo;0;L;;;;;N;;;;; CCF6;HANGUL SYLLABLE CYELM;Lo;0;L;;;;;N;;;;; CCF7;HANGUL SYLLABLE CYELB;Lo;0;L;;;;;N;;;;; CCF8;HANGUL SYLLABLE CYELS;Lo;0;L;;;;;N;;;;; CCF9;HANGUL SYLLABLE CYELT;Lo;0;L;;;;;N;;;;; CCFA;HANGUL SYLLABLE CYELP;Lo;0;L;;;;;N;;;;; CCFB;HANGUL SYLLABLE CYELH;Lo;0;L;;;;;N;;;;; CCFC;HANGUL SYLLABLE CYEM;Lo;0;L;;;;;N;;;;; CCFD;HANGUL SYLLABLE CYEB;Lo;0;L;;;;;N;;;;; CCFE;HANGUL SYLLABLE CYEBS;Lo;0;L;;;;;N;;;;; CCFF;HANGUL SYLLABLE CYES;Lo;0;L;;;;;N;;;;; CD00;HANGUL SYLLABLE CYESS;Lo;0;L;;;;;N;;;;; CD01;HANGUL SYLLABLE CYENG;Lo;0;L;;;;;N;;;;; CD02;HANGUL SYLLABLE CYEJ;Lo;0;L;;;;;N;;;;; CD03;HANGUL SYLLABLE CYEC;Lo;0;L;;;;;N;;;;; CD04;HANGUL SYLLABLE CYEK;Lo;0;L;;;;;N;;;;; CD05;HANGUL SYLLABLE CYET;Lo;0;L;;;;;N;;;;; CD06;HANGUL SYLLABLE CYEP;Lo;0;L;;;;;N;;;;; CD07;HANGUL SYLLABLE CYEH;Lo;0;L;;;;;N;;;;; CD08;HANGUL SYLLABLE CO;Lo;0;L;;;;;N;;;;; CD09;HANGUL SYLLABLE COG;Lo;0;L;;;;;N;;;;; CD0A;HANGUL SYLLABLE COGG;Lo;0;L;;;;;N;;;;; CD0B;HANGUL SYLLABLE COGS;Lo;0;L;;;;;N;;;;; CD0C;HANGUL SYLLABLE CON;Lo;0;L;;;;;N;;;;; CD0D;HANGUL SYLLABLE CONI;Lo;0;L;;;;;N;;;;; CD0E;HANGUL SYLLABLE CONH;Lo;0;L;;;;;N;;;;; CD0F;HANGUL SYLLABLE COD;Lo;0;L;;;;;N;;;;; CD10;HANGUL SYLLABLE COL;Lo;0;L;;;;;N;;;;; CD11;HANGUL SYLLABLE COLG;Lo;0;L;;;;;N;;;;; CD12;HANGUL SYLLABLE COLM;Lo;0;L;;;;;N;;;;; CD13;HANGUL SYLLABLE COLB;Lo;0;L;;;;;N;;;;; CD14;HANGUL SYLLABLE COLS;Lo;0;L;;;;;N;;;;; CD15;HANGUL SYLLABLE COLT;Lo;0;L;;;;;N;;;;; CD16;HANGUL SYLLABLE COLP;Lo;0;L;;;;;N;;;;; CD17;HANGUL SYLLABLE COLH;Lo;0;L;;;;;N;;;;; CD18;HANGUL SYLLABLE COM;Lo;0;L;;;;;N;;;;; CD19;HANGUL SYLLABLE COB;Lo;0;L;;;;;N;;;;; CD1A;HANGUL SYLLABLE COBS;Lo;0;L;;;;;N;;;;; CD1B;HANGUL SYLLABLE COS;Lo;0;L;;;;;N;;;;; CD1C;HANGUL SYLLABLE COSS;Lo;0;L;;;;;N;;;;; CD1D;HANGUL SYLLABLE CONG;Lo;0;L;;;;;N;;;;; CD1E;HANGUL SYLLABLE COJ;Lo;0;L;;;;;N;;;;; CD1F;HANGUL SYLLABLE COC;Lo;0;L;;;;;N;;;;; CD20;HANGUL SYLLABLE COK;Lo;0;L;;;;;N;;;;; CD21;HANGUL SYLLABLE COT;Lo;0;L;;;;;N;;;;; CD22;HANGUL SYLLABLE COP;Lo;0;L;;;;;N;;;;; CD23;HANGUL SYLLABLE COH;Lo;0;L;;;;;N;;;;; CD24;HANGUL SYLLABLE CWA;Lo;0;L;;;;;N;;;;; CD25;HANGUL SYLLABLE CWAG;Lo;0;L;;;;;N;;;;; CD26;HANGUL SYLLABLE CWAGG;Lo;0;L;;;;;N;;;;; CD27;HANGUL SYLLABLE CWAGS;Lo;0;L;;;;;N;;;;; CD28;HANGUL SYLLABLE CWAN;Lo;0;L;;;;;N;;;;; CD29;HANGUL SYLLABLE CWANI;Lo;0;L;;;;;N;;;;; CD2A;HANGUL SYLLABLE CWANH;Lo;0;L;;;;;N;;;;; CD2B;HANGUL SYLLABLE CWAD;Lo;0;L;;;;;N;;;;; CD2C;HANGUL SYLLABLE CWAL;Lo;0;L;;;;;N;;;;; CD2D;HANGUL SYLLABLE CWALG;Lo;0;L;;;;;N;;;;; CD2E;HANGUL SYLLABLE CWALM;Lo;0;L;;;;;N;;;;; CD2F;HANGUL SYLLABLE CWALB;Lo;0;L;;;;;N;;;;; CD30;HANGUL SYLLABLE CWALS;Lo;0;L;;;;;N;;;;; CD31;HANGUL SYLLABLE CWALT;Lo;0;L;;;;;N;;;;; CD32;HANGUL SYLLABLE CWALP;Lo;0;L;;;;;N;;;;; CD33;HANGUL SYLLABLE CWALH;Lo;0;L;;;;;N;;;;; CD34;HANGUL SYLLABLE CWAM;Lo;0;L;;;;;N;;;;; CD35;HANGUL SYLLABLE CWAB;Lo;0;L;;;;;N;;;;; CD36;HANGUL SYLLABLE CWABS;Lo;0;L;;;;;N;;;;; CD37;HANGUL SYLLABLE CWAS;Lo;0;L;;;;;N;;;;; CD38;HANGUL SYLLABLE CWASS;Lo;0;L;;;;;N;;;;; CD39;HANGUL SYLLABLE CWANG;Lo;0;L;;;;;N;;;;; CD3A;HANGUL SYLLABLE CWAJ;Lo;0;L;;;;;N;;;;; CD3B;HANGUL SYLLABLE CWAC;Lo;0;L;;;;;N;;;;; CD3C;HANGUL SYLLABLE CWAK;Lo;0;L;;;;;N;;;;; CD3D;HANGUL SYLLABLE CWAT;Lo;0;L;;;;;N;;;;; CD3E;HANGUL SYLLABLE CWAP;Lo;0;L;;;;;N;;;;; CD3F;HANGUL SYLLABLE CWAH;Lo;0;L;;;;;N;;;;; CD40;HANGUL SYLLABLE CWAE;Lo;0;L;;;;;N;;;;; CD41;HANGUL SYLLABLE CWAEG;Lo;0;L;;;;;N;;;;; CD42;HANGUL SYLLABLE CWAEGG;Lo;0;L;;;;;N;;;;; CD43;HANGUL SYLLABLE CWAEGS;Lo;0;L;;;;;N;;;;; CD44;HANGUL SYLLABLE CWAEN;Lo;0;L;;;;;N;;;;; CD45;HANGUL SYLLABLE CWAENI;Lo;0;L;;;;;N;;;;; CD46;HANGUL SYLLABLE CWAENH;Lo;0;L;;;;;N;;;;; CD47;HANGUL SYLLABLE CWAED;Lo;0;L;;;;;N;;;;; CD48;HANGUL SYLLABLE CWAEL;Lo;0;L;;;;;N;;;;; CD49;HANGUL SYLLABLE CWAELG;Lo;0;L;;;;;N;;;;; CD4A;HANGUL SYLLABLE CWAELM;Lo;0;L;;;;;N;;;;; CD4B;HANGUL SYLLABLE CWAELB;Lo;0;L;;;;;N;;;;; CD4C;HANGUL SYLLABLE CWAELS;Lo;0;L;;;;;N;;;;; CD4D;HANGUL SYLLABLE CWAELT;Lo;0;L;;;;;N;;;;; CD4E;HANGUL SYLLABLE CWAELP;Lo;0;L;;;;;N;;;;; CD4F;HANGUL SYLLABLE CWAELH;Lo;0;L;;;;;N;;;;; CD50;HANGUL SYLLABLE CWAEM;Lo;0;L;;;;;N;;;;; CD51;HANGUL SYLLABLE CWAEB;Lo;0;L;;;;;N;;;;; CD52;HANGUL SYLLABLE CWAEBS;Lo;0;L;;;;;N;;;;; CD53;HANGUL SYLLABLE CWAES;Lo;0;L;;;;;N;;;;; CD54;HANGUL SYLLABLE CWAESS;Lo;0;L;;;;;N;;;;; CD55;HANGUL SYLLABLE CWAENG;Lo;0;L;;;;;N;;;;; CD56;HANGUL SYLLABLE CWAEJ;Lo;0;L;;;;;N;;;;; CD57;HANGUL SYLLABLE CWAEC;Lo;0;L;;;;;N;;;;; CD58;HANGUL SYLLABLE CWAEK;Lo;0;L;;;;;N;;;;; CD59;HANGUL SYLLABLE CWAET;Lo;0;L;;;;;N;;;;; CD5A;HANGUL SYLLABLE CWAEP;Lo;0;L;;;;;N;;;;; CD5B;HANGUL SYLLABLE CWAEH;Lo;0;L;;;;;N;;;;; CD5C;HANGUL SYLLABLE COE;Lo;0;L;;;;;N;;;;; CD5D;HANGUL SYLLABLE COEG;Lo;0;L;;;;;N;;;;; CD5E;HANGUL SYLLABLE COEGG;Lo;0;L;;;;;N;;;;; CD5F;HANGUL SYLLABLE COEGS;Lo;0;L;;;;;N;;;;; CD60;HANGUL SYLLABLE COEN;Lo;0;L;;;;;N;;;;; CD61;HANGUL SYLLABLE COENI;Lo;0;L;;;;;N;;;;; CD62;HANGUL SYLLABLE COENH;Lo;0;L;;;;;N;;;;; CD63;HANGUL SYLLABLE COED;Lo;0;L;;;;;N;;;;; CD64;HANGUL SYLLABLE COEL;Lo;0;L;;;;;N;;;;; CD65;HANGUL SYLLABLE COELG;Lo;0;L;;;;;N;;;;; CD66;HANGUL SYLLABLE COELM;Lo;0;L;;;;;N;;;;; CD67;HANGUL SYLLABLE COELB;Lo;0;L;;;;;N;;;;; CD68;HANGUL SYLLABLE COELS;Lo;0;L;;;;;N;;;;; CD69;HANGUL SYLLABLE COELT;Lo;0;L;;;;;N;;;;; CD6A;HANGUL SYLLABLE COELP;Lo;0;L;;;;;N;;;;; CD6B;HANGUL SYLLABLE COELH;Lo;0;L;;;;;N;;;;; CD6C;HANGUL SYLLABLE COEM;Lo;0;L;;;;;N;;;;; CD6D;HANGUL SYLLABLE COEB;Lo;0;L;;;;;N;;;;; CD6E;HANGUL SYLLABLE COEBS;Lo;0;L;;;;;N;;;;; CD6F;HANGUL SYLLABLE COES;Lo;0;L;;;;;N;;;;; CD70;HANGUL SYLLABLE COESS;Lo;0;L;;;;;N;;;;; CD71;HANGUL SYLLABLE COENG;Lo;0;L;;;;;N;;;;; CD72;HANGUL SYLLABLE COEJ;Lo;0;L;;;;;N;;;;; CD73;HANGUL SYLLABLE COEC;Lo;0;L;;;;;N;;;;; CD74;HANGUL SYLLABLE COEK;Lo;0;L;;;;;N;;;;; CD75;HANGUL SYLLABLE COET;Lo;0;L;;;;;N;;;;; CD76;HANGUL SYLLABLE COEP;Lo;0;L;;;;;N;;;;; CD77;HANGUL SYLLABLE COEH;Lo;0;L;;;;;N;;;;; CD78;HANGUL SYLLABLE CYO;Lo;0;L;;;;;N;;;;; CD79;HANGUL SYLLABLE CYOG;Lo;0;L;;;;;N;;;;; CD7A;HANGUL SYLLABLE CYOGG;Lo;0;L;;;;;N;;;;; CD7B;HANGUL SYLLABLE CYOGS;Lo;0;L;;;;;N;;;;; CD7C;HANGUL SYLLABLE CYON;Lo;0;L;;;;;N;;;;; CD7D;HANGUL SYLLABLE CYONI;Lo;0;L;;;;;N;;;;; CD7E;HANGUL SYLLABLE CYONH;Lo;0;L;;;;;N;;;;; CD7F;HANGUL SYLLABLE CYOD;Lo;0;L;;;;;N;;;;; CD80;HANGUL SYLLABLE CYOL;Lo;0;L;;;;;N;;;;; CD81;HANGUL SYLLABLE CYOLG;Lo;0;L;;;;;N;;;;; CD82;HANGUL SYLLABLE CYOLM;Lo;0;L;;;;;N;;;;; CD83;HANGUL SYLLABLE CYOLB;Lo;0;L;;;;;N;;;;; CD84;HANGUL SYLLABLE CYOLS;Lo;0;L;;;;;N;;;;; CD85;HANGUL SYLLABLE CYOLT;Lo;0;L;;;;;N;;;;; CD86;HANGUL SYLLABLE CYOLP;Lo;0;L;;;;;N;;;;; CD87;HANGUL SYLLABLE CYOLH;Lo;0;L;;;;;N;;;;; CD88;HANGUL SYLLABLE CYOM;Lo;0;L;;;;;N;;;;; CD89;HANGUL SYLLABLE CYOB;Lo;0;L;;;;;N;;;;; CD8A;HANGUL SYLLABLE CYOBS;Lo;0;L;;;;;N;;;;; CD8B;HANGUL SYLLABLE CYOS;Lo;0;L;;;;;N;;;;; CD8C;HANGUL SYLLABLE CYOSS;Lo;0;L;;;;;N;;;;; CD8D;HANGUL SYLLABLE CYONG;Lo;0;L;;;;;N;;;;; CD8E;HANGUL SYLLABLE CYOJ;Lo;0;L;;;;;N;;;;; CD8F;HANGUL SYLLABLE CYOC;Lo;0;L;;;;;N;;;;; CD90;HANGUL SYLLABLE CYOK;Lo;0;L;;;;;N;;;;; CD91;HANGUL SYLLABLE CYOT;Lo;0;L;;;;;N;;;;; CD92;HANGUL SYLLABLE CYOP;Lo;0;L;;;;;N;;;;; CD93;HANGUL SYLLABLE CYOH;Lo;0;L;;;;;N;;;;; CD94;HANGUL SYLLABLE CU;Lo;0;L;;;;;N;;;;; CD95;HANGUL SYLLABLE CUG;Lo;0;L;;;;;N;;;;; CD96;HANGUL SYLLABLE CUGG;Lo;0;L;;;;;N;;;;; CD97;HANGUL SYLLABLE CUGS;Lo;0;L;;;;;N;;;;; CD98;HANGUL SYLLABLE CUN;Lo;0;L;;;;;N;;;;; CD99;HANGUL SYLLABLE CUNI;Lo;0;L;;;;;N;;;;; CD9A;HANGUL SYLLABLE CUNH;Lo;0;L;;;;;N;;;;; CD9B;HANGUL SYLLABLE CUD;Lo;0;L;;;;;N;;;;; CD9C;HANGUL SYLLABLE CUL;Lo;0;L;;;;;N;;;;; CD9D;HANGUL SYLLABLE CULG;Lo;0;L;;;;;N;;;;; CD9E;HANGUL SYLLABLE CULM;Lo;0;L;;;;;N;;;;; CD9F;HANGUL SYLLABLE CULB;Lo;0;L;;;;;N;;;;; CDA0;HANGUL SYLLABLE CULS;Lo;0;L;;;;;N;;;;; CDA1;HANGUL SYLLABLE CULT;Lo;0;L;;;;;N;;;;; CDA2;HANGUL SYLLABLE CULP;Lo;0;L;;;;;N;;;;; CDA3;HANGUL SYLLABLE CULH;Lo;0;L;;;;;N;;;;; CDA4;HANGUL SYLLABLE CUM;Lo;0;L;;;;;N;;;;; CDA5;HANGUL SYLLABLE CUB;Lo;0;L;;;;;N;;;;; CDA6;HANGUL SYLLABLE CUBS;Lo;0;L;;;;;N;;;;; CDA7;HANGUL SYLLABLE CUS;Lo;0;L;;;;;N;;;;; CDA8;HANGUL SYLLABLE CUSS;Lo;0;L;;;;;N;;;;; CDA9;HANGUL SYLLABLE CUNG;Lo;0;L;;;;;N;;;;; CDAA;HANGUL SYLLABLE CUJ;Lo;0;L;;;;;N;;;;; CDAB;HANGUL SYLLABLE CUC;Lo;0;L;;;;;N;;;;; CDAC;HANGUL SYLLABLE CUK;Lo;0;L;;;;;N;;;;; CDAD;HANGUL SYLLABLE CUT;Lo;0;L;;;;;N;;;;; CDAE;HANGUL SYLLABLE CUP;Lo;0;L;;;;;N;;;;; CDAF;HANGUL SYLLABLE CUH;Lo;0;L;;;;;N;;;;; CDB0;HANGUL SYLLABLE CWEO;Lo;0;L;;;;;N;;;;; CDB1;HANGUL SYLLABLE CWEOG;Lo;0;L;;;;;N;;;;; CDB2;HANGUL SYLLABLE CWEOGG;Lo;0;L;;;;;N;;;;; CDB3;HANGUL SYLLABLE CWEOGS;Lo;0;L;;;;;N;;;;; CDB4;HANGUL SYLLABLE CWEON;Lo;0;L;;;;;N;;;;; CDB5;HANGUL SYLLABLE CWEONI;Lo;0;L;;;;;N;;;;; CDB6;HANGUL SYLLABLE CWEONH;Lo;0;L;;;;;N;;;;; CDB7;HANGUL SYLLABLE CWEOD;Lo;0;L;;;;;N;;;;; CDB8;HANGUL SYLLABLE CWEOL;Lo;0;L;;;;;N;;;;; CDB9;HANGUL SYLLABLE CWEOLG;Lo;0;L;;;;;N;;;;; CDBA;HANGUL SYLLABLE CWEOLM;Lo;0;L;;;;;N;;;;; CDBB;HANGUL SYLLABLE CWEOLB;Lo;0;L;;;;;N;;;;; CDBC;HANGUL SYLLABLE CWEOLS;Lo;0;L;;;;;N;;;;; CDBD;HANGUL SYLLABLE CWEOLT;Lo;0;L;;;;;N;;;;; CDBE;HANGUL SYLLABLE CWEOLP;Lo;0;L;;;;;N;;;;; CDBF;HANGUL SYLLABLE CWEOLH;Lo;0;L;;;;;N;;;;; CDC0;HANGUL SYLLABLE CWEOM;Lo;0;L;;;;;N;;;;; CDC1;HANGUL SYLLABLE CWEOB;Lo;0;L;;;;;N;;;;; CDC2;HANGUL SYLLABLE CWEOBS;Lo;0;L;;;;;N;;;;; CDC3;HANGUL SYLLABLE CWEOS;Lo;0;L;;;;;N;;;;; CDC4;HANGUL SYLLABLE CWEOSS;Lo;0;L;;;;;N;;;;; CDC5;HANGUL SYLLABLE CWEONG;Lo;0;L;;;;;N;;;;; CDC6;HANGUL SYLLABLE CWEOJ;Lo;0;L;;;;;N;;;;; CDC7;HANGUL SYLLABLE CWEOC;Lo;0;L;;;;;N;;;;; CDC8;HANGUL SYLLABLE CWEOK;Lo;0;L;;;;;N;;;;; CDC9;HANGUL SYLLABLE CWEOT;Lo;0;L;;;;;N;;;;; CDCA;HANGUL SYLLABLE CWEOP;Lo;0;L;;;;;N;;;;; CDCB;HANGUL SYLLABLE CWEOH;Lo;0;L;;;;;N;;;;; CDCC;HANGUL SYLLABLE CWE;Lo;0;L;;;;;N;;;;; CDCD;HANGUL SYLLABLE CWEG;Lo;0;L;;;;;N;;;;; CDCE;HANGUL SYLLABLE CWEGG;Lo;0;L;;;;;N;;;;; CDCF;HANGUL SYLLABLE CWEGS;Lo;0;L;;;;;N;;;;; CDD0;HANGUL SYLLABLE CWEN;Lo;0;L;;;;;N;;;;; CDD1;HANGUL SYLLABLE CWENI;Lo;0;L;;;;;N;;;;; CDD2;HANGUL SYLLABLE CWENH;Lo;0;L;;;;;N;;;;; CDD3;HANGUL SYLLABLE CWED;Lo;0;L;;;;;N;;;;; CDD4;HANGUL SYLLABLE CWEL;Lo;0;L;;;;;N;;;;; CDD5;HANGUL SYLLABLE CWELG;Lo;0;L;;;;;N;;;;; CDD6;HANGUL SYLLABLE CWELM;Lo;0;L;;;;;N;;;;; CDD7;HANGUL SYLLABLE CWELB;Lo;0;L;;;;;N;;;;; CDD8;HANGUL SYLLABLE CWELS;Lo;0;L;;;;;N;;;;; CDD9;HANGUL SYLLABLE CWELT;Lo;0;L;;;;;N;;;;; CDDA;HANGUL SYLLABLE CWELP;Lo;0;L;;;;;N;;;;; CDDB;HANGUL SYLLABLE CWELH;Lo;0;L;;;;;N;;;;; CDDC;HANGUL SYLLABLE CWEM;Lo;0;L;;;;;N;;;;; CDDD;HANGUL SYLLABLE CWEB;Lo;0;L;;;;;N;;;;; CDDE;HANGUL SYLLABLE CWEBS;Lo;0;L;;;;;N;;;;; CDDF;HANGUL SYLLABLE CWES;Lo;0;L;;;;;N;;;;; CDE0;HANGUL SYLLABLE CWESS;Lo;0;L;;;;;N;;;;; CDE1;HANGUL SYLLABLE CWENG;Lo;0;L;;;;;N;;;;; CDE2;HANGUL SYLLABLE CWEJ;Lo;0;L;;;;;N;;;;; CDE3;HANGUL SYLLABLE CWEC;Lo;0;L;;;;;N;;;;; CDE4;HANGUL SYLLABLE CWEK;Lo;0;L;;;;;N;;;;; CDE5;HANGUL SYLLABLE CWET;Lo;0;L;;;;;N;;;;; CDE6;HANGUL SYLLABLE CWEP;Lo;0;L;;;;;N;;;;; CDE7;HANGUL SYLLABLE CWEH;Lo;0;L;;;;;N;;;;; CDE8;HANGUL SYLLABLE CWI;Lo;0;L;;;;;N;;;;; CDE9;HANGUL SYLLABLE CWIG;Lo;0;L;;;;;N;;;;; CDEA;HANGUL SYLLABLE CWIGG;Lo;0;L;;;;;N;;;;; CDEB;HANGUL SYLLABLE CWIGS;Lo;0;L;;;;;N;;;;; CDEC;HANGUL SYLLABLE CWIN;Lo;0;L;;;;;N;;;;; CDED;HANGUL SYLLABLE CWINI;Lo;0;L;;;;;N;;;;; CDEE;HANGUL SYLLABLE CWINH;Lo;0;L;;;;;N;;;;; CDEF;HANGUL SYLLABLE CWID;Lo;0;L;;;;;N;;;;; CDF0;HANGUL SYLLABLE CWIL;Lo;0;L;;;;;N;;;;; CDF1;HANGUL SYLLABLE CWILG;Lo;0;L;;;;;N;;;;; CDF2;HANGUL SYLLABLE CWILM;Lo;0;L;;;;;N;;;;; CDF3;HANGUL SYLLABLE CWILB;Lo;0;L;;;;;N;;;;; CDF4;HANGUL SYLLABLE CWILS;Lo;0;L;;;;;N;;;;; CDF5;HANGUL SYLLABLE CWILT;Lo;0;L;;;;;N;;;;; CDF6;HANGUL SYLLABLE CWILP;Lo;0;L;;;;;N;;;;; CDF7;HANGUL SYLLABLE CWILH;Lo;0;L;;;;;N;;;;; CDF8;HANGUL SYLLABLE CWIM;Lo;0;L;;;;;N;;;;; CDF9;HANGUL SYLLABLE CWIB;Lo;0;L;;;;;N;;;;; CDFA;HANGUL SYLLABLE CWIBS;Lo;0;L;;;;;N;;;;; CDFB;HANGUL SYLLABLE CWIS;Lo;0;L;;;;;N;;;;; CDFC;HANGUL SYLLABLE CWISS;Lo;0;L;;;;;N;;;;; CDFD;HANGUL SYLLABLE CWING;Lo;0;L;;;;;N;;;;; CDFE;HANGUL SYLLABLE CWIJ;Lo;0;L;;;;;N;;;;; CDFF;HANGUL SYLLABLE CWIC;Lo;0;L;;;;;N;;;;; CE00;HANGUL SYLLABLE CWIK;Lo;0;L;;;;;N;;;;; CE01;HANGUL SYLLABLE CWIT;Lo;0;L;;;;;N;;;;; CE02;HANGUL SYLLABLE CWIP;Lo;0;L;;;;;N;;;;; CE03;HANGUL SYLLABLE CWIH;Lo;0;L;;;;;N;;;;; CE04;HANGUL SYLLABLE CYU;Lo;0;L;;;;;N;;;;; CE05;HANGUL SYLLABLE CYUG;Lo;0;L;;;;;N;;;;; CE06;HANGUL SYLLABLE CYUGG;Lo;0;L;;;;;N;;;;; CE07;HANGUL SYLLABLE CYUGS;Lo;0;L;;;;;N;;;;; CE08;HANGUL SYLLABLE CYUN;Lo;0;L;;;;;N;;;;; CE09;HANGUL SYLLABLE CYUNI;Lo;0;L;;;;;N;;;;; CE0A;HANGUL SYLLABLE CYUNH;Lo;0;L;;;;;N;;;;; CE0B;HANGUL SYLLABLE CYUD;Lo;0;L;;;;;N;;;;; CE0C;HANGUL SYLLABLE CYUL;Lo;0;L;;;;;N;;;;; CE0D;HANGUL SYLLABLE CYULG;Lo;0;L;;;;;N;;;;; CE0E;HANGUL SYLLABLE CYULM;Lo;0;L;;;;;N;;;;; CE0F;HANGUL SYLLABLE CYULB;Lo;0;L;;;;;N;;;;; CE10;HANGUL SYLLABLE CYULS;Lo;0;L;;;;;N;;;;; CE11;HANGUL SYLLABLE CYULT;Lo;0;L;;;;;N;;;;; CE12;HANGUL SYLLABLE CYULP;Lo;0;L;;;;;N;;;;; CE13;HANGUL SYLLABLE CYULH;Lo;0;L;;;;;N;;;;; CE14;HANGUL SYLLABLE CYUM;Lo;0;L;;;;;N;;;;; CE15;HANGUL SYLLABLE CYUB;Lo;0;L;;;;;N;;;;; CE16;HANGUL SYLLABLE CYUBS;Lo;0;L;;;;;N;;;;; CE17;HANGUL SYLLABLE CYUS;Lo;0;L;;;;;N;;;;; CE18;HANGUL SYLLABLE CYUSS;Lo;0;L;;;;;N;;;;; CE19;HANGUL SYLLABLE CYUNG;Lo;0;L;;;;;N;;;;; CE1A;HANGUL SYLLABLE CYUJ;Lo;0;L;;;;;N;;;;; CE1B;HANGUL SYLLABLE CYUC;Lo;0;L;;;;;N;;;;; CE1C;HANGUL SYLLABLE CYUK;Lo;0;L;;;;;N;;;;; CE1D;HANGUL SYLLABLE CYUT;Lo;0;L;;;;;N;;;;; CE1E;HANGUL SYLLABLE CYUP;Lo;0;L;;;;;N;;;;; CE1F;HANGUL SYLLABLE CYUH;Lo;0;L;;;;;N;;;;; CE20;HANGUL SYLLABLE CEU;Lo;0;L;;;;;N;;;;; CE21;HANGUL SYLLABLE CEUG;Lo;0;L;;;;;N;;;;; CE22;HANGUL SYLLABLE CEUGG;Lo;0;L;;;;;N;;;;; CE23;HANGUL SYLLABLE CEUGS;Lo;0;L;;;;;N;;;;; CE24;HANGUL SYLLABLE CEUN;Lo;0;L;;;;;N;;;;; CE25;HANGUL SYLLABLE CEUNI;Lo;0;L;;;;;N;;;;; CE26;HANGUL SYLLABLE CEUNH;Lo;0;L;;;;;N;;;;; CE27;HANGUL SYLLABLE CEUD;Lo;0;L;;;;;N;;;;; CE28;HANGUL SYLLABLE CEUL;Lo;0;L;;;;;N;;;;; CE29;HANGUL SYLLABLE CEULG;Lo;0;L;;;;;N;;;;; CE2A;HANGUL SYLLABLE CEULM;Lo;0;L;;;;;N;;;;; CE2B;HANGUL SYLLABLE CEULB;Lo;0;L;;;;;N;;;;; CE2C;HANGUL SYLLABLE CEULS;Lo;0;L;;;;;N;;;;; CE2D;HANGUL SYLLABLE CEULT;Lo;0;L;;;;;N;;;;; CE2E;HANGUL SYLLABLE CEULP;Lo;0;L;;;;;N;;;;; CE2F;HANGUL SYLLABLE CEULH;Lo;0;L;;;;;N;;;;; CE30;HANGUL SYLLABLE CEUM;Lo;0;L;;;;;N;;;;; CE31;HANGUL SYLLABLE CEUB;Lo;0;L;;;;;N;;;;; CE32;HANGUL SYLLABLE CEUBS;Lo;0;L;;;;;N;;;;; CE33;HANGUL SYLLABLE CEUS;Lo;0;L;;;;;N;;;;; CE34;HANGUL SYLLABLE CEUSS;Lo;0;L;;;;;N;;;;; CE35;HANGUL SYLLABLE CEUNG;Lo;0;L;;;;;N;;;;; CE36;HANGUL SYLLABLE CEUJ;Lo;0;L;;;;;N;;;;; CE37;HANGUL SYLLABLE CEUC;Lo;0;L;;;;;N;;;;; CE38;HANGUL SYLLABLE CEUK;Lo;0;L;;;;;N;;;;; CE39;HANGUL SYLLABLE CEUT;Lo;0;L;;;;;N;;;;; CE3A;HANGUL SYLLABLE CEUP;Lo;0;L;;;;;N;;;;; CE3B;HANGUL SYLLABLE CEUH;Lo;0;L;;;;;N;;;;; CE3C;HANGUL SYLLABLE CYI;Lo;0;L;;;;;N;;;;; CE3D;HANGUL SYLLABLE CYIG;Lo;0;L;;;;;N;;;;; CE3E;HANGUL SYLLABLE CYIGG;Lo;0;L;;;;;N;;;;; CE3F;HANGUL SYLLABLE CYIGS;Lo;0;L;;;;;N;;;;; CE40;HANGUL SYLLABLE CYIN;Lo;0;L;;;;;N;;;;; CE41;HANGUL SYLLABLE CYINI;Lo;0;L;;;;;N;;;;; CE42;HANGUL SYLLABLE CYINH;Lo;0;L;;;;;N;;;;; CE43;HANGUL SYLLABLE CYID;Lo;0;L;;;;;N;;;;; CE44;HANGUL SYLLABLE CYIL;Lo;0;L;;;;;N;;;;; CE45;HANGUL SYLLABLE CYILG;Lo;0;L;;;;;N;;;;; CE46;HANGUL SYLLABLE CYILM;Lo;0;L;;;;;N;;;;; CE47;HANGUL SYLLABLE CYILB;Lo;0;L;;;;;N;;;;; CE48;HANGUL SYLLABLE CYILS;Lo;0;L;;;;;N;;;;; CE49;HANGUL SYLLABLE CYILT;Lo;0;L;;;;;N;;;;; CE4A;HANGUL SYLLABLE CYILP;Lo;0;L;;;;;N;;;;; CE4B;HANGUL SYLLABLE CYILH;Lo;0;L;;;;;N;;;;; CE4C;HANGUL SYLLABLE CYIM;Lo;0;L;;;;;N;;;;; CE4D;HANGUL SYLLABLE CYIB;Lo;0;L;;;;;N;;;;; CE4E;HANGUL SYLLABLE CYIBS;Lo;0;L;;;;;N;;;;; CE4F;HANGUL SYLLABLE CYIS;Lo;0;L;;;;;N;;;;; CE50;HANGUL SYLLABLE CYISS;Lo;0;L;;;;;N;;;;; CE51;HANGUL SYLLABLE CYING;Lo;0;L;;;;;N;;;;; CE52;HANGUL SYLLABLE CYIJ;Lo;0;L;;;;;N;;;;; CE53;HANGUL SYLLABLE CYIC;Lo;0;L;;;;;N;;;;; CE54;HANGUL SYLLABLE CYIK;Lo;0;L;;;;;N;;;;; CE55;HANGUL SYLLABLE CYIT;Lo;0;L;;;;;N;;;;; CE56;HANGUL SYLLABLE CYIP;Lo;0;L;;;;;N;;;;; CE57;HANGUL SYLLABLE CYIH;Lo;0;L;;;;;N;;;;; CE58;HANGUL SYLLABLE CI;Lo;0;L;;;;;N;;;;; CE59;HANGUL SYLLABLE CIG;Lo;0;L;;;;;N;;;;; CE5A;HANGUL SYLLABLE CIGG;Lo;0;L;;;;;N;;;;; CE5B;HANGUL SYLLABLE CIGS;Lo;0;L;;;;;N;;;;; CE5C;HANGUL SYLLABLE CIN;Lo;0;L;;;;;N;;;;; CE5D;HANGUL SYLLABLE CINI;Lo;0;L;;;;;N;;;;; CE5E;HANGUL SYLLABLE CINH;Lo;0;L;;;;;N;;;;; CE5F;HANGUL SYLLABLE CID;Lo;0;L;;;;;N;;;;; CE60;HANGUL SYLLABLE CIL;Lo;0;L;;;;;N;;;;; CE61;HANGUL SYLLABLE CILG;Lo;0;L;;;;;N;;;;; CE62;HANGUL SYLLABLE CILM;Lo;0;L;;;;;N;;;;; CE63;HANGUL SYLLABLE CILB;Lo;0;L;;;;;N;;;;; CE64;HANGUL SYLLABLE CILS;Lo;0;L;;;;;N;;;;; CE65;HANGUL SYLLABLE CILT;Lo;0;L;;;;;N;;;;; CE66;HANGUL SYLLABLE CILP;Lo;0;L;;;;;N;;;;; CE67;HANGUL SYLLABLE CILH;Lo;0;L;;;;;N;;;;; CE68;HANGUL SYLLABLE CIM;Lo;0;L;;;;;N;;;;; CE69;HANGUL SYLLABLE CIB;Lo;0;L;;;;;N;;;;; CE6A;HANGUL SYLLABLE CIBS;Lo;0;L;;;;;N;;;;; CE6B;HANGUL SYLLABLE CIS;Lo;0;L;;;;;N;;;;; CE6C;HANGUL SYLLABLE CISS;Lo;0;L;;;;;N;;;;; CE6D;HANGUL SYLLABLE CING;Lo;0;L;;;;;N;;;;; CE6E;HANGUL SYLLABLE CIJ;Lo;0;L;;;;;N;;;;; CE6F;HANGUL SYLLABLE CIC;Lo;0;L;;;;;N;;;;; CE70;HANGUL SYLLABLE CIK;Lo;0;L;;;;;N;;;;; CE71;HANGUL SYLLABLE CIT;Lo;0;L;;;;;N;;;;; CE72;HANGUL SYLLABLE CIP;Lo;0;L;;;;;N;;;;; CE73;HANGUL SYLLABLE CIH;Lo;0;L;;;;;N;;;;; CE74;HANGUL SYLLABLE KA;Lo;0;L;;;;;N;;;;; CE75;HANGUL SYLLABLE KAG;Lo;0;L;;;;;N;;;;; CE76;HANGUL SYLLABLE KAGG;Lo;0;L;;;;;N;;;;; CE77;HANGUL SYLLABLE KAGS;Lo;0;L;;;;;N;;;;; CE78;HANGUL SYLLABLE KAN;Lo;0;L;;;;;N;;;;; CE79;HANGUL SYLLABLE KANI;Lo;0;L;;;;;N;;;;; CE7A;HANGUL SYLLABLE KANH;Lo;0;L;;;;;N;;;;; CE7B;HANGUL SYLLABLE KAD;Lo;0;L;;;;;N;;;;; CE7C;HANGUL SYLLABLE KAL;Lo;0;L;;;;;N;;;;; CE7D;HANGUL SYLLABLE KALG;Lo;0;L;;;;;N;;;;; CE7E;HANGUL SYLLABLE KALM;Lo;0;L;;;;;N;;;;; CE7F;HANGUL SYLLABLE KALB;Lo;0;L;;;;;N;;;;; CE80;HANGUL SYLLABLE KALS;Lo;0;L;;;;;N;;;;; CE81;HANGUL SYLLABLE KALT;Lo;0;L;;;;;N;;;;; CE82;HANGUL SYLLABLE KALP;Lo;0;L;;;;;N;;;;; CE83;HANGUL SYLLABLE KALH;Lo;0;L;;;;;N;;;;; CE84;HANGUL SYLLABLE KAM;Lo;0;L;;;;;N;;;;; CE85;HANGUL SYLLABLE KAB;Lo;0;L;;;;;N;;;;; CE86;HANGUL SYLLABLE KABS;Lo;0;L;;;;;N;;;;; CE87;HANGUL SYLLABLE KAS;Lo;0;L;;;;;N;;;;; CE88;HANGUL SYLLABLE KASS;Lo;0;L;;;;;N;;;;; CE89;HANGUL SYLLABLE KANG;Lo;0;L;;;;;N;;;;; CE8A;HANGUL SYLLABLE KAJ;Lo;0;L;;;;;N;;;;; CE8B;HANGUL SYLLABLE KAC;Lo;0;L;;;;;N;;;;; CE8C;HANGUL SYLLABLE KAK;Lo;0;L;;;;;N;;;;; CE8D;HANGUL SYLLABLE KAT;Lo;0;L;;;;;N;;;;; CE8E;HANGUL SYLLABLE KAP;Lo;0;L;;;;;N;;;;; CE8F;HANGUL SYLLABLE KAH;Lo;0;L;;;;;N;;;;; CE90;HANGUL SYLLABLE KAE;Lo;0;L;;;;;N;;;;; CE91;HANGUL SYLLABLE KAEG;Lo;0;L;;;;;N;;;;; CE92;HANGUL SYLLABLE KAEGG;Lo;0;L;;;;;N;;;;; CE93;HANGUL SYLLABLE KAEGS;Lo;0;L;;;;;N;;;;; CE94;HANGUL SYLLABLE KAEN;Lo;0;L;;;;;N;;;;; CE95;HANGUL SYLLABLE KAENI;Lo;0;L;;;;;N;;;;; CE96;HANGUL SYLLABLE KAENH;Lo;0;L;;;;;N;;;;; CE97;HANGUL SYLLABLE KAED;Lo;0;L;;;;;N;;;;; CE98;HANGUL SYLLABLE KAEL;Lo;0;L;;;;;N;;;;; CE99;HANGUL SYLLABLE KAELG;Lo;0;L;;;;;N;;;;; CE9A;HANGUL SYLLABLE KAELM;Lo;0;L;;;;;N;;;;; CE9B;HANGUL SYLLABLE KAELB;Lo;0;L;;;;;N;;;;; CE9C;HANGUL SYLLABLE KAELS;Lo;0;L;;;;;N;;;;; CE9D;HANGUL SYLLABLE KAELT;Lo;0;L;;;;;N;;;;; CE9E;HANGUL SYLLABLE KAELP;Lo;0;L;;;;;N;;;;; CE9F;HANGUL SYLLABLE KAELH;Lo;0;L;;;;;N;;;;; CEA0;HANGUL SYLLABLE KAEM;Lo;0;L;;;;;N;;;;; CEA1;HANGUL SYLLABLE KAEB;Lo;0;L;;;;;N;;;;; CEA2;HANGUL SYLLABLE KAEBS;Lo;0;L;;;;;N;;;;; CEA3;HANGUL SYLLABLE KAES;Lo;0;L;;;;;N;;;;; CEA4;HANGUL SYLLABLE KAESS;Lo;0;L;;;;;N;;;;; CEA5;HANGUL SYLLABLE KAENG;Lo;0;L;;;;;N;;;;; CEA6;HANGUL SYLLABLE KAEJ;Lo;0;L;;;;;N;;;;; CEA7;HANGUL SYLLABLE KAEC;Lo;0;L;;;;;N;;;;; CEA8;HANGUL SYLLABLE KAEK;Lo;0;L;;;;;N;;;;; CEA9;HANGUL SYLLABLE KAET;Lo;0;L;;;;;N;;;;; CEAA;HANGUL SYLLABLE KAEP;Lo;0;L;;;;;N;;;;; CEAB;HANGUL SYLLABLE KAEH;Lo;0;L;;;;;N;;;;; CEAC;HANGUL SYLLABLE KYA;Lo;0;L;;;;;N;;;;; CEAD;HANGUL SYLLABLE KYAG;Lo;0;L;;;;;N;;;;; CEAE;HANGUL SYLLABLE KYAGG;Lo;0;L;;;;;N;;;;; CEAF;HANGUL SYLLABLE KYAGS;Lo;0;L;;;;;N;;;;; CEB0;HANGUL SYLLABLE KYAN;Lo;0;L;;;;;N;;;;; CEB1;HANGUL SYLLABLE KYANI;Lo;0;L;;;;;N;;;;; CEB2;HANGUL SYLLABLE KYANH;Lo;0;L;;;;;N;;;;; CEB3;HANGUL SYLLABLE KYAD;Lo;0;L;;;;;N;;;;; CEB4;HANGUL SYLLABLE KYAL;Lo;0;L;;;;;N;;;;; CEB5;HANGUL SYLLABLE KYALG;Lo;0;L;;;;;N;;;;; CEB6;HANGUL SYLLABLE KYALM;Lo;0;L;;;;;N;;;;; CEB7;HANGUL SYLLABLE KYALB;Lo;0;L;;;;;N;;;;; CEB8;HANGUL SYLLABLE KYALS;Lo;0;L;;;;;N;;;;; CEB9;HANGUL SYLLABLE KYALT;Lo;0;L;;;;;N;;;;; CEBA;HANGUL SYLLABLE KYALP;Lo;0;L;;;;;N;;;;; CEBB;HANGUL SYLLABLE KYALH;Lo;0;L;;;;;N;;;;; CEBC;HANGUL SYLLABLE KYAM;Lo;0;L;;;;;N;;;;; CEBD;HANGUL SYLLABLE KYAB;Lo;0;L;;;;;N;;;;; CEBE;HANGUL SYLLABLE KYABS;Lo;0;L;;;;;N;;;;; CEBF;HANGUL SYLLABLE KYAS;Lo;0;L;;;;;N;;;;; CEC0;HANGUL SYLLABLE KYASS;Lo;0;L;;;;;N;;;;; CEC1;HANGUL SYLLABLE KYANG;Lo;0;L;;;;;N;;;;; CEC2;HANGUL SYLLABLE KYAJ;Lo;0;L;;;;;N;;;;; CEC3;HANGUL SYLLABLE KYAC;Lo;0;L;;;;;N;;;;; CEC4;HANGUL SYLLABLE KYAK;Lo;0;L;;;;;N;;;;; CEC5;HANGUL SYLLABLE KYAT;Lo;0;L;;;;;N;;;;; CEC6;HANGUL SYLLABLE KYAP;Lo;0;L;;;;;N;;;;; CEC7;HANGUL SYLLABLE KYAH;Lo;0;L;;;;;N;;;;; CEC8;HANGUL SYLLABLE KYAE;Lo;0;L;;;;;N;;;;; CEC9;HANGUL SYLLABLE KYAEG;Lo;0;L;;;;;N;;;;; CECA;HANGUL SYLLABLE KYAEGG;Lo;0;L;;;;;N;;;;; CECB;HANGUL SYLLABLE KYAEGS;Lo;0;L;;;;;N;;;;; CECC;HANGUL SYLLABLE KYAEN;Lo;0;L;;;;;N;;;;; CECD;HANGUL SYLLABLE KYAENI;Lo;0;L;;;;;N;;;;; CECE;HANGUL SYLLABLE KYAENH;Lo;0;L;;;;;N;;;;; CECF;HANGUL SYLLABLE KYAED;Lo;0;L;;;;;N;;;;; CED0;HANGUL SYLLABLE KYAEL;Lo;0;L;;;;;N;;;;; CED1;HANGUL SYLLABLE KYAELG;Lo;0;L;;;;;N;;;;; CED2;HANGUL SYLLABLE KYAELM;Lo;0;L;;;;;N;;;;; CED3;HANGUL SYLLABLE KYAELB;Lo;0;L;;;;;N;;;;; CED4;HANGUL SYLLABLE KYAELS;Lo;0;L;;;;;N;;;;; CED5;HANGUL SYLLABLE KYAELT;Lo;0;L;;;;;N;;;;; CED6;HANGUL SYLLABLE KYAELP;Lo;0;L;;;;;N;;;;; CED7;HANGUL SYLLABLE KYAELH;Lo;0;L;;;;;N;;;;; CED8;HANGUL SYLLABLE KYAEM;Lo;0;L;;;;;N;;;;; CED9;HANGUL SYLLABLE KYAEB;Lo;0;L;;;;;N;;;;; CEDA;HANGUL SYLLABLE KYAEBS;Lo;0;L;;;;;N;;;;; CEDB;HANGUL SYLLABLE KYAES;Lo;0;L;;;;;N;;;;; CEDC;HANGUL SYLLABLE KYAESS;Lo;0;L;;;;;N;;;;; CEDD;HANGUL SYLLABLE KYAENG;Lo;0;L;;;;;N;;;;; CEDE;HANGUL SYLLABLE KYAEJ;Lo;0;L;;;;;N;;;;; CEDF;HANGUL SYLLABLE KYAEC;Lo;0;L;;;;;N;;;;; CEE0;HANGUL SYLLABLE KYAEK;Lo;0;L;;;;;N;;;;; CEE1;HANGUL SYLLABLE KYAET;Lo;0;L;;;;;N;;;;; CEE2;HANGUL SYLLABLE KYAEP;Lo;0;L;;;;;N;;;;; CEE3;HANGUL SYLLABLE KYAEH;Lo;0;L;;;;;N;;;;; CEE4;HANGUL SYLLABLE KEO;Lo;0;L;;;;;N;;;;; CEE5;HANGUL SYLLABLE KEOG;Lo;0;L;;;;;N;;;;; CEE6;HANGUL SYLLABLE KEOGG;Lo;0;L;;;;;N;;;;; CEE7;HANGUL SYLLABLE KEOGS;Lo;0;L;;;;;N;;;;; CEE8;HANGUL SYLLABLE KEON;Lo;0;L;;;;;N;;;;; CEE9;HANGUL SYLLABLE KEONI;Lo;0;L;;;;;N;;;;; CEEA;HANGUL SYLLABLE KEONH;Lo;0;L;;;;;N;;;;; CEEB;HANGUL SYLLABLE KEOD;Lo;0;L;;;;;N;;;;; CEEC;HANGUL SYLLABLE KEOL;Lo;0;L;;;;;N;;;;; CEED;HANGUL SYLLABLE KEOLG;Lo;0;L;;;;;N;;;;; CEEE;HANGUL SYLLABLE KEOLM;Lo;0;L;;;;;N;;;;; CEEF;HANGUL SYLLABLE KEOLB;Lo;0;L;;;;;N;;;;; CEF0;HANGUL SYLLABLE KEOLS;Lo;0;L;;;;;N;;;;; CEF1;HANGUL SYLLABLE KEOLT;Lo;0;L;;;;;N;;;;; CEF2;HANGUL SYLLABLE KEOLP;Lo;0;L;;;;;N;;;;; CEF3;HANGUL SYLLABLE KEOLH;Lo;0;L;;;;;N;;;;; CEF4;HANGUL SYLLABLE KEOM;Lo;0;L;;;;;N;;;;; CEF5;HANGUL SYLLABLE KEOB;Lo;0;L;;;;;N;;;;; CEF6;HANGUL SYLLABLE KEOBS;Lo;0;L;;;;;N;;;;; CEF7;HANGUL SYLLABLE KEOS;Lo;0;L;;;;;N;;;;; CEF8;HANGUL SYLLABLE KEOSS;Lo;0;L;;;;;N;;;;; CEF9;HANGUL SYLLABLE KEONG;Lo;0;L;;;;;N;;;;; CEFA;HANGUL SYLLABLE KEOJ;Lo;0;L;;;;;N;;;;; CEFB;HANGUL SYLLABLE KEOC;Lo;0;L;;;;;N;;;;; CEFC;HANGUL SYLLABLE KEOK;Lo;0;L;;;;;N;;;;; CEFD;HANGUL SYLLABLE KEOT;Lo;0;L;;;;;N;;;;; CEFE;HANGUL SYLLABLE KEOP;Lo;0;L;;;;;N;;;;; CEFF;HANGUL SYLLABLE KEOH;Lo;0;L;;;;;N;;;;; CF00;HANGUL SYLLABLE KE;Lo;0;L;;;;;N;;;;; CF01;HANGUL SYLLABLE KEG;Lo;0;L;;;;;N;;;;; CF02;HANGUL SYLLABLE KEGG;Lo;0;L;;;;;N;;;;; CF03;HANGUL SYLLABLE KEGS;Lo;0;L;;;;;N;;;;; CF04;HANGUL SYLLABLE KEN;Lo;0;L;;;;;N;;;;; CF05;HANGUL SYLLABLE KENI;Lo;0;L;;;;;N;;;;; CF06;HANGUL SYLLABLE KENH;Lo;0;L;;;;;N;;;;; CF07;HANGUL SYLLABLE KED;Lo;0;L;;;;;N;;;;; CF08;HANGUL SYLLABLE KEL;Lo;0;L;;;;;N;;;;; CF09;HANGUL SYLLABLE KELG;Lo;0;L;;;;;N;;;;; CF0A;HANGUL SYLLABLE KELM;Lo;0;L;;;;;N;;;;; CF0B;HANGUL SYLLABLE KELB;Lo;0;L;;;;;N;;;;; CF0C;HANGUL SYLLABLE KELS;Lo;0;L;;;;;N;;;;; CF0D;HANGUL SYLLABLE KELT;Lo;0;L;;;;;N;;;;; CF0E;HANGUL SYLLABLE KELP;Lo;0;L;;;;;N;;;;; CF0F;HANGUL SYLLABLE KELH;Lo;0;L;;;;;N;;;;; CF10;HANGUL SYLLABLE KEM;Lo;0;L;;;;;N;;;;; CF11;HANGUL SYLLABLE KEB;Lo;0;L;;;;;N;;;;; CF12;HANGUL SYLLABLE KEBS;Lo;0;L;;;;;N;;;;; CF13;HANGUL SYLLABLE KES;Lo;0;L;;;;;N;;;;; CF14;HANGUL SYLLABLE KESS;Lo;0;L;;;;;N;;;;; CF15;HANGUL SYLLABLE KENG;Lo;0;L;;;;;N;;;;; CF16;HANGUL SYLLABLE KEJ;Lo;0;L;;;;;N;;;;; CF17;HANGUL SYLLABLE KEC;Lo;0;L;;;;;N;;;;; CF18;HANGUL SYLLABLE KEK;Lo;0;L;;;;;N;;;;; CF19;HANGUL SYLLABLE KET;Lo;0;L;;;;;N;;;;; CF1A;HANGUL SYLLABLE KEP;Lo;0;L;;;;;N;;;;; CF1B;HANGUL SYLLABLE KEH;Lo;0;L;;;;;N;;;;; CF1C;HANGUL SYLLABLE KYEO;Lo;0;L;;;;;N;;;;; CF1D;HANGUL SYLLABLE KYEOG;Lo;0;L;;;;;N;;;;; CF1E;HANGUL SYLLABLE KYEOGG;Lo;0;L;;;;;N;;;;; CF1F;HANGUL SYLLABLE KYEOGS;Lo;0;L;;;;;N;;;;; CF20;HANGUL SYLLABLE KYEON;Lo;0;L;;;;;N;;;;; CF21;HANGUL SYLLABLE KYEONI;Lo;0;L;;;;;N;;;;; CF22;HANGUL SYLLABLE KYEONH;Lo;0;L;;;;;N;;;;; CF23;HANGUL SYLLABLE KYEOD;Lo;0;L;;;;;N;;;;; CF24;HANGUL SYLLABLE KYEOL;Lo;0;L;;;;;N;;;;; CF25;HANGUL SYLLABLE KYEOLG;Lo;0;L;;;;;N;;;;; CF26;HANGUL SYLLABLE KYEOLM;Lo;0;L;;;;;N;;;;; CF27;HANGUL SYLLABLE KYEOLB;Lo;0;L;;;;;N;;;;; CF28;HANGUL SYLLABLE KYEOLS;Lo;0;L;;;;;N;;;;; CF29;HANGUL SYLLABLE KYEOLT;Lo;0;L;;;;;N;;;;; CF2A;HANGUL SYLLABLE KYEOLP;Lo;0;L;;;;;N;;;;; CF2B;HANGUL SYLLABLE KYEOLH;Lo;0;L;;;;;N;;;;; CF2C;HANGUL SYLLABLE KYEOM;Lo;0;L;;;;;N;;;;; CF2D;HANGUL SYLLABLE KYEOB;Lo;0;L;;;;;N;;;;; CF2E;HANGUL SYLLABLE KYEOBS;Lo;0;L;;;;;N;;;;; CF2F;HANGUL SYLLABLE KYEOS;Lo;0;L;;;;;N;;;;; CF30;HANGUL SYLLABLE KYEOSS;Lo;0;L;;;;;N;;;;; CF31;HANGUL SYLLABLE KYEONG;Lo;0;L;;;;;N;;;;; CF32;HANGUL SYLLABLE KYEOJ;Lo;0;L;;;;;N;;;;; CF33;HANGUL SYLLABLE KYEOC;Lo;0;L;;;;;N;;;;; CF34;HANGUL SYLLABLE KYEOK;Lo;0;L;;;;;N;;;;; CF35;HANGUL SYLLABLE KYEOT;Lo;0;L;;;;;N;;;;; CF36;HANGUL SYLLABLE KYEOP;Lo;0;L;;;;;N;;;;; CF37;HANGUL SYLLABLE KYEOH;Lo;0;L;;;;;N;;;;; CF38;HANGUL SYLLABLE KYE;Lo;0;L;;;;;N;;;;; CF39;HANGUL SYLLABLE KYEG;Lo;0;L;;;;;N;;;;; CF3A;HANGUL SYLLABLE KYEGG;Lo;0;L;;;;;N;;;;; CF3B;HANGUL SYLLABLE KYEGS;Lo;0;L;;;;;N;;;;; CF3C;HANGUL SYLLABLE KYEN;Lo;0;L;;;;;N;;;;; CF3D;HANGUL SYLLABLE KYENI;Lo;0;L;;;;;N;;;;; CF3E;HANGUL SYLLABLE KYENH;Lo;0;L;;;;;N;;;;; CF3F;HANGUL SYLLABLE KYED;Lo;0;L;;;;;N;;;;; CF40;HANGUL SYLLABLE KYEL;Lo;0;L;;;;;N;;;;; CF41;HANGUL SYLLABLE KYELG;Lo;0;L;;;;;N;;;;; CF42;HANGUL SYLLABLE KYELM;Lo;0;L;;;;;N;;;;; CF43;HANGUL SYLLABLE KYELB;Lo;0;L;;;;;N;;;;; CF44;HANGUL SYLLABLE KYELS;Lo;0;L;;;;;N;;;;; CF45;HANGUL SYLLABLE KYELT;Lo;0;L;;;;;N;;;;; CF46;HANGUL SYLLABLE KYELP;Lo;0;L;;;;;N;;;;; CF47;HANGUL SYLLABLE KYELH;Lo;0;L;;;;;N;;;;; CF48;HANGUL SYLLABLE KYEM;Lo;0;L;;;;;N;;;;; CF49;HANGUL SYLLABLE KYEB;Lo;0;L;;;;;N;;;;; CF4A;HANGUL SYLLABLE KYEBS;Lo;0;L;;;;;N;;;;; CF4B;HANGUL SYLLABLE KYES;Lo;0;L;;;;;N;;;;; CF4C;HANGUL SYLLABLE KYESS;Lo;0;L;;;;;N;;;;; CF4D;HANGUL SYLLABLE KYENG;Lo;0;L;;;;;N;;;;; CF4E;HANGUL SYLLABLE KYEJ;Lo;0;L;;;;;N;;;;; CF4F;HANGUL SYLLABLE KYEC;Lo;0;L;;;;;N;;;;; CF50;HANGUL SYLLABLE KYEK;Lo;0;L;;;;;N;;;;; CF51;HANGUL SYLLABLE KYET;Lo;0;L;;;;;N;;;;; CF52;HANGUL SYLLABLE KYEP;Lo;0;L;;;;;N;;;;; CF53;HANGUL SYLLABLE KYEH;Lo;0;L;;;;;N;;;;; CF54;HANGUL SYLLABLE KO;Lo;0;L;;;;;N;;;;; CF55;HANGUL SYLLABLE KOG;Lo;0;L;;;;;N;;;;; CF56;HANGUL SYLLABLE KOGG;Lo;0;L;;;;;N;;;;; CF57;HANGUL SYLLABLE KOGS;Lo;0;L;;;;;N;;;;; CF58;HANGUL SYLLABLE KON;Lo;0;L;;;;;N;;;;; CF59;HANGUL SYLLABLE KONI;Lo;0;L;;;;;N;;;;; CF5A;HANGUL SYLLABLE KONH;Lo;0;L;;;;;N;;;;; CF5B;HANGUL SYLLABLE KOD;Lo;0;L;;;;;N;;;;; CF5C;HANGUL SYLLABLE KOL;Lo;0;L;;;;;N;;;;; CF5D;HANGUL SYLLABLE KOLG;Lo;0;L;;;;;N;;;;; CF5E;HANGUL SYLLABLE KOLM;Lo;0;L;;;;;N;;;;; CF5F;HANGUL SYLLABLE KOLB;Lo;0;L;;;;;N;;;;; CF60;HANGUL SYLLABLE KOLS;Lo;0;L;;;;;N;;;;; CF61;HANGUL SYLLABLE KOLT;Lo;0;L;;;;;N;;;;; CF62;HANGUL SYLLABLE KOLP;Lo;0;L;;;;;N;;;;; CF63;HANGUL SYLLABLE KOLH;Lo;0;L;;;;;N;;;;; CF64;HANGUL SYLLABLE KOM;Lo;0;L;;;;;N;;;;; CF65;HANGUL SYLLABLE KOB;Lo;0;L;;;;;N;;;;; CF66;HANGUL SYLLABLE KOBS;Lo;0;L;;;;;N;;;;; CF67;HANGUL SYLLABLE KOS;Lo;0;L;;;;;N;;;;; CF68;HANGUL SYLLABLE KOSS;Lo;0;L;;;;;N;;;;; CF69;HANGUL SYLLABLE KONG;Lo;0;L;;;;;N;;;;; CF6A;HANGUL SYLLABLE KOJ;Lo;0;L;;;;;N;;;;; CF6B;HANGUL SYLLABLE KOC;Lo;0;L;;;;;N;;;;; CF6C;HANGUL SYLLABLE KOK;Lo;0;L;;;;;N;;;;; CF6D;HANGUL SYLLABLE KOT;Lo;0;L;;;;;N;;;;; CF6E;HANGUL SYLLABLE KOP;Lo;0;L;;;;;N;;;;; CF6F;HANGUL SYLLABLE KOH;Lo;0;L;;;;;N;;;;; CF70;HANGUL SYLLABLE KWA;Lo;0;L;;;;;N;;;;; CF71;HANGUL SYLLABLE KWAG;Lo;0;L;;;;;N;;;;; CF72;HANGUL SYLLABLE KWAGG;Lo;0;L;;;;;N;;;;; CF73;HANGUL SYLLABLE KWAGS;Lo;0;L;;;;;N;;;;; CF74;HANGUL SYLLABLE KWAN;Lo;0;L;;;;;N;;;;; CF75;HANGUL SYLLABLE KWANI;Lo;0;L;;;;;N;;;;; CF76;HANGUL SYLLABLE KWANH;Lo;0;L;;;;;N;;;;; CF77;HANGUL SYLLABLE KWAD;Lo;0;L;;;;;N;;;;; CF78;HANGUL SYLLABLE KWAL;Lo;0;L;;;;;N;;;;; CF79;HANGUL SYLLABLE KWALG;Lo;0;L;;;;;N;;;;; CF7A;HANGUL SYLLABLE KWALM;Lo;0;L;;;;;N;;;;; CF7B;HANGUL SYLLABLE KWALB;Lo;0;L;;;;;N;;;;; CF7C;HANGUL SYLLABLE KWALS;Lo;0;L;;;;;N;;;;; CF7D;HANGUL SYLLABLE KWALT;Lo;0;L;;;;;N;;;;; CF7E;HANGUL SYLLABLE KWALP;Lo;0;L;;;;;N;;;;; CF7F;HANGUL SYLLABLE KWALH;Lo;0;L;;;;;N;;;;; CF80;HANGUL SYLLABLE KWAM;Lo;0;L;;;;;N;;;;; CF81;HANGUL SYLLABLE KWAB;Lo;0;L;;;;;N;;;;; CF82;HANGUL SYLLABLE KWABS;Lo;0;L;;;;;N;;;;; CF83;HANGUL SYLLABLE KWAS;Lo;0;L;;;;;N;;;;; CF84;HANGUL SYLLABLE KWASS;Lo;0;L;;;;;N;;;;; CF85;HANGUL SYLLABLE KWANG;Lo;0;L;;;;;N;;;;; CF86;HANGUL SYLLABLE KWAJ;Lo;0;L;;;;;N;;;;; CF87;HANGUL SYLLABLE KWAC;Lo;0;L;;;;;N;;;;; CF88;HANGUL SYLLABLE KWAK;Lo;0;L;;;;;N;;;;; CF89;HANGUL SYLLABLE KWAT;Lo;0;L;;;;;N;;;;; CF8A;HANGUL SYLLABLE KWAP;Lo;0;L;;;;;N;;;;; CF8B;HANGUL SYLLABLE KWAH;Lo;0;L;;;;;N;;;;; CF8C;HANGUL SYLLABLE KWAE;Lo;0;L;;;;;N;;;;; CF8D;HANGUL SYLLABLE KWAEG;Lo;0;L;;;;;N;;;;; CF8E;HANGUL SYLLABLE KWAEGG;Lo;0;L;;;;;N;;;;; CF8F;HANGUL SYLLABLE KWAEGS;Lo;0;L;;;;;N;;;;; CF90;HANGUL SYLLABLE KWAEN;Lo;0;L;;;;;N;;;;; CF91;HANGUL SYLLABLE KWAENI;Lo;0;L;;;;;N;;;;; CF92;HANGUL SYLLABLE KWAENH;Lo;0;L;;;;;N;;;;; CF93;HANGUL SYLLABLE KWAED;Lo;0;L;;;;;N;;;;; CF94;HANGUL SYLLABLE KWAEL;Lo;0;L;;;;;N;;;;; CF95;HANGUL SYLLABLE KWAELG;Lo;0;L;;;;;N;;;;; CF96;HANGUL SYLLABLE KWAELM;Lo;0;L;;;;;N;;;;; CF97;HANGUL SYLLABLE KWAELB;Lo;0;L;;;;;N;;;;; CF98;HANGUL SYLLABLE KWAELS;Lo;0;L;;;;;N;;;;; CF99;HANGUL SYLLABLE KWAELT;Lo;0;L;;;;;N;;;;; CF9A;HANGUL SYLLABLE KWAELP;Lo;0;L;;;;;N;;;;; CF9B;HANGUL SYLLABLE KWAELH;Lo;0;L;;;;;N;;;;; CF9C;HANGUL SYLLABLE KWAEM;Lo;0;L;;;;;N;;;;; CF9D;HANGUL SYLLABLE KWAEB;Lo;0;L;;;;;N;;;;; CF9E;HANGUL SYLLABLE KWAEBS;Lo;0;L;;;;;N;;;;; CF9F;HANGUL SYLLABLE KWAES;Lo;0;L;;;;;N;;;;; CFA0;HANGUL SYLLABLE KWAESS;Lo;0;L;;;;;N;;;;; CFA1;HANGUL SYLLABLE KWAENG;Lo;0;L;;;;;N;;;;; CFA2;HANGUL SYLLABLE KWAEJ;Lo;0;L;;;;;N;;;;; CFA3;HANGUL SYLLABLE KWAEC;Lo;0;L;;;;;N;;;;; CFA4;HANGUL SYLLABLE KWAEK;Lo;0;L;;;;;N;;;;; CFA5;HANGUL SYLLABLE KWAET;Lo;0;L;;;;;N;;;;; CFA6;HANGUL SYLLABLE KWAEP;Lo;0;L;;;;;N;;;;; CFA7;HANGUL SYLLABLE KWAEH;Lo;0;L;;;;;N;;;;; CFA8;HANGUL SYLLABLE KOE;Lo;0;L;;;;;N;;;;; CFA9;HANGUL SYLLABLE KOEG;Lo;0;L;;;;;N;;;;; CFAA;HANGUL SYLLABLE KOEGG;Lo;0;L;;;;;N;;;;; CFAB;HANGUL SYLLABLE KOEGS;Lo;0;L;;;;;N;;;;; CFAC;HANGUL SYLLABLE KOEN;Lo;0;L;;;;;N;;;;; CFAD;HANGUL SYLLABLE KOENI;Lo;0;L;;;;;N;;;;; CFAE;HANGUL SYLLABLE KOENH;Lo;0;L;;;;;N;;;;; CFAF;HANGUL SYLLABLE KOED;Lo;0;L;;;;;N;;;;; CFB0;HANGUL SYLLABLE KOEL;Lo;0;L;;;;;N;;;;; CFB1;HANGUL SYLLABLE KOELG;Lo;0;L;;;;;N;;;;; CFB2;HANGUL SYLLABLE KOELM;Lo;0;L;;;;;N;;;;; CFB3;HANGUL SYLLABLE KOELB;Lo;0;L;;;;;N;;;;; CFB4;HANGUL SYLLABLE KOELS;Lo;0;L;;;;;N;;;;; CFB5;HANGUL SYLLABLE KOELT;Lo;0;L;;;;;N;;;;; CFB6;HANGUL SYLLABLE KOELP;Lo;0;L;;;;;N;;;;; CFB7;HANGUL SYLLABLE KOELH;Lo;0;L;;;;;N;;;;; CFB8;HANGUL SYLLABLE KOEM;Lo;0;L;;;;;N;;;;; CFB9;HANGUL SYLLABLE KOEB;Lo;0;L;;;;;N;;;;; CFBA;HANGUL SYLLABLE KOEBS;Lo;0;L;;;;;N;;;;; CFBB;HANGUL SYLLABLE KOES;Lo;0;L;;;;;N;;;;; CFBC;HANGUL SYLLABLE KOESS;Lo;0;L;;;;;N;;;;; CFBD;HANGUL SYLLABLE KOENG;Lo;0;L;;;;;N;;;;; CFBE;HANGUL SYLLABLE KOEJ;Lo;0;L;;;;;N;;;;; CFBF;HANGUL SYLLABLE KOEC;Lo;0;L;;;;;N;;;;; CFC0;HANGUL SYLLABLE KOEK;Lo;0;L;;;;;N;;;;; CFC1;HANGUL SYLLABLE KOET;Lo;0;L;;;;;N;;;;; CFC2;HANGUL SYLLABLE KOEP;Lo;0;L;;;;;N;;;;; CFC3;HANGUL SYLLABLE KOEH;Lo;0;L;;;;;N;;;;; CFC4;HANGUL SYLLABLE KYO;Lo;0;L;;;;;N;;;;; CFC5;HANGUL SYLLABLE KYOG;Lo;0;L;;;;;N;;;;; CFC6;HANGUL SYLLABLE KYOGG;Lo;0;L;;;;;N;;;;; CFC7;HANGUL SYLLABLE KYOGS;Lo;0;L;;;;;N;;;;; CFC8;HANGUL SYLLABLE KYON;Lo;0;L;;;;;N;;;;; CFC9;HANGUL SYLLABLE KYONI;Lo;0;L;;;;;N;;;;; CFCA;HANGUL SYLLABLE KYONH;Lo;0;L;;;;;N;;;;; CFCB;HANGUL SYLLABLE KYOD;Lo;0;L;;;;;N;;;;; CFCC;HANGUL SYLLABLE KYOL;Lo;0;L;;;;;N;;;;; CFCD;HANGUL SYLLABLE KYOLG;Lo;0;L;;;;;N;;;;; CFCE;HANGUL SYLLABLE KYOLM;Lo;0;L;;;;;N;;;;; CFCF;HANGUL SYLLABLE KYOLB;Lo;0;L;;;;;N;;;;; CFD0;HANGUL SYLLABLE KYOLS;Lo;0;L;;;;;N;;;;; CFD1;HANGUL SYLLABLE KYOLT;Lo;0;L;;;;;N;;;;; CFD2;HANGUL SYLLABLE KYOLP;Lo;0;L;;;;;N;;;;; CFD3;HANGUL SYLLABLE KYOLH;Lo;0;L;;;;;N;;;;; CFD4;HANGUL SYLLABLE KYOM;Lo;0;L;;;;;N;;;;; CFD5;HANGUL SYLLABLE KYOB;Lo;0;L;;;;;N;;;;; CFD6;HANGUL SYLLABLE KYOBS;Lo;0;L;;;;;N;;;;; CFD7;HANGUL SYLLABLE KYOS;Lo;0;L;;;;;N;;;;; CFD8;HANGUL SYLLABLE KYOSS;Lo;0;L;;;;;N;;;;; CFD9;HANGUL SYLLABLE KYONG;Lo;0;L;;;;;N;;;;; CFDA;HANGUL SYLLABLE KYOJ;Lo;0;L;;;;;N;;;;; CFDB;HANGUL SYLLABLE KYOC;Lo;0;L;;;;;N;;;;; CFDC;HANGUL SYLLABLE KYOK;Lo;0;L;;;;;N;;;;; CFDD;HANGUL SYLLABLE KYOT;Lo;0;L;;;;;N;;;;; CFDE;HANGUL SYLLABLE KYOP;Lo;0;L;;;;;N;;;;; CFDF;HANGUL SYLLABLE KYOH;Lo;0;L;;;;;N;;;;; CFE0;HANGUL SYLLABLE KU;Lo;0;L;;;;;N;;;;; CFE1;HANGUL SYLLABLE KUG;Lo;0;L;;;;;N;;;;; CFE2;HANGUL SYLLABLE KUGG;Lo;0;L;;;;;N;;;;; CFE3;HANGUL SYLLABLE KUGS;Lo;0;L;;;;;N;;;;; CFE4;HANGUL SYLLABLE KUN;Lo;0;L;;;;;N;;;;; CFE5;HANGUL SYLLABLE KUNI;Lo;0;L;;;;;N;;;;; CFE6;HANGUL SYLLABLE KUNH;Lo;0;L;;;;;N;;;;; CFE7;HANGUL SYLLABLE KUD;Lo;0;L;;;;;N;;;;; CFE8;HANGUL SYLLABLE KUL;Lo;0;L;;;;;N;;;;; CFE9;HANGUL SYLLABLE KULG;Lo;0;L;;;;;N;;;;; CFEA;HANGUL SYLLABLE KULM;Lo;0;L;;;;;N;;;;; CFEB;HANGUL SYLLABLE KULB;Lo;0;L;;;;;N;;;;; CFEC;HANGUL SYLLABLE KULS;Lo;0;L;;;;;N;;;;; CFED;HANGUL SYLLABLE KULT;Lo;0;L;;;;;N;;;;; CFEE;HANGUL SYLLABLE KULP;Lo;0;L;;;;;N;;;;; CFEF;HANGUL SYLLABLE KULH;Lo;0;L;;;;;N;;;;; CFF0;HANGUL SYLLABLE KUM;Lo;0;L;;;;;N;;;;; CFF1;HANGUL SYLLABLE KUB;Lo;0;L;;;;;N;;;;; CFF2;HANGUL SYLLABLE KUBS;Lo;0;L;;;;;N;;;;; CFF3;HANGUL SYLLABLE KUS;Lo;0;L;;;;;N;;;;; CFF4;HANGUL SYLLABLE KUSS;Lo;0;L;;;;;N;;;;; CFF5;HANGUL SYLLABLE KUNG;Lo;0;L;;;;;N;;;;; CFF6;HANGUL SYLLABLE KUJ;Lo;0;L;;;;;N;;;;; CFF7;HANGUL SYLLABLE KUC;Lo;0;L;;;;;N;;;;; CFF8;HANGUL SYLLABLE KUK;Lo;0;L;;;;;N;;;;; CFF9;HANGUL SYLLABLE KUT;Lo;0;L;;;;;N;;;;; CFFA;HANGUL SYLLABLE KUP;Lo;0;L;;;;;N;;;;; CFFB;HANGUL SYLLABLE KUH;Lo;0;L;;;;;N;;;;; CFFC;HANGUL SYLLABLE KWEO;Lo;0;L;;;;;N;;;;; CFFD;HANGUL SYLLABLE KWEOG;Lo;0;L;;;;;N;;;;; CFFE;HANGUL SYLLABLE KWEOGG;Lo;0;L;;;;;N;;;;; CFFF;HANGUL SYLLABLE KWEOGS;Lo;0;L;;;;;N;;;;; D000;HANGUL SYLLABLE KWEON;Lo;0;L;;;;;N;;;;; D001;HANGUL SYLLABLE KWEONI;Lo;0;L;;;;;N;;;;; D002;HANGUL SYLLABLE KWEONH;Lo;0;L;;;;;N;;;;; D003;HANGUL SYLLABLE KWEOD;Lo;0;L;;;;;N;;;;; D004;HANGUL SYLLABLE KWEOL;Lo;0;L;;;;;N;;;;; D005;HANGUL SYLLABLE KWEOLG;Lo;0;L;;;;;N;;;;; D006;HANGUL SYLLABLE KWEOLM;Lo;0;L;;;;;N;;;;; D007;HANGUL SYLLABLE KWEOLB;Lo;0;L;;;;;N;;;;; D008;HANGUL SYLLABLE KWEOLS;Lo;0;L;;;;;N;;;;; D009;HANGUL SYLLABLE KWEOLT;Lo;0;L;;;;;N;;;;; D00A;HANGUL SYLLABLE KWEOLP;Lo;0;L;;;;;N;;;;; D00B;HANGUL SYLLABLE KWEOLH;Lo;0;L;;;;;N;;;;; D00C;HANGUL SYLLABLE KWEOM;Lo;0;L;;;;;N;;;;; D00D;HANGUL SYLLABLE KWEOB;Lo;0;L;;;;;N;;;;; D00E;HANGUL SYLLABLE KWEOBS;Lo;0;L;;;;;N;;;;; D00F;HANGUL SYLLABLE KWEOS;Lo;0;L;;;;;N;;;;; D010;HANGUL SYLLABLE KWEOSS;Lo;0;L;;;;;N;;;;; D011;HANGUL SYLLABLE KWEONG;Lo;0;L;;;;;N;;;;; D012;HANGUL SYLLABLE KWEOJ;Lo;0;L;;;;;N;;;;; D013;HANGUL SYLLABLE KWEOC;Lo;0;L;;;;;N;;;;; D014;HANGUL SYLLABLE KWEOK;Lo;0;L;;;;;N;;;;; D015;HANGUL SYLLABLE KWEOT;Lo;0;L;;;;;N;;;;; D016;HANGUL SYLLABLE KWEOP;Lo;0;L;;;;;N;;;;; D017;HANGUL SYLLABLE KWEOH;Lo;0;L;;;;;N;;;;; D018;HANGUL SYLLABLE KWE;Lo;0;L;;;;;N;;;;; D019;HANGUL SYLLABLE KWEG;Lo;0;L;;;;;N;;;;; D01A;HANGUL SYLLABLE KWEGG;Lo;0;L;;;;;N;;;;; D01B;HANGUL SYLLABLE KWEGS;Lo;0;L;;;;;N;;;;; D01C;HANGUL SYLLABLE KWEN;Lo;0;L;;;;;N;;;;; D01D;HANGUL SYLLABLE KWENI;Lo;0;L;;;;;N;;;;; D01E;HANGUL SYLLABLE KWENH;Lo;0;L;;;;;N;;;;; D01F;HANGUL SYLLABLE KWED;Lo;0;L;;;;;N;;;;; D020;HANGUL SYLLABLE KWEL;Lo;0;L;;;;;N;;;;; D021;HANGUL SYLLABLE KWELG;Lo;0;L;;;;;N;;;;; D022;HANGUL SYLLABLE KWELM;Lo;0;L;;;;;N;;;;; D023;HANGUL SYLLABLE KWELB;Lo;0;L;;;;;N;;;;; D024;HANGUL SYLLABLE KWELS;Lo;0;L;;;;;N;;;;; D025;HANGUL SYLLABLE KWELT;Lo;0;L;;;;;N;;;;; D026;HANGUL SYLLABLE KWELP;Lo;0;L;;;;;N;;;;; D027;HANGUL SYLLABLE KWELH;Lo;0;L;;;;;N;;;;; D028;HANGUL SYLLABLE KWEM;Lo;0;L;;;;;N;;;;; D029;HANGUL SYLLABLE KWEB;Lo;0;L;;;;;N;;;;; D02A;HANGUL SYLLABLE KWEBS;Lo;0;L;;;;;N;;;;; D02B;HANGUL SYLLABLE KWES;Lo;0;L;;;;;N;;;;; D02C;HANGUL SYLLABLE KWESS;Lo;0;L;;;;;N;;;;; D02D;HANGUL SYLLABLE KWENG;Lo;0;L;;;;;N;;;;; D02E;HANGUL SYLLABLE KWEJ;Lo;0;L;;;;;N;;;;; D02F;HANGUL SYLLABLE KWEC;Lo;0;L;;;;;N;;;;; D030;HANGUL SYLLABLE KWEK;Lo;0;L;;;;;N;;;;; D031;HANGUL SYLLABLE KWET;Lo;0;L;;;;;N;;;;; D032;HANGUL SYLLABLE KWEP;Lo;0;L;;;;;N;;;;; D033;HANGUL SYLLABLE KWEH;Lo;0;L;;;;;N;;;;; D034;HANGUL SYLLABLE KWI;Lo;0;L;;;;;N;;;;; D035;HANGUL SYLLABLE KWIG;Lo;0;L;;;;;N;;;;; D036;HANGUL SYLLABLE KWIGG;Lo;0;L;;;;;N;;;;; D037;HANGUL SYLLABLE KWIGS;Lo;0;L;;;;;N;;;;; D038;HANGUL SYLLABLE KWIN;Lo;0;L;;;;;N;;;;; D039;HANGUL SYLLABLE KWINI;Lo;0;L;;;;;N;;;;; D03A;HANGUL SYLLABLE KWINH;Lo;0;L;;;;;N;;;;; D03B;HANGUL SYLLABLE KWID;Lo;0;L;;;;;N;;;;; D03C;HANGUL SYLLABLE KWIL;Lo;0;L;;;;;N;;;;; D03D;HANGUL SYLLABLE KWILG;Lo;0;L;;;;;N;;;;; D03E;HANGUL SYLLABLE KWILM;Lo;0;L;;;;;N;;;;; D03F;HANGUL SYLLABLE KWILB;Lo;0;L;;;;;N;;;;; D040;HANGUL SYLLABLE KWILS;Lo;0;L;;;;;N;;;;; D041;HANGUL SYLLABLE KWILT;Lo;0;L;;;;;N;;;;; D042;HANGUL SYLLABLE KWILP;Lo;0;L;;;;;N;;;;; D043;HANGUL SYLLABLE KWILH;Lo;0;L;;;;;N;;;;; D044;HANGUL SYLLABLE KWIM;Lo;0;L;;;;;N;;;;; D045;HANGUL SYLLABLE KWIB;Lo;0;L;;;;;N;;;;; D046;HANGUL SYLLABLE KWIBS;Lo;0;L;;;;;N;;;;; D047;HANGUL SYLLABLE KWIS;Lo;0;L;;;;;N;;;;; D048;HANGUL SYLLABLE KWISS;Lo;0;L;;;;;N;;;;; D049;HANGUL SYLLABLE KWING;Lo;0;L;;;;;N;;;;; D04A;HANGUL SYLLABLE KWIJ;Lo;0;L;;;;;N;;;;; D04B;HANGUL SYLLABLE KWIC;Lo;0;L;;;;;N;;;;; D04C;HANGUL SYLLABLE KWIK;Lo;0;L;;;;;N;;;;; D04D;HANGUL SYLLABLE KWIT;Lo;0;L;;;;;N;;;;; D04E;HANGUL SYLLABLE KWIP;Lo;0;L;;;;;N;;;;; D04F;HANGUL SYLLABLE KWIH;Lo;0;L;;;;;N;;;;; D050;HANGUL SYLLABLE KYU;Lo;0;L;;;;;N;;;;; D051;HANGUL SYLLABLE KYUG;Lo;0;L;;;;;N;;;;; D052;HANGUL SYLLABLE KYUGG;Lo;0;L;;;;;N;;;;; D053;HANGUL SYLLABLE KYUGS;Lo;0;L;;;;;N;;;;; D054;HANGUL SYLLABLE KYUN;Lo;0;L;;;;;N;;;;; D055;HANGUL SYLLABLE KYUNI;Lo;0;L;;;;;N;;;;; D056;HANGUL SYLLABLE KYUNH;Lo;0;L;;;;;N;;;;; D057;HANGUL SYLLABLE KYUD;Lo;0;L;;;;;N;;;;; D058;HANGUL SYLLABLE KYUL;Lo;0;L;;;;;N;;;;; D059;HANGUL SYLLABLE KYULG;Lo;0;L;;;;;N;;;;; D05A;HANGUL SYLLABLE KYULM;Lo;0;L;;;;;N;;;;; D05B;HANGUL SYLLABLE KYULB;Lo;0;L;;;;;N;;;;; D05C;HANGUL SYLLABLE KYULS;Lo;0;L;;;;;N;;;;; D05D;HANGUL SYLLABLE KYULT;Lo;0;L;;;;;N;;;;; D05E;HANGUL SYLLABLE KYULP;Lo;0;L;;;;;N;;;;; D05F;HANGUL SYLLABLE KYULH;Lo;0;L;;;;;N;;;;; D060;HANGUL SYLLABLE KYUM;Lo;0;L;;;;;N;;;;; D061;HANGUL SYLLABLE KYUB;Lo;0;L;;;;;N;;;;; D062;HANGUL SYLLABLE KYUBS;Lo;0;L;;;;;N;;;;; D063;HANGUL SYLLABLE KYUS;Lo;0;L;;;;;N;;;;; D064;HANGUL SYLLABLE KYUSS;Lo;0;L;;;;;N;;;;; D065;HANGUL SYLLABLE KYUNG;Lo;0;L;;;;;N;;;;; D066;HANGUL SYLLABLE KYUJ;Lo;0;L;;;;;N;;;;; D067;HANGUL SYLLABLE KYUC;Lo;0;L;;;;;N;;;;; D068;HANGUL SYLLABLE KYUK;Lo;0;L;;;;;N;;;;; D069;HANGUL SYLLABLE KYUT;Lo;0;L;;;;;N;;;;; D06A;HANGUL SYLLABLE KYUP;Lo;0;L;;;;;N;;;;; D06B;HANGUL SYLLABLE KYUH;Lo;0;L;;;;;N;;;;; D06C;HANGUL SYLLABLE KEU;Lo;0;L;;;;;N;;;;; D06D;HANGUL SYLLABLE KEUG;Lo;0;L;;;;;N;;;;; D06E;HANGUL SYLLABLE KEUGG;Lo;0;L;;;;;N;;;;; D06F;HANGUL SYLLABLE KEUGS;Lo;0;L;;;;;N;;;;; D070;HANGUL SYLLABLE KEUN;Lo;0;L;;;;;N;;;;; D071;HANGUL SYLLABLE KEUNI;Lo;0;L;;;;;N;;;;; D072;HANGUL SYLLABLE KEUNH;Lo;0;L;;;;;N;;;;; D073;HANGUL SYLLABLE KEUD;Lo;0;L;;;;;N;;;;; D074;HANGUL SYLLABLE KEUL;Lo;0;L;;;;;N;;;;; D075;HANGUL SYLLABLE KEULG;Lo;0;L;;;;;N;;;;; D076;HANGUL SYLLABLE KEULM;Lo;0;L;;;;;N;;;;; D077;HANGUL SYLLABLE KEULB;Lo;0;L;;;;;N;;;;; D078;HANGUL SYLLABLE KEULS;Lo;0;L;;;;;N;;;;; D079;HANGUL SYLLABLE KEULT;Lo;0;L;;;;;N;;;;; D07A;HANGUL SYLLABLE KEULP;Lo;0;L;;;;;N;;;;; D07B;HANGUL SYLLABLE KEULH;Lo;0;L;;;;;N;;;;; D07C;HANGUL SYLLABLE KEUM;Lo;0;L;;;;;N;;;;; D07D;HANGUL SYLLABLE KEUB;Lo;0;L;;;;;N;;;;; D07E;HANGUL SYLLABLE KEUBS;Lo;0;L;;;;;N;;;;; D07F;HANGUL SYLLABLE KEUS;Lo;0;L;;;;;N;;;;; D080;HANGUL SYLLABLE KEUSS;Lo;0;L;;;;;N;;;;; D081;HANGUL SYLLABLE KEUNG;Lo;0;L;;;;;N;;;;; D082;HANGUL SYLLABLE KEUJ;Lo;0;L;;;;;N;;;;; D083;HANGUL SYLLABLE KEUC;Lo;0;L;;;;;N;;;;; D084;HANGUL SYLLABLE KEUK;Lo;0;L;;;;;N;;;;; D085;HANGUL SYLLABLE KEUT;Lo;0;L;;;;;N;;;;; D086;HANGUL SYLLABLE KEUP;Lo;0;L;;;;;N;;;;; D087;HANGUL SYLLABLE KEUH;Lo;0;L;;;;;N;;;;; D088;HANGUL SYLLABLE KYI;Lo;0;L;;;;;N;;;;; D089;HANGUL SYLLABLE KYIG;Lo;0;L;;;;;N;;;;; D08A;HANGUL SYLLABLE KYIGG;Lo;0;L;;;;;N;;;;; D08B;HANGUL SYLLABLE KYIGS;Lo;0;L;;;;;N;;;;; D08C;HANGUL SYLLABLE KYIN;Lo;0;L;;;;;N;;;;; D08D;HANGUL SYLLABLE KYINI;Lo;0;L;;;;;N;;;;; D08E;HANGUL SYLLABLE KYINH;Lo;0;L;;;;;N;;;;; D08F;HANGUL SYLLABLE KYID;Lo;0;L;;;;;N;;;;; D090;HANGUL SYLLABLE KYIL;Lo;0;L;;;;;N;;;;; D091;HANGUL SYLLABLE KYILG;Lo;0;L;;;;;N;;;;; D092;HANGUL SYLLABLE KYILM;Lo;0;L;;;;;N;;;;; D093;HANGUL SYLLABLE KYILB;Lo;0;L;;;;;N;;;;; D094;HANGUL SYLLABLE KYILS;Lo;0;L;;;;;N;;;;; D095;HANGUL SYLLABLE KYILT;Lo;0;L;;;;;N;;;;; D096;HANGUL SYLLABLE KYILP;Lo;0;L;;;;;N;;;;; D097;HANGUL SYLLABLE KYILH;Lo;0;L;;;;;N;;;;; D098;HANGUL SYLLABLE KYIM;Lo;0;L;;;;;N;;;;; D099;HANGUL SYLLABLE KYIB;Lo;0;L;;;;;N;;;;; D09A;HANGUL SYLLABLE KYIBS;Lo;0;L;;;;;N;;;;; D09B;HANGUL SYLLABLE KYIS;Lo;0;L;;;;;N;;;;; D09C;HANGUL SYLLABLE KYISS;Lo;0;L;;;;;N;;;;; D09D;HANGUL SYLLABLE KYING;Lo;0;L;;;;;N;;;;; D09E;HANGUL SYLLABLE KYIJ;Lo;0;L;;;;;N;;;;; D09F;HANGUL SYLLABLE KYIC;Lo;0;L;;;;;N;;;;; D0A0;HANGUL SYLLABLE KYIK;Lo;0;L;;;;;N;;;;; D0A1;HANGUL SYLLABLE KYIT;Lo;0;L;;;;;N;;;;; D0A2;HANGUL SYLLABLE KYIP;Lo;0;L;;;;;N;;;;; D0A3;HANGUL SYLLABLE KYIH;Lo;0;L;;;;;N;;;;; D0A4;HANGUL SYLLABLE KI;Lo;0;L;;;;;N;;;;; D0A5;HANGUL SYLLABLE KIG;Lo;0;L;;;;;N;;;;; D0A6;HANGUL SYLLABLE KIGG;Lo;0;L;;;;;N;;;;; D0A7;HANGUL SYLLABLE KIGS;Lo;0;L;;;;;N;;;;; D0A8;HANGUL SYLLABLE KIN;Lo;0;L;;;;;N;;;;; D0A9;HANGUL SYLLABLE KINI;Lo;0;L;;;;;N;;;;; D0AA;HANGUL SYLLABLE KINH;Lo;0;L;;;;;N;;;;; D0AB;HANGUL SYLLABLE KID;Lo;0;L;;;;;N;;;;; D0AC;HANGUL SYLLABLE KIL;Lo;0;L;;;;;N;;;;; D0AD;HANGUL SYLLABLE KILG;Lo;0;L;;;;;N;;;;; D0AE;HANGUL SYLLABLE KILM;Lo;0;L;;;;;N;;;;; D0AF;HANGUL SYLLABLE KILB;Lo;0;L;;;;;N;;;;; D0B0;HANGUL SYLLABLE KILS;Lo;0;L;;;;;N;;;;; D0B1;HANGUL SYLLABLE KILT;Lo;0;L;;;;;N;;;;; D0B2;HANGUL SYLLABLE KILP;Lo;0;L;;;;;N;;;;; D0B3;HANGUL SYLLABLE KILH;Lo;0;L;;;;;N;;;;; D0B4;HANGUL SYLLABLE KIM;Lo;0;L;;;;;N;;;;; D0B5;HANGUL SYLLABLE KIB;Lo;0;L;;;;;N;;;;; D0B6;HANGUL SYLLABLE KIBS;Lo;0;L;;;;;N;;;;; D0B7;HANGUL SYLLABLE KIS;Lo;0;L;;;;;N;;;;; D0B8;HANGUL SYLLABLE KISS;Lo;0;L;;;;;N;;;;; D0B9;HANGUL SYLLABLE KING;Lo;0;L;;;;;N;;;;; D0BA;HANGUL SYLLABLE KIJ;Lo;0;L;;;;;N;;;;; D0BB;HANGUL SYLLABLE KIC;Lo;0;L;;;;;N;;;;; D0BC;HANGUL SYLLABLE KIK;Lo;0;L;;;;;N;;;;; D0BD;HANGUL SYLLABLE KIT;Lo;0;L;;;;;N;;;;; D0BE;HANGUL SYLLABLE KIP;Lo;0;L;;;;;N;;;;; D0BF;HANGUL SYLLABLE KIH;Lo;0;L;;;;;N;;;;; D0C0;HANGUL SYLLABLE TA;Lo;0;L;;;;;N;;;;; D0C1;HANGUL SYLLABLE TAG;Lo;0;L;;;;;N;;;;; D0C2;HANGUL SYLLABLE TAGG;Lo;0;L;;;;;N;;;;; D0C3;HANGUL SYLLABLE TAGS;Lo;0;L;;;;;N;;;;; D0C4;HANGUL SYLLABLE TAN;Lo;0;L;;;;;N;;;;; D0C5;HANGUL SYLLABLE TANI;Lo;0;L;;;;;N;;;;; D0C6;HANGUL SYLLABLE TANH;Lo;0;L;;;;;N;;;;; D0C7;HANGUL SYLLABLE TAD;Lo;0;L;;;;;N;;;;; D0C8;HANGUL SYLLABLE TAL;Lo;0;L;;;;;N;;;;; D0C9;HANGUL SYLLABLE TALG;Lo;0;L;;;;;N;;;;; D0CA;HANGUL SYLLABLE TALM;Lo;0;L;;;;;N;;;;; D0CB;HANGUL SYLLABLE TALB;Lo;0;L;;;;;N;;;;; D0CC;HANGUL SYLLABLE TALS;Lo;0;L;;;;;N;;;;; D0CD;HANGUL SYLLABLE TALT;Lo;0;L;;;;;N;;;;; D0CE;HANGUL SYLLABLE TALP;Lo;0;L;;;;;N;;;;; D0CF;HANGUL SYLLABLE TALH;Lo;0;L;;;;;N;;;;; D0D0;HANGUL SYLLABLE TAM;Lo;0;L;;;;;N;;;;; D0D1;HANGUL SYLLABLE TAB;Lo;0;L;;;;;N;;;;; D0D2;HANGUL SYLLABLE TABS;Lo;0;L;;;;;N;;;;; D0D3;HANGUL SYLLABLE TAS;Lo;0;L;;;;;N;;;;; D0D4;HANGUL SYLLABLE TASS;Lo;0;L;;;;;N;;;;; D0D5;HANGUL SYLLABLE TANG;Lo;0;L;;;;;N;;;;; D0D6;HANGUL SYLLABLE TAJ;Lo;0;L;;;;;N;;;;; D0D7;HANGUL SYLLABLE TAC;Lo;0;L;;;;;N;;;;; D0D8;HANGUL SYLLABLE TAK;Lo;0;L;;;;;N;;;;; D0D9;HANGUL SYLLABLE TAT;Lo;0;L;;;;;N;;;;; D0DA;HANGUL SYLLABLE TAP;Lo;0;L;;;;;N;;;;; D0DB;HANGUL SYLLABLE TAH;Lo;0;L;;;;;N;;;;; D0DC;HANGUL SYLLABLE TAE;Lo;0;L;;;;;N;;;;; D0DD;HANGUL SYLLABLE TAEG;Lo;0;L;;;;;N;;;;; D0DE;HANGUL SYLLABLE TAEGG;Lo;0;L;;;;;N;;;;; D0DF;HANGUL SYLLABLE TAEGS;Lo;0;L;;;;;N;;;;; D0E0;HANGUL SYLLABLE TAEN;Lo;0;L;;;;;N;;;;; D0E1;HANGUL SYLLABLE TAENI;Lo;0;L;;;;;N;;;;; D0E2;HANGUL SYLLABLE TAENH;Lo;0;L;;;;;N;;;;; D0E3;HANGUL SYLLABLE TAED;Lo;0;L;;;;;N;;;;; D0E4;HANGUL SYLLABLE TAEL;Lo;0;L;;;;;N;;;;; D0E5;HANGUL SYLLABLE TAELG;Lo;0;L;;;;;N;;;;; D0E6;HANGUL SYLLABLE TAELM;Lo;0;L;;;;;N;;;;; D0E7;HANGUL SYLLABLE TAELB;Lo;0;L;;;;;N;;;;; D0E8;HANGUL SYLLABLE TAELS;Lo;0;L;;;;;N;;;;; D0E9;HANGUL SYLLABLE TAELT;Lo;0;L;;;;;N;;;;; D0EA;HANGUL SYLLABLE TAELP;Lo;0;L;;;;;N;;;;; D0EB;HANGUL SYLLABLE TAELH;Lo;0;L;;;;;N;;;;; D0EC;HANGUL SYLLABLE TAEM;Lo;0;L;;;;;N;;;;; D0ED;HANGUL SYLLABLE TAEB;Lo;0;L;;;;;N;;;;; D0EE;HANGUL SYLLABLE TAEBS;Lo;0;L;;;;;N;;;;; D0EF;HANGUL SYLLABLE TAES;Lo;0;L;;;;;N;;;;; D0F0;HANGUL SYLLABLE TAESS;Lo;0;L;;;;;N;;;;; D0F1;HANGUL SYLLABLE TAENG;Lo;0;L;;;;;N;;;;; D0F2;HANGUL SYLLABLE TAEJ;Lo;0;L;;;;;N;;;;; D0F3;HANGUL SYLLABLE TAEC;Lo;0;L;;;;;N;;;;; D0F4;HANGUL SYLLABLE TAEK;Lo;0;L;;;;;N;;;;; D0F5;HANGUL SYLLABLE TAET;Lo;0;L;;;;;N;;;;; D0F6;HANGUL SYLLABLE TAEP;Lo;0;L;;;;;N;;;;; D0F7;HANGUL SYLLABLE TAEH;Lo;0;L;;;;;N;;;;; D0F8;HANGUL SYLLABLE TYA;Lo;0;L;;;;;N;;;;; D0F9;HANGUL SYLLABLE TYAG;Lo;0;L;;;;;N;;;;; D0FA;HANGUL SYLLABLE TYAGG;Lo;0;L;;;;;N;;;;; D0FB;HANGUL SYLLABLE TYAGS;Lo;0;L;;;;;N;;;;; D0FC;HANGUL SYLLABLE TYAN;Lo;0;L;;;;;N;;;;; D0FD;HANGUL SYLLABLE TYANI;Lo;0;L;;;;;N;;;;; D0FE;HANGUL SYLLABLE TYANH;Lo;0;L;;;;;N;;;;; D0FF;HANGUL SYLLABLE TYAD;Lo;0;L;;;;;N;;;;; D100;HANGUL SYLLABLE TYAL;Lo;0;L;;;;;N;;;;; D101;HANGUL SYLLABLE TYALG;Lo;0;L;;;;;N;;;;; D102;HANGUL SYLLABLE TYALM;Lo;0;L;;;;;N;;;;; D103;HANGUL SYLLABLE TYALB;Lo;0;L;;;;;N;;;;; D104;HANGUL SYLLABLE TYALS;Lo;0;L;;;;;N;;;;; D105;HANGUL SYLLABLE TYALT;Lo;0;L;;;;;N;;;;; D106;HANGUL SYLLABLE TYALP;Lo;0;L;;;;;N;;;;; D107;HANGUL SYLLABLE TYALH;Lo;0;L;;;;;N;;;;; D108;HANGUL SYLLABLE TYAM;Lo;0;L;;;;;N;;;;; D109;HANGUL SYLLABLE TYAB;Lo;0;L;;;;;N;;;;; D10A;HANGUL SYLLABLE TYABS;Lo;0;L;;;;;N;;;;; D10B;HANGUL SYLLABLE TYAS;Lo;0;L;;;;;N;;;;; D10C;HANGUL SYLLABLE TYASS;Lo;0;L;;;;;N;;;;; D10D;HANGUL SYLLABLE TYANG;Lo;0;L;;;;;N;;;;; D10E;HANGUL SYLLABLE TYAJ;Lo;0;L;;;;;N;;;;; D10F;HANGUL SYLLABLE TYAC;Lo;0;L;;;;;N;;;;; D110;HANGUL SYLLABLE TYAK;Lo;0;L;;;;;N;;;;; D111;HANGUL SYLLABLE TYAT;Lo;0;L;;;;;N;;;;; D112;HANGUL SYLLABLE TYAP;Lo;0;L;;;;;N;;;;; D113;HANGUL SYLLABLE TYAH;Lo;0;L;;;;;N;;;;; D114;HANGUL SYLLABLE TYAE;Lo;0;L;;;;;N;;;;; D115;HANGUL SYLLABLE TYAEG;Lo;0;L;;;;;N;;;;; D116;HANGUL SYLLABLE TYAEGG;Lo;0;L;;;;;N;;;;; D117;HANGUL SYLLABLE TYAEGS;Lo;0;L;;;;;N;;;;; D118;HANGUL SYLLABLE TYAEN;Lo;0;L;;;;;N;;;;; D119;HANGUL SYLLABLE TYAENI;Lo;0;L;;;;;N;;;;; D11A;HANGUL SYLLABLE TYAENH;Lo;0;L;;;;;N;;;;; D11B;HANGUL SYLLABLE TYAED;Lo;0;L;;;;;N;;;;; D11C;HANGUL SYLLABLE TYAEL;Lo;0;L;;;;;N;;;;; D11D;HANGUL SYLLABLE TYAELG;Lo;0;L;;;;;N;;;;; D11E;HANGUL SYLLABLE TYAELM;Lo;0;L;;;;;N;;;;; D11F;HANGUL SYLLABLE TYAELB;Lo;0;L;;;;;N;;;;; D120;HANGUL SYLLABLE TYAELS;Lo;0;L;;;;;N;;;;; D121;HANGUL SYLLABLE TYAELT;Lo;0;L;;;;;N;;;;; D122;HANGUL SYLLABLE TYAELP;Lo;0;L;;;;;N;;;;; D123;HANGUL SYLLABLE TYAELH;Lo;0;L;;;;;N;;;;; D124;HANGUL SYLLABLE TYAEM;Lo;0;L;;;;;N;;;;; D125;HANGUL SYLLABLE TYAEB;Lo;0;L;;;;;N;;;;; D126;HANGUL SYLLABLE TYAEBS;Lo;0;L;;;;;N;;;;; D127;HANGUL SYLLABLE TYAES;Lo;0;L;;;;;N;;;;; D128;HANGUL SYLLABLE TYAESS;Lo;0;L;;;;;N;;;;; D129;HANGUL SYLLABLE TYAENG;Lo;0;L;;;;;N;;;;; D12A;HANGUL SYLLABLE TYAEJ;Lo;0;L;;;;;N;;;;; D12B;HANGUL SYLLABLE TYAEC;Lo;0;L;;;;;N;;;;; D12C;HANGUL SYLLABLE TYAEK;Lo;0;L;;;;;N;;;;; D12D;HANGUL SYLLABLE TYAET;Lo;0;L;;;;;N;;;;; D12E;HANGUL SYLLABLE TYAEP;Lo;0;L;;;;;N;;;;; D12F;HANGUL SYLLABLE TYAEH;Lo;0;L;;;;;N;;;;; D130;HANGUL SYLLABLE TEO;Lo;0;L;;;;;N;;;;; D131;HANGUL SYLLABLE TEOG;Lo;0;L;;;;;N;;;;; D132;HANGUL SYLLABLE TEOGG;Lo;0;L;;;;;N;;;;; D133;HANGUL SYLLABLE TEOGS;Lo;0;L;;;;;N;;;;; D134;HANGUL SYLLABLE TEON;Lo;0;L;;;;;N;;;;; D135;HANGUL SYLLABLE TEONI;Lo;0;L;;;;;N;;;;; D136;HANGUL SYLLABLE TEONH;Lo;0;L;;;;;N;;;;; D137;HANGUL SYLLABLE TEOD;Lo;0;L;;;;;N;;;;; D138;HANGUL SYLLABLE TEOL;Lo;0;L;;;;;N;;;;; D139;HANGUL SYLLABLE TEOLG;Lo;0;L;;;;;N;;;;; D13A;HANGUL SYLLABLE TEOLM;Lo;0;L;;;;;N;;;;; D13B;HANGUL SYLLABLE TEOLB;Lo;0;L;;;;;N;;;;; D13C;HANGUL SYLLABLE TEOLS;Lo;0;L;;;;;N;;;;; D13D;HANGUL SYLLABLE TEOLT;Lo;0;L;;;;;N;;;;; D13E;HANGUL SYLLABLE TEOLP;Lo;0;L;;;;;N;;;;; D13F;HANGUL SYLLABLE TEOLH;Lo;0;L;;;;;N;;;;; D140;HANGUL SYLLABLE TEOM;Lo;0;L;;;;;N;;;;; D141;HANGUL SYLLABLE TEOB;Lo;0;L;;;;;N;;;;; D142;HANGUL SYLLABLE TEOBS;Lo;0;L;;;;;N;;;;; D143;HANGUL SYLLABLE TEOS;Lo;0;L;;;;;N;;;;; D144;HANGUL SYLLABLE TEOSS;Lo;0;L;;;;;N;;;;; D145;HANGUL SYLLABLE TEONG;Lo;0;L;;;;;N;;;;; D146;HANGUL SYLLABLE TEOJ;Lo;0;L;;;;;N;;;;; D147;HANGUL SYLLABLE TEOC;Lo;0;L;;;;;N;;;;; D148;HANGUL SYLLABLE TEOK;Lo;0;L;;;;;N;;;;; D149;HANGUL SYLLABLE TEOT;Lo;0;L;;;;;N;;;;; D14A;HANGUL SYLLABLE TEOP;Lo;0;L;;;;;N;;;;; D14B;HANGUL SYLLABLE TEOH;Lo;0;L;;;;;N;;;;; D14C;HANGUL SYLLABLE TE;Lo;0;L;;;;;N;;;;; D14D;HANGUL SYLLABLE TEG;Lo;0;L;;;;;N;;;;; D14E;HANGUL SYLLABLE TEGG;Lo;0;L;;;;;N;;;;; D14F;HANGUL SYLLABLE TEGS;Lo;0;L;;;;;N;;;;; D150;HANGUL SYLLABLE TEN;Lo;0;L;;;;;N;;;;; D151;HANGUL SYLLABLE TENI;Lo;0;L;;;;;N;;;;; D152;HANGUL SYLLABLE TENH;Lo;0;L;;;;;N;;;;; D153;HANGUL SYLLABLE TED;Lo;0;L;;;;;N;;;;; D154;HANGUL SYLLABLE TEL;Lo;0;L;;;;;N;;;;; D155;HANGUL SYLLABLE TELG;Lo;0;L;;;;;N;;;;; D156;HANGUL SYLLABLE TELM;Lo;0;L;;;;;N;;;;; D157;HANGUL SYLLABLE TELB;Lo;0;L;;;;;N;;;;; D158;HANGUL SYLLABLE TELS;Lo;0;L;;;;;N;;;;; D159;HANGUL SYLLABLE TELT;Lo;0;L;;;;;N;;;;; D15A;HANGUL SYLLABLE TELP;Lo;0;L;;;;;N;;;;; D15B;HANGUL SYLLABLE TELH;Lo;0;L;;;;;N;;;;; D15C;HANGUL SYLLABLE TEM;Lo;0;L;;;;;N;;;;; D15D;HANGUL SYLLABLE TEB;Lo;0;L;;;;;N;;;;; D15E;HANGUL SYLLABLE TEBS;Lo;0;L;;;;;N;;;;; D15F;HANGUL SYLLABLE TES;Lo;0;L;;;;;N;;;;; D160;HANGUL SYLLABLE TESS;Lo;0;L;;;;;N;;;;; D161;HANGUL SYLLABLE TENG;Lo;0;L;;;;;N;;;;; D162;HANGUL SYLLABLE TEJ;Lo;0;L;;;;;N;;;;; D163;HANGUL SYLLABLE TEC;Lo;0;L;;;;;N;;;;; D164;HANGUL SYLLABLE TEK;Lo;0;L;;;;;N;;;;; D165;HANGUL SYLLABLE TET;Lo;0;L;;;;;N;;;;; D166;HANGUL SYLLABLE TEP;Lo;0;L;;;;;N;;;;; D167;HANGUL SYLLABLE TEH;Lo;0;L;;;;;N;;;;; D168;HANGUL SYLLABLE TYEO;Lo;0;L;;;;;N;;;;; D169;HANGUL SYLLABLE TYEOG;Lo;0;L;;;;;N;;;;; D16A;HANGUL SYLLABLE TYEOGG;Lo;0;L;;;;;N;;;;; D16B;HANGUL SYLLABLE TYEOGS;Lo;0;L;;;;;N;;;;; D16C;HANGUL SYLLABLE TYEON;Lo;0;L;;;;;N;;;;; D16D;HANGUL SYLLABLE TYEONI;Lo;0;L;;;;;N;;;;; D16E;HANGUL SYLLABLE TYEONH;Lo;0;L;;;;;N;;;;; D16F;HANGUL SYLLABLE TYEOD;Lo;0;L;;;;;N;;;;; D170;HANGUL SYLLABLE TYEOL;Lo;0;L;;;;;N;;;;; D171;HANGUL SYLLABLE TYEOLG;Lo;0;L;;;;;N;;;;; D172;HANGUL SYLLABLE TYEOLM;Lo;0;L;;;;;N;;;;; D173;HANGUL SYLLABLE TYEOLB;Lo;0;L;;;;;N;;;;; D174;HANGUL SYLLABLE TYEOLS;Lo;0;L;;;;;N;;;;; D175;HANGUL SYLLABLE TYEOLT;Lo;0;L;;;;;N;;;;; D176;HANGUL SYLLABLE TYEOLP;Lo;0;L;;;;;N;;;;; D177;HANGUL SYLLABLE TYEOLH;Lo;0;L;;;;;N;;;;; D178;HANGUL SYLLABLE TYEOM;Lo;0;L;;;;;N;;;;; D179;HANGUL SYLLABLE TYEOB;Lo;0;L;;;;;N;;;;; D17A;HANGUL SYLLABLE TYEOBS;Lo;0;L;;;;;N;;;;; D17B;HANGUL SYLLABLE TYEOS;Lo;0;L;;;;;N;;;;; D17C;HANGUL SYLLABLE TYEOSS;Lo;0;L;;;;;N;;;;; D17D;HANGUL SYLLABLE TYEONG;Lo;0;L;;;;;N;;;;; D17E;HANGUL SYLLABLE TYEOJ;Lo;0;L;;;;;N;;;;; D17F;HANGUL SYLLABLE TYEOC;Lo;0;L;;;;;N;;;;; D180;HANGUL SYLLABLE TYEOK;Lo;0;L;;;;;N;;;;; D181;HANGUL SYLLABLE TYEOT;Lo;0;L;;;;;N;;;;; D182;HANGUL SYLLABLE TYEOP;Lo;0;L;;;;;N;;;;; D183;HANGUL SYLLABLE TYEOH;Lo;0;L;;;;;N;;;;; D184;HANGUL SYLLABLE TYE;Lo;0;L;;;;;N;;;;; D185;HANGUL SYLLABLE TYEG;Lo;0;L;;;;;N;;;;; D186;HANGUL SYLLABLE TYEGG;Lo;0;L;;;;;N;;;;; D187;HANGUL SYLLABLE TYEGS;Lo;0;L;;;;;N;;;;; D188;HANGUL SYLLABLE TYEN;Lo;0;L;;;;;N;;;;; D189;HANGUL SYLLABLE TYENI;Lo;0;L;;;;;N;;;;; D18A;HANGUL SYLLABLE TYENH;Lo;0;L;;;;;N;;;;; D18B;HANGUL SYLLABLE TYED;Lo;0;L;;;;;N;;;;; D18C;HANGUL SYLLABLE TYEL;Lo;0;L;;;;;N;;;;; D18D;HANGUL SYLLABLE TYELG;Lo;0;L;;;;;N;;;;; D18E;HANGUL SYLLABLE TYELM;Lo;0;L;;;;;N;;;;; D18F;HANGUL SYLLABLE TYELB;Lo;0;L;;;;;N;;;;; D190;HANGUL SYLLABLE TYELS;Lo;0;L;;;;;N;;;;; D191;HANGUL SYLLABLE TYELT;Lo;0;L;;;;;N;;;;; D192;HANGUL SYLLABLE TYELP;Lo;0;L;;;;;N;;;;; D193;HANGUL SYLLABLE TYELH;Lo;0;L;;;;;N;;;;; D194;HANGUL SYLLABLE TYEM;Lo;0;L;;;;;N;;;;; D195;HANGUL SYLLABLE TYEB;Lo;0;L;;;;;N;;;;; D196;HANGUL SYLLABLE TYEBS;Lo;0;L;;;;;N;;;;; D197;HANGUL SYLLABLE TYES;Lo;0;L;;;;;N;;;;; D198;HANGUL SYLLABLE TYESS;Lo;0;L;;;;;N;;;;; D199;HANGUL SYLLABLE TYENG;Lo;0;L;;;;;N;;;;; D19A;HANGUL SYLLABLE TYEJ;Lo;0;L;;;;;N;;;;; D19B;HANGUL SYLLABLE TYEC;Lo;0;L;;;;;N;;;;; D19C;HANGUL SYLLABLE TYEK;Lo;0;L;;;;;N;;;;; D19D;HANGUL SYLLABLE TYET;Lo;0;L;;;;;N;;;;; D19E;HANGUL SYLLABLE TYEP;Lo;0;L;;;;;N;;;;; D19F;HANGUL SYLLABLE TYEH;Lo;0;L;;;;;N;;;;; D1A0;HANGUL SYLLABLE TO;Lo;0;L;;;;;N;;;;; D1A1;HANGUL SYLLABLE TOG;Lo;0;L;;;;;N;;;;; D1A2;HANGUL SYLLABLE TOGG;Lo;0;L;;;;;N;;;;; D1A3;HANGUL SYLLABLE TOGS;Lo;0;L;;;;;N;;;;; D1A4;HANGUL SYLLABLE TON;Lo;0;L;;;;;N;;;;; D1A5;HANGUL SYLLABLE TONI;Lo;0;L;;;;;N;;;;; D1A6;HANGUL SYLLABLE TONH;Lo;0;L;;;;;N;;;;; D1A7;HANGUL SYLLABLE TOD;Lo;0;L;;;;;N;;;;; D1A8;HANGUL SYLLABLE TOL;Lo;0;L;;;;;N;;;;; D1A9;HANGUL SYLLABLE TOLG;Lo;0;L;;;;;N;;;;; D1AA;HANGUL SYLLABLE TOLM;Lo;0;L;;;;;N;;;;; D1AB;HANGUL SYLLABLE TOLB;Lo;0;L;;;;;N;;;;; D1AC;HANGUL SYLLABLE TOLS;Lo;0;L;;;;;N;;;;; D1AD;HANGUL SYLLABLE TOLT;Lo;0;L;;;;;N;;;;; D1AE;HANGUL SYLLABLE TOLP;Lo;0;L;;;;;N;;;;; D1AF;HANGUL SYLLABLE TOLH;Lo;0;L;;;;;N;;;;; D1B0;HANGUL SYLLABLE TOM;Lo;0;L;;;;;N;;;;; D1B1;HANGUL SYLLABLE TOB;Lo;0;L;;;;;N;;;;; D1B2;HANGUL SYLLABLE TOBS;Lo;0;L;;;;;N;;;;; D1B3;HANGUL SYLLABLE TOS;Lo;0;L;;;;;N;;;;; D1B4;HANGUL SYLLABLE TOSS;Lo;0;L;;;;;N;;;;; D1B5;HANGUL SYLLABLE TONG;Lo;0;L;;;;;N;;;;; D1B6;HANGUL SYLLABLE TOJ;Lo;0;L;;;;;N;;;;; D1B7;HANGUL SYLLABLE TOC;Lo;0;L;;;;;N;;;;; D1B8;HANGUL SYLLABLE TOK;Lo;0;L;;;;;N;;;;; D1B9;HANGUL SYLLABLE TOT;Lo;0;L;;;;;N;;;;; D1BA;HANGUL SYLLABLE TOP;Lo;0;L;;;;;N;;;;; D1BB;HANGUL SYLLABLE TOH;Lo;0;L;;;;;N;;;;; D1BC;HANGUL SYLLABLE TWA;Lo;0;L;;;;;N;;;;; D1BD;HANGUL SYLLABLE TWAG;Lo;0;L;;;;;N;;;;; D1BE;HANGUL SYLLABLE TWAGG;Lo;0;L;;;;;N;;;;; D1BF;HANGUL SYLLABLE TWAGS;Lo;0;L;;;;;N;;;;; D1C0;HANGUL SYLLABLE TWAN;Lo;0;L;;;;;N;;;;; D1C1;HANGUL SYLLABLE TWANI;Lo;0;L;;;;;N;;;;; D1C2;HANGUL SYLLABLE TWANH;Lo;0;L;;;;;N;;;;; D1C3;HANGUL SYLLABLE TWAD;Lo;0;L;;;;;N;;;;; D1C4;HANGUL SYLLABLE TWAL;Lo;0;L;;;;;N;;;;; D1C5;HANGUL SYLLABLE TWALG;Lo;0;L;;;;;N;;;;; D1C6;HANGUL SYLLABLE TWALM;Lo;0;L;;;;;N;;;;; D1C7;HANGUL SYLLABLE TWALB;Lo;0;L;;;;;N;;;;; D1C8;HANGUL SYLLABLE TWALS;Lo;0;L;;;;;N;;;;; D1C9;HANGUL SYLLABLE TWALT;Lo;0;L;;;;;N;;;;; D1CA;HANGUL SYLLABLE TWALP;Lo;0;L;;;;;N;;;;; D1CB;HANGUL SYLLABLE TWALH;Lo;0;L;;;;;N;;;;; D1CC;HANGUL SYLLABLE TWAM;Lo;0;L;;;;;N;;;;; D1CD;HANGUL SYLLABLE TWAB;Lo;0;L;;;;;N;;;;; D1CE;HANGUL SYLLABLE TWABS;Lo;0;L;;;;;N;;;;; D1CF;HANGUL SYLLABLE TWAS;Lo;0;L;;;;;N;;;;; D1D0;HANGUL SYLLABLE TWASS;Lo;0;L;;;;;N;;;;; D1D1;HANGUL SYLLABLE TWANG;Lo;0;L;;;;;N;;;;; D1D2;HANGUL SYLLABLE TWAJ;Lo;0;L;;;;;N;;;;; D1D3;HANGUL SYLLABLE TWAC;Lo;0;L;;;;;N;;;;; D1D4;HANGUL SYLLABLE TWAK;Lo;0;L;;;;;N;;;;; D1D5;HANGUL SYLLABLE TWAT;Lo;0;L;;;;;N;;;;; D1D6;HANGUL SYLLABLE TWAP;Lo;0;L;;;;;N;;;;; D1D7;HANGUL SYLLABLE TWAH;Lo;0;L;;;;;N;;;;; D1D8;HANGUL SYLLABLE TWAE;Lo;0;L;;;;;N;;;;; D1D9;HANGUL SYLLABLE TWAEG;Lo;0;L;;;;;N;;;;; D1DA;HANGUL SYLLABLE TWAEGG;Lo;0;L;;;;;N;;;;; D1DB;HANGUL SYLLABLE TWAEGS;Lo;0;L;;;;;N;;;;; D1DC;HANGUL SYLLABLE TWAEN;Lo;0;L;;;;;N;;;;; D1DD;HANGUL SYLLABLE TWAENI;Lo;0;L;;;;;N;;;;; D1DE;HANGUL SYLLABLE TWAENH;Lo;0;L;;;;;N;;;;; D1DF;HANGUL SYLLABLE TWAED;Lo;0;L;;;;;N;;;;; D1E0;HANGUL SYLLABLE TWAEL;Lo;0;L;;;;;N;;;;; D1E1;HANGUL SYLLABLE TWAELG;Lo;0;L;;;;;N;;;;; D1E2;HANGUL SYLLABLE TWAELM;Lo;0;L;;;;;N;;;;; D1E3;HANGUL SYLLABLE TWAELB;Lo;0;L;;;;;N;;;;; D1E4;HANGUL SYLLABLE TWAELS;Lo;0;L;;;;;N;;;;; D1E5;HANGUL SYLLABLE TWAELT;Lo;0;L;;;;;N;;;;; D1E6;HANGUL SYLLABLE TWAELP;Lo;0;L;;;;;N;;;;; D1E7;HANGUL SYLLABLE TWAELH;Lo;0;L;;;;;N;;;;; D1E8;HANGUL SYLLABLE TWAEM;Lo;0;L;;;;;N;;;;; D1E9;HANGUL SYLLABLE TWAEB;Lo;0;L;;;;;N;;;;; D1EA;HANGUL SYLLABLE TWAEBS;Lo;0;L;;;;;N;;;;; D1EB;HANGUL SYLLABLE TWAES;Lo;0;L;;;;;N;;;;; D1EC;HANGUL SYLLABLE TWAESS;Lo;0;L;;;;;N;;;;; D1ED;HANGUL SYLLABLE TWAENG;Lo;0;L;;;;;N;;;;; D1EE;HANGUL SYLLABLE TWAEJ;Lo;0;L;;;;;N;;;;; D1EF;HANGUL SYLLABLE TWAEC;Lo;0;L;;;;;N;;;;; D1F0;HANGUL SYLLABLE TWAEK;Lo;0;L;;;;;N;;;;; D1F1;HANGUL SYLLABLE TWAET;Lo;0;L;;;;;N;;;;; D1F2;HANGUL SYLLABLE TWAEP;Lo;0;L;;;;;N;;;;; D1F3;HANGUL SYLLABLE TWAEH;Lo;0;L;;;;;N;;;;; D1F4;HANGUL SYLLABLE TOE;Lo;0;L;;;;;N;;;;; D1F5;HANGUL SYLLABLE TOEG;Lo;0;L;;;;;N;;;;; D1F6;HANGUL SYLLABLE TOEGG;Lo;0;L;;;;;N;;;;; D1F7;HANGUL SYLLABLE TOEGS;Lo;0;L;;;;;N;;;;; D1F8;HANGUL SYLLABLE TOEN;Lo;0;L;;;;;N;;;;; D1F9;HANGUL SYLLABLE TOENI;Lo;0;L;;;;;N;;;;; D1FA;HANGUL SYLLABLE TOENH;Lo;0;L;;;;;N;;;;; D1FB;HANGUL SYLLABLE TOED;Lo;0;L;;;;;N;;;;; D1FC;HANGUL SYLLABLE TOEL;Lo;0;L;;;;;N;;;;; D1FD;HANGUL SYLLABLE TOELG;Lo;0;L;;;;;N;;;;; D1FE;HANGUL SYLLABLE TOELM;Lo;0;L;;;;;N;;;;; D1FF;HANGUL SYLLABLE TOELB;Lo;0;L;;;;;N;;;;; D200;HANGUL SYLLABLE TOELS;Lo;0;L;;;;;N;;;;; D201;HANGUL SYLLABLE TOELT;Lo;0;L;;;;;N;;;;; D202;HANGUL SYLLABLE TOELP;Lo;0;L;;;;;N;;;;; D203;HANGUL SYLLABLE TOELH;Lo;0;L;;;;;N;;;;; D204;HANGUL SYLLABLE TOEM;Lo;0;L;;;;;N;;;;; D205;HANGUL SYLLABLE TOEB;Lo;0;L;;;;;N;;;;; D206;HANGUL SYLLABLE TOEBS;Lo;0;L;;;;;N;;;;; D207;HANGUL SYLLABLE TOES;Lo;0;L;;;;;N;;;;; D208;HANGUL SYLLABLE TOESS;Lo;0;L;;;;;N;;;;; D209;HANGUL SYLLABLE TOENG;Lo;0;L;;;;;N;;;;; D20A;HANGUL SYLLABLE TOEJ;Lo;0;L;;;;;N;;;;; D20B;HANGUL SYLLABLE TOEC;Lo;0;L;;;;;N;;;;; D20C;HANGUL SYLLABLE TOEK;Lo;0;L;;;;;N;;;;; D20D;HANGUL SYLLABLE TOET;Lo;0;L;;;;;N;;;;; D20E;HANGUL SYLLABLE TOEP;Lo;0;L;;;;;N;;;;; D20F;HANGUL SYLLABLE TOEH;Lo;0;L;;;;;N;;;;; D210;HANGUL SYLLABLE TYO;Lo;0;L;;;;;N;;;;; D211;HANGUL SYLLABLE TYOG;Lo;0;L;;;;;N;;;;; D212;HANGUL SYLLABLE TYOGG;Lo;0;L;;;;;N;;;;; D213;HANGUL SYLLABLE TYOGS;Lo;0;L;;;;;N;;;;; D214;HANGUL SYLLABLE TYON;Lo;0;L;;;;;N;;;;; D215;HANGUL SYLLABLE TYONI;Lo;0;L;;;;;N;;;;; D216;HANGUL SYLLABLE TYONH;Lo;0;L;;;;;N;;;;; D217;HANGUL SYLLABLE TYOD;Lo;0;L;;;;;N;;;;; D218;HANGUL SYLLABLE TYOL;Lo;0;L;;;;;N;;;;; D219;HANGUL SYLLABLE TYOLG;Lo;0;L;;;;;N;;;;; D21A;HANGUL SYLLABLE TYOLM;Lo;0;L;;;;;N;;;;; D21B;HANGUL SYLLABLE TYOLB;Lo;0;L;;;;;N;;;;; D21C;HANGUL SYLLABLE TYOLS;Lo;0;L;;;;;N;;;;; D21D;HANGUL SYLLABLE TYOLT;Lo;0;L;;;;;N;;;;; D21E;HANGUL SYLLABLE TYOLP;Lo;0;L;;;;;N;;;;; D21F;HANGUL SYLLABLE TYOLH;Lo;0;L;;;;;N;;;;; D220;HANGUL SYLLABLE TYOM;Lo;0;L;;;;;N;;;;; D221;HANGUL SYLLABLE TYOB;Lo;0;L;;;;;N;;;;; D222;HANGUL SYLLABLE TYOBS;Lo;0;L;;;;;N;;;;; D223;HANGUL SYLLABLE TYOS;Lo;0;L;;;;;N;;;;; D224;HANGUL SYLLABLE TYOSS;Lo;0;L;;;;;N;;;;; D225;HANGUL SYLLABLE TYONG;Lo;0;L;;;;;N;;;;; D226;HANGUL SYLLABLE TYOJ;Lo;0;L;;;;;N;;;;; D227;HANGUL SYLLABLE TYOC;Lo;0;L;;;;;N;;;;; D228;HANGUL SYLLABLE TYOK;Lo;0;L;;;;;N;;;;; D229;HANGUL SYLLABLE TYOT;Lo;0;L;;;;;N;;;;; D22A;HANGUL SYLLABLE TYOP;Lo;0;L;;;;;N;;;;; D22B;HANGUL SYLLABLE TYOH;Lo;0;L;;;;;N;;;;; D22C;HANGUL SYLLABLE TU;Lo;0;L;;;;;N;;;;; D22D;HANGUL SYLLABLE TUG;Lo;0;L;;;;;N;;;;; D22E;HANGUL SYLLABLE TUGG;Lo;0;L;;;;;N;;;;; D22F;HANGUL SYLLABLE TUGS;Lo;0;L;;;;;N;;;;; D230;HANGUL SYLLABLE TUN;Lo;0;L;;;;;N;;;;; D231;HANGUL SYLLABLE TUNI;Lo;0;L;;;;;N;;;;; D232;HANGUL SYLLABLE TUNH;Lo;0;L;;;;;N;;;;; D233;HANGUL SYLLABLE TUD;Lo;0;L;;;;;N;;;;; D234;HANGUL SYLLABLE TUL;Lo;0;L;;;;;N;;;;; D235;HANGUL SYLLABLE TULG;Lo;0;L;;;;;N;;;;; D236;HANGUL SYLLABLE TULM;Lo;0;L;;;;;N;;;;; D237;HANGUL SYLLABLE TULB;Lo;0;L;;;;;N;;;;; D238;HANGUL SYLLABLE TULS;Lo;0;L;;;;;N;;;;; D239;HANGUL SYLLABLE TULT;Lo;0;L;;;;;N;;;;; D23A;HANGUL SYLLABLE TULP;Lo;0;L;;;;;N;;;;; D23B;HANGUL SYLLABLE TULH;Lo;0;L;;;;;N;;;;; D23C;HANGUL SYLLABLE TUM;Lo;0;L;;;;;N;;;;; D23D;HANGUL SYLLABLE TUB;Lo;0;L;;;;;N;;;;; D23E;HANGUL SYLLABLE TUBS;Lo;0;L;;;;;N;;;;; D23F;HANGUL SYLLABLE TUS;Lo;0;L;;;;;N;;;;; D240;HANGUL SYLLABLE TUSS;Lo;0;L;;;;;N;;;;; D241;HANGUL SYLLABLE TUNG;Lo;0;L;;;;;N;;;;; D242;HANGUL SYLLABLE TUJ;Lo;0;L;;;;;N;;;;; D243;HANGUL SYLLABLE TUC;Lo;0;L;;;;;N;;;;; D244;HANGUL SYLLABLE TUK;Lo;0;L;;;;;N;;;;; D245;HANGUL SYLLABLE TUT;Lo;0;L;;;;;N;;;;; D246;HANGUL SYLLABLE TUP;Lo;0;L;;;;;N;;;;; D247;HANGUL SYLLABLE TUH;Lo;0;L;;;;;N;;;;; D248;HANGUL SYLLABLE TWEO;Lo;0;L;;;;;N;;;;; D249;HANGUL SYLLABLE TWEOG;Lo;0;L;;;;;N;;;;; D24A;HANGUL SYLLABLE TWEOGG;Lo;0;L;;;;;N;;;;; D24B;HANGUL SYLLABLE TWEOGS;Lo;0;L;;;;;N;;;;; D24C;HANGUL SYLLABLE TWEON;Lo;0;L;;;;;N;;;;; D24D;HANGUL SYLLABLE TWEONI;Lo;0;L;;;;;N;;;;; D24E;HANGUL SYLLABLE TWEONH;Lo;0;L;;;;;N;;;;; D24F;HANGUL SYLLABLE TWEOD;Lo;0;L;;;;;N;;;;; D250;HANGUL SYLLABLE TWEOL;Lo;0;L;;;;;N;;;;; D251;HANGUL SYLLABLE TWEOLG;Lo;0;L;;;;;N;;;;; D252;HANGUL SYLLABLE TWEOLM;Lo;0;L;;;;;N;;;;; D253;HANGUL SYLLABLE TWEOLB;Lo;0;L;;;;;N;;;;; D254;HANGUL SYLLABLE TWEOLS;Lo;0;L;;;;;N;;;;; D255;HANGUL SYLLABLE TWEOLT;Lo;0;L;;;;;N;;;;; D256;HANGUL SYLLABLE TWEOLP;Lo;0;L;;;;;N;;;;; D257;HANGUL SYLLABLE TWEOLH;Lo;0;L;;;;;N;;;;; D258;HANGUL SYLLABLE TWEOM;Lo;0;L;;;;;N;;;;; D259;HANGUL SYLLABLE TWEOB;Lo;0;L;;;;;N;;;;; D25A;HANGUL SYLLABLE TWEOBS;Lo;0;L;;;;;N;;;;; D25B;HANGUL SYLLABLE TWEOS;Lo;0;L;;;;;N;;;;; D25C;HANGUL SYLLABLE TWEOSS;Lo;0;L;;;;;N;;;;; D25D;HANGUL SYLLABLE TWEONG;Lo;0;L;;;;;N;;;;; D25E;HANGUL SYLLABLE TWEOJ;Lo;0;L;;;;;N;;;;; D25F;HANGUL SYLLABLE TWEOC;Lo;0;L;;;;;N;;;;; D260;HANGUL SYLLABLE TWEOK;Lo;0;L;;;;;N;;;;; D261;HANGUL SYLLABLE TWEOT;Lo;0;L;;;;;N;;;;; D262;HANGUL SYLLABLE TWEOP;Lo;0;L;;;;;N;;;;; D263;HANGUL SYLLABLE TWEOH;Lo;0;L;;;;;N;;;;; D264;HANGUL SYLLABLE TWE;Lo;0;L;;;;;N;;;;; D265;HANGUL SYLLABLE TWEG;Lo;0;L;;;;;N;;;;; D266;HANGUL SYLLABLE TWEGG;Lo;0;L;;;;;N;;;;; D267;HANGUL SYLLABLE TWEGS;Lo;0;L;;;;;N;;;;; D268;HANGUL SYLLABLE TWEN;Lo;0;L;;;;;N;;;;; D269;HANGUL SYLLABLE TWENI;Lo;0;L;;;;;N;;;;; D26A;HANGUL SYLLABLE TWENH;Lo;0;L;;;;;N;;;;; D26B;HANGUL SYLLABLE TWED;Lo;0;L;;;;;N;;;;; D26C;HANGUL SYLLABLE TWEL;Lo;0;L;;;;;N;;;;; D26D;HANGUL SYLLABLE TWELG;Lo;0;L;;;;;N;;;;; D26E;HANGUL SYLLABLE TWELM;Lo;0;L;;;;;N;;;;; D26F;HANGUL SYLLABLE TWELB;Lo;0;L;;;;;N;;;;; D270;HANGUL SYLLABLE TWELS;Lo;0;L;;;;;N;;;;; D271;HANGUL SYLLABLE TWELT;Lo;0;L;;;;;N;;;;; D272;HANGUL SYLLABLE TWELP;Lo;0;L;;;;;N;;;;; D273;HANGUL SYLLABLE TWELH;Lo;0;L;;;;;N;;;;; D274;HANGUL SYLLABLE TWEM;Lo;0;L;;;;;N;;;;; D275;HANGUL SYLLABLE TWEB;Lo;0;L;;;;;N;;;;; D276;HANGUL SYLLABLE TWEBS;Lo;0;L;;;;;N;;;;; D277;HANGUL SYLLABLE TWES;Lo;0;L;;;;;N;;;;; D278;HANGUL SYLLABLE TWESS;Lo;0;L;;;;;N;;;;; D279;HANGUL SYLLABLE TWENG;Lo;0;L;;;;;N;;;;; D27A;HANGUL SYLLABLE TWEJ;Lo;0;L;;;;;N;;;;; D27B;HANGUL SYLLABLE TWEC;Lo;0;L;;;;;N;;;;; D27C;HANGUL SYLLABLE TWEK;Lo;0;L;;;;;N;;;;; D27D;HANGUL SYLLABLE TWET;Lo;0;L;;;;;N;;;;; D27E;HANGUL SYLLABLE TWEP;Lo;0;L;;;;;N;;;;; D27F;HANGUL SYLLABLE TWEH;Lo;0;L;;;;;N;;;;; D280;HANGUL SYLLABLE TWI;Lo;0;L;;;;;N;;;;; D281;HANGUL SYLLABLE TWIG;Lo;0;L;;;;;N;;;;; D282;HANGUL SYLLABLE TWIGG;Lo;0;L;;;;;N;;;;; D283;HANGUL SYLLABLE TWIGS;Lo;0;L;;;;;N;;;;; D284;HANGUL SYLLABLE TWIN;Lo;0;L;;;;;N;;;;; D285;HANGUL SYLLABLE TWINI;Lo;0;L;;;;;N;;;;; D286;HANGUL SYLLABLE TWINH;Lo;0;L;;;;;N;;;;; D287;HANGUL SYLLABLE TWID;Lo;0;L;;;;;N;;;;; D288;HANGUL SYLLABLE TWIL;Lo;0;L;;;;;N;;;;; D289;HANGUL SYLLABLE TWILG;Lo;0;L;;;;;N;;;;; D28A;HANGUL SYLLABLE TWILM;Lo;0;L;;;;;N;;;;; D28B;HANGUL SYLLABLE TWILB;Lo;0;L;;;;;N;;;;; D28C;HANGUL SYLLABLE TWILS;Lo;0;L;;;;;N;;;;; D28D;HANGUL SYLLABLE TWILT;Lo;0;L;;;;;N;;;;; D28E;HANGUL SYLLABLE TWILP;Lo;0;L;;;;;N;;;;; D28F;HANGUL SYLLABLE TWILH;Lo;0;L;;;;;N;;;;; D290;HANGUL SYLLABLE TWIM;Lo;0;L;;;;;N;;;;; D291;HANGUL SYLLABLE TWIB;Lo;0;L;;;;;N;;;;; D292;HANGUL SYLLABLE TWIBS;Lo;0;L;;;;;N;;;;; D293;HANGUL SYLLABLE TWIS;Lo;0;L;;;;;N;;;;; D294;HANGUL SYLLABLE TWISS;Lo;0;L;;;;;N;;;;; D295;HANGUL SYLLABLE TWING;Lo;0;L;;;;;N;;;;; D296;HANGUL SYLLABLE TWIJ;Lo;0;L;;;;;N;;;;; D297;HANGUL SYLLABLE TWIC;Lo;0;L;;;;;N;;;;; D298;HANGUL SYLLABLE TWIK;Lo;0;L;;;;;N;;;;; D299;HANGUL SYLLABLE TWIT;Lo;0;L;;;;;N;;;;; D29A;HANGUL SYLLABLE TWIP;Lo;0;L;;;;;N;;;;; D29B;HANGUL SYLLABLE TWIH;Lo;0;L;;;;;N;;;;; D29C;HANGUL SYLLABLE TYU;Lo;0;L;;;;;N;;;;; D29D;HANGUL SYLLABLE TYUG;Lo;0;L;;;;;N;;;;; D29E;HANGUL SYLLABLE TYUGG;Lo;0;L;;;;;N;;;;; D29F;HANGUL SYLLABLE TYUGS;Lo;0;L;;;;;N;;;;; D2A0;HANGUL SYLLABLE TYUN;Lo;0;L;;;;;N;;;;; D2A1;HANGUL SYLLABLE TYUNI;Lo;0;L;;;;;N;;;;; D2A2;HANGUL SYLLABLE TYUNH;Lo;0;L;;;;;N;;;;; D2A3;HANGUL SYLLABLE TYUD;Lo;0;L;;;;;N;;;;; D2A4;HANGUL SYLLABLE TYUL;Lo;0;L;;;;;N;;;;; D2A5;HANGUL SYLLABLE TYULG;Lo;0;L;;;;;N;;;;; D2A6;HANGUL SYLLABLE TYULM;Lo;0;L;;;;;N;;;;; D2A7;HANGUL SYLLABLE TYULB;Lo;0;L;;;;;N;;;;; D2A8;HANGUL SYLLABLE TYULS;Lo;0;L;;;;;N;;;;; D2A9;HANGUL SYLLABLE TYULT;Lo;0;L;;;;;N;;;;; D2AA;HANGUL SYLLABLE TYULP;Lo;0;L;;;;;N;;;;; D2AB;HANGUL SYLLABLE TYULH;Lo;0;L;;;;;N;;;;; D2AC;HANGUL SYLLABLE TYUM;Lo;0;L;;;;;N;;;;; D2AD;HANGUL SYLLABLE TYUB;Lo;0;L;;;;;N;;;;; D2AE;HANGUL SYLLABLE TYUBS;Lo;0;L;;;;;N;;;;; D2AF;HANGUL SYLLABLE TYUS;Lo;0;L;;;;;N;;;;; D2B0;HANGUL SYLLABLE TYUSS;Lo;0;L;;;;;N;;;;; D2B1;HANGUL SYLLABLE TYUNG;Lo;0;L;;;;;N;;;;; D2B2;HANGUL SYLLABLE TYUJ;Lo;0;L;;;;;N;;;;; D2B3;HANGUL SYLLABLE TYUC;Lo;0;L;;;;;N;;;;; D2B4;HANGUL SYLLABLE TYUK;Lo;0;L;;;;;N;;;;; D2B5;HANGUL SYLLABLE TYUT;Lo;0;L;;;;;N;;;;; D2B6;HANGUL SYLLABLE TYUP;Lo;0;L;;;;;N;;;;; D2B7;HANGUL SYLLABLE TYUH;Lo;0;L;;;;;N;;;;; D2B8;HANGUL SYLLABLE TEU;Lo;0;L;;;;;N;;;;; D2B9;HANGUL SYLLABLE TEUG;Lo;0;L;;;;;N;;;;; D2BA;HANGUL SYLLABLE TEUGG;Lo;0;L;;;;;N;;;;; D2BB;HANGUL SYLLABLE TEUGS;Lo;0;L;;;;;N;;;;; D2BC;HANGUL SYLLABLE TEUN;Lo;0;L;;;;;N;;;;; D2BD;HANGUL SYLLABLE TEUNI;Lo;0;L;;;;;N;;;;; D2BE;HANGUL SYLLABLE TEUNH;Lo;0;L;;;;;N;;;;; D2BF;HANGUL SYLLABLE TEUD;Lo;0;L;;;;;N;;;;; D2C0;HANGUL SYLLABLE TEUL;Lo;0;L;;;;;N;;;;; D2C1;HANGUL SYLLABLE TEULG;Lo;0;L;;;;;N;;;;; D2C2;HANGUL SYLLABLE TEULM;Lo;0;L;;;;;N;;;;; D2C3;HANGUL SYLLABLE TEULB;Lo;0;L;;;;;N;;;;; D2C4;HANGUL SYLLABLE TEULS;Lo;0;L;;;;;N;;;;; D2C5;HANGUL SYLLABLE TEULT;Lo;0;L;;;;;N;;;;; D2C6;HANGUL SYLLABLE TEULP;Lo;0;L;;;;;N;;;;; D2C7;HANGUL SYLLABLE TEULH;Lo;0;L;;;;;N;;;;; D2C8;HANGUL SYLLABLE TEUM;Lo;0;L;;;;;N;;;;; D2C9;HANGUL SYLLABLE TEUB;Lo;0;L;;;;;N;;;;; D2CA;HANGUL SYLLABLE TEUBS;Lo;0;L;;;;;N;;;;; D2CB;HANGUL SYLLABLE TEUS;Lo;0;L;;;;;N;;;;; D2CC;HANGUL SYLLABLE TEUSS;Lo;0;L;;;;;N;;;;; D2CD;HANGUL SYLLABLE TEUNG;Lo;0;L;;;;;N;;;;; D2CE;HANGUL SYLLABLE TEUJ;Lo;0;L;;;;;N;;;;; D2CF;HANGUL SYLLABLE TEUC;Lo;0;L;;;;;N;;;;; D2D0;HANGUL SYLLABLE TEUK;Lo;0;L;;;;;N;;;;; D2D1;HANGUL SYLLABLE TEUT;Lo;0;L;;;;;N;;;;; D2D2;HANGUL SYLLABLE TEUP;Lo;0;L;;;;;N;;;;; D2D3;HANGUL SYLLABLE TEUH;Lo;0;L;;;;;N;;;;; D2D4;HANGUL SYLLABLE TYI;Lo;0;L;;;;;N;;;;; D2D5;HANGUL SYLLABLE TYIG;Lo;0;L;;;;;N;;;;; D2D6;HANGUL SYLLABLE TYIGG;Lo;0;L;;;;;N;;;;; D2D7;HANGUL SYLLABLE TYIGS;Lo;0;L;;;;;N;;;;; D2D8;HANGUL SYLLABLE TYIN;Lo;0;L;;;;;N;;;;; D2D9;HANGUL SYLLABLE TYINI;Lo;0;L;;;;;N;;;;; D2DA;HANGUL SYLLABLE TYINH;Lo;0;L;;;;;N;;;;; D2DB;HANGUL SYLLABLE TYID;Lo;0;L;;;;;N;;;;; D2DC;HANGUL SYLLABLE TYIL;Lo;0;L;;;;;N;;;;; D2DD;HANGUL SYLLABLE TYILG;Lo;0;L;;;;;N;;;;; D2DE;HANGUL SYLLABLE TYILM;Lo;0;L;;;;;N;;;;; D2DF;HANGUL SYLLABLE TYILB;Lo;0;L;;;;;N;;;;; D2E0;HANGUL SYLLABLE TYILS;Lo;0;L;;;;;N;;;;; D2E1;HANGUL SYLLABLE TYILT;Lo;0;L;;;;;N;;;;; D2E2;HANGUL SYLLABLE TYILP;Lo;0;L;;;;;N;;;;; D2E3;HANGUL SYLLABLE TYILH;Lo;0;L;;;;;N;;;;; D2E4;HANGUL SYLLABLE TYIM;Lo;0;L;;;;;N;;;;; D2E5;HANGUL SYLLABLE TYIB;Lo;0;L;;;;;N;;;;; D2E6;HANGUL SYLLABLE TYIBS;Lo;0;L;;;;;N;;;;; D2E7;HANGUL SYLLABLE TYIS;Lo;0;L;;;;;N;;;;; D2E8;HANGUL SYLLABLE TYISS;Lo;0;L;;;;;N;;;;; D2E9;HANGUL SYLLABLE TYING;Lo;0;L;;;;;N;;;;; D2EA;HANGUL SYLLABLE TYIJ;Lo;0;L;;;;;N;;;;; D2EB;HANGUL SYLLABLE TYIC;Lo;0;L;;;;;N;;;;; D2EC;HANGUL SYLLABLE TYIK;Lo;0;L;;;;;N;;;;; D2ED;HANGUL SYLLABLE TYIT;Lo;0;L;;;;;N;;;;; D2EE;HANGUL SYLLABLE TYIP;Lo;0;L;;;;;N;;;;; D2EF;HANGUL SYLLABLE TYIH;Lo;0;L;;;;;N;;;;; D2F0;HANGUL SYLLABLE TI;Lo;0;L;;;;;N;;;;; D2F1;HANGUL SYLLABLE TIG;Lo;0;L;;;;;N;;;;; D2F2;HANGUL SYLLABLE TIGG;Lo;0;L;;;;;N;;;;; D2F3;HANGUL SYLLABLE TIGS;Lo;0;L;;;;;N;;;;; D2F4;HANGUL SYLLABLE TIN;Lo;0;L;;;;;N;;;;; D2F5;HANGUL SYLLABLE TINI;Lo;0;L;;;;;N;;;;; D2F6;HANGUL SYLLABLE TINH;Lo;0;L;;;;;N;;;;; D2F7;HANGUL SYLLABLE TID;Lo;0;L;;;;;N;;;;; D2F8;HANGUL SYLLABLE TIL;Lo;0;L;;;;;N;;;;; D2F9;HANGUL SYLLABLE TILG;Lo;0;L;;;;;N;;;;; D2FA;HANGUL SYLLABLE TILM;Lo;0;L;;;;;N;;;;; D2FB;HANGUL SYLLABLE TILB;Lo;0;L;;;;;N;;;;; D2FC;HANGUL SYLLABLE TILS;Lo;0;L;;;;;N;;;;; D2FD;HANGUL SYLLABLE TILT;Lo;0;L;;;;;N;;;;; D2FE;HANGUL SYLLABLE TILP;Lo;0;L;;;;;N;;;;; D2FF;HANGUL SYLLABLE TILH;Lo;0;L;;;;;N;;;;; D300;HANGUL SYLLABLE TIM;Lo;0;L;;;;;N;;;;; D301;HANGUL SYLLABLE TIB;Lo;0;L;;;;;N;;;;; D302;HANGUL SYLLABLE TIBS;Lo;0;L;;;;;N;;;;; D303;HANGUL SYLLABLE TIS;Lo;0;L;;;;;N;;;;; D304;HANGUL SYLLABLE TISS;Lo;0;L;;;;;N;;;;; D305;HANGUL SYLLABLE TING;Lo;0;L;;;;;N;;;;; D306;HANGUL SYLLABLE TIJ;Lo;0;L;;;;;N;;;;; D307;HANGUL SYLLABLE TIC;Lo;0;L;;;;;N;;;;; D308;HANGUL SYLLABLE TIK;Lo;0;L;;;;;N;;;;; D309;HANGUL SYLLABLE TIT;Lo;0;L;;;;;N;;;;; D30A;HANGUL SYLLABLE TIP;Lo;0;L;;;;;N;;;;; D30B;HANGUL SYLLABLE TIH;Lo;0;L;;;;;N;;;;; D30C;HANGUL SYLLABLE PA;Lo;0;L;;;;;N;;;;; D30D;HANGUL SYLLABLE PAG;Lo;0;L;;;;;N;;;;; D30E;HANGUL SYLLABLE PAGG;Lo;0;L;;;;;N;;;;; D30F;HANGUL SYLLABLE PAGS;Lo;0;L;;;;;N;;;;; D310;HANGUL SYLLABLE PAN;Lo;0;L;;;;;N;;;;; D311;HANGUL SYLLABLE PANI;Lo;0;L;;;;;N;;;;; D312;HANGUL SYLLABLE PANH;Lo;0;L;;;;;N;;;;; D313;HANGUL SYLLABLE PAD;Lo;0;L;;;;;N;;;;; D314;HANGUL SYLLABLE PAL;Lo;0;L;;;;;N;;;;; D315;HANGUL SYLLABLE PALG;Lo;0;L;;;;;N;;;;; D316;HANGUL SYLLABLE PALM;Lo;0;L;;;;;N;;;;; D317;HANGUL SYLLABLE PALB;Lo;0;L;;;;;N;;;;; D318;HANGUL SYLLABLE PALS;Lo;0;L;;;;;N;;;;; D319;HANGUL SYLLABLE PALT;Lo;0;L;;;;;N;;;;; D31A;HANGUL SYLLABLE PALP;Lo;0;L;;;;;N;;;;; D31B;HANGUL SYLLABLE PALH;Lo;0;L;;;;;N;;;;; D31C;HANGUL SYLLABLE PAM;Lo;0;L;;;;;N;;;;; D31D;HANGUL SYLLABLE PAB;Lo;0;L;;;;;N;;;;; D31E;HANGUL SYLLABLE PABS;Lo;0;L;;;;;N;;;;; D31F;HANGUL SYLLABLE PAS;Lo;0;L;;;;;N;;;;; D320;HANGUL SYLLABLE PASS;Lo;0;L;;;;;N;;;;; D321;HANGUL SYLLABLE PANG;Lo;0;L;;;;;N;;;;; D322;HANGUL SYLLABLE PAJ;Lo;0;L;;;;;N;;;;; D323;HANGUL SYLLABLE PAC;Lo;0;L;;;;;N;;;;; D324;HANGUL SYLLABLE PAK;Lo;0;L;;;;;N;;;;; D325;HANGUL SYLLABLE PAT;Lo;0;L;;;;;N;;;;; D326;HANGUL SYLLABLE PAP;Lo;0;L;;;;;N;;;;; D327;HANGUL SYLLABLE PAH;Lo;0;L;;;;;N;;;;; D328;HANGUL SYLLABLE PAE;Lo;0;L;;;;;N;;;;; D329;HANGUL SYLLABLE PAEG;Lo;0;L;;;;;N;;;;; D32A;HANGUL SYLLABLE PAEGG;Lo;0;L;;;;;N;;;;; D32B;HANGUL SYLLABLE PAEGS;Lo;0;L;;;;;N;;;;; D32C;HANGUL SYLLABLE PAEN;Lo;0;L;;;;;N;;;;; D32D;HANGUL SYLLABLE PAENI;Lo;0;L;;;;;N;;;;; D32E;HANGUL SYLLABLE PAENH;Lo;0;L;;;;;N;;;;; D32F;HANGUL SYLLABLE PAED;Lo;0;L;;;;;N;;;;; D330;HANGUL SYLLABLE PAEL;Lo;0;L;;;;;N;;;;; D331;HANGUL SYLLABLE PAELG;Lo;0;L;;;;;N;;;;; D332;HANGUL SYLLABLE PAELM;Lo;0;L;;;;;N;;;;; D333;HANGUL SYLLABLE PAELB;Lo;0;L;;;;;N;;;;; D334;HANGUL SYLLABLE PAELS;Lo;0;L;;;;;N;;;;; D335;HANGUL SYLLABLE PAELT;Lo;0;L;;;;;N;;;;; D336;HANGUL SYLLABLE PAELP;Lo;0;L;;;;;N;;;;; D337;HANGUL SYLLABLE PAELH;Lo;0;L;;;;;N;;;;; D338;HANGUL SYLLABLE PAEM;Lo;0;L;;;;;N;;;;; D339;HANGUL SYLLABLE PAEB;Lo;0;L;;;;;N;;;;; D33A;HANGUL SYLLABLE PAEBS;Lo;0;L;;;;;N;;;;; D33B;HANGUL SYLLABLE PAES;Lo;0;L;;;;;N;;;;; D33C;HANGUL SYLLABLE PAESS;Lo;0;L;;;;;N;;;;; D33D;HANGUL SYLLABLE PAENG;Lo;0;L;;;;;N;;;;; D33E;HANGUL SYLLABLE PAEJ;Lo;0;L;;;;;N;;;;; D33F;HANGUL SYLLABLE PAEC;Lo;0;L;;;;;N;;;;; D340;HANGUL SYLLABLE PAEK;Lo;0;L;;;;;N;;;;; D341;HANGUL SYLLABLE PAET;Lo;0;L;;;;;N;;;;; D342;HANGUL SYLLABLE PAEP;Lo;0;L;;;;;N;;;;; D343;HANGUL SYLLABLE PAEH;Lo;0;L;;;;;N;;;;; D344;HANGUL SYLLABLE PYA;Lo;0;L;;;;;N;;;;; D345;HANGUL SYLLABLE PYAG;Lo;0;L;;;;;N;;;;; D346;HANGUL SYLLABLE PYAGG;Lo;0;L;;;;;N;;;;; D347;HANGUL SYLLABLE PYAGS;Lo;0;L;;;;;N;;;;; D348;HANGUL SYLLABLE PYAN;Lo;0;L;;;;;N;;;;; D349;HANGUL SYLLABLE PYANI;Lo;0;L;;;;;N;;;;; D34A;HANGUL SYLLABLE PYANH;Lo;0;L;;;;;N;;;;; D34B;HANGUL SYLLABLE PYAD;Lo;0;L;;;;;N;;;;; D34C;HANGUL SYLLABLE PYAL;Lo;0;L;;;;;N;;;;; D34D;HANGUL SYLLABLE PYALG;Lo;0;L;;;;;N;;;;; D34E;HANGUL SYLLABLE PYALM;Lo;0;L;;;;;N;;;;; D34F;HANGUL SYLLABLE PYALB;Lo;0;L;;;;;N;;;;; D350;HANGUL SYLLABLE PYALS;Lo;0;L;;;;;N;;;;; D351;HANGUL SYLLABLE PYALT;Lo;0;L;;;;;N;;;;; D352;HANGUL SYLLABLE PYALP;Lo;0;L;;;;;N;;;;; D353;HANGUL SYLLABLE PYALH;Lo;0;L;;;;;N;;;;; D354;HANGUL SYLLABLE PYAM;Lo;0;L;;;;;N;;;;; D355;HANGUL SYLLABLE PYAB;Lo;0;L;;;;;N;;;;; D356;HANGUL SYLLABLE PYABS;Lo;0;L;;;;;N;;;;; D357;HANGUL SYLLABLE PYAS;Lo;0;L;;;;;N;;;;; D358;HANGUL SYLLABLE PYASS;Lo;0;L;;;;;N;;;;; D359;HANGUL SYLLABLE PYANG;Lo;0;L;;;;;N;;;;; D35A;HANGUL SYLLABLE PYAJ;Lo;0;L;;;;;N;;;;; D35B;HANGUL SYLLABLE PYAC;Lo;0;L;;;;;N;;;;; D35C;HANGUL SYLLABLE PYAK;Lo;0;L;;;;;N;;;;; D35D;HANGUL SYLLABLE PYAT;Lo;0;L;;;;;N;;;;; D35E;HANGUL SYLLABLE PYAP;Lo;0;L;;;;;N;;;;; D35F;HANGUL SYLLABLE PYAH;Lo;0;L;;;;;N;;;;; D360;HANGUL SYLLABLE PYAE;Lo;0;L;;;;;N;;;;; D361;HANGUL SYLLABLE PYAEG;Lo;0;L;;;;;N;;;;; D362;HANGUL SYLLABLE PYAEGG;Lo;0;L;;;;;N;;;;; D363;HANGUL SYLLABLE PYAEGS;Lo;0;L;;;;;N;;;;; D364;HANGUL SYLLABLE PYAEN;Lo;0;L;;;;;N;;;;; D365;HANGUL SYLLABLE PYAENI;Lo;0;L;;;;;N;;;;; D366;HANGUL SYLLABLE PYAENH;Lo;0;L;;;;;N;;;;; D367;HANGUL SYLLABLE PYAED;Lo;0;L;;;;;N;;;;; D368;HANGUL SYLLABLE PYAEL;Lo;0;L;;;;;N;;;;; D369;HANGUL SYLLABLE PYAELG;Lo;0;L;;;;;N;;;;; D36A;HANGUL SYLLABLE PYAELM;Lo;0;L;;;;;N;;;;; D36B;HANGUL SYLLABLE PYAELB;Lo;0;L;;;;;N;;;;; D36C;HANGUL SYLLABLE PYAELS;Lo;0;L;;;;;N;;;;; D36D;HANGUL SYLLABLE PYAELT;Lo;0;L;;;;;N;;;;; D36E;HANGUL SYLLABLE PYAELP;Lo;0;L;;;;;N;;;;; D36F;HANGUL SYLLABLE PYAELH;Lo;0;L;;;;;N;;;;; D370;HANGUL SYLLABLE PYAEM;Lo;0;L;;;;;N;;;;; D371;HANGUL SYLLABLE PYAEB;Lo;0;L;;;;;N;;;;; D372;HANGUL SYLLABLE PYAEBS;Lo;0;L;;;;;N;;;;; D373;HANGUL SYLLABLE PYAES;Lo;0;L;;;;;N;;;;; D374;HANGUL SYLLABLE PYAESS;Lo;0;L;;;;;N;;;;; D375;HANGUL SYLLABLE PYAENG;Lo;0;L;;;;;N;;;;; D376;HANGUL SYLLABLE PYAEJ;Lo;0;L;;;;;N;;;;; D377;HANGUL SYLLABLE PYAEC;Lo;0;L;;;;;N;;;;; D378;HANGUL SYLLABLE PYAEK;Lo;0;L;;;;;N;;;;; D379;HANGUL SYLLABLE PYAET;Lo;0;L;;;;;N;;;;; D37A;HANGUL SYLLABLE PYAEP;Lo;0;L;;;;;N;;;;; D37B;HANGUL SYLLABLE PYAEH;Lo;0;L;;;;;N;;;;; D37C;HANGUL SYLLABLE PEO;Lo;0;L;;;;;N;;;;; D37D;HANGUL SYLLABLE PEOG;Lo;0;L;;;;;N;;;;; D37E;HANGUL SYLLABLE PEOGG;Lo;0;L;;;;;N;;;;; D37F;HANGUL SYLLABLE PEOGS;Lo;0;L;;;;;N;;;;; D380;HANGUL SYLLABLE PEON;Lo;0;L;;;;;N;;;;; D381;HANGUL SYLLABLE PEONI;Lo;0;L;;;;;N;;;;; D382;HANGUL SYLLABLE PEONH;Lo;0;L;;;;;N;;;;; D383;HANGUL SYLLABLE PEOD;Lo;0;L;;;;;N;;;;; D384;HANGUL SYLLABLE PEOL;Lo;0;L;;;;;N;;;;; D385;HANGUL SYLLABLE PEOLG;Lo;0;L;;;;;N;;;;; D386;HANGUL SYLLABLE PEOLM;Lo;0;L;;;;;N;;;;; D387;HANGUL SYLLABLE PEOLB;Lo;0;L;;;;;N;;;;; D388;HANGUL SYLLABLE PEOLS;Lo;0;L;;;;;N;;;;; D389;HANGUL SYLLABLE PEOLT;Lo;0;L;;;;;N;;;;; D38A;HANGUL SYLLABLE PEOLP;Lo;0;L;;;;;N;;;;; D38B;HANGUL SYLLABLE PEOLH;Lo;0;L;;;;;N;;;;; D38C;HANGUL SYLLABLE PEOM;Lo;0;L;;;;;N;;;;; D38D;HANGUL SYLLABLE PEOB;Lo;0;L;;;;;N;;;;; D38E;HANGUL SYLLABLE PEOBS;Lo;0;L;;;;;N;;;;; D38F;HANGUL SYLLABLE PEOS;Lo;0;L;;;;;N;;;;; D390;HANGUL SYLLABLE PEOSS;Lo;0;L;;;;;N;;;;; D391;HANGUL SYLLABLE PEONG;Lo;0;L;;;;;N;;;;; D392;HANGUL SYLLABLE PEOJ;Lo;0;L;;;;;N;;;;; D393;HANGUL SYLLABLE PEOC;Lo;0;L;;;;;N;;;;; D394;HANGUL SYLLABLE PEOK;Lo;0;L;;;;;N;;;;; D395;HANGUL SYLLABLE PEOT;Lo;0;L;;;;;N;;;;; D396;HANGUL SYLLABLE PEOP;Lo;0;L;;;;;N;;;;; D397;HANGUL SYLLABLE PEOH;Lo;0;L;;;;;N;;;;; D398;HANGUL SYLLABLE PE;Lo;0;L;;;;;N;;;;; D399;HANGUL SYLLABLE PEG;Lo;0;L;;;;;N;;;;; D39A;HANGUL SYLLABLE PEGG;Lo;0;L;;;;;N;;;;; D39B;HANGUL SYLLABLE PEGS;Lo;0;L;;;;;N;;;;; D39C;HANGUL SYLLABLE PEN;Lo;0;L;;;;;N;;;;; D39D;HANGUL SYLLABLE PENI;Lo;0;L;;;;;N;;;;; D39E;HANGUL SYLLABLE PENH;Lo;0;L;;;;;N;;;;; D39F;HANGUL SYLLABLE PED;Lo;0;L;;;;;N;;;;; D3A0;HANGUL SYLLABLE PEL;Lo;0;L;;;;;N;;;;; D3A1;HANGUL SYLLABLE PELG;Lo;0;L;;;;;N;;;;; D3A2;HANGUL SYLLABLE PELM;Lo;0;L;;;;;N;;;;; D3A3;HANGUL SYLLABLE PELB;Lo;0;L;;;;;N;;;;; D3A4;HANGUL SYLLABLE PELS;Lo;0;L;;;;;N;;;;; D3A5;HANGUL SYLLABLE PELT;Lo;0;L;;;;;N;;;;; D3A6;HANGUL SYLLABLE PELP;Lo;0;L;;;;;N;;;;; D3A7;HANGUL SYLLABLE PELH;Lo;0;L;;;;;N;;;;; D3A8;HANGUL SYLLABLE PEM;Lo;0;L;;;;;N;;;;; D3A9;HANGUL SYLLABLE PEB;Lo;0;L;;;;;N;;;;; D3AA;HANGUL SYLLABLE PEBS;Lo;0;L;;;;;N;;;;; D3AB;HANGUL SYLLABLE PES;Lo;0;L;;;;;N;;;;; D3AC;HANGUL SYLLABLE PESS;Lo;0;L;;;;;N;;;;; D3AD;HANGUL SYLLABLE PENG;Lo;0;L;;;;;N;;;;; D3AE;HANGUL SYLLABLE PEJ;Lo;0;L;;;;;N;;;;; D3AF;HANGUL SYLLABLE PEC;Lo;0;L;;;;;N;;;;; D3B0;HANGUL SYLLABLE PEK;Lo;0;L;;;;;N;;;;; D3B1;HANGUL SYLLABLE PET;Lo;0;L;;;;;N;;;;; D3B2;HANGUL SYLLABLE PEP;Lo;0;L;;;;;N;;;;; D3B3;HANGUL SYLLABLE PEH;Lo;0;L;;;;;N;;;;; D3B4;HANGUL SYLLABLE PYEO;Lo;0;L;;;;;N;;;;; D3B5;HANGUL SYLLABLE PYEOG;Lo;0;L;;;;;N;;;;; D3B6;HANGUL SYLLABLE PYEOGG;Lo;0;L;;;;;N;;;;; D3B7;HANGUL SYLLABLE PYEOGS;Lo;0;L;;;;;N;;;;; D3B8;HANGUL SYLLABLE PYEON;Lo;0;L;;;;;N;;;;; D3B9;HANGUL SYLLABLE PYEONI;Lo;0;L;;;;;N;;;;; D3BA;HANGUL SYLLABLE PYEONH;Lo;0;L;;;;;N;;;;; D3BB;HANGUL SYLLABLE PYEOD;Lo;0;L;;;;;N;;;;; D3BC;HANGUL SYLLABLE PYEOL;Lo;0;L;;;;;N;;;;; D3BD;HANGUL SYLLABLE PYEOLG;Lo;0;L;;;;;N;;;;; D3BE;HANGUL SYLLABLE PYEOLM;Lo;0;L;;;;;N;;;;; D3BF;HANGUL SYLLABLE PYEOLB;Lo;0;L;;;;;N;;;;; D3C0;HANGUL SYLLABLE PYEOLS;Lo;0;L;;;;;N;;;;; D3C1;HANGUL SYLLABLE PYEOLT;Lo;0;L;;;;;N;;;;; D3C2;HANGUL SYLLABLE PYEOLP;Lo;0;L;;;;;N;;;;; D3C3;HANGUL SYLLABLE PYEOLH;Lo;0;L;;;;;N;;;;; D3C4;HANGUL SYLLABLE PYEOM;Lo;0;L;;;;;N;;;;; D3C5;HANGUL SYLLABLE PYEOB;Lo;0;L;;;;;N;;;;; D3C6;HANGUL SYLLABLE PYEOBS;Lo;0;L;;;;;N;;;;; D3C7;HANGUL SYLLABLE PYEOS;Lo;0;L;;;;;N;;;;; D3C8;HANGUL SYLLABLE PYEOSS;Lo;0;L;;;;;N;;;;; D3C9;HANGUL SYLLABLE PYEONG;Lo;0;L;;;;;N;;;;; D3CA;HANGUL SYLLABLE PYEOJ;Lo;0;L;;;;;N;;;;; D3CB;HANGUL SYLLABLE PYEOC;Lo;0;L;;;;;N;;;;; D3CC;HANGUL SYLLABLE PYEOK;Lo;0;L;;;;;N;;;;; D3CD;HANGUL SYLLABLE PYEOT;Lo;0;L;;;;;N;;;;; D3CE;HANGUL SYLLABLE PYEOP;Lo;0;L;;;;;N;;;;; D3CF;HANGUL SYLLABLE PYEOH;Lo;0;L;;;;;N;;;;; D3D0;HANGUL SYLLABLE PYE;Lo;0;L;;;;;N;;;;; D3D1;HANGUL SYLLABLE PYEG;Lo;0;L;;;;;N;;;;; D3D2;HANGUL SYLLABLE PYEGG;Lo;0;L;;;;;N;;;;; D3D3;HANGUL SYLLABLE PYEGS;Lo;0;L;;;;;N;;;;; D3D4;HANGUL SYLLABLE PYEN;Lo;0;L;;;;;N;;;;; D3D5;HANGUL SYLLABLE PYENI;Lo;0;L;;;;;N;;;;; D3D6;HANGUL SYLLABLE PYENH;Lo;0;L;;;;;N;;;;; D3D7;HANGUL SYLLABLE PYED;Lo;0;L;;;;;N;;;;; D3D8;HANGUL SYLLABLE PYEL;Lo;0;L;;;;;N;;;;; D3D9;HANGUL SYLLABLE PYELG;Lo;0;L;;;;;N;;;;; D3DA;HANGUL SYLLABLE PYELM;Lo;0;L;;;;;N;;;;; D3DB;HANGUL SYLLABLE PYELB;Lo;0;L;;;;;N;;;;; D3DC;HANGUL SYLLABLE PYELS;Lo;0;L;;;;;N;;;;; D3DD;HANGUL SYLLABLE PYELT;Lo;0;L;;;;;N;;;;; D3DE;HANGUL SYLLABLE PYELP;Lo;0;L;;;;;N;;;;; D3DF;HANGUL SYLLABLE PYELH;Lo;0;L;;;;;N;;;;; D3E0;HANGUL SYLLABLE PYEM;Lo;0;L;;;;;N;;;;; D3E1;HANGUL SYLLABLE PYEB;Lo;0;L;;;;;N;;;;; D3E2;HANGUL SYLLABLE PYEBS;Lo;0;L;;;;;N;;;;; D3E3;HANGUL SYLLABLE PYES;Lo;0;L;;;;;N;;;;; D3E4;HANGUL SYLLABLE PYESS;Lo;0;L;;;;;N;;;;; D3E5;HANGUL SYLLABLE PYENG;Lo;0;L;;;;;N;;;;; D3E6;HANGUL SYLLABLE PYEJ;Lo;0;L;;;;;N;;;;; D3E7;HANGUL SYLLABLE PYEC;Lo;0;L;;;;;N;;;;; D3E8;HANGUL SYLLABLE PYEK;Lo;0;L;;;;;N;;;;; D3E9;HANGUL SYLLABLE PYET;Lo;0;L;;;;;N;;;;; D3EA;HANGUL SYLLABLE PYEP;Lo;0;L;;;;;N;;;;; D3EB;HANGUL SYLLABLE PYEH;Lo;0;L;;;;;N;;;;; D3EC;HANGUL SYLLABLE PO;Lo;0;L;;;;;N;;;;; D3ED;HANGUL SYLLABLE POG;Lo;0;L;;;;;N;;;;; D3EE;HANGUL SYLLABLE POGG;Lo;0;L;;;;;N;;;;; D3EF;HANGUL SYLLABLE POGS;Lo;0;L;;;;;N;;;;; D3F0;HANGUL SYLLABLE PON;Lo;0;L;;;;;N;;;;; D3F1;HANGUL SYLLABLE PONI;Lo;0;L;;;;;N;;;;; D3F2;HANGUL SYLLABLE PONH;Lo;0;L;;;;;N;;;;; D3F3;HANGUL SYLLABLE POD;Lo;0;L;;;;;N;;;;; D3F4;HANGUL SYLLABLE POL;Lo;0;L;;;;;N;;;;; D3F5;HANGUL SYLLABLE POLG;Lo;0;L;;;;;N;;;;; D3F6;HANGUL SYLLABLE POLM;Lo;0;L;;;;;N;;;;; D3F7;HANGUL SYLLABLE POLB;Lo;0;L;;;;;N;;;;; D3F8;HANGUL SYLLABLE POLS;Lo;0;L;;;;;N;;;;; D3F9;HANGUL SYLLABLE POLT;Lo;0;L;;;;;N;;;;; D3FA;HANGUL SYLLABLE POLP;Lo;0;L;;;;;N;;;;; D3FB;HANGUL SYLLABLE POLH;Lo;0;L;;;;;N;;;;; D3FC;HANGUL SYLLABLE POM;Lo;0;L;;;;;N;;;;; D3FD;HANGUL SYLLABLE POB;Lo;0;L;;;;;N;;;;; D3FE;HANGUL SYLLABLE POBS;Lo;0;L;;;;;N;;;;; D3FF;HANGUL SYLLABLE POS;Lo;0;L;;;;;N;;;;; D400;HANGUL SYLLABLE POSS;Lo;0;L;;;;;N;;;;; D401;HANGUL SYLLABLE PONG;Lo;0;L;;;;;N;;;;; D402;HANGUL SYLLABLE POJ;Lo;0;L;;;;;N;;;;; D403;HANGUL SYLLABLE POC;Lo;0;L;;;;;N;;;;; D404;HANGUL SYLLABLE POK;Lo;0;L;;;;;N;;;;; D405;HANGUL SYLLABLE POT;Lo;0;L;;;;;N;;;;; D406;HANGUL SYLLABLE POP;Lo;0;L;;;;;N;;;;; D407;HANGUL SYLLABLE POH;Lo;0;L;;;;;N;;;;; D408;HANGUL SYLLABLE PWA;Lo;0;L;;;;;N;;;;; D409;HANGUL SYLLABLE PWAG;Lo;0;L;;;;;N;;;;; D40A;HANGUL SYLLABLE PWAGG;Lo;0;L;;;;;N;;;;; D40B;HANGUL SYLLABLE PWAGS;Lo;0;L;;;;;N;;;;; D40C;HANGUL SYLLABLE PWAN;Lo;0;L;;;;;N;;;;; D40D;HANGUL SYLLABLE PWANI;Lo;0;L;;;;;N;;;;; D40E;HANGUL SYLLABLE PWANH;Lo;0;L;;;;;N;;;;; D40F;HANGUL SYLLABLE PWAD;Lo;0;L;;;;;N;;;;; D410;HANGUL SYLLABLE PWAL;Lo;0;L;;;;;N;;;;; D411;HANGUL SYLLABLE PWALG;Lo;0;L;;;;;N;;;;; D412;HANGUL SYLLABLE PWALM;Lo;0;L;;;;;N;;;;; D413;HANGUL SYLLABLE PWALB;Lo;0;L;;;;;N;;;;; D414;HANGUL SYLLABLE PWALS;Lo;0;L;;;;;N;;;;; D415;HANGUL SYLLABLE PWALT;Lo;0;L;;;;;N;;;;; D416;HANGUL SYLLABLE PWALP;Lo;0;L;;;;;N;;;;; D417;HANGUL SYLLABLE PWALH;Lo;0;L;;;;;N;;;;; D418;HANGUL SYLLABLE PWAM;Lo;0;L;;;;;N;;;;; D419;HANGUL SYLLABLE PWAB;Lo;0;L;;;;;N;;;;; D41A;HANGUL SYLLABLE PWABS;Lo;0;L;;;;;N;;;;; D41B;HANGUL SYLLABLE PWAS;Lo;0;L;;;;;N;;;;; D41C;HANGUL SYLLABLE PWASS;Lo;0;L;;;;;N;;;;; D41D;HANGUL SYLLABLE PWANG;Lo;0;L;;;;;N;;;;; D41E;HANGUL SYLLABLE PWAJ;Lo;0;L;;;;;N;;;;; D41F;HANGUL SYLLABLE PWAC;Lo;0;L;;;;;N;;;;; D420;HANGUL SYLLABLE PWAK;Lo;0;L;;;;;N;;;;; D421;HANGUL SYLLABLE PWAT;Lo;0;L;;;;;N;;;;; D422;HANGUL SYLLABLE PWAP;Lo;0;L;;;;;N;;;;; D423;HANGUL SYLLABLE PWAH;Lo;0;L;;;;;N;;;;; D424;HANGUL SYLLABLE PWAE;Lo;0;L;;;;;N;;;;; D425;HANGUL SYLLABLE PWAEG;Lo;0;L;;;;;N;;;;; D426;HANGUL SYLLABLE PWAEGG;Lo;0;L;;;;;N;;;;; D427;HANGUL SYLLABLE PWAEGS;Lo;0;L;;;;;N;;;;; D428;HANGUL SYLLABLE PWAEN;Lo;0;L;;;;;N;;;;; D429;HANGUL SYLLABLE PWAENI;Lo;0;L;;;;;N;;;;; D42A;HANGUL SYLLABLE PWAENH;Lo;0;L;;;;;N;;;;; D42B;HANGUL SYLLABLE PWAED;Lo;0;L;;;;;N;;;;; D42C;HANGUL SYLLABLE PWAEL;Lo;0;L;;;;;N;;;;; D42D;HANGUL SYLLABLE PWAELG;Lo;0;L;;;;;N;;;;; D42E;HANGUL SYLLABLE PWAELM;Lo;0;L;;;;;N;;;;; D42F;HANGUL SYLLABLE PWAELB;Lo;0;L;;;;;N;;;;; D430;HANGUL SYLLABLE PWAELS;Lo;0;L;;;;;N;;;;; D431;HANGUL SYLLABLE PWAELT;Lo;0;L;;;;;N;;;;; D432;HANGUL SYLLABLE PWAELP;Lo;0;L;;;;;N;;;;; D433;HANGUL SYLLABLE PWAELH;Lo;0;L;;;;;N;;;;; D434;HANGUL SYLLABLE PWAEM;Lo;0;L;;;;;N;;;;; D435;HANGUL SYLLABLE PWAEB;Lo;0;L;;;;;N;;;;; D436;HANGUL SYLLABLE PWAEBS;Lo;0;L;;;;;N;;;;; D437;HANGUL SYLLABLE PWAES;Lo;0;L;;;;;N;;;;; D438;HANGUL SYLLABLE PWAESS;Lo;0;L;;;;;N;;;;; D439;HANGUL SYLLABLE PWAENG;Lo;0;L;;;;;N;;;;; D43A;HANGUL SYLLABLE PWAEJ;Lo;0;L;;;;;N;;;;; D43B;HANGUL SYLLABLE PWAEC;Lo;0;L;;;;;N;;;;; D43C;HANGUL SYLLABLE PWAEK;Lo;0;L;;;;;N;;;;; D43D;HANGUL SYLLABLE PWAET;Lo;0;L;;;;;N;;;;; D43E;HANGUL SYLLABLE PWAEP;Lo;0;L;;;;;N;;;;; D43F;HANGUL SYLLABLE PWAEH;Lo;0;L;;;;;N;;;;; D440;HANGUL SYLLABLE POE;Lo;0;L;;;;;N;;;;; D441;HANGUL SYLLABLE POEG;Lo;0;L;;;;;N;;;;; D442;HANGUL SYLLABLE POEGG;Lo;0;L;;;;;N;;;;; D443;HANGUL SYLLABLE POEGS;Lo;0;L;;;;;N;;;;; D444;HANGUL SYLLABLE POEN;Lo;0;L;;;;;N;;;;; D445;HANGUL SYLLABLE POENI;Lo;0;L;;;;;N;;;;; D446;HANGUL SYLLABLE POENH;Lo;0;L;;;;;N;;;;; D447;HANGUL SYLLABLE POED;Lo;0;L;;;;;N;;;;; D448;HANGUL SYLLABLE POEL;Lo;0;L;;;;;N;;;;; D449;HANGUL SYLLABLE POELG;Lo;0;L;;;;;N;;;;; D44A;HANGUL SYLLABLE POELM;Lo;0;L;;;;;N;;;;; D44B;HANGUL SYLLABLE POELB;Lo;0;L;;;;;N;;;;; D44C;HANGUL SYLLABLE POELS;Lo;0;L;;;;;N;;;;; D44D;HANGUL SYLLABLE POELT;Lo;0;L;;;;;N;;;;; D44E;HANGUL SYLLABLE POELP;Lo;0;L;;;;;N;;;;; D44F;HANGUL SYLLABLE POELH;Lo;0;L;;;;;N;;;;; D450;HANGUL SYLLABLE POEM;Lo;0;L;;;;;N;;;;; D451;HANGUL SYLLABLE POEB;Lo;0;L;;;;;N;;;;; D452;HANGUL SYLLABLE POEBS;Lo;0;L;;;;;N;;;;; D453;HANGUL SYLLABLE POES;Lo;0;L;;;;;N;;;;; D454;HANGUL SYLLABLE POESS;Lo;0;L;;;;;N;;;;; D455;HANGUL SYLLABLE POENG;Lo;0;L;;;;;N;;;;; D456;HANGUL SYLLABLE POEJ;Lo;0;L;;;;;N;;;;; D457;HANGUL SYLLABLE POEC;Lo;0;L;;;;;N;;;;; D458;HANGUL SYLLABLE POEK;Lo;0;L;;;;;N;;;;; D459;HANGUL SYLLABLE POET;Lo;0;L;;;;;N;;;;; D45A;HANGUL SYLLABLE POEP;Lo;0;L;;;;;N;;;;; D45B;HANGUL SYLLABLE POEH;Lo;0;L;;;;;N;;;;; D45C;HANGUL SYLLABLE PYO;Lo;0;L;;;;;N;;;;; D45D;HANGUL SYLLABLE PYOG;Lo;0;L;;;;;N;;;;; D45E;HANGUL SYLLABLE PYOGG;Lo;0;L;;;;;N;;;;; D45F;HANGUL SYLLABLE PYOGS;Lo;0;L;;;;;N;;;;; D460;HANGUL SYLLABLE PYON;Lo;0;L;;;;;N;;;;; D461;HANGUL SYLLABLE PYONI;Lo;0;L;;;;;N;;;;; D462;HANGUL SYLLABLE PYONH;Lo;0;L;;;;;N;;;;; D463;HANGUL SYLLABLE PYOD;Lo;0;L;;;;;N;;;;; D464;HANGUL SYLLABLE PYOL;Lo;0;L;;;;;N;;;;; D465;HANGUL SYLLABLE PYOLG;Lo;0;L;;;;;N;;;;; D466;HANGUL SYLLABLE PYOLM;Lo;0;L;;;;;N;;;;; D467;HANGUL SYLLABLE PYOLB;Lo;0;L;;;;;N;;;;; D468;HANGUL SYLLABLE PYOLS;Lo;0;L;;;;;N;;;;; D469;HANGUL SYLLABLE PYOLT;Lo;0;L;;;;;N;;;;; D46A;HANGUL SYLLABLE PYOLP;Lo;0;L;;;;;N;;;;; D46B;HANGUL SYLLABLE PYOLH;Lo;0;L;;;;;N;;;;; D46C;HANGUL SYLLABLE PYOM;Lo;0;L;;;;;N;;;;; D46D;HANGUL SYLLABLE PYOB;Lo;0;L;;;;;N;;;;; D46E;HANGUL SYLLABLE PYOBS;Lo;0;L;;;;;N;;;;; D46F;HANGUL SYLLABLE PYOS;Lo;0;L;;;;;N;;;;; D470;HANGUL SYLLABLE PYOSS;Lo;0;L;;;;;N;;;;; D471;HANGUL SYLLABLE PYONG;Lo;0;L;;;;;N;;;;; D472;HANGUL SYLLABLE PYOJ;Lo;0;L;;;;;N;;;;; D473;HANGUL SYLLABLE PYOC;Lo;0;L;;;;;N;;;;; D474;HANGUL SYLLABLE PYOK;Lo;0;L;;;;;N;;;;; D475;HANGUL SYLLABLE PYOT;Lo;0;L;;;;;N;;;;; D476;HANGUL SYLLABLE PYOP;Lo;0;L;;;;;N;;;;; D477;HANGUL SYLLABLE PYOH;Lo;0;L;;;;;N;;;;; D478;HANGUL SYLLABLE PU;Lo;0;L;;;;;N;;;;; D479;HANGUL SYLLABLE PUG;Lo;0;L;;;;;N;;;;; D47A;HANGUL SYLLABLE PUGG;Lo;0;L;;;;;N;;;;; D47B;HANGUL SYLLABLE PUGS;Lo;0;L;;;;;N;;;;; D47C;HANGUL SYLLABLE PUN;Lo;0;L;;;;;N;;;;; D47D;HANGUL SYLLABLE PUNI;Lo;0;L;;;;;N;;;;; D47E;HANGUL SYLLABLE PUNH;Lo;0;L;;;;;N;;;;; D47F;HANGUL SYLLABLE PUD;Lo;0;L;;;;;N;;;;; D480;HANGUL SYLLABLE PUL;Lo;0;L;;;;;N;;;;; D481;HANGUL SYLLABLE PULG;Lo;0;L;;;;;N;;;;; D482;HANGUL SYLLABLE PULM;Lo;0;L;;;;;N;;;;; D483;HANGUL SYLLABLE PULB;Lo;0;L;;;;;N;;;;; D484;HANGUL SYLLABLE PULS;Lo;0;L;;;;;N;;;;; D485;HANGUL SYLLABLE PULT;Lo;0;L;;;;;N;;;;; D486;HANGUL SYLLABLE PULP;Lo;0;L;;;;;N;;;;; D487;HANGUL SYLLABLE PULH;Lo;0;L;;;;;N;;;;; D488;HANGUL SYLLABLE PUM;Lo;0;L;;;;;N;;;;; D489;HANGUL SYLLABLE PUB;Lo;0;L;;;;;N;;;;; D48A;HANGUL SYLLABLE PUBS;Lo;0;L;;;;;N;;;;; D48B;HANGUL SYLLABLE PUS;Lo;0;L;;;;;N;;;;; D48C;HANGUL SYLLABLE PUSS;Lo;0;L;;;;;N;;;;; D48D;HANGUL SYLLABLE PUNG;Lo;0;L;;;;;N;;;;; D48E;HANGUL SYLLABLE PUJ;Lo;0;L;;;;;N;;;;; D48F;HANGUL SYLLABLE PUC;Lo;0;L;;;;;N;;;;; D490;HANGUL SYLLABLE PUK;Lo;0;L;;;;;N;;;;; D491;HANGUL SYLLABLE PUT;Lo;0;L;;;;;N;;;;; D492;HANGUL SYLLABLE PUP;Lo;0;L;;;;;N;;;;; D493;HANGUL SYLLABLE PUH;Lo;0;L;;;;;N;;;;; D494;HANGUL SYLLABLE PWEO;Lo;0;L;;;;;N;;;;; D495;HANGUL SYLLABLE PWEOG;Lo;0;L;;;;;N;;;;; D496;HANGUL SYLLABLE PWEOGG;Lo;0;L;;;;;N;;;;; D497;HANGUL SYLLABLE PWEOGS;Lo;0;L;;;;;N;;;;; D498;HANGUL SYLLABLE PWEON;Lo;0;L;;;;;N;;;;; D499;HANGUL SYLLABLE PWEONI;Lo;0;L;;;;;N;;;;; D49A;HANGUL SYLLABLE PWEONH;Lo;0;L;;;;;N;;;;; D49B;HANGUL SYLLABLE PWEOD;Lo;0;L;;;;;N;;;;; D49C;HANGUL SYLLABLE PWEOL;Lo;0;L;;;;;N;;;;; D49D;HANGUL SYLLABLE PWEOLG;Lo;0;L;;;;;N;;;;; D49E;HANGUL SYLLABLE PWEOLM;Lo;0;L;;;;;N;;;;; D49F;HANGUL SYLLABLE PWEOLB;Lo;0;L;;;;;N;;;;; D4A0;HANGUL SYLLABLE PWEOLS;Lo;0;L;;;;;N;;;;; D4A1;HANGUL SYLLABLE PWEOLT;Lo;0;L;;;;;N;;;;; D4A2;HANGUL SYLLABLE PWEOLP;Lo;0;L;;;;;N;;;;; D4A3;HANGUL SYLLABLE PWEOLH;Lo;0;L;;;;;N;;;;; D4A4;HANGUL SYLLABLE PWEOM;Lo;0;L;;;;;N;;;;; D4A5;HANGUL SYLLABLE PWEOB;Lo;0;L;;;;;N;;;;; D4A6;HANGUL SYLLABLE PWEOBS;Lo;0;L;;;;;N;;;;; D4A7;HANGUL SYLLABLE PWEOS;Lo;0;L;;;;;N;;;;; D4A8;HANGUL SYLLABLE PWEOSS;Lo;0;L;;;;;N;;;;; D4A9;HANGUL SYLLABLE PWEONG;Lo;0;L;;;;;N;;;;; D4AA;HANGUL SYLLABLE PWEOJ;Lo;0;L;;;;;N;;;;; D4AB;HANGUL SYLLABLE PWEOC;Lo;0;L;;;;;N;;;;; D4AC;HANGUL SYLLABLE PWEOK;Lo;0;L;;;;;N;;;;; D4AD;HANGUL SYLLABLE PWEOT;Lo;0;L;;;;;N;;;;; D4AE;HANGUL SYLLABLE PWEOP;Lo;0;L;;;;;N;;;;; D4AF;HANGUL SYLLABLE PWEOH;Lo;0;L;;;;;N;;;;; D4B0;HANGUL SYLLABLE PWE;Lo;0;L;;;;;N;;;;; D4B1;HANGUL SYLLABLE PWEG;Lo;0;L;;;;;N;;;;; D4B2;HANGUL SYLLABLE PWEGG;Lo;0;L;;;;;N;;;;; D4B3;HANGUL SYLLABLE PWEGS;Lo;0;L;;;;;N;;;;; D4B4;HANGUL SYLLABLE PWEN;Lo;0;L;;;;;N;;;;; D4B5;HANGUL SYLLABLE PWENI;Lo;0;L;;;;;N;;;;; D4B6;HANGUL SYLLABLE PWENH;Lo;0;L;;;;;N;;;;; D4B7;HANGUL SYLLABLE PWED;Lo;0;L;;;;;N;;;;; D4B8;HANGUL SYLLABLE PWEL;Lo;0;L;;;;;N;;;;; D4B9;HANGUL SYLLABLE PWELG;Lo;0;L;;;;;N;;;;; D4BA;HANGUL SYLLABLE PWELM;Lo;0;L;;;;;N;;;;; D4BB;HANGUL SYLLABLE PWELB;Lo;0;L;;;;;N;;;;; D4BC;HANGUL SYLLABLE PWELS;Lo;0;L;;;;;N;;;;; D4BD;HANGUL SYLLABLE PWELT;Lo;0;L;;;;;N;;;;; D4BE;HANGUL SYLLABLE PWELP;Lo;0;L;;;;;N;;;;; D4BF;HANGUL SYLLABLE PWELH;Lo;0;L;;;;;N;;;;; D4C0;HANGUL SYLLABLE PWEM;Lo;0;L;;;;;N;;;;; D4C1;HANGUL SYLLABLE PWEB;Lo;0;L;;;;;N;;;;; D4C2;HANGUL SYLLABLE PWEBS;Lo;0;L;;;;;N;;;;; D4C3;HANGUL SYLLABLE PWES;Lo;0;L;;;;;N;;;;; D4C4;HANGUL SYLLABLE PWESS;Lo;0;L;;;;;N;;;;; D4C5;HANGUL SYLLABLE PWENG;Lo;0;L;;;;;N;;;;; D4C6;HANGUL SYLLABLE PWEJ;Lo;0;L;;;;;N;;;;; D4C7;HANGUL SYLLABLE PWEC;Lo;0;L;;;;;N;;;;; D4C8;HANGUL SYLLABLE PWEK;Lo;0;L;;;;;N;;;;; D4C9;HANGUL SYLLABLE PWET;Lo;0;L;;;;;N;;;;; D4CA;HANGUL SYLLABLE PWEP;Lo;0;L;;;;;N;;;;; D4CB;HANGUL SYLLABLE PWEH;Lo;0;L;;;;;N;;;;; D4CC;HANGUL SYLLABLE PWI;Lo;0;L;;;;;N;;;;; D4CD;HANGUL SYLLABLE PWIG;Lo;0;L;;;;;N;;;;; D4CE;HANGUL SYLLABLE PWIGG;Lo;0;L;;;;;N;;;;; D4CF;HANGUL SYLLABLE PWIGS;Lo;0;L;;;;;N;;;;; D4D0;HANGUL SYLLABLE PWIN;Lo;0;L;;;;;N;;;;; D4D1;HANGUL SYLLABLE PWINI;Lo;0;L;;;;;N;;;;; D4D2;HANGUL SYLLABLE PWINH;Lo;0;L;;;;;N;;;;; D4D3;HANGUL SYLLABLE PWID;Lo;0;L;;;;;N;;;;; D4D4;HANGUL SYLLABLE PWIL;Lo;0;L;;;;;N;;;;; D4D5;HANGUL SYLLABLE PWILG;Lo;0;L;;;;;N;;;;; D4D6;HANGUL SYLLABLE PWILM;Lo;0;L;;;;;N;;;;; D4D7;HANGUL SYLLABLE PWILB;Lo;0;L;;;;;N;;;;; D4D8;HANGUL SYLLABLE PWILS;Lo;0;L;;;;;N;;;;; D4D9;HANGUL SYLLABLE PWILT;Lo;0;L;;;;;N;;;;; D4DA;HANGUL SYLLABLE PWILP;Lo;0;L;;;;;N;;;;; D4DB;HANGUL SYLLABLE PWILH;Lo;0;L;;;;;N;;;;; D4DC;HANGUL SYLLABLE PWIM;Lo;0;L;;;;;N;;;;; D4DD;HANGUL SYLLABLE PWIB;Lo;0;L;;;;;N;;;;; D4DE;HANGUL SYLLABLE PWIBS;Lo;0;L;;;;;N;;;;; D4DF;HANGUL SYLLABLE PWIS;Lo;0;L;;;;;N;;;;; D4E0;HANGUL SYLLABLE PWISS;Lo;0;L;;;;;N;;;;; D4E1;HANGUL SYLLABLE PWING;Lo;0;L;;;;;N;;;;; D4E2;HANGUL SYLLABLE PWIJ;Lo;0;L;;;;;N;;;;; D4E3;HANGUL SYLLABLE PWIC;Lo;0;L;;;;;N;;;;; D4E4;HANGUL SYLLABLE PWIK;Lo;0;L;;;;;N;;;;; D4E5;HANGUL SYLLABLE PWIT;Lo;0;L;;;;;N;;;;; D4E6;HANGUL SYLLABLE PWIP;Lo;0;L;;;;;N;;;;; D4E7;HANGUL SYLLABLE PWIH;Lo;0;L;;;;;N;;;;; D4E8;HANGUL SYLLABLE PYU;Lo;0;L;;;;;N;;;;; D4E9;HANGUL SYLLABLE PYUG;Lo;0;L;;;;;N;;;;; D4EA;HANGUL SYLLABLE PYUGG;Lo;0;L;;;;;N;;;;; D4EB;HANGUL SYLLABLE PYUGS;Lo;0;L;;;;;N;;;;; D4EC;HANGUL SYLLABLE PYUN;Lo;0;L;;;;;N;;;;; D4ED;HANGUL SYLLABLE PYUNI;Lo;0;L;;;;;N;;;;; D4EE;HANGUL SYLLABLE PYUNH;Lo;0;L;;;;;N;;;;; D4EF;HANGUL SYLLABLE PYUD;Lo;0;L;;;;;N;;;;; D4F0;HANGUL SYLLABLE PYUL;Lo;0;L;;;;;N;;;;; D4F1;HANGUL SYLLABLE PYULG;Lo;0;L;;;;;N;;;;; D4F2;HANGUL SYLLABLE PYULM;Lo;0;L;;;;;N;;;;; D4F3;HANGUL SYLLABLE PYULB;Lo;0;L;;;;;N;;;;; D4F4;HANGUL SYLLABLE PYULS;Lo;0;L;;;;;N;;;;; D4F5;HANGUL SYLLABLE PYULT;Lo;0;L;;;;;N;;;;; D4F6;HANGUL SYLLABLE PYULP;Lo;0;L;;;;;N;;;;; D4F7;HANGUL SYLLABLE PYULH;Lo;0;L;;;;;N;;;;; D4F8;HANGUL SYLLABLE PYUM;Lo;0;L;;;;;N;;;;; D4F9;HANGUL SYLLABLE PYUB;Lo;0;L;;;;;N;;;;; D4FA;HANGUL SYLLABLE PYUBS;Lo;0;L;;;;;N;;;;; D4FB;HANGUL SYLLABLE PYUS;Lo;0;L;;;;;N;;;;; D4FC;HANGUL SYLLABLE PYUSS;Lo;0;L;;;;;N;;;;; D4FD;HANGUL SYLLABLE PYUNG;Lo;0;L;;;;;N;;;;; D4FE;HANGUL SYLLABLE PYUJ;Lo;0;L;;;;;N;;;;; D4FF;HANGUL SYLLABLE PYUC;Lo;0;L;;;;;N;;;;; D500;HANGUL SYLLABLE PYUK;Lo;0;L;;;;;N;;;;; D501;HANGUL SYLLABLE PYUT;Lo;0;L;;;;;N;;;;; D502;HANGUL SYLLABLE PYUP;Lo;0;L;;;;;N;;;;; D503;HANGUL SYLLABLE PYUH;Lo;0;L;;;;;N;;;;; D504;HANGUL SYLLABLE PEU;Lo;0;L;;;;;N;;;;; D505;HANGUL SYLLABLE PEUG;Lo;0;L;;;;;N;;;;; D506;HANGUL SYLLABLE PEUGG;Lo;0;L;;;;;N;;;;; D507;HANGUL SYLLABLE PEUGS;Lo;0;L;;;;;N;;;;; D508;HANGUL SYLLABLE PEUN;Lo;0;L;;;;;N;;;;; D509;HANGUL SYLLABLE PEUNI;Lo;0;L;;;;;N;;;;; D50A;HANGUL SYLLABLE PEUNH;Lo;0;L;;;;;N;;;;; D50B;HANGUL SYLLABLE PEUD;Lo;0;L;;;;;N;;;;; D50C;HANGUL SYLLABLE PEUL;Lo;0;L;;;;;N;;;;; D50D;HANGUL SYLLABLE PEULG;Lo;0;L;;;;;N;;;;; D50E;HANGUL SYLLABLE PEULM;Lo;0;L;;;;;N;;;;; D50F;HANGUL SYLLABLE PEULB;Lo;0;L;;;;;N;;;;; D510;HANGUL SYLLABLE PEULS;Lo;0;L;;;;;N;;;;; D511;HANGUL SYLLABLE PEULT;Lo;0;L;;;;;N;;;;; D512;HANGUL SYLLABLE PEULP;Lo;0;L;;;;;N;;;;; D513;HANGUL SYLLABLE PEULH;Lo;0;L;;;;;N;;;;; D514;HANGUL SYLLABLE PEUM;Lo;0;L;;;;;N;;;;; D515;HANGUL SYLLABLE PEUB;Lo;0;L;;;;;N;;;;; D516;HANGUL SYLLABLE PEUBS;Lo;0;L;;;;;N;;;;; D517;HANGUL SYLLABLE PEUS;Lo;0;L;;;;;N;;;;; D518;HANGUL SYLLABLE PEUSS;Lo;0;L;;;;;N;;;;; D519;HANGUL SYLLABLE PEUNG;Lo;0;L;;;;;N;;;;; D51A;HANGUL SYLLABLE PEUJ;Lo;0;L;;;;;N;;;;; D51B;HANGUL SYLLABLE PEUC;Lo;0;L;;;;;N;;;;; D51C;HANGUL SYLLABLE PEUK;Lo;0;L;;;;;N;;;;; D51D;HANGUL SYLLABLE PEUT;Lo;0;L;;;;;N;;;;; D51E;HANGUL SYLLABLE PEUP;Lo;0;L;;;;;N;;;;; D51F;HANGUL SYLLABLE PEUH;Lo;0;L;;;;;N;;;;; D520;HANGUL SYLLABLE PYI;Lo;0;L;;;;;N;;;;; D521;HANGUL SYLLABLE PYIG;Lo;0;L;;;;;N;;;;; D522;HANGUL SYLLABLE PYIGG;Lo;0;L;;;;;N;;;;; D523;HANGUL SYLLABLE PYIGS;Lo;0;L;;;;;N;;;;; D524;HANGUL SYLLABLE PYIN;Lo;0;L;;;;;N;;;;; D525;HANGUL SYLLABLE PYINI;Lo;0;L;;;;;N;;;;; D526;HANGUL SYLLABLE PYINH;Lo;0;L;;;;;N;;;;; D527;HANGUL SYLLABLE PYID;Lo;0;L;;;;;N;;;;; D528;HANGUL SYLLABLE PYIL;Lo;0;L;;;;;N;;;;; D529;HANGUL SYLLABLE PYILG;Lo;0;L;;;;;N;;;;; D52A;HANGUL SYLLABLE PYILM;Lo;0;L;;;;;N;;;;; D52B;HANGUL SYLLABLE PYILB;Lo;0;L;;;;;N;;;;; D52C;HANGUL SYLLABLE PYILS;Lo;0;L;;;;;N;;;;; D52D;HANGUL SYLLABLE PYILT;Lo;0;L;;;;;N;;;;; D52E;HANGUL SYLLABLE PYILP;Lo;0;L;;;;;N;;;;; D52F;HANGUL SYLLABLE PYILH;Lo;0;L;;;;;N;;;;; D530;HANGUL SYLLABLE PYIM;Lo;0;L;;;;;N;;;;; D531;HANGUL SYLLABLE PYIB;Lo;0;L;;;;;N;;;;; D532;HANGUL SYLLABLE PYIBS;Lo;0;L;;;;;N;;;;; D533;HANGUL SYLLABLE PYIS;Lo;0;L;;;;;N;;;;; D534;HANGUL SYLLABLE PYISS;Lo;0;L;;;;;N;;;;; D535;HANGUL SYLLABLE PYING;Lo;0;L;;;;;N;;;;; D536;HANGUL SYLLABLE PYIJ;Lo;0;L;;;;;N;;;;; D537;HANGUL SYLLABLE PYIC;Lo;0;L;;;;;N;;;;; D538;HANGUL SYLLABLE PYIK;Lo;0;L;;;;;N;;;;; D539;HANGUL SYLLABLE PYIT;Lo;0;L;;;;;N;;;;; D53A;HANGUL SYLLABLE PYIP;Lo;0;L;;;;;N;;;;; D53B;HANGUL SYLLABLE PYIH;Lo;0;L;;;;;N;;;;; D53C;HANGUL SYLLABLE PI;Lo;0;L;;;;;N;;;;; D53D;HANGUL SYLLABLE PIG;Lo;0;L;;;;;N;;;;; D53E;HANGUL SYLLABLE PIGG;Lo;0;L;;;;;N;;;;; D53F;HANGUL SYLLABLE PIGS;Lo;0;L;;;;;N;;;;; D540;HANGUL SYLLABLE PIN;Lo;0;L;;;;;N;;;;; D541;HANGUL SYLLABLE PINI;Lo;0;L;;;;;N;;;;; D542;HANGUL SYLLABLE PINH;Lo;0;L;;;;;N;;;;; D543;HANGUL SYLLABLE PID;Lo;0;L;;;;;N;;;;; D544;HANGUL SYLLABLE PIL;Lo;0;L;;;;;N;;;;; D545;HANGUL SYLLABLE PILG;Lo;0;L;;;;;N;;;;; D546;HANGUL SYLLABLE PILM;Lo;0;L;;;;;N;;;;; D547;HANGUL SYLLABLE PILB;Lo;0;L;;;;;N;;;;; D548;HANGUL SYLLABLE PILS;Lo;0;L;;;;;N;;;;; D549;HANGUL SYLLABLE PILT;Lo;0;L;;;;;N;;;;; D54A;HANGUL SYLLABLE PILP;Lo;0;L;;;;;N;;;;; D54B;HANGUL SYLLABLE PILH;Lo;0;L;;;;;N;;;;; D54C;HANGUL SYLLABLE PIM;Lo;0;L;;;;;N;;;;; D54D;HANGUL SYLLABLE PIB;Lo;0;L;;;;;N;;;;; D54E;HANGUL SYLLABLE PIBS;Lo;0;L;;;;;N;;;;; D54F;HANGUL SYLLABLE PIS;Lo;0;L;;;;;N;;;;; D550;HANGUL SYLLABLE PISS;Lo;0;L;;;;;N;;;;; D551;HANGUL SYLLABLE PING;Lo;0;L;;;;;N;;;;; D552;HANGUL SYLLABLE PIJ;Lo;0;L;;;;;N;;;;; D553;HANGUL SYLLABLE PIC;Lo;0;L;;;;;N;;;;; D554;HANGUL SYLLABLE PIK;Lo;0;L;;;;;N;;;;; D555;HANGUL SYLLABLE PIT;Lo;0;L;;;;;N;;;;; D556;HANGUL SYLLABLE PIP;Lo;0;L;;;;;N;;;;; D557;HANGUL SYLLABLE PIH;Lo;0;L;;;;;N;;;;; D558;HANGUL SYLLABLE HA;Lo;0;L;;;;;N;;;;; D559;HANGUL SYLLABLE HAG;Lo;0;L;;;;;N;;;;; D55A;HANGUL SYLLABLE HAGG;Lo;0;L;;;;;N;;;;; D55B;HANGUL SYLLABLE HAGS;Lo;0;L;;;;;N;;;;; D55C;HANGUL SYLLABLE HAN;Lo;0;L;;;;;N;;;;; D55D;HANGUL SYLLABLE HANI;Lo;0;L;;;;;N;;;;; D55E;HANGUL SYLLABLE HANH;Lo;0;L;;;;;N;;;;; D55F;HANGUL SYLLABLE HAD;Lo;0;L;;;;;N;;;;; D560;HANGUL SYLLABLE HAL;Lo;0;L;;;;;N;;;;; D561;HANGUL SYLLABLE HALG;Lo;0;L;;;;;N;;;;; D562;HANGUL SYLLABLE HALM;Lo;0;L;;;;;N;;;;; D563;HANGUL SYLLABLE HALB;Lo;0;L;;;;;N;;;;; D564;HANGUL SYLLABLE HALS;Lo;0;L;;;;;N;;;;; D565;HANGUL SYLLABLE HALT;Lo;0;L;;;;;N;;;;; D566;HANGUL SYLLABLE HALP;Lo;0;L;;;;;N;;;;; D567;HANGUL SYLLABLE HALH;Lo;0;L;;;;;N;;;;; D568;HANGUL SYLLABLE HAM;Lo;0;L;;;;;N;;;;; D569;HANGUL SYLLABLE HAB;Lo;0;L;;;;;N;;;;; D56A;HANGUL SYLLABLE HABS;Lo;0;L;;;;;N;;;;; D56B;HANGUL SYLLABLE HAS;Lo;0;L;;;;;N;;;;; D56C;HANGUL SYLLABLE HASS;Lo;0;L;;;;;N;;;;; D56D;HANGUL SYLLABLE HANG;Lo;0;L;;;;;N;;;;; D56E;HANGUL SYLLABLE HAJ;Lo;0;L;;;;;N;;;;; D56F;HANGUL SYLLABLE HAC;Lo;0;L;;;;;N;;;;; D570;HANGUL SYLLABLE HAK;Lo;0;L;;;;;N;;;;; D571;HANGUL SYLLABLE HAT;Lo;0;L;;;;;N;;;;; D572;HANGUL SYLLABLE HAP;Lo;0;L;;;;;N;;;;; D573;HANGUL SYLLABLE HAH;Lo;0;L;;;;;N;;;;; D574;HANGUL SYLLABLE HAE;Lo;0;L;;;;;N;;;;; D575;HANGUL SYLLABLE HAEG;Lo;0;L;;;;;N;;;;; D576;HANGUL SYLLABLE HAEGG;Lo;0;L;;;;;N;;;;; D577;HANGUL SYLLABLE HAEGS;Lo;0;L;;;;;N;;;;; D578;HANGUL SYLLABLE HAEN;Lo;0;L;;;;;N;;;;; D579;HANGUL SYLLABLE HAENI;Lo;0;L;;;;;N;;;;; D57A;HANGUL SYLLABLE HAENH;Lo;0;L;;;;;N;;;;; D57B;HANGUL SYLLABLE HAED;Lo;0;L;;;;;N;;;;; D57C;HANGUL SYLLABLE HAEL;Lo;0;L;;;;;N;;;;; D57D;HANGUL SYLLABLE HAELG;Lo;0;L;;;;;N;;;;; D57E;HANGUL SYLLABLE HAELM;Lo;0;L;;;;;N;;;;; D57F;HANGUL SYLLABLE HAELB;Lo;0;L;;;;;N;;;;; D580;HANGUL SYLLABLE HAELS;Lo;0;L;;;;;N;;;;; D581;HANGUL SYLLABLE HAELT;Lo;0;L;;;;;N;;;;; D582;HANGUL SYLLABLE HAELP;Lo;0;L;;;;;N;;;;; D583;HANGUL SYLLABLE HAELH;Lo;0;L;;;;;N;;;;; D584;HANGUL SYLLABLE HAEM;Lo;0;L;;;;;N;;;;; D585;HANGUL SYLLABLE HAEB;Lo;0;L;;;;;N;;;;; D586;HANGUL SYLLABLE HAEBS;Lo;0;L;;;;;N;;;;; D587;HANGUL SYLLABLE HAES;Lo;0;L;;;;;N;;;;; D588;HANGUL SYLLABLE HAESS;Lo;0;L;;;;;N;;;;; D589;HANGUL SYLLABLE HAENG;Lo;0;L;;;;;N;;;;; D58A;HANGUL SYLLABLE HAEJ;Lo;0;L;;;;;N;;;;; D58B;HANGUL SYLLABLE HAEC;Lo;0;L;;;;;N;;;;; D58C;HANGUL SYLLABLE HAEK;Lo;0;L;;;;;N;;;;; D58D;HANGUL SYLLABLE HAET;Lo;0;L;;;;;N;;;;; D58E;HANGUL SYLLABLE HAEP;Lo;0;L;;;;;N;;;;; D58F;HANGUL SYLLABLE HAEH;Lo;0;L;;;;;N;;;;; D590;HANGUL SYLLABLE HYA;Lo;0;L;;;;;N;;;;; D591;HANGUL SYLLABLE HYAG;Lo;0;L;;;;;N;;;;; D592;HANGUL SYLLABLE HYAGG;Lo;0;L;;;;;N;;;;; D593;HANGUL SYLLABLE HYAGS;Lo;0;L;;;;;N;;;;; D594;HANGUL SYLLABLE HYAN;Lo;0;L;;;;;N;;;;; D595;HANGUL SYLLABLE HYANI;Lo;0;L;;;;;N;;;;; D596;HANGUL SYLLABLE HYANH;Lo;0;L;;;;;N;;;;; D597;HANGUL SYLLABLE HYAD;Lo;0;L;;;;;N;;;;; D598;HANGUL SYLLABLE HYAL;Lo;0;L;;;;;N;;;;; D599;HANGUL SYLLABLE HYALG;Lo;0;L;;;;;N;;;;; D59A;HANGUL SYLLABLE HYALM;Lo;0;L;;;;;N;;;;; D59B;HANGUL SYLLABLE HYALB;Lo;0;L;;;;;N;;;;; D59C;HANGUL SYLLABLE HYALS;Lo;0;L;;;;;N;;;;; D59D;HANGUL SYLLABLE HYALT;Lo;0;L;;;;;N;;;;; D59E;HANGUL SYLLABLE HYALP;Lo;0;L;;;;;N;;;;; D59F;HANGUL SYLLABLE HYALH;Lo;0;L;;;;;N;;;;; D5A0;HANGUL SYLLABLE HYAM;Lo;0;L;;;;;N;;;;; D5A1;HANGUL SYLLABLE HYAB;Lo;0;L;;;;;N;;;;; D5A2;HANGUL SYLLABLE HYABS;Lo;0;L;;;;;N;;;;; D5A3;HANGUL SYLLABLE HYAS;Lo;0;L;;;;;N;;;;; D5A4;HANGUL SYLLABLE HYASS;Lo;0;L;;;;;N;;;;; D5A5;HANGUL SYLLABLE HYANG;Lo;0;L;;;;;N;;;;; D5A6;HANGUL SYLLABLE HYAJ;Lo;0;L;;;;;N;;;;; D5A7;HANGUL SYLLABLE HYAC;Lo;0;L;;;;;N;;;;; D5A8;HANGUL SYLLABLE HYAK;Lo;0;L;;;;;N;;;;; D5A9;HANGUL SYLLABLE HYAT;Lo;0;L;;;;;N;;;;; D5AA;HANGUL SYLLABLE HYAP;Lo;0;L;;;;;N;;;;; D5AB;HANGUL SYLLABLE HYAH;Lo;0;L;;;;;N;;;;; D5AC;HANGUL SYLLABLE HYAE;Lo;0;L;;;;;N;;;;; D5AD;HANGUL SYLLABLE HYAEG;Lo;0;L;;;;;N;;;;; D5AE;HANGUL SYLLABLE HYAEGG;Lo;0;L;;;;;N;;;;; D5AF;HANGUL SYLLABLE HYAEGS;Lo;0;L;;;;;N;;;;; D5B0;HANGUL SYLLABLE HYAEN;Lo;0;L;;;;;N;;;;; D5B1;HANGUL SYLLABLE HYAENI;Lo;0;L;;;;;N;;;;; D5B2;HANGUL SYLLABLE HYAENH;Lo;0;L;;;;;N;;;;; D5B3;HANGUL SYLLABLE HYAED;Lo;0;L;;;;;N;;;;; D5B4;HANGUL SYLLABLE HYAEL;Lo;0;L;;;;;N;;;;; D5B5;HANGUL SYLLABLE HYAELG;Lo;0;L;;;;;N;;;;; D5B6;HANGUL SYLLABLE HYAELM;Lo;0;L;;;;;N;;;;; D5B7;HANGUL SYLLABLE HYAELB;Lo;0;L;;;;;N;;;;; D5B8;HANGUL SYLLABLE HYAELS;Lo;0;L;;;;;N;;;;; D5B9;HANGUL SYLLABLE HYAELT;Lo;0;L;;;;;N;;;;; D5BA;HANGUL SYLLABLE HYAELP;Lo;0;L;;;;;N;;;;; D5BB;HANGUL SYLLABLE HYAELH;Lo;0;L;;;;;N;;;;; D5BC;HANGUL SYLLABLE HYAEM;Lo;0;L;;;;;N;;;;; D5BD;HANGUL SYLLABLE HYAEB;Lo;0;L;;;;;N;;;;; D5BE;HANGUL SYLLABLE HYAEBS;Lo;0;L;;;;;N;;;;; D5BF;HANGUL SYLLABLE HYAES;Lo;0;L;;;;;N;;;;; D5C0;HANGUL SYLLABLE HYAESS;Lo;0;L;;;;;N;;;;; D5C1;HANGUL SYLLABLE HYAENG;Lo;0;L;;;;;N;;;;; D5C2;HANGUL SYLLABLE HYAEJ;Lo;0;L;;;;;N;;;;; D5C3;HANGUL SYLLABLE HYAEC;Lo;0;L;;;;;N;;;;; D5C4;HANGUL SYLLABLE HYAEK;Lo;0;L;;;;;N;;;;; D5C5;HANGUL SYLLABLE HYAET;Lo;0;L;;;;;N;;;;; D5C6;HANGUL SYLLABLE HYAEP;Lo;0;L;;;;;N;;;;; D5C7;HANGUL SYLLABLE HYAEH;Lo;0;L;;;;;N;;;;; D5C8;HANGUL SYLLABLE HEO;Lo;0;L;;;;;N;;;;; D5C9;HANGUL SYLLABLE HEOG;Lo;0;L;;;;;N;;;;; D5CA;HANGUL SYLLABLE HEOGG;Lo;0;L;;;;;N;;;;; D5CB;HANGUL SYLLABLE HEOGS;Lo;0;L;;;;;N;;;;; D5CC;HANGUL SYLLABLE HEON;Lo;0;L;;;;;N;;;;; D5CD;HANGUL SYLLABLE HEONI;Lo;0;L;;;;;N;;;;; D5CE;HANGUL SYLLABLE HEONH;Lo;0;L;;;;;N;;;;; D5CF;HANGUL SYLLABLE HEOD;Lo;0;L;;;;;N;;;;; D5D0;HANGUL SYLLABLE HEOL;Lo;0;L;;;;;N;;;;; D5D1;HANGUL SYLLABLE HEOLG;Lo;0;L;;;;;N;;;;; D5D2;HANGUL SYLLABLE HEOLM;Lo;0;L;;;;;N;;;;; D5D3;HANGUL SYLLABLE HEOLB;Lo;0;L;;;;;N;;;;; D5D4;HANGUL SYLLABLE HEOLS;Lo;0;L;;;;;N;;;;; D5D5;HANGUL SYLLABLE HEOLT;Lo;0;L;;;;;N;;;;; D5D6;HANGUL SYLLABLE HEOLP;Lo;0;L;;;;;N;;;;; D5D7;HANGUL SYLLABLE HEOLH;Lo;0;L;;;;;N;;;;; D5D8;HANGUL SYLLABLE HEOM;Lo;0;L;;;;;N;;;;; D5D9;HANGUL SYLLABLE HEOB;Lo;0;L;;;;;N;;;;; D5DA;HANGUL SYLLABLE HEOBS;Lo;0;L;;;;;N;;;;; D5DB;HANGUL SYLLABLE HEOS;Lo;0;L;;;;;N;;;;; D5DC;HANGUL SYLLABLE HEOSS;Lo;0;L;;;;;N;;;;; D5DD;HANGUL SYLLABLE HEONG;Lo;0;L;;;;;N;;;;; D5DE;HANGUL SYLLABLE HEOJ;Lo;0;L;;;;;N;;;;; D5DF;HANGUL SYLLABLE HEOC;Lo;0;L;;;;;N;;;;; D5E0;HANGUL SYLLABLE HEOK;Lo;0;L;;;;;N;;;;; D5E1;HANGUL SYLLABLE HEOT;Lo;0;L;;;;;N;;;;; D5E2;HANGUL SYLLABLE HEOP;Lo;0;L;;;;;N;;;;; D5E3;HANGUL SYLLABLE HEOH;Lo;0;L;;;;;N;;;;; D5E4;HANGUL SYLLABLE HE;Lo;0;L;;;;;N;;;;; D5E5;HANGUL SYLLABLE HEG;Lo;0;L;;;;;N;;;;; D5E6;HANGUL SYLLABLE HEGG;Lo;0;L;;;;;N;;;;; D5E7;HANGUL SYLLABLE HEGS;Lo;0;L;;;;;N;;;;; D5E8;HANGUL SYLLABLE HEN;Lo;0;L;;;;;N;;;;; D5E9;HANGUL SYLLABLE HENI;Lo;0;L;;;;;N;;;;; D5EA;HANGUL SYLLABLE HENH;Lo;0;L;;;;;N;;;;; D5EB;HANGUL SYLLABLE HED;Lo;0;L;;;;;N;;;;; D5EC;HANGUL SYLLABLE HEL;Lo;0;L;;;;;N;;;;; D5ED;HANGUL SYLLABLE HELG;Lo;0;L;;;;;N;;;;; D5EE;HANGUL SYLLABLE HELM;Lo;0;L;;;;;N;;;;; D5EF;HANGUL SYLLABLE HELB;Lo;0;L;;;;;N;;;;; D5F0;HANGUL SYLLABLE HELS;Lo;0;L;;;;;N;;;;; D5F1;HANGUL SYLLABLE HELT;Lo;0;L;;;;;N;;;;; D5F2;HANGUL SYLLABLE HELP;Lo;0;L;;;;;N;;;;; D5F3;HANGUL SYLLABLE HELH;Lo;0;L;;;;;N;;;;; D5F4;HANGUL SYLLABLE HEM;Lo;0;L;;;;;N;;;;; D5F5;HANGUL SYLLABLE HEB;Lo;0;L;;;;;N;;;;; D5F6;HANGUL SYLLABLE HEBS;Lo;0;L;;;;;N;;;;; D5F7;HANGUL SYLLABLE HES;Lo;0;L;;;;;N;;;;; D5F8;HANGUL SYLLABLE HESS;Lo;0;L;;;;;N;;;;; D5F9;HANGUL SYLLABLE HENG;Lo;0;L;;;;;N;;;;; D5FA;HANGUL SYLLABLE HEJ;Lo;0;L;;;;;N;;;;; D5FB;HANGUL SYLLABLE HEC;Lo;0;L;;;;;N;;;;; D5FC;HANGUL SYLLABLE HEK;Lo;0;L;;;;;N;;;;; D5FD;HANGUL SYLLABLE HET;Lo;0;L;;;;;N;;;;; D5FE;HANGUL SYLLABLE HEP;Lo;0;L;;;;;N;;;;; D5FF;HANGUL SYLLABLE HEH;Lo;0;L;;;;;N;;;;; D600;HANGUL SYLLABLE HYEO;Lo;0;L;;;;;N;;;;; D601;HANGUL SYLLABLE HYEOG;Lo;0;L;;;;;N;;;;; D602;HANGUL SYLLABLE HYEOGG;Lo;0;L;;;;;N;;;;; D603;HANGUL SYLLABLE HYEOGS;Lo;0;L;;;;;N;;;;; D604;HANGUL SYLLABLE HYEON;Lo;0;L;;;;;N;;;;; D605;HANGUL SYLLABLE HYEONI;Lo;0;L;;;;;N;;;;; D606;HANGUL SYLLABLE HYEONH;Lo;0;L;;;;;N;;;;; D607;HANGUL SYLLABLE HYEOD;Lo;0;L;;;;;N;;;;; D608;HANGUL SYLLABLE HYEOL;Lo;0;L;;;;;N;;;;; D609;HANGUL SYLLABLE HYEOLG;Lo;0;L;;;;;N;;;;; D60A;HANGUL SYLLABLE HYEOLM;Lo;0;L;;;;;N;;;;; D60B;HANGUL SYLLABLE HYEOLB;Lo;0;L;;;;;N;;;;; D60C;HANGUL SYLLABLE HYEOLS;Lo;0;L;;;;;N;;;;; D60D;HANGUL SYLLABLE HYEOLT;Lo;0;L;;;;;N;;;;; D60E;HANGUL SYLLABLE HYEOLP;Lo;0;L;;;;;N;;;;; D60F;HANGUL SYLLABLE HYEOLH;Lo;0;L;;;;;N;;;;; D610;HANGUL SYLLABLE HYEOM;Lo;0;L;;;;;N;;;;; D611;HANGUL SYLLABLE HYEOB;Lo;0;L;;;;;N;;;;; D612;HANGUL SYLLABLE HYEOBS;Lo;0;L;;;;;N;;;;; D613;HANGUL SYLLABLE HYEOS;Lo;0;L;;;;;N;;;;; D614;HANGUL SYLLABLE HYEOSS;Lo;0;L;;;;;N;;;;; D615;HANGUL SYLLABLE HYEONG;Lo;0;L;;;;;N;;;;; D616;HANGUL SYLLABLE HYEOJ;Lo;0;L;;;;;N;;;;; D617;HANGUL SYLLABLE HYEOC;Lo;0;L;;;;;N;;;;; D618;HANGUL SYLLABLE HYEOK;Lo;0;L;;;;;N;;;;; D619;HANGUL SYLLABLE HYEOT;Lo;0;L;;;;;N;;;;; D61A;HANGUL SYLLABLE HYEOP;Lo;0;L;;;;;N;;;;; D61B;HANGUL SYLLABLE HYEOH;Lo;0;L;;;;;N;;;;; D61C;HANGUL SYLLABLE HYE;Lo;0;L;;;;;N;;;;; D61D;HANGUL SYLLABLE HYEG;Lo;0;L;;;;;N;;;;; D61E;HANGUL SYLLABLE HYEGG;Lo;0;L;;;;;N;;;;; D61F;HANGUL SYLLABLE HYEGS;Lo;0;L;;;;;N;;;;; D620;HANGUL SYLLABLE HYEN;Lo;0;L;;;;;N;;;;; D621;HANGUL SYLLABLE HYENI;Lo;0;L;;;;;N;;;;; D622;HANGUL SYLLABLE HYENH;Lo;0;L;;;;;N;;;;; D623;HANGUL SYLLABLE HYED;Lo;0;L;;;;;N;;;;; D624;HANGUL SYLLABLE HYEL;Lo;0;L;;;;;N;;;;; D625;HANGUL SYLLABLE HYELG;Lo;0;L;;;;;N;;;;; D626;HANGUL SYLLABLE HYELM;Lo;0;L;;;;;N;;;;; D627;HANGUL SYLLABLE HYELB;Lo;0;L;;;;;N;;;;; D628;HANGUL SYLLABLE HYELS;Lo;0;L;;;;;N;;;;; D629;HANGUL SYLLABLE HYELT;Lo;0;L;;;;;N;;;;; D62A;HANGUL SYLLABLE HYELP;Lo;0;L;;;;;N;;;;; D62B;HANGUL SYLLABLE HYELH;Lo;0;L;;;;;N;;;;; D62C;HANGUL SYLLABLE HYEM;Lo;0;L;;;;;N;;;;; D62D;HANGUL SYLLABLE HYEB;Lo;0;L;;;;;N;;;;; D62E;HANGUL SYLLABLE HYEBS;Lo;0;L;;;;;N;;;;; D62F;HANGUL SYLLABLE HYES;Lo;0;L;;;;;N;;;;; D630;HANGUL SYLLABLE HYESS;Lo;0;L;;;;;N;;;;; D631;HANGUL SYLLABLE HYENG;Lo;0;L;;;;;N;;;;; D632;HANGUL SYLLABLE HYEJ;Lo;0;L;;;;;N;;;;; D633;HANGUL SYLLABLE HYEC;Lo;0;L;;;;;N;;;;; D634;HANGUL SYLLABLE HYEK;Lo;0;L;;;;;N;;;;; D635;HANGUL SYLLABLE HYET;Lo;0;L;;;;;N;;;;; D636;HANGUL SYLLABLE HYEP;Lo;0;L;;;;;N;;;;; D637;HANGUL SYLLABLE HYEH;Lo;0;L;;;;;N;;;;; D638;HANGUL SYLLABLE HO;Lo;0;L;;;;;N;;;;; D639;HANGUL SYLLABLE HOG;Lo;0;L;;;;;N;;;;; D63A;HANGUL SYLLABLE HOGG;Lo;0;L;;;;;N;;;;; D63B;HANGUL SYLLABLE HOGS;Lo;0;L;;;;;N;;;;; D63C;HANGUL SYLLABLE HON;Lo;0;L;;;;;N;;;;; D63D;HANGUL SYLLABLE HONI;Lo;0;L;;;;;N;;;;; D63E;HANGUL SYLLABLE HONH;Lo;0;L;;;;;N;;;;; D63F;HANGUL SYLLABLE HOD;Lo;0;L;;;;;N;;;;; D640;HANGUL SYLLABLE HOL;Lo;0;L;;;;;N;;;;; D641;HANGUL SYLLABLE HOLG;Lo;0;L;;;;;N;;;;; D642;HANGUL SYLLABLE HOLM;Lo;0;L;;;;;N;;;;; D643;HANGUL SYLLABLE HOLB;Lo;0;L;;;;;N;;;;; D644;HANGUL SYLLABLE HOLS;Lo;0;L;;;;;N;;;;; D645;HANGUL SYLLABLE HOLT;Lo;0;L;;;;;N;;;;; D646;HANGUL SYLLABLE HOLP;Lo;0;L;;;;;N;;;;; D647;HANGUL SYLLABLE HOLH;Lo;0;L;;;;;N;;;;; D648;HANGUL SYLLABLE HOM;Lo;0;L;;;;;N;;;;; D649;HANGUL SYLLABLE HOB;Lo;0;L;;;;;N;;;;; D64A;HANGUL SYLLABLE HOBS;Lo;0;L;;;;;N;;;;; D64B;HANGUL SYLLABLE HOS;Lo;0;L;;;;;N;;;;; D64C;HANGUL SYLLABLE HOSS;Lo;0;L;;;;;N;;;;; D64D;HANGUL SYLLABLE HONG;Lo;0;L;;;;;N;;;;; D64E;HANGUL SYLLABLE HOJ;Lo;0;L;;;;;N;;;;; D64F;HANGUL SYLLABLE HOC;Lo;0;L;;;;;N;;;;; D650;HANGUL SYLLABLE HOK;Lo;0;L;;;;;N;;;;; D651;HANGUL SYLLABLE HOT;Lo;0;L;;;;;N;;;;; D652;HANGUL SYLLABLE HOP;Lo;0;L;;;;;N;;;;; D653;HANGUL SYLLABLE HOH;Lo;0;L;;;;;N;;;;; D654;HANGUL SYLLABLE HWA;Lo;0;L;;;;;N;;;;; D655;HANGUL SYLLABLE HWAG;Lo;0;L;;;;;N;;;;; D656;HANGUL SYLLABLE HWAGG;Lo;0;L;;;;;N;;;;; D657;HANGUL SYLLABLE HWAGS;Lo;0;L;;;;;N;;;;; D658;HANGUL SYLLABLE HWAN;Lo;0;L;;;;;N;;;;; D659;HANGUL SYLLABLE HWANI;Lo;0;L;;;;;N;;;;; D65A;HANGUL SYLLABLE HWANH;Lo;0;L;;;;;N;;;;; D65B;HANGUL SYLLABLE HWAD;Lo;0;L;;;;;N;;;;; D65C;HANGUL SYLLABLE HWAL;Lo;0;L;;;;;N;;;;; D65D;HANGUL SYLLABLE HWALG;Lo;0;L;;;;;N;;;;; D65E;HANGUL SYLLABLE HWALM;Lo;0;L;;;;;N;;;;; D65F;HANGUL SYLLABLE HWALB;Lo;0;L;;;;;N;;;;; D660;HANGUL SYLLABLE HWALS;Lo;0;L;;;;;N;;;;; D661;HANGUL SYLLABLE HWALT;Lo;0;L;;;;;N;;;;; D662;HANGUL SYLLABLE HWALP;Lo;0;L;;;;;N;;;;; D663;HANGUL SYLLABLE HWALH;Lo;0;L;;;;;N;;;;; D664;HANGUL SYLLABLE HWAM;Lo;0;L;;;;;N;;;;; D665;HANGUL SYLLABLE HWAB;Lo;0;L;;;;;N;;;;; D666;HANGUL SYLLABLE HWABS;Lo;0;L;;;;;N;;;;; D667;HANGUL SYLLABLE HWAS;Lo;0;L;;;;;N;;;;; D668;HANGUL SYLLABLE HWASS;Lo;0;L;;;;;N;;;;; D669;HANGUL SYLLABLE HWANG;Lo;0;L;;;;;N;;;;; D66A;HANGUL SYLLABLE HWAJ;Lo;0;L;;;;;N;;;;; D66B;HANGUL SYLLABLE HWAC;Lo;0;L;;;;;N;;;;; D66C;HANGUL SYLLABLE HWAK;Lo;0;L;;;;;N;;;;; D66D;HANGUL SYLLABLE HWAT;Lo;0;L;;;;;N;;;;; D66E;HANGUL SYLLABLE HWAP;Lo;0;L;;;;;N;;;;; D66F;HANGUL SYLLABLE HWAH;Lo;0;L;;;;;N;;;;; D670;HANGUL SYLLABLE HWAE;Lo;0;L;;;;;N;;;;; D671;HANGUL SYLLABLE HWAEG;Lo;0;L;;;;;N;;;;; D672;HANGUL SYLLABLE HWAEGG;Lo;0;L;;;;;N;;;;; D673;HANGUL SYLLABLE HWAEGS;Lo;0;L;;;;;N;;;;; D674;HANGUL SYLLABLE HWAEN;Lo;0;L;;;;;N;;;;; D675;HANGUL SYLLABLE HWAENI;Lo;0;L;;;;;N;;;;; D676;HANGUL SYLLABLE HWAENH;Lo;0;L;;;;;N;;;;; D677;HANGUL SYLLABLE HWAED;Lo;0;L;;;;;N;;;;; D678;HANGUL SYLLABLE HWAEL;Lo;0;L;;;;;N;;;;; D679;HANGUL SYLLABLE HWAELG;Lo;0;L;;;;;N;;;;; D67A;HANGUL SYLLABLE HWAELM;Lo;0;L;;;;;N;;;;; D67B;HANGUL SYLLABLE HWAELB;Lo;0;L;;;;;N;;;;; D67C;HANGUL SYLLABLE HWAELS;Lo;0;L;;;;;N;;;;; D67D;HANGUL SYLLABLE HWAELT;Lo;0;L;;;;;N;;;;; D67E;HANGUL SYLLABLE HWAELP;Lo;0;L;;;;;N;;;;; D67F;HANGUL SYLLABLE HWAELH;Lo;0;L;;;;;N;;;;; D680;HANGUL SYLLABLE HWAEM;Lo;0;L;;;;;N;;;;; D681;HANGUL SYLLABLE HWAEB;Lo;0;L;;;;;N;;;;; D682;HANGUL SYLLABLE HWAEBS;Lo;0;L;;;;;N;;;;; D683;HANGUL SYLLABLE HWAES;Lo;0;L;;;;;N;;;;; D684;HANGUL SYLLABLE HWAESS;Lo;0;L;;;;;N;;;;; D685;HANGUL SYLLABLE HWAENG;Lo;0;L;;;;;N;;;;; D686;HANGUL SYLLABLE HWAEJ;Lo;0;L;;;;;N;;;;; D687;HANGUL SYLLABLE HWAEC;Lo;0;L;;;;;N;;;;; D688;HANGUL SYLLABLE HWAEK;Lo;0;L;;;;;N;;;;; D689;HANGUL SYLLABLE HWAET;Lo;0;L;;;;;N;;;;; D68A;HANGUL SYLLABLE HWAEP;Lo;0;L;;;;;N;;;;; D68B;HANGUL SYLLABLE HWAEH;Lo;0;L;;;;;N;;;;; D68C;HANGUL SYLLABLE HOE;Lo;0;L;;;;;N;;;;; D68D;HANGUL SYLLABLE HOEG;Lo;0;L;;;;;N;;;;; D68E;HANGUL SYLLABLE HOEGG;Lo;0;L;;;;;N;;;;; D68F;HANGUL SYLLABLE HOEGS;Lo;0;L;;;;;N;;;;; D690;HANGUL SYLLABLE HOEN;Lo;0;L;;;;;N;;;;; D691;HANGUL SYLLABLE HOENI;Lo;0;L;;;;;N;;;;; D692;HANGUL SYLLABLE HOENH;Lo;0;L;;;;;N;;;;; D693;HANGUL SYLLABLE HOED;Lo;0;L;;;;;N;;;;; D694;HANGUL SYLLABLE HOEL;Lo;0;L;;;;;N;;;;; D695;HANGUL SYLLABLE HOELG;Lo;0;L;;;;;N;;;;; D696;HANGUL SYLLABLE HOELM;Lo;0;L;;;;;N;;;;; D697;HANGUL SYLLABLE HOELB;Lo;0;L;;;;;N;;;;; D698;HANGUL SYLLABLE HOELS;Lo;0;L;;;;;N;;;;; D699;HANGUL SYLLABLE HOELT;Lo;0;L;;;;;N;;;;; D69A;HANGUL SYLLABLE HOELP;Lo;0;L;;;;;N;;;;; D69B;HANGUL SYLLABLE HOELH;Lo;0;L;;;;;N;;;;; D69C;HANGUL SYLLABLE HOEM;Lo;0;L;;;;;N;;;;; D69D;HANGUL SYLLABLE HOEB;Lo;0;L;;;;;N;;;;; D69E;HANGUL SYLLABLE HOEBS;Lo;0;L;;;;;N;;;;; D69F;HANGUL SYLLABLE HOES;Lo;0;L;;;;;N;;;;; D6A0;HANGUL SYLLABLE HOESS;Lo;0;L;;;;;N;;;;; D6A1;HANGUL SYLLABLE HOENG;Lo;0;L;;;;;N;;;;; D6A2;HANGUL SYLLABLE HOEJ;Lo;0;L;;;;;N;;;;; D6A3;HANGUL SYLLABLE HOEC;Lo;0;L;;;;;N;;;;; D6A4;HANGUL SYLLABLE HOEK;Lo;0;L;;;;;N;;;;; D6A5;HANGUL SYLLABLE HOET;Lo;0;L;;;;;N;;;;; D6A6;HANGUL SYLLABLE HOEP;Lo;0;L;;;;;N;;;;; D6A7;HANGUL SYLLABLE HOEH;Lo;0;L;;;;;N;;;;; D6A8;HANGUL SYLLABLE HYO;Lo;0;L;;;;;N;;;;; D6A9;HANGUL SYLLABLE HYOG;Lo;0;L;;;;;N;;;;; D6AA;HANGUL SYLLABLE HYOGG;Lo;0;L;;;;;N;;;;; D6AB;HANGUL SYLLABLE HYOGS;Lo;0;L;;;;;N;;;;; D6AC;HANGUL SYLLABLE HYON;Lo;0;L;;;;;N;;;;; D6AD;HANGUL SYLLABLE HYONI;Lo;0;L;;;;;N;;;;; D6AE;HANGUL SYLLABLE HYONH;Lo;0;L;;;;;N;;;;; D6AF;HANGUL SYLLABLE HYOD;Lo;0;L;;;;;N;;;;; D6B0;HANGUL SYLLABLE HYOL;Lo;0;L;;;;;N;;;;; D6B1;HANGUL SYLLABLE HYOLG;Lo;0;L;;;;;N;;;;; D6B2;HANGUL SYLLABLE HYOLM;Lo;0;L;;;;;N;;;;; D6B3;HANGUL SYLLABLE HYOLB;Lo;0;L;;;;;N;;;;; D6B4;HANGUL SYLLABLE HYOLS;Lo;0;L;;;;;N;;;;; D6B5;HANGUL SYLLABLE HYOLT;Lo;0;L;;;;;N;;;;; D6B6;HANGUL SYLLABLE HYOLP;Lo;0;L;;;;;N;;;;; D6B7;HANGUL SYLLABLE HYOLH;Lo;0;L;;;;;N;;;;; D6B8;HANGUL SYLLABLE HYOM;Lo;0;L;;;;;N;;;;; D6B9;HANGUL SYLLABLE HYOB;Lo;0;L;;;;;N;;;;; D6BA;HANGUL SYLLABLE HYOBS;Lo;0;L;;;;;N;;;;; D6BB;HANGUL SYLLABLE HYOS;Lo;0;L;;;;;N;;;;; D6BC;HANGUL SYLLABLE HYOSS;Lo;0;L;;;;;N;;;;; D6BD;HANGUL SYLLABLE HYONG;Lo;0;L;;;;;N;;;;; D6BE;HANGUL SYLLABLE HYOJ;Lo;0;L;;;;;N;;;;; D6BF;HANGUL SYLLABLE HYOC;Lo;0;L;;;;;N;;;;; D6C0;HANGUL SYLLABLE HYOK;Lo;0;L;;;;;N;;;;; D6C1;HANGUL SYLLABLE HYOT;Lo;0;L;;;;;N;;;;; D6C2;HANGUL SYLLABLE HYOP;Lo;0;L;;;;;N;;;;; D6C3;HANGUL SYLLABLE HYOH;Lo;0;L;;;;;N;;;;; D6C4;HANGUL SYLLABLE HU;Lo;0;L;;;;;N;;;;; D6C5;HANGUL SYLLABLE HUG;Lo;0;L;;;;;N;;;;; D6C6;HANGUL SYLLABLE HUGG;Lo;0;L;;;;;N;;;;; D6C7;HANGUL SYLLABLE HUGS;Lo;0;L;;;;;N;;;;; D6C8;HANGUL SYLLABLE HUN;Lo;0;L;;;;;N;;;;; D6C9;HANGUL SYLLABLE HUNI;Lo;0;L;;;;;N;;;;; D6CA;HANGUL SYLLABLE HUNH;Lo;0;L;;;;;N;;;;; D6CB;HANGUL SYLLABLE HUD;Lo;0;L;;;;;N;;;;; D6CC;HANGUL SYLLABLE HUL;Lo;0;L;;;;;N;;;;; D6CD;HANGUL SYLLABLE HULG;Lo;0;L;;;;;N;;;;; D6CE;HANGUL SYLLABLE HULM;Lo;0;L;;;;;N;;;;; D6CF;HANGUL SYLLABLE HULB;Lo;0;L;;;;;N;;;;; D6D0;HANGUL SYLLABLE HULS;Lo;0;L;;;;;N;;;;; D6D1;HANGUL SYLLABLE HULT;Lo;0;L;;;;;N;;;;; D6D2;HANGUL SYLLABLE HULP;Lo;0;L;;;;;N;;;;; D6D3;HANGUL SYLLABLE HULH;Lo;0;L;;;;;N;;;;; D6D4;HANGUL SYLLABLE HUM;Lo;0;L;;;;;N;;;;; D6D5;HANGUL SYLLABLE HUB;Lo;0;L;;;;;N;;;;; D6D6;HANGUL SYLLABLE HUBS;Lo;0;L;;;;;N;;;;; D6D7;HANGUL SYLLABLE HUS;Lo;0;L;;;;;N;;;;; D6D8;HANGUL SYLLABLE HUSS;Lo;0;L;;;;;N;;;;; D6D9;HANGUL SYLLABLE HUNG;Lo;0;L;;;;;N;;;;; D6DA;HANGUL SYLLABLE HUJ;Lo;0;L;;;;;N;;;;; D6DB;HANGUL SYLLABLE HUC;Lo;0;L;;;;;N;;;;; D6DC;HANGUL SYLLABLE HUK;Lo;0;L;;;;;N;;;;; D6DD;HANGUL SYLLABLE HUT;Lo;0;L;;;;;N;;;;; D6DE;HANGUL SYLLABLE HUP;Lo;0;L;;;;;N;;;;; D6DF;HANGUL SYLLABLE HUH;Lo;0;L;;;;;N;;;;; D6E0;HANGUL SYLLABLE HWEO;Lo;0;L;;;;;N;;;;; D6E1;HANGUL SYLLABLE HWEOG;Lo;0;L;;;;;N;;;;; D6E2;HANGUL SYLLABLE HWEOGG;Lo;0;L;;;;;N;;;;; D6E3;HANGUL SYLLABLE HWEOGS;Lo;0;L;;;;;N;;;;; D6E4;HANGUL SYLLABLE HWEON;Lo;0;L;;;;;N;;;;; D6E5;HANGUL SYLLABLE HWEONI;Lo;0;L;;;;;N;;;;; D6E6;HANGUL SYLLABLE HWEONH;Lo;0;L;;;;;N;;;;; D6E7;HANGUL SYLLABLE HWEOD;Lo;0;L;;;;;N;;;;; D6E8;HANGUL SYLLABLE HWEOL;Lo;0;L;;;;;N;;;;; D6E9;HANGUL SYLLABLE HWEOLG;Lo;0;L;;;;;N;;;;; D6EA;HANGUL SYLLABLE HWEOLM;Lo;0;L;;;;;N;;;;; D6EB;HANGUL SYLLABLE HWEOLB;Lo;0;L;;;;;N;;;;; D6EC;HANGUL SYLLABLE HWEOLS;Lo;0;L;;;;;N;;;;; D6ED;HANGUL SYLLABLE HWEOLT;Lo;0;L;;;;;N;;;;; D6EE;HANGUL SYLLABLE HWEOLP;Lo;0;L;;;;;N;;;;; D6EF;HANGUL SYLLABLE HWEOLH;Lo;0;L;;;;;N;;;;; D6F0;HANGUL SYLLABLE HWEOM;Lo;0;L;;;;;N;;;;; D6F1;HANGUL SYLLABLE HWEOB;Lo;0;L;;;;;N;;;;; D6F2;HANGUL SYLLABLE HWEOBS;Lo;0;L;;;;;N;;;;; D6F3;HANGUL SYLLABLE HWEOS;Lo;0;L;;;;;N;;;;; D6F4;HANGUL SYLLABLE HWEOSS;Lo;0;L;;;;;N;;;;; D6F5;HANGUL SYLLABLE HWEONG;Lo;0;L;;;;;N;;;;; D6F6;HANGUL SYLLABLE HWEOJ;Lo;0;L;;;;;N;;;;; D6F7;HANGUL SYLLABLE HWEOC;Lo;0;L;;;;;N;;;;; D6F8;HANGUL SYLLABLE HWEOK;Lo;0;L;;;;;N;;;;; D6F9;HANGUL SYLLABLE HWEOT;Lo;0;L;;;;;N;;;;; D6FA;HANGUL SYLLABLE HWEOP;Lo;0;L;;;;;N;;;;; D6FB;HANGUL SYLLABLE HWEOH;Lo;0;L;;;;;N;;;;; D6FC;HANGUL SYLLABLE HWE;Lo;0;L;;;;;N;;;;; D6FD;HANGUL SYLLABLE HWEG;Lo;0;L;;;;;N;;;;; D6FE;HANGUL SYLLABLE HWEGG;Lo;0;L;;;;;N;;;;; D6FF;HANGUL SYLLABLE HWEGS;Lo;0;L;;;;;N;;;;; D700;HANGUL SYLLABLE HWEN;Lo;0;L;;;;;N;;;;; D701;HANGUL SYLLABLE HWENI;Lo;0;L;;;;;N;;;;; D702;HANGUL SYLLABLE HWENH;Lo;0;L;;;;;N;;;;; D703;HANGUL SYLLABLE HWED;Lo;0;L;;;;;N;;;;; D704;HANGUL SYLLABLE HWEL;Lo;0;L;;;;;N;;;;; D705;HANGUL SYLLABLE HWELG;Lo;0;L;;;;;N;;;;; D706;HANGUL SYLLABLE HWELM;Lo;0;L;;;;;N;;;;; D707;HANGUL SYLLABLE HWELB;Lo;0;L;;;;;N;;;;; D708;HANGUL SYLLABLE HWELS;Lo;0;L;;;;;N;;;;; D709;HANGUL SYLLABLE HWELT;Lo;0;L;;;;;N;;;;; D70A;HANGUL SYLLABLE HWELP;Lo;0;L;;;;;N;;;;; D70B;HANGUL SYLLABLE HWELH;Lo;0;L;;;;;N;;;;; D70C;HANGUL SYLLABLE HWEM;Lo;0;L;;;;;N;;;;; D70D;HANGUL SYLLABLE HWEB;Lo;0;L;;;;;N;;;;; D70E;HANGUL SYLLABLE HWEBS;Lo;0;L;;;;;N;;;;; D70F;HANGUL SYLLABLE HWES;Lo;0;L;;;;;N;;;;; D710;HANGUL SYLLABLE HWESS;Lo;0;L;;;;;N;;;;; D711;HANGUL SYLLABLE HWENG;Lo;0;L;;;;;N;;;;; D712;HANGUL SYLLABLE HWEJ;Lo;0;L;;;;;N;;;;; D713;HANGUL SYLLABLE HWEC;Lo;0;L;;;;;N;;;;; D714;HANGUL SYLLABLE HWEK;Lo;0;L;;;;;N;;;;; D715;HANGUL SYLLABLE HWET;Lo;0;L;;;;;N;;;;; D716;HANGUL SYLLABLE HWEP;Lo;0;L;;;;;N;;;;; D717;HANGUL SYLLABLE HWEH;Lo;0;L;;;;;N;;;;; D718;HANGUL SYLLABLE HWI;Lo;0;L;;;;;N;;;;; D719;HANGUL SYLLABLE HWIG;Lo;0;L;;;;;N;;;;; D71A;HANGUL SYLLABLE HWIGG;Lo;0;L;;;;;N;;;;; D71B;HANGUL SYLLABLE HWIGS;Lo;0;L;;;;;N;;;;; D71C;HANGUL SYLLABLE HWIN;Lo;0;L;;;;;N;;;;; D71D;HANGUL SYLLABLE HWINI;Lo;0;L;;;;;N;;;;; D71E;HANGUL SYLLABLE HWINH;Lo;0;L;;;;;N;;;;; D71F;HANGUL SYLLABLE HWID;Lo;0;L;;;;;N;;;;; D720;HANGUL SYLLABLE HWIL;Lo;0;L;;;;;N;;;;; D721;HANGUL SYLLABLE HWILG;Lo;0;L;;;;;N;;;;; D722;HANGUL SYLLABLE HWILM;Lo;0;L;;;;;N;;;;; D723;HANGUL SYLLABLE HWILB;Lo;0;L;;;;;N;;;;; D724;HANGUL SYLLABLE HWILS;Lo;0;L;;;;;N;;;;; D725;HANGUL SYLLABLE HWILT;Lo;0;L;;;;;N;;;;; D726;HANGUL SYLLABLE HWILP;Lo;0;L;;;;;N;;;;; D727;HANGUL SYLLABLE HWILH;Lo;0;L;;;;;N;;;;; D728;HANGUL SYLLABLE HWIM;Lo;0;L;;;;;N;;;;; D729;HANGUL SYLLABLE HWIB;Lo;0;L;;;;;N;;;;; D72A;HANGUL SYLLABLE HWIBS;Lo;0;L;;;;;N;;;;; D72B;HANGUL SYLLABLE HWIS;Lo;0;L;;;;;N;;;;; D72C;HANGUL SYLLABLE HWISS;Lo;0;L;;;;;N;;;;; D72D;HANGUL SYLLABLE HWING;Lo;0;L;;;;;N;;;;; D72E;HANGUL SYLLABLE HWIJ;Lo;0;L;;;;;N;;;;; D72F;HANGUL SYLLABLE HWIC;Lo;0;L;;;;;N;;;;; D730;HANGUL SYLLABLE HWIK;Lo;0;L;;;;;N;;;;; D731;HANGUL SYLLABLE HWIT;Lo;0;L;;;;;N;;;;; D732;HANGUL SYLLABLE HWIP;Lo;0;L;;;;;N;;;;; D733;HANGUL SYLLABLE HWIH;Lo;0;L;;;;;N;;;;; D734;HANGUL SYLLABLE HYU;Lo;0;L;;;;;N;;;;; D735;HANGUL SYLLABLE HYUG;Lo;0;L;;;;;N;;;;; D736;HANGUL SYLLABLE HYUGG;Lo;0;L;;;;;N;;;;; D737;HANGUL SYLLABLE HYUGS;Lo;0;L;;;;;N;;;;; D738;HANGUL SYLLABLE HYUN;Lo;0;L;;;;;N;;;;; D739;HANGUL SYLLABLE HYUNI;Lo;0;L;;;;;N;;;;; D73A;HANGUL SYLLABLE HYUNH;Lo;0;L;;;;;N;;;;; D73B;HANGUL SYLLABLE HYUD;Lo;0;L;;;;;N;;;;; D73C;HANGUL SYLLABLE HYUL;Lo;0;L;;;;;N;;;;; D73D;HANGUL SYLLABLE HYULG;Lo;0;L;;;;;N;;;;; D73E;HANGUL SYLLABLE HYULM;Lo;0;L;;;;;N;;;;; D73F;HANGUL SYLLABLE HYULB;Lo;0;L;;;;;N;;;;; D740;HANGUL SYLLABLE HYULS;Lo;0;L;;;;;N;;;;; D741;HANGUL SYLLABLE HYULT;Lo;0;L;;;;;N;;;;; D742;HANGUL SYLLABLE HYULP;Lo;0;L;;;;;N;;;;; D743;HANGUL SYLLABLE HYULH;Lo;0;L;;;;;N;;;;; D744;HANGUL SYLLABLE HYUM;Lo;0;L;;;;;N;;;;; D745;HANGUL SYLLABLE HYUB;Lo;0;L;;;;;N;;;;; D746;HANGUL SYLLABLE HYUBS;Lo;0;L;;;;;N;;;;; D747;HANGUL SYLLABLE HYUS;Lo;0;L;;;;;N;;;;; D748;HANGUL SYLLABLE HYUSS;Lo;0;L;;;;;N;;;;; D749;HANGUL SYLLABLE HYUNG;Lo;0;L;;;;;N;;;;; D74A;HANGUL SYLLABLE HYUJ;Lo;0;L;;;;;N;;;;; D74B;HANGUL SYLLABLE HYUC;Lo;0;L;;;;;N;;;;; D74C;HANGUL SYLLABLE HYUK;Lo;0;L;;;;;N;;;;; D74D;HANGUL SYLLABLE HYUT;Lo;0;L;;;;;N;;;;; D74E;HANGUL SYLLABLE HYUP;Lo;0;L;;;;;N;;;;; D74F;HANGUL SYLLABLE HYUH;Lo;0;L;;;;;N;;;;; D750;HANGUL SYLLABLE HEU;Lo;0;L;;;;;N;;;;; D751;HANGUL SYLLABLE HEUG;Lo;0;L;;;;;N;;;;; D752;HANGUL SYLLABLE HEUGG;Lo;0;L;;;;;N;;;;; D753;HANGUL SYLLABLE HEUGS;Lo;0;L;;;;;N;;;;; D754;HANGUL SYLLABLE HEUN;Lo;0;L;;;;;N;;;;; D755;HANGUL SYLLABLE HEUNI;Lo;0;L;;;;;N;;;;; D756;HANGUL SYLLABLE HEUNH;Lo;0;L;;;;;N;;;;; D757;HANGUL SYLLABLE HEUD;Lo;0;L;;;;;N;;;;; D758;HANGUL SYLLABLE HEUL;Lo;0;L;;;;;N;;;;; D759;HANGUL SYLLABLE HEULG;Lo;0;L;;;;;N;;;;; D75A;HANGUL SYLLABLE HEULM;Lo;0;L;;;;;N;;;;; D75B;HANGUL SYLLABLE HEULB;Lo;0;L;;;;;N;;;;; D75C;HANGUL SYLLABLE HEULS;Lo;0;L;;;;;N;;;;; D75D;HANGUL SYLLABLE HEULT;Lo;0;L;;;;;N;;;;; D75E;HANGUL SYLLABLE HEULP;Lo;0;L;;;;;N;;;;; D75F;HANGUL SYLLABLE HEULH;Lo;0;L;;;;;N;;;;; D760;HANGUL SYLLABLE HEUM;Lo;0;L;;;;;N;;;;; D761;HANGUL SYLLABLE HEUB;Lo;0;L;;;;;N;;;;; D762;HANGUL SYLLABLE HEUBS;Lo;0;L;;;;;N;;;;; D763;HANGUL SYLLABLE HEUS;Lo;0;L;;;;;N;;;;; D764;HANGUL SYLLABLE HEUSS;Lo;0;L;;;;;N;;;;; D765;HANGUL SYLLABLE HEUNG;Lo;0;L;;;;;N;;;;; D766;HANGUL SYLLABLE HEUJ;Lo;0;L;;;;;N;;;;; D767;HANGUL SYLLABLE HEUC;Lo;0;L;;;;;N;;;;; D768;HANGUL SYLLABLE HEUK;Lo;0;L;;;;;N;;;;; D769;HANGUL SYLLABLE HEUT;Lo;0;L;;;;;N;;;;; D76A;HANGUL SYLLABLE HEUP;Lo;0;L;;;;;N;;;;; D76B;HANGUL SYLLABLE HEUH;Lo;0;L;;;;;N;;;;; D76C;HANGUL SYLLABLE HYI;Lo;0;L;;;;;N;;;;; D76D;HANGUL SYLLABLE HYIG;Lo;0;L;;;;;N;;;;; D76E;HANGUL SYLLABLE HYIGG;Lo;0;L;;;;;N;;;;; D76F;HANGUL SYLLABLE HYIGS;Lo;0;L;;;;;N;;;;; D770;HANGUL SYLLABLE HYIN;Lo;0;L;;;;;N;;;;; D771;HANGUL SYLLABLE HYINI;Lo;0;L;;;;;N;;;;; D772;HANGUL SYLLABLE HYINH;Lo;0;L;;;;;N;;;;; D773;HANGUL SYLLABLE HYID;Lo;0;L;;;;;N;;;;; D774;HANGUL SYLLABLE HYIL;Lo;0;L;;;;;N;;;;; D775;HANGUL SYLLABLE HYILG;Lo;0;L;;;;;N;;;;; D776;HANGUL SYLLABLE HYILM;Lo;0;L;;;;;N;;;;; D777;HANGUL SYLLABLE HYILB;Lo;0;L;;;;;N;;;;; D778;HANGUL SYLLABLE HYILS;Lo;0;L;;;;;N;;;;; D779;HANGUL SYLLABLE HYILT;Lo;0;L;;;;;N;;;;; D77A;HANGUL SYLLABLE HYILP;Lo;0;L;;;;;N;;;;; D77B;HANGUL SYLLABLE HYILH;Lo;0;L;;;;;N;;;;; D77C;HANGUL SYLLABLE HYIM;Lo;0;L;;;;;N;;;;; D77D;HANGUL SYLLABLE HYIB;Lo;0;L;;;;;N;;;;; D77E;HANGUL SYLLABLE HYIBS;Lo;0;L;;;;;N;;;;; D77F;HANGUL SYLLABLE HYIS;Lo;0;L;;;;;N;;;;; D780;HANGUL SYLLABLE HYISS;Lo;0;L;;;;;N;;;;; D781;HANGUL SYLLABLE HYING;Lo;0;L;;;;;N;;;;; D782;HANGUL SYLLABLE HYIJ;Lo;0;L;;;;;N;;;;; D783;HANGUL SYLLABLE HYIC;Lo;0;L;;;;;N;;;;; D784;HANGUL SYLLABLE HYIK;Lo;0;L;;;;;N;;;;; D785;HANGUL SYLLABLE HYIT;Lo;0;L;;;;;N;;;;; D786;HANGUL SYLLABLE HYIP;Lo;0;L;;;;;N;;;;; D787;HANGUL SYLLABLE HYIH;Lo;0;L;;;;;N;;;;; D788;HANGUL SYLLABLE HI;Lo;0;L;;;;;N;;;;; D789;HANGUL SYLLABLE HIG;Lo;0;L;;;;;N;;;;; D78A;HANGUL SYLLABLE HIGG;Lo;0;L;;;;;N;;;;; D78B;HANGUL SYLLABLE HIGS;Lo;0;L;;;;;N;;;;; D78C;HANGUL SYLLABLE HIN;Lo;0;L;;;;;N;;;;; D78D;HANGUL SYLLABLE HINI;Lo;0;L;;;;;N;;;;; D78E;HANGUL SYLLABLE HINH;Lo;0;L;;;;;N;;;;; D78F;HANGUL SYLLABLE HID;Lo;0;L;;;;;N;;;;; D790;HANGUL SYLLABLE HIL;Lo;0;L;;;;;N;;;;; D791;HANGUL SYLLABLE HILG;Lo;0;L;;;;;N;;;;; D792;HANGUL SYLLABLE HILM;Lo;0;L;;;;;N;;;;; D793;HANGUL SYLLABLE HILB;Lo;0;L;;;;;N;;;;; D794;HANGUL SYLLABLE HILS;Lo;0;L;;;;;N;;;;; D795;HANGUL SYLLABLE HILT;Lo;0;L;;;;;N;;;;; D796;HANGUL SYLLABLE HILP;Lo;0;L;;;;;N;;;;; D797;HANGUL SYLLABLE HILH;Lo;0;L;;;;;N;;;;; D798;HANGUL SYLLABLE HIM;Lo;0;L;;;;;N;;;;; D799;HANGUL SYLLABLE HIB;Lo;0;L;;;;;N;;;;; D79A;HANGUL SYLLABLE HIBS;Lo;0;L;;;;;N;;;;; D79B;HANGUL SYLLABLE HIS;Lo;0;L;;;;;N;;;;; D79C;HANGUL SYLLABLE HISS;Lo;0;L;;;;;N;;;;; D79D;HANGUL SYLLABLE HING;Lo;0;L;;;;;N;;;;; D79E;HANGUL SYLLABLE HIJ;Lo;0;L;;;;;N;;;;; D79F;HANGUL SYLLABLE HIC;Lo;0;L;;;;;N;;;;; D7A0;HANGUL SYLLABLE HIK;Lo;0;L;;;;;N;;;;; D7A1;HANGUL SYLLABLE HIT;Lo;0;L;;;;;N;;;;; D7A2;HANGUL SYLLABLE HIP;Lo;0;L;;;;;N;;;;; D7A3;HANGUL SYLLABLE HIH;Lo;0;L;;;;;N;;;;; ���������������gnulib-20210822~d383792/tests/uniname/NameAliases.txt�����������������������������������������������0000664�0000000�0000000�00000036421�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NameAliases-9.0.0.txt # Date: 2016-01-21, 22:00:00 GMT [KW, LI] # © 2016 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see http://www.unicode.org/reports/tr44/ # # This file is a normative contributory data file in the # Unicode Character Database. # # This file defines the formal name aliases for Unicode characters. # # For informative aliases, see NamesList.txt # # The formal name aliases are divided into five types, each with a distinct label. # # Type Labels: # # 1. correction # Corrections for serious problems in the character names # 2. control # ISO 6429 names for C0 and C1 control functions, and other # commonly occurring names for control codes # 3. alternate # A few widely used alternate names for format characters # 4. figment # Several documented labels for C1 control code points which # were never actually approved in any standard # 5. abbreviation # Commonly occurring abbreviations (or acronyms) for control codes, # format characters, spaces, and variation selectors # # The formal name aliases are part of the Unicode character namespace, which # includes the character names and the names of named character sequences. # The inclusion of ISO 6429 names and other commonly occurring names and # abbreviations for control codes and format characters as formal name aliases # is to help avoid name collisions between Unicode character names and the # labels which commonly appear in text and/or in implementations such as regex, for # control codes (which for historical reasons have no Unicode character name) # or for format characters. # # For documentation, see NamesList.html and http://www.unicode.org/reports/tr44/ # # FORMAT # # Each line has three fields, as described here: # # First field: Code point # Second field: Alias # Third field: Type # # The type labels used are defined above. As for property values, comparisons # of type labels should ignore case. # # The type labels can be mapped to other strings for display, if desired. # # In case multiple aliases are assigned, additional aliases # are provided on separate lines. Parsers of this data file should # take note that the same code point can (and does) occur more than once. # # Note that currently the only instances of multiple aliases of the same # type for a single code point are either of type "control" or "abbreviation". # An alias of type "abbreviation" can, in principle, be added for any code # point, although currently aliases of type "correction" do not have # any additional aliases of type "abbreviation". Such relationships # are not enforced by stability policies. # #----------------------------------------------------------------- 0000;NULL;control 0000;NUL;abbreviation 0001;START OF HEADING;control 0001;SOH;abbreviation 0002;START OF TEXT;control 0002;STX;abbreviation 0003;END OF TEXT;control 0003;ETX;abbreviation 0004;END OF TRANSMISSION;control 0004;EOT;abbreviation 0005;ENQUIRY;control 0005;ENQ;abbreviation 0006;ACKNOWLEDGE;control 0006;ACK;abbreviation # Note that no formal name alias for the ISO 6429 "BELL" is # provided for U+0007, because of the existing name collision # with U+1F514 BELL. 0007;ALERT;control 0007;BEL;abbreviation 0008;BACKSPACE;control 0008;BS;abbreviation 0009;CHARACTER TABULATION;control 0009;HORIZONTAL TABULATION;control 0009;HT;abbreviation 0009;TAB;abbreviation 000A;LINE FEED;control 000A;NEW LINE;control 000A;END OF LINE;control 000A;LF;abbreviation 000A;NL;abbreviation 000A;EOL;abbreviation 000B;LINE TABULATION;control 000B;VERTICAL TABULATION;control 000B;VT;abbreviation 000C;FORM FEED;control 000C;FF;abbreviation 000D;CARRIAGE RETURN;control 000D;CR;abbreviation 000E;SHIFT OUT;control 000E;LOCKING-SHIFT ONE;control 000E;SO;abbreviation 000F;SHIFT IN;control 000F;LOCKING-SHIFT ZERO;control 000F;SI;abbreviation 0010;DATA LINK ESCAPE;control 0010;DLE;abbreviation 0011;DEVICE CONTROL ONE;control 0011;DC1;abbreviation 0012;DEVICE CONTROL TWO;control 0012;DC2;abbreviation 0013;DEVICE CONTROL THREE;control 0013;DC3;abbreviation 0014;DEVICE CONTROL FOUR;control 0014;DC4;abbreviation 0015;NEGATIVE ACKNOWLEDGE;control 0015;NAK;abbreviation 0016;SYNCHRONOUS IDLE;control 0016;SYN;abbreviation 0017;END OF TRANSMISSION BLOCK;control 0017;ETB;abbreviation 0018;CANCEL;control 0018;CAN;abbreviation 0019;END OF MEDIUM;control 0019;EOM;abbreviation 001A;SUBSTITUTE;control 001A;SUB;abbreviation 001B;ESCAPE;control 001B;ESC;abbreviation 001C;INFORMATION SEPARATOR FOUR;control 001C;FILE SEPARATOR;control 001C;FS;abbreviation 001D;INFORMATION SEPARATOR THREE;control 001D;GROUP SEPARATOR;control 001D;GS;abbreviation 001E;INFORMATION SEPARATOR TWO;control 001E;RECORD SEPARATOR;control 001E;RS;abbreviation 001F;INFORMATION SEPARATOR ONE;control 001F;UNIT SEPARATOR;control 001F;US;abbreviation 0020;SP;abbreviation 007F;DELETE;control 007F;DEL;abbreviation # PADDING CHARACTER and HIGH OCTET PRESET represent # architectural concepts initially proposed for early # drafts of ISO/IEC 10646-1. They were never actually # approved or standardized: hence their designation # here as the "figment" type. Formal name aliases # (and corresponding abbreviations) for these code # points are included here because these names leaked # out from the draft documents and were published in # at least one RFC whose names for code points was # implemented in Perl regex expressions. 0080;PADDING CHARACTER;figment 0080;PAD;abbreviation 0081;HIGH OCTET PRESET;figment 0081;HOP;abbreviation 0082;BREAK PERMITTED HERE;control 0082;BPH;abbreviation 0083;NO BREAK HERE;control 0083;NBH;abbreviation 0084;INDEX;control 0084;IND;abbreviation 0085;NEXT LINE;control 0085;NEL;abbreviation 0086;START OF SELECTED AREA;control 0086;SSA;abbreviation 0087;END OF SELECTED AREA;control 0087;ESA;abbreviation 0088;CHARACTER TABULATION SET;control 0088;HORIZONTAL TABULATION SET;control 0088;HTS;abbreviation 0089;CHARACTER TABULATION WITH JUSTIFICATION;control 0089;HORIZONTAL TABULATION WITH JUSTIFICATION;control 0089;HTJ;abbreviation 008A;LINE TABULATION SET;control 008A;VERTICAL TABULATION SET;control 008A;VTS;abbreviation 008B;PARTIAL LINE FORWARD;control 008B;PARTIAL LINE DOWN;control 008B;PLD;abbreviation 008C;PARTIAL LINE BACKWARD;control 008C;PARTIAL LINE UP;control 008C;PLU;abbreviation 008D;REVERSE LINE FEED;control 008D;REVERSE INDEX;control 008D;RI;abbreviation 008E;SINGLE SHIFT TWO;control 008E;SINGLE-SHIFT-2;control 008E;SS2;abbreviation 008F;SINGLE SHIFT THREE;control 008F;SINGLE-SHIFT-3;control 008F;SS3;abbreviation 0090;DEVICE CONTROL STRING;control 0090;DCS;abbreviation 0091;PRIVATE USE ONE;control 0091;PRIVATE USE-1;control 0091;PU1;abbreviation 0092;PRIVATE USE TWO;control 0092;PRIVATE USE-2;control 0092;PU2;abbreviation 0093;SET TRANSMIT STATE;control 0093;STS;abbreviation 0094;CANCEL CHARACTER;control 0094;CCH;abbreviation 0095;MESSAGE WAITING;control 0095;MW;abbreviation 0096;START OF GUARDED AREA;control 0096;START OF PROTECTED AREA;control 0096;SPA;abbreviation 0097;END OF GUARDED AREA;control 0097;END OF PROTECTED AREA;control 0097;EPA;abbreviation 0098;START OF STRING;control 0098;SOS;abbreviation # SINGLE GRAPHIC CHARACTER INTRODUCER is another # architectural concept from early drafts of ISO/IEC 10646-1 # which was never approved and standardized. 0099;SINGLE GRAPHIC CHARACTER INTRODUCER;figment 0099;SGC;abbreviation 009A;SINGLE CHARACTER INTRODUCER;control 009A;SCI;abbreviation 009B;CONTROL SEQUENCE INTRODUCER;control 009B;CSI;abbreviation 009C;STRING TERMINATOR;control 009C;ST;abbreviation 009D;OPERATING SYSTEM COMMAND;control 009D;OSC;abbreviation 009E;PRIVACY MESSAGE;control 009E;PM;abbreviation 009F;APPLICATION PROGRAM COMMAND;control 009F;APC;abbreviation 00A0;NBSP;abbreviation 00AD;SHY;abbreviation 01A2;LATIN CAPITAL LETTER GHA;correction 01A3;LATIN SMALL LETTER GHA;correction 034F;CGJ;abbreviation 061C;ALM;abbreviation 0709;SYRIAC SUBLINEAR COLON SKEWED LEFT;correction 0CDE;KANNADA LETTER LLLA;correction 0E9D;LAO LETTER FO FON;correction 0E9F;LAO LETTER FO FAY;correction 0EA3;LAO LETTER RO;correction 0EA5;LAO LETTER LO;correction 0FD0;TIBETAN MARK BKA- SHOG GI MGO RGYAN;correction 180B;FVS1;abbreviation 180C;FVS2;abbreviation 180D;FVS3;abbreviation 180E;MVS;abbreviation 200B;ZWSP;abbreviation 200C;ZWNJ;abbreviation 200D;ZWJ;abbreviation 200E;LRM;abbreviation 200F;RLM;abbreviation 202A;LRE;abbreviation 202B;RLE;abbreviation 202C;PDF;abbreviation 202D;LRO;abbreviation 202E;RLO;abbreviation 202F;NNBSP;abbreviation 205F;MMSP;abbreviation 2060;WJ;abbreviation 2066;LRI;abbreviation 2067;RLI;abbreviation 2068;FSI;abbreviation 2069;PDI;abbreviation 2118;WEIERSTRASS ELLIPTIC FUNCTION;correction 2448;MICR ON US SYMBOL;correction 2449;MICR DASH SYMBOL;correction 2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE;correction 2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE;correction A015;YI SYLLABLE ITERATION MARK;correction FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRACKET;correction FE00;VS1;abbreviation FE01;VS2;abbreviation FE02;VS3;abbreviation FE03;VS4;abbreviation FE04;VS5;abbreviation FE05;VS6;abbreviation FE06;VS7;abbreviation FE07;VS8;abbreviation FE08;VS9;abbreviation FE09;VS10;abbreviation FE0A;VS11;abbreviation FE0B;VS12;abbreviation FE0C;VS13;abbreviation FE0D;VS14;abbreviation FE0E;VS15;abbreviation FE0F;VS16;abbreviation FEFF;BYTE ORDER MARK;alternate FEFF;BOM;abbreviation FEFF;ZWNBSP;abbreviation 122D4;CUNEIFORM SIGN NU11 TENU;correction 122D5;CUNEIFORM SIGN NU11 OVER NU11 BUR OVER BUR;correction 1D0C5;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS;correction E0100;VS17;abbreviation E0101;VS18;abbreviation E0102;VS19;abbreviation E0103;VS20;abbreviation E0104;VS21;abbreviation E0105;VS22;abbreviation E0106;VS23;abbreviation E0107;VS24;abbreviation E0108;VS25;abbreviation E0109;VS26;abbreviation E010A;VS27;abbreviation E010B;VS28;abbreviation E010C;VS29;abbreviation E010D;VS30;abbreviation E010E;VS31;abbreviation E010F;VS32;abbreviation E0110;VS33;abbreviation E0111;VS34;abbreviation E0112;VS35;abbreviation E0113;VS36;abbreviation E0114;VS37;abbreviation E0115;VS38;abbreviation E0116;VS39;abbreviation E0117;VS40;abbreviation E0118;VS41;abbreviation E0119;VS42;abbreviation E011A;VS43;abbreviation E011B;VS44;abbreviation E011C;VS45;abbreviation E011D;VS46;abbreviation E011E;VS47;abbreviation E011F;VS48;abbreviation E0120;VS49;abbreviation E0121;VS50;abbreviation E0122;VS51;abbreviation E0123;VS52;abbreviation E0124;VS53;abbreviation E0125;VS54;abbreviation E0126;VS55;abbreviation E0127;VS56;abbreviation E0128;VS57;abbreviation E0129;VS58;abbreviation E012A;VS59;abbreviation E012B;VS60;abbreviation E012C;VS61;abbreviation E012D;VS62;abbreviation E012E;VS63;abbreviation E012F;VS64;abbreviation E0130;VS65;abbreviation E0131;VS66;abbreviation E0132;VS67;abbreviation E0133;VS68;abbreviation E0134;VS69;abbreviation E0135;VS70;abbreviation E0136;VS71;abbreviation E0137;VS72;abbreviation E0138;VS73;abbreviation E0139;VS74;abbreviation E013A;VS75;abbreviation E013B;VS76;abbreviation E013C;VS77;abbreviation E013D;VS78;abbreviation E013E;VS79;abbreviation E013F;VS80;abbreviation E0140;VS81;abbreviation E0141;VS82;abbreviation E0142;VS83;abbreviation E0143;VS84;abbreviation E0144;VS85;abbreviation E0145;VS86;abbreviation E0146;VS87;abbreviation E0147;VS88;abbreviation E0148;VS89;abbreviation E0149;VS90;abbreviation E014A;VS91;abbreviation E014B;VS92;abbreviation E014C;VS93;abbreviation E014D;VS94;abbreviation E014E;VS95;abbreviation E014F;VS96;abbreviation E0150;VS97;abbreviation E0151;VS98;abbreviation E0152;VS99;abbreviation E0153;VS100;abbreviation E0154;VS101;abbreviation E0155;VS102;abbreviation E0156;VS103;abbreviation E0157;VS104;abbreviation E0158;VS105;abbreviation E0159;VS106;abbreviation E015A;VS107;abbreviation E015B;VS108;abbreviation E015C;VS109;abbreviation E015D;VS110;abbreviation E015E;VS111;abbreviation E015F;VS112;abbreviation E0160;VS113;abbreviation E0161;VS114;abbreviation E0162;VS115;abbreviation E0163;VS116;abbreviation E0164;VS117;abbreviation E0165;VS118;abbreviation E0166;VS119;abbreviation E0167;VS120;abbreviation E0168;VS121;abbreviation E0169;VS122;abbreviation E016A;VS123;abbreviation E016B;VS124;abbreviation E016C;VS125;abbreviation E016D;VS126;abbreviation E016E;VS127;abbreviation E016F;VS128;abbreviation E0170;VS129;abbreviation E0171;VS130;abbreviation E0172;VS131;abbreviation E0173;VS132;abbreviation E0174;VS133;abbreviation E0175;VS134;abbreviation E0176;VS135;abbreviation E0177;VS136;abbreviation E0178;VS137;abbreviation E0179;VS138;abbreviation E017A;VS139;abbreviation E017B;VS140;abbreviation E017C;VS141;abbreviation E017D;VS142;abbreviation E017E;VS143;abbreviation E017F;VS144;abbreviation E0180;VS145;abbreviation E0181;VS146;abbreviation E0182;VS147;abbreviation E0183;VS148;abbreviation E0184;VS149;abbreviation E0185;VS150;abbreviation E0186;VS151;abbreviation E0187;VS152;abbreviation E0188;VS153;abbreviation E0189;VS154;abbreviation E018A;VS155;abbreviation E018B;VS156;abbreviation E018C;VS157;abbreviation E018D;VS158;abbreviation E018E;VS159;abbreviation E018F;VS160;abbreviation E0190;VS161;abbreviation E0191;VS162;abbreviation E0192;VS163;abbreviation E0193;VS164;abbreviation E0194;VS165;abbreviation E0195;VS166;abbreviation E0196;VS167;abbreviation E0197;VS168;abbreviation E0198;VS169;abbreviation E0199;VS170;abbreviation E019A;VS171;abbreviation E019B;VS172;abbreviation E019C;VS173;abbreviation E019D;VS174;abbreviation E019E;VS175;abbreviation E019F;VS176;abbreviation E01A0;VS177;abbreviation E01A1;VS178;abbreviation E01A2;VS179;abbreviation E01A3;VS180;abbreviation E01A4;VS181;abbreviation E01A5;VS182;abbreviation E01A6;VS183;abbreviation E01A7;VS184;abbreviation E01A8;VS185;abbreviation E01A9;VS186;abbreviation E01AA;VS187;abbreviation E01AB;VS188;abbreviation E01AC;VS189;abbreviation E01AD;VS190;abbreviation E01AE;VS191;abbreviation E01AF;VS192;abbreviation E01B0;VS193;abbreviation E01B1;VS194;abbreviation E01B2;VS195;abbreviation E01B3;VS196;abbreviation E01B4;VS197;abbreviation E01B5;VS198;abbreviation E01B6;VS199;abbreviation E01B7;VS200;abbreviation E01B8;VS201;abbreviation E01B9;VS202;abbreviation E01BA;VS203;abbreviation E01BB;VS204;abbreviation E01BC;VS205;abbreviation E01BD;VS206;abbreviation E01BE;VS207;abbreviation E01BF;VS208;abbreviation E01C0;VS209;abbreviation E01C1;VS210;abbreviation E01C2;VS211;abbreviation E01C3;VS212;abbreviation E01C4;VS213;abbreviation E01C5;VS214;abbreviation E01C6;VS215;abbreviation E01C7;VS216;abbreviation E01C8;VS217;abbreviation E01C9;VS218;abbreviation E01CA;VS219;abbreviation E01CB;VS220;abbreviation E01CC;VS221;abbreviation E01CD;VS222;abbreviation E01CE;VS223;abbreviation E01CF;VS224;abbreviation E01D0;VS225;abbreviation E01D1;VS226;abbreviation E01D2;VS227;abbreviation E01D3;VS228;abbreviation E01D4;VS229;abbreviation E01D5;VS230;abbreviation E01D6;VS231;abbreviation E01D7;VS232;abbreviation E01D8;VS233;abbreviation E01D9;VS234;abbreviation E01DA;VS235;abbreviation E01DB;VS236;abbreviation E01DC;VS237;abbreviation E01DD;VS238;abbreviation E01DE;VS239;abbreviation E01DF;VS240;abbreviation E01E0;VS241;abbreviation E01E1;VS242;abbreviation E01E2;VS243;abbreviation E01E3;VS244;abbreviation E01E4;VS245;abbreviation E01E5;VS246;abbreviation E01E6;VS247;abbreviation E01E7;VS248;abbreviation E01E8;VS249;abbreviation E01E9;VS250;abbreviation E01EA;VS251;abbreviation E01EB;VS252;abbreviation E01EC;VS253;abbreviation E01ED;VS254;abbreviation E01EE;VS255;abbreviation E01EF;VS256;abbreviation # EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniname/UnicodeData.txt�����������������������������������������������0000664�0000000�0000000�00006335653�14110572173�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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;;;; 0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; 0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; 0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; 0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;<control>;Cc;0;BN;;;;;N;BELL;;;; 0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; 0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;; 000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;; 000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;; 000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;; 000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;; 000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;; 000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;; 0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; 0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; 0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; 0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; 0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; 0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; 0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;; 0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;; 001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;; 001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;; 001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;; 001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;; 001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;; 001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;Po;0;ON;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;Sm;0;ON;;;;;N;;;;; 007F;<control>;Cc;0;BN;;;;;N;DELETE;;;; 0080;<control>;Cc;0;BN;;;;;N;;;;; 0081;<control>;Cc;0;BN;;;;;N;;;;; 0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; 0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;; 0084;<control>;Cc;0;BN;;;;;N;;;;; 0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;; 0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; 0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; 0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; 0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; 008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; 008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;; 008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;; 008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; 008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; 008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; 0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; 0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; 0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; 0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; 0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; 0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; 0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; 0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; 0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;; 0099;<control>;Cc;0;BN;;;;;N;;;;; 009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; 009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; 009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; 009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; 009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; 009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; 00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Lo;0;L;<super> 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C 00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L;<super> 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB 01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2 01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219; 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B; 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E 0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; 0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; 0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; 0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; 0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; 023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; 023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; 023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B 023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; 023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; 023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E 0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F 0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; 0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; 0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; 0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; 0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; 0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; 0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; 024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A 024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; 024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C 024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; 024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;A7AB;;A7AB 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;A7B1;;A7B1 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;; 02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; 02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;;;; 02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; 02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; 02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; 02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; 02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; 02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; 02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; 02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; 02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; 02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; 02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;; 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; 0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; 0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; 0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; 0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; 0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; 035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; 035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; 0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; 0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; 0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; 0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; 0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; 0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; 0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; 036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; 036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; 036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; 036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; 036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; 036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; 0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; 0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; 0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;; 0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; 0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD 037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE 037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;; 037F;GREEK CAPITAL LETTER YOT;Lu;0;L;;;;;N;;;;03F3; 0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; 03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9; 03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A 03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;037F;;037F 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8; 03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395 03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; 03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; 03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2; 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA 03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; 03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; 03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; 03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; 048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; 04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; 04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD 04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; 04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; 04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA 04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; 04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC 04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; 04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; 0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; 0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; 0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; 0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; 050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A 050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E 0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; 0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; 0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; 0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; 0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; 0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; 051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A 051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; 051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C 051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; 051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E 0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; 0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; 0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525; 0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524 0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527; 0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526 0528;CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK;Lu;0;L;;;;;N;;;;0529; 0529;CYRILLIC SMALL LETTER EN WITH LEFT HOOK;Ll;0;L;;;;;N;;;0528;;0528 052A;CYRILLIC CAPITAL LETTER DZZHE;Lu;0;L;;;;;N;;;;052B; 052B;CYRILLIC SMALL LETTER DZZHE;Ll;0;L;;;;;N;;;052A;;052A 052C;CYRILLIC CAPITAL LETTER DCHE;Lu;0;L;;;;;N;;;;052D; 052D;CYRILLIC SMALL LETTER DCHE;Ll;0;L;;;;;N;;;052C;;052C 052E;CYRILLIC CAPITAL LETTER EL WITH DESCENDER;Lu;0;L;;;;;N;;;;052F; 052F;CYRILLIC SMALL LETTER EL WITH DESCENDER;Ll;0;L;;;;;N;;;052E;;052E 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; 058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058E;LEFT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;; 058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;; 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;; 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; 05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;; 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; 05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;; 05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; 05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; 05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; 05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; 0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; 0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; 0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; 0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;; 0605;ARABIC NUMBER MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; 0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; 0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; 0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; 060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; 0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; 0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; 0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; 0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; 0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; 0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; 0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; 0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; 0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; 063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; 065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; 065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; 065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; 065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; 066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; 066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; 06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; 06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; 070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;; 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; 072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; 072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; 072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; 0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; 0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; 0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; 075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; 075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; 0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; 0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; 076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; 076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; 076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; 0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; 0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; 077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; 077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; 077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; 077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; 077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; 07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; 07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; 07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; 07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; 07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; 07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; 07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; 07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; 07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; 07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; 07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; 07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; 07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; 07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; 07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; 07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; 07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; 07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; 07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; 07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; 07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; 07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; 07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; 07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; 07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; 07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; 07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; 07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; 07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; 07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; 07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; 07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; 07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; 07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; 07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; 07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; 07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; 07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; 07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; 07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; 07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; 07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; 07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; 07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; 0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;; 0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;; 0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;; 0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;; 0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;; 0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;; 0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;; 0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;; 0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;; 0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;; 080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;; 080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;; 080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;; 080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;; 080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;; 080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;; 0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;; 0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;; 0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;; 0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;; 0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;; 0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;; 0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;; 0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;; 0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;; 0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;; 081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;; 081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;; 081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;; 081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; 081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;; 081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;; 0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;; 0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;; 0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;; 0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;; 0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;; 0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;; 0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;; 0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;; 0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;; 0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;; 082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;; 082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;; 082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;; 0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;; 0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;; 0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;; 0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;; 0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;; 0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;; 0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;; 0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;; 0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;; 0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;; 083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;; 083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;; 083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;; 083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;; 083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;; 0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;; 0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;; 0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;; 0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;; 0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;; 0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;; 0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;; 0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;; 0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;; 0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;; 084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;; 084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;; 084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;; 084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;; 084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;; 084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;; 0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;; 0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;; 0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;; 0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;; 0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;; 0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;; 0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;; 0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;; 0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;; 0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;; 085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;; 085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;; 085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;; 08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;; 08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;; 08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;; 08AD;ARABIC LETTER LOW ALEF;Lo;0;AL;;;;;N;;;;; 08AE;ARABIC LETTER DAL WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08AF;ARABIC LETTER SAD WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;; 08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;; 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; 08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;; 08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;; 08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;; 08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; 08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;; 08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;; 08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;; 08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;; 08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;; 08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;; 08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;; 08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;; 08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;; 08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;; 08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;; 08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;; 08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;; 08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;; 08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;; 08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;; 08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;; 08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;; 08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;; 08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;; 08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;; 08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;; 08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;; 08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;; 08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;; 08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;; 08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;; 08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;; 08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;; 08FF;ARABIC MARK SIDEWAYS NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; 0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; 093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; 094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;; 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;; 0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; 0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; 0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;; 0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;; 0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;; 0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;; 0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;; 0978;DEVANAGARI LETTER MARWARI DDA;Lo;0;L;;;;;N;;;;; 0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;; 097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;; 097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; 097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; 097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; 097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; 0980;BENGALI ANJI;Lo;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;; 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;; 0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; 0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; 0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; 0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;; 0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;; 0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;; 0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;; 0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;; 0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;; 0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;; 0C00;TELUGU SIGN COMBINING CANDRABINDU ABOVE;Mn;0;NSM;;;;;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C34;TELUGU LETTER LLLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; 0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; 0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; 0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; 0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; 0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; 0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;; 0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;; 0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;; 0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;; 0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;; 0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; 0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;; 0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;; 0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;; 0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;; 0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;; 0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;; 0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; 0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; 0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; 0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; 0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; 0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; 0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; 0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; 0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; 0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; 0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; 0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; 0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; 0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DE6;SINHALA LITH DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0DE7;SINHALA LITH DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0DE8;SINHALA LITH DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0DE9;SINHALA LITH DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0DEA;SINHALA LITH DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0DEB;SINHALA LITH DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0DEC;SINHALA LITH DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0DED;SINHALA LITH DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0DEE;SINHALA LITH DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0DEF;SINHALA LITH DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;; 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;; 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;; 0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;; 0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;; 0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;; 0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; 0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;; 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;; 0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;; 0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;; 0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;; 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;; 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;; 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;; 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;; 0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;; 0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;; 0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;; 0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;; 0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; 0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; 0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; 0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; 1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; 1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; 102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; 1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; 1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; 103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; 103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; 103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; 105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; 105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; 105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; 105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; 105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; 1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; 1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; 1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; 1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; 1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; 1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; 1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; 1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; 1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; 106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; 106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; 106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; 106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; 106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; 106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; 1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; 1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; 1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; 1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; 1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; 1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; 1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; 1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; 1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; 1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; 107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; 107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; 107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; 107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; 107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; 107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; 1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; 1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; 1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; 1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; 1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; 1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; 1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; 1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; 1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; 108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; 108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; 108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; 108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; 108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; 108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; 1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;; 109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;; 109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;; 109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;; 109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; 109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25; 10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27; 10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D; 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; 10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; 10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; 10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; 10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; 10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; 10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; 10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; 10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; 10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; 10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; 10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; 10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; 10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; 10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; 10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; 10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; 10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; 10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; 10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; 10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; 10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; 10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; 10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; 10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; 10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; 10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; 10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; 10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; 10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; 10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; 10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; 10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; 10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; 10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; 10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; 10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; 10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; 10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;; 10FD;GEORGIAN LETTER AEN;Lo;0;L;;;;;N;;;;; 10FE;GEORGIAN LETTER HARD SIGN;Lo;0;L;;;;;N;;;;; 10FF;GEORGIAN LETTER LABIAL SIGN;Lo;0;L;;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;; 115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; 11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;; 11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;; 11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;; 11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;; 11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;; 11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;; 11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;; 11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;; 11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; 11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; 1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; 1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; 1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; 12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; 12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; 12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; 130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; 131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; 1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; 135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; 135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; 136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; 136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; 136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; 136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; 136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; 136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; 1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; 1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; 1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; 1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; 1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; 1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; 1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; 1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; 1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; 1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; 1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; 138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; 138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; 138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; 138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; 138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; 138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; 1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; 1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; 1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; 1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; 1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; 1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; 1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; 1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; 1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; 1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; 13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70; 13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71; 13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72; 13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73; 13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74; 13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75; 13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76; 13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77; 13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78; 13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79; 13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A; 13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B; 13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C; 13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D; 13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E; 13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F; 13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80; 13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81; 13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82; 13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83; 13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84; 13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85; 13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86; 13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87; 13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88; 13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89; 13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A; 13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B; 13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C; 13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D; 13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E; 13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F; 13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90; 13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91; 13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92; 13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93; 13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94; 13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95; 13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96; 13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97; 13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98; 13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99; 13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A; 13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B; 13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C; 13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D; 13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E; 13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F; 13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0; 13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1; 13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2; 13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3; 13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4; 13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5; 13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6; 13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7; 13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8; 13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9; 13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA; 13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB; 13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC; 13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD; 13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE; 13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF; 13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0; 13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1; 13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2; 13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3; 13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4; 13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5; 13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6; 13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7; 13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8; 13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9; 13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA; 13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB; 13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC; 13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD; 13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE; 13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF; 13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8; 13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9; 13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA; 13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB; 13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC; 13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD; 13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0 13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1 13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2 13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3 13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4 13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5 1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;; 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; 166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; 1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;; 1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;; 1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;; 167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;; 167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;; 167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;; 167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;; 167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;; 167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;; 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; 16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;; 16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;; 16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;; 16F1;RUNIC LETTER K;Lo;0;L;;;;;N;;;;; 16F2;RUNIC LETTER SH;Lo;0;L;;;;;N;;;;; 16F3;RUNIC LETTER OO;Lo;0;L;;;;;N;;;;; 16F4;RUNIC LETTER FRANKS CASKET OS;Lo;0;L;;;;;N;;;;; 16F5;RUNIC LETTER FRANKS CASKET IS;Lo;0;L;;;;;N;;;;; 16F6;RUNIC LETTER FRANKS CASKET EH;Lo;0;L;;;;;N;;;;; 16F7;RUNIC LETTER FRANKS CASKET AC;Lo;0;L;;;;;N;;;;; 16F8;RUNIC LETTER FRANKS CASKET AESC;Lo;0;L;;;;;N;;;;; 1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; 1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; 1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; 1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; 1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; 1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; 1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; 1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; 1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; 1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; 1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; 1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; 1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; 1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; 1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; 1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; 1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; 1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; 172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; 172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; 172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; 172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; 172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; 172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; 1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; 1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; 1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; 1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; 1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; 1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; 1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; 1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; 1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; 1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; 174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; 174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; 174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; 174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; 174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; 174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; 1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; 1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; 1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; 1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; 1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; 1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; 1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; 1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; 1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; 1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; 1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; 1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; 176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; 176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; 176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; 176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; 176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; 1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; 1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; 17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;; 17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;; 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; 17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; 17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; 17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; 17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; 17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; 17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; 17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; 17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; 17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; 17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; 17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; 17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; 1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;; 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; 18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; 18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;; 18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;; 18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;; 18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;; 18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;; 18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;; 18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;; 18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;; 18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;; 18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;; 18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;; 18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;; 18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;; 18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;; 18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;; 18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;; 18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;; 18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;; 18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;; 18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;; 18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;; 18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;; 18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;; 18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;; 18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;; 18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;; 18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;; 18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;; 18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;; 18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;; 18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;; 18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;; 18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;; 18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;; 18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;; 18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;; 18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;; 18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;; 18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;; 18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;; 18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;; 18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;; 18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;; 18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;; 18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;; 18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;; 18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;; 18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;; 18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;; 18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;; 18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;; 18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;; 18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;; 18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;; 18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;; 18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;; 18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;; 18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;; 18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;; 18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;; 18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;; 18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;; 18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;; 18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;; 18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;; 18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;; 18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;; 18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;; 18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;; 18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;; 1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; 1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; 1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; 1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; 1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; 1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; 1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; 1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; 1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; 1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; 190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; 190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; 190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; 190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; 190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; 190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; 1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; 1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; 1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; 1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; 1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; 1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; 1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; 1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; 1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; 1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; 191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; 191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; 191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; 191D;LIMBU LETTER GYAN;Lo;0;L;;;;;N;;;;; 191E;LIMBU LETTER TRA;Lo;0;L;;;;;N;;;;; 1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; 1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; 1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; 1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; 1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; 1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; 1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; 1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; 1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; 1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; 193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; 193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; 1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; 1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; 1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; 1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; 1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; 1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; 1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; 1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; 1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; 1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; 1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; 1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; 195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; 195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; 195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; 195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; 195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; 195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; 1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; 1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; 1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; 1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; 1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; 1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; 1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; 1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; 1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; 1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; 196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; 196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; 196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; 196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; 1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; 1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; 1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; 1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; 1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; 1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; 1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; 1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; 1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; 1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; 198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; 198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; 198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; 1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; 1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; 1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; 199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; 199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; 199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; 199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; 199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; 19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; 19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; 19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; 19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; 19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; 19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; 19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; 19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; 19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; 19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;; 19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;; 19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;; 19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;; 19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;; 19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;; 19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;; 19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;; 19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;; 19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;; 19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;; 19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;; 19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;; 19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;; 19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;; 19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; 19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; 19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; 19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; 19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;; 19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;; 19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;; 19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;; 19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;; 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; 19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; 19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; 19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; 19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; 19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; 19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; 19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; 19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; 19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; 19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; 19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; 19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; 19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; 19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; 19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; 19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; 19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; 19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; 19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; 19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; 19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; 19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; 19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; 19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; 19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; 19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; 1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; 1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; 1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; 1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; 1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; 1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; 1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; 1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; 1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1A1B;BUGINESE VOWEL SIGN AE;Mn;0;NSM;;;;;N;;;;; 1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; 1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; 1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;; 1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;; 1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;; 1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;; 1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;; 1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;; 1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;; 1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;; 1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;; 1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;; 1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;; 1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;; 1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;; 1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;; 1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;; 1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;; 1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;; 1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;; 1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;; 1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;; 1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;; 1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;; 1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;; 1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;; 1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;; 1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; 1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;; 1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;; 1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;; 1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;; 1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;; 1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;; 1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;; 1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;; 1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;; 1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;; 1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;; 1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;; 1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;; 1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;; 1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;; 1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;; 1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;; 1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;; 1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;; 1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;; 1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;; 1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;; 1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;; 1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;; 1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;; 1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;; 1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;; 1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;; 1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;; 1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;; 1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;; 1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;; 1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;; 1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;; 1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;; 1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; 1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; 1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;; 1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; 1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;; 1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;; 1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;; 1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;; 1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;; 1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;; 1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;; 1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;; 1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;; 1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;; 1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;; 1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;; 1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;; 1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;; 1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;; 1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;; 1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;; 1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;; 1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;; 1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;; 1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;; 1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;; 1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;; 1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;; 1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;; 1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;; 1AB0;COMBINING DOUBLED CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;;;;; 1AB1;COMBINING DIAERESIS-RING;Mn;230;NSM;;;;;N;;;;; 1AB2;COMBINING INFINITY;Mn;230;NSM;;;;;N;;;;; 1AB3;COMBINING DOWNWARDS ARROW;Mn;230;NSM;;;;;N;;;;; 1AB4;COMBINING TRIPLE DOT;Mn;230;NSM;;;;;N;;;;; 1AB5;COMBINING X-X BELOW;Mn;220;NSM;;;;;N;;;;; 1AB6;COMBINING WIGGLY LINE BELOW;Mn;220;NSM;;;;;N;;;;; 1AB7;COMBINING OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB8;COMBINING DOUBLE OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;; 1AB9;COMBINING LIGHT CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABA;COMBINING STRONG CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;; 1ABB;COMBINING PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;; 1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;; 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; 1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;; 1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;; 1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;; 1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;; 1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;; 1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;; 1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;; 1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;; 1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;; 1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;; 1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;; 1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;; 1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;; 1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;; 1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;; 1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;; 1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;; 1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;; 1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;; 1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;; 1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;; 1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; 1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;; 1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;; 1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;; 1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;; 1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;; 1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;; 1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;; 1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;; 1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;; 1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;; 1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;; 1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; 1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;; 1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;; 1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;; 1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;; 1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;; 1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; 1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;; 1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;; 1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;; 1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; 1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;; 1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;; 1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; 1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; 1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; 1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;; 1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;; 1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;; 1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;; 1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;; 1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;; 1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;; 1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; 1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; 1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; 1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; 1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; 1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; 1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; 1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; 1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; 1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; 1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; 1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; 1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; 1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; 1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; 1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; 1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; 1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; 1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; 1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; 1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; 1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; 1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; 1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; 1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; 1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; 1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; 1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; 1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; 1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; 1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; 1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; 1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; 1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; 1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; 1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; 1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; 1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; 1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; 1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; 1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; 1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; 1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; 1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; 1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; 1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; 1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; 1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; 1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; 1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; 1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; 1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; 1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; 1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; 1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; 1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mn;0;NSM;;;;;N;;;;; 1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mn;0;NSM;;;;;N;;;;; 1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; 1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; 1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;; 1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;; 1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;; 1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;; 1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;; 1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;; 1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;; 1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;; 1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;; 1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;; 1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;; 1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;; 1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;; 1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;; 1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;; 1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;; 1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;; 1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;; 1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;; 1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;; 1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;; 1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;; 1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;; 1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;; 1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;; 1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;; 1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;; 1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;; 1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;; 1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;; 1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;; 1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;; 1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;; 1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;; 1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;; 1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;; 1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;; 1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;; 1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;; 1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;; 1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;; 1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;; 1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;; 1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;; 1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;; 1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;; 1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;; 1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;; 1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;; 1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; 1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;; 1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;; 1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;; 1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;; 1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;; 1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;; 1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;; 1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; 1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; 1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; 1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; 1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; 1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; 1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; 1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; 1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; 1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; 1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; 1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; 1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; 1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; 1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; 1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; 1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; 1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; 1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; 1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; 1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; 1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; 1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; 1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; 1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; 1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; 1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; 1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; 1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; 1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; 1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; 1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; 1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; 1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; 1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; 1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; 1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; 1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; 1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; 1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; 1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; 1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; 1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; 1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; 1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; 1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; 1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; 1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; 1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; 1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; 1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; 1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; 1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; 1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; 1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; 1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; 1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; 1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; 1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; 1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; 1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; 1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; 1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; 1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; 1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; 1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; 1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; 1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; 1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; 1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; 1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; 1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; 1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; 1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; 1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; 1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; 1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; 1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; 1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; 1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; 1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; 1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; 1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; 1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; 1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; 1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; 1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; 1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412 1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414 1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E 1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421 1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422 1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422 1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462 1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A 1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;; 1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;; 1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;; 1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;; 1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;; 1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;; 1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;; 1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;; 1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;; 1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;; 1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;; 1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;; 1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;; 1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; 1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;; 1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;; 1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;; 1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;; 1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; 1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;; 1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;; 1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;; 1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; 1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; 1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; 1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;; 1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;; 1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;; 1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;; 1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;; 1CF2;VEDIC SIGN ARDHAVISARGA;Mc;0;L;;;;;N;;;;; 1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Mc;0;L;;;;;N;;;;; 1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; 1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; 1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; 1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; 1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; 1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; 1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; 1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; 1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; 1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; 1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; 1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; 1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; 1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; 1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; 1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; 1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; 1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; 1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; 1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; 1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; 1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; 1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; 1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; 1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; 1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; 1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; 1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; 1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; 1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; 1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; 1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; 1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; 1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; 1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; 1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; 1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; 1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; 1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; 1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; 1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; 1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; 1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;; 1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;; 1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;; 1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; 1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;; 1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;; 1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;; 1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;; 1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;; 1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;; 1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;; 1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;; 1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;; 1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;; 1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;; 1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; 1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;; 1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;; 1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;; 1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;; 1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;; 1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;; 1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;; 1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;; 1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;; 1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;; 1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;; 1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;; 1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;; 1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;; 1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;; 1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;; 1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; 1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;; 1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; 1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;; 1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;; 1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;; 1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;; 1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;; 1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;; 1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;; 1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;; 1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;; 1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;; 1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;; 1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;; 1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;; 1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;; 1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;; 1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;; 1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;; 1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;; 1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;; 1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0069;;;;N;;;;; 1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L;<sub> 0072;;;;N;;;;; 1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0075;;;;N;;;;; 1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L;<sub> 0076;;;;N;;;;; 1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L;<sub> 03B2;;;;N;;;;; 1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L;<sub> 03B3;;;;N;;;;; 1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L;<sub> 03C1;;;;N;;;;; 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L;<sub> 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L;<sub> 03C7;;;;N;;;;; 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; 1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; 1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;; 1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D 1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; 1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; 1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; 1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; 1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; 1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; 1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;; 1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;; 1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;; 1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;; 1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; 1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;; 1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;; 1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;; 1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;; 1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;; 1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;; 1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;; 1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;; 1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;; 1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;; 1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;; 1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;; 1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;; 1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;; 1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;; 1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;; 1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;; 1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;; 1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;; 1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;; 1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;; 1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;; 1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;; 1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;; 1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;; 1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;; 1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;; 1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;; 1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;; 1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;; 1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;; 1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;; 1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; 1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; 1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; 1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; 1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; 1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; 1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; 1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; 1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; 1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; 1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; 1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; 1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; 1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; 1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; 1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; 1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; 1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; 1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; 1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; 1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; 1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; 1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; 1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; 1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; 1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; 1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; 1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; 1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; 1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; 1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; 1DE7;COMBINING LATIN SMALL LETTER ALPHA;Mn;230;NSM;;;;;N;;;;; 1DE8;COMBINING LATIN SMALL LETTER B;Mn;230;NSM;;;;;N;;;;; 1DE9;COMBINING LATIN SMALL LETTER BETA;Mn;230;NSM;;;;;N;;;;; 1DEA;COMBINING LATIN SMALL LETTER SCHWA;Mn;230;NSM;;;;;N;;;;; 1DEB;COMBINING LATIN SMALL LETTER F;Mn;230;NSM;;;;;N;;;;; 1DEC;COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Mn;230;NSM;;;;;N;;;;; 1DED;COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DEE;COMBINING LATIN SMALL LETTER P;Mn;230;NSM;;;;;N;;;;; 1DEF;COMBINING LATIN SMALL LETTER ESH;Mn;230;NSM;;;;;N;;;;; 1DF0;COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;; 1DF1;COMBINING LATIN SMALL LETTER W;Mn;230;NSM;;;;;N;;;;; 1DF2;COMBINING LATIN SMALL LETTER A WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;; 1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; 1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; 1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; 1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; 1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; 1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; 1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA 1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; 1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC 1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; 1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; 202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;; 203D;INTERROBANG;Po;0;ON;;;;;N;;;;; 203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;Pc;0;ON;;;;;N;;;;; 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;; 2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;; 2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;; 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; 204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; 2050;CLOSE UP;Po;0;ON;;;;;N;;;;; 2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; 2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; 2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;; 2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; 205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; 205D;TRICOLON;Po;0;ON;;;;;N;;;;; 205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; 2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; 2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; 2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; 2066;LEFT-TO-RIGHT ISOLATE;Cf;0;LRI;;;;;N;;;;; 2067;RIGHT-TO-LEFT ISOLATE;Cf;0;RLI;;;;;N;;;;; 2068;FIRST STRONG ISOLATE;Cf;0;FSI;;;;;N;;;;; 2069;POP DIRECTIONAL ISOLATE;Cf;0;PDI;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L;<super> 0069;;;;N;;;;; 2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L;<super> 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;; 2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;; 2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;; 2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;; 2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;; 2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L;<sub> 0068;;;;N;;;;; 2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L;<sub> 006B;;;;N;;;;; 2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L;<sub> 006C;;;;N;;;;; 2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L;<sub> 006D;;;;N;;;;; 2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L;<sub> 006E;;;;N;;;;; 209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L;<sub> 0070;;;;N;;;;; 209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L;<sub> 0073;;;;N;;;;; 209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L;<sub> 0074;;;;N;;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; 20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; 20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; 20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; 20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; 20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;; 20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;; 20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;; 20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;; 20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;; 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; 20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; 20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; 20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; 20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; 20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;; 2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; 212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; 2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;; 213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;; 2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; 2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; 2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; 2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; 214C;PER SIGN;So;0;ON;;;;;N;;;;; 214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; 214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; 2150;VULGAR FRACTION ONE SEVENTH;No;0;ON;<fraction> 0031 2044 0037;;;1/7;N;;;;; 2151;VULGAR FRACTION ONE NINTH;No;0;ON;<fraction> 0031 2044 0039;;;1/9;N;;;;; 2152;VULGAR FRACTION ONE TENTH;No;0;ON;<fraction> 0031 2044 0031 0030;;;1/10;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; 2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; 2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; 2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; 2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; 2189;VULGAR FRACTION ZERO THIRDS;No;0;ON;<fraction> 0030 2044 0033;;;0;N;;;;; 218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;; 218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; 21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; 21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; 22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;Ps;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Pe;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Ps;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Pe;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; 237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;; 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; 2398;NEXT PAGE;So;0;ON;;;;;N;;;;; 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; 239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; 23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; 23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; 23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; 23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; 23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; 23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; 23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; 23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; 23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; 23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; 23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; 23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; 23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; 23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; 23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; 23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; 23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; 23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; 23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; 23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; 23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; 23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; 23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; 23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; 23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; 23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; 23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; 23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; 23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; 23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; 23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; 23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; 23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; 23DB;FUSE;So;0;ON;;;;;N;;;;; 23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;; 23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;; 23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; 23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; 23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; 23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; 23E5;FLATNESS;So;0;ON;;;;;N;;;;; 23E6;AC CURRENT;So;0;ON;;;;;N;;;;; 23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; 23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;; 23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; 23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;; 23F1;STOPWATCH;So;0;ON;;;;;N;;;;; 23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;; 23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;; 23F4;BLACK MEDIUM LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F5;BLACK MEDIUM RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F6;BLACK MEDIUM UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F7;BLACK MEDIUM DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; 23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;; 23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;; 23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;; 23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;; 23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;; 23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;; 24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; 24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; 24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; 24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; 24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; 24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; 24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; 24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; 24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; 24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; 24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; 24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; 24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; 24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; 24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; 24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; 24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; 24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; 24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; 24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; 2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; 2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; 2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; 259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; 259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; 25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; 25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; 25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 2618;SHAMROCK;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;; 2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;; 2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;; 2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;; 2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;; 2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;; 2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;; 267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; 267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; 2680;DIE FACE-1;So;0;ON;;;;;N;;;;; 2681;DIE FACE-2;So;0;ON;;;;;N;;;;; 2682;DIE FACE-3;So;0;ON;;;;;N;;;;; 2683;DIE FACE-4;So;0;ON;;;;;N;;;;; 2684;DIE FACE-5;So;0;ON;;;;;N;;;;; 2685;DIE FACE-6;So;0;ON;;;;;N;;;;; 2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; 2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; 2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; 268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; 268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; 268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; 268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; 268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; 2690;WHITE FLAG;So;0;ON;;;;;N;;;;; 2691;BLACK FLAG;So;0;ON;;;;;N;;;;; 2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; 2693;ANCHOR;So;0;ON;;;;;N;;;;; 2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; 2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; 2696;SCALES;So;0;ON;;;;;N;;;;; 2697;ALEMBIC;So;0;ON;;;;;N;;;;; 2698;FLOWER;So;0;ON;;;;;N;;;;; 2699;GEAR;So;0;ON;;;;;N;;;;; 269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; 269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; 269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; 269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;; 269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;; 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; 26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; 26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; 26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; 26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; 26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; 26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; 26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; 26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; 26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; 26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; 26B0;COFFIN;So;0;ON;;;;;N;;;;; 26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; 26B2;NEUTER;So;0;ON;;;;;N;;;;; 26B3;CERES;So;0;ON;;;;;N;;;;; 26B4;PALLAS;So;0;ON;;;;;N;;;;; 26B5;JUNO;So;0;ON;;;;;N;;;;; 26B6;VESTA;So;0;ON;;;;;N;;;;; 26B7;CHIRON;So;0;ON;;;;;N;;;;; 26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; 26B9;SEXTILE;So;0;ON;;;;;N;;;;; 26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; 26BB;QUINCUNX;So;0;ON;;;;;N;;;;; 26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; 26BD;SOCCER BALL;So;0;ON;;;;;N;;;;; 26BE;BASEBALL;So;0;ON;;;;;N;;;;; 26BF;SQUARED KEY;So;0;ON;;;;;N;;;;; 26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; 26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; 26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;; 26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 26C6;RAIN;So;0;ON;;;;;N;;;;; 26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;; 26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;; 26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; 26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;; 26CC;CROSSING LANES;So;0;ON;;;;;N;;;;; 26CD;DISABLED CAR;So;0;ON;;;;;N;;;;; 26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;; 26CF;PICK;So;0;ON;;;;;N;;;;; 26D0;CAR SLIDING;So;0;ON;;;;;N;;;;; 26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;; 26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;; 26D3;CHAINS;So;0;ON;;;;;N;;;;; 26D4;NO ENTRY;So;0;ON;;;;;N;;;;; 26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; 26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;; 26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;; 26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; 26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;; 26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;; 26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;; 26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;; 26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;; 26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;; 26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;; 26E4;PENTAGRAM;So;0;ON;;;;;N;;;;; 26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;; 26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;; 26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;; 26EA;CHURCH;So;0;ON;;;;;N;;;;; 26EB;CASTLE;So;0;ON;;;;;N;;;;; 26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;; 26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;; 26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;; 26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;; 26F0;MOUNTAIN;So;0;ON;;;;;N;;;;; 26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;; 26F2;FOUNTAIN;So;0;ON;;;;;N;;;;; 26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;; 26F4;FERRY;So;0;ON;;;;;N;;;;; 26F5;SAILBOAT;So;0;ON;;;;;N;;;;; 26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;; 26F7;SKIER;So;0;ON;;;;;N;;;;; 26F8;ICE SKATE;So;0;ON;;;;;N;;;;; 26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;; 26FA;TENT;So;0;ON;;;;;N;;;;; 26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;; 26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;; 26FD;FUEL PUMP;So;0;ON;;;;;N;;;;; 26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;; 26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;; 2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270A;RAISED FIST;So;0;ON;;;;;N;;;;; 270B;RAISED HAND;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2728;SPARKLES;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274C;CROSS MARK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; 276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; 2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;; 2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;; 2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B0;CURLY LOOP;So;0;ON;;;;;N;;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;; 27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; 27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; 27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; 27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; 27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; 27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; 27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; 27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; 27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; 27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; 27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;; 27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;; 27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;; 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; 27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; 27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; 27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; 27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; 27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; 27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; 27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; 27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; 27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; 27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; 27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; 27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; 27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; 27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; 2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; 2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; 2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; 2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; 2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; 2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; 2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; 2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; 2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; 280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; 280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; 280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; 280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; 280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; 280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; 2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; 2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; 2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; 2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; 2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; 2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; 2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; 2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; 2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; 2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; 281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; 281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; 281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; 281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; 281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; 281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; 2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; 2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; 2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; 2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; 2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; 2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; 2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; 2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; 2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; 2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; 282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; 282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; 282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; 282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; 282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; 282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; 2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; 2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; 2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; 2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; 2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; 2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; 2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; 2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; 2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; 2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; 283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; 283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; 283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; 283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; 283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; 283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; 2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; 2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; 2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; 2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; 2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; 2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; 2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; 2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; 2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; 2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; 284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; 284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; 284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; 284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; 284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; 284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; 2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; 2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; 2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; 2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; 2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; 2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; 2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; 2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; 2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; 2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; 285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; 285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; 285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; 285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; 285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; 285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; 2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; 2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; 2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; 2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; 2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; 2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; 2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; 2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; 2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; 2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; 286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; 286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; 286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; 286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; 286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; 286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; 2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; 2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; 2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; 2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; 2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; 2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; 2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; 2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; 2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; 2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; 287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; 287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; 287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; 287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; 287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; 287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; 2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; 2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; 2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; 2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; 2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; 2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; 2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; 2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; 2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; 2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; 288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; 288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; 288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; 288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; 288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; 288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; 2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; 2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; 2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; 2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; 2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; 2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; 2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; 2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; 2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; 2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; 289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; 289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; 289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; 289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; 289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; 289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; 28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; 28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; 28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; 28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; 28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; 28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; 28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; 28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; 28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; 28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; 28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; 28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; 28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; 28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; 28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; 28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; 28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; 28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; 28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; 28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; 28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; 28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; 28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; 28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; 28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; 28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; 28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; 28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; 28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; 28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; 28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; 28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; 28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; 28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; 28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; 28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; 28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; 28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; 28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; 28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; 28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; 28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; 28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; 28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; 28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; 28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; 28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; 28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; 28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; 28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; 28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; 28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; 28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; 28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; 28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; 28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; 28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; 28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; 28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; 28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; 28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; 28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; 28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; 28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; 28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; 28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; 28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; 28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; 28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; 28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; 28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; 28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; 28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; 28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; 28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; 28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; 28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; 28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; 28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; 28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; 28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; 28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; 28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; 28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; 28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; 28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; 28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; 28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; 28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; 28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; 28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; 28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; 28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; 28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; 28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; 28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; 2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; 290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; 2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; 291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; 2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; 292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; 2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; 2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; 2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; 2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; 2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; 2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; 293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; 293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; 2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; 2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; 2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; 294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; 2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; 2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; 2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; 2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; 2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; 2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; 295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; 295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; 295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; 2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; 2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; 2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; 296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; 296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; 296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; 2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; 2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; 2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; 297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; 297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; 297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; 2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; 2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; 2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; 2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; 2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; 2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; 2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; 2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; 298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; 298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; 298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; 298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; 298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; 298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; 2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; 2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; 2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; 2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; 2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; 2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; 2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; 2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; 299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; 299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; 299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; 299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; 299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; 29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; 29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; 29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; 29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; 29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; 29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; 29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; 29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; 29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; 29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; 29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; 29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; 29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; 29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; 29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; 29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; 29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; 29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; 29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; 29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; 29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; 29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; 29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; 29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; 29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; 29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; 29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; 29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; 29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; 29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; 29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; 29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; 29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; 29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; 29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; 29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; 29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; 29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; 29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; 29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; 29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; 29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; 29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; 29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; 29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; 29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; 29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; 29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; 29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; 29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; 29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; 29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; 29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 29FE;TINY;Sm;0;ON;;;;;N;;;;; 29FF;MINY;Sm;0;ON;;;;;N;;;;; 2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; 2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; 2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; 2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; 2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; 2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; 2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; 2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; 2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;; 2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; 2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; 2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; 2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; 2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; 2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; 2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; 2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; 2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; 2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; 2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; 2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2A1D;JOIN;Sm;0;ON;;;;;N;;;;; 2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; 2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; 2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; 2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; 2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; 2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; 2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; 2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; 2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; 2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; 2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; 2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; 2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; 2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; 2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; 2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; 2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; 2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; 2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; 2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; 2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; 2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; 2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; 2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; 2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; 2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; 2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; 2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; 2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; 2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; 2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; 2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; 2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; 2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; 2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; 2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; 2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; 2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;; 2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;; 2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;; 2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; 2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; 2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; 2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; 2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; 2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; 2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; 2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; 2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; 2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; 2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; 2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; 2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; 2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; 2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; 2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; 2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; 2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; 2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; 2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; 2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; 2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; 2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; 2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; 2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; 2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; 2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; 2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; 2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; 2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; 2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;; 2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;; 2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; 2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; 2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; 2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; 2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; 2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; 2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; 2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; 2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; 2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; 2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; 2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; 2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; 2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; 2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; 2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; 2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; 2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; 2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; 2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; 2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; 2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; 2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; 2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; 2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; 2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; 2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; 2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; 2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; 2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; 2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; 2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; 2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; 2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; 2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; 2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; 2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; 2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; 2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; 2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; 2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; 2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; 2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; 2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; 2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; 2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; 2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; 2B4D;DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW;So;0;ON;;;;;N;;;;; 2B4E;SHORT SLANTED NORTH ARROW;So;0;ON;;;;;N;;;;; 2B4F;SHORT BACKSLANTED SOUTH ARROW;So;0;ON;;;;;N;;;;; 2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; 2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; 2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; 2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; 2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;; 2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;; 2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;; 2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;; 2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;; 2B5A;SLANTED NORTH ARROW WITH HOOKED HEAD;So;0;ON;;;;;N;;;;; 2B5B;BACKSLANTED SOUTH ARROW WITH HOOKED TAIL;So;0;ON;;;;;N;;;;; 2B5C;SLANTED NORTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5D;BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;; 2B5E;BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B5F;SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;; 2B60;LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B61;UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B62;RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B63;DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B64;LEFT RIGHT TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B65;UP DOWN TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B66;NORTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B67;NORTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B68;SOUTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B69;SOUTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B6A;LEFTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6B;UPWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6C;RIGHTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6D;DOWNWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;; 2B6E;CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B6F;ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 2B70;LEFTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B71;UPWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B72;RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B73;DOWNWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B76;NORTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B77;NORTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B78;SOUTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B79;SOUTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;; 2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7B;UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7D;DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;; 2B7E;HORIZONTAL TAB KEY;So;0;ON;;;;;N;;;;; 2B7F;VERTICAL TAB KEY;So;0;ON;;;;;N;;;;; 2B80;LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B81;UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B82;RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B83;DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;; 2B84;LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B85;UPWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B86;RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B87;DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;; 2B88;LEFTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B89;UPWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8A;RIGHTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8B;DOWNWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;; 2B8C;ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8D;ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8E;ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B8F;ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW;So;0;ON;;;;;N;;;;; 2B90;RETURN LEFT;So;0;ON;;;;;N;;;;; 2B91;RETURN RIGHT;So;0;ON;;;;;N;;;;; 2B92;NEWLINE LEFT;So;0;ON;;;;;N;;;;; 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9B;THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9C;BLACK LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9D;BLACK UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9E;BLACK RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B9F;BLACK DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2BA0;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA1;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA2;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;; 2BA3;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;; 2BA4;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA5;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;; 2BA6;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA7;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;; 2BA8;BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BA9;BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAA;BLACK CURVED UPWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAB;BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAC;BLACK CURVED LEFTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAD;BLACK CURVED RIGHTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAE;BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BAF;BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 2BB0;RIBBON ARROW DOWN LEFT;So;0;ON;;;;;N;;;;; 2BB1;RIBBON ARROW DOWN RIGHT;So;0;ON;;;;;N;;;;; 2BB2;RIBBON ARROW UP LEFT;So;0;ON;;;;;N;;;;; 2BB3;RIBBON ARROW UP RIGHT;So;0;ON;;;;;N;;;;; 2BB4;RIBBON ARROW LEFT UP;So;0;ON;;;;;N;;;;; 2BB5;RIBBON ARROW RIGHT UP;So;0;ON;;;;;N;;;;; 2BB6;RIBBON ARROW LEFT DOWN;So;0;ON;;;;;N;;;;; 2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;; 2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;; 2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;; 2BBE;CIRCLED X;So;0;ON;;;;;N;;;;; 2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;; 2BC0;BLACK SQUARE CENTRED;So;0;ON;;;;;N;;;;; 2BC1;BLACK DIAMOND CENTRED;So;0;ON;;;;;N;;;;; 2BC2;TURNED BLACK PENTAGON;So;0;ON;;;;;N;;;;; 2BC3;HORIZONTAL BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC4;BLACK OCTAGON;So;0;ON;;;;;N;;;;; 2BC5;BLACK MEDIUM UP-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;; 2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCD;ROTATED LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;; 2BCE;WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;; 2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;; 2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;; 2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; 2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; 2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; 2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; 2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; 2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; 2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; 2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; 2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; 2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; 2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; 2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; 2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; 2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; 2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; 2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; 2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; 2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; 2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; 2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; 2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; 2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; 2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; 2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; 2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; 2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; 2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; 2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; 2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; 2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; 2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; 2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; 2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; 2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; 2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; 2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; 2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; 2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; 2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; 2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; 2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; 2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; 2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; 2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A 2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B 2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C 2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D 2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E 2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F 2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A 2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B 2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C 2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D 2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E 2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F 2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A 2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; 2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; 2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; 2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A 2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E 2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; 2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; 2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; 2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B 2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; 2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; 2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; 2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252; 2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; 2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; 2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; 2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; 2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; 2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; 2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; 2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; 2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; 2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L;<sub> 006A;;;;N;;;;; 2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;; 2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F; 2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240; 2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; 2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; 2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; 2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; 2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; 2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; 2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A 2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; 2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C 2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; 2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E 2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; 2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; 2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; 2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; 2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; 2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; 2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A 2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; 2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C 2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; 2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E 2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; 2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; 2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; 2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; 2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; 2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; 2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA 2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; 2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC 2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; 2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE 2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; 2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; 2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; 2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; 2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; 2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; 2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA 2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; 2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC 2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; 2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE 2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; 2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; 2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; 2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; 2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; 2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; 2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA 2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; 2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC 2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; 2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE 2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; 2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; 2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; 2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; 2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; 2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; 2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA 2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; 2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC 2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; 2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE 2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; 2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; 2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; 2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; 2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; 2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; 2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; 2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; 2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; 2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC; 2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB 2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE; 2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED 2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;; 2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;; 2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;; 2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3; 2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2 2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; 2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; 2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; 2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; 2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; 2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; 2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0 2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1 2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2 2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3 2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4 2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5 2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6 2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7 2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8 2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9 2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA 2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB 2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC 2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD 2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE 2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF 2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0 2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1 2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2 2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3 2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4 2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5 2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6 2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7 2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8 2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9 2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA 2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB 2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC 2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD 2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE 2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF 2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0 2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1 2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2 2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3 2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4 2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5 2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7 2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD 2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; 2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; 2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; 2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; 2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; 2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; 2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; 2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; 2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; 2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; 2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; 2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; 2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; 2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; 2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; 2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; 2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;; 2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; 2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; 2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; 2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; 2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; 2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; 2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; 2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; 2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; 2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; 2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; 2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; 2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; 2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; 2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; 2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; 2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; 2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; 2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;; 2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; 2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; 2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; 2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; 2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;; 2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; 2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; 2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; 2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; 2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; 2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; 2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; 2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; 2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; 2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; 2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; 2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;; 2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; 2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;; 2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;; 2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;;;; 2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;; 2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;; 2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; 2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; 2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; 2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; 2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; 2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; 2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; 2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; 2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; 2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; 2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; 2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; 2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; 2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; 2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; 2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; 2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; 2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; 2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; 2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; 2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; 2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; 2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; 2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; 2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; 2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; 2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; 2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; 2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; 2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; 2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; 2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; 2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; 2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; 2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; 2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; 2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; 2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; 2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; 2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; 2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; 2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; 2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; 2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; 2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; 2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; 2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; 2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; 2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; 2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; 2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; 2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; 2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; 2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; 2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; 2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; 2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; 2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; 2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; 2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; 2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; 2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; 2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; 2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; 2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; 2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; 2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; 2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; 2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; 2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; 2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; 2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; 2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; 2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; 2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; 2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; 2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; 2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; 2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; 2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; 2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; 2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; 2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; 2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; 2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; 2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; 2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; 2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; 2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; 2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; 2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; 2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; 2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; 2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; 2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; 2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; 2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; 2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; 2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; 2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; 2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; 2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; 2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; 2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; 2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; 2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; 2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; 2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; 2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; 2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; 2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; 2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; 2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; 2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; 2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; 2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; 2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; 2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; 2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; 2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; 2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; 2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; 2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; 2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; 2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; 2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; 2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; 2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; 2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; 2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; 2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; 2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; 2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; 2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; 2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; 2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; 2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; 2E30;RING POINT;Po;0;ON;;;;;N;;;;; 2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;; 2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;; 2E33;RAISED DOT;Po;0;ON;;;;;N;;;;; 2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;; 2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;; 2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;; 2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;; 2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;; 2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;; 2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;; 2E3C;STENOGRAPHIC FULL STOP;Po;0;ON;;;;;N;;;;; 2E3D;VERTICAL SIX DOTS;Po;0;ON;;;;;N;;;;; 2E3E;WIGGLY VERTICAL LINE;Po;0;ON;;;;;N;;;;; 2E3F;CAPITULUM;Po;0;ON;;;;;N;;;;; 2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;; 2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;; 2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; 2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;; 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;; 2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;; 2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;; 2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;; 2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;; 2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;; 2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;; 2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;; 2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;; 2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;; 2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;; 2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;; 2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;; 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;; 2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;; 2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;; 2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;; 2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;; 2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;; 2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;; 2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;; 2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;; 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;; 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;; 2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;; 2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;; 2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;; 2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;; 2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;; 2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;; 2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;; 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;; 2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;; 2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;; 2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;; 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;; 2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;; 2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;; 2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;; 2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;; 2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;; 2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;; 2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;; 2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;; 2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;; 2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;; 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;; 2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;; 2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;; 2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;; 2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;; 2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;; 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;; 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;; 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;; 2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;; 2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;; 2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;; 2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;; 2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;; 2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;; 2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;; 2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;; 2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;; 2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;; 2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;; 2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;; 2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;; 2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;; 2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;; 2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;; 2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;; 2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;; 2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;; 2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;; 2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;; 2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;; 2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;; 2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;; 2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;; 2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;; 2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;; 2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;; 2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;; 2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;; 2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;; 2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;; 2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;; 2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;; 2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;; 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;; 2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;; 2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;; 2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;; 2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;; 2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;; 2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;; 2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;; 2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;; 2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;; 2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;; 2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;; 2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;; 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;; 2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;; 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;; 2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;; 2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;; 2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;; 2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;; 2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;; 2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;; 2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;; 2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;; 2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;; 2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;; 2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;; 2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;; 2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;; 2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;; 2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;; 2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;; 2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;; 2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;; 2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;; 2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;; 2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;; 2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;; 2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;; 2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;; 2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;; 2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;; 2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;; 2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;; 2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;; 2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;; 2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;; 2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;; 2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;; 2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;; 2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;; 2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;; 2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;; 2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;; 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;; 2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;; 2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;; 2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;; 2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;; 2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;; 2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;; 2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;; 2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;; 2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;; 2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;; 2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;; 2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;; 2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;; 2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;; 2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;; 2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;; 2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;; 2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;; 2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;; 2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;; 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;; 2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;; 2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;; 2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;; 2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;; 2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;; 2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;; 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;; 2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;; 2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;; 2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;; 2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;; 2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;; 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;; 2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;; 2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;; 2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;; 2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;; 2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;; 2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;; 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;; 2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;; 2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;; 2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;; 2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;; 2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;; 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;; 2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;; 2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;; 2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;; 2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;; 2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;; 2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;; 2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;; 2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;; 2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;; 2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;; 2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;; 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;; 2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;; 2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;; 2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;; 2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;; 2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;; 2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;; 2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;; 2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;; 2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;; 2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;; 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; 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;;;;; 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;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;; 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;; 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;; 303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 303C;MASU MARK;Lo;0;L;;;;;N;;;;; 303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;; 30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;;;; 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; 31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;; 31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;; 31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;; 31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; 31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; 31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; 31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; 31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; 31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; 31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; 31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; 31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; 31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; 31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; 31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; 31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; 31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; 31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; 31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; 31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; 31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; 31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; 31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; 31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; 31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; 31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; 31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; 31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; 31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; 31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; 31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; 31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; 31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; 31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; 31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; 31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;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;;;;; 31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; 31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; 31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; 31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; 31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; 31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; 31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; 31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; 31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; 31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; 31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; 31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; 31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; 321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;; 3244;CIRCLED IDEOGRAPH QUESTION;So;0;L;<circle> 554F;;;;N;;;;; 3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L;<circle> 5E7C;;;;N;;;;; 3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L;<circle> 6587;;;;N;;;;; 3247;CIRCLED IDEOGRAPH KOTO;So;0;L;<circle> 7B8F;;;;N;;;;; 3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;; 3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;; 324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;; 324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;; 324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;; 324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;; 324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;; 324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;; 3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;; 3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;; 3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;; 3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;; 3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;; 3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;; 3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;; 3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;; 3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;; 3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;; 325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;; 325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;; 325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;; 325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;; 325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;; 325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;; 3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;; 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;; 327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;; 32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;; 32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;; 32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;; 32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;; 32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;; 32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;; 32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;; 32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;; 32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;; 32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;; 32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;; 32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;; 32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;; 32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;; 32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;; 32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;; 32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;; 32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;; 32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;; 32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;; 3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;; 3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;; 3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;; 3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;; 3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;; 3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;; 3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;; 337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;; 33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;; 33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;; 33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;; 3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;; 4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;; 4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; 4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; 4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; 4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; 4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; 4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; 4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; 4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; 4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; 4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; 4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; 4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; 4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; 4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; 4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; 4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; 4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; 4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; 4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; 4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; 4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; 4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; 4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; 4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; 4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; 4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; 4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; 4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; 4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; 4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; 4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; 4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; 4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; 4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; 4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; 4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; 4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; 4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; 4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; 4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; 4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; 4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; 4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; 4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; 4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; 4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; 4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; 4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; 4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; 4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; 4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; 4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; 4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; 4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; 4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; 4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; 4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;; 9FD5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;; A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;; A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;; A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;; A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;; A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;; A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;; A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;; A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;; A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;; A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;; A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;; A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;; A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;; A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;; A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;; A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;; A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;; A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;; A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;; A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;; A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;; A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;; A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;; A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;; A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;; A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;; A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;; A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;; A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;; A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;; A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;; A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;; A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;; A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;; A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;; A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;; A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;; A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;; A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;; A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;; A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;; A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;; A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;; A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;; A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;; A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;; A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;; A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661; A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660 A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;; A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;; A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;; A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;; A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;; A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;; A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;; A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 A698;CYRILLIC CAPITAL LETTER DOUBLE O;Lu;0;L;;;;;N;;;;A699; A699;CYRILLIC SMALL LETTER DOUBLE O;Ll;0;L;;;;;N;;;A698;;A698 A69A;CYRILLIC CAPITAL LETTER CROSSED O;Lu;0;L;;;;;N;;;;A69B; A69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A A69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L;<super> 044A;;;;N;;;;; A69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L;<super> 044C;;;;N;;;;; A69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;; A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;; A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;; A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;; A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;; A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;; A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;; A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;; A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;; A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;; A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;; A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;; A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;; A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;; A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;; A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;; A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;; A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;; A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;; A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;; A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;; A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;; A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;; A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;; A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;; A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;; A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;; A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;; A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;; A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;; A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;; A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;; A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;; A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;; A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;; A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;; A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;; A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;; A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;; A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;; A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;; A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;; A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;; A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;; A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;; A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;; A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;; A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;; A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;; A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;; A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;; A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;; A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;; A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;; A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;; A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;; A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;; A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;; A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;; A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;; A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;; A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;; A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;; A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;; A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;; A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;; A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;; A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;; A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;; A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;; A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;; A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;; A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;; A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;; A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;; A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;; A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;; A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;; A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;; A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;; A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;; A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;; A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;; A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;; A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;; A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;; A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;; A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;; A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;; A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;; A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;; A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265; A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;; A78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;; A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791; A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790 A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793; A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792 A794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; A795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; A796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797; A797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796 A798;LATIN CAPITAL LETTER F WITH STROKE;Lu;0;L;;;;;N;;;;A799; A799;LATIN SMALL LETTER F WITH STROKE;Ll;0;L;;;;;N;;;A798;;A798 A79A;LATIN CAPITAL LETTER VOLAPUK AE;Lu;0;L;;;;;N;;;;A79B; A79B;LATIN SMALL LETTER VOLAPUK AE;Ll;0;L;;;;;N;;;A79A;;A79A A79C;LATIN CAPITAL LETTER VOLAPUK OE;Lu;0;L;;;;;N;;;;A79D; A79D;LATIN SMALL LETTER VOLAPUK OE;Ll;0;L;;;;;N;;;A79C;;A79C A79E;LATIN CAPITAL LETTER VOLAPUK UE;Lu;0;L;;;;;N;;;;A79F; A79F;LATIN SMALL LETTER VOLAPUK UE;Ll;0;L;;;;;N;;;A79E;;A79E A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1; A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0 A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3; A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2 A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5; A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4 A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7; A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6 A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9; A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8 A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266; A7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C; A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261; A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C; A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A; A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E; A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287; A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D; A7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53; A7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5; A7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4 A7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7; A7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;; A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;; A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;; A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;; A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;; A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;; A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;; A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; A8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;; A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;; A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;; A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;; A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;; A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;; A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;; A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;; A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;; A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;; A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;; A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;; A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;; A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;; A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;; A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;; A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;; A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;; A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;; A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;; A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;; A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; A8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;; A8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;; A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;; A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;; A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;; A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;; A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;; A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;; A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;; A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;; A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;; A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;; A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;; A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;; A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;; A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;; A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;; A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;; A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;; A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;; A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;; A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;; A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;; A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;; A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;; A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;; A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;; A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;; A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;; A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;; A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;; A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;; A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;; A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;; A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;; A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;; A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;; A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;; A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;; A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;; A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;; A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;; A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;; A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;; A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;; A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;; A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;; A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;; A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;; A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;; A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;; A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;; A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;; A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;; A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;; A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;; A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;; A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;; A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;; A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;; A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;; A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;; A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;; A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;; A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;; A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;; A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;; A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;; A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;; A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;; A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;; A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; A9BD;JAVANESE CONSONANT SIGN KERET;Mc;0;L;;;;;N;;;;; A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;; A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;; A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;; A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;; A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;; A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;; A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;; A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;; A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;; A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;; A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;; A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;; A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;; A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;; A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;; A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;; A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;; A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;; A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;; A9E0;MYANMAR LETTER SHAN GHA;Lo;0;L;;;;;N;;;;; A9E1;MYANMAR LETTER SHAN CHA;Lo;0;L;;;;;N;;;;; A9E2;MYANMAR LETTER SHAN JHA;Lo;0;L;;;;;N;;;;; A9E3;MYANMAR LETTER SHAN NNA;Lo;0;L;;;;;N;;;;; A9E4;MYANMAR LETTER SHAN BHA;Lo;0;L;;;;;N;;;;; A9E5;MYANMAR SIGN SHAN SAW;Mn;0;NSM;;;;;N;;;;; A9E6;MYANMAR MODIFIER LETTER SHAN REDUPLICATION;Lm;0;L;;;;;N;;;;; A9E7;MYANMAR LETTER TAI LAING NYA;Lo;0;L;;;;;N;;;;; A9E8;MYANMAR LETTER TAI LAING FA;Lo;0;L;;;;;N;;;;; A9E9;MYANMAR LETTER TAI LAING GA;Lo;0;L;;;;;N;;;;; A9EA;MYANMAR LETTER TAI LAING GHA;Lo;0;L;;;;;N;;;;; A9EB;MYANMAR LETTER TAI LAING JA;Lo;0;L;;;;;N;;;;; A9EC;MYANMAR LETTER TAI LAING JHA;Lo;0;L;;;;;N;;;;; A9ED;MYANMAR LETTER TAI LAING DDA;Lo;0;L;;;;;N;;;;; A9EE;MYANMAR LETTER TAI LAING DDHA;Lo;0;L;;;;;N;;;;; A9EF;MYANMAR LETTER TAI LAING NNA;Lo;0;L;;;;;N;;;;; A9F0;MYANMAR TAI LAING DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; A9F1;MYANMAR TAI LAING DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; A9F2;MYANMAR TAI LAING DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; A9F3;MYANMAR TAI LAING DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; A9F4;MYANMAR TAI LAING DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; A9F5;MYANMAR TAI LAING DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; A9F6;MYANMAR TAI LAING DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; A9F7;MYANMAR TAI LAING DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; A9F8;MYANMAR TAI LAING DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; A9F9;MYANMAR TAI LAING DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; A9FA;MYANMAR LETTER TAI LAING LLA;Lo;0;L;;;;;N;;;;; A9FB;MYANMAR LETTER TAI LAING DA;Lo;0;L;;;;;N;;;;; A9FC;MYANMAR LETTER TAI LAING DHA;Lo;0;L;;;;;N;;;;; A9FD;MYANMAR LETTER TAI LAING BA;Lo;0;L;;;;;N;;;;; A9FE;MYANMAR LETTER TAI LAING BHA;Lo;0;L;;;;;N;;;;; AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;; AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;; AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;; AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;; AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;; AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;; AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;; AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;; AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;; AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;; AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;; AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;; AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;; AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;; AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;; AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;; AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;; AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;; AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;; AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;; AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;; AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;; AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;; AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;; AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;; AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;; AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;; AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;; AA7C;MYANMAR SIGN TAI LAING TONE-2;Mn;0;NSM;;;;;N;;;;; AA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;; AA7E;MYANMAR LETTER SHWE PALAUNG CHA;Lo;0;L;;;;;N;;;;; AA7F;MYANMAR LETTER SHWE PALAUNG SHA;Lo;0;L;;;;;N;;;;; AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;; AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;; AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;; AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;; AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;; AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;; AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;; AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;; AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;; AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;; AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;; AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;; AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;; AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;; AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;; AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;; AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;; AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;; AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;; AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;; AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;; AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;; AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;; AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;; AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;; AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;; AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;; AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;; AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;; AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;; AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;; AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;; AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;; AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;; AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;; AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;; AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;; AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;; AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;; AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;; AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;; AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;; AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;; AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;; AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;; AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;; AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;; AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;; AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;; AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;; AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;; AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;; AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;; AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;; AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;; AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;; AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;; AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;; AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;; AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;; AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;; AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;; AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;; AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;; AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;; AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;; AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;; AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;; AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;; AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;; AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;; AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;; AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;; AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;; AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;; AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;; AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;; AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;; AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;; AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;; AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;; AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;; AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;; AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;; AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;; AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;; AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;; AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;; AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;; AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;; AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;; AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;; AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;; AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;; AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;; AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;; AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;; AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;; AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;; AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;; AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;; AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;; AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;; AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;; AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;; AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;; AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;; AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;; AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;; AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;; AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;; AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;; AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;; AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;; AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;; AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;; AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;; AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;; AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;; AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;; AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;; AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;; AB30;LATIN SMALL LETTER BARRED ALPHA;Ll;0;L;;;;;N;;;;; AB31;LATIN SMALL LETTER A REVERSED-SCHWA;Ll;0;L;;;;;N;;;;; AB32;LATIN SMALL LETTER BLACKLETTER E;Ll;0;L;;;;;N;;;;; AB33;LATIN SMALL LETTER BARRED E;Ll;0;L;;;;;N;;;;; AB34;LATIN SMALL LETTER E WITH FLOURISH;Ll;0;L;;;;;N;;;;; AB35;LATIN SMALL LETTER LENIS F;Ll;0;L;;;;;N;;;;; AB36;LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB37;LATIN SMALL LETTER L WITH INVERTED LAZY S;Ll;0;L;;;;;N;;;;; AB38;LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Ll;0;L;;;;;N;;;;; AB39;LATIN SMALL LETTER L WITH MIDDLE RING;Ll;0;L;;;;;N;;;;; AB3A;LATIN SMALL LETTER M WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3B;LATIN SMALL LETTER N WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3C;LATIN SMALL LETTER ENG WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB3D;LATIN SMALL LETTER BLACKLETTER O;Ll;0;L;;;;;N;;;;; AB3E;LATIN SMALL LETTER BLACKLETTER O WITH STROKE;Ll;0;L;;;;;N;;;;; AB3F;LATIN SMALL LETTER OPEN O WITH STROKE;Ll;0;L;;;;;N;;;;; AB40;LATIN SMALL LETTER INVERTED OE;Ll;0;L;;;;;N;;;;; AB41;LATIN SMALL LETTER TURNED OE WITH STROKE;Ll;0;L;;;;;N;;;;; AB42;LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE;Ll;0;L;;;;;N;;;;; AB43;LATIN SMALL LETTER TURNED O OPEN-O;Ll;0;L;;;;;N;;;;; AB44;LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE;Ll;0;L;;;;;N;;;;; AB45;LATIN SMALL LETTER STIRRUP R;Ll;0;L;;;;;N;;;;; AB46;LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG;Ll;0;L;;;;;N;;;;; AB47;LATIN SMALL LETTER R WITHOUT HANDLE;Ll;0;L;;;;;N;;;;; AB48;LATIN SMALL LETTER DOUBLE R;Ll;0;L;;;;;N;;;;; AB49;LATIN SMALL LETTER R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4A;LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;; AB4B;LATIN SMALL LETTER SCRIPT R;Ll;0;L;;;;;N;;;;; AB4C;LATIN SMALL LETTER SCRIPT R WITH RING;Ll;0;L;;;;;N;;;;; AB4D;LATIN SMALL LETTER BASELINE ESH;Ll;0;L;;;;;N;;;;; AB4E;LATIN SMALL LETTER U WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB4F;LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;; AB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;; AB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;; AB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3 AB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;; AB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB57;LATIN SMALL LETTER X WITH LONG LEFT LEG;Ll;0;L;;;;;N;;;;; AB58;LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING;Ll;0;L;;;;;N;;;;; AB59;LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF;Ll;0;L;;;;;N;;;;; AB5A;LATIN SMALL LETTER Y WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;; AB5B;MODIFIER BREVE WITH INVERTED BREVE;Sk;0;L;;;;;N;;;;; AB5C;MODIFIER LETTER SMALL HENG;Lm;0;L;<super> A727;;;;N;;;;; AB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L;<super> AB37;;;;N;;;;; AB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L;<super> 026B;;;;N;;;;; AB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L;<super> AB52;;;;N;;;;; AB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;; AB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;; AB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;; AB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;; AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;; AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;; AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0 AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1 AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2 AB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3 AB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4 AB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5 AB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6 AB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7 AB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8 AB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9 AB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA AB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB AB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC AB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD AB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE AB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF AB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0 AB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1 AB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2 AB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3 AB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4 AB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5 AB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6 AB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7 AB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8 AB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9 AB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA AB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB AB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC AB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD AB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE AB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF AB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0 AB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1 AB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2 AB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3 AB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4 AB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5 AB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6 AB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7 AB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8 AB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9 AB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA AB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB AB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC AB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD AB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE AB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF ABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0 ABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1 ABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2 ABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3 ABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4 ABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5 ABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6 ABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7 ABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8 ABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9 ABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA ABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB ABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC ABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD ABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE ABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF ABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0 ABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1 ABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2 ABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3 ABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4 ABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5 ABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6 ABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7 ABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8 ABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9 ABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA ABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB ABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC ABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED ABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE ABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;; ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;; ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;; ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;; ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;; ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;; ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;; ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;; ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;; ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;; ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;; ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;; ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;; ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;; ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;; ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;; ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;; ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;; ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;; ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;; ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;; ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;; ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;; ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;; ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;; ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;; ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;; ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;; ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;; ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;; ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;; ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;; ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;; ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;; ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;; ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;; ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;; ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;; ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;; ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;; ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;; ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;; ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;; ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;; ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;; ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;; ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;; D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;; D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;; D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;; D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;; D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;; D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;; D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;; D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;; D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;; D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;; D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;; D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;; D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;; D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;; D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;; D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;; D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;; D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;; D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;; D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;; D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;; D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;; D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;; D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;; D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;; D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;; D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;; D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;; D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;; D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;; D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;; D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;; D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;; D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;; D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;; D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;; D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;; D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;; D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;; D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;; D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;; D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;; D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;; D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;; D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;; D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;; DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;; DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;; DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;; E000;<Private Use, First>;Co;0;L;;;;;N;;;;; F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;; FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;; FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;; FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;; FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;; FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;; FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;; FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;; FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;; FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;; FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;; FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;; FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;; FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;; FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;; FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;; FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;; FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;; FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;; FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;; FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;; FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;; FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;; FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;; FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;; FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;; FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; FE27;COMBINING LIGATURE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE28;COMBINING LIGATURE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE29;COMBINING TILDE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2A;COMBINING TILDE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;; FE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;; FE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;; FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;; FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;;;; FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;; FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; 10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; 10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; 10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; 10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; 10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; 10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; 10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; 10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; 10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; 1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; 1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; 1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; 1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; 1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; 10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; 10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; 10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; 10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; 10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; 10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; 10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; 10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; 10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; 10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; 1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; 1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; 1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; 1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; 1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; 1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; 10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; 10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; 10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; 10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; 10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; 10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; 10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; 10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; 10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; 1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; 1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; 1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; 1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; 1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; 1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; 10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; 10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; 10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; 10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; 10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; 10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; 10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; 10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; 10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; 10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; 1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; 1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; 1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; 1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; 10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; 10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; 10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; 10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; 10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; 10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; 10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; 10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; 10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; 10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; 1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; 1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; 1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; 1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; 10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; 10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; 10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; 10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; 10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; 10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; 10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; 10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; 10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; 10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; 1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; 1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; 1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; 1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; 10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; 10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; 10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; 10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; 10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; 10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; 10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; 10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; 10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; 10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; 1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; 1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; 1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; 1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; 1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; 1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; 10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; 10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; 10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; 10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; 10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; 10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; 10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; 10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; 10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; 10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; 1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; 1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; 1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; 1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; 1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; 1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; 100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; 100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; 100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; 100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; 100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; 100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; 100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; 100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; 100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; 100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; 100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; 100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; 100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; 100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; 100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; 100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; 100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; 100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; 100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; 100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; 100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; 100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; 100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; 100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; 100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; 100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; 100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; 100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; 100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; 100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; 100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; 100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; 100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; 100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; 100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; 100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; 100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; 100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; 100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; 100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; 100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; 100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;; 100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; 100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;; 100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; 100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; 100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; 100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; 100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; 100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; 100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; 100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; 100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; 100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; 100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; 100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; 100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; 100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; 100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; 100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; 100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; 100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; 100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; 100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; 100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; 100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; 100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; 100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; 100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; 100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; 100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; 100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; 100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; 100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; 100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; 100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; 100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; 100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; 100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; 100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; 100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; 100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; 100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; 100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; 100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; 100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; 100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; 100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; 100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; 100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; 100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; 10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; 10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; 10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;; 10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; 10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; 10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; 1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; 1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; 1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; 1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; 1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; 1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; 10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; 10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; 10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; 10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; 10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; 10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; 10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; 10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; 1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; 1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; 1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; 1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; 1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; 10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; 10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; 10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; 10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; 10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; 10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; 10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; 10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; 10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; 1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; 1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; 1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; 1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; 1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; 10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; 10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; 10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; 10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; 10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; 10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; 10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; 1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; 1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; 10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; 10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; 10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; 10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; 10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; 10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; 10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; 10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; 1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; 1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; 1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; 1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; 1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; 1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; 10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; 10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; 10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; 10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; 10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; 10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; 10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; 10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; 10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; 10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; 1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; 1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; 1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; 1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; 10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; 10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; 10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; 10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; 10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; 10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; 10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; 1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; 1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; 1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; 10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; 10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; 10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; 10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; 10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; 10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; 10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; 10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; 10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; 1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; 1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; 1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; 1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; 1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; 10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; 10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; 10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; 10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; 10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; 10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; 10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; 10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; 10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; 10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; 1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; 1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;; 1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;; 1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;; 1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;; 10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; 10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; 10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; 10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; 10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; 10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; 10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; 10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; 10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; 1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; 1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; 101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;; 101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; 101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; 101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; 101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; 101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; 101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; 101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; 101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; 101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; 101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; 101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; 101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; 101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; 101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; 101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; 101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; 101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; 101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; 101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; 101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; 101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; 101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; 101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; 101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; 101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; 101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; 101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; 101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; 101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; 101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; 101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; 101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; 101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; 101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; 101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; 101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; 101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; 101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; 101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; 101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; 101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; 101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; 101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; 101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; 101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; 101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; 10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; 10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; 10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; 10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; 10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; 10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; 10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; 10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; 10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; 10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; 1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; 1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; 1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; 1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; 1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; 1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; 10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; 10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; 10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; 10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; 10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; 10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; 10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; 10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; 10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; 10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; 1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; 1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; 1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; 102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; 102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; 102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; 102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; 102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; 102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; 102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; 102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; 102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; 102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; 102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; 102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; 102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; 102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; 102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; 102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; 102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; 102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; 102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; 102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; 102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; 102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; 102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; 102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; 102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; 102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; 102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; 102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; 102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; 102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; 102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; 102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; 102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; 102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; 102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; 102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; 102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; 102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; 102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; 102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; 102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; 102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; 102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; 102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; 102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; 102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; 102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; 102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; 102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; 102E0;COPTIC EPACT THOUSANDS MARK;Mn;220;NSM;;;;;N;;;;; 102E1;COPTIC EPACT DIGIT ONE;No;0;EN;;;;1;N;;;;; 102E2;COPTIC EPACT DIGIT TWO;No;0;EN;;;;2;N;;;;; 102E3;COPTIC EPACT DIGIT THREE;No;0;EN;;;;3;N;;;;; 102E4;COPTIC EPACT DIGIT FOUR;No;0;EN;;;;4;N;;;;; 102E5;COPTIC EPACT DIGIT FIVE;No;0;EN;;;;5;N;;;;; 102E6;COPTIC EPACT DIGIT SIX;No;0;EN;;;;6;N;;;;; 102E7;COPTIC EPACT DIGIT SEVEN;No;0;EN;;;;7;N;;;;; 102E8;COPTIC EPACT DIGIT EIGHT;No;0;EN;;;;8;N;;;;; 102E9;COPTIC EPACT DIGIT NINE;No;0;EN;;;;9;N;;;;; 102EA;COPTIC EPACT NUMBER TEN;No;0;EN;;;;10;N;;;;; 102EB;COPTIC EPACT NUMBER TWENTY;No;0;EN;;;;20;N;;;;; 102EC;COPTIC EPACT NUMBER THIRTY;No;0;EN;;;;30;N;;;;; 102ED;COPTIC EPACT NUMBER FORTY;No;0;EN;;;;40;N;;;;; 102EE;COPTIC EPACT NUMBER FIFTY;No;0;EN;;;;50;N;;;;; 102EF;COPTIC EPACT NUMBER SIXTY;No;0;EN;;;;60;N;;;;; 102F0;COPTIC EPACT NUMBER SEVENTY;No;0;EN;;;;70;N;;;;; 102F1;COPTIC EPACT NUMBER EIGHTY;No;0;EN;;;;80;N;;;;; 102F2;COPTIC EPACT NUMBER NINETY;No;0;EN;;;;90;N;;;;; 102F3;COPTIC EPACT NUMBER ONE HUNDRED;No;0;EN;;;;100;N;;;;; 102F4;COPTIC EPACT NUMBER TWO HUNDRED;No;0;EN;;;;200;N;;;;; 102F5;COPTIC EPACT NUMBER THREE HUNDRED;No;0;EN;;;;300;N;;;;; 102F6;COPTIC EPACT NUMBER FOUR HUNDRED;No;0;EN;;;;400;N;;;;; 102F7;COPTIC EPACT NUMBER FIVE HUNDRED;No;0;EN;;;;500;N;;;;; 102F8;COPTIC EPACT NUMBER SIX HUNDRED;No;0;EN;;;;600;N;;;;; 102F9;COPTIC EPACT NUMBER SEVEN HUNDRED;No;0;EN;;;;700;N;;;;; 102FA;COPTIC EPACT NUMBER EIGHT HUNDRED;No;0;EN;;;;800;N;;;;; 102FB;COPTIC EPACT NUMBER NINE HUNDRED;No;0;EN;;;;900;N;;;;; 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; 10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; 10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; 10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; 10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; 10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; 10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; 10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; 1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; 1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; 1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; 1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; 1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; 1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;; 10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; 10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; 10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; 10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; 10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; 10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; 10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; 10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;; 10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; 10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; 1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; 1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;; 1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;; 1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;; 1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;; 1031F;OLD ITALIC LETTER ESS;Lo;0;L;;;;;N;;;;; 10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; 10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; 10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; 10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; 10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; 10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; 10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; 10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; 10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; 10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; 10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; 10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; 10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; 10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; 1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; 1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; 1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; 1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; 10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; 10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; 10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; 1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; 10350;OLD PERMIC LETTER AN;Lo;0;L;;;;;N;;;;; 10351;OLD PERMIC LETTER BUR;Lo;0;L;;;;;N;;;;; 10352;OLD PERMIC LETTER GAI;Lo;0;L;;;;;N;;;;; 10353;OLD PERMIC LETTER DOI;Lo;0;L;;;;;N;;;;; 10354;OLD PERMIC LETTER E;Lo;0;L;;;;;N;;;;; 10355;OLD PERMIC LETTER ZHOI;Lo;0;L;;;;;N;;;;; 10356;OLD PERMIC LETTER DZHOI;Lo;0;L;;;;;N;;;;; 10357;OLD PERMIC LETTER ZATA;Lo;0;L;;;;;N;;;;; 10358;OLD PERMIC LETTER DZITA;Lo;0;L;;;;;N;;;;; 10359;OLD PERMIC LETTER I;Lo;0;L;;;;;N;;;;; 1035A;OLD PERMIC LETTER KOKE;Lo;0;L;;;;;N;;;;; 1035B;OLD PERMIC LETTER LEI;Lo;0;L;;;;;N;;;;; 1035C;OLD PERMIC LETTER MENOE;Lo;0;L;;;;;N;;;;; 1035D;OLD PERMIC LETTER NENOE;Lo;0;L;;;;;N;;;;; 1035E;OLD PERMIC LETTER VOOI;Lo;0;L;;;;;N;;;;; 1035F;OLD PERMIC LETTER PEEI;Lo;0;L;;;;;N;;;;; 10360;OLD PERMIC LETTER REI;Lo;0;L;;;;;N;;;;; 10361;OLD PERMIC LETTER SII;Lo;0;L;;;;;N;;;;; 10362;OLD PERMIC LETTER TAI;Lo;0;L;;;;;N;;;;; 10363;OLD PERMIC LETTER U;Lo;0;L;;;;;N;;;;; 10364;OLD PERMIC LETTER CHERY;Lo;0;L;;;;;N;;;;; 10365;OLD PERMIC LETTER SHOOI;Lo;0;L;;;;;N;;;;; 10366;OLD PERMIC LETTER SHCHOOI;Lo;0;L;;;;;N;;;;; 10367;OLD PERMIC LETTER YRY;Lo;0;L;;;;;N;;;;; 10368;OLD PERMIC LETTER YERU;Lo;0;L;;;;;N;;;;; 10369;OLD PERMIC LETTER O;Lo;0;L;;;;;N;;;;; 1036A;OLD PERMIC LETTER OO;Lo;0;L;;;;;N;;;;; 1036B;OLD PERMIC LETTER EF;Lo;0;L;;;;;N;;;;; 1036C;OLD PERMIC LETTER HA;Lo;0;L;;;;;N;;;;; 1036D;OLD PERMIC LETTER TSIU;Lo;0;L;;;;;N;;;;; 1036E;OLD PERMIC LETTER VER;Lo;0;L;;;;;N;;;;; 1036F;OLD PERMIC LETTER YER;Lo;0;L;;;;;N;;;;; 10370;OLD PERMIC LETTER YERI;Lo;0;L;;;;;N;;;;; 10371;OLD PERMIC LETTER YAT;Lo;0;L;;;;;N;;;;; 10372;OLD PERMIC LETTER IE;Lo;0;L;;;;;N;;;;; 10373;OLD PERMIC LETTER YU;Lo;0;L;;;;;N;;;;; 10374;OLD PERMIC LETTER YA;Lo;0;L;;;;;N;;;;; 10375;OLD PERMIC LETTER IA;Lo;0;L;;;;;N;;;;; 10376;COMBINING OLD PERMIC LETTER AN;Mn;230;NSM;;;;;N;;;;; 10377;COMBINING OLD PERMIC LETTER DOI;Mn;230;NSM;;;;;N;;;;; 10378;COMBINING OLD PERMIC LETTER ZATA;Mn;230;NSM;;;;;N;;;;; 10379;COMBINING OLD PERMIC LETTER NENOE;Mn;230;NSM;;;;;N;;;;; 1037A;COMBINING OLD PERMIC LETTER SII;Mn;230;NSM;;;;;N;;;;; 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; 10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; 10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; 10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; 10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; 10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; 10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; 10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; 1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; 1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; 1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; 1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; 1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; 1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; 10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; 10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; 10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; 10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; 10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; 10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; 10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; 10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; 10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; 10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; 1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; 1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; 103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; 103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; 103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; 103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; 103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; 103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; 103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; 103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; 103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; 103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; 103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; 103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; 103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; 103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; 103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; 103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; 103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; 103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; 103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; 103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; 103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; 103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; 103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; 103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; 103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; 103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; 103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; 103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; 103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; 103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; 103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; 103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; 103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; 103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; 103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; 103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; 103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; 103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; 103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; 103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; 103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; 103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; 103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; 103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; 103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; 103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; 103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; 103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; 103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; 10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; 10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; 10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; 10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; 10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; 10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; 10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; 1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; 1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; 1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; 1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; 1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; 1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; 10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; 10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; 10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; 10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; 10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; 10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; 10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; 10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; 10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; 10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; 1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; 1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; 1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; 1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; 1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; 1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; 10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; 10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; 10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; 10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; 10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; 10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; 10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; 10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; 10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A 10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B 10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C 10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D 10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E 10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F 10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A 10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B 10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C 10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D 10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E 10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F 10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; 10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; 10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; 10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; 10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; 10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; 10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; 10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; 10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; 10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; 1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; 1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; 1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; 1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; 1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; 1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; 10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; 10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; 10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; 10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; 10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; 10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; 10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; 10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; 10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; 10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; 1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; 1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; 1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; 1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; 1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; 1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; 10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; 10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; 10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; 10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; 10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; 10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; 10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; 10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; 10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; 10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; 1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; 1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; 1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; 1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; 1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; 1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; 10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; 10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; 10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; 10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; 10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; 10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; 10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; 10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; 10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; 10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; 1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; 1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; 1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; 1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; 1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; 1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; 10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; 10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; 10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; 10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; 10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; 10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; 10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; 10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; 10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; 10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; 1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; 1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; 1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; 1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; 104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8; 104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9; 104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA; 104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB; 104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC; 104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD; 104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE; 104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF; 104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0; 104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1; 104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2; 104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3; 104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4; 104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5; 104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6; 104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7; 104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8; 104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9; 104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA; 104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB; 104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC; 104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED; 104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE; 104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF; 104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0; 104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1; 104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2; 104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3; 104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4; 104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5; 104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6; 104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7; 104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8; 104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9; 104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA; 104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB; 104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0 104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1 104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2 104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3 104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4 104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5 104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6 104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7 104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8 104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9 104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA 104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB 104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC 104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD 104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE 104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF 104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0 104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1 104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2 104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3 104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4 104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5 104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6 104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7 104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8 104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9 104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA 104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB 104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC 104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD 104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE 104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF 104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0 104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1 104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2 104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3 10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;; 10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;; 10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;; 10503;ELBASAN LETTER CHE;Lo;0;L;;;;;N;;;;; 10504;ELBASAN LETTER DE;Lo;0;L;;;;;N;;;;; 10505;ELBASAN LETTER NDE;Lo;0;L;;;;;N;;;;; 10506;ELBASAN LETTER DHE;Lo;0;L;;;;;N;;;;; 10507;ELBASAN LETTER EI;Lo;0;L;;;;;N;;;;; 10508;ELBASAN LETTER E;Lo;0;L;;;;;N;;;;; 10509;ELBASAN LETTER FE;Lo;0;L;;;;;N;;;;; 1050A;ELBASAN LETTER GE;Lo;0;L;;;;;N;;;;; 1050B;ELBASAN LETTER GJE;Lo;0;L;;;;;N;;;;; 1050C;ELBASAN LETTER HE;Lo;0;L;;;;;N;;;;; 1050D;ELBASAN LETTER I;Lo;0;L;;;;;N;;;;; 1050E;ELBASAN LETTER JE;Lo;0;L;;;;;N;;;;; 1050F;ELBASAN LETTER KE;Lo;0;L;;;;;N;;;;; 10510;ELBASAN LETTER LE;Lo;0;L;;;;;N;;;;; 10511;ELBASAN LETTER LLE;Lo;0;L;;;;;N;;;;; 10512;ELBASAN LETTER ME;Lo;0;L;;;;;N;;;;; 10513;ELBASAN LETTER NE;Lo;0;L;;;;;N;;;;; 10514;ELBASAN LETTER NA;Lo;0;L;;;;;N;;;;; 10515;ELBASAN LETTER NJE;Lo;0;L;;;;;N;;;;; 10516;ELBASAN LETTER O;Lo;0;L;;;;;N;;;;; 10517;ELBASAN LETTER PE;Lo;0;L;;;;;N;;;;; 10518;ELBASAN LETTER QE;Lo;0;L;;;;;N;;;;; 10519;ELBASAN LETTER RE;Lo;0;L;;;;;N;;;;; 1051A;ELBASAN LETTER RRE;Lo;0;L;;;;;N;;;;; 1051B;ELBASAN LETTER SE;Lo;0;L;;;;;N;;;;; 1051C;ELBASAN LETTER SHE;Lo;0;L;;;;;N;;;;; 1051D;ELBASAN LETTER TE;Lo;0;L;;;;;N;;;;; 1051E;ELBASAN LETTER THE;Lo;0;L;;;;;N;;;;; 1051F;ELBASAN LETTER U;Lo;0;L;;;;;N;;;;; 10520;ELBASAN LETTER VE;Lo;0;L;;;;;N;;;;; 10521;ELBASAN LETTER XE;Lo;0;L;;;;;N;;;;; 10522;ELBASAN LETTER Y;Lo;0;L;;;;;N;;;;; 10523;ELBASAN LETTER ZE;Lo;0;L;;;;;N;;;;; 10524;ELBASAN LETTER ZHE;Lo;0;L;;;;;N;;;;; 10525;ELBASAN LETTER GHE;Lo;0;L;;;;;N;;;;; 10526;ELBASAN LETTER GHAMMA;Lo;0;L;;;;;N;;;;; 10527;ELBASAN LETTER KHE;Lo;0;L;;;;;N;;;;; 10530;CAUCASIAN ALBANIAN LETTER ALT;Lo;0;L;;;;;N;;;;; 10531;CAUCASIAN ALBANIAN LETTER BET;Lo;0;L;;;;;N;;;;; 10532;CAUCASIAN ALBANIAN LETTER GIM;Lo;0;L;;;;;N;;;;; 10533;CAUCASIAN ALBANIAN LETTER DAT;Lo;0;L;;;;;N;;;;; 10534;CAUCASIAN ALBANIAN LETTER EB;Lo;0;L;;;;;N;;;;; 10535;CAUCASIAN ALBANIAN LETTER ZARL;Lo;0;L;;;;;N;;;;; 10536;CAUCASIAN ALBANIAN LETTER EYN;Lo;0;L;;;;;N;;;;; 10537;CAUCASIAN ALBANIAN LETTER ZHIL;Lo;0;L;;;;;N;;;;; 10538;CAUCASIAN ALBANIAN LETTER TAS;Lo;0;L;;;;;N;;;;; 10539;CAUCASIAN ALBANIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1053A;CAUCASIAN ALBANIAN LETTER YOWD;Lo;0;L;;;;;N;;;;; 1053B;CAUCASIAN ALBANIAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 1053C;CAUCASIAN ALBANIAN LETTER IRB;Lo;0;L;;;;;N;;;;; 1053D;CAUCASIAN ALBANIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1053E;CAUCASIAN ALBANIAN LETTER LAN;Lo;0;L;;;;;N;;;;; 1053F;CAUCASIAN ALBANIAN LETTER INYA;Lo;0;L;;;;;N;;;;; 10540;CAUCASIAN ALBANIAN LETTER XEYN;Lo;0;L;;;;;N;;;;; 10541;CAUCASIAN ALBANIAN LETTER DYAN;Lo;0;L;;;;;N;;;;; 10542;CAUCASIAN ALBANIAN LETTER CAR;Lo;0;L;;;;;N;;;;; 10543;CAUCASIAN ALBANIAN LETTER JHOX;Lo;0;L;;;;;N;;;;; 10544;CAUCASIAN ALBANIAN LETTER KAR;Lo;0;L;;;;;N;;;;; 10545;CAUCASIAN ALBANIAN LETTER LYIT;Lo;0;L;;;;;N;;;;; 10546;CAUCASIAN ALBANIAN LETTER HEYT;Lo;0;L;;;;;N;;;;; 10547;CAUCASIAN ALBANIAN LETTER QAY;Lo;0;L;;;;;N;;;;; 10548;CAUCASIAN ALBANIAN LETTER AOR;Lo;0;L;;;;;N;;;;; 10549;CAUCASIAN ALBANIAN LETTER CHOY;Lo;0;L;;;;;N;;;;; 1054A;CAUCASIAN ALBANIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1054B;CAUCASIAN ALBANIAN LETTER CYAY;Lo;0;L;;;;;N;;;;; 1054C;CAUCASIAN ALBANIAN LETTER MAQ;Lo;0;L;;;;;N;;;;; 1054D;CAUCASIAN ALBANIAN LETTER QAR;Lo;0;L;;;;;N;;;;; 1054E;CAUCASIAN ALBANIAN LETTER NOWC;Lo;0;L;;;;;N;;;;; 1054F;CAUCASIAN ALBANIAN LETTER DZYAY;Lo;0;L;;;;;N;;;;; 10550;CAUCASIAN ALBANIAN LETTER SHAK;Lo;0;L;;;;;N;;;;; 10551;CAUCASIAN ALBANIAN LETTER JAYN;Lo;0;L;;;;;N;;;;; 10552;CAUCASIAN ALBANIAN LETTER ON;Lo;0;L;;;;;N;;;;; 10553;CAUCASIAN ALBANIAN LETTER TYAY;Lo;0;L;;;;;N;;;;; 10554;CAUCASIAN ALBANIAN LETTER FAM;Lo;0;L;;;;;N;;;;; 10555;CAUCASIAN ALBANIAN LETTER DZAY;Lo;0;L;;;;;N;;;;; 10556;CAUCASIAN ALBANIAN LETTER CHAT;Lo;0;L;;;;;N;;;;; 10557;CAUCASIAN ALBANIAN LETTER PEN;Lo;0;L;;;;;N;;;;; 10558;CAUCASIAN ALBANIAN LETTER GHEYS;Lo;0;L;;;;;N;;;;; 10559;CAUCASIAN ALBANIAN LETTER RAT;Lo;0;L;;;;;N;;;;; 1055A;CAUCASIAN ALBANIAN LETTER SEYK;Lo;0;L;;;;;N;;;;; 1055B;CAUCASIAN ALBANIAN LETTER VEYZ;Lo;0;L;;;;;N;;;;; 1055C;CAUCASIAN ALBANIAN LETTER TIWR;Lo;0;L;;;;;N;;;;; 1055D;CAUCASIAN ALBANIAN LETTER SHOY;Lo;0;L;;;;;N;;;;; 1055E;CAUCASIAN ALBANIAN LETTER IWN;Lo;0;L;;;;;N;;;;; 1055F;CAUCASIAN ALBANIAN LETTER CYAW;Lo;0;L;;;;;N;;;;; 10560;CAUCASIAN ALBANIAN LETTER CAYN;Lo;0;L;;;;;N;;;;; 10561;CAUCASIAN ALBANIAN LETTER YAYD;Lo;0;L;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; 10603;LINEAR A SIGN AB004;Lo;0;L;;;;;N;;;;; 10604;LINEAR A SIGN AB005;Lo;0;L;;;;;N;;;;; 10605;LINEAR A SIGN AB006;Lo;0;L;;;;;N;;;;; 10606;LINEAR A SIGN AB007;Lo;0;L;;;;;N;;;;; 10607;LINEAR A SIGN AB008;Lo;0;L;;;;;N;;;;; 10608;LINEAR A SIGN AB009;Lo;0;L;;;;;N;;;;; 10609;LINEAR A SIGN AB010;Lo;0;L;;;;;N;;;;; 1060A;LINEAR A SIGN AB011;Lo;0;L;;;;;N;;;;; 1060B;LINEAR A SIGN AB013;Lo;0;L;;;;;N;;;;; 1060C;LINEAR A SIGN AB016;Lo;0;L;;;;;N;;;;; 1060D;LINEAR A SIGN AB017;Lo;0;L;;;;;N;;;;; 1060E;LINEAR A SIGN AB020;Lo;0;L;;;;;N;;;;; 1060F;LINEAR A SIGN AB021;Lo;0;L;;;;;N;;;;; 10610;LINEAR A SIGN AB021F;Lo;0;L;;;;;N;;;;; 10611;LINEAR A SIGN AB021M;Lo;0;L;;;;;N;;;;; 10612;LINEAR A SIGN AB022;Lo;0;L;;;;;N;;;;; 10613;LINEAR A SIGN AB022F;Lo;0;L;;;;;N;;;;; 10614;LINEAR A SIGN AB022M;Lo;0;L;;;;;N;;;;; 10615;LINEAR A SIGN AB023;Lo;0;L;;;;;N;;;;; 10616;LINEAR A SIGN AB023M;Lo;0;L;;;;;N;;;;; 10617;LINEAR A SIGN AB024;Lo;0;L;;;;;N;;;;; 10618;LINEAR A SIGN AB026;Lo;0;L;;;;;N;;;;; 10619;LINEAR A SIGN AB027;Lo;0;L;;;;;N;;;;; 1061A;LINEAR A SIGN AB028;Lo;0;L;;;;;N;;;;; 1061B;LINEAR A SIGN A028B;Lo;0;L;;;;;N;;;;; 1061C;LINEAR A SIGN AB029;Lo;0;L;;;;;N;;;;; 1061D;LINEAR A SIGN AB030;Lo;0;L;;;;;N;;;;; 1061E;LINEAR A SIGN AB031;Lo;0;L;;;;;N;;;;; 1061F;LINEAR A SIGN AB034;Lo;0;L;;;;;N;;;;; 10620;LINEAR A SIGN AB037;Lo;0;L;;;;;N;;;;; 10621;LINEAR A SIGN AB038;Lo;0;L;;;;;N;;;;; 10622;LINEAR A SIGN AB039;Lo;0;L;;;;;N;;;;; 10623;LINEAR A SIGN AB040;Lo;0;L;;;;;N;;;;; 10624;LINEAR A SIGN AB041;Lo;0;L;;;;;N;;;;; 10625;LINEAR A SIGN AB044;Lo;0;L;;;;;N;;;;; 10626;LINEAR A SIGN AB045;Lo;0;L;;;;;N;;;;; 10627;LINEAR A SIGN AB046;Lo;0;L;;;;;N;;;;; 10628;LINEAR A SIGN AB047;Lo;0;L;;;;;N;;;;; 10629;LINEAR A SIGN AB048;Lo;0;L;;;;;N;;;;; 1062A;LINEAR A SIGN AB049;Lo;0;L;;;;;N;;;;; 1062B;LINEAR A SIGN AB050;Lo;0;L;;;;;N;;;;; 1062C;LINEAR A SIGN AB051;Lo;0;L;;;;;N;;;;; 1062D;LINEAR A SIGN AB053;Lo;0;L;;;;;N;;;;; 1062E;LINEAR A SIGN AB054;Lo;0;L;;;;;N;;;;; 1062F;LINEAR A SIGN AB055;Lo;0;L;;;;;N;;;;; 10630;LINEAR A SIGN AB056;Lo;0;L;;;;;N;;;;; 10631;LINEAR A SIGN AB057;Lo;0;L;;;;;N;;;;; 10632;LINEAR A SIGN AB058;Lo;0;L;;;;;N;;;;; 10633;LINEAR A SIGN AB059;Lo;0;L;;;;;N;;;;; 10634;LINEAR A SIGN AB060;Lo;0;L;;;;;N;;;;; 10635;LINEAR A SIGN AB061;Lo;0;L;;;;;N;;;;; 10636;LINEAR A SIGN AB065;Lo;0;L;;;;;N;;;;; 10637;LINEAR A SIGN AB066;Lo;0;L;;;;;N;;;;; 10638;LINEAR A SIGN AB067;Lo;0;L;;;;;N;;;;; 10639;LINEAR A SIGN AB069;Lo;0;L;;;;;N;;;;; 1063A;LINEAR A SIGN AB070;Lo;0;L;;;;;N;;;;; 1063B;LINEAR A SIGN AB073;Lo;0;L;;;;;N;;;;; 1063C;LINEAR A SIGN AB074;Lo;0;L;;;;;N;;;;; 1063D;LINEAR A SIGN AB076;Lo;0;L;;;;;N;;;;; 1063E;LINEAR A SIGN AB077;Lo;0;L;;;;;N;;;;; 1063F;LINEAR A SIGN AB078;Lo;0;L;;;;;N;;;;; 10640;LINEAR A SIGN AB079;Lo;0;L;;;;;N;;;;; 10641;LINEAR A SIGN AB080;Lo;0;L;;;;;N;;;;; 10642;LINEAR A SIGN AB081;Lo;0;L;;;;;N;;;;; 10643;LINEAR A SIGN AB082;Lo;0;L;;;;;N;;;;; 10644;LINEAR A SIGN AB085;Lo;0;L;;;;;N;;;;; 10645;LINEAR A SIGN AB086;Lo;0;L;;;;;N;;;;; 10646;LINEAR A SIGN AB087;Lo;0;L;;;;;N;;;;; 10647;LINEAR A SIGN A100-102;Lo;0;L;;;;;N;;;;; 10648;LINEAR A SIGN AB118;Lo;0;L;;;;;N;;;;; 10649;LINEAR A SIGN AB120;Lo;0;L;;;;;N;;;;; 1064A;LINEAR A SIGN A120B;Lo;0;L;;;;;N;;;;; 1064B;LINEAR A SIGN AB122;Lo;0;L;;;;;N;;;;; 1064C;LINEAR A SIGN AB123;Lo;0;L;;;;;N;;;;; 1064D;LINEAR A SIGN AB131A;Lo;0;L;;;;;N;;;;; 1064E;LINEAR A SIGN AB131B;Lo;0;L;;;;;N;;;;; 1064F;LINEAR A SIGN A131C;Lo;0;L;;;;;N;;;;; 10650;LINEAR A SIGN AB164;Lo;0;L;;;;;N;;;;; 10651;LINEAR A SIGN AB171;Lo;0;L;;;;;N;;;;; 10652;LINEAR A SIGN AB180;Lo;0;L;;;;;N;;;;; 10653;LINEAR A SIGN AB188;Lo;0;L;;;;;N;;;;; 10654;LINEAR A SIGN AB191;Lo;0;L;;;;;N;;;;; 10655;LINEAR A SIGN A301;Lo;0;L;;;;;N;;;;; 10656;LINEAR A SIGN A302;Lo;0;L;;;;;N;;;;; 10657;LINEAR A SIGN A303;Lo;0;L;;;;;N;;;;; 10658;LINEAR A SIGN A304;Lo;0;L;;;;;N;;;;; 10659;LINEAR A SIGN A305;Lo;0;L;;;;;N;;;;; 1065A;LINEAR A SIGN A306;Lo;0;L;;;;;N;;;;; 1065B;LINEAR A SIGN A307;Lo;0;L;;;;;N;;;;; 1065C;LINEAR A SIGN A308;Lo;0;L;;;;;N;;;;; 1065D;LINEAR A SIGN A309A;Lo;0;L;;;;;N;;;;; 1065E;LINEAR A SIGN A309B;Lo;0;L;;;;;N;;;;; 1065F;LINEAR A SIGN A309C;Lo;0;L;;;;;N;;;;; 10660;LINEAR A SIGN A310;Lo;0;L;;;;;N;;;;; 10661;LINEAR A SIGN A311;Lo;0;L;;;;;N;;;;; 10662;LINEAR A SIGN A312;Lo;0;L;;;;;N;;;;; 10663;LINEAR A SIGN A313A;Lo;0;L;;;;;N;;;;; 10664;LINEAR A SIGN A313B;Lo;0;L;;;;;N;;;;; 10665;LINEAR A SIGN A313C;Lo;0;L;;;;;N;;;;; 10666;LINEAR A SIGN A314;Lo;0;L;;;;;N;;;;; 10667;LINEAR A SIGN A315;Lo;0;L;;;;;N;;;;; 10668;LINEAR A SIGN A316;Lo;0;L;;;;;N;;;;; 10669;LINEAR A SIGN A317;Lo;0;L;;;;;N;;;;; 1066A;LINEAR A SIGN A318;Lo;0;L;;;;;N;;;;; 1066B;LINEAR A SIGN A319;Lo;0;L;;;;;N;;;;; 1066C;LINEAR A SIGN A320;Lo;0;L;;;;;N;;;;; 1066D;LINEAR A SIGN A321;Lo;0;L;;;;;N;;;;; 1066E;LINEAR A SIGN A322;Lo;0;L;;;;;N;;;;; 1066F;LINEAR A SIGN A323;Lo;0;L;;;;;N;;;;; 10670;LINEAR A SIGN A324;Lo;0;L;;;;;N;;;;; 10671;LINEAR A SIGN A325;Lo;0;L;;;;;N;;;;; 10672;LINEAR A SIGN A326;Lo;0;L;;;;;N;;;;; 10673;LINEAR A SIGN A327;Lo;0;L;;;;;N;;;;; 10674;LINEAR A SIGN A328;Lo;0;L;;;;;N;;;;; 10675;LINEAR A SIGN A329;Lo;0;L;;;;;N;;;;; 10676;LINEAR A SIGN A330;Lo;0;L;;;;;N;;;;; 10677;LINEAR A SIGN A331;Lo;0;L;;;;;N;;;;; 10678;LINEAR A SIGN A332;Lo;0;L;;;;;N;;;;; 10679;LINEAR A SIGN A333;Lo;0;L;;;;;N;;;;; 1067A;LINEAR A SIGN A334;Lo;0;L;;;;;N;;;;; 1067B;LINEAR A SIGN A335;Lo;0;L;;;;;N;;;;; 1067C;LINEAR A SIGN A336;Lo;0;L;;;;;N;;;;; 1067D;LINEAR A SIGN A337;Lo;0;L;;;;;N;;;;; 1067E;LINEAR A SIGN A338;Lo;0;L;;;;;N;;;;; 1067F;LINEAR A SIGN A339;Lo;0;L;;;;;N;;;;; 10680;LINEAR A SIGN A340;Lo;0;L;;;;;N;;;;; 10681;LINEAR A SIGN A341;Lo;0;L;;;;;N;;;;; 10682;LINEAR A SIGN A342;Lo;0;L;;;;;N;;;;; 10683;LINEAR A SIGN A343;Lo;0;L;;;;;N;;;;; 10684;LINEAR A SIGN A344;Lo;0;L;;;;;N;;;;; 10685;LINEAR A SIGN A345;Lo;0;L;;;;;N;;;;; 10686;LINEAR A SIGN A346;Lo;0;L;;;;;N;;;;; 10687;LINEAR A SIGN A347;Lo;0;L;;;;;N;;;;; 10688;LINEAR A SIGN A348;Lo;0;L;;;;;N;;;;; 10689;LINEAR A SIGN A349;Lo;0;L;;;;;N;;;;; 1068A;LINEAR A SIGN A350;Lo;0;L;;;;;N;;;;; 1068B;LINEAR A SIGN A351;Lo;0;L;;;;;N;;;;; 1068C;LINEAR A SIGN A352;Lo;0;L;;;;;N;;;;; 1068D;LINEAR A SIGN A353;Lo;0;L;;;;;N;;;;; 1068E;LINEAR A SIGN A354;Lo;0;L;;;;;N;;;;; 1068F;LINEAR A SIGN A355;Lo;0;L;;;;;N;;;;; 10690;LINEAR A SIGN A356;Lo;0;L;;;;;N;;;;; 10691;LINEAR A SIGN A357;Lo;0;L;;;;;N;;;;; 10692;LINEAR A SIGN A358;Lo;0;L;;;;;N;;;;; 10693;LINEAR A SIGN A359;Lo;0;L;;;;;N;;;;; 10694;LINEAR A SIGN A360;Lo;0;L;;;;;N;;;;; 10695;LINEAR A SIGN A361;Lo;0;L;;;;;N;;;;; 10696;LINEAR A SIGN A362;Lo;0;L;;;;;N;;;;; 10697;LINEAR A SIGN A363;Lo;0;L;;;;;N;;;;; 10698;LINEAR A SIGN A364;Lo;0;L;;;;;N;;;;; 10699;LINEAR A SIGN A365;Lo;0;L;;;;;N;;;;; 1069A;LINEAR A SIGN A366;Lo;0;L;;;;;N;;;;; 1069B;LINEAR A SIGN A367;Lo;0;L;;;;;N;;;;; 1069C;LINEAR A SIGN A368;Lo;0;L;;;;;N;;;;; 1069D;LINEAR A SIGN A369;Lo;0;L;;;;;N;;;;; 1069E;LINEAR A SIGN A370;Lo;0;L;;;;;N;;;;; 1069F;LINEAR A SIGN A371;Lo;0;L;;;;;N;;;;; 106A0;LINEAR A SIGN A400-VAS;Lo;0;L;;;;;N;;;;; 106A1;LINEAR A SIGN A401-VAS;Lo;0;L;;;;;N;;;;; 106A2;LINEAR A SIGN A402-VAS;Lo;0;L;;;;;N;;;;; 106A3;LINEAR A SIGN A403-VAS;Lo;0;L;;;;;N;;;;; 106A4;LINEAR A SIGN A404-VAS;Lo;0;L;;;;;N;;;;; 106A5;LINEAR A SIGN A405-VAS;Lo;0;L;;;;;N;;;;; 106A6;LINEAR A SIGN A406-VAS;Lo;0;L;;;;;N;;;;; 106A7;LINEAR A SIGN A407-VAS;Lo;0;L;;;;;N;;;;; 106A8;LINEAR A SIGN A408-VAS;Lo;0;L;;;;;N;;;;; 106A9;LINEAR A SIGN A409-VAS;Lo;0;L;;;;;N;;;;; 106AA;LINEAR A SIGN A410-VAS;Lo;0;L;;;;;N;;;;; 106AB;LINEAR A SIGN A411-VAS;Lo;0;L;;;;;N;;;;; 106AC;LINEAR A SIGN A412-VAS;Lo;0;L;;;;;N;;;;; 106AD;LINEAR A SIGN A413-VAS;Lo;0;L;;;;;N;;;;; 106AE;LINEAR A SIGN A414-VAS;Lo;0;L;;;;;N;;;;; 106AF;LINEAR A SIGN A415-VAS;Lo;0;L;;;;;N;;;;; 106B0;LINEAR A SIGN A416-VAS;Lo;0;L;;;;;N;;;;; 106B1;LINEAR A SIGN A417-VAS;Lo;0;L;;;;;N;;;;; 106B2;LINEAR A SIGN A418-VAS;Lo;0;L;;;;;N;;;;; 106B3;LINEAR A SIGN A501;Lo;0;L;;;;;N;;;;; 106B4;LINEAR A SIGN A502;Lo;0;L;;;;;N;;;;; 106B5;LINEAR A SIGN A503;Lo;0;L;;;;;N;;;;; 106B6;LINEAR A SIGN A504;Lo;0;L;;;;;N;;;;; 106B7;LINEAR A SIGN A505;Lo;0;L;;;;;N;;;;; 106B8;LINEAR A SIGN A506;Lo;0;L;;;;;N;;;;; 106B9;LINEAR A SIGN A508;Lo;0;L;;;;;N;;;;; 106BA;LINEAR A SIGN A509;Lo;0;L;;;;;N;;;;; 106BB;LINEAR A SIGN A510;Lo;0;L;;;;;N;;;;; 106BC;LINEAR A SIGN A511;Lo;0;L;;;;;N;;;;; 106BD;LINEAR A SIGN A512;Lo;0;L;;;;;N;;;;; 106BE;LINEAR A SIGN A513;Lo;0;L;;;;;N;;;;; 106BF;LINEAR A SIGN A515;Lo;0;L;;;;;N;;;;; 106C0;LINEAR A SIGN A516;Lo;0;L;;;;;N;;;;; 106C1;LINEAR A SIGN A520;Lo;0;L;;;;;N;;;;; 106C2;LINEAR A SIGN A521;Lo;0;L;;;;;N;;;;; 106C3;LINEAR A SIGN A523;Lo;0;L;;;;;N;;;;; 106C4;LINEAR A SIGN A524;Lo;0;L;;;;;N;;;;; 106C5;LINEAR A SIGN A525;Lo;0;L;;;;;N;;;;; 106C6;LINEAR A SIGN A526;Lo;0;L;;;;;N;;;;; 106C7;LINEAR A SIGN A527;Lo;0;L;;;;;N;;;;; 106C8;LINEAR A SIGN A528;Lo;0;L;;;;;N;;;;; 106C9;LINEAR A SIGN A529;Lo;0;L;;;;;N;;;;; 106CA;LINEAR A SIGN A530;Lo;0;L;;;;;N;;;;; 106CB;LINEAR A SIGN A531;Lo;0;L;;;;;N;;;;; 106CC;LINEAR A SIGN A532;Lo;0;L;;;;;N;;;;; 106CD;LINEAR A SIGN A534;Lo;0;L;;;;;N;;;;; 106CE;LINEAR A SIGN A535;Lo;0;L;;;;;N;;;;; 106CF;LINEAR A SIGN A536;Lo;0;L;;;;;N;;;;; 106D0;LINEAR A SIGN A537;Lo;0;L;;;;;N;;;;; 106D1;LINEAR A SIGN A538;Lo;0;L;;;;;N;;;;; 106D2;LINEAR A SIGN A539;Lo;0;L;;;;;N;;;;; 106D3;LINEAR A SIGN A540;Lo;0;L;;;;;N;;;;; 106D4;LINEAR A SIGN A541;Lo;0;L;;;;;N;;;;; 106D5;LINEAR A SIGN A542;Lo;0;L;;;;;N;;;;; 106D6;LINEAR A SIGN A545;Lo;0;L;;;;;N;;;;; 106D7;LINEAR A SIGN A547;Lo;0;L;;;;;N;;;;; 106D8;LINEAR A SIGN A548;Lo;0;L;;;;;N;;;;; 106D9;LINEAR A SIGN A549;Lo;0;L;;;;;N;;;;; 106DA;LINEAR A SIGN A550;Lo;0;L;;;;;N;;;;; 106DB;LINEAR A SIGN A551;Lo;0;L;;;;;N;;;;; 106DC;LINEAR A SIGN A552;Lo;0;L;;;;;N;;;;; 106DD;LINEAR A SIGN A553;Lo;0;L;;;;;N;;;;; 106DE;LINEAR A SIGN A554;Lo;0;L;;;;;N;;;;; 106DF;LINEAR A SIGN A555;Lo;0;L;;;;;N;;;;; 106E0;LINEAR A SIGN A556;Lo;0;L;;;;;N;;;;; 106E1;LINEAR A SIGN A557;Lo;0;L;;;;;N;;;;; 106E2;LINEAR A SIGN A559;Lo;0;L;;;;;N;;;;; 106E3;LINEAR A SIGN A563;Lo;0;L;;;;;N;;;;; 106E4;LINEAR A SIGN A564;Lo;0;L;;;;;N;;;;; 106E5;LINEAR A SIGN A565;Lo;0;L;;;;;N;;;;; 106E6;LINEAR A SIGN A566;Lo;0;L;;;;;N;;;;; 106E7;LINEAR A SIGN A568;Lo;0;L;;;;;N;;;;; 106E8;LINEAR A SIGN A569;Lo;0;L;;;;;N;;;;; 106E9;LINEAR A SIGN A570;Lo;0;L;;;;;N;;;;; 106EA;LINEAR A SIGN A571;Lo;0;L;;;;;N;;;;; 106EB;LINEAR A SIGN A572;Lo;0;L;;;;;N;;;;; 106EC;LINEAR A SIGN A573;Lo;0;L;;;;;N;;;;; 106ED;LINEAR A SIGN A574;Lo;0;L;;;;;N;;;;; 106EE;LINEAR A SIGN A575;Lo;0;L;;;;;N;;;;; 106EF;LINEAR A SIGN A576;Lo;0;L;;;;;N;;;;; 106F0;LINEAR A SIGN A577;Lo;0;L;;;;;N;;;;; 106F1;LINEAR A SIGN A578;Lo;0;L;;;;;N;;;;; 106F2;LINEAR A SIGN A579;Lo;0;L;;;;;N;;;;; 106F3;LINEAR A SIGN A580;Lo;0;L;;;;;N;;;;; 106F4;LINEAR A SIGN A581;Lo;0;L;;;;;N;;;;; 106F5;LINEAR A SIGN A582;Lo;0;L;;;;;N;;;;; 106F6;LINEAR A SIGN A583;Lo;0;L;;;;;N;;;;; 106F7;LINEAR A SIGN A584;Lo;0;L;;;;;N;;;;; 106F8;LINEAR A SIGN A585;Lo;0;L;;;;;N;;;;; 106F9;LINEAR A SIGN A586;Lo;0;L;;;;;N;;;;; 106FA;LINEAR A SIGN A587;Lo;0;L;;;;;N;;;;; 106FB;LINEAR A SIGN A588;Lo;0;L;;;;;N;;;;; 106FC;LINEAR A SIGN A589;Lo;0;L;;;;;N;;;;; 106FD;LINEAR A SIGN A591;Lo;0;L;;;;;N;;;;; 106FE;LINEAR A SIGN A592;Lo;0;L;;;;;N;;;;; 106FF;LINEAR A SIGN A594;Lo;0;L;;;;;N;;;;; 10700;LINEAR A SIGN A595;Lo;0;L;;;;;N;;;;; 10701;LINEAR A SIGN A596;Lo;0;L;;;;;N;;;;; 10702;LINEAR A SIGN A598;Lo;0;L;;;;;N;;;;; 10703;LINEAR A SIGN A600;Lo;0;L;;;;;N;;;;; 10704;LINEAR A SIGN A601;Lo;0;L;;;;;N;;;;; 10705;LINEAR A SIGN A602;Lo;0;L;;;;;N;;;;; 10706;LINEAR A SIGN A603;Lo;0;L;;;;;N;;;;; 10707;LINEAR A SIGN A604;Lo;0;L;;;;;N;;;;; 10708;LINEAR A SIGN A606;Lo;0;L;;;;;N;;;;; 10709;LINEAR A SIGN A608;Lo;0;L;;;;;N;;;;; 1070A;LINEAR A SIGN A609;Lo;0;L;;;;;N;;;;; 1070B;LINEAR A SIGN A610;Lo;0;L;;;;;N;;;;; 1070C;LINEAR A SIGN A611;Lo;0;L;;;;;N;;;;; 1070D;LINEAR A SIGN A612;Lo;0;L;;;;;N;;;;; 1070E;LINEAR A SIGN A613;Lo;0;L;;;;;N;;;;; 1070F;LINEAR A SIGN A614;Lo;0;L;;;;;N;;;;; 10710;LINEAR A SIGN A615;Lo;0;L;;;;;N;;;;; 10711;LINEAR A SIGN A616;Lo;0;L;;;;;N;;;;; 10712;LINEAR A SIGN A617;Lo;0;L;;;;;N;;;;; 10713;LINEAR A SIGN A618;Lo;0;L;;;;;N;;;;; 10714;LINEAR A SIGN A619;Lo;0;L;;;;;N;;;;; 10715;LINEAR A SIGN A620;Lo;0;L;;;;;N;;;;; 10716;LINEAR A SIGN A621;Lo;0;L;;;;;N;;;;; 10717;LINEAR A SIGN A622;Lo;0;L;;;;;N;;;;; 10718;LINEAR A SIGN A623;Lo;0;L;;;;;N;;;;; 10719;LINEAR A SIGN A624;Lo;0;L;;;;;N;;;;; 1071A;LINEAR A SIGN A626;Lo;0;L;;;;;N;;;;; 1071B;LINEAR A SIGN A627;Lo;0;L;;;;;N;;;;; 1071C;LINEAR A SIGN A628;Lo;0;L;;;;;N;;;;; 1071D;LINEAR A SIGN A629;Lo;0;L;;;;;N;;;;; 1071E;LINEAR A SIGN A634;Lo;0;L;;;;;N;;;;; 1071F;LINEAR A SIGN A637;Lo;0;L;;;;;N;;;;; 10720;LINEAR A SIGN A638;Lo;0;L;;;;;N;;;;; 10721;LINEAR A SIGN A640;Lo;0;L;;;;;N;;;;; 10722;LINEAR A SIGN A642;Lo;0;L;;;;;N;;;;; 10723;LINEAR A SIGN A643;Lo;0;L;;;;;N;;;;; 10724;LINEAR A SIGN A644;Lo;0;L;;;;;N;;;;; 10725;LINEAR A SIGN A645;Lo;0;L;;;;;N;;;;; 10726;LINEAR A SIGN A646;Lo;0;L;;;;;N;;;;; 10727;LINEAR A SIGN A648;Lo;0;L;;;;;N;;;;; 10728;LINEAR A SIGN A649;Lo;0;L;;;;;N;;;;; 10729;LINEAR A SIGN A651;Lo;0;L;;;;;N;;;;; 1072A;LINEAR A SIGN A652;Lo;0;L;;;;;N;;;;; 1072B;LINEAR A SIGN A653;Lo;0;L;;;;;N;;;;; 1072C;LINEAR A SIGN A654;Lo;0;L;;;;;N;;;;; 1072D;LINEAR A SIGN A655;Lo;0;L;;;;;N;;;;; 1072E;LINEAR A SIGN A656;Lo;0;L;;;;;N;;;;; 1072F;LINEAR A SIGN A657;Lo;0;L;;;;;N;;;;; 10730;LINEAR A SIGN A658;Lo;0;L;;;;;N;;;;; 10731;LINEAR A SIGN A659;Lo;0;L;;;;;N;;;;; 10732;LINEAR A SIGN A660;Lo;0;L;;;;;N;;;;; 10733;LINEAR A SIGN A661;Lo;0;L;;;;;N;;;;; 10734;LINEAR A SIGN A662;Lo;0;L;;;;;N;;;;; 10735;LINEAR A SIGN A663;Lo;0;L;;;;;N;;;;; 10736;LINEAR A SIGN A664;Lo;0;L;;;;;N;;;;; 10740;LINEAR A SIGN A701 A;Lo;0;L;;;;;N;;;;; 10741;LINEAR A SIGN A702 B;Lo;0;L;;;;;N;;;;; 10742;LINEAR A SIGN A703 D;Lo;0;L;;;;;N;;;;; 10743;LINEAR A SIGN A704 E;Lo;0;L;;;;;N;;;;; 10744;LINEAR A SIGN A705 F;Lo;0;L;;;;;N;;;;; 10745;LINEAR A SIGN A706 H;Lo;0;L;;;;;N;;;;; 10746;LINEAR A SIGN A707 J;Lo;0;L;;;;;N;;;;; 10747;LINEAR A SIGN A708 K;Lo;0;L;;;;;N;;;;; 10748;LINEAR A SIGN A709 L;Lo;0;L;;;;;N;;;;; 10749;LINEAR A SIGN A709-2 L2;Lo;0;L;;;;;N;;;;; 1074A;LINEAR A SIGN A709-3 L3;Lo;0;L;;;;;N;;;;; 1074B;LINEAR A SIGN A709-4 L4;Lo;0;L;;;;;N;;;;; 1074C;LINEAR A SIGN A709-6 L6;Lo;0;L;;;;;N;;;;; 1074D;LINEAR A SIGN A710 W;Lo;0;L;;;;;N;;;;; 1074E;LINEAR A SIGN A711 X;Lo;0;L;;;;;N;;;;; 1074F;LINEAR A SIGN A712 Y;Lo;0;L;;;;;N;;;;; 10750;LINEAR A SIGN A713 OMEGA;Lo;0;L;;;;;N;;;;; 10751;LINEAR A SIGN A714 ABB;Lo;0;L;;;;;N;;;;; 10752;LINEAR A SIGN A715 BB;Lo;0;L;;;;;N;;;;; 10753;LINEAR A SIGN A717 DD;Lo;0;L;;;;;N;;;;; 10754;LINEAR A SIGN A726 EYYY;Lo;0;L;;;;;N;;;;; 10755;LINEAR A SIGN A732 JE;Lo;0;L;;;;;N;;;;; 10760;LINEAR A SIGN A800;Lo;0;L;;;;;N;;;;; 10761;LINEAR A SIGN A801;Lo;0;L;;;;;N;;;;; 10762;LINEAR A SIGN A802;Lo;0;L;;;;;N;;;;; 10763;LINEAR A SIGN A803;Lo;0;L;;;;;N;;;;; 10764;LINEAR A SIGN A804;Lo;0;L;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; 10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; 10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; 10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; 10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; 1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; 1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; 1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; 1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; 1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; 1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; 10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; 10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; 10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; 10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; 10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; 10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; 10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; 10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; 10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; 10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; 1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; 1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; 1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; 1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; 1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; 1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; 10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; 10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; 10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; 10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; 10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; 10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; 10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; 10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; 10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; 10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; 1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; 1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; 1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; 1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; 1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; 1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; 10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; 10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; 10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; 10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; 10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; 10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; 10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; 10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; 10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; 10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;; 10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; 10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; 10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; 10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; 1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; 1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; 1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; 1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; 10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;; 10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; 10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; 10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; 10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; 10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; 10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;; 10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;; 10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;; 1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;; 1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;; 1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;; 1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 10860;PALMYRENE LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10861;PALMYRENE LETTER BETH;Lo;0;R;;;;;N;;;;; 10862;PALMYRENE LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10863;PALMYRENE LETTER DALETH;Lo;0;R;;;;;N;;;;; 10864;PALMYRENE LETTER HE;Lo;0;R;;;;;N;;;;; 10865;PALMYRENE LETTER WAW;Lo;0;R;;;;;N;;;;; 10866;PALMYRENE LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10867;PALMYRENE LETTER HETH;Lo;0;R;;;;;N;;;;; 10868;PALMYRENE LETTER TETH;Lo;0;R;;;;;N;;;;; 10869;PALMYRENE LETTER YODH;Lo;0;R;;;;;N;;;;; 1086A;PALMYRENE LETTER KAPH;Lo;0;R;;;;;N;;;;; 1086B;PALMYRENE LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 1086C;PALMYRENE LETTER MEM;Lo;0;R;;;;;N;;;;; 1086D;PALMYRENE LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 1086E;PALMYRENE LETTER NUN;Lo;0;R;;;;;N;;;;; 1086F;PALMYRENE LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10870;PALMYRENE LETTER AYIN;Lo;0;R;;;;;N;;;;; 10871;PALMYRENE LETTER PE;Lo;0;R;;;;;N;;;;; 10872;PALMYRENE LETTER SADHE;Lo;0;R;;;;;N;;;;; 10873;PALMYRENE LETTER QOPH;Lo;0;R;;;;;N;;;;; 10874;PALMYRENE LETTER RESH;Lo;0;R;;;;;N;;;;; 10875;PALMYRENE LETTER SHIN;Lo;0;R;;;;;N;;;;; 10876;PALMYRENE LETTER TAW;Lo;0;R;;;;;N;;;;; 10877;PALMYRENE LEFT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10878;PALMYRENE RIGHT-POINTING FLEURON;So;0;R;;;;;N;;;;; 10879;PALMYRENE NUMBER ONE;No;0;R;;;;1;N;;;;; 1087A;PALMYRENE NUMBER TWO;No;0;R;;;;2;N;;;;; 1087B;PALMYRENE NUMBER THREE;No;0;R;;;;3;N;;;;; 1087C;PALMYRENE NUMBER FOUR;No;0;R;;;;4;N;;;;; 1087D;PALMYRENE NUMBER FIVE;No;0;R;;;;5;N;;;;; 1087E;PALMYRENE NUMBER TEN;No;0;R;;;;10;N;;;;; 1087F;PALMYRENE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10880;NABATAEAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10881;NABATAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10882;NABATAEAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;; 10883;NABATAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10884;NABATAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10885;NABATAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10886;NABATAEAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;; 10887;NABATAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10888;NABATAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10889;NABATAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 1088A;NABATAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 1088B;NABATAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 1088C;NABATAEAN LETTER FINAL YODH;Lo;0;R;;;;;N;;;;; 1088D;NABATAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 1088E;NABATAEAN LETTER FINAL KAPH;Lo;0;R;;;;;N;;;;; 1088F;NABATAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10890;NABATAEAN LETTER FINAL LAMEDH;Lo;0;R;;;;;N;;;;; 10891;NABATAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10892;NABATAEAN LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 10893;NABATAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10894;NABATAEAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 10895;NABATAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10896;NABATAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10897;NABATAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10898;NABATAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10899;NABATAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 1089A;NABATAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 1089B;NABATAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 1089C;NABATAEAN LETTER FINAL SHIN;Lo;0;R;;;;;N;;;;; 1089D;NABATAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 1089E;NABATAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108A7;NABATAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108A8;NABATAEAN NUMBER TWO;No;0;R;;;;2;N;;;;; 108A9;NABATAEAN NUMBER THREE;No;0;R;;;;3;N;;;;; 108AA;NABATAEAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AB;NABATAEAN CRUCIFORM NUMBER FOUR;No;0;R;;;;4;N;;;;; 108AC;NABATAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;; 108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;; 108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;; 108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;; 108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;; 108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;; 108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;; 108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;; 108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;; 108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;; 108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;; 108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;; 108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;; 108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;; 108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; 10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; 10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; 10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; 10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; 10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; 10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; 10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; 10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; 1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; 1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; 1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; 10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; 10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; 10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; 10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; 10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; 10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; 10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; 10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; 10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; 10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; 10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; 10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; 10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; 10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; 1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; 1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; 1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; 1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; 1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; 1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; 10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; 10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; 10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; 10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; 10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; 10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; 10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; 10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; 10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;; 10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;; 10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;; 10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;; 10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;; 10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;; 10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;; 1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;; 1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;; 1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;; 1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;; 1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;; 1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;; 10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;; 10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;; 10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;; 10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;; 10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;; 10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;; 10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;; 10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;; 10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;; 10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;; 1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;; 1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;; 1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;; 1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;; 1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;; 1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;; 109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;; 109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;; 109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;; 109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;; 109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;; 109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;; 109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;; 109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;; 109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;; 109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;; 109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;; 109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;; 109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;; 109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;; 109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;; 109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;; 109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;; 109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;; 109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;; 109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;; 109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;; 109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;; 109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;; 109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;; 109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;; 109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;; 109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;; 109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;; 109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;; 109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;; 109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;; 109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;; 109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;; 109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;; 109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;; 109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;; 109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;; 109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;; 109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;; 109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;; 109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;; 109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;; 109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;; 109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;; 109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;; 109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;; 109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;; 109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;; 109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;; 109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;; 109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;; 109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;; 109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;; 109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;; 109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;; 109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;; 109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;; 109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;; 109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;; 109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;; 109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; 109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;; 109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;; 109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;; 109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;; 109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;; 109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;; 109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;; 109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;; 109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;; 109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;; 109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;; 109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;; 109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;; 109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;; 109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;; 109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;; 109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;; 109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;; 109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;; 109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;; 109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;; 109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;; 109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;; 109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;; 109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;; 109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;; 109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;; 10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; 10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; 10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; 10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; 10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; 10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; 10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; 10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; 10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; 10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; 10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; 10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; 10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; 10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; 10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; 10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; 10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; 10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; 10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; 10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; 10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; 10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; 10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; 10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; 10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; 10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; 10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; 10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; 10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; 10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; 10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; 10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; 10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; 10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; 10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; 10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; 10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; 10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; 10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; 10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; 10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; 10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; 10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; 10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; 10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; 10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; 10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; 10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; 10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; 10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; 10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; 10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; 10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; 10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;; 10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;; 10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;; 10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;; 10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;; 10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;; 10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; 10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;; 10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;; 10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;; 10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;; 10A80;OLD NORTH ARABIAN LETTER HEH;Lo;0;R;;;;;N;;;;; 10A81;OLD NORTH ARABIAN LETTER LAM;Lo;0;R;;;;;N;;;;; 10A82;OLD NORTH ARABIAN LETTER HAH;Lo;0;R;;;;;N;;;;; 10A83;OLD NORTH ARABIAN LETTER MEEM;Lo;0;R;;;;;N;;;;; 10A84;OLD NORTH ARABIAN LETTER QAF;Lo;0;R;;;;;N;;;;; 10A85;OLD NORTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10A86;OLD NORTH ARABIAN LETTER ES-2;Lo;0;R;;;;;N;;;;; 10A87;OLD NORTH ARABIAN LETTER REH;Lo;0;R;;;;;N;;;;; 10A88;OLD NORTH ARABIAN LETTER BEH;Lo;0;R;;;;;N;;;;; 10A89;OLD NORTH ARABIAN LETTER TEH;Lo;0;R;;;;;N;;;;; 10A8A;OLD NORTH ARABIAN LETTER ES-1;Lo;0;R;;;;;N;;;;; 10A8B;OLD NORTH ARABIAN LETTER KAF;Lo;0;R;;;;;N;;;;; 10A8C;OLD NORTH ARABIAN LETTER NOON;Lo;0;R;;;;;N;;;;; 10A8D;OLD NORTH ARABIAN LETTER KHAH;Lo;0;R;;;;;N;;;;; 10A8E;OLD NORTH ARABIAN LETTER SAD;Lo;0;R;;;;;N;;;;; 10A8F;OLD NORTH ARABIAN LETTER ES-3;Lo;0;R;;;;;N;;;;; 10A90;OLD NORTH ARABIAN LETTER FEH;Lo;0;R;;;;;N;;;;; 10A91;OLD NORTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; 10A92;OLD NORTH ARABIAN LETTER AIN;Lo;0;R;;;;;N;;;;; 10A93;OLD NORTH ARABIAN LETTER DAD;Lo;0;R;;;;;N;;;;; 10A94;OLD NORTH ARABIAN LETTER GEEM;Lo;0;R;;;;;N;;;;; 10A95;OLD NORTH ARABIAN LETTER DAL;Lo;0;R;;;;;N;;;;; 10A96;OLD NORTH ARABIAN LETTER GHAIN;Lo;0;R;;;;;N;;;;; 10A97;OLD NORTH ARABIAN LETTER TAH;Lo;0;R;;;;;N;;;;; 10A98;OLD NORTH ARABIAN LETTER ZAIN;Lo;0;R;;;;;N;;;;; 10A99;OLD NORTH ARABIAN LETTER THAL;Lo;0;R;;;;;N;;;;; 10A9A;OLD NORTH ARABIAN LETTER YEH;Lo;0;R;;;;;N;;;;; 10A9B;OLD NORTH ARABIAN LETTER THEH;Lo;0;R;;;;;N;;;;; 10A9C;OLD NORTH ARABIAN LETTER ZAH;Lo;0;R;;;;;N;;;;; 10A9D;OLD NORTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10A9E;OLD NORTH ARABIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10A9F;OLD NORTH ARABIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AC0;MANICHAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10AC1;MANICHAEAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10AC2;MANICHAEAN LETTER BHETH;Lo;0;R;;;;;N;;;;; 10AC3;MANICHAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10AC4;MANICHAEAN LETTER GHIMEL;Lo;0;R;;;;;N;;;;; 10AC5;MANICHAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10AC6;MANICHAEAN LETTER HE;Lo;0;R;;;;;N;;;;; 10AC7;MANICHAEAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10AC8;MANICHAEAN SIGN UD;So;0;R;;;;;N;;;;; 10AC9;MANICHAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10ACA;MANICHAEAN LETTER ZHAYIN;Lo;0;R;;;;;N;;;;; 10ACB;MANICHAEAN LETTER JAYIN;Lo;0;R;;;;;N;;;;; 10ACC;MANICHAEAN LETTER JHAYIN;Lo;0;R;;;;;N;;;;; 10ACD;MANICHAEAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10ACE;MANICHAEAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10ACF;MANICHAEAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10AD0;MANICHAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10AD1;MANICHAEAN LETTER XAPH;Lo;0;R;;;;;N;;;;; 10AD2;MANICHAEAN LETTER KHAPH;Lo;0;R;;;;;N;;;;; 10AD3;MANICHAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10AD4;MANICHAEAN LETTER DHAMEDH;Lo;0;R;;;;;N;;;;; 10AD5;MANICHAEAN LETTER THAMEDH;Lo;0;R;;;;;N;;;;; 10AD6;MANICHAEAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10AD7;MANICHAEAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10AD8;MANICHAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10AD9;MANICHAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10ADA;MANICHAEAN LETTER AAYIN;Lo;0;R;;;;;N;;;;; 10ADB;MANICHAEAN LETTER PE;Lo;0;R;;;;;N;;;;; 10ADC;MANICHAEAN LETTER FE;Lo;0;R;;;;;N;;;;; 10ADD;MANICHAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10ADE;MANICHAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10ADF;MANICHAEAN LETTER XOPH;Lo;0;R;;;;;N;;;;; 10AE0;MANICHAEAN LETTER QHOPH;Lo;0;R;;;;;N;;;;; 10AE1;MANICHAEAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10AE2;MANICHAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10AE3;MANICHAEAN LETTER SSHIN;Lo;0;R;;;;;N;;;;; 10AE4;MANICHAEAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10AE5;MANICHAEAN ABBREVIATION MARK ABOVE;Mn;230;NSM;;;;;N;;;;; 10AE6;MANICHAEAN ABBREVIATION MARK BELOW;Mn;220;NSM;;;;;N;;;;; 10AEB;MANICHAEAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10AEC;MANICHAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10AED;MANICHAEAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10AEE;MANICHAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10AEF;MANICHAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10AF0;MANICHAEAN PUNCTUATION STAR;Po;0;R;;;;;N;;;;; 10AF1;MANICHAEAN PUNCTUATION FLEURON;Po;0;R;;;;;N;;;;; 10AF2;MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF3;MANICHAEAN PUNCTUATION DOT WITHIN DOT;Po;0;R;;;;;N;;;;; 10AF4;MANICHAEAN PUNCTUATION DOT;Po;0;R;;;;;N;;;;; 10AF5;MANICHAEAN PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; 10AF6;MANICHAEAN PUNCTUATION LINE FILLER;Po;0;R;;;;;N;;;;; 10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;; 10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;; 10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;; 10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;; 10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;; 10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;; 10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;; 10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;; 10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;; 10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;; 10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;; 10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;; 10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;; 10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;; 10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;; 10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;; 10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;; 10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;; 10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;; 10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;; 10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;; 10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;; 10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;; 10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;; 10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;; 10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;; 10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;; 10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;; 10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;; 10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;; 10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;; 10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;; 10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;; 10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;; 10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;; 10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;; 10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;; 10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;; 10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;; 10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;; 10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;; 10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;; 10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;; 10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;; 10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;; 10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;; 10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;; 10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;; 10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;; 10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;; 10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;; 10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;; 10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;; 10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;; 10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;; 10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;; 10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;; 10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;; 10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;; 10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;; 10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;; 10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;; 10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; 10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;; 10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; 10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;; 10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;; 10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;; 10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;; 10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;; 10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10B80;PSALTER PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10B81;PSALTER PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; 10B82;PSALTER PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; 10B83;PSALTER PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; 10B84;PSALTER PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; 10B85;PSALTER PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; 10B86;PSALTER PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 10B87;PSALTER PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; 10B88;PSALTER PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; 10B89;PSALTER PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; 10B8A;PSALTER PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; 10B8B;PSALTER PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; 10B8C;PSALTER PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; 10B8D;PSALTER PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 10B8E;PSALTER PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; 10B8F;PSALTER PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; 10B90;PSALTER PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; 10B91;PSALTER PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; 10B99;PSALTER PAHLAVI SECTION MARK;Po;0;R;;;;;N;;;;; 10B9A;PSALTER PAHLAVI TURNED SECTION MARK;Po;0;R;;;;;N;;;;; 10B9B;PSALTER PAHLAVI FOUR DOTS WITH CROSS;Po;0;R;;;;;N;;;;; 10B9C;PSALTER PAHLAVI FOUR DOTS WITH DOT;Po;0;R;;;;;N;;;;; 10BA9;PSALTER PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; 10BAA;PSALTER PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; 10BAB;PSALTER PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; 10BAC;PSALTER PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; 10BAD;PSALTER PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; 10BAE;PSALTER PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; 10BAF;PSALTER PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;; 10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;; 10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;; 10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;; 10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;; 10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;; 10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;; 10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;; 10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;; 10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;; 10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;; 10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;; 10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;; 10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;; 10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;; 10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;; 10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;; 10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;; 10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;; 10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;; 10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;; 10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;; 10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;; 10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;; 10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;; 10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;; 10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;; 10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;; 10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;; 10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;; 10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;; 10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;; 10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;; 10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;; 10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;; 10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;; 10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;; 10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;; 10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;; 10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;; 10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;; 10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;; 10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;; 10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;; 10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;; 10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;; 10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;; 10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;; 10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;; 10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;; 10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;; 10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;; 10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;; 10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;; 10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;; 10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;; 10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;; 10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;; 10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;; 10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;; 10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;; 10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;; 10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;; 10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;; 10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;; 10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;; 10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;; 10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;; 10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;; 10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;; 10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;; 10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;; 10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;; 10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0; 10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1; 10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2; 10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3; 10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4; 10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5; 10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6; 10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7; 10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8; 10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9; 10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA; 10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB; 10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC; 10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD; 10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE; 10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF; 10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0; 10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1; 10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2; 10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3; 10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4; 10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5; 10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6; 10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7; 10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8; 10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9; 10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA; 10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB; 10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC; 10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD; 10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE; 10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF; 10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0; 10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1; 10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2; 10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3; 10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4; 10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5; 10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6; 10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7; 10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8; 10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9; 10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA; 10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB; 10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC; 10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED; 10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE; 10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF; 10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0; 10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1; 10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2; 10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80 10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81 10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82 10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83 10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84 10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85 10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86 10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87 10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88 10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89 10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A 10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B 10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C 10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D 10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E 10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F 10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90 10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91 10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92 10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93 10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94 10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95 10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96 10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97 10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98 10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99 10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A 10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B 10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C 10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D 10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E 10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F 10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0 10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1 10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2 10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3 10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4 10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5 10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6 10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7 10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8 10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9 10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA 10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB 10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC 10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD 10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE 10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF 10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0 10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1 10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2 10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;; 10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;; 10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;; 10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; 10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; 10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; 10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; 10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; 10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; 10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;; 10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;; 10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;; 10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;; 10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;; 10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;; 10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;; 10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;; 10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;; 10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;; 10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;; 10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;; 10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;; 10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;; 10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;; 10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;; 10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;; 10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;; 10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;; 10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;; 10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;; 10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;; 10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;; 10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;; 10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;; 10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;; 10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;; 10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;; 11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;; 11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;; 11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;; 11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;; 11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;; 1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;; 1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;; 11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;; 11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;; 11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;; 11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;; 11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;; 11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;; 11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;; 11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;; 11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;; 11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;; 1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;; 1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;; 1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;; 1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;; 1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;; 11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;; 11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;; 11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;; 11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;; 11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;; 11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;; 11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;; 11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;; 11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;; 1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;; 1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;; 1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;; 1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;; 1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;; 1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;; 11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;; 11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;; 11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;; 11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;; 11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;; 11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;; 11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;; 11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;; 11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;; 1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;; 11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;; 11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; 1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; 1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;; 1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;; 1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;; 11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;; 11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;; 11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;; 11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;; 11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;; 11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;; 11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;; 11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;; 1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;; 1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;; 1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;; 1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;; 1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;; 1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;; 11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;; 11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;; 11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;; 11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;; 11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;; 11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;; 11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;; 11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;; 11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;; 11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;; 11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;; 11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;; 11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;; 1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;; 1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;; 1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;; 1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;; 1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;; 1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;; 11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;; 11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;; 11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;; 11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;; 11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;; 11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;; 11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;; 11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;; 11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;; 1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;; 1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;; 1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;; 1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;; 1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;; 110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;; 110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;; 110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;; 110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;; 110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;; 110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;; 110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;; 110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;; 110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;; 110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;; 110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;; 110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;; 110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;; 110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;; 110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;; 110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;; 110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;; 110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;; 110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; 110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;; 110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;; 110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;; 110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;; 110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;; 110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;; 110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;; 110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;; 110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;; 110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;; 110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;; 110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;; 110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;; 110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;; 110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;; 110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;; 110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;; 110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;; 110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;; 110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;; 110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;; 110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;; 110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;; 110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;; 11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;; 11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; 11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;; 11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;; 11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;; 11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;; 11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;; 11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;; 11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;; 1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;; 1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;; 1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;; 1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;; 1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;; 1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;; 11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;; 11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;; 11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;; 11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;; 11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;; 11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;; 11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;; 11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;; 11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;; 11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;; 1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;; 1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;; 1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;; 1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;; 1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;; 1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;; 11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;; 11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;; 11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;; 11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;; 11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;; 11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;; 11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;; 11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; 11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;; 1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;; 11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;; 11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;; 11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;; 11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;; 11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;; 11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;; 11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;; 11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;; 11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;; 11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;; 11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;; 11153;MAHAJANI LETTER E;Lo;0;L;;;;;N;;;;; 11154;MAHAJANI LETTER O;Lo;0;L;;;;;N;;;;; 11155;MAHAJANI LETTER KA;Lo;0;L;;;;;N;;;;; 11156;MAHAJANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11157;MAHAJANI LETTER GA;Lo;0;L;;;;;N;;;;; 11158;MAHAJANI LETTER GHA;Lo;0;L;;;;;N;;;;; 11159;MAHAJANI LETTER CA;Lo;0;L;;;;;N;;;;; 1115A;MAHAJANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1115B;MAHAJANI LETTER JA;Lo;0;L;;;;;N;;;;; 1115C;MAHAJANI LETTER JHA;Lo;0;L;;;;;N;;;;; 1115D;MAHAJANI LETTER NYA;Lo;0;L;;;;;N;;;;; 1115E;MAHAJANI LETTER TTA;Lo;0;L;;;;;N;;;;; 1115F;MAHAJANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11160;MAHAJANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11161;MAHAJANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11162;MAHAJANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11163;MAHAJANI LETTER TA;Lo;0;L;;;;;N;;;;; 11164;MAHAJANI LETTER THA;Lo;0;L;;;;;N;;;;; 11165;MAHAJANI LETTER DA;Lo;0;L;;;;;N;;;;; 11166;MAHAJANI LETTER DHA;Lo;0;L;;;;;N;;;;; 11167;MAHAJANI LETTER NA;Lo;0;L;;;;;N;;;;; 11168;MAHAJANI LETTER PA;Lo;0;L;;;;;N;;;;; 11169;MAHAJANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1116A;MAHAJANI LETTER BA;Lo;0;L;;;;;N;;;;; 1116B;MAHAJANI LETTER BHA;Lo;0;L;;;;;N;;;;; 1116C;MAHAJANI LETTER MA;Lo;0;L;;;;;N;;;;; 1116D;MAHAJANI LETTER RA;Lo;0;L;;;;;N;;;;; 1116E;MAHAJANI LETTER LA;Lo;0;L;;;;;N;;;;; 1116F;MAHAJANI LETTER VA;Lo;0;L;;;;;N;;;;; 11170;MAHAJANI LETTER SA;Lo;0;L;;;;;N;;;;; 11171;MAHAJANI LETTER HA;Lo;0;L;;;;;N;;;;; 11172;MAHAJANI LETTER RRA;Lo;0;L;;;;;N;;;;; 11173;MAHAJANI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11174;MAHAJANI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11175;MAHAJANI SECTION MARK;Po;0;L;;;;;N;;;;; 11176;MAHAJANI LIGATURE SHRI;Lo;0;L;;;;;N;;;;; 11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;; 11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;; 11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;; 11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;; 11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;; 11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;; 11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;; 1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;; 1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;; 11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;; 11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;; 11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;; 11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;; 11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;; 11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;; 11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;; 11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;; 11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;; 11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;; 1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;; 1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;; 1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;; 1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;; 111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;; 111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;; 111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;; 111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;; 111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;; 111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;; 111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;; 111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;; 111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;; 111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;; 111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;; 111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;; 111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;; 111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;; 111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;; 111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;; 111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;; 111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;; 111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;; 111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; 111C4;SHARADA OM;Lo;0;L;;;;;N;;;;; 111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;; 111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;; 111C9;SHARADA SANDHI MARK;Po;0;L;;;;;N;;;;; 111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;; 111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;; 111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;; 111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;; 111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;; 111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;; 111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;; 111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;; 111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;; 111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;; 111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;; 111E4;SINHALA ARCHAIC DIGIT FOUR;No;0;L;;;;4;N;;;;; 111E5;SINHALA ARCHAIC DIGIT FIVE;No;0;L;;;;5;N;;;;; 111E6;SINHALA ARCHAIC DIGIT SIX;No;0;L;;;;6;N;;;;; 111E7;SINHALA ARCHAIC DIGIT SEVEN;No;0;L;;;;7;N;;;;; 111E8;SINHALA ARCHAIC DIGIT EIGHT;No;0;L;;;;8;N;;;;; 111E9;SINHALA ARCHAIC DIGIT NINE;No;0;L;;;;9;N;;;;; 111EA;SINHALA ARCHAIC NUMBER TEN;No;0;L;;;;10;N;;;;; 111EB;SINHALA ARCHAIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 111EC;SINHALA ARCHAIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 111ED;SINHALA ARCHAIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 111EE;SINHALA ARCHAIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 111EF;SINHALA ARCHAIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 111F0;SINHALA ARCHAIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 111F1;SINHALA ARCHAIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 111F2;SINHALA ARCHAIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 111F3;SINHALA ARCHAIC NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 111F4;SINHALA ARCHAIC NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 11200;KHOJKI LETTER A;Lo;0;L;;;;;N;;;;; 11201;KHOJKI LETTER AA;Lo;0;L;;;;;N;;;;; 11202;KHOJKI LETTER I;Lo;0;L;;;;;N;;;;; 11203;KHOJKI LETTER U;Lo;0;L;;;;;N;;;;; 11204;KHOJKI LETTER E;Lo;0;L;;;;;N;;;;; 11205;KHOJKI LETTER AI;Lo;0;L;;;;;N;;;;; 11206;KHOJKI LETTER O;Lo;0;L;;;;;N;;;;; 11207;KHOJKI LETTER AU;Lo;0;L;;;;;N;;;;; 11208;KHOJKI LETTER KA;Lo;0;L;;;;;N;;;;; 11209;KHOJKI LETTER KHA;Lo;0;L;;;;;N;;;;; 1120A;KHOJKI LETTER GA;Lo;0;L;;;;;N;;;;; 1120B;KHOJKI LETTER GGA;Lo;0;L;;;;;N;;;;; 1120C;KHOJKI LETTER GHA;Lo;0;L;;;;;N;;;;; 1120D;KHOJKI LETTER NGA;Lo;0;L;;;;;N;;;;; 1120E;KHOJKI LETTER CA;Lo;0;L;;;;;N;;;;; 1120F;KHOJKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11210;KHOJKI LETTER JA;Lo;0;L;;;;;N;;;;; 11211;KHOJKI LETTER JJA;Lo;0;L;;;;;N;;;;; 11213;KHOJKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11214;KHOJKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11215;KHOJKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11216;KHOJKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11217;KHOJKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11218;KHOJKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11219;KHOJKI LETTER TA;Lo;0;L;;;;;N;;;;; 1121A;KHOJKI LETTER THA;Lo;0;L;;;;;N;;;;; 1121B;KHOJKI LETTER DA;Lo;0;L;;;;;N;;;;; 1121C;KHOJKI LETTER DDDA;Lo;0;L;;;;;N;;;;; 1121D;KHOJKI LETTER DHA;Lo;0;L;;;;;N;;;;; 1121E;KHOJKI LETTER NA;Lo;0;L;;;;;N;;;;; 1121F;KHOJKI LETTER PA;Lo;0;L;;;;;N;;;;; 11220;KHOJKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11221;KHOJKI LETTER BA;Lo;0;L;;;;;N;;;;; 11222;KHOJKI LETTER BBA;Lo;0;L;;;;;N;;;;; 11223;KHOJKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11224;KHOJKI LETTER MA;Lo;0;L;;;;;N;;;;; 11225;KHOJKI LETTER YA;Lo;0;L;;;;;N;;;;; 11226;KHOJKI LETTER RA;Lo;0;L;;;;;N;;;;; 11227;KHOJKI LETTER LA;Lo;0;L;;;;;N;;;;; 11228;KHOJKI LETTER VA;Lo;0;L;;;;;N;;;;; 11229;KHOJKI LETTER SA;Lo;0;L;;;;;N;;;;; 1122A;KHOJKI LETTER HA;Lo;0;L;;;;;N;;;;; 1122B;KHOJKI LETTER LLA;Lo;0;L;;;;;N;;;;; 1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 1122F;KHOJKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11230;KHOJKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11231;KHOJKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11234;KHOJKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11236;KHOJKI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11237;KHOJKI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;; 11238;KHOJKI DANDA;Po;0;L;;;;;N;;;;; 11239;KHOJKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1123A;KHOJKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;; 1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; 11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;; 11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;; 11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;; 11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;; 11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;; 11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;; 11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;; 11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;; 1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;; 1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;; 1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;; 1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;; 1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;; 11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;; 11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;; 11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;; 11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;; 11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;; 11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;; 11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;; 11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;; 1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;; 1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;; 1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;; 1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;; 1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;; 112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;; 112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;; 112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;; 112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;; 112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;; 112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;; 112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;; 112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;; 112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;; 112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;; 112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;; 112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;; 112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;; 112B3;KHUDAWADI LETTER II;Lo;0;L;;;;;N;;;;; 112B4;KHUDAWADI LETTER U;Lo;0;L;;;;;N;;;;; 112B5;KHUDAWADI LETTER UU;Lo;0;L;;;;;N;;;;; 112B6;KHUDAWADI LETTER E;Lo;0;L;;;;;N;;;;; 112B7;KHUDAWADI LETTER AI;Lo;0;L;;;;;N;;;;; 112B8;KHUDAWADI LETTER O;Lo;0;L;;;;;N;;;;; 112B9;KHUDAWADI LETTER AU;Lo;0;L;;;;;N;;;;; 112BA;KHUDAWADI LETTER KA;Lo;0;L;;;;;N;;;;; 112BB;KHUDAWADI LETTER KHA;Lo;0;L;;;;;N;;;;; 112BC;KHUDAWADI LETTER GA;Lo;0;L;;;;;N;;;;; 112BD;KHUDAWADI LETTER GGA;Lo;0;L;;;;;N;;;;; 112BE;KHUDAWADI LETTER GHA;Lo;0;L;;;;;N;;;;; 112BF;KHUDAWADI LETTER NGA;Lo;0;L;;;;;N;;;;; 112C0;KHUDAWADI LETTER CA;Lo;0;L;;;;;N;;;;; 112C1;KHUDAWADI LETTER CHA;Lo;0;L;;;;;N;;;;; 112C2;KHUDAWADI LETTER JA;Lo;0;L;;;;;N;;;;; 112C3;KHUDAWADI LETTER JJA;Lo;0;L;;;;;N;;;;; 112C4;KHUDAWADI LETTER JHA;Lo;0;L;;;;;N;;;;; 112C5;KHUDAWADI LETTER NYA;Lo;0;L;;;;;N;;;;; 112C6;KHUDAWADI LETTER TTA;Lo;0;L;;;;;N;;;;; 112C7;KHUDAWADI LETTER TTHA;Lo;0;L;;;;;N;;;;; 112C8;KHUDAWADI LETTER DDA;Lo;0;L;;;;;N;;;;; 112C9;KHUDAWADI LETTER DDDA;Lo;0;L;;;;;N;;;;; 112CA;KHUDAWADI LETTER RRA;Lo;0;L;;;;;N;;;;; 112CB;KHUDAWADI LETTER DDHA;Lo;0;L;;;;;N;;;;; 112CC;KHUDAWADI LETTER NNA;Lo;0;L;;;;;N;;;;; 112CD;KHUDAWADI LETTER TA;Lo;0;L;;;;;N;;;;; 112CE;KHUDAWADI LETTER THA;Lo;0;L;;;;;N;;;;; 112CF;KHUDAWADI LETTER DA;Lo;0;L;;;;;N;;;;; 112D0;KHUDAWADI LETTER DHA;Lo;0;L;;;;;N;;;;; 112D1;KHUDAWADI LETTER NA;Lo;0;L;;;;;N;;;;; 112D2;KHUDAWADI LETTER PA;Lo;0;L;;;;;N;;;;; 112D3;KHUDAWADI LETTER PHA;Lo;0;L;;;;;N;;;;; 112D4;KHUDAWADI LETTER BA;Lo;0;L;;;;;N;;;;; 112D5;KHUDAWADI LETTER BBA;Lo;0;L;;;;;N;;;;; 112D6;KHUDAWADI LETTER BHA;Lo;0;L;;;;;N;;;;; 112D7;KHUDAWADI LETTER MA;Lo;0;L;;;;;N;;;;; 112D8;KHUDAWADI LETTER YA;Lo;0;L;;;;;N;;;;; 112D9;KHUDAWADI LETTER RA;Lo;0;L;;;;;N;;;;; 112DA;KHUDAWADI LETTER LA;Lo;0;L;;;;;N;;;;; 112DB;KHUDAWADI LETTER VA;Lo;0;L;;;;;N;;;;; 112DC;KHUDAWADI LETTER SHA;Lo;0;L;;;;;N;;;;; 112DD;KHUDAWADI LETTER SA;Lo;0;L;;;;;N;;;;; 112DE;KHUDAWADI LETTER HA;Lo;0;L;;;;;N;;;;; 112DF;KHUDAWADI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 112E3;KHUDAWADI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 112E4;KHUDAWADI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 112E5;KHUDAWADI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 112E6;KHUDAWADI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 112E7;KHUDAWADI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 112E8;KHUDAWADI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 112E9;KHUDAWADI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 112EA;KHUDAWADI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 112F0;KHUDAWADI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 112F1;KHUDAWADI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 112F2;KHUDAWADI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 112F3;KHUDAWADI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 112F4;KHUDAWADI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 112F5;KHUDAWADI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 112F6;KHUDAWADI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11305;GRANTHA LETTER A;Lo;0;L;;;;;N;;;;; 11306;GRANTHA LETTER AA;Lo;0;L;;;;;N;;;;; 11307;GRANTHA LETTER I;Lo;0;L;;;;;N;;;;; 11308;GRANTHA LETTER II;Lo;0;L;;;;;N;;;;; 11309;GRANTHA LETTER U;Lo;0;L;;;;;N;;;;; 1130A;GRANTHA LETTER UU;Lo;0;L;;;;;N;;;;; 1130B;GRANTHA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1130C;GRANTHA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1130F;GRANTHA LETTER EE;Lo;0;L;;;;;N;;;;; 11310;GRANTHA LETTER AI;Lo;0;L;;;;;N;;;;; 11313;GRANTHA LETTER OO;Lo;0;L;;;;;N;;;;; 11314;GRANTHA LETTER AU;Lo;0;L;;;;;N;;;;; 11315;GRANTHA LETTER KA;Lo;0;L;;;;;N;;;;; 11316;GRANTHA LETTER KHA;Lo;0;L;;;;;N;;;;; 11317;GRANTHA LETTER GA;Lo;0;L;;;;;N;;;;; 11318;GRANTHA LETTER GHA;Lo;0;L;;;;;N;;;;; 11319;GRANTHA LETTER NGA;Lo;0;L;;;;;N;;;;; 1131A;GRANTHA LETTER CA;Lo;0;L;;;;;N;;;;; 1131B;GRANTHA LETTER CHA;Lo;0;L;;;;;N;;;;; 1131C;GRANTHA LETTER JA;Lo;0;L;;;;;N;;;;; 1131D;GRANTHA LETTER JHA;Lo;0;L;;;;;N;;;;; 1131E;GRANTHA LETTER NYA;Lo;0;L;;;;;N;;;;; 1131F;GRANTHA LETTER TTA;Lo;0;L;;;;;N;;;;; 11320;GRANTHA LETTER TTHA;Lo;0;L;;;;;N;;;;; 11321;GRANTHA LETTER DDA;Lo;0;L;;;;;N;;;;; 11322;GRANTHA LETTER DDHA;Lo;0;L;;;;;N;;;;; 11323;GRANTHA LETTER NNA;Lo;0;L;;;;;N;;;;; 11324;GRANTHA LETTER TA;Lo;0;L;;;;;N;;;;; 11325;GRANTHA LETTER THA;Lo;0;L;;;;;N;;;;; 11326;GRANTHA LETTER DA;Lo;0;L;;;;;N;;;;; 11327;GRANTHA LETTER DHA;Lo;0;L;;;;;N;;;;; 11328;GRANTHA LETTER NA;Lo;0;L;;;;;N;;;;; 1132A;GRANTHA LETTER PA;Lo;0;L;;;;;N;;;;; 1132B;GRANTHA LETTER PHA;Lo;0;L;;;;;N;;;;; 1132C;GRANTHA LETTER BA;Lo;0;L;;;;;N;;;;; 1132D;GRANTHA LETTER BHA;Lo;0;L;;;;;N;;;;; 1132E;GRANTHA LETTER MA;Lo;0;L;;;;;N;;;;; 1132F;GRANTHA LETTER YA;Lo;0;L;;;;;N;;;;; 11330;GRANTHA LETTER RA;Lo;0;L;;;;;N;;;;; 11332;GRANTHA LETTER LA;Lo;0;L;;;;;N;;;;; 11333;GRANTHA LETTER LLA;Lo;0;L;;;;;N;;;;; 11335;GRANTHA LETTER VA;Lo;0;L;;;;;N;;;;; 11336;GRANTHA LETTER SHA;Lo;0;L;;;;;N;;;;; 11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;; 11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;; 11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;; 1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11340;GRANTHA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;; 1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;; 1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 11350;GRANTHA OM;Lo;0;L;;;;;N;;;;; 11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;; 1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;; 1135F;GRANTHA LETTER VEDIC DOUBLE ANUSVARA;Lo;0;L;;;;;N;;;;; 11360;GRANTHA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11361;GRANTHA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; 11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; 11366;COMBINING GRANTHA DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; 11367;COMBINING GRANTHA DIGIT ONE;Mn;230;NSM;;;;;N;;;;; 11368;COMBINING GRANTHA DIGIT TWO;Mn;230;NSM;;;;;N;;;;; 11369;COMBINING GRANTHA DIGIT THREE;Mn;230;NSM;;;;;N;;;;; 1136A;COMBINING GRANTHA DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; 1136B;COMBINING GRANTHA DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; 1136C;COMBINING GRANTHA DIGIT SIX;Mn;230;NSM;;;;;N;;;;; 11370;COMBINING GRANTHA LETTER A;Mn;230;NSM;;;;;N;;;;; 11371;COMBINING GRANTHA LETTER KA;Mn;230;NSM;;;;;N;;;;; 11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;; 11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;; 11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;; 11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;; 11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;; 11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;; 11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;; 11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;; 11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;; 11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;; 1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;; 1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;; 1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;; 1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;; 1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;; 11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;; 11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;; 11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;; 11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;; 11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;; 11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;; 11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;; 11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;; 11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;; 11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;; 1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;; 1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;; 1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;; 1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;; 11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;; 11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;; 11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;; 11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;; 11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;; 11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;; 11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;; 11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;; 11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;; 11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;; 1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;; 1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;; 1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;; 1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;; 1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;; 1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;; 11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;; 11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;; 11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;; 11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;; 11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;; 11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;; 11449;NEWA OM;Lo;0;L;;;;;N;;;;; 1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;; 1144B;NEWA DANDA;Po;0;L;;;;;N;;;;; 1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;; 1144D;NEWA COMMA;Po;0;L;;;;;N;;;;; 1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;; 1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;; 1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;; 11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;; 11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;; 11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;; 11483;TIRHUTA LETTER I;Lo;0;L;;;;;N;;;;; 11484;TIRHUTA LETTER II;Lo;0;L;;;;;N;;;;; 11485;TIRHUTA LETTER U;Lo;0;L;;;;;N;;;;; 11486;TIRHUTA LETTER UU;Lo;0;L;;;;;N;;;;; 11487;TIRHUTA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11488;TIRHUTA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11489;TIRHUTA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1148A;TIRHUTA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1148B;TIRHUTA LETTER E;Lo;0;L;;;;;N;;;;; 1148C;TIRHUTA LETTER AI;Lo;0;L;;;;;N;;;;; 1148D;TIRHUTA LETTER O;Lo;0;L;;;;;N;;;;; 1148E;TIRHUTA LETTER AU;Lo;0;L;;;;;N;;;;; 1148F;TIRHUTA LETTER KA;Lo;0;L;;;;;N;;;;; 11490;TIRHUTA LETTER KHA;Lo;0;L;;;;;N;;;;; 11491;TIRHUTA LETTER GA;Lo;0;L;;;;;N;;;;; 11492;TIRHUTA LETTER GHA;Lo;0;L;;;;;N;;;;; 11493;TIRHUTA LETTER NGA;Lo;0;L;;;;;N;;;;; 11494;TIRHUTA LETTER CA;Lo;0;L;;;;;N;;;;; 11495;TIRHUTA LETTER CHA;Lo;0;L;;;;;N;;;;; 11496;TIRHUTA LETTER JA;Lo;0;L;;;;;N;;;;; 11497;TIRHUTA LETTER JHA;Lo;0;L;;;;;N;;;;; 11498;TIRHUTA LETTER NYA;Lo;0;L;;;;;N;;;;; 11499;TIRHUTA LETTER TTA;Lo;0;L;;;;;N;;;;; 1149A;TIRHUTA LETTER TTHA;Lo;0;L;;;;;N;;;;; 1149B;TIRHUTA LETTER DDA;Lo;0;L;;;;;N;;;;; 1149C;TIRHUTA LETTER DDHA;Lo;0;L;;;;;N;;;;; 1149D;TIRHUTA LETTER NNA;Lo;0;L;;;;;N;;;;; 1149E;TIRHUTA LETTER TA;Lo;0;L;;;;;N;;;;; 1149F;TIRHUTA LETTER THA;Lo;0;L;;;;;N;;;;; 114A0;TIRHUTA LETTER DA;Lo;0;L;;;;;N;;;;; 114A1;TIRHUTA LETTER DHA;Lo;0;L;;;;;N;;;;; 114A2;TIRHUTA LETTER NA;Lo;0;L;;;;;N;;;;; 114A3;TIRHUTA LETTER PA;Lo;0;L;;;;;N;;;;; 114A4;TIRHUTA LETTER PHA;Lo;0;L;;;;;N;;;;; 114A5;TIRHUTA LETTER BA;Lo;0;L;;;;;N;;;;; 114A6;TIRHUTA LETTER BHA;Lo;0;L;;;;;N;;;;; 114A7;TIRHUTA LETTER MA;Lo;0;L;;;;;N;;;;; 114A8;TIRHUTA LETTER YA;Lo;0;L;;;;;N;;;;; 114A9;TIRHUTA LETTER RA;Lo;0;L;;;;;N;;;;; 114AA;TIRHUTA LETTER LA;Lo;0;L;;;;;N;;;;; 114AB;TIRHUTA LETTER VA;Lo;0;L;;;;;N;;;;; 114AC;TIRHUTA LETTER SHA;Lo;0;L;;;;;N;;;;; 114AD;TIRHUTA LETTER SSA;Lo;0;L;;;;;N;;;;; 114AE;TIRHUTA LETTER SA;Lo;0;L;;;;;N;;;;; 114AF;TIRHUTA LETTER HA;Lo;0;L;;;;;N;;;;; 114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 114B3;TIRHUTA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 114B4;TIRHUTA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 114B5;TIRHUTA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 114B6;TIRHUTA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 114B7;TIRHUTA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 114B8;TIRHUTA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 114BA;TIRHUTA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;; 114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;; 114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;; 114BF;TIRHUTA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 114C0;TIRHUTA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 114C2;TIRHUTA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 114C3;TIRHUTA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 114C4;TIRHUTA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 114C5;TIRHUTA GVANG;Lo;0;L;;;;;N;;;;; 114C6;TIRHUTA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 114C7;TIRHUTA OM;Lo;0;L;;;;;N;;;;; 114D0;TIRHUTA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 114D1;TIRHUTA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 114D2;TIRHUTA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 114D3;TIRHUTA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 114D4;TIRHUTA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 114D5;TIRHUTA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 114D6;TIRHUTA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 114D7;TIRHUTA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 114D8;TIRHUTA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 114D9;TIRHUTA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11580;SIDDHAM LETTER A;Lo;0;L;;;;;N;;;;; 11581;SIDDHAM LETTER AA;Lo;0;L;;;;;N;;;;; 11582;SIDDHAM LETTER I;Lo;0;L;;;;;N;;;;; 11583;SIDDHAM LETTER II;Lo;0;L;;;;;N;;;;; 11584;SIDDHAM LETTER U;Lo;0;L;;;;;N;;;;; 11585;SIDDHAM LETTER UU;Lo;0;L;;;;;N;;;;; 11586;SIDDHAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11587;SIDDHAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11588;SIDDHAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11589;SIDDHAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1158A;SIDDHAM LETTER E;Lo;0;L;;;;;N;;;;; 1158B;SIDDHAM LETTER AI;Lo;0;L;;;;;N;;;;; 1158C;SIDDHAM LETTER O;Lo;0;L;;;;;N;;;;; 1158D;SIDDHAM LETTER AU;Lo;0;L;;;;;N;;;;; 1158E;SIDDHAM LETTER KA;Lo;0;L;;;;;N;;;;; 1158F;SIDDHAM LETTER KHA;Lo;0;L;;;;;N;;;;; 11590;SIDDHAM LETTER GA;Lo;0;L;;;;;N;;;;; 11591;SIDDHAM LETTER GHA;Lo;0;L;;;;;N;;;;; 11592;SIDDHAM LETTER NGA;Lo;0;L;;;;;N;;;;; 11593;SIDDHAM LETTER CA;Lo;0;L;;;;;N;;;;; 11594;SIDDHAM LETTER CHA;Lo;0;L;;;;;N;;;;; 11595;SIDDHAM LETTER JA;Lo;0;L;;;;;N;;;;; 11596;SIDDHAM LETTER JHA;Lo;0;L;;;;;N;;;;; 11597;SIDDHAM LETTER NYA;Lo;0;L;;;;;N;;;;; 11598;SIDDHAM LETTER TTA;Lo;0;L;;;;;N;;;;; 11599;SIDDHAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 1159A;SIDDHAM LETTER DDA;Lo;0;L;;;;;N;;;;; 1159B;SIDDHAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 1159C;SIDDHAM LETTER NNA;Lo;0;L;;;;;N;;;;; 1159D;SIDDHAM LETTER TA;Lo;0;L;;;;;N;;;;; 1159E;SIDDHAM LETTER THA;Lo;0;L;;;;;N;;;;; 1159F;SIDDHAM LETTER DA;Lo;0;L;;;;;N;;;;; 115A0;SIDDHAM LETTER DHA;Lo;0;L;;;;;N;;;;; 115A1;SIDDHAM LETTER NA;Lo;0;L;;;;;N;;;;; 115A2;SIDDHAM LETTER PA;Lo;0;L;;;;;N;;;;; 115A3;SIDDHAM LETTER PHA;Lo;0;L;;;;;N;;;;; 115A4;SIDDHAM LETTER BA;Lo;0;L;;;;;N;;;;; 115A5;SIDDHAM LETTER BHA;Lo;0;L;;;;;N;;;;; 115A6;SIDDHAM LETTER MA;Lo;0;L;;;;;N;;;;; 115A7;SIDDHAM LETTER YA;Lo;0;L;;;;;N;;;;; 115A8;SIDDHAM LETTER RA;Lo;0;L;;;;;N;;;;; 115A9;SIDDHAM LETTER LA;Lo;0;L;;;;;N;;;;; 115AA;SIDDHAM LETTER VA;Lo;0;L;;;;;N;;;;; 115AB;SIDDHAM LETTER SHA;Lo;0;L;;;;;N;;;;; 115AC;SIDDHAM LETTER SSA;Lo;0;L;;;;;N;;;;; 115AD;SIDDHAM LETTER SA;Lo;0;L;;;;;N;;;;; 115AE;SIDDHAM LETTER HA;Lo;0;L;;;;;N;;;;; 115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 115B2;SIDDHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 115B3;SIDDHAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 115B4;SIDDHAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 115B5;SIDDHAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;; 115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;; 115BC;SIDDHAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 115BD;SIDDHAM SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 115BF;SIDDHAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 115C0;SIDDHAM SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 115C1;SIDDHAM SIGN SIDDHAM;Po;0;L;;;;;N;;;;; 115C2;SIDDHAM DANDA;Po;0;L;;;;;N;;;;; 115C3;SIDDHAM DOUBLE DANDA;Po;0;L;;;;;N;;;;; 115C4;SIDDHAM SEPARATOR DOT;Po;0;L;;;;;N;;;;; 115C5;SIDDHAM SEPARATOR BAR;Po;0;L;;;;;N;;;;; 115C6;SIDDHAM REPETITION MARK-1;Po;0;L;;;;;N;;;;; 115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;; 115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;; 115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;; 115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;; 115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;; 115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;; 115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;; 115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;; 115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;; 115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;; 115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;; 115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;; 115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;; 115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;; 115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;; 115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;; 11600;MODI LETTER A;Lo;0;L;;;;;N;;;;; 11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;; 11602;MODI LETTER I;Lo;0;L;;;;;N;;;;; 11603;MODI LETTER II;Lo;0;L;;;;;N;;;;; 11604;MODI LETTER U;Lo;0;L;;;;;N;;;;; 11605;MODI LETTER UU;Lo;0;L;;;;;N;;;;; 11606;MODI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11607;MODI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11608;MODI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11609;MODI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1160A;MODI LETTER E;Lo;0;L;;;;;N;;;;; 1160B;MODI LETTER AI;Lo;0;L;;;;;N;;;;; 1160C;MODI LETTER O;Lo;0;L;;;;;N;;;;; 1160D;MODI LETTER AU;Lo;0;L;;;;;N;;;;; 1160E;MODI LETTER KA;Lo;0;L;;;;;N;;;;; 1160F;MODI LETTER KHA;Lo;0;L;;;;;N;;;;; 11610;MODI LETTER GA;Lo;0;L;;;;;N;;;;; 11611;MODI LETTER GHA;Lo;0;L;;;;;N;;;;; 11612;MODI LETTER NGA;Lo;0;L;;;;;N;;;;; 11613;MODI LETTER CA;Lo;0;L;;;;;N;;;;; 11614;MODI LETTER CHA;Lo;0;L;;;;;N;;;;; 11615;MODI LETTER JA;Lo;0;L;;;;;N;;;;; 11616;MODI LETTER JHA;Lo;0;L;;;;;N;;;;; 11617;MODI LETTER NYA;Lo;0;L;;;;;N;;;;; 11618;MODI LETTER TTA;Lo;0;L;;;;;N;;;;; 11619;MODI LETTER TTHA;Lo;0;L;;;;;N;;;;; 1161A;MODI LETTER DDA;Lo;0;L;;;;;N;;;;; 1161B;MODI LETTER DDHA;Lo;0;L;;;;;N;;;;; 1161C;MODI LETTER NNA;Lo;0;L;;;;;N;;;;; 1161D;MODI LETTER TA;Lo;0;L;;;;;N;;;;; 1161E;MODI LETTER THA;Lo;0;L;;;;;N;;;;; 1161F;MODI LETTER DA;Lo;0;L;;;;;N;;;;; 11620;MODI LETTER DHA;Lo;0;L;;;;;N;;;;; 11621;MODI LETTER NA;Lo;0;L;;;;;N;;;;; 11622;MODI LETTER PA;Lo;0;L;;;;;N;;;;; 11623;MODI LETTER PHA;Lo;0;L;;;;;N;;;;; 11624;MODI LETTER BA;Lo;0;L;;;;;N;;;;; 11625;MODI LETTER BHA;Lo;0;L;;;;;N;;;;; 11626;MODI LETTER MA;Lo;0;L;;;;;N;;;;; 11627;MODI LETTER YA;Lo;0;L;;;;;N;;;;; 11628;MODI LETTER RA;Lo;0;L;;;;;N;;;;; 11629;MODI LETTER LA;Lo;0;L;;;;;N;;;;; 1162A;MODI LETTER VA;Lo;0;L;;;;;N;;;;; 1162B;MODI LETTER SHA;Lo;0;L;;;;;N;;;;; 1162C;MODI LETTER SSA;Lo;0;L;;;;;N;;;;; 1162D;MODI LETTER SA;Lo;0;L;;;;;N;;;;; 1162E;MODI LETTER HA;Lo;0;L;;;;;N;;;;; 1162F;MODI LETTER LLA;Lo;0;L;;;;;N;;;;; 11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 11633;MODI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11634;MODI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11635;MODI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11636;MODI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11637;MODI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11638;MODI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 11639;MODI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1163A;MODI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1163D;MODI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1163F;MODI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 11640;MODI SIGN ARDHACANDRA;Mn;0;NSM;;;;;N;;;;; 11641;MODI DANDA;Po;0;L;;;;;N;;;;; 11642;MODI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11643;MODI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 11644;MODI SIGN HUVA;Lo;0;L;;;;;N;;;;; 11650;MODI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11651;MODI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11652;MODI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11653;MODI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11654;MODI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11655;MODI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11656;MODI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;; 11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;; 11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;; 1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;; 1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;; 11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;; 11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;; 11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;; 11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;; 11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;; 11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;; 11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;; 11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;; 11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;; 11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;; 1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;; 1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;; 1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;; 1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;; 1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;; 1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;; 11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;; 11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;; 11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;; 11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;; 11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;; 11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;; 11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;; 11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;; 1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;; 1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;; 1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;; 1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;; 1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;; 1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;; 116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;; 116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;; 116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;; 116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;; 116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;; 116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;; 116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;; 116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;; 116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;; 116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;; 116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;; 116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;; 11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;; 11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;; 11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;; 11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;; 11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;; 11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;; 11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;; 11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;; 11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;; 1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;; 1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;; 1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;; 1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;; 1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;; 1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;; 11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;; 11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;; 11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;; 11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;; 11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;; 11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;; 11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;; 11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;; 11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;; 11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;; 1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; 1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; 1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;; 11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;; 11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;; 1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;; 11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;; 1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; 118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0; 118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1; 118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2; 118A3;WARANG CITI CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;118C3; 118A4;WARANG CITI CAPITAL LETTER YA;Lu;0;L;;;;;N;;;;118C4; 118A5;WARANG CITI CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;118C5; 118A6;WARANG CITI CAPITAL LETTER II;Lu;0;L;;;;;N;;;;118C6; 118A7;WARANG CITI CAPITAL LETTER UU;Lu;0;L;;;;;N;;;;118C7; 118A8;WARANG CITI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;118C8; 118A9;WARANG CITI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;118C9; 118AA;WARANG CITI CAPITAL LETTER ANG;Lu;0;L;;;;;N;;;;118CA; 118AB;WARANG CITI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;118CB; 118AC;WARANG CITI CAPITAL LETTER KO;Lu;0;L;;;;;N;;;;118CC; 118AD;WARANG CITI CAPITAL LETTER ENY;Lu;0;L;;;;;N;;;;118CD; 118AE;WARANG CITI CAPITAL LETTER YUJ;Lu;0;L;;;;;N;;;;118CE; 118AF;WARANG CITI CAPITAL LETTER UC;Lu;0;L;;;;;N;;;;118CF; 118B0;WARANG CITI CAPITAL LETTER ENN;Lu;0;L;;;;;N;;;;118D0; 118B1;WARANG CITI CAPITAL LETTER ODD;Lu;0;L;;;;;N;;;;118D1; 118B2;WARANG CITI CAPITAL LETTER TTE;Lu;0;L;;;;;N;;;;118D2; 118B3;WARANG CITI CAPITAL LETTER NUNG;Lu;0;L;;;;;N;;;;118D3; 118B4;WARANG CITI CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;118D4; 118B5;WARANG CITI CAPITAL LETTER AT;Lu;0;L;;;;;N;;;;118D5; 118B6;WARANG CITI CAPITAL LETTER AM;Lu;0;L;;;;;N;;;;118D6; 118B7;WARANG CITI CAPITAL LETTER BU;Lu;0;L;;;;;N;;;;118D7; 118B8;WARANG CITI CAPITAL LETTER PU;Lu;0;L;;;;;N;;;;118D8; 118B9;WARANG CITI CAPITAL LETTER HIYO;Lu;0;L;;;;;N;;;;118D9; 118BA;WARANG CITI CAPITAL LETTER HOLO;Lu;0;L;;;;;N;;;;118DA; 118BB;WARANG CITI CAPITAL LETTER HORR;Lu;0;L;;;;;N;;;;118DB; 118BC;WARANG CITI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;118DC; 118BD;WARANG CITI CAPITAL LETTER SSUU;Lu;0;L;;;;;N;;;;118DD; 118BE;WARANG CITI CAPITAL LETTER SII;Lu;0;L;;;;;N;;;;118DE; 118BF;WARANG CITI CAPITAL LETTER VIYO;Lu;0;L;;;;;N;;;;118DF; 118C0;WARANG CITI SMALL LETTER NGAA;Ll;0;L;;;;;N;;;118A0;;118A0 118C1;WARANG CITI SMALL LETTER A;Ll;0;L;;;;;N;;;118A1;;118A1 118C2;WARANG CITI SMALL LETTER WI;Ll;0;L;;;;;N;;;118A2;;118A2 118C3;WARANG CITI SMALL LETTER YU;Ll;0;L;;;;;N;;;118A3;;118A3 118C4;WARANG CITI SMALL LETTER YA;Ll;0;L;;;;;N;;;118A4;;118A4 118C5;WARANG CITI SMALL LETTER YO;Ll;0;L;;;;;N;;;118A5;;118A5 118C6;WARANG CITI SMALL LETTER II;Ll;0;L;;;;;N;;;118A6;;118A6 118C7;WARANG CITI SMALL LETTER UU;Ll;0;L;;;;;N;;;118A7;;118A7 118C8;WARANG CITI SMALL LETTER E;Ll;0;L;;;;;N;;;118A8;;118A8 118C9;WARANG CITI SMALL LETTER O;Ll;0;L;;;;;N;;;118A9;;118A9 118CA;WARANG CITI SMALL LETTER ANG;Ll;0;L;;;;;N;;;118AA;;118AA 118CB;WARANG CITI SMALL LETTER GA;Ll;0;L;;;;;N;;;118AB;;118AB 118CC;WARANG CITI SMALL LETTER KO;Ll;0;L;;;;;N;;;118AC;;118AC 118CD;WARANG CITI SMALL LETTER ENY;Ll;0;L;;;;;N;;;118AD;;118AD 118CE;WARANG CITI SMALL LETTER YUJ;Ll;0;L;;;;;N;;;118AE;;118AE 118CF;WARANG CITI SMALL LETTER UC;Ll;0;L;;;;;N;;;118AF;;118AF 118D0;WARANG CITI SMALL LETTER ENN;Ll;0;L;;;;;N;;;118B0;;118B0 118D1;WARANG CITI SMALL LETTER ODD;Ll;0;L;;;;;N;;;118B1;;118B1 118D2;WARANG CITI SMALL LETTER TTE;Ll;0;L;;;;;N;;;118B2;;118B2 118D3;WARANG CITI SMALL LETTER NUNG;Ll;0;L;;;;;N;;;118B3;;118B3 118D4;WARANG CITI SMALL LETTER DA;Ll;0;L;;;;;N;;;118B4;;118B4 118D5;WARANG CITI SMALL LETTER AT;Ll;0;L;;;;;N;;;118B5;;118B5 118D6;WARANG CITI SMALL LETTER AM;Ll;0;L;;;;;N;;;118B6;;118B6 118D7;WARANG CITI SMALL LETTER BU;Ll;0;L;;;;;N;;;118B7;;118B7 118D8;WARANG CITI SMALL LETTER PU;Ll;0;L;;;;;N;;;118B8;;118B8 118D9;WARANG CITI SMALL LETTER HIYO;Ll;0;L;;;;;N;;;118B9;;118B9 118DA;WARANG CITI SMALL LETTER HOLO;Ll;0;L;;;;;N;;;118BA;;118BA 118DB;WARANG CITI SMALL LETTER HORR;Ll;0;L;;;;;N;;;118BB;;118BB 118DC;WARANG CITI SMALL LETTER HAR;Ll;0;L;;;;;N;;;118BC;;118BC 118DD;WARANG CITI SMALL LETTER SSUU;Ll;0;L;;;;;N;;;118BD;;118BD 118DE;WARANG CITI SMALL LETTER SII;Ll;0;L;;;;;N;;;118BE;;118BE 118DF;WARANG CITI SMALL LETTER VIYO;Ll;0;L;;;;;N;;;118BF;;118BF 118E0;WARANG CITI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 118E1;WARANG CITI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 118E2;WARANG CITI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 118E3;WARANG CITI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 118E4;WARANG CITI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 118E5;WARANG CITI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 118E6;WARANG CITI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 118E7;WARANG CITI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 118E8;WARANG CITI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 118E9;WARANG CITI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 118EA;WARANG CITI NUMBER TEN;No;0;L;;;;10;N;;;;; 118EB;WARANG CITI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 118EC;WARANG CITI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 118ED;WARANG CITI NUMBER FORTY;No;0;L;;;;40;N;;;;; 118EE;WARANG CITI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 118EF;WARANG CITI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 118F0;WARANG CITI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;; 118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; 11AC3;PAU CIN HAU LETTER MA;Lo;0;L;;;;;N;;;;; 11AC4;PAU CIN HAU LETTER DA;Lo;0;L;;;;;N;;;;; 11AC5;PAU CIN HAU LETTER ZA;Lo;0;L;;;;;N;;;;; 11AC6;PAU CIN HAU LETTER VA;Lo;0;L;;;;;N;;;;; 11AC7;PAU CIN HAU LETTER NGA;Lo;0;L;;;;;N;;;;; 11AC8;PAU CIN HAU LETTER HA;Lo;0;L;;;;;N;;;;; 11AC9;PAU CIN HAU LETTER GA;Lo;0;L;;;;;N;;;;; 11ACA;PAU CIN HAU LETTER KHA;Lo;0;L;;;;;N;;;;; 11ACB;PAU CIN HAU LETTER SA;Lo;0;L;;;;;N;;;;; 11ACC;PAU CIN HAU LETTER BA;Lo;0;L;;;;;N;;;;; 11ACD;PAU CIN HAU LETTER CA;Lo;0;L;;;;;N;;;;; 11ACE;PAU CIN HAU LETTER TA;Lo;0;L;;;;;N;;;;; 11ACF;PAU CIN HAU LETTER THA;Lo;0;L;;;;;N;;;;; 11AD0;PAU CIN HAU LETTER NA;Lo;0;L;;;;;N;;;;; 11AD1;PAU CIN HAU LETTER PHA;Lo;0;L;;;;;N;;;;; 11AD2;PAU CIN HAU LETTER RA;Lo;0;L;;;;;N;;;;; 11AD3;PAU CIN HAU LETTER FA;Lo;0;L;;;;;N;;;;; 11AD4;PAU CIN HAU LETTER CHA;Lo;0;L;;;;;N;;;;; 11AD5;PAU CIN HAU LETTER A;Lo;0;L;;;;;N;;;;; 11AD6;PAU CIN HAU LETTER E;Lo;0;L;;;;;N;;;;; 11AD7;PAU CIN HAU LETTER I;Lo;0;L;;;;;N;;;;; 11AD8;PAU CIN HAU LETTER O;Lo;0;L;;;;;N;;;;; 11AD9;PAU CIN HAU LETTER U;Lo;0;L;;;;;N;;;;; 11ADA;PAU CIN HAU LETTER UA;Lo;0;L;;;;;N;;;;; 11ADB;PAU CIN HAU LETTER IA;Lo;0;L;;;;;N;;;;; 11ADC;PAU CIN HAU LETTER FINAL P;Lo;0;L;;;;;N;;;;; 11ADD;PAU CIN HAU LETTER FINAL K;Lo;0;L;;;;;N;;;;; 11ADE;PAU CIN HAU LETTER FINAL T;Lo;0;L;;;;;N;;;;; 11ADF;PAU CIN HAU LETTER FINAL M;Lo;0;L;;;;;N;;;;; 11AE0;PAU CIN HAU LETTER FINAL N;Lo;0;L;;;;;N;;;;; 11AE1;PAU CIN HAU LETTER FINAL L;Lo;0;L;;;;;N;;;;; 11AE2;PAU CIN HAU LETTER FINAL W;Lo;0;L;;;;;N;;;;; 11AE3;PAU CIN HAU LETTER FINAL NG;Lo;0;L;;;;;N;;;;; 11AE4;PAU CIN HAU LETTER FINAL Y;Lo;0;L;;;;;N;;;;; 11AE5;PAU CIN HAU RISING TONE LONG;Lo;0;L;;;;;N;;;;; 11AE6;PAU CIN HAU RISING TONE;Lo;0;L;;;;;N;;;;; 11AE7;PAU CIN HAU SANDHI GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AE8;PAU CIN HAU RISING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AE9;PAU CIN HAU RISING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEA;PAU CIN HAU SANDHI GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11AEB;PAU CIN HAU SANDHI TONE LONG;Lo;0;L;;;;;N;;;;; 11AEC;PAU CIN HAU SANDHI TONE;Lo;0;L;;;;;N;;;;; 11AED;PAU CIN HAU SANDHI TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AEE;PAU CIN HAU SANDHI TONE FINAL;Lo;0;L;;;;;N;;;;; 11AEF;PAU CIN HAU MID-LEVEL TONE;Lo;0;L;;;;;N;;;;; 11AF0;PAU CIN HAU GLOTTAL STOP VARIANT;Lo;0;L;;;;;N;;;;; 11AF1;PAU CIN HAU MID-LEVEL TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF2;PAU CIN HAU MID-LEVEL TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF3;PAU CIN HAU LOW-FALLING TONE LONG;Lo;0;L;;;;;N;;;;; 11AF4;PAU CIN HAU LOW-FALLING TONE;Lo;0;L;;;;;N;;;;; 11AF5;PAU CIN HAU GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; 11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;; 11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;; 11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;; 11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;; 11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;; 11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;; 11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;; 11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;; 11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;; 11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;; 11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;; 11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;; 11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;; 11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;; 11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;; 11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;; 11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;; 11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;; 11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;; 11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;; 11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;; 11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;; 11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;; 11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;; 11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;; 11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;; 11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;; 11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;; 11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;; 11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;; 11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;; 11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;; 11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;; 11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;; 11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;; 11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;; 11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;; 11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;; 11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;; 11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;; 11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;; 11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;; 11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;; 11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;; 11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;; 11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;; 11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;; 11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;; 11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;; 11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;; 11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;; 11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;; 11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;; 11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;; 11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;; 11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;; 11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;; 11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;; 11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;; 11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;; 11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;; 11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;; 11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;; 11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;; 11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;; 11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;; 11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;; 11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;; 11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;; 11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;; 11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;; 11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;; 11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;; 11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;; 11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;; 11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;; 11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;; 11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;; 11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;; 11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;; 11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;; 11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;; 11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;; 11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;; 11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;; 11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;; 11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;; 11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;; 11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;; 11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;; 11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;; 11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;; 11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;; 11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;; 11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; 11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; 11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; 11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; 12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; 12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; 12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; 12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; 12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; 12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; 12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; 12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; 1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; 1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; 1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; 1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; 12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; 12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; 12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; 12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; 12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; 12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; 1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; 1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; 1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; 1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; 12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; 12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; 12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; 12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; 12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; 12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; 12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; 12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; 12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; 12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; 1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; 1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; 1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; 1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; 1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; 1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; 12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; 12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; 12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; 12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; 12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; 12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; 12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; 1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; 1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; 12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; 12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; 12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; 12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; 12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; 12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; 12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; 12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; 12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; 12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; 1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; 1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; 1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; 1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; 1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; 12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; 12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; 12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; 12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; 12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; 12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; 12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; 12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; 12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; 12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; 1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; 1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; 1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; 1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; 1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; 12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; 12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; 12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; 12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; 12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; 12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; 12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; 12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; 12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; 12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; 1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; 1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; 1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; 1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; 12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; 12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; 12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; 12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; 12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; 12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; 12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; 1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; 1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; 1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; 12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; 12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; 12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; 12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; 12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; 12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; 12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; 12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; 12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; 1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; 1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; 1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; 1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; 1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; 12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; 12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; 12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; 12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; 12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; 12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; 12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; 12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; 12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; 12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; 1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; 1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; 1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; 1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; 1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; 120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; 120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; 120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; 120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; 120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; 120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; 120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; 120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; 120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; 120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; 120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; 120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; 120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; 120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; 120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; 120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; 120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; 120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; 120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; 120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; 120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; 120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; 120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; 120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; 120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; 120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; 120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; 120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; 120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; 120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; 120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; 120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; 120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; 120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; 120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; 120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; 120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; 120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; 120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; 120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; 120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; 120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; 120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; 120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; 120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; 120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; 120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; 120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; 120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; 120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; 120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; 120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; 120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; 120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; 120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; 120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; 120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; 120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; 120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; 120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; 120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; 120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; 120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; 120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; 120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; 120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; 120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; 120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; 120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; 120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; 120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; 120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; 120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; 120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; 120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; 120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; 12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; 12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; 12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; 12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; 12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; 12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; 12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; 12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; 12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; 12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; 1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; 1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; 1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; 1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; 1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; 12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; 12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; 12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; 12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; 12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; 12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; 12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; 12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; 1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; 1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; 1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; 1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; 12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; 12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; 12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; 12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; 12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; 12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; 12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; 12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; 12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; 12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; 1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; 1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; 1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; 1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; 1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; 1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; 12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; 12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; 12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; 12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; 12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; 12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; 12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; 12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; 1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; 1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; 1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; 1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; 12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; 12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; 12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; 12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; 12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; 12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; 12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; 12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; 12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; 12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; 1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; 1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; 1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; 1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; 1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; 12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; 12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; 12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; 12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; 12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; 12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; 12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; 12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; 12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; 12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; 1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; 1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; 1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; 1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; 1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; 1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; 12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; 12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; 12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; 12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; 12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; 12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; 12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; 12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; 1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; 1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; 1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; 1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; 1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; 12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; 12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; 12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; 12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; 12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; 12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; 12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; 12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; 12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; 12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; 1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; 1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; 1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; 1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; 1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; 1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; 12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; 12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; 12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; 12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; 12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; 12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; 12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; 12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; 12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; 12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; 1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; 1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; 1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; 1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; 1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; 12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; 12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; 12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; 12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; 12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; 12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; 12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; 12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; 12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; 1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; 1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; 1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; 1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; 121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; 121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; 121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; 121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; 121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; 121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; 121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; 121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; 121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; 121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; 121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; 121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; 121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; 121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; 121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; 121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; 121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; 121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; 121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; 121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; 121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; 121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; 121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; 121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; 121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; 121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; 121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; 121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; 121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; 121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; 121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; 121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; 121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; 121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; 121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; 121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; 121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; 121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; 121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; 121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; 121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; 121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; 121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; 121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; 121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; 121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; 121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; 121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; 121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; 121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; 121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; 121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; 121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; 121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; 121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; 121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; 121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; 121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; 121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; 121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; 121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; 121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; 121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; 121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; 121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; 121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; 121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; 121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; 121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; 121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; 121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; 121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; 121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; 121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; 121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; 121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; 121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; 121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; 121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; 121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; 121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; 121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; 121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; 121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; 121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; 121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; 121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; 121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; 12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; 12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; 12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; 12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; 12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; 12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; 12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; 12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; 1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; 1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; 1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; 1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; 1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; 12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; 12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; 12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; 12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; 12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; 12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; 12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; 12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; 12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; 12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; 1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; 1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; 1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; 1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; 1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; 1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; 12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; 12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; 1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; 1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; 12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; 12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; 12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; 12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; 12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; 12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; 12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; 12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; 12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; 1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; 1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; 1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; 1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; 1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; 1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; 12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; 12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; 12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; 12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; 12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; 12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; 12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; 12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; 12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; 12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; 1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; 1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; 1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; 1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; 1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; 1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; 12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; 12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; 12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; 12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; 12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; 12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; 1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; 1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; 1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; 1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; 1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; 12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; 12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; 12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; 12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; 12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; 12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; 12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; 12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; 12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; 1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; 1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; 1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; 1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; 1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; 12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; 12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; 12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; 12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; 12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; 12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; 12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; 12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; 12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; 1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; 1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; 1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; 1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; 1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; 1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; 12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; 12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; 12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; 12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; 12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; 12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; 12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; 12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; 12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; 12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; 1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; 1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; 1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; 1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; 1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; 1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; 12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; 12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; 12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; 12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; 12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; 12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; 12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; 12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; 12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; 12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; 1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; 1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; 1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; 1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; 1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; 122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; 122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; 122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; 122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; 122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; 122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; 122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; 122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; 122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; 122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; 122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; 122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; 122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; 122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; 122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; 122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; 122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; 122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; 122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; 122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; 122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; 122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; 122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; 122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; 122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; 122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; 122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; 122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; 122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; 122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; 122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; 122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; 122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; 122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; 122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; 122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; 122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; 122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; 122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; 122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; 122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; 122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; 122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; 122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; 122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; 122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; 122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; 122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; 122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; 122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; 122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; 122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; 122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; 122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; 122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; 122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; 122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; 122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; 122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; 122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; 122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; 122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; 122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; 122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; 122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; 122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; 122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; 122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; 122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; 122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; 122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; 122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; 122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; 122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; 122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; 122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; 122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; 122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; 122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; 122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; 122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; 122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; 122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; 122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; 122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; 122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; 122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; 122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; 122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; 122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; 122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; 122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; 122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; 12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; 12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; 12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; 12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; 12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; 12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; 12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; 12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; 1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; 1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; 12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; 12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; 12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; 12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; 12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; 12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; 12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; 12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; 12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; 1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; 1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; 1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; 1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; 1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; 12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; 12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; 12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; 12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; 12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; 12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; 12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; 12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; 12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; 12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; 1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; 1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; 1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; 1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; 1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; 1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; 12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; 12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; 12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; 12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; 12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; 12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; 12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; 12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; 12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; 12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; 1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; 1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; 1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; 1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; 1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; 12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; 12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; 12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; 12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; 12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; 12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; 12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; 12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; 12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; 12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; 1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; 1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; 1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; 1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; 1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; 1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; 12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; 12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; 12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; 12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; 12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; 12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; 12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; 12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; 12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; 12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; 1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; 1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; 1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; 1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; 1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; 12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; 12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; 12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; 12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; 12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; 12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; 12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; 12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; 12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; 12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; 1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; 1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; 1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; 1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; 1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; 1236F;CUNEIFORM SIGN KAP ELAMITE;Lo;0;L;;;;;N;;;;; 12370;CUNEIFORM SIGN AB TIMES NUN;Lo;0;L;;;;;N;;;;; 12371;CUNEIFORM SIGN AB2 TIMES A;Lo;0;L;;;;;N;;;;; 12372;CUNEIFORM SIGN AMAR TIMES KUG;Lo;0;L;;;;;N;;;;; 12373;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH;Lo;0;L;;;;;N;;;;; 12374;CUNEIFORM SIGN DAG3;Lo;0;L;;;;;N;;;;; 12375;CUNEIFORM SIGN DISH PLUS SHU;Lo;0;L;;;;;N;;;;; 12376;CUNEIFORM SIGN DUB TIMES SHE;Lo;0;L;;;;;N;;;;; 12377;CUNEIFORM SIGN EZEN TIMES GUD;Lo;0;L;;;;;N;;;;; 12378;CUNEIFORM SIGN EZEN TIMES SHE;Lo;0;L;;;;;N;;;;; 12379;CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A;Lo;0;L;;;;;N;;;;; 1237A;CUNEIFORM SIGN GA2 TIMES ASH2;Lo;0;L;;;;;N;;;;; 1237B;CUNEIFORM SIGN GE22;Lo;0;L;;;;;N;;;;; 1237C;CUNEIFORM SIGN GIG;Lo;0;L;;;;;N;;;;; 1237D;CUNEIFORM SIGN HUSH;Lo;0;L;;;;;N;;;;; 1237E;CUNEIFORM SIGN KA TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1237F;CUNEIFORM SIGN KA TIMES ASH3;Lo;0;L;;;;;N;;;;; 12380;CUNEIFORM SIGN KA TIMES GISH;Lo;0;L;;;;;N;;;;; 12381;CUNEIFORM SIGN KA TIMES GUD;Lo;0;L;;;;;N;;;;; 12382;CUNEIFORM SIGN KA TIMES HI TIMES ASH2;Lo;0;L;;;;;N;;;;; 12383;CUNEIFORM SIGN KA TIMES LUM;Lo;0;L;;;;;N;;;;; 12384;CUNEIFORM SIGN KA TIMES PA;Lo;0;L;;;;;N;;;;; 12385;CUNEIFORM SIGN KA TIMES SHUL;Lo;0;L;;;;;N;;;;; 12386;CUNEIFORM SIGN KA TIMES TU;Lo;0;L;;;;;N;;;;; 12387;CUNEIFORM SIGN KA TIMES UR2;Lo;0;L;;;;;N;;;;; 12388;CUNEIFORM SIGN LAGAB TIMES GI;Lo;0;L;;;;;N;;;;; 12389;CUNEIFORM SIGN LU2 SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; 1238A;CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL;Lo;0;L;;;;;N;;;;; 1238B;CUNEIFORM SIGN LU2 TIMES SHU;Lo;0;L;;;;;N;;;;; 1238C;CUNEIFORM SIGN MESH;Lo;0;L;;;;;N;;;;; 1238D;CUNEIFORM SIGN MUSH3 TIMES ZA;Lo;0;L;;;;;N;;;;; 1238E;CUNEIFORM SIGN NA4;Lo;0;L;;;;;N;;;;; 1238F;CUNEIFORM SIGN NIN;Lo;0;L;;;;;N;;;;; 12390;CUNEIFORM SIGN NIN9;Lo;0;L;;;;;N;;;;; 12391;CUNEIFORM SIGN NINDA2 TIMES BAL;Lo;0;L;;;;;N;;;;; 12392;CUNEIFORM SIGN NINDA2 TIMES GI;Lo;0;L;;;;;N;;;;; 12393;CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 12394;CUNEIFORM SIGN PESH2 ASTERISK;Lo;0;L;;;;;N;;;;; 12395;CUNEIFORM SIGN PIR2;Lo;0;L;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; 12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; 12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; 12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; 12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; 12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; 12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; 12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; 12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; 1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; 1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; 1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; 1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; 1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; 1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; 12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; 12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; 12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; 12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; 12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; 12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; 12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; 12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; 12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; 12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; 1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; 1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; 1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; 1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; 1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; 1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; 12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; 12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; 12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; 12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; 12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; 12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; 12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; 12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; 12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; 1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; 1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; 1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; 1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; 1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; 1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; 12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; 12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;; 12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;; 12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; 12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; 12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; 12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; 12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; 12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; 1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; 1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; 1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; 1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; 1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; 1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; 12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; 12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; 12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; 12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; 12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; 12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; 12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; 12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; 12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; 12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; 1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; 1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; 1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; 1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; 1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; 1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; 12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; 12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; 12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; 12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; 12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; 12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; 12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;2;N;;;;; 12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;3;N;;;;; 12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; 12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; 1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; 1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; 1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; 1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; 1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; 1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; 12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; 12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; 12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; 12463;CUNEIFORM NUMERIC SIGN ONE QUARTER GUR;Nl;0;L;;;;1/4;N;;;;; 12464;CUNEIFORM NUMERIC SIGN ONE HALF GUR;Nl;0;L;;;;1/2;N;;;;; 12465;CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD;Nl;0;L;;;;1/3;N;;;;; 12466;CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS;Nl;0;L;;;;2/3;N;;;;; 12467;CUNEIFORM NUMERIC SIGN ELAMITE FORTY;Nl;0;L;;;;40;N;;;;; 12468;CUNEIFORM NUMERIC SIGN ELAMITE FIFTY;Nl;0;L;;;;50;N;;;;; 12469;CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM;Nl;0;L;;;;4;N;;;;; 1246A;CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM;Nl;0;L;;;;5;N;;;;; 1246B;CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM;Nl;0;L;;;;6;N;;;;; 1246C;CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM;Nl;0;L;;;;7;N;;;;; 1246D;CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM;Nl;0;L;;;;8;N;;;;; 1246E;CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM;Nl;0;L;;;;9;N;;;;; 12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; 12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; 12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; 12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; 12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;; 12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;; 12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;; 12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;; 12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;; 12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;; 12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;; 12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;; 12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;; 12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;; 12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;; 1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;; 1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;; 1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;; 1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;; 1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;; 1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;; 12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;; 12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;; 12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;; 12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;; 12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;; 12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;; 12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;; 12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;; 12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;; 12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;; 1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;; 1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;; 1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;; 124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;; 124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;; 124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;; 124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;; 124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;; 124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;; 124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;; 124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;; 124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;; 124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;; 124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;; 124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;; 124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;; 124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;; 124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;; 124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;; 124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;; 124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;; 124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;; 124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;; 124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;; 124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;; 124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;; 124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;; 124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;; 124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;; 124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;; 124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;; 124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;; 124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;; 124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;; 124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;; 124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;; 124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;; 124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;; 124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;; 124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;; 124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;; 124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;; 124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; 124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; 124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;; 124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;; 124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;; 124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;; 124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;; 124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;; 124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;; 124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;; 124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;; 124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;; 124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;; 124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;; 124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;; 124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;; 124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;; 124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;; 124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;; 124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;; 124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;; 124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;; 124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;; 124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;; 124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;; 124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;; 124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;; 124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;; 124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;; 124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;; 124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;; 124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;; 124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;; 124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;; 124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;; 124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;; 124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;; 124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;; 124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;; 124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;; 124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;; 124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;; 124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;; 124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;; 124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;; 124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;; 124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;; 124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;; 124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;; 124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;; 12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;; 12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;; 12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;; 12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;; 12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; 12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;; 12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;; 12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;; 12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;; 12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;; 1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;; 1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;; 1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;; 1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;; 1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;; 12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;; 12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;; 12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;; 12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;; 12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;; 12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;; 12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;; 12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;; 1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;; 1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;; 1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;; 1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;; 1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;; 1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;; 12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;; 12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;; 12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;; 12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;; 12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;; 12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;; 12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;; 12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;; 12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;; 12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; 1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;; 1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;; 1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;; 1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;; 1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;; 1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;; 12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;; 12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;; 12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;; 12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;; 12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;; 12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;; 12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;; 12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;; 12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;; 12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;; 1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; 1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;; 1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;; 1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;; 1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;; 1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;; 12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;; 13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;; 13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;; 13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;; 13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;; 13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;; 13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;; 1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;; 13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;; 13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;; 13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;; 13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;; 13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;; 13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;; 13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;; 13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;; 13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;; 13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;; 13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;; 1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;; 1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;; 1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;; 1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;; 1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;; 1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;; 13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;; 13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;; 13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;; 13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;; 13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;; 13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;; 13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;; 13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;; 13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;; 13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;; 1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;; 1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;; 1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;; 1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;; 1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;; 1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;; 13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;; 13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;; 13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;; 13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;; 13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;; 13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;; 13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;; 13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;; 13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;; 13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;; 1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;; 1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;; 1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;; 1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;; 1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;; 1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;; 13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;; 13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;; 13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;; 13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;; 13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;; 13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;; 13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;; 13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;; 13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;; 13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;; 1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;; 1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;; 1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;; 1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;; 1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;; 1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;; 13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;; 13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;; 13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;; 13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;; 13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;; 13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;; 13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;; 13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;; 13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;; 13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;; 1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;; 1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;; 1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;; 1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;; 1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;; 1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;; 130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;; 130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;; 130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;; 130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;; 130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;; 130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;; 130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;; 130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;; 130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;; 130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;; 130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;; 130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;; 130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;; 130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;; 130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;; 130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;; 130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;; 130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;; 130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;; 130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;; 130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;; 130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;; 130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;; 130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;; 130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;; 130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;; 130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;; 130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;; 130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;; 130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;; 130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;; 130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;; 130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;; 130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;; 130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;; 130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;; 130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;; 130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;; 130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;; 130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;; 130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;; 130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;; 130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;; 130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;; 130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;; 130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;; 130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;; 130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;; 130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;; 130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;; 130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;; 130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;; 130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;; 130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;; 130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;; 130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;; 130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;; 130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;; 130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;; 130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;; 130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;; 130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;; 130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;; 130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;; 130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;; 130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;; 130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;; 130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;; 130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;; 130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;; 130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;; 130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;; 130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;; 130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;; 130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;; 130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;; 130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;; 130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;; 130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;; 130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;; 130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;; 130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;; 130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;; 130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;; 130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;; 130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;; 130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;; 130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;; 130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;; 130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;; 130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;; 130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;; 130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;; 130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;; 130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;; 130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;; 13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;; 13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;; 13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;; 13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;; 13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;; 13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;; 13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;; 13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;; 13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;; 13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;; 1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;; 1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;; 1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;; 1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;; 1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;; 1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;; 13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;; 13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;; 13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;; 13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;; 13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;; 13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;; 13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;; 13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;; 13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;; 13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;; 1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;; 1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;; 1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;; 1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;; 1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;; 1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;; 13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;; 13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;; 13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;; 13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;; 13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;; 13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;; 13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;; 13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;; 13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;; 13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;; 1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;; 1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;; 1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;; 1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;; 1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;; 1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;; 13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;; 13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;; 13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;; 13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;; 13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;; 13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;; 13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;; 13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;; 13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;; 13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;; 1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;; 1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;; 1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;; 1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;; 1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;; 1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;; 13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;; 13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;; 13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;; 13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;; 13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;; 13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;; 13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;; 13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;; 13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;; 13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;; 1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;; 1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;; 1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;; 1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;; 1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;; 1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;; 13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;; 13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;; 13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;; 13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;; 13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;; 13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;; 13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;; 13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;; 13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;; 13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;; 1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;; 1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;; 1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;; 1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;; 1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;; 1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;; 13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;; 13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;; 13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;; 13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;; 13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;; 13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;; 13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;; 13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;; 13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;; 13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;; 1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;; 1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;; 1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;; 1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;; 1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;; 1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;; 13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;; 13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;; 13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;; 13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;; 13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;; 13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;; 13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;; 13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;; 13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;; 13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;; 1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;; 1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;; 1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;; 1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;; 1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;; 1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;; 13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;; 13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;; 13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;; 13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;; 13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;; 13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;; 13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;; 13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;; 13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;; 13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;; 1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;; 1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;; 1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;; 1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;; 1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;; 1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;; 13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;; 13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;; 13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;; 13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;; 13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;; 13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;; 13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;; 13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;; 13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;; 13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;; 1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;; 1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;; 1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;; 1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;; 1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;; 1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;; 131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;; 131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;; 131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;; 131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;; 131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;; 131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;; 131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;; 131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;; 131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;; 131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;; 131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;; 131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;; 131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;; 131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;; 131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;; 131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;; 131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;; 131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;; 131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;; 131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;; 131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;; 131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;; 131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;; 131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;; 131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;; 131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;; 131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;; 131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;; 131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;; 131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;; 131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;; 131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;; 131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;; 131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;; 131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;; 131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;; 131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;; 131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;; 131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;; 131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;; 131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;; 131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;; 131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;; 131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;; 131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;; 131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;; 131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;; 131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;; 131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;; 131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;; 131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;; 131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;; 131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;; 131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;; 131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;; 131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;; 131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;; 131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;; 131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;; 131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;; 131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;; 131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;; 131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;; 131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;; 131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;; 131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;; 131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;; 131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;; 131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;; 131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;; 131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;; 131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;; 131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;; 131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;; 131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;; 131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;; 131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;; 131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;; 131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;; 131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;; 131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;; 131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;; 131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;; 131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;; 131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;; 131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;; 131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;; 131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;; 131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;; 131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;; 131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;; 131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;; 131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;; 131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;; 131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;; 131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;; 13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;; 13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;; 13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;; 13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;; 13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;; 13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;; 13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;; 13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;; 13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;; 13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;; 1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;; 1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;; 1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;; 1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;; 1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;; 1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;; 13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;; 13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;; 13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;; 13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;; 13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;; 13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;; 13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;; 13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;; 13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;; 13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;; 1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;; 1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;; 1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;; 1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;; 1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;; 1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;; 13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;; 13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;; 13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;; 13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;; 13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;; 13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;; 13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;; 13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;; 13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;; 13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;; 1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;; 1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;; 1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;; 1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;; 1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;; 1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;; 13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;; 13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;; 13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;; 13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;; 13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;; 13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;; 13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;; 13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;; 13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;; 13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;; 1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;; 1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;; 1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;; 1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;; 1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;; 1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;; 13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;; 13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;; 13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;; 13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;; 13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;; 13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;; 13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;; 13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;; 13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;; 13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;; 1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;; 1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;; 1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;; 1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;; 1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;; 1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;; 13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;; 13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;; 13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;; 13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;; 13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;; 13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;; 13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;; 13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;; 13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;; 13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;; 1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;; 1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;; 1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;; 1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;; 1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;; 1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;; 13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;; 13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;; 13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;; 13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;; 13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;; 13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;; 13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;; 13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;; 13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;; 13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;; 1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;; 1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;; 1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;; 1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;; 1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;; 1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;; 13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;; 13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;; 13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;; 13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;; 13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;; 13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;; 13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;; 13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;; 13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;; 13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;; 1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;; 1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;; 1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;; 1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;; 1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;; 1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;; 13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;; 13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;; 13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;; 13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;; 13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;; 13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;; 13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;; 13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;; 13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;; 13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;; 1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;; 1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;; 1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;; 1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;; 1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;; 1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;; 13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;; 13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;; 13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;; 13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;; 13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;; 13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;; 13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;; 13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;; 13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;; 13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;; 1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;; 1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;; 1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;; 1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;; 1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;; 1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;; 132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;; 132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;; 132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;; 132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;; 132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;; 132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;; 132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;; 132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;; 132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;; 132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;; 132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;; 132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;; 132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;; 132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;; 132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;; 132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;; 132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;; 132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;; 132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;; 132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;; 132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;; 132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;; 132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;; 132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;; 132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;; 132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;; 132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;; 132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;; 132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;; 132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;; 132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;; 132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;; 132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;; 132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;; 132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;; 132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;; 132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;; 132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;; 132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;; 132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;; 132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;; 132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;; 132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;; 132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;; 132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;; 132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;; 132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;; 132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;; 132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;; 132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;; 132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;; 132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;; 132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;; 132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;; 132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;; 132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;; 132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;; 132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;; 132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;; 132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;; 132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;; 132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;; 132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;; 132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;; 132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;; 132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;; 132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;; 132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;; 132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;; 132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;; 132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;; 132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;; 132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;; 132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;; 132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;; 132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;; 132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;; 132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;; 132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;; 132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;; 132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;; 132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;; 132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;; 132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;; 132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;; 132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;; 132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;; 132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;; 132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;; 132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;; 132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;; 132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;; 132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;; 132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;; 132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;; 132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;; 13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;; 13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;; 13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;; 13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;; 13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;; 13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;; 13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;; 13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;; 13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;; 13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;; 1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;; 1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;; 1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;; 1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;; 1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;; 1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;; 13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;; 13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;; 13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;; 13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;; 13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;; 13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;; 13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;; 13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;; 13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;; 13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;; 1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;; 1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;; 1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;; 1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;; 1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;; 1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;; 13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;; 13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;; 13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;; 13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;; 13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;; 13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;; 13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;; 13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;; 13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;; 13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;; 1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;; 1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;; 1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;; 1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;; 1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;; 1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;; 13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;; 13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;; 13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;; 13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;; 13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;; 13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;; 13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;; 13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;; 13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;; 13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;; 1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;; 1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;; 1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;; 1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;; 1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;; 1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;; 13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;; 13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;; 13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;; 13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;; 13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;; 13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;; 13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;; 13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;; 13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;; 13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;; 1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;; 1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;; 1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;; 1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;; 1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;; 1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;; 13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;; 13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;; 13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;; 13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;; 13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;; 13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;; 13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;; 13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;; 13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;; 13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;; 1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;; 1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;; 1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;; 1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;; 1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;; 1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;; 13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;; 13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;; 13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;; 13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;; 13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;; 13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;; 13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;; 13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;; 13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;; 13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;; 1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;; 1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;; 1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;; 1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;; 1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;; 1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;; 13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;; 13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;; 13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;; 13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;; 13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;; 13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;; 13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;; 13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;; 13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;; 13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;; 1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;; 1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;; 1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;; 1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;; 1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;; 1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;; 13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;; 13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;; 13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;; 13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;; 13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;; 13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;; 13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;; 13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;; 13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;; 13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;; 1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;; 1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;; 1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;; 1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;; 1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;; 1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;; 13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;; 13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;; 13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;; 13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;; 13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;; 13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;; 13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;; 13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;; 13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;; 13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;; 1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;; 1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;; 1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;; 1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;; 1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;; 1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;; 133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;; 133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;; 133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;; 133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;; 133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;; 133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;; 133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;; 133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;; 133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;; 133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;; 133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;; 133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;; 133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;; 133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;; 133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;; 133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;; 133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;; 133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;; 133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;; 133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;; 133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;; 133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;; 133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;; 133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;; 133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;; 133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;; 133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;; 133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;; 133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;; 133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;; 133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;; 133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;; 133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;; 133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;; 133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;; 133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;; 133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;; 133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;; 133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;; 133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;; 133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;; 133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;; 133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;; 133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;; 133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;; 133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;; 133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;; 133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;; 133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;; 133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;; 133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;; 133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;; 133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;; 133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;; 133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;; 133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;; 133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;; 133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;; 133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;; 133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;; 133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;; 133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;; 133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;; 133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;; 133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;; 133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;; 133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;; 133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;; 133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;; 133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;; 133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;; 133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;; 133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;; 133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;; 133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;; 133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;; 133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;; 133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;; 133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;; 133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;; 133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;; 133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;; 133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;; 133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;; 133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;; 133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;; 133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;; 133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;; 133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;; 133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;; 133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;; 133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;; 133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;; 133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;; 133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;; 133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;; 13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;; 13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;; 13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;; 13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;; 13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;; 13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;; 13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;; 13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;; 13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;; 13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;; 1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;; 1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;; 1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;; 1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;; 1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;; 1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;; 13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;; 13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;; 13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;; 13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;; 13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;; 13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;; 13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;; 13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;; 13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;; 13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;; 1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;; 1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;; 1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;; 1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;; 1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;; 1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;; 13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;; 13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;; 13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;; 13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;; 13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;; 13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;; 13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;; 13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;; 13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;; 13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;; 1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;; 1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; 14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; 14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; 14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; 14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; 14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; 14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; 14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; 1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;; 1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; 1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; 1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; 1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; 1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; 14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; 14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; 14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; 14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; 14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; 14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; 14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; 14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; 14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; 14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; 1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; 1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;; 1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; 1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; 1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; 1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; 14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; 14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; 14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; 14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; 14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; 14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; 14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; 14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; 14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; 14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;; 1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; 1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; 1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;; 1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; 1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; 1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; 14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; 14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; 14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; 14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;; 14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;; 14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; 14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; 14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; 14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; 14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; 1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; 1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; 1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; 1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; 1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; 1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; 14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; 14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; 14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; 14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; 14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; 14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; 14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; 14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; 14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; 14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;; 1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;; 1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;; 1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; 1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; 1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; 1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; 14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;; 14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;; 14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;; 14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;; 14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;; 14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;; 14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;; 14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;; 14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;; 14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;; 1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;; 1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;; 1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;; 1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;; 1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;; 1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;; 14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;; 14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;; 14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;; 14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;; 14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;; 14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;; 14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;; 14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;; 14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;; 14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;; 1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;; 1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;; 1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;; 1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;; 1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;; 1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;; 14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;; 14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;; 14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;; 14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;; 14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;; 14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;; 14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;; 14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;; 14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;; 14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;; 1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;; 1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;; 1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;; 1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;; 1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;; 1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;; 14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;; 14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;; 14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;; 14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;; 14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;; 14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;; 14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;; 14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;; 14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;; 14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;; 1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;; 1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;; 1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;; 1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;; 1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;; 1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;; 14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;; 14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;; 14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;; 14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;; 14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;; 14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;; 14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;; 14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;; 14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;; 14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;; 1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;; 1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;; 1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;; 1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;; 1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;; 1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;; 144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;; 144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;; 144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;; 144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;; 144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;; 144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;; 144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;; 144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;; 144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;; 144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;; 144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;; 144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;; 144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;; 144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;; 144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;; 144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;; 144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;; 144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;; 144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;; 144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;; 144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;; 144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;; 144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;; 144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;; 144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;; 144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;; 144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;; 144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;; 144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;; 144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;; 144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;; 144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;; 144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;; 144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;; 144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;; 144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;; 144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;; 144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;; 144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;; 144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;; 144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;; 144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;; 144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;; 144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;; 144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;; 144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;; 144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;; 144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;; 144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;; 144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;; 144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;; 144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;; 144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;; 144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;; 144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;; 144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;; 144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;; 144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;; 144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;; 144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;; 144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;; 144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;; 144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;; 144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;; 144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;; 144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;; 144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;; 144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;; 144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;; 144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;; 144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;; 144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;; 144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;; 144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;; 144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;; 144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;; 144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;; 144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;; 144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;; 144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;; 144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;; 144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;; 144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;; 144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;; 144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;; 144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;; 144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;; 144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;; 144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;; 144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;; 144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;; 144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;; 144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;; 144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;; 144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;; 144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;; 14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;; 14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;; 14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;; 14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;; 14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;; 14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;; 14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;; 14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;; 14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;; 14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;; 1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;; 1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;; 1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;; 1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;; 1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;; 1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;; 14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;; 14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;; 14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;; 14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;; 14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;; 14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;; 14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;; 14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;; 14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;; 14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;; 1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;; 1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;; 1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;; 1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;; 1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;; 1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;; 14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;; 14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;; 14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;; 14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;; 14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;; 14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;; 14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;; 14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;; 14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;; 14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;; 1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;; 1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;; 1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;; 1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;; 1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;; 1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;; 14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;; 14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;; 14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;; 14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;; 14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;; 14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;; 14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;; 14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;; 14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;; 14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;; 1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;; 1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;; 1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;; 1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;; 1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;; 1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;; 14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;; 14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;; 14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;; 14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;; 14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;; 14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;; 14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;; 14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;; 14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;; 14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;; 1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;; 1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;; 1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;; 1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;; 1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;; 1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;; 14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;; 14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;; 14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;; 14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;; 14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;; 14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;; 14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;; 14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;; 14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;; 14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;; 1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;; 1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;; 1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;; 1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;; 1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;; 1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;; 14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;; 14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;; 14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;; 14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;; 14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;; 14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;; 14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;; 14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;; 14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;; 14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;; 1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;; 1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;; 1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;; 1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;; 1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;; 1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;; 14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;; 14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;; 14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;; 14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;; 14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;; 14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;; 14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;; 14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;; 14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;; 14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;; 1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;; 1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;; 1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;; 1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;; 1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;; 1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;; 14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;; 14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;; 14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;; 14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;; 14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;; 14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;; 14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;; 14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;; 14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;; 14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;; 1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;; 1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;; 1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;; 1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;; 1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;; 1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;; 14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;; 14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;; 14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;; 14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;; 14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;; 14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;; 14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;; 14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;; 14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;; 14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;; 1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;; 1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;; 1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;; 1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;; 1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;; 1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;; 145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;; 145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;; 145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;; 145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;; 145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;; 145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;; 145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;; 145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;; 145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;; 145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;; 145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;; 145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;; 145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;; 145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;; 145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;; 145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;; 145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;; 145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;; 145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;; 145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;; 145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;; 145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;; 145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;; 145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;; 145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;; 145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;; 145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;; 145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;; 145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;; 145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;; 145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;; 145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;; 145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;; 145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;; 145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;; 145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;; 145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;; 145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;; 145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;; 145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;; 145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;; 145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;; 145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;; 145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;; 145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;; 145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;; 145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;; 145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;; 145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;; 145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;; 145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;; 145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;; 145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;; 145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;; 145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;; 145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;; 145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;; 145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;; 145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;; 145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;; 145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;; 145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;; 145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;; 145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;; 145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;; 145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;; 145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;; 145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;; 145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;; 145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;; 145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;; 145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;; 145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;; 145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;; 145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;; 145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;; 145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;; 145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;; 145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;; 145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;; 145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;; 145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;; 145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;; 145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;; 145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;; 145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;; 145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;; 145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;; 145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;; 145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;; 145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;; 145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;; 145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;; 145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;; 145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;; 14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;; 14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;; 14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;; 14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;; 14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;; 14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;; 14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;; 14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;; 14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;; 14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;; 1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;; 1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;; 1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;; 1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;; 1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;; 1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;; 14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;; 14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;; 14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;; 14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;; 14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;; 14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;; 14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;; 14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;; 14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;; 14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;; 1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;; 1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;; 1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;; 1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;; 1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;; 1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;; 14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;; 14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;; 14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;; 14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;; 14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;; 14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;; 14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;; 14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;; 14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;; 14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;; 1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;; 1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;; 1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;; 1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;; 1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;; 1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;; 14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;; 14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;; 14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;; 14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;; 14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;; 14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;; 14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;; 14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;; 14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;; 14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;; 1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;; 1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;; 1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;; 1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;; 1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;; 1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;; 14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;; 14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;; 14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;; 14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;; 14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;; 14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;; 14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;; 16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; 16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; 16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;; 16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;; 16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;; 16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;; 16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;; 16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;; 16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; 1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;; 1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;; 1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;; 1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;; 1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;; 1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;; 16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;; 16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;; 16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;; 16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;; 16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;; 16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;; 16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;; 16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;; 16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;; 16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;; 1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;; 1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;; 1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;; 1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;; 1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;; 1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;; 16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;; 16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;; 16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;; 16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;; 16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;; 16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;; 16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;; 16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;; 16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;; 16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;; 1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;; 1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;; 1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;; 1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;; 1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;; 1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;; 16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;; 16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;; 16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;; 16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;; 16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;; 16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;; 16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;; 16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;; 16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;; 16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;; 1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;; 1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;; 1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;; 1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;; 1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;; 1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;; 16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;; 16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;; 16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;; 16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;; 16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;; 16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;; 16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;; 16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;; 16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;; 16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;; 1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;; 1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;; 1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;; 1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;; 1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;; 1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;; 16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;; 16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;; 16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;; 16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;; 16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;; 16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;; 16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;; 16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;; 16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;; 16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;; 1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;; 1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;; 1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;; 1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;; 1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;; 1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;; 16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;; 16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;; 16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;; 16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;; 16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;; 16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;; 16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;; 16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;; 16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;; 16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;; 1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;; 1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;; 1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;; 1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;; 1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;; 1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;; 16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;; 16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;; 16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;; 16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;; 16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;; 16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;; 16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;; 16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;; 16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;; 16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;; 1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;; 1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;; 1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;; 1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;; 1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;; 1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;; 16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;; 16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;; 16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;; 16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;; 16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;; 16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;; 16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;; 16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;; 16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;; 16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;; 1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;; 1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;; 1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;; 1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;; 1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;; 1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;; 16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;; 16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;; 16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;; 16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;; 16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;; 16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;; 16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;; 16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;; 16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;; 16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;; 1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;; 1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;; 1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;; 1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;; 1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;; 1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;; 168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;; 168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;; 168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;; 168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;; 168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;; 168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;; 168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;; 168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;; 168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;; 168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;; 168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;; 168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;; 168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;; 168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;; 168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;; 168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;; 168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;; 168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;; 168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;; 168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;; 168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;; 168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;; 168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;; 168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;; 168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;; 168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;; 168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;; 168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;; 168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;; 168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;; 168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;; 168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;; 168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;; 168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;; 168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;; 168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;; 168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;; 168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;; 168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;; 168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;; 168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;; 168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;; 168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;; 168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;; 168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;; 168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;; 168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;; 168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;; 168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;; 168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;; 168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;; 168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;; 168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;; 168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;; 168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;; 168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;; 168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;; 168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;; 168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;; 168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;; 168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;; 168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;; 168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;; 168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;; 168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;; 168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;; 168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;; 168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;; 168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;; 168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;; 168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;; 168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;; 168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;; 168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;; 168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;; 168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;; 168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;; 168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;; 168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;; 168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;; 168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;; 168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;; 168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;; 168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;; 168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;; 168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;; 168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;; 168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;; 168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;; 168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;; 168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;; 168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;; 168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;; 168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;; 168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;; 168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;; 16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;; 16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;; 16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;; 16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;; 16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;; 16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;; 16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;; 16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;; 16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;; 16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;; 1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;; 1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;; 1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;; 1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;; 1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;; 1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;; 16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;; 16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;; 16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;; 16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;; 16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;; 16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;; 16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;; 16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;; 16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;; 16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;; 1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;; 1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;; 1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;; 1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;; 1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;; 1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;; 16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;; 16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;; 16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;; 16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;; 16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;; 16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;; 16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;; 16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;; 16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;; 16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;; 1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;; 1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;; 1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;; 1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;; 1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;; 1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;; 16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;; 16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;; 16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;; 16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;; 16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;; 16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;; 16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;; 16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;; 16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;; 16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;; 1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;; 1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;; 1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;; 1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;; 1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;; 1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;; 16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;; 16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;; 16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;; 16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;; 16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;; 16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;; 16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;; 16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;; 16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;; 16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;; 1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;; 1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;; 1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;; 1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;; 1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;; 1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;; 16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;; 16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;; 16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;; 16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;; 16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;; 16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;; 16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;; 16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;; 16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;; 16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;; 1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;; 1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;; 1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;; 1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;; 1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;; 1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;; 16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;; 16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;; 16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;; 16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;; 16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;; 16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;; 16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;; 16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;; 16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;; 16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;; 1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;; 1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;; 1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;; 1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;; 1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;; 1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;; 16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;; 16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;; 16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;; 16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;; 16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;; 16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;; 16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;; 16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;; 16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;; 16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;; 1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;; 1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;; 1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;; 1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;; 1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;; 1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;; 16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;; 16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;; 16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;; 16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;; 16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;; 16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;; 16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;; 16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;; 16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;; 16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;; 1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;; 1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;; 1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;; 1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;; 1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;; 1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;; 16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;; 16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;; 16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;; 16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;; 16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;; 16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;; 16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;; 16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;; 16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;; 16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;; 1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;; 1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;; 1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;; 1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;; 1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;; 1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;; 169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;; 169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;; 169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;; 169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;; 169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;; 169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;; 169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;; 169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;; 169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;; 169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;; 169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;; 169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;; 169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;; 169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;; 169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;; 169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;; 169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;; 169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;; 169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;; 169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;; 169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;; 169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;; 169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;; 169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;; 169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;; 169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;; 169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;; 169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;; 169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;; 169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;; 169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;; 169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;; 169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;; 169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;; 169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;; 169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;; 169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;; 169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;; 169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;; 169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;; 169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;; 169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;; 169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;; 169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;; 169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;; 169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;; 169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;; 169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;; 169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;; 169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;; 169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;; 169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;; 169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;; 169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;; 169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;; 169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;; 169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;; 169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;; 169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;; 169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;; 169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;; 169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;; 169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;; 169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;; 169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;; 169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;; 169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;; 169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;; 169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;; 169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;; 169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;; 169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;; 169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;; 169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;; 169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;; 169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;; 169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;; 169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;; 169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;; 169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;; 169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;; 169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;; 169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;; 169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;; 169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;; 169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;; 169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;; 169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;; 169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;; 169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;; 169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;; 169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;; 169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;; 169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;; 169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;; 169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;; 16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;; 16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;; 16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;; 16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;; 16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;; 16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;; 16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;; 16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;; 16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;; 16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;; 16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;; 16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;; 16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;; 16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;; 16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;; 16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;; 16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;; 16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;; 16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;; 16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;; 16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;; 16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;; 16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;; 16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;; 16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;; 16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;; 16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;; 16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;; 16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;; 16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;; 16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;; 16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;; 16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;; 16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;; 16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;; 16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;; 16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;; 16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;; 16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;; 16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;; 16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;; 16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;; 16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;; 16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;; 16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;; 16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;; 16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;; 16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;; 16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;; 16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;; 16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;; 16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;; 16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;; 16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;; 16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;; 16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;; 16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;; 16A40;MRO LETTER TA;Lo;0;L;;;;;N;;;;; 16A41;MRO LETTER NGI;Lo;0;L;;;;;N;;;;; 16A42;MRO LETTER YO;Lo;0;L;;;;;N;;;;; 16A43;MRO LETTER MIM;Lo;0;L;;;;;N;;;;; 16A44;MRO LETTER BA;Lo;0;L;;;;;N;;;;; 16A45;MRO LETTER DA;Lo;0;L;;;;;N;;;;; 16A46;MRO LETTER A;Lo;0;L;;;;;N;;;;; 16A47;MRO LETTER PHI;Lo;0;L;;;;;N;;;;; 16A48;MRO LETTER KHAI;Lo;0;L;;;;;N;;;;; 16A49;MRO LETTER HAO;Lo;0;L;;;;;N;;;;; 16A4A;MRO LETTER DAI;Lo;0;L;;;;;N;;;;; 16A4B;MRO LETTER CHU;Lo;0;L;;;;;N;;;;; 16A4C;MRO LETTER KEAAE;Lo;0;L;;;;;N;;;;; 16A4D;MRO LETTER OL;Lo;0;L;;;;;N;;;;; 16A4E;MRO LETTER MAEM;Lo;0;L;;;;;N;;;;; 16A4F;MRO LETTER NIN;Lo;0;L;;;;;N;;;;; 16A50;MRO LETTER PA;Lo;0;L;;;;;N;;;;; 16A51;MRO LETTER OO;Lo;0;L;;;;;N;;;;; 16A52;MRO LETTER O;Lo;0;L;;;;;N;;;;; 16A53;MRO LETTER RO;Lo;0;L;;;;;N;;;;; 16A54;MRO LETTER SHI;Lo;0;L;;;;;N;;;;; 16A55;MRO LETTER THEA;Lo;0;L;;;;;N;;;;; 16A56;MRO LETTER EA;Lo;0;L;;;;;N;;;;; 16A57;MRO LETTER WA;Lo;0;L;;;;;N;;;;; 16A58;MRO LETTER E;Lo;0;L;;;;;N;;;;; 16A59;MRO LETTER KO;Lo;0;L;;;;;N;;;;; 16A5A;MRO LETTER LAN;Lo;0;L;;;;;N;;;;; 16A5B;MRO LETTER LA;Lo;0;L;;;;;N;;;;; 16A5C;MRO LETTER HAI;Lo;0;L;;;;;N;;;;; 16A5D;MRO LETTER RI;Lo;0;L;;;;;N;;;;; 16A5E;MRO LETTER TEK;Lo;0;L;;;;;N;;;;; 16A60;MRO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16A61;MRO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16A62;MRO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16A63;MRO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16A64;MRO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16A65;MRO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16A66;MRO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16A67;MRO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16A68;MRO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; 16AD3;BASSA VAH LETTER FA;Lo;0;L;;;;;N;;;;; 16AD4;BASSA VAH LETTER MBE;Lo;0;L;;;;;N;;;;; 16AD5;BASSA VAH LETTER YIE;Lo;0;L;;;;;N;;;;; 16AD6;BASSA VAH LETTER GAH;Lo;0;L;;;;;N;;;;; 16AD7;BASSA VAH LETTER DHII;Lo;0;L;;;;;N;;;;; 16AD8;BASSA VAH LETTER KPAH;Lo;0;L;;;;;N;;;;; 16AD9;BASSA VAH LETTER JO;Lo;0;L;;;;;N;;;;; 16ADA;BASSA VAH LETTER HWAH;Lo;0;L;;;;;N;;;;; 16ADB;BASSA VAH LETTER WA;Lo;0;L;;;;;N;;;;; 16ADC;BASSA VAH LETTER ZO;Lo;0;L;;;;;N;;;;; 16ADD;BASSA VAH LETTER GBU;Lo;0;L;;;;;N;;;;; 16ADE;BASSA VAH LETTER DO;Lo;0;L;;;;;N;;;;; 16ADF;BASSA VAH LETTER CE;Lo;0;L;;;;;N;;;;; 16AE0;BASSA VAH LETTER UWU;Lo;0;L;;;;;N;;;;; 16AE1;BASSA VAH LETTER TO;Lo;0;L;;;;;N;;;;; 16AE2;BASSA VAH LETTER BA;Lo;0;L;;;;;N;;;;; 16AE3;BASSA VAH LETTER VU;Lo;0;L;;;;;N;;;;; 16AE4;BASSA VAH LETTER YEIN;Lo;0;L;;;;;N;;;;; 16AE5;BASSA VAH LETTER PA;Lo;0;L;;;;;N;;;;; 16AE6;BASSA VAH LETTER WADDA;Lo;0;L;;;;;N;;;;; 16AE7;BASSA VAH LETTER A;Lo;0;L;;;;;N;;;;; 16AE8;BASSA VAH LETTER O;Lo;0;L;;;;;N;;;;; 16AE9;BASSA VAH LETTER OO;Lo;0;L;;;;;N;;;;; 16AEA;BASSA VAH LETTER U;Lo;0;L;;;;;N;;;;; 16AEB;BASSA VAH LETTER EE;Lo;0;L;;;;;N;;;;; 16AEC;BASSA VAH LETTER E;Lo;0;L;;;;;N;;;;; 16AED;BASSA VAH LETTER I;Lo;0;L;;;;;N;;;;; 16AF0;BASSA VAH COMBINING HIGH TONE;Mn;1;NSM;;;;;N;;;;; 16AF1;BASSA VAH COMBINING LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF2;BASSA VAH COMBINING MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF3;BASSA VAH COMBINING LOW-MID TONE;Mn;1;NSM;;;;;N;;;;; 16AF4;BASSA VAH COMBINING HIGH-LOW TONE;Mn;1;NSM;;;;;N;;;;; 16AF5;BASSA VAH FULL STOP;Po;0;L;;;;;N;;;;; 16B00;PAHAWH HMONG VOWEL KEEB;Lo;0;L;;;;;N;;;;; 16B01;PAHAWH HMONG VOWEL KEEV;Lo;0;L;;;;;N;;;;; 16B02;PAHAWH HMONG VOWEL KIB;Lo;0;L;;;;;N;;;;; 16B03;PAHAWH HMONG VOWEL KIV;Lo;0;L;;;;;N;;;;; 16B04;PAHAWH HMONG VOWEL KAUB;Lo;0;L;;;;;N;;;;; 16B05;PAHAWH HMONG VOWEL KAUV;Lo;0;L;;;;;N;;;;; 16B06;PAHAWH HMONG VOWEL KUB;Lo;0;L;;;;;N;;;;; 16B07;PAHAWH HMONG VOWEL KUV;Lo;0;L;;;;;N;;;;; 16B08;PAHAWH HMONG VOWEL KEB;Lo;0;L;;;;;N;;;;; 16B09;PAHAWH HMONG VOWEL KEV;Lo;0;L;;;;;N;;;;; 16B0A;PAHAWH HMONG VOWEL KAIB;Lo;0;L;;;;;N;;;;; 16B0B;PAHAWH HMONG VOWEL KAIV;Lo;0;L;;;;;N;;;;; 16B0C;PAHAWH HMONG VOWEL KOOB;Lo;0;L;;;;;N;;;;; 16B0D;PAHAWH HMONG VOWEL KOOV;Lo;0;L;;;;;N;;;;; 16B0E;PAHAWH HMONG VOWEL KAWB;Lo;0;L;;;;;N;;;;; 16B0F;PAHAWH HMONG VOWEL KAWV;Lo;0;L;;;;;N;;;;; 16B10;PAHAWH HMONG VOWEL KUAB;Lo;0;L;;;;;N;;;;; 16B11;PAHAWH HMONG VOWEL KUAV;Lo;0;L;;;;;N;;;;; 16B12;PAHAWH HMONG VOWEL KOB;Lo;0;L;;;;;N;;;;; 16B13;PAHAWH HMONG VOWEL KOV;Lo;0;L;;;;;N;;;;; 16B14;PAHAWH HMONG VOWEL KIAB;Lo;0;L;;;;;N;;;;; 16B15;PAHAWH HMONG VOWEL KIAV;Lo;0;L;;;;;N;;;;; 16B16;PAHAWH HMONG VOWEL KAB;Lo;0;L;;;;;N;;;;; 16B17;PAHAWH HMONG VOWEL KAV;Lo;0;L;;;;;N;;;;; 16B18;PAHAWH HMONG VOWEL KWB;Lo;0;L;;;;;N;;;;; 16B19;PAHAWH HMONG VOWEL KWV;Lo;0;L;;;;;N;;;;; 16B1A;PAHAWH HMONG VOWEL KAAB;Lo;0;L;;;;;N;;;;; 16B1B;PAHAWH HMONG VOWEL KAAV;Lo;0;L;;;;;N;;;;; 16B1C;PAHAWH HMONG CONSONANT VAU;Lo;0;L;;;;;N;;;;; 16B1D;PAHAWH HMONG CONSONANT NTSAU;Lo;0;L;;;;;N;;;;; 16B1E;PAHAWH HMONG CONSONANT LAU;Lo;0;L;;;;;N;;;;; 16B1F;PAHAWH HMONG CONSONANT HAU;Lo;0;L;;;;;N;;;;; 16B20;PAHAWH HMONG CONSONANT NLAU;Lo;0;L;;;;;N;;;;; 16B21;PAHAWH HMONG CONSONANT RAU;Lo;0;L;;;;;N;;;;; 16B22;PAHAWH HMONG CONSONANT NKAU;Lo;0;L;;;;;N;;;;; 16B23;PAHAWH HMONG CONSONANT QHAU;Lo;0;L;;;;;N;;;;; 16B24;PAHAWH HMONG CONSONANT YAU;Lo;0;L;;;;;N;;;;; 16B25;PAHAWH HMONG CONSONANT HLAU;Lo;0;L;;;;;N;;;;; 16B26;PAHAWH HMONG CONSONANT MAU;Lo;0;L;;;;;N;;;;; 16B27;PAHAWH HMONG CONSONANT CHAU;Lo;0;L;;;;;N;;;;; 16B28;PAHAWH HMONG CONSONANT NCHAU;Lo;0;L;;;;;N;;;;; 16B29;PAHAWH HMONG CONSONANT HNAU;Lo;0;L;;;;;N;;;;; 16B2A;PAHAWH HMONG CONSONANT PLHAU;Lo;0;L;;;;;N;;;;; 16B2B;PAHAWH HMONG CONSONANT NTHAU;Lo;0;L;;;;;N;;;;; 16B2C;PAHAWH HMONG CONSONANT NAU;Lo;0;L;;;;;N;;;;; 16B2D;PAHAWH HMONG CONSONANT AU;Lo;0;L;;;;;N;;;;; 16B2E;PAHAWH HMONG CONSONANT XAU;Lo;0;L;;;;;N;;;;; 16B2F;PAHAWH HMONG CONSONANT CAU;Lo;0;L;;;;;N;;;;; 16B30;PAHAWH HMONG MARK CIM TUB;Mn;230;NSM;;;;;N;;;;; 16B31;PAHAWH HMONG MARK CIM SO;Mn;230;NSM;;;;;N;;;;; 16B32;PAHAWH HMONG MARK CIM KES;Mn;230;NSM;;;;;N;;;;; 16B33;PAHAWH HMONG MARK CIM KHAV;Mn;230;NSM;;;;;N;;;;; 16B34;PAHAWH HMONG MARK CIM SUAM;Mn;230;NSM;;;;;N;;;;; 16B35;PAHAWH HMONG MARK CIM HOM;Mn;230;NSM;;;;;N;;;;; 16B36;PAHAWH HMONG MARK CIM TAUM;Mn;230;NSM;;;;;N;;;;; 16B37;PAHAWH HMONG SIGN VOS THOM;Po;0;L;;;;;N;;;;; 16B38;PAHAWH HMONG SIGN VOS TSHAB CEEB;Po;0;L;;;;;N;;;;; 16B39;PAHAWH HMONG SIGN CIM CHEEM;Po;0;L;;;;;N;;;;; 16B3A;PAHAWH HMONG SIGN VOS THIAB;Po;0;L;;;;;N;;;;; 16B3B;PAHAWH HMONG SIGN VOS FEEM;Po;0;L;;;;;N;;;;; 16B3C;PAHAWH HMONG SIGN XYEEM NTXIV;So;0;L;;;;;N;;;;; 16B3D;PAHAWH HMONG SIGN XYEEM RHO;So;0;L;;;;;N;;;;; 16B3E;PAHAWH HMONG SIGN XYEEM TOV;So;0;L;;;;;N;;;;; 16B3F;PAHAWH HMONG SIGN XYEEM FAIB;So;0;L;;;;;N;;;;; 16B40;PAHAWH HMONG SIGN VOS SEEV;Lm;0;L;;;;;N;;;;; 16B41;PAHAWH HMONG SIGN MEEJ SUAB;Lm;0;L;;;;;N;;;;; 16B42;PAHAWH HMONG SIGN VOS NRUA;Lm;0;L;;;;;N;;;;; 16B43;PAHAWH HMONG SIGN IB YAM;Lm;0;L;;;;;N;;;;; 16B44;PAHAWH HMONG SIGN XAUS;Po;0;L;;;;;N;;;;; 16B45;PAHAWH HMONG SIGN CIM TSOV ROG;So;0;L;;;;;N;;;;; 16B50;PAHAWH HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 16B51;PAHAWH HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 16B52;PAHAWH HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 16B53;PAHAWH HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 16B54;PAHAWH HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 16B55;PAHAWH HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 16B56;PAHAWH HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 16B57;PAHAWH HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 16B58;PAHAWH HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 16B59;PAHAWH HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16B5B;PAHAWH HMONG NUMBER TENS;No;0;L;;;;10;N;;;;; 16B5C;PAHAWH HMONG NUMBER HUNDREDS;No;0;L;;;;100;N;;;;; 16B5D;PAHAWH HMONG NUMBER TEN THOUSANDS;No;0;L;;;;10000;N;;;;; 16B5E;PAHAWH HMONG NUMBER MILLIONS;No;0;L;;;;1000000;N;;;;; 16B5F;PAHAWH HMONG NUMBER HUNDRED MILLIONS;No;0;L;;;;100000000;N;;;;; 16B60;PAHAWH HMONG NUMBER TEN BILLIONS;No;0;L;;;;10000000000;N;;;;; 16B61;PAHAWH HMONG NUMBER TRILLIONS;No;0;L;;;;1000000000000;N;;;;; 16B63;PAHAWH HMONG SIGN VOS LUB;Lo;0;L;;;;;N;;;;; 16B64;PAHAWH HMONG SIGN XYOO;Lo;0;L;;;;;N;;;;; 16B65;PAHAWH HMONG SIGN HLI;Lo;0;L;;;;;N;;;;; 16B66;PAHAWH HMONG SIGN THIRD-STAGE HLI;Lo;0;L;;;;;N;;;;; 16B67;PAHAWH HMONG SIGN ZWJ THAJ;Lo;0;L;;;;;N;;;;; 16B68;PAHAWH HMONG SIGN HNUB;Lo;0;L;;;;;N;;;;; 16B69;PAHAWH HMONG SIGN NQIG;Lo;0;L;;;;;N;;;;; 16B6A;PAHAWH HMONG SIGN XIAB;Lo;0;L;;;;;N;;;;; 16B6B;PAHAWH HMONG SIGN NTUJ;Lo;0;L;;;;;N;;;;; 16B6C;PAHAWH HMONG SIGN AV;Lo;0;L;;;;;N;;;;; 16B6D;PAHAWH HMONG SIGN TXHEEJ CEEV;Lo;0;L;;;;;N;;;;; 16B6E;PAHAWH HMONG SIGN MEEJ TSEEB;Lo;0;L;;;;;N;;;;; 16B6F;PAHAWH HMONG SIGN TAU;Lo;0;L;;;;;N;;;;; 16B70;PAHAWH HMONG SIGN LOS;Lo;0;L;;;;;N;;;;; 16B71;PAHAWH HMONG SIGN MUS;Lo;0;L;;;;;N;;;;; 16B72;PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG;Lo;0;L;;;;;N;;;;; 16B73;PAHAWH HMONG SIGN CIM CUAM TSHOOJ;Lo;0;L;;;;;N;;;;; 16B74;PAHAWH HMONG SIGN CIM TXWV;Lo;0;L;;;;;N;;;;; 16B75;PAHAWH HMONG SIGN CIM TXWV CHWV;Lo;0;L;;;;;N;;;;; 16B76;PAHAWH HMONG SIGN CIM PUB DAWB;Lo;0;L;;;;;N;;;;; 16B77;PAHAWH HMONG SIGN CIM NRES TOS;Lo;0;L;;;;;N;;;;; 16B7D;PAHAWH HMONG CLAN SIGN TSHEEJ;Lo;0;L;;;;;N;;;;; 16B7E;PAHAWH HMONG CLAN SIGN YEEG;Lo;0;L;;;;;N;;;;; 16B7F;PAHAWH HMONG CLAN SIGN LIS;Lo;0;L;;;;;N;;;;; 16B80;PAHAWH HMONG CLAN SIGN LAUJ;Lo;0;L;;;;;N;;;;; 16B81;PAHAWH HMONG CLAN SIGN XYOOJ;Lo;0;L;;;;;N;;;;; 16B82;PAHAWH HMONG CLAN SIGN KOO;Lo;0;L;;;;;N;;;;; 16B83;PAHAWH HMONG CLAN SIGN HAWJ;Lo;0;L;;;;;N;;;;; 16B84;PAHAWH HMONG CLAN SIGN MUAS;Lo;0;L;;;;;N;;;;; 16B85;PAHAWH HMONG CLAN SIGN THOJ;Lo;0;L;;;;;N;;;;; 16B86;PAHAWH HMONG CLAN SIGN TSAB;Lo;0;L;;;;;N;;;;; 16B87;PAHAWH HMONG CLAN SIGN PHAB;Lo;0;L;;;;;N;;;;; 16B88;PAHAWH HMONG CLAN SIGN KHAB;Lo;0;L;;;;;N;;;;; 16B89;PAHAWH HMONG CLAN SIGN HAM;Lo;0;L;;;;;N;;;;; 16B8A;PAHAWH HMONG CLAN SIGN VAJ;Lo;0;L;;;;;N;;;;; 16B8B;PAHAWH HMONG CLAN SIGN FAJ;Lo;0;L;;;;;N;;;;; 16B8C;PAHAWH HMONG CLAN SIGN YAJ;Lo;0;L;;;;;N;;;;; 16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;; 16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;; 16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;; 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; 16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;; 16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;; 16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;; 16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;; 16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;; 16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;; 16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;; 16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;; 16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;; 16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;; 16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;; 16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;; 16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;; 16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;; 16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;; 16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;; 16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;; 16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;; 16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;; 16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;; 16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;; 16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;; 16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;; 16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;; 16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;; 16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;; 16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;; 16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;; 16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;; 16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;; 16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;; 16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;; 16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;; 16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;; 16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;; 16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;; 16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;; 16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;; 16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;; 16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;; 16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;; 16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;; 16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;; 16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;; 16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;; 16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;; 16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;; 16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;; 16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;; 16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;; 16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;; 16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;; 16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;; 16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;; 16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;; 16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;; 16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;; 16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;; 16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;; 16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;; 16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;; 16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;; 16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;; 16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;; 16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;; 16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;; 16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;; 16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;; 16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;; 16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;; 16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;; 16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;; 16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;; 16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;; 16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;; 16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;; 16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;; 16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;; 16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;; 16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;; 16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;; 16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;; 16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;; 16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;; 16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;; 16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;; 16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;; 16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;; 16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;; 16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;; 16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;; 16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;; 16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;; 16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;; 16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;; 16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;; 16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;; 16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;; 16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;; 16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;; 16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;; 16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;; 16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;; 16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;; 16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;; 16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;; 16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;; 16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;; 16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;; 16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;; 16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;; 16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;; 16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;; 16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;; 16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;; 16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;; 16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;; 16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;; 17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;; 187EC;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; 18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;; 18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;; 18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;; 18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;; 18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;; 18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;; 18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;; 1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;; 1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;; 1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;; 1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;; 1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;; 1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;; 18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;; 18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;; 18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;; 18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;; 18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;; 18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;; 18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;; 18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;; 18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;; 18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;; 1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;; 1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;; 1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;; 1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;; 1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;; 1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;; 18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;; 18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;; 18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;; 18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;; 18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;; 18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;; 18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;; 18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;; 18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;; 18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;; 1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;; 1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;; 1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;; 1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;; 1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;; 1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;; 18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;; 18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;; 18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;; 18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;; 18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;; 18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;; 18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;; 18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;; 18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;; 18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;; 1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;; 1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;; 1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;; 1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;; 1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;; 1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;; 18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;; 18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;; 18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;; 18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;; 18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;; 18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;; 18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;; 18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;; 18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;; 18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;; 1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;; 1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;; 1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;; 1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;; 1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;; 1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;; 18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;; 18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;; 18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;; 18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;; 18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;; 18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;; 18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;; 18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;; 18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;; 18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;; 1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;; 1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;; 1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;; 1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;; 1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;; 1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;; 18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;; 18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;; 18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;; 18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;; 18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;; 18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;; 18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;; 18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;; 18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;; 18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;; 1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;; 1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;; 1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;; 1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;; 1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;; 1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;; 18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;; 18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;; 18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;; 18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;; 18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;; 18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;; 18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;; 18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;; 18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;; 18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;; 1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;; 1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;; 1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;; 1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;; 1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;; 1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;; 18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;; 18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;; 18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;; 18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;; 18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;; 18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;; 18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;; 18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;; 18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;; 18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;; 1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;; 1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;; 1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;; 1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;; 1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;; 1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;; 18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;; 18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;; 18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;; 18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;; 18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;; 18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;; 18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;; 18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;; 18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;; 18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;; 1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;; 1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;; 1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;; 1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;; 1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;; 1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;; 188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;; 188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;; 188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;; 188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;; 188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;; 188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;; 188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;; 188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;; 188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;; 188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;; 188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;; 188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;; 188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;; 188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;; 188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;; 188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;; 188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;; 188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;; 188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;; 188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;; 188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;; 188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;; 188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;; 188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;; 188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;; 188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;; 188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;; 188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;; 188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;; 188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;; 188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;; 188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;; 188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;; 188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;; 188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;; 188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;; 188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;; 188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;; 188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;; 188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;; 188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;; 188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;; 188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;; 188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;; 188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;; 188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;; 188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;; 188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;; 188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;; 188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;; 188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;; 188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;; 188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;; 188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;; 188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;; 188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;; 188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;; 188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;; 188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;; 188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;; 188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;; 188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;; 188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;; 188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;; 188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;; 188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;; 188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;; 188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;; 188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;; 188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;; 188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;; 188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;; 188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;; 188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;; 188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;; 188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;; 188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;; 188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;; 188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;; 188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;; 188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;; 188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;; 188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;; 188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;; 188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;; 188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;; 188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;; 188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;; 188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;; 188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;; 188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;; 188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;; 188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;; 188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;; 188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;; 188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;; 18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;; 18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;; 18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;; 18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;; 18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;; 18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;; 18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;; 18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;; 18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;; 18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;; 1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;; 1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;; 1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;; 1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;; 1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;; 1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;; 18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;; 18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;; 18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;; 18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;; 18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;; 18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;; 18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;; 18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;; 18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;; 18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;; 1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;; 1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;; 1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;; 1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;; 1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;; 1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;; 18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;; 18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;; 18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;; 18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;; 18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;; 18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;; 18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;; 18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;; 18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;; 18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;; 1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;; 1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;; 1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;; 1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;; 1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;; 1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;; 18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;; 18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;; 18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;; 18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;; 18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;; 18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;; 18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;; 18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;; 18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;; 18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;; 1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;; 1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;; 1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;; 1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;; 1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;; 1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;; 18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;; 18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;; 18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;; 18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;; 18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;; 18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;; 18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;; 18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;; 18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;; 18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;; 1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;; 1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;; 1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;; 1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;; 1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;; 1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;; 18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;; 18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;; 18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;; 18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;; 18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;; 18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;; 18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;; 18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;; 18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;; 18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;; 1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;; 1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;; 1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;; 1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;; 1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;; 1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;; 18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;; 18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;; 18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;; 18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;; 18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;; 18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;; 18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;; 18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;; 18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;; 18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;; 1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;; 1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;; 1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;; 1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;; 1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;; 1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;; 18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;; 18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;; 18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;; 18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;; 18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;; 18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;; 18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;; 18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;; 18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;; 18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;; 1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;; 1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;; 1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;; 1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;; 1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;; 1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;; 18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;; 18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;; 18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;; 18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;; 18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;; 18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;; 18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;; 18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;; 18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;; 18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;; 1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;; 1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;; 1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;; 1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;; 1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;; 1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;; 18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;; 18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;; 18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;; 18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;; 18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;; 18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;; 18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;; 18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;; 18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;; 18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;; 1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;; 1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;; 1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;; 1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;; 1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;; 1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;; 189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;; 189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;; 189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;; 189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;; 189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;; 189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;; 189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;; 189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;; 189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;; 189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;; 189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;; 189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;; 189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;; 189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;; 189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;; 189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;; 189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;; 189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;; 189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;; 189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;; 189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;; 189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;; 189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;; 189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;; 189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;; 189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;; 189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;; 189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;; 189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;; 189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;; 189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;; 189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;; 189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;; 189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;; 189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;; 189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;; 189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;; 189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;; 189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;; 189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;; 189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;; 189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;; 189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;; 189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;; 189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;; 189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;; 189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;; 189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;; 189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;; 189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;; 189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;; 189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;; 189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;; 189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;; 189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;; 189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;; 189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;; 189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;; 189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;; 189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;; 189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;; 189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;; 189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;; 189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;; 189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;; 189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;; 189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;; 189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;; 189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;; 189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;; 189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;; 189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;; 189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;; 189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;; 189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;; 189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;; 189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;; 189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;; 189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;; 189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;; 189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;; 189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;; 189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;; 189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;; 189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;; 189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;; 189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;; 189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;; 189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;; 189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;; 189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;; 189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;; 189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;; 189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;; 189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;; 189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;; 18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;; 18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;; 18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;; 18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;; 18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;; 18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;; 18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;; 18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;; 18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;; 18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;; 18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;; 18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;; 18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;; 18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;; 18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;; 18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;; 18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;; 18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;; 18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;; 18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;; 18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;; 18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;; 18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;; 18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;; 18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;; 18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;; 18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;; 18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;; 18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;; 18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;; 18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;; 18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;; 18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;; 18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;; 18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;; 18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;; 18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;; 18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;; 18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;; 18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;; 18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;; 18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;; 18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;; 18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;; 18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;; 18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;; 18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;; 18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;; 18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;; 18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;; 18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;; 18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;; 18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;; 18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;; 18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;; 18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;; 18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;; 18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;; 18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;; 18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;; 18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;; 18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;; 18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;; 18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;; 18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;; 18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;; 18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;; 18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;; 18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;; 18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;; 18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;; 18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;; 18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;; 18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;; 18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;; 18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;; 18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;; 18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;; 18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;; 18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;; 18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;; 18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;; 18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;; 18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;; 18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;; 18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;; 18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;; 18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;; 18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;; 18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;; 18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;; 18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;; 18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;; 18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;; 18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;; 18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;; 18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;; 18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;; 18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;; 18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;; 18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;; 18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;; 18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;; 18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;; 18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;; 18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;; 18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;; 18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;; 18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;; 18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;; 18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;; 18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;; 18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;; 18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;; 18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;; 18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;; 18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;; 18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;; 18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;; 18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;; 18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;; 18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;; 18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;; 18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;; 18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;; 18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;; 18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;; 18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;; 18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;; 18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;; 18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;; 18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;; 18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;; 18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;; 18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;; 18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;; 18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;; 18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;; 18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;; 18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;; 18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;; 18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;; 18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;; 18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;; 18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;; 18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;; 18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;; 18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;; 18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;; 18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;; 18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;; 18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;; 18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;; 18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;; 18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;; 18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;; 18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;; 18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;; 18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;; 18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;; 18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;; 18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;; 18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;; 18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;; 18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;; 18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;; 18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;; 18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;; 18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;; 18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;; 18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;; 18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;; 18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;; 18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;; 18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;; 18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;; 18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;; 18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;; 18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;; 18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;; 18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;; 18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;; 18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;; 18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;; 18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;; 18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;; 18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;; 18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;; 18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;; 18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;; 18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;; 18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;; 18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;; 18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;; 18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;; 18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;; 18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;; 18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;; 18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;; 18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;; 18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;; 18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;; 18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;; 18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;; 18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;; 18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;; 18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;; 18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;; 18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;; 18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;; 18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;; 18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;; 18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;; 18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;; 18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;; 18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;; 18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;; 18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;; 18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;; 18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;; 18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;; 18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;; 18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;; 18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;; 18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;; 18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;; 18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;; 18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;; 18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;; 18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;; 18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;; 18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;; 18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;; 18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;; 18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;; 18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;; 18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;; 18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;; 18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;; 18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;; 18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;; 18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;; 18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;; 1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;; 1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;; 1BC03;DUPLOYAN LETTER T;Lo;0;L;;;;;N;;;;; 1BC04;DUPLOYAN LETTER F;Lo;0;L;;;;;N;;;;; 1BC05;DUPLOYAN LETTER K;Lo;0;L;;;;;N;;;;; 1BC06;DUPLOYAN LETTER L;Lo;0;L;;;;;N;;;;; 1BC07;DUPLOYAN LETTER B;Lo;0;L;;;;;N;;;;; 1BC08;DUPLOYAN LETTER D;Lo;0;L;;;;;N;;;;; 1BC09;DUPLOYAN LETTER V;Lo;0;L;;;;;N;;;;; 1BC0A;DUPLOYAN LETTER G;Lo;0;L;;;;;N;;;;; 1BC0B;DUPLOYAN LETTER R;Lo;0;L;;;;;N;;;;; 1BC0C;DUPLOYAN LETTER P N;Lo;0;L;;;;;N;;;;; 1BC0D;DUPLOYAN LETTER D S;Lo;0;L;;;;;N;;;;; 1BC0E;DUPLOYAN LETTER F N;Lo;0;L;;;;;N;;;;; 1BC0F;DUPLOYAN LETTER K M;Lo;0;L;;;;;N;;;;; 1BC10;DUPLOYAN LETTER R S;Lo;0;L;;;;;N;;;;; 1BC11;DUPLOYAN LETTER TH;Lo;0;L;;;;;N;;;;; 1BC12;DUPLOYAN LETTER SLOAN DH;Lo;0;L;;;;;N;;;;; 1BC13;DUPLOYAN LETTER DH;Lo;0;L;;;;;N;;;;; 1BC14;DUPLOYAN LETTER KK;Lo;0;L;;;;;N;;;;; 1BC15;DUPLOYAN LETTER SLOAN J;Lo;0;L;;;;;N;;;;; 1BC16;DUPLOYAN LETTER HL;Lo;0;L;;;;;N;;;;; 1BC17;DUPLOYAN LETTER LH;Lo;0;L;;;;;N;;;;; 1BC18;DUPLOYAN LETTER RH;Lo;0;L;;;;;N;;;;; 1BC19;DUPLOYAN LETTER M;Lo;0;L;;;;;N;;;;; 1BC1A;DUPLOYAN LETTER N;Lo;0;L;;;;;N;;;;; 1BC1B;DUPLOYAN LETTER J;Lo;0;L;;;;;N;;;;; 1BC1C;DUPLOYAN LETTER S;Lo;0;L;;;;;N;;;;; 1BC1D;DUPLOYAN LETTER M N;Lo;0;L;;;;;N;;;;; 1BC1E;DUPLOYAN LETTER N M;Lo;0;L;;;;;N;;;;; 1BC1F;DUPLOYAN LETTER J M;Lo;0;L;;;;;N;;;;; 1BC20;DUPLOYAN LETTER S J;Lo;0;L;;;;;N;;;;; 1BC21;DUPLOYAN LETTER M WITH DOT;Lo;0;L;;;;;N;;;;; 1BC22;DUPLOYAN LETTER N WITH DOT;Lo;0;L;;;;;N;;;;; 1BC23;DUPLOYAN LETTER J WITH DOT;Lo;0;L;;;;;N;;;;; 1BC24;DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE;Lo;0;L;;;;;N;;;;; 1BC25;DUPLOYAN LETTER S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC26;DUPLOYAN LETTER S WITH DOT BELOW;Lo;0;L;;;;;N;;;;; 1BC27;DUPLOYAN LETTER M S;Lo;0;L;;;;;N;;;;; 1BC28;DUPLOYAN LETTER N S;Lo;0;L;;;;;N;;;;; 1BC29;DUPLOYAN LETTER J S;Lo;0;L;;;;;N;;;;; 1BC2A;DUPLOYAN LETTER S S;Lo;0;L;;;;;N;;;;; 1BC2B;DUPLOYAN LETTER M N S;Lo;0;L;;;;;N;;;;; 1BC2C;DUPLOYAN LETTER N M S;Lo;0;L;;;;;N;;;;; 1BC2D;DUPLOYAN LETTER J M S;Lo;0;L;;;;;N;;;;; 1BC2E;DUPLOYAN LETTER S J S;Lo;0;L;;;;;N;;;;; 1BC2F;DUPLOYAN LETTER J S WITH DOT;Lo;0;L;;;;;N;;;;; 1BC30;DUPLOYAN LETTER J N;Lo;0;L;;;;;N;;;;; 1BC31;DUPLOYAN LETTER J N S;Lo;0;L;;;;;N;;;;; 1BC32;DUPLOYAN LETTER S T;Lo;0;L;;;;;N;;;;; 1BC33;DUPLOYAN LETTER S T R;Lo;0;L;;;;;N;;;;; 1BC34;DUPLOYAN LETTER S P;Lo;0;L;;;;;N;;;;; 1BC35;DUPLOYAN LETTER S P R;Lo;0;L;;;;;N;;;;; 1BC36;DUPLOYAN LETTER T S;Lo;0;L;;;;;N;;;;; 1BC37;DUPLOYAN LETTER T R S;Lo;0;L;;;;;N;;;;; 1BC38;DUPLOYAN LETTER W;Lo;0;L;;;;;N;;;;; 1BC39;DUPLOYAN LETTER WH;Lo;0;L;;;;;N;;;;; 1BC3A;DUPLOYAN LETTER W R;Lo;0;L;;;;;N;;;;; 1BC3B;DUPLOYAN LETTER S N;Lo;0;L;;;;;N;;;;; 1BC3C;DUPLOYAN LETTER S M;Lo;0;L;;;;;N;;;;; 1BC3D;DUPLOYAN LETTER K R S;Lo;0;L;;;;;N;;;;; 1BC3E;DUPLOYAN LETTER G R S;Lo;0;L;;;;;N;;;;; 1BC3F;DUPLOYAN LETTER S K;Lo;0;L;;;;;N;;;;; 1BC40;DUPLOYAN LETTER S K R;Lo;0;L;;;;;N;;;;; 1BC41;DUPLOYAN LETTER A;Lo;0;L;;;;;N;;;;; 1BC42;DUPLOYAN LETTER SLOAN OW;Lo;0;L;;;;;N;;;;; 1BC43;DUPLOYAN LETTER OA;Lo;0;L;;;;;N;;;;; 1BC44;DUPLOYAN LETTER O;Lo;0;L;;;;;N;;;;; 1BC45;DUPLOYAN LETTER AOU;Lo;0;L;;;;;N;;;;; 1BC46;DUPLOYAN LETTER I;Lo;0;L;;;;;N;;;;; 1BC47;DUPLOYAN LETTER E;Lo;0;L;;;;;N;;;;; 1BC48;DUPLOYAN LETTER IE;Lo;0;L;;;;;N;;;;; 1BC49;DUPLOYAN LETTER SHORT I;Lo;0;L;;;;;N;;;;; 1BC4A;DUPLOYAN LETTER UI;Lo;0;L;;;;;N;;;;; 1BC4B;DUPLOYAN LETTER EE;Lo;0;L;;;;;N;;;;; 1BC4C;DUPLOYAN LETTER SLOAN EH;Lo;0;L;;;;;N;;;;; 1BC4D;DUPLOYAN LETTER ROMANIAN I;Lo;0;L;;;;;N;;;;; 1BC4E;DUPLOYAN LETTER SLOAN EE;Lo;0;L;;;;;N;;;;; 1BC4F;DUPLOYAN LETTER LONG I;Lo;0;L;;;;;N;;;;; 1BC50;DUPLOYAN LETTER YE;Lo;0;L;;;;;N;;;;; 1BC51;DUPLOYAN LETTER U;Lo;0;L;;;;;N;;;;; 1BC52;DUPLOYAN LETTER EU;Lo;0;L;;;;;N;;;;; 1BC53;DUPLOYAN LETTER XW;Lo;0;L;;;;;N;;;;; 1BC54;DUPLOYAN LETTER U N;Lo;0;L;;;;;N;;;;; 1BC55;DUPLOYAN LETTER LONG U;Lo;0;L;;;;;N;;;;; 1BC56;DUPLOYAN LETTER ROMANIAN U;Lo;0;L;;;;;N;;;;; 1BC57;DUPLOYAN LETTER UH;Lo;0;L;;;;;N;;;;; 1BC58;DUPLOYAN LETTER SLOAN U;Lo;0;L;;;;;N;;;;; 1BC59;DUPLOYAN LETTER OOH;Lo;0;L;;;;;N;;;;; 1BC5A;DUPLOYAN LETTER OW;Lo;0;L;;;;;N;;;;; 1BC5B;DUPLOYAN LETTER OU;Lo;0;L;;;;;N;;;;; 1BC5C;DUPLOYAN LETTER WA;Lo;0;L;;;;;N;;;;; 1BC5D;DUPLOYAN LETTER WO;Lo;0;L;;;;;N;;;;; 1BC5E;DUPLOYAN LETTER WI;Lo;0;L;;;;;N;;;;; 1BC5F;DUPLOYAN LETTER WEI;Lo;0;L;;;;;N;;;;; 1BC60;DUPLOYAN LETTER WOW;Lo;0;L;;;;;N;;;;; 1BC61;DUPLOYAN LETTER NASAL U;Lo;0;L;;;;;N;;;;; 1BC62;DUPLOYAN LETTER NASAL O;Lo;0;L;;;;;N;;;;; 1BC63;DUPLOYAN LETTER NASAL I;Lo;0;L;;;;;N;;;;; 1BC64;DUPLOYAN LETTER NASAL A;Lo;0;L;;;;;N;;;;; 1BC65;DUPLOYAN LETTER PERNIN AN;Lo;0;L;;;;;N;;;;; 1BC66;DUPLOYAN LETTER PERNIN AM;Lo;0;L;;;;;N;;;;; 1BC67;DUPLOYAN LETTER SLOAN EN;Lo;0;L;;;;;N;;;;; 1BC68;DUPLOYAN LETTER SLOAN AN;Lo;0;L;;;;;N;;;;; 1BC69;DUPLOYAN LETTER SLOAN ON;Lo;0;L;;;;;N;;;;; 1BC6A;DUPLOYAN LETTER VOCALIC M;Lo;0;L;;;;;N;;;;; 1BC70;DUPLOYAN AFFIX LEFT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC71;DUPLOYAN AFFIX MID HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC72;DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;; 1BC73;DUPLOYAN AFFIX LOW VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC74;DUPLOYAN AFFIX MID VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC75;DUPLOYAN AFFIX HIGH VERTICAL SECANT;Lo;0;L;;;;;N;;;;; 1BC76;DUPLOYAN AFFIX ATTACHED SECANT;Lo;0;L;;;;;N;;;;; 1BC77;DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT;Lo;0;L;;;;;N;;;;; 1BC78;DUPLOYAN AFFIX ATTACHED TANGENT;Lo;0;L;;;;;N;;;;; 1BC79;DUPLOYAN AFFIX ATTACHED TAIL;Lo;0;L;;;;;N;;;;; 1BC7A;DUPLOYAN AFFIX ATTACHED E HOOK;Lo;0;L;;;;;N;;;;; 1BC7B;DUPLOYAN AFFIX ATTACHED I HOOK;Lo;0;L;;;;;N;;;;; 1BC7C;DUPLOYAN AFFIX ATTACHED TANGENT HOOK;Lo;0;L;;;;;N;;;;; 1BC80;DUPLOYAN AFFIX HIGH ACUTE;Lo;0;L;;;;;N;;;;; 1BC81;DUPLOYAN AFFIX HIGH TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC82;DUPLOYAN AFFIX HIGH GRAVE;Lo;0;L;;;;;N;;;;; 1BC83;DUPLOYAN AFFIX HIGH LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC84;DUPLOYAN AFFIX HIGH DOT;Lo;0;L;;;;;N;;;;; 1BC85;DUPLOYAN AFFIX HIGH CIRCLE;Lo;0;L;;;;;N;;;;; 1BC86;DUPLOYAN AFFIX HIGH LINE;Lo;0;L;;;;;N;;;;; 1BC87;DUPLOYAN AFFIX HIGH WAVE;Lo;0;L;;;;;N;;;;; 1BC88;DUPLOYAN AFFIX HIGH VERTICAL;Lo;0;L;;;;;N;;;;; 1BC90;DUPLOYAN AFFIX LOW ACUTE;Lo;0;L;;;;;N;;;;; 1BC91;DUPLOYAN AFFIX LOW TIGHT ACUTE;Lo;0;L;;;;;N;;;;; 1BC92;DUPLOYAN AFFIX LOW GRAVE;Lo;0;L;;;;;N;;;;; 1BC93;DUPLOYAN AFFIX LOW LONG GRAVE;Lo;0;L;;;;;N;;;;; 1BC94;DUPLOYAN AFFIX LOW DOT;Lo;0;L;;;;;N;;;;; 1BC95;DUPLOYAN AFFIX LOW CIRCLE;Lo;0;L;;;;;N;;;;; 1BC96;DUPLOYAN AFFIX LOW LINE;Lo;0;L;;;;;N;;;;; 1BC97;DUPLOYAN AFFIX LOW WAVE;Lo;0;L;;;;;N;;;;; 1BC98;DUPLOYAN AFFIX LOW VERTICAL;Lo;0;L;;;;;N;;;;; 1BC99;DUPLOYAN AFFIX LOW ARROW;Lo;0;L;;;;;N;;;;; 1BC9C;DUPLOYAN SIGN O WITH CROSS;So;0;L;;;;;N;;;;; 1BC9D;DUPLOYAN THICK LETTER SELECTOR;Mn;0;NSM;;;;;N;;;;; 1BC9E;DUPLOYAN DOUBLE MARK;Mn;1;NSM;;;;;N;;;;; 1BC9F;DUPLOYAN PUNCTUATION CHINOOK FULL STOP;Po;0;L;;;;;N;;;;; 1BCA0;SHORTHAND FORMAT LETTER OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; 1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; 1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; 1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; 1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; 1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; 1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; 1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; 1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; 1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; 1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; 1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; 1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; 1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; 1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; 1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; 1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; 1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; 1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; 1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; 1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; 1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; 1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; 1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; 1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; 1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; 1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; 1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; 1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; 1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; 1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; 1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; 1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; 1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; 1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; 1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; 1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; 1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; 1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; 1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; 1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; 1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; 1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; 1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; 1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; 1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; 1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; 1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; 1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; 1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; 1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; 1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; 1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; 1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; 1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; 1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; 1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; 1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; 1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; 1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; 1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; 1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; 1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; 1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; 1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; 1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; 1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; 1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; 1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; 1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; 1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; 1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; 1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; 1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; 1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; 1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; 1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; 1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; 1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; 1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; 1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; 1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; 1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; 1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; 1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; 1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; 1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; 1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; 1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; 1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; 1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; 1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; 1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; 1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; 1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; 1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; 1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; 1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; 1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; 1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; 1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; 1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; 1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; 1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; 1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; 1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; 1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; 1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; 1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; 1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; 1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; 1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; 1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; 1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; 1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; 1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; 1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; 1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; 1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; 1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; 1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; 1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; 1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; 1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; 1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; 1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; 1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; 1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; 1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; 1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; 1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; 1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; 1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; 1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; 1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; 1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; 1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; 1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; 1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; 1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; 1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; 1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; 1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; 1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; 1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; 1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; 1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; 1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; 1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; 1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; 1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; 1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; 1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; 1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; 1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; 1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; 1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; 1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; 1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; 1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; 1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; 1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; 1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; 1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; 1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; 1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; 1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; 1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; 1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; 1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; 1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; 1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; 1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; 1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; 1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; 1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; 1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; 1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; 1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; 1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; 1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; 1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; 1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; 1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; 1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; 1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; 1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; 1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; 1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; 1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; 1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; 1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; 1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; 1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; 1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; 1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; 1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; 1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; 1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; 1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; 1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; 1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; 1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; 1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; 1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; 1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; 1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; 1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; 1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; 1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; 1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; 1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; 1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; 1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; 1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; 1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; 1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; 1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; 1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; 1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; 1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; 1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; 1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; 1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; 1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; 1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; 1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; 1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; 1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; 1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; 1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; 1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; 1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; 1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; 1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; 1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; 1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; 1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; 1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; 1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; 1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; 1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; 1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; 1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; 1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; 1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; 1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; 1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; 1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; 1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; 1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; 1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; 1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; 1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; 1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; 1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; 1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; 1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; 1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; 1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; 1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; 1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; 1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; 1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; 1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; 1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; 1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; 1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; 1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; 1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; 1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; 1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; 1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; 1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; 1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; 1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; 1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; 1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; 1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; 1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; 1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; 1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; 1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; 1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; 1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; 1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; 1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; 1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; 1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; 1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; 1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; 1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; 1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; 1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; 1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; 1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; 1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; 1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; 1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; 1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; 1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; 1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; 1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; 1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; 1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; 1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; 1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; 1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; 1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; 1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; 1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; 1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; 1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; 1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; 1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; 1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; 1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; 1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; 1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; 1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; 1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; 1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; 1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; 1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; 1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; 1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; 1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; 1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; 1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; 1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; 1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; 1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; 1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; 1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; 1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; 1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; 1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; 1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; 1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; 1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; 1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; 1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; 1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; 1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; 1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; 1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; 1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; 1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; 1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; 1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; 1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; 1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; 1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; 1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; 1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; 1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; 1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; 1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; 1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; 1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; 1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; 1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; 1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; 1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; 1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; 1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; 1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; 1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; 1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; 1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; 1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; 1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; 1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; 1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; 1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; 1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; 1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; 1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; 1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; 1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; 1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; 1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; 1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; 1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; 1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; 1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; 1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; 1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; 1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; 1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; 1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; 1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; 1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; 1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; 1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; 1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; 1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; 1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; 1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; 1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; 1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; 1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; 1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; 1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; 1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; 1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; 1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; 1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; 1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; 1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; 1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; 1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; 1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; 1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; 1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; 1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; 1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; 1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; 1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; 1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; 1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; 1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; 1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;; 1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;; 1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;; 1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;; 1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;; 1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;; 1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; 1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; 1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; 1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; 1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; 1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; 1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; 1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; 1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; 1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; 1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; 1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; 1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; 1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; 1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; 1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; 1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; 1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; 1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; 1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; 1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; 1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; 1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; 1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; 1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; 1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; 1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; 1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; 1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; 1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; 1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; 1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; 1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; 1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; 1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; 1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; 1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; 1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; 1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; 1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; 1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; 1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; 1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; 1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; 1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; 1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; 1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; 1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; 1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; 1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; 1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; 1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; 1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; 1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; 1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; 1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; 1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; 1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; 1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; 1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; 1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; 1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; 1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; 1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; 1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; 1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; 1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; 1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; 1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; 1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; 1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; 1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; 1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; 1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; 1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; 1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; 1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; 1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; 1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; 1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; 1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; 1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; 1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; 1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; 1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; 1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; 1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; 1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; 1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; 1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; 1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; 1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; 1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; 1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; 1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; 1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; 1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; 1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; 1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; 1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; 1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; 1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; 1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; 1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; 1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; 1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; 1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; 1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; 1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; 1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; 1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; 1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; 1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; 1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; 1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; 1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; 1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; 1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; 1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; 1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; 1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; 1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; 1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; 1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; 1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; 1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; 1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; 1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; 1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; 1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; 1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; 1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; 1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; 1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; 1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; 1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; 1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; 1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; 1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; 1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; 1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; 1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; 1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; 1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; 1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; 1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; 1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; 1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; 1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; 1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; 1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; 1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; 1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; 1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; 1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; 1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; 1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; 1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; 1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; 1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; 1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; 1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; 1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; 1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; 1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; 1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; 1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; 1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; 1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; 1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; 1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; 1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; 1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; 1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; 1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; 1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; 1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; 1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; 1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; 1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; 1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; 1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; 1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; 1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; 1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; 1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; 1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; 1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; 1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; 1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;; 1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;; 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; 1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; 1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; 1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; 1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; 1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; 1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; 1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; 1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; 1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; 1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; 1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; 1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; 1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; 1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; 1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; 1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; 1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; 1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; 1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; 1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; 1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; 1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; 1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; 1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; 1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; 1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; 1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; 1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; 1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; 1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; 1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; 1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; 1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; 1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; 1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; 1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; 1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; 1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;; 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; 1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; 1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; 1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; 1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; 1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; 1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; 1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; 1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; 1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; 1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; 1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; 1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; 1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; 1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; 1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; 1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; 1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; 1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; 1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; 1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; 1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; 1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; 1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; 1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; 1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; 1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; 1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; 1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; 1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; 1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; 1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; 1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; 1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; 1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; 1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; 1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; 1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; 1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; 1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;; 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; 1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; 1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; 1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; 1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; 1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; 1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; 1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; 1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; 1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; 1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; 1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; 1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; 1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; 1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; 1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; 1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; 1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; 1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; 1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; 1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; 1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; 1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; 1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; 1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; 1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; 1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; 1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; 1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; 1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; 1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; 1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; 1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; 1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; 1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; 1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; 1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; 1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; 1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; 1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;; 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; 1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; 1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; 1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; 1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; 1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; 1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; 1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; 1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; 1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; 1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; 1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; 1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; 1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; 1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; 1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; 1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; 1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; 1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; 1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; 1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; 1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; 1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; 1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; 1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; 1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; 1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; 1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; 1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; 1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; 1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; 1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; 1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; 1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; 1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; 1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; 1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; 1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; 1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; 1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;; 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; 1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; 1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; 1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; 1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; 1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; 1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; 1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; 1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; 1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; 1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; 1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; 1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; 1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; 1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; 1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; 1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; 1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; 1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; 1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; 1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; 1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; 1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; 1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; 1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; 1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; 1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; 1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; 1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; 1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; 1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; 1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; 1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; 1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; 1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; 1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; 1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; 1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; 1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; 1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; 1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; 1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; 1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; 1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; 1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;; 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; 1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;; 1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;; 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; 1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; 1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; 1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; 1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; 1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; 1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; 1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; 1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; 1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; 1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; 1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; 1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; 1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; 1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; 1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; 1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; 1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; 1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; 1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; 1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; 1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; 1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; 1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; 1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; 1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; 1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; 1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; 1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; 1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; 1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;; 1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;; 1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;; 1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;; 1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;; 1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;; 1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;; 1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;; 1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;; 1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;; 1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;; 1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;; 1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;; 1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;; 1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;; 1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;; 1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;; 1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;; 1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;; 1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;; 1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;; 1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;; 1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;; 1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;; 1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;; 1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;; 1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;; 1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;; 1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;; 1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;; 1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;; 1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;; 1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;; 1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;; 1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;; 1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;; 1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;; 1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;; 1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;; 1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;; 1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;; 1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;; 1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;; 1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;; 1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;; 1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;; 1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;; 1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;; 1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;; 1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;; 1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;; 1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;; 1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;; 1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;; 1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;; 1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;; 1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;; 1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;; 1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;; 1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;; 1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;; 1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;; 1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;; 1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;; 1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;; 1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;; 1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;; 1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;; 1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;; 1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;; 1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;; 1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;; 1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;; 1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;; 1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;; 1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;; 1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;; 1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;; 1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;; 1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;; 1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;; 1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;; 1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;; 1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;; 1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;; 1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;; 1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;; 1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;; 1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;; 1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;; 1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;; 1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;; 1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;; 1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;; 1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;; 1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;; 1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;; 1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;; 1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;; 1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;; 1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;; 1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;; 1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;; 1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;; 1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;; 1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;; 1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;; 1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;; 1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;; 1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;; 1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;; 1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;; 1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;; 1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;; 1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;; 1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;; 1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;; 1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;; 1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;; 1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;; 1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;; 1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;; 1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;; 1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;; 1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;; 1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;; 1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;; 1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;; 1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;; 1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;; 1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;; 1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;; 1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;; 1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;; 1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;; 1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;; 1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;; 1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;; 1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;; 1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;; 1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;; 1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;; 1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;; 1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;; 1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;; 1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;; 1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;; 1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;; 1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;; 1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;; 1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;; 1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;; 1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;; 1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;; 1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;; 1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;; 1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;; 1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;; 1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;; 1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;; 1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;; 1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;; 1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;; 1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;; 1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;; 1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;; 1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;; 1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;; 1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;; 1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;; 1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;; 1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;; 1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;; 1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;; 1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;; 1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;; 1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;; 1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;; 1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;; 1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;; 1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;; 1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;; 1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;; 1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;; 1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;; 1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;; 1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;; 1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;; 1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;; 1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;; 1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;; 1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;; 1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;; 1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;; 1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;; 1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;; 1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;; 1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;; 1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;; 1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;; 1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;; 1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;; 1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;; 1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;; 1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;; 1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;; 1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;; 1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;; 1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;; 1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;; 1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;; 1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;; 1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;; 1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;; 1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;; 1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;; 1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;; 1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;; 1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;; 1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;; 1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;; 1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;; 1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;; 1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;; 1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;; 1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;; 1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;; 1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;; 1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;; 1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;; 1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;; 1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;; 1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;; 1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;; 1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;; 1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;; 1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;; 1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;; 1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;; 1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;; 1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;; 1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;; 1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;; 1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;; 1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;; 1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;; 1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;; 1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;; 1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;; 1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;; 1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;; 1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;; 1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;; 1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;; 1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;; 1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;; 1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;; 1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;; 1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;; 1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;; 1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;; 1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;; 1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;; 1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;; 1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;; 1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;; 1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;; 1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;; 1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;; 1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;; 1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;; 1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;; 1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;; 1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;; 1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;; 1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;; 1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;; 1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;; 1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;; 1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;; 1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;; 1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;; 1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;; 1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;; 1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;; 1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;; 1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;; 1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;; 1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;; 1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;; 1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;; 1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;; 1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;; 1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;; 1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;; 1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;; 1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;; 1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;; 1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;; 1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;; 1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;; 1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;; 1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;; 1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;; 1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;; 1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;; 1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;; 1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;; 1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;; 1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;; 1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;; 1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;; 1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;; 1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;; 1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;; 1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;; 1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;; 1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;; 1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;; 1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;; 1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;; 1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;; 1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;; 1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;; 1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;; 1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;; 1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;; 1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;; 1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;; 1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;; 1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;; 1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;; 1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;; 1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;; 1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;; 1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;; 1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;; 1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;; 1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;; 1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;; 1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;; 1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;; 1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;; 1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;; 1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;; 1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;; 1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;; 1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;; 1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;; 1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;; 1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;; 1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;; 1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;; 1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;; 1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;; 1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;; 1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;; 1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;; 1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;; 1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;; 1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;; 1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;; 1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;; 1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;; 1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;; 1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;; 1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;; 1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;; 1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;; 1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;; 1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;; 1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;; 1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;; 1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;; 1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;; 1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;; 1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;; 1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;; 1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;; 1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;; 1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;; 1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;; 1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;; 1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;; 1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;; 1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;; 1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;; 1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;; 1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;; 1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;; 1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;; 1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;; 1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;; 1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;; 1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;; 1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;; 1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;; 1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;; 1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;; 1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;; 1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;; 1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;; 1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;; 1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;; 1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;; 1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;; 1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;; 1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;; 1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;; 1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;; 1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;; 1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;; 1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;; 1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;; 1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;; 1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;; 1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;; 1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;; 1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;; 1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;; 1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;; 1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;; 1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;; 1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;; 1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;; 1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;; 1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;; 1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;; 1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;; 1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;; 1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;; 1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;; 1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;; 1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;; 1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;; 1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;; 1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;; 1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;; 1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;; 1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;; 1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;; 1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;; 1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;; 1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;; 1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;; 1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;; 1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;; 1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;; 1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;; 1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;; 1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;; 1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;; 1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;; 1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; 1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;; 1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;; 1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;; 1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;; 1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;; 1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;; 1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;; 1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;; 1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;; 1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;; 1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;; 1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;; 1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;; 1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;; 1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;; 1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;; 1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;; 1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;; 1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;; 1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;; 1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;; 1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;; 1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;; 1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;; 1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; 1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;; 1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;; 1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;; 1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;; 1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;; 1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; 1E803;MENDE KIKAKUI SYLLABLE M065 KEE;Lo;0;R;;;;;N;;;;; 1E804;MENDE KIKAKUI SYLLABLE M095 KE;Lo;0;R;;;;;N;;;;; 1E805;MENDE KIKAKUI SYLLABLE M076 KOO;Lo;0;R;;;;;N;;;;; 1E806;MENDE KIKAKUI SYLLABLE M048 KO;Lo;0;R;;;;;N;;;;; 1E807;MENDE KIKAKUI SYLLABLE M179 KUA;Lo;0;R;;;;;N;;;;; 1E808;MENDE KIKAKUI SYLLABLE M004 WI;Lo;0;R;;;;;N;;;;; 1E809;MENDE KIKAKUI SYLLABLE M005 WA;Lo;0;R;;;;;N;;;;; 1E80A;MENDE KIKAKUI SYLLABLE M006 WU;Lo;0;R;;;;;N;;;;; 1E80B;MENDE KIKAKUI SYLLABLE M126 WEE;Lo;0;R;;;;;N;;;;; 1E80C;MENDE KIKAKUI SYLLABLE M118 WE;Lo;0;R;;;;;N;;;;; 1E80D;MENDE KIKAKUI SYLLABLE M114 WOO;Lo;0;R;;;;;N;;;;; 1E80E;MENDE KIKAKUI SYLLABLE M045 WO;Lo;0;R;;;;;N;;;;; 1E80F;MENDE KIKAKUI SYLLABLE M194 WUI;Lo;0;R;;;;;N;;;;; 1E810;MENDE KIKAKUI SYLLABLE M143 WEI;Lo;0;R;;;;;N;;;;; 1E811;MENDE KIKAKUI SYLLABLE M061 WVI;Lo;0;R;;;;;N;;;;; 1E812;MENDE KIKAKUI SYLLABLE M049 WVA;Lo;0;R;;;;;N;;;;; 1E813;MENDE KIKAKUI SYLLABLE M139 WVE;Lo;0;R;;;;;N;;;;; 1E814;MENDE KIKAKUI SYLLABLE M007 MIN;Lo;0;R;;;;;N;;;;; 1E815;MENDE KIKAKUI SYLLABLE M008 MAN;Lo;0;R;;;;;N;;;;; 1E816;MENDE KIKAKUI SYLLABLE M009 MUN;Lo;0;R;;;;;N;;;;; 1E817;MENDE KIKAKUI SYLLABLE M059 MEN;Lo;0;R;;;;;N;;;;; 1E818;MENDE KIKAKUI SYLLABLE M094 MON;Lo;0;R;;;;;N;;;;; 1E819;MENDE KIKAKUI SYLLABLE M154 MUAN;Lo;0;R;;;;;N;;;;; 1E81A;MENDE KIKAKUI SYLLABLE M189 MUEN;Lo;0;R;;;;;N;;;;; 1E81B;MENDE KIKAKUI SYLLABLE M010 BI;Lo;0;R;;;;;N;;;;; 1E81C;MENDE KIKAKUI SYLLABLE M011 BA;Lo;0;R;;;;;N;;;;; 1E81D;MENDE KIKAKUI SYLLABLE M012 BU;Lo;0;R;;;;;N;;;;; 1E81E;MENDE KIKAKUI SYLLABLE M150 BEE;Lo;0;R;;;;;N;;;;; 1E81F;MENDE KIKAKUI SYLLABLE M097 BE;Lo;0;R;;;;;N;;;;; 1E820;MENDE KIKAKUI SYLLABLE M103 BOO;Lo;0;R;;;;;N;;;;; 1E821;MENDE KIKAKUI SYLLABLE M138 BO;Lo;0;R;;;;;N;;;;; 1E822;MENDE KIKAKUI SYLLABLE M013 I;Lo;0;R;;;;;N;;;;; 1E823;MENDE KIKAKUI SYLLABLE M014 A;Lo;0;R;;;;;N;;;;; 1E824;MENDE KIKAKUI SYLLABLE M015 U;Lo;0;R;;;;;N;;;;; 1E825;MENDE KIKAKUI SYLLABLE M163 EE;Lo;0;R;;;;;N;;;;; 1E826;MENDE KIKAKUI SYLLABLE M100 E;Lo;0;R;;;;;N;;;;; 1E827;MENDE KIKAKUI SYLLABLE M165 OO;Lo;0;R;;;;;N;;;;; 1E828;MENDE KIKAKUI SYLLABLE M147 O;Lo;0;R;;;;;N;;;;; 1E829;MENDE KIKAKUI SYLLABLE M137 EI;Lo;0;R;;;;;N;;;;; 1E82A;MENDE KIKAKUI SYLLABLE M131 IN;Lo;0;R;;;;;N;;;;; 1E82B;MENDE KIKAKUI SYLLABLE M135 IN;Lo;0;R;;;;;N;;;;; 1E82C;MENDE KIKAKUI SYLLABLE M195 AN;Lo;0;R;;;;;N;;;;; 1E82D;MENDE KIKAKUI SYLLABLE M178 EN;Lo;0;R;;;;;N;;;;; 1E82E;MENDE KIKAKUI SYLLABLE M019 SI;Lo;0;R;;;;;N;;;;; 1E82F;MENDE KIKAKUI SYLLABLE M020 SA;Lo;0;R;;;;;N;;;;; 1E830;MENDE KIKAKUI SYLLABLE M021 SU;Lo;0;R;;;;;N;;;;; 1E831;MENDE KIKAKUI SYLLABLE M162 SEE;Lo;0;R;;;;;N;;;;; 1E832;MENDE KIKAKUI SYLLABLE M116 SE;Lo;0;R;;;;;N;;;;; 1E833;MENDE KIKAKUI SYLLABLE M136 SOO;Lo;0;R;;;;;N;;;;; 1E834;MENDE KIKAKUI SYLLABLE M079 SO;Lo;0;R;;;;;N;;;;; 1E835;MENDE KIKAKUI SYLLABLE M196 SIA;Lo;0;R;;;;;N;;;;; 1E836;MENDE KIKAKUI SYLLABLE M025 LI;Lo;0;R;;;;;N;;;;; 1E837;MENDE KIKAKUI SYLLABLE M026 LA;Lo;0;R;;;;;N;;;;; 1E838;MENDE KIKAKUI SYLLABLE M027 LU;Lo;0;R;;;;;N;;;;; 1E839;MENDE KIKAKUI SYLLABLE M084 LEE;Lo;0;R;;;;;N;;;;; 1E83A;MENDE KIKAKUI SYLLABLE M073 LE;Lo;0;R;;;;;N;;;;; 1E83B;MENDE KIKAKUI SYLLABLE M054 LOO;Lo;0;R;;;;;N;;;;; 1E83C;MENDE KIKAKUI SYLLABLE M153 LO;Lo;0;R;;;;;N;;;;; 1E83D;MENDE KIKAKUI SYLLABLE M110 LONG LE;Lo;0;R;;;;;N;;;;; 1E83E;MENDE KIKAKUI SYLLABLE M016 DI;Lo;0;R;;;;;N;;;;; 1E83F;MENDE KIKAKUI SYLLABLE M017 DA;Lo;0;R;;;;;N;;;;; 1E840;MENDE KIKAKUI SYLLABLE M018 DU;Lo;0;R;;;;;N;;;;; 1E841;MENDE KIKAKUI SYLLABLE M089 DEE;Lo;0;R;;;;;N;;;;; 1E842;MENDE KIKAKUI SYLLABLE M180 DOO;Lo;0;R;;;;;N;;;;; 1E843;MENDE KIKAKUI SYLLABLE M181 DO;Lo;0;R;;;;;N;;;;; 1E844;MENDE KIKAKUI SYLLABLE M022 TI;Lo;0;R;;;;;N;;;;; 1E845;MENDE KIKAKUI SYLLABLE M023 TA;Lo;0;R;;;;;N;;;;; 1E846;MENDE KIKAKUI SYLLABLE M024 TU;Lo;0;R;;;;;N;;;;; 1E847;MENDE KIKAKUI SYLLABLE M091 TEE;Lo;0;R;;;;;N;;;;; 1E848;MENDE KIKAKUI SYLLABLE M055 TE;Lo;0;R;;;;;N;;;;; 1E849;MENDE KIKAKUI SYLLABLE M104 TOO;Lo;0;R;;;;;N;;;;; 1E84A;MENDE KIKAKUI SYLLABLE M069 TO;Lo;0;R;;;;;N;;;;; 1E84B;MENDE KIKAKUI SYLLABLE M028 JI;Lo;0;R;;;;;N;;;;; 1E84C;MENDE KIKAKUI SYLLABLE M029 JA;Lo;0;R;;;;;N;;;;; 1E84D;MENDE KIKAKUI SYLLABLE M030 JU;Lo;0;R;;;;;N;;;;; 1E84E;MENDE KIKAKUI SYLLABLE M157 JEE;Lo;0;R;;;;;N;;;;; 1E84F;MENDE KIKAKUI SYLLABLE M113 JE;Lo;0;R;;;;;N;;;;; 1E850;MENDE KIKAKUI SYLLABLE M160 JOO;Lo;0;R;;;;;N;;;;; 1E851;MENDE KIKAKUI SYLLABLE M063 JO;Lo;0;R;;;;;N;;;;; 1E852;MENDE KIKAKUI SYLLABLE M175 LONG JO;Lo;0;R;;;;;N;;;;; 1E853;MENDE KIKAKUI SYLLABLE M031 YI;Lo;0;R;;;;;N;;;;; 1E854;MENDE KIKAKUI SYLLABLE M032 YA;Lo;0;R;;;;;N;;;;; 1E855;MENDE KIKAKUI SYLLABLE M033 YU;Lo;0;R;;;;;N;;;;; 1E856;MENDE KIKAKUI SYLLABLE M109 YEE;Lo;0;R;;;;;N;;;;; 1E857;MENDE KIKAKUI SYLLABLE M080 YE;Lo;0;R;;;;;N;;;;; 1E858;MENDE KIKAKUI SYLLABLE M141 YOO;Lo;0;R;;;;;N;;;;; 1E859;MENDE KIKAKUI SYLLABLE M121 YO;Lo;0;R;;;;;N;;;;; 1E85A;MENDE KIKAKUI SYLLABLE M034 FI;Lo;0;R;;;;;N;;;;; 1E85B;MENDE KIKAKUI SYLLABLE M035 FA;Lo;0;R;;;;;N;;;;; 1E85C;MENDE KIKAKUI SYLLABLE M036 FU;Lo;0;R;;;;;N;;;;; 1E85D;MENDE KIKAKUI SYLLABLE M078 FEE;Lo;0;R;;;;;N;;;;; 1E85E;MENDE KIKAKUI SYLLABLE M075 FE;Lo;0;R;;;;;N;;;;; 1E85F;MENDE KIKAKUI SYLLABLE M133 FOO;Lo;0;R;;;;;N;;;;; 1E860;MENDE KIKAKUI SYLLABLE M088 FO;Lo;0;R;;;;;N;;;;; 1E861;MENDE KIKAKUI SYLLABLE M197 FUA;Lo;0;R;;;;;N;;;;; 1E862;MENDE KIKAKUI SYLLABLE M101 FAN;Lo;0;R;;;;;N;;;;; 1E863;MENDE KIKAKUI SYLLABLE M037 NIN;Lo;0;R;;;;;N;;;;; 1E864;MENDE KIKAKUI SYLLABLE M038 NAN;Lo;0;R;;;;;N;;;;; 1E865;MENDE KIKAKUI SYLLABLE M039 NUN;Lo;0;R;;;;;N;;;;; 1E866;MENDE KIKAKUI SYLLABLE M117 NEN;Lo;0;R;;;;;N;;;;; 1E867;MENDE KIKAKUI SYLLABLE M169 NON;Lo;0;R;;;;;N;;;;; 1E868;MENDE KIKAKUI SYLLABLE M176 HI;Lo;0;R;;;;;N;;;;; 1E869;MENDE KIKAKUI SYLLABLE M041 HA;Lo;0;R;;;;;N;;;;; 1E86A;MENDE KIKAKUI SYLLABLE M186 HU;Lo;0;R;;;;;N;;;;; 1E86B;MENDE KIKAKUI SYLLABLE M040 HEE;Lo;0;R;;;;;N;;;;; 1E86C;MENDE KIKAKUI SYLLABLE M096 HE;Lo;0;R;;;;;N;;;;; 1E86D;MENDE KIKAKUI SYLLABLE M042 HOO;Lo;0;R;;;;;N;;;;; 1E86E;MENDE KIKAKUI SYLLABLE M140 HO;Lo;0;R;;;;;N;;;;; 1E86F;MENDE KIKAKUI SYLLABLE M083 HEEI;Lo;0;R;;;;;N;;;;; 1E870;MENDE KIKAKUI SYLLABLE M128 HOOU;Lo;0;R;;;;;N;;;;; 1E871;MENDE KIKAKUI SYLLABLE M053 HIN;Lo;0;R;;;;;N;;;;; 1E872;MENDE KIKAKUI SYLLABLE M130 HAN;Lo;0;R;;;;;N;;;;; 1E873;MENDE KIKAKUI SYLLABLE M087 HUN;Lo;0;R;;;;;N;;;;; 1E874;MENDE KIKAKUI SYLLABLE M052 HEN;Lo;0;R;;;;;N;;;;; 1E875;MENDE KIKAKUI SYLLABLE M193 HON;Lo;0;R;;;;;N;;;;; 1E876;MENDE KIKAKUI SYLLABLE M046 HUAN;Lo;0;R;;;;;N;;;;; 1E877;MENDE KIKAKUI SYLLABLE M090 NGGI;Lo;0;R;;;;;N;;;;; 1E878;MENDE KIKAKUI SYLLABLE M043 NGGA;Lo;0;R;;;;;N;;;;; 1E879;MENDE KIKAKUI SYLLABLE M082 NGGU;Lo;0;R;;;;;N;;;;; 1E87A;MENDE KIKAKUI SYLLABLE M115 NGGEE;Lo;0;R;;;;;N;;;;; 1E87B;MENDE KIKAKUI SYLLABLE M146 NGGE;Lo;0;R;;;;;N;;;;; 1E87C;MENDE KIKAKUI SYLLABLE M156 NGGOO;Lo;0;R;;;;;N;;;;; 1E87D;MENDE KIKAKUI SYLLABLE M120 NGGO;Lo;0;R;;;;;N;;;;; 1E87E;MENDE KIKAKUI SYLLABLE M159 NGGAA;Lo;0;R;;;;;N;;;;; 1E87F;MENDE KIKAKUI SYLLABLE M127 NGGUA;Lo;0;R;;;;;N;;;;; 1E880;MENDE KIKAKUI SYLLABLE M086 LONG NGGE;Lo;0;R;;;;;N;;;;; 1E881;MENDE KIKAKUI SYLLABLE M106 LONG NGGOO;Lo;0;R;;;;;N;;;;; 1E882;MENDE KIKAKUI SYLLABLE M183 LONG NGGO;Lo;0;R;;;;;N;;;;; 1E883;MENDE KIKAKUI SYLLABLE M155 GI;Lo;0;R;;;;;N;;;;; 1E884;MENDE KIKAKUI SYLLABLE M111 GA;Lo;0;R;;;;;N;;;;; 1E885;MENDE KIKAKUI SYLLABLE M168 GU;Lo;0;R;;;;;N;;;;; 1E886;MENDE KIKAKUI SYLLABLE M190 GEE;Lo;0;R;;;;;N;;;;; 1E887;MENDE KIKAKUI SYLLABLE M166 GUEI;Lo;0;R;;;;;N;;;;; 1E888;MENDE KIKAKUI SYLLABLE M167 GUAN;Lo;0;R;;;;;N;;;;; 1E889;MENDE KIKAKUI SYLLABLE M184 NGEN;Lo;0;R;;;;;N;;;;; 1E88A;MENDE KIKAKUI SYLLABLE M057 NGON;Lo;0;R;;;;;N;;;;; 1E88B;MENDE KIKAKUI SYLLABLE M177 NGUAN;Lo;0;R;;;;;N;;;;; 1E88C;MENDE KIKAKUI SYLLABLE M068 PI;Lo;0;R;;;;;N;;;;; 1E88D;MENDE KIKAKUI SYLLABLE M099 PA;Lo;0;R;;;;;N;;;;; 1E88E;MENDE KIKAKUI SYLLABLE M050 PU;Lo;0;R;;;;;N;;;;; 1E88F;MENDE KIKAKUI SYLLABLE M081 PEE;Lo;0;R;;;;;N;;;;; 1E890;MENDE KIKAKUI SYLLABLE M051 PE;Lo;0;R;;;;;N;;;;; 1E891;MENDE KIKAKUI SYLLABLE M102 POO;Lo;0;R;;;;;N;;;;; 1E892;MENDE KIKAKUI SYLLABLE M066 PO;Lo;0;R;;;;;N;;;;; 1E893;MENDE KIKAKUI SYLLABLE M145 MBI;Lo;0;R;;;;;N;;;;; 1E894;MENDE KIKAKUI SYLLABLE M062 MBA;Lo;0;R;;;;;N;;;;; 1E895;MENDE KIKAKUI SYLLABLE M122 MBU;Lo;0;R;;;;;N;;;;; 1E896;MENDE KIKAKUI SYLLABLE M047 MBEE;Lo;0;R;;;;;N;;;;; 1E897;MENDE KIKAKUI SYLLABLE M188 MBEE;Lo;0;R;;;;;N;;;;; 1E898;MENDE KIKAKUI SYLLABLE M072 MBE;Lo;0;R;;;;;N;;;;; 1E899;MENDE KIKAKUI SYLLABLE M172 MBOO;Lo;0;R;;;;;N;;;;; 1E89A;MENDE KIKAKUI SYLLABLE M174 MBO;Lo;0;R;;;;;N;;;;; 1E89B;MENDE KIKAKUI SYLLABLE M187 MBUU;Lo;0;R;;;;;N;;;;; 1E89C;MENDE KIKAKUI SYLLABLE M161 LONG MBE;Lo;0;R;;;;;N;;;;; 1E89D;MENDE KIKAKUI SYLLABLE M105 LONG MBOO;Lo;0;R;;;;;N;;;;; 1E89E;MENDE KIKAKUI SYLLABLE M142 LONG MBO;Lo;0;R;;;;;N;;;;; 1E89F;MENDE KIKAKUI SYLLABLE M132 KPI;Lo;0;R;;;;;N;;;;; 1E8A0;MENDE KIKAKUI SYLLABLE M092 KPA;Lo;0;R;;;;;N;;;;; 1E8A1;MENDE KIKAKUI SYLLABLE M074 KPU;Lo;0;R;;;;;N;;;;; 1E8A2;MENDE KIKAKUI SYLLABLE M044 KPEE;Lo;0;R;;;;;N;;;;; 1E8A3;MENDE KIKAKUI SYLLABLE M108 KPE;Lo;0;R;;;;;N;;;;; 1E8A4;MENDE KIKAKUI SYLLABLE M112 KPOO;Lo;0;R;;;;;N;;;;; 1E8A5;MENDE KIKAKUI SYLLABLE M158 KPO;Lo;0;R;;;;;N;;;;; 1E8A6;MENDE KIKAKUI SYLLABLE M124 GBI;Lo;0;R;;;;;N;;;;; 1E8A7;MENDE KIKAKUI SYLLABLE M056 GBA;Lo;0;R;;;;;N;;;;; 1E8A8;MENDE KIKAKUI SYLLABLE M148 GBU;Lo;0;R;;;;;N;;;;; 1E8A9;MENDE KIKAKUI SYLLABLE M093 GBEE;Lo;0;R;;;;;N;;;;; 1E8AA;MENDE KIKAKUI SYLLABLE M107 GBE;Lo;0;R;;;;;N;;;;; 1E8AB;MENDE KIKAKUI SYLLABLE M071 GBOO;Lo;0;R;;;;;N;;;;; 1E8AC;MENDE KIKAKUI SYLLABLE M070 GBO;Lo;0;R;;;;;N;;;;; 1E8AD;MENDE KIKAKUI SYLLABLE M171 RA;Lo;0;R;;;;;N;;;;; 1E8AE;MENDE KIKAKUI SYLLABLE M123 NDI;Lo;0;R;;;;;N;;;;; 1E8AF;MENDE KIKAKUI SYLLABLE M129 NDA;Lo;0;R;;;;;N;;;;; 1E8B0;MENDE KIKAKUI SYLLABLE M125 NDU;Lo;0;R;;;;;N;;;;; 1E8B1;MENDE KIKAKUI SYLLABLE M191 NDEE;Lo;0;R;;;;;N;;;;; 1E8B2;MENDE KIKAKUI SYLLABLE M119 NDE;Lo;0;R;;;;;N;;;;; 1E8B3;MENDE KIKAKUI SYLLABLE M067 NDOO;Lo;0;R;;;;;N;;;;; 1E8B4;MENDE KIKAKUI SYLLABLE M064 NDO;Lo;0;R;;;;;N;;;;; 1E8B5;MENDE KIKAKUI SYLLABLE M152 NJA;Lo;0;R;;;;;N;;;;; 1E8B6;MENDE KIKAKUI SYLLABLE M192 NJU;Lo;0;R;;;;;N;;;;; 1E8B7;MENDE KIKAKUI SYLLABLE M149 NJEE;Lo;0;R;;;;;N;;;;; 1E8B8;MENDE KIKAKUI SYLLABLE M134 NJOO;Lo;0;R;;;;;N;;;;; 1E8B9;MENDE KIKAKUI SYLLABLE M182 VI;Lo;0;R;;;;;N;;;;; 1E8BA;MENDE KIKAKUI SYLLABLE M185 VA;Lo;0;R;;;;;N;;;;; 1E8BB;MENDE KIKAKUI SYLLABLE M151 VU;Lo;0;R;;;;;N;;;;; 1E8BC;MENDE KIKAKUI SYLLABLE M173 VEE;Lo;0;R;;;;;N;;;;; 1E8BD;MENDE KIKAKUI SYLLABLE M085 VE;Lo;0;R;;;;;N;;;;; 1E8BE;MENDE KIKAKUI SYLLABLE M144 VOO;Lo;0;R;;;;;N;;;;; 1E8BF;MENDE KIKAKUI SYLLABLE M077 VO;Lo;0;R;;;;;N;;;;; 1E8C0;MENDE KIKAKUI SYLLABLE M164 NYIN;Lo;0;R;;;;;N;;;;; 1E8C1;MENDE KIKAKUI SYLLABLE M058 NYAN;Lo;0;R;;;;;N;;;;; 1E8C2;MENDE KIKAKUI SYLLABLE M170 NYUN;Lo;0;R;;;;;N;;;;; 1E8C3;MENDE KIKAKUI SYLLABLE M098 NYEN;Lo;0;R;;;;;N;;;;; 1E8C4;MENDE KIKAKUI SYLLABLE M060 NYON;Lo;0;R;;;;;N;;;;; 1E8C7;MENDE KIKAKUI DIGIT ONE;No;0;R;;;;1;N;;;;; 1E8C8;MENDE KIKAKUI DIGIT TWO;No;0;R;;;;2;N;;;;; 1E8C9;MENDE KIKAKUI DIGIT THREE;No;0;R;;;;3;N;;;;; 1E8CA;MENDE KIKAKUI DIGIT FOUR;No;0;R;;;;4;N;;;;; 1E8CB;MENDE KIKAKUI DIGIT FIVE;No;0;R;;;;5;N;;;;; 1E8CC;MENDE KIKAKUI DIGIT SIX;No;0;R;;;;6;N;;;;; 1E8CD;MENDE KIKAKUI DIGIT SEVEN;No;0;R;;;;7;N;;;;; 1E8CE;MENDE KIKAKUI DIGIT EIGHT;No;0;R;;;;8;N;;;;; 1E8CF;MENDE KIKAKUI DIGIT NINE;No;0;R;;;;9;N;;;;; 1E8D0;MENDE KIKAKUI COMBINING NUMBER TEENS;Mn;220;NSM;;;;;N;;;;; 1E8D1;MENDE KIKAKUI COMBINING NUMBER TENS;Mn;220;NSM;;;;;N;;;;; 1E8D2;MENDE KIKAKUI COMBINING NUMBER HUNDREDS;Mn;220;NSM;;;;;N;;;;; 1E8D3;MENDE KIKAKUI COMBINING NUMBER THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;; 1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;; 1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922; 1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923; 1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924; 1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925; 1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926; 1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927; 1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928; 1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929; 1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A; 1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B; 1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C; 1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D; 1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E; 1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F; 1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930; 1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931; 1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932; 1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933; 1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934; 1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935; 1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936; 1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937; 1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938; 1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939; 1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A; 1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B; 1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C; 1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D; 1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E; 1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F; 1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940; 1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941; 1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942; 1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943; 1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900 1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901 1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902 1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903 1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904 1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905 1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906 1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907 1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908 1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909 1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A 1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B 1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C 1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D 1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E 1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F 1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910 1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911 1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912 1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913 1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914 1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915 1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916 1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917 1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918 1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919 1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A 1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B 1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C 1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D 1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E 1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F 1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920 1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921 1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;; 1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;; 1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;; 1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;; 1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; 1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; 1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; 1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; 1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; 1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; 1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; 1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; 1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; 1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; 1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;; 1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;; 1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;; 1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;; 1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL;<font> 062F;;;;N;;;;; 1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL;<font> 0648;;;;N;;;;; 1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;; 1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL;<font> 0637;;;;N;;;;; 1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;; 1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;; 1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;; 1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;; 1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL;<font> 0631;;;;N;;;;; 1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;; 1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;; 1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL;<font> 0630;;;;N;;;;; 1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL;<font> 0638;;;;N;;;;; 1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;; 1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;; 1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;; 1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;; 1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;; 1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL;<font> 0647;;;;N;;;;; 1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;; 1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;; 1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;; 1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;; 1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;; 1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;; 1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL;<font> 0644;;;;N;;;;; 1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;; 1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;; 1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL;<font> 0628;;;;N;;;;; 1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL;<font> 0647;;;;N;;;;; 1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL;<font> 0637;;;;N;;;;; 1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL;<font> 0643;;;;N;;;;; 1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;; 1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL;<font> 0641;;;;N;;;;; 1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL;<font> 062A;;;;N;;;;; 1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL;<font> 062B;;;;N;;;;; 1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;; 1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;; 1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;; 1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL;<font> 0627;;;;N;;;;; 1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL;<font> 0628;;;;N;;;;; 1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL;<font> 062F;;;;N;;;;; 1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL;<font> 0647;;;;N;;;;; 1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL;<font> 0648;;;;N;;;;; 1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;; 1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL;<font> 0637;;;;N;;;;; 1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL;<font> 0644;;;;N;;;;; 1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;; 1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL;<font> 0641;;;;N;;;;; 1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL;<font> 0631;;;;N;;;;; 1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL;<font> 062A;;;;N;;;;; 1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL;<font> 062B;;;;N;;;;; 1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL;<font> 0630;;;;N;;;;; 1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;; 1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL;<font> 0628;;;;N;;;;; 1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL;<font> 062C;;;;N;;;;; 1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL;<font> 062F;;;;N;;;;; 1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL;<font> 0648;;;;N;;;;; 1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;; 1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL;<font> 062D;;;;N;;;;; 1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL;<font> 0637;;;;N;;;;; 1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL;<font> 064A;;;;N;;;;; 1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL;<font> 0644;;;;N;;;;; 1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL;<font> 0645;;;;N;;;;; 1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL;<font> 0646;;;;N;;;;; 1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL;<font> 0633;;;;N;;;;; 1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL;<font> 0639;;;;N;;;;; 1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL;<font> 0641;;;;N;;;;; 1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL;<font> 0635;;;;N;;;;; 1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL;<font> 0642;;;;N;;;;; 1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL;<font> 0631;;;;N;;;;; 1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;; 1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL;<font> 062A;;;;N;;;;; 1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL;<font> 062B;;;;N;;;;; 1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL;<font> 062E;;;;N;;;;; 1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL;<font> 0630;;;;N;;;;; 1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL;<font> 0636;;;;N;;;;; 1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL;<font> 0638;;;;N;;;;; 1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;; 1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;; 1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;; 1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; 1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; 1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; 1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; 1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; 1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; 1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; 1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; 1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; 1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; 1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; 1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; 1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; 1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; 1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; 1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; 1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; 1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; 1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; 1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; 1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; 1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; 1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; 1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; 1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; 1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; 1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; 1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; 1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; 1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; 1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; 1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; 1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; 1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; 1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; 1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; 1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; 1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; 1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; 1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; 1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; 1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; 1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; 1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; 1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; 1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; 1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; 1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; 1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; 1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; 1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; 1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; 1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; 1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; 1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; 1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; 1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; 1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; 1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; 1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; 1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; 1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; 1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; 1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; 1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; 1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; 1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; 1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; 1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; 1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; 1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; 1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; 1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; 1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; 1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; 1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; 1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; 1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; 1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; 1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; 1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; 1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; 1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; 1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; 1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; 1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; 1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; 1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; 1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; 1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; 1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; 1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; 1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; 1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; 1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; 1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; 1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; 1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; 1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; 1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; 1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; 1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; 1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; 1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; 1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; 1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; 1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; 1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; 1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; 1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; 1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; 1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; 1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; 1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; 1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; 1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; 1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; 1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; 1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; 1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; 1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; 1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; 1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; 1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;; 1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;; 1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;; 1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;; 1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;; 1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;; 1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;; 1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;; 1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;; 1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;; 1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;; 1F0BF;PLAYING CARD RED JOKER;So;0;ON;;;;;N;;;;; 1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;; 1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;; 1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;; 1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;; 1F0E0;PLAYING CARD FOOL;So;0;ON;;;;;N;;;;; 1F0E1;PLAYING CARD TRUMP-1;So;0;ON;;;;;N;;;;; 1F0E2;PLAYING CARD TRUMP-2;So;0;ON;;;;;N;;;;; 1F0E3;PLAYING CARD TRUMP-3;So;0;ON;;;;;N;;;;; 1F0E4;PLAYING CARD TRUMP-4;So;0;ON;;;;;N;;;;; 1F0E5;PLAYING CARD TRUMP-5;So;0;ON;;;;;N;;;;; 1F0E6;PLAYING CARD TRUMP-6;So;0;ON;;;;;N;;;;; 1F0E7;PLAYING CARD TRUMP-7;So;0;ON;;;;;N;;;;; 1F0E8;PLAYING CARD TRUMP-8;So;0;ON;;;;;N;;;;; 1F0E9;PLAYING CARD TRUMP-9;So;0;ON;;;;;N;;;;; 1F0EA;PLAYING CARD TRUMP-10;So;0;ON;;;;;N;;;;; 1F0EB;PLAYING CARD TRUMP-11;So;0;ON;;;;;N;;;;; 1F0EC;PLAYING CARD TRUMP-12;So;0;ON;;;;;N;;;;; 1F0ED;PLAYING CARD TRUMP-13;So;0;ON;;;;;N;;;;; 1F0EE;PLAYING CARD TRUMP-14;So;0;ON;;;;;N;;;;; 1F0EF;PLAYING CARD TRUMP-15;So;0;ON;;;;;N;;;;; 1F0F0;PLAYING CARD TRUMP-16;So;0;ON;;;;;N;;;;; 1F0F1;PLAYING CARD TRUMP-17;So;0;ON;;;;;N;;;;; 1F0F2;PLAYING CARD TRUMP-18;So;0;ON;;;;;N;;;;; 1F0F3;PLAYING CARD TRUMP-19;So;0;ON;;;;;N;;;;; 1F0F4;PLAYING CARD TRUMP-20;So;0;ON;;;;;N;;;;; 1F0F5;PLAYING CARD TRUMP-21;So;0;ON;;;;;N;;;;; 1F100;DIGIT ZERO FULL STOP;No;0;EN;<compat> 0030 002E;;0;0;N;;;;; 1F101;DIGIT ZERO COMMA;No;0;EN;<compat> 0030 002C;;0;0;N;;;;; 1F102;DIGIT ONE COMMA;No;0;EN;<compat> 0031 002C;;1;1;N;;;;; 1F103;DIGIT TWO COMMA;No;0;EN;<compat> 0032 002C;;2;2;N;;;;; 1F104;DIGIT THREE COMMA;No;0;EN;<compat> 0033 002C;;3;3;N;;;;; 1F105;DIGIT FOUR COMMA;No;0;EN;<compat> 0034 002C;;4;4;N;;;;; 1F106;DIGIT FIVE COMMA;No;0;EN;<compat> 0035 002C;;5;5;N;;;;; 1F107;DIGIT SIX COMMA;No;0;EN;<compat> 0036 002C;;6;6;N;;;;; 1F108;DIGIT SEVEN COMMA;No;0;EN;<compat> 0037 002C;;7;7;N;;;;; 1F109;DIGIT EIGHT COMMA;No;0;EN;<compat> 0038 002C;;8;8;N;;;;; 1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;; 1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;; 1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;; 1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;; 1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;; 1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L;<compat> 0028 0044 0029;;;;N;;;;; 1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L;<compat> 0028 0045 0029;;;;N;;;;; 1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L;<compat> 0028 0046 0029;;;;N;;;;; 1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L;<compat> 0028 0047 0029;;;;N;;;;; 1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L;<compat> 0028 0048 0029;;;;N;;;;; 1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L;<compat> 0028 0049 0029;;;;N;;;;; 1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L;<compat> 0028 004A 0029;;;;N;;;;; 1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L;<compat> 0028 004B 0029;;;;N;;;;; 1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L;<compat> 0028 004C 0029;;;;N;;;;; 1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L;<compat> 0028 004D 0029;;;;N;;;;; 1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L;<compat> 0028 004E 0029;;;;N;;;;; 1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L;<compat> 0028 004F 0029;;;;N;;;;; 1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L;<compat> 0028 0050 0029;;;;N;;;;; 1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L;<compat> 0028 0051 0029;;;;N;;;;; 1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L;<compat> 0028 0052 0029;;;;N;;;;; 1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L;<compat> 0028 0053 0029;;;;N;;;;; 1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L;<compat> 0028 0054 0029;;;;N;;;;; 1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L;<compat> 0028 0055 0029;;;;N;;;;; 1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L;<compat> 0028 0056 0029;;;;N;;;;; 1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L;<compat> 0028 0057 0029;;;;N;;;;; 1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L;<compat> 0028 0058 0029;;;;N;;;;; 1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L;<compat> 0028 0059 0029;;;;N;;;;; 1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L;<compat> 0028 005A 0029;;;;N;;;;; 1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L;<compat> 3014 0053 3015;;;;N;;;;; 1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;; 1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;; 1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;; 1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;; 1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;; 1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;; 1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;; 1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L;<square> 0044;;;;N;;;;; 1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L;<square> 0045;;;;N;;;;; 1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L;<square> 0046;;;;N;;;;; 1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L;<square> 0047;;;;N;;;;; 1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L;<square> 0048;;;;N;;;;; 1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L;<square> 0049;;;;N;;;;; 1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L;<square> 004A;;;;N;;;;; 1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L;<square> 004B;;;;N;;;;; 1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L;<square> 004C;;;;N;;;;; 1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L;<square> 004D;;;;N;;;;; 1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L;<square> 004E;;;;N;;;;; 1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L;<square> 004F;;;;N;;;;; 1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L;<square> 0050;;;;N;;;;; 1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L;<square> 0051;;;;N;;;;; 1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L;<square> 0052;;;;N;;;;; 1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L;<square> 0053;;;;N;;;;; 1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L;<square> 0054;;;;N;;;;; 1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L;<square> 0055;;;;N;;;;; 1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L;<square> 0056;;;;N;;;;; 1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L;<square> 0057;;;;N;;;;; 1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L;<square> 0058;;;;N;;;;; 1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L;<square> 0059;;;;N;;;;; 1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L;<square> 005A;;;;N;;;;; 1F14A;SQUARED HV;So;0;L;<square> 0048 0056;;;;N;;;;; 1F14B;SQUARED MV;So;0;L;<square> 004D 0056;;;;N;;;;; 1F14C;SQUARED SD;So;0;L;<square> 0053 0044;;;;N;;;;; 1F14D;SQUARED SS;So;0;L;<square> 0053 0053;;;;N;;;;; 1F14E;SQUARED PPV;So;0;L;<square> 0050 0050 0056;;;;N;;;;; 1F14F;SQUARED WC;So;0;L;<square> 0057 0043;;;;N;;;;; 1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;; 1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;; 1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; 1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; 1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; 1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; 1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; 1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; 1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; 1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; 1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; 1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; 1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; 1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; 1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; 1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; 1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; 1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; 1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; 1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; 1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; 1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; 1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; 1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; 1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; 1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; 1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; 1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; 1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;; 1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;; 1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;; 1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;; 1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;; 1F190;SQUARE DJ;So;0;L;<square> 0044 004A;;;;N;;;;; 1F191;SQUARED CL;So;0;L;;;;;N;;;;; 1F192;SQUARED COOL;So;0;L;;;;;N;;;;; 1F193;SQUARED FREE;So;0;L;;;;;N;;;;; 1F194;SQUARED ID;So;0;L;;;;;N;;;;; 1F195;SQUARED NEW;So;0;L;;;;;N;;;;; 1F196;SQUARED NG;So;0;L;;;;;N;;;;; 1F197;SQUARED OK;So;0;L;;;;;N;;;;; 1F198;SQUARED SOS;So;0;L;;;;;N;;;;; 1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;; 1F19A;SQUARED VS;So;0;L;;;;;N;;;;; 1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;; 1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;; 1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;; 1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;; 1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;; 1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;; 1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;; 1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;; 1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;; 1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;; 1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;; 1F1A6;SQUARED HC;So;0;L;;;;;N;;;;; 1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;; 1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;; 1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;; 1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;; 1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;; 1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;; 1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;; 1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;; 1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;; 1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;; 1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;; 1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;; 1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;; 1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;; 1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;; 1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;; 1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;; 1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;; 1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;; 1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;; 1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;; 1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;; 1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;; 1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;; 1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;; 1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;; 1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;; 1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;; 1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;; 1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;; 1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;; 1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;; 1F200;SQUARE HIRAGANA HOKA;So;0;L;<square> 307B 304B;;;;N;;;;; 1F201;SQUARED KATAKANA KOKO;So;0;L;<square> 30B3 30B3;;;;N;;;;; 1F202;SQUARED KATAKANA SA;So;0;L;<square> 30B5;;;;N;;;;; 1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L;<square> 624B;;;;N;;;;; 1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L;<square> 5B57;;;;N;;;;; 1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L;<square> 53CC;;;;N;;;;; 1F213;SQUARED KATAKANA DE;So;0;L;<square> 30C7;;;;N;;;;; 1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<square> 4E8C;;;;N;;;;; 1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L;<square> 591A;;;;N;;;;; 1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L;<square> 89E3;;;;N;;;;; 1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L;<square> 5929;;;;N;;;;; 1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L;<square> 4EA4;;;;N;;;;; 1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L;<square> 6620;;;;N;;;;; 1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L;<square> 7121;;;;N;;;;; 1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L;<square> 6599;;;;N;;;;; 1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L;<square> 524D;;;;N;;;;; 1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L;<square> 5F8C;;;;N;;;;; 1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L;<square> 518D;;;;N;;;;; 1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L;<square> 65B0;;;;N;;;;; 1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L;<square> 521D;;;;N;;;;; 1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L;<square> 7D42;;;;N;;;;; 1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L;<square> 751F;;;;N;;;;; 1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L;<square> 8CA9;;;;N;;;;; 1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L;<square> 58F0;;;;N;;;;; 1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L;<square> 5439;;;;N;;;;; 1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L;<square> 6F14;;;;N;;;;; 1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L;<square> 6295;;;;N;;;;; 1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L;<square> 6355;;;;N;;;;; 1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L;<square> 4E00;;;;N;;;;; 1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<square> 4E09;;;;N;;;;; 1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L;<square> 904A;;;;N;;;;; 1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L;<square> 5DE6;;;;N;;;;; 1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L;<square> 4E2D;;;;N;;;;; 1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L;<square> 53F3;;;;N;;;;; 1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L;<square> 6307;;;;N;;;;; 1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L;<square> 8D70;;;;N;;;;; 1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<square> 6253;;;;N;;;;; 1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L;<square> 7981;;;;N;;;;; 1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L;<square> 7A7A;;;;N;;;;; 1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L;<square> 5408;;;;N;;;;; 1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L;<square> 6E80;;;;N;;;;; 1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L;<square> 6709;;;;N;;;;; 1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L;<square> 6708;;;;N;;;;; 1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L;<square> 7533;;;;N;;;;; 1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L;<square> 5272;;;;N;;;;; 1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L;<square> 55B6;;;;N;;;;; 1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L;<square> 914D;;;;N;;;;; 1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L;<compat> 3014 672C 3015;;;;N;;;;; 1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<compat> 3014 4E09 3015;;;;N;;;;; 1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<compat> 3014 4E8C 3015;;;;N;;;;; 1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L;<compat> 3014 5B89 3015;;;;N;;;;; 1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L;<compat> 3014 70B9 3015;;;;N;;;;; 1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<compat> 3014 6253 3015;;;;N;;;;; 1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L;<compat> 3014 76D7 3015;;;;N;;;;; 1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L;<compat> 3014 52DD 3015;;;;N;;;;; 1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L;<compat> 3014 6557 3015;;;;N;;;;; 1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L;<circle> 5F97;;;;N;;;;; 1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L;<circle> 53EF;;;;N;;;;; 1F300;CYCLONE;So;0;ON;;;;;N;;;;; 1F301;FOGGY;So;0;ON;;;;;N;;;;; 1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;; 1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;; 1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;; 1F305;SUNRISE;So;0;ON;;;;;N;;;;; 1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;; 1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;; 1F308;RAINBOW;So;0;ON;;;;;N;;;;; 1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;; 1F30A;WATER WAVE;So;0;ON;;;;;N;;;;; 1F30B;VOLCANO;So;0;ON;;;;;N;;;;; 1F30C;MILKY WAY;So;0;ON;;;;;N;;;;; 1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;; 1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;; 1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;; 1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;; 1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; 1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;; 1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;; 1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;; 1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;; 1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;; 1F321;THERMOMETER;So;0;ON;;;;;N;;;;; 1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;; 1F323;WHITE SUN;So;0;ON;;;;;N;;;;; 1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;; 1F325;WHITE SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; 1F326;WHITE SUN BEHIND CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F327;CLOUD WITH RAIN;So;0;ON;;;;;N;;;;; 1F328;CLOUD WITH SNOW;So;0;ON;;;;;N;;;;; 1F329;CLOUD WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;; 1F32B;FOG;So;0;ON;;;;;N;;;;; 1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;; 1F32D;HOT DOG;So;0;ON;;;;;N;;;;; 1F32E;TACO;So;0;ON;;;;;N;;;;; 1F32F;BURRITO;So;0;ON;;;;;N;;;;; 1F330;CHESTNUT;So;0;ON;;;;;N;;;;; 1F331;SEEDLING;So;0;ON;;;;;N;;;;; 1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;; 1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;; 1F334;PALM TREE;So;0;ON;;;;;N;;;;; 1F335;CACTUS;So;0;ON;;;;;N;;;;; 1F336;HOT PEPPER;So;0;ON;;;;;N;;;;; 1F337;TULIP;So;0;ON;;;;;N;;;;; 1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;; 1F339;ROSE;So;0;ON;;;;;N;;;;; 1F33A;HIBISCUS;So;0;ON;;;;;N;;;;; 1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;; 1F33C;BLOSSOM;So;0;ON;;;;;N;;;;; 1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;; 1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;; 1F33F;HERB;So;0;ON;;;;;N;;;;; 1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;; 1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;; 1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;; 1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;; 1F344;MUSHROOM;So;0;ON;;;;;N;;;;; 1F345;TOMATO;So;0;ON;;;;;N;;;;; 1F346;AUBERGINE;So;0;ON;;;;;N;;;;; 1F347;GRAPES;So;0;ON;;;;;N;;;;; 1F348;MELON;So;0;ON;;;;;N;;;;; 1F349;WATERMELON;So;0;ON;;;;;N;;;;; 1F34A;TANGERINE;So;0;ON;;;;;N;;;;; 1F34B;LEMON;So;0;ON;;;;;N;;;;; 1F34C;BANANA;So;0;ON;;;;;N;;;;; 1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;; 1F34E;RED APPLE;So;0;ON;;;;;N;;;;; 1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;; 1F350;PEAR;So;0;ON;;;;;N;;;;; 1F351;PEACH;So;0;ON;;;;;N;;;;; 1F352;CHERRIES;So;0;ON;;;;;N;;;;; 1F353;STRAWBERRY;So;0;ON;;;;;N;;;;; 1F354;HAMBURGER;So;0;ON;;;;;N;;;;; 1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;; 1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;; 1F357;POULTRY LEG;So;0;ON;;;;;N;;;;; 1F358;RICE CRACKER;So;0;ON;;;;;N;;;;; 1F359;RICE BALL;So;0;ON;;;;;N;;;;; 1F35A;COOKED RICE;So;0;ON;;;;;N;;;;; 1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;; 1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;; 1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;; 1F35E;BREAD;So;0;ON;;;;;N;;;;; 1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;; 1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;; 1F361;DANGO;So;0;ON;;;;;N;;;;; 1F362;ODEN;So;0;ON;;;;;N;;;;; 1F363;SUSHI;So;0;ON;;;;;N;;;;; 1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;; 1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;; 1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;; 1F367;SHAVED ICE;So;0;ON;;;;;N;;;;; 1F368;ICE CREAM;So;0;ON;;;;;N;;;;; 1F369;DOUGHNUT;So;0;ON;;;;;N;;;;; 1F36A;COOKIE;So;0;ON;;;;;N;;;;; 1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;; 1F36C;CANDY;So;0;ON;;;;;N;;;;; 1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;; 1F36E;CUSTARD;So;0;ON;;;;;N;;;;; 1F36F;HONEY POT;So;0;ON;;;;;N;;;;; 1F370;SHORTCAKE;So;0;ON;;;;;N;;;;; 1F371;BENTO BOX;So;0;ON;;;;;N;;;;; 1F372;POT OF FOOD;So;0;ON;;;;;N;;;;; 1F373;COOKING;So;0;ON;;;;;N;;;;; 1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;; 1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;; 1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;; 1F377;WINE GLASS;So;0;ON;;;;;N;;;;; 1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;; 1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;; 1F37A;BEER MUG;So;0;ON;;;;;N;;;;; 1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;; 1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;; 1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;; 1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;; 1F37F;POPCORN;So;0;ON;;;;;N;;;;; 1F380;RIBBON;So;0;ON;;;;;N;;;;; 1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;; 1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;; 1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;; 1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;; 1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F386;FIREWORKS;So;0;ON;;;;;N;;;;; 1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;; 1F388;BALLOON;So;0;ON;;;;;N;;;;; 1F389;PARTY POPPER;So;0;ON;;;;;N;;;;; 1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;; 1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;; 1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;; 1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;; 1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;; 1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;; 1F390;WIND CHIME;So;0;ON;;;;;N;;;;; 1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;; 1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;; 1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;; 1F394;HEART WITH TIP ON THE LEFT;So;0;ON;;;;;N;;;;; 1F395;BOUQUET OF FLOWERS;So;0;ON;;;;;N;;;;; 1F396;MILITARY MEDAL;So;0;ON;;;;;N;;;;; 1F397;REMINDER RIBBON;So;0;ON;;;;;N;;;;; 1F398;MUSICAL KEYBOARD WITH JACKS;So;0;ON;;;;;N;;;;; 1F399;STUDIO MICROPHONE;So;0;ON;;;;;N;;;;; 1F39A;LEVEL SLIDER;So;0;ON;;;;;N;;;;; 1F39B;CONTROL KNOBS;So;0;ON;;;;;N;;;;; 1F39C;BEAMED ASCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39D;BEAMED DESCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F39E;FILM FRAMES;So;0;ON;;;;;N;;;;; 1F39F;ADMISSION TICKETS;So;0;ON;;;;;N;;;;; 1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;; 1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;; 1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;; 1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;; 1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;; 1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;; 1F3A6;CINEMA;So;0;ON;;;;;N;;;;; 1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;; 1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;; 1F3A9;TOP HAT;So;0;ON;;;;;N;;;;; 1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;; 1F3AB;TICKET;So;0;ON;;;;;N;;;;; 1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;; 1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;; 1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;; 1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;; 1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;; 1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;; 1F3B2;GAME DIE;So;0;ON;;;;;N;;;;; 1F3B3;BOWLING;So;0;ON;;;;;N;;;;; 1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;; 1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;; 1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;; 1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;; 1F3B8;GUITAR;So;0;ON;;;;;N;;;;; 1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;; 1F3BA;TRUMPET;So;0;ON;;;;;N;;;;; 1F3BB;VIOLIN;So;0;ON;;;;;N;;;;; 1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;; 1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;; 1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;; 1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;; 1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;; 1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;; 1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;; 1F3C3;RUNNER;So;0;ON;;;;;N;;;;; 1F3C4;SURFER;So;0;ON;;;;;N;;;;; 1F3C5;SPORTS MEDAL;So;0;ON;;;;;N;;;;; 1F3C6;TROPHY;So;0;ON;;;;;N;;;;; 1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;; 1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;; 1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;; 1F3CA;SWIMMER;So;0;ON;;;;;N;;;;; 1F3CB;WEIGHT LIFTER;So;0;ON;;;;;N;;;;; 1F3CC;GOLFER;So;0;ON;;;;;N;;;;; 1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;; 1F3CE;RACING CAR;So;0;ON;;;;;N;;;;; 1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;; 1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;; 1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;; 1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;; 1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;; 1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;; 1F3D5;CAMPING;So;0;ON;;;;;N;;;;; 1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;; 1F3D7;BUILDING CONSTRUCTION;So;0;ON;;;;;N;;;;; 1F3D8;HOUSE BUILDINGS;So;0;ON;;;;;N;;;;; 1F3D9;CITYSCAPE;So;0;ON;;;;;N;;;;; 1F3DA;DERELICT HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3DB;CLASSICAL BUILDING;So;0;ON;;;;;N;;;;; 1F3DC;DESERT;So;0;ON;;;;;N;;;;; 1F3DD;DESERT ISLAND;So;0;ON;;;;;N;;;;; 1F3DE;NATIONAL PARK;So;0;ON;;;;;N;;;;; 1F3DF;STADIUM;So;0;ON;;;;;N;;;;; 1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;; 1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;; 1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;; 1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;; 1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;; 1F3E6;BANK;So;0;ON;;;;;N;;;;; 1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;; 1F3E8;HOTEL;So;0;ON;;;;;N;;;;; 1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;; 1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;; 1F3EB;SCHOOL;So;0;ON;;;;;N;;;;; 1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;; 1F3ED;FACTORY;So;0;ON;;;;;N;;;;; 1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; 1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; 1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; 1F3F1;WHITE PENNANT;So;0;ON;;;;;N;;;;; 1F3F2;BLACK PENNANT;So;0;ON;;;;;N;;;;; 1F3F3;WAVING WHITE FLAG;So;0;ON;;;;;N;;;;; 1F3F4;WAVING BLACK FLAG;So;0;ON;;;;;N;;;;; 1F3F5;ROSETTE;So;0;ON;;;;;N;;;;; 1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;; 1F3F7;LABEL;So;0;ON;;;;;N;;;;; 1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;; 1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;; 1F3FA;AMPHORA;So;0;ON;;;;;N;;;;; 1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;; 1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;; 1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;; 1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;; 1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;; 1F400;RAT;So;0;ON;;;;;N;;;;; 1F401;MOUSE;So;0;ON;;;;;N;;;;; 1F402;OX;So;0;ON;;;;;N;;;;; 1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;; 1F404;COW;So;0;ON;;;;;N;;;;; 1F405;TIGER;So;0;ON;;;;;N;;;;; 1F406;LEOPARD;So;0;ON;;;;;N;;;;; 1F407;RABBIT;So;0;ON;;;;;N;;;;; 1F408;CAT;So;0;ON;;;;;N;;;;; 1F409;DRAGON;So;0;ON;;;;;N;;;;; 1F40A;CROCODILE;So;0;ON;;;;;N;;;;; 1F40B;WHALE;So;0;ON;;;;;N;;;;; 1F40C;SNAIL;So;0;ON;;;;;N;;;;; 1F40D;SNAKE;So;0;ON;;;;;N;;;;; 1F40E;HORSE;So;0;ON;;;;;N;;;;; 1F40F;RAM;So;0;ON;;;;;N;;;;; 1F410;GOAT;So;0;ON;;;;;N;;;;; 1F411;SHEEP;So;0;ON;;;;;N;;;;; 1F412;MONKEY;So;0;ON;;;;;N;;;;; 1F413;ROOSTER;So;0;ON;;;;;N;;;;; 1F414;CHICKEN;So;0;ON;;;;;N;;;;; 1F415;DOG;So;0;ON;;;;;N;;;;; 1F416;PIG;So;0;ON;;;;;N;;;;; 1F417;BOAR;So;0;ON;;;;;N;;;;; 1F418;ELEPHANT;So;0;ON;;;;;N;;;;; 1F419;OCTOPUS;So;0;ON;;;;;N;;;;; 1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;; 1F41B;BUG;So;0;ON;;;;;N;;;;; 1F41C;ANT;So;0;ON;;;;;N;;;;; 1F41D;HONEYBEE;So;0;ON;;;;;N;;;;; 1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;; 1F41F;FISH;So;0;ON;;;;;N;;;;; 1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;; 1F421;BLOWFISH;So;0;ON;;;;;N;;;;; 1F422;TURTLE;So;0;ON;;;;;N;;;;; 1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;; 1F424;BABY CHICK;So;0;ON;;;;;N;;;;; 1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;; 1F426;BIRD;So;0;ON;;;;;N;;;;; 1F427;PENGUIN;So;0;ON;;;;;N;;;;; 1F428;KOALA;So;0;ON;;;;;N;;;;; 1F429;POODLE;So;0;ON;;;;;N;;;;; 1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;; 1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;; 1F42C;DOLPHIN;So;0;ON;;;;;N;;;;; 1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;; 1F42E;COW FACE;So;0;ON;;;;;N;;;;; 1F42F;TIGER FACE;So;0;ON;;;;;N;;;;; 1F430;RABBIT FACE;So;0;ON;;;;;N;;;;; 1F431;CAT FACE;So;0;ON;;;;;N;;;;; 1F432;DRAGON FACE;So;0;ON;;;;;N;;;;; 1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;; 1F434;HORSE FACE;So;0;ON;;;;;N;;;;; 1F435;MONKEY FACE;So;0;ON;;;;;N;;;;; 1F436;DOG FACE;So;0;ON;;;;;N;;;;; 1F437;PIG FACE;So;0;ON;;;;;N;;;;; 1F438;FROG FACE;So;0;ON;;;;;N;;;;; 1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;; 1F43A;WOLF FACE;So;0;ON;;;;;N;;;;; 1F43B;BEAR FACE;So;0;ON;;;;;N;;;;; 1F43C;PANDA FACE;So;0;ON;;;;;N;;;;; 1F43D;PIG NOSE;So;0;ON;;;;;N;;;;; 1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;; 1F43F;CHIPMUNK;So;0;ON;;;;;N;;;;; 1F440;EYES;So;0;ON;;;;;N;;;;; 1F441;EYE;So;0;ON;;;;;N;;;;; 1F442;EAR;So;0;ON;;;;;N;;;;; 1F443;NOSE;So;0;ON;;;;;N;;;;; 1F444;MOUTH;So;0;ON;;;;;N;;;;; 1F445;TONGUE;So;0;ON;;;;;N;;;;; 1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;; 1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;; 1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;; 1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;; 1F451;CROWN;So;0;ON;;;;;N;;;;; 1F452;WOMANS HAT;So;0;ON;;;;;N;;;;; 1F453;EYEGLASSES;So;0;ON;;;;;N;;;;; 1F454;NECKTIE;So;0;ON;;;;;N;;;;; 1F455;T-SHIRT;So;0;ON;;;;;N;;;;; 1F456;JEANS;So;0;ON;;;;;N;;;;; 1F457;DRESS;So;0;ON;;;;;N;;;;; 1F458;KIMONO;So;0;ON;;;;;N;;;;; 1F459;BIKINI;So;0;ON;;;;;N;;;;; 1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;; 1F45B;PURSE;So;0;ON;;;;;N;;;;; 1F45C;HANDBAG;So;0;ON;;;;;N;;;;; 1F45D;POUCH;So;0;ON;;;;;N;;;;; 1F45E;MANS SHOE;So;0;ON;;;;;N;;;;; 1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;; 1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;; 1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;; 1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;; 1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;; 1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F466;BOY;So;0;ON;;;;;N;;;;; 1F467;GIRL;So;0;ON;;;;;N;;;;; 1F468;MAN;So;0;ON;;;;;N;;;;; 1F469;WOMAN;So;0;ON;;;;;N;;;;; 1F46A;FAMILY;So;0;ON;;;;;N;;;;; 1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;; 1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;; 1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;; 1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;; 1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;; 1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;; 1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;; 1F474;OLDER MAN;So;0;ON;;;;;N;;;;; 1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;; 1F476;BABY;So;0;ON;;;;;N;;;;; 1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;; 1F478;PRINCESS;So;0;ON;;;;;N;;;;; 1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;; 1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;; 1F47B;GHOST;So;0;ON;;;;;N;;;;; 1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;; 1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;; 1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;; 1F47F;IMP;So;0;ON;;;;;N;;;;; 1F480;SKULL;So;0;ON;;;;;N;;;;; 1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;; 1F482;GUARDSMAN;So;0;ON;;;;;N;;;;; 1F483;DANCER;So;0;ON;;;;;N;;;;; 1F484;LIPSTICK;So;0;ON;;;;;N;;;;; 1F485;NAIL POLISH;So;0;ON;;;;;N;;;;; 1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;; 1F487;HAIRCUT;So;0;ON;;;;;N;;;;; 1F488;BARBER POLE;So;0;ON;;;;;N;;;;; 1F489;SYRINGE;So;0;ON;;;;;N;;;;; 1F48A;PILL;So;0;ON;;;;;N;;;;; 1F48B;KISS MARK;So;0;ON;;;;;N;;;;; 1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;; 1F48D;RING;So;0;ON;;;;;N;;;;; 1F48E;GEM STONE;So;0;ON;;;;;N;;;;; 1F48F;KISS;So;0;ON;;;;;N;;;;; 1F490;BOUQUET;So;0;ON;;;;;N;;;;; 1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;; 1F492;WEDDING;So;0;ON;;;;;N;;;;; 1F493;BEATING HEART;So;0;ON;;;;;N;;;;; 1F494;BROKEN HEART;So;0;ON;;;;;N;;;;; 1F495;TWO HEARTS;So;0;ON;;;;;N;;;;; 1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;; 1F497;GROWING HEART;So;0;ON;;;;;N;;;;; 1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;; 1F499;BLUE HEART;So;0;ON;;;;;N;;;;; 1F49A;GREEN HEART;So;0;ON;;;;;N;;;;; 1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;; 1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;; 1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;; 1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;; 1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;; 1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;; 1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;; 1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;; 1F4A3;BOMB;So;0;ON;;;;;N;;;;; 1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;; 1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;; 1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;; 1F4A7;DROPLET;So;0;ON;;;;;N;;;;; 1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;; 1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;; 1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;; 1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;; 1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;; 1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;; 1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;; 1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;; 1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;; 1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;; 1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;; 1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;; 1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;; 1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;; 1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;; 1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;; 1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;; 1F4BA;SEAT;So;0;ON;;;;;N;;;;; 1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;; 1F4BD;MINIDISC;So;0;ON;;;;;N;;;;; 1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;; 1F4C0;DVD;So;0;ON;;;;;N;;;;; 1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;; 1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;; 1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;; 1F4C5;CALENDAR;So;0;ON;;;;;N;;;;; 1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;; 1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;; 1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;; 1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;; 1F4CA;BAR CHART;So;0;ON;;;;;N;;;;; 1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;; 1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;; 1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;; 1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;; 1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;; 1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;; 1F4D2;LEDGER;So;0;ON;;;;;N;;;;; 1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;; 1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;; 1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;; 1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;; 1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;; 1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;; 1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;; 1F4DA;BOOKS;So;0;ON;;;;;N;;;;; 1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;; 1F4DC;SCROLL;So;0;ON;;;;;N;;;;; 1F4DD;MEMO;So;0;ON;;;;;N;;;;; 1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F4DF;PAGER;So;0;ON;;;;;N;;;;; 1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;; 1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;; 1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;; 1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;; 1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;; 1F4E6;PACKAGE;So;0;ON;;;;;N;;;;; 1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;; 1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;; 1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; 1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; 1F4EE;POSTBOX;So;0;ON;;;;;N;;;;; 1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;; 1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;; 1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;; 1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;; 1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;; 1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;; 1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;; 1F4F7;CAMERA;So;0;ON;;;;;N;;;;; 1F4F8;CAMERA WITH FLASH;So;0;ON;;;;;N;;;;; 1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;; 1F4FA;TELEVISION;So;0;ON;;;;;N;;;;; 1F4FB;RADIO;So;0;ON;;;;;N;;;;; 1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;; 1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;; 1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;; 1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;; 1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;; 1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;; 1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; 1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F508;SPEAKER;So;0;ON;;;;;N;;;;; 1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F50B;BATTERY;So;0;ON;;;;;N;;;;; 1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;; 1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; 1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;; 1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;; 1F511;KEY;So;0;ON;;;;;N;;;;; 1F512;LOCK;So;0;ON;;;;;N;;;;; 1F513;OPEN LOCK;So;0;ON;;;;;N;;;;; 1F514;BELL;So;0;ON;;;;;N;;;;; 1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; 1F516;BOOKMARK;So;0;ON;;;;;N;;;;; 1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;; 1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;; 1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; 1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;; 1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;; 1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;; 1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;; 1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;; 1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;; 1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;; 1F525;FIRE;So;0;ON;;;;;N;;;;; 1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;; 1F527;WRENCH;So;0;ON;;;;;N;;;;; 1F528;HAMMER;So;0;ON;;;;;N;;;;; 1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;; 1F52A;HOCHO;So;0;ON;;;;;N;;;;; 1F52B;PISTOL;So;0;ON;;;;;N;;;;; 1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;; 1F52D;TELESCOPE;So;0;ON;;;;;N;;;;; 1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;; 1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;; 1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;; 1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;; 1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;; 1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;; 1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;; 1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;; 1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; 1F53E;LOWER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F53F;UPPER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;; 1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;; 1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F544;NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;; 1F545;SYMBOL FOR MARKS CHAPTER;So;0;ON;;;;;N;;;;; 1F546;WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 1F547;HEAVY LATIN CROSS;So;0;ON;;;;;N;;;;; 1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;; 1F549;OM SYMBOL;So;0;ON;;;;;N;;;;; 1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;; 1F54B;KAABA;So;0;ON;;;;;N;;;;; 1F54C;MOSQUE;So;0;ON;;;;;N;;;;; 1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;; 1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;; 1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;; 1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;; 1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;; 1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;; 1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;; 1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;; 1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;; 1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;; 1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;; 1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;; 1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;; 1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;; 1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;; 1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;; 1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;; 1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;; 1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;; 1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;; 1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;; 1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;; 1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;; 1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;; 1F568;RIGHT SPEAKER;So;0;ON;;;;;N;;;;; 1F569;RIGHT SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; 1F56A;RIGHT SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56B;BULLHORN;So;0;ON;;;;;N;;;;; 1F56C;BULLHORN WITH SOUND WAVES;So;0;ON;;;;;N;;;;; 1F56D;RINGING BELL;So;0;ON;;;;;N;;;;; 1F56E;BOOK;So;0;ON;;;;;N;;;;; 1F56F;CANDLE;So;0;ON;;;;;N;;;;; 1F570;MANTELPIECE CLOCK;So;0;ON;;;;;N;;;;; 1F571;BLACK SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 1F572;NO PIRACY;So;0;ON;;;;;N;;;;; 1F573;HOLE;So;0;ON;;;;;N;;;;; 1F574;MAN IN BUSINESS SUIT LEVITATING;So;0;ON;;;;;N;;;;; 1F575;SLEUTH OR SPY;So;0;ON;;;;;N;;;;; 1F576;DARK SUNGLASSES;So;0;ON;;;;;N;;;;; 1F577;SPIDER;So;0;ON;;;;;N;;;;; 1F578;SPIDER WEB;So;0;ON;;;;;N;;;;; 1F579;JOYSTICK;So;0;ON;;;;;N;;;;; 1F57A;MAN DANCING;So;0;ON;;;;;N;;;;; 1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;; 1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; 1F57E;WHITE TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F57F;BLACK TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;; 1F580;TELEPHONE ON TOP OF MODEM;So;0;ON;;;;;N;;;;; 1F581;CLAMSHELL MOBILE PHONE;So;0;ON;;;;;N;;;;; 1F582;BACK OF ENVELOPE;So;0;ON;;;;;N;;;;; 1F583;STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F584;ENVELOPE WITH LIGHTNING;So;0;ON;;;;;N;;;;; 1F585;FLYING ENVELOPE;So;0;ON;;;;;N;;;;; 1F586;PEN OVER STAMPED ENVELOPE;So;0;ON;;;;;N;;;;; 1F587;LINKED PAPERCLIPS;So;0;ON;;;;;N;;;;; 1F588;BLACK PUSHPIN;So;0;ON;;;;;N;;;;; 1F589;LOWER LEFT PENCIL;So;0;ON;;;;;N;;;;; 1F58A;LOWER LEFT BALLPOINT PEN;So;0;ON;;;;;N;;;;; 1F58B;LOWER LEFT FOUNTAIN PEN;So;0;ON;;;;;N;;;;; 1F58C;LOWER LEFT PAINTBRUSH;So;0;ON;;;;;N;;;;; 1F58D;LOWER LEFT CRAYON;So;0;ON;;;;;N;;;;; 1F58E;LEFT WRITING HAND;So;0;ON;;;;;N;;;;; 1F58F;TURNED OK HAND SIGN;So;0;ON;;;;;N;;;;; 1F590;RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F591;REVERSED RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;; 1F592;REVERSED THUMBS UP SIGN;So;0;ON;;;;;N;;;;; 1F593;REVERSED THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; 1F594;REVERSED VICTORY HAND;So;0;ON;;;;;N;;;;; 1F595;REVERSED HAND WITH MIDDLE FINGER EXTENDED;So;0;ON;;;;;N;;;;; 1F596;RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS;So;0;ON;;;;;N;;;;; 1F597;WHITE DOWN POINTING LEFT HAND INDEX;So;0;ON;;;;;N;;;;; 1F598;SIDEWAYS WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F599;SIDEWAYS WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59A;SIDEWAYS BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59B;SIDEWAYS BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59C;BLACK LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59D;BLACK RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F59E;SIDEWAYS WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F59F;SIDEWAYS WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A0;SIDEWAYS BLACK UP POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; 1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;; 1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;; 1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;; 1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;; 1F5A8;PRINTER;So;0;ON;;;;;N;;;;; 1F5A9;POCKET CALCULATOR;So;0;ON;;;;;N;;;;; 1F5AA;BLACK HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AB;WHITE HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AC;SOFT SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;; 1F5AD;TAPE CARTRIDGE;So;0;ON;;;;;N;;;;; 1F5AE;WIRED KEYBOARD;So;0;ON;;;;;N;;;;; 1F5AF;ONE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B0;TWO BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B1;THREE BUTTON MOUSE;So;0;ON;;;;;N;;;;; 1F5B2;TRACKBALL;So;0;ON;;;;;N;;;;; 1F5B3;OLD PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; 1F5B4;HARD DISK;So;0;ON;;;;;N;;;;; 1F5B5;SCREEN;So;0;ON;;;;;N;;;;; 1F5B6;PRINTER ICON;So;0;ON;;;;;N;;;;; 1F5B7;FAX ICON;So;0;ON;;;;;N;;;;; 1F5B8;OPTICAL DISC ICON;So;0;ON;;;;;N;;;;; 1F5B9;DOCUMENT WITH TEXT;So;0;ON;;;;;N;;;;; 1F5BA;DOCUMENT WITH TEXT AND PICTURE;So;0;ON;;;;;N;;;;; 1F5BB;DOCUMENT WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BC;FRAME WITH PICTURE;So;0;ON;;;;;N;;;;; 1F5BD;FRAME WITH TILES;So;0;ON;;;;;N;;;;; 1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;; 1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;; 1F5C0;FOLDER;So;0;ON;;;;;N;;;;; 1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;; 1F5C2;CARD INDEX DIVIDERS;So;0;ON;;;;;N;;;;; 1F5C3;CARD FILE BOX;So;0;ON;;;;;N;;;;; 1F5C4;FILE CABINET;So;0;ON;;;;;N;;;;; 1F5C5;EMPTY NOTE;So;0;ON;;;;;N;;;;; 1F5C6;EMPTY NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5C7;EMPTY NOTE PAD;So;0;ON;;;;;N;;;;; 1F5C8;NOTE;So;0;ON;;;;;N;;;;; 1F5C9;NOTE PAGE;So;0;ON;;;;;N;;;;; 1F5CA;NOTE PAD;So;0;ON;;;;;N;;;;; 1F5CB;EMPTY DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CC;EMPTY PAGE;So;0;ON;;;;;N;;;;; 1F5CD;EMPTY PAGES;So;0;ON;;;;;N;;;;; 1F5CE;DOCUMENT;So;0;ON;;;;;N;;;;; 1F5CF;PAGE;So;0;ON;;;;;N;;;;; 1F5D0;PAGES;So;0;ON;;;;;N;;;;; 1F5D1;WASTEBASKET;So;0;ON;;;;;N;;;;; 1F5D2;SPIRAL NOTE PAD;So;0;ON;;;;;N;;;;; 1F5D3;SPIRAL CALENDAR PAD;So;0;ON;;;;;N;;;;; 1F5D4;DESKTOP WINDOW;So;0;ON;;;;;N;;;;; 1F5D5;MINIMIZE;So;0;ON;;;;;N;;;;; 1F5D6;MAXIMIZE;So;0;ON;;;;;N;;;;; 1F5D7;OVERLAP;So;0;ON;;;;;N;;;;; 1F5D8;CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS;So;0;ON;;;;;N;;;;; 1F5D9;CANCELLATION X;So;0;ON;;;;;N;;;;; 1F5DA;INCREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DB;DECREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;; 1F5DC;COMPRESSION;So;0;ON;;;;;N;;;;; 1F5DD;OLD KEY;So;0;ON;;;;;N;;;;; 1F5DE;ROLLED-UP NEWSPAPER;So;0;ON;;;;;N;;;;; 1F5DF;PAGE WITH CIRCLED TEXT;So;0;ON;;;;;N;;;;; 1F5E0;STOCK CHART;So;0;ON;;;;;N;;;;; 1F5E1;DAGGER KNIFE;So;0;ON;;;;;N;;;;; 1F5E2;LIPS;So;0;ON;;;;;N;;;;; 1F5E3;SPEAKING HEAD IN SILHOUETTE;So;0;ON;;;;;N;;;;; 1F5E4;THREE RAYS ABOVE;So;0;ON;;;;;N;;;;; 1F5E5;THREE RAYS BELOW;So;0;ON;;;;;N;;;;; 1F5E6;THREE RAYS LEFT;So;0;ON;;;;;N;;;;; 1F5E7;THREE RAYS RIGHT;So;0;ON;;;;;N;;;;; 1F5E8;LEFT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5E9;RIGHT SPEECH BUBBLE;So;0;ON;;;;;N;;;;; 1F5EA;TWO SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EB;THREE SPEECH BUBBLES;So;0;ON;;;;;N;;;;; 1F5EC;LEFT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5ED;RIGHT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;; 1F5EE;LEFT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5EF;RIGHT ANGER BUBBLE;So;0;ON;;;;;N;;;;; 1F5F0;MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F1;LIGHTNING MOOD BUBBLE;So;0;ON;;;;;N;;;;; 1F5F2;LIGHTNING MOOD;So;0;ON;;;;;N;;;;; 1F5F3;BALLOT BOX WITH BALLOT;So;0;ON;;;;;N;;;;; 1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;; 1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;; 1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;; 1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;; 1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;; 1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;; 1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;; 1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;; 1F5FF;MOYAI;So;0;ON;;;;;N;;;;; 1F600;GRINNING FACE;So;0;ON;;;;;N;;;;; 1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;; 1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;; 1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;; 1F609;WINKING FACE;So;0;ON;;;;;N;;;;; 1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;; 1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;; 1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;; 1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;; 1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;; 1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;; 1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;; 1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;; 1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;; 1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;; 1F617;KISSING FACE;So;0;ON;;;;;N;;;;; 1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;; 1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;; 1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;; 1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; 1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;; 1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;; 1F620;ANGRY FACE;So;0;ON;;;;;N;;;;; 1F621;POUTING FACE;So;0;ON;;;;;N;;;;; 1F622;CRYING FACE;So;0;ON;;;;;N;;;;; 1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;; 1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;; 1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;; 1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;; 1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;; 1F629;WEARY FACE;So;0;ON;;;;;N;;;;; 1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;; 1F62B;TIRED FACE;So;0;ON;;;;;N;;;;; 1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;; 1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;; 1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;; 1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; 1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;; 1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;; 1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;; 1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;; 1F635;DIZZY FACE;So;0;ON;;;;;N;;;;; 1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;; 1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;; 1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; 1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; 1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; 1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; 1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;; 1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; 1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;; 1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;; 1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;; 1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;; 1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;; 1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;; 1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;; 1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;; 1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;; 1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;; 1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; 1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;; 1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;; 1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;; 1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;; 1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;; 1F650;NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F651;SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F652;NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F653;SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F654;TURNED NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F655;TURNED SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F656;TURNED NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F657;TURNED SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;; 1F658;NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F659;SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65A;NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65B;SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65C;HEAVY NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65D;HEAVY SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65E;HEAVY NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F65F;HEAVY SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;; 1F660;NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F661;SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F662;NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F663;SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F664;HEAVY NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F665;HEAVY SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;; 1F666;HEAVY NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F667;HEAVY SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;; 1F668;HOLLOW QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F669;HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66A;SOLID QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;; 1F66B;SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;; 1F66C;LEFTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66D;UPWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66E;RIGHTWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F66F;DOWNWARDS ROCKET;So;0;ON;;;;;N;;;;; 1F670;SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F671;HEAVY SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F672;LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F673;HEAVY LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;; 1F674;HEAVY AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F675;SWASH AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;; 1F676;SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F677;SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F678;SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 1F679;HEAVY INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67A;SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67B;HEAVY SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;; 1F67C;VERY HEAVY SOLIDUS;So;0;ON;;;;;N;;;;; 1F67D;VERY HEAVY REVERSE SOLIDUS;So;0;ON;;;;;N;;;;; 1F67E;CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F67F;REVERSE CHECKER BOARD;So;0;ON;;;;;N;;;;; 1F680;ROCKET;So;0;ON;;;;;N;;;;; 1F681;HELICOPTER;So;0;ON;;;;;N;;;;; 1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;; 1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;; 1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;; 1F686;TRAIN;So;0;ON;;;;;N;;;;; 1F687;METRO;So;0;ON;;;;;N;;;;; 1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;; 1F689;STATION;So;0;ON;;;;;N;;;;; 1F68A;TRAM;So;0;ON;;;;;N;;;;; 1F68B;TRAM CAR;So;0;ON;;;;;N;;;;; 1F68C;BUS;So;0;ON;;;;;N;;;;; 1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;; 1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;; 1F68F;BUS STOP;So;0;ON;;;;;N;;;;; 1F690;MINIBUS;So;0;ON;;;;;N;;;;; 1F691;AMBULANCE;So;0;ON;;;;;N;;;;; 1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F693;POLICE CAR;So;0;ON;;;;;N;;;;; 1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;; 1F695;TAXI;So;0;ON;;;;;N;;;;; 1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;; 1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;; 1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;; 1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;; 1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;; 1F69C;TRACTOR;So;0;ON;;;;;N;;;;; 1F69D;MONORAIL;So;0;ON;;;;;N;;;;; 1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;; 1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;; 1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;; 1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;; 1F6A2;SHIP;So;0;ON;;;;;N;;;;; 1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;; 1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;; 1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; 1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;; 1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;; 1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;; 1F6AA;DOOR;So;0;ON;;;;;N;;;;; 1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;; 1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;; 1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;; 1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; 1F6B2;BICYCLE;So;0;ON;;;;;N;;;;; 1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;; 1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;; 1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;; 1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;; 1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;; 1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;; 1F6BB;RESTROOM;So;0;ON;;;;;N;;;;; 1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;; 1F6BD;TOILET;So;0;ON;;;;;N;;;;; 1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;; 1F6BF;SHOWER;So;0;ON;;;;;N;;;;; 1F6C0;BATH;So;0;ON;;;;;N;;;;; 1F6C1;BATHTUB;So;0;ON;;;;;N;;;;; 1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;; 1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;; 1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;; 1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;; 1F6C6;TRIANGLE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 1F6C7;PROHIBITED SIGN;So;0;ON;;;;;N;;;;; 1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;; 1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CA;GIRLS SYMBOL;So;0;ON;;;;;N;;;;; 1F6CB;COUCH AND LAMP;So;0;ON;;;;;N;;;;; 1F6CC;SLEEPING ACCOMMODATION;So;0;ON;;;;;N;;;;; 1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;; 1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;; 1F6CF;BED;So;0;ON;;;;;N;;;;; 1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;; 1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;; 1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; 1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;; 1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;; 1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;; 1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E7;UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E8;UP-POINTING SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6E9;SMALL AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EA;NORTHEAST-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; 1F6EB;AIRPLANE DEPARTURE;So;0;ON;;;;;N;;;;; 1F6EC;AIRPLANE ARRIVING;So;0;ON;;;;;N;;;;; 1F6F0;SATELLITE;So;0;ON;;;;;N;;;;; 1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;; 1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;; 1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;; 1F6F4;SCOOTER;So;0;ON;;;;;N;;;;; 1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;; 1F6F6;CANOE;So;0;ON;;;;;N;;;;; 1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;; 1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;; 1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;; 1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;; 1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;; 1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;; 1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;; 1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;; 1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;; 1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;; 1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;; 1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;; 1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;; 1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;; 1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;; 1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;; 1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;; 1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;; 1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;; 1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;; 1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;; 1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;; 1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;; 1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;; 1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;; 1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;; 1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;; 1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;; 1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;; 1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;; 1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;; 1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;; 1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;; 1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;; 1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;; 1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;; 1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;; 1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; 1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;; 1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;; 1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;; 1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;; 1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;; 1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;; 1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;; 1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;; 1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;; 1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;; 1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;; 1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;; 1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;; 1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;; 1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;; 1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;; 1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;; 1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;; 1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;; 1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;; 1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;; 1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;; 1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;; 1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;; 1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;; 1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;; 1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;; 1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;; 1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;; 1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;; 1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;; 1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;; 1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;; 1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;; 1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;; 1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;; 1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;; 1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;; 1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;; 1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;; 1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;; 1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;; 1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;; 1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;; 1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;; 1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;; 1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;; 1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;; 1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;; 1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;; 1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;; 1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;; 1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;; 1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;; 1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;; 1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;; 1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;; 1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;; 1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;; 1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;; 1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;; 1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;; 1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;; 1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;; 1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;; 1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;; 1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;; 1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;; 1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;; 1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;; 1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; 1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; 1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; 1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F783;BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F784;BLACK SLIGHTLY SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F785;MEDIUM BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F786;BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F787;HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F788;VERY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F789;EXTREMELY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;; 1F78A;WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE;So;0;ON;;;;;N;;;;; 1F78B;ROUND TARGET;So;0;ON;;;;;N;;;;; 1F78C;BLACK TINY SQUARE;So;0;ON;;;;;N;;;;; 1F78D;BLACK SLIGHTLY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F78E;LIGHT WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F78F;MEDIUM WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F790;BOLD WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F791;HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F792;VERY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F793;EXTREMELY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; 1F794;WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; 1F795;WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE;So;0;ON;;;;;N;;;;; 1F796;SQUARE TARGET;So;0;ON;;;;;N;;;;; 1F797;BLACK TINY DIAMOND;So;0;ON;;;;;N;;;;; 1F798;BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F799;BLACK MEDIUM SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79A;WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;; 1F79B;WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; 1F79C;DIAMOND TARGET;So;0;ON;;;;;N;;;;; 1F79D;BLACK TINY LOZENGE;So;0;ON;;;;;N;;;;; 1F79E;BLACK VERY SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F79F;BLACK MEDIUM SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A0;WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; 1F7A1;THIN GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A2;LIGHT GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A3;MEDIUM GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A4;BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A5;VERY BOLD GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A6;VERY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A7;EXTREMELY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 1F7A8;THIN SALTIRE;So;0;ON;;;;;N;;;;; 1F7A9;LIGHT SALTIRE;So;0;ON;;;;;N;;;;; 1F7AA;MEDIUM SALTIRE;So;0;ON;;;;;N;;;;; 1F7AB;BOLD SALTIRE;So;0;ON;;;;;N;;;;; 1F7AC;HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AD;VERY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AE;EXTREMELY HEAVY SALTIRE;So;0;ON;;;;;N;;;;; 1F7AF;LIGHT FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B0;MEDIUM FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B1;BOLD FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B2;HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B3;VERY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B4;EXTREMELY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B5;LIGHT SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B6;MEDIUM SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B7;BOLD SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B8;HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7B9;VERY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BA;EXTREMELY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BB;LIGHT EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BC;MEDIUM EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BD;BOLD EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BE;HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7BF;VERY HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 1F7C0;LIGHT THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C1;MEDIUM THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C2;THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C3;MEDIUM THREE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C4;LIGHT FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C5;MEDIUM FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C6;FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7C7;MEDIUM FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C8;REVERSE LIGHT FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7C9;LIGHT FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CA;HEAVY FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CB;MEDIUM SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CC;HEAVY SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CD;SIX POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7CE;MEDIUM EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7CF;HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D0;VERY HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D1;HEAVY EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F803;DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F804;LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F805;UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F806;RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F807;DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F808;LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F809;UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80A;RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F80B;DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F810;LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F811;UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F812;RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F813;DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F814;LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F815;UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F816;RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F817;DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F818;HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F819;HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81A;HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81B;HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81C;HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81D;HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81E;HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F81F;HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 1F820;LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F821;UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F822;RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F823;DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;; 1F824;LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F825;UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F826;RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F827;DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;; 1F828;LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F829;UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82A;RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82B;DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;; 1F82C;LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82D;UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82E;RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F82F;DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F830;LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F831;UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F832;RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F833;DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;; 1F834;LEFTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F835;UPWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F836;RIGHTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F837;DOWNWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;; 1F838;LEFTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F839;UPWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83A;RIGHTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83B;DOWNWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;; 1F83C;LEFTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83D;UPWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83E;RIGHTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F83F;DOWNWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F840;LEFTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F841;UPWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F842;RIGHTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F843;DOWNWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;; 1F844;LEFTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F845;UPWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F846;RIGHTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F847;DOWNWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;; 1F850;LEFTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F851;UPWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F852;RIGHTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F853;DOWNWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F854;NORTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F855;NORTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F856;SOUTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F857;SOUTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F858;LEFT RIGHT SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F859;UP DOWN SANS-SERIF ARROW;So;0;ON;;;;;N;;;;; 1F860;WIDE-HEADED LEFTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F861;WIDE-HEADED UPWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F862;WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F863;WIDE-HEADED DOWNWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F864;WIDE-HEADED NORTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F865;WIDE-HEADED NORTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F866;WIDE-HEADED SOUTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F867;WIDE-HEADED SOUTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;; 1F868;WIDE-HEADED LEFTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F869;WIDE-HEADED UPWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86A;WIDE-HEADED RIGHTWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86B;WIDE-HEADED DOWNWARDS BARB ARROW;So;0;ON;;;;;N;;;;; 1F86C;WIDE-HEADED NORTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86D;WIDE-HEADED NORTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86E;WIDE-HEADED SOUTH EAST BARB ARROW;So;0;ON;;;;;N;;;;; 1F86F;WIDE-HEADED SOUTH WEST BARB ARROW;So;0;ON;;;;;N;;;;; 1F870;WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F871;WIDE-HEADED UPWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F872;WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F873;WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F874;WIDE-HEADED NORTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F875;WIDE-HEADED NORTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F876;WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F877;WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;; 1F878;WIDE-HEADED LEFTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F879;WIDE-HEADED UPWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87A;WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87B;WIDE-HEADED DOWNWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87C;WIDE-HEADED NORTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87D;WIDE-HEADED NORTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87E;WIDE-HEADED SOUTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F87F;WIDE-HEADED SOUTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F880;WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F881;WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F882;WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F883;WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F884;WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F885;WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F886;WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F887;WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;; 1F890;LEFTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F891;UPWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F892;RIGHTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F893;DOWNWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F894;LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F895;UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F896;RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F897;DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F898;LEFTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F899;UPWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89A;RIGHTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89B;DOWNWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;; 1F89C;HEAVY ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F89D;HEAVY ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F89E;HEAVY ARROW SHAFT WIDTH ONE HALF;So;0;ON;;;;;N;;;;; 1F89F;HEAVY ARROW SHAFT WIDTH ONE THIRD;So;0;ON;;;;;N;;;;; 1F8A0;LEFTWARDS BOTTOM-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A1;RIGHTWARDS BOTTOM SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A2;LEFTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A3;RIGHTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A4;LEFTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A5;RIGHTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A6;LEFTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A7;RIGHTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A8;LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8A9;RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AA;LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;; 1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;; 1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;; 1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;; 1F913;NERD FACE;So;0;ON;;;;;N;;;;; 1F914;THINKING FACE;So;0;ON;;;;;N;;;;; 1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;; 1F916;ROBOT FACE;So;0;ON;;;;;N;;;;; 1F917;HUGGING FACE;So;0;ON;;;;;N;;;;; 1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;; 1F919;CALL ME HAND;So;0;ON;;;;;N;;;;; 1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;; 1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;; 1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;; 1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;; 1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;; 1F921;CLOWN FACE;So;0;ON;;;;;N;;;;; 1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;; 1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;; 1F924;DROOLING FACE;So;0;ON;;;;;N;;;;; 1F925;LYING FACE;So;0;ON;;;;;N;;;;; 1F926;FACE PALM;So;0;ON;;;;;N;;;;; 1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;; 1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;; 1F933;SELFIE;So;0;ON;;;;;N;;;;; 1F934;PRINCE;So;0;ON;;;;;N;;;;; 1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;; 1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;; 1F937;SHRUG;So;0;ON;;;;;N;;;;; 1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;; 1F939;JUGGLING;So;0;ON;;;;;N;;;;; 1F93A;FENCER;So;0;ON;;;;;N;;;;; 1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;; 1F93C;WRESTLERS;So;0;ON;;;;;N;;;;; 1F93D;WATER POLO;So;0;ON;;;;;N;;;;; 1F93E;HANDBALL;So;0;ON;;;;;N;;;;; 1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;; 1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;; 1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;; 1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;; 1F944;SPOON;So;0;ON;;;;;N;;;;; 1F945;GOAL NET;So;0;ON;;;;;N;;;;; 1F946;RIFLE;So;0;ON;;;;;N;;;;; 1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;; 1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;; 1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;; 1F950;CROISSANT;So;0;ON;;;;;N;;;;; 1F951;AVOCADO;So;0;ON;;;;;N;;;;; 1F952;CUCUMBER;So;0;ON;;;;;N;;;;; 1F953;BACON;So;0;ON;;;;;N;;;;; 1F954;POTATO;So;0;ON;;;;;N;;;;; 1F955;CARROT;So;0;ON;;;;;N;;;;; 1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;; 1F957;GREEN SALAD;So;0;ON;;;;;N;;;;; 1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;; 1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;; 1F95A;EGG;So;0;ON;;;;;N;;;;; 1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;; 1F95C;PEANUTS;So;0;ON;;;;;N;;;;; 1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;; 1F95E;PANCAKES;So;0;ON;;;;;N;;;;; 1F980;CRAB;So;0;ON;;;;;N;;;;; 1F981;LION FACE;So;0;ON;;;;;N;;;;; 1F982;SCORPION;So;0;ON;;;;;N;;;;; 1F983;TURKEY;So;0;ON;;;;;N;;;;; 1F984;UNICORN FACE;So;0;ON;;;;;N;;;;; 1F985;EAGLE;So;0;ON;;;;;N;;;;; 1F986;DUCK;So;0;ON;;;;;N;;;;; 1F987;BAT;So;0;ON;;;;;N;;;;; 1F988;SHARK;So;0;ON;;;;;N;;;;; 1F989;OWL;So;0;ON;;;;;N;;;;; 1F98A;FOX FACE;So;0;ON;;;;;N;;;;; 1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;; 1F98C;DEER;So;0;ON;;;;;N;;;;; 1F98D;GORILLA;So;0;ON;;;;;N;;;;; 1F98E;LIZARD;So;0;ON;;;;;N;;;;; 1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;; 1F990;SHRIMP;So;0;ON;;;;;N;;;;; 1F991;SQUID;So;0;ON;;;;;N;;;;; 1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;; 20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;; 2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;; 2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;; 2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;; 2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;; 2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;; 2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;; 2CEA1;<CJK Ideograph Extension E, 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;;;;; 2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; 2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; 2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; 2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; 2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; 2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; 2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; 2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; 2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; 2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; 2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; 2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; 2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; 2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; 2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; 2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; 2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; 2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; 2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; 2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; 2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; 2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; 2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; 2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; 2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; 2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; 2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; 2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; 2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; 2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; 2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; 2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; 2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; 2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; 2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; 2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; 2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; 2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; 2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; 2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; 2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; 2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; 2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; 2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; 2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; 2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; 2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; 2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; 2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; 2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; 2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; 2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; 2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; 2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; 2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; 2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; 2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; 2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; 2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; 2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; 2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; 2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; 2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; 2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; 2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; 2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; 2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; 2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; 2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; 2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; 2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; 2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; 2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; 2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; 2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; 2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; 2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; 2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; 2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; 2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; 2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; 2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; 2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; 2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; 2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; 2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; 2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; 2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; 2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; 2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; 2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; 2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; 2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; 2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; 2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; 2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; 2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; 2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; 2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; 2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; 2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; 2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; 2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; 2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; 2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; 2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; 2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; 2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; 2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; 2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; 2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; 2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; 2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; 2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; 2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; 2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; 2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; 2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; 2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; 2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; 2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; 2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; 2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; 2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; 2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; 2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; 2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; 2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; 2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; 2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; 2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; 2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; 2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; 2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; 2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; 2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; 2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; 2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; 2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; 2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; 2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; 2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; 2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; 2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; 2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; 2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; 2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; 2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; 2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; 2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; 2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; 2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; 2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; 2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; 2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; 2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; 2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; 2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; 2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; 2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; 2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; 2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; 2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; 2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; 2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; 2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; 2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; 2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; 2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; 2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; 2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; 2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; 2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; 2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; 2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; 2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; 2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; 2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; 2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; 2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; 2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; 2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; 2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; 2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; 2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; 2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; 2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; 2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; 2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; 2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; 2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; 2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; 2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; 2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; 2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; 2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; 2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; 2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; 2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; 2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; 2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; 2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; 2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; 2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; 2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; 2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; 2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; 2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; 2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; 2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; 2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; 2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; 2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; 2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; 2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; 2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; 2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; 2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; 2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; 2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; 2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; 2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; 2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; 2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; 2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; 2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; 2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; 2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; 2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; 2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; 2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; 2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; 2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; 2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; 2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; 2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; 2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; 2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; 2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; 2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; 2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; 2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; 2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; 2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; 2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; 2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; 2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; 2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; 2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; 2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; 2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; 2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; 2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; 2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; 2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; 2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; 2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; 2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; 2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; 2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; 2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; 2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; 2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; 2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; 2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; 2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; 2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; 2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; 2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; 2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; 2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; 2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; 2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; 2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; 2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; 2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; 2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; 2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; 2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; 2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; 2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; 2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; 2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; 2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; 2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; 2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; 2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; 2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; 2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; 2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; 2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; 2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; 2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; 2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; 2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; 2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; 2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; 2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; 2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; 2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; 2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; 2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; 2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; 2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; 2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; 2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; 2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; 2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; 2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; 2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; 2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; 2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; 2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; 2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; 2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; 2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; 2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; 2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; 2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; 2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; 2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; 2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; 2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; 2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; 2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; 2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; 2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; 2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; 2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; 2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; 2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; 2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; 2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; 2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; 2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; 2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; 2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; 2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; 2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; 2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; 2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; 2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; 2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; 2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; 2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; 2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; 2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; 2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; 2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; 2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; 2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; 2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; 2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; 2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; 2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; 2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; 2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; 2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; 2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; 2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; 2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; 2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; 2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; 2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; 2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; 2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; 2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; 2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; 2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; 2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; 2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; 2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; 2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; 2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; 2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; 2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; 2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; 2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; 2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; 2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; 2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; 2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; 2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; 2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; 2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; 2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; 2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; 2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; 2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; 2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; 2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; 2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; 2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; 2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; 2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; 2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; 2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; 2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; 2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; 2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; 2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; 2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; 2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; 2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; 2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; 2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; 2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; 2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; 2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; 2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; 2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; 2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; 2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; 2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; 2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; 2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; 2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; 2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; 2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; 2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; 2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; 2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; 2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; 2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; 2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; 2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; 2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; 2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; 2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; 2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; 2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; 2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; 2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; 2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; 2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; 2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; 2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; 2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; 2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; 2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; 2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; 2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; 2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; 2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; 2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; 2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; 2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; 2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; 2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; 2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; 2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; 2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; 2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; 2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; 2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; 2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; 2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; 2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; 2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; 2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; 2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; 2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; 2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; 2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; 2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; 2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; 2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; 2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; 2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; 2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; 2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; 2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; 2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; 2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; 2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; 2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; 2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; 2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; 2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; 2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; 2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; 2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; 2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; 2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; 2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; 2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; 2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; 2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; 2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; 2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; 2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; 2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; 2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; 2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; 2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; 2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; 2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; 2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; 2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; 2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; 2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; 2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; 2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; 2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; 2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; 2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; 2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; 2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; 2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; 2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; 2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; 2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; 2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; 2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; 2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; 2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; 2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; 2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; 2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; 2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; 2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; 2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; 2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; 2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; 2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; 2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; 2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; 2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; 2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; 2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; 2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; 2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; 2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; 2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; 2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; 2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; 2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; 2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; 2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;; FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;; 100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;; 10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;; �������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniname/test-uninames.c�����������������������������������������������0000664�0000000�0000000�00000023733�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character name functions. Copyright (C) 2000-2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc. This 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 <stdio.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" #include "uniname.h" /* The names according to the UnicodeData.txt file, modified to contain the Hangul syllable names, as described in the Unicode 3.0 book. */ static const char * unicode_names [0x110000]; /* Maximum entries in unicode_aliases. */ #define ALIASLEN 0x200 /* The aliases according to the NameAliases.txt file. */ struct unicode_alias { const char *name; unsigned int uc; }; static struct unicode_alias unicode_aliases [ALIASLEN]; static int aliases_count; /* Stores in unicode_names[] the relevant contents of the UnicodeData.txt file. */ static void fill_names (const char *unicodedata_filename) { FILE *stream; char *field0; char *field1; char line[1024]; int lineno = 0; stream = fopen (unicodedata_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", unicodedata_filename); exit (EXIT_FAILURE); } while (fgets (line, sizeof line, stream)) { char *p; char *comment; unsigned long i; lineno++; comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; field0 = p = line; p = strchr (p, ';'); if (!p) { fprintf (stderr, "short line in '%s':%d\n", unicodedata_filename, lineno); exit (EXIT_FAILURE); } *p++ = '\0'; field1 = p; if (*field1 == '<') continue; p = strchr (p, ';'); if (!p) { fprintf (stderr, "short line in '%s':%d\n", unicodedata_filename, lineno); exit (EXIT_FAILURE); } *p = '\0'; i = strtoul (field0, NULL, 16); if (i >= 0x110000) { fprintf (stderr, "index too large\n"); exit (EXIT_FAILURE); } unicode_names[i] = xstrdup (field1); } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", unicodedata_filename); exit (1); } } /* Stores in unicode_aliases[] the relevant contents of the NameAliases.txt file. */ static void fill_aliases (const char *namealiases_filename) { FILE *stream; char *field0; char *field1; char line[1024]; int lineno = 0; stream = fopen (namealiases_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", namealiases_filename); exit (EXIT_FAILURE); } while (fgets (line, sizeof line, stream)) { char *p; char *comment; unsigned long uc; comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; lineno++; field0 = p = line; p = strchr (p, ';'); if (!p) { fprintf (stderr, "short line in '%s':%d\n", namealiases_filename, lineno); exit (EXIT_FAILURE); } *p++ = '\0'; field1 = p; p = strchr (p, ';'); if (!p) { fprintf (stderr, "short line in '%s':%d\n", namealiases_filename, lineno); exit (EXIT_FAILURE); } *p = '\0'; uc = strtoul (field0, NULL, 16); if (uc >= 0x110000) { fprintf (stderr, "index too large\n"); exit (EXIT_FAILURE); } if (aliases_count == ALIASLEN) { fprintf (stderr, "too many aliases\n"); exit (EXIT_FAILURE); } unicode_aliases[aliases_count].name = xstrdup (field1); unicode_aliases[aliases_count].uc = uc; aliases_count++; } if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", namealiases_filename); exit (1); } } static int name_has_alias (unsigned int uc) { int i; for (i = 0; i < ALIASLEN; i++) if (unicode_aliases[i].uc == uc) return 1; return 0; } /* Perform an exhaustive test of the unicode_character_name function. */ static int test_name_lookup () { int error = 0; unsigned int i; char buf[UNINAME_MAX]; for (i = 0; i < 0x11000; i++) { char *result = unicode_character_name (i, buf); if (unicode_names[i] != NULL) { if (result == NULL) { fprintf (stderr, "\\u%04X name lookup failed!\n", i); error = 1; } else if (strcmp (result, unicode_names[i]) != 0) { fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", i, result); error = 1; } } else { if (result != NULL) { fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", i, result); error = 1; } } } for (i = 0x110000; i < 0x1000000; i++) { char *result = unicode_character_name (i, buf); if (result != NULL) { fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", i, result); error = 1; } } return error; } /* Perform a test of the unicode_name_character function. */ static int test_inverse_lookup () { int error = 0; unsigned int i; /* First, verify all valid character names are recognized. */ for (i = 0; i < 0x110000; i++) if (unicode_names[i] != NULL) { unsigned int result = unicode_name_character (unicode_names[i]); if (result != i) { if (result == UNINAME_INVALID) fprintf (stderr, "inverse name lookup of \"%s\" failed\n", unicode_names[i]); else fprintf (stderr, "inverse name lookup of \"%s\" returned 0x%04X\n", unicode_names[i], result); error = 1; } } /* Second, generate random but likely names and verify they are not recognized unless really valid. */ for (i = 0; i < 10000; i++) { unsigned int i1, i2; const char *s1; const char *s2; unsigned int l1, l2, j1, j2; char buf[2*UNINAME_MAX]; unsigned int result; do i1 = ((rand () % 0x11) << 16) + ((rand () & 0xff) << 8) + (rand () & 0xff); while (unicode_names[i1] == NULL); do i2 = ((rand () % 0x11) << 16) + ((rand () & 0xff) << 8) + (rand () & 0xff); while (unicode_names[i2] == NULL); s1 = unicode_names[i1]; l1 = strlen (s1); s2 = unicode_names[i2]; l2 = strlen (s2); /* Concatenate a starting piece of s1 with an ending piece of s2. */ for (j1 = 1; j1 <= l1; j1++) if (j1 == l1 || s1[j1] == ' ') for (j2 = 0; j2 < l2; j2++) if (j2 == 0 || s2[j2-1] == ' ') { memcpy (buf, s1, j1); buf[j1] = ' '; memcpy (buf + j1 + 1, s2 + j2, l2 - j2 + 1); result = unicode_name_character (buf); if (result != UNINAME_INVALID && !name_has_alias (result) && !(unicode_names[result] != NULL && strcmp (unicode_names[result], buf) == 0)) { fprintf (stderr, "inverse name lookup of \"%s\" returned 0x%04X\n", unicode_names[i], result); error = 1; } } } /* Third, some extreme case that used to loop. */ if (unicode_name_character ("A A") != UNINAME_INVALID) error = 1; return error; } /* Perform a test of the unicode_name_character function for aliases. */ static int test_alias_lookup () { int error = 0; unsigned int i; char buf[UNINAME_MAX]; /* Verify all valid character names are recognized. */ for (i = 0; i < ALIASLEN; i++) if (unicode_aliases[i].uc != UNINAME_INVALID /* Skip if the character has no canonical name (e.g. control characters). */ && unicode_character_name (unicode_aliases[i].uc, buf)) { unsigned int result = unicode_name_character (unicode_aliases[i].name); if (result != unicode_aliases[i].uc) { if (result == UNINAME_INVALID) fprintf (stderr, "inverse name lookup of \"%s\" failed\n", unicode_aliases[i].name); else fprintf (stderr, "inverse name lookup of \"%s\" returned 0x%04X\n", unicode_aliases[i].name, result); error = 1; } } return error; } int main (int argc, char *argv[]) { int error = 0; int i; for (i = 1; i < argc && strcmp (argv[i], "--") != 0; i++) fill_names (argv[i]); if (i < argc) { int j; for (j = 0; j < ALIASLEN; j++) unicode_aliases[j].uc = UNINAME_INVALID; i++; for (; i < argc; i++) fill_aliases (argv[i]); } error |= test_name_lookup (); error |= test_inverse_lookup (); if (aliases_count > 0) error |= test_alias_lookup (); return error; } �������������������������������������gnulib-20210822~d383792/tests/uniname/test-uninames.sh����������������������������������������������0000775�0000000�0000000�00000000244�14110572173�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-uninames${EXEEXT} "$srcdir/uniname/UnicodeData.txt" "$srcdir/uniname/HangulSyllableNames.txt" -- "$srcdir/uniname/NameAliases.txt" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017130�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/NormalizationTest.txt�����������������������������������������0000664�0000000�0000000�00011464611�14110572173�0023375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NormalizationTest-9.0.0.txt # Date: 2016-04-04, 11:41:55 GMT # © 2016 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 http://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see http://www.unicode.org/reports/tr44/ # # Normalization Test Suite # Format: # # Columns (c1, c2,...) are separated by semicolons # They have the following meaning: # source; NFC; NFD; NFKC; NFKD # Comments are indicated with hash marks # Each of the columns may have one or more code points. # # CONFORMANCE: # 1. The following invariants must be true for all conformant implementations # # NFC # c2 == toNFC(c1) == toNFC(c2) == toNFC(c3) # c4 == toNFC(c4) == toNFC(c5) # # NFD # c3 == toNFD(c1) == toNFD(c2) == toNFD(c3) # c5 == toNFD(c4) == toNFD(c5) # # NFKC # c4 == toNFKC(c1) == toNFKC(c2) == toNFKC(c3) == toNFKC(c4) == toNFKC(c5) # # NFKD # c5 == toNFKD(c1) == toNFKD(c2) == toNFKD(c3) == toNFKD(c4) == toNFKD(c5) # # 2. For every code point X assigned in this version of Unicode that is not specifically # listed in Part 1, the following invariants must be true for all conformant # implementations: # # X == toNFC(X) == toNFD(X) == toNFKC(X) == toNFKD(X) # @Part0 # Specific cases # 1E0A;1E0A;0044 0307;1E0A;0044 0307; # (Ḋ; Ḋ; D◌̇; Ḋ; D◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE 1E0C;1E0C;0044 0323;1E0C;0044 0323; # (Ḍ; Ḍ; D◌̣; Ḍ; D◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW 1E0A 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (Ḋ◌̣; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING DOT BELOW 1E0C 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (Ḍ◌̇; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING DOT ABOVE 0044 0307 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (D◌̇◌̣; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING DOT ABOVE, COMBINING DOT BELOW 0044 0323 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; # (D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; Ḍ◌̇; D◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING DOT BELOW, COMBINING DOT ABOVE 1E0A 031B;1E0A 031B;0044 031B 0307;1E0A 031B;0044 031B 0307; # (Ḋ◌̛; Ḋ◌̛; D◌̛◌̇; Ḋ◌̛; D◌̛◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING HORN 1E0C 031B;1E0C 031B;0044 031B 0323;1E0C 031B;0044 031B 0323; # (Ḍ◌̛; Ḍ◌̛; D◌̛◌̣; Ḍ◌̛; D◌̛◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING HORN 1E0A 031B 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (Ḋ◌̛◌̣; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE, COMBINING HORN, COMBINING DOT BELOW 1E0C 031B 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (Ḍ◌̛◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D WITH DOT BELOW, COMBINING HORN, COMBINING DOT ABOVE 0044 031B 0307 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (D◌̛◌̇◌̣; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING HORN, COMBINING DOT ABOVE, COMBINING DOT BELOW 0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; # (D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; Ḍ◌̛◌̇; D◌̛◌̣◌̇; ) LATIN CAPITAL LETTER D, COMBINING HORN, COMBINING DOT BELOW, COMBINING DOT ABOVE 00C8;00C8;0045 0300;00C8;0045 0300; # (È; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E WITH GRAVE 0112;0112;0045 0304;0112;0045 0304; # (Ē; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E WITH MACRON 0045 0300;00C8;0045 0300;00C8;0045 0300; # (E◌̀; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E, COMBINING GRAVE ACCENT 0045 0304;0112;0045 0304;0112;0045 0304; # (E◌̄; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E, COMBINING MACRON 1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ḕ; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 0112 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ē◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON, COMBINING GRAVE ACCENT 1E14 0304;1E14 0304;0045 0304 0300 0304;1E14 0304;0045 0304 0300 0304; # (Ḕ◌̄; Ḕ◌̄; E◌̄◌̀◌̄; Ḕ◌̄; E◌̄◌̀◌̄; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE, COMBINING MACRON 0045 0304 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; # (E◌̄◌̀; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E, COMBINING MACRON, COMBINING GRAVE ACCENT 0045 0300 0304;00C8 0304;0045 0300 0304;00C8 0304;0045 0300 0304; # (E◌̀◌̄; È◌̄; E◌̀◌̄; È◌̄; E◌̀◌̄; ) LATIN CAPITAL LETTER E, COMBINING GRAVE ACCENT, COMBINING MACRON 05B8 05B9 05B1 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F; # (◌ָ◌ֹ◌ֱ◌֑׃◌ְ◌֬◌֟; ◌ֱ◌ָ◌ֹ◌֑׃◌ְ◌֬◌֟; ◌ֱ◌ָ◌ֹ◌֑׃◌ְ◌֬◌֟; ◌ֱ◌ָ◌ֹ◌֑׃◌ְ◌֬◌֟; ◌ֱ◌ָ◌ֹ◌֑׃◌ְ◌֬◌֟; ) HEBREW POINT QAMATS, HEBREW POINT HOLAM, HEBREW POINT HATAF SEGOL, HEBREW ACCENT ETNAHTA, HEBREW PUNCTUATION SOF PASUQ, HEBREW POINT SHEVA, HEBREW ACCENT ILUY, HEBREW ACCENT QARNEY PARA 0592 05B7 05BC 05A5 05B0 05C0 05C4 05AD;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4; # (◌֒◌ַ◌ּ◌֥◌ְ׀◌ׄ◌֭; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ◌ְ◌ַ◌ּ◌֥◌֒׀◌֭◌ׄ; ) HEBREW ACCENT SEGOL, HEBREW POINT PATAH, HEBREW POINT DAGESH OR MAPIQ, HEBREW ACCENT MERKHA, HEBREW POINT SHEVA, HEBREW PUNCTUATION PASEQ, HEBREW MARK UPPER DOT, HEBREW ACCENT DEHI 1100 AC00 11A8;1100 AC01;1100 1100 1161 11A8;1100 AC01;1100 1100 1161 11A8; # (ᄀ각; ᄀ각; ᄀ각; ᄀ각; ᄀ각; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK 1100 AC00 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8;1100 AC01 11A8;1100 1100 1161 11A8 11A8; # (ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ᄀ각ᆨ; ) HANGUL CHOSEONG KIYEOK, HANGUL SYLLABLE GA, HANGUL JONGSEONG KIYEOK, HANGUL JONGSEONG KIYEOK # @Part1 # Character by character test # All characters not explicitly occurring in c1 of Part 1 have identical NFC, D, KC, KD forms. # 00A0;00A0;00A0;0020;0020; # ( ;  ;  ; ; ; ) NO-BREAK SPACE 00A8;00A8;00A8;0020 0308;0020 0308; # (¨; ¨; ¨; ◌̈; ◌̈; ) DIAERESIS 00AA;00AA;00AA;0061;0061; # (ª; ª; ª; a; a; ) FEMININE ORDINAL INDICATOR 00AF;00AF;00AF;0020 0304;0020 0304; # (¯; ¯; ¯; ◌̄; ◌̄; ) MACRON 00B2;00B2;00B2;0032;0032; # (²; ²; ²; 2; 2; ) SUPERSCRIPT TWO 00B3;00B3;00B3;0033;0033; # (³; ³; ³; 3; 3; ) SUPERSCRIPT THREE 00B4;00B4;00B4;0020 0301;0020 0301; # (´; ´; ´; ◌́; ◌́; ) ACUTE ACCENT 00B5;00B5;00B5;03BC;03BC; # (µ; µ; µ; μ; μ; ) MICRO SIGN 00B8;00B8;00B8;0020 0327;0020 0327; # (¸; ¸; ¸; ◌̧; ◌̧; ) CEDILLA 00B9;00B9;00B9;0031;0031; # (¹; ¹; ¹; 1; 1; ) SUPERSCRIPT ONE 00BA;00BA;00BA;006F;006F; # (º; º; º; o; o; ) MASCULINE ORDINAL INDICATOR 00BC;00BC;00BC;0031 2044 0034;0031 2044 0034; # (¼; ¼; ¼; 1⁄4; 1⁄4; ) VULGAR FRACTION ONE QUARTER 00BD;00BD;00BD;0031 2044 0032;0031 2044 0032; # (½; ½; ½; 1⁄2; 1⁄2; ) VULGAR FRACTION ONE HALF 00BE;00BE;00BE;0033 2044 0034;0033 2044 0034; # (¾; ¾; ¾; 3⁄4; 3⁄4; ) VULGAR FRACTION THREE QUARTERS 00C0;00C0;0041 0300;00C0;0041 0300; # (À; À; A◌̀; À; A◌̀; ) LATIN CAPITAL LETTER A WITH GRAVE 00C1;00C1;0041 0301;00C1;0041 0301; # (Á; Á; A◌́; Á; A◌́; ) LATIN CAPITAL LETTER A WITH ACUTE 00C2;00C2;0041 0302;00C2;0041 0302; # (Â; Â; A◌̂; Â; A◌̂; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C3;00C3;0041 0303;00C3;0041 0303; # (Ã; Ã; A◌̃; Ã; A◌̃; ) LATIN CAPITAL LETTER A WITH TILDE 00C4;00C4;0041 0308;00C4;0041 0308; # (Ä; Ä; A◌̈; Ä; A◌̈; ) LATIN CAPITAL LETTER A WITH DIAERESIS 00C5;00C5;0041 030A;00C5;0041 030A; # (Å; Å; A◌̊; Å; A◌̊; ) LATIN CAPITAL LETTER A WITH RING ABOVE 00C7;00C7;0043 0327;00C7;0043 0327; # (Ç; Ç; C◌̧; Ç; C◌̧; ) LATIN CAPITAL LETTER C WITH CEDILLA 00C8;00C8;0045 0300;00C8;0045 0300; # (È; È; E◌̀; È; E◌̀; ) LATIN CAPITAL LETTER E WITH GRAVE 00C9;00C9;0045 0301;00C9;0045 0301; # (É; É; E◌́; É; E◌́; ) LATIN CAPITAL LETTER E WITH ACUTE 00CA;00CA;0045 0302;00CA;0045 0302; # (Ê; Ê; E◌̂; Ê; E◌̂; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CB;00CB;0045 0308;00CB;0045 0308; # (Ë; Ë; E◌̈; Ë; E◌̈; ) LATIN CAPITAL LETTER E WITH DIAERESIS 00CC;00CC;0049 0300;00CC;0049 0300; # (Ì; Ì; I◌̀; Ì; I◌̀; ) LATIN CAPITAL LETTER I WITH GRAVE 00CD;00CD;0049 0301;00CD;0049 0301; # (Í; Í; I◌́; Í; I◌́; ) LATIN CAPITAL LETTER I WITH ACUTE 00CE;00CE;0049 0302;00CE;0049 0302; # (Î; Î; I◌̂; Î; I◌̂; ) LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF;00CF;0049 0308;00CF;0049 0308; # (Ï; Ï; I◌̈; Ï; I◌̈; ) LATIN CAPITAL LETTER I WITH DIAERESIS 00D1;00D1;004E 0303;00D1;004E 0303; # (Ñ; Ñ; N◌̃; Ñ; N◌̃; ) LATIN CAPITAL LETTER N WITH TILDE 00D2;00D2;004F 0300;00D2;004F 0300; # (Ò; Ò; O◌̀; Ò; O◌̀; ) LATIN CAPITAL LETTER O WITH GRAVE 00D3;00D3;004F 0301;00D3;004F 0301; # (Ó; Ó; O◌́; Ó; O◌́; ) LATIN CAPITAL LETTER O WITH ACUTE 00D4;00D4;004F 0302;00D4;004F 0302; # (Ô; Ô; O◌̂; Ô; O◌̂; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00D5;00D5;004F 0303;00D5;004F 0303; # (Õ; Õ; O◌̃; Õ; O◌̃; ) LATIN CAPITAL LETTER O WITH TILDE 00D6;00D6;004F 0308;00D6;004F 0308; # (Ö; Ö; O◌̈; Ö; O◌̈; ) LATIN CAPITAL LETTER O WITH DIAERESIS 00D9;00D9;0055 0300;00D9;0055 0300; # (Ù; Ù; U◌̀; Ù; U◌̀; ) LATIN CAPITAL LETTER U WITH GRAVE 00DA;00DA;0055 0301;00DA;0055 0301; # (Ú; Ú; U◌́; Ú; U◌́; ) LATIN CAPITAL LETTER U WITH ACUTE 00DB;00DB;0055 0302;00DB;0055 0302; # (Û; Û; U◌̂; Û; U◌̂; ) LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00DC;00DC;0055 0308;00DC;0055 0308; # (Ü; Ü; U◌̈; Ü; U◌̈; ) LATIN CAPITAL LETTER U WITH DIAERESIS 00DD;00DD;0059 0301;00DD;0059 0301; # (Ý; Ý; Y◌́; Ý; Y◌́; ) LATIN CAPITAL LETTER Y WITH ACUTE 00E0;00E0;0061 0300;00E0;0061 0300; # (à; à; a◌̀; à; a◌̀; ) LATIN SMALL LETTER A WITH GRAVE 00E1;00E1;0061 0301;00E1;0061 0301; # (á; á; a◌́; á; a◌́; ) LATIN SMALL LETTER A WITH ACUTE 00E2;00E2;0061 0302;00E2;0061 0302; # (â; â; a◌̂; â; a◌̂; ) LATIN SMALL LETTER A WITH CIRCUMFLEX 00E3;00E3;0061 0303;00E3;0061 0303; # (ã; ã; a◌̃; ã; a◌̃; ) LATIN SMALL LETTER A WITH TILDE 00E4;00E4;0061 0308;00E4;0061 0308; # (ä; ä; a◌̈; ä; a◌̈; ) LATIN SMALL LETTER A WITH DIAERESIS 00E5;00E5;0061 030A;00E5;0061 030A; # (å; å; a◌̊; å; a◌̊; ) LATIN SMALL LETTER A WITH RING ABOVE 00E7;00E7;0063 0327;00E7;0063 0327; # (ç; ç; c◌̧; ç; c◌̧; ) LATIN SMALL LETTER C WITH CEDILLA 00E8;00E8;0065 0300;00E8;0065 0300; # (è; è; e◌̀; è; e◌̀; ) LATIN SMALL LETTER E WITH GRAVE 00E9;00E9;0065 0301;00E9;0065 0301; # (é; é; e◌́; é; e◌́; ) LATIN SMALL LETTER E WITH ACUTE 00EA;00EA;0065 0302;00EA;0065 0302; # (ê; ê; e◌̂; ê; e◌̂; ) LATIN SMALL LETTER E WITH CIRCUMFLEX 00EB;00EB;0065 0308;00EB;0065 0308; # (ë; ë; e◌̈; ë; e◌̈; ) LATIN SMALL LETTER E WITH DIAERESIS 00EC;00EC;0069 0300;00EC;0069 0300; # (ì; ì; i◌̀; ì; i◌̀; ) LATIN SMALL LETTER I WITH GRAVE 00ED;00ED;0069 0301;00ED;0069 0301; # (í; í; i◌́; í; i◌́; ) LATIN SMALL LETTER I WITH ACUTE 00EE;00EE;0069 0302;00EE;0069 0302; # (î; î; i◌̂; î; i◌̂; ) LATIN SMALL LETTER I WITH CIRCUMFLEX 00EF;00EF;0069 0308;00EF;0069 0308; # (ï; ï; i◌̈; ï; i◌̈; ) LATIN SMALL LETTER I WITH DIAERESIS 00F1;00F1;006E 0303;00F1;006E 0303; # (ñ; ñ; n◌̃; ñ; n◌̃; ) LATIN SMALL LETTER N WITH TILDE 00F2;00F2;006F 0300;00F2;006F 0300; # (ò; ò; o◌̀; ò; o◌̀; ) LATIN SMALL LETTER O WITH GRAVE 00F3;00F3;006F 0301;00F3;006F 0301; # (ó; ó; o◌́; ó; o◌́; ) LATIN SMALL LETTER O WITH ACUTE 00F4;00F4;006F 0302;00F4;006F 0302; # (ô; ô; o◌̂; ô; o◌̂; ) LATIN SMALL LETTER O WITH CIRCUMFLEX 00F5;00F5;006F 0303;00F5;006F 0303; # (õ; õ; o◌̃; õ; o◌̃; ) LATIN SMALL LETTER O WITH TILDE 00F6;00F6;006F 0308;00F6;006F 0308; # (ö; ö; o◌̈; ö; o◌̈; ) LATIN SMALL LETTER O WITH DIAERESIS 00F9;00F9;0075 0300;00F9;0075 0300; # (ù; ù; u◌̀; ù; u◌̀; ) LATIN SMALL LETTER U WITH GRAVE 00FA;00FA;0075 0301;00FA;0075 0301; # (ú; ú; u◌́; ú; u◌́; ) LATIN SMALL LETTER U WITH ACUTE 00FB;00FB;0075 0302;00FB;0075 0302; # (û; û; u◌̂; û; u◌̂; ) LATIN SMALL LETTER U WITH CIRCUMFLEX 00FC;00FC;0075 0308;00FC;0075 0308; # (ü; ü; u◌̈; ü; u◌̈; ) LATIN SMALL LETTER U WITH DIAERESIS 00FD;00FD;0079 0301;00FD;0079 0301; # (ý; ý; y◌́; ý; y◌́; ) LATIN SMALL LETTER Y WITH ACUTE 00FF;00FF;0079 0308;00FF;0079 0308; # (ÿ; ÿ; y◌̈; ÿ; y◌̈; ) LATIN SMALL LETTER Y WITH DIAERESIS 0100;0100;0041 0304;0100;0041 0304; # (Ā; Ā; A◌̄; Ā; A◌̄; ) LATIN CAPITAL LETTER A WITH MACRON 0101;0101;0061 0304;0101;0061 0304; # (ā; ā; a◌̄; ā; a◌̄; ) LATIN SMALL LETTER A WITH MACRON 0102;0102;0041 0306;0102;0041 0306; # (Ă; Ă; A◌̆; Ă; A◌̆; ) LATIN CAPITAL LETTER A WITH BREVE 0103;0103;0061 0306;0103;0061 0306; # (ă; ă; a◌̆; ă; a◌̆; ) LATIN SMALL LETTER A WITH BREVE 0104;0104;0041 0328;0104;0041 0328; # (Ą; Ą; A◌̨; Ą; A◌̨; ) LATIN CAPITAL LETTER A WITH OGONEK 0105;0105;0061 0328;0105;0061 0328; # (ą; ą; a◌̨; ą; a◌̨; ) LATIN SMALL LETTER A WITH OGONEK 0106;0106;0043 0301;0106;0043 0301; # (Ć; Ć; C◌́; Ć; C◌́; ) LATIN CAPITAL LETTER C WITH ACUTE 0107;0107;0063 0301;0107;0063 0301; # (ć; ć; c◌́; ć; c◌́; ) LATIN SMALL LETTER C WITH ACUTE 0108;0108;0043 0302;0108;0043 0302; # (Ĉ; Ĉ; C◌̂; Ĉ; C◌̂; ) LATIN CAPITAL LETTER C WITH CIRCUMFLEX 0109;0109;0063 0302;0109;0063 0302; # (ĉ; ĉ; c◌̂; ĉ; c◌̂; ) LATIN SMALL LETTER C WITH CIRCUMFLEX 010A;010A;0043 0307;010A;0043 0307; # (Ċ; Ċ; C◌̇; Ċ; C◌̇; ) LATIN CAPITAL LETTER C WITH DOT ABOVE 010B;010B;0063 0307;010B;0063 0307; # (ċ; ċ; c◌̇; ċ; c◌̇; ) LATIN SMALL LETTER C WITH DOT ABOVE 010C;010C;0043 030C;010C;0043 030C; # (Č; Č; C◌̌; Č; C◌̌; ) LATIN CAPITAL LETTER C WITH CARON 010D;010D;0063 030C;010D;0063 030C; # (č; č; c◌̌; č; c◌̌; ) LATIN SMALL LETTER C WITH CARON 010E;010E;0044 030C;010E;0044 030C; # (Ď; Ď; D◌̌; Ď; D◌̌; ) LATIN CAPITAL LETTER D WITH CARON 010F;010F;0064 030C;010F;0064 030C; # (ď; ď; d◌̌; ď; d◌̌; ) LATIN SMALL LETTER D WITH CARON 0112;0112;0045 0304;0112;0045 0304; # (Ē; Ē; E◌̄; Ē; E◌̄; ) LATIN CAPITAL LETTER E WITH MACRON 0113;0113;0065 0304;0113;0065 0304; # (ē; ē; e◌̄; ē; e◌̄; ) LATIN SMALL LETTER E WITH MACRON 0114;0114;0045 0306;0114;0045 0306; # (Ĕ; Ĕ; E◌̆; Ĕ; E◌̆; ) LATIN CAPITAL LETTER E WITH BREVE 0115;0115;0065 0306;0115;0065 0306; # (ĕ; ĕ; e◌̆; ĕ; e◌̆; ) LATIN SMALL LETTER E WITH BREVE 0116;0116;0045 0307;0116;0045 0307; # (Ė; Ė; E◌̇; Ė; E◌̇; ) LATIN CAPITAL LETTER E WITH DOT ABOVE 0117;0117;0065 0307;0117;0065 0307; # (ė; ė; e◌̇; ė; e◌̇; ) LATIN SMALL LETTER E WITH DOT ABOVE 0118;0118;0045 0328;0118;0045 0328; # (Ę; Ę; E◌̨; Ę; E◌̨; ) LATIN CAPITAL LETTER E WITH OGONEK 0119;0119;0065 0328;0119;0065 0328; # (ę; ę; e◌̨; ę; e◌̨; ) LATIN SMALL LETTER E WITH OGONEK 011A;011A;0045 030C;011A;0045 030C; # (Ě; Ě; E◌̌; Ě; E◌̌; ) LATIN CAPITAL LETTER E WITH CARON 011B;011B;0065 030C;011B;0065 030C; # (ě; ě; e◌̌; ě; e◌̌; ) LATIN SMALL LETTER E WITH CARON 011C;011C;0047 0302;011C;0047 0302; # (Ĝ; Ĝ; G◌̂; Ĝ; G◌̂; ) LATIN CAPITAL LETTER G WITH CIRCUMFLEX 011D;011D;0067 0302;011D;0067 0302; # (ĝ; ĝ; g◌̂; ĝ; g◌̂; ) LATIN SMALL LETTER G WITH CIRCUMFLEX 011E;011E;0047 0306;011E;0047 0306; # (Ğ; Ğ; G◌̆; Ğ; G◌̆; ) LATIN CAPITAL LETTER G WITH BREVE 011F;011F;0067 0306;011F;0067 0306; # (ğ; ğ; g◌̆; ğ; g◌̆; ) LATIN SMALL LETTER G WITH BREVE 0120;0120;0047 0307;0120;0047 0307; # (Ġ; Ġ; G◌̇; Ġ; G◌̇; ) LATIN CAPITAL LETTER G WITH DOT ABOVE 0121;0121;0067 0307;0121;0067 0307; # (ġ; ġ; g◌̇; ġ; g◌̇; ) LATIN SMALL LETTER G WITH DOT ABOVE 0122;0122;0047 0327;0122;0047 0327; # (Ģ; Ģ; G◌̧; Ģ; G◌̧; ) LATIN CAPITAL LETTER G WITH CEDILLA 0123;0123;0067 0327;0123;0067 0327; # (ģ; ģ; g◌̧; ģ; g◌̧; ) LATIN SMALL LETTER G WITH CEDILLA 0124;0124;0048 0302;0124;0048 0302; # (Ĥ; Ĥ; H◌̂; Ĥ; H◌̂; ) LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0125;0125;0068 0302;0125;0068 0302; # (ĥ; ĥ; h◌̂; ĥ; h◌̂; ) LATIN SMALL LETTER H WITH CIRCUMFLEX 0128;0128;0049 0303;0128;0049 0303; # (Ĩ; Ĩ; I◌̃; Ĩ; I◌̃; ) LATIN CAPITAL LETTER I WITH TILDE 0129;0129;0069 0303;0129;0069 0303; # (ĩ; ĩ; i◌̃; ĩ; i◌̃; ) LATIN SMALL LETTER I WITH TILDE 012A;012A;0049 0304;012A;0049 0304; # (Ī; Ī; I◌̄; Ī; I◌̄; ) LATIN CAPITAL LETTER I WITH MACRON 012B;012B;0069 0304;012B;0069 0304; # (ī; ī; i◌̄; ī; i◌̄; ) LATIN SMALL LETTER I WITH MACRON 012C;012C;0049 0306;012C;0049 0306; # (Ĭ; Ĭ; I◌̆; Ĭ; I◌̆; ) LATIN CAPITAL LETTER I WITH BREVE 012D;012D;0069 0306;012D;0069 0306; # (ĭ; ĭ; i◌̆; ĭ; i◌̆; ) LATIN SMALL LETTER I WITH BREVE 012E;012E;0049 0328;012E;0049 0328; # (Į; Į; I◌̨; Į; I◌̨; ) LATIN CAPITAL LETTER I WITH OGONEK 012F;012F;0069 0328;012F;0069 0328; # (į; į; i◌̨; į; i◌̨; ) LATIN SMALL LETTER I WITH OGONEK 0130;0130;0049 0307;0130;0049 0307; # (İ; İ; I◌̇; İ; I◌̇; ) LATIN CAPITAL LETTER I WITH DOT ABOVE 0132;0132;0132;0049 004A;0049 004A; # (IJ; IJ; IJ; IJ; IJ; ) LATIN CAPITAL LIGATURE IJ 0133;0133;0133;0069 006A;0069 006A; # (ij; ij; ij; ij; ij; ) LATIN SMALL LIGATURE IJ 0134;0134;004A 0302;0134;004A 0302; # (Ĵ; Ĵ; J◌̂; Ĵ; J◌̂; ) LATIN CAPITAL LETTER J WITH CIRCUMFLEX 0135;0135;006A 0302;0135;006A 0302; # (ĵ; ĵ; j◌̂; ĵ; j◌̂; ) LATIN SMALL LETTER J WITH CIRCUMFLEX 0136;0136;004B 0327;0136;004B 0327; # (Ķ; Ķ; K◌̧; Ķ; K◌̧; ) LATIN CAPITAL LETTER K WITH CEDILLA 0137;0137;006B 0327;0137;006B 0327; # (ķ; ķ; k◌̧; ķ; k◌̧; ) LATIN SMALL LETTER K WITH CEDILLA 0139;0139;004C 0301;0139;004C 0301; # (Ĺ; Ĺ; L◌́; Ĺ; L◌́; ) LATIN CAPITAL LETTER L WITH ACUTE 013A;013A;006C 0301;013A;006C 0301; # (ĺ; ĺ; l◌́; ĺ; l◌́; ) LATIN SMALL LETTER L WITH ACUTE 013B;013B;004C 0327;013B;004C 0327; # (Ļ; Ļ; L◌̧; Ļ; L◌̧; ) LATIN CAPITAL LETTER L WITH CEDILLA 013C;013C;006C 0327;013C;006C 0327; # (ļ; ļ; l◌̧; ļ; l◌̧; ) LATIN SMALL LETTER L WITH CEDILLA 013D;013D;004C 030C;013D;004C 030C; # (Ľ; Ľ; L◌̌; Ľ; L◌̌; ) LATIN CAPITAL LETTER L WITH CARON 013E;013E;006C 030C;013E;006C 030C; # (ľ; ľ; l◌̌; ľ; l◌̌; ) LATIN SMALL LETTER L WITH CARON 013F;013F;013F;004C 00B7;004C 00B7; # (Ŀ; Ŀ; Ŀ; L·; L·; ) LATIN CAPITAL LETTER L WITH MIDDLE DOT 0140;0140;0140;006C 00B7;006C 00B7; # (ŀ; ŀ; ŀ; l·; l·; ) LATIN SMALL LETTER L WITH MIDDLE DOT 0143;0143;004E 0301;0143;004E 0301; # (Ń; Ń; N◌́; Ń; N◌́; ) LATIN CAPITAL LETTER N WITH ACUTE 0144;0144;006E 0301;0144;006E 0301; # (ń; ń; n◌́; ń; n◌́; ) LATIN SMALL LETTER N WITH ACUTE 0145;0145;004E 0327;0145;004E 0327; # (Ņ; Ņ; N◌̧; Ņ; N◌̧; ) LATIN CAPITAL LETTER N WITH CEDILLA 0146;0146;006E 0327;0146;006E 0327; # (ņ; ņ; n◌̧; ņ; n◌̧; ) LATIN SMALL LETTER N WITH CEDILLA 0147;0147;004E 030C;0147;004E 030C; # (Ň; Ň; N◌̌; Ň; N◌̌; ) LATIN CAPITAL LETTER N WITH CARON 0148;0148;006E 030C;0148;006E 030C; # (ň; ň; n◌̌; ň; n◌̌; ) LATIN SMALL LETTER N WITH CARON 0149;0149;0149;02BC 006E;02BC 006E; # (ʼn; ʼn; ʼn; ʼn; ʼn; ) LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 014C;014C;004F 0304;014C;004F 0304; # (Ō; Ō; O◌̄; Ō; O◌̄; ) LATIN CAPITAL LETTER O WITH MACRON 014D;014D;006F 0304;014D;006F 0304; # (ō; ō; o◌̄; ō; o◌̄; ) LATIN SMALL LETTER O WITH MACRON 014E;014E;004F 0306;014E;004F 0306; # (Ŏ; Ŏ; O◌̆; Ŏ; O◌̆; ) LATIN CAPITAL LETTER O WITH BREVE 014F;014F;006F 0306;014F;006F 0306; # (ŏ; ŏ; o◌̆; ŏ; o◌̆; ) LATIN SMALL LETTER O WITH BREVE 0150;0150;004F 030B;0150;004F 030B; # (Ő; Ő; O◌̋; Ő; O◌̋; ) LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0151;0151;006F 030B;0151;006F 030B; # (ő; ő; o◌̋; ő; o◌̋; ) LATIN SMALL LETTER O WITH DOUBLE ACUTE 0154;0154;0052 0301;0154;0052 0301; # (Ŕ; Ŕ; R◌́; Ŕ; R◌́; ) LATIN CAPITAL LETTER R WITH ACUTE 0155;0155;0072 0301;0155;0072 0301; # (ŕ; ŕ; r◌́; ŕ; r◌́; ) LATIN SMALL LETTER R WITH ACUTE 0156;0156;0052 0327;0156;0052 0327; # (Ŗ; Ŗ; R◌̧; Ŗ; R◌̧; ) LATIN CAPITAL LETTER R WITH CEDILLA 0157;0157;0072 0327;0157;0072 0327; # (ŗ; ŗ; r◌̧; ŗ; r◌̧; ) LATIN SMALL LETTER R WITH CEDILLA 0158;0158;0052 030C;0158;0052 030C; # (Ř; Ř; R◌̌; Ř; R◌̌; ) LATIN CAPITAL LETTER R WITH CARON 0159;0159;0072 030C;0159;0072 030C; # (ř; ř; r◌̌; ř; r◌̌; ) LATIN SMALL LETTER R WITH CARON 015A;015A;0053 0301;015A;0053 0301; # (Ś; Ś; S◌́; Ś; S◌́; ) LATIN CAPITAL LETTER S WITH ACUTE 015B;015B;0073 0301;015B;0073 0301; # (ś; ś; s◌́; ś; s◌́; ) LATIN SMALL LETTER S WITH ACUTE 015C;015C;0053 0302;015C;0053 0302; # (Ŝ; Ŝ; S◌̂; Ŝ; S◌̂; ) LATIN CAPITAL LETTER S WITH CIRCUMFLEX 015D;015D;0073 0302;015D;0073 0302; # (ŝ; ŝ; s◌̂; ŝ; s◌̂; ) LATIN SMALL LETTER S WITH CIRCUMFLEX 015E;015E;0053 0327;015E;0053 0327; # (Ş; Ş; S◌̧; Ş; S◌̧; ) LATIN CAPITAL LETTER S WITH CEDILLA 015F;015F;0073 0327;015F;0073 0327; # (ş; ş; s◌̧; ş; s◌̧; ) LATIN SMALL LETTER S WITH CEDILLA 0160;0160;0053 030C;0160;0053 030C; # (Š; Š; S◌̌; Š; S◌̌; ) LATIN CAPITAL LETTER S WITH CARON 0161;0161;0073 030C;0161;0073 030C; # (š; š; s◌̌; š; s◌̌; ) LATIN SMALL LETTER S WITH CARON 0162;0162;0054 0327;0162;0054 0327; # (Ţ; Ţ; T◌̧; Ţ; T◌̧; ) LATIN CAPITAL LETTER T WITH CEDILLA 0163;0163;0074 0327;0163;0074 0327; # (ţ; ţ; t◌̧; ţ; t◌̧; ) LATIN SMALL LETTER T WITH CEDILLA 0164;0164;0054 030C;0164;0054 030C; # (Ť; Ť; T◌̌; Ť; T◌̌; ) LATIN CAPITAL LETTER T WITH CARON 0165;0165;0074 030C;0165;0074 030C; # (ť; ť; t◌̌; ť; t◌̌; ) LATIN SMALL LETTER T WITH CARON 0168;0168;0055 0303;0168;0055 0303; # (Ũ; Ũ; U◌̃; Ũ; U◌̃; ) LATIN CAPITAL LETTER U WITH TILDE 0169;0169;0075 0303;0169;0075 0303; # (ũ; ũ; u◌̃; ũ; u◌̃; ) LATIN SMALL LETTER U WITH TILDE 016A;016A;0055 0304;016A;0055 0304; # (Ū; Ū; U◌̄; Ū; U◌̄; ) LATIN CAPITAL LETTER U WITH MACRON 016B;016B;0075 0304;016B;0075 0304; # (ū; ū; u◌̄; ū; u◌̄; ) LATIN SMALL LETTER U WITH MACRON 016C;016C;0055 0306;016C;0055 0306; # (Ŭ; Ŭ; U◌̆; Ŭ; U◌̆; ) LATIN CAPITAL LETTER U WITH BREVE 016D;016D;0075 0306;016D;0075 0306; # (ŭ; ŭ; u◌̆; ŭ; u◌̆; ) LATIN SMALL LETTER U WITH BREVE 016E;016E;0055 030A;016E;0055 030A; # (Ů; Ů; U◌̊; Ů; U◌̊; ) LATIN CAPITAL LETTER U WITH RING ABOVE 016F;016F;0075 030A;016F;0075 030A; # (ů; ů; u◌̊; ů; u◌̊; ) LATIN SMALL LETTER U WITH RING ABOVE 0170;0170;0055 030B;0170;0055 030B; # (Ű; Ű; U◌̋; Ű; U◌̋; ) LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0171;0171;0075 030B;0171;0075 030B; # (ű; ű; u◌̋; ű; u◌̋; ) LATIN SMALL LETTER U WITH DOUBLE ACUTE 0172;0172;0055 0328;0172;0055 0328; # (Ų; Ų; U◌̨; Ų; U◌̨; ) LATIN CAPITAL LETTER U WITH OGONEK 0173;0173;0075 0328;0173;0075 0328; # (ų; ų; u◌̨; ų; u◌̨; ) LATIN SMALL LETTER U WITH OGONEK 0174;0174;0057 0302;0174;0057 0302; # (Ŵ; Ŵ; W◌̂; Ŵ; W◌̂; ) LATIN CAPITAL LETTER W WITH CIRCUMFLEX 0175;0175;0077 0302;0175;0077 0302; # (ŵ; ŵ; w◌̂; ŵ; w◌̂; ) LATIN SMALL LETTER W WITH CIRCUMFLEX 0176;0176;0059 0302;0176;0059 0302; # (Ŷ; Ŷ; Y◌̂; Ŷ; Y◌̂; ) LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0177;0177;0079 0302;0177;0079 0302; # (ŷ; ŷ; y◌̂; ŷ; y◌̂; ) LATIN SMALL LETTER Y WITH CIRCUMFLEX 0178;0178;0059 0308;0178;0059 0308; # (Ÿ; Ÿ; Y◌̈; Ÿ; Y◌̈; ) LATIN CAPITAL LETTER Y WITH DIAERESIS 0179;0179;005A 0301;0179;005A 0301; # (Ź; Ź; Z◌́; Ź; Z◌́; ) LATIN CAPITAL LETTER Z WITH ACUTE 017A;017A;007A 0301;017A;007A 0301; # (ź; ź; z◌́; ź; z◌́; ) LATIN SMALL LETTER Z WITH ACUTE 017B;017B;005A 0307;017B;005A 0307; # (Ż; Ż; Z◌̇; Ż; Z◌̇; ) LATIN CAPITAL LETTER Z WITH DOT ABOVE 017C;017C;007A 0307;017C;007A 0307; # (ż; ż; z◌̇; ż; z◌̇; ) LATIN SMALL LETTER Z WITH DOT ABOVE 017D;017D;005A 030C;017D;005A 030C; # (Ž; Ž; Z◌̌; Ž; Z◌̌; ) LATIN CAPITAL LETTER Z WITH CARON 017E;017E;007A 030C;017E;007A 030C; # (ž; ž; z◌̌; ž; z◌̌; ) LATIN SMALL LETTER Z WITH CARON 017F;017F;017F;0073;0073; # (ſ; ſ; ſ; s; s; ) LATIN SMALL LETTER LONG S 01A0;01A0;004F 031B;01A0;004F 031B; # (Ơ; Ơ; O◌̛; Ơ; O◌̛; ) LATIN CAPITAL LETTER O WITH HORN 01A1;01A1;006F 031B;01A1;006F 031B; # (ơ; ơ; o◌̛; ơ; o◌̛; ) LATIN SMALL LETTER O WITH HORN 01AF;01AF;0055 031B;01AF;0055 031B; # (Ư; Ư; U◌̛; Ư; U◌̛; ) LATIN CAPITAL LETTER U WITH HORN 01B0;01B0;0075 031B;01B0;0075 031B; # (ư; ư; u◌̛; ư; u◌̛; ) LATIN SMALL LETTER U WITH HORN 01C4;01C4;01C4;0044 017D;0044 005A 030C; # (DŽ; DŽ; DŽ; DŽ; DZ◌̌; ) LATIN CAPITAL LETTER DZ WITH CARON 01C5;01C5;01C5;0044 017E;0044 007A 030C; # (Dž; Dž; Dž; Dž; Dz◌̌; ) LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 01C6;01C6;01C6;0064 017E;0064 007A 030C; # (dž; dž; dž; dž; dz◌̌; ) LATIN SMALL LETTER DZ WITH CARON 01C7;01C7;01C7;004C 004A;004C 004A; # (LJ; LJ; LJ; LJ; LJ; ) LATIN CAPITAL LETTER LJ 01C8;01C8;01C8;004C 006A;004C 006A; # (Lj; Lj; Lj; Lj; Lj; ) LATIN CAPITAL LETTER L WITH SMALL LETTER J 01C9;01C9;01C9;006C 006A;006C 006A; # (lj; lj; lj; lj; lj; ) LATIN SMALL LETTER LJ 01CA;01CA;01CA;004E 004A;004E 004A; # (NJ; NJ; NJ; NJ; NJ; ) LATIN CAPITAL LETTER NJ 01CB;01CB;01CB;004E 006A;004E 006A; # (Nj; Nj; Nj; Nj; Nj; ) LATIN CAPITAL LETTER N WITH SMALL LETTER J 01CC;01CC;01CC;006E 006A;006E 006A; # (nj; nj; nj; nj; nj; ) LATIN SMALL LETTER NJ 01CD;01CD;0041 030C;01CD;0041 030C; # (Ǎ; Ǎ; A◌̌; Ǎ; A◌̌; ) LATIN CAPITAL LETTER A WITH CARON 01CE;01CE;0061 030C;01CE;0061 030C; # (ǎ; ǎ; a◌̌; ǎ; a◌̌; ) LATIN SMALL LETTER A WITH CARON 01CF;01CF;0049 030C;01CF;0049 030C; # (Ǐ; Ǐ; I◌̌; Ǐ; I◌̌; ) LATIN CAPITAL LETTER I WITH CARON 01D0;01D0;0069 030C;01D0;0069 030C; # (ǐ; ǐ; i◌̌; ǐ; i◌̌; ) LATIN SMALL LETTER I WITH CARON 01D1;01D1;004F 030C;01D1;004F 030C; # (Ǒ; Ǒ; O◌̌; Ǒ; O◌̌; ) LATIN CAPITAL LETTER O WITH CARON 01D2;01D2;006F 030C;01D2;006F 030C; # (ǒ; ǒ; o◌̌; ǒ; o◌̌; ) LATIN SMALL LETTER O WITH CARON 01D3;01D3;0055 030C;01D3;0055 030C; # (Ǔ; Ǔ; U◌̌; Ǔ; U◌̌; ) LATIN CAPITAL LETTER U WITH CARON 01D4;01D4;0075 030C;01D4;0075 030C; # (ǔ; ǔ; u◌̌; ǔ; u◌̌; ) LATIN SMALL LETTER U WITH CARON 01D5;01D5;0055 0308 0304;01D5;0055 0308 0304; # (Ǖ; Ǖ; U◌̈◌̄; Ǖ; U◌̈◌̄; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01D6;01D6;0075 0308 0304;01D6;0075 0308 0304; # (ǖ; ǖ; u◌̈◌̄; ǖ; u◌̈◌̄; ) LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D7;01D7;0055 0308 0301;01D7;0055 0308 0301; # (Ǘ; Ǘ; U◌̈◌́; Ǘ; U◌̈◌́; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D8;01D8;0075 0308 0301;01D8;0075 0308 0301; # (ǘ; ǘ; u◌̈◌́; ǘ; u◌̈◌́; ) LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D9;01D9;0055 0308 030C;01D9;0055 0308 030C; # (Ǚ; Ǚ; U◌̈◌̌; Ǚ; U◌̈◌̌; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 01DA;01DA;0075 0308 030C;01DA;0075 0308 030C; # (ǚ; ǚ; u◌̈◌̌; ǚ; u◌̈◌̌; ) LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01DB;01DB;0055 0308 0300;01DB;0055 0308 0300; # (Ǜ; Ǜ; U◌̈◌̀; Ǜ; U◌̈◌̀; ) LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01DC;01DC;0075 0308 0300;01DC;0075 0308 0300; # (ǜ; ǜ; u◌̈◌̀; ǜ; u◌̈◌̀; ) LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DE;01DE;0041 0308 0304;01DE;0041 0308 0304; # (Ǟ; Ǟ; A◌̈◌̄; Ǟ; A◌̈◌̄; ) LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 01DF;01DF;0061 0308 0304;01DF;0061 0308 0304; # (ǟ; ǟ; a◌̈◌̄; ǟ; a◌̈◌̄; ) LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01E0;01E0;0041 0307 0304;01E0;0041 0307 0304; # (Ǡ; Ǡ; A◌̇◌̄; Ǡ; A◌̇◌̄; ) LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON 01E1;01E1;0061 0307 0304;01E1;0061 0307 0304; # (ǡ; ǡ; a◌̇◌̄; ǡ; a◌̇◌̄; ) LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON 01E2;01E2;00C6 0304;01E2;00C6 0304; # (Ǣ; Ǣ; Æ◌̄; Ǣ; Æ◌̄; ) LATIN CAPITAL LETTER AE WITH MACRON 01E3;01E3;00E6 0304;01E3;00E6 0304; # (ǣ; ǣ; æ◌̄; ǣ; æ◌̄; ) LATIN SMALL LETTER AE WITH MACRON 01E6;01E6;0047 030C;01E6;0047 030C; # (Ǧ; Ǧ; G◌̌; Ǧ; G◌̌; ) LATIN CAPITAL LETTER G WITH CARON 01E7;01E7;0067 030C;01E7;0067 030C; # (ǧ; ǧ; g◌̌; ǧ; g◌̌; ) LATIN SMALL LETTER G WITH CARON 01E8;01E8;004B 030C;01E8;004B 030C; # (Ǩ; Ǩ; K◌̌; Ǩ; K◌̌; ) LATIN CAPITAL LETTER K WITH CARON 01E9;01E9;006B 030C;01E9;006B 030C; # (ǩ; ǩ; k◌̌; ǩ; k◌̌; ) LATIN SMALL LETTER K WITH CARON 01EA;01EA;004F 0328;01EA;004F 0328; # (Ǫ; Ǫ; O◌̨; Ǫ; O◌̨; ) LATIN CAPITAL LETTER O WITH OGONEK 01EB;01EB;006F 0328;01EB;006F 0328; # (ǫ; ǫ; o◌̨; ǫ; o◌̨; ) LATIN SMALL LETTER O WITH OGONEK 01EC;01EC;004F 0328 0304;01EC;004F 0328 0304; # (Ǭ; Ǭ; O◌̨◌̄; Ǭ; O◌̨◌̄; ) LATIN CAPITAL LETTER O WITH OGONEK AND MACRON 01ED;01ED;006F 0328 0304;01ED;006F 0328 0304; # (ǭ; ǭ; o◌̨◌̄; ǭ; o◌̨◌̄; ) LATIN SMALL LETTER O WITH OGONEK AND MACRON 01EE;01EE;01B7 030C;01EE;01B7 030C; # (Ǯ; Ǯ; Ʒ◌̌; Ǯ; Ʒ◌̌; ) LATIN CAPITAL LETTER EZH WITH CARON 01EF;01EF;0292 030C;01EF;0292 030C; # (ǯ; ǯ; ʒ◌̌; ǯ; ʒ◌̌; ) LATIN SMALL LETTER EZH WITH CARON 01F0;01F0;006A 030C;01F0;006A 030C; # (ǰ; ǰ; j◌̌; ǰ; j◌̌; ) LATIN SMALL LETTER J WITH CARON 01F1;01F1;01F1;0044 005A;0044 005A; # (DZ; DZ; DZ; DZ; DZ; ) LATIN CAPITAL LETTER DZ 01F2;01F2;01F2;0044 007A;0044 007A; # (Dz; Dz; Dz; Dz; Dz; ) LATIN CAPITAL LETTER D WITH SMALL LETTER Z 01F3;01F3;01F3;0064 007A;0064 007A; # (dz; dz; dz; dz; dz; ) LATIN SMALL LETTER DZ 01F4;01F4;0047 0301;01F4;0047 0301; # (Ǵ; Ǵ; G◌́; Ǵ; G◌́; ) LATIN CAPITAL LETTER G WITH ACUTE 01F5;01F5;0067 0301;01F5;0067 0301; # (ǵ; ǵ; g◌́; ǵ; g◌́; ) LATIN SMALL LETTER G WITH ACUTE 01F8;01F8;004E 0300;01F8;004E 0300; # (Ǹ; Ǹ; N◌̀; Ǹ; N◌̀; ) LATIN CAPITAL LETTER N WITH GRAVE 01F9;01F9;006E 0300;01F9;006E 0300; # (ǹ; ǹ; n◌̀; ǹ; n◌̀; ) LATIN SMALL LETTER N WITH GRAVE 01FA;01FA;0041 030A 0301;01FA;0041 030A 0301; # (Ǻ; Ǻ; A◌̊◌́; Ǻ; A◌̊◌́; ) LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 01FB;01FB;0061 030A 0301;01FB;0061 030A 0301; # (ǻ; ǻ; a◌̊◌́; ǻ; a◌̊◌́; ) LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FC;01FC;00C6 0301;01FC;00C6 0301; # (Ǽ; Ǽ; Æ◌́; Ǽ; Æ◌́; ) LATIN CAPITAL LETTER AE WITH ACUTE 01FD;01FD;00E6 0301;01FD;00E6 0301; # (ǽ; ǽ; æ◌́; ǽ; æ◌́; ) LATIN SMALL LETTER AE WITH ACUTE 01FE;01FE;00D8 0301;01FE;00D8 0301; # (Ǿ; Ǿ; Ø◌́; Ǿ; Ø◌́; ) LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 01FF;01FF;00F8 0301;01FF;00F8 0301; # (ǿ; ǿ; ø◌́; ǿ; ø◌́; ) LATIN SMALL LETTER O WITH STROKE AND ACUTE 0200;0200;0041 030F;0200;0041 030F; # (Ȁ; Ȁ; A◌̏; Ȁ; A◌̏; ) LATIN CAPITAL LETTER A WITH DOUBLE GRAVE 0201;0201;0061 030F;0201;0061 030F; # (ȁ; ȁ; a◌̏; ȁ; a◌̏; ) LATIN SMALL LETTER A WITH DOUBLE GRAVE 0202;0202;0041 0311;0202;0041 0311; # (Ȃ; Ȃ; A◌̑; Ȃ; A◌̑; ) LATIN CAPITAL LETTER A WITH INVERTED BREVE 0203;0203;0061 0311;0203;0061 0311; # (ȃ; ȃ; a◌̑; ȃ; a◌̑; ) LATIN SMALL LETTER A WITH INVERTED BREVE 0204;0204;0045 030F;0204;0045 030F; # (Ȅ; Ȅ; E◌̏; Ȅ; E◌̏; ) LATIN CAPITAL LETTER E WITH DOUBLE GRAVE 0205;0205;0065 030F;0205;0065 030F; # (ȅ; ȅ; e◌̏; ȅ; e◌̏; ) LATIN SMALL LETTER E WITH DOUBLE GRAVE 0206;0206;0045 0311;0206;0045 0311; # (Ȇ; Ȇ; E◌̑; Ȇ; E◌̑; ) LATIN CAPITAL LETTER E WITH INVERTED BREVE 0207;0207;0065 0311;0207;0065 0311; # (ȇ; ȇ; e◌̑; ȇ; e◌̑; ) LATIN SMALL LETTER E WITH INVERTED BREVE 0208;0208;0049 030F;0208;0049 030F; # (Ȉ; Ȉ; I◌̏; Ȉ; I◌̏; ) LATIN CAPITAL LETTER I WITH DOUBLE GRAVE 0209;0209;0069 030F;0209;0069 030F; # (ȉ; ȉ; i◌̏; ȉ; i◌̏; ) LATIN SMALL LETTER I WITH DOUBLE GRAVE 020A;020A;0049 0311;020A;0049 0311; # (Ȋ; Ȋ; I◌̑; Ȋ; I◌̑; ) LATIN CAPITAL LETTER I WITH INVERTED BREVE 020B;020B;0069 0311;020B;0069 0311; # (ȋ; ȋ; i◌̑; ȋ; i◌̑; ) LATIN SMALL LETTER I WITH INVERTED BREVE 020C;020C;004F 030F;020C;004F 030F; # (Ȍ; Ȍ; O◌̏; Ȍ; O◌̏; ) LATIN CAPITAL LETTER O WITH DOUBLE GRAVE 020D;020D;006F 030F;020D;006F 030F; # (ȍ; ȍ; o◌̏; ȍ; o◌̏; ) LATIN SMALL LETTER O WITH DOUBLE GRAVE 020E;020E;004F 0311;020E;004F 0311; # (Ȏ; Ȏ; O◌̑; Ȏ; O◌̑; ) LATIN CAPITAL LETTER O WITH INVERTED BREVE 020F;020F;006F 0311;020F;006F 0311; # (ȏ; ȏ; o◌̑; ȏ; o◌̑; ) LATIN SMALL LETTER O WITH INVERTED BREVE 0210;0210;0052 030F;0210;0052 030F; # (Ȑ; Ȑ; R◌̏; Ȑ; R◌̏; ) LATIN CAPITAL LETTER R WITH DOUBLE GRAVE 0211;0211;0072 030F;0211;0072 030F; # (ȑ; ȑ; r◌̏; ȑ; r◌̏; ) LATIN SMALL LETTER R WITH DOUBLE GRAVE 0212;0212;0052 0311;0212;0052 0311; # (Ȓ; Ȓ; R◌̑; Ȓ; R◌̑; ) LATIN CAPITAL LETTER R WITH INVERTED BREVE 0213;0213;0072 0311;0213;0072 0311; # (ȓ; ȓ; r◌̑; ȓ; r◌̑; ) LATIN SMALL LETTER R WITH INVERTED BREVE 0214;0214;0055 030F;0214;0055 030F; # (Ȕ; Ȕ; U◌̏; Ȕ; U◌̏; ) LATIN CAPITAL LETTER U WITH DOUBLE GRAVE 0215;0215;0075 030F;0215;0075 030F; # (ȕ; ȕ; u◌̏; ȕ; u◌̏; ) LATIN SMALL LETTER U WITH DOUBLE GRAVE 0216;0216;0055 0311;0216;0055 0311; # (Ȗ; Ȗ; U◌̑; Ȗ; U◌̑; ) LATIN CAPITAL LETTER U WITH INVERTED BREVE 0217;0217;0075 0311;0217;0075 0311; # (ȗ; ȗ; u◌̑; ȗ; u◌̑; ) LATIN SMALL LETTER U WITH INVERTED BREVE 0218;0218;0053 0326;0218;0053 0326; # (Ș; Ș; S◌̦; Ș; S◌̦; ) LATIN CAPITAL LETTER S WITH COMMA BELOW 0219;0219;0073 0326;0219;0073 0326; # (ș; ș; s◌̦; ș; s◌̦; ) LATIN SMALL LETTER S WITH COMMA BELOW 021A;021A;0054 0326;021A;0054 0326; # (Ț; Ț; T◌̦; Ț; T◌̦; ) LATIN CAPITAL LETTER T WITH COMMA BELOW 021B;021B;0074 0326;021B;0074 0326; # (ț; ț; t◌̦; ț; t◌̦; ) LATIN SMALL LETTER T WITH COMMA BELOW 021E;021E;0048 030C;021E;0048 030C; # (Ȟ; Ȟ; H◌̌; Ȟ; H◌̌; ) LATIN CAPITAL LETTER H WITH CARON 021F;021F;0068 030C;021F;0068 030C; # (ȟ; ȟ; h◌̌; ȟ; h◌̌; ) LATIN SMALL LETTER H WITH CARON 0226;0226;0041 0307;0226;0041 0307; # (Ȧ; Ȧ; A◌̇; Ȧ; A◌̇; ) LATIN CAPITAL LETTER A WITH DOT ABOVE 0227;0227;0061 0307;0227;0061 0307; # (ȧ; ȧ; a◌̇; ȧ; a◌̇; ) LATIN SMALL LETTER A WITH DOT ABOVE 0228;0228;0045 0327;0228;0045 0327; # (Ȩ; Ȩ; E◌̧; Ȩ; E◌̧; ) LATIN CAPITAL LETTER E WITH CEDILLA 0229;0229;0065 0327;0229;0065 0327; # (ȩ; ȩ; e◌̧; ȩ; e◌̧; ) LATIN SMALL LETTER E WITH CEDILLA 022A;022A;004F 0308 0304;022A;004F 0308 0304; # (Ȫ; Ȫ; O◌̈◌̄; Ȫ; O◌̈◌̄; ) LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 022B;022B;006F 0308 0304;022B;006F 0308 0304; # (ȫ; ȫ; o◌̈◌̄; ȫ; o◌̈◌̄; ) LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022C;022C;004F 0303 0304;022C;004F 0303 0304; # (Ȭ; Ȭ; O◌̃◌̄; Ȭ; O◌̃◌̄; ) LATIN CAPITAL LETTER O WITH TILDE AND MACRON 022D;022D;006F 0303 0304;022D;006F 0303 0304; # (ȭ; ȭ; o◌̃◌̄; ȭ; o◌̃◌̄; ) LATIN SMALL LETTER O WITH TILDE AND MACRON 022E;022E;004F 0307;022E;004F 0307; # (Ȯ; Ȯ; O◌̇; Ȯ; O◌̇; ) LATIN CAPITAL LETTER O WITH DOT ABOVE 022F;022F;006F 0307;022F;006F 0307; # (ȯ; ȯ; o◌̇; ȯ; o◌̇; ) LATIN SMALL LETTER O WITH DOT ABOVE 0230;0230;004F 0307 0304;0230;004F 0307 0304; # (Ȱ; Ȱ; O◌̇◌̄; Ȱ; O◌̇◌̄; ) LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 0231;0231;006F 0307 0304;0231;006F 0307 0304; # (ȱ; ȱ; o◌̇◌̄; ȱ; o◌̇◌̄; ) LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON 0232;0232;0059 0304;0232;0059 0304; # (Ȳ; Ȳ; Y◌̄; Ȳ; Y◌̄; ) LATIN CAPITAL LETTER Y WITH MACRON 0233;0233;0079 0304;0233;0079 0304; # (ȳ; ȳ; y◌̄; ȳ; y◌̄; ) LATIN SMALL LETTER Y WITH MACRON 02B0;02B0;02B0;0068;0068; # (ʰ; ʰ; ʰ; h; h; ) MODIFIER LETTER SMALL H 02B1;02B1;02B1;0266;0266; # (ʱ; ʱ; ʱ; ɦ; ɦ; ) MODIFIER LETTER SMALL H WITH HOOK 02B2;02B2;02B2;006A;006A; # (ʲ; ʲ; ʲ; j; j; ) MODIFIER LETTER SMALL J 02B3;02B3;02B3;0072;0072; # (ʳ; ʳ; ʳ; r; r; ) MODIFIER LETTER SMALL R 02B4;02B4;02B4;0279;0279; # (ʴ; ʴ; ʴ; ɹ; ɹ; ) MODIFIER LETTER SMALL TURNED R 02B5;02B5;02B5;027B;027B; # (ʵ; ʵ; ʵ; ɻ; ɻ; ) MODIFIER LETTER SMALL TURNED R WITH HOOK 02B6;02B6;02B6;0281;0281; # (ʶ; ʶ; ʶ; ʁ; ʁ; ) MODIFIER LETTER SMALL CAPITAL INVERTED R 02B7;02B7;02B7;0077;0077; # (ʷ; ʷ; ʷ; w; w; ) MODIFIER LETTER SMALL W 02B8;02B8;02B8;0079;0079; # (ʸ; ʸ; ʸ; y; y; ) MODIFIER LETTER SMALL Y 02D8;02D8;02D8;0020 0306;0020 0306; # (˘; ˘; ˘; ◌̆; ◌̆; ) BREVE 02D9;02D9;02D9;0020 0307;0020 0307; # (˙; ˙; ˙; ◌̇; ◌̇; ) DOT ABOVE 02DA;02DA;02DA;0020 030A;0020 030A; # (˚; ˚; ˚; ◌̊; ◌̊; ) RING ABOVE 02DB;02DB;02DB;0020 0328;0020 0328; # (˛; ˛; ˛; ◌̨; ◌̨; ) OGONEK 02DC;02DC;02DC;0020 0303;0020 0303; # (˜; ˜; ˜; ◌̃; ◌̃; ) SMALL TILDE 02DD;02DD;02DD;0020 030B;0020 030B; # (˝; ˝; ˝; ◌̋; ◌̋; ) DOUBLE ACUTE ACCENT 02E0;02E0;02E0;0263;0263; # (ˠ; ˠ; ˠ; ɣ; ɣ; ) MODIFIER LETTER SMALL GAMMA 02E1;02E1;02E1;006C;006C; # (ˡ; ˡ; ˡ; l; l; ) MODIFIER LETTER SMALL L 02E2;02E2;02E2;0073;0073; # (ˢ; ˢ; ˢ; s; s; ) MODIFIER LETTER SMALL S 02E3;02E3;02E3;0078;0078; # (ˣ; ˣ; ˣ; x; x; ) MODIFIER LETTER SMALL X 02E4;02E4;02E4;0295;0295; # (ˤ; ˤ; ˤ; ʕ; ʕ; ) MODIFIER LETTER SMALL REVERSED GLOTTAL STOP 0340;0300;0300;0300;0300; # (◌̀; ◌̀; ◌̀; ◌̀; ◌̀; ) COMBINING GRAVE TONE MARK 0341;0301;0301;0301;0301; # (◌́; ◌́; ◌́; ◌́; ◌́; ) COMBINING ACUTE TONE MARK 0343;0313;0313;0313;0313; # (◌̓; ◌̓; ◌̓; ◌̓; ◌̓; ) COMBINING GREEK KORONIS 0344;0308 0301;0308 0301;0308 0301;0308 0301; # (◌̈́; ◌̈◌́; ◌̈◌́; ◌̈◌́; ◌̈◌́; ) COMBINING GREEK DIALYTIKA TONOS 0374;02B9;02B9;02B9;02B9; # (ʹ; ʹ; ʹ; ʹ; ʹ; ) GREEK NUMERAL SIGN 037A;037A;037A;0020 0345;0020 0345; # (ͺ; ͺ; ͺ; ◌ͅ; ◌ͅ; ) GREEK YPOGEGRAMMENI 037E;003B;003B;003B;003B; # (;; ;; ;; ;; ;; ) GREEK QUESTION MARK 0384;0384;0384;0020 0301;0020 0301; # (΄; ΄; ΄; ◌́; ◌́; ) GREEK TONOS 0385;0385;00A8 0301;0020 0308 0301;0020 0308 0301; # (΅; ΅; ¨◌́; ◌̈◌́; ◌̈◌́; ) GREEK DIALYTIKA TONOS 0386;0386;0391 0301;0386;0391 0301; # (Ά; Ά; Α◌́; Ά; Α◌́; ) GREEK CAPITAL LETTER ALPHA WITH TONOS 0387;00B7;00B7;00B7;00B7; # (·; ·; ·; ·; ·; ) GREEK ANO TELEIA 0388;0388;0395 0301;0388;0395 0301; # (Έ; Έ; Ε◌́; Έ; Ε◌́; ) GREEK CAPITAL LETTER EPSILON WITH TONOS 0389;0389;0397 0301;0389;0397 0301; # (Ή; Ή; Η◌́; Ή; Η◌́; ) GREEK CAPITAL LETTER ETA WITH TONOS 038A;038A;0399 0301;038A;0399 0301; # (Ί; Ί; Ι◌́; Ί; Ι◌́; ) GREEK CAPITAL LETTER IOTA WITH TONOS 038C;038C;039F 0301;038C;039F 0301; # (Ό; Ό; Ο◌́; Ό; Ο◌́; ) GREEK CAPITAL LETTER OMICRON WITH TONOS 038E;038E;03A5 0301;038E;03A5 0301; # (Ύ; Ύ; Υ◌́; Ύ; Υ◌́; ) GREEK CAPITAL LETTER UPSILON WITH TONOS 038F;038F;03A9 0301;038F;03A9 0301; # (Ώ; Ώ; Ω◌́; Ώ; Ω◌́; ) GREEK CAPITAL LETTER OMEGA WITH TONOS 0390;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ΐ; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 03AA;03AA;0399 0308;03AA;0399 0308; # (Ϊ; Ϊ; Ι◌̈; Ϊ; Ι◌̈; ) GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 03AB;03AB;03A5 0308;03AB;03A5 0308; # (Ϋ; Ϋ; Υ◌̈; Ϋ; Υ◌̈; ) GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 03AC;03AC;03B1 0301;03AC;03B1 0301; # (ά; ά; α◌́; ά; α◌́; ) GREEK SMALL LETTER ALPHA WITH TONOS 03AD;03AD;03B5 0301;03AD;03B5 0301; # (έ; έ; ε◌́; έ; ε◌́; ) GREEK SMALL LETTER EPSILON WITH TONOS 03AE;03AE;03B7 0301;03AE;03B7 0301; # (ή; ή; η◌́; ή; η◌́; ) GREEK SMALL LETTER ETA WITH TONOS 03AF;03AF;03B9 0301;03AF;03B9 0301; # (ί; ί; ι◌́; ί; ι◌́; ) GREEK SMALL LETTER IOTA WITH TONOS 03B0;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ΰ; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 03CA;03CA;03B9 0308;03CA;03B9 0308; # (ϊ; ϊ; ι◌̈; ϊ; ι◌̈; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA 03CB;03CB;03C5 0308;03CB;03C5 0308; # (ϋ; ϋ; υ◌̈; ϋ; υ◌̈; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA 03CC;03CC;03BF 0301;03CC;03BF 0301; # (ό; ό; ο◌́; ό; ο◌́; ) GREEK SMALL LETTER OMICRON WITH TONOS 03CD;03CD;03C5 0301;03CD;03C5 0301; # (ύ; ύ; υ◌́; ύ; υ◌́; ) GREEK SMALL LETTER UPSILON WITH TONOS 03CE;03CE;03C9 0301;03CE;03C9 0301; # (ώ; ώ; ω◌́; ώ; ω◌́; ) GREEK SMALL LETTER OMEGA WITH TONOS 03D0;03D0;03D0;03B2;03B2; # (ϐ; ϐ; ϐ; β; β; ) GREEK BETA SYMBOL 03D1;03D1;03D1;03B8;03B8; # (ϑ; ϑ; ϑ; θ; θ; ) GREEK THETA SYMBOL 03D2;03D2;03D2;03A5;03A5; # (ϒ; ϒ; ϒ; Υ; Υ; ) GREEK UPSILON WITH HOOK SYMBOL 03D3;03D3;03D2 0301;038E;03A5 0301; # (ϓ; ϓ; ϒ◌́; Ύ; Υ◌́; ) GREEK UPSILON WITH ACUTE AND HOOK SYMBOL 03D4;03D4;03D2 0308;03AB;03A5 0308; # (ϔ; ϔ; ϒ◌̈; Ϋ; Υ◌̈; ) GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL 03D5;03D5;03D5;03C6;03C6; # (ϕ; ϕ; ϕ; φ; φ; ) GREEK PHI SYMBOL 03D6;03D6;03D6;03C0;03C0; # (ϖ; ϖ; ϖ; π; π; ) GREEK PI SYMBOL 03F0;03F0;03F0;03BA;03BA; # (ϰ; ϰ; ϰ; κ; κ; ) GREEK KAPPA SYMBOL 03F1;03F1;03F1;03C1;03C1; # (ϱ; ϱ; ϱ; ρ; ρ; ) GREEK RHO SYMBOL 03F2;03F2;03F2;03C2;03C2; # (ϲ; ϲ; ϲ; ς; ς; ) GREEK LUNATE SIGMA SYMBOL 03F4;03F4;03F4;0398;0398; # (ϴ; ϴ; ϴ; Θ; Θ; ) GREEK CAPITAL THETA SYMBOL 03F5;03F5;03F5;03B5;03B5; # (ϵ; ϵ; ϵ; ε; ε; ) GREEK LUNATE EPSILON SYMBOL 03F9;03F9;03F9;03A3;03A3; # (Ϲ; Ϲ; Ϲ; Σ; Σ; ) GREEK CAPITAL LUNATE SIGMA SYMBOL 0400;0400;0415 0300;0400;0415 0300; # (Ѐ; Ѐ; Е◌̀; Ѐ; Е◌̀; ) CYRILLIC CAPITAL LETTER IE WITH GRAVE 0401;0401;0415 0308;0401;0415 0308; # (Ё; Ё; Е◌̈; Ё; Е◌̈; ) CYRILLIC CAPITAL LETTER IO 0403;0403;0413 0301;0403;0413 0301; # (Ѓ; Ѓ; Г◌́; Ѓ; Г◌́; ) CYRILLIC CAPITAL LETTER GJE 0407;0407;0406 0308;0407;0406 0308; # (Ї; Ї; І◌̈; Ї; І◌̈; ) CYRILLIC CAPITAL LETTER YI 040C;040C;041A 0301;040C;041A 0301; # (Ќ; Ќ; К◌́; Ќ; К◌́; ) CYRILLIC CAPITAL LETTER KJE 040D;040D;0418 0300;040D;0418 0300; # (Ѝ; Ѝ; И◌̀; Ѝ; И◌̀; ) CYRILLIC CAPITAL LETTER I WITH GRAVE 040E;040E;0423 0306;040E;0423 0306; # (Ў; Ў; У◌̆; Ў; У◌̆; ) CYRILLIC CAPITAL LETTER SHORT U 0419;0419;0418 0306;0419;0418 0306; # (Й; Й; И◌̆; Й; И◌̆; ) CYRILLIC CAPITAL LETTER SHORT I 0439;0439;0438 0306;0439;0438 0306; # (й; й; и◌̆; й; и◌̆; ) CYRILLIC SMALL LETTER SHORT I 0450;0450;0435 0300;0450;0435 0300; # (ѐ; ѐ; е◌̀; ѐ; е◌̀; ) CYRILLIC SMALL LETTER IE WITH GRAVE 0451;0451;0435 0308;0451;0435 0308; # (ё; ё; е◌̈; ё; е◌̈; ) CYRILLIC SMALL LETTER IO 0453;0453;0433 0301;0453;0433 0301; # (ѓ; ѓ; г◌́; ѓ; г◌́; ) CYRILLIC SMALL LETTER GJE 0457;0457;0456 0308;0457;0456 0308; # (ї; ї; і◌̈; ї; і◌̈; ) CYRILLIC SMALL LETTER YI 045C;045C;043A 0301;045C;043A 0301; # (ќ; ќ; к◌́; ќ; к◌́; ) CYRILLIC SMALL LETTER KJE 045D;045D;0438 0300;045D;0438 0300; # (ѝ; ѝ; и◌̀; ѝ; и◌̀; ) CYRILLIC SMALL LETTER I WITH GRAVE 045E;045E;0443 0306;045E;0443 0306; # (ў; ў; у◌̆; ў; у◌̆; ) CYRILLIC SMALL LETTER SHORT U 0476;0476;0474 030F;0476;0474 030F; # (Ѷ; Ѷ; Ѵ◌̏; Ѷ; Ѵ◌̏; ) CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT 0477;0477;0475 030F;0477;0475 030F; # (ѷ; ѷ; ѵ◌̏; ѷ; ѵ◌̏; ) CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT 04C1;04C1;0416 0306;04C1;0416 0306; # (Ӂ; Ӂ; Ж◌̆; Ӂ; Ж◌̆; ) CYRILLIC CAPITAL LETTER ZHE WITH BREVE 04C2;04C2;0436 0306;04C2;0436 0306; # (ӂ; ӂ; ж◌̆; ӂ; ж◌̆; ) CYRILLIC SMALL LETTER ZHE WITH BREVE 04D0;04D0;0410 0306;04D0;0410 0306; # (Ӑ; Ӑ; А◌̆; Ӑ; А◌̆; ) CYRILLIC CAPITAL LETTER A WITH BREVE 04D1;04D1;0430 0306;04D1;0430 0306; # (ӑ; ӑ; а◌̆; ӑ; а◌̆; ) CYRILLIC SMALL LETTER A WITH BREVE 04D2;04D2;0410 0308;04D2;0410 0308; # (Ӓ; Ӓ; А◌̈; Ӓ; А◌̈; ) CYRILLIC CAPITAL LETTER A WITH DIAERESIS 04D3;04D3;0430 0308;04D3;0430 0308; # (ӓ; ӓ; а◌̈; ӓ; а◌̈; ) CYRILLIC SMALL LETTER A WITH DIAERESIS 04D6;04D6;0415 0306;04D6;0415 0306; # (Ӗ; Ӗ; Е◌̆; Ӗ; Е◌̆; ) CYRILLIC CAPITAL LETTER IE WITH BREVE 04D7;04D7;0435 0306;04D7;0435 0306; # (ӗ; ӗ; е◌̆; ӗ; е◌̆; ) CYRILLIC SMALL LETTER IE WITH BREVE 04DA;04DA;04D8 0308;04DA;04D8 0308; # (Ӛ; Ӛ; Ә◌̈; Ӛ; Ә◌̈; ) CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS 04DB;04DB;04D9 0308;04DB;04D9 0308; # (ӛ; ӛ; ә◌̈; ӛ; ә◌̈; ) CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS 04DC;04DC;0416 0308;04DC;0416 0308; # (Ӝ; Ӝ; Ж◌̈; Ӝ; Ж◌̈; ) CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS 04DD;04DD;0436 0308;04DD;0436 0308; # (ӝ; ӝ; ж◌̈; ӝ; ж◌̈; ) CYRILLIC SMALL LETTER ZHE WITH DIAERESIS 04DE;04DE;0417 0308;04DE;0417 0308; # (Ӟ; Ӟ; З◌̈; Ӟ; З◌̈; ) CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS 04DF;04DF;0437 0308;04DF;0437 0308; # (ӟ; ӟ; з◌̈; ӟ; з◌̈; ) CYRILLIC SMALL LETTER ZE WITH DIAERESIS 04E2;04E2;0418 0304;04E2;0418 0304; # (Ӣ; Ӣ; И◌̄; Ӣ; И◌̄; ) CYRILLIC CAPITAL LETTER I WITH MACRON 04E3;04E3;0438 0304;04E3;0438 0304; # (ӣ; ӣ; и◌̄; ӣ; и◌̄; ) CYRILLIC SMALL LETTER I WITH MACRON 04E4;04E4;0418 0308;04E4;0418 0308; # (Ӥ; Ӥ; И◌̈; Ӥ; И◌̈; ) CYRILLIC CAPITAL LETTER I WITH DIAERESIS 04E5;04E5;0438 0308;04E5;0438 0308; # (ӥ; ӥ; и◌̈; ӥ; и◌̈; ) CYRILLIC SMALL LETTER I WITH DIAERESIS 04E6;04E6;041E 0308;04E6;041E 0308; # (Ӧ; Ӧ; О◌̈; Ӧ; О◌̈; ) CYRILLIC CAPITAL LETTER O WITH DIAERESIS 04E7;04E7;043E 0308;04E7;043E 0308; # (ӧ; ӧ; о◌̈; ӧ; о◌̈; ) CYRILLIC SMALL LETTER O WITH DIAERESIS 04EA;04EA;04E8 0308;04EA;04E8 0308; # (Ӫ; Ӫ; Ө◌̈; Ӫ; Ө◌̈; ) CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS 04EB;04EB;04E9 0308;04EB;04E9 0308; # (ӫ; ӫ; ө◌̈; ӫ; ө◌̈; ) CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS 04EC;04EC;042D 0308;04EC;042D 0308; # (Ӭ; Ӭ; Э◌̈; Ӭ; Э◌̈; ) CYRILLIC CAPITAL LETTER E WITH DIAERESIS 04ED;04ED;044D 0308;04ED;044D 0308; # (ӭ; ӭ; э◌̈; ӭ; э◌̈; ) CYRILLIC SMALL LETTER E WITH DIAERESIS 04EE;04EE;0423 0304;04EE;0423 0304; # (Ӯ; Ӯ; У◌̄; Ӯ; У◌̄; ) CYRILLIC CAPITAL LETTER U WITH MACRON 04EF;04EF;0443 0304;04EF;0443 0304; # (ӯ; ӯ; у◌̄; ӯ; у◌̄; ) CYRILLIC SMALL LETTER U WITH MACRON 04F0;04F0;0423 0308;04F0;0423 0308; # (Ӱ; Ӱ; У◌̈; Ӱ; У◌̈; ) CYRILLIC CAPITAL LETTER U WITH DIAERESIS 04F1;04F1;0443 0308;04F1;0443 0308; # (ӱ; ӱ; у◌̈; ӱ; у◌̈; ) CYRILLIC SMALL LETTER U WITH DIAERESIS 04F2;04F2;0423 030B;04F2;0423 030B; # (Ӳ; Ӳ; У◌̋; Ӳ; У◌̋; ) CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE 04F3;04F3;0443 030B;04F3;0443 030B; # (ӳ; ӳ; у◌̋; ӳ; у◌̋; ) CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE 04F4;04F4;0427 0308;04F4;0427 0308; # (Ӵ; Ӵ; Ч◌̈; Ӵ; Ч◌̈; ) CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS 04F5;04F5;0447 0308;04F5;0447 0308; # (ӵ; ӵ; ч◌̈; ӵ; ч◌̈; ) CYRILLIC SMALL LETTER CHE WITH DIAERESIS 04F8;04F8;042B 0308;04F8;042B 0308; # (Ӹ; Ӹ; Ы◌̈; Ӹ; Ы◌̈; ) CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS 04F9;04F9;044B 0308;04F9;044B 0308; # (ӹ; ӹ; ы◌̈; ӹ; ы◌̈; ) CYRILLIC SMALL LETTER YERU WITH DIAERESIS 0587;0587;0587;0565 0582;0565 0582; # (և; և; և; եւ; եւ; ) ARMENIAN SMALL LIGATURE ECH YIWN 0622;0622;0627 0653;0622;0627 0653; # (آ; آ; ا◌ٓ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE 0623;0623;0627 0654;0623;0627 0654; # (أ; أ; ا◌ٔ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE 0624;0624;0648 0654;0624;0648 0654; # (ؤ; ؤ; و◌ٔ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE 0625;0625;0627 0655;0625;0627 0655; # (إ; إ; ا◌ٕ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW 0626;0626;064A 0654;0626;064A 0654; # (ئ; ئ; ي◌ٔ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE 0675;0675;0675;0627 0674;0627 0674; # (ٵ; ٵ; ٵ; اٴ; اٴ; ) ARABIC LETTER HIGH HAMZA ALEF 0676;0676;0676;0648 0674;0648 0674; # (ٶ; ٶ; ٶ; وٴ; وٴ; ) ARABIC LETTER HIGH HAMZA WAW 0677;0677;0677;06C7 0674;06C7 0674; # (ٷ; ٷ; ٷ; ۇٴ; ۇٴ; ) ARABIC LETTER U WITH HAMZA ABOVE 0678;0678;0678;064A 0674;064A 0674; # (ٸ; ٸ; ٸ; يٴ; يٴ; ) ARABIC LETTER HIGH HAMZA YEH 06C0;06C0;06D5 0654;06C0;06D5 0654; # (ۀ; ۀ; ە◌ٔ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE 06C2;06C2;06C1 0654;06C2;06C1 0654; # (ۂ; ۂ; ہ◌ٔ; ۂ; ہ◌ٔ; ) ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 06D3;06D3;06D2 0654;06D3;06D2 0654; # (ۓ; ۓ; ے◌ٔ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE 0929;0929;0928 093C;0929;0928 093C; # (ऩ; ऩ; न◌़; ऩ; न◌़; ) DEVANAGARI LETTER NNNA 0931;0931;0930 093C;0931;0930 093C; # (ऱ; ऱ; र◌़; ऱ; र◌़; ) DEVANAGARI LETTER RRA 0934;0934;0933 093C;0934;0933 093C; # (ऴ; ऴ; ळ◌़; ऴ; ळ◌़; ) DEVANAGARI LETTER LLLA 0958;0915 093C;0915 093C;0915 093C;0915 093C; # (क़; क◌़; क◌़; क◌़; क◌़; ) DEVANAGARI LETTER QA 0959;0916 093C;0916 093C;0916 093C;0916 093C; # (ख़; ख◌़; ख◌़; ख◌़; ख◌़; ) DEVANAGARI LETTER KHHA 095A;0917 093C;0917 093C;0917 093C;0917 093C; # (ग़; ग◌़; ग◌़; ग◌़; ग◌़; ) DEVANAGARI LETTER GHHA 095B;091C 093C;091C 093C;091C 093C;091C 093C; # (ज़; ज◌़; ज◌़; ज◌़; ज◌़; ) DEVANAGARI LETTER ZA 095C;0921 093C;0921 093C;0921 093C;0921 093C; # (ड़; ड◌़; ड◌़; ड◌़; ड◌़; ) DEVANAGARI LETTER DDDHA 095D;0922 093C;0922 093C;0922 093C;0922 093C; # (ढ़; ढ◌़; ढ◌़; ढ◌़; ढ◌़; ) DEVANAGARI LETTER RHA 095E;092B 093C;092B 093C;092B 093C;092B 093C; # (फ़; फ◌़; फ◌़; फ◌़; फ◌़; ) DEVANAGARI LETTER FA 095F;092F 093C;092F 093C;092F 093C;092F 093C; # (य़; य◌़; य◌़; य◌़; य◌़; ) DEVANAGARI LETTER YYA 09CB;09CB;09C7 09BE;09CB;09C7 09BE; # (ো; ো; ো; ো; ো; ) BENGALI VOWEL SIGN O 09CC;09CC;09C7 09D7;09CC;09C7 09D7; # (ৌ; ৌ; ৌ; ৌ; ৌ; ) BENGALI VOWEL SIGN AU 09DC;09A1 09BC;09A1 09BC;09A1 09BC;09A1 09BC; # (ড়; ড◌়; ড◌়; ড◌়; ড◌়; ) BENGALI LETTER RRA 09DD;09A2 09BC;09A2 09BC;09A2 09BC;09A2 09BC; # (ঢ়; ঢ◌়; ঢ◌়; ঢ◌়; ঢ◌়; ) BENGALI LETTER RHA 09DF;09AF 09BC;09AF 09BC;09AF 09BC;09AF 09BC; # (য়; য◌়; য◌়; য◌়; য◌়; ) BENGALI LETTER YYA 0A33;0A32 0A3C;0A32 0A3C;0A32 0A3C;0A32 0A3C; # (ਲ਼; ਲ◌਼; ਲ◌਼; ਲ◌਼; ਲ◌਼; ) GURMUKHI LETTER LLA 0A36;0A38 0A3C;0A38 0A3C;0A38 0A3C;0A38 0A3C; # (ਸ਼; ਸ◌਼; ਸ◌਼; ਸ◌਼; ਸ◌਼; ) GURMUKHI LETTER SHA 0A59;0A16 0A3C;0A16 0A3C;0A16 0A3C;0A16 0A3C; # (ਖ਼; ਖ◌਼; ਖ◌਼; ਖ◌਼; ਖ◌਼; ) GURMUKHI LETTER KHHA 0A5A;0A17 0A3C;0A17 0A3C;0A17 0A3C;0A17 0A3C; # (ਗ਼; ਗ◌਼; ਗ◌਼; ਗ◌਼; ਗ◌਼; ) GURMUKHI LETTER GHHA 0A5B;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C; # (ਜ਼; ਜ◌਼; ਜ◌਼; ਜ◌਼; ਜ◌਼; ) GURMUKHI LETTER ZA 0A5E;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C; # (ਫ਼; ਫ◌਼; ਫ◌਼; ਫ◌਼; ਫ◌਼; ) GURMUKHI LETTER FA 0B48;0B48;0B47 0B56;0B48;0B47 0B56; # (ୈ; ୈ; େ◌ୖ; ୈ; େ◌ୖ; ) ORIYA VOWEL SIGN AI 0B4B;0B4B;0B47 0B3E;0B4B;0B47 0B3E; # (ୋ; ୋ; ୋ; ୋ; ୋ; ) ORIYA VOWEL SIGN O 0B4C;0B4C;0B47 0B57;0B4C;0B47 0B57; # (ୌ; ୌ; ୌ; ୌ; ୌ; ) ORIYA VOWEL SIGN AU 0B5C;0B21 0B3C;0B21 0B3C;0B21 0B3C;0B21 0B3C; # (ଡ଼; ଡ◌଼; ଡ◌଼; ଡ◌଼; ଡ◌଼; ) ORIYA LETTER RRA 0B5D;0B22 0B3C;0B22 0B3C;0B22 0B3C;0B22 0B3C; # (ଢ଼; ଢ◌଼; ଢ◌଼; ଢ◌଼; ଢ◌଼; ) ORIYA LETTER RHA 0B94;0B94;0B92 0BD7;0B94;0B92 0BD7; # (ஔ; ஔ; ஔ; ஔ; ஔ; ) TAMIL LETTER AU 0BCA;0BCA;0BC6 0BBE;0BCA;0BC6 0BBE; # (ொ; ொ; ொ; ொ; ொ; ) TAMIL VOWEL SIGN O 0BCB;0BCB;0BC7 0BBE;0BCB;0BC7 0BBE; # (ோ; ோ; ோ; ோ; ோ; ) TAMIL VOWEL SIGN OO 0BCC;0BCC;0BC6 0BD7;0BCC;0BC6 0BD7; # (ௌ; ௌ; ௌ; ௌ; ௌ; ) TAMIL VOWEL SIGN AU 0C48;0C48;0C46 0C56;0C48;0C46 0C56; # (◌ై; ◌ై; ◌ె◌ౖ; ◌ై; ◌ె◌ౖ; ) TELUGU VOWEL SIGN AI 0CC0;0CC0;0CBF 0CD5;0CC0;0CBF 0CD5; # (ೀ; ೀ; ◌ೀ; ೀ; ◌ೀ; ) KANNADA VOWEL SIGN II 0CC7;0CC7;0CC6 0CD5;0CC7;0CC6 0CD5; # (ೇ; ೇ; ◌ೇ; ೇ; ◌ೇ; ) KANNADA VOWEL SIGN EE 0CC8;0CC8;0CC6 0CD6;0CC8;0CC6 0CD6; # (ೈ; ೈ; ◌ೈ; ೈ; ◌ೈ; ) KANNADA VOWEL SIGN AI 0CCA;0CCA;0CC6 0CC2;0CCA;0CC6 0CC2; # (ೊ; ೊ; ◌ೊ; ೊ; ◌ೊ; ) KANNADA VOWEL SIGN O 0CCB;0CCB;0CC6 0CC2 0CD5;0CCB;0CC6 0CC2 0CD5; # (ೋ; ೋ; ◌ೋ; ೋ; ◌ೋ; ) KANNADA VOWEL SIGN OO 0D4A;0D4A;0D46 0D3E;0D4A;0D46 0D3E; # (ൊ; ൊ; ൊ; ൊ; ൊ; ) MALAYALAM VOWEL SIGN O 0D4B;0D4B;0D47 0D3E;0D4B;0D47 0D3E; # (ോ; ോ; ോ; ോ; ോ; ) MALAYALAM VOWEL SIGN OO 0D4C;0D4C;0D46 0D57;0D4C;0D46 0D57; # (ൌ; ൌ; ൌ; ൌ; ൌ; ) MALAYALAM VOWEL SIGN AU 0DDA;0DDA;0DD9 0DCA;0DDA;0DD9 0DCA; # (ේ; ේ; ෙ◌්; ේ; ෙ◌්; ) SINHALA VOWEL SIGN DIGA KOMBUVA 0DDC;0DDC;0DD9 0DCF;0DDC;0DD9 0DCF; # (ො; ො; ො; ො; ො; ) SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA 0DDD;0DDD;0DD9 0DCF 0DCA;0DDD;0DD9 0DCF 0DCA; # (ෝ; ෝ; ො◌්; ෝ; ො◌්; ) SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA 0DDE;0DDE;0DD9 0DDF;0DDE;0DD9 0DDF; # (ෞ; ෞ; ෞ; ෞ; ෞ; ) SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA 0E33;0E33;0E33;0E4D 0E32;0E4D 0E32; # (ำ; ำ; ำ; ◌ํา; ◌ํา; ) THAI CHARACTER SARA AM 0EB3;0EB3;0EB3;0ECD 0EB2;0ECD 0EB2; # (ຳ; ຳ; ຳ; ◌ໍາ; ◌ໍາ; ) LAO VOWEL SIGN AM 0EDC;0EDC;0EDC;0EAB 0E99;0EAB 0E99; # (ໜ; ໜ; ໜ; ຫນ; ຫນ; ) LAO HO NO 0EDD;0EDD;0EDD;0EAB 0EA1;0EAB 0EA1; # (ໝ; ໝ; ໝ; ຫມ; ຫມ; ) LAO HO MO 0F0C;0F0C;0F0C;0F0B;0F0B; # (༌; ༌; ༌; ་; ་; ) TIBETAN MARK DELIMITER TSHEG BSTAR 0F43;0F42 0FB7;0F42 0FB7;0F42 0FB7;0F42 0FB7; # (གྷ; ག◌ྷ; ག◌ྷ; ག◌ྷ; ག◌ྷ; ) TIBETAN LETTER GHA 0F4D;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7; # (ཌྷ; ཌ◌ྷ; ཌ◌ྷ; ཌ◌ྷ; ཌ◌ྷ; ) TIBETAN LETTER DDHA 0F52;0F51 0FB7;0F51 0FB7;0F51 0FB7;0F51 0FB7; # (དྷ; ད◌ྷ; ད◌ྷ; ད◌ྷ; ད◌ྷ; ) TIBETAN LETTER DHA 0F57;0F56 0FB7;0F56 0FB7;0F56 0FB7;0F56 0FB7; # (བྷ; བ◌ྷ; བ◌ྷ; བ◌ྷ; བ◌ྷ; ) TIBETAN LETTER BHA 0F5C;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7; # (ཛྷ; ཛ◌ྷ; ཛ◌ྷ; ཛ◌ྷ; ཛ◌ྷ; ) TIBETAN LETTER DZHA 0F69;0F40 0FB5;0F40 0FB5;0F40 0FB5;0F40 0FB5; # (ཀྵ; ཀ◌ྵ; ཀ◌ྵ; ཀ◌ྵ; ཀ◌ྵ; ) TIBETAN LETTER KSSA 0F73;0F71 0F72;0F71 0F72;0F71 0F72;0F71 0F72; # (◌ཱི; ◌ཱ◌ི; ◌ཱ◌ི; ◌ཱ◌ི; ◌ཱ◌ི; ) TIBETAN VOWEL SIGN II 0F75;0F71 0F74;0F71 0F74;0F71 0F74;0F71 0F74; # (◌ཱུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ◌ཱ◌ུ; ) TIBETAN VOWEL SIGN UU 0F76;0FB2 0F80;0FB2 0F80;0FB2 0F80;0FB2 0F80; # (◌ྲྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ◌ྲ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC R 0F77;0F77;0F77;0FB2 0F71 0F80;0FB2 0F71 0F80; # (◌ཷ; ◌ཷ; ◌ཷ; ◌ྲ◌ཱ◌ྀ; ◌ྲ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC RR 0F78;0FB3 0F80;0FB3 0F80;0FB3 0F80;0FB3 0F80; # (◌ླྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ◌ླ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC L 0F79;0F79;0F79;0FB3 0F71 0F80;0FB3 0F71 0F80; # (◌ཹ; ◌ཹ; ◌ཹ; ◌ླ◌ཱ◌ྀ; ◌ླ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN VOCALIC LL 0F81;0F71 0F80;0F71 0F80;0F71 0F80;0F71 0F80; # (◌ཱྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ◌ཱ◌ྀ; ) TIBETAN VOWEL SIGN REVERSED II 0F93;0F92 0FB7;0F92 0FB7;0F92 0FB7;0F92 0FB7; # (◌ྒྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ◌ྒ◌ྷ; ) TIBETAN SUBJOINED LETTER GHA 0F9D;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7; # (◌ྜྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ◌ྜ◌ྷ; ) TIBETAN SUBJOINED LETTER DDHA 0FA2;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7; # (◌ྡྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ◌ྡ◌ྷ; ) TIBETAN SUBJOINED LETTER DHA 0FA7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7; # (◌ྦྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ◌ྦ◌ྷ; ) TIBETAN SUBJOINED LETTER BHA 0FAC;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7; # (◌ྫྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ◌ྫ◌ྷ; ) TIBETAN SUBJOINED LETTER DZHA 0FB9;0F90 0FB5;0F90 0FB5;0F90 0FB5;0F90 0FB5; # (◌ྐྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ◌ྐ◌ྵ; ) TIBETAN SUBJOINED LETTER KSSA 1026;1026;1025 102E;1026;1025 102E; # (ဦ; ဦ; ဥ◌ီ; ဦ; ဥ◌ီ; ) MYANMAR LETTER UU 10FC;10FC;10FC;10DC;10DC; # (ჼ; ჼ; ჼ; ნ; ნ; ) MODIFIER LETTER GEORGIAN NAR 1B06;1B06;1B05 1B35;1B06;1B05 1B35; # (ᬆ; ᬆ; ᬆ; ᬆ; ᬆ; ) BALINESE LETTER AKARA TEDUNG 1B08;1B08;1B07 1B35;1B08;1B07 1B35; # (ᬈ; ᬈ; ᬈ; ᬈ; ᬈ; ) BALINESE LETTER IKARA TEDUNG 1B0A;1B0A;1B09 1B35;1B0A;1B09 1B35; # (ᬊ; ᬊ; ᬊ; ᬊ; ᬊ; ) BALINESE LETTER UKARA TEDUNG 1B0C;1B0C;1B0B 1B35;1B0C;1B0B 1B35; # (ᬌ; ᬌ; ᬌ; ᬌ; ᬌ; ) BALINESE LETTER RA REPA TEDUNG 1B0E;1B0E;1B0D 1B35;1B0E;1B0D 1B35; # (ᬎ; ᬎ; ᬎ; ᬎ; ᬎ; ) BALINESE LETTER LA LENGA TEDUNG 1B12;1B12;1B11 1B35;1B12;1B11 1B35; # (ᬒ; ᬒ; ᬒ; ᬒ; ᬒ; ) BALINESE LETTER OKARA TEDUNG 1B3B;1B3B;1B3A 1B35;1B3B;1B3A 1B35; # (ᬻ; ᬻ; ◌ᬻ; ᬻ; ◌ᬻ; ) BALINESE VOWEL SIGN RA REPA TEDUNG 1B3D;1B3D;1B3C 1B35;1B3D;1B3C 1B35; # (ᬽ; ᬽ; ◌ᬽ; ᬽ; ◌ᬽ; ) BALINESE VOWEL SIGN LA LENGA TEDUNG 1B40;1B40;1B3E 1B35;1B40;1B3E 1B35; # (ᭀ; ᭀ; ᭀ; ᭀ; ᭀ; ) BALINESE VOWEL SIGN TALING TEDUNG 1B41;1B41;1B3F 1B35;1B41;1B3F 1B35; # (ᭁ; ᭁ; ᭁ; ᭁ; ᭁ; ) BALINESE VOWEL SIGN TALING REPA TEDUNG 1B43;1B43;1B42 1B35;1B43;1B42 1B35; # (ᭃ; ᭃ; ◌ᭃ; ᭃ; ◌ᭃ; ) BALINESE VOWEL SIGN PEPET TEDUNG 1D2C;1D2C;1D2C;0041;0041; # (ᴬ; ᴬ; ᴬ; A; A; ) MODIFIER LETTER CAPITAL A 1D2D;1D2D;1D2D;00C6;00C6; # (ᴭ; ᴭ; ᴭ; Æ; Æ; ) MODIFIER LETTER CAPITAL AE 1D2E;1D2E;1D2E;0042;0042; # (ᴮ; ᴮ; ᴮ; B; B; ) MODIFIER LETTER CAPITAL B 1D30;1D30;1D30;0044;0044; # (ᴰ; ᴰ; ᴰ; D; D; ) MODIFIER LETTER CAPITAL D 1D31;1D31;1D31;0045;0045; # (ᴱ; ᴱ; ᴱ; E; E; ) MODIFIER LETTER CAPITAL E 1D32;1D32;1D32;018E;018E; # (ᴲ; ᴲ; ᴲ; Ǝ; Ǝ; ) MODIFIER LETTER CAPITAL REVERSED E 1D33;1D33;1D33;0047;0047; # (ᴳ; ᴳ; ᴳ; G; G; ) MODIFIER LETTER CAPITAL G 1D34;1D34;1D34;0048;0048; # (ᴴ; ᴴ; ᴴ; H; H; ) MODIFIER LETTER CAPITAL H 1D35;1D35;1D35;0049;0049; # (ᴵ; ᴵ; ᴵ; I; I; ) MODIFIER LETTER CAPITAL I 1D36;1D36;1D36;004A;004A; # (ᴶ; ᴶ; ᴶ; J; J; ) MODIFIER LETTER CAPITAL J 1D37;1D37;1D37;004B;004B; # (ᴷ; ᴷ; ᴷ; K; K; ) MODIFIER LETTER CAPITAL K 1D38;1D38;1D38;004C;004C; # (ᴸ; ᴸ; ᴸ; L; L; ) MODIFIER LETTER CAPITAL L 1D39;1D39;1D39;004D;004D; # (ᴹ; ᴹ; ᴹ; M; M; ) MODIFIER LETTER CAPITAL M 1D3A;1D3A;1D3A;004E;004E; # (ᴺ; ᴺ; ᴺ; N; N; ) MODIFIER LETTER CAPITAL N 1D3C;1D3C;1D3C;004F;004F; # (ᴼ; ᴼ; ᴼ; O; O; ) MODIFIER LETTER CAPITAL O 1D3D;1D3D;1D3D;0222;0222; # (ᴽ; ᴽ; ᴽ; Ȣ; Ȣ; ) MODIFIER LETTER CAPITAL OU 1D3E;1D3E;1D3E;0050;0050; # (ᴾ; ᴾ; ᴾ; P; P; ) MODIFIER LETTER CAPITAL P 1D3F;1D3F;1D3F;0052;0052; # (ᴿ; ᴿ; ᴿ; R; R; ) MODIFIER LETTER CAPITAL R 1D40;1D40;1D40;0054;0054; # (ᵀ; ᵀ; ᵀ; T; T; ) MODIFIER LETTER CAPITAL T 1D41;1D41;1D41;0055;0055; # (ᵁ; ᵁ; ᵁ; U; U; ) MODIFIER LETTER CAPITAL U 1D42;1D42;1D42;0057;0057; # (ᵂ; ᵂ; ᵂ; W; W; ) MODIFIER LETTER CAPITAL W 1D43;1D43;1D43;0061;0061; # (ᵃ; ᵃ; ᵃ; a; a; ) MODIFIER LETTER SMALL A 1D44;1D44;1D44;0250;0250; # (ᵄ; ᵄ; ᵄ; ɐ; ɐ; ) MODIFIER LETTER SMALL TURNED A 1D45;1D45;1D45;0251;0251; # (ᵅ; ᵅ; ᵅ; ɑ; ɑ; ) MODIFIER LETTER SMALL ALPHA 1D46;1D46;1D46;1D02;1D02; # (ᵆ; ᵆ; ᵆ; ᴂ; ᴂ; ) MODIFIER LETTER SMALL TURNED AE 1D47;1D47;1D47;0062;0062; # (ᵇ; ᵇ; ᵇ; b; b; ) MODIFIER LETTER SMALL B 1D48;1D48;1D48;0064;0064; # (ᵈ; ᵈ; ᵈ; d; d; ) MODIFIER LETTER SMALL D 1D49;1D49;1D49;0065;0065; # (ᵉ; ᵉ; ᵉ; e; e; ) MODIFIER LETTER SMALL E 1D4A;1D4A;1D4A;0259;0259; # (ᵊ; ᵊ; ᵊ; ə; ə; ) MODIFIER LETTER SMALL SCHWA 1D4B;1D4B;1D4B;025B;025B; # (ᵋ; ᵋ; ᵋ; ɛ; ɛ; ) MODIFIER LETTER SMALL OPEN E 1D4C;1D4C;1D4C;025C;025C; # (ᵌ; ᵌ; ᵌ; ɜ; ɜ; ) MODIFIER LETTER SMALL TURNED OPEN E 1D4D;1D4D;1D4D;0067;0067; # (ᵍ; ᵍ; ᵍ; g; g; ) MODIFIER LETTER SMALL G 1D4F;1D4F;1D4F;006B;006B; # (ᵏ; ᵏ; ᵏ; k; k; ) MODIFIER LETTER SMALL K 1D50;1D50;1D50;006D;006D; # (ᵐ; ᵐ; ᵐ; m; m; ) MODIFIER LETTER SMALL M 1D51;1D51;1D51;014B;014B; # (ᵑ; ᵑ; ᵑ; ŋ; ŋ; ) MODIFIER LETTER SMALL ENG 1D52;1D52;1D52;006F;006F; # (ᵒ; ᵒ; ᵒ; o; o; ) MODIFIER LETTER SMALL O 1D53;1D53;1D53;0254;0254; # (ᵓ; ᵓ; ᵓ; ɔ; ɔ; ) MODIFIER LETTER SMALL OPEN O 1D54;1D54;1D54;1D16;1D16; # (ᵔ; ᵔ; ᵔ; ᴖ; ᴖ; ) MODIFIER LETTER SMALL TOP HALF O 1D55;1D55;1D55;1D17;1D17; # (ᵕ; ᵕ; ᵕ; ᴗ; ᴗ; ) MODIFIER LETTER SMALL BOTTOM HALF O 1D56;1D56;1D56;0070;0070; # (ᵖ; ᵖ; ᵖ; p; p; ) MODIFIER LETTER SMALL P 1D57;1D57;1D57;0074;0074; # (ᵗ; ᵗ; ᵗ; t; t; ) MODIFIER LETTER SMALL T 1D58;1D58;1D58;0075;0075; # (ᵘ; ᵘ; ᵘ; u; u; ) MODIFIER LETTER SMALL U 1D59;1D59;1D59;1D1D;1D1D; # (ᵙ; ᵙ; ᵙ; ᴝ; ᴝ; ) MODIFIER LETTER SMALL SIDEWAYS U 1D5A;1D5A;1D5A;026F;026F; # (ᵚ; ᵚ; ᵚ; ɯ; ɯ; ) MODIFIER LETTER SMALL TURNED M 1D5B;1D5B;1D5B;0076;0076; # (ᵛ; ᵛ; ᵛ; v; v; ) MODIFIER LETTER SMALL V 1D5C;1D5C;1D5C;1D25;1D25; # (ᵜ; ᵜ; ᵜ; ᴥ; ᴥ; ) MODIFIER LETTER SMALL AIN 1D5D;1D5D;1D5D;03B2;03B2; # (ᵝ; ᵝ; ᵝ; β; β; ) MODIFIER LETTER SMALL BETA 1D5E;1D5E;1D5E;03B3;03B3; # (ᵞ; ᵞ; ᵞ; γ; γ; ) MODIFIER LETTER SMALL GREEK GAMMA 1D5F;1D5F;1D5F;03B4;03B4; # (ᵟ; ᵟ; ᵟ; δ; δ; ) MODIFIER LETTER SMALL DELTA 1D60;1D60;1D60;03C6;03C6; # (ᵠ; ᵠ; ᵠ; φ; φ; ) MODIFIER LETTER SMALL GREEK PHI 1D61;1D61;1D61;03C7;03C7; # (ᵡ; ᵡ; ᵡ; χ; χ; ) MODIFIER LETTER SMALL CHI 1D62;1D62;1D62;0069;0069; # (ᵢ; ᵢ; ᵢ; i; i; ) LATIN SUBSCRIPT SMALL LETTER I 1D63;1D63;1D63;0072;0072; # (ᵣ; ᵣ; ᵣ; r; r; ) LATIN SUBSCRIPT SMALL LETTER R 1D64;1D64;1D64;0075;0075; # (ᵤ; ᵤ; ᵤ; u; u; ) LATIN SUBSCRIPT SMALL LETTER U 1D65;1D65;1D65;0076;0076; # (ᵥ; ᵥ; ᵥ; v; v; ) LATIN SUBSCRIPT SMALL LETTER V 1D66;1D66;1D66;03B2;03B2; # (ᵦ; ᵦ; ᵦ; β; β; ) GREEK SUBSCRIPT SMALL LETTER BETA 1D67;1D67;1D67;03B3;03B3; # (ᵧ; ᵧ; ᵧ; γ; γ; ) GREEK SUBSCRIPT SMALL LETTER GAMMA 1D68;1D68;1D68;03C1;03C1; # (ᵨ; ᵨ; ᵨ; ρ; ρ; ) GREEK SUBSCRIPT SMALL LETTER RHO 1D69;1D69;1D69;03C6;03C6; # (ᵩ; ᵩ; ᵩ; φ; φ; ) GREEK SUBSCRIPT SMALL LETTER PHI 1D6A;1D6A;1D6A;03C7;03C7; # (ᵪ; ᵪ; ᵪ; χ; χ; ) GREEK SUBSCRIPT SMALL LETTER CHI 1D78;1D78;1D78;043D;043D; # (ᵸ; ᵸ; ᵸ; н; н; ) MODIFIER LETTER CYRILLIC EN 1D9B;1D9B;1D9B;0252;0252; # (ᶛ; ᶛ; ᶛ; ɒ; ɒ; ) MODIFIER LETTER SMALL TURNED ALPHA 1D9C;1D9C;1D9C;0063;0063; # (ᶜ; ᶜ; ᶜ; c; c; ) MODIFIER LETTER SMALL C 1D9D;1D9D;1D9D;0255;0255; # (ᶝ; ᶝ; ᶝ; ɕ; ɕ; ) MODIFIER LETTER SMALL C WITH CURL 1D9E;1D9E;1D9E;00F0;00F0; # (ᶞ; ᶞ; ᶞ; ð; ð; ) MODIFIER LETTER SMALL ETH 1D9F;1D9F;1D9F;025C;025C; # (ᶟ; ᶟ; ᶟ; ɜ; ɜ; ) MODIFIER LETTER SMALL REVERSED OPEN E 1DA0;1DA0;1DA0;0066;0066; # (ᶠ; ᶠ; ᶠ; f; f; ) MODIFIER LETTER SMALL F 1DA1;1DA1;1DA1;025F;025F; # (ᶡ; ᶡ; ᶡ; ɟ; ɟ; ) MODIFIER LETTER SMALL DOTLESS J WITH STROKE 1DA2;1DA2;1DA2;0261;0261; # (ᶢ; ᶢ; ᶢ; ɡ; ɡ; ) MODIFIER LETTER SMALL SCRIPT G 1DA3;1DA3;1DA3;0265;0265; # (ᶣ; ᶣ; ᶣ; ɥ; ɥ; ) MODIFIER LETTER SMALL TURNED H 1DA4;1DA4;1DA4;0268;0268; # (ᶤ; ᶤ; ᶤ; ɨ; ɨ; ) MODIFIER LETTER SMALL I WITH STROKE 1DA5;1DA5;1DA5;0269;0269; # (ᶥ; ᶥ; ᶥ; ɩ; ɩ; ) MODIFIER LETTER SMALL IOTA 1DA6;1DA6;1DA6;026A;026A; # (ᶦ; ᶦ; ᶦ; ɪ; ɪ; ) MODIFIER LETTER SMALL CAPITAL I 1DA7;1DA7;1DA7;1D7B;1D7B; # (ᶧ; ᶧ; ᶧ; ᵻ; ᵻ; ) MODIFIER LETTER SMALL CAPITAL I WITH STROKE 1DA8;1DA8;1DA8;029D;029D; # (ᶨ; ᶨ; ᶨ; ʝ; ʝ; ) MODIFIER LETTER SMALL J WITH CROSSED-TAIL 1DA9;1DA9;1DA9;026D;026D; # (ᶩ; ᶩ; ᶩ; ɭ; ɭ; ) MODIFIER LETTER SMALL L WITH RETROFLEX HOOK 1DAA;1DAA;1DAA;1D85;1D85; # (ᶪ; ᶪ; ᶪ; ᶅ; ᶅ; ) MODIFIER LETTER SMALL L WITH PALATAL HOOK 1DAB;1DAB;1DAB;029F;029F; # (ᶫ; ᶫ; ᶫ; ʟ; ʟ; ) MODIFIER LETTER SMALL CAPITAL L 1DAC;1DAC;1DAC;0271;0271; # (ᶬ; ᶬ; ᶬ; ɱ; ɱ; ) MODIFIER LETTER SMALL M WITH HOOK 1DAD;1DAD;1DAD;0270;0270; # (ᶭ; ᶭ; ᶭ; ɰ; ɰ; ) MODIFIER LETTER SMALL TURNED M WITH LONG LEG 1DAE;1DAE;1DAE;0272;0272; # (ᶮ; ᶮ; ᶮ; ɲ; ɲ; ) MODIFIER LETTER SMALL N WITH LEFT HOOK 1DAF;1DAF;1DAF;0273;0273; # (ᶯ; ᶯ; ᶯ; ɳ; ɳ; ) MODIFIER LETTER SMALL N WITH RETROFLEX HOOK 1DB0;1DB0;1DB0;0274;0274; # (ᶰ; ᶰ; ᶰ; ɴ; ɴ; ) MODIFIER LETTER SMALL CAPITAL N 1DB1;1DB1;1DB1;0275;0275; # (ᶱ; ᶱ; ᶱ; ɵ; ɵ; ) MODIFIER LETTER SMALL BARRED O 1DB2;1DB2;1DB2;0278;0278; # (ᶲ; ᶲ; ᶲ; ɸ; ɸ; ) MODIFIER LETTER SMALL PHI 1DB3;1DB3;1DB3;0282;0282; # (ᶳ; ᶳ; ᶳ; ʂ; ʂ; ) MODIFIER LETTER SMALL S WITH HOOK 1DB4;1DB4;1DB4;0283;0283; # (ᶴ; ᶴ; ᶴ; ʃ; ʃ; ) MODIFIER LETTER SMALL ESH 1DB5;1DB5;1DB5;01AB;01AB; # (ᶵ; ᶵ; ᶵ; ƫ; ƫ; ) MODIFIER LETTER SMALL T WITH PALATAL HOOK 1DB6;1DB6;1DB6;0289;0289; # (ᶶ; ᶶ; ᶶ; ʉ; ʉ; ) MODIFIER LETTER SMALL U BAR 1DB7;1DB7;1DB7;028A;028A; # (ᶷ; ᶷ; ᶷ; ʊ; ʊ; ) MODIFIER LETTER SMALL UPSILON 1DB8;1DB8;1DB8;1D1C;1D1C; # (ᶸ; ᶸ; ᶸ; ᴜ; ᴜ; ) MODIFIER LETTER SMALL CAPITAL U 1DB9;1DB9;1DB9;028B;028B; # (ᶹ; ᶹ; ᶹ; ʋ; ʋ; ) MODIFIER LETTER SMALL V WITH HOOK 1DBA;1DBA;1DBA;028C;028C; # (ᶺ; ᶺ; ᶺ; ʌ; ʌ; ) MODIFIER LETTER SMALL TURNED V 1DBB;1DBB;1DBB;007A;007A; # (ᶻ; ᶻ; ᶻ; z; z; ) MODIFIER LETTER SMALL Z 1DBC;1DBC;1DBC;0290;0290; # (ᶼ; ᶼ; ᶼ; ʐ; ʐ; ) MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK 1DBD;1DBD;1DBD;0291;0291; # (ᶽ; ᶽ; ᶽ; ʑ; ʑ; ) MODIFIER LETTER SMALL Z WITH CURL 1DBE;1DBE;1DBE;0292;0292; # (ᶾ; ᶾ; ᶾ; ʒ; ʒ; ) MODIFIER LETTER SMALL EZH 1DBF;1DBF;1DBF;03B8;03B8; # (ᶿ; ᶿ; ᶿ; θ; θ; ) MODIFIER LETTER SMALL THETA 1E00;1E00;0041 0325;1E00;0041 0325; # (Ḁ; Ḁ; A◌̥; Ḁ; A◌̥; ) LATIN CAPITAL LETTER A WITH RING BELOW 1E01;1E01;0061 0325;1E01;0061 0325; # (ḁ; ḁ; a◌̥; ḁ; a◌̥; ) LATIN SMALL LETTER A WITH RING BELOW 1E02;1E02;0042 0307;1E02;0042 0307; # (Ḃ; Ḃ; B◌̇; Ḃ; B◌̇; ) LATIN CAPITAL LETTER B WITH DOT ABOVE 1E03;1E03;0062 0307;1E03;0062 0307; # (ḃ; ḃ; b◌̇; ḃ; b◌̇; ) LATIN SMALL LETTER B WITH DOT ABOVE 1E04;1E04;0042 0323;1E04;0042 0323; # (Ḅ; Ḅ; B◌̣; Ḅ; B◌̣; ) LATIN CAPITAL LETTER B WITH DOT BELOW 1E05;1E05;0062 0323;1E05;0062 0323; # (ḅ; ḅ; b◌̣; ḅ; b◌̣; ) LATIN SMALL LETTER B WITH DOT BELOW 1E06;1E06;0042 0331;1E06;0042 0331; # (Ḇ; Ḇ; B◌̱; Ḇ; B◌̱; ) LATIN CAPITAL LETTER B WITH LINE BELOW 1E07;1E07;0062 0331;1E07;0062 0331; # (ḇ; ḇ; b◌̱; ḇ; b◌̱; ) LATIN SMALL LETTER B WITH LINE BELOW 1E08;1E08;0043 0327 0301;1E08;0043 0327 0301; # (Ḉ; Ḉ; C◌̧◌́; Ḉ; C◌̧◌́; ) LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE 1E09;1E09;0063 0327 0301;1E09;0063 0327 0301; # (ḉ; ḉ; c◌̧◌́; ḉ; c◌̧◌́; ) LATIN SMALL LETTER C WITH CEDILLA AND ACUTE 1E0A;1E0A;0044 0307;1E0A;0044 0307; # (Ḋ; Ḋ; D◌̇; Ḋ; D◌̇; ) LATIN CAPITAL LETTER D WITH DOT ABOVE 1E0B;1E0B;0064 0307;1E0B;0064 0307; # (ḋ; ḋ; d◌̇; ḋ; d◌̇; ) LATIN SMALL LETTER D WITH DOT ABOVE 1E0C;1E0C;0044 0323;1E0C;0044 0323; # (Ḍ; Ḍ; D◌̣; Ḍ; D◌̣; ) LATIN CAPITAL LETTER D WITH DOT BELOW 1E0D;1E0D;0064 0323;1E0D;0064 0323; # (ḍ; ḍ; d◌̣; ḍ; d◌̣; ) LATIN SMALL LETTER D WITH DOT BELOW 1E0E;1E0E;0044 0331;1E0E;0044 0331; # (Ḏ; Ḏ; D◌̱; Ḏ; D◌̱; ) LATIN CAPITAL LETTER D WITH LINE BELOW 1E0F;1E0F;0064 0331;1E0F;0064 0331; # (ḏ; ḏ; d◌̱; ḏ; d◌̱; ) LATIN SMALL LETTER D WITH LINE BELOW 1E10;1E10;0044 0327;1E10;0044 0327; # (Ḑ; Ḑ; D◌̧; Ḑ; D◌̧; ) LATIN CAPITAL LETTER D WITH CEDILLA 1E11;1E11;0064 0327;1E11;0064 0327; # (ḑ; ḑ; d◌̧; ḑ; d◌̧; ) LATIN SMALL LETTER D WITH CEDILLA 1E12;1E12;0044 032D;1E12;0044 032D; # (Ḓ; Ḓ; D◌̭; Ḓ; D◌̭; ) LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW 1E13;1E13;0064 032D;1E13;0064 032D; # (ḓ; ḓ; d◌̭; ḓ; d◌̭; ) LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW 1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; # (Ḕ; Ḕ; E◌̄◌̀; Ḕ; E◌̄◌̀; ) LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 1E15;1E15;0065 0304 0300;1E15;0065 0304 0300; # (ḕ; ḕ; e◌̄◌̀; ḕ; e◌̄◌̀; ) LATIN SMALL LETTER E WITH MACRON AND GRAVE 1E16;1E16;0045 0304 0301;1E16;0045 0304 0301; # (Ḗ; Ḗ; E◌̄◌́; Ḗ; E◌̄◌́; ) LATIN CAPITAL LETTER E WITH MACRON AND ACUTE 1E17;1E17;0065 0304 0301;1E17;0065 0304 0301; # (ḗ; ḗ; e◌̄◌́; ḗ; e◌̄◌́; ) LATIN SMALL LETTER E WITH MACRON AND ACUTE 1E18;1E18;0045 032D;1E18;0045 032D; # (Ḙ; Ḙ; E◌̭; Ḙ; E◌̭; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW 1E19;1E19;0065 032D;1E19;0065 032D; # (ḙ; ḙ; e◌̭; ḙ; e◌̭; ) LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW 1E1A;1E1A;0045 0330;1E1A;0045 0330; # (Ḛ; Ḛ; E◌̰; Ḛ; E◌̰; ) LATIN CAPITAL LETTER E WITH TILDE BELOW 1E1B;1E1B;0065 0330;1E1B;0065 0330; # (ḛ; ḛ; e◌̰; ḛ; e◌̰; ) LATIN SMALL LETTER E WITH TILDE BELOW 1E1C;1E1C;0045 0327 0306;1E1C;0045 0327 0306; # (Ḝ; Ḝ; E◌̧◌̆; Ḝ; E◌̧◌̆; ) LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE 1E1D;1E1D;0065 0327 0306;1E1D;0065 0327 0306; # (ḝ; ḝ; e◌̧◌̆; ḝ; e◌̧◌̆; ) LATIN SMALL LETTER E WITH CEDILLA AND BREVE 1E1E;1E1E;0046 0307;1E1E;0046 0307; # (Ḟ; Ḟ; F◌̇; Ḟ; F◌̇; ) LATIN CAPITAL LETTER F WITH DOT ABOVE 1E1F;1E1F;0066 0307;1E1F;0066 0307; # (ḟ; ḟ; f◌̇; ḟ; f◌̇; ) LATIN SMALL LETTER F WITH DOT ABOVE 1E20;1E20;0047 0304;1E20;0047 0304; # (Ḡ; Ḡ; G◌̄; Ḡ; G◌̄; ) LATIN CAPITAL LETTER G WITH MACRON 1E21;1E21;0067 0304;1E21;0067 0304; # (ḡ; ḡ; g◌̄; ḡ; g◌̄; ) LATIN SMALL LETTER G WITH MACRON 1E22;1E22;0048 0307;1E22;0048 0307; # (Ḣ; Ḣ; H◌̇; Ḣ; H◌̇; ) LATIN CAPITAL LETTER H WITH DOT ABOVE 1E23;1E23;0068 0307;1E23;0068 0307; # (ḣ; ḣ; h◌̇; ḣ; h◌̇; ) LATIN SMALL LETTER H WITH DOT ABOVE 1E24;1E24;0048 0323;1E24;0048 0323; # (Ḥ; Ḥ; H◌̣; Ḥ; H◌̣; ) LATIN CAPITAL LETTER H WITH DOT BELOW 1E25;1E25;0068 0323;1E25;0068 0323; # (ḥ; ḥ; h◌̣; ḥ; h◌̣; ) LATIN SMALL LETTER H WITH DOT BELOW 1E26;1E26;0048 0308;1E26;0048 0308; # (Ḧ; Ḧ; H◌̈; Ḧ; H◌̈; ) LATIN CAPITAL LETTER H WITH DIAERESIS 1E27;1E27;0068 0308;1E27;0068 0308; # (ḧ; ḧ; h◌̈; ḧ; h◌̈; ) LATIN SMALL LETTER H WITH DIAERESIS 1E28;1E28;0048 0327;1E28;0048 0327; # (Ḩ; Ḩ; H◌̧; Ḩ; H◌̧; ) LATIN CAPITAL LETTER H WITH CEDILLA 1E29;1E29;0068 0327;1E29;0068 0327; # (ḩ; ḩ; h◌̧; ḩ; h◌̧; ) LATIN SMALL LETTER H WITH CEDILLA 1E2A;1E2A;0048 032E;1E2A;0048 032E; # (Ḫ; Ḫ; H◌̮; Ḫ; H◌̮; ) LATIN CAPITAL LETTER H WITH BREVE BELOW 1E2B;1E2B;0068 032E;1E2B;0068 032E; # (ḫ; ḫ; h◌̮; ḫ; h◌̮; ) LATIN SMALL LETTER H WITH BREVE BELOW 1E2C;1E2C;0049 0330;1E2C;0049 0330; # (Ḭ; Ḭ; I◌̰; Ḭ; I◌̰; ) LATIN CAPITAL LETTER I WITH TILDE BELOW 1E2D;1E2D;0069 0330;1E2D;0069 0330; # (ḭ; ḭ; i◌̰; ḭ; i◌̰; ) LATIN SMALL LETTER I WITH TILDE BELOW 1E2E;1E2E;0049 0308 0301;1E2E;0049 0308 0301; # (Ḯ; Ḯ; I◌̈◌́; Ḯ; I◌̈◌́; ) LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE 1E2F;1E2F;0069 0308 0301;1E2F;0069 0308 0301; # (ḯ; ḯ; i◌̈◌́; ḯ; i◌̈◌́; ) LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE 1E30;1E30;004B 0301;1E30;004B 0301; # (Ḱ; Ḱ; K◌́; Ḱ; K◌́; ) LATIN CAPITAL LETTER K WITH ACUTE 1E31;1E31;006B 0301;1E31;006B 0301; # (ḱ; ḱ; k◌́; ḱ; k◌́; ) LATIN SMALL LETTER K WITH ACUTE 1E32;1E32;004B 0323;1E32;004B 0323; # (Ḳ; Ḳ; K◌̣; Ḳ; K◌̣; ) LATIN CAPITAL LETTER K WITH DOT BELOW 1E33;1E33;006B 0323;1E33;006B 0323; # (ḳ; ḳ; k◌̣; ḳ; k◌̣; ) LATIN SMALL LETTER K WITH DOT BELOW 1E34;1E34;004B 0331;1E34;004B 0331; # (Ḵ; Ḵ; K◌̱; Ḵ; K◌̱; ) LATIN CAPITAL LETTER K WITH LINE BELOW 1E35;1E35;006B 0331;1E35;006B 0331; # (ḵ; ḵ; k◌̱; ḵ; k◌̱; ) LATIN SMALL LETTER K WITH LINE BELOW 1E36;1E36;004C 0323;1E36;004C 0323; # (Ḷ; Ḷ; L◌̣; Ḷ; L◌̣; ) LATIN CAPITAL LETTER L WITH DOT BELOW 1E37;1E37;006C 0323;1E37;006C 0323; # (ḷ; ḷ; l◌̣; ḷ; l◌̣; ) LATIN SMALL LETTER L WITH DOT BELOW 1E38;1E38;004C 0323 0304;1E38;004C 0323 0304; # (Ḹ; Ḹ; L◌̣◌̄; Ḹ; L◌̣◌̄; ) LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON 1E39;1E39;006C 0323 0304;1E39;006C 0323 0304; # (ḹ; ḹ; l◌̣◌̄; ḹ; l◌̣◌̄; ) LATIN SMALL LETTER L WITH DOT BELOW AND MACRON 1E3A;1E3A;004C 0331;1E3A;004C 0331; # (Ḻ; Ḻ; L◌̱; Ḻ; L◌̱; ) LATIN CAPITAL LETTER L WITH LINE BELOW 1E3B;1E3B;006C 0331;1E3B;006C 0331; # (ḻ; ḻ; l◌̱; ḻ; l◌̱; ) LATIN SMALL LETTER L WITH LINE BELOW 1E3C;1E3C;004C 032D;1E3C;004C 032D; # (Ḽ; Ḽ; L◌̭; Ḽ; L◌̭; ) LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW 1E3D;1E3D;006C 032D;1E3D;006C 032D; # (ḽ; ḽ; l◌̭; ḽ; l◌̭; ) LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW 1E3E;1E3E;004D 0301;1E3E;004D 0301; # (Ḿ; Ḿ; M◌́; Ḿ; M◌́; ) LATIN CAPITAL LETTER M WITH ACUTE 1E3F;1E3F;006D 0301;1E3F;006D 0301; # (ḿ; ḿ; m◌́; ḿ; m◌́; ) LATIN SMALL LETTER M WITH ACUTE 1E40;1E40;004D 0307;1E40;004D 0307; # (Ṁ; Ṁ; M◌̇; Ṁ; M◌̇; ) LATIN CAPITAL LETTER M WITH DOT ABOVE 1E41;1E41;006D 0307;1E41;006D 0307; # (ṁ; ṁ; m◌̇; ṁ; m◌̇; ) LATIN SMALL LETTER M WITH DOT ABOVE 1E42;1E42;004D 0323;1E42;004D 0323; # (Ṃ; Ṃ; M◌̣; Ṃ; M◌̣; ) LATIN CAPITAL LETTER M WITH DOT BELOW 1E43;1E43;006D 0323;1E43;006D 0323; # (ṃ; ṃ; m◌̣; ṃ; m◌̣; ) LATIN SMALL LETTER M WITH DOT BELOW 1E44;1E44;004E 0307;1E44;004E 0307; # (Ṅ; Ṅ; N◌̇; Ṅ; N◌̇; ) LATIN CAPITAL LETTER N WITH DOT ABOVE 1E45;1E45;006E 0307;1E45;006E 0307; # (ṅ; ṅ; n◌̇; ṅ; n◌̇; ) LATIN SMALL LETTER N WITH DOT ABOVE 1E46;1E46;004E 0323;1E46;004E 0323; # (Ṇ; Ṇ; N◌̣; Ṇ; N◌̣; ) LATIN CAPITAL LETTER N WITH DOT BELOW 1E47;1E47;006E 0323;1E47;006E 0323; # (ṇ; ṇ; n◌̣; ṇ; n◌̣; ) LATIN SMALL LETTER N WITH DOT BELOW 1E48;1E48;004E 0331;1E48;004E 0331; # (Ṉ; Ṉ; N◌̱; Ṉ; N◌̱; ) LATIN CAPITAL LETTER N WITH LINE BELOW 1E49;1E49;006E 0331;1E49;006E 0331; # (ṉ; ṉ; n◌̱; ṉ; n◌̱; ) LATIN SMALL LETTER N WITH LINE BELOW 1E4A;1E4A;004E 032D;1E4A;004E 032D; # (Ṋ; Ṋ; N◌̭; Ṋ; N◌̭; ) LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW 1E4B;1E4B;006E 032D;1E4B;006E 032D; # (ṋ; ṋ; n◌̭; ṋ; n◌̭; ) LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW 1E4C;1E4C;004F 0303 0301;1E4C;004F 0303 0301; # (Ṍ; Ṍ; O◌̃◌́; Ṍ; O◌̃◌́; ) LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 1E4D;1E4D;006F 0303 0301;1E4D;006F 0303 0301; # (ṍ; ṍ; o◌̃◌́; ṍ; o◌̃◌́; ) LATIN SMALL LETTER O WITH TILDE AND ACUTE 1E4E;1E4E;004F 0303 0308;1E4E;004F 0303 0308; # (Ṏ; Ṏ; O◌̃◌̈; Ṏ; O◌̃◌̈; ) LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 1E4F;1E4F;006F 0303 0308;1E4F;006F 0303 0308; # (ṏ; ṏ; o◌̃◌̈; ṏ; o◌̃◌̈; ) LATIN SMALL LETTER O WITH TILDE AND DIAERESIS 1E50;1E50;004F 0304 0300;1E50;004F 0304 0300; # (Ṑ; Ṑ; O◌̄◌̀; Ṑ; O◌̄◌̀; ) LATIN CAPITAL LETTER O WITH MACRON AND GRAVE 1E51;1E51;006F 0304 0300;1E51;006F 0304 0300; # (ṑ; ṑ; o◌̄◌̀; ṑ; o◌̄◌̀; ) LATIN SMALL LETTER O WITH MACRON AND GRAVE 1E52;1E52;004F 0304 0301;1E52;004F 0304 0301; # (Ṓ; Ṓ; O◌̄◌́; Ṓ; O◌̄◌́; ) LATIN CAPITAL LETTER O WITH MACRON AND ACUTE 1E53;1E53;006F 0304 0301;1E53;006F 0304 0301; # (ṓ; ṓ; o◌̄◌́; ṓ; o◌̄◌́; ) LATIN SMALL LETTER O WITH MACRON AND ACUTE 1E54;1E54;0050 0301;1E54;0050 0301; # (Ṕ; Ṕ; P◌́; Ṕ; P◌́; ) LATIN CAPITAL LETTER P WITH ACUTE 1E55;1E55;0070 0301;1E55;0070 0301; # (ṕ; ṕ; p◌́; ṕ; p◌́; ) LATIN SMALL LETTER P WITH ACUTE 1E56;1E56;0050 0307;1E56;0050 0307; # (Ṗ; Ṗ; P◌̇; Ṗ; P◌̇; ) LATIN CAPITAL LETTER P WITH DOT ABOVE 1E57;1E57;0070 0307;1E57;0070 0307; # (ṗ; ṗ; p◌̇; ṗ; p◌̇; ) LATIN SMALL LETTER P WITH DOT ABOVE 1E58;1E58;0052 0307;1E58;0052 0307; # (Ṙ; Ṙ; R◌̇; Ṙ; R◌̇; ) LATIN CAPITAL LETTER R WITH DOT ABOVE 1E59;1E59;0072 0307;1E59;0072 0307; # (ṙ; ṙ; r◌̇; ṙ; r◌̇; ) LATIN SMALL LETTER R WITH DOT ABOVE 1E5A;1E5A;0052 0323;1E5A;0052 0323; # (Ṛ; Ṛ; R◌̣; Ṛ; R◌̣; ) LATIN CAPITAL LETTER R WITH DOT BELOW 1E5B;1E5B;0072 0323;1E5B;0072 0323; # (ṛ; ṛ; r◌̣; ṛ; r◌̣; ) LATIN SMALL LETTER R WITH DOT BELOW 1E5C;1E5C;0052 0323 0304;1E5C;0052 0323 0304; # (Ṝ; Ṝ; R◌̣◌̄; Ṝ; R◌̣◌̄; ) LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON 1E5D;1E5D;0072 0323 0304;1E5D;0072 0323 0304; # (ṝ; ṝ; r◌̣◌̄; ṝ; r◌̣◌̄; ) LATIN SMALL LETTER R WITH DOT BELOW AND MACRON 1E5E;1E5E;0052 0331;1E5E;0052 0331; # (Ṟ; Ṟ; R◌̱; Ṟ; R◌̱; ) LATIN CAPITAL LETTER R WITH LINE BELOW 1E5F;1E5F;0072 0331;1E5F;0072 0331; # (ṟ; ṟ; r◌̱; ṟ; r◌̱; ) LATIN SMALL LETTER R WITH LINE BELOW 1E60;1E60;0053 0307;1E60;0053 0307; # (Ṡ; Ṡ; S◌̇; Ṡ; S◌̇; ) LATIN CAPITAL LETTER S WITH DOT ABOVE 1E61;1E61;0073 0307;1E61;0073 0307; # (ṡ; ṡ; s◌̇; ṡ; s◌̇; ) LATIN SMALL LETTER S WITH DOT ABOVE 1E62;1E62;0053 0323;1E62;0053 0323; # (Ṣ; Ṣ; S◌̣; Ṣ; S◌̣; ) LATIN CAPITAL LETTER S WITH DOT BELOW 1E63;1E63;0073 0323;1E63;0073 0323; # (ṣ; ṣ; s◌̣; ṣ; s◌̣; ) LATIN SMALL LETTER S WITH DOT BELOW 1E64;1E64;0053 0301 0307;1E64;0053 0301 0307; # (Ṥ; Ṥ; S◌́◌̇; Ṥ; S◌́◌̇; ) LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 1E65;1E65;0073 0301 0307;1E65;0073 0301 0307; # (ṥ; ṥ; s◌́◌̇; ṥ; s◌́◌̇; ) LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE 1E66;1E66;0053 030C 0307;1E66;0053 030C 0307; # (Ṧ; Ṧ; S◌̌◌̇; Ṧ; S◌̌◌̇; ) LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE 1E67;1E67;0073 030C 0307;1E67;0073 030C 0307; # (ṧ; ṧ; s◌̌◌̇; ṧ; s◌̌◌̇; ) LATIN SMALL LETTER S WITH CARON AND DOT ABOVE 1E68;1E68;0053 0323 0307;1E68;0053 0323 0307; # (Ṩ; Ṩ; S◌̣◌̇; Ṩ; S◌̣◌̇; ) LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 1E69;1E69;0073 0323 0307;1E69;0073 0323 0307; # (ṩ; ṩ; s◌̣◌̇; ṩ; s◌̣◌̇; ) LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE 1E6A;1E6A;0054 0307;1E6A;0054 0307; # (Ṫ; Ṫ; T◌̇; Ṫ; T◌̇; ) LATIN CAPITAL LETTER T WITH DOT ABOVE 1E6B;1E6B;0074 0307;1E6B;0074 0307; # (ṫ; ṫ; t◌̇; ṫ; t◌̇; ) LATIN SMALL LETTER T WITH DOT ABOVE 1E6C;1E6C;0054 0323;1E6C;0054 0323; # (Ṭ; Ṭ; T◌̣; Ṭ; T◌̣; ) LATIN CAPITAL LETTER T WITH DOT BELOW 1E6D;1E6D;0074 0323;1E6D;0074 0323; # (ṭ; ṭ; t◌̣; ṭ; t◌̣; ) LATIN SMALL LETTER T WITH DOT BELOW 1E6E;1E6E;0054 0331;1E6E;0054 0331; # (Ṯ; Ṯ; T◌̱; Ṯ; T◌̱; ) LATIN CAPITAL LETTER T WITH LINE BELOW 1E6F;1E6F;0074 0331;1E6F;0074 0331; # (ṯ; ṯ; t◌̱; ṯ; t◌̱; ) LATIN SMALL LETTER T WITH LINE BELOW 1E70;1E70;0054 032D;1E70;0054 032D; # (Ṱ; Ṱ; T◌̭; Ṱ; T◌̭; ) LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW 1E71;1E71;0074 032D;1E71;0074 032D; # (ṱ; ṱ; t◌̭; ṱ; t◌̭; ) LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW 1E72;1E72;0055 0324;1E72;0055 0324; # (Ṳ; Ṳ; U◌̤; Ṳ; U◌̤; ) LATIN CAPITAL LETTER U WITH DIAERESIS BELOW 1E73;1E73;0075 0324;1E73;0075 0324; # (ṳ; ṳ; u◌̤; ṳ; u◌̤; ) LATIN SMALL LETTER U WITH DIAERESIS BELOW 1E74;1E74;0055 0330;1E74;0055 0330; # (Ṵ; Ṵ; U◌̰; Ṵ; U◌̰; ) LATIN CAPITAL LETTER U WITH TILDE BELOW 1E75;1E75;0075 0330;1E75;0075 0330; # (ṵ; ṵ; u◌̰; ṵ; u◌̰; ) LATIN SMALL LETTER U WITH TILDE BELOW 1E76;1E76;0055 032D;1E76;0055 032D; # (Ṷ; Ṷ; U◌̭; Ṷ; U◌̭; ) LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW 1E77;1E77;0075 032D;1E77;0075 032D; # (ṷ; ṷ; u◌̭; ṷ; u◌̭; ) LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW 1E78;1E78;0055 0303 0301;1E78;0055 0303 0301; # (Ṹ; Ṹ; U◌̃◌́; Ṹ; U◌̃◌́; ) LATIN CAPITAL LETTER U WITH TILDE AND ACUTE 1E79;1E79;0075 0303 0301;1E79;0075 0303 0301; # (ṹ; ṹ; u◌̃◌́; ṹ; u◌̃◌́; ) LATIN SMALL LETTER U WITH TILDE AND ACUTE 1E7A;1E7A;0055 0304 0308;1E7A;0055 0304 0308; # (Ṻ; Ṻ; U◌̄◌̈; Ṻ; U◌̄◌̈; ) LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS 1E7B;1E7B;0075 0304 0308;1E7B;0075 0304 0308; # (ṻ; ṻ; u◌̄◌̈; ṻ; u◌̄◌̈; ) LATIN SMALL LETTER U WITH MACRON AND DIAERESIS 1E7C;1E7C;0056 0303;1E7C;0056 0303; # (Ṽ; Ṽ; V◌̃; Ṽ; V◌̃; ) LATIN CAPITAL LETTER V WITH TILDE 1E7D;1E7D;0076 0303;1E7D;0076 0303; # (ṽ; ṽ; v◌̃; ṽ; v◌̃; ) LATIN SMALL LETTER V WITH TILDE 1E7E;1E7E;0056 0323;1E7E;0056 0323; # (Ṿ; Ṿ; V◌̣; Ṿ; V◌̣; ) LATIN CAPITAL LETTER V WITH DOT BELOW 1E7F;1E7F;0076 0323;1E7F;0076 0323; # (ṿ; ṿ; v◌̣; ṿ; v◌̣; ) LATIN SMALL LETTER V WITH DOT BELOW 1E80;1E80;0057 0300;1E80;0057 0300; # (Ẁ; Ẁ; W◌̀; Ẁ; W◌̀; ) LATIN CAPITAL LETTER W WITH GRAVE 1E81;1E81;0077 0300;1E81;0077 0300; # (ẁ; ẁ; w◌̀; ẁ; w◌̀; ) LATIN SMALL LETTER W WITH GRAVE 1E82;1E82;0057 0301;1E82;0057 0301; # (Ẃ; Ẃ; W◌́; Ẃ; W◌́; ) LATIN CAPITAL LETTER W WITH ACUTE 1E83;1E83;0077 0301;1E83;0077 0301; # (ẃ; ẃ; w◌́; ẃ; w◌́; ) LATIN SMALL LETTER W WITH ACUTE 1E84;1E84;0057 0308;1E84;0057 0308; # (Ẅ; Ẅ; W◌̈; Ẅ; W◌̈; ) LATIN CAPITAL LETTER W WITH DIAERESIS 1E85;1E85;0077 0308;1E85;0077 0308; # (ẅ; ẅ; w◌̈; ẅ; w◌̈; ) LATIN SMALL LETTER W WITH DIAERESIS 1E86;1E86;0057 0307;1E86;0057 0307; # (Ẇ; Ẇ; W◌̇; Ẇ; W◌̇; ) LATIN CAPITAL LETTER W WITH DOT ABOVE 1E87;1E87;0077 0307;1E87;0077 0307; # (ẇ; ẇ; w◌̇; ẇ; w◌̇; ) LATIN SMALL LETTER W WITH DOT ABOVE 1E88;1E88;0057 0323;1E88;0057 0323; # (Ẉ; Ẉ; W◌̣; Ẉ; W◌̣; ) LATIN CAPITAL LETTER W WITH DOT BELOW 1E89;1E89;0077 0323;1E89;0077 0323; # (ẉ; ẉ; w◌̣; ẉ; w◌̣; ) LATIN SMALL LETTER W WITH DOT BELOW 1E8A;1E8A;0058 0307;1E8A;0058 0307; # (Ẋ; Ẋ; X◌̇; Ẋ; X◌̇; ) LATIN CAPITAL LETTER X WITH DOT ABOVE 1E8B;1E8B;0078 0307;1E8B;0078 0307; # (ẋ; ẋ; x◌̇; ẋ; x◌̇; ) LATIN SMALL LETTER X WITH DOT ABOVE 1E8C;1E8C;0058 0308;1E8C;0058 0308; # (Ẍ; Ẍ; X◌̈; Ẍ; X◌̈; ) LATIN CAPITAL LETTER X WITH DIAERESIS 1E8D;1E8D;0078 0308;1E8D;0078 0308; # (ẍ; ẍ; x◌̈; ẍ; x◌̈; ) LATIN SMALL LETTER X WITH DIAERESIS 1E8E;1E8E;0059 0307;1E8E;0059 0307; # (Ẏ; Ẏ; Y◌̇; Ẏ; Y◌̇; ) LATIN CAPITAL LETTER Y WITH DOT ABOVE 1E8F;1E8F;0079 0307;1E8F;0079 0307; # (ẏ; ẏ; y◌̇; ẏ; y◌̇; ) LATIN SMALL LETTER Y WITH DOT ABOVE 1E90;1E90;005A 0302;1E90;005A 0302; # (Ẑ; Ẑ; Z◌̂; Ẑ; Z◌̂; ) LATIN CAPITAL LETTER Z WITH CIRCUMFLEX 1E91;1E91;007A 0302;1E91;007A 0302; # (ẑ; ẑ; z◌̂; ẑ; z◌̂; ) LATIN SMALL LETTER Z WITH CIRCUMFLEX 1E92;1E92;005A 0323;1E92;005A 0323; # (Ẓ; Ẓ; Z◌̣; Ẓ; Z◌̣; ) LATIN CAPITAL LETTER Z WITH DOT BELOW 1E93;1E93;007A 0323;1E93;007A 0323; # (ẓ; ẓ; z◌̣; ẓ; z◌̣; ) LATIN SMALL LETTER Z WITH DOT BELOW 1E94;1E94;005A 0331;1E94;005A 0331; # (Ẕ; Ẕ; Z◌̱; Ẕ; Z◌̱; ) LATIN CAPITAL LETTER Z WITH LINE BELOW 1E95;1E95;007A 0331;1E95;007A 0331; # (ẕ; ẕ; z◌̱; ẕ; z◌̱; ) LATIN SMALL LETTER Z WITH LINE BELOW 1E96;1E96;0068 0331;1E96;0068 0331; # (ẖ; ẖ; h◌̱; ẖ; h◌̱; ) LATIN SMALL LETTER H WITH LINE BELOW 1E97;1E97;0074 0308;1E97;0074 0308; # (ẗ; ẗ; t◌̈; ẗ; t◌̈; ) LATIN SMALL LETTER T WITH DIAERESIS 1E98;1E98;0077 030A;1E98;0077 030A; # (ẘ; ẘ; w◌̊; ẘ; w◌̊; ) LATIN SMALL LETTER W WITH RING ABOVE 1E99;1E99;0079 030A;1E99;0079 030A; # (ẙ; ẙ; y◌̊; ẙ; y◌̊; ) LATIN SMALL LETTER Y WITH RING ABOVE 1E9A;1E9A;1E9A;0061 02BE;0061 02BE; # (ẚ; ẚ; ẚ; aʾ; aʾ; ) LATIN SMALL LETTER A WITH RIGHT HALF RING 1E9B;1E9B;017F 0307;1E61;0073 0307; # (ẛ; ẛ; ſ◌̇; ṡ; s◌̇; ) LATIN SMALL LETTER LONG S WITH DOT ABOVE 1EA0;1EA0;0041 0323;1EA0;0041 0323; # (Ạ; Ạ; A◌̣; Ạ; A◌̣; ) LATIN CAPITAL LETTER A WITH DOT BELOW 1EA1;1EA1;0061 0323;1EA1;0061 0323; # (ạ; ạ; a◌̣; ạ; a◌̣; ) LATIN SMALL LETTER A WITH DOT BELOW 1EA2;1EA2;0041 0309;1EA2;0041 0309; # (Ả; Ả; A◌̉; Ả; A◌̉; ) LATIN CAPITAL LETTER A WITH HOOK ABOVE 1EA3;1EA3;0061 0309;1EA3;0061 0309; # (ả; ả; a◌̉; ả; a◌̉; ) LATIN SMALL LETTER A WITH HOOK ABOVE 1EA4;1EA4;0041 0302 0301;1EA4;0041 0302 0301; # (Ấ; Ấ; A◌̂◌́; Ấ; A◌̂◌́; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA5;1EA5;0061 0302 0301;1EA5;0061 0302 0301; # (ấ; ấ; a◌̂◌́; ấ; a◌̂◌́; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA6;1EA6;0041 0302 0300;1EA6;0041 0302 0300; # (Ầ; Ầ; A◌̂◌̀; Ầ; A◌̂◌̀; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA7;1EA7;0061 0302 0300;1EA7;0061 0302 0300; # (ầ; ầ; a◌̂◌̀; ầ; a◌̂◌̀; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA8;1EA8;0041 0302 0309;1EA8;0041 0302 0309; # (Ẩ; Ẩ; A◌̂◌̉; Ẩ; A◌̂◌̉; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EA9;1EA9;0061 0302 0309;1EA9;0061 0302 0309; # (ẩ; ẩ; a◌̂◌̉; ẩ; a◌̂◌̉; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EAA;1EAA;0041 0302 0303;1EAA;0041 0302 0303; # (Ẫ; Ẫ; A◌̂◌̃; Ẫ; A◌̂◌̃; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EAB;1EAB;0061 0302 0303;1EAB;0061 0302 0303; # (ẫ; ẫ; a◌̂◌̃; ẫ; a◌̂◌̃; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1EAC;1EAC;0041 0323 0302;1EAC;0041 0323 0302; # (Ậ; Ậ; A◌̣◌̂; Ậ; A◌̣◌̂; ) LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAD;1EAD;0061 0323 0302;1EAD;0061 0323 0302; # (ậ; ậ; a◌̣◌̂; ậ; a◌̣◌̂; ) LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAE;1EAE;0041 0306 0301;1EAE;0041 0306 0301; # (Ắ; Ắ; A◌̆◌́; Ắ; A◌̆◌́; ) LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EAF;1EAF;0061 0306 0301;1EAF;0061 0306 0301; # (ắ; ắ; a◌̆◌́; ắ; a◌̆◌́; ) LATIN SMALL LETTER A WITH BREVE AND ACUTE 1EB0;1EB0;0041 0306 0300;1EB0;0041 0306 0300; # (Ằ; Ằ; A◌̆◌̀; Ằ; A◌̆◌̀; ) LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EB1;1EB1;0061 0306 0300;1EB1;0061 0306 0300; # (ằ; ằ; a◌̆◌̀; ằ; a◌̆◌̀; ) LATIN SMALL LETTER A WITH BREVE AND GRAVE 1EB2;1EB2;0041 0306 0309;1EB2;0041 0306 0309; # (Ẳ; Ẳ; A◌̆◌̉; Ẳ; A◌̆◌̉; ) LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 1EB3;1EB3;0061 0306 0309;1EB3;0061 0306 0309; # (ẳ; ẳ; a◌̆◌̉; ẳ; a◌̆◌̉; ) LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE 1EB4;1EB4;0041 0306 0303;1EB4;0041 0306 0303; # (Ẵ; Ẵ; A◌̆◌̃; Ẵ; A◌̆◌̃; ) LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB5;1EB5;0061 0306 0303;1EB5;0061 0306 0303; # (ẵ; ẵ; a◌̆◌̃; ẵ; a◌̆◌̃; ) LATIN SMALL LETTER A WITH BREVE AND TILDE 1EB6;1EB6;0041 0323 0306;1EB6;0041 0323 0306; # (Ặ; Ặ; A◌̣◌̆; Ặ; A◌̣◌̆; ) LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 1EB7;1EB7;0061 0323 0306;1EB7;0061 0323 0306; # (ặ; ặ; a◌̣◌̆; ặ; a◌̣◌̆; ) LATIN SMALL LETTER A WITH BREVE AND DOT BELOW 1EB8;1EB8;0045 0323;1EB8;0045 0323; # (Ẹ; Ẹ; E◌̣; Ẹ; E◌̣; ) LATIN CAPITAL LETTER E WITH DOT BELOW 1EB9;1EB9;0065 0323;1EB9;0065 0323; # (ẹ; ẹ; e◌̣; ẹ; e◌̣; ) LATIN SMALL LETTER E WITH DOT BELOW 1EBA;1EBA;0045 0309;1EBA;0045 0309; # (Ẻ; Ẻ; E◌̉; Ẻ; E◌̉; ) LATIN CAPITAL LETTER E WITH HOOK ABOVE 1EBB;1EBB;0065 0309;1EBB;0065 0309; # (ẻ; ẻ; e◌̉; ẻ; e◌̉; ) LATIN SMALL LETTER E WITH HOOK ABOVE 1EBC;1EBC;0045 0303;1EBC;0045 0303; # (Ẽ; Ẽ; E◌̃; Ẽ; E◌̃; ) LATIN CAPITAL LETTER E WITH TILDE 1EBD;1EBD;0065 0303;1EBD;0065 0303; # (ẽ; ẽ; e◌̃; ẽ; e◌̃; ) LATIN SMALL LETTER E WITH TILDE 1EBE;1EBE;0045 0302 0301;1EBE;0045 0302 0301; # (Ế; Ế; E◌̂◌́; Ế; E◌̂◌́; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBF;1EBF;0065 0302 0301;1EBF;0065 0302 0301; # (ế; ế; e◌̂◌́; ế; e◌̂◌́; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC0;1EC0;0045 0302 0300;1EC0;0045 0302 0300; # (Ề; Ề; E◌̂◌̀; Ề; E◌̂◌̀; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC1;1EC1;0065 0302 0300;1EC1;0065 0302 0300; # (ề; ề; e◌̂◌̀; ề; e◌̂◌̀; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC2;1EC2;0045 0302 0309;1EC2;0045 0302 0309; # (Ể; Ể; E◌̂◌̉; Ể; E◌̂◌̉; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC3;1EC3;0065 0302 0309;1EC3;0065 0302 0309; # (ể; ể; e◌̂◌̉; ể; e◌̂◌̉; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC4;1EC4;0045 0302 0303;1EC4;0045 0302 0303; # (Ễ; Ễ; E◌̂◌̃; Ễ; E◌̂◌̃; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC5;1EC5;0065 0302 0303;1EC5;0065 0302 0303; # (ễ; ễ; e◌̂◌̃; ễ; e◌̂◌̃; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC6;1EC6;0045 0323 0302;1EC6;0045 0323 0302; # (Ệ; Ệ; E◌̣◌̂; Ệ; E◌̣◌̂; ) LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC7;1EC7;0065 0323 0302;1EC7;0065 0323 0302; # (ệ; ệ; e◌̣◌̂; ệ; e◌̣◌̂; ) LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC8;1EC8;0049 0309;1EC8;0049 0309; # (Ỉ; Ỉ; I◌̉; Ỉ; I◌̉; ) LATIN CAPITAL LETTER I WITH HOOK ABOVE 1EC9;1EC9;0069 0309;1EC9;0069 0309; # (ỉ; ỉ; i◌̉; ỉ; i◌̉; ) LATIN SMALL LETTER I WITH HOOK ABOVE 1ECA;1ECA;0049 0323;1ECA;0049 0323; # (Ị; Ị; I◌̣; Ị; I◌̣; ) LATIN CAPITAL LETTER I WITH DOT BELOW 1ECB;1ECB;0069 0323;1ECB;0069 0323; # (ị; ị; i◌̣; ị; i◌̣; ) LATIN SMALL LETTER I WITH DOT BELOW 1ECC;1ECC;004F 0323;1ECC;004F 0323; # (Ọ; Ọ; O◌̣; Ọ; O◌̣; ) LATIN CAPITAL LETTER O WITH DOT BELOW 1ECD;1ECD;006F 0323;1ECD;006F 0323; # (ọ; ọ; o◌̣; ọ; o◌̣; ) LATIN SMALL LETTER O WITH DOT BELOW 1ECE;1ECE;004F 0309;1ECE;004F 0309; # (Ỏ; Ỏ; O◌̉; Ỏ; O◌̉; ) LATIN CAPITAL LETTER O WITH HOOK ABOVE 1ECF;1ECF;006F 0309;1ECF;006F 0309; # (ỏ; ỏ; o◌̉; ỏ; o◌̉; ) LATIN SMALL LETTER O WITH HOOK ABOVE 1ED0;1ED0;004F 0302 0301;1ED0;004F 0302 0301; # (Ố; Ố; O◌̂◌́; Ố; O◌̂◌́; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED1;1ED1;006F 0302 0301;1ED1;006F 0302 0301; # (ố; ố; o◌̂◌́; ố; o◌̂◌́; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED2;1ED2;004F 0302 0300;1ED2;004F 0302 0300; # (Ồ; Ồ; O◌̂◌̀; Ồ; O◌̂◌̀; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED3;1ED3;006F 0302 0300;1ED3;006F 0302 0300; # (ồ; ồ; o◌̂◌̀; ồ; o◌̂◌̀; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED4;1ED4;004F 0302 0309;1ED4;004F 0302 0309; # (Ổ; Ổ; O◌̂◌̉; Ổ; O◌̂◌̉; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED5;1ED5;006F 0302 0309;1ED5;006F 0302 0309; # (ổ; ổ; o◌̂◌̉; ổ; o◌̂◌̉; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED6;1ED6;004F 0302 0303;1ED6;004F 0302 0303; # (Ỗ; Ỗ; O◌̂◌̃; Ỗ; O◌̂◌̃; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED7;1ED7;006F 0302 0303;1ED7;006F 0302 0303; # (ỗ; ỗ; o◌̂◌̃; ỗ; o◌̂◌̃; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED8;1ED8;004F 0323 0302;1ED8;004F 0323 0302; # (Ộ; Ộ; O◌̣◌̂; Ộ; O◌̣◌̂; ) LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED9;1ED9;006F 0323 0302;1ED9;006F 0323 0302; # (ộ; ộ; o◌̣◌̂; ộ; o◌̣◌̂; ) LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1EDA;1EDA;004F 031B 0301;1EDA;004F 031B 0301; # (Ớ; Ớ; O◌̛◌́; Ớ; O◌̛◌́; ) LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EDB;1EDB;006F 031B 0301;1EDB;006F 031B 0301; # (ớ; ớ; o◌̛◌́; ớ; o◌̛◌́; ) LATIN SMALL LETTER O WITH HORN AND ACUTE 1EDC;1EDC;004F 031B 0300;1EDC;004F 031B 0300; # (Ờ; Ờ; O◌̛◌̀; Ờ; O◌̛◌̀; ) LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EDD;1EDD;006F 031B 0300;1EDD;006F 031B 0300; # (ờ; ờ; o◌̛◌̀; ờ; o◌̛◌̀; ) LATIN SMALL LETTER O WITH HORN AND GRAVE 1EDE;1EDE;004F 031B 0309;1EDE;004F 031B 0309; # (Ở; Ở; O◌̛◌̉; Ở; O◌̛◌̉; ) LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EDF;1EDF;006F 031B 0309;1EDF;006F 031B 0309; # (ở; ở; o◌̛◌̉; ở; o◌̛◌̉; ) LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE 1EE0;1EE0;004F 031B 0303;1EE0;004F 031B 0303; # (Ỡ; Ỡ; O◌̛◌̃; Ỡ; O◌̛◌̃; ) LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EE1;1EE1;006F 031B 0303;1EE1;006F 031B 0303; # (ỡ; ỡ; o◌̛◌̃; ỡ; o◌̛◌̃; ) LATIN SMALL LETTER O WITH HORN AND TILDE 1EE2;1EE2;004F 031B 0323;1EE2;004F 031B 0323; # (Ợ; Ợ; O◌̛◌̣; Ợ; O◌̛◌̣; ) LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1EE3;1EE3;006F 031B 0323;1EE3;006F 031B 0323; # (ợ; ợ; o◌̛◌̣; ợ; o◌̛◌̣; ) LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE4;1EE4;0055 0323;1EE4;0055 0323; # (Ụ; Ụ; U◌̣; Ụ; U◌̣; ) LATIN CAPITAL LETTER U WITH DOT BELOW 1EE5;1EE5;0075 0323;1EE5;0075 0323; # (ụ; ụ; u◌̣; ụ; u◌̣; ) LATIN SMALL LETTER U WITH DOT BELOW 1EE6;1EE6;0055 0309;1EE6;0055 0309; # (Ủ; Ủ; U◌̉; Ủ; U◌̉; ) LATIN CAPITAL LETTER U WITH HOOK ABOVE 1EE7;1EE7;0075 0309;1EE7;0075 0309; # (ủ; ủ; u◌̉; ủ; u◌̉; ) LATIN SMALL LETTER U WITH HOOK ABOVE 1EE8;1EE8;0055 031B 0301;1EE8;0055 031B 0301; # (Ứ; Ứ; U◌̛◌́; Ứ; U◌̛◌́; ) LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EE9;1EE9;0075 031B 0301;1EE9;0075 031B 0301; # (ứ; ứ; u◌̛◌́; ứ; u◌̛◌́; ) LATIN SMALL LETTER U WITH HORN AND ACUTE 1EEA;1EEA;0055 031B 0300;1EEA;0055 031B 0300; # (Ừ; Ừ; U◌̛◌̀; Ừ; U◌̛◌̀; ) LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EEB;1EEB;0075 031B 0300;1EEB;0075 031B 0300; # (ừ; ừ; u◌̛◌̀; ừ; u◌̛◌̀; ) LATIN SMALL LETTER U WITH HORN AND GRAVE 1EEC;1EEC;0055 031B 0309;1EEC;0055 031B 0309; # (Ử; Ử; U◌̛◌̉; Ử; U◌̛◌̉; ) LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EED;1EED;0075 031B 0309;1EED;0075 031B 0309; # (ử; ử; u◌̛◌̉; ử; u◌̛◌̉; ) LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE 1EEE;1EEE;0055 031B 0303;1EEE;0055 031B 0303; # (Ữ; Ữ; U◌̛◌̃; Ữ; U◌̛◌̃; ) LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EEF;1EEF;0075 031B 0303;1EEF;0075 031B 0303; # (ữ; ữ; u◌̛◌̃; ữ; u◌̛◌̃; ) LATIN SMALL LETTER U WITH HORN AND TILDE 1EF0;1EF0;0055 031B 0323;1EF0;0055 031B 0323; # (Ự; Ự; U◌̛◌̣; Ự; U◌̛◌̣; ) LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EF1;1EF1;0075 031B 0323;1EF1;0075 031B 0323; # (ự; ự; u◌̛◌̣; ự; u◌̛◌̣; ) LATIN SMALL LETTER U WITH HORN AND DOT BELOW 1EF2;1EF2;0059 0300;1EF2;0059 0300; # (Ỳ; Ỳ; Y◌̀; Ỳ; Y◌̀; ) LATIN CAPITAL LETTER Y WITH GRAVE 1EF3;1EF3;0079 0300;1EF3;0079 0300; # (ỳ; ỳ; y◌̀; ỳ; y◌̀; ) LATIN SMALL LETTER Y WITH GRAVE 1EF4;1EF4;0059 0323;1EF4;0059 0323; # (Ỵ; Ỵ; Y◌̣; Ỵ; Y◌̣; ) LATIN CAPITAL LETTER Y WITH DOT BELOW 1EF5;1EF5;0079 0323;1EF5;0079 0323; # (ỵ; ỵ; y◌̣; ỵ; y◌̣; ) LATIN SMALL LETTER Y WITH DOT BELOW 1EF6;1EF6;0059 0309;1EF6;0059 0309; # (Ỷ; Ỷ; Y◌̉; Ỷ; Y◌̉; ) LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF7;1EF7;0079 0309;1EF7;0079 0309; # (ỷ; ỷ; y◌̉; ỷ; y◌̉; ) LATIN SMALL LETTER Y WITH HOOK ABOVE 1EF8;1EF8;0059 0303;1EF8;0059 0303; # (Ỹ; Ỹ; Y◌̃; Ỹ; Y◌̃; ) LATIN CAPITAL LETTER Y WITH TILDE 1EF9;1EF9;0079 0303;1EF9;0079 0303; # (ỹ; ỹ; y◌̃; ỹ; y◌̃; ) LATIN SMALL LETTER Y WITH TILDE 1F00;1F00;03B1 0313;1F00;03B1 0313; # (ἀ; ἀ; α◌̓; ἀ; α◌̓; ) GREEK SMALL LETTER ALPHA WITH PSILI 1F01;1F01;03B1 0314;1F01;03B1 0314; # (ἁ; ἁ; α◌̔; ἁ; α◌̔; ) GREEK SMALL LETTER ALPHA WITH DASIA 1F02;1F02;03B1 0313 0300;1F02;03B1 0313 0300; # (ἂ; ἂ; α◌̓◌̀; ἂ; α◌̓◌̀; ) GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA 1F03;1F03;03B1 0314 0300;1F03;03B1 0314 0300; # (ἃ; ἃ; α◌̔◌̀; ἃ; α◌̔◌̀; ) GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA 1F04;1F04;03B1 0313 0301;1F04;03B1 0313 0301; # (ἄ; ἄ; α◌̓◌́; ἄ; α◌̓◌́; ) GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA 1F05;1F05;03B1 0314 0301;1F05;03B1 0314 0301; # (ἅ; ἅ; α◌̔◌́; ἅ; α◌̔◌́; ) GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA 1F06;1F06;03B1 0313 0342;1F06;03B1 0313 0342; # (ἆ; ἆ; α◌̓◌͂; ἆ; α◌̓◌͂; ) GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F07;1F07;03B1 0314 0342;1F07;03B1 0314 0342; # (ἇ; ἇ; α◌̔◌͂; ἇ; α◌̔◌͂; ) GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F08;1F08;0391 0313;1F08;0391 0313; # (Ἀ; Ἀ; Α◌̓; Ἀ; Α◌̓; ) GREEK CAPITAL LETTER ALPHA WITH PSILI 1F09;1F09;0391 0314;1F09;0391 0314; # (Ἁ; Ἁ; Α◌̔; Ἁ; Α◌̔; ) GREEK CAPITAL LETTER ALPHA WITH DASIA 1F0A;1F0A;0391 0313 0300;1F0A;0391 0313 0300; # (Ἂ; Ἂ; Α◌̓◌̀; Ἂ; Α◌̓◌̀; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 1F0B;1F0B;0391 0314 0300;1F0B;0391 0314 0300; # (Ἃ; Ἃ; Α◌̔◌̀; Ἃ; Α◌̔◌̀; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 1F0C;1F0C;0391 0313 0301;1F0C;0391 0313 0301; # (Ἄ; Ἄ; Α◌̓◌́; Ἄ; Α◌̓◌́; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 1F0D;1F0D;0391 0314 0301;1F0D;0391 0314 0301; # (Ἅ; Ἅ; Α◌̔◌́; Ἅ; Α◌̔◌́; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 1F0E;1F0E;0391 0313 0342;1F0E;0391 0313 0342; # (Ἆ; Ἆ; Α◌̓◌͂; Ἆ; Α◌̓◌͂; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F0F;1F0F;0391 0314 0342;1F0F;0391 0314 0342; # (Ἇ; Ἇ; Α◌̔◌͂; Ἇ; Α◌̔◌͂; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F10;1F10;03B5 0313;1F10;03B5 0313; # (ἐ; ἐ; ε◌̓; ἐ; ε◌̓; ) GREEK SMALL LETTER EPSILON WITH PSILI 1F11;1F11;03B5 0314;1F11;03B5 0314; # (ἑ; ἑ; ε◌̔; ἑ; ε◌̔; ) GREEK SMALL LETTER EPSILON WITH DASIA 1F12;1F12;03B5 0313 0300;1F12;03B5 0313 0300; # (ἒ; ἒ; ε◌̓◌̀; ἒ; ε◌̓◌̀; ) GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA 1F13;1F13;03B5 0314 0300;1F13;03B5 0314 0300; # (ἓ; ἓ; ε◌̔◌̀; ἓ; ε◌̔◌̀; ) GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA 1F14;1F14;03B5 0313 0301;1F14;03B5 0313 0301; # (ἔ; ἔ; ε◌̓◌́; ἔ; ε◌̓◌́; ) GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA 1F15;1F15;03B5 0314 0301;1F15;03B5 0314 0301; # (ἕ; ἕ; ε◌̔◌́; ἕ; ε◌̔◌́; ) GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18;1F18;0395 0313;1F18;0395 0313; # (Ἐ; Ἐ; Ε◌̓; Ἐ; Ε◌̓; ) GREEK CAPITAL LETTER EPSILON WITH PSILI 1F19;1F19;0395 0314;1F19;0395 0314; # (Ἑ; Ἑ; Ε◌̔; Ἑ; Ε◌̔; ) GREEK CAPITAL LETTER EPSILON WITH DASIA 1F1A;1F1A;0395 0313 0300;1F1A;0395 0313 0300; # (Ἒ; Ἒ; Ε◌̓◌̀; Ἒ; Ε◌̓◌̀; ) GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA 1F1B;1F1B;0395 0314 0300;1F1B;0395 0314 0300; # (Ἓ; Ἓ; Ε◌̔◌̀; Ἓ; Ε◌̔◌̀; ) GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA 1F1C;1F1C;0395 0313 0301;1F1C;0395 0313 0301; # (Ἔ; Ἔ; Ε◌̓◌́; Ἔ; Ε◌̓◌́; ) GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA 1F1D;1F1D;0395 0314 0301;1F1D;0395 0314 0301; # (Ἕ; Ἕ; Ε◌̔◌́; Ἕ; Ε◌̔◌́; ) GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F20;1F20;03B7 0313;1F20;03B7 0313; # (ἠ; ἠ; η◌̓; ἠ; η◌̓; ) GREEK SMALL LETTER ETA WITH PSILI 1F21;1F21;03B7 0314;1F21;03B7 0314; # (ἡ; ἡ; η◌̔; ἡ; η◌̔; ) GREEK SMALL LETTER ETA WITH DASIA 1F22;1F22;03B7 0313 0300;1F22;03B7 0313 0300; # (ἢ; ἢ; η◌̓◌̀; ἢ; η◌̓◌̀; ) GREEK SMALL LETTER ETA WITH PSILI AND VARIA 1F23;1F23;03B7 0314 0300;1F23;03B7 0314 0300; # (ἣ; ἣ; η◌̔◌̀; ἣ; η◌̔◌̀; ) GREEK SMALL LETTER ETA WITH DASIA AND VARIA 1F24;1F24;03B7 0313 0301;1F24;03B7 0313 0301; # (ἤ; ἤ; η◌̓◌́; ἤ; η◌̓◌́; ) GREEK SMALL LETTER ETA WITH PSILI AND OXIA 1F25;1F25;03B7 0314 0301;1F25;03B7 0314 0301; # (ἥ; ἥ; η◌̔◌́; ἥ; η◌̔◌́; ) GREEK SMALL LETTER ETA WITH DASIA AND OXIA 1F26;1F26;03B7 0313 0342;1F26;03B7 0313 0342; # (ἦ; ἦ; η◌̓◌͂; ἦ; η◌̓◌͂; ) GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI 1F27;1F27;03B7 0314 0342;1F27;03B7 0314 0342; # (ἧ; ἧ; η◌̔◌͂; ἧ; η◌̔◌͂; ) GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI 1F28;1F28;0397 0313;1F28;0397 0313; # (Ἠ; Ἠ; Η◌̓; Ἠ; Η◌̓; ) GREEK CAPITAL LETTER ETA WITH PSILI 1F29;1F29;0397 0314;1F29;0397 0314; # (Ἡ; Ἡ; Η◌̔; Ἡ; Η◌̔; ) GREEK CAPITAL LETTER ETA WITH DASIA 1F2A;1F2A;0397 0313 0300;1F2A;0397 0313 0300; # (Ἢ; Ἢ; Η◌̓◌̀; Ἢ; Η◌̓◌̀; ) GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 1F2B;1F2B;0397 0314 0300;1F2B;0397 0314 0300; # (Ἣ; Ἣ; Η◌̔◌̀; Ἣ; Η◌̔◌̀; ) GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 1F2C;1F2C;0397 0313 0301;1F2C;0397 0313 0301; # (Ἤ; Ἤ; Η◌̓◌́; Ἤ; Η◌̓◌́; ) GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 1F2D;1F2D;0397 0314 0301;1F2D;0397 0314 0301; # (Ἥ; Ἥ; Η◌̔◌́; Ἥ; Η◌̔◌́; ) GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 1F2E;1F2E;0397 0313 0342;1F2E;0397 0313 0342; # (Ἦ; Ἦ; Η◌̓◌͂; Ἦ; Η◌̓◌͂; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 1F2F;1F2F;0397 0314 0342;1F2F;0397 0314 0342; # (Ἧ; Ἧ; Η◌̔◌͂; Ἧ; Η◌̔◌͂; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 1F30;1F30;03B9 0313;1F30;03B9 0313; # (ἰ; ἰ; ι◌̓; ἰ; ι◌̓; ) GREEK SMALL LETTER IOTA WITH PSILI 1F31;1F31;03B9 0314;1F31;03B9 0314; # (ἱ; ἱ; ι◌̔; ἱ; ι◌̔; ) GREEK SMALL LETTER IOTA WITH DASIA 1F32;1F32;03B9 0313 0300;1F32;03B9 0313 0300; # (ἲ; ἲ; ι◌̓◌̀; ἲ; ι◌̓◌̀; ) GREEK SMALL LETTER IOTA WITH PSILI AND VARIA 1F33;1F33;03B9 0314 0300;1F33;03B9 0314 0300; # (ἳ; ἳ; ι◌̔◌̀; ἳ; ι◌̔◌̀; ) GREEK SMALL LETTER IOTA WITH DASIA AND VARIA 1F34;1F34;03B9 0313 0301;1F34;03B9 0313 0301; # (ἴ; ἴ; ι◌̓◌́; ἴ; ι◌̓◌́; ) GREEK SMALL LETTER IOTA WITH PSILI AND OXIA 1F35;1F35;03B9 0314 0301;1F35;03B9 0314 0301; # (ἵ; ἵ; ι◌̔◌́; ἵ; ι◌̔◌́; ) GREEK SMALL LETTER IOTA WITH DASIA AND OXIA 1F36;1F36;03B9 0313 0342;1F36;03B9 0313 0342; # (ἶ; ἶ; ι◌̓◌͂; ἶ; ι◌̓◌͂; ) GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI 1F37;1F37;03B9 0314 0342;1F37;03B9 0314 0342; # (ἷ; ἷ; ι◌̔◌͂; ἷ; ι◌̔◌͂; ) GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI 1F38;1F38;0399 0313;1F38;0399 0313; # (Ἰ; Ἰ; Ι◌̓; Ἰ; Ι◌̓; ) GREEK CAPITAL LETTER IOTA WITH PSILI 1F39;1F39;0399 0314;1F39;0399 0314; # (Ἱ; Ἱ; Ι◌̔; Ἱ; Ι◌̔; ) GREEK CAPITAL LETTER IOTA WITH DASIA 1F3A;1F3A;0399 0313 0300;1F3A;0399 0313 0300; # (Ἲ; Ἲ; Ι◌̓◌̀; Ἲ; Ι◌̓◌̀; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA 1F3B;1F3B;0399 0314 0300;1F3B;0399 0314 0300; # (Ἳ; Ἳ; Ι◌̔◌̀; Ἳ; Ι◌̔◌̀; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA 1F3C;1F3C;0399 0313 0301;1F3C;0399 0313 0301; # (Ἴ; Ἴ; Ι◌̓◌́; Ἴ; Ι◌̓◌́; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA 1F3D;1F3D;0399 0314 0301;1F3D;0399 0314 0301; # (Ἵ; Ἵ; Ι◌̔◌́; Ἵ; Ι◌̔◌́; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA 1F3E;1F3E;0399 0313 0342;1F3E;0399 0313 0342; # (Ἶ; Ἶ; Ι◌̓◌͂; Ἶ; Ι◌̓◌͂; ) GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI 1F3F;1F3F;0399 0314 0342;1F3F;0399 0314 0342; # (Ἷ; Ἷ; Ι◌̔◌͂; Ἷ; Ι◌̔◌͂; ) GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI 1F40;1F40;03BF 0313;1F40;03BF 0313; # (ὀ; ὀ; ο◌̓; ὀ; ο◌̓; ) GREEK SMALL LETTER OMICRON WITH PSILI 1F41;1F41;03BF 0314;1F41;03BF 0314; # (ὁ; ὁ; ο◌̔; ὁ; ο◌̔; ) GREEK SMALL LETTER OMICRON WITH DASIA 1F42;1F42;03BF 0313 0300;1F42;03BF 0313 0300; # (ὂ; ὂ; ο◌̓◌̀; ὂ; ο◌̓◌̀; ) GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA 1F43;1F43;03BF 0314 0300;1F43;03BF 0314 0300; # (ὃ; ὃ; ο◌̔◌̀; ὃ; ο◌̔◌̀; ) GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA 1F44;1F44;03BF 0313 0301;1F44;03BF 0313 0301; # (ὄ; ὄ; ο◌̓◌́; ὄ; ο◌̓◌́; ) GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA 1F45;1F45;03BF 0314 0301;1F45;03BF 0314 0301; # (ὅ; ὅ; ο◌̔◌́; ὅ; ο◌̔◌́; ) GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA 1F48;1F48;039F 0313;1F48;039F 0313; # (Ὀ; Ὀ; Ο◌̓; Ὀ; Ο◌̓; ) GREEK CAPITAL LETTER OMICRON WITH PSILI 1F49;1F49;039F 0314;1F49;039F 0314; # (Ὁ; Ὁ; Ο◌̔; Ὁ; Ο◌̔; ) GREEK CAPITAL LETTER OMICRON WITH DASIA 1F4A;1F4A;039F 0313 0300;1F4A;039F 0313 0300; # (Ὂ; Ὂ; Ο◌̓◌̀; Ὂ; Ο◌̓◌̀; ) GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA 1F4B;1F4B;039F 0314 0300;1F4B;039F 0314 0300; # (Ὃ; Ὃ; Ο◌̔◌̀; Ὃ; Ο◌̔◌̀; ) GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA 1F4C;1F4C;039F 0313 0301;1F4C;039F 0313 0301; # (Ὄ; Ὄ; Ο◌̓◌́; Ὄ; Ο◌̓◌́; ) GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA 1F4D;1F4D;039F 0314 0301;1F4D;039F 0314 0301; # (Ὅ; Ὅ; Ο◌̔◌́; Ὅ; Ο◌̔◌́; ) GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA 1F50;1F50;03C5 0313;1F50;03C5 0313; # (ὐ; ὐ; υ◌̓; ὐ; υ◌̓; ) GREEK SMALL LETTER UPSILON WITH PSILI 1F51;1F51;03C5 0314;1F51;03C5 0314; # (ὑ; ὑ; υ◌̔; ὑ; υ◌̔; ) GREEK SMALL LETTER UPSILON WITH DASIA 1F52;1F52;03C5 0313 0300;1F52;03C5 0313 0300; # (ὒ; ὒ; υ◌̓◌̀; ὒ; υ◌̓◌̀; ) GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 1F53;1F53;03C5 0314 0300;1F53;03C5 0314 0300; # (ὓ; ὓ; υ◌̔◌̀; ὓ; υ◌̔◌̀; ) GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA 1F54;1F54;03C5 0313 0301;1F54;03C5 0313 0301; # (ὔ; ὔ; υ◌̓◌́; ὔ; υ◌̓◌́; ) GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 1F55;1F55;03C5 0314 0301;1F55;03C5 0314 0301; # (ὕ; ὕ; υ◌̔◌́; ὕ; υ◌̔◌́; ) GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA 1F56;1F56;03C5 0313 0342;1F56;03C5 0313 0342; # (ὖ; ὖ; υ◌̓◌͂; ὖ; υ◌̓◌͂; ) GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 1F57;1F57;03C5 0314 0342;1F57;03C5 0314 0342; # (ὗ; ὗ; υ◌̔◌͂; ὗ; υ◌̔◌͂; ) GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI 1F59;1F59;03A5 0314;1F59;03A5 0314; # (Ὑ; Ὑ; Υ◌̔; Ὑ; Υ◌̔; ) GREEK CAPITAL LETTER UPSILON WITH DASIA 1F5B;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; # (Ὓ; Ὓ; Υ◌̔◌̀; Ὓ; Υ◌̔◌̀; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA 1F5D;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; # (Ὕ; Ὕ; Υ◌̔◌́; Ὕ; Υ◌̔◌́; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA 1F5F;1F5F;03A5 0314 0342;1F5F;03A5 0314 0342; # (Ὗ; Ὗ; Υ◌̔◌͂; Ὗ; Υ◌̔◌͂; ) GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI 1F60;1F60;03C9 0313;1F60;03C9 0313; # (ὠ; ὠ; ω◌̓; ὠ; ω◌̓; ) GREEK SMALL LETTER OMEGA WITH PSILI 1F61;1F61;03C9 0314;1F61;03C9 0314; # (ὡ; ὡ; ω◌̔; ὡ; ω◌̔; ) GREEK SMALL LETTER OMEGA WITH DASIA 1F62;1F62;03C9 0313 0300;1F62;03C9 0313 0300; # (ὢ; ὢ; ω◌̓◌̀; ὢ; ω◌̓◌̀; ) GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA 1F63;1F63;03C9 0314 0300;1F63;03C9 0314 0300; # (ὣ; ὣ; ω◌̔◌̀; ὣ; ω◌̔◌̀; ) GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA 1F64;1F64;03C9 0313 0301;1F64;03C9 0313 0301; # (ὤ; ὤ; ω◌̓◌́; ὤ; ω◌̓◌́; ) GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA 1F65;1F65;03C9 0314 0301;1F65;03C9 0314 0301; # (ὥ; ὥ; ω◌̔◌́; ὥ; ω◌̔◌́; ) GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA 1F66;1F66;03C9 0313 0342;1F66;03C9 0313 0342; # (ὦ; ὦ; ω◌̓◌͂; ὦ; ω◌̓◌͂; ) GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI 1F67;1F67;03C9 0314 0342;1F67;03C9 0314 0342; # (ὧ; ὧ; ω◌̔◌͂; ὧ; ω◌̔◌͂; ) GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI 1F68;1F68;03A9 0313;1F68;03A9 0313; # (Ὠ; Ὠ; Ω◌̓; Ὠ; Ω◌̓; ) GREEK CAPITAL LETTER OMEGA WITH PSILI 1F69;1F69;03A9 0314;1F69;03A9 0314; # (Ὡ; Ὡ; Ω◌̔; Ὡ; Ω◌̔; ) GREEK CAPITAL LETTER OMEGA WITH DASIA 1F6A;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; # (Ὢ; Ὢ; Ω◌̓◌̀; Ὢ; Ω◌̓◌̀; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 1F6B;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; # (Ὣ; Ὣ; Ω◌̔◌̀; Ὣ; Ω◌̔◌̀; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 1F6C;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; # (Ὤ; Ὤ; Ω◌̓◌́; Ὤ; Ω◌̓◌́; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 1F6D;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; # (Ὥ; Ὥ; Ω◌̔◌́; Ὥ; Ω◌̔◌́; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 1F6E;1F6E;03A9 0313 0342;1F6E;03A9 0313 0342; # (Ὦ; Ὦ; Ω◌̓◌͂; Ὦ; Ω◌̓◌͂; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 1F6F;1F6F;03A9 0314 0342;1F6F;03A9 0314 0342; # (Ὧ; Ὧ; Ω◌̔◌͂; Ὧ; Ω◌̔◌͂; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 1F70;1F70;03B1 0300;1F70;03B1 0300; # (ὰ; ὰ; α◌̀; ὰ; α◌̀; ) GREEK SMALL LETTER ALPHA WITH VARIA 1F71;03AC;03B1 0301;03AC;03B1 0301; # (ά; ά; α◌́; ά; α◌́; ) GREEK SMALL LETTER ALPHA WITH OXIA 1F72;1F72;03B5 0300;1F72;03B5 0300; # (ὲ; ὲ; ε◌̀; ὲ; ε◌̀; ) GREEK SMALL LETTER EPSILON WITH VARIA 1F73;03AD;03B5 0301;03AD;03B5 0301; # (έ; έ; ε◌́; έ; ε◌́; ) GREEK SMALL LETTER EPSILON WITH OXIA 1F74;1F74;03B7 0300;1F74;03B7 0300; # (ὴ; ὴ; η◌̀; ὴ; η◌̀; ) GREEK SMALL LETTER ETA WITH VARIA 1F75;03AE;03B7 0301;03AE;03B7 0301; # (ή; ή; η◌́; ή; η◌́; ) GREEK SMALL LETTER ETA WITH OXIA 1F76;1F76;03B9 0300;1F76;03B9 0300; # (ὶ; ὶ; ι◌̀; ὶ; ι◌̀; ) GREEK SMALL LETTER IOTA WITH VARIA 1F77;03AF;03B9 0301;03AF;03B9 0301; # (ί; ί; ι◌́; ί; ι◌́; ) GREEK SMALL LETTER IOTA WITH OXIA 1F78;1F78;03BF 0300;1F78;03BF 0300; # (ὸ; ὸ; ο◌̀; ὸ; ο◌̀; ) GREEK SMALL LETTER OMICRON WITH VARIA 1F79;03CC;03BF 0301;03CC;03BF 0301; # (ό; ό; ο◌́; ό; ο◌́; ) GREEK SMALL LETTER OMICRON WITH OXIA 1F7A;1F7A;03C5 0300;1F7A;03C5 0300; # (ὺ; ὺ; υ◌̀; ὺ; υ◌̀; ) GREEK SMALL LETTER UPSILON WITH VARIA 1F7B;03CD;03C5 0301;03CD;03C5 0301; # (ύ; ύ; υ◌́; ύ; υ◌́; ) GREEK SMALL LETTER UPSILON WITH OXIA 1F7C;1F7C;03C9 0300;1F7C;03C9 0300; # (ὼ; ὼ; ω◌̀; ὼ; ω◌̀; ) GREEK SMALL LETTER OMEGA WITH VARIA 1F7D;03CE;03C9 0301;03CE;03C9 0301; # (ώ; ώ; ω◌́; ώ; ω◌́; ) GREEK SMALL LETTER OMEGA WITH OXIA 1F80;1F80;03B1 0313 0345;1F80;03B1 0313 0345; # (ᾀ; ᾀ; α◌̓◌ͅ; ᾀ; α◌̓◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 1F81;1F81;03B1 0314 0345;1F81;03B1 0314 0345; # (ᾁ; ᾁ; α◌̔◌ͅ; ᾁ; α◌̔◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 1F82;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; # (ᾂ; ᾂ; α◌̓◌̀◌ͅ; ᾂ; α◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F83;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; # (ᾃ; ᾃ; α◌̔◌̀◌ͅ; ᾃ; α◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F84;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; # (ᾄ; ᾄ; α◌̓◌́◌ͅ; ᾄ; α◌̓◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F85;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; # (ᾅ; ᾅ; α◌̔◌́◌ͅ; ᾅ; α◌̔◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F86;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; # (ᾆ; ᾆ; α◌̓◌͂◌ͅ; ᾆ; α◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F87;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; # (ᾇ; ᾇ; α◌̔◌͂◌ͅ; ᾇ; α◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F88;1F88;0391 0313 0345;1F88;0391 0313 0345; # (ᾈ; ᾈ; Α◌̓◌ͅ; ᾈ; Α◌̓◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F89;1F89;0391 0314 0345;1F89;0391 0314 0345; # (ᾉ; ᾉ; Α◌̔◌ͅ; ᾉ; Α◌̔◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 1F8A;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; # (ᾊ; ᾊ; Α◌̓◌̀◌ͅ; ᾊ; Α◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F8B;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; # (ᾋ; ᾋ; Α◌̔◌̀◌ͅ; ᾋ; Α◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F8C;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; # (ᾌ; ᾌ; Α◌̓◌́◌ͅ; ᾌ; Α◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F8D;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; # (ᾍ; ᾍ; Α◌̔◌́◌ͅ; ᾍ; Α◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F8E;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; # (ᾎ; ᾎ; Α◌̓◌͂◌ͅ; ᾎ; Α◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F8F;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; # (ᾏ; ᾏ; Α◌̔◌͂◌ͅ; ᾏ; Α◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F90;1F90;03B7 0313 0345;1F90;03B7 0313 0345; # (ᾐ; ᾐ; η◌̓◌ͅ; ᾐ; η◌̓◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 1F91;1F91;03B7 0314 0345;1F91;03B7 0314 0345; # (ᾑ; ᾑ; η◌̔◌ͅ; ᾑ; η◌̔◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 1F92;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; # (ᾒ; ᾒ; η◌̓◌̀◌ͅ; ᾒ; η◌̓◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F93;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; # (ᾓ; ᾓ; η◌̔◌̀◌ͅ; ᾓ; η◌̔◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F94;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; # (ᾔ; ᾔ; η◌̓◌́◌ͅ; ᾔ; η◌̓◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F95;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; # (ᾕ; ᾕ; η◌̔◌́◌ͅ; ᾕ; η◌̔◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F96;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; # (ᾖ; ᾖ; η◌̓◌͂◌ͅ; ᾖ; η◌̓◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F97;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; # (ᾗ; ᾗ; η◌̔◌͂◌ͅ; ᾗ; η◌̔◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F98;1F98;0397 0313 0345;1F98;0397 0313 0345; # (ᾘ; ᾘ; Η◌̓◌ͅ; ᾘ; Η◌̓◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F99;1F99;0397 0314 0345;1F99;0397 0314 0345; # (ᾙ; ᾙ; Η◌̔◌ͅ; ᾙ; Η◌̔◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 1F9A;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; # (ᾚ; ᾚ; Η◌̓◌̀◌ͅ; ᾚ; Η◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F9B;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; # (ᾛ; ᾛ; Η◌̔◌̀◌ͅ; ᾛ; Η◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F9C;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; # (ᾜ; ᾜ; Η◌̓◌́◌ͅ; ᾜ; Η◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F9D;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; # (ᾝ; ᾝ; Η◌̔◌́◌ͅ; ᾝ; Η◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F9E;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; # (ᾞ; ᾞ; Η◌̓◌͂◌ͅ; ᾞ; Η◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F9F;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; # (ᾟ; ᾟ; Η◌̔◌͂◌ͅ; ᾟ; Η◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FA0;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; # (ᾠ; ᾠ; ω◌̓◌ͅ; ᾠ; ω◌̓◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 1FA1;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; # (ᾡ; ᾡ; ω◌̔◌ͅ; ᾡ; ω◌̔◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 1FA2;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; # (ᾢ; ᾢ; ω◌̓◌̀◌ͅ; ᾢ; ω◌̓◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1FA3;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; # (ᾣ; ᾣ; ω◌̔◌̀◌ͅ; ᾣ; ω◌̔◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1FA4;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; # (ᾤ; ᾤ; ω◌̓◌́◌ͅ; ᾤ; ω◌̓◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1FA5;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; # (ᾥ; ᾥ; ω◌̔◌́◌ͅ; ᾥ; ω◌̔◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1FA6;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; # (ᾦ; ᾦ; ω◌̓◌͂◌ͅ; ᾦ; ω◌̓◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1FA7;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; # (ᾧ; ᾧ; ω◌̔◌͂◌ͅ; ᾧ; ω◌̔◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1FA8;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; # (ᾨ; ᾨ; Ω◌̓◌ͅ; ᾨ; Ω◌̓◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1FA9;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; # (ᾩ; ᾩ; Ω◌̔◌ͅ; ᾩ; Ω◌̔◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 1FAA;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; # (ᾪ; ᾪ; Ω◌̓◌̀◌ͅ; ᾪ; Ω◌̓◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1FAB;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; # (ᾫ; ᾫ; Ω◌̔◌̀◌ͅ; ᾫ; Ω◌̔◌̀◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1FAC;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; # (ᾬ; ᾬ; Ω◌̓◌́◌ͅ; ᾬ; Ω◌̓◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1FAD;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; # (ᾭ; ᾭ; Ω◌̔◌́◌ͅ; ᾭ; Ω◌̔◌́◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1FAE;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; # (ᾮ; ᾮ; Ω◌̓◌͂◌ͅ; ᾮ; Ω◌̓◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FAF;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; # (ᾯ; ᾯ; Ω◌̔◌͂◌ͅ; ᾯ; Ω◌̔◌͂◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FB0;1FB0;03B1 0306;1FB0;03B1 0306; # (ᾰ; ᾰ; α◌̆; ᾰ; α◌̆; ) GREEK SMALL LETTER ALPHA WITH VRACHY 1FB1;1FB1;03B1 0304;1FB1;03B1 0304; # (ᾱ; ᾱ; α◌̄; ᾱ; α◌̄; ) GREEK SMALL LETTER ALPHA WITH MACRON 1FB2;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; # (ᾲ; ᾲ; α◌̀◌ͅ; ᾲ; α◌̀◌ͅ; ) GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB3;1FB3;03B1 0345;1FB3;03B1 0345; # (ᾳ; ᾳ; α◌ͅ; ᾳ; α◌ͅ; ) GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 1FB4;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; # (ᾴ; ᾴ; α◌́◌ͅ; ᾴ; α◌́◌ͅ; ) GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 1FB6;1FB6;03B1 0342;1FB6;03B1 0342; # (ᾶ; ᾶ; α◌͂; ᾶ; α◌͂; ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI 1FB7;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; # (ᾷ; ᾷ; α◌͂◌ͅ; ᾷ; α◌͂◌ͅ; ) GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 1FB8;1FB8;0391 0306;1FB8;0391 0306; # (Ᾰ; Ᾰ; Α◌̆; Ᾰ; Α◌̆; ) GREEK CAPITAL LETTER ALPHA WITH VRACHY 1FB9;1FB9;0391 0304;1FB9;0391 0304; # (Ᾱ; Ᾱ; Α◌̄; Ᾱ; Α◌̄; ) GREEK CAPITAL LETTER ALPHA WITH MACRON 1FBA;1FBA;0391 0300;1FBA;0391 0300; # (Ὰ; Ὰ; Α◌̀; Ὰ; Α◌̀; ) GREEK CAPITAL LETTER ALPHA WITH VARIA 1FBB;0386;0391 0301;0386;0391 0301; # (Ά; Ά; Α◌́; Ά; Α◌́; ) GREEK CAPITAL LETTER ALPHA WITH OXIA 1FBC;1FBC;0391 0345;1FBC;0391 0345; # (ᾼ; ᾼ; Α◌ͅ; ᾼ; Α◌ͅ; ) GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 1FBD;1FBD;1FBD;0020 0313;0020 0313; # (᾽; ᾽; ᾽; ◌̓; ◌̓; ) GREEK KORONIS 1FBE;03B9;03B9;03B9;03B9; # (ι; ι; ι; ι; ι; ) GREEK PROSGEGRAMMENI 1FBF;1FBF;1FBF;0020 0313;0020 0313; # (᾿; ᾿; ᾿; ◌̓; ◌̓; ) GREEK PSILI 1FC0;1FC0;1FC0;0020 0342;0020 0342; # (῀; ῀; ῀; ◌͂; ◌͂; ) GREEK PERISPOMENI 1FC1;1FC1;00A8 0342;0020 0308 0342;0020 0308 0342; # (῁; ῁; ¨◌͂; ◌̈◌͂; ◌̈◌͂; ) GREEK DIALYTIKA AND PERISPOMENI 1FC2;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; # (ῂ; ῂ; η◌̀◌ͅ; ῂ; η◌̀◌ͅ; ) GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 1FC3;1FC3;03B7 0345;1FC3;03B7 0345; # (ῃ; ῃ; η◌ͅ; ῃ; η◌ͅ; ) GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 1FC4;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; # (ῄ; ῄ; η◌́◌ͅ; ῄ; η◌́◌ͅ; ) GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 1FC6;1FC6;03B7 0342;1FC6;03B7 0342; # (ῆ; ῆ; η◌͂; ῆ; η◌͂; ) GREEK SMALL LETTER ETA WITH PERISPOMENI 1FC7;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; # (ῇ; ῇ; η◌͂◌ͅ; ῇ; η◌͂◌ͅ; ) GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 1FC8;1FC8;0395 0300;1FC8;0395 0300; # (Ὲ; Ὲ; Ε◌̀; Ὲ; Ε◌̀; ) GREEK CAPITAL LETTER EPSILON WITH VARIA 1FC9;0388;0395 0301;0388;0395 0301; # (Έ; Έ; Ε◌́; Έ; Ε◌́; ) GREEK CAPITAL LETTER EPSILON WITH OXIA 1FCA;1FCA;0397 0300;1FCA;0397 0300; # (Ὴ; Ὴ; Η◌̀; Ὴ; Η◌̀; ) GREEK CAPITAL LETTER ETA WITH VARIA 1FCB;0389;0397 0301;0389;0397 0301; # (Ή; Ή; Η◌́; Ή; Η◌́; ) GREEK CAPITAL LETTER ETA WITH OXIA 1FCC;1FCC;0397 0345;1FCC;0397 0345; # (ῌ; ῌ; Η◌ͅ; ῌ; Η◌ͅ; ) GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FCD;1FCD;1FBF 0300;0020 0313 0300;0020 0313 0300; # (῍; ῍; ᾿◌̀; ◌̓◌̀; ◌̓◌̀; ) GREEK PSILI AND VARIA 1FCE;1FCE;1FBF 0301;0020 0313 0301;0020 0313 0301; # (῎; ῎; ᾿◌́; ◌̓◌́; ◌̓◌́; ) GREEK PSILI AND OXIA 1FCF;1FCF;1FBF 0342;0020 0313 0342;0020 0313 0342; # (῏; ῏; ᾿◌͂; ◌̓◌͂; ◌̓◌͂; ) GREEK PSILI AND PERISPOMENI 1FD0;1FD0;03B9 0306;1FD0;03B9 0306; # (ῐ; ῐ; ι◌̆; ῐ; ι◌̆; ) GREEK SMALL LETTER IOTA WITH VRACHY 1FD1;1FD1;03B9 0304;1FD1;03B9 0304; # (ῑ; ῑ; ι◌̄; ῑ; ι◌̄; ) GREEK SMALL LETTER IOTA WITH MACRON 1FD2;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; # (ῒ; ῒ; ι◌̈◌̀; ῒ; ι◌̈◌̀; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD3;0390;03B9 0308 0301;0390;03B9 0308 0301; # (ΐ; ΐ; ι◌̈◌́; ΐ; ι◌̈◌́; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD6;1FD6;03B9 0342;1FD6;03B9 0342; # (ῖ; ῖ; ι◌͂; ῖ; ι◌͂; ) GREEK SMALL LETTER IOTA WITH PERISPOMENI 1FD7;1FD7;03B9 0308 0342;1FD7;03B9 0308 0342; # (ῗ; ῗ; ι◌̈◌͂; ῗ; ι◌̈◌͂; ) GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FD8;1FD8;0399 0306;1FD8;0399 0306; # (Ῐ; Ῐ; Ι◌̆; Ῐ; Ι◌̆; ) GREEK CAPITAL LETTER IOTA WITH VRACHY 1FD9;1FD9;0399 0304;1FD9;0399 0304; # (Ῑ; Ῑ; Ι◌̄; Ῑ; Ι◌̄; ) GREEK CAPITAL LETTER IOTA WITH MACRON 1FDA;1FDA;0399 0300;1FDA;0399 0300; # (Ὶ; Ὶ; Ι◌̀; Ὶ; Ι◌̀; ) GREEK CAPITAL LETTER IOTA WITH VARIA 1FDB;038A;0399 0301;038A;0399 0301; # (Ί; Ί; Ι◌́; Ί; Ι◌́; ) GREEK CAPITAL LETTER IOTA WITH OXIA 1FDD;1FDD;1FFE 0300;0020 0314 0300;0020 0314 0300; # (῝; ῝; ῾◌̀; ◌̔◌̀; ◌̔◌̀; ) GREEK DASIA AND VARIA 1FDE;1FDE;1FFE 0301;0020 0314 0301;0020 0314 0301; # (῞; ῞; ῾◌́; ◌̔◌́; ◌̔◌́; ) GREEK DASIA AND OXIA 1FDF;1FDF;1FFE 0342;0020 0314 0342;0020 0314 0342; # (῟; ῟; ῾◌͂; ◌̔◌͂; ◌̔◌͂; ) GREEK DASIA AND PERISPOMENI 1FE0;1FE0;03C5 0306;1FE0;03C5 0306; # (ῠ; ῠ; υ◌̆; ῠ; υ◌̆; ) GREEK SMALL LETTER UPSILON WITH VRACHY 1FE1;1FE1;03C5 0304;1FE1;03C5 0304; # (ῡ; ῡ; υ◌̄; ῡ; υ◌̄; ) GREEK SMALL LETTER UPSILON WITH MACRON 1FE2;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; # (ῢ; ῢ; υ◌̈◌̀; ῢ; υ◌̈◌̀; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE3;03B0;03C5 0308 0301;03B0;03C5 0308 0301; # (ΰ; ΰ; υ◌̈◌́; ΰ; υ◌̈◌́; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE4;1FE4;03C1 0313;1FE4;03C1 0313; # (ῤ; ῤ; ρ◌̓; ῤ; ρ◌̓; ) GREEK SMALL LETTER RHO WITH PSILI 1FE5;1FE5;03C1 0314;1FE5;03C1 0314; # (ῥ; ῥ; ρ◌̔; ῥ; ρ◌̔; ) GREEK SMALL LETTER RHO WITH DASIA 1FE6;1FE6;03C5 0342;1FE6;03C5 0342; # (ῦ; ῦ; υ◌͂; ῦ; υ◌͂; ) GREEK SMALL LETTER UPSILON WITH PERISPOMENI 1FE7;1FE7;03C5 0308 0342;1FE7;03C5 0308 0342; # (ῧ; ῧ; υ◌̈◌͂; ῧ; υ◌̈◌͂; ) GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FE8;1FE8;03A5 0306;1FE8;03A5 0306; # (Ῠ; Ῠ; Υ◌̆; Ῠ; Υ◌̆; ) GREEK CAPITAL LETTER UPSILON WITH VRACHY 1FE9;1FE9;03A5 0304;1FE9;03A5 0304; # (Ῡ; Ῡ; Υ◌̄; Ῡ; Υ◌̄; ) GREEK CAPITAL LETTER UPSILON WITH MACRON 1FEA;1FEA;03A5 0300;1FEA;03A5 0300; # (Ὺ; Ὺ; Υ◌̀; Ὺ; Υ◌̀; ) GREEK CAPITAL LETTER UPSILON WITH VARIA 1FEB;038E;03A5 0301;038E;03A5 0301; # (Ύ; Ύ; Υ◌́; Ύ; Υ◌́; ) GREEK CAPITAL LETTER UPSILON WITH OXIA 1FEC;1FEC;03A1 0314;1FEC;03A1 0314; # (Ῥ; Ῥ; Ρ◌̔; Ῥ; Ρ◌̔; ) GREEK CAPITAL LETTER RHO WITH DASIA 1FED;1FED;00A8 0300;0020 0308 0300;0020 0308 0300; # (῭; ῭; ¨◌̀; ◌̈◌̀; ◌̈◌̀; ) GREEK DIALYTIKA AND VARIA 1FEE;0385;00A8 0301;0020 0308 0301;0020 0308 0301; # (΅; ΅; ¨◌́; ◌̈◌́; ◌̈◌́; ) GREEK DIALYTIKA AND OXIA 1FEF;0060;0060;0060;0060; # (`; `; `; `; `; ) GREEK VARIA 1FF2;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; # (ῲ; ῲ; ω◌̀◌ͅ; ῲ; ω◌̀◌ͅ; ) GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 1FF3;1FF3;03C9 0345;1FF3;03C9 0345; # (ῳ; ῳ; ω◌ͅ; ῳ; ω◌ͅ; ) GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FF4;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; # (ῴ; ῴ; ω◌́◌ͅ; ῴ; ω◌́◌ͅ; ) GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1FF6;1FF6;03C9 0342;1FF6;03C9 0342; # (ῶ; ῶ; ω◌͂; ῶ; ω◌͂; ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI 1FF7;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; # (ῷ; ῷ; ω◌͂◌ͅ; ῷ; ω◌͂◌ͅ; ) GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 1FF8;1FF8;039F 0300;1FF8;039F 0300; # (Ὸ; Ὸ; Ο◌̀; Ὸ; Ο◌̀; ) GREEK CAPITAL LETTER OMICRON WITH VARIA 1FF9;038C;039F 0301;038C;039F 0301; # (Ό; Ό; Ο◌́; Ό; Ο◌́; ) GREEK CAPITAL LETTER OMICRON WITH OXIA 1FFA;1FFA;03A9 0300;1FFA;03A9 0300; # (Ὼ; Ὼ; Ω◌̀; Ὼ; Ω◌̀; ) GREEK CAPITAL LETTER OMEGA WITH VARIA 1FFB;038F;03A9 0301;038F;03A9 0301; # (Ώ; Ώ; Ω◌́; Ώ; Ω◌́; ) GREEK CAPITAL LETTER OMEGA WITH OXIA 1FFC;1FFC;03A9 0345;1FFC;03A9 0345; # (ῼ; ῼ; Ω◌ͅ; ῼ; Ω◌ͅ; ) GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 1FFD;00B4;00B4;0020 0301;0020 0301; # (´; ´; ´; ◌́; ◌́; ) GREEK OXIA 1FFE;1FFE;1FFE;0020 0314;0020 0314; # (῾; ῾; ῾; ◌̔; ◌̔; ) GREEK DASIA 2000;2002;2002;0020;0020; # ( ;  ;  ; ; ; ) EN QUAD 2001;2003;2003;0020;0020; # ( ;  ;  ; ; ; ) EM QUAD 2002;2002;2002;0020;0020; # ( ;  ;  ; ; ; ) EN SPACE 2003;2003;2003;0020;0020; # ( ;  ;  ; ; ; ) EM SPACE 2004;2004;2004;0020;0020; # ( ;  ;  ; ; ; ) THREE-PER-EM SPACE 2005;2005;2005;0020;0020; # ( ;  ;  ; ; ; ) FOUR-PER-EM SPACE 2006;2006;2006;0020;0020; # ( ;  ;  ; ; ; ) SIX-PER-EM SPACE 2007;2007;2007;0020;0020; # ( ;  ;  ; ; ; ) FIGURE SPACE 2008;2008;2008;0020;0020; # ( ;  ;  ; ; ; ) PUNCTUATION SPACE 2009;2009;2009;0020;0020; # ( ;  ;  ; ; ; ) THIN SPACE 200A;200A;200A;0020;0020; # ( ;  ;  ; ; ; ) HAIR SPACE 2011;2011;2011;2010;2010; # (‑; ‑; ‑; ‐; ‐; ) NON-BREAKING HYPHEN 2017;2017;2017;0020 0333;0020 0333; # (‗; ‗; ‗; ◌̳; ◌̳; ) DOUBLE LOW LINE 2024;2024;2024;002E;002E; # (․; ․; ․; .; .; ) ONE DOT LEADER 2025;2025;2025;002E 002E;002E 002E; # (‥; ‥; ‥; ..; ..; ) TWO DOT LEADER 2026;2026;2026;002E 002E 002E;002E 002E 002E; # (…; …; …; ...; ...; ) HORIZONTAL ELLIPSIS 202F;202F;202F;0020;0020; # ( ;  ;  ; ; ; ) NARROW NO-BREAK SPACE 2033;2033;2033;2032 2032;2032 2032; # (″; ″; ″; ′′; ′′; ) DOUBLE PRIME 2034;2034;2034;2032 2032 2032;2032 2032 2032; # (‴; ‴; ‴; ′′′; ′′′; ) TRIPLE PRIME 2036;2036;2036;2035 2035;2035 2035; # (‶; ‶; ‶; ‵‵; ‵‵; ) REVERSED DOUBLE PRIME 2037;2037;2037;2035 2035 2035;2035 2035 2035; # (‷; ‷; ‷; ‵‵‵; ‵‵‵; ) REVERSED TRIPLE PRIME 203C;203C;203C;0021 0021;0021 0021; # (‼; ‼; ‼; !!; !!; ) DOUBLE EXCLAMATION MARK 203E;203E;203E;0020 0305;0020 0305; # (‾; ‾; ‾; ◌̅; ◌̅; ) OVERLINE 2047;2047;2047;003F 003F;003F 003F; # (⁇; ⁇; ⁇; ??; ??; ) DOUBLE QUESTION MARK 2048;2048;2048;003F 0021;003F 0021; # (⁈; ⁈; ⁈; ?!; ?!; ) QUESTION EXCLAMATION MARK 2049;2049;2049;0021 003F;0021 003F; # (⁉; ⁉; ⁉; !?; !?; ) EXCLAMATION QUESTION MARK 2057;2057;2057;2032 2032 2032 2032;2032 2032 2032 2032; # (⁗; ⁗; ⁗; ′′′′; ′′′′; ) QUADRUPLE PRIME 205F;205F;205F;0020;0020; # ( ;  ;  ; ; ; ) MEDIUM MATHEMATICAL SPACE 2070;2070;2070;0030;0030; # (⁰; ⁰; ⁰; 0; 0; ) SUPERSCRIPT ZERO 2071;2071;2071;0069;0069; # (ⁱ; ⁱ; ⁱ; i; i; ) SUPERSCRIPT LATIN SMALL LETTER I 2074;2074;2074;0034;0034; # (⁴; ⁴; ⁴; 4; 4; ) SUPERSCRIPT FOUR 2075;2075;2075;0035;0035; # (⁵; ⁵; ⁵; 5; 5; ) SUPERSCRIPT FIVE 2076;2076;2076;0036;0036; # (⁶; ⁶; ⁶; 6; 6; ) SUPERSCRIPT SIX 2077;2077;2077;0037;0037; # (⁷; ⁷; ⁷; 7; 7; ) SUPERSCRIPT SEVEN 2078;2078;2078;0038;0038; # (⁸; ⁸; ⁸; 8; 8; ) SUPERSCRIPT EIGHT 2079;2079;2079;0039;0039; # (⁹; ⁹; ⁹; 9; 9; ) SUPERSCRIPT NINE 207A;207A;207A;002B;002B; # (⁺; ⁺; ⁺; +; +; ) SUPERSCRIPT PLUS SIGN 207B;207B;207B;2212;2212; # (⁻; ⁻; ⁻; −; −; ) SUPERSCRIPT MINUS 207C;207C;207C;003D;003D; # (⁼; ⁼; ⁼; =; =; ) SUPERSCRIPT EQUALS SIGN 207D;207D;207D;0028;0028; # (⁽; ⁽; ⁽; (; (; ) SUPERSCRIPT LEFT PARENTHESIS 207E;207E;207E;0029;0029; # (⁾; ⁾; ⁾; ); ); ) SUPERSCRIPT RIGHT PARENTHESIS 207F;207F;207F;006E;006E; # (ⁿ; ⁿ; ⁿ; n; n; ) SUPERSCRIPT LATIN SMALL LETTER N 2080;2080;2080;0030;0030; # (₀; ₀; ₀; 0; 0; ) SUBSCRIPT ZERO 2081;2081;2081;0031;0031; # (₁; ₁; ₁; 1; 1; ) SUBSCRIPT ONE 2082;2082;2082;0032;0032; # (₂; ₂; ₂; 2; 2; ) SUBSCRIPT TWO 2083;2083;2083;0033;0033; # (₃; ₃; ₃; 3; 3; ) SUBSCRIPT THREE 2084;2084;2084;0034;0034; # (₄; ₄; ₄; 4; 4; ) SUBSCRIPT FOUR 2085;2085;2085;0035;0035; # (₅; ₅; ₅; 5; 5; ) SUBSCRIPT FIVE 2086;2086;2086;0036;0036; # (₆; ₆; ₆; 6; 6; ) SUBSCRIPT SIX 2087;2087;2087;0037;0037; # (₇; ₇; ₇; 7; 7; ) SUBSCRIPT SEVEN 2088;2088;2088;0038;0038; # (₈; ₈; ₈; 8; 8; ) SUBSCRIPT EIGHT 2089;2089;2089;0039;0039; # (₉; ₉; ₉; 9; 9; ) SUBSCRIPT NINE 208A;208A;208A;002B;002B; # (₊; ₊; ₊; +; +; ) SUBSCRIPT PLUS SIGN 208B;208B;208B;2212;2212; # (₋; ₋; ₋; −; −; ) SUBSCRIPT MINUS 208C;208C;208C;003D;003D; # (₌; ₌; ₌; =; =; ) SUBSCRIPT EQUALS SIGN 208D;208D;208D;0028;0028; # (₍; ₍; ₍; (; (; ) SUBSCRIPT LEFT PARENTHESIS 208E;208E;208E;0029;0029; # (₎; ₎; ₎; ); ); ) SUBSCRIPT RIGHT PARENTHESIS 2090;2090;2090;0061;0061; # (ₐ; ₐ; ₐ; a; a; ) LATIN SUBSCRIPT SMALL LETTER A 2091;2091;2091;0065;0065; # (ₑ; ₑ; ₑ; e; e; ) LATIN SUBSCRIPT SMALL LETTER E 2092;2092;2092;006F;006F; # (ₒ; ₒ; ₒ; o; o; ) LATIN SUBSCRIPT SMALL LETTER O 2093;2093;2093;0078;0078; # (ₓ; ₓ; ₓ; x; x; ) LATIN SUBSCRIPT SMALL LETTER X 2094;2094;2094;0259;0259; # (ₔ; ₔ; ₔ; ə; ə; ) LATIN SUBSCRIPT SMALL LETTER SCHWA 2095;2095;2095;0068;0068; # (ₕ; ₕ; ₕ; h; h; ) LATIN SUBSCRIPT SMALL LETTER H 2096;2096;2096;006B;006B; # (ₖ; ₖ; ₖ; k; k; ) LATIN SUBSCRIPT SMALL LETTER K 2097;2097;2097;006C;006C; # (ₗ; ₗ; ₗ; l; l; ) LATIN SUBSCRIPT SMALL LETTER L 2098;2098;2098;006D;006D; # (ₘ; ₘ; ₘ; m; m; ) LATIN SUBSCRIPT SMALL LETTER M 2099;2099;2099;006E;006E; # (ₙ; ₙ; ₙ; n; n; ) LATIN SUBSCRIPT SMALL LETTER N 209A;209A;209A;0070;0070; # (ₚ; ₚ; ₚ; p; p; ) LATIN SUBSCRIPT SMALL LETTER P 209B;209B;209B;0073;0073; # (ₛ; ₛ; ₛ; s; s; ) LATIN SUBSCRIPT SMALL LETTER S 209C;209C;209C;0074;0074; # (ₜ; ₜ; ₜ; t; t; ) LATIN SUBSCRIPT SMALL LETTER T 20A8;20A8;20A8;0052 0073;0052 0073; # (₨; ₨; ₨; Rs; Rs; ) RUPEE SIGN 2100;2100;2100;0061 002F 0063;0061 002F 0063; # (℀; ℀; ℀; a/c; a/c; ) ACCOUNT OF 2101;2101;2101;0061 002F 0073;0061 002F 0073; # (℁; ℁; ℁; a/s; a/s; ) ADDRESSED TO THE SUBJECT 2102;2102;2102;0043;0043; # (ℂ; ℂ; ℂ; C; C; ) DOUBLE-STRUCK CAPITAL C 2103;2103;2103;00B0 0043;00B0 0043; # (℃; ℃; ℃; °C; °C; ) DEGREE CELSIUS 2105;2105;2105;0063 002F 006F;0063 002F 006F; # (℅; ℅; ℅; c/o; c/o; ) CARE OF 2106;2106;2106;0063 002F 0075;0063 002F 0075; # (℆; ℆; ℆; c/u; c/u; ) CADA UNA 2107;2107;2107;0190;0190; # (ℇ; ℇ; ℇ; Ɛ; Ɛ; ) EULER CONSTANT 2109;2109;2109;00B0 0046;00B0 0046; # (℉; ℉; ℉; °F; °F; ) DEGREE FAHRENHEIT 210A;210A;210A;0067;0067; # (ℊ; ℊ; ℊ; g; g; ) SCRIPT SMALL G 210B;210B;210B;0048;0048; # (ℋ; ℋ; ℋ; H; H; ) SCRIPT CAPITAL H 210C;210C;210C;0048;0048; # (ℌ; ℌ; ℌ; H; H; ) BLACK-LETTER CAPITAL H 210D;210D;210D;0048;0048; # (ℍ; ℍ; ℍ; H; H; ) DOUBLE-STRUCK CAPITAL H 210E;210E;210E;0068;0068; # (ℎ; ℎ; ℎ; h; h; ) PLANCK CONSTANT 210F;210F;210F;0127;0127; # (ℏ; ℏ; ℏ; ħ; ħ; ) PLANCK CONSTANT OVER TWO PI 2110;2110;2110;0049;0049; # (ℐ; ℐ; ℐ; I; I; ) SCRIPT CAPITAL I 2111;2111;2111;0049;0049; # (ℑ; ℑ; ℑ; I; I; ) BLACK-LETTER CAPITAL I 2112;2112;2112;004C;004C; # (ℒ; ℒ; ℒ; L; L; ) SCRIPT CAPITAL L 2113;2113;2113;006C;006C; # (ℓ; ℓ; ℓ; l; l; ) SCRIPT SMALL L 2115;2115;2115;004E;004E; # (ℕ; ℕ; ℕ; N; N; ) DOUBLE-STRUCK CAPITAL N 2116;2116;2116;004E 006F;004E 006F; # (№; №; №; No; No; ) NUMERO SIGN 2119;2119;2119;0050;0050; # (ℙ; ℙ; ℙ; P; P; ) DOUBLE-STRUCK CAPITAL P 211A;211A;211A;0051;0051; # (ℚ; ℚ; ℚ; Q; Q; ) DOUBLE-STRUCK CAPITAL Q 211B;211B;211B;0052;0052; # (ℛ; ℛ; ℛ; R; R; ) SCRIPT CAPITAL R 211C;211C;211C;0052;0052; # (ℜ; ℜ; ℜ; R; R; ) BLACK-LETTER CAPITAL R 211D;211D;211D;0052;0052; # (ℝ; ℝ; ℝ; R; R; ) DOUBLE-STRUCK CAPITAL R 2120;2120;2120;0053 004D;0053 004D; # (℠; ℠; ℠; SM; SM; ) SERVICE MARK 2121;2121;2121;0054 0045 004C;0054 0045 004C; # (℡; ℡; ℡; TEL; TEL; ) TELEPHONE SIGN 2122;2122;2122;0054 004D;0054 004D; # (™; ™; ™; TM; TM; ) TRADE MARK SIGN 2124;2124;2124;005A;005A; # (ℤ; ℤ; ℤ; Z; Z; ) DOUBLE-STRUCK CAPITAL Z 2126;03A9;03A9;03A9;03A9; # (Ω; Ω; Ω; Ω; Ω; ) OHM SIGN 2128;2128;2128;005A;005A; # (ℨ; ℨ; ℨ; Z; Z; ) BLACK-LETTER CAPITAL Z 212A;004B;004B;004B;004B; # (K; K; K; K; K; ) KELVIN SIGN 212B;00C5;0041 030A;00C5;0041 030A; # (Å; Å; A◌̊; Å; A◌̊; ) ANGSTROM SIGN 212C;212C;212C;0042;0042; # (ℬ; ℬ; ℬ; B; B; ) SCRIPT CAPITAL B 212D;212D;212D;0043;0043; # (ℭ; ℭ; ℭ; C; C; ) BLACK-LETTER CAPITAL C 212F;212F;212F;0065;0065; # (ℯ; ℯ; ℯ; e; e; ) SCRIPT SMALL E 2130;2130;2130;0045;0045; # (ℰ; ℰ; ℰ; E; E; ) SCRIPT CAPITAL E 2131;2131;2131;0046;0046; # (ℱ; ℱ; ℱ; F; F; ) SCRIPT CAPITAL F 2133;2133;2133;004D;004D; # (ℳ; ℳ; ℳ; M; M; ) SCRIPT CAPITAL M 2134;2134;2134;006F;006F; # (ℴ; ℴ; ℴ; o; o; ) SCRIPT SMALL O 2135;2135;2135;05D0;05D0; # (ℵ; ℵ; ℵ; א; א; ) ALEF SYMBOL 2136;2136;2136;05D1;05D1; # (ℶ; ℶ; ℶ; ב; ב; ) BET SYMBOL 2137;2137;2137;05D2;05D2; # (ℷ; ℷ; ℷ; ג; ג; ) GIMEL SYMBOL 2138;2138;2138;05D3;05D3; # (ℸ; ℸ; ℸ; ד; ד; ) DALET SYMBOL 2139;2139;2139;0069;0069; # (ℹ; ℹ; ℹ; i; i; ) INFORMATION SOURCE 213B;213B;213B;0046 0041 0058;0046 0041 0058; # (℻; ℻; ℻; FAX; FAX; ) FACSIMILE SIGN 213C;213C;213C;03C0;03C0; # (ℼ; ℼ; ℼ; π; π; ) DOUBLE-STRUCK SMALL PI 213D;213D;213D;03B3;03B3; # (ℽ; ℽ; ℽ; γ; γ; ) DOUBLE-STRUCK SMALL GAMMA 213E;213E;213E;0393;0393; # (ℾ; ℾ; ℾ; Γ; Γ; ) DOUBLE-STRUCK CAPITAL GAMMA 213F;213F;213F;03A0;03A0; # (ℿ; ℿ; ℿ; Π; Π; ) DOUBLE-STRUCK CAPITAL PI 2140;2140;2140;2211;2211; # (⅀; ⅀; ⅀; ∑; ∑; ) DOUBLE-STRUCK N-ARY SUMMATION 2145;2145;2145;0044;0044; # (ⅅ; ⅅ; ⅅ; D; D; ) DOUBLE-STRUCK ITALIC CAPITAL D 2146;2146;2146;0064;0064; # (ⅆ; ⅆ; ⅆ; d; d; ) DOUBLE-STRUCK ITALIC SMALL D 2147;2147;2147;0065;0065; # (ⅇ; ⅇ; ⅇ; e; e; ) DOUBLE-STRUCK ITALIC SMALL E 2148;2148;2148;0069;0069; # (ⅈ; ⅈ; ⅈ; i; i; ) DOUBLE-STRUCK ITALIC SMALL I 2149;2149;2149;006A;006A; # (ⅉ; ⅉ; ⅉ; j; j; ) DOUBLE-STRUCK ITALIC SMALL J 2150;2150;2150;0031 2044 0037;0031 2044 0037; # (⅐; ⅐; ⅐; 1⁄7; 1⁄7; ) VULGAR FRACTION ONE SEVENTH 2151;2151;2151;0031 2044 0039;0031 2044 0039; # (⅑; ⅑; ⅑; 1⁄9; 1⁄9; ) VULGAR FRACTION ONE NINTH 2152;2152;2152;0031 2044 0031 0030;0031 2044 0031 0030; # (⅒; ⅒; ⅒; 1⁄10; 1⁄10; ) VULGAR FRACTION ONE TENTH 2153;2153;2153;0031 2044 0033;0031 2044 0033; # (⅓; ⅓; ⅓; 1⁄3; 1⁄3; ) VULGAR FRACTION ONE THIRD 2154;2154;2154;0032 2044 0033;0032 2044 0033; # (⅔; ⅔; ⅔; 2⁄3; 2⁄3; ) VULGAR FRACTION TWO THIRDS 2155;2155;2155;0031 2044 0035;0031 2044 0035; # (⅕; ⅕; ⅕; 1⁄5; 1⁄5; ) VULGAR FRACTION ONE FIFTH 2156;2156;2156;0032 2044 0035;0032 2044 0035; # (⅖; ⅖; ⅖; 2⁄5; 2⁄5; ) VULGAR FRACTION TWO FIFTHS 2157;2157;2157;0033 2044 0035;0033 2044 0035; # (⅗; ⅗; ⅗; 3⁄5; 3⁄5; ) VULGAR FRACTION THREE FIFTHS 2158;2158;2158;0034 2044 0035;0034 2044 0035; # (⅘; ⅘; ⅘; 4⁄5; 4⁄5; ) VULGAR FRACTION FOUR FIFTHS 2159;2159;2159;0031 2044 0036;0031 2044 0036; # (⅙; ⅙; ⅙; 1⁄6; 1⁄6; ) VULGAR FRACTION ONE SIXTH 215A;215A;215A;0035 2044 0036;0035 2044 0036; # (⅚; ⅚; ⅚; 5⁄6; 5⁄6; ) VULGAR FRACTION FIVE SIXTHS 215B;215B;215B;0031 2044 0038;0031 2044 0038; # (⅛; ⅛; ⅛; 1⁄8; 1⁄8; ) VULGAR FRACTION ONE EIGHTH 215C;215C;215C;0033 2044 0038;0033 2044 0038; # (⅜; ⅜; ⅜; 3⁄8; 3⁄8; ) VULGAR FRACTION THREE EIGHTHS 215D;215D;215D;0035 2044 0038;0035 2044 0038; # (⅝; ⅝; ⅝; 5⁄8; 5⁄8; ) VULGAR FRACTION FIVE EIGHTHS 215E;215E;215E;0037 2044 0038;0037 2044 0038; # (⅞; ⅞; ⅞; 7⁄8; 7⁄8; ) VULGAR FRACTION SEVEN EIGHTHS 215F;215F;215F;0031 2044;0031 2044; # (⅟; ⅟; ⅟; 1⁄; 1⁄; ) FRACTION NUMERATOR ONE 2160;2160;2160;0049;0049; # (Ⅰ; Ⅰ; Ⅰ; I; I; ) ROMAN NUMERAL ONE 2161;2161;2161;0049 0049;0049 0049; # (Ⅱ; Ⅱ; Ⅱ; II; II; ) ROMAN NUMERAL TWO 2162;2162;2162;0049 0049 0049;0049 0049 0049; # (Ⅲ; Ⅲ; Ⅲ; III; III; ) ROMAN NUMERAL THREE 2163;2163;2163;0049 0056;0049 0056; # (Ⅳ; Ⅳ; Ⅳ; IV; IV; ) ROMAN NUMERAL FOUR 2164;2164;2164;0056;0056; # (Ⅴ; Ⅴ; Ⅴ; V; V; ) ROMAN NUMERAL FIVE 2165;2165;2165;0056 0049;0056 0049; # (Ⅵ; Ⅵ; Ⅵ; VI; VI; ) ROMAN NUMERAL SIX 2166;2166;2166;0056 0049 0049;0056 0049 0049; # (Ⅶ; Ⅶ; Ⅶ; VII; VII; ) ROMAN NUMERAL SEVEN 2167;2167;2167;0056 0049 0049 0049;0056 0049 0049 0049; # (Ⅷ; Ⅷ; Ⅷ; VIII; VIII; ) ROMAN NUMERAL EIGHT 2168;2168;2168;0049 0058;0049 0058; # (Ⅸ; Ⅸ; Ⅸ; IX; IX; ) ROMAN NUMERAL NINE 2169;2169;2169;0058;0058; # (Ⅹ; Ⅹ; Ⅹ; X; X; ) ROMAN NUMERAL TEN 216A;216A;216A;0058 0049;0058 0049; # (Ⅺ; Ⅺ; Ⅺ; XI; XI; ) ROMAN NUMERAL ELEVEN 216B;216B;216B;0058 0049 0049;0058 0049 0049; # (Ⅻ; Ⅻ; Ⅻ; XII; XII; ) ROMAN NUMERAL TWELVE 216C;216C;216C;004C;004C; # (Ⅼ; Ⅼ; Ⅼ; L; L; ) ROMAN NUMERAL FIFTY 216D;216D;216D;0043;0043; # (Ⅽ; Ⅽ; Ⅽ; C; C; ) ROMAN NUMERAL ONE HUNDRED 216E;216E;216E;0044;0044; # (Ⅾ; Ⅾ; Ⅾ; D; D; ) ROMAN NUMERAL FIVE HUNDRED 216F;216F;216F;004D;004D; # (Ⅿ; Ⅿ; Ⅿ; M; M; ) ROMAN NUMERAL ONE THOUSAND 2170;2170;2170;0069;0069; # (ⅰ; ⅰ; ⅰ; i; i; ) SMALL ROMAN NUMERAL ONE 2171;2171;2171;0069 0069;0069 0069; # (ⅱ; ⅱ; ⅱ; ii; ii; ) SMALL ROMAN NUMERAL TWO 2172;2172;2172;0069 0069 0069;0069 0069 0069; # (ⅲ; ⅲ; ⅲ; iii; iii; ) SMALL ROMAN NUMERAL THREE 2173;2173;2173;0069 0076;0069 0076; # (ⅳ; ⅳ; ⅳ; iv; iv; ) SMALL ROMAN NUMERAL FOUR 2174;2174;2174;0076;0076; # (ⅴ; ⅴ; ⅴ; v; v; ) SMALL ROMAN NUMERAL FIVE 2175;2175;2175;0076 0069;0076 0069; # (ⅵ; ⅵ; ⅵ; vi; vi; ) SMALL ROMAN NUMERAL SIX 2176;2176;2176;0076 0069 0069;0076 0069 0069; # (ⅶ; ⅶ; ⅶ; vii; vii; ) SMALL ROMAN NUMERAL SEVEN 2177;2177;2177;0076 0069 0069 0069;0076 0069 0069 0069; # (ⅷ; ⅷ; ⅷ; viii; viii; ) SMALL ROMAN NUMERAL EIGHT 2178;2178;2178;0069 0078;0069 0078; # (ⅸ; ⅸ; ⅸ; ix; ix; ) SMALL ROMAN NUMERAL NINE 2179;2179;2179;0078;0078; # (ⅹ; ⅹ; ⅹ; x; x; ) SMALL ROMAN NUMERAL TEN 217A;217A;217A;0078 0069;0078 0069; # (ⅺ; ⅺ; ⅺ; xi; xi; ) SMALL ROMAN NUMERAL ELEVEN 217B;217B;217B;0078 0069 0069;0078 0069 0069; # (ⅻ; ⅻ; ⅻ; xii; xii; ) SMALL ROMAN NUMERAL TWELVE 217C;217C;217C;006C;006C; # (ⅼ; ⅼ; ⅼ; l; l; ) SMALL ROMAN NUMERAL FIFTY 217D;217D;217D;0063;0063; # (ⅽ; ⅽ; ⅽ; c; c; ) SMALL ROMAN NUMERAL ONE HUNDRED 217E;217E;217E;0064;0064; # (ⅾ; ⅾ; ⅾ; d; d; ) SMALL ROMAN NUMERAL FIVE HUNDRED 217F;217F;217F;006D;006D; # (ⅿ; ⅿ; ⅿ; m; m; ) SMALL ROMAN NUMERAL ONE THOUSAND 2189;2189;2189;0030 2044 0033;0030 2044 0033; # (↉; ↉; ↉; 0⁄3; 0⁄3; ) VULGAR FRACTION ZERO THIRDS 219A;219A;2190 0338;219A;2190 0338; # (↚; ↚; ←◌̸; ↚; ←◌̸; ) LEFTWARDS ARROW WITH STROKE 219B;219B;2192 0338;219B;2192 0338; # (↛; ↛; →◌̸; ↛; →◌̸; ) RIGHTWARDS ARROW WITH STROKE 21AE;21AE;2194 0338;21AE;2194 0338; # (↮; ↮; ↔◌̸; ↮; ↔◌̸; ) LEFT RIGHT ARROW WITH STROKE 21CD;21CD;21D0 0338;21CD;21D0 0338; # (⇍; ⇍; ⇐◌̸; ⇍; ⇐◌̸; ) LEFTWARDS DOUBLE ARROW WITH STROKE 21CE;21CE;21D4 0338;21CE;21D4 0338; # (⇎; ⇎; ⇔◌̸; ⇎; ⇔◌̸; ) LEFT RIGHT DOUBLE ARROW WITH STROKE 21CF;21CF;21D2 0338;21CF;21D2 0338; # (⇏; ⇏; ⇒◌̸; ⇏; ⇒◌̸; ) RIGHTWARDS DOUBLE ARROW WITH STROKE 2204;2204;2203 0338;2204;2203 0338; # (∄; ∄; ∃◌̸; ∄; ∃◌̸; ) THERE DOES NOT EXIST 2209;2209;2208 0338;2209;2208 0338; # (∉; ∉; ∈◌̸; ∉; ∈◌̸; ) NOT AN ELEMENT OF 220C;220C;220B 0338;220C;220B 0338; # (∌; ∌; ∋◌̸; ∌; ∋◌̸; ) DOES NOT CONTAIN AS MEMBER 2224;2224;2223 0338;2224;2223 0338; # (∤; ∤; ∣◌̸; ∤; ∣◌̸; ) DOES NOT DIVIDE 2226;2226;2225 0338;2226;2225 0338; # (∦; ∦; ∥◌̸; ∦; ∥◌̸; ) NOT PARALLEL TO 222C;222C;222C;222B 222B;222B 222B; # (∬; ∬; ∬; ∫∫; ∫∫; ) DOUBLE INTEGRAL 222D;222D;222D;222B 222B 222B;222B 222B 222B; # (∭; ∭; ∭; ∫∫∫; ∫∫∫; ) TRIPLE INTEGRAL 222F;222F;222F;222E 222E;222E 222E; # (∯; ∯; ∯; ∮∮; ∮∮; ) SURFACE INTEGRAL 2230;2230;2230;222E 222E 222E;222E 222E 222E; # (∰; ∰; ∰; ∮∮∮; ∮∮∮; ) VOLUME INTEGRAL 2241;2241;223C 0338;2241;223C 0338; # (≁; ≁; ∼◌̸; ≁; ∼◌̸; ) NOT TILDE 2244;2244;2243 0338;2244;2243 0338; # (≄; ≄; ≃◌̸; ≄; ≃◌̸; ) NOT ASYMPTOTICALLY EQUAL TO 2247;2247;2245 0338;2247;2245 0338; # (≇; ≇; ≅◌̸; ≇; ≅◌̸; ) NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO 2249;2249;2248 0338;2249;2248 0338; # (≉; ≉; ≈◌̸; ≉; ≈◌̸; ) NOT ALMOST EQUAL TO 2260;2260;003D 0338;2260;003D 0338; # (≠; ≠; =◌̸; ≠; =◌̸; ) NOT EQUAL TO 2262;2262;2261 0338;2262;2261 0338; # (≢; ≢; ≡◌̸; ≢; ≡◌̸; ) NOT IDENTICAL TO 226D;226D;224D 0338;226D;224D 0338; # (≭; ≭; ≍◌̸; ≭; ≍◌̸; ) NOT EQUIVALENT TO 226E;226E;003C 0338;226E;003C 0338; # (≮; ≮; <◌̸; ≮; <◌̸; ) NOT LESS-THAN 226F;226F;003E 0338;226F;003E 0338; # (≯; ≯; >◌̸; ≯; >◌̸; ) NOT GREATER-THAN 2270;2270;2264 0338;2270;2264 0338; # (≰; ≰; ≤◌̸; ≰; ≤◌̸; ) NEITHER LESS-THAN NOR EQUAL TO 2271;2271;2265 0338;2271;2265 0338; # (≱; ≱; ≥◌̸; ≱; ≥◌̸; ) NEITHER GREATER-THAN NOR EQUAL TO 2274;2274;2272 0338;2274;2272 0338; # (≴; ≴; ≲◌̸; ≴; ≲◌̸; ) NEITHER LESS-THAN NOR EQUIVALENT TO 2275;2275;2273 0338;2275;2273 0338; # (≵; ≵; ≳◌̸; ≵; ≳◌̸; ) NEITHER GREATER-THAN NOR EQUIVALENT TO 2278;2278;2276 0338;2278;2276 0338; # (≸; ≸; ≶◌̸; ≸; ≶◌̸; ) NEITHER LESS-THAN NOR GREATER-THAN 2279;2279;2277 0338;2279;2277 0338; # (≹; ≹; ≷◌̸; ≹; ≷◌̸; ) NEITHER GREATER-THAN NOR LESS-THAN 2280;2280;227A 0338;2280;227A 0338; # (⊀; ⊀; ≺◌̸; ⊀; ≺◌̸; ) DOES NOT PRECEDE 2281;2281;227B 0338;2281;227B 0338; # (⊁; ⊁; ≻◌̸; ⊁; ≻◌̸; ) DOES NOT SUCCEED 2284;2284;2282 0338;2284;2282 0338; # (⊄; ⊄; ⊂◌̸; ⊄; ⊂◌̸; ) NOT A SUBSET OF 2285;2285;2283 0338;2285;2283 0338; # (⊅; ⊅; ⊃◌̸; ⊅; ⊃◌̸; ) NOT A SUPERSET OF 2288;2288;2286 0338;2288;2286 0338; # (⊈; ⊈; ⊆◌̸; ⊈; ⊆◌̸; ) NEITHER A SUBSET OF NOR EQUAL TO 2289;2289;2287 0338;2289;2287 0338; # (⊉; ⊉; ⊇◌̸; ⊉; ⊇◌̸; ) NEITHER A SUPERSET OF NOR EQUAL TO 22AC;22AC;22A2 0338;22AC;22A2 0338; # (⊬; ⊬; ⊢◌̸; ⊬; ⊢◌̸; ) DOES NOT PROVE 22AD;22AD;22A8 0338;22AD;22A8 0338; # (⊭; ⊭; ⊨◌̸; ⊭; ⊨◌̸; ) NOT TRUE 22AE;22AE;22A9 0338;22AE;22A9 0338; # (⊮; ⊮; ⊩◌̸; ⊮; ⊩◌̸; ) DOES NOT FORCE 22AF;22AF;22AB 0338;22AF;22AB 0338; # (⊯; ⊯; ⊫◌̸; ⊯; ⊫◌̸; ) NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE 22E0;22E0;227C 0338;22E0;227C 0338; # (⋠; ⋠; ≼◌̸; ⋠; ≼◌̸; ) DOES NOT PRECEDE OR EQUAL 22E1;22E1;227D 0338;22E1;227D 0338; # (⋡; ⋡; ≽◌̸; ⋡; ≽◌̸; ) DOES NOT SUCCEED OR EQUAL 22E2;22E2;2291 0338;22E2;2291 0338; # (⋢; ⋢; ⊑◌̸; ⋢; ⊑◌̸; ) NOT SQUARE IMAGE OF OR EQUAL TO 22E3;22E3;2292 0338;22E3;2292 0338; # (⋣; ⋣; ⊒◌̸; ⋣; ⊒◌̸; ) NOT SQUARE ORIGINAL OF OR EQUAL TO 22EA;22EA;22B2 0338;22EA;22B2 0338; # (⋪; ⋪; ⊲◌̸; ⋪; ⊲◌̸; ) NOT NORMAL SUBGROUP OF 22EB;22EB;22B3 0338;22EB;22B3 0338; # (⋫; ⋫; ⊳◌̸; ⋫; ⊳◌̸; ) DOES NOT CONTAIN AS NORMAL SUBGROUP 22EC;22EC;22B4 0338;22EC;22B4 0338; # (⋬; ⋬; ⊴◌̸; ⋬; ⊴◌̸; ) NOT NORMAL SUBGROUP OF OR EQUAL TO 22ED;22ED;22B5 0338;22ED;22B5 0338; # (⋭; ⋭; ⊵◌̸; ⋭; ⊵◌̸; ) DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL 2329;3008;3008;3008;3008; # (〈; 〈; 〈; 〈; 〈; ) LEFT-POINTING ANGLE BRACKET 232A;3009;3009;3009;3009; # (〉; 〉; 〉; 〉; 〉; ) RIGHT-POINTING ANGLE BRACKET 2460;2460;2460;0031;0031; # (①; ①; ①; 1; 1; ) CIRCLED DIGIT ONE 2461;2461;2461;0032;0032; # (②; ②; ②; 2; 2; ) CIRCLED DIGIT TWO 2462;2462;2462;0033;0033; # (③; ③; ③; 3; 3; ) CIRCLED DIGIT THREE 2463;2463;2463;0034;0034; # (④; ④; ④; 4; 4; ) CIRCLED DIGIT FOUR 2464;2464;2464;0035;0035; # (⑤; ⑤; ⑤; 5; 5; ) CIRCLED DIGIT FIVE 2465;2465;2465;0036;0036; # (⑥; ⑥; ⑥; 6; 6; ) CIRCLED DIGIT SIX 2466;2466;2466;0037;0037; # (⑦; ⑦; ⑦; 7; 7; ) CIRCLED DIGIT SEVEN 2467;2467;2467;0038;0038; # (⑧; ⑧; ⑧; 8; 8; ) CIRCLED DIGIT EIGHT 2468;2468;2468;0039;0039; # (⑨; ⑨; ⑨; 9; 9; ) CIRCLED DIGIT NINE 2469;2469;2469;0031 0030;0031 0030; # (⑩; ⑩; ⑩; 10; 10; ) CIRCLED NUMBER TEN 246A;246A;246A;0031 0031;0031 0031; # (⑪; ⑪; ⑪; 11; 11; ) CIRCLED NUMBER ELEVEN 246B;246B;246B;0031 0032;0031 0032; # (⑫; ⑫; ⑫; 12; 12; ) CIRCLED NUMBER TWELVE 246C;246C;246C;0031 0033;0031 0033; # (⑬; ⑬; ⑬; 13; 13; ) CIRCLED NUMBER THIRTEEN 246D;246D;246D;0031 0034;0031 0034; # (⑭; ⑭; ⑭; 14; 14; ) CIRCLED NUMBER FOURTEEN 246E;246E;246E;0031 0035;0031 0035; # (⑮; ⑮; ⑮; 15; 15; ) CIRCLED NUMBER FIFTEEN 246F;246F;246F;0031 0036;0031 0036; # (⑯; ⑯; ⑯; 16; 16; ) CIRCLED NUMBER SIXTEEN 2470;2470;2470;0031 0037;0031 0037; # (⑰; ⑰; ⑰; 17; 17; ) CIRCLED NUMBER SEVENTEEN 2471;2471;2471;0031 0038;0031 0038; # (⑱; ⑱; ⑱; 18; 18; ) CIRCLED NUMBER EIGHTEEN 2472;2472;2472;0031 0039;0031 0039; # (⑲; ⑲; ⑲; 19; 19; ) CIRCLED NUMBER NINETEEN 2473;2473;2473;0032 0030;0032 0030; # (⑳; ⑳; ⑳; 20; 20; ) CIRCLED NUMBER TWENTY 2474;2474;2474;0028 0031 0029;0028 0031 0029; # (⑴; ⑴; ⑴; (1); (1); ) PARENTHESIZED DIGIT ONE 2475;2475;2475;0028 0032 0029;0028 0032 0029; # (⑵; ⑵; ⑵; (2); (2); ) PARENTHESIZED DIGIT TWO 2476;2476;2476;0028 0033 0029;0028 0033 0029; # (⑶; ⑶; ⑶; (3); (3); ) PARENTHESIZED DIGIT THREE 2477;2477;2477;0028 0034 0029;0028 0034 0029; # (⑷; ⑷; ⑷; (4); (4); ) PARENTHESIZED DIGIT FOUR 2478;2478;2478;0028 0035 0029;0028 0035 0029; # (⑸; ⑸; ⑸; (5); (5); ) PARENTHESIZED DIGIT FIVE 2479;2479;2479;0028 0036 0029;0028 0036 0029; # (⑹; ⑹; ⑹; (6); (6); ) PARENTHESIZED DIGIT SIX 247A;247A;247A;0028 0037 0029;0028 0037 0029; # (⑺; ⑺; ⑺; (7); (7); ) PARENTHESIZED DIGIT SEVEN 247B;247B;247B;0028 0038 0029;0028 0038 0029; # (⑻; ⑻; ⑻; (8); (8); ) PARENTHESIZED DIGIT EIGHT 247C;247C;247C;0028 0039 0029;0028 0039 0029; # (⑼; ⑼; ⑼; (9); (9); ) PARENTHESIZED DIGIT NINE 247D;247D;247D;0028 0031 0030 0029;0028 0031 0030 0029; # (⑽; ⑽; ⑽; (10); (10); ) PARENTHESIZED NUMBER TEN 247E;247E;247E;0028 0031 0031 0029;0028 0031 0031 0029; # (⑾; ⑾; ⑾; (11); (11); ) PARENTHESIZED NUMBER ELEVEN 247F;247F;247F;0028 0031 0032 0029;0028 0031 0032 0029; # (⑿; ⑿; ⑿; (12); (12); ) PARENTHESIZED NUMBER TWELVE 2480;2480;2480;0028 0031 0033 0029;0028 0031 0033 0029; # (⒀; ⒀; ⒀; (13); (13); ) PARENTHESIZED NUMBER THIRTEEN 2481;2481;2481;0028 0031 0034 0029;0028 0031 0034 0029; # (⒁; ⒁; ⒁; (14); (14); ) PARENTHESIZED NUMBER FOURTEEN 2482;2482;2482;0028 0031 0035 0029;0028 0031 0035 0029; # (⒂; ⒂; ⒂; (15); (15); ) PARENTHESIZED NUMBER FIFTEEN 2483;2483;2483;0028 0031 0036 0029;0028 0031 0036 0029; # (⒃; ⒃; ⒃; (16); (16); ) PARENTHESIZED NUMBER SIXTEEN 2484;2484;2484;0028 0031 0037 0029;0028 0031 0037 0029; # (⒄; ⒄; ⒄; (17); (17); ) PARENTHESIZED NUMBER SEVENTEEN 2485;2485;2485;0028 0031 0038 0029;0028 0031 0038 0029; # (⒅; ⒅; ⒅; (18); (18); ) PARENTHESIZED NUMBER EIGHTEEN 2486;2486;2486;0028 0031 0039 0029;0028 0031 0039 0029; # (⒆; ⒆; ⒆; (19); (19); ) PARENTHESIZED NUMBER NINETEEN 2487;2487;2487;0028 0032 0030 0029;0028 0032 0030 0029; # (⒇; ⒇; ⒇; (20); (20); ) PARENTHESIZED NUMBER TWENTY 2488;2488;2488;0031 002E;0031 002E; # (⒈; ⒈; ⒈; 1.; 1.; ) DIGIT ONE FULL STOP 2489;2489;2489;0032 002E;0032 002E; # (⒉; ⒉; ⒉; 2.; 2.; ) DIGIT TWO FULL STOP 248A;248A;248A;0033 002E;0033 002E; # (⒊; ⒊; ⒊; 3.; 3.; ) DIGIT THREE FULL STOP 248B;248B;248B;0034 002E;0034 002E; # (⒋; ⒋; ⒋; 4.; 4.; ) DIGIT FOUR FULL STOP 248C;248C;248C;0035 002E;0035 002E; # (⒌; ⒌; ⒌; 5.; 5.; ) DIGIT FIVE FULL STOP 248D;248D;248D;0036 002E;0036 002E; # (⒍; ⒍; ⒍; 6.; 6.; ) DIGIT SIX FULL STOP 248E;248E;248E;0037 002E;0037 002E; # (⒎; ⒎; ⒎; 7.; 7.; ) DIGIT SEVEN FULL STOP 248F;248F;248F;0038 002E;0038 002E; # (⒏; ⒏; ⒏; 8.; 8.; ) DIGIT EIGHT FULL STOP 2490;2490;2490;0039 002E;0039 002E; # (⒐; ⒐; ⒐; 9.; 9.; ) DIGIT NINE FULL STOP 2491;2491;2491;0031 0030 002E;0031 0030 002E; # (⒑; ⒑; ⒑; 10.; 10.; ) NUMBER TEN FULL STOP 2492;2492;2492;0031 0031 002E;0031 0031 002E; # (⒒; ⒒; ⒒; 11.; 11.; ) NUMBER ELEVEN FULL STOP 2493;2493;2493;0031 0032 002E;0031 0032 002E; # (⒓; ⒓; ⒓; 12.; 12.; ) NUMBER TWELVE FULL STOP 2494;2494;2494;0031 0033 002E;0031 0033 002E; # (⒔; ⒔; ⒔; 13.; 13.; ) NUMBER THIRTEEN FULL STOP 2495;2495;2495;0031 0034 002E;0031 0034 002E; # (⒕; ⒕; ⒕; 14.; 14.; ) NUMBER FOURTEEN FULL STOP 2496;2496;2496;0031 0035 002E;0031 0035 002E; # (⒖; ⒖; ⒖; 15.; 15.; ) NUMBER FIFTEEN FULL STOP 2497;2497;2497;0031 0036 002E;0031 0036 002E; # (⒗; ⒗; ⒗; 16.; 16.; ) NUMBER SIXTEEN FULL STOP 2498;2498;2498;0031 0037 002E;0031 0037 002E; # (⒘; ⒘; ⒘; 17.; 17.; ) NUMBER SEVENTEEN FULL STOP 2499;2499;2499;0031 0038 002E;0031 0038 002E; # (⒙; ⒙; ⒙; 18.; 18.; ) NUMBER EIGHTEEN FULL STOP 249A;249A;249A;0031 0039 002E;0031 0039 002E; # (⒚; ⒚; ⒚; 19.; 19.; ) NUMBER NINETEEN FULL STOP 249B;249B;249B;0032 0030 002E;0032 0030 002E; # (⒛; ⒛; ⒛; 20.; 20.; ) NUMBER TWENTY FULL STOP 249C;249C;249C;0028 0061 0029;0028 0061 0029; # (⒜; ⒜; ⒜; (a); (a); ) PARENTHESIZED LATIN SMALL LETTER A 249D;249D;249D;0028 0062 0029;0028 0062 0029; # (⒝; ⒝; ⒝; (b); (b); ) PARENTHESIZED LATIN SMALL LETTER B 249E;249E;249E;0028 0063 0029;0028 0063 0029; # (⒞; ⒞; ⒞; (c); (c); ) PARENTHESIZED LATIN SMALL LETTER C 249F;249F;249F;0028 0064 0029;0028 0064 0029; # (⒟; ⒟; ⒟; (d); (d); ) PARENTHESIZED LATIN SMALL LETTER D 24A0;24A0;24A0;0028 0065 0029;0028 0065 0029; # (⒠; ⒠; ⒠; (e); (e); ) PARENTHESIZED LATIN SMALL LETTER E 24A1;24A1;24A1;0028 0066 0029;0028 0066 0029; # (⒡; ⒡; ⒡; (f); (f); ) PARENTHESIZED LATIN SMALL LETTER F 24A2;24A2;24A2;0028 0067 0029;0028 0067 0029; # (⒢; ⒢; ⒢; (g); (g); ) PARENTHESIZED LATIN SMALL LETTER G 24A3;24A3;24A3;0028 0068 0029;0028 0068 0029; # (⒣; ⒣; ⒣; (h); (h); ) PARENTHESIZED LATIN SMALL LETTER H 24A4;24A4;24A4;0028 0069 0029;0028 0069 0029; # (⒤; ⒤; ⒤; (i); (i); ) PARENTHESIZED LATIN SMALL LETTER I 24A5;24A5;24A5;0028 006A 0029;0028 006A 0029; # (⒥; ⒥; ⒥; (j); (j); ) PARENTHESIZED LATIN SMALL LETTER J 24A6;24A6;24A6;0028 006B 0029;0028 006B 0029; # (⒦; ⒦; ⒦; (k); (k); ) PARENTHESIZED LATIN SMALL LETTER K 24A7;24A7;24A7;0028 006C 0029;0028 006C 0029; # (⒧; ⒧; ⒧; (l); (l); ) PARENTHESIZED LATIN SMALL LETTER L 24A8;24A8;24A8;0028 006D 0029;0028 006D 0029; # (⒨; ⒨; ⒨; (m); (m); ) PARENTHESIZED LATIN SMALL LETTER M 24A9;24A9;24A9;0028 006E 0029;0028 006E 0029; # (⒩; ⒩; ⒩; (n); (n); ) PARENTHESIZED LATIN SMALL LETTER N 24AA;24AA;24AA;0028 006F 0029;0028 006F 0029; # (⒪; ⒪; ⒪; (o); (o); ) PARENTHESIZED LATIN SMALL LETTER O 24AB;24AB;24AB;0028 0070 0029;0028 0070 0029; # (⒫; ⒫; ⒫; (p); (p); ) PARENTHESIZED LATIN SMALL LETTER P 24AC;24AC;24AC;0028 0071 0029;0028 0071 0029; # (⒬; ⒬; ⒬; (q); (q); ) PARENTHESIZED LATIN SMALL LETTER Q 24AD;24AD;24AD;0028 0072 0029;0028 0072 0029; # (⒭; ⒭; ⒭; (r); (r); ) PARENTHESIZED LATIN SMALL LETTER R 24AE;24AE;24AE;0028 0073 0029;0028 0073 0029; # (⒮; ⒮; ⒮; (s); (s); ) PARENTHESIZED LATIN SMALL LETTER S 24AF;24AF;24AF;0028 0074 0029;0028 0074 0029; # (⒯; ⒯; ⒯; (t); (t); ) PARENTHESIZED LATIN SMALL LETTER T 24B0;24B0;24B0;0028 0075 0029;0028 0075 0029; # (⒰; ⒰; ⒰; (u); (u); ) PARENTHESIZED LATIN SMALL LETTER U 24B1;24B1;24B1;0028 0076 0029;0028 0076 0029; # (⒱; ⒱; ⒱; (v); (v); ) PARENTHESIZED LATIN SMALL LETTER V 24B2;24B2;24B2;0028 0077 0029;0028 0077 0029; # (⒲; ⒲; ⒲; (w); (w); ) PARENTHESIZED LATIN SMALL LETTER W 24B3;24B3;24B3;0028 0078 0029;0028 0078 0029; # (⒳; ⒳; ⒳; (x); (x); ) PARENTHESIZED LATIN SMALL LETTER X 24B4;24B4;24B4;0028 0079 0029;0028 0079 0029; # (⒴; ⒴; ⒴; (y); (y); ) PARENTHESIZED LATIN SMALL LETTER Y 24B5;24B5;24B5;0028 007A 0029;0028 007A 0029; # (⒵; ⒵; ⒵; (z); (z); ) PARENTHESIZED LATIN SMALL LETTER Z 24B6;24B6;24B6;0041;0041; # (Ⓐ; Ⓐ; Ⓐ; A; A; ) CIRCLED LATIN CAPITAL LETTER A 24B7;24B7;24B7;0042;0042; # (Ⓑ; Ⓑ; Ⓑ; B; B; ) CIRCLED LATIN CAPITAL LETTER B 24B8;24B8;24B8;0043;0043; # (Ⓒ; Ⓒ; Ⓒ; C; C; ) CIRCLED LATIN CAPITAL LETTER C 24B9;24B9;24B9;0044;0044; # (Ⓓ; Ⓓ; Ⓓ; D; D; ) CIRCLED LATIN CAPITAL LETTER D 24BA;24BA;24BA;0045;0045; # (Ⓔ; Ⓔ; Ⓔ; E; E; ) CIRCLED LATIN CAPITAL LETTER E 24BB;24BB;24BB;0046;0046; # (Ⓕ; Ⓕ; Ⓕ; F; F; ) CIRCLED LATIN CAPITAL LETTER F 24BC;24BC;24BC;0047;0047; # (Ⓖ; Ⓖ; Ⓖ; G; G; ) CIRCLED LATIN CAPITAL LETTER G 24BD;24BD;24BD;0048;0048; # (Ⓗ; Ⓗ; Ⓗ; H; H; ) CIRCLED LATIN CAPITAL LETTER H 24BE;24BE;24BE;0049;0049; # (Ⓘ; Ⓘ; Ⓘ; I; I; ) CIRCLED LATIN CAPITAL LETTER I 24BF;24BF;24BF;004A;004A; # (Ⓙ; Ⓙ; Ⓙ; J; J; ) CIRCLED LATIN CAPITAL LETTER J 24C0;24C0;24C0;004B;004B; # (Ⓚ; Ⓚ; Ⓚ; K; K; ) CIRCLED LATIN CAPITAL LETTER K 24C1;24C1;24C1;004C;004C; # (Ⓛ; Ⓛ; Ⓛ; L; L; ) CIRCLED LATIN CAPITAL LETTER L 24C2;24C2;24C2;004D;004D; # (Ⓜ; Ⓜ; Ⓜ; M; M; ) CIRCLED LATIN CAPITAL LETTER M 24C3;24C3;24C3;004E;004E; # (Ⓝ; Ⓝ; Ⓝ; N; N; ) CIRCLED LATIN CAPITAL LETTER N 24C4;24C4;24C4;004F;004F; # (Ⓞ; Ⓞ; Ⓞ; O; O; ) CIRCLED LATIN CAPITAL LETTER O 24C5;24C5;24C5;0050;0050; # (Ⓟ; Ⓟ; Ⓟ; P; P; ) CIRCLED LATIN CAPITAL LETTER P 24C6;24C6;24C6;0051;0051; # (Ⓠ; Ⓠ; Ⓠ; Q; Q; ) CIRCLED LATIN CAPITAL LETTER Q 24C7;24C7;24C7;0052;0052; # (Ⓡ; Ⓡ; Ⓡ; R; R; ) CIRCLED LATIN CAPITAL LETTER R 24C8;24C8;24C8;0053;0053; # (Ⓢ; Ⓢ; Ⓢ; S; S; ) CIRCLED LATIN CAPITAL LETTER S 24C9;24C9;24C9;0054;0054; # (Ⓣ; Ⓣ; Ⓣ; T; T; ) CIRCLED LATIN CAPITAL LETTER T 24CA;24CA;24CA;0055;0055; # (Ⓤ; Ⓤ; Ⓤ; U; U; ) CIRCLED LATIN CAPITAL LETTER U 24CB;24CB;24CB;0056;0056; # (Ⓥ; Ⓥ; Ⓥ; V; V; ) CIRCLED LATIN CAPITAL LETTER V 24CC;24CC;24CC;0057;0057; # (Ⓦ; Ⓦ; Ⓦ; W; W; ) CIRCLED LATIN CAPITAL LETTER W 24CD;24CD;24CD;0058;0058; # (Ⓧ; Ⓧ; Ⓧ; X; X; ) CIRCLED LATIN CAPITAL LETTER X 24CE;24CE;24CE;0059;0059; # (Ⓨ; Ⓨ; Ⓨ; Y; Y; ) CIRCLED LATIN CAPITAL LETTER Y 24CF;24CF;24CF;005A;005A; # (Ⓩ; Ⓩ; Ⓩ; Z; Z; ) CIRCLED LATIN CAPITAL LETTER Z 24D0;24D0;24D0;0061;0061; # (ⓐ; ⓐ; ⓐ; a; a; ) CIRCLED LATIN SMALL LETTER A 24D1;24D1;24D1;0062;0062; # (ⓑ; ⓑ; ⓑ; b; b; ) CIRCLED LATIN SMALL LETTER B 24D2;24D2;24D2;0063;0063; # (ⓒ; ⓒ; ⓒ; c; c; ) CIRCLED LATIN SMALL LETTER C 24D3;24D3;24D3;0064;0064; # (ⓓ; ⓓ; ⓓ; d; d; ) CIRCLED LATIN SMALL LETTER D 24D4;24D4;24D4;0065;0065; # (ⓔ; ⓔ; ⓔ; e; e; ) CIRCLED LATIN SMALL LETTER E 24D5;24D5;24D5;0066;0066; # (ⓕ; ⓕ; ⓕ; f; f; ) CIRCLED LATIN SMALL LETTER F 24D6;24D6;24D6;0067;0067; # (ⓖ; ⓖ; ⓖ; g; g; ) CIRCLED LATIN SMALL LETTER G 24D7;24D7;24D7;0068;0068; # (ⓗ; ⓗ; ⓗ; h; h; ) CIRCLED LATIN SMALL LETTER H 24D8;24D8;24D8;0069;0069; # (ⓘ; ⓘ; ⓘ; i; i; ) CIRCLED LATIN SMALL LETTER I 24D9;24D9;24D9;006A;006A; # (ⓙ; ⓙ; ⓙ; j; j; ) CIRCLED LATIN SMALL LETTER J 24DA;24DA;24DA;006B;006B; # (ⓚ; ⓚ; ⓚ; k; k; ) CIRCLED LATIN SMALL LETTER K 24DB;24DB;24DB;006C;006C; # (ⓛ; ⓛ; ⓛ; l; l; ) CIRCLED LATIN SMALL LETTER L 24DC;24DC;24DC;006D;006D; # (ⓜ; ⓜ; ⓜ; m; m; ) CIRCLED LATIN SMALL LETTER M 24DD;24DD;24DD;006E;006E; # (ⓝ; ⓝ; ⓝ; n; n; ) CIRCLED LATIN SMALL LETTER N 24DE;24DE;24DE;006F;006F; # (ⓞ; ⓞ; ⓞ; o; o; ) CIRCLED LATIN SMALL LETTER O 24DF;24DF;24DF;0070;0070; # (ⓟ; ⓟ; ⓟ; p; p; ) CIRCLED LATIN SMALL LETTER P 24E0;24E0;24E0;0071;0071; # (ⓠ; ⓠ; ⓠ; q; q; ) CIRCLED LATIN SMALL LETTER Q 24E1;24E1;24E1;0072;0072; # (ⓡ; ⓡ; ⓡ; r; r; ) CIRCLED LATIN SMALL LETTER R 24E2;24E2;24E2;0073;0073; # (ⓢ; ⓢ; ⓢ; s; s; ) CIRCLED LATIN SMALL LETTER S 24E3;24E3;24E3;0074;0074; # (ⓣ; ⓣ; ⓣ; t; t; ) CIRCLED LATIN SMALL LETTER T 24E4;24E4;24E4;0075;0075; # (ⓤ; ⓤ; ⓤ; u; u; ) CIRCLED LATIN SMALL LETTER U 24E5;24E5;24E5;0076;0076; # (ⓥ; ⓥ; ⓥ; v; v; ) CIRCLED LATIN SMALL LETTER V 24E6;24E6;24E6;0077;0077; # (ⓦ; ⓦ; ⓦ; w; w; ) CIRCLED LATIN SMALL LETTER W 24E7;24E7;24E7;0078;0078; # (ⓧ; ⓧ; ⓧ; x; x; ) CIRCLED LATIN SMALL LETTER X 24E8;24E8;24E8;0079;0079; # (ⓨ; ⓨ; ⓨ; y; y; ) CIRCLED LATIN SMALL LETTER Y 24E9;24E9;24E9;007A;007A; # (ⓩ; ⓩ; ⓩ; z; z; ) CIRCLED LATIN SMALL LETTER Z 24EA;24EA;24EA;0030;0030; # (⓪; ⓪; ⓪; 0; 0; ) CIRCLED DIGIT ZERO 2A0C;2A0C;2A0C;222B 222B 222B 222B;222B 222B 222B 222B; # (⨌; ⨌; ⨌; ∫∫∫∫; ∫∫∫∫; ) QUADRUPLE INTEGRAL OPERATOR 2A74;2A74;2A74;003A 003A 003D;003A 003A 003D; # (⩴; ⩴; ⩴; ::=; ::=; ) DOUBLE COLON EQUAL 2A75;2A75;2A75;003D 003D;003D 003D; # (⩵; ⩵; ⩵; ==; ==; ) TWO CONSECUTIVE EQUALS SIGNS 2A76;2A76;2A76;003D 003D 003D;003D 003D 003D; # (⩶; ⩶; ⩶; ===; ===; ) THREE CONSECUTIVE EQUALS SIGNS 2ADC;2ADD 0338;2ADD 0338;2ADD 0338;2ADD 0338; # (⫝̸; ⫝◌̸; ⫝◌̸; ⫝◌̸; ⫝◌̸; ) FORKING 2C7C;2C7C;2C7C;006A;006A; # (ⱼ; ⱼ; ⱼ; j; j; ) LATIN SUBSCRIPT SMALL LETTER J 2C7D;2C7D;2C7D;0056;0056; # (ⱽ; ⱽ; ⱽ; V; V; ) MODIFIER LETTER CAPITAL V 2D6F;2D6F;2D6F;2D61;2D61; # (ⵯ; ⵯ; ⵯ; ⵡ; ⵡ; ) TIFINAGH MODIFIER LETTER LABIALIZATION MARK 2E9F;2E9F;2E9F;6BCD;6BCD; # (⺟; ⺟; ⺟; 母; 母; ) CJK RADICAL MOTHER 2EF3;2EF3;2EF3;9F9F;9F9F; # (⻳; ⻳; ⻳; 龟; 龟; ) CJK RADICAL C-SIMPLIFIED TURTLE 2F00;2F00;2F00;4E00;4E00; # (⼀; ⼀; ⼀; 一; 一; ) KANGXI RADICAL ONE 2F01;2F01;2F01;4E28;4E28; # (⼁; ⼁; ⼁; 丨; 丨; ) KANGXI RADICAL LINE 2F02;2F02;2F02;4E36;4E36; # (⼂; ⼂; ⼂; 丶; 丶; ) KANGXI RADICAL DOT 2F03;2F03;2F03;4E3F;4E3F; # (⼃; ⼃; ⼃; 丿; 丿; ) KANGXI RADICAL SLASH 2F04;2F04;2F04;4E59;4E59; # (⼄; ⼄; ⼄; 乙; 乙; ) KANGXI RADICAL SECOND 2F05;2F05;2F05;4E85;4E85; # (⼅; ⼅; ⼅; 亅; 亅; ) KANGXI RADICAL HOOK 2F06;2F06;2F06;4E8C;4E8C; # (⼆; ⼆; ⼆; 二; 二; ) KANGXI RADICAL TWO 2F07;2F07;2F07;4EA0;4EA0; # (⼇; ⼇; ⼇; 亠; 亠; ) KANGXI RADICAL LID 2F08;2F08;2F08;4EBA;4EBA; # (⼈; ⼈; ⼈; 人; 人; ) KANGXI RADICAL MAN 2F09;2F09;2F09;513F;513F; # (⼉; ⼉; ⼉; 儿; 儿; ) KANGXI RADICAL LEGS 2F0A;2F0A;2F0A;5165;5165; # (⼊; ⼊; ⼊; 入; 入; ) KANGXI RADICAL ENTER 2F0B;2F0B;2F0B;516B;516B; # (⼋; ⼋; ⼋; 八; 八; ) KANGXI RADICAL EIGHT 2F0C;2F0C;2F0C;5182;5182; # (⼌; ⼌; ⼌; 冂; 冂; ) KANGXI RADICAL DOWN BOX 2F0D;2F0D;2F0D;5196;5196; # (⼍; ⼍; ⼍; 冖; 冖; ) KANGXI RADICAL COVER 2F0E;2F0E;2F0E;51AB;51AB; # (⼎; ⼎; ⼎; 冫; 冫; ) KANGXI RADICAL ICE 2F0F;2F0F;2F0F;51E0;51E0; # (⼏; ⼏; ⼏; 几; 几; ) KANGXI RADICAL TABLE 2F10;2F10;2F10;51F5;51F5; # (⼐; ⼐; ⼐; 凵; 凵; ) KANGXI RADICAL OPEN BOX 2F11;2F11;2F11;5200;5200; # (⼑; ⼑; ⼑; 刀; 刀; ) KANGXI RADICAL KNIFE 2F12;2F12;2F12;529B;529B; # (⼒; ⼒; ⼒; 力; 力; ) KANGXI RADICAL POWER 2F13;2F13;2F13;52F9;52F9; # (⼓; ⼓; ⼓; 勹; 勹; ) KANGXI RADICAL WRAP 2F14;2F14;2F14;5315;5315; # (⼔; ⼔; ⼔; 匕; 匕; ) KANGXI RADICAL SPOON 2F15;2F15;2F15;531A;531A; # (⼕; ⼕; ⼕; 匚; 匚; ) KANGXI RADICAL RIGHT OPEN BOX 2F16;2F16;2F16;5338;5338; # (⼖; ⼖; ⼖; 匸; 匸; ) KANGXI RADICAL HIDING ENCLOSURE 2F17;2F17;2F17;5341;5341; # (⼗; ⼗; ⼗; 十; 十; ) KANGXI RADICAL TEN 2F18;2F18;2F18;535C;535C; # (⼘; ⼘; ⼘; 卜; 卜; ) KANGXI RADICAL DIVINATION 2F19;2F19;2F19;5369;5369; # (⼙; ⼙; ⼙; 卩; 卩; ) KANGXI RADICAL SEAL 2F1A;2F1A;2F1A;5382;5382; # (⼚; ⼚; ⼚; 厂; 厂; ) KANGXI RADICAL CLIFF 2F1B;2F1B;2F1B;53B6;53B6; # (⼛; ⼛; ⼛; 厶; 厶; ) KANGXI RADICAL PRIVATE 2F1C;2F1C;2F1C;53C8;53C8; # (⼜; ⼜; ⼜; 又; 又; ) KANGXI RADICAL AGAIN 2F1D;2F1D;2F1D;53E3;53E3; # (⼝; ⼝; ⼝; 口; 口; ) KANGXI RADICAL MOUTH 2F1E;2F1E;2F1E;56D7;56D7; # (⼞; ⼞; ⼞; 囗; 囗; ) KANGXI RADICAL ENCLOSURE 2F1F;2F1F;2F1F;571F;571F; # (⼟; ⼟; ⼟; 土; 土; ) KANGXI RADICAL EARTH 2F20;2F20;2F20;58EB;58EB; # (⼠; ⼠; ⼠; 士; 士; ) KANGXI RADICAL SCHOLAR 2F21;2F21;2F21;5902;5902; # (⼡; ⼡; ⼡; 夂; 夂; ) KANGXI RADICAL GO 2F22;2F22;2F22;590A;590A; # (⼢; ⼢; ⼢; 夊; 夊; ) KANGXI RADICAL GO SLOWLY 2F23;2F23;2F23;5915;5915; # (⼣; ⼣; ⼣; 夕; 夕; ) KANGXI RADICAL EVENING 2F24;2F24;2F24;5927;5927; # (⼤; ⼤; ⼤; 大; 大; ) KANGXI RADICAL BIG 2F25;2F25;2F25;5973;5973; # (⼥; ⼥; ⼥; 女; 女; ) KANGXI RADICAL WOMAN 2F26;2F26;2F26;5B50;5B50; # (⼦; ⼦; ⼦; 子; 子; ) KANGXI RADICAL CHILD 2F27;2F27;2F27;5B80;5B80; # (⼧; ⼧; ⼧; 宀; 宀; ) KANGXI RADICAL ROOF 2F28;2F28;2F28;5BF8;5BF8; # (⼨; ⼨; ⼨; 寸; 寸; ) KANGXI RADICAL INCH 2F29;2F29;2F29;5C0F;5C0F; # (⼩; ⼩; ⼩; 小; 小; ) KANGXI RADICAL SMALL 2F2A;2F2A;2F2A;5C22;5C22; # (⼪; ⼪; ⼪; 尢; 尢; ) KANGXI RADICAL LAME 2F2B;2F2B;2F2B;5C38;5C38; # (⼫; ⼫; ⼫; 尸; 尸; ) KANGXI RADICAL CORPSE 2F2C;2F2C;2F2C;5C6E;5C6E; # (⼬; ⼬; ⼬; 屮; 屮; ) KANGXI RADICAL SPROUT 2F2D;2F2D;2F2D;5C71;5C71; # (⼭; ⼭; ⼭; 山; 山; ) KANGXI RADICAL MOUNTAIN 2F2E;2F2E;2F2E;5DDB;5DDB; # (⼮; ⼮; ⼮; 巛; 巛; ) KANGXI RADICAL RIVER 2F2F;2F2F;2F2F;5DE5;5DE5; # (⼯; ⼯; ⼯; 工; 工; ) KANGXI RADICAL WORK 2F30;2F30;2F30;5DF1;5DF1; # (⼰; ⼰; ⼰; 己; 己; ) KANGXI RADICAL ONESELF 2F31;2F31;2F31;5DFE;5DFE; # (⼱; ⼱; ⼱; 巾; 巾; ) KANGXI RADICAL TURBAN 2F32;2F32;2F32;5E72;5E72; # (⼲; ⼲; ⼲; 干; 干; ) KANGXI RADICAL DRY 2F33;2F33;2F33;5E7A;5E7A; # (⼳; ⼳; ⼳; 幺; 幺; ) KANGXI RADICAL SHORT THREAD 2F34;2F34;2F34;5E7F;5E7F; # (⼴; ⼴; ⼴; 广; 广; ) KANGXI RADICAL DOTTED CLIFF 2F35;2F35;2F35;5EF4;5EF4; # (⼵; ⼵; ⼵; 廴; 廴; ) KANGXI RADICAL LONG STRIDE 2F36;2F36;2F36;5EFE;5EFE; # (⼶; ⼶; ⼶; 廾; 廾; ) KANGXI RADICAL TWO HANDS 2F37;2F37;2F37;5F0B;5F0B; # (⼷; ⼷; ⼷; 弋; 弋; ) KANGXI RADICAL SHOOT 2F38;2F38;2F38;5F13;5F13; # (⼸; ⼸; ⼸; 弓; 弓; ) KANGXI RADICAL BOW 2F39;2F39;2F39;5F50;5F50; # (⼹; ⼹; ⼹; 彐; 彐; ) KANGXI RADICAL SNOUT 2F3A;2F3A;2F3A;5F61;5F61; # (⼺; ⼺; ⼺; 彡; 彡; ) KANGXI RADICAL BRISTLE 2F3B;2F3B;2F3B;5F73;5F73; # (⼻; ⼻; ⼻; 彳; 彳; ) KANGXI RADICAL STEP 2F3C;2F3C;2F3C;5FC3;5FC3; # (⼼; ⼼; ⼼; 心; 心; ) KANGXI RADICAL HEART 2F3D;2F3D;2F3D;6208;6208; # (⼽; ⼽; ⼽; 戈; 戈; ) KANGXI RADICAL HALBERD 2F3E;2F3E;2F3E;6236;6236; # (⼾; ⼾; ⼾; 戶; 戶; ) KANGXI RADICAL DOOR 2F3F;2F3F;2F3F;624B;624B; # (⼿; ⼿; ⼿; 手; 手; ) KANGXI RADICAL HAND 2F40;2F40;2F40;652F;652F; # (⽀; ⽀; ⽀; 支; 支; ) KANGXI RADICAL BRANCH 2F41;2F41;2F41;6534;6534; # (⽁; ⽁; ⽁; 攴; 攴; ) KANGXI RADICAL RAP 2F42;2F42;2F42;6587;6587; # (⽂; ⽂; ⽂; 文; 文; ) KANGXI RADICAL SCRIPT 2F43;2F43;2F43;6597;6597; # (⽃; ⽃; ⽃; 斗; 斗; ) KANGXI RADICAL DIPPER 2F44;2F44;2F44;65A4;65A4; # (⽄; ⽄; ⽄; 斤; 斤; ) KANGXI RADICAL AXE 2F45;2F45;2F45;65B9;65B9; # (⽅; ⽅; ⽅; 方; 方; ) KANGXI RADICAL SQUARE 2F46;2F46;2F46;65E0;65E0; # (⽆; ⽆; ⽆; 无; 无; ) KANGXI RADICAL NOT 2F47;2F47;2F47;65E5;65E5; # (⽇; ⽇; ⽇; 日; 日; ) KANGXI RADICAL SUN 2F48;2F48;2F48;66F0;66F0; # (⽈; ⽈; ⽈; 曰; 曰; ) KANGXI RADICAL SAY 2F49;2F49;2F49;6708;6708; # (⽉; ⽉; ⽉; 月; 月; ) KANGXI RADICAL MOON 2F4A;2F4A;2F4A;6728;6728; # (⽊; ⽊; ⽊; 木; 木; ) KANGXI RADICAL TREE 2F4B;2F4B;2F4B;6B20;6B20; # (⽋; ⽋; ⽋; 欠; 欠; ) KANGXI RADICAL LACK 2F4C;2F4C;2F4C;6B62;6B62; # (⽌; ⽌; ⽌; 止; 止; ) KANGXI RADICAL STOP 2F4D;2F4D;2F4D;6B79;6B79; # (⽍; ⽍; ⽍; 歹; 歹; ) KANGXI RADICAL DEATH 2F4E;2F4E;2F4E;6BB3;6BB3; # (⽎; ⽎; ⽎; 殳; 殳; ) KANGXI RADICAL WEAPON 2F4F;2F4F;2F4F;6BCB;6BCB; # (⽏; ⽏; ⽏; 毋; 毋; ) KANGXI RADICAL DO NOT 2F50;2F50;2F50;6BD4;6BD4; # (⽐; ⽐; ⽐; 比; 比; ) KANGXI RADICAL COMPARE 2F51;2F51;2F51;6BDB;6BDB; # (⽑; ⽑; ⽑; 毛; 毛; ) KANGXI RADICAL FUR 2F52;2F52;2F52;6C0F;6C0F; # (⽒; ⽒; ⽒; 氏; 氏; ) KANGXI RADICAL CLAN 2F53;2F53;2F53;6C14;6C14; # (⽓; ⽓; ⽓; 气; 气; ) KANGXI RADICAL STEAM 2F54;2F54;2F54;6C34;6C34; # (⽔; ⽔; ⽔; 水; 水; ) KANGXI RADICAL WATER 2F55;2F55;2F55;706B;706B; # (⽕; ⽕; ⽕; 火; 火; ) KANGXI RADICAL FIRE 2F56;2F56;2F56;722A;722A; # (⽖; ⽖; ⽖; 爪; 爪; ) KANGXI RADICAL CLAW 2F57;2F57;2F57;7236;7236; # (⽗; ⽗; ⽗; 父; 父; ) KANGXI RADICAL FATHER 2F58;2F58;2F58;723B;723B; # (⽘; ⽘; ⽘; 爻; 爻; ) KANGXI RADICAL DOUBLE X 2F59;2F59;2F59;723F;723F; # (⽙; ⽙; ⽙; 爿; 爿; ) KANGXI RADICAL HALF TREE TRUNK 2F5A;2F5A;2F5A;7247;7247; # (⽚; ⽚; ⽚; 片; 片; ) KANGXI RADICAL SLICE 2F5B;2F5B;2F5B;7259;7259; # (⽛; ⽛; ⽛; 牙; 牙; ) KANGXI RADICAL FANG 2F5C;2F5C;2F5C;725B;725B; # (⽜; ⽜; ⽜; 牛; 牛; ) KANGXI RADICAL COW 2F5D;2F5D;2F5D;72AC;72AC; # (⽝; ⽝; ⽝; 犬; 犬; ) KANGXI RADICAL DOG 2F5E;2F5E;2F5E;7384;7384; # (⽞; ⽞; ⽞; 玄; 玄; ) KANGXI RADICAL PROFOUND 2F5F;2F5F;2F5F;7389;7389; # (⽟; ⽟; ⽟; 玉; 玉; ) KANGXI RADICAL JADE 2F60;2F60;2F60;74DC;74DC; # (⽠; ⽠; ⽠; 瓜; 瓜; ) KANGXI RADICAL MELON 2F61;2F61;2F61;74E6;74E6; # (⽡; ⽡; ⽡; 瓦; 瓦; ) KANGXI RADICAL TILE 2F62;2F62;2F62;7518;7518; # (⽢; ⽢; ⽢; 甘; 甘; ) KANGXI RADICAL SWEET 2F63;2F63;2F63;751F;751F; # (⽣; ⽣; ⽣; 生; 生; ) KANGXI RADICAL LIFE 2F64;2F64;2F64;7528;7528; # (⽤; ⽤; ⽤; 用; 用; ) KANGXI RADICAL USE 2F65;2F65;2F65;7530;7530; # (⽥; ⽥; ⽥; 田; 田; ) KANGXI RADICAL FIELD 2F66;2F66;2F66;758B;758B; # (⽦; ⽦; ⽦; 疋; 疋; ) KANGXI RADICAL BOLT OF CLOTH 2F67;2F67;2F67;7592;7592; # (⽧; ⽧; ⽧; 疒; 疒; ) KANGXI RADICAL SICKNESS 2F68;2F68;2F68;7676;7676; # (⽨; ⽨; ⽨; 癶; 癶; ) KANGXI RADICAL DOTTED TENT 2F69;2F69;2F69;767D;767D; # (⽩; ⽩; ⽩; 白; 白; ) KANGXI RADICAL WHITE 2F6A;2F6A;2F6A;76AE;76AE; # (⽪; ⽪; ⽪; 皮; 皮; ) KANGXI RADICAL SKIN 2F6B;2F6B;2F6B;76BF;76BF; # (⽫; ⽫; ⽫; 皿; 皿; ) KANGXI RADICAL DISH 2F6C;2F6C;2F6C;76EE;76EE; # (⽬; ⽬; ⽬; 目; 目; ) KANGXI RADICAL EYE 2F6D;2F6D;2F6D;77DB;77DB; # (⽭; ⽭; ⽭; 矛; 矛; ) KANGXI RADICAL SPEAR 2F6E;2F6E;2F6E;77E2;77E2; # (⽮; ⽮; ⽮; 矢; 矢; ) KANGXI RADICAL ARROW 2F6F;2F6F;2F6F;77F3;77F3; # (⽯; ⽯; ⽯; 石; 石; ) KANGXI RADICAL STONE 2F70;2F70;2F70;793A;793A; # (⽰; ⽰; ⽰; 示; 示; ) KANGXI RADICAL SPIRIT 2F71;2F71;2F71;79B8;79B8; # (⽱; ⽱; ⽱; 禸; 禸; ) KANGXI RADICAL TRACK 2F72;2F72;2F72;79BE;79BE; # (⽲; ⽲; ⽲; 禾; 禾; ) KANGXI RADICAL GRAIN 2F73;2F73;2F73;7A74;7A74; # (⽳; ⽳; ⽳; 穴; 穴; ) KANGXI RADICAL CAVE 2F74;2F74;2F74;7ACB;7ACB; # (⽴; ⽴; ⽴; 立; 立; ) KANGXI RADICAL STAND 2F75;2F75;2F75;7AF9;7AF9; # (⽵; ⽵; ⽵; 竹; 竹; ) KANGXI RADICAL BAMBOO 2F76;2F76;2F76;7C73;7C73; # (⽶; ⽶; ⽶; 米; 米; ) KANGXI RADICAL RICE 2F77;2F77;2F77;7CF8;7CF8; # (⽷; ⽷; ⽷; 糸; 糸; ) KANGXI RADICAL SILK 2F78;2F78;2F78;7F36;7F36; # (⽸; ⽸; ⽸; 缶; 缶; ) KANGXI RADICAL JAR 2F79;2F79;2F79;7F51;7F51; # (⽹; ⽹; ⽹; 网; 网; ) KANGXI RADICAL NET 2F7A;2F7A;2F7A;7F8A;7F8A; # (⽺; ⽺; ⽺; 羊; 羊; ) KANGXI RADICAL SHEEP 2F7B;2F7B;2F7B;7FBD;7FBD; # (⽻; ⽻; ⽻; 羽; 羽; ) KANGXI RADICAL FEATHER 2F7C;2F7C;2F7C;8001;8001; # (⽼; ⽼; ⽼; 老; 老; ) KANGXI RADICAL OLD 2F7D;2F7D;2F7D;800C;800C; # (⽽; ⽽; ⽽; 而; 而; ) KANGXI RADICAL AND 2F7E;2F7E;2F7E;8012;8012; # (⽾; ⽾; ⽾; 耒; 耒; ) KANGXI RADICAL PLOW 2F7F;2F7F;2F7F;8033;8033; # (⽿; ⽿; ⽿; 耳; 耳; ) KANGXI RADICAL EAR 2F80;2F80;2F80;807F;807F; # (⾀; ⾀; ⾀; 聿; 聿; ) KANGXI RADICAL BRUSH 2F81;2F81;2F81;8089;8089; # (⾁; ⾁; ⾁; 肉; 肉; ) KANGXI RADICAL MEAT 2F82;2F82;2F82;81E3;81E3; # (⾂; ⾂; ⾂; 臣; 臣; ) KANGXI RADICAL MINISTER 2F83;2F83;2F83;81EA;81EA; # (⾃; ⾃; ⾃; 自; 自; ) KANGXI RADICAL SELF 2F84;2F84;2F84;81F3;81F3; # (⾄; ⾄; ⾄; 至; 至; ) KANGXI RADICAL ARRIVE 2F85;2F85;2F85;81FC;81FC; # (⾅; ⾅; ⾅; 臼; 臼; ) KANGXI RADICAL MORTAR 2F86;2F86;2F86;820C;820C; # (⾆; ⾆; ⾆; 舌; 舌; ) KANGXI RADICAL TONGUE 2F87;2F87;2F87;821B;821B; # (⾇; ⾇; ⾇; 舛; 舛; ) KANGXI RADICAL OPPOSE 2F88;2F88;2F88;821F;821F; # (⾈; ⾈; ⾈; 舟; 舟; ) KANGXI RADICAL BOAT 2F89;2F89;2F89;826E;826E; # (⾉; ⾉; ⾉; 艮; 艮; ) KANGXI RADICAL STOPPING 2F8A;2F8A;2F8A;8272;8272; # (⾊; ⾊; ⾊; 色; 色; ) KANGXI RADICAL COLOR 2F8B;2F8B;2F8B;8278;8278; # (⾋; ⾋; ⾋; 艸; 艸; ) KANGXI RADICAL GRASS 2F8C;2F8C;2F8C;864D;864D; # (⾌; ⾌; ⾌; 虍; 虍; ) KANGXI RADICAL TIGER 2F8D;2F8D;2F8D;866B;866B; # (⾍; ⾍; ⾍; 虫; 虫; ) KANGXI RADICAL INSECT 2F8E;2F8E;2F8E;8840;8840; # (⾎; ⾎; ⾎; 血; 血; ) KANGXI RADICAL BLOOD 2F8F;2F8F;2F8F;884C;884C; # (⾏; ⾏; ⾏; 行; 行; ) KANGXI RADICAL WALK ENCLOSURE 2F90;2F90;2F90;8863;8863; # (⾐; ⾐; ⾐; 衣; 衣; ) KANGXI RADICAL CLOTHES 2F91;2F91;2F91;897E;897E; # (⾑; ⾑; ⾑; 襾; 襾; ) KANGXI RADICAL WEST 2F92;2F92;2F92;898B;898B; # (⾒; ⾒; ⾒; 見; 見; ) KANGXI RADICAL SEE 2F93;2F93;2F93;89D2;89D2; # (⾓; ⾓; ⾓; 角; 角; ) KANGXI RADICAL HORN 2F94;2F94;2F94;8A00;8A00; # (⾔; ⾔; ⾔; 言; 言; ) KANGXI RADICAL SPEECH 2F95;2F95;2F95;8C37;8C37; # (⾕; ⾕; ⾕; 谷; 谷; ) KANGXI RADICAL VALLEY 2F96;2F96;2F96;8C46;8C46; # (⾖; ⾖; ⾖; 豆; 豆; ) KANGXI RADICAL BEAN 2F97;2F97;2F97;8C55;8C55; # (⾗; ⾗; ⾗; 豕; 豕; ) KANGXI RADICAL PIG 2F98;2F98;2F98;8C78;8C78; # (⾘; ⾘; ⾘; 豸; 豸; ) KANGXI RADICAL BADGER 2F99;2F99;2F99;8C9D;8C9D; # (⾙; ⾙; ⾙; 貝; 貝; ) KANGXI RADICAL SHELL 2F9A;2F9A;2F9A;8D64;8D64; # (⾚; ⾚; ⾚; 赤; 赤; ) KANGXI RADICAL RED 2F9B;2F9B;2F9B;8D70;8D70; # (⾛; ⾛; ⾛; 走; 走; ) KANGXI RADICAL RUN 2F9C;2F9C;2F9C;8DB3;8DB3; # (⾜; ⾜; ⾜; 足; 足; ) KANGXI RADICAL FOOT 2F9D;2F9D;2F9D;8EAB;8EAB; # (⾝; ⾝; ⾝; 身; 身; ) KANGXI RADICAL BODY 2F9E;2F9E;2F9E;8ECA;8ECA; # (⾞; ⾞; ⾞; 車; 車; ) KANGXI RADICAL CART 2F9F;2F9F;2F9F;8F9B;8F9B; # (⾟; ⾟; ⾟; 辛; 辛; ) KANGXI RADICAL BITTER 2FA0;2FA0;2FA0;8FB0;8FB0; # (⾠; ⾠; ⾠; 辰; 辰; ) KANGXI RADICAL MORNING 2FA1;2FA1;2FA1;8FB5;8FB5; # (⾡; ⾡; ⾡; 辵; 辵; ) KANGXI RADICAL WALK 2FA2;2FA2;2FA2;9091;9091; # (⾢; ⾢; ⾢; 邑; 邑; ) KANGXI RADICAL CITY 2FA3;2FA3;2FA3;9149;9149; # (⾣; ⾣; ⾣; 酉; 酉; ) KANGXI RADICAL WINE 2FA4;2FA4;2FA4;91C6;91C6; # (⾤; ⾤; ⾤; 釆; 釆; ) KANGXI RADICAL DISTINGUISH 2FA5;2FA5;2FA5;91CC;91CC; # (⾥; ⾥; ⾥; 里; 里; ) KANGXI RADICAL VILLAGE 2FA6;2FA6;2FA6;91D1;91D1; # (⾦; ⾦; ⾦; 金; 金; ) KANGXI RADICAL GOLD 2FA7;2FA7;2FA7;9577;9577; # (⾧; ⾧; ⾧; 長; 長; ) KANGXI RADICAL LONG 2FA8;2FA8;2FA8;9580;9580; # (⾨; ⾨; ⾨; 門; 門; ) KANGXI RADICAL GATE 2FA9;2FA9;2FA9;961C;961C; # (⾩; ⾩; ⾩; 阜; 阜; ) KANGXI RADICAL MOUND 2FAA;2FAA;2FAA;96B6;96B6; # (⾪; ⾪; ⾪; 隶; 隶; ) KANGXI RADICAL SLAVE 2FAB;2FAB;2FAB;96B9;96B9; # (⾫; ⾫; ⾫; 隹; 隹; ) KANGXI RADICAL SHORT TAILED BIRD 2FAC;2FAC;2FAC;96E8;96E8; # (⾬; ⾬; ⾬; 雨; 雨; ) KANGXI RADICAL RAIN 2FAD;2FAD;2FAD;9751;9751; # (⾭; ⾭; ⾭; 靑; 靑; ) KANGXI RADICAL BLUE 2FAE;2FAE;2FAE;975E;975E; # (⾮; ⾮; ⾮; 非; 非; ) KANGXI RADICAL WRONG 2FAF;2FAF;2FAF;9762;9762; # (⾯; ⾯; ⾯; 面; 面; ) KANGXI RADICAL FACE 2FB0;2FB0;2FB0;9769;9769; # (⾰; ⾰; ⾰; 革; 革; ) KANGXI RADICAL LEATHER 2FB1;2FB1;2FB1;97CB;97CB; # (⾱; ⾱; ⾱; 韋; 韋; ) KANGXI RADICAL TANNED LEATHER 2FB2;2FB2;2FB2;97ED;97ED; # (⾲; ⾲; ⾲; 韭; 韭; ) KANGXI RADICAL LEEK 2FB3;2FB3;2FB3;97F3;97F3; # (⾳; ⾳; ⾳; 音; 音; ) KANGXI RADICAL SOUND 2FB4;2FB4;2FB4;9801;9801; # (⾴; ⾴; ⾴; 頁; 頁; ) KANGXI RADICAL LEAF 2FB5;2FB5;2FB5;98A8;98A8; # (⾵; ⾵; ⾵; 風; 風; ) KANGXI RADICAL WIND 2FB6;2FB6;2FB6;98DB;98DB; # (⾶; ⾶; ⾶; 飛; 飛; ) KANGXI RADICAL FLY 2FB7;2FB7;2FB7;98DF;98DF; # (⾷; ⾷; ⾷; 食; 食; ) KANGXI RADICAL EAT 2FB8;2FB8;2FB8;9996;9996; # (⾸; ⾸; ⾸; 首; 首; ) KANGXI RADICAL HEAD 2FB9;2FB9;2FB9;9999;9999; # (⾹; ⾹; ⾹; 香; 香; ) KANGXI RADICAL FRAGRANT 2FBA;2FBA;2FBA;99AC;99AC; # (⾺; ⾺; ⾺; 馬; 馬; ) KANGXI RADICAL HORSE 2FBB;2FBB;2FBB;9AA8;9AA8; # (⾻; ⾻; ⾻; 骨; 骨; ) KANGXI RADICAL BONE 2FBC;2FBC;2FBC;9AD8;9AD8; # (⾼; ⾼; ⾼; 高; 高; ) KANGXI RADICAL TALL 2FBD;2FBD;2FBD;9ADF;9ADF; # (⾽; ⾽; ⾽; 髟; 髟; ) KANGXI RADICAL HAIR 2FBE;2FBE;2FBE;9B25;9B25; # (⾾; ⾾; ⾾; 鬥; 鬥; ) KANGXI RADICAL FIGHT 2FBF;2FBF;2FBF;9B2F;9B2F; # (⾿; ⾿; ⾿; 鬯; 鬯; ) KANGXI RADICAL SACRIFICIAL WINE 2FC0;2FC0;2FC0;9B32;9B32; # (⿀; ⿀; ⿀; 鬲; 鬲; ) KANGXI RADICAL CAULDRON 2FC1;2FC1;2FC1;9B3C;9B3C; # (⿁; ⿁; ⿁; 鬼; 鬼; ) KANGXI RADICAL GHOST 2FC2;2FC2;2FC2;9B5A;9B5A; # (⿂; ⿂; ⿂; 魚; 魚; ) KANGXI RADICAL FISH 2FC3;2FC3;2FC3;9CE5;9CE5; # (⿃; ⿃; ⿃; 鳥; 鳥; ) KANGXI RADICAL BIRD 2FC4;2FC4;2FC4;9E75;9E75; # (⿄; ⿄; ⿄; 鹵; 鹵; ) KANGXI RADICAL SALT 2FC5;2FC5;2FC5;9E7F;9E7F; # (⿅; ⿅; ⿅; 鹿; 鹿; ) KANGXI RADICAL DEER 2FC6;2FC6;2FC6;9EA5;9EA5; # (⿆; ⿆; ⿆; 麥; 麥; ) KANGXI RADICAL WHEAT 2FC7;2FC7;2FC7;9EBB;9EBB; # (⿇; ⿇; ⿇; 麻; 麻; ) KANGXI RADICAL HEMP 2FC8;2FC8;2FC8;9EC3;9EC3; # (⿈; ⿈; ⿈; 黃; 黃; ) KANGXI RADICAL YELLOW 2FC9;2FC9;2FC9;9ECD;9ECD; # (⿉; ⿉; ⿉; 黍; 黍; ) KANGXI RADICAL MILLET 2FCA;2FCA;2FCA;9ED1;9ED1; # (⿊; ⿊; ⿊; 黑; 黑; ) KANGXI RADICAL BLACK 2FCB;2FCB;2FCB;9EF9;9EF9; # (⿋; ⿋; ⿋; 黹; 黹; ) KANGXI RADICAL EMBROIDERY 2FCC;2FCC;2FCC;9EFD;9EFD; # (⿌; ⿌; ⿌; 黽; 黽; ) KANGXI RADICAL FROG 2FCD;2FCD;2FCD;9F0E;9F0E; # (⿍; ⿍; ⿍; 鼎; 鼎; ) KANGXI RADICAL TRIPOD 2FCE;2FCE;2FCE;9F13;9F13; # (⿎; ⿎; ⿎; 鼓; 鼓; ) KANGXI RADICAL DRUM 2FCF;2FCF;2FCF;9F20;9F20; # (⿏; ⿏; ⿏; 鼠; 鼠; ) KANGXI RADICAL RAT 2FD0;2FD0;2FD0;9F3B;9F3B; # (⿐; ⿐; ⿐; 鼻; 鼻; ) KANGXI RADICAL NOSE 2FD1;2FD1;2FD1;9F4A;9F4A; # (⿑; ⿑; ⿑; 齊; 齊; ) KANGXI RADICAL EVEN 2FD2;2FD2;2FD2;9F52;9F52; # (⿒; ⿒; ⿒; 齒; 齒; ) KANGXI RADICAL TOOTH 2FD3;2FD3;2FD3;9F8D;9F8D; # (⿓; ⿓; ⿓; 龍; 龍; ) KANGXI RADICAL DRAGON 2FD4;2FD4;2FD4;9F9C;9F9C; # (⿔; ⿔; ⿔; 龜; 龜; ) KANGXI RADICAL TURTLE 2FD5;2FD5;2FD5;9FA0;9FA0; # (⿕; ⿕; ⿕; 龠; 龠; ) KANGXI RADICAL FLUTE 3000;3000;3000;0020;0020; # ( ;  ;  ; ; ; ) IDEOGRAPHIC SPACE 3036;3036;3036;3012;3012; # (〶; 〶; 〶; 〒; 〒; ) CIRCLED POSTAL MARK 3038;3038;3038;5341;5341; # (〸; 〸; 〸; 十; 十; ) HANGZHOU NUMERAL TEN 3039;3039;3039;5344;5344; # (〹; 〹; 〹; 卄; 卄; ) HANGZHOU NUMERAL TWENTY 303A;303A;303A;5345;5345; # (〺; 〺; 〺; 卅; 卅; ) HANGZHOU NUMERAL THIRTY 304C;304C;304B 3099;304C;304B 3099; # (が; が; か◌゙; が; か◌゙; ) HIRAGANA LETTER GA 304E;304E;304D 3099;304E;304D 3099; # (ぎ; ぎ; き◌゙; ぎ; き◌゙; ) HIRAGANA LETTER GI 3050;3050;304F 3099;3050;304F 3099; # (ぐ; ぐ; く◌゙; ぐ; く◌゙; ) HIRAGANA LETTER GU 3052;3052;3051 3099;3052;3051 3099; # (げ; げ; け◌゙; げ; け◌゙; ) HIRAGANA LETTER GE 3054;3054;3053 3099;3054;3053 3099; # (ご; ご; こ◌゙; ご; こ◌゙; ) HIRAGANA LETTER GO 3056;3056;3055 3099;3056;3055 3099; # (ざ; ざ; さ◌゙; ざ; さ◌゙; ) HIRAGANA LETTER ZA 3058;3058;3057 3099;3058;3057 3099; # (じ; じ; し◌゙; じ; し◌゙; ) HIRAGANA LETTER ZI 305A;305A;3059 3099;305A;3059 3099; # (ず; ず; す◌゙; ず; す◌゙; ) HIRAGANA LETTER ZU 305C;305C;305B 3099;305C;305B 3099; # (ぜ; ぜ; せ◌゙; ぜ; せ◌゙; ) HIRAGANA LETTER ZE 305E;305E;305D 3099;305E;305D 3099; # (ぞ; ぞ; そ◌゙; ぞ; そ◌゙; ) HIRAGANA LETTER ZO 3060;3060;305F 3099;3060;305F 3099; # (だ; だ; た◌゙; だ; た◌゙; ) HIRAGANA LETTER DA 3062;3062;3061 3099;3062;3061 3099; # (ぢ; ぢ; ち◌゙; ぢ; ち◌゙; ) HIRAGANA LETTER DI 3065;3065;3064 3099;3065;3064 3099; # (づ; づ; つ◌゙; づ; つ◌゙; ) HIRAGANA LETTER DU 3067;3067;3066 3099;3067;3066 3099; # (で; で; て◌゙; で; て◌゙; ) HIRAGANA LETTER DE 3069;3069;3068 3099;3069;3068 3099; # (ど; ど; と◌゙; ど; と◌゙; ) HIRAGANA LETTER DO 3070;3070;306F 3099;3070;306F 3099; # (ば; ば; は◌゙; ば; は◌゙; ) HIRAGANA LETTER BA 3071;3071;306F 309A;3071;306F 309A; # (ぱ; ぱ; は◌゚; ぱ; は◌゚; ) HIRAGANA LETTER PA 3073;3073;3072 3099;3073;3072 3099; # (び; び; ひ◌゙; び; ひ◌゙; ) HIRAGANA LETTER BI 3074;3074;3072 309A;3074;3072 309A; # (ぴ; ぴ; ひ◌゚; ぴ; ひ◌゚; ) HIRAGANA LETTER PI 3076;3076;3075 3099;3076;3075 3099; # (ぶ; ぶ; ふ◌゙; ぶ; ふ◌゙; ) HIRAGANA LETTER BU 3077;3077;3075 309A;3077;3075 309A; # (ぷ; ぷ; ふ◌゚; ぷ; ふ◌゚; ) HIRAGANA LETTER PU 3079;3079;3078 3099;3079;3078 3099; # (べ; べ; へ◌゙; べ; へ◌゙; ) HIRAGANA LETTER BE 307A;307A;3078 309A;307A;3078 309A; # (ぺ; ぺ; へ◌゚; ぺ; へ◌゚; ) HIRAGANA LETTER PE 307C;307C;307B 3099;307C;307B 3099; # (ぼ; ぼ; ほ◌゙; ぼ; ほ◌゙; ) HIRAGANA LETTER BO 307D;307D;307B 309A;307D;307B 309A; # (ぽ; ぽ; ほ◌゚; ぽ; ほ◌゚; ) HIRAGANA LETTER PO 3094;3094;3046 3099;3094;3046 3099; # (ゔ; ゔ; う◌゙; ゔ; う◌゙; ) HIRAGANA LETTER VU 309B;309B;309B;0020 3099;0020 3099; # (゛; ゛; ゛; ◌゙; ◌゙; ) KATAKANA-HIRAGANA VOICED SOUND MARK 309C;309C;309C;0020 309A;0020 309A; # (゜; ゜; ゜; ◌゚; ◌゚; ) KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 309E;309E;309D 3099;309E;309D 3099; # (ゞ; ゞ; ゝ◌゙; ゞ; ゝ◌゙; ) HIRAGANA VOICED ITERATION MARK 309F;309F;309F;3088 308A;3088 308A; # (ゟ; ゟ; ゟ; より; より; ) HIRAGANA DIGRAPH YORI 30AC;30AC;30AB 3099;30AC;30AB 3099; # (ガ; ガ; カ◌゙; ガ; カ◌゙; ) KATAKANA LETTER GA 30AE;30AE;30AD 3099;30AE;30AD 3099; # (ギ; ギ; キ◌゙; ギ; キ◌゙; ) KATAKANA LETTER GI 30B0;30B0;30AF 3099;30B0;30AF 3099; # (グ; グ; ク◌゙; グ; ク◌゙; ) KATAKANA LETTER GU 30B2;30B2;30B1 3099;30B2;30B1 3099; # (ゲ; ゲ; ケ◌゙; ゲ; ケ◌゙; ) KATAKANA LETTER GE 30B4;30B4;30B3 3099;30B4;30B3 3099; # (ゴ; ゴ; コ◌゙; ゴ; コ◌゙; ) KATAKANA LETTER GO 30B6;30B6;30B5 3099;30B6;30B5 3099; # (ザ; ザ; サ◌゙; ザ; サ◌゙; ) KATAKANA LETTER ZA 30B8;30B8;30B7 3099;30B8;30B7 3099; # (ジ; ジ; シ◌゙; ジ; シ◌゙; ) KATAKANA LETTER ZI 30BA;30BA;30B9 3099;30BA;30B9 3099; # (ズ; ズ; ス◌゙; ズ; ス◌゙; ) KATAKANA LETTER ZU 30BC;30BC;30BB 3099;30BC;30BB 3099; # (ゼ; ゼ; セ◌゙; ゼ; セ◌゙; ) KATAKANA LETTER ZE 30BE;30BE;30BD 3099;30BE;30BD 3099; # (ゾ; ゾ; ソ◌゙; ゾ; ソ◌゙; ) KATAKANA LETTER ZO 30C0;30C0;30BF 3099;30C0;30BF 3099; # (ダ; ダ; タ◌゙; ダ; タ◌゙; ) KATAKANA LETTER DA 30C2;30C2;30C1 3099;30C2;30C1 3099; # (ヂ; ヂ; チ◌゙; ヂ; チ◌゙; ) KATAKANA LETTER DI 30C5;30C5;30C4 3099;30C5;30C4 3099; # (ヅ; ヅ; ツ◌゙; ヅ; ツ◌゙; ) KATAKANA LETTER DU 30C7;30C7;30C6 3099;30C7;30C6 3099; # (デ; デ; テ◌゙; デ; テ◌゙; ) KATAKANA LETTER DE 30C9;30C9;30C8 3099;30C9;30C8 3099; # (ド; ド; ト◌゙; ド; ト◌゙; ) KATAKANA LETTER DO 30D0;30D0;30CF 3099;30D0;30CF 3099; # (バ; バ; ハ◌゙; バ; ハ◌゙; ) KATAKANA LETTER BA 30D1;30D1;30CF 309A;30D1;30CF 309A; # (パ; パ; ハ◌゚; パ; ハ◌゚; ) KATAKANA LETTER PA 30D3;30D3;30D2 3099;30D3;30D2 3099; # (ビ; ビ; ヒ◌゙; ビ; ヒ◌゙; ) KATAKANA LETTER BI 30D4;30D4;30D2 309A;30D4;30D2 309A; # (ピ; ピ; ヒ◌゚; ピ; ヒ◌゚; ) KATAKANA LETTER PI 30D6;30D6;30D5 3099;30D6;30D5 3099; # (ブ; ブ; フ◌゙; ブ; フ◌゙; ) KATAKANA LETTER BU 30D7;30D7;30D5 309A;30D7;30D5 309A; # (プ; プ; フ◌゚; プ; フ◌゚; ) KATAKANA LETTER PU 30D9;30D9;30D8 3099;30D9;30D8 3099; # (ベ; ベ; ヘ◌゙; ベ; ヘ◌゙; ) KATAKANA LETTER BE 30DA;30DA;30D8 309A;30DA;30D8 309A; # (ペ; ペ; ヘ◌゚; ペ; ヘ◌゚; ) KATAKANA LETTER PE 30DC;30DC;30DB 3099;30DC;30DB 3099; # (ボ; ボ; ホ◌゙; ボ; ホ◌゙; ) KATAKANA LETTER BO 30DD;30DD;30DB 309A;30DD;30DB 309A; # (ポ; ポ; ホ◌゚; ポ; ホ◌゚; ) KATAKANA LETTER PO 30F4;30F4;30A6 3099;30F4;30A6 3099; # (ヴ; ヴ; ウ◌゙; ヴ; ウ◌゙; ) KATAKANA LETTER VU 30F7;30F7;30EF 3099;30F7;30EF 3099; # (ヷ; ヷ; ワ◌゙; ヷ; ワ◌゙; ) KATAKANA LETTER VA 30F8;30F8;30F0 3099;30F8;30F0 3099; # (ヸ; ヸ; ヰ◌゙; ヸ; ヰ◌゙; ) KATAKANA LETTER VI 30F9;30F9;30F1 3099;30F9;30F1 3099; # (ヹ; ヹ; ヱ◌゙; ヹ; ヱ◌゙; ) KATAKANA LETTER VE 30FA;30FA;30F2 3099;30FA;30F2 3099; # (ヺ; ヺ; ヲ◌゙; ヺ; ヲ◌゙; ) KATAKANA LETTER VO 30FE;30FE;30FD 3099;30FE;30FD 3099; # (ヾ; ヾ; ヽ◌゙; ヾ; ヽ◌゙; ) KATAKANA VOICED ITERATION MARK 30FF;30FF;30FF;30B3 30C8;30B3 30C8; # (ヿ; ヿ; ヿ; コト; コト; ) KATAKANA DIGRAPH KOTO 3131;3131;3131;1100;1100; # (ㄱ; ㄱ; ㄱ; ᄀ; ᄀ; ) HANGUL LETTER KIYEOK 3132;3132;3132;1101;1101; # (ㄲ; ㄲ; ㄲ; ᄁ; ᄁ; ) HANGUL LETTER SSANGKIYEOK 3133;3133;3133;11AA;11AA; # (ㄳ; ㄳ; ㄳ; ᆪ; ᆪ; ) HANGUL LETTER KIYEOK-SIOS 3134;3134;3134;1102;1102; # (ㄴ; ㄴ; ㄴ; ᄂ; ᄂ; ) HANGUL LETTER NIEUN 3135;3135;3135;11AC;11AC; # (ㄵ; ㄵ; ㄵ; ᆬ; ᆬ; ) HANGUL LETTER NIEUN-CIEUC 3136;3136;3136;11AD;11AD; # (ㄶ; ㄶ; ㄶ; ᆭ; ᆭ; ) HANGUL LETTER NIEUN-HIEUH 3137;3137;3137;1103;1103; # (ㄷ; ㄷ; ㄷ; ᄃ; ᄃ; ) HANGUL LETTER TIKEUT 3138;3138;3138;1104;1104; # (ㄸ; ㄸ; ㄸ; ᄄ; ᄄ; ) HANGUL LETTER SSANGTIKEUT 3139;3139;3139;1105;1105; # (ㄹ; ㄹ; ㄹ; ᄅ; ᄅ; ) HANGUL LETTER RIEUL 313A;313A;313A;11B0;11B0; # (ㄺ; ㄺ; ㄺ; ᆰ; ᆰ; ) HANGUL LETTER RIEUL-KIYEOK 313B;313B;313B;11B1;11B1; # (ㄻ; ㄻ; ㄻ; ᆱ; ᆱ; ) HANGUL LETTER RIEUL-MIEUM 313C;313C;313C;11B2;11B2; # (ㄼ; ㄼ; ㄼ; ᆲ; ᆲ; ) HANGUL LETTER RIEUL-PIEUP 313D;313D;313D;11B3;11B3; # (ㄽ; ㄽ; ㄽ; ᆳ; ᆳ; ) HANGUL LETTER RIEUL-SIOS 313E;313E;313E;11B4;11B4; # (ㄾ; ㄾ; ㄾ; ᆴ; ᆴ; ) HANGUL LETTER RIEUL-THIEUTH 313F;313F;313F;11B5;11B5; # (ㄿ; ㄿ; ㄿ; ᆵ; ᆵ; ) HANGUL LETTER RIEUL-PHIEUPH 3140;3140;3140;111A;111A; # (ㅀ; ㅀ; ㅀ; ᄚ; ᄚ; ) HANGUL LETTER RIEUL-HIEUH 3141;3141;3141;1106;1106; # (ㅁ; ㅁ; ㅁ; ᄆ; ᄆ; ) HANGUL LETTER MIEUM 3142;3142;3142;1107;1107; # (ㅂ; ㅂ; ㅂ; ᄇ; ᄇ; ) HANGUL LETTER PIEUP 3143;3143;3143;1108;1108; # (ㅃ; ㅃ; ㅃ; ᄈ; ᄈ; ) HANGUL LETTER SSANGPIEUP 3144;3144;3144;1121;1121; # (ㅄ; ㅄ; ㅄ; ᄡ; ᄡ; ) HANGUL LETTER PIEUP-SIOS 3145;3145;3145;1109;1109; # (ㅅ; ㅅ; ㅅ; ᄉ; ᄉ; ) HANGUL LETTER SIOS 3146;3146;3146;110A;110A; # (ㅆ; ㅆ; ㅆ; ᄊ; ᄊ; ) HANGUL LETTER SSANGSIOS 3147;3147;3147;110B;110B; # (ㅇ; ㅇ; ㅇ; ᄋ; ᄋ; ) HANGUL LETTER IEUNG 3148;3148;3148;110C;110C; # (ㅈ; ㅈ; ㅈ; ᄌ; ᄌ; ) HANGUL LETTER CIEUC 3149;3149;3149;110D;110D; # (ㅉ; ㅉ; ㅉ; ᄍ; ᄍ; ) HANGUL LETTER SSANGCIEUC 314A;314A;314A;110E;110E; # (ㅊ; ㅊ; ㅊ; ᄎ; ᄎ; ) HANGUL LETTER CHIEUCH 314B;314B;314B;110F;110F; # (ㅋ; ㅋ; ㅋ; ᄏ; ᄏ; ) HANGUL LETTER KHIEUKH 314C;314C;314C;1110;1110; # (ㅌ; ㅌ; ㅌ; ᄐ; ᄐ; ) HANGUL LETTER THIEUTH 314D;314D;314D;1111;1111; # (ㅍ; ㅍ; ㅍ; ᄑ; ᄑ; ) HANGUL LETTER PHIEUPH 314E;314E;314E;1112;1112; # (ㅎ; ㅎ; ㅎ; ᄒ; ᄒ; ) HANGUL LETTER HIEUH 314F;314F;314F;1161;1161; # (ㅏ; ㅏ; ㅏ; ᅡ; ᅡ; ) HANGUL LETTER A 3150;3150;3150;1162;1162; # (ㅐ; ㅐ; ㅐ; ᅢ; ᅢ; ) HANGUL LETTER AE 3151;3151;3151;1163;1163; # (ㅑ; ㅑ; ㅑ; ᅣ; ᅣ; ) HANGUL LETTER YA 3152;3152;3152;1164;1164; # (ㅒ; ㅒ; ㅒ; ᅤ; ᅤ; ) HANGUL LETTER YAE 3153;3153;3153;1165;1165; # (ㅓ; ㅓ; ㅓ; ᅥ; ᅥ; ) HANGUL LETTER EO 3154;3154;3154;1166;1166; # (ㅔ; ㅔ; ㅔ; ᅦ; ᅦ; ) HANGUL LETTER E 3155;3155;3155;1167;1167; # (ㅕ; ㅕ; ㅕ; ᅧ; ᅧ; ) HANGUL LETTER YEO 3156;3156;3156;1168;1168; # (ㅖ; ㅖ; ㅖ; ᅨ; ᅨ; ) HANGUL LETTER YE 3157;3157;3157;1169;1169; # (ㅗ; ㅗ; ㅗ; ᅩ; ᅩ; ) HANGUL LETTER O 3158;3158;3158;116A;116A; # (ㅘ; ㅘ; ㅘ; ᅪ; ᅪ; ) HANGUL LETTER WA 3159;3159;3159;116B;116B; # (ㅙ; ㅙ; ㅙ; ᅫ; ᅫ; ) HANGUL LETTER WAE 315A;315A;315A;116C;116C; # (ㅚ; ㅚ; ㅚ; ᅬ; ᅬ; ) HANGUL LETTER OE 315B;315B;315B;116D;116D; # (ㅛ; ㅛ; ㅛ; ᅭ; ᅭ; ) HANGUL LETTER YO 315C;315C;315C;116E;116E; # (ㅜ; ㅜ; ㅜ; ᅮ; ᅮ; ) HANGUL LETTER U 315D;315D;315D;116F;116F; # (ㅝ; ㅝ; ㅝ; ᅯ; ᅯ; ) HANGUL LETTER WEO 315E;315E;315E;1170;1170; # (ㅞ; ㅞ; ㅞ; ᅰ; ᅰ; ) HANGUL LETTER WE 315F;315F;315F;1171;1171; # (ㅟ; ㅟ; ㅟ; ᅱ; ᅱ; ) HANGUL LETTER WI 3160;3160;3160;1172;1172; # (ㅠ; ㅠ; ㅠ; ᅲ; ᅲ; ) HANGUL LETTER YU 3161;3161;3161;1173;1173; # (ㅡ; ㅡ; ㅡ; ᅳ; ᅳ; ) HANGUL LETTER EU 3162;3162;3162;1174;1174; # (ㅢ; ㅢ; ㅢ; ᅴ; ᅴ; ) HANGUL LETTER YI 3163;3163;3163;1175;1175; # (ㅣ; ㅣ; ㅣ; ᅵ; ᅵ; ) HANGUL LETTER I 3164;3164;3164;1160;1160; # (ㅤ; ㅤ; ㅤ; ᅠ; ᅠ; ) HANGUL FILLER 3165;3165;3165;1114;1114; # (ㅥ; ㅥ; ㅥ; ᄔ; ᄔ; ) HANGUL LETTER SSANGNIEUN 3166;3166;3166;1115;1115; # (ㅦ; ㅦ; ㅦ; ᄕ; ᄕ; ) HANGUL LETTER NIEUN-TIKEUT 3167;3167;3167;11C7;11C7; # (ㅧ; ㅧ; ㅧ; ᇇ; ᇇ; ) HANGUL LETTER NIEUN-SIOS 3168;3168;3168;11C8;11C8; # (ㅨ; ㅨ; ㅨ; ᇈ; ᇈ; ) HANGUL LETTER NIEUN-PANSIOS 3169;3169;3169;11CC;11CC; # (ㅩ; ㅩ; ㅩ; ᇌ; ᇌ; ) HANGUL LETTER RIEUL-KIYEOK-SIOS 316A;316A;316A;11CE;11CE; # (ㅪ; ㅪ; ㅪ; ᇎ; ᇎ; ) HANGUL LETTER RIEUL-TIKEUT 316B;316B;316B;11D3;11D3; # (ㅫ; ㅫ; ㅫ; ᇓ; ᇓ; ) HANGUL LETTER RIEUL-PIEUP-SIOS 316C;316C;316C;11D7;11D7; # (ㅬ; ㅬ; ㅬ; ᇗ; ᇗ; ) HANGUL LETTER RIEUL-PANSIOS 316D;316D;316D;11D9;11D9; # (ㅭ; ㅭ; ㅭ; ᇙ; ᇙ; ) HANGUL LETTER RIEUL-YEORINHIEUH 316E;316E;316E;111C;111C; # (ㅮ; ㅮ; ㅮ; ᄜ; ᄜ; ) HANGUL LETTER MIEUM-PIEUP 316F;316F;316F;11DD;11DD; # (ㅯ; ㅯ; ㅯ; ᇝ; ᇝ; ) HANGUL LETTER MIEUM-SIOS 3170;3170;3170;11DF;11DF; # (ㅰ; ㅰ; ㅰ; ᇟ; ᇟ; ) HANGUL LETTER MIEUM-PANSIOS 3171;3171;3171;111D;111D; # (ㅱ; ㅱ; ㅱ; ᄝ; ᄝ; ) HANGUL LETTER KAPYEOUNMIEUM 3172;3172;3172;111E;111E; # (ㅲ; ㅲ; ㅲ; ᄞ; ᄞ; ) HANGUL LETTER PIEUP-KIYEOK 3173;3173;3173;1120;1120; # (ㅳ; ㅳ; ㅳ; ᄠ; ᄠ; ) HANGUL LETTER PIEUP-TIKEUT 3174;3174;3174;1122;1122; # (ㅴ; ㅴ; ㅴ; ᄢ; ᄢ; ) HANGUL LETTER PIEUP-SIOS-KIYEOK 3175;3175;3175;1123;1123; # (ㅵ; ㅵ; ㅵ; ᄣ; ᄣ; ) HANGUL LETTER PIEUP-SIOS-TIKEUT 3176;3176;3176;1127;1127; # (ㅶ; ㅶ; ㅶ; ᄧ; ᄧ; ) HANGUL LETTER PIEUP-CIEUC 3177;3177;3177;1129;1129; # (ㅷ; ㅷ; ㅷ; ᄩ; ᄩ; ) HANGUL LETTER PIEUP-THIEUTH 3178;3178;3178;112B;112B; # (ㅸ; ㅸ; ㅸ; ᄫ; ᄫ; ) HANGUL LETTER KAPYEOUNPIEUP 3179;3179;3179;112C;112C; # (ㅹ; ㅹ; ㅹ; ᄬ; ᄬ; ) HANGUL LETTER KAPYEOUNSSANGPIEUP 317A;317A;317A;112D;112D; # (ㅺ; ㅺ; ㅺ; ᄭ; ᄭ; ) HANGUL LETTER SIOS-KIYEOK 317B;317B;317B;112E;112E; # (ㅻ; ㅻ; ㅻ; ᄮ; ᄮ; ) HANGUL LETTER SIOS-NIEUN 317C;317C;317C;112F;112F; # (ㅼ; ㅼ; ㅼ; ᄯ; ᄯ; ) HANGUL LETTER SIOS-TIKEUT 317D;317D;317D;1132;1132; # (ㅽ; ㅽ; ㅽ; ᄲ; ᄲ; ) HANGUL LETTER SIOS-PIEUP 317E;317E;317E;1136;1136; # (ㅾ; ㅾ; ㅾ; ᄶ; ᄶ; ) HANGUL LETTER SIOS-CIEUC 317F;317F;317F;1140;1140; # (ㅿ; ㅿ; ㅿ; ᅀ; ᅀ; ) HANGUL LETTER PANSIOS 3180;3180;3180;1147;1147; # (ㆀ; ㆀ; ㆀ; ᅇ; ᅇ; ) HANGUL LETTER SSANGIEUNG 3181;3181;3181;114C;114C; # (ㆁ; ㆁ; ㆁ; ᅌ; ᅌ; ) HANGUL LETTER YESIEUNG 3182;3182;3182;11F1;11F1; # (ㆂ; ㆂ; ㆂ; ᇱ; ᇱ; ) HANGUL LETTER YESIEUNG-SIOS 3183;3183;3183;11F2;11F2; # (ㆃ; ㆃ; ㆃ; ᇲ; ᇲ; ) HANGUL LETTER YESIEUNG-PANSIOS 3184;3184;3184;1157;1157; # (ㆄ; ㆄ; ㆄ; ᅗ; ᅗ; ) HANGUL LETTER KAPYEOUNPHIEUPH 3185;3185;3185;1158;1158; # (ㆅ; ㆅ; ㆅ; ᅘ; ᅘ; ) HANGUL LETTER SSANGHIEUH 3186;3186;3186;1159;1159; # (ㆆ; ㆆ; ㆆ; ᅙ; ᅙ; ) HANGUL LETTER YEORINHIEUH 3187;3187;3187;1184;1184; # (ㆇ; ㆇ; ㆇ; ᆄ; ᆄ; ) HANGUL LETTER YO-YA 3188;3188;3188;1185;1185; # (ㆈ; ㆈ; ㆈ; ᆅ; ᆅ; ) HANGUL LETTER YO-YAE 3189;3189;3189;1188;1188; # (ㆉ; ㆉ; ㆉ; ᆈ; ᆈ; ) HANGUL LETTER YO-I 318A;318A;318A;1191;1191; # (ㆊ; ㆊ; ㆊ; ᆑ; ᆑ; ) HANGUL LETTER YU-YEO 318B;318B;318B;1192;1192; # (ㆋ; ㆋ; ㆋ; ᆒ; ᆒ; ) HANGUL LETTER YU-YE 318C;318C;318C;1194;1194; # (ㆌ; ㆌ; ㆌ; ᆔ; ᆔ; ) HANGUL LETTER YU-I 318D;318D;318D;119E;119E; # (ㆍ; ㆍ; ㆍ; ᆞ; ᆞ; ) HANGUL LETTER ARAEA 318E;318E;318E;11A1;11A1; # (ㆎ; ㆎ; ㆎ; ᆡ; ᆡ; ) HANGUL LETTER ARAEAE 3192;3192;3192;4E00;4E00; # (㆒; ㆒; ㆒; 一; 一; ) IDEOGRAPHIC ANNOTATION ONE MARK 3193;3193;3193;4E8C;4E8C; # (㆓; ㆓; ㆓; 二; 二; ) IDEOGRAPHIC ANNOTATION TWO MARK 3194;3194;3194;4E09;4E09; # (㆔; ㆔; ㆔; 三; 三; ) IDEOGRAPHIC ANNOTATION THREE MARK 3195;3195;3195;56DB;56DB; # (㆕; ㆕; ㆕; 四; 四; ) IDEOGRAPHIC ANNOTATION FOUR MARK 3196;3196;3196;4E0A;4E0A; # (㆖; ㆖; ㆖; 上; 上; ) IDEOGRAPHIC ANNOTATION TOP MARK 3197;3197;3197;4E2D;4E2D; # (㆗; ㆗; ㆗; 中; 中; ) IDEOGRAPHIC ANNOTATION MIDDLE MARK 3198;3198;3198;4E0B;4E0B; # (㆘; ㆘; ㆘; 下; 下; ) IDEOGRAPHIC ANNOTATION BOTTOM MARK 3199;3199;3199;7532;7532; # (㆙; ㆙; ㆙; 甲; 甲; ) IDEOGRAPHIC ANNOTATION FIRST MARK 319A;319A;319A;4E59;4E59; # (㆚; ㆚; ㆚; 乙; 乙; ) IDEOGRAPHIC ANNOTATION SECOND MARK 319B;319B;319B;4E19;4E19; # (㆛; ㆛; ㆛; 丙; 丙; ) IDEOGRAPHIC ANNOTATION THIRD MARK 319C;319C;319C;4E01;4E01; # (㆜; ㆜; ㆜; 丁; 丁; ) IDEOGRAPHIC ANNOTATION FOURTH MARK 319D;319D;319D;5929;5929; # (㆝; ㆝; ㆝; 天; 天; ) IDEOGRAPHIC ANNOTATION HEAVEN MARK 319E;319E;319E;5730;5730; # (㆞; ㆞; ㆞; 地; 地; ) IDEOGRAPHIC ANNOTATION EARTH MARK 319F;319F;319F;4EBA;4EBA; # (㆟; ㆟; ㆟; 人; 人; ) IDEOGRAPHIC ANNOTATION MAN MARK 3200;3200;3200;0028 1100 0029;0028 1100 0029; # (㈀; ㈀; ㈀; (ᄀ); (ᄀ); ) PARENTHESIZED HANGUL KIYEOK 3201;3201;3201;0028 1102 0029;0028 1102 0029; # (㈁; ㈁; ㈁; (ᄂ); (ᄂ); ) PARENTHESIZED HANGUL NIEUN 3202;3202;3202;0028 1103 0029;0028 1103 0029; # (㈂; ㈂; ㈂; (ᄃ); (ᄃ); ) PARENTHESIZED HANGUL TIKEUT 3203;3203;3203;0028 1105 0029;0028 1105 0029; # (㈃; ㈃; ㈃; (ᄅ); (ᄅ); ) PARENTHESIZED HANGUL RIEUL 3204;3204;3204;0028 1106 0029;0028 1106 0029; # (㈄; ㈄; ㈄; (ᄆ); (ᄆ); ) PARENTHESIZED HANGUL MIEUM 3205;3205;3205;0028 1107 0029;0028 1107 0029; # (㈅; ㈅; ㈅; (ᄇ); (ᄇ); ) PARENTHESIZED HANGUL PIEUP 3206;3206;3206;0028 1109 0029;0028 1109 0029; # (㈆; ㈆; ㈆; (ᄉ); (ᄉ); ) PARENTHESIZED HANGUL SIOS 3207;3207;3207;0028 110B 0029;0028 110B 0029; # (㈇; ㈇; ㈇; (ᄋ); (ᄋ); ) PARENTHESIZED HANGUL IEUNG 3208;3208;3208;0028 110C 0029;0028 110C 0029; # (㈈; ㈈; ㈈; (ᄌ); (ᄌ); ) PARENTHESIZED HANGUL CIEUC 3209;3209;3209;0028 110E 0029;0028 110E 0029; # (㈉; ㈉; ㈉; (ᄎ); (ᄎ); ) PARENTHESIZED HANGUL CHIEUCH 320A;320A;320A;0028 110F 0029;0028 110F 0029; # (㈊; ㈊; ㈊; (ᄏ); (ᄏ); ) PARENTHESIZED HANGUL KHIEUKH 320B;320B;320B;0028 1110 0029;0028 1110 0029; # (㈋; ㈋; ㈋; (ᄐ); (ᄐ); ) PARENTHESIZED HANGUL THIEUTH 320C;320C;320C;0028 1111 0029;0028 1111 0029; # (㈌; ㈌; ㈌; (ᄑ); (ᄑ); ) PARENTHESIZED HANGUL PHIEUPH 320D;320D;320D;0028 1112 0029;0028 1112 0029; # (㈍; ㈍; ㈍; (ᄒ); (ᄒ); ) PARENTHESIZED HANGUL HIEUH 320E;320E;320E;0028 AC00 0029;0028 1100 1161 0029; # (㈎; ㈎; ㈎; (가); (가); ) PARENTHESIZED HANGUL KIYEOK A 320F;320F;320F;0028 B098 0029;0028 1102 1161 0029; # (㈏; ㈏; ㈏; (나); (나); ) PARENTHESIZED HANGUL NIEUN A 3210;3210;3210;0028 B2E4 0029;0028 1103 1161 0029; # (㈐; ㈐; ㈐; (다); (다); ) PARENTHESIZED HANGUL TIKEUT A 3211;3211;3211;0028 B77C 0029;0028 1105 1161 0029; # (㈑; ㈑; ㈑; (라); (라); ) PARENTHESIZED HANGUL RIEUL A 3212;3212;3212;0028 B9C8 0029;0028 1106 1161 0029; # (㈒; ㈒; ㈒; (마); (마); ) PARENTHESIZED HANGUL MIEUM A 3213;3213;3213;0028 BC14 0029;0028 1107 1161 0029; # (㈓; ㈓; ㈓; (바); (바); ) PARENTHESIZED HANGUL PIEUP A 3214;3214;3214;0028 C0AC 0029;0028 1109 1161 0029; # (㈔; ㈔; ㈔; (사); (사); ) PARENTHESIZED HANGUL SIOS A 3215;3215;3215;0028 C544 0029;0028 110B 1161 0029; # (㈕; ㈕; ㈕; (아); (아); ) PARENTHESIZED HANGUL IEUNG A 3216;3216;3216;0028 C790 0029;0028 110C 1161 0029; # (㈖; ㈖; ㈖; (자); (자); ) PARENTHESIZED HANGUL CIEUC A 3217;3217;3217;0028 CC28 0029;0028 110E 1161 0029; # (㈗; ㈗; ㈗; (차); (차); ) PARENTHESIZED HANGUL CHIEUCH A 3218;3218;3218;0028 CE74 0029;0028 110F 1161 0029; # (㈘; ㈘; ㈘; (카); (카); ) PARENTHESIZED HANGUL KHIEUKH A 3219;3219;3219;0028 D0C0 0029;0028 1110 1161 0029; # (㈙; ㈙; ㈙; (타); (타); ) PARENTHESIZED HANGUL THIEUTH A 321A;321A;321A;0028 D30C 0029;0028 1111 1161 0029; # (㈚; ㈚; ㈚; (파); (파); ) PARENTHESIZED HANGUL PHIEUPH A 321B;321B;321B;0028 D558 0029;0028 1112 1161 0029; # (㈛; ㈛; ㈛; (하); (하); ) PARENTHESIZED HANGUL HIEUH A 321C;321C;321C;0028 C8FC 0029;0028 110C 116E 0029; # (㈜; ㈜; ㈜; (주); (주); ) PARENTHESIZED HANGUL CIEUC U 321D;321D;321D;0028 C624 C804 0029;0028 110B 1169 110C 1165 11AB 0029; # (㈝; ㈝; ㈝; (오전); (오전); ) PARENTHESIZED KOREAN CHARACTER OJEON 321E;321E;321E;0028 C624 D6C4 0029;0028 110B 1169 1112 116E 0029; # (㈞; ㈞; ㈞; (오후); (오후); ) PARENTHESIZED KOREAN CHARACTER O HU 3220;3220;3220;0028 4E00 0029;0028 4E00 0029; # (㈠; ㈠; ㈠; (一); (一); ) PARENTHESIZED IDEOGRAPH ONE 3221;3221;3221;0028 4E8C 0029;0028 4E8C 0029; # (㈡; ㈡; ㈡; (二); (二); ) PARENTHESIZED IDEOGRAPH TWO 3222;3222;3222;0028 4E09 0029;0028 4E09 0029; # (㈢; ㈢; ㈢; (三); (三); ) PARENTHESIZED IDEOGRAPH THREE 3223;3223;3223;0028 56DB 0029;0028 56DB 0029; # (㈣; ㈣; ㈣; (四); (四); ) PARENTHESIZED IDEOGRAPH FOUR 3224;3224;3224;0028 4E94 0029;0028 4E94 0029; # (㈤; ㈤; ㈤; (五); (五); ) PARENTHESIZED IDEOGRAPH FIVE 3225;3225;3225;0028 516D 0029;0028 516D 0029; # (㈥; ㈥; ㈥; (六); (六); ) PARENTHESIZED IDEOGRAPH SIX 3226;3226;3226;0028 4E03 0029;0028 4E03 0029; # (㈦; ㈦; ㈦; (七); (七); ) PARENTHESIZED IDEOGRAPH SEVEN 3227;3227;3227;0028 516B 0029;0028 516B 0029; # (㈧; ㈧; ㈧; (八); (八); ) PARENTHESIZED IDEOGRAPH EIGHT 3228;3228;3228;0028 4E5D 0029;0028 4E5D 0029; # (㈨; ㈨; ㈨; (九); (九); ) PARENTHESIZED IDEOGRAPH NINE 3229;3229;3229;0028 5341 0029;0028 5341 0029; # (㈩; ㈩; ㈩; (十); (十); ) PARENTHESIZED IDEOGRAPH TEN 322A;322A;322A;0028 6708 0029;0028 6708 0029; # (㈪; ㈪; ㈪; (月); (月); ) PARENTHESIZED IDEOGRAPH MOON 322B;322B;322B;0028 706B 0029;0028 706B 0029; # (㈫; ㈫; ㈫; (火); (火); ) PARENTHESIZED IDEOGRAPH FIRE 322C;322C;322C;0028 6C34 0029;0028 6C34 0029; # (㈬; ㈬; ㈬; (水); (水); ) PARENTHESIZED IDEOGRAPH WATER 322D;322D;322D;0028 6728 0029;0028 6728 0029; # (㈭; ㈭; ㈭; (木); (木); ) PARENTHESIZED IDEOGRAPH WOOD 322E;322E;322E;0028 91D1 0029;0028 91D1 0029; # (㈮; ㈮; ㈮; (金); (金); ) PARENTHESIZED IDEOGRAPH METAL 322F;322F;322F;0028 571F 0029;0028 571F 0029; # (㈯; ㈯; ㈯; (土); (土); ) PARENTHESIZED IDEOGRAPH EARTH 3230;3230;3230;0028 65E5 0029;0028 65E5 0029; # (㈰; ㈰; ㈰; (日); (日); ) PARENTHESIZED IDEOGRAPH SUN 3231;3231;3231;0028 682A 0029;0028 682A 0029; # (㈱; ㈱; ㈱; (株); (株); ) PARENTHESIZED IDEOGRAPH STOCK 3232;3232;3232;0028 6709 0029;0028 6709 0029; # (㈲; ㈲; ㈲; (有); (有); ) PARENTHESIZED IDEOGRAPH HAVE 3233;3233;3233;0028 793E 0029;0028 793E 0029; # (㈳; ㈳; ㈳; (社); (社); ) PARENTHESIZED IDEOGRAPH SOCIETY 3234;3234;3234;0028 540D 0029;0028 540D 0029; # (㈴; ㈴; ㈴; (名); (名); ) PARENTHESIZED IDEOGRAPH NAME 3235;3235;3235;0028 7279 0029;0028 7279 0029; # (㈵; ㈵; ㈵; (特); (特); ) PARENTHESIZED IDEOGRAPH SPECIAL 3236;3236;3236;0028 8CA1 0029;0028 8CA1 0029; # (㈶; ㈶; ㈶; (財); (財); ) PARENTHESIZED IDEOGRAPH FINANCIAL 3237;3237;3237;0028 795D 0029;0028 795D 0029; # (㈷; ㈷; ㈷; (祝); (祝); ) PARENTHESIZED IDEOGRAPH CONGRATULATION 3238;3238;3238;0028 52B4 0029;0028 52B4 0029; # (㈸; ㈸; ㈸; (労); (労); ) PARENTHESIZED IDEOGRAPH LABOR 3239;3239;3239;0028 4EE3 0029;0028 4EE3 0029; # (㈹; ㈹; ㈹; (代); (代); ) PARENTHESIZED IDEOGRAPH REPRESENT 323A;323A;323A;0028 547C 0029;0028 547C 0029; # (㈺; ㈺; ㈺; (呼); (呼); ) PARENTHESIZED IDEOGRAPH CALL 323B;323B;323B;0028 5B66 0029;0028 5B66 0029; # (㈻; ㈻; ㈻; (学); (学); ) PARENTHESIZED IDEOGRAPH STUDY 323C;323C;323C;0028 76E3 0029;0028 76E3 0029; # (㈼; ㈼; ㈼; (監); (監); ) PARENTHESIZED IDEOGRAPH SUPERVISE 323D;323D;323D;0028 4F01 0029;0028 4F01 0029; # (㈽; ㈽; ㈽; (企); (企); ) PARENTHESIZED IDEOGRAPH ENTERPRISE 323E;323E;323E;0028 8CC7 0029;0028 8CC7 0029; # (㈾; ㈾; ㈾; (資); (資); ) PARENTHESIZED IDEOGRAPH RESOURCE 323F;323F;323F;0028 5354 0029;0028 5354 0029; # (㈿; ㈿; ㈿; (協); (協); ) PARENTHESIZED IDEOGRAPH ALLIANCE 3240;3240;3240;0028 796D 0029;0028 796D 0029; # (㉀; ㉀; ㉀; (祭); (祭); ) PARENTHESIZED IDEOGRAPH FESTIVAL 3241;3241;3241;0028 4F11 0029;0028 4F11 0029; # (㉁; ㉁; ㉁; (休); (休); ) PARENTHESIZED IDEOGRAPH REST 3242;3242;3242;0028 81EA 0029;0028 81EA 0029; # (㉂; ㉂; ㉂; (自); (自); ) PARENTHESIZED IDEOGRAPH SELF 3243;3243;3243;0028 81F3 0029;0028 81F3 0029; # (㉃; ㉃; ㉃; (至); (至); ) PARENTHESIZED IDEOGRAPH REACH 3244;3244;3244;554F;554F; # (㉄; ㉄; ㉄; 問; 問; ) CIRCLED IDEOGRAPH QUESTION 3245;3245;3245;5E7C;5E7C; # (㉅; ㉅; ㉅; 幼; 幼; ) CIRCLED IDEOGRAPH KINDERGARTEN 3246;3246;3246;6587;6587; # (㉆; ㉆; ㉆; 文; 文; ) CIRCLED IDEOGRAPH SCHOOL 3247;3247;3247;7B8F;7B8F; # (㉇; ㉇; ㉇; 箏; 箏; ) CIRCLED IDEOGRAPH KOTO 3250;3250;3250;0050 0054 0045;0050 0054 0045; # (㉐; ㉐; ㉐; PTE; PTE; ) PARTNERSHIP SIGN 3251;3251;3251;0032 0031;0032 0031; # (㉑; ㉑; ㉑; 21; 21; ) CIRCLED NUMBER TWENTY ONE 3252;3252;3252;0032 0032;0032 0032; # (㉒; ㉒; ㉒; 22; 22; ) CIRCLED NUMBER TWENTY TWO 3253;3253;3253;0032 0033;0032 0033; # (㉓; ㉓; ㉓; 23; 23; ) CIRCLED NUMBER TWENTY THREE 3254;3254;3254;0032 0034;0032 0034; # (㉔; ㉔; ㉔; 24; 24; ) CIRCLED NUMBER TWENTY FOUR 3255;3255;3255;0032 0035;0032 0035; # (㉕; ㉕; ㉕; 25; 25; ) CIRCLED NUMBER TWENTY FIVE 3256;3256;3256;0032 0036;0032 0036; # (㉖; ㉖; ㉖; 26; 26; ) CIRCLED NUMBER TWENTY SIX 3257;3257;3257;0032 0037;0032 0037; # (㉗; ㉗; ㉗; 27; 27; ) CIRCLED NUMBER TWENTY SEVEN 3258;3258;3258;0032 0038;0032 0038; # (㉘; ㉘; ㉘; 28; 28; ) CIRCLED NUMBER TWENTY EIGHT 3259;3259;3259;0032 0039;0032 0039; # (㉙; ㉙; ㉙; 29; 29; ) CIRCLED NUMBER TWENTY NINE 325A;325A;325A;0033 0030;0033 0030; # (㉚; ㉚; ㉚; 30; 30; ) CIRCLED NUMBER THIRTY 325B;325B;325B;0033 0031;0033 0031; # (㉛; ㉛; ㉛; 31; 31; ) CIRCLED NUMBER THIRTY ONE 325C;325C;325C;0033 0032;0033 0032; # (㉜; ㉜; ㉜; 32; 32; ) CIRCLED NUMBER THIRTY TWO 325D;325D;325D;0033 0033;0033 0033; # (㉝; ㉝; ㉝; 33; 33; ) CIRCLED NUMBER THIRTY THREE 325E;325E;325E;0033 0034;0033 0034; # (㉞; ㉞; ㉞; 34; 34; ) CIRCLED NUMBER THIRTY FOUR 325F;325F;325F;0033 0035;0033 0035; # (㉟; ㉟; ㉟; 35; 35; ) CIRCLED NUMBER THIRTY FIVE 3260;3260;3260;1100;1100; # (㉠; ㉠; ㉠; ᄀ; ᄀ; ) CIRCLED HANGUL KIYEOK 3261;3261;3261;1102;1102; # (㉡; ㉡; ㉡; ᄂ; ᄂ; ) CIRCLED HANGUL NIEUN 3262;3262;3262;1103;1103; # (㉢; ㉢; ㉢; ᄃ; ᄃ; ) CIRCLED HANGUL TIKEUT 3263;3263;3263;1105;1105; # (㉣; ㉣; ㉣; ᄅ; ᄅ; ) CIRCLED HANGUL RIEUL 3264;3264;3264;1106;1106; # (㉤; ㉤; ㉤; ᄆ; ᄆ; ) CIRCLED HANGUL MIEUM 3265;3265;3265;1107;1107; # (㉥; ㉥; ㉥; ᄇ; ᄇ; ) CIRCLED HANGUL PIEUP 3266;3266;3266;1109;1109; # (㉦; ㉦; ㉦; ᄉ; ᄉ; ) CIRCLED HANGUL SIOS 3267;3267;3267;110B;110B; # (㉧; ㉧; ㉧; ᄋ; ᄋ; ) CIRCLED HANGUL IEUNG 3268;3268;3268;110C;110C; # (㉨; ㉨; ㉨; ᄌ; ᄌ; ) CIRCLED HANGUL CIEUC 3269;3269;3269;110E;110E; # (㉩; ㉩; ㉩; ᄎ; ᄎ; ) CIRCLED HANGUL CHIEUCH 326A;326A;326A;110F;110F; # (㉪; ㉪; ㉪; ᄏ; ᄏ; ) CIRCLED HANGUL KHIEUKH 326B;326B;326B;1110;1110; # (㉫; ㉫; ㉫; ᄐ; ᄐ; ) CIRCLED HANGUL THIEUTH 326C;326C;326C;1111;1111; # (㉬; ㉬; ㉬; ᄑ; ᄑ; ) CIRCLED HANGUL PHIEUPH 326D;326D;326D;1112;1112; # (㉭; ㉭; ㉭; ᄒ; ᄒ; ) CIRCLED HANGUL HIEUH 326E;326E;326E;AC00;1100 1161; # (㉮; ㉮; ㉮; 가; 가; ) CIRCLED HANGUL KIYEOK A 326F;326F;326F;B098;1102 1161; # (㉯; ㉯; ㉯; 나; 나; ) CIRCLED HANGUL NIEUN A 3270;3270;3270;B2E4;1103 1161; # (㉰; ㉰; ㉰; 다; 다; ) CIRCLED HANGUL TIKEUT A 3271;3271;3271;B77C;1105 1161; # (㉱; ㉱; ㉱; 라; 라; ) CIRCLED HANGUL RIEUL A 3272;3272;3272;B9C8;1106 1161; # (㉲; ㉲; ㉲; 마; 마; ) CIRCLED HANGUL MIEUM A 3273;3273;3273;BC14;1107 1161; # (㉳; ㉳; ㉳; 바; 바; ) CIRCLED HANGUL PIEUP A 3274;3274;3274;C0AC;1109 1161; # (㉴; ㉴; ㉴; 사; 사; ) CIRCLED HANGUL SIOS A 3275;3275;3275;C544;110B 1161; # (㉵; ㉵; ㉵; 아; 아; ) CIRCLED HANGUL IEUNG A 3276;3276;3276;C790;110C 1161; # (㉶; ㉶; ㉶; 자; 자; ) CIRCLED HANGUL CIEUC A 3277;3277;3277;CC28;110E 1161; # (㉷; ㉷; ㉷; 차; 차; ) CIRCLED HANGUL CHIEUCH A 3278;3278;3278;CE74;110F 1161; # (㉸; ㉸; ㉸; 카; 카; ) CIRCLED HANGUL KHIEUKH A 3279;3279;3279;D0C0;1110 1161; # (㉹; ㉹; ㉹; 타; 타; ) CIRCLED HANGUL THIEUTH A 327A;327A;327A;D30C;1111 1161; # (㉺; ㉺; ㉺; 파; 파; ) CIRCLED HANGUL PHIEUPH A 327B;327B;327B;D558;1112 1161; # (㉻; ㉻; ㉻; 하; 하; ) CIRCLED HANGUL HIEUH A 327C;327C;327C;CC38 ACE0;110E 1161 11B7 1100 1169; # (㉼; ㉼; ㉼; 참고; 참고; ) CIRCLED KOREAN CHARACTER CHAMKO 327D;327D;327D;C8FC C758;110C 116E 110B 1174; # (㉽; ㉽; ㉽; 주의; 주의; ) CIRCLED KOREAN CHARACTER JUEUI 327E;327E;327E;C6B0;110B 116E; # (㉾; ㉾; ㉾; 우; 우; ) CIRCLED HANGUL IEUNG U 3280;3280;3280;4E00;4E00; # (㊀; ㊀; ㊀; 一; 一; ) CIRCLED IDEOGRAPH ONE 3281;3281;3281;4E8C;4E8C; # (㊁; ㊁; ㊁; 二; 二; ) CIRCLED IDEOGRAPH TWO 3282;3282;3282;4E09;4E09; # (㊂; ㊂; ㊂; 三; 三; ) CIRCLED IDEOGRAPH THREE 3283;3283;3283;56DB;56DB; # (㊃; ㊃; ㊃; 四; 四; ) CIRCLED IDEOGRAPH FOUR 3284;3284;3284;4E94;4E94; # (㊄; ㊄; ㊄; 五; 五; ) CIRCLED IDEOGRAPH FIVE 3285;3285;3285;516D;516D; # (㊅; ㊅; ㊅; 六; 六; ) CIRCLED IDEOGRAPH SIX 3286;3286;3286;4E03;4E03; # (㊆; ㊆; ㊆; 七; 七; ) CIRCLED IDEOGRAPH SEVEN 3287;3287;3287;516B;516B; # (㊇; ㊇; ㊇; 八; 八; ) CIRCLED IDEOGRAPH EIGHT 3288;3288;3288;4E5D;4E5D; # (㊈; ㊈; ㊈; 九; 九; ) CIRCLED IDEOGRAPH NINE 3289;3289;3289;5341;5341; # (㊉; ㊉; ㊉; 十; 十; ) CIRCLED IDEOGRAPH TEN 328A;328A;328A;6708;6708; # (㊊; ㊊; ㊊; 月; 月; ) CIRCLED IDEOGRAPH MOON 328B;328B;328B;706B;706B; # (㊋; ㊋; ㊋; 火; 火; ) CIRCLED IDEOGRAPH FIRE 328C;328C;328C;6C34;6C34; # (㊌; ㊌; ㊌; 水; 水; ) CIRCLED IDEOGRAPH WATER 328D;328D;328D;6728;6728; # (㊍; ㊍; ㊍; 木; 木; ) CIRCLED IDEOGRAPH WOOD 328E;328E;328E;91D1;91D1; # (㊎; ㊎; ㊎; 金; 金; ) CIRCLED IDEOGRAPH METAL 328F;328F;328F;571F;571F; # (㊏; ㊏; ㊏; 土; 土; ) CIRCLED IDEOGRAPH EARTH 3290;3290;3290;65E5;65E5; # (㊐; ㊐; ㊐; 日; 日; ) CIRCLED IDEOGRAPH SUN 3291;3291;3291;682A;682A; # (㊑; ㊑; ㊑; 株; 株; ) CIRCLED IDEOGRAPH STOCK 3292;3292;3292;6709;6709; # (㊒; ㊒; ㊒; 有; 有; ) CIRCLED IDEOGRAPH HAVE 3293;3293;3293;793E;793E; # (㊓; ㊓; ㊓; 社; 社; ) CIRCLED IDEOGRAPH SOCIETY 3294;3294;3294;540D;540D; # (㊔; ㊔; ㊔; 名; 名; ) CIRCLED IDEOGRAPH NAME 3295;3295;3295;7279;7279; # (㊕; ㊕; ㊕; 特; 特; ) CIRCLED IDEOGRAPH SPECIAL 3296;3296;3296;8CA1;8CA1; # (㊖; ㊖; ㊖; 財; 財; ) CIRCLED IDEOGRAPH FINANCIAL 3297;3297;3297;795D;795D; # (㊗; ㊗; ㊗; 祝; 祝; ) CIRCLED IDEOGRAPH CONGRATULATION 3298;3298;3298;52B4;52B4; # (㊘; ㊘; ㊘; 労; 労; ) CIRCLED IDEOGRAPH LABOR 3299;3299;3299;79D8;79D8; # (㊙; ㊙; ㊙; 秘; 秘; ) CIRCLED IDEOGRAPH SECRET 329A;329A;329A;7537;7537; # (㊚; ㊚; ㊚; 男; 男; ) CIRCLED IDEOGRAPH MALE 329B;329B;329B;5973;5973; # (㊛; ㊛; ㊛; 女; 女; ) CIRCLED IDEOGRAPH FEMALE 329C;329C;329C;9069;9069; # (㊜; ㊜; ㊜; 適; 適; ) CIRCLED IDEOGRAPH SUITABLE 329D;329D;329D;512A;512A; # (㊝; ㊝; ㊝; 優; 優; ) CIRCLED IDEOGRAPH EXCELLENT 329E;329E;329E;5370;5370; # (㊞; ㊞; ㊞; 印; 印; ) CIRCLED IDEOGRAPH PRINT 329F;329F;329F;6CE8;6CE8; # (㊟; ㊟; ㊟; 注; 注; ) CIRCLED IDEOGRAPH ATTENTION 32A0;32A0;32A0;9805;9805; # (㊠; ㊠; ㊠; 項; 項; ) CIRCLED IDEOGRAPH ITEM 32A1;32A1;32A1;4F11;4F11; # (㊡; ㊡; ㊡; 休; 休; ) CIRCLED IDEOGRAPH REST 32A2;32A2;32A2;5199;5199; # (㊢; ㊢; ㊢; 写; 写; ) CIRCLED IDEOGRAPH COPY 32A3;32A3;32A3;6B63;6B63; # (㊣; ㊣; ㊣; 正; 正; ) CIRCLED IDEOGRAPH CORRECT 32A4;32A4;32A4;4E0A;4E0A; # (㊤; ㊤; ㊤; 上; 上; ) CIRCLED IDEOGRAPH HIGH 32A5;32A5;32A5;4E2D;4E2D; # (㊥; ㊥; ㊥; 中; 中; ) CIRCLED IDEOGRAPH CENTRE 32A6;32A6;32A6;4E0B;4E0B; # (㊦; ㊦; ㊦; 下; 下; ) CIRCLED IDEOGRAPH LOW 32A7;32A7;32A7;5DE6;5DE6; # (㊧; ㊧; ㊧; 左; 左; ) CIRCLED IDEOGRAPH LEFT 32A8;32A8;32A8;53F3;53F3; # (㊨; ㊨; ㊨; 右; 右; ) CIRCLED IDEOGRAPH RIGHT 32A9;32A9;32A9;533B;533B; # (㊩; ㊩; ㊩; 医; 医; ) CIRCLED IDEOGRAPH MEDICINE 32AA;32AA;32AA;5B97;5B97; # (㊪; ㊪; ㊪; 宗; 宗; ) CIRCLED IDEOGRAPH RELIGION 32AB;32AB;32AB;5B66;5B66; # (㊫; ㊫; ㊫; 学; 学; ) CIRCLED IDEOGRAPH STUDY 32AC;32AC;32AC;76E3;76E3; # (㊬; ㊬; ㊬; 監; 監; ) CIRCLED IDEOGRAPH SUPERVISE 32AD;32AD;32AD;4F01;4F01; # (㊭; ㊭; ㊭; 企; 企; ) CIRCLED IDEOGRAPH ENTERPRISE 32AE;32AE;32AE;8CC7;8CC7; # (㊮; ㊮; ㊮; 資; 資; ) CIRCLED IDEOGRAPH RESOURCE 32AF;32AF;32AF;5354;5354; # (㊯; ㊯; ㊯; 協; 協; ) CIRCLED IDEOGRAPH ALLIANCE 32B0;32B0;32B0;591C;591C; # (㊰; ㊰; ㊰; 夜; 夜; ) CIRCLED IDEOGRAPH NIGHT 32B1;32B1;32B1;0033 0036;0033 0036; # (㊱; ㊱; ㊱; 36; 36; ) CIRCLED NUMBER THIRTY SIX 32B2;32B2;32B2;0033 0037;0033 0037; # (㊲; ㊲; ㊲; 37; 37; ) CIRCLED NUMBER THIRTY SEVEN 32B3;32B3;32B3;0033 0038;0033 0038; # (㊳; ㊳; ㊳; 38; 38; ) CIRCLED NUMBER THIRTY EIGHT 32B4;32B4;32B4;0033 0039;0033 0039; # (㊴; ㊴; ㊴; 39; 39; ) CIRCLED NUMBER THIRTY NINE 32B5;32B5;32B5;0034 0030;0034 0030; # (㊵; ㊵; ㊵; 40; 40; ) CIRCLED NUMBER FORTY 32B6;32B6;32B6;0034 0031;0034 0031; # (㊶; ㊶; ㊶; 41; 41; ) CIRCLED NUMBER FORTY ONE 32B7;32B7;32B7;0034 0032;0034 0032; # (㊷; ㊷; ㊷; 42; 42; ) CIRCLED NUMBER FORTY TWO 32B8;32B8;32B8;0034 0033;0034 0033; # (㊸; ㊸; ㊸; 43; 43; ) CIRCLED NUMBER FORTY THREE 32B9;32B9;32B9;0034 0034;0034 0034; # (㊹; ㊹; ㊹; 44; 44; ) CIRCLED NUMBER FORTY FOUR 32BA;32BA;32BA;0034 0035;0034 0035; # (㊺; ㊺; ㊺; 45; 45; ) CIRCLED NUMBER FORTY FIVE 32BB;32BB;32BB;0034 0036;0034 0036; # (㊻; ㊻; ㊻; 46; 46; ) CIRCLED NUMBER FORTY SIX 32BC;32BC;32BC;0034 0037;0034 0037; # (㊼; ㊼; ㊼; 47; 47; ) CIRCLED NUMBER FORTY SEVEN 32BD;32BD;32BD;0034 0038;0034 0038; # (㊽; ㊽; ㊽; 48; 48; ) CIRCLED NUMBER FORTY EIGHT 32BE;32BE;32BE;0034 0039;0034 0039; # (㊾; ㊾; ㊾; 49; 49; ) CIRCLED NUMBER FORTY NINE 32BF;32BF;32BF;0035 0030;0035 0030; # (㊿; ㊿; ㊿; 50; 50; ) CIRCLED NUMBER FIFTY 32C0;32C0;32C0;0031 6708;0031 6708; # (㋀; ㋀; ㋀; 1月; 1月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY 32C1;32C1;32C1;0032 6708;0032 6708; # (㋁; ㋁; ㋁; 2月; 2月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY 32C2;32C2;32C2;0033 6708;0033 6708; # (㋂; ㋂; ㋂; 3月; 3月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH 32C3;32C3;32C3;0034 6708;0034 6708; # (㋃; ㋃; ㋃; 4月; 4月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL 32C4;32C4;32C4;0035 6708;0035 6708; # (㋄; ㋄; ㋄; 5月; 5月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY 32C5;32C5;32C5;0036 6708;0036 6708; # (㋅; ㋅; ㋅; 6月; 6月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE 32C6;32C6;32C6;0037 6708;0037 6708; # (㋆; ㋆; ㋆; 7月; 7月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY 32C7;32C7;32C7;0038 6708;0038 6708; # (㋇; ㋇; ㋇; 8月; 8月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST 32C8;32C8;32C8;0039 6708;0039 6708; # (㋈; ㋈; ㋈; 9月; 9月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER 32C9;32C9;32C9;0031 0030 6708;0031 0030 6708; # (㋉; ㋉; ㋉; 10月; 10月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER 32CA;32CA;32CA;0031 0031 6708;0031 0031 6708; # (㋊; ㋊; ㋊; 11月; 11月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER 32CB;32CB;32CB;0031 0032 6708;0031 0032 6708; # (㋋; ㋋; ㋋; 12月; 12月; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER 32CC;32CC;32CC;0048 0067;0048 0067; # (㋌; ㋌; ㋌; Hg; Hg; ) SQUARE HG 32CD;32CD;32CD;0065 0072 0067;0065 0072 0067; # (㋍; ㋍; ㋍; erg; erg; ) SQUARE ERG 32CE;32CE;32CE;0065 0056;0065 0056; # (㋎; ㋎; ㋎; eV; eV; ) SQUARE EV 32CF;32CF;32CF;004C 0054 0044;004C 0054 0044; # (㋏; ㋏; ㋏; LTD; LTD; ) LIMITED LIABILITY SIGN 32D0;32D0;32D0;30A2;30A2; # (㋐; ㋐; ㋐; ア; ア; ) CIRCLED KATAKANA A 32D1;32D1;32D1;30A4;30A4; # (㋑; ㋑; ㋑; イ; イ; ) CIRCLED KATAKANA I 32D2;32D2;32D2;30A6;30A6; # (㋒; ㋒; ㋒; ウ; ウ; ) CIRCLED KATAKANA U 32D3;32D3;32D3;30A8;30A8; # (㋓; ㋓; ㋓; エ; エ; ) CIRCLED KATAKANA E 32D4;32D4;32D4;30AA;30AA; # (㋔; ㋔; ㋔; オ; オ; ) CIRCLED KATAKANA O 32D5;32D5;32D5;30AB;30AB; # (㋕; ㋕; ㋕; カ; カ; ) CIRCLED KATAKANA KA 32D6;32D6;32D6;30AD;30AD; # (㋖; ㋖; ㋖; キ; キ; ) CIRCLED KATAKANA KI 32D7;32D7;32D7;30AF;30AF; # (㋗; ㋗; ㋗; ク; ク; ) CIRCLED KATAKANA KU 32D8;32D8;32D8;30B1;30B1; # (㋘; ㋘; ㋘; ケ; ケ; ) CIRCLED KATAKANA KE 32D9;32D9;32D9;30B3;30B3; # (㋙; ㋙; ㋙; コ; コ; ) CIRCLED KATAKANA KO 32DA;32DA;32DA;30B5;30B5; # (㋚; ㋚; ㋚; サ; サ; ) CIRCLED KATAKANA SA 32DB;32DB;32DB;30B7;30B7; # (㋛; ㋛; ㋛; シ; シ; ) CIRCLED KATAKANA SI 32DC;32DC;32DC;30B9;30B9; # (㋜; ㋜; ㋜; ス; ス; ) CIRCLED KATAKANA SU 32DD;32DD;32DD;30BB;30BB; # (㋝; ㋝; ㋝; セ; セ; ) CIRCLED KATAKANA SE 32DE;32DE;32DE;30BD;30BD; # (㋞; ㋞; ㋞; ソ; ソ; ) CIRCLED KATAKANA SO 32DF;32DF;32DF;30BF;30BF; # (㋟; ㋟; ㋟; タ; タ; ) CIRCLED KATAKANA TA 32E0;32E0;32E0;30C1;30C1; # (㋠; ㋠; ㋠; チ; チ; ) CIRCLED KATAKANA TI 32E1;32E1;32E1;30C4;30C4; # (㋡; ㋡; ㋡; ツ; ツ; ) CIRCLED KATAKANA TU 32E2;32E2;32E2;30C6;30C6; # (㋢; ㋢; ㋢; テ; テ; ) CIRCLED KATAKANA TE 32E3;32E3;32E3;30C8;30C8; # (㋣; ㋣; ㋣; ト; ト; ) CIRCLED KATAKANA TO 32E4;32E4;32E4;30CA;30CA; # (㋤; ㋤; ㋤; ナ; ナ; ) CIRCLED KATAKANA NA 32E5;32E5;32E5;30CB;30CB; # (㋥; ㋥; ㋥; ニ; ニ; ) CIRCLED KATAKANA NI 32E6;32E6;32E6;30CC;30CC; # (㋦; ㋦; ㋦; ヌ; ヌ; ) CIRCLED KATAKANA NU 32E7;32E7;32E7;30CD;30CD; # (㋧; ㋧; ㋧; ネ; ネ; ) CIRCLED KATAKANA NE 32E8;32E8;32E8;30CE;30CE; # (㋨; ㋨; ㋨; ノ; ノ; ) CIRCLED KATAKANA NO 32E9;32E9;32E9;30CF;30CF; # (㋩; ㋩; ㋩; ハ; ハ; ) CIRCLED KATAKANA HA 32EA;32EA;32EA;30D2;30D2; # (㋪; ㋪; ㋪; ヒ; ヒ; ) CIRCLED KATAKANA HI 32EB;32EB;32EB;30D5;30D5; # (㋫; ㋫; ㋫; フ; フ; ) CIRCLED KATAKANA HU 32EC;32EC;32EC;30D8;30D8; # (㋬; ㋬; ㋬; ヘ; ヘ; ) CIRCLED KATAKANA HE 32ED;32ED;32ED;30DB;30DB; # (㋭; ㋭; ㋭; ホ; ホ; ) CIRCLED KATAKANA HO 32EE;32EE;32EE;30DE;30DE; # (㋮; ㋮; ㋮; マ; マ; ) CIRCLED KATAKANA MA 32EF;32EF;32EF;30DF;30DF; # (㋯; ㋯; ㋯; ミ; ミ; ) CIRCLED KATAKANA MI 32F0;32F0;32F0;30E0;30E0; # (㋰; ㋰; ㋰; ム; ム; ) CIRCLED KATAKANA MU 32F1;32F1;32F1;30E1;30E1; # (㋱; ㋱; ㋱; メ; メ; ) CIRCLED KATAKANA ME 32F2;32F2;32F2;30E2;30E2; # (㋲; ㋲; ㋲; モ; モ; ) CIRCLED KATAKANA MO 32F3;32F3;32F3;30E4;30E4; # (㋳; ㋳; ㋳; ヤ; ヤ; ) CIRCLED KATAKANA YA 32F4;32F4;32F4;30E6;30E6; # (㋴; ㋴; ㋴; ユ; ユ; ) CIRCLED KATAKANA YU 32F5;32F5;32F5;30E8;30E8; # (㋵; ㋵; ㋵; ヨ; ヨ; ) CIRCLED KATAKANA YO 32F6;32F6;32F6;30E9;30E9; # (㋶; ㋶; ㋶; ラ; ラ; ) CIRCLED KATAKANA RA 32F7;32F7;32F7;30EA;30EA; # (㋷; ㋷; ㋷; リ; リ; ) CIRCLED KATAKANA RI 32F8;32F8;32F8;30EB;30EB; # (㋸; ㋸; ㋸; ル; ル; ) CIRCLED KATAKANA RU 32F9;32F9;32F9;30EC;30EC; # (㋹; ㋹; ㋹; レ; レ; ) CIRCLED KATAKANA RE 32FA;32FA;32FA;30ED;30ED; # (㋺; ㋺; ㋺; ロ; ロ; ) CIRCLED KATAKANA RO 32FB;32FB;32FB;30EF;30EF; # (㋻; ㋻; ㋻; ワ; ワ; ) CIRCLED KATAKANA WA 32FC;32FC;32FC;30F0;30F0; # (㋼; ㋼; ㋼; ヰ; ヰ; ) CIRCLED KATAKANA WI 32FD;32FD;32FD;30F1;30F1; # (㋽; ㋽; ㋽; ヱ; ヱ; ) CIRCLED KATAKANA WE 32FE;32FE;32FE;30F2;30F2; # (㋾; ㋾; ㋾; ヲ; ヲ; ) CIRCLED KATAKANA WO 3300;3300;3300;30A2 30D1 30FC 30C8;30A2 30CF 309A 30FC 30C8; # (㌀; ㌀; ㌀; アパート; アハ◌゚ート; ) SQUARE APAATO 3301;3301;3301;30A2 30EB 30D5 30A1;30A2 30EB 30D5 30A1; # (㌁; ㌁; ㌁; アルファ; アルファ; ) SQUARE ARUHUA 3302;3302;3302;30A2 30F3 30DA 30A2;30A2 30F3 30D8 309A 30A2; # (㌂; ㌂; ㌂; アンペア; アンヘ◌゚ア; ) SQUARE ANPEA 3303;3303;3303;30A2 30FC 30EB;30A2 30FC 30EB; # (㌃; ㌃; ㌃; アール; アール; ) SQUARE AARU 3304;3304;3304;30A4 30CB 30F3 30B0;30A4 30CB 30F3 30AF 3099; # (㌄; ㌄; ㌄; イニング; イニンク◌゙; ) SQUARE ININGU 3305;3305;3305;30A4 30F3 30C1;30A4 30F3 30C1; # (㌅; ㌅; ㌅; インチ; インチ; ) SQUARE INTI 3306;3306;3306;30A6 30A9 30F3;30A6 30A9 30F3; # (㌆; ㌆; ㌆; ウォン; ウォン; ) SQUARE UON 3307;3307;3307;30A8 30B9 30AF 30FC 30C9;30A8 30B9 30AF 30FC 30C8 3099; # (㌇; ㌇; ㌇; エスクード; エスクート◌゙; ) SQUARE ESUKUUDO 3308;3308;3308;30A8 30FC 30AB 30FC;30A8 30FC 30AB 30FC; # (㌈; ㌈; ㌈; エーカー; エーカー; ) SQUARE EEKAA 3309;3309;3309;30AA 30F3 30B9;30AA 30F3 30B9; # (㌉; ㌉; ㌉; オンス; オンス; ) SQUARE ONSU 330A;330A;330A;30AA 30FC 30E0;30AA 30FC 30E0; # (㌊; ㌊; ㌊; オーム; オーム; ) SQUARE OOMU 330B;330B;330B;30AB 30A4 30EA;30AB 30A4 30EA; # (㌋; ㌋; ㌋; カイリ; カイリ; ) SQUARE KAIRI 330C;330C;330C;30AB 30E9 30C3 30C8;30AB 30E9 30C3 30C8; # (㌌; ㌌; ㌌; カラット; カラット; ) SQUARE KARATTO 330D;330D;330D;30AB 30ED 30EA 30FC;30AB 30ED 30EA 30FC; # (㌍; ㌍; ㌍; カロリー; カロリー; ) SQUARE KARORII 330E;330E;330E;30AC 30ED 30F3;30AB 3099 30ED 30F3; # (㌎; ㌎; ㌎; ガロン; カ◌゙ロン; ) SQUARE GARON 330F;330F;330F;30AC 30F3 30DE;30AB 3099 30F3 30DE; # (㌏; ㌏; ㌏; ガンマ; カ◌゙ンマ; ) SQUARE GANMA 3310;3310;3310;30AE 30AC;30AD 3099 30AB 3099; # (㌐; ㌐; ㌐; ギガ; キ◌゙カ◌゙; ) SQUARE GIGA 3311;3311;3311;30AE 30CB 30FC;30AD 3099 30CB 30FC; # (㌑; ㌑; ㌑; ギニー; キ◌゙ニー; ) SQUARE GINII 3312;3312;3312;30AD 30E5 30EA 30FC;30AD 30E5 30EA 30FC; # (㌒; ㌒; ㌒; キュリー; キュリー; ) SQUARE KYURII 3313;3313;3313;30AE 30EB 30C0 30FC;30AD 3099 30EB 30BF 3099 30FC; # (㌓; ㌓; ㌓; ギルダー; キ◌゙ルタ◌゙ー; ) SQUARE GIRUDAA 3314;3314;3314;30AD 30ED;30AD 30ED; # (㌔; ㌔; ㌔; キロ; キロ; ) SQUARE KIRO 3315;3315;3315;30AD 30ED 30B0 30E9 30E0;30AD 30ED 30AF 3099 30E9 30E0; # (㌕; ㌕; ㌕; キログラム; キロク◌゙ラム; ) SQUARE KIROGURAMU 3316;3316;3316;30AD 30ED 30E1 30FC 30C8 30EB;30AD 30ED 30E1 30FC 30C8 30EB; # (㌖; ㌖; ㌖; キロメートル; キロメートル; ) SQUARE KIROMEETORU 3317;3317;3317;30AD 30ED 30EF 30C3 30C8;30AD 30ED 30EF 30C3 30C8; # (㌗; ㌗; ㌗; キロワット; キロワット; ) SQUARE KIROWATTO 3318;3318;3318;30B0 30E9 30E0;30AF 3099 30E9 30E0; # (㌘; ㌘; ㌘; グラム; ク◌゙ラム; ) SQUARE GURAMU 3319;3319;3319;30B0 30E9 30E0 30C8 30F3;30AF 3099 30E9 30E0 30C8 30F3; # (㌙; ㌙; ㌙; グラムトン; ク◌゙ラムトン; ) SQUARE GURAMUTON 331A;331A;331A;30AF 30EB 30BC 30A4 30ED;30AF 30EB 30BB 3099 30A4 30ED; # (㌚; ㌚; ㌚; クルゼイロ; クルセ◌゙イロ; ) SQUARE KURUZEIRO 331B;331B;331B;30AF 30ED 30FC 30CD;30AF 30ED 30FC 30CD; # (㌛; ㌛; ㌛; クローネ; クローネ; ) SQUARE KUROONE 331C;331C;331C;30B1 30FC 30B9;30B1 30FC 30B9; # (㌜; ㌜; ㌜; ケース; ケース; ) SQUARE KEESU 331D;331D;331D;30B3 30EB 30CA;30B3 30EB 30CA; # (㌝; ㌝; ㌝; コルナ; コルナ; ) SQUARE KORUNA 331E;331E;331E;30B3 30FC 30DD;30B3 30FC 30DB 309A; # (㌞; ㌞; ㌞; コーポ; コーホ◌゚; ) SQUARE KOOPO 331F;331F;331F;30B5 30A4 30AF 30EB;30B5 30A4 30AF 30EB; # (㌟; ㌟; ㌟; サイクル; サイクル; ) SQUARE SAIKURU 3320;3320;3320;30B5 30F3 30C1 30FC 30E0;30B5 30F3 30C1 30FC 30E0; # (㌠; ㌠; ㌠; サンチーム; サンチーム; ) SQUARE SANTIIMU 3321;3321;3321;30B7 30EA 30F3 30B0;30B7 30EA 30F3 30AF 3099; # (㌡; ㌡; ㌡; シリング; シリンク◌゙; ) SQUARE SIRINGU 3322;3322;3322;30BB 30F3 30C1;30BB 30F3 30C1; # (㌢; ㌢; ㌢; センチ; センチ; ) SQUARE SENTI 3323;3323;3323;30BB 30F3 30C8;30BB 30F3 30C8; # (㌣; ㌣; ㌣; セント; セント; ) SQUARE SENTO 3324;3324;3324;30C0 30FC 30B9;30BF 3099 30FC 30B9; # (㌤; ㌤; ㌤; ダース; タ◌゙ース; ) SQUARE DAASU 3325;3325;3325;30C7 30B7;30C6 3099 30B7; # (㌥; ㌥; ㌥; デシ; テ◌゙シ; ) SQUARE DESI 3326;3326;3326;30C9 30EB;30C8 3099 30EB; # (㌦; ㌦; ㌦; ドル; ト◌゙ル; ) SQUARE DORU 3327;3327;3327;30C8 30F3;30C8 30F3; # (㌧; ㌧; ㌧; トン; トン; ) SQUARE TON 3328;3328;3328;30CA 30CE;30CA 30CE; # (㌨; ㌨; ㌨; ナノ; ナノ; ) SQUARE NANO 3329;3329;3329;30CE 30C3 30C8;30CE 30C3 30C8; # (㌩; ㌩; ㌩; ノット; ノット; ) SQUARE NOTTO 332A;332A;332A;30CF 30A4 30C4;30CF 30A4 30C4; # (㌪; ㌪; ㌪; ハイツ; ハイツ; ) SQUARE HAITU 332B;332B;332B;30D1 30FC 30BB 30F3 30C8;30CF 309A 30FC 30BB 30F3 30C8; # (㌫; ㌫; ㌫; パーセント; ハ◌゚ーセント; ) SQUARE PAASENTO 332C;332C;332C;30D1 30FC 30C4;30CF 309A 30FC 30C4; # (㌬; ㌬; ㌬; パーツ; ハ◌゚ーツ; ) SQUARE PAATU 332D;332D;332D;30D0 30FC 30EC 30EB;30CF 3099 30FC 30EC 30EB; # (㌭; ㌭; ㌭; バーレル; ハ◌゙ーレル; ) SQUARE BAARERU 332E;332E;332E;30D4 30A2 30B9 30C8 30EB;30D2 309A 30A2 30B9 30C8 30EB; # (㌮; ㌮; ㌮; ピアストル; ヒ◌゚アストル; ) SQUARE PIASUTORU 332F;332F;332F;30D4 30AF 30EB;30D2 309A 30AF 30EB; # (㌯; ㌯; ㌯; ピクル; ヒ◌゚クル; ) SQUARE PIKURU 3330;3330;3330;30D4 30B3;30D2 309A 30B3; # (㌰; ㌰; ㌰; ピコ; ヒ◌゚コ; ) SQUARE PIKO 3331;3331;3331;30D3 30EB;30D2 3099 30EB; # (㌱; ㌱; ㌱; ビル; ヒ◌゙ル; ) SQUARE BIRU 3332;3332;3332;30D5 30A1 30E9 30C3 30C9;30D5 30A1 30E9 30C3 30C8 3099; # (㌲; ㌲; ㌲; ファラッド; ファラット◌゙; ) SQUARE HUARADDO 3333;3333;3333;30D5 30A3 30FC 30C8;30D5 30A3 30FC 30C8; # (㌳; ㌳; ㌳; フィート; フィート; ) SQUARE HUIITO 3334;3334;3334;30D6 30C3 30B7 30A7 30EB;30D5 3099 30C3 30B7 30A7 30EB; # (㌴; ㌴; ㌴; ブッシェル; フ◌゙ッシェル; ) SQUARE BUSSYERU 3335;3335;3335;30D5 30E9 30F3;30D5 30E9 30F3; # (㌵; ㌵; ㌵; フラン; フラン; ) SQUARE HURAN 3336;3336;3336;30D8 30AF 30BF 30FC 30EB;30D8 30AF 30BF 30FC 30EB; # (㌶; ㌶; ㌶; ヘクタール; ヘクタール; ) SQUARE HEKUTAARU 3337;3337;3337;30DA 30BD;30D8 309A 30BD; # (㌷; ㌷; ㌷; ペソ; ヘ◌゚ソ; ) SQUARE PESO 3338;3338;3338;30DA 30CB 30D2;30D8 309A 30CB 30D2; # (㌸; ㌸; ㌸; ペニヒ; ヘ◌゚ニヒ; ) SQUARE PENIHI 3339;3339;3339;30D8 30EB 30C4;30D8 30EB 30C4; # (㌹; ㌹; ㌹; ヘルツ; ヘルツ; ) SQUARE HERUTU 333A;333A;333A;30DA 30F3 30B9;30D8 309A 30F3 30B9; # (㌺; ㌺; ㌺; ペンス; ヘ◌゚ンス; ) SQUARE PENSU 333B;333B;333B;30DA 30FC 30B8;30D8 309A 30FC 30B7 3099; # (㌻; ㌻; ㌻; ページ; ヘ◌゚ーシ◌゙; ) SQUARE PEEZI 333C;333C;333C;30D9 30FC 30BF;30D8 3099 30FC 30BF; # (㌼; ㌼; ㌼; ベータ; ヘ◌゙ータ; ) SQUARE BEETA 333D;333D;333D;30DD 30A4 30F3 30C8;30DB 309A 30A4 30F3 30C8; # (㌽; ㌽; ㌽; ポイント; ホ◌゚イント; ) SQUARE POINTO 333E;333E;333E;30DC 30EB 30C8;30DB 3099 30EB 30C8; # (㌾; ㌾; ㌾; ボルト; ホ◌゙ルト; ) SQUARE BORUTO 333F;333F;333F;30DB 30F3;30DB 30F3; # (㌿; ㌿; ㌿; ホン; ホン; ) SQUARE HON 3340;3340;3340;30DD 30F3 30C9;30DB 309A 30F3 30C8 3099; # (㍀; ㍀; ㍀; ポンド; ホ◌゚ント◌゙; ) SQUARE PONDO 3341;3341;3341;30DB 30FC 30EB;30DB 30FC 30EB; # (㍁; ㍁; ㍁; ホール; ホール; ) SQUARE HOORU 3342;3342;3342;30DB 30FC 30F3;30DB 30FC 30F3; # (㍂; ㍂; ㍂; ホーン; ホーン; ) SQUARE HOON 3343;3343;3343;30DE 30A4 30AF 30ED;30DE 30A4 30AF 30ED; # (㍃; ㍃; ㍃; マイクロ; マイクロ; ) SQUARE MAIKURO 3344;3344;3344;30DE 30A4 30EB;30DE 30A4 30EB; # (㍄; ㍄; ㍄; マイル; マイル; ) SQUARE MAIRU 3345;3345;3345;30DE 30C3 30CF;30DE 30C3 30CF; # (㍅; ㍅; ㍅; マッハ; マッハ; ) SQUARE MAHHA 3346;3346;3346;30DE 30EB 30AF;30DE 30EB 30AF; # (㍆; ㍆; ㍆; マルク; マルク; ) SQUARE MARUKU 3347;3347;3347;30DE 30F3 30B7 30E7 30F3;30DE 30F3 30B7 30E7 30F3; # (㍇; ㍇; ㍇; マンション; マンション; ) SQUARE MANSYON 3348;3348;3348;30DF 30AF 30ED 30F3;30DF 30AF 30ED 30F3; # (㍈; ㍈; ㍈; ミクロン; ミクロン; ) SQUARE MIKURON 3349;3349;3349;30DF 30EA;30DF 30EA; # (㍉; ㍉; ㍉; ミリ; ミリ; ) SQUARE MIRI 334A;334A;334A;30DF 30EA 30D0 30FC 30EB;30DF 30EA 30CF 3099 30FC 30EB; # (㍊; ㍊; ㍊; ミリバール; ミリハ◌゙ール; ) SQUARE MIRIBAARU 334B;334B;334B;30E1 30AC;30E1 30AB 3099; # (㍋; ㍋; ㍋; メガ; メカ◌゙; ) SQUARE MEGA 334C;334C;334C;30E1 30AC 30C8 30F3;30E1 30AB 3099 30C8 30F3; # (㍌; ㍌; ㍌; メガトン; メカ◌゙トン; ) SQUARE MEGATON 334D;334D;334D;30E1 30FC 30C8 30EB;30E1 30FC 30C8 30EB; # (㍍; ㍍; ㍍; メートル; メートル; ) SQUARE MEETORU 334E;334E;334E;30E4 30FC 30C9;30E4 30FC 30C8 3099; # (㍎; ㍎; ㍎; ヤード; ヤート◌゙; ) SQUARE YAADO 334F;334F;334F;30E4 30FC 30EB;30E4 30FC 30EB; # (㍏; ㍏; ㍏; ヤール; ヤール; ) SQUARE YAARU 3350;3350;3350;30E6 30A2 30F3;30E6 30A2 30F3; # (㍐; ㍐; ㍐; ユアン; ユアン; ) SQUARE YUAN 3351;3351;3351;30EA 30C3 30C8 30EB;30EA 30C3 30C8 30EB; # (㍑; ㍑; ㍑; リットル; リットル; ) SQUARE RITTORU 3352;3352;3352;30EA 30E9;30EA 30E9; # (㍒; ㍒; ㍒; リラ; リラ; ) SQUARE RIRA 3353;3353;3353;30EB 30D4 30FC;30EB 30D2 309A 30FC; # (㍓; ㍓; ㍓; ルピー; ルヒ◌゚ー; ) SQUARE RUPII 3354;3354;3354;30EB 30FC 30D6 30EB;30EB 30FC 30D5 3099 30EB; # (㍔; ㍔; ㍔; ルーブル; ルーフ◌゙ル; ) SQUARE RUUBURU 3355;3355;3355;30EC 30E0;30EC 30E0; # (㍕; ㍕; ㍕; レム; レム; ) SQUARE REMU 3356;3356;3356;30EC 30F3 30C8 30B2 30F3;30EC 30F3 30C8 30B1 3099 30F3; # (㍖; ㍖; ㍖; レントゲン; レントケ◌゙ン; ) SQUARE RENTOGEN 3357;3357;3357;30EF 30C3 30C8;30EF 30C3 30C8; # (㍗; ㍗; ㍗; ワット; ワット; ) SQUARE WATTO 3358;3358;3358;0030 70B9;0030 70B9; # (㍘; ㍘; ㍘; 0点; 0点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO 3359;3359;3359;0031 70B9;0031 70B9; # (㍙; ㍙; ㍙; 1点; 1点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE 335A;335A;335A;0032 70B9;0032 70B9; # (㍚; ㍚; ㍚; 2点; 2点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO 335B;335B;335B;0033 70B9;0033 70B9; # (㍛; ㍛; ㍛; 3点; 3点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE 335C;335C;335C;0034 70B9;0034 70B9; # (㍜; ㍜; ㍜; 4点; 4点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR 335D;335D;335D;0035 70B9;0035 70B9; # (㍝; ㍝; ㍝; 5点; 5点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE 335E;335E;335E;0036 70B9;0036 70B9; # (㍞; ㍞; ㍞; 6点; 6点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX 335F;335F;335F;0037 70B9;0037 70B9; # (㍟; ㍟; ㍟; 7点; 7点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN 3360;3360;3360;0038 70B9;0038 70B9; # (㍠; ㍠; ㍠; 8点; 8点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT 3361;3361;3361;0039 70B9;0039 70B9; # (㍡; ㍡; ㍡; 9点; 9点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE 3362;3362;3362;0031 0030 70B9;0031 0030 70B9; # (㍢; ㍢; ㍢; 10点; 10点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN 3363;3363;3363;0031 0031 70B9;0031 0031 70B9; # (㍣; ㍣; ㍣; 11点; 11点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN 3364;3364;3364;0031 0032 70B9;0031 0032 70B9; # (㍤; ㍤; ㍤; 12点; 12点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE 3365;3365;3365;0031 0033 70B9;0031 0033 70B9; # (㍥; ㍥; ㍥; 13点; 13点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN 3366;3366;3366;0031 0034 70B9;0031 0034 70B9; # (㍦; ㍦; ㍦; 14点; 14点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN 3367;3367;3367;0031 0035 70B9;0031 0035 70B9; # (㍧; ㍧; ㍧; 15点; 15点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN 3368;3368;3368;0031 0036 70B9;0031 0036 70B9; # (㍨; ㍨; ㍨; 16点; 16点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN 3369;3369;3369;0031 0037 70B9;0031 0037 70B9; # (㍩; ㍩; ㍩; 17点; 17点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN 336A;336A;336A;0031 0038 70B9;0031 0038 70B9; # (㍪; ㍪; ㍪; 18点; 18点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN 336B;336B;336B;0031 0039 70B9;0031 0039 70B9; # (㍫; ㍫; ㍫; 19点; 19点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN 336C;336C;336C;0032 0030 70B9;0032 0030 70B9; # (㍬; ㍬; ㍬; 20点; 20点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY 336D;336D;336D;0032 0031 70B9;0032 0031 70B9; # (㍭; ㍭; ㍭; 21点; 21点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE 336E;336E;336E;0032 0032 70B9;0032 0032 70B9; # (㍮; ㍮; ㍮; 22点; 22点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO 336F;336F;336F;0032 0033 70B9;0032 0033 70B9; # (㍯; ㍯; ㍯; 23点; 23点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE 3370;3370;3370;0032 0034 70B9;0032 0034 70B9; # (㍰; ㍰; ㍰; 24点; 24点; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR 3371;3371;3371;0068 0050 0061;0068 0050 0061; # (㍱; ㍱; ㍱; hPa; hPa; ) SQUARE HPA 3372;3372;3372;0064 0061;0064 0061; # (㍲; ㍲; ㍲; da; da; ) SQUARE DA 3373;3373;3373;0041 0055;0041 0055; # (㍳; ㍳; ㍳; AU; AU; ) SQUARE AU 3374;3374;3374;0062 0061 0072;0062 0061 0072; # (㍴; ㍴; ㍴; bar; bar; ) SQUARE BAR 3375;3375;3375;006F 0056;006F 0056; # (㍵; ㍵; ㍵; oV; oV; ) SQUARE OV 3376;3376;3376;0070 0063;0070 0063; # (㍶; ㍶; ㍶; pc; pc; ) SQUARE PC 3377;3377;3377;0064 006D;0064 006D; # (㍷; ㍷; ㍷; dm; dm; ) SQUARE DM 3378;3378;3378;0064 006D 0032;0064 006D 0032; # (㍸; ㍸; ㍸; dm2; dm2; ) SQUARE DM SQUARED 3379;3379;3379;0064 006D 0033;0064 006D 0033; # (㍹; ㍹; ㍹; dm3; dm3; ) SQUARE DM CUBED 337A;337A;337A;0049 0055;0049 0055; # (㍺; ㍺; ㍺; IU; IU; ) SQUARE IU 337B;337B;337B;5E73 6210;5E73 6210; # (㍻; ㍻; ㍻; 平成; 平成; ) SQUARE ERA NAME HEISEI 337C;337C;337C;662D 548C;662D 548C; # (㍼; ㍼; ㍼; 昭和; 昭和; ) SQUARE ERA NAME SYOUWA 337D;337D;337D;5927 6B63;5927 6B63; # (㍽; ㍽; ㍽; 大正; 大正; ) SQUARE ERA NAME TAISYOU 337E;337E;337E;660E 6CBB;660E 6CBB; # (㍾; ㍾; ㍾; 明治; 明治; ) SQUARE ERA NAME MEIZI 337F;337F;337F;682A 5F0F 4F1A 793E;682A 5F0F 4F1A 793E; # (㍿; ㍿; ㍿; 株式会社; 株式会社; ) SQUARE CORPORATION 3380;3380;3380;0070 0041;0070 0041; # (㎀; ㎀; ㎀; pA; pA; ) SQUARE PA AMPS 3381;3381;3381;006E 0041;006E 0041; # (㎁; ㎁; ㎁; nA; nA; ) SQUARE NA 3382;3382;3382;03BC 0041;03BC 0041; # (㎂; ㎂; ㎂; μA; μA; ) SQUARE MU A 3383;3383;3383;006D 0041;006D 0041; # (㎃; ㎃; ㎃; mA; mA; ) SQUARE MA 3384;3384;3384;006B 0041;006B 0041; # (㎄; ㎄; ㎄; kA; kA; ) SQUARE KA 3385;3385;3385;004B 0042;004B 0042; # (㎅; ㎅; ㎅; KB; KB; ) SQUARE KB 3386;3386;3386;004D 0042;004D 0042; # (㎆; ㎆; ㎆; MB; MB; ) SQUARE MB 3387;3387;3387;0047 0042;0047 0042; # (㎇; ㎇; ㎇; GB; GB; ) SQUARE GB 3388;3388;3388;0063 0061 006C;0063 0061 006C; # (㎈; ㎈; ㎈; cal; cal; ) SQUARE CAL 3389;3389;3389;006B 0063 0061 006C;006B 0063 0061 006C; # (㎉; ㎉; ㎉; kcal; kcal; ) SQUARE KCAL 338A;338A;338A;0070 0046;0070 0046; # (㎊; ㎊; ㎊; pF; pF; ) SQUARE PF 338B;338B;338B;006E 0046;006E 0046; # (㎋; ㎋; ㎋; nF; nF; ) SQUARE NF 338C;338C;338C;03BC 0046;03BC 0046; # (㎌; ㎌; ㎌; μF; μF; ) SQUARE MU F 338D;338D;338D;03BC 0067;03BC 0067; # (㎍; ㎍; ㎍; μg; μg; ) SQUARE MU G 338E;338E;338E;006D 0067;006D 0067; # (㎎; ㎎; ㎎; mg; mg; ) SQUARE MG 338F;338F;338F;006B 0067;006B 0067; # (㎏; ㎏; ㎏; kg; kg; ) SQUARE KG 3390;3390;3390;0048 007A;0048 007A; # (㎐; ㎐; ㎐; Hz; Hz; ) SQUARE HZ 3391;3391;3391;006B 0048 007A;006B 0048 007A; # (㎑; ㎑; ㎑; kHz; kHz; ) SQUARE KHZ 3392;3392;3392;004D 0048 007A;004D 0048 007A; # (㎒; ㎒; ㎒; MHz; MHz; ) SQUARE MHZ 3393;3393;3393;0047 0048 007A;0047 0048 007A; # (㎓; ㎓; ㎓; GHz; GHz; ) SQUARE GHZ 3394;3394;3394;0054 0048 007A;0054 0048 007A; # (㎔; ㎔; ㎔; THz; THz; ) SQUARE THZ 3395;3395;3395;03BC 006C;03BC 006C; # (㎕; ㎕; ㎕; μl; μl; ) SQUARE MU L 3396;3396;3396;006D 006C;006D 006C; # (㎖; ㎖; ㎖; ml; ml; ) SQUARE ML 3397;3397;3397;0064 006C;0064 006C; # (㎗; ㎗; ㎗; dl; dl; ) SQUARE DL 3398;3398;3398;006B 006C;006B 006C; # (㎘; ㎘; ㎘; kl; kl; ) SQUARE KL 3399;3399;3399;0066 006D;0066 006D; # (㎙; ㎙; ㎙; fm; fm; ) SQUARE FM 339A;339A;339A;006E 006D;006E 006D; # (㎚; ㎚; ㎚; nm; nm; ) SQUARE NM 339B;339B;339B;03BC 006D;03BC 006D; # (㎛; ㎛; ㎛; μm; μm; ) SQUARE MU M 339C;339C;339C;006D 006D;006D 006D; # (㎜; ㎜; ㎜; mm; mm; ) SQUARE MM 339D;339D;339D;0063 006D;0063 006D; # (㎝; ㎝; ㎝; cm; cm; ) SQUARE CM 339E;339E;339E;006B 006D;006B 006D; # (㎞; ㎞; ㎞; km; km; ) SQUARE KM 339F;339F;339F;006D 006D 0032;006D 006D 0032; # (㎟; ㎟; ㎟; mm2; mm2; ) SQUARE MM SQUARED 33A0;33A0;33A0;0063 006D 0032;0063 006D 0032; # (㎠; ㎠; ㎠; cm2; cm2; ) SQUARE CM SQUARED 33A1;33A1;33A1;006D 0032;006D 0032; # (㎡; ㎡; ㎡; m2; m2; ) SQUARE M SQUARED 33A2;33A2;33A2;006B 006D 0032;006B 006D 0032; # (㎢; ㎢; ㎢; km2; km2; ) SQUARE KM SQUARED 33A3;33A3;33A3;006D 006D 0033;006D 006D 0033; # (㎣; ㎣; ㎣; mm3; mm3; ) SQUARE MM CUBED 33A4;33A4;33A4;0063 006D 0033;0063 006D 0033; # (㎤; ㎤; ㎤; cm3; cm3; ) SQUARE CM CUBED 33A5;33A5;33A5;006D 0033;006D 0033; # (㎥; ㎥; ㎥; m3; m3; ) SQUARE M CUBED 33A6;33A6;33A6;006B 006D 0033;006B 006D 0033; # (㎦; ㎦; ㎦; km3; km3; ) SQUARE KM CUBED 33A7;33A7;33A7;006D 2215 0073;006D 2215 0073; # (㎧; ㎧; ㎧; m∕s; m∕s; ) SQUARE M OVER S 33A8;33A8;33A8;006D 2215 0073 0032;006D 2215 0073 0032; # (㎨; ㎨; ㎨; m∕s2; m∕s2; ) SQUARE M OVER S SQUARED 33A9;33A9;33A9;0050 0061;0050 0061; # (㎩; ㎩; ㎩; Pa; Pa; ) SQUARE PA 33AA;33AA;33AA;006B 0050 0061;006B 0050 0061; # (㎪; ㎪; ㎪; kPa; kPa; ) SQUARE KPA 33AB;33AB;33AB;004D 0050 0061;004D 0050 0061; # (㎫; ㎫; ㎫; MPa; MPa; ) SQUARE MPA 33AC;33AC;33AC;0047 0050 0061;0047 0050 0061; # (㎬; ㎬; ㎬; GPa; GPa; ) SQUARE GPA 33AD;33AD;33AD;0072 0061 0064;0072 0061 0064; # (㎭; ㎭; ㎭; rad; rad; ) SQUARE RAD 33AE;33AE;33AE;0072 0061 0064 2215 0073;0072 0061 0064 2215 0073; # (㎮; ㎮; ㎮; rad∕s; rad∕s; ) SQUARE RAD OVER S 33AF;33AF;33AF;0072 0061 0064 2215 0073 0032;0072 0061 0064 2215 0073 0032; # (㎯; ㎯; ㎯; rad∕s2; rad∕s2; ) SQUARE RAD OVER S SQUARED 33B0;33B0;33B0;0070 0073;0070 0073; # (㎰; ㎰; ㎰; ps; ps; ) SQUARE PS 33B1;33B1;33B1;006E 0073;006E 0073; # (㎱; ㎱; ㎱; ns; ns; ) SQUARE NS 33B2;33B2;33B2;03BC 0073;03BC 0073; # (㎲; ㎲; ㎲; μs; μs; ) SQUARE MU S 33B3;33B3;33B3;006D 0073;006D 0073; # (㎳; ㎳; ㎳; ms; ms; ) SQUARE MS 33B4;33B4;33B4;0070 0056;0070 0056; # (㎴; ㎴; ㎴; pV; pV; ) SQUARE PV 33B5;33B5;33B5;006E 0056;006E 0056; # (㎵; ㎵; ㎵; nV; nV; ) SQUARE NV 33B6;33B6;33B6;03BC 0056;03BC 0056; # (㎶; ㎶; ㎶; μV; μV; ) SQUARE MU V 33B7;33B7;33B7;006D 0056;006D 0056; # (㎷; ㎷; ㎷; mV; mV; ) SQUARE MV 33B8;33B8;33B8;006B 0056;006B 0056; # (㎸; ㎸; ㎸; kV; kV; ) SQUARE KV 33B9;33B9;33B9;004D 0056;004D 0056; # (㎹; ㎹; ㎹; MV; MV; ) SQUARE MV MEGA 33BA;33BA;33BA;0070 0057;0070 0057; # (㎺; ㎺; ㎺; pW; pW; ) SQUARE PW 33BB;33BB;33BB;006E 0057;006E 0057; # (㎻; ㎻; ㎻; nW; nW; ) SQUARE NW 33BC;33BC;33BC;03BC 0057;03BC 0057; # (㎼; ㎼; ㎼; μW; μW; ) SQUARE MU W 33BD;33BD;33BD;006D 0057;006D 0057; # (㎽; ㎽; ㎽; mW; mW; ) SQUARE MW 33BE;33BE;33BE;006B 0057;006B 0057; # (㎾; ㎾; ㎾; kW; kW; ) SQUARE KW 33BF;33BF;33BF;004D 0057;004D 0057; # (㎿; ㎿; ㎿; MW; MW; ) SQUARE MW MEGA 33C0;33C0;33C0;006B 03A9;006B 03A9; # (㏀; ㏀; ㏀; kΩ; kΩ; ) SQUARE K OHM 33C1;33C1;33C1;004D 03A9;004D 03A9; # (㏁; ㏁; ㏁; MΩ; MΩ; ) SQUARE M OHM 33C2;33C2;33C2;0061 002E 006D 002E;0061 002E 006D 002E; # (㏂; ㏂; ㏂; a.m.; a.m.; ) SQUARE AM 33C3;33C3;33C3;0042 0071;0042 0071; # (㏃; ㏃; ㏃; Bq; Bq; ) SQUARE BQ 33C4;33C4;33C4;0063 0063;0063 0063; # (㏄; ㏄; ㏄; cc; cc; ) SQUARE CC 33C5;33C5;33C5;0063 0064;0063 0064; # (㏅; ㏅; ㏅; cd; cd; ) SQUARE CD 33C6;33C6;33C6;0043 2215 006B 0067;0043 2215 006B 0067; # (㏆; ㏆; ㏆; C∕kg; C∕kg; ) SQUARE C OVER KG 33C7;33C7;33C7;0043 006F 002E;0043 006F 002E; # (㏇; ㏇; ㏇; Co.; Co.; ) SQUARE CO 33C8;33C8;33C8;0064 0042;0064 0042; # (㏈; ㏈; ㏈; dB; dB; ) SQUARE DB 33C9;33C9;33C9;0047 0079;0047 0079; # (㏉; ㏉; ㏉; Gy; Gy; ) SQUARE GY 33CA;33CA;33CA;0068 0061;0068 0061; # (㏊; ㏊; ㏊; ha; ha; ) SQUARE HA 33CB;33CB;33CB;0048 0050;0048 0050; # (㏋; ㏋; ㏋; HP; HP; ) SQUARE HP 33CC;33CC;33CC;0069 006E;0069 006E; # (㏌; ㏌; ㏌; in; in; ) SQUARE IN 33CD;33CD;33CD;004B 004B;004B 004B; # (㏍; ㏍; ㏍; KK; KK; ) SQUARE KK 33CE;33CE;33CE;004B 004D;004B 004D; # (㏎; ㏎; ㏎; KM; KM; ) SQUARE KM CAPITAL 33CF;33CF;33CF;006B 0074;006B 0074; # (㏏; ㏏; ㏏; kt; kt; ) SQUARE KT 33D0;33D0;33D0;006C 006D;006C 006D; # (㏐; ㏐; ㏐; lm; lm; ) SQUARE LM 33D1;33D1;33D1;006C 006E;006C 006E; # (㏑; ㏑; ㏑; ln; ln; ) SQUARE LN 33D2;33D2;33D2;006C 006F 0067;006C 006F 0067; # (㏒; ㏒; ㏒; log; log; ) SQUARE LOG 33D3;33D3;33D3;006C 0078;006C 0078; # (㏓; ㏓; ㏓; lx; lx; ) SQUARE LX 33D4;33D4;33D4;006D 0062;006D 0062; # (㏔; ㏔; ㏔; mb; mb; ) SQUARE MB SMALL 33D5;33D5;33D5;006D 0069 006C;006D 0069 006C; # (㏕; ㏕; ㏕; mil; mil; ) SQUARE MIL 33D6;33D6;33D6;006D 006F 006C;006D 006F 006C; # (㏖; ㏖; ㏖; mol; mol; ) SQUARE MOL 33D7;33D7;33D7;0050 0048;0050 0048; # (㏗; ㏗; ㏗; PH; PH; ) SQUARE PH 33D8;33D8;33D8;0070 002E 006D 002E;0070 002E 006D 002E; # (㏘; ㏘; ㏘; p.m.; p.m.; ) SQUARE PM 33D9;33D9;33D9;0050 0050 004D;0050 0050 004D; # (㏙; ㏙; ㏙; PPM; PPM; ) SQUARE PPM 33DA;33DA;33DA;0050 0052;0050 0052; # (㏚; ㏚; ㏚; PR; PR; ) SQUARE PR 33DB;33DB;33DB;0073 0072;0073 0072; # (㏛; ㏛; ㏛; sr; sr; ) SQUARE SR 33DC;33DC;33DC;0053 0076;0053 0076; # (㏜; ㏜; ㏜; Sv; Sv; ) SQUARE SV 33DD;33DD;33DD;0057 0062;0057 0062; # (㏝; ㏝; ㏝; Wb; Wb; ) SQUARE WB 33DE;33DE;33DE;0056 2215 006D;0056 2215 006D; # (㏞; ㏞; ㏞; V∕m; V∕m; ) SQUARE V OVER M 33DF;33DF;33DF;0041 2215 006D;0041 2215 006D; # (㏟; ㏟; ㏟; A∕m; A∕m; ) SQUARE A OVER M 33E0;33E0;33E0;0031 65E5;0031 65E5; # (㏠; ㏠; ㏠; 1日; 1日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE 33E1;33E1;33E1;0032 65E5;0032 65E5; # (㏡; ㏡; ㏡; 2日; 2日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO 33E2;33E2;33E2;0033 65E5;0033 65E5; # (㏢; ㏢; ㏢; 3日; 3日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE 33E3;33E3;33E3;0034 65E5;0034 65E5; # (㏣; ㏣; ㏣; 4日; 4日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR 33E4;33E4;33E4;0035 65E5;0035 65E5; # (㏤; ㏤; ㏤; 5日; 5日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE 33E5;33E5;33E5;0036 65E5;0036 65E5; # (㏥; ㏥; ㏥; 6日; 6日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX 33E6;33E6;33E6;0037 65E5;0037 65E5; # (㏦; ㏦; ㏦; 7日; 7日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN 33E7;33E7;33E7;0038 65E5;0038 65E5; # (㏧; ㏧; ㏧; 8日; 8日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT 33E8;33E8;33E8;0039 65E5;0039 65E5; # (㏨; ㏨; ㏨; 9日; 9日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE 33E9;33E9;33E9;0031 0030 65E5;0031 0030 65E5; # (㏩; ㏩; ㏩; 10日; 10日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN 33EA;33EA;33EA;0031 0031 65E5;0031 0031 65E5; # (㏪; ㏪; ㏪; 11日; 11日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN 33EB;33EB;33EB;0031 0032 65E5;0031 0032 65E5; # (㏫; ㏫; ㏫; 12日; 12日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE 33EC;33EC;33EC;0031 0033 65E5;0031 0033 65E5; # (㏬; ㏬; ㏬; 13日; 13日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN 33ED;33ED;33ED;0031 0034 65E5;0031 0034 65E5; # (㏭; ㏭; ㏭; 14日; 14日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN 33EE;33EE;33EE;0031 0035 65E5;0031 0035 65E5; # (㏮; ㏮; ㏮; 15日; 15日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN 33EF;33EF;33EF;0031 0036 65E5;0031 0036 65E5; # (㏯; ㏯; ㏯; 16日; 16日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN 33F0;33F0;33F0;0031 0037 65E5;0031 0037 65E5; # (㏰; ㏰; ㏰; 17日; 17日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN 33F1;33F1;33F1;0031 0038 65E5;0031 0038 65E5; # (㏱; ㏱; ㏱; 18日; 18日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN 33F2;33F2;33F2;0031 0039 65E5;0031 0039 65E5; # (㏲; ㏲; ㏲; 19日; 19日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN 33F3;33F3;33F3;0032 0030 65E5;0032 0030 65E5; # (㏳; ㏳; ㏳; 20日; 20日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY 33F4;33F4;33F4;0032 0031 65E5;0032 0031 65E5; # (㏴; ㏴; ㏴; 21日; 21日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE 33F5;33F5;33F5;0032 0032 65E5;0032 0032 65E5; # (㏵; ㏵; ㏵; 22日; 22日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO 33F6;33F6;33F6;0032 0033 65E5;0032 0033 65E5; # (㏶; ㏶; ㏶; 23日; 23日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE 33F7;33F7;33F7;0032 0034 65E5;0032 0034 65E5; # (㏷; ㏷; ㏷; 24日; 24日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR 33F8;33F8;33F8;0032 0035 65E5;0032 0035 65E5; # (㏸; ㏸; ㏸; 25日; 25日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE 33F9;33F9;33F9;0032 0036 65E5;0032 0036 65E5; # (㏹; ㏹; ㏹; 26日; 26日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX 33FA;33FA;33FA;0032 0037 65E5;0032 0037 65E5; # (㏺; ㏺; ㏺; 27日; 27日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN 33FB;33FB;33FB;0032 0038 65E5;0032 0038 65E5; # (㏻; ㏻; ㏻; 28日; 28日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT 33FC;33FC;33FC;0032 0039 65E5;0032 0039 65E5; # (㏼; ㏼; ㏼; 29日; 29日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE 33FD;33FD;33FD;0033 0030 65E5;0033 0030 65E5; # (㏽; ㏽; ㏽; 30日; 30日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY 33FE;33FE;33FE;0033 0031 65E5;0033 0031 65E5; # (㏾; ㏾; ㏾; 31日; 31日; ) IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 33FF;33FF;33FF;0067 0061 006C;0067 0061 006C; # (㏿; ㏿; ㏿; gal; gal; ) SQUARE GAL A69C;A69C;A69C;044A;044A; # (ꚜ; ꚜ; ꚜ; ъ; ъ; ) MODIFIER LETTER CYRILLIC HARD SIGN A69D;A69D;A69D;044C;044C; # (ꚝ; ꚝ; ꚝ; ь; ь; ) MODIFIER LETTER CYRILLIC SOFT SIGN A770;A770;A770;A76F;A76F; # (ꝰ; ꝰ; ꝰ; ꝯ; ꝯ; ) MODIFIER LETTER US A7F8;A7F8;A7F8;0126;0126; # (ꟸ; ꟸ; ꟸ; Ħ; Ħ; ) MODIFIER LETTER CAPITAL H WITH STROKE A7F9;A7F9;A7F9;0153;0153; # (ꟹ; ꟹ; ꟹ; œ; œ; ) MODIFIER LETTER SMALL LIGATURE OE AB5C;AB5C;AB5C;A727;A727; # (ꭜ; ꭜ; ꭜ; ꜧ; ꜧ; ) MODIFIER LETTER SMALL HENG AB5D;AB5D;AB5D;AB37;AB37; # (ꭝ; ꭝ; ꭝ; ꬷ; ꬷ; ) MODIFIER LETTER SMALL L WITH INVERTED LAZY S AB5E;AB5E;AB5E;026B;026B; # (ꭞ; ꭞ; ꭞ; ɫ; ɫ; ) MODIFIER LETTER SMALL L WITH MIDDLE TILDE AB5F;AB5F;AB5F;AB52;AB52; # (ꭟ; ꭟ; ꭟ; ꭒ; ꭒ; ) MODIFIER LETTER SMALL U WITH LEFT HOOK AC00;AC00;1100 1161;AC00;1100 1161; # (가; 가; 가; 가; 가; ) HANGUL SYLLABLE GA AC01;AC01;1100 1161 11A8;AC01;1100 1161 11A8; # (각; 각; 각; 각; 각; ) HANGUL SYLLABLE GAG AC02;AC02;1100 1161 11A9;AC02;1100 1161 11A9; # (갂; 갂; 갂; 갂; 갂; ) HANGUL SYLLABLE GAGG AC03;AC03;1100 1161 11AA;AC03;1100 1161 11AA; # (갃; 갃; 갃; 갃; 갃; ) HANGUL SYLLABLE GAGS AC04;AC04;1100 1161 11AB;AC04;1100 1161 11AB; # (간; 간; 간; 간; 간; ) HANGUL SYLLABLE GAN AC05;AC05;1100 1161 11AC;AC05;1100 1161 11AC; # (갅; 갅; 갅; 갅; 갅; ) HANGUL SYLLABLE GANJ AC06;AC06;1100 1161 11AD;AC06;1100 1161 11AD; # (갆; 갆; 갆; 갆; 갆; ) HANGUL SYLLABLE GANH AC07;AC07;1100 1161 11AE;AC07;1100 1161 11AE; # (갇; 갇; 갇; 갇; 갇; ) HANGUL SYLLABLE GAD AC08;AC08;1100 1161 11AF;AC08;1100 1161 11AF; # (갈; 갈; 갈; 갈; 갈; ) HANGUL SYLLABLE GAL AC09;AC09;1100 1161 11B0;AC09;1100 1161 11B0; # (갉; 갉; 갉; 갉; 갉; ) HANGUL SYLLABLE GALG AC0A;AC0A;1100 1161 11B1;AC0A;1100 1161 11B1; # (갊; 갊; 갊; 갊; 갊; ) HANGUL SYLLABLE GALM AC0B;AC0B;1100 1161 11B2;AC0B;1100 1161 11B2; # (갋; 갋; 갋; 갋; 갋; ) HANGUL SYLLABLE GALB AC0C;AC0C;1100 1161 11B3;AC0C;1100 1161 11B3; # (갌; 갌; 갌; 갌; 갌; ) HANGUL SYLLABLE GALS AC0D;AC0D;1100 1161 11B4;AC0D;1100 1161 11B4; # (갍; 갍; 갍; 갍; 갍; ) HANGUL SYLLABLE GALT AC0E;AC0E;1100 1161 11B5;AC0E;1100 1161 11B5; # (갎; 갎; 갎; 갎; 갎; ) HANGUL SYLLABLE GALP AC0F;AC0F;1100 1161 11B6;AC0F;1100 1161 11B6; # (갏; 갏; 갏; 갏; 갏; ) HANGUL SYLLABLE GALH AC10;AC10;1100 1161 11B7;AC10;1100 1161 11B7; # (감; 감; 감; 감; 감; ) HANGUL SYLLABLE GAM AC11;AC11;1100 1161 11B8;AC11;1100 1161 11B8; # (갑; 갑; 갑; 갑; 갑; ) HANGUL SYLLABLE GAB AC12;AC12;1100 1161 11B9;AC12;1100 1161 11B9; # (값; 값; 값; 값; 값; ) HANGUL SYLLABLE GABS AC13;AC13;1100 1161 11BA;AC13;1100 1161 11BA; # (갓; 갓; 갓; 갓; 갓; ) HANGUL SYLLABLE GAS AC14;AC14;1100 1161 11BB;AC14;1100 1161 11BB; # (갔; 갔; 갔; 갔; 갔; ) HANGUL SYLLABLE GASS AC15;AC15;1100 1161 11BC;AC15;1100 1161 11BC; # (강; 강; 강; 강; 강; ) HANGUL SYLLABLE GANG AC16;AC16;1100 1161 11BD;AC16;1100 1161 11BD; # (갖; 갖; 갖; 갖; 갖; ) HANGUL SYLLABLE GAJ AC17;AC17;1100 1161 11BE;AC17;1100 1161 11BE; # (갗; 갗; 갗; 갗; 갗; ) HANGUL SYLLABLE GAC AC18;AC18;1100 1161 11BF;AC18;1100 1161 11BF; # (갘; 갘; 갘; 갘; 갘; ) HANGUL SYLLABLE GAK AC19;AC19;1100 1161 11C0;AC19;1100 1161 11C0; # (같; 같; 같; 같; 같; ) HANGUL SYLLABLE GAT AC1A;AC1A;1100 1161 11C1;AC1A;1100 1161 11C1; # (갚; 갚; 갚; 갚; 갚; ) HANGUL SYLLABLE GAP AC1B;AC1B;1100 1161 11C2;AC1B;1100 1161 11C2; # (갛; 갛; 갛; 갛; 갛; ) HANGUL SYLLABLE GAH AC1C;AC1C;1100 1162;AC1C;1100 1162; # (개; 개; 개; 개; 개; ) HANGUL SYLLABLE GAE AC1D;AC1D;1100 1162 11A8;AC1D;1100 1162 11A8; # (객; 객; 객; 객; 객; ) HANGUL SYLLABLE GAEG AC1E;AC1E;1100 1162 11A9;AC1E;1100 1162 11A9; # (갞; 갞; 갞; 갞; 갞; ) HANGUL SYLLABLE GAEGG AC1F;AC1F;1100 1162 11AA;AC1F;1100 1162 11AA; # (갟; 갟; 갟; 갟; 갟; ) HANGUL SYLLABLE GAEGS AC20;AC20;1100 1162 11AB;AC20;1100 1162 11AB; # (갠; 갠; 갠; 갠; 갠; ) HANGUL SYLLABLE GAEN AC21;AC21;1100 1162 11AC;AC21;1100 1162 11AC; # (갡; 갡; 갡; 갡; 갡; ) HANGUL SYLLABLE GAENJ AC22;AC22;1100 1162 11AD;AC22;1100 1162 11AD; # (갢; 갢; 갢; 갢; 갢; ) HANGUL SYLLABLE GAENH AC23;AC23;1100 1162 11AE;AC23;1100 1162 11AE; # (갣; 갣; 갣; 갣; 갣; ) HANGUL SYLLABLE GAED AC24;AC24;1100 1162 11AF;AC24;1100 1162 11AF; # (갤; 갤; 갤; 갤; 갤; ) HANGUL SYLLABLE GAEL AC25;AC25;1100 1162 11B0;AC25;1100 1162 11B0; # (갥; 갥; 갥; 갥; 갥; ) HANGUL SYLLABLE GAELG AC26;AC26;1100 1162 11B1;AC26;1100 1162 11B1; # (갦; 갦; 갦; 갦; 갦; ) HANGUL SYLLABLE GAELM AC27;AC27;1100 1162 11B2;AC27;1100 1162 11B2; # (갧; 갧; 갧; 갧; 갧; ) HANGUL SYLLABLE GAELB AC28;AC28;1100 1162 11B3;AC28;1100 1162 11B3; # (갨; 갨; 갨; 갨; 갨; ) HANGUL SYLLABLE GAELS AC29;AC29;1100 1162 11B4;AC29;1100 1162 11B4; # (갩; 갩; 갩; 갩; 갩; ) HANGUL SYLLABLE GAELT AC2A;AC2A;1100 1162 11B5;AC2A;1100 1162 11B5; # (갪; 갪; 갪; 갪; 갪; ) HANGUL SYLLABLE GAELP AC2B;AC2B;1100 1162 11B6;AC2B;1100 1162 11B6; # (갫; 갫; 갫; 갫; 갫; ) HANGUL SYLLABLE GAELH AC2C;AC2C;1100 1162 11B7;AC2C;1100 1162 11B7; # (갬; 갬; 갬; 갬; 갬; ) HANGUL SYLLABLE GAEM AC2D;AC2D;1100 1162 11B8;AC2D;1100 1162 11B8; # (갭; 갭; 갭; 갭; 갭; ) HANGUL SYLLABLE GAEB AC2E;AC2E;1100 1162 11B9;AC2E;1100 1162 11B9; # (갮; 갮; 갮; 갮; 갮; ) HANGUL SYLLABLE GAEBS AC2F;AC2F;1100 1162 11BA;AC2F;1100 1162 11BA; # (갯; 갯; 갯; 갯; 갯; ) HANGUL SYLLABLE GAES AC30;AC30;1100 1162 11BB;AC30;1100 1162 11BB; # (갰; 갰; 갰; 갰; 갰; ) HANGUL SYLLABLE GAESS AC31;AC31;1100 1162 11BC;AC31;1100 1162 11BC; # (갱; 갱; 갱; 갱; 갱; ) HANGUL SYLLABLE GAENG AC32;AC32;1100 1162 11BD;AC32;1100 1162 11BD; # (갲; 갲; 갲; 갲; 갲; ) HANGUL SYLLABLE GAEJ AC33;AC33;1100 1162 11BE;AC33;1100 1162 11BE; # (갳; 갳; 갳; 갳; 갳; ) HANGUL SYLLABLE GAEC AC34;AC34;1100 1162 11BF;AC34;1100 1162 11BF; # (갴; 갴; 갴; 갴; 갴; ) HANGUL SYLLABLE GAEK AC35;AC35;1100 1162 11C0;AC35;1100 1162 11C0; # (갵; 갵; 갵; 갵; 갵; ) HANGUL SYLLABLE GAET AC36;AC36;1100 1162 11C1;AC36;1100 1162 11C1; # (갶; 갶; 갶; 갶; 갶; ) HANGUL SYLLABLE GAEP AC37;AC37;1100 1162 11C2;AC37;1100 1162 11C2; # (갷; 갷; 갷; 갷; 갷; ) HANGUL SYLLABLE GAEH AC38;AC38;1100 1163;AC38;1100 1163; # (갸; 갸; 갸; 갸; 갸; ) HANGUL SYLLABLE GYA AC39;AC39;1100 1163 11A8;AC39;1100 1163 11A8; # (갹; 갹; 갹; 갹; 갹; ) HANGUL SYLLABLE GYAG AC3A;AC3A;1100 1163 11A9;AC3A;1100 1163 11A9; # (갺; 갺; 갺; 갺; 갺; ) HANGUL SYLLABLE GYAGG AC3B;AC3B;1100 1163 11AA;AC3B;1100 1163 11AA; # (갻; 갻; 갻; 갻; 갻; ) HANGUL SYLLABLE GYAGS AC3C;AC3C;1100 1163 11AB;AC3C;1100 1163 11AB; # (갼; 갼; 갼; 갼; 갼; ) HANGUL SYLLABLE GYAN AC3D;AC3D;1100 1163 11AC;AC3D;1100 1163 11AC; # (갽; 갽; 갽; 갽; 갽; ) HANGUL SYLLABLE GYANJ AC3E;AC3E;1100 1163 11AD;AC3E;1100 1163 11AD; # (갾; 갾; 갾; 갾; 갾; ) HANGUL SYLLABLE GYANH AC3F;AC3F;1100 1163 11AE;AC3F;1100 1163 11AE; # (갿; 갿; 갿; 갿; 갿; ) HANGUL SYLLABLE GYAD AC40;AC40;1100 1163 11AF;AC40;1100 1163 11AF; # (걀; 걀; 걀; 걀; 걀; ) HANGUL SYLLABLE GYAL AC41;AC41;1100 1163 11B0;AC41;1100 1163 11B0; # (걁; 걁; 걁; 걁; 걁; ) HANGUL SYLLABLE GYALG AC42;AC42;1100 1163 11B1;AC42;1100 1163 11B1; # (걂; 걂; 걂; 걂; 걂; ) HANGUL SYLLABLE GYALM AC43;AC43;1100 1163 11B2;AC43;1100 1163 11B2; # (걃; 걃; 걃; 걃; 걃; ) HANGUL SYLLABLE GYALB AC44;AC44;1100 1163 11B3;AC44;1100 1163 11B3; # (걄; 걄; 걄; 걄; 걄; ) HANGUL SYLLABLE GYALS AC45;AC45;1100 1163 11B4;AC45;1100 1163 11B4; # (걅; 걅; 걅; 걅; 걅; ) HANGUL SYLLABLE GYALT AC46;AC46;1100 1163 11B5;AC46;1100 1163 11B5; # (걆; 걆; 걆; 걆; 걆; ) HANGUL SYLLABLE GYALP AC47;AC47;1100 1163 11B6;AC47;1100 1163 11B6; # (걇; 걇; 걇; 걇; 걇; ) HANGUL SYLLABLE GYALH AC48;AC48;1100 1163 11B7;AC48;1100 1163 11B7; # (걈; 걈; 걈; 걈; 걈; ) HANGUL SYLLABLE GYAM AC49;AC49;1100 1163 11B8;AC49;1100 1163 11B8; # (걉; 걉; 걉; 걉; 걉; ) HANGUL SYLLABLE GYAB AC4A;AC4A;1100 1163 11B9;AC4A;1100 1163 11B9; # (걊; 걊; 걊; 걊; 걊; ) HANGUL SYLLABLE GYABS AC4B;AC4B;1100 1163 11BA;AC4B;1100 1163 11BA; # (걋; 걋; 걋; 걋; 걋; ) HANGUL SYLLABLE GYAS AC4C;AC4C;1100 1163 11BB;AC4C;1100 1163 11BB; # (걌; 걌; 걌; 걌; 걌; ) HANGUL SYLLABLE GYASS AC4D;AC4D;1100 1163 11BC;AC4D;1100 1163 11BC; # (걍; 걍; 걍; 걍; 걍; ) HANGUL SYLLABLE GYANG AC4E;AC4E;1100 1163 11BD;AC4E;1100 1163 11BD; # (걎; 걎; 걎; 걎; 걎; ) HANGUL SYLLABLE GYAJ AC4F;AC4F;1100 1163 11BE;AC4F;1100 1163 11BE; # (걏; 걏; 걏; 걏; 걏; ) HANGUL SYLLABLE GYAC AC50;AC50;1100 1163 11BF;AC50;1100 1163 11BF; # (걐; 걐; 걐; 걐; 걐; ) HANGUL SYLLABLE GYAK AC51;AC51;1100 1163 11C0;AC51;1100 1163 11C0; # (걑; 걑; 걑; 걑; 걑; ) HANGUL SYLLABLE GYAT AC52;AC52;1100 1163 11C1;AC52;1100 1163 11C1; # (걒; 걒; 걒; 걒; 걒; ) HANGUL SYLLABLE GYAP AC53;AC53;1100 1163 11C2;AC53;1100 1163 11C2; # (걓; 걓; 걓; 걓; 걓; ) HANGUL SYLLABLE GYAH AC54;AC54;1100 1164;AC54;1100 1164; # (걔; 걔; 걔; 걔; 걔; ) HANGUL SYLLABLE GYAE AC55;AC55;1100 1164 11A8;AC55;1100 1164 11A8; # (걕; 걕; 걕; 걕; 걕; ) HANGUL SYLLABLE GYAEG AC56;AC56;1100 1164 11A9;AC56;1100 1164 11A9; # (걖; 걖; 걖; 걖; 걖; ) HANGUL SYLLABLE GYAEGG AC57;AC57;1100 1164 11AA;AC57;1100 1164 11AA; # (걗; 걗; 걗; 걗; 걗; ) HANGUL SYLLABLE GYAEGS AC58;AC58;1100 1164 11AB;AC58;1100 1164 11AB; # (걘; 걘; 걘; 걘; 걘; ) HANGUL SYLLABLE GYAEN AC59;AC59;1100 1164 11AC;AC59;1100 1164 11AC; # (걙; 걙; 걙; 걙; 걙; ) HANGUL SYLLABLE GYAENJ AC5A;AC5A;1100 1164 11AD;AC5A;1100 1164 11AD; # (걚; 걚; 걚; 걚; 걚; ) HANGUL SYLLABLE GYAENH AC5B;AC5B;1100 1164 11AE;AC5B;1100 1164 11AE; # (걛; 걛; 걛; 걛; 걛; ) HANGUL SYLLABLE GYAED AC5C;AC5C;1100 1164 11AF;AC5C;1100 1164 11AF; # (걜; 걜; 걜; 걜; 걜; ) HANGUL SYLLABLE GYAEL AC5D;AC5D;1100 1164 11B0;AC5D;1100 1164 11B0; # (걝; 걝; 걝; 걝; 걝; ) HANGUL SYLLABLE GYAELG AC5E;AC5E;1100 1164 11B1;AC5E;1100 1164 11B1; # (걞; 걞; 걞; 걞; 걞; ) HANGUL SYLLABLE GYAELM AC5F;AC5F;1100 1164 11B2;AC5F;1100 1164 11B2; # (걟; 걟; 걟; 걟; 걟; ) HANGUL SYLLABLE GYAELB AC60;AC60;1100 1164 11B3;AC60;1100 1164 11B3; # (걠; 걠; 걠; 걠; 걠; ) HANGUL SYLLABLE GYAELS AC61;AC61;1100 1164 11B4;AC61;1100 1164 11B4; # (걡; 걡; 걡; 걡; 걡; ) HANGUL SYLLABLE GYAELT AC62;AC62;1100 1164 11B5;AC62;1100 1164 11B5; # (걢; 걢; 걢; 걢; 걢; ) HANGUL SYLLABLE GYAELP AC63;AC63;1100 1164 11B6;AC63;1100 1164 11B6; # (걣; 걣; 걣; 걣; 걣; ) HANGUL SYLLABLE GYAELH AC64;AC64;1100 1164 11B7;AC64;1100 1164 11B7; # (걤; 걤; 걤; 걤; 걤; ) HANGUL SYLLABLE GYAEM AC65;AC65;1100 1164 11B8;AC65;1100 1164 11B8; # (걥; 걥; 걥; 걥; 걥; ) HANGUL SYLLABLE GYAEB AC66;AC66;1100 1164 11B9;AC66;1100 1164 11B9; # (걦; 걦; 걦; 걦; 걦; ) HANGUL SYLLABLE GYAEBS AC67;AC67;1100 1164 11BA;AC67;1100 1164 11BA; # (걧; 걧; 걧; 걧; 걧; ) HANGUL SYLLABLE GYAES AC68;AC68;1100 1164 11BB;AC68;1100 1164 11BB; # (걨; 걨; 걨; 걨; 걨; ) HANGUL SYLLABLE GYAESS AC69;AC69;1100 1164 11BC;AC69;1100 1164 11BC; # (걩; 걩; 걩; 걩; 걩; ) HANGUL SYLLABLE GYAENG AC6A;AC6A;1100 1164 11BD;AC6A;1100 1164 11BD; # (걪; 걪; 걪; 걪; 걪; ) HANGUL SYLLABLE GYAEJ AC6B;AC6B;1100 1164 11BE;AC6B;1100 1164 11BE; # (걫; 걫; 걫; 걫; 걫; ) HANGUL SYLLABLE GYAEC AC6C;AC6C;1100 1164 11BF;AC6C;1100 1164 11BF; # (걬; 걬; 걬; 걬; 걬; ) HANGUL SYLLABLE GYAEK AC6D;AC6D;1100 1164 11C0;AC6D;1100 1164 11C0; # (걭; 걭; 걭; 걭; 걭; ) HANGUL SYLLABLE GYAET AC6E;AC6E;1100 1164 11C1;AC6E;1100 1164 11C1; # (걮; 걮; 걮; 걮; 걮; ) HANGUL SYLLABLE GYAEP AC6F;AC6F;1100 1164 11C2;AC6F;1100 1164 11C2; # (걯; 걯; 걯; 걯; 걯; ) HANGUL SYLLABLE GYAEH AC70;AC70;1100 1165;AC70;1100 1165; # (거; 거; 거; 거; 거; ) HANGUL SYLLABLE GEO AC71;AC71;1100 1165 11A8;AC71;1100 1165 11A8; # (걱; 걱; 걱; 걱; 걱; ) HANGUL SYLLABLE GEOG AC72;AC72;1100 1165 11A9;AC72;1100 1165 11A9; # (걲; 걲; 걲; 걲; 걲; ) HANGUL SYLLABLE GEOGG AC73;AC73;1100 1165 11AA;AC73;1100 1165 11AA; # (걳; 걳; 걳; 걳; 걳; ) HANGUL SYLLABLE GEOGS AC74;AC74;1100 1165 11AB;AC74;1100 1165 11AB; # (건; 건; 건; 건; 건; ) HANGUL SYLLABLE GEON AC75;AC75;1100 1165 11AC;AC75;1100 1165 11AC; # (걵; 걵; 걵; 걵; 걵; ) HANGUL SYLLABLE GEONJ AC76;AC76;1100 1165 11AD;AC76;1100 1165 11AD; # (걶; 걶; 걶; 걶; 걶; ) HANGUL SYLLABLE GEONH AC77;AC77;1100 1165 11AE;AC77;1100 1165 11AE; # (걷; 걷; 걷; 걷; 걷; ) HANGUL SYLLABLE GEOD AC78;AC78;1100 1165 11AF;AC78;1100 1165 11AF; # (걸; 걸; 걸; 걸; 걸; ) HANGUL SYLLABLE GEOL AC79;AC79;1100 1165 11B0;AC79;1100 1165 11B0; # (걹; 걹; 걹; 걹; 걹; ) HANGUL SYLLABLE GEOLG AC7A;AC7A;1100 1165 11B1;AC7A;1100 1165 11B1; # (걺; 걺; 걺; 걺; 걺; ) HANGUL SYLLABLE GEOLM AC7B;AC7B;1100 1165 11B2;AC7B;1100 1165 11B2; # (걻; 걻; 걻; 걻; 걻; ) HANGUL SYLLABLE GEOLB AC7C;AC7C;1100 1165 11B3;AC7C;1100 1165 11B3; # (걼; 걼; 걼; 걼; 걼; ) HANGUL SYLLABLE GEOLS AC7D;AC7D;1100 1165 11B4;AC7D;1100 1165 11B4; # (걽; 걽; 걽; 걽; 걽; ) HANGUL SYLLABLE GEOLT AC7E;AC7E;1100 1165 11B5;AC7E;1100 1165 11B5; # (걾; 걾; 걾; 걾; 걾; ) HANGUL SYLLABLE GEOLP AC7F;AC7F;1100 1165 11B6;AC7F;1100 1165 11B6; # (걿; 걿; 걿; 걿; 걿; ) HANGUL SYLLABLE GEOLH AC80;AC80;1100 1165 11B7;AC80;1100 1165 11B7; # (검; 검; 검; 검; 검; ) HANGUL SYLLABLE GEOM AC81;AC81;1100 1165 11B8;AC81;1100 1165 11B8; # (겁; 겁; 겁; 겁; 겁; ) HANGUL SYLLABLE GEOB AC82;AC82;1100 1165 11B9;AC82;1100 1165 11B9; # (겂; 겂; 겂; 겂; 겂; ) HANGUL SYLLABLE GEOBS AC83;AC83;1100 1165 11BA;AC83;1100 1165 11BA; # (것; 것; 것; 것; 것; ) HANGUL SYLLABLE GEOS AC84;AC84;1100 1165 11BB;AC84;1100 1165 11BB; # (겄; 겄; 겄; 겄; 겄; ) HANGUL SYLLABLE GEOSS AC85;AC85;1100 1165 11BC;AC85;1100 1165 11BC; # (겅; 겅; 겅; 겅; 겅; ) HANGUL SYLLABLE GEONG AC86;AC86;1100 1165 11BD;AC86;1100 1165 11BD; # (겆; 겆; 겆; 겆; 겆; ) HANGUL SYLLABLE GEOJ AC87;AC87;1100 1165 11BE;AC87;1100 1165 11BE; # (겇; 겇; 겇; 겇; 겇; ) HANGUL SYLLABLE GEOC AC88;AC88;1100 1165 11BF;AC88;1100 1165 11BF; # (겈; 겈; 겈; 겈; 겈; ) HANGUL SYLLABLE GEOK AC89;AC89;1100 1165 11C0;AC89;1100 1165 11C0; # (겉; 겉; 겉; 겉; 겉; ) HANGUL SYLLABLE GEOT AC8A;AC8A;1100 1165 11C1;AC8A;1100 1165 11C1; # (겊; 겊; 겊; 겊; 겊; ) HANGUL SYLLABLE GEOP AC8B;AC8B;1100 1165 11C2;AC8B;1100 1165 11C2; # (겋; 겋; 겋; 겋; 겋; ) HANGUL SYLLABLE GEOH AC8C;AC8C;1100 1166;AC8C;1100 1166; # (게; 게; 게; 게; 게; ) HANGUL SYLLABLE GE AC8D;AC8D;1100 1166 11A8;AC8D;1100 1166 11A8; # (겍; 겍; 겍; 겍; 겍; ) HANGUL SYLLABLE GEG AC8E;AC8E;1100 1166 11A9;AC8E;1100 1166 11A9; # (겎; 겎; 겎; 겎; 겎; ) HANGUL SYLLABLE GEGG AC8F;AC8F;1100 1166 11AA;AC8F;1100 1166 11AA; # (겏; 겏; 겏; 겏; 겏; ) HANGUL SYLLABLE GEGS AC90;AC90;1100 1166 11AB;AC90;1100 1166 11AB; # (겐; 겐; 겐; 겐; 겐; ) HANGUL SYLLABLE GEN AC91;AC91;1100 1166 11AC;AC91;1100 1166 11AC; # (겑; 겑; 겑; 겑; 겑; ) HANGUL SYLLABLE GENJ AC92;AC92;1100 1166 11AD;AC92;1100 1166 11AD; # (겒; 겒; 겒; 겒; 겒; ) HANGUL SYLLABLE GENH AC93;AC93;1100 1166 11AE;AC93;1100 1166 11AE; # (겓; 겓; 겓; 겓; 겓; ) HANGUL SYLLABLE GED AC94;AC94;1100 1166 11AF;AC94;1100 1166 11AF; # (겔; 겔; 겔; 겔; 겔; ) HANGUL SYLLABLE GEL AC95;AC95;1100 1166 11B0;AC95;1100 1166 11B0; # (겕; 겕; 겕; 겕; 겕; ) HANGUL SYLLABLE GELG AC96;AC96;1100 1166 11B1;AC96;1100 1166 11B1; # (겖; 겖; 겖; 겖; 겖; ) HANGUL SYLLABLE GELM AC97;AC97;1100 1166 11B2;AC97;1100 1166 11B2; # (겗; 겗; 겗; 겗; 겗; ) HANGUL SYLLABLE GELB AC98;AC98;1100 1166 11B3;AC98;1100 1166 11B3; # (겘; 겘; 겘; 겘; 겘; ) HANGUL SYLLABLE GELS AC99;AC99;1100 1166 11B4;AC99;1100 1166 11B4; # (겙; 겙; 겙; 겙; 겙; ) HANGUL SYLLABLE GELT AC9A;AC9A;1100 1166 11B5;AC9A;1100 1166 11B5; # (겚; 겚; 겚; 겚; 겚; ) HANGUL SYLLABLE GELP AC9B;AC9B;1100 1166 11B6;AC9B;1100 1166 11B6; # (겛; 겛; 겛; 겛; 겛; ) HANGUL SYLLABLE GELH AC9C;AC9C;1100 1166 11B7;AC9C;1100 1166 11B7; # (겜; 겜; 겜; 겜; 겜; ) HANGUL SYLLABLE GEM AC9D;AC9D;1100 1166 11B8;AC9D;1100 1166 11B8; # (겝; 겝; 겝; 겝; 겝; ) HANGUL SYLLABLE GEB AC9E;AC9E;1100 1166 11B9;AC9E;1100 1166 11B9; # (겞; 겞; 겞; 겞; 겞; ) HANGUL SYLLABLE GEBS AC9F;AC9F;1100 1166 11BA;AC9F;1100 1166 11BA; # (겟; 겟; 겟; 겟; 겟; ) HANGUL SYLLABLE GES ACA0;ACA0;1100 1166 11BB;ACA0;1100 1166 11BB; # (겠; 겠; 겠; 겠; 겠; ) HANGUL SYLLABLE GESS ACA1;ACA1;1100 1166 11BC;ACA1;1100 1166 11BC; # (겡; 겡; 겡; 겡; 겡; ) HANGUL SYLLABLE GENG ACA2;ACA2;1100 1166 11BD;ACA2;1100 1166 11BD; # (겢; 겢; 겢; 겢; 겢; ) HANGUL SYLLABLE GEJ ACA3;ACA3;1100 1166 11BE;ACA3;1100 1166 11BE; # (겣; 겣; 겣; 겣; 겣; ) HANGUL SYLLABLE GEC ACA4;ACA4;1100 1166 11BF;ACA4;1100 1166 11BF; # (겤; 겤; 겤; 겤; 겤; ) HANGUL SYLLABLE GEK ACA5;ACA5;1100 1166 11C0;ACA5;1100 1166 11C0; # (겥; 겥; 겥; 겥; 겥; ) HANGUL SYLLABLE GET ACA6;ACA6;1100 1166 11C1;ACA6;1100 1166 11C1; # (겦; 겦; 겦; 겦; 겦; ) HANGUL SYLLABLE GEP ACA7;ACA7;1100 1166 11C2;ACA7;1100 1166 11C2; # (겧; 겧; 겧; 겧; 겧; ) HANGUL SYLLABLE GEH ACA8;ACA8;1100 1167;ACA8;1100 1167; # (겨; 겨; 겨; 겨; 겨; ) HANGUL SYLLABLE GYEO ACA9;ACA9;1100 1167 11A8;ACA9;1100 1167 11A8; # (격; 격; 격; 격; 격; ) HANGUL SYLLABLE GYEOG ACAA;ACAA;1100 1167 11A9;ACAA;1100 1167 11A9; # (겪; 겪; 겪; 겪; 겪; ) HANGUL SYLLABLE GYEOGG ACAB;ACAB;1100 1167 11AA;ACAB;1100 1167 11AA; # (겫; 겫; 겫; 겫; 겫; ) HANGUL SYLLABLE GYEOGS ACAC;ACAC;1100 1167 11AB;ACAC;1100 1167 11AB; # (견; 견; 견; 견; 견; ) HANGUL SYLLABLE GYEON ACAD;ACAD;1100 1167 11AC;ACAD;1100 1167 11AC; # (겭; 겭; 겭; 겭; 겭; ) HANGUL SYLLABLE GYEONJ ACAE;ACAE;1100 1167 11AD;ACAE;1100 1167 11AD; # (겮; 겮; 겮; 겮; 겮; ) HANGUL SYLLABLE GYEONH ACAF;ACAF;1100 1167 11AE;ACAF;1100 1167 11AE; # (겯; 겯; 겯; 겯; 겯; ) HANGUL SYLLABLE GYEOD ACB0;ACB0;1100 1167 11AF;ACB0;1100 1167 11AF; # (결; 결; 결; 결; 결; ) HANGUL SYLLABLE GYEOL ACB1;ACB1;1100 1167 11B0;ACB1;1100 1167 11B0; # (겱; 겱; 겱; 겱; 겱; ) HANGUL SYLLABLE GYEOLG ACB2;ACB2;1100 1167 11B1;ACB2;1100 1167 11B1; # (겲; 겲; 겲; 겲; 겲; ) HANGUL SYLLABLE GYEOLM ACB3;ACB3;1100 1167 11B2;ACB3;1100 1167 11B2; # (겳; 겳; 겳; 겳; 겳; ) HANGUL SYLLABLE GYEOLB ACB4;ACB4;1100 1167 11B3;ACB4;1100 1167 11B3; # (겴; 겴; 겴; 겴; 겴; ) HANGUL SYLLABLE GYEOLS ACB5;ACB5;1100 1167 11B4;ACB5;1100 1167 11B4; # (겵; 겵; 겵; 겵; 겵; ) HANGUL SYLLABLE GYEOLT ACB6;ACB6;1100 1167 11B5;ACB6;1100 1167 11B5; # (겶; 겶; 겶; 겶; 겶; ) HANGUL SYLLABLE GYEOLP ACB7;ACB7;1100 1167 11B6;ACB7;1100 1167 11B6; # (겷; 겷; 겷; 겷; 겷; ) HANGUL SYLLABLE GYEOLH ACB8;ACB8;1100 1167 11B7;ACB8;1100 1167 11B7; # (겸; 겸; 겸; 겸; 겸; ) HANGUL SYLLABLE GYEOM ACB9;ACB9;1100 1167 11B8;ACB9;1100 1167 11B8; # (겹; 겹; 겹; 겹; 겹; ) HANGUL SYLLABLE GYEOB ACBA;ACBA;1100 1167 11B9;ACBA;1100 1167 11B9; # (겺; 겺; 겺; 겺; 겺; ) HANGUL SYLLABLE GYEOBS ACBB;ACBB;1100 1167 11BA;ACBB;1100 1167 11BA; # (겻; 겻; 겻; 겻; 겻; ) HANGUL SYLLABLE GYEOS ACBC;ACBC;1100 1167 11BB;ACBC;1100 1167 11BB; # (겼; 겼; 겼; 겼; 겼; ) HANGUL SYLLABLE GYEOSS ACBD;ACBD;1100 1167 11BC;ACBD;1100 1167 11BC; # (경; 경; 경; 경; 경; ) HANGUL SYLLABLE GYEONG ACBE;ACBE;1100 1167 11BD;ACBE;1100 1167 11BD; # (겾; 겾; 겾; 겾; 겾; ) HANGUL SYLLABLE GYEOJ ACBF;ACBF;1100 1167 11BE;ACBF;1100 1167 11BE; # (겿; 겿; 겿; 겿; 겿; ) HANGUL SYLLABLE GYEOC ACC0;ACC0;1100 1167 11BF;ACC0;1100 1167 11BF; # (곀; 곀; 곀; 곀; 곀; ) HANGUL SYLLABLE GYEOK ACC1;ACC1;1100 1167 11C0;ACC1;1100 1167 11C0; # (곁; 곁; 곁; 곁; 곁; ) HANGUL SYLLABLE GYEOT ACC2;ACC2;1100 1167 11C1;ACC2;1100 1167 11C1; # (곂; 곂; 곂; 곂; 곂; ) HANGUL SYLLABLE GYEOP ACC3;ACC3;1100 1167 11C2;ACC3;1100 1167 11C2; # (곃; 곃; 곃; 곃; 곃; ) HANGUL SYLLABLE GYEOH ACC4;ACC4;1100 1168;ACC4;1100 1168; # (계; 계; 계; 계; 계; ) HANGUL SYLLABLE GYE ACC5;ACC5;1100 1168 11A8;ACC5;1100 1168 11A8; # (곅; 곅; 곅; 곅; 곅; ) HANGUL SYLLABLE GYEG ACC6;ACC6;1100 1168 11A9;ACC6;1100 1168 11A9; # (곆; 곆; 곆; 곆; 곆; ) HANGUL SYLLABLE GYEGG ACC7;ACC7;1100 1168 11AA;ACC7;1100 1168 11AA; # (곇; 곇; 곇; 곇; 곇; ) HANGUL SYLLABLE GYEGS ACC8;ACC8;1100 1168 11AB;ACC8;1100 1168 11AB; # (곈; 곈; 곈; 곈; 곈; ) HANGUL SYLLABLE GYEN ACC9;ACC9;1100 1168 11AC;ACC9;1100 1168 11AC; # (곉; 곉; 곉; 곉; 곉; ) HANGUL SYLLABLE GYENJ ACCA;ACCA;1100 1168 11AD;ACCA;1100 1168 11AD; # (곊; 곊; 곊; 곊; 곊; ) HANGUL SYLLABLE GYENH ACCB;ACCB;1100 1168 11AE;ACCB;1100 1168 11AE; # (곋; 곋; 곋; 곋; 곋; ) HANGUL SYLLABLE GYED ACCC;ACCC;1100 1168 11AF;ACCC;1100 1168 11AF; # (곌; 곌; 곌; 곌; 곌; ) HANGUL SYLLABLE GYEL ACCD;ACCD;1100 1168 11B0;ACCD;1100 1168 11B0; # (곍; 곍; 곍; 곍; 곍; ) HANGUL SYLLABLE GYELG ACCE;ACCE;1100 1168 11B1;ACCE;1100 1168 11B1; # (곎; 곎; 곎; 곎; 곎; ) HANGUL SYLLABLE GYELM ACCF;ACCF;1100 1168 11B2;ACCF;1100 1168 11B2; # (곏; 곏; 곏; 곏; 곏; ) HANGUL SYLLABLE GYELB ACD0;ACD0;1100 1168 11B3;ACD0;1100 1168 11B3; # (곐; 곐; 곐; 곐; 곐; ) HANGUL SYLLABLE GYELS ACD1;ACD1;1100 1168 11B4;ACD1;1100 1168 11B4; # (곑; 곑; 곑; 곑; 곑; ) HANGUL SYLLABLE GYELT ACD2;ACD2;1100 1168 11B5;ACD2;1100 1168 11B5; # (곒; 곒; 곒; 곒; 곒; ) HANGUL SYLLABLE GYELP ACD3;ACD3;1100 1168 11B6;ACD3;1100 1168 11B6; # (곓; 곓; 곓; 곓; 곓; ) HANGUL SYLLABLE GYELH ACD4;ACD4;1100 1168 11B7;ACD4;1100 1168 11B7; # (곔; 곔; 곔; 곔; 곔; ) HANGUL SYLLABLE GYEM ACD5;ACD5;1100 1168 11B8;ACD5;1100 1168 11B8; # (곕; 곕; 곕; 곕; 곕; ) HANGUL SYLLABLE GYEB ACD6;ACD6;1100 1168 11B9;ACD6;1100 1168 11B9; # (곖; 곖; 곖; 곖; 곖; ) HANGUL SYLLABLE GYEBS ACD7;ACD7;1100 1168 11BA;ACD7;1100 1168 11BA; # (곗; 곗; 곗; 곗; 곗; ) HANGUL SYLLABLE GYES ACD8;ACD8;1100 1168 11BB;ACD8;1100 1168 11BB; # (곘; 곘; 곘; 곘; 곘; ) HANGUL SYLLABLE GYESS ACD9;ACD9;1100 1168 11BC;ACD9;1100 1168 11BC; # (곙; 곙; 곙; 곙; 곙; ) HANGUL SYLLABLE GYENG ACDA;ACDA;1100 1168 11BD;ACDA;1100 1168 11BD; # (곚; 곚; 곚; 곚; 곚; ) HANGUL SYLLABLE GYEJ ACDB;ACDB;1100 1168 11BE;ACDB;1100 1168 11BE; # (곛; 곛; 곛; 곛; 곛; ) HANGUL SYLLABLE GYEC ACDC;ACDC;1100 1168 11BF;ACDC;1100 1168 11BF; # (곜; 곜; 곜; 곜; 곜; ) HANGUL SYLLABLE GYEK ACDD;ACDD;1100 1168 11C0;ACDD;1100 1168 11C0; # (곝; 곝; 곝; 곝; 곝; ) HANGUL SYLLABLE GYET ACDE;ACDE;1100 1168 11C1;ACDE;1100 1168 11C1; # (곞; 곞; 곞; 곞; 곞; ) HANGUL SYLLABLE GYEP ACDF;ACDF;1100 1168 11C2;ACDF;1100 1168 11C2; # (곟; 곟; 곟; 곟; 곟; ) HANGUL SYLLABLE GYEH ACE0;ACE0;1100 1169;ACE0;1100 1169; # (고; 고; 고; 고; 고; ) HANGUL SYLLABLE GO ACE1;ACE1;1100 1169 11A8;ACE1;1100 1169 11A8; # (곡; 곡; 곡; 곡; 곡; ) HANGUL SYLLABLE GOG ACE2;ACE2;1100 1169 11A9;ACE2;1100 1169 11A9; # (곢; 곢; 곢; 곢; 곢; ) HANGUL SYLLABLE GOGG ACE3;ACE3;1100 1169 11AA;ACE3;1100 1169 11AA; # (곣; 곣; 곣; 곣; 곣; ) HANGUL SYLLABLE GOGS ACE4;ACE4;1100 1169 11AB;ACE4;1100 1169 11AB; # (곤; 곤; 곤; 곤; 곤; ) HANGUL SYLLABLE GON ACE5;ACE5;1100 1169 11AC;ACE5;1100 1169 11AC; # (곥; 곥; 곥; 곥; 곥; ) HANGUL SYLLABLE GONJ ACE6;ACE6;1100 1169 11AD;ACE6;1100 1169 11AD; # (곦; 곦; 곦; 곦; 곦; ) HANGUL SYLLABLE GONH ACE7;ACE7;1100 1169 11AE;ACE7;1100 1169 11AE; # (곧; 곧; 곧; 곧; 곧; ) HANGUL SYLLABLE GOD ACE8;ACE8;1100 1169 11AF;ACE8;1100 1169 11AF; # (골; 골; 골; 골; 골; ) HANGUL SYLLABLE GOL ACE9;ACE9;1100 1169 11B0;ACE9;1100 1169 11B0; # (곩; 곩; 곩; 곩; 곩; ) HANGUL SYLLABLE GOLG ACEA;ACEA;1100 1169 11B1;ACEA;1100 1169 11B1; # (곪; 곪; 곪; 곪; 곪; ) HANGUL SYLLABLE GOLM ACEB;ACEB;1100 1169 11B2;ACEB;1100 1169 11B2; # (곫; 곫; 곫; 곫; 곫; ) HANGUL SYLLABLE GOLB ACEC;ACEC;1100 1169 11B3;ACEC;1100 1169 11B3; # (곬; 곬; 곬; 곬; 곬; ) HANGUL SYLLABLE GOLS ACED;ACED;1100 1169 11B4;ACED;1100 1169 11B4; # (곭; 곭; 곭; 곭; 곭; ) HANGUL SYLLABLE GOLT ACEE;ACEE;1100 1169 11B5;ACEE;1100 1169 11B5; # (곮; 곮; 곮; 곮; 곮; ) HANGUL SYLLABLE GOLP ACEF;ACEF;1100 1169 11B6;ACEF;1100 1169 11B6; # (곯; 곯; 곯; 곯; 곯; ) HANGUL SYLLABLE GOLH ACF0;ACF0;1100 1169 11B7;ACF0;1100 1169 11B7; # (곰; 곰; 곰; 곰; 곰; ) HANGUL SYLLABLE GOM ACF1;ACF1;1100 1169 11B8;ACF1;1100 1169 11B8; # (곱; 곱; 곱; 곱; 곱; ) HANGUL SYLLABLE GOB ACF2;ACF2;1100 1169 11B9;ACF2;1100 1169 11B9; # (곲; 곲; 곲; 곲; 곲; ) HANGUL SYLLABLE GOBS ACF3;ACF3;1100 1169 11BA;ACF3;1100 1169 11BA; # (곳; 곳; 곳; 곳; 곳; ) HANGUL SYLLABLE GOS ACF4;ACF4;1100 1169 11BB;ACF4;1100 1169 11BB; # (곴; 곴; 곴; 곴; 곴; ) HANGUL SYLLABLE GOSS ACF5;ACF5;1100 1169 11BC;ACF5;1100 1169 11BC; # (공; 공; 공; 공; 공; ) HANGUL SYLLABLE GONG ACF6;ACF6;1100 1169 11BD;ACF6;1100 1169 11BD; # (곶; 곶; 곶; 곶; 곶; ) HANGUL SYLLABLE GOJ ACF7;ACF7;1100 1169 11BE;ACF7;1100 1169 11BE; # (곷; 곷; 곷; 곷; 곷; ) HANGUL SYLLABLE GOC ACF8;ACF8;1100 1169 11BF;ACF8;1100 1169 11BF; # (곸; 곸; 곸; 곸; 곸; ) HANGUL SYLLABLE GOK ACF9;ACF9;1100 1169 11C0;ACF9;1100 1169 11C0; # (곹; 곹; 곹; 곹; 곹; ) HANGUL SYLLABLE GOT ACFA;ACFA;1100 1169 11C1;ACFA;1100 1169 11C1; # (곺; 곺; 곺; 곺; 곺; ) HANGUL SYLLABLE GOP ACFB;ACFB;1100 1169 11C2;ACFB;1100 1169 11C2; # (곻; 곻; 곻; 곻; 곻; ) HANGUL SYLLABLE GOH ACFC;ACFC;1100 116A;ACFC;1100 116A; # (과; 과; 과; 과; 과; ) HANGUL SYLLABLE GWA ACFD;ACFD;1100 116A 11A8;ACFD;1100 116A 11A8; # (곽; 곽; 곽; 곽; 곽; ) HANGUL SYLLABLE GWAG ACFE;ACFE;1100 116A 11A9;ACFE;1100 116A 11A9; # (곾; 곾; 곾; 곾; 곾; ) HANGUL SYLLABLE GWAGG ACFF;ACFF;1100 116A 11AA;ACFF;1100 116A 11AA; # (곿; 곿; 곿; 곿; 곿; ) HANGUL SYLLABLE GWAGS AD00;AD00;1100 116A 11AB;AD00;1100 116A 11AB; # (관; 관; 관; 관; 관; ) HANGUL SYLLABLE GWAN AD01;AD01;1100 116A 11AC;AD01;1100 116A 11AC; # (괁; 괁; 괁; 괁; 괁; ) HANGUL SYLLABLE GWANJ AD02;AD02;1100 116A 11AD;AD02;1100 116A 11AD; # (괂; 괂; 괂; 괂; 괂; ) HANGUL SYLLABLE GWANH AD03;AD03;1100 116A 11AE;AD03;1100 116A 11AE; # (괃; 괃; 괃; 괃; 괃; ) HANGUL SYLLABLE GWAD AD04;AD04;1100 116A 11AF;AD04;1100 116A 11AF; # (괄; 괄; 괄; 괄; 괄; ) HANGUL SYLLABLE GWAL AD05;AD05;1100 116A 11B0;AD05;1100 116A 11B0; # (괅; 괅; 괅; 괅; 괅; ) HANGUL SYLLABLE GWALG AD06;AD06;1100 116A 11B1;AD06;1100 116A 11B1; # (괆; 괆; 괆; 괆; 괆; ) HANGUL SYLLABLE GWALM AD07;AD07;1100 116A 11B2;AD07;1100 116A 11B2; # (괇; 괇; 괇; 괇; 괇; ) HANGUL SYLLABLE GWALB AD08;AD08;1100 116A 11B3;AD08;1100 116A 11B3; # (괈; 괈; 괈; 괈; 괈; ) HANGUL SYLLABLE GWALS AD09;AD09;1100 116A 11B4;AD09;1100 116A 11B4; # (괉; 괉; 괉; 괉; 괉; ) HANGUL SYLLABLE GWALT AD0A;AD0A;1100 116A 11B5;AD0A;1100 116A 11B5; # (괊; 괊; 괊; 괊; 괊; ) HANGUL SYLLABLE GWALP AD0B;AD0B;1100 116A 11B6;AD0B;1100 116A 11B6; # (괋; 괋; 괋; 괋; 괋; ) HANGUL SYLLABLE GWALH AD0C;AD0C;1100 116A 11B7;AD0C;1100 116A 11B7; # (괌; 괌; 괌; 괌; 괌; ) HANGUL SYLLABLE GWAM AD0D;AD0D;1100 116A 11B8;AD0D;1100 116A 11B8; # (괍; 괍; 괍; 괍; 괍; ) HANGUL SYLLABLE GWAB AD0E;AD0E;1100 116A 11B9;AD0E;1100 116A 11B9; # (괎; 괎; 괎; 괎; 괎; ) HANGUL SYLLABLE GWABS AD0F;AD0F;1100 116A 11BA;AD0F;1100 116A 11BA; # (괏; 괏; 괏; 괏; 괏; ) HANGUL SYLLABLE GWAS AD10;AD10;1100 116A 11BB;AD10;1100 116A 11BB; # (괐; 괐; 괐; 괐; 괐; ) HANGUL SYLLABLE GWASS AD11;AD11;1100 116A 11BC;AD11;1100 116A 11BC; # (광; 광; 광; 광; 광; ) HANGUL SYLLABLE GWANG AD12;AD12;1100 116A 11BD;AD12;1100 116A 11BD; # (괒; 괒; 괒; 괒; 괒; ) HANGUL SYLLABLE GWAJ AD13;AD13;1100 116A 11BE;AD13;1100 116A 11BE; # (괓; 괓; 괓; 괓; 괓; ) HANGUL SYLLABLE GWAC AD14;AD14;1100 116A 11BF;AD14;1100 116A 11BF; # (괔; 괔; 괔; 괔; 괔; ) HANGUL SYLLABLE GWAK AD15;AD15;1100 116A 11C0;AD15;1100 116A 11C0; # (괕; 괕; 괕; 괕; 괕; ) HANGUL SYLLABLE GWAT AD16;AD16;1100 116A 11C1;AD16;1100 116A 11C1; # (괖; 괖; 괖; 괖; 괖; ) HANGUL SYLLABLE GWAP AD17;AD17;1100 116A 11C2;AD17;1100 116A 11C2; # (괗; 괗; 괗; 괗; 괗; ) HANGUL SYLLABLE GWAH AD18;AD18;1100 116B;AD18;1100 116B; # (괘; 괘; 괘; 괘; 괘; ) HANGUL SYLLABLE GWAE AD19;AD19;1100 116B 11A8;AD19;1100 116B 11A8; # (괙; 괙; 괙; 괙; 괙; ) HANGUL SYLLABLE GWAEG AD1A;AD1A;1100 116B 11A9;AD1A;1100 116B 11A9; # (괚; 괚; 괚; 괚; 괚; ) HANGUL SYLLABLE GWAEGG AD1B;AD1B;1100 116B 11AA;AD1B;1100 116B 11AA; # (괛; 괛; 괛; 괛; 괛; ) HANGUL SYLLABLE GWAEGS AD1C;AD1C;1100 116B 11AB;AD1C;1100 116B 11AB; # (괜; 괜; 괜; 괜; 괜; ) HANGUL SYLLABLE GWAEN AD1D;AD1D;1100 116B 11AC;AD1D;1100 116B 11AC; # (괝; 괝; 괝; 괝; 괝; ) HANGUL SYLLABLE GWAENJ AD1E;AD1E;1100 116B 11AD;AD1E;1100 116B 11AD; # (괞; 괞; 괞; 괞; 괞; ) HANGUL SYLLABLE GWAENH AD1F;AD1F;1100 116B 11AE;AD1F;1100 116B 11AE; # (괟; 괟; 괟; 괟; 괟; ) HANGUL SYLLABLE GWAED AD20;AD20;1100 116B 11AF;AD20;1100 116B 11AF; # (괠; 괠; 괠; 괠; 괠; ) HANGUL SYLLABLE GWAEL AD21;AD21;1100 116B 11B0;AD21;1100 116B 11B0; # (괡; 괡; 괡; 괡; 괡; ) HANGUL SYLLABLE GWAELG AD22;AD22;1100 116B 11B1;AD22;1100 116B 11B1; # (괢; 괢; 괢; 괢; 괢; ) HANGUL SYLLABLE GWAELM AD23;AD23;1100 116B 11B2;AD23;1100 116B 11B2; # (괣; 괣; 괣; 괣; 괣; ) HANGUL SYLLABLE GWAELB AD24;AD24;1100 116B 11B3;AD24;1100 116B 11B3; # (괤; 괤; 괤; 괤; 괤; ) HANGUL SYLLABLE GWAELS AD25;AD25;1100 116B 11B4;AD25;1100 116B 11B4; # (괥; 괥; 괥; 괥; 괥; ) HANGUL SYLLABLE GWAELT AD26;AD26;1100 116B 11B5;AD26;1100 116B 11B5; # (괦; 괦; 괦; 괦; 괦; ) HANGUL SYLLABLE GWAELP AD27;AD27;1100 116B 11B6;AD27;1100 116B 11B6; # (괧; 괧; 괧; 괧; 괧; ) HANGUL SYLLABLE GWAELH AD28;AD28;1100 116B 11B7;AD28;1100 116B 11B7; # (괨; 괨; 괨; 괨; 괨; ) HANGUL SYLLABLE GWAEM AD29;AD29;1100 116B 11B8;AD29;1100 116B 11B8; # (괩; 괩; 괩; 괩; 괩; ) HANGUL SYLLABLE GWAEB AD2A;AD2A;1100 116B 11B9;AD2A;1100 116B 11B9; # (괪; 괪; 괪; 괪; 괪; ) HANGUL SYLLABLE GWAEBS AD2B;AD2B;1100 116B 11BA;AD2B;1100 116B 11BA; # (괫; 괫; 괫; 괫; 괫; ) HANGUL SYLLABLE GWAES AD2C;AD2C;1100 116B 11BB;AD2C;1100 116B 11BB; # (괬; 괬; 괬; 괬; 괬; ) HANGUL SYLLABLE GWAESS AD2D;AD2D;1100 116B 11BC;AD2D;1100 116B 11BC; # (괭; 괭; 괭; 괭; 괭; ) HANGUL SYLLABLE GWAENG AD2E;AD2E;1100 116B 11BD;AD2E;1100 116B 11BD; # (괮; 괮; 괮; 괮; 괮; ) HANGUL SYLLABLE GWAEJ AD2F;AD2F;1100 116B 11BE;AD2F;1100 116B 11BE; # (괯; 괯; 괯; 괯; 괯; ) HANGUL SYLLABLE GWAEC AD30;AD30;1100 116B 11BF;AD30;1100 116B 11BF; # (괰; 괰; 괰; 괰; 괰; ) HANGUL SYLLABLE GWAEK AD31;AD31;1100 116B 11C0;AD31;1100 116B 11C0; # (괱; 괱; 괱; 괱; 괱; ) HANGUL SYLLABLE GWAET AD32;AD32;1100 116B 11C1;AD32;1100 116B 11C1; # (괲; 괲; 괲; 괲; 괲; ) HANGUL SYLLABLE GWAEP AD33;AD33;1100 116B 11C2;AD33;1100 116B 11C2; # (괳; 괳; 괳; 괳; 괳; ) HANGUL SYLLABLE GWAEH AD34;AD34;1100 116C;AD34;1100 116C; # (괴; 괴; 괴; 괴; 괴; ) HANGUL SYLLABLE GOE AD35;AD35;1100 116C 11A8;AD35;1100 116C 11A8; # (괵; 괵; 괵; 괵; 괵; ) HANGUL SYLLABLE GOEG AD36;AD36;1100 116C 11A9;AD36;1100 116C 11A9; # (괶; 괶; 괶; 괶; 괶; ) HANGUL SYLLABLE GOEGG AD37;AD37;1100 116C 11AA;AD37;1100 116C 11AA; # (괷; 괷; 괷; 괷; 괷; ) HANGUL SYLLABLE GOEGS AD38;AD38;1100 116C 11AB;AD38;1100 116C 11AB; # (괸; 괸; 괸; 괸; 괸; ) HANGUL SYLLABLE GOEN AD39;AD39;1100 116C 11AC;AD39;1100 116C 11AC; # (괹; 괹; 괹; 괹; 괹; ) HANGUL SYLLABLE GOENJ AD3A;AD3A;1100 116C 11AD;AD3A;1100 116C 11AD; # (괺; 괺; 괺; 괺; 괺; ) HANGUL SYLLABLE GOENH AD3B;AD3B;1100 116C 11AE;AD3B;1100 116C 11AE; # (괻; 괻; 괻; 괻; 괻; ) HANGUL SYLLABLE GOED AD3C;AD3C;1100 116C 11AF;AD3C;1100 116C 11AF; # (괼; 괼; 괼; 괼; 괼; ) HANGUL SYLLABLE GOEL AD3D;AD3D;1100 116C 11B0;AD3D;1100 116C 11B0; # (괽; 괽; 괽; 괽; 괽; ) HANGUL SYLLABLE GOELG AD3E;AD3E;1100 116C 11B1;AD3E;1100 116C 11B1; # (괾; 괾; 괾; 괾; 괾; ) HANGUL SYLLABLE GOELM AD3F;AD3F;1100 116C 11B2;AD3F;1100 116C 11B2; # (괿; 괿; 괿; 괿; 괿; ) HANGUL SYLLABLE GOELB AD40;AD40;1100 116C 11B3;AD40;1100 116C 11B3; # (굀; 굀; 굀; 굀; 굀; ) HANGUL SYLLABLE GOELS AD41;AD41;1100 116C 11B4;AD41;1100 116C 11B4; # (굁; 굁; 굁; 굁; 굁; ) HANGUL SYLLABLE GOELT AD42;AD42;1100 116C 11B5;AD42;1100 116C 11B5; # (굂; 굂; 굂; 굂; 굂; ) HANGUL SYLLABLE GOELP AD43;AD43;1100 116C 11B6;AD43;1100 116C 11B6; # (굃; 굃; 굃; 굃; 굃; ) HANGUL SYLLABLE GOELH AD44;AD44;1100 116C 11B7;AD44;1100 116C 11B7; # (굄; 굄; 굄; 굄; 굄; ) HANGUL SYLLABLE GOEM AD45;AD45;1100 116C 11B8;AD45;1100 116C 11B8; # (굅; 굅; 굅; 굅; 굅; ) HANGUL SYLLABLE GOEB AD46;AD46;1100 116C 11B9;AD46;1100 116C 11B9; # (굆; 굆; 굆; 굆; 굆; ) HANGUL SYLLABLE GOEBS AD47;AD47;1100 116C 11BA;AD47;1100 116C 11BA; # (굇; 굇; 굇; 굇; 굇; ) HANGUL SYLLABLE GOES AD48;AD48;1100 116C 11BB;AD48;1100 116C 11BB; # (굈; 굈; 굈; 굈; 굈; ) HANGUL SYLLABLE GOESS AD49;AD49;1100 116C 11BC;AD49;1100 116C 11BC; # (굉; 굉; 굉; 굉; 굉; ) HANGUL SYLLABLE GOENG AD4A;AD4A;1100 116C 11BD;AD4A;1100 116C 11BD; # (굊; 굊; 굊; 굊; 굊; ) HANGUL SYLLABLE GOEJ AD4B;AD4B;1100 116C 11BE;AD4B;1100 116C 11BE; # (굋; 굋; 굋; 굋; 굋; ) HANGUL SYLLABLE GOEC AD4C;AD4C;1100 116C 11BF;AD4C;1100 116C 11BF; # (굌; 굌; 굌; 굌; 굌; ) HANGUL SYLLABLE GOEK AD4D;AD4D;1100 116C 11C0;AD4D;1100 116C 11C0; # (굍; 굍; 굍; 굍; 굍; ) HANGUL SYLLABLE GOET AD4E;AD4E;1100 116C 11C1;AD4E;1100 116C 11C1; # (굎; 굎; 굎; 굎; 굎; ) HANGUL SYLLABLE GOEP AD4F;AD4F;1100 116C 11C2;AD4F;1100 116C 11C2; # (굏; 굏; 굏; 굏; 굏; ) HANGUL SYLLABLE GOEH AD50;AD50;1100 116D;AD50;1100 116D; # (교; 교; 교; 교; 교; ) HANGUL SYLLABLE GYO AD51;AD51;1100 116D 11A8;AD51;1100 116D 11A8; # (굑; 굑; 굑; 굑; 굑; ) HANGUL SYLLABLE GYOG AD52;AD52;1100 116D 11A9;AD52;1100 116D 11A9; # (굒; 굒; 굒; 굒; 굒; ) HANGUL SYLLABLE GYOGG AD53;AD53;1100 116D 11AA;AD53;1100 116D 11AA; # (굓; 굓; 굓; 굓; 굓; ) HANGUL SYLLABLE GYOGS AD54;AD54;1100 116D 11AB;AD54;1100 116D 11AB; # (굔; 굔; 굔; 굔; 굔; ) HANGUL SYLLABLE GYON AD55;AD55;1100 116D 11AC;AD55;1100 116D 11AC; # (굕; 굕; 굕; 굕; 굕; ) HANGUL SYLLABLE GYONJ AD56;AD56;1100 116D 11AD;AD56;1100 116D 11AD; # (굖; 굖; 굖; 굖; 굖; ) HANGUL SYLLABLE GYONH AD57;AD57;1100 116D 11AE;AD57;1100 116D 11AE; # (굗; 굗; 굗; 굗; 굗; ) HANGUL SYLLABLE GYOD AD58;AD58;1100 116D 11AF;AD58;1100 116D 11AF; # (굘; 굘; 굘; 굘; 굘; ) HANGUL SYLLABLE GYOL AD59;AD59;1100 116D 11B0;AD59;1100 116D 11B0; # (굙; 굙; 굙; 굙; 굙; ) HANGUL SYLLABLE GYOLG AD5A;AD5A;1100 116D 11B1;AD5A;1100 116D 11B1; # (굚; 굚; 굚; 굚; 굚; ) HANGUL SYLLABLE GYOLM AD5B;AD5B;1100 116D 11B2;AD5B;1100 116D 11B2; # (굛; 굛; 굛; 굛; 굛; ) HANGUL SYLLABLE GYOLB AD5C;AD5C;1100 116D 11B3;AD5C;1100 116D 11B3; # (굜; 굜; 굜; 굜; 굜; ) HANGUL SYLLABLE GYOLS AD5D;AD5D;1100 116D 11B4;AD5D;1100 116D 11B4; # (굝; 굝; 굝; 굝; 굝; ) HANGUL SYLLABLE GYOLT AD5E;AD5E;1100 116D 11B5;AD5E;1100 116D 11B5; # (굞; 굞; 굞; 굞; 굞; ) HANGUL SYLLABLE GYOLP AD5F;AD5F;1100 116D 11B6;AD5F;1100 116D 11B6; # (굟; 굟; 굟; 굟; 굟; ) HANGUL SYLLABLE GYOLH AD60;AD60;1100 116D 11B7;AD60;1100 116D 11B7; # (굠; 굠; 굠; 굠; 굠; ) HANGUL SYLLABLE GYOM AD61;AD61;1100 116D 11B8;AD61;1100 116D 11B8; # (굡; 굡; 굡; 굡; 굡; ) HANGUL SYLLABLE GYOB AD62;AD62;1100 116D 11B9;AD62;1100 116D 11B9; # (굢; 굢; 굢; 굢; 굢; ) HANGUL SYLLABLE GYOBS AD63;AD63;1100 116D 11BA;AD63;1100 116D 11BA; # (굣; 굣; 굣; 굣; 굣; ) HANGUL SYLLABLE GYOS AD64;AD64;1100 116D 11BB;AD64;1100 116D 11BB; # (굤; 굤; 굤; 굤; 굤; ) HANGUL SYLLABLE GYOSS AD65;AD65;1100 116D 11BC;AD65;1100 116D 11BC; # (굥; 굥; 굥; 굥; 굥; ) HANGUL SYLLABLE GYONG AD66;AD66;1100 116D 11BD;AD66;1100 116D 11BD; # (굦; 굦; 굦; 굦; 굦; ) HANGUL SYLLABLE GYOJ AD67;AD67;1100 116D 11BE;AD67;1100 116D 11BE; # (굧; 굧; 굧; 굧; 굧; ) HANGUL SYLLABLE GYOC AD68;AD68;1100 116D 11BF;AD68;1100 116D 11BF; # (굨; 굨; 굨; 굨; 굨; ) HANGUL SYLLABLE GYOK AD69;AD69;1100 116D 11C0;AD69;1100 116D 11C0; # (굩; 굩; 굩; 굩; 굩; ) HANGUL SYLLABLE GYOT AD6A;AD6A;1100 116D 11C1;AD6A;1100 116D 11C1; # (굪; 굪; 굪; 굪; 굪; ) HANGUL SYLLABLE GYOP AD6B;AD6B;1100 116D 11C2;AD6B;1100 116D 11C2; # (굫; 굫; 굫; 굫; 굫; ) HANGUL SYLLABLE GYOH AD6C;AD6C;1100 116E;AD6C;1100 116E; # (구; 구; 구; 구; 구; ) HANGUL SYLLABLE GU AD6D;AD6D;1100 116E 11A8;AD6D;1100 116E 11A8; # (국; 국; 국; 국; 국; ) HANGUL SYLLABLE GUG AD6E;AD6E;1100 116E 11A9;AD6E;1100 116E 11A9; # (굮; 굮; 굮; 굮; 굮; ) HANGUL SYLLABLE GUGG AD6F;AD6F;1100 116E 11AA;AD6F;1100 116E 11AA; # (굯; 굯; 굯; 굯; 굯; ) HANGUL SYLLABLE GUGS AD70;AD70;1100 116E 11AB;AD70;1100 116E 11AB; # (군; 군; 군; 군; 군; ) HANGUL SYLLABLE GUN AD71;AD71;1100 116E 11AC;AD71;1100 116E 11AC; # (굱; 굱; 굱; 굱; 굱; ) HANGUL SYLLABLE GUNJ AD72;AD72;1100 116E 11AD;AD72;1100 116E 11AD; # (굲; 굲; 굲; 굲; 굲; ) HANGUL SYLLABLE GUNH AD73;AD73;1100 116E 11AE;AD73;1100 116E 11AE; # (굳; 굳; 굳; 굳; 굳; ) HANGUL SYLLABLE GUD AD74;AD74;1100 116E 11AF;AD74;1100 116E 11AF; # (굴; 굴; 굴; 굴; 굴; ) HANGUL SYLLABLE GUL AD75;AD75;1100 116E 11B0;AD75;1100 116E 11B0; # (굵; 굵; 굵; 굵; 굵; ) HANGUL SYLLABLE GULG AD76;AD76;1100 116E 11B1;AD76;1100 116E 11B1; # (굶; 굶; 굶; 굶; 굶; ) HANGUL SYLLABLE GULM AD77;AD77;1100 116E 11B2;AD77;1100 116E 11B2; # (굷; 굷; 굷; 굷; 굷; ) HANGUL SYLLABLE GULB AD78;AD78;1100 116E 11B3;AD78;1100 116E 11B3; # (굸; 굸; 굸; 굸; 굸; ) HANGUL SYLLABLE GULS AD79;AD79;1100 116E 11B4;AD79;1100 116E 11B4; # (굹; 굹; 굹; 굹; 굹; ) HANGUL SYLLABLE GULT AD7A;AD7A;1100 116E 11B5;AD7A;1100 116E 11B5; # (굺; 굺; 굺; 굺; 굺; ) HANGUL SYLLABLE GULP AD7B;AD7B;1100 116E 11B6;AD7B;1100 116E 11B6; # (굻; 굻; 굻; 굻; 굻; ) HANGUL SYLLABLE GULH AD7C;AD7C;1100 116E 11B7;AD7C;1100 116E 11B7; # (굼; 굼; 굼; 굼; 굼; ) HANGUL SYLLABLE GUM AD7D;AD7D;1100 116E 11B8;AD7D;1100 116E 11B8; # (굽; 굽; 굽; 굽; 굽; ) HANGUL SYLLABLE GUB AD7E;AD7E;1100 116E 11B9;AD7E;1100 116E 11B9; # (굾; 굾; 굾; 굾; 굾; ) HANGUL SYLLABLE GUBS AD7F;AD7F;1100 116E 11BA;AD7F;1100 116E 11BA; # (굿; 굿; 굿; 굿; 굿; ) HANGUL SYLLABLE GUS AD80;AD80;1100 116E 11BB;AD80;1100 116E 11BB; # (궀; 궀; 궀; 궀; 궀; ) HANGUL SYLLABLE GUSS AD81;AD81;1100 116E 11BC;AD81;1100 116E 11BC; # (궁; 궁; 궁; 궁; 궁; ) HANGUL SYLLABLE GUNG AD82;AD82;1100 116E 11BD;AD82;1100 116E 11BD; # (궂; 궂; 궂; 궂; 궂; ) HANGUL SYLLABLE GUJ AD83;AD83;1100 116E 11BE;AD83;1100 116E 11BE; # (궃; 궃; 궃; 궃; 궃; ) HANGUL SYLLABLE GUC AD84;AD84;1100 116E 11BF;AD84;1100 116E 11BF; # (궄; 궄; 궄; 궄; 궄; ) HANGUL SYLLABLE GUK AD85;AD85;1100 116E 11C0;AD85;1100 116E 11C0; # (궅; 궅; 궅; 궅; 궅; ) HANGUL SYLLABLE GUT AD86;AD86;1100 116E 11C1;AD86;1100 116E 11C1; # (궆; 궆; 궆; 궆; 궆; ) HANGUL SYLLABLE GUP AD87;AD87;1100 116E 11C2;AD87;1100 116E 11C2; # (궇; 궇; 궇; 궇; 궇; ) HANGUL SYLLABLE GUH AD88;AD88;1100 116F;AD88;1100 116F; # (궈; 궈; 궈; 궈; 궈; ) HANGUL SYLLABLE GWEO AD89;AD89;1100 116F 11A8;AD89;1100 116F 11A8; # (궉; 궉; 궉; 궉; 궉; ) HANGUL SYLLABLE GWEOG AD8A;AD8A;1100 116F 11A9;AD8A;1100 116F 11A9; # (궊; 궊; 궊; 궊; 궊; ) HANGUL SYLLABLE GWEOGG AD8B;AD8B;1100 116F 11AA;AD8B;1100 116F 11AA; # (궋; 궋; 궋; 궋; 궋; ) HANGUL SYLLABLE GWEOGS AD8C;AD8C;1100 116F 11AB;AD8C;1100 116F 11AB; # (권; 권; 권; 권; 권; ) HANGUL SYLLABLE GWEON AD8D;AD8D;1100 116F 11AC;AD8D;1100 116F 11AC; # (궍; 궍; 궍; 궍; 궍; ) HANGUL SYLLABLE GWEONJ AD8E;AD8E;1100 116F 11AD;AD8E;1100 116F 11AD; # (궎; 궎; 궎; 궎; 궎; ) HANGUL SYLLABLE GWEONH AD8F;AD8F;1100 116F 11AE;AD8F;1100 116F 11AE; # (궏; 궏; 궏; 궏; 궏; ) HANGUL SYLLABLE GWEOD AD90;AD90;1100 116F 11AF;AD90;1100 116F 11AF; # (궐; 궐; 궐; 궐; 궐; ) HANGUL SYLLABLE GWEOL AD91;AD91;1100 116F 11B0;AD91;1100 116F 11B0; # (궑; 궑; 궑; 궑; 궑; ) HANGUL SYLLABLE GWEOLG AD92;AD92;1100 116F 11B1;AD92;1100 116F 11B1; # (궒; 궒; 궒; 궒; 궒; ) HANGUL SYLLABLE GWEOLM AD93;AD93;1100 116F 11B2;AD93;1100 116F 11B2; # (궓; 궓; 궓; 궓; 궓; ) HANGUL SYLLABLE GWEOLB AD94;AD94;1100 116F 11B3;AD94;1100 116F 11B3; # (궔; 궔; 궔; 궔; 궔; ) HANGUL SYLLABLE GWEOLS AD95;AD95;1100 116F 11B4;AD95;1100 116F 11B4; # (궕; 궕; 궕; 궕; 궕; ) HANGUL SYLLABLE GWEOLT AD96;AD96;1100 116F 11B5;AD96;1100 116F 11B5; # (궖; 궖; 궖; 궖; 궖; ) HANGUL SYLLABLE GWEOLP AD97;AD97;1100 116F 11B6;AD97;1100 116F 11B6; # (궗; 궗; 궗; 궗; 궗; ) HANGUL SYLLABLE GWEOLH AD98;AD98;1100 116F 11B7;AD98;1100 116F 11B7; # (궘; 궘; 궘; 궘; 궘; ) HANGUL SYLLABLE GWEOM AD99;AD99;1100 116F 11B8;AD99;1100 116F 11B8; # (궙; 궙; 궙; 궙; 궙; ) HANGUL SYLLABLE GWEOB AD9A;AD9A;1100 116F 11B9;AD9A;1100 116F 11B9; # (궚; 궚; 궚; 궚; 궚; ) HANGUL SYLLABLE GWEOBS AD9B;AD9B;1100 116F 11BA;AD9B;1100 116F 11BA; # (궛; 궛; 궛; 궛; 궛; ) HANGUL SYLLABLE GWEOS AD9C;AD9C;1100 116F 11BB;AD9C;1100 116F 11BB; # (궜; 궜; 궜; 궜; 궜; ) HANGUL SYLLABLE GWEOSS AD9D;AD9D;1100 116F 11BC;AD9D;1100 116F 11BC; # (궝; 궝; 궝; 궝; 궝; ) HANGUL SYLLABLE GWEONG AD9E;AD9E;1100 116F 11BD;AD9E;1100 116F 11BD; # (궞; 궞; 궞; 궞; 궞; ) HANGUL SYLLABLE GWEOJ AD9F;AD9F;1100 116F 11BE;AD9F;1100 116F 11BE; # (궟; 궟; 궟; 궟; 궟; ) HANGUL SYLLABLE GWEOC ADA0;ADA0;1100 116F 11BF;ADA0;1100 116F 11BF; # (궠; 궠; 궠; 궠; 궠; ) HANGUL SYLLABLE GWEOK ADA1;ADA1;1100 116F 11C0;ADA1;1100 116F 11C0; # (궡; 궡; 궡; 궡; 궡; ) HANGUL SYLLABLE GWEOT ADA2;ADA2;1100 116F 11C1;ADA2;1100 116F 11C1; # (궢; 궢; 궢; 궢; 궢; ) HANGUL SYLLABLE GWEOP ADA3;ADA3;1100 116F 11C2;ADA3;1100 116F 11C2; # (궣; 궣; 궣; 궣; 궣; ) HANGUL SYLLABLE GWEOH ADA4;ADA4;1100 1170;ADA4;1100 1170; # (궤; 궤; 궤; 궤; 궤; ) HANGUL SYLLABLE GWE ADA5;ADA5;1100 1170 11A8;ADA5;1100 1170 11A8; # (궥; 궥; 궥; 궥; 궥; ) HANGUL SYLLABLE GWEG ADA6;ADA6;1100 1170 11A9;ADA6;1100 1170 11A9; # (궦; 궦; 궦; 궦; 궦; ) HANGUL SYLLABLE GWEGG ADA7;ADA7;1100 1170 11AA;ADA7;1100 1170 11AA; # (궧; 궧; 궧; 궧; 궧; ) HANGUL SYLLABLE GWEGS ADA8;ADA8;1100 1170 11AB;ADA8;1100 1170 11AB; # (궨; 궨; 궨; 궨; 궨; ) HANGUL SYLLABLE GWEN ADA9;ADA9;1100 1170 11AC;ADA9;1100 1170 11AC; # (궩; 궩; 궩; 궩; 궩; ) HANGUL SYLLABLE GWENJ ADAA;ADAA;1100 1170 11AD;ADAA;1100 1170 11AD; # (궪; 궪; 궪; 궪; 궪; ) HANGUL SYLLABLE GWENH ADAB;ADAB;1100 1170 11AE;ADAB;1100 1170 11AE; # (궫; 궫; 궫; 궫; 궫; ) HANGUL SYLLABLE GWED ADAC;ADAC;1100 1170 11AF;ADAC;1100 1170 11AF; # (궬; 궬; 궬; 궬; 궬; ) HANGUL SYLLABLE GWEL ADAD;ADAD;1100 1170 11B0;ADAD;1100 1170 11B0; # (궭; 궭; 궭; 궭; 궭; ) HANGUL SYLLABLE GWELG ADAE;ADAE;1100 1170 11B1;ADAE;1100 1170 11B1; # (궮; 궮; 궮; 궮; 궮; ) HANGUL SYLLABLE GWELM ADAF;ADAF;1100 1170 11B2;ADAF;1100 1170 11B2; # (궯; 궯; 궯; 궯; 궯; ) HANGUL SYLLABLE GWELB ADB0;ADB0;1100 1170 11B3;ADB0;1100 1170 11B3; # (궰; 궰; 궰; 궰; 궰; ) HANGUL SYLLABLE GWELS ADB1;ADB1;1100 1170 11B4;ADB1;1100 1170 11B4; # (궱; 궱; 궱; 궱; 궱; ) HANGUL SYLLABLE GWELT ADB2;ADB2;1100 1170 11B5;ADB2;1100 1170 11B5; # (궲; 궲; 궲; 궲; 궲; ) HANGUL SYLLABLE GWELP ADB3;ADB3;1100 1170 11B6;ADB3;1100 1170 11B6; # (궳; 궳; 궳; 궳; 궳; ) HANGUL SYLLABLE GWELH ADB4;ADB4;1100 1170 11B7;ADB4;1100 1170 11B7; # (궴; 궴; 궴; 궴; 궴; ) HANGUL SYLLABLE GWEM ADB5;ADB5;1100 1170 11B8;ADB5;1100 1170 11B8; # (궵; 궵; 궵; 궵; 궵; ) HANGUL SYLLABLE GWEB ADB6;ADB6;1100 1170 11B9;ADB6;1100 1170 11B9; # (궶; 궶; 궶; 궶; 궶; ) HANGUL SYLLABLE GWEBS ADB7;ADB7;1100 1170 11BA;ADB7;1100 1170 11BA; # (궷; 궷; 궷; 궷; 궷; ) HANGUL SYLLABLE GWES ADB8;ADB8;1100 1170 11BB;ADB8;1100 1170 11BB; # (궸; 궸; 궸; 궸; 궸; ) HANGUL SYLLABLE GWESS ADB9;ADB9;1100 1170 11BC;ADB9;1100 1170 11BC; # (궹; 궹; 궹; 궹; 궹; ) HANGUL SYLLABLE GWENG ADBA;ADBA;1100 1170 11BD;ADBA;1100 1170 11BD; # (궺; 궺; 궺; 궺; 궺; ) HANGUL SYLLABLE GWEJ ADBB;ADBB;1100 1170 11BE;ADBB;1100 1170 11BE; # (궻; 궻; 궻; 궻; 궻; ) HANGUL SYLLABLE GWEC ADBC;ADBC;1100 1170 11BF;ADBC;1100 1170 11BF; # (궼; 궼; 궼; 궼; 궼; ) HANGUL SYLLABLE GWEK ADBD;ADBD;1100 1170 11C0;ADBD;1100 1170 11C0; # (궽; 궽; 궽; 궽; 궽; ) HANGUL SYLLABLE GWET ADBE;ADBE;1100 1170 11C1;ADBE;1100 1170 11C1; # (궾; 궾; 궾; 궾; 궾; ) HANGUL SYLLABLE GWEP ADBF;ADBF;1100 1170 11C2;ADBF;1100 1170 11C2; # (궿; 궿; 궿; 궿; 궿; ) HANGUL SYLLABLE GWEH ADC0;ADC0;1100 1171;ADC0;1100 1171; # (귀; 귀; 귀; 귀; 귀; ) HANGUL SYLLABLE GWI ADC1;ADC1;1100 1171 11A8;ADC1;1100 1171 11A8; # (귁; 귁; 귁; 귁; 귁; ) HANGUL SYLLABLE GWIG ADC2;ADC2;1100 1171 11A9;ADC2;1100 1171 11A9; # (귂; 귂; 귂; 귂; 귂; ) HANGUL SYLLABLE GWIGG ADC3;ADC3;1100 1171 11AA;ADC3;1100 1171 11AA; # (귃; 귃; 귃; 귃; 귃; ) HANGUL SYLLABLE GWIGS ADC4;ADC4;1100 1171 11AB;ADC4;1100 1171 11AB; # (귄; 귄; 귄; 귄; 귄; ) HANGUL SYLLABLE GWIN ADC5;ADC5;1100 1171 11AC;ADC5;1100 1171 11AC; # (귅; 귅; 귅; 귅; 귅; ) HANGUL SYLLABLE GWINJ ADC6;ADC6;1100 1171 11AD;ADC6;1100 1171 11AD; # (귆; 귆; 귆; 귆; 귆; ) HANGUL SYLLABLE GWINH ADC7;ADC7;1100 1171 11AE;ADC7;1100 1171 11AE; # (귇; 귇; 귇; 귇; 귇; ) HANGUL SYLLABLE GWID ADC8;ADC8;1100 1171 11AF;ADC8;1100 1171 11AF; # (귈; 귈; 귈; 귈; 귈; ) HANGUL SYLLABLE GWIL ADC9;ADC9;1100 1171 11B0;ADC9;1100 1171 11B0; # (귉; 귉; 귉; 귉; 귉; ) HANGUL SYLLABLE GWILG ADCA;ADCA;1100 1171 11B1;ADCA;1100 1171 11B1; # (귊; 귊; 귊; 귊; 귊; ) HANGUL SYLLABLE GWILM ADCB;ADCB;1100 1171 11B2;ADCB;1100 1171 11B2; # (귋; 귋; 귋; 귋; 귋; ) HANGUL SYLLABLE GWILB ADCC;ADCC;1100 1171 11B3;ADCC;1100 1171 11B3; # (귌; 귌; 귌; 귌; 귌; ) HANGUL SYLLABLE GWILS ADCD;ADCD;1100 1171 11B4;ADCD;1100 1171 11B4; # (귍; 귍; 귍; 귍; 귍; ) HANGUL SYLLABLE GWILT ADCE;ADCE;1100 1171 11B5;ADCE;1100 1171 11B5; # (귎; 귎; 귎; 귎; 귎; ) HANGUL SYLLABLE GWILP ADCF;ADCF;1100 1171 11B6;ADCF;1100 1171 11B6; # (귏; 귏; 귏; 귏; 귏; ) HANGUL SYLLABLE GWILH ADD0;ADD0;1100 1171 11B7;ADD0;1100 1171 11B7; # (귐; 귐; 귐; 귐; 귐; ) HANGUL SYLLABLE GWIM ADD1;ADD1;1100 1171 11B8;ADD1;1100 1171 11B8; # (귑; 귑; 귑; 귑; 귑; ) HANGUL SYLLABLE GWIB ADD2;ADD2;1100 1171 11B9;ADD2;1100 1171 11B9; # (귒; 귒; 귒; 귒; 귒; ) HANGUL SYLLABLE GWIBS ADD3;ADD3;1100 1171 11BA;ADD3;1100 1171 11BA; # (귓; 귓; 귓; 귓; 귓; ) HANGUL SYLLABLE GWIS ADD4;ADD4;1100 1171 11BB;ADD4;1100 1171 11BB; # (귔; 귔; 귔; 귔; 귔; ) HANGUL SYLLABLE GWISS ADD5;ADD5;1100 1171 11BC;ADD5;1100 1171 11BC; # (귕; 귕; 귕; 귕; 귕; ) HANGUL SYLLABLE GWING ADD6;ADD6;1100 1171 11BD;ADD6;1100 1171 11BD; # (귖; 귖; 귖; 귖; 귖; ) HANGUL SYLLABLE GWIJ ADD7;ADD7;1100 1171 11BE;ADD7;1100 1171 11BE; # (귗; 귗; 귗; 귗; 귗; ) HANGUL SYLLABLE GWIC ADD8;ADD8;1100 1171 11BF;ADD8;1100 1171 11BF; # (귘; 귘; 귘; 귘; 귘; ) HANGUL SYLLABLE GWIK ADD9;ADD9;1100 1171 11C0;ADD9;1100 1171 11C0; # (귙; 귙; 귙; 귙; 귙; ) HANGUL SYLLABLE GWIT ADDA;ADDA;1100 1171 11C1;ADDA;1100 1171 11C1; # (귚; 귚; 귚; 귚; 귚; ) HANGUL SYLLABLE GWIP ADDB;ADDB;1100 1171 11C2;ADDB;1100 1171 11C2; # (귛; 귛; 귛; 귛; 귛; ) HANGUL SYLLABLE GWIH ADDC;ADDC;1100 1172;ADDC;1100 1172; # (규; 규; 규; 규; 규; ) HANGUL SYLLABLE GYU ADDD;ADDD;1100 1172 11A8;ADDD;1100 1172 11A8; # (귝; 귝; 귝; 귝; 귝; ) HANGUL SYLLABLE GYUG ADDE;ADDE;1100 1172 11A9;ADDE;1100 1172 11A9; # (귞; 귞; 귞; 귞; 귞; ) HANGUL SYLLABLE GYUGG ADDF;ADDF;1100 1172 11AA;ADDF;1100 1172 11AA; # (귟; 귟; 귟; 귟; 귟; ) HANGUL SYLLABLE GYUGS ADE0;ADE0;1100 1172 11AB;ADE0;1100 1172 11AB; # (균; 균; 균; 균; 균; ) HANGUL SYLLABLE GYUN ADE1;ADE1;1100 1172 11AC;ADE1;1100 1172 11AC; # (귡; 귡; 귡; 귡; 귡; ) HANGUL SYLLABLE GYUNJ ADE2;ADE2;1100 1172 11AD;ADE2;1100 1172 11AD; # (귢; 귢; 귢; 귢; 귢; ) HANGUL SYLLABLE GYUNH ADE3;ADE3;1100 1172 11AE;ADE3;1100 1172 11AE; # (귣; 귣; 귣; 귣; 귣; ) HANGUL SYLLABLE GYUD ADE4;ADE4;1100 1172 11AF;ADE4;1100 1172 11AF; # (귤; 귤; 귤; 귤; 귤; ) HANGUL SYLLABLE GYUL ADE5;ADE5;1100 1172 11B0;ADE5;1100 1172 11B0; # (귥; 귥; 귥; 귥; 귥; ) HANGUL SYLLABLE GYULG ADE6;ADE6;1100 1172 11B1;ADE6;1100 1172 11B1; # (귦; 귦; 귦; 귦; 귦; ) HANGUL SYLLABLE GYULM ADE7;ADE7;1100 1172 11B2;ADE7;1100 1172 11B2; # (귧; 귧; 귧; 귧; 귧; ) HANGUL SYLLABLE GYULB ADE8;ADE8;1100 1172 11B3;ADE8;1100 1172 11B3; # (귨; 귨; 귨; 귨; 귨; ) HANGUL SYLLABLE GYULS ADE9;ADE9;1100 1172 11B4;ADE9;1100 1172 11B4; # (귩; 귩; 귩; 귩; 귩; ) HANGUL SYLLABLE GYULT ADEA;ADEA;1100 1172 11B5;ADEA;1100 1172 11B5; # (귪; 귪; 귪; 귪; 귪; ) HANGUL SYLLABLE GYULP ADEB;ADEB;1100 1172 11B6;ADEB;1100 1172 11B6; # (귫; 귫; 귫; 귫; 귫; ) HANGUL SYLLABLE GYULH ADEC;ADEC;1100 1172 11B7;ADEC;1100 1172 11B7; # (귬; 귬; 귬; 귬; 귬; ) HANGUL SYLLABLE GYUM ADED;ADED;1100 1172 11B8;ADED;1100 1172 11B8; # (귭; 귭; 귭; 귭; 귭; ) HANGUL SYLLABLE GYUB ADEE;ADEE;1100 1172 11B9;ADEE;1100 1172 11B9; # (귮; 귮; 귮; 귮; 귮; ) HANGUL SYLLABLE GYUBS ADEF;ADEF;1100 1172 11BA;ADEF;1100 1172 11BA; # (귯; 귯; 귯; 귯; 귯; ) HANGUL SYLLABLE GYUS ADF0;ADF0;1100 1172 11BB;ADF0;1100 1172 11BB; # (귰; 귰; 귰; 귰; 귰; ) HANGUL SYLLABLE GYUSS ADF1;ADF1;1100 1172 11BC;ADF1;1100 1172 11BC; # (귱; 귱; 귱; 귱; 귱; ) HANGUL SYLLABLE GYUNG ADF2;ADF2;1100 1172 11BD;ADF2;1100 1172 11BD; # (귲; 귲; 귲; 귲; 귲; ) HANGUL SYLLABLE GYUJ ADF3;ADF3;1100 1172 11BE;ADF3;1100 1172 11BE; # (귳; 귳; 귳; 귳; 귳; ) HANGUL SYLLABLE GYUC ADF4;ADF4;1100 1172 11BF;ADF4;1100 1172 11BF; # (귴; 귴; 귴; 귴; 귴; ) HANGUL SYLLABLE GYUK ADF5;ADF5;1100 1172 11C0;ADF5;1100 1172 11C0; # (귵; 귵; 귵; 귵; 귵; ) HANGUL SYLLABLE GYUT ADF6;ADF6;1100 1172 11C1;ADF6;1100 1172 11C1; # (귶; 귶; 귶; 귶; 귶; ) HANGUL SYLLABLE GYUP ADF7;ADF7;1100 1172 11C2;ADF7;1100 1172 11C2; # (귷; 귷; 귷; 귷; 귷; ) HANGUL SYLLABLE GYUH ADF8;ADF8;1100 1173;ADF8;1100 1173; # (그; 그; 그; 그; 그; ) HANGUL SYLLABLE GEU ADF9;ADF9;1100 1173 11A8;ADF9;1100 1173 11A8; # (극; 극; 극; 극; 극; ) HANGUL SYLLABLE GEUG ADFA;ADFA;1100 1173 11A9;ADFA;1100 1173 11A9; # (귺; 귺; 귺; 귺; 귺; ) HANGUL SYLLABLE GEUGG ADFB;ADFB;1100 1173 11AA;ADFB;1100 1173 11AA; # (귻; 귻; 귻; 귻; 귻; ) HANGUL SYLLABLE GEUGS ADFC;ADFC;1100 1173 11AB;ADFC;1100 1173 11AB; # (근; 근; 근; 근; 근; ) HANGUL SYLLABLE GEUN ADFD;ADFD;1100 1173 11AC;ADFD;1100 1173 11AC; # (귽; 귽; 귽; 귽; 귽; ) HANGUL SYLLABLE GEUNJ ADFE;ADFE;1100 1173 11AD;ADFE;1100 1173 11AD; # (귾; 귾; 귾; 귾; 귾; ) HANGUL SYLLABLE GEUNH ADFF;ADFF;1100 1173 11AE;ADFF;1100 1173 11AE; # (귿; 귿; 귿; 귿; 귿; ) HANGUL SYLLABLE GEUD AE00;AE00;1100 1173 11AF;AE00;1100 1173 11AF; # (글; 글; 글; 글; 글; ) HANGUL SYLLABLE GEUL AE01;AE01;1100 1173 11B0;AE01;1100 1173 11B0; # (긁; 긁; 긁; 긁; 긁; ) HANGUL SYLLABLE GEULG AE02;AE02;1100 1173 11B1;AE02;1100 1173 11B1; # (긂; 긂; 긂; 긂; 긂; ) HANGUL SYLLABLE GEULM AE03;AE03;1100 1173 11B2;AE03;1100 1173 11B2; # (긃; 긃; 긃; 긃; 긃; ) HANGUL SYLLABLE GEULB AE04;AE04;1100 1173 11B3;AE04;1100 1173 11B3; # (긄; 긄; 긄; 긄; 긄; ) HANGUL SYLLABLE GEULS AE05;AE05;1100 1173 11B4;AE05;1100 1173 11B4; # (긅; 긅; 긅; 긅; 긅; ) HANGUL SYLLABLE GEULT AE06;AE06;1100 1173 11B5;AE06;1100 1173 11B5; # (긆; 긆; 긆; 긆; 긆; ) HANGUL SYLLABLE GEULP AE07;AE07;1100 1173 11B6;AE07;1100 1173 11B6; # (긇; 긇; 긇; 긇; 긇; ) HANGUL SYLLABLE GEULH AE08;AE08;1100 1173 11B7;AE08;1100 1173 11B7; # (금; 금; 금; 금; 금; ) HANGUL SYLLABLE GEUM AE09;AE09;1100 1173 11B8;AE09;1100 1173 11B8; # (급; 급; 급; 급; 급; ) HANGUL SYLLABLE GEUB AE0A;AE0A;1100 1173 11B9;AE0A;1100 1173 11B9; # (긊; 긊; 긊; 긊; 긊; ) HANGUL SYLLABLE GEUBS AE0B;AE0B;1100 1173 11BA;AE0B;1100 1173 11BA; # (긋; 긋; 긋; 긋; 긋; ) HANGUL SYLLABLE GEUS AE0C;AE0C;1100 1173 11BB;AE0C;1100 1173 11BB; # (긌; 긌; 긌; 긌; 긌; ) HANGUL SYLLABLE GEUSS AE0D;AE0D;1100 1173 11BC;AE0D;1100 1173 11BC; # (긍; 긍; 긍; 긍; 긍; ) HANGUL SYLLABLE GEUNG AE0E;AE0E;1100 1173 11BD;AE0E;1100 1173 11BD; # (긎; 긎; 긎; 긎; 긎; ) HANGUL SYLLABLE GEUJ AE0F;AE0F;1100 1173 11BE;AE0F;1100 1173 11BE; # (긏; 긏; 긏; 긏; 긏; ) HANGUL SYLLABLE GEUC AE10;AE10;1100 1173 11BF;AE10;1100 1173 11BF; # (긐; 긐; 긐; 긐; 긐; ) HANGUL SYLLABLE GEUK AE11;AE11;1100 1173 11C0;AE11;1100 1173 11C0; # (긑; 긑; 긑; 긑; 긑; ) HANGUL SYLLABLE GEUT AE12;AE12;1100 1173 11C1;AE12;1100 1173 11C1; # (긒; 긒; 긒; 긒; 긒; ) HANGUL SYLLABLE GEUP AE13;AE13;1100 1173 11C2;AE13;1100 1173 11C2; # (긓; 긓; 긓; 긓; 긓; ) HANGUL SYLLABLE GEUH AE14;AE14;1100 1174;AE14;1100 1174; # (긔; 긔; 긔; 긔; 긔; ) HANGUL SYLLABLE GYI AE15;AE15;1100 1174 11A8;AE15;1100 1174 11A8; # (긕; 긕; 긕; 긕; 긕; ) HANGUL SYLLABLE GYIG AE16;AE16;1100 1174 11A9;AE16;1100 1174 11A9; # (긖; 긖; 긖; 긖; 긖; ) HANGUL SYLLABLE GYIGG AE17;AE17;1100 1174 11AA;AE17;1100 1174 11AA; # (긗; 긗; 긗; 긗; 긗; ) HANGUL SYLLABLE GYIGS AE18;AE18;1100 1174 11AB;AE18;1100 1174 11AB; # (긘; 긘; 긘; 긘; 긘; ) HANGUL SYLLABLE GYIN AE19;AE19;1100 1174 11AC;AE19;1100 1174 11AC; # (긙; 긙; 긙; 긙; 긙; ) HANGUL SYLLABLE GYINJ AE1A;AE1A;1100 1174 11AD;AE1A;1100 1174 11AD; # (긚; 긚; 긚; 긚; 긚; ) HANGUL SYLLABLE GYINH AE1B;AE1B;1100 1174 11AE;AE1B;1100 1174 11AE; # (긛; 긛; 긛; 긛; 긛; ) HANGUL SYLLABLE GYID AE1C;AE1C;1100 1174 11AF;AE1C;1100 1174 11AF; # (긜; 긜; 긜; 긜; 긜; ) HANGUL SYLLABLE GYIL AE1D;AE1D;1100 1174 11B0;AE1D;1100 1174 11B0; # (긝; 긝; 긝; 긝; 긝; ) HANGUL SYLLABLE GYILG AE1E;AE1E;1100 1174 11B1;AE1E;1100 1174 11B1; # (긞; 긞; 긞; 긞; 긞; ) HANGUL SYLLABLE GYILM AE1F;AE1F;1100 1174 11B2;AE1F;1100 1174 11B2; # (긟; 긟; 긟; 긟; 긟; ) HANGUL SYLLABLE GYILB AE20;AE20;1100 1174 11B3;AE20;1100 1174 11B3; # (긠; 긠; 긠; 긠; 긠; ) HANGUL SYLLABLE GYILS AE21;AE21;1100 1174 11B4;AE21;1100 1174 11B4; # (긡; 긡; 긡; 긡; 긡; ) HANGUL SYLLABLE GYILT AE22;AE22;1100 1174 11B5;AE22;1100 1174 11B5; # (긢; 긢; 긢; 긢; 긢; ) HANGUL SYLLABLE GYILP AE23;AE23;1100 1174 11B6;AE23;1100 1174 11B6; # (긣; 긣; 긣; 긣; 긣; ) HANGUL SYLLABLE GYILH AE24;AE24;1100 1174 11B7;AE24;1100 1174 11B7; # (긤; 긤; 긤; 긤; 긤; ) HANGUL SYLLABLE GYIM AE25;AE25;1100 1174 11B8;AE25;1100 1174 11B8; # (긥; 긥; 긥; 긥; 긥; ) HANGUL SYLLABLE GYIB AE26;AE26;1100 1174 11B9;AE26;1100 1174 11B9; # (긦; 긦; 긦; 긦; 긦; ) HANGUL SYLLABLE GYIBS AE27;AE27;1100 1174 11BA;AE27;1100 1174 11BA; # (긧; 긧; 긧; 긧; 긧; ) HANGUL SYLLABLE GYIS AE28;AE28;1100 1174 11BB;AE28;1100 1174 11BB; # (긨; 긨; 긨; 긨; 긨; ) HANGUL SYLLABLE GYISS AE29;AE29;1100 1174 11BC;AE29;1100 1174 11BC; # (긩; 긩; 긩; 긩; 긩; ) HANGUL SYLLABLE GYING AE2A;AE2A;1100 1174 11BD;AE2A;1100 1174 11BD; # (긪; 긪; 긪; 긪; 긪; ) HANGUL SYLLABLE GYIJ AE2B;AE2B;1100 1174 11BE;AE2B;1100 1174 11BE; # (긫; 긫; 긫; 긫; 긫; ) HANGUL SYLLABLE GYIC AE2C;AE2C;1100 1174 11BF;AE2C;1100 1174 11BF; # (긬; 긬; 긬; 긬; 긬; ) HANGUL SYLLABLE GYIK AE2D;AE2D;1100 1174 11C0;AE2D;1100 1174 11C0; # (긭; 긭; 긭; 긭; 긭; ) HANGUL SYLLABLE GYIT AE2E;AE2E;1100 1174 11C1;AE2E;1100 1174 11C1; # (긮; 긮; 긮; 긮; 긮; ) HANGUL SYLLABLE GYIP AE2F;AE2F;1100 1174 11C2;AE2F;1100 1174 11C2; # (긯; 긯; 긯; 긯; 긯; ) HANGUL SYLLABLE GYIH AE30;AE30;1100 1175;AE30;1100 1175; # (기; 기; 기; 기; 기; ) HANGUL SYLLABLE GI AE31;AE31;1100 1175 11A8;AE31;1100 1175 11A8; # (긱; 긱; 긱; 긱; 긱; ) HANGUL SYLLABLE GIG AE32;AE32;1100 1175 11A9;AE32;1100 1175 11A9; # (긲; 긲; 긲; 긲; 긲; ) HANGUL SYLLABLE GIGG AE33;AE33;1100 1175 11AA;AE33;1100 1175 11AA; # (긳; 긳; 긳; 긳; 긳; ) HANGUL SYLLABLE GIGS AE34;AE34;1100 1175 11AB;AE34;1100 1175 11AB; # (긴; 긴; 긴; 긴; 긴; ) HANGUL SYLLABLE GIN AE35;AE35;1100 1175 11AC;AE35;1100 1175 11AC; # (긵; 긵; 긵; 긵; 긵; ) HANGUL SYLLABLE GINJ AE36;AE36;1100 1175 11AD;AE36;1100 1175 11AD; # (긶; 긶; 긶; 긶; 긶; ) HANGUL SYLLABLE GINH AE37;AE37;1100 1175 11AE;AE37;1100 1175 11AE; # (긷; 긷; 긷; 긷; 긷; ) HANGUL SYLLABLE GID AE38;AE38;1100 1175 11AF;AE38;1100 1175 11AF; # (길; 길; 길; 길; 길; ) HANGUL SYLLABLE GIL AE39;AE39;1100 1175 11B0;AE39;1100 1175 11B0; # (긹; 긹; 긹; 긹; 긹; ) HANGUL SYLLABLE GILG AE3A;AE3A;1100 1175 11B1;AE3A;1100 1175 11B1; # (긺; 긺; 긺; 긺; 긺; ) HANGUL SYLLABLE GILM AE3B;AE3B;1100 1175 11B2;AE3B;1100 1175 11B2; # (긻; 긻; 긻; 긻; 긻; ) HANGUL SYLLABLE GILB AE3C;AE3C;1100 1175 11B3;AE3C;1100 1175 11B3; # (긼; 긼; 긼; 긼; 긼; ) HANGUL SYLLABLE GILS AE3D;AE3D;1100 1175 11B4;AE3D;1100 1175 11B4; # (긽; 긽; 긽; 긽; 긽; ) HANGUL SYLLABLE GILT AE3E;AE3E;1100 1175 11B5;AE3E;1100 1175 11B5; # (긾; 긾; 긾; 긾; 긾; ) HANGUL SYLLABLE GILP AE3F;AE3F;1100 1175 11B6;AE3F;1100 1175 11B6; # (긿; 긿; 긿; 긿; 긿; ) HANGUL SYLLABLE GILH AE40;AE40;1100 1175 11B7;AE40;1100 1175 11B7; # (김; 김; 김; 김; 김; ) HANGUL SYLLABLE GIM AE41;AE41;1100 1175 11B8;AE41;1100 1175 11B8; # (깁; 깁; 깁; 깁; 깁; ) HANGUL SYLLABLE GIB AE42;AE42;1100 1175 11B9;AE42;1100 1175 11B9; # (깂; 깂; 깂; 깂; 깂; ) HANGUL SYLLABLE GIBS AE43;AE43;1100 1175 11BA;AE43;1100 1175 11BA; # (깃; 깃; 깃; 깃; 깃; ) HANGUL SYLLABLE GIS AE44;AE44;1100 1175 11BB;AE44;1100 1175 11BB; # (깄; 깄; 깄; 깄; 깄; ) HANGUL SYLLABLE GISS AE45;AE45;1100 1175 11BC;AE45;1100 1175 11BC; # (깅; 깅; 깅; 깅; 깅; ) HANGUL SYLLABLE GING AE46;AE46;1100 1175 11BD;AE46;1100 1175 11BD; # (깆; 깆; 깆; 깆; 깆; ) HANGUL SYLLABLE GIJ AE47;AE47;1100 1175 11BE;AE47;1100 1175 11BE; # (깇; 깇; 깇; 깇; 깇; ) HANGUL SYLLABLE GIC AE48;AE48;1100 1175 11BF;AE48;1100 1175 11BF; # (깈; 깈; 깈; 깈; 깈; ) HANGUL SYLLABLE GIK AE49;AE49;1100 1175 11C0;AE49;1100 1175 11C0; # (깉; 깉; 깉; 깉; 깉; ) HANGUL SYLLABLE GIT AE4A;AE4A;1100 1175 11C1;AE4A;1100 1175 11C1; # (깊; 깊; 깊; 깊; 깊; ) HANGUL SYLLABLE GIP AE4B;AE4B;1100 1175 11C2;AE4B;1100 1175 11C2; # (깋; 깋; 깋; 깋; 깋; ) HANGUL SYLLABLE GIH AE4C;AE4C;1101 1161;AE4C;1101 1161; # (까; 까; 까; 까; 까; ) HANGUL SYLLABLE GGA AE4D;AE4D;1101 1161 11A8;AE4D;1101 1161 11A8; # (깍; 깍; 깍; 깍; 깍; ) HANGUL SYLLABLE GGAG AE4E;AE4E;1101 1161 11A9;AE4E;1101 1161 11A9; # (깎; 깎; 깎; 깎; 깎; ) HANGUL SYLLABLE GGAGG AE4F;AE4F;1101 1161 11AA;AE4F;1101 1161 11AA; # (깏; 깏; 깏; 깏; 깏; ) HANGUL SYLLABLE GGAGS AE50;AE50;1101 1161 11AB;AE50;1101 1161 11AB; # (깐; 깐; 깐; 깐; 깐; ) HANGUL SYLLABLE GGAN AE51;AE51;1101 1161 11AC;AE51;1101 1161 11AC; # (깑; 깑; 깑; 깑; 깑; ) HANGUL SYLLABLE GGANJ AE52;AE52;1101 1161 11AD;AE52;1101 1161 11AD; # (깒; 깒; 깒; 깒; 깒; ) HANGUL SYLLABLE GGANH AE53;AE53;1101 1161 11AE;AE53;1101 1161 11AE; # (깓; 깓; 깓; 깓; 깓; ) HANGUL SYLLABLE GGAD AE54;AE54;1101 1161 11AF;AE54;1101 1161 11AF; # (깔; 깔; 깔; 깔; 깔; ) HANGUL SYLLABLE GGAL AE55;AE55;1101 1161 11B0;AE55;1101 1161 11B0; # (깕; 깕; 깕; 깕; 깕; ) HANGUL SYLLABLE GGALG AE56;AE56;1101 1161 11B1;AE56;1101 1161 11B1; # (깖; 깖; 깖; 깖; 깖; ) HANGUL SYLLABLE GGALM AE57;AE57;1101 1161 11B2;AE57;1101 1161 11B2; # (깗; 깗; 깗; 깗; 깗; ) HANGUL SYLLABLE GGALB AE58;AE58;1101 1161 11B3;AE58;1101 1161 11B3; # (깘; 깘; 깘; 깘; 깘; ) HANGUL SYLLABLE GGALS AE59;AE59;1101 1161 11B4;AE59;1101 1161 11B4; # (깙; 깙; 깙; 깙; 깙; ) HANGUL SYLLABLE GGALT AE5A;AE5A;1101 1161 11B5;AE5A;1101 1161 11B5; # (깚; 깚; 깚; 깚; 깚; ) HANGUL SYLLABLE GGALP AE5B;AE5B;1101 1161 11B6;AE5B;1101 1161 11B6; # (깛; 깛; 깛; 깛; 깛; ) HANGUL SYLLABLE GGALH AE5C;AE5C;1101 1161 11B7;AE5C;1101 1161 11B7; # (깜; 깜; 깜; 깜; 깜; ) HANGUL SYLLABLE GGAM AE5D;AE5D;1101 1161 11B8;AE5D;1101 1161 11B8; # (깝; 깝; 깝; 깝; 깝; ) HANGUL SYLLABLE GGAB AE5E;AE5E;1101 1161 11B9;AE5E;1101 1161 11B9; # (깞; 깞; 깞; 깞; 깞; ) HANGUL SYLLABLE GGABS AE5F;AE5F;1101 1161 11BA;AE5F;1101 1161 11BA; # (깟; 깟; 깟; 깟; 깟; ) HANGUL SYLLABLE GGAS AE60;AE60;1101 1161 11BB;AE60;1101 1161 11BB; # (깠; 깠; 깠; 깠; 깠; ) HANGUL SYLLABLE GGASS AE61;AE61;1101 1161 11BC;AE61;1101 1161 11BC; # (깡; 깡; 깡; 깡; 깡; ) HANGUL SYLLABLE GGANG AE62;AE62;1101 1161 11BD;AE62;1101 1161 11BD; # (깢; 깢; 깢; 깢; 깢; ) HANGUL SYLLABLE GGAJ AE63;AE63;1101 1161 11BE;AE63;1101 1161 11BE; # (깣; 깣; 깣; 깣; 깣; ) HANGUL SYLLABLE GGAC AE64;AE64;1101 1161 11BF;AE64;1101 1161 11BF; # (깤; 깤; 깤; 깤; 깤; ) HANGUL SYLLABLE GGAK AE65;AE65;1101 1161 11C0;AE65;1101 1161 11C0; # (깥; 깥; 깥; 깥; 깥; ) HANGUL SYLLABLE GGAT AE66;AE66;1101 1161 11C1;AE66;1101 1161 11C1; # (깦; 깦; 깦; 깦; 깦; ) HANGUL SYLLABLE GGAP AE67;AE67;1101 1161 11C2;AE67;1101 1161 11C2; # (깧; 깧; 깧; 깧; 깧; ) HANGUL SYLLABLE GGAH AE68;AE68;1101 1162;AE68;1101 1162; # (깨; 깨; 깨; 깨; 깨; ) HANGUL SYLLABLE GGAE AE69;AE69;1101 1162 11A8;AE69;1101 1162 11A8; # (깩; 깩; 깩; 깩; 깩; ) HANGUL SYLLABLE GGAEG AE6A;AE6A;1101 1162 11A9;AE6A;1101 1162 11A9; # (깪; 깪; 깪; 깪; 깪; ) HANGUL SYLLABLE GGAEGG AE6B;AE6B;1101 1162 11AA;AE6B;1101 1162 11AA; # (깫; 깫; 깫; 깫; 깫; ) HANGUL SYLLABLE GGAEGS AE6C;AE6C;1101 1162 11AB;AE6C;1101 1162 11AB; # (깬; 깬; 깬; 깬; 깬; ) HANGUL SYLLABLE GGAEN AE6D;AE6D;1101 1162 11AC;AE6D;1101 1162 11AC; # (깭; 깭; 깭; 깭; 깭; ) HANGUL SYLLABLE GGAENJ AE6E;AE6E;1101 1162 11AD;AE6E;1101 1162 11AD; # (깮; 깮; 깮; 깮; 깮; ) HANGUL SYLLABLE GGAENH AE6F;AE6F;1101 1162 11AE;AE6F;1101 1162 11AE; # (깯; 깯; 깯; 깯; 깯; ) HANGUL SYLLABLE GGAED AE70;AE70;1101 1162 11AF;AE70;1101 1162 11AF; # (깰; 깰; 깰; 깰; 깰; ) HANGUL SYLLABLE GGAEL AE71;AE71;1101 1162 11B0;AE71;1101 1162 11B0; # (깱; 깱; 깱; 깱; 깱; ) HANGUL SYLLABLE GGAELG AE72;AE72;1101 1162 11B1;AE72;1101 1162 11B1; # (깲; 깲; 깲; 깲; 깲; ) HANGUL SYLLABLE GGAELM AE73;AE73;1101 1162 11B2;AE73;1101 1162 11B2; # (깳; 깳; 깳; 깳; 깳; ) HANGUL SYLLABLE GGAELB AE74;AE74;1101 1162 11B3;AE74;1101 1162 11B3; # (깴; 깴; 깴; 깴; 깴; ) HANGUL SYLLABLE GGAELS AE75;AE75;1101 1162 11B4;AE75;1101 1162 11B4; # (깵; 깵; 깵; 깵; 깵; ) HANGUL SYLLABLE GGAELT AE76;AE76;1101 1162 11B5;AE76;1101 1162 11B5; # (깶; 깶; 깶; 깶; 깶; ) HANGUL SYLLABLE GGAELP AE77;AE77;1101 1162 11B6;AE77;1101 1162 11B6; # (깷; 깷; 깷; 깷; 깷; ) HANGUL SYLLABLE GGAELH AE78;AE78;1101 1162 11B7;AE78;1101 1162 11B7; # (깸; 깸; 깸; 깸; 깸; ) HANGUL SYLLABLE GGAEM AE79;AE79;1101 1162 11B8;AE79;1101 1162 11B8; # (깹; 깹; 깹; 깹; 깹; ) HANGUL SYLLABLE GGAEB AE7A;AE7A;1101 1162 11B9;AE7A;1101 1162 11B9; # (깺; 깺; 깺; 깺; 깺; ) HANGUL SYLLABLE GGAEBS AE7B;AE7B;1101 1162 11BA;AE7B;1101 1162 11BA; # (깻; 깻; 깻; 깻; 깻; ) HANGUL SYLLABLE GGAES AE7C;AE7C;1101 1162 11BB;AE7C;1101 1162 11BB; # (깼; 깼; 깼; 깼; 깼; ) HANGUL SYLLABLE GGAESS AE7D;AE7D;1101 1162 11BC;AE7D;1101 1162 11BC; # (깽; 깽; 깽; 깽; 깽; ) HANGUL SYLLABLE GGAENG AE7E;AE7E;1101 1162 11BD;AE7E;1101 1162 11BD; # (깾; 깾; 깾; 깾; 깾; ) HANGUL SYLLABLE GGAEJ AE7F;AE7F;1101 1162 11BE;AE7F;1101 1162 11BE; # (깿; 깿; 깿; 깿; 깿; ) HANGUL SYLLABLE GGAEC AE80;AE80;1101 1162 11BF;AE80;1101 1162 11BF; # (꺀; 꺀; 꺀; 꺀; 꺀; ) HANGUL SYLLABLE GGAEK AE81;AE81;1101 1162 11C0;AE81;1101 1162 11C0; # (꺁; 꺁; 꺁; 꺁; 꺁; ) HANGUL SYLLABLE GGAET AE82;AE82;1101 1162 11C1;AE82;1101 1162 11C1; # (꺂; 꺂; 꺂; 꺂; 꺂; ) HANGUL SYLLABLE GGAEP AE83;AE83;1101 1162 11C2;AE83;1101 1162 11C2; # (꺃; 꺃; 꺃; 꺃; 꺃; ) HANGUL SYLLABLE GGAEH AE84;AE84;1101 1163;AE84;1101 1163; # (꺄; 꺄; 꺄; 꺄; 꺄; ) HANGUL SYLLABLE GGYA AE85;AE85;1101 1163 11A8;AE85;1101 1163 11A8; # (꺅; 꺅; 꺅; 꺅; 꺅; ) HANGUL SYLLABLE GGYAG AE86;AE86;1101 1163 11A9;AE86;1101 1163 11A9; # (꺆; 꺆; 꺆; 꺆; 꺆; ) HANGUL SYLLABLE GGYAGG AE87;AE87;1101 1163 11AA;AE87;1101 1163 11AA; # (꺇; 꺇; 꺇; 꺇; 꺇; ) HANGUL SYLLABLE GGYAGS AE88;AE88;1101 1163 11AB;AE88;1101 1163 11AB; # (꺈; 꺈; 꺈; 꺈; 꺈; ) HANGUL SYLLABLE GGYAN AE89;AE89;1101 1163 11AC;AE89;1101 1163 11AC; # (꺉; 꺉; 꺉; 꺉; 꺉; ) HANGUL SYLLABLE GGYANJ AE8A;AE8A;1101 1163 11AD;AE8A;1101 1163 11AD; # (꺊; 꺊; 꺊; 꺊; 꺊; ) HANGUL SYLLABLE GGYANH AE8B;AE8B;1101 1163 11AE;AE8B;1101 1163 11AE; # (꺋; 꺋; 꺋; 꺋; 꺋; ) HANGUL SYLLABLE GGYAD AE8C;AE8C;1101 1163 11AF;AE8C;1101 1163 11AF; # (꺌; 꺌; 꺌; 꺌; 꺌; ) HANGUL SYLLABLE GGYAL AE8D;AE8D;1101 1163 11B0;AE8D;1101 1163 11B0; # (꺍; 꺍; 꺍; 꺍; 꺍; ) HANGUL SYLLABLE GGYALG AE8E;AE8E;1101 1163 11B1;AE8E;1101 1163 11B1; # (꺎; 꺎; 꺎; 꺎; 꺎; ) HANGUL SYLLABLE GGYALM AE8F;AE8F;1101 1163 11B2;AE8F;1101 1163 11B2; # (꺏; 꺏; 꺏; 꺏; 꺏; ) HANGUL SYLLABLE GGYALB AE90;AE90;1101 1163 11B3;AE90;1101 1163 11B3; # (꺐; 꺐; 꺐; 꺐; 꺐; ) HANGUL SYLLABLE GGYALS AE91;AE91;1101 1163 11B4;AE91;1101 1163 11B4; # (꺑; 꺑; 꺑; 꺑; 꺑; ) HANGUL SYLLABLE GGYALT AE92;AE92;1101 1163 11B5;AE92;1101 1163 11B5; # (꺒; 꺒; 꺒; 꺒; 꺒; ) HANGUL SYLLABLE GGYALP AE93;AE93;1101 1163 11B6;AE93;1101 1163 11B6; # (꺓; 꺓; 꺓; 꺓; 꺓; ) HANGUL SYLLABLE GGYALH AE94;AE94;1101 1163 11B7;AE94;1101 1163 11B7; # (꺔; 꺔; 꺔; 꺔; 꺔; ) HANGUL SYLLABLE GGYAM AE95;AE95;1101 1163 11B8;AE95;1101 1163 11B8; # (꺕; 꺕; 꺕; 꺕; 꺕; ) HANGUL SYLLABLE GGYAB AE96;AE96;1101 1163 11B9;AE96;1101 1163 11B9; # (꺖; 꺖; 꺖; 꺖; 꺖; ) HANGUL SYLLABLE GGYABS AE97;AE97;1101 1163 11BA;AE97;1101 1163 11BA; # (꺗; 꺗; 꺗; 꺗; 꺗; ) HANGUL SYLLABLE GGYAS AE98;AE98;1101 1163 11BB;AE98;1101 1163 11BB; # (꺘; 꺘; 꺘; 꺘; 꺘; ) HANGUL SYLLABLE GGYASS AE99;AE99;1101 1163 11BC;AE99;1101 1163 11BC; # (꺙; 꺙; 꺙; 꺙; 꺙; ) HANGUL SYLLABLE GGYANG AE9A;AE9A;1101 1163 11BD;AE9A;1101 1163 11BD; # (꺚; 꺚; 꺚; 꺚; 꺚; ) HANGUL SYLLABLE GGYAJ AE9B;AE9B;1101 1163 11BE;AE9B;1101 1163 11BE; # (꺛; 꺛; 꺛; 꺛; 꺛; ) HANGUL SYLLABLE GGYAC AE9C;AE9C;1101 1163 11BF;AE9C;1101 1163 11BF; # (꺜; 꺜; 꺜; 꺜; 꺜; ) HANGUL SYLLABLE GGYAK AE9D;AE9D;1101 1163 11C0;AE9D;1101 1163 11C0; # (꺝; 꺝; 꺝; 꺝; 꺝; ) HANGUL SYLLABLE GGYAT AE9E;AE9E;1101 1163 11C1;AE9E;1101 1163 11C1; # (꺞; 꺞; 꺞; 꺞; 꺞; ) HANGUL SYLLABLE GGYAP AE9F;AE9F;1101 1163 11C2;AE9F;1101 1163 11C2; # (꺟; 꺟; 꺟; 꺟; 꺟; ) HANGUL SYLLABLE GGYAH AEA0;AEA0;1101 1164;AEA0;1101 1164; # (꺠; 꺠; 꺠; 꺠; 꺠; ) HANGUL SYLLABLE GGYAE AEA1;AEA1;1101 1164 11A8;AEA1;1101 1164 11A8; # (꺡; 꺡; 꺡; 꺡; 꺡; ) HANGUL SYLLABLE GGYAEG AEA2;AEA2;1101 1164 11A9;AEA2;1101 1164 11A9; # (꺢; 꺢; 꺢; 꺢; 꺢; ) HANGUL SYLLABLE GGYAEGG AEA3;AEA3;1101 1164 11AA;AEA3;1101 1164 11AA; # (꺣; 꺣; 꺣; 꺣; 꺣; ) HANGUL SYLLABLE GGYAEGS AEA4;AEA4;1101 1164 11AB;AEA4;1101 1164 11AB; # (꺤; 꺤; 꺤; 꺤; 꺤; ) HANGUL SYLLABLE GGYAEN AEA5;AEA5;1101 1164 11AC;AEA5;1101 1164 11AC; # (꺥; 꺥; 꺥; 꺥; 꺥; ) HANGUL SYLLABLE GGYAENJ AEA6;AEA6;1101 1164 11AD;AEA6;1101 1164 11AD; # (꺦; 꺦; 꺦; 꺦; 꺦; ) HANGUL SYLLABLE GGYAENH AEA7;AEA7;1101 1164 11AE;AEA7;1101 1164 11AE; # (꺧; 꺧; 꺧; 꺧; 꺧; ) HANGUL SYLLABLE GGYAED AEA8;AEA8;1101 1164 11AF;AEA8;1101 1164 11AF; # (꺨; 꺨; 꺨; 꺨; 꺨; ) HANGUL SYLLABLE GGYAEL AEA9;AEA9;1101 1164 11B0;AEA9;1101 1164 11B0; # (꺩; 꺩; 꺩; 꺩; 꺩; ) HANGUL SYLLABLE GGYAELG AEAA;AEAA;1101 1164 11B1;AEAA;1101 1164 11B1; # (꺪; 꺪; 꺪; 꺪; 꺪; ) HANGUL SYLLABLE GGYAELM AEAB;AEAB;1101 1164 11B2;AEAB;1101 1164 11B2; # (꺫; 꺫; 꺫; 꺫; 꺫; ) HANGUL SYLLABLE GGYAELB AEAC;AEAC;1101 1164 11B3;AEAC;1101 1164 11B3; # (꺬; 꺬; 꺬; 꺬; 꺬; ) HANGUL SYLLABLE GGYAELS AEAD;AEAD;1101 1164 11B4;AEAD;1101 1164 11B4; # (꺭; 꺭; 꺭; 꺭; 꺭; ) HANGUL SYLLABLE GGYAELT AEAE;AEAE;1101 1164 11B5;AEAE;1101 1164 11B5; # (꺮; 꺮; 꺮; 꺮; 꺮; ) HANGUL SYLLABLE GGYAELP AEAF;AEAF;1101 1164 11B6;AEAF;1101 1164 11B6; # (꺯; 꺯; 꺯; 꺯; 꺯; ) HANGUL SYLLABLE GGYAELH AEB0;AEB0;1101 1164 11B7;AEB0;1101 1164 11B7; # (꺰; 꺰; 꺰; 꺰; 꺰; ) HANGUL SYLLABLE GGYAEM AEB1;AEB1;1101 1164 11B8;AEB1;1101 1164 11B8; # (꺱; 꺱; 꺱; 꺱; 꺱; ) HANGUL SYLLABLE GGYAEB AEB2;AEB2;1101 1164 11B9;AEB2;1101 1164 11B9; # (꺲; 꺲; 꺲; 꺲; 꺲; ) HANGUL SYLLABLE GGYAEBS AEB3;AEB3;1101 1164 11BA;AEB3;1101 1164 11BA; # (꺳; 꺳; 꺳; 꺳; 꺳; ) HANGUL SYLLABLE GGYAES AEB4;AEB4;1101 1164 11BB;AEB4;1101 1164 11BB; # (꺴; 꺴; 꺴; 꺴; 꺴; ) HANGUL SYLLABLE GGYAESS AEB5;AEB5;1101 1164 11BC;AEB5;1101 1164 11BC; # (꺵; 꺵; 꺵; 꺵; 꺵; ) HANGUL SYLLABLE GGYAENG AEB6;AEB6;1101 1164 11BD;AEB6;1101 1164 11BD; # (꺶; 꺶; 꺶; 꺶; 꺶; ) HANGUL SYLLABLE GGYAEJ AEB7;AEB7;1101 1164 11BE;AEB7;1101 1164 11BE; # (꺷; 꺷; 꺷; 꺷; 꺷; ) HANGUL SYLLABLE GGYAEC AEB8;AEB8;1101 1164 11BF;AEB8;1101 1164 11BF; # (꺸; 꺸; 꺸; 꺸; 꺸; ) HANGUL SYLLABLE GGYAEK AEB9;AEB9;1101 1164 11C0;AEB9;1101 1164 11C0; # (꺹; 꺹; 꺹; 꺹; 꺹; ) HANGUL SYLLABLE GGYAET AEBA;AEBA;1101 1164 11C1;AEBA;1101 1164 11C1; # (꺺; 꺺; 꺺; 꺺; 꺺; ) HANGUL SYLLABLE GGYAEP AEBB;AEBB;1101 1164 11C2;AEBB;1101 1164 11C2; # (꺻; 꺻; 꺻; 꺻; 꺻; ) HANGUL SYLLABLE GGYAEH AEBC;AEBC;1101 1165;AEBC;1101 1165; # (꺼; 꺼; 꺼; 꺼; 꺼; ) HANGUL SYLLABLE GGEO AEBD;AEBD;1101 1165 11A8;AEBD;1101 1165 11A8; # (꺽; 꺽; 꺽; 꺽; 꺽; ) HANGUL SYLLABLE GGEOG AEBE;AEBE;1101 1165 11A9;AEBE;1101 1165 11A9; # (꺾; 꺾; 꺾; 꺾; 꺾; ) HANGUL SYLLABLE GGEOGG AEBF;AEBF;1101 1165 11AA;AEBF;1101 1165 11AA; # (꺿; 꺿; 꺿; 꺿; 꺿; ) HANGUL SYLLABLE GGEOGS AEC0;AEC0;1101 1165 11AB;AEC0;1101 1165 11AB; # (껀; 껀; 껀; 껀; 껀; ) HANGUL SYLLABLE GGEON AEC1;AEC1;1101 1165 11AC;AEC1;1101 1165 11AC; # (껁; 껁; 껁; 껁; 껁; ) HANGUL SYLLABLE GGEONJ AEC2;AEC2;1101 1165 11AD;AEC2;1101 1165 11AD; # (껂; 껂; 껂; 껂; 껂; ) HANGUL SYLLABLE GGEONH AEC3;AEC3;1101 1165 11AE;AEC3;1101 1165 11AE; # (껃; 껃; 껃; 껃; 껃; ) HANGUL SYLLABLE GGEOD AEC4;AEC4;1101 1165 11AF;AEC4;1101 1165 11AF; # (껄; 껄; 껄; 껄; 껄; ) HANGUL SYLLABLE GGEOL AEC5;AEC5;1101 1165 11B0;AEC5;1101 1165 11B0; # (껅; 껅; 껅; 껅; 껅; ) HANGUL SYLLABLE GGEOLG AEC6;AEC6;1101 1165 11B1;AEC6;1101 1165 11B1; # (껆; 껆; 껆; 껆; 껆; ) HANGUL SYLLABLE GGEOLM AEC7;AEC7;1101 1165 11B2;AEC7;1101 1165 11B2; # (껇; 껇; 껇; 껇; 껇; ) HANGUL SYLLABLE GGEOLB AEC8;AEC8;1101 1165 11B3;AEC8;1101 1165 11B3; # (껈; 껈; 껈; 껈; 껈; ) HANGUL SYLLABLE GGEOLS AEC9;AEC9;1101 1165 11B4;AEC9;1101 1165 11B4; # (껉; 껉; 껉; 껉; 껉; ) HANGUL SYLLABLE GGEOLT AECA;AECA;1101 1165 11B5;AECA;1101 1165 11B5; # (껊; 껊; 껊; 껊; 껊; ) HANGUL SYLLABLE GGEOLP AECB;AECB;1101 1165 11B6;AECB;1101 1165 11B6; # (껋; 껋; 껋; 껋; 껋; ) HANGUL SYLLABLE GGEOLH AECC;AECC;1101 1165 11B7;AECC;1101 1165 11B7; # (껌; 껌; 껌; 껌; 껌; ) HANGUL SYLLABLE GGEOM AECD;AECD;1101 1165 11B8;AECD;1101 1165 11B8; # (껍; 껍; 껍; 껍; 껍; ) HANGUL SYLLABLE GGEOB AECE;AECE;1101 1165 11B9;AECE;1101 1165 11B9; # (껎; 껎; 껎; 껎; 껎; ) HANGUL SYLLABLE GGEOBS AECF;AECF;1101 1165 11BA;AECF;1101 1165 11BA; # (껏; 껏; 껏; 껏; 껏; ) HANGUL SYLLABLE GGEOS AED0;AED0;1101 1165 11BB;AED0;1101 1165 11BB; # (껐; 껐; 껐; 껐; 껐; ) HANGUL SYLLABLE GGEOSS AED1;AED1;1101 1165 11BC;AED1;1101 1165 11BC; # (껑; 껑; 껑; 껑; 껑; ) HANGUL SYLLABLE GGEONG AED2;AED2;1101 1165 11BD;AED2;1101 1165 11BD; # (껒; 껒; 껒; 껒; 껒; ) HANGUL SYLLABLE GGEOJ AED3;AED3;1101 1165 11BE;AED3;1101 1165 11BE; # (껓; 껓; 껓; 껓; 껓; ) HANGUL SYLLABLE GGEOC AED4;AED4;1101 1165 11BF;AED4;1101 1165 11BF; # (껔; 껔; 껔; 껔; 껔; ) HANGUL SYLLABLE GGEOK AED5;AED5;1101 1165 11C0;AED5;1101 1165 11C0; # (껕; 껕; 껕; 껕; 껕; ) HANGUL SYLLABLE GGEOT AED6;AED6;1101 1165 11C1;AED6;1101 1165 11C1; # (껖; 껖; 껖; 껖; 껖; ) HANGUL SYLLABLE GGEOP AED7;AED7;1101 1165 11C2;AED7;1101 1165 11C2; # (껗; 껗; 껗; 껗; 껗; ) HANGUL SYLLABLE GGEOH AED8;AED8;1101 1166;AED8;1101 1166; # (께; 께; 께; 께; 께; ) HANGUL SYLLABLE GGE AED9;AED9;1101 1166 11A8;AED9;1101 1166 11A8; # (껙; 껙; 껙; 껙; 껙; ) HANGUL SYLLABLE GGEG AEDA;AEDA;1101 1166 11A9;AEDA;1101 1166 11A9; # (껚; 껚; 껚; 껚; 껚; ) HANGUL SYLLABLE GGEGG AEDB;AEDB;1101 1166 11AA;AEDB;1101 1166 11AA; # (껛; 껛; 껛; 껛; 껛; ) HANGUL SYLLABLE GGEGS AEDC;AEDC;1101 1166 11AB;AEDC;1101 1166 11AB; # (껜; 껜; 껜; 껜; 껜; ) HANGUL SYLLABLE GGEN AEDD;AEDD;1101 1166 11AC;AEDD;1101 1166 11AC; # (껝; 껝; 껝; 껝; 껝; ) HANGUL SYLLABLE GGENJ AEDE;AEDE;1101 1166 11AD;AEDE;1101 1166 11AD; # (껞; 껞; 껞; 껞; 껞; ) HANGUL SYLLABLE GGENH AEDF;AEDF;1101 1166 11AE;AEDF;1101 1166 11AE; # (껟; 껟; 껟; 껟; 껟; ) HANGUL SYLLABLE GGED AEE0;AEE0;1101 1166 11AF;AEE0;1101 1166 11AF; # (껠; 껠; 껠; 껠; 껠; ) HANGUL SYLLABLE GGEL AEE1;AEE1;1101 1166 11B0;AEE1;1101 1166 11B0; # (껡; 껡; 껡; 껡; 껡; ) HANGUL SYLLABLE GGELG AEE2;AEE2;1101 1166 11B1;AEE2;1101 1166 11B1; # (껢; 껢; 껢; 껢; 껢; ) HANGUL SYLLABLE GGELM AEE3;AEE3;1101 1166 11B2;AEE3;1101 1166 11B2; # (껣; 껣; 껣; 껣; 껣; ) HANGUL SYLLABLE GGELB AEE4;AEE4;1101 1166 11B3;AEE4;1101 1166 11B3; # (껤; 껤; 껤; 껤; 껤; ) HANGUL SYLLABLE GGELS AEE5;AEE5;1101 1166 11B4;AEE5;1101 1166 11B4; # (껥; 껥; 껥; 껥; 껥; ) HANGUL SYLLABLE GGELT AEE6;AEE6;1101 1166 11B5;AEE6;1101 1166 11B5; # (껦; 껦; 껦; 껦; 껦; ) HANGUL SYLLABLE GGELP AEE7;AEE7;1101 1166 11B6;AEE7;1101 1166 11B6; # (껧; 껧; 껧; 껧; 껧; ) HANGUL SYLLABLE GGELH AEE8;AEE8;1101 1166 11B7;AEE8;1101 1166 11B7; # (껨; 껨; 껨; 껨; 껨; ) HANGUL SYLLABLE GGEM AEE9;AEE9;1101 1166 11B8;AEE9;1101 1166 11B8; # (껩; 껩; 껩; 껩; 껩; ) HANGUL SYLLABLE GGEB AEEA;AEEA;1101 1166 11B9;AEEA;1101 1166 11B9; # (껪; 껪; 껪; 껪; 껪; ) HANGUL SYLLABLE GGEBS AEEB;AEEB;1101 1166 11BA;AEEB;1101 1166 11BA; # (껫; 껫; 껫; 껫; 껫; ) HANGUL SYLLABLE GGES AEEC;AEEC;1101 1166 11BB;AEEC;1101 1166 11BB; # (껬; 껬; 껬; 껬; 껬; ) HANGUL SYLLABLE GGESS AEED;AEED;1101 1166 11BC;AEED;1101 1166 11BC; # (껭; 껭; 껭; 껭; 껭; ) HANGUL SYLLABLE GGENG AEEE;AEEE;1101 1166 11BD;AEEE;1101 1166 11BD; # (껮; 껮; 껮; 껮; 껮; ) HANGUL SYLLABLE GGEJ AEEF;AEEF;1101 1166 11BE;AEEF;1101 1166 11BE; # (껯; 껯; 껯; 껯; 껯; ) HANGUL SYLLABLE GGEC AEF0;AEF0;1101 1166 11BF;AEF0;1101 1166 11BF; # (껰; 껰; 껰; 껰; 껰; ) HANGUL SYLLABLE GGEK AEF1;AEF1;1101 1166 11C0;AEF1;1101 1166 11C0; # (껱; 껱; 껱; 껱; 껱; ) HANGUL SYLLABLE GGET AEF2;AEF2;1101 1166 11C1;AEF2;1101 1166 11C1; # (껲; 껲; 껲; 껲; 껲; ) HANGUL SYLLABLE GGEP AEF3;AEF3;1101 1166 11C2;AEF3;1101 1166 11C2; # (껳; 껳; 껳; 껳; 껳; ) HANGUL SYLLABLE GGEH AEF4;AEF4;1101 1167;AEF4;1101 1167; # (껴; 껴; 껴; 껴; 껴; ) HANGUL SYLLABLE GGYEO AEF5;AEF5;1101 1167 11A8;AEF5;1101 1167 11A8; # (껵; 껵; 껵; 껵; 껵; ) HANGUL SYLLABLE GGYEOG AEF6;AEF6;1101 1167 11A9;AEF6;1101 1167 11A9; # (껶; 껶; 껶; 껶; 껶; ) HANGUL SYLLABLE GGYEOGG AEF7;AEF7;1101 1167 11AA;AEF7;1101 1167 11AA; # (껷; 껷; 껷; 껷; 껷; ) HANGUL SYLLABLE GGYEOGS AEF8;AEF8;1101 1167 11AB;AEF8;1101 1167 11AB; # (껸; 껸; 껸; 껸; 껸; ) HANGUL SYLLABLE GGYEON AEF9;AEF9;1101 1167 11AC;AEF9;1101 1167 11AC; # (껹; 껹; 껹; 껹; 껹; ) HANGUL SYLLABLE GGYEONJ AEFA;AEFA;1101 1167 11AD;AEFA;1101 1167 11AD; # (껺; 껺; 껺; 껺; 껺; ) HANGUL SYLLABLE GGYEONH AEFB;AEFB;1101 1167 11AE;AEFB;1101 1167 11AE; # (껻; 껻; 껻; 껻; 껻; ) HANGUL SYLLABLE GGYEOD AEFC;AEFC;1101 1167 11AF;AEFC;1101 1167 11AF; # (껼; 껼; 껼; 껼; 껼; ) HANGUL SYLLABLE GGYEOL AEFD;AEFD;1101 1167 11B0;AEFD;1101 1167 11B0; # (껽; 껽; 껽; 껽; 껽; ) HANGUL SYLLABLE GGYEOLG AEFE;AEFE;1101 1167 11B1;AEFE;1101 1167 11B1; # (껾; 껾; 껾; 껾; 껾; ) HANGUL SYLLABLE GGYEOLM AEFF;AEFF;1101 1167 11B2;AEFF;1101 1167 11B2; # (껿; 껿; 껿; 껿; 껿; ) HANGUL SYLLABLE GGYEOLB AF00;AF00;1101 1167 11B3;AF00;1101 1167 11B3; # (꼀; 꼀; 꼀; 꼀; 꼀; ) HANGUL SYLLABLE GGYEOLS AF01;AF01;1101 1167 11B4;AF01;1101 1167 11B4; # (꼁; 꼁; 꼁; 꼁; 꼁; ) HANGUL SYLLABLE GGYEOLT AF02;AF02;1101 1167 11B5;AF02;1101 1167 11B5; # (꼂; 꼂; 꼂; 꼂; 꼂; ) HANGUL SYLLABLE GGYEOLP AF03;AF03;1101 1167 11B6;AF03;1101 1167 11B6; # (꼃; 꼃; 꼃; 꼃; 꼃; ) HANGUL SYLLABLE GGYEOLH AF04;AF04;1101 1167 11B7;AF04;1101 1167 11B7; # (꼄; 꼄; 꼄; 꼄; 꼄; ) HANGUL SYLLABLE GGYEOM AF05;AF05;1101 1167 11B8;AF05;1101 1167 11B8; # (꼅; 꼅; 꼅; 꼅; 꼅; ) HANGUL SYLLABLE GGYEOB AF06;AF06;1101 1167 11B9;AF06;1101 1167 11B9; # (꼆; 꼆; 꼆; 꼆; 꼆; ) HANGUL SYLLABLE GGYEOBS AF07;AF07;1101 1167 11BA;AF07;1101 1167 11BA; # (꼇; 꼇; 꼇; 꼇; 꼇; ) HANGUL SYLLABLE GGYEOS AF08;AF08;1101 1167 11BB;AF08;1101 1167 11BB; # (꼈; 꼈; 꼈; 꼈; 꼈; ) HANGUL SYLLABLE GGYEOSS AF09;AF09;1101 1167 11BC;AF09;1101 1167 11BC; # (꼉; 꼉; 꼉; 꼉; 꼉; ) HANGUL SYLLABLE GGYEONG AF0A;AF0A;1101 1167 11BD;AF0A;1101 1167 11BD; # (꼊; 꼊; 꼊; 꼊; 꼊; ) HANGUL SYLLABLE GGYEOJ AF0B;AF0B;1101 1167 11BE;AF0B;1101 1167 11BE; # (꼋; 꼋; 꼋; 꼋; 꼋; ) HANGUL SYLLABLE GGYEOC AF0C;AF0C;1101 1167 11BF;AF0C;1101 1167 11BF; # (꼌; 꼌; 꼌; 꼌; 꼌; ) HANGUL SYLLABLE GGYEOK AF0D;AF0D;1101 1167 11C0;AF0D;1101 1167 11C0; # (꼍; 꼍; 꼍; 꼍; 꼍; ) HANGUL SYLLABLE GGYEOT AF0E;AF0E;1101 1167 11C1;AF0E;1101 1167 11C1; # (꼎; 꼎; 꼎; 꼎; 꼎; ) HANGUL SYLLABLE GGYEOP AF0F;AF0F;1101 1167 11C2;AF0F;1101 1167 11C2; # (꼏; 꼏; 꼏; 꼏; 꼏; ) HANGUL SYLLABLE GGYEOH AF10;AF10;1101 1168;AF10;1101 1168; # (꼐; 꼐; 꼐; 꼐; 꼐; ) HANGUL SYLLABLE GGYE AF11;AF11;1101 1168 11A8;AF11;1101 1168 11A8; # (꼑; 꼑; 꼑; 꼑; 꼑; ) HANGUL SYLLABLE GGYEG AF12;AF12;1101 1168 11A9;AF12;1101 1168 11A9; # (꼒; 꼒; 꼒; 꼒; 꼒; ) HANGUL SYLLABLE GGYEGG AF13;AF13;1101 1168 11AA;AF13;1101 1168 11AA; # (꼓; 꼓; 꼓; 꼓; 꼓; ) HANGUL SYLLABLE GGYEGS AF14;AF14;1101 1168 11AB;AF14;1101 1168 11AB; # (꼔; 꼔; 꼔; 꼔; 꼔; ) HANGUL SYLLABLE GGYEN AF15;AF15;1101 1168 11AC;AF15;1101 1168 11AC; # (꼕; 꼕; 꼕; 꼕; 꼕; ) HANGUL SYLLABLE GGYENJ AF16;AF16;1101 1168 11AD;AF16;1101 1168 11AD; # (꼖; 꼖; 꼖; 꼖; 꼖; ) HANGUL SYLLABLE GGYENH AF17;AF17;1101 1168 11AE;AF17;1101 1168 11AE; # (꼗; 꼗; 꼗; 꼗; 꼗; ) HANGUL SYLLABLE GGYED AF18;AF18;1101 1168 11AF;AF18;1101 1168 11AF; # (꼘; 꼘; 꼘; 꼘; 꼘; ) HANGUL SYLLABLE GGYEL AF19;AF19;1101 1168 11B0;AF19;1101 1168 11B0; # (꼙; 꼙; 꼙; 꼙; 꼙; ) HANGUL SYLLABLE GGYELG AF1A;AF1A;1101 1168 11B1;AF1A;1101 1168 11B1; # (꼚; 꼚; 꼚; 꼚; 꼚; ) HANGUL SYLLABLE GGYELM AF1B;AF1B;1101 1168 11B2;AF1B;1101 1168 11B2; # (꼛; 꼛; 꼛; 꼛; 꼛; ) HANGUL SYLLABLE GGYELB AF1C;AF1C;1101 1168 11B3;AF1C;1101 1168 11B3; # (꼜; 꼜; 꼜; 꼜; 꼜; ) HANGUL SYLLABLE GGYELS AF1D;AF1D;1101 1168 11B4;AF1D;1101 1168 11B4; # (꼝; 꼝; 꼝; 꼝; 꼝; ) HANGUL SYLLABLE GGYELT AF1E;AF1E;1101 1168 11B5;AF1E;1101 1168 11B5; # (꼞; 꼞; 꼞; 꼞; 꼞; ) HANGUL SYLLABLE GGYELP AF1F;AF1F;1101 1168 11B6;AF1F;1101 1168 11B6; # (꼟; 꼟; 꼟; 꼟; 꼟; ) HANGUL SYLLABLE GGYELH AF20;AF20;1101 1168 11B7;AF20;1101 1168 11B7; # (꼠; 꼠; 꼠; 꼠; 꼠; ) HANGUL SYLLABLE GGYEM AF21;AF21;1101 1168 11B8;AF21;1101 1168 11B8; # (꼡; 꼡; 꼡; 꼡; 꼡; ) HANGUL SYLLABLE GGYEB AF22;AF22;1101 1168 11B9;AF22;1101 1168 11B9; # (꼢; 꼢; 꼢; 꼢; 꼢; ) HANGUL SYLLABLE GGYEBS AF23;AF23;1101 1168 11BA;AF23;1101 1168 11BA; # (꼣; 꼣; 꼣; 꼣; 꼣; ) HANGUL SYLLABLE GGYES AF24;AF24;1101 1168 11BB;AF24;1101 1168 11BB; # (꼤; 꼤; 꼤; 꼤; 꼤; ) HANGUL SYLLABLE GGYESS AF25;AF25;1101 1168 11BC;AF25;1101 1168 11BC; # (꼥; 꼥; 꼥; 꼥; 꼥; ) HANGUL SYLLABLE GGYENG AF26;AF26;1101 1168 11BD;AF26;1101 1168 11BD; # (꼦; 꼦; 꼦; 꼦; 꼦; ) HANGUL SYLLABLE GGYEJ AF27;AF27;1101 1168 11BE;AF27;1101 1168 11BE; # (꼧; 꼧; 꼧; 꼧; 꼧; ) HANGUL SYLLABLE GGYEC AF28;AF28;1101 1168 11BF;AF28;1101 1168 11BF; # (꼨; 꼨; 꼨; 꼨; 꼨; ) HANGUL SYLLABLE GGYEK AF29;AF29;1101 1168 11C0;AF29;1101 1168 11C0; # (꼩; 꼩; 꼩; 꼩; 꼩; ) HANGUL SYLLABLE GGYET AF2A;AF2A;1101 1168 11C1;AF2A;1101 1168 11C1; # (꼪; 꼪; 꼪; 꼪; 꼪; ) HANGUL SYLLABLE GGYEP AF2B;AF2B;1101 1168 11C2;AF2B;1101 1168 11C2; # (꼫; 꼫; 꼫; 꼫; 꼫; ) HANGUL SYLLABLE GGYEH AF2C;AF2C;1101 1169;AF2C;1101 1169; # (꼬; 꼬; 꼬; 꼬; 꼬; ) HANGUL SYLLABLE GGO AF2D;AF2D;1101 1169 11A8;AF2D;1101 1169 11A8; # (꼭; 꼭; 꼭; 꼭; 꼭; ) HANGUL SYLLABLE GGOG AF2E;AF2E;1101 1169 11A9;AF2E;1101 1169 11A9; # (꼮; 꼮; 꼮; 꼮; 꼮; ) HANGUL SYLLABLE GGOGG AF2F;AF2F;1101 1169 11AA;AF2F;1101 1169 11AA; # (꼯; 꼯; 꼯; 꼯; 꼯; ) HANGUL SYLLABLE GGOGS AF30;AF30;1101 1169 11AB;AF30;1101 1169 11AB; # (꼰; 꼰; 꼰; 꼰; 꼰; ) HANGUL SYLLABLE GGON AF31;AF31;1101 1169 11AC;AF31;1101 1169 11AC; # (꼱; 꼱; 꼱; 꼱; 꼱; ) HANGUL SYLLABLE GGONJ AF32;AF32;1101 1169 11AD;AF32;1101 1169 11AD; # (꼲; 꼲; 꼲; 꼲; 꼲; ) HANGUL SYLLABLE GGONH AF33;AF33;1101 1169 11AE;AF33;1101 1169 11AE; # (꼳; 꼳; 꼳; 꼳; 꼳; ) HANGUL SYLLABLE GGOD AF34;AF34;1101 1169 11AF;AF34;1101 1169 11AF; # (꼴; 꼴; 꼴; 꼴; 꼴; ) HANGUL SYLLABLE GGOL AF35;AF35;1101 1169 11B0;AF35;1101 1169 11B0; # (꼵; 꼵; 꼵; 꼵; 꼵; ) HANGUL SYLLABLE GGOLG AF36;AF36;1101 1169 11B1;AF36;1101 1169 11B1; # (꼶; 꼶; 꼶; 꼶; 꼶; ) HANGUL SYLLABLE GGOLM AF37;AF37;1101 1169 11B2;AF37;1101 1169 11B2; # (꼷; 꼷; 꼷; 꼷; 꼷; ) HANGUL SYLLABLE GGOLB AF38;AF38;1101 1169 11B3;AF38;1101 1169 11B3; # (꼸; 꼸; 꼸; 꼸; 꼸; ) HANGUL SYLLABLE GGOLS AF39;AF39;1101 1169 11B4;AF39;1101 1169 11B4; # (꼹; 꼹; 꼹; 꼹; 꼹; ) HANGUL SYLLABLE GGOLT AF3A;AF3A;1101 1169 11B5;AF3A;1101 1169 11B5; # (꼺; 꼺; 꼺; 꼺; 꼺; ) HANGUL SYLLABLE GGOLP AF3B;AF3B;1101 1169 11B6;AF3B;1101 1169 11B6; # (꼻; 꼻; 꼻; 꼻; 꼻; ) HANGUL SYLLABLE GGOLH AF3C;AF3C;1101 1169 11B7;AF3C;1101 1169 11B7; # (꼼; 꼼; 꼼; 꼼; 꼼; ) HANGUL SYLLABLE GGOM AF3D;AF3D;1101 1169 11B8;AF3D;1101 1169 11B8; # (꼽; 꼽; 꼽; 꼽; 꼽; ) HANGUL SYLLABLE GGOB AF3E;AF3E;1101 1169 11B9;AF3E;1101 1169 11B9; # (꼾; 꼾; 꼾; 꼾; 꼾; ) HANGUL SYLLABLE GGOBS AF3F;AF3F;1101 1169 11BA;AF3F;1101 1169 11BA; # (꼿; 꼿; 꼿; 꼿; 꼿; ) HANGUL SYLLABLE GGOS AF40;AF40;1101 1169 11BB;AF40;1101 1169 11BB; # (꽀; 꽀; 꽀; 꽀; 꽀; ) HANGUL SYLLABLE GGOSS AF41;AF41;1101 1169 11BC;AF41;1101 1169 11BC; # (꽁; 꽁; 꽁; 꽁; 꽁; ) HANGUL SYLLABLE GGONG AF42;AF42;1101 1169 11BD;AF42;1101 1169 11BD; # (꽂; 꽂; 꽂; 꽂; 꽂; ) HANGUL SYLLABLE GGOJ AF43;AF43;1101 1169 11BE;AF43;1101 1169 11BE; # (꽃; 꽃; 꽃; 꽃; 꽃; ) HANGUL SYLLABLE GGOC AF44;AF44;1101 1169 11BF;AF44;1101 1169 11BF; # (꽄; 꽄; 꽄; 꽄; 꽄; ) HANGUL SYLLABLE GGOK AF45;AF45;1101 1169 11C0;AF45;1101 1169 11C0; # (꽅; 꽅; 꽅; 꽅; 꽅; ) HANGUL SYLLABLE GGOT AF46;AF46;1101 1169 11C1;AF46;1101 1169 11C1; # (꽆; 꽆; 꽆; 꽆; 꽆; ) HANGUL SYLLABLE GGOP AF47;AF47;1101 1169 11C2;AF47;1101 1169 11C2; # (꽇; 꽇; 꽇; 꽇; 꽇; ) HANGUL SYLLABLE GGOH AF48;AF48;1101 116A;AF48;1101 116A; # (꽈; 꽈; 꽈; 꽈; 꽈; ) HANGUL SYLLABLE GGWA AF49;AF49;1101 116A 11A8;AF49;1101 116A 11A8; # (꽉; 꽉; 꽉; 꽉; 꽉; ) HANGUL SYLLABLE GGWAG AF4A;AF4A;1101 116A 11A9;AF4A;1101 116A 11A9; # (꽊; 꽊; 꽊; 꽊; 꽊; ) HANGUL SYLLABLE GGWAGG AF4B;AF4B;1101 116A 11AA;AF4B;1101 116A 11AA; # (꽋; 꽋; 꽋; 꽋; 꽋; ) HANGUL SYLLABLE GGWAGS AF4C;AF4C;1101 116A 11AB;AF4C;1101 116A 11AB; # (꽌; 꽌; 꽌; 꽌; 꽌; ) HANGUL SYLLABLE GGWAN AF4D;AF4D;1101 116A 11AC;AF4D;1101 116A 11AC; # (꽍; 꽍; 꽍; 꽍; 꽍; ) HANGUL SYLLABLE GGWANJ AF4E;AF4E;1101 116A 11AD;AF4E;1101 116A 11AD; # (꽎; 꽎; 꽎; 꽎; 꽎; ) HANGUL SYLLABLE GGWANH AF4F;AF4F;1101 116A 11AE;AF4F;1101 116A 11AE; # (꽏; 꽏; 꽏; 꽏; 꽏; ) HANGUL SYLLABLE GGWAD AF50;AF50;1101 116A 11AF;AF50;1101 116A 11AF; # (꽐; 꽐; 꽐; 꽐; 꽐; ) HANGUL SYLLABLE GGWAL AF51;AF51;1101 116A 11B0;AF51;1101 116A 11B0; # (꽑; 꽑; 꽑; 꽑; 꽑; ) HANGUL SYLLABLE GGWALG AF52;AF52;1101 116A 11B1;AF52;1101 116A 11B1; # (꽒; 꽒; 꽒; 꽒; 꽒; ) HANGUL SYLLABLE GGWALM AF53;AF53;1101 116A 11B2;AF53;1101 116A 11B2; # (꽓; 꽓; 꽓; 꽓; 꽓; ) HANGUL SYLLABLE GGWALB AF54;AF54;1101 116A 11B3;AF54;1101 116A 11B3; # (꽔; 꽔; 꽔; 꽔; 꽔; ) HANGUL SYLLABLE GGWALS AF55;AF55;1101 116A 11B4;AF55;1101 116A 11B4; # (꽕; 꽕; 꽕; 꽕; 꽕; ) HANGUL SYLLABLE GGWALT AF56;AF56;1101 116A 11B5;AF56;1101 116A 11B5; # (꽖; 꽖; 꽖; 꽖; 꽖; ) HANGUL SYLLABLE GGWALP AF57;AF57;1101 116A 11B6;AF57;1101 116A 11B6; # (꽗; 꽗; 꽗; 꽗; 꽗; ) HANGUL SYLLABLE GGWALH AF58;AF58;1101 116A 11B7;AF58;1101 116A 11B7; # (꽘; 꽘; 꽘; 꽘; 꽘; ) HANGUL SYLLABLE GGWAM AF59;AF59;1101 116A 11B8;AF59;1101 116A 11B8; # (꽙; 꽙; 꽙; 꽙; 꽙; ) HANGUL SYLLABLE GGWAB AF5A;AF5A;1101 116A 11B9;AF5A;1101 116A 11B9; # (꽚; 꽚; 꽚; 꽚; 꽚; ) HANGUL SYLLABLE GGWABS AF5B;AF5B;1101 116A 11BA;AF5B;1101 116A 11BA; # (꽛; 꽛; 꽛; 꽛; 꽛; ) HANGUL SYLLABLE GGWAS AF5C;AF5C;1101 116A 11BB;AF5C;1101 116A 11BB; # (꽜; 꽜; 꽜; 꽜; 꽜; ) HANGUL SYLLABLE GGWASS AF5D;AF5D;1101 116A 11BC;AF5D;1101 116A 11BC; # (꽝; 꽝; 꽝; 꽝; 꽝; ) HANGUL SYLLABLE GGWANG AF5E;AF5E;1101 116A 11BD;AF5E;1101 116A 11BD; # (꽞; 꽞; 꽞; 꽞; 꽞; ) HANGUL SYLLABLE GGWAJ AF5F;AF5F;1101 116A 11BE;AF5F;1101 116A 11BE; # (꽟; 꽟; 꽟; 꽟; 꽟; ) HANGUL SYLLABLE GGWAC AF60;AF60;1101 116A 11BF;AF60;1101 116A 11BF; # (꽠; 꽠; 꽠; 꽠; 꽠; ) HANGUL SYLLABLE GGWAK AF61;AF61;1101 116A 11C0;AF61;1101 116A 11C0; # (꽡; 꽡; 꽡; 꽡; 꽡; ) HANGUL SYLLABLE GGWAT AF62;AF62;1101 116A 11C1;AF62;1101 116A 11C1; # (꽢; 꽢; 꽢; 꽢; 꽢; ) HANGUL SYLLABLE GGWAP AF63;AF63;1101 116A 11C2;AF63;1101 116A 11C2; # (꽣; 꽣; 꽣; 꽣; 꽣; ) HANGUL SYLLABLE GGWAH AF64;AF64;1101 116B;AF64;1101 116B; # (꽤; 꽤; 꽤; 꽤; 꽤; ) HANGUL SYLLABLE GGWAE AF65;AF65;1101 116B 11A8;AF65;1101 116B 11A8; # (꽥; 꽥; 꽥; 꽥; 꽥; ) HANGUL SYLLABLE GGWAEG AF66;AF66;1101 116B 11A9;AF66;1101 116B 11A9; # (꽦; 꽦; 꽦; 꽦; 꽦; ) HANGUL SYLLABLE GGWAEGG AF67;AF67;1101 116B 11AA;AF67;1101 116B 11AA; # (꽧; 꽧; 꽧; 꽧; 꽧; ) HANGUL SYLLABLE GGWAEGS AF68;AF68;1101 116B 11AB;AF68;1101 116B 11AB; # (꽨; 꽨; 꽨; 꽨; 꽨; ) HANGUL SYLLABLE GGWAEN AF69;AF69;1101 116B 11AC;AF69;1101 116B 11AC; # (꽩; 꽩; 꽩; 꽩; 꽩; ) HANGUL SYLLABLE GGWAENJ AF6A;AF6A;1101 116B 11AD;AF6A;1101 116B 11AD; # (꽪; 꽪; 꽪; 꽪; 꽪; ) HANGUL SYLLABLE GGWAENH AF6B;AF6B;1101 116B 11AE;AF6B;1101 116B 11AE; # (꽫; 꽫; 꽫; 꽫; 꽫; ) HANGUL SYLLABLE GGWAED AF6C;AF6C;1101 116B 11AF;AF6C;1101 116B 11AF; # (꽬; 꽬; 꽬; 꽬; 꽬; ) HANGUL SYLLABLE GGWAEL AF6D;AF6D;1101 116B 11B0;AF6D;1101 116B 11B0; # (꽭; 꽭; 꽭; 꽭; 꽭; ) HANGUL SYLLABLE GGWAELG AF6E;AF6E;1101 116B 11B1;AF6E;1101 116B 11B1; # (꽮; 꽮; 꽮; 꽮; 꽮; ) HANGUL SYLLABLE GGWAELM AF6F;AF6F;1101 116B 11B2;AF6F;1101 116B 11B2; # (꽯; 꽯; 꽯; 꽯; 꽯; ) HANGUL SYLLABLE GGWAELB AF70;AF70;1101 116B 11B3;AF70;1101 116B 11B3; # (꽰; 꽰; 꽰; 꽰; 꽰; ) HANGUL SYLLABLE GGWAELS AF71;AF71;1101 116B 11B4;AF71;1101 116B 11B4; # (꽱; 꽱; 꽱; 꽱; 꽱; ) HANGUL SYLLABLE GGWAELT AF72;AF72;1101 116B 11B5;AF72;1101 116B 11B5; # (꽲; 꽲; 꽲; 꽲; 꽲; ) HANGUL SYLLABLE GGWAELP AF73;AF73;1101 116B 11B6;AF73;1101 116B 11B6; # (꽳; 꽳; 꽳; 꽳; 꽳; ) HANGUL SYLLABLE GGWAELH AF74;AF74;1101 116B 11B7;AF74;1101 116B 11B7; # (꽴; 꽴; 꽴; 꽴; 꽴; ) HANGUL SYLLABLE GGWAEM AF75;AF75;1101 116B 11B8;AF75;1101 116B 11B8; # (꽵; 꽵; 꽵; 꽵; 꽵; ) HANGUL SYLLABLE GGWAEB AF76;AF76;1101 116B 11B9;AF76;1101 116B 11B9; # (꽶; 꽶; 꽶; 꽶; 꽶; ) HANGUL SYLLABLE GGWAEBS AF77;AF77;1101 116B 11BA;AF77;1101 116B 11BA; # (꽷; 꽷; 꽷; 꽷; 꽷; ) HANGUL SYLLABLE GGWAES AF78;AF78;1101 116B 11BB;AF78;1101 116B 11BB; # (꽸; 꽸; 꽸; 꽸; 꽸; ) HANGUL SYLLABLE GGWAESS AF79;AF79;1101 116B 11BC;AF79;1101 116B 11BC; # (꽹; 꽹; 꽹; 꽹; 꽹; ) HANGUL SYLLABLE GGWAENG AF7A;AF7A;1101 116B 11BD;AF7A;1101 116B 11BD; # (꽺; 꽺; 꽺; 꽺; 꽺; ) HANGUL SYLLABLE GGWAEJ AF7B;AF7B;1101 116B 11BE;AF7B;1101 116B 11BE; # (꽻; 꽻; 꽻; 꽻; 꽻; ) HANGUL SYLLABLE GGWAEC AF7C;AF7C;1101 116B 11BF;AF7C;1101 116B 11BF; # (꽼; 꽼; 꽼; 꽼; 꽼; ) HANGUL SYLLABLE GGWAEK AF7D;AF7D;1101 116B 11C0;AF7D;1101 116B 11C0; # (꽽; 꽽; 꽽; 꽽; 꽽; ) HANGUL SYLLABLE GGWAET AF7E;AF7E;1101 116B 11C1;AF7E;1101 116B 11C1; # (꽾; 꽾; 꽾; 꽾; 꽾; ) HANGUL SYLLABLE GGWAEP AF7F;AF7F;1101 116B 11C2;AF7F;1101 116B 11C2; # (꽿; 꽿; 꽿; 꽿; 꽿; ) HANGUL SYLLABLE GGWAEH AF80;AF80;1101 116C;AF80;1101 116C; # (꾀; 꾀; 꾀; 꾀; 꾀; ) HANGUL SYLLABLE GGOE AF81;AF81;1101 116C 11A8;AF81;1101 116C 11A8; # (꾁; 꾁; 꾁; 꾁; 꾁; ) HANGUL SYLLABLE GGOEG AF82;AF82;1101 116C 11A9;AF82;1101 116C 11A9; # (꾂; 꾂; 꾂; 꾂; 꾂; ) HANGUL SYLLABLE GGOEGG AF83;AF83;1101 116C 11AA;AF83;1101 116C 11AA; # (꾃; 꾃; 꾃; 꾃; 꾃; ) HANGUL SYLLABLE GGOEGS AF84;AF84;1101 116C 11AB;AF84;1101 116C 11AB; # (꾄; 꾄; 꾄; 꾄; 꾄; ) HANGUL SYLLABLE GGOEN AF85;AF85;1101 116C 11AC;AF85;1101 116C 11AC; # (꾅; 꾅; 꾅; 꾅; 꾅; ) HANGUL SYLLABLE GGOENJ AF86;AF86;1101 116C 11AD;AF86;1101 116C 11AD; # (꾆; 꾆; 꾆; 꾆; 꾆; ) HANGUL SYLLABLE GGOENH AF87;AF87;1101 116C 11AE;AF87;1101 116C 11AE; # (꾇; 꾇; 꾇; 꾇; 꾇; ) HANGUL SYLLABLE GGOED AF88;AF88;1101 116C 11AF;AF88;1101 116C 11AF; # (꾈; 꾈; 꾈; 꾈; 꾈; ) HANGUL SYLLABLE GGOEL AF89;AF89;1101 116C 11B0;AF89;1101 116C 11B0; # (꾉; 꾉; 꾉; 꾉; 꾉; ) HANGUL SYLLABLE GGOELG AF8A;AF8A;1101 116C 11B1;AF8A;1101 116C 11B1; # (꾊; 꾊; 꾊; 꾊; 꾊; ) HANGUL SYLLABLE GGOELM AF8B;AF8B;1101 116C 11B2;AF8B;1101 116C 11B2; # (꾋; 꾋; 꾋; 꾋; 꾋; ) HANGUL SYLLABLE GGOELB AF8C;AF8C;1101 116C 11B3;AF8C;1101 116C 11B3; # (꾌; 꾌; 꾌; 꾌; 꾌; ) HANGUL SYLLABLE GGOELS AF8D;AF8D;1101 116C 11B4;AF8D;1101 116C 11B4; # (꾍; 꾍; 꾍; 꾍; 꾍; ) HANGUL SYLLABLE GGOELT AF8E;AF8E;1101 116C 11B5;AF8E;1101 116C 11B5; # (꾎; 꾎; 꾎; 꾎; 꾎; ) HANGUL SYLLABLE GGOELP AF8F;AF8F;1101 116C 11B6;AF8F;1101 116C 11B6; # (꾏; 꾏; 꾏; 꾏; 꾏; ) HANGUL SYLLABLE GGOELH AF90;AF90;1101 116C 11B7;AF90;1101 116C 11B7; # (꾐; 꾐; 꾐; 꾐; 꾐; ) HANGUL SYLLABLE GGOEM AF91;AF91;1101 116C 11B8;AF91;1101 116C 11B8; # (꾑; 꾑; 꾑; 꾑; 꾑; ) HANGUL SYLLABLE GGOEB AF92;AF92;1101 116C 11B9;AF92;1101 116C 11B9; # (꾒; 꾒; 꾒; 꾒; 꾒; ) HANGUL SYLLABLE GGOEBS AF93;AF93;1101 116C 11BA;AF93;1101 116C 11BA; # (꾓; 꾓; 꾓; 꾓; 꾓; ) HANGUL SYLLABLE GGOES AF94;AF94;1101 116C 11BB;AF94;1101 116C 11BB; # (꾔; 꾔; 꾔; 꾔; 꾔; ) HANGUL SYLLABLE GGOESS AF95;AF95;1101 116C 11BC;AF95;1101 116C 11BC; # (꾕; 꾕; 꾕; 꾕; 꾕; ) HANGUL SYLLABLE GGOENG AF96;AF96;1101 116C 11BD;AF96;1101 116C 11BD; # (꾖; 꾖; 꾖; 꾖; 꾖; ) HANGUL SYLLABLE GGOEJ AF97;AF97;1101 116C 11BE;AF97;1101 116C 11BE; # (꾗; 꾗; 꾗; 꾗; 꾗; ) HANGUL SYLLABLE GGOEC AF98;AF98;1101 116C 11BF;AF98;1101 116C 11BF; # (꾘; 꾘; 꾘; 꾘; 꾘; ) HANGUL SYLLABLE GGOEK AF99;AF99;1101 116C 11C0;AF99;1101 116C 11C0; # (꾙; 꾙; 꾙; 꾙; 꾙; ) HANGUL SYLLABLE GGOET AF9A;AF9A;1101 116C 11C1;AF9A;1101 116C 11C1; # (꾚; 꾚; 꾚; 꾚; 꾚; ) HANGUL SYLLABLE GGOEP AF9B;AF9B;1101 116C 11C2;AF9B;1101 116C 11C2; # (꾛; 꾛; 꾛; 꾛; 꾛; ) HANGUL SYLLABLE GGOEH AF9C;AF9C;1101 116D;AF9C;1101 116D; # (꾜; 꾜; 꾜; 꾜; 꾜; ) HANGUL SYLLABLE GGYO AF9D;AF9D;1101 116D 11A8;AF9D;1101 116D 11A8; # (꾝; 꾝; 꾝; 꾝; 꾝; ) HANGUL SYLLABLE GGYOG AF9E;AF9E;1101 116D 11A9;AF9E;1101 116D 11A9; # (꾞; 꾞; 꾞; 꾞; 꾞; ) HANGUL SYLLABLE GGYOGG AF9F;AF9F;1101 116D 11AA;AF9F;1101 116D 11AA; # (꾟; 꾟; 꾟; 꾟; 꾟; ) HANGUL SYLLABLE GGYOGS AFA0;AFA0;1101 116D 11AB;AFA0;1101 116D 11AB; # (꾠; 꾠; 꾠; 꾠; 꾠; ) HANGUL SYLLABLE GGYON AFA1;AFA1;1101 116D 11AC;AFA1;1101 116D 11AC; # (꾡; 꾡; 꾡; 꾡; 꾡; ) HANGUL SYLLABLE GGYONJ AFA2;AFA2;1101 116D 11AD;AFA2;1101 116D 11AD; # (꾢; 꾢; 꾢; 꾢; 꾢; ) HANGUL SYLLABLE GGYONH AFA3;AFA3;1101 116D 11AE;AFA3;1101 116D 11AE; # (꾣; 꾣; 꾣; 꾣; 꾣; ) HANGUL SYLLABLE GGYOD AFA4;AFA4;1101 116D 11AF;AFA4;1101 116D 11AF; # (꾤; 꾤; 꾤; 꾤; 꾤; ) HANGUL SYLLABLE GGYOL AFA5;AFA5;1101 116D 11B0;AFA5;1101 116D 11B0; # (꾥; 꾥; 꾥; 꾥; 꾥; ) HANGUL SYLLABLE GGYOLG AFA6;AFA6;1101 116D 11B1;AFA6;1101 116D 11B1; # (꾦; 꾦; 꾦; 꾦; 꾦; ) HANGUL SYLLABLE GGYOLM AFA7;AFA7;1101 116D 11B2;AFA7;1101 116D 11B2; # (꾧; 꾧; 꾧; 꾧; 꾧; ) HANGUL SYLLABLE GGYOLB AFA8;AFA8;1101 116D 11B3;AFA8;1101 116D 11B3; # (꾨; 꾨; 꾨; 꾨; 꾨; ) HANGUL SYLLABLE GGYOLS AFA9;AFA9;1101 116D 11B4;AFA9;1101 116D 11B4; # (꾩; 꾩; 꾩; 꾩; 꾩; ) HANGUL SYLLABLE GGYOLT AFAA;AFAA;1101 116D 11B5;AFAA;1101 116D 11B5; # (꾪; 꾪; 꾪; 꾪; 꾪; ) HANGUL SYLLABLE GGYOLP AFAB;AFAB;1101 116D 11B6;AFAB;1101 116D 11B6; # (꾫; 꾫; 꾫; 꾫; 꾫; ) HANGUL SYLLABLE GGYOLH AFAC;AFAC;1101 116D 11B7;AFAC;1101 116D 11B7; # (꾬; 꾬; 꾬; 꾬; 꾬; ) HANGUL SYLLABLE GGYOM AFAD;AFAD;1101 116D 11B8;AFAD;1101 116D 11B8; # (꾭; 꾭; 꾭; 꾭; 꾭; ) HANGUL SYLLABLE GGYOB AFAE;AFAE;1101 116D 11B9;AFAE;1101 116D 11B9; # (꾮; 꾮; 꾮; 꾮; 꾮; ) HANGUL SYLLABLE GGYOBS AFAF;AFAF;1101 116D 11BA;AFAF;1101 116D 11BA; # (꾯; 꾯; 꾯; 꾯; 꾯; ) HANGUL SYLLABLE GGYOS AFB0;AFB0;1101 116D 11BB;AFB0;1101 116D 11BB; # (꾰; 꾰; 꾰; 꾰; 꾰; ) HANGUL SYLLABLE GGYOSS AFB1;AFB1;1101 116D 11BC;AFB1;1101 116D 11BC; # (꾱; 꾱; 꾱; 꾱; 꾱; ) HANGUL SYLLABLE GGYONG AFB2;AFB2;1101 116D 11BD;AFB2;1101 116D 11BD; # (꾲; 꾲; 꾲; 꾲; 꾲; ) HANGUL SYLLABLE GGYOJ AFB3;AFB3;1101 116D 11BE;AFB3;1101 116D 11BE; # (꾳; 꾳; 꾳; 꾳; 꾳; ) HANGUL SYLLABLE GGYOC AFB4;AFB4;1101 116D 11BF;AFB4;1101 116D 11BF; # (꾴; 꾴; 꾴; 꾴; 꾴; ) HANGUL SYLLABLE GGYOK AFB5;AFB5;1101 116D 11C0;AFB5;1101 116D 11C0; # (꾵; 꾵; 꾵; 꾵; 꾵; ) HANGUL SYLLABLE GGYOT AFB6;AFB6;1101 116D 11C1;AFB6;1101 116D 11C1; # (꾶; 꾶; 꾶; 꾶; 꾶; ) HANGUL SYLLABLE GGYOP AFB7;AFB7;1101 116D 11C2;AFB7;1101 116D 11C2; # (꾷; 꾷; 꾷; 꾷; 꾷; ) HANGUL SYLLABLE GGYOH AFB8;AFB8;1101 116E;AFB8;1101 116E; # (꾸; 꾸; 꾸; 꾸; 꾸; ) HANGUL SYLLABLE GGU AFB9;AFB9;1101 116E 11A8;AFB9;1101 116E 11A8; # (꾹; 꾹; 꾹; 꾹; 꾹; ) HANGUL SYLLABLE GGUG AFBA;AFBA;1101 116E 11A9;AFBA;1101 116E 11A9; # (꾺; 꾺; 꾺; 꾺; 꾺; ) HANGUL SYLLABLE GGUGG AFBB;AFBB;1101 116E 11AA;AFBB;1101 116E 11AA; # (꾻; 꾻; 꾻; 꾻; 꾻; ) HANGUL SYLLABLE GGUGS AFBC;AFBC;1101 116E 11AB;AFBC;1101 116E 11AB; # (꾼; 꾼; 꾼; 꾼; 꾼; ) HANGUL SYLLABLE GGUN AFBD;AFBD;1101 116E 11AC;AFBD;1101 116E 11AC; # (꾽; 꾽; 꾽; 꾽; 꾽; ) HANGUL SYLLABLE GGUNJ AFBE;AFBE;1101 116E 11AD;AFBE;1101 116E 11AD; # (꾾; 꾾; 꾾; 꾾; 꾾; ) HANGUL SYLLABLE GGUNH AFBF;AFBF;1101 116E 11AE;AFBF;1101 116E 11AE; # (꾿; 꾿; 꾿; 꾿; 꾿; ) HANGUL SYLLABLE GGUD AFC0;AFC0;1101 116E 11AF;AFC0;1101 116E 11AF; # (꿀; 꿀; 꿀; 꿀; 꿀; ) HANGUL SYLLABLE GGUL AFC1;AFC1;1101 116E 11B0;AFC1;1101 116E 11B0; # (꿁; 꿁; 꿁; 꿁; 꿁; ) HANGUL SYLLABLE GGULG AFC2;AFC2;1101 116E 11B1;AFC2;1101 116E 11B1; # (꿂; 꿂; 꿂; 꿂; 꿂; ) HANGUL SYLLABLE GGULM AFC3;AFC3;1101 116E 11B2;AFC3;1101 116E 11B2; # (꿃; 꿃; 꿃; 꿃; 꿃; ) HANGUL SYLLABLE GGULB AFC4;AFC4;1101 116E 11B3;AFC4;1101 116E 11B3; # (꿄; 꿄; 꿄; 꿄; 꿄; ) HANGUL SYLLABLE GGULS AFC5;AFC5;1101 116E 11B4;AFC5;1101 116E 11B4; # (꿅; 꿅; 꿅; 꿅; 꿅; ) HANGUL SYLLABLE GGULT AFC6;AFC6;1101 116E 11B5;AFC6;1101 116E 11B5; # (꿆; 꿆; 꿆; 꿆; 꿆; ) HANGUL SYLLABLE GGULP AFC7;AFC7;1101 116E 11B6;AFC7;1101 116E 11B6; # (꿇; 꿇; 꿇; 꿇; 꿇; ) HANGUL SYLLABLE GGULH AFC8;AFC8;1101 116E 11B7;AFC8;1101 116E 11B7; # (꿈; 꿈; 꿈; 꿈; 꿈; ) HANGUL SYLLABLE GGUM AFC9;AFC9;1101 116E 11B8;AFC9;1101 116E 11B8; # (꿉; 꿉; 꿉; 꿉; 꿉; ) HANGUL SYLLABLE GGUB AFCA;AFCA;1101 116E 11B9;AFCA;1101 116E 11B9; # (꿊; 꿊; 꿊; 꿊; 꿊; ) HANGUL SYLLABLE GGUBS AFCB;AFCB;1101 116E 11BA;AFCB;1101 116E 11BA; # (꿋; 꿋; 꿋; 꿋; 꿋; ) HANGUL SYLLABLE GGUS AFCC;AFCC;1101 116E 11BB;AFCC;1101 116E 11BB; # (꿌; 꿌; 꿌; 꿌; 꿌; ) HANGUL SYLLABLE GGUSS AFCD;AFCD;1101 116E 11BC;AFCD;1101 116E 11BC; # (꿍; 꿍; 꿍; 꿍; 꿍; ) HANGUL SYLLABLE GGUNG AFCE;AFCE;1101 116E 11BD;AFCE;1101 116E 11BD; # (꿎; 꿎; 꿎; 꿎; 꿎; ) HANGUL SYLLABLE GGUJ AFCF;AFCF;1101 116E 11BE;AFCF;1101 116E 11BE; # (꿏; 꿏; 꿏; 꿏; 꿏; ) HANGUL SYLLABLE GGUC AFD0;AFD0;1101 116E 11BF;AFD0;1101 116E 11BF; # (꿐; 꿐; 꿐; 꿐; 꿐; ) HANGUL SYLLABLE GGUK AFD1;AFD1;1101 116E 11C0;AFD1;1101 116E 11C0; # (꿑; 꿑; 꿑; 꿑; 꿑; ) HANGUL SYLLABLE GGUT AFD2;AFD2;1101 116E 11C1;AFD2;1101 116E 11C1; # (꿒; 꿒; 꿒; 꿒; 꿒; ) HANGUL SYLLABLE GGUP AFD3;AFD3;1101 116E 11C2;AFD3;1101 116E 11C2; # (꿓; 꿓; 꿓; 꿓; 꿓; ) HANGUL SYLLABLE GGUH AFD4;AFD4;1101 116F;AFD4;1101 116F; # (꿔; 꿔; 꿔; 꿔; 꿔; ) HANGUL SYLLABLE GGWEO AFD5;AFD5;1101 116F 11A8;AFD5;1101 116F 11A8; # (꿕; 꿕; 꿕; 꿕; 꿕; ) HANGUL SYLLABLE GGWEOG AFD6;AFD6;1101 116F 11A9;AFD6;1101 116F 11A9; # (꿖; 꿖; 꿖; 꿖; 꿖; ) HANGUL SYLLABLE GGWEOGG AFD7;AFD7;1101 116F 11AA;AFD7;1101 116F 11AA; # (꿗; 꿗; 꿗; 꿗; 꿗; ) HANGUL SYLLABLE GGWEOGS AFD8;AFD8;1101 116F 11AB;AFD8;1101 116F 11AB; # (꿘; 꿘; 꿘; 꿘; 꿘; ) HANGUL SYLLABLE GGWEON AFD9;AFD9;1101 116F 11AC;AFD9;1101 116F 11AC; # (꿙; 꿙; 꿙; 꿙; 꿙; ) HANGUL SYLLABLE GGWEONJ AFDA;AFDA;1101 116F 11AD;AFDA;1101 116F 11AD; # (꿚; 꿚; 꿚; 꿚; 꿚; ) HANGUL SYLLABLE GGWEONH AFDB;AFDB;1101 116F 11AE;AFDB;1101 116F 11AE; # (꿛; 꿛; 꿛; 꿛; 꿛; ) HANGUL SYLLABLE GGWEOD AFDC;AFDC;1101 116F 11AF;AFDC;1101 116F 11AF; # (꿜; 꿜; 꿜; 꿜; 꿜; ) HANGUL SYLLABLE GGWEOL AFDD;AFDD;1101 116F 11B0;AFDD;1101 116F 11B0; # (꿝; 꿝; 꿝; 꿝; 꿝; ) HANGUL SYLLABLE GGWEOLG AFDE;AFDE;1101 116F 11B1;AFDE;1101 116F 11B1; # (꿞; 꿞; 꿞; 꿞; 꿞; ) HANGUL SYLLABLE GGWEOLM AFDF;AFDF;1101 116F 11B2;AFDF;1101 116F 11B2; # (꿟; 꿟; 꿟; 꿟; 꿟; ) HANGUL SYLLABLE GGWEOLB AFE0;AFE0;1101 116F 11B3;AFE0;1101 116F 11B3; # (꿠; 꿠; 꿠; 꿠; 꿠; ) HANGUL SYLLABLE GGWEOLS AFE1;AFE1;1101 116F 11B4;AFE1;1101 116F 11B4; # (꿡; 꿡; 꿡; 꿡; 꿡; ) HANGUL SYLLABLE GGWEOLT AFE2;AFE2;1101 116F 11B5;AFE2;1101 116F 11B5; # (꿢; 꿢; 꿢; 꿢; 꿢; ) HANGUL SYLLABLE GGWEOLP AFE3;AFE3;1101 116F 11B6;AFE3;1101 116F 11B6; # (꿣; 꿣; 꿣; 꿣; 꿣; ) HANGUL SYLLABLE GGWEOLH AFE4;AFE4;1101 116F 11B7;AFE4;1101 116F 11B7; # (꿤; 꿤; 꿤; 꿤; 꿤; ) HANGUL SYLLABLE GGWEOM AFE5;AFE5;1101 116F 11B8;AFE5;1101 116F 11B8; # (꿥; 꿥; 꿥; 꿥; 꿥; ) HANGUL SYLLABLE GGWEOB AFE6;AFE6;1101 116F 11B9;AFE6;1101 116F 11B9; # (꿦; 꿦; 꿦; 꿦; 꿦; ) HANGUL SYLLABLE GGWEOBS AFE7;AFE7;1101 116F 11BA;AFE7;1101 116F 11BA; # (꿧; 꿧; 꿧; 꿧; 꿧; ) HANGUL SYLLABLE GGWEOS AFE8;AFE8;1101 116F 11BB;AFE8;1101 116F 11BB; # (꿨; 꿨; 꿨; 꿨; 꿨; ) HANGUL SYLLABLE GGWEOSS AFE9;AFE9;1101 116F 11BC;AFE9;1101 116F 11BC; # (꿩; 꿩; 꿩; 꿩; 꿩; ) HANGUL SYLLABLE GGWEONG AFEA;AFEA;1101 116F 11BD;AFEA;1101 116F 11BD; # (꿪; 꿪; 꿪; 꿪; 꿪; ) HANGUL SYLLABLE GGWEOJ AFEB;AFEB;1101 116F 11BE;AFEB;1101 116F 11BE; # (꿫; 꿫; 꿫; 꿫; 꿫; ) HANGUL SYLLABLE GGWEOC AFEC;AFEC;1101 116F 11BF;AFEC;1101 116F 11BF; # (꿬; 꿬; 꿬; 꿬; 꿬; ) HANGUL SYLLABLE GGWEOK AFED;AFED;1101 116F 11C0;AFED;1101 116F 11C0; # (꿭; 꿭; 꿭; 꿭; 꿭; ) HANGUL SYLLABLE GGWEOT AFEE;AFEE;1101 116F 11C1;AFEE;1101 116F 11C1; # (꿮; 꿮; 꿮; 꿮; 꿮; ) HANGUL SYLLABLE GGWEOP AFEF;AFEF;1101 116F 11C2;AFEF;1101 116F 11C2; # (꿯; 꿯; 꿯; 꿯; 꿯; ) HANGUL SYLLABLE GGWEOH AFF0;AFF0;1101 1170;AFF0;1101 1170; # (꿰; 꿰; 꿰; 꿰; 꿰; ) HANGUL SYLLABLE GGWE AFF1;AFF1;1101 1170 11A8;AFF1;1101 1170 11A8; # (꿱; 꿱; 꿱; 꿱; 꿱; ) HANGUL SYLLABLE GGWEG AFF2;AFF2;1101 1170 11A9;AFF2;1101 1170 11A9; # (꿲; 꿲; 꿲; 꿲; 꿲; ) HANGUL SYLLABLE GGWEGG AFF3;AFF3;1101 1170 11AA;AFF3;1101 1170 11AA; # (꿳; 꿳; 꿳; 꿳; 꿳; ) HANGUL SYLLABLE GGWEGS AFF4;AFF4;1101 1170 11AB;AFF4;1101 1170 11AB; # (꿴; 꿴; 꿴; 꿴; 꿴; ) HANGUL SYLLABLE GGWEN AFF5;AFF5;1101 1170 11AC;AFF5;1101 1170 11AC; # (꿵; 꿵; 꿵; 꿵; 꿵; ) HANGUL SYLLABLE GGWENJ AFF6;AFF6;1101 1170 11AD;AFF6;1101 1170 11AD; # (꿶; 꿶; 꿶; 꿶; 꿶; ) HANGUL SYLLABLE GGWENH AFF7;AFF7;1101 1170 11AE;AFF7;1101 1170 11AE; # (꿷; 꿷; 꿷; 꿷; 꿷; ) HANGUL SYLLABLE GGWED AFF8;AFF8;1101 1170 11AF;AFF8;1101 1170 11AF; # (꿸; 꿸; 꿸; 꿸; 꿸; ) HANGUL SYLLABLE GGWEL AFF9;AFF9;1101 1170 11B0;AFF9;1101 1170 11B0; # (꿹; 꿹; 꿹; 꿹; 꿹; ) HANGUL SYLLABLE GGWELG AFFA;AFFA;1101 1170 11B1;AFFA;1101 1170 11B1; # (꿺; 꿺; 꿺; 꿺; 꿺; ) HANGUL SYLLABLE GGWELM AFFB;AFFB;1101 1170 11B2;AFFB;1101 1170 11B2; # (꿻; 꿻; 꿻; 꿻; 꿻; ) HANGUL SYLLABLE GGWELB AFFC;AFFC;1101 1170 11B3;AFFC;1101 1170 11B3; # (꿼; 꿼; 꿼; 꿼; 꿼; ) HANGUL SYLLABLE GGWELS AFFD;AFFD;1101 1170 11B4;AFFD;1101 1170 11B4; # (꿽; 꿽; 꿽; 꿽; 꿽; ) HANGUL SYLLABLE GGWELT AFFE;AFFE;1101 1170 11B5;AFFE;1101 1170 11B5; # (꿾; 꿾; 꿾; 꿾; 꿾; ) HANGUL SYLLABLE GGWELP AFFF;AFFF;1101 1170 11B6;AFFF;1101 1170 11B6; # (꿿; 꿿; 꿿; 꿿; 꿿; ) HANGUL SYLLABLE GGWELH B000;B000;1101 1170 11B7;B000;1101 1170 11B7; # (뀀; 뀀; 뀀; 뀀; 뀀; ) HANGUL SYLLABLE GGWEM B001;B001;1101 1170 11B8;B001;1101 1170 11B8; # (뀁; 뀁; 뀁; 뀁; 뀁; ) HANGUL SYLLABLE GGWEB B002;B002;1101 1170 11B9;B002;1101 1170 11B9; # (뀂; 뀂; 뀂; 뀂; 뀂; ) HANGUL SYLLABLE GGWEBS B003;B003;1101 1170 11BA;B003;1101 1170 11BA; # (뀃; 뀃; 뀃; 뀃; 뀃; ) HANGUL SYLLABLE GGWES B004;B004;1101 1170 11BB;B004;1101 1170 11BB; # (뀄; 뀄; 뀄; 뀄; 뀄; ) HANGUL SYLLABLE GGWESS B005;B005;1101 1170 11BC;B005;1101 1170 11BC; # (뀅; 뀅; 뀅; 뀅; 뀅; ) HANGUL SYLLABLE GGWENG B006;B006;1101 1170 11BD;B006;1101 1170 11BD; # (뀆; 뀆; 뀆; 뀆; 뀆; ) HANGUL SYLLABLE GGWEJ B007;B007;1101 1170 11BE;B007;1101 1170 11BE; # (뀇; 뀇; 뀇; 뀇; 뀇; ) HANGUL SYLLABLE GGWEC B008;B008;1101 1170 11BF;B008;1101 1170 11BF; # (뀈; 뀈; 뀈; 뀈; 뀈; ) HANGUL SYLLABLE GGWEK B009;B009;1101 1170 11C0;B009;1101 1170 11C0; # (뀉; 뀉; 뀉; 뀉; 뀉; ) HANGUL SYLLABLE GGWET B00A;B00A;1101 1170 11C1;B00A;1101 1170 11C1; # (뀊; 뀊; 뀊; 뀊; 뀊; ) HANGUL SYLLABLE GGWEP B00B;B00B;1101 1170 11C2;B00B;1101 1170 11C2; # (뀋; 뀋; 뀋; 뀋; 뀋; ) HANGUL SYLLABLE GGWEH B00C;B00C;1101 1171;B00C;1101 1171; # (뀌; 뀌; 뀌; 뀌; 뀌; ) HANGUL SYLLABLE GGWI B00D;B00D;1101 1171 11A8;B00D;1101 1171 11A8; # (뀍; 뀍; 뀍; 뀍; 뀍; ) HANGUL SYLLABLE GGWIG B00E;B00E;1101 1171 11A9;B00E;1101 1171 11A9; # (뀎; 뀎; 뀎; 뀎; 뀎; ) HANGUL SYLLABLE GGWIGG B00F;B00F;1101 1171 11AA;B00F;1101 1171 11AA; # (뀏; 뀏; 뀏; 뀏; 뀏; ) HANGUL SYLLABLE GGWIGS B010;B010;1101 1171 11AB;B010;1101 1171 11AB; # (뀐; 뀐; 뀐; 뀐; 뀐; ) HANGUL SYLLABLE GGWIN B011;B011;1101 1171 11AC;B011;1101 1171 11AC; # (뀑; 뀑; 뀑; 뀑; 뀑; ) HANGUL SYLLABLE GGWINJ B012;B012;1101 1171 11AD;B012;1101 1171 11AD; # (뀒; 뀒; 뀒; 뀒; 뀒; ) HANGUL SYLLABLE GGWINH B013;B013;1101 1171 11AE;B013;1101 1171 11AE; # (뀓; 뀓; 뀓; 뀓; 뀓; ) HANGUL SYLLABLE GGWID B014;B014;1101 1171 11AF;B014;1101 1171 11AF; # (뀔; 뀔; 뀔; 뀔; 뀔; ) HANGUL SYLLABLE GGWIL B015;B015;1101 1171 11B0;B015;1101 1171 11B0; # (뀕; 뀕; 뀕; 뀕; 뀕; ) HANGUL SYLLABLE GGWILG B016;B016;1101 1171 11B1;B016;1101 1171 11B1; # (뀖; 뀖; 뀖; 뀖; 뀖; ) HANGUL SYLLABLE GGWILM B017;B017;1101 1171 11B2;B017;1101 1171 11B2; # (뀗; 뀗; 뀗; 뀗; 뀗; ) HANGUL SYLLABLE GGWILB B018;B018;1101 1171 11B3;B018;1101 1171 11B3; # (뀘; 뀘; 뀘; 뀘; 뀘; ) HANGUL SYLLABLE GGWILS B019;B019;1101 1171 11B4;B019;1101 1171 11B4; # (뀙; 뀙; 뀙; 뀙; 뀙; ) HANGUL SYLLABLE GGWILT B01A;B01A;1101 1171 11B5;B01A;1101 1171 11B5; # (뀚; 뀚; 뀚; 뀚; 뀚; ) HANGUL SYLLABLE GGWILP B01B;B01B;1101 1171 11B6;B01B;1101 1171 11B6; # (뀛; 뀛; 뀛; 뀛; 뀛; ) HANGUL SYLLABLE GGWILH B01C;B01C;1101 1171 11B7;B01C;1101 1171 11B7; # (뀜; 뀜; 뀜; 뀜; 뀜; ) HANGUL SYLLABLE GGWIM B01D;B01D;1101 1171 11B8;B01D;1101 1171 11B8; # (뀝; 뀝; 뀝; 뀝; 뀝; ) HANGUL SYLLABLE GGWIB B01E;B01E;1101 1171 11B9;B01E;1101 1171 11B9; # (뀞; 뀞; 뀞; 뀞; 뀞; ) HANGUL SYLLABLE GGWIBS B01F;B01F;1101 1171 11BA;B01F;1101 1171 11BA; # (뀟; 뀟; 뀟; 뀟; 뀟; ) HANGUL SYLLABLE GGWIS B020;B020;1101 1171 11BB;B020;1101 1171 11BB; # (뀠; 뀠; 뀠; 뀠; 뀠; ) HANGUL SYLLABLE GGWISS B021;B021;1101 1171 11BC;B021;1101 1171 11BC; # (뀡; 뀡; 뀡; 뀡; 뀡; ) HANGUL SYLLABLE GGWING B022;B022;1101 1171 11BD;B022;1101 1171 11BD; # (뀢; 뀢; 뀢; 뀢; 뀢; ) HANGUL SYLLABLE GGWIJ B023;B023;1101 1171 11BE;B023;1101 1171 11BE; # (뀣; 뀣; 뀣; 뀣; 뀣; ) HANGUL SYLLABLE GGWIC B024;B024;1101 1171 11BF;B024;1101 1171 11BF; # (뀤; 뀤; 뀤; 뀤; 뀤; ) HANGUL SYLLABLE GGWIK B025;B025;1101 1171 11C0;B025;1101 1171 11C0; # (뀥; 뀥; 뀥; 뀥; 뀥; ) HANGUL SYLLABLE GGWIT B026;B026;1101 1171 11C1;B026;1101 1171 11C1; # (뀦; 뀦; 뀦; 뀦; 뀦; ) HANGUL SYLLABLE GGWIP B027;B027;1101 1171 11C2;B027;1101 1171 11C2; # (뀧; 뀧; 뀧; 뀧; 뀧; ) HANGUL SYLLABLE GGWIH B028;B028;1101 1172;B028;1101 1172; # (뀨; 뀨; 뀨; 뀨; 뀨; ) HANGUL SYLLABLE GGYU B029;B029;1101 1172 11A8;B029;1101 1172 11A8; # (뀩; 뀩; 뀩; 뀩; 뀩; ) HANGUL SYLLABLE GGYUG B02A;B02A;1101 1172 11A9;B02A;1101 1172 11A9; # (뀪; 뀪; 뀪; 뀪; 뀪; ) HANGUL SYLLABLE GGYUGG B02B;B02B;1101 1172 11AA;B02B;1101 1172 11AA; # (뀫; 뀫; 뀫; 뀫; 뀫; ) HANGUL SYLLABLE GGYUGS B02C;B02C;1101 1172 11AB;B02C;1101 1172 11AB; # (뀬; 뀬; 뀬; 뀬; 뀬; ) HANGUL SYLLABLE GGYUN B02D;B02D;1101 1172 11AC;B02D;1101 1172 11AC; # (뀭; 뀭; 뀭; 뀭; 뀭; ) HANGUL SYLLABLE GGYUNJ B02E;B02E;1101 1172 11AD;B02E;1101 1172 11AD; # (뀮; 뀮; 뀮; 뀮; 뀮; ) HANGUL SYLLABLE GGYUNH B02F;B02F;1101 1172 11AE;B02F;1101 1172 11AE; # (뀯; 뀯; 뀯; 뀯; 뀯; ) HANGUL SYLLABLE GGYUD B030;B030;1101 1172 11AF;B030;1101 1172 11AF; # (뀰; 뀰; 뀰; 뀰; 뀰; ) HANGUL SYLLABLE GGYUL B031;B031;1101 1172 11B0;B031;1101 1172 11B0; # (뀱; 뀱; 뀱; 뀱; 뀱; ) HANGUL SYLLABLE GGYULG B032;B032;1101 1172 11B1;B032;1101 1172 11B1; # (뀲; 뀲; 뀲; 뀲; 뀲; ) HANGUL SYLLABLE GGYULM B033;B033;1101 1172 11B2;B033;1101 1172 11B2; # (뀳; 뀳; 뀳; 뀳; 뀳; ) HANGUL SYLLABLE GGYULB B034;B034;1101 1172 11B3;B034;1101 1172 11B3; # (뀴; 뀴; 뀴; 뀴; 뀴; ) HANGUL SYLLABLE GGYULS B035;B035;1101 1172 11B4;B035;1101 1172 11B4; # (뀵; 뀵; 뀵; 뀵; 뀵; ) HANGUL SYLLABLE GGYULT B036;B036;1101 1172 11B5;B036;1101 1172 11B5; # (뀶; 뀶; 뀶; 뀶; 뀶; ) HANGUL SYLLABLE GGYULP B037;B037;1101 1172 11B6;B037;1101 1172 11B6; # (뀷; 뀷; 뀷; 뀷; 뀷; ) HANGUL SYLLABLE GGYULH B038;B038;1101 1172 11B7;B038;1101 1172 11B7; # (뀸; 뀸; 뀸; 뀸; 뀸; ) HANGUL SYLLABLE GGYUM B039;B039;1101 1172 11B8;B039;1101 1172 11B8; # (뀹; 뀹; 뀹; 뀹; 뀹; ) HANGUL SYLLABLE GGYUB B03A;B03A;1101 1172 11B9;B03A;1101 1172 11B9; # (뀺; 뀺; 뀺; 뀺; 뀺; ) HANGUL SYLLABLE GGYUBS B03B;B03B;1101 1172 11BA;B03B;1101 1172 11BA; # (뀻; 뀻; 뀻; 뀻; 뀻; ) HANGUL SYLLABLE GGYUS B03C;B03C;1101 1172 11BB;B03C;1101 1172 11BB; # (뀼; 뀼; 뀼; 뀼; 뀼; ) HANGUL SYLLABLE GGYUSS B03D;B03D;1101 1172 11BC;B03D;1101 1172 11BC; # (뀽; 뀽; 뀽; 뀽; 뀽; ) HANGUL SYLLABLE GGYUNG B03E;B03E;1101 1172 11BD;B03E;1101 1172 11BD; # (뀾; 뀾; 뀾; 뀾; 뀾; ) HANGUL SYLLABLE GGYUJ B03F;B03F;1101 1172 11BE;B03F;1101 1172 11BE; # (뀿; 뀿; 뀿; 뀿; 뀿; ) HANGUL SYLLABLE GGYUC B040;B040;1101 1172 11BF;B040;1101 1172 11BF; # (끀; 끀; 끀; 끀; 끀; ) HANGUL SYLLABLE GGYUK B041;B041;1101 1172 11C0;B041;1101 1172 11C0; # (끁; 끁; 끁; 끁; 끁; ) HANGUL SYLLABLE GGYUT B042;B042;1101 1172 11C1;B042;1101 1172 11C1; # (끂; 끂; 끂; 끂; 끂; ) HANGUL SYLLABLE GGYUP B043;B043;1101 1172 11C2;B043;1101 1172 11C2; # (끃; 끃; 끃; 끃; 끃; ) HANGUL SYLLABLE GGYUH B044;B044;1101 1173;B044;1101 1173; # (끄; 끄; 끄; 끄; 끄; ) HANGUL SYLLABLE GGEU B045;B045;1101 1173 11A8;B045;1101 1173 11A8; # (끅; 끅; 끅; 끅; 끅; ) HANGUL SYLLABLE GGEUG B046;B046;1101 1173 11A9;B046;1101 1173 11A9; # (끆; 끆; 끆; 끆; 끆; ) HANGUL SYLLABLE GGEUGG B047;B047;1101 1173 11AA;B047;1101 1173 11AA; # (끇; 끇; 끇; 끇; 끇; ) HANGUL SYLLABLE GGEUGS B048;B048;1101 1173 11AB;B048;1101 1173 11AB; # (끈; 끈; 끈; 끈; 끈; ) HANGUL SYLLABLE GGEUN B049;B049;1101 1173 11AC;B049;1101 1173 11AC; # (끉; 끉; 끉; 끉; 끉; ) HANGUL SYLLABLE GGEUNJ B04A;B04A;1101 1173 11AD;B04A;1101 1173 11AD; # (끊; 끊; 끊; 끊; 끊; ) HANGUL SYLLABLE GGEUNH B04B;B04B;1101 1173 11AE;B04B;1101 1173 11AE; # (끋; 끋; 끋; 끋; 끋; ) HANGUL SYLLABLE GGEUD B04C;B04C;1101 1173 11AF;B04C;1101 1173 11AF; # (끌; 끌; 끌; 끌; 끌; ) HANGUL SYLLABLE GGEUL B04D;B04D;1101 1173 11B0;B04D;1101 1173 11B0; # (끍; 끍; 끍; 끍; 끍; ) HANGUL SYLLABLE GGEULG B04E;B04E;1101 1173 11B1;B04E;1101 1173 11B1; # (끎; 끎; 끎; 끎; 끎; ) HANGUL SYLLABLE GGEULM B04F;B04F;1101 1173 11B2;B04F;1101 1173 11B2; # (끏; 끏; 끏; 끏; 끏; ) HANGUL SYLLABLE GGEULB B050;B050;1101 1173 11B3;B050;1101 1173 11B3; # (끐; 끐; 끐; 끐; 끐; ) HANGUL SYLLABLE GGEULS B051;B051;1101 1173 11B4;B051;1101 1173 11B4; # (끑; 끑; 끑; 끑; 끑; ) HANGUL SYLLABLE GGEULT B052;B052;1101 1173 11B5;B052;1101 1173 11B5; # (끒; 끒; 끒; 끒; 끒; ) HANGUL SYLLABLE GGEULP B053;B053;1101 1173 11B6;B053;1101 1173 11B6; # (끓; 끓; 끓; 끓; 끓; ) HANGUL SYLLABLE GGEULH B054;B054;1101 1173 11B7;B054;1101 1173 11B7; # (끔; 끔; 끔; 끔; 끔; ) HANGUL SYLLABLE GGEUM B055;B055;1101 1173 11B8;B055;1101 1173 11B8; # (끕; 끕; 끕; 끕; 끕; ) HANGUL SYLLABLE GGEUB B056;B056;1101 1173 11B9;B056;1101 1173 11B9; # (끖; 끖; 끖; 끖; 끖; ) HANGUL SYLLABLE GGEUBS B057;B057;1101 1173 11BA;B057;1101 1173 11BA; # (끗; 끗; 끗; 끗; 끗; ) HANGUL SYLLABLE GGEUS B058;B058;1101 1173 11BB;B058;1101 1173 11BB; # (끘; 끘; 끘; 끘; 끘; ) HANGUL SYLLABLE GGEUSS B059;B059;1101 1173 11BC;B059;1101 1173 11BC; # (끙; 끙; 끙; 끙; 끙; ) HANGUL SYLLABLE GGEUNG B05A;B05A;1101 1173 11BD;B05A;1101 1173 11BD; # (끚; 끚; 끚; 끚; 끚; ) HANGUL SYLLABLE GGEUJ B05B;B05B;1101 1173 11BE;B05B;1101 1173 11BE; # (끛; 끛; 끛; 끛; 끛; ) HANGUL SYLLABLE GGEUC B05C;B05C;1101 1173 11BF;B05C;1101 1173 11BF; # (끜; 끜; 끜; 끜; 끜; ) HANGUL SYLLABLE GGEUK B05D;B05D;1101 1173 11C0;B05D;1101 1173 11C0; # (끝; 끝; 끝; 끝; 끝; ) HANGUL SYLLABLE GGEUT B05E;B05E;1101 1173 11C1;B05E;1101 1173 11C1; # (끞; 끞; 끞; 끞; 끞; ) HANGUL SYLLABLE GGEUP B05F;B05F;1101 1173 11C2;B05F;1101 1173 11C2; # (끟; 끟; 끟; 끟; 끟; ) HANGUL SYLLABLE GGEUH B060;B060;1101 1174;B060;1101 1174; # (끠; 끠; 끠; 끠; 끠; ) HANGUL SYLLABLE GGYI B061;B061;1101 1174 11A8;B061;1101 1174 11A8; # (끡; 끡; 끡; 끡; 끡; ) HANGUL SYLLABLE GGYIG B062;B062;1101 1174 11A9;B062;1101 1174 11A9; # (끢; 끢; 끢; 끢; 끢; ) HANGUL SYLLABLE GGYIGG B063;B063;1101 1174 11AA;B063;1101 1174 11AA; # (끣; 끣; 끣; 끣; 끣; ) HANGUL SYLLABLE GGYIGS B064;B064;1101 1174 11AB;B064;1101 1174 11AB; # (끤; 끤; 끤; 끤; 끤; ) HANGUL SYLLABLE GGYIN B065;B065;1101 1174 11AC;B065;1101 1174 11AC; # (끥; 끥; 끥; 끥; 끥; ) HANGUL SYLLABLE GGYINJ B066;B066;1101 1174 11AD;B066;1101 1174 11AD; # (끦; 끦; 끦; 끦; 끦; ) HANGUL SYLLABLE GGYINH B067;B067;1101 1174 11AE;B067;1101 1174 11AE; # (끧; 끧; 끧; 끧; 끧; ) HANGUL SYLLABLE GGYID B068;B068;1101 1174 11AF;B068;1101 1174 11AF; # (끨; 끨; 끨; 끨; 끨; ) HANGUL SYLLABLE GGYIL B069;B069;1101 1174 11B0;B069;1101 1174 11B0; # (끩; 끩; 끩; 끩; 끩; ) HANGUL SYLLABLE GGYILG B06A;B06A;1101 1174 11B1;B06A;1101 1174 11B1; # (끪; 끪; 끪; 끪; 끪; ) HANGUL SYLLABLE GGYILM B06B;B06B;1101 1174 11B2;B06B;1101 1174 11B2; # (끫; 끫; 끫; 끫; 끫; ) HANGUL SYLLABLE GGYILB B06C;B06C;1101 1174 11B3;B06C;1101 1174 11B3; # (끬; 끬; 끬; 끬; 끬; ) HANGUL SYLLABLE GGYILS B06D;B06D;1101 1174 11B4;B06D;1101 1174 11B4; # (끭; 끭; 끭; 끭; 끭; ) HANGUL SYLLABLE GGYILT B06E;B06E;1101 1174 11B5;B06E;1101 1174 11B5; # (끮; 끮; 끮; 끮; 끮; ) HANGUL SYLLABLE GGYILP B06F;B06F;1101 1174 11B6;B06F;1101 1174 11B6; # (끯; 끯; 끯; 끯; 끯; ) HANGUL SYLLABLE GGYILH B070;B070;1101 1174 11B7;B070;1101 1174 11B7; # (끰; 끰; 끰; 끰; 끰; ) HANGUL SYLLABLE GGYIM B071;B071;1101 1174 11B8;B071;1101 1174 11B8; # (끱; 끱; 끱; 끱; 끱; ) HANGUL SYLLABLE GGYIB B072;B072;1101 1174 11B9;B072;1101 1174 11B9; # (끲; 끲; 끲; 끲; 끲; ) HANGUL SYLLABLE GGYIBS B073;B073;1101 1174 11BA;B073;1101 1174 11BA; # (끳; 끳; 끳; 끳; 끳; ) HANGUL SYLLABLE GGYIS B074;B074;1101 1174 11BB;B074;1101 1174 11BB; # (끴; 끴; 끴; 끴; 끴; ) HANGUL SYLLABLE GGYISS B075;B075;1101 1174 11BC;B075;1101 1174 11BC; # (끵; 끵; 끵; 끵; 끵; ) HANGUL SYLLABLE GGYING B076;B076;1101 1174 11BD;B076;1101 1174 11BD; # (끶; 끶; 끶; 끶; 끶; ) HANGUL SYLLABLE GGYIJ B077;B077;1101 1174 11BE;B077;1101 1174 11BE; # (끷; 끷; 끷; 끷; 끷; ) HANGUL SYLLABLE GGYIC B078;B078;1101 1174 11BF;B078;1101 1174 11BF; # (끸; 끸; 끸; 끸; 끸; ) HANGUL SYLLABLE GGYIK B079;B079;1101 1174 11C0;B079;1101 1174 11C0; # (끹; 끹; 끹; 끹; 끹; ) HANGUL SYLLABLE GGYIT B07A;B07A;1101 1174 11C1;B07A;1101 1174 11C1; # (끺; 끺; 끺; 끺; 끺; ) HANGUL SYLLABLE GGYIP B07B;B07B;1101 1174 11C2;B07B;1101 1174 11C2; # (끻; 끻; 끻; 끻; 끻; ) HANGUL SYLLABLE GGYIH B07C;B07C;1101 1175;B07C;1101 1175; # (끼; 끼; 끼; 끼; 끼; ) HANGUL SYLLABLE GGI B07D;B07D;1101 1175 11A8;B07D;1101 1175 11A8; # (끽; 끽; 끽; 끽; 끽; ) HANGUL SYLLABLE GGIG B07E;B07E;1101 1175 11A9;B07E;1101 1175 11A9; # (끾; 끾; 끾; 끾; 끾; ) HANGUL SYLLABLE GGIGG B07F;B07F;1101 1175 11AA;B07F;1101 1175 11AA; # (끿; 끿; 끿; 끿; 끿; ) HANGUL SYLLABLE GGIGS B080;B080;1101 1175 11AB;B080;1101 1175 11AB; # (낀; 낀; 낀; 낀; 낀; ) HANGUL SYLLABLE GGIN B081;B081;1101 1175 11AC;B081;1101 1175 11AC; # (낁; 낁; 낁; 낁; 낁; ) HANGUL SYLLABLE GGINJ B082;B082;1101 1175 11AD;B082;1101 1175 11AD; # (낂; 낂; 낂; 낂; 낂; ) HANGUL SYLLABLE GGINH B083;B083;1101 1175 11AE;B083;1101 1175 11AE; # (낃; 낃; 낃; 낃; 낃; ) HANGUL SYLLABLE GGID B084;B084;1101 1175 11AF;B084;1101 1175 11AF; # (낄; 낄; 낄; 낄; 낄; ) HANGUL SYLLABLE GGIL B085;B085;1101 1175 11B0;B085;1101 1175 11B0; # (낅; 낅; 낅; 낅; 낅; ) HANGUL SYLLABLE GGILG B086;B086;1101 1175 11B1;B086;1101 1175 11B1; # (낆; 낆; 낆; 낆; 낆; ) HANGUL SYLLABLE GGILM B087;B087;1101 1175 11B2;B087;1101 1175 11B2; # (낇; 낇; 낇; 낇; 낇; ) HANGUL SYLLABLE GGILB B088;B088;1101 1175 11B3;B088;1101 1175 11B3; # (낈; 낈; 낈; 낈; 낈; ) HANGUL SYLLABLE GGILS B089;B089;1101 1175 11B4;B089;1101 1175 11B4; # (낉; 낉; 낉; 낉; 낉; ) HANGUL SYLLABLE GGILT B08A;B08A;1101 1175 11B5;B08A;1101 1175 11B5; # (낊; 낊; 낊; 낊; 낊; ) HANGUL SYLLABLE GGILP B08B;B08B;1101 1175 11B6;B08B;1101 1175 11B6; # (낋; 낋; 낋; 낋; 낋; ) HANGUL SYLLABLE GGILH B08C;B08C;1101 1175 11B7;B08C;1101 1175 11B7; # (낌; 낌; 낌; 낌; 낌; ) HANGUL SYLLABLE GGIM B08D;B08D;1101 1175 11B8;B08D;1101 1175 11B8; # (낍; 낍; 낍; 낍; 낍; ) HANGUL SYLLABLE GGIB B08E;B08E;1101 1175 11B9;B08E;1101 1175 11B9; # (낎; 낎; 낎; 낎; 낎; ) HANGUL SYLLABLE GGIBS B08F;B08F;1101 1175 11BA;B08F;1101 1175 11BA; # (낏; 낏; 낏; 낏; 낏; ) HANGUL SYLLABLE GGIS B090;B090;1101 1175 11BB;B090;1101 1175 11BB; # (낐; 낐; 낐; 낐; 낐; ) HANGUL SYLLABLE GGISS B091;B091;1101 1175 11BC;B091;1101 1175 11BC; # (낑; 낑; 낑; 낑; 낑; ) HANGUL SYLLABLE GGING B092;B092;1101 1175 11BD;B092;1101 1175 11BD; # (낒; 낒; 낒; 낒; 낒; ) HANGUL SYLLABLE GGIJ B093;B093;1101 1175 11BE;B093;1101 1175 11BE; # (낓; 낓; 낓; 낓; 낓; ) HANGUL SYLLABLE GGIC B094;B094;1101 1175 11BF;B094;1101 1175 11BF; # (낔; 낔; 낔; 낔; 낔; ) HANGUL SYLLABLE GGIK B095;B095;1101 1175 11C0;B095;1101 1175 11C0; # (낕; 낕; 낕; 낕; 낕; ) HANGUL SYLLABLE GGIT B096;B096;1101 1175 11C1;B096;1101 1175 11C1; # (낖; 낖; 낖; 낖; 낖; ) HANGUL SYLLABLE GGIP B097;B097;1101 1175 11C2;B097;1101 1175 11C2; # (낗; 낗; 낗; 낗; 낗; ) HANGUL SYLLABLE GGIH B098;B098;1102 1161;B098;1102 1161; # (나; 나; 나; 나; 나; ) HANGUL SYLLABLE NA B099;B099;1102 1161 11A8;B099;1102 1161 11A8; # (낙; 낙; 낙; 낙; 낙; ) HANGUL SYLLABLE NAG B09A;B09A;1102 1161 11A9;B09A;1102 1161 11A9; # (낚; 낚; 낚; 낚; 낚; ) HANGUL SYLLABLE NAGG B09B;B09B;1102 1161 11AA;B09B;1102 1161 11AA; # (낛; 낛; 낛; 낛; 낛; ) HANGUL SYLLABLE NAGS B09C;B09C;1102 1161 11AB;B09C;1102 1161 11AB; # (난; 난; 난; 난; 난; ) HANGUL SYLLABLE NAN B09D;B09D;1102 1161 11AC;B09D;1102 1161 11AC; # (낝; 낝; 낝; 낝; 낝; ) HANGUL SYLLABLE NANJ B09E;B09E;1102 1161 11AD;B09E;1102 1161 11AD; # (낞; 낞; 낞; 낞; 낞; ) HANGUL SYLLABLE NANH B09F;B09F;1102 1161 11AE;B09F;1102 1161 11AE; # (낟; 낟; 낟; 낟; 낟; ) HANGUL SYLLABLE NAD B0A0;B0A0;1102 1161 11AF;B0A0;1102 1161 11AF; # (날; 날; 날; 날; 날; ) HANGUL SYLLABLE NAL B0A1;B0A1;1102 1161 11B0;B0A1;1102 1161 11B0; # (낡; 낡; 낡; 낡; 낡; ) HANGUL SYLLABLE NALG B0A2;B0A2;1102 1161 11B1;B0A2;1102 1161 11B1; # (낢; 낢; 낢; 낢; 낢; ) HANGUL SYLLABLE NALM B0A3;B0A3;1102 1161 11B2;B0A3;1102 1161 11B2; # (낣; 낣; 낣; 낣; 낣; ) HANGUL SYLLABLE NALB B0A4;B0A4;1102 1161 11B3;B0A4;1102 1161 11B3; # (낤; 낤; 낤; 낤; 낤; ) HANGUL SYLLABLE NALS B0A5;B0A5;1102 1161 11B4;B0A5;1102 1161 11B4; # (낥; 낥; 낥; 낥; 낥; ) HANGUL SYLLABLE NALT B0A6;B0A6;1102 1161 11B5;B0A6;1102 1161 11B5; # (낦; 낦; 낦; 낦; 낦; ) HANGUL SYLLABLE NALP B0A7;B0A7;1102 1161 11B6;B0A7;1102 1161 11B6; # (낧; 낧; 낧; 낧; 낧; ) HANGUL SYLLABLE NALH B0A8;B0A8;1102 1161 11B7;B0A8;1102 1161 11B7; # (남; 남; 남; 남; 남; ) HANGUL SYLLABLE NAM B0A9;B0A9;1102 1161 11B8;B0A9;1102 1161 11B8; # (납; 납; 납; 납; 납; ) HANGUL SYLLABLE NAB B0AA;B0AA;1102 1161 11B9;B0AA;1102 1161 11B9; # (낪; 낪; 낪; 낪; 낪; ) HANGUL SYLLABLE NABS B0AB;B0AB;1102 1161 11BA;B0AB;1102 1161 11BA; # (낫; 낫; 낫; 낫; 낫; ) HANGUL SYLLABLE NAS B0AC;B0AC;1102 1161 11BB;B0AC;1102 1161 11BB; # (났; 났; 났; 났; 났; ) HANGUL SYLLABLE NASS B0AD;B0AD;1102 1161 11BC;B0AD;1102 1161 11BC; # (낭; 낭; 낭; 낭; 낭; ) HANGUL SYLLABLE NANG B0AE;B0AE;1102 1161 11BD;B0AE;1102 1161 11BD; # (낮; 낮; 낮; 낮; 낮; ) HANGUL SYLLABLE NAJ B0AF;B0AF;1102 1161 11BE;B0AF;1102 1161 11BE; # (낯; 낯; 낯; 낯; 낯; ) HANGUL SYLLABLE NAC B0B0;B0B0;1102 1161 11BF;B0B0;1102 1161 11BF; # (낰; 낰; 낰; 낰; 낰; ) HANGUL SYLLABLE NAK B0B1;B0B1;1102 1161 11C0;B0B1;1102 1161 11C0; # (낱; 낱; 낱; 낱; 낱; ) HANGUL SYLLABLE NAT B0B2;B0B2;1102 1161 11C1;B0B2;1102 1161 11C1; # (낲; 낲; 낲; 낲; 낲; ) HANGUL SYLLABLE NAP B0B3;B0B3;1102 1161 11C2;B0B3;1102 1161 11C2; # (낳; 낳; 낳; 낳; 낳; ) HANGUL SYLLABLE NAH B0B4;B0B4;1102 1162;B0B4;1102 1162; # (내; 내; 내; 내; 내; ) HANGUL SYLLABLE NAE B0B5;B0B5;1102 1162 11A8;B0B5;1102 1162 11A8; # (낵; 낵; 낵; 낵; 낵; ) HANGUL SYLLABLE NAEG B0B6;B0B6;1102 1162 11A9;B0B6;1102 1162 11A9; # (낶; 낶; 낶; 낶; 낶; ) HANGUL SYLLABLE NAEGG B0B7;B0B7;1102 1162 11AA;B0B7;1102 1162 11AA; # (낷; 낷; 낷; 낷; 낷; ) HANGUL SYLLABLE NAEGS B0B8;B0B8;1102 1162 11AB;B0B8;1102 1162 11AB; # (낸; 낸; 낸; 낸; 낸; ) HANGUL SYLLABLE NAEN B0B9;B0B9;1102 1162 11AC;B0B9;1102 1162 11AC; # (낹; 낹; 낹; 낹; 낹; ) HANGUL SYLLABLE NAENJ B0BA;B0BA;1102 1162 11AD;B0BA;1102 1162 11AD; # (낺; 낺; 낺; 낺; 낺; ) HANGUL SYLLABLE NAENH B0BB;B0BB;1102 1162 11AE;B0BB;1102 1162 11AE; # (낻; 낻; 낻; 낻; 낻; ) HANGUL SYLLABLE NAED B0BC;B0BC;1102 1162 11AF;B0BC;1102 1162 11AF; # (낼; 낼; 낼; 낼; 낼; ) HANGUL SYLLABLE NAEL B0BD;B0BD;1102 1162 11B0;B0BD;1102 1162 11B0; # (낽; 낽; 낽; 낽; 낽; ) HANGUL SYLLABLE NAELG B0BE;B0BE;1102 1162 11B1;B0BE;1102 1162 11B1; # (낾; 낾; 낾; 낾; 낾; ) HANGUL SYLLABLE NAELM B0BF;B0BF;1102 1162 11B2;B0BF;1102 1162 11B2; # (낿; 낿; 낿; 낿; 낿; ) HANGUL SYLLABLE NAELB B0C0;B0C0;1102 1162 11B3;B0C0;1102 1162 11B3; # (냀; 냀; 냀; 냀; 냀; ) HANGUL SYLLABLE NAELS B0C1;B0C1;1102 1162 11B4;B0C1;1102 1162 11B4; # (냁; 냁; 냁; 냁; 냁; ) HANGUL SYLLABLE NAELT B0C2;B0C2;1102 1162 11B5;B0C2;1102 1162 11B5; # (냂; 냂; 냂; 냂; 냂; ) HANGUL SYLLABLE NAELP B0C3;B0C3;1102 1162 11B6;B0C3;1102 1162 11B6; # (냃; 냃; 냃; 냃; 냃; ) HANGUL SYLLABLE NAELH B0C4;B0C4;1102 1162 11B7;B0C4;1102 1162 11B7; # (냄; 냄; 냄; 냄; 냄; ) HANGUL SYLLABLE NAEM B0C5;B0C5;1102 1162 11B8;B0C5;1102 1162 11B8; # (냅; 냅; 냅; 냅; 냅; ) HANGUL SYLLABLE NAEB B0C6;B0C6;1102 1162 11B9;B0C6;1102 1162 11B9; # (냆; 냆; 냆; 냆; 냆; ) HANGUL SYLLABLE NAEBS B0C7;B0C7;1102 1162 11BA;B0C7;1102 1162 11BA; # (냇; 냇; 냇; 냇; 냇; ) HANGUL SYLLABLE NAES B0C8;B0C8;1102 1162 11BB;B0C8;1102 1162 11BB; # (냈; 냈; 냈; 냈; 냈; ) HANGUL SYLLABLE NAESS B0C9;B0C9;1102 1162 11BC;B0C9;1102 1162 11BC; # (냉; 냉; 냉; 냉; 냉; ) HANGUL SYLLABLE NAENG B0CA;B0CA;1102 1162 11BD;B0CA;1102 1162 11BD; # (냊; 냊; 냊; 냊; 냊; ) HANGUL SYLLABLE NAEJ B0CB;B0CB;1102 1162 11BE;B0CB;1102 1162 11BE; # (냋; 냋; 냋; 냋; 냋; ) HANGUL SYLLABLE NAEC B0CC;B0CC;1102 1162 11BF;B0CC;1102 1162 11BF; # (냌; 냌; 냌; 냌; 냌; ) HANGUL SYLLABLE NAEK B0CD;B0CD;1102 1162 11C0;B0CD;1102 1162 11C0; # (냍; 냍; 냍; 냍; 냍; ) HANGUL SYLLABLE NAET B0CE;B0CE;1102 1162 11C1;B0CE;1102 1162 11C1; # (냎; 냎; 냎; 냎; 냎; ) HANGUL SYLLABLE NAEP B0CF;B0CF;1102 1162 11C2;B0CF;1102 1162 11C2; # (냏; 냏; 냏; 냏; 냏; ) HANGUL SYLLABLE NAEH B0D0;B0D0;1102 1163;B0D0;1102 1163; # (냐; 냐; 냐; 냐; 냐; ) HANGUL SYLLABLE NYA B0D1;B0D1;1102 1163 11A8;B0D1;1102 1163 11A8; # (냑; 냑; 냑; 냑; 냑; ) HANGUL SYLLABLE NYAG B0D2;B0D2;1102 1163 11A9;B0D2;1102 1163 11A9; # (냒; 냒; 냒; 냒; 냒; ) HANGUL SYLLABLE NYAGG B0D3;B0D3;1102 1163 11AA;B0D3;1102 1163 11AA; # (냓; 냓; 냓; 냓; 냓; ) HANGUL SYLLABLE NYAGS B0D4;B0D4;1102 1163 11AB;B0D4;1102 1163 11AB; # (냔; 냔; 냔; 냔; 냔; ) HANGUL SYLLABLE NYAN B0D5;B0D5;1102 1163 11AC;B0D5;1102 1163 11AC; # (냕; 냕; 냕; 냕; 냕; ) HANGUL SYLLABLE NYANJ B0D6;B0D6;1102 1163 11AD;B0D6;1102 1163 11AD; # (냖; 냖; 냖; 냖; 냖; ) HANGUL SYLLABLE NYANH B0D7;B0D7;1102 1163 11AE;B0D7;1102 1163 11AE; # (냗; 냗; 냗; 냗; 냗; ) HANGUL SYLLABLE NYAD B0D8;B0D8;1102 1163 11AF;B0D8;1102 1163 11AF; # (냘; 냘; 냘; 냘; 냘; ) HANGUL SYLLABLE NYAL B0D9;B0D9;1102 1163 11B0;B0D9;1102 1163 11B0; # (냙; 냙; 냙; 냙; 냙; ) HANGUL SYLLABLE NYALG B0DA;B0DA;1102 1163 11B1;B0DA;1102 1163 11B1; # (냚; 냚; 냚; 냚; 냚; ) HANGUL SYLLABLE NYALM B0DB;B0DB;1102 1163 11B2;B0DB;1102 1163 11B2; # (냛; 냛; 냛; 냛; 냛; ) HANGUL SYLLABLE NYALB B0DC;B0DC;1102 1163 11B3;B0DC;1102 1163 11B3; # (냜; 냜; 냜; 냜; 냜; ) HANGUL SYLLABLE NYALS B0DD;B0DD;1102 1163 11B4;B0DD;1102 1163 11B4; # (냝; 냝; 냝; 냝; 냝; ) HANGUL SYLLABLE NYALT B0DE;B0DE;1102 1163 11B5;B0DE;1102 1163 11B5; # (냞; 냞; 냞; 냞; 냞; ) HANGUL SYLLABLE NYALP B0DF;B0DF;1102 1163 11B6;B0DF;1102 1163 11B6; # (냟; 냟; 냟; 냟; 냟; ) HANGUL SYLLABLE NYALH B0E0;B0E0;1102 1163 11B7;B0E0;1102 1163 11B7; # (냠; 냠; 냠; 냠; 냠; ) HANGUL SYLLABLE NYAM B0E1;B0E1;1102 1163 11B8;B0E1;1102 1163 11B8; # (냡; 냡; 냡; 냡; 냡; ) HANGUL SYLLABLE NYAB B0E2;B0E2;1102 1163 11B9;B0E2;1102 1163 11B9; # (냢; 냢; 냢; 냢; 냢; ) HANGUL SYLLABLE NYABS B0E3;B0E3;1102 1163 11BA;B0E3;1102 1163 11BA; # (냣; 냣; 냣; 냣; 냣; ) HANGUL SYLLABLE NYAS B0E4;B0E4;1102 1163 11BB;B0E4;1102 1163 11BB; # (냤; 냤; 냤; 냤; 냤; ) HANGUL SYLLABLE NYASS B0E5;B0E5;1102 1163 11BC;B0E5;1102 1163 11BC; # (냥; 냥; 냥; 냥; 냥; ) HANGUL SYLLABLE NYANG B0E6;B0E6;1102 1163 11BD;B0E6;1102 1163 11BD; # (냦; 냦; 냦; 냦; 냦; ) HANGUL SYLLABLE NYAJ B0E7;B0E7;1102 1163 11BE;B0E7;1102 1163 11BE; # (냧; 냧; 냧; 냧; 냧; ) HANGUL SYLLABLE NYAC B0E8;B0E8;1102 1163 11BF;B0E8;1102 1163 11BF; # (냨; 냨; 냨; 냨; 냨; ) HANGUL SYLLABLE NYAK B0E9;B0E9;1102 1163 11C0;B0E9;1102 1163 11C0; # (냩; 냩; 냩; 냩; 냩; ) HANGUL SYLLABLE NYAT B0EA;B0EA;1102 1163 11C1;B0EA;1102 1163 11C1; # (냪; 냪; 냪; 냪; 냪; ) HANGUL SYLLABLE NYAP B0EB;B0EB;1102 1163 11C2;B0EB;1102 1163 11C2; # (냫; 냫; 냫; 냫; 냫; ) HANGUL SYLLABLE NYAH B0EC;B0EC;1102 1164;B0EC;1102 1164; # (냬; 냬; 냬; 냬; 냬; ) HANGUL SYLLABLE NYAE B0ED;B0ED;1102 1164 11A8;B0ED;1102 1164 11A8; # (냭; 냭; 냭; 냭; 냭; ) HANGUL SYLLABLE NYAEG B0EE;B0EE;1102 1164 11A9;B0EE;1102 1164 11A9; # (냮; 냮; 냮; 냮; 냮; ) HANGUL SYLLABLE NYAEGG B0EF;B0EF;1102 1164 11AA;B0EF;1102 1164 11AA; # (냯; 냯; 냯; 냯; 냯; ) HANGUL SYLLABLE NYAEGS B0F0;B0F0;1102 1164 11AB;B0F0;1102 1164 11AB; # (냰; 냰; 냰; 냰; 냰; ) HANGUL SYLLABLE NYAEN B0F1;B0F1;1102 1164 11AC;B0F1;1102 1164 11AC; # (냱; 냱; 냱; 냱; 냱; ) HANGUL SYLLABLE NYAENJ B0F2;B0F2;1102 1164 11AD;B0F2;1102 1164 11AD; # (냲; 냲; 냲; 냲; 냲; ) HANGUL SYLLABLE NYAENH B0F3;B0F3;1102 1164 11AE;B0F3;1102 1164 11AE; # (냳; 냳; 냳; 냳; 냳; ) HANGUL SYLLABLE NYAED B0F4;B0F4;1102 1164 11AF;B0F4;1102 1164 11AF; # (냴; 냴; 냴; 냴; 냴; ) HANGUL SYLLABLE NYAEL B0F5;B0F5;1102 1164 11B0;B0F5;1102 1164 11B0; # (냵; 냵; 냵; 냵; 냵; ) HANGUL SYLLABLE NYAELG B0F6;B0F6;1102 1164 11B1;B0F6;1102 1164 11B1; # (냶; 냶; 냶; 냶; 냶; ) HANGUL SYLLABLE NYAELM B0F7;B0F7;1102 1164 11B2;B0F7;1102 1164 11B2; # (냷; 냷; 냷; 냷; 냷; ) HANGUL SYLLABLE NYAELB B0F8;B0F8;1102 1164 11B3;B0F8;1102 1164 11B3; # (냸; 냸; 냸; 냸; 냸; ) HANGUL SYLLABLE NYAELS B0F9;B0F9;1102 1164 11B4;B0F9;1102 1164 11B4; # (냹; 냹; 냹; 냹; 냹; ) HANGUL SYLLABLE NYAELT B0FA;B0FA;1102 1164 11B5;B0FA;1102 1164 11B5; # (냺; 냺; 냺; 냺; 냺; ) HANGUL SYLLABLE NYAELP B0FB;B0FB;1102 1164 11B6;B0FB;1102 1164 11B6; # (냻; 냻; 냻; 냻; 냻; ) HANGUL SYLLABLE NYAELH B0FC;B0FC;1102 1164 11B7;B0FC;1102 1164 11B7; # (냼; 냼; 냼; 냼; 냼; ) HANGUL SYLLABLE NYAEM B0FD;B0FD;1102 1164 11B8;B0FD;1102 1164 11B8; # (냽; 냽; 냽; 냽; 냽; ) HANGUL SYLLABLE NYAEB B0FE;B0FE;1102 1164 11B9;B0FE;1102 1164 11B9; # (냾; 냾; 냾; 냾; 냾; ) HANGUL SYLLABLE NYAEBS B0FF;B0FF;1102 1164 11BA;B0FF;1102 1164 11BA; # (냿; 냿; 냿; 냿; 냿; ) HANGUL SYLLABLE NYAES B100;B100;1102 1164 11BB;B100;1102 1164 11BB; # (넀; 넀; 넀; 넀; 넀; ) HANGUL SYLLABLE NYAESS B101;B101;1102 1164 11BC;B101;1102 1164 11BC; # (넁; 넁; 넁; 넁; 넁; ) HANGUL SYLLABLE NYAENG B102;B102;1102 1164 11BD;B102;1102 1164 11BD; # (넂; 넂; 넂; 넂; 넂; ) HANGUL SYLLABLE NYAEJ B103;B103;1102 1164 11BE;B103;1102 1164 11BE; # (넃; 넃; 넃; 넃; 넃; ) HANGUL SYLLABLE NYAEC B104;B104;1102 1164 11BF;B104;1102 1164 11BF; # (넄; 넄; 넄; 넄; 넄; ) HANGUL SYLLABLE NYAEK B105;B105;1102 1164 11C0;B105;1102 1164 11C0; # (넅; 넅; 넅; 넅; 넅; ) HANGUL SYLLABLE NYAET B106;B106;1102 1164 11C1;B106;1102 1164 11C1; # (넆; 넆; 넆; 넆; 넆; ) HANGUL SYLLABLE NYAEP B107;B107;1102 1164 11C2;B107;1102 1164 11C2; # (넇; 넇; 넇; 넇; 넇; ) HANGUL SYLLABLE NYAEH B108;B108;1102 1165;B108;1102 1165; # (너; 너; 너; 너; 너; ) HANGUL SYLLABLE NEO B109;B109;1102 1165 11A8;B109;1102 1165 11A8; # (넉; 넉; 넉; 넉; 넉; ) HANGUL SYLLABLE NEOG B10A;B10A;1102 1165 11A9;B10A;1102 1165 11A9; # (넊; 넊; 넊; 넊; 넊; ) HANGUL SYLLABLE NEOGG B10B;B10B;1102 1165 11AA;B10B;1102 1165 11AA; # (넋; 넋; 넋; 넋; 넋; ) HANGUL SYLLABLE NEOGS B10C;B10C;1102 1165 11AB;B10C;1102 1165 11AB; # (넌; 넌; 넌; 넌; 넌; ) HANGUL SYLLABLE NEON B10D;B10D;1102 1165 11AC;B10D;1102 1165 11AC; # (넍; 넍; 넍; 넍; 넍; ) HANGUL SYLLABLE NEONJ B10E;B10E;1102 1165 11AD;B10E;1102 1165 11AD; # (넎; 넎; 넎; 넎; 넎; ) HANGUL SYLLABLE NEONH B10F;B10F;1102 1165 11AE;B10F;1102 1165 11AE; # (넏; 넏; 넏; 넏; 넏; ) HANGUL SYLLABLE NEOD B110;B110;1102 1165 11AF;B110;1102 1165 11AF; # (널; 널; 널; 널; 널; ) HANGUL SYLLABLE NEOL B111;B111;1102 1165 11B0;B111;1102 1165 11B0; # (넑; 넑; 넑; 넑; 넑; ) HANGUL SYLLABLE NEOLG B112;B112;1102 1165 11B1;B112;1102 1165 11B1; # (넒; 넒; 넒; 넒; 넒; ) HANGUL SYLLABLE NEOLM B113;B113;1102 1165 11B2;B113;1102 1165 11B2; # (넓; 넓; 넓; 넓; 넓; ) HANGUL SYLLABLE NEOLB B114;B114;1102 1165 11B3;B114;1102 1165 11B3; # (넔; 넔; 넔; 넔; 넔; ) HANGUL SYLLABLE NEOLS B115;B115;1102 1165 11B4;B115;1102 1165 11B4; # (넕; 넕; 넕; 넕; 넕; ) HANGUL SYLLABLE NEOLT B116;B116;1102 1165 11B5;B116;1102 1165 11B5; # (넖; 넖; 넖; 넖; 넖; ) HANGUL SYLLABLE NEOLP B117;B117;1102 1165 11B6;B117;1102 1165 11B6; # (넗; 넗; 넗; 넗; 넗; ) HANGUL SYLLABLE NEOLH B118;B118;1102 1165 11B7;B118;1102 1165 11B7; # (넘; 넘; 넘; 넘; 넘; ) HANGUL SYLLABLE NEOM B119;B119;1102 1165 11B8;B119;1102 1165 11B8; # (넙; 넙; 넙; 넙; 넙; ) HANGUL SYLLABLE NEOB B11A;B11A;1102 1165 11B9;B11A;1102 1165 11B9; # (넚; 넚; 넚; 넚; 넚; ) HANGUL SYLLABLE NEOBS B11B;B11B;1102 1165 11BA;B11B;1102 1165 11BA; # (넛; 넛; 넛; 넛; 넛; ) HANGUL SYLLABLE NEOS B11C;B11C;1102 1165 11BB;B11C;1102 1165 11BB; # (넜; 넜; 넜; 넜; 넜; ) HANGUL SYLLABLE NEOSS B11D;B11D;1102 1165 11BC;B11D;1102 1165 11BC; # (넝; 넝; 넝; 넝; 넝; ) HANGUL SYLLABLE NEONG B11E;B11E;1102 1165 11BD;B11E;1102 1165 11BD; # (넞; 넞; 넞; 넞; 넞; ) HANGUL SYLLABLE NEOJ B11F;B11F;1102 1165 11BE;B11F;1102 1165 11BE; # (넟; 넟; 넟; 넟; 넟; ) HANGUL SYLLABLE NEOC B120;B120;1102 1165 11BF;B120;1102 1165 11BF; # (넠; 넠; 넠; 넠; 넠; ) HANGUL SYLLABLE NEOK B121;B121;1102 1165 11C0;B121;1102 1165 11C0; # (넡; 넡; 넡; 넡; 넡; ) HANGUL SYLLABLE NEOT B122;B122;1102 1165 11C1;B122;1102 1165 11C1; # (넢; 넢; 넢; 넢; 넢; ) HANGUL SYLLABLE NEOP B123;B123;1102 1165 11C2;B123;1102 1165 11C2; # (넣; 넣; 넣; 넣; 넣; ) HANGUL SYLLABLE NEOH B124;B124;1102 1166;B124;1102 1166; # (네; 네; 네; 네; 네; ) HANGUL SYLLABLE NE B125;B125;1102 1166 11A8;B125;1102 1166 11A8; # (넥; 넥; 넥; 넥; 넥; ) HANGUL SYLLABLE NEG B126;B126;1102 1166 11A9;B126;1102 1166 11A9; # (넦; 넦; 넦; 넦; 넦; ) HANGUL SYLLABLE NEGG B127;B127;1102 1166 11AA;B127;1102 1166 11AA; # (넧; 넧; 넧; 넧; 넧; ) HANGUL SYLLABLE NEGS B128;B128;1102 1166 11AB;B128;1102 1166 11AB; # (넨; 넨; 넨; 넨; 넨; ) HANGUL SYLLABLE NEN B129;B129;1102 1166 11AC;B129;1102 1166 11AC; # (넩; 넩; 넩; 넩; 넩; ) HANGUL SYLLABLE NENJ B12A;B12A;1102 1166 11AD;B12A;1102 1166 11AD; # (넪; 넪; 넪; 넪; 넪; ) HANGUL SYLLABLE NENH B12B;B12B;1102 1166 11AE;B12B;1102 1166 11AE; # (넫; 넫; 넫; 넫; 넫; ) HANGUL SYLLABLE NED B12C;B12C;1102 1166 11AF;B12C;1102 1166 11AF; # (넬; 넬; 넬; 넬; 넬; ) HANGUL SYLLABLE NEL B12D;B12D;1102 1166 11B0;B12D;1102 1166 11B0; # (넭; 넭; 넭; 넭; 넭; ) HANGUL SYLLABLE NELG B12E;B12E;1102 1166 11B1;B12E;1102 1166 11B1; # (넮; 넮; 넮; 넮; 넮; ) HANGUL SYLLABLE NELM B12F;B12F;1102 1166 11B2;B12F;1102 1166 11B2; # (넯; 넯; 넯; 넯; 넯; ) HANGUL SYLLABLE NELB B130;B130;1102 1166 11B3;B130;1102 1166 11B3; # (넰; 넰; 넰; 넰; 넰; ) HANGUL SYLLABLE NELS B131;B131;1102 1166 11B4;B131;1102 1166 11B4; # (넱; 넱; 넱; 넱; 넱; ) HANGUL SYLLABLE NELT B132;B132;1102 1166 11B5;B132;1102 1166 11B5; # (넲; 넲; 넲; 넲; 넲; ) HANGUL SYLLABLE NELP B133;B133;1102 1166 11B6;B133;1102 1166 11B6; # (넳; 넳; 넳; 넳; 넳; ) HANGUL SYLLABLE NELH B134;B134;1102 1166 11B7;B134;1102 1166 11B7; # (넴; 넴; 넴; 넴; 넴; ) HANGUL SYLLABLE NEM B135;B135;1102 1166 11B8;B135;1102 1166 11B8; # (넵; 넵; 넵; 넵; 넵; ) HANGUL SYLLABLE NEB B136;B136;1102 1166 11B9;B136;1102 1166 11B9; # (넶; 넶; 넶; 넶; 넶; ) HANGUL SYLLABLE NEBS B137;B137;1102 1166 11BA;B137;1102 1166 11BA; # (넷; 넷; 넷; 넷; 넷; ) HANGUL SYLLABLE NES B138;B138;1102 1166 11BB;B138;1102 1166 11BB; # (넸; 넸; 넸; 넸; 넸; ) HANGUL SYLLABLE NESS B139;B139;1102 1166 11BC;B139;1102 1166 11BC; # (넹; 넹; 넹; 넹; 넹; ) HANGUL SYLLABLE NENG B13A;B13A;1102 1166 11BD;B13A;1102 1166 11BD; # (넺; 넺; 넺; 넺; 넺; ) HANGUL SYLLABLE NEJ B13B;B13B;1102 1166 11BE;B13B;1102 1166 11BE; # (넻; 넻; 넻; 넻; 넻; ) HANGUL SYLLABLE NEC B13C;B13C;1102 1166 11BF;B13C;1102 1166 11BF; # (넼; 넼; 넼; 넼; 넼; ) HANGUL SYLLABLE NEK B13D;B13D;1102 1166 11C0;B13D;1102 1166 11C0; # (넽; 넽; 넽; 넽; 넽; ) HANGUL SYLLABLE NET B13E;B13E;1102 1166 11C1;B13E;1102 1166 11C1; # (넾; 넾; 넾; 넾; 넾; ) HANGUL SYLLABLE NEP B13F;B13F;1102 1166 11C2;B13F;1102 1166 11C2; # (넿; 넿; 넿; 넿; 넿; ) HANGUL SYLLABLE NEH B140;B140;1102 1167;B140;1102 1167; # (녀; 녀; 녀; 녀; 녀; ) HANGUL SYLLABLE NYEO B141;B141;1102 1167 11A8;B141;1102 1167 11A8; # (녁; 녁; 녁; 녁; 녁; ) HANGUL SYLLABLE NYEOG B142;B142;1102 1167 11A9;B142;1102 1167 11A9; # (녂; 녂; 녂; 녂; 녂; ) HANGUL SYLLABLE NYEOGG B143;B143;1102 1167 11AA;B143;1102 1167 11AA; # (녃; 녃; 녃; 녃; 녃; ) HANGUL SYLLABLE NYEOGS B144;B144;1102 1167 11AB;B144;1102 1167 11AB; # (년; 년; 년; 년; 년; ) HANGUL SYLLABLE NYEON B145;B145;1102 1167 11AC;B145;1102 1167 11AC; # (녅; 녅; 녅; 녅; 녅; ) HANGUL SYLLABLE NYEONJ B146;B146;1102 1167 11AD;B146;1102 1167 11AD; # (녆; 녆; 녆; 녆; 녆; ) HANGUL SYLLABLE NYEONH B147;B147;1102 1167 11AE;B147;1102 1167 11AE; # (녇; 녇; 녇; 녇; 녇; ) HANGUL SYLLABLE NYEOD B148;B148;1102 1167 11AF;B148;1102 1167 11AF; # (녈; 녈; 녈; 녈; 녈; ) HANGUL SYLLABLE NYEOL B149;B149;1102 1167 11B0;B149;1102 1167 11B0; # (녉; 녉; 녉; 녉; 녉; ) HANGUL SYLLABLE NYEOLG B14A;B14A;1102 1167 11B1;B14A;1102 1167 11B1; # (녊; 녊; 녊; 녊; 녊; ) HANGUL SYLLABLE NYEOLM B14B;B14B;1102 1167 11B2;B14B;1102 1167 11B2; # (녋; 녋; 녋; 녋; 녋; ) HANGUL SYLLABLE NYEOLB B14C;B14C;1102 1167 11B3;B14C;1102 1167 11B3; # (녌; 녌; 녌; 녌; 녌; ) HANGUL SYLLABLE NYEOLS B14D;B14D;1102 1167 11B4;B14D;1102 1167 11B4; # (녍; 녍; 녍; 녍; 녍; ) HANGUL SYLLABLE NYEOLT B14E;B14E;1102 1167 11B5;B14E;1102 1167 11B5; # (녎; 녎; 녎; 녎; 녎; ) HANGUL SYLLABLE NYEOLP B14F;B14F;1102 1167 11B6;B14F;1102 1167 11B6; # (녏; 녏; 녏; 녏; 녏; ) HANGUL SYLLABLE NYEOLH B150;B150;1102 1167 11B7;B150;1102 1167 11B7; # (념; 념; 념; 념; 념; ) HANGUL SYLLABLE NYEOM B151;B151;1102 1167 11B8;B151;1102 1167 11B8; # (녑; 녑; 녑; 녑; 녑; ) HANGUL SYLLABLE NYEOB B152;B152;1102 1167 11B9;B152;1102 1167 11B9; # (녒; 녒; 녒; 녒; 녒; ) HANGUL SYLLABLE NYEOBS B153;B153;1102 1167 11BA;B153;1102 1167 11BA; # (녓; 녓; 녓; 녓; 녓; ) HANGUL SYLLABLE NYEOS B154;B154;1102 1167 11BB;B154;1102 1167 11BB; # (녔; 녔; 녔; 녔; 녔; ) HANGUL SYLLABLE NYEOSS B155;B155;1102 1167 11BC;B155;1102 1167 11BC; # (녕; 녕; 녕; 녕; 녕; ) HANGUL SYLLABLE NYEONG B156;B156;1102 1167 11BD;B156;1102 1167 11BD; # (녖; 녖; 녖; 녖; 녖; ) HANGUL SYLLABLE NYEOJ B157;B157;1102 1167 11BE;B157;1102 1167 11BE; # (녗; 녗; 녗; 녗; 녗; ) HANGUL SYLLABLE NYEOC B158;B158;1102 1167 11BF;B158;1102 1167 11BF; # (녘; 녘; 녘; 녘; 녘; ) HANGUL SYLLABLE NYEOK B159;B159;1102 1167 11C0;B159;1102 1167 11C0; # (녙; 녙; 녙; 녙; 녙; ) HANGUL SYLLABLE NYEOT B15A;B15A;1102 1167 11C1;B15A;1102 1167 11C1; # (녚; 녚; 녚; 녚; 녚; ) HANGUL SYLLABLE NYEOP B15B;B15B;1102 1167 11C2;B15B;1102 1167 11C2; # (녛; 녛; 녛; 녛; 녛; ) HANGUL SYLLABLE NYEOH B15C;B15C;1102 1168;B15C;1102 1168; # (녜; 녜; 녜; 녜; 녜; ) HANGUL SYLLABLE NYE B15D;B15D;1102 1168 11A8;B15D;1102 1168 11A8; # (녝; 녝; 녝; 녝; 녝; ) HANGUL SYLLABLE NYEG B15E;B15E;1102 1168 11A9;B15E;1102 1168 11A9; # (녞; 녞; 녞; 녞; 녞; ) HANGUL SYLLABLE NYEGG B15F;B15F;1102 1168 11AA;B15F;1102 1168 11AA; # (녟; 녟; 녟; 녟; 녟; ) HANGUL SYLLABLE NYEGS B160;B160;1102 1168 11AB;B160;1102 1168 11AB; # (녠; 녠; 녠; 녠; 녠; ) HANGUL SYLLABLE NYEN B161;B161;1102 1168 11AC;B161;1102 1168 11AC; # (녡; 녡; 녡; 녡; 녡; ) HANGUL SYLLABLE NYENJ B162;B162;1102 1168 11AD;B162;1102 1168 11AD; # (녢; 녢; 녢; 녢; 녢; ) HANGUL SYLLABLE NYENH B163;B163;1102 1168 11AE;B163;1102 1168 11AE; # (녣; 녣; 녣; 녣; 녣; ) HANGUL SYLLABLE NYED B164;B164;1102 1168 11AF;B164;1102 1168 11AF; # (녤; 녤; 녤; 녤; 녤; ) HANGUL SYLLABLE NYEL B165;B165;1102 1168 11B0;B165;1102 1168 11B0; # (녥; 녥; 녥; 녥; 녥; ) HANGUL SYLLABLE NYELG B166;B166;1102 1168 11B1;B166;1102 1168 11B1; # (녦; 녦; 녦; 녦; 녦; ) HANGUL SYLLABLE NYELM B167;B167;1102 1168 11B2;B167;1102 1168 11B2; # (녧; 녧; 녧; 녧; 녧; ) HANGUL SYLLABLE NYELB B168;B168;1102 1168 11B3;B168;1102 1168 11B3; # (녨; 녨; 녨; 녨; 녨; ) HANGUL SYLLABLE NYELS B169;B169;1102 1168 11B4;B169;1102 1168 11B4; # (녩; 녩; 녩; 녩; 녩; ) HANGUL SYLLABLE NYELT B16A;B16A;1102 1168 11B5;B16A;1102 1168 11B5; # (녪; 녪; 녪; 녪; 녪; ) HANGUL SYLLABLE NYELP B16B;B16B;1102 1168 11B6;B16B;1102 1168 11B6; # (녫; 녫; 녫; 녫; 녫; ) HANGUL SYLLABLE NYELH B16C;B16C;1102 1168 11B7;B16C;1102 1168 11B7; # (녬; 녬; 녬; 녬; 녬; ) HANGUL SYLLABLE NYEM B16D;B16D;1102 1168 11B8;B16D;1102 1168 11B8; # (녭; 녭; 녭; 녭; 녭; ) HANGUL SYLLABLE NYEB B16E;B16E;1102 1168 11B9;B16E;1102 1168 11B9; # (녮; 녮; 녮; 녮; 녮; ) HANGUL SYLLABLE NYEBS B16F;B16F;1102 1168 11BA;B16F;1102 1168 11BA; # (녯; 녯; 녯; 녯; 녯; ) HANGUL SYLLABLE NYES B170;B170;1102 1168 11BB;B170;1102 1168 11BB; # (녰; 녰; 녰; 녰; 녰; ) HANGUL SYLLABLE NYESS B171;B171;1102 1168 11BC;B171;1102 1168 11BC; # (녱; 녱; 녱; 녱; 녱; ) HANGUL SYLLABLE NYENG B172;B172;1102 1168 11BD;B172;1102 1168 11BD; # (녲; 녲; 녲; 녲; 녲; ) HANGUL SYLLABLE NYEJ B173;B173;1102 1168 11BE;B173;1102 1168 11BE; # (녳; 녳; 녳; 녳; 녳; ) HANGUL SYLLABLE NYEC B174;B174;1102 1168 11BF;B174;1102 1168 11BF; # (녴; 녴; 녴; 녴; 녴; ) HANGUL SYLLABLE NYEK B175;B175;1102 1168 11C0;B175;1102 1168 11C0; # (녵; 녵; 녵; 녵; 녵; ) HANGUL SYLLABLE NYET B176;B176;1102 1168 11C1;B176;1102 1168 11C1; # (녶; 녶; 녶; 녶; 녶; ) HANGUL SYLLABLE NYEP B177;B177;1102 1168 11C2;B177;1102 1168 11C2; # (녷; 녷; 녷; 녷; 녷; ) HANGUL SYLLABLE NYEH B178;B178;1102 1169;B178;1102 1169; # (노; 노; 노; 노; 노; ) HANGUL SYLLABLE NO B179;B179;1102 1169 11A8;B179;1102 1169 11A8; # (녹; 녹; 녹; 녹; 녹; ) HANGUL SYLLABLE NOG B17A;B17A;1102 1169 11A9;B17A;1102 1169 11A9; # (녺; 녺; 녺; 녺; 녺; ) HANGUL SYLLABLE NOGG B17B;B17B;1102 1169 11AA;B17B;1102 1169 11AA; # (녻; 녻; 녻; 녻; 녻; ) HANGUL SYLLABLE NOGS B17C;B17C;1102 1169 11AB;B17C;1102 1169 11AB; # (논; 논; 논; 논; 논; ) HANGUL SYLLABLE NON B17D;B17D;1102 1169 11AC;B17D;1102 1169 11AC; # (녽; 녽; 녽; 녽; 녽; ) HANGUL SYLLABLE NONJ B17E;B17E;1102 1169 11AD;B17E;1102 1169 11AD; # (녾; 녾; 녾; 녾; 녾; ) HANGUL SYLLABLE NONH B17F;B17F;1102 1169 11AE;B17F;1102 1169 11AE; # (녿; 녿; 녿; 녿; 녿; ) HANGUL SYLLABLE NOD B180;B180;1102 1169 11AF;B180;1102 1169 11AF; # (놀; 놀; 놀; 놀; 놀; ) HANGUL SYLLABLE NOL B181;B181;1102 1169 11B0;B181;1102 1169 11B0; # (놁; 놁; 놁; 놁; 놁; ) HANGUL SYLLABLE NOLG B182;B182;1102 1169 11B1;B182;1102 1169 11B1; # (놂; 놂; 놂; 놂; 놂; ) HANGUL SYLLABLE NOLM B183;B183;1102 1169 11B2;B183;1102 1169 11B2; # (놃; 놃; 놃; 놃; 놃; ) HANGUL SYLLABLE NOLB B184;B184;1102 1169 11B3;B184;1102 1169 11B3; # (놄; 놄; 놄; 놄; 놄; ) HANGUL SYLLABLE NOLS B185;B185;1102 1169 11B4;B185;1102 1169 11B4; # (놅; 놅; 놅; 놅; 놅; ) HANGUL SYLLABLE NOLT B186;B186;1102 1169 11B5;B186;1102 1169 11B5; # (놆; 놆; 놆; 놆; 놆; ) HANGUL SYLLABLE NOLP B187;B187;1102 1169 11B6;B187;1102 1169 11B6; # (놇; 놇; 놇; 놇; 놇; ) HANGUL SYLLABLE NOLH B188;B188;1102 1169 11B7;B188;1102 1169 11B7; # (놈; 놈; 놈; 놈; 놈; ) HANGUL SYLLABLE NOM B189;B189;1102 1169 11B8;B189;1102 1169 11B8; # (놉; 놉; 놉; 놉; 놉; ) HANGUL SYLLABLE NOB B18A;B18A;1102 1169 11B9;B18A;1102 1169 11B9; # (놊; 놊; 놊; 놊; 놊; ) HANGUL SYLLABLE NOBS B18B;B18B;1102 1169 11BA;B18B;1102 1169 11BA; # (놋; 놋; 놋; 놋; 놋; ) HANGUL SYLLABLE NOS B18C;B18C;1102 1169 11BB;B18C;1102 1169 11BB; # (놌; 놌; 놌; 놌; 놌; ) HANGUL SYLLABLE NOSS B18D;B18D;1102 1169 11BC;B18D;1102 1169 11BC; # (농; 농; 농; 농; 농; ) HANGUL SYLLABLE NONG B18E;B18E;1102 1169 11BD;B18E;1102 1169 11BD; # (놎; 놎; 놎; 놎; 놎; ) HANGUL SYLLABLE NOJ B18F;B18F;1102 1169 11BE;B18F;1102 1169 11BE; # (놏; 놏; 놏; 놏; 놏; ) HANGUL SYLLABLE NOC B190;B190;1102 1169 11BF;B190;1102 1169 11BF; # (놐; 놐; 놐; 놐; 놐; ) HANGUL SYLLABLE NOK B191;B191;1102 1169 11C0;B191;1102 1169 11C0; # (놑; 놑; 놑; 놑; 놑; ) HANGUL SYLLABLE NOT B192;B192;1102 1169 11C1;B192;1102 1169 11C1; # (높; 높; 높; 높; 높; ) HANGUL SYLLABLE NOP B193;B193;1102 1169 11C2;B193;1102 1169 11C2; # (놓; 놓; 놓; 놓; 놓; ) HANGUL SYLLABLE NOH B194;B194;1102 116A;B194;1102 116A; # (놔; 놔; 놔; 놔; 놔; ) HANGUL SYLLABLE NWA B195;B195;1102 116A 11A8;B195;1102 116A 11A8; # (놕; 놕; 놕; 놕; 놕; ) HANGUL SYLLABLE NWAG B196;B196;1102 116A 11A9;B196;1102 116A 11A9; # (놖; 놖; 놖; 놖; 놖; ) HANGUL SYLLABLE NWAGG B197;B197;1102 116A 11AA;B197;1102 116A 11AA; # (놗; 놗; 놗; 놗; 놗; ) HANGUL SYLLABLE NWAGS B198;B198;1102 116A 11AB;B198;1102 116A 11AB; # (놘; 놘; 놘; 놘; 놘; ) HANGUL SYLLABLE NWAN B199;B199;1102 116A 11AC;B199;1102 116A 11AC; # (놙; 놙; 놙; 놙; 놙; ) HANGUL SYLLABLE NWANJ B19A;B19A;1102 116A 11AD;B19A;1102 116A 11AD; # (놚; 놚; 놚; 놚; 놚; ) HANGUL SYLLABLE NWANH B19B;B19B;1102 116A 11AE;B19B;1102 116A 11AE; # (놛; 놛; 놛; 놛; 놛; ) HANGUL SYLLABLE NWAD B19C;B19C;1102 116A 11AF;B19C;1102 116A 11AF; # (놜; 놜; 놜; 놜; 놜; ) HANGUL SYLLABLE NWAL B19D;B19D;1102 116A 11B0;B19D;1102 116A 11B0; # (놝; 놝; 놝; 놝; 놝; ) HANGUL SYLLABLE NWALG B19E;B19E;1102 116A 11B1;B19E;1102 116A 11B1; # (놞; 놞; 놞; 놞; 놞; ) HANGUL SYLLABLE NWALM B19F;B19F;1102 116A 11B2;B19F;1102 116A 11B2; # (놟; 놟; 놟; 놟; 놟; ) HANGUL SYLLABLE NWALB B1A0;B1A0;1102 116A 11B3;B1A0;1102 116A 11B3; # (놠; 놠; 놠; 놠; 놠; ) HANGUL SYLLABLE NWALS B1A1;B1A1;1102 116A 11B4;B1A1;1102 116A 11B4; # (놡; 놡; 놡; 놡; 놡; ) HANGUL SYLLABLE NWALT B1A2;B1A2;1102 116A 11B5;B1A2;1102 116A 11B5; # (놢; 놢; 놢; 놢; 놢; ) HANGUL SYLLABLE NWALP B1A3;B1A3;1102 116A 11B6;B1A3;1102 116A 11B6; # (놣; 놣; 놣; 놣; 놣; ) HANGUL SYLLABLE NWALH B1A4;B1A4;1102 116A 11B7;B1A4;1102 116A 11B7; # (놤; 놤; 놤; 놤; 놤; ) HANGUL SYLLABLE NWAM B1A5;B1A5;1102 116A 11B8;B1A5;1102 116A 11B8; # (놥; 놥; 놥; 놥; 놥; ) HANGUL SYLLABLE NWAB B1A6;B1A6;1102 116A 11B9;B1A6;1102 116A 11B9; # (놦; 놦; 놦; 놦; 놦; ) HANGUL SYLLABLE NWABS B1A7;B1A7;1102 116A 11BA;B1A7;1102 116A 11BA; # (놧; 놧; 놧; 놧; 놧; ) HANGUL SYLLABLE NWAS B1A8;B1A8;1102 116A 11BB;B1A8;1102 116A 11BB; # (놨; 놨; 놨; 놨; 놨; ) HANGUL SYLLABLE NWASS B1A9;B1A9;1102 116A 11BC;B1A9;1102 116A 11BC; # (놩; 놩; 놩; 놩; 놩; ) HANGUL SYLLABLE NWANG B1AA;B1AA;1102 116A 11BD;B1AA;1102 116A 11BD; # (놪; 놪; 놪; 놪; 놪; ) HANGUL SYLLABLE NWAJ B1AB;B1AB;1102 116A 11BE;B1AB;1102 116A 11BE; # (놫; 놫; 놫; 놫; 놫; ) HANGUL SYLLABLE NWAC B1AC;B1AC;1102 116A 11BF;B1AC;1102 116A 11BF; # (놬; 놬; 놬; 놬; 놬; ) HANGUL SYLLABLE NWAK B1AD;B1AD;1102 116A 11C0;B1AD;1102 116A 11C0; # (놭; 놭; 놭; 놭; 놭; ) HANGUL SYLLABLE NWAT B1AE;B1AE;1102 116A 11C1;B1AE;1102 116A 11C1; # (놮; 놮; 놮; 놮; 놮; ) HANGUL SYLLABLE NWAP B1AF;B1AF;1102 116A 11C2;B1AF;1102 116A 11C2; # (놯; 놯; 놯; 놯; 놯; ) HANGUL SYLLABLE NWAH B1B0;B1B0;1102 116B;B1B0;1102 116B; # (놰; 놰; 놰; 놰; 놰; ) HANGUL SYLLABLE NWAE B1B1;B1B1;1102 116B 11A8;B1B1;1102 116B 11A8; # (놱; 놱; 놱; 놱; 놱; ) HANGUL SYLLABLE NWAEG B1B2;B1B2;1102 116B 11A9;B1B2;1102 116B 11A9; # (놲; 놲; 놲; 놲; 놲; ) HANGUL SYLLABLE NWAEGG B1B3;B1B3;1102 116B 11AA;B1B3;1102 116B 11AA; # (놳; 놳; 놳; 놳; 놳; ) HANGUL SYLLABLE NWAEGS B1B4;B1B4;1102 116B 11AB;B1B4;1102 116B 11AB; # (놴; 놴; 놴; 놴; 놴; ) HANGUL SYLLABLE NWAEN B1B5;B1B5;1102 116B 11AC;B1B5;1102 116B 11AC; # (놵; 놵; 놵; 놵; 놵; ) HANGUL SYLLABLE NWAENJ B1B6;B1B6;1102 116B 11AD;B1B6;1102 116B 11AD; # (놶; 놶; 놶; 놶; 놶; ) HANGUL SYLLABLE NWAENH B1B7;B1B7;1102 116B 11AE;B1B7;1102 116B 11AE; # (놷; 놷; 놷; 놷; 놷; ) HANGUL SYLLABLE NWAED B1B8;B1B8;1102 116B 11AF;B1B8;1102 116B 11AF; # (놸; 놸; 놸; 놸; 놸; ) HANGUL SYLLABLE NWAEL B1B9;B1B9;1102 116B 11B0;B1B9;1102 116B 11B0; # (놹; 놹; 놹; 놹; 놹; ) HANGUL SYLLABLE NWAELG B1BA;B1BA;1102 116B 11B1;B1BA;1102 116B 11B1; # (놺; 놺; 놺; 놺; 놺; ) HANGUL SYLLABLE NWAELM B1BB;B1BB;1102 116B 11B2;B1BB;1102 116B 11B2; # (놻; 놻; 놻; 놻; 놻; ) HANGUL SYLLABLE NWAELB B1BC;B1BC;1102 116B 11B3;B1BC;1102 116B 11B3; # (놼; 놼; 놼; 놼; 놼; ) HANGUL SYLLABLE NWAELS B1BD;B1BD;1102 116B 11B4;B1BD;1102 116B 11B4; # (놽; 놽; 놽; 놽; 놽; ) HANGUL SYLLABLE NWAELT B1BE;B1BE;1102 116B 11B5;B1BE;1102 116B 11B5; # (놾; 놾; 놾; 놾; 놾; ) HANGUL SYLLABLE NWAELP B1BF;B1BF;1102 116B 11B6;B1BF;1102 116B 11B6; # (놿; 놿; 놿; 놿; 놿; ) HANGUL SYLLABLE NWAELH B1C0;B1C0;1102 116B 11B7;B1C0;1102 116B 11B7; # (뇀; 뇀; 뇀; 뇀; 뇀; ) HANGUL SYLLABLE NWAEM B1C1;B1C1;1102 116B 11B8;B1C1;1102 116B 11B8; # (뇁; 뇁; 뇁; 뇁; 뇁; ) HANGUL SYLLABLE NWAEB B1C2;B1C2;1102 116B 11B9;B1C2;1102 116B 11B9; # (뇂; 뇂; 뇂; 뇂; 뇂; ) HANGUL SYLLABLE NWAEBS B1C3;B1C3;1102 116B 11BA;B1C3;1102 116B 11BA; # (뇃; 뇃; 뇃; 뇃; 뇃; ) HANGUL SYLLABLE NWAES B1C4;B1C4;1102 116B 11BB;B1C4;1102 116B 11BB; # (뇄; 뇄; 뇄; 뇄; 뇄; ) HANGUL SYLLABLE NWAESS B1C5;B1C5;1102 116B 11BC;B1C5;1102 116B 11BC; # (뇅; 뇅; 뇅; 뇅; 뇅; ) HANGUL SYLLABLE NWAENG B1C6;B1C6;1102 116B 11BD;B1C6;1102 116B 11BD; # (뇆; 뇆; 뇆; 뇆; 뇆; ) HANGUL SYLLABLE NWAEJ B1C7;B1C7;1102 116B 11BE;B1C7;1102 116B 11BE; # (뇇; 뇇; 뇇; 뇇; 뇇; ) HANGUL SYLLABLE NWAEC B1C8;B1C8;1102 116B 11BF;B1C8;1102 116B 11BF; # (뇈; 뇈; 뇈; 뇈; 뇈; ) HANGUL SYLLABLE NWAEK B1C9;B1C9;1102 116B 11C0;B1C9;1102 116B 11C0; # (뇉; 뇉; 뇉; 뇉; 뇉; ) HANGUL SYLLABLE NWAET B1CA;B1CA;1102 116B 11C1;B1CA;1102 116B 11C1; # (뇊; 뇊; 뇊; 뇊; 뇊; ) HANGUL SYLLABLE NWAEP B1CB;B1CB;1102 116B 11C2;B1CB;1102 116B 11C2; # (뇋; 뇋; 뇋; 뇋; 뇋; ) HANGUL SYLLABLE NWAEH B1CC;B1CC;1102 116C;B1CC;1102 116C; # (뇌; 뇌; 뇌; 뇌; 뇌; ) HANGUL SYLLABLE NOE B1CD;B1CD;1102 116C 11A8;B1CD;1102 116C 11A8; # (뇍; 뇍; 뇍; 뇍; 뇍; ) HANGUL SYLLABLE NOEG B1CE;B1CE;1102 116C 11A9;B1CE;1102 116C 11A9; # (뇎; 뇎; 뇎; 뇎; 뇎; ) HANGUL SYLLABLE NOEGG B1CF;B1CF;1102 116C 11AA;B1CF;1102 116C 11AA; # (뇏; 뇏; 뇏; 뇏; 뇏; ) HANGUL SYLLABLE NOEGS B1D0;B1D0;1102 116C 11AB;B1D0;1102 116C 11AB; # (뇐; 뇐; 뇐; 뇐; 뇐; ) HANGUL SYLLABLE NOEN B1D1;B1D1;1102 116C 11AC;B1D1;1102 116C 11AC; # (뇑; 뇑; 뇑; 뇑; 뇑; ) HANGUL SYLLABLE NOENJ B1D2;B1D2;1102 116C 11AD;B1D2;1102 116C 11AD; # (뇒; 뇒; 뇒; 뇒; 뇒; ) HANGUL SYLLABLE NOENH B1D3;B1D3;1102 116C 11AE;B1D3;1102 116C 11AE; # (뇓; 뇓; 뇓; 뇓; 뇓; ) HANGUL SYLLABLE NOED B1D4;B1D4;1102 116C 11AF;B1D4;1102 116C 11AF; # (뇔; 뇔; 뇔; 뇔; 뇔; ) HANGUL SYLLABLE NOEL B1D5;B1D5;1102 116C 11B0;B1D5;1102 116C 11B0; # (뇕; 뇕; 뇕; 뇕; 뇕; ) HANGUL SYLLABLE NOELG B1D6;B1D6;1102 116C 11B1;B1D6;1102 116C 11B1; # (뇖; 뇖; 뇖; 뇖; 뇖; ) HANGUL SYLLABLE NOELM B1D7;B1D7;1102 116C 11B2;B1D7;1102 116C 11B2; # (뇗; 뇗; 뇗; 뇗; 뇗; ) HANGUL SYLLABLE NOELB B1D8;B1D8;1102 116C 11B3;B1D8;1102 116C 11B3; # (뇘; 뇘; 뇘; 뇘; 뇘; ) HANGUL SYLLABLE NOELS B1D9;B1D9;1102 116C 11B4;B1D9;1102 116C 11B4; # (뇙; 뇙; 뇙; 뇙; 뇙; ) HANGUL SYLLABLE NOELT B1DA;B1DA;1102 116C 11B5;B1DA;1102 116C 11B5; # (뇚; 뇚; 뇚; 뇚; 뇚; ) HANGUL SYLLABLE NOELP B1DB;B1DB;1102 116C 11B6;B1DB;1102 116C 11B6; # (뇛; 뇛; 뇛; 뇛; 뇛; ) HANGUL SYLLABLE NOELH B1DC;B1DC;1102 116C 11B7;B1DC;1102 116C 11B7; # (뇜; 뇜; 뇜; 뇜; 뇜; ) HANGUL SYLLABLE NOEM B1DD;B1DD;1102 116C 11B8;B1DD;1102 116C 11B8; # (뇝; 뇝; 뇝; 뇝; 뇝; ) HANGUL SYLLABLE NOEB B1DE;B1DE;1102 116C 11B9;B1DE;1102 116C 11B9; # (뇞; 뇞; 뇞; 뇞; 뇞; ) HANGUL SYLLABLE NOEBS B1DF;B1DF;1102 116C 11BA;B1DF;1102 116C 11BA; # (뇟; 뇟; 뇟; 뇟; 뇟; ) HANGUL SYLLABLE NOES B1E0;B1E0;1102 116C 11BB;B1E0;1102 116C 11BB; # (뇠; 뇠; 뇠; 뇠; 뇠; ) HANGUL SYLLABLE NOESS B1E1;B1E1;1102 116C 11BC;B1E1;1102 116C 11BC; # (뇡; 뇡; 뇡; 뇡; 뇡; ) HANGUL SYLLABLE NOENG B1E2;B1E2;1102 116C 11BD;B1E2;1102 116C 11BD; # (뇢; 뇢; 뇢; 뇢; 뇢; ) HANGUL SYLLABLE NOEJ B1E3;B1E3;1102 116C 11BE;B1E3;1102 116C 11BE; # (뇣; 뇣; 뇣; 뇣; 뇣; ) HANGUL SYLLABLE NOEC B1E4;B1E4;1102 116C 11BF;B1E4;1102 116C 11BF; # (뇤; 뇤; 뇤; 뇤; 뇤; ) HANGUL SYLLABLE NOEK B1E5;B1E5;1102 116C 11C0;B1E5;1102 116C 11C0; # (뇥; 뇥; 뇥; 뇥; 뇥; ) HANGUL SYLLABLE NOET B1E6;B1E6;1102 116C 11C1;B1E6;1102 116C 11C1; # (뇦; 뇦; 뇦; 뇦; 뇦; ) HANGUL SYLLABLE NOEP B1E7;B1E7;1102 116C 11C2;B1E7;1102 116C 11C2; # (뇧; 뇧; 뇧; 뇧; 뇧; ) HANGUL SYLLABLE NOEH B1E8;B1E8;1102 116D;B1E8;1102 116D; # (뇨; 뇨; 뇨; 뇨; 뇨; ) HANGUL SYLLABLE NYO B1E9;B1E9;1102 116D 11A8;B1E9;1102 116D 11A8; # (뇩; 뇩; 뇩; 뇩; 뇩; ) HANGUL SYLLABLE NYOG B1EA;B1EA;1102 116D 11A9;B1EA;1102 116D 11A9; # (뇪; 뇪; 뇪; 뇪; 뇪; ) HANGUL SYLLABLE NYOGG B1EB;B1EB;1102 116D 11AA;B1EB;1102 116D 11AA; # (뇫; 뇫; 뇫; 뇫; 뇫; ) HANGUL SYLLABLE NYOGS B1EC;B1EC;1102 116D 11AB;B1EC;1102 116D 11AB; # (뇬; 뇬; 뇬; 뇬; 뇬; ) HANGUL SYLLABLE NYON B1ED;B1ED;1102 116D 11AC;B1ED;1102 116D 11AC; # (뇭; 뇭; 뇭; 뇭; 뇭; ) HANGUL SYLLABLE NYONJ B1EE;B1EE;1102 116D 11AD;B1EE;1102 116D 11AD; # (뇮; 뇮; 뇮; 뇮; 뇮; ) HANGUL SYLLABLE NYONH B1EF;B1EF;1102 116D 11AE;B1EF;1102 116D 11AE; # (뇯; 뇯; 뇯; 뇯; 뇯; ) HANGUL SYLLABLE NYOD B1F0;B1F0;1102 116D 11AF;B1F0;1102 116D 11AF; # (뇰; 뇰; 뇰; 뇰; 뇰; ) HANGUL SYLLABLE NYOL B1F1;B1F1;1102 116D 11B0;B1F1;1102 116D 11B0; # (뇱; 뇱; 뇱; 뇱; 뇱; ) HANGUL SYLLABLE NYOLG B1F2;B1F2;1102 116D 11B1;B1F2;1102 116D 11B1; # (뇲; 뇲; 뇲; 뇲; 뇲; ) HANGUL SYLLABLE NYOLM B1F3;B1F3;1102 116D 11B2;B1F3;1102 116D 11B2; # (뇳; 뇳; 뇳; 뇳; 뇳; ) HANGUL SYLLABLE NYOLB B1F4;B1F4;1102 116D 11B3;B1F4;1102 116D 11B3; # (뇴; 뇴; 뇴; 뇴; 뇴; ) HANGUL SYLLABLE NYOLS B1F5;B1F5;1102 116D 11B4;B1F5;1102 116D 11B4; # (뇵; 뇵; 뇵; 뇵; 뇵; ) HANGUL SYLLABLE NYOLT B1F6;B1F6;1102 116D 11B5;B1F6;1102 116D 11B5; # (뇶; 뇶; 뇶; 뇶; 뇶; ) HANGUL SYLLABLE NYOLP B1F7;B1F7;1102 116D 11B6;B1F7;1102 116D 11B6; # (뇷; 뇷; 뇷; 뇷; 뇷; ) HANGUL SYLLABLE NYOLH B1F8;B1F8;1102 116D 11B7;B1F8;1102 116D 11B7; # (뇸; 뇸; 뇸; 뇸; 뇸; ) HANGUL SYLLABLE NYOM B1F9;B1F9;1102 116D 11B8;B1F9;1102 116D 11B8; # (뇹; 뇹; 뇹; 뇹; 뇹; ) HANGUL SYLLABLE NYOB B1FA;B1FA;1102 116D 11B9;B1FA;1102 116D 11B9; # (뇺; 뇺; 뇺; 뇺; 뇺; ) HANGUL SYLLABLE NYOBS B1FB;B1FB;1102 116D 11BA;B1FB;1102 116D 11BA; # (뇻; 뇻; 뇻; 뇻; 뇻; ) HANGUL SYLLABLE NYOS B1FC;B1FC;1102 116D 11BB;B1FC;1102 116D 11BB; # (뇼; 뇼; 뇼; 뇼; 뇼; ) HANGUL SYLLABLE NYOSS B1FD;B1FD;1102 116D 11BC;B1FD;1102 116D 11BC; # (뇽; 뇽; 뇽; 뇽; 뇽; ) HANGUL SYLLABLE NYONG B1FE;B1FE;1102 116D 11BD;B1FE;1102 116D 11BD; # (뇾; 뇾; 뇾; 뇾; 뇾; ) HANGUL SYLLABLE NYOJ B1FF;B1FF;1102 116D 11BE;B1FF;1102 116D 11BE; # (뇿; 뇿; 뇿; 뇿; 뇿; ) HANGUL SYLLABLE NYOC B200;B200;1102 116D 11BF;B200;1102 116D 11BF; # (눀; 눀; 눀; 눀; 눀; ) HANGUL SYLLABLE NYOK B201;B201;1102 116D 11C0;B201;1102 116D 11C0; # (눁; 눁; 눁; 눁; 눁; ) HANGUL SYLLABLE NYOT B202;B202;1102 116D 11C1;B202;1102 116D 11C1; # (눂; 눂; 눂; 눂; 눂; ) HANGUL SYLLABLE NYOP B203;B203;1102 116D 11C2;B203;1102 116D 11C2; # (눃; 눃; 눃; 눃; 눃; ) HANGUL SYLLABLE NYOH B204;B204;1102 116E;B204;1102 116E; # (누; 누; 누; 누; 누; ) HANGUL SYLLABLE NU B205;B205;1102 116E 11A8;B205;1102 116E 11A8; # (눅; 눅; 눅; 눅; 눅; ) HANGUL SYLLABLE NUG B206;B206;1102 116E 11A9;B206;1102 116E 11A9; # (눆; 눆; 눆; 눆; 눆; ) HANGUL SYLLABLE NUGG B207;B207;1102 116E 11AA;B207;1102 116E 11AA; # (눇; 눇; 눇; 눇; 눇; ) HANGUL SYLLABLE NUGS B208;B208;1102 116E 11AB;B208;1102 116E 11AB; # (눈; 눈; 눈; 눈; 눈; ) HANGUL SYLLABLE NUN B209;B209;1102 116E 11AC;B209;1102 116E 11AC; # (눉; 눉; 눉; 눉; 눉; ) HANGUL SYLLABLE NUNJ B20A;B20A;1102 116E 11AD;B20A;1102 116E 11AD; # (눊; 눊; 눊; 눊; 눊; ) HANGUL SYLLABLE NUNH B20B;B20B;1102 116E 11AE;B20B;1102 116E 11AE; # (눋; 눋; 눋; 눋; 눋; ) HANGUL SYLLABLE NUD B20C;B20C;1102 116E 11AF;B20C;1102 116E 11AF; # (눌; 눌; 눌; 눌; 눌; ) HANGUL SYLLABLE NUL B20D;B20D;1102 116E 11B0;B20D;1102 116E 11B0; # (눍; 눍; 눍; 눍; 눍; ) HANGUL SYLLABLE NULG B20E;B20E;1102 116E 11B1;B20E;1102 116E 11B1; # (눎; 눎; 눎; 눎; 눎; ) HANGUL SYLLABLE NULM B20F;B20F;1102 116E 11B2;B20F;1102 116E 11B2; # (눏; 눏; 눏; 눏; 눏; ) HANGUL SYLLABLE NULB B210;B210;1102 116E 11B3;B210;1102 116E 11B3; # (눐; 눐; 눐; 눐; 눐; ) HANGUL SYLLABLE NULS B211;B211;1102 116E 11B4;B211;1102 116E 11B4; # (눑; 눑; 눑; 눑; 눑; ) HANGUL SYLLABLE NULT B212;B212;1102 116E 11B5;B212;1102 116E 11B5; # (눒; 눒; 눒; 눒; 눒; ) HANGUL SYLLABLE NULP B213;B213;1102 116E 11B6;B213;1102 116E 11B6; # (눓; 눓; 눓; 눓; 눓; ) HANGUL SYLLABLE NULH B214;B214;1102 116E 11B7;B214;1102 116E 11B7; # (눔; 눔; 눔; 눔; 눔; ) HANGUL SYLLABLE NUM B215;B215;1102 116E 11B8;B215;1102 116E 11B8; # (눕; 눕; 눕; 눕; 눕; ) HANGUL SYLLABLE NUB B216;B216;1102 116E 11B9;B216;1102 116E 11B9; # (눖; 눖; 눖; 눖; 눖; ) HANGUL SYLLABLE NUBS B217;B217;1102 116E 11BA;B217;1102 116E 11BA; # (눗; 눗; 눗; 눗; 눗; ) HANGUL SYLLABLE NUS B218;B218;1102 116E 11BB;B218;1102 116E 11BB; # (눘; 눘; 눘; 눘; 눘; ) HANGUL SYLLABLE NUSS B219;B219;1102 116E 11BC;B219;1102 116E 11BC; # (눙; 눙; 눙; 눙; 눙; ) HANGUL SYLLABLE NUNG B21A;B21A;1102 116E 11BD;B21A;1102 116E 11BD; # (눚; 눚; 눚; 눚; 눚; ) HANGUL SYLLABLE NUJ B21B;B21B;1102 116E 11BE;B21B;1102 116E 11BE; # (눛; 눛; 눛; 눛; 눛; ) HANGUL SYLLABLE NUC B21C;B21C;1102 116E 11BF;B21C;1102 116E 11BF; # (눜; 눜; 눜; 눜; 눜; ) HANGUL SYLLABLE NUK B21D;B21D;1102 116E 11C0;B21D;1102 116E 11C0; # (눝; 눝; 눝; 눝; 눝; ) HANGUL SYLLABLE NUT B21E;B21E;1102 116E 11C1;B21E;1102 116E 11C1; # (눞; 눞; 눞; 눞; 눞; ) HANGUL SYLLABLE NUP B21F;B21F;1102 116E 11C2;B21F;1102 116E 11C2; # (눟; 눟; 눟; 눟; 눟; ) HANGUL SYLLABLE NUH B220;B220;1102 116F;B220;1102 116F; # (눠; 눠; 눠; 눠; 눠; ) HANGUL SYLLABLE NWEO B221;B221;1102 116F 11A8;B221;1102 116F 11A8; # (눡; 눡; 눡; 눡; 눡; ) HANGUL SYLLABLE NWEOG B222;B222;1102 116F 11A9;B222;1102 116F 11A9; # (눢; 눢; 눢; 눢; 눢; ) HANGUL SYLLABLE NWEOGG B223;B223;1102 116F 11AA;B223;1102 116F 11AA; # (눣; 눣; 눣; 눣; 눣; ) HANGUL SYLLABLE NWEOGS B224;B224;1102 116F 11AB;B224;1102 116F 11AB; # (눤; 눤; 눤; 눤; 눤; ) HANGUL SYLLABLE NWEON B225;B225;1102 116F 11AC;B225;1102 116F 11AC; # (눥; 눥; 눥; 눥; 눥; ) HANGUL SYLLABLE NWEONJ B226;B226;1102 116F 11AD;B226;1102 116F 11AD; # (눦; 눦; 눦; 눦; 눦; ) HANGUL SYLLABLE NWEONH B227;B227;1102 116F 11AE;B227;1102 116F 11AE; # (눧; 눧; 눧; 눧; 눧; ) HANGUL SYLLABLE NWEOD B228;B228;1102 116F 11AF;B228;1102 116F 11AF; # (눨; 눨; 눨; 눨; 눨; ) HANGUL SYLLABLE NWEOL B229;B229;1102 116F 11B0;B229;1102 116F 11B0; # (눩; 눩; 눩; 눩; 눩; ) HANGUL SYLLABLE NWEOLG B22A;B22A;1102 116F 11B1;B22A;1102 116F 11B1; # (눪; 눪; 눪; 눪; 눪; ) HANGUL SYLLABLE NWEOLM B22B;B22B;1102 116F 11B2;B22B;1102 116F 11B2; # (눫; 눫; 눫; 눫; 눫; ) HANGUL SYLLABLE NWEOLB B22C;B22C;1102 116F 11B3;B22C;1102 116F 11B3; # (눬; 눬; 눬; 눬; 눬; ) HANGUL SYLLABLE NWEOLS B22D;B22D;1102 116F 11B4;B22D;1102 116F 11B4; # (눭; 눭; 눭; 눭; 눭; ) HANGUL SYLLABLE NWEOLT B22E;B22E;1102 116F 11B5;B22E;1102 116F 11B5; # (눮; 눮; 눮; 눮; 눮; ) HANGUL SYLLABLE NWEOLP B22F;B22F;1102 116F 11B6;B22F;1102 116F 11B6; # (눯; 눯; 눯; 눯; 눯; ) HANGUL SYLLABLE NWEOLH B230;B230;1102 116F 11B7;B230;1102 116F 11B7; # (눰; 눰; 눰; 눰; 눰; ) HANGUL SYLLABLE NWEOM B231;B231;1102 116F 11B8;B231;1102 116F 11B8; # (눱; 눱; 눱; 눱; 눱; ) HANGUL SYLLABLE NWEOB B232;B232;1102 116F 11B9;B232;1102 116F 11B9; # (눲; 눲; 눲; 눲; 눲; ) HANGUL SYLLABLE NWEOBS B233;B233;1102 116F 11BA;B233;1102 116F 11BA; # (눳; 눳; 눳; 눳; 눳; ) HANGUL SYLLABLE NWEOS B234;B234;1102 116F 11BB;B234;1102 116F 11BB; # (눴; 눴; 눴; 눴; 눴; ) HANGUL SYLLABLE NWEOSS B235;B235;1102 116F 11BC;B235;1102 116F 11BC; # (눵; 눵; 눵; 눵; 눵; ) HANGUL SYLLABLE NWEONG B236;B236;1102 116F 11BD;B236;1102 116F 11BD; # (눶; 눶; 눶; 눶; 눶; ) HANGUL SYLLABLE NWEOJ B237;B237;1102 116F 11BE;B237;1102 116F 11BE; # (눷; 눷; 눷; 눷; 눷; ) HANGUL SYLLABLE NWEOC B238;B238;1102 116F 11BF;B238;1102 116F 11BF; # (눸; 눸; 눸; 눸; 눸; ) HANGUL SYLLABLE NWEOK B239;B239;1102 116F 11C0;B239;1102 116F 11C0; # (눹; 눹; 눹; 눹; 눹; ) HANGUL SYLLABLE NWEOT B23A;B23A;1102 116F 11C1;B23A;1102 116F 11C1; # (눺; 눺; 눺; 눺; 눺; ) HANGUL SYLLABLE NWEOP B23B;B23B;1102 116F 11C2;B23B;1102 116F 11C2; # (눻; 눻; 눻; 눻; 눻; ) HANGUL SYLLABLE NWEOH B23C;B23C;1102 1170;B23C;1102 1170; # (눼; 눼; 눼; 눼; 눼; ) HANGUL SYLLABLE NWE B23D;B23D;1102 1170 11A8;B23D;1102 1170 11A8; # (눽; 눽; 눽; 눽; 눽; ) HANGUL SYLLABLE NWEG B23E;B23E;1102 1170 11A9;B23E;1102 1170 11A9; # (눾; 눾; 눾; 눾; 눾; ) HANGUL SYLLABLE NWEGG B23F;B23F;1102 1170 11AA;B23F;1102 1170 11AA; # (눿; 눿; 눿; 눿; 눿; ) HANGUL SYLLABLE NWEGS B240;B240;1102 1170 11AB;B240;1102 1170 11AB; # (뉀; 뉀; 뉀; 뉀; 뉀; ) HANGUL SYLLABLE NWEN B241;B241;1102 1170 11AC;B241;1102 1170 11AC; # (뉁; 뉁; 뉁; 뉁; 뉁; ) HANGUL SYLLABLE NWENJ B242;B242;1102 1170 11AD;B242;1102 1170 11AD; # (뉂; 뉂; 뉂; 뉂; 뉂; ) HANGUL SYLLABLE NWENH B243;B243;1102 1170 11AE;B243;1102 1170 11AE; # (뉃; 뉃; 뉃; 뉃; 뉃; ) HANGUL SYLLABLE NWED B244;B244;1102 1170 11AF;B244;1102 1170 11AF; # (뉄; 뉄; 뉄; 뉄; 뉄; ) HANGUL SYLLABLE NWEL B245;B245;1102 1170 11B0;B245;1102 1170 11B0; # (뉅; 뉅; 뉅; 뉅; 뉅; ) HANGUL SYLLABLE NWELG B246;B246;1102 1170 11B1;B246;1102 1170 11B1; # (뉆; 뉆; 뉆; 뉆; 뉆; ) HANGUL SYLLABLE NWELM B247;B247;1102 1170 11B2;B247;1102 1170 11B2; # (뉇; 뉇; 뉇; 뉇; 뉇; ) HANGUL SYLLABLE NWELB B248;B248;1102 1170 11B3;B248;1102 1170 11B3; # (뉈; 뉈; 뉈; 뉈; 뉈; ) HANGUL SYLLABLE NWELS B249;B249;1102 1170 11B4;B249;1102 1170 11B4; # (뉉; 뉉; 뉉; 뉉; 뉉; ) HANGUL SYLLABLE NWELT B24A;B24A;1102 1170 11B5;B24A;1102 1170 11B5; # (뉊; 뉊; 뉊; 뉊; 뉊; ) HANGUL SYLLABLE NWELP B24B;B24B;1102 1170 11B6;B24B;1102 1170 11B6; # (뉋; 뉋; 뉋; 뉋; 뉋; ) HANGUL SYLLABLE NWELH B24C;B24C;1102 1170 11B7;B24C;1102 1170 11B7; # (뉌; 뉌; 뉌; 뉌; 뉌; ) HANGUL SYLLABLE NWEM B24D;B24D;1102 1170 11B8;B24D;1102 1170 11B8; # (뉍; 뉍; 뉍; 뉍; 뉍; ) HANGUL SYLLABLE NWEB B24E;B24E;1102 1170 11B9;B24E;1102 1170 11B9; # (뉎; 뉎; 뉎; 뉎; 뉎; ) HANGUL SYLLABLE NWEBS B24F;B24F;1102 1170 11BA;B24F;1102 1170 11BA; # (뉏; 뉏; 뉏; 뉏; 뉏; ) HANGUL SYLLABLE NWES B250;B250;1102 1170 11BB;B250;1102 1170 11BB; # (뉐; 뉐; 뉐; 뉐; 뉐; ) HANGUL SYLLABLE NWESS B251;B251;1102 1170 11BC;B251;1102 1170 11BC; # (뉑; 뉑; 뉑; 뉑; 뉑; ) HANGUL SYLLABLE NWENG B252;B252;1102 1170 11BD;B252;1102 1170 11BD; # (뉒; 뉒; 뉒; 뉒; 뉒; ) HANGUL SYLLABLE NWEJ B253;B253;1102 1170 11BE;B253;1102 1170 11BE; # (뉓; 뉓; 뉓; 뉓; 뉓; ) HANGUL SYLLABLE NWEC B254;B254;1102 1170 11BF;B254;1102 1170 11BF; # (뉔; 뉔; 뉔; 뉔; 뉔; ) HANGUL SYLLABLE NWEK B255;B255;1102 1170 11C0;B255;1102 1170 11C0; # (뉕; 뉕; 뉕; 뉕; 뉕; ) HANGUL SYLLABLE NWET B256;B256;1102 1170 11C1;B256;1102 1170 11C1; # (뉖; 뉖; 뉖; 뉖; 뉖; ) HANGUL SYLLABLE NWEP B257;B257;1102 1170 11C2;B257;1102 1170 11C2; # (뉗; 뉗; 뉗; 뉗; 뉗; ) HANGUL SYLLABLE NWEH B258;B258;1102 1171;B258;1102 1171; # (뉘; 뉘; 뉘; 뉘; 뉘; ) HANGUL SYLLABLE NWI B259;B259;1102 1171 11A8;B259;1102 1171 11A8; # (뉙; 뉙; 뉙; 뉙; 뉙; ) HANGUL SYLLABLE NWIG B25A;B25A;1102 1171 11A9;B25A;1102 1171 11A9; # (뉚; 뉚; 뉚; 뉚; 뉚; ) HANGUL SYLLABLE NWIGG B25B;B25B;1102 1171 11AA;B25B;1102 1171 11AA; # (뉛; 뉛; 뉛; 뉛; 뉛; ) HANGUL SYLLABLE NWIGS B25C;B25C;1102 1171 11AB;B25C;1102 1171 11AB; # (뉜; 뉜; 뉜; 뉜; 뉜; ) HANGUL SYLLABLE NWIN B25D;B25D;1102 1171 11AC;B25D;1102 1171 11AC; # (뉝; 뉝; 뉝; 뉝; 뉝; ) HANGUL SYLLABLE NWINJ B25E;B25E;1102 1171 11AD;B25E;1102 1171 11AD; # (뉞; 뉞; 뉞; 뉞; 뉞; ) HANGUL SYLLABLE NWINH B25F;B25F;1102 1171 11AE;B25F;1102 1171 11AE; # (뉟; 뉟; 뉟; 뉟; 뉟; ) HANGUL SYLLABLE NWID B260;B260;1102 1171 11AF;B260;1102 1171 11AF; # (뉠; 뉠; 뉠; 뉠; 뉠; ) HANGUL SYLLABLE NWIL B261;B261;1102 1171 11B0;B261;1102 1171 11B0; # (뉡; 뉡; 뉡; 뉡; 뉡; ) HANGUL SYLLABLE NWILG B262;B262;1102 1171 11B1;B262;1102 1171 11B1; # (뉢; 뉢; 뉢; 뉢; 뉢; ) HANGUL SYLLABLE NWILM B263;B263;1102 1171 11B2;B263;1102 1171 11B2; # (뉣; 뉣; 뉣; 뉣; 뉣; ) HANGUL SYLLABLE NWILB B264;B264;1102 1171 11B3;B264;1102 1171 11B3; # (뉤; 뉤; 뉤; 뉤; 뉤; ) HANGUL SYLLABLE NWILS B265;B265;1102 1171 11B4;B265;1102 1171 11B4; # (뉥; 뉥; 뉥; 뉥; 뉥; ) HANGUL SYLLABLE NWILT B266;B266;1102 1171 11B5;B266;1102 1171 11B5; # (뉦; 뉦; 뉦; 뉦; 뉦; ) HANGUL SYLLABLE NWILP B267;B267;1102 1171 11B6;B267;1102 1171 11B6; # (뉧; 뉧; 뉧; 뉧; 뉧; ) HANGUL SYLLABLE NWILH B268;B268;1102 1171 11B7;B268;1102 1171 11B7; # (뉨; 뉨; 뉨; 뉨; 뉨; ) HANGUL SYLLABLE NWIM B269;B269;1102 1171 11B8;B269;1102 1171 11B8; # (뉩; 뉩; 뉩; 뉩; 뉩; ) HANGUL SYLLABLE NWIB B26A;B26A;1102 1171 11B9;B26A;1102 1171 11B9; # (뉪; 뉪; 뉪; 뉪; 뉪; ) HANGUL SYLLABLE NWIBS B26B;B26B;1102 1171 11BA;B26B;1102 1171 11BA; # (뉫; 뉫; 뉫; 뉫; 뉫; ) HANGUL SYLLABLE NWIS B26C;B26C;1102 1171 11BB;B26C;1102 1171 11BB; # (뉬; 뉬; 뉬; 뉬; 뉬; ) HANGUL SYLLABLE NWISS B26D;B26D;1102 1171 11BC;B26D;1102 1171 11BC; # (뉭; 뉭; 뉭; 뉭; 뉭; ) HANGUL SYLLABLE NWING B26E;B26E;1102 1171 11BD;B26E;1102 1171 11BD; # (뉮; 뉮; 뉮; 뉮; 뉮; ) HANGUL SYLLABLE NWIJ B26F;B26F;1102 1171 11BE;B26F;1102 1171 11BE; # (뉯; 뉯; 뉯; 뉯; 뉯; ) HANGUL SYLLABLE NWIC B270;B270;1102 1171 11BF;B270;1102 1171 11BF; # (뉰; 뉰; 뉰; 뉰; 뉰; ) HANGUL SYLLABLE NWIK B271;B271;1102 1171 11C0;B271;1102 1171 11C0; # (뉱; 뉱; 뉱; 뉱; 뉱; ) HANGUL SYLLABLE NWIT B272;B272;1102 1171 11C1;B272;1102 1171 11C1; # (뉲; 뉲; 뉲; 뉲; 뉲; ) HANGUL SYLLABLE NWIP B273;B273;1102 1171 11C2;B273;1102 1171 11C2; # (뉳; 뉳; 뉳; 뉳; 뉳; ) HANGUL SYLLABLE NWIH B274;B274;1102 1172;B274;1102 1172; # (뉴; 뉴; 뉴; 뉴; 뉴; ) HANGUL SYLLABLE NYU B275;B275;1102 1172 11A8;B275;1102 1172 11A8; # (뉵; 뉵; 뉵; 뉵; 뉵; ) HANGUL SYLLABLE NYUG B276;B276;1102 1172 11A9;B276;1102 1172 11A9; # (뉶; 뉶; 뉶; 뉶; 뉶; ) HANGUL SYLLABLE NYUGG B277;B277;1102 1172 11AA;B277;1102 1172 11AA; # (뉷; 뉷; 뉷; 뉷; 뉷; ) HANGUL SYLLABLE NYUGS B278;B278;1102 1172 11AB;B278;1102 1172 11AB; # (뉸; 뉸; 뉸; 뉸; 뉸; ) HANGUL SYLLABLE NYUN B279;B279;1102 1172 11AC;B279;1102 1172 11AC; # (뉹; 뉹; 뉹; 뉹; 뉹; ) HANGUL SYLLABLE NYUNJ B27A;B27A;1102 1172 11AD;B27A;1102 1172 11AD; # (뉺; 뉺; 뉺; 뉺; 뉺; ) HANGUL SYLLABLE NYUNH B27B;B27B;1102 1172 11AE;B27B;1102 1172 11AE; # (뉻; 뉻; 뉻; 뉻; 뉻; ) HANGUL SYLLABLE NYUD B27C;B27C;1102 1172 11AF;B27C;1102 1172 11AF; # (뉼; 뉼; 뉼; 뉼; 뉼; ) HANGUL SYLLABLE NYUL B27D;B27D;1102 1172 11B0;B27D;1102 1172 11B0; # (뉽; 뉽; 뉽; 뉽; 뉽; ) HANGUL SYLLABLE NYULG B27E;B27E;1102 1172 11B1;B27E;1102 1172 11B1; # (뉾; 뉾; 뉾; 뉾; 뉾; ) HANGUL SYLLABLE NYULM B27F;B27F;1102 1172 11B2;B27F;1102 1172 11B2; # (뉿; 뉿; 뉿; 뉿; 뉿; ) HANGUL SYLLABLE NYULB B280;B280;1102 1172 11B3;B280;1102 1172 11B3; # (늀; 늀; 늀; 늀; 늀; ) HANGUL SYLLABLE NYULS B281;B281;1102 1172 11B4;B281;1102 1172 11B4; # (늁; 늁; 늁; 늁; 늁; ) HANGUL SYLLABLE NYULT B282;B282;1102 1172 11B5;B282;1102 1172 11B5; # (늂; 늂; 늂; 늂; 늂; ) HANGUL SYLLABLE NYULP B283;B283;1102 1172 11B6;B283;1102 1172 11B6; # (늃; 늃; 늃; 늃; 늃; ) HANGUL SYLLABLE NYULH B284;B284;1102 1172 11B7;B284;1102 1172 11B7; # (늄; 늄; 늄; 늄; 늄; ) HANGUL SYLLABLE NYUM B285;B285;1102 1172 11B8;B285;1102 1172 11B8; # (늅; 늅; 늅; 늅; 늅; ) HANGUL SYLLABLE NYUB B286;B286;1102 1172 11B9;B286;1102 1172 11B9; # (늆; 늆; 늆; 늆; 늆; ) HANGUL SYLLABLE NYUBS B287;B287;1102 1172 11BA;B287;1102 1172 11BA; # (늇; 늇; 늇; 늇; 늇; ) HANGUL SYLLABLE NYUS B288;B288;1102 1172 11BB;B288;1102 1172 11BB; # (늈; 늈; 늈; 늈; 늈; ) HANGUL SYLLABLE NYUSS B289;B289;1102 1172 11BC;B289;1102 1172 11BC; # (늉; 늉; 늉; 늉; 늉; ) HANGUL SYLLABLE NYUNG B28A;B28A;1102 1172 11BD;B28A;1102 1172 11BD; # (늊; 늊; 늊; 늊; 늊; ) HANGUL SYLLABLE NYUJ B28B;B28B;1102 1172 11BE;B28B;1102 1172 11BE; # (늋; 늋; 늋; 늋; 늋; ) HANGUL SYLLABLE NYUC B28C;B28C;1102 1172 11BF;B28C;1102 1172 11BF; # (늌; 늌; 늌; 늌; 늌; ) HANGUL SYLLABLE NYUK B28D;B28D;1102 1172 11C0;B28D;1102 1172 11C0; # (늍; 늍; 늍; 늍; 늍; ) HANGUL SYLLABLE NYUT B28E;B28E;1102 1172 11C1;B28E;1102 1172 11C1; # (늎; 늎; 늎; 늎; 늎; ) HANGUL SYLLABLE NYUP B28F;B28F;1102 1172 11C2;B28F;1102 1172 11C2; # (늏; 늏; 늏; 늏; 늏; ) HANGUL SYLLABLE NYUH B290;B290;1102 1173;B290;1102 1173; # (느; 느; 느; 느; 느; ) HANGUL SYLLABLE NEU B291;B291;1102 1173 11A8;B291;1102 1173 11A8; # (늑; 늑; 늑; 늑; 늑; ) HANGUL SYLLABLE NEUG B292;B292;1102 1173 11A9;B292;1102 1173 11A9; # (늒; 늒; 늒; 늒; 늒; ) HANGUL SYLLABLE NEUGG B293;B293;1102 1173 11AA;B293;1102 1173 11AA; # (늓; 늓; 늓; 늓; 늓; ) HANGUL SYLLABLE NEUGS B294;B294;1102 1173 11AB;B294;1102 1173 11AB; # (는; 는; 는; 는; 는; ) HANGUL SYLLABLE NEUN B295;B295;1102 1173 11AC;B295;1102 1173 11AC; # (늕; 늕; 늕; 늕; 늕; ) HANGUL SYLLABLE NEUNJ B296;B296;1102 1173 11AD;B296;1102 1173 11AD; # (늖; 늖; 늖; 늖; 늖; ) HANGUL SYLLABLE NEUNH B297;B297;1102 1173 11AE;B297;1102 1173 11AE; # (늗; 늗; 늗; 늗; 늗; ) HANGUL SYLLABLE NEUD B298;B298;1102 1173 11AF;B298;1102 1173 11AF; # (늘; 늘; 늘; 늘; 늘; ) HANGUL SYLLABLE NEUL B299;B299;1102 1173 11B0;B299;1102 1173 11B0; # (늙; 늙; 늙; 늙; 늙; ) HANGUL SYLLABLE NEULG B29A;B29A;1102 1173 11B1;B29A;1102 1173 11B1; # (늚; 늚; 늚; 늚; 늚; ) HANGUL SYLLABLE NEULM B29B;B29B;1102 1173 11B2;B29B;1102 1173 11B2; # (늛; 늛; 늛; 늛; 늛; ) HANGUL SYLLABLE NEULB B29C;B29C;1102 1173 11B3;B29C;1102 1173 11B3; # (늜; 늜; 늜; 늜; 늜; ) HANGUL SYLLABLE NEULS B29D;B29D;1102 1173 11B4;B29D;1102 1173 11B4; # (늝; 늝; 늝; 늝; 늝; ) HANGUL SYLLABLE NEULT B29E;B29E;1102 1173 11B5;B29E;1102 1173 11B5; # (늞; 늞; 늞; 늞; 늞; ) HANGUL SYLLABLE NEULP B29F;B29F;1102 1173 11B6;B29F;1102 1173 11B6; # (늟; 늟; 늟; 늟; 늟; ) HANGUL SYLLABLE NEULH B2A0;B2A0;1102 1173 11B7;B2A0;1102 1173 11B7; # (늠; 늠; 늠; 늠; 늠; ) HANGUL SYLLABLE NEUM B2A1;B2A1;1102 1173 11B8;B2A1;1102 1173 11B8; # (늡; 늡; 늡; 늡; 늡; ) HANGUL SYLLABLE NEUB B2A2;B2A2;1102 1173 11B9;B2A2;1102 1173 11B9; # (늢; 늢; 늢; 늢; 늢; ) HANGUL SYLLABLE NEUBS B2A3;B2A3;1102 1173 11BA;B2A3;1102 1173 11BA; # (늣; 늣; 늣; 늣; 늣; ) HANGUL SYLLABLE NEUS B2A4;B2A4;1102 1173 11BB;B2A4;1102 1173 11BB; # (늤; 늤; 늤; 늤; 늤; ) HANGUL SYLLABLE NEUSS B2A5;B2A5;1102 1173 11BC;B2A5;1102 1173 11BC; # (능; 능; 능; 능; 능; ) HANGUL SYLLABLE NEUNG B2A6;B2A6;1102 1173 11BD;B2A6;1102 1173 11BD; # (늦; 늦; 늦; 늦; 늦; ) HANGUL SYLLABLE NEUJ B2A7;B2A7;1102 1173 11BE;B2A7;1102 1173 11BE; # (늧; 늧; 늧; 늧; 늧; ) HANGUL SYLLABLE NEUC B2A8;B2A8;1102 1173 11BF;B2A8;1102 1173 11BF; # (늨; 늨; 늨; 늨; 늨; ) HANGUL SYLLABLE NEUK B2A9;B2A9;1102 1173 11C0;B2A9;1102 1173 11C0; # (늩; 늩; 늩; 늩; 늩; ) HANGUL SYLLABLE NEUT B2AA;B2AA;1102 1173 11C1;B2AA;1102 1173 11C1; # (늪; 늪; 늪; 늪; 늪; ) HANGUL SYLLABLE NEUP B2AB;B2AB;1102 1173 11C2;B2AB;1102 1173 11C2; # (늫; 늫; 늫; 늫; 늫; ) HANGUL SYLLABLE NEUH B2AC;B2AC;1102 1174;B2AC;1102 1174; # (늬; 늬; 늬; 늬; 늬; ) HANGUL SYLLABLE NYI B2AD;B2AD;1102 1174 11A8;B2AD;1102 1174 11A8; # (늭; 늭; 늭; 늭; 늭; ) HANGUL SYLLABLE NYIG B2AE;B2AE;1102 1174 11A9;B2AE;1102 1174 11A9; # (늮; 늮; 늮; 늮; 늮; ) HANGUL SYLLABLE NYIGG B2AF;B2AF;1102 1174 11AA;B2AF;1102 1174 11AA; # (늯; 늯; 늯; 늯; 늯; ) HANGUL SYLLABLE NYIGS B2B0;B2B0;1102 1174 11AB;B2B0;1102 1174 11AB; # (늰; 늰; 늰; 늰; 늰; ) HANGUL SYLLABLE NYIN B2B1;B2B1;1102 1174 11AC;B2B1;1102 1174 11AC; # (늱; 늱; 늱; 늱; 늱; ) HANGUL SYLLABLE NYINJ B2B2;B2B2;1102 1174 11AD;B2B2;1102 1174 11AD; # (늲; 늲; 늲; 늲; 늲; ) HANGUL SYLLABLE NYINH B2B3;B2B3;1102 1174 11AE;B2B3;1102 1174 11AE; # (늳; 늳; 늳; 늳; 늳; ) HANGUL SYLLABLE NYID B2B4;B2B4;1102 1174 11AF;B2B4;1102 1174 11AF; # (늴; 늴; 늴; 늴; 늴; ) HANGUL SYLLABLE NYIL B2B5;B2B5;1102 1174 11B0;B2B5;1102 1174 11B0; # (늵; 늵; 늵; 늵; 늵; ) HANGUL SYLLABLE NYILG B2B6;B2B6;1102 1174 11B1;B2B6;1102 1174 11B1; # (늶; 늶; 늶; 늶; 늶; ) HANGUL SYLLABLE NYILM B2B7;B2B7;1102 1174 11B2;B2B7;1102 1174 11B2; # (늷; 늷; 늷; 늷; 늷; ) HANGUL SYLLABLE NYILB B2B8;B2B8;1102 1174 11B3;B2B8;1102 1174 11B3; # (늸; 늸; 늸; 늸; 늸; ) HANGUL SYLLABLE NYILS B2B9;B2B9;1102 1174 11B4;B2B9;1102 1174 11B4; # (늹; 늹; 늹; 늹; 늹; ) HANGUL SYLLABLE NYILT B2BA;B2BA;1102 1174 11B5;B2BA;1102 1174 11B5; # (늺; 늺; 늺; 늺; 늺; ) HANGUL SYLLABLE NYILP B2BB;B2BB;1102 1174 11B6;B2BB;1102 1174 11B6; # (늻; 늻; 늻; 늻; 늻; ) HANGUL SYLLABLE NYILH B2BC;B2BC;1102 1174 11B7;B2BC;1102 1174 11B7; # (늼; 늼; 늼; 늼; 늼; ) HANGUL SYLLABLE NYIM B2BD;B2BD;1102 1174 11B8;B2BD;1102 1174 11B8; # (늽; 늽; 늽; 늽; 늽; ) HANGUL SYLLABLE NYIB B2BE;B2BE;1102 1174 11B9;B2BE;1102 1174 11B9; # (늾; 늾; 늾; 늾; 늾; ) HANGUL SYLLABLE NYIBS B2BF;B2BF;1102 1174 11BA;B2BF;1102 1174 11BA; # (늿; 늿; 늿; 늿; 늿; ) HANGUL SYLLABLE NYIS B2C0;B2C0;1102 1174 11BB;B2C0;1102 1174 11BB; # (닀; 닀; 닀; 닀; 닀; ) HANGUL SYLLABLE NYISS B2C1;B2C1;1102 1174 11BC;B2C1;1102 1174 11BC; # (닁; 닁; 닁; 닁; 닁; ) HANGUL SYLLABLE NYING B2C2;B2C2;1102 1174 11BD;B2C2;1102 1174 11BD; # (닂; 닂; 닂; 닂; 닂; ) HANGUL SYLLABLE NYIJ B2C3;B2C3;1102 1174 11BE;B2C3;1102 1174 11BE; # (닃; 닃; 닃; 닃; 닃; ) HANGUL SYLLABLE NYIC B2C4;B2C4;1102 1174 11BF;B2C4;1102 1174 11BF; # (닄; 닄; 닄; 닄; 닄; ) HANGUL SYLLABLE NYIK B2C5;B2C5;1102 1174 11C0;B2C5;1102 1174 11C0; # (닅; 닅; 닅; 닅; 닅; ) HANGUL SYLLABLE NYIT B2C6;B2C6;1102 1174 11C1;B2C6;1102 1174 11C1; # (닆; 닆; 닆; 닆; 닆; ) HANGUL SYLLABLE NYIP B2C7;B2C7;1102 1174 11C2;B2C7;1102 1174 11C2; # (닇; 닇; 닇; 닇; 닇; ) HANGUL SYLLABLE NYIH B2C8;B2C8;1102 1175;B2C8;1102 1175; # (니; 니; 니; 니; 니; ) HANGUL SYLLABLE NI B2C9;B2C9;1102 1175 11A8;B2C9;1102 1175 11A8; # (닉; 닉; 닉; 닉; 닉; ) HANGUL SYLLABLE NIG B2CA;B2CA;1102 1175 11A9;B2CA;1102 1175 11A9; # (닊; 닊; 닊; 닊; 닊; ) HANGUL SYLLABLE NIGG B2CB;B2CB;1102 1175 11AA;B2CB;1102 1175 11AA; # (닋; 닋; 닋; 닋; 닋; ) HANGUL SYLLABLE NIGS B2CC;B2CC;1102 1175 11AB;B2CC;1102 1175 11AB; # (닌; 닌; 닌; 닌; 닌; ) HANGUL SYLLABLE NIN B2CD;B2CD;1102 1175 11AC;B2CD;1102 1175 11AC; # (닍; 닍; 닍; 닍; 닍; ) HANGUL SYLLABLE NINJ B2CE;B2CE;1102 1175 11AD;B2CE;1102 1175 11AD; # (닎; 닎; 닎; 닎; 닎; ) HANGUL SYLLABLE NINH B2CF;B2CF;1102 1175 11AE;B2CF;1102 1175 11AE; # (닏; 닏; 닏; 닏; 닏; ) HANGUL SYLLABLE NID B2D0;B2D0;1102 1175 11AF;B2D0;1102 1175 11AF; # (닐; 닐; 닐; 닐; 닐; ) HANGUL SYLLABLE NIL B2D1;B2D1;1102 1175 11B0;B2D1;1102 1175 11B0; # (닑; 닑; 닑; 닑; 닑; ) HANGUL SYLLABLE NILG B2D2;B2D2;1102 1175 11B1;B2D2;1102 1175 11B1; # (닒; 닒; 닒; 닒; 닒; ) HANGUL SYLLABLE NILM B2D3;B2D3;1102 1175 11B2;B2D3;1102 1175 11B2; # (닓; 닓; 닓; 닓; 닓; ) HANGUL SYLLABLE NILB B2D4;B2D4;1102 1175 11B3;B2D4;1102 1175 11B3; # (닔; 닔; 닔; 닔; 닔; ) HANGUL SYLLABLE NILS B2D5;B2D5;1102 1175 11B4;B2D5;1102 1175 11B4; # (닕; 닕; 닕; 닕; 닕; ) HANGUL SYLLABLE NILT B2D6;B2D6;1102 1175 11B5;B2D6;1102 1175 11B5; # (닖; 닖; 닖; 닖; 닖; ) HANGUL SYLLABLE NILP B2D7;B2D7;1102 1175 11B6;B2D7;1102 1175 11B6; # (닗; 닗; 닗; 닗; 닗; ) HANGUL SYLLABLE NILH B2D8;B2D8;1102 1175 11B7;B2D8;1102 1175 11B7; # (님; 님; 님; 님; 님; ) HANGUL SYLLABLE NIM B2D9;B2D9;1102 1175 11B8;B2D9;1102 1175 11B8; # (닙; 닙; 닙; 닙; 닙; ) HANGUL SYLLABLE NIB B2DA;B2DA;1102 1175 11B9;B2DA;1102 1175 11B9; # (닚; 닚; 닚; 닚; 닚; ) HANGUL SYLLABLE NIBS B2DB;B2DB;1102 1175 11BA;B2DB;1102 1175 11BA; # (닛; 닛; 닛; 닛; 닛; ) HANGUL SYLLABLE NIS B2DC;B2DC;1102 1175 11BB;B2DC;1102 1175 11BB; # (닜; 닜; 닜; 닜; 닜; ) HANGUL SYLLABLE NISS B2DD;B2DD;1102 1175 11BC;B2DD;1102 1175 11BC; # (닝; 닝; 닝; 닝; 닝; ) HANGUL SYLLABLE NING B2DE;B2DE;1102 1175 11BD;B2DE;1102 1175 11BD; # (닞; 닞; 닞; 닞; 닞; ) HANGUL SYLLABLE NIJ B2DF;B2DF;1102 1175 11BE;B2DF;1102 1175 11BE; # (닟; 닟; 닟; 닟; 닟; ) HANGUL SYLLABLE NIC B2E0;B2E0;1102 1175 11BF;B2E0;1102 1175 11BF; # (닠; 닠; 닠; 닠; 닠; ) HANGUL SYLLABLE NIK B2E1;B2E1;1102 1175 11C0;B2E1;1102 1175 11C0; # (닡; 닡; 닡; 닡; 닡; ) HANGUL SYLLABLE NIT B2E2;B2E2;1102 1175 11C1;B2E2;1102 1175 11C1; # (닢; 닢; 닢; 닢; 닢; ) HANGUL SYLLABLE NIP B2E3;B2E3;1102 1175 11C2;B2E3;1102 1175 11C2; # (닣; 닣; 닣; 닣; 닣; ) HANGUL SYLLABLE NIH B2E4;B2E4;1103 1161;B2E4;1103 1161; # (다; 다; 다; 다; 다; ) HANGUL SYLLABLE DA B2E5;B2E5;1103 1161 11A8;B2E5;1103 1161 11A8; # (닥; 닥; 닥; 닥; 닥; ) HANGUL SYLLABLE DAG B2E6;B2E6;1103 1161 11A9;B2E6;1103 1161 11A9; # (닦; 닦; 닦; 닦; 닦; ) HANGUL SYLLABLE DAGG B2E7;B2E7;1103 1161 11AA;B2E7;1103 1161 11AA; # (닧; 닧; 닧; 닧; 닧; ) HANGUL SYLLABLE DAGS B2E8;B2E8;1103 1161 11AB;B2E8;1103 1161 11AB; # (단; 단; 단; 단; 단; ) HANGUL SYLLABLE DAN B2E9;B2E9;1103 1161 11AC;B2E9;1103 1161 11AC; # (닩; 닩; 닩; 닩; 닩; ) HANGUL SYLLABLE DANJ B2EA;B2EA;1103 1161 11AD;B2EA;1103 1161 11AD; # (닪; 닪; 닪; 닪; 닪; ) HANGUL SYLLABLE DANH B2EB;B2EB;1103 1161 11AE;B2EB;1103 1161 11AE; # (닫; 닫; 닫; 닫; 닫; ) HANGUL SYLLABLE DAD B2EC;B2EC;1103 1161 11AF;B2EC;1103 1161 11AF; # (달; 달; 달; 달; 달; ) HANGUL SYLLABLE DAL B2ED;B2ED;1103 1161 11B0;B2ED;1103 1161 11B0; # (닭; 닭; 닭; 닭; 닭; ) HANGUL SYLLABLE DALG B2EE;B2EE;1103 1161 11B1;B2EE;1103 1161 11B1; # (닮; 닮; 닮; 닮; 닮; ) HANGUL SYLLABLE DALM B2EF;B2EF;1103 1161 11B2;B2EF;1103 1161 11B2; # (닯; 닯; 닯; 닯; 닯; ) HANGUL SYLLABLE DALB B2F0;B2F0;1103 1161 11B3;B2F0;1103 1161 11B3; # (닰; 닰; 닰; 닰; 닰; ) HANGUL SYLLABLE DALS B2F1;B2F1;1103 1161 11B4;B2F1;1103 1161 11B4; # (닱; 닱; 닱; 닱; 닱; ) HANGUL SYLLABLE DALT B2F2;B2F2;1103 1161 11B5;B2F2;1103 1161 11B5; # (닲; 닲; 닲; 닲; 닲; ) HANGUL SYLLABLE DALP B2F3;B2F3;1103 1161 11B6;B2F3;1103 1161 11B6; # (닳; 닳; 닳; 닳; 닳; ) HANGUL SYLLABLE DALH B2F4;B2F4;1103 1161 11B7;B2F4;1103 1161 11B7; # (담; 담; 담; 담; 담; ) HANGUL SYLLABLE DAM B2F5;B2F5;1103 1161 11B8;B2F5;1103 1161 11B8; # (답; 답; 답; 답; 답; ) HANGUL SYLLABLE DAB B2F6;B2F6;1103 1161 11B9;B2F6;1103 1161 11B9; # (닶; 닶; 닶; 닶; 닶; ) HANGUL SYLLABLE DABS B2F7;B2F7;1103 1161 11BA;B2F7;1103 1161 11BA; # (닷; 닷; 닷; 닷; 닷; ) HANGUL SYLLABLE DAS B2F8;B2F8;1103 1161 11BB;B2F8;1103 1161 11BB; # (닸; 닸; 닸; 닸; 닸; ) HANGUL SYLLABLE DASS B2F9;B2F9;1103 1161 11BC;B2F9;1103 1161 11BC; # (당; 당; 당; 당; 당; ) HANGUL SYLLABLE DANG B2FA;B2FA;1103 1161 11BD;B2FA;1103 1161 11BD; # (닺; 닺; 닺; 닺; 닺; ) HANGUL SYLLABLE DAJ B2FB;B2FB;1103 1161 11BE;B2FB;1103 1161 11BE; # (닻; 닻; 닻; 닻; 닻; ) HANGUL SYLLABLE DAC B2FC;B2FC;1103 1161 11BF;B2FC;1103 1161 11BF; # (닼; 닼; 닼; 닼; 닼; ) HANGUL SYLLABLE DAK B2FD;B2FD;1103 1161 11C0;B2FD;1103 1161 11C0; # (닽; 닽; 닽; 닽; 닽; ) HANGUL SYLLABLE DAT B2FE;B2FE;1103 1161 11C1;B2FE;1103 1161 11C1; # (닾; 닾; 닾; 닾; 닾; ) HANGUL SYLLABLE DAP B2FF;B2FF;1103 1161 11C2;B2FF;1103 1161 11C2; # (닿; 닿; 닿; 닿; 닿; ) HANGUL SYLLABLE DAH B300;B300;1103 1162;B300;1103 1162; # (대; 대; 대; 대; 대; ) HANGUL SYLLABLE DAE B301;B301;1103 1162 11A8;B301;1103 1162 11A8; # (댁; 댁; 댁; 댁; 댁; ) HANGUL SYLLABLE DAEG B302;B302;1103 1162 11A9;B302;1103 1162 11A9; # (댂; 댂; 댂; 댂; 댂; ) HANGUL SYLLABLE DAEGG B303;B303;1103 1162 11AA;B303;1103 1162 11AA; # (댃; 댃; 댃; 댃; 댃; ) HANGUL SYLLABLE DAEGS B304;B304;1103 1162 11AB;B304;1103 1162 11AB; # (댄; 댄; 댄; 댄; 댄; ) HANGUL SYLLABLE DAEN B305;B305;1103 1162 11AC;B305;1103 1162 11AC; # (댅; 댅; 댅; 댅; 댅; ) HANGUL SYLLABLE DAENJ B306;B306;1103 1162 11AD;B306;1103 1162 11AD; # (댆; 댆; 댆; 댆; 댆; ) HANGUL SYLLABLE DAENH B307;B307;1103 1162 11AE;B307;1103 1162 11AE; # (댇; 댇; 댇; 댇; 댇; ) HANGUL SYLLABLE DAED B308;B308;1103 1162 11AF;B308;1103 1162 11AF; # (댈; 댈; 댈; 댈; 댈; ) HANGUL SYLLABLE DAEL B309;B309;1103 1162 11B0;B309;1103 1162 11B0; # (댉; 댉; 댉; 댉; 댉; ) HANGUL SYLLABLE DAELG B30A;B30A;1103 1162 11B1;B30A;1103 1162 11B1; # (댊; 댊; 댊; 댊; 댊; ) HANGUL SYLLABLE DAELM B30B;B30B;1103 1162 11B2;B30B;1103 1162 11B2; # (댋; 댋; 댋; 댋; 댋; ) HANGUL SYLLABLE DAELB B30C;B30C;1103 1162 11B3;B30C;1103 1162 11B3; # (댌; 댌; 댌; 댌; 댌; ) HANGUL SYLLABLE DAELS B30D;B30D;1103 1162 11B4;B30D;1103 1162 11B4; # (댍; 댍; 댍; 댍; 댍; ) HANGUL SYLLABLE DAELT B30E;B30E;1103 1162 11B5;B30E;1103 1162 11B5; # (댎; 댎; 댎; 댎; 댎; ) HANGUL SYLLABLE DAELP B30F;B30F;1103 1162 11B6;B30F;1103 1162 11B6; # (댏; 댏; 댏; 댏; 댏; ) HANGUL SYLLABLE DAELH B310;B310;1103 1162 11B7;B310;1103 1162 11B7; # (댐; 댐; 댐; 댐; 댐; ) HANGUL SYLLABLE DAEM B311;B311;1103 1162 11B8;B311;1103 1162 11B8; # (댑; 댑; 댑; 댑; 댑; ) HANGUL SYLLABLE DAEB B312;B312;1103 1162 11B9;B312;1103 1162 11B9; # (댒; 댒; 댒; 댒; 댒; ) HANGUL SYLLABLE DAEBS B313;B313;1103 1162 11BA;B313;1103 1162 11BA; # (댓; 댓; 댓; 댓; 댓; ) HANGUL SYLLABLE DAES B314;B314;1103 1162 11BB;B314;1103 1162 11BB; # (댔; 댔; 댔; 댔; 댔; ) HANGUL SYLLABLE DAESS B315;B315;1103 1162 11BC;B315;1103 1162 11BC; # (댕; 댕; 댕; 댕; 댕; ) HANGUL SYLLABLE DAENG B316;B316;1103 1162 11BD;B316;1103 1162 11BD; # (댖; 댖; 댖; 댖; 댖; ) HANGUL SYLLABLE DAEJ B317;B317;1103 1162 11BE;B317;1103 1162 11BE; # (댗; 댗; 댗; 댗; 댗; ) HANGUL SYLLABLE DAEC B318;B318;1103 1162 11BF;B318;1103 1162 11BF; # (댘; 댘; 댘; 댘; 댘; ) HANGUL SYLLABLE DAEK B319;B319;1103 1162 11C0;B319;1103 1162 11C0; # (댙; 댙; 댙; 댙; 댙; ) HANGUL SYLLABLE DAET B31A;B31A;1103 1162 11C1;B31A;1103 1162 11C1; # (댚; 댚; 댚; 댚; 댚; ) HANGUL SYLLABLE DAEP B31B;B31B;1103 1162 11C2;B31B;1103 1162 11C2; # (댛; 댛; 댛; 댛; 댛; ) HANGUL SYLLABLE DAEH B31C;B31C;1103 1163;B31C;1103 1163; # (댜; 댜; 댜; 댜; 댜; ) HANGUL SYLLABLE DYA B31D;B31D;1103 1163 11A8;B31D;1103 1163 11A8; # (댝; 댝; 댝; 댝; 댝; ) HANGUL SYLLABLE DYAG B31E;B31E;1103 1163 11A9;B31E;1103 1163 11A9; # (댞; 댞; 댞; 댞; 댞; ) HANGUL SYLLABLE DYAGG B31F;B31F;1103 1163 11AA;B31F;1103 1163 11AA; # (댟; 댟; 댟; 댟; 댟; ) HANGUL SYLLABLE DYAGS B320;B320;1103 1163 11AB;B320;1103 1163 11AB; # (댠; 댠; 댠; 댠; 댠; ) HANGUL SYLLABLE DYAN B321;B321;1103 1163 11AC;B321;1103 1163 11AC; # (댡; 댡; 댡; 댡; 댡; ) HANGUL SYLLABLE DYANJ B322;B322;1103 1163 11AD;B322;1103 1163 11AD; # (댢; 댢; 댢; 댢; 댢; ) HANGUL SYLLABLE DYANH B323;B323;1103 1163 11AE;B323;1103 1163 11AE; # (댣; 댣; 댣; 댣; 댣; ) HANGUL SYLLABLE DYAD B324;B324;1103 1163 11AF;B324;1103 1163 11AF; # (댤; 댤; 댤; 댤; 댤; ) HANGUL SYLLABLE DYAL B325;B325;1103 1163 11B0;B325;1103 1163 11B0; # (댥; 댥; 댥; 댥; 댥; ) HANGUL SYLLABLE DYALG B326;B326;1103 1163 11B1;B326;1103 1163 11B1; # (댦; 댦; 댦; 댦; 댦; ) HANGUL SYLLABLE DYALM B327;B327;1103 1163 11B2;B327;1103 1163 11B2; # (댧; 댧; 댧; 댧; 댧; ) HANGUL SYLLABLE DYALB B328;B328;1103 1163 11B3;B328;1103 1163 11B3; # (댨; 댨; 댨; 댨; 댨; ) HANGUL SYLLABLE DYALS B329;B329;1103 1163 11B4;B329;1103 1163 11B4; # (댩; 댩; 댩; 댩; 댩; ) HANGUL SYLLABLE DYALT B32A;B32A;1103 1163 11B5;B32A;1103 1163 11B5; # (댪; 댪; 댪; 댪; 댪; ) HANGUL SYLLABLE DYALP B32B;B32B;1103 1163 11B6;B32B;1103 1163 11B6; # (댫; 댫; 댫; 댫; 댫; ) HANGUL SYLLABLE DYALH B32C;B32C;1103 1163 11B7;B32C;1103 1163 11B7; # (댬; 댬; 댬; 댬; 댬; ) HANGUL SYLLABLE DYAM B32D;B32D;1103 1163 11B8;B32D;1103 1163 11B8; # (댭; 댭; 댭; 댭; 댭; ) HANGUL SYLLABLE DYAB B32E;B32E;1103 1163 11B9;B32E;1103 1163 11B9; # (댮; 댮; 댮; 댮; 댮; ) HANGUL SYLLABLE DYABS B32F;B32F;1103 1163 11BA;B32F;1103 1163 11BA; # (댯; 댯; 댯; 댯; 댯; ) HANGUL SYLLABLE DYAS B330;B330;1103 1163 11BB;B330;1103 1163 11BB; # (댰; 댰; 댰; 댰; 댰; ) HANGUL SYLLABLE DYASS B331;B331;1103 1163 11BC;B331;1103 1163 11BC; # (댱; 댱; 댱; 댱; 댱; ) HANGUL SYLLABLE DYANG B332;B332;1103 1163 11BD;B332;1103 1163 11BD; # (댲; 댲; 댲; 댲; 댲; ) HANGUL SYLLABLE DYAJ B333;B333;1103 1163 11BE;B333;1103 1163 11BE; # (댳; 댳; 댳; 댳; 댳; ) HANGUL SYLLABLE DYAC B334;B334;1103 1163 11BF;B334;1103 1163 11BF; # (댴; 댴; 댴; 댴; 댴; ) HANGUL SYLLABLE DYAK B335;B335;1103 1163 11C0;B335;1103 1163 11C0; # (댵; 댵; 댵; 댵; 댵; ) HANGUL SYLLABLE DYAT B336;B336;1103 1163 11C1;B336;1103 1163 11C1; # (댶; 댶; 댶; 댶; 댶; ) HANGUL SYLLABLE DYAP B337;B337;1103 1163 11C2;B337;1103 1163 11C2; # (댷; 댷; 댷; 댷; 댷; ) HANGUL SYLLABLE DYAH B338;B338;1103 1164;B338;1103 1164; # (댸; 댸; 댸; 댸; 댸; ) HANGUL SYLLABLE DYAE B339;B339;1103 1164 11A8;B339;1103 1164 11A8; # (댹; 댹; 댹; 댹; 댹; ) HANGUL SYLLABLE DYAEG B33A;B33A;1103 1164 11A9;B33A;1103 1164 11A9; # (댺; 댺; 댺; 댺; 댺; ) HANGUL SYLLABLE DYAEGG B33B;B33B;1103 1164 11AA;B33B;1103 1164 11AA; # (댻; 댻; 댻; 댻; 댻; ) HANGUL SYLLABLE DYAEGS B33C;B33C;1103 1164 11AB;B33C;1103 1164 11AB; # (댼; 댼; 댼; 댼; 댼; ) HANGUL SYLLABLE DYAEN B33D;B33D;1103 1164 11AC;B33D;1103 1164 11AC; # (댽; 댽; 댽; 댽; 댽; ) HANGUL SYLLABLE DYAENJ B33E;B33E;1103 1164 11AD;B33E;1103 1164 11AD; # (댾; 댾; 댾; 댾; 댾; ) HANGUL SYLLABLE DYAENH B33F;B33F;1103 1164 11AE;B33F;1103 1164 11AE; # (댿; 댿; 댿; 댿; 댿; ) HANGUL SYLLABLE DYAED B340;B340;1103 1164 11AF;B340;1103 1164 11AF; # (덀; 덀; 덀; 덀; 덀; ) HANGUL SYLLABLE DYAEL B341;B341;1103 1164 11B0;B341;1103 1164 11B0; # (덁; 덁; 덁; 덁; 덁; ) HANGUL SYLLABLE DYAELG B342;B342;1103 1164 11B1;B342;1103 1164 11B1; # (덂; 덂; 덂; 덂; 덂; ) HANGUL SYLLABLE DYAELM B343;B343;1103 1164 11B2;B343;1103 1164 11B2; # (덃; 덃; 덃; 덃; 덃; ) HANGUL SYLLABLE DYAELB B344;B344;1103 1164 11B3;B344;1103 1164 11B3; # (덄; 덄; 덄; 덄; 덄; ) HANGUL SYLLABLE DYAELS B345;B345;1103 1164 11B4;B345;1103 1164 11B4; # (덅; 덅; 덅; 덅; 덅; ) HANGUL SYLLABLE DYAELT B346;B346;1103 1164 11B5;B346;1103 1164 11B5; # (덆; 덆; 덆; 덆; 덆; ) HANGUL SYLLABLE DYAELP B347;B347;1103 1164 11B6;B347;1103 1164 11B6; # (덇; 덇; 덇; 덇; 덇; ) HANGUL SYLLABLE DYAELH B348;B348;1103 1164 11B7;B348;1103 1164 11B7; # (덈; 덈; 덈; 덈; 덈; ) HANGUL SYLLABLE DYAEM B349;B349;1103 1164 11B8;B349;1103 1164 11B8; # (덉; 덉; 덉; 덉; 덉; ) HANGUL SYLLABLE DYAEB B34A;B34A;1103 1164 11B9;B34A;1103 1164 11B9; # (덊; 덊; 덊; 덊; 덊; ) HANGUL SYLLABLE DYAEBS B34B;B34B;1103 1164 11BA;B34B;1103 1164 11BA; # (덋; 덋; 덋; 덋; 덋; ) HANGUL SYLLABLE DYAES B34C;B34C;1103 1164 11BB;B34C;1103 1164 11BB; # (덌; 덌; 덌; 덌; 덌; ) HANGUL SYLLABLE DYAESS B34D;B34D;1103 1164 11BC;B34D;1103 1164 11BC; # (덍; 덍; 덍; 덍; 덍; ) HANGUL SYLLABLE DYAENG B34E;B34E;1103 1164 11BD;B34E;1103 1164 11BD; # (덎; 덎; 덎; 덎; 덎; ) HANGUL SYLLABLE DYAEJ B34F;B34F;1103 1164 11BE;B34F;1103 1164 11BE; # (덏; 덏; 덏; 덏; 덏; ) HANGUL SYLLABLE DYAEC B350;B350;1103 1164 11BF;B350;1103 1164 11BF; # (덐; 덐; 덐; 덐; 덐; ) HANGUL SYLLABLE DYAEK B351;B351;1103 1164 11C0;B351;1103 1164 11C0; # (덑; 덑; 덑; 덑; 덑; ) HANGUL SYLLABLE DYAET B352;B352;1103 1164 11C1;B352;1103 1164 11C1; # (덒; 덒; 덒; 덒; 덒; ) HANGUL SYLLABLE DYAEP B353;B353;1103 1164 11C2;B353;1103 1164 11C2; # (덓; 덓; 덓; 덓; 덓; ) HANGUL SYLLABLE DYAEH B354;B354;1103 1165;B354;1103 1165; # (더; 더; 더; 더; 더; ) HANGUL SYLLABLE DEO B355;B355;1103 1165 11A8;B355;1103 1165 11A8; # (덕; 덕; 덕; 덕; 덕; ) HANGUL SYLLABLE DEOG B356;B356;1103 1165 11A9;B356;1103 1165 11A9; # (덖; 덖; 덖; 덖; 덖; ) HANGUL SYLLABLE DEOGG B357;B357;1103 1165 11AA;B357;1103 1165 11AA; # (덗; 덗; 덗; 덗; 덗; ) HANGUL SYLLABLE DEOGS B358;B358;1103 1165 11AB;B358;1103 1165 11AB; # (던; 던; 던; 던; 던; ) HANGUL SYLLABLE DEON B359;B359;1103 1165 11AC;B359;1103 1165 11AC; # (덙; 덙; 덙; 덙; 덙; ) HANGUL SYLLABLE DEONJ B35A;B35A;1103 1165 11AD;B35A;1103 1165 11AD; # (덚; 덚; 덚; 덚; 덚; ) HANGUL SYLLABLE DEONH B35B;B35B;1103 1165 11AE;B35B;1103 1165 11AE; # (덛; 덛; 덛; 덛; 덛; ) HANGUL SYLLABLE DEOD B35C;B35C;1103 1165 11AF;B35C;1103 1165 11AF; # (덜; 덜; 덜; 덜; 덜; ) HANGUL SYLLABLE DEOL B35D;B35D;1103 1165 11B0;B35D;1103 1165 11B0; # (덝; 덝; 덝; 덝; 덝; ) HANGUL SYLLABLE DEOLG B35E;B35E;1103 1165 11B1;B35E;1103 1165 11B1; # (덞; 덞; 덞; 덞; 덞; ) HANGUL SYLLABLE DEOLM B35F;B35F;1103 1165 11B2;B35F;1103 1165 11B2; # (덟; 덟; 덟; 덟; 덟; ) HANGUL SYLLABLE DEOLB B360;B360;1103 1165 11B3;B360;1103 1165 11B3; # (덠; 덠; 덠; 덠; 덠; ) HANGUL SYLLABLE DEOLS B361;B361;1103 1165 11B4;B361;1103 1165 11B4; # (덡; 덡; 덡; 덡; 덡; ) HANGUL SYLLABLE DEOLT B362;B362;1103 1165 11B5;B362;1103 1165 11B5; # (덢; 덢; 덢; 덢; 덢; ) HANGUL SYLLABLE DEOLP B363;B363;1103 1165 11B6;B363;1103 1165 11B6; # (덣; 덣; 덣; 덣; 덣; ) HANGUL SYLLABLE DEOLH B364;B364;1103 1165 11B7;B364;1103 1165 11B7; # (덤; 덤; 덤; 덤; 덤; ) HANGUL SYLLABLE DEOM B365;B365;1103 1165 11B8;B365;1103 1165 11B8; # (덥; 덥; 덥; 덥; 덥; ) HANGUL SYLLABLE DEOB B366;B366;1103 1165 11B9;B366;1103 1165 11B9; # (덦; 덦; 덦; 덦; 덦; ) HANGUL SYLLABLE DEOBS B367;B367;1103 1165 11BA;B367;1103 1165 11BA; # (덧; 덧; 덧; 덧; 덧; ) HANGUL SYLLABLE DEOS B368;B368;1103 1165 11BB;B368;1103 1165 11BB; # (덨; 덨; 덨; 덨; 덨; ) HANGUL SYLLABLE DEOSS B369;B369;1103 1165 11BC;B369;1103 1165 11BC; # (덩; 덩; 덩; 덩; 덩; ) HANGUL SYLLABLE DEONG B36A;B36A;1103 1165 11BD;B36A;1103 1165 11BD; # (덪; 덪; 덪; 덪; 덪; ) HANGUL SYLLABLE DEOJ B36B;B36B;1103 1165 11BE;B36B;1103 1165 11BE; # (덫; 덫; 덫; 덫; 덫; ) HANGUL SYLLABLE DEOC B36C;B36C;1103 1165 11BF;B36C;1103 1165 11BF; # (덬; 덬; 덬; 덬; 덬; ) HANGUL SYLLABLE DEOK B36D;B36D;1103 1165 11C0;B36D;1103 1165 11C0; # (덭; 덭; 덭; 덭; 덭; ) HANGUL SYLLABLE DEOT B36E;B36E;1103 1165 11C1;B36E;1103 1165 11C1; # (덮; 덮; 덮; 덮; 덮; ) HANGUL SYLLABLE DEOP B36F;B36F;1103 1165 11C2;B36F;1103 1165 11C2; # (덯; 덯; 덯; 덯; 덯; ) HANGUL SYLLABLE DEOH B370;B370;1103 1166;B370;1103 1166; # (데; 데; 데; 데; 데; ) HANGUL SYLLABLE DE B371;B371;1103 1166 11A8;B371;1103 1166 11A8; # (덱; 덱; 덱; 덱; 덱; ) HANGUL SYLLABLE DEG B372;B372;1103 1166 11A9;B372;1103 1166 11A9; # (덲; 덲; 덲; 덲; 덲; ) HANGUL SYLLABLE DEGG B373;B373;1103 1166 11AA;B373;1103 1166 11AA; # (덳; 덳; 덳; 덳; 덳; ) HANGUL SYLLABLE DEGS B374;B374;1103 1166 11AB;B374;1103 1166 11AB; # (덴; 덴; 덴; 덴; 덴; ) HANGUL SYLLABLE DEN B375;B375;1103 1166 11AC;B375;1103 1166 11AC; # (덵; 덵; 덵; 덵; 덵; ) HANGUL SYLLABLE DENJ B376;B376;1103 1166 11AD;B376;1103 1166 11AD; # (덶; 덶; 덶; 덶; 덶; ) HANGUL SYLLABLE DENH B377;B377;1103 1166 11AE;B377;1103 1166 11AE; # (덷; 덷; 덷; 덷; 덷; ) HANGUL SYLLABLE DED B378;B378;1103 1166 11AF;B378;1103 1166 11AF; # (델; 델; 델; 델; 델; ) HANGUL SYLLABLE DEL B379;B379;1103 1166 11B0;B379;1103 1166 11B0; # (덹; 덹; 덹; 덹; 덹; ) HANGUL SYLLABLE DELG B37A;B37A;1103 1166 11B1;B37A;1103 1166 11B1; # (덺; 덺; 덺; 덺; 덺; ) HANGUL SYLLABLE DELM B37B;B37B;1103 1166 11B2;B37B;1103 1166 11B2; # (덻; 덻; 덻; 덻; 덻; ) HANGUL SYLLABLE DELB B37C;B37C;1103 1166 11B3;B37C;1103 1166 11B3; # (덼; 덼; 덼; 덼; 덼; ) HANGUL SYLLABLE DELS B37D;B37D;1103 1166 11B4;B37D;1103 1166 11B4; # (덽; 덽; 덽; 덽; 덽; ) HANGUL SYLLABLE DELT B37E;B37E;1103 1166 11B5;B37E;1103 1166 11B5; # (덾; 덾; 덾; 덾; 덾; ) HANGUL SYLLABLE DELP B37F;B37F;1103 1166 11B6;B37F;1103 1166 11B6; # (덿; 덿; 덿; 덿; 덿; ) HANGUL SYLLABLE DELH B380;B380;1103 1166 11B7;B380;1103 1166 11B7; # (뎀; 뎀; 뎀; 뎀; 뎀; ) HANGUL SYLLABLE DEM B381;B381;1103 1166 11B8;B381;1103 1166 11B8; # (뎁; 뎁; 뎁; 뎁; 뎁; ) HANGUL SYLLABLE DEB B382;B382;1103 1166 11B9;B382;1103 1166 11B9; # (뎂; 뎂; 뎂; 뎂; 뎂; ) HANGUL SYLLABLE DEBS B383;B383;1103 1166 11BA;B383;1103 1166 11BA; # (뎃; 뎃; 뎃; 뎃; 뎃; ) HANGUL SYLLABLE DES B384;B384;1103 1166 11BB;B384;1103 1166 11BB; # (뎄; 뎄; 뎄; 뎄; 뎄; ) HANGUL SYLLABLE DESS B385;B385;1103 1166 11BC;B385;1103 1166 11BC; # (뎅; 뎅; 뎅; 뎅; 뎅; ) HANGUL SYLLABLE DENG B386;B386;1103 1166 11BD;B386;1103 1166 11BD; # (뎆; 뎆; 뎆; 뎆; 뎆; ) HANGUL SYLLABLE DEJ B387;B387;1103 1166 11BE;B387;1103 1166 11BE; # (뎇; 뎇; 뎇; 뎇; 뎇; ) HANGUL SYLLABLE DEC B388;B388;1103 1166 11BF;B388;1103 1166 11BF; # (뎈; 뎈; 뎈; 뎈; 뎈; ) HANGUL SYLLABLE DEK B389;B389;1103 1166 11C0;B389;1103 1166 11C0; # (뎉; 뎉; 뎉; 뎉; 뎉; ) HANGUL SYLLABLE DET B38A;B38A;1103 1166 11C1;B38A;1103 1166 11C1; # (뎊; 뎊; 뎊; 뎊; 뎊; ) HANGUL SYLLABLE DEP B38B;B38B;1103 1166 11C2;B38B;1103 1166 11C2; # (뎋; 뎋; 뎋; 뎋; 뎋; ) HANGUL SYLLABLE DEH B38C;B38C;1103 1167;B38C;1103 1167; # (뎌; 뎌; 뎌; 뎌; 뎌; ) HANGUL SYLLABLE DYEO B38D;B38D;1103 1167 11A8;B38D;1103 1167 11A8; # (뎍; 뎍; 뎍; 뎍; 뎍; ) HANGUL SYLLABLE DYEOG B38E;B38E;1103 1167 11A9;B38E;1103 1167 11A9; # (뎎; 뎎; 뎎; 뎎; 뎎; ) HANGUL SYLLABLE DYEOGG B38F;B38F;1103 1167 11AA;B38F;1103 1167 11AA; # (뎏; 뎏; 뎏; 뎏; 뎏; ) HANGUL SYLLABLE DYEOGS B390;B390;1103 1167 11AB;B390;1103 1167 11AB; # (뎐; 뎐; 뎐; 뎐; 뎐; ) HANGUL SYLLABLE DYEON B391;B391;1103 1167 11AC;B391;1103 1167 11AC; # (뎑; 뎑; 뎑; 뎑; 뎑; ) HANGUL SYLLABLE DYEONJ B392;B392;1103 1167 11AD;B392;1103 1167 11AD; # (뎒; 뎒; 뎒; 뎒; 뎒; ) HANGUL SYLLABLE DYEONH B393;B393;1103 1167 11AE;B393;1103 1167 11AE; # (뎓; 뎓; 뎓; 뎓; 뎓; ) HANGUL SYLLABLE DYEOD B394;B394;1103 1167 11AF;B394;1103 1167 11AF; # (뎔; 뎔; 뎔; 뎔; 뎔; ) HANGUL SYLLABLE DYEOL B395;B395;1103 1167 11B0;B395;1103 1167 11B0; # (뎕; 뎕; 뎕; 뎕; 뎕; ) HANGUL SYLLABLE DYEOLG B396;B396;1103 1167 11B1;B396;1103 1167 11B1; # (뎖; 뎖; 뎖; 뎖; 뎖; ) HANGUL SYLLABLE DYEOLM B397;B397;1103 1167 11B2;B397;1103 1167 11B2; # (뎗; 뎗; 뎗; 뎗; 뎗; ) HANGUL SYLLABLE DYEOLB B398;B398;1103 1167 11B3;B398;1103 1167 11B3; # (뎘; 뎘; 뎘; 뎘; 뎘; ) HANGUL SYLLABLE DYEOLS B399;B399;1103 1167 11B4;B399;1103 1167 11B4; # (뎙; 뎙; 뎙; 뎙; 뎙; ) HANGUL SYLLABLE DYEOLT B39A;B39A;1103 1167 11B5;B39A;1103 1167 11B5; # (뎚; 뎚; 뎚; 뎚; 뎚; ) HANGUL SYLLABLE DYEOLP B39B;B39B;1103 1167 11B6;B39B;1103 1167 11B6; # (뎛; 뎛; 뎛; 뎛; 뎛; ) HANGUL SYLLABLE DYEOLH B39C;B39C;1103 1167 11B7;B39C;1103 1167 11B7; # (뎜; 뎜; 뎜; 뎜; 뎜; ) HANGUL SYLLABLE DYEOM B39D;B39D;1103 1167 11B8;B39D;1103 1167 11B8; # (뎝; 뎝; 뎝; 뎝; 뎝; ) HANGUL SYLLABLE DYEOB B39E;B39E;1103 1167 11B9;B39E;1103 1167 11B9; # (뎞; 뎞; 뎞; 뎞; 뎞; ) HANGUL SYLLABLE DYEOBS B39F;B39F;1103 1167 11BA;B39F;1103 1167 11BA; # (뎟; 뎟; 뎟; 뎟; 뎟; ) HANGUL SYLLABLE DYEOS B3A0;B3A0;1103 1167 11BB;B3A0;1103 1167 11BB; # (뎠; 뎠; 뎠; 뎠; 뎠; ) HANGUL SYLLABLE DYEOSS B3A1;B3A1;1103 1167 11BC;B3A1;1103 1167 11BC; # (뎡; 뎡; 뎡; 뎡; 뎡; ) HANGUL SYLLABLE DYEONG B3A2;B3A2;1103 1167 11BD;B3A2;1103 1167 11BD; # (뎢; 뎢; 뎢; 뎢; 뎢; ) HANGUL SYLLABLE DYEOJ B3A3;B3A3;1103 1167 11BE;B3A3;1103 1167 11BE; # (뎣; 뎣; 뎣; 뎣; 뎣; ) HANGUL SYLLABLE DYEOC B3A4;B3A4;1103 1167 11BF;B3A4;1103 1167 11BF; # (뎤; 뎤; 뎤; 뎤; 뎤; ) HANGUL SYLLABLE DYEOK B3A5;B3A5;1103 1167 11C0;B3A5;1103 1167 11C0; # (뎥; 뎥; 뎥; 뎥; 뎥; ) HANGUL SYLLABLE DYEOT B3A6;B3A6;1103 1167 11C1;B3A6;1103 1167 11C1; # (뎦; 뎦; 뎦; 뎦; 뎦; ) HANGUL SYLLABLE DYEOP B3A7;B3A7;1103 1167 11C2;B3A7;1103 1167 11C2; # (뎧; 뎧; 뎧; 뎧; 뎧; ) HANGUL SYLLABLE DYEOH B3A8;B3A8;1103 1168;B3A8;1103 1168; # (뎨; 뎨; 뎨; 뎨; 뎨; ) HANGUL SYLLABLE DYE B3A9;B3A9;1103 1168 11A8;B3A9;1103 1168 11A8; # (뎩; 뎩; 뎩; 뎩; 뎩; ) HANGUL SYLLABLE DYEG B3AA;B3AA;1103 1168 11A9;B3AA;1103 1168 11A9; # (뎪; 뎪; 뎪; 뎪; 뎪; ) HANGUL SYLLABLE DYEGG B3AB;B3AB;1103 1168 11AA;B3AB;1103 1168 11AA; # (뎫; 뎫; 뎫; 뎫; 뎫; ) HANGUL SYLLABLE DYEGS B3AC;B3AC;1103 1168 11AB;B3AC;1103 1168 11AB; # (뎬; 뎬; 뎬; 뎬; 뎬; ) HANGUL SYLLABLE DYEN B3AD;B3AD;1103 1168 11AC;B3AD;1103 1168 11AC; # (뎭; 뎭; 뎭; 뎭; 뎭; ) HANGUL SYLLABLE DYENJ B3AE;B3AE;1103 1168 11AD;B3AE;1103 1168 11AD; # (뎮; 뎮; 뎮; 뎮; 뎮; ) HANGUL SYLLABLE DYENH B3AF;B3AF;1103 1168 11AE;B3AF;1103 1168 11AE; # (뎯; 뎯; 뎯; 뎯; 뎯; ) HANGUL SYLLABLE DYED B3B0;B3B0;1103 1168 11AF;B3B0;1103 1168 11AF; # (뎰; 뎰; 뎰; 뎰; 뎰; ) HANGUL SYLLABLE DYEL B3B1;B3B1;1103 1168 11B0;B3B1;1103 1168 11B0; # (뎱; 뎱; 뎱; 뎱; 뎱; ) HANGUL SYLLABLE DYELG B3B2;B3B2;1103 1168 11B1;B3B2;1103 1168 11B1; # (뎲; 뎲; 뎲; 뎲; 뎲; ) HANGUL SYLLABLE DYELM B3B3;B3B3;1103 1168 11B2;B3B3;1103 1168 11B2; # (뎳; 뎳; 뎳; 뎳; 뎳; ) HANGUL SYLLABLE DYELB B3B4;B3B4;1103 1168 11B3;B3B4;1103 1168 11B3; # (뎴; 뎴; 뎴; 뎴; 뎴; ) HANGUL SYLLABLE DYELS B3B5;B3B5;1103 1168 11B4;B3B5;1103 1168 11B4; # (뎵; 뎵; 뎵; 뎵; 뎵; ) HANGUL SYLLABLE DYELT B3B6;B3B6;1103 1168 11B5;B3B6;1103 1168 11B5; # (뎶; 뎶; 뎶; 뎶; 뎶; ) HANGUL SYLLABLE DYELP B3B7;B3B7;1103 1168 11B6;B3B7;1103 1168 11B6; # (뎷; 뎷; 뎷; 뎷; 뎷; ) HANGUL SYLLABLE DYELH B3B8;B3B8;1103 1168 11B7;B3B8;1103 1168 11B7; # (뎸; 뎸; 뎸; 뎸; 뎸; ) HANGUL SYLLABLE DYEM B3B9;B3B9;1103 1168 11B8;B3B9;1103 1168 11B8; # (뎹; 뎹; 뎹; 뎹; 뎹; ) HANGUL SYLLABLE DYEB B3BA;B3BA;1103 1168 11B9;B3BA;1103 1168 11B9; # (뎺; 뎺; 뎺; 뎺; 뎺; ) HANGUL SYLLABLE DYEBS B3BB;B3BB;1103 1168 11BA;B3BB;1103 1168 11BA; # (뎻; 뎻; 뎻; 뎻; 뎻; ) HANGUL SYLLABLE DYES B3BC;B3BC;1103 1168 11BB;B3BC;1103 1168 11BB; # (뎼; 뎼; 뎼; 뎼; 뎼; ) HANGUL SYLLABLE DYESS B3BD;B3BD;1103 1168 11BC;B3BD;1103 1168 11BC; # (뎽; 뎽; 뎽; 뎽; 뎽; ) HANGUL SYLLABLE DYENG B3BE;B3BE;1103 1168 11BD;B3BE;1103 1168 11BD; # (뎾; 뎾; 뎾; 뎾; 뎾; ) HANGUL SYLLABLE DYEJ B3BF;B3BF;1103 1168 11BE;B3BF;1103 1168 11BE; # (뎿; 뎿; 뎿; 뎿; 뎿; ) HANGUL SYLLABLE DYEC B3C0;B3C0;1103 1168 11BF;B3C0;1103 1168 11BF; # (돀; 돀; 돀; 돀; 돀; ) HANGUL SYLLABLE DYEK B3C1;B3C1;1103 1168 11C0;B3C1;1103 1168 11C0; # (돁; 돁; 돁; 돁; 돁; ) HANGUL SYLLABLE DYET B3C2;B3C2;1103 1168 11C1;B3C2;1103 1168 11C1; # (돂; 돂; 돂; 돂; 돂; ) HANGUL SYLLABLE DYEP B3C3;B3C3;1103 1168 11C2;B3C3;1103 1168 11C2; # (돃; 돃; 돃; 돃; 돃; ) HANGUL SYLLABLE DYEH B3C4;B3C4;1103 1169;B3C4;1103 1169; # (도; 도; 도; 도; 도; ) HANGUL SYLLABLE DO B3C5;B3C5;1103 1169 11A8;B3C5;1103 1169 11A8; # (독; 독; 독; 독; 독; ) HANGUL SYLLABLE DOG B3C6;B3C6;1103 1169 11A9;B3C6;1103 1169 11A9; # (돆; 돆; 돆; 돆; 돆; ) HANGUL SYLLABLE DOGG B3C7;B3C7;1103 1169 11AA;B3C7;1103 1169 11AA; # (돇; 돇; 돇; 돇; 돇; ) HANGUL SYLLABLE DOGS B3C8;B3C8;1103 1169 11AB;B3C8;1103 1169 11AB; # (돈; 돈; 돈; 돈; 돈; ) HANGUL SYLLABLE DON B3C9;B3C9;1103 1169 11AC;B3C9;1103 1169 11AC; # (돉; 돉; 돉; 돉; 돉; ) HANGUL SYLLABLE DONJ B3CA;B3CA;1103 1169 11AD;B3CA;1103 1169 11AD; # (돊; 돊; 돊; 돊; 돊; ) HANGUL SYLLABLE DONH B3CB;B3CB;1103 1169 11AE;B3CB;1103 1169 11AE; # (돋; 돋; 돋; 돋; 돋; ) HANGUL SYLLABLE DOD B3CC;B3CC;1103 1169 11AF;B3CC;1103 1169 11AF; # (돌; 돌; 돌; 돌; 돌; ) HANGUL SYLLABLE DOL B3CD;B3CD;1103 1169 11B0;B3CD;1103 1169 11B0; # (돍; 돍; 돍; 돍; 돍; ) HANGUL SYLLABLE DOLG B3CE;B3CE;1103 1169 11B1;B3CE;1103 1169 11B1; # (돎; 돎; 돎; 돎; 돎; ) HANGUL SYLLABLE DOLM B3CF;B3CF;1103 1169 11B2;B3CF;1103 1169 11B2; # (돏; 돏; 돏; 돏; 돏; ) HANGUL SYLLABLE DOLB B3D0;B3D0;1103 1169 11B3;B3D0;1103 1169 11B3; # (돐; 돐; 돐; 돐; 돐; ) HANGUL SYLLABLE DOLS B3D1;B3D1;1103 1169 11B4;B3D1;1103 1169 11B4; # (돑; 돑; 돑; 돑; 돑; ) HANGUL SYLLABLE DOLT B3D2;B3D2;1103 1169 11B5;B3D2;1103 1169 11B5; # (돒; 돒; 돒; 돒; 돒; ) HANGUL SYLLABLE DOLP B3D3;B3D3;1103 1169 11B6;B3D3;1103 1169 11B6; # (돓; 돓; 돓; 돓; 돓; ) HANGUL SYLLABLE DOLH B3D4;B3D4;1103 1169 11B7;B3D4;1103 1169 11B7; # (돔; 돔; 돔; 돔; 돔; ) HANGUL SYLLABLE DOM B3D5;B3D5;1103 1169 11B8;B3D5;1103 1169 11B8; # (돕; 돕; 돕; 돕; 돕; ) HANGUL SYLLABLE DOB B3D6;B3D6;1103 1169 11B9;B3D6;1103 1169 11B9; # (돖; 돖; 돖; 돖; 돖; ) HANGUL SYLLABLE DOBS B3D7;B3D7;1103 1169 11BA;B3D7;1103 1169 11BA; # (돗; 돗; 돗; 돗; 돗; ) HANGUL SYLLABLE DOS B3D8;B3D8;1103 1169 11BB;B3D8;1103 1169 11BB; # (돘; 돘; 돘; 돘; 돘; ) HANGUL SYLLABLE DOSS B3D9;B3D9;1103 1169 11BC;B3D9;1103 1169 11BC; # (동; 동; 동; 동; 동; ) HANGUL SYLLABLE DONG B3DA;B3DA;1103 1169 11BD;B3DA;1103 1169 11BD; # (돚; 돚; 돚; 돚; 돚; ) HANGUL SYLLABLE DOJ B3DB;B3DB;1103 1169 11BE;B3DB;1103 1169 11BE; # (돛; 돛; 돛; 돛; 돛; ) HANGUL SYLLABLE DOC B3DC;B3DC;1103 1169 11BF;B3DC;1103 1169 11BF; # (돜; 돜; 돜; 돜; 돜; ) HANGUL SYLLABLE DOK B3DD;B3DD;1103 1169 11C0;B3DD;1103 1169 11C0; # (돝; 돝; 돝; 돝; 돝; ) HANGUL SYLLABLE DOT B3DE;B3DE;1103 1169 11C1;B3DE;1103 1169 11C1; # (돞; 돞; 돞; 돞; 돞; ) HANGUL SYLLABLE DOP B3DF;B3DF;1103 1169 11C2;B3DF;1103 1169 11C2; # (돟; 돟; 돟; 돟; 돟; ) HANGUL SYLLABLE DOH B3E0;B3E0;1103 116A;B3E0;1103 116A; # (돠; 돠; 돠; 돠; 돠; ) HANGUL SYLLABLE DWA B3E1;B3E1;1103 116A 11A8;B3E1;1103 116A 11A8; # (돡; 돡; 돡; 돡; 돡; ) HANGUL SYLLABLE DWAG B3E2;B3E2;1103 116A 11A9;B3E2;1103 116A 11A9; # (돢; 돢; 돢; 돢; 돢; ) HANGUL SYLLABLE DWAGG B3E3;B3E3;1103 116A 11AA;B3E3;1103 116A 11AA; # (돣; 돣; 돣; 돣; 돣; ) HANGUL SYLLABLE DWAGS B3E4;B3E4;1103 116A 11AB;B3E4;1103 116A 11AB; # (돤; 돤; 돤; 돤; 돤; ) HANGUL SYLLABLE DWAN B3E5;B3E5;1103 116A 11AC;B3E5;1103 116A 11AC; # (돥; 돥; 돥; 돥; 돥; ) HANGUL SYLLABLE DWANJ B3E6;B3E6;1103 116A 11AD;B3E6;1103 116A 11AD; # (돦; 돦; 돦; 돦; 돦; ) HANGUL SYLLABLE DWANH B3E7;B3E7;1103 116A 11AE;B3E7;1103 116A 11AE; # (돧; 돧; 돧; 돧; 돧; ) HANGUL SYLLABLE DWAD B3E8;B3E8;1103 116A 11AF;B3E8;1103 116A 11AF; # (돨; 돨; 돨; 돨; 돨; ) HANGUL SYLLABLE DWAL B3E9;B3E9;1103 116A 11B0;B3E9;1103 116A 11B0; # (돩; 돩; 돩; 돩; 돩; ) HANGUL SYLLABLE DWALG B3EA;B3EA;1103 116A 11B1;B3EA;1103 116A 11B1; # (돪; 돪; 돪; 돪; 돪; ) HANGUL SYLLABLE DWALM B3EB;B3EB;1103 116A 11B2;B3EB;1103 116A 11B2; # (돫; 돫; 돫; 돫; 돫; ) HANGUL SYLLABLE DWALB B3EC;B3EC;1103 116A 11B3;B3EC;1103 116A 11B3; # (돬; 돬; 돬; 돬; 돬; ) HANGUL SYLLABLE DWALS B3ED;B3ED;1103 116A 11B4;B3ED;1103 116A 11B4; # (돭; 돭; 돭; 돭; 돭; ) HANGUL SYLLABLE DWALT B3EE;B3EE;1103 116A 11B5;B3EE;1103 116A 11B5; # (돮; 돮; 돮; 돮; 돮; ) HANGUL SYLLABLE DWALP B3EF;B3EF;1103 116A 11B6;B3EF;1103 116A 11B6; # (돯; 돯; 돯; 돯; 돯; ) HANGUL SYLLABLE DWALH B3F0;B3F0;1103 116A 11B7;B3F0;1103 116A 11B7; # (돰; 돰; 돰; 돰; 돰; ) HANGUL SYLLABLE DWAM B3F1;B3F1;1103 116A 11B8;B3F1;1103 116A 11B8; # (돱; 돱; 돱; 돱; 돱; ) HANGUL SYLLABLE DWAB B3F2;B3F2;1103 116A 11B9;B3F2;1103 116A 11B9; # (돲; 돲; 돲; 돲; 돲; ) HANGUL SYLLABLE DWABS B3F3;B3F3;1103 116A 11BA;B3F3;1103 116A 11BA; # (돳; 돳; 돳; 돳; 돳; ) HANGUL SYLLABLE DWAS B3F4;B3F4;1103 116A 11BB;B3F4;1103 116A 11BB; # (돴; 돴; 돴; 돴; 돴; ) HANGUL SYLLABLE DWASS B3F5;B3F5;1103 116A 11BC;B3F5;1103 116A 11BC; # (돵; 돵; 돵; 돵; 돵; ) HANGUL SYLLABLE DWANG B3F6;B3F6;1103 116A 11BD;B3F6;1103 116A 11BD; # (돶; 돶; 돶; 돶; 돶; ) HANGUL SYLLABLE DWAJ B3F7;B3F7;1103 116A 11BE;B3F7;1103 116A 11BE; # (돷; 돷; 돷; 돷; 돷; ) HANGUL SYLLABLE DWAC B3F8;B3F8;1103 116A 11BF;B3F8;1103 116A 11BF; # (돸; 돸; 돸; 돸; 돸; ) HANGUL SYLLABLE DWAK B3F9;B3F9;1103 116A 11C0;B3F9;1103 116A 11C0; # (돹; 돹; 돹; 돹; 돹; ) HANGUL SYLLABLE DWAT B3FA;B3FA;1103 116A 11C1;B3FA;1103 116A 11C1; # (돺; 돺; 돺; 돺; 돺; ) HANGUL SYLLABLE DWAP B3FB;B3FB;1103 116A 11C2;B3FB;1103 116A 11C2; # (돻; 돻; 돻; 돻; 돻; ) HANGUL SYLLABLE DWAH B3FC;B3FC;1103 116B;B3FC;1103 116B; # (돼; 돼; 돼; 돼; 돼; ) HANGUL SYLLABLE DWAE B3FD;B3FD;1103 116B 11A8;B3FD;1103 116B 11A8; # (돽; 돽; 돽; 돽; 돽; ) HANGUL SYLLABLE DWAEG B3FE;B3FE;1103 116B 11A9;B3FE;1103 116B 11A9; # (돾; 돾; 돾; 돾; 돾; ) HANGUL SYLLABLE DWAEGG B3FF;B3FF;1103 116B 11AA;B3FF;1103 116B 11AA; # (돿; 돿; 돿; 돿; 돿; ) HANGUL SYLLABLE DWAEGS B400;B400;1103 116B 11AB;B400;1103 116B 11AB; # (됀; 됀; 됀; 됀; 됀; ) HANGUL SYLLABLE DWAEN B401;B401;1103 116B 11AC;B401;1103 116B 11AC; # (됁; 됁; 됁; 됁; 됁; ) HANGUL SYLLABLE DWAENJ B402;B402;1103 116B 11AD;B402;1103 116B 11AD; # (됂; 됂; 됂; 됂; 됂; ) HANGUL SYLLABLE DWAENH B403;B403;1103 116B 11AE;B403;1103 116B 11AE; # (됃; 됃; 됃; 됃; 됃; ) HANGUL SYLLABLE DWAED B404;B404;1103 116B 11AF;B404;1103 116B 11AF; # (됄; 됄; 됄; 됄; 됄; ) HANGUL SYLLABLE DWAEL B405;B405;1103 116B 11B0;B405;1103 116B 11B0; # (됅; 됅; 됅; 됅; 됅; ) HANGUL SYLLABLE DWAELG B406;B406;1103 116B 11B1;B406;1103 116B 11B1; # (됆; 됆; 됆; 됆; 됆; ) HANGUL SYLLABLE DWAELM B407;B407;1103 116B 11B2;B407;1103 116B 11B2; # (됇; 됇; 됇; 됇; 됇; ) HANGUL SYLLABLE DWAELB B408;B408;1103 116B 11B3;B408;1103 116B 11B3; # (됈; 됈; 됈; 됈; 됈; ) HANGUL SYLLABLE DWAELS B409;B409;1103 116B 11B4;B409;1103 116B 11B4; # (됉; 됉; 됉; 됉; 됉; ) HANGUL SYLLABLE DWAELT B40A;B40A;1103 116B 11B5;B40A;1103 116B 11B5; # (됊; 됊; 됊; 됊; 됊; ) HANGUL SYLLABLE DWAELP B40B;B40B;1103 116B 11B6;B40B;1103 116B 11B6; # (됋; 됋; 됋; 됋; 됋; ) HANGUL SYLLABLE DWAELH B40C;B40C;1103 116B 11B7;B40C;1103 116B 11B7; # (됌; 됌; 됌; 됌; 됌; ) HANGUL SYLLABLE DWAEM B40D;B40D;1103 116B 11B8;B40D;1103 116B 11B8; # (됍; 됍; 됍; 됍; 됍; ) HANGUL SYLLABLE DWAEB B40E;B40E;1103 116B 11B9;B40E;1103 116B 11B9; # (됎; 됎; 됎; 됎; 됎; ) HANGUL SYLLABLE DWAEBS B40F;B40F;1103 116B 11BA;B40F;1103 116B 11BA; # (됏; 됏; 됏; 됏; 됏; ) HANGUL SYLLABLE DWAES B410;B410;1103 116B 11BB;B410;1103 116B 11BB; # (됐; 됐; 됐; 됐; 됐; ) HANGUL SYLLABLE DWAESS B411;B411;1103 116B 11BC;B411;1103 116B 11BC; # (됑; 됑; 됑; 됑; 됑; ) HANGUL SYLLABLE DWAENG B412;B412;1103 116B 11BD;B412;1103 116B 11BD; # (됒; 됒; 됒; 됒; 됒; ) HANGUL SYLLABLE DWAEJ B413;B413;1103 116B 11BE;B413;1103 116B 11BE; # (됓; 됓; 됓; 됓; 됓; ) HANGUL SYLLABLE DWAEC B414;B414;1103 116B 11BF;B414;1103 116B 11BF; # (됔; 됔; 됔; 됔; 됔; ) HANGUL SYLLABLE DWAEK B415;B415;1103 116B 11C0;B415;1103 116B 11C0; # (됕; 됕; 됕; 됕; 됕; ) HANGUL SYLLABLE DWAET B416;B416;1103 116B 11C1;B416;1103 116B 11C1; # (됖; 됖; 됖; 됖; 됖; ) HANGUL SYLLABLE DWAEP B417;B417;1103 116B 11C2;B417;1103 116B 11C2; # (됗; 됗; 됗; 됗; 됗; ) HANGUL SYLLABLE DWAEH B418;B418;1103 116C;B418;1103 116C; # (되; 되; 되; 되; 되; ) HANGUL SYLLABLE DOE B419;B419;1103 116C 11A8;B419;1103 116C 11A8; # (됙; 됙; 됙; 됙; 됙; ) HANGUL SYLLABLE DOEG B41A;B41A;1103 116C 11A9;B41A;1103 116C 11A9; # (됚; 됚; 됚; 됚; 됚; ) HANGUL SYLLABLE DOEGG B41B;B41B;1103 116C 11AA;B41B;1103 116C 11AA; # (됛; 됛; 됛; 됛; 됛; ) HANGUL SYLLABLE DOEGS B41C;B41C;1103 116C 11AB;B41C;1103 116C 11AB; # (된; 된; 된; 된; 된; ) HANGUL SYLLABLE DOEN B41D;B41D;1103 116C 11AC;B41D;1103 116C 11AC; # (됝; 됝; 됝; 됝; 됝; ) HANGUL SYLLABLE DOENJ B41E;B41E;1103 116C 11AD;B41E;1103 116C 11AD; # (됞; 됞; 됞; 됞; 됞; ) HANGUL SYLLABLE DOENH B41F;B41F;1103 116C 11AE;B41F;1103 116C 11AE; # (됟; 됟; 됟; 됟; 됟; ) HANGUL SYLLABLE DOED B420;B420;1103 116C 11AF;B420;1103 116C 11AF; # (될; 될; 될; 될; 될; ) HANGUL SYLLABLE DOEL B421;B421;1103 116C 11B0;B421;1103 116C 11B0; # (됡; 됡; 됡; 됡; 됡; ) HANGUL SYLLABLE DOELG B422;B422;1103 116C 11B1;B422;1103 116C 11B1; # (됢; 됢; 됢; 됢; 됢; ) HANGUL SYLLABLE DOELM B423;B423;1103 116C 11B2;B423;1103 116C 11B2; # (됣; 됣; 됣; 됣; 됣; ) HANGUL SYLLABLE DOELB B424;B424;1103 116C 11B3;B424;1103 116C 11B3; # (됤; 됤; 됤; 됤; 됤; ) HANGUL SYLLABLE DOELS B425;B425;1103 116C 11B4;B425;1103 116C 11B4; # (됥; 됥; 됥; 됥; 됥; ) HANGUL SYLLABLE DOELT B426;B426;1103 116C 11B5;B426;1103 116C 11B5; # (됦; 됦; 됦; 됦; 됦; ) HANGUL SYLLABLE DOELP B427;B427;1103 116C 11B6;B427;1103 116C 11B6; # (됧; 됧; 됧; 됧; 됧; ) HANGUL SYLLABLE DOELH B428;B428;1103 116C 11B7;B428;1103 116C 11B7; # (됨; 됨; 됨; 됨; 됨; ) HANGUL SYLLABLE DOEM B429;B429;1103 116C 11B8;B429;1103 116C 11B8; # (됩; 됩; 됩; 됩; 됩; ) HANGUL SYLLABLE DOEB B42A;B42A;1103 116C 11B9;B42A;1103 116C 11B9; # (됪; 됪; 됪; 됪; 됪; ) HANGUL SYLLABLE DOEBS B42B;B42B;1103 116C 11BA;B42B;1103 116C 11BA; # (됫; 됫; 됫; 됫; 됫; ) HANGUL SYLLABLE DOES B42C;B42C;1103 116C 11BB;B42C;1103 116C 11BB; # (됬; 됬; 됬; 됬; 됬; ) HANGUL SYLLABLE DOESS B42D;B42D;1103 116C 11BC;B42D;1103 116C 11BC; # (됭; 됭; 됭; 됭; 됭; ) HANGUL SYLLABLE DOENG B42E;B42E;1103 116C 11BD;B42E;1103 116C 11BD; # (됮; 됮; 됮; 됮; 됮; ) HANGUL SYLLABLE DOEJ B42F;B42F;1103 116C 11BE;B42F;1103 116C 11BE; # (됯; 됯; 됯; 됯; 됯; ) HANGUL SYLLABLE DOEC B430;B430;1103 116C 11BF;B430;1103 116C 11BF; # (됰; 됰; 됰; 됰; 됰; ) HANGUL SYLLABLE DOEK B431;B431;1103 116C 11C0;B431;1103 116C 11C0; # (됱; 됱; 됱; 됱; 됱; ) HANGUL SYLLABLE DOET B432;B432;1103 116C 11C1;B432;1103 116C 11C1; # (됲; 됲; 됲; 됲; 됲; ) HANGUL SYLLABLE DOEP B433;B433;1103 116C 11C2;B433;1103 116C 11C2; # (됳; 됳; 됳; 됳; 됳; ) HANGUL SYLLABLE DOEH B434;B434;1103 116D;B434;1103 116D; # (됴; 됴; 됴; 됴; 됴; ) HANGUL SYLLABLE DYO B435;B435;1103 116D 11A8;B435;1103 116D 11A8; # (됵; 됵; 됵; 됵; 됵; ) HANGUL SYLLABLE DYOG B436;B436;1103 116D 11A9;B436;1103 116D 11A9; # (됶; 됶; 됶; 됶; 됶; ) HANGUL SYLLABLE DYOGG B437;B437;1103 116D 11AA;B437;1103 116D 11AA; # (됷; 됷; 됷; 됷; 됷; ) HANGUL SYLLABLE DYOGS B438;B438;1103 116D 11AB;B438;1103 116D 11AB; # (됸; 됸; 됸; 됸; 됸; ) HANGUL SYLLABLE DYON B439;B439;1103 116D 11AC;B439;1103 116D 11AC; # (됹; 됹; 됹; 됹; 됹; ) HANGUL SYLLABLE DYONJ B43A;B43A;1103 116D 11AD;B43A;1103 116D 11AD; # (됺; 됺; 됺; 됺; 됺; ) HANGUL SYLLABLE DYONH B43B;B43B;1103 116D 11AE;B43B;1103 116D 11AE; # (됻; 됻; 됻; 됻; 됻; ) HANGUL SYLLABLE DYOD B43C;B43C;1103 116D 11AF;B43C;1103 116D 11AF; # (됼; 됼; 됼; 됼; 됼; ) HANGUL SYLLABLE DYOL B43D;B43D;1103 116D 11B0;B43D;1103 116D 11B0; # (됽; 됽; 됽; 됽; 됽; ) HANGUL SYLLABLE DYOLG B43E;B43E;1103 116D 11B1;B43E;1103 116D 11B1; # (됾; 됾; 됾; 됾; 됾; ) HANGUL SYLLABLE DYOLM B43F;B43F;1103 116D 11B2;B43F;1103 116D 11B2; # (됿; 됿; 됿; 됿; 됿; ) HANGUL SYLLABLE DYOLB B440;B440;1103 116D 11B3;B440;1103 116D 11B3; # (둀; 둀; 둀; 둀; 둀; ) HANGUL SYLLABLE DYOLS B441;B441;1103 116D 11B4;B441;1103 116D 11B4; # (둁; 둁; 둁; 둁; 둁; ) HANGUL SYLLABLE DYOLT B442;B442;1103 116D 11B5;B442;1103 116D 11B5; # (둂; 둂; 둂; 둂; 둂; ) HANGUL SYLLABLE DYOLP B443;B443;1103 116D 11B6;B443;1103 116D 11B6; # (둃; 둃; 둃; 둃; 둃; ) HANGUL SYLLABLE DYOLH B444;B444;1103 116D 11B7;B444;1103 116D 11B7; # (둄; 둄; 둄; 둄; 둄; ) HANGUL SYLLABLE DYOM B445;B445;1103 116D 11B8;B445;1103 116D 11B8; # (둅; 둅; 둅; 둅; 둅; ) HANGUL SYLLABLE DYOB B446;B446;1103 116D 11B9;B446;1103 116D 11B9; # (둆; 둆; 둆; 둆; 둆; ) HANGUL SYLLABLE DYOBS B447;B447;1103 116D 11BA;B447;1103 116D 11BA; # (둇; 둇; 둇; 둇; 둇; ) HANGUL SYLLABLE DYOS B448;B448;1103 116D 11BB;B448;1103 116D 11BB; # (둈; 둈; 둈; 둈; 둈; ) HANGUL SYLLABLE DYOSS B449;B449;1103 116D 11BC;B449;1103 116D 11BC; # (둉; 둉; 둉; 둉; 둉; ) HANGUL SYLLABLE DYONG B44A;B44A;1103 116D 11BD;B44A;1103 116D 11BD; # (둊; 둊; 둊; 둊; 둊; ) HANGUL SYLLABLE DYOJ B44B;B44B;1103 116D 11BE;B44B;1103 116D 11BE; # (둋; 둋; 둋; 둋; 둋; ) HANGUL SYLLABLE DYOC B44C;B44C;1103 116D 11BF;B44C;1103 116D 11BF; # (둌; 둌; 둌; 둌; 둌; ) HANGUL SYLLABLE DYOK B44D;B44D;1103 116D 11C0;B44D;1103 116D 11C0; # (둍; 둍; 둍; 둍; 둍; ) HANGUL SYLLABLE DYOT B44E;B44E;1103 116D 11C1;B44E;1103 116D 11C1; # (둎; 둎; 둎; 둎; 둎; ) HANGUL SYLLABLE DYOP B44F;B44F;1103 116D 11C2;B44F;1103 116D 11C2; # (둏; 둏; 둏; 둏; 둏; ) HANGUL SYLLABLE DYOH B450;B450;1103 116E;B450;1103 116E; # (두; 두; 두; 두; 두; ) HANGUL SYLLABLE DU B451;B451;1103 116E 11A8;B451;1103 116E 11A8; # (둑; 둑; 둑; 둑; 둑; ) HANGUL SYLLABLE DUG B452;B452;1103 116E 11A9;B452;1103 116E 11A9; # (둒; 둒; 둒; 둒; 둒; ) HANGUL SYLLABLE DUGG B453;B453;1103 116E 11AA;B453;1103 116E 11AA; # (둓; 둓; 둓; 둓; 둓; ) HANGUL SYLLABLE DUGS B454;B454;1103 116E 11AB;B454;1103 116E 11AB; # (둔; 둔; 둔; 둔; 둔; ) HANGUL SYLLABLE DUN B455;B455;1103 116E 11AC;B455;1103 116E 11AC; # (둕; 둕; 둕; 둕; 둕; ) HANGUL SYLLABLE DUNJ B456;B456;1103 116E 11AD;B456;1103 116E 11AD; # (둖; 둖; 둖; 둖; 둖; ) HANGUL SYLLABLE DUNH B457;B457;1103 116E 11AE;B457;1103 116E 11AE; # (둗; 둗; 둗; 둗; 둗; ) HANGUL SYLLABLE DUD B458;B458;1103 116E 11AF;B458;1103 116E 11AF; # (둘; 둘; 둘; 둘; 둘; ) HANGUL SYLLABLE DUL B459;B459;1103 116E 11B0;B459;1103 116E 11B0; # (둙; 둙; 둙; 둙; 둙; ) HANGUL SYLLABLE DULG B45A;B45A;1103 116E 11B1;B45A;1103 116E 11B1; # (둚; 둚; 둚; 둚; 둚; ) HANGUL SYLLABLE DULM B45B;B45B;1103 116E 11B2;B45B;1103 116E 11B2; # (둛; 둛; 둛; 둛; 둛; ) HANGUL SYLLABLE DULB B45C;B45C;1103 116E 11B3;B45C;1103 116E 11B3; # (둜; 둜; 둜; 둜; 둜; ) HANGUL SYLLABLE DULS B45D;B45D;1103 116E 11B4;B45D;1103 116E 11B4; # (둝; 둝; 둝; 둝; 둝; ) HANGUL SYLLABLE DULT B45E;B45E;1103 116E 11B5;B45E;1103 116E 11B5; # (둞; 둞; 둞; 둞; 둞; ) HANGUL SYLLABLE DULP B45F;B45F;1103 116E 11B6;B45F;1103 116E 11B6; # (둟; 둟; 둟; 둟; 둟; ) HANGUL SYLLABLE DULH B460;B460;1103 116E 11B7;B460;1103 116E 11B7; # (둠; 둠; 둠; 둠; 둠; ) HANGUL SYLLABLE DUM B461;B461;1103 116E 11B8;B461;1103 116E 11B8; # (둡; 둡; 둡; 둡; 둡; ) HANGUL SYLLABLE DUB B462;B462;1103 116E 11B9;B462;1103 116E 11B9; # (둢; 둢; 둢; 둢; 둢; ) HANGUL SYLLABLE DUBS B463;B463;1103 116E 11BA;B463;1103 116E 11BA; # (둣; 둣; 둣; 둣; 둣; ) HANGUL SYLLABLE DUS B464;B464;1103 116E 11BB;B464;1103 116E 11BB; # (둤; 둤; 둤; 둤; 둤; ) HANGUL SYLLABLE DUSS B465;B465;1103 116E 11BC;B465;1103 116E 11BC; # (둥; 둥; 둥; 둥; 둥; ) HANGUL SYLLABLE DUNG B466;B466;1103 116E 11BD;B466;1103 116E 11BD; # (둦; 둦; 둦; 둦; 둦; ) HANGUL SYLLABLE DUJ B467;B467;1103 116E 11BE;B467;1103 116E 11BE; # (둧; 둧; 둧; 둧; 둧; ) HANGUL SYLLABLE DUC B468;B468;1103 116E 11BF;B468;1103 116E 11BF; # (둨; 둨; 둨; 둨; 둨; ) HANGUL SYLLABLE DUK B469;B469;1103 116E 11C0;B469;1103 116E 11C0; # (둩; 둩; 둩; 둩; 둩; ) HANGUL SYLLABLE DUT B46A;B46A;1103 116E 11C1;B46A;1103 116E 11C1; # (둪; 둪; 둪; 둪; 둪; ) HANGUL SYLLABLE DUP B46B;B46B;1103 116E 11C2;B46B;1103 116E 11C2; # (둫; 둫; 둫; 둫; 둫; ) HANGUL SYLLABLE DUH B46C;B46C;1103 116F;B46C;1103 116F; # (둬; 둬; 둬; 둬; 둬; ) HANGUL SYLLABLE DWEO B46D;B46D;1103 116F 11A8;B46D;1103 116F 11A8; # (둭; 둭; 둭; 둭; 둭; ) HANGUL SYLLABLE DWEOG B46E;B46E;1103 116F 11A9;B46E;1103 116F 11A9; # (둮; 둮; 둮; 둮; 둮; ) HANGUL SYLLABLE DWEOGG B46F;B46F;1103 116F 11AA;B46F;1103 116F 11AA; # (둯; 둯; 둯; 둯; 둯; ) HANGUL SYLLABLE DWEOGS B470;B470;1103 116F 11AB;B470;1103 116F 11AB; # (둰; 둰; 둰; 둰; 둰; ) HANGUL SYLLABLE DWEON B471;B471;1103 116F 11AC;B471;1103 116F 11AC; # (둱; 둱; 둱; 둱; 둱; ) HANGUL SYLLABLE DWEONJ B472;B472;1103 116F 11AD;B472;1103 116F 11AD; # (둲; 둲; 둲; 둲; 둲; ) HANGUL SYLLABLE DWEONH B473;B473;1103 116F 11AE;B473;1103 116F 11AE; # (둳; 둳; 둳; 둳; 둳; ) HANGUL SYLLABLE DWEOD B474;B474;1103 116F 11AF;B474;1103 116F 11AF; # (둴; 둴; 둴; 둴; 둴; ) HANGUL SYLLABLE DWEOL B475;B475;1103 116F 11B0;B475;1103 116F 11B0; # (둵; 둵; 둵; 둵; 둵; ) HANGUL SYLLABLE DWEOLG B476;B476;1103 116F 11B1;B476;1103 116F 11B1; # (둶; 둶; 둶; 둶; 둶; ) HANGUL SYLLABLE DWEOLM B477;B477;1103 116F 11B2;B477;1103 116F 11B2; # (둷; 둷; 둷; 둷; 둷; ) HANGUL SYLLABLE DWEOLB B478;B478;1103 116F 11B3;B478;1103 116F 11B3; # (둸; 둸; 둸; 둸; 둸; ) HANGUL SYLLABLE DWEOLS B479;B479;1103 116F 11B4;B479;1103 116F 11B4; # (둹; 둹; 둹; 둹; 둹; ) HANGUL SYLLABLE DWEOLT B47A;B47A;1103 116F 11B5;B47A;1103 116F 11B5; # (둺; 둺; 둺; 둺; 둺; ) HANGUL SYLLABLE DWEOLP B47B;B47B;1103 116F 11B6;B47B;1103 116F 11B6; # (둻; 둻; 둻; 둻; 둻; ) HANGUL SYLLABLE DWEOLH B47C;B47C;1103 116F 11B7;B47C;1103 116F 11B7; # (둼; 둼; 둼; 둼; 둼; ) HANGUL SYLLABLE DWEOM B47D;B47D;1103 116F 11B8;B47D;1103 116F 11B8; # (둽; 둽; 둽; 둽; 둽; ) HANGUL SYLLABLE DWEOB B47E;B47E;1103 116F 11B9;B47E;1103 116F 11B9; # (둾; 둾; 둾; 둾; 둾; ) HANGUL SYLLABLE DWEOBS B47F;B47F;1103 116F 11BA;B47F;1103 116F 11BA; # (둿; 둿; 둿; 둿; 둿; ) HANGUL SYLLABLE DWEOS B480;B480;1103 116F 11BB;B480;1103 116F 11BB; # (뒀; 뒀; 뒀; 뒀; 뒀; ) HANGUL SYLLABLE DWEOSS B481;B481;1103 116F 11BC;B481;1103 116F 11BC; # (뒁; 뒁; 뒁; 뒁; 뒁; ) HANGUL SYLLABLE DWEONG B482;B482;1103 116F 11BD;B482;1103 116F 11BD; # (뒂; 뒂; 뒂; 뒂; 뒂; ) HANGUL SYLLABLE DWEOJ B483;B483;1103 116F 11BE;B483;1103 116F 11BE; # (뒃; 뒃; 뒃; 뒃; 뒃; ) HANGUL SYLLABLE DWEOC B484;B484;1103 116F 11BF;B484;1103 116F 11BF; # (뒄; 뒄; 뒄; 뒄; 뒄; ) HANGUL SYLLABLE DWEOK B485;B485;1103 116F 11C0;B485;1103 116F 11C0; # (뒅; 뒅; 뒅; 뒅; 뒅; ) HANGUL SYLLABLE DWEOT B486;B486;1103 116F 11C1;B486;1103 116F 11C1; # (뒆; 뒆; 뒆; 뒆; 뒆; ) HANGUL SYLLABLE DWEOP B487;B487;1103 116F 11C2;B487;1103 116F 11C2; # (뒇; 뒇; 뒇; 뒇; 뒇; ) HANGUL SYLLABLE DWEOH B488;B488;1103 1170;B488;1103 1170; # (뒈; 뒈; 뒈; 뒈; 뒈; ) HANGUL SYLLABLE DWE B489;B489;1103 1170 11A8;B489;1103 1170 11A8; # (뒉; 뒉; 뒉; 뒉; 뒉; ) HANGUL SYLLABLE DWEG B48A;B48A;1103 1170 11A9;B48A;1103 1170 11A9; # (뒊; 뒊; 뒊; 뒊; 뒊; ) HANGUL SYLLABLE DWEGG B48B;B48B;1103 1170 11AA;B48B;1103 1170 11AA; # (뒋; 뒋; 뒋; 뒋; 뒋; ) HANGUL SYLLABLE DWEGS B48C;B48C;1103 1170 11AB;B48C;1103 1170 11AB; # (뒌; 뒌; 뒌; 뒌; 뒌; ) HANGUL SYLLABLE DWEN B48D;B48D;1103 1170 11AC;B48D;1103 1170 11AC; # (뒍; 뒍; 뒍; 뒍; 뒍; ) HANGUL SYLLABLE DWENJ B48E;B48E;1103 1170 11AD;B48E;1103 1170 11AD; # (뒎; 뒎; 뒎; 뒎; 뒎; ) HANGUL SYLLABLE DWENH B48F;B48F;1103 1170 11AE;B48F;1103 1170 11AE; # (뒏; 뒏; 뒏; 뒏; 뒏; ) HANGUL SYLLABLE DWED B490;B490;1103 1170 11AF;B490;1103 1170 11AF; # (뒐; 뒐; 뒐; 뒐; 뒐; ) HANGUL SYLLABLE DWEL B491;B491;1103 1170 11B0;B491;1103 1170 11B0; # (뒑; 뒑; 뒑; 뒑; 뒑; ) HANGUL SYLLABLE DWELG B492;B492;1103 1170 11B1;B492;1103 1170 11B1; # (뒒; 뒒; 뒒; 뒒; 뒒; ) HANGUL SYLLABLE DWELM B493;B493;1103 1170 11B2;B493;1103 1170 11B2; # (뒓; 뒓; 뒓; 뒓; 뒓; ) HANGUL SYLLABLE DWELB B494;B494;1103 1170 11B3;B494;1103 1170 11B3; # (뒔; 뒔; 뒔; 뒔; 뒔; ) HANGUL SYLLABLE DWELS B495;B495;1103 1170 11B4;B495;1103 1170 11B4; # (뒕; 뒕; 뒕; 뒕; 뒕; ) HANGUL SYLLABLE DWELT B496;B496;1103 1170 11B5;B496;1103 1170 11B5; # (뒖; 뒖; 뒖; 뒖; 뒖; ) HANGUL SYLLABLE DWELP B497;B497;1103 1170 11B6;B497;1103 1170 11B6; # (뒗; 뒗; 뒗; 뒗; 뒗; ) HANGUL SYLLABLE DWELH B498;B498;1103 1170 11B7;B498;1103 1170 11B7; # (뒘; 뒘; 뒘; 뒘; 뒘; ) HANGUL SYLLABLE DWEM B499;B499;1103 1170 11B8;B499;1103 1170 11B8; # (뒙; 뒙; 뒙; 뒙; 뒙; ) HANGUL SYLLABLE DWEB B49A;B49A;1103 1170 11B9;B49A;1103 1170 11B9; # (뒚; 뒚; 뒚; 뒚; 뒚; ) HANGUL SYLLABLE DWEBS B49B;B49B;1103 1170 11BA;B49B;1103 1170 11BA; # (뒛; 뒛; 뒛; 뒛; 뒛; ) HANGUL SYLLABLE DWES B49C;B49C;1103 1170 11BB;B49C;1103 1170 11BB; # (뒜; 뒜; 뒜; 뒜; 뒜; ) HANGUL SYLLABLE DWESS B49D;B49D;1103 1170 11BC;B49D;1103 1170 11BC; # (뒝; 뒝; 뒝; 뒝; 뒝; ) HANGUL SYLLABLE DWENG B49E;B49E;1103 1170 11BD;B49E;1103 1170 11BD; # (뒞; 뒞; 뒞; 뒞; 뒞; ) HANGUL SYLLABLE DWEJ B49F;B49F;1103 1170 11BE;B49F;1103 1170 11BE; # (뒟; 뒟; 뒟; 뒟; 뒟; ) HANGUL SYLLABLE DWEC B4A0;B4A0;1103 1170 11BF;B4A0;1103 1170 11BF; # (뒠; 뒠; 뒠; 뒠; 뒠; ) HANGUL SYLLABLE DWEK B4A1;B4A1;1103 1170 11C0;B4A1;1103 1170 11C0; # (뒡; 뒡; 뒡; 뒡; 뒡; ) HANGUL SYLLABLE DWET B4A2;B4A2;1103 1170 11C1;B4A2;1103 1170 11C1; # (뒢; 뒢; 뒢; 뒢; 뒢; ) HANGUL SYLLABLE DWEP B4A3;B4A3;1103 1170 11C2;B4A3;1103 1170 11C2; # (뒣; 뒣; 뒣; 뒣; 뒣; ) HANGUL SYLLABLE DWEH B4A4;B4A4;1103 1171;B4A4;1103 1171; # (뒤; 뒤; 뒤; 뒤; 뒤; ) HANGUL SYLLABLE DWI B4A5;B4A5;1103 1171 11A8;B4A5;1103 1171 11A8; # (뒥; 뒥; 뒥; 뒥; 뒥; ) HANGUL SYLLABLE DWIG B4A6;B4A6;1103 1171 11A9;B4A6;1103 1171 11A9; # (뒦; 뒦; 뒦; 뒦; 뒦; ) HANGUL SYLLABLE DWIGG B4A7;B4A7;1103 1171 11AA;B4A7;1103 1171 11AA; # (뒧; 뒧; 뒧; 뒧; 뒧; ) HANGUL SYLLABLE DWIGS B4A8;B4A8;1103 1171 11AB;B4A8;1103 1171 11AB; # (뒨; 뒨; 뒨; 뒨; 뒨; ) HANGUL SYLLABLE DWIN B4A9;B4A9;1103 1171 11AC;B4A9;1103 1171 11AC; # (뒩; 뒩; 뒩; 뒩; 뒩; ) HANGUL SYLLABLE DWINJ B4AA;B4AA;1103 1171 11AD;B4AA;1103 1171 11AD; # (뒪; 뒪; 뒪; 뒪; 뒪; ) HANGUL SYLLABLE DWINH B4AB;B4AB;1103 1171 11AE;B4AB;1103 1171 11AE; # (뒫; 뒫; 뒫; 뒫; 뒫; ) HANGUL SYLLABLE DWID B4AC;B4AC;1103 1171 11AF;B4AC;1103 1171 11AF; # (뒬; 뒬; 뒬; 뒬; 뒬; ) HANGUL SYLLABLE DWIL B4AD;B4AD;1103 1171 11B0;B4AD;1103 1171 11B0; # (뒭; 뒭; 뒭; 뒭; 뒭; ) HANGUL SYLLABLE DWILG B4AE;B4AE;1103 1171 11B1;B4AE;1103 1171 11B1; # (뒮; 뒮; 뒮; 뒮; 뒮; ) HANGUL SYLLABLE DWILM B4AF;B4AF;1103 1171 11B2;B4AF;1103 1171 11B2; # (뒯; 뒯; 뒯; 뒯; 뒯; ) HANGUL SYLLABLE DWILB B4B0;B4B0;1103 1171 11B3;B4B0;1103 1171 11B3; # (뒰; 뒰; 뒰; 뒰; 뒰; ) HANGUL SYLLABLE DWILS B4B1;B4B1;1103 1171 11B4;B4B1;1103 1171 11B4; # (뒱; 뒱; 뒱; 뒱; 뒱; ) HANGUL SYLLABLE DWILT B4B2;B4B2;1103 1171 11B5;B4B2;1103 1171 11B5; # (뒲; 뒲; 뒲; 뒲; 뒲; ) HANGUL SYLLABLE DWILP B4B3;B4B3;1103 1171 11B6;B4B3;1103 1171 11B6; # (뒳; 뒳; 뒳; 뒳; 뒳; ) HANGUL SYLLABLE DWILH B4B4;B4B4;1103 1171 11B7;B4B4;1103 1171 11B7; # (뒴; 뒴; 뒴; 뒴; 뒴; ) HANGUL SYLLABLE DWIM B4B5;B4B5;1103 1171 11B8;B4B5;1103 1171 11B8; # (뒵; 뒵; 뒵; 뒵; 뒵; ) HANGUL SYLLABLE DWIB B4B6;B4B6;1103 1171 11B9;B4B6;1103 1171 11B9; # (뒶; 뒶; 뒶; 뒶; 뒶; ) HANGUL SYLLABLE DWIBS B4B7;B4B7;1103 1171 11BA;B4B7;1103 1171 11BA; # (뒷; 뒷; 뒷; 뒷; 뒷; ) HANGUL SYLLABLE DWIS B4B8;B4B8;1103 1171 11BB;B4B8;1103 1171 11BB; # (뒸; 뒸; 뒸; 뒸; 뒸; ) HANGUL SYLLABLE DWISS B4B9;B4B9;1103 1171 11BC;B4B9;1103 1171 11BC; # (뒹; 뒹; 뒹; 뒹; 뒹; ) HANGUL SYLLABLE DWING B4BA;B4BA;1103 1171 11BD;B4BA;1103 1171 11BD; # (뒺; 뒺; 뒺; 뒺; 뒺; ) HANGUL SYLLABLE DWIJ B4BB;B4BB;1103 1171 11BE;B4BB;1103 1171 11BE; # (뒻; 뒻; 뒻; 뒻; 뒻; ) HANGUL SYLLABLE DWIC B4BC;B4BC;1103 1171 11BF;B4BC;1103 1171 11BF; # (뒼; 뒼; 뒼; 뒼; 뒼; ) HANGUL SYLLABLE DWIK B4BD;B4BD;1103 1171 11C0;B4BD;1103 1171 11C0; # (뒽; 뒽; 뒽; 뒽; 뒽; ) HANGUL SYLLABLE DWIT B4BE;B4BE;1103 1171 11C1;B4BE;1103 1171 11C1; # (뒾; 뒾; 뒾; 뒾; 뒾; ) HANGUL SYLLABLE DWIP B4BF;B4BF;1103 1171 11C2;B4BF;1103 1171 11C2; # (뒿; 뒿; 뒿; 뒿; 뒿; ) HANGUL SYLLABLE DWIH B4C0;B4C0;1103 1172;B4C0;1103 1172; # (듀; 듀; 듀; 듀; 듀; ) HANGUL SYLLABLE DYU B4C1;B4C1;1103 1172 11A8;B4C1;1103 1172 11A8; # (듁; 듁; 듁; 듁; 듁; ) HANGUL SYLLABLE DYUG B4C2;B4C2;1103 1172 11A9;B4C2;1103 1172 11A9; # (듂; 듂; 듂; 듂; 듂; ) HANGUL SYLLABLE DYUGG B4C3;B4C3;1103 1172 11AA;B4C3;1103 1172 11AA; # (듃; 듃; 듃; 듃; 듃; ) HANGUL SYLLABLE DYUGS B4C4;B4C4;1103 1172 11AB;B4C4;1103 1172 11AB; # (듄; 듄; 듄; 듄; 듄; ) HANGUL SYLLABLE DYUN B4C5;B4C5;1103 1172 11AC;B4C5;1103 1172 11AC; # (듅; 듅; 듅; 듅; 듅; ) HANGUL SYLLABLE DYUNJ B4C6;B4C6;1103 1172 11AD;B4C6;1103 1172 11AD; # (듆; 듆; 듆; 듆; 듆; ) HANGUL SYLLABLE DYUNH B4C7;B4C7;1103 1172 11AE;B4C7;1103 1172 11AE; # (듇; 듇; 듇; 듇; 듇; ) HANGUL SYLLABLE DYUD B4C8;B4C8;1103 1172 11AF;B4C8;1103 1172 11AF; # (듈; 듈; 듈; 듈; 듈; ) HANGUL SYLLABLE DYUL B4C9;B4C9;1103 1172 11B0;B4C9;1103 1172 11B0; # (듉; 듉; 듉; 듉; 듉; ) HANGUL SYLLABLE DYULG B4CA;B4CA;1103 1172 11B1;B4CA;1103 1172 11B1; # (듊; 듊; 듊; 듊; 듊; ) HANGUL SYLLABLE DYULM B4CB;B4CB;1103 1172 11B2;B4CB;1103 1172 11B2; # (듋; 듋; 듋; 듋; 듋; ) HANGUL SYLLABLE DYULB B4CC;B4CC;1103 1172 11B3;B4CC;1103 1172 11B3; # (듌; 듌; 듌; 듌; 듌; ) HANGUL SYLLABLE DYULS B4CD;B4CD;1103 1172 11B4;B4CD;1103 1172 11B4; # (듍; 듍; 듍; 듍; 듍; ) HANGUL SYLLABLE DYULT B4CE;B4CE;1103 1172 11B5;B4CE;1103 1172 11B5; # (듎; 듎; 듎; 듎; 듎; ) HANGUL SYLLABLE DYULP B4CF;B4CF;1103 1172 11B6;B4CF;1103 1172 11B6; # (듏; 듏; 듏; 듏; 듏; ) HANGUL SYLLABLE DYULH B4D0;B4D0;1103 1172 11B7;B4D0;1103 1172 11B7; # (듐; 듐; 듐; 듐; 듐; ) HANGUL SYLLABLE DYUM B4D1;B4D1;1103 1172 11B8;B4D1;1103 1172 11B8; # (듑; 듑; 듑; 듑; 듑; ) HANGUL SYLLABLE DYUB B4D2;B4D2;1103 1172 11B9;B4D2;1103 1172 11B9; # (듒; 듒; 듒; 듒; 듒; ) HANGUL SYLLABLE DYUBS B4D3;B4D3;1103 1172 11BA;B4D3;1103 1172 11BA; # (듓; 듓; 듓; 듓; 듓; ) HANGUL SYLLABLE DYUS B4D4;B4D4;1103 1172 11BB;B4D4;1103 1172 11BB; # (듔; 듔; 듔; 듔; 듔; ) HANGUL SYLLABLE DYUSS B4D5;B4D5;1103 1172 11BC;B4D5;1103 1172 11BC; # (듕; 듕; 듕; 듕; 듕; ) HANGUL SYLLABLE DYUNG B4D6;B4D6;1103 1172 11BD;B4D6;1103 1172 11BD; # (듖; 듖; 듖; 듖; 듖; ) HANGUL SYLLABLE DYUJ B4D7;B4D7;1103 1172 11BE;B4D7;1103 1172 11BE; # (듗; 듗; 듗; 듗; 듗; ) HANGUL SYLLABLE DYUC B4D8;B4D8;1103 1172 11BF;B4D8;1103 1172 11BF; # (듘; 듘; 듘; 듘; 듘; ) HANGUL SYLLABLE DYUK B4D9;B4D9;1103 1172 11C0;B4D9;1103 1172 11C0; # (듙; 듙; 듙; 듙; 듙; ) HANGUL SYLLABLE DYUT B4DA;B4DA;1103 1172 11C1;B4DA;1103 1172 11C1; # (듚; 듚; 듚; 듚; 듚; ) HANGUL SYLLABLE DYUP B4DB;B4DB;1103 1172 11C2;B4DB;1103 1172 11C2; # (듛; 듛; 듛; 듛; 듛; ) HANGUL SYLLABLE DYUH B4DC;B4DC;1103 1173;B4DC;1103 1173; # (드; 드; 드; 드; 드; ) HANGUL SYLLABLE DEU B4DD;B4DD;1103 1173 11A8;B4DD;1103 1173 11A8; # (득; 득; 득; 득; 득; ) HANGUL SYLLABLE DEUG B4DE;B4DE;1103 1173 11A9;B4DE;1103 1173 11A9; # (듞; 듞; 듞; 듞; 듞; ) HANGUL SYLLABLE DEUGG B4DF;B4DF;1103 1173 11AA;B4DF;1103 1173 11AA; # (듟; 듟; 듟; 듟; 듟; ) HANGUL SYLLABLE DEUGS B4E0;B4E0;1103 1173 11AB;B4E0;1103 1173 11AB; # (든; 든; 든; 든; 든; ) HANGUL SYLLABLE DEUN B4E1;B4E1;1103 1173 11AC;B4E1;1103 1173 11AC; # (듡; 듡; 듡; 듡; 듡; ) HANGUL SYLLABLE DEUNJ B4E2;B4E2;1103 1173 11AD;B4E2;1103 1173 11AD; # (듢; 듢; 듢; 듢; 듢; ) HANGUL SYLLABLE DEUNH B4E3;B4E3;1103 1173 11AE;B4E3;1103 1173 11AE; # (듣; 듣; 듣; 듣; 듣; ) HANGUL SYLLABLE DEUD B4E4;B4E4;1103 1173 11AF;B4E4;1103 1173 11AF; # (들; 들; 들; 들; 들; ) HANGUL SYLLABLE DEUL B4E5;B4E5;1103 1173 11B0;B4E5;1103 1173 11B0; # (듥; 듥; 듥; 듥; 듥; ) HANGUL SYLLABLE DEULG B4E6;B4E6;1103 1173 11B1;B4E6;1103 1173 11B1; # (듦; 듦; 듦; 듦; 듦; ) HANGUL SYLLABLE DEULM B4E7;B4E7;1103 1173 11B2;B4E7;1103 1173 11B2; # (듧; 듧; 듧; 듧; 듧; ) HANGUL SYLLABLE DEULB B4E8;B4E8;1103 1173 11B3;B4E8;1103 1173 11B3; # (듨; 듨; 듨; 듨; 듨; ) HANGUL SYLLABLE DEULS B4E9;B4E9;1103 1173 11B4;B4E9;1103 1173 11B4; # (듩; 듩; 듩; 듩; 듩; ) HANGUL SYLLABLE DEULT B4EA;B4EA;1103 1173 11B5;B4EA;1103 1173 11B5; # (듪; 듪; 듪; 듪; 듪; ) HANGUL SYLLABLE DEULP B4EB;B4EB;1103 1173 11B6;B4EB;1103 1173 11B6; # (듫; 듫; 듫; 듫; 듫; ) HANGUL SYLLABLE DEULH B4EC;B4EC;1103 1173 11B7;B4EC;1103 1173 11B7; # (듬; 듬; 듬; 듬; 듬; ) HANGUL SYLLABLE DEUM B4ED;B4ED;1103 1173 11B8;B4ED;1103 1173 11B8; # (듭; 듭; 듭; 듭; 듭; ) HANGUL SYLLABLE DEUB B4EE;B4EE;1103 1173 11B9;B4EE;1103 1173 11B9; # (듮; 듮; 듮; 듮; 듮; ) HANGUL SYLLABLE DEUBS B4EF;B4EF;1103 1173 11BA;B4EF;1103 1173 11BA; # (듯; 듯; 듯; 듯; 듯; ) HANGUL SYLLABLE DEUS B4F0;B4F0;1103 1173 11BB;B4F0;1103 1173 11BB; # (듰; 듰; 듰; 듰; 듰; ) HANGUL SYLLABLE DEUSS B4F1;B4F1;1103 1173 11BC;B4F1;1103 1173 11BC; # (등; 등; 등; 등; 등; ) HANGUL SYLLABLE DEUNG B4F2;B4F2;1103 1173 11BD;B4F2;1103 1173 11BD; # (듲; 듲; 듲; 듲; 듲; ) HANGUL SYLLABLE DEUJ B4F3;B4F3;1103 1173 11BE;B4F3;1103 1173 11BE; # (듳; 듳; 듳; 듳; 듳; ) HANGUL SYLLABLE DEUC B4F4;B4F4;1103 1173 11BF;B4F4;1103 1173 11BF; # (듴; 듴; 듴; 듴; 듴; ) HANGUL SYLLABLE DEUK B4F5;B4F5;1103 1173 11C0;B4F5;1103 1173 11C0; # (듵; 듵; 듵; 듵; 듵; ) HANGUL SYLLABLE DEUT B4F6;B4F6;1103 1173 11C1;B4F6;1103 1173 11C1; # (듶; 듶; 듶; 듶; 듶; ) HANGUL SYLLABLE DEUP B4F7;B4F7;1103 1173 11C2;B4F7;1103 1173 11C2; # (듷; 듷; 듷; 듷; 듷; ) HANGUL SYLLABLE DEUH B4F8;B4F8;1103 1174;B4F8;1103 1174; # (듸; 듸; 듸; 듸; 듸; ) HANGUL SYLLABLE DYI B4F9;B4F9;1103 1174 11A8;B4F9;1103 1174 11A8; # (듹; 듹; 듹; 듹; 듹; ) HANGUL SYLLABLE DYIG B4FA;B4FA;1103 1174 11A9;B4FA;1103 1174 11A9; # (듺; 듺; 듺; 듺; 듺; ) HANGUL SYLLABLE DYIGG B4FB;B4FB;1103 1174 11AA;B4FB;1103 1174 11AA; # (듻; 듻; 듻; 듻; 듻; ) HANGUL SYLLABLE DYIGS B4FC;B4FC;1103 1174 11AB;B4FC;1103 1174 11AB; # (듼; 듼; 듼; 듼; 듼; ) HANGUL SYLLABLE DYIN B4FD;B4FD;1103 1174 11AC;B4FD;1103 1174 11AC; # (듽; 듽; 듽; 듽; 듽; ) HANGUL SYLLABLE DYINJ B4FE;B4FE;1103 1174 11AD;B4FE;1103 1174 11AD; # (듾; 듾; 듾; 듾; 듾; ) HANGUL SYLLABLE DYINH B4FF;B4FF;1103 1174 11AE;B4FF;1103 1174 11AE; # (듿; 듿; 듿; 듿; 듿; ) HANGUL SYLLABLE DYID B500;B500;1103 1174 11AF;B500;1103 1174 11AF; # (딀; 딀; 딀; 딀; 딀; ) HANGUL SYLLABLE DYIL B501;B501;1103 1174 11B0;B501;1103 1174 11B0; # (딁; 딁; 딁; 딁; 딁; ) HANGUL SYLLABLE DYILG B502;B502;1103 1174 11B1;B502;1103 1174 11B1; # (딂; 딂; 딂; 딂; 딂; ) HANGUL SYLLABLE DYILM B503;B503;1103 1174 11B2;B503;1103 1174 11B2; # (딃; 딃; 딃; 딃; 딃; ) HANGUL SYLLABLE DYILB B504;B504;1103 1174 11B3;B504;1103 1174 11B3; # (딄; 딄; 딄; 딄; 딄; ) HANGUL SYLLABLE DYILS B505;B505;1103 1174 11B4;B505;1103 1174 11B4; # (딅; 딅; 딅; 딅; 딅; ) HANGUL SYLLABLE DYILT B506;B506;1103 1174 11B5;B506;1103 1174 11B5; # (딆; 딆; 딆; 딆; 딆; ) HANGUL SYLLABLE DYILP B507;B507;1103 1174 11B6;B507;1103 1174 11B6; # (딇; 딇; 딇; 딇; 딇; ) HANGUL SYLLABLE DYILH B508;B508;1103 1174 11B7;B508;1103 1174 11B7; # (딈; 딈; 딈; 딈; 딈; ) HANGUL SYLLABLE DYIM B509;B509;1103 1174 11B8;B509;1103 1174 11B8; # (딉; 딉; 딉; 딉; 딉; ) HANGUL SYLLABLE DYIB B50A;B50A;1103 1174 11B9;B50A;1103 1174 11B9; # (딊; 딊; 딊; 딊; 딊; ) HANGUL SYLLABLE DYIBS B50B;B50B;1103 1174 11BA;B50B;1103 1174 11BA; # (딋; 딋; 딋; 딋; 딋; ) HANGUL SYLLABLE DYIS B50C;B50C;1103 1174 11BB;B50C;1103 1174 11BB; # (딌; 딌; 딌; 딌; 딌; ) HANGUL SYLLABLE DYISS B50D;B50D;1103 1174 11BC;B50D;1103 1174 11BC; # (딍; 딍; 딍; 딍; 딍; ) HANGUL SYLLABLE DYING B50E;B50E;1103 1174 11BD;B50E;1103 1174 11BD; # (딎; 딎; 딎; 딎; 딎; ) HANGUL SYLLABLE DYIJ B50F;B50F;1103 1174 11BE;B50F;1103 1174 11BE; # (딏; 딏; 딏; 딏; 딏; ) HANGUL SYLLABLE DYIC B510;B510;1103 1174 11BF;B510;1103 1174 11BF; # (딐; 딐; 딐; 딐; 딐; ) HANGUL SYLLABLE DYIK B511;B511;1103 1174 11C0;B511;1103 1174 11C0; # (딑; 딑; 딑; 딑; 딑; ) HANGUL SYLLABLE DYIT B512;B512;1103 1174 11C1;B512;1103 1174 11C1; # (딒; 딒; 딒; 딒; 딒; ) HANGUL SYLLABLE DYIP B513;B513;1103 1174 11C2;B513;1103 1174 11C2; # (딓; 딓; 딓; 딓; 딓; ) HANGUL SYLLABLE DYIH B514;B514;1103 1175;B514;1103 1175; # (디; 디; 디; 디; 디; ) HANGUL SYLLABLE DI B515;B515;1103 1175 11A8;B515;1103 1175 11A8; # (딕; 딕; 딕; 딕; 딕; ) HANGUL SYLLABLE DIG B516;B516;1103 1175 11A9;B516;1103 1175 11A9; # (딖; 딖; 딖; 딖; 딖; ) HANGUL SYLLABLE DIGG B517;B517;1103 1175 11AA;B517;1103 1175 11AA; # (딗; 딗; 딗; 딗; 딗; ) HANGUL SYLLABLE DIGS B518;B518;1103 1175 11AB;B518;1103 1175 11AB; # (딘; 딘; 딘; 딘; 딘; ) HANGUL SYLLABLE DIN B519;B519;1103 1175 11AC;B519;1103 1175 11AC; # (딙; 딙; 딙; 딙; 딙; ) HANGUL SYLLABLE DINJ B51A;B51A;1103 1175 11AD;B51A;1103 1175 11AD; # (딚; 딚; 딚; 딚; 딚; ) HANGUL SYLLABLE DINH B51B;B51B;1103 1175 11AE;B51B;1103 1175 11AE; # (딛; 딛; 딛; 딛; 딛; ) HANGUL SYLLABLE DID B51C;B51C;1103 1175 11AF;B51C;1103 1175 11AF; # (딜; 딜; 딜; 딜; 딜; ) HANGUL SYLLABLE DIL B51D;B51D;1103 1175 11B0;B51D;1103 1175 11B0; # (딝; 딝; 딝; 딝; 딝; ) HANGUL SYLLABLE DILG B51E;B51E;1103 1175 11B1;B51E;1103 1175 11B1; # (딞; 딞; 딞; 딞; 딞; ) HANGUL SYLLABLE DILM B51F;B51F;1103 1175 11B2;B51F;1103 1175 11B2; # (딟; 딟; 딟; 딟; 딟; ) HANGUL SYLLABLE DILB B520;B520;1103 1175 11B3;B520;1103 1175 11B3; # (딠; 딠; 딠; 딠; 딠; ) HANGUL SYLLABLE DILS B521;B521;1103 1175 11B4;B521;1103 1175 11B4; # (딡; 딡; 딡; 딡; 딡; ) HANGUL SYLLABLE DILT B522;B522;1103 1175 11B5;B522;1103 1175 11B5; # (딢; 딢; 딢; 딢; 딢; ) HANGUL SYLLABLE DILP B523;B523;1103 1175 11B6;B523;1103 1175 11B6; # (딣; 딣; 딣; 딣; 딣; ) HANGUL SYLLABLE DILH B524;B524;1103 1175 11B7;B524;1103 1175 11B7; # (딤; 딤; 딤; 딤; 딤; ) HANGUL SYLLABLE DIM B525;B525;1103 1175 11B8;B525;1103 1175 11B8; # (딥; 딥; 딥; 딥; 딥; ) HANGUL SYLLABLE DIB B526;B526;1103 1175 11B9;B526;1103 1175 11B9; # (딦; 딦; 딦; 딦; 딦; ) HANGUL SYLLABLE DIBS B527;B527;1103 1175 11BA;B527;1103 1175 11BA; # (딧; 딧; 딧; 딧; 딧; ) HANGUL SYLLABLE DIS B528;B528;1103 1175 11BB;B528;1103 1175 11BB; # (딨; 딨; 딨; 딨; 딨; ) HANGUL SYLLABLE DISS B529;B529;1103 1175 11BC;B529;1103 1175 11BC; # (딩; 딩; 딩; 딩; 딩; ) HANGUL SYLLABLE DING B52A;B52A;1103 1175 11BD;B52A;1103 1175 11BD; # (딪; 딪; 딪; 딪; 딪; ) HANGUL SYLLABLE DIJ B52B;B52B;1103 1175 11BE;B52B;1103 1175 11BE; # (딫; 딫; 딫; 딫; 딫; ) HANGUL SYLLABLE DIC B52C;B52C;1103 1175 11BF;B52C;1103 1175 11BF; # (딬; 딬; 딬; 딬; 딬; ) HANGUL SYLLABLE DIK B52D;B52D;1103 1175 11C0;B52D;1103 1175 11C0; # (딭; 딭; 딭; 딭; 딭; ) HANGUL SYLLABLE DIT B52E;B52E;1103 1175 11C1;B52E;1103 1175 11C1; # (딮; 딮; 딮; 딮; 딮; ) HANGUL SYLLABLE DIP B52F;B52F;1103 1175 11C2;B52F;1103 1175 11C2; # (딯; 딯; 딯; 딯; 딯; ) HANGUL SYLLABLE DIH B530;B530;1104 1161;B530;1104 1161; # (따; 따; 따; 따; 따; ) HANGUL SYLLABLE DDA B531;B531;1104 1161 11A8;B531;1104 1161 11A8; # (딱; 딱; 딱; 딱; 딱; ) HANGUL SYLLABLE DDAG B532;B532;1104 1161 11A9;B532;1104 1161 11A9; # (딲; 딲; 딲; 딲; 딲; ) HANGUL SYLLABLE DDAGG B533;B533;1104 1161 11AA;B533;1104 1161 11AA; # (딳; 딳; 딳; 딳; 딳; ) HANGUL SYLLABLE DDAGS B534;B534;1104 1161 11AB;B534;1104 1161 11AB; # (딴; 딴; 딴; 딴; 딴; ) HANGUL SYLLABLE DDAN B535;B535;1104 1161 11AC;B535;1104 1161 11AC; # (딵; 딵; 딵; 딵; 딵; ) HANGUL SYLLABLE DDANJ B536;B536;1104 1161 11AD;B536;1104 1161 11AD; # (딶; 딶; 딶; 딶; 딶; ) HANGUL SYLLABLE DDANH B537;B537;1104 1161 11AE;B537;1104 1161 11AE; # (딷; 딷; 딷; 딷; 딷; ) HANGUL SYLLABLE DDAD B538;B538;1104 1161 11AF;B538;1104 1161 11AF; # (딸; 딸; 딸; 딸; 딸; ) HANGUL SYLLABLE DDAL B539;B539;1104 1161 11B0;B539;1104 1161 11B0; # (딹; 딹; 딹; 딹; 딹; ) HANGUL SYLLABLE DDALG B53A;B53A;1104 1161 11B1;B53A;1104 1161 11B1; # (딺; 딺; 딺; 딺; 딺; ) HANGUL SYLLABLE DDALM B53B;B53B;1104 1161 11B2;B53B;1104 1161 11B2; # (딻; 딻; 딻; 딻; 딻; ) HANGUL SYLLABLE DDALB B53C;B53C;1104 1161 11B3;B53C;1104 1161 11B3; # (딼; 딼; 딼; 딼; 딼; ) HANGUL SYLLABLE DDALS B53D;B53D;1104 1161 11B4;B53D;1104 1161 11B4; # (딽; 딽; 딽; 딽; 딽; ) HANGUL SYLLABLE DDALT B53E;B53E;1104 1161 11B5;B53E;1104 1161 11B5; # (딾; 딾; 딾; 딾; 딾; ) HANGUL SYLLABLE DDALP B53F;B53F;1104 1161 11B6;B53F;1104 1161 11B6; # (딿; 딿; 딿; 딿; 딿; ) HANGUL SYLLABLE DDALH B540;B540;1104 1161 11B7;B540;1104 1161 11B7; # (땀; 땀; 땀; 땀; 땀; ) HANGUL SYLLABLE DDAM B541;B541;1104 1161 11B8;B541;1104 1161 11B8; # (땁; 땁; 땁; 땁; 땁; ) HANGUL SYLLABLE DDAB B542;B542;1104 1161 11B9;B542;1104 1161 11B9; # (땂; 땂; 땂; 땂; 땂; ) HANGUL SYLLABLE DDABS B543;B543;1104 1161 11BA;B543;1104 1161 11BA; # (땃; 땃; 땃; 땃; 땃; ) HANGUL SYLLABLE DDAS B544;B544;1104 1161 11BB;B544;1104 1161 11BB; # (땄; 땄; 땄; 땄; 땄; ) HANGUL SYLLABLE DDASS B545;B545;1104 1161 11BC;B545;1104 1161 11BC; # (땅; 땅; 땅; 땅; 땅; ) HANGUL SYLLABLE DDANG B546;B546;1104 1161 11BD;B546;1104 1161 11BD; # (땆; 땆; 땆; 땆; 땆; ) HANGUL SYLLABLE DDAJ B547;B547;1104 1161 11BE;B547;1104 1161 11BE; # (땇; 땇; 땇; 땇; 땇; ) HANGUL SYLLABLE DDAC B548;B548;1104 1161 11BF;B548;1104 1161 11BF; # (땈; 땈; 땈; 땈; 땈; ) HANGUL SYLLABLE DDAK B549;B549;1104 1161 11C0;B549;1104 1161 11C0; # (땉; 땉; 땉; 땉; 땉; ) HANGUL SYLLABLE DDAT B54A;B54A;1104 1161 11C1;B54A;1104 1161 11C1; # (땊; 땊; 땊; 땊; 땊; ) HANGUL SYLLABLE DDAP B54B;B54B;1104 1161 11C2;B54B;1104 1161 11C2; # (땋; 땋; 땋; 땋; 땋; ) HANGUL SYLLABLE DDAH B54C;B54C;1104 1162;B54C;1104 1162; # (때; 때; 때; 때; 때; ) HANGUL SYLLABLE DDAE B54D;B54D;1104 1162 11A8;B54D;1104 1162 11A8; # (땍; 땍; 땍; 땍; 땍; ) HANGUL SYLLABLE DDAEG B54E;B54E;1104 1162 11A9;B54E;1104 1162 11A9; # (땎; 땎; 땎; 땎; 땎; ) HANGUL SYLLABLE DDAEGG B54F;B54F;1104 1162 11AA;B54F;1104 1162 11AA; # (땏; 땏; 땏; 땏; 땏; ) HANGUL SYLLABLE DDAEGS B550;B550;1104 1162 11AB;B550;1104 1162 11AB; # (땐; 땐; 땐; 땐; 땐; ) HANGUL SYLLABLE DDAEN B551;B551;1104 1162 11AC;B551;1104 1162 11AC; # (땑; 땑; 땑; 땑; 땑; ) HANGUL SYLLABLE DDAENJ B552;B552;1104 1162 11AD;B552;1104 1162 11AD; # (땒; 땒; 땒; 땒; 땒; ) HANGUL SYLLABLE DDAENH B553;B553;1104 1162 11AE;B553;1104 1162 11AE; # (땓; 땓; 땓; 땓; 땓; ) HANGUL SYLLABLE DDAED B554;B554;1104 1162 11AF;B554;1104 1162 11AF; # (땔; 땔; 땔; 땔; 땔; ) HANGUL SYLLABLE DDAEL B555;B555;1104 1162 11B0;B555;1104 1162 11B0; # (땕; 땕; 땕; 땕; 땕; ) HANGUL SYLLABLE DDAELG B556;B556;1104 1162 11B1;B556;1104 1162 11B1; # (땖; 땖; 땖; 땖; 땖; ) HANGUL SYLLABLE DDAELM B557;B557;1104 1162 11B2;B557;1104 1162 11B2; # (땗; 땗; 땗; 땗; 땗; ) HANGUL SYLLABLE DDAELB B558;B558;1104 1162 11B3;B558;1104 1162 11B3; # (땘; 땘; 땘; 땘; 땘; ) HANGUL SYLLABLE DDAELS B559;B559;1104 1162 11B4;B559;1104 1162 11B4; # (땙; 땙; 땙; 땙; 땙; ) HANGUL SYLLABLE DDAELT B55A;B55A;1104 1162 11B5;B55A;1104 1162 11B5; # (땚; 땚; 땚; 땚; 땚; ) HANGUL SYLLABLE DDAELP B55B;B55B;1104 1162 11B6;B55B;1104 1162 11B6; # (땛; 땛; 땛; 땛; 땛; ) HANGUL SYLLABLE DDAELH B55C;B55C;1104 1162 11B7;B55C;1104 1162 11B7; # (땜; 땜; 땜; 땜; 땜; ) HANGUL SYLLABLE DDAEM B55D;B55D;1104 1162 11B8;B55D;1104 1162 11B8; # (땝; 땝; 땝; 땝; 땝; ) HANGUL SYLLABLE DDAEB B55E;B55E;1104 1162 11B9;B55E;1104 1162 11B9; # (땞; 땞; 땞; 땞; 땞; ) HANGUL SYLLABLE DDAEBS B55F;B55F;1104 1162 11BA;B55F;1104 1162 11BA; # (땟; 땟; 땟; 땟; 땟; ) HANGUL SYLLABLE DDAES B560;B560;1104 1162 11BB;B560;1104 1162 11BB; # (땠; 땠; 땠; 땠; 땠; ) HANGUL SYLLABLE DDAESS B561;B561;1104 1162 11BC;B561;1104 1162 11BC; # (땡; 땡; 땡; 땡; 땡; ) HANGUL SYLLABLE DDAENG B562;B562;1104 1162 11BD;B562;1104 1162 11BD; # (땢; 땢; 땢; 땢; 땢; ) HANGUL SYLLABLE DDAEJ B563;B563;1104 1162 11BE;B563;1104 1162 11BE; # (땣; 땣; 땣; 땣; 땣; ) HANGUL SYLLABLE DDAEC B564;B564;1104 1162 11BF;B564;1104 1162 11BF; # (땤; 땤; 땤; 땤; 땤; ) HANGUL SYLLABLE DDAEK B565;B565;1104 1162 11C0;B565;1104 1162 11C0; # (땥; 땥; 땥; 땥; 땥; ) HANGUL SYLLABLE DDAET B566;B566;1104 1162 11C1;B566;1104 1162 11C1; # (땦; 땦; 땦; 땦; 땦; ) HANGUL SYLLABLE DDAEP B567;B567;1104 1162 11C2;B567;1104 1162 11C2; # (땧; 땧; 땧; 땧; 땧; ) HANGUL SYLLABLE DDAEH B568;B568;1104 1163;B568;1104 1163; # (땨; 땨; 땨; 땨; 땨; ) HANGUL SYLLABLE DDYA B569;B569;1104 1163 11A8;B569;1104 1163 11A8; # (땩; 땩; 땩; 땩; 땩; ) HANGUL SYLLABLE DDYAG B56A;B56A;1104 1163 11A9;B56A;1104 1163 11A9; # (땪; 땪; 땪; 땪; 땪; ) HANGUL SYLLABLE DDYAGG B56B;B56B;1104 1163 11AA;B56B;1104 1163 11AA; # (땫; 땫; 땫; 땫; 땫; ) HANGUL SYLLABLE DDYAGS B56C;B56C;1104 1163 11AB;B56C;1104 1163 11AB; # (땬; 땬; 땬; 땬; 땬; ) HANGUL SYLLABLE DDYAN B56D;B56D;1104 1163 11AC;B56D;1104 1163 11AC; # (땭; 땭; 땭; 땭; 땭; ) HANGUL SYLLABLE DDYANJ B56E;B56E;1104 1163 11AD;B56E;1104 1163 11AD; # (땮; 땮; 땮; 땮; 땮; ) HANGUL SYLLABLE DDYANH B56F;B56F;1104 1163 11AE;B56F;1104 1163 11AE; # (땯; 땯; 땯; 땯; 땯; ) HANGUL SYLLABLE DDYAD B570;B570;1104 1163 11AF;B570;1104 1163 11AF; # (땰; 땰; 땰; 땰; 땰; ) HANGUL SYLLABLE DDYAL B571;B571;1104 1163 11B0;B571;1104 1163 11B0; # (땱; 땱; 땱; 땱; 땱; ) HANGUL SYLLABLE DDYALG B572;B572;1104 1163 11B1;B572;1104 1163 11B1; # (땲; 땲; 땲; 땲; 땲; ) HANGUL SYLLABLE DDYALM B573;B573;1104 1163 11B2;B573;1104 1163 11B2; # (땳; 땳; 땳; 땳; 땳; ) HANGUL SYLLABLE DDYALB B574;B574;1104 1163 11B3;B574;1104 1163 11B3; # (땴; 땴; 땴; 땴; 땴; ) HANGUL SYLLABLE DDYALS B575;B575;1104 1163 11B4;B575;1104 1163 11B4; # (땵; 땵; 땵; 땵; 땵; ) HANGUL SYLLABLE DDYALT B576;B576;1104 1163 11B5;B576;1104 1163 11B5; # (땶; 땶; 땶; 땶; 땶; ) HANGUL SYLLABLE DDYALP B577;B577;1104 1163 11B6;B577;1104 1163 11B6; # (땷; 땷; 땷; 땷; 땷; ) HANGUL SYLLABLE DDYALH B578;B578;1104 1163 11B7;B578;1104 1163 11B7; # (땸; 땸; 땸; 땸; 땸; ) HANGUL SYLLABLE DDYAM B579;B579;1104 1163 11B8;B579;1104 1163 11B8; # (땹; 땹; 땹; 땹; 땹; ) HANGUL SYLLABLE DDYAB B57A;B57A;1104 1163 11B9;B57A;1104 1163 11B9; # (땺; 땺; 땺; 땺; 땺; ) HANGUL SYLLABLE DDYABS B57B;B57B;1104 1163 11BA;B57B;1104 1163 11BA; # (땻; 땻; 땻; 땻; 땻; ) HANGUL SYLLABLE DDYAS B57C;B57C;1104 1163 11BB;B57C;1104 1163 11BB; # (땼; 땼; 땼; 땼; 땼; ) HANGUL SYLLABLE DDYASS B57D;B57D;1104 1163 11BC;B57D;1104 1163 11BC; # (땽; 땽; 땽; 땽; 땽; ) HANGUL SYLLABLE DDYANG B57E;B57E;1104 1163 11BD;B57E;1104 1163 11BD; # (땾; 땾; 땾; 땾; 땾; ) HANGUL SYLLABLE DDYAJ B57F;B57F;1104 1163 11BE;B57F;1104 1163 11BE; # (땿; 땿; 땿; 땿; 땿; ) HANGUL SYLLABLE DDYAC B580;B580;1104 1163 11BF;B580;1104 1163 11BF; # (떀; 떀; 떀; 떀; 떀; ) HANGUL SYLLABLE DDYAK B581;B581;1104 1163 11C0;B581;1104 1163 11C0; # (떁; 떁; 떁; 떁; 떁; ) HANGUL SYLLABLE DDYAT B582;B582;1104 1163 11C1;B582;1104 1163 11C1; # (떂; 떂; 떂; 떂; 떂; ) HANGUL SYLLABLE DDYAP B583;B583;1104 1163 11C2;B583;1104 1163 11C2; # (떃; 떃; 떃; 떃; 떃; ) HANGUL SYLLABLE DDYAH B584;B584;1104 1164;B584;1104 1164; # (떄; 떄; 떄; 떄; 떄; ) HANGUL SYLLABLE DDYAE B585;B585;1104 1164 11A8;B585;1104 1164 11A8; # (떅; 떅; 떅; 떅; 떅; ) HANGUL SYLLABLE DDYAEG B586;B586;1104 1164 11A9;B586;1104 1164 11A9; # (떆; 떆; 떆; 떆; 떆; ) HANGUL SYLLABLE DDYAEGG B587;B587;1104 1164 11AA;B587;1104 1164 11AA; # (떇; 떇; 떇; 떇; 떇; ) HANGUL SYLLABLE DDYAEGS B588;B588;1104 1164 11AB;B588;1104 1164 11AB; # (떈; 떈; 떈; 떈; 떈; ) HANGUL SYLLABLE DDYAEN B589;B589;1104 1164 11AC;B589;1104 1164 11AC; # (떉; 떉; 떉; 떉; 떉; ) HANGUL SYLLABLE DDYAENJ B58A;B58A;1104 1164 11AD;B58A;1104 1164 11AD; # (떊; 떊; 떊; 떊; 떊; ) HANGUL SYLLABLE DDYAENH B58B;B58B;1104 1164 11AE;B58B;1104 1164 11AE; # (떋; 떋; 떋; 떋; 떋; ) HANGUL SYLLABLE DDYAED B58C;B58C;1104 1164 11AF;B58C;1104 1164 11AF; # (떌; 떌; 떌; 떌; 떌; ) HANGUL SYLLABLE DDYAEL B58D;B58D;1104 1164 11B0;B58D;1104 1164 11B0; # (떍; 떍; 떍; 떍; 떍; ) HANGUL SYLLABLE DDYAELG B58E;B58E;1104 1164 11B1;B58E;1104 1164 11B1; # (떎; 떎; 떎; 떎; 떎; ) HANGUL SYLLABLE DDYAELM B58F;B58F;1104 1164 11B2;B58F;1104 1164 11B2; # (떏; 떏; 떏; 떏; 떏; ) HANGUL SYLLABLE DDYAELB B590;B590;1104 1164 11B3;B590;1104 1164 11B3; # (떐; 떐; 떐; 떐; 떐; ) HANGUL SYLLABLE DDYAELS B591;B591;1104 1164 11B4;B591;1104 1164 11B4; # (떑; 떑; 떑; 떑; 떑; ) HANGUL SYLLABLE DDYAELT B592;B592;1104 1164 11B5;B592;1104 1164 11B5; # (떒; 떒; 떒; 떒; 떒; ) HANGUL SYLLABLE DDYAELP B593;B593;1104 1164 11B6;B593;1104 1164 11B6; # (떓; 떓; 떓; 떓; 떓; ) HANGUL SYLLABLE DDYAELH B594;B594;1104 1164 11B7;B594;1104 1164 11B7; # (떔; 떔; 떔; 떔; 떔; ) HANGUL SYLLABLE DDYAEM B595;B595;1104 1164 11B8;B595;1104 1164 11B8; # (떕; 떕; 떕; 떕; 떕; ) HANGUL SYLLABLE DDYAEB B596;B596;1104 1164 11B9;B596;1104 1164 11B9; # (떖; 떖; 떖; 떖; 떖; ) HANGUL SYLLABLE DDYAEBS B597;B597;1104 1164 11BA;B597;1104 1164 11BA; # (떗; 떗; 떗; 떗; 떗; ) HANGUL SYLLABLE DDYAES B598;B598;1104 1164 11BB;B598;1104 1164 11BB; # (떘; 떘; 떘; 떘; 떘; ) HANGUL SYLLABLE DDYAESS B599;B599;1104 1164 11BC;B599;1104 1164 11BC; # (떙; 떙; 떙; 떙; 떙; ) HANGUL SYLLABLE DDYAENG B59A;B59A;1104 1164 11BD;B59A;1104 1164 11BD; # (떚; 떚; 떚; 떚; 떚; ) HANGUL SYLLABLE DDYAEJ B59B;B59B;1104 1164 11BE;B59B;1104 1164 11BE; # (떛; 떛; 떛; 떛; 떛; ) HANGUL SYLLABLE DDYAEC B59C;B59C;1104 1164 11BF;B59C;1104 1164 11BF; # (떜; 떜; 떜; 떜; 떜; ) HANGUL SYLLABLE DDYAEK B59D;B59D;1104 1164 11C0;B59D;1104 1164 11C0; # (떝; 떝; 떝; 떝; 떝; ) HANGUL SYLLABLE DDYAET B59E;B59E;1104 1164 11C1;B59E;1104 1164 11C1; # (떞; 떞; 떞; 떞; 떞; ) HANGUL SYLLABLE DDYAEP B59F;B59F;1104 1164 11C2;B59F;1104 1164 11C2; # (떟; 떟; 떟; 떟; 떟; ) HANGUL SYLLABLE DDYAEH B5A0;B5A0;1104 1165;B5A0;1104 1165; # (떠; 떠; 떠; 떠; 떠; ) HANGUL SYLLABLE DDEO B5A1;B5A1;1104 1165 11A8;B5A1;1104 1165 11A8; # (떡; 떡; 떡; 떡; 떡; ) HANGUL SYLLABLE DDEOG B5A2;B5A2;1104 1165 11A9;B5A2;1104 1165 11A9; # (떢; 떢; 떢; 떢; 떢; ) HANGUL SYLLABLE DDEOGG B5A3;B5A3;1104 1165 11AA;B5A3;1104 1165 11AA; # (떣; 떣; 떣; 떣; 떣; ) HANGUL SYLLABLE DDEOGS B5A4;B5A4;1104 1165 11AB;B5A4;1104 1165 11AB; # (떤; 떤; 떤; 떤; 떤; ) HANGUL SYLLABLE DDEON B5A5;B5A5;1104 1165 11AC;B5A5;1104 1165 11AC; # (떥; 떥; 떥; 떥; 떥; ) HANGUL SYLLABLE DDEONJ B5A6;B5A6;1104 1165 11AD;B5A6;1104 1165 11AD; # (떦; 떦; 떦; 떦; 떦; ) HANGUL SYLLABLE DDEONH B5A7;B5A7;1104 1165 11AE;B5A7;1104 1165 11AE; # (떧; 떧; 떧; 떧; 떧; ) HANGUL SYLLABLE DDEOD B5A8;B5A8;1104 1165 11AF;B5A8;1104 1165 11AF; # (떨; 떨; 떨; 떨; 떨; ) HANGUL SYLLABLE DDEOL B5A9;B5A9;1104 1165 11B0;B5A9;1104 1165 11B0; # (떩; 떩; 떩; 떩; 떩; ) HANGUL SYLLABLE DDEOLG B5AA;B5AA;1104 1165 11B1;B5AA;1104 1165 11B1; # (떪; 떪; 떪; 떪; 떪; ) HANGUL SYLLABLE DDEOLM B5AB;B5AB;1104 1165 11B2;B5AB;1104 1165 11B2; # (떫; 떫; 떫; 떫; 떫; ) HANGUL SYLLABLE DDEOLB B5AC;B5AC;1104 1165 11B3;B5AC;1104 1165 11B3; # (떬; 떬; 떬; 떬; 떬; ) HANGUL SYLLABLE DDEOLS B5AD;B5AD;1104 1165 11B4;B5AD;1104 1165 11B4; # (떭; 떭; 떭; 떭; 떭; ) HANGUL SYLLABLE DDEOLT B5AE;B5AE;1104 1165 11B5;B5AE;1104 1165 11B5; # (떮; 떮; 떮; 떮; 떮; ) HANGUL SYLLABLE DDEOLP B5AF;B5AF;1104 1165 11B6;B5AF;1104 1165 11B6; # (떯; 떯; 떯; 떯; 떯; ) HANGUL SYLLABLE DDEOLH B5B0;B5B0;1104 1165 11B7;B5B0;1104 1165 11B7; # (떰; 떰; 떰; 떰; 떰; ) HANGUL SYLLABLE DDEOM B5B1;B5B1;1104 1165 11B8;B5B1;1104 1165 11B8; # (떱; 떱; 떱; 떱; 떱; ) HANGUL SYLLABLE DDEOB B5B2;B5B2;1104 1165 11B9;B5B2;1104 1165 11B9; # (떲; 떲; 떲; 떲; 떲; ) HANGUL SYLLABLE DDEOBS B5B3;B5B3;1104 1165 11BA;B5B3;1104 1165 11BA; # (떳; 떳; 떳; 떳; 떳; ) HANGUL SYLLABLE DDEOS B5B4;B5B4;1104 1165 11BB;B5B4;1104 1165 11BB; # (떴; 떴; 떴; 떴; 떴; ) HANGUL SYLLABLE DDEOSS B5B5;B5B5;1104 1165 11BC;B5B5;1104 1165 11BC; # (떵; 떵; 떵; 떵; 떵; ) HANGUL SYLLABLE DDEONG B5B6;B5B6;1104 1165 11BD;B5B6;1104 1165 11BD; # (떶; 떶; 떶; 떶; 떶; ) HANGUL SYLLABLE DDEOJ B5B7;B5B7;1104 1165 11BE;B5B7;1104 1165 11BE; # (떷; 떷; 떷; 떷; 떷; ) HANGUL SYLLABLE DDEOC B5B8;B5B8;1104 1165 11BF;B5B8;1104 1165 11BF; # (떸; 떸; 떸; 떸; 떸; ) HANGUL SYLLABLE DDEOK B5B9;B5B9;1104 1165 11C0;B5B9;1104 1165 11C0; # (떹; 떹; 떹; 떹; 떹; ) HANGUL SYLLABLE DDEOT B5BA;B5BA;1104 1165 11C1;B5BA;1104 1165 11C1; # (떺; 떺; 떺; 떺; 떺; ) HANGUL SYLLABLE DDEOP B5BB;B5BB;1104 1165 11C2;B5BB;1104 1165 11C2; # (떻; 떻; 떻; 떻; 떻; ) HANGUL SYLLABLE DDEOH B5BC;B5BC;1104 1166;B5BC;1104 1166; # (떼; 떼; 떼; 떼; 떼; ) HANGUL SYLLABLE DDE B5BD;B5BD;1104 1166 11A8;B5BD;1104 1166 11A8; # (떽; 떽; 떽; 떽; 떽; ) HANGUL SYLLABLE DDEG B5BE;B5BE;1104 1166 11A9;B5BE;1104 1166 11A9; # (떾; 떾; 떾; 떾; 떾; ) HANGUL SYLLABLE DDEGG B5BF;B5BF;1104 1166 11AA;B5BF;1104 1166 11AA; # (떿; 떿; 떿; 떿; 떿; ) HANGUL SYLLABLE DDEGS B5C0;B5C0;1104 1166 11AB;B5C0;1104 1166 11AB; # (뗀; 뗀; 뗀; 뗀; 뗀; ) HANGUL SYLLABLE DDEN B5C1;B5C1;1104 1166 11AC;B5C1;1104 1166 11AC; # (뗁; 뗁; 뗁; 뗁; 뗁; ) HANGUL SYLLABLE DDENJ B5C2;B5C2;1104 1166 11AD;B5C2;1104 1166 11AD; # (뗂; 뗂; 뗂; 뗂; 뗂; ) HANGUL SYLLABLE DDENH B5C3;B5C3;1104 1166 11AE;B5C3;1104 1166 11AE; # (뗃; 뗃; 뗃; 뗃; 뗃; ) HANGUL SYLLABLE DDED B5C4;B5C4;1104 1166 11AF;B5C4;1104 1166 11AF; # (뗄; 뗄; 뗄; 뗄; 뗄; ) HANGUL SYLLABLE DDEL B5C5;B5C5;1104 1166 11B0;B5C5;1104 1166 11B0; # (뗅; 뗅; 뗅; 뗅; 뗅; ) HANGUL SYLLABLE DDELG B5C6;B5C6;1104 1166 11B1;B5C6;1104 1166 11B1; # (뗆; 뗆; 뗆; 뗆; 뗆; ) HANGUL SYLLABLE DDELM B5C7;B5C7;1104 1166 11B2;B5C7;1104 1166 11B2; # (뗇; 뗇; 뗇; 뗇; 뗇; ) HANGUL SYLLABLE DDELB B5C8;B5C8;1104 1166 11B3;B5C8;1104 1166 11B3; # (뗈; 뗈; 뗈; 뗈; 뗈; ) HANGUL SYLLABLE DDELS B5C9;B5C9;1104 1166 11B4;B5C9;1104 1166 11B4; # (뗉; 뗉; 뗉; 뗉; 뗉; ) HANGUL SYLLABLE DDELT B5CA;B5CA;1104 1166 11B5;B5CA;1104 1166 11B5; # (뗊; 뗊; 뗊; 뗊; 뗊; ) HANGUL SYLLABLE DDELP B5CB;B5CB;1104 1166 11B6;B5CB;1104 1166 11B6; # (뗋; 뗋; 뗋; 뗋; 뗋; ) HANGUL SYLLABLE DDELH B5CC;B5CC;1104 1166 11B7;B5CC;1104 1166 11B7; # (뗌; 뗌; 뗌; 뗌; 뗌; ) HANGUL SYLLABLE DDEM B5CD;B5CD;1104 1166 11B8;B5CD;1104 1166 11B8; # (뗍; 뗍; 뗍; 뗍; 뗍; ) HANGUL SYLLABLE DDEB B5CE;B5CE;1104 1166 11B9;B5CE;1104 1166 11B9; # (뗎; 뗎; 뗎; 뗎; 뗎; ) HANGUL SYLLABLE DDEBS B5CF;B5CF;1104 1166 11BA;B5CF;1104 1166 11BA; # (뗏; 뗏; 뗏; 뗏; 뗏; ) HANGUL SYLLABLE DDES B5D0;B5D0;1104 1166 11BB;B5D0;1104 1166 11BB; # (뗐; 뗐; 뗐; 뗐; 뗐; ) HANGUL SYLLABLE DDESS B5D1;B5D1;1104 1166 11BC;B5D1;1104 1166 11BC; # (뗑; 뗑; 뗑; 뗑; 뗑; ) HANGUL SYLLABLE DDENG B5D2;B5D2;1104 1166 11BD;B5D2;1104 1166 11BD; # (뗒; 뗒; 뗒; 뗒; 뗒; ) HANGUL SYLLABLE DDEJ B5D3;B5D3;1104 1166 11BE;B5D3;1104 1166 11BE; # (뗓; 뗓; 뗓; 뗓; 뗓; ) HANGUL SYLLABLE DDEC B5D4;B5D4;1104 1166 11BF;B5D4;1104 1166 11BF; # (뗔; 뗔; 뗔; 뗔; 뗔; ) HANGUL SYLLABLE DDEK B5D5;B5D5;1104 1166 11C0;B5D5;1104 1166 11C0; # (뗕; 뗕; 뗕; 뗕; 뗕; ) HANGUL SYLLABLE DDET B5D6;B5D6;1104 1166 11C1;B5D6;1104 1166 11C1; # (뗖; 뗖; 뗖; 뗖; 뗖; ) HANGUL SYLLABLE DDEP B5D7;B5D7;1104 1166 11C2;B5D7;1104 1166 11C2; # (뗗; 뗗; 뗗; 뗗; 뗗; ) HANGUL SYLLABLE DDEH B5D8;B5D8;1104 1167;B5D8;1104 1167; # (뗘; 뗘; 뗘; 뗘; 뗘; ) HANGUL SYLLABLE DDYEO B5D9;B5D9;1104 1167 11A8;B5D9;1104 1167 11A8; # (뗙; 뗙; 뗙; 뗙; 뗙; ) HANGUL SYLLABLE DDYEOG B5DA;B5DA;1104 1167 11A9;B5DA;1104 1167 11A9; # (뗚; 뗚; 뗚; 뗚; 뗚; ) HANGUL SYLLABLE DDYEOGG B5DB;B5DB;1104 1167 11AA;B5DB;1104 1167 11AA; # (뗛; 뗛; 뗛; 뗛; 뗛; ) HANGUL SYLLABLE DDYEOGS B5DC;B5DC;1104 1167 11AB;B5DC;1104 1167 11AB; # (뗜; 뗜; 뗜; 뗜; 뗜; ) HANGUL SYLLABLE DDYEON B5DD;B5DD;1104 1167 11AC;B5DD;1104 1167 11AC; # (뗝; 뗝; 뗝; 뗝; 뗝; ) HANGUL SYLLABLE DDYEONJ B5DE;B5DE;1104 1167 11AD;B5DE;1104 1167 11AD; # (뗞; 뗞; 뗞; 뗞; 뗞; ) HANGUL SYLLABLE DDYEONH B5DF;B5DF;1104 1167 11AE;B5DF;1104 1167 11AE; # (뗟; 뗟; 뗟; 뗟; 뗟; ) HANGUL SYLLABLE DDYEOD B5E0;B5E0;1104 1167 11AF;B5E0;1104 1167 11AF; # (뗠; 뗠; 뗠; 뗠; 뗠; ) HANGUL SYLLABLE DDYEOL B5E1;B5E1;1104 1167 11B0;B5E1;1104 1167 11B0; # (뗡; 뗡; 뗡; 뗡; 뗡; ) HANGUL SYLLABLE DDYEOLG B5E2;B5E2;1104 1167 11B1;B5E2;1104 1167 11B1; # (뗢; 뗢; 뗢; 뗢; 뗢; ) HANGUL SYLLABLE DDYEOLM B5E3;B5E3;1104 1167 11B2;B5E3;1104 1167 11B2; # (뗣; 뗣; 뗣; 뗣; 뗣; ) HANGUL SYLLABLE DDYEOLB B5E4;B5E4;1104 1167 11B3;B5E4;1104 1167 11B3; # (뗤; 뗤; 뗤; 뗤; 뗤; ) HANGUL SYLLABLE DDYEOLS B5E5;B5E5;1104 1167 11B4;B5E5;1104 1167 11B4; # (뗥; 뗥; 뗥; 뗥; 뗥; ) HANGUL SYLLABLE DDYEOLT B5E6;B5E6;1104 1167 11B5;B5E6;1104 1167 11B5; # (뗦; 뗦; 뗦; 뗦; 뗦; ) HANGUL SYLLABLE DDYEOLP B5E7;B5E7;1104 1167 11B6;B5E7;1104 1167 11B6; # (뗧; 뗧; 뗧; 뗧; 뗧; ) HANGUL SYLLABLE DDYEOLH B5E8;B5E8;1104 1167 11B7;B5E8;1104 1167 11B7; # (뗨; 뗨; 뗨; 뗨; 뗨; ) HANGUL SYLLABLE DDYEOM B5E9;B5E9;1104 1167 11B8;B5E9;1104 1167 11B8; # (뗩; 뗩; 뗩; 뗩; 뗩; ) HANGUL SYLLABLE DDYEOB B5EA;B5EA;1104 1167 11B9;B5EA;1104 1167 11B9; # (뗪; 뗪; 뗪; 뗪; 뗪; ) HANGUL SYLLABLE DDYEOBS B5EB;B5EB;1104 1167 11BA;B5EB;1104 1167 11BA; # (뗫; 뗫; 뗫; 뗫; 뗫; ) HANGUL SYLLABLE DDYEOS B5EC;B5EC;1104 1167 11BB;B5EC;1104 1167 11BB; # (뗬; 뗬; 뗬; 뗬; 뗬; ) HANGUL SYLLABLE DDYEOSS B5ED;B5ED;1104 1167 11BC;B5ED;1104 1167 11BC; # (뗭; 뗭; 뗭; 뗭; 뗭; ) HANGUL SYLLABLE DDYEONG B5EE;B5EE;1104 1167 11BD;B5EE;1104 1167 11BD; # (뗮; 뗮; 뗮; 뗮; 뗮; ) HANGUL SYLLABLE DDYEOJ B5EF;B5EF;1104 1167 11BE;B5EF;1104 1167 11BE; # (뗯; 뗯; 뗯; 뗯; 뗯; ) HANGUL SYLLABLE DDYEOC B5F0;B5F0;1104 1167 11BF;B5F0;1104 1167 11BF; # (뗰; 뗰; 뗰; 뗰; 뗰; ) HANGUL SYLLABLE DDYEOK B5F1;B5F1;1104 1167 11C0;B5F1;1104 1167 11C0; # (뗱; 뗱; 뗱; 뗱; 뗱; ) HANGUL SYLLABLE DDYEOT B5F2;B5F2;1104 1167 11C1;B5F2;1104 1167 11C1; # (뗲; 뗲; 뗲; 뗲; 뗲; ) HANGUL SYLLABLE DDYEOP B5F3;B5F3;1104 1167 11C2;B5F3;1104 1167 11C2; # (뗳; 뗳; 뗳; 뗳; 뗳; ) HANGUL SYLLABLE DDYEOH B5F4;B5F4;1104 1168;B5F4;1104 1168; # (뗴; 뗴; 뗴; 뗴; 뗴; ) HANGUL SYLLABLE DDYE B5F5;B5F5;1104 1168 11A8;B5F5;1104 1168 11A8; # (뗵; 뗵; 뗵; 뗵; 뗵; ) HANGUL SYLLABLE DDYEG B5F6;B5F6;1104 1168 11A9;B5F6;1104 1168 11A9; # (뗶; 뗶; 뗶; 뗶; 뗶; ) HANGUL SYLLABLE DDYEGG B5F7;B5F7;1104 1168 11AA;B5F7;1104 1168 11AA; # (뗷; 뗷; 뗷; 뗷; 뗷; ) HANGUL SYLLABLE DDYEGS B5F8;B5F8;1104 1168 11AB;B5F8;1104 1168 11AB; # (뗸; 뗸; 뗸; 뗸; 뗸; ) HANGUL SYLLABLE DDYEN B5F9;B5F9;1104 1168 11AC;B5F9;1104 1168 11AC; # (뗹; 뗹; 뗹; 뗹; 뗹; ) HANGUL SYLLABLE DDYENJ B5FA;B5FA;1104 1168 11AD;B5FA;1104 1168 11AD; # (뗺; 뗺; 뗺; 뗺; 뗺; ) HANGUL SYLLABLE DDYENH B5FB;B5FB;1104 1168 11AE;B5FB;1104 1168 11AE; # (뗻; 뗻; 뗻; 뗻; 뗻; ) HANGUL SYLLABLE DDYED B5FC;B5FC;1104 1168 11AF;B5FC;1104 1168 11AF; # (뗼; 뗼; 뗼; 뗼; 뗼; ) HANGUL SYLLABLE DDYEL B5FD;B5FD;1104 1168 11B0;B5FD;1104 1168 11B0; # (뗽; 뗽; 뗽; 뗽; 뗽; ) HANGUL SYLLABLE DDYELG B5FE;B5FE;1104 1168 11B1;B5FE;1104 1168 11B1; # (뗾; 뗾; 뗾; 뗾; 뗾; ) HANGUL SYLLABLE DDYELM B5FF;B5FF;1104 1168 11B2;B5FF;1104 1168 11B2; # (뗿; 뗿; 뗿; 뗿; 뗿; ) HANGUL SYLLABLE DDYELB B600;B600;1104 1168 11B3;B600;1104 1168 11B3; # (똀; 똀; 똀; 똀; 똀; ) HANGUL SYLLABLE DDYELS B601;B601;1104 1168 11B4;B601;1104 1168 11B4; # (똁; 똁; 똁; 똁; 똁; ) HANGUL SYLLABLE DDYELT B602;B602;1104 1168 11B5;B602;1104 1168 11B5; # (똂; 똂; 똂; 똂; 똂; ) HANGUL SYLLABLE DDYELP B603;B603;1104 1168 11B6;B603;1104 1168 11B6; # (똃; 똃; 똃; 똃; 똃; ) HANGUL SYLLABLE DDYELH B604;B604;1104 1168 11B7;B604;1104 1168 11B7; # (똄; 똄; 똄; 똄; 똄; ) HANGUL SYLLABLE DDYEM B605;B605;1104 1168 11B8;B605;1104 1168 11B8; # (똅; 똅; 똅; 똅; 똅; ) HANGUL SYLLABLE DDYEB B606;B606;1104 1168 11B9;B606;1104 1168 11B9; # (똆; 똆; 똆; 똆; 똆; ) HANGUL SYLLABLE DDYEBS B607;B607;1104 1168 11BA;B607;1104 1168 11BA; # (똇; 똇; 똇; 똇; 똇; ) HANGUL SYLLABLE DDYES B608;B608;1104 1168 11BB;B608;1104 1168 11BB; # (똈; 똈; 똈; 똈; 똈; ) HANGUL SYLLABLE DDYESS B609;B609;1104 1168 11BC;B609;1104 1168 11BC; # (똉; 똉; 똉; 똉; 똉; ) HANGUL SYLLABLE DDYENG B60A;B60A;1104 1168 11BD;B60A;1104 1168 11BD; # (똊; 똊; 똊; 똊; 똊; ) HANGUL SYLLABLE DDYEJ B60B;B60B;1104 1168 11BE;B60B;1104 1168 11BE; # (똋; 똋; 똋; 똋; 똋; ) HANGUL SYLLABLE DDYEC B60C;B60C;1104 1168 11BF;B60C;1104 1168 11BF; # (똌; 똌; 똌; 똌; 똌; ) HANGUL SYLLABLE DDYEK B60D;B60D;1104 1168 11C0;B60D;1104 1168 11C0; # (똍; 똍; 똍; 똍; 똍; ) HANGUL SYLLABLE DDYET B60E;B60E;1104 1168 11C1;B60E;1104 1168 11C1; # (똎; 똎; 똎; 똎; 똎; ) HANGUL SYLLABLE DDYEP B60F;B60F;1104 1168 11C2;B60F;1104 1168 11C2; # (똏; 똏; 똏; 똏; 똏; ) HANGUL SYLLABLE DDYEH B610;B610;1104 1169;B610;1104 1169; # (또; 또; 또; 또; 또; ) HANGUL SYLLABLE DDO B611;B611;1104 1169 11A8;B611;1104 1169 11A8; # (똑; 똑; 똑; 똑; 똑; ) HANGUL SYLLABLE DDOG B612;B612;1104 1169 11A9;B612;1104 1169 11A9; # (똒; 똒; 똒; 똒; 똒; ) HANGUL SYLLABLE DDOGG B613;B613;1104 1169 11AA;B613;1104 1169 11AA; # (똓; 똓; 똓; 똓; 똓; ) HANGUL SYLLABLE DDOGS B614;B614;1104 1169 11AB;B614;1104 1169 11AB; # (똔; 똔; 똔; 똔; 똔; ) HANGUL SYLLABLE DDON B615;B615;1104 1169 11AC;B615;1104 1169 11AC; # (똕; 똕; 똕; 똕; 똕; ) HANGUL SYLLABLE DDONJ B616;B616;1104 1169 11AD;B616;1104 1169 11AD; # (똖; 똖; 똖; 똖; 똖; ) HANGUL SYLLABLE DDONH B617;B617;1104 1169 11AE;B617;1104 1169 11AE; # (똗; 똗; 똗; 똗; 똗; ) HANGUL SYLLABLE DDOD B618;B618;1104 1169 11AF;B618;1104 1169 11AF; # (똘; 똘; 똘; 똘; 똘; ) HANGUL SYLLABLE DDOL B619;B619;1104 1169 11B0;B619;1104 1169 11B0; # (똙; 똙; 똙; 똙; 똙; ) HANGUL SYLLABLE DDOLG B61A;B61A;1104 1169 11B1;B61A;1104 1169 11B1; # (똚; 똚; 똚; 똚; 똚; ) HANGUL SYLLABLE DDOLM B61B;B61B;1104 1169 11B2;B61B;1104 1169 11B2; # (똛; 똛; 똛; 똛; 똛; ) HANGUL SYLLABLE DDOLB B61C;B61C;1104 1169 11B3;B61C;1104 1169 11B3; # (똜; 똜; 똜; 똜; 똜; ) HANGUL SYLLABLE DDOLS B61D;B61D;1104 1169 11B4;B61D;1104 1169 11B4; # (똝; 똝; 똝; 똝; 똝; ) HANGUL SYLLABLE DDOLT B61E;B61E;1104 1169 11B5;B61E;1104 1169 11B5; # (똞; 똞; 똞; 똞; 똞; ) HANGUL SYLLABLE DDOLP B61F;B61F;1104 1169 11B6;B61F;1104 1169 11B6; # (똟; 똟; 똟; 똟; 똟; ) HANGUL SYLLABLE DDOLH B620;B620;1104 1169 11B7;B620;1104 1169 11B7; # (똠; 똠; 똠; 똠; 똠; ) HANGUL SYLLABLE DDOM B621;B621;1104 1169 11B8;B621;1104 1169 11B8; # (똡; 똡; 똡; 똡; 똡; ) HANGUL SYLLABLE DDOB B622;B622;1104 1169 11B9;B622;1104 1169 11B9; # (똢; 똢; 똢; 똢; 똢; ) HANGUL SYLLABLE DDOBS B623;B623;1104 1169 11BA;B623;1104 1169 11BA; # (똣; 똣; 똣; 똣; 똣; ) HANGUL SYLLABLE DDOS B624;B624;1104 1169 11BB;B624;1104 1169 11BB; # (똤; 똤; 똤; 똤; 똤; ) HANGUL SYLLABLE DDOSS B625;B625;1104 1169 11BC;B625;1104 1169 11BC; # (똥; 똥; 똥; 똥; 똥; ) HANGUL SYLLABLE DDONG B626;B626;1104 1169 11BD;B626;1104 1169 11BD; # (똦; 똦; 똦; 똦; 똦; ) HANGUL SYLLABLE DDOJ B627;B627;1104 1169 11BE;B627;1104 1169 11BE; # (똧; 똧; 똧; 똧; 똧; ) HANGUL SYLLABLE DDOC B628;B628;1104 1169 11BF;B628;1104 1169 11BF; # (똨; 똨; 똨; 똨; 똨; ) HANGUL SYLLABLE DDOK B629;B629;1104 1169 11C0;B629;1104 1169 11C0; # (똩; 똩; 똩; 똩; 똩; ) HANGUL SYLLABLE DDOT B62A;B62A;1104 1169 11C1;B62A;1104 1169 11C1; # (똪; 똪; 똪; 똪; 똪; ) HANGUL SYLLABLE DDOP B62B;B62B;1104 1169 11C2;B62B;1104 1169 11C2; # (똫; 똫; 똫; 똫; 똫; ) HANGUL SYLLABLE DDOH B62C;B62C;1104 116A;B62C;1104 116A; # (똬; 똬; 똬; 똬; 똬; ) HANGUL SYLLABLE DDWA B62D;B62D;1104 116A 11A8;B62D;1104 116A 11A8; # (똭; 똭; 똭; 똭; 똭; ) HANGUL SYLLABLE DDWAG B62E;B62E;1104 116A 11A9;B62E;1104 116A 11A9; # (똮; 똮; 똮; 똮; 똮; ) HANGUL SYLLABLE DDWAGG B62F;B62F;1104 116A 11AA;B62F;1104 116A 11AA; # (똯; 똯; 똯; 똯; 똯; ) HANGUL SYLLABLE DDWAGS B630;B630;1104 116A 11AB;B630;1104 116A 11AB; # (똰; 똰; 똰; 똰; 똰; ) HANGUL SYLLABLE DDWAN B631;B631;1104 116A 11AC;B631;1104 116A 11AC; # (똱; 똱; 똱; 똱; 똱; ) HANGUL SYLLABLE DDWANJ B632;B632;1104 116A 11AD;B632;1104 116A 11AD; # (똲; 똲; 똲; 똲; 똲; ) HANGUL SYLLABLE DDWANH B633;B633;1104 116A 11AE;B633;1104 116A 11AE; # (똳; 똳; 똳; 똳; 똳; ) HANGUL SYLLABLE DDWAD B634;B634;1104 116A 11AF;B634;1104 116A 11AF; # (똴; 똴; 똴; 똴; 똴; ) HANGUL SYLLABLE DDWAL B635;B635;1104 116A 11B0;B635;1104 116A 11B0; # (똵; 똵; 똵; 똵; 똵; ) HANGUL SYLLABLE DDWALG B636;B636;1104 116A 11B1;B636;1104 116A 11B1; # (똶; 똶; 똶; 똶; 똶; ) HANGUL SYLLABLE DDWALM B637;B637;1104 116A 11B2;B637;1104 116A 11B2; # (똷; 똷; 똷; 똷; 똷; ) HANGUL SYLLABLE DDWALB B638;B638;1104 116A 11B3;B638;1104 116A 11B3; # (똸; 똸; 똸; 똸; 똸; ) HANGUL SYLLABLE DDWALS B639;B639;1104 116A 11B4;B639;1104 116A 11B4; # (똹; 똹; 똹; 똹; 똹; ) HANGUL SYLLABLE DDWALT B63A;B63A;1104 116A 11B5;B63A;1104 116A 11B5; # (똺; 똺; 똺; 똺; 똺; ) HANGUL SYLLABLE DDWALP B63B;B63B;1104 116A 11B6;B63B;1104 116A 11B6; # (똻; 똻; 똻; 똻; 똻; ) HANGUL SYLLABLE DDWALH B63C;B63C;1104 116A 11B7;B63C;1104 116A 11B7; # (똼; 똼; 똼; 똼; 똼; ) HANGUL SYLLABLE DDWAM B63D;B63D;1104 116A 11B8;B63D;1104 116A 11B8; # (똽; 똽; 똽; 똽; 똽; ) HANGUL SYLLABLE DDWAB B63E;B63E;1104 116A 11B9;B63E;1104 116A 11B9; # (똾; 똾; 똾; 똾; 똾; ) HANGUL SYLLABLE DDWABS B63F;B63F;1104 116A 11BA;B63F;1104 116A 11BA; # (똿; 똿; 똿; 똿; 똿; ) HANGUL SYLLABLE DDWAS B640;B640;1104 116A 11BB;B640;1104 116A 11BB; # (뙀; 뙀; 뙀; 뙀; 뙀; ) HANGUL SYLLABLE DDWASS B641;B641;1104 116A 11BC;B641;1104 116A 11BC; # (뙁; 뙁; 뙁; 뙁; 뙁; ) HANGUL SYLLABLE DDWANG B642;B642;1104 116A 11BD;B642;1104 116A 11BD; # (뙂; 뙂; 뙂; 뙂; 뙂; ) HANGUL SYLLABLE DDWAJ B643;B643;1104 116A 11BE;B643;1104 116A 11BE; # (뙃; 뙃; 뙃; 뙃; 뙃; ) HANGUL SYLLABLE DDWAC B644;B644;1104 116A 11BF;B644;1104 116A 11BF; # (뙄; 뙄; 뙄; 뙄; 뙄; ) HANGUL SYLLABLE DDWAK B645;B645;1104 116A 11C0;B645;1104 116A 11C0; # (뙅; 뙅; 뙅; 뙅; 뙅; ) HANGUL SYLLABLE DDWAT B646;B646;1104 116A 11C1;B646;1104 116A 11C1; # (뙆; 뙆; 뙆; 뙆; 뙆; ) HANGUL SYLLABLE DDWAP B647;B647;1104 116A 11C2;B647;1104 116A 11C2; # (뙇; 뙇; 뙇; 뙇; 뙇; ) HANGUL SYLLABLE DDWAH B648;B648;1104 116B;B648;1104 116B; # (뙈; 뙈; 뙈; 뙈; 뙈; ) HANGUL SYLLABLE DDWAE B649;B649;1104 116B 11A8;B649;1104 116B 11A8; # (뙉; 뙉; 뙉; 뙉; 뙉; ) HANGUL SYLLABLE DDWAEG B64A;B64A;1104 116B 11A9;B64A;1104 116B 11A9; # (뙊; 뙊; 뙊; 뙊; 뙊; ) HANGUL SYLLABLE DDWAEGG B64B;B64B;1104 116B 11AA;B64B;1104 116B 11AA; # (뙋; 뙋; 뙋; 뙋; 뙋; ) HANGUL SYLLABLE DDWAEGS B64C;B64C;1104 116B 11AB;B64C;1104 116B 11AB; # (뙌; 뙌; 뙌; 뙌; 뙌; ) HANGUL SYLLABLE DDWAEN B64D;B64D;1104 116B 11AC;B64D;1104 116B 11AC; # (뙍; 뙍; 뙍; 뙍; 뙍; ) HANGUL SYLLABLE DDWAENJ B64E;B64E;1104 116B 11AD;B64E;1104 116B 11AD; # (뙎; 뙎; 뙎; 뙎; 뙎; ) HANGUL SYLLABLE DDWAENH B64F;B64F;1104 116B 11AE;B64F;1104 116B 11AE; # (뙏; 뙏; 뙏; 뙏; 뙏; ) HANGUL SYLLABLE DDWAED B650;B650;1104 116B 11AF;B650;1104 116B 11AF; # (뙐; 뙐; 뙐; 뙐; 뙐; ) HANGUL SYLLABLE DDWAEL B651;B651;1104 116B 11B0;B651;1104 116B 11B0; # (뙑; 뙑; 뙑; 뙑; 뙑; ) HANGUL SYLLABLE DDWAELG B652;B652;1104 116B 11B1;B652;1104 116B 11B1; # (뙒; 뙒; 뙒; 뙒; 뙒; ) HANGUL SYLLABLE DDWAELM B653;B653;1104 116B 11B2;B653;1104 116B 11B2; # (뙓; 뙓; 뙓; 뙓; 뙓; ) HANGUL SYLLABLE DDWAELB B654;B654;1104 116B 11B3;B654;1104 116B 11B3; # (뙔; 뙔; 뙔; 뙔; 뙔; ) HANGUL SYLLABLE DDWAELS B655;B655;1104 116B 11B4;B655;1104 116B 11B4; # (뙕; 뙕; 뙕; 뙕; 뙕; ) HANGUL SYLLABLE DDWAELT B656;B656;1104 116B 11B5;B656;1104 116B 11B5; # (뙖; 뙖; 뙖; 뙖; 뙖; ) HANGUL SYLLABLE DDWAELP B657;B657;1104 116B 11B6;B657;1104 116B 11B6; # (뙗; 뙗; 뙗; 뙗; 뙗; ) HANGUL SYLLABLE DDWAELH B658;B658;1104 116B 11B7;B658;1104 116B 11B7; # (뙘; 뙘; 뙘; 뙘; 뙘; ) HANGUL SYLLABLE DDWAEM B659;B659;1104 116B 11B8;B659;1104 116B 11B8; # (뙙; 뙙; 뙙; 뙙; 뙙; ) HANGUL SYLLABLE DDWAEB B65A;B65A;1104 116B 11B9;B65A;1104 116B 11B9; # (뙚; 뙚; 뙚; 뙚; 뙚; ) HANGUL SYLLABLE DDWAEBS B65B;B65B;1104 116B 11BA;B65B;1104 116B 11BA; # (뙛; 뙛; 뙛; 뙛; 뙛; ) HANGUL SYLLABLE DDWAES B65C;B65C;1104 116B 11BB;B65C;1104 116B 11BB; # (뙜; 뙜; 뙜; 뙜; 뙜; ) HANGUL SYLLABLE DDWAESS B65D;B65D;1104 116B 11BC;B65D;1104 116B 11BC; # (뙝; 뙝; 뙝; 뙝; 뙝; ) HANGUL SYLLABLE DDWAENG B65E;B65E;1104 116B 11BD;B65E;1104 116B 11BD; # (뙞; 뙞; 뙞; 뙞; 뙞; ) HANGUL SYLLABLE DDWAEJ B65F;B65F;1104 116B 11BE;B65F;1104 116B 11BE; # (뙟; 뙟; 뙟; 뙟; 뙟; ) HANGUL SYLLABLE DDWAEC B660;B660;1104 116B 11BF;B660;1104 116B 11BF; # (뙠; 뙠; 뙠; 뙠; 뙠; ) HANGUL SYLLABLE DDWAEK B661;B661;1104 116B 11C0;B661;1104 116B 11C0; # (뙡; 뙡; 뙡; 뙡; 뙡; ) HANGUL SYLLABLE DDWAET B662;B662;1104 116B 11C1;B662;1104 116B 11C1; # (뙢; 뙢; 뙢; 뙢; 뙢; ) HANGUL SYLLABLE DDWAEP B663;B663;1104 116B 11C2;B663;1104 116B 11C2; # (뙣; 뙣; 뙣; 뙣; 뙣; ) HANGUL SYLLABLE DDWAEH B664;B664;1104 116C;B664;1104 116C; # (뙤; 뙤; 뙤; 뙤; 뙤; ) HANGUL SYLLABLE DDOE B665;B665;1104 116C 11A8;B665;1104 116C 11A8; # (뙥; 뙥; 뙥; 뙥; 뙥; ) HANGUL SYLLABLE DDOEG B666;B666;1104 116C 11A9;B666;1104 116C 11A9; # (뙦; 뙦; 뙦; 뙦; 뙦; ) HANGUL SYLLABLE DDOEGG B667;B667;1104 116C 11AA;B667;1104 116C 11AA; # (뙧; 뙧; 뙧; 뙧; 뙧; ) HANGUL SYLLABLE DDOEGS B668;B668;1104 116C 11AB;B668;1104 116C 11AB; # (뙨; 뙨; 뙨; 뙨; 뙨; ) HANGUL SYLLABLE DDOEN B669;B669;1104 116C 11AC;B669;1104 116C 11AC; # (뙩; 뙩; 뙩; 뙩; 뙩; ) HANGUL SYLLABLE DDOENJ B66A;B66A;1104 116C 11AD;B66A;1104 116C 11AD; # (뙪; 뙪; 뙪; 뙪; 뙪; ) HANGUL SYLLABLE DDOENH B66B;B66B;1104 116C 11AE;B66B;1104 116C 11AE; # (뙫; 뙫; 뙫; 뙫; 뙫; ) HANGUL SYLLABLE DDOED B66C;B66C;1104 116C 11AF;B66C;1104 116C 11AF; # (뙬; 뙬; 뙬; 뙬; 뙬; ) HANGUL SYLLABLE DDOEL B66D;B66D;1104 116C 11B0;B66D;1104 116C 11B0; # (뙭; 뙭; 뙭; 뙭; 뙭; ) HANGUL SYLLABLE DDOELG B66E;B66E;1104 116C 11B1;B66E;1104 116C 11B1; # (뙮; 뙮; 뙮; 뙮; 뙮; ) HANGUL SYLLABLE DDOELM B66F;B66F;1104 116C 11B2;B66F;1104 116C 11B2; # (뙯; 뙯; 뙯; 뙯; 뙯; ) HANGUL SYLLABLE DDOELB B670;B670;1104 116C 11B3;B670;1104 116C 11B3; # (뙰; 뙰; 뙰; 뙰; 뙰; ) HANGUL SYLLABLE DDOELS B671;B671;1104 116C 11B4;B671;1104 116C 11B4; # (뙱; 뙱; 뙱; 뙱; 뙱; ) HANGUL SYLLABLE DDOELT B672;B672;1104 116C 11B5;B672;1104 116C 11B5; # (뙲; 뙲; 뙲; 뙲; 뙲; ) HANGUL SYLLABLE DDOELP B673;B673;1104 116C 11B6;B673;1104 116C 11B6; # (뙳; 뙳; 뙳; 뙳; 뙳; ) HANGUL SYLLABLE DDOELH B674;B674;1104 116C 11B7;B674;1104 116C 11B7; # (뙴; 뙴; 뙴; 뙴; 뙴; ) HANGUL SYLLABLE DDOEM B675;B675;1104 116C 11B8;B675;1104 116C 11B8; # (뙵; 뙵; 뙵; 뙵; 뙵; ) HANGUL SYLLABLE DDOEB B676;B676;1104 116C 11B9;B676;1104 116C 11B9; # (뙶; 뙶; 뙶; 뙶; 뙶; ) HANGUL SYLLABLE DDOEBS B677;B677;1104 116C 11BA;B677;1104 116C 11BA; # (뙷; 뙷; 뙷; 뙷; 뙷; ) HANGUL SYLLABLE DDOES B678;B678;1104 116C 11BB;B678;1104 116C 11BB; # (뙸; 뙸; 뙸; 뙸; 뙸; ) HANGUL SYLLABLE DDOESS B679;B679;1104 116C 11BC;B679;1104 116C 11BC; # (뙹; 뙹; 뙹; 뙹; 뙹; ) HANGUL SYLLABLE DDOENG B67A;B67A;1104 116C 11BD;B67A;1104 116C 11BD; # (뙺; 뙺; 뙺; 뙺; 뙺; ) HANGUL SYLLABLE DDOEJ B67B;B67B;1104 116C 11BE;B67B;1104 116C 11BE; # (뙻; 뙻; 뙻; 뙻; 뙻; ) HANGUL SYLLABLE DDOEC B67C;B67C;1104 116C 11BF;B67C;1104 116C 11BF; # (뙼; 뙼; 뙼; 뙼; 뙼; ) HANGUL SYLLABLE DDOEK B67D;B67D;1104 116C 11C0;B67D;1104 116C 11C0; # (뙽; 뙽; 뙽; 뙽; 뙽; ) HANGUL SYLLABLE DDOET B67E;B67E;1104 116C 11C1;B67E;1104 116C 11C1; # (뙾; 뙾; 뙾; 뙾; 뙾; ) HANGUL SYLLABLE DDOEP B67F;B67F;1104 116C 11C2;B67F;1104 116C 11C2; # (뙿; 뙿; 뙿; 뙿; 뙿; ) HANGUL SYLLABLE DDOEH B680;B680;1104 116D;B680;1104 116D; # (뚀; 뚀; 뚀; 뚀; 뚀; ) HANGUL SYLLABLE DDYO B681;B681;1104 116D 11A8;B681;1104 116D 11A8; # (뚁; 뚁; 뚁; 뚁; 뚁; ) HANGUL SYLLABLE DDYOG B682;B682;1104 116D 11A9;B682;1104 116D 11A9; # (뚂; 뚂; 뚂; 뚂; 뚂; ) HANGUL SYLLABLE DDYOGG B683;B683;1104 116D 11AA;B683;1104 116D 11AA; # (뚃; 뚃; 뚃; 뚃; 뚃; ) HANGUL SYLLABLE DDYOGS B684;B684;1104 116D 11AB;B684;1104 116D 11AB; # (뚄; 뚄; 뚄; 뚄; 뚄; ) HANGUL SYLLABLE DDYON B685;B685;1104 116D 11AC;B685;1104 116D 11AC; # (뚅; 뚅; 뚅; 뚅; 뚅; ) HANGUL SYLLABLE DDYONJ B686;B686;1104 116D 11AD;B686;1104 116D 11AD; # (뚆; 뚆; 뚆; 뚆; 뚆; ) HANGUL SYLLABLE DDYONH B687;B687;1104 116D 11AE;B687;1104 116D 11AE; # (뚇; 뚇; 뚇; 뚇; 뚇; ) HANGUL SYLLABLE DDYOD B688;B688;1104 116D 11AF;B688;1104 116D 11AF; # (뚈; 뚈; 뚈; 뚈; 뚈; ) HANGUL SYLLABLE DDYOL B689;B689;1104 116D 11B0;B689;1104 116D 11B0; # (뚉; 뚉; 뚉; 뚉; 뚉; ) HANGUL SYLLABLE DDYOLG B68A;B68A;1104 116D 11B1;B68A;1104 116D 11B1; # (뚊; 뚊; 뚊; 뚊; 뚊; ) HANGUL SYLLABLE DDYOLM B68B;B68B;1104 116D 11B2;B68B;1104 116D 11B2; # (뚋; 뚋; 뚋; 뚋; 뚋; ) HANGUL SYLLABLE DDYOLB B68C;B68C;1104 116D 11B3;B68C;1104 116D 11B3; # (뚌; 뚌; 뚌; 뚌; 뚌; ) HANGUL SYLLABLE DDYOLS B68D;B68D;1104 116D 11B4;B68D;1104 116D 11B4; # (뚍; 뚍; 뚍; 뚍; 뚍; ) HANGUL SYLLABLE DDYOLT B68E;B68E;1104 116D 11B5;B68E;1104 116D 11B5; # (뚎; 뚎; 뚎; 뚎; 뚎; ) HANGUL SYLLABLE DDYOLP B68F;B68F;1104 116D 11B6;B68F;1104 116D 11B6; # (뚏; 뚏; 뚏; 뚏; 뚏; ) HANGUL SYLLABLE DDYOLH B690;B690;1104 116D 11B7;B690;1104 116D 11B7; # (뚐; 뚐; 뚐; 뚐; 뚐; ) HANGUL SYLLABLE DDYOM B691;B691;1104 116D 11B8;B691;1104 116D 11B8; # (뚑; 뚑; 뚑; 뚑; 뚑; ) HANGUL SYLLABLE DDYOB B692;B692;1104 116D 11B9;B692;1104 116D 11B9; # (뚒; 뚒; 뚒; 뚒; 뚒; ) HANGUL SYLLABLE DDYOBS B693;B693;1104 116D 11BA;B693;1104 116D 11BA; # (뚓; 뚓; 뚓; 뚓; 뚓; ) HANGUL SYLLABLE DDYOS B694;B694;1104 116D 11BB;B694;1104 116D 11BB; # (뚔; 뚔; 뚔; 뚔; 뚔; ) HANGUL SYLLABLE DDYOSS B695;B695;1104 116D 11BC;B695;1104 116D 11BC; # (뚕; 뚕; 뚕; 뚕; 뚕; ) HANGUL SYLLABLE DDYONG B696;B696;1104 116D 11BD;B696;1104 116D 11BD; # (뚖; 뚖; 뚖; 뚖; 뚖; ) HANGUL SYLLABLE DDYOJ B697;B697;1104 116D 11BE;B697;1104 116D 11BE; # (뚗; 뚗; 뚗; 뚗; 뚗; ) HANGUL SYLLABLE DDYOC B698;B698;1104 116D 11BF;B698;1104 116D 11BF; # (뚘; 뚘; 뚘; 뚘; 뚘; ) HANGUL SYLLABLE DDYOK B699;B699;1104 116D 11C0;B699;1104 116D 11C0; # (뚙; 뚙; 뚙; 뚙; 뚙; ) HANGUL SYLLABLE DDYOT B69A;B69A;1104 116D 11C1;B69A;1104 116D 11C1; # (뚚; 뚚; 뚚; 뚚; 뚚; ) HANGUL SYLLABLE DDYOP B69B;B69B;1104 116D 11C2;B69B;1104 116D 11C2; # (뚛; 뚛; 뚛; 뚛; 뚛; ) HANGUL SYLLABLE DDYOH B69C;B69C;1104 116E;B69C;1104 116E; # (뚜; 뚜; 뚜; 뚜; 뚜; ) HANGUL SYLLABLE DDU B69D;B69D;1104 116E 11A8;B69D;1104 116E 11A8; # (뚝; 뚝; 뚝; 뚝; 뚝; ) HANGUL SYLLABLE DDUG B69E;B69E;1104 116E 11A9;B69E;1104 116E 11A9; # (뚞; 뚞; 뚞; 뚞; 뚞; ) HANGUL SYLLABLE DDUGG B69F;B69F;1104 116E 11AA;B69F;1104 116E 11AA; # (뚟; 뚟; 뚟; 뚟; 뚟; ) HANGUL SYLLABLE DDUGS B6A0;B6A0;1104 116E 11AB;B6A0;1104 116E 11AB; # (뚠; 뚠; 뚠; 뚠; 뚠; ) HANGUL SYLLABLE DDUN B6A1;B6A1;1104 116E 11AC;B6A1;1104 116E 11AC; # (뚡; 뚡; 뚡; 뚡; 뚡; ) HANGUL SYLLABLE DDUNJ B6A2;B6A2;1104 116E 11AD;B6A2;1104 116E 11AD; # (뚢; 뚢; 뚢; 뚢; 뚢; ) HANGUL SYLLABLE DDUNH B6A3;B6A3;1104 116E 11AE;B6A3;1104 116E 11AE; # (뚣; 뚣; 뚣; 뚣; 뚣; ) HANGUL SYLLABLE DDUD B6A4;B6A4;1104 116E 11AF;B6A4;1104 116E 11AF; # (뚤; 뚤; 뚤; 뚤; 뚤; ) HANGUL SYLLABLE DDUL B6A5;B6A5;1104 116E 11B0;B6A5;1104 116E 11B0; # (뚥; 뚥; 뚥; 뚥; 뚥; ) HANGUL SYLLABLE DDULG B6A6;B6A6;1104 116E 11B1;B6A6;1104 116E 11B1; # (뚦; 뚦; 뚦; 뚦; 뚦; ) HANGUL SYLLABLE DDULM B6A7;B6A7;1104 116E 11B2;B6A7;1104 116E 11B2; # (뚧; 뚧; 뚧; 뚧; 뚧; ) HANGUL SYLLABLE DDULB B6A8;B6A8;1104 116E 11B3;B6A8;1104 116E 11B3; # (뚨; 뚨; 뚨; 뚨; 뚨; ) HANGUL SYLLABLE DDULS B6A9;B6A9;1104 116E 11B4;B6A9;1104 116E 11B4; # (뚩; 뚩; 뚩; 뚩; 뚩; ) HANGUL SYLLABLE DDULT B6AA;B6AA;1104 116E 11B5;B6AA;1104 116E 11B5; # (뚪; 뚪; 뚪; 뚪; 뚪; ) HANGUL SYLLABLE DDULP B6AB;B6AB;1104 116E 11B6;B6AB;1104 116E 11B6; # (뚫; 뚫; 뚫; 뚫; 뚫; ) HANGUL SYLLABLE DDULH B6AC;B6AC;1104 116E 11B7;B6AC;1104 116E 11B7; # (뚬; 뚬; 뚬; 뚬; 뚬; ) HANGUL SYLLABLE DDUM B6AD;B6AD;1104 116E 11B8;B6AD;1104 116E 11B8; # (뚭; 뚭; 뚭; 뚭; 뚭; ) HANGUL SYLLABLE DDUB B6AE;B6AE;1104 116E 11B9;B6AE;1104 116E 11B9; # (뚮; 뚮; 뚮; 뚮; 뚮; ) HANGUL SYLLABLE DDUBS B6AF;B6AF;1104 116E 11BA;B6AF;1104 116E 11BA; # (뚯; 뚯; 뚯; 뚯; 뚯; ) HANGUL SYLLABLE DDUS B6B0;B6B0;1104 116E 11BB;B6B0;1104 116E 11BB; # (뚰; 뚰; 뚰; 뚰; 뚰; ) HANGUL SYLLABLE DDUSS B6B1;B6B1;1104 116E 11BC;B6B1;1104 116E 11BC; # (뚱; 뚱; 뚱; 뚱; 뚱; ) HANGUL SYLLABLE DDUNG B6B2;B6B2;1104 116E 11BD;B6B2;1104 116E 11BD; # (뚲; 뚲; 뚲; 뚲; 뚲; ) HANGUL SYLLABLE DDUJ B6B3;B6B3;1104 116E 11BE;B6B3;1104 116E 11BE; # (뚳; 뚳; 뚳; 뚳; 뚳; ) HANGUL SYLLABLE DDUC B6B4;B6B4;1104 116E 11BF;B6B4;1104 116E 11BF; # (뚴; 뚴; 뚴; 뚴; 뚴; ) HANGUL SYLLABLE DDUK B6B5;B6B5;1104 116E 11C0;B6B5;1104 116E 11C0; # (뚵; 뚵; 뚵; 뚵; 뚵; ) HANGUL SYLLABLE DDUT B6B6;B6B6;1104 116E 11C1;B6B6;1104 116E 11C1; # (뚶; 뚶; 뚶; 뚶; 뚶; ) HANGUL SYLLABLE DDUP B6B7;B6B7;1104 116E 11C2;B6B7;1104 116E 11C2; # (뚷; 뚷; 뚷; 뚷; 뚷; ) HANGUL SYLLABLE DDUH B6B8;B6B8;1104 116F;B6B8;1104 116F; # (뚸; 뚸; 뚸; 뚸; 뚸; ) HANGUL SYLLABLE DDWEO B6B9;B6B9;1104 116F 11A8;B6B9;1104 116F 11A8; # (뚹; 뚹; 뚹; 뚹; 뚹; ) HANGUL SYLLABLE DDWEOG B6BA;B6BA;1104 116F 11A9;B6BA;1104 116F 11A9; # (뚺; 뚺; 뚺; 뚺; 뚺; ) HANGUL SYLLABLE DDWEOGG B6BB;B6BB;1104 116F 11AA;B6BB;1104 116F 11AA; # (뚻; 뚻; 뚻; 뚻; 뚻; ) HANGUL SYLLABLE DDWEOGS B6BC;B6BC;1104 116F 11AB;B6BC;1104 116F 11AB; # (뚼; 뚼; 뚼; 뚼; 뚼; ) HANGUL SYLLABLE DDWEON B6BD;B6BD;1104 116F 11AC;B6BD;1104 116F 11AC; # (뚽; 뚽; 뚽; 뚽; 뚽; ) HANGUL SYLLABLE DDWEONJ B6BE;B6BE;1104 116F 11AD;B6BE;1104 116F 11AD; # (뚾; 뚾; 뚾; 뚾; 뚾; ) HANGUL SYLLABLE DDWEONH B6BF;B6BF;1104 116F 11AE;B6BF;1104 116F 11AE; # (뚿; 뚿; 뚿; 뚿; 뚿; ) HANGUL SYLLABLE DDWEOD B6C0;B6C0;1104 116F 11AF;B6C0;1104 116F 11AF; # (뛀; 뛀; 뛀; 뛀; 뛀; ) HANGUL SYLLABLE DDWEOL B6C1;B6C1;1104 116F 11B0;B6C1;1104 116F 11B0; # (뛁; 뛁; 뛁; 뛁; 뛁; ) HANGUL SYLLABLE DDWEOLG B6C2;B6C2;1104 116F 11B1;B6C2;1104 116F 11B1; # (뛂; 뛂; 뛂; 뛂; 뛂; ) HANGUL SYLLABLE DDWEOLM B6C3;B6C3;1104 116F 11B2;B6C3;1104 116F 11B2; # (뛃; 뛃; 뛃; 뛃; 뛃; ) HANGUL SYLLABLE DDWEOLB B6C4;B6C4;1104 116F 11B3;B6C4;1104 116F 11B3; # (뛄; 뛄; 뛄; 뛄; 뛄; ) HANGUL SYLLABLE DDWEOLS B6C5;B6C5;1104 116F 11B4;B6C5;1104 116F 11B4; # (뛅; 뛅; 뛅; 뛅; 뛅; ) HANGUL SYLLABLE DDWEOLT B6C6;B6C6;1104 116F 11B5;B6C6;1104 116F 11B5; # (뛆; 뛆; 뛆; 뛆; 뛆; ) HANGUL SYLLABLE DDWEOLP B6C7;B6C7;1104 116F 11B6;B6C7;1104 116F 11B6; # (뛇; 뛇; 뛇; 뛇; 뛇; ) HANGUL SYLLABLE DDWEOLH B6C8;B6C8;1104 116F 11B7;B6C8;1104 116F 11B7; # (뛈; 뛈; 뛈; 뛈; 뛈; ) HANGUL SYLLABLE DDWEOM B6C9;B6C9;1104 116F 11B8;B6C9;1104 116F 11B8; # (뛉; 뛉; 뛉; 뛉; 뛉; ) HANGUL SYLLABLE DDWEOB B6CA;B6CA;1104 116F 11B9;B6CA;1104 116F 11B9; # (뛊; 뛊; 뛊; 뛊; 뛊; ) HANGUL SYLLABLE DDWEOBS B6CB;B6CB;1104 116F 11BA;B6CB;1104 116F 11BA; # (뛋; 뛋; 뛋; 뛋; 뛋; ) HANGUL SYLLABLE DDWEOS B6CC;B6CC;1104 116F 11BB;B6CC;1104 116F 11BB; # (뛌; 뛌; 뛌; 뛌; 뛌; ) HANGUL SYLLABLE DDWEOSS B6CD;B6CD;1104 116F 11BC;B6CD;1104 116F 11BC; # (뛍; 뛍; 뛍; 뛍; 뛍; ) HANGUL SYLLABLE DDWEONG B6CE;B6CE;1104 116F 11BD;B6CE;1104 116F 11BD; # (뛎; 뛎; 뛎; 뛎; 뛎; ) HANGUL SYLLABLE DDWEOJ B6CF;B6CF;1104 116F 11BE;B6CF;1104 116F 11BE; # (뛏; 뛏; 뛏; 뛏; 뛏; ) HANGUL SYLLABLE DDWEOC B6D0;B6D0;1104 116F 11BF;B6D0;1104 116F 11BF; # (뛐; 뛐; 뛐; 뛐; 뛐; ) HANGUL SYLLABLE DDWEOK B6D1;B6D1;1104 116F 11C0;B6D1;1104 116F 11C0; # (뛑; 뛑; 뛑; 뛑; 뛑; ) HANGUL SYLLABLE DDWEOT B6D2;B6D2;1104 116F 11C1;B6D2;1104 116F 11C1; # (뛒; 뛒; 뛒; 뛒; 뛒; ) HANGUL SYLLABLE DDWEOP B6D3;B6D3;1104 116F 11C2;B6D3;1104 116F 11C2; # (뛓; 뛓; 뛓; 뛓; 뛓; ) HANGUL SYLLABLE DDWEOH B6D4;B6D4;1104 1170;B6D4;1104 1170; # (뛔; 뛔; 뛔; 뛔; 뛔; ) HANGUL SYLLABLE DDWE B6D5;B6D5;1104 1170 11A8;B6D5;1104 1170 11A8; # (뛕; 뛕; 뛕; 뛕; 뛕; ) HANGUL SYLLABLE DDWEG B6D6;B6D6;1104 1170 11A9;B6D6;1104 1170 11A9; # (뛖; 뛖; 뛖; 뛖; 뛖; ) HANGUL SYLLABLE DDWEGG B6D7;B6D7;1104 1170 11AA;B6D7;1104 1170 11AA; # (뛗; 뛗; 뛗; 뛗; 뛗; ) HANGUL SYLLABLE DDWEGS B6D8;B6D8;1104 1170 11AB;B6D8;1104 1170 11AB; # (뛘; 뛘; 뛘; 뛘; 뛘; ) HANGUL SYLLABLE DDWEN B6D9;B6D9;1104 1170 11AC;B6D9;1104 1170 11AC; # (뛙; 뛙; 뛙; 뛙; 뛙; ) HANGUL SYLLABLE DDWENJ B6DA;B6DA;1104 1170 11AD;B6DA;1104 1170 11AD; # (뛚; 뛚; 뛚; 뛚; 뛚; ) HANGUL SYLLABLE DDWENH B6DB;B6DB;1104 1170 11AE;B6DB;1104 1170 11AE; # (뛛; 뛛; 뛛; 뛛; 뛛; ) HANGUL SYLLABLE DDWED B6DC;B6DC;1104 1170 11AF;B6DC;1104 1170 11AF; # (뛜; 뛜; 뛜; 뛜; 뛜; ) HANGUL SYLLABLE DDWEL B6DD;B6DD;1104 1170 11B0;B6DD;1104 1170 11B0; # (뛝; 뛝; 뛝; 뛝; 뛝; ) HANGUL SYLLABLE DDWELG B6DE;B6DE;1104 1170 11B1;B6DE;1104 1170 11B1; # (뛞; 뛞; 뛞; 뛞; 뛞; ) HANGUL SYLLABLE DDWELM B6DF;B6DF;1104 1170 11B2;B6DF;1104 1170 11B2; # (뛟; 뛟; 뛟; 뛟; 뛟; ) HANGUL SYLLABLE DDWELB B6E0;B6E0;1104 1170 11B3;B6E0;1104 1170 11B3; # (뛠; 뛠; 뛠; 뛠; 뛠; ) HANGUL SYLLABLE DDWELS B6E1;B6E1;1104 1170 11B4;B6E1;1104 1170 11B4; # (뛡; 뛡; 뛡; 뛡; 뛡; ) HANGUL SYLLABLE DDWELT B6E2;B6E2;1104 1170 11B5;B6E2;1104 1170 11B5; # (뛢; 뛢; 뛢; 뛢; 뛢; ) HANGUL SYLLABLE DDWELP B6E3;B6E3;1104 1170 11B6;B6E3;1104 1170 11B6; # (뛣; 뛣; 뛣; 뛣; 뛣; ) HANGUL SYLLABLE DDWELH B6E4;B6E4;1104 1170 11B7;B6E4;1104 1170 11B7; # (뛤; 뛤; 뛤; 뛤; 뛤; ) HANGUL SYLLABLE DDWEM B6E5;B6E5;1104 1170 11B8;B6E5;1104 1170 11B8; # (뛥; 뛥; 뛥; 뛥; 뛥; ) HANGUL SYLLABLE DDWEB B6E6;B6E6;1104 1170 11B9;B6E6;1104 1170 11B9; # (뛦; 뛦; 뛦; 뛦; 뛦; ) HANGUL SYLLABLE DDWEBS B6E7;B6E7;1104 1170 11BA;B6E7;1104 1170 11BA; # (뛧; 뛧; 뛧; 뛧; 뛧; ) HANGUL SYLLABLE DDWES B6E8;B6E8;1104 1170 11BB;B6E8;1104 1170 11BB; # (뛨; 뛨; 뛨; 뛨; 뛨; ) HANGUL SYLLABLE DDWESS B6E9;B6E9;1104 1170 11BC;B6E9;1104 1170 11BC; # (뛩; 뛩; 뛩; 뛩; 뛩; ) HANGUL SYLLABLE DDWENG B6EA;B6EA;1104 1170 11BD;B6EA;1104 1170 11BD; # (뛪; 뛪; 뛪; 뛪; 뛪; ) HANGUL SYLLABLE DDWEJ B6EB;B6EB;1104 1170 11BE;B6EB;1104 1170 11BE; # (뛫; 뛫; 뛫; 뛫; 뛫; ) HANGUL SYLLABLE DDWEC B6EC;B6EC;1104 1170 11BF;B6EC;1104 1170 11BF; # (뛬; 뛬; 뛬; 뛬; 뛬; ) HANGUL SYLLABLE DDWEK B6ED;B6ED;1104 1170 11C0;B6ED;1104 1170 11C0; # (뛭; 뛭; 뛭; 뛭; 뛭; ) HANGUL SYLLABLE DDWET B6EE;B6EE;1104 1170 11C1;B6EE;1104 1170 11C1; # (뛮; 뛮; 뛮; 뛮; 뛮; ) HANGUL SYLLABLE DDWEP B6EF;B6EF;1104 1170 11C2;B6EF;1104 1170 11C2; # (뛯; 뛯; 뛯; 뛯; 뛯; ) HANGUL SYLLABLE DDWEH B6F0;B6F0;1104 1171;B6F0;1104 1171; # (뛰; 뛰; 뛰; 뛰; 뛰; ) HANGUL SYLLABLE DDWI B6F1;B6F1;1104 1171 11A8;B6F1;1104 1171 11A8; # (뛱; 뛱; 뛱; 뛱; 뛱; ) HANGUL SYLLABLE DDWIG B6F2;B6F2;1104 1171 11A9;B6F2;1104 1171 11A9; # (뛲; 뛲; 뛲; 뛲; 뛲; ) HANGUL SYLLABLE DDWIGG B6F3;B6F3;1104 1171 11AA;B6F3;1104 1171 11AA; # (뛳; 뛳; 뛳; 뛳; 뛳; ) HANGUL SYLLABLE DDWIGS B6F4;B6F4;1104 1171 11AB;B6F4;1104 1171 11AB; # (뛴; 뛴; 뛴; 뛴; 뛴; ) HANGUL SYLLABLE DDWIN B6F5;B6F5;1104 1171 11AC;B6F5;1104 1171 11AC; # (뛵; 뛵; 뛵; 뛵; 뛵; ) HANGUL SYLLABLE DDWINJ B6F6;B6F6;1104 1171 11AD;B6F6;1104 1171 11AD; # (뛶; 뛶; 뛶; 뛶; 뛶; ) HANGUL SYLLABLE DDWINH B6F7;B6F7;1104 1171 11AE;B6F7;1104 1171 11AE; # (뛷; 뛷; 뛷; 뛷; 뛷; ) HANGUL SYLLABLE DDWID B6F8;B6F8;1104 1171 11AF;B6F8;1104 1171 11AF; # (뛸; 뛸; 뛸; 뛸; 뛸; ) HANGUL SYLLABLE DDWIL B6F9;B6F9;1104 1171 11B0;B6F9;1104 1171 11B0; # (뛹; 뛹; 뛹; 뛹; 뛹; ) HANGUL SYLLABLE DDWILG B6FA;B6FA;1104 1171 11B1;B6FA;1104 1171 11B1; # (뛺; 뛺; 뛺; 뛺; 뛺; ) HANGUL SYLLABLE DDWILM B6FB;B6FB;1104 1171 11B2;B6FB;1104 1171 11B2; # (뛻; 뛻; 뛻; 뛻; 뛻; ) HANGUL SYLLABLE DDWILB B6FC;B6FC;1104 1171 11B3;B6FC;1104 1171 11B3; # (뛼; 뛼; 뛼; 뛼; 뛼; ) HANGUL SYLLABLE DDWILS B6FD;B6FD;1104 1171 11B4;B6FD;1104 1171 11B4; # (뛽; 뛽; 뛽; 뛽; 뛽; ) HANGUL SYLLABLE DDWILT B6FE;B6FE;1104 1171 11B5;B6FE;1104 1171 11B5; # (뛾; 뛾; 뛾; 뛾; 뛾; ) HANGUL SYLLABLE DDWILP B6FF;B6FF;1104 1171 11B6;B6FF;1104 1171 11B6; # (뛿; 뛿; 뛿; 뛿; 뛿; ) HANGUL SYLLABLE DDWILH B700;B700;1104 1171 11B7;B700;1104 1171 11B7; # (뜀; 뜀; 뜀; 뜀; 뜀; ) HANGUL SYLLABLE DDWIM B701;B701;1104 1171 11B8;B701;1104 1171 11B8; # (뜁; 뜁; 뜁; 뜁; 뜁; ) HANGUL SYLLABLE DDWIB B702;B702;1104 1171 11B9;B702;1104 1171 11B9; # (뜂; 뜂; 뜂; 뜂; 뜂; ) HANGUL SYLLABLE DDWIBS B703;B703;1104 1171 11BA;B703;1104 1171 11BA; # (뜃; 뜃; 뜃; 뜃; 뜃; ) HANGUL SYLLABLE DDWIS B704;B704;1104 1171 11BB;B704;1104 1171 11BB; # (뜄; 뜄; 뜄; 뜄; 뜄; ) HANGUL SYLLABLE DDWISS B705;B705;1104 1171 11BC;B705;1104 1171 11BC; # (뜅; 뜅; 뜅; 뜅; 뜅; ) HANGUL SYLLABLE DDWING B706;B706;1104 1171 11BD;B706;1104 1171 11BD; # (뜆; 뜆; 뜆; 뜆; 뜆; ) HANGUL SYLLABLE DDWIJ B707;B707;1104 1171 11BE;B707;1104 1171 11BE; # (뜇; 뜇; 뜇; 뜇; 뜇; ) HANGUL SYLLABLE DDWIC B708;B708;1104 1171 11BF;B708;1104 1171 11BF; # (뜈; 뜈; 뜈; 뜈; 뜈; ) HANGUL SYLLABLE DDWIK B709;B709;1104 1171 11C0;B709;1104 1171 11C0; # (뜉; 뜉; 뜉; 뜉; 뜉; ) HANGUL SYLLABLE DDWIT B70A;B70A;1104 1171 11C1;B70A;1104 1171 11C1; # (뜊; 뜊; 뜊; 뜊; 뜊; ) HANGUL SYLLABLE DDWIP B70B;B70B;1104 1171 11C2;B70B;1104 1171 11C2; # (뜋; 뜋; 뜋; 뜋; 뜋; ) HANGUL SYLLABLE DDWIH B70C;B70C;1104 1172;B70C;1104 1172; # (뜌; 뜌; 뜌; 뜌; 뜌; ) HANGUL SYLLABLE DDYU B70D;B70D;1104 1172 11A8;B70D;1104 1172 11A8; # (뜍; 뜍; 뜍; 뜍; 뜍; ) HANGUL SYLLABLE DDYUG B70E;B70E;1104 1172 11A9;B70E;1104 1172 11A9; # (뜎; 뜎; 뜎; 뜎; 뜎; ) HANGUL SYLLABLE DDYUGG B70F;B70F;1104 1172 11AA;B70F;1104 1172 11AA; # (뜏; 뜏; 뜏; 뜏; 뜏; ) HANGUL SYLLABLE DDYUGS B710;B710;1104 1172 11AB;B710;1104 1172 11AB; # (뜐; 뜐; 뜐; 뜐; 뜐; ) HANGUL SYLLABLE DDYUN B711;B711;1104 1172 11AC;B711;1104 1172 11AC; # (뜑; 뜑; 뜑; 뜑; 뜑; ) HANGUL SYLLABLE DDYUNJ B712;B712;1104 1172 11AD;B712;1104 1172 11AD; # (뜒; 뜒; 뜒; 뜒; 뜒; ) HANGUL SYLLABLE DDYUNH B713;B713;1104 1172 11AE;B713;1104 1172 11AE; # (뜓; 뜓; 뜓; 뜓; 뜓; ) HANGUL SYLLABLE DDYUD B714;B714;1104 1172 11AF;B714;1104 1172 11AF; # (뜔; 뜔; 뜔; 뜔; 뜔; ) HANGUL SYLLABLE DDYUL B715;B715;1104 1172 11B0;B715;1104 1172 11B0; # (뜕; 뜕; 뜕; 뜕; 뜕; ) HANGUL SYLLABLE DDYULG B716;B716;1104 1172 11B1;B716;1104 1172 11B1; # (뜖; 뜖; 뜖; 뜖; 뜖; ) HANGUL SYLLABLE DDYULM B717;B717;1104 1172 11B2;B717;1104 1172 11B2; # (뜗; 뜗; 뜗; 뜗; 뜗; ) HANGUL SYLLABLE DDYULB B718;B718;1104 1172 11B3;B718;1104 1172 11B3; # (뜘; 뜘; 뜘; 뜘; 뜘; ) HANGUL SYLLABLE DDYULS B719;B719;1104 1172 11B4;B719;1104 1172 11B4; # (뜙; 뜙; 뜙; 뜙; 뜙; ) HANGUL SYLLABLE DDYULT B71A;B71A;1104 1172 11B5;B71A;1104 1172 11B5; # (뜚; 뜚; 뜚; 뜚; 뜚; ) HANGUL SYLLABLE DDYULP B71B;B71B;1104 1172 11B6;B71B;1104 1172 11B6; # (뜛; 뜛; 뜛; 뜛; 뜛; ) HANGUL SYLLABLE DDYULH B71C;B71C;1104 1172 11B7;B71C;1104 1172 11B7; # (뜜; 뜜; 뜜; 뜜; 뜜; ) HANGUL SYLLABLE DDYUM B71D;B71D;1104 1172 11B8;B71D;1104 1172 11B8; # (뜝; 뜝; 뜝; 뜝; 뜝; ) HANGUL SYLLABLE DDYUB B71E;B71E;1104 1172 11B9;B71E;1104 1172 11B9; # (뜞; 뜞; 뜞; 뜞; 뜞; ) HANGUL SYLLABLE DDYUBS B71F;B71F;1104 1172 11BA;B71F;1104 1172 11BA; # (뜟; 뜟; 뜟; 뜟; 뜟; ) HANGUL SYLLABLE DDYUS B720;B720;1104 1172 11BB;B720;1104 1172 11BB; # (뜠; 뜠; 뜠; 뜠; 뜠; ) HANGUL SYLLABLE DDYUSS B721;B721;1104 1172 11BC;B721;1104 1172 11BC; # (뜡; 뜡; 뜡; 뜡; 뜡; ) HANGUL SYLLABLE DDYUNG B722;B722;1104 1172 11BD;B722;1104 1172 11BD; # (뜢; 뜢; 뜢; 뜢; 뜢; ) HANGUL SYLLABLE DDYUJ B723;B723;1104 1172 11BE;B723;1104 1172 11BE; # (뜣; 뜣; 뜣; 뜣; 뜣; ) HANGUL SYLLABLE DDYUC B724;B724;1104 1172 11BF;B724;1104 1172 11BF; # (뜤; 뜤; 뜤; 뜤; 뜤; ) HANGUL SYLLABLE DDYUK B725;B725;1104 1172 11C0;B725;1104 1172 11C0; # (뜥; 뜥; 뜥; 뜥; 뜥; ) HANGUL SYLLABLE DDYUT B726;B726;1104 1172 11C1;B726;1104 1172 11C1; # (뜦; 뜦; 뜦; 뜦; 뜦; ) HANGUL SYLLABLE DDYUP B727;B727;1104 1172 11C2;B727;1104 1172 11C2; # (뜧; 뜧; 뜧; 뜧; 뜧; ) HANGUL SYLLABLE DDYUH B728;B728;1104 1173;B728;1104 1173; # (뜨; 뜨; 뜨; 뜨; 뜨; ) HANGUL SYLLABLE DDEU B729;B729;1104 1173 11A8;B729;1104 1173 11A8; # (뜩; 뜩; 뜩; 뜩; 뜩; ) HANGUL SYLLABLE DDEUG B72A;B72A;1104 1173 11A9;B72A;1104 1173 11A9; # (뜪; 뜪; 뜪; 뜪; 뜪; ) HANGUL SYLLABLE DDEUGG B72B;B72B;1104 1173 11AA;B72B;1104 1173 11AA; # (뜫; 뜫; 뜫; 뜫; 뜫; ) HANGUL SYLLABLE DDEUGS B72C;B72C;1104 1173 11AB;B72C;1104 1173 11AB; # (뜬; 뜬; 뜬; 뜬; 뜬; ) HANGUL SYLLABLE DDEUN B72D;B72D;1104 1173 11AC;B72D;1104 1173 11AC; # (뜭; 뜭; 뜭; 뜭; 뜭; ) HANGUL SYLLABLE DDEUNJ B72E;B72E;1104 1173 11AD;B72E;1104 1173 11AD; # (뜮; 뜮; 뜮; 뜮; 뜮; ) HANGUL SYLLABLE DDEUNH B72F;B72F;1104 1173 11AE;B72F;1104 1173 11AE; # (뜯; 뜯; 뜯; 뜯; 뜯; ) HANGUL SYLLABLE DDEUD B730;B730;1104 1173 11AF;B730;1104 1173 11AF; # (뜰; 뜰; 뜰; 뜰; 뜰; ) HANGUL SYLLABLE DDEUL B731;B731;1104 1173 11B0;B731;1104 1173 11B0; # (뜱; 뜱; 뜱; 뜱; 뜱; ) HANGUL SYLLABLE DDEULG B732;B732;1104 1173 11B1;B732;1104 1173 11B1; # (뜲; 뜲; 뜲; 뜲; 뜲; ) HANGUL SYLLABLE DDEULM B733;B733;1104 1173 11B2;B733;1104 1173 11B2; # (뜳; 뜳; 뜳; 뜳; 뜳; ) HANGUL SYLLABLE DDEULB B734;B734;1104 1173 11B3;B734;1104 1173 11B3; # (뜴; 뜴; 뜴; 뜴; 뜴; ) HANGUL SYLLABLE DDEULS B735;B735;1104 1173 11B4;B735;1104 1173 11B4; # (뜵; 뜵; 뜵; 뜵; 뜵; ) HANGUL SYLLABLE DDEULT B736;B736;1104 1173 11B5;B736;1104 1173 11B5; # (뜶; 뜶; 뜶; 뜶; 뜶; ) HANGUL SYLLABLE DDEULP B737;B737;1104 1173 11B6;B737;1104 1173 11B6; # (뜷; 뜷; 뜷; 뜷; 뜷; ) HANGUL SYLLABLE DDEULH B738;B738;1104 1173 11B7;B738;1104 1173 11B7; # (뜸; 뜸; 뜸; 뜸; 뜸; ) HANGUL SYLLABLE DDEUM B739;B739;1104 1173 11B8;B739;1104 1173 11B8; # (뜹; 뜹; 뜹; 뜹; 뜹; ) HANGUL SYLLABLE DDEUB B73A;B73A;1104 1173 11B9;B73A;1104 1173 11B9; # (뜺; 뜺; 뜺; 뜺; 뜺; ) HANGUL SYLLABLE DDEUBS B73B;B73B;1104 1173 11BA;B73B;1104 1173 11BA; # (뜻; 뜻; 뜻; 뜻; 뜻; ) HANGUL SYLLABLE DDEUS B73C;B73C;1104 1173 11BB;B73C;1104 1173 11BB; # (뜼; 뜼; 뜼; 뜼; 뜼; ) HANGUL SYLLABLE DDEUSS B73D;B73D;1104 1173 11BC;B73D;1104 1173 11BC; # (뜽; 뜽; 뜽; 뜽; 뜽; ) HANGUL SYLLABLE DDEUNG B73E;B73E;1104 1173 11BD;B73E;1104 1173 11BD; # (뜾; 뜾; 뜾; 뜾; 뜾; ) HANGUL SYLLABLE DDEUJ B73F;B73F;1104 1173 11BE;B73F;1104 1173 11BE; # (뜿; 뜿; 뜿; 뜿; 뜿; ) HANGUL SYLLABLE DDEUC B740;B740;1104 1173 11BF;B740;1104 1173 11BF; # (띀; 띀; 띀; 띀; 띀; ) HANGUL SYLLABLE DDEUK B741;B741;1104 1173 11C0;B741;1104 1173 11C0; # (띁; 띁; 띁; 띁; 띁; ) HANGUL SYLLABLE DDEUT B742;B742;1104 1173 11C1;B742;1104 1173 11C1; # (띂; 띂; 띂; 띂; 띂; ) HANGUL SYLLABLE DDEUP B743;B743;1104 1173 11C2;B743;1104 1173 11C2; # (띃; 띃; 띃; 띃; 띃; ) HANGUL SYLLABLE DDEUH B744;B744;1104 1174;B744;1104 1174; # (띄; 띄; 띄; 띄; 띄; ) HANGUL SYLLABLE DDYI B745;B745;1104 1174 11A8;B745;1104 1174 11A8; # (띅; 띅; 띅; 띅; 띅; ) HANGUL SYLLABLE DDYIG B746;B746;1104 1174 11A9;B746;1104 1174 11A9; # (띆; 띆; 띆; 띆; 띆; ) HANGUL SYLLABLE DDYIGG B747;B747;1104 1174 11AA;B747;1104 1174 11AA; # (띇; 띇; 띇; 띇; 띇; ) HANGUL SYLLABLE DDYIGS B748;B748;1104 1174 11AB;B748;1104 1174 11AB; # (띈; 띈; 띈; 띈; 띈; ) HANGUL SYLLABLE DDYIN B749;B749;1104 1174 11AC;B749;1104 1174 11AC; # (띉; 띉; 띉; 띉; 띉; ) HANGUL SYLLABLE DDYINJ B74A;B74A;1104 1174 11AD;B74A;1104 1174 11AD; # (띊; 띊; 띊; 띊; 띊; ) HANGUL SYLLABLE DDYINH B74B;B74B;1104 1174 11AE;B74B;1104 1174 11AE; # (띋; 띋; 띋; 띋; 띋; ) HANGUL SYLLABLE DDYID B74C;B74C;1104 1174 11AF;B74C;1104 1174 11AF; # (띌; 띌; 띌; 띌; 띌; ) HANGUL SYLLABLE DDYIL B74D;B74D;1104 1174 11B0;B74D;1104 1174 11B0; # (띍; 띍; 띍; 띍; 띍; ) HANGUL SYLLABLE DDYILG B74E;B74E;1104 1174 11B1;B74E;1104 1174 11B1; # (띎; 띎; 띎; 띎; 띎; ) HANGUL SYLLABLE DDYILM B74F;B74F;1104 1174 11B2;B74F;1104 1174 11B2; # (띏; 띏; 띏; 띏; 띏; ) HANGUL SYLLABLE DDYILB B750;B750;1104 1174 11B3;B750;1104 1174 11B3; # (띐; 띐; 띐; 띐; 띐; ) HANGUL SYLLABLE DDYILS B751;B751;1104 1174 11B4;B751;1104 1174 11B4; # (띑; 띑; 띑; 띑; 띑; ) HANGUL SYLLABLE DDYILT B752;B752;1104 1174 11B5;B752;1104 1174 11B5; # (띒; 띒; 띒; 띒; 띒; ) HANGUL SYLLABLE DDYILP B753;B753;1104 1174 11B6;B753;1104 1174 11B6; # (띓; 띓; 띓; 띓; 띓; ) HANGUL SYLLABLE DDYILH B754;B754;1104 1174 11B7;B754;1104 1174 11B7; # (띔; 띔; 띔; 띔; 띔; ) HANGUL SYLLABLE DDYIM B755;B755;1104 1174 11B8;B755;1104 1174 11B8; # (띕; 띕; 띕; 띕; 띕; ) HANGUL SYLLABLE DDYIB B756;B756;1104 1174 11B9;B756;1104 1174 11B9; # (띖; 띖; 띖; 띖; 띖; ) HANGUL SYLLABLE DDYIBS B757;B757;1104 1174 11BA;B757;1104 1174 11BA; # (띗; 띗; 띗; 띗; 띗; ) HANGUL SYLLABLE DDYIS B758;B758;1104 1174 11BB;B758;1104 1174 11BB; # (띘; 띘; 띘; 띘; 띘; ) HANGUL SYLLABLE DDYISS B759;B759;1104 1174 11BC;B759;1104 1174 11BC; # (띙; 띙; 띙; 띙; 띙; ) HANGUL SYLLABLE DDYING B75A;B75A;1104 1174 11BD;B75A;1104 1174 11BD; # (띚; 띚; 띚; 띚; 띚; ) HANGUL SYLLABLE DDYIJ B75B;B75B;1104 1174 11BE;B75B;1104 1174 11BE; # (띛; 띛; 띛; 띛; 띛; ) HANGUL SYLLABLE DDYIC B75C;B75C;1104 1174 11BF;B75C;1104 1174 11BF; # (띜; 띜; 띜; 띜; 띜; ) HANGUL SYLLABLE DDYIK B75D;B75D;1104 1174 11C0;B75D;1104 1174 11C0; # (띝; 띝; 띝; 띝; 띝; ) HANGUL SYLLABLE DDYIT B75E;B75E;1104 1174 11C1;B75E;1104 1174 11C1; # (띞; 띞; 띞; 띞; 띞; ) HANGUL SYLLABLE DDYIP B75F;B75F;1104 1174 11C2;B75F;1104 1174 11C2; # (띟; 띟; 띟; 띟; 띟; ) HANGUL SYLLABLE DDYIH B760;B760;1104 1175;B760;1104 1175; # (띠; 띠; 띠; 띠; 띠; ) HANGUL SYLLABLE DDI B761;B761;1104 1175 11A8;B761;1104 1175 11A8; # (띡; 띡; 띡; 띡; 띡; ) HANGUL SYLLABLE DDIG B762;B762;1104 1175 11A9;B762;1104 1175 11A9; # (띢; 띢; 띢; 띢; 띢; ) HANGUL SYLLABLE DDIGG B763;B763;1104 1175 11AA;B763;1104 1175 11AA; # (띣; 띣; 띣; 띣; 띣; ) HANGUL SYLLABLE DDIGS B764;B764;1104 1175 11AB;B764;1104 1175 11AB; # (띤; 띤; 띤; 띤; 띤; ) HANGUL SYLLABLE DDIN B765;B765;1104 1175 11AC;B765;1104 1175 11AC; # (띥; 띥; 띥; 띥; 띥; ) HANGUL SYLLABLE DDINJ B766;B766;1104 1175 11AD;B766;1104 1175 11AD; # (띦; 띦; 띦; 띦; 띦; ) HANGUL SYLLABLE DDINH B767;B767;1104 1175 11AE;B767;1104 1175 11AE; # (띧; 띧; 띧; 띧; 띧; ) HANGUL SYLLABLE DDID B768;B768;1104 1175 11AF;B768;1104 1175 11AF; # (띨; 띨; 띨; 띨; 띨; ) HANGUL SYLLABLE DDIL B769;B769;1104 1175 11B0;B769;1104 1175 11B0; # (띩; 띩; 띩; 띩; 띩; ) HANGUL SYLLABLE DDILG B76A;B76A;1104 1175 11B1;B76A;1104 1175 11B1; # (띪; 띪; 띪; 띪; 띪; ) HANGUL SYLLABLE DDILM B76B;B76B;1104 1175 11B2;B76B;1104 1175 11B2; # (띫; 띫; 띫; 띫; 띫; ) HANGUL SYLLABLE DDILB B76C;B76C;1104 1175 11B3;B76C;1104 1175 11B3; # (띬; 띬; 띬; 띬; 띬; ) HANGUL SYLLABLE DDILS B76D;B76D;1104 1175 11B4;B76D;1104 1175 11B4; # (띭; 띭; 띭; 띭; 띭; ) HANGUL SYLLABLE DDILT B76E;B76E;1104 1175 11B5;B76E;1104 1175 11B5; # (띮; 띮; 띮; 띮; 띮; ) HANGUL SYLLABLE DDILP B76F;B76F;1104 1175 11B6;B76F;1104 1175 11B6; # (띯; 띯; 띯; 띯; 띯; ) HANGUL SYLLABLE DDILH B770;B770;1104 1175 11B7;B770;1104 1175 11B7; # (띰; 띰; 띰; 띰; 띰; ) HANGUL SYLLABLE DDIM B771;B771;1104 1175 11B8;B771;1104 1175 11B8; # (띱; 띱; 띱; 띱; 띱; ) HANGUL SYLLABLE DDIB B772;B772;1104 1175 11B9;B772;1104 1175 11B9; # (띲; 띲; 띲; 띲; 띲; ) HANGUL SYLLABLE DDIBS B773;B773;1104 1175 11BA;B773;1104 1175 11BA; # (띳; 띳; 띳; 띳; 띳; ) HANGUL SYLLABLE DDIS B774;B774;1104 1175 11BB;B774;1104 1175 11BB; # (띴; 띴; 띴; 띴; 띴; ) HANGUL SYLLABLE DDISS B775;B775;1104 1175 11BC;B775;1104 1175 11BC; # (띵; 띵; 띵; 띵; 띵; ) HANGUL SYLLABLE DDING B776;B776;1104 1175 11BD;B776;1104 1175 11BD; # (띶; 띶; 띶; 띶; 띶; ) HANGUL SYLLABLE DDIJ B777;B777;1104 1175 11BE;B777;1104 1175 11BE; # (띷; 띷; 띷; 띷; 띷; ) HANGUL SYLLABLE DDIC B778;B778;1104 1175 11BF;B778;1104 1175 11BF; # (띸; 띸; 띸; 띸; 띸; ) HANGUL SYLLABLE DDIK B779;B779;1104 1175 11C0;B779;1104 1175 11C0; # (띹; 띹; 띹; 띹; 띹; ) HANGUL SYLLABLE DDIT B77A;B77A;1104 1175 11C1;B77A;1104 1175 11C1; # (띺; 띺; 띺; 띺; 띺; ) HANGUL SYLLABLE DDIP B77B;B77B;1104 1175 11C2;B77B;1104 1175 11C2; # (띻; 띻; 띻; 띻; 띻; ) HANGUL SYLLABLE DDIH B77C;B77C;1105 1161;B77C;1105 1161; # (라; 라; 라; 라; 라; ) HANGUL SYLLABLE RA B77D;B77D;1105 1161 11A8;B77D;1105 1161 11A8; # (락; 락; 락; 락; 락; ) HANGUL SYLLABLE RAG B77E;B77E;1105 1161 11A9;B77E;1105 1161 11A9; # (띾; 띾; 띾; 띾; 띾; ) HANGUL SYLLABLE RAGG B77F;B77F;1105 1161 11AA;B77F;1105 1161 11AA; # (띿; 띿; 띿; 띿; 띿; ) HANGUL SYLLABLE RAGS B780;B780;1105 1161 11AB;B780;1105 1161 11AB; # (란; 란; 란; 란; 란; ) HANGUL SYLLABLE RAN B781;B781;1105 1161 11AC;B781;1105 1161 11AC; # (랁; 랁; 랁; 랁; 랁; ) HANGUL SYLLABLE RANJ B782;B782;1105 1161 11AD;B782;1105 1161 11AD; # (랂; 랂; 랂; 랂; 랂; ) HANGUL SYLLABLE RANH B783;B783;1105 1161 11AE;B783;1105 1161 11AE; # (랃; 랃; 랃; 랃; 랃; ) HANGUL SYLLABLE RAD B784;B784;1105 1161 11AF;B784;1105 1161 11AF; # (랄; 랄; 랄; 랄; 랄; ) HANGUL SYLLABLE RAL B785;B785;1105 1161 11B0;B785;1105 1161 11B0; # (랅; 랅; 랅; 랅; 랅; ) HANGUL SYLLABLE RALG B786;B786;1105 1161 11B1;B786;1105 1161 11B1; # (랆; 랆; 랆; 랆; 랆; ) HANGUL SYLLABLE RALM B787;B787;1105 1161 11B2;B787;1105 1161 11B2; # (랇; 랇; 랇; 랇; 랇; ) HANGUL SYLLABLE RALB B788;B788;1105 1161 11B3;B788;1105 1161 11B3; # (랈; 랈; 랈; 랈; 랈; ) HANGUL SYLLABLE RALS B789;B789;1105 1161 11B4;B789;1105 1161 11B4; # (랉; 랉; 랉; 랉; 랉; ) HANGUL SYLLABLE RALT B78A;B78A;1105 1161 11B5;B78A;1105 1161 11B5; # (랊; 랊; 랊; 랊; 랊; ) HANGUL SYLLABLE RALP B78B;B78B;1105 1161 11B6;B78B;1105 1161 11B6; # (랋; 랋; 랋; 랋; 랋; ) HANGUL SYLLABLE RALH B78C;B78C;1105 1161 11B7;B78C;1105 1161 11B7; # (람; 람; 람; 람; 람; ) HANGUL SYLLABLE RAM B78D;B78D;1105 1161 11B8;B78D;1105 1161 11B8; # (랍; 랍; 랍; 랍; 랍; ) HANGUL SYLLABLE RAB B78E;B78E;1105 1161 11B9;B78E;1105 1161 11B9; # (랎; 랎; 랎; 랎; 랎; ) HANGUL SYLLABLE RABS B78F;B78F;1105 1161 11BA;B78F;1105 1161 11BA; # (랏; 랏; 랏; 랏; 랏; ) HANGUL SYLLABLE RAS B790;B790;1105 1161 11BB;B790;1105 1161 11BB; # (랐; 랐; 랐; 랐; 랐; ) HANGUL SYLLABLE RASS B791;B791;1105 1161 11BC;B791;1105 1161 11BC; # (랑; 랑; 랑; 랑; 랑; ) HANGUL SYLLABLE RANG B792;B792;1105 1161 11BD;B792;1105 1161 11BD; # (랒; 랒; 랒; 랒; 랒; ) HANGUL SYLLABLE RAJ B793;B793;1105 1161 11BE;B793;1105 1161 11BE; # (랓; 랓; 랓; 랓; 랓; ) HANGUL SYLLABLE RAC B794;B794;1105 1161 11BF;B794;1105 1161 11BF; # (랔; 랔; 랔; 랔; 랔; ) HANGUL SYLLABLE RAK B795;B795;1105 1161 11C0;B795;1105 1161 11C0; # (랕; 랕; 랕; 랕; 랕; ) HANGUL SYLLABLE RAT B796;B796;1105 1161 11C1;B796;1105 1161 11C1; # (랖; 랖; 랖; 랖; 랖; ) HANGUL SYLLABLE RAP B797;B797;1105 1161 11C2;B797;1105 1161 11C2; # (랗; 랗; 랗; 랗; 랗; ) HANGUL SYLLABLE RAH B798;B798;1105 1162;B798;1105 1162; # (래; 래; 래; 래; 래; ) HANGUL SYLLABLE RAE B799;B799;1105 1162 11A8;B799;1105 1162 11A8; # (랙; 랙; 랙; 랙; 랙; ) HANGUL SYLLABLE RAEG B79A;B79A;1105 1162 11A9;B79A;1105 1162 11A9; # (랚; 랚; 랚; 랚; 랚; ) HANGUL SYLLABLE RAEGG B79B;B79B;1105 1162 11AA;B79B;1105 1162 11AA; # (랛; 랛; 랛; 랛; 랛; ) HANGUL SYLLABLE RAEGS B79C;B79C;1105 1162 11AB;B79C;1105 1162 11AB; # (랜; 랜; 랜; 랜; 랜; ) HANGUL SYLLABLE RAEN B79D;B79D;1105 1162 11AC;B79D;1105 1162 11AC; # (랝; 랝; 랝; 랝; 랝; ) HANGUL SYLLABLE RAENJ B79E;B79E;1105 1162 11AD;B79E;1105 1162 11AD; # (랞; 랞; 랞; 랞; 랞; ) HANGUL SYLLABLE RAENH B79F;B79F;1105 1162 11AE;B79F;1105 1162 11AE; # (랟; 랟; 랟; 랟; 랟; ) HANGUL SYLLABLE RAED B7A0;B7A0;1105 1162 11AF;B7A0;1105 1162 11AF; # (랠; 랠; 랠; 랠; 랠; ) HANGUL SYLLABLE RAEL B7A1;B7A1;1105 1162 11B0;B7A1;1105 1162 11B0; # (랡; 랡; 랡; 랡; 랡; ) HANGUL SYLLABLE RAELG B7A2;B7A2;1105 1162 11B1;B7A2;1105 1162 11B1; # (랢; 랢; 랢; 랢; 랢; ) HANGUL SYLLABLE RAELM B7A3;B7A3;1105 1162 11B2;B7A3;1105 1162 11B2; # (랣; 랣; 랣; 랣; 랣; ) HANGUL SYLLABLE RAELB B7A4;B7A4;1105 1162 11B3;B7A4;1105 1162 11B3; # (랤; 랤; 랤; 랤; 랤; ) HANGUL SYLLABLE RAELS B7A5;B7A5;1105 1162 11B4;B7A5;1105 1162 11B4; # (랥; 랥; 랥; 랥; 랥; ) HANGUL SYLLABLE RAELT B7A6;B7A6;1105 1162 11B5;B7A6;1105 1162 11B5; # (랦; 랦; 랦; 랦; 랦; ) HANGUL SYLLABLE RAELP B7A7;B7A7;1105 1162 11B6;B7A7;1105 1162 11B6; # (랧; 랧; 랧; 랧; 랧; ) HANGUL SYLLABLE RAELH B7A8;B7A8;1105 1162 11B7;B7A8;1105 1162 11B7; # (램; 램; 램; 램; 램; ) HANGUL SYLLABLE RAEM B7A9;B7A9;1105 1162 11B8;B7A9;1105 1162 11B8; # (랩; 랩; 랩; 랩; 랩; ) HANGUL SYLLABLE RAEB B7AA;B7AA;1105 1162 11B9;B7AA;1105 1162 11B9; # (랪; 랪; 랪; 랪; 랪; ) HANGUL SYLLABLE RAEBS B7AB;B7AB;1105 1162 11BA;B7AB;1105 1162 11BA; # (랫; 랫; 랫; 랫; 랫; ) HANGUL SYLLABLE RAES B7AC;B7AC;1105 1162 11BB;B7AC;1105 1162 11BB; # (랬; 랬; 랬; 랬; 랬; ) HANGUL SYLLABLE RAESS B7AD;B7AD;1105 1162 11BC;B7AD;1105 1162 11BC; # (랭; 랭; 랭; 랭; 랭; ) HANGUL SYLLABLE RAENG B7AE;B7AE;1105 1162 11BD;B7AE;1105 1162 11BD; # (랮; 랮; 랮; 랮; 랮; ) HANGUL SYLLABLE RAEJ B7AF;B7AF;1105 1162 11BE;B7AF;1105 1162 11BE; # (랯; 랯; 랯; 랯; 랯; ) HANGUL SYLLABLE RAEC B7B0;B7B0;1105 1162 11BF;B7B0;1105 1162 11BF; # (랰; 랰; 랰; 랰; 랰; ) HANGUL SYLLABLE RAEK B7B1;B7B1;1105 1162 11C0;B7B1;1105 1162 11C0; # (랱; 랱; 랱; 랱; 랱; ) HANGUL SYLLABLE RAET B7B2;B7B2;1105 1162 11C1;B7B2;1105 1162 11C1; # (랲; 랲; 랲; 랲; 랲; ) HANGUL SYLLABLE RAEP B7B3;B7B3;1105 1162 11C2;B7B3;1105 1162 11C2; # (랳; 랳; 랳; 랳; 랳; ) HANGUL SYLLABLE RAEH B7B4;B7B4;1105 1163;B7B4;1105 1163; # (랴; 랴; 랴; 랴; 랴; ) HANGUL SYLLABLE RYA B7B5;B7B5;1105 1163 11A8;B7B5;1105 1163 11A8; # (략; 략; 략; 략; 략; ) HANGUL SYLLABLE RYAG B7B6;B7B6;1105 1163 11A9;B7B6;1105 1163 11A9; # (랶; 랶; 랶; 랶; 랶; ) HANGUL SYLLABLE RYAGG B7B7;B7B7;1105 1163 11AA;B7B7;1105 1163 11AA; # (랷; 랷; 랷; 랷; 랷; ) HANGUL SYLLABLE RYAGS B7B8;B7B8;1105 1163 11AB;B7B8;1105 1163 11AB; # (랸; 랸; 랸; 랸; 랸; ) HANGUL SYLLABLE RYAN B7B9;B7B9;1105 1163 11AC;B7B9;1105 1163 11AC; # (랹; 랹; 랹; 랹; 랹; ) HANGUL SYLLABLE RYANJ B7BA;B7BA;1105 1163 11AD;B7BA;1105 1163 11AD; # (랺; 랺; 랺; 랺; 랺; ) HANGUL SYLLABLE RYANH B7BB;B7BB;1105 1163 11AE;B7BB;1105 1163 11AE; # (랻; 랻; 랻; 랻; 랻; ) HANGUL SYLLABLE RYAD B7BC;B7BC;1105 1163 11AF;B7BC;1105 1163 11AF; # (랼; 랼; 랼; 랼; 랼; ) HANGUL SYLLABLE RYAL B7BD;B7BD;1105 1163 11B0;B7BD;1105 1163 11B0; # (랽; 랽; 랽; 랽; 랽; ) HANGUL SYLLABLE RYALG B7BE;B7BE;1105 1163 11B1;B7BE;1105 1163 11B1; # (랾; 랾; 랾; 랾; 랾; ) HANGUL SYLLABLE RYALM B7BF;B7BF;1105 1163 11B2;B7BF;1105 1163 11B2; # (랿; 랿; 랿; 랿; 랿; ) HANGUL SYLLABLE RYALB B7C0;B7C0;1105 1163 11B3;B7C0;1105 1163 11B3; # (럀; 럀; 럀; 럀; 럀; ) HANGUL SYLLABLE RYALS B7C1;B7C1;1105 1163 11B4;B7C1;1105 1163 11B4; # (럁; 럁; 럁; 럁; 럁; ) HANGUL SYLLABLE RYALT B7C2;B7C2;1105 1163 11B5;B7C2;1105 1163 11B5; # (럂; 럂; 럂; 럂; 럂; ) HANGUL SYLLABLE RYALP B7C3;B7C3;1105 1163 11B6;B7C3;1105 1163 11B6; # (럃; 럃; 럃; 럃; 럃; ) HANGUL SYLLABLE RYALH B7C4;B7C4;1105 1163 11B7;B7C4;1105 1163 11B7; # (럄; 럄; 럄; 럄; 럄; ) HANGUL SYLLABLE RYAM B7C5;B7C5;1105 1163 11B8;B7C5;1105 1163 11B8; # (럅; 럅; 럅; 럅; 럅; ) HANGUL SYLLABLE RYAB B7C6;B7C6;1105 1163 11B9;B7C6;1105 1163 11B9; # (럆; 럆; 럆; 럆; 럆; ) HANGUL SYLLABLE RYABS B7C7;B7C7;1105 1163 11BA;B7C7;1105 1163 11BA; # (럇; 럇; 럇; 럇; 럇; ) HANGUL SYLLABLE RYAS B7C8;B7C8;1105 1163 11BB;B7C8;1105 1163 11BB; # (럈; 럈; 럈; 럈; 럈; ) HANGUL SYLLABLE RYASS B7C9;B7C9;1105 1163 11BC;B7C9;1105 1163 11BC; # (량; 량; 량; 량; 량; ) HANGUL SYLLABLE RYANG B7CA;B7CA;1105 1163 11BD;B7CA;1105 1163 11BD; # (럊; 럊; 럊; 럊; 럊; ) HANGUL SYLLABLE RYAJ B7CB;B7CB;1105 1163 11BE;B7CB;1105 1163 11BE; # (럋; 럋; 럋; 럋; 럋; ) HANGUL SYLLABLE RYAC B7CC;B7CC;1105 1163 11BF;B7CC;1105 1163 11BF; # (럌; 럌; 럌; 럌; 럌; ) HANGUL SYLLABLE RYAK B7CD;B7CD;1105 1163 11C0;B7CD;1105 1163 11C0; # (럍; 럍; 럍; 럍; 럍; ) HANGUL SYLLABLE RYAT B7CE;B7CE;1105 1163 11C1;B7CE;1105 1163 11C1; # (럎; 럎; 럎; 럎; 럎; ) HANGUL SYLLABLE RYAP B7CF;B7CF;1105 1163 11C2;B7CF;1105 1163 11C2; # (럏; 럏; 럏; 럏; 럏; ) HANGUL SYLLABLE RYAH B7D0;B7D0;1105 1164;B7D0;1105 1164; # (럐; 럐; 럐; 럐; 럐; ) HANGUL SYLLABLE RYAE B7D1;B7D1;1105 1164 11A8;B7D1;1105 1164 11A8; # (럑; 럑; 럑; 럑; 럑; ) HANGUL SYLLABLE RYAEG B7D2;B7D2;1105 1164 11A9;B7D2;1105 1164 11A9; # (럒; 럒; 럒; 럒; 럒; ) HANGUL SYLLABLE RYAEGG B7D3;B7D3;1105 1164 11AA;B7D3;1105 1164 11AA; # (럓; 럓; 럓; 럓; 럓; ) HANGUL SYLLABLE RYAEGS B7D4;B7D4;1105 1164 11AB;B7D4;1105 1164 11AB; # (럔; 럔; 럔; 럔; 럔; ) HANGUL SYLLABLE RYAEN B7D5;B7D5;1105 1164 11AC;B7D5;1105 1164 11AC; # (럕; 럕; 럕; 럕; 럕; ) HANGUL SYLLABLE RYAENJ B7D6;B7D6;1105 1164 11AD;B7D6;1105 1164 11AD; # (럖; 럖; 럖; 럖; 럖; ) HANGUL SYLLABLE RYAENH B7D7;B7D7;1105 1164 11AE;B7D7;1105 1164 11AE; # (럗; 럗; 럗; 럗; 럗; ) HANGUL SYLLABLE RYAED B7D8;B7D8;1105 1164 11AF;B7D8;1105 1164 11AF; # (럘; 럘; 럘; 럘; 럘; ) HANGUL SYLLABLE RYAEL B7D9;B7D9;1105 1164 11B0;B7D9;1105 1164 11B0; # (럙; 럙; 럙; 럙; 럙; ) HANGUL SYLLABLE RYAELG B7DA;B7DA;1105 1164 11B1;B7DA;1105 1164 11B1; # (럚; 럚; 럚; 럚; 럚; ) HANGUL SYLLABLE RYAELM B7DB;B7DB;1105 1164 11B2;B7DB;1105 1164 11B2; # (럛; 럛; 럛; 럛; 럛; ) HANGUL SYLLABLE RYAELB B7DC;B7DC;1105 1164 11B3;B7DC;1105 1164 11B3; # (럜; 럜; 럜; 럜; 럜; ) HANGUL SYLLABLE RYAELS B7DD;B7DD;1105 1164 11B4;B7DD;1105 1164 11B4; # (럝; 럝; 럝; 럝; 럝; ) HANGUL SYLLABLE RYAELT B7DE;B7DE;1105 1164 11B5;B7DE;1105 1164 11B5; # (럞; 럞; 럞; 럞; 럞; ) HANGUL SYLLABLE RYAELP B7DF;B7DF;1105 1164 11B6;B7DF;1105 1164 11B6; # (럟; 럟; 럟; 럟; 럟; ) HANGUL SYLLABLE RYAELH B7E0;B7E0;1105 1164 11B7;B7E0;1105 1164 11B7; # (럠; 럠; 럠; 럠; 럠; ) HANGUL SYLLABLE RYAEM B7E1;B7E1;1105 1164 11B8;B7E1;1105 1164 11B8; # (럡; 럡; 럡; 럡; 럡; ) HANGUL SYLLABLE RYAEB B7E2;B7E2;1105 1164 11B9;B7E2;1105 1164 11B9; # (럢; 럢; 럢; 럢; 럢; ) HANGUL SYLLABLE RYAEBS B7E3;B7E3;1105 1164 11BA;B7E3;1105 1164 11BA; # (럣; 럣; 럣; 럣; 럣; ) HANGUL SYLLABLE RYAES B7E4;B7E4;1105 1164 11BB;B7E4;1105 1164 11BB; # (럤; 럤; 럤; 럤; 럤; ) HANGUL SYLLABLE RYAESS B7E5;B7E5;1105 1164 11BC;B7E5;1105 1164 11BC; # (럥; 럥; 럥; 럥; 럥; ) HANGUL SYLLABLE RYAENG B7E6;B7E6;1105 1164 11BD;B7E6;1105 1164 11BD; # (럦; 럦; 럦; 럦; 럦; ) HANGUL SYLLABLE RYAEJ B7E7;B7E7;1105 1164 11BE;B7E7;1105 1164 11BE; # (럧; 럧; 럧; 럧; 럧; ) HANGUL SYLLABLE RYAEC B7E8;B7E8;1105 1164 11BF;B7E8;1105 1164 11BF; # (럨; 럨; 럨; 럨; 럨; ) HANGUL SYLLABLE RYAEK B7E9;B7E9;1105 1164 11C0;B7E9;1105 1164 11C0; # (럩; 럩; 럩; 럩; 럩; ) HANGUL SYLLABLE RYAET B7EA;B7EA;1105 1164 11C1;B7EA;1105 1164 11C1; # (럪; 럪; 럪; 럪; 럪; ) HANGUL SYLLABLE RYAEP B7EB;B7EB;1105 1164 11C2;B7EB;1105 1164 11C2; # (럫; 럫; 럫; 럫; 럫; ) HANGUL SYLLABLE RYAEH B7EC;B7EC;1105 1165;B7EC;1105 1165; # (러; 러; 러; 러; 러; ) HANGUL SYLLABLE REO B7ED;B7ED;1105 1165 11A8;B7ED;1105 1165 11A8; # (럭; 럭; 럭; 럭; 럭; ) HANGUL SYLLABLE REOG B7EE;B7EE;1105 1165 11A9;B7EE;1105 1165 11A9; # (럮; 럮; 럮; 럮; 럮; ) HANGUL SYLLABLE REOGG B7EF;B7EF;1105 1165 11AA;B7EF;1105 1165 11AA; # (럯; 럯; 럯; 럯; 럯; ) HANGUL SYLLABLE REOGS B7F0;B7F0;1105 1165 11AB;B7F0;1105 1165 11AB; # (런; 런; 런; 런; 런; ) HANGUL SYLLABLE REON B7F1;B7F1;1105 1165 11AC;B7F1;1105 1165 11AC; # (럱; 럱; 럱; 럱; 럱; ) HANGUL SYLLABLE REONJ B7F2;B7F2;1105 1165 11AD;B7F2;1105 1165 11AD; # (럲; 럲; 럲; 럲; 럲; ) HANGUL SYLLABLE REONH B7F3;B7F3;1105 1165 11AE;B7F3;1105 1165 11AE; # (럳; 럳; 럳; 럳; 럳; ) HANGUL SYLLABLE REOD B7F4;B7F4;1105 1165 11AF;B7F4;1105 1165 11AF; # (럴; 럴; 럴; 럴; 럴; ) HANGUL SYLLABLE REOL B7F5;B7F5;1105 1165 11B0;B7F5;1105 1165 11B0; # (럵; 럵; 럵; 럵; 럵; ) HANGUL SYLLABLE REOLG B7F6;B7F6;1105 1165 11B1;B7F6;1105 1165 11B1; # (럶; 럶; 럶; 럶; 럶; ) HANGUL SYLLABLE REOLM B7F7;B7F7;1105 1165 11B2;B7F7;1105 1165 11B2; # (럷; 럷; 럷; 럷; 럷; ) HANGUL SYLLABLE REOLB B7F8;B7F8;1105 1165 11B3;B7F8;1105 1165 11B3; # (럸; 럸; 럸; 럸; 럸; ) HANGUL SYLLABLE REOLS B7F9;B7F9;1105 1165 11B4;B7F9;1105 1165 11B4; # (럹; 럹; 럹; 럹; 럹; ) HANGUL SYLLABLE REOLT B7FA;B7FA;1105 1165 11B5;B7FA;1105 1165 11B5; # (럺; 럺; 럺; 럺; 럺; ) HANGUL SYLLABLE REOLP B7FB;B7FB;1105 1165 11B6;B7FB;1105 1165 11B6; # (럻; 럻; 럻; 럻; 럻; ) HANGUL SYLLABLE REOLH B7FC;B7FC;1105 1165 11B7;B7FC;1105 1165 11B7; # (럼; 럼; 럼; 럼; 럼; ) HANGUL SYLLABLE REOM B7FD;B7FD;1105 1165 11B8;B7FD;1105 1165 11B8; # (럽; 럽; 럽; 럽; 럽; ) HANGUL SYLLABLE REOB B7FE;B7FE;1105 1165 11B9;B7FE;1105 1165 11B9; # (럾; 럾; 럾; 럾; 럾; ) HANGUL SYLLABLE REOBS B7FF;B7FF;1105 1165 11BA;B7FF;1105 1165 11BA; # (럿; 럿; 럿; 럿; 럿; ) HANGUL SYLLABLE REOS B800;B800;1105 1165 11BB;B800;1105 1165 11BB; # (렀; 렀; 렀; 렀; 렀; ) HANGUL SYLLABLE REOSS B801;B801;1105 1165 11BC;B801;1105 1165 11BC; # (렁; 렁; 렁; 렁; 렁; ) HANGUL SYLLABLE REONG B802;B802;1105 1165 11BD;B802;1105 1165 11BD; # (렂; 렂; 렂; 렂; 렂; ) HANGUL SYLLABLE REOJ B803;B803;1105 1165 11BE;B803;1105 1165 11BE; # (렃; 렃; 렃; 렃; 렃; ) HANGUL SYLLABLE REOC B804;B804;1105 1165 11BF;B804;1105 1165 11BF; # (렄; 렄; 렄; 렄; 렄; ) HANGUL SYLLABLE REOK B805;B805;1105 1165 11C0;B805;1105 1165 11C0; # (렅; 렅; 렅; 렅; 렅; ) HANGUL SYLLABLE REOT B806;B806;1105 1165 11C1;B806;1105 1165 11C1; # (렆; 렆; 렆; 렆; 렆; ) HANGUL SYLLABLE REOP B807;B807;1105 1165 11C2;B807;1105 1165 11C2; # (렇; 렇; 렇; 렇; 렇; ) HANGUL SYLLABLE REOH B808;B808;1105 1166;B808;1105 1166; # (레; 레; 레; 레; 레; ) HANGUL SYLLABLE RE B809;B809;1105 1166 11A8;B809;1105 1166 11A8; # (렉; 렉; 렉; 렉; 렉; ) HANGUL SYLLABLE REG B80A;B80A;1105 1166 11A9;B80A;1105 1166 11A9; # (렊; 렊; 렊; 렊; 렊; ) HANGUL SYLLABLE REGG B80B;B80B;1105 1166 11AA;B80B;1105 1166 11AA; # (렋; 렋; 렋; 렋; 렋; ) HANGUL SYLLABLE REGS B80C;B80C;1105 1166 11AB;B80C;1105 1166 11AB; # (렌; 렌; 렌; 렌; 렌; ) HANGUL SYLLABLE REN B80D;B80D;1105 1166 11AC;B80D;1105 1166 11AC; # (렍; 렍; 렍; 렍; 렍; ) HANGUL SYLLABLE RENJ B80E;B80E;1105 1166 11AD;B80E;1105 1166 11AD; # (렎; 렎; 렎; 렎; 렎; ) HANGUL SYLLABLE RENH B80F;B80F;1105 1166 11AE;B80F;1105 1166 11AE; # (렏; 렏; 렏; 렏; 렏; ) HANGUL SYLLABLE RED B810;B810;1105 1166 11AF;B810;1105 1166 11AF; # (렐; 렐; 렐; 렐; 렐; ) HANGUL SYLLABLE REL B811;B811;1105 1166 11B0;B811;1105 1166 11B0; # (렑; 렑; 렑; 렑; 렑; ) HANGUL SYLLABLE RELG B812;B812;1105 1166 11B1;B812;1105 1166 11B1; # (렒; 렒; 렒; 렒; 렒; ) HANGUL SYLLABLE RELM B813;B813;1105 1166 11B2;B813;1105 1166 11B2; # (렓; 렓; 렓; 렓; 렓; ) HANGUL SYLLABLE RELB B814;B814;1105 1166 11B3;B814;1105 1166 11B3; # (렔; 렔; 렔; 렔; 렔; ) HANGUL SYLLABLE RELS B815;B815;1105 1166 11B4;B815;1105 1166 11B4; # (렕; 렕; 렕; 렕; 렕; ) HANGUL SYLLABLE RELT B816;B816;1105 1166 11B5;B816;1105 1166 11B5; # (렖; 렖; 렖; 렖; 렖; ) HANGUL SYLLABLE RELP B817;B817;1105 1166 11B6;B817;1105 1166 11B6; # (렗; 렗; 렗; 렗; 렗; ) HANGUL SYLLABLE RELH B818;B818;1105 1166 11B7;B818;1105 1166 11B7; # (렘; 렘; 렘; 렘; 렘; ) HANGUL SYLLABLE REM B819;B819;1105 1166 11B8;B819;1105 1166 11B8; # (렙; 렙; 렙; 렙; 렙; ) HANGUL SYLLABLE REB B81A;B81A;1105 1166 11B9;B81A;1105 1166 11B9; # (렚; 렚; 렚; 렚; 렚; ) HANGUL SYLLABLE REBS B81B;B81B;1105 1166 11BA;B81B;1105 1166 11BA; # (렛; 렛; 렛; 렛; 렛; ) HANGUL SYLLABLE RES B81C;B81C;1105 1166 11BB;B81C;1105 1166 11BB; # (렜; 렜; 렜; 렜; 렜; ) HANGUL SYLLABLE RESS B81D;B81D;1105 1166 11BC;B81D;1105 1166 11BC; # (렝; 렝; 렝; 렝; 렝; ) HANGUL SYLLABLE RENG B81E;B81E;1105 1166 11BD;B81E;1105 1166 11BD; # (렞; 렞; 렞; 렞; 렞; ) HANGUL SYLLABLE REJ B81F;B81F;1105 1166 11BE;B81F;1105 1166 11BE; # (렟; 렟; 렟; 렟; 렟; ) HANGUL SYLLABLE REC B820;B820;1105 1166 11BF;B820;1105 1166 11BF; # (렠; 렠; 렠; 렠; 렠; ) HANGUL SYLLABLE REK B821;B821;1105 1166 11C0;B821;1105 1166 11C0; # (렡; 렡; 렡; 렡; 렡; ) HANGUL SYLLABLE RET B822;B822;1105 1166 11C1;B822;1105 1166 11C1; # (렢; 렢; 렢; 렢; 렢; ) HANGUL SYLLABLE REP B823;B823;1105 1166 11C2;B823;1105 1166 11C2; # (렣; 렣; 렣; 렣; 렣; ) HANGUL SYLLABLE REH B824;B824;1105 1167;B824;1105 1167; # (려; 려; 려; 려; 려; ) HANGUL SYLLABLE RYEO B825;B825;1105 1167 11A8;B825;1105 1167 11A8; # (력; 력; 력; 력; 력; ) HANGUL SYLLABLE RYEOG B826;B826;1105 1167 11A9;B826;1105 1167 11A9; # (렦; 렦; 렦; 렦; 렦; ) HANGUL SYLLABLE RYEOGG B827;B827;1105 1167 11AA;B827;1105 1167 11AA; # (렧; 렧; 렧; 렧; 렧; ) HANGUL SYLLABLE RYEOGS B828;B828;1105 1167 11AB;B828;1105 1167 11AB; # (련; 련; 련; 련; 련; ) HANGUL SYLLABLE RYEON B829;B829;1105 1167 11AC;B829;1105 1167 11AC; # (렩; 렩; 렩; 렩; 렩; ) HANGUL SYLLABLE RYEONJ B82A;B82A;1105 1167 11AD;B82A;1105 1167 11AD; # (렪; 렪; 렪; 렪; 렪; ) HANGUL SYLLABLE RYEONH B82B;B82B;1105 1167 11AE;B82B;1105 1167 11AE; # (렫; 렫; 렫; 렫; 렫; ) HANGUL SYLLABLE RYEOD B82C;B82C;1105 1167 11AF;B82C;1105 1167 11AF; # (렬; 렬; 렬; 렬; 렬; ) HANGUL SYLLABLE RYEOL B82D;B82D;1105 1167 11B0;B82D;1105 1167 11B0; # (렭; 렭; 렭; 렭; 렭; ) HANGUL SYLLABLE RYEOLG B82E;B82E;1105 1167 11B1;B82E;1105 1167 11B1; # (렮; 렮; 렮; 렮; 렮; ) HANGUL SYLLABLE RYEOLM B82F;B82F;1105 1167 11B2;B82F;1105 1167 11B2; # (렯; 렯; 렯; 렯; 렯; ) HANGUL SYLLABLE RYEOLB B830;B830;1105 1167 11B3;B830;1105 1167 11B3; # (렰; 렰; 렰; 렰; 렰; ) HANGUL SYLLABLE RYEOLS B831;B831;1105 1167 11B4;B831;1105 1167 11B4; # (렱; 렱; 렱; 렱; 렱; ) HANGUL SYLLABLE RYEOLT B832;B832;1105 1167 11B5;B832;1105 1167 11B5; # (렲; 렲; 렲; 렲; 렲; ) HANGUL SYLLABLE RYEOLP B833;B833;1105 1167 11B6;B833;1105 1167 11B6; # (렳; 렳; 렳; 렳; 렳; ) HANGUL SYLLABLE RYEOLH B834;B834;1105 1167 11B7;B834;1105 1167 11B7; # (렴; 렴; 렴; 렴; 렴; ) HANGUL SYLLABLE RYEOM B835;B835;1105 1167 11B8;B835;1105 1167 11B8; # (렵; 렵; 렵; 렵; 렵; ) HANGUL SYLLABLE RYEOB B836;B836;1105 1167 11B9;B836;1105 1167 11B9; # (렶; 렶; 렶; 렶; 렶; ) HANGUL SYLLABLE RYEOBS B837;B837;1105 1167 11BA;B837;1105 1167 11BA; # (렷; 렷; 렷; 렷; 렷; ) HANGUL SYLLABLE RYEOS B838;B838;1105 1167 11BB;B838;1105 1167 11BB; # (렸; 렸; 렸; 렸; 렸; ) HANGUL SYLLABLE RYEOSS B839;B839;1105 1167 11BC;B839;1105 1167 11BC; # (령; 령; 령; 령; 령; ) HANGUL SYLLABLE RYEONG B83A;B83A;1105 1167 11BD;B83A;1105 1167 11BD; # (렺; 렺; 렺; 렺; 렺; ) HANGUL SYLLABLE RYEOJ B83B;B83B;1105 1167 11BE;B83B;1105 1167 11BE; # (렻; 렻; 렻; 렻; 렻; ) HANGUL SYLLABLE RYEOC B83C;B83C;1105 1167 11BF;B83C;1105 1167 11BF; # (렼; 렼; 렼; 렼; 렼; ) HANGUL SYLLABLE RYEOK B83D;B83D;1105 1167 11C0;B83D;1105 1167 11C0; # (렽; 렽; 렽; 렽; 렽; ) HANGUL SYLLABLE RYEOT B83E;B83E;1105 1167 11C1;B83E;1105 1167 11C1; # (렾; 렾; 렾; 렾; 렾; ) HANGUL SYLLABLE RYEOP B83F;B83F;1105 1167 11C2;B83F;1105 1167 11C2; # (렿; 렿; 렿; 렿; 렿; ) HANGUL SYLLABLE RYEOH B840;B840;1105 1168;B840;1105 1168; # (례; 례; 례; 례; 례; ) HANGUL SYLLABLE RYE B841;B841;1105 1168 11A8;B841;1105 1168 11A8; # (롁; 롁; 롁; 롁; 롁; ) HANGUL SYLLABLE RYEG B842;B842;1105 1168 11A9;B842;1105 1168 11A9; # (롂; 롂; 롂; 롂; 롂; ) HANGUL SYLLABLE RYEGG B843;B843;1105 1168 11AA;B843;1105 1168 11AA; # (롃; 롃; 롃; 롃; 롃; ) HANGUL SYLLABLE RYEGS B844;B844;1105 1168 11AB;B844;1105 1168 11AB; # (롄; 롄; 롄; 롄; 롄; ) HANGUL SYLLABLE RYEN B845;B845;1105 1168 11AC;B845;1105 1168 11AC; # (롅; 롅; 롅; 롅; 롅; ) HANGUL SYLLABLE RYENJ B846;B846;1105 1168 11AD;B846;1105 1168 11AD; # (롆; 롆; 롆; 롆; 롆; ) HANGUL SYLLABLE RYENH B847;B847;1105 1168 11AE;B847;1105 1168 11AE; # (롇; 롇; 롇; 롇; 롇; ) HANGUL SYLLABLE RYED B848;B848;1105 1168 11AF;B848;1105 1168 11AF; # (롈; 롈; 롈; 롈; 롈; ) HANGUL SYLLABLE RYEL B849;B849;1105 1168 11B0;B849;1105 1168 11B0; # (롉; 롉; 롉; 롉; 롉; ) HANGUL SYLLABLE RYELG B84A;B84A;1105 1168 11B1;B84A;1105 1168 11B1; # (롊; 롊; 롊; 롊; 롊; ) HANGUL SYLLABLE RYELM B84B;B84B;1105 1168 11B2;B84B;1105 1168 11B2; # (롋; 롋; 롋; 롋; 롋; ) HANGUL SYLLABLE RYELB B84C;B84C;1105 1168 11B3;B84C;1105 1168 11B3; # (롌; 롌; 롌; 롌; 롌; ) HANGUL SYLLABLE RYELS B84D;B84D;1105 1168 11B4;B84D;1105 1168 11B4; # (롍; 롍; 롍; 롍; 롍; ) HANGUL SYLLABLE RYELT B84E;B84E;1105 1168 11B5;B84E;1105 1168 11B5; # (롎; 롎; 롎; 롎; 롎; ) HANGUL SYLLABLE RYELP B84F;B84F;1105 1168 11B6;B84F;1105 1168 11B6; # (롏; 롏; 롏; 롏; 롏; ) HANGUL SYLLABLE RYELH B850;B850;1105 1168 11B7;B850;1105 1168 11B7; # (롐; 롐; 롐; 롐; 롐; ) HANGUL SYLLABLE RYEM B851;B851;1105 1168 11B8;B851;1105 1168 11B8; # (롑; 롑; 롑; 롑; 롑; ) HANGUL SYLLABLE RYEB B852;B852;1105 1168 11B9;B852;1105 1168 11B9; # (롒; 롒; 롒; 롒; 롒; ) HANGUL SYLLABLE RYEBS B853;B853;1105 1168 11BA;B853;1105 1168 11BA; # (롓; 롓; 롓; 롓; 롓; ) HANGUL SYLLABLE RYES B854;B854;1105 1168 11BB;B854;1105 1168 11BB; # (롔; 롔; 롔; 롔; 롔; ) HANGUL SYLLABLE RYESS B855;B855;1105 1168 11BC;B855;1105 1168 11BC; # (롕; 롕; 롕; 롕; 롕; ) HANGUL SYLLABLE RYENG B856;B856;1105 1168 11BD;B856;1105 1168 11BD; # (롖; 롖; 롖; 롖; 롖; ) HANGUL SYLLABLE RYEJ B857;B857;1105 1168 11BE;B857;1105 1168 11BE; # (롗; 롗; 롗; 롗; 롗; ) HANGUL SYLLABLE RYEC B858;B858;1105 1168 11BF;B858;1105 1168 11BF; # (롘; 롘; 롘; 롘; 롘; ) HANGUL SYLLABLE RYEK B859;B859;1105 1168 11C0;B859;1105 1168 11C0; # (롙; 롙; 롙; 롙; 롙; ) HANGUL SYLLABLE RYET B85A;B85A;1105 1168 11C1;B85A;1105 1168 11C1; # (롚; 롚; 롚; 롚; 롚; ) HANGUL SYLLABLE RYEP B85B;B85B;1105 1168 11C2;B85B;1105 1168 11C2; # (롛; 롛; 롛; 롛; 롛; ) HANGUL SYLLABLE RYEH B85C;B85C;1105 1169;B85C;1105 1169; # (로; 로; 로; 로; 로; ) HANGUL SYLLABLE RO B85D;B85D;1105 1169 11A8;B85D;1105 1169 11A8; # (록; 록; 록; 록; 록; ) HANGUL SYLLABLE ROG B85E;B85E;1105 1169 11A9;B85E;1105 1169 11A9; # (롞; 롞; 롞; 롞; 롞; ) HANGUL SYLLABLE ROGG B85F;B85F;1105 1169 11AA;B85F;1105 1169 11AA; # (롟; 롟; 롟; 롟; 롟; ) HANGUL SYLLABLE ROGS B860;B860;1105 1169 11AB;B860;1105 1169 11AB; # (론; 론; 론; 론; 론; ) HANGUL SYLLABLE RON B861;B861;1105 1169 11AC;B861;1105 1169 11AC; # (롡; 롡; 롡; 롡; 롡; ) HANGUL SYLLABLE RONJ B862;B862;1105 1169 11AD;B862;1105 1169 11AD; # (롢; 롢; 롢; 롢; 롢; ) HANGUL SYLLABLE RONH B863;B863;1105 1169 11AE;B863;1105 1169 11AE; # (롣; 롣; 롣; 롣; 롣; ) HANGUL SYLLABLE ROD B864;B864;1105 1169 11AF;B864;1105 1169 11AF; # (롤; 롤; 롤; 롤; 롤; ) HANGUL SYLLABLE ROL B865;B865;1105 1169 11B0;B865;1105 1169 11B0; # (롥; 롥; 롥; 롥; 롥; ) HANGUL SYLLABLE ROLG B866;B866;1105 1169 11B1;B866;1105 1169 11B1; # (롦; 롦; 롦; 롦; 롦; ) HANGUL SYLLABLE ROLM B867;B867;1105 1169 11B2;B867;1105 1169 11B2; # (롧; 롧; 롧; 롧; 롧; ) HANGUL SYLLABLE ROLB B868;B868;1105 1169 11B3;B868;1105 1169 11B3; # (롨; 롨; 롨; 롨; 롨; ) HANGUL SYLLABLE ROLS B869;B869;1105 1169 11B4;B869;1105 1169 11B4; # (롩; 롩; 롩; 롩; 롩; ) HANGUL SYLLABLE ROLT B86A;B86A;1105 1169 11B5;B86A;1105 1169 11B5; # (롪; 롪; 롪; 롪; 롪; ) HANGUL SYLLABLE ROLP B86B;B86B;1105 1169 11B6;B86B;1105 1169 11B6; # (롫; 롫; 롫; 롫; 롫; ) HANGUL SYLLABLE ROLH B86C;B86C;1105 1169 11B7;B86C;1105 1169 11B7; # (롬; 롬; 롬; 롬; 롬; ) HANGUL SYLLABLE ROM B86D;B86D;1105 1169 11B8;B86D;1105 1169 11B8; # (롭; 롭; 롭; 롭; 롭; ) HANGUL SYLLABLE ROB B86E;B86E;1105 1169 11B9;B86E;1105 1169 11B9; # (롮; 롮; 롮; 롮; 롮; ) HANGUL SYLLABLE ROBS B86F;B86F;1105 1169 11BA;B86F;1105 1169 11BA; # (롯; 롯; 롯; 롯; 롯; ) HANGUL SYLLABLE ROS B870;B870;1105 1169 11BB;B870;1105 1169 11BB; # (롰; 롰; 롰; 롰; 롰; ) HANGUL SYLLABLE ROSS B871;B871;1105 1169 11BC;B871;1105 1169 11BC; # (롱; 롱; 롱; 롱; 롱; ) HANGUL SYLLABLE RONG B872;B872;1105 1169 11BD;B872;1105 1169 11BD; # (롲; 롲; 롲; 롲; 롲; ) HANGUL SYLLABLE ROJ B873;B873;1105 1169 11BE;B873;1105 1169 11BE; # (롳; 롳; 롳; 롳; 롳; ) HANGUL SYLLABLE ROC B874;B874;1105 1169 11BF;B874;1105 1169 11BF; # (롴; 롴; 롴; 롴; 롴; ) HANGUL SYLLABLE ROK B875;B875;1105 1169 11C0;B875;1105 1169 11C0; # (롵; 롵; 롵; 롵; 롵; ) HANGUL SYLLABLE ROT B876;B876;1105 1169 11C1;B876;1105 1169 11C1; # (롶; 롶; 롶; 롶; 롶; ) HANGUL SYLLABLE ROP B877;B877;1105 1169 11C2;B877;1105 1169 11C2; # (롷; 롷; 롷; 롷; 롷; ) HANGUL SYLLABLE ROH B878;B878;1105 116A;B878;1105 116A; # (롸; 롸; 롸; 롸; 롸; ) HANGUL SYLLABLE RWA B879;B879;1105 116A 11A8;B879;1105 116A 11A8; # (롹; 롹; 롹; 롹; 롹; ) HANGUL SYLLABLE RWAG B87A;B87A;1105 116A 11A9;B87A;1105 116A 11A9; # (롺; 롺; 롺; 롺; 롺; ) HANGUL SYLLABLE RWAGG B87B;B87B;1105 116A 11AA;B87B;1105 116A 11AA; # (롻; 롻; 롻; 롻; 롻; ) HANGUL SYLLABLE RWAGS B87C;B87C;1105 116A 11AB;B87C;1105 116A 11AB; # (롼; 롼; 롼; 롼; 롼; ) HANGUL SYLLABLE RWAN B87D;B87D;1105 116A 11AC;B87D;1105 116A 11AC; # (롽; 롽; 롽; 롽; 롽; ) HANGUL SYLLABLE RWANJ B87E;B87E;1105 116A 11AD;B87E;1105 116A 11AD; # (롾; 롾; 롾; 롾; 롾; ) HANGUL SYLLABLE RWANH B87F;B87F;1105 116A 11AE;B87F;1105 116A 11AE; # (롿; 롿; 롿; 롿; 롿; ) HANGUL SYLLABLE RWAD B880;B880;1105 116A 11AF;B880;1105 116A 11AF; # (뢀; 뢀; 뢀; 뢀; 뢀; ) HANGUL SYLLABLE RWAL B881;B881;1105 116A 11B0;B881;1105 116A 11B0; # (뢁; 뢁; 뢁; 뢁; 뢁; ) HANGUL SYLLABLE RWALG B882;B882;1105 116A 11B1;B882;1105 116A 11B1; # (뢂; 뢂; 뢂; 뢂; 뢂; ) HANGUL SYLLABLE RWALM B883;B883;1105 116A 11B2;B883;1105 116A 11B2; # (뢃; 뢃; 뢃; 뢃; 뢃; ) HANGUL SYLLABLE RWALB B884;B884;1105 116A 11B3;B884;1105 116A 11B3; # (뢄; 뢄; 뢄; 뢄; 뢄; ) HANGUL SYLLABLE RWALS B885;B885;1105 116A 11B4;B885;1105 116A 11B4; # (뢅; 뢅; 뢅; 뢅; 뢅; ) HANGUL SYLLABLE RWALT B886;B886;1105 116A 11B5;B886;1105 116A 11B5; # (뢆; 뢆; 뢆; 뢆; 뢆; ) HANGUL SYLLABLE RWALP B887;B887;1105 116A 11B6;B887;1105 116A 11B6; # (뢇; 뢇; 뢇; 뢇; 뢇; ) HANGUL SYLLABLE RWALH B888;B888;1105 116A 11B7;B888;1105 116A 11B7; # (뢈; 뢈; 뢈; 뢈; 뢈; ) HANGUL SYLLABLE RWAM B889;B889;1105 116A 11B8;B889;1105 116A 11B8; # (뢉; 뢉; 뢉; 뢉; 뢉; ) HANGUL SYLLABLE RWAB B88A;B88A;1105 116A 11B9;B88A;1105 116A 11B9; # (뢊; 뢊; 뢊; 뢊; 뢊; ) HANGUL SYLLABLE RWABS B88B;B88B;1105 116A 11BA;B88B;1105 116A 11BA; # (뢋; 뢋; 뢋; 뢋; 뢋; ) HANGUL SYLLABLE RWAS B88C;B88C;1105 116A 11BB;B88C;1105 116A 11BB; # (뢌; 뢌; 뢌; 뢌; 뢌; ) HANGUL SYLLABLE RWASS B88D;B88D;1105 116A 11BC;B88D;1105 116A 11BC; # (뢍; 뢍; 뢍; 뢍; 뢍; ) HANGUL SYLLABLE RWANG B88E;B88E;1105 116A 11BD;B88E;1105 116A 11BD; # (뢎; 뢎; 뢎; 뢎; 뢎; ) HANGUL SYLLABLE RWAJ B88F;B88F;1105 116A 11BE;B88F;1105 116A 11BE; # (뢏; 뢏; 뢏; 뢏; 뢏; ) HANGUL SYLLABLE RWAC B890;B890;1105 116A 11BF;B890;1105 116A 11BF; # (뢐; 뢐; 뢐; 뢐; 뢐; ) HANGUL SYLLABLE RWAK B891;B891;1105 116A 11C0;B891;1105 116A 11C0; # (뢑; 뢑; 뢑; 뢑; 뢑; ) HANGUL SYLLABLE RWAT B892;B892;1105 116A 11C1;B892;1105 116A 11C1; # (뢒; 뢒; 뢒; 뢒; 뢒; ) HANGUL SYLLABLE RWAP B893;B893;1105 116A 11C2;B893;1105 116A 11C2; # (뢓; 뢓; 뢓; 뢓; 뢓; ) HANGUL SYLLABLE RWAH B894;B894;1105 116B;B894;1105 116B; # (뢔; 뢔; 뢔; 뢔; 뢔; ) HANGUL SYLLABLE RWAE B895;B895;1105 116B 11A8;B895;1105 116B 11A8; # (뢕; 뢕; 뢕; 뢕; 뢕; ) HANGUL SYLLABLE RWAEG B896;B896;1105 116B 11A9;B896;1105 116B 11A9; # (뢖; 뢖; 뢖; 뢖; 뢖; ) HANGUL SYLLABLE RWAEGG B897;B897;1105 116B 11AA;B897;1105 116B 11AA; # (뢗; 뢗; 뢗; 뢗; 뢗; ) HANGUL SYLLABLE RWAEGS B898;B898;1105 116B 11AB;B898;1105 116B 11AB; # (뢘; 뢘; 뢘; 뢘; 뢘; ) HANGUL SYLLABLE RWAEN B899;B899;1105 116B 11AC;B899;1105 116B 11AC; # (뢙; 뢙; 뢙; 뢙; 뢙; ) HANGUL SYLLABLE RWAENJ B89A;B89A;1105 116B 11AD;B89A;1105 116B 11AD; # (뢚; 뢚; 뢚; 뢚; 뢚; ) HANGUL SYLLABLE RWAENH B89B;B89B;1105 116B 11AE;B89B;1105 116B 11AE; # (뢛; 뢛; 뢛; 뢛; 뢛; ) HANGUL SYLLABLE RWAED B89C;B89C;1105 116B 11AF;B89C;1105 116B 11AF; # (뢜; 뢜; 뢜; 뢜; 뢜; ) HANGUL SYLLABLE RWAEL B89D;B89D;1105 116B 11B0;B89D;1105 116B 11B0; # (뢝; 뢝; 뢝; 뢝; 뢝; ) HANGUL SYLLABLE RWAELG B89E;B89E;1105 116B 11B1;B89E;1105 116B 11B1; # (뢞; 뢞; 뢞; 뢞; 뢞; ) HANGUL SYLLABLE RWAELM B89F;B89F;1105 116B 11B2;B89F;1105 116B 11B2; # (뢟; 뢟; 뢟; 뢟; 뢟; ) HANGUL SYLLABLE RWAELB B8A0;B8A0;1105 116B 11B3;B8A0;1105 116B 11B3; # (뢠; 뢠; 뢠; 뢠; 뢠; ) HANGUL SYLLABLE RWAELS B8A1;B8A1;1105 116B 11B4;B8A1;1105 116B 11B4; # (뢡; 뢡; 뢡; 뢡; 뢡; ) HANGUL SYLLABLE RWAELT B8A2;B8A2;1105 116B 11B5;B8A2;1105 116B 11B5; # (뢢; 뢢; 뢢; 뢢; 뢢; ) HANGUL SYLLABLE RWAELP B8A3;B8A3;1105 116B 11B6;B8A3;1105 116B 11B6; # (뢣; 뢣; 뢣; 뢣; 뢣; ) HANGUL SYLLABLE RWAELH B8A4;B8A4;1105 116B 11B7;B8A4;1105 116B 11B7; # (뢤; 뢤; 뢤; 뢤; 뢤; ) HANGUL SYLLABLE RWAEM B8A5;B8A5;1105 116B 11B8;B8A5;1105 116B 11B8; # (뢥; 뢥; 뢥; 뢥; 뢥; ) HANGUL SYLLABLE RWAEB B8A6;B8A6;1105 116B 11B9;B8A6;1105 116B 11B9; # (뢦; 뢦; 뢦; 뢦; 뢦; ) HANGUL SYLLABLE RWAEBS B8A7;B8A7;1105 116B 11BA;B8A7;1105 116B 11BA; # (뢧; 뢧; 뢧; 뢧; 뢧; ) HANGUL SYLLABLE RWAES B8A8;B8A8;1105 116B 11BB;B8A8;1105 116B 11BB; # (뢨; 뢨; 뢨; 뢨; 뢨; ) HANGUL SYLLABLE RWAESS B8A9;B8A9;1105 116B 11BC;B8A9;1105 116B 11BC; # (뢩; 뢩; 뢩; 뢩; 뢩; ) HANGUL SYLLABLE RWAENG B8AA;B8AA;1105 116B 11BD;B8AA;1105 116B 11BD; # (뢪; 뢪; 뢪; 뢪; 뢪; ) HANGUL SYLLABLE RWAEJ B8AB;B8AB;1105 116B 11BE;B8AB;1105 116B 11BE; # (뢫; 뢫; 뢫; 뢫; 뢫; ) HANGUL SYLLABLE RWAEC B8AC;B8AC;1105 116B 11BF;B8AC;1105 116B 11BF; # (뢬; 뢬; 뢬; 뢬; 뢬; ) HANGUL SYLLABLE RWAEK B8AD;B8AD;1105 116B 11C0;B8AD;1105 116B 11C0; # (뢭; 뢭; 뢭; 뢭; 뢭; ) HANGUL SYLLABLE RWAET B8AE;B8AE;1105 116B 11C1;B8AE;1105 116B 11C1; # (뢮; 뢮; 뢮; 뢮; 뢮; ) HANGUL SYLLABLE RWAEP B8AF;B8AF;1105 116B 11C2;B8AF;1105 116B 11C2; # (뢯; 뢯; 뢯; 뢯; 뢯; ) HANGUL SYLLABLE RWAEH B8B0;B8B0;1105 116C;B8B0;1105 116C; # (뢰; 뢰; 뢰; 뢰; 뢰; ) HANGUL SYLLABLE ROE B8B1;B8B1;1105 116C 11A8;B8B1;1105 116C 11A8; # (뢱; 뢱; 뢱; 뢱; 뢱; ) HANGUL SYLLABLE ROEG B8B2;B8B2;1105 116C 11A9;B8B2;1105 116C 11A9; # (뢲; 뢲; 뢲; 뢲; 뢲; ) HANGUL SYLLABLE ROEGG B8B3;B8B3;1105 116C 11AA;B8B3;1105 116C 11AA; # (뢳; 뢳; 뢳; 뢳; 뢳; ) HANGUL SYLLABLE ROEGS B8B4;B8B4;1105 116C 11AB;B8B4;1105 116C 11AB; # (뢴; 뢴; 뢴; 뢴; 뢴; ) HANGUL SYLLABLE ROEN B8B5;B8B5;1105 116C 11AC;B8B5;1105 116C 11AC; # (뢵; 뢵; 뢵; 뢵; 뢵; ) HANGUL SYLLABLE ROENJ B8B6;B8B6;1105 116C 11AD;B8B6;1105 116C 11AD; # (뢶; 뢶; 뢶; 뢶; 뢶; ) HANGUL SYLLABLE ROENH B8B7;B8B7;1105 116C 11AE;B8B7;1105 116C 11AE; # (뢷; 뢷; 뢷; 뢷; 뢷; ) HANGUL SYLLABLE ROED B8B8;B8B8;1105 116C 11AF;B8B8;1105 116C 11AF; # (뢸; 뢸; 뢸; 뢸; 뢸; ) HANGUL SYLLABLE ROEL B8B9;B8B9;1105 116C 11B0;B8B9;1105 116C 11B0; # (뢹; 뢹; 뢹; 뢹; 뢹; ) HANGUL SYLLABLE ROELG B8BA;B8BA;1105 116C 11B1;B8BA;1105 116C 11B1; # (뢺; 뢺; 뢺; 뢺; 뢺; ) HANGUL SYLLABLE ROELM B8BB;B8BB;1105 116C 11B2;B8BB;1105 116C 11B2; # (뢻; 뢻; 뢻; 뢻; 뢻; ) HANGUL SYLLABLE ROELB B8BC;B8BC;1105 116C 11B3;B8BC;1105 116C 11B3; # (뢼; 뢼; 뢼; 뢼; 뢼; ) HANGUL SYLLABLE ROELS B8BD;B8BD;1105 116C 11B4;B8BD;1105 116C 11B4; # (뢽; 뢽; 뢽; 뢽; 뢽; ) HANGUL SYLLABLE ROELT B8BE;B8BE;1105 116C 11B5;B8BE;1105 116C 11B5; # (뢾; 뢾; 뢾; 뢾; 뢾; ) HANGUL SYLLABLE ROELP B8BF;B8BF;1105 116C 11B6;B8BF;1105 116C 11B6; # (뢿; 뢿; 뢿; 뢿; 뢿; ) HANGUL SYLLABLE ROELH B8C0;B8C0;1105 116C 11B7;B8C0;1105 116C 11B7; # (룀; 룀; 룀; 룀; 룀; ) HANGUL SYLLABLE ROEM B8C1;B8C1;1105 116C 11B8;B8C1;1105 116C 11B8; # (룁; 룁; 룁; 룁; 룁; ) HANGUL SYLLABLE ROEB B8C2;B8C2;1105 116C 11B9;B8C2;1105 116C 11B9; # (룂; 룂; 룂; 룂; 룂; ) HANGUL SYLLABLE ROEBS B8C3;B8C3;1105 116C 11BA;B8C3;1105 116C 11BA; # (룃; 룃; 룃; 룃; 룃; ) HANGUL SYLLABLE ROES B8C4;B8C4;1105 116C 11BB;B8C4;1105 116C 11BB; # (룄; 룄; 룄; 룄; 룄; ) HANGUL SYLLABLE ROESS B8C5;B8C5;1105 116C 11BC;B8C5;1105 116C 11BC; # (룅; 룅; 룅; 룅; 룅; ) HANGUL SYLLABLE ROENG B8C6;B8C6;1105 116C 11BD;B8C6;1105 116C 11BD; # (룆; 룆; 룆; 룆; 룆; ) HANGUL SYLLABLE ROEJ B8C7;B8C7;1105 116C 11BE;B8C7;1105 116C 11BE; # (룇; 룇; 룇; 룇; 룇; ) HANGUL SYLLABLE ROEC B8C8;B8C8;1105 116C 11BF;B8C8;1105 116C 11BF; # (룈; 룈; 룈; 룈; 룈; ) HANGUL SYLLABLE ROEK B8C9;B8C9;1105 116C 11C0;B8C9;1105 116C 11C0; # (룉; 룉; 룉; 룉; 룉; ) HANGUL SYLLABLE ROET B8CA;B8CA;1105 116C 11C1;B8CA;1105 116C 11C1; # (룊; 룊; 룊; 룊; 룊; ) HANGUL SYLLABLE ROEP B8CB;B8CB;1105 116C 11C2;B8CB;1105 116C 11C2; # (룋; 룋; 룋; 룋; 룋; ) HANGUL SYLLABLE ROEH B8CC;B8CC;1105 116D;B8CC;1105 116D; # (료; 료; 료; 료; 료; ) HANGUL SYLLABLE RYO B8CD;B8CD;1105 116D 11A8;B8CD;1105 116D 11A8; # (룍; 룍; 룍; 룍; 룍; ) HANGUL SYLLABLE RYOG B8CE;B8CE;1105 116D 11A9;B8CE;1105 116D 11A9; # (룎; 룎; 룎; 룎; 룎; ) HANGUL SYLLABLE RYOGG B8CF;B8CF;1105 116D 11AA;B8CF;1105 116D 11AA; # (룏; 룏; 룏; 룏; 룏; ) HANGUL SYLLABLE RYOGS B8D0;B8D0;1105 116D 11AB;B8D0;1105 116D 11AB; # (룐; 룐; 룐; 룐; 룐; ) HANGUL SYLLABLE RYON B8D1;B8D1;1105 116D 11AC;B8D1;1105 116D 11AC; # (룑; 룑; 룑; 룑; 룑; ) HANGUL SYLLABLE RYONJ B8D2;B8D2;1105 116D 11AD;B8D2;1105 116D 11AD; # (룒; 룒; 룒; 룒; 룒; ) HANGUL SYLLABLE RYONH B8D3;B8D3;1105 116D 11AE;B8D3;1105 116D 11AE; # (룓; 룓; 룓; 룓; 룓; ) HANGUL SYLLABLE RYOD B8D4;B8D4;1105 116D 11AF;B8D4;1105 116D 11AF; # (룔; 룔; 룔; 룔; 룔; ) HANGUL SYLLABLE RYOL B8D5;B8D5;1105 116D 11B0;B8D5;1105 116D 11B0; # (룕; 룕; 룕; 룕; 룕; ) HANGUL SYLLABLE RYOLG B8D6;B8D6;1105 116D 11B1;B8D6;1105 116D 11B1; # (룖; 룖; 룖; 룖; 룖; ) HANGUL SYLLABLE RYOLM B8D7;B8D7;1105 116D 11B2;B8D7;1105 116D 11B2; # (룗; 룗; 룗; 룗; 룗; ) HANGUL SYLLABLE RYOLB B8D8;B8D8;1105 116D 11B3;B8D8;1105 116D 11B3; # (룘; 룘; 룘; 룘; 룘; ) HANGUL SYLLABLE RYOLS B8D9;B8D9;1105 116D 11B4;B8D9;1105 116D 11B4; # (룙; 룙; 룙; 룙; 룙; ) HANGUL SYLLABLE RYOLT B8DA;B8DA;1105 116D 11B5;B8DA;1105 116D 11B5; # (룚; 룚; 룚; 룚; 룚; ) HANGUL SYLLABLE RYOLP B8DB;B8DB;1105 116D 11B6;B8DB;1105 116D 11B6; # (룛; 룛; 룛; 룛; 룛; ) HANGUL SYLLABLE RYOLH B8DC;B8DC;1105 116D 11B7;B8DC;1105 116D 11B7; # (룜; 룜; 룜; 룜; 룜; ) HANGUL SYLLABLE RYOM B8DD;B8DD;1105 116D 11B8;B8DD;1105 116D 11B8; # (룝; 룝; 룝; 룝; 룝; ) HANGUL SYLLABLE RYOB B8DE;B8DE;1105 116D 11B9;B8DE;1105 116D 11B9; # (룞; 룞; 룞; 룞; 룞; ) HANGUL SYLLABLE RYOBS B8DF;B8DF;1105 116D 11BA;B8DF;1105 116D 11BA; # (룟; 룟; 룟; 룟; 룟; ) HANGUL SYLLABLE RYOS B8E0;B8E0;1105 116D 11BB;B8E0;1105 116D 11BB; # (룠; 룠; 룠; 룠; 룠; ) HANGUL SYLLABLE RYOSS B8E1;B8E1;1105 116D 11BC;B8E1;1105 116D 11BC; # (룡; 룡; 룡; 룡; 룡; ) HANGUL SYLLABLE RYONG B8E2;B8E2;1105 116D 11BD;B8E2;1105 116D 11BD; # (룢; 룢; 룢; 룢; 룢; ) HANGUL SYLLABLE RYOJ B8E3;B8E3;1105 116D 11BE;B8E3;1105 116D 11BE; # (룣; 룣; 룣; 룣; 룣; ) HANGUL SYLLABLE RYOC B8E4;B8E4;1105 116D 11BF;B8E4;1105 116D 11BF; # (룤; 룤; 룤; 룤; 룤; ) HANGUL SYLLABLE RYOK B8E5;B8E5;1105 116D 11C0;B8E5;1105 116D 11C0; # (룥; 룥; 룥; 룥; 룥; ) HANGUL SYLLABLE RYOT B8E6;B8E6;1105 116D 11C1;B8E6;1105 116D 11C1; # (룦; 룦; 룦; 룦; 룦; ) HANGUL SYLLABLE RYOP B8E7;B8E7;1105 116D 11C2;B8E7;1105 116D 11C2; # (룧; 룧; 룧; 룧; 룧; ) HANGUL SYLLABLE RYOH B8E8;B8E8;1105 116E;B8E8;1105 116E; # (루; 루; 루; 루; 루; ) HANGUL SYLLABLE RU B8E9;B8E9;1105 116E 11A8;B8E9;1105 116E 11A8; # (룩; 룩; 룩; 룩; 룩; ) HANGUL SYLLABLE RUG B8EA;B8EA;1105 116E 11A9;B8EA;1105 116E 11A9; # (룪; 룪; 룪; 룪; 룪; ) HANGUL SYLLABLE RUGG B8EB;B8EB;1105 116E 11AA;B8EB;1105 116E 11AA; # (룫; 룫; 룫; 룫; 룫; ) HANGUL SYLLABLE RUGS B8EC;B8EC;1105 116E 11AB;B8EC;1105 116E 11AB; # (룬; 룬; 룬; 룬; 룬; ) HANGUL SYLLABLE RUN B8ED;B8ED;1105 116E 11AC;B8ED;1105 116E 11AC; # (룭; 룭; 룭; 룭; 룭; ) HANGUL SYLLABLE RUNJ B8EE;B8EE;1105 116E 11AD;B8EE;1105 116E 11AD; # (룮; 룮; 룮; 룮; 룮; ) HANGUL SYLLABLE RUNH B8EF;B8EF;1105 116E 11AE;B8EF;1105 116E 11AE; # (룯; 룯; 룯; 룯; 룯; ) HANGUL SYLLABLE RUD B8F0;B8F0;1105 116E 11AF;B8F0;1105 116E 11AF; # (룰; 룰; 룰; 룰; 룰; ) HANGUL SYLLABLE RUL B8F1;B8F1;1105 116E 11B0;B8F1;1105 116E 11B0; # (룱; 룱; 룱; 룱; 룱; ) HANGUL SYLLABLE RULG B8F2;B8F2;1105 116E 11B1;B8F2;1105 116E 11B1; # (룲; 룲; 룲; 룲; 룲; ) HANGUL SYLLABLE RULM B8F3;B8F3;1105 116E 11B2;B8F3;1105 116E 11B2; # (룳; 룳; 룳; 룳; 룳; ) HANGUL SYLLABLE RULB B8F4;B8F4;1105 116E 11B3;B8F4;1105 116E 11B3; # (룴; 룴; 룴; 룴; 룴; ) HANGUL SYLLABLE RULS B8F5;B8F5;1105 116E 11B4;B8F5;1105 116E 11B4; # (룵; 룵; 룵; 룵; 룵; ) HANGUL SYLLABLE RULT B8F6;B8F6;1105 116E 11B5;B8F6;1105 116E 11B5; # (룶; 룶; 룶; 룶; 룶; ) HANGUL SYLLABLE RULP B8F7;B8F7;1105 116E 11B6;B8F7;1105 116E 11B6; # (룷; 룷; 룷; 룷; 룷; ) HANGUL SYLLABLE RULH B8F8;B8F8;1105 116E 11B7;B8F8;1105 116E 11B7; # (룸; 룸; 룸; 룸; 룸; ) HANGUL SYLLABLE RUM B8F9;B8F9;1105 116E 11B8;B8F9;1105 116E 11B8; # (룹; 룹; 룹; 룹; 룹; ) HANGUL SYLLABLE RUB B8FA;B8FA;1105 116E 11B9;B8FA;1105 116E 11B9; # (룺; 룺; 룺; 룺; 룺; ) HANGUL SYLLABLE RUBS B8FB;B8FB;1105 116E 11BA;B8FB;1105 116E 11BA; # (룻; 룻; 룻; 룻; 룻; ) HANGUL SYLLABLE RUS B8FC;B8FC;1105 116E 11BB;B8FC;1105 116E 11BB; # (룼; 룼; 룼; 룼; 룼; ) HANGUL SYLLABLE RUSS B8FD;B8FD;1105 116E 11BC;B8FD;1105 116E 11BC; # (룽; 룽; 룽; 룽; 룽; ) HANGUL SYLLABLE RUNG B8FE;B8FE;1105 116E 11BD;B8FE;1105 116E 11BD; # (룾; 룾; 룾; 룾; 룾; ) HANGUL SYLLABLE RUJ B8FF;B8FF;1105 116E 11BE;B8FF;1105 116E 11BE; # (룿; 룿; 룿; 룿; 룿; ) HANGUL SYLLABLE RUC B900;B900;1105 116E 11BF;B900;1105 116E 11BF; # (뤀; 뤀; 뤀; 뤀; 뤀; ) HANGUL SYLLABLE RUK B901;B901;1105 116E 11C0;B901;1105 116E 11C0; # (뤁; 뤁; 뤁; 뤁; 뤁; ) HANGUL SYLLABLE RUT B902;B902;1105 116E 11C1;B902;1105 116E 11C1; # (뤂; 뤂; 뤂; 뤂; 뤂; ) HANGUL SYLLABLE RUP B903;B903;1105 116E 11C2;B903;1105 116E 11C2; # (뤃; 뤃; 뤃; 뤃; 뤃; ) HANGUL SYLLABLE RUH B904;B904;1105 116F;B904;1105 116F; # (뤄; 뤄; 뤄; 뤄; 뤄; ) HANGUL SYLLABLE RWEO B905;B905;1105 116F 11A8;B905;1105 116F 11A8; # (뤅; 뤅; 뤅; 뤅; 뤅; ) HANGUL SYLLABLE RWEOG B906;B906;1105 116F 11A9;B906;1105 116F 11A9; # (뤆; 뤆; 뤆; 뤆; 뤆; ) HANGUL SYLLABLE RWEOGG B907;B907;1105 116F 11AA;B907;1105 116F 11AA; # (뤇; 뤇; 뤇; 뤇; 뤇; ) HANGUL SYLLABLE RWEOGS B908;B908;1105 116F 11AB;B908;1105 116F 11AB; # (뤈; 뤈; 뤈; 뤈; 뤈; ) HANGUL SYLLABLE RWEON B909;B909;1105 116F 11AC;B909;1105 116F 11AC; # (뤉; 뤉; 뤉; 뤉; 뤉; ) HANGUL SYLLABLE RWEONJ B90A;B90A;1105 116F 11AD;B90A;1105 116F 11AD; # (뤊; 뤊; 뤊; 뤊; 뤊; ) HANGUL SYLLABLE RWEONH B90B;B90B;1105 116F 11AE;B90B;1105 116F 11AE; # (뤋; 뤋; 뤋; 뤋; 뤋; ) HANGUL SYLLABLE RWEOD B90C;B90C;1105 116F 11AF;B90C;1105 116F 11AF; # (뤌; 뤌; 뤌; 뤌; 뤌; ) HANGUL SYLLABLE RWEOL B90D;B90D;1105 116F 11B0;B90D;1105 116F 11B0; # (뤍; 뤍; 뤍; 뤍; 뤍; ) HANGUL SYLLABLE RWEOLG B90E;B90E;1105 116F 11B1;B90E;1105 116F 11B1; # (뤎; 뤎; 뤎; 뤎; 뤎; ) HANGUL SYLLABLE RWEOLM B90F;B90F;1105 116F 11B2;B90F;1105 116F 11B2; # (뤏; 뤏; 뤏; 뤏; 뤏; ) HANGUL SYLLABLE RWEOLB B910;B910;1105 116F 11B3;B910;1105 116F 11B3; # (뤐; 뤐; 뤐; 뤐; 뤐; ) HANGUL SYLLABLE RWEOLS B911;B911;1105 116F 11B4;B911;1105 116F 11B4; # (뤑; 뤑; 뤑; 뤑; 뤑; ) HANGUL SYLLABLE RWEOLT B912;B912;1105 116F 11B5;B912;1105 116F 11B5; # (뤒; 뤒; 뤒; 뤒; 뤒; ) HANGUL SYLLABLE RWEOLP B913;B913;1105 116F 11B6;B913;1105 116F 11B6; # (뤓; 뤓; 뤓; 뤓; 뤓; ) HANGUL SYLLABLE RWEOLH B914;B914;1105 116F 11B7;B914;1105 116F 11B7; # (뤔; 뤔; 뤔; 뤔; 뤔; ) HANGUL SYLLABLE RWEOM B915;B915;1105 116F 11B8;B915;1105 116F 11B8; # (뤕; 뤕; 뤕; 뤕; 뤕; ) HANGUL SYLLABLE RWEOB B916;B916;1105 116F 11B9;B916;1105 116F 11B9; # (뤖; 뤖; 뤖; 뤖; 뤖; ) HANGUL SYLLABLE RWEOBS B917;B917;1105 116F 11BA;B917;1105 116F 11BA; # (뤗; 뤗; 뤗; 뤗; 뤗; ) HANGUL SYLLABLE RWEOS B918;B918;1105 116F 11BB;B918;1105 116F 11BB; # (뤘; 뤘; 뤘; 뤘; 뤘; ) HANGUL SYLLABLE RWEOSS B919;B919;1105 116F 11BC;B919;1105 116F 11BC; # (뤙; 뤙; 뤙; 뤙; 뤙; ) HANGUL SYLLABLE RWEONG B91A;B91A;1105 116F 11BD;B91A;1105 116F 11BD; # (뤚; 뤚; 뤚; 뤚; 뤚; ) HANGUL SYLLABLE RWEOJ B91B;B91B;1105 116F 11BE;B91B;1105 116F 11BE; # (뤛; 뤛; 뤛; 뤛; 뤛; ) HANGUL SYLLABLE RWEOC B91C;B91C;1105 116F 11BF;B91C;1105 116F 11BF; # (뤜; 뤜; 뤜; 뤜; 뤜; ) HANGUL SYLLABLE RWEOK B91D;B91D;1105 116F 11C0;B91D;1105 116F 11C0; # (뤝; 뤝; 뤝; 뤝; 뤝; ) HANGUL SYLLABLE RWEOT B91E;B91E;1105 116F 11C1;B91E;1105 116F 11C1; # (뤞; 뤞; 뤞; 뤞; 뤞; ) HANGUL SYLLABLE RWEOP B91F;B91F;1105 116F 11C2;B91F;1105 116F 11C2; # (뤟; 뤟; 뤟; 뤟; 뤟; ) HANGUL SYLLABLE RWEOH B920;B920;1105 1170;B920;1105 1170; # (뤠; 뤠; 뤠; 뤠; 뤠; ) HANGUL SYLLABLE RWE B921;B921;1105 1170 11A8;B921;1105 1170 11A8; # (뤡; 뤡; 뤡; 뤡; 뤡; ) HANGUL SYLLABLE RWEG B922;B922;1105 1170 11A9;B922;1105 1170 11A9; # (뤢; 뤢; 뤢; 뤢; 뤢; ) HANGUL SYLLABLE RWEGG B923;B923;1105 1170 11AA;B923;1105 1170 11AA; # (뤣; 뤣; 뤣; 뤣; 뤣; ) HANGUL SYLLABLE RWEGS B924;B924;1105 1170 11AB;B924;1105 1170 11AB; # (뤤; 뤤; 뤤; 뤤; 뤤; ) HANGUL SYLLABLE RWEN B925;B925;1105 1170 11AC;B925;1105 1170 11AC; # (뤥; 뤥; 뤥; 뤥; 뤥; ) HANGUL SYLLABLE RWENJ B926;B926;1105 1170 11AD;B926;1105 1170 11AD; # (뤦; 뤦; 뤦; 뤦; 뤦; ) HANGUL SYLLABLE RWENH B927;B927;1105 1170 11AE;B927;1105 1170 11AE; # (뤧; 뤧; 뤧; 뤧; 뤧; ) HANGUL SYLLABLE RWED B928;B928;1105 1170 11AF;B928;1105 1170 11AF; # (뤨; 뤨; 뤨; 뤨; 뤨; ) HANGUL SYLLABLE RWEL B929;B929;1105 1170 11B0;B929;1105 1170 11B0; # (뤩; 뤩; 뤩; 뤩; 뤩; ) HANGUL SYLLABLE RWELG B92A;B92A;1105 1170 11B1;B92A;1105 1170 11B1; # (뤪; 뤪; 뤪; 뤪; 뤪; ) HANGUL SYLLABLE RWELM B92B;B92B;1105 1170 11B2;B92B;1105 1170 11B2; # (뤫; 뤫; 뤫; 뤫; 뤫; ) HANGUL SYLLABLE RWELB B92C;B92C;1105 1170 11B3;B92C;1105 1170 11B3; # (뤬; 뤬; 뤬; 뤬; 뤬; ) HANGUL SYLLABLE RWELS B92D;B92D;1105 1170 11B4;B92D;1105 1170 11B4; # (뤭; 뤭; 뤭; 뤭; 뤭; ) HANGUL SYLLABLE RWELT B92E;B92E;1105 1170 11B5;B92E;1105 1170 11B5; # (뤮; 뤮; 뤮; 뤮; 뤮; ) HANGUL SYLLABLE RWELP B92F;B92F;1105 1170 11B6;B92F;1105 1170 11B6; # (뤯; 뤯; 뤯; 뤯; 뤯; ) HANGUL SYLLABLE RWELH B930;B930;1105 1170 11B7;B930;1105 1170 11B7; # (뤰; 뤰; 뤰; 뤰; 뤰; ) HANGUL SYLLABLE RWEM B931;B931;1105 1170 11B8;B931;1105 1170 11B8; # (뤱; 뤱; 뤱; 뤱; 뤱; ) HANGUL SYLLABLE RWEB B932;B932;1105 1170 11B9;B932;1105 1170 11B9; # (뤲; 뤲; 뤲; 뤲; 뤲; ) HANGUL SYLLABLE RWEBS B933;B933;1105 1170 11BA;B933;1105 1170 11BA; # (뤳; 뤳; 뤳; 뤳; 뤳; ) HANGUL SYLLABLE RWES B934;B934;1105 1170 11BB;B934;1105 1170 11BB; # (뤴; 뤴; 뤴; 뤴; 뤴; ) HANGUL SYLLABLE RWESS B935;B935;1105 1170 11BC;B935;1105 1170 11BC; # (뤵; 뤵; 뤵; 뤵; 뤵; ) HANGUL SYLLABLE RWENG B936;B936;1105 1170 11BD;B936;1105 1170 11BD; # (뤶; 뤶; 뤶; 뤶; 뤶; ) HANGUL SYLLABLE RWEJ B937;B937;1105 1170 11BE;B937;1105 1170 11BE; # (뤷; 뤷; 뤷; 뤷; 뤷; ) HANGUL SYLLABLE RWEC B938;B938;1105 1170 11BF;B938;1105 1170 11BF; # (뤸; 뤸; 뤸; 뤸; 뤸; ) HANGUL SYLLABLE RWEK B939;B939;1105 1170 11C0;B939;1105 1170 11C0; # (뤹; 뤹; 뤹; 뤹; 뤹; ) HANGUL SYLLABLE RWET B93A;B93A;1105 1170 11C1;B93A;1105 1170 11C1; # (뤺; 뤺; 뤺; 뤺; 뤺; ) HANGUL SYLLABLE RWEP B93B;B93B;1105 1170 11C2;B93B;1105 1170 11C2; # (뤻; 뤻; 뤻; 뤻; 뤻; ) HANGUL SYLLABLE RWEH B93C;B93C;1105 1171;B93C;1105 1171; # (뤼; 뤼; 뤼; 뤼; 뤼; ) HANGUL SYLLABLE RWI B93D;B93D;1105 1171 11A8;B93D;1105 1171 11A8; # (뤽; 뤽; 뤽; 뤽; 뤽; ) HANGUL SYLLABLE RWIG B93E;B93E;1105 1171 11A9;B93E;1105 1171 11A9; # (뤾; 뤾; 뤾; 뤾; 뤾; ) HANGUL SYLLABLE RWIGG B93F;B93F;1105 1171 11AA;B93F;1105 1171 11AA; # (뤿; 뤿; 뤿; 뤿; 뤿; ) HANGUL SYLLABLE RWIGS B940;B940;1105 1171 11AB;B940;1105 1171 11AB; # (륀; 륀; 륀; 륀; 륀; ) HANGUL SYLLABLE RWIN B941;B941;1105 1171 11AC;B941;1105 1171 11AC; # (륁; 륁; 륁; 륁; 륁; ) HANGUL SYLLABLE RWINJ B942;B942;1105 1171 11AD;B942;1105 1171 11AD; # (륂; 륂; 륂; 륂; 륂; ) HANGUL SYLLABLE RWINH B943;B943;1105 1171 11AE;B943;1105 1171 11AE; # (륃; 륃; 륃; 륃; 륃; ) HANGUL SYLLABLE RWID B944;B944;1105 1171 11AF;B944;1105 1171 11AF; # (륄; 륄; 륄; 륄; 륄; ) HANGUL SYLLABLE RWIL B945;B945;1105 1171 11B0;B945;1105 1171 11B0; # (륅; 륅; 륅; 륅; 륅; ) HANGUL SYLLABLE RWILG B946;B946;1105 1171 11B1;B946;1105 1171 11B1; # (륆; 륆; 륆; 륆; 륆; ) HANGUL SYLLABLE RWILM B947;B947;1105 1171 11B2;B947;1105 1171 11B2; # (륇; 륇; 륇; 륇; 륇; ) HANGUL SYLLABLE RWILB B948;B948;1105 1171 11B3;B948;1105 1171 11B3; # (륈; 륈; 륈; 륈; 륈; ) HANGUL SYLLABLE RWILS B949;B949;1105 1171 11B4;B949;1105 1171 11B4; # (륉; 륉; 륉; 륉; 륉; ) HANGUL SYLLABLE RWILT B94A;B94A;1105 1171 11B5;B94A;1105 1171 11B5; # (륊; 륊; 륊; 륊; 륊; ) HANGUL SYLLABLE RWILP B94B;B94B;1105 1171 11B6;B94B;1105 1171 11B6; # (륋; 륋; 륋; 륋; 륋; ) HANGUL SYLLABLE RWILH B94C;B94C;1105 1171 11B7;B94C;1105 1171 11B7; # (륌; 륌; 륌; 륌; 륌; ) HANGUL SYLLABLE RWIM B94D;B94D;1105 1171 11B8;B94D;1105 1171 11B8; # (륍; 륍; 륍; 륍; 륍; ) HANGUL SYLLABLE RWIB B94E;B94E;1105 1171 11B9;B94E;1105 1171 11B9; # (륎; 륎; 륎; 륎; 륎; ) HANGUL SYLLABLE RWIBS B94F;B94F;1105 1171 11BA;B94F;1105 1171 11BA; # (륏; 륏; 륏; 륏; 륏; ) HANGUL SYLLABLE RWIS B950;B950;1105 1171 11BB;B950;1105 1171 11BB; # (륐; 륐; 륐; 륐; 륐; ) HANGUL SYLLABLE RWISS B951;B951;1105 1171 11BC;B951;1105 1171 11BC; # (륑; 륑; 륑; 륑; 륑; ) HANGUL SYLLABLE RWING B952;B952;1105 1171 11BD;B952;1105 1171 11BD; # (륒; 륒; 륒; 륒; 륒; ) HANGUL SYLLABLE RWIJ B953;B953;1105 1171 11BE;B953;1105 1171 11BE; # (륓; 륓; 륓; 륓; 륓; ) HANGUL SYLLABLE RWIC B954;B954;1105 1171 11BF;B954;1105 1171 11BF; # (륔; 륔; 륔; 륔; 륔; ) HANGUL SYLLABLE RWIK B955;B955;1105 1171 11C0;B955;1105 1171 11C0; # (륕; 륕; 륕; 륕; 륕; ) HANGUL SYLLABLE RWIT B956;B956;1105 1171 11C1;B956;1105 1171 11C1; # (륖; 륖; 륖; 륖; 륖; ) HANGUL SYLLABLE RWIP B957;B957;1105 1171 11C2;B957;1105 1171 11C2; # (륗; 륗; 륗; 륗; 륗; ) HANGUL SYLLABLE RWIH B958;B958;1105 1172;B958;1105 1172; # (류; 류; 류; 류; 류; ) HANGUL SYLLABLE RYU B959;B959;1105 1172 11A8;B959;1105 1172 11A8; # (륙; 륙; 륙; 륙; 륙; ) HANGUL SYLLABLE RYUG B95A;B95A;1105 1172 11A9;B95A;1105 1172 11A9; # (륚; 륚; 륚; 륚; 륚; ) HANGUL SYLLABLE RYUGG B95B;B95B;1105 1172 11AA;B95B;1105 1172 11AA; # (륛; 륛; 륛; 륛; 륛; ) HANGUL SYLLABLE RYUGS B95C;B95C;1105 1172 11AB;B95C;1105 1172 11AB; # (륜; 륜; 륜; 륜; 륜; ) HANGUL SYLLABLE RYUN B95D;B95D;1105 1172 11AC;B95D;1105 1172 11AC; # (륝; 륝; 륝; 륝; 륝; ) HANGUL SYLLABLE RYUNJ B95E;B95E;1105 1172 11AD;B95E;1105 1172 11AD; # (륞; 륞; 륞; 륞; 륞; ) HANGUL SYLLABLE RYUNH B95F;B95F;1105 1172 11AE;B95F;1105 1172 11AE; # (륟; 륟; 륟; 륟; 륟; ) HANGUL SYLLABLE RYUD B960;B960;1105 1172 11AF;B960;1105 1172 11AF; # (률; 률; 률; 률; 률; ) HANGUL SYLLABLE RYUL B961;B961;1105 1172 11B0;B961;1105 1172 11B0; # (륡; 륡; 륡; 륡; 륡; ) HANGUL SYLLABLE RYULG B962;B962;1105 1172 11B1;B962;1105 1172 11B1; # (륢; 륢; 륢; 륢; 륢; ) HANGUL SYLLABLE RYULM B963;B963;1105 1172 11B2;B963;1105 1172 11B2; # (륣; 륣; 륣; 륣; 륣; ) HANGUL SYLLABLE RYULB B964;B964;1105 1172 11B3;B964;1105 1172 11B3; # (륤; 륤; 륤; 륤; 륤; ) HANGUL SYLLABLE RYULS B965;B965;1105 1172 11B4;B965;1105 1172 11B4; # (륥; 륥; 륥; 륥; 륥; ) HANGUL SYLLABLE RYULT B966;B966;1105 1172 11B5;B966;1105 1172 11B5; # (륦; 륦; 륦; 륦; 륦; ) HANGUL SYLLABLE RYULP B967;B967;1105 1172 11B6;B967;1105 1172 11B6; # (륧; 륧; 륧; 륧; 륧; ) HANGUL SYLLABLE RYULH B968;B968;1105 1172 11B7;B968;1105 1172 11B7; # (륨; 륨; 륨; 륨; 륨; ) HANGUL SYLLABLE RYUM B969;B969;1105 1172 11B8;B969;1105 1172 11B8; # (륩; 륩; 륩; 륩; 륩; ) HANGUL SYLLABLE RYUB B96A;B96A;1105 1172 11B9;B96A;1105 1172 11B9; # (륪; 륪; 륪; 륪; 륪; ) HANGUL SYLLABLE RYUBS B96B;B96B;1105 1172 11BA;B96B;1105 1172 11BA; # (륫; 륫; 륫; 륫; 륫; ) HANGUL SYLLABLE RYUS B96C;B96C;1105 1172 11BB;B96C;1105 1172 11BB; # (륬; 륬; 륬; 륬; 륬; ) HANGUL SYLLABLE RYUSS B96D;B96D;1105 1172 11BC;B96D;1105 1172 11BC; # (륭; 륭; 륭; 륭; 륭; ) HANGUL SYLLABLE RYUNG B96E;B96E;1105 1172 11BD;B96E;1105 1172 11BD; # (륮; 륮; 륮; 륮; 륮; ) HANGUL SYLLABLE RYUJ B96F;B96F;1105 1172 11BE;B96F;1105 1172 11BE; # (륯; 륯; 륯; 륯; 륯; ) HANGUL SYLLABLE RYUC B970;B970;1105 1172 11BF;B970;1105 1172 11BF; # (륰; 륰; 륰; 륰; 륰; ) HANGUL SYLLABLE RYUK B971;B971;1105 1172 11C0;B971;1105 1172 11C0; # (륱; 륱; 륱; 륱; 륱; ) HANGUL SYLLABLE RYUT B972;B972;1105 1172 11C1;B972;1105 1172 11C1; # (륲; 륲; 륲; 륲; 륲; ) HANGUL SYLLABLE RYUP B973;B973;1105 1172 11C2;B973;1105 1172 11C2; # (륳; 륳; 륳; 륳; 륳; ) HANGUL SYLLABLE RYUH B974;B974;1105 1173;B974;1105 1173; # (르; 르; 르; 르; 르; ) HANGUL SYLLABLE REU B975;B975;1105 1173 11A8;B975;1105 1173 11A8; # (륵; 륵; 륵; 륵; 륵; ) HANGUL SYLLABLE REUG B976;B976;1105 1173 11A9;B976;1105 1173 11A9; # (륶; 륶; 륶; 륶; 륶; ) HANGUL SYLLABLE REUGG B977;B977;1105 1173 11AA;B977;1105 1173 11AA; # (륷; 륷; 륷; 륷; 륷; ) HANGUL SYLLABLE REUGS B978;B978;1105 1173 11AB;B978;1105 1173 11AB; # (른; 른; 른; 른; 른; ) HANGUL SYLLABLE REUN B979;B979;1105 1173 11AC;B979;1105 1173 11AC; # (륹; 륹; 륹; 륹; 륹; ) HANGUL SYLLABLE REUNJ B97A;B97A;1105 1173 11AD;B97A;1105 1173 11AD; # (륺; 륺; 륺; 륺; 륺; ) HANGUL SYLLABLE REUNH B97B;B97B;1105 1173 11AE;B97B;1105 1173 11AE; # (륻; 륻; 륻; 륻; 륻; ) HANGUL SYLLABLE REUD B97C;B97C;1105 1173 11AF;B97C;1105 1173 11AF; # (를; 를; 를; 를; 를; ) HANGUL SYLLABLE REUL B97D;B97D;1105 1173 11B0;B97D;1105 1173 11B0; # (륽; 륽; 륽; 륽; 륽; ) HANGUL SYLLABLE REULG B97E;B97E;1105 1173 11B1;B97E;1105 1173 11B1; # (륾; 륾; 륾; 륾; 륾; ) HANGUL SYLLABLE REULM B97F;B97F;1105 1173 11B2;B97F;1105 1173 11B2; # (륿; 륿; 륿; 륿; 륿; ) HANGUL SYLLABLE REULB B980;B980;1105 1173 11B3;B980;1105 1173 11B3; # (릀; 릀; 릀; 릀; 릀; ) HANGUL SYLLABLE REULS B981;B981;1105 1173 11B4;B981;1105 1173 11B4; # (릁; 릁; 릁; 릁; 릁; ) HANGUL SYLLABLE REULT B982;B982;1105 1173 11B5;B982;1105 1173 11B5; # (릂; 릂; 릂; 릂; 릂; ) HANGUL SYLLABLE REULP B983;B983;1105 1173 11B6;B983;1105 1173 11B6; # (릃; 릃; 릃; 릃; 릃; ) HANGUL SYLLABLE REULH B984;B984;1105 1173 11B7;B984;1105 1173 11B7; # (름; 름; 름; 름; 름; ) HANGUL SYLLABLE REUM B985;B985;1105 1173 11B8;B985;1105 1173 11B8; # (릅; 릅; 릅; 릅; 릅; ) HANGUL SYLLABLE REUB B986;B986;1105 1173 11B9;B986;1105 1173 11B9; # (릆; 릆; 릆; 릆; 릆; ) HANGUL SYLLABLE REUBS B987;B987;1105 1173 11BA;B987;1105 1173 11BA; # (릇; 릇; 릇; 릇; 릇; ) HANGUL SYLLABLE REUS B988;B988;1105 1173 11BB;B988;1105 1173 11BB; # (릈; 릈; 릈; 릈; 릈; ) HANGUL SYLLABLE REUSS B989;B989;1105 1173 11BC;B989;1105 1173 11BC; # (릉; 릉; 릉; 릉; 릉; ) HANGUL SYLLABLE REUNG B98A;B98A;1105 1173 11BD;B98A;1105 1173 11BD; # (릊; 릊; 릊; 릊; 릊; ) HANGUL SYLLABLE REUJ B98B;B98B;1105 1173 11BE;B98B;1105 1173 11BE; # (릋; 릋; 릋; 릋; 릋; ) HANGUL SYLLABLE REUC B98C;B98C;1105 1173 11BF;B98C;1105 1173 11BF; # (릌; 릌; 릌; 릌; 릌; ) HANGUL SYLLABLE REUK B98D;B98D;1105 1173 11C0;B98D;1105 1173 11C0; # (릍; 릍; 릍; 릍; 릍; ) HANGUL SYLLABLE REUT B98E;B98E;1105 1173 11C1;B98E;1105 1173 11C1; # (릎; 릎; 릎; 릎; 릎; ) HANGUL SYLLABLE REUP B98F;B98F;1105 1173 11C2;B98F;1105 1173 11C2; # (릏; 릏; 릏; 릏; 릏; ) HANGUL SYLLABLE REUH B990;B990;1105 1174;B990;1105 1174; # (릐; 릐; 릐; 릐; 릐; ) HANGUL SYLLABLE RYI B991;B991;1105 1174 11A8;B991;1105 1174 11A8; # (릑; 릑; 릑; 릑; 릑; ) HANGUL SYLLABLE RYIG B992;B992;1105 1174 11A9;B992;1105 1174 11A9; # (릒; 릒; 릒; 릒; 릒; ) HANGUL SYLLABLE RYIGG B993;B993;1105 1174 11AA;B993;1105 1174 11AA; # (릓; 릓; 릓; 릓; 릓; ) HANGUL SYLLABLE RYIGS B994;B994;1105 1174 11AB;B994;1105 1174 11AB; # (릔; 릔; 릔; 릔; 릔; ) HANGUL SYLLABLE RYIN B995;B995;1105 1174 11AC;B995;1105 1174 11AC; # (릕; 릕; 릕; 릕; 릕; ) HANGUL SYLLABLE RYINJ B996;B996;1105 1174 11AD;B996;1105 1174 11AD; # (릖; 릖; 릖; 릖; 릖; ) HANGUL SYLLABLE RYINH B997;B997;1105 1174 11AE;B997;1105 1174 11AE; # (릗; 릗; 릗; 릗; 릗; ) HANGUL SYLLABLE RYID B998;B998;1105 1174 11AF;B998;1105 1174 11AF; # (릘; 릘; 릘; 릘; 릘; ) HANGUL SYLLABLE RYIL B999;B999;1105 1174 11B0;B999;1105 1174 11B0; # (릙; 릙; 릙; 릙; 릙; ) HANGUL SYLLABLE RYILG B99A;B99A;1105 1174 11B1;B99A;1105 1174 11B1; # (릚; 릚; 릚; 릚; 릚; ) HANGUL SYLLABLE RYILM B99B;B99B;1105 1174 11B2;B99B;1105 1174 11B2; # (릛; 릛; 릛; 릛; 릛; ) HANGUL SYLLABLE RYILB B99C;B99C;1105 1174 11B3;B99C;1105 1174 11B3; # (릜; 릜; 릜; 릜; 릜; ) HANGUL SYLLABLE RYILS B99D;B99D;1105 1174 11B4;B99D;1105 1174 11B4; # (릝; 릝; 릝; 릝; 릝; ) HANGUL SYLLABLE RYILT B99E;B99E;1105 1174 11B5;B99E;1105 1174 11B5; # (릞; 릞; 릞; 릞; 릞; ) HANGUL SYLLABLE RYILP B99F;B99F;1105 1174 11B6;B99F;1105 1174 11B6; # (릟; 릟; 릟; 릟; 릟; ) HANGUL SYLLABLE RYILH B9A0;B9A0;1105 1174 11B7;B9A0;1105 1174 11B7; # (릠; 릠; 릠; 릠; 릠; ) HANGUL SYLLABLE RYIM B9A1;B9A1;1105 1174 11B8;B9A1;1105 1174 11B8; # (릡; 릡; 릡; 릡; 릡; ) HANGUL SYLLABLE RYIB B9A2;B9A2;1105 1174 11B9;B9A2;1105 1174 11B9; # (릢; 릢; 릢; 릢; 릢; ) HANGUL SYLLABLE RYIBS B9A3;B9A3;1105 1174 11BA;B9A3;1105 1174 11BA; # (릣; 릣; 릣; 릣; 릣; ) HANGUL SYLLABLE RYIS B9A4;B9A4;1105 1174 11BB;B9A4;1105 1174 11BB; # (릤; 릤; 릤; 릤; 릤; ) HANGUL SYLLABLE RYISS B9A5;B9A5;1105 1174 11BC;B9A5;1105 1174 11BC; # (릥; 릥; 릥; 릥; 릥; ) HANGUL SYLLABLE RYING B9A6;B9A6;1105 1174 11BD;B9A6;1105 1174 11BD; # (릦; 릦; 릦; 릦; 릦; ) HANGUL SYLLABLE RYIJ B9A7;B9A7;1105 1174 11BE;B9A7;1105 1174 11BE; # (릧; 릧; 릧; 릧; 릧; ) HANGUL SYLLABLE RYIC B9A8;B9A8;1105 1174 11BF;B9A8;1105 1174 11BF; # (릨; 릨; 릨; 릨; 릨; ) HANGUL SYLLABLE RYIK B9A9;B9A9;1105 1174 11C0;B9A9;1105 1174 11C0; # (릩; 릩; 릩; 릩; 릩; ) HANGUL SYLLABLE RYIT B9AA;B9AA;1105 1174 11C1;B9AA;1105 1174 11C1; # (릪; 릪; 릪; 릪; 릪; ) HANGUL SYLLABLE RYIP B9AB;B9AB;1105 1174 11C2;B9AB;1105 1174 11C2; # (릫; 릫; 릫; 릫; 릫; ) HANGUL SYLLABLE RYIH B9AC;B9AC;1105 1175;B9AC;1105 1175; # (리; 리; 리; 리; 리; ) HANGUL SYLLABLE RI B9AD;B9AD;1105 1175 11A8;B9AD;1105 1175 11A8; # (릭; 릭; 릭; 릭; 릭; ) HANGUL SYLLABLE RIG B9AE;B9AE;1105 1175 11A9;B9AE;1105 1175 11A9; # (릮; 릮; 릮; 릮; 릮; ) HANGUL SYLLABLE RIGG B9AF;B9AF;1105 1175 11AA;B9AF;1105 1175 11AA; # (릯; 릯; 릯; 릯; 릯; ) HANGUL SYLLABLE RIGS B9B0;B9B0;1105 1175 11AB;B9B0;1105 1175 11AB; # (린; 린; 린; 린; 린; ) HANGUL SYLLABLE RIN B9B1;B9B1;1105 1175 11AC;B9B1;1105 1175 11AC; # (릱; 릱; 릱; 릱; 릱; ) HANGUL SYLLABLE RINJ B9B2;B9B2;1105 1175 11AD;B9B2;1105 1175 11AD; # (릲; 릲; 릲; 릲; 릲; ) HANGUL SYLLABLE RINH B9B3;B9B3;1105 1175 11AE;B9B3;1105 1175 11AE; # (릳; 릳; 릳; 릳; 릳; ) HANGUL SYLLABLE RID B9B4;B9B4;1105 1175 11AF;B9B4;1105 1175 11AF; # (릴; 릴; 릴; 릴; 릴; ) HANGUL SYLLABLE RIL B9B5;B9B5;1105 1175 11B0;B9B5;1105 1175 11B0; # (릵; 릵; 릵; 릵; 릵; ) HANGUL SYLLABLE RILG B9B6;B9B6;1105 1175 11B1;B9B6;1105 1175 11B1; # (릶; 릶; 릶; 릶; 릶; ) HANGUL SYLLABLE RILM B9B7;B9B7;1105 1175 11B2;B9B7;1105 1175 11B2; # (릷; 릷; 릷; 릷; 릷; ) HANGUL SYLLABLE RILB B9B8;B9B8;1105 1175 11B3;B9B8;1105 1175 11B3; # (릸; 릸; 릸; 릸; 릸; ) HANGUL SYLLABLE RILS B9B9;B9B9;1105 1175 11B4;B9B9;1105 1175 11B4; # (릹; 릹; 릹; 릹; 릹; ) HANGUL SYLLABLE RILT B9BA;B9BA;1105 1175 11B5;B9BA;1105 1175 11B5; # (릺; 릺; 릺; 릺; 릺; ) HANGUL SYLLABLE RILP B9BB;B9BB;1105 1175 11B6;B9BB;1105 1175 11B6; # (릻; 릻; 릻; 릻; 릻; ) HANGUL SYLLABLE RILH B9BC;B9BC;1105 1175 11B7;B9BC;1105 1175 11B7; # (림; 림; 림; 림; 림; ) HANGUL SYLLABLE RIM B9BD;B9BD;1105 1175 11B8;B9BD;1105 1175 11B8; # (립; 립; 립; 립; 립; ) HANGUL SYLLABLE RIB B9BE;B9BE;1105 1175 11B9;B9BE;1105 1175 11B9; # (릾; 릾; 릾; 릾; 릾; ) HANGUL SYLLABLE RIBS B9BF;B9BF;1105 1175 11BA;B9BF;1105 1175 11BA; # (릿; 릿; 릿; 릿; 릿; ) HANGUL SYLLABLE RIS B9C0;B9C0;1105 1175 11BB;B9C0;1105 1175 11BB; # (맀; 맀; 맀; 맀; 맀; ) HANGUL SYLLABLE RISS B9C1;B9C1;1105 1175 11BC;B9C1;1105 1175 11BC; # (링; 링; 링; 링; 링; ) HANGUL SYLLABLE RING B9C2;B9C2;1105 1175 11BD;B9C2;1105 1175 11BD; # (맂; 맂; 맂; 맂; 맂; ) HANGUL SYLLABLE RIJ B9C3;B9C3;1105 1175 11BE;B9C3;1105 1175 11BE; # (맃; 맃; 맃; 맃; 맃; ) HANGUL SYLLABLE RIC B9C4;B9C4;1105 1175 11BF;B9C4;1105 1175 11BF; # (맄; 맄; 맄; 맄; 맄; ) HANGUL SYLLABLE RIK B9C5;B9C5;1105 1175 11C0;B9C5;1105 1175 11C0; # (맅; 맅; 맅; 맅; 맅; ) HANGUL SYLLABLE RIT B9C6;B9C6;1105 1175 11C1;B9C6;1105 1175 11C1; # (맆; 맆; 맆; 맆; 맆; ) HANGUL SYLLABLE RIP B9C7;B9C7;1105 1175 11C2;B9C7;1105 1175 11C2; # (맇; 맇; 맇; 맇; 맇; ) HANGUL SYLLABLE RIH B9C8;B9C8;1106 1161;B9C8;1106 1161; # (마; 마; 마; 마; 마; ) HANGUL SYLLABLE MA B9C9;B9C9;1106 1161 11A8;B9C9;1106 1161 11A8; # (막; 막; 막; 막; 막; ) HANGUL SYLLABLE MAG B9CA;B9CA;1106 1161 11A9;B9CA;1106 1161 11A9; # (맊; 맊; 맊; 맊; 맊; ) HANGUL SYLLABLE MAGG B9CB;B9CB;1106 1161 11AA;B9CB;1106 1161 11AA; # (맋; 맋; 맋; 맋; 맋; ) HANGUL SYLLABLE MAGS B9CC;B9CC;1106 1161 11AB;B9CC;1106 1161 11AB; # (만; 만; 만; 만; 만; ) HANGUL SYLLABLE MAN B9CD;B9CD;1106 1161 11AC;B9CD;1106 1161 11AC; # (맍; 맍; 맍; 맍; 맍; ) HANGUL SYLLABLE MANJ B9CE;B9CE;1106 1161 11AD;B9CE;1106 1161 11AD; # (많; 많; 많; 많; 많; ) HANGUL SYLLABLE MANH B9CF;B9CF;1106 1161 11AE;B9CF;1106 1161 11AE; # (맏; 맏; 맏; 맏; 맏; ) HANGUL SYLLABLE MAD B9D0;B9D0;1106 1161 11AF;B9D0;1106 1161 11AF; # (말; 말; 말; 말; 말; ) HANGUL SYLLABLE MAL B9D1;B9D1;1106 1161 11B0;B9D1;1106 1161 11B0; # (맑; 맑; 맑; 맑; 맑; ) HANGUL SYLLABLE MALG B9D2;B9D2;1106 1161 11B1;B9D2;1106 1161 11B1; # (맒; 맒; 맒; 맒; 맒; ) HANGUL SYLLABLE MALM B9D3;B9D3;1106 1161 11B2;B9D3;1106 1161 11B2; # (맓; 맓; 맓; 맓; 맓; ) HANGUL SYLLABLE MALB B9D4;B9D4;1106 1161 11B3;B9D4;1106 1161 11B3; # (맔; 맔; 맔; 맔; 맔; ) HANGUL SYLLABLE MALS B9D5;B9D5;1106 1161 11B4;B9D5;1106 1161 11B4; # (맕; 맕; 맕; 맕; 맕; ) HANGUL SYLLABLE MALT B9D6;B9D6;1106 1161 11B5;B9D6;1106 1161 11B5; # (맖; 맖; 맖; 맖; 맖; ) HANGUL SYLLABLE MALP B9D7;B9D7;1106 1161 11B6;B9D7;1106 1161 11B6; # (맗; 맗; 맗; 맗; 맗; ) HANGUL SYLLABLE MALH B9D8;B9D8;1106 1161 11B7;B9D8;1106 1161 11B7; # (맘; 맘; 맘; 맘; 맘; ) HANGUL SYLLABLE MAM B9D9;B9D9;1106 1161 11B8;B9D9;1106 1161 11B8; # (맙; 맙; 맙; 맙; 맙; ) HANGUL SYLLABLE MAB B9DA;B9DA;1106 1161 11B9;B9DA;1106 1161 11B9; # (맚; 맚; 맚; 맚; 맚; ) HANGUL SYLLABLE MABS B9DB;B9DB;1106 1161 11BA;B9DB;1106 1161 11BA; # (맛; 맛; 맛; 맛; 맛; ) HANGUL SYLLABLE MAS B9DC;B9DC;1106 1161 11BB;B9DC;1106 1161 11BB; # (맜; 맜; 맜; 맜; 맜; ) HANGUL SYLLABLE MASS B9DD;B9DD;1106 1161 11BC;B9DD;1106 1161 11BC; # (망; 망; 망; 망; 망; ) HANGUL SYLLABLE MANG B9DE;B9DE;1106 1161 11BD;B9DE;1106 1161 11BD; # (맞; 맞; 맞; 맞; 맞; ) HANGUL SYLLABLE MAJ B9DF;B9DF;1106 1161 11BE;B9DF;1106 1161 11BE; # (맟; 맟; 맟; 맟; 맟; ) HANGUL SYLLABLE MAC B9E0;B9E0;1106 1161 11BF;B9E0;1106 1161 11BF; # (맠; 맠; 맠; 맠; 맠; ) HANGUL SYLLABLE MAK B9E1;B9E1;1106 1161 11C0;B9E1;1106 1161 11C0; # (맡; 맡; 맡; 맡; 맡; ) HANGUL SYLLABLE MAT B9E2;B9E2;1106 1161 11C1;B9E2;1106 1161 11C1; # (맢; 맢; 맢; 맢; 맢; ) HANGUL SYLLABLE MAP B9E3;B9E3;1106 1161 11C2;B9E3;1106 1161 11C2; # (맣; 맣; 맣; 맣; 맣; ) HANGUL SYLLABLE MAH B9E4;B9E4;1106 1162;B9E4;1106 1162; # (매; 매; 매; 매; 매; ) HANGUL SYLLABLE MAE B9E5;B9E5;1106 1162 11A8;B9E5;1106 1162 11A8; # (맥; 맥; 맥; 맥; 맥; ) HANGUL SYLLABLE MAEG B9E6;B9E6;1106 1162 11A9;B9E6;1106 1162 11A9; # (맦; 맦; 맦; 맦; 맦; ) HANGUL SYLLABLE MAEGG B9E7;B9E7;1106 1162 11AA;B9E7;1106 1162 11AA; # (맧; 맧; 맧; 맧; 맧; ) HANGUL SYLLABLE MAEGS B9E8;B9E8;1106 1162 11AB;B9E8;1106 1162 11AB; # (맨; 맨; 맨; 맨; 맨; ) HANGUL SYLLABLE MAEN B9E9;B9E9;1106 1162 11AC;B9E9;1106 1162 11AC; # (맩; 맩; 맩; 맩; 맩; ) HANGUL SYLLABLE MAENJ B9EA;B9EA;1106 1162 11AD;B9EA;1106 1162 11AD; # (맪; 맪; 맪; 맪; 맪; ) HANGUL SYLLABLE MAENH B9EB;B9EB;1106 1162 11AE;B9EB;1106 1162 11AE; # (맫; 맫; 맫; 맫; 맫; ) HANGUL SYLLABLE MAED B9EC;B9EC;1106 1162 11AF;B9EC;1106 1162 11AF; # (맬; 맬; 맬; 맬; 맬; ) HANGUL SYLLABLE MAEL B9ED;B9ED;1106 1162 11B0;B9ED;1106 1162 11B0; # (맭; 맭; 맭; 맭; 맭; ) HANGUL SYLLABLE MAELG B9EE;B9EE;1106 1162 11B1;B9EE;1106 1162 11B1; # (맮; 맮; 맮; 맮; 맮; ) HANGUL SYLLABLE MAELM B9EF;B9EF;1106 1162 11B2;B9EF;1106 1162 11B2; # (맯; 맯; 맯; 맯; 맯; ) HANGUL SYLLABLE MAELB B9F0;B9F0;1106 1162 11B3;B9F0;1106 1162 11B3; # (맰; 맰; 맰; 맰; 맰; ) HANGUL SYLLABLE MAELS B9F1;B9F1;1106 1162 11B4;B9F1;1106 1162 11B4; # (맱; 맱; 맱; 맱; 맱; ) HANGUL SYLLABLE MAELT B9F2;B9F2;1106 1162 11B5;B9F2;1106 1162 11B5; # (맲; 맲; 맲; 맲; 맲; ) HANGUL SYLLABLE MAELP B9F3;B9F3;1106 1162 11B6;B9F3;1106 1162 11B6; # (맳; 맳; 맳; 맳; 맳; ) HANGUL SYLLABLE MAELH B9F4;B9F4;1106 1162 11B7;B9F4;1106 1162 11B7; # (맴; 맴; 맴; 맴; 맴; ) HANGUL SYLLABLE MAEM B9F5;B9F5;1106 1162 11B8;B9F5;1106 1162 11B8; # (맵; 맵; 맵; 맵; 맵; ) HANGUL SYLLABLE MAEB B9F6;B9F6;1106 1162 11B9;B9F6;1106 1162 11B9; # (맶; 맶; 맶; 맶; 맶; ) HANGUL SYLLABLE MAEBS B9F7;B9F7;1106 1162 11BA;B9F7;1106 1162 11BA; # (맷; 맷; 맷; 맷; 맷; ) HANGUL SYLLABLE MAES B9F8;B9F8;1106 1162 11BB;B9F8;1106 1162 11BB; # (맸; 맸; 맸; 맸; 맸; ) HANGUL SYLLABLE MAESS B9F9;B9F9;1106 1162 11BC;B9F9;1106 1162 11BC; # (맹; 맹; 맹; 맹; 맹; ) HANGUL SYLLABLE MAENG B9FA;B9FA;1106 1162 11BD;B9FA;1106 1162 11BD; # (맺; 맺; 맺; 맺; 맺; ) HANGUL SYLLABLE MAEJ B9FB;B9FB;1106 1162 11BE;B9FB;1106 1162 11BE; # (맻; 맻; 맻; 맻; 맻; ) HANGUL SYLLABLE MAEC B9FC;B9FC;1106 1162 11BF;B9FC;1106 1162 11BF; # (맼; 맼; 맼; 맼; 맼; ) HANGUL SYLLABLE MAEK B9FD;B9FD;1106 1162 11C0;B9FD;1106 1162 11C0; # (맽; 맽; 맽; 맽; 맽; ) HANGUL SYLLABLE MAET B9FE;B9FE;1106 1162 11C1;B9FE;1106 1162 11C1; # (맾; 맾; 맾; 맾; 맾; ) HANGUL SYLLABLE MAEP B9FF;B9FF;1106 1162 11C2;B9FF;1106 1162 11C2; # (맿; 맿; 맿; 맿; 맿; ) HANGUL SYLLABLE MAEH BA00;BA00;1106 1163;BA00;1106 1163; # (먀; 먀; 먀; 먀; 먀; ) HANGUL SYLLABLE MYA BA01;BA01;1106 1163 11A8;BA01;1106 1163 11A8; # (먁; 먁; 먁; 먁; 먁; ) HANGUL SYLLABLE MYAG BA02;BA02;1106 1163 11A9;BA02;1106 1163 11A9; # (먂; 먂; 먂; 먂; 먂; ) HANGUL SYLLABLE MYAGG BA03;BA03;1106 1163 11AA;BA03;1106 1163 11AA; # (먃; 먃; 먃; 먃; 먃; ) HANGUL SYLLABLE MYAGS BA04;BA04;1106 1163 11AB;BA04;1106 1163 11AB; # (먄; 먄; 먄; 먄; 먄; ) HANGUL SYLLABLE MYAN BA05;BA05;1106 1163 11AC;BA05;1106 1163 11AC; # (먅; 먅; 먅; 먅; 먅; ) HANGUL SYLLABLE MYANJ BA06;BA06;1106 1163 11AD;BA06;1106 1163 11AD; # (먆; 먆; 먆; 먆; 먆; ) HANGUL SYLLABLE MYANH BA07;BA07;1106 1163 11AE;BA07;1106 1163 11AE; # (먇; 먇; 먇; 먇; 먇; ) HANGUL SYLLABLE MYAD BA08;BA08;1106 1163 11AF;BA08;1106 1163 11AF; # (먈; 먈; 먈; 먈; 먈; ) HANGUL SYLLABLE MYAL BA09;BA09;1106 1163 11B0;BA09;1106 1163 11B0; # (먉; 먉; 먉; 먉; 먉; ) HANGUL SYLLABLE MYALG BA0A;BA0A;1106 1163 11B1;BA0A;1106 1163 11B1; # (먊; 먊; 먊; 먊; 먊; ) HANGUL SYLLABLE MYALM BA0B;BA0B;1106 1163 11B2;BA0B;1106 1163 11B2; # (먋; 먋; 먋; 먋; 먋; ) HANGUL SYLLABLE MYALB BA0C;BA0C;1106 1163 11B3;BA0C;1106 1163 11B3; # (먌; 먌; 먌; 먌; 먌; ) HANGUL SYLLABLE MYALS BA0D;BA0D;1106 1163 11B4;BA0D;1106 1163 11B4; # (먍; 먍; 먍; 먍; 먍; ) HANGUL SYLLABLE MYALT BA0E;BA0E;1106 1163 11B5;BA0E;1106 1163 11B5; # (먎; 먎; 먎; 먎; 먎; ) HANGUL SYLLABLE MYALP BA0F;BA0F;1106 1163 11B6;BA0F;1106 1163 11B6; # (먏; 먏; 먏; 먏; 먏; ) HANGUL SYLLABLE MYALH BA10;BA10;1106 1163 11B7;BA10;1106 1163 11B7; # (먐; 먐; 먐; 먐; 먐; ) HANGUL SYLLABLE MYAM BA11;BA11;1106 1163 11B8;BA11;1106 1163 11B8; # (먑; 먑; 먑; 먑; 먑; ) HANGUL SYLLABLE MYAB BA12;BA12;1106 1163 11B9;BA12;1106 1163 11B9; # (먒; 먒; 먒; 먒; 먒; ) HANGUL SYLLABLE MYABS BA13;BA13;1106 1163 11BA;BA13;1106 1163 11BA; # (먓; 먓; 먓; 먓; 먓; ) HANGUL SYLLABLE MYAS BA14;BA14;1106 1163 11BB;BA14;1106 1163 11BB; # (먔; 먔; 먔; 먔; 먔; ) HANGUL SYLLABLE MYASS BA15;BA15;1106 1163 11BC;BA15;1106 1163 11BC; # (먕; 먕; 먕; 먕; 먕; ) HANGUL SYLLABLE MYANG BA16;BA16;1106 1163 11BD;BA16;1106 1163 11BD; # (먖; 먖; 먖; 먖; 먖; ) HANGUL SYLLABLE MYAJ BA17;BA17;1106 1163 11BE;BA17;1106 1163 11BE; # (먗; 먗; 먗; 먗; 먗; ) HANGUL SYLLABLE MYAC BA18;BA18;1106 1163 11BF;BA18;1106 1163 11BF; # (먘; 먘; 먘; 먘; 먘; ) HANGUL SYLLABLE MYAK BA19;BA19;1106 1163 11C0;BA19;1106 1163 11C0; # (먙; 먙; 먙; 먙; 먙; ) HANGUL SYLLABLE MYAT BA1A;BA1A;1106 1163 11C1;BA1A;1106 1163 11C1; # (먚; 먚; 먚; 먚; 먚; ) HANGUL SYLLABLE MYAP BA1B;BA1B;1106 1163 11C2;BA1B;1106 1163 11C2; # (먛; 먛; 먛; 먛; 먛; ) HANGUL SYLLABLE MYAH BA1C;BA1C;1106 1164;BA1C;1106 1164; # (먜; 먜; 먜; 먜; 먜; ) HANGUL SYLLABLE MYAE BA1D;BA1D;1106 1164 11A8;BA1D;1106 1164 11A8; # (먝; 먝; 먝; 먝; 먝; ) HANGUL SYLLABLE MYAEG BA1E;BA1E;1106 1164 11A9;BA1E;1106 1164 11A9; # (먞; 먞; 먞; 먞; 먞; ) HANGUL SYLLABLE MYAEGG BA1F;BA1F;1106 1164 11AA;BA1F;1106 1164 11AA; # (먟; 먟; 먟; 먟; 먟; ) HANGUL SYLLABLE MYAEGS BA20;BA20;1106 1164 11AB;BA20;1106 1164 11AB; # (먠; 먠; 먠; 먠; 먠; ) HANGUL SYLLABLE MYAEN BA21;BA21;1106 1164 11AC;BA21;1106 1164 11AC; # (먡; 먡; 먡; 먡; 먡; ) HANGUL SYLLABLE MYAENJ BA22;BA22;1106 1164 11AD;BA22;1106 1164 11AD; # (먢; 먢; 먢; 먢; 먢; ) HANGUL SYLLABLE MYAENH BA23;BA23;1106 1164 11AE;BA23;1106 1164 11AE; # (먣; 먣; 먣; 먣; 먣; ) HANGUL SYLLABLE MYAED BA24;BA24;1106 1164 11AF;BA24;1106 1164 11AF; # (먤; 먤; 먤; 먤; 먤; ) HANGUL SYLLABLE MYAEL BA25;BA25;1106 1164 11B0;BA25;1106 1164 11B0; # (먥; 먥; 먥; 먥; 먥; ) HANGUL SYLLABLE MYAELG BA26;BA26;1106 1164 11B1;BA26;1106 1164 11B1; # (먦; 먦; 먦; 먦; 먦; ) HANGUL SYLLABLE MYAELM BA27;BA27;1106 1164 11B2;BA27;1106 1164 11B2; # (먧; 먧; 먧; 먧; 먧; ) HANGUL SYLLABLE MYAELB BA28;BA28;1106 1164 11B3;BA28;1106 1164 11B3; # (먨; 먨; 먨; 먨; 먨; ) HANGUL SYLLABLE MYAELS BA29;BA29;1106 1164 11B4;BA29;1106 1164 11B4; # (먩; 먩; 먩; 먩; 먩; ) HANGUL SYLLABLE MYAELT BA2A;BA2A;1106 1164 11B5;BA2A;1106 1164 11B5; # (먪; 먪; 먪; 먪; 먪; ) HANGUL SYLLABLE MYAELP BA2B;BA2B;1106 1164 11B6;BA2B;1106 1164 11B6; # (먫; 먫; 먫; 먫; 먫; ) HANGUL SYLLABLE MYAELH BA2C;BA2C;1106 1164 11B7;BA2C;1106 1164 11B7; # (먬; 먬; 먬; 먬; 먬; ) HANGUL SYLLABLE MYAEM BA2D;BA2D;1106 1164 11B8;BA2D;1106 1164 11B8; # (먭; 먭; 먭; 먭; 먭; ) HANGUL SYLLABLE MYAEB BA2E;BA2E;1106 1164 11B9;BA2E;1106 1164 11B9; # (먮; 먮; 먮; 먮; 먮; ) HANGUL SYLLABLE MYAEBS BA2F;BA2F;1106 1164 11BA;BA2F;1106 1164 11BA; # (먯; 먯; 먯; 먯; 먯; ) HANGUL SYLLABLE MYAES BA30;BA30;1106 1164 11BB;BA30;1106 1164 11BB; # (먰; 먰; 먰; 먰; 먰; ) HANGUL SYLLABLE MYAESS BA31;BA31;1106 1164 11BC;BA31;1106 1164 11BC; # (먱; 먱; 먱; 먱; 먱; ) HANGUL SYLLABLE MYAENG BA32;BA32;1106 1164 11BD;BA32;1106 1164 11BD; # (먲; 먲; 먲; 먲; 먲; ) HANGUL SYLLABLE MYAEJ BA33;BA33;1106 1164 11BE;BA33;1106 1164 11BE; # (먳; 먳; 먳; 먳; 먳; ) HANGUL SYLLABLE MYAEC BA34;BA34;1106 1164 11BF;BA34;1106 1164 11BF; # (먴; 먴; 먴; 먴; 먴; ) HANGUL SYLLABLE MYAEK BA35;BA35;1106 1164 11C0;BA35;1106 1164 11C0; # (먵; 먵; 먵; 먵; 먵; ) HANGUL SYLLABLE MYAET BA36;BA36;1106 1164 11C1;BA36;1106 1164 11C1; # (먶; 먶; 먶; 먶; 먶; ) HANGUL SYLLABLE MYAEP BA37;BA37;1106 1164 11C2;BA37;1106 1164 11C2; # (먷; 먷; 먷; 먷; 먷; ) HANGUL SYLLABLE MYAEH BA38;BA38;1106 1165;BA38;1106 1165; # (머; 머; 머; 머; 머; ) HANGUL SYLLABLE MEO BA39;BA39;1106 1165 11A8;BA39;1106 1165 11A8; # (먹; 먹; 먹; 먹; 먹; ) HANGUL SYLLABLE MEOG BA3A;BA3A;1106 1165 11A9;BA3A;1106 1165 11A9; # (먺; 먺; 먺; 먺; 먺; ) HANGUL SYLLABLE MEOGG BA3B;BA3B;1106 1165 11AA;BA3B;1106 1165 11AA; # (먻; 먻; 먻; 먻; 먻; ) HANGUL SYLLABLE MEOGS BA3C;BA3C;1106 1165 11AB;BA3C;1106 1165 11AB; # (먼; 먼; 먼; 먼; 먼; ) HANGUL SYLLABLE MEON BA3D;BA3D;1106 1165 11AC;BA3D;1106 1165 11AC; # (먽; 먽; 먽; 먽; 먽; ) HANGUL SYLLABLE MEONJ BA3E;BA3E;1106 1165 11AD;BA3E;1106 1165 11AD; # (먾; 먾; 먾; 먾; 먾; ) HANGUL SYLLABLE MEONH BA3F;BA3F;1106 1165 11AE;BA3F;1106 1165 11AE; # (먿; 먿; 먿; 먿; 먿; ) HANGUL SYLLABLE MEOD BA40;BA40;1106 1165 11AF;BA40;1106 1165 11AF; # (멀; 멀; 멀; 멀; 멀; ) HANGUL SYLLABLE MEOL BA41;BA41;1106 1165 11B0;BA41;1106 1165 11B0; # (멁; 멁; 멁; 멁; 멁; ) HANGUL SYLLABLE MEOLG BA42;BA42;1106 1165 11B1;BA42;1106 1165 11B1; # (멂; 멂; 멂; 멂; 멂; ) HANGUL SYLLABLE MEOLM BA43;BA43;1106 1165 11B2;BA43;1106 1165 11B2; # (멃; 멃; 멃; 멃; 멃; ) HANGUL SYLLABLE MEOLB BA44;BA44;1106 1165 11B3;BA44;1106 1165 11B3; # (멄; 멄; 멄; 멄; 멄; ) HANGUL SYLLABLE MEOLS BA45;BA45;1106 1165 11B4;BA45;1106 1165 11B4; # (멅; 멅; 멅; 멅; 멅; ) HANGUL SYLLABLE MEOLT BA46;BA46;1106 1165 11B5;BA46;1106 1165 11B5; # (멆; 멆; 멆; 멆; 멆; ) HANGUL SYLLABLE MEOLP BA47;BA47;1106 1165 11B6;BA47;1106 1165 11B6; # (멇; 멇; 멇; 멇; 멇; ) HANGUL SYLLABLE MEOLH BA48;BA48;1106 1165 11B7;BA48;1106 1165 11B7; # (멈; 멈; 멈; 멈; 멈; ) HANGUL SYLLABLE MEOM BA49;BA49;1106 1165 11B8;BA49;1106 1165 11B8; # (멉; 멉; 멉; 멉; 멉; ) HANGUL SYLLABLE MEOB BA4A;BA4A;1106 1165 11B9;BA4A;1106 1165 11B9; # (멊; 멊; 멊; 멊; 멊; ) HANGUL SYLLABLE MEOBS BA4B;BA4B;1106 1165 11BA;BA4B;1106 1165 11BA; # (멋; 멋; 멋; 멋; 멋; ) HANGUL SYLLABLE MEOS BA4C;BA4C;1106 1165 11BB;BA4C;1106 1165 11BB; # (멌; 멌; 멌; 멌; 멌; ) HANGUL SYLLABLE MEOSS BA4D;BA4D;1106 1165 11BC;BA4D;1106 1165 11BC; # (멍; 멍; 멍; 멍; 멍; ) HANGUL SYLLABLE MEONG BA4E;BA4E;1106 1165 11BD;BA4E;1106 1165 11BD; # (멎; 멎; 멎; 멎; 멎; ) HANGUL SYLLABLE MEOJ BA4F;BA4F;1106 1165 11BE;BA4F;1106 1165 11BE; # (멏; 멏; 멏; 멏; 멏; ) HANGUL SYLLABLE MEOC BA50;BA50;1106 1165 11BF;BA50;1106 1165 11BF; # (멐; 멐; 멐; 멐; 멐; ) HANGUL SYLLABLE MEOK BA51;BA51;1106 1165 11C0;BA51;1106 1165 11C0; # (멑; 멑; 멑; 멑; 멑; ) HANGUL SYLLABLE MEOT BA52;BA52;1106 1165 11C1;BA52;1106 1165 11C1; # (멒; 멒; 멒; 멒; 멒; ) HANGUL SYLLABLE MEOP BA53;BA53;1106 1165 11C2;BA53;1106 1165 11C2; # (멓; 멓; 멓; 멓; 멓; ) HANGUL SYLLABLE MEOH BA54;BA54;1106 1166;BA54;1106 1166; # (메; 메; 메; 메; 메; ) HANGUL SYLLABLE ME BA55;BA55;1106 1166 11A8;BA55;1106 1166 11A8; # (멕; 멕; 멕; 멕; 멕; ) HANGUL SYLLABLE MEG BA56;BA56;1106 1166 11A9;BA56;1106 1166 11A9; # (멖; 멖; 멖; 멖; 멖; ) HANGUL SYLLABLE MEGG BA57;BA57;1106 1166 11AA;BA57;1106 1166 11AA; # (멗; 멗; 멗; 멗; 멗; ) HANGUL SYLLABLE MEGS BA58;BA58;1106 1166 11AB;BA58;1106 1166 11AB; # (멘; 멘; 멘; 멘; 멘; ) HANGUL SYLLABLE MEN BA59;BA59;1106 1166 11AC;BA59;1106 1166 11AC; # (멙; 멙; 멙; 멙; 멙; ) HANGUL SYLLABLE MENJ BA5A;BA5A;1106 1166 11AD;BA5A;1106 1166 11AD; # (멚; 멚; 멚; 멚; 멚; ) HANGUL SYLLABLE MENH BA5B;BA5B;1106 1166 11AE;BA5B;1106 1166 11AE; # (멛; 멛; 멛; 멛; 멛; ) HANGUL SYLLABLE MED BA5C;BA5C;1106 1166 11AF;BA5C;1106 1166 11AF; # (멜; 멜; 멜; 멜; 멜; ) HANGUL SYLLABLE MEL BA5D;BA5D;1106 1166 11B0;BA5D;1106 1166 11B0; # (멝; 멝; 멝; 멝; 멝; ) HANGUL SYLLABLE MELG BA5E;BA5E;1106 1166 11B1;BA5E;1106 1166 11B1; # (멞; 멞; 멞; 멞; 멞; ) HANGUL SYLLABLE MELM BA5F;BA5F;1106 1166 11B2;BA5F;1106 1166 11B2; # (멟; 멟; 멟; 멟; 멟; ) HANGUL SYLLABLE MELB BA60;BA60;1106 1166 11B3;BA60;1106 1166 11B3; # (멠; 멠; 멠; 멠; 멠; ) HANGUL SYLLABLE MELS BA61;BA61;1106 1166 11B4;BA61;1106 1166 11B4; # (멡; 멡; 멡; 멡; 멡; ) HANGUL SYLLABLE MELT BA62;BA62;1106 1166 11B5;BA62;1106 1166 11B5; # (멢; 멢; 멢; 멢; 멢; ) HANGUL SYLLABLE MELP BA63;BA63;1106 1166 11B6;BA63;1106 1166 11B6; # (멣; 멣; 멣; 멣; 멣; ) HANGUL SYLLABLE MELH BA64;BA64;1106 1166 11B7;BA64;1106 1166 11B7; # (멤; 멤; 멤; 멤; 멤; ) HANGUL SYLLABLE MEM BA65;BA65;1106 1166 11B8;BA65;1106 1166 11B8; # (멥; 멥; 멥; 멥; 멥; ) HANGUL SYLLABLE MEB BA66;BA66;1106 1166 11B9;BA66;1106 1166 11B9; # (멦; 멦; 멦; 멦; 멦; ) HANGUL SYLLABLE MEBS BA67;BA67;1106 1166 11BA;BA67;1106 1166 11BA; # (멧; 멧; 멧; 멧; 멧; ) HANGUL SYLLABLE MES BA68;BA68;1106 1166 11BB;BA68;1106 1166 11BB; # (멨; 멨; 멨; 멨; 멨; ) HANGUL SYLLABLE MESS BA69;BA69;1106 1166 11BC;BA69;1106 1166 11BC; # (멩; 멩; 멩; 멩; 멩; ) HANGUL SYLLABLE MENG BA6A;BA6A;1106 1166 11BD;BA6A;1106 1166 11BD; # (멪; 멪; 멪; 멪; 멪; ) HANGUL SYLLABLE MEJ BA6B;BA6B;1106 1166 11BE;BA6B;1106 1166 11BE; # (멫; 멫; 멫; 멫; 멫; ) HANGUL SYLLABLE MEC BA6C;BA6C;1106 1166 11BF;BA6C;1106 1166 11BF; # (멬; 멬; 멬; 멬; 멬; ) HANGUL SYLLABLE MEK BA6D;BA6D;1106 1166 11C0;BA6D;1106 1166 11C0; # (멭; 멭; 멭; 멭; 멭; ) HANGUL SYLLABLE MET BA6E;BA6E;1106 1166 11C1;BA6E;1106 1166 11C1; # (멮; 멮; 멮; 멮; 멮; ) HANGUL SYLLABLE MEP BA6F;BA6F;1106 1166 11C2;BA6F;1106 1166 11C2; # (멯; 멯; 멯; 멯; 멯; ) HANGUL SYLLABLE MEH BA70;BA70;1106 1167;BA70;1106 1167; # (며; 며; 며; 며; 며; ) HANGUL SYLLABLE MYEO BA71;BA71;1106 1167 11A8;BA71;1106 1167 11A8; # (멱; 멱; 멱; 멱; 멱; ) HANGUL SYLLABLE MYEOG BA72;BA72;1106 1167 11A9;BA72;1106 1167 11A9; # (멲; 멲; 멲; 멲; 멲; ) HANGUL SYLLABLE MYEOGG BA73;BA73;1106 1167 11AA;BA73;1106 1167 11AA; # (멳; 멳; 멳; 멳; 멳; ) HANGUL SYLLABLE MYEOGS BA74;BA74;1106 1167 11AB;BA74;1106 1167 11AB; # (면; 면; 면; 면; 면; ) HANGUL SYLLABLE MYEON BA75;BA75;1106 1167 11AC;BA75;1106 1167 11AC; # (멵; 멵; 멵; 멵; 멵; ) HANGUL SYLLABLE MYEONJ BA76;BA76;1106 1167 11AD;BA76;1106 1167 11AD; # (멶; 멶; 멶; 멶; 멶; ) HANGUL SYLLABLE MYEONH BA77;BA77;1106 1167 11AE;BA77;1106 1167 11AE; # (멷; 멷; 멷; 멷; 멷; ) HANGUL SYLLABLE MYEOD BA78;BA78;1106 1167 11AF;BA78;1106 1167 11AF; # (멸; 멸; 멸; 멸; 멸; ) HANGUL SYLLABLE MYEOL BA79;BA79;1106 1167 11B0;BA79;1106 1167 11B0; # (멹; 멹; 멹; 멹; 멹; ) HANGUL SYLLABLE MYEOLG BA7A;BA7A;1106 1167 11B1;BA7A;1106 1167 11B1; # (멺; 멺; 멺; 멺; 멺; ) HANGUL SYLLABLE MYEOLM BA7B;BA7B;1106 1167 11B2;BA7B;1106 1167 11B2; # (멻; 멻; 멻; 멻; 멻; ) HANGUL SYLLABLE MYEOLB BA7C;BA7C;1106 1167 11B3;BA7C;1106 1167 11B3; # (멼; 멼; 멼; 멼; 멼; ) HANGUL SYLLABLE MYEOLS BA7D;BA7D;1106 1167 11B4;BA7D;1106 1167 11B4; # (멽; 멽; 멽; 멽; 멽; ) HANGUL SYLLABLE MYEOLT BA7E;BA7E;1106 1167 11B5;BA7E;1106 1167 11B5; # (멾; 멾; 멾; 멾; 멾; ) HANGUL SYLLABLE MYEOLP BA7F;BA7F;1106 1167 11B6;BA7F;1106 1167 11B6; # (멿; 멿; 멿; 멿; 멿; ) HANGUL SYLLABLE MYEOLH BA80;BA80;1106 1167 11B7;BA80;1106 1167 11B7; # (몀; 몀; 몀; 몀; 몀; ) HANGUL SYLLABLE MYEOM BA81;BA81;1106 1167 11B8;BA81;1106 1167 11B8; # (몁; 몁; 몁; 몁; 몁; ) HANGUL SYLLABLE MYEOB BA82;BA82;1106 1167 11B9;BA82;1106 1167 11B9; # (몂; 몂; 몂; 몂; 몂; ) HANGUL SYLLABLE MYEOBS BA83;BA83;1106 1167 11BA;BA83;1106 1167 11BA; # (몃; 몃; 몃; 몃; 몃; ) HANGUL SYLLABLE MYEOS BA84;BA84;1106 1167 11BB;BA84;1106 1167 11BB; # (몄; 몄; 몄; 몄; 몄; ) HANGUL SYLLABLE MYEOSS BA85;BA85;1106 1167 11BC;BA85;1106 1167 11BC; # (명; 명; 명; 명; 명; ) HANGUL SYLLABLE MYEONG BA86;BA86;1106 1167 11BD;BA86;1106 1167 11BD; # (몆; 몆; 몆; 몆; 몆; ) HANGUL SYLLABLE MYEOJ BA87;BA87;1106 1167 11BE;BA87;1106 1167 11BE; # (몇; 몇; 몇; 몇; 몇; ) HANGUL SYLLABLE MYEOC BA88;BA88;1106 1167 11BF;BA88;1106 1167 11BF; # (몈; 몈; 몈; 몈; 몈; ) HANGUL SYLLABLE MYEOK BA89;BA89;1106 1167 11C0;BA89;1106 1167 11C0; # (몉; 몉; 몉; 몉; 몉; ) HANGUL SYLLABLE MYEOT BA8A;BA8A;1106 1167 11C1;BA8A;1106 1167 11C1; # (몊; 몊; 몊; 몊; 몊; ) HANGUL SYLLABLE MYEOP BA8B;BA8B;1106 1167 11C2;BA8B;1106 1167 11C2; # (몋; 몋; 몋; 몋; 몋; ) HANGUL SYLLABLE MYEOH BA8C;BA8C;1106 1168;BA8C;1106 1168; # (몌; 몌; 몌; 몌; 몌; ) HANGUL SYLLABLE MYE BA8D;BA8D;1106 1168 11A8;BA8D;1106 1168 11A8; # (몍; 몍; 몍; 몍; 몍; ) HANGUL SYLLABLE MYEG BA8E;BA8E;1106 1168 11A9;BA8E;1106 1168 11A9; # (몎; 몎; 몎; 몎; 몎; ) HANGUL SYLLABLE MYEGG BA8F;BA8F;1106 1168 11AA;BA8F;1106 1168 11AA; # (몏; 몏; 몏; 몏; 몏; ) HANGUL SYLLABLE MYEGS BA90;BA90;1106 1168 11AB;BA90;1106 1168 11AB; # (몐; 몐; 몐; 몐; 몐; ) HANGUL SYLLABLE MYEN BA91;BA91;1106 1168 11AC;BA91;1106 1168 11AC; # (몑; 몑; 몑; 몑; 몑; ) HANGUL SYLLABLE MYENJ BA92;BA92;1106 1168 11AD;BA92;1106 1168 11AD; # (몒; 몒; 몒; 몒; 몒; ) HANGUL SYLLABLE MYENH BA93;BA93;1106 1168 11AE;BA93;1106 1168 11AE; # (몓; 몓; 몓; 몓; 몓; ) HANGUL SYLLABLE MYED BA94;BA94;1106 1168 11AF;BA94;1106 1168 11AF; # (몔; 몔; 몔; 몔; 몔; ) HANGUL SYLLABLE MYEL BA95;BA95;1106 1168 11B0;BA95;1106 1168 11B0; # (몕; 몕; 몕; 몕; 몕; ) HANGUL SYLLABLE MYELG BA96;BA96;1106 1168 11B1;BA96;1106 1168 11B1; # (몖; 몖; 몖; 몖; 몖; ) HANGUL SYLLABLE MYELM BA97;BA97;1106 1168 11B2;BA97;1106 1168 11B2; # (몗; 몗; 몗; 몗; 몗; ) HANGUL SYLLABLE MYELB BA98;BA98;1106 1168 11B3;BA98;1106 1168 11B3; # (몘; 몘; 몘; 몘; 몘; ) HANGUL SYLLABLE MYELS BA99;BA99;1106 1168 11B4;BA99;1106 1168 11B4; # (몙; 몙; 몙; 몙; 몙; ) HANGUL SYLLABLE MYELT BA9A;BA9A;1106 1168 11B5;BA9A;1106 1168 11B5; # (몚; 몚; 몚; 몚; 몚; ) HANGUL SYLLABLE MYELP BA9B;BA9B;1106 1168 11B6;BA9B;1106 1168 11B6; # (몛; 몛; 몛; 몛; 몛; ) HANGUL SYLLABLE MYELH BA9C;BA9C;1106 1168 11B7;BA9C;1106 1168 11B7; # (몜; 몜; 몜; 몜; 몜; ) HANGUL SYLLABLE MYEM BA9D;BA9D;1106 1168 11B8;BA9D;1106 1168 11B8; # (몝; 몝; 몝; 몝; 몝; ) HANGUL SYLLABLE MYEB BA9E;BA9E;1106 1168 11B9;BA9E;1106 1168 11B9; # (몞; 몞; 몞; 몞; 몞; ) HANGUL SYLLABLE MYEBS BA9F;BA9F;1106 1168 11BA;BA9F;1106 1168 11BA; # (몟; 몟; 몟; 몟; 몟; ) HANGUL SYLLABLE MYES BAA0;BAA0;1106 1168 11BB;BAA0;1106 1168 11BB; # (몠; 몠; 몠; 몠; 몠; ) HANGUL SYLLABLE MYESS BAA1;BAA1;1106 1168 11BC;BAA1;1106 1168 11BC; # (몡; 몡; 몡; 몡; 몡; ) HANGUL SYLLABLE MYENG BAA2;BAA2;1106 1168 11BD;BAA2;1106 1168 11BD; # (몢; 몢; 몢; 몢; 몢; ) HANGUL SYLLABLE MYEJ BAA3;BAA3;1106 1168 11BE;BAA3;1106 1168 11BE; # (몣; 몣; 몣; 몣; 몣; ) HANGUL SYLLABLE MYEC BAA4;BAA4;1106 1168 11BF;BAA4;1106 1168 11BF; # (몤; 몤; 몤; 몤; 몤; ) HANGUL SYLLABLE MYEK BAA5;BAA5;1106 1168 11C0;BAA5;1106 1168 11C0; # (몥; 몥; 몥; 몥; 몥; ) HANGUL SYLLABLE MYET BAA6;BAA6;1106 1168 11C1;BAA6;1106 1168 11C1; # (몦; 몦; 몦; 몦; 몦; ) HANGUL SYLLABLE MYEP BAA7;BAA7;1106 1168 11C2;BAA7;1106 1168 11C2; # (몧; 몧; 몧; 몧; 몧; ) HANGUL SYLLABLE MYEH BAA8;BAA8;1106 1169;BAA8;1106 1169; # (모; 모; 모; 모; 모; ) HANGUL SYLLABLE MO BAA9;BAA9;1106 1169 11A8;BAA9;1106 1169 11A8; # (목; 목; 목; 목; 목; ) HANGUL SYLLABLE MOG BAAA;BAAA;1106 1169 11A9;BAAA;1106 1169 11A9; # (몪; 몪; 몪; 몪; 몪; ) HANGUL SYLLABLE MOGG BAAB;BAAB;1106 1169 11AA;BAAB;1106 1169 11AA; # (몫; 몫; 몫; 몫; 몫; ) HANGUL SYLLABLE MOGS BAAC;BAAC;1106 1169 11AB;BAAC;1106 1169 11AB; # (몬; 몬; 몬; 몬; 몬; ) HANGUL SYLLABLE MON BAAD;BAAD;1106 1169 11AC;BAAD;1106 1169 11AC; # (몭; 몭; 몭; 몭; 몭; ) HANGUL SYLLABLE MONJ BAAE;BAAE;1106 1169 11AD;BAAE;1106 1169 11AD; # (몮; 몮; 몮; 몮; 몮; ) HANGUL SYLLABLE MONH BAAF;BAAF;1106 1169 11AE;BAAF;1106 1169 11AE; # (몯; 몯; 몯; 몯; 몯; ) HANGUL SYLLABLE MOD BAB0;BAB0;1106 1169 11AF;BAB0;1106 1169 11AF; # (몰; 몰; 몰; 몰; 몰; ) HANGUL SYLLABLE MOL BAB1;BAB1;1106 1169 11B0;BAB1;1106 1169 11B0; # (몱; 몱; 몱; 몱; 몱; ) HANGUL SYLLABLE MOLG BAB2;BAB2;1106 1169 11B1;BAB2;1106 1169 11B1; # (몲; 몲; 몲; 몲; 몲; ) HANGUL SYLLABLE MOLM BAB3;BAB3;1106 1169 11B2;BAB3;1106 1169 11B2; # (몳; 몳; 몳; 몳; 몳; ) HANGUL SYLLABLE MOLB BAB4;BAB4;1106 1169 11B3;BAB4;1106 1169 11B3; # (몴; 몴; 몴; 몴; 몴; ) HANGUL SYLLABLE MOLS BAB5;BAB5;1106 1169 11B4;BAB5;1106 1169 11B4; # (몵; 몵; 몵; 몵; 몵; ) HANGUL SYLLABLE MOLT BAB6;BAB6;1106 1169 11B5;BAB6;1106 1169 11B5; # (몶; 몶; 몶; 몶; 몶; ) HANGUL SYLLABLE MOLP BAB7;BAB7;1106 1169 11B6;BAB7;1106 1169 11B6; # (몷; 몷; 몷; 몷; 몷; ) HANGUL SYLLABLE MOLH BAB8;BAB8;1106 1169 11B7;BAB8;1106 1169 11B7; # (몸; 몸; 몸; 몸; 몸; ) HANGUL SYLLABLE MOM BAB9;BAB9;1106 1169 11B8;BAB9;1106 1169 11B8; # (몹; 몹; 몹; 몹; 몹; ) HANGUL SYLLABLE MOB BABA;BABA;1106 1169 11B9;BABA;1106 1169 11B9; # (몺; 몺; 몺; 몺; 몺; ) HANGUL SYLLABLE MOBS BABB;BABB;1106 1169 11BA;BABB;1106 1169 11BA; # (못; 못; 못; 못; 못; ) HANGUL SYLLABLE MOS BABC;BABC;1106 1169 11BB;BABC;1106 1169 11BB; # (몼; 몼; 몼; 몼; 몼; ) HANGUL SYLLABLE MOSS BABD;BABD;1106 1169 11BC;BABD;1106 1169 11BC; # (몽; 몽; 몽; 몽; 몽; ) HANGUL SYLLABLE MONG BABE;BABE;1106 1169 11BD;BABE;1106 1169 11BD; # (몾; 몾; 몾; 몾; 몾; ) HANGUL SYLLABLE MOJ BABF;BABF;1106 1169 11BE;BABF;1106 1169 11BE; # (몿; 몿; 몿; 몿; 몿; ) HANGUL SYLLABLE MOC BAC0;BAC0;1106 1169 11BF;BAC0;1106 1169 11BF; # (뫀; 뫀; 뫀; 뫀; 뫀; ) HANGUL SYLLABLE MOK BAC1;BAC1;1106 1169 11C0;BAC1;1106 1169 11C0; # (뫁; 뫁; 뫁; 뫁; 뫁; ) HANGUL SYLLABLE MOT BAC2;BAC2;1106 1169 11C1;BAC2;1106 1169 11C1; # (뫂; 뫂; 뫂; 뫂; 뫂; ) HANGUL SYLLABLE MOP BAC3;BAC3;1106 1169 11C2;BAC3;1106 1169 11C2; # (뫃; 뫃; 뫃; 뫃; 뫃; ) HANGUL SYLLABLE MOH BAC4;BAC4;1106 116A;BAC4;1106 116A; # (뫄; 뫄; 뫄; 뫄; 뫄; ) HANGUL SYLLABLE MWA BAC5;BAC5;1106 116A 11A8;BAC5;1106 116A 11A8; # (뫅; 뫅; 뫅; 뫅; 뫅; ) HANGUL SYLLABLE MWAG BAC6;BAC6;1106 116A 11A9;BAC6;1106 116A 11A9; # (뫆; 뫆; 뫆; 뫆; 뫆; ) HANGUL SYLLABLE MWAGG BAC7;BAC7;1106 116A 11AA;BAC7;1106 116A 11AA; # (뫇; 뫇; 뫇; 뫇; 뫇; ) HANGUL SYLLABLE MWAGS BAC8;BAC8;1106 116A 11AB;BAC8;1106 116A 11AB; # (뫈; 뫈; 뫈; 뫈; 뫈; ) HANGUL SYLLABLE MWAN BAC9;BAC9;1106 116A 11AC;BAC9;1106 116A 11AC; # (뫉; 뫉; 뫉; 뫉; 뫉; ) HANGUL SYLLABLE MWANJ BACA;BACA;1106 116A 11AD;BACA;1106 116A 11AD; # (뫊; 뫊; 뫊; 뫊; 뫊; ) HANGUL SYLLABLE MWANH BACB;BACB;1106 116A 11AE;BACB;1106 116A 11AE; # (뫋; 뫋; 뫋; 뫋; 뫋; ) HANGUL SYLLABLE MWAD BACC;BACC;1106 116A 11AF;BACC;1106 116A 11AF; # (뫌; 뫌; 뫌; 뫌; 뫌; ) HANGUL SYLLABLE MWAL BACD;BACD;1106 116A 11B0;BACD;1106 116A 11B0; # (뫍; 뫍; 뫍; 뫍; 뫍; ) HANGUL SYLLABLE MWALG BACE;BACE;1106 116A 11B1;BACE;1106 116A 11B1; # (뫎; 뫎; 뫎; 뫎; 뫎; ) HANGUL SYLLABLE MWALM BACF;BACF;1106 116A 11B2;BACF;1106 116A 11B2; # (뫏; 뫏; 뫏; 뫏; 뫏; ) HANGUL SYLLABLE MWALB BAD0;BAD0;1106 116A 11B3;BAD0;1106 116A 11B3; # (뫐; 뫐; 뫐; 뫐; 뫐; ) HANGUL SYLLABLE MWALS BAD1;BAD1;1106 116A 11B4;BAD1;1106 116A 11B4; # (뫑; 뫑; 뫑; 뫑; 뫑; ) HANGUL SYLLABLE MWALT BAD2;BAD2;1106 116A 11B5;BAD2;1106 116A 11B5; # (뫒; 뫒; 뫒; 뫒; 뫒; ) HANGUL SYLLABLE MWALP BAD3;BAD3;1106 116A 11B6;BAD3;1106 116A 11B6; # (뫓; 뫓; 뫓; 뫓; 뫓; ) HANGUL SYLLABLE MWALH BAD4;BAD4;1106 116A 11B7;BAD4;1106 116A 11B7; # (뫔; 뫔; 뫔; 뫔; 뫔; ) HANGUL SYLLABLE MWAM BAD5;BAD5;1106 116A 11B8;BAD5;1106 116A 11B8; # (뫕; 뫕; 뫕; 뫕; 뫕; ) HANGUL SYLLABLE MWAB BAD6;BAD6;1106 116A 11B9;BAD6;1106 116A 11B9; # (뫖; 뫖; 뫖; 뫖; 뫖; ) HANGUL SYLLABLE MWABS BAD7;BAD7;1106 116A 11BA;BAD7;1106 116A 11BA; # (뫗; 뫗; 뫗; 뫗; 뫗; ) HANGUL SYLLABLE MWAS BAD8;BAD8;1106 116A 11BB;BAD8;1106 116A 11BB; # (뫘; 뫘; 뫘; 뫘; 뫘; ) HANGUL SYLLABLE MWASS BAD9;BAD9;1106 116A 11BC;BAD9;1106 116A 11BC; # (뫙; 뫙; 뫙; 뫙; 뫙; ) HANGUL SYLLABLE MWANG BADA;BADA;1106 116A 11BD;BADA;1106 116A 11BD; # (뫚; 뫚; 뫚; 뫚; 뫚; ) HANGUL SYLLABLE MWAJ BADB;BADB;1106 116A 11BE;BADB;1106 116A 11BE; # (뫛; 뫛; 뫛; 뫛; 뫛; ) HANGUL SYLLABLE MWAC BADC;BADC;1106 116A 11BF;BADC;1106 116A 11BF; # (뫜; 뫜; 뫜; 뫜; 뫜; ) HANGUL SYLLABLE MWAK BADD;BADD;1106 116A 11C0;BADD;1106 116A 11C0; # (뫝; 뫝; 뫝; 뫝; 뫝; ) HANGUL SYLLABLE MWAT BADE;BADE;1106 116A 11C1;BADE;1106 116A 11C1; # (뫞; 뫞; 뫞; 뫞; 뫞; ) HANGUL SYLLABLE MWAP BADF;BADF;1106 116A 11C2;BADF;1106 116A 11C2; # (뫟; 뫟; 뫟; 뫟; 뫟; ) HANGUL SYLLABLE MWAH BAE0;BAE0;1106 116B;BAE0;1106 116B; # (뫠; 뫠; 뫠; 뫠; 뫠; ) HANGUL SYLLABLE MWAE BAE1;BAE1;1106 116B 11A8;BAE1;1106 116B 11A8; # (뫡; 뫡; 뫡; 뫡; 뫡; ) HANGUL SYLLABLE MWAEG BAE2;BAE2;1106 116B 11A9;BAE2;1106 116B 11A9; # (뫢; 뫢; 뫢; 뫢; 뫢; ) HANGUL SYLLABLE MWAEGG BAE3;BAE3;1106 116B 11AA;BAE3;1106 116B 11AA; # (뫣; 뫣; 뫣; 뫣; 뫣; ) HANGUL SYLLABLE MWAEGS BAE4;BAE4;1106 116B 11AB;BAE4;1106 116B 11AB; # (뫤; 뫤; 뫤; 뫤; 뫤; ) HANGUL SYLLABLE MWAEN BAE5;BAE5;1106 116B 11AC;BAE5;1106 116B 11AC; # (뫥; 뫥; 뫥; 뫥; 뫥; ) HANGUL SYLLABLE MWAENJ BAE6;BAE6;1106 116B 11AD;BAE6;1106 116B 11AD; # (뫦; 뫦; 뫦; 뫦; 뫦; ) HANGUL SYLLABLE MWAENH BAE7;BAE7;1106 116B 11AE;BAE7;1106 116B 11AE; # (뫧; 뫧; 뫧; 뫧; 뫧; ) HANGUL SYLLABLE MWAED BAE8;BAE8;1106 116B 11AF;BAE8;1106 116B 11AF; # (뫨; 뫨; 뫨; 뫨; 뫨; ) HANGUL SYLLABLE MWAEL BAE9;BAE9;1106 116B 11B0;BAE9;1106 116B 11B0; # (뫩; 뫩; 뫩; 뫩; 뫩; ) HANGUL SYLLABLE MWAELG BAEA;BAEA;1106 116B 11B1;BAEA;1106 116B 11B1; # (뫪; 뫪; 뫪; 뫪; 뫪; ) HANGUL SYLLABLE MWAELM BAEB;BAEB;1106 116B 11B2;BAEB;1106 116B 11B2; # (뫫; 뫫; 뫫; 뫫; 뫫; ) HANGUL SYLLABLE MWAELB BAEC;BAEC;1106 116B 11B3;BAEC;1106 116B 11B3; # (뫬; 뫬; 뫬; 뫬; 뫬; ) HANGUL SYLLABLE MWAELS BAED;BAED;1106 116B 11B4;BAED;1106 116B 11B4; # (뫭; 뫭; 뫭; 뫭; 뫭; ) HANGUL SYLLABLE MWAELT BAEE;BAEE;1106 116B 11B5;BAEE;1106 116B 11B5; # (뫮; 뫮; 뫮; 뫮; 뫮; ) HANGUL SYLLABLE MWAELP BAEF;BAEF;1106 116B 11B6;BAEF;1106 116B 11B6; # (뫯; 뫯; 뫯; 뫯; 뫯; ) HANGUL SYLLABLE MWAELH BAF0;BAF0;1106 116B 11B7;BAF0;1106 116B 11B7; # (뫰; 뫰; 뫰; 뫰; 뫰; ) HANGUL SYLLABLE MWAEM BAF1;BAF1;1106 116B 11B8;BAF1;1106 116B 11B8; # (뫱; 뫱; 뫱; 뫱; 뫱; ) HANGUL SYLLABLE MWAEB BAF2;BAF2;1106 116B 11B9;BAF2;1106 116B 11B9; # (뫲; 뫲; 뫲; 뫲; 뫲; ) HANGUL SYLLABLE MWAEBS BAF3;BAF3;1106 116B 11BA;BAF3;1106 116B 11BA; # (뫳; 뫳; 뫳; 뫳; 뫳; ) HANGUL SYLLABLE MWAES BAF4;BAF4;1106 116B 11BB;BAF4;1106 116B 11BB; # (뫴; 뫴; 뫴; 뫴; 뫴; ) HANGUL SYLLABLE MWAESS BAF5;BAF5;1106 116B 11BC;BAF5;1106 116B 11BC; # (뫵; 뫵; 뫵; 뫵; 뫵; ) HANGUL SYLLABLE MWAENG BAF6;BAF6;1106 116B 11BD;BAF6;1106 116B 11BD; # (뫶; 뫶; 뫶; 뫶; 뫶; ) HANGUL SYLLABLE MWAEJ BAF7;BAF7;1106 116B 11BE;BAF7;1106 116B 11BE; # (뫷; 뫷; 뫷; 뫷; 뫷; ) HANGUL SYLLABLE MWAEC BAF8;BAF8;1106 116B 11BF;BAF8;1106 116B 11BF; # (뫸; 뫸; 뫸; 뫸; 뫸; ) HANGUL SYLLABLE MWAEK BAF9;BAF9;1106 116B 11C0;BAF9;1106 116B 11C0; # (뫹; 뫹; 뫹; 뫹; 뫹; ) HANGUL SYLLABLE MWAET BAFA;BAFA;1106 116B 11C1;BAFA;1106 116B 11C1; # (뫺; 뫺; 뫺; 뫺; 뫺; ) HANGUL SYLLABLE MWAEP BAFB;BAFB;1106 116B 11C2;BAFB;1106 116B 11C2; # (뫻; 뫻; 뫻; 뫻; 뫻; ) HANGUL SYLLABLE MWAEH BAFC;BAFC;1106 116C;BAFC;1106 116C; # (뫼; 뫼; 뫼; 뫼; 뫼; ) HANGUL SYLLABLE MOE BAFD;BAFD;1106 116C 11A8;BAFD;1106 116C 11A8; # (뫽; 뫽; 뫽; 뫽; 뫽; ) HANGUL SYLLABLE MOEG BAFE;BAFE;1106 116C 11A9;BAFE;1106 116C 11A9; # (뫾; 뫾; 뫾; 뫾; 뫾; ) HANGUL SYLLABLE MOEGG BAFF;BAFF;1106 116C 11AA;BAFF;1106 116C 11AA; # (뫿; 뫿; 뫿; 뫿; 뫿; ) HANGUL SYLLABLE MOEGS BB00;BB00;1106 116C 11AB;BB00;1106 116C 11AB; # (묀; 묀; 묀; 묀; 묀; ) HANGUL SYLLABLE MOEN BB01;BB01;1106 116C 11AC;BB01;1106 116C 11AC; # (묁; 묁; 묁; 묁; 묁; ) HANGUL SYLLABLE MOENJ BB02;BB02;1106 116C 11AD;BB02;1106 116C 11AD; # (묂; 묂; 묂; 묂; 묂; ) HANGUL SYLLABLE MOENH BB03;BB03;1106 116C 11AE;BB03;1106 116C 11AE; # (묃; 묃; 묃; 묃; 묃; ) HANGUL SYLLABLE MOED BB04;BB04;1106 116C 11AF;BB04;1106 116C 11AF; # (묄; 묄; 묄; 묄; 묄; ) HANGUL SYLLABLE MOEL BB05;BB05;1106 116C 11B0;BB05;1106 116C 11B0; # (묅; 묅; 묅; 묅; 묅; ) HANGUL SYLLABLE MOELG BB06;BB06;1106 116C 11B1;BB06;1106 116C 11B1; # (묆; 묆; 묆; 묆; 묆; ) HANGUL SYLLABLE MOELM BB07;BB07;1106 116C 11B2;BB07;1106 116C 11B2; # (묇; 묇; 묇; 묇; 묇; ) HANGUL SYLLABLE MOELB BB08;BB08;1106 116C 11B3;BB08;1106 116C 11B3; # (묈; 묈; 묈; 묈; 묈; ) HANGUL SYLLABLE MOELS BB09;BB09;1106 116C 11B4;BB09;1106 116C 11B4; # (묉; 묉; 묉; 묉; 묉; ) HANGUL SYLLABLE MOELT BB0A;BB0A;1106 116C 11B5;BB0A;1106 116C 11B5; # (묊; 묊; 묊; 묊; 묊; ) HANGUL SYLLABLE MOELP BB0B;BB0B;1106 116C 11B6;BB0B;1106 116C 11B6; # (묋; 묋; 묋; 묋; 묋; ) HANGUL SYLLABLE MOELH BB0C;BB0C;1106 116C 11B7;BB0C;1106 116C 11B7; # (묌; 묌; 묌; 묌; 묌; ) HANGUL SYLLABLE MOEM BB0D;BB0D;1106 116C 11B8;BB0D;1106 116C 11B8; # (묍; 묍; 묍; 묍; 묍; ) HANGUL SYLLABLE MOEB BB0E;BB0E;1106 116C 11B9;BB0E;1106 116C 11B9; # (묎; 묎; 묎; 묎; 묎; ) HANGUL SYLLABLE MOEBS BB0F;BB0F;1106 116C 11BA;BB0F;1106 116C 11BA; # (묏; 묏; 묏; 묏; 묏; ) HANGUL SYLLABLE MOES BB10;BB10;1106 116C 11BB;BB10;1106 116C 11BB; # (묐; 묐; 묐; 묐; 묐; ) HANGUL SYLLABLE MOESS BB11;BB11;1106 116C 11BC;BB11;1106 116C 11BC; # (묑; 묑; 묑; 묑; 묑; ) HANGUL SYLLABLE MOENG BB12;BB12;1106 116C 11BD;BB12;1106 116C 11BD; # (묒; 묒; 묒; 묒; 묒; ) HANGUL SYLLABLE MOEJ BB13;BB13;1106 116C 11BE;BB13;1106 116C 11BE; # (묓; 묓; 묓; 묓; 묓; ) HANGUL SYLLABLE MOEC BB14;BB14;1106 116C 11BF;BB14;1106 116C 11BF; # (묔; 묔; 묔; 묔; 묔; ) HANGUL SYLLABLE MOEK BB15;BB15;1106 116C 11C0;BB15;1106 116C 11C0; # (묕; 묕; 묕; 묕; 묕; ) HANGUL SYLLABLE MOET BB16;BB16;1106 116C 11C1;BB16;1106 116C 11C1; # (묖; 묖; 묖; 묖; 묖; ) HANGUL SYLLABLE MOEP BB17;BB17;1106 116C 11C2;BB17;1106 116C 11C2; # (묗; 묗; 묗; 묗; 묗; ) HANGUL SYLLABLE MOEH BB18;BB18;1106 116D;BB18;1106 116D; # (묘; 묘; 묘; 묘; 묘; ) HANGUL SYLLABLE MYO BB19;BB19;1106 116D 11A8;BB19;1106 116D 11A8; # (묙; 묙; 묙; 묙; 묙; ) HANGUL SYLLABLE MYOG BB1A;BB1A;1106 116D 11A9;BB1A;1106 116D 11A9; # (묚; 묚; 묚; 묚; 묚; ) HANGUL SYLLABLE MYOGG BB1B;BB1B;1106 116D 11AA;BB1B;1106 116D 11AA; # (묛; 묛; 묛; 묛; 묛; ) HANGUL SYLLABLE MYOGS BB1C;BB1C;1106 116D 11AB;BB1C;1106 116D 11AB; # (묜; 묜; 묜; 묜; 묜; ) HANGUL SYLLABLE MYON BB1D;BB1D;1106 116D 11AC;BB1D;1106 116D 11AC; # (묝; 묝; 묝; 묝; 묝; ) HANGUL SYLLABLE MYONJ BB1E;BB1E;1106 116D 11AD;BB1E;1106 116D 11AD; # (묞; 묞; 묞; 묞; 묞; ) HANGUL SYLLABLE MYONH BB1F;BB1F;1106 116D 11AE;BB1F;1106 116D 11AE; # (묟; 묟; 묟; 묟; 묟; ) HANGUL SYLLABLE MYOD BB20;BB20;1106 116D 11AF;BB20;1106 116D 11AF; # (묠; 묠; 묠; 묠; 묠; ) HANGUL SYLLABLE MYOL BB21;BB21;1106 116D 11B0;BB21;1106 116D 11B0; # (묡; 묡; 묡; 묡; 묡; ) HANGUL SYLLABLE MYOLG BB22;BB22;1106 116D 11B1;BB22;1106 116D 11B1; # (묢; 묢; 묢; 묢; 묢; ) HANGUL SYLLABLE MYOLM BB23;BB23;1106 116D 11B2;BB23;1106 116D 11B2; # (묣; 묣; 묣; 묣; 묣; ) HANGUL SYLLABLE MYOLB BB24;BB24;1106 116D 11B3;BB24;1106 116D 11B3; # (묤; 묤; 묤; 묤; 묤; ) HANGUL SYLLABLE MYOLS BB25;BB25;1106 116D 11B4;BB25;1106 116D 11B4; # (묥; 묥; 묥; 묥; 묥; ) HANGUL SYLLABLE MYOLT BB26;BB26;1106 116D 11B5;BB26;1106 116D 11B5; # (묦; 묦; 묦; 묦; 묦; ) HANGUL SYLLABLE MYOLP BB27;BB27;1106 116D 11B6;BB27;1106 116D 11B6; # (묧; 묧; 묧; 묧; 묧; ) HANGUL SYLLABLE MYOLH BB28;BB28;1106 116D 11B7;BB28;1106 116D 11B7; # (묨; 묨; 묨; 묨; 묨; ) HANGUL SYLLABLE MYOM BB29;BB29;1106 116D 11B8;BB29;1106 116D 11B8; # (묩; 묩; 묩; 묩; 묩; ) HANGUL SYLLABLE MYOB BB2A;BB2A;1106 116D 11B9;BB2A;1106 116D 11B9; # (묪; 묪; 묪; 묪; 묪; ) HANGUL SYLLABLE MYOBS BB2B;BB2B;1106 116D 11BA;BB2B;1106 116D 11BA; # (묫; 묫; 묫; 묫; 묫; ) HANGUL SYLLABLE MYOS BB2C;BB2C;1106 116D 11BB;BB2C;1106 116D 11BB; # (묬; 묬; 묬; 묬; 묬; ) HANGUL SYLLABLE MYOSS BB2D;BB2D;1106 116D 11BC;BB2D;1106 116D 11BC; # (묭; 묭; 묭; 묭; 묭; ) HANGUL SYLLABLE MYONG BB2E;BB2E;1106 116D 11BD;BB2E;1106 116D 11BD; # (묮; 묮; 묮; 묮; 묮; ) HANGUL SYLLABLE MYOJ BB2F;BB2F;1106 116D 11BE;BB2F;1106 116D 11BE; # (묯; 묯; 묯; 묯; 묯; ) HANGUL SYLLABLE MYOC BB30;BB30;1106 116D 11BF;BB30;1106 116D 11BF; # (묰; 묰; 묰; 묰; 묰; ) HANGUL SYLLABLE MYOK BB31;BB31;1106 116D 11C0;BB31;1106 116D 11C0; # (묱; 묱; 묱; 묱; 묱; ) HANGUL SYLLABLE MYOT BB32;BB32;1106 116D 11C1;BB32;1106 116D 11C1; # (묲; 묲; 묲; 묲; 묲; ) HANGUL SYLLABLE MYOP BB33;BB33;1106 116D 11C2;BB33;1106 116D 11C2; # (묳; 묳; 묳; 묳; 묳; ) HANGUL SYLLABLE MYOH BB34;BB34;1106 116E;BB34;1106 116E; # (무; 무; 무; 무; 무; ) HANGUL SYLLABLE MU BB35;BB35;1106 116E 11A8;BB35;1106 116E 11A8; # (묵; 묵; 묵; 묵; 묵; ) HANGUL SYLLABLE MUG BB36;BB36;1106 116E 11A9;BB36;1106 116E 11A9; # (묶; 묶; 묶; 묶; 묶; ) HANGUL SYLLABLE MUGG BB37;BB37;1106 116E 11AA;BB37;1106 116E 11AA; # (묷; 묷; 묷; 묷; 묷; ) HANGUL SYLLABLE MUGS BB38;BB38;1106 116E 11AB;BB38;1106 116E 11AB; # (문; 문; 문; 문; 문; ) HANGUL SYLLABLE MUN BB39;BB39;1106 116E 11AC;BB39;1106 116E 11AC; # (묹; 묹; 묹; 묹; 묹; ) HANGUL SYLLABLE MUNJ BB3A;BB3A;1106 116E 11AD;BB3A;1106 116E 11AD; # (묺; 묺; 묺; 묺; 묺; ) HANGUL SYLLABLE MUNH BB3B;BB3B;1106 116E 11AE;BB3B;1106 116E 11AE; # (묻; 묻; 묻; 묻; 묻; ) HANGUL SYLLABLE MUD BB3C;BB3C;1106 116E 11AF;BB3C;1106 116E 11AF; # (물; 물; 물; 물; 물; ) HANGUL SYLLABLE MUL BB3D;BB3D;1106 116E 11B0;BB3D;1106 116E 11B0; # (묽; 묽; 묽; 묽; 묽; ) HANGUL SYLLABLE MULG BB3E;BB3E;1106 116E 11B1;BB3E;1106 116E 11B1; # (묾; 묾; 묾; 묾; 묾; ) HANGUL SYLLABLE MULM BB3F;BB3F;1106 116E 11B2;BB3F;1106 116E 11B2; # (묿; 묿; 묿; 묿; 묿; ) HANGUL SYLLABLE MULB BB40;BB40;1106 116E 11B3;BB40;1106 116E 11B3; # (뭀; 뭀; 뭀; 뭀; 뭀; ) HANGUL SYLLABLE MULS BB41;BB41;1106 116E 11B4;BB41;1106 116E 11B4; # (뭁; 뭁; 뭁; 뭁; 뭁; ) HANGUL SYLLABLE MULT BB42;BB42;1106 116E 11B5;BB42;1106 116E 11B5; # (뭂; 뭂; 뭂; 뭂; 뭂; ) HANGUL SYLLABLE MULP BB43;BB43;1106 116E 11B6;BB43;1106 116E 11B6; # (뭃; 뭃; 뭃; 뭃; 뭃; ) HANGUL SYLLABLE MULH BB44;BB44;1106 116E 11B7;BB44;1106 116E 11B7; # (뭄; 뭄; 뭄; 뭄; 뭄; ) HANGUL SYLLABLE MUM BB45;BB45;1106 116E 11B8;BB45;1106 116E 11B8; # (뭅; 뭅; 뭅; 뭅; 뭅; ) HANGUL SYLLABLE MUB BB46;BB46;1106 116E 11B9;BB46;1106 116E 11B9; # (뭆; 뭆; 뭆; 뭆; 뭆; ) HANGUL SYLLABLE MUBS BB47;BB47;1106 116E 11BA;BB47;1106 116E 11BA; # (뭇; 뭇; 뭇; 뭇; 뭇; ) HANGUL SYLLABLE MUS BB48;BB48;1106 116E 11BB;BB48;1106 116E 11BB; # (뭈; 뭈; 뭈; 뭈; 뭈; ) HANGUL SYLLABLE MUSS BB49;BB49;1106 116E 11BC;BB49;1106 116E 11BC; # (뭉; 뭉; 뭉; 뭉; 뭉; ) HANGUL SYLLABLE MUNG BB4A;BB4A;1106 116E 11BD;BB4A;1106 116E 11BD; # (뭊; 뭊; 뭊; 뭊; 뭊; ) HANGUL SYLLABLE MUJ BB4B;BB4B;1106 116E 11BE;BB4B;1106 116E 11BE; # (뭋; 뭋; 뭋; 뭋; 뭋; ) HANGUL SYLLABLE MUC BB4C;BB4C;1106 116E 11BF;BB4C;1106 116E 11BF; # (뭌; 뭌; 뭌; 뭌; 뭌; ) HANGUL SYLLABLE MUK BB4D;BB4D;1106 116E 11C0;BB4D;1106 116E 11C0; # (뭍; 뭍; 뭍; 뭍; 뭍; ) HANGUL SYLLABLE MUT BB4E;BB4E;1106 116E 11C1;BB4E;1106 116E 11C1; # (뭎; 뭎; 뭎; 뭎; 뭎; ) HANGUL SYLLABLE MUP BB4F;BB4F;1106 116E 11C2;BB4F;1106 116E 11C2; # (뭏; 뭏; 뭏; 뭏; 뭏; ) HANGUL SYLLABLE MUH BB50;BB50;1106 116F;BB50;1106 116F; # (뭐; 뭐; 뭐; 뭐; 뭐; ) HANGUL SYLLABLE MWEO BB51;BB51;1106 116F 11A8;BB51;1106 116F 11A8; # (뭑; 뭑; 뭑; 뭑; 뭑; ) HANGUL SYLLABLE MWEOG BB52;BB52;1106 116F 11A9;BB52;1106 116F 11A9; # (뭒; 뭒; 뭒; 뭒; 뭒; ) HANGUL SYLLABLE MWEOGG BB53;BB53;1106 116F 11AA;BB53;1106 116F 11AA; # (뭓; 뭓; 뭓; 뭓; 뭓; ) HANGUL SYLLABLE MWEOGS BB54;BB54;1106 116F 11AB;BB54;1106 116F 11AB; # (뭔; 뭔; 뭔; 뭔; 뭔; ) HANGUL SYLLABLE MWEON BB55;BB55;1106 116F 11AC;BB55;1106 116F 11AC; # (뭕; 뭕; 뭕; 뭕; 뭕; ) HANGUL SYLLABLE MWEONJ BB56;BB56;1106 116F 11AD;BB56;1106 116F 11AD; # (뭖; 뭖; 뭖; 뭖; 뭖; ) HANGUL SYLLABLE MWEONH BB57;BB57;1106 116F 11AE;BB57;1106 116F 11AE; # (뭗; 뭗; 뭗; 뭗; 뭗; ) HANGUL SYLLABLE MWEOD BB58;BB58;1106 116F 11AF;BB58;1106 116F 11AF; # (뭘; 뭘; 뭘; 뭘; 뭘; ) HANGUL SYLLABLE MWEOL BB59;BB59;1106 116F 11B0;BB59;1106 116F 11B0; # (뭙; 뭙; 뭙; 뭙; 뭙; ) HANGUL SYLLABLE MWEOLG BB5A;BB5A;1106 116F 11B1;BB5A;1106 116F 11B1; # (뭚; 뭚; 뭚; 뭚; 뭚; ) HANGUL SYLLABLE MWEOLM BB5B;BB5B;1106 116F 11B2;BB5B;1106 116F 11B2; # (뭛; 뭛; 뭛; 뭛; 뭛; ) HANGUL SYLLABLE MWEOLB BB5C;BB5C;1106 116F 11B3;BB5C;1106 116F 11B3; # (뭜; 뭜; 뭜; 뭜; 뭜; ) HANGUL SYLLABLE MWEOLS BB5D;BB5D;1106 116F 11B4;BB5D;1106 116F 11B4; # (뭝; 뭝; 뭝; 뭝; 뭝; ) HANGUL SYLLABLE MWEOLT BB5E;BB5E;1106 116F 11B5;BB5E;1106 116F 11B5; # (뭞; 뭞; 뭞; 뭞; 뭞; ) HANGUL SYLLABLE MWEOLP BB5F;BB5F;1106 116F 11B6;BB5F;1106 116F 11B6; # (뭟; 뭟; 뭟; 뭟; 뭟; ) HANGUL SYLLABLE MWEOLH BB60;BB60;1106 116F 11B7;BB60;1106 116F 11B7; # (뭠; 뭠; 뭠; 뭠; 뭠; ) HANGUL SYLLABLE MWEOM BB61;BB61;1106 116F 11B8;BB61;1106 116F 11B8; # (뭡; 뭡; 뭡; 뭡; 뭡; ) HANGUL SYLLABLE MWEOB BB62;BB62;1106 116F 11B9;BB62;1106 116F 11B9; # (뭢; 뭢; 뭢; 뭢; 뭢; ) HANGUL SYLLABLE MWEOBS BB63;BB63;1106 116F 11BA;BB63;1106 116F 11BA; # (뭣; 뭣; 뭣; 뭣; 뭣; ) HANGUL SYLLABLE MWEOS BB64;BB64;1106 116F 11BB;BB64;1106 116F 11BB; # (뭤; 뭤; 뭤; 뭤; 뭤; ) HANGUL SYLLABLE MWEOSS BB65;BB65;1106 116F 11BC;BB65;1106 116F 11BC; # (뭥; 뭥; 뭥; 뭥; 뭥; ) HANGUL SYLLABLE MWEONG BB66;BB66;1106 116F 11BD;BB66;1106 116F 11BD; # (뭦; 뭦; 뭦; 뭦; 뭦; ) HANGUL SYLLABLE MWEOJ BB67;BB67;1106 116F 11BE;BB67;1106 116F 11BE; # (뭧; 뭧; 뭧; 뭧; 뭧; ) HANGUL SYLLABLE MWEOC BB68;BB68;1106 116F 11BF;BB68;1106 116F 11BF; # (뭨; 뭨; 뭨; 뭨; 뭨; ) HANGUL SYLLABLE MWEOK BB69;BB69;1106 116F 11C0;BB69;1106 116F 11C0; # (뭩; 뭩; 뭩; 뭩; 뭩; ) HANGUL SYLLABLE MWEOT BB6A;BB6A;1106 116F 11C1;BB6A;1106 116F 11C1; # (뭪; 뭪; 뭪; 뭪; 뭪; ) HANGUL SYLLABLE MWEOP BB6B;BB6B;1106 116F 11C2;BB6B;1106 116F 11C2; # (뭫; 뭫; 뭫; 뭫; 뭫; ) HANGUL SYLLABLE MWEOH BB6C;BB6C;1106 1170;BB6C;1106 1170; # (뭬; 뭬; 뭬; 뭬; 뭬; ) HANGUL SYLLABLE MWE BB6D;BB6D;1106 1170 11A8;BB6D;1106 1170 11A8; # (뭭; 뭭; 뭭; 뭭; 뭭; ) HANGUL SYLLABLE MWEG BB6E;BB6E;1106 1170 11A9;BB6E;1106 1170 11A9; # (뭮; 뭮; 뭮; 뭮; 뭮; ) HANGUL SYLLABLE MWEGG BB6F;BB6F;1106 1170 11AA;BB6F;1106 1170 11AA; # (뭯; 뭯; 뭯; 뭯; 뭯; ) HANGUL SYLLABLE MWEGS BB70;BB70;1106 1170 11AB;BB70;1106 1170 11AB; # (뭰; 뭰; 뭰; 뭰; 뭰; ) HANGUL SYLLABLE MWEN BB71;BB71;1106 1170 11AC;BB71;1106 1170 11AC; # (뭱; 뭱; 뭱; 뭱; 뭱; ) HANGUL SYLLABLE MWENJ BB72;BB72;1106 1170 11AD;BB72;1106 1170 11AD; # (뭲; 뭲; 뭲; 뭲; 뭲; ) HANGUL SYLLABLE MWENH BB73;BB73;1106 1170 11AE;BB73;1106 1170 11AE; # (뭳; 뭳; 뭳; 뭳; 뭳; ) HANGUL SYLLABLE MWED BB74;BB74;1106 1170 11AF;BB74;1106 1170 11AF; # (뭴; 뭴; 뭴; 뭴; 뭴; ) HANGUL SYLLABLE MWEL BB75;BB75;1106 1170 11B0;BB75;1106 1170 11B0; # (뭵; 뭵; 뭵; 뭵; 뭵; ) HANGUL SYLLABLE MWELG BB76;BB76;1106 1170 11B1;BB76;1106 1170 11B1; # (뭶; 뭶; 뭶; 뭶; 뭶; ) HANGUL SYLLABLE MWELM BB77;BB77;1106 1170 11B2;BB77;1106 1170 11B2; # (뭷; 뭷; 뭷; 뭷; 뭷; ) HANGUL SYLLABLE MWELB BB78;BB78;1106 1170 11B3;BB78;1106 1170 11B3; # (뭸; 뭸; 뭸; 뭸; 뭸; ) HANGUL SYLLABLE MWELS BB79;BB79;1106 1170 11B4;BB79;1106 1170 11B4; # (뭹; 뭹; 뭹; 뭹; 뭹; ) HANGUL SYLLABLE MWELT BB7A;BB7A;1106 1170 11B5;BB7A;1106 1170 11B5; # (뭺; 뭺; 뭺; 뭺; 뭺; ) HANGUL SYLLABLE MWELP BB7B;BB7B;1106 1170 11B6;BB7B;1106 1170 11B6; # (뭻; 뭻; 뭻; 뭻; 뭻; ) HANGUL SYLLABLE MWELH BB7C;BB7C;1106 1170 11B7;BB7C;1106 1170 11B7; # (뭼; 뭼; 뭼; 뭼; 뭼; ) HANGUL SYLLABLE MWEM BB7D;BB7D;1106 1170 11B8;BB7D;1106 1170 11B8; # (뭽; 뭽; 뭽; 뭽; 뭽; ) HANGUL SYLLABLE MWEB BB7E;BB7E;1106 1170 11B9;BB7E;1106 1170 11B9; # (뭾; 뭾; 뭾; 뭾; 뭾; ) HANGUL SYLLABLE MWEBS BB7F;BB7F;1106 1170 11BA;BB7F;1106 1170 11BA; # (뭿; 뭿; 뭿; 뭿; 뭿; ) HANGUL SYLLABLE MWES BB80;BB80;1106 1170 11BB;BB80;1106 1170 11BB; # (뮀; 뮀; 뮀; 뮀; 뮀; ) HANGUL SYLLABLE MWESS BB81;BB81;1106 1170 11BC;BB81;1106 1170 11BC; # (뮁; 뮁; 뮁; 뮁; 뮁; ) HANGUL SYLLABLE MWENG BB82;BB82;1106 1170 11BD;BB82;1106 1170 11BD; # (뮂; 뮂; 뮂; 뮂; 뮂; ) HANGUL SYLLABLE MWEJ BB83;BB83;1106 1170 11BE;BB83;1106 1170 11BE; # (뮃; 뮃; 뮃; 뮃; 뮃; ) HANGUL SYLLABLE MWEC BB84;BB84;1106 1170 11BF;BB84;1106 1170 11BF; # (뮄; 뮄; 뮄; 뮄; 뮄; ) HANGUL SYLLABLE MWEK BB85;BB85;1106 1170 11C0;BB85;1106 1170 11C0; # (뮅; 뮅; 뮅; 뮅; 뮅; ) HANGUL SYLLABLE MWET BB86;BB86;1106 1170 11C1;BB86;1106 1170 11C1; # (뮆; 뮆; 뮆; 뮆; 뮆; ) HANGUL SYLLABLE MWEP BB87;BB87;1106 1170 11C2;BB87;1106 1170 11C2; # (뮇; 뮇; 뮇; 뮇; 뮇; ) HANGUL SYLLABLE MWEH BB88;BB88;1106 1171;BB88;1106 1171; # (뮈; 뮈; 뮈; 뮈; 뮈; ) HANGUL SYLLABLE MWI BB89;BB89;1106 1171 11A8;BB89;1106 1171 11A8; # (뮉; 뮉; 뮉; 뮉; 뮉; ) HANGUL SYLLABLE MWIG BB8A;BB8A;1106 1171 11A9;BB8A;1106 1171 11A9; # (뮊; 뮊; 뮊; 뮊; 뮊; ) HANGUL SYLLABLE MWIGG BB8B;BB8B;1106 1171 11AA;BB8B;1106 1171 11AA; # (뮋; 뮋; 뮋; 뮋; 뮋; ) HANGUL SYLLABLE MWIGS BB8C;BB8C;1106 1171 11AB;BB8C;1106 1171 11AB; # (뮌; 뮌; 뮌; 뮌; 뮌; ) HANGUL SYLLABLE MWIN BB8D;BB8D;1106 1171 11AC;BB8D;1106 1171 11AC; # (뮍; 뮍; 뮍; 뮍; 뮍; ) HANGUL SYLLABLE MWINJ BB8E;BB8E;1106 1171 11AD;BB8E;1106 1171 11AD; # (뮎; 뮎; 뮎; 뮎; 뮎; ) HANGUL SYLLABLE MWINH BB8F;BB8F;1106 1171 11AE;BB8F;1106 1171 11AE; # (뮏; 뮏; 뮏; 뮏; 뮏; ) HANGUL SYLLABLE MWID BB90;BB90;1106 1171 11AF;BB90;1106 1171 11AF; # (뮐; 뮐; 뮐; 뮐; 뮐; ) HANGUL SYLLABLE MWIL BB91;BB91;1106 1171 11B0;BB91;1106 1171 11B0; # (뮑; 뮑; 뮑; 뮑; 뮑; ) HANGUL SYLLABLE MWILG BB92;BB92;1106 1171 11B1;BB92;1106 1171 11B1; # (뮒; 뮒; 뮒; 뮒; 뮒; ) HANGUL SYLLABLE MWILM BB93;BB93;1106 1171 11B2;BB93;1106 1171 11B2; # (뮓; 뮓; 뮓; 뮓; 뮓; ) HANGUL SYLLABLE MWILB BB94;BB94;1106 1171 11B3;BB94;1106 1171 11B3; # (뮔; 뮔; 뮔; 뮔; 뮔; ) HANGUL SYLLABLE MWILS BB95;BB95;1106 1171 11B4;BB95;1106 1171 11B4; # (뮕; 뮕; 뮕; 뮕; 뮕; ) HANGUL SYLLABLE MWILT BB96;BB96;1106 1171 11B5;BB96;1106 1171 11B5; # (뮖; 뮖; 뮖; 뮖; 뮖; ) HANGUL SYLLABLE MWILP BB97;BB97;1106 1171 11B6;BB97;1106 1171 11B6; # (뮗; 뮗; 뮗; 뮗; 뮗; ) HANGUL SYLLABLE MWILH BB98;BB98;1106 1171 11B7;BB98;1106 1171 11B7; # (뮘; 뮘; 뮘; 뮘; 뮘; ) HANGUL SYLLABLE MWIM BB99;BB99;1106 1171 11B8;BB99;1106 1171 11B8; # (뮙; 뮙; 뮙; 뮙; 뮙; ) HANGUL SYLLABLE MWIB BB9A;BB9A;1106 1171 11B9;BB9A;1106 1171 11B9; # (뮚; 뮚; 뮚; 뮚; 뮚; ) HANGUL SYLLABLE MWIBS BB9B;BB9B;1106 1171 11BA;BB9B;1106 1171 11BA; # (뮛; 뮛; 뮛; 뮛; 뮛; ) HANGUL SYLLABLE MWIS BB9C;BB9C;1106 1171 11BB;BB9C;1106 1171 11BB; # (뮜; 뮜; 뮜; 뮜; 뮜; ) HANGUL SYLLABLE MWISS BB9D;BB9D;1106 1171 11BC;BB9D;1106 1171 11BC; # (뮝; 뮝; 뮝; 뮝; 뮝; ) HANGUL SYLLABLE MWING BB9E;BB9E;1106 1171 11BD;BB9E;1106 1171 11BD; # (뮞; 뮞; 뮞; 뮞; 뮞; ) HANGUL SYLLABLE MWIJ BB9F;BB9F;1106 1171 11BE;BB9F;1106 1171 11BE; # (뮟; 뮟; 뮟; 뮟; 뮟; ) HANGUL SYLLABLE MWIC BBA0;BBA0;1106 1171 11BF;BBA0;1106 1171 11BF; # (뮠; 뮠; 뮠; 뮠; 뮠; ) HANGUL SYLLABLE MWIK BBA1;BBA1;1106 1171 11C0;BBA1;1106 1171 11C0; # (뮡; 뮡; 뮡; 뮡; 뮡; ) HANGUL SYLLABLE MWIT BBA2;BBA2;1106 1171 11C1;BBA2;1106 1171 11C1; # (뮢; 뮢; 뮢; 뮢; 뮢; ) HANGUL SYLLABLE MWIP BBA3;BBA3;1106 1171 11C2;BBA3;1106 1171 11C2; # (뮣; 뮣; 뮣; 뮣; 뮣; ) HANGUL SYLLABLE MWIH BBA4;BBA4;1106 1172;BBA4;1106 1172; # (뮤; 뮤; 뮤; 뮤; 뮤; ) HANGUL SYLLABLE MYU BBA5;BBA5;1106 1172 11A8;BBA5;1106 1172 11A8; # (뮥; 뮥; 뮥; 뮥; 뮥; ) HANGUL SYLLABLE MYUG BBA6;BBA6;1106 1172 11A9;BBA6;1106 1172 11A9; # (뮦; 뮦; 뮦; 뮦; 뮦; ) HANGUL SYLLABLE MYUGG BBA7;BBA7;1106 1172 11AA;BBA7;1106 1172 11AA; # (뮧; 뮧; 뮧; 뮧; 뮧; ) HANGUL SYLLABLE MYUGS BBA8;BBA8;1106 1172 11AB;BBA8;1106 1172 11AB; # (뮨; 뮨; 뮨; 뮨; 뮨; ) HANGUL SYLLABLE MYUN BBA9;BBA9;1106 1172 11AC;BBA9;1106 1172 11AC; # (뮩; 뮩; 뮩; 뮩; 뮩; ) HANGUL SYLLABLE MYUNJ BBAA;BBAA;1106 1172 11AD;BBAA;1106 1172 11AD; # (뮪; 뮪; 뮪; 뮪; 뮪; ) HANGUL SYLLABLE MYUNH BBAB;BBAB;1106 1172 11AE;BBAB;1106 1172 11AE; # (뮫; 뮫; 뮫; 뮫; 뮫; ) HANGUL SYLLABLE MYUD BBAC;BBAC;1106 1172 11AF;BBAC;1106 1172 11AF; # (뮬; 뮬; 뮬; 뮬; 뮬; ) HANGUL SYLLABLE MYUL BBAD;BBAD;1106 1172 11B0;BBAD;1106 1172 11B0; # (뮭; 뮭; 뮭; 뮭; 뮭; ) HANGUL SYLLABLE MYULG BBAE;BBAE;1106 1172 11B1;BBAE;1106 1172 11B1; # (뮮; 뮮; 뮮; 뮮; 뮮; ) HANGUL SYLLABLE MYULM BBAF;BBAF;1106 1172 11B2;BBAF;1106 1172 11B2; # (뮯; 뮯; 뮯; 뮯; 뮯; ) HANGUL SYLLABLE MYULB BBB0;BBB0;1106 1172 11B3;BBB0;1106 1172 11B3; # (뮰; 뮰; 뮰; 뮰; 뮰; ) HANGUL SYLLABLE MYULS BBB1;BBB1;1106 1172 11B4;BBB1;1106 1172 11B4; # (뮱; 뮱; 뮱; 뮱; 뮱; ) HANGUL SYLLABLE MYULT BBB2;BBB2;1106 1172 11B5;BBB2;1106 1172 11B5; # (뮲; 뮲; 뮲; 뮲; 뮲; ) HANGUL SYLLABLE MYULP BBB3;BBB3;1106 1172 11B6;BBB3;1106 1172 11B6; # (뮳; 뮳; 뮳; 뮳; 뮳; ) HANGUL SYLLABLE MYULH BBB4;BBB4;1106 1172 11B7;BBB4;1106 1172 11B7; # (뮴; 뮴; 뮴; 뮴; 뮴; ) HANGUL SYLLABLE MYUM BBB5;BBB5;1106 1172 11B8;BBB5;1106 1172 11B8; # (뮵; 뮵; 뮵; 뮵; 뮵; ) HANGUL SYLLABLE MYUB BBB6;BBB6;1106 1172 11B9;BBB6;1106 1172 11B9; # (뮶; 뮶; 뮶; 뮶; 뮶; ) HANGUL SYLLABLE MYUBS BBB7;BBB7;1106 1172 11BA;BBB7;1106 1172 11BA; # (뮷; 뮷; 뮷; 뮷; 뮷; ) HANGUL SYLLABLE MYUS BBB8;BBB8;1106 1172 11BB;BBB8;1106 1172 11BB; # (뮸; 뮸; 뮸; 뮸; 뮸; ) HANGUL SYLLABLE MYUSS BBB9;BBB9;1106 1172 11BC;BBB9;1106 1172 11BC; # (뮹; 뮹; 뮹; 뮹; 뮹; ) HANGUL SYLLABLE MYUNG BBBA;BBBA;1106 1172 11BD;BBBA;1106 1172 11BD; # (뮺; 뮺; 뮺; 뮺; 뮺; ) HANGUL SYLLABLE MYUJ BBBB;BBBB;1106 1172 11BE;BBBB;1106 1172 11BE; # (뮻; 뮻; 뮻; 뮻; 뮻; ) HANGUL SYLLABLE MYUC BBBC;BBBC;1106 1172 11BF;BBBC;1106 1172 11BF; # (뮼; 뮼; 뮼; 뮼; 뮼; ) HANGUL SYLLABLE MYUK BBBD;BBBD;1106 1172 11C0;BBBD;1106 1172 11C0; # (뮽; 뮽; 뮽; 뮽; 뮽; ) HANGUL SYLLABLE MYUT BBBE;BBBE;1106 1172 11C1;BBBE;1106 1172 11C1; # (뮾; 뮾; 뮾; 뮾; 뮾; ) HANGUL SYLLABLE MYUP BBBF;BBBF;1106 1172 11C2;BBBF;1106 1172 11C2; # (뮿; 뮿; 뮿; 뮿; 뮿; ) HANGUL SYLLABLE MYUH BBC0;BBC0;1106 1173;BBC0;1106 1173; # (므; 므; 므; 므; 므; ) HANGUL SYLLABLE MEU BBC1;BBC1;1106 1173 11A8;BBC1;1106 1173 11A8; # (믁; 믁; 믁; 믁; 믁; ) HANGUL SYLLABLE MEUG BBC2;BBC2;1106 1173 11A9;BBC2;1106 1173 11A9; # (믂; 믂; 믂; 믂; 믂; ) HANGUL SYLLABLE MEUGG BBC3;BBC3;1106 1173 11AA;BBC3;1106 1173 11AA; # (믃; 믃; 믃; 믃; 믃; ) HANGUL SYLLABLE MEUGS BBC4;BBC4;1106 1173 11AB;BBC4;1106 1173 11AB; # (믄; 믄; 믄; 믄; 믄; ) HANGUL SYLLABLE MEUN BBC5;BBC5;1106 1173 11AC;BBC5;1106 1173 11AC; # (믅; 믅; 믅; 믅; 믅; ) HANGUL SYLLABLE MEUNJ BBC6;BBC6;1106 1173 11AD;BBC6;1106 1173 11AD; # (믆; 믆; 믆; 믆; 믆; ) HANGUL SYLLABLE MEUNH BBC7;BBC7;1106 1173 11AE;BBC7;1106 1173 11AE; # (믇; 믇; 믇; 믇; 믇; ) HANGUL SYLLABLE MEUD BBC8;BBC8;1106 1173 11AF;BBC8;1106 1173 11AF; # (믈; 믈; 믈; 믈; 믈; ) HANGUL SYLLABLE MEUL BBC9;BBC9;1106 1173 11B0;BBC9;1106 1173 11B0; # (믉; 믉; 믉; 믉; 믉; ) HANGUL SYLLABLE MEULG BBCA;BBCA;1106 1173 11B1;BBCA;1106 1173 11B1; # (믊; 믊; 믊; 믊; 믊; ) HANGUL SYLLABLE MEULM BBCB;BBCB;1106 1173 11B2;BBCB;1106 1173 11B2; # (믋; 믋; 믋; 믋; 믋; ) HANGUL SYLLABLE MEULB BBCC;BBCC;1106 1173 11B3;BBCC;1106 1173 11B3; # (믌; 믌; 믌; 믌; 믌; ) HANGUL SYLLABLE MEULS BBCD;BBCD;1106 1173 11B4;BBCD;1106 1173 11B4; # (믍; 믍; 믍; 믍; 믍; ) HANGUL SYLLABLE MEULT BBCE;BBCE;1106 1173 11B5;BBCE;1106 1173 11B5; # (믎; 믎; 믎; 믎; 믎; ) HANGUL SYLLABLE MEULP BBCF;BBCF;1106 1173 11B6;BBCF;1106 1173 11B6; # (믏; 믏; 믏; 믏; 믏; ) HANGUL SYLLABLE MEULH BBD0;BBD0;1106 1173 11B7;BBD0;1106 1173 11B7; # (믐; 믐; 믐; 믐; 믐; ) HANGUL SYLLABLE MEUM BBD1;BBD1;1106 1173 11B8;BBD1;1106 1173 11B8; # (믑; 믑; 믑; 믑; 믑; ) HANGUL SYLLABLE MEUB BBD2;BBD2;1106 1173 11B9;BBD2;1106 1173 11B9; # (믒; 믒; 믒; 믒; 믒; ) HANGUL SYLLABLE MEUBS BBD3;BBD3;1106 1173 11BA;BBD3;1106 1173 11BA; # (믓; 믓; 믓; 믓; 믓; ) HANGUL SYLLABLE MEUS BBD4;BBD4;1106 1173 11BB;BBD4;1106 1173 11BB; # (믔; 믔; 믔; 믔; 믔; ) HANGUL SYLLABLE MEUSS BBD5;BBD5;1106 1173 11BC;BBD5;1106 1173 11BC; # (믕; 믕; 믕; 믕; 믕; ) HANGUL SYLLABLE MEUNG BBD6;BBD6;1106 1173 11BD;BBD6;1106 1173 11BD; # (믖; 믖; 믖; 믖; 믖; ) HANGUL SYLLABLE MEUJ BBD7;BBD7;1106 1173 11BE;BBD7;1106 1173 11BE; # (믗; 믗; 믗; 믗; 믗; ) HANGUL SYLLABLE MEUC BBD8;BBD8;1106 1173 11BF;BBD8;1106 1173 11BF; # (믘; 믘; 믘; 믘; 믘; ) HANGUL SYLLABLE MEUK BBD9;BBD9;1106 1173 11C0;BBD9;1106 1173 11C0; # (믙; 믙; 믙; 믙; 믙; ) HANGUL SYLLABLE MEUT BBDA;BBDA;1106 1173 11C1;BBDA;1106 1173 11C1; # (믚; 믚; 믚; 믚; 믚; ) HANGUL SYLLABLE MEUP BBDB;BBDB;1106 1173 11C2;BBDB;1106 1173 11C2; # (믛; 믛; 믛; 믛; 믛; ) HANGUL SYLLABLE MEUH BBDC;BBDC;1106 1174;BBDC;1106 1174; # (믜; 믜; 믜; 믜; 믜; ) HANGUL SYLLABLE MYI BBDD;BBDD;1106 1174 11A8;BBDD;1106 1174 11A8; # (믝; 믝; 믝; 믝; 믝; ) HANGUL SYLLABLE MYIG BBDE;BBDE;1106 1174 11A9;BBDE;1106 1174 11A9; # (믞; 믞; 믞; 믞; 믞; ) HANGUL SYLLABLE MYIGG BBDF;BBDF;1106 1174 11AA;BBDF;1106 1174 11AA; # (믟; 믟; 믟; 믟; 믟; ) HANGUL SYLLABLE MYIGS BBE0;BBE0;1106 1174 11AB;BBE0;1106 1174 11AB; # (믠; 믠; 믠; 믠; 믠; ) HANGUL SYLLABLE MYIN BBE1;BBE1;1106 1174 11AC;BBE1;1106 1174 11AC; # (믡; 믡; 믡; 믡; 믡; ) HANGUL SYLLABLE MYINJ BBE2;BBE2;1106 1174 11AD;BBE2;1106 1174 11AD; # (믢; 믢; 믢; 믢; 믢; ) HANGUL SYLLABLE MYINH BBE3;BBE3;1106 1174 11AE;BBE3;1106 1174 11AE; # (믣; 믣; 믣; 믣; 믣; ) HANGUL SYLLABLE MYID BBE4;BBE4;1106 1174 11AF;BBE4;1106 1174 11AF; # (믤; 믤; 믤; 믤; 믤; ) HANGUL SYLLABLE MYIL BBE5;BBE5;1106 1174 11B0;BBE5;1106 1174 11B0; # (믥; 믥; 믥; 믥; 믥; ) HANGUL SYLLABLE MYILG BBE6;BBE6;1106 1174 11B1;BBE6;1106 1174 11B1; # (믦; 믦; 믦; 믦; 믦; ) HANGUL SYLLABLE MYILM BBE7;BBE7;1106 1174 11B2;BBE7;1106 1174 11B2; # (믧; 믧; 믧; 믧; 믧; ) HANGUL SYLLABLE MYILB BBE8;BBE8;1106 1174 11B3;BBE8;1106 1174 11B3; # (믨; 믨; 믨; 믨; 믨; ) HANGUL SYLLABLE MYILS BBE9;BBE9;1106 1174 11B4;BBE9;1106 1174 11B4; # (믩; 믩; 믩; 믩; 믩; ) HANGUL SYLLABLE MYILT BBEA;BBEA;1106 1174 11B5;BBEA;1106 1174 11B5; # (믪; 믪; 믪; 믪; 믪; ) HANGUL SYLLABLE MYILP BBEB;BBEB;1106 1174 11B6;BBEB;1106 1174 11B6; # (믫; 믫; 믫; 믫; 믫; ) HANGUL SYLLABLE MYILH BBEC;BBEC;1106 1174 11B7;BBEC;1106 1174 11B7; # (믬; 믬; 믬; 믬; 믬; ) HANGUL SYLLABLE MYIM BBED;BBED;1106 1174 11B8;BBED;1106 1174 11B8; # (믭; 믭; 믭; 믭; 믭; ) HANGUL SYLLABLE MYIB BBEE;BBEE;1106 1174 11B9;BBEE;1106 1174 11B9; # (믮; 믮; 믮; 믮; 믮; ) HANGUL SYLLABLE MYIBS BBEF;BBEF;1106 1174 11BA;BBEF;1106 1174 11BA; # (믯; 믯; 믯; 믯; 믯; ) HANGUL SYLLABLE MYIS BBF0;BBF0;1106 1174 11BB;BBF0;1106 1174 11BB; # (믰; 믰; 믰; 믰; 믰; ) HANGUL SYLLABLE MYISS BBF1;BBF1;1106 1174 11BC;BBF1;1106 1174 11BC; # (믱; 믱; 믱; 믱; 믱; ) HANGUL SYLLABLE MYING BBF2;BBF2;1106 1174 11BD;BBF2;1106 1174 11BD; # (믲; 믲; 믲; 믲; 믲; ) HANGUL SYLLABLE MYIJ BBF3;BBF3;1106 1174 11BE;BBF3;1106 1174 11BE; # (믳; 믳; 믳; 믳; 믳; ) HANGUL SYLLABLE MYIC BBF4;BBF4;1106 1174 11BF;BBF4;1106 1174 11BF; # (믴; 믴; 믴; 믴; 믴; ) HANGUL SYLLABLE MYIK BBF5;BBF5;1106 1174 11C0;BBF5;1106 1174 11C0; # (믵; 믵; 믵; 믵; 믵; ) HANGUL SYLLABLE MYIT BBF6;BBF6;1106 1174 11C1;BBF6;1106 1174 11C1; # (믶; 믶; 믶; 믶; 믶; ) HANGUL SYLLABLE MYIP BBF7;BBF7;1106 1174 11C2;BBF7;1106 1174 11C2; # (믷; 믷; 믷; 믷; 믷; ) HANGUL SYLLABLE MYIH BBF8;BBF8;1106 1175;BBF8;1106 1175; # (미; 미; 미; 미; 미; ) HANGUL SYLLABLE MI BBF9;BBF9;1106 1175 11A8;BBF9;1106 1175 11A8; # (믹; 믹; 믹; 믹; 믹; ) HANGUL SYLLABLE MIG BBFA;BBFA;1106 1175 11A9;BBFA;1106 1175 11A9; # (믺; 믺; 믺; 믺; 믺; ) HANGUL SYLLABLE MIGG BBFB;BBFB;1106 1175 11AA;BBFB;1106 1175 11AA; # (믻; 믻; 믻; 믻; 믻; ) HANGUL SYLLABLE MIGS BBFC;BBFC;1106 1175 11AB;BBFC;1106 1175 11AB; # (민; 민; 민; 민; 민; ) HANGUL SYLLABLE MIN BBFD;BBFD;1106 1175 11AC;BBFD;1106 1175 11AC; # (믽; 믽; 믽; 믽; 믽; ) HANGUL SYLLABLE MINJ BBFE;BBFE;1106 1175 11AD;BBFE;1106 1175 11AD; # (믾; 믾; 믾; 믾; 믾; ) HANGUL SYLLABLE MINH BBFF;BBFF;1106 1175 11AE;BBFF;1106 1175 11AE; # (믿; 믿; 믿; 믿; 믿; ) HANGUL SYLLABLE MID BC00;BC00;1106 1175 11AF;BC00;1106 1175 11AF; # (밀; 밀; 밀; 밀; 밀; ) HANGUL SYLLABLE MIL BC01;BC01;1106 1175 11B0;BC01;1106 1175 11B0; # (밁; 밁; 밁; 밁; 밁; ) HANGUL SYLLABLE MILG BC02;BC02;1106 1175 11B1;BC02;1106 1175 11B1; # (밂; 밂; 밂; 밂; 밂; ) HANGUL SYLLABLE MILM BC03;BC03;1106 1175 11B2;BC03;1106 1175 11B2; # (밃; 밃; 밃; 밃; 밃; ) HANGUL SYLLABLE MILB BC04;BC04;1106 1175 11B3;BC04;1106 1175 11B3; # (밄; 밄; 밄; 밄; 밄; ) HANGUL SYLLABLE MILS BC05;BC05;1106 1175 11B4;BC05;1106 1175 11B4; # (밅; 밅; 밅; 밅; 밅; ) HANGUL SYLLABLE MILT BC06;BC06;1106 1175 11B5;BC06;1106 1175 11B5; # (밆; 밆; 밆; 밆; 밆; ) HANGUL SYLLABLE MILP BC07;BC07;1106 1175 11B6;BC07;1106 1175 11B6; # (밇; 밇; 밇; 밇; 밇; ) HANGUL SYLLABLE MILH BC08;BC08;1106 1175 11B7;BC08;1106 1175 11B7; # (밈; 밈; 밈; 밈; 밈; ) HANGUL SYLLABLE MIM BC09;BC09;1106 1175 11B8;BC09;1106 1175 11B8; # (밉; 밉; 밉; 밉; 밉; ) HANGUL SYLLABLE MIB BC0A;BC0A;1106 1175 11B9;BC0A;1106 1175 11B9; # (밊; 밊; 밊; 밊; 밊; ) HANGUL SYLLABLE MIBS BC0B;BC0B;1106 1175 11BA;BC0B;1106 1175 11BA; # (밋; 밋; 밋; 밋; 밋; ) HANGUL SYLLABLE MIS BC0C;BC0C;1106 1175 11BB;BC0C;1106 1175 11BB; # (밌; 밌; 밌; 밌; 밌; ) HANGUL SYLLABLE MISS BC0D;BC0D;1106 1175 11BC;BC0D;1106 1175 11BC; # (밍; 밍; 밍; 밍; 밍; ) HANGUL SYLLABLE MING BC0E;BC0E;1106 1175 11BD;BC0E;1106 1175 11BD; # (밎; 밎; 밎; 밎; 밎; ) HANGUL SYLLABLE MIJ BC0F;BC0F;1106 1175 11BE;BC0F;1106 1175 11BE; # (및; 및; 및; 및; 및; ) HANGUL SYLLABLE MIC BC10;BC10;1106 1175 11BF;BC10;1106 1175 11BF; # (밐; 밐; 밐; 밐; 밐; ) HANGUL SYLLABLE MIK BC11;BC11;1106 1175 11C0;BC11;1106 1175 11C0; # (밑; 밑; 밑; 밑; 밑; ) HANGUL SYLLABLE MIT BC12;BC12;1106 1175 11C1;BC12;1106 1175 11C1; # (밒; 밒; 밒; 밒; 밒; ) HANGUL SYLLABLE MIP BC13;BC13;1106 1175 11C2;BC13;1106 1175 11C2; # (밓; 밓; 밓; 밓; 밓; ) HANGUL SYLLABLE MIH BC14;BC14;1107 1161;BC14;1107 1161; # (바; 바; 바; 바; 바; ) HANGUL SYLLABLE BA BC15;BC15;1107 1161 11A8;BC15;1107 1161 11A8; # (박; 박; 박; 박; 박; ) HANGUL SYLLABLE BAG BC16;BC16;1107 1161 11A9;BC16;1107 1161 11A9; # (밖; 밖; 밖; 밖; 밖; ) HANGUL SYLLABLE BAGG BC17;BC17;1107 1161 11AA;BC17;1107 1161 11AA; # (밗; 밗; 밗; 밗; 밗; ) HANGUL SYLLABLE BAGS BC18;BC18;1107 1161 11AB;BC18;1107 1161 11AB; # (반; 반; 반; 반; 반; ) HANGUL SYLLABLE BAN BC19;BC19;1107 1161 11AC;BC19;1107 1161 11AC; # (밙; 밙; 밙; 밙; 밙; ) HANGUL SYLLABLE BANJ BC1A;BC1A;1107 1161 11AD;BC1A;1107 1161 11AD; # (밚; 밚; 밚; 밚; 밚; ) HANGUL SYLLABLE BANH BC1B;BC1B;1107 1161 11AE;BC1B;1107 1161 11AE; # (받; 받; 받; 받; 받; ) HANGUL SYLLABLE BAD BC1C;BC1C;1107 1161 11AF;BC1C;1107 1161 11AF; # (발; 발; 발; 발; 발; ) HANGUL SYLLABLE BAL BC1D;BC1D;1107 1161 11B0;BC1D;1107 1161 11B0; # (밝; 밝; 밝; 밝; 밝; ) HANGUL SYLLABLE BALG BC1E;BC1E;1107 1161 11B1;BC1E;1107 1161 11B1; # (밞; 밞; 밞; 밞; 밞; ) HANGUL SYLLABLE BALM BC1F;BC1F;1107 1161 11B2;BC1F;1107 1161 11B2; # (밟; 밟; 밟; 밟; 밟; ) HANGUL SYLLABLE BALB BC20;BC20;1107 1161 11B3;BC20;1107 1161 11B3; # (밠; 밠; 밠; 밠; 밠; ) HANGUL SYLLABLE BALS BC21;BC21;1107 1161 11B4;BC21;1107 1161 11B4; # (밡; 밡; 밡; 밡; 밡; ) HANGUL SYLLABLE BALT BC22;BC22;1107 1161 11B5;BC22;1107 1161 11B5; # (밢; 밢; 밢; 밢; 밢; ) HANGUL SYLLABLE BALP BC23;BC23;1107 1161 11B6;BC23;1107 1161 11B6; # (밣; 밣; 밣; 밣; 밣; ) HANGUL SYLLABLE BALH BC24;BC24;1107 1161 11B7;BC24;1107 1161 11B7; # (밤; 밤; 밤; 밤; 밤; ) HANGUL SYLLABLE BAM BC25;BC25;1107 1161 11B8;BC25;1107 1161 11B8; # (밥; 밥; 밥; 밥; 밥; ) HANGUL SYLLABLE BAB BC26;BC26;1107 1161 11B9;BC26;1107 1161 11B9; # (밦; 밦; 밦; 밦; 밦; ) HANGUL SYLLABLE BABS BC27;BC27;1107 1161 11BA;BC27;1107 1161 11BA; # (밧; 밧; 밧; 밧; 밧; ) HANGUL SYLLABLE BAS BC28;BC28;1107 1161 11BB;BC28;1107 1161 11BB; # (밨; 밨; 밨; 밨; 밨; ) HANGUL SYLLABLE BASS BC29;BC29;1107 1161 11BC;BC29;1107 1161 11BC; # (방; 방; 방; 방; 방; ) HANGUL SYLLABLE BANG BC2A;BC2A;1107 1161 11BD;BC2A;1107 1161 11BD; # (밪; 밪; 밪; 밪; 밪; ) HANGUL SYLLABLE BAJ BC2B;BC2B;1107 1161 11BE;BC2B;1107 1161 11BE; # (밫; 밫; 밫; 밫; 밫; ) HANGUL SYLLABLE BAC BC2C;BC2C;1107 1161 11BF;BC2C;1107 1161 11BF; # (밬; 밬; 밬; 밬; 밬; ) HANGUL SYLLABLE BAK BC2D;BC2D;1107 1161 11C0;BC2D;1107 1161 11C0; # (밭; 밭; 밭; 밭; 밭; ) HANGUL SYLLABLE BAT BC2E;BC2E;1107 1161 11C1;BC2E;1107 1161 11C1; # (밮; 밮; 밮; 밮; 밮; ) HANGUL SYLLABLE BAP BC2F;BC2F;1107 1161 11C2;BC2F;1107 1161 11C2; # (밯; 밯; 밯; 밯; 밯; ) HANGUL SYLLABLE BAH BC30;BC30;1107 1162;BC30;1107 1162; # (배; 배; 배; 배; 배; ) HANGUL SYLLABLE BAE BC31;BC31;1107 1162 11A8;BC31;1107 1162 11A8; # (백; 백; 백; 백; 백; ) HANGUL SYLLABLE BAEG BC32;BC32;1107 1162 11A9;BC32;1107 1162 11A9; # (밲; 밲; 밲; 밲; 밲; ) HANGUL SYLLABLE BAEGG BC33;BC33;1107 1162 11AA;BC33;1107 1162 11AA; # (밳; 밳; 밳; 밳; 밳; ) HANGUL SYLLABLE BAEGS BC34;BC34;1107 1162 11AB;BC34;1107 1162 11AB; # (밴; 밴; 밴; 밴; 밴; ) HANGUL SYLLABLE BAEN BC35;BC35;1107 1162 11AC;BC35;1107 1162 11AC; # (밵; 밵; 밵; 밵; 밵; ) HANGUL SYLLABLE BAENJ BC36;BC36;1107 1162 11AD;BC36;1107 1162 11AD; # (밶; 밶; 밶; 밶; 밶; ) HANGUL SYLLABLE BAENH BC37;BC37;1107 1162 11AE;BC37;1107 1162 11AE; # (밷; 밷; 밷; 밷; 밷; ) HANGUL SYLLABLE BAED BC38;BC38;1107 1162 11AF;BC38;1107 1162 11AF; # (밸; 밸; 밸; 밸; 밸; ) HANGUL SYLLABLE BAEL BC39;BC39;1107 1162 11B0;BC39;1107 1162 11B0; # (밹; 밹; 밹; 밹; 밹; ) HANGUL SYLLABLE BAELG BC3A;BC3A;1107 1162 11B1;BC3A;1107 1162 11B1; # (밺; 밺; 밺; 밺; 밺; ) HANGUL SYLLABLE BAELM BC3B;BC3B;1107 1162 11B2;BC3B;1107 1162 11B2; # (밻; 밻; 밻; 밻; 밻; ) HANGUL SYLLABLE BAELB BC3C;BC3C;1107 1162 11B3;BC3C;1107 1162 11B3; # (밼; 밼; 밼; 밼; 밼; ) HANGUL SYLLABLE BAELS BC3D;BC3D;1107 1162 11B4;BC3D;1107 1162 11B4; # (밽; 밽; 밽; 밽; 밽; ) HANGUL SYLLABLE BAELT BC3E;BC3E;1107 1162 11B5;BC3E;1107 1162 11B5; # (밾; 밾; 밾; 밾; 밾; ) HANGUL SYLLABLE BAELP BC3F;BC3F;1107 1162 11B6;BC3F;1107 1162 11B6; # (밿; 밿; 밿; 밿; 밿; ) HANGUL SYLLABLE BAELH BC40;BC40;1107 1162 11B7;BC40;1107 1162 11B7; # (뱀; 뱀; 뱀; 뱀; 뱀; ) HANGUL SYLLABLE BAEM BC41;BC41;1107 1162 11B8;BC41;1107 1162 11B8; # (뱁; 뱁; 뱁; 뱁; 뱁; ) HANGUL SYLLABLE BAEB BC42;BC42;1107 1162 11B9;BC42;1107 1162 11B9; # (뱂; 뱂; 뱂; 뱂; 뱂; ) HANGUL SYLLABLE BAEBS BC43;BC43;1107 1162 11BA;BC43;1107 1162 11BA; # (뱃; 뱃; 뱃; 뱃; 뱃; ) HANGUL SYLLABLE BAES BC44;BC44;1107 1162 11BB;BC44;1107 1162 11BB; # (뱄; 뱄; 뱄; 뱄; 뱄; ) HANGUL SYLLABLE BAESS BC45;BC45;1107 1162 11BC;BC45;1107 1162 11BC; # (뱅; 뱅; 뱅; 뱅; 뱅; ) HANGUL SYLLABLE BAENG BC46;BC46;1107 1162 11BD;BC46;1107 1162 11BD; # (뱆; 뱆; 뱆; 뱆; 뱆; ) HANGUL SYLLABLE BAEJ BC47;BC47;1107 1162 11BE;BC47;1107 1162 11BE; # (뱇; 뱇; 뱇; 뱇; 뱇; ) HANGUL SYLLABLE BAEC BC48;BC48;1107 1162 11BF;BC48;1107 1162 11BF; # (뱈; 뱈; 뱈; 뱈; 뱈; ) HANGUL SYLLABLE BAEK BC49;BC49;1107 1162 11C0;BC49;1107 1162 11C0; # (뱉; 뱉; 뱉; 뱉; 뱉; ) HANGUL SYLLABLE BAET BC4A;BC4A;1107 1162 11C1;BC4A;1107 1162 11C1; # (뱊; 뱊; 뱊; 뱊; 뱊; ) HANGUL SYLLABLE BAEP BC4B;BC4B;1107 1162 11C2;BC4B;1107 1162 11C2; # (뱋; 뱋; 뱋; 뱋; 뱋; ) HANGUL SYLLABLE BAEH BC4C;BC4C;1107 1163;BC4C;1107 1163; # (뱌; 뱌; 뱌; 뱌; 뱌; ) HANGUL SYLLABLE BYA BC4D;BC4D;1107 1163 11A8;BC4D;1107 1163 11A8; # (뱍; 뱍; 뱍; 뱍; 뱍; ) HANGUL SYLLABLE BYAG BC4E;BC4E;1107 1163 11A9;BC4E;1107 1163 11A9; # (뱎; 뱎; 뱎; 뱎; 뱎; ) HANGUL SYLLABLE BYAGG BC4F;BC4F;1107 1163 11AA;BC4F;1107 1163 11AA; # (뱏; 뱏; 뱏; 뱏; 뱏; ) HANGUL SYLLABLE BYAGS BC50;BC50;1107 1163 11AB;BC50;1107 1163 11AB; # (뱐; 뱐; 뱐; 뱐; 뱐; ) HANGUL SYLLABLE BYAN BC51;BC51;1107 1163 11AC;BC51;1107 1163 11AC; # (뱑; 뱑; 뱑; 뱑; 뱑; ) HANGUL SYLLABLE BYANJ BC52;BC52;1107 1163 11AD;BC52;1107 1163 11AD; # (뱒; 뱒; 뱒; 뱒; 뱒; ) HANGUL SYLLABLE BYANH BC53;BC53;1107 1163 11AE;BC53;1107 1163 11AE; # (뱓; 뱓; 뱓; 뱓; 뱓; ) HANGUL SYLLABLE BYAD BC54;BC54;1107 1163 11AF;BC54;1107 1163 11AF; # (뱔; 뱔; 뱔; 뱔; 뱔; ) HANGUL SYLLABLE BYAL BC55;BC55;1107 1163 11B0;BC55;1107 1163 11B0; # (뱕; 뱕; 뱕; 뱕; 뱕; ) HANGUL SYLLABLE BYALG BC56;BC56;1107 1163 11B1;BC56;1107 1163 11B1; # (뱖; 뱖; 뱖; 뱖; 뱖; ) HANGUL SYLLABLE BYALM BC57;BC57;1107 1163 11B2;BC57;1107 1163 11B2; # (뱗; 뱗; 뱗; 뱗; 뱗; ) HANGUL SYLLABLE BYALB BC58;BC58;1107 1163 11B3;BC58;1107 1163 11B3; # (뱘; 뱘; 뱘; 뱘; 뱘; ) HANGUL SYLLABLE BYALS BC59;BC59;1107 1163 11B4;BC59;1107 1163 11B4; # (뱙; 뱙; 뱙; 뱙; 뱙; ) HANGUL SYLLABLE BYALT BC5A;BC5A;1107 1163 11B5;BC5A;1107 1163 11B5; # (뱚; 뱚; 뱚; 뱚; 뱚; ) HANGUL SYLLABLE BYALP BC5B;BC5B;1107 1163 11B6;BC5B;1107 1163 11B6; # (뱛; 뱛; 뱛; 뱛; 뱛; ) HANGUL SYLLABLE BYALH BC5C;BC5C;1107 1163 11B7;BC5C;1107 1163 11B7; # (뱜; 뱜; 뱜; 뱜; 뱜; ) HANGUL SYLLABLE BYAM BC5D;BC5D;1107 1163 11B8;BC5D;1107 1163 11B8; # (뱝; 뱝; 뱝; 뱝; 뱝; ) HANGUL SYLLABLE BYAB BC5E;BC5E;1107 1163 11B9;BC5E;1107 1163 11B9; # (뱞; 뱞; 뱞; 뱞; 뱞; ) HANGUL SYLLABLE BYABS BC5F;BC5F;1107 1163 11BA;BC5F;1107 1163 11BA; # (뱟; 뱟; 뱟; 뱟; 뱟; ) HANGUL SYLLABLE BYAS BC60;BC60;1107 1163 11BB;BC60;1107 1163 11BB; # (뱠; 뱠; 뱠; 뱠; 뱠; ) HANGUL SYLLABLE BYASS BC61;BC61;1107 1163 11BC;BC61;1107 1163 11BC; # (뱡; 뱡; 뱡; 뱡; 뱡; ) HANGUL SYLLABLE BYANG BC62;BC62;1107 1163 11BD;BC62;1107 1163 11BD; # (뱢; 뱢; 뱢; 뱢; 뱢; ) HANGUL SYLLABLE BYAJ BC63;BC63;1107 1163 11BE;BC63;1107 1163 11BE; # (뱣; 뱣; 뱣; 뱣; 뱣; ) HANGUL SYLLABLE BYAC BC64;BC64;1107 1163 11BF;BC64;1107 1163 11BF; # (뱤; 뱤; 뱤; 뱤; 뱤; ) HANGUL SYLLABLE BYAK BC65;BC65;1107 1163 11C0;BC65;1107 1163 11C0; # (뱥; 뱥; 뱥; 뱥; 뱥; ) HANGUL SYLLABLE BYAT BC66;BC66;1107 1163 11C1;BC66;1107 1163 11C1; # (뱦; 뱦; 뱦; 뱦; 뱦; ) HANGUL SYLLABLE BYAP BC67;BC67;1107 1163 11C2;BC67;1107 1163 11C2; # (뱧; 뱧; 뱧; 뱧; 뱧; ) HANGUL SYLLABLE BYAH BC68;BC68;1107 1164;BC68;1107 1164; # (뱨; 뱨; 뱨; 뱨; 뱨; ) HANGUL SYLLABLE BYAE BC69;BC69;1107 1164 11A8;BC69;1107 1164 11A8; # (뱩; 뱩; 뱩; 뱩; 뱩; ) HANGUL SYLLABLE BYAEG BC6A;BC6A;1107 1164 11A9;BC6A;1107 1164 11A9; # (뱪; 뱪; 뱪; 뱪; 뱪; ) HANGUL SYLLABLE BYAEGG BC6B;BC6B;1107 1164 11AA;BC6B;1107 1164 11AA; # (뱫; 뱫; 뱫; 뱫; 뱫; ) HANGUL SYLLABLE BYAEGS BC6C;BC6C;1107 1164 11AB;BC6C;1107 1164 11AB; # (뱬; 뱬; 뱬; 뱬; 뱬; ) HANGUL SYLLABLE BYAEN BC6D;BC6D;1107 1164 11AC;BC6D;1107 1164 11AC; # (뱭; 뱭; 뱭; 뱭; 뱭; ) HANGUL SYLLABLE BYAENJ BC6E;BC6E;1107 1164 11AD;BC6E;1107 1164 11AD; # (뱮; 뱮; 뱮; 뱮; 뱮; ) HANGUL SYLLABLE BYAENH BC6F;BC6F;1107 1164 11AE;BC6F;1107 1164 11AE; # (뱯; 뱯; 뱯; 뱯; 뱯; ) HANGUL SYLLABLE BYAED BC70;BC70;1107 1164 11AF;BC70;1107 1164 11AF; # (뱰; 뱰; 뱰; 뱰; 뱰; ) HANGUL SYLLABLE BYAEL BC71;BC71;1107 1164 11B0;BC71;1107 1164 11B0; # (뱱; 뱱; 뱱; 뱱; 뱱; ) HANGUL SYLLABLE BYAELG BC72;BC72;1107 1164 11B1;BC72;1107 1164 11B1; # (뱲; 뱲; 뱲; 뱲; 뱲; ) HANGUL SYLLABLE BYAELM BC73;BC73;1107 1164 11B2;BC73;1107 1164 11B2; # (뱳; 뱳; 뱳; 뱳; 뱳; ) HANGUL SYLLABLE BYAELB BC74;BC74;1107 1164 11B3;BC74;1107 1164 11B3; # (뱴; 뱴; 뱴; 뱴; 뱴; ) HANGUL SYLLABLE BYAELS BC75;BC75;1107 1164 11B4;BC75;1107 1164 11B4; # (뱵; 뱵; 뱵; 뱵; 뱵; ) HANGUL SYLLABLE BYAELT BC76;BC76;1107 1164 11B5;BC76;1107 1164 11B5; # (뱶; 뱶; 뱶; 뱶; 뱶; ) HANGUL SYLLABLE BYAELP BC77;BC77;1107 1164 11B6;BC77;1107 1164 11B6; # (뱷; 뱷; 뱷; 뱷; 뱷; ) HANGUL SYLLABLE BYAELH BC78;BC78;1107 1164 11B7;BC78;1107 1164 11B7; # (뱸; 뱸; 뱸; 뱸; 뱸; ) HANGUL SYLLABLE BYAEM BC79;BC79;1107 1164 11B8;BC79;1107 1164 11B8; # (뱹; 뱹; 뱹; 뱹; 뱹; ) HANGUL SYLLABLE BYAEB BC7A;BC7A;1107 1164 11B9;BC7A;1107 1164 11B9; # (뱺; 뱺; 뱺; 뱺; 뱺; ) HANGUL SYLLABLE BYAEBS BC7B;BC7B;1107 1164 11BA;BC7B;1107 1164 11BA; # (뱻; 뱻; 뱻; 뱻; 뱻; ) HANGUL SYLLABLE BYAES BC7C;BC7C;1107 1164 11BB;BC7C;1107 1164 11BB; # (뱼; 뱼; 뱼; 뱼; 뱼; ) HANGUL SYLLABLE BYAESS BC7D;BC7D;1107 1164 11BC;BC7D;1107 1164 11BC; # (뱽; 뱽; 뱽; 뱽; 뱽; ) HANGUL SYLLABLE BYAENG BC7E;BC7E;1107 1164 11BD;BC7E;1107 1164 11BD; # (뱾; 뱾; 뱾; 뱾; 뱾; ) HANGUL SYLLABLE BYAEJ BC7F;BC7F;1107 1164 11BE;BC7F;1107 1164 11BE; # (뱿; 뱿; 뱿; 뱿; 뱿; ) HANGUL SYLLABLE BYAEC BC80;BC80;1107 1164 11BF;BC80;1107 1164 11BF; # (벀; 벀; 벀; 벀; 벀; ) HANGUL SYLLABLE BYAEK BC81;BC81;1107 1164 11C0;BC81;1107 1164 11C0; # (벁; 벁; 벁; 벁; 벁; ) HANGUL SYLLABLE BYAET BC82;BC82;1107 1164 11C1;BC82;1107 1164 11C1; # (벂; 벂; 벂; 벂; 벂; ) HANGUL SYLLABLE BYAEP BC83;BC83;1107 1164 11C2;BC83;1107 1164 11C2; # (벃; 벃; 벃; 벃; 벃; ) HANGUL SYLLABLE BYAEH BC84;BC84;1107 1165;BC84;1107 1165; # (버; 버; 버; 버; 버; ) HANGUL SYLLABLE BEO BC85;BC85;1107 1165 11A8;BC85;1107 1165 11A8; # (벅; 벅; 벅; 벅; 벅; ) HANGUL SYLLABLE BEOG BC86;BC86;1107 1165 11A9;BC86;1107 1165 11A9; # (벆; 벆; 벆; 벆; 벆; ) HANGUL SYLLABLE BEOGG BC87;BC87;1107 1165 11AA;BC87;1107 1165 11AA; # (벇; 벇; 벇; 벇; 벇; ) HANGUL SYLLABLE BEOGS BC88;BC88;1107 1165 11AB;BC88;1107 1165 11AB; # (번; 번; 번; 번; 번; ) HANGUL SYLLABLE BEON BC89;BC89;1107 1165 11AC;BC89;1107 1165 11AC; # (벉; 벉; 벉; 벉; 벉; ) HANGUL SYLLABLE BEONJ BC8A;BC8A;1107 1165 11AD;BC8A;1107 1165 11AD; # (벊; 벊; 벊; 벊; 벊; ) HANGUL SYLLABLE BEONH BC8B;BC8B;1107 1165 11AE;BC8B;1107 1165 11AE; # (벋; 벋; 벋; 벋; 벋; ) HANGUL SYLLABLE BEOD BC8C;BC8C;1107 1165 11AF;BC8C;1107 1165 11AF; # (벌; 벌; 벌; 벌; 벌; ) HANGUL SYLLABLE BEOL BC8D;BC8D;1107 1165 11B0;BC8D;1107 1165 11B0; # (벍; 벍; 벍; 벍; 벍; ) HANGUL SYLLABLE BEOLG BC8E;BC8E;1107 1165 11B1;BC8E;1107 1165 11B1; # (벎; 벎; 벎; 벎; 벎; ) HANGUL SYLLABLE BEOLM BC8F;BC8F;1107 1165 11B2;BC8F;1107 1165 11B2; # (벏; 벏; 벏; 벏; 벏; ) HANGUL SYLLABLE BEOLB BC90;BC90;1107 1165 11B3;BC90;1107 1165 11B3; # (벐; 벐; 벐; 벐; 벐; ) HANGUL SYLLABLE BEOLS BC91;BC91;1107 1165 11B4;BC91;1107 1165 11B4; # (벑; 벑; 벑; 벑; 벑; ) HANGUL SYLLABLE BEOLT BC92;BC92;1107 1165 11B5;BC92;1107 1165 11B5; # (벒; 벒; 벒; 벒; 벒; ) HANGUL SYLLABLE BEOLP BC93;BC93;1107 1165 11B6;BC93;1107 1165 11B6; # (벓; 벓; 벓; 벓; 벓; ) HANGUL SYLLABLE BEOLH BC94;BC94;1107 1165 11B7;BC94;1107 1165 11B7; # (범; 범; 범; 범; 범; ) HANGUL SYLLABLE BEOM BC95;BC95;1107 1165 11B8;BC95;1107 1165 11B8; # (법; 법; 법; 법; 법; ) HANGUL SYLLABLE BEOB BC96;BC96;1107 1165 11B9;BC96;1107 1165 11B9; # (벖; 벖; 벖; 벖; 벖; ) HANGUL SYLLABLE BEOBS BC97;BC97;1107 1165 11BA;BC97;1107 1165 11BA; # (벗; 벗; 벗; 벗; 벗; ) HANGUL SYLLABLE BEOS BC98;BC98;1107 1165 11BB;BC98;1107 1165 11BB; # (벘; 벘; 벘; 벘; 벘; ) HANGUL SYLLABLE BEOSS BC99;BC99;1107 1165 11BC;BC99;1107 1165 11BC; # (벙; 벙; 벙; 벙; 벙; ) HANGUL SYLLABLE BEONG BC9A;BC9A;1107 1165 11BD;BC9A;1107 1165 11BD; # (벚; 벚; 벚; 벚; 벚; ) HANGUL SYLLABLE BEOJ BC9B;BC9B;1107 1165 11BE;BC9B;1107 1165 11BE; # (벛; 벛; 벛; 벛; 벛; ) HANGUL SYLLABLE BEOC BC9C;BC9C;1107 1165 11BF;BC9C;1107 1165 11BF; # (벜; 벜; 벜; 벜; 벜; ) HANGUL SYLLABLE BEOK BC9D;BC9D;1107 1165 11C0;BC9D;1107 1165 11C0; # (벝; 벝; 벝; 벝; 벝; ) HANGUL SYLLABLE BEOT BC9E;BC9E;1107 1165 11C1;BC9E;1107 1165 11C1; # (벞; 벞; 벞; 벞; 벞; ) HANGUL SYLLABLE BEOP BC9F;BC9F;1107 1165 11C2;BC9F;1107 1165 11C2; # (벟; 벟; 벟; 벟; 벟; ) HANGUL SYLLABLE BEOH BCA0;BCA0;1107 1166;BCA0;1107 1166; # (베; 베; 베; 베; 베; ) HANGUL SYLLABLE BE BCA1;BCA1;1107 1166 11A8;BCA1;1107 1166 11A8; # (벡; 벡; 벡; 벡; 벡; ) HANGUL SYLLABLE BEG BCA2;BCA2;1107 1166 11A9;BCA2;1107 1166 11A9; # (벢; 벢; 벢; 벢; 벢; ) HANGUL SYLLABLE BEGG BCA3;BCA3;1107 1166 11AA;BCA3;1107 1166 11AA; # (벣; 벣; 벣; 벣; 벣; ) HANGUL SYLLABLE BEGS BCA4;BCA4;1107 1166 11AB;BCA4;1107 1166 11AB; # (벤; 벤; 벤; 벤; 벤; ) HANGUL SYLLABLE BEN BCA5;BCA5;1107 1166 11AC;BCA5;1107 1166 11AC; # (벥; 벥; 벥; 벥; 벥; ) HANGUL SYLLABLE BENJ BCA6;BCA6;1107 1166 11AD;BCA6;1107 1166 11AD; # (벦; 벦; 벦; 벦; 벦; ) HANGUL SYLLABLE BENH BCA7;BCA7;1107 1166 11AE;BCA7;1107 1166 11AE; # (벧; 벧; 벧; 벧; 벧; ) HANGUL SYLLABLE BED BCA8;BCA8;1107 1166 11AF;BCA8;1107 1166 11AF; # (벨; 벨; 벨; 벨; 벨; ) HANGUL SYLLABLE BEL BCA9;BCA9;1107 1166 11B0;BCA9;1107 1166 11B0; # (벩; 벩; 벩; 벩; 벩; ) HANGUL SYLLABLE BELG BCAA;BCAA;1107 1166 11B1;BCAA;1107 1166 11B1; # (벪; 벪; 벪; 벪; 벪; ) HANGUL SYLLABLE BELM BCAB;BCAB;1107 1166 11B2;BCAB;1107 1166 11B2; # (벫; 벫; 벫; 벫; 벫; ) HANGUL SYLLABLE BELB BCAC;BCAC;1107 1166 11B3;BCAC;1107 1166 11B3; # (벬; 벬; 벬; 벬; 벬; ) HANGUL SYLLABLE BELS BCAD;BCAD;1107 1166 11B4;BCAD;1107 1166 11B4; # (벭; 벭; 벭; 벭; 벭; ) HANGUL SYLLABLE BELT BCAE;BCAE;1107 1166 11B5;BCAE;1107 1166 11B5; # (벮; 벮; 벮; 벮; 벮; ) HANGUL SYLLABLE BELP BCAF;BCAF;1107 1166 11B6;BCAF;1107 1166 11B6; # (벯; 벯; 벯; 벯; 벯; ) HANGUL SYLLABLE BELH BCB0;BCB0;1107 1166 11B7;BCB0;1107 1166 11B7; # (벰; 벰; 벰; 벰; 벰; ) HANGUL SYLLABLE BEM BCB1;BCB1;1107 1166 11B8;BCB1;1107 1166 11B8; # (벱; 벱; 벱; 벱; 벱; ) HANGUL SYLLABLE BEB BCB2;BCB2;1107 1166 11B9;BCB2;1107 1166 11B9; # (벲; 벲; 벲; 벲; 벲; ) HANGUL SYLLABLE BEBS BCB3;BCB3;1107 1166 11BA;BCB3;1107 1166 11BA; # (벳; 벳; 벳; 벳; 벳; ) HANGUL SYLLABLE BES BCB4;BCB4;1107 1166 11BB;BCB4;1107 1166 11BB; # (벴; 벴; 벴; 벴; 벴; ) HANGUL SYLLABLE BESS BCB5;BCB5;1107 1166 11BC;BCB5;1107 1166 11BC; # (벵; 벵; 벵; 벵; 벵; ) HANGUL SYLLABLE BENG BCB6;BCB6;1107 1166 11BD;BCB6;1107 1166 11BD; # (벶; 벶; 벶; 벶; 벶; ) HANGUL SYLLABLE BEJ BCB7;BCB7;1107 1166 11BE;BCB7;1107 1166 11BE; # (벷; 벷; 벷; 벷; 벷; ) HANGUL SYLLABLE BEC BCB8;BCB8;1107 1166 11BF;BCB8;1107 1166 11BF; # (벸; 벸; 벸; 벸; 벸; ) HANGUL SYLLABLE BEK BCB9;BCB9;1107 1166 11C0;BCB9;1107 1166 11C0; # (벹; 벹; 벹; 벹; 벹; ) HANGUL SYLLABLE BET BCBA;BCBA;1107 1166 11C1;BCBA;1107 1166 11C1; # (벺; 벺; 벺; 벺; 벺; ) HANGUL SYLLABLE BEP BCBB;BCBB;1107 1166 11C2;BCBB;1107 1166 11C2; # (벻; 벻; 벻; 벻; 벻; ) HANGUL SYLLABLE BEH BCBC;BCBC;1107 1167;BCBC;1107 1167; # (벼; 벼; 벼; 벼; 벼; ) HANGUL SYLLABLE BYEO BCBD;BCBD;1107 1167 11A8;BCBD;1107 1167 11A8; # (벽; 벽; 벽; 벽; 벽; ) HANGUL SYLLABLE BYEOG BCBE;BCBE;1107 1167 11A9;BCBE;1107 1167 11A9; # (벾; 벾; 벾; 벾; 벾; ) HANGUL SYLLABLE BYEOGG BCBF;BCBF;1107 1167 11AA;BCBF;1107 1167 11AA; # (벿; 벿; 벿; 벿; 벿; ) HANGUL SYLLABLE BYEOGS BCC0;BCC0;1107 1167 11AB;BCC0;1107 1167 11AB; # (변; 변; 변; 변; 변; ) HANGUL SYLLABLE BYEON BCC1;BCC1;1107 1167 11AC;BCC1;1107 1167 11AC; # (볁; 볁; 볁; 볁; 볁; ) HANGUL SYLLABLE BYEONJ BCC2;BCC2;1107 1167 11AD;BCC2;1107 1167 11AD; # (볂; 볂; 볂; 볂; 볂; ) HANGUL SYLLABLE BYEONH BCC3;BCC3;1107 1167 11AE;BCC3;1107 1167 11AE; # (볃; 볃; 볃; 볃; 볃; ) HANGUL SYLLABLE BYEOD BCC4;BCC4;1107 1167 11AF;BCC4;1107 1167 11AF; # (별; 별; 별; 별; 별; ) HANGUL SYLLABLE BYEOL BCC5;BCC5;1107 1167 11B0;BCC5;1107 1167 11B0; # (볅; 볅; 볅; 볅; 볅; ) HANGUL SYLLABLE BYEOLG BCC6;BCC6;1107 1167 11B1;BCC6;1107 1167 11B1; # (볆; 볆; 볆; 볆; 볆; ) HANGUL SYLLABLE BYEOLM BCC7;BCC7;1107 1167 11B2;BCC7;1107 1167 11B2; # (볇; 볇; 볇; 볇; 볇; ) HANGUL SYLLABLE BYEOLB BCC8;BCC8;1107 1167 11B3;BCC8;1107 1167 11B3; # (볈; 볈; 볈; 볈; 볈; ) HANGUL SYLLABLE BYEOLS BCC9;BCC9;1107 1167 11B4;BCC9;1107 1167 11B4; # (볉; 볉; 볉; 볉; 볉; ) HANGUL SYLLABLE BYEOLT BCCA;BCCA;1107 1167 11B5;BCCA;1107 1167 11B5; # (볊; 볊; 볊; 볊; 볊; ) HANGUL SYLLABLE BYEOLP BCCB;BCCB;1107 1167 11B6;BCCB;1107 1167 11B6; # (볋; 볋; 볋; 볋; 볋; ) HANGUL SYLLABLE BYEOLH BCCC;BCCC;1107 1167 11B7;BCCC;1107 1167 11B7; # (볌; 볌; 볌; 볌; 볌; ) HANGUL SYLLABLE BYEOM BCCD;BCCD;1107 1167 11B8;BCCD;1107 1167 11B8; # (볍; 볍; 볍; 볍; 볍; ) HANGUL SYLLABLE BYEOB BCCE;BCCE;1107 1167 11B9;BCCE;1107 1167 11B9; # (볎; 볎; 볎; 볎; 볎; ) HANGUL SYLLABLE BYEOBS BCCF;BCCF;1107 1167 11BA;BCCF;1107 1167 11BA; # (볏; 볏; 볏; 볏; 볏; ) HANGUL SYLLABLE BYEOS BCD0;BCD0;1107 1167 11BB;BCD0;1107 1167 11BB; # (볐; 볐; 볐; 볐; 볐; ) HANGUL SYLLABLE BYEOSS BCD1;BCD1;1107 1167 11BC;BCD1;1107 1167 11BC; # (병; 병; 병; 병; 병; ) HANGUL SYLLABLE BYEONG BCD2;BCD2;1107 1167 11BD;BCD2;1107 1167 11BD; # (볒; 볒; 볒; 볒; 볒; ) HANGUL SYLLABLE BYEOJ BCD3;BCD3;1107 1167 11BE;BCD3;1107 1167 11BE; # (볓; 볓; 볓; 볓; 볓; ) HANGUL SYLLABLE BYEOC BCD4;BCD4;1107 1167 11BF;BCD4;1107 1167 11BF; # (볔; 볔; 볔; 볔; 볔; ) HANGUL SYLLABLE BYEOK BCD5;BCD5;1107 1167 11C0;BCD5;1107 1167 11C0; # (볕; 볕; 볕; 볕; 볕; ) HANGUL SYLLABLE BYEOT BCD6;BCD6;1107 1167 11C1;BCD6;1107 1167 11C1; # (볖; 볖; 볖; 볖; 볖; ) HANGUL SYLLABLE BYEOP BCD7;BCD7;1107 1167 11C2;BCD7;1107 1167 11C2; # (볗; 볗; 볗; 볗; 볗; ) HANGUL SYLLABLE BYEOH BCD8;BCD8;1107 1168;BCD8;1107 1168; # (볘; 볘; 볘; 볘; 볘; ) HANGUL SYLLABLE BYE BCD9;BCD9;1107 1168 11A8;BCD9;1107 1168 11A8; # (볙; 볙; 볙; 볙; 볙; ) HANGUL SYLLABLE BYEG BCDA;BCDA;1107 1168 11A9;BCDA;1107 1168 11A9; # (볚; 볚; 볚; 볚; 볚; ) HANGUL SYLLABLE BYEGG BCDB;BCDB;1107 1168 11AA;BCDB;1107 1168 11AA; # (볛; 볛; 볛; 볛; 볛; ) HANGUL SYLLABLE BYEGS BCDC;BCDC;1107 1168 11AB;BCDC;1107 1168 11AB; # (볜; 볜; 볜; 볜; 볜; ) HANGUL SYLLABLE BYEN BCDD;BCDD;1107 1168 11AC;BCDD;1107 1168 11AC; # (볝; 볝; 볝; 볝; 볝; ) HANGUL SYLLABLE BYENJ BCDE;BCDE;1107 1168 11AD;BCDE;1107 1168 11AD; # (볞; 볞; 볞; 볞; 볞; ) HANGUL SYLLABLE BYENH BCDF;BCDF;1107 1168 11AE;BCDF;1107 1168 11AE; # (볟; 볟; 볟; 볟; 볟; ) HANGUL SYLLABLE BYED BCE0;BCE0;1107 1168 11AF;BCE0;1107 1168 11AF; # (볠; 볠; 볠; 볠; 볠; ) HANGUL SYLLABLE BYEL BCE1;BCE1;1107 1168 11B0;BCE1;1107 1168 11B0; # (볡; 볡; 볡; 볡; 볡; ) HANGUL SYLLABLE BYELG BCE2;BCE2;1107 1168 11B1;BCE2;1107 1168 11B1; # (볢; 볢; 볢; 볢; 볢; ) HANGUL SYLLABLE BYELM BCE3;BCE3;1107 1168 11B2;BCE3;1107 1168 11B2; # (볣; 볣; 볣; 볣; 볣; ) HANGUL SYLLABLE BYELB BCE4;BCE4;1107 1168 11B3;BCE4;1107 1168 11B3; # (볤; 볤; 볤; 볤; 볤; ) HANGUL SYLLABLE BYELS BCE5;BCE5;1107 1168 11B4;BCE5;1107 1168 11B4; # (볥; 볥; 볥; 볥; 볥; ) HANGUL SYLLABLE BYELT BCE6;BCE6;1107 1168 11B5;BCE6;1107 1168 11B5; # (볦; 볦; 볦; 볦; 볦; ) HANGUL SYLLABLE BYELP BCE7;BCE7;1107 1168 11B6;BCE7;1107 1168 11B6; # (볧; 볧; 볧; 볧; 볧; ) HANGUL SYLLABLE BYELH BCE8;BCE8;1107 1168 11B7;BCE8;1107 1168 11B7; # (볨; 볨; 볨; 볨; 볨; ) HANGUL SYLLABLE BYEM BCE9;BCE9;1107 1168 11B8;BCE9;1107 1168 11B8; # (볩; 볩; 볩; 볩; 볩; ) HANGUL SYLLABLE BYEB BCEA;BCEA;1107 1168 11B9;BCEA;1107 1168 11B9; # (볪; 볪; 볪; 볪; 볪; ) HANGUL SYLLABLE BYEBS BCEB;BCEB;1107 1168 11BA;BCEB;1107 1168 11BA; # (볫; 볫; 볫; 볫; 볫; ) HANGUL SYLLABLE BYES BCEC;BCEC;1107 1168 11BB;BCEC;1107 1168 11BB; # (볬; 볬; 볬; 볬; 볬; ) HANGUL SYLLABLE BYESS BCED;BCED;1107 1168 11BC;BCED;1107 1168 11BC; # (볭; 볭; 볭; 볭; 볭; ) HANGUL SYLLABLE BYENG BCEE;BCEE;1107 1168 11BD;BCEE;1107 1168 11BD; # (볮; 볮; 볮; 볮; 볮; ) HANGUL SYLLABLE BYEJ BCEF;BCEF;1107 1168 11BE;BCEF;1107 1168 11BE; # (볯; 볯; 볯; 볯; 볯; ) HANGUL SYLLABLE BYEC BCF0;BCF0;1107 1168 11BF;BCF0;1107 1168 11BF; # (볰; 볰; 볰; 볰; 볰; ) HANGUL SYLLABLE BYEK BCF1;BCF1;1107 1168 11C0;BCF1;1107 1168 11C0; # (볱; 볱; 볱; 볱; 볱; ) HANGUL SYLLABLE BYET BCF2;BCF2;1107 1168 11C1;BCF2;1107 1168 11C1; # (볲; 볲; 볲; 볲; 볲; ) HANGUL SYLLABLE BYEP BCF3;BCF3;1107 1168 11C2;BCF3;1107 1168 11C2; # (볳; 볳; 볳; 볳; 볳; ) HANGUL SYLLABLE BYEH BCF4;BCF4;1107 1169;BCF4;1107 1169; # (보; 보; 보; 보; 보; ) HANGUL SYLLABLE BO BCF5;BCF5;1107 1169 11A8;BCF5;1107 1169 11A8; # (복; 복; 복; 복; 복; ) HANGUL SYLLABLE BOG BCF6;BCF6;1107 1169 11A9;BCF6;1107 1169 11A9; # (볶; 볶; 볶; 볶; 볶; ) HANGUL SYLLABLE BOGG BCF7;BCF7;1107 1169 11AA;BCF7;1107 1169 11AA; # (볷; 볷; 볷; 볷; 볷; ) HANGUL SYLLABLE BOGS BCF8;BCF8;1107 1169 11AB;BCF8;1107 1169 11AB; # (본; 본; 본; 본; 본; ) HANGUL SYLLABLE BON BCF9;BCF9;1107 1169 11AC;BCF9;1107 1169 11AC; # (볹; 볹; 볹; 볹; 볹; ) HANGUL SYLLABLE BONJ BCFA;BCFA;1107 1169 11AD;BCFA;1107 1169 11AD; # (볺; 볺; 볺; 볺; 볺; ) HANGUL SYLLABLE BONH BCFB;BCFB;1107 1169 11AE;BCFB;1107 1169 11AE; # (볻; 볻; 볻; 볻; 볻; ) HANGUL SYLLABLE BOD BCFC;BCFC;1107 1169 11AF;BCFC;1107 1169 11AF; # (볼; 볼; 볼; 볼; 볼; ) HANGUL SYLLABLE BOL BCFD;BCFD;1107 1169 11B0;BCFD;1107 1169 11B0; # (볽; 볽; 볽; 볽; 볽; ) HANGUL SYLLABLE BOLG BCFE;BCFE;1107 1169 11B1;BCFE;1107 1169 11B1; # (볾; 볾; 볾; 볾; 볾; ) HANGUL SYLLABLE BOLM BCFF;BCFF;1107 1169 11B2;BCFF;1107 1169 11B2; # (볿; 볿; 볿; 볿; 볿; ) HANGUL SYLLABLE BOLB BD00;BD00;1107 1169 11B3;BD00;1107 1169 11B3; # (봀; 봀; 봀; 봀; 봀; ) HANGUL SYLLABLE BOLS BD01;BD01;1107 1169 11B4;BD01;1107 1169 11B4; # (봁; 봁; 봁; 봁; 봁; ) HANGUL SYLLABLE BOLT BD02;BD02;1107 1169 11B5;BD02;1107 1169 11B5; # (봂; 봂; 봂; 봂; 봂; ) HANGUL SYLLABLE BOLP BD03;BD03;1107 1169 11B6;BD03;1107 1169 11B6; # (봃; 봃; 봃; 봃; 봃; ) HANGUL SYLLABLE BOLH BD04;BD04;1107 1169 11B7;BD04;1107 1169 11B7; # (봄; 봄; 봄; 봄; 봄; ) HANGUL SYLLABLE BOM BD05;BD05;1107 1169 11B8;BD05;1107 1169 11B8; # (봅; 봅; 봅; 봅; 봅; ) HANGUL SYLLABLE BOB BD06;BD06;1107 1169 11B9;BD06;1107 1169 11B9; # (봆; 봆; 봆; 봆; 봆; ) HANGUL SYLLABLE BOBS BD07;BD07;1107 1169 11BA;BD07;1107 1169 11BA; # (봇; 봇; 봇; 봇; 봇; ) HANGUL SYLLABLE BOS BD08;BD08;1107 1169 11BB;BD08;1107 1169 11BB; # (봈; 봈; 봈; 봈; 봈; ) HANGUL SYLLABLE BOSS BD09;BD09;1107 1169 11BC;BD09;1107 1169 11BC; # (봉; 봉; 봉; 봉; 봉; ) HANGUL SYLLABLE BONG BD0A;BD0A;1107 1169 11BD;BD0A;1107 1169 11BD; # (봊; 봊; 봊; 봊; 봊; ) HANGUL SYLLABLE BOJ BD0B;BD0B;1107 1169 11BE;BD0B;1107 1169 11BE; # (봋; 봋; 봋; 봋; 봋; ) HANGUL SYLLABLE BOC BD0C;BD0C;1107 1169 11BF;BD0C;1107 1169 11BF; # (봌; 봌; 봌; 봌; 봌; ) HANGUL SYLLABLE BOK BD0D;BD0D;1107 1169 11C0;BD0D;1107 1169 11C0; # (봍; 봍; 봍; 봍; 봍; ) HANGUL SYLLABLE BOT BD0E;BD0E;1107 1169 11C1;BD0E;1107 1169 11C1; # (봎; 봎; 봎; 봎; 봎; ) HANGUL SYLLABLE BOP BD0F;BD0F;1107 1169 11C2;BD0F;1107 1169 11C2; # (봏; 봏; 봏; 봏; 봏; ) HANGUL SYLLABLE BOH BD10;BD10;1107 116A;BD10;1107 116A; # (봐; 봐; 봐; 봐; 봐; ) HANGUL SYLLABLE BWA BD11;BD11;1107 116A 11A8;BD11;1107 116A 11A8; # (봑; 봑; 봑; 봑; 봑; ) HANGUL SYLLABLE BWAG BD12;BD12;1107 116A 11A9;BD12;1107 116A 11A9; # (봒; 봒; 봒; 봒; 봒; ) HANGUL SYLLABLE BWAGG BD13;BD13;1107 116A 11AA;BD13;1107 116A 11AA; # (봓; 봓; 봓; 봓; 봓; ) HANGUL SYLLABLE BWAGS BD14;BD14;1107 116A 11AB;BD14;1107 116A 11AB; # (봔; 봔; 봔; 봔; 봔; ) HANGUL SYLLABLE BWAN BD15;BD15;1107 116A 11AC;BD15;1107 116A 11AC; # (봕; 봕; 봕; 봕; 봕; ) HANGUL SYLLABLE BWANJ BD16;BD16;1107 116A 11AD;BD16;1107 116A 11AD; # (봖; 봖; 봖; 봖; 봖; ) HANGUL SYLLABLE BWANH BD17;BD17;1107 116A 11AE;BD17;1107 116A 11AE; # (봗; 봗; 봗; 봗; 봗; ) HANGUL SYLLABLE BWAD BD18;BD18;1107 116A 11AF;BD18;1107 116A 11AF; # (봘; 봘; 봘; 봘; 봘; ) HANGUL SYLLABLE BWAL BD19;BD19;1107 116A 11B0;BD19;1107 116A 11B0; # (봙; 봙; 봙; 봙; 봙; ) HANGUL SYLLABLE BWALG BD1A;BD1A;1107 116A 11B1;BD1A;1107 116A 11B1; # (봚; 봚; 봚; 봚; 봚; ) HANGUL SYLLABLE BWALM BD1B;BD1B;1107 116A 11B2;BD1B;1107 116A 11B2; # (봛; 봛; 봛; 봛; 봛; ) HANGUL SYLLABLE BWALB BD1C;BD1C;1107 116A 11B3;BD1C;1107 116A 11B3; # (봜; 봜; 봜; 봜; 봜; ) HANGUL SYLLABLE BWALS BD1D;BD1D;1107 116A 11B4;BD1D;1107 116A 11B4; # (봝; 봝; 봝; 봝; 봝; ) HANGUL SYLLABLE BWALT BD1E;BD1E;1107 116A 11B5;BD1E;1107 116A 11B5; # (봞; 봞; 봞; 봞; 봞; ) HANGUL SYLLABLE BWALP BD1F;BD1F;1107 116A 11B6;BD1F;1107 116A 11B6; # (봟; 봟; 봟; 봟; 봟; ) HANGUL SYLLABLE BWALH BD20;BD20;1107 116A 11B7;BD20;1107 116A 11B7; # (봠; 봠; 봠; 봠; 봠; ) HANGUL SYLLABLE BWAM BD21;BD21;1107 116A 11B8;BD21;1107 116A 11B8; # (봡; 봡; 봡; 봡; 봡; ) HANGUL SYLLABLE BWAB BD22;BD22;1107 116A 11B9;BD22;1107 116A 11B9; # (봢; 봢; 봢; 봢; 봢; ) HANGUL SYLLABLE BWABS BD23;BD23;1107 116A 11BA;BD23;1107 116A 11BA; # (봣; 봣; 봣; 봣; 봣; ) HANGUL SYLLABLE BWAS BD24;BD24;1107 116A 11BB;BD24;1107 116A 11BB; # (봤; 봤; 봤; 봤; 봤; ) HANGUL SYLLABLE BWASS BD25;BD25;1107 116A 11BC;BD25;1107 116A 11BC; # (봥; 봥; 봥; 봥; 봥; ) HANGUL SYLLABLE BWANG BD26;BD26;1107 116A 11BD;BD26;1107 116A 11BD; # (봦; 봦; 봦; 봦; 봦; ) HANGUL SYLLABLE BWAJ BD27;BD27;1107 116A 11BE;BD27;1107 116A 11BE; # (봧; 봧; 봧; 봧; 봧; ) HANGUL SYLLABLE BWAC BD28;BD28;1107 116A 11BF;BD28;1107 116A 11BF; # (봨; 봨; 봨; 봨; 봨; ) HANGUL SYLLABLE BWAK BD29;BD29;1107 116A 11C0;BD29;1107 116A 11C0; # (봩; 봩; 봩; 봩; 봩; ) HANGUL SYLLABLE BWAT BD2A;BD2A;1107 116A 11C1;BD2A;1107 116A 11C1; # (봪; 봪; 봪; 봪; 봪; ) HANGUL SYLLABLE BWAP BD2B;BD2B;1107 116A 11C2;BD2B;1107 116A 11C2; # (봫; 봫; 봫; 봫; 봫; ) HANGUL SYLLABLE BWAH BD2C;BD2C;1107 116B;BD2C;1107 116B; # (봬; 봬; 봬; 봬; 봬; ) HANGUL SYLLABLE BWAE BD2D;BD2D;1107 116B 11A8;BD2D;1107 116B 11A8; # (봭; 봭; 봭; 봭; 봭; ) HANGUL SYLLABLE BWAEG BD2E;BD2E;1107 116B 11A9;BD2E;1107 116B 11A9; # (봮; 봮; 봮; 봮; 봮; ) HANGUL SYLLABLE BWAEGG BD2F;BD2F;1107 116B 11AA;BD2F;1107 116B 11AA; # (봯; 봯; 봯; 봯; 봯; ) HANGUL SYLLABLE BWAEGS BD30;BD30;1107 116B 11AB;BD30;1107 116B 11AB; # (봰; 봰; 봰; 봰; 봰; ) HANGUL SYLLABLE BWAEN BD31;BD31;1107 116B 11AC;BD31;1107 116B 11AC; # (봱; 봱; 봱; 봱; 봱; ) HANGUL SYLLABLE BWAENJ BD32;BD32;1107 116B 11AD;BD32;1107 116B 11AD; # (봲; 봲; 봲; 봲; 봲; ) HANGUL SYLLABLE BWAENH BD33;BD33;1107 116B 11AE;BD33;1107 116B 11AE; # (봳; 봳; 봳; 봳; 봳; ) HANGUL SYLLABLE BWAED BD34;BD34;1107 116B 11AF;BD34;1107 116B 11AF; # (봴; 봴; 봴; 봴; 봴; ) HANGUL SYLLABLE BWAEL BD35;BD35;1107 116B 11B0;BD35;1107 116B 11B0; # (봵; 봵; 봵; 봵; 봵; ) HANGUL SYLLABLE BWAELG BD36;BD36;1107 116B 11B1;BD36;1107 116B 11B1; # (봶; 봶; 봶; 봶; 봶; ) HANGUL SYLLABLE BWAELM BD37;BD37;1107 116B 11B2;BD37;1107 116B 11B2; # (봷; 봷; 봷; 봷; 봷; ) HANGUL SYLLABLE BWAELB BD38;BD38;1107 116B 11B3;BD38;1107 116B 11B3; # (봸; 봸; 봸; 봸; 봸; ) HANGUL SYLLABLE BWAELS BD39;BD39;1107 116B 11B4;BD39;1107 116B 11B4; # (봹; 봹; 봹; 봹; 봹; ) HANGUL SYLLABLE BWAELT BD3A;BD3A;1107 116B 11B5;BD3A;1107 116B 11B5; # (봺; 봺; 봺; 봺; 봺; ) HANGUL SYLLABLE BWAELP BD3B;BD3B;1107 116B 11B6;BD3B;1107 116B 11B6; # (봻; 봻; 봻; 봻; 봻; ) HANGUL SYLLABLE BWAELH BD3C;BD3C;1107 116B 11B7;BD3C;1107 116B 11B7; # (봼; 봼; 봼; 봼; 봼; ) HANGUL SYLLABLE BWAEM BD3D;BD3D;1107 116B 11B8;BD3D;1107 116B 11B8; # (봽; 봽; 봽; 봽; 봽; ) HANGUL SYLLABLE BWAEB BD3E;BD3E;1107 116B 11B9;BD3E;1107 116B 11B9; # (봾; 봾; 봾; 봾; 봾; ) HANGUL SYLLABLE BWAEBS BD3F;BD3F;1107 116B 11BA;BD3F;1107 116B 11BA; # (봿; 봿; 봿; 봿; 봿; ) HANGUL SYLLABLE BWAES BD40;BD40;1107 116B 11BB;BD40;1107 116B 11BB; # (뵀; 뵀; 뵀; 뵀; 뵀; ) HANGUL SYLLABLE BWAESS BD41;BD41;1107 116B 11BC;BD41;1107 116B 11BC; # (뵁; 뵁; 뵁; 뵁; 뵁; ) HANGUL SYLLABLE BWAENG BD42;BD42;1107 116B 11BD;BD42;1107 116B 11BD; # (뵂; 뵂; 뵂; 뵂; 뵂; ) HANGUL SYLLABLE BWAEJ BD43;BD43;1107 116B 11BE;BD43;1107 116B 11BE; # (뵃; 뵃; 뵃; 뵃; 뵃; ) HANGUL SYLLABLE BWAEC BD44;BD44;1107 116B 11BF;BD44;1107 116B 11BF; # (뵄; 뵄; 뵄; 뵄; 뵄; ) HANGUL SYLLABLE BWAEK BD45;BD45;1107 116B 11C0;BD45;1107 116B 11C0; # (뵅; 뵅; 뵅; 뵅; 뵅; ) HANGUL SYLLABLE BWAET BD46;BD46;1107 116B 11C1;BD46;1107 116B 11C1; # (뵆; 뵆; 뵆; 뵆; 뵆; ) HANGUL SYLLABLE BWAEP BD47;BD47;1107 116B 11C2;BD47;1107 116B 11C2; # (뵇; 뵇; 뵇; 뵇; 뵇; ) HANGUL SYLLABLE BWAEH BD48;BD48;1107 116C;BD48;1107 116C; # (뵈; 뵈; 뵈; 뵈; 뵈; ) HANGUL SYLLABLE BOE BD49;BD49;1107 116C 11A8;BD49;1107 116C 11A8; # (뵉; 뵉; 뵉; 뵉; 뵉; ) HANGUL SYLLABLE BOEG BD4A;BD4A;1107 116C 11A9;BD4A;1107 116C 11A9; # (뵊; 뵊; 뵊; 뵊; 뵊; ) HANGUL SYLLABLE BOEGG BD4B;BD4B;1107 116C 11AA;BD4B;1107 116C 11AA; # (뵋; 뵋; 뵋; 뵋; 뵋; ) HANGUL SYLLABLE BOEGS BD4C;BD4C;1107 116C 11AB;BD4C;1107 116C 11AB; # (뵌; 뵌; 뵌; 뵌; 뵌; ) HANGUL SYLLABLE BOEN BD4D;BD4D;1107 116C 11AC;BD4D;1107 116C 11AC; # (뵍; 뵍; 뵍; 뵍; 뵍; ) HANGUL SYLLABLE BOENJ BD4E;BD4E;1107 116C 11AD;BD4E;1107 116C 11AD; # (뵎; 뵎; 뵎; 뵎; 뵎; ) HANGUL SYLLABLE BOENH BD4F;BD4F;1107 116C 11AE;BD4F;1107 116C 11AE; # (뵏; 뵏; 뵏; 뵏; 뵏; ) HANGUL SYLLABLE BOED BD50;BD50;1107 116C 11AF;BD50;1107 116C 11AF; # (뵐; 뵐; 뵐; 뵐; 뵐; ) HANGUL SYLLABLE BOEL BD51;BD51;1107 116C 11B0;BD51;1107 116C 11B0; # (뵑; 뵑; 뵑; 뵑; 뵑; ) HANGUL SYLLABLE BOELG BD52;BD52;1107 116C 11B1;BD52;1107 116C 11B1; # (뵒; 뵒; 뵒; 뵒; 뵒; ) HANGUL SYLLABLE BOELM BD53;BD53;1107 116C 11B2;BD53;1107 116C 11B2; # (뵓; 뵓; 뵓; 뵓; 뵓; ) HANGUL SYLLABLE BOELB BD54;BD54;1107 116C 11B3;BD54;1107 116C 11B3; # (뵔; 뵔; 뵔; 뵔; 뵔; ) HANGUL SYLLABLE BOELS BD55;BD55;1107 116C 11B4;BD55;1107 116C 11B4; # (뵕; 뵕; 뵕; 뵕; 뵕; ) HANGUL SYLLABLE BOELT BD56;BD56;1107 116C 11B5;BD56;1107 116C 11B5; # (뵖; 뵖; 뵖; 뵖; 뵖; ) HANGUL SYLLABLE BOELP BD57;BD57;1107 116C 11B6;BD57;1107 116C 11B6; # (뵗; 뵗; 뵗; 뵗; 뵗; ) HANGUL SYLLABLE BOELH BD58;BD58;1107 116C 11B7;BD58;1107 116C 11B7; # (뵘; 뵘; 뵘; 뵘; 뵘; ) HANGUL SYLLABLE BOEM BD59;BD59;1107 116C 11B8;BD59;1107 116C 11B8; # (뵙; 뵙; 뵙; 뵙; 뵙; ) HANGUL SYLLABLE BOEB BD5A;BD5A;1107 116C 11B9;BD5A;1107 116C 11B9; # (뵚; 뵚; 뵚; 뵚; 뵚; ) HANGUL SYLLABLE BOEBS BD5B;BD5B;1107 116C 11BA;BD5B;1107 116C 11BA; # (뵛; 뵛; 뵛; 뵛; 뵛; ) HANGUL SYLLABLE BOES BD5C;BD5C;1107 116C 11BB;BD5C;1107 116C 11BB; # (뵜; 뵜; 뵜; 뵜; 뵜; ) HANGUL SYLLABLE BOESS BD5D;BD5D;1107 116C 11BC;BD5D;1107 116C 11BC; # (뵝; 뵝; 뵝; 뵝; 뵝; ) HANGUL SYLLABLE BOENG BD5E;BD5E;1107 116C 11BD;BD5E;1107 116C 11BD; # (뵞; 뵞; 뵞; 뵞; 뵞; ) HANGUL SYLLABLE BOEJ BD5F;BD5F;1107 116C 11BE;BD5F;1107 116C 11BE; # (뵟; 뵟; 뵟; 뵟; 뵟; ) HANGUL SYLLABLE BOEC BD60;BD60;1107 116C 11BF;BD60;1107 116C 11BF; # (뵠; 뵠; 뵠; 뵠; 뵠; ) HANGUL SYLLABLE BOEK BD61;BD61;1107 116C 11C0;BD61;1107 116C 11C0; # (뵡; 뵡; 뵡; 뵡; 뵡; ) HANGUL SYLLABLE BOET BD62;BD62;1107 116C 11C1;BD62;1107 116C 11C1; # (뵢; 뵢; 뵢; 뵢; 뵢; ) HANGUL SYLLABLE BOEP BD63;BD63;1107 116C 11C2;BD63;1107 116C 11C2; # (뵣; 뵣; 뵣; 뵣; 뵣; ) HANGUL SYLLABLE BOEH BD64;BD64;1107 116D;BD64;1107 116D; # (뵤; 뵤; 뵤; 뵤; 뵤; ) HANGUL SYLLABLE BYO BD65;BD65;1107 116D 11A8;BD65;1107 116D 11A8; # (뵥; 뵥; 뵥; 뵥; 뵥; ) HANGUL SYLLABLE BYOG BD66;BD66;1107 116D 11A9;BD66;1107 116D 11A9; # (뵦; 뵦; 뵦; 뵦; 뵦; ) HANGUL SYLLABLE BYOGG BD67;BD67;1107 116D 11AA;BD67;1107 116D 11AA; # (뵧; 뵧; 뵧; 뵧; 뵧; ) HANGUL SYLLABLE BYOGS BD68;BD68;1107 116D 11AB;BD68;1107 116D 11AB; # (뵨; 뵨; 뵨; 뵨; 뵨; ) HANGUL SYLLABLE BYON BD69;BD69;1107 116D 11AC;BD69;1107 116D 11AC; # (뵩; 뵩; 뵩; 뵩; 뵩; ) HANGUL SYLLABLE BYONJ BD6A;BD6A;1107 116D 11AD;BD6A;1107 116D 11AD; # (뵪; 뵪; 뵪; 뵪; 뵪; ) HANGUL SYLLABLE BYONH BD6B;BD6B;1107 116D 11AE;BD6B;1107 116D 11AE; # (뵫; 뵫; 뵫; 뵫; 뵫; ) HANGUL SYLLABLE BYOD BD6C;BD6C;1107 116D 11AF;BD6C;1107 116D 11AF; # (뵬; 뵬; 뵬; 뵬; 뵬; ) HANGUL SYLLABLE BYOL BD6D;BD6D;1107 116D 11B0;BD6D;1107 116D 11B0; # (뵭; 뵭; 뵭; 뵭; 뵭; ) HANGUL SYLLABLE BYOLG BD6E;BD6E;1107 116D 11B1;BD6E;1107 116D 11B1; # (뵮; 뵮; 뵮; 뵮; 뵮; ) HANGUL SYLLABLE BYOLM BD6F;BD6F;1107 116D 11B2;BD6F;1107 116D 11B2; # (뵯; 뵯; 뵯; 뵯; 뵯; ) HANGUL SYLLABLE BYOLB BD70;BD70;1107 116D 11B3;BD70;1107 116D 11B3; # (뵰; 뵰; 뵰; 뵰; 뵰; ) HANGUL SYLLABLE BYOLS BD71;BD71;1107 116D 11B4;BD71;1107 116D 11B4; # (뵱; 뵱; 뵱; 뵱; 뵱; ) HANGUL SYLLABLE BYOLT BD72;BD72;1107 116D 11B5;BD72;1107 116D 11B5; # (뵲; 뵲; 뵲; 뵲; 뵲; ) HANGUL SYLLABLE BYOLP BD73;BD73;1107 116D 11B6;BD73;1107 116D 11B6; # (뵳; 뵳; 뵳; 뵳; 뵳; ) HANGUL SYLLABLE BYOLH BD74;BD74;1107 116D 11B7;BD74;1107 116D 11B7; # (뵴; 뵴; 뵴; 뵴; 뵴; ) HANGUL SYLLABLE BYOM BD75;BD75;1107 116D 11B8;BD75;1107 116D 11B8; # (뵵; 뵵; 뵵; 뵵; 뵵; ) HANGUL SYLLABLE BYOB BD76;BD76;1107 116D 11B9;BD76;1107 116D 11B9; # (뵶; 뵶; 뵶; 뵶; 뵶; ) HANGUL SYLLABLE BYOBS BD77;BD77;1107 116D 11BA;BD77;1107 116D 11BA; # (뵷; 뵷; 뵷; 뵷; 뵷; ) HANGUL SYLLABLE BYOS BD78;BD78;1107 116D 11BB;BD78;1107 116D 11BB; # (뵸; 뵸; 뵸; 뵸; 뵸; ) HANGUL SYLLABLE BYOSS BD79;BD79;1107 116D 11BC;BD79;1107 116D 11BC; # (뵹; 뵹; 뵹; 뵹; 뵹; ) HANGUL SYLLABLE BYONG BD7A;BD7A;1107 116D 11BD;BD7A;1107 116D 11BD; # (뵺; 뵺; 뵺; 뵺; 뵺; ) HANGUL SYLLABLE BYOJ BD7B;BD7B;1107 116D 11BE;BD7B;1107 116D 11BE; # (뵻; 뵻; 뵻; 뵻; 뵻; ) HANGUL SYLLABLE BYOC BD7C;BD7C;1107 116D 11BF;BD7C;1107 116D 11BF; # (뵼; 뵼; 뵼; 뵼; 뵼; ) HANGUL SYLLABLE BYOK BD7D;BD7D;1107 116D 11C0;BD7D;1107 116D 11C0; # (뵽; 뵽; 뵽; 뵽; 뵽; ) HANGUL SYLLABLE BYOT BD7E;BD7E;1107 116D 11C1;BD7E;1107 116D 11C1; # (뵾; 뵾; 뵾; 뵾; 뵾; ) HANGUL SYLLABLE BYOP BD7F;BD7F;1107 116D 11C2;BD7F;1107 116D 11C2; # (뵿; 뵿; 뵿; 뵿; 뵿; ) HANGUL SYLLABLE BYOH BD80;BD80;1107 116E;BD80;1107 116E; # (부; 부; 부; 부; 부; ) HANGUL SYLLABLE BU BD81;BD81;1107 116E 11A8;BD81;1107 116E 11A8; # (북; 북; 북; 북; 북; ) HANGUL SYLLABLE BUG BD82;BD82;1107 116E 11A9;BD82;1107 116E 11A9; # (붂; 붂; 붂; 붂; 붂; ) HANGUL SYLLABLE BUGG BD83;BD83;1107 116E 11AA;BD83;1107 116E 11AA; # (붃; 붃; 붃; 붃; 붃; ) HANGUL SYLLABLE BUGS BD84;BD84;1107 116E 11AB;BD84;1107 116E 11AB; # (분; 분; 분; 분; 분; ) HANGUL SYLLABLE BUN BD85;BD85;1107 116E 11AC;BD85;1107 116E 11AC; # (붅; 붅; 붅; 붅; 붅; ) HANGUL SYLLABLE BUNJ BD86;BD86;1107 116E 11AD;BD86;1107 116E 11AD; # (붆; 붆; 붆; 붆; 붆; ) HANGUL SYLLABLE BUNH BD87;BD87;1107 116E 11AE;BD87;1107 116E 11AE; # (붇; 붇; 붇; 붇; 붇; ) HANGUL SYLLABLE BUD BD88;BD88;1107 116E 11AF;BD88;1107 116E 11AF; # (불; 불; 불; 불; 불; ) HANGUL SYLLABLE BUL BD89;BD89;1107 116E 11B0;BD89;1107 116E 11B0; # (붉; 붉; 붉; 붉; 붉; ) HANGUL SYLLABLE BULG BD8A;BD8A;1107 116E 11B1;BD8A;1107 116E 11B1; # (붊; 붊; 붊; 붊; 붊; ) HANGUL SYLLABLE BULM BD8B;BD8B;1107 116E 11B2;BD8B;1107 116E 11B2; # (붋; 붋; 붋; 붋; 붋; ) HANGUL SYLLABLE BULB BD8C;BD8C;1107 116E 11B3;BD8C;1107 116E 11B3; # (붌; 붌; 붌; 붌; 붌; ) HANGUL SYLLABLE BULS BD8D;BD8D;1107 116E 11B4;BD8D;1107 116E 11B4; # (붍; 붍; 붍; 붍; 붍; ) HANGUL SYLLABLE BULT BD8E;BD8E;1107 116E 11B5;BD8E;1107 116E 11B5; # (붎; 붎; 붎; 붎; 붎; ) HANGUL SYLLABLE BULP BD8F;BD8F;1107 116E 11B6;BD8F;1107 116E 11B6; # (붏; 붏; 붏; 붏; 붏; ) HANGUL SYLLABLE BULH BD90;BD90;1107 116E 11B7;BD90;1107 116E 11B7; # (붐; 붐; 붐; 붐; 붐; ) HANGUL SYLLABLE BUM BD91;BD91;1107 116E 11B8;BD91;1107 116E 11B8; # (붑; 붑; 붑; 붑; 붑; ) HANGUL SYLLABLE BUB BD92;BD92;1107 116E 11B9;BD92;1107 116E 11B9; # (붒; 붒; 붒; 붒; 붒; ) HANGUL SYLLABLE BUBS BD93;BD93;1107 116E 11BA;BD93;1107 116E 11BA; # (붓; 붓; 붓; 붓; 붓; ) HANGUL SYLLABLE BUS BD94;BD94;1107 116E 11BB;BD94;1107 116E 11BB; # (붔; 붔; 붔; 붔; 붔; ) HANGUL SYLLABLE BUSS BD95;BD95;1107 116E 11BC;BD95;1107 116E 11BC; # (붕; 붕; 붕; 붕; 붕; ) HANGUL SYLLABLE BUNG BD96;BD96;1107 116E 11BD;BD96;1107 116E 11BD; # (붖; 붖; 붖; 붖; 붖; ) HANGUL SYLLABLE BUJ BD97;BD97;1107 116E 11BE;BD97;1107 116E 11BE; # (붗; 붗; 붗; 붗; 붗; ) HANGUL SYLLABLE BUC BD98;BD98;1107 116E 11BF;BD98;1107 116E 11BF; # (붘; 붘; 붘; 붘; 붘; ) HANGUL SYLLABLE BUK BD99;BD99;1107 116E 11C0;BD99;1107 116E 11C0; # (붙; 붙; 붙; 붙; 붙; ) HANGUL SYLLABLE BUT BD9A;BD9A;1107 116E 11C1;BD9A;1107 116E 11C1; # (붚; 붚; 붚; 붚; 붚; ) HANGUL SYLLABLE BUP BD9B;BD9B;1107 116E 11C2;BD9B;1107 116E 11C2; # (붛; 붛; 붛; 붛; 붛; ) HANGUL SYLLABLE BUH BD9C;BD9C;1107 116F;BD9C;1107 116F; # (붜; 붜; 붜; 붜; 붜; ) HANGUL SYLLABLE BWEO BD9D;BD9D;1107 116F 11A8;BD9D;1107 116F 11A8; # (붝; 붝; 붝; 붝; 붝; ) HANGUL SYLLABLE BWEOG BD9E;BD9E;1107 116F 11A9;BD9E;1107 116F 11A9; # (붞; 붞; 붞; 붞; 붞; ) HANGUL SYLLABLE BWEOGG BD9F;BD9F;1107 116F 11AA;BD9F;1107 116F 11AA; # (붟; 붟; 붟; 붟; 붟; ) HANGUL SYLLABLE BWEOGS BDA0;BDA0;1107 116F 11AB;BDA0;1107 116F 11AB; # (붠; 붠; 붠; 붠; 붠; ) HANGUL SYLLABLE BWEON BDA1;BDA1;1107 116F 11AC;BDA1;1107 116F 11AC; # (붡; 붡; 붡; 붡; 붡; ) HANGUL SYLLABLE BWEONJ BDA2;BDA2;1107 116F 11AD;BDA2;1107 116F 11AD; # (붢; 붢; 붢; 붢; 붢; ) HANGUL SYLLABLE BWEONH BDA3;BDA3;1107 116F 11AE;BDA3;1107 116F 11AE; # (붣; 붣; 붣; 붣; 붣; ) HANGUL SYLLABLE BWEOD BDA4;BDA4;1107 116F 11AF;BDA4;1107 116F 11AF; # (붤; 붤; 붤; 붤; 붤; ) HANGUL SYLLABLE BWEOL BDA5;BDA5;1107 116F 11B0;BDA5;1107 116F 11B0; # (붥; 붥; 붥; 붥; 붥; ) HANGUL SYLLABLE BWEOLG BDA6;BDA6;1107 116F 11B1;BDA6;1107 116F 11B1; # (붦; 붦; 붦; 붦; 붦; ) HANGUL SYLLABLE BWEOLM BDA7;BDA7;1107 116F 11B2;BDA7;1107 116F 11B2; # (붧; 붧; 붧; 붧; 붧; ) HANGUL SYLLABLE BWEOLB BDA8;BDA8;1107 116F 11B3;BDA8;1107 116F 11B3; # (붨; 붨; 붨; 붨; 붨; ) HANGUL SYLLABLE BWEOLS BDA9;BDA9;1107 116F 11B4;BDA9;1107 116F 11B4; # (붩; 붩; 붩; 붩; 붩; ) HANGUL SYLLABLE BWEOLT BDAA;BDAA;1107 116F 11B5;BDAA;1107 116F 11B5; # (붪; 붪; 붪; 붪; 붪; ) HANGUL SYLLABLE BWEOLP BDAB;BDAB;1107 116F 11B6;BDAB;1107 116F 11B6; # (붫; 붫; 붫; 붫; 붫; ) HANGUL SYLLABLE BWEOLH BDAC;BDAC;1107 116F 11B7;BDAC;1107 116F 11B7; # (붬; 붬; 붬; 붬; 붬; ) HANGUL SYLLABLE BWEOM BDAD;BDAD;1107 116F 11B8;BDAD;1107 116F 11B8; # (붭; 붭; 붭; 붭; 붭; ) HANGUL SYLLABLE BWEOB BDAE;BDAE;1107 116F 11B9;BDAE;1107 116F 11B9; # (붮; 붮; 붮; 붮; 붮; ) HANGUL SYLLABLE BWEOBS BDAF;BDAF;1107 116F 11BA;BDAF;1107 116F 11BA; # (붯; 붯; 붯; 붯; 붯; ) HANGUL SYLLABLE BWEOS BDB0;BDB0;1107 116F 11BB;BDB0;1107 116F 11BB; # (붰; 붰; 붰; 붰; 붰; ) HANGUL SYLLABLE BWEOSS BDB1;BDB1;1107 116F 11BC;BDB1;1107 116F 11BC; # (붱; 붱; 붱; 붱; 붱; ) HANGUL SYLLABLE BWEONG BDB2;BDB2;1107 116F 11BD;BDB2;1107 116F 11BD; # (붲; 붲; 붲; 붲; 붲; ) HANGUL SYLLABLE BWEOJ BDB3;BDB3;1107 116F 11BE;BDB3;1107 116F 11BE; # (붳; 붳; 붳; 붳; 붳; ) HANGUL SYLLABLE BWEOC BDB4;BDB4;1107 116F 11BF;BDB4;1107 116F 11BF; # (붴; 붴; 붴; 붴; 붴; ) HANGUL SYLLABLE BWEOK BDB5;BDB5;1107 116F 11C0;BDB5;1107 116F 11C0; # (붵; 붵; 붵; 붵; 붵; ) HANGUL SYLLABLE BWEOT BDB6;BDB6;1107 116F 11C1;BDB6;1107 116F 11C1; # (붶; 붶; 붶; 붶; 붶; ) HANGUL SYLLABLE BWEOP BDB7;BDB7;1107 116F 11C2;BDB7;1107 116F 11C2; # (붷; 붷; 붷; 붷; 붷; ) HANGUL SYLLABLE BWEOH BDB8;BDB8;1107 1170;BDB8;1107 1170; # (붸; 붸; 붸; 붸; 붸; ) HANGUL SYLLABLE BWE BDB9;BDB9;1107 1170 11A8;BDB9;1107 1170 11A8; # (붹; 붹; 붹; 붹; 붹; ) HANGUL SYLLABLE BWEG BDBA;BDBA;1107 1170 11A9;BDBA;1107 1170 11A9; # (붺; 붺; 붺; 붺; 붺; ) HANGUL SYLLABLE BWEGG BDBB;BDBB;1107 1170 11AA;BDBB;1107 1170 11AA; # (붻; 붻; 붻; 붻; 붻; ) HANGUL SYLLABLE BWEGS BDBC;BDBC;1107 1170 11AB;BDBC;1107 1170 11AB; # (붼; 붼; 붼; 붼; 붼; ) HANGUL SYLLABLE BWEN BDBD;BDBD;1107 1170 11AC;BDBD;1107 1170 11AC; # (붽; 붽; 붽; 붽; 붽; ) HANGUL SYLLABLE BWENJ BDBE;BDBE;1107 1170 11AD;BDBE;1107 1170 11AD; # (붾; 붾; 붾; 붾; 붾; ) HANGUL SYLLABLE BWENH BDBF;BDBF;1107 1170 11AE;BDBF;1107 1170 11AE; # (붿; 붿; 붿; 붿; 붿; ) HANGUL SYLLABLE BWED BDC0;BDC0;1107 1170 11AF;BDC0;1107 1170 11AF; # (뷀; 뷀; 뷀; 뷀; 뷀; ) HANGUL SYLLABLE BWEL BDC1;BDC1;1107 1170 11B0;BDC1;1107 1170 11B0; # (뷁; 뷁; 뷁; 뷁; 뷁; ) HANGUL SYLLABLE BWELG BDC2;BDC2;1107 1170 11B1;BDC2;1107 1170 11B1; # (뷂; 뷂; 뷂; 뷂; 뷂; ) HANGUL SYLLABLE BWELM BDC3;BDC3;1107 1170 11B2;BDC3;1107 1170 11B2; # (뷃; 뷃; 뷃; 뷃; 뷃; ) HANGUL SYLLABLE BWELB BDC4;BDC4;1107 1170 11B3;BDC4;1107 1170 11B3; # (뷄; 뷄; 뷄; 뷄; 뷄; ) HANGUL SYLLABLE BWELS BDC5;BDC5;1107 1170 11B4;BDC5;1107 1170 11B4; # (뷅; 뷅; 뷅; 뷅; 뷅; ) HANGUL SYLLABLE BWELT BDC6;BDC6;1107 1170 11B5;BDC6;1107 1170 11B5; # (뷆; 뷆; 뷆; 뷆; 뷆; ) HANGUL SYLLABLE BWELP BDC7;BDC7;1107 1170 11B6;BDC7;1107 1170 11B6; # (뷇; 뷇; 뷇; 뷇; 뷇; ) HANGUL SYLLABLE BWELH BDC8;BDC8;1107 1170 11B7;BDC8;1107 1170 11B7; # (뷈; 뷈; 뷈; 뷈; 뷈; ) HANGUL SYLLABLE BWEM BDC9;BDC9;1107 1170 11B8;BDC9;1107 1170 11B8; # (뷉; 뷉; 뷉; 뷉; 뷉; ) HANGUL SYLLABLE BWEB BDCA;BDCA;1107 1170 11B9;BDCA;1107 1170 11B9; # (뷊; 뷊; 뷊; 뷊; 뷊; ) HANGUL SYLLABLE BWEBS BDCB;BDCB;1107 1170 11BA;BDCB;1107 1170 11BA; # (뷋; 뷋; 뷋; 뷋; 뷋; ) HANGUL SYLLABLE BWES BDCC;BDCC;1107 1170 11BB;BDCC;1107 1170 11BB; # (뷌; 뷌; 뷌; 뷌; 뷌; ) HANGUL SYLLABLE BWESS BDCD;BDCD;1107 1170 11BC;BDCD;1107 1170 11BC; # (뷍; 뷍; 뷍; 뷍; 뷍; ) HANGUL SYLLABLE BWENG BDCE;BDCE;1107 1170 11BD;BDCE;1107 1170 11BD; # (뷎; 뷎; 뷎; 뷎; 뷎; ) HANGUL SYLLABLE BWEJ BDCF;BDCF;1107 1170 11BE;BDCF;1107 1170 11BE; # (뷏; 뷏; 뷏; 뷏; 뷏; ) HANGUL SYLLABLE BWEC BDD0;BDD0;1107 1170 11BF;BDD0;1107 1170 11BF; # (뷐; 뷐; 뷐; 뷐; 뷐; ) HANGUL SYLLABLE BWEK BDD1;BDD1;1107 1170 11C0;BDD1;1107 1170 11C0; # (뷑; 뷑; 뷑; 뷑; 뷑; ) HANGUL SYLLABLE BWET BDD2;BDD2;1107 1170 11C1;BDD2;1107 1170 11C1; # (뷒; 뷒; 뷒; 뷒; 뷒; ) HANGUL SYLLABLE BWEP BDD3;BDD3;1107 1170 11C2;BDD3;1107 1170 11C2; # (뷓; 뷓; 뷓; 뷓; 뷓; ) HANGUL SYLLABLE BWEH BDD4;BDD4;1107 1171;BDD4;1107 1171; # (뷔; 뷔; 뷔; 뷔; 뷔; ) HANGUL SYLLABLE BWI BDD5;BDD5;1107 1171 11A8;BDD5;1107 1171 11A8; # (뷕; 뷕; 뷕; 뷕; 뷕; ) HANGUL SYLLABLE BWIG BDD6;BDD6;1107 1171 11A9;BDD6;1107 1171 11A9; # (뷖; 뷖; 뷖; 뷖; 뷖; ) HANGUL SYLLABLE BWIGG BDD7;BDD7;1107 1171 11AA;BDD7;1107 1171 11AA; # (뷗; 뷗; 뷗; 뷗; 뷗; ) HANGUL SYLLABLE BWIGS BDD8;BDD8;1107 1171 11AB;BDD8;1107 1171 11AB; # (뷘; 뷘; 뷘; 뷘; 뷘; ) HANGUL SYLLABLE BWIN BDD9;BDD9;1107 1171 11AC;BDD9;1107 1171 11AC; # (뷙; 뷙; 뷙; 뷙; 뷙; ) HANGUL SYLLABLE BWINJ BDDA;BDDA;1107 1171 11AD;BDDA;1107 1171 11AD; # (뷚; 뷚; 뷚; 뷚; 뷚; ) HANGUL SYLLABLE BWINH BDDB;BDDB;1107 1171 11AE;BDDB;1107 1171 11AE; # (뷛; 뷛; 뷛; 뷛; 뷛; ) HANGUL SYLLABLE BWID BDDC;BDDC;1107 1171 11AF;BDDC;1107 1171 11AF; # (뷜; 뷜; 뷜; 뷜; 뷜; ) HANGUL SYLLABLE BWIL BDDD;BDDD;1107 1171 11B0;BDDD;1107 1171 11B0; # (뷝; 뷝; 뷝; 뷝; 뷝; ) HANGUL SYLLABLE BWILG BDDE;BDDE;1107 1171 11B1;BDDE;1107 1171 11B1; # (뷞; 뷞; 뷞; 뷞; 뷞; ) HANGUL SYLLABLE BWILM BDDF;BDDF;1107 1171 11B2;BDDF;1107 1171 11B2; # (뷟; 뷟; 뷟; 뷟; 뷟; ) HANGUL SYLLABLE BWILB BDE0;BDE0;1107 1171 11B3;BDE0;1107 1171 11B3; # (뷠; 뷠; 뷠; 뷠; 뷠; ) HANGUL SYLLABLE BWILS BDE1;BDE1;1107 1171 11B4;BDE1;1107 1171 11B4; # (뷡; 뷡; 뷡; 뷡; 뷡; ) HANGUL SYLLABLE BWILT BDE2;BDE2;1107 1171 11B5;BDE2;1107 1171 11B5; # (뷢; 뷢; 뷢; 뷢; 뷢; ) HANGUL SYLLABLE BWILP BDE3;BDE3;1107 1171 11B6;BDE3;1107 1171 11B6; # (뷣; 뷣; 뷣; 뷣; 뷣; ) HANGUL SYLLABLE BWILH BDE4;BDE4;1107 1171 11B7;BDE4;1107 1171 11B7; # (뷤; 뷤; 뷤; 뷤; 뷤; ) HANGUL SYLLABLE BWIM BDE5;BDE5;1107 1171 11B8;BDE5;1107 1171 11B8; # (뷥; 뷥; 뷥; 뷥; 뷥; ) HANGUL SYLLABLE BWIB BDE6;BDE6;1107 1171 11B9;BDE6;1107 1171 11B9; # (뷦; 뷦; 뷦; 뷦; 뷦; ) HANGUL SYLLABLE BWIBS BDE7;BDE7;1107 1171 11BA;BDE7;1107 1171 11BA; # (뷧; 뷧; 뷧; 뷧; 뷧; ) HANGUL SYLLABLE BWIS BDE8;BDE8;1107 1171 11BB;BDE8;1107 1171 11BB; # (뷨; 뷨; 뷨; 뷨; 뷨; ) HANGUL SYLLABLE BWISS BDE9;BDE9;1107 1171 11BC;BDE9;1107 1171 11BC; # (뷩; 뷩; 뷩; 뷩; 뷩; ) HANGUL SYLLABLE BWING BDEA;BDEA;1107 1171 11BD;BDEA;1107 1171 11BD; # (뷪; 뷪; 뷪; 뷪; 뷪; ) HANGUL SYLLABLE BWIJ BDEB;BDEB;1107 1171 11BE;BDEB;1107 1171 11BE; # (뷫; 뷫; 뷫; 뷫; 뷫; ) HANGUL SYLLABLE BWIC BDEC;BDEC;1107 1171 11BF;BDEC;1107 1171 11BF; # (뷬; 뷬; 뷬; 뷬; 뷬; ) HANGUL SYLLABLE BWIK BDED;BDED;1107 1171 11C0;BDED;1107 1171 11C0; # (뷭; 뷭; 뷭; 뷭; 뷭; ) HANGUL SYLLABLE BWIT BDEE;BDEE;1107 1171 11C1;BDEE;1107 1171 11C1; # (뷮; 뷮; 뷮; 뷮; 뷮; ) HANGUL SYLLABLE BWIP BDEF;BDEF;1107 1171 11C2;BDEF;1107 1171 11C2; # (뷯; 뷯; 뷯; 뷯; 뷯; ) HANGUL SYLLABLE BWIH BDF0;BDF0;1107 1172;BDF0;1107 1172; # (뷰; 뷰; 뷰; 뷰; 뷰; ) HANGUL SYLLABLE BYU BDF1;BDF1;1107 1172 11A8;BDF1;1107 1172 11A8; # (뷱; 뷱; 뷱; 뷱; 뷱; ) HANGUL SYLLABLE BYUG BDF2;BDF2;1107 1172 11A9;BDF2;1107 1172 11A9; # (뷲; 뷲; 뷲; 뷲; 뷲; ) HANGUL SYLLABLE BYUGG BDF3;BDF3;1107 1172 11AA;BDF3;1107 1172 11AA; # (뷳; 뷳; 뷳; 뷳; 뷳; ) HANGUL SYLLABLE BYUGS BDF4;BDF4;1107 1172 11AB;BDF4;1107 1172 11AB; # (뷴; 뷴; 뷴; 뷴; 뷴; ) HANGUL SYLLABLE BYUN BDF5;BDF5;1107 1172 11AC;BDF5;1107 1172 11AC; # (뷵; 뷵; 뷵; 뷵; 뷵; ) HANGUL SYLLABLE BYUNJ BDF6;BDF6;1107 1172 11AD;BDF6;1107 1172 11AD; # (뷶; 뷶; 뷶; 뷶; 뷶; ) HANGUL SYLLABLE BYUNH BDF7;BDF7;1107 1172 11AE;BDF7;1107 1172 11AE; # (뷷; 뷷; 뷷; 뷷; 뷷; ) HANGUL SYLLABLE BYUD BDF8;BDF8;1107 1172 11AF;BDF8;1107 1172 11AF; # (뷸; 뷸; 뷸; 뷸; 뷸; ) HANGUL SYLLABLE BYUL BDF9;BDF9;1107 1172 11B0;BDF9;1107 1172 11B0; # (뷹; 뷹; 뷹; 뷹; 뷹; ) HANGUL SYLLABLE BYULG BDFA;BDFA;1107 1172 11B1;BDFA;1107 1172 11B1; # (뷺; 뷺; 뷺; 뷺; 뷺; ) HANGUL SYLLABLE BYULM BDFB;BDFB;1107 1172 11B2;BDFB;1107 1172 11B2; # (뷻; 뷻; 뷻; 뷻; 뷻; ) HANGUL SYLLABLE BYULB BDFC;BDFC;1107 1172 11B3;BDFC;1107 1172 11B3; # (뷼; 뷼; 뷼; 뷼; 뷼; ) HANGUL SYLLABLE BYULS BDFD;BDFD;1107 1172 11B4;BDFD;1107 1172 11B4; # (뷽; 뷽; 뷽; 뷽; 뷽; ) HANGUL SYLLABLE BYULT BDFE;BDFE;1107 1172 11B5;BDFE;1107 1172 11B5; # (뷾; 뷾; 뷾; 뷾; 뷾; ) HANGUL SYLLABLE BYULP BDFF;BDFF;1107 1172 11B6;BDFF;1107 1172 11B6; # (뷿; 뷿; 뷿; 뷿; 뷿; ) HANGUL SYLLABLE BYULH BE00;BE00;1107 1172 11B7;BE00;1107 1172 11B7; # (븀; 븀; 븀; 븀; 븀; ) HANGUL SYLLABLE BYUM BE01;BE01;1107 1172 11B8;BE01;1107 1172 11B8; # (븁; 븁; 븁; 븁; 븁; ) HANGUL SYLLABLE BYUB BE02;BE02;1107 1172 11B9;BE02;1107 1172 11B9; # (븂; 븂; 븂; 븂; 븂; ) HANGUL SYLLABLE BYUBS BE03;BE03;1107 1172 11BA;BE03;1107 1172 11BA; # (븃; 븃; 븃; 븃; 븃; ) HANGUL SYLLABLE BYUS BE04;BE04;1107 1172 11BB;BE04;1107 1172 11BB; # (븄; 븄; 븄; 븄; 븄; ) HANGUL SYLLABLE BYUSS BE05;BE05;1107 1172 11BC;BE05;1107 1172 11BC; # (븅; 븅; 븅; 븅; 븅; ) HANGUL SYLLABLE BYUNG BE06;BE06;1107 1172 11BD;BE06;1107 1172 11BD; # (븆; 븆; 븆; 븆; 븆; ) HANGUL SYLLABLE BYUJ BE07;BE07;1107 1172 11BE;BE07;1107 1172 11BE; # (븇; 븇; 븇; 븇; 븇; ) HANGUL SYLLABLE BYUC BE08;BE08;1107 1172 11BF;BE08;1107 1172 11BF; # (븈; 븈; 븈; 븈; 븈; ) HANGUL SYLLABLE BYUK BE09;BE09;1107 1172 11C0;BE09;1107 1172 11C0; # (븉; 븉; 븉; 븉; 븉; ) HANGUL SYLLABLE BYUT BE0A;BE0A;1107 1172 11C1;BE0A;1107 1172 11C1; # (븊; 븊; 븊; 븊; 븊; ) HANGUL SYLLABLE BYUP BE0B;BE0B;1107 1172 11C2;BE0B;1107 1172 11C2; # (븋; 븋; 븋; 븋; 븋; ) HANGUL SYLLABLE BYUH BE0C;BE0C;1107 1173;BE0C;1107 1173; # (브; 브; 브; 브; 브; ) HANGUL SYLLABLE BEU BE0D;BE0D;1107 1173 11A8;BE0D;1107 1173 11A8; # (븍; 븍; 븍; 븍; 븍; ) HANGUL SYLLABLE BEUG BE0E;BE0E;1107 1173 11A9;BE0E;1107 1173 11A9; # (븎; 븎; 븎; 븎; 븎; ) HANGUL SYLLABLE BEUGG BE0F;BE0F;1107 1173 11AA;BE0F;1107 1173 11AA; # (븏; 븏; 븏; 븏; 븏; ) HANGUL SYLLABLE BEUGS BE10;BE10;1107 1173 11AB;BE10;1107 1173 11AB; # (븐; 븐; 븐; 븐; 븐; ) HANGUL SYLLABLE BEUN BE11;BE11;1107 1173 11AC;BE11;1107 1173 11AC; # (븑; 븑; 븑; 븑; 븑; ) HANGUL SYLLABLE BEUNJ BE12;BE12;1107 1173 11AD;BE12;1107 1173 11AD; # (븒; 븒; 븒; 븒; 븒; ) HANGUL SYLLABLE BEUNH BE13;BE13;1107 1173 11AE;BE13;1107 1173 11AE; # (븓; 븓; 븓; 븓; 븓; ) HANGUL SYLLABLE BEUD BE14;BE14;1107 1173 11AF;BE14;1107 1173 11AF; # (블; 블; 블; 블; 블; ) HANGUL SYLLABLE BEUL BE15;BE15;1107 1173 11B0;BE15;1107 1173 11B0; # (븕; 븕; 븕; 븕; 븕; ) HANGUL SYLLABLE BEULG BE16;BE16;1107 1173 11B1;BE16;1107 1173 11B1; # (븖; 븖; 븖; 븖; 븖; ) HANGUL SYLLABLE BEULM BE17;BE17;1107 1173 11B2;BE17;1107 1173 11B2; # (븗; 븗; 븗; 븗; 븗; ) HANGUL SYLLABLE BEULB BE18;BE18;1107 1173 11B3;BE18;1107 1173 11B3; # (븘; 븘; 븘; 븘; 븘; ) HANGUL SYLLABLE BEULS BE19;BE19;1107 1173 11B4;BE19;1107 1173 11B4; # (븙; 븙; 븙; 븙; 븙; ) HANGUL SYLLABLE BEULT BE1A;BE1A;1107 1173 11B5;BE1A;1107 1173 11B5; # (븚; 븚; 븚; 븚; 븚; ) HANGUL SYLLABLE BEULP BE1B;BE1B;1107 1173 11B6;BE1B;1107 1173 11B6; # (븛; 븛; 븛; 븛; 븛; ) HANGUL SYLLABLE BEULH BE1C;BE1C;1107 1173 11B7;BE1C;1107 1173 11B7; # (븜; 븜; 븜; 븜; 븜; ) HANGUL SYLLABLE BEUM BE1D;BE1D;1107 1173 11B8;BE1D;1107 1173 11B8; # (븝; 븝; 븝; 븝; 븝; ) HANGUL SYLLABLE BEUB BE1E;BE1E;1107 1173 11B9;BE1E;1107 1173 11B9; # (븞; 븞; 븞; 븞; 븞; ) HANGUL SYLLABLE BEUBS BE1F;BE1F;1107 1173 11BA;BE1F;1107 1173 11BA; # (븟; 븟; 븟; 븟; 븟; ) HANGUL SYLLABLE BEUS BE20;BE20;1107 1173 11BB;BE20;1107 1173 11BB; # (븠; 븠; 븠; 븠; 븠; ) HANGUL SYLLABLE BEUSS BE21;BE21;1107 1173 11BC;BE21;1107 1173 11BC; # (븡; 븡; 븡; 븡; 븡; ) HANGUL SYLLABLE BEUNG BE22;BE22;1107 1173 11BD;BE22;1107 1173 11BD; # (븢; 븢; 븢; 븢; 븢; ) HANGUL SYLLABLE BEUJ BE23;BE23;1107 1173 11BE;BE23;1107 1173 11BE; # (븣; 븣; 븣; 븣; 븣; ) HANGUL SYLLABLE BEUC BE24;BE24;1107 1173 11BF;BE24;1107 1173 11BF; # (븤; 븤; 븤; 븤; 븤; ) HANGUL SYLLABLE BEUK BE25;BE25;1107 1173 11C0;BE25;1107 1173 11C0; # (븥; 븥; 븥; 븥; 븥; ) HANGUL SYLLABLE BEUT BE26;BE26;1107 1173 11C1;BE26;1107 1173 11C1; # (븦; 븦; 븦; 븦; 븦; ) HANGUL SYLLABLE BEUP BE27;BE27;1107 1173 11C2;BE27;1107 1173 11C2; # (븧; 븧; 븧; 븧; 븧; ) HANGUL SYLLABLE BEUH BE28;BE28;1107 1174;BE28;1107 1174; # (븨; 븨; 븨; 븨; 븨; ) HANGUL SYLLABLE BYI BE29;BE29;1107 1174 11A8;BE29;1107 1174 11A8; # (븩; 븩; 븩; 븩; 븩; ) HANGUL SYLLABLE BYIG BE2A;BE2A;1107 1174 11A9;BE2A;1107 1174 11A9; # (븪; 븪; 븪; 븪; 븪; ) HANGUL SYLLABLE BYIGG BE2B;BE2B;1107 1174 11AA;BE2B;1107 1174 11AA; # (븫; 븫; 븫; 븫; 븫; ) HANGUL SYLLABLE BYIGS BE2C;BE2C;1107 1174 11AB;BE2C;1107 1174 11AB; # (븬; 븬; 븬; 븬; 븬; ) HANGUL SYLLABLE BYIN BE2D;BE2D;1107 1174 11AC;BE2D;1107 1174 11AC; # (븭; 븭; 븭; 븭; 븭; ) HANGUL SYLLABLE BYINJ BE2E;BE2E;1107 1174 11AD;BE2E;1107 1174 11AD; # (븮; 븮; 븮; 븮; 븮; ) HANGUL SYLLABLE BYINH BE2F;BE2F;1107 1174 11AE;BE2F;1107 1174 11AE; # (븯; 븯; 븯; 븯; 븯; ) HANGUL SYLLABLE BYID BE30;BE30;1107 1174 11AF;BE30;1107 1174 11AF; # (븰; 븰; 븰; 븰; 븰; ) HANGUL SYLLABLE BYIL BE31;BE31;1107 1174 11B0;BE31;1107 1174 11B0; # (븱; 븱; 븱; 븱; 븱; ) HANGUL SYLLABLE BYILG BE32;BE32;1107 1174 11B1;BE32;1107 1174 11B1; # (븲; 븲; 븲; 븲; 븲; ) HANGUL SYLLABLE BYILM BE33;BE33;1107 1174 11B2;BE33;1107 1174 11B2; # (븳; 븳; 븳; 븳; 븳; ) HANGUL SYLLABLE BYILB BE34;BE34;1107 1174 11B3;BE34;1107 1174 11B3; # (븴; 븴; 븴; 븴; 븴; ) HANGUL SYLLABLE BYILS BE35;BE35;1107 1174 11B4;BE35;1107 1174 11B4; # (븵; 븵; 븵; 븵; 븵; ) HANGUL SYLLABLE BYILT BE36;BE36;1107 1174 11B5;BE36;1107 1174 11B5; # (븶; 븶; 븶; 븶; 븶; ) HANGUL SYLLABLE BYILP BE37;BE37;1107 1174 11B6;BE37;1107 1174 11B6; # (븷; 븷; 븷; 븷; 븷; ) HANGUL SYLLABLE BYILH BE38;BE38;1107 1174 11B7;BE38;1107 1174 11B7; # (븸; 븸; 븸; 븸; 븸; ) HANGUL SYLLABLE BYIM BE39;BE39;1107 1174 11B8;BE39;1107 1174 11B8; # (븹; 븹; 븹; 븹; 븹; ) HANGUL SYLLABLE BYIB BE3A;BE3A;1107 1174 11B9;BE3A;1107 1174 11B9; # (븺; 븺; 븺; 븺; 븺; ) HANGUL SYLLABLE BYIBS BE3B;BE3B;1107 1174 11BA;BE3B;1107 1174 11BA; # (븻; 븻; 븻; 븻; 븻; ) HANGUL SYLLABLE BYIS BE3C;BE3C;1107 1174 11BB;BE3C;1107 1174 11BB; # (븼; 븼; 븼; 븼; 븼; ) HANGUL SYLLABLE BYISS BE3D;BE3D;1107 1174 11BC;BE3D;1107 1174 11BC; # (븽; 븽; 븽; 븽; 븽; ) HANGUL SYLLABLE BYING BE3E;BE3E;1107 1174 11BD;BE3E;1107 1174 11BD; # (븾; 븾; 븾; 븾; 븾; ) HANGUL SYLLABLE BYIJ BE3F;BE3F;1107 1174 11BE;BE3F;1107 1174 11BE; # (븿; 븿; 븿; 븿; 븿; ) HANGUL SYLLABLE BYIC BE40;BE40;1107 1174 11BF;BE40;1107 1174 11BF; # (빀; 빀; 빀; 빀; 빀; ) HANGUL SYLLABLE BYIK BE41;BE41;1107 1174 11C0;BE41;1107 1174 11C0; # (빁; 빁; 빁; 빁; 빁; ) HANGUL SYLLABLE BYIT BE42;BE42;1107 1174 11C1;BE42;1107 1174 11C1; # (빂; 빂; 빂; 빂; 빂; ) HANGUL SYLLABLE BYIP BE43;BE43;1107 1174 11C2;BE43;1107 1174 11C2; # (빃; 빃; 빃; 빃; 빃; ) HANGUL SYLLABLE BYIH BE44;BE44;1107 1175;BE44;1107 1175; # (비; 비; 비; 비; 비; ) HANGUL SYLLABLE BI BE45;BE45;1107 1175 11A8;BE45;1107 1175 11A8; # (빅; 빅; 빅; 빅; 빅; ) HANGUL SYLLABLE BIG BE46;BE46;1107 1175 11A9;BE46;1107 1175 11A9; # (빆; 빆; 빆; 빆; 빆; ) HANGUL SYLLABLE BIGG BE47;BE47;1107 1175 11AA;BE47;1107 1175 11AA; # (빇; 빇; 빇; 빇; 빇; ) HANGUL SYLLABLE BIGS BE48;BE48;1107 1175 11AB;BE48;1107 1175 11AB; # (빈; 빈; 빈; 빈; 빈; ) HANGUL SYLLABLE BIN BE49;BE49;1107 1175 11AC;BE49;1107 1175 11AC; # (빉; 빉; 빉; 빉; 빉; ) HANGUL SYLLABLE BINJ BE4A;BE4A;1107 1175 11AD;BE4A;1107 1175 11AD; # (빊; 빊; 빊; 빊; 빊; ) HANGUL SYLLABLE BINH BE4B;BE4B;1107 1175 11AE;BE4B;1107 1175 11AE; # (빋; 빋; 빋; 빋; 빋; ) HANGUL SYLLABLE BID BE4C;BE4C;1107 1175 11AF;BE4C;1107 1175 11AF; # (빌; 빌; 빌; 빌; 빌; ) HANGUL SYLLABLE BIL BE4D;BE4D;1107 1175 11B0;BE4D;1107 1175 11B0; # (빍; 빍; 빍; 빍; 빍; ) HANGUL SYLLABLE BILG BE4E;BE4E;1107 1175 11B1;BE4E;1107 1175 11B1; # (빎; 빎; 빎; 빎; 빎; ) HANGUL SYLLABLE BILM BE4F;BE4F;1107 1175 11B2;BE4F;1107 1175 11B2; # (빏; 빏; 빏; 빏; 빏; ) HANGUL SYLLABLE BILB BE50;BE50;1107 1175 11B3;BE50;1107 1175 11B3; # (빐; 빐; 빐; 빐; 빐; ) HANGUL SYLLABLE BILS BE51;BE51;1107 1175 11B4;BE51;1107 1175 11B4; # (빑; 빑; 빑; 빑; 빑; ) HANGUL SYLLABLE BILT BE52;BE52;1107 1175 11B5;BE52;1107 1175 11B5; # (빒; 빒; 빒; 빒; 빒; ) HANGUL SYLLABLE BILP BE53;BE53;1107 1175 11B6;BE53;1107 1175 11B6; # (빓; 빓; 빓; 빓; 빓; ) HANGUL SYLLABLE BILH BE54;BE54;1107 1175 11B7;BE54;1107 1175 11B7; # (빔; 빔; 빔; 빔; 빔; ) HANGUL SYLLABLE BIM BE55;BE55;1107 1175 11B8;BE55;1107 1175 11B8; # (빕; 빕; 빕; 빕; 빕; ) HANGUL SYLLABLE BIB BE56;BE56;1107 1175 11B9;BE56;1107 1175 11B9; # (빖; 빖; 빖; 빖; 빖; ) HANGUL SYLLABLE BIBS BE57;BE57;1107 1175 11BA;BE57;1107 1175 11BA; # (빗; 빗; 빗; 빗; 빗; ) HANGUL SYLLABLE BIS BE58;BE58;1107 1175 11BB;BE58;1107 1175 11BB; # (빘; 빘; 빘; 빘; 빘; ) HANGUL SYLLABLE BISS BE59;BE59;1107 1175 11BC;BE59;1107 1175 11BC; # (빙; 빙; 빙; 빙; 빙; ) HANGUL SYLLABLE BING BE5A;BE5A;1107 1175 11BD;BE5A;1107 1175 11BD; # (빚; 빚; 빚; 빚; 빚; ) HANGUL SYLLABLE BIJ BE5B;BE5B;1107 1175 11BE;BE5B;1107 1175 11BE; # (빛; 빛; 빛; 빛; 빛; ) HANGUL SYLLABLE BIC BE5C;BE5C;1107 1175 11BF;BE5C;1107 1175 11BF; # (빜; 빜; 빜; 빜; 빜; ) HANGUL SYLLABLE BIK BE5D;BE5D;1107 1175 11C0;BE5D;1107 1175 11C0; # (빝; 빝; 빝; 빝; 빝; ) HANGUL SYLLABLE BIT BE5E;BE5E;1107 1175 11C1;BE5E;1107 1175 11C1; # (빞; 빞; 빞; 빞; 빞; ) HANGUL SYLLABLE BIP BE5F;BE5F;1107 1175 11C2;BE5F;1107 1175 11C2; # (빟; 빟; 빟; 빟; 빟; ) HANGUL SYLLABLE BIH BE60;BE60;1108 1161;BE60;1108 1161; # (빠; 빠; 빠; 빠; 빠; ) HANGUL SYLLABLE BBA BE61;BE61;1108 1161 11A8;BE61;1108 1161 11A8; # (빡; 빡; 빡; 빡; 빡; ) HANGUL SYLLABLE BBAG BE62;BE62;1108 1161 11A9;BE62;1108 1161 11A9; # (빢; 빢; 빢; 빢; 빢; ) HANGUL SYLLABLE BBAGG BE63;BE63;1108 1161 11AA;BE63;1108 1161 11AA; # (빣; 빣; 빣; 빣; 빣; ) HANGUL SYLLABLE BBAGS BE64;BE64;1108 1161 11AB;BE64;1108 1161 11AB; # (빤; 빤; 빤; 빤; 빤; ) HANGUL SYLLABLE BBAN BE65;BE65;1108 1161 11AC;BE65;1108 1161 11AC; # (빥; 빥; 빥; 빥; 빥; ) HANGUL SYLLABLE BBANJ BE66;BE66;1108 1161 11AD;BE66;1108 1161 11AD; # (빦; 빦; 빦; 빦; 빦; ) HANGUL SYLLABLE BBANH BE67;BE67;1108 1161 11AE;BE67;1108 1161 11AE; # (빧; 빧; 빧; 빧; 빧; ) HANGUL SYLLABLE BBAD BE68;BE68;1108 1161 11AF;BE68;1108 1161 11AF; # (빨; 빨; 빨; 빨; 빨; ) HANGUL SYLLABLE BBAL BE69;BE69;1108 1161 11B0;BE69;1108 1161 11B0; # (빩; 빩; 빩; 빩; 빩; ) HANGUL SYLLABLE BBALG BE6A;BE6A;1108 1161 11B1;BE6A;1108 1161 11B1; # (빪; 빪; 빪; 빪; 빪; ) HANGUL SYLLABLE BBALM BE6B;BE6B;1108 1161 11B2;BE6B;1108 1161 11B2; # (빫; 빫; 빫; 빫; 빫; ) HANGUL SYLLABLE BBALB BE6C;BE6C;1108 1161 11B3;BE6C;1108 1161 11B3; # (빬; 빬; 빬; 빬; 빬; ) HANGUL SYLLABLE BBALS BE6D;BE6D;1108 1161 11B4;BE6D;1108 1161 11B4; # (빭; 빭; 빭; 빭; 빭; ) HANGUL SYLLABLE BBALT BE6E;BE6E;1108 1161 11B5;BE6E;1108 1161 11B5; # (빮; 빮; 빮; 빮; 빮; ) HANGUL SYLLABLE BBALP BE6F;BE6F;1108 1161 11B6;BE6F;1108 1161 11B6; # (빯; 빯; 빯; 빯; 빯; ) HANGUL SYLLABLE BBALH BE70;BE70;1108 1161 11B7;BE70;1108 1161 11B7; # (빰; 빰; 빰; 빰; 빰; ) HANGUL SYLLABLE BBAM BE71;BE71;1108 1161 11B8;BE71;1108 1161 11B8; # (빱; 빱; 빱; 빱; 빱; ) HANGUL SYLLABLE BBAB BE72;BE72;1108 1161 11B9;BE72;1108 1161 11B9; # (빲; 빲; 빲; 빲; 빲; ) HANGUL SYLLABLE BBABS BE73;BE73;1108 1161 11BA;BE73;1108 1161 11BA; # (빳; 빳; 빳; 빳; 빳; ) HANGUL SYLLABLE BBAS BE74;BE74;1108 1161 11BB;BE74;1108 1161 11BB; # (빴; 빴; 빴; 빴; 빴; ) HANGUL SYLLABLE BBASS BE75;BE75;1108 1161 11BC;BE75;1108 1161 11BC; # (빵; 빵; 빵; 빵; 빵; ) HANGUL SYLLABLE BBANG BE76;BE76;1108 1161 11BD;BE76;1108 1161 11BD; # (빶; 빶; 빶; 빶; 빶; ) HANGUL SYLLABLE BBAJ BE77;BE77;1108 1161 11BE;BE77;1108 1161 11BE; # (빷; 빷; 빷; 빷; 빷; ) HANGUL SYLLABLE BBAC BE78;BE78;1108 1161 11BF;BE78;1108 1161 11BF; # (빸; 빸; 빸; 빸; 빸; ) HANGUL SYLLABLE BBAK BE79;BE79;1108 1161 11C0;BE79;1108 1161 11C0; # (빹; 빹; 빹; 빹; 빹; ) HANGUL SYLLABLE BBAT BE7A;BE7A;1108 1161 11C1;BE7A;1108 1161 11C1; # (빺; 빺; 빺; 빺; 빺; ) HANGUL SYLLABLE BBAP BE7B;BE7B;1108 1161 11C2;BE7B;1108 1161 11C2; # (빻; 빻; 빻; 빻; 빻; ) HANGUL SYLLABLE BBAH BE7C;BE7C;1108 1162;BE7C;1108 1162; # (빼; 빼; 빼; 빼; 빼; ) HANGUL SYLLABLE BBAE BE7D;BE7D;1108 1162 11A8;BE7D;1108 1162 11A8; # (빽; 빽; 빽; 빽; 빽; ) HANGUL SYLLABLE BBAEG BE7E;BE7E;1108 1162 11A9;BE7E;1108 1162 11A9; # (빾; 빾; 빾; 빾; 빾; ) HANGUL SYLLABLE BBAEGG BE7F;BE7F;1108 1162 11AA;BE7F;1108 1162 11AA; # (빿; 빿; 빿; 빿; 빿; ) HANGUL SYLLABLE BBAEGS BE80;BE80;1108 1162 11AB;BE80;1108 1162 11AB; # (뺀; 뺀; 뺀; 뺀; 뺀; ) HANGUL SYLLABLE BBAEN BE81;BE81;1108 1162 11AC;BE81;1108 1162 11AC; # (뺁; 뺁; 뺁; 뺁; 뺁; ) HANGUL SYLLABLE BBAENJ BE82;BE82;1108 1162 11AD;BE82;1108 1162 11AD; # (뺂; 뺂; 뺂; 뺂; 뺂; ) HANGUL SYLLABLE BBAENH BE83;BE83;1108 1162 11AE;BE83;1108 1162 11AE; # (뺃; 뺃; 뺃; 뺃; 뺃; ) HANGUL SYLLABLE BBAED BE84;BE84;1108 1162 11AF;BE84;1108 1162 11AF; # (뺄; 뺄; 뺄; 뺄; 뺄; ) HANGUL SYLLABLE BBAEL BE85;BE85;1108 1162 11B0;BE85;1108 1162 11B0; # (뺅; 뺅; 뺅; 뺅; 뺅; ) HANGUL SYLLABLE BBAELG BE86;BE86;1108 1162 11B1;BE86;1108 1162 11B1; # (뺆; 뺆; 뺆; 뺆; 뺆; ) HANGUL SYLLABLE BBAELM BE87;BE87;1108 1162 11B2;BE87;1108 1162 11B2; # (뺇; 뺇; 뺇; 뺇; 뺇; ) HANGUL SYLLABLE BBAELB BE88;BE88;1108 1162 11B3;BE88;1108 1162 11B3; # (뺈; 뺈; 뺈; 뺈; 뺈; ) HANGUL SYLLABLE BBAELS BE89;BE89;1108 1162 11B4;BE89;1108 1162 11B4; # (뺉; 뺉; 뺉; 뺉; 뺉; ) HANGUL SYLLABLE BBAELT BE8A;BE8A;1108 1162 11B5;BE8A;1108 1162 11B5; # (뺊; 뺊; 뺊; 뺊; 뺊; ) HANGUL SYLLABLE BBAELP BE8B;BE8B;1108 1162 11B6;BE8B;1108 1162 11B6; # (뺋; 뺋; 뺋; 뺋; 뺋; ) HANGUL SYLLABLE BBAELH BE8C;BE8C;1108 1162 11B7;BE8C;1108 1162 11B7; # (뺌; 뺌; 뺌; 뺌; 뺌; ) HANGUL SYLLABLE BBAEM BE8D;BE8D;1108 1162 11B8;BE8D;1108 1162 11B8; # (뺍; 뺍; 뺍; 뺍; 뺍; ) HANGUL SYLLABLE BBAEB BE8E;BE8E;1108 1162 11B9;BE8E;1108 1162 11B9; # (뺎; 뺎; 뺎; 뺎; 뺎; ) HANGUL SYLLABLE BBAEBS BE8F;BE8F;1108 1162 11BA;BE8F;1108 1162 11BA; # (뺏; 뺏; 뺏; 뺏; 뺏; ) HANGUL SYLLABLE BBAES BE90;BE90;1108 1162 11BB;BE90;1108 1162 11BB; # (뺐; 뺐; 뺐; 뺐; 뺐; ) HANGUL SYLLABLE BBAESS BE91;BE91;1108 1162 11BC;BE91;1108 1162 11BC; # (뺑; 뺑; 뺑; 뺑; 뺑; ) HANGUL SYLLABLE BBAENG BE92;BE92;1108 1162 11BD;BE92;1108 1162 11BD; # (뺒; 뺒; 뺒; 뺒; 뺒; ) HANGUL SYLLABLE BBAEJ BE93;BE93;1108 1162 11BE;BE93;1108 1162 11BE; # (뺓; 뺓; 뺓; 뺓; 뺓; ) HANGUL SYLLABLE BBAEC BE94;BE94;1108 1162 11BF;BE94;1108 1162 11BF; # (뺔; 뺔; 뺔; 뺔; 뺔; ) HANGUL SYLLABLE BBAEK BE95;BE95;1108 1162 11C0;BE95;1108 1162 11C0; # (뺕; 뺕; 뺕; 뺕; 뺕; ) HANGUL SYLLABLE BBAET BE96;BE96;1108 1162 11C1;BE96;1108 1162 11C1; # (뺖; 뺖; 뺖; 뺖; 뺖; ) HANGUL SYLLABLE BBAEP BE97;BE97;1108 1162 11C2;BE97;1108 1162 11C2; # (뺗; 뺗; 뺗; 뺗; 뺗; ) HANGUL SYLLABLE BBAEH BE98;BE98;1108 1163;BE98;1108 1163; # (뺘; 뺘; 뺘; 뺘; 뺘; ) HANGUL SYLLABLE BBYA BE99;BE99;1108 1163 11A8;BE99;1108 1163 11A8; # (뺙; 뺙; 뺙; 뺙; 뺙; ) HANGUL SYLLABLE BBYAG BE9A;BE9A;1108 1163 11A9;BE9A;1108 1163 11A9; # (뺚; 뺚; 뺚; 뺚; 뺚; ) HANGUL SYLLABLE BBYAGG BE9B;BE9B;1108 1163 11AA;BE9B;1108 1163 11AA; # (뺛; 뺛; 뺛; 뺛; 뺛; ) HANGUL SYLLABLE BBYAGS BE9C;BE9C;1108 1163 11AB;BE9C;1108 1163 11AB; # (뺜; 뺜; 뺜; 뺜; 뺜; ) HANGUL SYLLABLE BBYAN BE9D;BE9D;1108 1163 11AC;BE9D;1108 1163 11AC; # (뺝; 뺝; 뺝; 뺝; 뺝; ) HANGUL SYLLABLE BBYANJ BE9E;BE9E;1108 1163 11AD;BE9E;1108 1163 11AD; # (뺞; 뺞; 뺞; 뺞; 뺞; ) HANGUL SYLLABLE BBYANH BE9F;BE9F;1108 1163 11AE;BE9F;1108 1163 11AE; # (뺟; 뺟; 뺟; 뺟; 뺟; ) HANGUL SYLLABLE BBYAD BEA0;BEA0;1108 1163 11AF;BEA0;1108 1163 11AF; # (뺠; 뺠; 뺠; 뺠; 뺠; ) HANGUL SYLLABLE BBYAL BEA1;BEA1;1108 1163 11B0;BEA1;1108 1163 11B0; # (뺡; 뺡; 뺡; 뺡; 뺡; ) HANGUL SYLLABLE BBYALG BEA2;BEA2;1108 1163 11B1;BEA2;1108 1163 11B1; # (뺢; 뺢; 뺢; 뺢; 뺢; ) HANGUL SYLLABLE BBYALM BEA3;BEA3;1108 1163 11B2;BEA3;1108 1163 11B2; # (뺣; 뺣; 뺣; 뺣; 뺣; ) HANGUL SYLLABLE BBYALB BEA4;BEA4;1108 1163 11B3;BEA4;1108 1163 11B3; # (뺤; 뺤; 뺤; 뺤; 뺤; ) HANGUL SYLLABLE BBYALS BEA5;BEA5;1108 1163 11B4;BEA5;1108 1163 11B4; # (뺥; 뺥; 뺥; 뺥; 뺥; ) HANGUL SYLLABLE BBYALT BEA6;BEA6;1108 1163 11B5;BEA6;1108 1163 11B5; # (뺦; 뺦; 뺦; 뺦; 뺦; ) HANGUL SYLLABLE BBYALP BEA7;BEA7;1108 1163 11B6;BEA7;1108 1163 11B6; # (뺧; 뺧; 뺧; 뺧; 뺧; ) HANGUL SYLLABLE BBYALH BEA8;BEA8;1108 1163 11B7;BEA8;1108 1163 11B7; # (뺨; 뺨; 뺨; 뺨; 뺨; ) HANGUL SYLLABLE BBYAM BEA9;BEA9;1108 1163 11B8;BEA9;1108 1163 11B8; # (뺩; 뺩; 뺩; 뺩; 뺩; ) HANGUL SYLLABLE BBYAB BEAA;BEAA;1108 1163 11B9;BEAA;1108 1163 11B9; # (뺪; 뺪; 뺪; 뺪; 뺪; ) HANGUL SYLLABLE BBYABS BEAB;BEAB;1108 1163 11BA;BEAB;1108 1163 11BA; # (뺫; 뺫; 뺫; 뺫; 뺫; ) HANGUL SYLLABLE BBYAS BEAC;BEAC;1108 1163 11BB;BEAC;1108 1163 11BB; # (뺬; 뺬; 뺬; 뺬; 뺬; ) HANGUL SYLLABLE BBYASS BEAD;BEAD;1108 1163 11BC;BEAD;1108 1163 11BC; # (뺭; 뺭; 뺭; 뺭; 뺭; ) HANGUL SYLLABLE BBYANG BEAE;BEAE;1108 1163 11BD;BEAE;1108 1163 11BD; # (뺮; 뺮; 뺮; 뺮; 뺮; ) HANGUL SYLLABLE BBYAJ BEAF;BEAF;1108 1163 11BE;BEAF;1108 1163 11BE; # (뺯; 뺯; 뺯; 뺯; 뺯; ) HANGUL SYLLABLE BBYAC BEB0;BEB0;1108 1163 11BF;BEB0;1108 1163 11BF; # (뺰; 뺰; 뺰; 뺰; 뺰; ) HANGUL SYLLABLE BBYAK BEB1;BEB1;1108 1163 11C0;BEB1;1108 1163 11C0; # (뺱; 뺱; 뺱; 뺱; 뺱; ) HANGUL SYLLABLE BBYAT BEB2;BEB2;1108 1163 11C1;BEB2;1108 1163 11C1; # (뺲; 뺲; 뺲; 뺲; 뺲; ) HANGUL SYLLABLE BBYAP BEB3;BEB3;1108 1163 11C2;BEB3;1108 1163 11C2; # (뺳; 뺳; 뺳; 뺳; 뺳; ) HANGUL SYLLABLE BBYAH BEB4;BEB4;1108 1164;BEB4;1108 1164; # (뺴; 뺴; 뺴; 뺴; 뺴; ) HANGUL SYLLABLE BBYAE BEB5;BEB5;1108 1164 11A8;BEB5;1108 1164 11A8; # (뺵; 뺵; 뺵; 뺵; 뺵; ) HANGUL SYLLABLE BBYAEG BEB6;BEB6;1108 1164 11A9;BEB6;1108 1164 11A9; # (뺶; 뺶; 뺶; 뺶; 뺶; ) HANGUL SYLLABLE BBYAEGG BEB7;BEB7;1108 1164 11AA;BEB7;1108 1164 11AA; # (뺷; 뺷; 뺷; 뺷; 뺷; ) HANGUL SYLLABLE BBYAEGS BEB8;BEB8;1108 1164 11AB;BEB8;1108 1164 11AB; # (뺸; 뺸; 뺸; 뺸; 뺸; ) HANGUL SYLLABLE BBYAEN BEB9;BEB9;1108 1164 11AC;BEB9;1108 1164 11AC; # (뺹; 뺹; 뺹; 뺹; 뺹; ) HANGUL SYLLABLE BBYAENJ BEBA;BEBA;1108 1164 11AD;BEBA;1108 1164 11AD; # (뺺; 뺺; 뺺; 뺺; 뺺; ) HANGUL SYLLABLE BBYAENH BEBB;BEBB;1108 1164 11AE;BEBB;1108 1164 11AE; # (뺻; 뺻; 뺻; 뺻; 뺻; ) HANGUL SYLLABLE BBYAED BEBC;BEBC;1108 1164 11AF;BEBC;1108 1164 11AF; # (뺼; 뺼; 뺼; 뺼; 뺼; ) HANGUL SYLLABLE BBYAEL BEBD;BEBD;1108 1164 11B0;BEBD;1108 1164 11B0; # (뺽; 뺽; 뺽; 뺽; 뺽; ) HANGUL SYLLABLE BBYAELG BEBE;BEBE;1108 1164 11B1;BEBE;1108 1164 11B1; # (뺾; 뺾; 뺾; 뺾; 뺾; ) HANGUL SYLLABLE BBYAELM BEBF;BEBF;1108 1164 11B2;BEBF;1108 1164 11B2; # (뺿; 뺿; 뺿; 뺿; 뺿; ) HANGUL SYLLABLE BBYAELB BEC0;BEC0;1108 1164 11B3;BEC0;1108 1164 11B3; # (뻀; 뻀; 뻀; 뻀; 뻀; ) HANGUL SYLLABLE BBYAELS BEC1;BEC1;1108 1164 11B4;BEC1;1108 1164 11B4; # (뻁; 뻁; 뻁; 뻁; 뻁; ) HANGUL SYLLABLE BBYAELT BEC2;BEC2;1108 1164 11B5;BEC2;1108 1164 11B5; # (뻂; 뻂; 뻂; 뻂; 뻂; ) HANGUL SYLLABLE BBYAELP BEC3;BEC3;1108 1164 11B6;BEC3;1108 1164 11B6; # (뻃; 뻃; 뻃; 뻃; 뻃; ) HANGUL SYLLABLE BBYAELH BEC4;BEC4;1108 1164 11B7;BEC4;1108 1164 11B7; # (뻄; 뻄; 뻄; 뻄; 뻄; ) HANGUL SYLLABLE BBYAEM BEC5;BEC5;1108 1164 11B8;BEC5;1108 1164 11B8; # (뻅; 뻅; 뻅; 뻅; 뻅; ) HANGUL SYLLABLE BBYAEB BEC6;BEC6;1108 1164 11B9;BEC6;1108 1164 11B9; # (뻆; 뻆; 뻆; 뻆; 뻆; ) HANGUL SYLLABLE BBYAEBS BEC7;BEC7;1108 1164 11BA;BEC7;1108 1164 11BA; # (뻇; 뻇; 뻇; 뻇; 뻇; ) HANGUL SYLLABLE BBYAES BEC8;BEC8;1108 1164 11BB;BEC8;1108 1164 11BB; # (뻈; 뻈; 뻈; 뻈; 뻈; ) HANGUL SYLLABLE BBYAESS BEC9;BEC9;1108 1164 11BC;BEC9;1108 1164 11BC; # (뻉; 뻉; 뻉; 뻉; 뻉; ) HANGUL SYLLABLE BBYAENG BECA;BECA;1108 1164 11BD;BECA;1108 1164 11BD; # (뻊; 뻊; 뻊; 뻊; 뻊; ) HANGUL SYLLABLE BBYAEJ BECB;BECB;1108 1164 11BE;BECB;1108 1164 11BE; # (뻋; 뻋; 뻋; 뻋; 뻋; ) HANGUL SYLLABLE BBYAEC BECC;BECC;1108 1164 11BF;BECC;1108 1164 11BF; # (뻌; 뻌; 뻌; 뻌; 뻌; ) HANGUL SYLLABLE BBYAEK BECD;BECD;1108 1164 11C0;BECD;1108 1164 11C0; # (뻍; 뻍; 뻍; 뻍; 뻍; ) HANGUL SYLLABLE BBYAET BECE;BECE;1108 1164 11C1;BECE;1108 1164 11C1; # (뻎; 뻎; 뻎; 뻎; 뻎; ) HANGUL SYLLABLE BBYAEP BECF;BECF;1108 1164 11C2;BECF;1108 1164 11C2; # (뻏; 뻏; 뻏; 뻏; 뻏; ) HANGUL SYLLABLE BBYAEH BED0;BED0;1108 1165;BED0;1108 1165; # (뻐; 뻐; 뻐; 뻐; 뻐; ) HANGUL SYLLABLE BBEO BED1;BED1;1108 1165 11A8;BED1;1108 1165 11A8; # (뻑; 뻑; 뻑; 뻑; 뻑; ) HANGUL SYLLABLE BBEOG BED2;BED2;1108 1165 11A9;BED2;1108 1165 11A9; # (뻒; 뻒; 뻒; 뻒; 뻒; ) HANGUL SYLLABLE BBEOGG BED3;BED3;1108 1165 11AA;BED3;1108 1165 11AA; # (뻓; 뻓; 뻓; 뻓; 뻓; ) HANGUL SYLLABLE BBEOGS BED4;BED4;1108 1165 11AB;BED4;1108 1165 11AB; # (뻔; 뻔; 뻔; 뻔; 뻔; ) HANGUL SYLLABLE BBEON BED5;BED5;1108 1165 11AC;BED5;1108 1165 11AC; # (뻕; 뻕; 뻕; 뻕; 뻕; ) HANGUL SYLLABLE BBEONJ BED6;BED6;1108 1165 11AD;BED6;1108 1165 11AD; # (뻖; 뻖; 뻖; 뻖; 뻖; ) HANGUL SYLLABLE BBEONH BED7;BED7;1108 1165 11AE;BED7;1108 1165 11AE; # (뻗; 뻗; 뻗; 뻗; 뻗; ) HANGUL SYLLABLE BBEOD BED8;BED8;1108 1165 11AF;BED8;1108 1165 11AF; # (뻘; 뻘; 뻘; 뻘; 뻘; ) HANGUL SYLLABLE BBEOL BED9;BED9;1108 1165 11B0;BED9;1108 1165 11B0; # (뻙; 뻙; 뻙; 뻙; 뻙; ) HANGUL SYLLABLE BBEOLG BEDA;BEDA;1108 1165 11B1;BEDA;1108 1165 11B1; # (뻚; 뻚; 뻚; 뻚; 뻚; ) HANGUL SYLLABLE BBEOLM BEDB;BEDB;1108 1165 11B2;BEDB;1108 1165 11B2; # (뻛; 뻛; 뻛; 뻛; 뻛; ) HANGUL SYLLABLE BBEOLB BEDC;BEDC;1108 1165 11B3;BEDC;1108 1165 11B3; # (뻜; 뻜; 뻜; 뻜; 뻜; ) HANGUL SYLLABLE BBEOLS BEDD;BEDD;1108 1165 11B4;BEDD;1108 1165 11B4; # (뻝; 뻝; 뻝; 뻝; 뻝; ) HANGUL SYLLABLE BBEOLT BEDE;BEDE;1108 1165 11B5;BEDE;1108 1165 11B5; # (뻞; 뻞; 뻞; 뻞; 뻞; ) HANGUL SYLLABLE BBEOLP BEDF;BEDF;1108 1165 11B6;BEDF;1108 1165 11B6; # (뻟; 뻟; 뻟; 뻟; 뻟; ) HANGUL SYLLABLE BBEOLH BEE0;BEE0;1108 1165 11B7;BEE0;1108 1165 11B7; # (뻠; 뻠; 뻠; 뻠; 뻠; ) HANGUL SYLLABLE BBEOM BEE1;BEE1;1108 1165 11B8;BEE1;1108 1165 11B8; # (뻡; 뻡; 뻡; 뻡; 뻡; ) HANGUL SYLLABLE BBEOB BEE2;BEE2;1108 1165 11B9;BEE2;1108 1165 11B9; # (뻢; 뻢; 뻢; 뻢; 뻢; ) HANGUL SYLLABLE BBEOBS BEE3;BEE3;1108 1165 11BA;BEE3;1108 1165 11BA; # (뻣; 뻣; 뻣; 뻣; 뻣; ) HANGUL SYLLABLE BBEOS BEE4;BEE4;1108 1165 11BB;BEE4;1108 1165 11BB; # (뻤; 뻤; 뻤; 뻤; 뻤; ) HANGUL SYLLABLE BBEOSS BEE5;BEE5;1108 1165 11BC;BEE5;1108 1165 11BC; # (뻥; 뻥; 뻥; 뻥; 뻥; ) HANGUL SYLLABLE BBEONG BEE6;BEE6;1108 1165 11BD;BEE6;1108 1165 11BD; # (뻦; 뻦; 뻦; 뻦; 뻦; ) HANGUL SYLLABLE BBEOJ BEE7;BEE7;1108 1165 11BE;BEE7;1108 1165 11BE; # (뻧; 뻧; 뻧; 뻧; 뻧; ) HANGUL SYLLABLE BBEOC BEE8;BEE8;1108 1165 11BF;BEE8;1108 1165 11BF; # (뻨; 뻨; 뻨; 뻨; 뻨; ) HANGUL SYLLABLE BBEOK BEE9;BEE9;1108 1165 11C0;BEE9;1108 1165 11C0; # (뻩; 뻩; 뻩; 뻩; 뻩; ) HANGUL SYLLABLE BBEOT BEEA;BEEA;1108 1165 11C1;BEEA;1108 1165 11C1; # (뻪; 뻪; 뻪; 뻪; 뻪; ) HANGUL SYLLABLE BBEOP BEEB;BEEB;1108 1165 11C2;BEEB;1108 1165 11C2; # (뻫; 뻫; 뻫; 뻫; 뻫; ) HANGUL SYLLABLE BBEOH BEEC;BEEC;1108 1166;BEEC;1108 1166; # (뻬; 뻬; 뻬; 뻬; 뻬; ) HANGUL SYLLABLE BBE BEED;BEED;1108 1166 11A8;BEED;1108 1166 11A8; # (뻭; 뻭; 뻭; 뻭; 뻭; ) HANGUL SYLLABLE BBEG BEEE;BEEE;1108 1166 11A9;BEEE;1108 1166 11A9; # (뻮; 뻮; 뻮; 뻮; 뻮; ) HANGUL SYLLABLE BBEGG BEEF;BEEF;1108 1166 11AA;BEEF;1108 1166 11AA; # (뻯; 뻯; 뻯; 뻯; 뻯; ) HANGUL SYLLABLE BBEGS BEF0;BEF0;1108 1166 11AB;BEF0;1108 1166 11AB; # (뻰; 뻰; 뻰; 뻰; 뻰; ) HANGUL SYLLABLE BBEN BEF1;BEF1;1108 1166 11AC;BEF1;1108 1166 11AC; # (뻱; 뻱; 뻱; 뻱; 뻱; ) HANGUL SYLLABLE BBENJ BEF2;BEF2;1108 1166 11AD;BEF2;1108 1166 11AD; # (뻲; 뻲; 뻲; 뻲; 뻲; ) HANGUL SYLLABLE BBENH BEF3;BEF3;1108 1166 11AE;BEF3;1108 1166 11AE; # (뻳; 뻳; 뻳; 뻳; 뻳; ) HANGUL SYLLABLE BBED BEF4;BEF4;1108 1166 11AF;BEF4;1108 1166 11AF; # (뻴; 뻴; 뻴; 뻴; 뻴; ) HANGUL SYLLABLE BBEL BEF5;BEF5;1108 1166 11B0;BEF5;1108 1166 11B0; # (뻵; 뻵; 뻵; 뻵; 뻵; ) HANGUL SYLLABLE BBELG BEF6;BEF6;1108 1166 11B1;BEF6;1108 1166 11B1; # (뻶; 뻶; 뻶; 뻶; 뻶; ) HANGUL SYLLABLE BBELM BEF7;BEF7;1108 1166 11B2;BEF7;1108 1166 11B2; # (뻷; 뻷; 뻷; 뻷; 뻷; ) HANGUL SYLLABLE BBELB BEF8;BEF8;1108 1166 11B3;BEF8;1108 1166 11B3; # (뻸; 뻸; 뻸; 뻸; 뻸; ) HANGUL SYLLABLE BBELS BEF9;BEF9;1108 1166 11B4;BEF9;1108 1166 11B4; # (뻹; 뻹; 뻹; 뻹; 뻹; ) HANGUL SYLLABLE BBELT BEFA;BEFA;1108 1166 11B5;BEFA;1108 1166 11B5; # (뻺; 뻺; 뻺; 뻺; 뻺; ) HANGUL SYLLABLE BBELP BEFB;BEFB;1108 1166 11B6;BEFB;1108 1166 11B6; # (뻻; 뻻; 뻻; 뻻; 뻻; ) HANGUL SYLLABLE BBELH BEFC;BEFC;1108 1166 11B7;BEFC;1108 1166 11B7; # (뻼; 뻼; 뻼; 뻼; 뻼; ) HANGUL SYLLABLE BBEM BEFD;BEFD;1108 1166 11B8;BEFD;1108 1166 11B8; # (뻽; 뻽; 뻽; 뻽; 뻽; ) HANGUL SYLLABLE BBEB BEFE;BEFE;1108 1166 11B9;BEFE;1108 1166 11B9; # (뻾; 뻾; 뻾; 뻾; 뻾; ) HANGUL SYLLABLE BBEBS BEFF;BEFF;1108 1166 11BA;BEFF;1108 1166 11BA; # (뻿; 뻿; 뻿; 뻿; 뻿; ) HANGUL SYLLABLE BBES BF00;BF00;1108 1166 11BB;BF00;1108 1166 11BB; # (뼀; 뼀; 뼀; 뼀; 뼀; ) HANGUL SYLLABLE BBESS BF01;BF01;1108 1166 11BC;BF01;1108 1166 11BC; # (뼁; 뼁; 뼁; 뼁; 뼁; ) HANGUL SYLLABLE BBENG BF02;BF02;1108 1166 11BD;BF02;1108 1166 11BD; # (뼂; 뼂; 뼂; 뼂; 뼂; ) HANGUL SYLLABLE BBEJ BF03;BF03;1108 1166 11BE;BF03;1108 1166 11BE; # (뼃; 뼃; 뼃; 뼃; 뼃; ) HANGUL SYLLABLE BBEC BF04;BF04;1108 1166 11BF;BF04;1108 1166 11BF; # (뼄; 뼄; 뼄; 뼄; 뼄; ) HANGUL SYLLABLE BBEK BF05;BF05;1108 1166 11C0;BF05;1108 1166 11C0; # (뼅; 뼅; 뼅; 뼅; 뼅; ) HANGUL SYLLABLE BBET BF06;BF06;1108 1166 11C1;BF06;1108 1166 11C1; # (뼆; 뼆; 뼆; 뼆; 뼆; ) HANGUL SYLLABLE BBEP BF07;BF07;1108 1166 11C2;BF07;1108 1166 11C2; # (뼇; 뼇; 뼇; 뼇; 뼇; ) HANGUL SYLLABLE BBEH BF08;BF08;1108 1167;BF08;1108 1167; # (뼈; 뼈; 뼈; 뼈; 뼈; ) HANGUL SYLLABLE BBYEO BF09;BF09;1108 1167 11A8;BF09;1108 1167 11A8; # (뼉; 뼉; 뼉; 뼉; 뼉; ) HANGUL SYLLABLE BBYEOG BF0A;BF0A;1108 1167 11A9;BF0A;1108 1167 11A9; # (뼊; 뼊; 뼊; 뼊; 뼊; ) HANGUL SYLLABLE BBYEOGG BF0B;BF0B;1108 1167 11AA;BF0B;1108 1167 11AA; # (뼋; 뼋; 뼋; 뼋; 뼋; ) HANGUL SYLLABLE BBYEOGS BF0C;BF0C;1108 1167 11AB;BF0C;1108 1167 11AB; # (뼌; 뼌; 뼌; 뼌; 뼌; ) HANGUL SYLLABLE BBYEON BF0D;BF0D;1108 1167 11AC;BF0D;1108 1167 11AC; # (뼍; 뼍; 뼍; 뼍; 뼍; ) HANGUL SYLLABLE BBYEONJ BF0E;BF0E;1108 1167 11AD;BF0E;1108 1167 11AD; # (뼎; 뼎; 뼎; 뼎; 뼎; ) HANGUL SYLLABLE BBYEONH BF0F;BF0F;1108 1167 11AE;BF0F;1108 1167 11AE; # (뼏; 뼏; 뼏; 뼏; 뼏; ) HANGUL SYLLABLE BBYEOD BF10;BF10;1108 1167 11AF;BF10;1108 1167 11AF; # (뼐; 뼐; 뼐; 뼐; 뼐; ) HANGUL SYLLABLE BBYEOL BF11;BF11;1108 1167 11B0;BF11;1108 1167 11B0; # (뼑; 뼑; 뼑; 뼑; 뼑; ) HANGUL SYLLABLE BBYEOLG BF12;BF12;1108 1167 11B1;BF12;1108 1167 11B1; # (뼒; 뼒; 뼒; 뼒; 뼒; ) HANGUL SYLLABLE BBYEOLM BF13;BF13;1108 1167 11B2;BF13;1108 1167 11B2; # (뼓; 뼓; 뼓; 뼓; 뼓; ) HANGUL SYLLABLE BBYEOLB BF14;BF14;1108 1167 11B3;BF14;1108 1167 11B3; # (뼔; 뼔; 뼔; 뼔; 뼔; ) HANGUL SYLLABLE BBYEOLS BF15;BF15;1108 1167 11B4;BF15;1108 1167 11B4; # (뼕; 뼕; 뼕; 뼕; 뼕; ) HANGUL SYLLABLE BBYEOLT BF16;BF16;1108 1167 11B5;BF16;1108 1167 11B5; # (뼖; 뼖; 뼖; 뼖; 뼖; ) HANGUL SYLLABLE BBYEOLP BF17;BF17;1108 1167 11B6;BF17;1108 1167 11B6; # (뼗; 뼗; 뼗; 뼗; 뼗; ) HANGUL SYLLABLE BBYEOLH BF18;BF18;1108 1167 11B7;BF18;1108 1167 11B7; # (뼘; 뼘; 뼘; 뼘; 뼘; ) HANGUL SYLLABLE BBYEOM BF19;BF19;1108 1167 11B8;BF19;1108 1167 11B8; # (뼙; 뼙; 뼙; 뼙; 뼙; ) HANGUL SYLLABLE BBYEOB BF1A;BF1A;1108 1167 11B9;BF1A;1108 1167 11B9; # (뼚; 뼚; 뼚; 뼚; 뼚; ) HANGUL SYLLABLE BBYEOBS BF1B;BF1B;1108 1167 11BA;BF1B;1108 1167 11BA; # (뼛; 뼛; 뼛; 뼛; 뼛; ) HANGUL SYLLABLE BBYEOS BF1C;BF1C;1108 1167 11BB;BF1C;1108 1167 11BB; # (뼜; 뼜; 뼜; 뼜; 뼜; ) HANGUL SYLLABLE BBYEOSS BF1D;BF1D;1108 1167 11BC;BF1D;1108 1167 11BC; # (뼝; 뼝; 뼝; 뼝; 뼝; ) HANGUL SYLLABLE BBYEONG BF1E;BF1E;1108 1167 11BD;BF1E;1108 1167 11BD; # (뼞; 뼞; 뼞; 뼞; 뼞; ) HANGUL SYLLABLE BBYEOJ BF1F;BF1F;1108 1167 11BE;BF1F;1108 1167 11BE; # (뼟; 뼟; 뼟; 뼟; 뼟; ) HANGUL SYLLABLE BBYEOC BF20;BF20;1108 1167 11BF;BF20;1108 1167 11BF; # (뼠; 뼠; 뼠; 뼠; 뼠; ) HANGUL SYLLABLE BBYEOK BF21;BF21;1108 1167 11C0;BF21;1108 1167 11C0; # (뼡; 뼡; 뼡; 뼡; 뼡; ) HANGUL SYLLABLE BBYEOT BF22;BF22;1108 1167 11C1;BF22;1108 1167 11C1; # (뼢; 뼢; 뼢; 뼢; 뼢; ) HANGUL SYLLABLE BBYEOP BF23;BF23;1108 1167 11C2;BF23;1108 1167 11C2; # (뼣; 뼣; 뼣; 뼣; 뼣; ) HANGUL SYLLABLE BBYEOH BF24;BF24;1108 1168;BF24;1108 1168; # (뼤; 뼤; 뼤; 뼤; 뼤; ) HANGUL SYLLABLE BBYE BF25;BF25;1108 1168 11A8;BF25;1108 1168 11A8; # (뼥; 뼥; 뼥; 뼥; 뼥; ) HANGUL SYLLABLE BBYEG BF26;BF26;1108 1168 11A9;BF26;1108 1168 11A9; # (뼦; 뼦; 뼦; 뼦; 뼦; ) HANGUL SYLLABLE BBYEGG BF27;BF27;1108 1168 11AA;BF27;1108 1168 11AA; # (뼧; 뼧; 뼧; 뼧; 뼧; ) HANGUL SYLLABLE BBYEGS BF28;BF28;1108 1168 11AB;BF28;1108 1168 11AB; # (뼨; 뼨; 뼨; 뼨; 뼨; ) HANGUL SYLLABLE BBYEN BF29;BF29;1108 1168 11AC;BF29;1108 1168 11AC; # (뼩; 뼩; 뼩; 뼩; 뼩; ) HANGUL SYLLABLE BBYENJ BF2A;BF2A;1108 1168 11AD;BF2A;1108 1168 11AD; # (뼪; 뼪; 뼪; 뼪; 뼪; ) HANGUL SYLLABLE BBYENH BF2B;BF2B;1108 1168 11AE;BF2B;1108 1168 11AE; # (뼫; 뼫; 뼫; 뼫; 뼫; ) HANGUL SYLLABLE BBYED BF2C;BF2C;1108 1168 11AF;BF2C;1108 1168 11AF; # (뼬; 뼬; 뼬; 뼬; 뼬; ) HANGUL SYLLABLE BBYEL BF2D;BF2D;1108 1168 11B0;BF2D;1108 1168 11B0; # (뼭; 뼭; 뼭; 뼭; 뼭; ) HANGUL SYLLABLE BBYELG BF2E;BF2E;1108 1168 11B1;BF2E;1108 1168 11B1; # (뼮; 뼮; 뼮; 뼮; 뼮; ) HANGUL SYLLABLE BBYELM BF2F;BF2F;1108 1168 11B2;BF2F;1108 1168 11B2; # (뼯; 뼯; 뼯; 뼯; 뼯; ) HANGUL SYLLABLE BBYELB BF30;BF30;1108 1168 11B3;BF30;1108 1168 11B3; # (뼰; 뼰; 뼰; 뼰; 뼰; ) HANGUL SYLLABLE BBYELS BF31;BF31;1108 1168 11B4;BF31;1108 1168 11B4; # (뼱; 뼱; 뼱; 뼱; 뼱; ) HANGUL SYLLABLE BBYELT BF32;BF32;1108 1168 11B5;BF32;1108 1168 11B5; # (뼲; 뼲; 뼲; 뼲; 뼲; ) HANGUL SYLLABLE BBYELP BF33;BF33;1108 1168 11B6;BF33;1108 1168 11B6; # (뼳; 뼳; 뼳; 뼳; 뼳; ) HANGUL SYLLABLE BBYELH BF34;BF34;1108 1168 11B7;BF34;1108 1168 11B7; # (뼴; 뼴; 뼴; 뼴; 뼴; ) HANGUL SYLLABLE BBYEM BF35;BF35;1108 1168 11B8;BF35;1108 1168 11B8; # (뼵; 뼵; 뼵; 뼵; 뼵; ) HANGUL SYLLABLE BBYEB BF36;BF36;1108 1168 11B9;BF36;1108 1168 11B9; # (뼶; 뼶; 뼶; 뼶; 뼶; ) HANGUL SYLLABLE BBYEBS BF37;BF37;1108 1168 11BA;BF37;1108 1168 11BA; # (뼷; 뼷; 뼷; 뼷; 뼷; ) HANGUL SYLLABLE BBYES BF38;BF38;1108 1168 11BB;BF38;1108 1168 11BB; # (뼸; 뼸; 뼸; 뼸; 뼸; ) HANGUL SYLLABLE BBYESS BF39;BF39;1108 1168 11BC;BF39;1108 1168 11BC; # (뼹; 뼹; 뼹; 뼹; 뼹; ) HANGUL SYLLABLE BBYENG BF3A;BF3A;1108 1168 11BD;BF3A;1108 1168 11BD; # (뼺; 뼺; 뼺; 뼺; 뼺; ) HANGUL SYLLABLE BBYEJ BF3B;BF3B;1108 1168 11BE;BF3B;1108 1168 11BE; # (뼻; 뼻; 뼻; 뼻; 뼻; ) HANGUL SYLLABLE BBYEC BF3C;BF3C;1108 1168 11BF;BF3C;1108 1168 11BF; # (뼼; 뼼; 뼼; 뼼; 뼼; ) HANGUL SYLLABLE BBYEK BF3D;BF3D;1108 1168 11C0;BF3D;1108 1168 11C0; # (뼽; 뼽; 뼽; 뼽; 뼽; ) HANGUL SYLLABLE BBYET BF3E;BF3E;1108 1168 11C1;BF3E;1108 1168 11C1; # (뼾; 뼾; 뼾; 뼾; 뼾; ) HANGUL SYLLABLE BBYEP BF3F;BF3F;1108 1168 11C2;BF3F;1108 1168 11C2; # (뼿; 뼿; 뼿; 뼿; 뼿; ) HANGUL SYLLABLE BBYEH BF40;BF40;1108 1169;BF40;1108 1169; # (뽀; 뽀; 뽀; 뽀; 뽀; ) HANGUL SYLLABLE BBO BF41;BF41;1108 1169 11A8;BF41;1108 1169 11A8; # (뽁; 뽁; 뽁; 뽁; 뽁; ) HANGUL SYLLABLE BBOG BF42;BF42;1108 1169 11A9;BF42;1108 1169 11A9; # (뽂; 뽂; 뽂; 뽂; 뽂; ) HANGUL SYLLABLE BBOGG BF43;BF43;1108 1169 11AA;BF43;1108 1169 11AA; # (뽃; 뽃; 뽃; 뽃; 뽃; ) HANGUL SYLLABLE BBOGS BF44;BF44;1108 1169 11AB;BF44;1108 1169 11AB; # (뽄; 뽄; 뽄; 뽄; 뽄; ) HANGUL SYLLABLE BBON BF45;BF45;1108 1169 11AC;BF45;1108 1169 11AC; # (뽅; 뽅; 뽅; 뽅; 뽅; ) HANGUL SYLLABLE BBONJ BF46;BF46;1108 1169 11AD;BF46;1108 1169 11AD; # (뽆; 뽆; 뽆; 뽆; 뽆; ) HANGUL SYLLABLE BBONH BF47;BF47;1108 1169 11AE;BF47;1108 1169 11AE; # (뽇; 뽇; 뽇; 뽇; 뽇; ) HANGUL SYLLABLE BBOD BF48;BF48;1108 1169 11AF;BF48;1108 1169 11AF; # (뽈; 뽈; 뽈; 뽈; 뽈; ) HANGUL SYLLABLE BBOL BF49;BF49;1108 1169 11B0;BF49;1108 1169 11B0; # (뽉; 뽉; 뽉; 뽉; 뽉; ) HANGUL SYLLABLE BBOLG BF4A;BF4A;1108 1169 11B1;BF4A;1108 1169 11B1; # (뽊; 뽊; 뽊; 뽊; 뽊; ) HANGUL SYLLABLE BBOLM BF4B;BF4B;1108 1169 11B2;BF4B;1108 1169 11B2; # (뽋; 뽋; 뽋; 뽋; 뽋; ) HANGUL SYLLABLE BBOLB BF4C;BF4C;1108 1169 11B3;BF4C;1108 1169 11B3; # (뽌; 뽌; 뽌; 뽌; 뽌; ) HANGUL SYLLABLE BBOLS BF4D;BF4D;1108 1169 11B4;BF4D;1108 1169 11B4; # (뽍; 뽍; 뽍; 뽍; 뽍; ) HANGUL SYLLABLE BBOLT BF4E;BF4E;1108 1169 11B5;BF4E;1108 1169 11B5; # (뽎; 뽎; 뽎; 뽎; 뽎; ) HANGUL SYLLABLE BBOLP BF4F;BF4F;1108 1169 11B6;BF4F;1108 1169 11B6; # (뽏; 뽏; 뽏; 뽏; 뽏; ) HANGUL SYLLABLE BBOLH BF50;BF50;1108 1169 11B7;BF50;1108 1169 11B7; # (뽐; 뽐; 뽐; 뽐; 뽐; ) HANGUL SYLLABLE BBOM BF51;BF51;1108 1169 11B8;BF51;1108 1169 11B8; # (뽑; 뽑; 뽑; 뽑; 뽑; ) HANGUL SYLLABLE BBOB BF52;BF52;1108 1169 11B9;BF52;1108 1169 11B9; # (뽒; 뽒; 뽒; 뽒; 뽒; ) HANGUL SYLLABLE BBOBS BF53;BF53;1108 1169 11BA;BF53;1108 1169 11BA; # (뽓; 뽓; 뽓; 뽓; 뽓; ) HANGUL SYLLABLE BBOS BF54;BF54;1108 1169 11BB;BF54;1108 1169 11BB; # (뽔; 뽔; 뽔; 뽔; 뽔; ) HANGUL SYLLABLE BBOSS BF55;BF55;1108 1169 11BC;BF55;1108 1169 11BC; # (뽕; 뽕; 뽕; 뽕; 뽕; ) HANGUL SYLLABLE BBONG BF56;BF56;1108 1169 11BD;BF56;1108 1169 11BD; # (뽖; 뽖; 뽖; 뽖; 뽖; ) HANGUL SYLLABLE BBOJ BF57;BF57;1108 1169 11BE;BF57;1108 1169 11BE; # (뽗; 뽗; 뽗; 뽗; 뽗; ) HANGUL SYLLABLE BBOC BF58;BF58;1108 1169 11BF;BF58;1108 1169 11BF; # (뽘; 뽘; 뽘; 뽘; 뽘; ) HANGUL SYLLABLE BBOK BF59;BF59;1108 1169 11C0;BF59;1108 1169 11C0; # (뽙; 뽙; 뽙; 뽙; 뽙; ) HANGUL SYLLABLE BBOT BF5A;BF5A;1108 1169 11C1;BF5A;1108 1169 11C1; # (뽚; 뽚; 뽚; 뽚; 뽚; ) HANGUL SYLLABLE BBOP BF5B;BF5B;1108 1169 11C2;BF5B;1108 1169 11C2; # (뽛; 뽛; 뽛; 뽛; 뽛; ) HANGUL SYLLABLE BBOH BF5C;BF5C;1108 116A;BF5C;1108 116A; # (뽜; 뽜; 뽜; 뽜; 뽜; ) HANGUL SYLLABLE BBWA BF5D;BF5D;1108 116A 11A8;BF5D;1108 116A 11A8; # (뽝; 뽝; 뽝; 뽝; 뽝; ) HANGUL SYLLABLE BBWAG BF5E;BF5E;1108 116A 11A9;BF5E;1108 116A 11A9; # (뽞; 뽞; 뽞; 뽞; 뽞; ) HANGUL SYLLABLE BBWAGG BF5F;BF5F;1108 116A 11AA;BF5F;1108 116A 11AA; # (뽟; 뽟; 뽟; 뽟; 뽟; ) HANGUL SYLLABLE BBWAGS BF60;BF60;1108 116A 11AB;BF60;1108 116A 11AB; # (뽠; 뽠; 뽠; 뽠; 뽠; ) HANGUL SYLLABLE BBWAN BF61;BF61;1108 116A 11AC;BF61;1108 116A 11AC; # (뽡; 뽡; 뽡; 뽡; 뽡; ) HANGUL SYLLABLE BBWANJ BF62;BF62;1108 116A 11AD;BF62;1108 116A 11AD; # (뽢; 뽢; 뽢; 뽢; 뽢; ) HANGUL SYLLABLE BBWANH BF63;BF63;1108 116A 11AE;BF63;1108 116A 11AE; # (뽣; 뽣; 뽣; 뽣; 뽣; ) HANGUL SYLLABLE BBWAD BF64;BF64;1108 116A 11AF;BF64;1108 116A 11AF; # (뽤; 뽤; 뽤; 뽤; 뽤; ) HANGUL SYLLABLE BBWAL BF65;BF65;1108 116A 11B0;BF65;1108 116A 11B0; # (뽥; 뽥; 뽥; 뽥; 뽥; ) HANGUL SYLLABLE BBWALG BF66;BF66;1108 116A 11B1;BF66;1108 116A 11B1; # (뽦; 뽦; 뽦; 뽦; 뽦; ) HANGUL SYLLABLE BBWALM BF67;BF67;1108 116A 11B2;BF67;1108 116A 11B2; # (뽧; 뽧; 뽧; 뽧; 뽧; ) HANGUL SYLLABLE BBWALB BF68;BF68;1108 116A 11B3;BF68;1108 116A 11B3; # (뽨; 뽨; 뽨; 뽨; 뽨; ) HANGUL SYLLABLE BBWALS BF69;BF69;1108 116A 11B4;BF69;1108 116A 11B4; # (뽩; 뽩; 뽩; 뽩; 뽩; ) HANGUL SYLLABLE BBWALT BF6A;BF6A;1108 116A 11B5;BF6A;1108 116A 11B5; # (뽪; 뽪; 뽪; 뽪; 뽪; ) HANGUL SYLLABLE BBWALP BF6B;BF6B;1108 116A 11B6;BF6B;1108 116A 11B6; # (뽫; 뽫; 뽫; 뽫; 뽫; ) HANGUL SYLLABLE BBWALH BF6C;BF6C;1108 116A 11B7;BF6C;1108 116A 11B7; # (뽬; 뽬; 뽬; 뽬; 뽬; ) HANGUL SYLLABLE BBWAM BF6D;BF6D;1108 116A 11B8;BF6D;1108 116A 11B8; # (뽭; 뽭; 뽭; 뽭; 뽭; ) HANGUL SYLLABLE BBWAB BF6E;BF6E;1108 116A 11B9;BF6E;1108 116A 11B9; # (뽮; 뽮; 뽮; 뽮; 뽮; ) HANGUL SYLLABLE BBWABS BF6F;BF6F;1108 116A 11BA;BF6F;1108 116A 11BA; # (뽯; 뽯; 뽯; 뽯; 뽯; ) HANGUL SYLLABLE BBWAS BF70;BF70;1108 116A 11BB;BF70;1108 116A 11BB; # (뽰; 뽰; 뽰; 뽰; 뽰; ) HANGUL SYLLABLE BBWASS BF71;BF71;1108 116A 11BC;BF71;1108 116A 11BC; # (뽱; 뽱; 뽱; 뽱; 뽱; ) HANGUL SYLLABLE BBWANG BF72;BF72;1108 116A 11BD;BF72;1108 116A 11BD; # (뽲; 뽲; 뽲; 뽲; 뽲; ) HANGUL SYLLABLE BBWAJ BF73;BF73;1108 116A 11BE;BF73;1108 116A 11BE; # (뽳; 뽳; 뽳; 뽳; 뽳; ) HANGUL SYLLABLE BBWAC BF74;BF74;1108 116A 11BF;BF74;1108 116A 11BF; # (뽴; 뽴; 뽴; 뽴; 뽴; ) HANGUL SYLLABLE BBWAK BF75;BF75;1108 116A 11C0;BF75;1108 116A 11C0; # (뽵; 뽵; 뽵; 뽵; 뽵; ) HANGUL SYLLABLE BBWAT BF76;BF76;1108 116A 11C1;BF76;1108 116A 11C1; # (뽶; 뽶; 뽶; 뽶; 뽶; ) HANGUL SYLLABLE BBWAP BF77;BF77;1108 116A 11C2;BF77;1108 116A 11C2; # (뽷; 뽷; 뽷; 뽷; 뽷; ) HANGUL SYLLABLE BBWAH BF78;BF78;1108 116B;BF78;1108 116B; # (뽸; 뽸; 뽸; 뽸; 뽸; ) HANGUL SYLLABLE BBWAE BF79;BF79;1108 116B 11A8;BF79;1108 116B 11A8; # (뽹; 뽹; 뽹; 뽹; 뽹; ) HANGUL SYLLABLE BBWAEG BF7A;BF7A;1108 116B 11A9;BF7A;1108 116B 11A9; # (뽺; 뽺; 뽺; 뽺; 뽺; ) HANGUL SYLLABLE BBWAEGG BF7B;BF7B;1108 116B 11AA;BF7B;1108 116B 11AA; # (뽻; 뽻; 뽻; 뽻; 뽻; ) HANGUL SYLLABLE BBWAEGS BF7C;BF7C;1108 116B 11AB;BF7C;1108 116B 11AB; # (뽼; 뽼; 뽼; 뽼; 뽼; ) HANGUL SYLLABLE BBWAEN BF7D;BF7D;1108 116B 11AC;BF7D;1108 116B 11AC; # (뽽; 뽽; 뽽; 뽽; 뽽; ) HANGUL SYLLABLE BBWAENJ BF7E;BF7E;1108 116B 11AD;BF7E;1108 116B 11AD; # (뽾; 뽾; 뽾; 뽾; 뽾; ) HANGUL SYLLABLE BBWAENH BF7F;BF7F;1108 116B 11AE;BF7F;1108 116B 11AE; # (뽿; 뽿; 뽿; 뽿; 뽿; ) HANGUL SYLLABLE BBWAED BF80;BF80;1108 116B 11AF;BF80;1108 116B 11AF; # (뾀; 뾀; 뾀; 뾀; 뾀; ) HANGUL SYLLABLE BBWAEL BF81;BF81;1108 116B 11B0;BF81;1108 116B 11B0; # (뾁; 뾁; 뾁; 뾁; 뾁; ) HANGUL SYLLABLE BBWAELG BF82;BF82;1108 116B 11B1;BF82;1108 116B 11B1; # (뾂; 뾂; 뾂; 뾂; 뾂; ) HANGUL SYLLABLE BBWAELM BF83;BF83;1108 116B 11B2;BF83;1108 116B 11B2; # (뾃; 뾃; 뾃; 뾃; 뾃; ) HANGUL SYLLABLE BBWAELB BF84;BF84;1108 116B 11B3;BF84;1108 116B 11B3; # (뾄; 뾄; 뾄; 뾄; 뾄; ) HANGUL SYLLABLE BBWAELS BF85;BF85;1108 116B 11B4;BF85;1108 116B 11B4; # (뾅; 뾅; 뾅; 뾅; 뾅; ) HANGUL SYLLABLE BBWAELT BF86;BF86;1108 116B 11B5;BF86;1108 116B 11B5; # (뾆; 뾆; 뾆; 뾆; 뾆; ) HANGUL SYLLABLE BBWAELP BF87;BF87;1108 116B 11B6;BF87;1108 116B 11B6; # (뾇; 뾇; 뾇; 뾇; 뾇; ) HANGUL SYLLABLE BBWAELH BF88;BF88;1108 116B 11B7;BF88;1108 116B 11B7; # (뾈; 뾈; 뾈; 뾈; 뾈; ) HANGUL SYLLABLE BBWAEM BF89;BF89;1108 116B 11B8;BF89;1108 116B 11B8; # (뾉; 뾉; 뾉; 뾉; 뾉; ) HANGUL SYLLABLE BBWAEB BF8A;BF8A;1108 116B 11B9;BF8A;1108 116B 11B9; # (뾊; 뾊; 뾊; 뾊; 뾊; ) HANGUL SYLLABLE BBWAEBS BF8B;BF8B;1108 116B 11BA;BF8B;1108 116B 11BA; # (뾋; 뾋; 뾋; 뾋; 뾋; ) HANGUL SYLLABLE BBWAES BF8C;BF8C;1108 116B 11BB;BF8C;1108 116B 11BB; # (뾌; 뾌; 뾌; 뾌; 뾌; ) HANGUL SYLLABLE BBWAESS BF8D;BF8D;1108 116B 11BC;BF8D;1108 116B 11BC; # (뾍; 뾍; 뾍; 뾍; 뾍; ) HANGUL SYLLABLE BBWAENG BF8E;BF8E;1108 116B 11BD;BF8E;1108 116B 11BD; # (뾎; 뾎; 뾎; 뾎; 뾎; ) HANGUL SYLLABLE BBWAEJ BF8F;BF8F;1108 116B 11BE;BF8F;1108 116B 11BE; # (뾏; 뾏; 뾏; 뾏; 뾏; ) HANGUL SYLLABLE BBWAEC BF90;BF90;1108 116B 11BF;BF90;1108 116B 11BF; # (뾐; 뾐; 뾐; 뾐; 뾐; ) HANGUL SYLLABLE BBWAEK BF91;BF91;1108 116B 11C0;BF91;1108 116B 11C0; # (뾑; 뾑; 뾑; 뾑; 뾑; ) HANGUL SYLLABLE BBWAET BF92;BF92;1108 116B 11C1;BF92;1108 116B 11C1; # (뾒; 뾒; 뾒; 뾒; 뾒; ) HANGUL SYLLABLE BBWAEP BF93;BF93;1108 116B 11C2;BF93;1108 116B 11C2; # (뾓; 뾓; 뾓; 뾓; 뾓; ) HANGUL SYLLABLE BBWAEH BF94;BF94;1108 116C;BF94;1108 116C; # (뾔; 뾔; 뾔; 뾔; 뾔; ) HANGUL SYLLABLE BBOE BF95;BF95;1108 116C 11A8;BF95;1108 116C 11A8; # (뾕; 뾕; 뾕; 뾕; 뾕; ) HANGUL SYLLABLE BBOEG BF96;BF96;1108 116C 11A9;BF96;1108 116C 11A9; # (뾖; 뾖; 뾖; 뾖; 뾖; ) HANGUL SYLLABLE BBOEGG BF97;BF97;1108 116C 11AA;BF97;1108 116C 11AA; # (뾗; 뾗; 뾗; 뾗; 뾗; ) HANGUL SYLLABLE BBOEGS BF98;BF98;1108 116C 11AB;BF98;1108 116C 11AB; # (뾘; 뾘; 뾘; 뾘; 뾘; ) HANGUL SYLLABLE BBOEN BF99;BF99;1108 116C 11AC;BF99;1108 116C 11AC; # (뾙; 뾙; 뾙; 뾙; 뾙; ) HANGUL SYLLABLE BBOENJ BF9A;BF9A;1108 116C 11AD;BF9A;1108 116C 11AD; # (뾚; 뾚; 뾚; 뾚; 뾚; ) HANGUL SYLLABLE BBOENH BF9B;BF9B;1108 116C 11AE;BF9B;1108 116C 11AE; # (뾛; 뾛; 뾛; 뾛; 뾛; ) HANGUL SYLLABLE BBOED BF9C;BF9C;1108 116C 11AF;BF9C;1108 116C 11AF; # (뾜; 뾜; 뾜; 뾜; 뾜; ) HANGUL SYLLABLE BBOEL BF9D;BF9D;1108 116C 11B0;BF9D;1108 116C 11B0; # (뾝; 뾝; 뾝; 뾝; 뾝; ) HANGUL SYLLABLE BBOELG BF9E;BF9E;1108 116C 11B1;BF9E;1108 116C 11B1; # (뾞; 뾞; 뾞; 뾞; 뾞; ) HANGUL SYLLABLE BBOELM BF9F;BF9F;1108 116C 11B2;BF9F;1108 116C 11B2; # (뾟; 뾟; 뾟; 뾟; 뾟; ) HANGUL SYLLABLE BBOELB BFA0;BFA0;1108 116C 11B3;BFA0;1108 116C 11B3; # (뾠; 뾠; 뾠; 뾠; 뾠; ) HANGUL SYLLABLE BBOELS BFA1;BFA1;1108 116C 11B4;BFA1;1108 116C 11B4; # (뾡; 뾡; 뾡; 뾡; 뾡; ) HANGUL SYLLABLE BBOELT BFA2;BFA2;1108 116C 11B5;BFA2;1108 116C 11B5; # (뾢; 뾢; 뾢; 뾢; 뾢; ) HANGUL SYLLABLE BBOELP BFA3;BFA3;1108 116C 11B6;BFA3;1108 116C 11B6; # (뾣; 뾣; 뾣; 뾣; 뾣; ) HANGUL SYLLABLE BBOELH BFA4;BFA4;1108 116C 11B7;BFA4;1108 116C 11B7; # (뾤; 뾤; 뾤; 뾤; 뾤; ) HANGUL SYLLABLE BBOEM BFA5;BFA5;1108 116C 11B8;BFA5;1108 116C 11B8; # (뾥; 뾥; 뾥; 뾥; 뾥; ) HANGUL SYLLABLE BBOEB BFA6;BFA6;1108 116C 11B9;BFA6;1108 116C 11B9; # (뾦; 뾦; 뾦; 뾦; 뾦; ) HANGUL SYLLABLE BBOEBS BFA7;BFA7;1108 116C 11BA;BFA7;1108 116C 11BA; # (뾧; 뾧; 뾧; 뾧; 뾧; ) HANGUL SYLLABLE BBOES BFA8;BFA8;1108 116C 11BB;BFA8;1108 116C 11BB; # (뾨; 뾨; 뾨; 뾨; 뾨; ) HANGUL SYLLABLE BBOESS BFA9;BFA9;1108 116C 11BC;BFA9;1108 116C 11BC; # (뾩; 뾩; 뾩; 뾩; 뾩; ) HANGUL SYLLABLE BBOENG BFAA;BFAA;1108 116C 11BD;BFAA;1108 116C 11BD; # (뾪; 뾪; 뾪; 뾪; 뾪; ) HANGUL SYLLABLE BBOEJ BFAB;BFAB;1108 116C 11BE;BFAB;1108 116C 11BE; # (뾫; 뾫; 뾫; 뾫; 뾫; ) HANGUL SYLLABLE BBOEC BFAC;BFAC;1108 116C 11BF;BFAC;1108 116C 11BF; # (뾬; 뾬; 뾬; 뾬; 뾬; ) HANGUL SYLLABLE BBOEK BFAD;BFAD;1108 116C 11C0;BFAD;1108 116C 11C0; # (뾭; 뾭; 뾭; 뾭; 뾭; ) HANGUL SYLLABLE BBOET BFAE;BFAE;1108 116C 11C1;BFAE;1108 116C 11C1; # (뾮; 뾮; 뾮; 뾮; 뾮; ) HANGUL SYLLABLE BBOEP BFAF;BFAF;1108 116C 11C2;BFAF;1108 116C 11C2; # (뾯; 뾯; 뾯; 뾯; 뾯; ) HANGUL SYLLABLE BBOEH BFB0;BFB0;1108 116D;BFB0;1108 116D; # (뾰; 뾰; 뾰; 뾰; 뾰; ) HANGUL SYLLABLE BBYO BFB1;BFB1;1108 116D 11A8;BFB1;1108 116D 11A8; # (뾱; 뾱; 뾱; 뾱; 뾱; ) HANGUL SYLLABLE BBYOG BFB2;BFB2;1108 116D 11A9;BFB2;1108 116D 11A9; # (뾲; 뾲; 뾲; 뾲; 뾲; ) HANGUL SYLLABLE BBYOGG BFB3;BFB3;1108 116D 11AA;BFB3;1108 116D 11AA; # (뾳; 뾳; 뾳; 뾳; 뾳; ) HANGUL SYLLABLE BBYOGS BFB4;BFB4;1108 116D 11AB;BFB4;1108 116D 11AB; # (뾴; 뾴; 뾴; 뾴; 뾴; ) HANGUL SYLLABLE BBYON BFB5;BFB5;1108 116D 11AC;BFB5;1108 116D 11AC; # (뾵; 뾵; 뾵; 뾵; 뾵; ) HANGUL SYLLABLE BBYONJ BFB6;BFB6;1108 116D 11AD;BFB6;1108 116D 11AD; # (뾶; 뾶; 뾶; 뾶; 뾶; ) HANGUL SYLLABLE BBYONH BFB7;BFB7;1108 116D 11AE;BFB7;1108 116D 11AE; # (뾷; 뾷; 뾷; 뾷; 뾷; ) HANGUL SYLLABLE BBYOD BFB8;BFB8;1108 116D 11AF;BFB8;1108 116D 11AF; # (뾸; 뾸; 뾸; 뾸; 뾸; ) HANGUL SYLLABLE BBYOL BFB9;BFB9;1108 116D 11B0;BFB9;1108 116D 11B0; # (뾹; 뾹; 뾹; 뾹; 뾹; ) HANGUL SYLLABLE BBYOLG BFBA;BFBA;1108 116D 11B1;BFBA;1108 116D 11B1; # (뾺; 뾺; 뾺; 뾺; 뾺; ) HANGUL SYLLABLE BBYOLM BFBB;BFBB;1108 116D 11B2;BFBB;1108 116D 11B2; # (뾻; 뾻; 뾻; 뾻; 뾻; ) HANGUL SYLLABLE BBYOLB BFBC;BFBC;1108 116D 11B3;BFBC;1108 116D 11B3; # (뾼; 뾼; 뾼; 뾼; 뾼; ) HANGUL SYLLABLE BBYOLS BFBD;BFBD;1108 116D 11B4;BFBD;1108 116D 11B4; # (뾽; 뾽; 뾽; 뾽; 뾽; ) HANGUL SYLLABLE BBYOLT BFBE;BFBE;1108 116D 11B5;BFBE;1108 116D 11B5; # (뾾; 뾾; 뾾; 뾾; 뾾; ) HANGUL SYLLABLE BBYOLP BFBF;BFBF;1108 116D 11B6;BFBF;1108 116D 11B6; # (뾿; 뾿; 뾿; 뾿; 뾿; ) HANGUL SYLLABLE BBYOLH BFC0;BFC0;1108 116D 11B7;BFC0;1108 116D 11B7; # (뿀; 뿀; 뿀; 뿀; 뿀; ) HANGUL SYLLABLE BBYOM BFC1;BFC1;1108 116D 11B8;BFC1;1108 116D 11B8; # (뿁; 뿁; 뿁; 뿁; 뿁; ) HANGUL SYLLABLE BBYOB BFC2;BFC2;1108 116D 11B9;BFC2;1108 116D 11B9; # (뿂; 뿂; 뿂; 뿂; 뿂; ) HANGUL SYLLABLE BBYOBS BFC3;BFC3;1108 116D 11BA;BFC3;1108 116D 11BA; # (뿃; 뿃; 뿃; 뿃; 뿃; ) HANGUL SYLLABLE BBYOS BFC4;BFC4;1108 116D 11BB;BFC4;1108 116D 11BB; # (뿄; 뿄; 뿄; 뿄; 뿄; ) HANGUL SYLLABLE BBYOSS BFC5;BFC5;1108 116D 11BC;BFC5;1108 116D 11BC; # (뿅; 뿅; 뿅; 뿅; 뿅; ) HANGUL SYLLABLE BBYONG BFC6;BFC6;1108 116D 11BD;BFC6;1108 116D 11BD; # (뿆; 뿆; 뿆; 뿆; 뿆; ) HANGUL SYLLABLE BBYOJ BFC7;BFC7;1108 116D 11BE;BFC7;1108 116D 11BE; # (뿇; 뿇; 뿇; 뿇; 뿇; ) HANGUL SYLLABLE BBYOC BFC8;BFC8;1108 116D 11BF;BFC8;1108 116D 11BF; # (뿈; 뿈; 뿈; 뿈; 뿈; ) HANGUL SYLLABLE BBYOK BFC9;BFC9;1108 116D 11C0;BFC9;1108 116D 11C0; # (뿉; 뿉; 뿉; 뿉; 뿉; ) HANGUL SYLLABLE BBYOT BFCA;BFCA;1108 116D 11C1;BFCA;1108 116D 11C1; # (뿊; 뿊; 뿊; 뿊; 뿊; ) HANGUL SYLLABLE BBYOP BFCB;BFCB;1108 116D 11C2;BFCB;1108 116D 11C2; # (뿋; 뿋; 뿋; 뿋; 뿋; ) HANGUL SYLLABLE BBYOH BFCC;BFCC;1108 116E;BFCC;1108 116E; # (뿌; 뿌; 뿌; 뿌; 뿌; ) HANGUL SYLLABLE BBU BFCD;BFCD;1108 116E 11A8;BFCD;1108 116E 11A8; # (뿍; 뿍; 뿍; 뿍; 뿍; ) HANGUL SYLLABLE BBUG BFCE;BFCE;1108 116E 11A9;BFCE;1108 116E 11A9; # (뿎; 뿎; 뿎; 뿎; 뿎; ) HANGUL SYLLABLE BBUGG BFCF;BFCF;1108 116E 11AA;BFCF;1108 116E 11AA; # (뿏; 뿏; 뿏; 뿏; 뿏; ) HANGUL SYLLABLE BBUGS BFD0;BFD0;1108 116E 11AB;BFD0;1108 116E 11AB; # (뿐; 뿐; 뿐; 뿐; 뿐; ) HANGUL SYLLABLE BBUN BFD1;BFD1;1108 116E 11AC;BFD1;1108 116E 11AC; # (뿑; 뿑; 뿑; 뿑; 뿑; ) HANGUL SYLLABLE BBUNJ BFD2;BFD2;1108 116E 11AD;BFD2;1108 116E 11AD; # (뿒; 뿒; 뿒; 뿒; 뿒; ) HANGUL SYLLABLE BBUNH BFD3;BFD3;1108 116E 11AE;BFD3;1108 116E 11AE; # (뿓; 뿓; 뿓; 뿓; 뿓; ) HANGUL SYLLABLE BBUD BFD4;BFD4;1108 116E 11AF;BFD4;1108 116E 11AF; # (뿔; 뿔; 뿔; 뿔; 뿔; ) HANGUL SYLLABLE BBUL BFD5;BFD5;1108 116E 11B0;BFD5;1108 116E 11B0; # (뿕; 뿕; 뿕; 뿕; 뿕; ) HANGUL SYLLABLE BBULG BFD6;BFD6;1108 116E 11B1;BFD6;1108 116E 11B1; # (뿖; 뿖; 뿖; 뿖; 뿖; ) HANGUL SYLLABLE BBULM BFD7;BFD7;1108 116E 11B2;BFD7;1108 116E 11B2; # (뿗; 뿗; 뿗; 뿗; 뿗; ) HANGUL SYLLABLE BBULB BFD8;BFD8;1108 116E 11B3;BFD8;1108 116E 11B3; # (뿘; 뿘; 뿘; 뿘; 뿘; ) HANGUL SYLLABLE BBULS BFD9;BFD9;1108 116E 11B4;BFD9;1108 116E 11B4; # (뿙; 뿙; 뿙; 뿙; 뿙; ) HANGUL SYLLABLE BBULT BFDA;BFDA;1108 116E 11B5;BFDA;1108 116E 11B5; # (뿚; 뿚; 뿚; 뿚; 뿚; ) HANGUL SYLLABLE BBULP BFDB;BFDB;1108 116E 11B6;BFDB;1108 116E 11B6; # (뿛; 뿛; 뿛; 뿛; 뿛; ) HANGUL SYLLABLE BBULH BFDC;BFDC;1108 116E 11B7;BFDC;1108 116E 11B7; # (뿜; 뿜; 뿜; 뿜; 뿜; ) HANGUL SYLLABLE BBUM BFDD;BFDD;1108 116E 11B8;BFDD;1108 116E 11B8; # (뿝; 뿝; 뿝; 뿝; 뿝; ) HANGUL SYLLABLE BBUB BFDE;BFDE;1108 116E 11B9;BFDE;1108 116E 11B9; # (뿞; 뿞; 뿞; 뿞; 뿞; ) HANGUL SYLLABLE BBUBS BFDF;BFDF;1108 116E 11BA;BFDF;1108 116E 11BA; # (뿟; 뿟; 뿟; 뿟; 뿟; ) HANGUL SYLLABLE BBUS BFE0;BFE0;1108 116E 11BB;BFE0;1108 116E 11BB; # (뿠; 뿠; 뿠; 뿠; 뿠; ) HANGUL SYLLABLE BBUSS BFE1;BFE1;1108 116E 11BC;BFE1;1108 116E 11BC; # (뿡; 뿡; 뿡; 뿡; 뿡; ) HANGUL SYLLABLE BBUNG BFE2;BFE2;1108 116E 11BD;BFE2;1108 116E 11BD; # (뿢; 뿢; 뿢; 뿢; 뿢; ) HANGUL SYLLABLE BBUJ BFE3;BFE3;1108 116E 11BE;BFE3;1108 116E 11BE; # (뿣; 뿣; 뿣; 뿣; 뿣; ) HANGUL SYLLABLE BBUC BFE4;BFE4;1108 116E 11BF;BFE4;1108 116E 11BF; # (뿤; 뿤; 뿤; 뿤; 뿤; ) HANGUL SYLLABLE BBUK BFE5;BFE5;1108 116E 11C0;BFE5;1108 116E 11C0; # (뿥; 뿥; 뿥; 뿥; 뿥; ) HANGUL SYLLABLE BBUT BFE6;BFE6;1108 116E 11C1;BFE6;1108 116E 11C1; # (뿦; 뿦; 뿦; 뿦; 뿦; ) HANGUL SYLLABLE BBUP BFE7;BFE7;1108 116E 11C2;BFE7;1108 116E 11C2; # (뿧; 뿧; 뿧; 뿧; 뿧; ) HANGUL SYLLABLE BBUH BFE8;BFE8;1108 116F;BFE8;1108 116F; # (뿨; 뿨; 뿨; 뿨; 뿨; ) HANGUL SYLLABLE BBWEO BFE9;BFE9;1108 116F 11A8;BFE9;1108 116F 11A8; # (뿩; 뿩; 뿩; 뿩; 뿩; ) HANGUL SYLLABLE BBWEOG BFEA;BFEA;1108 116F 11A9;BFEA;1108 116F 11A9; # (뿪; 뿪; 뿪; 뿪; 뿪; ) HANGUL SYLLABLE BBWEOGG BFEB;BFEB;1108 116F 11AA;BFEB;1108 116F 11AA; # (뿫; 뿫; 뿫; 뿫; 뿫; ) HANGUL SYLLABLE BBWEOGS BFEC;BFEC;1108 116F 11AB;BFEC;1108 116F 11AB; # (뿬; 뿬; 뿬; 뿬; 뿬; ) HANGUL SYLLABLE BBWEON BFED;BFED;1108 116F 11AC;BFED;1108 116F 11AC; # (뿭; 뿭; 뿭; 뿭; 뿭; ) HANGUL SYLLABLE BBWEONJ BFEE;BFEE;1108 116F 11AD;BFEE;1108 116F 11AD; # (뿮; 뿮; 뿮; 뿮; 뿮; ) HANGUL SYLLABLE BBWEONH BFEF;BFEF;1108 116F 11AE;BFEF;1108 116F 11AE; # (뿯; 뿯; 뿯; 뿯; 뿯; ) HANGUL SYLLABLE BBWEOD BFF0;BFF0;1108 116F 11AF;BFF0;1108 116F 11AF; # (뿰; 뿰; 뿰; 뿰; 뿰; ) HANGUL SYLLABLE BBWEOL BFF1;BFF1;1108 116F 11B0;BFF1;1108 116F 11B0; # (뿱; 뿱; 뿱; 뿱; 뿱; ) HANGUL SYLLABLE BBWEOLG BFF2;BFF2;1108 116F 11B1;BFF2;1108 116F 11B1; # (뿲; 뿲; 뿲; 뿲; 뿲; ) HANGUL SYLLABLE BBWEOLM BFF3;BFF3;1108 116F 11B2;BFF3;1108 116F 11B2; # (뿳; 뿳; 뿳; 뿳; 뿳; ) HANGUL SYLLABLE BBWEOLB BFF4;BFF4;1108 116F 11B3;BFF4;1108 116F 11B3; # (뿴; 뿴; 뿴; 뿴; 뿴; ) HANGUL SYLLABLE BBWEOLS BFF5;BFF5;1108 116F 11B4;BFF5;1108 116F 11B4; # (뿵; 뿵; 뿵; 뿵; 뿵; ) HANGUL SYLLABLE BBWEOLT BFF6;BFF6;1108 116F 11B5;BFF6;1108 116F 11B5; # (뿶; 뿶; 뿶; 뿶; 뿶; ) HANGUL SYLLABLE BBWEOLP BFF7;BFF7;1108 116F 11B6;BFF7;1108 116F 11B6; # (뿷; 뿷; 뿷; 뿷; 뿷; ) HANGUL SYLLABLE BBWEOLH BFF8;BFF8;1108 116F 11B7;BFF8;1108 116F 11B7; # (뿸; 뿸; 뿸; 뿸; 뿸; ) HANGUL SYLLABLE BBWEOM BFF9;BFF9;1108 116F 11B8;BFF9;1108 116F 11B8; # (뿹; 뿹; 뿹; 뿹; 뿹; ) HANGUL SYLLABLE BBWEOB BFFA;BFFA;1108 116F 11B9;BFFA;1108 116F 11B9; # (뿺; 뿺; 뿺; 뿺; 뿺; ) HANGUL SYLLABLE BBWEOBS BFFB;BFFB;1108 116F 11BA;BFFB;1108 116F 11BA; # (뿻; 뿻; 뿻; 뿻; 뿻; ) HANGUL SYLLABLE BBWEOS BFFC;BFFC;1108 116F 11BB;BFFC;1108 116F 11BB; # (뿼; 뿼; 뿼; 뿼; 뿼; ) HANGUL SYLLABLE BBWEOSS BFFD;BFFD;1108 116F 11BC;BFFD;1108 116F 11BC; # (뿽; 뿽; 뿽; 뿽; 뿽; ) HANGUL SYLLABLE BBWEONG BFFE;BFFE;1108 116F 11BD;BFFE;1108 116F 11BD; # (뿾; 뿾; 뿾; 뿾; 뿾; ) HANGUL SYLLABLE BBWEOJ BFFF;BFFF;1108 116F 11BE;BFFF;1108 116F 11BE; # (뿿; 뿿; 뿿; 뿿; 뿿; ) HANGUL SYLLABLE BBWEOC C000;C000;1108 116F 11BF;C000;1108 116F 11BF; # (쀀; 쀀; 쀀; 쀀; 쀀; ) HANGUL SYLLABLE BBWEOK C001;C001;1108 116F 11C0;C001;1108 116F 11C0; # (쀁; 쀁; 쀁; 쀁; 쀁; ) HANGUL SYLLABLE BBWEOT C002;C002;1108 116F 11C1;C002;1108 116F 11C1; # (쀂; 쀂; 쀂; 쀂; 쀂; ) HANGUL SYLLABLE BBWEOP C003;C003;1108 116F 11C2;C003;1108 116F 11C2; # (쀃; 쀃; 쀃; 쀃; 쀃; ) HANGUL SYLLABLE BBWEOH C004;C004;1108 1170;C004;1108 1170; # (쀄; 쀄; 쀄; 쀄; 쀄; ) HANGUL SYLLABLE BBWE C005;C005;1108 1170 11A8;C005;1108 1170 11A8; # (쀅; 쀅; 쀅; 쀅; 쀅; ) HANGUL SYLLABLE BBWEG C006;C006;1108 1170 11A9;C006;1108 1170 11A9; # (쀆; 쀆; 쀆; 쀆; 쀆; ) HANGUL SYLLABLE BBWEGG C007;C007;1108 1170 11AA;C007;1108 1170 11AA; # (쀇; 쀇; 쀇; 쀇; 쀇; ) HANGUL SYLLABLE BBWEGS C008;C008;1108 1170 11AB;C008;1108 1170 11AB; # (쀈; 쀈; 쀈; 쀈; 쀈; ) HANGUL SYLLABLE BBWEN C009;C009;1108 1170 11AC;C009;1108 1170 11AC; # (쀉; 쀉; 쀉; 쀉; 쀉; ) HANGUL SYLLABLE BBWENJ C00A;C00A;1108 1170 11AD;C00A;1108 1170 11AD; # (쀊; 쀊; 쀊; 쀊; 쀊; ) HANGUL SYLLABLE BBWENH C00B;C00B;1108 1170 11AE;C00B;1108 1170 11AE; # (쀋; 쀋; 쀋; 쀋; 쀋; ) HANGUL SYLLABLE BBWED C00C;C00C;1108 1170 11AF;C00C;1108 1170 11AF; # (쀌; 쀌; 쀌; 쀌; 쀌; ) HANGUL SYLLABLE BBWEL C00D;C00D;1108 1170 11B0;C00D;1108 1170 11B0; # (쀍; 쀍; 쀍; 쀍; 쀍; ) HANGUL SYLLABLE BBWELG C00E;C00E;1108 1170 11B1;C00E;1108 1170 11B1; # (쀎; 쀎; 쀎; 쀎; 쀎; ) HANGUL SYLLABLE BBWELM C00F;C00F;1108 1170 11B2;C00F;1108 1170 11B2; # (쀏; 쀏; 쀏; 쀏; 쀏; ) HANGUL SYLLABLE BBWELB C010;C010;1108 1170 11B3;C010;1108 1170 11B3; # (쀐; 쀐; 쀐; 쀐; 쀐; ) HANGUL SYLLABLE BBWELS C011;C011;1108 1170 11B4;C011;1108 1170 11B4; # (쀑; 쀑; 쀑; 쀑; 쀑; ) HANGUL SYLLABLE BBWELT C012;C012;1108 1170 11B5;C012;1108 1170 11B5; # (쀒; 쀒; 쀒; 쀒; 쀒; ) HANGUL SYLLABLE BBWELP C013;C013;1108 1170 11B6;C013;1108 1170 11B6; # (쀓; 쀓; 쀓; 쀓; 쀓; ) HANGUL SYLLABLE BBWELH C014;C014;1108 1170 11B7;C014;1108 1170 11B7; # (쀔; 쀔; 쀔; 쀔; 쀔; ) HANGUL SYLLABLE BBWEM C015;C015;1108 1170 11B8;C015;1108 1170 11B8; # (쀕; 쀕; 쀕; 쀕; 쀕; ) HANGUL SYLLABLE BBWEB C016;C016;1108 1170 11B9;C016;1108 1170 11B9; # (쀖; 쀖; 쀖; 쀖; 쀖; ) HANGUL SYLLABLE BBWEBS C017;C017;1108 1170 11BA;C017;1108 1170 11BA; # (쀗; 쀗; 쀗; 쀗; 쀗; ) HANGUL SYLLABLE BBWES C018;C018;1108 1170 11BB;C018;1108 1170 11BB; # (쀘; 쀘; 쀘; 쀘; 쀘; ) HANGUL SYLLABLE BBWESS C019;C019;1108 1170 11BC;C019;1108 1170 11BC; # (쀙; 쀙; 쀙; 쀙; 쀙; ) HANGUL SYLLABLE BBWENG C01A;C01A;1108 1170 11BD;C01A;1108 1170 11BD; # (쀚; 쀚; 쀚; 쀚; 쀚; ) HANGUL SYLLABLE BBWEJ C01B;C01B;1108 1170 11BE;C01B;1108 1170 11BE; # (쀛; 쀛; 쀛; 쀛; 쀛; ) HANGUL SYLLABLE BBWEC C01C;C01C;1108 1170 11BF;C01C;1108 1170 11BF; # (쀜; 쀜; 쀜; 쀜; 쀜; ) HANGUL SYLLABLE BBWEK C01D;C01D;1108 1170 11C0;C01D;1108 1170 11C0; # (쀝; 쀝; 쀝; 쀝; 쀝; ) HANGUL SYLLABLE BBWET C01E;C01E;1108 1170 11C1;C01E;1108 1170 11C1; # (쀞; 쀞; 쀞; 쀞; 쀞; ) HANGUL SYLLABLE BBWEP C01F;C01F;1108 1170 11C2;C01F;1108 1170 11C2; # (쀟; 쀟; 쀟; 쀟; 쀟; ) HANGUL SYLLABLE BBWEH C020;C020;1108 1171;C020;1108 1171; # (쀠; 쀠; 쀠; 쀠; 쀠; ) HANGUL SYLLABLE BBWI C021;C021;1108 1171 11A8;C021;1108 1171 11A8; # (쀡; 쀡; 쀡; 쀡; 쀡; ) HANGUL SYLLABLE BBWIG C022;C022;1108 1171 11A9;C022;1108 1171 11A9; # (쀢; 쀢; 쀢; 쀢; 쀢; ) HANGUL SYLLABLE BBWIGG C023;C023;1108 1171 11AA;C023;1108 1171 11AA; # (쀣; 쀣; 쀣; 쀣; 쀣; ) HANGUL SYLLABLE BBWIGS C024;C024;1108 1171 11AB;C024;1108 1171 11AB; # (쀤; 쀤; 쀤; 쀤; 쀤; ) HANGUL SYLLABLE BBWIN C025;C025;1108 1171 11AC;C025;1108 1171 11AC; # (쀥; 쀥; 쀥; 쀥; 쀥; ) HANGUL SYLLABLE BBWINJ C026;C026;1108 1171 11AD;C026;1108 1171 11AD; # (쀦; 쀦; 쀦; 쀦; 쀦; ) HANGUL SYLLABLE BBWINH C027;C027;1108 1171 11AE;C027;1108 1171 11AE; # (쀧; 쀧; 쀧; 쀧; 쀧; ) HANGUL SYLLABLE BBWID C028;C028;1108 1171 11AF;C028;1108 1171 11AF; # (쀨; 쀨; 쀨; 쀨; 쀨; ) HANGUL SYLLABLE BBWIL C029;C029;1108 1171 11B0;C029;1108 1171 11B0; # (쀩; 쀩; 쀩; 쀩; 쀩; ) HANGUL SYLLABLE BBWILG C02A;C02A;1108 1171 11B1;C02A;1108 1171 11B1; # (쀪; 쀪; 쀪; 쀪; 쀪; ) HANGUL SYLLABLE BBWILM C02B;C02B;1108 1171 11B2;C02B;1108 1171 11B2; # (쀫; 쀫; 쀫; 쀫; 쀫; ) HANGUL SYLLABLE BBWILB C02C;C02C;1108 1171 11B3;C02C;1108 1171 11B3; # (쀬; 쀬; 쀬; 쀬; 쀬; ) HANGUL SYLLABLE BBWILS C02D;C02D;1108 1171 11B4;C02D;1108 1171 11B4; # (쀭; 쀭; 쀭; 쀭; 쀭; ) HANGUL SYLLABLE BBWILT C02E;C02E;1108 1171 11B5;C02E;1108 1171 11B5; # (쀮; 쀮; 쀮; 쀮; 쀮; ) HANGUL SYLLABLE BBWILP C02F;C02F;1108 1171 11B6;C02F;1108 1171 11B6; # (쀯; 쀯; 쀯; 쀯; 쀯; ) HANGUL SYLLABLE BBWILH C030;C030;1108 1171 11B7;C030;1108 1171 11B7; # (쀰; 쀰; 쀰; 쀰; 쀰; ) HANGUL SYLLABLE BBWIM C031;C031;1108 1171 11B8;C031;1108 1171 11B8; # (쀱; 쀱; 쀱; 쀱; 쀱; ) HANGUL SYLLABLE BBWIB C032;C032;1108 1171 11B9;C032;1108 1171 11B9; # (쀲; 쀲; 쀲; 쀲; 쀲; ) HANGUL SYLLABLE BBWIBS C033;C033;1108 1171 11BA;C033;1108 1171 11BA; # (쀳; 쀳; 쀳; 쀳; 쀳; ) HANGUL SYLLABLE BBWIS C034;C034;1108 1171 11BB;C034;1108 1171 11BB; # (쀴; 쀴; 쀴; 쀴; 쀴; ) HANGUL SYLLABLE BBWISS C035;C035;1108 1171 11BC;C035;1108 1171 11BC; # (쀵; 쀵; 쀵; 쀵; 쀵; ) HANGUL SYLLABLE BBWING C036;C036;1108 1171 11BD;C036;1108 1171 11BD; # (쀶; 쀶; 쀶; 쀶; 쀶; ) HANGUL SYLLABLE BBWIJ C037;C037;1108 1171 11BE;C037;1108 1171 11BE; # (쀷; 쀷; 쀷; 쀷; 쀷; ) HANGUL SYLLABLE BBWIC C038;C038;1108 1171 11BF;C038;1108 1171 11BF; # (쀸; 쀸; 쀸; 쀸; 쀸; ) HANGUL SYLLABLE BBWIK C039;C039;1108 1171 11C0;C039;1108 1171 11C0; # (쀹; 쀹; 쀹; 쀹; 쀹; ) HANGUL SYLLABLE BBWIT C03A;C03A;1108 1171 11C1;C03A;1108 1171 11C1; # (쀺; 쀺; 쀺; 쀺; 쀺; ) HANGUL SYLLABLE BBWIP C03B;C03B;1108 1171 11C2;C03B;1108 1171 11C2; # (쀻; 쀻; 쀻; 쀻; 쀻; ) HANGUL SYLLABLE BBWIH C03C;C03C;1108 1172;C03C;1108 1172; # (쀼; 쀼; 쀼; 쀼; 쀼; ) HANGUL SYLLABLE BBYU C03D;C03D;1108 1172 11A8;C03D;1108 1172 11A8; # (쀽; 쀽; 쀽; 쀽; 쀽; ) HANGUL SYLLABLE BBYUG C03E;C03E;1108 1172 11A9;C03E;1108 1172 11A9; # (쀾; 쀾; 쀾; 쀾; 쀾; ) HANGUL SYLLABLE BBYUGG C03F;C03F;1108 1172 11AA;C03F;1108 1172 11AA; # (쀿; 쀿; 쀿; 쀿; 쀿; ) HANGUL SYLLABLE BBYUGS C040;C040;1108 1172 11AB;C040;1108 1172 11AB; # (쁀; 쁀; 쁀; 쁀; 쁀; ) HANGUL SYLLABLE BBYUN C041;C041;1108 1172 11AC;C041;1108 1172 11AC; # (쁁; 쁁; 쁁; 쁁; 쁁; ) HANGUL SYLLABLE BBYUNJ C042;C042;1108 1172 11AD;C042;1108 1172 11AD; # (쁂; 쁂; 쁂; 쁂; 쁂; ) HANGUL SYLLABLE BBYUNH C043;C043;1108 1172 11AE;C043;1108 1172 11AE; # (쁃; 쁃; 쁃; 쁃; 쁃; ) HANGUL SYLLABLE BBYUD C044;C044;1108 1172 11AF;C044;1108 1172 11AF; # (쁄; 쁄; 쁄; 쁄; 쁄; ) HANGUL SYLLABLE BBYUL C045;C045;1108 1172 11B0;C045;1108 1172 11B0; # (쁅; 쁅; 쁅; 쁅; 쁅; ) HANGUL SYLLABLE BBYULG C046;C046;1108 1172 11B1;C046;1108 1172 11B1; # (쁆; 쁆; 쁆; 쁆; 쁆; ) HANGUL SYLLABLE BBYULM C047;C047;1108 1172 11B2;C047;1108 1172 11B2; # (쁇; 쁇; 쁇; 쁇; 쁇; ) HANGUL SYLLABLE BBYULB C048;C048;1108 1172 11B3;C048;1108 1172 11B3; # (쁈; 쁈; 쁈; 쁈; 쁈; ) HANGUL SYLLABLE BBYULS C049;C049;1108 1172 11B4;C049;1108 1172 11B4; # (쁉; 쁉; 쁉; 쁉; 쁉; ) HANGUL SYLLABLE BBYULT C04A;C04A;1108 1172 11B5;C04A;1108 1172 11B5; # (쁊; 쁊; 쁊; 쁊; 쁊; ) HANGUL SYLLABLE BBYULP C04B;C04B;1108 1172 11B6;C04B;1108 1172 11B6; # (쁋; 쁋; 쁋; 쁋; 쁋; ) HANGUL SYLLABLE BBYULH C04C;C04C;1108 1172 11B7;C04C;1108 1172 11B7; # (쁌; 쁌; 쁌; 쁌; 쁌; ) HANGUL SYLLABLE BBYUM C04D;C04D;1108 1172 11B8;C04D;1108 1172 11B8; # (쁍; 쁍; 쁍; 쁍; 쁍; ) HANGUL SYLLABLE BBYUB C04E;C04E;1108 1172 11B9;C04E;1108 1172 11B9; # (쁎; 쁎; 쁎; 쁎; 쁎; ) HANGUL SYLLABLE BBYUBS C04F;C04F;1108 1172 11BA;C04F;1108 1172 11BA; # (쁏; 쁏; 쁏; 쁏; 쁏; ) HANGUL SYLLABLE BBYUS C050;C050;1108 1172 11BB;C050;1108 1172 11BB; # (쁐; 쁐; 쁐; 쁐; 쁐; ) HANGUL SYLLABLE BBYUSS C051;C051;1108 1172 11BC;C051;1108 1172 11BC; # (쁑; 쁑; 쁑; 쁑; 쁑; ) HANGUL SYLLABLE BBYUNG C052;C052;1108 1172 11BD;C052;1108 1172 11BD; # (쁒; 쁒; 쁒; 쁒; 쁒; ) HANGUL SYLLABLE BBYUJ C053;C053;1108 1172 11BE;C053;1108 1172 11BE; # (쁓; 쁓; 쁓; 쁓; 쁓; ) HANGUL SYLLABLE BBYUC C054;C054;1108 1172 11BF;C054;1108 1172 11BF; # (쁔; 쁔; 쁔; 쁔; 쁔; ) HANGUL SYLLABLE BBYUK C055;C055;1108 1172 11C0;C055;1108 1172 11C0; # (쁕; 쁕; 쁕; 쁕; 쁕; ) HANGUL SYLLABLE BBYUT C056;C056;1108 1172 11C1;C056;1108 1172 11C1; # (쁖; 쁖; 쁖; 쁖; 쁖; ) HANGUL SYLLABLE BBYUP C057;C057;1108 1172 11C2;C057;1108 1172 11C2; # (쁗; 쁗; 쁗; 쁗; 쁗; ) HANGUL SYLLABLE BBYUH C058;C058;1108 1173;C058;1108 1173; # (쁘; 쁘; 쁘; 쁘; 쁘; ) HANGUL SYLLABLE BBEU C059;C059;1108 1173 11A8;C059;1108 1173 11A8; # (쁙; 쁙; 쁙; 쁙; 쁙; ) HANGUL SYLLABLE BBEUG C05A;C05A;1108 1173 11A9;C05A;1108 1173 11A9; # (쁚; 쁚; 쁚; 쁚; 쁚; ) HANGUL SYLLABLE BBEUGG C05B;C05B;1108 1173 11AA;C05B;1108 1173 11AA; # (쁛; 쁛; 쁛; 쁛; 쁛; ) HANGUL SYLLABLE BBEUGS C05C;C05C;1108 1173 11AB;C05C;1108 1173 11AB; # (쁜; 쁜; 쁜; 쁜; 쁜; ) HANGUL SYLLABLE BBEUN C05D;C05D;1108 1173 11AC;C05D;1108 1173 11AC; # (쁝; 쁝; 쁝; 쁝; 쁝; ) HANGUL SYLLABLE BBEUNJ C05E;C05E;1108 1173 11AD;C05E;1108 1173 11AD; # (쁞; 쁞; 쁞; 쁞; 쁞; ) HANGUL SYLLABLE BBEUNH C05F;C05F;1108 1173 11AE;C05F;1108 1173 11AE; # (쁟; 쁟; 쁟; 쁟; 쁟; ) HANGUL SYLLABLE BBEUD C060;C060;1108 1173 11AF;C060;1108 1173 11AF; # (쁠; 쁠; 쁠; 쁠; 쁠; ) HANGUL SYLLABLE BBEUL C061;C061;1108 1173 11B0;C061;1108 1173 11B0; # (쁡; 쁡; 쁡; 쁡; 쁡; ) HANGUL SYLLABLE BBEULG C062;C062;1108 1173 11B1;C062;1108 1173 11B1; # (쁢; 쁢; 쁢; 쁢; 쁢; ) HANGUL SYLLABLE BBEULM C063;C063;1108 1173 11B2;C063;1108 1173 11B2; # (쁣; 쁣; 쁣; 쁣; 쁣; ) HANGUL SYLLABLE BBEULB C064;C064;1108 1173 11B3;C064;1108 1173 11B3; # (쁤; 쁤; 쁤; 쁤; 쁤; ) HANGUL SYLLABLE BBEULS C065;C065;1108 1173 11B4;C065;1108 1173 11B4; # (쁥; 쁥; 쁥; 쁥; 쁥; ) HANGUL SYLLABLE BBEULT C066;C066;1108 1173 11B5;C066;1108 1173 11B5; # (쁦; 쁦; 쁦; 쁦; 쁦; ) HANGUL SYLLABLE BBEULP C067;C067;1108 1173 11B6;C067;1108 1173 11B6; # (쁧; 쁧; 쁧; 쁧; 쁧; ) HANGUL SYLLABLE BBEULH C068;C068;1108 1173 11B7;C068;1108 1173 11B7; # (쁨; 쁨; 쁨; 쁨; 쁨; ) HANGUL SYLLABLE BBEUM C069;C069;1108 1173 11B8;C069;1108 1173 11B8; # (쁩; 쁩; 쁩; 쁩; 쁩; ) HANGUL SYLLABLE BBEUB C06A;C06A;1108 1173 11B9;C06A;1108 1173 11B9; # (쁪; 쁪; 쁪; 쁪; 쁪; ) HANGUL SYLLABLE BBEUBS C06B;C06B;1108 1173 11BA;C06B;1108 1173 11BA; # (쁫; 쁫; 쁫; 쁫; 쁫; ) HANGUL SYLLABLE BBEUS C06C;C06C;1108 1173 11BB;C06C;1108 1173 11BB; # (쁬; 쁬; 쁬; 쁬; 쁬; ) HANGUL SYLLABLE BBEUSS C06D;C06D;1108 1173 11BC;C06D;1108 1173 11BC; # (쁭; 쁭; 쁭; 쁭; 쁭; ) HANGUL SYLLABLE BBEUNG C06E;C06E;1108 1173 11BD;C06E;1108 1173 11BD; # (쁮; 쁮; 쁮; 쁮; 쁮; ) HANGUL SYLLABLE BBEUJ C06F;C06F;1108 1173 11BE;C06F;1108 1173 11BE; # (쁯; 쁯; 쁯; 쁯; 쁯; ) HANGUL SYLLABLE BBEUC C070;C070;1108 1173 11BF;C070;1108 1173 11BF; # (쁰; 쁰; 쁰; 쁰; 쁰; ) HANGUL SYLLABLE BBEUK C071;C071;1108 1173 11C0;C071;1108 1173 11C0; # (쁱; 쁱; 쁱; 쁱; 쁱; ) HANGUL SYLLABLE BBEUT C072;C072;1108 1173 11C1;C072;1108 1173 11C1; # (쁲; 쁲; 쁲; 쁲; 쁲; ) HANGUL SYLLABLE BBEUP C073;C073;1108 1173 11C2;C073;1108 1173 11C2; # (쁳; 쁳; 쁳; 쁳; 쁳; ) HANGUL SYLLABLE BBEUH C074;C074;1108 1174;C074;1108 1174; # (쁴; 쁴; 쁴; 쁴; 쁴; ) HANGUL SYLLABLE BBYI C075;C075;1108 1174 11A8;C075;1108 1174 11A8; # (쁵; 쁵; 쁵; 쁵; 쁵; ) HANGUL SYLLABLE BBYIG C076;C076;1108 1174 11A9;C076;1108 1174 11A9; # (쁶; 쁶; 쁶; 쁶; 쁶; ) HANGUL SYLLABLE BBYIGG C077;C077;1108 1174 11AA;C077;1108 1174 11AA; # (쁷; 쁷; 쁷; 쁷; 쁷; ) HANGUL SYLLABLE BBYIGS C078;C078;1108 1174 11AB;C078;1108 1174 11AB; # (쁸; 쁸; 쁸; 쁸; 쁸; ) HANGUL SYLLABLE BBYIN C079;C079;1108 1174 11AC;C079;1108 1174 11AC; # (쁹; 쁹; 쁹; 쁹; 쁹; ) HANGUL SYLLABLE BBYINJ C07A;C07A;1108 1174 11AD;C07A;1108 1174 11AD; # (쁺; 쁺; 쁺; 쁺; 쁺; ) HANGUL SYLLABLE BBYINH C07B;C07B;1108 1174 11AE;C07B;1108 1174 11AE; # (쁻; 쁻; 쁻; 쁻; 쁻; ) HANGUL SYLLABLE BBYID C07C;C07C;1108 1174 11AF;C07C;1108 1174 11AF; # (쁼; 쁼; 쁼; 쁼; 쁼; ) HANGUL SYLLABLE BBYIL C07D;C07D;1108 1174 11B0;C07D;1108 1174 11B0; # (쁽; 쁽; 쁽; 쁽; 쁽; ) HANGUL SYLLABLE BBYILG C07E;C07E;1108 1174 11B1;C07E;1108 1174 11B1; # (쁾; 쁾; 쁾; 쁾; 쁾; ) HANGUL SYLLABLE BBYILM C07F;C07F;1108 1174 11B2;C07F;1108 1174 11B2; # (쁿; 쁿; 쁿; 쁿; 쁿; ) HANGUL SYLLABLE BBYILB C080;C080;1108 1174 11B3;C080;1108 1174 11B3; # (삀; 삀; 삀; 삀; 삀; ) HANGUL SYLLABLE BBYILS C081;C081;1108 1174 11B4;C081;1108 1174 11B4; # (삁; 삁; 삁; 삁; 삁; ) HANGUL SYLLABLE BBYILT C082;C082;1108 1174 11B5;C082;1108 1174 11B5; # (삂; 삂; 삂; 삂; 삂; ) HANGUL SYLLABLE BBYILP C083;C083;1108 1174 11B6;C083;1108 1174 11B6; # (삃; 삃; 삃; 삃; 삃; ) HANGUL SYLLABLE BBYILH C084;C084;1108 1174 11B7;C084;1108 1174 11B7; # (삄; 삄; 삄; 삄; 삄; ) HANGUL SYLLABLE BBYIM C085;C085;1108 1174 11B8;C085;1108 1174 11B8; # (삅; 삅; 삅; 삅; 삅; ) HANGUL SYLLABLE BBYIB C086;C086;1108 1174 11B9;C086;1108 1174 11B9; # (삆; 삆; 삆; 삆; 삆; ) HANGUL SYLLABLE BBYIBS C087;C087;1108 1174 11BA;C087;1108 1174 11BA; # (삇; 삇; 삇; 삇; 삇; ) HANGUL SYLLABLE BBYIS C088;C088;1108 1174 11BB;C088;1108 1174 11BB; # (삈; 삈; 삈; 삈; 삈; ) HANGUL SYLLABLE BBYISS C089;C089;1108 1174 11BC;C089;1108 1174 11BC; # (삉; 삉; 삉; 삉; 삉; ) HANGUL SYLLABLE BBYING C08A;C08A;1108 1174 11BD;C08A;1108 1174 11BD; # (삊; 삊; 삊; 삊; 삊; ) HANGUL SYLLABLE BBYIJ C08B;C08B;1108 1174 11BE;C08B;1108 1174 11BE; # (삋; 삋; 삋; 삋; 삋; ) HANGUL SYLLABLE BBYIC C08C;C08C;1108 1174 11BF;C08C;1108 1174 11BF; # (삌; 삌; 삌; 삌; 삌; ) HANGUL SYLLABLE BBYIK C08D;C08D;1108 1174 11C0;C08D;1108 1174 11C0; # (삍; 삍; 삍; 삍; 삍; ) HANGUL SYLLABLE BBYIT C08E;C08E;1108 1174 11C1;C08E;1108 1174 11C1; # (삎; 삎; 삎; 삎; 삎; ) HANGUL SYLLABLE BBYIP C08F;C08F;1108 1174 11C2;C08F;1108 1174 11C2; # (삏; 삏; 삏; 삏; 삏; ) HANGUL SYLLABLE BBYIH C090;C090;1108 1175;C090;1108 1175; # (삐; 삐; 삐; 삐; 삐; ) HANGUL SYLLABLE BBI C091;C091;1108 1175 11A8;C091;1108 1175 11A8; # (삑; 삑; 삑; 삑; 삑; ) HANGUL SYLLABLE BBIG C092;C092;1108 1175 11A9;C092;1108 1175 11A9; # (삒; 삒; 삒; 삒; 삒; ) HANGUL SYLLABLE BBIGG C093;C093;1108 1175 11AA;C093;1108 1175 11AA; # (삓; 삓; 삓; 삓; 삓; ) HANGUL SYLLABLE BBIGS C094;C094;1108 1175 11AB;C094;1108 1175 11AB; # (삔; 삔; 삔; 삔; 삔; ) HANGUL SYLLABLE BBIN C095;C095;1108 1175 11AC;C095;1108 1175 11AC; # (삕; 삕; 삕; 삕; 삕; ) HANGUL SYLLABLE BBINJ C096;C096;1108 1175 11AD;C096;1108 1175 11AD; # (삖; 삖; 삖; 삖; 삖; ) HANGUL SYLLABLE BBINH C097;C097;1108 1175 11AE;C097;1108 1175 11AE; # (삗; 삗; 삗; 삗; 삗; ) HANGUL SYLLABLE BBID C098;C098;1108 1175 11AF;C098;1108 1175 11AF; # (삘; 삘; 삘; 삘; 삘; ) HANGUL SYLLABLE BBIL C099;C099;1108 1175 11B0;C099;1108 1175 11B0; # (삙; 삙; 삙; 삙; 삙; ) HANGUL SYLLABLE BBILG C09A;C09A;1108 1175 11B1;C09A;1108 1175 11B1; # (삚; 삚; 삚; 삚; 삚; ) HANGUL SYLLABLE BBILM C09B;C09B;1108 1175 11B2;C09B;1108 1175 11B2; # (삛; 삛; 삛; 삛; 삛; ) HANGUL SYLLABLE BBILB C09C;C09C;1108 1175 11B3;C09C;1108 1175 11B3; # (삜; 삜; 삜; 삜; 삜; ) HANGUL SYLLABLE BBILS C09D;C09D;1108 1175 11B4;C09D;1108 1175 11B4; # (삝; 삝; 삝; 삝; 삝; ) HANGUL SYLLABLE BBILT C09E;C09E;1108 1175 11B5;C09E;1108 1175 11B5; # (삞; 삞; 삞; 삞; 삞; ) HANGUL SYLLABLE BBILP C09F;C09F;1108 1175 11B6;C09F;1108 1175 11B6; # (삟; 삟; 삟; 삟; 삟; ) HANGUL SYLLABLE BBILH C0A0;C0A0;1108 1175 11B7;C0A0;1108 1175 11B7; # (삠; 삠; 삠; 삠; 삠; ) HANGUL SYLLABLE BBIM C0A1;C0A1;1108 1175 11B8;C0A1;1108 1175 11B8; # (삡; 삡; 삡; 삡; 삡; ) HANGUL SYLLABLE BBIB C0A2;C0A2;1108 1175 11B9;C0A2;1108 1175 11B9; # (삢; 삢; 삢; 삢; 삢; ) HANGUL SYLLABLE BBIBS C0A3;C0A3;1108 1175 11BA;C0A3;1108 1175 11BA; # (삣; 삣; 삣; 삣; 삣; ) HANGUL SYLLABLE BBIS C0A4;C0A4;1108 1175 11BB;C0A4;1108 1175 11BB; # (삤; 삤; 삤; 삤; 삤; ) HANGUL SYLLABLE BBISS C0A5;C0A5;1108 1175 11BC;C0A5;1108 1175 11BC; # (삥; 삥; 삥; 삥; 삥; ) HANGUL SYLLABLE BBING C0A6;C0A6;1108 1175 11BD;C0A6;1108 1175 11BD; # (삦; 삦; 삦; 삦; 삦; ) HANGUL SYLLABLE BBIJ C0A7;C0A7;1108 1175 11BE;C0A7;1108 1175 11BE; # (삧; 삧; 삧; 삧; 삧; ) HANGUL SYLLABLE BBIC C0A8;C0A8;1108 1175 11BF;C0A8;1108 1175 11BF; # (삨; 삨; 삨; 삨; 삨; ) HANGUL SYLLABLE BBIK C0A9;C0A9;1108 1175 11C0;C0A9;1108 1175 11C0; # (삩; 삩; 삩; 삩; 삩; ) HANGUL SYLLABLE BBIT C0AA;C0AA;1108 1175 11C1;C0AA;1108 1175 11C1; # (삪; 삪; 삪; 삪; 삪; ) HANGUL SYLLABLE BBIP C0AB;C0AB;1108 1175 11C2;C0AB;1108 1175 11C2; # (삫; 삫; 삫; 삫; 삫; ) HANGUL SYLLABLE BBIH C0AC;C0AC;1109 1161;C0AC;1109 1161; # (사; 사; 사; 사; 사; ) HANGUL SYLLABLE SA C0AD;C0AD;1109 1161 11A8;C0AD;1109 1161 11A8; # (삭; 삭; 삭; 삭; 삭; ) HANGUL SYLLABLE SAG C0AE;C0AE;1109 1161 11A9;C0AE;1109 1161 11A9; # (삮; 삮; 삮; 삮; 삮; ) HANGUL SYLLABLE SAGG C0AF;C0AF;1109 1161 11AA;C0AF;1109 1161 11AA; # (삯; 삯; 삯; 삯; 삯; ) HANGUL SYLLABLE SAGS C0B0;C0B0;1109 1161 11AB;C0B0;1109 1161 11AB; # (산; 산; 산; 산; 산; ) HANGUL SYLLABLE SAN C0B1;C0B1;1109 1161 11AC;C0B1;1109 1161 11AC; # (삱; 삱; 삱; 삱; 삱; ) HANGUL SYLLABLE SANJ C0B2;C0B2;1109 1161 11AD;C0B2;1109 1161 11AD; # (삲; 삲; 삲; 삲; 삲; ) HANGUL SYLLABLE SANH C0B3;C0B3;1109 1161 11AE;C0B3;1109 1161 11AE; # (삳; 삳; 삳; 삳; 삳; ) HANGUL SYLLABLE SAD C0B4;C0B4;1109 1161 11AF;C0B4;1109 1161 11AF; # (살; 살; 살; 살; 살; ) HANGUL SYLLABLE SAL C0B5;C0B5;1109 1161 11B0;C0B5;1109 1161 11B0; # (삵; 삵; 삵; 삵; 삵; ) HANGUL SYLLABLE SALG C0B6;C0B6;1109 1161 11B1;C0B6;1109 1161 11B1; # (삶; 삶; 삶; 삶; 삶; ) HANGUL SYLLABLE SALM C0B7;C0B7;1109 1161 11B2;C0B7;1109 1161 11B2; # (삷; 삷; 삷; 삷; 삷; ) HANGUL SYLLABLE SALB C0B8;C0B8;1109 1161 11B3;C0B8;1109 1161 11B3; # (삸; 삸; 삸; 삸; 삸; ) HANGUL SYLLABLE SALS C0B9;C0B9;1109 1161 11B4;C0B9;1109 1161 11B4; # (삹; 삹; 삹; 삹; 삹; ) HANGUL SYLLABLE SALT C0BA;C0BA;1109 1161 11B5;C0BA;1109 1161 11B5; # (삺; 삺; 삺; 삺; 삺; ) HANGUL SYLLABLE SALP C0BB;C0BB;1109 1161 11B6;C0BB;1109 1161 11B6; # (삻; 삻; 삻; 삻; 삻; ) HANGUL SYLLABLE SALH C0BC;C0BC;1109 1161 11B7;C0BC;1109 1161 11B7; # (삼; 삼; 삼; 삼; 삼; ) HANGUL SYLLABLE SAM C0BD;C0BD;1109 1161 11B8;C0BD;1109 1161 11B8; # (삽; 삽; 삽; 삽; 삽; ) HANGUL SYLLABLE SAB C0BE;C0BE;1109 1161 11B9;C0BE;1109 1161 11B9; # (삾; 삾; 삾; 삾; 삾; ) HANGUL SYLLABLE SABS C0BF;C0BF;1109 1161 11BA;C0BF;1109 1161 11BA; # (삿; 삿; 삿; 삿; 삿; ) HANGUL SYLLABLE SAS C0C0;C0C0;1109 1161 11BB;C0C0;1109 1161 11BB; # (샀; 샀; 샀; 샀; 샀; ) HANGUL SYLLABLE SASS C0C1;C0C1;1109 1161 11BC;C0C1;1109 1161 11BC; # (상; 상; 상; 상; 상; ) HANGUL SYLLABLE SANG C0C2;C0C2;1109 1161 11BD;C0C2;1109 1161 11BD; # (샂; 샂; 샂; 샂; 샂; ) HANGUL SYLLABLE SAJ C0C3;C0C3;1109 1161 11BE;C0C3;1109 1161 11BE; # (샃; 샃; 샃; 샃; 샃; ) HANGUL SYLLABLE SAC C0C4;C0C4;1109 1161 11BF;C0C4;1109 1161 11BF; # (샄; 샄; 샄; 샄; 샄; ) HANGUL SYLLABLE SAK C0C5;C0C5;1109 1161 11C0;C0C5;1109 1161 11C0; # (샅; 샅; 샅; 샅; 샅; ) HANGUL SYLLABLE SAT C0C6;C0C6;1109 1161 11C1;C0C6;1109 1161 11C1; # (샆; 샆; 샆; 샆; 샆; ) HANGUL SYLLABLE SAP C0C7;C0C7;1109 1161 11C2;C0C7;1109 1161 11C2; # (샇; 샇; 샇; 샇; 샇; ) HANGUL SYLLABLE SAH C0C8;C0C8;1109 1162;C0C8;1109 1162; # (새; 새; 새; 새; 새; ) HANGUL SYLLABLE SAE C0C9;C0C9;1109 1162 11A8;C0C9;1109 1162 11A8; # (색; 색; 색; 색; 색; ) HANGUL SYLLABLE SAEG C0CA;C0CA;1109 1162 11A9;C0CA;1109 1162 11A9; # (샊; 샊; 샊; 샊; 샊; ) HANGUL SYLLABLE SAEGG C0CB;C0CB;1109 1162 11AA;C0CB;1109 1162 11AA; # (샋; 샋; 샋; 샋; 샋; ) HANGUL SYLLABLE SAEGS C0CC;C0CC;1109 1162 11AB;C0CC;1109 1162 11AB; # (샌; 샌; 샌; 샌; 샌; ) HANGUL SYLLABLE SAEN C0CD;C0CD;1109 1162 11AC;C0CD;1109 1162 11AC; # (샍; 샍; 샍; 샍; 샍; ) HANGUL SYLLABLE SAENJ C0CE;C0CE;1109 1162 11AD;C0CE;1109 1162 11AD; # (샎; 샎; 샎; 샎; 샎; ) HANGUL SYLLABLE SAENH C0CF;C0CF;1109 1162 11AE;C0CF;1109 1162 11AE; # (샏; 샏; 샏; 샏; 샏; ) HANGUL SYLLABLE SAED C0D0;C0D0;1109 1162 11AF;C0D0;1109 1162 11AF; # (샐; 샐; 샐; 샐; 샐; ) HANGUL SYLLABLE SAEL C0D1;C0D1;1109 1162 11B0;C0D1;1109 1162 11B0; # (샑; 샑; 샑; 샑; 샑; ) HANGUL SYLLABLE SAELG C0D2;C0D2;1109 1162 11B1;C0D2;1109 1162 11B1; # (샒; 샒; 샒; 샒; 샒; ) HANGUL SYLLABLE SAELM C0D3;C0D3;1109 1162 11B2;C0D3;1109 1162 11B2; # (샓; 샓; 샓; 샓; 샓; ) HANGUL SYLLABLE SAELB C0D4;C0D4;1109 1162 11B3;C0D4;1109 1162 11B3; # (샔; 샔; 샔; 샔; 샔; ) HANGUL SYLLABLE SAELS C0D5;C0D5;1109 1162 11B4;C0D5;1109 1162 11B4; # (샕; 샕; 샕; 샕; 샕; ) HANGUL SYLLABLE SAELT C0D6;C0D6;1109 1162 11B5;C0D6;1109 1162 11B5; # (샖; 샖; 샖; 샖; 샖; ) HANGUL SYLLABLE SAELP C0D7;C0D7;1109 1162 11B6;C0D7;1109 1162 11B6; # (샗; 샗; 샗; 샗; 샗; ) HANGUL SYLLABLE SAELH C0D8;C0D8;1109 1162 11B7;C0D8;1109 1162 11B7; # (샘; 샘; 샘; 샘; 샘; ) HANGUL SYLLABLE SAEM C0D9;C0D9;1109 1162 11B8;C0D9;1109 1162 11B8; # (샙; 샙; 샙; 샙; 샙; ) HANGUL SYLLABLE SAEB C0DA;C0DA;1109 1162 11B9;C0DA;1109 1162 11B9; # (샚; 샚; 샚; 샚; 샚; ) HANGUL SYLLABLE SAEBS C0DB;C0DB;1109 1162 11BA;C0DB;1109 1162 11BA; # (샛; 샛; 샛; 샛; 샛; ) HANGUL SYLLABLE SAES C0DC;C0DC;1109 1162 11BB;C0DC;1109 1162 11BB; # (샜; 샜; 샜; 샜; 샜; ) HANGUL SYLLABLE SAESS C0DD;C0DD;1109 1162 11BC;C0DD;1109 1162 11BC; # (생; 생; 생; 생; 생; ) HANGUL SYLLABLE SAENG C0DE;C0DE;1109 1162 11BD;C0DE;1109 1162 11BD; # (샞; 샞; 샞; 샞; 샞; ) HANGUL SYLLABLE SAEJ C0DF;C0DF;1109 1162 11BE;C0DF;1109 1162 11BE; # (샟; 샟; 샟; 샟; 샟; ) HANGUL SYLLABLE SAEC C0E0;C0E0;1109 1162 11BF;C0E0;1109 1162 11BF; # (샠; 샠; 샠; 샠; 샠; ) HANGUL SYLLABLE SAEK C0E1;C0E1;1109 1162 11C0;C0E1;1109 1162 11C0; # (샡; 샡; 샡; 샡; 샡; ) HANGUL SYLLABLE SAET C0E2;C0E2;1109 1162 11C1;C0E2;1109 1162 11C1; # (샢; 샢; 샢; 샢; 샢; ) HANGUL SYLLABLE SAEP C0E3;C0E3;1109 1162 11C2;C0E3;1109 1162 11C2; # (샣; 샣; 샣; 샣; 샣; ) HANGUL SYLLABLE SAEH C0E4;C0E4;1109 1163;C0E4;1109 1163; # (샤; 샤; 샤; 샤; 샤; ) HANGUL SYLLABLE SYA C0E5;C0E5;1109 1163 11A8;C0E5;1109 1163 11A8; # (샥; 샥; 샥; 샥; 샥; ) HANGUL SYLLABLE SYAG C0E6;C0E6;1109 1163 11A9;C0E6;1109 1163 11A9; # (샦; 샦; 샦; 샦; 샦; ) HANGUL SYLLABLE SYAGG C0E7;C0E7;1109 1163 11AA;C0E7;1109 1163 11AA; # (샧; 샧; 샧; 샧; 샧; ) HANGUL SYLLABLE SYAGS C0E8;C0E8;1109 1163 11AB;C0E8;1109 1163 11AB; # (샨; 샨; 샨; 샨; 샨; ) HANGUL SYLLABLE SYAN C0E9;C0E9;1109 1163 11AC;C0E9;1109 1163 11AC; # (샩; 샩; 샩; 샩; 샩; ) HANGUL SYLLABLE SYANJ C0EA;C0EA;1109 1163 11AD;C0EA;1109 1163 11AD; # (샪; 샪; 샪; 샪; 샪; ) HANGUL SYLLABLE SYANH C0EB;C0EB;1109 1163 11AE;C0EB;1109 1163 11AE; # (샫; 샫; 샫; 샫; 샫; ) HANGUL SYLLABLE SYAD C0EC;C0EC;1109 1163 11AF;C0EC;1109 1163 11AF; # (샬; 샬; 샬; 샬; 샬; ) HANGUL SYLLABLE SYAL C0ED;C0ED;1109 1163 11B0;C0ED;1109 1163 11B0; # (샭; 샭; 샭; 샭; 샭; ) HANGUL SYLLABLE SYALG C0EE;C0EE;1109 1163 11B1;C0EE;1109 1163 11B1; # (샮; 샮; 샮; 샮; 샮; ) HANGUL SYLLABLE SYALM C0EF;C0EF;1109 1163 11B2;C0EF;1109 1163 11B2; # (샯; 샯; 샯; 샯; 샯; ) HANGUL SYLLABLE SYALB C0F0;C0F0;1109 1163 11B3;C0F0;1109 1163 11B3; # (샰; 샰; 샰; 샰; 샰; ) HANGUL SYLLABLE SYALS C0F1;C0F1;1109 1163 11B4;C0F1;1109 1163 11B4; # (샱; 샱; 샱; 샱; 샱; ) HANGUL SYLLABLE SYALT C0F2;C0F2;1109 1163 11B5;C0F2;1109 1163 11B5; # (샲; 샲; 샲; 샲; 샲; ) HANGUL SYLLABLE SYALP C0F3;C0F3;1109 1163 11B6;C0F3;1109 1163 11B6; # (샳; 샳; 샳; 샳; 샳; ) HANGUL SYLLABLE SYALH C0F4;C0F4;1109 1163 11B7;C0F4;1109 1163 11B7; # (샴; 샴; 샴; 샴; 샴; ) HANGUL SYLLABLE SYAM C0F5;C0F5;1109 1163 11B8;C0F5;1109 1163 11B8; # (샵; 샵; 샵; 샵; 샵; ) HANGUL SYLLABLE SYAB C0F6;C0F6;1109 1163 11B9;C0F6;1109 1163 11B9; # (샶; 샶; 샶; 샶; 샶; ) HANGUL SYLLABLE SYABS C0F7;C0F7;1109 1163 11BA;C0F7;1109 1163 11BA; # (샷; 샷; 샷; 샷; 샷; ) HANGUL SYLLABLE SYAS C0F8;C0F8;1109 1163 11BB;C0F8;1109 1163 11BB; # (샸; 샸; 샸; 샸; 샸; ) HANGUL SYLLABLE SYASS C0F9;C0F9;1109 1163 11BC;C0F9;1109 1163 11BC; # (샹; 샹; 샹; 샹; 샹; ) HANGUL SYLLABLE SYANG C0FA;C0FA;1109 1163 11BD;C0FA;1109 1163 11BD; # (샺; 샺; 샺; 샺; 샺; ) HANGUL SYLLABLE SYAJ C0FB;C0FB;1109 1163 11BE;C0FB;1109 1163 11BE; # (샻; 샻; 샻; 샻; 샻; ) HANGUL SYLLABLE SYAC C0FC;C0FC;1109 1163 11BF;C0FC;1109 1163 11BF; # (샼; 샼; 샼; 샼; 샼; ) HANGUL SYLLABLE SYAK C0FD;C0FD;1109 1163 11C0;C0FD;1109 1163 11C0; # (샽; 샽; 샽; 샽; 샽; ) HANGUL SYLLABLE SYAT C0FE;C0FE;1109 1163 11C1;C0FE;1109 1163 11C1; # (샾; 샾; 샾; 샾; 샾; ) HANGUL SYLLABLE SYAP C0FF;C0FF;1109 1163 11C2;C0FF;1109 1163 11C2; # (샿; 샿; 샿; 샿; 샿; ) HANGUL SYLLABLE SYAH C100;C100;1109 1164;C100;1109 1164; # (섀; 섀; 섀; 섀; 섀; ) HANGUL SYLLABLE SYAE C101;C101;1109 1164 11A8;C101;1109 1164 11A8; # (섁; 섁; 섁; 섁; 섁; ) HANGUL SYLLABLE SYAEG C102;C102;1109 1164 11A9;C102;1109 1164 11A9; # (섂; 섂; 섂; 섂; 섂; ) HANGUL SYLLABLE SYAEGG C103;C103;1109 1164 11AA;C103;1109 1164 11AA; # (섃; 섃; 섃; 섃; 섃; ) HANGUL SYLLABLE SYAEGS C104;C104;1109 1164 11AB;C104;1109 1164 11AB; # (섄; 섄; 섄; 섄; 섄; ) HANGUL SYLLABLE SYAEN C105;C105;1109 1164 11AC;C105;1109 1164 11AC; # (섅; 섅; 섅; 섅; 섅; ) HANGUL SYLLABLE SYAENJ C106;C106;1109 1164 11AD;C106;1109 1164 11AD; # (섆; 섆; 섆; 섆; 섆; ) HANGUL SYLLABLE SYAENH C107;C107;1109 1164 11AE;C107;1109 1164 11AE; # (섇; 섇; 섇; 섇; 섇; ) HANGUL SYLLABLE SYAED C108;C108;1109 1164 11AF;C108;1109 1164 11AF; # (섈; 섈; 섈; 섈; 섈; ) HANGUL SYLLABLE SYAEL C109;C109;1109 1164 11B0;C109;1109 1164 11B0; # (섉; 섉; 섉; 섉; 섉; ) HANGUL SYLLABLE SYAELG C10A;C10A;1109 1164 11B1;C10A;1109 1164 11B1; # (섊; 섊; 섊; 섊; 섊; ) HANGUL SYLLABLE SYAELM C10B;C10B;1109 1164 11B2;C10B;1109 1164 11B2; # (섋; 섋; 섋; 섋; 섋; ) HANGUL SYLLABLE SYAELB C10C;C10C;1109 1164 11B3;C10C;1109 1164 11B3; # (섌; 섌; 섌; 섌; 섌; ) HANGUL SYLLABLE SYAELS C10D;C10D;1109 1164 11B4;C10D;1109 1164 11B4; # (섍; 섍; 섍; 섍; 섍; ) HANGUL SYLLABLE SYAELT C10E;C10E;1109 1164 11B5;C10E;1109 1164 11B5; # (섎; 섎; 섎; 섎; 섎; ) HANGUL SYLLABLE SYAELP C10F;C10F;1109 1164 11B6;C10F;1109 1164 11B6; # (섏; 섏; 섏; 섏; 섏; ) HANGUL SYLLABLE SYAELH C110;C110;1109 1164 11B7;C110;1109 1164 11B7; # (섐; 섐; 섐; 섐; 섐; ) HANGUL SYLLABLE SYAEM C111;C111;1109 1164 11B8;C111;1109 1164 11B8; # (섑; 섑; 섑; 섑; 섑; ) HANGUL SYLLABLE SYAEB C112;C112;1109 1164 11B9;C112;1109 1164 11B9; # (섒; 섒; 섒; 섒; 섒; ) HANGUL SYLLABLE SYAEBS C113;C113;1109 1164 11BA;C113;1109 1164 11BA; # (섓; 섓; 섓; 섓; 섓; ) HANGUL SYLLABLE SYAES C114;C114;1109 1164 11BB;C114;1109 1164 11BB; # (섔; 섔; 섔; 섔; 섔; ) HANGUL SYLLABLE SYAESS C115;C115;1109 1164 11BC;C115;1109 1164 11BC; # (섕; 섕; 섕; 섕; 섕; ) HANGUL SYLLABLE SYAENG C116;C116;1109 1164 11BD;C116;1109 1164 11BD; # (섖; 섖; 섖; 섖; 섖; ) HANGUL SYLLABLE SYAEJ C117;C117;1109 1164 11BE;C117;1109 1164 11BE; # (섗; 섗; 섗; 섗; 섗; ) HANGUL SYLLABLE SYAEC C118;C118;1109 1164 11BF;C118;1109 1164 11BF; # (섘; 섘; 섘; 섘; 섘; ) HANGUL SYLLABLE SYAEK C119;C119;1109 1164 11C0;C119;1109 1164 11C0; # (섙; 섙; 섙; 섙; 섙; ) HANGUL SYLLABLE SYAET C11A;C11A;1109 1164 11C1;C11A;1109 1164 11C1; # (섚; 섚; 섚; 섚; 섚; ) HANGUL SYLLABLE SYAEP C11B;C11B;1109 1164 11C2;C11B;1109 1164 11C2; # (섛; 섛; 섛; 섛; 섛; ) HANGUL SYLLABLE SYAEH C11C;C11C;1109 1165;C11C;1109 1165; # (서; 서; 서; 서; 서; ) HANGUL SYLLABLE SEO C11D;C11D;1109 1165 11A8;C11D;1109 1165 11A8; # (석; 석; 석; 석; 석; ) HANGUL SYLLABLE SEOG C11E;C11E;1109 1165 11A9;C11E;1109 1165 11A9; # (섞; 섞; 섞; 섞; 섞; ) HANGUL SYLLABLE SEOGG C11F;C11F;1109 1165 11AA;C11F;1109 1165 11AA; # (섟; 섟; 섟; 섟; 섟; ) HANGUL SYLLABLE SEOGS C120;C120;1109 1165 11AB;C120;1109 1165 11AB; # (선; 선; 선; 선; 선; ) HANGUL SYLLABLE SEON C121;C121;1109 1165 11AC;C121;1109 1165 11AC; # (섡; 섡; 섡; 섡; 섡; ) HANGUL SYLLABLE SEONJ C122;C122;1109 1165 11AD;C122;1109 1165 11AD; # (섢; 섢; 섢; 섢; 섢; ) HANGUL SYLLABLE SEONH C123;C123;1109 1165 11AE;C123;1109 1165 11AE; # (섣; 섣; 섣; 섣; 섣; ) HANGUL SYLLABLE SEOD C124;C124;1109 1165 11AF;C124;1109 1165 11AF; # (설; 설; 설; 설; 설; ) HANGUL SYLLABLE SEOL C125;C125;1109 1165 11B0;C125;1109 1165 11B0; # (섥; 섥; 섥; 섥; 섥; ) HANGUL SYLLABLE SEOLG C126;C126;1109 1165 11B1;C126;1109 1165 11B1; # (섦; 섦; 섦; 섦; 섦; ) HANGUL SYLLABLE SEOLM C127;C127;1109 1165 11B2;C127;1109 1165 11B2; # (섧; 섧; 섧; 섧; 섧; ) HANGUL SYLLABLE SEOLB C128;C128;1109 1165 11B3;C128;1109 1165 11B3; # (섨; 섨; 섨; 섨; 섨; ) HANGUL SYLLABLE SEOLS C129;C129;1109 1165 11B4;C129;1109 1165 11B4; # (섩; 섩; 섩; 섩; 섩; ) HANGUL SYLLABLE SEOLT C12A;C12A;1109 1165 11B5;C12A;1109 1165 11B5; # (섪; 섪; 섪; 섪; 섪; ) HANGUL SYLLABLE SEOLP C12B;C12B;1109 1165 11B6;C12B;1109 1165 11B6; # (섫; 섫; 섫; 섫; 섫; ) HANGUL SYLLABLE SEOLH C12C;C12C;1109 1165 11B7;C12C;1109 1165 11B7; # (섬; 섬; 섬; 섬; 섬; ) HANGUL SYLLABLE SEOM C12D;C12D;1109 1165 11B8;C12D;1109 1165 11B8; # (섭; 섭; 섭; 섭; 섭; ) HANGUL SYLLABLE SEOB C12E;C12E;1109 1165 11B9;C12E;1109 1165 11B9; # (섮; 섮; 섮; 섮; 섮; ) HANGUL SYLLABLE SEOBS C12F;C12F;1109 1165 11BA;C12F;1109 1165 11BA; # (섯; 섯; 섯; 섯; 섯; ) HANGUL SYLLABLE SEOS C130;C130;1109 1165 11BB;C130;1109 1165 11BB; # (섰; 섰; 섰; 섰; 섰; ) HANGUL SYLLABLE SEOSS C131;C131;1109 1165 11BC;C131;1109 1165 11BC; # (성; 성; 성; 성; 성; ) HANGUL SYLLABLE SEONG C132;C132;1109 1165 11BD;C132;1109 1165 11BD; # (섲; 섲; 섲; 섲; 섲; ) HANGUL SYLLABLE SEOJ C133;C133;1109 1165 11BE;C133;1109 1165 11BE; # (섳; 섳; 섳; 섳; 섳; ) HANGUL SYLLABLE SEOC C134;C134;1109 1165 11BF;C134;1109 1165 11BF; # (섴; 섴; 섴; 섴; 섴; ) HANGUL SYLLABLE SEOK C135;C135;1109 1165 11C0;C135;1109 1165 11C0; # (섵; 섵; 섵; 섵; 섵; ) HANGUL SYLLABLE SEOT C136;C136;1109 1165 11C1;C136;1109 1165 11C1; # (섶; 섶; 섶; 섶; 섶; ) HANGUL SYLLABLE SEOP C137;C137;1109 1165 11C2;C137;1109 1165 11C2; # (섷; 섷; 섷; 섷; 섷; ) HANGUL SYLLABLE SEOH C138;C138;1109 1166;C138;1109 1166; # (세; 세; 세; 세; 세; ) HANGUL SYLLABLE SE C139;C139;1109 1166 11A8;C139;1109 1166 11A8; # (섹; 섹; 섹; 섹; 섹; ) HANGUL SYLLABLE SEG C13A;C13A;1109 1166 11A9;C13A;1109 1166 11A9; # (섺; 섺; 섺; 섺; 섺; ) HANGUL SYLLABLE SEGG C13B;C13B;1109 1166 11AA;C13B;1109 1166 11AA; # (섻; 섻; 섻; 섻; 섻; ) HANGUL SYLLABLE SEGS C13C;C13C;1109 1166 11AB;C13C;1109 1166 11AB; # (센; 센; 센; 센; 센; ) HANGUL SYLLABLE SEN C13D;C13D;1109 1166 11AC;C13D;1109 1166 11AC; # (섽; 섽; 섽; 섽; 섽; ) HANGUL SYLLABLE SENJ C13E;C13E;1109 1166 11AD;C13E;1109 1166 11AD; # (섾; 섾; 섾; 섾; 섾; ) HANGUL SYLLABLE SENH C13F;C13F;1109 1166 11AE;C13F;1109 1166 11AE; # (섿; 섿; 섿; 섿; 섿; ) HANGUL SYLLABLE SED C140;C140;1109 1166 11AF;C140;1109 1166 11AF; # (셀; 셀; 셀; 셀; 셀; ) HANGUL SYLLABLE SEL C141;C141;1109 1166 11B0;C141;1109 1166 11B0; # (셁; 셁; 셁; 셁; 셁; ) HANGUL SYLLABLE SELG C142;C142;1109 1166 11B1;C142;1109 1166 11B1; # (셂; 셂; 셂; 셂; 셂; ) HANGUL SYLLABLE SELM C143;C143;1109 1166 11B2;C143;1109 1166 11B2; # (셃; 셃; 셃; 셃; 셃; ) HANGUL SYLLABLE SELB C144;C144;1109 1166 11B3;C144;1109 1166 11B3; # (셄; 셄; 셄; 셄; 셄; ) HANGUL SYLLABLE SELS C145;C145;1109 1166 11B4;C145;1109 1166 11B4; # (셅; 셅; 셅; 셅; 셅; ) HANGUL SYLLABLE SELT C146;C146;1109 1166 11B5;C146;1109 1166 11B5; # (셆; 셆; 셆; 셆; 셆; ) HANGUL SYLLABLE SELP C147;C147;1109 1166 11B6;C147;1109 1166 11B6; # (셇; 셇; 셇; 셇; 셇; ) HANGUL SYLLABLE SELH C148;C148;1109 1166 11B7;C148;1109 1166 11B7; # (셈; 셈; 셈; 셈; 셈; ) HANGUL SYLLABLE SEM C149;C149;1109 1166 11B8;C149;1109 1166 11B8; # (셉; 셉; 셉; 셉; 셉; ) HANGUL SYLLABLE SEB C14A;C14A;1109 1166 11B9;C14A;1109 1166 11B9; # (셊; 셊; 셊; 셊; 셊; ) HANGUL SYLLABLE SEBS C14B;C14B;1109 1166 11BA;C14B;1109 1166 11BA; # (셋; 셋; 셋; 셋; 셋; ) HANGUL SYLLABLE SES C14C;C14C;1109 1166 11BB;C14C;1109 1166 11BB; # (셌; 셌; 셌; 셌; 셌; ) HANGUL SYLLABLE SESS C14D;C14D;1109 1166 11BC;C14D;1109 1166 11BC; # (셍; 셍; 셍; 셍; 셍; ) HANGUL SYLLABLE SENG C14E;C14E;1109 1166 11BD;C14E;1109 1166 11BD; # (셎; 셎; 셎; 셎; 셎; ) HANGUL SYLLABLE SEJ C14F;C14F;1109 1166 11BE;C14F;1109 1166 11BE; # (셏; 셏; 셏; 셏; 셏; ) HANGUL SYLLABLE SEC C150;C150;1109 1166 11BF;C150;1109 1166 11BF; # (셐; 셐; 셐; 셐; 셐; ) HANGUL SYLLABLE SEK C151;C151;1109 1166 11C0;C151;1109 1166 11C0; # (셑; 셑; 셑; 셑; 셑; ) HANGUL SYLLABLE SET C152;C152;1109 1166 11C1;C152;1109 1166 11C1; # (셒; 셒; 셒; 셒; 셒; ) HANGUL SYLLABLE SEP C153;C153;1109 1166 11C2;C153;1109 1166 11C2; # (셓; 셓; 셓; 셓; 셓; ) HANGUL SYLLABLE SEH C154;C154;1109 1167;C154;1109 1167; # (셔; 셔; 셔; 셔; 셔; ) HANGUL SYLLABLE SYEO C155;C155;1109 1167 11A8;C155;1109 1167 11A8; # (셕; 셕; 셕; 셕; 셕; ) HANGUL SYLLABLE SYEOG C156;C156;1109 1167 11A9;C156;1109 1167 11A9; # (셖; 셖; 셖; 셖; 셖; ) HANGUL SYLLABLE SYEOGG C157;C157;1109 1167 11AA;C157;1109 1167 11AA; # (셗; 셗; 셗; 셗; 셗; ) HANGUL SYLLABLE SYEOGS C158;C158;1109 1167 11AB;C158;1109 1167 11AB; # (션; 션; 션; 션; 션; ) HANGUL SYLLABLE SYEON C159;C159;1109 1167 11AC;C159;1109 1167 11AC; # (셙; 셙; 셙; 셙; 셙; ) HANGUL SYLLABLE SYEONJ C15A;C15A;1109 1167 11AD;C15A;1109 1167 11AD; # (셚; 셚; 셚; 셚; 셚; ) HANGUL SYLLABLE SYEONH C15B;C15B;1109 1167 11AE;C15B;1109 1167 11AE; # (셛; 셛; 셛; 셛; 셛; ) HANGUL SYLLABLE SYEOD C15C;C15C;1109 1167 11AF;C15C;1109 1167 11AF; # (셜; 셜; 셜; 셜; 셜; ) HANGUL SYLLABLE SYEOL C15D;C15D;1109 1167 11B0;C15D;1109 1167 11B0; # (셝; 셝; 셝; 셝; 셝; ) HANGUL SYLLABLE SYEOLG C15E;C15E;1109 1167 11B1;C15E;1109 1167 11B1; # (셞; 셞; 셞; 셞; 셞; ) HANGUL SYLLABLE SYEOLM C15F;C15F;1109 1167 11B2;C15F;1109 1167 11B2; # (셟; 셟; 셟; 셟; 셟; ) HANGUL SYLLABLE SYEOLB C160;C160;1109 1167 11B3;C160;1109 1167 11B3; # (셠; 셠; 셠; 셠; 셠; ) HANGUL SYLLABLE SYEOLS C161;C161;1109 1167 11B4;C161;1109 1167 11B4; # (셡; 셡; 셡; 셡; 셡; ) HANGUL SYLLABLE SYEOLT C162;C162;1109 1167 11B5;C162;1109 1167 11B5; # (셢; 셢; 셢; 셢; 셢; ) HANGUL SYLLABLE SYEOLP C163;C163;1109 1167 11B6;C163;1109 1167 11B6; # (셣; 셣; 셣; 셣; 셣; ) HANGUL SYLLABLE SYEOLH C164;C164;1109 1167 11B7;C164;1109 1167 11B7; # (셤; 셤; 셤; 셤; 셤; ) HANGUL SYLLABLE SYEOM C165;C165;1109 1167 11B8;C165;1109 1167 11B8; # (셥; 셥; 셥; 셥; 셥; ) HANGUL SYLLABLE SYEOB C166;C166;1109 1167 11B9;C166;1109 1167 11B9; # (셦; 셦; 셦; 셦; 셦; ) HANGUL SYLLABLE SYEOBS C167;C167;1109 1167 11BA;C167;1109 1167 11BA; # (셧; 셧; 셧; 셧; 셧; ) HANGUL SYLLABLE SYEOS C168;C168;1109 1167 11BB;C168;1109 1167 11BB; # (셨; 셨; 셨; 셨; 셨; ) HANGUL SYLLABLE SYEOSS C169;C169;1109 1167 11BC;C169;1109 1167 11BC; # (셩; 셩; 셩; 셩; 셩; ) HANGUL SYLLABLE SYEONG C16A;C16A;1109 1167 11BD;C16A;1109 1167 11BD; # (셪; 셪; 셪; 셪; 셪; ) HANGUL SYLLABLE SYEOJ C16B;C16B;1109 1167 11BE;C16B;1109 1167 11BE; # (셫; 셫; 셫; 셫; 셫; ) HANGUL SYLLABLE SYEOC C16C;C16C;1109 1167 11BF;C16C;1109 1167 11BF; # (셬; 셬; 셬; 셬; 셬; ) HANGUL SYLLABLE SYEOK C16D;C16D;1109 1167 11C0;C16D;1109 1167 11C0; # (셭; 셭; 셭; 셭; 셭; ) HANGUL SYLLABLE SYEOT C16E;C16E;1109 1167 11C1;C16E;1109 1167 11C1; # (셮; 셮; 셮; 셮; 셮; ) HANGUL SYLLABLE SYEOP C16F;C16F;1109 1167 11C2;C16F;1109 1167 11C2; # (셯; 셯; 셯; 셯; 셯; ) HANGUL SYLLABLE SYEOH C170;C170;1109 1168;C170;1109 1168; # (셰; 셰; 셰; 셰; 셰; ) HANGUL SYLLABLE SYE C171;C171;1109 1168 11A8;C171;1109 1168 11A8; # (셱; 셱; 셱; 셱; 셱; ) HANGUL SYLLABLE SYEG C172;C172;1109 1168 11A9;C172;1109 1168 11A9; # (셲; 셲; 셲; 셲; 셲; ) HANGUL SYLLABLE SYEGG C173;C173;1109 1168 11AA;C173;1109 1168 11AA; # (셳; 셳; 셳; 셳; 셳; ) HANGUL SYLLABLE SYEGS C174;C174;1109 1168 11AB;C174;1109 1168 11AB; # (셴; 셴; 셴; 셴; 셴; ) HANGUL SYLLABLE SYEN C175;C175;1109 1168 11AC;C175;1109 1168 11AC; # (셵; 셵; 셵; 셵; 셵; ) HANGUL SYLLABLE SYENJ C176;C176;1109 1168 11AD;C176;1109 1168 11AD; # (셶; 셶; 셶; 셶; 셶; ) HANGUL SYLLABLE SYENH C177;C177;1109 1168 11AE;C177;1109 1168 11AE; # (셷; 셷; 셷; 셷; 셷; ) HANGUL SYLLABLE SYED C178;C178;1109 1168 11AF;C178;1109 1168 11AF; # (셸; 셸; 셸; 셸; 셸; ) HANGUL SYLLABLE SYEL C179;C179;1109 1168 11B0;C179;1109 1168 11B0; # (셹; 셹; 셹; 셹; 셹; ) HANGUL SYLLABLE SYELG C17A;C17A;1109 1168 11B1;C17A;1109 1168 11B1; # (셺; 셺; 셺; 셺; 셺; ) HANGUL SYLLABLE SYELM C17B;C17B;1109 1168 11B2;C17B;1109 1168 11B2; # (셻; 셻; 셻; 셻; 셻; ) HANGUL SYLLABLE SYELB C17C;C17C;1109 1168 11B3;C17C;1109 1168 11B3; # (셼; 셼; 셼; 셼; 셼; ) HANGUL SYLLABLE SYELS C17D;C17D;1109 1168 11B4;C17D;1109 1168 11B4; # (셽; 셽; 셽; 셽; 셽; ) HANGUL SYLLABLE SYELT C17E;C17E;1109 1168 11B5;C17E;1109 1168 11B5; # (셾; 셾; 셾; 셾; 셾; ) HANGUL SYLLABLE SYELP C17F;C17F;1109 1168 11B6;C17F;1109 1168 11B6; # (셿; 셿; 셿; 셿; 셿; ) HANGUL SYLLABLE SYELH C180;C180;1109 1168 11B7;C180;1109 1168 11B7; # (솀; 솀; 솀; 솀; 솀; ) HANGUL SYLLABLE SYEM C181;C181;1109 1168 11B8;C181;1109 1168 11B8; # (솁; 솁; 솁; 솁; 솁; ) HANGUL SYLLABLE SYEB C182;C182;1109 1168 11B9;C182;1109 1168 11B9; # (솂; 솂; 솂; 솂; 솂; ) HANGUL SYLLABLE SYEBS C183;C183;1109 1168 11BA;C183;1109 1168 11BA; # (솃; 솃; 솃; 솃; 솃; ) HANGUL SYLLABLE SYES C184;C184;1109 1168 11BB;C184;1109 1168 11BB; # (솄; 솄; 솄; 솄; 솄; ) HANGUL SYLLABLE SYESS C185;C185;1109 1168 11BC;C185;1109 1168 11BC; # (솅; 솅; 솅; 솅; 솅; ) HANGUL SYLLABLE SYENG C186;C186;1109 1168 11BD;C186;1109 1168 11BD; # (솆; 솆; 솆; 솆; 솆; ) HANGUL SYLLABLE SYEJ C187;C187;1109 1168 11BE;C187;1109 1168 11BE; # (솇; 솇; 솇; 솇; 솇; ) HANGUL SYLLABLE SYEC C188;C188;1109 1168 11BF;C188;1109 1168 11BF; # (솈; 솈; 솈; 솈; 솈; ) HANGUL SYLLABLE SYEK C189;C189;1109 1168 11C0;C189;1109 1168 11C0; # (솉; 솉; 솉; 솉; 솉; ) HANGUL SYLLABLE SYET C18A;C18A;1109 1168 11C1;C18A;1109 1168 11C1; # (솊; 솊; 솊; 솊; 솊; ) HANGUL SYLLABLE SYEP C18B;C18B;1109 1168 11C2;C18B;1109 1168 11C2; # (솋; 솋; 솋; 솋; 솋; ) HANGUL SYLLABLE SYEH C18C;C18C;1109 1169;C18C;1109 1169; # (소; 소; 소; 소; 소; ) HANGUL SYLLABLE SO C18D;C18D;1109 1169 11A8;C18D;1109 1169 11A8; # (속; 속; 속; 속; 속; ) HANGUL SYLLABLE SOG C18E;C18E;1109 1169 11A9;C18E;1109 1169 11A9; # (솎; 솎; 솎; 솎; 솎; ) HANGUL SYLLABLE SOGG C18F;C18F;1109 1169 11AA;C18F;1109 1169 11AA; # (솏; 솏; 솏; 솏; 솏; ) HANGUL SYLLABLE SOGS C190;C190;1109 1169 11AB;C190;1109 1169 11AB; # (손; 손; 손; 손; 손; ) HANGUL SYLLABLE SON C191;C191;1109 1169 11AC;C191;1109 1169 11AC; # (솑; 솑; 솑; 솑; 솑; ) HANGUL SYLLABLE SONJ C192;C192;1109 1169 11AD;C192;1109 1169 11AD; # (솒; 솒; 솒; 솒; 솒; ) HANGUL SYLLABLE SONH C193;C193;1109 1169 11AE;C193;1109 1169 11AE; # (솓; 솓; 솓; 솓; 솓; ) HANGUL SYLLABLE SOD C194;C194;1109 1169 11AF;C194;1109 1169 11AF; # (솔; 솔; 솔; 솔; 솔; ) HANGUL SYLLABLE SOL C195;C195;1109 1169 11B0;C195;1109 1169 11B0; # (솕; 솕; 솕; 솕; 솕; ) HANGUL SYLLABLE SOLG C196;C196;1109 1169 11B1;C196;1109 1169 11B1; # (솖; 솖; 솖; 솖; 솖; ) HANGUL SYLLABLE SOLM C197;C197;1109 1169 11B2;C197;1109 1169 11B2; # (솗; 솗; 솗; 솗; 솗; ) HANGUL SYLLABLE SOLB C198;C198;1109 1169 11B3;C198;1109 1169 11B3; # (솘; 솘; 솘; 솘; 솘; ) HANGUL SYLLABLE SOLS C199;C199;1109 1169 11B4;C199;1109 1169 11B4; # (솙; 솙; 솙; 솙; 솙; ) HANGUL SYLLABLE SOLT C19A;C19A;1109 1169 11B5;C19A;1109 1169 11B5; # (솚; 솚; 솚; 솚; 솚; ) HANGUL SYLLABLE SOLP C19B;C19B;1109 1169 11B6;C19B;1109 1169 11B6; # (솛; 솛; 솛; 솛; 솛; ) HANGUL SYLLABLE SOLH C19C;C19C;1109 1169 11B7;C19C;1109 1169 11B7; # (솜; 솜; 솜; 솜; 솜; ) HANGUL SYLLABLE SOM C19D;C19D;1109 1169 11B8;C19D;1109 1169 11B8; # (솝; 솝; 솝; 솝; 솝; ) HANGUL SYLLABLE SOB C19E;C19E;1109 1169 11B9;C19E;1109 1169 11B9; # (솞; 솞; 솞; 솞; 솞; ) HANGUL SYLLABLE SOBS C19F;C19F;1109 1169 11BA;C19F;1109 1169 11BA; # (솟; 솟; 솟; 솟; 솟; ) HANGUL SYLLABLE SOS C1A0;C1A0;1109 1169 11BB;C1A0;1109 1169 11BB; # (솠; 솠; 솠; 솠; 솠; ) HANGUL SYLLABLE SOSS C1A1;C1A1;1109 1169 11BC;C1A1;1109 1169 11BC; # (송; 송; 송; 송; 송; ) HANGUL SYLLABLE SONG C1A2;C1A2;1109 1169 11BD;C1A2;1109 1169 11BD; # (솢; 솢; 솢; 솢; 솢; ) HANGUL SYLLABLE SOJ C1A3;C1A3;1109 1169 11BE;C1A3;1109 1169 11BE; # (솣; 솣; 솣; 솣; 솣; ) HANGUL SYLLABLE SOC C1A4;C1A4;1109 1169 11BF;C1A4;1109 1169 11BF; # (솤; 솤; 솤; 솤; 솤; ) HANGUL SYLLABLE SOK C1A5;C1A5;1109 1169 11C0;C1A5;1109 1169 11C0; # (솥; 솥; 솥; 솥; 솥; ) HANGUL SYLLABLE SOT C1A6;C1A6;1109 1169 11C1;C1A6;1109 1169 11C1; # (솦; 솦; 솦; 솦; 솦; ) HANGUL SYLLABLE SOP C1A7;C1A7;1109 1169 11C2;C1A7;1109 1169 11C2; # (솧; 솧; 솧; 솧; 솧; ) HANGUL SYLLABLE SOH C1A8;C1A8;1109 116A;C1A8;1109 116A; # (솨; 솨; 솨; 솨; 솨; ) HANGUL SYLLABLE SWA C1A9;C1A9;1109 116A 11A8;C1A9;1109 116A 11A8; # (솩; 솩; 솩; 솩; 솩; ) HANGUL SYLLABLE SWAG C1AA;C1AA;1109 116A 11A9;C1AA;1109 116A 11A9; # (솪; 솪; 솪; 솪; 솪; ) HANGUL SYLLABLE SWAGG C1AB;C1AB;1109 116A 11AA;C1AB;1109 116A 11AA; # (솫; 솫; 솫; 솫; 솫; ) HANGUL SYLLABLE SWAGS C1AC;C1AC;1109 116A 11AB;C1AC;1109 116A 11AB; # (솬; 솬; 솬; 솬; 솬; ) HANGUL SYLLABLE SWAN C1AD;C1AD;1109 116A 11AC;C1AD;1109 116A 11AC; # (솭; 솭; 솭; 솭; 솭; ) HANGUL SYLLABLE SWANJ C1AE;C1AE;1109 116A 11AD;C1AE;1109 116A 11AD; # (솮; 솮; 솮; 솮; 솮; ) HANGUL SYLLABLE SWANH C1AF;C1AF;1109 116A 11AE;C1AF;1109 116A 11AE; # (솯; 솯; 솯; 솯; 솯; ) HANGUL SYLLABLE SWAD C1B0;C1B0;1109 116A 11AF;C1B0;1109 116A 11AF; # (솰; 솰; 솰; 솰; 솰; ) HANGUL SYLLABLE SWAL C1B1;C1B1;1109 116A 11B0;C1B1;1109 116A 11B0; # (솱; 솱; 솱; 솱; 솱; ) HANGUL SYLLABLE SWALG C1B2;C1B2;1109 116A 11B1;C1B2;1109 116A 11B1; # (솲; 솲; 솲; 솲; 솲; ) HANGUL SYLLABLE SWALM C1B3;C1B3;1109 116A 11B2;C1B3;1109 116A 11B2; # (솳; 솳; 솳; 솳; 솳; ) HANGUL SYLLABLE SWALB C1B4;C1B4;1109 116A 11B3;C1B4;1109 116A 11B3; # (솴; 솴; 솴; 솴; 솴; ) HANGUL SYLLABLE SWALS C1B5;C1B5;1109 116A 11B4;C1B5;1109 116A 11B4; # (솵; 솵; 솵; 솵; 솵; ) HANGUL SYLLABLE SWALT C1B6;C1B6;1109 116A 11B5;C1B6;1109 116A 11B5; # (솶; 솶; 솶; 솶; 솶; ) HANGUL SYLLABLE SWALP C1B7;C1B7;1109 116A 11B6;C1B7;1109 116A 11B6; # (솷; 솷; 솷; 솷; 솷; ) HANGUL SYLLABLE SWALH C1B8;C1B8;1109 116A 11B7;C1B8;1109 116A 11B7; # (솸; 솸; 솸; 솸; 솸; ) HANGUL SYLLABLE SWAM C1B9;C1B9;1109 116A 11B8;C1B9;1109 116A 11B8; # (솹; 솹; 솹; 솹; 솹; ) HANGUL SYLLABLE SWAB C1BA;C1BA;1109 116A 11B9;C1BA;1109 116A 11B9; # (솺; 솺; 솺; 솺; 솺; ) HANGUL SYLLABLE SWABS C1BB;C1BB;1109 116A 11BA;C1BB;1109 116A 11BA; # (솻; 솻; 솻; 솻; 솻; ) HANGUL SYLLABLE SWAS C1BC;C1BC;1109 116A 11BB;C1BC;1109 116A 11BB; # (솼; 솼; 솼; 솼; 솼; ) HANGUL SYLLABLE SWASS C1BD;C1BD;1109 116A 11BC;C1BD;1109 116A 11BC; # (솽; 솽; 솽; 솽; 솽; ) HANGUL SYLLABLE SWANG C1BE;C1BE;1109 116A 11BD;C1BE;1109 116A 11BD; # (솾; 솾; 솾; 솾; 솾; ) HANGUL SYLLABLE SWAJ C1BF;C1BF;1109 116A 11BE;C1BF;1109 116A 11BE; # (솿; 솿; 솿; 솿; 솿; ) HANGUL SYLLABLE SWAC C1C0;C1C0;1109 116A 11BF;C1C0;1109 116A 11BF; # (쇀; 쇀; 쇀; 쇀; 쇀; ) HANGUL SYLLABLE SWAK C1C1;C1C1;1109 116A 11C0;C1C1;1109 116A 11C0; # (쇁; 쇁; 쇁; 쇁; 쇁; ) HANGUL SYLLABLE SWAT C1C2;C1C2;1109 116A 11C1;C1C2;1109 116A 11C1; # (쇂; 쇂; 쇂; 쇂; 쇂; ) HANGUL SYLLABLE SWAP C1C3;C1C3;1109 116A 11C2;C1C3;1109 116A 11C2; # (쇃; 쇃; 쇃; 쇃; 쇃; ) HANGUL SYLLABLE SWAH C1C4;C1C4;1109 116B;C1C4;1109 116B; # (쇄; 쇄; 쇄; 쇄; 쇄; ) HANGUL SYLLABLE SWAE C1C5;C1C5;1109 116B 11A8;C1C5;1109 116B 11A8; # (쇅; 쇅; 쇅; 쇅; 쇅; ) HANGUL SYLLABLE SWAEG C1C6;C1C6;1109 116B 11A9;C1C6;1109 116B 11A9; # (쇆; 쇆; 쇆; 쇆; 쇆; ) HANGUL SYLLABLE SWAEGG C1C7;C1C7;1109 116B 11AA;C1C7;1109 116B 11AA; # (쇇; 쇇; 쇇; 쇇; 쇇; ) HANGUL SYLLABLE SWAEGS C1C8;C1C8;1109 116B 11AB;C1C8;1109 116B 11AB; # (쇈; 쇈; 쇈; 쇈; 쇈; ) HANGUL SYLLABLE SWAEN C1C9;C1C9;1109 116B 11AC;C1C9;1109 116B 11AC; # (쇉; 쇉; 쇉; 쇉; 쇉; ) HANGUL SYLLABLE SWAENJ C1CA;C1CA;1109 116B 11AD;C1CA;1109 116B 11AD; # (쇊; 쇊; 쇊; 쇊; 쇊; ) HANGUL SYLLABLE SWAENH C1CB;C1CB;1109 116B 11AE;C1CB;1109 116B 11AE; # (쇋; 쇋; 쇋; 쇋; 쇋; ) HANGUL SYLLABLE SWAED C1CC;C1CC;1109 116B 11AF;C1CC;1109 116B 11AF; # (쇌; 쇌; 쇌; 쇌; 쇌; ) HANGUL SYLLABLE SWAEL C1CD;C1CD;1109 116B 11B0;C1CD;1109 116B 11B0; # (쇍; 쇍; 쇍; 쇍; 쇍; ) HANGUL SYLLABLE SWAELG C1CE;C1CE;1109 116B 11B1;C1CE;1109 116B 11B1; # (쇎; 쇎; 쇎; 쇎; 쇎; ) HANGUL SYLLABLE SWAELM C1CF;C1CF;1109 116B 11B2;C1CF;1109 116B 11B2; # (쇏; 쇏; 쇏; 쇏; 쇏; ) HANGUL SYLLABLE SWAELB C1D0;C1D0;1109 116B 11B3;C1D0;1109 116B 11B3; # (쇐; 쇐; 쇐; 쇐; 쇐; ) HANGUL SYLLABLE SWAELS C1D1;C1D1;1109 116B 11B4;C1D1;1109 116B 11B4; # (쇑; 쇑; 쇑; 쇑; 쇑; ) HANGUL SYLLABLE SWAELT C1D2;C1D2;1109 116B 11B5;C1D2;1109 116B 11B5; # (쇒; 쇒; 쇒; 쇒; 쇒; ) HANGUL SYLLABLE SWAELP C1D3;C1D3;1109 116B 11B6;C1D3;1109 116B 11B6; # (쇓; 쇓; 쇓; 쇓; 쇓; ) HANGUL SYLLABLE SWAELH C1D4;C1D4;1109 116B 11B7;C1D4;1109 116B 11B7; # (쇔; 쇔; 쇔; 쇔; 쇔; ) HANGUL SYLLABLE SWAEM C1D5;C1D5;1109 116B 11B8;C1D5;1109 116B 11B8; # (쇕; 쇕; 쇕; 쇕; 쇕; ) HANGUL SYLLABLE SWAEB C1D6;C1D6;1109 116B 11B9;C1D6;1109 116B 11B9; # (쇖; 쇖; 쇖; 쇖; 쇖; ) HANGUL SYLLABLE SWAEBS C1D7;C1D7;1109 116B 11BA;C1D7;1109 116B 11BA; # (쇗; 쇗; 쇗; 쇗; 쇗; ) HANGUL SYLLABLE SWAES C1D8;C1D8;1109 116B 11BB;C1D8;1109 116B 11BB; # (쇘; 쇘; 쇘; 쇘; 쇘; ) HANGUL SYLLABLE SWAESS C1D9;C1D9;1109 116B 11BC;C1D9;1109 116B 11BC; # (쇙; 쇙; 쇙; 쇙; 쇙; ) HANGUL SYLLABLE SWAENG C1DA;C1DA;1109 116B 11BD;C1DA;1109 116B 11BD; # (쇚; 쇚; 쇚; 쇚; 쇚; ) HANGUL SYLLABLE SWAEJ C1DB;C1DB;1109 116B 11BE;C1DB;1109 116B 11BE; # (쇛; 쇛; 쇛; 쇛; 쇛; ) HANGUL SYLLABLE SWAEC C1DC;C1DC;1109 116B 11BF;C1DC;1109 116B 11BF; # (쇜; 쇜; 쇜; 쇜; 쇜; ) HANGUL SYLLABLE SWAEK C1DD;C1DD;1109 116B 11C0;C1DD;1109 116B 11C0; # (쇝; 쇝; 쇝; 쇝; 쇝; ) HANGUL SYLLABLE SWAET C1DE;C1DE;1109 116B 11C1;C1DE;1109 116B 11C1; # (쇞; 쇞; 쇞; 쇞; 쇞; ) HANGUL SYLLABLE SWAEP C1DF;C1DF;1109 116B 11C2;C1DF;1109 116B 11C2; # (쇟; 쇟; 쇟; 쇟; 쇟; ) HANGUL SYLLABLE SWAEH C1E0;C1E0;1109 116C;C1E0;1109 116C; # (쇠; 쇠; 쇠; 쇠; 쇠; ) HANGUL SYLLABLE SOE C1E1;C1E1;1109 116C 11A8;C1E1;1109 116C 11A8; # (쇡; 쇡; 쇡; 쇡; 쇡; ) HANGUL SYLLABLE SOEG C1E2;C1E2;1109 116C 11A9;C1E2;1109 116C 11A9; # (쇢; 쇢; 쇢; 쇢; 쇢; ) HANGUL SYLLABLE SOEGG C1E3;C1E3;1109 116C 11AA;C1E3;1109 116C 11AA; # (쇣; 쇣; 쇣; 쇣; 쇣; ) HANGUL SYLLABLE SOEGS C1E4;C1E4;1109 116C 11AB;C1E4;1109 116C 11AB; # (쇤; 쇤; 쇤; 쇤; 쇤; ) HANGUL SYLLABLE SOEN C1E5;C1E5;1109 116C 11AC;C1E5;1109 116C 11AC; # (쇥; 쇥; 쇥; 쇥; 쇥; ) HANGUL SYLLABLE SOENJ C1E6;C1E6;1109 116C 11AD;C1E6;1109 116C 11AD; # (쇦; 쇦; 쇦; 쇦; 쇦; ) HANGUL SYLLABLE SOENH C1E7;C1E7;1109 116C 11AE;C1E7;1109 116C 11AE; # (쇧; 쇧; 쇧; 쇧; 쇧; ) HANGUL SYLLABLE SOED C1E8;C1E8;1109 116C 11AF;C1E8;1109 116C 11AF; # (쇨; 쇨; 쇨; 쇨; 쇨; ) HANGUL SYLLABLE SOEL C1E9;C1E9;1109 116C 11B0;C1E9;1109 116C 11B0; # (쇩; 쇩; 쇩; 쇩; 쇩; ) HANGUL SYLLABLE SOELG C1EA;C1EA;1109 116C 11B1;C1EA;1109 116C 11B1; # (쇪; 쇪; 쇪; 쇪; 쇪; ) HANGUL SYLLABLE SOELM C1EB;C1EB;1109 116C 11B2;C1EB;1109 116C 11B2; # (쇫; 쇫; 쇫; 쇫; 쇫; ) HANGUL SYLLABLE SOELB C1EC;C1EC;1109 116C 11B3;C1EC;1109 116C 11B3; # (쇬; 쇬; 쇬; 쇬; 쇬; ) HANGUL SYLLABLE SOELS C1ED;C1ED;1109 116C 11B4;C1ED;1109 116C 11B4; # (쇭; 쇭; 쇭; 쇭; 쇭; ) HANGUL SYLLABLE SOELT C1EE;C1EE;1109 116C 11B5;C1EE;1109 116C 11B5; # (쇮; 쇮; 쇮; 쇮; 쇮; ) HANGUL SYLLABLE SOELP C1EF;C1EF;1109 116C 11B6;C1EF;1109 116C 11B6; # (쇯; 쇯; 쇯; 쇯; 쇯; ) HANGUL SYLLABLE SOELH C1F0;C1F0;1109 116C 11B7;C1F0;1109 116C 11B7; # (쇰; 쇰; 쇰; 쇰; 쇰; ) HANGUL SYLLABLE SOEM C1F1;C1F1;1109 116C 11B8;C1F1;1109 116C 11B8; # (쇱; 쇱; 쇱; 쇱; 쇱; ) HANGUL SYLLABLE SOEB C1F2;C1F2;1109 116C 11B9;C1F2;1109 116C 11B9; # (쇲; 쇲; 쇲; 쇲; 쇲; ) HANGUL SYLLABLE SOEBS C1F3;C1F3;1109 116C 11BA;C1F3;1109 116C 11BA; # (쇳; 쇳; 쇳; 쇳; 쇳; ) HANGUL SYLLABLE SOES C1F4;C1F4;1109 116C 11BB;C1F4;1109 116C 11BB; # (쇴; 쇴; 쇴; 쇴; 쇴; ) HANGUL SYLLABLE SOESS C1F5;C1F5;1109 116C 11BC;C1F5;1109 116C 11BC; # (쇵; 쇵; 쇵; 쇵; 쇵; ) HANGUL SYLLABLE SOENG C1F6;C1F6;1109 116C 11BD;C1F6;1109 116C 11BD; # (쇶; 쇶; 쇶; 쇶; 쇶; ) HANGUL SYLLABLE SOEJ C1F7;C1F7;1109 116C 11BE;C1F7;1109 116C 11BE; # (쇷; 쇷; 쇷; 쇷; 쇷; ) HANGUL SYLLABLE SOEC C1F8;C1F8;1109 116C 11BF;C1F8;1109 116C 11BF; # (쇸; 쇸; 쇸; 쇸; 쇸; ) HANGUL SYLLABLE SOEK C1F9;C1F9;1109 116C 11C0;C1F9;1109 116C 11C0; # (쇹; 쇹; 쇹; 쇹; 쇹; ) HANGUL SYLLABLE SOET C1FA;C1FA;1109 116C 11C1;C1FA;1109 116C 11C1; # (쇺; 쇺; 쇺; 쇺; 쇺; ) HANGUL SYLLABLE SOEP C1FB;C1FB;1109 116C 11C2;C1FB;1109 116C 11C2; # (쇻; 쇻; 쇻; 쇻; 쇻; ) HANGUL SYLLABLE SOEH C1FC;C1FC;1109 116D;C1FC;1109 116D; # (쇼; 쇼; 쇼; 쇼; 쇼; ) HANGUL SYLLABLE SYO C1FD;C1FD;1109 116D 11A8;C1FD;1109 116D 11A8; # (쇽; 쇽; 쇽; 쇽; 쇽; ) HANGUL SYLLABLE SYOG C1FE;C1FE;1109 116D 11A9;C1FE;1109 116D 11A9; # (쇾; 쇾; 쇾; 쇾; 쇾; ) HANGUL SYLLABLE SYOGG C1FF;C1FF;1109 116D 11AA;C1FF;1109 116D 11AA; # (쇿; 쇿; 쇿; 쇿; 쇿; ) HANGUL SYLLABLE SYOGS C200;C200;1109 116D 11AB;C200;1109 116D 11AB; # (숀; 숀; 숀; 숀; 숀; ) HANGUL SYLLABLE SYON C201;C201;1109 116D 11AC;C201;1109 116D 11AC; # (숁; 숁; 숁; 숁; 숁; ) HANGUL SYLLABLE SYONJ C202;C202;1109 116D 11AD;C202;1109 116D 11AD; # (숂; 숂; 숂; 숂; 숂; ) HANGUL SYLLABLE SYONH C203;C203;1109 116D 11AE;C203;1109 116D 11AE; # (숃; 숃; 숃; 숃; 숃; ) HANGUL SYLLABLE SYOD C204;C204;1109 116D 11AF;C204;1109 116D 11AF; # (숄; 숄; 숄; 숄; 숄; ) HANGUL SYLLABLE SYOL C205;C205;1109 116D 11B0;C205;1109 116D 11B0; # (숅; 숅; 숅; 숅; 숅; ) HANGUL SYLLABLE SYOLG C206;C206;1109 116D 11B1;C206;1109 116D 11B1; # (숆; 숆; 숆; 숆; 숆; ) HANGUL SYLLABLE SYOLM C207;C207;1109 116D 11B2;C207;1109 116D 11B2; # (숇; 숇; 숇; 숇; 숇; ) HANGUL SYLLABLE SYOLB C208;C208;1109 116D 11B3;C208;1109 116D 11B3; # (숈; 숈; 숈; 숈; 숈; ) HANGUL SYLLABLE SYOLS C209;C209;1109 116D 11B4;C209;1109 116D 11B4; # (숉; 숉; 숉; 숉; 숉; ) HANGUL SYLLABLE SYOLT C20A;C20A;1109 116D 11B5;C20A;1109 116D 11B5; # (숊; 숊; 숊; 숊; 숊; ) HANGUL SYLLABLE SYOLP C20B;C20B;1109 116D 11B6;C20B;1109 116D 11B6; # (숋; 숋; 숋; 숋; 숋; ) HANGUL SYLLABLE SYOLH C20C;C20C;1109 116D 11B7;C20C;1109 116D 11B7; # (숌; 숌; 숌; 숌; 숌; ) HANGUL SYLLABLE SYOM C20D;C20D;1109 116D 11B8;C20D;1109 116D 11B8; # (숍; 숍; 숍; 숍; 숍; ) HANGUL SYLLABLE SYOB C20E;C20E;1109 116D 11B9;C20E;1109 116D 11B9; # (숎; 숎; 숎; 숎; 숎; ) HANGUL SYLLABLE SYOBS C20F;C20F;1109 116D 11BA;C20F;1109 116D 11BA; # (숏; 숏; 숏; 숏; 숏; ) HANGUL SYLLABLE SYOS C210;C210;1109 116D 11BB;C210;1109 116D 11BB; # (숐; 숐; 숐; 숐; 숐; ) HANGUL SYLLABLE SYOSS C211;C211;1109 116D 11BC;C211;1109 116D 11BC; # (숑; 숑; 숑; 숑; 숑; ) HANGUL SYLLABLE SYONG C212;C212;1109 116D 11BD;C212;1109 116D 11BD; # (숒; 숒; 숒; 숒; 숒; ) HANGUL SYLLABLE SYOJ C213;C213;1109 116D 11BE;C213;1109 116D 11BE; # (숓; 숓; 숓; 숓; 숓; ) HANGUL SYLLABLE SYOC C214;C214;1109 116D 11BF;C214;1109 116D 11BF; # (숔; 숔; 숔; 숔; 숔; ) HANGUL SYLLABLE SYOK C215;C215;1109 116D 11C0;C215;1109 116D 11C0; # (숕; 숕; 숕; 숕; 숕; ) HANGUL SYLLABLE SYOT C216;C216;1109 116D 11C1;C216;1109 116D 11C1; # (숖; 숖; 숖; 숖; 숖; ) HANGUL SYLLABLE SYOP C217;C217;1109 116D 11C2;C217;1109 116D 11C2; # (숗; 숗; 숗; 숗; 숗; ) HANGUL SYLLABLE SYOH C218;C218;1109 116E;C218;1109 116E; # (수; 수; 수; 수; 수; ) HANGUL SYLLABLE SU C219;C219;1109 116E 11A8;C219;1109 116E 11A8; # (숙; 숙; 숙; 숙; 숙; ) HANGUL SYLLABLE SUG C21A;C21A;1109 116E 11A9;C21A;1109 116E 11A9; # (숚; 숚; 숚; 숚; 숚; ) HANGUL SYLLABLE SUGG C21B;C21B;1109 116E 11AA;C21B;1109 116E 11AA; # (숛; 숛; 숛; 숛; 숛; ) HANGUL SYLLABLE SUGS C21C;C21C;1109 116E 11AB;C21C;1109 116E 11AB; # (순; 순; 순; 순; 순; ) HANGUL SYLLABLE SUN C21D;C21D;1109 116E 11AC;C21D;1109 116E 11AC; # (숝; 숝; 숝; 숝; 숝; ) HANGUL SYLLABLE SUNJ C21E;C21E;1109 116E 11AD;C21E;1109 116E 11AD; # (숞; 숞; 숞; 숞; 숞; ) HANGUL SYLLABLE SUNH C21F;C21F;1109 116E 11AE;C21F;1109 116E 11AE; # (숟; 숟; 숟; 숟; 숟; ) HANGUL SYLLABLE SUD C220;C220;1109 116E 11AF;C220;1109 116E 11AF; # (술; 술; 술; 술; 술; ) HANGUL SYLLABLE SUL C221;C221;1109 116E 11B0;C221;1109 116E 11B0; # (숡; 숡; 숡; 숡; 숡; ) HANGUL SYLLABLE SULG C222;C222;1109 116E 11B1;C222;1109 116E 11B1; # (숢; 숢; 숢; 숢; 숢; ) HANGUL SYLLABLE SULM C223;C223;1109 116E 11B2;C223;1109 116E 11B2; # (숣; 숣; 숣; 숣; 숣; ) HANGUL SYLLABLE SULB C224;C224;1109 116E 11B3;C224;1109 116E 11B3; # (숤; 숤; 숤; 숤; 숤; ) HANGUL SYLLABLE SULS C225;C225;1109 116E 11B4;C225;1109 116E 11B4; # (숥; 숥; 숥; 숥; 숥; ) HANGUL SYLLABLE SULT C226;C226;1109 116E 11B5;C226;1109 116E 11B5; # (숦; 숦; 숦; 숦; 숦; ) HANGUL SYLLABLE SULP C227;C227;1109 116E 11B6;C227;1109 116E 11B6; # (숧; 숧; 숧; 숧; 숧; ) HANGUL SYLLABLE SULH C228;C228;1109 116E 11B7;C228;1109 116E 11B7; # (숨; 숨; 숨; 숨; 숨; ) HANGUL SYLLABLE SUM C229;C229;1109 116E 11B8;C229;1109 116E 11B8; # (숩; 숩; 숩; 숩; 숩; ) HANGUL SYLLABLE SUB C22A;C22A;1109 116E 11B9;C22A;1109 116E 11B9; # (숪; 숪; 숪; 숪; 숪; ) HANGUL SYLLABLE SUBS C22B;C22B;1109 116E 11BA;C22B;1109 116E 11BA; # (숫; 숫; 숫; 숫; 숫; ) HANGUL SYLLABLE SUS C22C;C22C;1109 116E 11BB;C22C;1109 116E 11BB; # (숬; 숬; 숬; 숬; 숬; ) HANGUL SYLLABLE SUSS C22D;C22D;1109 116E 11BC;C22D;1109 116E 11BC; # (숭; 숭; 숭; 숭; 숭; ) HANGUL SYLLABLE SUNG C22E;C22E;1109 116E 11BD;C22E;1109 116E 11BD; # (숮; 숮; 숮; 숮; 숮; ) HANGUL SYLLABLE SUJ C22F;C22F;1109 116E 11BE;C22F;1109 116E 11BE; # (숯; 숯; 숯; 숯; 숯; ) HANGUL SYLLABLE SUC C230;C230;1109 116E 11BF;C230;1109 116E 11BF; # (숰; 숰; 숰; 숰; 숰; ) HANGUL SYLLABLE SUK C231;C231;1109 116E 11C0;C231;1109 116E 11C0; # (숱; 숱; 숱; 숱; 숱; ) HANGUL SYLLABLE SUT C232;C232;1109 116E 11C1;C232;1109 116E 11C1; # (숲; 숲; 숲; 숲; 숲; ) HANGUL SYLLABLE SUP C233;C233;1109 116E 11C2;C233;1109 116E 11C2; # (숳; 숳; 숳; 숳; 숳; ) HANGUL SYLLABLE SUH C234;C234;1109 116F;C234;1109 116F; # (숴; 숴; 숴; 숴; 숴; ) HANGUL SYLLABLE SWEO C235;C235;1109 116F 11A8;C235;1109 116F 11A8; # (숵; 숵; 숵; 숵; 숵; ) HANGUL SYLLABLE SWEOG C236;C236;1109 116F 11A9;C236;1109 116F 11A9; # (숶; 숶; 숶; 숶; 숶; ) HANGUL SYLLABLE SWEOGG C237;C237;1109 116F 11AA;C237;1109 116F 11AA; # (숷; 숷; 숷; 숷; 숷; ) HANGUL SYLLABLE SWEOGS C238;C238;1109 116F 11AB;C238;1109 116F 11AB; # (숸; 숸; 숸; 숸; 숸; ) HANGUL SYLLABLE SWEON C239;C239;1109 116F 11AC;C239;1109 116F 11AC; # (숹; 숹; 숹; 숹; 숹; ) HANGUL SYLLABLE SWEONJ C23A;C23A;1109 116F 11AD;C23A;1109 116F 11AD; # (숺; 숺; 숺; 숺; 숺; ) HANGUL SYLLABLE SWEONH C23B;C23B;1109 116F 11AE;C23B;1109 116F 11AE; # (숻; 숻; 숻; 숻; 숻; ) HANGUL SYLLABLE SWEOD C23C;C23C;1109 116F 11AF;C23C;1109 116F 11AF; # (숼; 숼; 숼; 숼; 숼; ) HANGUL SYLLABLE SWEOL C23D;C23D;1109 116F 11B0;C23D;1109 116F 11B0; # (숽; 숽; 숽; 숽; 숽; ) HANGUL SYLLABLE SWEOLG C23E;C23E;1109 116F 11B1;C23E;1109 116F 11B1; # (숾; 숾; 숾; 숾; 숾; ) HANGUL SYLLABLE SWEOLM C23F;C23F;1109 116F 11B2;C23F;1109 116F 11B2; # (숿; 숿; 숿; 숿; 숿; ) HANGUL SYLLABLE SWEOLB C240;C240;1109 116F 11B3;C240;1109 116F 11B3; # (쉀; 쉀; 쉀; 쉀; 쉀; ) HANGUL SYLLABLE SWEOLS C241;C241;1109 116F 11B4;C241;1109 116F 11B4; # (쉁; 쉁; 쉁; 쉁; 쉁; ) HANGUL SYLLABLE SWEOLT C242;C242;1109 116F 11B5;C242;1109 116F 11B5; # (쉂; 쉂; 쉂; 쉂; 쉂; ) HANGUL SYLLABLE SWEOLP C243;C243;1109 116F 11B6;C243;1109 116F 11B6; # (쉃; 쉃; 쉃; 쉃; 쉃; ) HANGUL SYLLABLE SWEOLH C244;C244;1109 116F 11B7;C244;1109 116F 11B7; # (쉄; 쉄; 쉄; 쉄; 쉄; ) HANGUL SYLLABLE SWEOM C245;C245;1109 116F 11B8;C245;1109 116F 11B8; # (쉅; 쉅; 쉅; 쉅; 쉅; ) HANGUL SYLLABLE SWEOB C246;C246;1109 116F 11B9;C246;1109 116F 11B9; # (쉆; 쉆; 쉆; 쉆; 쉆; ) HANGUL SYLLABLE SWEOBS C247;C247;1109 116F 11BA;C247;1109 116F 11BA; # (쉇; 쉇; 쉇; 쉇; 쉇; ) HANGUL SYLLABLE SWEOS C248;C248;1109 116F 11BB;C248;1109 116F 11BB; # (쉈; 쉈; 쉈; 쉈; 쉈; ) HANGUL SYLLABLE SWEOSS C249;C249;1109 116F 11BC;C249;1109 116F 11BC; # (쉉; 쉉; 쉉; 쉉; 쉉; ) HANGUL SYLLABLE SWEONG C24A;C24A;1109 116F 11BD;C24A;1109 116F 11BD; # (쉊; 쉊; 쉊; 쉊; 쉊; ) HANGUL SYLLABLE SWEOJ C24B;C24B;1109 116F 11BE;C24B;1109 116F 11BE; # (쉋; 쉋; 쉋; 쉋; 쉋; ) HANGUL SYLLABLE SWEOC C24C;C24C;1109 116F 11BF;C24C;1109 116F 11BF; # (쉌; 쉌; 쉌; 쉌; 쉌; ) HANGUL SYLLABLE SWEOK C24D;C24D;1109 116F 11C0;C24D;1109 116F 11C0; # (쉍; 쉍; 쉍; 쉍; 쉍; ) HANGUL SYLLABLE SWEOT C24E;C24E;1109 116F 11C1;C24E;1109 116F 11C1; # (쉎; 쉎; 쉎; 쉎; 쉎; ) HANGUL SYLLABLE SWEOP C24F;C24F;1109 116F 11C2;C24F;1109 116F 11C2; # (쉏; 쉏; 쉏; 쉏; 쉏; ) HANGUL SYLLABLE SWEOH C250;C250;1109 1170;C250;1109 1170; # (쉐; 쉐; 쉐; 쉐; 쉐; ) HANGUL SYLLABLE SWE C251;C251;1109 1170 11A8;C251;1109 1170 11A8; # (쉑; 쉑; 쉑; 쉑; 쉑; ) HANGUL SYLLABLE SWEG C252;C252;1109 1170 11A9;C252;1109 1170 11A9; # (쉒; 쉒; 쉒; 쉒; 쉒; ) HANGUL SYLLABLE SWEGG C253;C253;1109 1170 11AA;C253;1109 1170 11AA; # (쉓; 쉓; 쉓; 쉓; 쉓; ) HANGUL SYLLABLE SWEGS C254;C254;1109 1170 11AB;C254;1109 1170 11AB; # (쉔; 쉔; 쉔; 쉔; 쉔; ) HANGUL SYLLABLE SWEN C255;C255;1109 1170 11AC;C255;1109 1170 11AC; # (쉕; 쉕; 쉕; 쉕; 쉕; ) HANGUL SYLLABLE SWENJ C256;C256;1109 1170 11AD;C256;1109 1170 11AD; # (쉖; 쉖; 쉖; 쉖; 쉖; ) HANGUL SYLLABLE SWENH C257;C257;1109 1170 11AE;C257;1109 1170 11AE; # (쉗; 쉗; 쉗; 쉗; 쉗; ) HANGUL SYLLABLE SWED C258;C258;1109 1170 11AF;C258;1109 1170 11AF; # (쉘; 쉘; 쉘; 쉘; 쉘; ) HANGUL SYLLABLE SWEL C259;C259;1109 1170 11B0;C259;1109 1170 11B0; # (쉙; 쉙; 쉙; 쉙; 쉙; ) HANGUL SYLLABLE SWELG C25A;C25A;1109 1170 11B1;C25A;1109 1170 11B1; # (쉚; 쉚; 쉚; 쉚; 쉚; ) HANGUL SYLLABLE SWELM C25B;C25B;1109 1170 11B2;C25B;1109 1170 11B2; # (쉛; 쉛; 쉛; 쉛; 쉛; ) HANGUL SYLLABLE SWELB C25C;C25C;1109 1170 11B3;C25C;1109 1170 11B3; # (쉜; 쉜; 쉜; 쉜; 쉜; ) HANGUL SYLLABLE SWELS C25D;C25D;1109 1170 11B4;C25D;1109 1170 11B4; # (쉝; 쉝; 쉝; 쉝; 쉝; ) HANGUL SYLLABLE SWELT C25E;C25E;1109 1170 11B5;C25E;1109 1170 11B5; # (쉞; 쉞; 쉞; 쉞; 쉞; ) HANGUL SYLLABLE SWELP C25F;C25F;1109 1170 11B6;C25F;1109 1170 11B6; # (쉟; 쉟; 쉟; 쉟; 쉟; ) HANGUL SYLLABLE SWELH C260;C260;1109 1170 11B7;C260;1109 1170 11B7; # (쉠; 쉠; 쉠; 쉠; 쉠; ) HANGUL SYLLABLE SWEM C261;C261;1109 1170 11B8;C261;1109 1170 11B8; # (쉡; 쉡; 쉡; 쉡; 쉡; ) HANGUL SYLLABLE SWEB C262;C262;1109 1170 11B9;C262;1109 1170 11B9; # (쉢; 쉢; 쉢; 쉢; 쉢; ) HANGUL SYLLABLE SWEBS C263;C263;1109 1170 11BA;C263;1109 1170 11BA; # (쉣; 쉣; 쉣; 쉣; 쉣; ) HANGUL SYLLABLE SWES C264;C264;1109 1170 11BB;C264;1109 1170 11BB; # (쉤; 쉤; 쉤; 쉤; 쉤; ) HANGUL SYLLABLE SWESS C265;C265;1109 1170 11BC;C265;1109 1170 11BC; # (쉥; 쉥; 쉥; 쉥; 쉥; ) HANGUL SYLLABLE SWENG C266;C266;1109 1170 11BD;C266;1109 1170 11BD; # (쉦; 쉦; 쉦; 쉦; 쉦; ) HANGUL SYLLABLE SWEJ C267;C267;1109 1170 11BE;C267;1109 1170 11BE; # (쉧; 쉧; 쉧; 쉧; 쉧; ) HANGUL SYLLABLE SWEC C268;C268;1109 1170 11BF;C268;1109 1170 11BF; # (쉨; 쉨; 쉨; 쉨; 쉨; ) HANGUL SYLLABLE SWEK C269;C269;1109 1170 11C0;C269;1109 1170 11C0; # (쉩; 쉩; 쉩; 쉩; 쉩; ) HANGUL SYLLABLE SWET C26A;C26A;1109 1170 11C1;C26A;1109 1170 11C1; # (쉪; 쉪; 쉪; 쉪; 쉪; ) HANGUL SYLLABLE SWEP C26B;C26B;1109 1170 11C2;C26B;1109 1170 11C2; # (쉫; 쉫; 쉫; 쉫; 쉫; ) HANGUL SYLLABLE SWEH C26C;C26C;1109 1171;C26C;1109 1171; # (쉬; 쉬; 쉬; 쉬; 쉬; ) HANGUL SYLLABLE SWI C26D;C26D;1109 1171 11A8;C26D;1109 1171 11A8; # (쉭; 쉭; 쉭; 쉭; 쉭; ) HANGUL SYLLABLE SWIG C26E;C26E;1109 1171 11A9;C26E;1109 1171 11A9; # (쉮; 쉮; 쉮; 쉮; 쉮; ) HANGUL SYLLABLE SWIGG C26F;C26F;1109 1171 11AA;C26F;1109 1171 11AA; # (쉯; 쉯; 쉯; 쉯; 쉯; ) HANGUL SYLLABLE SWIGS C270;C270;1109 1171 11AB;C270;1109 1171 11AB; # (쉰; 쉰; 쉰; 쉰; 쉰; ) HANGUL SYLLABLE SWIN C271;C271;1109 1171 11AC;C271;1109 1171 11AC; # (쉱; 쉱; 쉱; 쉱; 쉱; ) HANGUL SYLLABLE SWINJ C272;C272;1109 1171 11AD;C272;1109 1171 11AD; # (쉲; 쉲; 쉲; 쉲; 쉲; ) HANGUL SYLLABLE SWINH C273;C273;1109 1171 11AE;C273;1109 1171 11AE; # (쉳; 쉳; 쉳; 쉳; 쉳; ) HANGUL SYLLABLE SWID C274;C274;1109 1171 11AF;C274;1109 1171 11AF; # (쉴; 쉴; 쉴; 쉴; 쉴; ) HANGUL SYLLABLE SWIL C275;C275;1109 1171 11B0;C275;1109 1171 11B0; # (쉵; 쉵; 쉵; 쉵; 쉵; ) HANGUL SYLLABLE SWILG C276;C276;1109 1171 11B1;C276;1109 1171 11B1; # (쉶; 쉶; 쉶; 쉶; 쉶; ) HANGUL SYLLABLE SWILM C277;C277;1109 1171 11B2;C277;1109 1171 11B2; # (쉷; 쉷; 쉷; 쉷; 쉷; ) HANGUL SYLLABLE SWILB C278;C278;1109 1171 11B3;C278;1109 1171 11B3; # (쉸; 쉸; 쉸; 쉸; 쉸; ) HANGUL SYLLABLE SWILS C279;C279;1109 1171 11B4;C279;1109 1171 11B4; # (쉹; 쉹; 쉹; 쉹; 쉹; ) HANGUL SYLLABLE SWILT C27A;C27A;1109 1171 11B5;C27A;1109 1171 11B5; # (쉺; 쉺; 쉺; 쉺; 쉺; ) HANGUL SYLLABLE SWILP C27B;C27B;1109 1171 11B6;C27B;1109 1171 11B6; # (쉻; 쉻; 쉻; 쉻; 쉻; ) HANGUL SYLLABLE SWILH C27C;C27C;1109 1171 11B7;C27C;1109 1171 11B7; # (쉼; 쉼; 쉼; 쉼; 쉼; ) HANGUL SYLLABLE SWIM C27D;C27D;1109 1171 11B8;C27D;1109 1171 11B8; # (쉽; 쉽; 쉽; 쉽; 쉽; ) HANGUL SYLLABLE SWIB C27E;C27E;1109 1171 11B9;C27E;1109 1171 11B9; # (쉾; 쉾; 쉾; 쉾; 쉾; ) HANGUL SYLLABLE SWIBS C27F;C27F;1109 1171 11BA;C27F;1109 1171 11BA; # (쉿; 쉿; 쉿; 쉿; 쉿; ) HANGUL SYLLABLE SWIS C280;C280;1109 1171 11BB;C280;1109 1171 11BB; # (슀; 슀; 슀; 슀; 슀; ) HANGUL SYLLABLE SWISS C281;C281;1109 1171 11BC;C281;1109 1171 11BC; # (슁; 슁; 슁; 슁; 슁; ) HANGUL SYLLABLE SWING C282;C282;1109 1171 11BD;C282;1109 1171 11BD; # (슂; 슂; 슂; 슂; 슂; ) HANGUL SYLLABLE SWIJ C283;C283;1109 1171 11BE;C283;1109 1171 11BE; # (슃; 슃; 슃; 슃; 슃; ) HANGUL SYLLABLE SWIC C284;C284;1109 1171 11BF;C284;1109 1171 11BF; # (슄; 슄; 슄; 슄; 슄; ) HANGUL SYLLABLE SWIK C285;C285;1109 1171 11C0;C285;1109 1171 11C0; # (슅; 슅; 슅; 슅; 슅; ) HANGUL SYLLABLE SWIT C286;C286;1109 1171 11C1;C286;1109 1171 11C1; # (슆; 슆; 슆; 슆; 슆; ) HANGUL SYLLABLE SWIP C287;C287;1109 1171 11C2;C287;1109 1171 11C2; # (슇; 슇; 슇; 슇; 슇; ) HANGUL SYLLABLE SWIH C288;C288;1109 1172;C288;1109 1172; # (슈; 슈; 슈; 슈; 슈; ) HANGUL SYLLABLE SYU C289;C289;1109 1172 11A8;C289;1109 1172 11A8; # (슉; 슉; 슉; 슉; 슉; ) HANGUL SYLLABLE SYUG C28A;C28A;1109 1172 11A9;C28A;1109 1172 11A9; # (슊; 슊; 슊; 슊; 슊; ) HANGUL SYLLABLE SYUGG C28B;C28B;1109 1172 11AA;C28B;1109 1172 11AA; # (슋; 슋; 슋; 슋; 슋; ) HANGUL SYLLABLE SYUGS C28C;C28C;1109 1172 11AB;C28C;1109 1172 11AB; # (슌; 슌; 슌; 슌; 슌; ) HANGUL SYLLABLE SYUN C28D;C28D;1109 1172 11AC;C28D;1109 1172 11AC; # (슍; 슍; 슍; 슍; 슍; ) HANGUL SYLLABLE SYUNJ C28E;C28E;1109 1172 11AD;C28E;1109 1172 11AD; # (슎; 슎; 슎; 슎; 슎; ) HANGUL SYLLABLE SYUNH C28F;C28F;1109 1172 11AE;C28F;1109 1172 11AE; # (슏; 슏; 슏; 슏; 슏; ) HANGUL SYLLABLE SYUD C290;C290;1109 1172 11AF;C290;1109 1172 11AF; # (슐; 슐; 슐; 슐; 슐; ) HANGUL SYLLABLE SYUL C291;C291;1109 1172 11B0;C291;1109 1172 11B0; # (슑; 슑; 슑; 슑; 슑; ) HANGUL SYLLABLE SYULG C292;C292;1109 1172 11B1;C292;1109 1172 11B1; # (슒; 슒; 슒; 슒; 슒; ) HANGUL SYLLABLE SYULM C293;C293;1109 1172 11B2;C293;1109 1172 11B2; # (슓; 슓; 슓; 슓; 슓; ) HANGUL SYLLABLE SYULB C294;C294;1109 1172 11B3;C294;1109 1172 11B3; # (슔; 슔; 슔; 슔; 슔; ) HANGUL SYLLABLE SYULS C295;C295;1109 1172 11B4;C295;1109 1172 11B4; # (슕; 슕; 슕; 슕; 슕; ) HANGUL SYLLABLE SYULT C296;C296;1109 1172 11B5;C296;1109 1172 11B5; # (슖; 슖; 슖; 슖; 슖; ) HANGUL SYLLABLE SYULP C297;C297;1109 1172 11B6;C297;1109 1172 11B6; # (슗; 슗; 슗; 슗; 슗; ) HANGUL SYLLABLE SYULH C298;C298;1109 1172 11B7;C298;1109 1172 11B7; # (슘; 슘; 슘; 슘; 슘; ) HANGUL SYLLABLE SYUM C299;C299;1109 1172 11B8;C299;1109 1172 11B8; # (슙; 슙; 슙; 슙; 슙; ) HANGUL SYLLABLE SYUB C29A;C29A;1109 1172 11B9;C29A;1109 1172 11B9; # (슚; 슚; 슚; 슚; 슚; ) HANGUL SYLLABLE SYUBS C29B;C29B;1109 1172 11BA;C29B;1109 1172 11BA; # (슛; 슛; 슛; 슛; 슛; ) HANGUL SYLLABLE SYUS C29C;C29C;1109 1172 11BB;C29C;1109 1172 11BB; # (슜; 슜; 슜; 슜; 슜; ) HANGUL SYLLABLE SYUSS C29D;C29D;1109 1172 11BC;C29D;1109 1172 11BC; # (슝; 슝; 슝; 슝; 슝; ) HANGUL SYLLABLE SYUNG C29E;C29E;1109 1172 11BD;C29E;1109 1172 11BD; # (슞; 슞; 슞; 슞; 슞; ) HANGUL SYLLABLE SYUJ C29F;C29F;1109 1172 11BE;C29F;1109 1172 11BE; # (슟; 슟; 슟; 슟; 슟; ) HANGUL SYLLABLE SYUC C2A0;C2A0;1109 1172 11BF;C2A0;1109 1172 11BF; # (슠; 슠; 슠; 슠; 슠; ) HANGUL SYLLABLE SYUK C2A1;C2A1;1109 1172 11C0;C2A1;1109 1172 11C0; # (슡; 슡; 슡; 슡; 슡; ) HANGUL SYLLABLE SYUT C2A2;C2A2;1109 1172 11C1;C2A2;1109 1172 11C1; # (슢; 슢; 슢; 슢; 슢; ) HANGUL SYLLABLE SYUP C2A3;C2A3;1109 1172 11C2;C2A3;1109 1172 11C2; # (슣; 슣; 슣; 슣; 슣; ) HANGUL SYLLABLE SYUH C2A4;C2A4;1109 1173;C2A4;1109 1173; # (스; 스; 스; 스; 스; ) HANGUL SYLLABLE SEU C2A5;C2A5;1109 1173 11A8;C2A5;1109 1173 11A8; # (슥; 슥; 슥; 슥; 슥; ) HANGUL SYLLABLE SEUG C2A6;C2A6;1109 1173 11A9;C2A6;1109 1173 11A9; # (슦; 슦; 슦; 슦; 슦; ) HANGUL SYLLABLE SEUGG C2A7;C2A7;1109 1173 11AA;C2A7;1109 1173 11AA; # (슧; 슧; 슧; 슧; 슧; ) HANGUL SYLLABLE SEUGS C2A8;C2A8;1109 1173 11AB;C2A8;1109 1173 11AB; # (슨; 슨; 슨; 슨; 슨; ) HANGUL SYLLABLE SEUN C2A9;C2A9;1109 1173 11AC;C2A9;1109 1173 11AC; # (슩; 슩; 슩; 슩; 슩; ) HANGUL SYLLABLE SEUNJ C2AA;C2AA;1109 1173 11AD;C2AA;1109 1173 11AD; # (슪; 슪; 슪; 슪; 슪; ) HANGUL SYLLABLE SEUNH C2AB;C2AB;1109 1173 11AE;C2AB;1109 1173 11AE; # (슫; 슫; 슫; 슫; 슫; ) HANGUL SYLLABLE SEUD C2AC;C2AC;1109 1173 11AF;C2AC;1109 1173 11AF; # (슬; 슬; 슬; 슬; 슬; ) HANGUL SYLLABLE SEUL C2AD;C2AD;1109 1173 11B0;C2AD;1109 1173 11B0; # (슭; 슭; 슭; 슭; 슭; ) HANGUL SYLLABLE SEULG C2AE;C2AE;1109 1173 11B1;C2AE;1109 1173 11B1; # (슮; 슮; 슮; 슮; 슮; ) HANGUL SYLLABLE SEULM C2AF;C2AF;1109 1173 11B2;C2AF;1109 1173 11B2; # (슯; 슯; 슯; 슯; 슯; ) HANGUL SYLLABLE SEULB C2B0;C2B0;1109 1173 11B3;C2B0;1109 1173 11B3; # (슰; 슰; 슰; 슰; 슰; ) HANGUL SYLLABLE SEULS C2B1;C2B1;1109 1173 11B4;C2B1;1109 1173 11B4; # (슱; 슱; 슱; 슱; 슱; ) HANGUL SYLLABLE SEULT C2B2;C2B2;1109 1173 11B5;C2B2;1109 1173 11B5; # (슲; 슲; 슲; 슲; 슲; ) HANGUL SYLLABLE SEULP C2B3;C2B3;1109 1173 11B6;C2B3;1109 1173 11B6; # (슳; 슳; 슳; 슳; 슳; ) HANGUL SYLLABLE SEULH C2B4;C2B4;1109 1173 11B7;C2B4;1109 1173 11B7; # (슴; 슴; 슴; 슴; 슴; ) HANGUL SYLLABLE SEUM C2B5;C2B5;1109 1173 11B8;C2B5;1109 1173 11B8; # (습; 습; 습; 습; 습; ) HANGUL SYLLABLE SEUB C2B6;C2B6;1109 1173 11B9;C2B6;1109 1173 11B9; # (슶; 슶; 슶; 슶; 슶; ) HANGUL SYLLABLE SEUBS C2B7;C2B7;1109 1173 11BA;C2B7;1109 1173 11BA; # (슷; 슷; 슷; 슷; 슷; ) HANGUL SYLLABLE SEUS C2B8;C2B8;1109 1173 11BB;C2B8;1109 1173 11BB; # (슸; 슸; 슸; 슸; 슸; ) HANGUL SYLLABLE SEUSS C2B9;C2B9;1109 1173 11BC;C2B9;1109 1173 11BC; # (승; 승; 승; 승; 승; ) HANGUL SYLLABLE SEUNG C2BA;C2BA;1109 1173 11BD;C2BA;1109 1173 11BD; # (슺; 슺; 슺; 슺; 슺; ) HANGUL SYLLABLE SEUJ C2BB;C2BB;1109 1173 11BE;C2BB;1109 1173 11BE; # (슻; 슻; 슻; 슻; 슻; ) HANGUL SYLLABLE SEUC C2BC;C2BC;1109 1173 11BF;C2BC;1109 1173 11BF; # (슼; 슼; 슼; 슼; 슼; ) HANGUL SYLLABLE SEUK C2BD;C2BD;1109 1173 11C0;C2BD;1109 1173 11C0; # (슽; 슽; 슽; 슽; 슽; ) HANGUL SYLLABLE SEUT C2BE;C2BE;1109 1173 11C1;C2BE;1109 1173 11C1; # (슾; 슾; 슾; 슾; 슾; ) HANGUL SYLLABLE SEUP C2BF;C2BF;1109 1173 11C2;C2BF;1109 1173 11C2; # (슿; 슿; 슿; 슿; 슿; ) HANGUL SYLLABLE SEUH C2C0;C2C0;1109 1174;C2C0;1109 1174; # (싀; 싀; 싀; 싀; 싀; ) HANGUL SYLLABLE SYI C2C1;C2C1;1109 1174 11A8;C2C1;1109 1174 11A8; # (싁; 싁; 싁; 싁; 싁; ) HANGUL SYLLABLE SYIG C2C2;C2C2;1109 1174 11A9;C2C2;1109 1174 11A9; # (싂; 싂; 싂; 싂; 싂; ) HANGUL SYLLABLE SYIGG C2C3;C2C3;1109 1174 11AA;C2C3;1109 1174 11AA; # (싃; 싃; 싃; 싃; 싃; ) HANGUL SYLLABLE SYIGS C2C4;C2C4;1109 1174 11AB;C2C4;1109 1174 11AB; # (싄; 싄; 싄; 싄; 싄; ) HANGUL SYLLABLE SYIN C2C5;C2C5;1109 1174 11AC;C2C5;1109 1174 11AC; # (싅; 싅; 싅; 싅; 싅; ) HANGUL SYLLABLE SYINJ C2C6;C2C6;1109 1174 11AD;C2C6;1109 1174 11AD; # (싆; 싆; 싆; 싆; 싆; ) HANGUL SYLLABLE SYINH C2C7;C2C7;1109 1174 11AE;C2C7;1109 1174 11AE; # (싇; 싇; 싇; 싇; 싇; ) HANGUL SYLLABLE SYID C2C8;C2C8;1109 1174 11AF;C2C8;1109 1174 11AF; # (싈; 싈; 싈; 싈; 싈; ) HANGUL SYLLABLE SYIL C2C9;C2C9;1109 1174 11B0;C2C9;1109 1174 11B0; # (싉; 싉; 싉; 싉; 싉; ) HANGUL SYLLABLE SYILG C2CA;C2CA;1109 1174 11B1;C2CA;1109 1174 11B1; # (싊; 싊; 싊; 싊; 싊; ) HANGUL SYLLABLE SYILM C2CB;C2CB;1109 1174 11B2;C2CB;1109 1174 11B2; # (싋; 싋; 싋; 싋; 싋; ) HANGUL SYLLABLE SYILB C2CC;C2CC;1109 1174 11B3;C2CC;1109 1174 11B3; # (싌; 싌; 싌; 싌; 싌; ) HANGUL SYLLABLE SYILS C2CD;C2CD;1109 1174 11B4;C2CD;1109 1174 11B4; # (싍; 싍; 싍; 싍; 싍; ) HANGUL SYLLABLE SYILT C2CE;C2CE;1109 1174 11B5;C2CE;1109 1174 11B5; # (싎; 싎; 싎; 싎; 싎; ) HANGUL SYLLABLE SYILP C2CF;C2CF;1109 1174 11B6;C2CF;1109 1174 11B6; # (싏; 싏; 싏; 싏; 싏; ) HANGUL SYLLABLE SYILH C2D0;C2D0;1109 1174 11B7;C2D0;1109 1174 11B7; # (싐; 싐; 싐; 싐; 싐; ) HANGUL SYLLABLE SYIM C2D1;C2D1;1109 1174 11B8;C2D1;1109 1174 11B8; # (싑; 싑; 싑; 싑; 싑; ) HANGUL SYLLABLE SYIB C2D2;C2D2;1109 1174 11B9;C2D2;1109 1174 11B9; # (싒; 싒; 싒; 싒; 싒; ) HANGUL SYLLABLE SYIBS C2D3;C2D3;1109 1174 11BA;C2D3;1109 1174 11BA; # (싓; 싓; 싓; 싓; 싓; ) HANGUL SYLLABLE SYIS C2D4;C2D4;1109 1174 11BB;C2D4;1109 1174 11BB; # (싔; 싔; 싔; 싔; 싔; ) HANGUL SYLLABLE SYISS C2D5;C2D5;1109 1174 11BC;C2D5;1109 1174 11BC; # (싕; 싕; 싕; 싕; 싕; ) HANGUL SYLLABLE SYING C2D6;C2D6;1109 1174 11BD;C2D6;1109 1174 11BD; # (싖; 싖; 싖; 싖; 싖; ) HANGUL SYLLABLE SYIJ C2D7;C2D7;1109 1174 11BE;C2D7;1109 1174 11BE; # (싗; 싗; 싗; 싗; 싗; ) HANGUL SYLLABLE SYIC C2D8;C2D8;1109 1174 11BF;C2D8;1109 1174 11BF; # (싘; 싘; 싘; 싘; 싘; ) HANGUL SYLLABLE SYIK C2D9;C2D9;1109 1174 11C0;C2D9;1109 1174 11C0; # (싙; 싙; 싙; 싙; 싙; ) HANGUL SYLLABLE SYIT C2DA;C2DA;1109 1174 11C1;C2DA;1109 1174 11C1; # (싚; 싚; 싚; 싚; 싚; ) HANGUL SYLLABLE SYIP C2DB;C2DB;1109 1174 11C2;C2DB;1109 1174 11C2; # (싛; 싛; 싛; 싛; 싛; ) HANGUL SYLLABLE SYIH C2DC;C2DC;1109 1175;C2DC;1109 1175; # (시; 시; 시; 시; 시; ) HANGUL SYLLABLE SI C2DD;C2DD;1109 1175 11A8;C2DD;1109 1175 11A8; # (식; 식; 식; 식; 식; ) HANGUL SYLLABLE SIG C2DE;C2DE;1109 1175 11A9;C2DE;1109 1175 11A9; # (싞; 싞; 싞; 싞; 싞; ) HANGUL SYLLABLE SIGG C2DF;C2DF;1109 1175 11AA;C2DF;1109 1175 11AA; # (싟; 싟; 싟; 싟; 싟; ) HANGUL SYLLABLE SIGS C2E0;C2E0;1109 1175 11AB;C2E0;1109 1175 11AB; # (신; 신; 신; 신; 신; ) HANGUL SYLLABLE SIN C2E1;C2E1;1109 1175 11AC;C2E1;1109 1175 11AC; # (싡; 싡; 싡; 싡; 싡; ) HANGUL SYLLABLE SINJ C2E2;C2E2;1109 1175 11AD;C2E2;1109 1175 11AD; # (싢; 싢; 싢; 싢; 싢; ) HANGUL SYLLABLE SINH C2E3;C2E3;1109 1175 11AE;C2E3;1109 1175 11AE; # (싣; 싣; 싣; 싣; 싣; ) HANGUL SYLLABLE SID C2E4;C2E4;1109 1175 11AF;C2E4;1109 1175 11AF; # (실; 실; 실; 실; 실; ) HANGUL SYLLABLE SIL C2E5;C2E5;1109 1175 11B0;C2E5;1109 1175 11B0; # (싥; 싥; 싥; 싥; 싥; ) HANGUL SYLLABLE SILG C2E6;C2E6;1109 1175 11B1;C2E6;1109 1175 11B1; # (싦; 싦; 싦; 싦; 싦; ) HANGUL SYLLABLE SILM C2E7;C2E7;1109 1175 11B2;C2E7;1109 1175 11B2; # (싧; 싧; 싧; 싧; 싧; ) HANGUL SYLLABLE SILB C2E8;C2E8;1109 1175 11B3;C2E8;1109 1175 11B3; # (싨; 싨; 싨; 싨; 싨; ) HANGUL SYLLABLE SILS C2E9;C2E9;1109 1175 11B4;C2E9;1109 1175 11B4; # (싩; 싩; 싩; 싩; 싩; ) HANGUL SYLLABLE SILT C2EA;C2EA;1109 1175 11B5;C2EA;1109 1175 11B5; # (싪; 싪; 싪; 싪; 싪; ) HANGUL SYLLABLE SILP C2EB;C2EB;1109 1175 11B6;C2EB;1109 1175 11B6; # (싫; 싫; 싫; 싫; 싫; ) HANGUL SYLLABLE SILH C2EC;C2EC;1109 1175 11B7;C2EC;1109 1175 11B7; # (심; 심; 심; 심; 심; ) HANGUL SYLLABLE SIM C2ED;C2ED;1109 1175 11B8;C2ED;1109 1175 11B8; # (십; 십; 십; 십; 십; ) HANGUL SYLLABLE SIB C2EE;C2EE;1109 1175 11B9;C2EE;1109 1175 11B9; # (싮; 싮; 싮; 싮; 싮; ) HANGUL SYLLABLE SIBS C2EF;C2EF;1109 1175 11BA;C2EF;1109 1175 11BA; # (싯; 싯; 싯; 싯; 싯; ) HANGUL SYLLABLE SIS C2F0;C2F0;1109 1175 11BB;C2F0;1109 1175 11BB; # (싰; 싰; 싰; 싰; 싰; ) HANGUL SYLLABLE SISS C2F1;C2F1;1109 1175 11BC;C2F1;1109 1175 11BC; # (싱; 싱; 싱; 싱; 싱; ) HANGUL SYLLABLE SING C2F2;C2F2;1109 1175 11BD;C2F2;1109 1175 11BD; # (싲; 싲; 싲; 싲; 싲; ) HANGUL SYLLABLE SIJ C2F3;C2F3;1109 1175 11BE;C2F3;1109 1175 11BE; # (싳; 싳; 싳; 싳; 싳; ) HANGUL SYLLABLE SIC C2F4;C2F4;1109 1175 11BF;C2F4;1109 1175 11BF; # (싴; 싴; 싴; 싴; 싴; ) HANGUL SYLLABLE SIK C2F5;C2F5;1109 1175 11C0;C2F5;1109 1175 11C0; # (싵; 싵; 싵; 싵; 싵; ) HANGUL SYLLABLE SIT C2F6;C2F6;1109 1175 11C1;C2F6;1109 1175 11C1; # (싶; 싶; 싶; 싶; 싶; ) HANGUL SYLLABLE SIP C2F7;C2F7;1109 1175 11C2;C2F7;1109 1175 11C2; # (싷; 싷; 싷; 싷; 싷; ) HANGUL SYLLABLE SIH C2F8;C2F8;110A 1161;C2F8;110A 1161; # (싸; 싸; 싸; 싸; 싸; ) HANGUL SYLLABLE SSA C2F9;C2F9;110A 1161 11A8;C2F9;110A 1161 11A8; # (싹; 싹; 싹; 싹; 싹; ) HANGUL SYLLABLE SSAG C2FA;C2FA;110A 1161 11A9;C2FA;110A 1161 11A9; # (싺; 싺; 싺; 싺; 싺; ) HANGUL SYLLABLE SSAGG C2FB;C2FB;110A 1161 11AA;C2FB;110A 1161 11AA; # (싻; 싻; 싻; 싻; 싻; ) HANGUL SYLLABLE SSAGS C2FC;C2FC;110A 1161 11AB;C2FC;110A 1161 11AB; # (싼; 싼; 싼; 싼; 싼; ) HANGUL SYLLABLE SSAN C2FD;C2FD;110A 1161 11AC;C2FD;110A 1161 11AC; # (싽; 싽; 싽; 싽; 싽; ) HANGUL SYLLABLE SSANJ C2FE;C2FE;110A 1161 11AD;C2FE;110A 1161 11AD; # (싾; 싾; 싾; 싾; 싾; ) HANGUL SYLLABLE SSANH C2FF;C2FF;110A 1161 11AE;C2FF;110A 1161 11AE; # (싿; 싿; 싿; 싿; 싿; ) HANGUL SYLLABLE SSAD C300;C300;110A 1161 11AF;C300;110A 1161 11AF; # (쌀; 쌀; 쌀; 쌀; 쌀; ) HANGUL SYLLABLE SSAL C301;C301;110A 1161 11B0;C301;110A 1161 11B0; # (쌁; 쌁; 쌁; 쌁; 쌁; ) HANGUL SYLLABLE SSALG C302;C302;110A 1161 11B1;C302;110A 1161 11B1; # (쌂; 쌂; 쌂; 쌂; 쌂; ) HANGUL SYLLABLE SSALM C303;C303;110A 1161 11B2;C303;110A 1161 11B2; # (쌃; 쌃; 쌃; 쌃; 쌃; ) HANGUL SYLLABLE SSALB C304;C304;110A 1161 11B3;C304;110A 1161 11B3; # (쌄; 쌄; 쌄; 쌄; 쌄; ) HANGUL SYLLABLE SSALS C305;C305;110A 1161 11B4;C305;110A 1161 11B4; # (쌅; 쌅; 쌅; 쌅; 쌅; ) HANGUL SYLLABLE SSALT C306;C306;110A 1161 11B5;C306;110A 1161 11B5; # (쌆; 쌆; 쌆; 쌆; 쌆; ) HANGUL SYLLABLE SSALP C307;C307;110A 1161 11B6;C307;110A 1161 11B6; # (쌇; 쌇; 쌇; 쌇; 쌇; ) HANGUL SYLLABLE SSALH C308;C308;110A 1161 11B7;C308;110A 1161 11B7; # (쌈; 쌈; 쌈; 쌈; 쌈; ) HANGUL SYLLABLE SSAM C309;C309;110A 1161 11B8;C309;110A 1161 11B8; # (쌉; 쌉; 쌉; 쌉; 쌉; ) HANGUL SYLLABLE SSAB C30A;C30A;110A 1161 11B9;C30A;110A 1161 11B9; # (쌊; 쌊; 쌊; 쌊; 쌊; ) HANGUL SYLLABLE SSABS C30B;C30B;110A 1161 11BA;C30B;110A 1161 11BA; # (쌋; 쌋; 쌋; 쌋; 쌋; ) HANGUL SYLLABLE SSAS C30C;C30C;110A 1161 11BB;C30C;110A 1161 11BB; # (쌌; 쌌; 쌌; 쌌; 쌌; ) HANGUL SYLLABLE SSASS C30D;C30D;110A 1161 11BC;C30D;110A 1161 11BC; # (쌍; 쌍; 쌍; 쌍; 쌍; ) HANGUL SYLLABLE SSANG C30E;C30E;110A 1161 11BD;C30E;110A 1161 11BD; # (쌎; 쌎; 쌎; 쌎; 쌎; ) HANGUL SYLLABLE SSAJ C30F;C30F;110A 1161 11BE;C30F;110A 1161 11BE; # (쌏; 쌏; 쌏; 쌏; 쌏; ) HANGUL SYLLABLE SSAC C310;C310;110A 1161 11BF;C310;110A 1161 11BF; # (쌐; 쌐; 쌐; 쌐; 쌐; ) HANGUL SYLLABLE SSAK C311;C311;110A 1161 11C0;C311;110A 1161 11C0; # (쌑; 쌑; 쌑; 쌑; 쌑; ) HANGUL SYLLABLE SSAT C312;C312;110A 1161 11C1;C312;110A 1161 11C1; # (쌒; 쌒; 쌒; 쌒; 쌒; ) HANGUL SYLLABLE SSAP C313;C313;110A 1161 11C2;C313;110A 1161 11C2; # (쌓; 쌓; 쌓; 쌓; 쌓; ) HANGUL SYLLABLE SSAH C314;C314;110A 1162;C314;110A 1162; # (쌔; 쌔; 쌔; 쌔; 쌔; ) HANGUL SYLLABLE SSAE C315;C315;110A 1162 11A8;C315;110A 1162 11A8; # (쌕; 쌕; 쌕; 쌕; 쌕; ) HANGUL SYLLABLE SSAEG C316;C316;110A 1162 11A9;C316;110A 1162 11A9; # (쌖; 쌖; 쌖; 쌖; 쌖; ) HANGUL SYLLABLE SSAEGG C317;C317;110A 1162 11AA;C317;110A 1162 11AA; # (쌗; 쌗; 쌗; 쌗; 쌗; ) HANGUL SYLLABLE SSAEGS C318;C318;110A 1162 11AB;C318;110A 1162 11AB; # (쌘; 쌘; 쌘; 쌘; 쌘; ) HANGUL SYLLABLE SSAEN C319;C319;110A 1162 11AC;C319;110A 1162 11AC; # (쌙; 쌙; 쌙; 쌙; 쌙; ) HANGUL SYLLABLE SSAENJ C31A;C31A;110A 1162 11AD;C31A;110A 1162 11AD; # (쌚; 쌚; 쌚; 쌚; 쌚; ) HANGUL SYLLABLE SSAENH C31B;C31B;110A 1162 11AE;C31B;110A 1162 11AE; # (쌛; 쌛; 쌛; 쌛; 쌛; ) HANGUL SYLLABLE SSAED C31C;C31C;110A 1162 11AF;C31C;110A 1162 11AF; # (쌜; 쌜; 쌜; 쌜; 쌜; ) HANGUL SYLLABLE SSAEL C31D;C31D;110A 1162 11B0;C31D;110A 1162 11B0; # (쌝; 쌝; 쌝; 쌝; 쌝; ) HANGUL SYLLABLE SSAELG C31E;C31E;110A 1162 11B1;C31E;110A 1162 11B1; # (쌞; 쌞; 쌞; 쌞; 쌞; ) HANGUL SYLLABLE SSAELM C31F;C31F;110A 1162 11B2;C31F;110A 1162 11B2; # (쌟; 쌟; 쌟; 쌟; 쌟; ) HANGUL SYLLABLE SSAELB C320;C320;110A 1162 11B3;C320;110A 1162 11B3; # (쌠; 쌠; 쌠; 쌠; 쌠; ) HANGUL SYLLABLE SSAELS C321;C321;110A 1162 11B4;C321;110A 1162 11B4; # (쌡; 쌡; 쌡; 쌡; 쌡; ) HANGUL SYLLABLE SSAELT C322;C322;110A 1162 11B5;C322;110A 1162 11B5; # (쌢; 쌢; 쌢; 쌢; 쌢; ) HANGUL SYLLABLE SSAELP C323;C323;110A 1162 11B6;C323;110A 1162 11B6; # (쌣; 쌣; 쌣; 쌣; 쌣; ) HANGUL SYLLABLE SSAELH C324;C324;110A 1162 11B7;C324;110A 1162 11B7; # (쌤; 쌤; 쌤; 쌤; 쌤; ) HANGUL SYLLABLE SSAEM C325;C325;110A 1162 11B8;C325;110A 1162 11B8; # (쌥; 쌥; 쌥; 쌥; 쌥; ) HANGUL SYLLABLE SSAEB C326;C326;110A 1162 11B9;C326;110A 1162 11B9; # (쌦; 쌦; 쌦; 쌦; 쌦; ) HANGUL SYLLABLE SSAEBS C327;C327;110A 1162 11BA;C327;110A 1162 11BA; # (쌧; 쌧; 쌧; 쌧; 쌧; ) HANGUL SYLLABLE SSAES C328;C328;110A 1162 11BB;C328;110A 1162 11BB; # (쌨; 쌨; 쌨; 쌨; 쌨; ) HANGUL SYLLABLE SSAESS C329;C329;110A 1162 11BC;C329;110A 1162 11BC; # (쌩; 쌩; 쌩; 쌩; 쌩; ) HANGUL SYLLABLE SSAENG C32A;C32A;110A 1162 11BD;C32A;110A 1162 11BD; # (쌪; 쌪; 쌪; 쌪; 쌪; ) HANGUL SYLLABLE SSAEJ C32B;C32B;110A 1162 11BE;C32B;110A 1162 11BE; # (쌫; 쌫; 쌫; 쌫; 쌫; ) HANGUL SYLLABLE SSAEC C32C;C32C;110A 1162 11BF;C32C;110A 1162 11BF; # (쌬; 쌬; 쌬; 쌬; 쌬; ) HANGUL SYLLABLE SSAEK C32D;C32D;110A 1162 11C0;C32D;110A 1162 11C0; # (쌭; 쌭; 쌭; 쌭; 쌭; ) HANGUL SYLLABLE SSAET C32E;C32E;110A 1162 11C1;C32E;110A 1162 11C1; # (쌮; 쌮; 쌮; 쌮; 쌮; ) HANGUL SYLLABLE SSAEP C32F;C32F;110A 1162 11C2;C32F;110A 1162 11C2; # (쌯; 쌯; 쌯; 쌯; 쌯; ) HANGUL SYLLABLE SSAEH C330;C330;110A 1163;C330;110A 1163; # (쌰; 쌰; 쌰; 쌰; 쌰; ) HANGUL SYLLABLE SSYA C331;C331;110A 1163 11A8;C331;110A 1163 11A8; # (쌱; 쌱; 쌱; 쌱; 쌱; ) HANGUL SYLLABLE SSYAG C332;C332;110A 1163 11A9;C332;110A 1163 11A9; # (쌲; 쌲; 쌲; 쌲; 쌲; ) HANGUL SYLLABLE SSYAGG C333;C333;110A 1163 11AA;C333;110A 1163 11AA; # (쌳; 쌳; 쌳; 쌳; 쌳; ) HANGUL SYLLABLE SSYAGS C334;C334;110A 1163 11AB;C334;110A 1163 11AB; # (쌴; 쌴; 쌴; 쌴; 쌴; ) HANGUL SYLLABLE SSYAN C335;C335;110A 1163 11AC;C335;110A 1163 11AC; # (쌵; 쌵; 쌵; 쌵; 쌵; ) HANGUL SYLLABLE SSYANJ C336;C336;110A 1163 11AD;C336;110A 1163 11AD; # (쌶; 쌶; 쌶; 쌶; 쌶; ) HANGUL SYLLABLE SSYANH C337;C337;110A 1163 11AE;C337;110A 1163 11AE; # (쌷; 쌷; 쌷; 쌷; 쌷; ) HANGUL SYLLABLE SSYAD C338;C338;110A 1163 11AF;C338;110A 1163 11AF; # (쌸; 쌸; 쌸; 쌸; 쌸; ) HANGUL SYLLABLE SSYAL C339;C339;110A 1163 11B0;C339;110A 1163 11B0; # (쌹; 쌹; 쌹; 쌹; 쌹; ) HANGUL SYLLABLE SSYALG C33A;C33A;110A 1163 11B1;C33A;110A 1163 11B1; # (쌺; 쌺; 쌺; 쌺; 쌺; ) HANGUL SYLLABLE SSYALM C33B;C33B;110A 1163 11B2;C33B;110A 1163 11B2; # (쌻; 쌻; 쌻; 쌻; 쌻; ) HANGUL SYLLABLE SSYALB C33C;C33C;110A 1163 11B3;C33C;110A 1163 11B3; # (쌼; 쌼; 쌼; 쌼; 쌼; ) HANGUL SYLLABLE SSYALS C33D;C33D;110A 1163 11B4;C33D;110A 1163 11B4; # (쌽; 쌽; 쌽; 쌽; 쌽; ) HANGUL SYLLABLE SSYALT C33E;C33E;110A 1163 11B5;C33E;110A 1163 11B5; # (쌾; 쌾; 쌾; 쌾; 쌾; ) HANGUL SYLLABLE SSYALP C33F;C33F;110A 1163 11B6;C33F;110A 1163 11B6; # (쌿; 쌿; 쌿; 쌿; 쌿; ) HANGUL SYLLABLE SSYALH C340;C340;110A 1163 11B7;C340;110A 1163 11B7; # (썀; 썀; 썀; 썀; 썀; ) HANGUL SYLLABLE SSYAM C341;C341;110A 1163 11B8;C341;110A 1163 11B8; # (썁; 썁; 썁; 썁; 썁; ) HANGUL SYLLABLE SSYAB C342;C342;110A 1163 11B9;C342;110A 1163 11B9; # (썂; 썂; 썂; 썂; 썂; ) HANGUL SYLLABLE SSYABS C343;C343;110A 1163 11BA;C343;110A 1163 11BA; # (썃; 썃; 썃; 썃; 썃; ) HANGUL SYLLABLE SSYAS C344;C344;110A 1163 11BB;C344;110A 1163 11BB; # (썄; 썄; 썄; 썄; 썄; ) HANGUL SYLLABLE SSYASS C345;C345;110A 1163 11BC;C345;110A 1163 11BC; # (썅; 썅; 썅; 썅; 썅; ) HANGUL SYLLABLE SSYANG C346;C346;110A 1163 11BD;C346;110A 1163 11BD; # (썆; 썆; 썆; 썆; 썆; ) HANGUL SYLLABLE SSYAJ C347;C347;110A 1163 11BE;C347;110A 1163 11BE; # (썇; 썇; 썇; 썇; 썇; ) HANGUL SYLLABLE SSYAC C348;C348;110A 1163 11BF;C348;110A 1163 11BF; # (썈; 썈; 썈; 썈; 썈; ) HANGUL SYLLABLE SSYAK C349;C349;110A 1163 11C0;C349;110A 1163 11C0; # (썉; 썉; 썉; 썉; 썉; ) HANGUL SYLLABLE SSYAT C34A;C34A;110A 1163 11C1;C34A;110A 1163 11C1; # (썊; 썊; 썊; 썊; 썊; ) HANGUL SYLLABLE SSYAP C34B;C34B;110A 1163 11C2;C34B;110A 1163 11C2; # (썋; 썋; 썋; 썋; 썋; ) HANGUL SYLLABLE SSYAH C34C;C34C;110A 1164;C34C;110A 1164; # (썌; 썌; 썌; 썌; 썌; ) HANGUL SYLLABLE SSYAE C34D;C34D;110A 1164 11A8;C34D;110A 1164 11A8; # (썍; 썍; 썍; 썍; 썍; ) HANGUL SYLLABLE SSYAEG C34E;C34E;110A 1164 11A9;C34E;110A 1164 11A9; # (썎; 썎; 썎; 썎; 썎; ) HANGUL SYLLABLE SSYAEGG C34F;C34F;110A 1164 11AA;C34F;110A 1164 11AA; # (썏; 썏; 썏; 썏; 썏; ) HANGUL SYLLABLE SSYAEGS C350;C350;110A 1164 11AB;C350;110A 1164 11AB; # (썐; 썐; 썐; 썐; 썐; ) HANGUL SYLLABLE SSYAEN C351;C351;110A 1164 11AC;C351;110A 1164 11AC; # (썑; 썑; 썑; 썑; 썑; ) HANGUL SYLLABLE SSYAENJ C352;C352;110A 1164 11AD;C352;110A 1164 11AD; # (썒; 썒; 썒; 썒; 썒; ) HANGUL SYLLABLE SSYAENH C353;C353;110A 1164 11AE;C353;110A 1164 11AE; # (썓; 썓; 썓; 썓; 썓; ) HANGUL SYLLABLE SSYAED C354;C354;110A 1164 11AF;C354;110A 1164 11AF; # (썔; 썔; 썔; 썔; 썔; ) HANGUL SYLLABLE SSYAEL C355;C355;110A 1164 11B0;C355;110A 1164 11B0; # (썕; 썕; 썕; 썕; 썕; ) HANGUL SYLLABLE SSYAELG C356;C356;110A 1164 11B1;C356;110A 1164 11B1; # (썖; 썖; 썖; 썖; 썖; ) HANGUL SYLLABLE SSYAELM C357;C357;110A 1164 11B2;C357;110A 1164 11B2; # (썗; 썗; 썗; 썗; 썗; ) HANGUL SYLLABLE SSYAELB C358;C358;110A 1164 11B3;C358;110A 1164 11B3; # (썘; 썘; 썘; 썘; 썘; ) HANGUL SYLLABLE SSYAELS C359;C359;110A 1164 11B4;C359;110A 1164 11B4; # (썙; 썙; 썙; 썙; 썙; ) HANGUL SYLLABLE SSYAELT C35A;C35A;110A 1164 11B5;C35A;110A 1164 11B5; # (썚; 썚; 썚; 썚; 썚; ) HANGUL SYLLABLE SSYAELP C35B;C35B;110A 1164 11B6;C35B;110A 1164 11B6; # (썛; 썛; 썛; 썛; 썛; ) HANGUL SYLLABLE SSYAELH C35C;C35C;110A 1164 11B7;C35C;110A 1164 11B7; # (썜; 썜; 썜; 썜; 썜; ) HANGUL SYLLABLE SSYAEM C35D;C35D;110A 1164 11B8;C35D;110A 1164 11B8; # (썝; 썝; 썝; 썝; 썝; ) HANGUL SYLLABLE SSYAEB C35E;C35E;110A 1164 11B9;C35E;110A 1164 11B9; # (썞; 썞; 썞; 썞; 썞; ) HANGUL SYLLABLE SSYAEBS C35F;C35F;110A 1164 11BA;C35F;110A 1164 11BA; # (썟; 썟; 썟; 썟; 썟; ) HANGUL SYLLABLE SSYAES C360;C360;110A 1164 11BB;C360;110A 1164 11BB; # (썠; 썠; 썠; 썠; 썠; ) HANGUL SYLLABLE SSYAESS C361;C361;110A 1164 11BC;C361;110A 1164 11BC; # (썡; 썡; 썡; 썡; 썡; ) HANGUL SYLLABLE SSYAENG C362;C362;110A 1164 11BD;C362;110A 1164 11BD; # (썢; 썢; 썢; 썢; 썢; ) HANGUL SYLLABLE SSYAEJ C363;C363;110A 1164 11BE;C363;110A 1164 11BE; # (썣; 썣; 썣; 썣; 썣; ) HANGUL SYLLABLE SSYAEC C364;C364;110A 1164 11BF;C364;110A 1164 11BF; # (썤; 썤; 썤; 썤; 썤; ) HANGUL SYLLABLE SSYAEK C365;C365;110A 1164 11C0;C365;110A 1164 11C0; # (썥; 썥; 썥; 썥; 썥; ) HANGUL SYLLABLE SSYAET C366;C366;110A 1164 11C1;C366;110A 1164 11C1; # (썦; 썦; 썦; 썦; 썦; ) HANGUL SYLLABLE SSYAEP C367;C367;110A 1164 11C2;C367;110A 1164 11C2; # (썧; 썧; 썧; 썧; 썧; ) HANGUL SYLLABLE SSYAEH C368;C368;110A 1165;C368;110A 1165; # (써; 써; 써; 써; 써; ) HANGUL SYLLABLE SSEO C369;C369;110A 1165 11A8;C369;110A 1165 11A8; # (썩; 썩; 썩; 썩; 썩; ) HANGUL SYLLABLE SSEOG C36A;C36A;110A 1165 11A9;C36A;110A 1165 11A9; # (썪; 썪; 썪; 썪; 썪; ) HANGUL SYLLABLE SSEOGG C36B;C36B;110A 1165 11AA;C36B;110A 1165 11AA; # (썫; 썫; 썫; 썫; 썫; ) HANGUL SYLLABLE SSEOGS C36C;C36C;110A 1165 11AB;C36C;110A 1165 11AB; # (썬; 썬; 썬; 썬; 썬; ) HANGUL SYLLABLE SSEON C36D;C36D;110A 1165 11AC;C36D;110A 1165 11AC; # (썭; 썭; 썭; 썭; 썭; ) HANGUL SYLLABLE SSEONJ C36E;C36E;110A 1165 11AD;C36E;110A 1165 11AD; # (썮; 썮; 썮; 썮; 썮; ) HANGUL SYLLABLE SSEONH C36F;C36F;110A 1165 11AE;C36F;110A 1165 11AE; # (썯; 썯; 썯; 썯; 썯; ) HANGUL SYLLABLE SSEOD C370;C370;110A 1165 11AF;C370;110A 1165 11AF; # (썰; 썰; 썰; 썰; 썰; ) HANGUL SYLLABLE SSEOL C371;C371;110A 1165 11B0;C371;110A 1165 11B0; # (썱; 썱; 썱; 썱; 썱; ) HANGUL SYLLABLE SSEOLG C372;C372;110A 1165 11B1;C372;110A 1165 11B1; # (썲; 썲; 썲; 썲; 썲; ) HANGUL SYLLABLE SSEOLM C373;C373;110A 1165 11B2;C373;110A 1165 11B2; # (썳; 썳; 썳; 썳; 썳; ) HANGUL SYLLABLE SSEOLB C374;C374;110A 1165 11B3;C374;110A 1165 11B3; # (썴; 썴; 썴; 썴; 썴; ) HANGUL SYLLABLE SSEOLS C375;C375;110A 1165 11B4;C375;110A 1165 11B4; # (썵; 썵; 썵; 썵; 썵; ) HANGUL SYLLABLE SSEOLT C376;C376;110A 1165 11B5;C376;110A 1165 11B5; # (썶; 썶; 썶; 썶; 썶; ) HANGUL SYLLABLE SSEOLP C377;C377;110A 1165 11B6;C377;110A 1165 11B6; # (썷; 썷; 썷; 썷; 썷; ) HANGUL SYLLABLE SSEOLH C378;C378;110A 1165 11B7;C378;110A 1165 11B7; # (썸; 썸; 썸; 썸; 썸; ) HANGUL SYLLABLE SSEOM C379;C379;110A 1165 11B8;C379;110A 1165 11B8; # (썹; 썹; 썹; 썹; 썹; ) HANGUL SYLLABLE SSEOB C37A;C37A;110A 1165 11B9;C37A;110A 1165 11B9; # (썺; 썺; 썺; 썺; 썺; ) HANGUL SYLLABLE SSEOBS C37B;C37B;110A 1165 11BA;C37B;110A 1165 11BA; # (썻; 썻; 썻; 썻; 썻; ) HANGUL SYLLABLE SSEOS C37C;C37C;110A 1165 11BB;C37C;110A 1165 11BB; # (썼; 썼; 썼; 썼; 썼; ) HANGUL SYLLABLE SSEOSS C37D;C37D;110A 1165 11BC;C37D;110A 1165 11BC; # (썽; 썽; 썽; 썽; 썽; ) HANGUL SYLLABLE SSEONG C37E;C37E;110A 1165 11BD;C37E;110A 1165 11BD; # (썾; 썾; 썾; 썾; 썾; ) HANGUL SYLLABLE SSEOJ C37F;C37F;110A 1165 11BE;C37F;110A 1165 11BE; # (썿; 썿; 썿; 썿; 썿; ) HANGUL SYLLABLE SSEOC C380;C380;110A 1165 11BF;C380;110A 1165 11BF; # (쎀; 쎀; 쎀; 쎀; 쎀; ) HANGUL SYLLABLE SSEOK C381;C381;110A 1165 11C0;C381;110A 1165 11C0; # (쎁; 쎁; 쎁; 쎁; 쎁; ) HANGUL SYLLABLE SSEOT C382;C382;110A 1165 11C1;C382;110A 1165 11C1; # (쎂; 쎂; 쎂; 쎂; 쎂; ) HANGUL SYLLABLE SSEOP C383;C383;110A 1165 11C2;C383;110A 1165 11C2; # (쎃; 쎃; 쎃; 쎃; 쎃; ) HANGUL SYLLABLE SSEOH C384;C384;110A 1166;C384;110A 1166; # (쎄; 쎄; 쎄; 쎄; 쎄; ) HANGUL SYLLABLE SSE C385;C385;110A 1166 11A8;C385;110A 1166 11A8; # (쎅; 쎅; 쎅; 쎅; 쎅; ) HANGUL SYLLABLE SSEG C386;C386;110A 1166 11A9;C386;110A 1166 11A9; # (쎆; 쎆; 쎆; 쎆; 쎆; ) HANGUL SYLLABLE SSEGG C387;C387;110A 1166 11AA;C387;110A 1166 11AA; # (쎇; 쎇; 쎇; 쎇; 쎇; ) HANGUL SYLLABLE SSEGS C388;C388;110A 1166 11AB;C388;110A 1166 11AB; # (쎈; 쎈; 쎈; 쎈; 쎈; ) HANGUL SYLLABLE SSEN C389;C389;110A 1166 11AC;C389;110A 1166 11AC; # (쎉; 쎉; 쎉; 쎉; 쎉; ) HANGUL SYLLABLE SSENJ C38A;C38A;110A 1166 11AD;C38A;110A 1166 11AD; # (쎊; 쎊; 쎊; 쎊; 쎊; ) HANGUL SYLLABLE SSENH C38B;C38B;110A 1166 11AE;C38B;110A 1166 11AE; # (쎋; 쎋; 쎋; 쎋; 쎋; ) HANGUL SYLLABLE SSED C38C;C38C;110A 1166 11AF;C38C;110A 1166 11AF; # (쎌; 쎌; 쎌; 쎌; 쎌; ) HANGUL SYLLABLE SSEL C38D;C38D;110A 1166 11B0;C38D;110A 1166 11B0; # (쎍; 쎍; 쎍; 쎍; 쎍; ) HANGUL SYLLABLE SSELG C38E;C38E;110A 1166 11B1;C38E;110A 1166 11B1; # (쎎; 쎎; 쎎; 쎎; 쎎; ) HANGUL SYLLABLE SSELM C38F;C38F;110A 1166 11B2;C38F;110A 1166 11B2; # (쎏; 쎏; 쎏; 쎏; 쎏; ) HANGUL SYLLABLE SSELB C390;C390;110A 1166 11B3;C390;110A 1166 11B3; # (쎐; 쎐; 쎐; 쎐; 쎐; ) HANGUL SYLLABLE SSELS C391;C391;110A 1166 11B4;C391;110A 1166 11B4; # (쎑; 쎑; 쎑; 쎑; 쎑; ) HANGUL SYLLABLE SSELT C392;C392;110A 1166 11B5;C392;110A 1166 11B5; # (쎒; 쎒; 쎒; 쎒; 쎒; ) HANGUL SYLLABLE SSELP C393;C393;110A 1166 11B6;C393;110A 1166 11B6; # (쎓; 쎓; 쎓; 쎓; 쎓; ) HANGUL SYLLABLE SSELH C394;C394;110A 1166 11B7;C394;110A 1166 11B7; # (쎔; 쎔; 쎔; 쎔; 쎔; ) HANGUL SYLLABLE SSEM C395;C395;110A 1166 11B8;C395;110A 1166 11B8; # (쎕; 쎕; 쎕; 쎕; 쎕; ) HANGUL SYLLABLE SSEB C396;C396;110A 1166 11B9;C396;110A 1166 11B9; # (쎖; 쎖; 쎖; 쎖; 쎖; ) HANGUL SYLLABLE SSEBS C397;C397;110A 1166 11BA;C397;110A 1166 11BA; # (쎗; 쎗; 쎗; 쎗; 쎗; ) HANGUL SYLLABLE SSES C398;C398;110A 1166 11BB;C398;110A 1166 11BB; # (쎘; 쎘; 쎘; 쎘; 쎘; ) HANGUL SYLLABLE SSESS C399;C399;110A 1166 11BC;C399;110A 1166 11BC; # (쎙; 쎙; 쎙; 쎙; 쎙; ) HANGUL SYLLABLE SSENG C39A;C39A;110A 1166 11BD;C39A;110A 1166 11BD; # (쎚; 쎚; 쎚; 쎚; 쎚; ) HANGUL SYLLABLE SSEJ C39B;C39B;110A 1166 11BE;C39B;110A 1166 11BE; # (쎛; 쎛; 쎛; 쎛; 쎛; ) HANGUL SYLLABLE SSEC C39C;C39C;110A 1166 11BF;C39C;110A 1166 11BF; # (쎜; 쎜; 쎜; 쎜; 쎜; ) HANGUL SYLLABLE SSEK C39D;C39D;110A 1166 11C0;C39D;110A 1166 11C0; # (쎝; 쎝; 쎝; 쎝; 쎝; ) HANGUL SYLLABLE SSET C39E;C39E;110A 1166 11C1;C39E;110A 1166 11C1; # (쎞; 쎞; 쎞; 쎞; 쎞; ) HANGUL SYLLABLE SSEP C39F;C39F;110A 1166 11C2;C39F;110A 1166 11C2; # (쎟; 쎟; 쎟; 쎟; 쎟; ) HANGUL SYLLABLE SSEH C3A0;C3A0;110A 1167;C3A0;110A 1167; # (쎠; 쎠; 쎠; 쎠; 쎠; ) HANGUL SYLLABLE SSYEO C3A1;C3A1;110A 1167 11A8;C3A1;110A 1167 11A8; # (쎡; 쎡; 쎡; 쎡; 쎡; ) HANGUL SYLLABLE SSYEOG C3A2;C3A2;110A 1167 11A9;C3A2;110A 1167 11A9; # (쎢; 쎢; 쎢; 쎢; 쎢; ) HANGUL SYLLABLE SSYEOGG C3A3;C3A3;110A 1167 11AA;C3A3;110A 1167 11AA; # (쎣; 쎣; 쎣; 쎣; 쎣; ) HANGUL SYLLABLE SSYEOGS C3A4;C3A4;110A 1167 11AB;C3A4;110A 1167 11AB; # (쎤; 쎤; 쎤; 쎤; 쎤; ) HANGUL SYLLABLE SSYEON C3A5;C3A5;110A 1167 11AC;C3A5;110A 1167 11AC; # (쎥; 쎥; 쎥; 쎥; 쎥; ) HANGUL SYLLABLE SSYEONJ C3A6;C3A6;110A 1167 11AD;C3A6;110A 1167 11AD; # (쎦; 쎦; 쎦; 쎦; 쎦; ) HANGUL SYLLABLE SSYEONH C3A7;C3A7;110A 1167 11AE;C3A7;110A 1167 11AE; # (쎧; 쎧; 쎧; 쎧; 쎧; ) HANGUL SYLLABLE SSYEOD C3A8;C3A8;110A 1167 11AF;C3A8;110A 1167 11AF; # (쎨; 쎨; 쎨; 쎨; 쎨; ) HANGUL SYLLABLE SSYEOL C3A9;C3A9;110A 1167 11B0;C3A9;110A 1167 11B0; # (쎩; 쎩; 쎩; 쎩; 쎩; ) HANGUL SYLLABLE SSYEOLG C3AA;C3AA;110A 1167 11B1;C3AA;110A 1167 11B1; # (쎪; 쎪; 쎪; 쎪; 쎪; ) HANGUL SYLLABLE SSYEOLM C3AB;C3AB;110A 1167 11B2;C3AB;110A 1167 11B2; # (쎫; 쎫; 쎫; 쎫; 쎫; ) HANGUL SYLLABLE SSYEOLB C3AC;C3AC;110A 1167 11B3;C3AC;110A 1167 11B3; # (쎬; 쎬; 쎬; 쎬; 쎬; ) HANGUL SYLLABLE SSYEOLS C3AD;C3AD;110A 1167 11B4;C3AD;110A 1167 11B4; # (쎭; 쎭; 쎭; 쎭; 쎭; ) HANGUL SYLLABLE SSYEOLT C3AE;C3AE;110A 1167 11B5;C3AE;110A 1167 11B5; # (쎮; 쎮; 쎮; 쎮; 쎮; ) HANGUL SYLLABLE SSYEOLP C3AF;C3AF;110A 1167 11B6;C3AF;110A 1167 11B6; # (쎯; 쎯; 쎯; 쎯; 쎯; ) HANGUL SYLLABLE SSYEOLH C3B0;C3B0;110A 1167 11B7;C3B0;110A 1167 11B7; # (쎰; 쎰; 쎰; 쎰; 쎰; ) HANGUL SYLLABLE SSYEOM C3B1;C3B1;110A 1167 11B8;C3B1;110A 1167 11B8; # (쎱; 쎱; 쎱; 쎱; 쎱; ) HANGUL SYLLABLE SSYEOB C3B2;C3B2;110A 1167 11B9;C3B2;110A 1167 11B9; # (쎲; 쎲; 쎲; 쎲; 쎲; ) HANGUL SYLLABLE SSYEOBS C3B3;C3B3;110A 1167 11BA;C3B3;110A 1167 11BA; # (쎳; 쎳; 쎳; 쎳; 쎳; ) HANGUL SYLLABLE SSYEOS C3B4;C3B4;110A 1167 11BB;C3B4;110A 1167 11BB; # (쎴; 쎴; 쎴; 쎴; 쎴; ) HANGUL SYLLABLE SSYEOSS C3B5;C3B5;110A 1167 11BC;C3B5;110A 1167 11BC; # (쎵; 쎵; 쎵; 쎵; 쎵; ) HANGUL SYLLABLE SSYEONG C3B6;C3B6;110A 1167 11BD;C3B6;110A 1167 11BD; # (쎶; 쎶; 쎶; 쎶; 쎶; ) HANGUL SYLLABLE SSYEOJ C3B7;C3B7;110A 1167 11BE;C3B7;110A 1167 11BE; # (쎷; 쎷; 쎷; 쎷; 쎷; ) HANGUL SYLLABLE SSYEOC C3B8;C3B8;110A 1167 11BF;C3B8;110A 1167 11BF; # (쎸; 쎸; 쎸; 쎸; 쎸; ) HANGUL SYLLABLE SSYEOK C3B9;C3B9;110A 1167 11C0;C3B9;110A 1167 11C0; # (쎹; 쎹; 쎹; 쎹; 쎹; ) HANGUL SYLLABLE SSYEOT C3BA;C3BA;110A 1167 11C1;C3BA;110A 1167 11C1; # (쎺; 쎺; 쎺; 쎺; 쎺; ) HANGUL SYLLABLE SSYEOP C3BB;C3BB;110A 1167 11C2;C3BB;110A 1167 11C2; # (쎻; 쎻; 쎻; 쎻; 쎻; ) HANGUL SYLLABLE SSYEOH C3BC;C3BC;110A 1168;C3BC;110A 1168; # (쎼; 쎼; 쎼; 쎼; 쎼; ) HANGUL SYLLABLE SSYE C3BD;C3BD;110A 1168 11A8;C3BD;110A 1168 11A8; # (쎽; 쎽; 쎽; 쎽; 쎽; ) HANGUL SYLLABLE SSYEG C3BE;C3BE;110A 1168 11A9;C3BE;110A 1168 11A9; # (쎾; 쎾; 쎾; 쎾; 쎾; ) HANGUL SYLLABLE SSYEGG C3BF;C3BF;110A 1168 11AA;C3BF;110A 1168 11AA; # (쎿; 쎿; 쎿; 쎿; 쎿; ) HANGUL SYLLABLE SSYEGS C3C0;C3C0;110A 1168 11AB;C3C0;110A 1168 11AB; # (쏀; 쏀; 쏀; 쏀; 쏀; ) HANGUL SYLLABLE SSYEN C3C1;C3C1;110A 1168 11AC;C3C1;110A 1168 11AC; # (쏁; 쏁; 쏁; 쏁; 쏁; ) HANGUL SYLLABLE SSYENJ C3C2;C3C2;110A 1168 11AD;C3C2;110A 1168 11AD; # (쏂; 쏂; 쏂; 쏂; 쏂; ) HANGUL SYLLABLE SSYENH C3C3;C3C3;110A 1168 11AE;C3C3;110A 1168 11AE; # (쏃; 쏃; 쏃; 쏃; 쏃; ) HANGUL SYLLABLE SSYED C3C4;C3C4;110A 1168 11AF;C3C4;110A 1168 11AF; # (쏄; 쏄; 쏄; 쏄; 쏄; ) HANGUL SYLLABLE SSYEL C3C5;C3C5;110A 1168 11B0;C3C5;110A 1168 11B0; # (쏅; 쏅; 쏅; 쏅; 쏅; ) HANGUL SYLLABLE SSYELG C3C6;C3C6;110A 1168 11B1;C3C6;110A 1168 11B1; # (쏆; 쏆; 쏆; 쏆; 쏆; ) HANGUL SYLLABLE SSYELM C3C7;C3C7;110A 1168 11B2;C3C7;110A 1168 11B2; # (쏇; 쏇; 쏇; 쏇; 쏇; ) HANGUL SYLLABLE SSYELB C3C8;C3C8;110A 1168 11B3;C3C8;110A 1168 11B3; # (쏈; 쏈; 쏈; 쏈; 쏈; ) HANGUL SYLLABLE SSYELS C3C9;C3C9;110A 1168 11B4;C3C9;110A 1168 11B4; # (쏉; 쏉; 쏉; 쏉; 쏉; ) HANGUL SYLLABLE SSYELT C3CA;C3CA;110A 1168 11B5;C3CA;110A 1168 11B5; # (쏊; 쏊; 쏊; 쏊; 쏊; ) HANGUL SYLLABLE SSYELP C3CB;C3CB;110A 1168 11B6;C3CB;110A 1168 11B6; # (쏋; 쏋; 쏋; 쏋; 쏋; ) HANGUL SYLLABLE SSYELH C3CC;C3CC;110A 1168 11B7;C3CC;110A 1168 11B7; # (쏌; 쏌; 쏌; 쏌; 쏌; ) HANGUL SYLLABLE SSYEM C3CD;C3CD;110A 1168 11B8;C3CD;110A 1168 11B8; # (쏍; 쏍; 쏍; 쏍; 쏍; ) HANGUL SYLLABLE SSYEB C3CE;C3CE;110A 1168 11B9;C3CE;110A 1168 11B9; # (쏎; 쏎; 쏎; 쏎; 쏎; ) HANGUL SYLLABLE SSYEBS C3CF;C3CF;110A 1168 11BA;C3CF;110A 1168 11BA; # (쏏; 쏏; 쏏; 쏏; 쏏; ) HANGUL SYLLABLE SSYES C3D0;C3D0;110A 1168 11BB;C3D0;110A 1168 11BB; # (쏐; 쏐; 쏐; 쏐; 쏐; ) HANGUL SYLLABLE SSYESS C3D1;C3D1;110A 1168 11BC;C3D1;110A 1168 11BC; # (쏑; 쏑; 쏑; 쏑; 쏑; ) HANGUL SYLLABLE SSYENG C3D2;C3D2;110A 1168 11BD;C3D2;110A 1168 11BD; # (쏒; 쏒; 쏒; 쏒; 쏒; ) HANGUL SYLLABLE SSYEJ C3D3;C3D3;110A 1168 11BE;C3D3;110A 1168 11BE; # (쏓; 쏓; 쏓; 쏓; 쏓; ) HANGUL SYLLABLE SSYEC C3D4;C3D4;110A 1168 11BF;C3D4;110A 1168 11BF; # (쏔; 쏔; 쏔; 쏔; 쏔; ) HANGUL SYLLABLE SSYEK C3D5;C3D5;110A 1168 11C0;C3D5;110A 1168 11C0; # (쏕; 쏕; 쏕; 쏕; 쏕; ) HANGUL SYLLABLE SSYET C3D6;C3D6;110A 1168 11C1;C3D6;110A 1168 11C1; # (쏖; 쏖; 쏖; 쏖; 쏖; ) HANGUL SYLLABLE SSYEP C3D7;C3D7;110A 1168 11C2;C3D7;110A 1168 11C2; # (쏗; 쏗; 쏗; 쏗; 쏗; ) HANGUL SYLLABLE SSYEH C3D8;C3D8;110A 1169;C3D8;110A 1169; # (쏘; 쏘; 쏘; 쏘; 쏘; ) HANGUL SYLLABLE SSO C3D9;C3D9;110A 1169 11A8;C3D9;110A 1169 11A8; # (쏙; 쏙; 쏙; 쏙; 쏙; ) HANGUL SYLLABLE SSOG C3DA;C3DA;110A 1169 11A9;C3DA;110A 1169 11A9; # (쏚; 쏚; 쏚; 쏚; 쏚; ) HANGUL SYLLABLE SSOGG C3DB;C3DB;110A 1169 11AA;C3DB;110A 1169 11AA; # (쏛; 쏛; 쏛; 쏛; 쏛; ) HANGUL SYLLABLE SSOGS C3DC;C3DC;110A 1169 11AB;C3DC;110A 1169 11AB; # (쏜; 쏜; 쏜; 쏜; 쏜; ) HANGUL SYLLABLE SSON C3DD;C3DD;110A 1169 11AC;C3DD;110A 1169 11AC; # (쏝; 쏝; 쏝; 쏝; 쏝; ) HANGUL SYLLABLE SSONJ C3DE;C3DE;110A 1169 11AD;C3DE;110A 1169 11AD; # (쏞; 쏞; 쏞; 쏞; 쏞; ) HANGUL SYLLABLE SSONH C3DF;C3DF;110A 1169 11AE;C3DF;110A 1169 11AE; # (쏟; 쏟; 쏟; 쏟; 쏟; ) HANGUL SYLLABLE SSOD C3E0;C3E0;110A 1169 11AF;C3E0;110A 1169 11AF; # (쏠; 쏠; 쏠; 쏠; 쏠; ) HANGUL SYLLABLE SSOL C3E1;C3E1;110A 1169 11B0;C3E1;110A 1169 11B0; # (쏡; 쏡; 쏡; 쏡; 쏡; ) HANGUL SYLLABLE SSOLG C3E2;C3E2;110A 1169 11B1;C3E2;110A 1169 11B1; # (쏢; 쏢; 쏢; 쏢; 쏢; ) HANGUL SYLLABLE SSOLM C3E3;C3E3;110A 1169 11B2;C3E3;110A 1169 11B2; # (쏣; 쏣; 쏣; 쏣; 쏣; ) HANGUL SYLLABLE SSOLB C3E4;C3E4;110A 1169 11B3;C3E4;110A 1169 11B3; # (쏤; 쏤; 쏤; 쏤; 쏤; ) HANGUL SYLLABLE SSOLS C3E5;C3E5;110A 1169 11B4;C3E5;110A 1169 11B4; # (쏥; 쏥; 쏥; 쏥; 쏥; ) HANGUL SYLLABLE SSOLT C3E6;C3E6;110A 1169 11B5;C3E6;110A 1169 11B5; # (쏦; 쏦; 쏦; 쏦; 쏦; ) HANGUL SYLLABLE SSOLP C3E7;C3E7;110A 1169 11B6;C3E7;110A 1169 11B6; # (쏧; 쏧; 쏧; 쏧; 쏧; ) HANGUL SYLLABLE SSOLH C3E8;C3E8;110A 1169 11B7;C3E8;110A 1169 11B7; # (쏨; 쏨; 쏨; 쏨; 쏨; ) HANGUL SYLLABLE SSOM C3E9;C3E9;110A 1169 11B8;C3E9;110A 1169 11B8; # (쏩; 쏩; 쏩; 쏩; 쏩; ) HANGUL SYLLABLE SSOB C3EA;C3EA;110A 1169 11B9;C3EA;110A 1169 11B9; # (쏪; 쏪; 쏪; 쏪; 쏪; ) HANGUL SYLLABLE SSOBS C3EB;C3EB;110A 1169 11BA;C3EB;110A 1169 11BA; # (쏫; 쏫; 쏫; 쏫; 쏫; ) HANGUL SYLLABLE SSOS C3EC;C3EC;110A 1169 11BB;C3EC;110A 1169 11BB; # (쏬; 쏬; 쏬; 쏬; 쏬; ) HANGUL SYLLABLE SSOSS C3ED;C3ED;110A 1169 11BC;C3ED;110A 1169 11BC; # (쏭; 쏭; 쏭; 쏭; 쏭; ) HANGUL SYLLABLE SSONG C3EE;C3EE;110A 1169 11BD;C3EE;110A 1169 11BD; # (쏮; 쏮; 쏮; 쏮; 쏮; ) HANGUL SYLLABLE SSOJ C3EF;C3EF;110A 1169 11BE;C3EF;110A 1169 11BE; # (쏯; 쏯; 쏯; 쏯; 쏯; ) HANGUL SYLLABLE SSOC C3F0;C3F0;110A 1169 11BF;C3F0;110A 1169 11BF; # (쏰; 쏰; 쏰; 쏰; 쏰; ) HANGUL SYLLABLE SSOK C3F1;C3F1;110A 1169 11C0;C3F1;110A 1169 11C0; # (쏱; 쏱; 쏱; 쏱; 쏱; ) HANGUL SYLLABLE SSOT C3F2;C3F2;110A 1169 11C1;C3F2;110A 1169 11C1; # (쏲; 쏲; 쏲; 쏲; 쏲; ) HANGUL SYLLABLE SSOP C3F3;C3F3;110A 1169 11C2;C3F3;110A 1169 11C2; # (쏳; 쏳; 쏳; 쏳; 쏳; ) HANGUL SYLLABLE SSOH C3F4;C3F4;110A 116A;C3F4;110A 116A; # (쏴; 쏴; 쏴; 쏴; 쏴; ) HANGUL SYLLABLE SSWA C3F5;C3F5;110A 116A 11A8;C3F5;110A 116A 11A8; # (쏵; 쏵; 쏵; 쏵; 쏵; ) HANGUL SYLLABLE SSWAG C3F6;C3F6;110A 116A 11A9;C3F6;110A 116A 11A9; # (쏶; 쏶; 쏶; 쏶; 쏶; ) HANGUL SYLLABLE SSWAGG C3F7;C3F7;110A 116A 11AA;C3F7;110A 116A 11AA; # (쏷; 쏷; 쏷; 쏷; 쏷; ) HANGUL SYLLABLE SSWAGS C3F8;C3F8;110A 116A 11AB;C3F8;110A 116A 11AB; # (쏸; 쏸; 쏸; 쏸; 쏸; ) HANGUL SYLLABLE SSWAN C3F9;C3F9;110A 116A 11AC;C3F9;110A 116A 11AC; # (쏹; 쏹; 쏹; 쏹; 쏹; ) HANGUL SYLLABLE SSWANJ C3FA;C3FA;110A 116A 11AD;C3FA;110A 116A 11AD; # (쏺; 쏺; 쏺; 쏺; 쏺; ) HANGUL SYLLABLE SSWANH C3FB;C3FB;110A 116A 11AE;C3FB;110A 116A 11AE; # (쏻; 쏻; 쏻; 쏻; 쏻; ) HANGUL SYLLABLE SSWAD C3FC;C3FC;110A 116A 11AF;C3FC;110A 116A 11AF; # (쏼; 쏼; 쏼; 쏼; 쏼; ) HANGUL SYLLABLE SSWAL C3FD;C3FD;110A 116A 11B0;C3FD;110A 116A 11B0; # (쏽; 쏽; 쏽; 쏽; 쏽; ) HANGUL SYLLABLE SSWALG C3FE;C3FE;110A 116A 11B1;C3FE;110A 116A 11B1; # (쏾; 쏾; 쏾; 쏾; 쏾; ) HANGUL SYLLABLE SSWALM C3FF;C3FF;110A 116A 11B2;C3FF;110A 116A 11B2; # (쏿; 쏿; 쏿; 쏿; 쏿; ) HANGUL SYLLABLE SSWALB C400;C400;110A 116A 11B3;C400;110A 116A 11B3; # (쐀; 쐀; 쐀; 쐀; 쐀; ) HANGUL SYLLABLE SSWALS C401;C401;110A 116A 11B4;C401;110A 116A 11B4; # (쐁; 쐁; 쐁; 쐁; 쐁; ) HANGUL SYLLABLE SSWALT C402;C402;110A 116A 11B5;C402;110A 116A 11B5; # (쐂; 쐂; 쐂; 쐂; 쐂; ) HANGUL SYLLABLE SSWALP C403;C403;110A 116A 11B6;C403;110A 116A 11B6; # (쐃; 쐃; 쐃; 쐃; 쐃; ) HANGUL SYLLABLE SSWALH C404;C404;110A 116A 11B7;C404;110A 116A 11B7; # (쐄; 쐄; 쐄; 쐄; 쐄; ) HANGUL SYLLABLE SSWAM C405;C405;110A 116A 11B8;C405;110A 116A 11B8; # (쐅; 쐅; 쐅; 쐅; 쐅; ) HANGUL SYLLABLE SSWAB C406;C406;110A 116A 11B9;C406;110A 116A 11B9; # (쐆; 쐆; 쐆; 쐆; 쐆; ) HANGUL SYLLABLE SSWABS C407;C407;110A 116A 11BA;C407;110A 116A 11BA; # (쐇; 쐇; 쐇; 쐇; 쐇; ) HANGUL SYLLABLE SSWAS C408;C408;110A 116A 11BB;C408;110A 116A 11BB; # (쐈; 쐈; 쐈; 쐈; 쐈; ) HANGUL SYLLABLE SSWASS C409;C409;110A 116A 11BC;C409;110A 116A 11BC; # (쐉; 쐉; 쐉; 쐉; 쐉; ) HANGUL SYLLABLE SSWANG C40A;C40A;110A 116A 11BD;C40A;110A 116A 11BD; # (쐊; 쐊; 쐊; 쐊; 쐊; ) HANGUL SYLLABLE SSWAJ C40B;C40B;110A 116A 11BE;C40B;110A 116A 11BE; # (쐋; 쐋; 쐋; 쐋; 쐋; ) HANGUL SYLLABLE SSWAC C40C;C40C;110A 116A 11BF;C40C;110A 116A 11BF; # (쐌; 쐌; 쐌; 쐌; 쐌; ) HANGUL SYLLABLE SSWAK C40D;C40D;110A 116A 11C0;C40D;110A 116A 11C0; # (쐍; 쐍; 쐍; 쐍; 쐍; ) HANGUL SYLLABLE SSWAT C40E;C40E;110A 116A 11C1;C40E;110A 116A 11C1; # (쐎; 쐎; 쐎; 쐎; 쐎; ) HANGUL SYLLABLE SSWAP C40F;C40F;110A 116A 11C2;C40F;110A 116A 11C2; # (쐏; 쐏; 쐏; 쐏; 쐏; ) HANGUL SYLLABLE SSWAH C410;C410;110A 116B;C410;110A 116B; # (쐐; 쐐; 쐐; 쐐; 쐐; ) HANGUL SYLLABLE SSWAE C411;C411;110A 116B 11A8;C411;110A 116B 11A8; # (쐑; 쐑; 쐑; 쐑; 쐑; ) HANGUL SYLLABLE SSWAEG C412;C412;110A 116B 11A9;C412;110A 116B 11A9; # (쐒; 쐒; 쐒; 쐒; 쐒; ) HANGUL SYLLABLE SSWAEGG C413;C413;110A 116B 11AA;C413;110A 116B 11AA; # (쐓; 쐓; 쐓; 쐓; 쐓; ) HANGUL SYLLABLE SSWAEGS C414;C414;110A 116B 11AB;C414;110A 116B 11AB; # (쐔; 쐔; 쐔; 쐔; 쐔; ) HANGUL SYLLABLE SSWAEN C415;C415;110A 116B 11AC;C415;110A 116B 11AC; # (쐕; 쐕; 쐕; 쐕; 쐕; ) HANGUL SYLLABLE SSWAENJ C416;C416;110A 116B 11AD;C416;110A 116B 11AD; # (쐖; 쐖; 쐖; 쐖; 쐖; ) HANGUL SYLLABLE SSWAENH C417;C417;110A 116B 11AE;C417;110A 116B 11AE; # (쐗; 쐗; 쐗; 쐗; 쐗; ) HANGUL SYLLABLE SSWAED C418;C418;110A 116B 11AF;C418;110A 116B 11AF; # (쐘; 쐘; 쐘; 쐘; 쐘; ) HANGUL SYLLABLE SSWAEL C419;C419;110A 116B 11B0;C419;110A 116B 11B0; # (쐙; 쐙; 쐙; 쐙; 쐙; ) HANGUL SYLLABLE SSWAELG C41A;C41A;110A 116B 11B1;C41A;110A 116B 11B1; # (쐚; 쐚; 쐚; 쐚; 쐚; ) HANGUL SYLLABLE SSWAELM C41B;C41B;110A 116B 11B2;C41B;110A 116B 11B2; # (쐛; 쐛; 쐛; 쐛; 쐛; ) HANGUL SYLLABLE SSWAELB C41C;C41C;110A 116B 11B3;C41C;110A 116B 11B3; # (쐜; 쐜; 쐜; 쐜; 쐜; ) HANGUL SYLLABLE SSWAELS C41D;C41D;110A 116B 11B4;C41D;110A 116B 11B4; # (쐝; 쐝; 쐝; 쐝; 쐝; ) HANGUL SYLLABLE SSWAELT C41E;C41E;110A 116B 11B5;C41E;110A 116B 11B5; # (쐞; 쐞; 쐞; 쐞; 쐞; ) HANGUL SYLLABLE SSWAELP C41F;C41F;110A 116B 11B6;C41F;110A 116B 11B6; # (쐟; 쐟; 쐟; 쐟; 쐟; ) HANGUL SYLLABLE SSWAELH C420;C420;110A 116B 11B7;C420;110A 116B 11B7; # (쐠; 쐠; 쐠; 쐠; 쐠; ) HANGUL SYLLABLE SSWAEM C421;C421;110A 116B 11B8;C421;110A 116B 11B8; # (쐡; 쐡; 쐡; 쐡; 쐡; ) HANGUL SYLLABLE SSWAEB C422;C422;110A 116B 11B9;C422;110A 116B 11B9; # (쐢; 쐢; 쐢; 쐢; 쐢; ) HANGUL SYLLABLE SSWAEBS C423;C423;110A 116B 11BA;C423;110A 116B 11BA; # (쐣; 쐣; 쐣; 쐣; 쐣; ) HANGUL SYLLABLE SSWAES C424;C424;110A 116B 11BB;C424;110A 116B 11BB; # (쐤; 쐤; 쐤; 쐤; 쐤; ) HANGUL SYLLABLE SSWAESS C425;C425;110A 116B 11BC;C425;110A 116B 11BC; # (쐥; 쐥; 쐥; 쐥; 쐥; ) HANGUL SYLLABLE SSWAENG C426;C426;110A 116B 11BD;C426;110A 116B 11BD; # (쐦; 쐦; 쐦; 쐦; 쐦; ) HANGUL SYLLABLE SSWAEJ C427;C427;110A 116B 11BE;C427;110A 116B 11BE; # (쐧; 쐧; 쐧; 쐧; 쐧; ) HANGUL SYLLABLE SSWAEC C428;C428;110A 116B 11BF;C428;110A 116B 11BF; # (쐨; 쐨; 쐨; 쐨; 쐨; ) HANGUL SYLLABLE SSWAEK C429;C429;110A 116B 11C0;C429;110A 116B 11C0; # (쐩; 쐩; 쐩; 쐩; 쐩; ) HANGUL SYLLABLE SSWAET C42A;C42A;110A 116B 11C1;C42A;110A 116B 11C1; # (쐪; 쐪; 쐪; 쐪; 쐪; ) HANGUL SYLLABLE SSWAEP C42B;C42B;110A 116B 11C2;C42B;110A 116B 11C2; # (쐫; 쐫; 쐫; 쐫; 쐫; ) HANGUL SYLLABLE SSWAEH C42C;C42C;110A 116C;C42C;110A 116C; # (쐬; 쐬; 쐬; 쐬; 쐬; ) HANGUL SYLLABLE SSOE C42D;C42D;110A 116C 11A8;C42D;110A 116C 11A8; # (쐭; 쐭; 쐭; 쐭; 쐭; ) HANGUL SYLLABLE SSOEG C42E;C42E;110A 116C 11A9;C42E;110A 116C 11A9; # (쐮; 쐮; 쐮; 쐮; 쐮; ) HANGUL SYLLABLE SSOEGG C42F;C42F;110A 116C 11AA;C42F;110A 116C 11AA; # (쐯; 쐯; 쐯; 쐯; 쐯; ) HANGUL SYLLABLE SSOEGS C430;C430;110A 116C 11AB;C430;110A 116C 11AB; # (쐰; 쐰; 쐰; 쐰; 쐰; ) HANGUL SYLLABLE SSOEN C431;C431;110A 116C 11AC;C431;110A 116C 11AC; # (쐱; 쐱; 쐱; 쐱; 쐱; ) HANGUL SYLLABLE SSOENJ C432;C432;110A 116C 11AD;C432;110A 116C 11AD; # (쐲; 쐲; 쐲; 쐲; 쐲; ) HANGUL SYLLABLE SSOENH C433;C433;110A 116C 11AE;C433;110A 116C 11AE; # (쐳; 쐳; 쐳; 쐳; 쐳; ) HANGUL SYLLABLE SSOED C434;C434;110A 116C 11AF;C434;110A 116C 11AF; # (쐴; 쐴; 쐴; 쐴; 쐴; ) HANGUL SYLLABLE SSOEL C435;C435;110A 116C 11B0;C435;110A 116C 11B0; # (쐵; 쐵; 쐵; 쐵; 쐵; ) HANGUL SYLLABLE SSOELG C436;C436;110A 116C 11B1;C436;110A 116C 11B1; # (쐶; 쐶; 쐶; 쐶; 쐶; ) HANGUL SYLLABLE SSOELM C437;C437;110A 116C 11B2;C437;110A 116C 11B2; # (쐷; 쐷; 쐷; 쐷; 쐷; ) HANGUL SYLLABLE SSOELB C438;C438;110A 116C 11B3;C438;110A 116C 11B3; # (쐸; 쐸; 쐸; 쐸; 쐸; ) HANGUL SYLLABLE SSOELS C439;C439;110A 116C 11B4;C439;110A 116C 11B4; # (쐹; 쐹; 쐹; 쐹; 쐹; ) HANGUL SYLLABLE SSOELT C43A;C43A;110A 116C 11B5;C43A;110A 116C 11B5; # (쐺; 쐺; 쐺; 쐺; 쐺; ) HANGUL SYLLABLE SSOELP C43B;C43B;110A 116C 11B6;C43B;110A 116C 11B6; # (쐻; 쐻; 쐻; 쐻; 쐻; ) HANGUL SYLLABLE SSOELH C43C;C43C;110A 116C 11B7;C43C;110A 116C 11B7; # (쐼; 쐼; 쐼; 쐼; 쐼; ) HANGUL SYLLABLE SSOEM C43D;C43D;110A 116C 11B8;C43D;110A 116C 11B8; # (쐽; 쐽; 쐽; 쐽; 쐽; ) HANGUL SYLLABLE SSOEB C43E;C43E;110A 116C 11B9;C43E;110A 116C 11B9; # (쐾; 쐾; 쐾; 쐾; 쐾; ) HANGUL SYLLABLE SSOEBS C43F;C43F;110A 116C 11BA;C43F;110A 116C 11BA; # (쐿; 쐿; 쐿; 쐿; 쐿; ) HANGUL SYLLABLE SSOES C440;C440;110A 116C 11BB;C440;110A 116C 11BB; # (쑀; 쑀; 쑀; 쑀; 쑀; ) HANGUL SYLLABLE SSOESS C441;C441;110A 116C 11BC;C441;110A 116C 11BC; # (쑁; 쑁; 쑁; 쑁; 쑁; ) HANGUL SYLLABLE SSOENG C442;C442;110A 116C 11BD;C442;110A 116C 11BD; # (쑂; 쑂; 쑂; 쑂; 쑂; ) HANGUL SYLLABLE SSOEJ C443;C443;110A 116C 11BE;C443;110A 116C 11BE; # (쑃; 쑃; 쑃; 쑃; 쑃; ) HANGUL SYLLABLE SSOEC C444;C444;110A 116C 11BF;C444;110A 116C 11BF; # (쑄; 쑄; 쑄; 쑄; 쑄; ) HANGUL SYLLABLE SSOEK C445;C445;110A 116C 11C0;C445;110A 116C 11C0; # (쑅; 쑅; 쑅; 쑅; 쑅; ) HANGUL SYLLABLE SSOET C446;C446;110A 116C 11C1;C446;110A 116C 11C1; # (쑆; 쑆; 쑆; 쑆; 쑆; ) HANGUL SYLLABLE SSOEP C447;C447;110A 116C 11C2;C447;110A 116C 11C2; # (쑇; 쑇; 쑇; 쑇; 쑇; ) HANGUL SYLLABLE SSOEH C448;C448;110A 116D;C448;110A 116D; # (쑈; 쑈; 쑈; 쑈; 쑈; ) HANGUL SYLLABLE SSYO C449;C449;110A 116D 11A8;C449;110A 116D 11A8; # (쑉; 쑉; 쑉; 쑉; 쑉; ) HANGUL SYLLABLE SSYOG C44A;C44A;110A 116D 11A9;C44A;110A 116D 11A9; # (쑊; 쑊; 쑊; 쑊; 쑊; ) HANGUL SYLLABLE SSYOGG C44B;C44B;110A 116D 11AA;C44B;110A 116D 11AA; # (쑋; 쑋; 쑋; 쑋; 쑋; ) HANGUL SYLLABLE SSYOGS C44C;C44C;110A 116D 11AB;C44C;110A 116D 11AB; # (쑌; 쑌; 쑌; 쑌; 쑌; ) HANGUL SYLLABLE SSYON C44D;C44D;110A 116D 11AC;C44D;110A 116D 11AC; # (쑍; 쑍; 쑍; 쑍; 쑍; ) HANGUL SYLLABLE SSYONJ C44E;C44E;110A 116D 11AD;C44E;110A 116D 11AD; # (쑎; 쑎; 쑎; 쑎; 쑎; ) HANGUL SYLLABLE SSYONH C44F;C44F;110A 116D 11AE;C44F;110A 116D 11AE; # (쑏; 쑏; 쑏; 쑏; 쑏; ) HANGUL SYLLABLE SSYOD C450;C450;110A 116D 11AF;C450;110A 116D 11AF; # (쑐; 쑐; 쑐; 쑐; 쑐; ) HANGUL SYLLABLE SSYOL C451;C451;110A 116D 11B0;C451;110A 116D 11B0; # (쑑; 쑑; 쑑; 쑑; 쑑; ) HANGUL SYLLABLE SSYOLG C452;C452;110A 116D 11B1;C452;110A 116D 11B1; # (쑒; 쑒; 쑒; 쑒; 쑒; ) HANGUL SYLLABLE SSYOLM C453;C453;110A 116D 11B2;C453;110A 116D 11B2; # (쑓; 쑓; 쑓; 쑓; 쑓; ) HANGUL SYLLABLE SSYOLB C454;C454;110A 116D 11B3;C454;110A 116D 11B3; # (쑔; 쑔; 쑔; 쑔; 쑔; ) HANGUL SYLLABLE SSYOLS C455;C455;110A 116D 11B4;C455;110A 116D 11B4; # (쑕; 쑕; 쑕; 쑕; 쑕; ) HANGUL SYLLABLE SSYOLT C456;C456;110A 116D 11B5;C456;110A 116D 11B5; # (쑖; 쑖; 쑖; 쑖; 쑖; ) HANGUL SYLLABLE SSYOLP C457;C457;110A 116D 11B6;C457;110A 116D 11B6; # (쑗; 쑗; 쑗; 쑗; 쑗; ) HANGUL SYLLABLE SSYOLH C458;C458;110A 116D 11B7;C458;110A 116D 11B7; # (쑘; 쑘; 쑘; 쑘; 쑘; ) HANGUL SYLLABLE SSYOM C459;C459;110A 116D 11B8;C459;110A 116D 11B8; # (쑙; 쑙; 쑙; 쑙; 쑙; ) HANGUL SYLLABLE SSYOB C45A;C45A;110A 116D 11B9;C45A;110A 116D 11B9; # (쑚; 쑚; 쑚; 쑚; 쑚; ) HANGUL SYLLABLE SSYOBS C45B;C45B;110A 116D 11BA;C45B;110A 116D 11BA; # (쑛; 쑛; 쑛; 쑛; 쑛; ) HANGUL SYLLABLE SSYOS C45C;C45C;110A 116D 11BB;C45C;110A 116D 11BB; # (쑜; 쑜; 쑜; 쑜; 쑜; ) HANGUL SYLLABLE SSYOSS C45D;C45D;110A 116D 11BC;C45D;110A 116D 11BC; # (쑝; 쑝; 쑝; 쑝; 쑝; ) HANGUL SYLLABLE SSYONG C45E;C45E;110A 116D 11BD;C45E;110A 116D 11BD; # (쑞; 쑞; 쑞; 쑞; 쑞; ) HANGUL SYLLABLE SSYOJ C45F;C45F;110A 116D 11BE;C45F;110A 116D 11BE; # (쑟; 쑟; 쑟; 쑟; 쑟; ) HANGUL SYLLABLE SSYOC C460;C460;110A 116D 11BF;C460;110A 116D 11BF; # (쑠; 쑠; 쑠; 쑠; 쑠; ) HANGUL SYLLABLE SSYOK C461;C461;110A 116D 11C0;C461;110A 116D 11C0; # (쑡; 쑡; 쑡; 쑡; 쑡; ) HANGUL SYLLABLE SSYOT C462;C462;110A 116D 11C1;C462;110A 116D 11C1; # (쑢; 쑢; 쑢; 쑢; 쑢; ) HANGUL SYLLABLE SSYOP C463;C463;110A 116D 11C2;C463;110A 116D 11C2; # (쑣; 쑣; 쑣; 쑣; 쑣; ) HANGUL SYLLABLE SSYOH C464;C464;110A 116E;C464;110A 116E; # (쑤; 쑤; 쑤; 쑤; 쑤; ) HANGUL SYLLABLE SSU C465;C465;110A 116E 11A8;C465;110A 116E 11A8; # (쑥; 쑥; 쑥; 쑥; 쑥; ) HANGUL SYLLABLE SSUG C466;C466;110A 116E 11A9;C466;110A 116E 11A9; # (쑦; 쑦; 쑦; 쑦; 쑦; ) HANGUL SYLLABLE SSUGG C467;C467;110A 116E 11AA;C467;110A 116E 11AA; # (쑧; 쑧; 쑧; 쑧; 쑧; ) HANGUL SYLLABLE SSUGS C468;C468;110A 116E 11AB;C468;110A 116E 11AB; # (쑨; 쑨; 쑨; 쑨; 쑨; ) HANGUL SYLLABLE SSUN C469;C469;110A 116E 11AC;C469;110A 116E 11AC; # (쑩; 쑩; 쑩; 쑩; 쑩; ) HANGUL SYLLABLE SSUNJ C46A;C46A;110A 116E 11AD;C46A;110A 116E 11AD; # (쑪; 쑪; 쑪; 쑪; 쑪; ) HANGUL SYLLABLE SSUNH C46B;C46B;110A 116E 11AE;C46B;110A 116E 11AE; # (쑫; 쑫; 쑫; 쑫; 쑫; ) HANGUL SYLLABLE SSUD C46C;C46C;110A 116E 11AF;C46C;110A 116E 11AF; # (쑬; 쑬; 쑬; 쑬; 쑬; ) HANGUL SYLLABLE SSUL C46D;C46D;110A 116E 11B0;C46D;110A 116E 11B0; # (쑭; 쑭; 쑭; 쑭; 쑭; ) HANGUL SYLLABLE SSULG C46E;C46E;110A 116E 11B1;C46E;110A 116E 11B1; # (쑮; 쑮; 쑮; 쑮; 쑮; ) HANGUL SYLLABLE SSULM C46F;C46F;110A 116E 11B2;C46F;110A 116E 11B2; # (쑯; 쑯; 쑯; 쑯; 쑯; ) HANGUL SYLLABLE SSULB C470;C470;110A 116E 11B3;C470;110A 116E 11B3; # (쑰; 쑰; 쑰; 쑰; 쑰; ) HANGUL SYLLABLE SSULS C471;C471;110A 116E 11B4;C471;110A 116E 11B4; # (쑱; 쑱; 쑱; 쑱; 쑱; ) HANGUL SYLLABLE SSULT C472;C472;110A 116E 11B5;C472;110A 116E 11B5; # (쑲; 쑲; 쑲; 쑲; 쑲; ) HANGUL SYLLABLE SSULP C473;C473;110A 116E 11B6;C473;110A 116E 11B6; # (쑳; 쑳; 쑳; 쑳; 쑳; ) HANGUL SYLLABLE SSULH C474;C474;110A 116E 11B7;C474;110A 116E 11B7; # (쑴; 쑴; 쑴; 쑴; 쑴; ) HANGUL SYLLABLE SSUM C475;C475;110A 116E 11B8;C475;110A 116E 11B8; # (쑵; 쑵; 쑵; 쑵; 쑵; ) HANGUL SYLLABLE SSUB C476;C476;110A 116E 11B9;C476;110A 116E 11B9; # (쑶; 쑶; 쑶; 쑶; 쑶; ) HANGUL SYLLABLE SSUBS C477;C477;110A 116E 11BA;C477;110A 116E 11BA; # (쑷; 쑷; 쑷; 쑷; 쑷; ) HANGUL SYLLABLE SSUS C478;C478;110A 116E 11BB;C478;110A 116E 11BB; # (쑸; 쑸; 쑸; 쑸; 쑸; ) HANGUL SYLLABLE SSUSS C479;C479;110A 116E 11BC;C479;110A 116E 11BC; # (쑹; 쑹; 쑹; 쑹; 쑹; ) HANGUL SYLLABLE SSUNG C47A;C47A;110A 116E 11BD;C47A;110A 116E 11BD; # (쑺; 쑺; 쑺; 쑺; 쑺; ) HANGUL SYLLABLE SSUJ C47B;C47B;110A 116E 11BE;C47B;110A 116E 11BE; # (쑻; 쑻; 쑻; 쑻; 쑻; ) HANGUL SYLLABLE SSUC C47C;C47C;110A 116E 11BF;C47C;110A 116E 11BF; # (쑼; 쑼; 쑼; 쑼; 쑼; ) HANGUL SYLLABLE SSUK C47D;C47D;110A 116E 11C0;C47D;110A 116E 11C0; # (쑽; 쑽; 쑽; 쑽; 쑽; ) HANGUL SYLLABLE SSUT C47E;C47E;110A 116E 11C1;C47E;110A 116E 11C1; # (쑾; 쑾; 쑾; 쑾; 쑾; ) HANGUL SYLLABLE SSUP C47F;C47F;110A 116E 11C2;C47F;110A 116E 11C2; # (쑿; 쑿; 쑿; 쑿; 쑿; ) HANGUL SYLLABLE SSUH C480;C480;110A 116F;C480;110A 116F; # (쒀; 쒀; 쒀; 쒀; 쒀; ) HANGUL SYLLABLE SSWEO C481;C481;110A 116F 11A8;C481;110A 116F 11A8; # (쒁; 쒁; 쒁; 쒁; 쒁; ) HANGUL SYLLABLE SSWEOG C482;C482;110A 116F 11A9;C482;110A 116F 11A9; # (쒂; 쒂; 쒂; 쒂; 쒂; ) HANGUL SYLLABLE SSWEOGG C483;C483;110A 116F 11AA;C483;110A 116F 11AA; # (쒃; 쒃; 쒃; 쒃; 쒃; ) HANGUL SYLLABLE SSWEOGS C484;C484;110A 116F 11AB;C484;110A 116F 11AB; # (쒄; 쒄; 쒄; 쒄; 쒄; ) HANGUL SYLLABLE SSWEON C485;C485;110A 116F 11AC;C485;110A 116F 11AC; # (쒅; 쒅; 쒅; 쒅; 쒅; ) HANGUL SYLLABLE SSWEONJ C486;C486;110A 116F 11AD;C486;110A 116F 11AD; # (쒆; 쒆; 쒆; 쒆; 쒆; ) HANGUL SYLLABLE SSWEONH C487;C487;110A 116F 11AE;C487;110A 116F 11AE; # (쒇; 쒇; 쒇; 쒇; 쒇; ) HANGUL SYLLABLE SSWEOD C488;C488;110A 116F 11AF;C488;110A 116F 11AF; # (쒈; 쒈; 쒈; 쒈; 쒈; ) HANGUL SYLLABLE SSWEOL C489;C489;110A 116F 11B0;C489;110A 116F 11B0; # (쒉; 쒉; 쒉; 쒉; 쒉; ) HANGUL SYLLABLE SSWEOLG C48A;C48A;110A 116F 11B1;C48A;110A 116F 11B1; # (쒊; 쒊; 쒊; 쒊; 쒊; ) HANGUL SYLLABLE SSWEOLM C48B;C48B;110A 116F 11B2;C48B;110A 116F 11B2; # (쒋; 쒋; 쒋; 쒋; 쒋; ) HANGUL SYLLABLE SSWEOLB C48C;C48C;110A 116F 11B3;C48C;110A 116F 11B3; # (쒌; 쒌; 쒌; 쒌; 쒌; ) HANGUL SYLLABLE SSWEOLS C48D;C48D;110A 116F 11B4;C48D;110A 116F 11B4; # (쒍; 쒍; 쒍; 쒍; 쒍; ) HANGUL SYLLABLE SSWEOLT C48E;C48E;110A 116F 11B5;C48E;110A 116F 11B5; # (쒎; 쒎; 쒎; 쒎; 쒎; ) HANGUL SYLLABLE SSWEOLP C48F;C48F;110A 116F 11B6;C48F;110A 116F 11B6; # (쒏; 쒏; 쒏; 쒏; 쒏; ) HANGUL SYLLABLE SSWEOLH C490;C490;110A 116F 11B7;C490;110A 116F 11B7; # (쒐; 쒐; 쒐; 쒐; 쒐; ) HANGUL SYLLABLE SSWEOM C491;C491;110A 116F 11B8;C491;110A 116F 11B8; # (쒑; 쒑; 쒑; 쒑; 쒑; ) HANGUL SYLLABLE SSWEOB C492;C492;110A 116F 11B9;C492;110A 116F 11B9; # (쒒; 쒒; 쒒; 쒒; 쒒; ) HANGUL SYLLABLE SSWEOBS C493;C493;110A 116F 11BA;C493;110A 116F 11BA; # (쒓; 쒓; 쒓; 쒓; 쒓; ) HANGUL SYLLABLE SSWEOS C494;C494;110A 116F 11BB;C494;110A 116F 11BB; # (쒔; 쒔; 쒔; 쒔; 쒔; ) HANGUL SYLLABLE SSWEOSS C495;C495;110A 116F 11BC;C495;110A 116F 11BC; # (쒕; 쒕; 쒕; 쒕; 쒕; ) HANGUL SYLLABLE SSWEONG C496;C496;110A 116F 11BD;C496;110A 116F 11BD; # (쒖; 쒖; 쒖; 쒖; 쒖; ) HANGUL SYLLABLE SSWEOJ C497;C497;110A 116F 11BE;C497;110A 116F 11BE; # (쒗; 쒗; 쒗; 쒗; 쒗; ) HANGUL SYLLABLE SSWEOC C498;C498;110A 116F 11BF;C498;110A 116F 11BF; # (쒘; 쒘; 쒘; 쒘; 쒘; ) HANGUL SYLLABLE SSWEOK C499;C499;110A 116F 11C0;C499;110A 116F 11C0; # (쒙; 쒙; 쒙; 쒙; 쒙; ) HANGUL SYLLABLE SSWEOT C49A;C49A;110A 116F 11C1;C49A;110A 116F 11C1; # (쒚; 쒚; 쒚; 쒚; 쒚; ) HANGUL SYLLABLE SSWEOP C49B;C49B;110A 116F 11C2;C49B;110A 116F 11C2; # (쒛; 쒛; 쒛; 쒛; 쒛; ) HANGUL SYLLABLE SSWEOH C49C;C49C;110A 1170;C49C;110A 1170; # (쒜; 쒜; 쒜; 쒜; 쒜; ) HANGUL SYLLABLE SSWE C49D;C49D;110A 1170 11A8;C49D;110A 1170 11A8; # (쒝; 쒝; 쒝; 쒝; 쒝; ) HANGUL SYLLABLE SSWEG C49E;C49E;110A 1170 11A9;C49E;110A 1170 11A9; # (쒞; 쒞; 쒞; 쒞; 쒞; ) HANGUL SYLLABLE SSWEGG C49F;C49F;110A 1170 11AA;C49F;110A 1170 11AA; # (쒟; 쒟; 쒟; 쒟; 쒟; ) HANGUL SYLLABLE SSWEGS C4A0;C4A0;110A 1170 11AB;C4A0;110A 1170 11AB; # (쒠; 쒠; 쒠; 쒠; 쒠; ) HANGUL SYLLABLE SSWEN C4A1;C4A1;110A 1170 11AC;C4A1;110A 1170 11AC; # (쒡; 쒡; 쒡; 쒡; 쒡; ) HANGUL SYLLABLE SSWENJ C4A2;C4A2;110A 1170 11AD;C4A2;110A 1170 11AD; # (쒢; 쒢; 쒢; 쒢; 쒢; ) HANGUL SYLLABLE SSWENH C4A3;C4A3;110A 1170 11AE;C4A3;110A 1170 11AE; # (쒣; 쒣; 쒣; 쒣; 쒣; ) HANGUL SYLLABLE SSWED C4A4;C4A4;110A 1170 11AF;C4A4;110A 1170 11AF; # (쒤; 쒤; 쒤; 쒤; 쒤; ) HANGUL SYLLABLE SSWEL C4A5;C4A5;110A 1170 11B0;C4A5;110A 1170 11B0; # (쒥; 쒥; 쒥; 쒥; 쒥; ) HANGUL SYLLABLE SSWELG C4A6;C4A6;110A 1170 11B1;C4A6;110A 1170 11B1; # (쒦; 쒦; 쒦; 쒦; 쒦; ) HANGUL SYLLABLE SSWELM C4A7;C4A7;110A 1170 11B2;C4A7;110A 1170 11B2; # (쒧; 쒧; 쒧; 쒧; 쒧; ) HANGUL SYLLABLE SSWELB C4A8;C4A8;110A 1170 11B3;C4A8;110A 1170 11B3; # (쒨; 쒨; 쒨; 쒨; 쒨; ) HANGUL SYLLABLE SSWELS C4A9;C4A9;110A 1170 11B4;C4A9;110A 1170 11B4; # (쒩; 쒩; 쒩; 쒩; 쒩; ) HANGUL SYLLABLE SSWELT C4AA;C4AA;110A 1170 11B5;C4AA;110A 1170 11B5; # (쒪; 쒪; 쒪; 쒪; 쒪; ) HANGUL SYLLABLE SSWELP C4AB;C4AB;110A 1170 11B6;C4AB;110A 1170 11B6; # (쒫; 쒫; 쒫; 쒫; 쒫; ) HANGUL SYLLABLE SSWELH C4AC;C4AC;110A 1170 11B7;C4AC;110A 1170 11B7; # (쒬; 쒬; 쒬; 쒬; 쒬; ) HANGUL SYLLABLE SSWEM C4AD;C4AD;110A 1170 11B8;C4AD;110A 1170 11B8; # (쒭; 쒭; 쒭; 쒭; 쒭; ) HANGUL SYLLABLE SSWEB C4AE;C4AE;110A 1170 11B9;C4AE;110A 1170 11B9; # (쒮; 쒮; 쒮; 쒮; 쒮; ) HANGUL SYLLABLE SSWEBS C4AF;C4AF;110A 1170 11BA;C4AF;110A 1170 11BA; # (쒯; 쒯; 쒯; 쒯; 쒯; ) HANGUL SYLLABLE SSWES C4B0;C4B0;110A 1170 11BB;C4B0;110A 1170 11BB; # (쒰; 쒰; 쒰; 쒰; 쒰; ) HANGUL SYLLABLE SSWESS C4B1;C4B1;110A 1170 11BC;C4B1;110A 1170 11BC; # (쒱; 쒱; 쒱; 쒱; 쒱; ) HANGUL SYLLABLE SSWENG C4B2;C4B2;110A 1170 11BD;C4B2;110A 1170 11BD; # (쒲; 쒲; 쒲; 쒲; 쒲; ) HANGUL SYLLABLE SSWEJ C4B3;C4B3;110A 1170 11BE;C4B3;110A 1170 11BE; # (쒳; 쒳; 쒳; 쒳; 쒳; ) HANGUL SYLLABLE SSWEC C4B4;C4B4;110A 1170 11BF;C4B4;110A 1170 11BF; # (쒴; 쒴; 쒴; 쒴; 쒴; ) HANGUL SYLLABLE SSWEK C4B5;C4B5;110A 1170 11C0;C4B5;110A 1170 11C0; # (쒵; 쒵; 쒵; 쒵; 쒵; ) HANGUL SYLLABLE SSWET C4B6;C4B6;110A 1170 11C1;C4B6;110A 1170 11C1; # (쒶; 쒶; 쒶; 쒶; 쒶; ) HANGUL SYLLABLE SSWEP C4B7;C4B7;110A 1170 11C2;C4B7;110A 1170 11C2; # (쒷; 쒷; 쒷; 쒷; 쒷; ) HANGUL SYLLABLE SSWEH C4B8;C4B8;110A 1171;C4B8;110A 1171; # (쒸; 쒸; 쒸; 쒸; 쒸; ) HANGUL SYLLABLE SSWI C4B9;C4B9;110A 1171 11A8;C4B9;110A 1171 11A8; # (쒹; 쒹; 쒹; 쒹; 쒹; ) HANGUL SYLLABLE SSWIG C4BA;C4BA;110A 1171 11A9;C4BA;110A 1171 11A9; # (쒺; 쒺; 쒺; 쒺; 쒺; ) HANGUL SYLLABLE SSWIGG C4BB;C4BB;110A 1171 11AA;C4BB;110A 1171 11AA; # (쒻; 쒻; 쒻; 쒻; 쒻; ) HANGUL SYLLABLE SSWIGS C4BC;C4BC;110A 1171 11AB;C4BC;110A 1171 11AB; # (쒼; 쒼; 쒼; 쒼; 쒼; ) HANGUL SYLLABLE SSWIN C4BD;C4BD;110A 1171 11AC;C4BD;110A 1171 11AC; # (쒽; 쒽; 쒽; 쒽; 쒽; ) HANGUL SYLLABLE SSWINJ C4BE;C4BE;110A 1171 11AD;C4BE;110A 1171 11AD; # (쒾; 쒾; 쒾; 쒾; 쒾; ) HANGUL SYLLABLE SSWINH C4BF;C4BF;110A 1171 11AE;C4BF;110A 1171 11AE; # (쒿; 쒿; 쒿; 쒿; 쒿; ) HANGUL SYLLABLE SSWID C4C0;C4C0;110A 1171 11AF;C4C0;110A 1171 11AF; # (쓀; 쓀; 쓀; 쓀; 쓀; ) HANGUL SYLLABLE SSWIL C4C1;C4C1;110A 1171 11B0;C4C1;110A 1171 11B0; # (쓁; 쓁; 쓁; 쓁; 쓁; ) HANGUL SYLLABLE SSWILG C4C2;C4C2;110A 1171 11B1;C4C2;110A 1171 11B1; # (쓂; 쓂; 쓂; 쓂; 쓂; ) HANGUL SYLLABLE SSWILM C4C3;C4C3;110A 1171 11B2;C4C3;110A 1171 11B2; # (쓃; 쓃; 쓃; 쓃; 쓃; ) HANGUL SYLLABLE SSWILB C4C4;C4C4;110A 1171 11B3;C4C4;110A 1171 11B3; # (쓄; 쓄; 쓄; 쓄; 쓄; ) HANGUL SYLLABLE SSWILS C4C5;C4C5;110A 1171 11B4;C4C5;110A 1171 11B4; # (쓅; 쓅; 쓅; 쓅; 쓅; ) HANGUL SYLLABLE SSWILT C4C6;C4C6;110A 1171 11B5;C4C6;110A 1171 11B5; # (쓆; 쓆; 쓆; 쓆; 쓆; ) HANGUL SYLLABLE SSWILP C4C7;C4C7;110A 1171 11B6;C4C7;110A 1171 11B6; # (쓇; 쓇; 쓇; 쓇; 쓇; ) HANGUL SYLLABLE SSWILH C4C8;C4C8;110A 1171 11B7;C4C8;110A 1171 11B7; # (쓈; 쓈; 쓈; 쓈; 쓈; ) HANGUL SYLLABLE SSWIM C4C9;C4C9;110A 1171 11B8;C4C9;110A 1171 11B8; # (쓉; 쓉; 쓉; 쓉; 쓉; ) HANGUL SYLLABLE SSWIB C4CA;C4CA;110A 1171 11B9;C4CA;110A 1171 11B9; # (쓊; 쓊; 쓊; 쓊; 쓊; ) HANGUL SYLLABLE SSWIBS C4CB;C4CB;110A 1171 11BA;C4CB;110A 1171 11BA; # (쓋; 쓋; 쓋; 쓋; 쓋; ) HANGUL SYLLABLE SSWIS C4CC;C4CC;110A 1171 11BB;C4CC;110A 1171 11BB; # (쓌; 쓌; 쓌; 쓌; 쓌; ) HANGUL SYLLABLE SSWISS C4CD;C4CD;110A 1171 11BC;C4CD;110A 1171 11BC; # (쓍; 쓍; 쓍; 쓍; 쓍; ) HANGUL SYLLABLE SSWING C4CE;C4CE;110A 1171 11BD;C4CE;110A 1171 11BD; # (쓎; 쓎; 쓎; 쓎; 쓎; ) HANGUL SYLLABLE SSWIJ C4CF;C4CF;110A 1171 11BE;C4CF;110A 1171 11BE; # (쓏; 쓏; 쓏; 쓏; 쓏; ) HANGUL SYLLABLE SSWIC C4D0;C4D0;110A 1171 11BF;C4D0;110A 1171 11BF; # (쓐; 쓐; 쓐; 쓐; 쓐; ) HANGUL SYLLABLE SSWIK C4D1;C4D1;110A 1171 11C0;C4D1;110A 1171 11C0; # (쓑; 쓑; 쓑; 쓑; 쓑; ) HANGUL SYLLABLE SSWIT C4D2;C4D2;110A 1171 11C1;C4D2;110A 1171 11C1; # (쓒; 쓒; 쓒; 쓒; 쓒; ) HANGUL SYLLABLE SSWIP C4D3;C4D3;110A 1171 11C2;C4D3;110A 1171 11C2; # (쓓; 쓓; 쓓; 쓓; 쓓; ) HANGUL SYLLABLE SSWIH C4D4;C4D4;110A 1172;C4D4;110A 1172; # (쓔; 쓔; 쓔; 쓔; 쓔; ) HANGUL SYLLABLE SSYU C4D5;C4D5;110A 1172 11A8;C4D5;110A 1172 11A8; # (쓕; 쓕; 쓕; 쓕; 쓕; ) HANGUL SYLLABLE SSYUG C4D6;C4D6;110A 1172 11A9;C4D6;110A 1172 11A9; # (쓖; 쓖; 쓖; 쓖; 쓖; ) HANGUL SYLLABLE SSYUGG C4D7;C4D7;110A 1172 11AA;C4D7;110A 1172 11AA; # (쓗; 쓗; 쓗; 쓗; 쓗; ) HANGUL SYLLABLE SSYUGS C4D8;C4D8;110A 1172 11AB;C4D8;110A 1172 11AB; # (쓘; 쓘; 쓘; 쓘; 쓘; ) HANGUL SYLLABLE SSYUN C4D9;C4D9;110A 1172 11AC;C4D9;110A 1172 11AC; # (쓙; 쓙; 쓙; 쓙; 쓙; ) HANGUL SYLLABLE SSYUNJ C4DA;C4DA;110A 1172 11AD;C4DA;110A 1172 11AD; # (쓚; 쓚; 쓚; 쓚; 쓚; ) HANGUL SYLLABLE SSYUNH C4DB;C4DB;110A 1172 11AE;C4DB;110A 1172 11AE; # (쓛; 쓛; 쓛; 쓛; 쓛; ) HANGUL SYLLABLE SSYUD C4DC;C4DC;110A 1172 11AF;C4DC;110A 1172 11AF; # (쓜; 쓜; 쓜; 쓜; 쓜; ) HANGUL SYLLABLE SSYUL C4DD;C4DD;110A 1172 11B0;C4DD;110A 1172 11B0; # (쓝; 쓝; 쓝; 쓝; 쓝; ) HANGUL SYLLABLE SSYULG C4DE;C4DE;110A 1172 11B1;C4DE;110A 1172 11B1; # (쓞; 쓞; 쓞; 쓞; 쓞; ) HANGUL SYLLABLE SSYULM C4DF;C4DF;110A 1172 11B2;C4DF;110A 1172 11B2; # (쓟; 쓟; 쓟; 쓟; 쓟; ) HANGUL SYLLABLE SSYULB C4E0;C4E0;110A 1172 11B3;C4E0;110A 1172 11B3; # (쓠; 쓠; 쓠; 쓠; 쓠; ) HANGUL SYLLABLE SSYULS C4E1;C4E1;110A 1172 11B4;C4E1;110A 1172 11B4; # (쓡; 쓡; 쓡; 쓡; 쓡; ) HANGUL SYLLABLE SSYULT C4E2;C4E2;110A 1172 11B5;C4E2;110A 1172 11B5; # (쓢; 쓢; 쓢; 쓢; 쓢; ) HANGUL SYLLABLE SSYULP C4E3;C4E3;110A 1172 11B6;C4E3;110A 1172 11B6; # (쓣; 쓣; 쓣; 쓣; 쓣; ) HANGUL SYLLABLE SSYULH C4E4;C4E4;110A 1172 11B7;C4E4;110A 1172 11B7; # (쓤; 쓤; 쓤; 쓤; 쓤; ) HANGUL SYLLABLE SSYUM C4E5;C4E5;110A 1172 11B8;C4E5;110A 1172 11B8; # (쓥; 쓥; 쓥; 쓥; 쓥; ) HANGUL SYLLABLE SSYUB C4E6;C4E6;110A 1172 11B9;C4E6;110A 1172 11B9; # (쓦; 쓦; 쓦; 쓦; 쓦; ) HANGUL SYLLABLE SSYUBS C4E7;C4E7;110A 1172 11BA;C4E7;110A 1172 11BA; # (쓧; 쓧; 쓧; 쓧; 쓧; ) HANGUL SYLLABLE SSYUS C4E8;C4E8;110A 1172 11BB;C4E8;110A 1172 11BB; # (쓨; 쓨; 쓨; 쓨; 쓨; ) HANGUL SYLLABLE SSYUSS C4E9;C4E9;110A 1172 11BC;C4E9;110A 1172 11BC; # (쓩; 쓩; 쓩; 쓩; 쓩; ) HANGUL SYLLABLE SSYUNG C4EA;C4EA;110A 1172 11BD;C4EA;110A 1172 11BD; # (쓪; 쓪; 쓪; 쓪; 쓪; ) HANGUL SYLLABLE SSYUJ C4EB;C4EB;110A 1172 11BE;C4EB;110A 1172 11BE; # (쓫; 쓫; 쓫; 쓫; 쓫; ) HANGUL SYLLABLE SSYUC C4EC;C4EC;110A 1172 11BF;C4EC;110A 1172 11BF; # (쓬; 쓬; 쓬; 쓬; 쓬; ) HANGUL SYLLABLE SSYUK C4ED;C4ED;110A 1172 11C0;C4ED;110A 1172 11C0; # (쓭; 쓭; 쓭; 쓭; 쓭; ) HANGUL SYLLABLE SSYUT C4EE;C4EE;110A 1172 11C1;C4EE;110A 1172 11C1; # (쓮; 쓮; 쓮; 쓮; 쓮; ) HANGUL SYLLABLE SSYUP C4EF;C4EF;110A 1172 11C2;C4EF;110A 1172 11C2; # (쓯; 쓯; 쓯; 쓯; 쓯; ) HANGUL SYLLABLE SSYUH C4F0;C4F0;110A 1173;C4F0;110A 1173; # (쓰; 쓰; 쓰; 쓰; 쓰; ) HANGUL SYLLABLE SSEU C4F1;C4F1;110A 1173 11A8;C4F1;110A 1173 11A8; # (쓱; 쓱; 쓱; 쓱; 쓱; ) HANGUL SYLLABLE SSEUG C4F2;C4F2;110A 1173 11A9;C4F2;110A 1173 11A9; # (쓲; 쓲; 쓲; 쓲; 쓲; ) HANGUL SYLLABLE SSEUGG C4F3;C4F3;110A 1173 11AA;C4F3;110A 1173 11AA; # (쓳; 쓳; 쓳; 쓳; 쓳; ) HANGUL SYLLABLE SSEUGS C4F4;C4F4;110A 1173 11AB;C4F4;110A 1173 11AB; # (쓴; 쓴; 쓴; 쓴; 쓴; ) HANGUL SYLLABLE SSEUN C4F5;C4F5;110A 1173 11AC;C4F5;110A 1173 11AC; # (쓵; 쓵; 쓵; 쓵; 쓵; ) HANGUL SYLLABLE SSEUNJ C4F6;C4F6;110A 1173 11AD;C4F6;110A 1173 11AD; # (쓶; 쓶; 쓶; 쓶; 쓶; ) HANGUL SYLLABLE SSEUNH C4F7;C4F7;110A 1173 11AE;C4F7;110A 1173 11AE; # (쓷; 쓷; 쓷; 쓷; 쓷; ) HANGUL SYLLABLE SSEUD C4F8;C4F8;110A 1173 11AF;C4F8;110A 1173 11AF; # (쓸; 쓸; 쓸; 쓸; 쓸; ) HANGUL SYLLABLE SSEUL C4F9;C4F9;110A 1173 11B0;C4F9;110A 1173 11B0; # (쓹; 쓹; 쓹; 쓹; 쓹; ) HANGUL SYLLABLE SSEULG C4FA;C4FA;110A 1173 11B1;C4FA;110A 1173 11B1; # (쓺; 쓺; 쓺; 쓺; 쓺; ) HANGUL SYLLABLE SSEULM C4FB;C4FB;110A 1173 11B2;C4FB;110A 1173 11B2; # (쓻; 쓻; 쓻; 쓻; 쓻; ) HANGUL SYLLABLE SSEULB C4FC;C4FC;110A 1173 11B3;C4FC;110A 1173 11B3; # (쓼; 쓼; 쓼; 쓼; 쓼; ) HANGUL SYLLABLE SSEULS C4FD;C4FD;110A 1173 11B4;C4FD;110A 1173 11B4; # (쓽; 쓽; 쓽; 쓽; 쓽; ) HANGUL SYLLABLE SSEULT C4FE;C4FE;110A 1173 11B5;C4FE;110A 1173 11B5; # (쓾; 쓾; 쓾; 쓾; 쓾; ) HANGUL SYLLABLE SSEULP C4FF;C4FF;110A 1173 11B6;C4FF;110A 1173 11B6; # (쓿; 쓿; 쓿; 쓿; 쓿; ) HANGUL SYLLABLE SSEULH C500;C500;110A 1173 11B7;C500;110A 1173 11B7; # (씀; 씀; 씀; 씀; 씀; ) HANGUL SYLLABLE SSEUM C501;C501;110A 1173 11B8;C501;110A 1173 11B8; # (씁; 씁; 씁; 씁; 씁; ) HANGUL SYLLABLE SSEUB C502;C502;110A 1173 11B9;C502;110A 1173 11B9; # (씂; 씂; 씂; 씂; 씂; ) HANGUL SYLLABLE SSEUBS C503;C503;110A 1173 11BA;C503;110A 1173 11BA; # (씃; 씃; 씃; 씃; 씃; ) HANGUL SYLLABLE SSEUS C504;C504;110A 1173 11BB;C504;110A 1173 11BB; # (씄; 씄; 씄; 씄; 씄; ) HANGUL SYLLABLE SSEUSS C505;C505;110A 1173 11BC;C505;110A 1173 11BC; # (씅; 씅; 씅; 씅; 씅; ) HANGUL SYLLABLE SSEUNG C506;C506;110A 1173 11BD;C506;110A 1173 11BD; # (씆; 씆; 씆; 씆; 씆; ) HANGUL SYLLABLE SSEUJ C507;C507;110A 1173 11BE;C507;110A 1173 11BE; # (씇; 씇; 씇; 씇; 씇; ) HANGUL SYLLABLE SSEUC C508;C508;110A 1173 11BF;C508;110A 1173 11BF; # (씈; 씈; 씈; 씈; 씈; ) HANGUL SYLLABLE SSEUK C509;C509;110A 1173 11C0;C509;110A 1173 11C0; # (씉; 씉; 씉; 씉; 씉; ) HANGUL SYLLABLE SSEUT C50A;C50A;110A 1173 11C1;C50A;110A 1173 11C1; # (씊; 씊; 씊; 씊; 씊; ) HANGUL SYLLABLE SSEUP C50B;C50B;110A 1173 11C2;C50B;110A 1173 11C2; # (씋; 씋; 씋; 씋; 씋; ) HANGUL SYLLABLE SSEUH C50C;C50C;110A 1174;C50C;110A 1174; # (씌; 씌; 씌; 씌; 씌; ) HANGUL SYLLABLE SSYI C50D;C50D;110A 1174 11A8;C50D;110A 1174 11A8; # (씍; 씍; 씍; 씍; 씍; ) HANGUL SYLLABLE SSYIG C50E;C50E;110A 1174 11A9;C50E;110A 1174 11A9; # (씎; 씎; 씎; 씎; 씎; ) HANGUL SYLLABLE SSYIGG C50F;C50F;110A 1174 11AA;C50F;110A 1174 11AA; # (씏; 씏; 씏; 씏; 씏; ) HANGUL SYLLABLE SSYIGS C510;C510;110A 1174 11AB;C510;110A 1174 11AB; # (씐; 씐; 씐; 씐; 씐; ) HANGUL SYLLABLE SSYIN C511;C511;110A 1174 11AC;C511;110A 1174 11AC; # (씑; 씑; 씑; 씑; 씑; ) HANGUL SYLLABLE SSYINJ C512;C512;110A 1174 11AD;C512;110A 1174 11AD; # (씒; 씒; 씒; 씒; 씒; ) HANGUL SYLLABLE SSYINH C513;C513;110A 1174 11AE;C513;110A 1174 11AE; # (씓; 씓; 씓; 씓; 씓; ) HANGUL SYLLABLE SSYID C514;C514;110A 1174 11AF;C514;110A 1174 11AF; # (씔; 씔; 씔; 씔; 씔; ) HANGUL SYLLABLE SSYIL C515;C515;110A 1174 11B0;C515;110A 1174 11B0; # (씕; 씕; 씕; 씕; 씕; ) HANGUL SYLLABLE SSYILG C516;C516;110A 1174 11B1;C516;110A 1174 11B1; # (씖; 씖; 씖; 씖; 씖; ) HANGUL SYLLABLE SSYILM C517;C517;110A 1174 11B2;C517;110A 1174 11B2; # (씗; 씗; 씗; 씗; 씗; ) HANGUL SYLLABLE SSYILB C518;C518;110A 1174 11B3;C518;110A 1174 11B3; # (씘; 씘; 씘; 씘; 씘; ) HANGUL SYLLABLE SSYILS C519;C519;110A 1174 11B4;C519;110A 1174 11B4; # (씙; 씙; 씙; 씙; 씙; ) HANGUL SYLLABLE SSYILT C51A;C51A;110A 1174 11B5;C51A;110A 1174 11B5; # (씚; 씚; 씚; 씚; 씚; ) HANGUL SYLLABLE SSYILP C51B;C51B;110A 1174 11B6;C51B;110A 1174 11B6; # (씛; 씛; 씛; 씛; 씛; ) HANGUL SYLLABLE SSYILH C51C;C51C;110A 1174 11B7;C51C;110A 1174 11B7; # (씜; 씜; 씜; 씜; 씜; ) HANGUL SYLLABLE SSYIM C51D;C51D;110A 1174 11B8;C51D;110A 1174 11B8; # (씝; 씝; 씝; 씝; 씝; ) HANGUL SYLLABLE SSYIB C51E;C51E;110A 1174 11B9;C51E;110A 1174 11B9; # (씞; 씞; 씞; 씞; 씞; ) HANGUL SYLLABLE SSYIBS C51F;C51F;110A 1174 11BA;C51F;110A 1174 11BA; # (씟; 씟; 씟; 씟; 씟; ) HANGUL SYLLABLE SSYIS C520;C520;110A 1174 11BB;C520;110A 1174 11BB; # (씠; 씠; 씠; 씠; 씠; ) HANGUL SYLLABLE SSYISS C521;C521;110A 1174 11BC;C521;110A 1174 11BC; # (씡; 씡; 씡; 씡; 씡; ) HANGUL SYLLABLE SSYING C522;C522;110A 1174 11BD;C522;110A 1174 11BD; # (씢; 씢; 씢; 씢; 씢; ) HANGUL SYLLABLE SSYIJ C523;C523;110A 1174 11BE;C523;110A 1174 11BE; # (씣; 씣; 씣; 씣; 씣; ) HANGUL SYLLABLE SSYIC C524;C524;110A 1174 11BF;C524;110A 1174 11BF; # (씤; 씤; 씤; 씤; 씤; ) HANGUL SYLLABLE SSYIK C525;C525;110A 1174 11C0;C525;110A 1174 11C0; # (씥; 씥; 씥; 씥; 씥; ) HANGUL SYLLABLE SSYIT C526;C526;110A 1174 11C1;C526;110A 1174 11C1; # (씦; 씦; 씦; 씦; 씦; ) HANGUL SYLLABLE SSYIP C527;C527;110A 1174 11C2;C527;110A 1174 11C2; # (씧; 씧; 씧; 씧; 씧; ) HANGUL SYLLABLE SSYIH C528;C528;110A 1175;C528;110A 1175; # (씨; 씨; 씨; 씨; 씨; ) HANGUL SYLLABLE SSI C529;C529;110A 1175 11A8;C529;110A 1175 11A8; # (씩; 씩; 씩; 씩; 씩; ) HANGUL SYLLABLE SSIG C52A;C52A;110A 1175 11A9;C52A;110A 1175 11A9; # (씪; 씪; 씪; 씪; 씪; ) HANGUL SYLLABLE SSIGG C52B;C52B;110A 1175 11AA;C52B;110A 1175 11AA; # (씫; 씫; 씫; 씫; 씫; ) HANGUL SYLLABLE SSIGS C52C;C52C;110A 1175 11AB;C52C;110A 1175 11AB; # (씬; 씬; 씬; 씬; 씬; ) HANGUL SYLLABLE SSIN C52D;C52D;110A 1175 11AC;C52D;110A 1175 11AC; # (씭; 씭; 씭; 씭; 씭; ) HANGUL SYLLABLE SSINJ C52E;C52E;110A 1175 11AD;C52E;110A 1175 11AD; # (씮; 씮; 씮; 씮; 씮; ) HANGUL SYLLABLE SSINH C52F;C52F;110A 1175 11AE;C52F;110A 1175 11AE; # (씯; 씯; 씯; 씯; 씯; ) HANGUL SYLLABLE SSID C530;C530;110A 1175 11AF;C530;110A 1175 11AF; # (씰; 씰; 씰; 씰; 씰; ) HANGUL SYLLABLE SSIL C531;C531;110A 1175 11B0;C531;110A 1175 11B0; # (씱; 씱; 씱; 씱; 씱; ) HANGUL SYLLABLE SSILG C532;C532;110A 1175 11B1;C532;110A 1175 11B1; # (씲; 씲; 씲; 씲; 씲; ) HANGUL SYLLABLE SSILM C533;C533;110A 1175 11B2;C533;110A 1175 11B2; # (씳; 씳; 씳; 씳; 씳; ) HANGUL SYLLABLE SSILB C534;C534;110A 1175 11B3;C534;110A 1175 11B3; # (씴; 씴; 씴; 씴; 씴; ) HANGUL SYLLABLE SSILS C535;C535;110A 1175 11B4;C535;110A 1175 11B4; # (씵; 씵; 씵; 씵; 씵; ) HANGUL SYLLABLE SSILT C536;C536;110A 1175 11B5;C536;110A 1175 11B5; # (씶; 씶; 씶; 씶; 씶; ) HANGUL SYLLABLE SSILP C537;C537;110A 1175 11B6;C537;110A 1175 11B6; # (씷; 씷; 씷; 씷; 씷; ) HANGUL SYLLABLE SSILH C538;C538;110A 1175 11B7;C538;110A 1175 11B7; # (씸; 씸; 씸; 씸; 씸; ) HANGUL SYLLABLE SSIM C539;C539;110A 1175 11B8;C539;110A 1175 11B8; # (씹; 씹; 씹; 씹; 씹; ) HANGUL SYLLABLE SSIB C53A;C53A;110A 1175 11B9;C53A;110A 1175 11B9; # (씺; 씺; 씺; 씺; 씺; ) HANGUL SYLLABLE SSIBS C53B;C53B;110A 1175 11BA;C53B;110A 1175 11BA; # (씻; 씻; 씻; 씻; 씻; ) HANGUL SYLLABLE SSIS C53C;C53C;110A 1175 11BB;C53C;110A 1175 11BB; # (씼; 씼; 씼; 씼; 씼; ) HANGUL SYLLABLE SSISS C53D;C53D;110A 1175 11BC;C53D;110A 1175 11BC; # (씽; 씽; 씽; 씽; 씽; ) HANGUL SYLLABLE SSING C53E;C53E;110A 1175 11BD;C53E;110A 1175 11BD; # (씾; 씾; 씾; 씾; 씾; ) HANGUL SYLLABLE SSIJ C53F;C53F;110A 1175 11BE;C53F;110A 1175 11BE; # (씿; 씿; 씿; 씿; 씿; ) HANGUL SYLLABLE SSIC C540;C540;110A 1175 11BF;C540;110A 1175 11BF; # (앀; 앀; 앀; 앀; 앀; ) HANGUL SYLLABLE SSIK C541;C541;110A 1175 11C0;C541;110A 1175 11C0; # (앁; 앁; 앁; 앁; 앁; ) HANGUL SYLLABLE SSIT C542;C542;110A 1175 11C1;C542;110A 1175 11C1; # (앂; 앂; 앂; 앂; 앂; ) HANGUL SYLLABLE SSIP C543;C543;110A 1175 11C2;C543;110A 1175 11C2; # (앃; 앃; 앃; 앃; 앃; ) HANGUL SYLLABLE SSIH C544;C544;110B 1161;C544;110B 1161; # (아; 아; 아; 아; 아; ) HANGUL SYLLABLE A C545;C545;110B 1161 11A8;C545;110B 1161 11A8; # (악; 악; 악; 악; 악; ) HANGUL SYLLABLE AG C546;C546;110B 1161 11A9;C546;110B 1161 11A9; # (앆; 앆; 앆; 앆; 앆; ) HANGUL SYLLABLE AGG C547;C547;110B 1161 11AA;C547;110B 1161 11AA; # (앇; 앇; 앇; 앇; 앇; ) HANGUL SYLLABLE AGS C548;C548;110B 1161 11AB;C548;110B 1161 11AB; # (안; 안; 안; 안; 안; ) HANGUL SYLLABLE AN C549;C549;110B 1161 11AC;C549;110B 1161 11AC; # (앉; 앉; 앉; 앉; 앉; ) HANGUL SYLLABLE ANJ C54A;C54A;110B 1161 11AD;C54A;110B 1161 11AD; # (않; 않; 않; 않; 않; ) HANGUL SYLLABLE ANH C54B;C54B;110B 1161 11AE;C54B;110B 1161 11AE; # (앋; 앋; 앋; 앋; 앋; ) HANGUL SYLLABLE AD C54C;C54C;110B 1161 11AF;C54C;110B 1161 11AF; # (알; 알; 알; 알; 알; ) HANGUL SYLLABLE AL C54D;C54D;110B 1161 11B0;C54D;110B 1161 11B0; # (앍; 앍; 앍; 앍; 앍; ) HANGUL SYLLABLE ALG C54E;C54E;110B 1161 11B1;C54E;110B 1161 11B1; # (앎; 앎; 앎; 앎; 앎; ) HANGUL SYLLABLE ALM C54F;C54F;110B 1161 11B2;C54F;110B 1161 11B2; # (앏; 앏; 앏; 앏; 앏; ) HANGUL SYLLABLE ALB C550;C550;110B 1161 11B3;C550;110B 1161 11B3; # (앐; 앐; 앐; 앐; 앐; ) HANGUL SYLLABLE ALS C551;C551;110B 1161 11B4;C551;110B 1161 11B4; # (앑; 앑; 앑; 앑; 앑; ) HANGUL SYLLABLE ALT C552;C552;110B 1161 11B5;C552;110B 1161 11B5; # (앒; 앒; 앒; 앒; 앒; ) HANGUL SYLLABLE ALP C553;C553;110B 1161 11B6;C553;110B 1161 11B6; # (앓; 앓; 앓; 앓; 앓; ) HANGUL SYLLABLE ALH C554;C554;110B 1161 11B7;C554;110B 1161 11B7; # (암; 암; 암; 암; 암; ) HANGUL SYLLABLE AM C555;C555;110B 1161 11B8;C555;110B 1161 11B8; # (압; 압; 압; 압; 압; ) HANGUL SYLLABLE AB C556;C556;110B 1161 11B9;C556;110B 1161 11B9; # (앖; 앖; 앖; 앖; 앖; ) HANGUL SYLLABLE ABS C557;C557;110B 1161 11BA;C557;110B 1161 11BA; # (앗; 앗; 앗; 앗; 앗; ) HANGUL SYLLABLE AS C558;C558;110B 1161 11BB;C558;110B 1161 11BB; # (았; 았; 았; 았; 았; ) HANGUL SYLLABLE ASS C559;C559;110B 1161 11BC;C559;110B 1161 11BC; # (앙; 앙; 앙; 앙; 앙; ) HANGUL SYLLABLE ANG C55A;C55A;110B 1161 11BD;C55A;110B 1161 11BD; # (앚; 앚; 앚; 앚; 앚; ) HANGUL SYLLABLE AJ C55B;C55B;110B 1161 11BE;C55B;110B 1161 11BE; # (앛; 앛; 앛; 앛; 앛; ) HANGUL SYLLABLE AC C55C;C55C;110B 1161 11BF;C55C;110B 1161 11BF; # (앜; 앜; 앜; 앜; 앜; ) HANGUL SYLLABLE AK C55D;C55D;110B 1161 11C0;C55D;110B 1161 11C0; # (앝; 앝; 앝; 앝; 앝; ) HANGUL SYLLABLE AT C55E;C55E;110B 1161 11C1;C55E;110B 1161 11C1; # (앞; 앞; 앞; 앞; 앞; ) HANGUL SYLLABLE AP C55F;C55F;110B 1161 11C2;C55F;110B 1161 11C2; # (앟; 앟; 앟; 앟; 앟; ) HANGUL SYLLABLE AH C560;C560;110B 1162;C560;110B 1162; # (애; 애; 애; 애; 애; ) HANGUL SYLLABLE AE C561;C561;110B 1162 11A8;C561;110B 1162 11A8; # (액; 액; 액; 액; 액; ) HANGUL SYLLABLE AEG C562;C562;110B 1162 11A9;C562;110B 1162 11A9; # (앢; 앢; 앢; 앢; 앢; ) HANGUL SYLLABLE AEGG C563;C563;110B 1162 11AA;C563;110B 1162 11AA; # (앣; 앣; 앣; 앣; 앣; ) HANGUL SYLLABLE AEGS C564;C564;110B 1162 11AB;C564;110B 1162 11AB; # (앤; 앤; 앤; 앤; 앤; ) HANGUL SYLLABLE AEN C565;C565;110B 1162 11AC;C565;110B 1162 11AC; # (앥; 앥; 앥; 앥; 앥; ) HANGUL SYLLABLE AENJ C566;C566;110B 1162 11AD;C566;110B 1162 11AD; # (앦; 앦; 앦; 앦; 앦; ) HANGUL SYLLABLE AENH C567;C567;110B 1162 11AE;C567;110B 1162 11AE; # (앧; 앧; 앧; 앧; 앧; ) HANGUL SYLLABLE AED C568;C568;110B 1162 11AF;C568;110B 1162 11AF; # (앨; 앨; 앨; 앨; 앨; ) HANGUL SYLLABLE AEL C569;C569;110B 1162 11B0;C569;110B 1162 11B0; # (앩; 앩; 앩; 앩; 앩; ) HANGUL SYLLABLE AELG C56A;C56A;110B 1162 11B1;C56A;110B 1162 11B1; # (앪; 앪; 앪; 앪; 앪; ) HANGUL SYLLABLE AELM C56B;C56B;110B 1162 11B2;C56B;110B 1162 11B2; # (앫; 앫; 앫; 앫; 앫; ) HANGUL SYLLABLE AELB C56C;C56C;110B 1162 11B3;C56C;110B 1162 11B3; # (앬; 앬; 앬; 앬; 앬; ) HANGUL SYLLABLE AELS C56D;C56D;110B 1162 11B4;C56D;110B 1162 11B4; # (앭; 앭; 앭; 앭; 앭; ) HANGUL SYLLABLE AELT C56E;C56E;110B 1162 11B5;C56E;110B 1162 11B5; # (앮; 앮; 앮; 앮; 앮; ) HANGUL SYLLABLE AELP C56F;C56F;110B 1162 11B6;C56F;110B 1162 11B6; # (앯; 앯; 앯; 앯; 앯; ) HANGUL SYLLABLE AELH C570;C570;110B 1162 11B7;C570;110B 1162 11B7; # (앰; 앰; 앰; 앰; 앰; ) HANGUL SYLLABLE AEM C571;C571;110B 1162 11B8;C571;110B 1162 11B8; # (앱; 앱; 앱; 앱; 앱; ) HANGUL SYLLABLE AEB C572;C572;110B 1162 11B9;C572;110B 1162 11B9; # (앲; 앲; 앲; 앲; 앲; ) HANGUL SYLLABLE AEBS C573;C573;110B 1162 11BA;C573;110B 1162 11BA; # (앳; 앳; 앳; 앳; 앳; ) HANGUL SYLLABLE AES C574;C574;110B 1162 11BB;C574;110B 1162 11BB; # (앴; 앴; 앴; 앴; 앴; ) HANGUL SYLLABLE AESS C575;C575;110B 1162 11BC;C575;110B 1162 11BC; # (앵; 앵; 앵; 앵; 앵; ) HANGUL SYLLABLE AENG C576;C576;110B 1162 11BD;C576;110B 1162 11BD; # (앶; 앶; 앶; 앶; 앶; ) HANGUL SYLLABLE AEJ C577;C577;110B 1162 11BE;C577;110B 1162 11BE; # (앷; 앷; 앷; 앷; 앷; ) HANGUL SYLLABLE AEC C578;C578;110B 1162 11BF;C578;110B 1162 11BF; # (앸; 앸; 앸; 앸; 앸; ) HANGUL SYLLABLE AEK C579;C579;110B 1162 11C0;C579;110B 1162 11C0; # (앹; 앹; 앹; 앹; 앹; ) HANGUL SYLLABLE AET C57A;C57A;110B 1162 11C1;C57A;110B 1162 11C1; # (앺; 앺; 앺; 앺; 앺; ) HANGUL SYLLABLE AEP C57B;C57B;110B 1162 11C2;C57B;110B 1162 11C2; # (앻; 앻; 앻; 앻; 앻; ) HANGUL SYLLABLE AEH C57C;C57C;110B 1163;C57C;110B 1163; # (야; 야; 야; 야; 야; ) HANGUL SYLLABLE YA C57D;C57D;110B 1163 11A8;C57D;110B 1163 11A8; # (약; 약; 약; 약; 약; ) HANGUL SYLLABLE YAG C57E;C57E;110B 1163 11A9;C57E;110B 1163 11A9; # (앾; 앾; 앾; 앾; 앾; ) HANGUL SYLLABLE YAGG C57F;C57F;110B 1163 11AA;C57F;110B 1163 11AA; # (앿; 앿; 앿; 앿; 앿; ) HANGUL SYLLABLE YAGS C580;C580;110B 1163 11AB;C580;110B 1163 11AB; # (얀; 얀; 얀; 얀; 얀; ) HANGUL SYLLABLE YAN C581;C581;110B 1163 11AC;C581;110B 1163 11AC; # (얁; 얁; 얁; 얁; 얁; ) HANGUL SYLLABLE YANJ C582;C582;110B 1163 11AD;C582;110B 1163 11AD; # (얂; 얂; 얂; 얂; 얂; ) HANGUL SYLLABLE YANH C583;C583;110B 1163 11AE;C583;110B 1163 11AE; # (얃; 얃; 얃; 얃; 얃; ) HANGUL SYLLABLE YAD C584;C584;110B 1163 11AF;C584;110B 1163 11AF; # (얄; 얄; 얄; 얄; 얄; ) HANGUL SYLLABLE YAL C585;C585;110B 1163 11B0;C585;110B 1163 11B0; # (얅; 얅; 얅; 얅; 얅; ) HANGUL SYLLABLE YALG C586;C586;110B 1163 11B1;C586;110B 1163 11B1; # (얆; 얆; 얆; 얆; 얆; ) HANGUL SYLLABLE YALM C587;C587;110B 1163 11B2;C587;110B 1163 11B2; # (얇; 얇; 얇; 얇; 얇; ) HANGUL SYLLABLE YALB C588;C588;110B 1163 11B3;C588;110B 1163 11B3; # (얈; 얈; 얈; 얈; 얈; ) HANGUL SYLLABLE YALS C589;C589;110B 1163 11B4;C589;110B 1163 11B4; # (얉; 얉; 얉; 얉; 얉; ) HANGUL SYLLABLE YALT C58A;C58A;110B 1163 11B5;C58A;110B 1163 11B5; # (얊; 얊; 얊; 얊; 얊; ) HANGUL SYLLABLE YALP C58B;C58B;110B 1163 11B6;C58B;110B 1163 11B6; # (얋; 얋; 얋; 얋; 얋; ) HANGUL SYLLABLE YALH C58C;C58C;110B 1163 11B7;C58C;110B 1163 11B7; # (얌; 얌; 얌; 얌; 얌; ) HANGUL SYLLABLE YAM C58D;C58D;110B 1163 11B8;C58D;110B 1163 11B8; # (얍; 얍; 얍; 얍; 얍; ) HANGUL SYLLABLE YAB C58E;C58E;110B 1163 11B9;C58E;110B 1163 11B9; # (얎; 얎; 얎; 얎; 얎; ) HANGUL SYLLABLE YABS C58F;C58F;110B 1163 11BA;C58F;110B 1163 11BA; # (얏; 얏; 얏; 얏; 얏; ) HANGUL SYLLABLE YAS C590;C590;110B 1163 11BB;C590;110B 1163 11BB; # (얐; 얐; 얐; 얐; 얐; ) HANGUL SYLLABLE YASS C591;C591;110B 1163 11BC;C591;110B 1163 11BC; # (양; 양; 양; 양; 양; ) HANGUL SYLLABLE YANG C592;C592;110B 1163 11BD;C592;110B 1163 11BD; # (얒; 얒; 얒; 얒; 얒; ) HANGUL SYLLABLE YAJ C593;C593;110B 1163 11BE;C593;110B 1163 11BE; # (얓; 얓; 얓; 얓; 얓; ) HANGUL SYLLABLE YAC C594;C594;110B 1163 11BF;C594;110B 1163 11BF; # (얔; 얔; 얔; 얔; 얔; ) HANGUL SYLLABLE YAK C595;C595;110B 1163 11C0;C595;110B 1163 11C0; # (얕; 얕; 얕; 얕; 얕; ) HANGUL SYLLABLE YAT C596;C596;110B 1163 11C1;C596;110B 1163 11C1; # (얖; 얖; 얖; 얖; 얖; ) HANGUL SYLLABLE YAP C597;C597;110B 1163 11C2;C597;110B 1163 11C2; # (얗; 얗; 얗; 얗; 얗; ) HANGUL SYLLABLE YAH C598;C598;110B 1164;C598;110B 1164; # (얘; 얘; 얘; 얘; 얘; ) HANGUL SYLLABLE YAE C599;C599;110B 1164 11A8;C599;110B 1164 11A8; # (얙; 얙; 얙; 얙; 얙; ) HANGUL SYLLABLE YAEG C59A;C59A;110B 1164 11A9;C59A;110B 1164 11A9; # (얚; 얚; 얚; 얚; 얚; ) HANGUL SYLLABLE YAEGG C59B;C59B;110B 1164 11AA;C59B;110B 1164 11AA; # (얛; 얛; 얛; 얛; 얛; ) HANGUL SYLLABLE YAEGS C59C;C59C;110B 1164 11AB;C59C;110B 1164 11AB; # (얜; 얜; 얜; 얜; 얜; ) HANGUL SYLLABLE YAEN C59D;C59D;110B 1164 11AC;C59D;110B 1164 11AC; # (얝; 얝; 얝; 얝; 얝; ) HANGUL SYLLABLE YAENJ C59E;C59E;110B 1164 11AD;C59E;110B 1164 11AD; # (얞; 얞; 얞; 얞; 얞; ) HANGUL SYLLABLE YAENH C59F;C59F;110B 1164 11AE;C59F;110B 1164 11AE; # (얟; 얟; 얟; 얟; 얟; ) HANGUL SYLLABLE YAED C5A0;C5A0;110B 1164 11AF;C5A0;110B 1164 11AF; # (얠; 얠; 얠; 얠; 얠; ) HANGUL SYLLABLE YAEL C5A1;C5A1;110B 1164 11B0;C5A1;110B 1164 11B0; # (얡; 얡; 얡; 얡; 얡; ) HANGUL SYLLABLE YAELG C5A2;C5A2;110B 1164 11B1;C5A2;110B 1164 11B1; # (얢; 얢; 얢; 얢; 얢; ) HANGUL SYLLABLE YAELM C5A3;C5A3;110B 1164 11B2;C5A3;110B 1164 11B2; # (얣; 얣; 얣; 얣; 얣; ) HANGUL SYLLABLE YAELB C5A4;C5A4;110B 1164 11B3;C5A4;110B 1164 11B3; # (얤; 얤; 얤; 얤; 얤; ) HANGUL SYLLABLE YAELS C5A5;C5A5;110B 1164 11B4;C5A5;110B 1164 11B4; # (얥; 얥; 얥; 얥; 얥; ) HANGUL SYLLABLE YAELT C5A6;C5A6;110B 1164 11B5;C5A6;110B 1164 11B5; # (얦; 얦; 얦; 얦; 얦; ) HANGUL SYLLABLE YAELP C5A7;C5A7;110B 1164 11B6;C5A7;110B 1164 11B6; # (얧; 얧; 얧; 얧; 얧; ) HANGUL SYLLABLE YAELH C5A8;C5A8;110B 1164 11B7;C5A8;110B 1164 11B7; # (얨; 얨; 얨; 얨; 얨; ) HANGUL SYLLABLE YAEM C5A9;C5A9;110B 1164 11B8;C5A9;110B 1164 11B8; # (얩; 얩; 얩; 얩; 얩; ) HANGUL SYLLABLE YAEB C5AA;C5AA;110B 1164 11B9;C5AA;110B 1164 11B9; # (얪; 얪; 얪; 얪; 얪; ) HANGUL SYLLABLE YAEBS C5AB;C5AB;110B 1164 11BA;C5AB;110B 1164 11BA; # (얫; 얫; 얫; 얫; 얫; ) HANGUL SYLLABLE YAES C5AC;C5AC;110B 1164 11BB;C5AC;110B 1164 11BB; # (얬; 얬; 얬; 얬; 얬; ) HANGUL SYLLABLE YAESS C5AD;C5AD;110B 1164 11BC;C5AD;110B 1164 11BC; # (얭; 얭; 얭; 얭; 얭; ) HANGUL SYLLABLE YAENG C5AE;C5AE;110B 1164 11BD;C5AE;110B 1164 11BD; # (얮; 얮; 얮; 얮; 얮; ) HANGUL SYLLABLE YAEJ C5AF;C5AF;110B 1164 11BE;C5AF;110B 1164 11BE; # (얯; 얯; 얯; 얯; 얯; ) HANGUL SYLLABLE YAEC C5B0;C5B0;110B 1164 11BF;C5B0;110B 1164 11BF; # (얰; 얰; 얰; 얰; 얰; ) HANGUL SYLLABLE YAEK C5B1;C5B1;110B 1164 11C0;C5B1;110B 1164 11C0; # (얱; 얱; 얱; 얱; 얱; ) HANGUL SYLLABLE YAET C5B2;C5B2;110B 1164 11C1;C5B2;110B 1164 11C1; # (얲; 얲; 얲; 얲; 얲; ) HANGUL SYLLABLE YAEP C5B3;C5B3;110B 1164 11C2;C5B3;110B 1164 11C2; # (얳; 얳; 얳; 얳; 얳; ) HANGUL SYLLABLE YAEH C5B4;C5B4;110B 1165;C5B4;110B 1165; # (어; 어; 어; 어; 어; ) HANGUL SYLLABLE EO C5B5;C5B5;110B 1165 11A8;C5B5;110B 1165 11A8; # (억; 억; 억; 억; 억; ) HANGUL SYLLABLE EOG C5B6;C5B6;110B 1165 11A9;C5B6;110B 1165 11A9; # (얶; 얶; 얶; 얶; 얶; ) HANGUL SYLLABLE EOGG C5B7;C5B7;110B 1165 11AA;C5B7;110B 1165 11AA; # (얷; 얷; 얷; 얷; 얷; ) HANGUL SYLLABLE EOGS C5B8;C5B8;110B 1165 11AB;C5B8;110B 1165 11AB; # (언; 언; 언; 언; 언; ) HANGUL SYLLABLE EON C5B9;C5B9;110B 1165 11AC;C5B9;110B 1165 11AC; # (얹; 얹; 얹; 얹; 얹; ) HANGUL SYLLABLE EONJ C5BA;C5BA;110B 1165 11AD;C5BA;110B 1165 11AD; # (얺; 얺; 얺; 얺; 얺; ) HANGUL SYLLABLE EONH C5BB;C5BB;110B 1165 11AE;C5BB;110B 1165 11AE; # (얻; 얻; 얻; 얻; 얻; ) HANGUL SYLLABLE EOD C5BC;C5BC;110B 1165 11AF;C5BC;110B 1165 11AF; # (얼; 얼; 얼; 얼; 얼; ) HANGUL SYLLABLE EOL C5BD;C5BD;110B 1165 11B0;C5BD;110B 1165 11B0; # (얽; 얽; 얽; 얽; 얽; ) HANGUL SYLLABLE EOLG C5BE;C5BE;110B 1165 11B1;C5BE;110B 1165 11B1; # (얾; 얾; 얾; 얾; 얾; ) HANGUL SYLLABLE EOLM C5BF;C5BF;110B 1165 11B2;C5BF;110B 1165 11B2; # (얿; 얿; 얿; 얿; 얿; ) HANGUL SYLLABLE EOLB C5C0;C5C0;110B 1165 11B3;C5C0;110B 1165 11B3; # (엀; 엀; 엀; 엀; 엀; ) HANGUL SYLLABLE EOLS C5C1;C5C1;110B 1165 11B4;C5C1;110B 1165 11B4; # (엁; 엁; 엁; 엁; 엁; ) HANGUL SYLLABLE EOLT C5C2;C5C2;110B 1165 11B5;C5C2;110B 1165 11B5; # (엂; 엂; 엂; 엂; 엂; ) HANGUL SYLLABLE EOLP C5C3;C5C3;110B 1165 11B6;C5C3;110B 1165 11B6; # (엃; 엃; 엃; 엃; 엃; ) HANGUL SYLLABLE EOLH C5C4;C5C4;110B 1165 11B7;C5C4;110B 1165 11B7; # (엄; 엄; 엄; 엄; 엄; ) HANGUL SYLLABLE EOM C5C5;C5C5;110B 1165 11B8;C5C5;110B 1165 11B8; # (업; 업; 업; 업; 업; ) HANGUL SYLLABLE EOB C5C6;C5C6;110B 1165 11B9;C5C6;110B 1165 11B9; # (없; 없; 없; 없; 없; ) HANGUL SYLLABLE EOBS C5C7;C5C7;110B 1165 11BA;C5C7;110B 1165 11BA; # (엇; 엇; 엇; 엇; 엇; ) HANGUL SYLLABLE EOS C5C8;C5C8;110B 1165 11BB;C5C8;110B 1165 11BB; # (었; 었; 었; 었; 었; ) HANGUL SYLLABLE EOSS C5C9;C5C9;110B 1165 11BC;C5C9;110B 1165 11BC; # (엉; 엉; 엉; 엉; 엉; ) HANGUL SYLLABLE EONG C5CA;C5CA;110B 1165 11BD;C5CA;110B 1165 11BD; # (엊; 엊; 엊; 엊; 엊; ) HANGUL SYLLABLE EOJ C5CB;C5CB;110B 1165 11BE;C5CB;110B 1165 11BE; # (엋; 엋; 엋; 엋; 엋; ) HANGUL SYLLABLE EOC C5CC;C5CC;110B 1165 11BF;C5CC;110B 1165 11BF; # (엌; 엌; 엌; 엌; 엌; ) HANGUL SYLLABLE EOK C5CD;C5CD;110B 1165 11C0;C5CD;110B 1165 11C0; # (엍; 엍; 엍; 엍; 엍; ) HANGUL SYLLABLE EOT C5CE;C5CE;110B 1165 11C1;C5CE;110B 1165 11C1; # (엎; 엎; 엎; 엎; 엎; ) HANGUL SYLLABLE EOP C5CF;C5CF;110B 1165 11C2;C5CF;110B 1165 11C2; # (엏; 엏; 엏; 엏; 엏; ) HANGUL SYLLABLE EOH C5D0;C5D0;110B 1166;C5D0;110B 1166; # (에; 에; 에; 에; 에; ) HANGUL SYLLABLE E C5D1;C5D1;110B 1166 11A8;C5D1;110B 1166 11A8; # (엑; 엑; 엑; 엑; 엑; ) HANGUL SYLLABLE EG C5D2;C5D2;110B 1166 11A9;C5D2;110B 1166 11A9; # (엒; 엒; 엒; 엒; 엒; ) HANGUL SYLLABLE EGG C5D3;C5D3;110B 1166 11AA;C5D3;110B 1166 11AA; # (엓; 엓; 엓; 엓; 엓; ) HANGUL SYLLABLE EGS C5D4;C5D4;110B 1166 11AB;C5D4;110B 1166 11AB; # (엔; 엔; 엔; 엔; 엔; ) HANGUL SYLLABLE EN C5D5;C5D5;110B 1166 11AC;C5D5;110B 1166 11AC; # (엕; 엕; 엕; 엕; 엕; ) HANGUL SYLLABLE ENJ C5D6;C5D6;110B 1166 11AD;C5D6;110B 1166 11AD; # (엖; 엖; 엖; 엖; 엖; ) HANGUL SYLLABLE ENH C5D7;C5D7;110B 1166 11AE;C5D7;110B 1166 11AE; # (엗; 엗; 엗; 엗; 엗; ) HANGUL SYLLABLE ED C5D8;C5D8;110B 1166 11AF;C5D8;110B 1166 11AF; # (엘; 엘; 엘; 엘; 엘; ) HANGUL SYLLABLE EL C5D9;C5D9;110B 1166 11B0;C5D9;110B 1166 11B0; # (엙; 엙; 엙; 엙; 엙; ) HANGUL SYLLABLE ELG C5DA;C5DA;110B 1166 11B1;C5DA;110B 1166 11B1; # (엚; 엚; 엚; 엚; 엚; ) HANGUL SYLLABLE ELM C5DB;C5DB;110B 1166 11B2;C5DB;110B 1166 11B2; # (엛; 엛; 엛; 엛; 엛; ) HANGUL SYLLABLE ELB C5DC;C5DC;110B 1166 11B3;C5DC;110B 1166 11B3; # (엜; 엜; 엜; 엜; 엜; ) HANGUL SYLLABLE ELS C5DD;C5DD;110B 1166 11B4;C5DD;110B 1166 11B4; # (엝; 엝; 엝; 엝; 엝; ) HANGUL SYLLABLE ELT C5DE;C5DE;110B 1166 11B5;C5DE;110B 1166 11B5; # (엞; 엞; 엞; 엞; 엞; ) HANGUL SYLLABLE ELP C5DF;C5DF;110B 1166 11B6;C5DF;110B 1166 11B6; # (엟; 엟; 엟; 엟; 엟; ) HANGUL SYLLABLE ELH C5E0;C5E0;110B 1166 11B7;C5E0;110B 1166 11B7; # (엠; 엠; 엠; 엠; 엠; ) HANGUL SYLLABLE EM C5E1;C5E1;110B 1166 11B8;C5E1;110B 1166 11B8; # (엡; 엡; 엡; 엡; 엡; ) HANGUL SYLLABLE EB C5E2;C5E2;110B 1166 11B9;C5E2;110B 1166 11B9; # (엢; 엢; 엢; 엢; 엢; ) HANGUL SYLLABLE EBS C5E3;C5E3;110B 1166 11BA;C5E3;110B 1166 11BA; # (엣; 엣; 엣; 엣; 엣; ) HANGUL SYLLABLE ES C5E4;C5E4;110B 1166 11BB;C5E4;110B 1166 11BB; # (엤; 엤; 엤; 엤; 엤; ) HANGUL SYLLABLE ESS C5E5;C5E5;110B 1166 11BC;C5E5;110B 1166 11BC; # (엥; 엥; 엥; 엥; 엥; ) HANGUL SYLLABLE ENG C5E6;C5E6;110B 1166 11BD;C5E6;110B 1166 11BD; # (엦; 엦; 엦; 엦; 엦; ) HANGUL SYLLABLE EJ C5E7;C5E7;110B 1166 11BE;C5E7;110B 1166 11BE; # (엧; 엧; 엧; 엧; 엧; ) HANGUL SYLLABLE EC C5E8;C5E8;110B 1166 11BF;C5E8;110B 1166 11BF; # (엨; 엨; 엨; 엨; 엨; ) HANGUL SYLLABLE EK C5E9;C5E9;110B 1166 11C0;C5E9;110B 1166 11C0; # (엩; 엩; 엩; 엩; 엩; ) HANGUL SYLLABLE ET C5EA;C5EA;110B 1166 11C1;C5EA;110B 1166 11C1; # (엪; 엪; 엪; 엪; 엪; ) HANGUL SYLLABLE EP C5EB;C5EB;110B 1166 11C2;C5EB;110B 1166 11C2; # (엫; 엫; 엫; 엫; 엫; ) HANGUL SYLLABLE EH C5EC;C5EC;110B 1167;C5EC;110B 1167; # (여; 여; 여; 여; 여; ) HANGUL SYLLABLE YEO C5ED;C5ED;110B 1167 11A8;C5ED;110B 1167 11A8; # (역; 역; 역; 역; 역; ) HANGUL SYLLABLE YEOG C5EE;C5EE;110B 1167 11A9;C5EE;110B 1167 11A9; # (엮; 엮; 엮; 엮; 엮; ) HANGUL SYLLABLE YEOGG C5EF;C5EF;110B 1167 11AA;C5EF;110B 1167 11AA; # (엯; 엯; 엯; 엯; 엯; ) HANGUL SYLLABLE YEOGS C5F0;C5F0;110B 1167 11AB;C5F0;110B 1167 11AB; # (연; 연; 연; 연; 연; ) HANGUL SYLLABLE YEON C5F1;C5F1;110B 1167 11AC;C5F1;110B 1167 11AC; # (엱; 엱; 엱; 엱; 엱; ) HANGUL SYLLABLE YEONJ C5F2;C5F2;110B 1167 11AD;C5F2;110B 1167 11AD; # (엲; 엲; 엲; 엲; 엲; ) HANGUL SYLLABLE YEONH C5F3;C5F3;110B 1167 11AE;C5F3;110B 1167 11AE; # (엳; 엳; 엳; 엳; 엳; ) HANGUL SYLLABLE YEOD C5F4;C5F4;110B 1167 11AF;C5F4;110B 1167 11AF; # (열; 열; 열; 열; 열; ) HANGUL SYLLABLE YEOL C5F5;C5F5;110B 1167 11B0;C5F5;110B 1167 11B0; # (엵; 엵; 엵; 엵; 엵; ) HANGUL SYLLABLE YEOLG C5F6;C5F6;110B 1167 11B1;C5F6;110B 1167 11B1; # (엶; 엶; 엶; 엶; 엶; ) HANGUL SYLLABLE YEOLM C5F7;C5F7;110B 1167 11B2;C5F7;110B 1167 11B2; # (엷; 엷; 엷; 엷; 엷; ) HANGUL SYLLABLE YEOLB C5F8;C5F8;110B 1167 11B3;C5F8;110B 1167 11B3; # (엸; 엸; 엸; 엸; 엸; ) HANGUL SYLLABLE YEOLS C5F9;C5F9;110B 1167 11B4;C5F9;110B 1167 11B4; # (엹; 엹; 엹; 엹; 엹; ) HANGUL SYLLABLE YEOLT C5FA;C5FA;110B 1167 11B5;C5FA;110B 1167 11B5; # (엺; 엺; 엺; 엺; 엺; ) HANGUL SYLLABLE YEOLP C5FB;C5FB;110B 1167 11B6;C5FB;110B 1167 11B6; # (엻; 엻; 엻; 엻; 엻; ) HANGUL SYLLABLE YEOLH C5FC;C5FC;110B 1167 11B7;C5FC;110B 1167 11B7; # (염; 염; 염; 염; 염; ) HANGUL SYLLABLE YEOM C5FD;C5FD;110B 1167 11B8;C5FD;110B 1167 11B8; # (엽; 엽; 엽; 엽; 엽; ) HANGUL SYLLABLE YEOB C5FE;C5FE;110B 1167 11B9;C5FE;110B 1167 11B9; # (엾; 엾; 엾; 엾; 엾; ) HANGUL SYLLABLE YEOBS C5FF;C5FF;110B 1167 11BA;C5FF;110B 1167 11BA; # (엿; 엿; 엿; 엿; 엿; ) HANGUL SYLLABLE YEOS C600;C600;110B 1167 11BB;C600;110B 1167 11BB; # (였; 였; 였; 였; 였; ) HANGUL SYLLABLE YEOSS C601;C601;110B 1167 11BC;C601;110B 1167 11BC; # (영; 영; 영; 영; 영; ) HANGUL SYLLABLE YEONG C602;C602;110B 1167 11BD;C602;110B 1167 11BD; # (옂; 옂; 옂; 옂; 옂; ) HANGUL SYLLABLE YEOJ C603;C603;110B 1167 11BE;C603;110B 1167 11BE; # (옃; 옃; 옃; 옃; 옃; ) HANGUL SYLLABLE YEOC C604;C604;110B 1167 11BF;C604;110B 1167 11BF; # (옄; 옄; 옄; 옄; 옄; ) HANGUL SYLLABLE YEOK C605;C605;110B 1167 11C0;C605;110B 1167 11C0; # (옅; 옅; 옅; 옅; 옅; ) HANGUL SYLLABLE YEOT C606;C606;110B 1167 11C1;C606;110B 1167 11C1; # (옆; 옆; 옆; 옆; 옆; ) HANGUL SYLLABLE YEOP C607;C607;110B 1167 11C2;C607;110B 1167 11C2; # (옇; 옇; 옇; 옇; 옇; ) HANGUL SYLLABLE YEOH C608;C608;110B 1168;C608;110B 1168; # (예; 예; 예; 예; 예; ) HANGUL SYLLABLE YE C609;C609;110B 1168 11A8;C609;110B 1168 11A8; # (옉; 옉; 옉; 옉; 옉; ) HANGUL SYLLABLE YEG C60A;C60A;110B 1168 11A9;C60A;110B 1168 11A9; # (옊; 옊; 옊; 옊; 옊; ) HANGUL SYLLABLE YEGG C60B;C60B;110B 1168 11AA;C60B;110B 1168 11AA; # (옋; 옋; 옋; 옋; 옋; ) HANGUL SYLLABLE YEGS C60C;C60C;110B 1168 11AB;C60C;110B 1168 11AB; # (옌; 옌; 옌; 옌; 옌; ) HANGUL SYLLABLE YEN C60D;C60D;110B 1168 11AC;C60D;110B 1168 11AC; # (옍; 옍; 옍; 옍; 옍; ) HANGUL SYLLABLE YENJ C60E;C60E;110B 1168 11AD;C60E;110B 1168 11AD; # (옎; 옎; 옎; 옎; 옎; ) HANGUL SYLLABLE YENH C60F;C60F;110B 1168 11AE;C60F;110B 1168 11AE; # (옏; 옏; 옏; 옏; 옏; ) HANGUL SYLLABLE YED C610;C610;110B 1168 11AF;C610;110B 1168 11AF; # (옐; 옐; 옐; 옐; 옐; ) HANGUL SYLLABLE YEL C611;C611;110B 1168 11B0;C611;110B 1168 11B0; # (옑; 옑; 옑; 옑; 옑; ) HANGUL SYLLABLE YELG C612;C612;110B 1168 11B1;C612;110B 1168 11B1; # (옒; 옒; 옒; 옒; 옒; ) HANGUL SYLLABLE YELM C613;C613;110B 1168 11B2;C613;110B 1168 11B2; # (옓; 옓; 옓; 옓; 옓; ) HANGUL SYLLABLE YELB C614;C614;110B 1168 11B3;C614;110B 1168 11B3; # (옔; 옔; 옔; 옔; 옔; ) HANGUL SYLLABLE YELS C615;C615;110B 1168 11B4;C615;110B 1168 11B4; # (옕; 옕; 옕; 옕; 옕; ) HANGUL SYLLABLE YELT C616;C616;110B 1168 11B5;C616;110B 1168 11B5; # (옖; 옖; 옖; 옖; 옖; ) HANGUL SYLLABLE YELP C617;C617;110B 1168 11B6;C617;110B 1168 11B6; # (옗; 옗; 옗; 옗; 옗; ) HANGUL SYLLABLE YELH C618;C618;110B 1168 11B7;C618;110B 1168 11B7; # (옘; 옘; 옘; 옘; 옘; ) HANGUL SYLLABLE YEM C619;C619;110B 1168 11B8;C619;110B 1168 11B8; # (옙; 옙; 옙; 옙; 옙; ) HANGUL SYLLABLE YEB C61A;C61A;110B 1168 11B9;C61A;110B 1168 11B9; # (옚; 옚; 옚; 옚; 옚; ) HANGUL SYLLABLE YEBS C61B;C61B;110B 1168 11BA;C61B;110B 1168 11BA; # (옛; 옛; 옛; 옛; 옛; ) HANGUL SYLLABLE YES C61C;C61C;110B 1168 11BB;C61C;110B 1168 11BB; # (옜; 옜; 옜; 옜; 옜; ) HANGUL SYLLABLE YESS C61D;C61D;110B 1168 11BC;C61D;110B 1168 11BC; # (옝; 옝; 옝; 옝; 옝; ) HANGUL SYLLABLE YENG C61E;C61E;110B 1168 11BD;C61E;110B 1168 11BD; # (옞; 옞; 옞; 옞; 옞; ) HANGUL SYLLABLE YEJ C61F;C61F;110B 1168 11BE;C61F;110B 1168 11BE; # (옟; 옟; 옟; 옟; 옟; ) HANGUL SYLLABLE YEC C620;C620;110B 1168 11BF;C620;110B 1168 11BF; # (옠; 옠; 옠; 옠; 옠; ) HANGUL SYLLABLE YEK C621;C621;110B 1168 11C0;C621;110B 1168 11C0; # (옡; 옡; 옡; 옡; 옡; ) HANGUL SYLLABLE YET C622;C622;110B 1168 11C1;C622;110B 1168 11C1; # (옢; 옢; 옢; 옢; 옢; ) HANGUL SYLLABLE YEP C623;C623;110B 1168 11C2;C623;110B 1168 11C2; # (옣; 옣; 옣; 옣; 옣; ) HANGUL SYLLABLE YEH C624;C624;110B 1169;C624;110B 1169; # (오; 오; 오; 오; 오; ) HANGUL SYLLABLE O C625;C625;110B 1169 11A8;C625;110B 1169 11A8; # (옥; 옥; 옥; 옥; 옥; ) HANGUL SYLLABLE OG C626;C626;110B 1169 11A9;C626;110B 1169 11A9; # (옦; 옦; 옦; 옦; 옦; ) HANGUL SYLLABLE OGG C627;C627;110B 1169 11AA;C627;110B 1169 11AA; # (옧; 옧; 옧; 옧; 옧; ) HANGUL SYLLABLE OGS C628;C628;110B 1169 11AB;C628;110B 1169 11AB; # (온; 온; 온; 온; 온; ) HANGUL SYLLABLE ON C629;C629;110B 1169 11AC;C629;110B 1169 11AC; # (옩; 옩; 옩; 옩; 옩; ) HANGUL SYLLABLE ONJ C62A;C62A;110B 1169 11AD;C62A;110B 1169 11AD; # (옪; 옪; 옪; 옪; 옪; ) HANGUL SYLLABLE ONH C62B;C62B;110B 1169 11AE;C62B;110B 1169 11AE; # (옫; 옫; 옫; 옫; 옫; ) HANGUL SYLLABLE OD C62C;C62C;110B 1169 11AF;C62C;110B 1169 11AF; # (올; 올; 올; 올; 올; ) HANGUL SYLLABLE OL C62D;C62D;110B 1169 11B0;C62D;110B 1169 11B0; # (옭; 옭; 옭; 옭; 옭; ) HANGUL SYLLABLE OLG C62E;C62E;110B 1169 11B1;C62E;110B 1169 11B1; # (옮; 옮; 옮; 옮; 옮; ) HANGUL SYLLABLE OLM C62F;C62F;110B 1169 11B2;C62F;110B 1169 11B2; # (옯; 옯; 옯; 옯; 옯; ) HANGUL SYLLABLE OLB C630;C630;110B 1169 11B3;C630;110B 1169 11B3; # (옰; 옰; 옰; 옰; 옰; ) HANGUL SYLLABLE OLS C631;C631;110B 1169 11B4;C631;110B 1169 11B4; # (옱; 옱; 옱; 옱; 옱; ) HANGUL SYLLABLE OLT C632;C632;110B 1169 11B5;C632;110B 1169 11B5; # (옲; 옲; 옲; 옲; 옲; ) HANGUL SYLLABLE OLP C633;C633;110B 1169 11B6;C633;110B 1169 11B6; # (옳; 옳; 옳; 옳; 옳; ) HANGUL SYLLABLE OLH C634;C634;110B 1169 11B7;C634;110B 1169 11B7; # (옴; 옴; 옴; 옴; 옴; ) HANGUL SYLLABLE OM C635;C635;110B 1169 11B8;C635;110B 1169 11B8; # (옵; 옵; 옵; 옵; 옵; ) HANGUL SYLLABLE OB C636;C636;110B 1169 11B9;C636;110B 1169 11B9; # (옶; 옶; 옶; 옶; 옶; ) HANGUL SYLLABLE OBS C637;C637;110B 1169 11BA;C637;110B 1169 11BA; # (옷; 옷; 옷; 옷; 옷; ) HANGUL SYLLABLE OS C638;C638;110B 1169 11BB;C638;110B 1169 11BB; # (옸; 옸; 옸; 옸; 옸; ) HANGUL SYLLABLE OSS C639;C639;110B 1169 11BC;C639;110B 1169 11BC; # (옹; 옹; 옹; 옹; 옹; ) HANGUL SYLLABLE ONG C63A;C63A;110B 1169 11BD;C63A;110B 1169 11BD; # (옺; 옺; 옺; 옺; 옺; ) HANGUL SYLLABLE OJ C63B;C63B;110B 1169 11BE;C63B;110B 1169 11BE; # (옻; 옻; 옻; 옻; 옻; ) HANGUL SYLLABLE OC C63C;C63C;110B 1169 11BF;C63C;110B 1169 11BF; # (옼; 옼; 옼; 옼; 옼; ) HANGUL SYLLABLE OK C63D;C63D;110B 1169 11C0;C63D;110B 1169 11C0; # (옽; 옽; 옽; 옽; 옽; ) HANGUL SYLLABLE OT C63E;C63E;110B 1169 11C1;C63E;110B 1169 11C1; # (옾; 옾; 옾; 옾; 옾; ) HANGUL SYLLABLE OP C63F;C63F;110B 1169 11C2;C63F;110B 1169 11C2; # (옿; 옿; 옿; 옿; 옿; ) HANGUL SYLLABLE OH C640;C640;110B 116A;C640;110B 116A; # (와; 와; 와; 와; 와; ) HANGUL SYLLABLE WA C641;C641;110B 116A 11A8;C641;110B 116A 11A8; # (왁; 왁; 왁; 왁; 왁; ) HANGUL SYLLABLE WAG C642;C642;110B 116A 11A9;C642;110B 116A 11A9; # (왂; 왂; 왂; 왂; 왂; ) HANGUL SYLLABLE WAGG C643;C643;110B 116A 11AA;C643;110B 116A 11AA; # (왃; 왃; 왃; 왃; 왃; ) HANGUL SYLLABLE WAGS C644;C644;110B 116A 11AB;C644;110B 116A 11AB; # (완; 완; 완; 완; 완; ) HANGUL SYLLABLE WAN C645;C645;110B 116A 11AC;C645;110B 116A 11AC; # (왅; 왅; 왅; 왅; 왅; ) HANGUL SYLLABLE WANJ C646;C646;110B 116A 11AD;C646;110B 116A 11AD; # (왆; 왆; 왆; 왆; 왆; ) HANGUL SYLLABLE WANH C647;C647;110B 116A 11AE;C647;110B 116A 11AE; # (왇; 왇; 왇; 왇; 왇; ) HANGUL SYLLABLE WAD C648;C648;110B 116A 11AF;C648;110B 116A 11AF; # (왈; 왈; 왈; 왈; 왈; ) HANGUL SYLLABLE WAL C649;C649;110B 116A 11B0;C649;110B 116A 11B0; # (왉; 왉; 왉; 왉; 왉; ) HANGUL SYLLABLE WALG C64A;C64A;110B 116A 11B1;C64A;110B 116A 11B1; # (왊; 왊; 왊; 왊; 왊; ) HANGUL SYLLABLE WALM C64B;C64B;110B 116A 11B2;C64B;110B 116A 11B2; # (왋; 왋; 왋; 왋; 왋; ) HANGUL SYLLABLE WALB C64C;C64C;110B 116A 11B3;C64C;110B 116A 11B3; # (왌; 왌; 왌; 왌; 왌; ) HANGUL SYLLABLE WALS C64D;C64D;110B 116A 11B4;C64D;110B 116A 11B4; # (왍; 왍; 왍; 왍; 왍; ) HANGUL SYLLABLE WALT C64E;C64E;110B 116A 11B5;C64E;110B 116A 11B5; # (왎; 왎; 왎; 왎; 왎; ) HANGUL SYLLABLE WALP C64F;C64F;110B 116A 11B6;C64F;110B 116A 11B6; # (왏; 왏; 왏; 왏; 왏; ) HANGUL SYLLABLE WALH C650;C650;110B 116A 11B7;C650;110B 116A 11B7; # (왐; 왐; 왐; 왐; 왐; ) HANGUL SYLLABLE WAM C651;C651;110B 116A 11B8;C651;110B 116A 11B8; # (왑; 왑; 왑; 왑; 왑; ) HANGUL SYLLABLE WAB C652;C652;110B 116A 11B9;C652;110B 116A 11B9; # (왒; 왒; 왒; 왒; 왒; ) HANGUL SYLLABLE WABS C653;C653;110B 116A 11BA;C653;110B 116A 11BA; # (왓; 왓; 왓; 왓; 왓; ) HANGUL SYLLABLE WAS C654;C654;110B 116A 11BB;C654;110B 116A 11BB; # (왔; 왔; 왔; 왔; 왔; ) HANGUL SYLLABLE WASS C655;C655;110B 116A 11BC;C655;110B 116A 11BC; # (왕; 왕; 왕; 왕; 왕; ) HANGUL SYLLABLE WANG C656;C656;110B 116A 11BD;C656;110B 116A 11BD; # (왖; 왖; 왖; 왖; 왖; ) HANGUL SYLLABLE WAJ C657;C657;110B 116A 11BE;C657;110B 116A 11BE; # (왗; 왗; 왗; 왗; 왗; ) HANGUL SYLLABLE WAC C658;C658;110B 116A 11BF;C658;110B 116A 11BF; # (왘; 왘; 왘; 왘; 왘; ) HANGUL SYLLABLE WAK C659;C659;110B 116A 11C0;C659;110B 116A 11C0; # (왙; 왙; 왙; 왙; 왙; ) HANGUL SYLLABLE WAT C65A;C65A;110B 116A 11C1;C65A;110B 116A 11C1; # (왚; 왚; 왚; 왚; 왚; ) HANGUL SYLLABLE WAP C65B;C65B;110B 116A 11C2;C65B;110B 116A 11C2; # (왛; 왛; 왛; 왛; 왛; ) HANGUL SYLLABLE WAH C65C;C65C;110B 116B;C65C;110B 116B; # (왜; 왜; 왜; 왜; 왜; ) HANGUL SYLLABLE WAE C65D;C65D;110B 116B 11A8;C65D;110B 116B 11A8; # (왝; 왝; 왝; 왝; 왝; ) HANGUL SYLLABLE WAEG C65E;C65E;110B 116B 11A9;C65E;110B 116B 11A9; # (왞; 왞; 왞; 왞; 왞; ) HANGUL SYLLABLE WAEGG C65F;C65F;110B 116B 11AA;C65F;110B 116B 11AA; # (왟; 왟; 왟; 왟; 왟; ) HANGUL SYLLABLE WAEGS C660;C660;110B 116B 11AB;C660;110B 116B 11AB; # (왠; 왠; 왠; 왠; 왠; ) HANGUL SYLLABLE WAEN C661;C661;110B 116B 11AC;C661;110B 116B 11AC; # (왡; 왡; 왡; 왡; 왡; ) HANGUL SYLLABLE WAENJ C662;C662;110B 116B 11AD;C662;110B 116B 11AD; # (왢; 왢; 왢; 왢; 왢; ) HANGUL SYLLABLE WAENH C663;C663;110B 116B 11AE;C663;110B 116B 11AE; # (왣; 왣; 왣; 왣; 왣; ) HANGUL SYLLABLE WAED C664;C664;110B 116B 11AF;C664;110B 116B 11AF; # (왤; 왤; 왤; 왤; 왤; ) HANGUL SYLLABLE WAEL C665;C665;110B 116B 11B0;C665;110B 116B 11B0; # (왥; 왥; 왥; 왥; 왥; ) HANGUL SYLLABLE WAELG C666;C666;110B 116B 11B1;C666;110B 116B 11B1; # (왦; 왦; 왦; 왦; 왦; ) HANGUL SYLLABLE WAELM C667;C667;110B 116B 11B2;C667;110B 116B 11B2; # (왧; 왧; 왧; 왧; 왧; ) HANGUL SYLLABLE WAELB C668;C668;110B 116B 11B3;C668;110B 116B 11B3; # (왨; 왨; 왨; 왨; 왨; ) HANGUL SYLLABLE WAELS C669;C669;110B 116B 11B4;C669;110B 116B 11B4; # (왩; 왩; 왩; 왩; 왩; ) HANGUL SYLLABLE WAELT C66A;C66A;110B 116B 11B5;C66A;110B 116B 11B5; # (왪; 왪; 왪; 왪; 왪; ) HANGUL SYLLABLE WAELP C66B;C66B;110B 116B 11B6;C66B;110B 116B 11B6; # (왫; 왫; 왫; 왫; 왫; ) HANGUL SYLLABLE WAELH C66C;C66C;110B 116B 11B7;C66C;110B 116B 11B7; # (왬; 왬; 왬; 왬; 왬; ) HANGUL SYLLABLE WAEM C66D;C66D;110B 116B 11B8;C66D;110B 116B 11B8; # (왭; 왭; 왭; 왭; 왭; ) HANGUL SYLLABLE WAEB C66E;C66E;110B 116B 11B9;C66E;110B 116B 11B9; # (왮; 왮; 왮; 왮; 왮; ) HANGUL SYLLABLE WAEBS C66F;C66F;110B 116B 11BA;C66F;110B 116B 11BA; # (왯; 왯; 왯; 왯; 왯; ) HANGUL SYLLABLE WAES C670;C670;110B 116B 11BB;C670;110B 116B 11BB; # (왰; 왰; 왰; 왰; 왰; ) HANGUL SYLLABLE WAESS C671;C671;110B 116B 11BC;C671;110B 116B 11BC; # (왱; 왱; 왱; 왱; 왱; ) HANGUL SYLLABLE WAENG C672;C672;110B 116B 11BD;C672;110B 116B 11BD; # (왲; 왲; 왲; 왲; 왲; ) HANGUL SYLLABLE WAEJ C673;C673;110B 116B 11BE;C673;110B 116B 11BE; # (왳; 왳; 왳; 왳; 왳; ) HANGUL SYLLABLE WAEC C674;C674;110B 116B 11BF;C674;110B 116B 11BF; # (왴; 왴; 왴; 왴; 왴; ) HANGUL SYLLABLE WAEK C675;C675;110B 116B 11C0;C675;110B 116B 11C0; # (왵; 왵; 왵; 왵; 왵; ) HANGUL SYLLABLE WAET C676;C676;110B 116B 11C1;C676;110B 116B 11C1; # (왶; 왶; 왶; 왶; 왶; ) HANGUL SYLLABLE WAEP C677;C677;110B 116B 11C2;C677;110B 116B 11C2; # (왷; 왷; 왷; 왷; 왷; ) HANGUL SYLLABLE WAEH C678;C678;110B 116C;C678;110B 116C; # (외; 외; 외; 외; 외; ) HANGUL SYLLABLE OE C679;C679;110B 116C 11A8;C679;110B 116C 11A8; # (왹; 왹; 왹; 왹; 왹; ) HANGUL SYLLABLE OEG C67A;C67A;110B 116C 11A9;C67A;110B 116C 11A9; # (왺; 왺; 왺; 왺; 왺; ) HANGUL SYLLABLE OEGG C67B;C67B;110B 116C 11AA;C67B;110B 116C 11AA; # (왻; 왻; 왻; 왻; 왻; ) HANGUL SYLLABLE OEGS C67C;C67C;110B 116C 11AB;C67C;110B 116C 11AB; # (왼; 왼; 왼; 왼; 왼; ) HANGUL SYLLABLE OEN C67D;C67D;110B 116C 11AC;C67D;110B 116C 11AC; # (왽; 왽; 왽; 왽; 왽; ) HANGUL SYLLABLE OENJ C67E;C67E;110B 116C 11AD;C67E;110B 116C 11AD; # (왾; 왾; 왾; 왾; 왾; ) HANGUL SYLLABLE OENH C67F;C67F;110B 116C 11AE;C67F;110B 116C 11AE; # (왿; 왿; 왿; 왿; 왿; ) HANGUL SYLLABLE OED C680;C680;110B 116C 11AF;C680;110B 116C 11AF; # (욀; 욀; 욀; 욀; 욀; ) HANGUL SYLLABLE OEL C681;C681;110B 116C 11B0;C681;110B 116C 11B0; # (욁; 욁; 욁; 욁; 욁; ) HANGUL SYLLABLE OELG C682;C682;110B 116C 11B1;C682;110B 116C 11B1; # (욂; 욂; 욂; 욂; 욂; ) HANGUL SYLLABLE OELM C683;C683;110B 116C 11B2;C683;110B 116C 11B2; # (욃; 욃; 욃; 욃; 욃; ) HANGUL SYLLABLE OELB C684;C684;110B 116C 11B3;C684;110B 116C 11B3; # (욄; 욄; 욄; 욄; 욄; ) HANGUL SYLLABLE OELS C685;C685;110B 116C 11B4;C685;110B 116C 11B4; # (욅; 욅; 욅; 욅; 욅; ) HANGUL SYLLABLE OELT C686;C686;110B 116C 11B5;C686;110B 116C 11B5; # (욆; 욆; 욆; 욆; 욆; ) HANGUL SYLLABLE OELP C687;C687;110B 116C 11B6;C687;110B 116C 11B6; # (욇; 욇; 욇; 욇; 욇; ) HANGUL SYLLABLE OELH C688;C688;110B 116C 11B7;C688;110B 116C 11B7; # (욈; 욈; 욈; 욈; 욈; ) HANGUL SYLLABLE OEM C689;C689;110B 116C 11B8;C689;110B 116C 11B8; # (욉; 욉; 욉; 욉; 욉; ) HANGUL SYLLABLE OEB C68A;C68A;110B 116C 11B9;C68A;110B 116C 11B9; # (욊; 욊; 욊; 욊; 욊; ) HANGUL SYLLABLE OEBS C68B;C68B;110B 116C 11BA;C68B;110B 116C 11BA; # (욋; 욋; 욋; 욋; 욋; ) HANGUL SYLLABLE OES C68C;C68C;110B 116C 11BB;C68C;110B 116C 11BB; # (욌; 욌; 욌; 욌; 욌; ) HANGUL SYLLABLE OESS C68D;C68D;110B 116C 11BC;C68D;110B 116C 11BC; # (욍; 욍; 욍; 욍; 욍; ) HANGUL SYLLABLE OENG C68E;C68E;110B 116C 11BD;C68E;110B 116C 11BD; # (욎; 욎; 욎; 욎; 욎; ) HANGUL SYLLABLE OEJ C68F;C68F;110B 116C 11BE;C68F;110B 116C 11BE; # (욏; 욏; 욏; 욏; 욏; ) HANGUL SYLLABLE OEC C690;C690;110B 116C 11BF;C690;110B 116C 11BF; # (욐; 욐; 욐; 욐; 욐; ) HANGUL SYLLABLE OEK C691;C691;110B 116C 11C0;C691;110B 116C 11C0; # (욑; 욑; 욑; 욑; 욑; ) HANGUL SYLLABLE OET C692;C692;110B 116C 11C1;C692;110B 116C 11C1; # (욒; 욒; 욒; 욒; 욒; ) HANGUL SYLLABLE OEP C693;C693;110B 116C 11C2;C693;110B 116C 11C2; # (욓; 욓; 욓; 욓; 욓; ) HANGUL SYLLABLE OEH C694;C694;110B 116D;C694;110B 116D; # (요; 요; 요; 요; 요; ) HANGUL SYLLABLE YO C695;C695;110B 116D 11A8;C695;110B 116D 11A8; # (욕; 욕; 욕; 욕; 욕; ) HANGUL SYLLABLE YOG C696;C696;110B 116D 11A9;C696;110B 116D 11A9; # (욖; 욖; 욖; 욖; 욖; ) HANGUL SYLLABLE YOGG C697;C697;110B 116D 11AA;C697;110B 116D 11AA; # (욗; 욗; 욗; 욗; 욗; ) HANGUL SYLLABLE YOGS C698;C698;110B 116D 11AB;C698;110B 116D 11AB; # (욘; 욘; 욘; 욘; 욘; ) HANGUL SYLLABLE YON C699;C699;110B 116D 11AC;C699;110B 116D 11AC; # (욙; 욙; 욙; 욙; 욙; ) HANGUL SYLLABLE YONJ C69A;C69A;110B 116D 11AD;C69A;110B 116D 11AD; # (욚; 욚; 욚; 욚; 욚; ) HANGUL SYLLABLE YONH C69B;C69B;110B 116D 11AE;C69B;110B 116D 11AE; # (욛; 욛; 욛; 욛; 욛; ) HANGUL SYLLABLE YOD C69C;C69C;110B 116D 11AF;C69C;110B 116D 11AF; # (욜; 욜; 욜; 욜; 욜; ) HANGUL SYLLABLE YOL C69D;C69D;110B 116D 11B0;C69D;110B 116D 11B0; # (욝; 욝; 욝; 욝; 욝; ) HANGUL SYLLABLE YOLG C69E;C69E;110B 116D 11B1;C69E;110B 116D 11B1; # (욞; 욞; 욞; 욞; 욞; ) HANGUL SYLLABLE YOLM C69F;C69F;110B 116D 11B2;C69F;110B 116D 11B2; # (욟; 욟; 욟; 욟; 욟; ) HANGUL SYLLABLE YOLB C6A0;C6A0;110B 116D 11B3;C6A0;110B 116D 11B3; # (욠; 욠; 욠; 욠; 욠; ) HANGUL SYLLABLE YOLS C6A1;C6A1;110B 116D 11B4;C6A1;110B 116D 11B4; # (욡; 욡; 욡; 욡; 욡; ) HANGUL SYLLABLE YOLT C6A2;C6A2;110B 116D 11B5;C6A2;110B 116D 11B5; # (욢; 욢; 욢; 욢; 욢; ) HANGUL SYLLABLE YOLP C6A3;C6A3;110B 116D 11B6;C6A3;110B 116D 11B6; # (욣; 욣; 욣; 욣; 욣; ) HANGUL SYLLABLE YOLH C6A4;C6A4;110B 116D 11B7;C6A4;110B 116D 11B7; # (욤; 욤; 욤; 욤; 욤; ) HANGUL SYLLABLE YOM C6A5;C6A5;110B 116D 11B8;C6A5;110B 116D 11B8; # (욥; 욥; 욥; 욥; 욥; ) HANGUL SYLLABLE YOB C6A6;C6A6;110B 116D 11B9;C6A6;110B 116D 11B9; # (욦; 욦; 욦; 욦; 욦; ) HANGUL SYLLABLE YOBS C6A7;C6A7;110B 116D 11BA;C6A7;110B 116D 11BA; # (욧; 욧; 욧; 욧; 욧; ) HANGUL SYLLABLE YOS C6A8;C6A8;110B 116D 11BB;C6A8;110B 116D 11BB; # (욨; 욨; 욨; 욨; 욨; ) HANGUL SYLLABLE YOSS C6A9;C6A9;110B 116D 11BC;C6A9;110B 116D 11BC; # (용; 용; 용; 용; 용; ) HANGUL SYLLABLE YONG C6AA;C6AA;110B 116D 11BD;C6AA;110B 116D 11BD; # (욪; 욪; 욪; 욪; 욪; ) HANGUL SYLLABLE YOJ C6AB;C6AB;110B 116D 11BE;C6AB;110B 116D 11BE; # (욫; 욫; 욫; 욫; 욫; ) HANGUL SYLLABLE YOC C6AC;C6AC;110B 116D 11BF;C6AC;110B 116D 11BF; # (욬; 욬; 욬; 욬; 욬; ) HANGUL SYLLABLE YOK C6AD;C6AD;110B 116D 11C0;C6AD;110B 116D 11C0; # (욭; 욭; 욭; 욭; 욭; ) HANGUL SYLLABLE YOT C6AE;C6AE;110B 116D 11C1;C6AE;110B 116D 11C1; # (욮; 욮; 욮; 욮; 욮; ) HANGUL SYLLABLE YOP C6AF;C6AF;110B 116D 11C2;C6AF;110B 116D 11C2; # (욯; 욯; 욯; 욯; 욯; ) HANGUL SYLLABLE YOH C6B0;C6B0;110B 116E;C6B0;110B 116E; # (우; 우; 우; 우; 우; ) HANGUL SYLLABLE U C6B1;C6B1;110B 116E 11A8;C6B1;110B 116E 11A8; # (욱; 욱; 욱; 욱; 욱; ) HANGUL SYLLABLE UG C6B2;C6B2;110B 116E 11A9;C6B2;110B 116E 11A9; # (욲; 욲; 욲; 욲; 욲; ) HANGUL SYLLABLE UGG C6B3;C6B3;110B 116E 11AA;C6B3;110B 116E 11AA; # (욳; 욳; 욳; 욳; 욳; ) HANGUL SYLLABLE UGS C6B4;C6B4;110B 116E 11AB;C6B4;110B 116E 11AB; # (운; 운; 운; 운; 운; ) HANGUL SYLLABLE UN C6B5;C6B5;110B 116E 11AC;C6B5;110B 116E 11AC; # (욵; 욵; 욵; 욵; 욵; ) HANGUL SYLLABLE UNJ C6B6;C6B6;110B 116E 11AD;C6B6;110B 116E 11AD; # (욶; 욶; 욶; 욶; 욶; ) HANGUL SYLLABLE UNH C6B7;C6B7;110B 116E 11AE;C6B7;110B 116E 11AE; # (욷; 욷; 욷; 욷; 욷; ) HANGUL SYLLABLE UD C6B8;C6B8;110B 116E 11AF;C6B8;110B 116E 11AF; # (울; 울; 울; 울; 울; ) HANGUL SYLLABLE UL C6B9;C6B9;110B 116E 11B0;C6B9;110B 116E 11B0; # (욹; 욹; 욹; 욹; 욹; ) HANGUL SYLLABLE ULG C6BA;C6BA;110B 116E 11B1;C6BA;110B 116E 11B1; # (욺; 욺; 욺; 욺; 욺; ) HANGUL SYLLABLE ULM C6BB;C6BB;110B 116E 11B2;C6BB;110B 116E 11B2; # (욻; 욻; 욻; 욻; 욻; ) HANGUL SYLLABLE ULB C6BC;C6BC;110B 116E 11B3;C6BC;110B 116E 11B3; # (욼; 욼; 욼; 욼; 욼; ) HANGUL SYLLABLE ULS C6BD;C6BD;110B 116E 11B4;C6BD;110B 116E 11B4; # (욽; 욽; 욽; 욽; 욽; ) HANGUL SYLLABLE ULT C6BE;C6BE;110B 116E 11B5;C6BE;110B 116E 11B5; # (욾; 욾; 욾; 욾; 욾; ) HANGUL SYLLABLE ULP C6BF;C6BF;110B 116E 11B6;C6BF;110B 116E 11B6; # (욿; 욿; 욿; 욿; 욿; ) HANGUL SYLLABLE ULH C6C0;C6C0;110B 116E 11B7;C6C0;110B 116E 11B7; # (움; 움; 움; 움; 움; ) HANGUL SYLLABLE UM C6C1;C6C1;110B 116E 11B8;C6C1;110B 116E 11B8; # (웁; 웁; 웁; 웁; 웁; ) HANGUL SYLLABLE UB C6C2;C6C2;110B 116E 11B9;C6C2;110B 116E 11B9; # (웂; 웂; 웂; 웂; 웂; ) HANGUL SYLLABLE UBS C6C3;C6C3;110B 116E 11BA;C6C3;110B 116E 11BA; # (웃; 웃; 웃; 웃; 웃; ) HANGUL SYLLABLE US C6C4;C6C4;110B 116E 11BB;C6C4;110B 116E 11BB; # (웄; 웄; 웄; 웄; 웄; ) HANGUL SYLLABLE USS C6C5;C6C5;110B 116E 11BC;C6C5;110B 116E 11BC; # (웅; 웅; 웅; 웅; 웅; ) HANGUL SYLLABLE UNG C6C6;C6C6;110B 116E 11BD;C6C6;110B 116E 11BD; # (웆; 웆; 웆; 웆; 웆; ) HANGUL SYLLABLE UJ C6C7;C6C7;110B 116E 11BE;C6C7;110B 116E 11BE; # (웇; 웇; 웇; 웇; 웇; ) HANGUL SYLLABLE UC C6C8;C6C8;110B 116E 11BF;C6C8;110B 116E 11BF; # (웈; 웈; 웈; 웈; 웈; ) HANGUL SYLLABLE UK C6C9;C6C9;110B 116E 11C0;C6C9;110B 116E 11C0; # (웉; 웉; 웉; 웉; 웉; ) HANGUL SYLLABLE UT C6CA;C6CA;110B 116E 11C1;C6CA;110B 116E 11C1; # (웊; 웊; 웊; 웊; 웊; ) HANGUL SYLLABLE UP C6CB;C6CB;110B 116E 11C2;C6CB;110B 116E 11C2; # (웋; 웋; 웋; 웋; 웋; ) HANGUL SYLLABLE UH C6CC;C6CC;110B 116F;C6CC;110B 116F; # (워; 워; 워; 워; 워; ) HANGUL SYLLABLE WEO C6CD;C6CD;110B 116F 11A8;C6CD;110B 116F 11A8; # (웍; 웍; 웍; 웍; 웍; ) HANGUL SYLLABLE WEOG C6CE;C6CE;110B 116F 11A9;C6CE;110B 116F 11A9; # (웎; 웎; 웎; 웎; 웎; ) HANGUL SYLLABLE WEOGG C6CF;C6CF;110B 116F 11AA;C6CF;110B 116F 11AA; # (웏; 웏; 웏; 웏; 웏; ) HANGUL SYLLABLE WEOGS C6D0;C6D0;110B 116F 11AB;C6D0;110B 116F 11AB; # (원; 원; 원; 원; 원; ) HANGUL SYLLABLE WEON C6D1;C6D1;110B 116F 11AC;C6D1;110B 116F 11AC; # (웑; 웑; 웑; 웑; 웑; ) HANGUL SYLLABLE WEONJ C6D2;C6D2;110B 116F 11AD;C6D2;110B 116F 11AD; # (웒; 웒; 웒; 웒; 웒; ) HANGUL SYLLABLE WEONH C6D3;C6D3;110B 116F 11AE;C6D3;110B 116F 11AE; # (웓; 웓; 웓; 웓; 웓; ) HANGUL SYLLABLE WEOD C6D4;C6D4;110B 116F 11AF;C6D4;110B 116F 11AF; # (월; 월; 월; 월; 월; ) HANGUL SYLLABLE WEOL C6D5;C6D5;110B 116F 11B0;C6D5;110B 116F 11B0; # (웕; 웕; 웕; 웕; 웕; ) HANGUL SYLLABLE WEOLG C6D6;C6D6;110B 116F 11B1;C6D6;110B 116F 11B1; # (웖; 웖; 웖; 웖; 웖; ) HANGUL SYLLABLE WEOLM C6D7;C6D7;110B 116F 11B2;C6D7;110B 116F 11B2; # (웗; 웗; 웗; 웗; 웗; ) HANGUL SYLLABLE WEOLB C6D8;C6D8;110B 116F 11B3;C6D8;110B 116F 11B3; # (웘; 웘; 웘; 웘; 웘; ) HANGUL SYLLABLE WEOLS C6D9;C6D9;110B 116F 11B4;C6D9;110B 116F 11B4; # (웙; 웙; 웙; 웙; 웙; ) HANGUL SYLLABLE WEOLT C6DA;C6DA;110B 116F 11B5;C6DA;110B 116F 11B5; # (웚; 웚; 웚; 웚; 웚; ) HANGUL SYLLABLE WEOLP C6DB;C6DB;110B 116F 11B6;C6DB;110B 116F 11B6; # (웛; 웛; 웛; 웛; 웛; ) HANGUL SYLLABLE WEOLH C6DC;C6DC;110B 116F 11B7;C6DC;110B 116F 11B7; # (웜; 웜; 웜; 웜; 웜; ) HANGUL SYLLABLE WEOM C6DD;C6DD;110B 116F 11B8;C6DD;110B 116F 11B8; # (웝; 웝; 웝; 웝; 웝; ) HANGUL SYLLABLE WEOB C6DE;C6DE;110B 116F 11B9;C6DE;110B 116F 11B9; # (웞; 웞; 웞; 웞; 웞; ) HANGUL SYLLABLE WEOBS C6DF;C6DF;110B 116F 11BA;C6DF;110B 116F 11BA; # (웟; 웟; 웟; 웟; 웟; ) HANGUL SYLLABLE WEOS C6E0;C6E0;110B 116F 11BB;C6E0;110B 116F 11BB; # (웠; 웠; 웠; 웠; 웠; ) HANGUL SYLLABLE WEOSS C6E1;C6E1;110B 116F 11BC;C6E1;110B 116F 11BC; # (웡; 웡; 웡; 웡; 웡; ) HANGUL SYLLABLE WEONG C6E2;C6E2;110B 116F 11BD;C6E2;110B 116F 11BD; # (웢; 웢; 웢; 웢; 웢; ) HANGUL SYLLABLE WEOJ C6E3;C6E3;110B 116F 11BE;C6E3;110B 116F 11BE; # (웣; 웣; 웣; 웣; 웣; ) HANGUL SYLLABLE WEOC C6E4;C6E4;110B 116F 11BF;C6E4;110B 116F 11BF; # (웤; 웤; 웤; 웤; 웤; ) HANGUL SYLLABLE WEOK C6E5;C6E5;110B 116F 11C0;C6E5;110B 116F 11C0; # (웥; 웥; 웥; 웥; 웥; ) HANGUL SYLLABLE WEOT C6E6;C6E6;110B 116F 11C1;C6E6;110B 116F 11C1; # (웦; 웦; 웦; 웦; 웦; ) HANGUL SYLLABLE WEOP C6E7;C6E7;110B 116F 11C2;C6E7;110B 116F 11C2; # (웧; 웧; 웧; 웧; 웧; ) HANGUL SYLLABLE WEOH C6E8;C6E8;110B 1170;C6E8;110B 1170; # (웨; 웨; 웨; 웨; 웨; ) HANGUL SYLLABLE WE C6E9;C6E9;110B 1170 11A8;C6E9;110B 1170 11A8; # (웩; 웩; 웩; 웩; 웩; ) HANGUL SYLLABLE WEG C6EA;C6EA;110B 1170 11A9;C6EA;110B 1170 11A9; # (웪; 웪; 웪; 웪; 웪; ) HANGUL SYLLABLE WEGG C6EB;C6EB;110B 1170 11AA;C6EB;110B 1170 11AA; # (웫; 웫; 웫; 웫; 웫; ) HANGUL SYLLABLE WEGS C6EC;C6EC;110B 1170 11AB;C6EC;110B 1170 11AB; # (웬; 웬; 웬; 웬; 웬; ) HANGUL SYLLABLE WEN C6ED;C6ED;110B 1170 11AC;C6ED;110B 1170 11AC; # (웭; 웭; 웭; 웭; 웭; ) HANGUL SYLLABLE WENJ C6EE;C6EE;110B 1170 11AD;C6EE;110B 1170 11AD; # (웮; 웮; 웮; 웮; 웮; ) HANGUL SYLLABLE WENH C6EF;C6EF;110B 1170 11AE;C6EF;110B 1170 11AE; # (웯; 웯; 웯; 웯; 웯; ) HANGUL SYLLABLE WED C6F0;C6F0;110B 1170 11AF;C6F0;110B 1170 11AF; # (웰; 웰; 웰; 웰; 웰; ) HANGUL SYLLABLE WEL C6F1;C6F1;110B 1170 11B0;C6F1;110B 1170 11B0; # (웱; 웱; 웱; 웱; 웱; ) HANGUL SYLLABLE WELG C6F2;C6F2;110B 1170 11B1;C6F2;110B 1170 11B1; # (웲; 웲; 웲; 웲; 웲; ) HANGUL SYLLABLE WELM C6F3;C6F3;110B 1170 11B2;C6F3;110B 1170 11B2; # (웳; 웳; 웳; 웳; 웳; ) HANGUL SYLLABLE WELB C6F4;C6F4;110B 1170 11B3;C6F4;110B 1170 11B3; # (웴; 웴; 웴; 웴; 웴; ) HANGUL SYLLABLE WELS C6F5;C6F5;110B 1170 11B4;C6F5;110B 1170 11B4; # (웵; 웵; 웵; 웵; 웵; ) HANGUL SYLLABLE WELT C6F6;C6F6;110B 1170 11B5;C6F6;110B 1170 11B5; # (웶; 웶; 웶; 웶; 웶; ) HANGUL SYLLABLE WELP C6F7;C6F7;110B 1170 11B6;C6F7;110B 1170 11B6; # (웷; 웷; 웷; 웷; 웷; ) HANGUL SYLLABLE WELH C6F8;C6F8;110B 1170 11B7;C6F8;110B 1170 11B7; # (웸; 웸; 웸; 웸; 웸; ) HANGUL SYLLABLE WEM C6F9;C6F9;110B 1170 11B8;C6F9;110B 1170 11B8; # (웹; 웹; 웹; 웹; 웹; ) HANGUL SYLLABLE WEB C6FA;C6FA;110B 1170 11B9;C6FA;110B 1170 11B9; # (웺; 웺; 웺; 웺; 웺; ) HANGUL SYLLABLE WEBS C6FB;C6FB;110B 1170 11BA;C6FB;110B 1170 11BA; # (웻; 웻; 웻; 웻; 웻; ) HANGUL SYLLABLE WES C6FC;C6FC;110B 1170 11BB;C6FC;110B 1170 11BB; # (웼; 웼; 웼; 웼; 웼; ) HANGUL SYLLABLE WESS C6FD;C6FD;110B 1170 11BC;C6FD;110B 1170 11BC; # (웽; 웽; 웽; 웽; 웽; ) HANGUL SYLLABLE WENG C6FE;C6FE;110B 1170 11BD;C6FE;110B 1170 11BD; # (웾; 웾; 웾; 웾; 웾; ) HANGUL SYLLABLE WEJ C6FF;C6FF;110B 1170 11BE;C6FF;110B 1170 11BE; # (웿; 웿; 웿; 웿; 웿; ) HANGUL SYLLABLE WEC C700;C700;110B 1170 11BF;C700;110B 1170 11BF; # (윀; 윀; 윀; 윀; 윀; ) HANGUL SYLLABLE WEK C701;C701;110B 1170 11C0;C701;110B 1170 11C0; # (윁; 윁; 윁; 윁; 윁; ) HANGUL SYLLABLE WET C702;C702;110B 1170 11C1;C702;110B 1170 11C1; # (윂; 윂; 윂; 윂; 윂; ) HANGUL SYLLABLE WEP C703;C703;110B 1170 11C2;C703;110B 1170 11C2; # (윃; 윃; 윃; 윃; 윃; ) HANGUL SYLLABLE WEH C704;C704;110B 1171;C704;110B 1171; # (위; 위; 위; 위; 위; ) HANGUL SYLLABLE WI C705;C705;110B 1171 11A8;C705;110B 1171 11A8; # (윅; 윅; 윅; 윅; 윅; ) HANGUL SYLLABLE WIG C706;C706;110B 1171 11A9;C706;110B 1171 11A9; # (윆; 윆; 윆; 윆; 윆; ) HANGUL SYLLABLE WIGG C707;C707;110B 1171 11AA;C707;110B 1171 11AA; # (윇; 윇; 윇; 윇; 윇; ) HANGUL SYLLABLE WIGS C708;C708;110B 1171 11AB;C708;110B 1171 11AB; # (윈; 윈; 윈; 윈; 윈; ) HANGUL SYLLABLE WIN C709;C709;110B 1171 11AC;C709;110B 1171 11AC; # (윉; 윉; 윉; 윉; 윉; ) HANGUL SYLLABLE WINJ C70A;C70A;110B 1171 11AD;C70A;110B 1171 11AD; # (윊; 윊; 윊; 윊; 윊; ) HANGUL SYLLABLE WINH C70B;C70B;110B 1171 11AE;C70B;110B 1171 11AE; # (윋; 윋; 윋; 윋; 윋; ) HANGUL SYLLABLE WID C70C;C70C;110B 1171 11AF;C70C;110B 1171 11AF; # (윌; 윌; 윌; 윌; 윌; ) HANGUL SYLLABLE WIL C70D;C70D;110B 1171 11B0;C70D;110B 1171 11B0; # (윍; 윍; 윍; 윍; 윍; ) HANGUL SYLLABLE WILG C70E;C70E;110B 1171 11B1;C70E;110B 1171 11B1; # (윎; 윎; 윎; 윎; 윎; ) HANGUL SYLLABLE WILM C70F;C70F;110B 1171 11B2;C70F;110B 1171 11B2; # (윏; 윏; 윏; 윏; 윏; ) HANGUL SYLLABLE WILB C710;C710;110B 1171 11B3;C710;110B 1171 11B3; # (윐; 윐; 윐; 윐; 윐; ) HANGUL SYLLABLE WILS C711;C711;110B 1171 11B4;C711;110B 1171 11B4; # (윑; 윑; 윑; 윑; 윑; ) HANGUL SYLLABLE WILT C712;C712;110B 1171 11B5;C712;110B 1171 11B5; # (윒; 윒; 윒; 윒; 윒; ) HANGUL SYLLABLE WILP C713;C713;110B 1171 11B6;C713;110B 1171 11B6; # (윓; 윓; 윓; 윓; 윓; ) HANGUL SYLLABLE WILH C714;C714;110B 1171 11B7;C714;110B 1171 11B7; # (윔; 윔; 윔; 윔; 윔; ) HANGUL SYLLABLE WIM C715;C715;110B 1171 11B8;C715;110B 1171 11B8; # (윕; 윕; 윕; 윕; 윕; ) HANGUL SYLLABLE WIB C716;C716;110B 1171 11B9;C716;110B 1171 11B9; # (윖; 윖; 윖; 윖; 윖; ) HANGUL SYLLABLE WIBS C717;C717;110B 1171 11BA;C717;110B 1171 11BA; # (윗; 윗; 윗; 윗; 윗; ) HANGUL SYLLABLE WIS C718;C718;110B 1171 11BB;C718;110B 1171 11BB; # (윘; 윘; 윘; 윘; 윘; ) HANGUL SYLLABLE WISS C719;C719;110B 1171 11BC;C719;110B 1171 11BC; # (윙; 윙; 윙; 윙; 윙; ) HANGUL SYLLABLE WING C71A;C71A;110B 1171 11BD;C71A;110B 1171 11BD; # (윚; 윚; 윚; 윚; 윚; ) HANGUL SYLLABLE WIJ C71B;C71B;110B 1171 11BE;C71B;110B 1171 11BE; # (윛; 윛; 윛; 윛; 윛; ) HANGUL SYLLABLE WIC C71C;C71C;110B 1171 11BF;C71C;110B 1171 11BF; # (윜; 윜; 윜; 윜; 윜; ) HANGUL SYLLABLE WIK C71D;C71D;110B 1171 11C0;C71D;110B 1171 11C0; # (윝; 윝; 윝; 윝; 윝; ) HANGUL SYLLABLE WIT C71E;C71E;110B 1171 11C1;C71E;110B 1171 11C1; # (윞; 윞; 윞; 윞; 윞; ) HANGUL SYLLABLE WIP C71F;C71F;110B 1171 11C2;C71F;110B 1171 11C2; # (윟; 윟; 윟; 윟; 윟; ) HANGUL SYLLABLE WIH C720;C720;110B 1172;C720;110B 1172; # (유; 유; 유; 유; 유; ) HANGUL SYLLABLE YU C721;C721;110B 1172 11A8;C721;110B 1172 11A8; # (육; 육; 육; 육; 육; ) HANGUL SYLLABLE YUG C722;C722;110B 1172 11A9;C722;110B 1172 11A9; # (윢; 윢; 윢; 윢; 윢; ) HANGUL SYLLABLE YUGG C723;C723;110B 1172 11AA;C723;110B 1172 11AA; # (윣; 윣; 윣; 윣; 윣; ) HANGUL SYLLABLE YUGS C724;C724;110B 1172 11AB;C724;110B 1172 11AB; # (윤; 윤; 윤; 윤; 윤; ) HANGUL SYLLABLE YUN C725;C725;110B 1172 11AC;C725;110B 1172 11AC; # (윥; 윥; 윥; 윥; 윥; ) HANGUL SYLLABLE YUNJ C726;C726;110B 1172 11AD;C726;110B 1172 11AD; # (윦; 윦; 윦; 윦; 윦; ) HANGUL SYLLABLE YUNH C727;C727;110B 1172 11AE;C727;110B 1172 11AE; # (윧; 윧; 윧; 윧; 윧; ) HANGUL SYLLABLE YUD C728;C728;110B 1172 11AF;C728;110B 1172 11AF; # (율; 율; 율; 율; 율; ) HANGUL SYLLABLE YUL C729;C729;110B 1172 11B0;C729;110B 1172 11B0; # (윩; 윩; 윩; 윩; 윩; ) HANGUL SYLLABLE YULG C72A;C72A;110B 1172 11B1;C72A;110B 1172 11B1; # (윪; 윪; 윪; 윪; 윪; ) HANGUL SYLLABLE YULM C72B;C72B;110B 1172 11B2;C72B;110B 1172 11B2; # (윫; 윫; 윫; 윫; 윫; ) HANGUL SYLLABLE YULB C72C;C72C;110B 1172 11B3;C72C;110B 1172 11B3; # (윬; 윬; 윬; 윬; 윬; ) HANGUL SYLLABLE YULS C72D;C72D;110B 1172 11B4;C72D;110B 1172 11B4; # (윭; 윭; 윭; 윭; 윭; ) HANGUL SYLLABLE YULT C72E;C72E;110B 1172 11B5;C72E;110B 1172 11B5; # (윮; 윮; 윮; 윮; 윮; ) HANGUL SYLLABLE YULP C72F;C72F;110B 1172 11B6;C72F;110B 1172 11B6; # (윯; 윯; 윯; 윯; 윯; ) HANGUL SYLLABLE YULH C730;C730;110B 1172 11B7;C730;110B 1172 11B7; # (윰; 윰; 윰; 윰; 윰; ) HANGUL SYLLABLE YUM C731;C731;110B 1172 11B8;C731;110B 1172 11B8; # (윱; 윱; 윱; 윱; 윱; ) HANGUL SYLLABLE YUB C732;C732;110B 1172 11B9;C732;110B 1172 11B9; # (윲; 윲; 윲; 윲; 윲; ) HANGUL SYLLABLE YUBS C733;C733;110B 1172 11BA;C733;110B 1172 11BA; # (윳; 윳; 윳; 윳; 윳; ) HANGUL SYLLABLE YUS C734;C734;110B 1172 11BB;C734;110B 1172 11BB; # (윴; 윴; 윴; 윴; 윴; ) HANGUL SYLLABLE YUSS C735;C735;110B 1172 11BC;C735;110B 1172 11BC; # (융; 융; 융; 융; 융; ) HANGUL SYLLABLE YUNG C736;C736;110B 1172 11BD;C736;110B 1172 11BD; # (윶; 윶; 윶; 윶; 윶; ) HANGUL SYLLABLE YUJ C737;C737;110B 1172 11BE;C737;110B 1172 11BE; # (윷; 윷; 윷; 윷; 윷; ) HANGUL SYLLABLE YUC C738;C738;110B 1172 11BF;C738;110B 1172 11BF; # (윸; 윸; 윸; 윸; 윸; ) HANGUL SYLLABLE YUK C739;C739;110B 1172 11C0;C739;110B 1172 11C0; # (윹; 윹; 윹; 윹; 윹; ) HANGUL SYLLABLE YUT C73A;C73A;110B 1172 11C1;C73A;110B 1172 11C1; # (윺; 윺; 윺; 윺; 윺; ) HANGUL SYLLABLE YUP C73B;C73B;110B 1172 11C2;C73B;110B 1172 11C2; # (윻; 윻; 윻; 윻; 윻; ) HANGUL SYLLABLE YUH C73C;C73C;110B 1173;C73C;110B 1173; # (으; 으; 으; 으; 으; ) HANGUL SYLLABLE EU C73D;C73D;110B 1173 11A8;C73D;110B 1173 11A8; # (윽; 윽; 윽; 윽; 윽; ) HANGUL SYLLABLE EUG C73E;C73E;110B 1173 11A9;C73E;110B 1173 11A9; # (윾; 윾; 윾; 윾; 윾; ) HANGUL SYLLABLE EUGG C73F;C73F;110B 1173 11AA;C73F;110B 1173 11AA; # (윿; 윿; 윿; 윿; 윿; ) HANGUL SYLLABLE EUGS C740;C740;110B 1173 11AB;C740;110B 1173 11AB; # (은; 은; 은; 은; 은; ) HANGUL SYLLABLE EUN C741;C741;110B 1173 11AC;C741;110B 1173 11AC; # (읁; 읁; 읁; 읁; 읁; ) HANGUL SYLLABLE EUNJ C742;C742;110B 1173 11AD;C742;110B 1173 11AD; # (읂; 읂; 읂; 읂; 읂; ) HANGUL SYLLABLE EUNH C743;C743;110B 1173 11AE;C743;110B 1173 11AE; # (읃; 읃; 읃; 읃; 읃; ) HANGUL SYLLABLE EUD C744;C744;110B 1173 11AF;C744;110B 1173 11AF; # (을; 을; 을; 을; 을; ) HANGUL SYLLABLE EUL C745;C745;110B 1173 11B0;C745;110B 1173 11B0; # (읅; 읅; 읅; 읅; 읅; ) HANGUL SYLLABLE EULG C746;C746;110B 1173 11B1;C746;110B 1173 11B1; # (읆; 읆; 읆; 읆; 읆; ) HANGUL SYLLABLE EULM C747;C747;110B 1173 11B2;C747;110B 1173 11B2; # (읇; 읇; 읇; 읇; 읇; ) HANGUL SYLLABLE EULB C748;C748;110B 1173 11B3;C748;110B 1173 11B3; # (읈; 읈; 읈; 읈; 읈; ) HANGUL SYLLABLE EULS C749;C749;110B 1173 11B4;C749;110B 1173 11B4; # (읉; 읉; 읉; 읉; 읉; ) HANGUL SYLLABLE EULT C74A;C74A;110B 1173 11B5;C74A;110B 1173 11B5; # (읊; 읊; 읊; 읊; 읊; ) HANGUL SYLLABLE EULP C74B;C74B;110B 1173 11B6;C74B;110B 1173 11B6; # (읋; 읋; 읋; 읋; 읋; ) HANGUL SYLLABLE EULH C74C;C74C;110B 1173 11B7;C74C;110B 1173 11B7; # (음; 음; 음; 음; 음; ) HANGUL SYLLABLE EUM C74D;C74D;110B 1173 11B8;C74D;110B 1173 11B8; # (읍; 읍; 읍; 읍; 읍; ) HANGUL SYLLABLE EUB C74E;C74E;110B 1173 11B9;C74E;110B 1173 11B9; # (읎; 읎; 읎; 읎; 읎; ) HANGUL SYLLABLE EUBS C74F;C74F;110B 1173 11BA;C74F;110B 1173 11BA; # (읏; 읏; 읏; 읏; 읏; ) HANGUL SYLLABLE EUS C750;C750;110B 1173 11BB;C750;110B 1173 11BB; # (읐; 읐; 읐; 읐; 읐; ) HANGUL SYLLABLE EUSS C751;C751;110B 1173 11BC;C751;110B 1173 11BC; # (응; 응; 응; 응; 응; ) HANGUL SYLLABLE EUNG C752;C752;110B 1173 11BD;C752;110B 1173 11BD; # (읒; 읒; 읒; 읒; 읒; ) HANGUL SYLLABLE EUJ C753;C753;110B 1173 11BE;C753;110B 1173 11BE; # (읓; 읓; 읓; 읓; 읓; ) HANGUL SYLLABLE EUC C754;C754;110B 1173 11BF;C754;110B 1173 11BF; # (읔; 읔; 읔; 읔; 읔; ) HANGUL SYLLABLE EUK C755;C755;110B 1173 11C0;C755;110B 1173 11C0; # (읕; 읕; 읕; 읕; 읕; ) HANGUL SYLLABLE EUT C756;C756;110B 1173 11C1;C756;110B 1173 11C1; # (읖; 읖; 읖; 읖; 읖; ) HANGUL SYLLABLE EUP C757;C757;110B 1173 11C2;C757;110B 1173 11C2; # (읗; 읗; 읗; 읗; 읗; ) HANGUL SYLLABLE EUH C758;C758;110B 1174;C758;110B 1174; # (의; 의; 의; 의; 의; ) HANGUL SYLLABLE YI C759;C759;110B 1174 11A8;C759;110B 1174 11A8; # (읙; 읙; 읙; 읙; 읙; ) HANGUL SYLLABLE YIG C75A;C75A;110B 1174 11A9;C75A;110B 1174 11A9; # (읚; 읚; 읚; 읚; 읚; ) HANGUL SYLLABLE YIGG C75B;C75B;110B 1174 11AA;C75B;110B 1174 11AA; # (읛; 읛; 읛; 읛; 읛; ) HANGUL SYLLABLE YIGS C75C;C75C;110B 1174 11AB;C75C;110B 1174 11AB; # (읜; 읜; 읜; 읜; 읜; ) HANGUL SYLLABLE YIN C75D;C75D;110B 1174 11AC;C75D;110B 1174 11AC; # (읝; 읝; 읝; 읝; 읝; ) HANGUL SYLLABLE YINJ C75E;C75E;110B 1174 11AD;C75E;110B 1174 11AD; # (읞; 읞; 읞; 읞; 읞; ) HANGUL SYLLABLE YINH C75F;C75F;110B 1174 11AE;C75F;110B 1174 11AE; # (읟; 읟; 읟; 읟; 읟; ) HANGUL SYLLABLE YID C760;C760;110B 1174 11AF;C760;110B 1174 11AF; # (읠; 읠; 읠; 읠; 읠; ) HANGUL SYLLABLE YIL C761;C761;110B 1174 11B0;C761;110B 1174 11B0; # (읡; 읡; 읡; 읡; 읡; ) HANGUL SYLLABLE YILG C762;C762;110B 1174 11B1;C762;110B 1174 11B1; # (읢; 읢; 읢; 읢; 읢; ) HANGUL SYLLABLE YILM C763;C763;110B 1174 11B2;C763;110B 1174 11B2; # (읣; 읣; 읣; 읣; 읣; ) HANGUL SYLLABLE YILB C764;C764;110B 1174 11B3;C764;110B 1174 11B3; # (읤; 읤; 읤; 읤; 읤; ) HANGUL SYLLABLE YILS C765;C765;110B 1174 11B4;C765;110B 1174 11B4; # (읥; 읥; 읥; 읥; 읥; ) HANGUL SYLLABLE YILT C766;C766;110B 1174 11B5;C766;110B 1174 11B5; # (읦; 읦; 읦; 읦; 읦; ) HANGUL SYLLABLE YILP C767;C767;110B 1174 11B6;C767;110B 1174 11B6; # (읧; 읧; 읧; 읧; 읧; ) HANGUL SYLLABLE YILH C768;C768;110B 1174 11B7;C768;110B 1174 11B7; # (읨; 읨; 읨; 읨; 읨; ) HANGUL SYLLABLE YIM C769;C769;110B 1174 11B8;C769;110B 1174 11B8; # (읩; 읩; 읩; 읩; 읩; ) HANGUL SYLLABLE YIB C76A;C76A;110B 1174 11B9;C76A;110B 1174 11B9; # (읪; 읪; 읪; 읪; 읪; ) HANGUL SYLLABLE YIBS C76B;C76B;110B 1174 11BA;C76B;110B 1174 11BA; # (읫; 읫; 읫; 읫; 읫; ) HANGUL SYLLABLE YIS C76C;C76C;110B 1174 11BB;C76C;110B 1174 11BB; # (읬; 읬; 읬; 읬; 읬; ) HANGUL SYLLABLE YISS C76D;C76D;110B 1174 11BC;C76D;110B 1174 11BC; # (읭; 읭; 읭; 읭; 읭; ) HANGUL SYLLABLE YING C76E;C76E;110B 1174 11BD;C76E;110B 1174 11BD; # (읮; 읮; 읮; 읮; 읮; ) HANGUL SYLLABLE YIJ C76F;C76F;110B 1174 11BE;C76F;110B 1174 11BE; # (읯; 읯; 읯; 읯; 읯; ) HANGUL SYLLABLE YIC C770;C770;110B 1174 11BF;C770;110B 1174 11BF; # (읰; 읰; 읰; 읰; 읰; ) HANGUL SYLLABLE YIK C771;C771;110B 1174 11C0;C771;110B 1174 11C0; # (읱; 읱; 읱; 읱; 읱; ) HANGUL SYLLABLE YIT C772;C772;110B 1174 11C1;C772;110B 1174 11C1; # (읲; 읲; 읲; 읲; 읲; ) HANGUL SYLLABLE YIP C773;C773;110B 1174 11C2;C773;110B 1174 11C2; # (읳; 읳; 읳; 읳; 읳; ) HANGUL SYLLABLE YIH C774;C774;110B 1175;C774;110B 1175; # (이; 이; 이; 이; 이; ) HANGUL SYLLABLE I C775;C775;110B 1175 11A8;C775;110B 1175 11A8; # (익; 익; 익; 익; 익; ) HANGUL SYLLABLE IG C776;C776;110B 1175 11A9;C776;110B 1175 11A9; # (읶; 읶; 읶; 읶; 읶; ) HANGUL SYLLABLE IGG C777;C777;110B 1175 11AA;C777;110B 1175 11AA; # (읷; 읷; 읷; 읷; 읷; ) HANGUL SYLLABLE IGS C778;C778;110B 1175 11AB;C778;110B 1175 11AB; # (인; 인; 인; 인; 인; ) HANGUL SYLLABLE IN C779;C779;110B 1175 11AC;C779;110B 1175 11AC; # (읹; 읹; 읹; 읹; 읹; ) HANGUL SYLLABLE INJ C77A;C77A;110B 1175 11AD;C77A;110B 1175 11AD; # (읺; 읺; 읺; 읺; 읺; ) HANGUL SYLLABLE INH C77B;C77B;110B 1175 11AE;C77B;110B 1175 11AE; # (읻; 읻; 읻; 읻; 읻; ) HANGUL SYLLABLE ID C77C;C77C;110B 1175 11AF;C77C;110B 1175 11AF; # (일; 일; 일; 일; 일; ) HANGUL SYLLABLE IL C77D;C77D;110B 1175 11B0;C77D;110B 1175 11B0; # (읽; 읽; 읽; 읽; 읽; ) HANGUL SYLLABLE ILG C77E;C77E;110B 1175 11B1;C77E;110B 1175 11B1; # (읾; 읾; 읾; 읾; 읾; ) HANGUL SYLLABLE ILM C77F;C77F;110B 1175 11B2;C77F;110B 1175 11B2; # (읿; 읿; 읿; 읿; 읿; ) HANGUL SYLLABLE ILB C780;C780;110B 1175 11B3;C780;110B 1175 11B3; # (잀; 잀; 잀; 잀; 잀; ) HANGUL SYLLABLE ILS C781;C781;110B 1175 11B4;C781;110B 1175 11B4; # (잁; 잁; 잁; 잁; 잁; ) HANGUL SYLLABLE ILT C782;C782;110B 1175 11B5;C782;110B 1175 11B5; # (잂; 잂; 잂; 잂; 잂; ) HANGUL SYLLABLE ILP C783;C783;110B 1175 11B6;C783;110B 1175 11B6; # (잃; 잃; 잃; 잃; 잃; ) HANGUL SYLLABLE ILH C784;C784;110B 1175 11B7;C784;110B 1175 11B7; # (임; 임; 임; 임; 임; ) HANGUL SYLLABLE IM C785;C785;110B 1175 11B8;C785;110B 1175 11B8; # (입; 입; 입; 입; 입; ) HANGUL SYLLABLE IB C786;C786;110B 1175 11B9;C786;110B 1175 11B9; # (잆; 잆; 잆; 잆; 잆; ) HANGUL SYLLABLE IBS C787;C787;110B 1175 11BA;C787;110B 1175 11BA; # (잇; 잇; 잇; 잇; 잇; ) HANGUL SYLLABLE IS C788;C788;110B 1175 11BB;C788;110B 1175 11BB; # (있; 있; 있; 있; 있; ) HANGUL SYLLABLE ISS C789;C789;110B 1175 11BC;C789;110B 1175 11BC; # (잉; 잉; 잉; 잉; 잉; ) HANGUL SYLLABLE ING C78A;C78A;110B 1175 11BD;C78A;110B 1175 11BD; # (잊; 잊; 잊; 잊; 잊; ) HANGUL SYLLABLE IJ C78B;C78B;110B 1175 11BE;C78B;110B 1175 11BE; # (잋; 잋; 잋; 잋; 잋; ) HANGUL SYLLABLE IC C78C;C78C;110B 1175 11BF;C78C;110B 1175 11BF; # (잌; 잌; 잌; 잌; 잌; ) HANGUL SYLLABLE IK C78D;C78D;110B 1175 11C0;C78D;110B 1175 11C0; # (잍; 잍; 잍; 잍; 잍; ) HANGUL SYLLABLE IT C78E;C78E;110B 1175 11C1;C78E;110B 1175 11C1; # (잎; 잎; 잎; 잎; 잎; ) HANGUL SYLLABLE IP C78F;C78F;110B 1175 11C2;C78F;110B 1175 11C2; # (잏; 잏; 잏; 잏; 잏; ) HANGUL SYLLABLE IH C790;C790;110C 1161;C790;110C 1161; # (자; 자; 자; 자; 자; ) HANGUL SYLLABLE JA C791;C791;110C 1161 11A8;C791;110C 1161 11A8; # (작; 작; 작; 작; 작; ) HANGUL SYLLABLE JAG C792;C792;110C 1161 11A9;C792;110C 1161 11A9; # (잒; 잒; 잒; 잒; 잒; ) HANGUL SYLLABLE JAGG C793;C793;110C 1161 11AA;C793;110C 1161 11AA; # (잓; 잓; 잓; 잓; 잓; ) HANGUL SYLLABLE JAGS C794;C794;110C 1161 11AB;C794;110C 1161 11AB; # (잔; 잔; 잔; 잔; 잔; ) HANGUL SYLLABLE JAN C795;C795;110C 1161 11AC;C795;110C 1161 11AC; # (잕; 잕; 잕; 잕; 잕; ) HANGUL SYLLABLE JANJ C796;C796;110C 1161 11AD;C796;110C 1161 11AD; # (잖; 잖; 잖; 잖; 잖; ) HANGUL SYLLABLE JANH C797;C797;110C 1161 11AE;C797;110C 1161 11AE; # (잗; 잗; 잗; 잗; 잗; ) HANGUL SYLLABLE JAD C798;C798;110C 1161 11AF;C798;110C 1161 11AF; # (잘; 잘; 잘; 잘; 잘; ) HANGUL SYLLABLE JAL C799;C799;110C 1161 11B0;C799;110C 1161 11B0; # (잙; 잙; 잙; 잙; 잙; ) HANGUL SYLLABLE JALG C79A;C79A;110C 1161 11B1;C79A;110C 1161 11B1; # (잚; 잚; 잚; 잚; 잚; ) HANGUL SYLLABLE JALM C79B;C79B;110C 1161 11B2;C79B;110C 1161 11B2; # (잛; 잛; 잛; 잛; 잛; ) HANGUL SYLLABLE JALB C79C;C79C;110C 1161 11B3;C79C;110C 1161 11B3; # (잜; 잜; 잜; 잜; 잜; ) HANGUL SYLLABLE JALS C79D;C79D;110C 1161 11B4;C79D;110C 1161 11B4; # (잝; 잝; 잝; 잝; 잝; ) HANGUL SYLLABLE JALT C79E;C79E;110C 1161 11B5;C79E;110C 1161 11B5; # (잞; 잞; 잞; 잞; 잞; ) HANGUL SYLLABLE JALP C79F;C79F;110C 1161 11B6;C79F;110C 1161 11B6; # (잟; 잟; 잟; 잟; 잟; ) HANGUL SYLLABLE JALH C7A0;C7A0;110C 1161 11B7;C7A0;110C 1161 11B7; # (잠; 잠; 잠; 잠; 잠; ) HANGUL SYLLABLE JAM C7A1;C7A1;110C 1161 11B8;C7A1;110C 1161 11B8; # (잡; 잡; 잡; 잡; 잡; ) HANGUL SYLLABLE JAB C7A2;C7A2;110C 1161 11B9;C7A2;110C 1161 11B9; # (잢; 잢; 잢; 잢; 잢; ) HANGUL SYLLABLE JABS C7A3;C7A3;110C 1161 11BA;C7A3;110C 1161 11BA; # (잣; 잣; 잣; 잣; 잣; ) HANGUL SYLLABLE JAS C7A4;C7A4;110C 1161 11BB;C7A4;110C 1161 11BB; # (잤; 잤; 잤; 잤; 잤; ) HANGUL SYLLABLE JASS C7A5;C7A5;110C 1161 11BC;C7A5;110C 1161 11BC; # (장; 장; 장; 장; 장; ) HANGUL SYLLABLE JANG C7A6;C7A6;110C 1161 11BD;C7A6;110C 1161 11BD; # (잦; 잦; 잦; 잦; 잦; ) HANGUL SYLLABLE JAJ C7A7;C7A7;110C 1161 11BE;C7A7;110C 1161 11BE; # (잧; 잧; 잧; 잧; 잧; ) HANGUL SYLLABLE JAC C7A8;C7A8;110C 1161 11BF;C7A8;110C 1161 11BF; # (잨; 잨; 잨; 잨; 잨; ) HANGUL SYLLABLE JAK C7A9;C7A9;110C 1161 11C0;C7A9;110C 1161 11C0; # (잩; 잩; 잩; 잩; 잩; ) HANGUL SYLLABLE JAT C7AA;C7AA;110C 1161 11C1;C7AA;110C 1161 11C1; # (잪; 잪; 잪; 잪; 잪; ) HANGUL SYLLABLE JAP C7AB;C7AB;110C 1161 11C2;C7AB;110C 1161 11C2; # (잫; 잫; 잫; 잫; 잫; ) HANGUL SYLLABLE JAH C7AC;C7AC;110C 1162;C7AC;110C 1162; # (재; 재; 재; 재; 재; ) HANGUL SYLLABLE JAE C7AD;C7AD;110C 1162 11A8;C7AD;110C 1162 11A8; # (잭; 잭; 잭; 잭; 잭; ) HANGUL SYLLABLE JAEG C7AE;C7AE;110C 1162 11A9;C7AE;110C 1162 11A9; # (잮; 잮; 잮; 잮; 잮; ) HANGUL SYLLABLE JAEGG C7AF;C7AF;110C 1162 11AA;C7AF;110C 1162 11AA; # (잯; 잯; 잯; 잯; 잯; ) HANGUL SYLLABLE JAEGS C7B0;C7B0;110C 1162 11AB;C7B0;110C 1162 11AB; # (잰; 잰; 잰; 잰; 잰; ) HANGUL SYLLABLE JAEN C7B1;C7B1;110C 1162 11AC;C7B1;110C 1162 11AC; # (잱; 잱; 잱; 잱; 잱; ) HANGUL SYLLABLE JAENJ C7B2;C7B2;110C 1162 11AD;C7B2;110C 1162 11AD; # (잲; 잲; 잲; 잲; 잲; ) HANGUL SYLLABLE JAENH C7B3;C7B3;110C 1162 11AE;C7B3;110C 1162 11AE; # (잳; 잳; 잳; 잳; 잳; ) HANGUL SYLLABLE JAED C7B4;C7B4;110C 1162 11AF;C7B4;110C 1162 11AF; # (잴; 잴; 잴; 잴; 잴; ) HANGUL SYLLABLE JAEL C7B5;C7B5;110C 1162 11B0;C7B5;110C 1162 11B0; # (잵; 잵; 잵; 잵; 잵; ) HANGUL SYLLABLE JAELG C7B6;C7B6;110C 1162 11B1;C7B6;110C 1162 11B1; # (잶; 잶; 잶; 잶; 잶; ) HANGUL SYLLABLE JAELM C7B7;C7B7;110C 1162 11B2;C7B7;110C 1162 11B2; # (잷; 잷; 잷; 잷; 잷; ) HANGUL SYLLABLE JAELB C7B8;C7B8;110C 1162 11B3;C7B8;110C 1162 11B3; # (잸; 잸; 잸; 잸; 잸; ) HANGUL SYLLABLE JAELS C7B9;C7B9;110C 1162 11B4;C7B9;110C 1162 11B4; # (잹; 잹; 잹; 잹; 잹; ) HANGUL SYLLABLE JAELT C7BA;C7BA;110C 1162 11B5;C7BA;110C 1162 11B5; # (잺; 잺; 잺; 잺; 잺; ) HANGUL SYLLABLE JAELP C7BB;C7BB;110C 1162 11B6;C7BB;110C 1162 11B6; # (잻; 잻; 잻; 잻; 잻; ) HANGUL SYLLABLE JAELH C7BC;C7BC;110C 1162 11B7;C7BC;110C 1162 11B7; # (잼; 잼; 잼; 잼; 잼; ) HANGUL SYLLABLE JAEM C7BD;C7BD;110C 1162 11B8;C7BD;110C 1162 11B8; # (잽; 잽; 잽; 잽; 잽; ) HANGUL SYLLABLE JAEB C7BE;C7BE;110C 1162 11B9;C7BE;110C 1162 11B9; # (잾; 잾; 잾; 잾; 잾; ) HANGUL SYLLABLE JAEBS C7BF;C7BF;110C 1162 11BA;C7BF;110C 1162 11BA; # (잿; 잿; 잿; 잿; 잿; ) HANGUL SYLLABLE JAES C7C0;C7C0;110C 1162 11BB;C7C0;110C 1162 11BB; # (쟀; 쟀; 쟀; 쟀; 쟀; ) HANGUL SYLLABLE JAESS C7C1;C7C1;110C 1162 11BC;C7C1;110C 1162 11BC; # (쟁; 쟁; 쟁; 쟁; 쟁; ) HANGUL SYLLABLE JAENG C7C2;C7C2;110C 1162 11BD;C7C2;110C 1162 11BD; # (쟂; 쟂; 쟂; 쟂; 쟂; ) HANGUL SYLLABLE JAEJ C7C3;C7C3;110C 1162 11BE;C7C3;110C 1162 11BE; # (쟃; 쟃; 쟃; 쟃; 쟃; ) HANGUL SYLLABLE JAEC C7C4;C7C4;110C 1162 11BF;C7C4;110C 1162 11BF; # (쟄; 쟄; 쟄; 쟄; 쟄; ) HANGUL SYLLABLE JAEK C7C5;C7C5;110C 1162 11C0;C7C5;110C 1162 11C0; # (쟅; 쟅; 쟅; 쟅; 쟅; ) HANGUL SYLLABLE JAET C7C6;C7C6;110C 1162 11C1;C7C6;110C 1162 11C1; # (쟆; 쟆; 쟆; 쟆; 쟆; ) HANGUL SYLLABLE JAEP C7C7;C7C7;110C 1162 11C2;C7C7;110C 1162 11C2; # (쟇; 쟇; 쟇; 쟇; 쟇; ) HANGUL SYLLABLE JAEH C7C8;C7C8;110C 1163;C7C8;110C 1163; # (쟈; 쟈; 쟈; 쟈; 쟈; ) HANGUL SYLLABLE JYA C7C9;C7C9;110C 1163 11A8;C7C9;110C 1163 11A8; # (쟉; 쟉; 쟉; 쟉; 쟉; ) HANGUL SYLLABLE JYAG C7CA;C7CA;110C 1163 11A9;C7CA;110C 1163 11A9; # (쟊; 쟊; 쟊; 쟊; 쟊; ) HANGUL SYLLABLE JYAGG C7CB;C7CB;110C 1163 11AA;C7CB;110C 1163 11AA; # (쟋; 쟋; 쟋; 쟋; 쟋; ) HANGUL SYLLABLE JYAGS C7CC;C7CC;110C 1163 11AB;C7CC;110C 1163 11AB; # (쟌; 쟌; 쟌; 쟌; 쟌; ) HANGUL SYLLABLE JYAN C7CD;C7CD;110C 1163 11AC;C7CD;110C 1163 11AC; # (쟍; 쟍; 쟍; 쟍; 쟍; ) HANGUL SYLLABLE JYANJ C7CE;C7CE;110C 1163 11AD;C7CE;110C 1163 11AD; # (쟎; 쟎; 쟎; 쟎; 쟎; ) HANGUL SYLLABLE JYANH C7CF;C7CF;110C 1163 11AE;C7CF;110C 1163 11AE; # (쟏; 쟏; 쟏; 쟏; 쟏; ) HANGUL SYLLABLE JYAD C7D0;C7D0;110C 1163 11AF;C7D0;110C 1163 11AF; # (쟐; 쟐; 쟐; 쟐; 쟐; ) HANGUL SYLLABLE JYAL C7D1;C7D1;110C 1163 11B0;C7D1;110C 1163 11B0; # (쟑; 쟑; 쟑; 쟑; 쟑; ) HANGUL SYLLABLE JYALG C7D2;C7D2;110C 1163 11B1;C7D2;110C 1163 11B1; # (쟒; 쟒; 쟒; 쟒; 쟒; ) HANGUL SYLLABLE JYALM C7D3;C7D3;110C 1163 11B2;C7D3;110C 1163 11B2; # (쟓; 쟓; 쟓; 쟓; 쟓; ) HANGUL SYLLABLE JYALB C7D4;C7D4;110C 1163 11B3;C7D4;110C 1163 11B3; # (쟔; 쟔; 쟔; 쟔; 쟔; ) HANGUL SYLLABLE JYALS C7D5;C7D5;110C 1163 11B4;C7D5;110C 1163 11B4; # (쟕; 쟕; 쟕; 쟕; 쟕; ) HANGUL SYLLABLE JYALT C7D6;C7D6;110C 1163 11B5;C7D6;110C 1163 11B5; # (쟖; 쟖; 쟖; 쟖; 쟖; ) HANGUL SYLLABLE JYALP C7D7;C7D7;110C 1163 11B6;C7D7;110C 1163 11B6; # (쟗; 쟗; 쟗; 쟗; 쟗; ) HANGUL SYLLABLE JYALH C7D8;C7D8;110C 1163 11B7;C7D8;110C 1163 11B7; # (쟘; 쟘; 쟘; 쟘; 쟘; ) HANGUL SYLLABLE JYAM C7D9;C7D9;110C 1163 11B8;C7D9;110C 1163 11B8; # (쟙; 쟙; 쟙; 쟙; 쟙; ) HANGUL SYLLABLE JYAB C7DA;C7DA;110C 1163 11B9;C7DA;110C 1163 11B9; # (쟚; 쟚; 쟚; 쟚; 쟚; ) HANGUL SYLLABLE JYABS C7DB;C7DB;110C 1163 11BA;C7DB;110C 1163 11BA; # (쟛; 쟛; 쟛; 쟛; 쟛; ) HANGUL SYLLABLE JYAS C7DC;C7DC;110C 1163 11BB;C7DC;110C 1163 11BB; # (쟜; 쟜; 쟜; 쟜; 쟜; ) HANGUL SYLLABLE JYASS C7DD;C7DD;110C 1163 11BC;C7DD;110C 1163 11BC; # (쟝; 쟝; 쟝; 쟝; 쟝; ) HANGUL SYLLABLE JYANG C7DE;C7DE;110C 1163 11BD;C7DE;110C 1163 11BD; # (쟞; 쟞; 쟞; 쟞; 쟞; ) HANGUL SYLLABLE JYAJ C7DF;C7DF;110C 1163 11BE;C7DF;110C 1163 11BE; # (쟟; 쟟; 쟟; 쟟; 쟟; ) HANGUL SYLLABLE JYAC C7E0;C7E0;110C 1163 11BF;C7E0;110C 1163 11BF; # (쟠; 쟠; 쟠; 쟠; 쟠; ) HANGUL SYLLABLE JYAK C7E1;C7E1;110C 1163 11C0;C7E1;110C 1163 11C0; # (쟡; 쟡; 쟡; 쟡; 쟡; ) HANGUL SYLLABLE JYAT C7E2;C7E2;110C 1163 11C1;C7E2;110C 1163 11C1; # (쟢; 쟢; 쟢; 쟢; 쟢; ) HANGUL SYLLABLE JYAP C7E3;C7E3;110C 1163 11C2;C7E3;110C 1163 11C2; # (쟣; 쟣; 쟣; 쟣; 쟣; ) HANGUL SYLLABLE JYAH C7E4;C7E4;110C 1164;C7E4;110C 1164; # (쟤; 쟤; 쟤; 쟤; 쟤; ) HANGUL SYLLABLE JYAE C7E5;C7E5;110C 1164 11A8;C7E5;110C 1164 11A8; # (쟥; 쟥; 쟥; 쟥; 쟥; ) HANGUL SYLLABLE JYAEG C7E6;C7E6;110C 1164 11A9;C7E6;110C 1164 11A9; # (쟦; 쟦; 쟦; 쟦; 쟦; ) HANGUL SYLLABLE JYAEGG C7E7;C7E7;110C 1164 11AA;C7E7;110C 1164 11AA; # (쟧; 쟧; 쟧; 쟧; 쟧; ) HANGUL SYLLABLE JYAEGS C7E8;C7E8;110C 1164 11AB;C7E8;110C 1164 11AB; # (쟨; 쟨; 쟨; 쟨; 쟨; ) HANGUL SYLLABLE JYAEN C7E9;C7E9;110C 1164 11AC;C7E9;110C 1164 11AC; # (쟩; 쟩; 쟩; 쟩; 쟩; ) HANGUL SYLLABLE JYAENJ C7EA;C7EA;110C 1164 11AD;C7EA;110C 1164 11AD; # (쟪; 쟪; 쟪; 쟪; 쟪; ) HANGUL SYLLABLE JYAENH C7EB;C7EB;110C 1164 11AE;C7EB;110C 1164 11AE; # (쟫; 쟫; 쟫; 쟫; 쟫; ) HANGUL SYLLABLE JYAED C7EC;C7EC;110C 1164 11AF;C7EC;110C 1164 11AF; # (쟬; 쟬; 쟬; 쟬; 쟬; ) HANGUL SYLLABLE JYAEL C7ED;C7ED;110C 1164 11B0;C7ED;110C 1164 11B0; # (쟭; 쟭; 쟭; 쟭; 쟭; ) HANGUL SYLLABLE JYAELG C7EE;C7EE;110C 1164 11B1;C7EE;110C 1164 11B1; # (쟮; 쟮; 쟮; 쟮; 쟮; ) HANGUL SYLLABLE JYAELM C7EF;C7EF;110C 1164 11B2;C7EF;110C 1164 11B2; # (쟯; 쟯; 쟯; 쟯; 쟯; ) HANGUL SYLLABLE JYAELB C7F0;C7F0;110C 1164 11B3;C7F0;110C 1164 11B3; # (쟰; 쟰; 쟰; 쟰; 쟰; ) HANGUL SYLLABLE JYAELS C7F1;C7F1;110C 1164 11B4;C7F1;110C 1164 11B4; # (쟱; 쟱; 쟱; 쟱; 쟱; ) HANGUL SYLLABLE JYAELT C7F2;C7F2;110C 1164 11B5;C7F2;110C 1164 11B5; # (쟲; 쟲; 쟲; 쟲; 쟲; ) HANGUL SYLLABLE JYAELP C7F3;C7F3;110C 1164 11B6;C7F3;110C 1164 11B6; # (쟳; 쟳; 쟳; 쟳; 쟳; ) HANGUL SYLLABLE JYAELH C7F4;C7F4;110C 1164 11B7;C7F4;110C 1164 11B7; # (쟴; 쟴; 쟴; 쟴; 쟴; ) HANGUL SYLLABLE JYAEM C7F5;C7F5;110C 1164 11B8;C7F5;110C 1164 11B8; # (쟵; 쟵; 쟵; 쟵; 쟵; ) HANGUL SYLLABLE JYAEB C7F6;C7F6;110C 1164 11B9;C7F6;110C 1164 11B9; # (쟶; 쟶; 쟶; 쟶; 쟶; ) HANGUL SYLLABLE JYAEBS C7F7;C7F7;110C 1164 11BA;C7F7;110C 1164 11BA; # (쟷; 쟷; 쟷; 쟷; 쟷; ) HANGUL SYLLABLE JYAES C7F8;C7F8;110C 1164 11BB;C7F8;110C 1164 11BB; # (쟸; 쟸; 쟸; 쟸; 쟸; ) HANGUL SYLLABLE JYAESS C7F9;C7F9;110C 1164 11BC;C7F9;110C 1164 11BC; # (쟹; 쟹; 쟹; 쟹; 쟹; ) HANGUL SYLLABLE JYAENG C7FA;C7FA;110C 1164 11BD;C7FA;110C 1164 11BD; # (쟺; 쟺; 쟺; 쟺; 쟺; ) HANGUL SYLLABLE JYAEJ C7FB;C7FB;110C 1164 11BE;C7FB;110C 1164 11BE; # (쟻; 쟻; 쟻; 쟻; 쟻; ) HANGUL SYLLABLE JYAEC C7FC;C7FC;110C 1164 11BF;C7FC;110C 1164 11BF; # (쟼; 쟼; 쟼; 쟼; 쟼; ) HANGUL SYLLABLE JYAEK C7FD;C7FD;110C 1164 11C0;C7FD;110C 1164 11C0; # (쟽; 쟽; 쟽; 쟽; 쟽; ) HANGUL SYLLABLE JYAET C7FE;C7FE;110C 1164 11C1;C7FE;110C 1164 11C1; # (쟾; 쟾; 쟾; 쟾; 쟾; ) HANGUL SYLLABLE JYAEP C7FF;C7FF;110C 1164 11C2;C7FF;110C 1164 11C2; # (쟿; 쟿; 쟿; 쟿; 쟿; ) HANGUL SYLLABLE JYAEH C800;C800;110C 1165;C800;110C 1165; # (저; 저; 저; 저; 저; ) HANGUL SYLLABLE JEO C801;C801;110C 1165 11A8;C801;110C 1165 11A8; # (적; 적; 적; 적; 적; ) HANGUL SYLLABLE JEOG C802;C802;110C 1165 11A9;C802;110C 1165 11A9; # (젂; 젂; 젂; 젂; 젂; ) HANGUL SYLLABLE JEOGG C803;C803;110C 1165 11AA;C803;110C 1165 11AA; # (젃; 젃; 젃; 젃; 젃; ) HANGUL SYLLABLE JEOGS C804;C804;110C 1165 11AB;C804;110C 1165 11AB; # (전; 전; 전; 전; 전; ) HANGUL SYLLABLE JEON C805;C805;110C 1165 11AC;C805;110C 1165 11AC; # (젅; 젅; 젅; 젅; 젅; ) HANGUL SYLLABLE JEONJ C806;C806;110C 1165 11AD;C806;110C 1165 11AD; # (젆; 젆; 젆; 젆; 젆; ) HANGUL SYLLABLE JEONH C807;C807;110C 1165 11AE;C807;110C 1165 11AE; # (젇; 젇; 젇; 젇; 젇; ) HANGUL SYLLABLE JEOD C808;C808;110C 1165 11AF;C808;110C 1165 11AF; # (절; 절; 절; 절; 절; ) HANGUL SYLLABLE JEOL C809;C809;110C 1165 11B0;C809;110C 1165 11B0; # (젉; 젉; 젉; 젉; 젉; ) HANGUL SYLLABLE JEOLG C80A;C80A;110C 1165 11B1;C80A;110C 1165 11B1; # (젊; 젊; 젊; 젊; 젊; ) HANGUL SYLLABLE JEOLM C80B;C80B;110C 1165 11B2;C80B;110C 1165 11B2; # (젋; 젋; 젋; 젋; 젋; ) HANGUL SYLLABLE JEOLB C80C;C80C;110C 1165 11B3;C80C;110C 1165 11B3; # (젌; 젌; 젌; 젌; 젌; ) HANGUL SYLLABLE JEOLS C80D;C80D;110C 1165 11B4;C80D;110C 1165 11B4; # (젍; 젍; 젍; 젍; 젍; ) HANGUL SYLLABLE JEOLT C80E;C80E;110C 1165 11B5;C80E;110C 1165 11B5; # (젎; 젎; 젎; 젎; 젎; ) HANGUL SYLLABLE JEOLP C80F;C80F;110C 1165 11B6;C80F;110C 1165 11B6; # (젏; 젏; 젏; 젏; 젏; ) HANGUL SYLLABLE JEOLH C810;C810;110C 1165 11B7;C810;110C 1165 11B7; # (점; 점; 점; 점; 점; ) HANGUL SYLLABLE JEOM C811;C811;110C 1165 11B8;C811;110C 1165 11B8; # (접; 접; 접; 접; 접; ) HANGUL SYLLABLE JEOB C812;C812;110C 1165 11B9;C812;110C 1165 11B9; # (젒; 젒; 젒; 젒; 젒; ) HANGUL SYLLABLE JEOBS C813;C813;110C 1165 11BA;C813;110C 1165 11BA; # (젓; 젓; 젓; 젓; 젓; ) HANGUL SYLLABLE JEOS C814;C814;110C 1165 11BB;C814;110C 1165 11BB; # (젔; 젔; 젔; 젔; 젔; ) HANGUL SYLLABLE JEOSS C815;C815;110C 1165 11BC;C815;110C 1165 11BC; # (정; 정; 정; 정; 정; ) HANGUL SYLLABLE JEONG C816;C816;110C 1165 11BD;C816;110C 1165 11BD; # (젖; 젖; 젖; 젖; 젖; ) HANGUL SYLLABLE JEOJ C817;C817;110C 1165 11BE;C817;110C 1165 11BE; # (젗; 젗; 젗; 젗; 젗; ) HANGUL SYLLABLE JEOC C818;C818;110C 1165 11BF;C818;110C 1165 11BF; # (젘; 젘; 젘; 젘; 젘; ) HANGUL SYLLABLE JEOK C819;C819;110C 1165 11C0;C819;110C 1165 11C0; # (젙; 젙; 젙; 젙; 젙; ) HANGUL SYLLABLE JEOT C81A;C81A;110C 1165 11C1;C81A;110C 1165 11C1; # (젚; 젚; 젚; 젚; 젚; ) HANGUL SYLLABLE JEOP C81B;C81B;110C 1165 11C2;C81B;110C 1165 11C2; # (젛; 젛; 젛; 젛; 젛; ) HANGUL SYLLABLE JEOH C81C;C81C;110C 1166;C81C;110C 1166; # (제; 제; 제; 제; 제; ) HANGUL SYLLABLE JE C81D;C81D;110C 1166 11A8;C81D;110C 1166 11A8; # (젝; 젝; 젝; 젝; 젝; ) HANGUL SYLLABLE JEG C81E;C81E;110C 1166 11A9;C81E;110C 1166 11A9; # (젞; 젞; 젞; 젞; 젞; ) HANGUL SYLLABLE JEGG C81F;C81F;110C 1166 11AA;C81F;110C 1166 11AA; # (젟; 젟; 젟; 젟; 젟; ) HANGUL SYLLABLE JEGS C820;C820;110C 1166 11AB;C820;110C 1166 11AB; # (젠; 젠; 젠; 젠; 젠; ) HANGUL SYLLABLE JEN C821;C821;110C 1166 11AC;C821;110C 1166 11AC; # (젡; 젡; 젡; 젡; 젡; ) HANGUL SYLLABLE JENJ C822;C822;110C 1166 11AD;C822;110C 1166 11AD; # (젢; 젢; 젢; 젢; 젢; ) HANGUL SYLLABLE JENH C823;C823;110C 1166 11AE;C823;110C 1166 11AE; # (젣; 젣; 젣; 젣; 젣; ) HANGUL SYLLABLE JED C824;C824;110C 1166 11AF;C824;110C 1166 11AF; # (젤; 젤; 젤; 젤; 젤; ) HANGUL SYLLABLE JEL C825;C825;110C 1166 11B0;C825;110C 1166 11B0; # (젥; 젥; 젥; 젥; 젥; ) HANGUL SYLLABLE JELG C826;C826;110C 1166 11B1;C826;110C 1166 11B1; # (젦; 젦; 젦; 젦; 젦; ) HANGUL SYLLABLE JELM C827;C827;110C 1166 11B2;C827;110C 1166 11B2; # (젧; 젧; 젧; 젧; 젧; ) HANGUL SYLLABLE JELB C828;C828;110C 1166 11B3;C828;110C 1166 11B3; # (젨; 젨; 젨; 젨; 젨; ) HANGUL SYLLABLE JELS C829;C829;110C 1166 11B4;C829;110C 1166 11B4; # (젩; 젩; 젩; 젩; 젩; ) HANGUL SYLLABLE JELT C82A;C82A;110C 1166 11B5;C82A;110C 1166 11B5; # (젪; 젪; 젪; 젪; 젪; ) HANGUL SYLLABLE JELP C82B;C82B;110C 1166 11B6;C82B;110C 1166 11B6; # (젫; 젫; 젫; 젫; 젫; ) HANGUL SYLLABLE JELH C82C;C82C;110C 1166 11B7;C82C;110C 1166 11B7; # (젬; 젬; 젬; 젬; 젬; ) HANGUL SYLLABLE JEM C82D;C82D;110C 1166 11B8;C82D;110C 1166 11B8; # (젭; 젭; 젭; 젭; 젭; ) HANGUL SYLLABLE JEB C82E;C82E;110C 1166 11B9;C82E;110C 1166 11B9; # (젮; 젮; 젮; 젮; 젮; ) HANGUL SYLLABLE JEBS C82F;C82F;110C 1166 11BA;C82F;110C 1166 11BA; # (젯; 젯; 젯; 젯; 젯; ) HANGUL SYLLABLE JES C830;C830;110C 1166 11BB;C830;110C 1166 11BB; # (젰; 젰; 젰; 젰; 젰; ) HANGUL SYLLABLE JESS C831;C831;110C 1166 11BC;C831;110C 1166 11BC; # (젱; 젱; 젱; 젱; 젱; ) HANGUL SYLLABLE JENG C832;C832;110C 1166 11BD;C832;110C 1166 11BD; # (젲; 젲; 젲; 젲; 젲; ) HANGUL SYLLABLE JEJ C833;C833;110C 1166 11BE;C833;110C 1166 11BE; # (젳; 젳; 젳; 젳; 젳; ) HANGUL SYLLABLE JEC C834;C834;110C 1166 11BF;C834;110C 1166 11BF; # (젴; 젴; 젴; 젴; 젴; ) HANGUL SYLLABLE JEK C835;C835;110C 1166 11C0;C835;110C 1166 11C0; # (젵; 젵; 젵; 젵; 젵; ) HANGUL SYLLABLE JET C836;C836;110C 1166 11C1;C836;110C 1166 11C1; # (젶; 젶; 젶; 젶; 젶; ) HANGUL SYLLABLE JEP C837;C837;110C 1166 11C2;C837;110C 1166 11C2; # (젷; 젷; 젷; 젷; 젷; ) HANGUL SYLLABLE JEH C838;C838;110C 1167;C838;110C 1167; # (져; 져; 져; 져; 져; ) HANGUL SYLLABLE JYEO C839;C839;110C 1167 11A8;C839;110C 1167 11A8; # (젹; 젹; 젹; 젹; 젹; ) HANGUL SYLLABLE JYEOG C83A;C83A;110C 1167 11A9;C83A;110C 1167 11A9; # (젺; 젺; 젺; 젺; 젺; ) HANGUL SYLLABLE JYEOGG C83B;C83B;110C 1167 11AA;C83B;110C 1167 11AA; # (젻; 젻; 젻; 젻; 젻; ) HANGUL SYLLABLE JYEOGS C83C;C83C;110C 1167 11AB;C83C;110C 1167 11AB; # (젼; 젼; 젼; 젼; 젼; ) HANGUL SYLLABLE JYEON C83D;C83D;110C 1167 11AC;C83D;110C 1167 11AC; # (젽; 젽; 젽; 젽; 젽; ) HANGUL SYLLABLE JYEONJ C83E;C83E;110C 1167 11AD;C83E;110C 1167 11AD; # (젾; 젾; 젾; 젾; 젾; ) HANGUL SYLLABLE JYEONH C83F;C83F;110C 1167 11AE;C83F;110C 1167 11AE; # (젿; 젿; 젿; 젿; 젿; ) HANGUL SYLLABLE JYEOD C840;C840;110C 1167 11AF;C840;110C 1167 11AF; # (졀; 졀; 졀; 졀; 졀; ) HANGUL SYLLABLE JYEOL C841;C841;110C 1167 11B0;C841;110C 1167 11B0; # (졁; 졁; 졁; 졁; 졁; ) HANGUL SYLLABLE JYEOLG C842;C842;110C 1167 11B1;C842;110C 1167 11B1; # (졂; 졂; 졂; 졂; 졂; ) HANGUL SYLLABLE JYEOLM C843;C843;110C 1167 11B2;C843;110C 1167 11B2; # (졃; 졃; 졃; 졃; 졃; ) HANGUL SYLLABLE JYEOLB C844;C844;110C 1167 11B3;C844;110C 1167 11B3; # (졄; 졄; 졄; 졄; 졄; ) HANGUL SYLLABLE JYEOLS C845;C845;110C 1167 11B4;C845;110C 1167 11B4; # (졅; 졅; 졅; 졅; 졅; ) HANGUL SYLLABLE JYEOLT C846;C846;110C 1167 11B5;C846;110C 1167 11B5; # (졆; 졆; 졆; 졆; 졆; ) HANGUL SYLLABLE JYEOLP C847;C847;110C 1167 11B6;C847;110C 1167 11B6; # (졇; 졇; 졇; 졇; 졇; ) HANGUL SYLLABLE JYEOLH C848;C848;110C 1167 11B7;C848;110C 1167 11B7; # (졈; 졈; 졈; 졈; 졈; ) HANGUL SYLLABLE JYEOM C849;C849;110C 1167 11B8;C849;110C 1167 11B8; # (졉; 졉; 졉; 졉; 졉; ) HANGUL SYLLABLE JYEOB C84A;C84A;110C 1167 11B9;C84A;110C 1167 11B9; # (졊; 졊; 졊; 졊; 졊; ) HANGUL SYLLABLE JYEOBS C84B;C84B;110C 1167 11BA;C84B;110C 1167 11BA; # (졋; 졋; 졋; 졋; 졋; ) HANGUL SYLLABLE JYEOS C84C;C84C;110C 1167 11BB;C84C;110C 1167 11BB; # (졌; 졌; 졌; 졌; 졌; ) HANGUL SYLLABLE JYEOSS C84D;C84D;110C 1167 11BC;C84D;110C 1167 11BC; # (졍; 졍; 졍; 졍; 졍; ) HANGUL SYLLABLE JYEONG C84E;C84E;110C 1167 11BD;C84E;110C 1167 11BD; # (졎; 졎; 졎; 졎; 졎; ) HANGUL SYLLABLE JYEOJ C84F;C84F;110C 1167 11BE;C84F;110C 1167 11BE; # (졏; 졏; 졏; 졏; 졏; ) HANGUL SYLLABLE JYEOC C850;C850;110C 1167 11BF;C850;110C 1167 11BF; # (졐; 졐; 졐; 졐; 졐; ) HANGUL SYLLABLE JYEOK C851;C851;110C 1167 11C0;C851;110C 1167 11C0; # (졑; 졑; 졑; 졑; 졑; ) HANGUL SYLLABLE JYEOT C852;C852;110C 1167 11C1;C852;110C 1167 11C1; # (졒; 졒; 졒; 졒; 졒; ) HANGUL SYLLABLE JYEOP C853;C853;110C 1167 11C2;C853;110C 1167 11C2; # (졓; 졓; 졓; 졓; 졓; ) HANGUL SYLLABLE JYEOH C854;C854;110C 1168;C854;110C 1168; # (졔; 졔; 졔; 졔; 졔; ) HANGUL SYLLABLE JYE C855;C855;110C 1168 11A8;C855;110C 1168 11A8; # (졕; 졕; 졕; 졕; 졕; ) HANGUL SYLLABLE JYEG C856;C856;110C 1168 11A9;C856;110C 1168 11A9; # (졖; 졖; 졖; 졖; 졖; ) HANGUL SYLLABLE JYEGG C857;C857;110C 1168 11AA;C857;110C 1168 11AA; # (졗; 졗; 졗; 졗; 졗; ) HANGUL SYLLABLE JYEGS C858;C858;110C 1168 11AB;C858;110C 1168 11AB; # (졘; 졘; 졘; 졘; 졘; ) HANGUL SYLLABLE JYEN C859;C859;110C 1168 11AC;C859;110C 1168 11AC; # (졙; 졙; 졙; 졙; 졙; ) HANGUL SYLLABLE JYENJ C85A;C85A;110C 1168 11AD;C85A;110C 1168 11AD; # (졚; 졚; 졚; 졚; 졚; ) HANGUL SYLLABLE JYENH C85B;C85B;110C 1168 11AE;C85B;110C 1168 11AE; # (졛; 졛; 졛; 졛; 졛; ) HANGUL SYLLABLE JYED C85C;C85C;110C 1168 11AF;C85C;110C 1168 11AF; # (졜; 졜; 졜; 졜; 졜; ) HANGUL SYLLABLE JYEL C85D;C85D;110C 1168 11B0;C85D;110C 1168 11B0; # (졝; 졝; 졝; 졝; 졝; ) HANGUL SYLLABLE JYELG C85E;C85E;110C 1168 11B1;C85E;110C 1168 11B1; # (졞; 졞; 졞; 졞; 졞; ) HANGUL SYLLABLE JYELM C85F;C85F;110C 1168 11B2;C85F;110C 1168 11B2; # (졟; 졟; 졟; 졟; 졟; ) HANGUL SYLLABLE JYELB C860;C860;110C 1168 11B3;C860;110C 1168 11B3; # (졠; 졠; 졠; 졠; 졠; ) HANGUL SYLLABLE JYELS C861;C861;110C 1168 11B4;C861;110C 1168 11B4; # (졡; 졡; 졡; 졡; 졡; ) HANGUL SYLLABLE JYELT C862;C862;110C 1168 11B5;C862;110C 1168 11B5; # (졢; 졢; 졢; 졢; 졢; ) HANGUL SYLLABLE JYELP C863;C863;110C 1168 11B6;C863;110C 1168 11B6; # (졣; 졣; 졣; 졣; 졣; ) HANGUL SYLLABLE JYELH C864;C864;110C 1168 11B7;C864;110C 1168 11B7; # (졤; 졤; 졤; 졤; 졤; ) HANGUL SYLLABLE JYEM C865;C865;110C 1168 11B8;C865;110C 1168 11B8; # (졥; 졥; 졥; 졥; 졥; ) HANGUL SYLLABLE JYEB C866;C866;110C 1168 11B9;C866;110C 1168 11B9; # (졦; 졦; 졦; 졦; 졦; ) HANGUL SYLLABLE JYEBS C867;C867;110C 1168 11BA;C867;110C 1168 11BA; # (졧; 졧; 졧; 졧; 졧; ) HANGUL SYLLABLE JYES C868;C868;110C 1168 11BB;C868;110C 1168 11BB; # (졨; 졨; 졨; 졨; 졨; ) HANGUL SYLLABLE JYESS C869;C869;110C 1168 11BC;C869;110C 1168 11BC; # (졩; 졩; 졩; 졩; 졩; ) HANGUL SYLLABLE JYENG C86A;C86A;110C 1168 11BD;C86A;110C 1168 11BD; # (졪; 졪; 졪; 졪; 졪; ) HANGUL SYLLABLE JYEJ C86B;C86B;110C 1168 11BE;C86B;110C 1168 11BE; # (졫; 졫; 졫; 졫; 졫; ) HANGUL SYLLABLE JYEC C86C;C86C;110C 1168 11BF;C86C;110C 1168 11BF; # (졬; 졬; 졬; 졬; 졬; ) HANGUL SYLLABLE JYEK C86D;C86D;110C 1168 11C0;C86D;110C 1168 11C0; # (졭; 졭; 졭; 졭; 졭; ) HANGUL SYLLABLE JYET C86E;C86E;110C 1168 11C1;C86E;110C 1168 11C1; # (졮; 졮; 졮; 졮; 졮; ) HANGUL SYLLABLE JYEP C86F;C86F;110C 1168 11C2;C86F;110C 1168 11C2; # (졯; 졯; 졯; 졯; 졯; ) HANGUL SYLLABLE JYEH C870;C870;110C 1169;C870;110C 1169; # (조; 조; 조; 조; 조; ) HANGUL SYLLABLE JO C871;C871;110C 1169 11A8;C871;110C 1169 11A8; # (족; 족; 족; 족; 족; ) HANGUL SYLLABLE JOG C872;C872;110C 1169 11A9;C872;110C 1169 11A9; # (졲; 졲; 졲; 졲; 졲; ) HANGUL SYLLABLE JOGG C873;C873;110C 1169 11AA;C873;110C 1169 11AA; # (졳; 졳; 졳; 졳; 졳; ) HANGUL SYLLABLE JOGS C874;C874;110C 1169 11AB;C874;110C 1169 11AB; # (존; 존; 존; 존; 존; ) HANGUL SYLLABLE JON C875;C875;110C 1169 11AC;C875;110C 1169 11AC; # (졵; 졵; 졵; 졵; 졵; ) HANGUL SYLLABLE JONJ C876;C876;110C 1169 11AD;C876;110C 1169 11AD; # (졶; 졶; 졶; 졶; 졶; ) HANGUL SYLLABLE JONH C877;C877;110C 1169 11AE;C877;110C 1169 11AE; # (졷; 졷; 졷; 졷; 졷; ) HANGUL SYLLABLE JOD C878;C878;110C 1169 11AF;C878;110C 1169 11AF; # (졸; 졸; 졸; 졸; 졸; ) HANGUL SYLLABLE JOL C879;C879;110C 1169 11B0;C879;110C 1169 11B0; # (졹; 졹; 졹; 졹; 졹; ) HANGUL SYLLABLE JOLG C87A;C87A;110C 1169 11B1;C87A;110C 1169 11B1; # (졺; 졺; 졺; 졺; 졺; ) HANGUL SYLLABLE JOLM C87B;C87B;110C 1169 11B2;C87B;110C 1169 11B2; # (졻; 졻; 졻; 졻; 졻; ) HANGUL SYLLABLE JOLB C87C;C87C;110C 1169 11B3;C87C;110C 1169 11B3; # (졼; 졼; 졼; 졼; 졼; ) HANGUL SYLLABLE JOLS C87D;C87D;110C 1169 11B4;C87D;110C 1169 11B4; # (졽; 졽; 졽; 졽; 졽; ) HANGUL SYLLABLE JOLT C87E;C87E;110C 1169 11B5;C87E;110C 1169 11B5; # (졾; 졾; 졾; 졾; 졾; ) HANGUL SYLLABLE JOLP C87F;C87F;110C 1169 11B6;C87F;110C 1169 11B6; # (졿; 졿; 졿; 졿; 졿; ) HANGUL SYLLABLE JOLH C880;C880;110C 1169 11B7;C880;110C 1169 11B7; # (좀; 좀; 좀; 좀; 좀; ) HANGUL SYLLABLE JOM C881;C881;110C 1169 11B8;C881;110C 1169 11B8; # (좁; 좁; 좁; 좁; 좁; ) HANGUL SYLLABLE JOB C882;C882;110C 1169 11B9;C882;110C 1169 11B9; # (좂; 좂; 좂; 좂; 좂; ) HANGUL SYLLABLE JOBS C883;C883;110C 1169 11BA;C883;110C 1169 11BA; # (좃; 좃; 좃; 좃; 좃; ) HANGUL SYLLABLE JOS C884;C884;110C 1169 11BB;C884;110C 1169 11BB; # (좄; 좄; 좄; 좄; 좄; ) HANGUL SYLLABLE JOSS C885;C885;110C 1169 11BC;C885;110C 1169 11BC; # (종; 종; 종; 종; 종; ) HANGUL SYLLABLE JONG C886;C886;110C 1169 11BD;C886;110C 1169 11BD; # (좆; 좆; 좆; 좆; 좆; ) HANGUL SYLLABLE JOJ C887;C887;110C 1169 11BE;C887;110C 1169 11BE; # (좇; 좇; 좇; 좇; 좇; ) HANGUL SYLLABLE JOC C888;C888;110C 1169 11BF;C888;110C 1169 11BF; # (좈; 좈; 좈; 좈; 좈; ) HANGUL SYLLABLE JOK C889;C889;110C 1169 11C0;C889;110C 1169 11C0; # (좉; 좉; 좉; 좉; 좉; ) HANGUL SYLLABLE JOT C88A;C88A;110C 1169 11C1;C88A;110C 1169 11C1; # (좊; 좊; 좊; 좊; 좊; ) HANGUL SYLLABLE JOP C88B;C88B;110C 1169 11C2;C88B;110C 1169 11C2; # (좋; 좋; 좋; 좋; 좋; ) HANGUL SYLLABLE JOH C88C;C88C;110C 116A;C88C;110C 116A; # (좌; 좌; 좌; 좌; 좌; ) HANGUL SYLLABLE JWA C88D;C88D;110C 116A 11A8;C88D;110C 116A 11A8; # (좍; 좍; 좍; 좍; 좍; ) HANGUL SYLLABLE JWAG C88E;C88E;110C 116A 11A9;C88E;110C 116A 11A9; # (좎; 좎; 좎; 좎; 좎; ) HANGUL SYLLABLE JWAGG C88F;C88F;110C 116A 11AA;C88F;110C 116A 11AA; # (좏; 좏; 좏; 좏; 좏; ) HANGUL SYLLABLE JWAGS C890;C890;110C 116A 11AB;C890;110C 116A 11AB; # (좐; 좐; 좐; 좐; 좐; ) HANGUL SYLLABLE JWAN C891;C891;110C 116A 11AC;C891;110C 116A 11AC; # (좑; 좑; 좑; 좑; 좑; ) HANGUL SYLLABLE JWANJ C892;C892;110C 116A 11AD;C892;110C 116A 11AD; # (좒; 좒; 좒; 좒; 좒; ) HANGUL SYLLABLE JWANH C893;C893;110C 116A 11AE;C893;110C 116A 11AE; # (좓; 좓; 좓; 좓; 좓; ) HANGUL SYLLABLE JWAD C894;C894;110C 116A 11AF;C894;110C 116A 11AF; # (좔; 좔; 좔; 좔; 좔; ) HANGUL SYLLABLE JWAL C895;C895;110C 116A 11B0;C895;110C 116A 11B0; # (좕; 좕; 좕; 좕; 좕; ) HANGUL SYLLABLE JWALG C896;C896;110C 116A 11B1;C896;110C 116A 11B1; # (좖; 좖; 좖; 좖; 좖; ) HANGUL SYLLABLE JWALM C897;C897;110C 116A 11B2;C897;110C 116A 11B2; # (좗; 좗; 좗; 좗; 좗; ) HANGUL SYLLABLE JWALB C898;C898;110C 116A 11B3;C898;110C 116A 11B3; # (좘; 좘; 좘; 좘; 좘; ) HANGUL SYLLABLE JWALS C899;C899;110C 116A 11B4;C899;110C 116A 11B4; # (좙; 좙; 좙; 좙; 좙; ) HANGUL SYLLABLE JWALT C89A;C89A;110C 116A 11B5;C89A;110C 116A 11B5; # (좚; 좚; 좚; 좚; 좚; ) HANGUL SYLLABLE JWALP C89B;C89B;110C 116A 11B6;C89B;110C 116A 11B6; # (좛; 좛; 좛; 좛; 좛; ) HANGUL SYLLABLE JWALH C89C;C89C;110C 116A 11B7;C89C;110C 116A 11B7; # (좜; 좜; 좜; 좜; 좜; ) HANGUL SYLLABLE JWAM C89D;C89D;110C 116A 11B8;C89D;110C 116A 11B8; # (좝; 좝; 좝; 좝; 좝; ) HANGUL SYLLABLE JWAB C89E;C89E;110C 116A 11B9;C89E;110C 116A 11B9; # (좞; 좞; 좞; 좞; 좞; ) HANGUL SYLLABLE JWABS C89F;C89F;110C 116A 11BA;C89F;110C 116A 11BA; # (좟; 좟; 좟; 좟; 좟; ) HANGUL SYLLABLE JWAS C8A0;C8A0;110C 116A 11BB;C8A0;110C 116A 11BB; # (좠; 좠; 좠; 좠; 좠; ) HANGUL SYLLABLE JWASS C8A1;C8A1;110C 116A 11BC;C8A1;110C 116A 11BC; # (좡; 좡; 좡; 좡; 좡; ) HANGUL SYLLABLE JWANG C8A2;C8A2;110C 116A 11BD;C8A2;110C 116A 11BD; # (좢; 좢; 좢; 좢; 좢; ) HANGUL SYLLABLE JWAJ C8A3;C8A3;110C 116A 11BE;C8A3;110C 116A 11BE; # (좣; 좣; 좣; 좣; 좣; ) HANGUL SYLLABLE JWAC C8A4;C8A4;110C 116A 11BF;C8A4;110C 116A 11BF; # (좤; 좤; 좤; 좤; 좤; ) HANGUL SYLLABLE JWAK C8A5;C8A5;110C 116A 11C0;C8A5;110C 116A 11C0; # (좥; 좥; 좥; 좥; 좥; ) HANGUL SYLLABLE JWAT C8A6;C8A6;110C 116A 11C1;C8A6;110C 116A 11C1; # (좦; 좦; 좦; 좦; 좦; ) HANGUL SYLLABLE JWAP C8A7;C8A7;110C 116A 11C2;C8A7;110C 116A 11C2; # (좧; 좧; 좧; 좧; 좧; ) HANGUL SYLLABLE JWAH C8A8;C8A8;110C 116B;C8A8;110C 116B; # (좨; 좨; 좨; 좨; 좨; ) HANGUL SYLLABLE JWAE C8A9;C8A9;110C 116B 11A8;C8A9;110C 116B 11A8; # (좩; 좩; 좩; 좩; 좩; ) HANGUL SYLLABLE JWAEG C8AA;C8AA;110C 116B 11A9;C8AA;110C 116B 11A9; # (좪; 좪; 좪; 좪; 좪; ) HANGUL SYLLABLE JWAEGG C8AB;C8AB;110C 116B 11AA;C8AB;110C 116B 11AA; # (좫; 좫; 좫; 좫; 좫; ) HANGUL SYLLABLE JWAEGS C8AC;C8AC;110C 116B 11AB;C8AC;110C 116B 11AB; # (좬; 좬; 좬; 좬; 좬; ) HANGUL SYLLABLE JWAEN C8AD;C8AD;110C 116B 11AC;C8AD;110C 116B 11AC; # (좭; 좭; 좭; 좭; 좭; ) HANGUL SYLLABLE JWAENJ C8AE;C8AE;110C 116B 11AD;C8AE;110C 116B 11AD; # (좮; 좮; 좮; 좮; 좮; ) HANGUL SYLLABLE JWAENH C8AF;C8AF;110C 116B 11AE;C8AF;110C 116B 11AE; # (좯; 좯; 좯; 좯; 좯; ) HANGUL SYLLABLE JWAED C8B0;C8B0;110C 116B 11AF;C8B0;110C 116B 11AF; # (좰; 좰; 좰; 좰; 좰; ) HANGUL SYLLABLE JWAEL C8B1;C8B1;110C 116B 11B0;C8B1;110C 116B 11B0; # (좱; 좱; 좱; 좱; 좱; ) HANGUL SYLLABLE JWAELG C8B2;C8B2;110C 116B 11B1;C8B2;110C 116B 11B1; # (좲; 좲; 좲; 좲; 좲; ) HANGUL SYLLABLE JWAELM C8B3;C8B3;110C 116B 11B2;C8B3;110C 116B 11B2; # (좳; 좳; 좳; 좳; 좳; ) HANGUL SYLLABLE JWAELB C8B4;C8B4;110C 116B 11B3;C8B4;110C 116B 11B3; # (좴; 좴; 좴; 좴; 좴; ) HANGUL SYLLABLE JWAELS C8B5;C8B5;110C 116B 11B4;C8B5;110C 116B 11B4; # (좵; 좵; 좵; 좵; 좵; ) HANGUL SYLLABLE JWAELT C8B6;C8B6;110C 116B 11B5;C8B6;110C 116B 11B5; # (좶; 좶; 좶; 좶; 좶; ) HANGUL SYLLABLE JWAELP C8B7;C8B7;110C 116B 11B6;C8B7;110C 116B 11B6; # (좷; 좷; 좷; 좷; 좷; ) HANGUL SYLLABLE JWAELH C8B8;C8B8;110C 116B 11B7;C8B8;110C 116B 11B7; # (좸; 좸; 좸; 좸; 좸; ) HANGUL SYLLABLE JWAEM C8B9;C8B9;110C 116B 11B8;C8B9;110C 116B 11B8; # (좹; 좹; 좹; 좹; 좹; ) HANGUL SYLLABLE JWAEB C8BA;C8BA;110C 116B 11B9;C8BA;110C 116B 11B9; # (좺; 좺; 좺; 좺; 좺; ) HANGUL SYLLABLE JWAEBS C8BB;C8BB;110C 116B 11BA;C8BB;110C 116B 11BA; # (좻; 좻; 좻; 좻; 좻; ) HANGUL SYLLABLE JWAES C8BC;C8BC;110C 116B 11BB;C8BC;110C 116B 11BB; # (좼; 좼; 좼; 좼; 좼; ) HANGUL SYLLABLE JWAESS C8BD;C8BD;110C 116B 11BC;C8BD;110C 116B 11BC; # (좽; 좽; 좽; 좽; 좽; ) HANGUL SYLLABLE JWAENG C8BE;C8BE;110C 116B 11BD;C8BE;110C 116B 11BD; # (좾; 좾; 좾; 좾; 좾; ) HANGUL SYLLABLE JWAEJ C8BF;C8BF;110C 116B 11BE;C8BF;110C 116B 11BE; # (좿; 좿; 좿; 좿; 좿; ) HANGUL SYLLABLE JWAEC C8C0;C8C0;110C 116B 11BF;C8C0;110C 116B 11BF; # (죀; 죀; 죀; 죀; 죀; ) HANGUL SYLLABLE JWAEK C8C1;C8C1;110C 116B 11C0;C8C1;110C 116B 11C0; # (죁; 죁; 죁; 죁; 죁; ) HANGUL SYLLABLE JWAET C8C2;C8C2;110C 116B 11C1;C8C2;110C 116B 11C1; # (죂; 죂; 죂; 죂; 죂; ) HANGUL SYLLABLE JWAEP C8C3;C8C3;110C 116B 11C2;C8C3;110C 116B 11C2; # (죃; 죃; 죃; 죃; 죃; ) HANGUL SYLLABLE JWAEH C8C4;C8C4;110C 116C;C8C4;110C 116C; # (죄; 죄; 죄; 죄; 죄; ) HANGUL SYLLABLE JOE C8C5;C8C5;110C 116C 11A8;C8C5;110C 116C 11A8; # (죅; 죅; 죅; 죅; 죅; ) HANGUL SYLLABLE JOEG C8C6;C8C6;110C 116C 11A9;C8C6;110C 116C 11A9; # (죆; 죆; 죆; 죆; 죆; ) HANGUL SYLLABLE JOEGG C8C7;C8C7;110C 116C 11AA;C8C7;110C 116C 11AA; # (죇; 죇; 죇; 죇; 죇; ) HANGUL SYLLABLE JOEGS C8C8;C8C8;110C 116C 11AB;C8C8;110C 116C 11AB; # (죈; 죈; 죈; 죈; 죈; ) HANGUL SYLLABLE JOEN C8C9;C8C9;110C 116C 11AC;C8C9;110C 116C 11AC; # (죉; 죉; 죉; 죉; 죉; ) HANGUL SYLLABLE JOENJ C8CA;C8CA;110C 116C 11AD;C8CA;110C 116C 11AD; # (죊; 죊; 죊; 죊; 죊; ) HANGUL SYLLABLE JOENH C8CB;C8CB;110C 116C 11AE;C8CB;110C 116C 11AE; # (죋; 죋; 죋; 죋; 죋; ) HANGUL SYLLABLE JOED C8CC;C8CC;110C 116C 11AF;C8CC;110C 116C 11AF; # (죌; 죌; 죌; 죌; 죌; ) HANGUL SYLLABLE JOEL C8CD;C8CD;110C 116C 11B0;C8CD;110C 116C 11B0; # (죍; 죍; 죍; 죍; 죍; ) HANGUL SYLLABLE JOELG C8CE;C8CE;110C 116C 11B1;C8CE;110C 116C 11B1; # (죎; 죎; 죎; 죎; 죎; ) HANGUL SYLLABLE JOELM C8CF;C8CF;110C 116C 11B2;C8CF;110C 116C 11B2; # (죏; 죏; 죏; 죏; 죏; ) HANGUL SYLLABLE JOELB C8D0;C8D0;110C 116C 11B3;C8D0;110C 116C 11B3; # (죐; 죐; 죐; 죐; 죐; ) HANGUL SYLLABLE JOELS C8D1;C8D1;110C 116C 11B4;C8D1;110C 116C 11B4; # (죑; 죑; 죑; 죑; 죑; ) HANGUL SYLLABLE JOELT C8D2;C8D2;110C 116C 11B5;C8D2;110C 116C 11B5; # (죒; 죒; 죒; 죒; 죒; ) HANGUL SYLLABLE JOELP C8D3;C8D3;110C 116C 11B6;C8D3;110C 116C 11B6; # (죓; 죓; 죓; 죓; 죓; ) HANGUL SYLLABLE JOELH C8D4;C8D4;110C 116C 11B7;C8D4;110C 116C 11B7; # (죔; 죔; 죔; 죔; 죔; ) HANGUL SYLLABLE JOEM C8D5;C8D5;110C 116C 11B8;C8D5;110C 116C 11B8; # (죕; 죕; 죕; 죕; 죕; ) HANGUL SYLLABLE JOEB C8D6;C8D6;110C 116C 11B9;C8D6;110C 116C 11B9; # (죖; 죖; 죖; 죖; 죖; ) HANGUL SYLLABLE JOEBS C8D7;C8D7;110C 116C 11BA;C8D7;110C 116C 11BA; # (죗; 죗; 죗; 죗; 죗; ) HANGUL SYLLABLE JOES C8D8;C8D8;110C 116C 11BB;C8D8;110C 116C 11BB; # (죘; 죘; 죘; 죘; 죘; ) HANGUL SYLLABLE JOESS C8D9;C8D9;110C 116C 11BC;C8D9;110C 116C 11BC; # (죙; 죙; 죙; 죙; 죙; ) HANGUL SYLLABLE JOENG C8DA;C8DA;110C 116C 11BD;C8DA;110C 116C 11BD; # (죚; 죚; 죚; 죚; 죚; ) HANGUL SYLLABLE JOEJ C8DB;C8DB;110C 116C 11BE;C8DB;110C 116C 11BE; # (죛; 죛; 죛; 죛; 죛; ) HANGUL SYLLABLE JOEC C8DC;C8DC;110C 116C 11BF;C8DC;110C 116C 11BF; # (죜; 죜; 죜; 죜; 죜; ) HANGUL SYLLABLE JOEK C8DD;C8DD;110C 116C 11C0;C8DD;110C 116C 11C0; # (죝; 죝; 죝; 죝; 죝; ) HANGUL SYLLABLE JOET C8DE;C8DE;110C 116C 11C1;C8DE;110C 116C 11C1; # (죞; 죞; 죞; 죞; 죞; ) HANGUL SYLLABLE JOEP C8DF;C8DF;110C 116C 11C2;C8DF;110C 116C 11C2; # (죟; 죟; 죟; 죟; 죟; ) HANGUL SYLLABLE JOEH C8E0;C8E0;110C 116D;C8E0;110C 116D; # (죠; 죠; 죠; 죠; 죠; ) HANGUL SYLLABLE JYO C8E1;C8E1;110C 116D 11A8;C8E1;110C 116D 11A8; # (죡; 죡; 죡; 죡; 죡; ) HANGUL SYLLABLE JYOG C8E2;C8E2;110C 116D 11A9;C8E2;110C 116D 11A9; # (죢; 죢; 죢; 죢; 죢; ) HANGUL SYLLABLE JYOGG C8E3;C8E3;110C 116D 11AA;C8E3;110C 116D 11AA; # (죣; 죣; 죣; 죣; 죣; ) HANGUL SYLLABLE JYOGS C8E4;C8E4;110C 116D 11AB;C8E4;110C 116D 11AB; # (죤; 죤; 죤; 죤; 죤; ) HANGUL SYLLABLE JYON C8E5;C8E5;110C 116D 11AC;C8E5;110C 116D 11AC; # (죥; 죥; 죥; 죥; 죥; ) HANGUL SYLLABLE JYONJ C8E6;C8E6;110C 116D 11AD;C8E6;110C 116D 11AD; # (죦; 죦; 죦; 죦; 죦; ) HANGUL SYLLABLE JYONH C8E7;C8E7;110C 116D 11AE;C8E7;110C 116D 11AE; # (죧; 죧; 죧; 죧; 죧; ) HANGUL SYLLABLE JYOD C8E8;C8E8;110C 116D 11AF;C8E8;110C 116D 11AF; # (죨; 죨; 죨; 죨; 죨; ) HANGUL SYLLABLE JYOL C8E9;C8E9;110C 116D 11B0;C8E9;110C 116D 11B0; # (죩; 죩; 죩; 죩; 죩; ) HANGUL SYLLABLE JYOLG C8EA;C8EA;110C 116D 11B1;C8EA;110C 116D 11B1; # (죪; 죪; 죪; 죪; 죪; ) HANGUL SYLLABLE JYOLM C8EB;C8EB;110C 116D 11B2;C8EB;110C 116D 11B2; # (죫; 죫; 죫; 죫; 죫; ) HANGUL SYLLABLE JYOLB C8EC;C8EC;110C 116D 11B3;C8EC;110C 116D 11B3; # (죬; 죬; 죬; 죬; 죬; ) HANGUL SYLLABLE JYOLS C8ED;C8ED;110C 116D 11B4;C8ED;110C 116D 11B4; # (죭; 죭; 죭; 죭; 죭; ) HANGUL SYLLABLE JYOLT C8EE;C8EE;110C 116D 11B5;C8EE;110C 116D 11B5; # (죮; 죮; 죮; 죮; 죮; ) HANGUL SYLLABLE JYOLP C8EF;C8EF;110C 116D 11B6;C8EF;110C 116D 11B6; # (죯; 죯; 죯; 죯; 죯; ) HANGUL SYLLABLE JYOLH C8F0;C8F0;110C 116D 11B7;C8F0;110C 116D 11B7; # (죰; 죰; 죰; 죰; 죰; ) HANGUL SYLLABLE JYOM C8F1;C8F1;110C 116D 11B8;C8F1;110C 116D 11B8; # (죱; 죱; 죱; 죱; 죱; ) HANGUL SYLLABLE JYOB C8F2;C8F2;110C 116D 11B9;C8F2;110C 116D 11B9; # (죲; 죲; 죲; 죲; 죲; ) HANGUL SYLLABLE JYOBS C8F3;C8F3;110C 116D 11BA;C8F3;110C 116D 11BA; # (죳; 죳; 죳; 죳; 죳; ) HANGUL SYLLABLE JYOS C8F4;C8F4;110C 116D 11BB;C8F4;110C 116D 11BB; # (죴; 죴; 죴; 죴; 죴; ) HANGUL SYLLABLE JYOSS C8F5;C8F5;110C 116D 11BC;C8F5;110C 116D 11BC; # (죵; 죵; 죵; 죵; 죵; ) HANGUL SYLLABLE JYONG C8F6;C8F6;110C 116D 11BD;C8F6;110C 116D 11BD; # (죶; 죶; 죶; 죶; 죶; ) HANGUL SYLLABLE JYOJ C8F7;C8F7;110C 116D 11BE;C8F7;110C 116D 11BE; # (죷; 죷; 죷; 죷; 죷; ) HANGUL SYLLABLE JYOC C8F8;C8F8;110C 116D 11BF;C8F8;110C 116D 11BF; # (죸; 죸; 죸; 죸; 죸; ) HANGUL SYLLABLE JYOK C8F9;C8F9;110C 116D 11C0;C8F9;110C 116D 11C0; # (죹; 죹; 죹; 죹; 죹; ) HANGUL SYLLABLE JYOT C8FA;C8FA;110C 116D 11C1;C8FA;110C 116D 11C1; # (죺; 죺; 죺; 죺; 죺; ) HANGUL SYLLABLE JYOP C8FB;C8FB;110C 116D 11C2;C8FB;110C 116D 11C2; # (죻; 죻; 죻; 죻; 죻; ) HANGUL SYLLABLE JYOH C8FC;C8FC;110C 116E;C8FC;110C 116E; # (주; 주; 주; 주; 주; ) HANGUL SYLLABLE JU C8FD;C8FD;110C 116E 11A8;C8FD;110C 116E 11A8; # (죽; 죽; 죽; 죽; 죽; ) HANGUL SYLLABLE JUG C8FE;C8FE;110C 116E 11A9;C8FE;110C 116E 11A9; # (죾; 죾; 죾; 죾; 죾; ) HANGUL SYLLABLE JUGG C8FF;C8FF;110C 116E 11AA;C8FF;110C 116E 11AA; # (죿; 죿; 죿; 죿; 죿; ) HANGUL SYLLABLE JUGS C900;C900;110C 116E 11AB;C900;110C 116E 11AB; # (준; 준; 준; 준; 준; ) HANGUL SYLLABLE JUN C901;C901;110C 116E 11AC;C901;110C 116E 11AC; # (줁; 줁; 줁; 줁; 줁; ) HANGUL SYLLABLE JUNJ C902;C902;110C 116E 11AD;C902;110C 116E 11AD; # (줂; 줂; 줂; 줂; 줂; ) HANGUL SYLLABLE JUNH C903;C903;110C 116E 11AE;C903;110C 116E 11AE; # (줃; 줃; 줃; 줃; 줃; ) HANGUL SYLLABLE JUD C904;C904;110C 116E 11AF;C904;110C 116E 11AF; # (줄; 줄; 줄; 줄; 줄; ) HANGUL SYLLABLE JUL C905;C905;110C 116E 11B0;C905;110C 116E 11B0; # (줅; 줅; 줅; 줅; 줅; ) HANGUL SYLLABLE JULG C906;C906;110C 116E 11B1;C906;110C 116E 11B1; # (줆; 줆; 줆; 줆; 줆; ) HANGUL SYLLABLE JULM C907;C907;110C 116E 11B2;C907;110C 116E 11B2; # (줇; 줇; 줇; 줇; 줇; ) HANGUL SYLLABLE JULB C908;C908;110C 116E 11B3;C908;110C 116E 11B3; # (줈; 줈; 줈; 줈; 줈; ) HANGUL SYLLABLE JULS C909;C909;110C 116E 11B4;C909;110C 116E 11B4; # (줉; 줉; 줉; 줉; 줉; ) HANGUL SYLLABLE JULT C90A;C90A;110C 116E 11B5;C90A;110C 116E 11B5; # (줊; 줊; 줊; 줊; 줊; ) HANGUL SYLLABLE JULP C90B;C90B;110C 116E 11B6;C90B;110C 116E 11B6; # (줋; 줋; 줋; 줋; 줋; ) HANGUL SYLLABLE JULH C90C;C90C;110C 116E 11B7;C90C;110C 116E 11B7; # (줌; 줌; 줌; 줌; 줌; ) HANGUL SYLLABLE JUM C90D;C90D;110C 116E 11B8;C90D;110C 116E 11B8; # (줍; 줍; 줍; 줍; 줍; ) HANGUL SYLLABLE JUB C90E;C90E;110C 116E 11B9;C90E;110C 116E 11B9; # (줎; 줎; 줎; 줎; 줎; ) HANGUL SYLLABLE JUBS C90F;C90F;110C 116E 11BA;C90F;110C 116E 11BA; # (줏; 줏; 줏; 줏; 줏; ) HANGUL SYLLABLE JUS C910;C910;110C 116E 11BB;C910;110C 116E 11BB; # (줐; 줐; 줐; 줐; 줐; ) HANGUL SYLLABLE JUSS C911;C911;110C 116E 11BC;C911;110C 116E 11BC; # (중; 중; 중; 중; 중; ) HANGUL SYLLABLE JUNG C912;C912;110C 116E 11BD;C912;110C 116E 11BD; # (줒; 줒; 줒; 줒; 줒; ) HANGUL SYLLABLE JUJ C913;C913;110C 116E 11BE;C913;110C 116E 11BE; # (줓; 줓; 줓; 줓; 줓; ) HANGUL SYLLABLE JUC C914;C914;110C 116E 11BF;C914;110C 116E 11BF; # (줔; 줔; 줔; 줔; 줔; ) HANGUL SYLLABLE JUK C915;C915;110C 116E 11C0;C915;110C 116E 11C0; # (줕; 줕; 줕; 줕; 줕; ) HANGUL SYLLABLE JUT C916;C916;110C 116E 11C1;C916;110C 116E 11C1; # (줖; 줖; 줖; 줖; 줖; ) HANGUL SYLLABLE JUP C917;C917;110C 116E 11C2;C917;110C 116E 11C2; # (줗; 줗; 줗; 줗; 줗; ) HANGUL SYLLABLE JUH C918;C918;110C 116F;C918;110C 116F; # (줘; 줘; 줘; 줘; 줘; ) HANGUL SYLLABLE JWEO C919;C919;110C 116F 11A8;C919;110C 116F 11A8; # (줙; 줙; 줙; 줙; 줙; ) HANGUL SYLLABLE JWEOG C91A;C91A;110C 116F 11A9;C91A;110C 116F 11A9; # (줚; 줚; 줚; 줚; 줚; ) HANGUL SYLLABLE JWEOGG C91B;C91B;110C 116F 11AA;C91B;110C 116F 11AA; # (줛; 줛; 줛; 줛; 줛; ) HANGUL SYLLABLE JWEOGS C91C;C91C;110C 116F 11AB;C91C;110C 116F 11AB; # (줜; 줜; 줜; 줜; 줜; ) HANGUL SYLLABLE JWEON C91D;C91D;110C 116F 11AC;C91D;110C 116F 11AC; # (줝; 줝; 줝; 줝; 줝; ) HANGUL SYLLABLE JWEONJ C91E;C91E;110C 116F 11AD;C91E;110C 116F 11AD; # (줞; 줞; 줞; 줞; 줞; ) HANGUL SYLLABLE JWEONH C91F;C91F;110C 116F 11AE;C91F;110C 116F 11AE; # (줟; 줟; 줟; 줟; 줟; ) HANGUL SYLLABLE JWEOD C920;C920;110C 116F 11AF;C920;110C 116F 11AF; # (줠; 줠; 줠; 줠; 줠; ) HANGUL SYLLABLE JWEOL C921;C921;110C 116F 11B0;C921;110C 116F 11B0; # (줡; 줡; 줡; 줡; 줡; ) HANGUL SYLLABLE JWEOLG C922;C922;110C 116F 11B1;C922;110C 116F 11B1; # (줢; 줢; 줢; 줢; 줢; ) HANGUL SYLLABLE JWEOLM C923;C923;110C 116F 11B2;C923;110C 116F 11B2; # (줣; 줣; 줣; 줣; 줣; ) HANGUL SYLLABLE JWEOLB C924;C924;110C 116F 11B3;C924;110C 116F 11B3; # (줤; 줤; 줤; 줤; 줤; ) HANGUL SYLLABLE JWEOLS C925;C925;110C 116F 11B4;C925;110C 116F 11B4; # (줥; 줥; 줥; 줥; 줥; ) HANGUL SYLLABLE JWEOLT C926;C926;110C 116F 11B5;C926;110C 116F 11B5; # (줦; 줦; 줦; 줦; 줦; ) HANGUL SYLLABLE JWEOLP C927;C927;110C 116F 11B6;C927;110C 116F 11B6; # (줧; 줧; 줧; 줧; 줧; ) HANGUL SYLLABLE JWEOLH C928;C928;110C 116F 11B7;C928;110C 116F 11B7; # (줨; 줨; 줨; 줨; 줨; ) HANGUL SYLLABLE JWEOM C929;C929;110C 116F 11B8;C929;110C 116F 11B8; # (줩; 줩; 줩; 줩; 줩; ) HANGUL SYLLABLE JWEOB C92A;C92A;110C 116F 11B9;C92A;110C 116F 11B9; # (줪; 줪; 줪; 줪; 줪; ) HANGUL SYLLABLE JWEOBS C92B;C92B;110C 116F 11BA;C92B;110C 116F 11BA; # (줫; 줫; 줫; 줫; 줫; ) HANGUL SYLLABLE JWEOS C92C;C92C;110C 116F 11BB;C92C;110C 116F 11BB; # (줬; 줬; 줬; 줬; 줬; ) HANGUL SYLLABLE JWEOSS C92D;C92D;110C 116F 11BC;C92D;110C 116F 11BC; # (줭; 줭; 줭; 줭; 줭; ) HANGUL SYLLABLE JWEONG C92E;C92E;110C 116F 11BD;C92E;110C 116F 11BD; # (줮; 줮; 줮; 줮; 줮; ) HANGUL SYLLABLE JWEOJ C92F;C92F;110C 116F 11BE;C92F;110C 116F 11BE; # (줯; 줯; 줯; 줯; 줯; ) HANGUL SYLLABLE JWEOC C930;C930;110C 116F 11BF;C930;110C 116F 11BF; # (줰; 줰; 줰; 줰; 줰; ) HANGUL SYLLABLE JWEOK C931;C931;110C 116F 11C0;C931;110C 116F 11C0; # (줱; 줱; 줱; 줱; 줱; ) HANGUL SYLLABLE JWEOT C932;C932;110C 116F 11C1;C932;110C 116F 11C1; # (줲; 줲; 줲; 줲; 줲; ) HANGUL SYLLABLE JWEOP C933;C933;110C 116F 11C2;C933;110C 116F 11C2; # (줳; 줳; 줳; 줳; 줳; ) HANGUL SYLLABLE JWEOH C934;C934;110C 1170;C934;110C 1170; # (줴; 줴; 줴; 줴; 줴; ) HANGUL SYLLABLE JWE C935;C935;110C 1170 11A8;C935;110C 1170 11A8; # (줵; 줵; 줵; 줵; 줵; ) HANGUL SYLLABLE JWEG C936;C936;110C 1170 11A9;C936;110C 1170 11A9; # (줶; 줶; 줶; 줶; 줶; ) HANGUL SYLLABLE JWEGG C937;C937;110C 1170 11AA;C937;110C 1170 11AA; # (줷; 줷; 줷; 줷; 줷; ) HANGUL SYLLABLE JWEGS C938;C938;110C 1170 11AB;C938;110C 1170 11AB; # (줸; 줸; 줸; 줸; 줸; ) HANGUL SYLLABLE JWEN C939;C939;110C 1170 11AC;C939;110C 1170 11AC; # (줹; 줹; 줹; 줹; 줹; ) HANGUL SYLLABLE JWENJ C93A;C93A;110C 1170 11AD;C93A;110C 1170 11AD; # (줺; 줺; 줺; 줺; 줺; ) HANGUL SYLLABLE JWENH C93B;C93B;110C 1170 11AE;C93B;110C 1170 11AE; # (줻; 줻; 줻; 줻; 줻; ) HANGUL SYLLABLE JWED C93C;C93C;110C 1170 11AF;C93C;110C 1170 11AF; # (줼; 줼; 줼; 줼; 줼; ) HANGUL SYLLABLE JWEL C93D;C93D;110C 1170 11B0;C93D;110C 1170 11B0; # (줽; 줽; 줽; 줽; 줽; ) HANGUL SYLLABLE JWELG C93E;C93E;110C 1170 11B1;C93E;110C 1170 11B1; # (줾; 줾; 줾; 줾; 줾; ) HANGUL SYLLABLE JWELM C93F;C93F;110C 1170 11B2;C93F;110C 1170 11B2; # (줿; 줿; 줿; 줿; 줿; ) HANGUL SYLLABLE JWELB C940;C940;110C 1170 11B3;C940;110C 1170 11B3; # (쥀; 쥀; 쥀; 쥀; 쥀; ) HANGUL SYLLABLE JWELS C941;C941;110C 1170 11B4;C941;110C 1170 11B4; # (쥁; 쥁; 쥁; 쥁; 쥁; ) HANGUL SYLLABLE JWELT C942;C942;110C 1170 11B5;C942;110C 1170 11B5; # (쥂; 쥂; 쥂; 쥂; 쥂; ) HANGUL SYLLABLE JWELP C943;C943;110C 1170 11B6;C943;110C 1170 11B6; # (쥃; 쥃; 쥃; 쥃; 쥃; ) HANGUL SYLLABLE JWELH C944;C944;110C 1170 11B7;C944;110C 1170 11B7; # (쥄; 쥄; 쥄; 쥄; 쥄; ) HANGUL SYLLABLE JWEM C945;C945;110C 1170 11B8;C945;110C 1170 11B8; # (쥅; 쥅; 쥅; 쥅; 쥅; ) HANGUL SYLLABLE JWEB C946;C946;110C 1170 11B9;C946;110C 1170 11B9; # (쥆; 쥆; 쥆; 쥆; 쥆; ) HANGUL SYLLABLE JWEBS C947;C947;110C 1170 11BA;C947;110C 1170 11BA; # (쥇; 쥇; 쥇; 쥇; 쥇; ) HANGUL SYLLABLE JWES C948;C948;110C 1170 11BB;C948;110C 1170 11BB; # (쥈; 쥈; 쥈; 쥈; 쥈; ) HANGUL SYLLABLE JWESS C949;C949;110C 1170 11BC;C949;110C 1170 11BC; # (쥉; 쥉; 쥉; 쥉; 쥉; ) HANGUL SYLLABLE JWENG C94A;C94A;110C 1170 11BD;C94A;110C 1170 11BD; # (쥊; 쥊; 쥊; 쥊; 쥊; ) HANGUL SYLLABLE JWEJ C94B;C94B;110C 1170 11BE;C94B;110C 1170 11BE; # (쥋; 쥋; 쥋; 쥋; 쥋; ) HANGUL SYLLABLE JWEC C94C;C94C;110C 1170 11BF;C94C;110C 1170 11BF; # (쥌; 쥌; 쥌; 쥌; 쥌; ) HANGUL SYLLABLE JWEK C94D;C94D;110C 1170 11C0;C94D;110C 1170 11C0; # (쥍; 쥍; 쥍; 쥍; 쥍; ) HANGUL SYLLABLE JWET C94E;C94E;110C 1170 11C1;C94E;110C 1170 11C1; # (쥎; 쥎; 쥎; 쥎; 쥎; ) HANGUL SYLLABLE JWEP C94F;C94F;110C 1170 11C2;C94F;110C 1170 11C2; # (쥏; 쥏; 쥏; 쥏; 쥏; ) HANGUL SYLLABLE JWEH C950;C950;110C 1171;C950;110C 1171; # (쥐; 쥐; 쥐; 쥐; 쥐; ) HANGUL SYLLABLE JWI C951;C951;110C 1171 11A8;C951;110C 1171 11A8; # (쥑; 쥑; 쥑; 쥑; 쥑; ) HANGUL SYLLABLE JWIG C952;C952;110C 1171 11A9;C952;110C 1171 11A9; # (쥒; 쥒; 쥒; 쥒; 쥒; ) HANGUL SYLLABLE JWIGG C953;C953;110C 1171 11AA;C953;110C 1171 11AA; # (쥓; 쥓; 쥓; 쥓; 쥓; ) HANGUL SYLLABLE JWIGS C954;C954;110C 1171 11AB;C954;110C 1171 11AB; # (쥔; 쥔; 쥔; 쥔; 쥔; ) HANGUL SYLLABLE JWIN C955;C955;110C 1171 11AC;C955;110C 1171 11AC; # (쥕; 쥕; 쥕; 쥕; 쥕; ) HANGUL SYLLABLE JWINJ C956;C956;110C 1171 11AD;C956;110C 1171 11AD; # (쥖; 쥖; 쥖; 쥖; 쥖; ) HANGUL SYLLABLE JWINH C957;C957;110C 1171 11AE;C957;110C 1171 11AE; # (쥗; 쥗; 쥗; 쥗; 쥗; ) HANGUL SYLLABLE JWID C958;C958;110C 1171 11AF;C958;110C 1171 11AF; # (쥘; 쥘; 쥘; 쥘; 쥘; ) HANGUL SYLLABLE JWIL C959;C959;110C 1171 11B0;C959;110C 1171 11B0; # (쥙; 쥙; 쥙; 쥙; 쥙; ) HANGUL SYLLABLE JWILG C95A;C95A;110C 1171 11B1;C95A;110C 1171 11B1; # (쥚; 쥚; 쥚; 쥚; 쥚; ) HANGUL SYLLABLE JWILM C95B;C95B;110C 1171 11B2;C95B;110C 1171 11B2; # (쥛; 쥛; 쥛; 쥛; 쥛; ) HANGUL SYLLABLE JWILB C95C;C95C;110C 1171 11B3;C95C;110C 1171 11B3; # (쥜; 쥜; 쥜; 쥜; 쥜; ) HANGUL SYLLABLE JWILS C95D;C95D;110C 1171 11B4;C95D;110C 1171 11B4; # (쥝; 쥝; 쥝; 쥝; 쥝; ) HANGUL SYLLABLE JWILT C95E;C95E;110C 1171 11B5;C95E;110C 1171 11B5; # (쥞; 쥞; 쥞; 쥞; 쥞; ) HANGUL SYLLABLE JWILP C95F;C95F;110C 1171 11B6;C95F;110C 1171 11B6; # (쥟; 쥟; 쥟; 쥟; 쥟; ) HANGUL SYLLABLE JWILH C960;C960;110C 1171 11B7;C960;110C 1171 11B7; # (쥠; 쥠; 쥠; 쥠; 쥠; ) HANGUL SYLLABLE JWIM C961;C961;110C 1171 11B8;C961;110C 1171 11B8; # (쥡; 쥡; 쥡; 쥡; 쥡; ) HANGUL SYLLABLE JWIB C962;C962;110C 1171 11B9;C962;110C 1171 11B9; # (쥢; 쥢; 쥢; 쥢; 쥢; ) HANGUL SYLLABLE JWIBS C963;C963;110C 1171 11BA;C963;110C 1171 11BA; # (쥣; 쥣; 쥣; 쥣; 쥣; ) HANGUL SYLLABLE JWIS C964;C964;110C 1171 11BB;C964;110C 1171 11BB; # (쥤; 쥤; 쥤; 쥤; 쥤; ) HANGUL SYLLABLE JWISS C965;C965;110C 1171 11BC;C965;110C 1171 11BC; # (쥥; 쥥; 쥥; 쥥; 쥥; ) HANGUL SYLLABLE JWING C966;C966;110C 1171 11BD;C966;110C 1171 11BD; # (쥦; 쥦; 쥦; 쥦; 쥦; ) HANGUL SYLLABLE JWIJ C967;C967;110C 1171 11BE;C967;110C 1171 11BE; # (쥧; 쥧; 쥧; 쥧; 쥧; ) HANGUL SYLLABLE JWIC C968;C968;110C 1171 11BF;C968;110C 1171 11BF; # (쥨; 쥨; 쥨; 쥨; 쥨; ) HANGUL SYLLABLE JWIK C969;C969;110C 1171 11C0;C969;110C 1171 11C0; # (쥩; 쥩; 쥩; 쥩; 쥩; ) HANGUL SYLLABLE JWIT C96A;C96A;110C 1171 11C1;C96A;110C 1171 11C1; # (쥪; 쥪; 쥪; 쥪; 쥪; ) HANGUL SYLLABLE JWIP C96B;C96B;110C 1171 11C2;C96B;110C 1171 11C2; # (쥫; 쥫; 쥫; 쥫; 쥫; ) HANGUL SYLLABLE JWIH C96C;C96C;110C 1172;C96C;110C 1172; # (쥬; 쥬; 쥬; 쥬; 쥬; ) HANGUL SYLLABLE JYU C96D;C96D;110C 1172 11A8;C96D;110C 1172 11A8; # (쥭; 쥭; 쥭; 쥭; 쥭; ) HANGUL SYLLABLE JYUG C96E;C96E;110C 1172 11A9;C96E;110C 1172 11A9; # (쥮; 쥮; 쥮; 쥮; 쥮; ) HANGUL SYLLABLE JYUGG C96F;C96F;110C 1172 11AA;C96F;110C 1172 11AA; # (쥯; 쥯; 쥯; 쥯; 쥯; ) HANGUL SYLLABLE JYUGS C970;C970;110C 1172 11AB;C970;110C 1172 11AB; # (쥰; 쥰; 쥰; 쥰; 쥰; ) HANGUL SYLLABLE JYUN C971;C971;110C 1172 11AC;C971;110C 1172 11AC; # (쥱; 쥱; 쥱; 쥱; 쥱; ) HANGUL SYLLABLE JYUNJ C972;C972;110C 1172 11AD;C972;110C 1172 11AD; # (쥲; 쥲; 쥲; 쥲; 쥲; ) HANGUL SYLLABLE JYUNH C973;C973;110C 1172 11AE;C973;110C 1172 11AE; # (쥳; 쥳; 쥳; 쥳; 쥳; ) HANGUL SYLLABLE JYUD C974;C974;110C 1172 11AF;C974;110C 1172 11AF; # (쥴; 쥴; 쥴; 쥴; 쥴; ) HANGUL SYLLABLE JYUL C975;C975;110C 1172 11B0;C975;110C 1172 11B0; # (쥵; 쥵; 쥵; 쥵; 쥵; ) HANGUL SYLLABLE JYULG C976;C976;110C 1172 11B1;C976;110C 1172 11B1; # (쥶; 쥶; 쥶; 쥶; 쥶; ) HANGUL SYLLABLE JYULM C977;C977;110C 1172 11B2;C977;110C 1172 11B2; # (쥷; 쥷; 쥷; 쥷; 쥷; ) HANGUL SYLLABLE JYULB C978;C978;110C 1172 11B3;C978;110C 1172 11B3; # (쥸; 쥸; 쥸; 쥸; 쥸; ) HANGUL SYLLABLE JYULS C979;C979;110C 1172 11B4;C979;110C 1172 11B4; # (쥹; 쥹; 쥹; 쥹; 쥹; ) HANGUL SYLLABLE JYULT C97A;C97A;110C 1172 11B5;C97A;110C 1172 11B5; # (쥺; 쥺; 쥺; 쥺; 쥺; ) HANGUL SYLLABLE JYULP C97B;C97B;110C 1172 11B6;C97B;110C 1172 11B6; # (쥻; 쥻; 쥻; 쥻; 쥻; ) HANGUL SYLLABLE JYULH C97C;C97C;110C 1172 11B7;C97C;110C 1172 11B7; # (쥼; 쥼; 쥼; 쥼; 쥼; ) HANGUL SYLLABLE JYUM C97D;C97D;110C 1172 11B8;C97D;110C 1172 11B8; # (쥽; 쥽; 쥽; 쥽; 쥽; ) HANGUL SYLLABLE JYUB C97E;C97E;110C 1172 11B9;C97E;110C 1172 11B9; # (쥾; 쥾; 쥾; 쥾; 쥾; ) HANGUL SYLLABLE JYUBS C97F;C97F;110C 1172 11BA;C97F;110C 1172 11BA; # (쥿; 쥿; 쥿; 쥿; 쥿; ) HANGUL SYLLABLE JYUS C980;C980;110C 1172 11BB;C980;110C 1172 11BB; # (즀; 즀; 즀; 즀; 즀; ) HANGUL SYLLABLE JYUSS C981;C981;110C 1172 11BC;C981;110C 1172 11BC; # (즁; 즁; 즁; 즁; 즁; ) HANGUL SYLLABLE JYUNG C982;C982;110C 1172 11BD;C982;110C 1172 11BD; # (즂; 즂; 즂; 즂; 즂; ) HANGUL SYLLABLE JYUJ C983;C983;110C 1172 11BE;C983;110C 1172 11BE; # (즃; 즃; 즃; 즃; 즃; ) HANGUL SYLLABLE JYUC C984;C984;110C 1172 11BF;C984;110C 1172 11BF; # (즄; 즄; 즄; 즄; 즄; ) HANGUL SYLLABLE JYUK C985;C985;110C 1172 11C0;C985;110C 1172 11C0; # (즅; 즅; 즅; 즅; 즅; ) HANGUL SYLLABLE JYUT C986;C986;110C 1172 11C1;C986;110C 1172 11C1; # (즆; 즆; 즆; 즆; 즆; ) HANGUL SYLLABLE JYUP C987;C987;110C 1172 11C2;C987;110C 1172 11C2; # (즇; 즇; 즇; 즇; 즇; ) HANGUL SYLLABLE JYUH C988;C988;110C 1173;C988;110C 1173; # (즈; 즈; 즈; 즈; 즈; ) HANGUL SYLLABLE JEU C989;C989;110C 1173 11A8;C989;110C 1173 11A8; # (즉; 즉; 즉; 즉; 즉; ) HANGUL SYLLABLE JEUG C98A;C98A;110C 1173 11A9;C98A;110C 1173 11A9; # (즊; 즊; 즊; 즊; 즊; ) HANGUL SYLLABLE JEUGG C98B;C98B;110C 1173 11AA;C98B;110C 1173 11AA; # (즋; 즋; 즋; 즋; 즋; ) HANGUL SYLLABLE JEUGS C98C;C98C;110C 1173 11AB;C98C;110C 1173 11AB; # (즌; 즌; 즌; 즌; 즌; ) HANGUL SYLLABLE JEUN C98D;C98D;110C 1173 11AC;C98D;110C 1173 11AC; # (즍; 즍; 즍; 즍; 즍; ) HANGUL SYLLABLE JEUNJ C98E;C98E;110C 1173 11AD;C98E;110C 1173 11AD; # (즎; 즎; 즎; 즎; 즎; ) HANGUL SYLLABLE JEUNH C98F;C98F;110C 1173 11AE;C98F;110C 1173 11AE; # (즏; 즏; 즏; 즏; 즏; ) HANGUL SYLLABLE JEUD C990;C990;110C 1173 11AF;C990;110C 1173 11AF; # (즐; 즐; 즐; 즐; 즐; ) HANGUL SYLLABLE JEUL C991;C991;110C 1173 11B0;C991;110C 1173 11B0; # (즑; 즑; 즑; 즑; 즑; ) HANGUL SYLLABLE JEULG C992;C992;110C 1173 11B1;C992;110C 1173 11B1; # (즒; 즒; 즒; 즒; 즒; ) HANGUL SYLLABLE JEULM C993;C993;110C 1173 11B2;C993;110C 1173 11B2; # (즓; 즓; 즓; 즓; 즓; ) HANGUL SYLLABLE JEULB C994;C994;110C 1173 11B3;C994;110C 1173 11B3; # (즔; 즔; 즔; 즔; 즔; ) HANGUL SYLLABLE JEULS C995;C995;110C 1173 11B4;C995;110C 1173 11B4; # (즕; 즕; 즕; 즕; 즕; ) HANGUL SYLLABLE JEULT C996;C996;110C 1173 11B5;C996;110C 1173 11B5; # (즖; 즖; 즖; 즖; 즖; ) HANGUL SYLLABLE JEULP C997;C997;110C 1173 11B6;C997;110C 1173 11B6; # (즗; 즗; 즗; 즗; 즗; ) HANGUL SYLLABLE JEULH C998;C998;110C 1173 11B7;C998;110C 1173 11B7; # (즘; 즘; 즘; 즘; 즘; ) HANGUL SYLLABLE JEUM C999;C999;110C 1173 11B8;C999;110C 1173 11B8; # (즙; 즙; 즙; 즙; 즙; ) HANGUL SYLLABLE JEUB C99A;C99A;110C 1173 11B9;C99A;110C 1173 11B9; # (즚; 즚; 즚; 즚; 즚; ) HANGUL SYLLABLE JEUBS C99B;C99B;110C 1173 11BA;C99B;110C 1173 11BA; # (즛; 즛; 즛; 즛; 즛; ) HANGUL SYLLABLE JEUS C99C;C99C;110C 1173 11BB;C99C;110C 1173 11BB; # (즜; 즜; 즜; 즜; 즜; ) HANGUL SYLLABLE JEUSS C99D;C99D;110C 1173 11BC;C99D;110C 1173 11BC; # (증; 증; 증; 증; 증; ) HANGUL SYLLABLE JEUNG C99E;C99E;110C 1173 11BD;C99E;110C 1173 11BD; # (즞; 즞; 즞; 즞; 즞; ) HANGUL SYLLABLE JEUJ C99F;C99F;110C 1173 11BE;C99F;110C 1173 11BE; # (즟; 즟; 즟; 즟; 즟; ) HANGUL SYLLABLE JEUC C9A0;C9A0;110C 1173 11BF;C9A0;110C 1173 11BF; # (즠; 즠; 즠; 즠; 즠; ) HANGUL SYLLABLE JEUK C9A1;C9A1;110C 1173 11C0;C9A1;110C 1173 11C0; # (즡; 즡; 즡; 즡; 즡; ) HANGUL SYLLABLE JEUT C9A2;C9A2;110C 1173 11C1;C9A2;110C 1173 11C1; # (즢; 즢; 즢; 즢; 즢; ) HANGUL SYLLABLE JEUP C9A3;C9A3;110C 1173 11C2;C9A3;110C 1173 11C2; # (즣; 즣; 즣; 즣; 즣; ) HANGUL SYLLABLE JEUH C9A4;C9A4;110C 1174;C9A4;110C 1174; # (즤; 즤; 즤; 즤; 즤; ) HANGUL SYLLABLE JYI C9A5;C9A5;110C 1174 11A8;C9A5;110C 1174 11A8; # (즥; 즥; 즥; 즥; 즥; ) HANGUL SYLLABLE JYIG C9A6;C9A6;110C 1174 11A9;C9A6;110C 1174 11A9; # (즦; 즦; 즦; 즦; 즦; ) HANGUL SYLLABLE JYIGG C9A7;C9A7;110C 1174 11AA;C9A7;110C 1174 11AA; # (즧; 즧; 즧; 즧; 즧; ) HANGUL SYLLABLE JYIGS C9A8;C9A8;110C 1174 11AB;C9A8;110C 1174 11AB; # (즨; 즨; 즨; 즨; 즨; ) HANGUL SYLLABLE JYIN C9A9;C9A9;110C 1174 11AC;C9A9;110C 1174 11AC; # (즩; 즩; 즩; 즩; 즩; ) HANGUL SYLLABLE JYINJ C9AA;C9AA;110C 1174 11AD;C9AA;110C 1174 11AD; # (즪; 즪; 즪; 즪; 즪; ) HANGUL SYLLABLE JYINH C9AB;C9AB;110C 1174 11AE;C9AB;110C 1174 11AE; # (즫; 즫; 즫; 즫; 즫; ) HANGUL SYLLABLE JYID C9AC;C9AC;110C 1174 11AF;C9AC;110C 1174 11AF; # (즬; 즬; 즬; 즬; 즬; ) HANGUL SYLLABLE JYIL C9AD;C9AD;110C 1174 11B0;C9AD;110C 1174 11B0; # (즭; 즭; 즭; 즭; 즭; ) HANGUL SYLLABLE JYILG C9AE;C9AE;110C 1174 11B1;C9AE;110C 1174 11B1; # (즮; 즮; 즮; 즮; 즮; ) HANGUL SYLLABLE JYILM C9AF;C9AF;110C 1174 11B2;C9AF;110C 1174 11B2; # (즯; 즯; 즯; 즯; 즯; ) HANGUL SYLLABLE JYILB C9B0;C9B0;110C 1174 11B3;C9B0;110C 1174 11B3; # (즰; 즰; 즰; 즰; 즰; ) HANGUL SYLLABLE JYILS C9B1;C9B1;110C 1174 11B4;C9B1;110C 1174 11B4; # (즱; 즱; 즱; 즱; 즱; ) HANGUL SYLLABLE JYILT C9B2;C9B2;110C 1174 11B5;C9B2;110C 1174 11B5; # (즲; 즲; 즲; 즲; 즲; ) HANGUL SYLLABLE JYILP C9B3;C9B3;110C 1174 11B6;C9B3;110C 1174 11B6; # (즳; 즳; 즳; 즳; 즳; ) HANGUL SYLLABLE JYILH C9B4;C9B4;110C 1174 11B7;C9B4;110C 1174 11B7; # (즴; 즴; 즴; 즴; 즴; ) HANGUL SYLLABLE JYIM C9B5;C9B5;110C 1174 11B8;C9B5;110C 1174 11B8; # (즵; 즵; 즵; 즵; 즵; ) HANGUL SYLLABLE JYIB C9B6;C9B6;110C 1174 11B9;C9B6;110C 1174 11B9; # (즶; 즶; 즶; 즶; 즶; ) HANGUL SYLLABLE JYIBS C9B7;C9B7;110C 1174 11BA;C9B7;110C 1174 11BA; # (즷; 즷; 즷; 즷; 즷; ) HANGUL SYLLABLE JYIS C9B8;C9B8;110C 1174 11BB;C9B8;110C 1174 11BB; # (즸; 즸; 즸; 즸; 즸; ) HANGUL SYLLABLE JYISS C9B9;C9B9;110C 1174 11BC;C9B9;110C 1174 11BC; # (즹; 즹; 즹; 즹; 즹; ) HANGUL SYLLABLE JYING C9BA;C9BA;110C 1174 11BD;C9BA;110C 1174 11BD; # (즺; 즺; 즺; 즺; 즺; ) HANGUL SYLLABLE JYIJ C9BB;C9BB;110C 1174 11BE;C9BB;110C 1174 11BE; # (즻; 즻; 즻; 즻; 즻; ) HANGUL SYLLABLE JYIC C9BC;C9BC;110C 1174 11BF;C9BC;110C 1174 11BF; # (즼; 즼; 즼; 즼; 즼; ) HANGUL SYLLABLE JYIK C9BD;C9BD;110C 1174 11C0;C9BD;110C 1174 11C0; # (즽; 즽; 즽; 즽; 즽; ) HANGUL SYLLABLE JYIT C9BE;C9BE;110C 1174 11C1;C9BE;110C 1174 11C1; # (즾; 즾; 즾; 즾; 즾; ) HANGUL SYLLABLE JYIP C9BF;C9BF;110C 1174 11C2;C9BF;110C 1174 11C2; # (즿; 즿; 즿; 즿; 즿; ) HANGUL SYLLABLE JYIH C9C0;C9C0;110C 1175;C9C0;110C 1175; # (지; 지; 지; 지; 지; ) HANGUL SYLLABLE JI C9C1;C9C1;110C 1175 11A8;C9C1;110C 1175 11A8; # (직; 직; 직; 직; 직; ) HANGUL SYLLABLE JIG C9C2;C9C2;110C 1175 11A9;C9C2;110C 1175 11A9; # (짂; 짂; 짂; 짂; 짂; ) HANGUL SYLLABLE JIGG C9C3;C9C3;110C 1175 11AA;C9C3;110C 1175 11AA; # (짃; 짃; 짃; 짃; 짃; ) HANGUL SYLLABLE JIGS C9C4;C9C4;110C 1175 11AB;C9C4;110C 1175 11AB; # (진; 진; 진; 진; 진; ) HANGUL SYLLABLE JIN C9C5;C9C5;110C 1175 11AC;C9C5;110C 1175 11AC; # (짅; 짅; 짅; 짅; 짅; ) HANGUL SYLLABLE JINJ C9C6;C9C6;110C 1175 11AD;C9C6;110C 1175 11AD; # (짆; 짆; 짆; 짆; 짆; ) HANGUL SYLLABLE JINH C9C7;C9C7;110C 1175 11AE;C9C7;110C 1175 11AE; # (짇; 짇; 짇; 짇; 짇; ) HANGUL SYLLABLE JID C9C8;C9C8;110C 1175 11AF;C9C8;110C 1175 11AF; # (질; 질; 질; 질; 질; ) HANGUL SYLLABLE JIL C9C9;C9C9;110C 1175 11B0;C9C9;110C 1175 11B0; # (짉; 짉; 짉; 짉; 짉; ) HANGUL SYLLABLE JILG C9CA;C9CA;110C 1175 11B1;C9CA;110C 1175 11B1; # (짊; 짊; 짊; 짊; 짊; ) HANGUL SYLLABLE JILM C9CB;C9CB;110C 1175 11B2;C9CB;110C 1175 11B2; # (짋; 짋; 짋; 짋; 짋; ) HANGUL SYLLABLE JILB C9CC;C9CC;110C 1175 11B3;C9CC;110C 1175 11B3; # (짌; 짌; 짌; 짌; 짌; ) HANGUL SYLLABLE JILS C9CD;C9CD;110C 1175 11B4;C9CD;110C 1175 11B4; # (짍; 짍; 짍; 짍; 짍; ) HANGUL SYLLABLE JILT C9CE;C9CE;110C 1175 11B5;C9CE;110C 1175 11B5; # (짎; 짎; 짎; 짎; 짎; ) HANGUL SYLLABLE JILP C9CF;C9CF;110C 1175 11B6;C9CF;110C 1175 11B6; # (짏; 짏; 짏; 짏; 짏; ) HANGUL SYLLABLE JILH C9D0;C9D0;110C 1175 11B7;C9D0;110C 1175 11B7; # (짐; 짐; 짐; 짐; 짐; ) HANGUL SYLLABLE JIM C9D1;C9D1;110C 1175 11B8;C9D1;110C 1175 11B8; # (집; 집; 집; 집; 집; ) HANGUL SYLLABLE JIB C9D2;C9D2;110C 1175 11B9;C9D2;110C 1175 11B9; # (짒; 짒; 짒; 짒; 짒; ) HANGUL SYLLABLE JIBS C9D3;C9D3;110C 1175 11BA;C9D3;110C 1175 11BA; # (짓; 짓; 짓; 짓; 짓; ) HANGUL SYLLABLE JIS C9D4;C9D4;110C 1175 11BB;C9D4;110C 1175 11BB; # (짔; 짔; 짔; 짔; 짔; ) HANGUL SYLLABLE JISS C9D5;C9D5;110C 1175 11BC;C9D5;110C 1175 11BC; # (징; 징; 징; 징; 징; ) HANGUL SYLLABLE JING C9D6;C9D6;110C 1175 11BD;C9D6;110C 1175 11BD; # (짖; 짖; 짖; 짖; 짖; ) HANGUL SYLLABLE JIJ C9D7;C9D7;110C 1175 11BE;C9D7;110C 1175 11BE; # (짗; 짗; 짗; 짗; 짗; ) HANGUL SYLLABLE JIC C9D8;C9D8;110C 1175 11BF;C9D8;110C 1175 11BF; # (짘; 짘; 짘; 짘; 짘; ) HANGUL SYLLABLE JIK C9D9;C9D9;110C 1175 11C0;C9D9;110C 1175 11C0; # (짙; 짙; 짙; 짙; 짙; ) HANGUL SYLLABLE JIT C9DA;C9DA;110C 1175 11C1;C9DA;110C 1175 11C1; # (짚; 짚; 짚; 짚; 짚; ) HANGUL SYLLABLE JIP C9DB;C9DB;110C 1175 11C2;C9DB;110C 1175 11C2; # (짛; 짛; 짛; 짛; 짛; ) HANGUL SYLLABLE JIH C9DC;C9DC;110D 1161;C9DC;110D 1161; # (짜; 짜; 짜; 짜; 짜; ) HANGUL SYLLABLE JJA C9DD;C9DD;110D 1161 11A8;C9DD;110D 1161 11A8; # (짝; 짝; 짝; 짝; 짝; ) HANGUL SYLLABLE JJAG C9DE;C9DE;110D 1161 11A9;C9DE;110D 1161 11A9; # (짞; 짞; 짞; 짞; 짞; ) HANGUL SYLLABLE JJAGG C9DF;C9DF;110D 1161 11AA;C9DF;110D 1161 11AA; # (짟; 짟; 짟; 짟; 짟; ) HANGUL SYLLABLE JJAGS C9E0;C9E0;110D 1161 11AB;C9E0;110D 1161 11AB; # (짠; 짠; 짠; 짠; 짠; ) HANGUL SYLLABLE JJAN C9E1;C9E1;110D 1161 11AC;C9E1;110D 1161 11AC; # (짡; 짡; 짡; 짡; 짡; ) HANGUL SYLLABLE JJANJ C9E2;C9E2;110D 1161 11AD;C9E2;110D 1161 11AD; # (짢; 짢; 짢; 짢; 짢; ) HANGUL SYLLABLE JJANH C9E3;C9E3;110D 1161 11AE;C9E3;110D 1161 11AE; # (짣; 짣; 짣; 짣; 짣; ) HANGUL SYLLABLE JJAD C9E4;C9E4;110D 1161 11AF;C9E4;110D 1161 11AF; # (짤; 짤; 짤; 짤; 짤; ) HANGUL SYLLABLE JJAL C9E5;C9E5;110D 1161 11B0;C9E5;110D 1161 11B0; # (짥; 짥; 짥; 짥; 짥; ) HANGUL SYLLABLE JJALG C9E6;C9E6;110D 1161 11B1;C9E6;110D 1161 11B1; # (짦; 짦; 짦; 짦; 짦; ) HANGUL SYLLABLE JJALM C9E7;C9E7;110D 1161 11B2;C9E7;110D 1161 11B2; # (짧; 짧; 짧; 짧; 짧; ) HANGUL SYLLABLE JJALB C9E8;C9E8;110D 1161 11B3;C9E8;110D 1161 11B3; # (짨; 짨; 짨; 짨; 짨; ) HANGUL SYLLABLE JJALS C9E9;C9E9;110D 1161 11B4;C9E9;110D 1161 11B4; # (짩; 짩; 짩; 짩; 짩; ) HANGUL SYLLABLE JJALT C9EA;C9EA;110D 1161 11B5;C9EA;110D 1161 11B5; # (짪; 짪; 짪; 짪; 짪; ) HANGUL SYLLABLE JJALP C9EB;C9EB;110D 1161 11B6;C9EB;110D 1161 11B6; # (짫; 짫; 짫; 짫; 짫; ) HANGUL SYLLABLE JJALH C9EC;C9EC;110D 1161 11B7;C9EC;110D 1161 11B7; # (짬; 짬; 짬; 짬; 짬; ) HANGUL SYLLABLE JJAM C9ED;C9ED;110D 1161 11B8;C9ED;110D 1161 11B8; # (짭; 짭; 짭; 짭; 짭; ) HANGUL SYLLABLE JJAB C9EE;C9EE;110D 1161 11B9;C9EE;110D 1161 11B9; # (짮; 짮; 짮; 짮; 짮; ) HANGUL SYLLABLE JJABS C9EF;C9EF;110D 1161 11BA;C9EF;110D 1161 11BA; # (짯; 짯; 짯; 짯; 짯; ) HANGUL SYLLABLE JJAS C9F0;C9F0;110D 1161 11BB;C9F0;110D 1161 11BB; # (짰; 짰; 짰; 짰; 짰; ) HANGUL SYLLABLE JJASS C9F1;C9F1;110D 1161 11BC;C9F1;110D 1161 11BC; # (짱; 짱; 짱; 짱; 짱; ) HANGUL SYLLABLE JJANG C9F2;C9F2;110D 1161 11BD;C9F2;110D 1161 11BD; # (짲; 짲; 짲; 짲; 짲; ) HANGUL SYLLABLE JJAJ C9F3;C9F3;110D 1161 11BE;C9F3;110D 1161 11BE; # (짳; 짳; 짳; 짳; 짳; ) HANGUL SYLLABLE JJAC C9F4;C9F4;110D 1161 11BF;C9F4;110D 1161 11BF; # (짴; 짴; 짴; 짴; 짴; ) HANGUL SYLLABLE JJAK C9F5;C9F5;110D 1161 11C0;C9F5;110D 1161 11C0; # (짵; 짵; 짵; 짵; 짵; ) HANGUL SYLLABLE JJAT C9F6;C9F6;110D 1161 11C1;C9F6;110D 1161 11C1; # (짶; 짶; 짶; 짶; 짶; ) HANGUL SYLLABLE JJAP C9F7;C9F7;110D 1161 11C2;C9F7;110D 1161 11C2; # (짷; 짷; 짷; 짷; 짷; ) HANGUL SYLLABLE JJAH C9F8;C9F8;110D 1162;C9F8;110D 1162; # (째; 째; 째; 째; 째; ) HANGUL SYLLABLE JJAE C9F9;C9F9;110D 1162 11A8;C9F9;110D 1162 11A8; # (짹; 짹; 짹; 짹; 짹; ) HANGUL SYLLABLE JJAEG C9FA;C9FA;110D 1162 11A9;C9FA;110D 1162 11A9; # (짺; 짺; 짺; 짺; 짺; ) HANGUL SYLLABLE JJAEGG C9FB;C9FB;110D 1162 11AA;C9FB;110D 1162 11AA; # (짻; 짻; 짻; 짻; 짻; ) HANGUL SYLLABLE JJAEGS C9FC;C9FC;110D 1162 11AB;C9FC;110D 1162 11AB; # (짼; 짼; 짼; 짼; 짼; ) HANGUL SYLLABLE JJAEN C9FD;C9FD;110D 1162 11AC;C9FD;110D 1162 11AC; # (짽; 짽; 짽; 짽; 짽; ) HANGUL SYLLABLE JJAENJ C9FE;C9FE;110D 1162 11AD;C9FE;110D 1162 11AD; # (짾; 짾; 짾; 짾; 짾; ) HANGUL SYLLABLE JJAENH C9FF;C9FF;110D 1162 11AE;C9FF;110D 1162 11AE; # (짿; 짿; 짿; 짿; 짿; ) HANGUL SYLLABLE JJAED CA00;CA00;110D 1162 11AF;CA00;110D 1162 11AF; # (쨀; 쨀; 쨀; 쨀; 쨀; ) HANGUL SYLLABLE JJAEL CA01;CA01;110D 1162 11B0;CA01;110D 1162 11B0; # (쨁; 쨁; 쨁; 쨁; 쨁; ) HANGUL SYLLABLE JJAELG CA02;CA02;110D 1162 11B1;CA02;110D 1162 11B1; # (쨂; 쨂; 쨂; 쨂; 쨂; ) HANGUL SYLLABLE JJAELM CA03;CA03;110D 1162 11B2;CA03;110D 1162 11B2; # (쨃; 쨃; 쨃; 쨃; 쨃; ) HANGUL SYLLABLE JJAELB CA04;CA04;110D 1162 11B3;CA04;110D 1162 11B3; # (쨄; 쨄; 쨄; 쨄; 쨄; ) HANGUL SYLLABLE JJAELS CA05;CA05;110D 1162 11B4;CA05;110D 1162 11B4; # (쨅; 쨅; 쨅; 쨅; 쨅; ) HANGUL SYLLABLE JJAELT CA06;CA06;110D 1162 11B5;CA06;110D 1162 11B5; # (쨆; 쨆; 쨆; 쨆; 쨆; ) HANGUL SYLLABLE JJAELP CA07;CA07;110D 1162 11B6;CA07;110D 1162 11B6; # (쨇; 쨇; 쨇; 쨇; 쨇; ) HANGUL SYLLABLE JJAELH CA08;CA08;110D 1162 11B7;CA08;110D 1162 11B7; # (쨈; 쨈; 쨈; 쨈; 쨈; ) HANGUL SYLLABLE JJAEM CA09;CA09;110D 1162 11B8;CA09;110D 1162 11B8; # (쨉; 쨉; 쨉; 쨉; 쨉; ) HANGUL SYLLABLE JJAEB CA0A;CA0A;110D 1162 11B9;CA0A;110D 1162 11B9; # (쨊; 쨊; 쨊; 쨊; 쨊; ) HANGUL SYLLABLE JJAEBS CA0B;CA0B;110D 1162 11BA;CA0B;110D 1162 11BA; # (쨋; 쨋; 쨋; 쨋; 쨋; ) HANGUL SYLLABLE JJAES CA0C;CA0C;110D 1162 11BB;CA0C;110D 1162 11BB; # (쨌; 쨌; 쨌; 쨌; 쨌; ) HANGUL SYLLABLE JJAESS CA0D;CA0D;110D 1162 11BC;CA0D;110D 1162 11BC; # (쨍; 쨍; 쨍; 쨍; 쨍; ) HANGUL SYLLABLE JJAENG CA0E;CA0E;110D 1162 11BD;CA0E;110D 1162 11BD; # (쨎; 쨎; 쨎; 쨎; 쨎; ) HANGUL SYLLABLE JJAEJ CA0F;CA0F;110D 1162 11BE;CA0F;110D 1162 11BE; # (쨏; 쨏; 쨏; 쨏; 쨏; ) HANGUL SYLLABLE JJAEC CA10;CA10;110D 1162 11BF;CA10;110D 1162 11BF; # (쨐; 쨐; 쨐; 쨐; 쨐; ) HANGUL SYLLABLE JJAEK CA11;CA11;110D 1162 11C0;CA11;110D 1162 11C0; # (쨑; 쨑; 쨑; 쨑; 쨑; ) HANGUL SYLLABLE JJAET CA12;CA12;110D 1162 11C1;CA12;110D 1162 11C1; # (쨒; 쨒; 쨒; 쨒; 쨒; ) HANGUL SYLLABLE JJAEP CA13;CA13;110D 1162 11C2;CA13;110D 1162 11C2; # (쨓; 쨓; 쨓; 쨓; 쨓; ) HANGUL SYLLABLE JJAEH CA14;CA14;110D 1163;CA14;110D 1163; # (쨔; 쨔; 쨔; 쨔; 쨔; ) HANGUL SYLLABLE JJYA CA15;CA15;110D 1163 11A8;CA15;110D 1163 11A8; # (쨕; 쨕; 쨕; 쨕; 쨕; ) HANGUL SYLLABLE JJYAG CA16;CA16;110D 1163 11A9;CA16;110D 1163 11A9; # (쨖; 쨖; 쨖; 쨖; 쨖; ) HANGUL SYLLABLE JJYAGG CA17;CA17;110D 1163 11AA;CA17;110D 1163 11AA; # (쨗; 쨗; 쨗; 쨗; 쨗; ) HANGUL SYLLABLE JJYAGS CA18;CA18;110D 1163 11AB;CA18;110D 1163 11AB; # (쨘; 쨘; 쨘; 쨘; 쨘; ) HANGUL SYLLABLE JJYAN CA19;CA19;110D 1163 11AC;CA19;110D 1163 11AC; # (쨙; 쨙; 쨙; 쨙; 쨙; ) HANGUL SYLLABLE JJYANJ CA1A;CA1A;110D 1163 11AD;CA1A;110D 1163 11AD; # (쨚; 쨚; 쨚; 쨚; 쨚; ) HANGUL SYLLABLE JJYANH CA1B;CA1B;110D 1163 11AE;CA1B;110D 1163 11AE; # (쨛; 쨛; 쨛; 쨛; 쨛; ) HANGUL SYLLABLE JJYAD CA1C;CA1C;110D 1163 11AF;CA1C;110D 1163 11AF; # (쨜; 쨜; 쨜; 쨜; 쨜; ) HANGUL SYLLABLE JJYAL CA1D;CA1D;110D 1163 11B0;CA1D;110D 1163 11B0; # (쨝; 쨝; 쨝; 쨝; 쨝; ) HANGUL SYLLABLE JJYALG CA1E;CA1E;110D 1163 11B1;CA1E;110D 1163 11B1; # (쨞; 쨞; 쨞; 쨞; 쨞; ) HANGUL SYLLABLE JJYALM CA1F;CA1F;110D 1163 11B2;CA1F;110D 1163 11B2; # (쨟; 쨟; 쨟; 쨟; 쨟; ) HANGUL SYLLABLE JJYALB CA20;CA20;110D 1163 11B3;CA20;110D 1163 11B3; # (쨠; 쨠; 쨠; 쨠; 쨠; ) HANGUL SYLLABLE JJYALS CA21;CA21;110D 1163 11B4;CA21;110D 1163 11B4; # (쨡; 쨡; 쨡; 쨡; 쨡; ) HANGUL SYLLABLE JJYALT CA22;CA22;110D 1163 11B5;CA22;110D 1163 11B5; # (쨢; 쨢; 쨢; 쨢; 쨢; ) HANGUL SYLLABLE JJYALP CA23;CA23;110D 1163 11B6;CA23;110D 1163 11B6; # (쨣; 쨣; 쨣; 쨣; 쨣; ) HANGUL SYLLABLE JJYALH CA24;CA24;110D 1163 11B7;CA24;110D 1163 11B7; # (쨤; 쨤; 쨤; 쨤; 쨤; ) HANGUL SYLLABLE JJYAM CA25;CA25;110D 1163 11B8;CA25;110D 1163 11B8; # (쨥; 쨥; 쨥; 쨥; 쨥; ) HANGUL SYLLABLE JJYAB CA26;CA26;110D 1163 11B9;CA26;110D 1163 11B9; # (쨦; 쨦; 쨦; 쨦; 쨦; ) HANGUL SYLLABLE JJYABS CA27;CA27;110D 1163 11BA;CA27;110D 1163 11BA; # (쨧; 쨧; 쨧; 쨧; 쨧; ) HANGUL SYLLABLE JJYAS CA28;CA28;110D 1163 11BB;CA28;110D 1163 11BB; # (쨨; 쨨; 쨨; 쨨; 쨨; ) HANGUL SYLLABLE JJYASS CA29;CA29;110D 1163 11BC;CA29;110D 1163 11BC; # (쨩; 쨩; 쨩; 쨩; 쨩; ) HANGUL SYLLABLE JJYANG CA2A;CA2A;110D 1163 11BD;CA2A;110D 1163 11BD; # (쨪; 쨪; 쨪; 쨪; 쨪; ) HANGUL SYLLABLE JJYAJ CA2B;CA2B;110D 1163 11BE;CA2B;110D 1163 11BE; # (쨫; 쨫; 쨫; 쨫; 쨫; ) HANGUL SYLLABLE JJYAC CA2C;CA2C;110D 1163 11BF;CA2C;110D 1163 11BF; # (쨬; 쨬; 쨬; 쨬; 쨬; ) HANGUL SYLLABLE JJYAK CA2D;CA2D;110D 1163 11C0;CA2D;110D 1163 11C0; # (쨭; 쨭; 쨭; 쨭; 쨭; ) HANGUL SYLLABLE JJYAT CA2E;CA2E;110D 1163 11C1;CA2E;110D 1163 11C1; # (쨮; 쨮; 쨮; 쨮; 쨮; ) HANGUL SYLLABLE JJYAP CA2F;CA2F;110D 1163 11C2;CA2F;110D 1163 11C2; # (쨯; 쨯; 쨯; 쨯; 쨯; ) HANGUL SYLLABLE JJYAH CA30;CA30;110D 1164;CA30;110D 1164; # (쨰; 쨰; 쨰; 쨰; 쨰; ) HANGUL SYLLABLE JJYAE CA31;CA31;110D 1164 11A8;CA31;110D 1164 11A8; # (쨱; 쨱; 쨱; 쨱; 쨱; ) HANGUL SYLLABLE JJYAEG CA32;CA32;110D 1164 11A9;CA32;110D 1164 11A9; # (쨲; 쨲; 쨲; 쨲; 쨲; ) HANGUL SYLLABLE JJYAEGG CA33;CA33;110D 1164 11AA;CA33;110D 1164 11AA; # (쨳; 쨳; 쨳; 쨳; 쨳; ) HANGUL SYLLABLE JJYAEGS CA34;CA34;110D 1164 11AB;CA34;110D 1164 11AB; # (쨴; 쨴; 쨴; 쨴; 쨴; ) HANGUL SYLLABLE JJYAEN CA35;CA35;110D 1164 11AC;CA35;110D 1164 11AC; # (쨵; 쨵; 쨵; 쨵; 쨵; ) HANGUL SYLLABLE JJYAENJ CA36;CA36;110D 1164 11AD;CA36;110D 1164 11AD; # (쨶; 쨶; 쨶; 쨶; 쨶; ) HANGUL SYLLABLE JJYAENH CA37;CA37;110D 1164 11AE;CA37;110D 1164 11AE; # (쨷; 쨷; 쨷; 쨷; 쨷; ) HANGUL SYLLABLE JJYAED CA38;CA38;110D 1164 11AF;CA38;110D 1164 11AF; # (쨸; 쨸; 쨸; 쨸; 쨸; ) HANGUL SYLLABLE JJYAEL CA39;CA39;110D 1164 11B0;CA39;110D 1164 11B0; # (쨹; 쨹; 쨹; 쨹; 쨹; ) HANGUL SYLLABLE JJYAELG CA3A;CA3A;110D 1164 11B1;CA3A;110D 1164 11B1; # (쨺; 쨺; 쨺; 쨺; 쨺; ) HANGUL SYLLABLE JJYAELM CA3B;CA3B;110D 1164 11B2;CA3B;110D 1164 11B2; # (쨻; 쨻; 쨻; 쨻; 쨻; ) HANGUL SYLLABLE JJYAELB CA3C;CA3C;110D 1164 11B3;CA3C;110D 1164 11B3; # (쨼; 쨼; 쨼; 쨼; 쨼; ) HANGUL SYLLABLE JJYAELS CA3D;CA3D;110D 1164 11B4;CA3D;110D 1164 11B4; # (쨽; 쨽; 쨽; 쨽; 쨽; ) HANGUL SYLLABLE JJYAELT CA3E;CA3E;110D 1164 11B5;CA3E;110D 1164 11B5; # (쨾; 쨾; 쨾; 쨾; 쨾; ) HANGUL SYLLABLE JJYAELP CA3F;CA3F;110D 1164 11B6;CA3F;110D 1164 11B6; # (쨿; 쨿; 쨿; 쨿; 쨿; ) HANGUL SYLLABLE JJYAELH CA40;CA40;110D 1164 11B7;CA40;110D 1164 11B7; # (쩀; 쩀; 쩀; 쩀; 쩀; ) HANGUL SYLLABLE JJYAEM CA41;CA41;110D 1164 11B8;CA41;110D 1164 11B8; # (쩁; 쩁; 쩁; 쩁; 쩁; ) HANGUL SYLLABLE JJYAEB CA42;CA42;110D 1164 11B9;CA42;110D 1164 11B9; # (쩂; 쩂; 쩂; 쩂; 쩂; ) HANGUL SYLLABLE JJYAEBS CA43;CA43;110D 1164 11BA;CA43;110D 1164 11BA; # (쩃; 쩃; 쩃; 쩃; 쩃; ) HANGUL SYLLABLE JJYAES CA44;CA44;110D 1164 11BB;CA44;110D 1164 11BB; # (쩄; 쩄; 쩄; 쩄; 쩄; ) HANGUL SYLLABLE JJYAESS CA45;CA45;110D 1164 11BC;CA45;110D 1164 11BC; # (쩅; 쩅; 쩅; 쩅; 쩅; ) HANGUL SYLLABLE JJYAENG CA46;CA46;110D 1164 11BD;CA46;110D 1164 11BD; # (쩆; 쩆; 쩆; 쩆; 쩆; ) HANGUL SYLLABLE JJYAEJ CA47;CA47;110D 1164 11BE;CA47;110D 1164 11BE; # (쩇; 쩇; 쩇; 쩇; 쩇; ) HANGUL SYLLABLE JJYAEC CA48;CA48;110D 1164 11BF;CA48;110D 1164 11BF; # (쩈; 쩈; 쩈; 쩈; 쩈; ) HANGUL SYLLABLE JJYAEK CA49;CA49;110D 1164 11C0;CA49;110D 1164 11C0; # (쩉; 쩉; 쩉; 쩉; 쩉; ) HANGUL SYLLABLE JJYAET CA4A;CA4A;110D 1164 11C1;CA4A;110D 1164 11C1; # (쩊; 쩊; 쩊; 쩊; 쩊; ) HANGUL SYLLABLE JJYAEP CA4B;CA4B;110D 1164 11C2;CA4B;110D 1164 11C2; # (쩋; 쩋; 쩋; 쩋; 쩋; ) HANGUL SYLLABLE JJYAEH CA4C;CA4C;110D 1165;CA4C;110D 1165; # (쩌; 쩌; 쩌; 쩌; 쩌; ) HANGUL SYLLABLE JJEO CA4D;CA4D;110D 1165 11A8;CA4D;110D 1165 11A8; # (쩍; 쩍; 쩍; 쩍; 쩍; ) HANGUL SYLLABLE JJEOG CA4E;CA4E;110D 1165 11A9;CA4E;110D 1165 11A9; # (쩎; 쩎; 쩎; 쩎; 쩎; ) HANGUL SYLLABLE JJEOGG CA4F;CA4F;110D 1165 11AA;CA4F;110D 1165 11AA; # (쩏; 쩏; 쩏; 쩏; 쩏; ) HANGUL SYLLABLE JJEOGS CA50;CA50;110D 1165 11AB;CA50;110D 1165 11AB; # (쩐; 쩐; 쩐; 쩐; 쩐; ) HANGUL SYLLABLE JJEON CA51;CA51;110D 1165 11AC;CA51;110D 1165 11AC; # (쩑; 쩑; 쩑; 쩑; 쩑; ) HANGUL SYLLABLE JJEONJ CA52;CA52;110D 1165 11AD;CA52;110D 1165 11AD; # (쩒; 쩒; 쩒; 쩒; 쩒; ) HANGUL SYLLABLE JJEONH CA53;CA53;110D 1165 11AE;CA53;110D 1165 11AE; # (쩓; 쩓; 쩓; 쩓; 쩓; ) HANGUL SYLLABLE JJEOD CA54;CA54;110D 1165 11AF;CA54;110D 1165 11AF; # (쩔; 쩔; 쩔; 쩔; 쩔; ) HANGUL SYLLABLE JJEOL CA55;CA55;110D 1165 11B0;CA55;110D 1165 11B0; # (쩕; 쩕; 쩕; 쩕; 쩕; ) HANGUL SYLLABLE JJEOLG CA56;CA56;110D 1165 11B1;CA56;110D 1165 11B1; # (쩖; 쩖; 쩖; 쩖; 쩖; ) HANGUL SYLLABLE JJEOLM CA57;CA57;110D 1165 11B2;CA57;110D 1165 11B2; # (쩗; 쩗; 쩗; 쩗; 쩗; ) HANGUL SYLLABLE JJEOLB CA58;CA58;110D 1165 11B3;CA58;110D 1165 11B3; # (쩘; 쩘; 쩘; 쩘; 쩘; ) HANGUL SYLLABLE JJEOLS CA59;CA59;110D 1165 11B4;CA59;110D 1165 11B4; # (쩙; 쩙; 쩙; 쩙; 쩙; ) HANGUL SYLLABLE JJEOLT CA5A;CA5A;110D 1165 11B5;CA5A;110D 1165 11B5; # (쩚; 쩚; 쩚; 쩚; 쩚; ) HANGUL SYLLABLE JJEOLP CA5B;CA5B;110D 1165 11B6;CA5B;110D 1165 11B6; # (쩛; 쩛; 쩛; 쩛; 쩛; ) HANGUL SYLLABLE JJEOLH CA5C;CA5C;110D 1165 11B7;CA5C;110D 1165 11B7; # (쩜; 쩜; 쩜; 쩜; 쩜; ) HANGUL SYLLABLE JJEOM CA5D;CA5D;110D 1165 11B8;CA5D;110D 1165 11B8; # (쩝; 쩝; 쩝; 쩝; 쩝; ) HANGUL SYLLABLE JJEOB CA5E;CA5E;110D 1165 11B9;CA5E;110D 1165 11B9; # (쩞; 쩞; 쩞; 쩞; 쩞; ) HANGUL SYLLABLE JJEOBS CA5F;CA5F;110D 1165 11BA;CA5F;110D 1165 11BA; # (쩟; 쩟; 쩟; 쩟; 쩟; ) HANGUL SYLLABLE JJEOS CA60;CA60;110D 1165 11BB;CA60;110D 1165 11BB; # (쩠; 쩠; 쩠; 쩠; 쩠; ) HANGUL SYLLABLE JJEOSS CA61;CA61;110D 1165 11BC;CA61;110D 1165 11BC; # (쩡; 쩡; 쩡; 쩡; 쩡; ) HANGUL SYLLABLE JJEONG CA62;CA62;110D 1165 11BD;CA62;110D 1165 11BD; # (쩢; 쩢; 쩢; 쩢; 쩢; ) HANGUL SYLLABLE JJEOJ CA63;CA63;110D 1165 11BE;CA63;110D 1165 11BE; # (쩣; 쩣; 쩣; 쩣; 쩣; ) HANGUL SYLLABLE JJEOC CA64;CA64;110D 1165 11BF;CA64;110D 1165 11BF; # (쩤; 쩤; 쩤; 쩤; 쩤; ) HANGUL SYLLABLE JJEOK CA65;CA65;110D 1165 11C0;CA65;110D 1165 11C0; # (쩥; 쩥; 쩥; 쩥; 쩥; ) HANGUL SYLLABLE JJEOT CA66;CA66;110D 1165 11C1;CA66;110D 1165 11C1; # (쩦; 쩦; 쩦; 쩦; 쩦; ) HANGUL SYLLABLE JJEOP CA67;CA67;110D 1165 11C2;CA67;110D 1165 11C2; # (쩧; 쩧; 쩧; 쩧; 쩧; ) HANGUL SYLLABLE JJEOH CA68;CA68;110D 1166;CA68;110D 1166; # (쩨; 쩨; 쩨; 쩨; 쩨; ) HANGUL SYLLABLE JJE CA69;CA69;110D 1166 11A8;CA69;110D 1166 11A8; # (쩩; 쩩; 쩩; 쩩; 쩩; ) HANGUL SYLLABLE JJEG CA6A;CA6A;110D 1166 11A9;CA6A;110D 1166 11A9; # (쩪; 쩪; 쩪; 쩪; 쩪; ) HANGUL SYLLABLE JJEGG CA6B;CA6B;110D 1166 11AA;CA6B;110D 1166 11AA; # (쩫; 쩫; 쩫; 쩫; 쩫; ) HANGUL SYLLABLE JJEGS CA6C;CA6C;110D 1166 11AB;CA6C;110D 1166 11AB; # (쩬; 쩬; 쩬; 쩬; 쩬; ) HANGUL SYLLABLE JJEN CA6D;CA6D;110D 1166 11AC;CA6D;110D 1166 11AC; # (쩭; 쩭; 쩭; 쩭; 쩭; ) HANGUL SYLLABLE JJENJ CA6E;CA6E;110D 1166 11AD;CA6E;110D 1166 11AD; # (쩮; 쩮; 쩮; 쩮; 쩮; ) HANGUL SYLLABLE JJENH CA6F;CA6F;110D 1166 11AE;CA6F;110D 1166 11AE; # (쩯; 쩯; 쩯; 쩯; 쩯; ) HANGUL SYLLABLE JJED CA70;CA70;110D 1166 11AF;CA70;110D 1166 11AF; # (쩰; 쩰; 쩰; 쩰; 쩰; ) HANGUL SYLLABLE JJEL CA71;CA71;110D 1166 11B0;CA71;110D 1166 11B0; # (쩱; 쩱; 쩱; 쩱; 쩱; ) HANGUL SYLLABLE JJELG CA72;CA72;110D 1166 11B1;CA72;110D 1166 11B1; # (쩲; 쩲; 쩲; 쩲; 쩲; ) HANGUL SYLLABLE JJELM CA73;CA73;110D 1166 11B2;CA73;110D 1166 11B2; # (쩳; 쩳; 쩳; 쩳; 쩳; ) HANGUL SYLLABLE JJELB CA74;CA74;110D 1166 11B3;CA74;110D 1166 11B3; # (쩴; 쩴; 쩴; 쩴; 쩴; ) HANGUL SYLLABLE JJELS CA75;CA75;110D 1166 11B4;CA75;110D 1166 11B4; # (쩵; 쩵; 쩵; 쩵; 쩵; ) HANGUL SYLLABLE JJELT CA76;CA76;110D 1166 11B5;CA76;110D 1166 11B5; # (쩶; 쩶; 쩶; 쩶; 쩶; ) HANGUL SYLLABLE JJELP CA77;CA77;110D 1166 11B6;CA77;110D 1166 11B6; # (쩷; 쩷; 쩷; 쩷; 쩷; ) HANGUL SYLLABLE JJELH CA78;CA78;110D 1166 11B7;CA78;110D 1166 11B7; # (쩸; 쩸; 쩸; 쩸; 쩸; ) HANGUL SYLLABLE JJEM CA79;CA79;110D 1166 11B8;CA79;110D 1166 11B8; # (쩹; 쩹; 쩹; 쩹; 쩹; ) HANGUL SYLLABLE JJEB CA7A;CA7A;110D 1166 11B9;CA7A;110D 1166 11B9; # (쩺; 쩺; 쩺; 쩺; 쩺; ) HANGUL SYLLABLE JJEBS CA7B;CA7B;110D 1166 11BA;CA7B;110D 1166 11BA; # (쩻; 쩻; 쩻; 쩻; 쩻; ) HANGUL SYLLABLE JJES CA7C;CA7C;110D 1166 11BB;CA7C;110D 1166 11BB; # (쩼; 쩼; 쩼; 쩼; 쩼; ) HANGUL SYLLABLE JJESS CA7D;CA7D;110D 1166 11BC;CA7D;110D 1166 11BC; # (쩽; 쩽; 쩽; 쩽; 쩽; ) HANGUL SYLLABLE JJENG CA7E;CA7E;110D 1166 11BD;CA7E;110D 1166 11BD; # (쩾; 쩾; 쩾; 쩾; 쩾; ) HANGUL SYLLABLE JJEJ CA7F;CA7F;110D 1166 11BE;CA7F;110D 1166 11BE; # (쩿; 쩿; 쩿; 쩿; 쩿; ) HANGUL SYLLABLE JJEC CA80;CA80;110D 1166 11BF;CA80;110D 1166 11BF; # (쪀; 쪀; 쪀; 쪀; 쪀; ) HANGUL SYLLABLE JJEK CA81;CA81;110D 1166 11C0;CA81;110D 1166 11C0; # (쪁; 쪁; 쪁; 쪁; 쪁; ) HANGUL SYLLABLE JJET CA82;CA82;110D 1166 11C1;CA82;110D 1166 11C1; # (쪂; 쪂; 쪂; 쪂; 쪂; ) HANGUL SYLLABLE JJEP CA83;CA83;110D 1166 11C2;CA83;110D 1166 11C2; # (쪃; 쪃; 쪃; 쪃; 쪃; ) HANGUL SYLLABLE JJEH CA84;CA84;110D 1167;CA84;110D 1167; # (쪄; 쪄; 쪄; 쪄; 쪄; ) HANGUL SYLLABLE JJYEO CA85;CA85;110D 1167 11A8;CA85;110D 1167 11A8; # (쪅; 쪅; 쪅; 쪅; 쪅; ) HANGUL SYLLABLE JJYEOG CA86;CA86;110D 1167 11A9;CA86;110D 1167 11A9; # (쪆; 쪆; 쪆; 쪆; 쪆; ) HANGUL SYLLABLE JJYEOGG CA87;CA87;110D 1167 11AA;CA87;110D 1167 11AA; # (쪇; 쪇; 쪇; 쪇; 쪇; ) HANGUL SYLLABLE JJYEOGS CA88;CA88;110D 1167 11AB;CA88;110D 1167 11AB; # (쪈; 쪈; 쪈; 쪈; 쪈; ) HANGUL SYLLABLE JJYEON CA89;CA89;110D 1167 11AC;CA89;110D 1167 11AC; # (쪉; 쪉; 쪉; 쪉; 쪉; ) HANGUL SYLLABLE JJYEONJ CA8A;CA8A;110D 1167 11AD;CA8A;110D 1167 11AD; # (쪊; 쪊; 쪊; 쪊; 쪊; ) HANGUL SYLLABLE JJYEONH CA8B;CA8B;110D 1167 11AE;CA8B;110D 1167 11AE; # (쪋; 쪋; 쪋; 쪋; 쪋; ) HANGUL SYLLABLE JJYEOD CA8C;CA8C;110D 1167 11AF;CA8C;110D 1167 11AF; # (쪌; 쪌; 쪌; 쪌; 쪌; ) HANGUL SYLLABLE JJYEOL CA8D;CA8D;110D 1167 11B0;CA8D;110D 1167 11B0; # (쪍; 쪍; 쪍; 쪍; 쪍; ) HANGUL SYLLABLE JJYEOLG CA8E;CA8E;110D 1167 11B1;CA8E;110D 1167 11B1; # (쪎; 쪎; 쪎; 쪎; 쪎; ) HANGUL SYLLABLE JJYEOLM CA8F;CA8F;110D 1167 11B2;CA8F;110D 1167 11B2; # (쪏; 쪏; 쪏; 쪏; 쪏; ) HANGUL SYLLABLE JJYEOLB CA90;CA90;110D 1167 11B3;CA90;110D 1167 11B3; # (쪐; 쪐; 쪐; 쪐; 쪐; ) HANGUL SYLLABLE JJYEOLS CA91;CA91;110D 1167 11B4;CA91;110D 1167 11B4; # (쪑; 쪑; 쪑; 쪑; 쪑; ) HANGUL SYLLABLE JJYEOLT CA92;CA92;110D 1167 11B5;CA92;110D 1167 11B5; # (쪒; 쪒; 쪒; 쪒; 쪒; ) HANGUL SYLLABLE JJYEOLP CA93;CA93;110D 1167 11B6;CA93;110D 1167 11B6; # (쪓; 쪓; 쪓; 쪓; 쪓; ) HANGUL SYLLABLE JJYEOLH CA94;CA94;110D 1167 11B7;CA94;110D 1167 11B7; # (쪔; 쪔; 쪔; 쪔; 쪔; ) HANGUL SYLLABLE JJYEOM CA95;CA95;110D 1167 11B8;CA95;110D 1167 11B8; # (쪕; 쪕; 쪕; 쪕; 쪕; ) HANGUL SYLLABLE JJYEOB CA96;CA96;110D 1167 11B9;CA96;110D 1167 11B9; # (쪖; 쪖; 쪖; 쪖; 쪖; ) HANGUL SYLLABLE JJYEOBS CA97;CA97;110D 1167 11BA;CA97;110D 1167 11BA; # (쪗; 쪗; 쪗; 쪗; 쪗; ) HANGUL SYLLABLE JJYEOS CA98;CA98;110D 1167 11BB;CA98;110D 1167 11BB; # (쪘; 쪘; 쪘; 쪘; 쪘; ) HANGUL SYLLABLE JJYEOSS CA99;CA99;110D 1167 11BC;CA99;110D 1167 11BC; # (쪙; 쪙; 쪙; 쪙; 쪙; ) HANGUL SYLLABLE JJYEONG CA9A;CA9A;110D 1167 11BD;CA9A;110D 1167 11BD; # (쪚; 쪚; 쪚; 쪚; 쪚; ) HANGUL SYLLABLE JJYEOJ CA9B;CA9B;110D 1167 11BE;CA9B;110D 1167 11BE; # (쪛; 쪛; 쪛; 쪛; 쪛; ) HANGUL SYLLABLE JJYEOC CA9C;CA9C;110D 1167 11BF;CA9C;110D 1167 11BF; # (쪜; 쪜; 쪜; 쪜; 쪜; ) HANGUL SYLLABLE JJYEOK CA9D;CA9D;110D 1167 11C0;CA9D;110D 1167 11C0; # (쪝; 쪝; 쪝; 쪝; 쪝; ) HANGUL SYLLABLE JJYEOT CA9E;CA9E;110D 1167 11C1;CA9E;110D 1167 11C1; # (쪞; 쪞; 쪞; 쪞; 쪞; ) HANGUL SYLLABLE JJYEOP CA9F;CA9F;110D 1167 11C2;CA9F;110D 1167 11C2; # (쪟; 쪟; 쪟; 쪟; 쪟; ) HANGUL SYLLABLE JJYEOH CAA0;CAA0;110D 1168;CAA0;110D 1168; # (쪠; 쪠; 쪠; 쪠; 쪠; ) HANGUL SYLLABLE JJYE CAA1;CAA1;110D 1168 11A8;CAA1;110D 1168 11A8; # (쪡; 쪡; 쪡; 쪡; 쪡; ) HANGUL SYLLABLE JJYEG CAA2;CAA2;110D 1168 11A9;CAA2;110D 1168 11A9; # (쪢; 쪢; 쪢; 쪢; 쪢; ) HANGUL SYLLABLE JJYEGG CAA3;CAA3;110D 1168 11AA;CAA3;110D 1168 11AA; # (쪣; 쪣; 쪣; 쪣; 쪣; ) HANGUL SYLLABLE JJYEGS CAA4;CAA4;110D 1168 11AB;CAA4;110D 1168 11AB; # (쪤; 쪤; 쪤; 쪤; 쪤; ) HANGUL SYLLABLE JJYEN CAA5;CAA5;110D 1168 11AC;CAA5;110D 1168 11AC; # (쪥; 쪥; 쪥; 쪥; 쪥; ) HANGUL SYLLABLE JJYENJ CAA6;CAA6;110D 1168 11AD;CAA6;110D 1168 11AD; # (쪦; 쪦; 쪦; 쪦; 쪦; ) HANGUL SYLLABLE JJYENH CAA7;CAA7;110D 1168 11AE;CAA7;110D 1168 11AE; # (쪧; 쪧; 쪧; 쪧; 쪧; ) HANGUL SYLLABLE JJYED CAA8;CAA8;110D 1168 11AF;CAA8;110D 1168 11AF; # (쪨; 쪨; 쪨; 쪨; 쪨; ) HANGUL SYLLABLE JJYEL CAA9;CAA9;110D 1168 11B0;CAA9;110D 1168 11B0; # (쪩; 쪩; 쪩; 쪩; 쪩; ) HANGUL SYLLABLE JJYELG CAAA;CAAA;110D 1168 11B1;CAAA;110D 1168 11B1; # (쪪; 쪪; 쪪; 쪪; 쪪; ) HANGUL SYLLABLE JJYELM CAAB;CAAB;110D 1168 11B2;CAAB;110D 1168 11B2; # (쪫; 쪫; 쪫; 쪫; 쪫; ) HANGUL SYLLABLE JJYELB CAAC;CAAC;110D 1168 11B3;CAAC;110D 1168 11B3; # (쪬; 쪬; 쪬; 쪬; 쪬; ) HANGUL SYLLABLE JJYELS CAAD;CAAD;110D 1168 11B4;CAAD;110D 1168 11B4; # (쪭; 쪭; 쪭; 쪭; 쪭; ) HANGUL SYLLABLE JJYELT CAAE;CAAE;110D 1168 11B5;CAAE;110D 1168 11B5; # (쪮; 쪮; 쪮; 쪮; 쪮; ) HANGUL SYLLABLE JJYELP CAAF;CAAF;110D 1168 11B6;CAAF;110D 1168 11B6; # (쪯; 쪯; 쪯; 쪯; 쪯; ) HANGUL SYLLABLE JJYELH CAB0;CAB0;110D 1168 11B7;CAB0;110D 1168 11B7; # (쪰; 쪰; 쪰; 쪰; 쪰; ) HANGUL SYLLABLE JJYEM CAB1;CAB1;110D 1168 11B8;CAB1;110D 1168 11B8; # (쪱; 쪱; 쪱; 쪱; 쪱; ) HANGUL SYLLABLE JJYEB CAB2;CAB2;110D 1168 11B9;CAB2;110D 1168 11B9; # (쪲; 쪲; 쪲; 쪲; 쪲; ) HANGUL SYLLABLE JJYEBS CAB3;CAB3;110D 1168 11BA;CAB3;110D 1168 11BA; # (쪳; 쪳; 쪳; 쪳; 쪳; ) HANGUL SYLLABLE JJYES CAB4;CAB4;110D 1168 11BB;CAB4;110D 1168 11BB; # (쪴; 쪴; 쪴; 쪴; 쪴; ) HANGUL SYLLABLE JJYESS CAB5;CAB5;110D 1168 11BC;CAB5;110D 1168 11BC; # (쪵; 쪵; 쪵; 쪵; 쪵; ) HANGUL SYLLABLE JJYENG CAB6;CAB6;110D 1168 11BD;CAB6;110D 1168 11BD; # (쪶; 쪶; 쪶; 쪶; 쪶; ) HANGUL SYLLABLE JJYEJ CAB7;CAB7;110D 1168 11BE;CAB7;110D 1168 11BE; # (쪷; 쪷; 쪷; 쪷; 쪷; ) HANGUL SYLLABLE JJYEC CAB8;CAB8;110D 1168 11BF;CAB8;110D 1168 11BF; # (쪸; 쪸; 쪸; 쪸; 쪸; ) HANGUL SYLLABLE JJYEK CAB9;CAB9;110D 1168 11C0;CAB9;110D 1168 11C0; # (쪹; 쪹; 쪹; 쪹; 쪹; ) HANGUL SYLLABLE JJYET CABA;CABA;110D 1168 11C1;CABA;110D 1168 11C1; # (쪺; 쪺; 쪺; 쪺; 쪺; ) HANGUL SYLLABLE JJYEP CABB;CABB;110D 1168 11C2;CABB;110D 1168 11C2; # (쪻; 쪻; 쪻; 쪻; 쪻; ) HANGUL SYLLABLE JJYEH CABC;CABC;110D 1169;CABC;110D 1169; # (쪼; 쪼; 쪼; 쪼; 쪼; ) HANGUL SYLLABLE JJO CABD;CABD;110D 1169 11A8;CABD;110D 1169 11A8; # (쪽; 쪽; 쪽; 쪽; 쪽; ) HANGUL SYLLABLE JJOG CABE;CABE;110D 1169 11A9;CABE;110D 1169 11A9; # (쪾; 쪾; 쪾; 쪾; 쪾; ) HANGUL SYLLABLE JJOGG CABF;CABF;110D 1169 11AA;CABF;110D 1169 11AA; # (쪿; 쪿; 쪿; 쪿; 쪿; ) HANGUL SYLLABLE JJOGS CAC0;CAC0;110D 1169 11AB;CAC0;110D 1169 11AB; # (쫀; 쫀; 쫀; 쫀; 쫀; ) HANGUL SYLLABLE JJON CAC1;CAC1;110D 1169 11AC;CAC1;110D 1169 11AC; # (쫁; 쫁; 쫁; 쫁; 쫁; ) HANGUL SYLLABLE JJONJ CAC2;CAC2;110D 1169 11AD;CAC2;110D 1169 11AD; # (쫂; 쫂; 쫂; 쫂; 쫂; ) HANGUL SYLLABLE JJONH CAC3;CAC3;110D 1169 11AE;CAC3;110D 1169 11AE; # (쫃; 쫃; 쫃; 쫃; 쫃; ) HANGUL SYLLABLE JJOD CAC4;CAC4;110D 1169 11AF;CAC4;110D 1169 11AF; # (쫄; 쫄; 쫄; 쫄; 쫄; ) HANGUL SYLLABLE JJOL CAC5;CAC5;110D 1169 11B0;CAC5;110D 1169 11B0; # (쫅; 쫅; 쫅; 쫅; 쫅; ) HANGUL SYLLABLE JJOLG CAC6;CAC6;110D 1169 11B1;CAC6;110D 1169 11B1; # (쫆; 쫆; 쫆; 쫆; 쫆; ) HANGUL SYLLABLE JJOLM CAC7;CAC7;110D 1169 11B2;CAC7;110D 1169 11B2; # (쫇; 쫇; 쫇; 쫇; 쫇; ) HANGUL SYLLABLE JJOLB CAC8;CAC8;110D 1169 11B3;CAC8;110D 1169 11B3; # (쫈; 쫈; 쫈; 쫈; 쫈; ) HANGUL SYLLABLE JJOLS CAC9;CAC9;110D 1169 11B4;CAC9;110D 1169 11B4; # (쫉; 쫉; 쫉; 쫉; 쫉; ) HANGUL SYLLABLE JJOLT CACA;CACA;110D 1169 11B5;CACA;110D 1169 11B5; # (쫊; 쫊; 쫊; 쫊; 쫊; ) HANGUL SYLLABLE JJOLP CACB;CACB;110D 1169 11B6;CACB;110D 1169 11B6; # (쫋; 쫋; 쫋; 쫋; 쫋; ) HANGUL SYLLABLE JJOLH CACC;CACC;110D 1169 11B7;CACC;110D 1169 11B7; # (쫌; 쫌; 쫌; 쫌; 쫌; ) HANGUL SYLLABLE JJOM CACD;CACD;110D 1169 11B8;CACD;110D 1169 11B8; # (쫍; 쫍; 쫍; 쫍; 쫍; ) HANGUL SYLLABLE JJOB CACE;CACE;110D 1169 11B9;CACE;110D 1169 11B9; # (쫎; 쫎; 쫎; 쫎; 쫎; ) HANGUL SYLLABLE JJOBS CACF;CACF;110D 1169 11BA;CACF;110D 1169 11BA; # (쫏; 쫏; 쫏; 쫏; 쫏; ) HANGUL SYLLABLE JJOS CAD0;CAD0;110D 1169 11BB;CAD0;110D 1169 11BB; # (쫐; 쫐; 쫐; 쫐; 쫐; ) HANGUL SYLLABLE JJOSS CAD1;CAD1;110D 1169 11BC;CAD1;110D 1169 11BC; # (쫑; 쫑; 쫑; 쫑; 쫑; ) HANGUL SYLLABLE JJONG CAD2;CAD2;110D 1169 11BD;CAD2;110D 1169 11BD; # (쫒; 쫒; 쫒; 쫒; 쫒; ) HANGUL SYLLABLE JJOJ CAD3;CAD3;110D 1169 11BE;CAD3;110D 1169 11BE; # (쫓; 쫓; 쫓; 쫓; 쫓; ) HANGUL SYLLABLE JJOC CAD4;CAD4;110D 1169 11BF;CAD4;110D 1169 11BF; # (쫔; 쫔; 쫔; 쫔; 쫔; ) HANGUL SYLLABLE JJOK CAD5;CAD5;110D 1169 11C0;CAD5;110D 1169 11C0; # (쫕; 쫕; 쫕; 쫕; 쫕; ) HANGUL SYLLABLE JJOT CAD6;CAD6;110D 1169 11C1;CAD6;110D 1169 11C1; # (쫖; 쫖; 쫖; 쫖; 쫖; ) HANGUL SYLLABLE JJOP CAD7;CAD7;110D 1169 11C2;CAD7;110D 1169 11C2; # (쫗; 쫗; 쫗; 쫗; 쫗; ) HANGUL SYLLABLE JJOH CAD8;CAD8;110D 116A;CAD8;110D 116A; # (쫘; 쫘; 쫘; 쫘; 쫘; ) HANGUL SYLLABLE JJWA CAD9;CAD9;110D 116A 11A8;CAD9;110D 116A 11A8; # (쫙; 쫙; 쫙; 쫙; 쫙; ) HANGUL SYLLABLE JJWAG CADA;CADA;110D 116A 11A9;CADA;110D 116A 11A9; # (쫚; 쫚; 쫚; 쫚; 쫚; ) HANGUL SYLLABLE JJWAGG CADB;CADB;110D 116A 11AA;CADB;110D 116A 11AA; # (쫛; 쫛; 쫛; 쫛; 쫛; ) HANGUL SYLLABLE JJWAGS CADC;CADC;110D 116A 11AB;CADC;110D 116A 11AB; # (쫜; 쫜; 쫜; 쫜; 쫜; ) HANGUL SYLLABLE JJWAN CADD;CADD;110D 116A 11AC;CADD;110D 116A 11AC; # (쫝; 쫝; 쫝; 쫝; 쫝; ) HANGUL SYLLABLE JJWANJ CADE;CADE;110D 116A 11AD;CADE;110D 116A 11AD; # (쫞; 쫞; 쫞; 쫞; 쫞; ) HANGUL SYLLABLE JJWANH CADF;CADF;110D 116A 11AE;CADF;110D 116A 11AE; # (쫟; 쫟; 쫟; 쫟; 쫟; ) HANGUL SYLLABLE JJWAD CAE0;CAE0;110D 116A 11AF;CAE0;110D 116A 11AF; # (쫠; 쫠; 쫠; 쫠; 쫠; ) HANGUL SYLLABLE JJWAL CAE1;CAE1;110D 116A 11B0;CAE1;110D 116A 11B0; # (쫡; 쫡; 쫡; 쫡; 쫡; ) HANGUL SYLLABLE JJWALG CAE2;CAE2;110D 116A 11B1;CAE2;110D 116A 11B1; # (쫢; 쫢; 쫢; 쫢; 쫢; ) HANGUL SYLLABLE JJWALM CAE3;CAE3;110D 116A 11B2;CAE3;110D 116A 11B2; # (쫣; 쫣; 쫣; 쫣; 쫣; ) HANGUL SYLLABLE JJWALB CAE4;CAE4;110D 116A 11B3;CAE4;110D 116A 11B3; # (쫤; 쫤; 쫤; 쫤; 쫤; ) HANGUL SYLLABLE JJWALS CAE5;CAE5;110D 116A 11B4;CAE5;110D 116A 11B4; # (쫥; 쫥; 쫥; 쫥; 쫥; ) HANGUL SYLLABLE JJWALT CAE6;CAE6;110D 116A 11B5;CAE6;110D 116A 11B5; # (쫦; 쫦; 쫦; 쫦; 쫦; ) HANGUL SYLLABLE JJWALP CAE7;CAE7;110D 116A 11B6;CAE7;110D 116A 11B6; # (쫧; 쫧; 쫧; 쫧; 쫧; ) HANGUL SYLLABLE JJWALH CAE8;CAE8;110D 116A 11B7;CAE8;110D 116A 11B7; # (쫨; 쫨; 쫨; 쫨; 쫨; ) HANGUL SYLLABLE JJWAM CAE9;CAE9;110D 116A 11B8;CAE9;110D 116A 11B8; # (쫩; 쫩; 쫩; 쫩; 쫩; ) HANGUL SYLLABLE JJWAB CAEA;CAEA;110D 116A 11B9;CAEA;110D 116A 11B9; # (쫪; 쫪; 쫪; 쫪; 쫪; ) HANGUL SYLLABLE JJWABS CAEB;CAEB;110D 116A 11BA;CAEB;110D 116A 11BA; # (쫫; 쫫; 쫫; 쫫; 쫫; ) HANGUL SYLLABLE JJWAS CAEC;CAEC;110D 116A 11BB;CAEC;110D 116A 11BB; # (쫬; 쫬; 쫬; 쫬; 쫬; ) HANGUL SYLLABLE JJWASS CAED;CAED;110D 116A 11BC;CAED;110D 116A 11BC; # (쫭; 쫭; 쫭; 쫭; 쫭; ) HANGUL SYLLABLE JJWANG CAEE;CAEE;110D 116A 11BD;CAEE;110D 116A 11BD; # (쫮; 쫮; 쫮; 쫮; 쫮; ) HANGUL SYLLABLE JJWAJ CAEF;CAEF;110D 116A 11BE;CAEF;110D 116A 11BE; # (쫯; 쫯; 쫯; 쫯; 쫯; ) HANGUL SYLLABLE JJWAC CAF0;CAF0;110D 116A 11BF;CAF0;110D 116A 11BF; # (쫰; 쫰; 쫰; 쫰; 쫰; ) HANGUL SYLLABLE JJWAK CAF1;CAF1;110D 116A 11C0;CAF1;110D 116A 11C0; # (쫱; 쫱; 쫱; 쫱; 쫱; ) HANGUL SYLLABLE JJWAT CAF2;CAF2;110D 116A 11C1;CAF2;110D 116A 11C1; # (쫲; 쫲; 쫲; 쫲; 쫲; ) HANGUL SYLLABLE JJWAP CAF3;CAF3;110D 116A 11C2;CAF3;110D 116A 11C2; # (쫳; 쫳; 쫳; 쫳; 쫳; ) HANGUL SYLLABLE JJWAH CAF4;CAF4;110D 116B;CAF4;110D 116B; # (쫴; 쫴; 쫴; 쫴; 쫴; ) HANGUL SYLLABLE JJWAE CAF5;CAF5;110D 116B 11A8;CAF5;110D 116B 11A8; # (쫵; 쫵; 쫵; 쫵; 쫵; ) HANGUL SYLLABLE JJWAEG CAF6;CAF6;110D 116B 11A9;CAF6;110D 116B 11A9; # (쫶; 쫶; 쫶; 쫶; 쫶; ) HANGUL SYLLABLE JJWAEGG CAF7;CAF7;110D 116B 11AA;CAF7;110D 116B 11AA; # (쫷; 쫷; 쫷; 쫷; 쫷; ) HANGUL SYLLABLE JJWAEGS CAF8;CAF8;110D 116B 11AB;CAF8;110D 116B 11AB; # (쫸; 쫸; 쫸; 쫸; 쫸; ) HANGUL SYLLABLE JJWAEN CAF9;CAF9;110D 116B 11AC;CAF9;110D 116B 11AC; # (쫹; 쫹; 쫹; 쫹; 쫹; ) HANGUL SYLLABLE JJWAENJ CAFA;CAFA;110D 116B 11AD;CAFA;110D 116B 11AD; # (쫺; 쫺; 쫺; 쫺; 쫺; ) HANGUL SYLLABLE JJWAENH CAFB;CAFB;110D 116B 11AE;CAFB;110D 116B 11AE; # (쫻; 쫻; 쫻; 쫻; 쫻; ) HANGUL SYLLABLE JJWAED CAFC;CAFC;110D 116B 11AF;CAFC;110D 116B 11AF; # (쫼; 쫼; 쫼; 쫼; 쫼; ) HANGUL SYLLABLE JJWAEL CAFD;CAFD;110D 116B 11B0;CAFD;110D 116B 11B0; # (쫽; 쫽; 쫽; 쫽; 쫽; ) HANGUL SYLLABLE JJWAELG CAFE;CAFE;110D 116B 11B1;CAFE;110D 116B 11B1; # (쫾; 쫾; 쫾; 쫾; 쫾; ) HANGUL SYLLABLE JJWAELM CAFF;CAFF;110D 116B 11B2;CAFF;110D 116B 11B2; # (쫿; 쫿; 쫿; 쫿; 쫿; ) HANGUL SYLLABLE JJWAELB CB00;CB00;110D 116B 11B3;CB00;110D 116B 11B3; # (쬀; 쬀; 쬀; 쬀; 쬀; ) HANGUL SYLLABLE JJWAELS CB01;CB01;110D 116B 11B4;CB01;110D 116B 11B4; # (쬁; 쬁; 쬁; 쬁; 쬁; ) HANGUL SYLLABLE JJWAELT CB02;CB02;110D 116B 11B5;CB02;110D 116B 11B5; # (쬂; 쬂; 쬂; 쬂; 쬂; ) HANGUL SYLLABLE JJWAELP CB03;CB03;110D 116B 11B6;CB03;110D 116B 11B6; # (쬃; 쬃; 쬃; 쬃; 쬃; ) HANGUL SYLLABLE JJWAELH CB04;CB04;110D 116B 11B7;CB04;110D 116B 11B7; # (쬄; 쬄; 쬄; 쬄; 쬄; ) HANGUL SYLLABLE JJWAEM CB05;CB05;110D 116B 11B8;CB05;110D 116B 11B8; # (쬅; 쬅; 쬅; 쬅; 쬅; ) HANGUL SYLLABLE JJWAEB CB06;CB06;110D 116B 11B9;CB06;110D 116B 11B9; # (쬆; 쬆; 쬆; 쬆; 쬆; ) HANGUL SYLLABLE JJWAEBS CB07;CB07;110D 116B 11BA;CB07;110D 116B 11BA; # (쬇; 쬇; 쬇; 쬇; 쬇; ) HANGUL SYLLABLE JJWAES CB08;CB08;110D 116B 11BB;CB08;110D 116B 11BB; # (쬈; 쬈; 쬈; 쬈; 쬈; ) HANGUL SYLLABLE JJWAESS CB09;CB09;110D 116B 11BC;CB09;110D 116B 11BC; # (쬉; 쬉; 쬉; 쬉; 쬉; ) HANGUL SYLLABLE JJWAENG CB0A;CB0A;110D 116B 11BD;CB0A;110D 116B 11BD; # (쬊; 쬊; 쬊; 쬊; 쬊; ) HANGUL SYLLABLE JJWAEJ CB0B;CB0B;110D 116B 11BE;CB0B;110D 116B 11BE; # (쬋; 쬋; 쬋; 쬋; 쬋; ) HANGUL SYLLABLE JJWAEC CB0C;CB0C;110D 116B 11BF;CB0C;110D 116B 11BF; # (쬌; 쬌; 쬌; 쬌; 쬌; ) HANGUL SYLLABLE JJWAEK CB0D;CB0D;110D 116B 11C0;CB0D;110D 116B 11C0; # (쬍; 쬍; 쬍; 쬍; 쬍; ) HANGUL SYLLABLE JJWAET CB0E;CB0E;110D 116B 11C1;CB0E;110D 116B 11C1; # (쬎; 쬎; 쬎; 쬎; 쬎; ) HANGUL SYLLABLE JJWAEP CB0F;CB0F;110D 116B 11C2;CB0F;110D 116B 11C2; # (쬏; 쬏; 쬏; 쬏; 쬏; ) HANGUL SYLLABLE JJWAEH CB10;CB10;110D 116C;CB10;110D 116C; # (쬐; 쬐; 쬐; 쬐; 쬐; ) HANGUL SYLLABLE JJOE CB11;CB11;110D 116C 11A8;CB11;110D 116C 11A8; # (쬑; 쬑; 쬑; 쬑; 쬑; ) HANGUL SYLLABLE JJOEG CB12;CB12;110D 116C 11A9;CB12;110D 116C 11A9; # (쬒; 쬒; 쬒; 쬒; 쬒; ) HANGUL SYLLABLE JJOEGG CB13;CB13;110D 116C 11AA;CB13;110D 116C 11AA; # (쬓; 쬓; 쬓; 쬓; 쬓; ) HANGUL SYLLABLE JJOEGS CB14;CB14;110D 116C 11AB;CB14;110D 116C 11AB; # (쬔; 쬔; 쬔; 쬔; 쬔; ) HANGUL SYLLABLE JJOEN CB15;CB15;110D 116C 11AC;CB15;110D 116C 11AC; # (쬕; 쬕; 쬕; 쬕; 쬕; ) HANGUL SYLLABLE JJOENJ CB16;CB16;110D 116C 11AD;CB16;110D 116C 11AD; # (쬖; 쬖; 쬖; 쬖; 쬖; ) HANGUL SYLLABLE JJOENH CB17;CB17;110D 116C 11AE;CB17;110D 116C 11AE; # (쬗; 쬗; 쬗; 쬗; 쬗; ) HANGUL SYLLABLE JJOED CB18;CB18;110D 116C 11AF;CB18;110D 116C 11AF; # (쬘; 쬘; 쬘; 쬘; 쬘; ) HANGUL SYLLABLE JJOEL CB19;CB19;110D 116C 11B0;CB19;110D 116C 11B0; # (쬙; 쬙; 쬙; 쬙; 쬙; ) HANGUL SYLLABLE JJOELG CB1A;CB1A;110D 116C 11B1;CB1A;110D 116C 11B1; # (쬚; 쬚; 쬚; 쬚; 쬚; ) HANGUL SYLLABLE JJOELM CB1B;CB1B;110D 116C 11B2;CB1B;110D 116C 11B2; # (쬛; 쬛; 쬛; 쬛; 쬛; ) HANGUL SYLLABLE JJOELB CB1C;CB1C;110D 116C 11B3;CB1C;110D 116C 11B3; # (쬜; 쬜; 쬜; 쬜; 쬜; ) HANGUL SYLLABLE JJOELS CB1D;CB1D;110D 116C 11B4;CB1D;110D 116C 11B4; # (쬝; 쬝; 쬝; 쬝; 쬝; ) HANGUL SYLLABLE JJOELT CB1E;CB1E;110D 116C 11B5;CB1E;110D 116C 11B5; # (쬞; 쬞; 쬞; 쬞; 쬞; ) HANGUL SYLLABLE JJOELP CB1F;CB1F;110D 116C 11B6;CB1F;110D 116C 11B6; # (쬟; 쬟; 쬟; 쬟; 쬟; ) HANGUL SYLLABLE JJOELH CB20;CB20;110D 116C 11B7;CB20;110D 116C 11B7; # (쬠; 쬠; 쬠; 쬠; 쬠; ) HANGUL SYLLABLE JJOEM CB21;CB21;110D 116C 11B8;CB21;110D 116C 11B8; # (쬡; 쬡; 쬡; 쬡; 쬡; ) HANGUL SYLLABLE JJOEB CB22;CB22;110D 116C 11B9;CB22;110D 116C 11B9; # (쬢; 쬢; 쬢; 쬢; 쬢; ) HANGUL SYLLABLE JJOEBS CB23;CB23;110D 116C 11BA;CB23;110D 116C 11BA; # (쬣; 쬣; 쬣; 쬣; 쬣; ) HANGUL SYLLABLE JJOES CB24;CB24;110D 116C 11BB;CB24;110D 116C 11BB; # (쬤; 쬤; 쬤; 쬤; 쬤; ) HANGUL SYLLABLE JJOESS CB25;CB25;110D 116C 11BC;CB25;110D 116C 11BC; # (쬥; 쬥; 쬥; 쬥; 쬥; ) HANGUL SYLLABLE JJOENG CB26;CB26;110D 116C 11BD;CB26;110D 116C 11BD; # (쬦; 쬦; 쬦; 쬦; 쬦; ) HANGUL SYLLABLE JJOEJ CB27;CB27;110D 116C 11BE;CB27;110D 116C 11BE; # (쬧; 쬧; 쬧; 쬧; 쬧; ) HANGUL SYLLABLE JJOEC CB28;CB28;110D 116C 11BF;CB28;110D 116C 11BF; # (쬨; 쬨; 쬨; 쬨; 쬨; ) HANGUL SYLLABLE JJOEK CB29;CB29;110D 116C 11C0;CB29;110D 116C 11C0; # (쬩; 쬩; 쬩; 쬩; 쬩; ) HANGUL SYLLABLE JJOET CB2A;CB2A;110D 116C 11C1;CB2A;110D 116C 11C1; # (쬪; 쬪; 쬪; 쬪; 쬪; ) HANGUL SYLLABLE JJOEP CB2B;CB2B;110D 116C 11C2;CB2B;110D 116C 11C2; # (쬫; 쬫; 쬫; 쬫; 쬫; ) HANGUL SYLLABLE JJOEH CB2C;CB2C;110D 116D;CB2C;110D 116D; # (쬬; 쬬; 쬬; 쬬; 쬬; ) HANGUL SYLLABLE JJYO CB2D;CB2D;110D 116D 11A8;CB2D;110D 116D 11A8; # (쬭; 쬭; 쬭; 쬭; 쬭; ) HANGUL SYLLABLE JJYOG CB2E;CB2E;110D 116D 11A9;CB2E;110D 116D 11A9; # (쬮; 쬮; 쬮; 쬮; 쬮; ) HANGUL SYLLABLE JJYOGG CB2F;CB2F;110D 116D 11AA;CB2F;110D 116D 11AA; # (쬯; 쬯; 쬯; 쬯; 쬯; ) HANGUL SYLLABLE JJYOGS CB30;CB30;110D 116D 11AB;CB30;110D 116D 11AB; # (쬰; 쬰; 쬰; 쬰; 쬰; ) HANGUL SYLLABLE JJYON CB31;CB31;110D 116D 11AC;CB31;110D 116D 11AC; # (쬱; 쬱; 쬱; 쬱; 쬱; ) HANGUL SYLLABLE JJYONJ CB32;CB32;110D 116D 11AD;CB32;110D 116D 11AD; # (쬲; 쬲; 쬲; 쬲; 쬲; ) HANGUL SYLLABLE JJYONH CB33;CB33;110D 116D 11AE;CB33;110D 116D 11AE; # (쬳; 쬳; 쬳; 쬳; 쬳; ) HANGUL SYLLABLE JJYOD CB34;CB34;110D 116D 11AF;CB34;110D 116D 11AF; # (쬴; 쬴; 쬴; 쬴; 쬴; ) HANGUL SYLLABLE JJYOL CB35;CB35;110D 116D 11B0;CB35;110D 116D 11B0; # (쬵; 쬵; 쬵; 쬵; 쬵; ) HANGUL SYLLABLE JJYOLG CB36;CB36;110D 116D 11B1;CB36;110D 116D 11B1; # (쬶; 쬶; 쬶; 쬶; 쬶; ) HANGUL SYLLABLE JJYOLM CB37;CB37;110D 116D 11B2;CB37;110D 116D 11B2; # (쬷; 쬷; 쬷; 쬷; 쬷; ) HANGUL SYLLABLE JJYOLB CB38;CB38;110D 116D 11B3;CB38;110D 116D 11B3; # (쬸; 쬸; 쬸; 쬸; 쬸; ) HANGUL SYLLABLE JJYOLS CB39;CB39;110D 116D 11B4;CB39;110D 116D 11B4; # (쬹; 쬹; 쬹; 쬹; 쬹; ) HANGUL SYLLABLE JJYOLT CB3A;CB3A;110D 116D 11B5;CB3A;110D 116D 11B5; # (쬺; 쬺; 쬺; 쬺; 쬺; ) HANGUL SYLLABLE JJYOLP CB3B;CB3B;110D 116D 11B6;CB3B;110D 116D 11B6; # (쬻; 쬻; 쬻; 쬻; 쬻; ) HANGUL SYLLABLE JJYOLH CB3C;CB3C;110D 116D 11B7;CB3C;110D 116D 11B7; # (쬼; 쬼; 쬼; 쬼; 쬼; ) HANGUL SYLLABLE JJYOM CB3D;CB3D;110D 116D 11B8;CB3D;110D 116D 11B8; # (쬽; 쬽; 쬽; 쬽; 쬽; ) HANGUL SYLLABLE JJYOB CB3E;CB3E;110D 116D 11B9;CB3E;110D 116D 11B9; # (쬾; 쬾; 쬾; 쬾; 쬾; ) HANGUL SYLLABLE JJYOBS CB3F;CB3F;110D 116D 11BA;CB3F;110D 116D 11BA; # (쬿; 쬿; 쬿; 쬿; 쬿; ) HANGUL SYLLABLE JJYOS CB40;CB40;110D 116D 11BB;CB40;110D 116D 11BB; # (쭀; 쭀; 쭀; 쭀; 쭀; ) HANGUL SYLLABLE JJYOSS CB41;CB41;110D 116D 11BC;CB41;110D 116D 11BC; # (쭁; 쭁; 쭁; 쭁; 쭁; ) HANGUL SYLLABLE JJYONG CB42;CB42;110D 116D 11BD;CB42;110D 116D 11BD; # (쭂; 쭂; 쭂; 쭂; 쭂; ) HANGUL SYLLABLE JJYOJ CB43;CB43;110D 116D 11BE;CB43;110D 116D 11BE; # (쭃; 쭃; 쭃; 쭃; 쭃; ) HANGUL SYLLABLE JJYOC CB44;CB44;110D 116D 11BF;CB44;110D 116D 11BF; # (쭄; 쭄; 쭄; 쭄; 쭄; ) HANGUL SYLLABLE JJYOK CB45;CB45;110D 116D 11C0;CB45;110D 116D 11C0; # (쭅; 쭅; 쭅; 쭅; 쭅; ) HANGUL SYLLABLE JJYOT CB46;CB46;110D 116D 11C1;CB46;110D 116D 11C1; # (쭆; 쭆; 쭆; 쭆; 쭆; ) HANGUL SYLLABLE JJYOP CB47;CB47;110D 116D 11C2;CB47;110D 116D 11C2; # (쭇; 쭇; 쭇; 쭇; 쭇; ) HANGUL SYLLABLE JJYOH CB48;CB48;110D 116E;CB48;110D 116E; # (쭈; 쭈; 쭈; 쭈; 쭈; ) HANGUL SYLLABLE JJU CB49;CB49;110D 116E 11A8;CB49;110D 116E 11A8; # (쭉; 쭉; 쭉; 쭉; 쭉; ) HANGUL SYLLABLE JJUG CB4A;CB4A;110D 116E 11A9;CB4A;110D 116E 11A9; # (쭊; 쭊; 쭊; 쭊; 쭊; ) HANGUL SYLLABLE JJUGG CB4B;CB4B;110D 116E 11AA;CB4B;110D 116E 11AA; # (쭋; 쭋; 쭋; 쭋; 쭋; ) HANGUL SYLLABLE JJUGS CB4C;CB4C;110D 116E 11AB;CB4C;110D 116E 11AB; # (쭌; 쭌; 쭌; 쭌; 쭌; ) HANGUL SYLLABLE JJUN CB4D;CB4D;110D 116E 11AC;CB4D;110D 116E 11AC; # (쭍; 쭍; 쭍; 쭍; 쭍; ) HANGUL SYLLABLE JJUNJ CB4E;CB4E;110D 116E 11AD;CB4E;110D 116E 11AD; # (쭎; 쭎; 쭎; 쭎; 쭎; ) HANGUL SYLLABLE JJUNH CB4F;CB4F;110D 116E 11AE;CB4F;110D 116E 11AE; # (쭏; 쭏; 쭏; 쭏; 쭏; ) HANGUL SYLLABLE JJUD CB50;CB50;110D 116E 11AF;CB50;110D 116E 11AF; # (쭐; 쭐; 쭐; 쭐; 쭐; ) HANGUL SYLLABLE JJUL CB51;CB51;110D 116E 11B0;CB51;110D 116E 11B0; # (쭑; 쭑; 쭑; 쭑; 쭑; ) HANGUL SYLLABLE JJULG CB52;CB52;110D 116E 11B1;CB52;110D 116E 11B1; # (쭒; 쭒; 쭒; 쭒; 쭒; ) HANGUL SYLLABLE JJULM CB53;CB53;110D 116E 11B2;CB53;110D 116E 11B2; # (쭓; 쭓; 쭓; 쭓; 쭓; ) HANGUL SYLLABLE JJULB CB54;CB54;110D 116E 11B3;CB54;110D 116E 11B3; # (쭔; 쭔; 쭔; 쭔; 쭔; ) HANGUL SYLLABLE JJULS CB55;CB55;110D 116E 11B4;CB55;110D 116E 11B4; # (쭕; 쭕; 쭕; 쭕; 쭕; ) HANGUL SYLLABLE JJULT CB56;CB56;110D 116E 11B5;CB56;110D 116E 11B5; # (쭖; 쭖; 쭖; 쭖; 쭖; ) HANGUL SYLLABLE JJULP CB57;CB57;110D 116E 11B6;CB57;110D 116E 11B6; # (쭗; 쭗; 쭗; 쭗; 쭗; ) HANGUL SYLLABLE JJULH CB58;CB58;110D 116E 11B7;CB58;110D 116E 11B7; # (쭘; 쭘; 쭘; 쭘; 쭘; ) HANGUL SYLLABLE JJUM CB59;CB59;110D 116E 11B8;CB59;110D 116E 11B8; # (쭙; 쭙; 쭙; 쭙; 쭙; ) HANGUL SYLLABLE JJUB CB5A;CB5A;110D 116E 11B9;CB5A;110D 116E 11B9; # (쭚; 쭚; 쭚; 쭚; 쭚; ) HANGUL SYLLABLE JJUBS CB5B;CB5B;110D 116E 11BA;CB5B;110D 116E 11BA; # (쭛; 쭛; 쭛; 쭛; 쭛; ) HANGUL SYLLABLE JJUS CB5C;CB5C;110D 116E 11BB;CB5C;110D 116E 11BB; # (쭜; 쭜; 쭜; 쭜; 쭜; ) HANGUL SYLLABLE JJUSS CB5D;CB5D;110D 116E 11BC;CB5D;110D 116E 11BC; # (쭝; 쭝; 쭝; 쭝; 쭝; ) HANGUL SYLLABLE JJUNG CB5E;CB5E;110D 116E 11BD;CB5E;110D 116E 11BD; # (쭞; 쭞; 쭞; 쭞; 쭞; ) HANGUL SYLLABLE JJUJ CB5F;CB5F;110D 116E 11BE;CB5F;110D 116E 11BE; # (쭟; 쭟; 쭟; 쭟; 쭟; ) HANGUL SYLLABLE JJUC CB60;CB60;110D 116E 11BF;CB60;110D 116E 11BF; # (쭠; 쭠; 쭠; 쭠; 쭠; ) HANGUL SYLLABLE JJUK CB61;CB61;110D 116E 11C0;CB61;110D 116E 11C0; # (쭡; 쭡; 쭡; 쭡; 쭡; ) HANGUL SYLLABLE JJUT CB62;CB62;110D 116E 11C1;CB62;110D 116E 11C1; # (쭢; 쭢; 쭢; 쭢; 쭢; ) HANGUL SYLLABLE JJUP CB63;CB63;110D 116E 11C2;CB63;110D 116E 11C2; # (쭣; 쭣; 쭣; 쭣; 쭣; ) HANGUL SYLLABLE JJUH CB64;CB64;110D 116F;CB64;110D 116F; # (쭤; 쭤; 쭤; 쭤; 쭤; ) HANGUL SYLLABLE JJWEO CB65;CB65;110D 116F 11A8;CB65;110D 116F 11A8; # (쭥; 쭥; 쭥; 쭥; 쭥; ) HANGUL SYLLABLE JJWEOG CB66;CB66;110D 116F 11A9;CB66;110D 116F 11A9; # (쭦; 쭦; 쭦; 쭦; 쭦; ) HANGUL SYLLABLE JJWEOGG CB67;CB67;110D 116F 11AA;CB67;110D 116F 11AA; # (쭧; 쭧; 쭧; 쭧; 쭧; ) HANGUL SYLLABLE JJWEOGS CB68;CB68;110D 116F 11AB;CB68;110D 116F 11AB; # (쭨; 쭨; 쭨; 쭨; 쭨; ) HANGUL SYLLABLE JJWEON CB69;CB69;110D 116F 11AC;CB69;110D 116F 11AC; # (쭩; 쭩; 쭩; 쭩; 쭩; ) HANGUL SYLLABLE JJWEONJ CB6A;CB6A;110D 116F 11AD;CB6A;110D 116F 11AD; # (쭪; 쭪; 쭪; 쭪; 쭪; ) HANGUL SYLLABLE JJWEONH CB6B;CB6B;110D 116F 11AE;CB6B;110D 116F 11AE; # (쭫; 쭫; 쭫; 쭫; 쭫; ) HANGUL SYLLABLE JJWEOD CB6C;CB6C;110D 116F 11AF;CB6C;110D 116F 11AF; # (쭬; 쭬; 쭬; 쭬; 쭬; ) HANGUL SYLLABLE JJWEOL CB6D;CB6D;110D 116F 11B0;CB6D;110D 116F 11B0; # (쭭; 쭭; 쭭; 쭭; 쭭; ) HANGUL SYLLABLE JJWEOLG CB6E;CB6E;110D 116F 11B1;CB6E;110D 116F 11B1; # (쭮; 쭮; 쭮; 쭮; 쭮; ) HANGUL SYLLABLE JJWEOLM CB6F;CB6F;110D 116F 11B2;CB6F;110D 116F 11B2; # (쭯; 쭯; 쭯; 쭯; 쭯; ) HANGUL SYLLABLE JJWEOLB CB70;CB70;110D 116F 11B3;CB70;110D 116F 11B3; # (쭰; 쭰; 쭰; 쭰; 쭰; ) HANGUL SYLLABLE JJWEOLS CB71;CB71;110D 116F 11B4;CB71;110D 116F 11B4; # (쭱; 쭱; 쭱; 쭱; 쭱; ) HANGUL SYLLABLE JJWEOLT CB72;CB72;110D 116F 11B5;CB72;110D 116F 11B5; # (쭲; 쭲; 쭲; 쭲; 쭲; ) HANGUL SYLLABLE JJWEOLP CB73;CB73;110D 116F 11B6;CB73;110D 116F 11B6; # (쭳; 쭳; 쭳; 쭳; 쭳; ) HANGUL SYLLABLE JJWEOLH CB74;CB74;110D 116F 11B7;CB74;110D 116F 11B7; # (쭴; 쭴; 쭴; 쭴; 쭴; ) HANGUL SYLLABLE JJWEOM CB75;CB75;110D 116F 11B8;CB75;110D 116F 11B8; # (쭵; 쭵; 쭵; 쭵; 쭵; ) HANGUL SYLLABLE JJWEOB CB76;CB76;110D 116F 11B9;CB76;110D 116F 11B9; # (쭶; 쭶; 쭶; 쭶; 쭶; ) HANGUL SYLLABLE JJWEOBS CB77;CB77;110D 116F 11BA;CB77;110D 116F 11BA; # (쭷; 쭷; 쭷; 쭷; 쭷; ) HANGUL SYLLABLE JJWEOS CB78;CB78;110D 116F 11BB;CB78;110D 116F 11BB; # (쭸; 쭸; 쭸; 쭸; 쭸; ) HANGUL SYLLABLE JJWEOSS CB79;CB79;110D 116F 11BC;CB79;110D 116F 11BC; # (쭹; 쭹; 쭹; 쭹; 쭹; ) HANGUL SYLLABLE JJWEONG CB7A;CB7A;110D 116F 11BD;CB7A;110D 116F 11BD; # (쭺; 쭺; 쭺; 쭺; 쭺; ) HANGUL SYLLABLE JJWEOJ CB7B;CB7B;110D 116F 11BE;CB7B;110D 116F 11BE; # (쭻; 쭻; 쭻; 쭻; 쭻; ) HANGUL SYLLABLE JJWEOC CB7C;CB7C;110D 116F 11BF;CB7C;110D 116F 11BF; # (쭼; 쭼; 쭼; 쭼; 쭼; ) HANGUL SYLLABLE JJWEOK CB7D;CB7D;110D 116F 11C0;CB7D;110D 116F 11C0; # (쭽; 쭽; 쭽; 쭽; 쭽; ) HANGUL SYLLABLE JJWEOT CB7E;CB7E;110D 116F 11C1;CB7E;110D 116F 11C1; # (쭾; 쭾; 쭾; 쭾; 쭾; ) HANGUL SYLLABLE JJWEOP CB7F;CB7F;110D 116F 11C2;CB7F;110D 116F 11C2; # (쭿; 쭿; 쭿; 쭿; 쭿; ) HANGUL SYLLABLE JJWEOH CB80;CB80;110D 1170;CB80;110D 1170; # (쮀; 쮀; 쮀; 쮀; 쮀; ) HANGUL SYLLABLE JJWE CB81;CB81;110D 1170 11A8;CB81;110D 1170 11A8; # (쮁; 쮁; 쮁; 쮁; 쮁; ) HANGUL SYLLABLE JJWEG CB82;CB82;110D 1170 11A9;CB82;110D 1170 11A9; # (쮂; 쮂; 쮂; 쮂; 쮂; ) HANGUL SYLLABLE JJWEGG CB83;CB83;110D 1170 11AA;CB83;110D 1170 11AA; # (쮃; 쮃; 쮃; 쮃; 쮃; ) HANGUL SYLLABLE JJWEGS CB84;CB84;110D 1170 11AB;CB84;110D 1170 11AB; # (쮄; 쮄; 쮄; 쮄; 쮄; ) HANGUL SYLLABLE JJWEN CB85;CB85;110D 1170 11AC;CB85;110D 1170 11AC; # (쮅; 쮅; 쮅; 쮅; 쮅; ) HANGUL SYLLABLE JJWENJ CB86;CB86;110D 1170 11AD;CB86;110D 1170 11AD; # (쮆; 쮆; 쮆; 쮆; 쮆; ) HANGUL SYLLABLE JJWENH CB87;CB87;110D 1170 11AE;CB87;110D 1170 11AE; # (쮇; 쮇; 쮇; 쮇; 쮇; ) HANGUL SYLLABLE JJWED CB88;CB88;110D 1170 11AF;CB88;110D 1170 11AF; # (쮈; 쮈; 쮈; 쮈; 쮈; ) HANGUL SYLLABLE JJWEL CB89;CB89;110D 1170 11B0;CB89;110D 1170 11B0; # (쮉; 쮉; 쮉; 쮉; 쮉; ) HANGUL SYLLABLE JJWELG CB8A;CB8A;110D 1170 11B1;CB8A;110D 1170 11B1; # (쮊; 쮊; 쮊; 쮊; 쮊; ) HANGUL SYLLABLE JJWELM CB8B;CB8B;110D 1170 11B2;CB8B;110D 1170 11B2; # (쮋; 쮋; 쮋; 쮋; 쮋; ) HANGUL SYLLABLE JJWELB CB8C;CB8C;110D 1170 11B3;CB8C;110D 1170 11B3; # (쮌; 쮌; 쮌; 쮌; 쮌; ) HANGUL SYLLABLE JJWELS CB8D;CB8D;110D 1170 11B4;CB8D;110D 1170 11B4; # (쮍; 쮍; 쮍; 쮍; 쮍; ) HANGUL SYLLABLE JJWELT CB8E;CB8E;110D 1170 11B5;CB8E;110D 1170 11B5; # (쮎; 쮎; 쮎; 쮎; 쮎; ) HANGUL SYLLABLE JJWELP CB8F;CB8F;110D 1170 11B6;CB8F;110D 1170 11B6; # (쮏; 쮏; 쮏; 쮏; 쮏; ) HANGUL SYLLABLE JJWELH CB90;CB90;110D 1170 11B7;CB90;110D 1170 11B7; # (쮐; 쮐; 쮐; 쮐; 쮐; ) HANGUL SYLLABLE JJWEM CB91;CB91;110D 1170 11B8;CB91;110D 1170 11B8; # (쮑; 쮑; 쮑; 쮑; 쮑; ) HANGUL SYLLABLE JJWEB CB92;CB92;110D 1170 11B9;CB92;110D 1170 11B9; # (쮒; 쮒; 쮒; 쮒; 쮒; ) HANGUL SYLLABLE JJWEBS CB93;CB93;110D 1170 11BA;CB93;110D 1170 11BA; # (쮓; 쮓; 쮓; 쮓; 쮓; ) HANGUL SYLLABLE JJWES CB94;CB94;110D 1170 11BB;CB94;110D 1170 11BB; # (쮔; 쮔; 쮔; 쮔; 쮔; ) HANGUL SYLLABLE JJWESS CB95;CB95;110D 1170 11BC;CB95;110D 1170 11BC; # (쮕; 쮕; 쮕; 쮕; 쮕; ) HANGUL SYLLABLE JJWENG CB96;CB96;110D 1170 11BD;CB96;110D 1170 11BD; # (쮖; 쮖; 쮖; 쮖; 쮖; ) HANGUL SYLLABLE JJWEJ CB97;CB97;110D 1170 11BE;CB97;110D 1170 11BE; # (쮗; 쮗; 쮗; 쮗; 쮗; ) HANGUL SYLLABLE JJWEC CB98;CB98;110D 1170 11BF;CB98;110D 1170 11BF; # (쮘; 쮘; 쮘; 쮘; 쮘; ) HANGUL SYLLABLE JJWEK CB99;CB99;110D 1170 11C0;CB99;110D 1170 11C0; # (쮙; 쮙; 쮙; 쮙; 쮙; ) HANGUL SYLLABLE JJWET CB9A;CB9A;110D 1170 11C1;CB9A;110D 1170 11C1; # (쮚; 쮚; 쮚; 쮚; 쮚; ) HANGUL SYLLABLE JJWEP CB9B;CB9B;110D 1170 11C2;CB9B;110D 1170 11C2; # (쮛; 쮛; 쮛; 쮛; 쮛; ) HANGUL SYLLABLE JJWEH CB9C;CB9C;110D 1171;CB9C;110D 1171; # (쮜; 쮜; 쮜; 쮜; 쮜; ) HANGUL SYLLABLE JJWI CB9D;CB9D;110D 1171 11A8;CB9D;110D 1171 11A8; # (쮝; 쮝; 쮝; 쮝; 쮝; ) HANGUL SYLLABLE JJWIG CB9E;CB9E;110D 1171 11A9;CB9E;110D 1171 11A9; # (쮞; 쮞; 쮞; 쮞; 쮞; ) HANGUL SYLLABLE JJWIGG CB9F;CB9F;110D 1171 11AA;CB9F;110D 1171 11AA; # (쮟; 쮟; 쮟; 쮟; 쮟; ) HANGUL SYLLABLE JJWIGS CBA0;CBA0;110D 1171 11AB;CBA0;110D 1171 11AB; # (쮠; 쮠; 쮠; 쮠; 쮠; ) HANGUL SYLLABLE JJWIN CBA1;CBA1;110D 1171 11AC;CBA1;110D 1171 11AC; # (쮡; 쮡; 쮡; 쮡; 쮡; ) HANGUL SYLLABLE JJWINJ CBA2;CBA2;110D 1171 11AD;CBA2;110D 1171 11AD; # (쮢; 쮢; 쮢; 쮢; 쮢; ) HANGUL SYLLABLE JJWINH CBA3;CBA3;110D 1171 11AE;CBA3;110D 1171 11AE; # (쮣; 쮣; 쮣; 쮣; 쮣; ) HANGUL SYLLABLE JJWID CBA4;CBA4;110D 1171 11AF;CBA4;110D 1171 11AF; # (쮤; 쮤; 쮤; 쮤; 쮤; ) HANGUL SYLLABLE JJWIL CBA5;CBA5;110D 1171 11B0;CBA5;110D 1171 11B0; # (쮥; 쮥; 쮥; 쮥; 쮥; ) HANGUL SYLLABLE JJWILG CBA6;CBA6;110D 1171 11B1;CBA6;110D 1171 11B1; # (쮦; 쮦; 쮦; 쮦; 쮦; ) HANGUL SYLLABLE JJWILM CBA7;CBA7;110D 1171 11B2;CBA7;110D 1171 11B2; # (쮧; 쮧; 쮧; 쮧; 쮧; ) HANGUL SYLLABLE JJWILB CBA8;CBA8;110D 1171 11B3;CBA8;110D 1171 11B3; # (쮨; 쮨; 쮨; 쮨; 쮨; ) HANGUL SYLLABLE JJWILS CBA9;CBA9;110D 1171 11B4;CBA9;110D 1171 11B4; # (쮩; 쮩; 쮩; 쮩; 쮩; ) HANGUL SYLLABLE JJWILT CBAA;CBAA;110D 1171 11B5;CBAA;110D 1171 11B5; # (쮪; 쮪; 쮪; 쮪; 쮪; ) HANGUL SYLLABLE JJWILP CBAB;CBAB;110D 1171 11B6;CBAB;110D 1171 11B6; # (쮫; 쮫; 쮫; 쮫; 쮫; ) HANGUL SYLLABLE JJWILH CBAC;CBAC;110D 1171 11B7;CBAC;110D 1171 11B7; # (쮬; 쮬; 쮬; 쮬; 쮬; ) HANGUL SYLLABLE JJWIM CBAD;CBAD;110D 1171 11B8;CBAD;110D 1171 11B8; # (쮭; 쮭; 쮭; 쮭; 쮭; ) HANGUL SYLLABLE JJWIB CBAE;CBAE;110D 1171 11B9;CBAE;110D 1171 11B9; # (쮮; 쮮; 쮮; 쮮; 쮮; ) HANGUL SYLLABLE JJWIBS CBAF;CBAF;110D 1171 11BA;CBAF;110D 1171 11BA; # (쮯; 쮯; 쮯; 쮯; 쮯; ) HANGUL SYLLABLE JJWIS CBB0;CBB0;110D 1171 11BB;CBB0;110D 1171 11BB; # (쮰; 쮰; 쮰; 쮰; 쮰; ) HANGUL SYLLABLE JJWISS CBB1;CBB1;110D 1171 11BC;CBB1;110D 1171 11BC; # (쮱; 쮱; 쮱; 쮱; 쮱; ) HANGUL SYLLABLE JJWING CBB2;CBB2;110D 1171 11BD;CBB2;110D 1171 11BD; # (쮲; 쮲; 쮲; 쮲; 쮲; ) HANGUL SYLLABLE JJWIJ CBB3;CBB3;110D 1171 11BE;CBB3;110D 1171 11BE; # (쮳; 쮳; 쮳; 쮳; 쮳; ) HANGUL SYLLABLE JJWIC CBB4;CBB4;110D 1171 11BF;CBB4;110D 1171 11BF; # (쮴; 쮴; 쮴; 쮴; 쮴; ) HANGUL SYLLABLE JJWIK CBB5;CBB5;110D 1171 11C0;CBB5;110D 1171 11C0; # (쮵; 쮵; 쮵; 쮵; 쮵; ) HANGUL SYLLABLE JJWIT CBB6;CBB6;110D 1171 11C1;CBB6;110D 1171 11C1; # (쮶; 쮶; 쮶; 쮶; 쮶; ) HANGUL SYLLABLE JJWIP CBB7;CBB7;110D 1171 11C2;CBB7;110D 1171 11C2; # (쮷; 쮷; 쮷; 쮷; 쮷; ) HANGUL SYLLABLE JJWIH CBB8;CBB8;110D 1172;CBB8;110D 1172; # (쮸; 쮸; 쮸; 쮸; 쮸; ) HANGUL SYLLABLE JJYU CBB9;CBB9;110D 1172 11A8;CBB9;110D 1172 11A8; # (쮹; 쮹; 쮹; 쮹; 쮹; ) HANGUL SYLLABLE JJYUG CBBA;CBBA;110D 1172 11A9;CBBA;110D 1172 11A9; # (쮺; 쮺; 쮺; 쮺; 쮺; ) HANGUL SYLLABLE JJYUGG CBBB;CBBB;110D 1172 11AA;CBBB;110D 1172 11AA; # (쮻; 쮻; 쮻; 쮻; 쮻; ) HANGUL SYLLABLE JJYUGS CBBC;CBBC;110D 1172 11AB;CBBC;110D 1172 11AB; # (쮼; 쮼; 쮼; 쮼; 쮼; ) HANGUL SYLLABLE JJYUN CBBD;CBBD;110D 1172 11AC;CBBD;110D 1172 11AC; # (쮽; 쮽; 쮽; 쮽; 쮽; ) HANGUL SYLLABLE JJYUNJ CBBE;CBBE;110D 1172 11AD;CBBE;110D 1172 11AD; # (쮾; 쮾; 쮾; 쮾; 쮾; ) HANGUL SYLLABLE JJYUNH CBBF;CBBF;110D 1172 11AE;CBBF;110D 1172 11AE; # (쮿; 쮿; 쮿; 쮿; 쮿; ) HANGUL SYLLABLE JJYUD CBC0;CBC0;110D 1172 11AF;CBC0;110D 1172 11AF; # (쯀; 쯀; 쯀; 쯀; 쯀; ) HANGUL SYLLABLE JJYUL CBC1;CBC1;110D 1172 11B0;CBC1;110D 1172 11B0; # (쯁; 쯁; 쯁; 쯁; 쯁; ) HANGUL SYLLABLE JJYULG CBC2;CBC2;110D 1172 11B1;CBC2;110D 1172 11B1; # (쯂; 쯂; 쯂; 쯂; 쯂; ) HANGUL SYLLABLE JJYULM CBC3;CBC3;110D 1172 11B2;CBC3;110D 1172 11B2; # (쯃; 쯃; 쯃; 쯃; 쯃; ) HANGUL SYLLABLE JJYULB CBC4;CBC4;110D 1172 11B3;CBC4;110D 1172 11B3; # (쯄; 쯄; 쯄; 쯄; 쯄; ) HANGUL SYLLABLE JJYULS CBC5;CBC5;110D 1172 11B4;CBC5;110D 1172 11B4; # (쯅; 쯅; 쯅; 쯅; 쯅; ) HANGUL SYLLABLE JJYULT CBC6;CBC6;110D 1172 11B5;CBC6;110D 1172 11B5; # (쯆; 쯆; 쯆; 쯆; 쯆; ) HANGUL SYLLABLE JJYULP CBC7;CBC7;110D 1172 11B6;CBC7;110D 1172 11B6; # (쯇; 쯇; 쯇; 쯇; 쯇; ) HANGUL SYLLABLE JJYULH CBC8;CBC8;110D 1172 11B7;CBC8;110D 1172 11B7; # (쯈; 쯈; 쯈; 쯈; 쯈; ) HANGUL SYLLABLE JJYUM CBC9;CBC9;110D 1172 11B8;CBC9;110D 1172 11B8; # (쯉; 쯉; 쯉; 쯉; 쯉; ) HANGUL SYLLABLE JJYUB CBCA;CBCA;110D 1172 11B9;CBCA;110D 1172 11B9; # (쯊; 쯊; 쯊; 쯊; 쯊; ) HANGUL SYLLABLE JJYUBS CBCB;CBCB;110D 1172 11BA;CBCB;110D 1172 11BA; # (쯋; 쯋; 쯋; 쯋; 쯋; ) HANGUL SYLLABLE JJYUS CBCC;CBCC;110D 1172 11BB;CBCC;110D 1172 11BB; # (쯌; 쯌; 쯌; 쯌; 쯌; ) HANGUL SYLLABLE JJYUSS CBCD;CBCD;110D 1172 11BC;CBCD;110D 1172 11BC; # (쯍; 쯍; 쯍; 쯍; 쯍; ) HANGUL SYLLABLE JJYUNG CBCE;CBCE;110D 1172 11BD;CBCE;110D 1172 11BD; # (쯎; 쯎; 쯎; 쯎; 쯎; ) HANGUL SYLLABLE JJYUJ CBCF;CBCF;110D 1172 11BE;CBCF;110D 1172 11BE; # (쯏; 쯏; 쯏; 쯏; 쯏; ) HANGUL SYLLABLE JJYUC CBD0;CBD0;110D 1172 11BF;CBD0;110D 1172 11BF; # (쯐; 쯐; 쯐; 쯐; 쯐; ) HANGUL SYLLABLE JJYUK CBD1;CBD1;110D 1172 11C0;CBD1;110D 1172 11C0; # (쯑; 쯑; 쯑; 쯑; 쯑; ) HANGUL SYLLABLE JJYUT CBD2;CBD2;110D 1172 11C1;CBD2;110D 1172 11C1; # (쯒; 쯒; 쯒; 쯒; 쯒; ) HANGUL SYLLABLE JJYUP CBD3;CBD3;110D 1172 11C2;CBD3;110D 1172 11C2; # (쯓; 쯓; 쯓; 쯓; 쯓; ) HANGUL SYLLABLE JJYUH CBD4;CBD4;110D 1173;CBD4;110D 1173; # (쯔; 쯔; 쯔; 쯔; 쯔; ) HANGUL SYLLABLE JJEU CBD5;CBD5;110D 1173 11A8;CBD5;110D 1173 11A8; # (쯕; 쯕; 쯕; 쯕; 쯕; ) HANGUL SYLLABLE JJEUG CBD6;CBD6;110D 1173 11A9;CBD6;110D 1173 11A9; # (쯖; 쯖; 쯖; 쯖; 쯖; ) HANGUL SYLLABLE JJEUGG CBD7;CBD7;110D 1173 11AA;CBD7;110D 1173 11AA; # (쯗; 쯗; 쯗; 쯗; 쯗; ) HANGUL SYLLABLE JJEUGS CBD8;CBD8;110D 1173 11AB;CBD8;110D 1173 11AB; # (쯘; 쯘; 쯘; 쯘; 쯘; ) HANGUL SYLLABLE JJEUN CBD9;CBD9;110D 1173 11AC;CBD9;110D 1173 11AC; # (쯙; 쯙; 쯙; 쯙; 쯙; ) HANGUL SYLLABLE JJEUNJ CBDA;CBDA;110D 1173 11AD;CBDA;110D 1173 11AD; # (쯚; 쯚; 쯚; 쯚; 쯚; ) HANGUL SYLLABLE JJEUNH CBDB;CBDB;110D 1173 11AE;CBDB;110D 1173 11AE; # (쯛; 쯛; 쯛; 쯛; 쯛; ) HANGUL SYLLABLE JJEUD CBDC;CBDC;110D 1173 11AF;CBDC;110D 1173 11AF; # (쯜; 쯜; 쯜; 쯜; 쯜; ) HANGUL SYLLABLE JJEUL CBDD;CBDD;110D 1173 11B0;CBDD;110D 1173 11B0; # (쯝; 쯝; 쯝; 쯝; 쯝; ) HANGUL SYLLABLE JJEULG CBDE;CBDE;110D 1173 11B1;CBDE;110D 1173 11B1; # (쯞; 쯞; 쯞; 쯞; 쯞; ) HANGUL SYLLABLE JJEULM CBDF;CBDF;110D 1173 11B2;CBDF;110D 1173 11B2; # (쯟; 쯟; 쯟; 쯟; 쯟; ) HANGUL SYLLABLE JJEULB CBE0;CBE0;110D 1173 11B3;CBE0;110D 1173 11B3; # (쯠; 쯠; 쯠; 쯠; 쯠; ) HANGUL SYLLABLE JJEULS CBE1;CBE1;110D 1173 11B4;CBE1;110D 1173 11B4; # (쯡; 쯡; 쯡; 쯡; 쯡; ) HANGUL SYLLABLE JJEULT CBE2;CBE2;110D 1173 11B5;CBE2;110D 1173 11B5; # (쯢; 쯢; 쯢; 쯢; 쯢; ) HANGUL SYLLABLE JJEULP CBE3;CBE3;110D 1173 11B6;CBE3;110D 1173 11B6; # (쯣; 쯣; 쯣; 쯣; 쯣; ) HANGUL SYLLABLE JJEULH CBE4;CBE4;110D 1173 11B7;CBE4;110D 1173 11B7; # (쯤; 쯤; 쯤; 쯤; 쯤; ) HANGUL SYLLABLE JJEUM CBE5;CBE5;110D 1173 11B8;CBE5;110D 1173 11B8; # (쯥; 쯥; 쯥; 쯥; 쯥; ) HANGUL SYLLABLE JJEUB CBE6;CBE6;110D 1173 11B9;CBE6;110D 1173 11B9; # (쯦; 쯦; 쯦; 쯦; 쯦; ) HANGUL SYLLABLE JJEUBS CBE7;CBE7;110D 1173 11BA;CBE7;110D 1173 11BA; # (쯧; 쯧; 쯧; 쯧; 쯧; ) HANGUL SYLLABLE JJEUS CBE8;CBE8;110D 1173 11BB;CBE8;110D 1173 11BB; # (쯨; 쯨; 쯨; 쯨; 쯨; ) HANGUL SYLLABLE JJEUSS CBE9;CBE9;110D 1173 11BC;CBE9;110D 1173 11BC; # (쯩; 쯩; 쯩; 쯩; 쯩; ) HANGUL SYLLABLE JJEUNG CBEA;CBEA;110D 1173 11BD;CBEA;110D 1173 11BD; # (쯪; 쯪; 쯪; 쯪; 쯪; ) HANGUL SYLLABLE JJEUJ CBEB;CBEB;110D 1173 11BE;CBEB;110D 1173 11BE; # (쯫; 쯫; 쯫; 쯫; 쯫; ) HANGUL SYLLABLE JJEUC CBEC;CBEC;110D 1173 11BF;CBEC;110D 1173 11BF; # (쯬; 쯬; 쯬; 쯬; 쯬; ) HANGUL SYLLABLE JJEUK CBED;CBED;110D 1173 11C0;CBED;110D 1173 11C0; # (쯭; 쯭; 쯭; 쯭; 쯭; ) HANGUL SYLLABLE JJEUT CBEE;CBEE;110D 1173 11C1;CBEE;110D 1173 11C1; # (쯮; 쯮; 쯮; 쯮; 쯮; ) HANGUL SYLLABLE JJEUP CBEF;CBEF;110D 1173 11C2;CBEF;110D 1173 11C2; # (쯯; 쯯; 쯯; 쯯; 쯯; ) HANGUL SYLLABLE JJEUH CBF0;CBF0;110D 1174;CBF0;110D 1174; # (쯰; 쯰; 쯰; 쯰; 쯰; ) HANGUL SYLLABLE JJYI CBF1;CBF1;110D 1174 11A8;CBF1;110D 1174 11A8; # (쯱; 쯱; 쯱; 쯱; 쯱; ) HANGUL SYLLABLE JJYIG CBF2;CBF2;110D 1174 11A9;CBF2;110D 1174 11A9; # (쯲; 쯲; 쯲; 쯲; 쯲; ) HANGUL SYLLABLE JJYIGG CBF3;CBF3;110D 1174 11AA;CBF3;110D 1174 11AA; # (쯳; 쯳; 쯳; 쯳; 쯳; ) HANGUL SYLLABLE JJYIGS CBF4;CBF4;110D 1174 11AB;CBF4;110D 1174 11AB; # (쯴; 쯴; 쯴; 쯴; 쯴; ) HANGUL SYLLABLE JJYIN CBF5;CBF5;110D 1174 11AC;CBF5;110D 1174 11AC; # (쯵; 쯵; 쯵; 쯵; 쯵; ) HANGUL SYLLABLE JJYINJ CBF6;CBF6;110D 1174 11AD;CBF6;110D 1174 11AD; # (쯶; 쯶; 쯶; 쯶; 쯶; ) HANGUL SYLLABLE JJYINH CBF7;CBF7;110D 1174 11AE;CBF7;110D 1174 11AE; # (쯷; 쯷; 쯷; 쯷; 쯷; ) HANGUL SYLLABLE JJYID CBF8;CBF8;110D 1174 11AF;CBF8;110D 1174 11AF; # (쯸; 쯸; 쯸; 쯸; 쯸; ) HANGUL SYLLABLE JJYIL CBF9;CBF9;110D 1174 11B0;CBF9;110D 1174 11B0; # (쯹; 쯹; 쯹; 쯹; 쯹; ) HANGUL SYLLABLE JJYILG CBFA;CBFA;110D 1174 11B1;CBFA;110D 1174 11B1; # (쯺; 쯺; 쯺; 쯺; 쯺; ) HANGUL SYLLABLE JJYILM CBFB;CBFB;110D 1174 11B2;CBFB;110D 1174 11B2; # (쯻; 쯻; 쯻; 쯻; 쯻; ) HANGUL SYLLABLE JJYILB CBFC;CBFC;110D 1174 11B3;CBFC;110D 1174 11B3; # (쯼; 쯼; 쯼; 쯼; 쯼; ) HANGUL SYLLABLE JJYILS CBFD;CBFD;110D 1174 11B4;CBFD;110D 1174 11B4; # (쯽; 쯽; 쯽; 쯽; 쯽; ) HANGUL SYLLABLE JJYILT CBFE;CBFE;110D 1174 11B5;CBFE;110D 1174 11B5; # (쯾; 쯾; 쯾; 쯾; 쯾; ) HANGUL SYLLABLE JJYILP CBFF;CBFF;110D 1174 11B6;CBFF;110D 1174 11B6; # (쯿; 쯿; 쯿; 쯿; 쯿; ) HANGUL SYLLABLE JJYILH CC00;CC00;110D 1174 11B7;CC00;110D 1174 11B7; # (찀; 찀; 찀; 찀; 찀; ) HANGUL SYLLABLE JJYIM CC01;CC01;110D 1174 11B8;CC01;110D 1174 11B8; # (찁; 찁; 찁; 찁; 찁; ) HANGUL SYLLABLE JJYIB CC02;CC02;110D 1174 11B9;CC02;110D 1174 11B9; # (찂; 찂; 찂; 찂; 찂; ) HANGUL SYLLABLE JJYIBS CC03;CC03;110D 1174 11BA;CC03;110D 1174 11BA; # (찃; 찃; 찃; 찃; 찃; ) HANGUL SYLLABLE JJYIS CC04;CC04;110D 1174 11BB;CC04;110D 1174 11BB; # (찄; 찄; 찄; 찄; 찄; ) HANGUL SYLLABLE JJYISS CC05;CC05;110D 1174 11BC;CC05;110D 1174 11BC; # (찅; 찅; 찅; 찅; 찅; ) HANGUL SYLLABLE JJYING CC06;CC06;110D 1174 11BD;CC06;110D 1174 11BD; # (찆; 찆; 찆; 찆; 찆; ) HANGUL SYLLABLE JJYIJ CC07;CC07;110D 1174 11BE;CC07;110D 1174 11BE; # (찇; 찇; 찇; 찇; 찇; ) HANGUL SYLLABLE JJYIC CC08;CC08;110D 1174 11BF;CC08;110D 1174 11BF; # (찈; 찈; 찈; 찈; 찈; ) HANGUL SYLLABLE JJYIK CC09;CC09;110D 1174 11C0;CC09;110D 1174 11C0; # (찉; 찉; 찉; 찉; 찉; ) HANGUL SYLLABLE JJYIT CC0A;CC0A;110D 1174 11C1;CC0A;110D 1174 11C1; # (찊; 찊; 찊; 찊; 찊; ) HANGUL SYLLABLE JJYIP CC0B;CC0B;110D 1174 11C2;CC0B;110D 1174 11C2; # (찋; 찋; 찋; 찋; 찋; ) HANGUL SYLLABLE JJYIH CC0C;CC0C;110D 1175;CC0C;110D 1175; # (찌; 찌; 찌; 찌; 찌; ) HANGUL SYLLABLE JJI CC0D;CC0D;110D 1175 11A8;CC0D;110D 1175 11A8; # (찍; 찍; 찍; 찍; 찍; ) HANGUL SYLLABLE JJIG CC0E;CC0E;110D 1175 11A9;CC0E;110D 1175 11A9; # (찎; 찎; 찎; 찎; 찎; ) HANGUL SYLLABLE JJIGG CC0F;CC0F;110D 1175 11AA;CC0F;110D 1175 11AA; # (찏; 찏; 찏; 찏; 찏; ) HANGUL SYLLABLE JJIGS CC10;CC10;110D 1175 11AB;CC10;110D 1175 11AB; # (찐; 찐; 찐; 찐; 찐; ) HANGUL SYLLABLE JJIN CC11;CC11;110D 1175 11AC;CC11;110D 1175 11AC; # (찑; 찑; 찑; 찑; 찑; ) HANGUL SYLLABLE JJINJ CC12;CC12;110D 1175 11AD;CC12;110D 1175 11AD; # (찒; 찒; 찒; 찒; 찒; ) HANGUL SYLLABLE JJINH CC13;CC13;110D 1175 11AE;CC13;110D 1175 11AE; # (찓; 찓; 찓; 찓; 찓; ) HANGUL SYLLABLE JJID CC14;CC14;110D 1175 11AF;CC14;110D 1175 11AF; # (찔; 찔; 찔; 찔; 찔; ) HANGUL SYLLABLE JJIL CC15;CC15;110D 1175 11B0;CC15;110D 1175 11B0; # (찕; 찕; 찕; 찕; 찕; ) HANGUL SYLLABLE JJILG CC16;CC16;110D 1175 11B1;CC16;110D 1175 11B1; # (찖; 찖; 찖; 찖; 찖; ) HANGUL SYLLABLE JJILM CC17;CC17;110D 1175 11B2;CC17;110D 1175 11B2; # (찗; 찗; 찗; 찗; 찗; ) HANGUL SYLLABLE JJILB CC18;CC18;110D 1175 11B3;CC18;110D 1175 11B3; # (찘; 찘; 찘; 찘; 찘; ) HANGUL SYLLABLE JJILS CC19;CC19;110D 1175 11B4;CC19;110D 1175 11B4; # (찙; 찙; 찙; 찙; 찙; ) HANGUL SYLLABLE JJILT CC1A;CC1A;110D 1175 11B5;CC1A;110D 1175 11B5; # (찚; 찚; 찚; 찚; 찚; ) HANGUL SYLLABLE JJILP CC1B;CC1B;110D 1175 11B6;CC1B;110D 1175 11B6; # (찛; 찛; 찛; 찛; 찛; ) HANGUL SYLLABLE JJILH CC1C;CC1C;110D 1175 11B7;CC1C;110D 1175 11B7; # (찜; 찜; 찜; 찜; 찜; ) HANGUL SYLLABLE JJIM CC1D;CC1D;110D 1175 11B8;CC1D;110D 1175 11B8; # (찝; 찝; 찝; 찝; 찝; ) HANGUL SYLLABLE JJIB CC1E;CC1E;110D 1175 11B9;CC1E;110D 1175 11B9; # (찞; 찞; 찞; 찞; 찞; ) HANGUL SYLLABLE JJIBS CC1F;CC1F;110D 1175 11BA;CC1F;110D 1175 11BA; # (찟; 찟; 찟; 찟; 찟; ) HANGUL SYLLABLE JJIS CC20;CC20;110D 1175 11BB;CC20;110D 1175 11BB; # (찠; 찠; 찠; 찠; 찠; ) HANGUL SYLLABLE JJISS CC21;CC21;110D 1175 11BC;CC21;110D 1175 11BC; # (찡; 찡; 찡; 찡; 찡; ) HANGUL SYLLABLE JJING CC22;CC22;110D 1175 11BD;CC22;110D 1175 11BD; # (찢; 찢; 찢; 찢; 찢; ) HANGUL SYLLABLE JJIJ CC23;CC23;110D 1175 11BE;CC23;110D 1175 11BE; # (찣; 찣; 찣; 찣; 찣; ) HANGUL SYLLABLE JJIC CC24;CC24;110D 1175 11BF;CC24;110D 1175 11BF; # (찤; 찤; 찤; 찤; 찤; ) HANGUL SYLLABLE JJIK CC25;CC25;110D 1175 11C0;CC25;110D 1175 11C0; # (찥; 찥; 찥; 찥; 찥; ) HANGUL SYLLABLE JJIT CC26;CC26;110D 1175 11C1;CC26;110D 1175 11C1; # (찦; 찦; 찦; 찦; 찦; ) HANGUL SYLLABLE JJIP CC27;CC27;110D 1175 11C2;CC27;110D 1175 11C2; # (찧; 찧; 찧; 찧; 찧; ) HANGUL SYLLABLE JJIH CC28;CC28;110E 1161;CC28;110E 1161; # (차; 차; 차; 차; 차; ) HANGUL SYLLABLE CA CC29;CC29;110E 1161 11A8;CC29;110E 1161 11A8; # (착; 착; 착; 착; 착; ) HANGUL SYLLABLE CAG CC2A;CC2A;110E 1161 11A9;CC2A;110E 1161 11A9; # (찪; 찪; 찪; 찪; 찪; ) HANGUL SYLLABLE CAGG CC2B;CC2B;110E 1161 11AA;CC2B;110E 1161 11AA; # (찫; 찫; 찫; 찫; 찫; ) HANGUL SYLLABLE CAGS CC2C;CC2C;110E 1161 11AB;CC2C;110E 1161 11AB; # (찬; 찬; 찬; 찬; 찬; ) HANGUL SYLLABLE CAN CC2D;CC2D;110E 1161 11AC;CC2D;110E 1161 11AC; # (찭; 찭; 찭; 찭; 찭; ) HANGUL SYLLABLE CANJ CC2E;CC2E;110E 1161 11AD;CC2E;110E 1161 11AD; # (찮; 찮; 찮; 찮; 찮; ) HANGUL SYLLABLE CANH CC2F;CC2F;110E 1161 11AE;CC2F;110E 1161 11AE; # (찯; 찯; 찯; 찯; 찯; ) HANGUL SYLLABLE CAD CC30;CC30;110E 1161 11AF;CC30;110E 1161 11AF; # (찰; 찰; 찰; 찰; 찰; ) HANGUL SYLLABLE CAL CC31;CC31;110E 1161 11B0;CC31;110E 1161 11B0; # (찱; 찱; 찱; 찱; 찱; ) HANGUL SYLLABLE CALG CC32;CC32;110E 1161 11B1;CC32;110E 1161 11B1; # (찲; 찲; 찲; 찲; 찲; ) HANGUL SYLLABLE CALM CC33;CC33;110E 1161 11B2;CC33;110E 1161 11B2; # (찳; 찳; 찳; 찳; 찳; ) HANGUL SYLLABLE CALB CC34;CC34;110E 1161 11B3;CC34;110E 1161 11B3; # (찴; 찴; 찴; 찴; 찴; ) HANGUL SYLLABLE CALS CC35;CC35;110E 1161 11B4;CC35;110E 1161 11B4; # (찵; 찵; 찵; 찵; 찵; ) HANGUL SYLLABLE CALT CC36;CC36;110E 1161 11B5;CC36;110E 1161 11B5; # (찶; 찶; 찶; 찶; 찶; ) HANGUL SYLLABLE CALP CC37;CC37;110E 1161 11B6;CC37;110E 1161 11B6; # (찷; 찷; 찷; 찷; 찷; ) HANGUL SYLLABLE CALH CC38;CC38;110E 1161 11B7;CC38;110E 1161 11B7; # (참; 참; 참; 참; 참; ) HANGUL SYLLABLE CAM CC39;CC39;110E 1161 11B8;CC39;110E 1161 11B8; # (찹; 찹; 찹; 찹; 찹; ) HANGUL SYLLABLE CAB CC3A;CC3A;110E 1161 11B9;CC3A;110E 1161 11B9; # (찺; 찺; 찺; 찺; 찺; ) HANGUL SYLLABLE CABS CC3B;CC3B;110E 1161 11BA;CC3B;110E 1161 11BA; # (찻; 찻; 찻; 찻; 찻; ) HANGUL SYLLABLE CAS CC3C;CC3C;110E 1161 11BB;CC3C;110E 1161 11BB; # (찼; 찼; 찼; 찼; 찼; ) HANGUL SYLLABLE CASS CC3D;CC3D;110E 1161 11BC;CC3D;110E 1161 11BC; # (창; 창; 창; 창; 창; ) HANGUL SYLLABLE CANG CC3E;CC3E;110E 1161 11BD;CC3E;110E 1161 11BD; # (찾; 찾; 찾; 찾; 찾; ) HANGUL SYLLABLE CAJ CC3F;CC3F;110E 1161 11BE;CC3F;110E 1161 11BE; # (찿; 찿; 찿; 찿; 찿; ) HANGUL SYLLABLE CAC CC40;CC40;110E 1161 11BF;CC40;110E 1161 11BF; # (챀; 챀; 챀; 챀; 챀; ) HANGUL SYLLABLE CAK CC41;CC41;110E 1161 11C0;CC41;110E 1161 11C0; # (챁; 챁; 챁; 챁; 챁; ) HANGUL SYLLABLE CAT CC42;CC42;110E 1161 11C1;CC42;110E 1161 11C1; # (챂; 챂; 챂; 챂; 챂; ) HANGUL SYLLABLE CAP CC43;CC43;110E 1161 11C2;CC43;110E 1161 11C2; # (챃; 챃; 챃; 챃; 챃; ) HANGUL SYLLABLE CAH CC44;CC44;110E 1162;CC44;110E 1162; # (채; 채; 채; 채; 채; ) HANGUL SYLLABLE CAE CC45;CC45;110E 1162 11A8;CC45;110E 1162 11A8; # (책; 책; 책; 책; 책; ) HANGUL SYLLABLE CAEG CC46;CC46;110E 1162 11A9;CC46;110E 1162 11A9; # (챆; 챆; 챆; 챆; 챆; ) HANGUL SYLLABLE CAEGG CC47;CC47;110E 1162 11AA;CC47;110E 1162 11AA; # (챇; 챇; 챇; 챇; 챇; ) HANGUL SYLLABLE CAEGS CC48;CC48;110E 1162 11AB;CC48;110E 1162 11AB; # (챈; 챈; 챈; 챈; 챈; ) HANGUL SYLLABLE CAEN CC49;CC49;110E 1162 11AC;CC49;110E 1162 11AC; # (챉; 챉; 챉; 챉; 챉; ) HANGUL SYLLABLE CAENJ CC4A;CC4A;110E 1162 11AD;CC4A;110E 1162 11AD; # (챊; 챊; 챊; 챊; 챊; ) HANGUL SYLLABLE CAENH CC4B;CC4B;110E 1162 11AE;CC4B;110E 1162 11AE; # (챋; 챋; 챋; 챋; 챋; ) HANGUL SYLLABLE CAED CC4C;CC4C;110E 1162 11AF;CC4C;110E 1162 11AF; # (챌; 챌; 챌; 챌; 챌; ) HANGUL SYLLABLE CAEL CC4D;CC4D;110E 1162 11B0;CC4D;110E 1162 11B0; # (챍; 챍; 챍; 챍; 챍; ) HANGUL SYLLABLE CAELG CC4E;CC4E;110E 1162 11B1;CC4E;110E 1162 11B1; # (챎; 챎; 챎; 챎; 챎; ) HANGUL SYLLABLE CAELM CC4F;CC4F;110E 1162 11B2;CC4F;110E 1162 11B2; # (챏; 챏; 챏; 챏; 챏; ) HANGUL SYLLABLE CAELB CC50;CC50;110E 1162 11B3;CC50;110E 1162 11B3; # (챐; 챐; 챐; 챐; 챐; ) HANGUL SYLLABLE CAELS CC51;CC51;110E 1162 11B4;CC51;110E 1162 11B4; # (챑; 챑; 챑; 챑; 챑; ) HANGUL SYLLABLE CAELT CC52;CC52;110E 1162 11B5;CC52;110E 1162 11B5; # (챒; 챒; 챒; 챒; 챒; ) HANGUL SYLLABLE CAELP CC53;CC53;110E 1162 11B6;CC53;110E 1162 11B6; # (챓; 챓; 챓; 챓; 챓; ) HANGUL SYLLABLE CAELH CC54;CC54;110E 1162 11B7;CC54;110E 1162 11B7; # (챔; 챔; 챔; 챔; 챔; ) HANGUL SYLLABLE CAEM CC55;CC55;110E 1162 11B8;CC55;110E 1162 11B8; # (챕; 챕; 챕; 챕; 챕; ) HANGUL SYLLABLE CAEB CC56;CC56;110E 1162 11B9;CC56;110E 1162 11B9; # (챖; 챖; 챖; 챖; 챖; ) HANGUL SYLLABLE CAEBS CC57;CC57;110E 1162 11BA;CC57;110E 1162 11BA; # (챗; 챗; 챗; 챗; 챗; ) HANGUL SYLLABLE CAES CC58;CC58;110E 1162 11BB;CC58;110E 1162 11BB; # (챘; 챘; 챘; 챘; 챘; ) HANGUL SYLLABLE CAESS CC59;CC59;110E 1162 11BC;CC59;110E 1162 11BC; # (챙; 챙; 챙; 챙; 챙; ) HANGUL SYLLABLE CAENG CC5A;CC5A;110E 1162 11BD;CC5A;110E 1162 11BD; # (챚; 챚; 챚; 챚; 챚; ) HANGUL SYLLABLE CAEJ CC5B;CC5B;110E 1162 11BE;CC5B;110E 1162 11BE; # (챛; 챛; 챛; 챛; 챛; ) HANGUL SYLLABLE CAEC CC5C;CC5C;110E 1162 11BF;CC5C;110E 1162 11BF; # (챜; 챜; 챜; 챜; 챜; ) HANGUL SYLLABLE CAEK CC5D;CC5D;110E 1162 11C0;CC5D;110E 1162 11C0; # (챝; 챝; 챝; 챝; 챝; ) HANGUL SYLLABLE CAET CC5E;CC5E;110E 1162 11C1;CC5E;110E 1162 11C1; # (챞; 챞; 챞; 챞; 챞; ) HANGUL SYLLABLE CAEP CC5F;CC5F;110E 1162 11C2;CC5F;110E 1162 11C2; # (챟; 챟; 챟; 챟; 챟; ) HANGUL SYLLABLE CAEH CC60;CC60;110E 1163;CC60;110E 1163; # (챠; 챠; 챠; 챠; 챠; ) HANGUL SYLLABLE CYA CC61;CC61;110E 1163 11A8;CC61;110E 1163 11A8; # (챡; 챡; 챡; 챡; 챡; ) HANGUL SYLLABLE CYAG CC62;CC62;110E 1163 11A9;CC62;110E 1163 11A9; # (챢; 챢; 챢; 챢; 챢; ) HANGUL SYLLABLE CYAGG CC63;CC63;110E 1163 11AA;CC63;110E 1163 11AA; # (챣; 챣; 챣; 챣; 챣; ) HANGUL SYLLABLE CYAGS CC64;CC64;110E 1163 11AB;CC64;110E 1163 11AB; # (챤; 챤; 챤; 챤; 챤; ) HANGUL SYLLABLE CYAN CC65;CC65;110E 1163 11AC;CC65;110E 1163 11AC; # (챥; 챥; 챥; 챥; 챥; ) HANGUL SYLLABLE CYANJ CC66;CC66;110E 1163 11AD;CC66;110E 1163 11AD; # (챦; 챦; 챦; 챦; 챦; ) HANGUL SYLLABLE CYANH CC67;CC67;110E 1163 11AE;CC67;110E 1163 11AE; # (챧; 챧; 챧; 챧; 챧; ) HANGUL SYLLABLE CYAD CC68;CC68;110E 1163 11AF;CC68;110E 1163 11AF; # (챨; 챨; 챨; 챨; 챨; ) HANGUL SYLLABLE CYAL CC69;CC69;110E 1163 11B0;CC69;110E 1163 11B0; # (챩; 챩; 챩; 챩; 챩; ) HANGUL SYLLABLE CYALG CC6A;CC6A;110E 1163 11B1;CC6A;110E 1163 11B1; # (챪; 챪; 챪; 챪; 챪; ) HANGUL SYLLABLE CYALM CC6B;CC6B;110E 1163 11B2;CC6B;110E 1163 11B2; # (챫; 챫; 챫; 챫; 챫; ) HANGUL SYLLABLE CYALB CC6C;CC6C;110E 1163 11B3;CC6C;110E 1163 11B3; # (챬; 챬; 챬; 챬; 챬; ) HANGUL SYLLABLE CYALS CC6D;CC6D;110E 1163 11B4;CC6D;110E 1163 11B4; # (챭; 챭; 챭; 챭; 챭; ) HANGUL SYLLABLE CYALT CC6E;CC6E;110E 1163 11B5;CC6E;110E 1163 11B5; # (챮; 챮; 챮; 챮; 챮; ) HANGUL SYLLABLE CYALP CC6F;CC6F;110E 1163 11B6;CC6F;110E 1163 11B6; # (챯; 챯; 챯; 챯; 챯; ) HANGUL SYLLABLE CYALH CC70;CC70;110E 1163 11B7;CC70;110E 1163 11B7; # (챰; 챰; 챰; 챰; 챰; ) HANGUL SYLLABLE CYAM CC71;CC71;110E 1163 11B8;CC71;110E 1163 11B8; # (챱; 챱; 챱; 챱; 챱; ) HANGUL SYLLABLE CYAB CC72;CC72;110E 1163 11B9;CC72;110E 1163 11B9; # (챲; 챲; 챲; 챲; 챲; ) HANGUL SYLLABLE CYABS CC73;CC73;110E 1163 11BA;CC73;110E 1163 11BA; # (챳; 챳; 챳; 챳; 챳; ) HANGUL SYLLABLE CYAS CC74;CC74;110E 1163 11BB;CC74;110E 1163 11BB; # (챴; 챴; 챴; 챴; 챴; ) HANGUL SYLLABLE CYASS CC75;CC75;110E 1163 11BC;CC75;110E 1163 11BC; # (챵; 챵; 챵; 챵; 챵; ) HANGUL SYLLABLE CYANG CC76;CC76;110E 1163 11BD;CC76;110E 1163 11BD; # (챶; 챶; 챶; 챶; 챶; ) HANGUL SYLLABLE CYAJ CC77;CC77;110E 1163 11BE;CC77;110E 1163 11BE; # (챷; 챷; 챷; 챷; 챷; ) HANGUL SYLLABLE CYAC CC78;CC78;110E 1163 11BF;CC78;110E 1163 11BF; # (챸; 챸; 챸; 챸; 챸; ) HANGUL SYLLABLE CYAK CC79;CC79;110E 1163 11C0;CC79;110E 1163 11C0; # (챹; 챹; 챹; 챹; 챹; ) HANGUL SYLLABLE CYAT CC7A;CC7A;110E 1163 11C1;CC7A;110E 1163 11C1; # (챺; 챺; 챺; 챺; 챺; ) HANGUL SYLLABLE CYAP CC7B;CC7B;110E 1163 11C2;CC7B;110E 1163 11C2; # (챻; 챻; 챻; 챻; 챻; ) HANGUL SYLLABLE CYAH CC7C;CC7C;110E 1164;CC7C;110E 1164; # (챼; 챼; 챼; 챼; 챼; ) HANGUL SYLLABLE CYAE CC7D;CC7D;110E 1164 11A8;CC7D;110E 1164 11A8; # (챽; 챽; 챽; 챽; 챽; ) HANGUL SYLLABLE CYAEG CC7E;CC7E;110E 1164 11A9;CC7E;110E 1164 11A9; # (챾; 챾; 챾; 챾; 챾; ) HANGUL SYLLABLE CYAEGG CC7F;CC7F;110E 1164 11AA;CC7F;110E 1164 11AA; # (챿; 챿; 챿; 챿; 챿; ) HANGUL SYLLABLE CYAEGS CC80;CC80;110E 1164 11AB;CC80;110E 1164 11AB; # (첀; 첀; 첀; 첀; 첀; ) HANGUL SYLLABLE CYAEN CC81;CC81;110E 1164 11AC;CC81;110E 1164 11AC; # (첁; 첁; 첁; 첁; 첁; ) HANGUL SYLLABLE CYAENJ CC82;CC82;110E 1164 11AD;CC82;110E 1164 11AD; # (첂; 첂; 첂; 첂; 첂; ) HANGUL SYLLABLE CYAENH CC83;CC83;110E 1164 11AE;CC83;110E 1164 11AE; # (첃; 첃; 첃; 첃; 첃; ) HANGUL SYLLABLE CYAED CC84;CC84;110E 1164 11AF;CC84;110E 1164 11AF; # (첄; 첄; 첄; 첄; 첄; ) HANGUL SYLLABLE CYAEL CC85;CC85;110E 1164 11B0;CC85;110E 1164 11B0; # (첅; 첅; 첅; 첅; 첅; ) HANGUL SYLLABLE CYAELG CC86;CC86;110E 1164 11B1;CC86;110E 1164 11B1; # (첆; 첆; 첆; 첆; 첆; ) HANGUL SYLLABLE CYAELM CC87;CC87;110E 1164 11B2;CC87;110E 1164 11B2; # (첇; 첇; 첇; 첇; 첇; ) HANGUL SYLLABLE CYAELB CC88;CC88;110E 1164 11B3;CC88;110E 1164 11B3; # (첈; 첈; 첈; 첈; 첈; ) HANGUL SYLLABLE CYAELS CC89;CC89;110E 1164 11B4;CC89;110E 1164 11B4; # (첉; 첉; 첉; 첉; 첉; ) HANGUL SYLLABLE CYAELT CC8A;CC8A;110E 1164 11B5;CC8A;110E 1164 11B5; # (첊; 첊; 첊; 첊; 첊; ) HANGUL SYLLABLE CYAELP CC8B;CC8B;110E 1164 11B6;CC8B;110E 1164 11B6; # (첋; 첋; 첋; 첋; 첋; ) HANGUL SYLLABLE CYAELH CC8C;CC8C;110E 1164 11B7;CC8C;110E 1164 11B7; # (첌; 첌; 첌; 첌; 첌; ) HANGUL SYLLABLE CYAEM CC8D;CC8D;110E 1164 11B8;CC8D;110E 1164 11B8; # (첍; 첍; 첍; 첍; 첍; ) HANGUL SYLLABLE CYAEB CC8E;CC8E;110E 1164 11B9;CC8E;110E 1164 11B9; # (첎; 첎; 첎; 첎; 첎; ) HANGUL SYLLABLE CYAEBS CC8F;CC8F;110E 1164 11BA;CC8F;110E 1164 11BA; # (첏; 첏; 첏; 첏; 첏; ) HANGUL SYLLABLE CYAES CC90;CC90;110E 1164 11BB;CC90;110E 1164 11BB; # (첐; 첐; 첐; 첐; 첐; ) HANGUL SYLLABLE CYAESS CC91;CC91;110E 1164 11BC;CC91;110E 1164 11BC; # (첑; 첑; 첑; 첑; 첑; ) HANGUL SYLLABLE CYAENG CC92;CC92;110E 1164 11BD;CC92;110E 1164 11BD; # (첒; 첒; 첒; 첒; 첒; ) HANGUL SYLLABLE CYAEJ CC93;CC93;110E 1164 11BE;CC93;110E 1164 11BE; # (첓; 첓; 첓; 첓; 첓; ) HANGUL SYLLABLE CYAEC CC94;CC94;110E 1164 11BF;CC94;110E 1164 11BF; # (첔; 첔; 첔; 첔; 첔; ) HANGUL SYLLABLE CYAEK CC95;CC95;110E 1164 11C0;CC95;110E 1164 11C0; # (첕; 첕; 첕; 첕; 첕; ) HANGUL SYLLABLE CYAET CC96;CC96;110E 1164 11C1;CC96;110E 1164 11C1; # (첖; 첖; 첖; 첖; 첖; ) HANGUL SYLLABLE CYAEP CC97;CC97;110E 1164 11C2;CC97;110E 1164 11C2; # (첗; 첗; 첗; 첗; 첗; ) HANGUL SYLLABLE CYAEH CC98;CC98;110E 1165;CC98;110E 1165; # (처; 처; 처; 처; 처; ) HANGUL SYLLABLE CEO CC99;CC99;110E 1165 11A8;CC99;110E 1165 11A8; # (척; 척; 척; 척; 척; ) HANGUL SYLLABLE CEOG CC9A;CC9A;110E 1165 11A9;CC9A;110E 1165 11A9; # (첚; 첚; 첚; 첚; 첚; ) HANGUL SYLLABLE CEOGG CC9B;CC9B;110E 1165 11AA;CC9B;110E 1165 11AA; # (첛; 첛; 첛; 첛; 첛; ) HANGUL SYLLABLE CEOGS CC9C;CC9C;110E 1165 11AB;CC9C;110E 1165 11AB; # (천; 천; 천; 천; 천; ) HANGUL SYLLABLE CEON CC9D;CC9D;110E 1165 11AC;CC9D;110E 1165 11AC; # (첝; 첝; 첝; 첝; 첝; ) HANGUL SYLLABLE CEONJ CC9E;CC9E;110E 1165 11AD;CC9E;110E 1165 11AD; # (첞; 첞; 첞; 첞; 첞; ) HANGUL SYLLABLE CEONH CC9F;CC9F;110E 1165 11AE;CC9F;110E 1165 11AE; # (첟; 첟; 첟; 첟; 첟; ) HANGUL SYLLABLE CEOD CCA0;CCA0;110E 1165 11AF;CCA0;110E 1165 11AF; # (철; 철; 철; 철; 철; ) HANGUL SYLLABLE CEOL CCA1;CCA1;110E 1165 11B0;CCA1;110E 1165 11B0; # (첡; 첡; 첡; 첡; 첡; ) HANGUL SYLLABLE CEOLG CCA2;CCA2;110E 1165 11B1;CCA2;110E 1165 11B1; # (첢; 첢; 첢; 첢; 첢; ) HANGUL SYLLABLE CEOLM CCA3;CCA3;110E 1165 11B2;CCA3;110E 1165 11B2; # (첣; 첣; 첣; 첣; 첣; ) HANGUL SYLLABLE CEOLB CCA4;CCA4;110E 1165 11B3;CCA4;110E 1165 11B3; # (첤; 첤; 첤; 첤; 첤; ) HANGUL SYLLABLE CEOLS CCA5;CCA5;110E 1165 11B4;CCA5;110E 1165 11B4; # (첥; 첥; 첥; 첥; 첥; ) HANGUL SYLLABLE CEOLT CCA6;CCA6;110E 1165 11B5;CCA6;110E 1165 11B5; # (첦; 첦; 첦; 첦; 첦; ) HANGUL SYLLABLE CEOLP CCA7;CCA7;110E 1165 11B6;CCA7;110E 1165 11B6; # (첧; 첧; 첧; 첧; 첧; ) HANGUL SYLLABLE CEOLH CCA8;CCA8;110E 1165 11B7;CCA8;110E 1165 11B7; # (첨; 첨; 첨; 첨; 첨; ) HANGUL SYLLABLE CEOM CCA9;CCA9;110E 1165 11B8;CCA9;110E 1165 11B8; # (첩; 첩; 첩; 첩; 첩; ) HANGUL SYLLABLE CEOB CCAA;CCAA;110E 1165 11B9;CCAA;110E 1165 11B9; # (첪; 첪; 첪; 첪; 첪; ) HANGUL SYLLABLE CEOBS CCAB;CCAB;110E 1165 11BA;CCAB;110E 1165 11BA; # (첫; 첫; 첫; 첫; 첫; ) HANGUL SYLLABLE CEOS CCAC;CCAC;110E 1165 11BB;CCAC;110E 1165 11BB; # (첬; 첬; 첬; 첬; 첬; ) HANGUL SYLLABLE CEOSS CCAD;CCAD;110E 1165 11BC;CCAD;110E 1165 11BC; # (청; 청; 청; 청; 청; ) HANGUL SYLLABLE CEONG CCAE;CCAE;110E 1165 11BD;CCAE;110E 1165 11BD; # (첮; 첮; 첮; 첮; 첮; ) HANGUL SYLLABLE CEOJ CCAF;CCAF;110E 1165 11BE;CCAF;110E 1165 11BE; # (첯; 첯; 첯; 첯; 첯; ) HANGUL SYLLABLE CEOC CCB0;CCB0;110E 1165 11BF;CCB0;110E 1165 11BF; # (첰; 첰; 첰; 첰; 첰; ) HANGUL SYLLABLE CEOK CCB1;CCB1;110E 1165 11C0;CCB1;110E 1165 11C0; # (첱; 첱; 첱; 첱; 첱; ) HANGUL SYLLABLE CEOT CCB2;CCB2;110E 1165 11C1;CCB2;110E 1165 11C1; # (첲; 첲; 첲; 첲; 첲; ) HANGUL SYLLABLE CEOP CCB3;CCB3;110E 1165 11C2;CCB3;110E 1165 11C2; # (첳; 첳; 첳; 첳; 첳; ) HANGUL SYLLABLE CEOH CCB4;CCB4;110E 1166;CCB4;110E 1166; # (체; 체; 체; 체; 체; ) HANGUL SYLLABLE CE CCB5;CCB5;110E 1166 11A8;CCB5;110E 1166 11A8; # (첵; 첵; 첵; 첵; 첵; ) HANGUL SYLLABLE CEG CCB6;CCB6;110E 1166 11A9;CCB6;110E 1166 11A9; # (첶; 첶; 첶; 첶; 첶; ) HANGUL SYLLABLE CEGG CCB7;CCB7;110E 1166 11AA;CCB7;110E 1166 11AA; # (첷; 첷; 첷; 첷; 첷; ) HANGUL SYLLABLE CEGS CCB8;CCB8;110E 1166 11AB;CCB8;110E 1166 11AB; # (첸; 첸; 첸; 첸; 첸; ) HANGUL SYLLABLE CEN CCB9;CCB9;110E 1166 11AC;CCB9;110E 1166 11AC; # (첹; 첹; 첹; 첹; 첹; ) HANGUL SYLLABLE CENJ CCBA;CCBA;110E 1166 11AD;CCBA;110E 1166 11AD; # (첺; 첺; 첺; 첺; 첺; ) HANGUL SYLLABLE CENH CCBB;CCBB;110E 1166 11AE;CCBB;110E 1166 11AE; # (첻; 첻; 첻; 첻; 첻; ) HANGUL SYLLABLE CED CCBC;CCBC;110E 1166 11AF;CCBC;110E 1166 11AF; # (첼; 첼; 첼; 첼; 첼; ) HANGUL SYLLABLE CEL CCBD;CCBD;110E 1166 11B0;CCBD;110E 1166 11B0; # (첽; 첽; 첽; 첽; 첽; ) HANGUL SYLLABLE CELG CCBE;CCBE;110E 1166 11B1;CCBE;110E 1166 11B1; # (첾; 첾; 첾; 첾; 첾; ) HANGUL SYLLABLE CELM CCBF;CCBF;110E 1166 11B2;CCBF;110E 1166 11B2; # (첿; 첿; 첿; 첿; 첿; ) HANGUL SYLLABLE CELB CCC0;CCC0;110E 1166 11B3;CCC0;110E 1166 11B3; # (쳀; 쳀; 쳀; 쳀; 쳀; ) HANGUL SYLLABLE CELS CCC1;CCC1;110E 1166 11B4;CCC1;110E 1166 11B4; # (쳁; 쳁; 쳁; 쳁; 쳁; ) HANGUL SYLLABLE CELT CCC2;CCC2;110E 1166 11B5;CCC2;110E 1166 11B5; # (쳂; 쳂; 쳂; 쳂; 쳂; ) HANGUL SYLLABLE CELP CCC3;CCC3;110E 1166 11B6;CCC3;110E 1166 11B6; # (쳃; 쳃; 쳃; 쳃; 쳃; ) HANGUL SYLLABLE CELH CCC4;CCC4;110E 1166 11B7;CCC4;110E 1166 11B7; # (쳄; 쳄; 쳄; 쳄; 쳄; ) HANGUL SYLLABLE CEM CCC5;CCC5;110E 1166 11B8;CCC5;110E 1166 11B8; # (쳅; 쳅; 쳅; 쳅; 쳅; ) HANGUL SYLLABLE CEB CCC6;CCC6;110E 1166 11B9;CCC6;110E 1166 11B9; # (쳆; 쳆; 쳆; 쳆; 쳆; ) HANGUL SYLLABLE CEBS CCC7;CCC7;110E 1166 11BA;CCC7;110E 1166 11BA; # (쳇; 쳇; 쳇; 쳇; 쳇; ) HANGUL SYLLABLE CES CCC8;CCC8;110E 1166 11BB;CCC8;110E 1166 11BB; # (쳈; 쳈; 쳈; 쳈; 쳈; ) HANGUL SYLLABLE CESS CCC9;CCC9;110E 1166 11BC;CCC9;110E 1166 11BC; # (쳉; 쳉; 쳉; 쳉; 쳉; ) HANGUL SYLLABLE CENG CCCA;CCCA;110E 1166 11BD;CCCA;110E 1166 11BD; # (쳊; 쳊; 쳊; 쳊; 쳊; ) HANGUL SYLLABLE CEJ CCCB;CCCB;110E 1166 11BE;CCCB;110E 1166 11BE; # (쳋; 쳋; 쳋; 쳋; 쳋; ) HANGUL SYLLABLE CEC CCCC;CCCC;110E 1166 11BF;CCCC;110E 1166 11BF; # (쳌; 쳌; 쳌; 쳌; 쳌; ) HANGUL SYLLABLE CEK CCCD;CCCD;110E 1166 11C0;CCCD;110E 1166 11C0; # (쳍; 쳍; 쳍; 쳍; 쳍; ) HANGUL SYLLABLE CET CCCE;CCCE;110E 1166 11C1;CCCE;110E 1166 11C1; # (쳎; 쳎; 쳎; 쳎; 쳎; ) HANGUL SYLLABLE CEP CCCF;CCCF;110E 1166 11C2;CCCF;110E 1166 11C2; # (쳏; 쳏; 쳏; 쳏; 쳏; ) HANGUL SYLLABLE CEH CCD0;CCD0;110E 1167;CCD0;110E 1167; # (쳐; 쳐; 쳐; 쳐; 쳐; ) HANGUL SYLLABLE CYEO CCD1;CCD1;110E 1167 11A8;CCD1;110E 1167 11A8; # (쳑; 쳑; 쳑; 쳑; 쳑; ) HANGUL SYLLABLE CYEOG CCD2;CCD2;110E 1167 11A9;CCD2;110E 1167 11A9; # (쳒; 쳒; 쳒; 쳒; 쳒; ) HANGUL SYLLABLE CYEOGG CCD3;CCD3;110E 1167 11AA;CCD3;110E 1167 11AA; # (쳓; 쳓; 쳓; 쳓; 쳓; ) HANGUL SYLLABLE CYEOGS CCD4;CCD4;110E 1167 11AB;CCD4;110E 1167 11AB; # (쳔; 쳔; 쳔; 쳔; 쳔; ) HANGUL SYLLABLE CYEON CCD5;CCD5;110E 1167 11AC;CCD5;110E 1167 11AC; # (쳕; 쳕; 쳕; 쳕; 쳕; ) HANGUL SYLLABLE CYEONJ CCD6;CCD6;110E 1167 11AD;CCD6;110E 1167 11AD; # (쳖; 쳖; 쳖; 쳖; 쳖; ) HANGUL SYLLABLE CYEONH CCD7;CCD7;110E 1167 11AE;CCD7;110E 1167 11AE; # (쳗; 쳗; 쳗; 쳗; 쳗; ) HANGUL SYLLABLE CYEOD CCD8;CCD8;110E 1167 11AF;CCD8;110E 1167 11AF; # (쳘; 쳘; 쳘; 쳘; 쳘; ) HANGUL SYLLABLE CYEOL CCD9;CCD9;110E 1167 11B0;CCD9;110E 1167 11B0; # (쳙; 쳙; 쳙; 쳙; 쳙; ) HANGUL SYLLABLE CYEOLG CCDA;CCDA;110E 1167 11B1;CCDA;110E 1167 11B1; # (쳚; 쳚; 쳚; 쳚; 쳚; ) HANGUL SYLLABLE CYEOLM CCDB;CCDB;110E 1167 11B2;CCDB;110E 1167 11B2; # (쳛; 쳛; 쳛; 쳛; 쳛; ) HANGUL SYLLABLE CYEOLB CCDC;CCDC;110E 1167 11B3;CCDC;110E 1167 11B3; # (쳜; 쳜; 쳜; 쳜; 쳜; ) HANGUL SYLLABLE CYEOLS CCDD;CCDD;110E 1167 11B4;CCDD;110E 1167 11B4; # (쳝; 쳝; 쳝; 쳝; 쳝; ) HANGUL SYLLABLE CYEOLT CCDE;CCDE;110E 1167 11B5;CCDE;110E 1167 11B5; # (쳞; 쳞; 쳞; 쳞; 쳞; ) HANGUL SYLLABLE CYEOLP CCDF;CCDF;110E 1167 11B6;CCDF;110E 1167 11B6; # (쳟; 쳟; 쳟; 쳟; 쳟; ) HANGUL SYLLABLE CYEOLH CCE0;CCE0;110E 1167 11B7;CCE0;110E 1167 11B7; # (쳠; 쳠; 쳠; 쳠; 쳠; ) HANGUL SYLLABLE CYEOM CCE1;CCE1;110E 1167 11B8;CCE1;110E 1167 11B8; # (쳡; 쳡; 쳡; 쳡; 쳡; ) HANGUL SYLLABLE CYEOB CCE2;CCE2;110E 1167 11B9;CCE2;110E 1167 11B9; # (쳢; 쳢; 쳢; 쳢; 쳢; ) HANGUL SYLLABLE CYEOBS CCE3;CCE3;110E 1167 11BA;CCE3;110E 1167 11BA; # (쳣; 쳣; 쳣; 쳣; 쳣; ) HANGUL SYLLABLE CYEOS CCE4;CCE4;110E 1167 11BB;CCE4;110E 1167 11BB; # (쳤; 쳤; 쳤; 쳤; 쳤; ) HANGUL SYLLABLE CYEOSS CCE5;CCE5;110E 1167 11BC;CCE5;110E 1167 11BC; # (쳥; 쳥; 쳥; 쳥; 쳥; ) HANGUL SYLLABLE CYEONG CCE6;CCE6;110E 1167 11BD;CCE6;110E 1167 11BD; # (쳦; 쳦; 쳦; 쳦; 쳦; ) HANGUL SYLLABLE CYEOJ CCE7;CCE7;110E 1167 11BE;CCE7;110E 1167 11BE; # (쳧; 쳧; 쳧; 쳧; 쳧; ) HANGUL SYLLABLE CYEOC CCE8;CCE8;110E 1167 11BF;CCE8;110E 1167 11BF; # (쳨; 쳨; 쳨; 쳨; 쳨; ) HANGUL SYLLABLE CYEOK CCE9;CCE9;110E 1167 11C0;CCE9;110E 1167 11C0; # (쳩; 쳩; 쳩; 쳩; 쳩; ) HANGUL SYLLABLE CYEOT CCEA;CCEA;110E 1167 11C1;CCEA;110E 1167 11C1; # (쳪; 쳪; 쳪; 쳪; 쳪; ) HANGUL SYLLABLE CYEOP CCEB;CCEB;110E 1167 11C2;CCEB;110E 1167 11C2; # (쳫; 쳫; 쳫; 쳫; 쳫; ) HANGUL SYLLABLE CYEOH CCEC;CCEC;110E 1168;CCEC;110E 1168; # (쳬; 쳬; 쳬; 쳬; 쳬; ) HANGUL SYLLABLE CYE CCED;CCED;110E 1168 11A8;CCED;110E 1168 11A8; # (쳭; 쳭; 쳭; 쳭; 쳭; ) HANGUL SYLLABLE CYEG CCEE;CCEE;110E 1168 11A9;CCEE;110E 1168 11A9; # (쳮; 쳮; 쳮; 쳮; 쳮; ) HANGUL SYLLABLE CYEGG CCEF;CCEF;110E 1168 11AA;CCEF;110E 1168 11AA; # (쳯; 쳯; 쳯; 쳯; 쳯; ) HANGUL SYLLABLE CYEGS CCF0;CCF0;110E 1168 11AB;CCF0;110E 1168 11AB; # (쳰; 쳰; 쳰; 쳰; 쳰; ) HANGUL SYLLABLE CYEN CCF1;CCF1;110E 1168 11AC;CCF1;110E 1168 11AC; # (쳱; 쳱; 쳱; 쳱; 쳱; ) HANGUL SYLLABLE CYENJ CCF2;CCF2;110E 1168 11AD;CCF2;110E 1168 11AD; # (쳲; 쳲; 쳲; 쳲; 쳲; ) HANGUL SYLLABLE CYENH CCF3;CCF3;110E 1168 11AE;CCF3;110E 1168 11AE; # (쳳; 쳳; 쳳; 쳳; 쳳; ) HANGUL SYLLABLE CYED CCF4;CCF4;110E 1168 11AF;CCF4;110E 1168 11AF; # (쳴; 쳴; 쳴; 쳴; 쳴; ) HANGUL SYLLABLE CYEL CCF5;CCF5;110E 1168 11B0;CCF5;110E 1168 11B0; # (쳵; 쳵; 쳵; 쳵; 쳵; ) HANGUL SYLLABLE CYELG CCF6;CCF6;110E 1168 11B1;CCF6;110E 1168 11B1; # (쳶; 쳶; 쳶; 쳶; 쳶; ) HANGUL SYLLABLE CYELM CCF7;CCF7;110E 1168 11B2;CCF7;110E 1168 11B2; # (쳷; 쳷; 쳷; 쳷; 쳷; ) HANGUL SYLLABLE CYELB CCF8;CCF8;110E 1168 11B3;CCF8;110E 1168 11B3; # (쳸; 쳸; 쳸; 쳸; 쳸; ) HANGUL SYLLABLE CYELS CCF9;CCF9;110E 1168 11B4;CCF9;110E 1168 11B4; # (쳹; 쳹; 쳹; 쳹; 쳹; ) HANGUL SYLLABLE CYELT CCFA;CCFA;110E 1168 11B5;CCFA;110E 1168 11B5; # (쳺; 쳺; 쳺; 쳺; 쳺; ) HANGUL SYLLABLE CYELP CCFB;CCFB;110E 1168 11B6;CCFB;110E 1168 11B6; # (쳻; 쳻; 쳻; 쳻; 쳻; ) HANGUL SYLLABLE CYELH CCFC;CCFC;110E 1168 11B7;CCFC;110E 1168 11B7; # (쳼; 쳼; 쳼; 쳼; 쳼; ) HANGUL SYLLABLE CYEM CCFD;CCFD;110E 1168 11B8;CCFD;110E 1168 11B8; # (쳽; 쳽; 쳽; 쳽; 쳽; ) HANGUL SYLLABLE CYEB CCFE;CCFE;110E 1168 11B9;CCFE;110E 1168 11B9; # (쳾; 쳾; 쳾; 쳾; 쳾; ) HANGUL SYLLABLE CYEBS CCFF;CCFF;110E 1168 11BA;CCFF;110E 1168 11BA; # (쳿; 쳿; 쳿; 쳿; 쳿; ) HANGUL SYLLABLE CYES CD00;CD00;110E 1168 11BB;CD00;110E 1168 11BB; # (촀; 촀; 촀; 촀; 촀; ) HANGUL SYLLABLE CYESS CD01;CD01;110E 1168 11BC;CD01;110E 1168 11BC; # (촁; 촁; 촁; 촁; 촁; ) HANGUL SYLLABLE CYENG CD02;CD02;110E 1168 11BD;CD02;110E 1168 11BD; # (촂; 촂; 촂; 촂; 촂; ) HANGUL SYLLABLE CYEJ CD03;CD03;110E 1168 11BE;CD03;110E 1168 11BE; # (촃; 촃; 촃; 촃; 촃; ) HANGUL SYLLABLE CYEC CD04;CD04;110E 1168 11BF;CD04;110E 1168 11BF; # (촄; 촄; 촄; 촄; 촄; ) HANGUL SYLLABLE CYEK CD05;CD05;110E 1168 11C0;CD05;110E 1168 11C0; # (촅; 촅; 촅; 촅; 촅; ) HANGUL SYLLABLE CYET CD06;CD06;110E 1168 11C1;CD06;110E 1168 11C1; # (촆; 촆; 촆; 촆; 촆; ) HANGUL SYLLABLE CYEP CD07;CD07;110E 1168 11C2;CD07;110E 1168 11C2; # (촇; 촇; 촇; 촇; 촇; ) HANGUL SYLLABLE CYEH CD08;CD08;110E 1169;CD08;110E 1169; # (초; 초; 초; 초; 초; ) HANGUL SYLLABLE CO CD09;CD09;110E 1169 11A8;CD09;110E 1169 11A8; # (촉; 촉; 촉; 촉; 촉; ) HANGUL SYLLABLE COG CD0A;CD0A;110E 1169 11A9;CD0A;110E 1169 11A9; # (촊; 촊; 촊; 촊; 촊; ) HANGUL SYLLABLE COGG CD0B;CD0B;110E 1169 11AA;CD0B;110E 1169 11AA; # (촋; 촋; 촋; 촋; 촋; ) HANGUL SYLLABLE COGS CD0C;CD0C;110E 1169 11AB;CD0C;110E 1169 11AB; # (촌; 촌; 촌; 촌; 촌; ) HANGUL SYLLABLE CON CD0D;CD0D;110E 1169 11AC;CD0D;110E 1169 11AC; # (촍; 촍; 촍; 촍; 촍; ) HANGUL SYLLABLE CONJ CD0E;CD0E;110E 1169 11AD;CD0E;110E 1169 11AD; # (촎; 촎; 촎; 촎; 촎; ) HANGUL SYLLABLE CONH CD0F;CD0F;110E 1169 11AE;CD0F;110E 1169 11AE; # (촏; 촏; 촏; 촏; 촏; ) HANGUL SYLLABLE COD CD10;CD10;110E 1169 11AF;CD10;110E 1169 11AF; # (촐; 촐; 촐; 촐; 촐; ) HANGUL SYLLABLE COL CD11;CD11;110E 1169 11B0;CD11;110E 1169 11B0; # (촑; 촑; 촑; 촑; 촑; ) HANGUL SYLLABLE COLG CD12;CD12;110E 1169 11B1;CD12;110E 1169 11B1; # (촒; 촒; 촒; 촒; 촒; ) HANGUL SYLLABLE COLM CD13;CD13;110E 1169 11B2;CD13;110E 1169 11B2; # (촓; 촓; 촓; 촓; 촓; ) HANGUL SYLLABLE COLB CD14;CD14;110E 1169 11B3;CD14;110E 1169 11B3; # (촔; 촔; 촔; 촔; 촔; ) HANGUL SYLLABLE COLS CD15;CD15;110E 1169 11B4;CD15;110E 1169 11B4; # (촕; 촕; 촕; 촕; 촕; ) HANGUL SYLLABLE COLT CD16;CD16;110E 1169 11B5;CD16;110E 1169 11B5; # (촖; 촖; 촖; 촖; 촖; ) HANGUL SYLLABLE COLP CD17;CD17;110E 1169 11B6;CD17;110E 1169 11B6; # (촗; 촗; 촗; 촗; 촗; ) HANGUL SYLLABLE COLH CD18;CD18;110E 1169 11B7;CD18;110E 1169 11B7; # (촘; 촘; 촘; 촘; 촘; ) HANGUL SYLLABLE COM CD19;CD19;110E 1169 11B8;CD19;110E 1169 11B8; # (촙; 촙; 촙; 촙; 촙; ) HANGUL SYLLABLE COB CD1A;CD1A;110E 1169 11B9;CD1A;110E 1169 11B9; # (촚; 촚; 촚; 촚; 촚; ) HANGUL SYLLABLE COBS CD1B;CD1B;110E 1169 11BA;CD1B;110E 1169 11BA; # (촛; 촛; 촛; 촛; 촛; ) HANGUL SYLLABLE COS CD1C;CD1C;110E 1169 11BB;CD1C;110E 1169 11BB; # (촜; 촜; 촜; 촜; 촜; ) HANGUL SYLLABLE COSS CD1D;CD1D;110E 1169 11BC;CD1D;110E 1169 11BC; # (총; 총; 총; 총; 총; ) HANGUL SYLLABLE CONG CD1E;CD1E;110E 1169 11BD;CD1E;110E 1169 11BD; # (촞; 촞; 촞; 촞; 촞; ) HANGUL SYLLABLE COJ CD1F;CD1F;110E 1169 11BE;CD1F;110E 1169 11BE; # (촟; 촟; 촟; 촟; 촟; ) HANGUL SYLLABLE COC CD20;CD20;110E 1169 11BF;CD20;110E 1169 11BF; # (촠; 촠; 촠; 촠; 촠; ) HANGUL SYLLABLE COK CD21;CD21;110E 1169 11C0;CD21;110E 1169 11C0; # (촡; 촡; 촡; 촡; 촡; ) HANGUL SYLLABLE COT CD22;CD22;110E 1169 11C1;CD22;110E 1169 11C1; # (촢; 촢; 촢; 촢; 촢; ) HANGUL SYLLABLE COP CD23;CD23;110E 1169 11C2;CD23;110E 1169 11C2; # (촣; 촣; 촣; 촣; 촣; ) HANGUL SYLLABLE COH CD24;CD24;110E 116A;CD24;110E 116A; # (촤; 촤; 촤; 촤; 촤; ) HANGUL SYLLABLE CWA CD25;CD25;110E 116A 11A8;CD25;110E 116A 11A8; # (촥; 촥; 촥; 촥; 촥; ) HANGUL SYLLABLE CWAG CD26;CD26;110E 116A 11A9;CD26;110E 116A 11A9; # (촦; 촦; 촦; 촦; 촦; ) HANGUL SYLLABLE CWAGG CD27;CD27;110E 116A 11AA;CD27;110E 116A 11AA; # (촧; 촧; 촧; 촧; 촧; ) HANGUL SYLLABLE CWAGS CD28;CD28;110E 116A 11AB;CD28;110E 116A 11AB; # (촨; 촨; 촨; 촨; 촨; ) HANGUL SYLLABLE CWAN CD29;CD29;110E 116A 11AC;CD29;110E 116A 11AC; # (촩; 촩; 촩; 촩; 촩; ) HANGUL SYLLABLE CWANJ CD2A;CD2A;110E 116A 11AD;CD2A;110E 116A 11AD; # (촪; 촪; 촪; 촪; 촪; ) HANGUL SYLLABLE CWANH CD2B;CD2B;110E 116A 11AE;CD2B;110E 116A 11AE; # (촫; 촫; 촫; 촫; 촫; ) HANGUL SYLLABLE CWAD CD2C;CD2C;110E 116A 11AF;CD2C;110E 116A 11AF; # (촬; 촬; 촬; 촬; 촬; ) HANGUL SYLLABLE CWAL CD2D;CD2D;110E 116A 11B0;CD2D;110E 116A 11B0; # (촭; 촭; 촭; 촭; 촭; ) HANGUL SYLLABLE CWALG CD2E;CD2E;110E 116A 11B1;CD2E;110E 116A 11B1; # (촮; 촮; 촮; 촮; 촮; ) HANGUL SYLLABLE CWALM CD2F;CD2F;110E 116A 11B2;CD2F;110E 116A 11B2; # (촯; 촯; 촯; 촯; 촯; ) HANGUL SYLLABLE CWALB CD30;CD30;110E 116A 11B3;CD30;110E 116A 11B3; # (촰; 촰; 촰; 촰; 촰; ) HANGUL SYLLABLE CWALS CD31;CD31;110E 116A 11B4;CD31;110E 116A 11B4; # (촱; 촱; 촱; 촱; 촱; ) HANGUL SYLLABLE CWALT CD32;CD32;110E 116A 11B5;CD32;110E 116A 11B5; # (촲; 촲; 촲; 촲; 촲; ) HANGUL SYLLABLE CWALP CD33;CD33;110E 116A 11B6;CD33;110E 116A 11B6; # (촳; 촳; 촳; 촳; 촳; ) HANGUL SYLLABLE CWALH CD34;CD34;110E 116A 11B7;CD34;110E 116A 11B7; # (촴; 촴; 촴; 촴; 촴; ) HANGUL SYLLABLE CWAM CD35;CD35;110E 116A 11B8;CD35;110E 116A 11B8; # (촵; 촵; 촵; 촵; 촵; ) HANGUL SYLLABLE CWAB CD36;CD36;110E 116A 11B9;CD36;110E 116A 11B9; # (촶; 촶; 촶; 촶; 촶; ) HANGUL SYLLABLE CWABS CD37;CD37;110E 116A 11BA;CD37;110E 116A 11BA; # (촷; 촷; 촷; 촷; 촷; ) HANGUL SYLLABLE CWAS CD38;CD38;110E 116A 11BB;CD38;110E 116A 11BB; # (촸; 촸; 촸; 촸; 촸; ) HANGUL SYLLABLE CWASS CD39;CD39;110E 116A 11BC;CD39;110E 116A 11BC; # (촹; 촹; 촹; 촹; 촹; ) HANGUL SYLLABLE CWANG CD3A;CD3A;110E 116A 11BD;CD3A;110E 116A 11BD; # (촺; 촺; 촺; 촺; 촺; ) HANGUL SYLLABLE CWAJ CD3B;CD3B;110E 116A 11BE;CD3B;110E 116A 11BE; # (촻; 촻; 촻; 촻; 촻; ) HANGUL SYLLABLE CWAC CD3C;CD3C;110E 116A 11BF;CD3C;110E 116A 11BF; # (촼; 촼; 촼; 촼; 촼; ) HANGUL SYLLABLE CWAK CD3D;CD3D;110E 116A 11C0;CD3D;110E 116A 11C0; # (촽; 촽; 촽; 촽; 촽; ) HANGUL SYLLABLE CWAT CD3E;CD3E;110E 116A 11C1;CD3E;110E 116A 11C1; # (촾; 촾; 촾; 촾; 촾; ) HANGUL SYLLABLE CWAP CD3F;CD3F;110E 116A 11C2;CD3F;110E 116A 11C2; # (촿; 촿; 촿; 촿; 촿; ) HANGUL SYLLABLE CWAH CD40;CD40;110E 116B;CD40;110E 116B; # (쵀; 쵀; 쵀; 쵀; 쵀; ) HANGUL SYLLABLE CWAE CD41;CD41;110E 116B 11A8;CD41;110E 116B 11A8; # (쵁; 쵁; 쵁; 쵁; 쵁; ) HANGUL SYLLABLE CWAEG CD42;CD42;110E 116B 11A9;CD42;110E 116B 11A9; # (쵂; 쵂; 쵂; 쵂; 쵂; ) HANGUL SYLLABLE CWAEGG CD43;CD43;110E 116B 11AA;CD43;110E 116B 11AA; # (쵃; 쵃; 쵃; 쵃; 쵃; ) HANGUL SYLLABLE CWAEGS CD44;CD44;110E 116B 11AB;CD44;110E 116B 11AB; # (쵄; 쵄; 쵄; 쵄; 쵄; ) HANGUL SYLLABLE CWAEN CD45;CD45;110E 116B 11AC;CD45;110E 116B 11AC; # (쵅; 쵅; 쵅; 쵅; 쵅; ) HANGUL SYLLABLE CWAENJ CD46;CD46;110E 116B 11AD;CD46;110E 116B 11AD; # (쵆; 쵆; 쵆; 쵆; 쵆; ) HANGUL SYLLABLE CWAENH CD47;CD47;110E 116B 11AE;CD47;110E 116B 11AE; # (쵇; 쵇; 쵇; 쵇; 쵇; ) HANGUL SYLLABLE CWAED CD48;CD48;110E 116B 11AF;CD48;110E 116B 11AF; # (쵈; 쵈; 쵈; 쵈; 쵈; ) HANGUL SYLLABLE CWAEL CD49;CD49;110E 116B 11B0;CD49;110E 116B 11B0; # (쵉; 쵉; 쵉; 쵉; 쵉; ) HANGUL SYLLABLE CWAELG CD4A;CD4A;110E 116B 11B1;CD4A;110E 116B 11B1; # (쵊; 쵊; 쵊; 쵊; 쵊; ) HANGUL SYLLABLE CWAELM CD4B;CD4B;110E 116B 11B2;CD4B;110E 116B 11B2; # (쵋; 쵋; 쵋; 쵋; 쵋; ) HANGUL SYLLABLE CWAELB CD4C;CD4C;110E 116B 11B3;CD4C;110E 116B 11B3; # (쵌; 쵌; 쵌; 쵌; 쵌; ) HANGUL SYLLABLE CWAELS CD4D;CD4D;110E 116B 11B4;CD4D;110E 116B 11B4; # (쵍; 쵍; 쵍; 쵍; 쵍; ) HANGUL SYLLABLE CWAELT CD4E;CD4E;110E 116B 11B5;CD4E;110E 116B 11B5; # (쵎; 쵎; 쵎; 쵎; 쵎; ) HANGUL SYLLABLE CWAELP CD4F;CD4F;110E 116B 11B6;CD4F;110E 116B 11B6; # (쵏; 쵏; 쵏; 쵏; 쵏; ) HANGUL SYLLABLE CWAELH CD50;CD50;110E 116B 11B7;CD50;110E 116B 11B7; # (쵐; 쵐; 쵐; 쵐; 쵐; ) HANGUL SYLLABLE CWAEM CD51;CD51;110E 116B 11B8;CD51;110E 116B 11B8; # (쵑; 쵑; 쵑; 쵑; 쵑; ) HANGUL SYLLABLE CWAEB CD52;CD52;110E 116B 11B9;CD52;110E 116B 11B9; # (쵒; 쵒; 쵒; 쵒; 쵒; ) HANGUL SYLLABLE CWAEBS CD53;CD53;110E 116B 11BA;CD53;110E 116B 11BA; # (쵓; 쵓; 쵓; 쵓; 쵓; ) HANGUL SYLLABLE CWAES CD54;CD54;110E 116B 11BB;CD54;110E 116B 11BB; # (쵔; 쵔; 쵔; 쵔; 쵔; ) HANGUL SYLLABLE CWAESS CD55;CD55;110E 116B 11BC;CD55;110E 116B 11BC; # (쵕; 쵕; 쵕; 쵕; 쵕; ) HANGUL SYLLABLE CWAENG CD56;CD56;110E 116B 11BD;CD56;110E 116B 11BD; # (쵖; 쵖; 쵖; 쵖; 쵖; ) HANGUL SYLLABLE CWAEJ CD57;CD57;110E 116B 11BE;CD57;110E 116B 11BE; # (쵗; 쵗; 쵗; 쵗; 쵗; ) HANGUL SYLLABLE CWAEC CD58;CD58;110E 116B 11BF;CD58;110E 116B 11BF; # (쵘; 쵘; 쵘; 쵘; 쵘; ) HANGUL SYLLABLE CWAEK CD59;CD59;110E 116B 11C0;CD59;110E 116B 11C0; # (쵙; 쵙; 쵙; 쵙; 쵙; ) HANGUL SYLLABLE CWAET CD5A;CD5A;110E 116B 11C1;CD5A;110E 116B 11C1; # (쵚; 쵚; 쵚; 쵚; 쵚; ) HANGUL SYLLABLE CWAEP CD5B;CD5B;110E 116B 11C2;CD5B;110E 116B 11C2; # (쵛; 쵛; 쵛; 쵛; 쵛; ) HANGUL SYLLABLE CWAEH CD5C;CD5C;110E 116C;CD5C;110E 116C; # (최; 최; 최; 최; 최; ) HANGUL SYLLABLE COE CD5D;CD5D;110E 116C 11A8;CD5D;110E 116C 11A8; # (쵝; 쵝; 쵝; 쵝; 쵝; ) HANGUL SYLLABLE COEG CD5E;CD5E;110E 116C 11A9;CD5E;110E 116C 11A9; # (쵞; 쵞; 쵞; 쵞; 쵞; ) HANGUL SYLLABLE COEGG CD5F;CD5F;110E 116C 11AA;CD5F;110E 116C 11AA; # (쵟; 쵟; 쵟; 쵟; 쵟; ) HANGUL SYLLABLE COEGS CD60;CD60;110E 116C 11AB;CD60;110E 116C 11AB; # (쵠; 쵠; 쵠; 쵠; 쵠; ) HANGUL SYLLABLE COEN CD61;CD61;110E 116C 11AC;CD61;110E 116C 11AC; # (쵡; 쵡; 쵡; 쵡; 쵡; ) HANGUL SYLLABLE COENJ CD62;CD62;110E 116C 11AD;CD62;110E 116C 11AD; # (쵢; 쵢; 쵢; 쵢; 쵢; ) HANGUL SYLLABLE COENH CD63;CD63;110E 116C 11AE;CD63;110E 116C 11AE; # (쵣; 쵣; 쵣; 쵣; 쵣; ) HANGUL SYLLABLE COED CD64;CD64;110E 116C 11AF;CD64;110E 116C 11AF; # (쵤; 쵤; 쵤; 쵤; 쵤; ) HANGUL SYLLABLE COEL CD65;CD65;110E 116C 11B0;CD65;110E 116C 11B0; # (쵥; 쵥; 쵥; 쵥; 쵥; ) HANGUL SYLLABLE COELG CD66;CD66;110E 116C 11B1;CD66;110E 116C 11B1; # (쵦; 쵦; 쵦; 쵦; 쵦; ) HANGUL SYLLABLE COELM CD67;CD67;110E 116C 11B2;CD67;110E 116C 11B2; # (쵧; 쵧; 쵧; 쵧; 쵧; ) HANGUL SYLLABLE COELB CD68;CD68;110E 116C 11B3;CD68;110E 116C 11B3; # (쵨; 쵨; 쵨; 쵨; 쵨; ) HANGUL SYLLABLE COELS CD69;CD69;110E 116C 11B4;CD69;110E 116C 11B4; # (쵩; 쵩; 쵩; 쵩; 쵩; ) HANGUL SYLLABLE COELT CD6A;CD6A;110E 116C 11B5;CD6A;110E 116C 11B5; # (쵪; 쵪; 쵪; 쵪; 쵪; ) HANGUL SYLLABLE COELP CD6B;CD6B;110E 116C 11B6;CD6B;110E 116C 11B6; # (쵫; 쵫; 쵫; 쵫; 쵫; ) HANGUL SYLLABLE COELH CD6C;CD6C;110E 116C 11B7;CD6C;110E 116C 11B7; # (쵬; 쵬; 쵬; 쵬; 쵬; ) HANGUL SYLLABLE COEM CD6D;CD6D;110E 116C 11B8;CD6D;110E 116C 11B8; # (쵭; 쵭; 쵭; 쵭; 쵭; ) HANGUL SYLLABLE COEB CD6E;CD6E;110E 116C 11B9;CD6E;110E 116C 11B9; # (쵮; 쵮; 쵮; 쵮; 쵮; ) HANGUL SYLLABLE COEBS CD6F;CD6F;110E 116C 11BA;CD6F;110E 116C 11BA; # (쵯; 쵯; 쵯; 쵯; 쵯; ) HANGUL SYLLABLE COES CD70;CD70;110E 116C 11BB;CD70;110E 116C 11BB; # (쵰; 쵰; 쵰; 쵰; 쵰; ) HANGUL SYLLABLE COESS CD71;CD71;110E 116C 11BC;CD71;110E 116C 11BC; # (쵱; 쵱; 쵱; 쵱; 쵱; ) HANGUL SYLLABLE COENG CD72;CD72;110E 116C 11BD;CD72;110E 116C 11BD; # (쵲; 쵲; 쵲; 쵲; 쵲; ) HANGUL SYLLABLE COEJ CD73;CD73;110E 116C 11BE;CD73;110E 116C 11BE; # (쵳; 쵳; 쵳; 쵳; 쵳; ) HANGUL SYLLABLE COEC CD74;CD74;110E 116C 11BF;CD74;110E 116C 11BF; # (쵴; 쵴; 쵴; 쵴; 쵴; ) HANGUL SYLLABLE COEK CD75;CD75;110E 116C 11C0;CD75;110E 116C 11C0; # (쵵; 쵵; 쵵; 쵵; 쵵; ) HANGUL SYLLABLE COET CD76;CD76;110E 116C 11C1;CD76;110E 116C 11C1; # (쵶; 쵶; 쵶; 쵶; 쵶; ) HANGUL SYLLABLE COEP CD77;CD77;110E 116C 11C2;CD77;110E 116C 11C2; # (쵷; 쵷; 쵷; 쵷; 쵷; ) HANGUL SYLLABLE COEH CD78;CD78;110E 116D;CD78;110E 116D; # (쵸; 쵸; 쵸; 쵸; 쵸; ) HANGUL SYLLABLE CYO CD79;CD79;110E 116D 11A8;CD79;110E 116D 11A8; # (쵹; 쵹; 쵹; 쵹; 쵹; ) HANGUL SYLLABLE CYOG CD7A;CD7A;110E 116D 11A9;CD7A;110E 116D 11A9; # (쵺; 쵺; 쵺; 쵺; 쵺; ) HANGUL SYLLABLE CYOGG CD7B;CD7B;110E 116D 11AA;CD7B;110E 116D 11AA; # (쵻; 쵻; 쵻; 쵻; 쵻; ) HANGUL SYLLABLE CYOGS CD7C;CD7C;110E 116D 11AB;CD7C;110E 116D 11AB; # (쵼; 쵼; 쵼; 쵼; 쵼; ) HANGUL SYLLABLE CYON CD7D;CD7D;110E 116D 11AC;CD7D;110E 116D 11AC; # (쵽; 쵽; 쵽; 쵽; 쵽; ) HANGUL SYLLABLE CYONJ CD7E;CD7E;110E 116D 11AD;CD7E;110E 116D 11AD; # (쵾; 쵾; 쵾; 쵾; 쵾; ) HANGUL SYLLABLE CYONH CD7F;CD7F;110E 116D 11AE;CD7F;110E 116D 11AE; # (쵿; 쵿; 쵿; 쵿; 쵿; ) HANGUL SYLLABLE CYOD CD80;CD80;110E 116D 11AF;CD80;110E 116D 11AF; # (춀; 춀; 춀; 춀; 춀; ) HANGUL SYLLABLE CYOL CD81;CD81;110E 116D 11B0;CD81;110E 116D 11B0; # (춁; 춁; 춁; 춁; 춁; ) HANGUL SYLLABLE CYOLG CD82;CD82;110E 116D 11B1;CD82;110E 116D 11B1; # (춂; 춂; 춂; 춂; 춂; ) HANGUL SYLLABLE CYOLM CD83;CD83;110E 116D 11B2;CD83;110E 116D 11B2; # (춃; 춃; 춃; 춃; 춃; ) HANGUL SYLLABLE CYOLB CD84;CD84;110E 116D 11B3;CD84;110E 116D 11B3; # (춄; 춄; 춄; 춄; 춄; ) HANGUL SYLLABLE CYOLS CD85;CD85;110E 116D 11B4;CD85;110E 116D 11B4; # (춅; 춅; 춅; 춅; 춅; ) HANGUL SYLLABLE CYOLT CD86;CD86;110E 116D 11B5;CD86;110E 116D 11B5; # (춆; 춆; 춆; 춆; 춆; ) HANGUL SYLLABLE CYOLP CD87;CD87;110E 116D 11B6;CD87;110E 116D 11B6; # (춇; 춇; 춇; 춇; 춇; ) HANGUL SYLLABLE CYOLH CD88;CD88;110E 116D 11B7;CD88;110E 116D 11B7; # (춈; 춈; 춈; 춈; 춈; ) HANGUL SYLLABLE CYOM CD89;CD89;110E 116D 11B8;CD89;110E 116D 11B8; # (춉; 춉; 춉; 춉; 춉; ) HANGUL SYLLABLE CYOB CD8A;CD8A;110E 116D 11B9;CD8A;110E 116D 11B9; # (춊; 춊; 춊; 춊; 춊; ) HANGUL SYLLABLE CYOBS CD8B;CD8B;110E 116D 11BA;CD8B;110E 116D 11BA; # (춋; 춋; 춋; 춋; 춋; ) HANGUL SYLLABLE CYOS CD8C;CD8C;110E 116D 11BB;CD8C;110E 116D 11BB; # (춌; 춌; 춌; 춌; 춌; ) HANGUL SYLLABLE CYOSS CD8D;CD8D;110E 116D 11BC;CD8D;110E 116D 11BC; # (춍; 춍; 춍; 춍; 춍; ) HANGUL SYLLABLE CYONG CD8E;CD8E;110E 116D 11BD;CD8E;110E 116D 11BD; # (춎; 춎; 춎; 춎; 춎; ) HANGUL SYLLABLE CYOJ CD8F;CD8F;110E 116D 11BE;CD8F;110E 116D 11BE; # (춏; 춏; 춏; 춏; 춏; ) HANGUL SYLLABLE CYOC CD90;CD90;110E 116D 11BF;CD90;110E 116D 11BF; # (춐; 춐; 춐; 춐; 춐; ) HANGUL SYLLABLE CYOK CD91;CD91;110E 116D 11C0;CD91;110E 116D 11C0; # (춑; 춑; 춑; 춑; 춑; ) HANGUL SYLLABLE CYOT CD92;CD92;110E 116D 11C1;CD92;110E 116D 11C1; # (춒; 춒; 춒; 춒; 춒; ) HANGUL SYLLABLE CYOP CD93;CD93;110E 116D 11C2;CD93;110E 116D 11C2; # (춓; 춓; 춓; 춓; 춓; ) HANGUL SYLLABLE CYOH CD94;CD94;110E 116E;CD94;110E 116E; # (추; 추; 추; 추; 추; ) HANGUL SYLLABLE CU CD95;CD95;110E 116E 11A8;CD95;110E 116E 11A8; # (축; 축; 축; 축; 축; ) HANGUL SYLLABLE CUG CD96;CD96;110E 116E 11A9;CD96;110E 116E 11A9; # (춖; 춖; 춖; 춖; 춖; ) HANGUL SYLLABLE CUGG CD97;CD97;110E 116E 11AA;CD97;110E 116E 11AA; # (춗; 춗; 춗; 춗; 춗; ) HANGUL SYLLABLE CUGS CD98;CD98;110E 116E 11AB;CD98;110E 116E 11AB; # (춘; 춘; 춘; 춘; 춘; ) HANGUL SYLLABLE CUN CD99;CD99;110E 116E 11AC;CD99;110E 116E 11AC; # (춙; 춙; 춙; 춙; 춙; ) HANGUL SYLLABLE CUNJ CD9A;CD9A;110E 116E 11AD;CD9A;110E 116E 11AD; # (춚; 춚; 춚; 춚; 춚; ) HANGUL SYLLABLE CUNH CD9B;CD9B;110E 116E 11AE;CD9B;110E 116E 11AE; # (춛; 춛; 춛; 춛; 춛; ) HANGUL SYLLABLE CUD CD9C;CD9C;110E 116E 11AF;CD9C;110E 116E 11AF; # (출; 출; 출; 출; 출; ) HANGUL SYLLABLE CUL CD9D;CD9D;110E 116E 11B0;CD9D;110E 116E 11B0; # (춝; 춝; 춝; 춝; 춝; ) HANGUL SYLLABLE CULG CD9E;CD9E;110E 116E 11B1;CD9E;110E 116E 11B1; # (춞; 춞; 춞; 춞; 춞; ) HANGUL SYLLABLE CULM CD9F;CD9F;110E 116E 11B2;CD9F;110E 116E 11B2; # (춟; 춟; 춟; 춟; 춟; ) HANGUL SYLLABLE CULB CDA0;CDA0;110E 116E 11B3;CDA0;110E 116E 11B3; # (춠; 춠; 춠; 춠; 춠; ) HANGUL SYLLABLE CULS CDA1;CDA1;110E 116E 11B4;CDA1;110E 116E 11B4; # (춡; 춡; 춡; 춡; 춡; ) HANGUL SYLLABLE CULT CDA2;CDA2;110E 116E 11B5;CDA2;110E 116E 11B5; # (춢; 춢; 춢; 춢; 춢; ) HANGUL SYLLABLE CULP CDA3;CDA3;110E 116E 11B6;CDA3;110E 116E 11B6; # (춣; 춣; 춣; 춣; 춣; ) HANGUL SYLLABLE CULH CDA4;CDA4;110E 116E 11B7;CDA4;110E 116E 11B7; # (춤; 춤; 춤; 춤; 춤; ) HANGUL SYLLABLE CUM CDA5;CDA5;110E 116E 11B8;CDA5;110E 116E 11B8; # (춥; 춥; 춥; 춥; 춥; ) HANGUL SYLLABLE CUB CDA6;CDA6;110E 116E 11B9;CDA6;110E 116E 11B9; # (춦; 춦; 춦; 춦; 춦; ) HANGUL SYLLABLE CUBS CDA7;CDA7;110E 116E 11BA;CDA7;110E 116E 11BA; # (춧; 춧; 춧; 춧; 춧; ) HANGUL SYLLABLE CUS CDA8;CDA8;110E 116E 11BB;CDA8;110E 116E 11BB; # (춨; 춨; 춨; 춨; 춨; ) HANGUL SYLLABLE CUSS CDA9;CDA9;110E 116E 11BC;CDA9;110E 116E 11BC; # (충; 충; 충; 충; 충; ) HANGUL SYLLABLE CUNG CDAA;CDAA;110E 116E 11BD;CDAA;110E 116E 11BD; # (춪; 춪; 춪; 춪; 춪; ) HANGUL SYLLABLE CUJ CDAB;CDAB;110E 116E 11BE;CDAB;110E 116E 11BE; # (춫; 춫; 춫; 춫; 춫; ) HANGUL SYLLABLE CUC CDAC;CDAC;110E 116E 11BF;CDAC;110E 116E 11BF; # (춬; 춬; 춬; 춬; 춬; ) HANGUL SYLLABLE CUK CDAD;CDAD;110E 116E 11C0;CDAD;110E 116E 11C0; # (춭; 춭; 춭; 춭; 춭; ) HANGUL SYLLABLE CUT CDAE;CDAE;110E 116E 11C1;CDAE;110E 116E 11C1; # (춮; 춮; 춮; 춮; 춮; ) HANGUL SYLLABLE CUP CDAF;CDAF;110E 116E 11C2;CDAF;110E 116E 11C2; # (춯; 춯; 춯; 춯; 춯; ) HANGUL SYLLABLE CUH CDB0;CDB0;110E 116F;CDB0;110E 116F; # (춰; 춰; 춰; 춰; 춰; ) HANGUL SYLLABLE CWEO CDB1;CDB1;110E 116F 11A8;CDB1;110E 116F 11A8; # (춱; 춱; 춱; 춱; 춱; ) HANGUL SYLLABLE CWEOG CDB2;CDB2;110E 116F 11A9;CDB2;110E 116F 11A9; # (춲; 춲; 춲; 춲; 춲; ) HANGUL SYLLABLE CWEOGG CDB3;CDB3;110E 116F 11AA;CDB3;110E 116F 11AA; # (춳; 춳; 춳; 춳; 춳; ) HANGUL SYLLABLE CWEOGS CDB4;CDB4;110E 116F 11AB;CDB4;110E 116F 11AB; # (춴; 춴; 춴; 춴; 춴; ) HANGUL SYLLABLE CWEON CDB5;CDB5;110E 116F 11AC;CDB5;110E 116F 11AC; # (춵; 춵; 춵; 춵; 춵; ) HANGUL SYLLABLE CWEONJ CDB6;CDB6;110E 116F 11AD;CDB6;110E 116F 11AD; # (춶; 춶; 춶; 춶; 춶; ) HANGUL SYLLABLE CWEONH CDB7;CDB7;110E 116F 11AE;CDB7;110E 116F 11AE; # (춷; 춷; 춷; 춷; 춷; ) HANGUL SYLLABLE CWEOD CDB8;CDB8;110E 116F 11AF;CDB8;110E 116F 11AF; # (춸; 춸; 춸; 춸; 춸; ) HANGUL SYLLABLE CWEOL CDB9;CDB9;110E 116F 11B0;CDB9;110E 116F 11B0; # (춹; 춹; 춹; 춹; 춹; ) HANGUL SYLLABLE CWEOLG CDBA;CDBA;110E 116F 11B1;CDBA;110E 116F 11B1; # (춺; 춺; 춺; 춺; 춺; ) HANGUL SYLLABLE CWEOLM CDBB;CDBB;110E 116F 11B2;CDBB;110E 116F 11B2; # (춻; 춻; 춻; 춻; 춻; ) HANGUL SYLLABLE CWEOLB CDBC;CDBC;110E 116F 11B3;CDBC;110E 116F 11B3; # (춼; 춼; 춼; 춼; 춼; ) HANGUL SYLLABLE CWEOLS CDBD;CDBD;110E 116F 11B4;CDBD;110E 116F 11B4; # (춽; 춽; 춽; 춽; 춽; ) HANGUL SYLLABLE CWEOLT CDBE;CDBE;110E 116F 11B5;CDBE;110E 116F 11B5; # (춾; 춾; 춾; 춾; 춾; ) HANGUL SYLLABLE CWEOLP CDBF;CDBF;110E 116F 11B6;CDBF;110E 116F 11B6; # (춿; 춿; 춿; 춿; 춿; ) HANGUL SYLLABLE CWEOLH CDC0;CDC0;110E 116F 11B7;CDC0;110E 116F 11B7; # (췀; 췀; 췀; 췀; 췀; ) HANGUL SYLLABLE CWEOM CDC1;CDC1;110E 116F 11B8;CDC1;110E 116F 11B8; # (췁; 췁; 췁; 췁; 췁; ) HANGUL SYLLABLE CWEOB CDC2;CDC2;110E 116F 11B9;CDC2;110E 116F 11B9; # (췂; 췂; 췂; 췂; 췂; ) HANGUL SYLLABLE CWEOBS CDC3;CDC3;110E 116F 11BA;CDC3;110E 116F 11BA; # (췃; 췃; 췃; 췃; 췃; ) HANGUL SYLLABLE CWEOS CDC4;CDC4;110E 116F 11BB;CDC4;110E 116F 11BB; # (췄; 췄; 췄; 췄; 췄; ) HANGUL SYLLABLE CWEOSS CDC5;CDC5;110E 116F 11BC;CDC5;110E 116F 11BC; # (췅; 췅; 췅; 췅; 췅; ) HANGUL SYLLABLE CWEONG CDC6;CDC6;110E 116F 11BD;CDC6;110E 116F 11BD; # (췆; 췆; 췆; 췆; 췆; ) HANGUL SYLLABLE CWEOJ CDC7;CDC7;110E 116F 11BE;CDC7;110E 116F 11BE; # (췇; 췇; 췇; 췇; 췇; ) HANGUL SYLLABLE CWEOC CDC8;CDC8;110E 116F 11BF;CDC8;110E 116F 11BF; # (췈; 췈; 췈; 췈; 췈; ) HANGUL SYLLABLE CWEOK CDC9;CDC9;110E 116F 11C0;CDC9;110E 116F 11C0; # (췉; 췉; 췉; 췉; 췉; ) HANGUL SYLLABLE CWEOT CDCA;CDCA;110E 116F 11C1;CDCA;110E 116F 11C1; # (췊; 췊; 췊; 췊; 췊; ) HANGUL SYLLABLE CWEOP CDCB;CDCB;110E 116F 11C2;CDCB;110E 116F 11C2; # (췋; 췋; 췋; 췋; 췋; ) HANGUL SYLLABLE CWEOH CDCC;CDCC;110E 1170;CDCC;110E 1170; # (췌; 췌; 췌; 췌; 췌; ) HANGUL SYLLABLE CWE CDCD;CDCD;110E 1170 11A8;CDCD;110E 1170 11A8; # (췍; 췍; 췍; 췍; 췍; ) HANGUL SYLLABLE CWEG CDCE;CDCE;110E 1170 11A9;CDCE;110E 1170 11A9; # (췎; 췎; 췎; 췎; 췎; ) HANGUL SYLLABLE CWEGG CDCF;CDCF;110E 1170 11AA;CDCF;110E 1170 11AA; # (췏; 췏; 췏; 췏; 췏; ) HANGUL SYLLABLE CWEGS CDD0;CDD0;110E 1170 11AB;CDD0;110E 1170 11AB; # (췐; 췐; 췐; 췐; 췐; ) HANGUL SYLLABLE CWEN CDD1;CDD1;110E 1170 11AC;CDD1;110E 1170 11AC; # (췑; 췑; 췑; 췑; 췑; ) HANGUL SYLLABLE CWENJ CDD2;CDD2;110E 1170 11AD;CDD2;110E 1170 11AD; # (췒; 췒; 췒; 췒; 췒; ) HANGUL SYLLABLE CWENH CDD3;CDD3;110E 1170 11AE;CDD3;110E 1170 11AE; # (췓; 췓; 췓; 췓; 췓; ) HANGUL SYLLABLE CWED CDD4;CDD4;110E 1170 11AF;CDD4;110E 1170 11AF; # (췔; 췔; 췔; 췔; 췔; ) HANGUL SYLLABLE CWEL CDD5;CDD5;110E 1170 11B0;CDD5;110E 1170 11B0; # (췕; 췕; 췕; 췕; 췕; ) HANGUL SYLLABLE CWELG CDD6;CDD6;110E 1170 11B1;CDD6;110E 1170 11B1; # (췖; 췖; 췖; 췖; 췖; ) HANGUL SYLLABLE CWELM CDD7;CDD7;110E 1170 11B2;CDD7;110E 1170 11B2; # (췗; 췗; 췗; 췗; 췗; ) HANGUL SYLLABLE CWELB CDD8;CDD8;110E 1170 11B3;CDD8;110E 1170 11B3; # (췘; 췘; 췘; 췘; 췘; ) HANGUL SYLLABLE CWELS CDD9;CDD9;110E 1170 11B4;CDD9;110E 1170 11B4; # (췙; 췙; 췙; 췙; 췙; ) HANGUL SYLLABLE CWELT CDDA;CDDA;110E 1170 11B5;CDDA;110E 1170 11B5; # (췚; 췚; 췚; 췚; 췚; ) HANGUL SYLLABLE CWELP CDDB;CDDB;110E 1170 11B6;CDDB;110E 1170 11B6; # (췛; 췛; 췛; 췛; 췛; ) HANGUL SYLLABLE CWELH CDDC;CDDC;110E 1170 11B7;CDDC;110E 1170 11B7; # (췜; 췜; 췜; 췜; 췜; ) HANGUL SYLLABLE CWEM CDDD;CDDD;110E 1170 11B8;CDDD;110E 1170 11B8; # (췝; 췝; 췝; 췝; 췝; ) HANGUL SYLLABLE CWEB CDDE;CDDE;110E 1170 11B9;CDDE;110E 1170 11B9; # (췞; 췞; 췞; 췞; 췞; ) HANGUL SYLLABLE CWEBS CDDF;CDDF;110E 1170 11BA;CDDF;110E 1170 11BA; # (췟; 췟; 췟; 췟; 췟; ) HANGUL SYLLABLE CWES CDE0;CDE0;110E 1170 11BB;CDE0;110E 1170 11BB; # (췠; 췠; 췠; 췠; 췠; ) HANGUL SYLLABLE CWESS CDE1;CDE1;110E 1170 11BC;CDE1;110E 1170 11BC; # (췡; 췡; 췡; 췡; 췡; ) HANGUL SYLLABLE CWENG CDE2;CDE2;110E 1170 11BD;CDE2;110E 1170 11BD; # (췢; 췢; 췢; 췢; 췢; ) HANGUL SYLLABLE CWEJ CDE3;CDE3;110E 1170 11BE;CDE3;110E 1170 11BE; # (췣; 췣; 췣; 췣; 췣; ) HANGUL SYLLABLE CWEC CDE4;CDE4;110E 1170 11BF;CDE4;110E 1170 11BF; # (췤; 췤; 췤; 췤; 췤; ) HANGUL SYLLABLE CWEK CDE5;CDE5;110E 1170 11C0;CDE5;110E 1170 11C0; # (췥; 췥; 췥; 췥; 췥; ) HANGUL SYLLABLE CWET CDE6;CDE6;110E 1170 11C1;CDE6;110E 1170 11C1; # (췦; 췦; 췦; 췦; 췦; ) HANGUL SYLLABLE CWEP CDE7;CDE7;110E 1170 11C2;CDE7;110E 1170 11C2; # (췧; 췧; 췧; 췧; 췧; ) HANGUL SYLLABLE CWEH CDE8;CDE8;110E 1171;CDE8;110E 1171; # (취; 취; 취; 취; 취; ) HANGUL SYLLABLE CWI CDE9;CDE9;110E 1171 11A8;CDE9;110E 1171 11A8; # (췩; 췩; 췩; 췩; 췩; ) HANGUL SYLLABLE CWIG CDEA;CDEA;110E 1171 11A9;CDEA;110E 1171 11A9; # (췪; 췪; 췪; 췪; 췪; ) HANGUL SYLLABLE CWIGG CDEB;CDEB;110E 1171 11AA;CDEB;110E 1171 11AA; # (췫; 췫; 췫; 췫; 췫; ) HANGUL SYLLABLE CWIGS CDEC;CDEC;110E 1171 11AB;CDEC;110E 1171 11AB; # (췬; 췬; 췬; 췬; 췬; ) HANGUL SYLLABLE CWIN CDED;CDED;110E 1171 11AC;CDED;110E 1171 11AC; # (췭; 췭; 췭; 췭; 췭; ) HANGUL SYLLABLE CWINJ CDEE;CDEE;110E 1171 11AD;CDEE;110E 1171 11AD; # (췮; 췮; 췮; 췮; 췮; ) HANGUL SYLLABLE CWINH CDEF;CDEF;110E 1171 11AE;CDEF;110E 1171 11AE; # (췯; 췯; 췯; 췯; 췯; ) HANGUL SYLLABLE CWID CDF0;CDF0;110E 1171 11AF;CDF0;110E 1171 11AF; # (췰; 췰; 췰; 췰; 췰; ) HANGUL SYLLABLE CWIL CDF1;CDF1;110E 1171 11B0;CDF1;110E 1171 11B0; # (췱; 췱; 췱; 췱; 췱; ) HANGUL SYLLABLE CWILG CDF2;CDF2;110E 1171 11B1;CDF2;110E 1171 11B1; # (췲; 췲; 췲; 췲; 췲; ) HANGUL SYLLABLE CWILM CDF3;CDF3;110E 1171 11B2;CDF3;110E 1171 11B2; # (췳; 췳; 췳; 췳; 췳; ) HANGUL SYLLABLE CWILB CDF4;CDF4;110E 1171 11B3;CDF4;110E 1171 11B3; # (췴; 췴; 췴; 췴; 췴; ) HANGUL SYLLABLE CWILS CDF5;CDF5;110E 1171 11B4;CDF5;110E 1171 11B4; # (췵; 췵; 췵; 췵; 췵; ) HANGUL SYLLABLE CWILT CDF6;CDF6;110E 1171 11B5;CDF6;110E 1171 11B5; # (췶; 췶; 췶; 췶; 췶; ) HANGUL SYLLABLE CWILP CDF7;CDF7;110E 1171 11B6;CDF7;110E 1171 11B6; # (췷; 췷; 췷; 췷; 췷; ) HANGUL SYLLABLE CWILH CDF8;CDF8;110E 1171 11B7;CDF8;110E 1171 11B7; # (췸; 췸; 췸; 췸; 췸; ) HANGUL SYLLABLE CWIM CDF9;CDF9;110E 1171 11B8;CDF9;110E 1171 11B8; # (췹; 췹; 췹; 췹; 췹; ) HANGUL SYLLABLE CWIB CDFA;CDFA;110E 1171 11B9;CDFA;110E 1171 11B9; # (췺; 췺; 췺; 췺; 췺; ) HANGUL SYLLABLE CWIBS CDFB;CDFB;110E 1171 11BA;CDFB;110E 1171 11BA; # (췻; 췻; 췻; 췻; 췻; ) HANGUL SYLLABLE CWIS CDFC;CDFC;110E 1171 11BB;CDFC;110E 1171 11BB; # (췼; 췼; 췼; 췼; 췼; ) HANGUL SYLLABLE CWISS CDFD;CDFD;110E 1171 11BC;CDFD;110E 1171 11BC; # (췽; 췽; 췽; 췽; 췽; ) HANGUL SYLLABLE CWING CDFE;CDFE;110E 1171 11BD;CDFE;110E 1171 11BD; # (췾; 췾; 췾; 췾; 췾; ) HANGUL SYLLABLE CWIJ CDFF;CDFF;110E 1171 11BE;CDFF;110E 1171 11BE; # (췿; 췿; 췿; 췿; 췿; ) HANGUL SYLLABLE CWIC CE00;CE00;110E 1171 11BF;CE00;110E 1171 11BF; # (츀; 츀; 츀; 츀; 츀; ) HANGUL SYLLABLE CWIK CE01;CE01;110E 1171 11C0;CE01;110E 1171 11C0; # (츁; 츁; 츁; 츁; 츁; ) HANGUL SYLLABLE CWIT CE02;CE02;110E 1171 11C1;CE02;110E 1171 11C1; # (츂; 츂; 츂; 츂; 츂; ) HANGUL SYLLABLE CWIP CE03;CE03;110E 1171 11C2;CE03;110E 1171 11C2; # (츃; 츃; 츃; 츃; 츃; ) HANGUL SYLLABLE CWIH CE04;CE04;110E 1172;CE04;110E 1172; # (츄; 츄; 츄; 츄; 츄; ) HANGUL SYLLABLE CYU CE05;CE05;110E 1172 11A8;CE05;110E 1172 11A8; # (츅; 츅; 츅; 츅; 츅; ) HANGUL SYLLABLE CYUG CE06;CE06;110E 1172 11A9;CE06;110E 1172 11A9; # (츆; 츆; 츆; 츆; 츆; ) HANGUL SYLLABLE CYUGG CE07;CE07;110E 1172 11AA;CE07;110E 1172 11AA; # (츇; 츇; 츇; 츇; 츇; ) HANGUL SYLLABLE CYUGS CE08;CE08;110E 1172 11AB;CE08;110E 1172 11AB; # (츈; 츈; 츈; 츈; 츈; ) HANGUL SYLLABLE CYUN CE09;CE09;110E 1172 11AC;CE09;110E 1172 11AC; # (츉; 츉; 츉; 츉; 츉; ) HANGUL SYLLABLE CYUNJ CE0A;CE0A;110E 1172 11AD;CE0A;110E 1172 11AD; # (츊; 츊; 츊; 츊; 츊; ) HANGUL SYLLABLE CYUNH CE0B;CE0B;110E 1172 11AE;CE0B;110E 1172 11AE; # (츋; 츋; 츋; 츋; 츋; ) HANGUL SYLLABLE CYUD CE0C;CE0C;110E 1172 11AF;CE0C;110E 1172 11AF; # (츌; 츌; 츌; 츌; 츌; ) HANGUL SYLLABLE CYUL CE0D;CE0D;110E 1172 11B0;CE0D;110E 1172 11B0; # (츍; 츍; 츍; 츍; 츍; ) HANGUL SYLLABLE CYULG CE0E;CE0E;110E 1172 11B1;CE0E;110E 1172 11B1; # (츎; 츎; 츎; 츎; 츎; ) HANGUL SYLLABLE CYULM CE0F;CE0F;110E 1172 11B2;CE0F;110E 1172 11B2; # (츏; 츏; 츏; 츏; 츏; ) HANGUL SYLLABLE CYULB CE10;CE10;110E 1172 11B3;CE10;110E 1172 11B3; # (츐; 츐; 츐; 츐; 츐; ) HANGUL SYLLABLE CYULS CE11;CE11;110E 1172 11B4;CE11;110E 1172 11B4; # (츑; 츑; 츑; 츑; 츑; ) HANGUL SYLLABLE CYULT CE12;CE12;110E 1172 11B5;CE12;110E 1172 11B5; # (츒; 츒; 츒; 츒; 츒; ) HANGUL SYLLABLE CYULP CE13;CE13;110E 1172 11B6;CE13;110E 1172 11B6; # (츓; 츓; 츓; 츓; 츓; ) HANGUL SYLLABLE CYULH CE14;CE14;110E 1172 11B7;CE14;110E 1172 11B7; # (츔; 츔; 츔; 츔; 츔; ) HANGUL SYLLABLE CYUM CE15;CE15;110E 1172 11B8;CE15;110E 1172 11B8; # (츕; 츕; 츕; 츕; 츕; ) HANGUL SYLLABLE CYUB CE16;CE16;110E 1172 11B9;CE16;110E 1172 11B9; # (츖; 츖; 츖; 츖; 츖; ) HANGUL SYLLABLE CYUBS CE17;CE17;110E 1172 11BA;CE17;110E 1172 11BA; # (츗; 츗; 츗; 츗; 츗; ) HANGUL SYLLABLE CYUS CE18;CE18;110E 1172 11BB;CE18;110E 1172 11BB; # (츘; 츘; 츘; 츘; 츘; ) HANGUL SYLLABLE CYUSS CE19;CE19;110E 1172 11BC;CE19;110E 1172 11BC; # (츙; 츙; 츙; 츙; 츙; ) HANGUL SYLLABLE CYUNG CE1A;CE1A;110E 1172 11BD;CE1A;110E 1172 11BD; # (츚; 츚; 츚; 츚; 츚; ) HANGUL SYLLABLE CYUJ CE1B;CE1B;110E 1172 11BE;CE1B;110E 1172 11BE; # (츛; 츛; 츛; 츛; 츛; ) HANGUL SYLLABLE CYUC CE1C;CE1C;110E 1172 11BF;CE1C;110E 1172 11BF; # (츜; 츜; 츜; 츜; 츜; ) HANGUL SYLLABLE CYUK CE1D;CE1D;110E 1172 11C0;CE1D;110E 1172 11C0; # (츝; 츝; 츝; 츝; 츝; ) HANGUL SYLLABLE CYUT CE1E;CE1E;110E 1172 11C1;CE1E;110E 1172 11C1; # (츞; 츞; 츞; 츞; 츞; ) HANGUL SYLLABLE CYUP CE1F;CE1F;110E 1172 11C2;CE1F;110E 1172 11C2; # (츟; 츟; 츟; 츟; 츟; ) HANGUL SYLLABLE CYUH CE20;CE20;110E 1173;CE20;110E 1173; # (츠; 츠; 츠; 츠; 츠; ) HANGUL SYLLABLE CEU CE21;CE21;110E 1173 11A8;CE21;110E 1173 11A8; # (측; 측; 측; 측; 측; ) HANGUL SYLLABLE CEUG CE22;CE22;110E 1173 11A9;CE22;110E 1173 11A9; # (츢; 츢; 츢; 츢; 츢; ) HANGUL SYLLABLE CEUGG CE23;CE23;110E 1173 11AA;CE23;110E 1173 11AA; # (츣; 츣; 츣; 츣; 츣; ) HANGUL SYLLABLE CEUGS CE24;CE24;110E 1173 11AB;CE24;110E 1173 11AB; # (츤; 츤; 츤; 츤; 츤; ) HANGUL SYLLABLE CEUN CE25;CE25;110E 1173 11AC;CE25;110E 1173 11AC; # (츥; 츥; 츥; 츥; 츥; ) HANGUL SYLLABLE CEUNJ CE26;CE26;110E 1173 11AD;CE26;110E 1173 11AD; # (츦; 츦; 츦; 츦; 츦; ) HANGUL SYLLABLE CEUNH CE27;CE27;110E 1173 11AE;CE27;110E 1173 11AE; # (츧; 츧; 츧; 츧; 츧; ) HANGUL SYLLABLE CEUD CE28;CE28;110E 1173 11AF;CE28;110E 1173 11AF; # (츨; 츨; 츨; 츨; 츨; ) HANGUL SYLLABLE CEUL CE29;CE29;110E 1173 11B0;CE29;110E 1173 11B0; # (츩; 츩; 츩; 츩; 츩; ) HANGUL SYLLABLE CEULG CE2A;CE2A;110E 1173 11B1;CE2A;110E 1173 11B1; # (츪; 츪; 츪; 츪; 츪; ) HANGUL SYLLABLE CEULM CE2B;CE2B;110E 1173 11B2;CE2B;110E 1173 11B2; # (츫; 츫; 츫; 츫; 츫; ) HANGUL SYLLABLE CEULB CE2C;CE2C;110E 1173 11B3;CE2C;110E 1173 11B3; # (츬; 츬; 츬; 츬; 츬; ) HANGUL SYLLABLE CEULS CE2D;CE2D;110E 1173 11B4;CE2D;110E 1173 11B4; # (츭; 츭; 츭; 츭; 츭; ) HANGUL SYLLABLE CEULT CE2E;CE2E;110E 1173 11B5;CE2E;110E 1173 11B5; # (츮; 츮; 츮; 츮; 츮; ) HANGUL SYLLABLE CEULP CE2F;CE2F;110E 1173 11B6;CE2F;110E 1173 11B6; # (츯; 츯; 츯; 츯; 츯; ) HANGUL SYLLABLE CEULH CE30;CE30;110E 1173 11B7;CE30;110E 1173 11B7; # (츰; 츰; 츰; 츰; 츰; ) HANGUL SYLLABLE CEUM CE31;CE31;110E 1173 11B8;CE31;110E 1173 11B8; # (츱; 츱; 츱; 츱; 츱; ) HANGUL SYLLABLE CEUB CE32;CE32;110E 1173 11B9;CE32;110E 1173 11B9; # (츲; 츲; 츲; 츲; 츲; ) HANGUL SYLLABLE CEUBS CE33;CE33;110E 1173 11BA;CE33;110E 1173 11BA; # (츳; 츳; 츳; 츳; 츳; ) HANGUL SYLLABLE CEUS CE34;CE34;110E 1173 11BB;CE34;110E 1173 11BB; # (츴; 츴; 츴; 츴; 츴; ) HANGUL SYLLABLE CEUSS CE35;CE35;110E 1173 11BC;CE35;110E 1173 11BC; # (층; 층; 층; 층; 층; ) HANGUL SYLLABLE CEUNG CE36;CE36;110E 1173 11BD;CE36;110E 1173 11BD; # (츶; 츶; 츶; 츶; 츶; ) HANGUL SYLLABLE CEUJ CE37;CE37;110E 1173 11BE;CE37;110E 1173 11BE; # (츷; 츷; 츷; 츷; 츷; ) HANGUL SYLLABLE CEUC CE38;CE38;110E 1173 11BF;CE38;110E 1173 11BF; # (츸; 츸; 츸; 츸; 츸; ) HANGUL SYLLABLE CEUK CE39;CE39;110E 1173 11C0;CE39;110E 1173 11C0; # (츹; 츹; 츹; 츹; 츹; ) HANGUL SYLLABLE CEUT CE3A;CE3A;110E 1173 11C1;CE3A;110E 1173 11C1; # (츺; 츺; 츺; 츺; 츺; ) HANGUL SYLLABLE CEUP CE3B;CE3B;110E 1173 11C2;CE3B;110E 1173 11C2; # (츻; 츻; 츻; 츻; 츻; ) HANGUL SYLLABLE CEUH CE3C;CE3C;110E 1174;CE3C;110E 1174; # (츼; 츼; 츼; 츼; 츼; ) HANGUL SYLLABLE CYI CE3D;CE3D;110E 1174 11A8;CE3D;110E 1174 11A8; # (츽; 츽; 츽; 츽; 츽; ) HANGUL SYLLABLE CYIG CE3E;CE3E;110E 1174 11A9;CE3E;110E 1174 11A9; # (츾; 츾; 츾; 츾; 츾; ) HANGUL SYLLABLE CYIGG CE3F;CE3F;110E 1174 11AA;CE3F;110E 1174 11AA; # (츿; 츿; 츿; 츿; 츿; ) HANGUL SYLLABLE CYIGS CE40;CE40;110E 1174 11AB;CE40;110E 1174 11AB; # (칀; 칀; 칀; 칀; 칀; ) HANGUL SYLLABLE CYIN CE41;CE41;110E 1174 11AC;CE41;110E 1174 11AC; # (칁; 칁; 칁; 칁; 칁; ) HANGUL SYLLABLE CYINJ CE42;CE42;110E 1174 11AD;CE42;110E 1174 11AD; # (칂; 칂; 칂; 칂; 칂; ) HANGUL SYLLABLE CYINH CE43;CE43;110E 1174 11AE;CE43;110E 1174 11AE; # (칃; 칃; 칃; 칃; 칃; ) HANGUL SYLLABLE CYID CE44;CE44;110E 1174 11AF;CE44;110E 1174 11AF; # (칄; 칄; 칄; 칄; 칄; ) HANGUL SYLLABLE CYIL CE45;CE45;110E 1174 11B0;CE45;110E 1174 11B0; # (칅; 칅; 칅; 칅; 칅; ) HANGUL SYLLABLE CYILG CE46;CE46;110E 1174 11B1;CE46;110E 1174 11B1; # (칆; 칆; 칆; 칆; 칆; ) HANGUL SYLLABLE CYILM CE47;CE47;110E 1174 11B2;CE47;110E 1174 11B2; # (칇; 칇; 칇; 칇; 칇; ) HANGUL SYLLABLE CYILB CE48;CE48;110E 1174 11B3;CE48;110E 1174 11B3; # (칈; 칈; 칈; 칈; 칈; ) HANGUL SYLLABLE CYILS CE49;CE49;110E 1174 11B4;CE49;110E 1174 11B4; # (칉; 칉; 칉; 칉; 칉; ) HANGUL SYLLABLE CYILT CE4A;CE4A;110E 1174 11B5;CE4A;110E 1174 11B5; # (칊; 칊; 칊; 칊; 칊; ) HANGUL SYLLABLE CYILP CE4B;CE4B;110E 1174 11B6;CE4B;110E 1174 11B6; # (칋; 칋; 칋; 칋; 칋; ) HANGUL SYLLABLE CYILH CE4C;CE4C;110E 1174 11B7;CE4C;110E 1174 11B7; # (칌; 칌; 칌; 칌; 칌; ) HANGUL SYLLABLE CYIM CE4D;CE4D;110E 1174 11B8;CE4D;110E 1174 11B8; # (칍; 칍; 칍; 칍; 칍; ) HANGUL SYLLABLE CYIB CE4E;CE4E;110E 1174 11B9;CE4E;110E 1174 11B9; # (칎; 칎; 칎; 칎; 칎; ) HANGUL SYLLABLE CYIBS CE4F;CE4F;110E 1174 11BA;CE4F;110E 1174 11BA; # (칏; 칏; 칏; 칏; 칏; ) HANGUL SYLLABLE CYIS CE50;CE50;110E 1174 11BB;CE50;110E 1174 11BB; # (칐; 칐; 칐; 칐; 칐; ) HANGUL SYLLABLE CYISS CE51;CE51;110E 1174 11BC;CE51;110E 1174 11BC; # (칑; 칑; 칑; 칑; 칑; ) HANGUL SYLLABLE CYING CE52;CE52;110E 1174 11BD;CE52;110E 1174 11BD; # (칒; 칒; 칒; 칒; 칒; ) HANGUL SYLLABLE CYIJ CE53;CE53;110E 1174 11BE;CE53;110E 1174 11BE; # (칓; 칓; 칓; 칓; 칓; ) HANGUL SYLLABLE CYIC CE54;CE54;110E 1174 11BF;CE54;110E 1174 11BF; # (칔; 칔; 칔; 칔; 칔; ) HANGUL SYLLABLE CYIK CE55;CE55;110E 1174 11C0;CE55;110E 1174 11C0; # (칕; 칕; 칕; 칕; 칕; ) HANGUL SYLLABLE CYIT CE56;CE56;110E 1174 11C1;CE56;110E 1174 11C1; # (칖; 칖; 칖; 칖; 칖; ) HANGUL SYLLABLE CYIP CE57;CE57;110E 1174 11C2;CE57;110E 1174 11C2; # (칗; 칗; 칗; 칗; 칗; ) HANGUL SYLLABLE CYIH CE58;CE58;110E 1175;CE58;110E 1175; # (치; 치; 치; 치; 치; ) HANGUL SYLLABLE CI CE59;CE59;110E 1175 11A8;CE59;110E 1175 11A8; # (칙; 칙; 칙; 칙; 칙; ) HANGUL SYLLABLE CIG CE5A;CE5A;110E 1175 11A9;CE5A;110E 1175 11A9; # (칚; 칚; 칚; 칚; 칚; ) HANGUL SYLLABLE CIGG CE5B;CE5B;110E 1175 11AA;CE5B;110E 1175 11AA; # (칛; 칛; 칛; 칛; 칛; ) HANGUL SYLLABLE CIGS CE5C;CE5C;110E 1175 11AB;CE5C;110E 1175 11AB; # (친; 친; 친; 친; 친; ) HANGUL SYLLABLE CIN CE5D;CE5D;110E 1175 11AC;CE5D;110E 1175 11AC; # (칝; 칝; 칝; 칝; 칝; ) HANGUL SYLLABLE CINJ CE5E;CE5E;110E 1175 11AD;CE5E;110E 1175 11AD; # (칞; 칞; 칞; 칞; 칞; ) HANGUL SYLLABLE CINH CE5F;CE5F;110E 1175 11AE;CE5F;110E 1175 11AE; # (칟; 칟; 칟; 칟; 칟; ) HANGUL SYLLABLE CID CE60;CE60;110E 1175 11AF;CE60;110E 1175 11AF; # (칠; 칠; 칠; 칠; 칠; ) HANGUL SYLLABLE CIL CE61;CE61;110E 1175 11B0;CE61;110E 1175 11B0; # (칡; 칡; 칡; 칡; 칡; ) HANGUL SYLLABLE CILG CE62;CE62;110E 1175 11B1;CE62;110E 1175 11B1; # (칢; 칢; 칢; 칢; 칢; ) HANGUL SYLLABLE CILM CE63;CE63;110E 1175 11B2;CE63;110E 1175 11B2; # (칣; 칣; 칣; 칣; 칣; ) HANGUL SYLLABLE CILB CE64;CE64;110E 1175 11B3;CE64;110E 1175 11B3; # (칤; 칤; 칤; 칤; 칤; ) HANGUL SYLLABLE CILS CE65;CE65;110E 1175 11B4;CE65;110E 1175 11B4; # (칥; 칥; 칥; 칥; 칥; ) HANGUL SYLLABLE CILT CE66;CE66;110E 1175 11B5;CE66;110E 1175 11B5; # (칦; 칦; 칦; 칦; 칦; ) HANGUL SYLLABLE CILP CE67;CE67;110E 1175 11B6;CE67;110E 1175 11B6; # (칧; 칧; 칧; 칧; 칧; ) HANGUL SYLLABLE CILH CE68;CE68;110E 1175 11B7;CE68;110E 1175 11B7; # (침; 침; 침; 침; 침; ) HANGUL SYLLABLE CIM CE69;CE69;110E 1175 11B8;CE69;110E 1175 11B8; # (칩; 칩; 칩; 칩; 칩; ) HANGUL SYLLABLE CIB CE6A;CE6A;110E 1175 11B9;CE6A;110E 1175 11B9; # (칪; 칪; 칪; 칪; 칪; ) HANGUL SYLLABLE CIBS CE6B;CE6B;110E 1175 11BA;CE6B;110E 1175 11BA; # (칫; 칫; 칫; 칫; 칫; ) HANGUL SYLLABLE CIS CE6C;CE6C;110E 1175 11BB;CE6C;110E 1175 11BB; # (칬; 칬; 칬; 칬; 칬; ) HANGUL SYLLABLE CISS CE6D;CE6D;110E 1175 11BC;CE6D;110E 1175 11BC; # (칭; 칭; 칭; 칭; 칭; ) HANGUL SYLLABLE CING CE6E;CE6E;110E 1175 11BD;CE6E;110E 1175 11BD; # (칮; 칮; 칮; 칮; 칮; ) HANGUL SYLLABLE CIJ CE6F;CE6F;110E 1175 11BE;CE6F;110E 1175 11BE; # (칯; 칯; 칯; 칯; 칯; ) HANGUL SYLLABLE CIC CE70;CE70;110E 1175 11BF;CE70;110E 1175 11BF; # (칰; 칰; 칰; 칰; 칰; ) HANGUL SYLLABLE CIK CE71;CE71;110E 1175 11C0;CE71;110E 1175 11C0; # (칱; 칱; 칱; 칱; 칱; ) HANGUL SYLLABLE CIT CE72;CE72;110E 1175 11C1;CE72;110E 1175 11C1; # (칲; 칲; 칲; 칲; 칲; ) HANGUL SYLLABLE CIP CE73;CE73;110E 1175 11C2;CE73;110E 1175 11C2; # (칳; 칳; 칳; 칳; 칳; ) HANGUL SYLLABLE CIH CE74;CE74;110F 1161;CE74;110F 1161; # (카; 카; 카; 카; 카; ) HANGUL SYLLABLE KA CE75;CE75;110F 1161 11A8;CE75;110F 1161 11A8; # (칵; 칵; 칵; 칵; 칵; ) HANGUL SYLLABLE KAG CE76;CE76;110F 1161 11A9;CE76;110F 1161 11A9; # (칶; 칶; 칶; 칶; 칶; ) HANGUL SYLLABLE KAGG CE77;CE77;110F 1161 11AA;CE77;110F 1161 11AA; # (칷; 칷; 칷; 칷; 칷; ) HANGUL SYLLABLE KAGS CE78;CE78;110F 1161 11AB;CE78;110F 1161 11AB; # (칸; 칸; 칸; 칸; 칸; ) HANGUL SYLLABLE KAN CE79;CE79;110F 1161 11AC;CE79;110F 1161 11AC; # (칹; 칹; 칹; 칹; 칹; ) HANGUL SYLLABLE KANJ CE7A;CE7A;110F 1161 11AD;CE7A;110F 1161 11AD; # (칺; 칺; 칺; 칺; 칺; ) HANGUL SYLLABLE KANH CE7B;CE7B;110F 1161 11AE;CE7B;110F 1161 11AE; # (칻; 칻; 칻; 칻; 칻; ) HANGUL SYLLABLE KAD CE7C;CE7C;110F 1161 11AF;CE7C;110F 1161 11AF; # (칼; 칼; 칼; 칼; 칼; ) HANGUL SYLLABLE KAL CE7D;CE7D;110F 1161 11B0;CE7D;110F 1161 11B0; # (칽; 칽; 칽; 칽; 칽; ) HANGUL SYLLABLE KALG CE7E;CE7E;110F 1161 11B1;CE7E;110F 1161 11B1; # (칾; 칾; 칾; 칾; 칾; ) HANGUL SYLLABLE KALM CE7F;CE7F;110F 1161 11B2;CE7F;110F 1161 11B2; # (칿; 칿; 칿; 칿; 칿; ) HANGUL SYLLABLE KALB CE80;CE80;110F 1161 11B3;CE80;110F 1161 11B3; # (캀; 캀; 캀; 캀; 캀; ) HANGUL SYLLABLE KALS CE81;CE81;110F 1161 11B4;CE81;110F 1161 11B4; # (캁; 캁; 캁; 캁; 캁; ) HANGUL SYLLABLE KALT CE82;CE82;110F 1161 11B5;CE82;110F 1161 11B5; # (캂; 캂; 캂; 캂; 캂; ) HANGUL SYLLABLE KALP CE83;CE83;110F 1161 11B6;CE83;110F 1161 11B6; # (캃; 캃; 캃; 캃; 캃; ) HANGUL SYLLABLE KALH CE84;CE84;110F 1161 11B7;CE84;110F 1161 11B7; # (캄; 캄; 캄; 캄; 캄; ) HANGUL SYLLABLE KAM CE85;CE85;110F 1161 11B8;CE85;110F 1161 11B8; # (캅; 캅; 캅; 캅; 캅; ) HANGUL SYLLABLE KAB CE86;CE86;110F 1161 11B9;CE86;110F 1161 11B9; # (캆; 캆; 캆; 캆; 캆; ) HANGUL SYLLABLE KABS CE87;CE87;110F 1161 11BA;CE87;110F 1161 11BA; # (캇; 캇; 캇; 캇; 캇; ) HANGUL SYLLABLE KAS CE88;CE88;110F 1161 11BB;CE88;110F 1161 11BB; # (캈; 캈; 캈; 캈; 캈; ) HANGUL SYLLABLE KASS CE89;CE89;110F 1161 11BC;CE89;110F 1161 11BC; # (캉; 캉; 캉; 캉; 캉; ) HANGUL SYLLABLE KANG CE8A;CE8A;110F 1161 11BD;CE8A;110F 1161 11BD; # (캊; 캊; 캊; 캊; 캊; ) HANGUL SYLLABLE KAJ CE8B;CE8B;110F 1161 11BE;CE8B;110F 1161 11BE; # (캋; 캋; 캋; 캋; 캋; ) HANGUL SYLLABLE KAC CE8C;CE8C;110F 1161 11BF;CE8C;110F 1161 11BF; # (캌; 캌; 캌; 캌; 캌; ) HANGUL SYLLABLE KAK CE8D;CE8D;110F 1161 11C0;CE8D;110F 1161 11C0; # (캍; 캍; 캍; 캍; 캍; ) HANGUL SYLLABLE KAT CE8E;CE8E;110F 1161 11C1;CE8E;110F 1161 11C1; # (캎; 캎; 캎; 캎; 캎; ) HANGUL SYLLABLE KAP CE8F;CE8F;110F 1161 11C2;CE8F;110F 1161 11C2; # (캏; 캏; 캏; 캏; 캏; ) HANGUL SYLLABLE KAH CE90;CE90;110F 1162;CE90;110F 1162; # (캐; 캐; 캐; 캐; 캐; ) HANGUL SYLLABLE KAE CE91;CE91;110F 1162 11A8;CE91;110F 1162 11A8; # (캑; 캑; 캑; 캑; 캑; ) HANGUL SYLLABLE KAEG CE92;CE92;110F 1162 11A9;CE92;110F 1162 11A9; # (캒; 캒; 캒; 캒; 캒; ) HANGUL SYLLABLE KAEGG CE93;CE93;110F 1162 11AA;CE93;110F 1162 11AA; # (캓; 캓; 캓; 캓; 캓; ) HANGUL SYLLABLE KAEGS CE94;CE94;110F 1162 11AB;CE94;110F 1162 11AB; # (캔; 캔; 캔; 캔; 캔; ) HANGUL SYLLABLE KAEN CE95;CE95;110F 1162 11AC;CE95;110F 1162 11AC; # (캕; 캕; 캕; 캕; 캕; ) HANGUL SYLLABLE KAENJ CE96;CE96;110F 1162 11AD;CE96;110F 1162 11AD; # (캖; 캖; 캖; 캖; 캖; ) HANGUL SYLLABLE KAENH CE97;CE97;110F 1162 11AE;CE97;110F 1162 11AE; # (캗; 캗; 캗; 캗; 캗; ) HANGUL SYLLABLE KAED CE98;CE98;110F 1162 11AF;CE98;110F 1162 11AF; # (캘; 캘; 캘; 캘; 캘; ) HANGUL SYLLABLE KAEL CE99;CE99;110F 1162 11B0;CE99;110F 1162 11B0; # (캙; 캙; 캙; 캙; 캙; ) HANGUL SYLLABLE KAELG CE9A;CE9A;110F 1162 11B1;CE9A;110F 1162 11B1; # (캚; 캚; 캚; 캚; 캚; ) HANGUL SYLLABLE KAELM CE9B;CE9B;110F 1162 11B2;CE9B;110F 1162 11B2; # (캛; 캛; 캛; 캛; 캛; ) HANGUL SYLLABLE KAELB CE9C;CE9C;110F 1162 11B3;CE9C;110F 1162 11B3; # (캜; 캜; 캜; 캜; 캜; ) HANGUL SYLLABLE KAELS CE9D;CE9D;110F 1162 11B4;CE9D;110F 1162 11B4; # (캝; 캝; 캝; 캝; 캝; ) HANGUL SYLLABLE KAELT CE9E;CE9E;110F 1162 11B5;CE9E;110F 1162 11B5; # (캞; 캞; 캞; 캞; 캞; ) HANGUL SYLLABLE KAELP CE9F;CE9F;110F 1162 11B6;CE9F;110F 1162 11B6; # (캟; 캟; 캟; 캟; 캟; ) HANGUL SYLLABLE KAELH CEA0;CEA0;110F 1162 11B7;CEA0;110F 1162 11B7; # (캠; 캠; 캠; 캠; 캠; ) HANGUL SYLLABLE KAEM CEA1;CEA1;110F 1162 11B8;CEA1;110F 1162 11B8; # (캡; 캡; 캡; 캡; 캡; ) HANGUL SYLLABLE KAEB CEA2;CEA2;110F 1162 11B9;CEA2;110F 1162 11B9; # (캢; 캢; 캢; 캢; 캢; ) HANGUL SYLLABLE KAEBS CEA3;CEA3;110F 1162 11BA;CEA3;110F 1162 11BA; # (캣; 캣; 캣; 캣; 캣; ) HANGUL SYLLABLE KAES CEA4;CEA4;110F 1162 11BB;CEA4;110F 1162 11BB; # (캤; 캤; 캤; 캤; 캤; ) HANGUL SYLLABLE KAESS CEA5;CEA5;110F 1162 11BC;CEA5;110F 1162 11BC; # (캥; 캥; 캥; 캥; 캥; ) HANGUL SYLLABLE KAENG CEA6;CEA6;110F 1162 11BD;CEA6;110F 1162 11BD; # (캦; 캦; 캦; 캦; 캦; ) HANGUL SYLLABLE KAEJ CEA7;CEA7;110F 1162 11BE;CEA7;110F 1162 11BE; # (캧; 캧; 캧; 캧; 캧; ) HANGUL SYLLABLE KAEC CEA8;CEA8;110F 1162 11BF;CEA8;110F 1162 11BF; # (캨; 캨; 캨; 캨; 캨; ) HANGUL SYLLABLE KAEK CEA9;CEA9;110F 1162 11C0;CEA9;110F 1162 11C0; # (캩; 캩; 캩; 캩; 캩; ) HANGUL SYLLABLE KAET CEAA;CEAA;110F 1162 11C1;CEAA;110F 1162 11C1; # (캪; 캪; 캪; 캪; 캪; ) HANGUL SYLLABLE KAEP CEAB;CEAB;110F 1162 11C2;CEAB;110F 1162 11C2; # (캫; 캫; 캫; 캫; 캫; ) HANGUL SYLLABLE KAEH CEAC;CEAC;110F 1163;CEAC;110F 1163; # (캬; 캬; 캬; 캬; 캬; ) HANGUL SYLLABLE KYA CEAD;CEAD;110F 1163 11A8;CEAD;110F 1163 11A8; # (캭; 캭; 캭; 캭; 캭; ) HANGUL SYLLABLE KYAG CEAE;CEAE;110F 1163 11A9;CEAE;110F 1163 11A9; # (캮; 캮; 캮; 캮; 캮; ) HANGUL SYLLABLE KYAGG CEAF;CEAF;110F 1163 11AA;CEAF;110F 1163 11AA; # (캯; 캯; 캯; 캯; 캯; ) HANGUL SYLLABLE KYAGS CEB0;CEB0;110F 1163 11AB;CEB0;110F 1163 11AB; # (캰; 캰; 캰; 캰; 캰; ) HANGUL SYLLABLE KYAN CEB1;CEB1;110F 1163 11AC;CEB1;110F 1163 11AC; # (캱; 캱; 캱; 캱; 캱; ) HANGUL SYLLABLE KYANJ CEB2;CEB2;110F 1163 11AD;CEB2;110F 1163 11AD; # (캲; 캲; 캲; 캲; 캲; ) HANGUL SYLLABLE KYANH CEB3;CEB3;110F 1163 11AE;CEB3;110F 1163 11AE; # (캳; 캳; 캳; 캳; 캳; ) HANGUL SYLLABLE KYAD CEB4;CEB4;110F 1163 11AF;CEB4;110F 1163 11AF; # (캴; 캴; 캴; 캴; 캴; ) HANGUL SYLLABLE KYAL CEB5;CEB5;110F 1163 11B0;CEB5;110F 1163 11B0; # (캵; 캵; 캵; 캵; 캵; ) HANGUL SYLLABLE KYALG CEB6;CEB6;110F 1163 11B1;CEB6;110F 1163 11B1; # (캶; 캶; 캶; 캶; 캶; ) HANGUL SYLLABLE KYALM CEB7;CEB7;110F 1163 11B2;CEB7;110F 1163 11B2; # (캷; 캷; 캷; 캷; 캷; ) HANGUL SYLLABLE KYALB CEB8;CEB8;110F 1163 11B3;CEB8;110F 1163 11B3; # (캸; 캸; 캸; 캸; 캸; ) HANGUL SYLLABLE KYALS CEB9;CEB9;110F 1163 11B4;CEB9;110F 1163 11B4; # (캹; 캹; 캹; 캹; 캹; ) HANGUL SYLLABLE KYALT CEBA;CEBA;110F 1163 11B5;CEBA;110F 1163 11B5; # (캺; 캺; 캺; 캺; 캺; ) HANGUL SYLLABLE KYALP CEBB;CEBB;110F 1163 11B6;CEBB;110F 1163 11B6; # (캻; 캻; 캻; 캻; 캻; ) HANGUL SYLLABLE KYALH CEBC;CEBC;110F 1163 11B7;CEBC;110F 1163 11B7; # (캼; 캼; 캼; 캼; 캼; ) HANGUL SYLLABLE KYAM CEBD;CEBD;110F 1163 11B8;CEBD;110F 1163 11B8; # (캽; 캽; 캽; 캽; 캽; ) HANGUL SYLLABLE KYAB CEBE;CEBE;110F 1163 11B9;CEBE;110F 1163 11B9; # (캾; 캾; 캾; 캾; 캾; ) HANGUL SYLLABLE KYABS CEBF;CEBF;110F 1163 11BA;CEBF;110F 1163 11BA; # (캿; 캿; 캿; 캿; 캿; ) HANGUL SYLLABLE KYAS CEC0;CEC0;110F 1163 11BB;CEC0;110F 1163 11BB; # (컀; 컀; 컀; 컀; 컀; ) HANGUL SYLLABLE KYASS CEC1;CEC1;110F 1163 11BC;CEC1;110F 1163 11BC; # (컁; 컁; 컁; 컁; 컁; ) HANGUL SYLLABLE KYANG CEC2;CEC2;110F 1163 11BD;CEC2;110F 1163 11BD; # (컂; 컂; 컂; 컂; 컂; ) HANGUL SYLLABLE KYAJ CEC3;CEC3;110F 1163 11BE;CEC3;110F 1163 11BE; # (컃; 컃; 컃; 컃; 컃; ) HANGUL SYLLABLE KYAC CEC4;CEC4;110F 1163 11BF;CEC4;110F 1163 11BF; # (컄; 컄; 컄; 컄; 컄; ) HANGUL SYLLABLE KYAK CEC5;CEC5;110F 1163 11C0;CEC5;110F 1163 11C0; # (컅; 컅; 컅; 컅; 컅; ) HANGUL SYLLABLE KYAT CEC6;CEC6;110F 1163 11C1;CEC6;110F 1163 11C1; # (컆; 컆; 컆; 컆; 컆; ) HANGUL SYLLABLE KYAP CEC7;CEC7;110F 1163 11C2;CEC7;110F 1163 11C2; # (컇; 컇; 컇; 컇; 컇; ) HANGUL SYLLABLE KYAH CEC8;CEC8;110F 1164;CEC8;110F 1164; # (컈; 컈; 컈; 컈; 컈; ) HANGUL SYLLABLE KYAE CEC9;CEC9;110F 1164 11A8;CEC9;110F 1164 11A8; # (컉; 컉; 컉; 컉; 컉; ) HANGUL SYLLABLE KYAEG CECA;CECA;110F 1164 11A9;CECA;110F 1164 11A9; # (컊; 컊; 컊; 컊; 컊; ) HANGUL SYLLABLE KYAEGG CECB;CECB;110F 1164 11AA;CECB;110F 1164 11AA; # (컋; 컋; 컋; 컋; 컋; ) HANGUL SYLLABLE KYAEGS CECC;CECC;110F 1164 11AB;CECC;110F 1164 11AB; # (컌; 컌; 컌; 컌; 컌; ) HANGUL SYLLABLE KYAEN CECD;CECD;110F 1164 11AC;CECD;110F 1164 11AC; # (컍; 컍; 컍; 컍; 컍; ) HANGUL SYLLABLE KYAENJ CECE;CECE;110F 1164 11AD;CECE;110F 1164 11AD; # (컎; 컎; 컎; 컎; 컎; ) HANGUL SYLLABLE KYAENH CECF;CECF;110F 1164 11AE;CECF;110F 1164 11AE; # (컏; 컏; 컏; 컏; 컏; ) HANGUL SYLLABLE KYAED CED0;CED0;110F 1164 11AF;CED0;110F 1164 11AF; # (컐; 컐; 컐; 컐; 컐; ) HANGUL SYLLABLE KYAEL CED1;CED1;110F 1164 11B0;CED1;110F 1164 11B0; # (컑; 컑; 컑; 컑; 컑; ) HANGUL SYLLABLE KYAELG CED2;CED2;110F 1164 11B1;CED2;110F 1164 11B1; # (컒; 컒; 컒; 컒; 컒; ) HANGUL SYLLABLE KYAELM CED3;CED3;110F 1164 11B2;CED3;110F 1164 11B2; # (컓; 컓; 컓; 컓; 컓; ) HANGUL SYLLABLE KYAELB CED4;CED4;110F 1164 11B3;CED4;110F 1164 11B3; # (컔; 컔; 컔; 컔; 컔; ) HANGUL SYLLABLE KYAELS CED5;CED5;110F 1164 11B4;CED5;110F 1164 11B4; # (컕; 컕; 컕; 컕; 컕; ) HANGUL SYLLABLE KYAELT CED6;CED6;110F 1164 11B5;CED6;110F 1164 11B5; # (컖; 컖; 컖; 컖; 컖; ) HANGUL SYLLABLE KYAELP CED7;CED7;110F 1164 11B6;CED7;110F 1164 11B6; # (컗; 컗; 컗; 컗; 컗; ) HANGUL SYLLABLE KYAELH CED8;CED8;110F 1164 11B7;CED8;110F 1164 11B7; # (컘; 컘; 컘; 컘; 컘; ) HANGUL SYLLABLE KYAEM CED9;CED9;110F 1164 11B8;CED9;110F 1164 11B8; # (컙; 컙; 컙; 컙; 컙; ) HANGUL SYLLABLE KYAEB CEDA;CEDA;110F 1164 11B9;CEDA;110F 1164 11B9; # (컚; 컚; 컚; 컚; 컚; ) HANGUL SYLLABLE KYAEBS CEDB;CEDB;110F 1164 11BA;CEDB;110F 1164 11BA; # (컛; 컛; 컛; 컛; 컛; ) HANGUL SYLLABLE KYAES CEDC;CEDC;110F 1164 11BB;CEDC;110F 1164 11BB; # (컜; 컜; 컜; 컜; 컜; ) HANGUL SYLLABLE KYAESS CEDD;CEDD;110F 1164 11BC;CEDD;110F 1164 11BC; # (컝; 컝; 컝; 컝; 컝; ) HANGUL SYLLABLE KYAENG CEDE;CEDE;110F 1164 11BD;CEDE;110F 1164 11BD; # (컞; 컞; 컞; 컞; 컞; ) HANGUL SYLLABLE KYAEJ CEDF;CEDF;110F 1164 11BE;CEDF;110F 1164 11BE; # (컟; 컟; 컟; 컟; 컟; ) HANGUL SYLLABLE KYAEC CEE0;CEE0;110F 1164 11BF;CEE0;110F 1164 11BF; # (컠; 컠; 컠; 컠; 컠; ) HANGUL SYLLABLE KYAEK CEE1;CEE1;110F 1164 11C0;CEE1;110F 1164 11C0; # (컡; 컡; 컡; 컡; 컡; ) HANGUL SYLLABLE KYAET CEE2;CEE2;110F 1164 11C1;CEE2;110F 1164 11C1; # (컢; 컢; 컢; 컢; 컢; ) HANGUL SYLLABLE KYAEP CEE3;CEE3;110F 1164 11C2;CEE3;110F 1164 11C2; # (컣; 컣; 컣; 컣; 컣; ) HANGUL SYLLABLE KYAEH CEE4;CEE4;110F 1165;CEE4;110F 1165; # (커; 커; 커; 커; 커; ) HANGUL SYLLABLE KEO CEE5;CEE5;110F 1165 11A8;CEE5;110F 1165 11A8; # (컥; 컥; 컥; 컥; 컥; ) HANGUL SYLLABLE KEOG CEE6;CEE6;110F 1165 11A9;CEE6;110F 1165 11A9; # (컦; 컦; 컦; 컦; 컦; ) HANGUL SYLLABLE KEOGG CEE7;CEE7;110F 1165 11AA;CEE7;110F 1165 11AA; # (컧; 컧; 컧; 컧; 컧; ) HANGUL SYLLABLE KEOGS CEE8;CEE8;110F 1165 11AB;CEE8;110F 1165 11AB; # (컨; 컨; 컨; 컨; 컨; ) HANGUL SYLLABLE KEON CEE9;CEE9;110F 1165 11AC;CEE9;110F 1165 11AC; # (컩; 컩; 컩; 컩; 컩; ) HANGUL SYLLABLE KEONJ CEEA;CEEA;110F 1165 11AD;CEEA;110F 1165 11AD; # (컪; 컪; 컪; 컪; 컪; ) HANGUL SYLLABLE KEONH CEEB;CEEB;110F 1165 11AE;CEEB;110F 1165 11AE; # (컫; 컫; 컫; 컫; 컫; ) HANGUL SYLLABLE KEOD CEEC;CEEC;110F 1165 11AF;CEEC;110F 1165 11AF; # (컬; 컬; 컬; 컬; 컬; ) HANGUL SYLLABLE KEOL CEED;CEED;110F 1165 11B0;CEED;110F 1165 11B0; # (컭; 컭; 컭; 컭; 컭; ) HANGUL SYLLABLE KEOLG CEEE;CEEE;110F 1165 11B1;CEEE;110F 1165 11B1; # (컮; 컮; 컮; 컮; 컮; ) HANGUL SYLLABLE KEOLM CEEF;CEEF;110F 1165 11B2;CEEF;110F 1165 11B2; # (컯; 컯; 컯; 컯; 컯; ) HANGUL SYLLABLE KEOLB CEF0;CEF0;110F 1165 11B3;CEF0;110F 1165 11B3; # (컰; 컰; 컰; 컰; 컰; ) HANGUL SYLLABLE KEOLS CEF1;CEF1;110F 1165 11B4;CEF1;110F 1165 11B4; # (컱; 컱; 컱; 컱; 컱; ) HANGUL SYLLABLE KEOLT CEF2;CEF2;110F 1165 11B5;CEF2;110F 1165 11B5; # (컲; 컲; 컲; 컲; 컲; ) HANGUL SYLLABLE KEOLP CEF3;CEF3;110F 1165 11B6;CEF3;110F 1165 11B6; # (컳; 컳; 컳; 컳; 컳; ) HANGUL SYLLABLE KEOLH CEF4;CEF4;110F 1165 11B7;CEF4;110F 1165 11B7; # (컴; 컴; 컴; 컴; 컴; ) HANGUL SYLLABLE KEOM CEF5;CEF5;110F 1165 11B8;CEF5;110F 1165 11B8; # (컵; 컵; 컵; 컵; 컵; ) HANGUL SYLLABLE KEOB CEF6;CEF6;110F 1165 11B9;CEF6;110F 1165 11B9; # (컶; 컶; 컶; 컶; 컶; ) HANGUL SYLLABLE KEOBS CEF7;CEF7;110F 1165 11BA;CEF7;110F 1165 11BA; # (컷; 컷; 컷; 컷; 컷; ) HANGUL SYLLABLE KEOS CEF8;CEF8;110F 1165 11BB;CEF8;110F 1165 11BB; # (컸; 컸; 컸; 컸; 컸; ) HANGUL SYLLABLE KEOSS CEF9;CEF9;110F 1165 11BC;CEF9;110F 1165 11BC; # (컹; 컹; 컹; 컹; 컹; ) HANGUL SYLLABLE KEONG CEFA;CEFA;110F 1165 11BD;CEFA;110F 1165 11BD; # (컺; 컺; 컺; 컺; 컺; ) HANGUL SYLLABLE KEOJ CEFB;CEFB;110F 1165 11BE;CEFB;110F 1165 11BE; # (컻; 컻; 컻; 컻; 컻; ) HANGUL SYLLABLE KEOC CEFC;CEFC;110F 1165 11BF;CEFC;110F 1165 11BF; # (컼; 컼; 컼; 컼; 컼; ) HANGUL SYLLABLE KEOK CEFD;CEFD;110F 1165 11C0;CEFD;110F 1165 11C0; # (컽; 컽; 컽; 컽; 컽; ) HANGUL SYLLABLE KEOT CEFE;CEFE;110F 1165 11C1;CEFE;110F 1165 11C1; # (컾; 컾; 컾; 컾; 컾; ) HANGUL SYLLABLE KEOP CEFF;CEFF;110F 1165 11C2;CEFF;110F 1165 11C2; # (컿; 컿; 컿; 컿; 컿; ) HANGUL SYLLABLE KEOH CF00;CF00;110F 1166;CF00;110F 1166; # (케; 케; 케; 케; 케; ) HANGUL SYLLABLE KE CF01;CF01;110F 1166 11A8;CF01;110F 1166 11A8; # (켁; 켁; 켁; 켁; 켁; ) HANGUL SYLLABLE KEG CF02;CF02;110F 1166 11A9;CF02;110F 1166 11A9; # (켂; 켂; 켂; 켂; 켂; ) HANGUL SYLLABLE KEGG CF03;CF03;110F 1166 11AA;CF03;110F 1166 11AA; # (켃; 켃; 켃; 켃; 켃; ) HANGUL SYLLABLE KEGS CF04;CF04;110F 1166 11AB;CF04;110F 1166 11AB; # (켄; 켄; 켄; 켄; 켄; ) HANGUL SYLLABLE KEN CF05;CF05;110F 1166 11AC;CF05;110F 1166 11AC; # (켅; 켅; 켅; 켅; 켅; ) HANGUL SYLLABLE KENJ CF06;CF06;110F 1166 11AD;CF06;110F 1166 11AD; # (켆; 켆; 켆; 켆; 켆; ) HANGUL SYLLABLE KENH CF07;CF07;110F 1166 11AE;CF07;110F 1166 11AE; # (켇; 켇; 켇; 켇; 켇; ) HANGUL SYLLABLE KED CF08;CF08;110F 1166 11AF;CF08;110F 1166 11AF; # (켈; 켈; 켈; 켈; 켈; ) HANGUL SYLLABLE KEL CF09;CF09;110F 1166 11B0;CF09;110F 1166 11B0; # (켉; 켉; 켉; 켉; 켉; ) HANGUL SYLLABLE KELG CF0A;CF0A;110F 1166 11B1;CF0A;110F 1166 11B1; # (켊; 켊; 켊; 켊; 켊; ) HANGUL SYLLABLE KELM CF0B;CF0B;110F 1166 11B2;CF0B;110F 1166 11B2; # (켋; 켋; 켋; 켋; 켋; ) HANGUL SYLLABLE KELB CF0C;CF0C;110F 1166 11B3;CF0C;110F 1166 11B3; # (켌; 켌; 켌; 켌; 켌; ) HANGUL SYLLABLE KELS CF0D;CF0D;110F 1166 11B4;CF0D;110F 1166 11B4; # (켍; 켍; 켍; 켍; 켍; ) HANGUL SYLLABLE KELT CF0E;CF0E;110F 1166 11B5;CF0E;110F 1166 11B5; # (켎; 켎; 켎; 켎; 켎; ) HANGUL SYLLABLE KELP CF0F;CF0F;110F 1166 11B6;CF0F;110F 1166 11B6; # (켏; 켏; 켏; 켏; 켏; ) HANGUL SYLLABLE KELH CF10;CF10;110F 1166 11B7;CF10;110F 1166 11B7; # (켐; 켐; 켐; 켐; 켐; ) HANGUL SYLLABLE KEM CF11;CF11;110F 1166 11B8;CF11;110F 1166 11B8; # (켑; 켑; 켑; 켑; 켑; ) HANGUL SYLLABLE KEB CF12;CF12;110F 1166 11B9;CF12;110F 1166 11B9; # (켒; 켒; 켒; 켒; 켒; ) HANGUL SYLLABLE KEBS CF13;CF13;110F 1166 11BA;CF13;110F 1166 11BA; # (켓; 켓; 켓; 켓; 켓; ) HANGUL SYLLABLE KES CF14;CF14;110F 1166 11BB;CF14;110F 1166 11BB; # (켔; 켔; 켔; 켔; 켔; ) HANGUL SYLLABLE KESS CF15;CF15;110F 1166 11BC;CF15;110F 1166 11BC; # (켕; 켕; 켕; 켕; 켕; ) HANGUL SYLLABLE KENG CF16;CF16;110F 1166 11BD;CF16;110F 1166 11BD; # (켖; 켖; 켖; 켖; 켖; ) HANGUL SYLLABLE KEJ CF17;CF17;110F 1166 11BE;CF17;110F 1166 11BE; # (켗; 켗; 켗; 켗; 켗; ) HANGUL SYLLABLE KEC CF18;CF18;110F 1166 11BF;CF18;110F 1166 11BF; # (켘; 켘; 켘; 켘; 켘; ) HANGUL SYLLABLE KEK CF19;CF19;110F 1166 11C0;CF19;110F 1166 11C0; # (켙; 켙; 켙; 켙; 켙; ) HANGUL SYLLABLE KET CF1A;CF1A;110F 1166 11C1;CF1A;110F 1166 11C1; # (켚; 켚; 켚; 켚; 켚; ) HANGUL SYLLABLE KEP CF1B;CF1B;110F 1166 11C2;CF1B;110F 1166 11C2; # (켛; 켛; 켛; 켛; 켛; ) HANGUL SYLLABLE KEH CF1C;CF1C;110F 1167;CF1C;110F 1167; # (켜; 켜; 켜; 켜; 켜; ) HANGUL SYLLABLE KYEO CF1D;CF1D;110F 1167 11A8;CF1D;110F 1167 11A8; # (켝; 켝; 켝; 켝; 켝; ) HANGUL SYLLABLE KYEOG CF1E;CF1E;110F 1167 11A9;CF1E;110F 1167 11A9; # (켞; 켞; 켞; 켞; 켞; ) HANGUL SYLLABLE KYEOGG CF1F;CF1F;110F 1167 11AA;CF1F;110F 1167 11AA; # (켟; 켟; 켟; 켟; 켟; ) HANGUL SYLLABLE KYEOGS CF20;CF20;110F 1167 11AB;CF20;110F 1167 11AB; # (켠; 켠; 켠; 켠; 켠; ) HANGUL SYLLABLE KYEON CF21;CF21;110F 1167 11AC;CF21;110F 1167 11AC; # (켡; 켡; 켡; 켡; 켡; ) HANGUL SYLLABLE KYEONJ CF22;CF22;110F 1167 11AD;CF22;110F 1167 11AD; # (켢; 켢; 켢; 켢; 켢; ) HANGUL SYLLABLE KYEONH CF23;CF23;110F 1167 11AE;CF23;110F 1167 11AE; # (켣; 켣; 켣; 켣; 켣; ) HANGUL SYLLABLE KYEOD CF24;CF24;110F 1167 11AF;CF24;110F 1167 11AF; # (켤; 켤; 켤; 켤; 켤; ) HANGUL SYLLABLE KYEOL CF25;CF25;110F 1167 11B0;CF25;110F 1167 11B0; # (켥; 켥; 켥; 켥; 켥; ) HANGUL SYLLABLE KYEOLG CF26;CF26;110F 1167 11B1;CF26;110F 1167 11B1; # (켦; 켦; 켦; 켦; 켦; ) HANGUL SYLLABLE KYEOLM CF27;CF27;110F 1167 11B2;CF27;110F 1167 11B2; # (켧; 켧; 켧; 켧; 켧; ) HANGUL SYLLABLE KYEOLB CF28;CF28;110F 1167 11B3;CF28;110F 1167 11B3; # (켨; 켨; 켨; 켨; 켨; ) HANGUL SYLLABLE KYEOLS CF29;CF29;110F 1167 11B4;CF29;110F 1167 11B4; # (켩; 켩; 켩; 켩; 켩; ) HANGUL SYLLABLE KYEOLT CF2A;CF2A;110F 1167 11B5;CF2A;110F 1167 11B5; # (켪; 켪; 켪; 켪; 켪; ) HANGUL SYLLABLE KYEOLP CF2B;CF2B;110F 1167 11B6;CF2B;110F 1167 11B6; # (켫; 켫; 켫; 켫; 켫; ) HANGUL SYLLABLE KYEOLH CF2C;CF2C;110F 1167 11B7;CF2C;110F 1167 11B7; # (켬; 켬; 켬; 켬; 켬; ) HANGUL SYLLABLE KYEOM CF2D;CF2D;110F 1167 11B8;CF2D;110F 1167 11B8; # (켭; 켭; 켭; 켭; 켭; ) HANGUL SYLLABLE KYEOB CF2E;CF2E;110F 1167 11B9;CF2E;110F 1167 11B9; # (켮; 켮; 켮; 켮; 켮; ) HANGUL SYLLABLE KYEOBS CF2F;CF2F;110F 1167 11BA;CF2F;110F 1167 11BA; # (켯; 켯; 켯; 켯; 켯; ) HANGUL SYLLABLE KYEOS CF30;CF30;110F 1167 11BB;CF30;110F 1167 11BB; # (켰; 켰; 켰; 켰; 켰; ) HANGUL SYLLABLE KYEOSS CF31;CF31;110F 1167 11BC;CF31;110F 1167 11BC; # (켱; 켱; 켱; 켱; 켱; ) HANGUL SYLLABLE KYEONG CF32;CF32;110F 1167 11BD;CF32;110F 1167 11BD; # (켲; 켲; 켲; 켲; 켲; ) HANGUL SYLLABLE KYEOJ CF33;CF33;110F 1167 11BE;CF33;110F 1167 11BE; # (켳; 켳; 켳; 켳; 켳; ) HANGUL SYLLABLE KYEOC CF34;CF34;110F 1167 11BF;CF34;110F 1167 11BF; # (켴; 켴; 켴; 켴; 켴; ) HANGUL SYLLABLE KYEOK CF35;CF35;110F 1167 11C0;CF35;110F 1167 11C0; # (켵; 켵; 켵; 켵; 켵; ) HANGUL SYLLABLE KYEOT CF36;CF36;110F 1167 11C1;CF36;110F 1167 11C1; # (켶; 켶; 켶; 켶; 켶; ) HANGUL SYLLABLE KYEOP CF37;CF37;110F 1167 11C2;CF37;110F 1167 11C2; # (켷; 켷; 켷; 켷; 켷; ) HANGUL SYLLABLE KYEOH CF38;CF38;110F 1168;CF38;110F 1168; # (켸; 켸; 켸; 켸; 켸; ) HANGUL SYLLABLE KYE CF39;CF39;110F 1168 11A8;CF39;110F 1168 11A8; # (켹; 켹; 켹; 켹; 켹; ) HANGUL SYLLABLE KYEG CF3A;CF3A;110F 1168 11A9;CF3A;110F 1168 11A9; # (켺; 켺; 켺; 켺; 켺; ) HANGUL SYLLABLE KYEGG CF3B;CF3B;110F 1168 11AA;CF3B;110F 1168 11AA; # (켻; 켻; 켻; 켻; 켻; ) HANGUL SYLLABLE KYEGS CF3C;CF3C;110F 1168 11AB;CF3C;110F 1168 11AB; # (켼; 켼; 켼; 켼; 켼; ) HANGUL SYLLABLE KYEN CF3D;CF3D;110F 1168 11AC;CF3D;110F 1168 11AC; # (켽; 켽; 켽; 켽; 켽; ) HANGUL SYLLABLE KYENJ CF3E;CF3E;110F 1168 11AD;CF3E;110F 1168 11AD; # (켾; 켾; 켾; 켾; 켾; ) HANGUL SYLLABLE KYENH CF3F;CF3F;110F 1168 11AE;CF3F;110F 1168 11AE; # (켿; 켿; 켿; 켿; 켿; ) HANGUL SYLLABLE KYED CF40;CF40;110F 1168 11AF;CF40;110F 1168 11AF; # (콀; 콀; 콀; 콀; 콀; ) HANGUL SYLLABLE KYEL CF41;CF41;110F 1168 11B0;CF41;110F 1168 11B0; # (콁; 콁; 콁; 콁; 콁; ) HANGUL SYLLABLE KYELG CF42;CF42;110F 1168 11B1;CF42;110F 1168 11B1; # (콂; 콂; 콂; 콂; 콂; ) HANGUL SYLLABLE KYELM CF43;CF43;110F 1168 11B2;CF43;110F 1168 11B2; # (콃; 콃; 콃; 콃; 콃; ) HANGUL SYLLABLE KYELB CF44;CF44;110F 1168 11B3;CF44;110F 1168 11B3; # (콄; 콄; 콄; 콄; 콄; ) HANGUL SYLLABLE KYELS CF45;CF45;110F 1168 11B4;CF45;110F 1168 11B4; # (콅; 콅; 콅; 콅; 콅; ) HANGUL SYLLABLE KYELT CF46;CF46;110F 1168 11B5;CF46;110F 1168 11B5; # (콆; 콆; 콆; 콆; 콆; ) HANGUL SYLLABLE KYELP CF47;CF47;110F 1168 11B6;CF47;110F 1168 11B6; # (콇; 콇; 콇; 콇; 콇; ) HANGUL SYLLABLE KYELH CF48;CF48;110F 1168 11B7;CF48;110F 1168 11B7; # (콈; 콈; 콈; 콈; 콈; ) HANGUL SYLLABLE KYEM CF49;CF49;110F 1168 11B8;CF49;110F 1168 11B8; # (콉; 콉; 콉; 콉; 콉; ) HANGUL SYLLABLE KYEB CF4A;CF4A;110F 1168 11B9;CF4A;110F 1168 11B9; # (콊; 콊; 콊; 콊; 콊; ) HANGUL SYLLABLE KYEBS CF4B;CF4B;110F 1168 11BA;CF4B;110F 1168 11BA; # (콋; 콋; 콋; 콋; 콋; ) HANGUL SYLLABLE KYES CF4C;CF4C;110F 1168 11BB;CF4C;110F 1168 11BB; # (콌; 콌; 콌; 콌; 콌; ) HANGUL SYLLABLE KYESS CF4D;CF4D;110F 1168 11BC;CF4D;110F 1168 11BC; # (콍; 콍; 콍; 콍; 콍; ) HANGUL SYLLABLE KYENG CF4E;CF4E;110F 1168 11BD;CF4E;110F 1168 11BD; # (콎; 콎; 콎; 콎; 콎; ) HANGUL SYLLABLE KYEJ CF4F;CF4F;110F 1168 11BE;CF4F;110F 1168 11BE; # (콏; 콏; 콏; 콏; 콏; ) HANGUL SYLLABLE KYEC CF50;CF50;110F 1168 11BF;CF50;110F 1168 11BF; # (콐; 콐; 콐; 콐; 콐; ) HANGUL SYLLABLE KYEK CF51;CF51;110F 1168 11C0;CF51;110F 1168 11C0; # (콑; 콑; 콑; 콑; 콑; ) HANGUL SYLLABLE KYET CF52;CF52;110F 1168 11C1;CF52;110F 1168 11C1; # (콒; 콒; 콒; 콒; 콒; ) HANGUL SYLLABLE KYEP CF53;CF53;110F 1168 11C2;CF53;110F 1168 11C2; # (콓; 콓; 콓; 콓; 콓; ) HANGUL SYLLABLE KYEH CF54;CF54;110F 1169;CF54;110F 1169; # (코; 코; 코; 코; 코; ) HANGUL SYLLABLE KO CF55;CF55;110F 1169 11A8;CF55;110F 1169 11A8; # (콕; 콕; 콕; 콕; 콕; ) HANGUL SYLLABLE KOG CF56;CF56;110F 1169 11A9;CF56;110F 1169 11A9; # (콖; 콖; 콖; 콖; 콖; ) HANGUL SYLLABLE KOGG CF57;CF57;110F 1169 11AA;CF57;110F 1169 11AA; # (콗; 콗; 콗; 콗; 콗; ) HANGUL SYLLABLE KOGS CF58;CF58;110F 1169 11AB;CF58;110F 1169 11AB; # (콘; 콘; 콘; 콘; 콘; ) HANGUL SYLLABLE KON CF59;CF59;110F 1169 11AC;CF59;110F 1169 11AC; # (콙; 콙; 콙; 콙; 콙; ) HANGUL SYLLABLE KONJ CF5A;CF5A;110F 1169 11AD;CF5A;110F 1169 11AD; # (콚; 콚; 콚; 콚; 콚; ) HANGUL SYLLABLE KONH CF5B;CF5B;110F 1169 11AE;CF5B;110F 1169 11AE; # (콛; 콛; 콛; 콛; 콛; ) HANGUL SYLLABLE KOD CF5C;CF5C;110F 1169 11AF;CF5C;110F 1169 11AF; # (콜; 콜; 콜; 콜; 콜; ) HANGUL SYLLABLE KOL CF5D;CF5D;110F 1169 11B0;CF5D;110F 1169 11B0; # (콝; 콝; 콝; 콝; 콝; ) HANGUL SYLLABLE KOLG CF5E;CF5E;110F 1169 11B1;CF5E;110F 1169 11B1; # (콞; 콞; 콞; 콞; 콞; ) HANGUL SYLLABLE KOLM CF5F;CF5F;110F 1169 11B2;CF5F;110F 1169 11B2; # (콟; 콟; 콟; 콟; 콟; ) HANGUL SYLLABLE KOLB CF60;CF60;110F 1169 11B3;CF60;110F 1169 11B3; # (콠; 콠; 콠; 콠; 콠; ) HANGUL SYLLABLE KOLS CF61;CF61;110F 1169 11B4;CF61;110F 1169 11B4; # (콡; 콡; 콡; 콡; 콡; ) HANGUL SYLLABLE KOLT CF62;CF62;110F 1169 11B5;CF62;110F 1169 11B5; # (콢; 콢; 콢; 콢; 콢; ) HANGUL SYLLABLE KOLP CF63;CF63;110F 1169 11B6;CF63;110F 1169 11B6; # (콣; 콣; 콣; 콣; 콣; ) HANGUL SYLLABLE KOLH CF64;CF64;110F 1169 11B7;CF64;110F 1169 11B7; # (콤; 콤; 콤; 콤; 콤; ) HANGUL SYLLABLE KOM CF65;CF65;110F 1169 11B8;CF65;110F 1169 11B8; # (콥; 콥; 콥; 콥; 콥; ) HANGUL SYLLABLE KOB CF66;CF66;110F 1169 11B9;CF66;110F 1169 11B9; # (콦; 콦; 콦; 콦; 콦; ) HANGUL SYLLABLE KOBS CF67;CF67;110F 1169 11BA;CF67;110F 1169 11BA; # (콧; 콧; 콧; 콧; 콧; ) HANGUL SYLLABLE KOS CF68;CF68;110F 1169 11BB;CF68;110F 1169 11BB; # (콨; 콨; 콨; 콨; 콨; ) HANGUL SYLLABLE KOSS CF69;CF69;110F 1169 11BC;CF69;110F 1169 11BC; # (콩; 콩; 콩; 콩; 콩; ) HANGUL SYLLABLE KONG CF6A;CF6A;110F 1169 11BD;CF6A;110F 1169 11BD; # (콪; 콪; 콪; 콪; 콪; ) HANGUL SYLLABLE KOJ CF6B;CF6B;110F 1169 11BE;CF6B;110F 1169 11BE; # (콫; 콫; 콫; 콫; 콫; ) HANGUL SYLLABLE KOC CF6C;CF6C;110F 1169 11BF;CF6C;110F 1169 11BF; # (콬; 콬; 콬; 콬; 콬; ) HANGUL SYLLABLE KOK CF6D;CF6D;110F 1169 11C0;CF6D;110F 1169 11C0; # (콭; 콭; 콭; 콭; 콭; ) HANGUL SYLLABLE KOT CF6E;CF6E;110F 1169 11C1;CF6E;110F 1169 11C1; # (콮; 콮; 콮; 콮; 콮; ) HANGUL SYLLABLE KOP CF6F;CF6F;110F 1169 11C2;CF6F;110F 1169 11C2; # (콯; 콯; 콯; 콯; 콯; ) HANGUL SYLLABLE KOH CF70;CF70;110F 116A;CF70;110F 116A; # (콰; 콰; 콰; 콰; 콰; ) HANGUL SYLLABLE KWA CF71;CF71;110F 116A 11A8;CF71;110F 116A 11A8; # (콱; 콱; 콱; 콱; 콱; ) HANGUL SYLLABLE KWAG CF72;CF72;110F 116A 11A9;CF72;110F 116A 11A9; # (콲; 콲; 콲; 콲; 콲; ) HANGUL SYLLABLE KWAGG CF73;CF73;110F 116A 11AA;CF73;110F 116A 11AA; # (콳; 콳; 콳; 콳; 콳; ) HANGUL SYLLABLE KWAGS CF74;CF74;110F 116A 11AB;CF74;110F 116A 11AB; # (콴; 콴; 콴; 콴; 콴; ) HANGUL SYLLABLE KWAN CF75;CF75;110F 116A 11AC;CF75;110F 116A 11AC; # (콵; 콵; 콵; 콵; 콵; ) HANGUL SYLLABLE KWANJ CF76;CF76;110F 116A 11AD;CF76;110F 116A 11AD; # (콶; 콶; 콶; 콶; 콶; ) HANGUL SYLLABLE KWANH CF77;CF77;110F 116A 11AE;CF77;110F 116A 11AE; # (콷; 콷; 콷; 콷; 콷; ) HANGUL SYLLABLE KWAD CF78;CF78;110F 116A 11AF;CF78;110F 116A 11AF; # (콸; 콸; 콸; 콸; 콸; ) HANGUL SYLLABLE KWAL CF79;CF79;110F 116A 11B0;CF79;110F 116A 11B0; # (콹; 콹; 콹; 콹; 콹; ) HANGUL SYLLABLE KWALG CF7A;CF7A;110F 116A 11B1;CF7A;110F 116A 11B1; # (콺; 콺; 콺; 콺; 콺; ) HANGUL SYLLABLE KWALM CF7B;CF7B;110F 116A 11B2;CF7B;110F 116A 11B2; # (콻; 콻; 콻; 콻; 콻; ) HANGUL SYLLABLE KWALB CF7C;CF7C;110F 116A 11B3;CF7C;110F 116A 11B3; # (콼; 콼; 콼; 콼; 콼; ) HANGUL SYLLABLE KWALS CF7D;CF7D;110F 116A 11B4;CF7D;110F 116A 11B4; # (콽; 콽; 콽; 콽; 콽; ) HANGUL SYLLABLE KWALT CF7E;CF7E;110F 116A 11B5;CF7E;110F 116A 11B5; # (콾; 콾; 콾; 콾; 콾; ) HANGUL SYLLABLE KWALP CF7F;CF7F;110F 116A 11B6;CF7F;110F 116A 11B6; # (콿; 콿; 콿; 콿; 콿; ) HANGUL SYLLABLE KWALH CF80;CF80;110F 116A 11B7;CF80;110F 116A 11B7; # (쾀; 쾀; 쾀; 쾀; 쾀; ) HANGUL SYLLABLE KWAM CF81;CF81;110F 116A 11B8;CF81;110F 116A 11B8; # (쾁; 쾁; 쾁; 쾁; 쾁; ) HANGUL SYLLABLE KWAB CF82;CF82;110F 116A 11B9;CF82;110F 116A 11B9; # (쾂; 쾂; 쾂; 쾂; 쾂; ) HANGUL SYLLABLE KWABS CF83;CF83;110F 116A 11BA;CF83;110F 116A 11BA; # (쾃; 쾃; 쾃; 쾃; 쾃; ) HANGUL SYLLABLE KWAS CF84;CF84;110F 116A 11BB;CF84;110F 116A 11BB; # (쾄; 쾄; 쾄; 쾄; 쾄; ) HANGUL SYLLABLE KWASS CF85;CF85;110F 116A 11BC;CF85;110F 116A 11BC; # (쾅; 쾅; 쾅; 쾅; 쾅; ) HANGUL SYLLABLE KWANG CF86;CF86;110F 116A 11BD;CF86;110F 116A 11BD; # (쾆; 쾆; 쾆; 쾆; 쾆; ) HANGUL SYLLABLE KWAJ CF87;CF87;110F 116A 11BE;CF87;110F 116A 11BE; # (쾇; 쾇; 쾇; 쾇; 쾇; ) HANGUL SYLLABLE KWAC CF88;CF88;110F 116A 11BF;CF88;110F 116A 11BF; # (쾈; 쾈; 쾈; 쾈; 쾈; ) HANGUL SYLLABLE KWAK CF89;CF89;110F 116A 11C0;CF89;110F 116A 11C0; # (쾉; 쾉; 쾉; 쾉; 쾉; ) HANGUL SYLLABLE KWAT CF8A;CF8A;110F 116A 11C1;CF8A;110F 116A 11C1; # (쾊; 쾊; 쾊; 쾊; 쾊; ) HANGUL SYLLABLE KWAP CF8B;CF8B;110F 116A 11C2;CF8B;110F 116A 11C2; # (쾋; 쾋; 쾋; 쾋; 쾋; ) HANGUL SYLLABLE KWAH CF8C;CF8C;110F 116B;CF8C;110F 116B; # (쾌; 쾌; 쾌; 쾌; 쾌; ) HANGUL SYLLABLE KWAE CF8D;CF8D;110F 116B 11A8;CF8D;110F 116B 11A8; # (쾍; 쾍; 쾍; 쾍; 쾍; ) HANGUL SYLLABLE KWAEG CF8E;CF8E;110F 116B 11A9;CF8E;110F 116B 11A9; # (쾎; 쾎; 쾎; 쾎; 쾎; ) HANGUL SYLLABLE KWAEGG CF8F;CF8F;110F 116B 11AA;CF8F;110F 116B 11AA; # (쾏; 쾏; 쾏; 쾏; 쾏; ) HANGUL SYLLABLE KWAEGS CF90;CF90;110F 116B 11AB;CF90;110F 116B 11AB; # (쾐; 쾐; 쾐; 쾐; 쾐; ) HANGUL SYLLABLE KWAEN CF91;CF91;110F 116B 11AC;CF91;110F 116B 11AC; # (쾑; 쾑; 쾑; 쾑; 쾑; ) HANGUL SYLLABLE KWAENJ CF92;CF92;110F 116B 11AD;CF92;110F 116B 11AD; # (쾒; 쾒; 쾒; 쾒; 쾒; ) HANGUL SYLLABLE KWAENH CF93;CF93;110F 116B 11AE;CF93;110F 116B 11AE; # (쾓; 쾓; 쾓; 쾓; 쾓; ) HANGUL SYLLABLE KWAED CF94;CF94;110F 116B 11AF;CF94;110F 116B 11AF; # (쾔; 쾔; 쾔; 쾔; 쾔; ) HANGUL SYLLABLE KWAEL CF95;CF95;110F 116B 11B0;CF95;110F 116B 11B0; # (쾕; 쾕; 쾕; 쾕; 쾕; ) HANGUL SYLLABLE KWAELG CF96;CF96;110F 116B 11B1;CF96;110F 116B 11B1; # (쾖; 쾖; 쾖; 쾖; 쾖; ) HANGUL SYLLABLE KWAELM CF97;CF97;110F 116B 11B2;CF97;110F 116B 11B2; # (쾗; 쾗; 쾗; 쾗; 쾗; ) HANGUL SYLLABLE KWAELB CF98;CF98;110F 116B 11B3;CF98;110F 116B 11B3; # (쾘; 쾘; 쾘; 쾘; 쾘; ) HANGUL SYLLABLE KWAELS CF99;CF99;110F 116B 11B4;CF99;110F 116B 11B4; # (쾙; 쾙; 쾙; 쾙; 쾙; ) HANGUL SYLLABLE KWAELT CF9A;CF9A;110F 116B 11B5;CF9A;110F 116B 11B5; # (쾚; 쾚; 쾚; 쾚; 쾚; ) HANGUL SYLLABLE KWAELP CF9B;CF9B;110F 116B 11B6;CF9B;110F 116B 11B6; # (쾛; 쾛; 쾛; 쾛; 쾛; ) HANGUL SYLLABLE KWAELH CF9C;CF9C;110F 116B 11B7;CF9C;110F 116B 11B7; # (쾜; 쾜; 쾜; 쾜; 쾜; ) HANGUL SYLLABLE KWAEM CF9D;CF9D;110F 116B 11B8;CF9D;110F 116B 11B8; # (쾝; 쾝; 쾝; 쾝; 쾝; ) HANGUL SYLLABLE KWAEB CF9E;CF9E;110F 116B 11B9;CF9E;110F 116B 11B9; # (쾞; 쾞; 쾞; 쾞; 쾞; ) HANGUL SYLLABLE KWAEBS CF9F;CF9F;110F 116B 11BA;CF9F;110F 116B 11BA; # (쾟; 쾟; 쾟; 쾟; 쾟; ) HANGUL SYLLABLE KWAES CFA0;CFA0;110F 116B 11BB;CFA0;110F 116B 11BB; # (쾠; 쾠; 쾠; 쾠; 쾠; ) HANGUL SYLLABLE KWAESS CFA1;CFA1;110F 116B 11BC;CFA1;110F 116B 11BC; # (쾡; 쾡; 쾡; 쾡; 쾡; ) HANGUL SYLLABLE KWAENG CFA2;CFA2;110F 116B 11BD;CFA2;110F 116B 11BD; # (쾢; 쾢; 쾢; 쾢; 쾢; ) HANGUL SYLLABLE KWAEJ CFA3;CFA3;110F 116B 11BE;CFA3;110F 116B 11BE; # (쾣; 쾣; 쾣; 쾣; 쾣; ) HANGUL SYLLABLE KWAEC CFA4;CFA4;110F 116B 11BF;CFA4;110F 116B 11BF; # (쾤; 쾤; 쾤; 쾤; 쾤; ) HANGUL SYLLABLE KWAEK CFA5;CFA5;110F 116B 11C0;CFA5;110F 116B 11C0; # (쾥; 쾥; 쾥; 쾥; 쾥; ) HANGUL SYLLABLE KWAET CFA6;CFA6;110F 116B 11C1;CFA6;110F 116B 11C1; # (쾦; 쾦; 쾦; 쾦; 쾦; ) HANGUL SYLLABLE KWAEP CFA7;CFA7;110F 116B 11C2;CFA7;110F 116B 11C2; # (쾧; 쾧; 쾧; 쾧; 쾧; ) HANGUL SYLLABLE KWAEH CFA8;CFA8;110F 116C;CFA8;110F 116C; # (쾨; 쾨; 쾨; 쾨; 쾨; ) HANGUL SYLLABLE KOE CFA9;CFA9;110F 116C 11A8;CFA9;110F 116C 11A8; # (쾩; 쾩; 쾩; 쾩; 쾩; ) HANGUL SYLLABLE KOEG CFAA;CFAA;110F 116C 11A9;CFAA;110F 116C 11A9; # (쾪; 쾪; 쾪; 쾪; 쾪; ) HANGUL SYLLABLE KOEGG CFAB;CFAB;110F 116C 11AA;CFAB;110F 116C 11AA; # (쾫; 쾫; 쾫; 쾫; 쾫; ) HANGUL SYLLABLE KOEGS CFAC;CFAC;110F 116C 11AB;CFAC;110F 116C 11AB; # (쾬; 쾬; 쾬; 쾬; 쾬; ) HANGUL SYLLABLE KOEN CFAD;CFAD;110F 116C 11AC;CFAD;110F 116C 11AC; # (쾭; 쾭; 쾭; 쾭; 쾭; ) HANGUL SYLLABLE KOENJ CFAE;CFAE;110F 116C 11AD;CFAE;110F 116C 11AD; # (쾮; 쾮; 쾮; 쾮; 쾮; ) HANGUL SYLLABLE KOENH CFAF;CFAF;110F 116C 11AE;CFAF;110F 116C 11AE; # (쾯; 쾯; 쾯; 쾯; 쾯; ) HANGUL SYLLABLE KOED CFB0;CFB0;110F 116C 11AF;CFB0;110F 116C 11AF; # (쾰; 쾰; 쾰; 쾰; 쾰; ) HANGUL SYLLABLE KOEL CFB1;CFB1;110F 116C 11B0;CFB1;110F 116C 11B0; # (쾱; 쾱; 쾱; 쾱; 쾱; ) HANGUL SYLLABLE KOELG CFB2;CFB2;110F 116C 11B1;CFB2;110F 116C 11B1; # (쾲; 쾲; 쾲; 쾲; 쾲; ) HANGUL SYLLABLE KOELM CFB3;CFB3;110F 116C 11B2;CFB3;110F 116C 11B2; # (쾳; 쾳; 쾳; 쾳; 쾳; ) HANGUL SYLLABLE KOELB CFB4;CFB4;110F 116C 11B3;CFB4;110F 116C 11B3; # (쾴; 쾴; 쾴; 쾴; 쾴; ) HANGUL SYLLABLE KOELS CFB5;CFB5;110F 116C 11B4;CFB5;110F 116C 11B4; # (쾵; 쾵; 쾵; 쾵; 쾵; ) HANGUL SYLLABLE KOELT CFB6;CFB6;110F 116C 11B5;CFB6;110F 116C 11B5; # (쾶; 쾶; 쾶; 쾶; 쾶; ) HANGUL SYLLABLE KOELP CFB7;CFB7;110F 116C 11B6;CFB7;110F 116C 11B6; # (쾷; 쾷; 쾷; 쾷; 쾷; ) HANGUL SYLLABLE KOELH CFB8;CFB8;110F 116C 11B7;CFB8;110F 116C 11B7; # (쾸; 쾸; 쾸; 쾸; 쾸; ) HANGUL SYLLABLE KOEM CFB9;CFB9;110F 116C 11B8;CFB9;110F 116C 11B8; # (쾹; 쾹; 쾹; 쾹; 쾹; ) HANGUL SYLLABLE KOEB CFBA;CFBA;110F 116C 11B9;CFBA;110F 116C 11B9; # (쾺; 쾺; 쾺; 쾺; 쾺; ) HANGUL SYLLABLE KOEBS CFBB;CFBB;110F 116C 11BA;CFBB;110F 116C 11BA; # (쾻; 쾻; 쾻; 쾻; 쾻; ) HANGUL SYLLABLE KOES CFBC;CFBC;110F 116C 11BB;CFBC;110F 116C 11BB; # (쾼; 쾼; 쾼; 쾼; 쾼; ) HANGUL SYLLABLE KOESS CFBD;CFBD;110F 116C 11BC;CFBD;110F 116C 11BC; # (쾽; 쾽; 쾽; 쾽; 쾽; ) HANGUL SYLLABLE KOENG CFBE;CFBE;110F 116C 11BD;CFBE;110F 116C 11BD; # (쾾; 쾾; 쾾; 쾾; 쾾; ) HANGUL SYLLABLE KOEJ CFBF;CFBF;110F 116C 11BE;CFBF;110F 116C 11BE; # (쾿; 쾿; 쾿; 쾿; 쾿; ) HANGUL SYLLABLE KOEC CFC0;CFC0;110F 116C 11BF;CFC0;110F 116C 11BF; # (쿀; 쿀; 쿀; 쿀; 쿀; ) HANGUL SYLLABLE KOEK CFC1;CFC1;110F 116C 11C0;CFC1;110F 116C 11C0; # (쿁; 쿁; 쿁; 쿁; 쿁; ) HANGUL SYLLABLE KOET CFC2;CFC2;110F 116C 11C1;CFC2;110F 116C 11C1; # (쿂; 쿂; 쿂; 쿂; 쿂; ) HANGUL SYLLABLE KOEP CFC3;CFC3;110F 116C 11C2;CFC3;110F 116C 11C2; # (쿃; 쿃; 쿃; 쿃; 쿃; ) HANGUL SYLLABLE KOEH CFC4;CFC4;110F 116D;CFC4;110F 116D; # (쿄; 쿄; 쿄; 쿄; 쿄; ) HANGUL SYLLABLE KYO CFC5;CFC5;110F 116D 11A8;CFC5;110F 116D 11A8; # (쿅; 쿅; 쿅; 쿅; 쿅; ) HANGUL SYLLABLE KYOG CFC6;CFC6;110F 116D 11A9;CFC6;110F 116D 11A9; # (쿆; 쿆; 쿆; 쿆; 쿆; ) HANGUL SYLLABLE KYOGG CFC7;CFC7;110F 116D 11AA;CFC7;110F 116D 11AA; # (쿇; 쿇; 쿇; 쿇; 쿇; ) HANGUL SYLLABLE KYOGS CFC8;CFC8;110F 116D 11AB;CFC8;110F 116D 11AB; # (쿈; 쿈; 쿈; 쿈; 쿈; ) HANGUL SYLLABLE KYON CFC9;CFC9;110F 116D 11AC;CFC9;110F 116D 11AC; # (쿉; 쿉; 쿉; 쿉; 쿉; ) HANGUL SYLLABLE KYONJ CFCA;CFCA;110F 116D 11AD;CFCA;110F 116D 11AD; # (쿊; 쿊; 쿊; 쿊; 쿊; ) HANGUL SYLLABLE KYONH CFCB;CFCB;110F 116D 11AE;CFCB;110F 116D 11AE; # (쿋; 쿋; 쿋; 쿋; 쿋; ) HANGUL SYLLABLE KYOD CFCC;CFCC;110F 116D 11AF;CFCC;110F 116D 11AF; # (쿌; 쿌; 쿌; 쿌; 쿌; ) HANGUL SYLLABLE KYOL CFCD;CFCD;110F 116D 11B0;CFCD;110F 116D 11B0; # (쿍; 쿍; 쿍; 쿍; 쿍; ) HANGUL SYLLABLE KYOLG CFCE;CFCE;110F 116D 11B1;CFCE;110F 116D 11B1; # (쿎; 쿎; 쿎; 쿎; 쿎; ) HANGUL SYLLABLE KYOLM CFCF;CFCF;110F 116D 11B2;CFCF;110F 116D 11B2; # (쿏; 쿏; 쿏; 쿏; 쿏; ) HANGUL SYLLABLE KYOLB CFD0;CFD0;110F 116D 11B3;CFD0;110F 116D 11B3; # (쿐; 쿐; 쿐; 쿐; 쿐; ) HANGUL SYLLABLE KYOLS CFD1;CFD1;110F 116D 11B4;CFD1;110F 116D 11B4; # (쿑; 쿑; 쿑; 쿑; 쿑; ) HANGUL SYLLABLE KYOLT CFD2;CFD2;110F 116D 11B5;CFD2;110F 116D 11B5; # (쿒; 쿒; 쿒; 쿒; 쿒; ) HANGUL SYLLABLE KYOLP CFD3;CFD3;110F 116D 11B6;CFD3;110F 116D 11B6; # (쿓; 쿓; 쿓; 쿓; 쿓; ) HANGUL SYLLABLE KYOLH CFD4;CFD4;110F 116D 11B7;CFD4;110F 116D 11B7; # (쿔; 쿔; 쿔; 쿔; 쿔; ) HANGUL SYLLABLE KYOM CFD5;CFD5;110F 116D 11B8;CFD5;110F 116D 11B8; # (쿕; 쿕; 쿕; 쿕; 쿕; ) HANGUL SYLLABLE KYOB CFD6;CFD6;110F 116D 11B9;CFD6;110F 116D 11B9; # (쿖; 쿖; 쿖; 쿖; 쿖; ) HANGUL SYLLABLE KYOBS CFD7;CFD7;110F 116D 11BA;CFD7;110F 116D 11BA; # (쿗; 쿗; 쿗; 쿗; 쿗; ) HANGUL SYLLABLE KYOS CFD8;CFD8;110F 116D 11BB;CFD8;110F 116D 11BB; # (쿘; 쿘; 쿘; 쿘; 쿘; ) HANGUL SYLLABLE KYOSS CFD9;CFD9;110F 116D 11BC;CFD9;110F 116D 11BC; # (쿙; 쿙; 쿙; 쿙; 쿙; ) HANGUL SYLLABLE KYONG CFDA;CFDA;110F 116D 11BD;CFDA;110F 116D 11BD; # (쿚; 쿚; 쿚; 쿚; 쿚; ) HANGUL SYLLABLE KYOJ CFDB;CFDB;110F 116D 11BE;CFDB;110F 116D 11BE; # (쿛; 쿛; 쿛; 쿛; 쿛; ) HANGUL SYLLABLE KYOC CFDC;CFDC;110F 116D 11BF;CFDC;110F 116D 11BF; # (쿜; 쿜; 쿜; 쿜; 쿜; ) HANGUL SYLLABLE KYOK CFDD;CFDD;110F 116D 11C0;CFDD;110F 116D 11C0; # (쿝; 쿝; 쿝; 쿝; 쿝; ) HANGUL SYLLABLE KYOT CFDE;CFDE;110F 116D 11C1;CFDE;110F 116D 11C1; # (쿞; 쿞; 쿞; 쿞; 쿞; ) HANGUL SYLLABLE KYOP CFDF;CFDF;110F 116D 11C2;CFDF;110F 116D 11C2; # (쿟; 쿟; 쿟; 쿟; 쿟; ) HANGUL SYLLABLE KYOH CFE0;CFE0;110F 116E;CFE0;110F 116E; # (쿠; 쿠; 쿠; 쿠; 쿠; ) HANGUL SYLLABLE KU CFE1;CFE1;110F 116E 11A8;CFE1;110F 116E 11A8; # (쿡; 쿡; 쿡; 쿡; 쿡; ) HANGUL SYLLABLE KUG CFE2;CFE2;110F 116E 11A9;CFE2;110F 116E 11A9; # (쿢; 쿢; 쿢; 쿢; 쿢; ) HANGUL SYLLABLE KUGG CFE3;CFE3;110F 116E 11AA;CFE3;110F 116E 11AA; # (쿣; 쿣; 쿣; 쿣; 쿣; ) HANGUL SYLLABLE KUGS CFE4;CFE4;110F 116E 11AB;CFE4;110F 116E 11AB; # (쿤; 쿤; 쿤; 쿤; 쿤; ) HANGUL SYLLABLE KUN CFE5;CFE5;110F 116E 11AC;CFE5;110F 116E 11AC; # (쿥; 쿥; 쿥; 쿥; 쿥; ) HANGUL SYLLABLE KUNJ CFE6;CFE6;110F 116E 11AD;CFE6;110F 116E 11AD; # (쿦; 쿦; 쿦; 쿦; 쿦; ) HANGUL SYLLABLE KUNH CFE7;CFE7;110F 116E 11AE;CFE7;110F 116E 11AE; # (쿧; 쿧; 쿧; 쿧; 쿧; ) HANGUL SYLLABLE KUD CFE8;CFE8;110F 116E 11AF;CFE8;110F 116E 11AF; # (쿨; 쿨; 쿨; 쿨; 쿨; ) HANGUL SYLLABLE KUL CFE9;CFE9;110F 116E 11B0;CFE9;110F 116E 11B0; # (쿩; 쿩; 쿩; 쿩; 쿩; ) HANGUL SYLLABLE KULG CFEA;CFEA;110F 116E 11B1;CFEA;110F 116E 11B1; # (쿪; 쿪; 쿪; 쿪; 쿪; ) HANGUL SYLLABLE KULM CFEB;CFEB;110F 116E 11B2;CFEB;110F 116E 11B2; # (쿫; 쿫; 쿫; 쿫; 쿫; ) HANGUL SYLLABLE KULB CFEC;CFEC;110F 116E 11B3;CFEC;110F 116E 11B3; # (쿬; 쿬; 쿬; 쿬; 쿬; ) HANGUL SYLLABLE KULS CFED;CFED;110F 116E 11B4;CFED;110F 116E 11B4; # (쿭; 쿭; 쿭; 쿭; 쿭; ) HANGUL SYLLABLE KULT CFEE;CFEE;110F 116E 11B5;CFEE;110F 116E 11B5; # (쿮; 쿮; 쿮; 쿮; 쿮; ) HANGUL SYLLABLE KULP CFEF;CFEF;110F 116E 11B6;CFEF;110F 116E 11B6; # (쿯; 쿯; 쿯; 쿯; 쿯; ) HANGUL SYLLABLE KULH CFF0;CFF0;110F 116E 11B7;CFF0;110F 116E 11B7; # (쿰; 쿰; 쿰; 쿰; 쿰; ) HANGUL SYLLABLE KUM CFF1;CFF1;110F 116E 11B8;CFF1;110F 116E 11B8; # (쿱; 쿱; 쿱; 쿱; 쿱; ) HANGUL SYLLABLE KUB CFF2;CFF2;110F 116E 11B9;CFF2;110F 116E 11B9; # (쿲; 쿲; 쿲; 쿲; 쿲; ) HANGUL SYLLABLE KUBS CFF3;CFF3;110F 116E 11BA;CFF3;110F 116E 11BA; # (쿳; 쿳; 쿳; 쿳; 쿳; ) HANGUL SYLLABLE KUS CFF4;CFF4;110F 116E 11BB;CFF4;110F 116E 11BB; # (쿴; 쿴; 쿴; 쿴; 쿴; ) HANGUL SYLLABLE KUSS CFF5;CFF5;110F 116E 11BC;CFF5;110F 116E 11BC; # (쿵; 쿵; 쿵; 쿵; 쿵; ) HANGUL SYLLABLE KUNG CFF6;CFF6;110F 116E 11BD;CFF6;110F 116E 11BD; # (쿶; 쿶; 쿶; 쿶; 쿶; ) HANGUL SYLLABLE KUJ CFF7;CFF7;110F 116E 11BE;CFF7;110F 116E 11BE; # (쿷; 쿷; 쿷; 쿷; 쿷; ) HANGUL SYLLABLE KUC CFF8;CFF8;110F 116E 11BF;CFF8;110F 116E 11BF; # (쿸; 쿸; 쿸; 쿸; 쿸; ) HANGUL SYLLABLE KUK CFF9;CFF9;110F 116E 11C0;CFF9;110F 116E 11C0; # (쿹; 쿹; 쿹; 쿹; 쿹; ) HANGUL SYLLABLE KUT CFFA;CFFA;110F 116E 11C1;CFFA;110F 116E 11C1; # (쿺; 쿺; 쿺; 쿺; 쿺; ) HANGUL SYLLABLE KUP CFFB;CFFB;110F 116E 11C2;CFFB;110F 116E 11C2; # (쿻; 쿻; 쿻; 쿻; 쿻; ) HANGUL SYLLABLE KUH CFFC;CFFC;110F 116F;CFFC;110F 116F; # (쿼; 쿼; 쿼; 쿼; 쿼; ) HANGUL SYLLABLE KWEO CFFD;CFFD;110F 116F 11A8;CFFD;110F 116F 11A8; # (쿽; 쿽; 쿽; 쿽; 쿽; ) HANGUL SYLLABLE KWEOG CFFE;CFFE;110F 116F 11A9;CFFE;110F 116F 11A9; # (쿾; 쿾; 쿾; 쿾; 쿾; ) HANGUL SYLLABLE KWEOGG CFFF;CFFF;110F 116F 11AA;CFFF;110F 116F 11AA; # (쿿; 쿿; 쿿; 쿿; 쿿; ) HANGUL SYLLABLE KWEOGS D000;D000;110F 116F 11AB;D000;110F 116F 11AB; # (퀀; 퀀; 퀀; 퀀; 퀀; ) HANGUL SYLLABLE KWEON D001;D001;110F 116F 11AC;D001;110F 116F 11AC; # (퀁; 퀁; 퀁; 퀁; 퀁; ) HANGUL SYLLABLE KWEONJ D002;D002;110F 116F 11AD;D002;110F 116F 11AD; # (퀂; 퀂; 퀂; 퀂; 퀂; ) HANGUL SYLLABLE KWEONH D003;D003;110F 116F 11AE;D003;110F 116F 11AE; # (퀃; 퀃; 퀃; 퀃; 퀃; ) HANGUL SYLLABLE KWEOD D004;D004;110F 116F 11AF;D004;110F 116F 11AF; # (퀄; 퀄; 퀄; 퀄; 퀄; ) HANGUL SYLLABLE KWEOL D005;D005;110F 116F 11B0;D005;110F 116F 11B0; # (퀅; 퀅; 퀅; 퀅; 퀅; ) HANGUL SYLLABLE KWEOLG D006;D006;110F 116F 11B1;D006;110F 116F 11B1; # (퀆; 퀆; 퀆; 퀆; 퀆; ) HANGUL SYLLABLE KWEOLM D007;D007;110F 116F 11B2;D007;110F 116F 11B2; # (퀇; 퀇; 퀇; 퀇; 퀇; ) HANGUL SYLLABLE KWEOLB D008;D008;110F 116F 11B3;D008;110F 116F 11B3; # (퀈; 퀈; 퀈; 퀈; 퀈; ) HANGUL SYLLABLE KWEOLS D009;D009;110F 116F 11B4;D009;110F 116F 11B4; # (퀉; 퀉; 퀉; 퀉; 퀉; ) HANGUL SYLLABLE KWEOLT D00A;D00A;110F 116F 11B5;D00A;110F 116F 11B5; # (퀊; 퀊; 퀊; 퀊; 퀊; ) HANGUL SYLLABLE KWEOLP D00B;D00B;110F 116F 11B6;D00B;110F 116F 11B6; # (퀋; 퀋; 퀋; 퀋; 퀋; ) HANGUL SYLLABLE KWEOLH D00C;D00C;110F 116F 11B7;D00C;110F 116F 11B7; # (퀌; 퀌; 퀌; 퀌; 퀌; ) HANGUL SYLLABLE KWEOM D00D;D00D;110F 116F 11B8;D00D;110F 116F 11B8; # (퀍; 퀍; 퀍; 퀍; 퀍; ) HANGUL SYLLABLE KWEOB D00E;D00E;110F 116F 11B9;D00E;110F 116F 11B9; # (퀎; 퀎; 퀎; 퀎; 퀎; ) HANGUL SYLLABLE KWEOBS D00F;D00F;110F 116F 11BA;D00F;110F 116F 11BA; # (퀏; 퀏; 퀏; 퀏; 퀏; ) HANGUL SYLLABLE KWEOS D010;D010;110F 116F 11BB;D010;110F 116F 11BB; # (퀐; 퀐; 퀐; 퀐; 퀐; ) HANGUL SYLLABLE KWEOSS D011;D011;110F 116F 11BC;D011;110F 116F 11BC; # (퀑; 퀑; 퀑; 퀑; 퀑; ) HANGUL SYLLABLE KWEONG D012;D012;110F 116F 11BD;D012;110F 116F 11BD; # (퀒; 퀒; 퀒; 퀒; 퀒; ) HANGUL SYLLABLE KWEOJ D013;D013;110F 116F 11BE;D013;110F 116F 11BE; # (퀓; 퀓; 퀓; 퀓; 퀓; ) HANGUL SYLLABLE KWEOC D014;D014;110F 116F 11BF;D014;110F 116F 11BF; # (퀔; 퀔; 퀔; 퀔; 퀔; ) HANGUL SYLLABLE KWEOK D015;D015;110F 116F 11C0;D015;110F 116F 11C0; # (퀕; 퀕; 퀕; 퀕; 퀕; ) HANGUL SYLLABLE KWEOT D016;D016;110F 116F 11C1;D016;110F 116F 11C1; # (퀖; 퀖; 퀖; 퀖; 퀖; ) HANGUL SYLLABLE KWEOP D017;D017;110F 116F 11C2;D017;110F 116F 11C2; # (퀗; 퀗; 퀗; 퀗; 퀗; ) HANGUL SYLLABLE KWEOH D018;D018;110F 1170;D018;110F 1170; # (퀘; 퀘; 퀘; 퀘; 퀘; ) HANGUL SYLLABLE KWE D019;D019;110F 1170 11A8;D019;110F 1170 11A8; # (퀙; 퀙; 퀙; 퀙; 퀙; ) HANGUL SYLLABLE KWEG D01A;D01A;110F 1170 11A9;D01A;110F 1170 11A9; # (퀚; 퀚; 퀚; 퀚; 퀚; ) HANGUL SYLLABLE KWEGG D01B;D01B;110F 1170 11AA;D01B;110F 1170 11AA; # (퀛; 퀛; 퀛; 퀛; 퀛; ) HANGUL SYLLABLE KWEGS D01C;D01C;110F 1170 11AB;D01C;110F 1170 11AB; # (퀜; 퀜; 퀜; 퀜; 퀜; ) HANGUL SYLLABLE KWEN D01D;D01D;110F 1170 11AC;D01D;110F 1170 11AC; # (퀝; 퀝; 퀝; 퀝; 퀝; ) HANGUL SYLLABLE KWENJ D01E;D01E;110F 1170 11AD;D01E;110F 1170 11AD; # (퀞; 퀞; 퀞; 퀞; 퀞; ) HANGUL SYLLABLE KWENH D01F;D01F;110F 1170 11AE;D01F;110F 1170 11AE; # (퀟; 퀟; 퀟; 퀟; 퀟; ) HANGUL SYLLABLE KWED D020;D020;110F 1170 11AF;D020;110F 1170 11AF; # (퀠; 퀠; 퀠; 퀠; 퀠; ) HANGUL SYLLABLE KWEL D021;D021;110F 1170 11B0;D021;110F 1170 11B0; # (퀡; 퀡; 퀡; 퀡; 퀡; ) HANGUL SYLLABLE KWELG D022;D022;110F 1170 11B1;D022;110F 1170 11B1; # (퀢; 퀢; 퀢; 퀢; 퀢; ) HANGUL SYLLABLE KWELM D023;D023;110F 1170 11B2;D023;110F 1170 11B2; # (퀣; 퀣; 퀣; 퀣; 퀣; ) HANGUL SYLLABLE KWELB D024;D024;110F 1170 11B3;D024;110F 1170 11B3; # (퀤; 퀤; 퀤; 퀤; 퀤; ) HANGUL SYLLABLE KWELS D025;D025;110F 1170 11B4;D025;110F 1170 11B4; # (퀥; 퀥; 퀥; 퀥; 퀥; ) HANGUL SYLLABLE KWELT D026;D026;110F 1170 11B5;D026;110F 1170 11B5; # (퀦; 퀦; 퀦; 퀦; 퀦; ) HANGUL SYLLABLE KWELP D027;D027;110F 1170 11B6;D027;110F 1170 11B6; # (퀧; 퀧; 퀧; 퀧; 퀧; ) HANGUL SYLLABLE KWELH D028;D028;110F 1170 11B7;D028;110F 1170 11B7; # (퀨; 퀨; 퀨; 퀨; 퀨; ) HANGUL SYLLABLE KWEM D029;D029;110F 1170 11B8;D029;110F 1170 11B8; # (퀩; 퀩; 퀩; 퀩; 퀩; ) HANGUL SYLLABLE KWEB D02A;D02A;110F 1170 11B9;D02A;110F 1170 11B9; # (퀪; 퀪; 퀪; 퀪; 퀪; ) HANGUL SYLLABLE KWEBS D02B;D02B;110F 1170 11BA;D02B;110F 1170 11BA; # (퀫; 퀫; 퀫; 퀫; 퀫; ) HANGUL SYLLABLE KWES D02C;D02C;110F 1170 11BB;D02C;110F 1170 11BB; # (퀬; 퀬; 퀬; 퀬; 퀬; ) HANGUL SYLLABLE KWESS D02D;D02D;110F 1170 11BC;D02D;110F 1170 11BC; # (퀭; 퀭; 퀭; 퀭; 퀭; ) HANGUL SYLLABLE KWENG D02E;D02E;110F 1170 11BD;D02E;110F 1170 11BD; # (퀮; 퀮; 퀮; 퀮; 퀮; ) HANGUL SYLLABLE KWEJ D02F;D02F;110F 1170 11BE;D02F;110F 1170 11BE; # (퀯; 퀯; 퀯; 퀯; 퀯; ) HANGUL SYLLABLE KWEC D030;D030;110F 1170 11BF;D030;110F 1170 11BF; # (퀰; 퀰; 퀰; 퀰; 퀰; ) HANGUL SYLLABLE KWEK D031;D031;110F 1170 11C0;D031;110F 1170 11C0; # (퀱; 퀱; 퀱; 퀱; 퀱; ) HANGUL SYLLABLE KWET D032;D032;110F 1170 11C1;D032;110F 1170 11C1; # (퀲; 퀲; 퀲; 퀲; 퀲; ) HANGUL SYLLABLE KWEP D033;D033;110F 1170 11C2;D033;110F 1170 11C2; # (퀳; 퀳; 퀳; 퀳; 퀳; ) HANGUL SYLLABLE KWEH D034;D034;110F 1171;D034;110F 1171; # (퀴; 퀴; 퀴; 퀴; 퀴; ) HANGUL SYLLABLE KWI D035;D035;110F 1171 11A8;D035;110F 1171 11A8; # (퀵; 퀵; 퀵; 퀵; 퀵; ) HANGUL SYLLABLE KWIG D036;D036;110F 1171 11A9;D036;110F 1171 11A9; # (퀶; 퀶; 퀶; 퀶; 퀶; ) HANGUL SYLLABLE KWIGG D037;D037;110F 1171 11AA;D037;110F 1171 11AA; # (퀷; 퀷; 퀷; 퀷; 퀷; ) HANGUL SYLLABLE KWIGS D038;D038;110F 1171 11AB;D038;110F 1171 11AB; # (퀸; 퀸; 퀸; 퀸; 퀸; ) HANGUL SYLLABLE KWIN D039;D039;110F 1171 11AC;D039;110F 1171 11AC; # (퀹; 퀹; 퀹; 퀹; 퀹; ) HANGUL SYLLABLE KWINJ D03A;D03A;110F 1171 11AD;D03A;110F 1171 11AD; # (퀺; 퀺; 퀺; 퀺; 퀺; ) HANGUL SYLLABLE KWINH D03B;D03B;110F 1171 11AE;D03B;110F 1171 11AE; # (퀻; 퀻; 퀻; 퀻; 퀻; ) HANGUL SYLLABLE KWID D03C;D03C;110F 1171 11AF;D03C;110F 1171 11AF; # (퀼; 퀼; 퀼; 퀼; 퀼; ) HANGUL SYLLABLE KWIL D03D;D03D;110F 1171 11B0;D03D;110F 1171 11B0; # (퀽; 퀽; 퀽; 퀽; 퀽; ) HANGUL SYLLABLE KWILG D03E;D03E;110F 1171 11B1;D03E;110F 1171 11B1; # (퀾; 퀾; 퀾; 퀾; 퀾; ) HANGUL SYLLABLE KWILM D03F;D03F;110F 1171 11B2;D03F;110F 1171 11B2; # (퀿; 퀿; 퀿; 퀿; 퀿; ) HANGUL SYLLABLE KWILB D040;D040;110F 1171 11B3;D040;110F 1171 11B3; # (큀; 큀; 큀; 큀; 큀; ) HANGUL SYLLABLE KWILS D041;D041;110F 1171 11B4;D041;110F 1171 11B4; # (큁; 큁; 큁; 큁; 큁; ) HANGUL SYLLABLE KWILT D042;D042;110F 1171 11B5;D042;110F 1171 11B5; # (큂; 큂; 큂; 큂; 큂; ) HANGUL SYLLABLE KWILP D043;D043;110F 1171 11B6;D043;110F 1171 11B6; # (큃; 큃; 큃; 큃; 큃; ) HANGUL SYLLABLE KWILH D044;D044;110F 1171 11B7;D044;110F 1171 11B7; # (큄; 큄; 큄; 큄; 큄; ) HANGUL SYLLABLE KWIM D045;D045;110F 1171 11B8;D045;110F 1171 11B8; # (큅; 큅; 큅; 큅; 큅; ) HANGUL SYLLABLE KWIB D046;D046;110F 1171 11B9;D046;110F 1171 11B9; # (큆; 큆; 큆; 큆; 큆; ) HANGUL SYLLABLE KWIBS D047;D047;110F 1171 11BA;D047;110F 1171 11BA; # (큇; 큇; 큇; 큇; 큇; ) HANGUL SYLLABLE KWIS D048;D048;110F 1171 11BB;D048;110F 1171 11BB; # (큈; 큈; 큈; 큈; 큈; ) HANGUL SYLLABLE KWISS D049;D049;110F 1171 11BC;D049;110F 1171 11BC; # (큉; 큉; 큉; 큉; 큉; ) HANGUL SYLLABLE KWING D04A;D04A;110F 1171 11BD;D04A;110F 1171 11BD; # (큊; 큊; 큊; 큊; 큊; ) HANGUL SYLLABLE KWIJ D04B;D04B;110F 1171 11BE;D04B;110F 1171 11BE; # (큋; 큋; 큋; 큋; 큋; ) HANGUL SYLLABLE KWIC D04C;D04C;110F 1171 11BF;D04C;110F 1171 11BF; # (큌; 큌; 큌; 큌; 큌; ) HANGUL SYLLABLE KWIK D04D;D04D;110F 1171 11C0;D04D;110F 1171 11C0; # (큍; 큍; 큍; 큍; 큍; ) HANGUL SYLLABLE KWIT D04E;D04E;110F 1171 11C1;D04E;110F 1171 11C1; # (큎; 큎; 큎; 큎; 큎; ) HANGUL SYLLABLE KWIP D04F;D04F;110F 1171 11C2;D04F;110F 1171 11C2; # (큏; 큏; 큏; 큏; 큏; ) HANGUL SYLLABLE KWIH D050;D050;110F 1172;D050;110F 1172; # (큐; 큐; 큐; 큐; 큐; ) HANGUL SYLLABLE KYU D051;D051;110F 1172 11A8;D051;110F 1172 11A8; # (큑; 큑; 큑; 큑; 큑; ) HANGUL SYLLABLE KYUG D052;D052;110F 1172 11A9;D052;110F 1172 11A9; # (큒; 큒; 큒; 큒; 큒; ) HANGUL SYLLABLE KYUGG D053;D053;110F 1172 11AA;D053;110F 1172 11AA; # (큓; 큓; 큓; 큓; 큓; ) HANGUL SYLLABLE KYUGS D054;D054;110F 1172 11AB;D054;110F 1172 11AB; # (큔; 큔; 큔; 큔; 큔; ) HANGUL SYLLABLE KYUN D055;D055;110F 1172 11AC;D055;110F 1172 11AC; # (큕; 큕; 큕; 큕; 큕; ) HANGUL SYLLABLE KYUNJ D056;D056;110F 1172 11AD;D056;110F 1172 11AD; # (큖; 큖; 큖; 큖; 큖; ) HANGUL SYLLABLE KYUNH D057;D057;110F 1172 11AE;D057;110F 1172 11AE; # (큗; 큗; 큗; 큗; 큗; ) HANGUL SYLLABLE KYUD D058;D058;110F 1172 11AF;D058;110F 1172 11AF; # (큘; 큘; 큘; 큘; 큘; ) HANGUL SYLLABLE KYUL D059;D059;110F 1172 11B0;D059;110F 1172 11B0; # (큙; 큙; 큙; 큙; 큙; ) HANGUL SYLLABLE KYULG D05A;D05A;110F 1172 11B1;D05A;110F 1172 11B1; # (큚; 큚; 큚; 큚; 큚; ) HANGUL SYLLABLE KYULM D05B;D05B;110F 1172 11B2;D05B;110F 1172 11B2; # (큛; 큛; 큛; 큛; 큛; ) HANGUL SYLLABLE KYULB D05C;D05C;110F 1172 11B3;D05C;110F 1172 11B3; # (큜; 큜; 큜; 큜; 큜; ) HANGUL SYLLABLE KYULS D05D;D05D;110F 1172 11B4;D05D;110F 1172 11B4; # (큝; 큝; 큝; 큝; 큝; ) HANGUL SYLLABLE KYULT D05E;D05E;110F 1172 11B5;D05E;110F 1172 11B5; # (큞; 큞; 큞; 큞; 큞; ) HANGUL SYLLABLE KYULP D05F;D05F;110F 1172 11B6;D05F;110F 1172 11B6; # (큟; 큟; 큟; 큟; 큟; ) HANGUL SYLLABLE KYULH D060;D060;110F 1172 11B7;D060;110F 1172 11B7; # (큠; 큠; 큠; 큠; 큠; ) HANGUL SYLLABLE KYUM D061;D061;110F 1172 11B8;D061;110F 1172 11B8; # (큡; 큡; 큡; 큡; 큡; ) HANGUL SYLLABLE KYUB D062;D062;110F 1172 11B9;D062;110F 1172 11B9; # (큢; 큢; 큢; 큢; 큢; ) HANGUL SYLLABLE KYUBS D063;D063;110F 1172 11BA;D063;110F 1172 11BA; # (큣; 큣; 큣; 큣; 큣; ) HANGUL SYLLABLE KYUS D064;D064;110F 1172 11BB;D064;110F 1172 11BB; # (큤; 큤; 큤; 큤; 큤; ) HANGUL SYLLABLE KYUSS D065;D065;110F 1172 11BC;D065;110F 1172 11BC; # (큥; 큥; 큥; 큥; 큥; ) HANGUL SYLLABLE KYUNG D066;D066;110F 1172 11BD;D066;110F 1172 11BD; # (큦; 큦; 큦; 큦; 큦; ) HANGUL SYLLABLE KYUJ D067;D067;110F 1172 11BE;D067;110F 1172 11BE; # (큧; 큧; 큧; 큧; 큧; ) HANGUL SYLLABLE KYUC D068;D068;110F 1172 11BF;D068;110F 1172 11BF; # (큨; 큨; 큨; 큨; 큨; ) HANGUL SYLLABLE KYUK D069;D069;110F 1172 11C0;D069;110F 1172 11C0; # (큩; 큩; 큩; 큩; 큩; ) HANGUL SYLLABLE KYUT D06A;D06A;110F 1172 11C1;D06A;110F 1172 11C1; # (큪; 큪; 큪; 큪; 큪; ) HANGUL SYLLABLE KYUP D06B;D06B;110F 1172 11C2;D06B;110F 1172 11C2; # (큫; 큫; 큫; 큫; 큫; ) HANGUL SYLLABLE KYUH D06C;D06C;110F 1173;D06C;110F 1173; # (크; 크; 크; 크; 크; ) HANGUL SYLLABLE KEU D06D;D06D;110F 1173 11A8;D06D;110F 1173 11A8; # (큭; 큭; 큭; 큭; 큭; ) HANGUL SYLLABLE KEUG D06E;D06E;110F 1173 11A9;D06E;110F 1173 11A9; # (큮; 큮; 큮; 큮; 큮; ) HANGUL SYLLABLE KEUGG D06F;D06F;110F 1173 11AA;D06F;110F 1173 11AA; # (큯; 큯; 큯; 큯; 큯; ) HANGUL SYLLABLE KEUGS D070;D070;110F 1173 11AB;D070;110F 1173 11AB; # (큰; 큰; 큰; 큰; 큰; ) HANGUL SYLLABLE KEUN D071;D071;110F 1173 11AC;D071;110F 1173 11AC; # (큱; 큱; 큱; 큱; 큱; ) HANGUL SYLLABLE KEUNJ D072;D072;110F 1173 11AD;D072;110F 1173 11AD; # (큲; 큲; 큲; 큲; 큲; ) HANGUL SYLLABLE KEUNH D073;D073;110F 1173 11AE;D073;110F 1173 11AE; # (큳; 큳; 큳; 큳; 큳; ) HANGUL SYLLABLE KEUD D074;D074;110F 1173 11AF;D074;110F 1173 11AF; # (클; 클; 클; 클; 클; ) HANGUL SYLLABLE KEUL D075;D075;110F 1173 11B0;D075;110F 1173 11B0; # (큵; 큵; 큵; 큵; 큵; ) HANGUL SYLLABLE KEULG D076;D076;110F 1173 11B1;D076;110F 1173 11B1; # (큶; 큶; 큶; 큶; 큶; ) HANGUL SYLLABLE KEULM D077;D077;110F 1173 11B2;D077;110F 1173 11B2; # (큷; 큷; 큷; 큷; 큷; ) HANGUL SYLLABLE KEULB D078;D078;110F 1173 11B3;D078;110F 1173 11B3; # (큸; 큸; 큸; 큸; 큸; ) HANGUL SYLLABLE KEULS D079;D079;110F 1173 11B4;D079;110F 1173 11B4; # (큹; 큹; 큹; 큹; 큹; ) HANGUL SYLLABLE KEULT D07A;D07A;110F 1173 11B5;D07A;110F 1173 11B5; # (큺; 큺; 큺; 큺; 큺; ) HANGUL SYLLABLE KEULP D07B;D07B;110F 1173 11B6;D07B;110F 1173 11B6; # (큻; 큻; 큻; 큻; 큻; ) HANGUL SYLLABLE KEULH D07C;D07C;110F 1173 11B7;D07C;110F 1173 11B7; # (큼; 큼; 큼; 큼; 큼; ) HANGUL SYLLABLE KEUM D07D;D07D;110F 1173 11B8;D07D;110F 1173 11B8; # (큽; 큽; 큽; 큽; 큽; ) HANGUL SYLLABLE KEUB D07E;D07E;110F 1173 11B9;D07E;110F 1173 11B9; # (큾; 큾; 큾; 큾; 큾; ) HANGUL SYLLABLE KEUBS D07F;D07F;110F 1173 11BA;D07F;110F 1173 11BA; # (큿; 큿; 큿; 큿; 큿; ) HANGUL SYLLABLE KEUS D080;D080;110F 1173 11BB;D080;110F 1173 11BB; # (킀; 킀; 킀; 킀; 킀; ) HANGUL SYLLABLE KEUSS D081;D081;110F 1173 11BC;D081;110F 1173 11BC; # (킁; 킁; 킁; 킁; 킁; ) HANGUL SYLLABLE KEUNG D082;D082;110F 1173 11BD;D082;110F 1173 11BD; # (킂; 킂; 킂; 킂; 킂; ) HANGUL SYLLABLE KEUJ D083;D083;110F 1173 11BE;D083;110F 1173 11BE; # (킃; 킃; 킃; 킃; 킃; ) HANGUL SYLLABLE KEUC D084;D084;110F 1173 11BF;D084;110F 1173 11BF; # (킄; 킄; 킄; 킄; 킄; ) HANGUL SYLLABLE KEUK D085;D085;110F 1173 11C0;D085;110F 1173 11C0; # (킅; 킅; 킅; 킅; 킅; ) HANGUL SYLLABLE KEUT D086;D086;110F 1173 11C1;D086;110F 1173 11C1; # (킆; 킆; 킆; 킆; 킆; ) HANGUL SYLLABLE KEUP D087;D087;110F 1173 11C2;D087;110F 1173 11C2; # (킇; 킇; 킇; 킇; 킇; ) HANGUL SYLLABLE KEUH D088;D088;110F 1174;D088;110F 1174; # (킈; 킈; 킈; 킈; 킈; ) HANGUL SYLLABLE KYI D089;D089;110F 1174 11A8;D089;110F 1174 11A8; # (킉; 킉; 킉; 킉; 킉; ) HANGUL SYLLABLE KYIG D08A;D08A;110F 1174 11A9;D08A;110F 1174 11A9; # (킊; 킊; 킊; 킊; 킊; ) HANGUL SYLLABLE KYIGG D08B;D08B;110F 1174 11AA;D08B;110F 1174 11AA; # (킋; 킋; 킋; 킋; 킋; ) HANGUL SYLLABLE KYIGS D08C;D08C;110F 1174 11AB;D08C;110F 1174 11AB; # (킌; 킌; 킌; 킌; 킌; ) HANGUL SYLLABLE KYIN D08D;D08D;110F 1174 11AC;D08D;110F 1174 11AC; # (킍; 킍; 킍; 킍; 킍; ) HANGUL SYLLABLE KYINJ D08E;D08E;110F 1174 11AD;D08E;110F 1174 11AD; # (킎; 킎; 킎; 킎; 킎; ) HANGUL SYLLABLE KYINH D08F;D08F;110F 1174 11AE;D08F;110F 1174 11AE; # (킏; 킏; 킏; 킏; 킏; ) HANGUL SYLLABLE KYID D090;D090;110F 1174 11AF;D090;110F 1174 11AF; # (킐; 킐; 킐; 킐; 킐; ) HANGUL SYLLABLE KYIL D091;D091;110F 1174 11B0;D091;110F 1174 11B0; # (킑; 킑; 킑; 킑; 킑; ) HANGUL SYLLABLE KYILG D092;D092;110F 1174 11B1;D092;110F 1174 11B1; # (킒; 킒; 킒; 킒; 킒; ) HANGUL SYLLABLE KYILM D093;D093;110F 1174 11B2;D093;110F 1174 11B2; # (킓; 킓; 킓; 킓; 킓; ) HANGUL SYLLABLE KYILB D094;D094;110F 1174 11B3;D094;110F 1174 11B3; # (킔; 킔; 킔; 킔; 킔; ) HANGUL SYLLABLE KYILS D095;D095;110F 1174 11B4;D095;110F 1174 11B4; # (킕; 킕; 킕; 킕; 킕; ) HANGUL SYLLABLE KYILT D096;D096;110F 1174 11B5;D096;110F 1174 11B5; # (킖; 킖; 킖; 킖; 킖; ) HANGUL SYLLABLE KYILP D097;D097;110F 1174 11B6;D097;110F 1174 11B6; # (킗; 킗; 킗; 킗; 킗; ) HANGUL SYLLABLE KYILH D098;D098;110F 1174 11B7;D098;110F 1174 11B7; # (킘; 킘; 킘; 킘; 킘; ) HANGUL SYLLABLE KYIM D099;D099;110F 1174 11B8;D099;110F 1174 11B8; # (킙; 킙; 킙; 킙; 킙; ) HANGUL SYLLABLE KYIB D09A;D09A;110F 1174 11B9;D09A;110F 1174 11B9; # (킚; 킚; 킚; 킚; 킚; ) HANGUL SYLLABLE KYIBS D09B;D09B;110F 1174 11BA;D09B;110F 1174 11BA; # (킛; 킛; 킛; 킛; 킛; ) HANGUL SYLLABLE KYIS D09C;D09C;110F 1174 11BB;D09C;110F 1174 11BB; # (킜; 킜; 킜; 킜; 킜; ) HANGUL SYLLABLE KYISS D09D;D09D;110F 1174 11BC;D09D;110F 1174 11BC; # (킝; 킝; 킝; 킝; 킝; ) HANGUL SYLLABLE KYING D09E;D09E;110F 1174 11BD;D09E;110F 1174 11BD; # (킞; 킞; 킞; 킞; 킞; ) HANGUL SYLLABLE KYIJ D09F;D09F;110F 1174 11BE;D09F;110F 1174 11BE; # (킟; 킟; 킟; 킟; 킟; ) HANGUL SYLLABLE KYIC D0A0;D0A0;110F 1174 11BF;D0A0;110F 1174 11BF; # (킠; 킠; 킠; 킠; 킠; ) HANGUL SYLLABLE KYIK D0A1;D0A1;110F 1174 11C0;D0A1;110F 1174 11C0; # (킡; 킡; 킡; 킡; 킡; ) HANGUL SYLLABLE KYIT D0A2;D0A2;110F 1174 11C1;D0A2;110F 1174 11C1; # (킢; 킢; 킢; 킢; 킢; ) HANGUL SYLLABLE KYIP D0A3;D0A3;110F 1174 11C2;D0A3;110F 1174 11C2; # (킣; 킣; 킣; 킣; 킣; ) HANGUL SYLLABLE KYIH D0A4;D0A4;110F 1175;D0A4;110F 1175; # (키; 키; 키; 키; 키; ) HANGUL SYLLABLE KI D0A5;D0A5;110F 1175 11A8;D0A5;110F 1175 11A8; # (킥; 킥; 킥; 킥; 킥; ) HANGUL SYLLABLE KIG D0A6;D0A6;110F 1175 11A9;D0A6;110F 1175 11A9; # (킦; 킦; 킦; 킦; 킦; ) HANGUL SYLLABLE KIGG D0A7;D0A7;110F 1175 11AA;D0A7;110F 1175 11AA; # (킧; 킧; 킧; 킧; 킧; ) HANGUL SYLLABLE KIGS D0A8;D0A8;110F 1175 11AB;D0A8;110F 1175 11AB; # (킨; 킨; 킨; 킨; 킨; ) HANGUL SYLLABLE KIN D0A9;D0A9;110F 1175 11AC;D0A9;110F 1175 11AC; # (킩; 킩; 킩; 킩; 킩; ) HANGUL SYLLABLE KINJ D0AA;D0AA;110F 1175 11AD;D0AA;110F 1175 11AD; # (킪; 킪; 킪; 킪; 킪; ) HANGUL SYLLABLE KINH D0AB;D0AB;110F 1175 11AE;D0AB;110F 1175 11AE; # (킫; 킫; 킫; 킫; 킫; ) HANGUL SYLLABLE KID D0AC;D0AC;110F 1175 11AF;D0AC;110F 1175 11AF; # (킬; 킬; 킬; 킬; 킬; ) HANGUL SYLLABLE KIL D0AD;D0AD;110F 1175 11B0;D0AD;110F 1175 11B0; # (킭; 킭; 킭; 킭; 킭; ) HANGUL SYLLABLE KILG D0AE;D0AE;110F 1175 11B1;D0AE;110F 1175 11B1; # (킮; 킮; 킮; 킮; 킮; ) HANGUL SYLLABLE KILM D0AF;D0AF;110F 1175 11B2;D0AF;110F 1175 11B2; # (킯; 킯; 킯; 킯; 킯; ) HANGUL SYLLABLE KILB D0B0;D0B0;110F 1175 11B3;D0B0;110F 1175 11B3; # (킰; 킰; 킰; 킰; 킰; ) HANGUL SYLLABLE KILS D0B1;D0B1;110F 1175 11B4;D0B1;110F 1175 11B4; # (킱; 킱; 킱; 킱; 킱; ) HANGUL SYLLABLE KILT D0B2;D0B2;110F 1175 11B5;D0B2;110F 1175 11B5; # (킲; 킲; 킲; 킲; 킲; ) HANGUL SYLLABLE KILP D0B3;D0B3;110F 1175 11B6;D0B3;110F 1175 11B6; # (킳; 킳; 킳; 킳; 킳; ) HANGUL SYLLABLE KILH D0B4;D0B4;110F 1175 11B7;D0B4;110F 1175 11B7; # (킴; 킴; 킴; 킴; 킴; ) HANGUL SYLLABLE KIM D0B5;D0B5;110F 1175 11B8;D0B5;110F 1175 11B8; # (킵; 킵; 킵; 킵; 킵; ) HANGUL SYLLABLE KIB D0B6;D0B6;110F 1175 11B9;D0B6;110F 1175 11B9; # (킶; 킶; 킶; 킶; 킶; ) HANGUL SYLLABLE KIBS D0B7;D0B7;110F 1175 11BA;D0B7;110F 1175 11BA; # (킷; 킷; 킷; 킷; 킷; ) HANGUL SYLLABLE KIS D0B8;D0B8;110F 1175 11BB;D0B8;110F 1175 11BB; # (킸; 킸; 킸; 킸; 킸; ) HANGUL SYLLABLE KISS D0B9;D0B9;110F 1175 11BC;D0B9;110F 1175 11BC; # (킹; 킹; 킹; 킹; 킹; ) HANGUL SYLLABLE KING D0BA;D0BA;110F 1175 11BD;D0BA;110F 1175 11BD; # (킺; 킺; 킺; 킺; 킺; ) HANGUL SYLLABLE KIJ D0BB;D0BB;110F 1175 11BE;D0BB;110F 1175 11BE; # (킻; 킻; 킻; 킻; 킻; ) HANGUL SYLLABLE KIC D0BC;D0BC;110F 1175 11BF;D0BC;110F 1175 11BF; # (킼; 킼; 킼; 킼; 킼; ) HANGUL SYLLABLE KIK D0BD;D0BD;110F 1175 11C0;D0BD;110F 1175 11C0; # (킽; 킽; 킽; 킽; 킽; ) HANGUL SYLLABLE KIT D0BE;D0BE;110F 1175 11C1;D0BE;110F 1175 11C1; # (킾; 킾; 킾; 킾; 킾; ) HANGUL SYLLABLE KIP D0BF;D0BF;110F 1175 11C2;D0BF;110F 1175 11C2; # (킿; 킿; 킿; 킿; 킿; ) HANGUL SYLLABLE KIH D0C0;D0C0;1110 1161;D0C0;1110 1161; # (타; 타; 타; 타; 타; ) HANGUL SYLLABLE TA D0C1;D0C1;1110 1161 11A8;D0C1;1110 1161 11A8; # (탁; 탁; 탁; 탁; 탁; ) HANGUL SYLLABLE TAG D0C2;D0C2;1110 1161 11A9;D0C2;1110 1161 11A9; # (탂; 탂; 탂; 탂; 탂; ) HANGUL SYLLABLE TAGG D0C3;D0C3;1110 1161 11AA;D0C3;1110 1161 11AA; # (탃; 탃; 탃; 탃; 탃; ) HANGUL SYLLABLE TAGS D0C4;D0C4;1110 1161 11AB;D0C4;1110 1161 11AB; # (탄; 탄; 탄; 탄; 탄; ) HANGUL SYLLABLE TAN D0C5;D0C5;1110 1161 11AC;D0C5;1110 1161 11AC; # (탅; 탅; 탅; 탅; 탅; ) HANGUL SYLLABLE TANJ D0C6;D0C6;1110 1161 11AD;D0C6;1110 1161 11AD; # (탆; 탆; 탆; 탆; 탆; ) HANGUL SYLLABLE TANH D0C7;D0C7;1110 1161 11AE;D0C7;1110 1161 11AE; # (탇; 탇; 탇; 탇; 탇; ) HANGUL SYLLABLE TAD D0C8;D0C8;1110 1161 11AF;D0C8;1110 1161 11AF; # (탈; 탈; 탈; 탈; 탈; ) HANGUL SYLLABLE TAL D0C9;D0C9;1110 1161 11B0;D0C9;1110 1161 11B0; # (탉; 탉; 탉; 탉; 탉; ) HANGUL SYLLABLE TALG D0CA;D0CA;1110 1161 11B1;D0CA;1110 1161 11B1; # (탊; 탊; 탊; 탊; 탊; ) HANGUL SYLLABLE TALM D0CB;D0CB;1110 1161 11B2;D0CB;1110 1161 11B2; # (탋; 탋; 탋; 탋; 탋; ) HANGUL SYLLABLE TALB D0CC;D0CC;1110 1161 11B3;D0CC;1110 1161 11B3; # (탌; 탌; 탌; 탌; 탌; ) HANGUL SYLLABLE TALS D0CD;D0CD;1110 1161 11B4;D0CD;1110 1161 11B4; # (탍; 탍; 탍; 탍; 탍; ) HANGUL SYLLABLE TALT D0CE;D0CE;1110 1161 11B5;D0CE;1110 1161 11B5; # (탎; 탎; 탎; 탎; 탎; ) HANGUL SYLLABLE TALP D0CF;D0CF;1110 1161 11B6;D0CF;1110 1161 11B6; # (탏; 탏; 탏; 탏; 탏; ) HANGUL SYLLABLE TALH D0D0;D0D0;1110 1161 11B7;D0D0;1110 1161 11B7; # (탐; 탐; 탐; 탐; 탐; ) HANGUL SYLLABLE TAM D0D1;D0D1;1110 1161 11B8;D0D1;1110 1161 11B8; # (탑; 탑; 탑; 탑; 탑; ) HANGUL SYLLABLE TAB D0D2;D0D2;1110 1161 11B9;D0D2;1110 1161 11B9; # (탒; 탒; 탒; 탒; 탒; ) HANGUL SYLLABLE TABS D0D3;D0D3;1110 1161 11BA;D0D3;1110 1161 11BA; # (탓; 탓; 탓; 탓; 탓; ) HANGUL SYLLABLE TAS D0D4;D0D4;1110 1161 11BB;D0D4;1110 1161 11BB; # (탔; 탔; 탔; 탔; 탔; ) HANGUL SYLLABLE TASS D0D5;D0D5;1110 1161 11BC;D0D5;1110 1161 11BC; # (탕; 탕; 탕; 탕; 탕; ) HANGUL SYLLABLE TANG D0D6;D0D6;1110 1161 11BD;D0D6;1110 1161 11BD; # (탖; 탖; 탖; 탖; 탖; ) HANGUL SYLLABLE TAJ D0D7;D0D7;1110 1161 11BE;D0D7;1110 1161 11BE; # (탗; 탗; 탗; 탗; 탗; ) HANGUL SYLLABLE TAC D0D8;D0D8;1110 1161 11BF;D0D8;1110 1161 11BF; # (탘; 탘; 탘; 탘; 탘; ) HANGUL SYLLABLE TAK D0D9;D0D9;1110 1161 11C0;D0D9;1110 1161 11C0; # (탙; 탙; 탙; 탙; 탙; ) HANGUL SYLLABLE TAT D0DA;D0DA;1110 1161 11C1;D0DA;1110 1161 11C1; # (탚; 탚; 탚; 탚; 탚; ) HANGUL SYLLABLE TAP D0DB;D0DB;1110 1161 11C2;D0DB;1110 1161 11C2; # (탛; 탛; 탛; 탛; 탛; ) HANGUL SYLLABLE TAH D0DC;D0DC;1110 1162;D0DC;1110 1162; # (태; 태; 태; 태; 태; ) HANGUL SYLLABLE TAE D0DD;D0DD;1110 1162 11A8;D0DD;1110 1162 11A8; # (택; 택; 택; 택; 택; ) HANGUL SYLLABLE TAEG D0DE;D0DE;1110 1162 11A9;D0DE;1110 1162 11A9; # (탞; 탞; 탞; 탞; 탞; ) HANGUL SYLLABLE TAEGG D0DF;D0DF;1110 1162 11AA;D0DF;1110 1162 11AA; # (탟; 탟; 탟; 탟; 탟; ) HANGUL SYLLABLE TAEGS D0E0;D0E0;1110 1162 11AB;D0E0;1110 1162 11AB; # (탠; 탠; 탠; 탠; 탠; ) HANGUL SYLLABLE TAEN D0E1;D0E1;1110 1162 11AC;D0E1;1110 1162 11AC; # (탡; 탡; 탡; 탡; 탡; ) HANGUL SYLLABLE TAENJ D0E2;D0E2;1110 1162 11AD;D0E2;1110 1162 11AD; # (탢; 탢; 탢; 탢; 탢; ) HANGUL SYLLABLE TAENH D0E3;D0E3;1110 1162 11AE;D0E3;1110 1162 11AE; # (탣; 탣; 탣; 탣; 탣; ) HANGUL SYLLABLE TAED D0E4;D0E4;1110 1162 11AF;D0E4;1110 1162 11AF; # (탤; 탤; 탤; 탤; 탤; ) HANGUL SYLLABLE TAEL D0E5;D0E5;1110 1162 11B0;D0E5;1110 1162 11B0; # (탥; 탥; 탥; 탥; 탥; ) HANGUL SYLLABLE TAELG D0E6;D0E6;1110 1162 11B1;D0E6;1110 1162 11B1; # (탦; 탦; 탦; 탦; 탦; ) HANGUL SYLLABLE TAELM D0E7;D0E7;1110 1162 11B2;D0E7;1110 1162 11B2; # (탧; 탧; 탧; 탧; 탧; ) HANGUL SYLLABLE TAELB D0E8;D0E8;1110 1162 11B3;D0E8;1110 1162 11B3; # (탨; 탨; 탨; 탨; 탨; ) HANGUL SYLLABLE TAELS D0E9;D0E9;1110 1162 11B4;D0E9;1110 1162 11B4; # (탩; 탩; 탩; 탩; 탩; ) HANGUL SYLLABLE TAELT D0EA;D0EA;1110 1162 11B5;D0EA;1110 1162 11B5; # (탪; 탪; 탪; 탪; 탪; ) HANGUL SYLLABLE TAELP D0EB;D0EB;1110 1162 11B6;D0EB;1110 1162 11B6; # (탫; 탫; 탫; 탫; 탫; ) HANGUL SYLLABLE TAELH D0EC;D0EC;1110 1162 11B7;D0EC;1110 1162 11B7; # (탬; 탬; 탬; 탬; 탬; ) HANGUL SYLLABLE TAEM D0ED;D0ED;1110 1162 11B8;D0ED;1110 1162 11B8; # (탭; 탭; 탭; 탭; 탭; ) HANGUL SYLLABLE TAEB D0EE;D0EE;1110 1162 11B9;D0EE;1110 1162 11B9; # (탮; 탮; 탮; 탮; 탮; ) HANGUL SYLLABLE TAEBS D0EF;D0EF;1110 1162 11BA;D0EF;1110 1162 11BA; # (탯; 탯; 탯; 탯; 탯; ) HANGUL SYLLABLE TAES D0F0;D0F0;1110 1162 11BB;D0F0;1110 1162 11BB; # (탰; 탰; 탰; 탰; 탰; ) HANGUL SYLLABLE TAESS D0F1;D0F1;1110 1162 11BC;D0F1;1110 1162 11BC; # (탱; 탱; 탱; 탱; 탱; ) HANGUL SYLLABLE TAENG D0F2;D0F2;1110 1162 11BD;D0F2;1110 1162 11BD; # (탲; 탲; 탲; 탲; 탲; ) HANGUL SYLLABLE TAEJ D0F3;D0F3;1110 1162 11BE;D0F3;1110 1162 11BE; # (탳; 탳; 탳; 탳; 탳; ) HANGUL SYLLABLE TAEC D0F4;D0F4;1110 1162 11BF;D0F4;1110 1162 11BF; # (탴; 탴; 탴; 탴; 탴; ) HANGUL SYLLABLE TAEK D0F5;D0F5;1110 1162 11C0;D0F5;1110 1162 11C0; # (탵; 탵; 탵; 탵; 탵; ) HANGUL SYLLABLE TAET D0F6;D0F6;1110 1162 11C1;D0F6;1110 1162 11C1; # (탶; 탶; 탶; 탶; 탶; ) HANGUL SYLLABLE TAEP D0F7;D0F7;1110 1162 11C2;D0F7;1110 1162 11C2; # (탷; 탷; 탷; 탷; 탷; ) HANGUL SYLLABLE TAEH D0F8;D0F8;1110 1163;D0F8;1110 1163; # (탸; 탸; 탸; 탸; 탸; ) HANGUL SYLLABLE TYA D0F9;D0F9;1110 1163 11A8;D0F9;1110 1163 11A8; # (탹; 탹; 탹; 탹; 탹; ) HANGUL SYLLABLE TYAG D0FA;D0FA;1110 1163 11A9;D0FA;1110 1163 11A9; # (탺; 탺; 탺; 탺; 탺; ) HANGUL SYLLABLE TYAGG D0FB;D0FB;1110 1163 11AA;D0FB;1110 1163 11AA; # (탻; 탻; 탻; 탻; 탻; ) HANGUL SYLLABLE TYAGS D0FC;D0FC;1110 1163 11AB;D0FC;1110 1163 11AB; # (탼; 탼; 탼; 탼; 탼; ) HANGUL SYLLABLE TYAN D0FD;D0FD;1110 1163 11AC;D0FD;1110 1163 11AC; # (탽; 탽; 탽; 탽; 탽; ) HANGUL SYLLABLE TYANJ D0FE;D0FE;1110 1163 11AD;D0FE;1110 1163 11AD; # (탾; 탾; 탾; 탾; 탾; ) HANGUL SYLLABLE TYANH D0FF;D0FF;1110 1163 11AE;D0FF;1110 1163 11AE; # (탿; 탿; 탿; 탿; 탿; ) HANGUL SYLLABLE TYAD D100;D100;1110 1163 11AF;D100;1110 1163 11AF; # (턀; 턀; 턀; 턀; 턀; ) HANGUL SYLLABLE TYAL D101;D101;1110 1163 11B0;D101;1110 1163 11B0; # (턁; 턁; 턁; 턁; 턁; ) HANGUL SYLLABLE TYALG D102;D102;1110 1163 11B1;D102;1110 1163 11B1; # (턂; 턂; 턂; 턂; 턂; ) HANGUL SYLLABLE TYALM D103;D103;1110 1163 11B2;D103;1110 1163 11B2; # (턃; 턃; 턃; 턃; 턃; ) HANGUL SYLLABLE TYALB D104;D104;1110 1163 11B3;D104;1110 1163 11B3; # (턄; 턄; 턄; 턄; 턄; ) HANGUL SYLLABLE TYALS D105;D105;1110 1163 11B4;D105;1110 1163 11B4; # (턅; 턅; 턅; 턅; 턅; ) HANGUL SYLLABLE TYALT D106;D106;1110 1163 11B5;D106;1110 1163 11B5; # (턆; 턆; 턆; 턆; 턆; ) HANGUL SYLLABLE TYALP D107;D107;1110 1163 11B6;D107;1110 1163 11B6; # (턇; 턇; 턇; 턇; 턇; ) HANGUL SYLLABLE TYALH D108;D108;1110 1163 11B7;D108;1110 1163 11B7; # (턈; 턈; 턈; 턈; 턈; ) HANGUL SYLLABLE TYAM D109;D109;1110 1163 11B8;D109;1110 1163 11B8; # (턉; 턉; 턉; 턉; 턉; ) HANGUL SYLLABLE TYAB D10A;D10A;1110 1163 11B9;D10A;1110 1163 11B9; # (턊; 턊; 턊; 턊; 턊; ) HANGUL SYLLABLE TYABS D10B;D10B;1110 1163 11BA;D10B;1110 1163 11BA; # (턋; 턋; 턋; 턋; 턋; ) HANGUL SYLLABLE TYAS D10C;D10C;1110 1163 11BB;D10C;1110 1163 11BB; # (턌; 턌; 턌; 턌; 턌; ) HANGUL SYLLABLE TYASS D10D;D10D;1110 1163 11BC;D10D;1110 1163 11BC; # (턍; 턍; 턍; 턍; 턍; ) HANGUL SYLLABLE TYANG D10E;D10E;1110 1163 11BD;D10E;1110 1163 11BD; # (턎; 턎; 턎; 턎; 턎; ) HANGUL SYLLABLE TYAJ D10F;D10F;1110 1163 11BE;D10F;1110 1163 11BE; # (턏; 턏; 턏; 턏; 턏; ) HANGUL SYLLABLE TYAC D110;D110;1110 1163 11BF;D110;1110 1163 11BF; # (턐; 턐; 턐; 턐; 턐; ) HANGUL SYLLABLE TYAK D111;D111;1110 1163 11C0;D111;1110 1163 11C0; # (턑; 턑; 턑; 턑; 턑; ) HANGUL SYLLABLE TYAT D112;D112;1110 1163 11C1;D112;1110 1163 11C1; # (턒; 턒; 턒; 턒; 턒; ) HANGUL SYLLABLE TYAP D113;D113;1110 1163 11C2;D113;1110 1163 11C2; # (턓; 턓; 턓; 턓; 턓; ) HANGUL SYLLABLE TYAH D114;D114;1110 1164;D114;1110 1164; # (턔; 턔; 턔; 턔; 턔; ) HANGUL SYLLABLE TYAE D115;D115;1110 1164 11A8;D115;1110 1164 11A8; # (턕; 턕; 턕; 턕; 턕; ) HANGUL SYLLABLE TYAEG D116;D116;1110 1164 11A9;D116;1110 1164 11A9; # (턖; 턖; 턖; 턖; 턖; ) HANGUL SYLLABLE TYAEGG D117;D117;1110 1164 11AA;D117;1110 1164 11AA; # (턗; 턗; 턗; 턗; 턗; ) HANGUL SYLLABLE TYAEGS D118;D118;1110 1164 11AB;D118;1110 1164 11AB; # (턘; 턘; 턘; 턘; 턘; ) HANGUL SYLLABLE TYAEN D119;D119;1110 1164 11AC;D119;1110 1164 11AC; # (턙; 턙; 턙; 턙; 턙; ) HANGUL SYLLABLE TYAENJ D11A;D11A;1110 1164 11AD;D11A;1110 1164 11AD; # (턚; 턚; 턚; 턚; 턚; ) HANGUL SYLLABLE TYAENH D11B;D11B;1110 1164 11AE;D11B;1110 1164 11AE; # (턛; 턛; 턛; 턛; 턛; ) HANGUL SYLLABLE TYAED D11C;D11C;1110 1164 11AF;D11C;1110 1164 11AF; # (턜; 턜; 턜; 턜; 턜; ) HANGUL SYLLABLE TYAEL D11D;D11D;1110 1164 11B0;D11D;1110 1164 11B0; # (턝; 턝; 턝; 턝; 턝; ) HANGUL SYLLABLE TYAELG D11E;D11E;1110 1164 11B1;D11E;1110 1164 11B1; # (턞; 턞; 턞; 턞; 턞; ) HANGUL SYLLABLE TYAELM D11F;D11F;1110 1164 11B2;D11F;1110 1164 11B2; # (턟; 턟; 턟; 턟; 턟; ) HANGUL SYLLABLE TYAELB D120;D120;1110 1164 11B3;D120;1110 1164 11B3; # (턠; 턠; 턠; 턠; 턠; ) HANGUL SYLLABLE TYAELS D121;D121;1110 1164 11B4;D121;1110 1164 11B4; # (턡; 턡; 턡; 턡; 턡; ) HANGUL SYLLABLE TYAELT D122;D122;1110 1164 11B5;D122;1110 1164 11B5; # (턢; 턢; 턢; 턢; 턢; ) HANGUL SYLLABLE TYAELP D123;D123;1110 1164 11B6;D123;1110 1164 11B6; # (턣; 턣; 턣; 턣; 턣; ) HANGUL SYLLABLE TYAELH D124;D124;1110 1164 11B7;D124;1110 1164 11B7; # (턤; 턤; 턤; 턤; 턤; ) HANGUL SYLLABLE TYAEM D125;D125;1110 1164 11B8;D125;1110 1164 11B8; # (턥; 턥; 턥; 턥; 턥; ) HANGUL SYLLABLE TYAEB D126;D126;1110 1164 11B9;D126;1110 1164 11B9; # (턦; 턦; 턦; 턦; 턦; ) HANGUL SYLLABLE TYAEBS D127;D127;1110 1164 11BA;D127;1110 1164 11BA; # (턧; 턧; 턧; 턧; 턧; ) HANGUL SYLLABLE TYAES D128;D128;1110 1164 11BB;D128;1110 1164 11BB; # (턨; 턨; 턨; 턨; 턨; ) HANGUL SYLLABLE TYAESS D129;D129;1110 1164 11BC;D129;1110 1164 11BC; # (턩; 턩; 턩; 턩; 턩; ) HANGUL SYLLABLE TYAENG D12A;D12A;1110 1164 11BD;D12A;1110 1164 11BD; # (턪; 턪; 턪; 턪; 턪; ) HANGUL SYLLABLE TYAEJ D12B;D12B;1110 1164 11BE;D12B;1110 1164 11BE; # (턫; 턫; 턫; 턫; 턫; ) HANGUL SYLLABLE TYAEC D12C;D12C;1110 1164 11BF;D12C;1110 1164 11BF; # (턬; 턬; 턬; 턬; 턬; ) HANGUL SYLLABLE TYAEK D12D;D12D;1110 1164 11C0;D12D;1110 1164 11C0; # (턭; 턭; 턭; 턭; 턭; ) HANGUL SYLLABLE TYAET D12E;D12E;1110 1164 11C1;D12E;1110 1164 11C1; # (턮; 턮; 턮; 턮; 턮; ) HANGUL SYLLABLE TYAEP D12F;D12F;1110 1164 11C2;D12F;1110 1164 11C2; # (턯; 턯; 턯; 턯; 턯; ) HANGUL SYLLABLE TYAEH D130;D130;1110 1165;D130;1110 1165; # (터; 터; 터; 터; 터; ) HANGUL SYLLABLE TEO D131;D131;1110 1165 11A8;D131;1110 1165 11A8; # (턱; 턱; 턱; 턱; 턱; ) HANGUL SYLLABLE TEOG D132;D132;1110 1165 11A9;D132;1110 1165 11A9; # (턲; 턲; 턲; 턲; 턲; ) HANGUL SYLLABLE TEOGG D133;D133;1110 1165 11AA;D133;1110 1165 11AA; # (턳; 턳; 턳; 턳; 턳; ) HANGUL SYLLABLE TEOGS D134;D134;1110 1165 11AB;D134;1110 1165 11AB; # (턴; 턴; 턴; 턴; 턴; ) HANGUL SYLLABLE TEON D135;D135;1110 1165 11AC;D135;1110 1165 11AC; # (턵; 턵; 턵; 턵; 턵; ) HANGUL SYLLABLE TEONJ D136;D136;1110 1165 11AD;D136;1110 1165 11AD; # (턶; 턶; 턶; 턶; 턶; ) HANGUL SYLLABLE TEONH D137;D137;1110 1165 11AE;D137;1110 1165 11AE; # (턷; 턷; 턷; 턷; 턷; ) HANGUL SYLLABLE TEOD D138;D138;1110 1165 11AF;D138;1110 1165 11AF; # (털; 털; 털; 털; 털; ) HANGUL SYLLABLE TEOL D139;D139;1110 1165 11B0;D139;1110 1165 11B0; # (턹; 턹; 턹; 턹; 턹; ) HANGUL SYLLABLE TEOLG D13A;D13A;1110 1165 11B1;D13A;1110 1165 11B1; # (턺; 턺; 턺; 턺; 턺; ) HANGUL SYLLABLE TEOLM D13B;D13B;1110 1165 11B2;D13B;1110 1165 11B2; # (턻; 턻; 턻; 턻; 턻; ) HANGUL SYLLABLE TEOLB D13C;D13C;1110 1165 11B3;D13C;1110 1165 11B3; # (턼; 턼; 턼; 턼; 턼; ) HANGUL SYLLABLE TEOLS D13D;D13D;1110 1165 11B4;D13D;1110 1165 11B4; # (턽; 턽; 턽; 턽; 턽; ) HANGUL SYLLABLE TEOLT D13E;D13E;1110 1165 11B5;D13E;1110 1165 11B5; # (턾; 턾; 턾; 턾; 턾; ) HANGUL SYLLABLE TEOLP D13F;D13F;1110 1165 11B6;D13F;1110 1165 11B6; # (턿; 턿; 턿; 턿; 턿; ) HANGUL SYLLABLE TEOLH D140;D140;1110 1165 11B7;D140;1110 1165 11B7; # (텀; 텀; 텀; 텀; 텀; ) HANGUL SYLLABLE TEOM D141;D141;1110 1165 11B8;D141;1110 1165 11B8; # (텁; 텁; 텁; 텁; 텁; ) HANGUL SYLLABLE TEOB D142;D142;1110 1165 11B9;D142;1110 1165 11B9; # (텂; 텂; 텂; 텂; 텂; ) HANGUL SYLLABLE TEOBS D143;D143;1110 1165 11BA;D143;1110 1165 11BA; # (텃; 텃; 텃; 텃; 텃; ) HANGUL SYLLABLE TEOS D144;D144;1110 1165 11BB;D144;1110 1165 11BB; # (텄; 텄; 텄; 텄; 텄; ) HANGUL SYLLABLE TEOSS D145;D145;1110 1165 11BC;D145;1110 1165 11BC; # (텅; 텅; 텅; 텅; 텅; ) HANGUL SYLLABLE TEONG D146;D146;1110 1165 11BD;D146;1110 1165 11BD; # (텆; 텆; 텆; 텆; 텆; ) HANGUL SYLLABLE TEOJ D147;D147;1110 1165 11BE;D147;1110 1165 11BE; # (텇; 텇; 텇; 텇; 텇; ) HANGUL SYLLABLE TEOC D148;D148;1110 1165 11BF;D148;1110 1165 11BF; # (텈; 텈; 텈; 텈; 텈; ) HANGUL SYLLABLE TEOK D149;D149;1110 1165 11C0;D149;1110 1165 11C0; # (텉; 텉; 텉; 텉; 텉; ) HANGUL SYLLABLE TEOT D14A;D14A;1110 1165 11C1;D14A;1110 1165 11C1; # (텊; 텊; 텊; 텊; 텊; ) HANGUL SYLLABLE TEOP D14B;D14B;1110 1165 11C2;D14B;1110 1165 11C2; # (텋; 텋; 텋; 텋; 텋; ) HANGUL SYLLABLE TEOH D14C;D14C;1110 1166;D14C;1110 1166; # (테; 테; 테; 테; 테; ) HANGUL SYLLABLE TE D14D;D14D;1110 1166 11A8;D14D;1110 1166 11A8; # (텍; 텍; 텍; 텍; 텍; ) HANGUL SYLLABLE TEG D14E;D14E;1110 1166 11A9;D14E;1110 1166 11A9; # (텎; 텎; 텎; 텎; 텎; ) HANGUL SYLLABLE TEGG D14F;D14F;1110 1166 11AA;D14F;1110 1166 11AA; # (텏; 텏; 텏; 텏; 텏; ) HANGUL SYLLABLE TEGS D150;D150;1110 1166 11AB;D150;1110 1166 11AB; # (텐; 텐; 텐; 텐; 텐; ) HANGUL SYLLABLE TEN D151;D151;1110 1166 11AC;D151;1110 1166 11AC; # (텑; 텑; 텑; 텑; 텑; ) HANGUL SYLLABLE TENJ D152;D152;1110 1166 11AD;D152;1110 1166 11AD; # (텒; 텒; 텒; 텒; 텒; ) HANGUL SYLLABLE TENH D153;D153;1110 1166 11AE;D153;1110 1166 11AE; # (텓; 텓; 텓; 텓; 텓; ) HANGUL SYLLABLE TED D154;D154;1110 1166 11AF;D154;1110 1166 11AF; # (텔; 텔; 텔; 텔; 텔; ) HANGUL SYLLABLE TEL D155;D155;1110 1166 11B0;D155;1110 1166 11B0; # (텕; 텕; 텕; 텕; 텕; ) HANGUL SYLLABLE TELG D156;D156;1110 1166 11B1;D156;1110 1166 11B1; # (텖; 텖; 텖; 텖; 텖; ) HANGUL SYLLABLE TELM D157;D157;1110 1166 11B2;D157;1110 1166 11B2; # (텗; 텗; 텗; 텗; 텗; ) HANGUL SYLLABLE TELB D158;D158;1110 1166 11B3;D158;1110 1166 11B3; # (텘; 텘; 텘; 텘; 텘; ) HANGUL SYLLABLE TELS D159;D159;1110 1166 11B4;D159;1110 1166 11B4; # (텙; 텙; 텙; 텙; 텙; ) HANGUL SYLLABLE TELT D15A;D15A;1110 1166 11B5;D15A;1110 1166 11B5; # (텚; 텚; 텚; 텚; 텚; ) HANGUL SYLLABLE TELP D15B;D15B;1110 1166 11B6;D15B;1110 1166 11B6; # (텛; 텛; 텛; 텛; 텛; ) HANGUL SYLLABLE TELH D15C;D15C;1110 1166 11B7;D15C;1110 1166 11B7; # (템; 템; 템; 템; 템; ) HANGUL SYLLABLE TEM D15D;D15D;1110 1166 11B8;D15D;1110 1166 11B8; # (텝; 텝; 텝; 텝; 텝; ) HANGUL SYLLABLE TEB D15E;D15E;1110 1166 11B9;D15E;1110 1166 11B9; # (텞; 텞; 텞; 텞; 텞; ) HANGUL SYLLABLE TEBS D15F;D15F;1110 1166 11BA;D15F;1110 1166 11BA; # (텟; 텟; 텟; 텟; 텟; ) HANGUL SYLLABLE TES D160;D160;1110 1166 11BB;D160;1110 1166 11BB; # (텠; 텠; 텠; 텠; 텠; ) HANGUL SYLLABLE TESS D161;D161;1110 1166 11BC;D161;1110 1166 11BC; # (텡; 텡; 텡; 텡; 텡; ) HANGUL SYLLABLE TENG D162;D162;1110 1166 11BD;D162;1110 1166 11BD; # (텢; 텢; 텢; 텢; 텢; ) HANGUL SYLLABLE TEJ D163;D163;1110 1166 11BE;D163;1110 1166 11BE; # (텣; 텣; 텣; 텣; 텣; ) HANGUL SYLLABLE TEC D164;D164;1110 1166 11BF;D164;1110 1166 11BF; # (텤; 텤; 텤; 텤; 텤; ) HANGUL SYLLABLE TEK D165;D165;1110 1166 11C0;D165;1110 1166 11C0; # (텥; 텥; 텥; 텥; 텥; ) HANGUL SYLLABLE TET D166;D166;1110 1166 11C1;D166;1110 1166 11C1; # (텦; 텦; 텦; 텦; 텦; ) HANGUL SYLLABLE TEP D167;D167;1110 1166 11C2;D167;1110 1166 11C2; # (텧; 텧; 텧; 텧; 텧; ) HANGUL SYLLABLE TEH D168;D168;1110 1167;D168;1110 1167; # (텨; 텨; 텨; 텨; 텨; ) HANGUL SYLLABLE TYEO D169;D169;1110 1167 11A8;D169;1110 1167 11A8; # (텩; 텩; 텩; 텩; 텩; ) HANGUL SYLLABLE TYEOG D16A;D16A;1110 1167 11A9;D16A;1110 1167 11A9; # (텪; 텪; 텪; 텪; 텪; ) HANGUL SYLLABLE TYEOGG D16B;D16B;1110 1167 11AA;D16B;1110 1167 11AA; # (텫; 텫; 텫; 텫; 텫; ) HANGUL SYLLABLE TYEOGS D16C;D16C;1110 1167 11AB;D16C;1110 1167 11AB; # (텬; 텬; 텬; 텬; 텬; ) HANGUL SYLLABLE TYEON D16D;D16D;1110 1167 11AC;D16D;1110 1167 11AC; # (텭; 텭; 텭; 텭; 텭; ) HANGUL SYLLABLE TYEONJ D16E;D16E;1110 1167 11AD;D16E;1110 1167 11AD; # (텮; 텮; 텮; 텮; 텮; ) HANGUL SYLLABLE TYEONH D16F;D16F;1110 1167 11AE;D16F;1110 1167 11AE; # (텯; 텯; 텯; 텯; 텯; ) HANGUL SYLLABLE TYEOD D170;D170;1110 1167 11AF;D170;1110 1167 11AF; # (텰; 텰; 텰; 텰; 텰; ) HANGUL SYLLABLE TYEOL D171;D171;1110 1167 11B0;D171;1110 1167 11B0; # (텱; 텱; 텱; 텱; 텱; ) HANGUL SYLLABLE TYEOLG D172;D172;1110 1167 11B1;D172;1110 1167 11B1; # (텲; 텲; 텲; 텲; 텲; ) HANGUL SYLLABLE TYEOLM D173;D173;1110 1167 11B2;D173;1110 1167 11B2; # (텳; 텳; 텳; 텳; 텳; ) HANGUL SYLLABLE TYEOLB D174;D174;1110 1167 11B3;D174;1110 1167 11B3; # (텴; 텴; 텴; 텴; 텴; ) HANGUL SYLLABLE TYEOLS D175;D175;1110 1167 11B4;D175;1110 1167 11B4; # (텵; 텵; 텵; 텵; 텵; ) HANGUL SYLLABLE TYEOLT D176;D176;1110 1167 11B5;D176;1110 1167 11B5; # (텶; 텶; 텶; 텶; 텶; ) HANGUL SYLLABLE TYEOLP D177;D177;1110 1167 11B6;D177;1110 1167 11B6; # (텷; 텷; 텷; 텷; 텷; ) HANGUL SYLLABLE TYEOLH D178;D178;1110 1167 11B7;D178;1110 1167 11B7; # (텸; 텸; 텸; 텸; 텸; ) HANGUL SYLLABLE TYEOM D179;D179;1110 1167 11B8;D179;1110 1167 11B8; # (텹; 텹; 텹; 텹; 텹; ) HANGUL SYLLABLE TYEOB D17A;D17A;1110 1167 11B9;D17A;1110 1167 11B9; # (텺; 텺; 텺; 텺; 텺; ) HANGUL SYLLABLE TYEOBS D17B;D17B;1110 1167 11BA;D17B;1110 1167 11BA; # (텻; 텻; 텻; 텻; 텻; ) HANGUL SYLLABLE TYEOS D17C;D17C;1110 1167 11BB;D17C;1110 1167 11BB; # (텼; 텼; 텼; 텼; 텼; ) HANGUL SYLLABLE TYEOSS D17D;D17D;1110 1167 11BC;D17D;1110 1167 11BC; # (텽; 텽; 텽; 텽; 텽; ) HANGUL SYLLABLE TYEONG D17E;D17E;1110 1167 11BD;D17E;1110 1167 11BD; # (텾; 텾; 텾; 텾; 텾; ) HANGUL SYLLABLE TYEOJ D17F;D17F;1110 1167 11BE;D17F;1110 1167 11BE; # (텿; 텿; 텿; 텿; 텿; ) HANGUL SYLLABLE TYEOC D180;D180;1110 1167 11BF;D180;1110 1167 11BF; # (톀; 톀; 톀; 톀; 톀; ) HANGUL SYLLABLE TYEOK D181;D181;1110 1167 11C0;D181;1110 1167 11C0; # (톁; 톁; 톁; 톁; 톁; ) HANGUL SYLLABLE TYEOT D182;D182;1110 1167 11C1;D182;1110 1167 11C1; # (톂; 톂; 톂; 톂; 톂; ) HANGUL SYLLABLE TYEOP D183;D183;1110 1167 11C2;D183;1110 1167 11C2; # (톃; 톃; 톃; 톃; 톃; ) HANGUL SYLLABLE TYEOH D184;D184;1110 1168;D184;1110 1168; # (톄; 톄; 톄; 톄; 톄; ) HANGUL SYLLABLE TYE D185;D185;1110 1168 11A8;D185;1110 1168 11A8; # (톅; 톅; 톅; 톅; 톅; ) HANGUL SYLLABLE TYEG D186;D186;1110 1168 11A9;D186;1110 1168 11A9; # (톆; 톆; 톆; 톆; 톆; ) HANGUL SYLLABLE TYEGG D187;D187;1110 1168 11AA;D187;1110 1168 11AA; # (톇; 톇; 톇; 톇; 톇; ) HANGUL SYLLABLE TYEGS D188;D188;1110 1168 11AB;D188;1110 1168 11AB; # (톈; 톈; 톈; 톈; 톈; ) HANGUL SYLLABLE TYEN D189;D189;1110 1168 11AC;D189;1110 1168 11AC; # (톉; 톉; 톉; 톉; 톉; ) HANGUL SYLLABLE TYENJ D18A;D18A;1110 1168 11AD;D18A;1110 1168 11AD; # (톊; 톊; 톊; 톊; 톊; ) HANGUL SYLLABLE TYENH D18B;D18B;1110 1168 11AE;D18B;1110 1168 11AE; # (톋; 톋; 톋; 톋; 톋; ) HANGUL SYLLABLE TYED D18C;D18C;1110 1168 11AF;D18C;1110 1168 11AF; # (톌; 톌; 톌; 톌; 톌; ) HANGUL SYLLABLE TYEL D18D;D18D;1110 1168 11B0;D18D;1110 1168 11B0; # (톍; 톍; 톍; 톍; 톍; ) HANGUL SYLLABLE TYELG D18E;D18E;1110 1168 11B1;D18E;1110 1168 11B1; # (톎; 톎; 톎; 톎; 톎; ) HANGUL SYLLABLE TYELM D18F;D18F;1110 1168 11B2;D18F;1110 1168 11B2; # (톏; 톏; 톏; 톏; 톏; ) HANGUL SYLLABLE TYELB D190;D190;1110 1168 11B3;D190;1110 1168 11B3; # (톐; 톐; 톐; 톐; 톐; ) HANGUL SYLLABLE TYELS D191;D191;1110 1168 11B4;D191;1110 1168 11B4; # (톑; 톑; 톑; 톑; 톑; ) HANGUL SYLLABLE TYELT D192;D192;1110 1168 11B5;D192;1110 1168 11B5; # (톒; 톒; 톒; 톒; 톒; ) HANGUL SYLLABLE TYELP D193;D193;1110 1168 11B6;D193;1110 1168 11B6; # (톓; 톓; 톓; 톓; 톓; ) HANGUL SYLLABLE TYELH D194;D194;1110 1168 11B7;D194;1110 1168 11B7; # (톔; 톔; 톔; 톔; 톔; ) HANGUL SYLLABLE TYEM D195;D195;1110 1168 11B8;D195;1110 1168 11B8; # (톕; 톕; 톕; 톕; 톕; ) HANGUL SYLLABLE TYEB D196;D196;1110 1168 11B9;D196;1110 1168 11B9; # (톖; 톖; 톖; 톖; 톖; ) HANGUL SYLLABLE TYEBS D197;D197;1110 1168 11BA;D197;1110 1168 11BA; # (톗; 톗; 톗; 톗; 톗; ) HANGUL SYLLABLE TYES D198;D198;1110 1168 11BB;D198;1110 1168 11BB; # (톘; 톘; 톘; 톘; 톘; ) HANGUL SYLLABLE TYESS D199;D199;1110 1168 11BC;D199;1110 1168 11BC; # (톙; 톙; 톙; 톙; 톙; ) HANGUL SYLLABLE TYENG D19A;D19A;1110 1168 11BD;D19A;1110 1168 11BD; # (톚; 톚; 톚; 톚; 톚; ) HANGUL SYLLABLE TYEJ D19B;D19B;1110 1168 11BE;D19B;1110 1168 11BE; # (톛; 톛; 톛; 톛; 톛; ) HANGUL SYLLABLE TYEC D19C;D19C;1110 1168 11BF;D19C;1110 1168 11BF; # (톜; 톜; 톜; 톜; 톜; ) HANGUL SYLLABLE TYEK D19D;D19D;1110 1168 11C0;D19D;1110 1168 11C0; # (톝; 톝; 톝; 톝; 톝; ) HANGUL SYLLABLE TYET D19E;D19E;1110 1168 11C1;D19E;1110 1168 11C1; # (톞; 톞; 톞; 톞; 톞; ) HANGUL SYLLABLE TYEP D19F;D19F;1110 1168 11C2;D19F;1110 1168 11C2; # (톟; 톟; 톟; 톟; 톟; ) HANGUL SYLLABLE TYEH D1A0;D1A0;1110 1169;D1A0;1110 1169; # (토; 토; 토; 토; 토; ) HANGUL SYLLABLE TO D1A1;D1A1;1110 1169 11A8;D1A1;1110 1169 11A8; # (톡; 톡; 톡; 톡; 톡; ) HANGUL SYLLABLE TOG D1A2;D1A2;1110 1169 11A9;D1A2;1110 1169 11A9; # (톢; 톢; 톢; 톢; 톢; ) HANGUL SYLLABLE TOGG D1A3;D1A3;1110 1169 11AA;D1A3;1110 1169 11AA; # (톣; 톣; 톣; 톣; 톣; ) HANGUL SYLLABLE TOGS D1A4;D1A4;1110 1169 11AB;D1A4;1110 1169 11AB; # (톤; 톤; 톤; 톤; 톤; ) HANGUL SYLLABLE TON D1A5;D1A5;1110 1169 11AC;D1A5;1110 1169 11AC; # (톥; 톥; 톥; 톥; 톥; ) HANGUL SYLLABLE TONJ D1A6;D1A6;1110 1169 11AD;D1A6;1110 1169 11AD; # (톦; 톦; 톦; 톦; 톦; ) HANGUL SYLLABLE TONH D1A7;D1A7;1110 1169 11AE;D1A7;1110 1169 11AE; # (톧; 톧; 톧; 톧; 톧; ) HANGUL SYLLABLE TOD D1A8;D1A8;1110 1169 11AF;D1A8;1110 1169 11AF; # (톨; 톨; 톨; 톨; 톨; ) HANGUL SYLLABLE TOL D1A9;D1A9;1110 1169 11B0;D1A9;1110 1169 11B0; # (톩; 톩; 톩; 톩; 톩; ) HANGUL SYLLABLE TOLG D1AA;D1AA;1110 1169 11B1;D1AA;1110 1169 11B1; # (톪; 톪; 톪; 톪; 톪; ) HANGUL SYLLABLE TOLM D1AB;D1AB;1110 1169 11B2;D1AB;1110 1169 11B2; # (톫; 톫; 톫; 톫; 톫; ) HANGUL SYLLABLE TOLB D1AC;D1AC;1110 1169 11B3;D1AC;1110 1169 11B3; # (톬; 톬; 톬; 톬; 톬; ) HANGUL SYLLABLE TOLS D1AD;D1AD;1110 1169 11B4;D1AD;1110 1169 11B4; # (톭; 톭; 톭; 톭; 톭; ) HANGUL SYLLABLE TOLT D1AE;D1AE;1110 1169 11B5;D1AE;1110 1169 11B5; # (톮; 톮; 톮; 톮; 톮; ) HANGUL SYLLABLE TOLP D1AF;D1AF;1110 1169 11B6;D1AF;1110 1169 11B6; # (톯; 톯; 톯; 톯; 톯; ) HANGUL SYLLABLE TOLH D1B0;D1B0;1110 1169 11B7;D1B0;1110 1169 11B7; # (톰; 톰; 톰; 톰; 톰; ) HANGUL SYLLABLE TOM D1B1;D1B1;1110 1169 11B8;D1B1;1110 1169 11B8; # (톱; 톱; 톱; 톱; 톱; ) HANGUL SYLLABLE TOB D1B2;D1B2;1110 1169 11B9;D1B2;1110 1169 11B9; # (톲; 톲; 톲; 톲; 톲; ) HANGUL SYLLABLE TOBS D1B3;D1B3;1110 1169 11BA;D1B3;1110 1169 11BA; # (톳; 톳; 톳; 톳; 톳; ) HANGUL SYLLABLE TOS D1B4;D1B4;1110 1169 11BB;D1B4;1110 1169 11BB; # (톴; 톴; 톴; 톴; 톴; ) HANGUL SYLLABLE TOSS D1B5;D1B5;1110 1169 11BC;D1B5;1110 1169 11BC; # (통; 통; 통; 통; 통; ) HANGUL SYLLABLE TONG D1B6;D1B6;1110 1169 11BD;D1B6;1110 1169 11BD; # (톶; 톶; 톶; 톶; 톶; ) HANGUL SYLLABLE TOJ D1B7;D1B7;1110 1169 11BE;D1B7;1110 1169 11BE; # (톷; 톷; 톷; 톷; 톷; ) HANGUL SYLLABLE TOC D1B8;D1B8;1110 1169 11BF;D1B8;1110 1169 11BF; # (톸; 톸; 톸; 톸; 톸; ) HANGUL SYLLABLE TOK D1B9;D1B9;1110 1169 11C0;D1B9;1110 1169 11C0; # (톹; 톹; 톹; 톹; 톹; ) HANGUL SYLLABLE TOT D1BA;D1BA;1110 1169 11C1;D1BA;1110 1169 11C1; # (톺; 톺; 톺; 톺; 톺; ) HANGUL SYLLABLE TOP D1BB;D1BB;1110 1169 11C2;D1BB;1110 1169 11C2; # (톻; 톻; 톻; 톻; 톻; ) HANGUL SYLLABLE TOH D1BC;D1BC;1110 116A;D1BC;1110 116A; # (톼; 톼; 톼; 톼; 톼; ) HANGUL SYLLABLE TWA D1BD;D1BD;1110 116A 11A8;D1BD;1110 116A 11A8; # (톽; 톽; 톽; 톽; 톽; ) HANGUL SYLLABLE TWAG D1BE;D1BE;1110 116A 11A9;D1BE;1110 116A 11A9; # (톾; 톾; 톾; 톾; 톾; ) HANGUL SYLLABLE TWAGG D1BF;D1BF;1110 116A 11AA;D1BF;1110 116A 11AA; # (톿; 톿; 톿; 톿; 톿; ) HANGUL SYLLABLE TWAGS D1C0;D1C0;1110 116A 11AB;D1C0;1110 116A 11AB; # (퇀; 퇀; 퇀; 퇀; 퇀; ) HANGUL SYLLABLE TWAN D1C1;D1C1;1110 116A 11AC;D1C1;1110 116A 11AC; # (퇁; 퇁; 퇁; 퇁; 퇁; ) HANGUL SYLLABLE TWANJ D1C2;D1C2;1110 116A 11AD;D1C2;1110 116A 11AD; # (퇂; 퇂; 퇂; 퇂; 퇂; ) HANGUL SYLLABLE TWANH D1C3;D1C3;1110 116A 11AE;D1C3;1110 116A 11AE; # (퇃; 퇃; 퇃; 퇃; 퇃; ) HANGUL SYLLABLE TWAD D1C4;D1C4;1110 116A 11AF;D1C4;1110 116A 11AF; # (퇄; 퇄; 퇄; 퇄; 퇄; ) HANGUL SYLLABLE TWAL D1C5;D1C5;1110 116A 11B0;D1C5;1110 116A 11B0; # (퇅; 퇅; 퇅; 퇅; 퇅; ) HANGUL SYLLABLE TWALG D1C6;D1C6;1110 116A 11B1;D1C6;1110 116A 11B1; # (퇆; 퇆; 퇆; 퇆; 퇆; ) HANGUL SYLLABLE TWALM D1C7;D1C7;1110 116A 11B2;D1C7;1110 116A 11B2; # (퇇; 퇇; 퇇; 퇇; 퇇; ) HANGUL SYLLABLE TWALB D1C8;D1C8;1110 116A 11B3;D1C8;1110 116A 11B3; # (퇈; 퇈; 퇈; 퇈; 퇈; ) HANGUL SYLLABLE TWALS D1C9;D1C9;1110 116A 11B4;D1C9;1110 116A 11B4; # (퇉; 퇉; 퇉; 퇉; 퇉; ) HANGUL SYLLABLE TWALT D1CA;D1CA;1110 116A 11B5;D1CA;1110 116A 11B5; # (퇊; 퇊; 퇊; 퇊; 퇊; ) HANGUL SYLLABLE TWALP D1CB;D1CB;1110 116A 11B6;D1CB;1110 116A 11B6; # (퇋; 퇋; 퇋; 퇋; 퇋; ) HANGUL SYLLABLE TWALH D1CC;D1CC;1110 116A 11B7;D1CC;1110 116A 11B7; # (퇌; 퇌; 퇌; 퇌; 퇌; ) HANGUL SYLLABLE TWAM D1CD;D1CD;1110 116A 11B8;D1CD;1110 116A 11B8; # (퇍; 퇍; 퇍; 퇍; 퇍; ) HANGUL SYLLABLE TWAB D1CE;D1CE;1110 116A 11B9;D1CE;1110 116A 11B9; # (퇎; 퇎; 퇎; 퇎; 퇎; ) HANGUL SYLLABLE TWABS D1CF;D1CF;1110 116A 11BA;D1CF;1110 116A 11BA; # (퇏; 퇏; 퇏; 퇏; 퇏; ) HANGUL SYLLABLE TWAS D1D0;D1D0;1110 116A 11BB;D1D0;1110 116A 11BB; # (퇐; 퇐; 퇐; 퇐; 퇐; ) HANGUL SYLLABLE TWASS D1D1;D1D1;1110 116A 11BC;D1D1;1110 116A 11BC; # (퇑; 퇑; 퇑; 퇑; 퇑; ) HANGUL SYLLABLE TWANG D1D2;D1D2;1110 116A 11BD;D1D2;1110 116A 11BD; # (퇒; 퇒; 퇒; 퇒; 퇒; ) HANGUL SYLLABLE TWAJ D1D3;D1D3;1110 116A 11BE;D1D3;1110 116A 11BE; # (퇓; 퇓; 퇓; 퇓; 퇓; ) HANGUL SYLLABLE TWAC D1D4;D1D4;1110 116A 11BF;D1D4;1110 116A 11BF; # (퇔; 퇔; 퇔; 퇔; 퇔; ) HANGUL SYLLABLE TWAK D1D5;D1D5;1110 116A 11C0;D1D5;1110 116A 11C0; # (퇕; 퇕; 퇕; 퇕; 퇕; ) HANGUL SYLLABLE TWAT D1D6;D1D6;1110 116A 11C1;D1D6;1110 116A 11C1; # (퇖; 퇖; 퇖; 퇖; 퇖; ) HANGUL SYLLABLE TWAP D1D7;D1D7;1110 116A 11C2;D1D7;1110 116A 11C2; # (퇗; 퇗; 퇗; 퇗; 퇗; ) HANGUL SYLLABLE TWAH D1D8;D1D8;1110 116B;D1D8;1110 116B; # (퇘; 퇘; 퇘; 퇘; 퇘; ) HANGUL SYLLABLE TWAE D1D9;D1D9;1110 116B 11A8;D1D9;1110 116B 11A8; # (퇙; 퇙; 퇙; 퇙; 퇙; ) HANGUL SYLLABLE TWAEG D1DA;D1DA;1110 116B 11A9;D1DA;1110 116B 11A9; # (퇚; 퇚; 퇚; 퇚; 퇚; ) HANGUL SYLLABLE TWAEGG D1DB;D1DB;1110 116B 11AA;D1DB;1110 116B 11AA; # (퇛; 퇛; 퇛; 퇛; 퇛; ) HANGUL SYLLABLE TWAEGS D1DC;D1DC;1110 116B 11AB;D1DC;1110 116B 11AB; # (퇜; 퇜; 퇜; 퇜; 퇜; ) HANGUL SYLLABLE TWAEN D1DD;D1DD;1110 116B 11AC;D1DD;1110 116B 11AC; # (퇝; 퇝; 퇝; 퇝; 퇝; ) HANGUL SYLLABLE TWAENJ D1DE;D1DE;1110 116B 11AD;D1DE;1110 116B 11AD; # (퇞; 퇞; 퇞; 퇞; 퇞; ) HANGUL SYLLABLE TWAENH D1DF;D1DF;1110 116B 11AE;D1DF;1110 116B 11AE; # (퇟; 퇟; 퇟; 퇟; 퇟; ) HANGUL SYLLABLE TWAED D1E0;D1E0;1110 116B 11AF;D1E0;1110 116B 11AF; # (퇠; 퇠; 퇠; 퇠; 퇠; ) HANGUL SYLLABLE TWAEL D1E1;D1E1;1110 116B 11B0;D1E1;1110 116B 11B0; # (퇡; 퇡; 퇡; 퇡; 퇡; ) HANGUL SYLLABLE TWAELG D1E2;D1E2;1110 116B 11B1;D1E2;1110 116B 11B1; # (퇢; 퇢; 퇢; 퇢; 퇢; ) HANGUL SYLLABLE TWAELM D1E3;D1E3;1110 116B 11B2;D1E3;1110 116B 11B2; # (퇣; 퇣; 퇣; 퇣; 퇣; ) HANGUL SYLLABLE TWAELB D1E4;D1E4;1110 116B 11B3;D1E4;1110 116B 11B3; # (퇤; 퇤; 퇤; 퇤; 퇤; ) HANGUL SYLLABLE TWAELS D1E5;D1E5;1110 116B 11B4;D1E5;1110 116B 11B4; # (퇥; 퇥; 퇥; 퇥; 퇥; ) HANGUL SYLLABLE TWAELT D1E6;D1E6;1110 116B 11B5;D1E6;1110 116B 11B5; # (퇦; 퇦; 퇦; 퇦; 퇦; ) HANGUL SYLLABLE TWAELP D1E7;D1E7;1110 116B 11B6;D1E7;1110 116B 11B6; # (퇧; 퇧; 퇧; 퇧; 퇧; ) HANGUL SYLLABLE TWAELH D1E8;D1E8;1110 116B 11B7;D1E8;1110 116B 11B7; # (퇨; 퇨; 퇨; 퇨; 퇨; ) HANGUL SYLLABLE TWAEM D1E9;D1E9;1110 116B 11B8;D1E9;1110 116B 11B8; # (퇩; 퇩; 퇩; 퇩; 퇩; ) HANGUL SYLLABLE TWAEB D1EA;D1EA;1110 116B 11B9;D1EA;1110 116B 11B9; # (퇪; 퇪; 퇪; 퇪; 퇪; ) HANGUL SYLLABLE TWAEBS D1EB;D1EB;1110 116B 11BA;D1EB;1110 116B 11BA; # (퇫; 퇫; 퇫; 퇫; 퇫; ) HANGUL SYLLABLE TWAES D1EC;D1EC;1110 116B 11BB;D1EC;1110 116B 11BB; # (퇬; 퇬; 퇬; 퇬; 퇬; ) HANGUL SYLLABLE TWAESS D1ED;D1ED;1110 116B 11BC;D1ED;1110 116B 11BC; # (퇭; 퇭; 퇭; 퇭; 퇭; ) HANGUL SYLLABLE TWAENG D1EE;D1EE;1110 116B 11BD;D1EE;1110 116B 11BD; # (퇮; 퇮; 퇮; 퇮; 퇮; ) HANGUL SYLLABLE TWAEJ D1EF;D1EF;1110 116B 11BE;D1EF;1110 116B 11BE; # (퇯; 퇯; 퇯; 퇯; 퇯; ) HANGUL SYLLABLE TWAEC D1F0;D1F0;1110 116B 11BF;D1F0;1110 116B 11BF; # (퇰; 퇰; 퇰; 퇰; 퇰; ) HANGUL SYLLABLE TWAEK D1F1;D1F1;1110 116B 11C0;D1F1;1110 116B 11C0; # (퇱; 퇱; 퇱; 퇱; 퇱; ) HANGUL SYLLABLE TWAET D1F2;D1F2;1110 116B 11C1;D1F2;1110 116B 11C1; # (퇲; 퇲; 퇲; 퇲; 퇲; ) HANGUL SYLLABLE TWAEP D1F3;D1F3;1110 116B 11C2;D1F3;1110 116B 11C2; # (퇳; 퇳; 퇳; 퇳; 퇳; ) HANGUL SYLLABLE TWAEH D1F4;D1F4;1110 116C;D1F4;1110 116C; # (퇴; 퇴; 퇴; 퇴; 퇴; ) HANGUL SYLLABLE TOE D1F5;D1F5;1110 116C 11A8;D1F5;1110 116C 11A8; # (퇵; 퇵; 퇵; 퇵; 퇵; ) HANGUL SYLLABLE TOEG D1F6;D1F6;1110 116C 11A9;D1F6;1110 116C 11A9; # (퇶; 퇶; 퇶; 퇶; 퇶; ) HANGUL SYLLABLE TOEGG D1F7;D1F7;1110 116C 11AA;D1F7;1110 116C 11AA; # (퇷; 퇷; 퇷; 퇷; 퇷; ) HANGUL SYLLABLE TOEGS D1F8;D1F8;1110 116C 11AB;D1F8;1110 116C 11AB; # (퇸; 퇸; 퇸; 퇸; 퇸; ) HANGUL SYLLABLE TOEN D1F9;D1F9;1110 116C 11AC;D1F9;1110 116C 11AC; # (퇹; 퇹; 퇹; 퇹; 퇹; ) HANGUL SYLLABLE TOENJ D1FA;D1FA;1110 116C 11AD;D1FA;1110 116C 11AD; # (퇺; 퇺; 퇺; 퇺; 퇺; ) HANGUL SYLLABLE TOENH D1FB;D1FB;1110 116C 11AE;D1FB;1110 116C 11AE; # (퇻; 퇻; 퇻; 퇻; 퇻; ) HANGUL SYLLABLE TOED D1FC;D1FC;1110 116C 11AF;D1FC;1110 116C 11AF; # (퇼; 퇼; 퇼; 퇼; 퇼; ) HANGUL SYLLABLE TOEL D1FD;D1FD;1110 116C 11B0;D1FD;1110 116C 11B0; # (퇽; 퇽; 퇽; 퇽; 퇽; ) HANGUL SYLLABLE TOELG D1FE;D1FE;1110 116C 11B1;D1FE;1110 116C 11B1; # (퇾; 퇾; 퇾; 퇾; 퇾; ) HANGUL SYLLABLE TOELM D1FF;D1FF;1110 116C 11B2;D1FF;1110 116C 11B2; # (퇿; 퇿; 퇿; 퇿; 퇿; ) HANGUL SYLLABLE TOELB D200;D200;1110 116C 11B3;D200;1110 116C 11B3; # (툀; 툀; 툀; 툀; 툀; ) HANGUL SYLLABLE TOELS D201;D201;1110 116C 11B4;D201;1110 116C 11B4; # (툁; 툁; 툁; 툁; 툁; ) HANGUL SYLLABLE TOELT D202;D202;1110 116C 11B5;D202;1110 116C 11B5; # (툂; 툂; 툂; 툂; 툂; ) HANGUL SYLLABLE TOELP D203;D203;1110 116C 11B6;D203;1110 116C 11B6; # (툃; 툃; 툃; 툃; 툃; ) HANGUL SYLLABLE TOELH D204;D204;1110 116C 11B7;D204;1110 116C 11B7; # (툄; 툄; 툄; 툄; 툄; ) HANGUL SYLLABLE TOEM D205;D205;1110 116C 11B8;D205;1110 116C 11B8; # (툅; 툅; 툅; 툅; 툅; ) HANGUL SYLLABLE TOEB D206;D206;1110 116C 11B9;D206;1110 116C 11B9; # (툆; 툆; 툆; 툆; 툆; ) HANGUL SYLLABLE TOEBS D207;D207;1110 116C 11BA;D207;1110 116C 11BA; # (툇; 툇; 툇; 툇; 툇; ) HANGUL SYLLABLE TOES D208;D208;1110 116C 11BB;D208;1110 116C 11BB; # (툈; 툈; 툈; 툈; 툈; ) HANGUL SYLLABLE TOESS D209;D209;1110 116C 11BC;D209;1110 116C 11BC; # (툉; 툉; 툉; 툉; 툉; ) HANGUL SYLLABLE TOENG D20A;D20A;1110 116C 11BD;D20A;1110 116C 11BD; # (툊; 툊; 툊; 툊; 툊; ) HANGUL SYLLABLE TOEJ D20B;D20B;1110 116C 11BE;D20B;1110 116C 11BE; # (툋; 툋; 툋; 툋; 툋; ) HANGUL SYLLABLE TOEC D20C;D20C;1110 116C 11BF;D20C;1110 116C 11BF; # (툌; 툌; 툌; 툌; 툌; ) HANGUL SYLLABLE TOEK D20D;D20D;1110 116C 11C0;D20D;1110 116C 11C0; # (툍; 툍; 툍; 툍; 툍; ) HANGUL SYLLABLE TOET D20E;D20E;1110 116C 11C1;D20E;1110 116C 11C1; # (툎; 툎; 툎; 툎; 툎; ) HANGUL SYLLABLE TOEP D20F;D20F;1110 116C 11C2;D20F;1110 116C 11C2; # (툏; 툏; 툏; 툏; 툏; ) HANGUL SYLLABLE TOEH D210;D210;1110 116D;D210;1110 116D; # (툐; 툐; 툐; 툐; 툐; ) HANGUL SYLLABLE TYO D211;D211;1110 116D 11A8;D211;1110 116D 11A8; # (툑; 툑; 툑; 툑; 툑; ) HANGUL SYLLABLE TYOG D212;D212;1110 116D 11A9;D212;1110 116D 11A9; # (툒; 툒; 툒; 툒; 툒; ) HANGUL SYLLABLE TYOGG D213;D213;1110 116D 11AA;D213;1110 116D 11AA; # (툓; 툓; 툓; 툓; 툓; ) HANGUL SYLLABLE TYOGS D214;D214;1110 116D 11AB;D214;1110 116D 11AB; # (툔; 툔; 툔; 툔; 툔; ) HANGUL SYLLABLE TYON D215;D215;1110 116D 11AC;D215;1110 116D 11AC; # (툕; 툕; 툕; 툕; 툕; ) HANGUL SYLLABLE TYONJ D216;D216;1110 116D 11AD;D216;1110 116D 11AD; # (툖; 툖; 툖; 툖; 툖; ) HANGUL SYLLABLE TYONH D217;D217;1110 116D 11AE;D217;1110 116D 11AE; # (툗; 툗; 툗; 툗; 툗; ) HANGUL SYLLABLE TYOD D218;D218;1110 116D 11AF;D218;1110 116D 11AF; # (툘; 툘; 툘; 툘; 툘; ) HANGUL SYLLABLE TYOL D219;D219;1110 116D 11B0;D219;1110 116D 11B0; # (툙; 툙; 툙; 툙; 툙; ) HANGUL SYLLABLE TYOLG D21A;D21A;1110 116D 11B1;D21A;1110 116D 11B1; # (툚; 툚; 툚; 툚; 툚; ) HANGUL SYLLABLE TYOLM D21B;D21B;1110 116D 11B2;D21B;1110 116D 11B2; # (툛; 툛; 툛; 툛; 툛; ) HANGUL SYLLABLE TYOLB D21C;D21C;1110 116D 11B3;D21C;1110 116D 11B3; # (툜; 툜; 툜; 툜; 툜; ) HANGUL SYLLABLE TYOLS D21D;D21D;1110 116D 11B4;D21D;1110 116D 11B4; # (툝; 툝; 툝; 툝; 툝; ) HANGUL SYLLABLE TYOLT D21E;D21E;1110 116D 11B5;D21E;1110 116D 11B5; # (툞; 툞; 툞; 툞; 툞; ) HANGUL SYLLABLE TYOLP D21F;D21F;1110 116D 11B6;D21F;1110 116D 11B6; # (툟; 툟; 툟; 툟; 툟; ) HANGUL SYLLABLE TYOLH D220;D220;1110 116D 11B7;D220;1110 116D 11B7; # (툠; 툠; 툠; 툠; 툠; ) HANGUL SYLLABLE TYOM D221;D221;1110 116D 11B8;D221;1110 116D 11B8; # (툡; 툡; 툡; 툡; 툡; ) HANGUL SYLLABLE TYOB D222;D222;1110 116D 11B9;D222;1110 116D 11B9; # (툢; 툢; 툢; 툢; 툢; ) HANGUL SYLLABLE TYOBS D223;D223;1110 116D 11BA;D223;1110 116D 11BA; # (툣; 툣; 툣; 툣; 툣; ) HANGUL SYLLABLE TYOS D224;D224;1110 116D 11BB;D224;1110 116D 11BB; # (툤; 툤; 툤; 툤; 툤; ) HANGUL SYLLABLE TYOSS D225;D225;1110 116D 11BC;D225;1110 116D 11BC; # (툥; 툥; 툥; 툥; 툥; ) HANGUL SYLLABLE TYONG D226;D226;1110 116D 11BD;D226;1110 116D 11BD; # (툦; 툦; 툦; 툦; 툦; ) HANGUL SYLLABLE TYOJ D227;D227;1110 116D 11BE;D227;1110 116D 11BE; # (툧; 툧; 툧; 툧; 툧; ) HANGUL SYLLABLE TYOC D228;D228;1110 116D 11BF;D228;1110 116D 11BF; # (툨; 툨; 툨; 툨; 툨; ) HANGUL SYLLABLE TYOK D229;D229;1110 116D 11C0;D229;1110 116D 11C0; # (툩; 툩; 툩; 툩; 툩; ) HANGUL SYLLABLE TYOT D22A;D22A;1110 116D 11C1;D22A;1110 116D 11C1; # (툪; 툪; 툪; 툪; 툪; ) HANGUL SYLLABLE TYOP D22B;D22B;1110 116D 11C2;D22B;1110 116D 11C2; # (툫; 툫; 툫; 툫; 툫; ) HANGUL SYLLABLE TYOH D22C;D22C;1110 116E;D22C;1110 116E; # (투; 투; 투; 투; 투; ) HANGUL SYLLABLE TU D22D;D22D;1110 116E 11A8;D22D;1110 116E 11A8; # (툭; 툭; 툭; 툭; 툭; ) HANGUL SYLLABLE TUG D22E;D22E;1110 116E 11A9;D22E;1110 116E 11A9; # (툮; 툮; 툮; 툮; 툮; ) HANGUL SYLLABLE TUGG D22F;D22F;1110 116E 11AA;D22F;1110 116E 11AA; # (툯; 툯; 툯; 툯; 툯; ) HANGUL SYLLABLE TUGS D230;D230;1110 116E 11AB;D230;1110 116E 11AB; # (툰; 툰; 툰; 툰; 툰; ) HANGUL SYLLABLE TUN D231;D231;1110 116E 11AC;D231;1110 116E 11AC; # (툱; 툱; 툱; 툱; 툱; ) HANGUL SYLLABLE TUNJ D232;D232;1110 116E 11AD;D232;1110 116E 11AD; # (툲; 툲; 툲; 툲; 툲; ) HANGUL SYLLABLE TUNH D233;D233;1110 116E 11AE;D233;1110 116E 11AE; # (툳; 툳; 툳; 툳; 툳; ) HANGUL SYLLABLE TUD D234;D234;1110 116E 11AF;D234;1110 116E 11AF; # (툴; 툴; 툴; 툴; 툴; ) HANGUL SYLLABLE TUL D235;D235;1110 116E 11B0;D235;1110 116E 11B0; # (툵; 툵; 툵; 툵; 툵; ) HANGUL SYLLABLE TULG D236;D236;1110 116E 11B1;D236;1110 116E 11B1; # (툶; 툶; 툶; 툶; 툶; ) HANGUL SYLLABLE TULM D237;D237;1110 116E 11B2;D237;1110 116E 11B2; # (툷; 툷; 툷; 툷; 툷; ) HANGUL SYLLABLE TULB D238;D238;1110 116E 11B3;D238;1110 116E 11B3; # (툸; 툸; 툸; 툸; 툸; ) HANGUL SYLLABLE TULS D239;D239;1110 116E 11B4;D239;1110 116E 11B4; # (툹; 툹; 툹; 툹; 툹; ) HANGUL SYLLABLE TULT D23A;D23A;1110 116E 11B5;D23A;1110 116E 11B5; # (툺; 툺; 툺; 툺; 툺; ) HANGUL SYLLABLE TULP D23B;D23B;1110 116E 11B6;D23B;1110 116E 11B6; # (툻; 툻; 툻; 툻; 툻; ) HANGUL SYLLABLE TULH D23C;D23C;1110 116E 11B7;D23C;1110 116E 11B7; # (툼; 툼; 툼; 툼; 툼; ) HANGUL SYLLABLE TUM D23D;D23D;1110 116E 11B8;D23D;1110 116E 11B8; # (툽; 툽; 툽; 툽; 툽; ) HANGUL SYLLABLE TUB D23E;D23E;1110 116E 11B9;D23E;1110 116E 11B9; # (툾; 툾; 툾; 툾; 툾; ) HANGUL SYLLABLE TUBS D23F;D23F;1110 116E 11BA;D23F;1110 116E 11BA; # (툿; 툿; 툿; 툿; 툿; ) HANGUL SYLLABLE TUS D240;D240;1110 116E 11BB;D240;1110 116E 11BB; # (퉀; 퉀; 퉀; 퉀; 퉀; ) HANGUL SYLLABLE TUSS D241;D241;1110 116E 11BC;D241;1110 116E 11BC; # (퉁; 퉁; 퉁; 퉁; 퉁; ) HANGUL SYLLABLE TUNG D242;D242;1110 116E 11BD;D242;1110 116E 11BD; # (퉂; 퉂; 퉂; 퉂; 퉂; ) HANGUL SYLLABLE TUJ D243;D243;1110 116E 11BE;D243;1110 116E 11BE; # (퉃; 퉃; 퉃; 퉃; 퉃; ) HANGUL SYLLABLE TUC D244;D244;1110 116E 11BF;D244;1110 116E 11BF; # (퉄; 퉄; 퉄; 퉄; 퉄; ) HANGUL SYLLABLE TUK D245;D245;1110 116E 11C0;D245;1110 116E 11C0; # (퉅; 퉅; 퉅; 퉅; 퉅; ) HANGUL SYLLABLE TUT D246;D246;1110 116E 11C1;D246;1110 116E 11C1; # (퉆; 퉆; 퉆; 퉆; 퉆; ) HANGUL SYLLABLE TUP D247;D247;1110 116E 11C2;D247;1110 116E 11C2; # (퉇; 퉇; 퉇; 퉇; 퉇; ) HANGUL SYLLABLE TUH D248;D248;1110 116F;D248;1110 116F; # (퉈; 퉈; 퉈; 퉈; 퉈; ) HANGUL SYLLABLE TWEO D249;D249;1110 116F 11A8;D249;1110 116F 11A8; # (퉉; 퉉; 퉉; 퉉; 퉉; ) HANGUL SYLLABLE TWEOG D24A;D24A;1110 116F 11A9;D24A;1110 116F 11A9; # (퉊; 퉊; 퉊; 퉊; 퉊; ) HANGUL SYLLABLE TWEOGG D24B;D24B;1110 116F 11AA;D24B;1110 116F 11AA; # (퉋; 퉋; 퉋; 퉋; 퉋; ) HANGUL SYLLABLE TWEOGS D24C;D24C;1110 116F 11AB;D24C;1110 116F 11AB; # (퉌; 퉌; 퉌; 퉌; 퉌; ) HANGUL SYLLABLE TWEON D24D;D24D;1110 116F 11AC;D24D;1110 116F 11AC; # (퉍; 퉍; 퉍; 퉍; 퉍; ) HANGUL SYLLABLE TWEONJ D24E;D24E;1110 116F 11AD;D24E;1110 116F 11AD; # (퉎; 퉎; 퉎; 퉎; 퉎; ) HANGUL SYLLABLE TWEONH D24F;D24F;1110 116F 11AE;D24F;1110 116F 11AE; # (퉏; 퉏; 퉏; 퉏; 퉏; ) HANGUL SYLLABLE TWEOD D250;D250;1110 116F 11AF;D250;1110 116F 11AF; # (퉐; 퉐; 퉐; 퉐; 퉐; ) HANGUL SYLLABLE TWEOL D251;D251;1110 116F 11B0;D251;1110 116F 11B0; # (퉑; 퉑; 퉑; 퉑; 퉑; ) HANGUL SYLLABLE TWEOLG D252;D252;1110 116F 11B1;D252;1110 116F 11B1; # (퉒; 퉒; 퉒; 퉒; 퉒; ) HANGUL SYLLABLE TWEOLM D253;D253;1110 116F 11B2;D253;1110 116F 11B2; # (퉓; 퉓; 퉓; 퉓; 퉓; ) HANGUL SYLLABLE TWEOLB D254;D254;1110 116F 11B3;D254;1110 116F 11B3; # (퉔; 퉔; 퉔; 퉔; 퉔; ) HANGUL SYLLABLE TWEOLS D255;D255;1110 116F 11B4;D255;1110 116F 11B4; # (퉕; 퉕; 퉕; 퉕; 퉕; ) HANGUL SYLLABLE TWEOLT D256;D256;1110 116F 11B5;D256;1110 116F 11B5; # (퉖; 퉖; 퉖; 퉖; 퉖; ) HANGUL SYLLABLE TWEOLP D257;D257;1110 116F 11B6;D257;1110 116F 11B6; # (퉗; 퉗; 퉗; 퉗; 퉗; ) HANGUL SYLLABLE TWEOLH D258;D258;1110 116F 11B7;D258;1110 116F 11B7; # (퉘; 퉘; 퉘; 퉘; 퉘; ) HANGUL SYLLABLE TWEOM D259;D259;1110 116F 11B8;D259;1110 116F 11B8; # (퉙; 퉙; 퉙; 퉙; 퉙; ) HANGUL SYLLABLE TWEOB D25A;D25A;1110 116F 11B9;D25A;1110 116F 11B9; # (퉚; 퉚; 퉚; 퉚; 퉚; ) HANGUL SYLLABLE TWEOBS D25B;D25B;1110 116F 11BA;D25B;1110 116F 11BA; # (퉛; 퉛; 퉛; 퉛; 퉛; ) HANGUL SYLLABLE TWEOS D25C;D25C;1110 116F 11BB;D25C;1110 116F 11BB; # (퉜; 퉜; 퉜; 퉜; 퉜; ) HANGUL SYLLABLE TWEOSS D25D;D25D;1110 116F 11BC;D25D;1110 116F 11BC; # (퉝; 퉝; 퉝; 퉝; 퉝; ) HANGUL SYLLABLE TWEONG D25E;D25E;1110 116F 11BD;D25E;1110 116F 11BD; # (퉞; 퉞; 퉞; 퉞; 퉞; ) HANGUL SYLLABLE TWEOJ D25F;D25F;1110 116F 11BE;D25F;1110 116F 11BE; # (퉟; 퉟; 퉟; 퉟; 퉟; ) HANGUL SYLLABLE TWEOC D260;D260;1110 116F 11BF;D260;1110 116F 11BF; # (퉠; 퉠; 퉠; 퉠; 퉠; ) HANGUL SYLLABLE TWEOK D261;D261;1110 116F 11C0;D261;1110 116F 11C0; # (퉡; 퉡; 퉡; 퉡; 퉡; ) HANGUL SYLLABLE TWEOT D262;D262;1110 116F 11C1;D262;1110 116F 11C1; # (퉢; 퉢; 퉢; 퉢; 퉢; ) HANGUL SYLLABLE TWEOP D263;D263;1110 116F 11C2;D263;1110 116F 11C2; # (퉣; 퉣; 퉣; 퉣; 퉣; ) HANGUL SYLLABLE TWEOH D264;D264;1110 1170;D264;1110 1170; # (퉤; 퉤; 퉤; 퉤; 퉤; ) HANGUL SYLLABLE TWE D265;D265;1110 1170 11A8;D265;1110 1170 11A8; # (퉥; 퉥; 퉥; 퉥; 퉥; ) HANGUL SYLLABLE TWEG D266;D266;1110 1170 11A9;D266;1110 1170 11A9; # (퉦; 퉦; 퉦; 퉦; 퉦; ) HANGUL SYLLABLE TWEGG D267;D267;1110 1170 11AA;D267;1110 1170 11AA; # (퉧; 퉧; 퉧; 퉧; 퉧; ) HANGUL SYLLABLE TWEGS D268;D268;1110 1170 11AB;D268;1110 1170 11AB; # (퉨; 퉨; 퉨; 퉨; 퉨; ) HANGUL SYLLABLE TWEN D269;D269;1110 1170 11AC;D269;1110 1170 11AC; # (퉩; 퉩; 퉩; 퉩; 퉩; ) HANGUL SYLLABLE TWENJ D26A;D26A;1110 1170 11AD;D26A;1110 1170 11AD; # (퉪; 퉪; 퉪; 퉪; 퉪; ) HANGUL SYLLABLE TWENH D26B;D26B;1110 1170 11AE;D26B;1110 1170 11AE; # (퉫; 퉫; 퉫; 퉫; 퉫; ) HANGUL SYLLABLE TWED D26C;D26C;1110 1170 11AF;D26C;1110 1170 11AF; # (퉬; 퉬; 퉬; 퉬; 퉬; ) HANGUL SYLLABLE TWEL D26D;D26D;1110 1170 11B0;D26D;1110 1170 11B0; # (퉭; 퉭; 퉭; 퉭; 퉭; ) HANGUL SYLLABLE TWELG D26E;D26E;1110 1170 11B1;D26E;1110 1170 11B1; # (퉮; 퉮; 퉮; 퉮; 퉮; ) HANGUL SYLLABLE TWELM D26F;D26F;1110 1170 11B2;D26F;1110 1170 11B2; # (퉯; 퉯; 퉯; 퉯; 퉯; ) HANGUL SYLLABLE TWELB D270;D270;1110 1170 11B3;D270;1110 1170 11B3; # (퉰; 퉰; 퉰; 퉰; 퉰; ) HANGUL SYLLABLE TWELS D271;D271;1110 1170 11B4;D271;1110 1170 11B4; # (퉱; 퉱; 퉱; 퉱; 퉱; ) HANGUL SYLLABLE TWELT D272;D272;1110 1170 11B5;D272;1110 1170 11B5; # (퉲; 퉲; 퉲; 퉲; 퉲; ) HANGUL SYLLABLE TWELP D273;D273;1110 1170 11B6;D273;1110 1170 11B6; # (퉳; 퉳; 퉳; 퉳; 퉳; ) HANGUL SYLLABLE TWELH D274;D274;1110 1170 11B7;D274;1110 1170 11B7; # (퉴; 퉴; 퉴; 퉴; 퉴; ) HANGUL SYLLABLE TWEM D275;D275;1110 1170 11B8;D275;1110 1170 11B8; # (퉵; 퉵; 퉵; 퉵; 퉵; ) HANGUL SYLLABLE TWEB D276;D276;1110 1170 11B9;D276;1110 1170 11B9; # (퉶; 퉶; 퉶; 퉶; 퉶; ) HANGUL SYLLABLE TWEBS D277;D277;1110 1170 11BA;D277;1110 1170 11BA; # (퉷; 퉷; 퉷; 퉷; 퉷; ) HANGUL SYLLABLE TWES D278;D278;1110 1170 11BB;D278;1110 1170 11BB; # (퉸; 퉸; 퉸; 퉸; 퉸; ) HANGUL SYLLABLE TWESS D279;D279;1110 1170 11BC;D279;1110 1170 11BC; # (퉹; 퉹; 퉹; 퉹; 퉹; ) HANGUL SYLLABLE TWENG D27A;D27A;1110 1170 11BD;D27A;1110 1170 11BD; # (퉺; 퉺; 퉺; 퉺; 퉺; ) HANGUL SYLLABLE TWEJ D27B;D27B;1110 1170 11BE;D27B;1110 1170 11BE; # (퉻; 퉻; 퉻; 퉻; 퉻; ) HANGUL SYLLABLE TWEC D27C;D27C;1110 1170 11BF;D27C;1110 1170 11BF; # (퉼; 퉼; 퉼; 퉼; 퉼; ) HANGUL SYLLABLE TWEK D27D;D27D;1110 1170 11C0;D27D;1110 1170 11C0; # (퉽; 퉽; 퉽; 퉽; 퉽; ) HANGUL SYLLABLE TWET D27E;D27E;1110 1170 11C1;D27E;1110 1170 11C1; # (퉾; 퉾; 퉾; 퉾; 퉾; ) HANGUL SYLLABLE TWEP D27F;D27F;1110 1170 11C2;D27F;1110 1170 11C2; # (퉿; 퉿; 퉿; 퉿; 퉿; ) HANGUL SYLLABLE TWEH D280;D280;1110 1171;D280;1110 1171; # (튀; 튀; 튀; 튀; 튀; ) HANGUL SYLLABLE TWI D281;D281;1110 1171 11A8;D281;1110 1171 11A8; # (튁; 튁; 튁; 튁; 튁; ) HANGUL SYLLABLE TWIG D282;D282;1110 1171 11A9;D282;1110 1171 11A9; # (튂; 튂; 튂; 튂; 튂; ) HANGUL SYLLABLE TWIGG D283;D283;1110 1171 11AA;D283;1110 1171 11AA; # (튃; 튃; 튃; 튃; 튃; ) HANGUL SYLLABLE TWIGS D284;D284;1110 1171 11AB;D284;1110 1171 11AB; # (튄; 튄; 튄; 튄; 튄; ) HANGUL SYLLABLE TWIN D285;D285;1110 1171 11AC;D285;1110 1171 11AC; # (튅; 튅; 튅; 튅; 튅; ) HANGUL SYLLABLE TWINJ D286;D286;1110 1171 11AD;D286;1110 1171 11AD; # (튆; 튆; 튆; 튆; 튆; ) HANGUL SYLLABLE TWINH D287;D287;1110 1171 11AE;D287;1110 1171 11AE; # (튇; 튇; 튇; 튇; 튇; ) HANGUL SYLLABLE TWID D288;D288;1110 1171 11AF;D288;1110 1171 11AF; # (튈; 튈; 튈; 튈; 튈; ) HANGUL SYLLABLE TWIL D289;D289;1110 1171 11B0;D289;1110 1171 11B0; # (튉; 튉; 튉; 튉; 튉; ) HANGUL SYLLABLE TWILG D28A;D28A;1110 1171 11B1;D28A;1110 1171 11B1; # (튊; 튊; 튊; 튊; 튊; ) HANGUL SYLLABLE TWILM D28B;D28B;1110 1171 11B2;D28B;1110 1171 11B2; # (튋; 튋; 튋; 튋; 튋; ) HANGUL SYLLABLE TWILB D28C;D28C;1110 1171 11B3;D28C;1110 1171 11B3; # (튌; 튌; 튌; 튌; 튌; ) HANGUL SYLLABLE TWILS D28D;D28D;1110 1171 11B4;D28D;1110 1171 11B4; # (튍; 튍; 튍; 튍; 튍; ) HANGUL SYLLABLE TWILT D28E;D28E;1110 1171 11B5;D28E;1110 1171 11B5; # (튎; 튎; 튎; 튎; 튎; ) HANGUL SYLLABLE TWILP D28F;D28F;1110 1171 11B6;D28F;1110 1171 11B6; # (튏; 튏; 튏; 튏; 튏; ) HANGUL SYLLABLE TWILH D290;D290;1110 1171 11B7;D290;1110 1171 11B7; # (튐; 튐; 튐; 튐; 튐; ) HANGUL SYLLABLE TWIM D291;D291;1110 1171 11B8;D291;1110 1171 11B8; # (튑; 튑; 튑; 튑; 튑; ) HANGUL SYLLABLE TWIB D292;D292;1110 1171 11B9;D292;1110 1171 11B9; # (튒; 튒; 튒; 튒; 튒; ) HANGUL SYLLABLE TWIBS D293;D293;1110 1171 11BA;D293;1110 1171 11BA; # (튓; 튓; 튓; 튓; 튓; ) HANGUL SYLLABLE TWIS D294;D294;1110 1171 11BB;D294;1110 1171 11BB; # (튔; 튔; 튔; 튔; 튔; ) HANGUL SYLLABLE TWISS D295;D295;1110 1171 11BC;D295;1110 1171 11BC; # (튕; 튕; 튕; 튕; 튕; ) HANGUL SYLLABLE TWING D296;D296;1110 1171 11BD;D296;1110 1171 11BD; # (튖; 튖; 튖; 튖; 튖; ) HANGUL SYLLABLE TWIJ D297;D297;1110 1171 11BE;D297;1110 1171 11BE; # (튗; 튗; 튗; 튗; 튗; ) HANGUL SYLLABLE TWIC D298;D298;1110 1171 11BF;D298;1110 1171 11BF; # (튘; 튘; 튘; 튘; 튘; ) HANGUL SYLLABLE TWIK D299;D299;1110 1171 11C0;D299;1110 1171 11C0; # (튙; 튙; 튙; 튙; 튙; ) HANGUL SYLLABLE TWIT D29A;D29A;1110 1171 11C1;D29A;1110 1171 11C1; # (튚; 튚; 튚; 튚; 튚; ) HANGUL SYLLABLE TWIP D29B;D29B;1110 1171 11C2;D29B;1110 1171 11C2; # (튛; 튛; 튛; 튛; 튛; ) HANGUL SYLLABLE TWIH D29C;D29C;1110 1172;D29C;1110 1172; # (튜; 튜; 튜; 튜; 튜; ) HANGUL SYLLABLE TYU D29D;D29D;1110 1172 11A8;D29D;1110 1172 11A8; # (튝; 튝; 튝; 튝; 튝; ) HANGUL SYLLABLE TYUG D29E;D29E;1110 1172 11A9;D29E;1110 1172 11A9; # (튞; 튞; 튞; 튞; 튞; ) HANGUL SYLLABLE TYUGG D29F;D29F;1110 1172 11AA;D29F;1110 1172 11AA; # (튟; 튟; 튟; 튟; 튟; ) HANGUL SYLLABLE TYUGS D2A0;D2A0;1110 1172 11AB;D2A0;1110 1172 11AB; # (튠; 튠; 튠; 튠; 튠; ) HANGUL SYLLABLE TYUN D2A1;D2A1;1110 1172 11AC;D2A1;1110 1172 11AC; # (튡; 튡; 튡; 튡; 튡; ) HANGUL SYLLABLE TYUNJ D2A2;D2A2;1110 1172 11AD;D2A2;1110 1172 11AD; # (튢; 튢; 튢; 튢; 튢; ) HANGUL SYLLABLE TYUNH D2A3;D2A3;1110 1172 11AE;D2A3;1110 1172 11AE; # (튣; 튣; 튣; 튣; 튣; ) HANGUL SYLLABLE TYUD D2A4;D2A4;1110 1172 11AF;D2A4;1110 1172 11AF; # (튤; 튤; 튤; 튤; 튤; ) HANGUL SYLLABLE TYUL D2A5;D2A5;1110 1172 11B0;D2A5;1110 1172 11B0; # (튥; 튥; 튥; 튥; 튥; ) HANGUL SYLLABLE TYULG D2A6;D2A6;1110 1172 11B1;D2A6;1110 1172 11B1; # (튦; 튦; 튦; 튦; 튦; ) HANGUL SYLLABLE TYULM D2A7;D2A7;1110 1172 11B2;D2A7;1110 1172 11B2; # (튧; 튧; 튧; 튧; 튧; ) HANGUL SYLLABLE TYULB D2A8;D2A8;1110 1172 11B3;D2A8;1110 1172 11B3; # (튨; 튨; 튨; 튨; 튨; ) HANGUL SYLLABLE TYULS D2A9;D2A9;1110 1172 11B4;D2A9;1110 1172 11B4; # (튩; 튩; 튩; 튩; 튩; ) HANGUL SYLLABLE TYULT D2AA;D2AA;1110 1172 11B5;D2AA;1110 1172 11B5; # (튪; 튪; 튪; 튪; 튪; ) HANGUL SYLLABLE TYULP D2AB;D2AB;1110 1172 11B6;D2AB;1110 1172 11B6; # (튫; 튫; 튫; 튫; 튫; ) HANGUL SYLLABLE TYULH D2AC;D2AC;1110 1172 11B7;D2AC;1110 1172 11B7; # (튬; 튬; 튬; 튬; 튬; ) HANGUL SYLLABLE TYUM D2AD;D2AD;1110 1172 11B8;D2AD;1110 1172 11B8; # (튭; 튭; 튭; 튭; 튭; ) HANGUL SYLLABLE TYUB D2AE;D2AE;1110 1172 11B9;D2AE;1110 1172 11B9; # (튮; 튮; 튮; 튮; 튮; ) HANGUL SYLLABLE TYUBS D2AF;D2AF;1110 1172 11BA;D2AF;1110 1172 11BA; # (튯; 튯; 튯; 튯; 튯; ) HANGUL SYLLABLE TYUS D2B0;D2B0;1110 1172 11BB;D2B0;1110 1172 11BB; # (튰; 튰; 튰; 튰; 튰; ) HANGUL SYLLABLE TYUSS D2B1;D2B1;1110 1172 11BC;D2B1;1110 1172 11BC; # (튱; 튱; 튱; 튱; 튱; ) HANGUL SYLLABLE TYUNG D2B2;D2B2;1110 1172 11BD;D2B2;1110 1172 11BD; # (튲; 튲; 튲; 튲; 튲; ) HANGUL SYLLABLE TYUJ D2B3;D2B3;1110 1172 11BE;D2B3;1110 1172 11BE; # (튳; 튳; 튳; 튳; 튳; ) HANGUL SYLLABLE TYUC D2B4;D2B4;1110 1172 11BF;D2B4;1110 1172 11BF; # (튴; 튴; 튴; 튴; 튴; ) HANGUL SYLLABLE TYUK D2B5;D2B5;1110 1172 11C0;D2B5;1110 1172 11C0; # (튵; 튵; 튵; 튵; 튵; ) HANGUL SYLLABLE TYUT D2B6;D2B6;1110 1172 11C1;D2B6;1110 1172 11C1; # (튶; 튶; 튶; 튶; 튶; ) HANGUL SYLLABLE TYUP D2B7;D2B7;1110 1172 11C2;D2B7;1110 1172 11C2; # (튷; 튷; 튷; 튷; 튷; ) HANGUL SYLLABLE TYUH D2B8;D2B8;1110 1173;D2B8;1110 1173; # (트; 트; 트; 트; 트; ) HANGUL SYLLABLE TEU D2B9;D2B9;1110 1173 11A8;D2B9;1110 1173 11A8; # (특; 특; 특; 특; 특; ) HANGUL SYLLABLE TEUG D2BA;D2BA;1110 1173 11A9;D2BA;1110 1173 11A9; # (튺; 튺; 튺; 튺; 튺; ) HANGUL SYLLABLE TEUGG D2BB;D2BB;1110 1173 11AA;D2BB;1110 1173 11AA; # (튻; 튻; 튻; 튻; 튻; ) HANGUL SYLLABLE TEUGS D2BC;D2BC;1110 1173 11AB;D2BC;1110 1173 11AB; # (튼; 튼; 튼; 튼; 튼; ) HANGUL SYLLABLE TEUN D2BD;D2BD;1110 1173 11AC;D2BD;1110 1173 11AC; # (튽; 튽; 튽; 튽; 튽; ) HANGUL SYLLABLE TEUNJ D2BE;D2BE;1110 1173 11AD;D2BE;1110 1173 11AD; # (튾; 튾; 튾; 튾; 튾; ) HANGUL SYLLABLE TEUNH D2BF;D2BF;1110 1173 11AE;D2BF;1110 1173 11AE; # (튿; 튿; 튿; 튿; 튿; ) HANGUL SYLLABLE TEUD D2C0;D2C0;1110 1173 11AF;D2C0;1110 1173 11AF; # (틀; 틀; 틀; 틀; 틀; ) HANGUL SYLLABLE TEUL D2C1;D2C1;1110 1173 11B0;D2C1;1110 1173 11B0; # (틁; 틁; 틁; 틁; 틁; ) HANGUL SYLLABLE TEULG D2C2;D2C2;1110 1173 11B1;D2C2;1110 1173 11B1; # (틂; 틂; 틂; 틂; 틂; ) HANGUL SYLLABLE TEULM D2C3;D2C3;1110 1173 11B2;D2C3;1110 1173 11B2; # (틃; 틃; 틃; 틃; 틃; ) HANGUL SYLLABLE TEULB D2C4;D2C4;1110 1173 11B3;D2C4;1110 1173 11B3; # (틄; 틄; 틄; 틄; 틄; ) HANGUL SYLLABLE TEULS D2C5;D2C5;1110 1173 11B4;D2C5;1110 1173 11B4; # (틅; 틅; 틅; 틅; 틅; ) HANGUL SYLLABLE TEULT D2C6;D2C6;1110 1173 11B5;D2C6;1110 1173 11B5; # (틆; 틆; 틆; 틆; 틆; ) HANGUL SYLLABLE TEULP D2C7;D2C7;1110 1173 11B6;D2C7;1110 1173 11B6; # (틇; 틇; 틇; 틇; 틇; ) HANGUL SYLLABLE TEULH D2C8;D2C8;1110 1173 11B7;D2C8;1110 1173 11B7; # (틈; 틈; 틈; 틈; 틈; ) HANGUL SYLLABLE TEUM D2C9;D2C9;1110 1173 11B8;D2C9;1110 1173 11B8; # (틉; 틉; 틉; 틉; 틉; ) HANGUL SYLLABLE TEUB D2CA;D2CA;1110 1173 11B9;D2CA;1110 1173 11B9; # (틊; 틊; 틊; 틊; 틊; ) HANGUL SYLLABLE TEUBS D2CB;D2CB;1110 1173 11BA;D2CB;1110 1173 11BA; # (틋; 틋; 틋; 틋; 틋; ) HANGUL SYLLABLE TEUS D2CC;D2CC;1110 1173 11BB;D2CC;1110 1173 11BB; # (틌; 틌; 틌; 틌; 틌; ) HANGUL SYLLABLE TEUSS D2CD;D2CD;1110 1173 11BC;D2CD;1110 1173 11BC; # (틍; 틍; 틍; 틍; 틍; ) HANGUL SYLLABLE TEUNG D2CE;D2CE;1110 1173 11BD;D2CE;1110 1173 11BD; # (틎; 틎; 틎; 틎; 틎; ) HANGUL SYLLABLE TEUJ D2CF;D2CF;1110 1173 11BE;D2CF;1110 1173 11BE; # (틏; 틏; 틏; 틏; 틏; ) HANGUL SYLLABLE TEUC D2D0;D2D0;1110 1173 11BF;D2D0;1110 1173 11BF; # (틐; 틐; 틐; 틐; 틐; ) HANGUL SYLLABLE TEUK D2D1;D2D1;1110 1173 11C0;D2D1;1110 1173 11C0; # (틑; 틑; 틑; 틑; 틑; ) HANGUL SYLLABLE TEUT D2D2;D2D2;1110 1173 11C1;D2D2;1110 1173 11C1; # (틒; 틒; 틒; 틒; 틒; ) HANGUL SYLLABLE TEUP D2D3;D2D3;1110 1173 11C2;D2D3;1110 1173 11C2; # (틓; 틓; 틓; 틓; 틓; ) HANGUL SYLLABLE TEUH D2D4;D2D4;1110 1174;D2D4;1110 1174; # (틔; 틔; 틔; 틔; 틔; ) HANGUL SYLLABLE TYI D2D5;D2D5;1110 1174 11A8;D2D5;1110 1174 11A8; # (틕; 틕; 틕; 틕; 틕; ) HANGUL SYLLABLE TYIG D2D6;D2D6;1110 1174 11A9;D2D6;1110 1174 11A9; # (틖; 틖; 틖; 틖; 틖; ) HANGUL SYLLABLE TYIGG D2D7;D2D7;1110 1174 11AA;D2D7;1110 1174 11AA; # (틗; 틗; 틗; 틗; 틗; ) HANGUL SYLLABLE TYIGS D2D8;D2D8;1110 1174 11AB;D2D8;1110 1174 11AB; # (틘; 틘; 틘; 틘; 틘; ) HANGUL SYLLABLE TYIN D2D9;D2D9;1110 1174 11AC;D2D9;1110 1174 11AC; # (틙; 틙; 틙; 틙; 틙; ) HANGUL SYLLABLE TYINJ D2DA;D2DA;1110 1174 11AD;D2DA;1110 1174 11AD; # (틚; 틚; 틚; 틚; 틚; ) HANGUL SYLLABLE TYINH D2DB;D2DB;1110 1174 11AE;D2DB;1110 1174 11AE; # (틛; 틛; 틛; 틛; 틛; ) HANGUL SYLLABLE TYID D2DC;D2DC;1110 1174 11AF;D2DC;1110 1174 11AF; # (틜; 틜; 틜; 틜; 틜; ) HANGUL SYLLABLE TYIL D2DD;D2DD;1110 1174 11B0;D2DD;1110 1174 11B0; # (틝; 틝; 틝; 틝; 틝; ) HANGUL SYLLABLE TYILG D2DE;D2DE;1110 1174 11B1;D2DE;1110 1174 11B1; # (틞; 틞; 틞; 틞; 틞; ) HANGUL SYLLABLE TYILM D2DF;D2DF;1110 1174 11B2;D2DF;1110 1174 11B2; # (틟; 틟; 틟; 틟; 틟; ) HANGUL SYLLABLE TYILB D2E0;D2E0;1110 1174 11B3;D2E0;1110 1174 11B3; # (틠; 틠; 틠; 틠; 틠; ) HANGUL SYLLABLE TYILS D2E1;D2E1;1110 1174 11B4;D2E1;1110 1174 11B4; # (틡; 틡; 틡; 틡; 틡; ) HANGUL SYLLABLE TYILT D2E2;D2E2;1110 1174 11B5;D2E2;1110 1174 11B5; # (틢; 틢; 틢; 틢; 틢; ) HANGUL SYLLABLE TYILP D2E3;D2E3;1110 1174 11B6;D2E3;1110 1174 11B6; # (틣; 틣; 틣; 틣; 틣; ) HANGUL SYLLABLE TYILH D2E4;D2E4;1110 1174 11B7;D2E4;1110 1174 11B7; # (틤; 틤; 틤; 틤; 틤; ) HANGUL SYLLABLE TYIM D2E5;D2E5;1110 1174 11B8;D2E5;1110 1174 11B8; # (틥; 틥; 틥; 틥; 틥; ) HANGUL SYLLABLE TYIB D2E6;D2E6;1110 1174 11B9;D2E6;1110 1174 11B9; # (틦; 틦; 틦; 틦; 틦; ) HANGUL SYLLABLE TYIBS D2E7;D2E7;1110 1174 11BA;D2E7;1110 1174 11BA; # (틧; 틧; 틧; 틧; 틧; ) HANGUL SYLLABLE TYIS D2E8;D2E8;1110 1174 11BB;D2E8;1110 1174 11BB; # (틨; 틨; 틨; 틨; 틨; ) HANGUL SYLLABLE TYISS D2E9;D2E9;1110 1174 11BC;D2E9;1110 1174 11BC; # (틩; 틩; 틩; 틩; 틩; ) HANGUL SYLLABLE TYING D2EA;D2EA;1110 1174 11BD;D2EA;1110 1174 11BD; # (틪; 틪; 틪; 틪; 틪; ) HANGUL SYLLABLE TYIJ D2EB;D2EB;1110 1174 11BE;D2EB;1110 1174 11BE; # (틫; 틫; 틫; 틫; 틫; ) HANGUL SYLLABLE TYIC D2EC;D2EC;1110 1174 11BF;D2EC;1110 1174 11BF; # (틬; 틬; 틬; 틬; 틬; ) HANGUL SYLLABLE TYIK D2ED;D2ED;1110 1174 11C0;D2ED;1110 1174 11C0; # (틭; 틭; 틭; 틭; 틭; ) HANGUL SYLLABLE TYIT D2EE;D2EE;1110 1174 11C1;D2EE;1110 1174 11C1; # (틮; 틮; 틮; 틮; 틮; ) HANGUL SYLLABLE TYIP D2EF;D2EF;1110 1174 11C2;D2EF;1110 1174 11C2; # (틯; 틯; 틯; 틯; 틯; ) HANGUL SYLLABLE TYIH D2F0;D2F0;1110 1175;D2F0;1110 1175; # (티; 티; 티; 티; 티; ) HANGUL SYLLABLE TI D2F1;D2F1;1110 1175 11A8;D2F1;1110 1175 11A8; # (틱; 틱; 틱; 틱; 틱; ) HANGUL SYLLABLE TIG D2F2;D2F2;1110 1175 11A9;D2F2;1110 1175 11A9; # (틲; 틲; 틲; 틲; 틲; ) HANGUL SYLLABLE TIGG D2F3;D2F3;1110 1175 11AA;D2F3;1110 1175 11AA; # (틳; 틳; 틳; 틳; 틳; ) HANGUL SYLLABLE TIGS D2F4;D2F4;1110 1175 11AB;D2F4;1110 1175 11AB; # (틴; 틴; 틴; 틴; 틴; ) HANGUL SYLLABLE TIN D2F5;D2F5;1110 1175 11AC;D2F5;1110 1175 11AC; # (틵; 틵; 틵; 틵; 틵; ) HANGUL SYLLABLE TINJ D2F6;D2F6;1110 1175 11AD;D2F6;1110 1175 11AD; # (틶; 틶; 틶; 틶; 틶; ) HANGUL SYLLABLE TINH D2F7;D2F7;1110 1175 11AE;D2F7;1110 1175 11AE; # (틷; 틷; 틷; 틷; 틷; ) HANGUL SYLLABLE TID D2F8;D2F8;1110 1175 11AF;D2F8;1110 1175 11AF; # (틸; 틸; 틸; 틸; 틸; ) HANGUL SYLLABLE TIL D2F9;D2F9;1110 1175 11B0;D2F9;1110 1175 11B0; # (틹; 틹; 틹; 틹; 틹; ) HANGUL SYLLABLE TILG D2FA;D2FA;1110 1175 11B1;D2FA;1110 1175 11B1; # (틺; 틺; 틺; 틺; 틺; ) HANGUL SYLLABLE TILM D2FB;D2FB;1110 1175 11B2;D2FB;1110 1175 11B2; # (틻; 틻; 틻; 틻; 틻; ) HANGUL SYLLABLE TILB D2FC;D2FC;1110 1175 11B3;D2FC;1110 1175 11B3; # (틼; 틼; 틼; 틼; 틼; ) HANGUL SYLLABLE TILS D2FD;D2FD;1110 1175 11B4;D2FD;1110 1175 11B4; # (틽; 틽; 틽; 틽; 틽; ) HANGUL SYLLABLE TILT D2FE;D2FE;1110 1175 11B5;D2FE;1110 1175 11B5; # (틾; 틾; 틾; 틾; 틾; ) HANGUL SYLLABLE TILP D2FF;D2FF;1110 1175 11B6;D2FF;1110 1175 11B6; # (틿; 틿; 틿; 틿; 틿; ) HANGUL SYLLABLE TILH D300;D300;1110 1175 11B7;D300;1110 1175 11B7; # (팀; 팀; 팀; 팀; 팀; ) HANGUL SYLLABLE TIM D301;D301;1110 1175 11B8;D301;1110 1175 11B8; # (팁; 팁; 팁; 팁; 팁; ) HANGUL SYLLABLE TIB D302;D302;1110 1175 11B9;D302;1110 1175 11B9; # (팂; 팂; 팂; 팂; 팂; ) HANGUL SYLLABLE TIBS D303;D303;1110 1175 11BA;D303;1110 1175 11BA; # (팃; 팃; 팃; 팃; 팃; ) HANGUL SYLLABLE TIS D304;D304;1110 1175 11BB;D304;1110 1175 11BB; # (팄; 팄; 팄; 팄; 팄; ) HANGUL SYLLABLE TISS D305;D305;1110 1175 11BC;D305;1110 1175 11BC; # (팅; 팅; 팅; 팅; 팅; ) HANGUL SYLLABLE TING D306;D306;1110 1175 11BD;D306;1110 1175 11BD; # (팆; 팆; 팆; 팆; 팆; ) HANGUL SYLLABLE TIJ D307;D307;1110 1175 11BE;D307;1110 1175 11BE; # (팇; 팇; 팇; 팇; 팇; ) HANGUL SYLLABLE TIC D308;D308;1110 1175 11BF;D308;1110 1175 11BF; # (팈; 팈; 팈; 팈; 팈; ) HANGUL SYLLABLE TIK D309;D309;1110 1175 11C0;D309;1110 1175 11C0; # (팉; 팉; 팉; 팉; 팉; ) HANGUL SYLLABLE TIT D30A;D30A;1110 1175 11C1;D30A;1110 1175 11C1; # (팊; 팊; 팊; 팊; 팊; ) HANGUL SYLLABLE TIP D30B;D30B;1110 1175 11C2;D30B;1110 1175 11C2; # (팋; 팋; 팋; 팋; 팋; ) HANGUL SYLLABLE TIH D30C;D30C;1111 1161;D30C;1111 1161; # (파; 파; 파; 파; 파; ) HANGUL SYLLABLE PA D30D;D30D;1111 1161 11A8;D30D;1111 1161 11A8; # (팍; 팍; 팍; 팍; 팍; ) HANGUL SYLLABLE PAG D30E;D30E;1111 1161 11A9;D30E;1111 1161 11A9; # (팎; 팎; 팎; 팎; 팎; ) HANGUL SYLLABLE PAGG D30F;D30F;1111 1161 11AA;D30F;1111 1161 11AA; # (팏; 팏; 팏; 팏; 팏; ) HANGUL SYLLABLE PAGS D310;D310;1111 1161 11AB;D310;1111 1161 11AB; # (판; 판; 판; 판; 판; ) HANGUL SYLLABLE PAN D311;D311;1111 1161 11AC;D311;1111 1161 11AC; # (팑; 팑; 팑; 팑; 팑; ) HANGUL SYLLABLE PANJ D312;D312;1111 1161 11AD;D312;1111 1161 11AD; # (팒; 팒; 팒; 팒; 팒; ) HANGUL SYLLABLE PANH D313;D313;1111 1161 11AE;D313;1111 1161 11AE; # (팓; 팓; 팓; 팓; 팓; ) HANGUL SYLLABLE PAD D314;D314;1111 1161 11AF;D314;1111 1161 11AF; # (팔; 팔; 팔; 팔; 팔; ) HANGUL SYLLABLE PAL D315;D315;1111 1161 11B0;D315;1111 1161 11B0; # (팕; 팕; 팕; 팕; 팕; ) HANGUL SYLLABLE PALG D316;D316;1111 1161 11B1;D316;1111 1161 11B1; # (팖; 팖; 팖; 팖; 팖; ) HANGUL SYLLABLE PALM D317;D317;1111 1161 11B2;D317;1111 1161 11B2; # (팗; 팗; 팗; 팗; 팗; ) HANGUL SYLLABLE PALB D318;D318;1111 1161 11B3;D318;1111 1161 11B3; # (팘; 팘; 팘; 팘; 팘; ) HANGUL SYLLABLE PALS D319;D319;1111 1161 11B4;D319;1111 1161 11B4; # (팙; 팙; 팙; 팙; 팙; ) HANGUL SYLLABLE PALT D31A;D31A;1111 1161 11B5;D31A;1111 1161 11B5; # (팚; 팚; 팚; 팚; 팚; ) HANGUL SYLLABLE PALP D31B;D31B;1111 1161 11B6;D31B;1111 1161 11B6; # (팛; 팛; 팛; 팛; 팛; ) HANGUL SYLLABLE PALH D31C;D31C;1111 1161 11B7;D31C;1111 1161 11B7; # (팜; 팜; 팜; 팜; 팜; ) HANGUL SYLLABLE PAM D31D;D31D;1111 1161 11B8;D31D;1111 1161 11B8; # (팝; 팝; 팝; 팝; 팝; ) HANGUL SYLLABLE PAB D31E;D31E;1111 1161 11B9;D31E;1111 1161 11B9; # (팞; 팞; 팞; 팞; 팞; ) HANGUL SYLLABLE PABS D31F;D31F;1111 1161 11BA;D31F;1111 1161 11BA; # (팟; 팟; 팟; 팟; 팟; ) HANGUL SYLLABLE PAS D320;D320;1111 1161 11BB;D320;1111 1161 11BB; # (팠; 팠; 팠; 팠; 팠; ) HANGUL SYLLABLE PASS D321;D321;1111 1161 11BC;D321;1111 1161 11BC; # (팡; 팡; 팡; 팡; 팡; ) HANGUL SYLLABLE PANG D322;D322;1111 1161 11BD;D322;1111 1161 11BD; # (팢; 팢; 팢; 팢; 팢; ) HANGUL SYLLABLE PAJ D323;D323;1111 1161 11BE;D323;1111 1161 11BE; # (팣; 팣; 팣; 팣; 팣; ) HANGUL SYLLABLE PAC D324;D324;1111 1161 11BF;D324;1111 1161 11BF; # (팤; 팤; 팤; 팤; 팤; ) HANGUL SYLLABLE PAK D325;D325;1111 1161 11C0;D325;1111 1161 11C0; # (팥; 팥; 팥; 팥; 팥; ) HANGUL SYLLABLE PAT D326;D326;1111 1161 11C1;D326;1111 1161 11C1; # (팦; 팦; 팦; 팦; 팦; ) HANGUL SYLLABLE PAP D327;D327;1111 1161 11C2;D327;1111 1161 11C2; # (팧; 팧; 팧; 팧; 팧; ) HANGUL SYLLABLE PAH D328;D328;1111 1162;D328;1111 1162; # (패; 패; 패; 패; 패; ) HANGUL SYLLABLE PAE D329;D329;1111 1162 11A8;D329;1111 1162 11A8; # (팩; 팩; 팩; 팩; 팩; ) HANGUL SYLLABLE PAEG D32A;D32A;1111 1162 11A9;D32A;1111 1162 11A9; # (팪; 팪; 팪; 팪; 팪; ) HANGUL SYLLABLE PAEGG D32B;D32B;1111 1162 11AA;D32B;1111 1162 11AA; # (팫; 팫; 팫; 팫; 팫; ) HANGUL SYLLABLE PAEGS D32C;D32C;1111 1162 11AB;D32C;1111 1162 11AB; # (팬; 팬; 팬; 팬; 팬; ) HANGUL SYLLABLE PAEN D32D;D32D;1111 1162 11AC;D32D;1111 1162 11AC; # (팭; 팭; 팭; 팭; 팭; ) HANGUL SYLLABLE PAENJ D32E;D32E;1111 1162 11AD;D32E;1111 1162 11AD; # (팮; 팮; 팮; 팮; 팮; ) HANGUL SYLLABLE PAENH D32F;D32F;1111 1162 11AE;D32F;1111 1162 11AE; # (팯; 팯; 팯; 팯; 팯; ) HANGUL SYLLABLE PAED D330;D330;1111 1162 11AF;D330;1111 1162 11AF; # (팰; 팰; 팰; 팰; 팰; ) HANGUL SYLLABLE PAEL D331;D331;1111 1162 11B0;D331;1111 1162 11B0; # (팱; 팱; 팱; 팱; 팱; ) HANGUL SYLLABLE PAELG D332;D332;1111 1162 11B1;D332;1111 1162 11B1; # (팲; 팲; 팲; 팲; 팲; ) HANGUL SYLLABLE PAELM D333;D333;1111 1162 11B2;D333;1111 1162 11B2; # (팳; 팳; 팳; 팳; 팳; ) HANGUL SYLLABLE PAELB D334;D334;1111 1162 11B3;D334;1111 1162 11B3; # (팴; 팴; 팴; 팴; 팴; ) HANGUL SYLLABLE PAELS D335;D335;1111 1162 11B4;D335;1111 1162 11B4; # (팵; 팵; 팵; 팵; 팵; ) HANGUL SYLLABLE PAELT D336;D336;1111 1162 11B5;D336;1111 1162 11B5; # (팶; 팶; 팶; 팶; 팶; ) HANGUL SYLLABLE PAELP D337;D337;1111 1162 11B6;D337;1111 1162 11B6; # (팷; 팷; 팷; 팷; 팷; ) HANGUL SYLLABLE PAELH D338;D338;1111 1162 11B7;D338;1111 1162 11B7; # (팸; 팸; 팸; 팸; 팸; ) HANGUL SYLLABLE PAEM D339;D339;1111 1162 11B8;D339;1111 1162 11B8; # (팹; 팹; 팹; 팹; 팹; ) HANGUL SYLLABLE PAEB D33A;D33A;1111 1162 11B9;D33A;1111 1162 11B9; # (팺; 팺; 팺; 팺; 팺; ) HANGUL SYLLABLE PAEBS D33B;D33B;1111 1162 11BA;D33B;1111 1162 11BA; # (팻; 팻; 팻; 팻; 팻; ) HANGUL SYLLABLE PAES D33C;D33C;1111 1162 11BB;D33C;1111 1162 11BB; # (팼; 팼; 팼; 팼; 팼; ) HANGUL SYLLABLE PAESS D33D;D33D;1111 1162 11BC;D33D;1111 1162 11BC; # (팽; 팽; 팽; 팽; 팽; ) HANGUL SYLLABLE PAENG D33E;D33E;1111 1162 11BD;D33E;1111 1162 11BD; # (팾; 팾; 팾; 팾; 팾; ) HANGUL SYLLABLE PAEJ D33F;D33F;1111 1162 11BE;D33F;1111 1162 11BE; # (팿; 팿; 팿; 팿; 팿; ) HANGUL SYLLABLE PAEC D340;D340;1111 1162 11BF;D340;1111 1162 11BF; # (퍀; 퍀; 퍀; 퍀; 퍀; ) HANGUL SYLLABLE PAEK D341;D341;1111 1162 11C0;D341;1111 1162 11C0; # (퍁; 퍁; 퍁; 퍁; 퍁; ) HANGUL SYLLABLE PAET D342;D342;1111 1162 11C1;D342;1111 1162 11C1; # (퍂; 퍂; 퍂; 퍂; 퍂; ) HANGUL SYLLABLE PAEP D343;D343;1111 1162 11C2;D343;1111 1162 11C2; # (퍃; 퍃; 퍃; 퍃; 퍃; ) HANGUL SYLLABLE PAEH D344;D344;1111 1163;D344;1111 1163; # (퍄; 퍄; 퍄; 퍄; 퍄; ) HANGUL SYLLABLE PYA D345;D345;1111 1163 11A8;D345;1111 1163 11A8; # (퍅; 퍅; 퍅; 퍅; 퍅; ) HANGUL SYLLABLE PYAG D346;D346;1111 1163 11A9;D346;1111 1163 11A9; # (퍆; 퍆; 퍆; 퍆; 퍆; ) HANGUL SYLLABLE PYAGG D347;D347;1111 1163 11AA;D347;1111 1163 11AA; # (퍇; 퍇; 퍇; 퍇; 퍇; ) HANGUL SYLLABLE PYAGS D348;D348;1111 1163 11AB;D348;1111 1163 11AB; # (퍈; 퍈; 퍈; 퍈; 퍈; ) HANGUL SYLLABLE PYAN D349;D349;1111 1163 11AC;D349;1111 1163 11AC; # (퍉; 퍉; 퍉; 퍉; 퍉; ) HANGUL SYLLABLE PYANJ D34A;D34A;1111 1163 11AD;D34A;1111 1163 11AD; # (퍊; 퍊; 퍊; 퍊; 퍊; ) HANGUL SYLLABLE PYANH D34B;D34B;1111 1163 11AE;D34B;1111 1163 11AE; # (퍋; 퍋; 퍋; 퍋; 퍋; ) HANGUL SYLLABLE PYAD D34C;D34C;1111 1163 11AF;D34C;1111 1163 11AF; # (퍌; 퍌; 퍌; 퍌; 퍌; ) HANGUL SYLLABLE PYAL D34D;D34D;1111 1163 11B0;D34D;1111 1163 11B0; # (퍍; 퍍; 퍍; 퍍; 퍍; ) HANGUL SYLLABLE PYALG D34E;D34E;1111 1163 11B1;D34E;1111 1163 11B1; # (퍎; 퍎; 퍎; 퍎; 퍎; ) HANGUL SYLLABLE PYALM D34F;D34F;1111 1163 11B2;D34F;1111 1163 11B2; # (퍏; 퍏; 퍏; 퍏; 퍏; ) HANGUL SYLLABLE PYALB D350;D350;1111 1163 11B3;D350;1111 1163 11B3; # (퍐; 퍐; 퍐; 퍐; 퍐; ) HANGUL SYLLABLE PYALS D351;D351;1111 1163 11B4;D351;1111 1163 11B4; # (퍑; 퍑; 퍑; 퍑; 퍑; ) HANGUL SYLLABLE PYALT D352;D352;1111 1163 11B5;D352;1111 1163 11B5; # (퍒; 퍒; 퍒; 퍒; 퍒; ) HANGUL SYLLABLE PYALP D353;D353;1111 1163 11B6;D353;1111 1163 11B6; # (퍓; 퍓; 퍓; 퍓; 퍓; ) HANGUL SYLLABLE PYALH D354;D354;1111 1163 11B7;D354;1111 1163 11B7; # (퍔; 퍔; 퍔; 퍔; 퍔; ) HANGUL SYLLABLE PYAM D355;D355;1111 1163 11B8;D355;1111 1163 11B8; # (퍕; 퍕; 퍕; 퍕; 퍕; ) HANGUL SYLLABLE PYAB D356;D356;1111 1163 11B9;D356;1111 1163 11B9; # (퍖; 퍖; 퍖; 퍖; 퍖; ) HANGUL SYLLABLE PYABS D357;D357;1111 1163 11BA;D357;1111 1163 11BA; # (퍗; 퍗; 퍗; 퍗; 퍗; ) HANGUL SYLLABLE PYAS D358;D358;1111 1163 11BB;D358;1111 1163 11BB; # (퍘; 퍘; 퍘; 퍘; 퍘; ) HANGUL SYLLABLE PYASS D359;D359;1111 1163 11BC;D359;1111 1163 11BC; # (퍙; 퍙; 퍙; 퍙; 퍙; ) HANGUL SYLLABLE PYANG D35A;D35A;1111 1163 11BD;D35A;1111 1163 11BD; # (퍚; 퍚; 퍚; 퍚; 퍚; ) HANGUL SYLLABLE PYAJ D35B;D35B;1111 1163 11BE;D35B;1111 1163 11BE; # (퍛; 퍛; 퍛; 퍛; 퍛; ) HANGUL SYLLABLE PYAC D35C;D35C;1111 1163 11BF;D35C;1111 1163 11BF; # (퍜; 퍜; 퍜; 퍜; 퍜; ) HANGUL SYLLABLE PYAK D35D;D35D;1111 1163 11C0;D35D;1111 1163 11C0; # (퍝; 퍝; 퍝; 퍝; 퍝; ) HANGUL SYLLABLE PYAT D35E;D35E;1111 1163 11C1;D35E;1111 1163 11C1; # (퍞; 퍞; 퍞; 퍞; 퍞; ) HANGUL SYLLABLE PYAP D35F;D35F;1111 1163 11C2;D35F;1111 1163 11C2; # (퍟; 퍟; 퍟; 퍟; 퍟; ) HANGUL SYLLABLE PYAH D360;D360;1111 1164;D360;1111 1164; # (퍠; 퍠; 퍠; 퍠; 퍠; ) HANGUL SYLLABLE PYAE D361;D361;1111 1164 11A8;D361;1111 1164 11A8; # (퍡; 퍡; 퍡; 퍡; 퍡; ) HANGUL SYLLABLE PYAEG D362;D362;1111 1164 11A9;D362;1111 1164 11A9; # (퍢; 퍢; 퍢; 퍢; 퍢; ) HANGUL SYLLABLE PYAEGG D363;D363;1111 1164 11AA;D363;1111 1164 11AA; # (퍣; 퍣; 퍣; 퍣; 퍣; ) HANGUL SYLLABLE PYAEGS D364;D364;1111 1164 11AB;D364;1111 1164 11AB; # (퍤; 퍤; 퍤; 퍤; 퍤; ) HANGUL SYLLABLE PYAEN D365;D365;1111 1164 11AC;D365;1111 1164 11AC; # (퍥; 퍥; 퍥; 퍥; 퍥; ) HANGUL SYLLABLE PYAENJ D366;D366;1111 1164 11AD;D366;1111 1164 11AD; # (퍦; 퍦; 퍦; 퍦; 퍦; ) HANGUL SYLLABLE PYAENH D367;D367;1111 1164 11AE;D367;1111 1164 11AE; # (퍧; 퍧; 퍧; 퍧; 퍧; ) HANGUL SYLLABLE PYAED D368;D368;1111 1164 11AF;D368;1111 1164 11AF; # (퍨; 퍨; 퍨; 퍨; 퍨; ) HANGUL SYLLABLE PYAEL D369;D369;1111 1164 11B0;D369;1111 1164 11B0; # (퍩; 퍩; 퍩; 퍩; 퍩; ) HANGUL SYLLABLE PYAELG D36A;D36A;1111 1164 11B1;D36A;1111 1164 11B1; # (퍪; 퍪; 퍪; 퍪; 퍪; ) HANGUL SYLLABLE PYAELM D36B;D36B;1111 1164 11B2;D36B;1111 1164 11B2; # (퍫; 퍫; 퍫; 퍫; 퍫; ) HANGUL SYLLABLE PYAELB D36C;D36C;1111 1164 11B3;D36C;1111 1164 11B3; # (퍬; 퍬; 퍬; 퍬; 퍬; ) HANGUL SYLLABLE PYAELS D36D;D36D;1111 1164 11B4;D36D;1111 1164 11B4; # (퍭; 퍭; 퍭; 퍭; 퍭; ) HANGUL SYLLABLE PYAELT D36E;D36E;1111 1164 11B5;D36E;1111 1164 11B5; # (퍮; 퍮; 퍮; 퍮; 퍮; ) HANGUL SYLLABLE PYAELP D36F;D36F;1111 1164 11B6;D36F;1111 1164 11B6; # (퍯; 퍯; 퍯; 퍯; 퍯; ) HANGUL SYLLABLE PYAELH D370;D370;1111 1164 11B7;D370;1111 1164 11B7; # (퍰; 퍰; 퍰; 퍰; 퍰; ) HANGUL SYLLABLE PYAEM D371;D371;1111 1164 11B8;D371;1111 1164 11B8; # (퍱; 퍱; 퍱; 퍱; 퍱; ) HANGUL SYLLABLE PYAEB D372;D372;1111 1164 11B9;D372;1111 1164 11B9; # (퍲; 퍲; 퍲; 퍲; 퍲; ) HANGUL SYLLABLE PYAEBS D373;D373;1111 1164 11BA;D373;1111 1164 11BA; # (퍳; 퍳; 퍳; 퍳; 퍳; ) HANGUL SYLLABLE PYAES D374;D374;1111 1164 11BB;D374;1111 1164 11BB; # (퍴; 퍴; 퍴; 퍴; 퍴; ) HANGUL SYLLABLE PYAESS D375;D375;1111 1164 11BC;D375;1111 1164 11BC; # (퍵; 퍵; 퍵; 퍵; 퍵; ) HANGUL SYLLABLE PYAENG D376;D376;1111 1164 11BD;D376;1111 1164 11BD; # (퍶; 퍶; 퍶; 퍶; 퍶; ) HANGUL SYLLABLE PYAEJ D377;D377;1111 1164 11BE;D377;1111 1164 11BE; # (퍷; 퍷; 퍷; 퍷; 퍷; ) HANGUL SYLLABLE PYAEC D378;D378;1111 1164 11BF;D378;1111 1164 11BF; # (퍸; 퍸; 퍸; 퍸; 퍸; ) HANGUL SYLLABLE PYAEK D379;D379;1111 1164 11C0;D379;1111 1164 11C0; # (퍹; 퍹; 퍹; 퍹; 퍹; ) HANGUL SYLLABLE PYAET D37A;D37A;1111 1164 11C1;D37A;1111 1164 11C1; # (퍺; 퍺; 퍺; 퍺; 퍺; ) HANGUL SYLLABLE PYAEP D37B;D37B;1111 1164 11C2;D37B;1111 1164 11C2; # (퍻; 퍻; 퍻; 퍻; 퍻; ) HANGUL SYLLABLE PYAEH D37C;D37C;1111 1165;D37C;1111 1165; # (퍼; 퍼; 퍼; 퍼; 퍼; ) HANGUL SYLLABLE PEO D37D;D37D;1111 1165 11A8;D37D;1111 1165 11A8; # (퍽; 퍽; 퍽; 퍽; 퍽; ) HANGUL SYLLABLE PEOG D37E;D37E;1111 1165 11A9;D37E;1111 1165 11A9; # (퍾; 퍾; 퍾; 퍾; 퍾; ) HANGUL SYLLABLE PEOGG D37F;D37F;1111 1165 11AA;D37F;1111 1165 11AA; # (퍿; 퍿; 퍿; 퍿; 퍿; ) HANGUL SYLLABLE PEOGS D380;D380;1111 1165 11AB;D380;1111 1165 11AB; # (펀; 펀; 펀; 펀; 펀; ) HANGUL SYLLABLE PEON D381;D381;1111 1165 11AC;D381;1111 1165 11AC; # (펁; 펁; 펁; 펁; 펁; ) HANGUL SYLLABLE PEONJ D382;D382;1111 1165 11AD;D382;1111 1165 11AD; # (펂; 펂; 펂; 펂; 펂; ) HANGUL SYLLABLE PEONH D383;D383;1111 1165 11AE;D383;1111 1165 11AE; # (펃; 펃; 펃; 펃; 펃; ) HANGUL SYLLABLE PEOD D384;D384;1111 1165 11AF;D384;1111 1165 11AF; # (펄; 펄; 펄; 펄; 펄; ) HANGUL SYLLABLE PEOL D385;D385;1111 1165 11B0;D385;1111 1165 11B0; # (펅; 펅; 펅; 펅; 펅; ) HANGUL SYLLABLE PEOLG D386;D386;1111 1165 11B1;D386;1111 1165 11B1; # (펆; 펆; 펆; 펆; 펆; ) HANGUL SYLLABLE PEOLM D387;D387;1111 1165 11B2;D387;1111 1165 11B2; # (펇; 펇; 펇; 펇; 펇; ) HANGUL SYLLABLE PEOLB D388;D388;1111 1165 11B3;D388;1111 1165 11B3; # (펈; 펈; 펈; 펈; 펈; ) HANGUL SYLLABLE PEOLS D389;D389;1111 1165 11B4;D389;1111 1165 11B4; # (펉; 펉; 펉; 펉; 펉; ) HANGUL SYLLABLE PEOLT D38A;D38A;1111 1165 11B5;D38A;1111 1165 11B5; # (펊; 펊; 펊; 펊; 펊; ) HANGUL SYLLABLE PEOLP D38B;D38B;1111 1165 11B6;D38B;1111 1165 11B6; # (펋; 펋; 펋; 펋; 펋; ) HANGUL SYLLABLE PEOLH D38C;D38C;1111 1165 11B7;D38C;1111 1165 11B7; # (펌; 펌; 펌; 펌; 펌; ) HANGUL SYLLABLE PEOM D38D;D38D;1111 1165 11B8;D38D;1111 1165 11B8; # (펍; 펍; 펍; 펍; 펍; ) HANGUL SYLLABLE PEOB D38E;D38E;1111 1165 11B9;D38E;1111 1165 11B9; # (펎; 펎; 펎; 펎; 펎; ) HANGUL SYLLABLE PEOBS D38F;D38F;1111 1165 11BA;D38F;1111 1165 11BA; # (펏; 펏; 펏; 펏; 펏; ) HANGUL SYLLABLE PEOS D390;D390;1111 1165 11BB;D390;1111 1165 11BB; # (펐; 펐; 펐; 펐; 펐; ) HANGUL SYLLABLE PEOSS D391;D391;1111 1165 11BC;D391;1111 1165 11BC; # (펑; 펑; 펑; 펑; 펑; ) HANGUL SYLLABLE PEONG D392;D392;1111 1165 11BD;D392;1111 1165 11BD; # (펒; 펒; 펒; 펒; 펒; ) HANGUL SYLLABLE PEOJ D393;D393;1111 1165 11BE;D393;1111 1165 11BE; # (펓; 펓; 펓; 펓; 펓; ) HANGUL SYLLABLE PEOC D394;D394;1111 1165 11BF;D394;1111 1165 11BF; # (펔; 펔; 펔; 펔; 펔; ) HANGUL SYLLABLE PEOK D395;D395;1111 1165 11C0;D395;1111 1165 11C0; # (펕; 펕; 펕; 펕; 펕; ) HANGUL SYLLABLE PEOT D396;D396;1111 1165 11C1;D396;1111 1165 11C1; # (펖; 펖; 펖; 펖; 펖; ) HANGUL SYLLABLE PEOP D397;D397;1111 1165 11C2;D397;1111 1165 11C2; # (펗; 펗; 펗; 펗; 펗; ) HANGUL SYLLABLE PEOH D398;D398;1111 1166;D398;1111 1166; # (페; 페; 페; 페; 페; ) HANGUL SYLLABLE PE D399;D399;1111 1166 11A8;D399;1111 1166 11A8; # (펙; 펙; 펙; 펙; 펙; ) HANGUL SYLLABLE PEG D39A;D39A;1111 1166 11A9;D39A;1111 1166 11A9; # (펚; 펚; 펚; 펚; 펚; ) HANGUL SYLLABLE PEGG D39B;D39B;1111 1166 11AA;D39B;1111 1166 11AA; # (펛; 펛; 펛; 펛; 펛; ) HANGUL SYLLABLE PEGS D39C;D39C;1111 1166 11AB;D39C;1111 1166 11AB; # (펜; 펜; 펜; 펜; 펜; ) HANGUL SYLLABLE PEN D39D;D39D;1111 1166 11AC;D39D;1111 1166 11AC; # (펝; 펝; 펝; 펝; 펝; ) HANGUL SYLLABLE PENJ D39E;D39E;1111 1166 11AD;D39E;1111 1166 11AD; # (펞; 펞; 펞; 펞; 펞; ) HANGUL SYLLABLE PENH D39F;D39F;1111 1166 11AE;D39F;1111 1166 11AE; # (펟; 펟; 펟; 펟; 펟; ) HANGUL SYLLABLE PED D3A0;D3A0;1111 1166 11AF;D3A0;1111 1166 11AF; # (펠; 펠; 펠; 펠; 펠; ) HANGUL SYLLABLE PEL D3A1;D3A1;1111 1166 11B0;D3A1;1111 1166 11B0; # (펡; 펡; 펡; 펡; 펡; ) HANGUL SYLLABLE PELG D3A2;D3A2;1111 1166 11B1;D3A2;1111 1166 11B1; # (펢; 펢; 펢; 펢; 펢; ) HANGUL SYLLABLE PELM D3A3;D3A3;1111 1166 11B2;D3A3;1111 1166 11B2; # (펣; 펣; 펣; 펣; 펣; ) HANGUL SYLLABLE PELB D3A4;D3A4;1111 1166 11B3;D3A4;1111 1166 11B3; # (펤; 펤; 펤; 펤; 펤; ) HANGUL SYLLABLE PELS D3A5;D3A5;1111 1166 11B4;D3A5;1111 1166 11B4; # (펥; 펥; 펥; 펥; 펥; ) HANGUL SYLLABLE PELT D3A6;D3A6;1111 1166 11B5;D3A6;1111 1166 11B5; # (펦; 펦; 펦; 펦; 펦; ) HANGUL SYLLABLE PELP D3A7;D3A7;1111 1166 11B6;D3A7;1111 1166 11B6; # (펧; 펧; 펧; 펧; 펧; ) HANGUL SYLLABLE PELH D3A8;D3A8;1111 1166 11B7;D3A8;1111 1166 11B7; # (펨; 펨; 펨; 펨; 펨; ) HANGUL SYLLABLE PEM D3A9;D3A9;1111 1166 11B8;D3A9;1111 1166 11B8; # (펩; 펩; 펩; 펩; 펩; ) HANGUL SYLLABLE PEB D3AA;D3AA;1111 1166 11B9;D3AA;1111 1166 11B9; # (펪; 펪; 펪; 펪; 펪; ) HANGUL SYLLABLE PEBS D3AB;D3AB;1111 1166 11BA;D3AB;1111 1166 11BA; # (펫; 펫; 펫; 펫; 펫; ) HANGUL SYLLABLE PES D3AC;D3AC;1111 1166 11BB;D3AC;1111 1166 11BB; # (펬; 펬; 펬; 펬; 펬; ) HANGUL SYLLABLE PESS D3AD;D3AD;1111 1166 11BC;D3AD;1111 1166 11BC; # (펭; 펭; 펭; 펭; 펭; ) HANGUL SYLLABLE PENG D3AE;D3AE;1111 1166 11BD;D3AE;1111 1166 11BD; # (펮; 펮; 펮; 펮; 펮; ) HANGUL SYLLABLE PEJ D3AF;D3AF;1111 1166 11BE;D3AF;1111 1166 11BE; # (펯; 펯; 펯; 펯; 펯; ) HANGUL SYLLABLE PEC D3B0;D3B0;1111 1166 11BF;D3B0;1111 1166 11BF; # (펰; 펰; 펰; 펰; 펰; ) HANGUL SYLLABLE PEK D3B1;D3B1;1111 1166 11C0;D3B1;1111 1166 11C0; # (펱; 펱; 펱; 펱; 펱; ) HANGUL SYLLABLE PET D3B2;D3B2;1111 1166 11C1;D3B2;1111 1166 11C1; # (펲; 펲; 펲; 펲; 펲; ) HANGUL SYLLABLE PEP D3B3;D3B3;1111 1166 11C2;D3B3;1111 1166 11C2; # (펳; 펳; 펳; 펳; 펳; ) HANGUL SYLLABLE PEH D3B4;D3B4;1111 1167;D3B4;1111 1167; # (펴; 펴; 펴; 펴; 펴; ) HANGUL SYLLABLE PYEO D3B5;D3B5;1111 1167 11A8;D3B5;1111 1167 11A8; # (펵; 펵; 펵; 펵; 펵; ) HANGUL SYLLABLE PYEOG D3B6;D3B6;1111 1167 11A9;D3B6;1111 1167 11A9; # (펶; 펶; 펶; 펶; 펶; ) HANGUL SYLLABLE PYEOGG D3B7;D3B7;1111 1167 11AA;D3B7;1111 1167 11AA; # (펷; 펷; 펷; 펷; 펷; ) HANGUL SYLLABLE PYEOGS D3B8;D3B8;1111 1167 11AB;D3B8;1111 1167 11AB; # (편; 편; 편; 편; 편; ) HANGUL SYLLABLE PYEON D3B9;D3B9;1111 1167 11AC;D3B9;1111 1167 11AC; # (펹; 펹; 펹; 펹; 펹; ) HANGUL SYLLABLE PYEONJ D3BA;D3BA;1111 1167 11AD;D3BA;1111 1167 11AD; # (펺; 펺; 펺; 펺; 펺; ) HANGUL SYLLABLE PYEONH D3BB;D3BB;1111 1167 11AE;D3BB;1111 1167 11AE; # (펻; 펻; 펻; 펻; 펻; ) HANGUL SYLLABLE PYEOD D3BC;D3BC;1111 1167 11AF;D3BC;1111 1167 11AF; # (펼; 펼; 펼; 펼; 펼; ) HANGUL SYLLABLE PYEOL D3BD;D3BD;1111 1167 11B0;D3BD;1111 1167 11B0; # (펽; 펽; 펽; 펽; 펽; ) HANGUL SYLLABLE PYEOLG D3BE;D3BE;1111 1167 11B1;D3BE;1111 1167 11B1; # (펾; 펾; 펾; 펾; 펾; ) HANGUL SYLLABLE PYEOLM D3BF;D3BF;1111 1167 11B2;D3BF;1111 1167 11B2; # (펿; 펿; 펿; 펿; 펿; ) HANGUL SYLLABLE PYEOLB D3C0;D3C0;1111 1167 11B3;D3C0;1111 1167 11B3; # (폀; 폀; 폀; 폀; 폀; ) HANGUL SYLLABLE PYEOLS D3C1;D3C1;1111 1167 11B4;D3C1;1111 1167 11B4; # (폁; 폁; 폁; 폁; 폁; ) HANGUL SYLLABLE PYEOLT D3C2;D3C2;1111 1167 11B5;D3C2;1111 1167 11B5; # (폂; 폂; 폂; 폂; 폂; ) HANGUL SYLLABLE PYEOLP D3C3;D3C3;1111 1167 11B6;D3C3;1111 1167 11B6; # (폃; 폃; 폃; 폃; 폃; ) HANGUL SYLLABLE PYEOLH D3C4;D3C4;1111 1167 11B7;D3C4;1111 1167 11B7; # (폄; 폄; 폄; 폄; 폄; ) HANGUL SYLLABLE PYEOM D3C5;D3C5;1111 1167 11B8;D3C5;1111 1167 11B8; # (폅; 폅; 폅; 폅; 폅; ) HANGUL SYLLABLE PYEOB D3C6;D3C6;1111 1167 11B9;D3C6;1111 1167 11B9; # (폆; 폆; 폆; 폆; 폆; ) HANGUL SYLLABLE PYEOBS D3C7;D3C7;1111 1167 11BA;D3C7;1111 1167 11BA; # (폇; 폇; 폇; 폇; 폇; ) HANGUL SYLLABLE PYEOS D3C8;D3C8;1111 1167 11BB;D3C8;1111 1167 11BB; # (폈; 폈; 폈; 폈; 폈; ) HANGUL SYLLABLE PYEOSS D3C9;D3C9;1111 1167 11BC;D3C9;1111 1167 11BC; # (평; 평; 평; 평; 평; ) HANGUL SYLLABLE PYEONG D3CA;D3CA;1111 1167 11BD;D3CA;1111 1167 11BD; # (폊; 폊; 폊; 폊; 폊; ) HANGUL SYLLABLE PYEOJ D3CB;D3CB;1111 1167 11BE;D3CB;1111 1167 11BE; # (폋; 폋; 폋; 폋; 폋; ) HANGUL SYLLABLE PYEOC D3CC;D3CC;1111 1167 11BF;D3CC;1111 1167 11BF; # (폌; 폌; 폌; 폌; 폌; ) HANGUL SYLLABLE PYEOK D3CD;D3CD;1111 1167 11C0;D3CD;1111 1167 11C0; # (폍; 폍; 폍; 폍; 폍; ) HANGUL SYLLABLE PYEOT D3CE;D3CE;1111 1167 11C1;D3CE;1111 1167 11C1; # (폎; 폎; 폎; 폎; 폎; ) HANGUL SYLLABLE PYEOP D3CF;D3CF;1111 1167 11C2;D3CF;1111 1167 11C2; # (폏; 폏; 폏; 폏; 폏; ) HANGUL SYLLABLE PYEOH D3D0;D3D0;1111 1168;D3D0;1111 1168; # (폐; 폐; 폐; 폐; 폐; ) HANGUL SYLLABLE PYE D3D1;D3D1;1111 1168 11A8;D3D1;1111 1168 11A8; # (폑; 폑; 폑; 폑; 폑; ) HANGUL SYLLABLE PYEG D3D2;D3D2;1111 1168 11A9;D3D2;1111 1168 11A9; # (폒; 폒; 폒; 폒; 폒; ) HANGUL SYLLABLE PYEGG D3D3;D3D3;1111 1168 11AA;D3D3;1111 1168 11AA; # (폓; 폓; 폓; 폓; 폓; ) HANGUL SYLLABLE PYEGS D3D4;D3D4;1111 1168 11AB;D3D4;1111 1168 11AB; # (폔; 폔; 폔; 폔; 폔; ) HANGUL SYLLABLE PYEN D3D5;D3D5;1111 1168 11AC;D3D5;1111 1168 11AC; # (폕; 폕; 폕; 폕; 폕; ) HANGUL SYLLABLE PYENJ D3D6;D3D6;1111 1168 11AD;D3D6;1111 1168 11AD; # (폖; 폖; 폖; 폖; 폖; ) HANGUL SYLLABLE PYENH D3D7;D3D7;1111 1168 11AE;D3D7;1111 1168 11AE; # (폗; 폗; 폗; 폗; 폗; ) HANGUL SYLLABLE PYED D3D8;D3D8;1111 1168 11AF;D3D8;1111 1168 11AF; # (폘; 폘; 폘; 폘; 폘; ) HANGUL SYLLABLE PYEL D3D9;D3D9;1111 1168 11B0;D3D9;1111 1168 11B0; # (폙; 폙; 폙; 폙; 폙; ) HANGUL SYLLABLE PYELG D3DA;D3DA;1111 1168 11B1;D3DA;1111 1168 11B1; # (폚; 폚; 폚; 폚; 폚; ) HANGUL SYLLABLE PYELM D3DB;D3DB;1111 1168 11B2;D3DB;1111 1168 11B2; # (폛; 폛; 폛; 폛; 폛; ) HANGUL SYLLABLE PYELB D3DC;D3DC;1111 1168 11B3;D3DC;1111 1168 11B3; # (폜; 폜; 폜; 폜; 폜; ) HANGUL SYLLABLE PYELS D3DD;D3DD;1111 1168 11B4;D3DD;1111 1168 11B4; # (폝; 폝; 폝; 폝; 폝; ) HANGUL SYLLABLE PYELT D3DE;D3DE;1111 1168 11B5;D3DE;1111 1168 11B5; # (폞; 폞; 폞; 폞; 폞; ) HANGUL SYLLABLE PYELP D3DF;D3DF;1111 1168 11B6;D3DF;1111 1168 11B6; # (폟; 폟; 폟; 폟; 폟; ) HANGUL SYLLABLE PYELH D3E0;D3E0;1111 1168 11B7;D3E0;1111 1168 11B7; # (폠; 폠; 폠; 폠; 폠; ) HANGUL SYLLABLE PYEM D3E1;D3E1;1111 1168 11B8;D3E1;1111 1168 11B8; # (폡; 폡; 폡; 폡; 폡; ) HANGUL SYLLABLE PYEB D3E2;D3E2;1111 1168 11B9;D3E2;1111 1168 11B9; # (폢; 폢; 폢; 폢; 폢; ) HANGUL SYLLABLE PYEBS D3E3;D3E3;1111 1168 11BA;D3E3;1111 1168 11BA; # (폣; 폣; 폣; 폣; 폣; ) HANGUL SYLLABLE PYES D3E4;D3E4;1111 1168 11BB;D3E4;1111 1168 11BB; # (폤; 폤; 폤; 폤; 폤; ) HANGUL SYLLABLE PYESS D3E5;D3E5;1111 1168 11BC;D3E5;1111 1168 11BC; # (폥; 폥; 폥; 폥; 폥; ) HANGUL SYLLABLE PYENG D3E6;D3E6;1111 1168 11BD;D3E6;1111 1168 11BD; # (폦; 폦; 폦; 폦; 폦; ) HANGUL SYLLABLE PYEJ D3E7;D3E7;1111 1168 11BE;D3E7;1111 1168 11BE; # (폧; 폧; 폧; 폧; 폧; ) HANGUL SYLLABLE PYEC D3E8;D3E8;1111 1168 11BF;D3E8;1111 1168 11BF; # (폨; 폨; 폨; 폨; 폨; ) HANGUL SYLLABLE PYEK D3E9;D3E9;1111 1168 11C0;D3E9;1111 1168 11C0; # (폩; 폩; 폩; 폩; 폩; ) HANGUL SYLLABLE PYET D3EA;D3EA;1111 1168 11C1;D3EA;1111 1168 11C1; # (폪; 폪; 폪; 폪; 폪; ) HANGUL SYLLABLE PYEP D3EB;D3EB;1111 1168 11C2;D3EB;1111 1168 11C2; # (폫; 폫; 폫; 폫; 폫; ) HANGUL SYLLABLE PYEH D3EC;D3EC;1111 1169;D3EC;1111 1169; # (포; 포; 포; 포; 포; ) HANGUL SYLLABLE PO D3ED;D3ED;1111 1169 11A8;D3ED;1111 1169 11A8; # (폭; 폭; 폭; 폭; 폭; ) HANGUL SYLLABLE POG D3EE;D3EE;1111 1169 11A9;D3EE;1111 1169 11A9; # (폮; 폮; 폮; 폮; 폮; ) HANGUL SYLLABLE POGG D3EF;D3EF;1111 1169 11AA;D3EF;1111 1169 11AA; # (폯; 폯; 폯; 폯; 폯; ) HANGUL SYLLABLE POGS D3F0;D3F0;1111 1169 11AB;D3F0;1111 1169 11AB; # (폰; 폰; 폰; 폰; 폰; ) HANGUL SYLLABLE PON D3F1;D3F1;1111 1169 11AC;D3F1;1111 1169 11AC; # (폱; 폱; 폱; 폱; 폱; ) HANGUL SYLLABLE PONJ D3F2;D3F2;1111 1169 11AD;D3F2;1111 1169 11AD; # (폲; 폲; 폲; 폲; 폲; ) HANGUL SYLLABLE PONH D3F3;D3F3;1111 1169 11AE;D3F3;1111 1169 11AE; # (폳; 폳; 폳; 폳; 폳; ) HANGUL SYLLABLE POD D3F4;D3F4;1111 1169 11AF;D3F4;1111 1169 11AF; # (폴; 폴; 폴; 폴; 폴; ) HANGUL SYLLABLE POL D3F5;D3F5;1111 1169 11B0;D3F5;1111 1169 11B0; # (폵; 폵; 폵; 폵; 폵; ) HANGUL SYLLABLE POLG D3F6;D3F6;1111 1169 11B1;D3F6;1111 1169 11B1; # (폶; 폶; 폶; 폶; 폶; ) HANGUL SYLLABLE POLM D3F7;D3F7;1111 1169 11B2;D3F7;1111 1169 11B2; # (폷; 폷; 폷; 폷; 폷; ) HANGUL SYLLABLE POLB D3F8;D3F8;1111 1169 11B3;D3F8;1111 1169 11B3; # (폸; 폸; 폸; 폸; 폸; ) HANGUL SYLLABLE POLS D3F9;D3F9;1111 1169 11B4;D3F9;1111 1169 11B4; # (폹; 폹; 폹; 폹; 폹; ) HANGUL SYLLABLE POLT D3FA;D3FA;1111 1169 11B5;D3FA;1111 1169 11B5; # (폺; 폺; 폺; 폺; 폺; ) HANGUL SYLLABLE POLP D3FB;D3FB;1111 1169 11B6;D3FB;1111 1169 11B6; # (폻; 폻; 폻; 폻; 폻; ) HANGUL SYLLABLE POLH D3FC;D3FC;1111 1169 11B7;D3FC;1111 1169 11B7; # (폼; 폼; 폼; 폼; 폼; ) HANGUL SYLLABLE POM D3FD;D3FD;1111 1169 11B8;D3FD;1111 1169 11B8; # (폽; 폽; 폽; 폽; 폽; ) HANGUL SYLLABLE POB D3FE;D3FE;1111 1169 11B9;D3FE;1111 1169 11B9; # (폾; 폾; 폾; 폾; 폾; ) HANGUL SYLLABLE POBS D3FF;D3FF;1111 1169 11BA;D3FF;1111 1169 11BA; # (폿; 폿; 폿; 폿; 폿; ) HANGUL SYLLABLE POS D400;D400;1111 1169 11BB;D400;1111 1169 11BB; # (퐀; 퐀; 퐀; 퐀; 퐀; ) HANGUL SYLLABLE POSS D401;D401;1111 1169 11BC;D401;1111 1169 11BC; # (퐁; 퐁; 퐁; 퐁; 퐁; ) HANGUL SYLLABLE PONG D402;D402;1111 1169 11BD;D402;1111 1169 11BD; # (퐂; 퐂; 퐂; 퐂; 퐂; ) HANGUL SYLLABLE POJ D403;D403;1111 1169 11BE;D403;1111 1169 11BE; # (퐃; 퐃; 퐃; 퐃; 퐃; ) HANGUL SYLLABLE POC D404;D404;1111 1169 11BF;D404;1111 1169 11BF; # (퐄; 퐄; 퐄; 퐄; 퐄; ) HANGUL SYLLABLE POK D405;D405;1111 1169 11C0;D405;1111 1169 11C0; # (퐅; 퐅; 퐅; 퐅; 퐅; ) HANGUL SYLLABLE POT D406;D406;1111 1169 11C1;D406;1111 1169 11C1; # (퐆; 퐆; 퐆; 퐆; 퐆; ) HANGUL SYLLABLE POP D407;D407;1111 1169 11C2;D407;1111 1169 11C2; # (퐇; 퐇; 퐇; 퐇; 퐇; ) HANGUL SYLLABLE POH D408;D408;1111 116A;D408;1111 116A; # (퐈; 퐈; 퐈; 퐈; 퐈; ) HANGUL SYLLABLE PWA D409;D409;1111 116A 11A8;D409;1111 116A 11A8; # (퐉; 퐉; 퐉; 퐉; 퐉; ) HANGUL SYLLABLE PWAG D40A;D40A;1111 116A 11A9;D40A;1111 116A 11A9; # (퐊; 퐊; 퐊; 퐊; 퐊; ) HANGUL SYLLABLE PWAGG D40B;D40B;1111 116A 11AA;D40B;1111 116A 11AA; # (퐋; 퐋; 퐋; 퐋; 퐋; ) HANGUL SYLLABLE PWAGS D40C;D40C;1111 116A 11AB;D40C;1111 116A 11AB; # (퐌; 퐌; 퐌; 퐌; 퐌; ) HANGUL SYLLABLE PWAN D40D;D40D;1111 116A 11AC;D40D;1111 116A 11AC; # (퐍; 퐍; 퐍; 퐍; 퐍; ) HANGUL SYLLABLE PWANJ D40E;D40E;1111 116A 11AD;D40E;1111 116A 11AD; # (퐎; 퐎; 퐎; 퐎; 퐎; ) HANGUL SYLLABLE PWANH D40F;D40F;1111 116A 11AE;D40F;1111 116A 11AE; # (퐏; 퐏; 퐏; 퐏; 퐏; ) HANGUL SYLLABLE PWAD D410;D410;1111 116A 11AF;D410;1111 116A 11AF; # (퐐; 퐐; 퐐; 퐐; 퐐; ) HANGUL SYLLABLE PWAL D411;D411;1111 116A 11B0;D411;1111 116A 11B0; # (퐑; 퐑; 퐑; 퐑; 퐑; ) HANGUL SYLLABLE PWALG D412;D412;1111 116A 11B1;D412;1111 116A 11B1; # (퐒; 퐒; 퐒; 퐒; 퐒; ) HANGUL SYLLABLE PWALM D413;D413;1111 116A 11B2;D413;1111 116A 11B2; # (퐓; 퐓; 퐓; 퐓; 퐓; ) HANGUL SYLLABLE PWALB D414;D414;1111 116A 11B3;D414;1111 116A 11B3; # (퐔; 퐔; 퐔; 퐔; 퐔; ) HANGUL SYLLABLE PWALS D415;D415;1111 116A 11B4;D415;1111 116A 11B4; # (퐕; 퐕; 퐕; 퐕; 퐕; ) HANGUL SYLLABLE PWALT D416;D416;1111 116A 11B5;D416;1111 116A 11B5; # (퐖; 퐖; 퐖; 퐖; 퐖; ) HANGUL SYLLABLE PWALP D417;D417;1111 116A 11B6;D417;1111 116A 11B6; # (퐗; 퐗; 퐗; 퐗; 퐗; ) HANGUL SYLLABLE PWALH D418;D418;1111 116A 11B7;D418;1111 116A 11B7; # (퐘; 퐘; 퐘; 퐘; 퐘; ) HANGUL SYLLABLE PWAM D419;D419;1111 116A 11B8;D419;1111 116A 11B8; # (퐙; 퐙; 퐙; 퐙; 퐙; ) HANGUL SYLLABLE PWAB D41A;D41A;1111 116A 11B9;D41A;1111 116A 11B9; # (퐚; 퐚; 퐚; 퐚; 퐚; ) HANGUL SYLLABLE PWABS D41B;D41B;1111 116A 11BA;D41B;1111 116A 11BA; # (퐛; 퐛; 퐛; 퐛; 퐛; ) HANGUL SYLLABLE PWAS D41C;D41C;1111 116A 11BB;D41C;1111 116A 11BB; # (퐜; 퐜; 퐜; 퐜; 퐜; ) HANGUL SYLLABLE PWASS D41D;D41D;1111 116A 11BC;D41D;1111 116A 11BC; # (퐝; 퐝; 퐝; 퐝; 퐝; ) HANGUL SYLLABLE PWANG D41E;D41E;1111 116A 11BD;D41E;1111 116A 11BD; # (퐞; 퐞; 퐞; 퐞; 퐞; ) HANGUL SYLLABLE PWAJ D41F;D41F;1111 116A 11BE;D41F;1111 116A 11BE; # (퐟; 퐟; 퐟; 퐟; 퐟; ) HANGUL SYLLABLE PWAC D420;D420;1111 116A 11BF;D420;1111 116A 11BF; # (퐠; 퐠; 퐠; 퐠; 퐠; ) HANGUL SYLLABLE PWAK D421;D421;1111 116A 11C0;D421;1111 116A 11C0; # (퐡; 퐡; 퐡; 퐡; 퐡; ) HANGUL SYLLABLE PWAT D422;D422;1111 116A 11C1;D422;1111 116A 11C1; # (퐢; 퐢; 퐢; 퐢; 퐢; ) HANGUL SYLLABLE PWAP D423;D423;1111 116A 11C2;D423;1111 116A 11C2; # (퐣; 퐣; 퐣; 퐣; 퐣; ) HANGUL SYLLABLE PWAH D424;D424;1111 116B;D424;1111 116B; # (퐤; 퐤; 퐤; 퐤; 퐤; ) HANGUL SYLLABLE PWAE D425;D425;1111 116B 11A8;D425;1111 116B 11A8; # (퐥; 퐥; 퐥; 퐥; 퐥; ) HANGUL SYLLABLE PWAEG D426;D426;1111 116B 11A9;D426;1111 116B 11A9; # (퐦; 퐦; 퐦; 퐦; 퐦; ) HANGUL SYLLABLE PWAEGG D427;D427;1111 116B 11AA;D427;1111 116B 11AA; # (퐧; 퐧; 퐧; 퐧; 퐧; ) HANGUL SYLLABLE PWAEGS D428;D428;1111 116B 11AB;D428;1111 116B 11AB; # (퐨; 퐨; 퐨; 퐨; 퐨; ) HANGUL SYLLABLE PWAEN D429;D429;1111 116B 11AC;D429;1111 116B 11AC; # (퐩; 퐩; 퐩; 퐩; 퐩; ) HANGUL SYLLABLE PWAENJ D42A;D42A;1111 116B 11AD;D42A;1111 116B 11AD; # (퐪; 퐪; 퐪; 퐪; 퐪; ) HANGUL SYLLABLE PWAENH D42B;D42B;1111 116B 11AE;D42B;1111 116B 11AE; # (퐫; 퐫; 퐫; 퐫; 퐫; ) HANGUL SYLLABLE PWAED D42C;D42C;1111 116B 11AF;D42C;1111 116B 11AF; # (퐬; 퐬; 퐬; 퐬; 퐬; ) HANGUL SYLLABLE PWAEL D42D;D42D;1111 116B 11B0;D42D;1111 116B 11B0; # (퐭; 퐭; 퐭; 퐭; 퐭; ) HANGUL SYLLABLE PWAELG D42E;D42E;1111 116B 11B1;D42E;1111 116B 11B1; # (퐮; 퐮; 퐮; 퐮; 퐮; ) HANGUL SYLLABLE PWAELM D42F;D42F;1111 116B 11B2;D42F;1111 116B 11B2; # (퐯; 퐯; 퐯; 퐯; 퐯; ) HANGUL SYLLABLE PWAELB D430;D430;1111 116B 11B3;D430;1111 116B 11B3; # (퐰; 퐰; 퐰; 퐰; 퐰; ) HANGUL SYLLABLE PWAELS D431;D431;1111 116B 11B4;D431;1111 116B 11B4; # (퐱; 퐱; 퐱; 퐱; 퐱; ) HANGUL SYLLABLE PWAELT D432;D432;1111 116B 11B5;D432;1111 116B 11B5; # (퐲; 퐲; 퐲; 퐲; 퐲; ) HANGUL SYLLABLE PWAELP D433;D433;1111 116B 11B6;D433;1111 116B 11B6; # (퐳; 퐳; 퐳; 퐳; 퐳; ) HANGUL SYLLABLE PWAELH D434;D434;1111 116B 11B7;D434;1111 116B 11B7; # (퐴; 퐴; 퐴; 퐴; 퐴; ) HANGUL SYLLABLE PWAEM D435;D435;1111 116B 11B8;D435;1111 116B 11B8; # (퐵; 퐵; 퐵; 퐵; 퐵; ) HANGUL SYLLABLE PWAEB D436;D436;1111 116B 11B9;D436;1111 116B 11B9; # (퐶; 퐶; 퐶; 퐶; 퐶; ) HANGUL SYLLABLE PWAEBS D437;D437;1111 116B 11BA;D437;1111 116B 11BA; # (퐷; 퐷; 퐷; 퐷; 퐷; ) HANGUL SYLLABLE PWAES D438;D438;1111 116B 11BB;D438;1111 116B 11BB; # (퐸; 퐸; 퐸; 퐸; 퐸; ) HANGUL SYLLABLE PWAESS D439;D439;1111 116B 11BC;D439;1111 116B 11BC; # (퐹; 퐹; 퐹; 퐹; 퐹; ) HANGUL SYLLABLE PWAENG D43A;D43A;1111 116B 11BD;D43A;1111 116B 11BD; # (퐺; 퐺; 퐺; 퐺; 퐺; ) HANGUL SYLLABLE PWAEJ D43B;D43B;1111 116B 11BE;D43B;1111 116B 11BE; # (퐻; 퐻; 퐻; 퐻; 퐻; ) HANGUL SYLLABLE PWAEC D43C;D43C;1111 116B 11BF;D43C;1111 116B 11BF; # (퐼; 퐼; 퐼; 퐼; 퐼; ) HANGUL SYLLABLE PWAEK D43D;D43D;1111 116B 11C0;D43D;1111 116B 11C0; # (퐽; 퐽; 퐽; 퐽; 퐽; ) HANGUL SYLLABLE PWAET D43E;D43E;1111 116B 11C1;D43E;1111 116B 11C1; # (퐾; 퐾; 퐾; 퐾; 퐾; ) HANGUL SYLLABLE PWAEP D43F;D43F;1111 116B 11C2;D43F;1111 116B 11C2; # (퐿; 퐿; 퐿; 퐿; 퐿; ) HANGUL SYLLABLE PWAEH D440;D440;1111 116C;D440;1111 116C; # (푀; 푀; 푀; 푀; 푀; ) HANGUL SYLLABLE POE D441;D441;1111 116C 11A8;D441;1111 116C 11A8; # (푁; 푁; 푁; 푁; 푁; ) HANGUL SYLLABLE POEG D442;D442;1111 116C 11A9;D442;1111 116C 11A9; # (푂; 푂; 푂; 푂; 푂; ) HANGUL SYLLABLE POEGG D443;D443;1111 116C 11AA;D443;1111 116C 11AA; # (푃; 푃; 푃; 푃; 푃; ) HANGUL SYLLABLE POEGS D444;D444;1111 116C 11AB;D444;1111 116C 11AB; # (푄; 푄; 푄; 푄; 푄; ) HANGUL SYLLABLE POEN D445;D445;1111 116C 11AC;D445;1111 116C 11AC; # (푅; 푅; 푅; 푅; 푅; ) HANGUL SYLLABLE POENJ D446;D446;1111 116C 11AD;D446;1111 116C 11AD; # (푆; 푆; 푆; 푆; 푆; ) HANGUL SYLLABLE POENH D447;D447;1111 116C 11AE;D447;1111 116C 11AE; # (푇; 푇; 푇; 푇; 푇; ) HANGUL SYLLABLE POED D448;D448;1111 116C 11AF;D448;1111 116C 11AF; # (푈; 푈; 푈; 푈; 푈; ) HANGUL SYLLABLE POEL D449;D449;1111 116C 11B0;D449;1111 116C 11B0; # (푉; 푉; 푉; 푉; 푉; ) HANGUL SYLLABLE POELG D44A;D44A;1111 116C 11B1;D44A;1111 116C 11B1; # (푊; 푊; 푊; 푊; 푊; ) HANGUL SYLLABLE POELM D44B;D44B;1111 116C 11B2;D44B;1111 116C 11B2; # (푋; 푋; 푋; 푋; 푋; ) HANGUL SYLLABLE POELB D44C;D44C;1111 116C 11B3;D44C;1111 116C 11B3; # (푌; 푌; 푌; 푌; 푌; ) HANGUL SYLLABLE POELS D44D;D44D;1111 116C 11B4;D44D;1111 116C 11B4; # (푍; 푍; 푍; 푍; 푍; ) HANGUL SYLLABLE POELT D44E;D44E;1111 116C 11B5;D44E;1111 116C 11B5; # (푎; 푎; 푎; 푎; 푎; ) HANGUL SYLLABLE POELP D44F;D44F;1111 116C 11B6;D44F;1111 116C 11B6; # (푏; 푏; 푏; 푏; 푏; ) HANGUL SYLLABLE POELH D450;D450;1111 116C 11B7;D450;1111 116C 11B7; # (푐; 푐; 푐; 푐; 푐; ) HANGUL SYLLABLE POEM D451;D451;1111 116C 11B8;D451;1111 116C 11B8; # (푑; 푑; 푑; 푑; 푑; ) HANGUL SYLLABLE POEB D452;D452;1111 116C 11B9;D452;1111 116C 11B9; # (푒; 푒; 푒; 푒; 푒; ) HANGUL SYLLABLE POEBS D453;D453;1111 116C 11BA;D453;1111 116C 11BA; # (푓; 푓; 푓; 푓; 푓; ) HANGUL SYLLABLE POES D454;D454;1111 116C 11BB;D454;1111 116C 11BB; # (푔; 푔; 푔; 푔; 푔; ) HANGUL SYLLABLE POESS D455;D455;1111 116C 11BC;D455;1111 116C 11BC; # (푕; 푕; 푕; 푕; 푕; ) HANGUL SYLLABLE POENG D456;D456;1111 116C 11BD;D456;1111 116C 11BD; # (푖; 푖; 푖; 푖; 푖; ) HANGUL SYLLABLE POEJ D457;D457;1111 116C 11BE;D457;1111 116C 11BE; # (푗; 푗; 푗; 푗; 푗; ) HANGUL SYLLABLE POEC D458;D458;1111 116C 11BF;D458;1111 116C 11BF; # (푘; 푘; 푘; 푘; 푘; ) HANGUL SYLLABLE POEK D459;D459;1111 116C 11C0;D459;1111 116C 11C0; # (푙; 푙; 푙; 푙; 푙; ) HANGUL SYLLABLE POET D45A;D45A;1111 116C 11C1;D45A;1111 116C 11C1; # (푚; 푚; 푚; 푚; 푚; ) HANGUL SYLLABLE POEP D45B;D45B;1111 116C 11C2;D45B;1111 116C 11C2; # (푛; 푛; 푛; 푛; 푛; ) HANGUL SYLLABLE POEH D45C;D45C;1111 116D;D45C;1111 116D; # (표; 표; 표; 표; 표; ) HANGUL SYLLABLE PYO D45D;D45D;1111 116D 11A8;D45D;1111 116D 11A8; # (푝; 푝; 푝; 푝; 푝; ) HANGUL SYLLABLE PYOG D45E;D45E;1111 116D 11A9;D45E;1111 116D 11A9; # (푞; 푞; 푞; 푞; 푞; ) HANGUL SYLLABLE PYOGG D45F;D45F;1111 116D 11AA;D45F;1111 116D 11AA; # (푟; 푟; 푟; 푟; 푟; ) HANGUL SYLLABLE PYOGS D460;D460;1111 116D 11AB;D460;1111 116D 11AB; # (푠; 푠; 푠; 푠; 푠; ) HANGUL SYLLABLE PYON D461;D461;1111 116D 11AC;D461;1111 116D 11AC; # (푡; 푡; 푡; 푡; 푡; ) HANGUL SYLLABLE PYONJ D462;D462;1111 116D 11AD;D462;1111 116D 11AD; # (푢; 푢; 푢; 푢; 푢; ) HANGUL SYLLABLE PYONH D463;D463;1111 116D 11AE;D463;1111 116D 11AE; # (푣; 푣; 푣; 푣; 푣; ) HANGUL SYLLABLE PYOD D464;D464;1111 116D 11AF;D464;1111 116D 11AF; # (푤; 푤; 푤; 푤; 푤; ) HANGUL SYLLABLE PYOL D465;D465;1111 116D 11B0;D465;1111 116D 11B0; # (푥; 푥; 푥; 푥; 푥; ) HANGUL SYLLABLE PYOLG D466;D466;1111 116D 11B1;D466;1111 116D 11B1; # (푦; 푦; 푦; 푦; 푦; ) HANGUL SYLLABLE PYOLM D467;D467;1111 116D 11B2;D467;1111 116D 11B2; # (푧; 푧; 푧; 푧; 푧; ) HANGUL SYLLABLE PYOLB D468;D468;1111 116D 11B3;D468;1111 116D 11B3; # (푨; 푨; 푨; 푨; 푨; ) HANGUL SYLLABLE PYOLS D469;D469;1111 116D 11B4;D469;1111 116D 11B4; # (푩; 푩; 푩; 푩; 푩; ) HANGUL SYLLABLE PYOLT D46A;D46A;1111 116D 11B5;D46A;1111 116D 11B5; # (푪; 푪; 푪; 푪; 푪; ) HANGUL SYLLABLE PYOLP D46B;D46B;1111 116D 11B6;D46B;1111 116D 11B6; # (푫; 푫; 푫; 푫; 푫; ) HANGUL SYLLABLE PYOLH D46C;D46C;1111 116D 11B7;D46C;1111 116D 11B7; # (푬; 푬; 푬; 푬; 푬; ) HANGUL SYLLABLE PYOM D46D;D46D;1111 116D 11B8;D46D;1111 116D 11B8; # (푭; 푭; 푭; 푭; 푭; ) HANGUL SYLLABLE PYOB D46E;D46E;1111 116D 11B9;D46E;1111 116D 11B9; # (푮; 푮; 푮; 푮; 푮; ) HANGUL SYLLABLE PYOBS D46F;D46F;1111 116D 11BA;D46F;1111 116D 11BA; # (푯; 푯; 푯; 푯; 푯; ) HANGUL SYLLABLE PYOS D470;D470;1111 116D 11BB;D470;1111 116D 11BB; # (푰; 푰; 푰; 푰; 푰; ) HANGUL SYLLABLE PYOSS D471;D471;1111 116D 11BC;D471;1111 116D 11BC; # (푱; 푱; 푱; 푱; 푱; ) HANGUL SYLLABLE PYONG D472;D472;1111 116D 11BD;D472;1111 116D 11BD; # (푲; 푲; 푲; 푲; 푲; ) HANGUL SYLLABLE PYOJ D473;D473;1111 116D 11BE;D473;1111 116D 11BE; # (푳; 푳; 푳; 푳; 푳; ) HANGUL SYLLABLE PYOC D474;D474;1111 116D 11BF;D474;1111 116D 11BF; # (푴; 푴; 푴; 푴; 푴; ) HANGUL SYLLABLE PYOK D475;D475;1111 116D 11C0;D475;1111 116D 11C0; # (푵; 푵; 푵; 푵; 푵; ) HANGUL SYLLABLE PYOT D476;D476;1111 116D 11C1;D476;1111 116D 11C1; # (푶; 푶; 푶; 푶; 푶; ) HANGUL SYLLABLE PYOP D477;D477;1111 116D 11C2;D477;1111 116D 11C2; # (푷; 푷; 푷; 푷; 푷; ) HANGUL SYLLABLE PYOH D478;D478;1111 116E;D478;1111 116E; # (푸; 푸; 푸; 푸; 푸; ) HANGUL SYLLABLE PU D479;D479;1111 116E 11A8;D479;1111 116E 11A8; # (푹; 푹; 푹; 푹; 푹; ) HANGUL SYLLABLE PUG D47A;D47A;1111 116E 11A9;D47A;1111 116E 11A9; # (푺; 푺; 푺; 푺; 푺; ) HANGUL SYLLABLE PUGG D47B;D47B;1111 116E 11AA;D47B;1111 116E 11AA; # (푻; 푻; 푻; 푻; 푻; ) HANGUL SYLLABLE PUGS D47C;D47C;1111 116E 11AB;D47C;1111 116E 11AB; # (푼; 푼; 푼; 푼; 푼; ) HANGUL SYLLABLE PUN D47D;D47D;1111 116E 11AC;D47D;1111 116E 11AC; # (푽; 푽; 푽; 푽; 푽; ) HANGUL SYLLABLE PUNJ D47E;D47E;1111 116E 11AD;D47E;1111 116E 11AD; # (푾; 푾; 푾; 푾; 푾; ) HANGUL SYLLABLE PUNH D47F;D47F;1111 116E 11AE;D47F;1111 116E 11AE; # (푿; 푿; 푿; 푿; 푿; ) HANGUL SYLLABLE PUD D480;D480;1111 116E 11AF;D480;1111 116E 11AF; # (풀; 풀; 풀; 풀; 풀; ) HANGUL SYLLABLE PUL D481;D481;1111 116E 11B0;D481;1111 116E 11B0; # (풁; 풁; 풁; 풁; 풁; ) HANGUL SYLLABLE PULG D482;D482;1111 116E 11B1;D482;1111 116E 11B1; # (풂; 풂; 풂; 풂; 풂; ) HANGUL SYLLABLE PULM D483;D483;1111 116E 11B2;D483;1111 116E 11B2; # (풃; 풃; 풃; 풃; 풃; ) HANGUL SYLLABLE PULB D484;D484;1111 116E 11B3;D484;1111 116E 11B3; # (풄; 풄; 풄; 풄; 풄; ) HANGUL SYLLABLE PULS D485;D485;1111 116E 11B4;D485;1111 116E 11B4; # (풅; 풅; 풅; 풅; 풅; ) HANGUL SYLLABLE PULT D486;D486;1111 116E 11B5;D486;1111 116E 11B5; # (풆; 풆; 풆; 풆; 풆; ) HANGUL SYLLABLE PULP D487;D487;1111 116E 11B6;D487;1111 116E 11B6; # (풇; 풇; 풇; 풇; 풇; ) HANGUL SYLLABLE PULH D488;D488;1111 116E 11B7;D488;1111 116E 11B7; # (품; 품; 품; 품; 품; ) HANGUL SYLLABLE PUM D489;D489;1111 116E 11B8;D489;1111 116E 11B8; # (풉; 풉; 풉; 풉; 풉; ) HANGUL SYLLABLE PUB D48A;D48A;1111 116E 11B9;D48A;1111 116E 11B9; # (풊; 풊; 풊; 풊; 풊; ) HANGUL SYLLABLE PUBS D48B;D48B;1111 116E 11BA;D48B;1111 116E 11BA; # (풋; 풋; 풋; 풋; 풋; ) HANGUL SYLLABLE PUS D48C;D48C;1111 116E 11BB;D48C;1111 116E 11BB; # (풌; 풌; 풌; 풌; 풌; ) HANGUL SYLLABLE PUSS D48D;D48D;1111 116E 11BC;D48D;1111 116E 11BC; # (풍; 풍; 풍; 풍; 풍; ) HANGUL SYLLABLE PUNG D48E;D48E;1111 116E 11BD;D48E;1111 116E 11BD; # (풎; 풎; 풎; 풎; 풎; ) HANGUL SYLLABLE PUJ D48F;D48F;1111 116E 11BE;D48F;1111 116E 11BE; # (풏; 풏; 풏; 풏; 풏; ) HANGUL SYLLABLE PUC D490;D490;1111 116E 11BF;D490;1111 116E 11BF; # (풐; 풐; 풐; 풐; 풐; ) HANGUL SYLLABLE PUK D491;D491;1111 116E 11C0;D491;1111 116E 11C0; # (풑; 풑; 풑; 풑; 풑; ) HANGUL SYLLABLE PUT D492;D492;1111 116E 11C1;D492;1111 116E 11C1; # (풒; 풒; 풒; 풒; 풒; ) HANGUL SYLLABLE PUP D493;D493;1111 116E 11C2;D493;1111 116E 11C2; # (풓; 풓; 풓; 풓; 풓; ) HANGUL SYLLABLE PUH D494;D494;1111 116F;D494;1111 116F; # (풔; 풔; 풔; 풔; 풔; ) HANGUL SYLLABLE PWEO D495;D495;1111 116F 11A8;D495;1111 116F 11A8; # (풕; 풕; 풕; 풕; 풕; ) HANGUL SYLLABLE PWEOG D496;D496;1111 116F 11A9;D496;1111 116F 11A9; # (풖; 풖; 풖; 풖; 풖; ) HANGUL SYLLABLE PWEOGG D497;D497;1111 116F 11AA;D497;1111 116F 11AA; # (풗; 풗; 풗; 풗; 풗; ) HANGUL SYLLABLE PWEOGS D498;D498;1111 116F 11AB;D498;1111 116F 11AB; # (풘; 풘; 풘; 풘; 풘; ) HANGUL SYLLABLE PWEON D499;D499;1111 116F 11AC;D499;1111 116F 11AC; # (풙; 풙; 풙; 풙; 풙; ) HANGUL SYLLABLE PWEONJ D49A;D49A;1111 116F 11AD;D49A;1111 116F 11AD; # (풚; 풚; 풚; 풚; 풚; ) HANGUL SYLLABLE PWEONH D49B;D49B;1111 116F 11AE;D49B;1111 116F 11AE; # (풛; 풛; 풛; 풛; 풛; ) HANGUL SYLLABLE PWEOD D49C;D49C;1111 116F 11AF;D49C;1111 116F 11AF; # (풜; 풜; 풜; 풜; 풜; ) HANGUL SYLLABLE PWEOL D49D;D49D;1111 116F 11B0;D49D;1111 116F 11B0; # (풝; 풝; 풝; 풝; 풝; ) HANGUL SYLLABLE PWEOLG D49E;D49E;1111 116F 11B1;D49E;1111 116F 11B1; # (풞; 풞; 풞; 풞; 풞; ) HANGUL SYLLABLE PWEOLM D49F;D49F;1111 116F 11B2;D49F;1111 116F 11B2; # (풟; 풟; 풟; 풟; 풟; ) HANGUL SYLLABLE PWEOLB D4A0;D4A0;1111 116F 11B3;D4A0;1111 116F 11B3; # (풠; 풠; 풠; 풠; 풠; ) HANGUL SYLLABLE PWEOLS D4A1;D4A1;1111 116F 11B4;D4A1;1111 116F 11B4; # (풡; 풡; 풡; 풡; 풡; ) HANGUL SYLLABLE PWEOLT D4A2;D4A2;1111 116F 11B5;D4A2;1111 116F 11B5; # (풢; 풢; 풢; 풢; 풢; ) HANGUL SYLLABLE PWEOLP D4A3;D4A3;1111 116F 11B6;D4A3;1111 116F 11B6; # (풣; 풣; 풣; 풣; 풣; ) HANGUL SYLLABLE PWEOLH D4A4;D4A4;1111 116F 11B7;D4A4;1111 116F 11B7; # (풤; 풤; 풤; 풤; 풤; ) HANGUL SYLLABLE PWEOM D4A5;D4A5;1111 116F 11B8;D4A5;1111 116F 11B8; # (풥; 풥; 풥; 풥; 풥; ) HANGUL SYLLABLE PWEOB D4A6;D4A6;1111 116F 11B9;D4A6;1111 116F 11B9; # (풦; 풦; 풦; 풦; 풦; ) HANGUL SYLLABLE PWEOBS D4A7;D4A7;1111 116F 11BA;D4A7;1111 116F 11BA; # (풧; 풧; 풧; 풧; 풧; ) HANGUL SYLLABLE PWEOS D4A8;D4A8;1111 116F 11BB;D4A8;1111 116F 11BB; # (풨; 풨; 풨; 풨; 풨; ) HANGUL SYLLABLE PWEOSS D4A9;D4A9;1111 116F 11BC;D4A9;1111 116F 11BC; # (풩; 풩; 풩; 풩; 풩; ) HANGUL SYLLABLE PWEONG D4AA;D4AA;1111 116F 11BD;D4AA;1111 116F 11BD; # (풪; 풪; 풪; 풪; 풪; ) HANGUL SYLLABLE PWEOJ D4AB;D4AB;1111 116F 11BE;D4AB;1111 116F 11BE; # (풫; 풫; 풫; 풫; 풫; ) HANGUL SYLLABLE PWEOC D4AC;D4AC;1111 116F 11BF;D4AC;1111 116F 11BF; # (풬; 풬; 풬; 풬; 풬; ) HANGUL SYLLABLE PWEOK D4AD;D4AD;1111 116F 11C0;D4AD;1111 116F 11C0; # (풭; 풭; 풭; 풭; 풭; ) HANGUL SYLLABLE PWEOT D4AE;D4AE;1111 116F 11C1;D4AE;1111 116F 11C1; # (풮; 풮; 풮; 풮; 풮; ) HANGUL SYLLABLE PWEOP D4AF;D4AF;1111 116F 11C2;D4AF;1111 116F 11C2; # (풯; 풯; 풯; 풯; 풯; ) HANGUL SYLLABLE PWEOH D4B0;D4B0;1111 1170;D4B0;1111 1170; # (풰; 풰; 풰; 풰; 풰; ) HANGUL SYLLABLE PWE D4B1;D4B1;1111 1170 11A8;D4B1;1111 1170 11A8; # (풱; 풱; 풱; 풱; 풱; ) HANGUL SYLLABLE PWEG D4B2;D4B2;1111 1170 11A9;D4B2;1111 1170 11A9; # (풲; 풲; 풲; 풲; 풲; ) HANGUL SYLLABLE PWEGG D4B3;D4B3;1111 1170 11AA;D4B3;1111 1170 11AA; # (풳; 풳; 풳; 풳; 풳; ) HANGUL SYLLABLE PWEGS D4B4;D4B4;1111 1170 11AB;D4B4;1111 1170 11AB; # (풴; 풴; 풴; 풴; 풴; ) HANGUL SYLLABLE PWEN D4B5;D4B5;1111 1170 11AC;D4B5;1111 1170 11AC; # (풵; 풵; 풵; 풵; 풵; ) HANGUL SYLLABLE PWENJ D4B6;D4B6;1111 1170 11AD;D4B6;1111 1170 11AD; # (풶; 풶; 풶; 풶; 풶; ) HANGUL SYLLABLE PWENH D4B7;D4B7;1111 1170 11AE;D4B7;1111 1170 11AE; # (풷; 풷; 풷; 풷; 풷; ) HANGUL SYLLABLE PWED D4B8;D4B8;1111 1170 11AF;D4B8;1111 1170 11AF; # (풸; 풸; 풸; 풸; 풸; ) HANGUL SYLLABLE PWEL D4B9;D4B9;1111 1170 11B0;D4B9;1111 1170 11B0; # (풹; 풹; 풹; 풹; 풹; ) HANGUL SYLLABLE PWELG D4BA;D4BA;1111 1170 11B1;D4BA;1111 1170 11B1; # (풺; 풺; 풺; 풺; 풺; ) HANGUL SYLLABLE PWELM D4BB;D4BB;1111 1170 11B2;D4BB;1111 1170 11B2; # (풻; 풻; 풻; 풻; 풻; ) HANGUL SYLLABLE PWELB D4BC;D4BC;1111 1170 11B3;D4BC;1111 1170 11B3; # (풼; 풼; 풼; 풼; 풼; ) HANGUL SYLLABLE PWELS D4BD;D4BD;1111 1170 11B4;D4BD;1111 1170 11B4; # (풽; 풽; 풽; 풽; 풽; ) HANGUL SYLLABLE PWELT D4BE;D4BE;1111 1170 11B5;D4BE;1111 1170 11B5; # (풾; 풾; 풾; 풾; 풾; ) HANGUL SYLLABLE PWELP D4BF;D4BF;1111 1170 11B6;D4BF;1111 1170 11B6; # (풿; 풿; 풿; 풿; 풿; ) HANGUL SYLLABLE PWELH D4C0;D4C0;1111 1170 11B7;D4C0;1111 1170 11B7; # (퓀; 퓀; 퓀; 퓀; 퓀; ) HANGUL SYLLABLE PWEM D4C1;D4C1;1111 1170 11B8;D4C1;1111 1170 11B8; # (퓁; 퓁; 퓁; 퓁; 퓁; ) HANGUL SYLLABLE PWEB D4C2;D4C2;1111 1170 11B9;D4C2;1111 1170 11B9; # (퓂; 퓂; 퓂; 퓂; 퓂; ) HANGUL SYLLABLE PWEBS D4C3;D4C3;1111 1170 11BA;D4C3;1111 1170 11BA; # (퓃; 퓃; 퓃; 퓃; 퓃; ) HANGUL SYLLABLE PWES D4C4;D4C4;1111 1170 11BB;D4C4;1111 1170 11BB; # (퓄; 퓄; 퓄; 퓄; 퓄; ) HANGUL SYLLABLE PWESS D4C5;D4C5;1111 1170 11BC;D4C5;1111 1170 11BC; # (퓅; 퓅; 퓅; 퓅; 퓅; ) HANGUL SYLLABLE PWENG D4C6;D4C6;1111 1170 11BD;D4C6;1111 1170 11BD; # (퓆; 퓆; 퓆; 퓆; 퓆; ) HANGUL SYLLABLE PWEJ D4C7;D4C7;1111 1170 11BE;D4C7;1111 1170 11BE; # (퓇; 퓇; 퓇; 퓇; 퓇; ) HANGUL SYLLABLE PWEC D4C8;D4C8;1111 1170 11BF;D4C8;1111 1170 11BF; # (퓈; 퓈; 퓈; 퓈; 퓈; ) HANGUL SYLLABLE PWEK D4C9;D4C9;1111 1170 11C0;D4C9;1111 1170 11C0; # (퓉; 퓉; 퓉; 퓉; 퓉; ) HANGUL SYLLABLE PWET D4CA;D4CA;1111 1170 11C1;D4CA;1111 1170 11C1; # (퓊; 퓊; 퓊; 퓊; 퓊; ) HANGUL SYLLABLE PWEP D4CB;D4CB;1111 1170 11C2;D4CB;1111 1170 11C2; # (퓋; 퓋; 퓋; 퓋; 퓋; ) HANGUL SYLLABLE PWEH D4CC;D4CC;1111 1171;D4CC;1111 1171; # (퓌; 퓌; 퓌; 퓌; 퓌; ) HANGUL SYLLABLE PWI D4CD;D4CD;1111 1171 11A8;D4CD;1111 1171 11A8; # (퓍; 퓍; 퓍; 퓍; 퓍; ) HANGUL SYLLABLE PWIG D4CE;D4CE;1111 1171 11A9;D4CE;1111 1171 11A9; # (퓎; 퓎; 퓎; 퓎; 퓎; ) HANGUL SYLLABLE PWIGG D4CF;D4CF;1111 1171 11AA;D4CF;1111 1171 11AA; # (퓏; 퓏; 퓏; 퓏; 퓏; ) HANGUL SYLLABLE PWIGS D4D0;D4D0;1111 1171 11AB;D4D0;1111 1171 11AB; # (퓐; 퓐; 퓐; 퓐; 퓐; ) HANGUL SYLLABLE PWIN D4D1;D4D1;1111 1171 11AC;D4D1;1111 1171 11AC; # (퓑; 퓑; 퓑; 퓑; 퓑; ) HANGUL SYLLABLE PWINJ D4D2;D4D2;1111 1171 11AD;D4D2;1111 1171 11AD; # (퓒; 퓒; 퓒; 퓒; 퓒; ) HANGUL SYLLABLE PWINH D4D3;D4D3;1111 1171 11AE;D4D3;1111 1171 11AE; # (퓓; 퓓; 퓓; 퓓; 퓓; ) HANGUL SYLLABLE PWID D4D4;D4D4;1111 1171 11AF;D4D4;1111 1171 11AF; # (퓔; 퓔; 퓔; 퓔; 퓔; ) HANGUL SYLLABLE PWIL D4D5;D4D5;1111 1171 11B0;D4D5;1111 1171 11B0; # (퓕; 퓕; 퓕; 퓕; 퓕; ) HANGUL SYLLABLE PWILG D4D6;D4D6;1111 1171 11B1;D4D6;1111 1171 11B1; # (퓖; 퓖; 퓖; 퓖; 퓖; ) HANGUL SYLLABLE PWILM D4D7;D4D7;1111 1171 11B2;D4D7;1111 1171 11B2; # (퓗; 퓗; 퓗; 퓗; 퓗; ) HANGUL SYLLABLE PWILB D4D8;D4D8;1111 1171 11B3;D4D8;1111 1171 11B3; # (퓘; 퓘; 퓘; 퓘; 퓘; ) HANGUL SYLLABLE PWILS D4D9;D4D9;1111 1171 11B4;D4D9;1111 1171 11B4; # (퓙; 퓙; 퓙; 퓙; 퓙; ) HANGUL SYLLABLE PWILT D4DA;D4DA;1111 1171 11B5;D4DA;1111 1171 11B5; # (퓚; 퓚; 퓚; 퓚; 퓚; ) HANGUL SYLLABLE PWILP D4DB;D4DB;1111 1171 11B6;D4DB;1111 1171 11B6; # (퓛; 퓛; 퓛; 퓛; 퓛; ) HANGUL SYLLABLE PWILH D4DC;D4DC;1111 1171 11B7;D4DC;1111 1171 11B7; # (퓜; 퓜; 퓜; 퓜; 퓜; ) HANGUL SYLLABLE PWIM D4DD;D4DD;1111 1171 11B8;D4DD;1111 1171 11B8; # (퓝; 퓝; 퓝; 퓝; 퓝; ) HANGUL SYLLABLE PWIB D4DE;D4DE;1111 1171 11B9;D4DE;1111 1171 11B9; # (퓞; 퓞; 퓞; 퓞; 퓞; ) HANGUL SYLLABLE PWIBS D4DF;D4DF;1111 1171 11BA;D4DF;1111 1171 11BA; # (퓟; 퓟; 퓟; 퓟; 퓟; ) HANGUL SYLLABLE PWIS D4E0;D4E0;1111 1171 11BB;D4E0;1111 1171 11BB; # (퓠; 퓠; 퓠; 퓠; 퓠; ) HANGUL SYLLABLE PWISS D4E1;D4E1;1111 1171 11BC;D4E1;1111 1171 11BC; # (퓡; 퓡; 퓡; 퓡; 퓡; ) HANGUL SYLLABLE PWING D4E2;D4E2;1111 1171 11BD;D4E2;1111 1171 11BD; # (퓢; 퓢; 퓢; 퓢; 퓢; ) HANGUL SYLLABLE PWIJ D4E3;D4E3;1111 1171 11BE;D4E3;1111 1171 11BE; # (퓣; 퓣; 퓣; 퓣; 퓣; ) HANGUL SYLLABLE PWIC D4E4;D4E4;1111 1171 11BF;D4E4;1111 1171 11BF; # (퓤; 퓤; 퓤; 퓤; 퓤; ) HANGUL SYLLABLE PWIK D4E5;D4E5;1111 1171 11C0;D4E5;1111 1171 11C0; # (퓥; 퓥; 퓥; 퓥; 퓥; ) HANGUL SYLLABLE PWIT D4E6;D4E6;1111 1171 11C1;D4E6;1111 1171 11C1; # (퓦; 퓦; 퓦; 퓦; 퓦; ) HANGUL SYLLABLE PWIP D4E7;D4E7;1111 1171 11C2;D4E7;1111 1171 11C2; # (퓧; 퓧; 퓧; 퓧; 퓧; ) HANGUL SYLLABLE PWIH D4E8;D4E8;1111 1172;D4E8;1111 1172; # (퓨; 퓨; 퓨; 퓨; 퓨; ) HANGUL SYLLABLE PYU D4E9;D4E9;1111 1172 11A8;D4E9;1111 1172 11A8; # (퓩; 퓩; 퓩; 퓩; 퓩; ) HANGUL SYLLABLE PYUG D4EA;D4EA;1111 1172 11A9;D4EA;1111 1172 11A9; # (퓪; 퓪; 퓪; 퓪; 퓪; ) HANGUL SYLLABLE PYUGG D4EB;D4EB;1111 1172 11AA;D4EB;1111 1172 11AA; # (퓫; 퓫; 퓫; 퓫; 퓫; ) HANGUL SYLLABLE PYUGS D4EC;D4EC;1111 1172 11AB;D4EC;1111 1172 11AB; # (퓬; 퓬; 퓬; 퓬; 퓬; ) HANGUL SYLLABLE PYUN D4ED;D4ED;1111 1172 11AC;D4ED;1111 1172 11AC; # (퓭; 퓭; 퓭; 퓭; 퓭; ) HANGUL SYLLABLE PYUNJ D4EE;D4EE;1111 1172 11AD;D4EE;1111 1172 11AD; # (퓮; 퓮; 퓮; 퓮; 퓮; ) HANGUL SYLLABLE PYUNH D4EF;D4EF;1111 1172 11AE;D4EF;1111 1172 11AE; # (퓯; 퓯; 퓯; 퓯; 퓯; ) HANGUL SYLLABLE PYUD D4F0;D4F0;1111 1172 11AF;D4F0;1111 1172 11AF; # (퓰; 퓰; 퓰; 퓰; 퓰; ) HANGUL SYLLABLE PYUL D4F1;D4F1;1111 1172 11B0;D4F1;1111 1172 11B0; # (퓱; 퓱; 퓱; 퓱; 퓱; ) HANGUL SYLLABLE PYULG D4F2;D4F2;1111 1172 11B1;D4F2;1111 1172 11B1; # (퓲; 퓲; 퓲; 퓲; 퓲; ) HANGUL SYLLABLE PYULM D4F3;D4F3;1111 1172 11B2;D4F3;1111 1172 11B2; # (퓳; 퓳; 퓳; 퓳; 퓳; ) HANGUL SYLLABLE PYULB D4F4;D4F4;1111 1172 11B3;D4F4;1111 1172 11B3; # (퓴; 퓴; 퓴; 퓴; 퓴; ) HANGUL SYLLABLE PYULS D4F5;D4F5;1111 1172 11B4;D4F5;1111 1172 11B4; # (퓵; 퓵; 퓵; 퓵; 퓵; ) HANGUL SYLLABLE PYULT D4F6;D4F6;1111 1172 11B5;D4F6;1111 1172 11B5; # (퓶; 퓶; 퓶; 퓶; 퓶; ) HANGUL SYLLABLE PYULP D4F7;D4F7;1111 1172 11B6;D4F7;1111 1172 11B6; # (퓷; 퓷; 퓷; 퓷; 퓷; ) HANGUL SYLLABLE PYULH D4F8;D4F8;1111 1172 11B7;D4F8;1111 1172 11B7; # (퓸; 퓸; 퓸; 퓸; 퓸; ) HANGUL SYLLABLE PYUM D4F9;D4F9;1111 1172 11B8;D4F9;1111 1172 11B8; # (퓹; 퓹; 퓹; 퓹; 퓹; ) HANGUL SYLLABLE PYUB D4FA;D4FA;1111 1172 11B9;D4FA;1111 1172 11B9; # (퓺; 퓺; 퓺; 퓺; 퓺; ) HANGUL SYLLABLE PYUBS D4FB;D4FB;1111 1172 11BA;D4FB;1111 1172 11BA; # (퓻; 퓻; 퓻; 퓻; 퓻; ) HANGUL SYLLABLE PYUS D4FC;D4FC;1111 1172 11BB;D4FC;1111 1172 11BB; # (퓼; 퓼; 퓼; 퓼; 퓼; ) HANGUL SYLLABLE PYUSS D4FD;D4FD;1111 1172 11BC;D4FD;1111 1172 11BC; # (퓽; 퓽; 퓽; 퓽; 퓽; ) HANGUL SYLLABLE PYUNG D4FE;D4FE;1111 1172 11BD;D4FE;1111 1172 11BD; # (퓾; 퓾; 퓾; 퓾; 퓾; ) HANGUL SYLLABLE PYUJ D4FF;D4FF;1111 1172 11BE;D4FF;1111 1172 11BE; # (퓿; 퓿; 퓿; 퓿; 퓿; ) HANGUL SYLLABLE PYUC D500;D500;1111 1172 11BF;D500;1111 1172 11BF; # (픀; 픀; 픀; 픀; 픀; ) HANGUL SYLLABLE PYUK D501;D501;1111 1172 11C0;D501;1111 1172 11C0; # (픁; 픁; 픁; 픁; 픁; ) HANGUL SYLLABLE PYUT D502;D502;1111 1172 11C1;D502;1111 1172 11C1; # (픂; 픂; 픂; 픂; 픂; ) HANGUL SYLLABLE PYUP D503;D503;1111 1172 11C2;D503;1111 1172 11C2; # (픃; 픃; 픃; 픃; 픃; ) HANGUL SYLLABLE PYUH D504;D504;1111 1173;D504;1111 1173; # (프; 프; 프; 프; 프; ) HANGUL SYLLABLE PEU D505;D505;1111 1173 11A8;D505;1111 1173 11A8; # (픅; 픅; 픅; 픅; 픅; ) HANGUL SYLLABLE PEUG D506;D506;1111 1173 11A9;D506;1111 1173 11A9; # (픆; 픆; 픆; 픆; 픆; ) HANGUL SYLLABLE PEUGG D507;D507;1111 1173 11AA;D507;1111 1173 11AA; # (픇; 픇; 픇; 픇; 픇; ) HANGUL SYLLABLE PEUGS D508;D508;1111 1173 11AB;D508;1111 1173 11AB; # (픈; 픈; 픈; 픈; 픈; ) HANGUL SYLLABLE PEUN D509;D509;1111 1173 11AC;D509;1111 1173 11AC; # (픉; 픉; 픉; 픉; 픉; ) HANGUL SYLLABLE PEUNJ D50A;D50A;1111 1173 11AD;D50A;1111 1173 11AD; # (픊; 픊; 픊; 픊; 픊; ) HANGUL SYLLABLE PEUNH D50B;D50B;1111 1173 11AE;D50B;1111 1173 11AE; # (픋; 픋; 픋; 픋; 픋; ) HANGUL SYLLABLE PEUD D50C;D50C;1111 1173 11AF;D50C;1111 1173 11AF; # (플; 플; 플; 플; 플; ) HANGUL SYLLABLE PEUL D50D;D50D;1111 1173 11B0;D50D;1111 1173 11B0; # (픍; 픍; 픍; 픍; 픍; ) HANGUL SYLLABLE PEULG D50E;D50E;1111 1173 11B1;D50E;1111 1173 11B1; # (픎; 픎; 픎; 픎; 픎; ) HANGUL SYLLABLE PEULM D50F;D50F;1111 1173 11B2;D50F;1111 1173 11B2; # (픏; 픏; 픏; 픏; 픏; ) HANGUL SYLLABLE PEULB D510;D510;1111 1173 11B3;D510;1111 1173 11B3; # (픐; 픐; 픐; 픐; 픐; ) HANGUL SYLLABLE PEULS D511;D511;1111 1173 11B4;D511;1111 1173 11B4; # (픑; 픑; 픑; 픑; 픑; ) HANGUL SYLLABLE PEULT D512;D512;1111 1173 11B5;D512;1111 1173 11B5; # (픒; 픒; 픒; 픒; 픒; ) HANGUL SYLLABLE PEULP D513;D513;1111 1173 11B6;D513;1111 1173 11B6; # (픓; 픓; 픓; 픓; 픓; ) HANGUL SYLLABLE PEULH D514;D514;1111 1173 11B7;D514;1111 1173 11B7; # (픔; 픔; 픔; 픔; 픔; ) HANGUL SYLLABLE PEUM D515;D515;1111 1173 11B8;D515;1111 1173 11B8; # (픕; 픕; 픕; 픕; 픕; ) HANGUL SYLLABLE PEUB D516;D516;1111 1173 11B9;D516;1111 1173 11B9; # (픖; 픖; 픖; 픖; 픖; ) HANGUL SYLLABLE PEUBS D517;D517;1111 1173 11BA;D517;1111 1173 11BA; # (픗; 픗; 픗; 픗; 픗; ) HANGUL SYLLABLE PEUS D518;D518;1111 1173 11BB;D518;1111 1173 11BB; # (픘; 픘; 픘; 픘; 픘; ) HANGUL SYLLABLE PEUSS D519;D519;1111 1173 11BC;D519;1111 1173 11BC; # (픙; 픙; 픙; 픙; 픙; ) HANGUL SYLLABLE PEUNG D51A;D51A;1111 1173 11BD;D51A;1111 1173 11BD; # (픚; 픚; 픚; 픚; 픚; ) HANGUL SYLLABLE PEUJ D51B;D51B;1111 1173 11BE;D51B;1111 1173 11BE; # (픛; 픛; 픛; 픛; 픛; ) HANGUL SYLLABLE PEUC D51C;D51C;1111 1173 11BF;D51C;1111 1173 11BF; # (픜; 픜; 픜; 픜; 픜; ) HANGUL SYLLABLE PEUK D51D;D51D;1111 1173 11C0;D51D;1111 1173 11C0; # (픝; 픝; 픝; 픝; 픝; ) HANGUL SYLLABLE PEUT D51E;D51E;1111 1173 11C1;D51E;1111 1173 11C1; # (픞; 픞; 픞; 픞; 픞; ) HANGUL SYLLABLE PEUP D51F;D51F;1111 1173 11C2;D51F;1111 1173 11C2; # (픟; 픟; 픟; 픟; 픟; ) HANGUL SYLLABLE PEUH D520;D520;1111 1174;D520;1111 1174; # (픠; 픠; 픠; 픠; 픠; ) HANGUL SYLLABLE PYI D521;D521;1111 1174 11A8;D521;1111 1174 11A8; # (픡; 픡; 픡; 픡; 픡; ) HANGUL SYLLABLE PYIG D522;D522;1111 1174 11A9;D522;1111 1174 11A9; # (픢; 픢; 픢; 픢; 픢; ) HANGUL SYLLABLE PYIGG D523;D523;1111 1174 11AA;D523;1111 1174 11AA; # (픣; 픣; 픣; 픣; 픣; ) HANGUL SYLLABLE PYIGS D524;D524;1111 1174 11AB;D524;1111 1174 11AB; # (픤; 픤; 픤; 픤; 픤; ) HANGUL SYLLABLE PYIN D525;D525;1111 1174 11AC;D525;1111 1174 11AC; # (픥; 픥; 픥; 픥; 픥; ) HANGUL SYLLABLE PYINJ D526;D526;1111 1174 11AD;D526;1111 1174 11AD; # (픦; 픦; 픦; 픦; 픦; ) HANGUL SYLLABLE PYINH D527;D527;1111 1174 11AE;D527;1111 1174 11AE; # (픧; 픧; 픧; 픧; 픧; ) HANGUL SYLLABLE PYID D528;D528;1111 1174 11AF;D528;1111 1174 11AF; # (픨; 픨; 픨; 픨; 픨; ) HANGUL SYLLABLE PYIL D529;D529;1111 1174 11B0;D529;1111 1174 11B0; # (픩; 픩; 픩; 픩; 픩; ) HANGUL SYLLABLE PYILG D52A;D52A;1111 1174 11B1;D52A;1111 1174 11B1; # (픪; 픪; 픪; 픪; 픪; ) HANGUL SYLLABLE PYILM D52B;D52B;1111 1174 11B2;D52B;1111 1174 11B2; # (픫; 픫; 픫; 픫; 픫; ) HANGUL SYLLABLE PYILB D52C;D52C;1111 1174 11B3;D52C;1111 1174 11B3; # (픬; 픬; 픬; 픬; 픬; ) HANGUL SYLLABLE PYILS D52D;D52D;1111 1174 11B4;D52D;1111 1174 11B4; # (픭; 픭; 픭; 픭; 픭; ) HANGUL SYLLABLE PYILT D52E;D52E;1111 1174 11B5;D52E;1111 1174 11B5; # (픮; 픮; 픮; 픮; 픮; ) HANGUL SYLLABLE PYILP D52F;D52F;1111 1174 11B6;D52F;1111 1174 11B6; # (픯; 픯; 픯; 픯; 픯; ) HANGUL SYLLABLE PYILH D530;D530;1111 1174 11B7;D530;1111 1174 11B7; # (픰; 픰; 픰; 픰; 픰; ) HANGUL SYLLABLE PYIM D531;D531;1111 1174 11B8;D531;1111 1174 11B8; # (픱; 픱; 픱; 픱; 픱; ) HANGUL SYLLABLE PYIB D532;D532;1111 1174 11B9;D532;1111 1174 11B9; # (픲; 픲; 픲; 픲; 픲; ) HANGUL SYLLABLE PYIBS D533;D533;1111 1174 11BA;D533;1111 1174 11BA; # (픳; 픳; 픳; 픳; 픳; ) HANGUL SYLLABLE PYIS D534;D534;1111 1174 11BB;D534;1111 1174 11BB; # (픴; 픴; 픴; 픴; 픴; ) HANGUL SYLLABLE PYISS D535;D535;1111 1174 11BC;D535;1111 1174 11BC; # (픵; 픵; 픵; 픵; 픵; ) HANGUL SYLLABLE PYING D536;D536;1111 1174 11BD;D536;1111 1174 11BD; # (픶; 픶; 픶; 픶; 픶; ) HANGUL SYLLABLE PYIJ D537;D537;1111 1174 11BE;D537;1111 1174 11BE; # (픷; 픷; 픷; 픷; 픷; ) HANGUL SYLLABLE PYIC D538;D538;1111 1174 11BF;D538;1111 1174 11BF; # (픸; 픸; 픸; 픸; 픸; ) HANGUL SYLLABLE PYIK D539;D539;1111 1174 11C0;D539;1111 1174 11C0; # (픹; 픹; 픹; 픹; 픹; ) HANGUL SYLLABLE PYIT D53A;D53A;1111 1174 11C1;D53A;1111 1174 11C1; # (픺; 픺; 픺; 픺; 픺; ) HANGUL SYLLABLE PYIP D53B;D53B;1111 1174 11C2;D53B;1111 1174 11C2; # (픻; 픻; 픻; 픻; 픻; ) HANGUL SYLLABLE PYIH D53C;D53C;1111 1175;D53C;1111 1175; # (피; 피; 피; 피; 피; ) HANGUL SYLLABLE PI D53D;D53D;1111 1175 11A8;D53D;1111 1175 11A8; # (픽; 픽; 픽; 픽; 픽; ) HANGUL SYLLABLE PIG D53E;D53E;1111 1175 11A9;D53E;1111 1175 11A9; # (픾; 픾; 픾; 픾; 픾; ) HANGUL SYLLABLE PIGG D53F;D53F;1111 1175 11AA;D53F;1111 1175 11AA; # (픿; 픿; 픿; 픿; 픿; ) HANGUL SYLLABLE PIGS D540;D540;1111 1175 11AB;D540;1111 1175 11AB; # (핀; 핀; 핀; 핀; 핀; ) HANGUL SYLLABLE PIN D541;D541;1111 1175 11AC;D541;1111 1175 11AC; # (핁; 핁; 핁; 핁; 핁; ) HANGUL SYLLABLE PINJ D542;D542;1111 1175 11AD;D542;1111 1175 11AD; # (핂; 핂; 핂; 핂; 핂; ) HANGUL SYLLABLE PINH D543;D543;1111 1175 11AE;D543;1111 1175 11AE; # (핃; 핃; 핃; 핃; 핃; ) HANGUL SYLLABLE PID D544;D544;1111 1175 11AF;D544;1111 1175 11AF; # (필; 필; 필; 필; 필; ) HANGUL SYLLABLE PIL D545;D545;1111 1175 11B0;D545;1111 1175 11B0; # (핅; 핅; 핅; 핅; 핅; ) HANGUL SYLLABLE PILG D546;D546;1111 1175 11B1;D546;1111 1175 11B1; # (핆; 핆; 핆; 핆; 핆; ) HANGUL SYLLABLE PILM D547;D547;1111 1175 11B2;D547;1111 1175 11B2; # (핇; 핇; 핇; 핇; 핇; ) HANGUL SYLLABLE PILB D548;D548;1111 1175 11B3;D548;1111 1175 11B3; # (핈; 핈; 핈; 핈; 핈; ) HANGUL SYLLABLE PILS D549;D549;1111 1175 11B4;D549;1111 1175 11B4; # (핉; 핉; 핉; 핉; 핉; ) HANGUL SYLLABLE PILT D54A;D54A;1111 1175 11B5;D54A;1111 1175 11B5; # (핊; 핊; 핊; 핊; 핊; ) HANGUL SYLLABLE PILP D54B;D54B;1111 1175 11B6;D54B;1111 1175 11B6; # (핋; 핋; 핋; 핋; 핋; ) HANGUL SYLLABLE PILH D54C;D54C;1111 1175 11B7;D54C;1111 1175 11B7; # (핌; 핌; 핌; 핌; 핌; ) HANGUL SYLLABLE PIM D54D;D54D;1111 1175 11B8;D54D;1111 1175 11B8; # (핍; 핍; 핍; 핍; 핍; ) HANGUL SYLLABLE PIB D54E;D54E;1111 1175 11B9;D54E;1111 1175 11B9; # (핎; 핎; 핎; 핎; 핎; ) HANGUL SYLLABLE PIBS D54F;D54F;1111 1175 11BA;D54F;1111 1175 11BA; # (핏; 핏; 핏; 핏; 핏; ) HANGUL SYLLABLE PIS D550;D550;1111 1175 11BB;D550;1111 1175 11BB; # (핐; 핐; 핐; 핐; 핐; ) HANGUL SYLLABLE PISS D551;D551;1111 1175 11BC;D551;1111 1175 11BC; # (핑; 핑; 핑; 핑; 핑; ) HANGUL SYLLABLE PING D552;D552;1111 1175 11BD;D552;1111 1175 11BD; # (핒; 핒; 핒; 핒; 핒; ) HANGUL SYLLABLE PIJ D553;D553;1111 1175 11BE;D553;1111 1175 11BE; # (핓; 핓; 핓; 핓; 핓; ) HANGUL SYLLABLE PIC D554;D554;1111 1175 11BF;D554;1111 1175 11BF; # (핔; 핔; 핔; 핔; 핔; ) HANGUL SYLLABLE PIK D555;D555;1111 1175 11C0;D555;1111 1175 11C0; # (핕; 핕; 핕; 핕; 핕; ) HANGUL SYLLABLE PIT D556;D556;1111 1175 11C1;D556;1111 1175 11C1; # (핖; 핖; 핖; 핖; 핖; ) HANGUL SYLLABLE PIP D557;D557;1111 1175 11C2;D557;1111 1175 11C2; # (핗; 핗; 핗; 핗; 핗; ) HANGUL SYLLABLE PIH D558;D558;1112 1161;D558;1112 1161; # (하; 하; 하; 하; 하; ) HANGUL SYLLABLE HA D559;D559;1112 1161 11A8;D559;1112 1161 11A8; # (학; 학; 학; 학; 학; ) HANGUL SYLLABLE HAG D55A;D55A;1112 1161 11A9;D55A;1112 1161 11A9; # (핚; 핚; 핚; 핚; 핚; ) HANGUL SYLLABLE HAGG D55B;D55B;1112 1161 11AA;D55B;1112 1161 11AA; # (핛; 핛; 핛; 핛; 핛; ) HANGUL SYLLABLE HAGS D55C;D55C;1112 1161 11AB;D55C;1112 1161 11AB; # (한; 한; 한; 한; 한; ) HANGUL SYLLABLE HAN D55D;D55D;1112 1161 11AC;D55D;1112 1161 11AC; # (핝; 핝; 핝; 핝; 핝; ) HANGUL SYLLABLE HANJ D55E;D55E;1112 1161 11AD;D55E;1112 1161 11AD; # (핞; 핞; 핞; 핞; 핞; ) HANGUL SYLLABLE HANH D55F;D55F;1112 1161 11AE;D55F;1112 1161 11AE; # (핟; 핟; 핟; 핟; 핟; ) HANGUL SYLLABLE HAD D560;D560;1112 1161 11AF;D560;1112 1161 11AF; # (할; 할; 할; 할; 할; ) HANGUL SYLLABLE HAL D561;D561;1112 1161 11B0;D561;1112 1161 11B0; # (핡; 핡; 핡; 핡; 핡; ) HANGUL SYLLABLE HALG D562;D562;1112 1161 11B1;D562;1112 1161 11B1; # (핢; 핢; 핢; 핢; 핢; ) HANGUL SYLLABLE HALM D563;D563;1112 1161 11B2;D563;1112 1161 11B2; # (핣; 핣; 핣; 핣; 핣; ) HANGUL SYLLABLE HALB D564;D564;1112 1161 11B3;D564;1112 1161 11B3; # (핤; 핤; 핤; 핤; 핤; ) HANGUL SYLLABLE HALS D565;D565;1112 1161 11B4;D565;1112 1161 11B4; # (핥; 핥; 핥; 핥; 핥; ) HANGUL SYLLABLE HALT D566;D566;1112 1161 11B5;D566;1112 1161 11B5; # (핦; 핦; 핦; 핦; 핦; ) HANGUL SYLLABLE HALP D567;D567;1112 1161 11B6;D567;1112 1161 11B6; # (핧; 핧; 핧; 핧; 핧; ) HANGUL SYLLABLE HALH D568;D568;1112 1161 11B7;D568;1112 1161 11B7; # (함; 함; 함; 함; 함; ) HANGUL SYLLABLE HAM D569;D569;1112 1161 11B8;D569;1112 1161 11B8; # (합; 합; 합; 합; 합; ) HANGUL SYLLABLE HAB D56A;D56A;1112 1161 11B9;D56A;1112 1161 11B9; # (핪; 핪; 핪; 핪; 핪; ) HANGUL SYLLABLE HABS D56B;D56B;1112 1161 11BA;D56B;1112 1161 11BA; # (핫; 핫; 핫; 핫; 핫; ) HANGUL SYLLABLE HAS D56C;D56C;1112 1161 11BB;D56C;1112 1161 11BB; # (핬; 핬; 핬; 핬; 핬; ) HANGUL SYLLABLE HASS D56D;D56D;1112 1161 11BC;D56D;1112 1161 11BC; # (항; 항; 항; 항; 항; ) HANGUL SYLLABLE HANG D56E;D56E;1112 1161 11BD;D56E;1112 1161 11BD; # (핮; 핮; 핮; 핮; 핮; ) HANGUL SYLLABLE HAJ D56F;D56F;1112 1161 11BE;D56F;1112 1161 11BE; # (핯; 핯; 핯; 핯; 핯; ) HANGUL SYLLABLE HAC D570;D570;1112 1161 11BF;D570;1112 1161 11BF; # (핰; 핰; 핰; 핰; 핰; ) HANGUL SYLLABLE HAK D571;D571;1112 1161 11C0;D571;1112 1161 11C0; # (핱; 핱; 핱; 핱; 핱; ) HANGUL SYLLABLE HAT D572;D572;1112 1161 11C1;D572;1112 1161 11C1; # (핲; 핲; 핲; 핲; 핲; ) HANGUL SYLLABLE HAP D573;D573;1112 1161 11C2;D573;1112 1161 11C2; # (핳; 핳; 핳; 핳; 핳; ) HANGUL SYLLABLE HAH D574;D574;1112 1162;D574;1112 1162; # (해; 해; 해; 해; 해; ) HANGUL SYLLABLE HAE D575;D575;1112 1162 11A8;D575;1112 1162 11A8; # (핵; 핵; 핵; 핵; 핵; ) HANGUL SYLLABLE HAEG D576;D576;1112 1162 11A9;D576;1112 1162 11A9; # (핶; 핶; 핶; 핶; 핶; ) HANGUL SYLLABLE HAEGG D577;D577;1112 1162 11AA;D577;1112 1162 11AA; # (핷; 핷; 핷; 핷; 핷; ) HANGUL SYLLABLE HAEGS D578;D578;1112 1162 11AB;D578;1112 1162 11AB; # (핸; 핸; 핸; 핸; 핸; ) HANGUL SYLLABLE HAEN D579;D579;1112 1162 11AC;D579;1112 1162 11AC; # (핹; 핹; 핹; 핹; 핹; ) HANGUL SYLLABLE HAENJ D57A;D57A;1112 1162 11AD;D57A;1112 1162 11AD; # (핺; 핺; 핺; 핺; 핺; ) HANGUL SYLLABLE HAENH D57B;D57B;1112 1162 11AE;D57B;1112 1162 11AE; # (핻; 핻; 핻; 핻; 핻; ) HANGUL SYLLABLE HAED D57C;D57C;1112 1162 11AF;D57C;1112 1162 11AF; # (핼; 핼; 핼; 핼; 핼; ) HANGUL SYLLABLE HAEL D57D;D57D;1112 1162 11B0;D57D;1112 1162 11B0; # (핽; 핽; 핽; 핽; 핽; ) HANGUL SYLLABLE HAELG D57E;D57E;1112 1162 11B1;D57E;1112 1162 11B1; # (핾; 핾; 핾; 핾; 핾; ) HANGUL SYLLABLE HAELM D57F;D57F;1112 1162 11B2;D57F;1112 1162 11B2; # (핿; 핿; 핿; 핿; 핿; ) HANGUL SYLLABLE HAELB D580;D580;1112 1162 11B3;D580;1112 1162 11B3; # (햀; 햀; 햀; 햀; 햀; ) HANGUL SYLLABLE HAELS D581;D581;1112 1162 11B4;D581;1112 1162 11B4; # (햁; 햁; 햁; 햁; 햁; ) HANGUL SYLLABLE HAELT D582;D582;1112 1162 11B5;D582;1112 1162 11B5; # (햂; 햂; 햂; 햂; 햂; ) HANGUL SYLLABLE HAELP D583;D583;1112 1162 11B6;D583;1112 1162 11B6; # (햃; 햃; 햃; 햃; 햃; ) HANGUL SYLLABLE HAELH D584;D584;1112 1162 11B7;D584;1112 1162 11B7; # (햄; 햄; 햄; 햄; 햄; ) HANGUL SYLLABLE HAEM D585;D585;1112 1162 11B8;D585;1112 1162 11B8; # (햅; 햅; 햅; 햅; 햅; ) HANGUL SYLLABLE HAEB D586;D586;1112 1162 11B9;D586;1112 1162 11B9; # (햆; 햆; 햆; 햆; 햆; ) HANGUL SYLLABLE HAEBS D587;D587;1112 1162 11BA;D587;1112 1162 11BA; # (햇; 햇; 햇; 햇; 햇; ) HANGUL SYLLABLE HAES D588;D588;1112 1162 11BB;D588;1112 1162 11BB; # (했; 했; 했; 했; 했; ) HANGUL SYLLABLE HAESS D589;D589;1112 1162 11BC;D589;1112 1162 11BC; # (행; 행; 행; 행; 행; ) HANGUL SYLLABLE HAENG D58A;D58A;1112 1162 11BD;D58A;1112 1162 11BD; # (햊; 햊; 햊; 햊; 햊; ) HANGUL SYLLABLE HAEJ D58B;D58B;1112 1162 11BE;D58B;1112 1162 11BE; # (햋; 햋; 햋; 햋; 햋; ) HANGUL SYLLABLE HAEC D58C;D58C;1112 1162 11BF;D58C;1112 1162 11BF; # (햌; 햌; 햌; 햌; 햌; ) HANGUL SYLLABLE HAEK D58D;D58D;1112 1162 11C0;D58D;1112 1162 11C0; # (햍; 햍; 햍; 햍; 햍; ) HANGUL SYLLABLE HAET D58E;D58E;1112 1162 11C1;D58E;1112 1162 11C1; # (햎; 햎; 햎; 햎; 햎; ) HANGUL SYLLABLE HAEP D58F;D58F;1112 1162 11C2;D58F;1112 1162 11C2; # (햏; 햏; 햏; 햏; 햏; ) HANGUL SYLLABLE HAEH D590;D590;1112 1163;D590;1112 1163; # (햐; 햐; 햐; 햐; 햐; ) HANGUL SYLLABLE HYA D591;D591;1112 1163 11A8;D591;1112 1163 11A8; # (햑; 햑; 햑; 햑; 햑; ) HANGUL SYLLABLE HYAG D592;D592;1112 1163 11A9;D592;1112 1163 11A9; # (햒; 햒; 햒; 햒; 햒; ) HANGUL SYLLABLE HYAGG D593;D593;1112 1163 11AA;D593;1112 1163 11AA; # (햓; 햓; 햓; 햓; 햓; ) HANGUL SYLLABLE HYAGS D594;D594;1112 1163 11AB;D594;1112 1163 11AB; # (햔; 햔; 햔; 햔; 햔; ) HANGUL SYLLABLE HYAN D595;D595;1112 1163 11AC;D595;1112 1163 11AC; # (햕; 햕; 햕; 햕; 햕; ) HANGUL SYLLABLE HYANJ D596;D596;1112 1163 11AD;D596;1112 1163 11AD; # (햖; 햖; 햖; 햖; 햖; ) HANGUL SYLLABLE HYANH D597;D597;1112 1163 11AE;D597;1112 1163 11AE; # (햗; 햗; 햗; 햗; 햗; ) HANGUL SYLLABLE HYAD D598;D598;1112 1163 11AF;D598;1112 1163 11AF; # (햘; 햘; 햘; 햘; 햘; ) HANGUL SYLLABLE HYAL D599;D599;1112 1163 11B0;D599;1112 1163 11B0; # (햙; 햙; 햙; 햙; 햙; ) HANGUL SYLLABLE HYALG D59A;D59A;1112 1163 11B1;D59A;1112 1163 11B1; # (햚; 햚; 햚; 햚; 햚; ) HANGUL SYLLABLE HYALM D59B;D59B;1112 1163 11B2;D59B;1112 1163 11B2; # (햛; 햛; 햛; 햛; 햛; ) HANGUL SYLLABLE HYALB D59C;D59C;1112 1163 11B3;D59C;1112 1163 11B3; # (햜; 햜; 햜; 햜; 햜; ) HANGUL SYLLABLE HYALS D59D;D59D;1112 1163 11B4;D59D;1112 1163 11B4; # (햝; 햝; 햝; 햝; 햝; ) HANGUL SYLLABLE HYALT D59E;D59E;1112 1163 11B5;D59E;1112 1163 11B5; # (햞; 햞; 햞; 햞; 햞; ) HANGUL SYLLABLE HYALP D59F;D59F;1112 1163 11B6;D59F;1112 1163 11B6; # (햟; 햟; 햟; 햟; 햟; ) HANGUL SYLLABLE HYALH D5A0;D5A0;1112 1163 11B7;D5A0;1112 1163 11B7; # (햠; 햠; 햠; 햠; 햠; ) HANGUL SYLLABLE HYAM D5A1;D5A1;1112 1163 11B8;D5A1;1112 1163 11B8; # (햡; 햡; 햡; 햡; 햡; ) HANGUL SYLLABLE HYAB D5A2;D5A2;1112 1163 11B9;D5A2;1112 1163 11B9; # (햢; 햢; 햢; 햢; 햢; ) HANGUL SYLLABLE HYABS D5A3;D5A3;1112 1163 11BA;D5A3;1112 1163 11BA; # (햣; 햣; 햣; 햣; 햣; ) HANGUL SYLLABLE HYAS D5A4;D5A4;1112 1163 11BB;D5A4;1112 1163 11BB; # (햤; 햤; 햤; 햤; 햤; ) HANGUL SYLLABLE HYASS D5A5;D5A5;1112 1163 11BC;D5A5;1112 1163 11BC; # (향; 향; 향; 향; 향; ) HANGUL SYLLABLE HYANG D5A6;D5A6;1112 1163 11BD;D5A6;1112 1163 11BD; # (햦; 햦; 햦; 햦; 햦; ) HANGUL SYLLABLE HYAJ D5A7;D5A7;1112 1163 11BE;D5A7;1112 1163 11BE; # (햧; 햧; 햧; 햧; 햧; ) HANGUL SYLLABLE HYAC D5A8;D5A8;1112 1163 11BF;D5A8;1112 1163 11BF; # (햨; 햨; 햨; 햨; 햨; ) HANGUL SYLLABLE HYAK D5A9;D5A9;1112 1163 11C0;D5A9;1112 1163 11C0; # (햩; 햩; 햩; 햩; 햩; ) HANGUL SYLLABLE HYAT D5AA;D5AA;1112 1163 11C1;D5AA;1112 1163 11C1; # (햪; 햪; 햪; 햪; 햪; ) HANGUL SYLLABLE HYAP D5AB;D5AB;1112 1163 11C2;D5AB;1112 1163 11C2; # (햫; 햫; 햫; 햫; 햫; ) HANGUL SYLLABLE HYAH D5AC;D5AC;1112 1164;D5AC;1112 1164; # (햬; 햬; 햬; 햬; 햬; ) HANGUL SYLLABLE HYAE D5AD;D5AD;1112 1164 11A8;D5AD;1112 1164 11A8; # (햭; 햭; 햭; 햭; 햭; ) HANGUL SYLLABLE HYAEG D5AE;D5AE;1112 1164 11A9;D5AE;1112 1164 11A9; # (햮; 햮; 햮; 햮; 햮; ) HANGUL SYLLABLE HYAEGG D5AF;D5AF;1112 1164 11AA;D5AF;1112 1164 11AA; # (햯; 햯; 햯; 햯; 햯; ) HANGUL SYLLABLE HYAEGS D5B0;D5B0;1112 1164 11AB;D5B0;1112 1164 11AB; # (햰; 햰; 햰; 햰; 햰; ) HANGUL SYLLABLE HYAEN D5B1;D5B1;1112 1164 11AC;D5B1;1112 1164 11AC; # (햱; 햱; 햱; 햱; 햱; ) HANGUL SYLLABLE HYAENJ D5B2;D5B2;1112 1164 11AD;D5B2;1112 1164 11AD; # (햲; 햲; 햲; 햲; 햲; ) HANGUL SYLLABLE HYAENH D5B3;D5B3;1112 1164 11AE;D5B3;1112 1164 11AE; # (햳; 햳; 햳; 햳; 햳; ) HANGUL SYLLABLE HYAED D5B4;D5B4;1112 1164 11AF;D5B4;1112 1164 11AF; # (햴; 햴; 햴; 햴; 햴; ) HANGUL SYLLABLE HYAEL D5B5;D5B5;1112 1164 11B0;D5B5;1112 1164 11B0; # (햵; 햵; 햵; 햵; 햵; ) HANGUL SYLLABLE HYAELG D5B6;D5B6;1112 1164 11B1;D5B6;1112 1164 11B1; # (햶; 햶; 햶; 햶; 햶; ) HANGUL SYLLABLE HYAELM D5B7;D5B7;1112 1164 11B2;D5B7;1112 1164 11B2; # (햷; 햷; 햷; 햷; 햷; ) HANGUL SYLLABLE HYAELB D5B8;D5B8;1112 1164 11B3;D5B8;1112 1164 11B3; # (햸; 햸; 햸; 햸; 햸; ) HANGUL SYLLABLE HYAELS D5B9;D5B9;1112 1164 11B4;D5B9;1112 1164 11B4; # (햹; 햹; 햹; 햹; 햹; ) HANGUL SYLLABLE HYAELT D5BA;D5BA;1112 1164 11B5;D5BA;1112 1164 11B5; # (햺; 햺; 햺; 햺; 햺; ) HANGUL SYLLABLE HYAELP D5BB;D5BB;1112 1164 11B6;D5BB;1112 1164 11B6; # (햻; 햻; 햻; 햻; 햻; ) HANGUL SYLLABLE HYAELH D5BC;D5BC;1112 1164 11B7;D5BC;1112 1164 11B7; # (햼; 햼; 햼; 햼; 햼; ) HANGUL SYLLABLE HYAEM D5BD;D5BD;1112 1164 11B8;D5BD;1112 1164 11B8; # (햽; 햽; 햽; 햽; 햽; ) HANGUL SYLLABLE HYAEB D5BE;D5BE;1112 1164 11B9;D5BE;1112 1164 11B9; # (햾; 햾; 햾; 햾; 햾; ) HANGUL SYLLABLE HYAEBS D5BF;D5BF;1112 1164 11BA;D5BF;1112 1164 11BA; # (햿; 햿; 햿; 햿; 햿; ) HANGUL SYLLABLE HYAES D5C0;D5C0;1112 1164 11BB;D5C0;1112 1164 11BB; # (헀; 헀; 헀; 헀; 헀; ) HANGUL SYLLABLE HYAESS D5C1;D5C1;1112 1164 11BC;D5C1;1112 1164 11BC; # (헁; 헁; 헁; 헁; 헁; ) HANGUL SYLLABLE HYAENG D5C2;D5C2;1112 1164 11BD;D5C2;1112 1164 11BD; # (헂; 헂; 헂; 헂; 헂; ) HANGUL SYLLABLE HYAEJ D5C3;D5C3;1112 1164 11BE;D5C3;1112 1164 11BE; # (헃; 헃; 헃; 헃; 헃; ) HANGUL SYLLABLE HYAEC D5C4;D5C4;1112 1164 11BF;D5C4;1112 1164 11BF; # (헄; 헄; 헄; 헄; 헄; ) HANGUL SYLLABLE HYAEK D5C5;D5C5;1112 1164 11C0;D5C5;1112 1164 11C0; # (헅; 헅; 헅; 헅; 헅; ) HANGUL SYLLABLE HYAET D5C6;D5C6;1112 1164 11C1;D5C6;1112 1164 11C1; # (헆; 헆; 헆; 헆; 헆; ) HANGUL SYLLABLE HYAEP D5C7;D5C7;1112 1164 11C2;D5C7;1112 1164 11C2; # (헇; 헇; 헇; 헇; 헇; ) HANGUL SYLLABLE HYAEH D5C8;D5C8;1112 1165;D5C8;1112 1165; # (허; 허; 허; 허; 허; ) HANGUL SYLLABLE HEO D5C9;D5C9;1112 1165 11A8;D5C9;1112 1165 11A8; # (헉; 헉; 헉; 헉; 헉; ) HANGUL SYLLABLE HEOG D5CA;D5CA;1112 1165 11A9;D5CA;1112 1165 11A9; # (헊; 헊; 헊; 헊; 헊; ) HANGUL SYLLABLE HEOGG D5CB;D5CB;1112 1165 11AA;D5CB;1112 1165 11AA; # (헋; 헋; 헋; 헋; 헋; ) HANGUL SYLLABLE HEOGS D5CC;D5CC;1112 1165 11AB;D5CC;1112 1165 11AB; # (헌; 헌; 헌; 헌; 헌; ) HANGUL SYLLABLE HEON D5CD;D5CD;1112 1165 11AC;D5CD;1112 1165 11AC; # (헍; 헍; 헍; 헍; 헍; ) HANGUL SYLLABLE HEONJ D5CE;D5CE;1112 1165 11AD;D5CE;1112 1165 11AD; # (헎; 헎; 헎; 헎; 헎; ) HANGUL SYLLABLE HEONH D5CF;D5CF;1112 1165 11AE;D5CF;1112 1165 11AE; # (헏; 헏; 헏; 헏; 헏; ) HANGUL SYLLABLE HEOD D5D0;D5D0;1112 1165 11AF;D5D0;1112 1165 11AF; # (헐; 헐; 헐; 헐; 헐; ) HANGUL SYLLABLE HEOL D5D1;D5D1;1112 1165 11B0;D5D1;1112 1165 11B0; # (헑; 헑; 헑; 헑; 헑; ) HANGUL SYLLABLE HEOLG D5D2;D5D2;1112 1165 11B1;D5D2;1112 1165 11B1; # (헒; 헒; 헒; 헒; 헒; ) HANGUL SYLLABLE HEOLM D5D3;D5D3;1112 1165 11B2;D5D3;1112 1165 11B2; # (헓; 헓; 헓; 헓; 헓; ) HANGUL SYLLABLE HEOLB D5D4;D5D4;1112 1165 11B3;D5D4;1112 1165 11B3; # (헔; 헔; 헔; 헔; 헔; ) HANGUL SYLLABLE HEOLS D5D5;D5D5;1112 1165 11B4;D5D5;1112 1165 11B4; # (헕; 헕; 헕; 헕; 헕; ) HANGUL SYLLABLE HEOLT D5D6;D5D6;1112 1165 11B5;D5D6;1112 1165 11B5; # (헖; 헖; 헖; 헖; 헖; ) HANGUL SYLLABLE HEOLP D5D7;D5D7;1112 1165 11B6;D5D7;1112 1165 11B6; # (헗; 헗; 헗; 헗; 헗; ) HANGUL SYLLABLE HEOLH D5D8;D5D8;1112 1165 11B7;D5D8;1112 1165 11B7; # (험; 험; 험; 험; 험; ) HANGUL SYLLABLE HEOM D5D9;D5D9;1112 1165 11B8;D5D9;1112 1165 11B8; # (헙; 헙; 헙; 헙; 헙; ) HANGUL SYLLABLE HEOB D5DA;D5DA;1112 1165 11B9;D5DA;1112 1165 11B9; # (헚; 헚; 헚; 헚; 헚; ) HANGUL SYLLABLE HEOBS D5DB;D5DB;1112 1165 11BA;D5DB;1112 1165 11BA; # (헛; 헛; 헛; 헛; 헛; ) HANGUL SYLLABLE HEOS D5DC;D5DC;1112 1165 11BB;D5DC;1112 1165 11BB; # (헜; 헜; 헜; 헜; 헜; ) HANGUL SYLLABLE HEOSS D5DD;D5DD;1112 1165 11BC;D5DD;1112 1165 11BC; # (헝; 헝; 헝; 헝; 헝; ) HANGUL SYLLABLE HEONG D5DE;D5DE;1112 1165 11BD;D5DE;1112 1165 11BD; # (헞; 헞; 헞; 헞; 헞; ) HANGUL SYLLABLE HEOJ D5DF;D5DF;1112 1165 11BE;D5DF;1112 1165 11BE; # (헟; 헟; 헟; 헟; 헟; ) HANGUL SYLLABLE HEOC D5E0;D5E0;1112 1165 11BF;D5E0;1112 1165 11BF; # (헠; 헠; 헠; 헠; 헠; ) HANGUL SYLLABLE HEOK D5E1;D5E1;1112 1165 11C0;D5E1;1112 1165 11C0; # (헡; 헡; 헡; 헡; 헡; ) HANGUL SYLLABLE HEOT D5E2;D5E2;1112 1165 11C1;D5E2;1112 1165 11C1; # (헢; 헢; 헢; 헢; 헢; ) HANGUL SYLLABLE HEOP D5E3;D5E3;1112 1165 11C2;D5E3;1112 1165 11C2; # (헣; 헣; 헣; 헣; 헣; ) HANGUL SYLLABLE HEOH D5E4;D5E4;1112 1166;D5E4;1112 1166; # (헤; 헤; 헤; 헤; 헤; ) HANGUL SYLLABLE HE D5E5;D5E5;1112 1166 11A8;D5E5;1112 1166 11A8; # (헥; 헥; 헥; 헥; 헥; ) HANGUL SYLLABLE HEG D5E6;D5E6;1112 1166 11A9;D5E6;1112 1166 11A9; # (헦; 헦; 헦; 헦; 헦; ) HANGUL SYLLABLE HEGG D5E7;D5E7;1112 1166 11AA;D5E7;1112 1166 11AA; # (헧; 헧; 헧; 헧; 헧; ) HANGUL SYLLABLE HEGS D5E8;D5E8;1112 1166 11AB;D5E8;1112 1166 11AB; # (헨; 헨; 헨; 헨; 헨; ) HANGUL SYLLABLE HEN D5E9;D5E9;1112 1166 11AC;D5E9;1112 1166 11AC; # (헩; 헩; 헩; 헩; 헩; ) HANGUL SYLLABLE HENJ D5EA;D5EA;1112 1166 11AD;D5EA;1112 1166 11AD; # (헪; 헪; 헪; 헪; 헪; ) HANGUL SYLLABLE HENH D5EB;D5EB;1112 1166 11AE;D5EB;1112 1166 11AE; # (헫; 헫; 헫; 헫; 헫; ) HANGUL SYLLABLE HED D5EC;D5EC;1112 1166 11AF;D5EC;1112 1166 11AF; # (헬; 헬; 헬; 헬; 헬; ) HANGUL SYLLABLE HEL D5ED;D5ED;1112 1166 11B0;D5ED;1112 1166 11B0; # (헭; 헭; 헭; 헭; 헭; ) HANGUL SYLLABLE HELG D5EE;D5EE;1112 1166 11B1;D5EE;1112 1166 11B1; # (헮; 헮; 헮; 헮; 헮; ) HANGUL SYLLABLE HELM D5EF;D5EF;1112 1166 11B2;D5EF;1112 1166 11B2; # (헯; 헯; 헯; 헯; 헯; ) HANGUL SYLLABLE HELB D5F0;D5F0;1112 1166 11B3;D5F0;1112 1166 11B3; # (헰; 헰; 헰; 헰; 헰; ) HANGUL SYLLABLE HELS D5F1;D5F1;1112 1166 11B4;D5F1;1112 1166 11B4; # (헱; 헱; 헱; 헱; 헱; ) HANGUL SYLLABLE HELT D5F2;D5F2;1112 1166 11B5;D5F2;1112 1166 11B5; # (헲; 헲; 헲; 헲; 헲; ) HANGUL SYLLABLE HELP D5F3;D5F3;1112 1166 11B6;D5F3;1112 1166 11B6; # (헳; 헳; 헳; 헳; 헳; ) HANGUL SYLLABLE HELH D5F4;D5F4;1112 1166 11B7;D5F4;1112 1166 11B7; # (헴; 헴; 헴; 헴; 헴; ) HANGUL SYLLABLE HEM D5F5;D5F5;1112 1166 11B8;D5F5;1112 1166 11B8; # (헵; 헵; 헵; 헵; 헵; ) HANGUL SYLLABLE HEB D5F6;D5F6;1112 1166 11B9;D5F6;1112 1166 11B9; # (헶; 헶; 헶; 헶; 헶; ) HANGUL SYLLABLE HEBS D5F7;D5F7;1112 1166 11BA;D5F7;1112 1166 11BA; # (헷; 헷; 헷; 헷; 헷; ) HANGUL SYLLABLE HES D5F8;D5F8;1112 1166 11BB;D5F8;1112 1166 11BB; # (헸; 헸; 헸; 헸; 헸; ) HANGUL SYLLABLE HESS D5F9;D5F9;1112 1166 11BC;D5F9;1112 1166 11BC; # (헹; 헹; 헹; 헹; 헹; ) HANGUL SYLLABLE HENG D5FA;D5FA;1112 1166 11BD;D5FA;1112 1166 11BD; # (헺; 헺; 헺; 헺; 헺; ) HANGUL SYLLABLE HEJ D5FB;D5FB;1112 1166 11BE;D5FB;1112 1166 11BE; # (헻; 헻; 헻; 헻; 헻; ) HANGUL SYLLABLE HEC D5FC;D5FC;1112 1166 11BF;D5FC;1112 1166 11BF; # (헼; 헼; 헼; 헼; 헼; ) HANGUL SYLLABLE HEK D5FD;D5FD;1112 1166 11C0;D5FD;1112 1166 11C0; # (헽; 헽; 헽; 헽; 헽; ) HANGUL SYLLABLE HET D5FE;D5FE;1112 1166 11C1;D5FE;1112 1166 11C1; # (헾; 헾; 헾; 헾; 헾; ) HANGUL SYLLABLE HEP D5FF;D5FF;1112 1166 11C2;D5FF;1112 1166 11C2; # (헿; 헿; 헿; 헿; 헿; ) HANGUL SYLLABLE HEH D600;D600;1112 1167;D600;1112 1167; # (혀; 혀; 혀; 혀; 혀; ) HANGUL SYLLABLE HYEO D601;D601;1112 1167 11A8;D601;1112 1167 11A8; # (혁; 혁; 혁; 혁; 혁; ) HANGUL SYLLABLE HYEOG D602;D602;1112 1167 11A9;D602;1112 1167 11A9; # (혂; 혂; 혂; 혂; 혂; ) HANGUL SYLLABLE HYEOGG D603;D603;1112 1167 11AA;D603;1112 1167 11AA; # (혃; 혃; 혃; 혃; 혃; ) HANGUL SYLLABLE HYEOGS D604;D604;1112 1167 11AB;D604;1112 1167 11AB; # (현; 현; 현; 현; 현; ) HANGUL SYLLABLE HYEON D605;D605;1112 1167 11AC;D605;1112 1167 11AC; # (혅; 혅; 혅; 혅; 혅; ) HANGUL SYLLABLE HYEONJ D606;D606;1112 1167 11AD;D606;1112 1167 11AD; # (혆; 혆; 혆; 혆; 혆; ) HANGUL SYLLABLE HYEONH D607;D607;1112 1167 11AE;D607;1112 1167 11AE; # (혇; 혇; 혇; 혇; 혇; ) HANGUL SYLLABLE HYEOD D608;D608;1112 1167 11AF;D608;1112 1167 11AF; # (혈; 혈; 혈; 혈; 혈; ) HANGUL SYLLABLE HYEOL D609;D609;1112 1167 11B0;D609;1112 1167 11B0; # (혉; 혉; 혉; 혉; 혉; ) HANGUL SYLLABLE HYEOLG D60A;D60A;1112 1167 11B1;D60A;1112 1167 11B1; # (혊; 혊; 혊; 혊; 혊; ) HANGUL SYLLABLE HYEOLM D60B;D60B;1112 1167 11B2;D60B;1112 1167 11B2; # (혋; 혋; 혋; 혋; 혋; ) HANGUL SYLLABLE HYEOLB D60C;D60C;1112 1167 11B3;D60C;1112 1167 11B3; # (혌; 혌; 혌; 혌; 혌; ) HANGUL SYLLABLE HYEOLS D60D;D60D;1112 1167 11B4;D60D;1112 1167 11B4; # (혍; 혍; 혍; 혍; 혍; ) HANGUL SYLLABLE HYEOLT D60E;D60E;1112 1167 11B5;D60E;1112 1167 11B5; # (혎; 혎; 혎; 혎; 혎; ) HANGUL SYLLABLE HYEOLP D60F;D60F;1112 1167 11B6;D60F;1112 1167 11B6; # (혏; 혏; 혏; 혏; 혏; ) HANGUL SYLLABLE HYEOLH D610;D610;1112 1167 11B7;D610;1112 1167 11B7; # (혐; 혐; 혐; 혐; 혐; ) HANGUL SYLLABLE HYEOM D611;D611;1112 1167 11B8;D611;1112 1167 11B8; # (협; 협; 협; 협; 협; ) HANGUL SYLLABLE HYEOB D612;D612;1112 1167 11B9;D612;1112 1167 11B9; # (혒; 혒; 혒; 혒; 혒; ) HANGUL SYLLABLE HYEOBS D613;D613;1112 1167 11BA;D613;1112 1167 11BA; # (혓; 혓; 혓; 혓; 혓; ) HANGUL SYLLABLE HYEOS D614;D614;1112 1167 11BB;D614;1112 1167 11BB; # (혔; 혔; 혔; 혔; 혔; ) HANGUL SYLLABLE HYEOSS D615;D615;1112 1167 11BC;D615;1112 1167 11BC; # (형; 형; 형; 형; 형; ) HANGUL SYLLABLE HYEONG D616;D616;1112 1167 11BD;D616;1112 1167 11BD; # (혖; 혖; 혖; 혖; 혖; ) HANGUL SYLLABLE HYEOJ D617;D617;1112 1167 11BE;D617;1112 1167 11BE; # (혗; 혗; 혗; 혗; 혗; ) HANGUL SYLLABLE HYEOC D618;D618;1112 1167 11BF;D618;1112 1167 11BF; # (혘; 혘; 혘; 혘; 혘; ) HANGUL SYLLABLE HYEOK D619;D619;1112 1167 11C0;D619;1112 1167 11C0; # (혙; 혙; 혙; 혙; 혙; ) HANGUL SYLLABLE HYEOT D61A;D61A;1112 1167 11C1;D61A;1112 1167 11C1; # (혚; 혚; 혚; 혚; 혚; ) HANGUL SYLLABLE HYEOP D61B;D61B;1112 1167 11C2;D61B;1112 1167 11C2; # (혛; 혛; 혛; 혛; 혛; ) HANGUL SYLLABLE HYEOH D61C;D61C;1112 1168;D61C;1112 1168; # (혜; 혜; 혜; 혜; 혜; ) HANGUL SYLLABLE HYE D61D;D61D;1112 1168 11A8;D61D;1112 1168 11A8; # (혝; 혝; 혝; 혝; 혝; ) HANGUL SYLLABLE HYEG D61E;D61E;1112 1168 11A9;D61E;1112 1168 11A9; # (혞; 혞; 혞; 혞; 혞; ) HANGUL SYLLABLE HYEGG D61F;D61F;1112 1168 11AA;D61F;1112 1168 11AA; # (혟; 혟; 혟; 혟; 혟; ) HANGUL SYLLABLE HYEGS D620;D620;1112 1168 11AB;D620;1112 1168 11AB; # (혠; 혠; 혠; 혠; 혠; ) HANGUL SYLLABLE HYEN D621;D621;1112 1168 11AC;D621;1112 1168 11AC; # (혡; 혡; 혡; 혡; 혡; ) HANGUL SYLLABLE HYENJ D622;D622;1112 1168 11AD;D622;1112 1168 11AD; # (혢; 혢; 혢; 혢; 혢; ) HANGUL SYLLABLE HYENH D623;D623;1112 1168 11AE;D623;1112 1168 11AE; # (혣; 혣; 혣; 혣; 혣; ) HANGUL SYLLABLE HYED D624;D624;1112 1168 11AF;D624;1112 1168 11AF; # (혤; 혤; 혤; 혤; 혤; ) HANGUL SYLLABLE HYEL D625;D625;1112 1168 11B0;D625;1112 1168 11B0; # (혥; 혥; 혥; 혥; 혥; ) HANGUL SYLLABLE HYELG D626;D626;1112 1168 11B1;D626;1112 1168 11B1; # (혦; 혦; 혦; 혦; 혦; ) HANGUL SYLLABLE HYELM D627;D627;1112 1168 11B2;D627;1112 1168 11B2; # (혧; 혧; 혧; 혧; 혧; ) HANGUL SYLLABLE HYELB D628;D628;1112 1168 11B3;D628;1112 1168 11B3; # (혨; 혨; 혨; 혨; 혨; ) HANGUL SYLLABLE HYELS D629;D629;1112 1168 11B4;D629;1112 1168 11B4; # (혩; 혩; 혩; 혩; 혩; ) HANGUL SYLLABLE HYELT D62A;D62A;1112 1168 11B5;D62A;1112 1168 11B5; # (혪; 혪; 혪; 혪; 혪; ) HANGUL SYLLABLE HYELP D62B;D62B;1112 1168 11B6;D62B;1112 1168 11B6; # (혫; 혫; 혫; 혫; 혫; ) HANGUL SYLLABLE HYELH D62C;D62C;1112 1168 11B7;D62C;1112 1168 11B7; # (혬; 혬; 혬; 혬; 혬; ) HANGUL SYLLABLE HYEM D62D;D62D;1112 1168 11B8;D62D;1112 1168 11B8; # (혭; 혭; 혭; 혭; 혭; ) HANGUL SYLLABLE HYEB D62E;D62E;1112 1168 11B9;D62E;1112 1168 11B9; # (혮; 혮; 혮; 혮; 혮; ) HANGUL SYLLABLE HYEBS D62F;D62F;1112 1168 11BA;D62F;1112 1168 11BA; # (혯; 혯; 혯; 혯; 혯; ) HANGUL SYLLABLE HYES D630;D630;1112 1168 11BB;D630;1112 1168 11BB; # (혰; 혰; 혰; 혰; 혰; ) HANGUL SYLLABLE HYESS D631;D631;1112 1168 11BC;D631;1112 1168 11BC; # (혱; 혱; 혱; 혱; 혱; ) HANGUL SYLLABLE HYENG D632;D632;1112 1168 11BD;D632;1112 1168 11BD; # (혲; 혲; 혲; 혲; 혲; ) HANGUL SYLLABLE HYEJ D633;D633;1112 1168 11BE;D633;1112 1168 11BE; # (혳; 혳; 혳; 혳; 혳; ) HANGUL SYLLABLE HYEC D634;D634;1112 1168 11BF;D634;1112 1168 11BF; # (혴; 혴; 혴; 혴; 혴; ) HANGUL SYLLABLE HYEK D635;D635;1112 1168 11C0;D635;1112 1168 11C0; # (혵; 혵; 혵; 혵; 혵; ) HANGUL SYLLABLE HYET D636;D636;1112 1168 11C1;D636;1112 1168 11C1; # (혶; 혶; 혶; 혶; 혶; ) HANGUL SYLLABLE HYEP D637;D637;1112 1168 11C2;D637;1112 1168 11C2; # (혷; 혷; 혷; 혷; 혷; ) HANGUL SYLLABLE HYEH D638;D638;1112 1169;D638;1112 1169; # (호; 호; 호; 호; 호; ) HANGUL SYLLABLE HO D639;D639;1112 1169 11A8;D639;1112 1169 11A8; # (혹; 혹; 혹; 혹; 혹; ) HANGUL SYLLABLE HOG D63A;D63A;1112 1169 11A9;D63A;1112 1169 11A9; # (혺; 혺; 혺; 혺; 혺; ) HANGUL SYLLABLE HOGG D63B;D63B;1112 1169 11AA;D63B;1112 1169 11AA; # (혻; 혻; 혻; 혻; 혻; ) HANGUL SYLLABLE HOGS D63C;D63C;1112 1169 11AB;D63C;1112 1169 11AB; # (혼; 혼; 혼; 혼; 혼; ) HANGUL SYLLABLE HON D63D;D63D;1112 1169 11AC;D63D;1112 1169 11AC; # (혽; 혽; 혽; 혽; 혽; ) HANGUL SYLLABLE HONJ D63E;D63E;1112 1169 11AD;D63E;1112 1169 11AD; # (혾; 혾; 혾; 혾; 혾; ) HANGUL SYLLABLE HONH D63F;D63F;1112 1169 11AE;D63F;1112 1169 11AE; # (혿; 혿; 혿; 혿; 혿; ) HANGUL SYLLABLE HOD D640;D640;1112 1169 11AF;D640;1112 1169 11AF; # (홀; 홀; 홀; 홀; 홀; ) HANGUL SYLLABLE HOL D641;D641;1112 1169 11B0;D641;1112 1169 11B0; # (홁; 홁; 홁; 홁; 홁; ) HANGUL SYLLABLE HOLG D642;D642;1112 1169 11B1;D642;1112 1169 11B1; # (홂; 홂; 홂; 홂; 홂; ) HANGUL SYLLABLE HOLM D643;D643;1112 1169 11B2;D643;1112 1169 11B2; # (홃; 홃; 홃; 홃; 홃; ) HANGUL SYLLABLE HOLB D644;D644;1112 1169 11B3;D644;1112 1169 11B3; # (홄; 홄; 홄; 홄; 홄; ) HANGUL SYLLABLE HOLS D645;D645;1112 1169 11B4;D645;1112 1169 11B4; # (홅; 홅; 홅; 홅; 홅; ) HANGUL SYLLABLE HOLT D646;D646;1112 1169 11B5;D646;1112 1169 11B5; # (홆; 홆; 홆; 홆; 홆; ) HANGUL SYLLABLE HOLP D647;D647;1112 1169 11B6;D647;1112 1169 11B6; # (홇; 홇; 홇; 홇; 홇; ) HANGUL SYLLABLE HOLH D648;D648;1112 1169 11B7;D648;1112 1169 11B7; # (홈; 홈; 홈; 홈; 홈; ) HANGUL SYLLABLE HOM D649;D649;1112 1169 11B8;D649;1112 1169 11B8; # (홉; 홉; 홉; 홉; 홉; ) HANGUL SYLLABLE HOB D64A;D64A;1112 1169 11B9;D64A;1112 1169 11B9; # (홊; 홊; 홊; 홊; 홊; ) HANGUL SYLLABLE HOBS D64B;D64B;1112 1169 11BA;D64B;1112 1169 11BA; # (홋; 홋; 홋; 홋; 홋; ) HANGUL SYLLABLE HOS D64C;D64C;1112 1169 11BB;D64C;1112 1169 11BB; # (홌; 홌; 홌; 홌; 홌; ) HANGUL SYLLABLE HOSS D64D;D64D;1112 1169 11BC;D64D;1112 1169 11BC; # (홍; 홍; 홍; 홍; 홍; ) HANGUL SYLLABLE HONG D64E;D64E;1112 1169 11BD;D64E;1112 1169 11BD; # (홎; 홎; 홎; 홎; 홎; ) HANGUL SYLLABLE HOJ D64F;D64F;1112 1169 11BE;D64F;1112 1169 11BE; # (홏; 홏; 홏; 홏; 홏; ) HANGUL SYLLABLE HOC D650;D650;1112 1169 11BF;D650;1112 1169 11BF; # (홐; 홐; 홐; 홐; 홐; ) HANGUL SYLLABLE HOK D651;D651;1112 1169 11C0;D651;1112 1169 11C0; # (홑; 홑; 홑; 홑; 홑; ) HANGUL SYLLABLE HOT D652;D652;1112 1169 11C1;D652;1112 1169 11C1; # (홒; 홒; 홒; 홒; 홒; ) HANGUL SYLLABLE HOP D653;D653;1112 1169 11C2;D653;1112 1169 11C2; # (홓; 홓; 홓; 홓; 홓; ) HANGUL SYLLABLE HOH D654;D654;1112 116A;D654;1112 116A; # (화; 화; 화; 화; 화; ) HANGUL SYLLABLE HWA D655;D655;1112 116A 11A8;D655;1112 116A 11A8; # (확; 확; 확; 확; 확; ) HANGUL SYLLABLE HWAG D656;D656;1112 116A 11A9;D656;1112 116A 11A9; # (홖; 홖; 홖; 홖; 홖; ) HANGUL SYLLABLE HWAGG D657;D657;1112 116A 11AA;D657;1112 116A 11AA; # (홗; 홗; 홗; 홗; 홗; ) HANGUL SYLLABLE HWAGS D658;D658;1112 116A 11AB;D658;1112 116A 11AB; # (환; 환; 환; 환; 환; ) HANGUL SYLLABLE HWAN D659;D659;1112 116A 11AC;D659;1112 116A 11AC; # (홙; 홙; 홙; 홙; 홙; ) HANGUL SYLLABLE HWANJ D65A;D65A;1112 116A 11AD;D65A;1112 116A 11AD; # (홚; 홚; 홚; 홚; 홚; ) HANGUL SYLLABLE HWANH D65B;D65B;1112 116A 11AE;D65B;1112 116A 11AE; # (홛; 홛; 홛; 홛; 홛; ) HANGUL SYLLABLE HWAD D65C;D65C;1112 116A 11AF;D65C;1112 116A 11AF; # (활; 활; 활; 활; 활; ) HANGUL SYLLABLE HWAL D65D;D65D;1112 116A 11B0;D65D;1112 116A 11B0; # (홝; 홝; 홝; 홝; 홝; ) HANGUL SYLLABLE HWALG D65E;D65E;1112 116A 11B1;D65E;1112 116A 11B1; # (홞; 홞; 홞; 홞; 홞; ) HANGUL SYLLABLE HWALM D65F;D65F;1112 116A 11B2;D65F;1112 116A 11B2; # (홟; 홟; 홟; 홟; 홟; ) HANGUL SYLLABLE HWALB D660;D660;1112 116A 11B3;D660;1112 116A 11B3; # (홠; 홠; 홠; 홠; 홠; ) HANGUL SYLLABLE HWALS D661;D661;1112 116A 11B4;D661;1112 116A 11B4; # (홡; 홡; 홡; 홡; 홡; ) HANGUL SYLLABLE HWALT D662;D662;1112 116A 11B5;D662;1112 116A 11B5; # (홢; 홢; 홢; 홢; 홢; ) HANGUL SYLLABLE HWALP D663;D663;1112 116A 11B6;D663;1112 116A 11B6; # (홣; 홣; 홣; 홣; 홣; ) HANGUL SYLLABLE HWALH D664;D664;1112 116A 11B7;D664;1112 116A 11B7; # (홤; 홤; 홤; 홤; 홤; ) HANGUL SYLLABLE HWAM D665;D665;1112 116A 11B8;D665;1112 116A 11B8; # (홥; 홥; 홥; 홥; 홥; ) HANGUL SYLLABLE HWAB D666;D666;1112 116A 11B9;D666;1112 116A 11B9; # (홦; 홦; 홦; 홦; 홦; ) HANGUL SYLLABLE HWABS D667;D667;1112 116A 11BA;D667;1112 116A 11BA; # (홧; 홧; 홧; 홧; 홧; ) HANGUL SYLLABLE HWAS D668;D668;1112 116A 11BB;D668;1112 116A 11BB; # (홨; 홨; 홨; 홨; 홨; ) HANGUL SYLLABLE HWASS D669;D669;1112 116A 11BC;D669;1112 116A 11BC; # (황; 황; 황; 황; 황; ) HANGUL SYLLABLE HWANG D66A;D66A;1112 116A 11BD;D66A;1112 116A 11BD; # (홪; 홪; 홪; 홪; 홪; ) HANGUL SYLLABLE HWAJ D66B;D66B;1112 116A 11BE;D66B;1112 116A 11BE; # (홫; 홫; 홫; 홫; 홫; ) HANGUL SYLLABLE HWAC D66C;D66C;1112 116A 11BF;D66C;1112 116A 11BF; # (홬; 홬; 홬; 홬; 홬; ) HANGUL SYLLABLE HWAK D66D;D66D;1112 116A 11C0;D66D;1112 116A 11C0; # (홭; 홭; 홭; 홭; 홭; ) HANGUL SYLLABLE HWAT D66E;D66E;1112 116A 11C1;D66E;1112 116A 11C1; # (홮; 홮; 홮; 홮; 홮; ) HANGUL SYLLABLE HWAP D66F;D66F;1112 116A 11C2;D66F;1112 116A 11C2; # (홯; 홯; 홯; 홯; 홯; ) HANGUL SYLLABLE HWAH D670;D670;1112 116B;D670;1112 116B; # (홰; 홰; 홰; 홰; 홰; ) HANGUL SYLLABLE HWAE D671;D671;1112 116B 11A8;D671;1112 116B 11A8; # (홱; 홱; 홱; 홱; 홱; ) HANGUL SYLLABLE HWAEG D672;D672;1112 116B 11A9;D672;1112 116B 11A9; # (홲; 홲; 홲; 홲; 홲; ) HANGUL SYLLABLE HWAEGG D673;D673;1112 116B 11AA;D673;1112 116B 11AA; # (홳; 홳; 홳; 홳; 홳; ) HANGUL SYLLABLE HWAEGS D674;D674;1112 116B 11AB;D674;1112 116B 11AB; # (홴; 홴; 홴; 홴; 홴; ) HANGUL SYLLABLE HWAEN D675;D675;1112 116B 11AC;D675;1112 116B 11AC; # (홵; 홵; 홵; 홵; 홵; ) HANGUL SYLLABLE HWAENJ D676;D676;1112 116B 11AD;D676;1112 116B 11AD; # (홶; 홶; 홶; 홶; 홶; ) HANGUL SYLLABLE HWAENH D677;D677;1112 116B 11AE;D677;1112 116B 11AE; # (홷; 홷; 홷; 홷; 홷; ) HANGUL SYLLABLE HWAED D678;D678;1112 116B 11AF;D678;1112 116B 11AF; # (홸; 홸; 홸; 홸; 홸; ) HANGUL SYLLABLE HWAEL D679;D679;1112 116B 11B0;D679;1112 116B 11B0; # (홹; 홹; 홹; 홹; 홹; ) HANGUL SYLLABLE HWAELG D67A;D67A;1112 116B 11B1;D67A;1112 116B 11B1; # (홺; 홺; 홺; 홺; 홺; ) HANGUL SYLLABLE HWAELM D67B;D67B;1112 116B 11B2;D67B;1112 116B 11B2; # (홻; 홻; 홻; 홻; 홻; ) HANGUL SYLLABLE HWAELB D67C;D67C;1112 116B 11B3;D67C;1112 116B 11B3; # (홼; 홼; 홼; 홼; 홼; ) HANGUL SYLLABLE HWAELS D67D;D67D;1112 116B 11B4;D67D;1112 116B 11B4; # (홽; 홽; 홽; 홽; 홽; ) HANGUL SYLLABLE HWAELT D67E;D67E;1112 116B 11B5;D67E;1112 116B 11B5; # (홾; 홾; 홾; 홾; 홾; ) HANGUL SYLLABLE HWAELP D67F;D67F;1112 116B 11B6;D67F;1112 116B 11B6; # (홿; 홿; 홿; 홿; 홿; ) HANGUL SYLLABLE HWAELH D680;D680;1112 116B 11B7;D680;1112 116B 11B7; # (횀; 횀; 횀; 횀; 횀; ) HANGUL SYLLABLE HWAEM D681;D681;1112 116B 11B8;D681;1112 116B 11B8; # (횁; 횁; 횁; 횁; 횁; ) HANGUL SYLLABLE HWAEB D682;D682;1112 116B 11B9;D682;1112 116B 11B9; # (횂; 횂; 횂; 횂; 횂; ) HANGUL SYLLABLE HWAEBS D683;D683;1112 116B 11BA;D683;1112 116B 11BA; # (횃; 횃; 횃; 횃; 횃; ) HANGUL SYLLABLE HWAES D684;D684;1112 116B 11BB;D684;1112 116B 11BB; # (횄; 횄; 횄; 횄; 횄; ) HANGUL SYLLABLE HWAESS D685;D685;1112 116B 11BC;D685;1112 116B 11BC; # (횅; 횅; 횅; 횅; 횅; ) HANGUL SYLLABLE HWAENG D686;D686;1112 116B 11BD;D686;1112 116B 11BD; # (횆; 횆; 횆; 횆; 횆; ) HANGUL SYLLABLE HWAEJ D687;D687;1112 116B 11BE;D687;1112 116B 11BE; # (횇; 횇; 횇; 횇; 횇; ) HANGUL SYLLABLE HWAEC D688;D688;1112 116B 11BF;D688;1112 116B 11BF; # (횈; 횈; 횈; 횈; 횈; ) HANGUL SYLLABLE HWAEK D689;D689;1112 116B 11C0;D689;1112 116B 11C0; # (횉; 횉; 횉; 횉; 횉; ) HANGUL SYLLABLE HWAET D68A;D68A;1112 116B 11C1;D68A;1112 116B 11C1; # (횊; 횊; 횊; 횊; 횊; ) HANGUL SYLLABLE HWAEP D68B;D68B;1112 116B 11C2;D68B;1112 116B 11C2; # (횋; 횋; 횋; 횋; 횋; ) HANGUL SYLLABLE HWAEH D68C;D68C;1112 116C;D68C;1112 116C; # (회; 회; 회; 회; 회; ) HANGUL SYLLABLE HOE D68D;D68D;1112 116C 11A8;D68D;1112 116C 11A8; # (획; 획; 획; 획; 획; ) HANGUL SYLLABLE HOEG D68E;D68E;1112 116C 11A9;D68E;1112 116C 11A9; # (횎; 횎; 횎; 횎; 횎; ) HANGUL SYLLABLE HOEGG D68F;D68F;1112 116C 11AA;D68F;1112 116C 11AA; # (횏; 횏; 횏; 횏; 횏; ) HANGUL SYLLABLE HOEGS D690;D690;1112 116C 11AB;D690;1112 116C 11AB; # (횐; 횐; 횐; 횐; 횐; ) HANGUL SYLLABLE HOEN D691;D691;1112 116C 11AC;D691;1112 116C 11AC; # (횑; 횑; 횑; 횑; 횑; ) HANGUL SYLLABLE HOENJ D692;D692;1112 116C 11AD;D692;1112 116C 11AD; # (횒; 횒; 횒; 횒; 횒; ) HANGUL SYLLABLE HOENH D693;D693;1112 116C 11AE;D693;1112 116C 11AE; # (횓; 횓; 횓; 횓; 횓; ) HANGUL SYLLABLE HOED D694;D694;1112 116C 11AF;D694;1112 116C 11AF; # (횔; 횔; 횔; 횔; 횔; ) HANGUL SYLLABLE HOEL D695;D695;1112 116C 11B0;D695;1112 116C 11B0; # (횕; 횕; 횕; 횕; 횕; ) HANGUL SYLLABLE HOELG D696;D696;1112 116C 11B1;D696;1112 116C 11B1; # (횖; 횖; 횖; 횖; 횖; ) HANGUL SYLLABLE HOELM D697;D697;1112 116C 11B2;D697;1112 116C 11B2; # (횗; 횗; 횗; 횗; 횗; ) HANGUL SYLLABLE HOELB D698;D698;1112 116C 11B3;D698;1112 116C 11B3; # (횘; 횘; 횘; 횘; 횘; ) HANGUL SYLLABLE HOELS D699;D699;1112 116C 11B4;D699;1112 116C 11B4; # (횙; 횙; 횙; 횙; 횙; ) HANGUL SYLLABLE HOELT D69A;D69A;1112 116C 11B5;D69A;1112 116C 11B5; # (횚; 횚; 횚; 횚; 횚; ) HANGUL SYLLABLE HOELP D69B;D69B;1112 116C 11B6;D69B;1112 116C 11B6; # (횛; 횛; 횛; 횛; 횛; ) HANGUL SYLLABLE HOELH D69C;D69C;1112 116C 11B7;D69C;1112 116C 11B7; # (횜; 횜; 횜; 횜; 횜; ) HANGUL SYLLABLE HOEM D69D;D69D;1112 116C 11B8;D69D;1112 116C 11B8; # (횝; 횝; 횝; 횝; 횝; ) HANGUL SYLLABLE HOEB D69E;D69E;1112 116C 11B9;D69E;1112 116C 11B9; # (횞; 횞; 횞; 횞; 횞; ) HANGUL SYLLABLE HOEBS D69F;D69F;1112 116C 11BA;D69F;1112 116C 11BA; # (횟; 횟; 횟; 횟; 횟; ) HANGUL SYLLABLE HOES D6A0;D6A0;1112 116C 11BB;D6A0;1112 116C 11BB; # (횠; 횠; 횠; 횠; 횠; ) HANGUL SYLLABLE HOESS D6A1;D6A1;1112 116C 11BC;D6A1;1112 116C 11BC; # (횡; 횡; 횡; 횡; 횡; ) HANGUL SYLLABLE HOENG D6A2;D6A2;1112 116C 11BD;D6A2;1112 116C 11BD; # (횢; 횢; 횢; 횢; 횢; ) HANGUL SYLLABLE HOEJ D6A3;D6A3;1112 116C 11BE;D6A3;1112 116C 11BE; # (횣; 횣; 횣; 횣; 횣; ) HANGUL SYLLABLE HOEC D6A4;D6A4;1112 116C 11BF;D6A4;1112 116C 11BF; # (횤; 횤; 횤; 횤; 횤; ) HANGUL SYLLABLE HOEK D6A5;D6A5;1112 116C 11C0;D6A5;1112 116C 11C0; # (횥; 횥; 횥; 횥; 횥; ) HANGUL SYLLABLE HOET D6A6;D6A6;1112 116C 11C1;D6A6;1112 116C 11C1; # (횦; 횦; 횦; 횦; 횦; ) HANGUL SYLLABLE HOEP D6A7;D6A7;1112 116C 11C2;D6A7;1112 116C 11C2; # (횧; 횧; 횧; 횧; 횧; ) HANGUL SYLLABLE HOEH D6A8;D6A8;1112 116D;D6A8;1112 116D; # (효; 효; 효; 효; 효; ) HANGUL SYLLABLE HYO D6A9;D6A9;1112 116D 11A8;D6A9;1112 116D 11A8; # (횩; 횩; 횩; 횩; 횩; ) HANGUL SYLLABLE HYOG D6AA;D6AA;1112 116D 11A9;D6AA;1112 116D 11A9; # (횪; 횪; 횪; 횪; 횪; ) HANGUL SYLLABLE HYOGG D6AB;D6AB;1112 116D 11AA;D6AB;1112 116D 11AA; # (횫; 횫; 횫; 횫; 횫; ) HANGUL SYLLABLE HYOGS D6AC;D6AC;1112 116D 11AB;D6AC;1112 116D 11AB; # (횬; 횬; 횬; 횬; 횬; ) HANGUL SYLLABLE HYON D6AD;D6AD;1112 116D 11AC;D6AD;1112 116D 11AC; # (횭; 횭; 횭; 횭; 횭; ) HANGUL SYLLABLE HYONJ D6AE;D6AE;1112 116D 11AD;D6AE;1112 116D 11AD; # (횮; 횮; 횮; 횮; 횮; ) HANGUL SYLLABLE HYONH D6AF;D6AF;1112 116D 11AE;D6AF;1112 116D 11AE; # (횯; 횯; 횯; 횯; 횯; ) HANGUL SYLLABLE HYOD D6B0;D6B0;1112 116D 11AF;D6B0;1112 116D 11AF; # (횰; 횰; 횰; 횰; 횰; ) HANGUL SYLLABLE HYOL D6B1;D6B1;1112 116D 11B0;D6B1;1112 116D 11B0; # (횱; 횱; 횱; 횱; 횱; ) HANGUL SYLLABLE HYOLG D6B2;D6B2;1112 116D 11B1;D6B2;1112 116D 11B1; # (횲; 횲; 횲; 횲; 횲; ) HANGUL SYLLABLE HYOLM D6B3;D6B3;1112 116D 11B2;D6B3;1112 116D 11B2; # (횳; 횳; 횳; 횳; 횳; ) HANGUL SYLLABLE HYOLB D6B4;D6B4;1112 116D 11B3;D6B4;1112 116D 11B3; # (횴; 횴; 횴; 횴; 횴; ) HANGUL SYLLABLE HYOLS D6B5;D6B5;1112 116D 11B4;D6B5;1112 116D 11B4; # (횵; 횵; 횵; 횵; 횵; ) HANGUL SYLLABLE HYOLT D6B6;D6B6;1112 116D 11B5;D6B6;1112 116D 11B5; # (횶; 횶; 횶; 횶; 횶; ) HANGUL SYLLABLE HYOLP D6B7;D6B7;1112 116D 11B6;D6B7;1112 116D 11B6; # (횷; 횷; 횷; 횷; 횷; ) HANGUL SYLLABLE HYOLH D6B8;D6B8;1112 116D 11B7;D6B8;1112 116D 11B7; # (횸; 횸; 횸; 횸; 횸; ) HANGUL SYLLABLE HYOM D6B9;D6B9;1112 116D 11B8;D6B9;1112 116D 11B8; # (횹; 횹; 횹; 횹; 횹; ) HANGUL SYLLABLE HYOB D6BA;D6BA;1112 116D 11B9;D6BA;1112 116D 11B9; # (횺; 횺; 횺; 횺; 횺; ) HANGUL SYLLABLE HYOBS D6BB;D6BB;1112 116D 11BA;D6BB;1112 116D 11BA; # (횻; 횻; 횻; 횻; 횻; ) HANGUL SYLLABLE HYOS D6BC;D6BC;1112 116D 11BB;D6BC;1112 116D 11BB; # (횼; 횼; 횼; 횼; 횼; ) HANGUL SYLLABLE HYOSS D6BD;D6BD;1112 116D 11BC;D6BD;1112 116D 11BC; # (횽; 횽; 횽; 횽; 횽; ) HANGUL SYLLABLE HYONG D6BE;D6BE;1112 116D 11BD;D6BE;1112 116D 11BD; # (횾; 횾; 횾; 횾; 횾; ) HANGUL SYLLABLE HYOJ D6BF;D6BF;1112 116D 11BE;D6BF;1112 116D 11BE; # (횿; 횿; 횿; 횿; 횿; ) HANGUL SYLLABLE HYOC D6C0;D6C0;1112 116D 11BF;D6C0;1112 116D 11BF; # (훀; 훀; 훀; 훀; 훀; ) HANGUL SYLLABLE HYOK D6C1;D6C1;1112 116D 11C0;D6C1;1112 116D 11C0; # (훁; 훁; 훁; 훁; 훁; ) HANGUL SYLLABLE HYOT D6C2;D6C2;1112 116D 11C1;D6C2;1112 116D 11C1; # (훂; 훂; 훂; 훂; 훂; ) HANGUL SYLLABLE HYOP D6C3;D6C3;1112 116D 11C2;D6C3;1112 116D 11C2; # (훃; 훃; 훃; 훃; 훃; ) HANGUL SYLLABLE HYOH D6C4;D6C4;1112 116E;D6C4;1112 116E; # (후; 후; 후; 후; 후; ) HANGUL SYLLABLE HU D6C5;D6C5;1112 116E 11A8;D6C5;1112 116E 11A8; # (훅; 훅; 훅; 훅; 훅; ) HANGUL SYLLABLE HUG D6C6;D6C6;1112 116E 11A9;D6C6;1112 116E 11A9; # (훆; 훆; 훆; 훆; 훆; ) HANGUL SYLLABLE HUGG D6C7;D6C7;1112 116E 11AA;D6C7;1112 116E 11AA; # (훇; 훇; 훇; 훇; 훇; ) HANGUL SYLLABLE HUGS D6C8;D6C8;1112 116E 11AB;D6C8;1112 116E 11AB; # (훈; 훈; 훈; 훈; 훈; ) HANGUL SYLLABLE HUN D6C9;D6C9;1112 116E 11AC;D6C9;1112 116E 11AC; # (훉; 훉; 훉; 훉; 훉; ) HANGUL SYLLABLE HUNJ D6CA;D6CA;1112 116E 11AD;D6CA;1112 116E 11AD; # (훊; 훊; 훊; 훊; 훊; ) HANGUL SYLLABLE HUNH D6CB;D6CB;1112 116E 11AE;D6CB;1112 116E 11AE; # (훋; 훋; 훋; 훋; 훋; ) HANGUL SYLLABLE HUD D6CC;D6CC;1112 116E 11AF;D6CC;1112 116E 11AF; # (훌; 훌; 훌; 훌; 훌; ) HANGUL SYLLABLE HUL D6CD;D6CD;1112 116E 11B0;D6CD;1112 116E 11B0; # (훍; 훍; 훍; 훍; 훍; ) HANGUL SYLLABLE HULG D6CE;D6CE;1112 116E 11B1;D6CE;1112 116E 11B1; # (훎; 훎; 훎; 훎; 훎; ) HANGUL SYLLABLE HULM D6CF;D6CF;1112 116E 11B2;D6CF;1112 116E 11B2; # (훏; 훏; 훏; 훏; 훏; ) HANGUL SYLLABLE HULB D6D0;D6D0;1112 116E 11B3;D6D0;1112 116E 11B3; # (훐; 훐; 훐; 훐; 훐; ) HANGUL SYLLABLE HULS D6D1;D6D1;1112 116E 11B4;D6D1;1112 116E 11B4; # (훑; 훑; 훑; 훑; 훑; ) HANGUL SYLLABLE HULT D6D2;D6D2;1112 116E 11B5;D6D2;1112 116E 11B5; # (훒; 훒; 훒; 훒; 훒; ) HANGUL SYLLABLE HULP D6D3;D6D3;1112 116E 11B6;D6D3;1112 116E 11B6; # (훓; 훓; 훓; 훓; 훓; ) HANGUL SYLLABLE HULH D6D4;D6D4;1112 116E 11B7;D6D4;1112 116E 11B7; # (훔; 훔; 훔; 훔; 훔; ) HANGUL SYLLABLE HUM D6D5;D6D5;1112 116E 11B8;D6D5;1112 116E 11B8; # (훕; 훕; 훕; 훕; 훕; ) HANGUL SYLLABLE HUB D6D6;D6D6;1112 116E 11B9;D6D6;1112 116E 11B9; # (훖; 훖; 훖; 훖; 훖; ) HANGUL SYLLABLE HUBS D6D7;D6D7;1112 116E 11BA;D6D7;1112 116E 11BA; # (훗; 훗; 훗; 훗; 훗; ) HANGUL SYLLABLE HUS D6D8;D6D8;1112 116E 11BB;D6D8;1112 116E 11BB; # (훘; 훘; 훘; 훘; 훘; ) HANGUL SYLLABLE HUSS D6D9;D6D9;1112 116E 11BC;D6D9;1112 116E 11BC; # (훙; 훙; 훙; 훙; 훙; ) HANGUL SYLLABLE HUNG D6DA;D6DA;1112 116E 11BD;D6DA;1112 116E 11BD; # (훚; 훚; 훚; 훚; 훚; ) HANGUL SYLLABLE HUJ D6DB;D6DB;1112 116E 11BE;D6DB;1112 116E 11BE; # (훛; 훛; 훛; 훛; 훛; ) HANGUL SYLLABLE HUC D6DC;D6DC;1112 116E 11BF;D6DC;1112 116E 11BF; # (훜; 훜; 훜; 훜; 훜; ) HANGUL SYLLABLE HUK D6DD;D6DD;1112 116E 11C0;D6DD;1112 116E 11C0; # (훝; 훝; 훝; 훝; 훝; ) HANGUL SYLLABLE HUT D6DE;D6DE;1112 116E 11C1;D6DE;1112 116E 11C1; # (훞; 훞; 훞; 훞; 훞; ) HANGUL SYLLABLE HUP D6DF;D6DF;1112 116E 11C2;D6DF;1112 116E 11C2; # (훟; 훟; 훟; 훟; 훟; ) HANGUL SYLLABLE HUH D6E0;D6E0;1112 116F;D6E0;1112 116F; # (훠; 훠; 훠; 훠; 훠; ) HANGUL SYLLABLE HWEO D6E1;D6E1;1112 116F 11A8;D6E1;1112 116F 11A8; # (훡; 훡; 훡; 훡; 훡; ) HANGUL SYLLABLE HWEOG D6E2;D6E2;1112 116F 11A9;D6E2;1112 116F 11A9; # (훢; 훢; 훢; 훢; 훢; ) HANGUL SYLLABLE HWEOGG D6E3;D6E3;1112 116F 11AA;D6E3;1112 116F 11AA; # (훣; 훣; 훣; 훣; 훣; ) HANGUL SYLLABLE HWEOGS D6E4;D6E4;1112 116F 11AB;D6E4;1112 116F 11AB; # (훤; 훤; 훤; 훤; 훤; ) HANGUL SYLLABLE HWEON D6E5;D6E5;1112 116F 11AC;D6E5;1112 116F 11AC; # (훥; 훥; 훥; 훥; 훥; ) HANGUL SYLLABLE HWEONJ D6E6;D6E6;1112 116F 11AD;D6E6;1112 116F 11AD; # (훦; 훦; 훦; 훦; 훦; ) HANGUL SYLLABLE HWEONH D6E7;D6E7;1112 116F 11AE;D6E7;1112 116F 11AE; # (훧; 훧; 훧; 훧; 훧; ) HANGUL SYLLABLE HWEOD D6E8;D6E8;1112 116F 11AF;D6E8;1112 116F 11AF; # (훨; 훨; 훨; 훨; 훨; ) HANGUL SYLLABLE HWEOL D6E9;D6E9;1112 116F 11B0;D6E9;1112 116F 11B0; # (훩; 훩; 훩; 훩; 훩; ) HANGUL SYLLABLE HWEOLG D6EA;D6EA;1112 116F 11B1;D6EA;1112 116F 11B1; # (훪; 훪; 훪; 훪; 훪; ) HANGUL SYLLABLE HWEOLM D6EB;D6EB;1112 116F 11B2;D6EB;1112 116F 11B2; # (훫; 훫; 훫; 훫; 훫; ) HANGUL SYLLABLE HWEOLB D6EC;D6EC;1112 116F 11B3;D6EC;1112 116F 11B3; # (훬; 훬; 훬; 훬; 훬; ) HANGUL SYLLABLE HWEOLS D6ED;D6ED;1112 116F 11B4;D6ED;1112 116F 11B4; # (훭; 훭; 훭; 훭; 훭; ) HANGUL SYLLABLE HWEOLT D6EE;D6EE;1112 116F 11B5;D6EE;1112 116F 11B5; # (훮; 훮; 훮; 훮; 훮; ) HANGUL SYLLABLE HWEOLP D6EF;D6EF;1112 116F 11B6;D6EF;1112 116F 11B6; # (훯; 훯; 훯; 훯; 훯; ) HANGUL SYLLABLE HWEOLH D6F0;D6F0;1112 116F 11B7;D6F0;1112 116F 11B7; # (훰; 훰; 훰; 훰; 훰; ) HANGUL SYLLABLE HWEOM D6F1;D6F1;1112 116F 11B8;D6F1;1112 116F 11B8; # (훱; 훱; 훱; 훱; 훱; ) HANGUL SYLLABLE HWEOB D6F2;D6F2;1112 116F 11B9;D6F2;1112 116F 11B9; # (훲; 훲; 훲; 훲; 훲; ) HANGUL SYLLABLE HWEOBS D6F3;D6F3;1112 116F 11BA;D6F3;1112 116F 11BA; # (훳; 훳; 훳; 훳; 훳; ) HANGUL SYLLABLE HWEOS D6F4;D6F4;1112 116F 11BB;D6F4;1112 116F 11BB; # (훴; 훴; 훴; 훴; 훴; ) HANGUL SYLLABLE HWEOSS D6F5;D6F5;1112 116F 11BC;D6F5;1112 116F 11BC; # (훵; 훵; 훵; 훵; 훵; ) HANGUL SYLLABLE HWEONG D6F6;D6F6;1112 116F 11BD;D6F6;1112 116F 11BD; # (훶; 훶; 훶; 훶; 훶; ) HANGUL SYLLABLE HWEOJ D6F7;D6F7;1112 116F 11BE;D6F7;1112 116F 11BE; # (훷; 훷; 훷; 훷; 훷; ) HANGUL SYLLABLE HWEOC D6F8;D6F8;1112 116F 11BF;D6F8;1112 116F 11BF; # (훸; 훸; 훸; 훸; 훸; ) HANGUL SYLLABLE HWEOK D6F9;D6F9;1112 116F 11C0;D6F9;1112 116F 11C0; # (훹; 훹; 훹; 훹; 훹; ) HANGUL SYLLABLE HWEOT D6FA;D6FA;1112 116F 11C1;D6FA;1112 116F 11C1; # (훺; 훺; 훺; 훺; 훺; ) HANGUL SYLLABLE HWEOP D6FB;D6FB;1112 116F 11C2;D6FB;1112 116F 11C2; # (훻; 훻; 훻; 훻; 훻; ) HANGUL SYLLABLE HWEOH D6FC;D6FC;1112 1170;D6FC;1112 1170; # (훼; 훼; 훼; 훼; 훼; ) HANGUL SYLLABLE HWE D6FD;D6FD;1112 1170 11A8;D6FD;1112 1170 11A8; # (훽; 훽; 훽; 훽; 훽; ) HANGUL SYLLABLE HWEG D6FE;D6FE;1112 1170 11A9;D6FE;1112 1170 11A9; # (훾; 훾; 훾; 훾; 훾; ) HANGUL SYLLABLE HWEGG D6FF;D6FF;1112 1170 11AA;D6FF;1112 1170 11AA; # (훿; 훿; 훿; 훿; 훿; ) HANGUL SYLLABLE HWEGS D700;D700;1112 1170 11AB;D700;1112 1170 11AB; # (휀; 휀; 휀; 휀; 휀; ) HANGUL SYLLABLE HWEN D701;D701;1112 1170 11AC;D701;1112 1170 11AC; # (휁; 휁; 휁; 휁; 휁; ) HANGUL SYLLABLE HWENJ D702;D702;1112 1170 11AD;D702;1112 1170 11AD; # (휂; 휂; 휂; 휂; 휂; ) HANGUL SYLLABLE HWENH D703;D703;1112 1170 11AE;D703;1112 1170 11AE; # (휃; 휃; 휃; 휃; 휃; ) HANGUL SYLLABLE HWED D704;D704;1112 1170 11AF;D704;1112 1170 11AF; # (휄; 휄; 휄; 휄; 휄; ) HANGUL SYLLABLE HWEL D705;D705;1112 1170 11B0;D705;1112 1170 11B0; # (휅; 휅; 휅; 휅; 휅; ) HANGUL SYLLABLE HWELG D706;D706;1112 1170 11B1;D706;1112 1170 11B1; # (휆; 휆; 휆; 휆; 휆; ) HANGUL SYLLABLE HWELM D707;D707;1112 1170 11B2;D707;1112 1170 11B2; # (휇; 휇; 휇; 휇; 휇; ) HANGUL SYLLABLE HWELB D708;D708;1112 1170 11B3;D708;1112 1170 11B3; # (휈; 휈; 휈; 휈; 휈; ) HANGUL SYLLABLE HWELS D709;D709;1112 1170 11B4;D709;1112 1170 11B4; # (휉; 휉; 휉; 휉; 휉; ) HANGUL SYLLABLE HWELT D70A;D70A;1112 1170 11B5;D70A;1112 1170 11B5; # (휊; 휊; 휊; 휊; 휊; ) HANGUL SYLLABLE HWELP D70B;D70B;1112 1170 11B6;D70B;1112 1170 11B6; # (휋; 휋; 휋; 휋; 휋; ) HANGUL SYLLABLE HWELH D70C;D70C;1112 1170 11B7;D70C;1112 1170 11B7; # (휌; 휌; 휌; 휌; 휌; ) HANGUL SYLLABLE HWEM D70D;D70D;1112 1170 11B8;D70D;1112 1170 11B8; # (휍; 휍; 휍; 휍; 휍; ) HANGUL SYLLABLE HWEB D70E;D70E;1112 1170 11B9;D70E;1112 1170 11B9; # (휎; 휎; 휎; 휎; 휎; ) HANGUL SYLLABLE HWEBS D70F;D70F;1112 1170 11BA;D70F;1112 1170 11BA; # (휏; 휏; 휏; 휏; 휏; ) HANGUL SYLLABLE HWES D710;D710;1112 1170 11BB;D710;1112 1170 11BB; # (휐; 휐; 휐; 휐; 휐; ) HANGUL SYLLABLE HWESS D711;D711;1112 1170 11BC;D711;1112 1170 11BC; # (휑; 휑; 휑; 휑; 휑; ) HANGUL SYLLABLE HWENG D712;D712;1112 1170 11BD;D712;1112 1170 11BD; # (휒; 휒; 휒; 휒; 휒; ) HANGUL SYLLABLE HWEJ D713;D713;1112 1170 11BE;D713;1112 1170 11BE; # (휓; 휓; 휓; 휓; 휓; ) HANGUL SYLLABLE HWEC D714;D714;1112 1170 11BF;D714;1112 1170 11BF; # (휔; 휔; 휔; 휔; 휔; ) HANGUL SYLLABLE HWEK D715;D715;1112 1170 11C0;D715;1112 1170 11C0; # (휕; 휕; 휕; 휕; 휕; ) HANGUL SYLLABLE HWET D716;D716;1112 1170 11C1;D716;1112 1170 11C1; # (휖; 휖; 휖; 휖; 휖; ) HANGUL SYLLABLE HWEP D717;D717;1112 1170 11C2;D717;1112 1170 11C2; # (휗; 휗; 휗; 휗; 휗; ) HANGUL SYLLABLE HWEH D718;D718;1112 1171;D718;1112 1171; # (휘; 휘; 휘; 휘; 휘; ) HANGUL SYLLABLE HWI D719;D719;1112 1171 11A8;D719;1112 1171 11A8; # (휙; 휙; 휙; 휙; 휙; ) HANGUL SYLLABLE HWIG D71A;D71A;1112 1171 11A9;D71A;1112 1171 11A9; # (휚; 휚; 휚; 휚; 휚; ) HANGUL SYLLABLE HWIGG D71B;D71B;1112 1171 11AA;D71B;1112 1171 11AA; # (휛; 휛; 휛; 휛; 휛; ) HANGUL SYLLABLE HWIGS D71C;D71C;1112 1171 11AB;D71C;1112 1171 11AB; # (휜; 휜; 휜; 휜; 휜; ) HANGUL SYLLABLE HWIN D71D;D71D;1112 1171 11AC;D71D;1112 1171 11AC; # (휝; 휝; 휝; 휝; 휝; ) HANGUL SYLLABLE HWINJ D71E;D71E;1112 1171 11AD;D71E;1112 1171 11AD; # (휞; 휞; 휞; 휞; 휞; ) HANGUL SYLLABLE HWINH D71F;D71F;1112 1171 11AE;D71F;1112 1171 11AE; # (휟; 휟; 휟; 휟; 휟; ) HANGUL SYLLABLE HWID D720;D720;1112 1171 11AF;D720;1112 1171 11AF; # (휠; 휠; 휠; 휠; 휠; ) HANGUL SYLLABLE HWIL D721;D721;1112 1171 11B0;D721;1112 1171 11B0; # (휡; 휡; 휡; 휡; 휡; ) HANGUL SYLLABLE HWILG D722;D722;1112 1171 11B1;D722;1112 1171 11B1; # (휢; 휢; 휢; 휢; 휢; ) HANGUL SYLLABLE HWILM D723;D723;1112 1171 11B2;D723;1112 1171 11B2; # (휣; 휣; 휣; 휣; 휣; ) HANGUL SYLLABLE HWILB D724;D724;1112 1171 11B3;D724;1112 1171 11B3; # (휤; 휤; 휤; 휤; 휤; ) HANGUL SYLLABLE HWILS D725;D725;1112 1171 11B4;D725;1112 1171 11B4; # (휥; 휥; 휥; 휥; 휥; ) HANGUL SYLLABLE HWILT D726;D726;1112 1171 11B5;D726;1112 1171 11B5; # (휦; 휦; 휦; 휦; 휦; ) HANGUL SYLLABLE HWILP D727;D727;1112 1171 11B6;D727;1112 1171 11B6; # (휧; 휧; 휧; 휧; 휧; ) HANGUL SYLLABLE HWILH D728;D728;1112 1171 11B7;D728;1112 1171 11B7; # (휨; 휨; 휨; 휨; 휨; ) HANGUL SYLLABLE HWIM D729;D729;1112 1171 11B8;D729;1112 1171 11B8; # (휩; 휩; 휩; 휩; 휩; ) HANGUL SYLLABLE HWIB D72A;D72A;1112 1171 11B9;D72A;1112 1171 11B9; # (휪; 휪; 휪; 휪; 휪; ) HANGUL SYLLABLE HWIBS D72B;D72B;1112 1171 11BA;D72B;1112 1171 11BA; # (휫; 휫; 휫; 휫; 휫; ) HANGUL SYLLABLE HWIS D72C;D72C;1112 1171 11BB;D72C;1112 1171 11BB; # (휬; 휬; 휬; 휬; 휬; ) HANGUL SYLLABLE HWISS D72D;D72D;1112 1171 11BC;D72D;1112 1171 11BC; # (휭; 휭; 휭; 휭; 휭; ) HANGUL SYLLABLE HWING D72E;D72E;1112 1171 11BD;D72E;1112 1171 11BD; # (휮; 휮; 휮; 휮; 휮; ) HANGUL SYLLABLE HWIJ D72F;D72F;1112 1171 11BE;D72F;1112 1171 11BE; # (휯; 휯; 휯; 휯; 휯; ) HANGUL SYLLABLE HWIC D730;D730;1112 1171 11BF;D730;1112 1171 11BF; # (휰; 휰; 휰; 휰; 휰; ) HANGUL SYLLABLE HWIK D731;D731;1112 1171 11C0;D731;1112 1171 11C0; # (휱; 휱; 휱; 휱; 휱; ) HANGUL SYLLABLE HWIT D732;D732;1112 1171 11C1;D732;1112 1171 11C1; # (휲; 휲; 휲; 휲; 휲; ) HANGUL SYLLABLE HWIP D733;D733;1112 1171 11C2;D733;1112 1171 11C2; # (휳; 휳; 휳; 휳; 휳; ) HANGUL SYLLABLE HWIH D734;D734;1112 1172;D734;1112 1172; # (휴; 휴; 휴; 휴; 휴; ) HANGUL SYLLABLE HYU D735;D735;1112 1172 11A8;D735;1112 1172 11A8; # (휵; 휵; 휵; 휵; 휵; ) HANGUL SYLLABLE HYUG D736;D736;1112 1172 11A9;D736;1112 1172 11A9; # (휶; 휶; 휶; 휶; 휶; ) HANGUL SYLLABLE HYUGG D737;D737;1112 1172 11AA;D737;1112 1172 11AA; # (휷; 휷; 휷; 휷; 휷; ) HANGUL SYLLABLE HYUGS D738;D738;1112 1172 11AB;D738;1112 1172 11AB; # (휸; 휸; 휸; 휸; 휸; ) HANGUL SYLLABLE HYUN D739;D739;1112 1172 11AC;D739;1112 1172 11AC; # (휹; 휹; 휹; 휹; 휹; ) HANGUL SYLLABLE HYUNJ D73A;D73A;1112 1172 11AD;D73A;1112 1172 11AD; # (휺; 휺; 휺; 휺; 휺; ) HANGUL SYLLABLE HYUNH D73B;D73B;1112 1172 11AE;D73B;1112 1172 11AE; # (휻; 휻; 휻; 휻; 휻; ) HANGUL SYLLABLE HYUD D73C;D73C;1112 1172 11AF;D73C;1112 1172 11AF; # (휼; 휼; 휼; 휼; 휼; ) HANGUL SYLLABLE HYUL D73D;D73D;1112 1172 11B0;D73D;1112 1172 11B0; # (휽; 휽; 휽; 휽; 휽; ) HANGUL SYLLABLE HYULG D73E;D73E;1112 1172 11B1;D73E;1112 1172 11B1; # (휾; 휾; 휾; 휾; 휾; ) HANGUL SYLLABLE HYULM D73F;D73F;1112 1172 11B2;D73F;1112 1172 11B2; # (휿; 휿; 휿; 휿; 휿; ) HANGUL SYLLABLE HYULB D740;D740;1112 1172 11B3;D740;1112 1172 11B3; # (흀; 흀; 흀; 흀; 흀; ) HANGUL SYLLABLE HYULS D741;D741;1112 1172 11B4;D741;1112 1172 11B4; # (흁; 흁; 흁; 흁; 흁; ) HANGUL SYLLABLE HYULT D742;D742;1112 1172 11B5;D742;1112 1172 11B5; # (흂; 흂; 흂; 흂; 흂; ) HANGUL SYLLABLE HYULP D743;D743;1112 1172 11B6;D743;1112 1172 11B6; # (흃; 흃; 흃; 흃; 흃; ) HANGUL SYLLABLE HYULH D744;D744;1112 1172 11B7;D744;1112 1172 11B7; # (흄; 흄; 흄; 흄; 흄; ) HANGUL SYLLABLE HYUM D745;D745;1112 1172 11B8;D745;1112 1172 11B8; # (흅; 흅; 흅; 흅; 흅; ) HANGUL SYLLABLE HYUB D746;D746;1112 1172 11B9;D746;1112 1172 11B9; # (흆; 흆; 흆; 흆; 흆; ) HANGUL SYLLABLE HYUBS D747;D747;1112 1172 11BA;D747;1112 1172 11BA; # (흇; 흇; 흇; 흇; 흇; ) HANGUL SYLLABLE HYUS D748;D748;1112 1172 11BB;D748;1112 1172 11BB; # (흈; 흈; 흈; 흈; 흈; ) HANGUL SYLLABLE HYUSS D749;D749;1112 1172 11BC;D749;1112 1172 11BC; # (흉; 흉; 흉; 흉; 흉; ) HANGUL SYLLABLE HYUNG D74A;D74A;1112 1172 11BD;D74A;1112 1172 11BD; # (흊; 흊; 흊; 흊; 흊; ) HANGUL SYLLABLE HYUJ D74B;D74B;1112 1172 11BE;D74B;1112 1172 11BE; # (흋; 흋; 흋; 흋; 흋; ) HANGUL SYLLABLE HYUC D74C;D74C;1112 1172 11BF;D74C;1112 1172 11BF; # (흌; 흌; 흌; 흌; 흌; ) HANGUL SYLLABLE HYUK D74D;D74D;1112 1172 11C0;D74D;1112 1172 11C0; # (흍; 흍; 흍; 흍; 흍; ) HANGUL SYLLABLE HYUT D74E;D74E;1112 1172 11C1;D74E;1112 1172 11C1; # (흎; 흎; 흎; 흎; 흎; ) HANGUL SYLLABLE HYUP D74F;D74F;1112 1172 11C2;D74F;1112 1172 11C2; # (흏; 흏; 흏; 흏; 흏; ) HANGUL SYLLABLE HYUH D750;D750;1112 1173;D750;1112 1173; # (흐; 흐; 흐; 흐; 흐; ) HANGUL SYLLABLE HEU D751;D751;1112 1173 11A8;D751;1112 1173 11A8; # (흑; 흑; 흑; 흑; 흑; ) HANGUL SYLLABLE HEUG D752;D752;1112 1173 11A9;D752;1112 1173 11A9; # (흒; 흒; 흒; 흒; 흒; ) HANGUL SYLLABLE HEUGG D753;D753;1112 1173 11AA;D753;1112 1173 11AA; # (흓; 흓; 흓; 흓; 흓; ) HANGUL SYLLABLE HEUGS D754;D754;1112 1173 11AB;D754;1112 1173 11AB; # (흔; 흔; 흔; 흔; 흔; ) HANGUL SYLLABLE HEUN D755;D755;1112 1173 11AC;D755;1112 1173 11AC; # (흕; 흕; 흕; 흕; 흕; ) HANGUL SYLLABLE HEUNJ D756;D756;1112 1173 11AD;D756;1112 1173 11AD; # (흖; 흖; 흖; 흖; 흖; ) HANGUL SYLLABLE HEUNH D757;D757;1112 1173 11AE;D757;1112 1173 11AE; # (흗; 흗; 흗; 흗; 흗; ) HANGUL SYLLABLE HEUD D758;D758;1112 1173 11AF;D758;1112 1173 11AF; # (흘; 흘; 흘; 흘; 흘; ) HANGUL SYLLABLE HEUL D759;D759;1112 1173 11B0;D759;1112 1173 11B0; # (흙; 흙; 흙; 흙; 흙; ) HANGUL SYLLABLE HEULG D75A;D75A;1112 1173 11B1;D75A;1112 1173 11B1; # (흚; 흚; 흚; 흚; 흚; ) HANGUL SYLLABLE HEULM D75B;D75B;1112 1173 11B2;D75B;1112 1173 11B2; # (흛; 흛; 흛; 흛; 흛; ) HANGUL SYLLABLE HEULB D75C;D75C;1112 1173 11B3;D75C;1112 1173 11B3; # (흜; 흜; 흜; 흜; 흜; ) HANGUL SYLLABLE HEULS D75D;D75D;1112 1173 11B4;D75D;1112 1173 11B4; # (흝; 흝; 흝; 흝; 흝; ) HANGUL SYLLABLE HEULT D75E;D75E;1112 1173 11B5;D75E;1112 1173 11B5; # (흞; 흞; 흞; 흞; 흞; ) HANGUL SYLLABLE HEULP D75F;D75F;1112 1173 11B6;D75F;1112 1173 11B6; # (흟; 흟; 흟; 흟; 흟; ) HANGUL SYLLABLE HEULH D760;D760;1112 1173 11B7;D760;1112 1173 11B7; # (흠; 흠; 흠; 흠; 흠; ) HANGUL SYLLABLE HEUM D761;D761;1112 1173 11B8;D761;1112 1173 11B8; # (흡; 흡; 흡; 흡; 흡; ) HANGUL SYLLABLE HEUB D762;D762;1112 1173 11B9;D762;1112 1173 11B9; # (흢; 흢; 흢; 흢; 흢; ) HANGUL SYLLABLE HEUBS D763;D763;1112 1173 11BA;D763;1112 1173 11BA; # (흣; 흣; 흣; 흣; 흣; ) HANGUL SYLLABLE HEUS D764;D764;1112 1173 11BB;D764;1112 1173 11BB; # (흤; 흤; 흤; 흤; 흤; ) HANGUL SYLLABLE HEUSS D765;D765;1112 1173 11BC;D765;1112 1173 11BC; # (흥; 흥; 흥; 흥; 흥; ) HANGUL SYLLABLE HEUNG D766;D766;1112 1173 11BD;D766;1112 1173 11BD; # (흦; 흦; 흦; 흦; 흦; ) HANGUL SYLLABLE HEUJ D767;D767;1112 1173 11BE;D767;1112 1173 11BE; # (흧; 흧; 흧; 흧; 흧; ) HANGUL SYLLABLE HEUC D768;D768;1112 1173 11BF;D768;1112 1173 11BF; # (흨; 흨; 흨; 흨; 흨; ) HANGUL SYLLABLE HEUK D769;D769;1112 1173 11C0;D769;1112 1173 11C0; # (흩; 흩; 흩; 흩; 흩; ) HANGUL SYLLABLE HEUT D76A;D76A;1112 1173 11C1;D76A;1112 1173 11C1; # (흪; 흪; 흪; 흪; 흪; ) HANGUL SYLLABLE HEUP D76B;D76B;1112 1173 11C2;D76B;1112 1173 11C2; # (흫; 흫; 흫; 흫; 흫; ) HANGUL SYLLABLE HEUH D76C;D76C;1112 1174;D76C;1112 1174; # (희; 희; 희; 희; 희; ) HANGUL SYLLABLE HYI D76D;D76D;1112 1174 11A8;D76D;1112 1174 11A8; # (흭; 흭; 흭; 흭; 흭; ) HANGUL SYLLABLE HYIG D76E;D76E;1112 1174 11A9;D76E;1112 1174 11A9; # (흮; 흮; 흮; 흮; 흮; ) HANGUL SYLLABLE HYIGG D76F;D76F;1112 1174 11AA;D76F;1112 1174 11AA; # (흯; 흯; 흯; 흯; 흯; ) HANGUL SYLLABLE HYIGS D770;D770;1112 1174 11AB;D770;1112 1174 11AB; # (흰; 흰; 흰; 흰; 흰; ) HANGUL SYLLABLE HYIN D771;D771;1112 1174 11AC;D771;1112 1174 11AC; # (흱; 흱; 흱; 흱; 흱; ) HANGUL SYLLABLE HYINJ D772;D772;1112 1174 11AD;D772;1112 1174 11AD; # (흲; 흲; 흲; 흲; 흲; ) HANGUL SYLLABLE HYINH D773;D773;1112 1174 11AE;D773;1112 1174 11AE; # (흳; 흳; 흳; 흳; 흳; ) HANGUL SYLLABLE HYID D774;D774;1112 1174 11AF;D774;1112 1174 11AF; # (흴; 흴; 흴; 흴; 흴; ) HANGUL SYLLABLE HYIL D775;D775;1112 1174 11B0;D775;1112 1174 11B0; # (흵; 흵; 흵; 흵; 흵; ) HANGUL SYLLABLE HYILG D776;D776;1112 1174 11B1;D776;1112 1174 11B1; # (흶; 흶; 흶; 흶; 흶; ) HANGUL SYLLABLE HYILM D777;D777;1112 1174 11B2;D777;1112 1174 11B2; # (흷; 흷; 흷; 흷; 흷; ) HANGUL SYLLABLE HYILB D778;D778;1112 1174 11B3;D778;1112 1174 11B3; # (흸; 흸; 흸; 흸; 흸; ) HANGUL SYLLABLE HYILS D779;D779;1112 1174 11B4;D779;1112 1174 11B4; # (흹; 흹; 흹; 흹; 흹; ) HANGUL SYLLABLE HYILT D77A;D77A;1112 1174 11B5;D77A;1112 1174 11B5; # (흺; 흺; 흺; 흺; 흺; ) HANGUL SYLLABLE HYILP D77B;D77B;1112 1174 11B6;D77B;1112 1174 11B6; # (흻; 흻; 흻; 흻; 흻; ) HANGUL SYLLABLE HYILH D77C;D77C;1112 1174 11B7;D77C;1112 1174 11B7; # (흼; 흼; 흼; 흼; 흼; ) HANGUL SYLLABLE HYIM D77D;D77D;1112 1174 11B8;D77D;1112 1174 11B8; # (흽; 흽; 흽; 흽; 흽; ) HANGUL SYLLABLE HYIB D77E;D77E;1112 1174 11B9;D77E;1112 1174 11B9; # (흾; 흾; 흾; 흾; 흾; ) HANGUL SYLLABLE HYIBS D77F;D77F;1112 1174 11BA;D77F;1112 1174 11BA; # (흿; 흿; 흿; 흿; 흿; ) HANGUL SYLLABLE HYIS D780;D780;1112 1174 11BB;D780;1112 1174 11BB; # (힀; 힀; 힀; 힀; 힀; ) HANGUL SYLLABLE HYISS D781;D781;1112 1174 11BC;D781;1112 1174 11BC; # (힁; 힁; 힁; 힁; 힁; ) HANGUL SYLLABLE HYING D782;D782;1112 1174 11BD;D782;1112 1174 11BD; # (힂; 힂; 힂; 힂; 힂; ) HANGUL SYLLABLE HYIJ D783;D783;1112 1174 11BE;D783;1112 1174 11BE; # (힃; 힃; 힃; 힃; 힃; ) HANGUL SYLLABLE HYIC D784;D784;1112 1174 11BF;D784;1112 1174 11BF; # (힄; 힄; 힄; 힄; 힄; ) HANGUL SYLLABLE HYIK D785;D785;1112 1174 11C0;D785;1112 1174 11C0; # (힅; 힅; 힅; 힅; 힅; ) HANGUL SYLLABLE HYIT D786;D786;1112 1174 11C1;D786;1112 1174 11C1; # (힆; 힆; 힆; 힆; 힆; ) HANGUL SYLLABLE HYIP D787;D787;1112 1174 11C2;D787;1112 1174 11C2; # (힇; 힇; 힇; 힇; 힇; ) HANGUL SYLLABLE HYIH D788;D788;1112 1175;D788;1112 1175; # (히; 히; 히; 히; 히; ) HANGUL SYLLABLE HI D789;D789;1112 1175 11A8;D789;1112 1175 11A8; # (힉; 힉; 힉; 힉; 힉; ) HANGUL SYLLABLE HIG D78A;D78A;1112 1175 11A9;D78A;1112 1175 11A9; # (힊; 힊; 힊; 힊; 힊; ) HANGUL SYLLABLE HIGG D78B;D78B;1112 1175 11AA;D78B;1112 1175 11AA; # (힋; 힋; 힋; 힋; 힋; ) HANGUL SYLLABLE HIGS D78C;D78C;1112 1175 11AB;D78C;1112 1175 11AB; # (힌; 힌; 힌; 힌; 힌; ) HANGUL SYLLABLE HIN D78D;D78D;1112 1175 11AC;D78D;1112 1175 11AC; # (힍; 힍; 힍; 힍; 힍; ) HANGUL SYLLABLE HINJ D78E;D78E;1112 1175 11AD;D78E;1112 1175 11AD; # (힎; 힎; 힎; 힎; 힎; ) HANGUL SYLLABLE HINH D78F;D78F;1112 1175 11AE;D78F;1112 1175 11AE; # (힏; 힏; 힏; 힏; 힏; ) HANGUL SYLLABLE HID D790;D790;1112 1175 11AF;D790;1112 1175 11AF; # (힐; 힐; 힐; 힐; 힐; ) HANGUL SYLLABLE HIL D791;D791;1112 1175 11B0;D791;1112 1175 11B0; # (힑; 힑; 힑; 힑; 힑; ) HANGUL SYLLABLE HILG D792;D792;1112 1175 11B1;D792;1112 1175 11B1; # (힒; 힒; 힒; 힒; 힒; ) HANGUL SYLLABLE HILM D793;D793;1112 1175 11B2;D793;1112 1175 11B2; # (힓; 힓; 힓; 힓; 힓; ) HANGUL SYLLABLE HILB D794;D794;1112 1175 11B3;D794;1112 1175 11B3; # (힔; 힔; 힔; 힔; 힔; ) HANGUL SYLLABLE HILS D795;D795;1112 1175 11B4;D795;1112 1175 11B4; # (힕; 힕; 힕; 힕; 힕; ) HANGUL SYLLABLE HILT D796;D796;1112 1175 11B5;D796;1112 1175 11B5; # (힖; 힖; 힖; 힖; 힖; ) HANGUL SYLLABLE HILP D797;D797;1112 1175 11B6;D797;1112 1175 11B6; # (힗; 힗; 힗; 힗; 힗; ) HANGUL SYLLABLE HILH D798;D798;1112 1175 11B7;D798;1112 1175 11B7; # (힘; 힘; 힘; 힘; 힘; ) HANGUL SYLLABLE HIM D799;D799;1112 1175 11B8;D799;1112 1175 11B8; # (힙; 힙; 힙; 힙; 힙; ) HANGUL SYLLABLE HIB D79A;D79A;1112 1175 11B9;D79A;1112 1175 11B9; # (힚; 힚; 힚; 힚; 힚; ) HANGUL SYLLABLE HIBS D79B;D79B;1112 1175 11BA;D79B;1112 1175 11BA; # (힛; 힛; 힛; 힛; 힛; ) HANGUL SYLLABLE HIS D79C;D79C;1112 1175 11BB;D79C;1112 1175 11BB; # (힜; 힜; 힜; 힜; 힜; ) HANGUL SYLLABLE HISS D79D;D79D;1112 1175 11BC;D79D;1112 1175 11BC; # (힝; 힝; 힝; 힝; 힝; ) HANGUL SYLLABLE HING D79E;D79E;1112 1175 11BD;D79E;1112 1175 11BD; # (힞; 힞; 힞; 힞; 힞; ) HANGUL SYLLABLE HIJ D79F;D79F;1112 1175 11BE;D79F;1112 1175 11BE; # (힟; 힟; 힟; 힟; 힟; ) HANGUL SYLLABLE HIC D7A0;D7A0;1112 1175 11BF;D7A0;1112 1175 11BF; # (힠; 힠; 힠; 힠; 힠; ) HANGUL SYLLABLE HIK D7A1;D7A1;1112 1175 11C0;D7A1;1112 1175 11C0; # (힡; 힡; 힡; 힡; 힡; ) HANGUL SYLLABLE HIT D7A2;D7A2;1112 1175 11C1;D7A2;1112 1175 11C1; # (힢; 힢; 힢; 힢; 힢; ) HANGUL SYLLABLE HIP D7A3;D7A3;1112 1175 11C2;D7A3;1112 1175 11C2; # (힣; 힣; 힣; 힣; 힣; ) HANGUL SYLLABLE HIH F900;8C48;8C48;8C48;8C48; # (豈; 豈; 豈; 豈; 豈; ) CJK COMPATIBILITY IDEOGRAPH-F900 F901;66F4;66F4;66F4;66F4; # (更; 更; 更; 更; 更; ) CJK COMPATIBILITY IDEOGRAPH-F901 F902;8ECA;8ECA;8ECA;8ECA; # (車; 車; 車; 車; 車; ) CJK COMPATIBILITY IDEOGRAPH-F902 F903;8CC8;8CC8;8CC8;8CC8; # (賈; 賈; 賈; 賈; 賈; ) CJK COMPATIBILITY IDEOGRAPH-F903 F904;6ED1;6ED1;6ED1;6ED1; # (滑; 滑; 滑; 滑; 滑; ) CJK COMPATIBILITY IDEOGRAPH-F904 F905;4E32;4E32;4E32;4E32; # (串; 串; 串; 串; 串; ) CJK COMPATIBILITY IDEOGRAPH-F905 F906;53E5;53E5;53E5;53E5; # (句; 句; 句; 句; 句; ) CJK COMPATIBILITY IDEOGRAPH-F906 F907;9F9C;9F9C;9F9C;9F9C; # (龜; 龜; 龜; 龜; 龜; ) CJK COMPATIBILITY IDEOGRAPH-F907 F908;9F9C;9F9C;9F9C;9F9C; # (龜; 龜; 龜; 龜; 龜; ) CJK COMPATIBILITY IDEOGRAPH-F908 F909;5951;5951;5951;5951; # (契; 契; 契; 契; 契; ) CJK COMPATIBILITY IDEOGRAPH-F909 F90A;91D1;91D1;91D1;91D1; # (金; 金; 金; 金; 金; ) CJK COMPATIBILITY IDEOGRAPH-F90A F90B;5587;5587;5587;5587; # (喇; 喇; 喇; 喇; 喇; ) CJK COMPATIBILITY IDEOGRAPH-F90B F90C;5948;5948;5948;5948; # (奈; 奈; 奈; 奈; 奈; ) CJK COMPATIBILITY IDEOGRAPH-F90C F90D;61F6;61F6;61F6;61F6; # (懶; 懶; 懶; 懶; 懶; ) CJK COMPATIBILITY IDEOGRAPH-F90D F90E;7669;7669;7669;7669; # (癩; 癩; 癩; 癩; 癩; ) CJK COMPATIBILITY IDEOGRAPH-F90E F90F;7F85;7F85;7F85;7F85; # (羅; 羅; 羅; 羅; 羅; ) CJK COMPATIBILITY IDEOGRAPH-F90F F910;863F;863F;863F;863F; # (蘿; 蘿; 蘿; 蘿; 蘿; ) CJK COMPATIBILITY IDEOGRAPH-F910 F911;87BA;87BA;87BA;87BA; # (螺; 螺; 螺; 螺; 螺; ) CJK COMPATIBILITY IDEOGRAPH-F911 F912;88F8;88F8;88F8;88F8; # (裸; 裸; 裸; 裸; 裸; ) CJK COMPATIBILITY IDEOGRAPH-F912 F913;908F;908F;908F;908F; # (邏; 邏; 邏; 邏; 邏; ) CJK COMPATIBILITY IDEOGRAPH-F913 F914;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F914 F915;6D1B;6D1B;6D1B;6D1B; # (洛; 洛; 洛; 洛; 洛; ) CJK COMPATIBILITY IDEOGRAPH-F915 F916;70D9;70D9;70D9;70D9; # (烙; 烙; 烙; 烙; 烙; ) CJK COMPATIBILITY IDEOGRAPH-F916 F917;73DE;73DE;73DE;73DE; # (珞; 珞; 珞; 珞; 珞; ) CJK COMPATIBILITY IDEOGRAPH-F917 F918;843D;843D;843D;843D; # (落; 落; 落; 落; 落; ) CJK COMPATIBILITY IDEOGRAPH-F918 F919;916A;916A;916A;916A; # (酪; 酪; 酪; 酪; 酪; ) CJK COMPATIBILITY IDEOGRAPH-F919 F91A;99F1;99F1;99F1;99F1; # (駱; 駱; 駱; 駱; 駱; ) CJK COMPATIBILITY IDEOGRAPH-F91A F91B;4E82;4E82;4E82;4E82; # (亂; 亂; 亂; 亂; 亂; ) CJK COMPATIBILITY IDEOGRAPH-F91B F91C;5375;5375;5375;5375; # (卵; 卵; 卵; 卵; 卵; ) CJK COMPATIBILITY IDEOGRAPH-F91C F91D;6B04;6B04;6B04;6B04; # (欄; 欄; 欄; 欄; 欄; ) CJK COMPATIBILITY IDEOGRAPH-F91D F91E;721B;721B;721B;721B; # (爛; 爛; 爛; 爛; 爛; ) CJK COMPATIBILITY IDEOGRAPH-F91E F91F;862D;862D;862D;862D; # (蘭; 蘭; 蘭; 蘭; 蘭; ) CJK COMPATIBILITY IDEOGRAPH-F91F F920;9E1E;9E1E;9E1E;9E1E; # (鸞; 鸞; 鸞; 鸞; 鸞; ) CJK COMPATIBILITY IDEOGRAPH-F920 F921;5D50;5D50;5D50;5D50; # (嵐; 嵐; 嵐; 嵐; 嵐; ) CJK COMPATIBILITY IDEOGRAPH-F921 F922;6FEB;6FEB;6FEB;6FEB; # (濫; 濫; 濫; 濫; 濫; ) CJK COMPATIBILITY IDEOGRAPH-F922 F923;85CD;85CD;85CD;85CD; # (藍; 藍; 藍; 藍; 藍; ) CJK COMPATIBILITY IDEOGRAPH-F923 F924;8964;8964;8964;8964; # (襤; 襤; 襤; 襤; 襤; ) CJK COMPATIBILITY IDEOGRAPH-F924 F925;62C9;62C9;62C9;62C9; # (拉; 拉; 拉; 拉; 拉; ) CJK COMPATIBILITY IDEOGRAPH-F925 F926;81D8;81D8;81D8;81D8; # (臘; 臘; 臘; 臘; 臘; ) CJK COMPATIBILITY IDEOGRAPH-F926 F927;881F;881F;881F;881F; # (蠟; 蠟; 蠟; 蠟; 蠟; ) CJK COMPATIBILITY IDEOGRAPH-F927 F928;5ECA;5ECA;5ECA;5ECA; # (廊; 廊; 廊; 廊; 廊; ) CJK COMPATIBILITY IDEOGRAPH-F928 F929;6717;6717;6717;6717; # (朗; 朗; 朗; 朗; 朗; ) CJK COMPATIBILITY IDEOGRAPH-F929 F92A;6D6A;6D6A;6D6A;6D6A; # (浪; 浪; 浪; 浪; 浪; ) CJK COMPATIBILITY IDEOGRAPH-F92A F92B;72FC;72FC;72FC;72FC; # (狼; 狼; 狼; 狼; 狼; ) CJK COMPATIBILITY IDEOGRAPH-F92B F92C;90CE;90CE;90CE;90CE; # (郎; 郎; 郎; 郎; 郎; ) CJK COMPATIBILITY IDEOGRAPH-F92C F92D;4F86;4F86;4F86;4F86; # (來; 來; 來; 來; 來; ) CJK COMPATIBILITY IDEOGRAPH-F92D F92E;51B7;51B7;51B7;51B7; # (冷; 冷; 冷; 冷; 冷; ) CJK COMPATIBILITY IDEOGRAPH-F92E F92F;52DE;52DE;52DE;52DE; # (勞; 勞; 勞; 勞; 勞; ) CJK COMPATIBILITY IDEOGRAPH-F92F F930;64C4;64C4;64C4;64C4; # (擄; 擄; 擄; 擄; 擄; ) CJK COMPATIBILITY IDEOGRAPH-F930 F931;6AD3;6AD3;6AD3;6AD3; # (櫓; 櫓; 櫓; 櫓; 櫓; ) CJK COMPATIBILITY IDEOGRAPH-F931 F932;7210;7210;7210;7210; # (爐; 爐; 爐; 爐; 爐; ) CJK COMPATIBILITY IDEOGRAPH-F932 F933;76E7;76E7;76E7;76E7; # (盧; 盧; 盧; 盧; 盧; ) CJK COMPATIBILITY IDEOGRAPH-F933 F934;8001;8001;8001;8001; # (老; 老; 老; 老; 老; ) CJK COMPATIBILITY IDEOGRAPH-F934 F935;8606;8606;8606;8606; # (蘆; 蘆; 蘆; 蘆; 蘆; ) CJK COMPATIBILITY IDEOGRAPH-F935 F936;865C;865C;865C;865C; # (虜; 虜; 虜; 虜; 虜; ) CJK COMPATIBILITY IDEOGRAPH-F936 F937;8DEF;8DEF;8DEF;8DEF; # (路; 路; 路; 路; 路; ) CJK COMPATIBILITY IDEOGRAPH-F937 F938;9732;9732;9732;9732; # (露; 露; 露; 露; 露; ) CJK COMPATIBILITY IDEOGRAPH-F938 F939;9B6F;9B6F;9B6F;9B6F; # (魯; 魯; 魯; 魯; 魯; ) CJK COMPATIBILITY IDEOGRAPH-F939 F93A;9DFA;9DFA;9DFA;9DFA; # (鷺; 鷺; 鷺; 鷺; 鷺; ) CJK COMPATIBILITY IDEOGRAPH-F93A F93B;788C;788C;788C;788C; # (碌; 碌; 碌; 碌; 碌; ) CJK COMPATIBILITY IDEOGRAPH-F93B F93C;797F;797F;797F;797F; # (祿; 祿; 祿; 祿; 祿; ) CJK COMPATIBILITY IDEOGRAPH-F93C F93D;7DA0;7DA0;7DA0;7DA0; # (綠; 綠; 綠; 綠; 綠; ) CJK COMPATIBILITY IDEOGRAPH-F93D F93E;83C9;83C9;83C9;83C9; # (菉; 菉; 菉; 菉; 菉; ) CJK COMPATIBILITY IDEOGRAPH-F93E F93F;9304;9304;9304;9304; # (錄; 錄; 錄; 錄; 錄; ) CJK COMPATIBILITY IDEOGRAPH-F93F F940;9E7F;9E7F;9E7F;9E7F; # (鹿; 鹿; 鹿; 鹿; 鹿; ) CJK COMPATIBILITY IDEOGRAPH-F940 F941;8AD6;8AD6;8AD6;8AD6; # (論; 論; 論; 論; 論; ) CJK COMPATIBILITY IDEOGRAPH-F941 F942;58DF;58DF;58DF;58DF; # (壟; 壟; 壟; 壟; 壟; ) CJK COMPATIBILITY IDEOGRAPH-F942 F943;5F04;5F04;5F04;5F04; # (弄; 弄; 弄; 弄; 弄; ) CJK COMPATIBILITY IDEOGRAPH-F943 F944;7C60;7C60;7C60;7C60; # (籠; 籠; 籠; 籠; 籠; ) CJK COMPATIBILITY IDEOGRAPH-F944 F945;807E;807E;807E;807E; # (聾; 聾; 聾; 聾; 聾; ) CJK COMPATIBILITY IDEOGRAPH-F945 F946;7262;7262;7262;7262; # (牢; 牢; 牢; 牢; 牢; ) CJK COMPATIBILITY IDEOGRAPH-F946 F947;78CA;78CA;78CA;78CA; # (磊; 磊; 磊; 磊; 磊; ) CJK COMPATIBILITY IDEOGRAPH-F947 F948;8CC2;8CC2;8CC2;8CC2; # (賂; 賂; 賂; 賂; 賂; ) CJK COMPATIBILITY IDEOGRAPH-F948 F949;96F7;96F7;96F7;96F7; # (雷; 雷; 雷; 雷; 雷; ) CJK COMPATIBILITY IDEOGRAPH-F949 F94A;58D8;58D8;58D8;58D8; # (壘; 壘; 壘; 壘; 壘; ) CJK COMPATIBILITY IDEOGRAPH-F94A F94B;5C62;5C62;5C62;5C62; # (屢; 屢; 屢; 屢; 屢; ) CJK COMPATIBILITY IDEOGRAPH-F94B F94C;6A13;6A13;6A13;6A13; # (樓; 樓; 樓; 樓; 樓; ) CJK COMPATIBILITY IDEOGRAPH-F94C F94D;6DDA;6DDA;6DDA;6DDA; # (淚; 淚; 淚; 淚; 淚; ) CJK COMPATIBILITY IDEOGRAPH-F94D F94E;6F0F;6F0F;6F0F;6F0F; # (漏; 漏; 漏; 漏; 漏; ) CJK COMPATIBILITY IDEOGRAPH-F94E F94F;7D2F;7D2F;7D2F;7D2F; # (累; 累; 累; 累; 累; ) CJK COMPATIBILITY IDEOGRAPH-F94F F950;7E37;7E37;7E37;7E37; # (縷; 縷; 縷; 縷; 縷; ) CJK COMPATIBILITY IDEOGRAPH-F950 F951;964B;964B;964B;964B; # (陋; 陋; 陋; 陋; 陋; ) CJK COMPATIBILITY IDEOGRAPH-F951 F952;52D2;52D2;52D2;52D2; # (勒; 勒; 勒; 勒; 勒; ) CJK COMPATIBILITY IDEOGRAPH-F952 F953;808B;808B;808B;808B; # (肋; 肋; 肋; 肋; 肋; ) CJK COMPATIBILITY IDEOGRAPH-F953 F954;51DC;51DC;51DC;51DC; # (凜; 凜; 凜; 凜; 凜; ) CJK COMPATIBILITY IDEOGRAPH-F954 F955;51CC;51CC;51CC;51CC; # (凌; 凌; 凌; 凌; 凌; ) CJK COMPATIBILITY IDEOGRAPH-F955 F956;7A1C;7A1C;7A1C;7A1C; # (稜; 稜; 稜; 稜; 稜; ) CJK COMPATIBILITY IDEOGRAPH-F956 F957;7DBE;7DBE;7DBE;7DBE; # (綾; 綾; 綾; 綾; 綾; ) CJK COMPATIBILITY IDEOGRAPH-F957 F958;83F1;83F1;83F1;83F1; # (菱; 菱; 菱; 菱; 菱; ) CJK COMPATIBILITY IDEOGRAPH-F958 F959;9675;9675;9675;9675; # (陵; 陵; 陵; 陵; 陵; ) CJK COMPATIBILITY IDEOGRAPH-F959 F95A;8B80;8B80;8B80;8B80; # (讀; 讀; 讀; 讀; 讀; ) CJK COMPATIBILITY IDEOGRAPH-F95A F95B;62CF;62CF;62CF;62CF; # (拏; 拏; 拏; 拏; 拏; ) CJK COMPATIBILITY IDEOGRAPH-F95B F95C;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F95C F95D;8AFE;8AFE;8AFE;8AFE; # (諾; 諾; 諾; 諾; 諾; ) CJK COMPATIBILITY IDEOGRAPH-F95D F95E;4E39;4E39;4E39;4E39; # (丹; 丹; 丹; 丹; 丹; ) CJK COMPATIBILITY IDEOGRAPH-F95E F95F;5BE7;5BE7;5BE7;5BE7; # (寧; 寧; 寧; 寧; 寧; ) CJK COMPATIBILITY IDEOGRAPH-F95F F960;6012;6012;6012;6012; # (怒; 怒; 怒; 怒; 怒; ) CJK COMPATIBILITY IDEOGRAPH-F960 F961;7387;7387;7387;7387; # (率; 率; 率; 率; 率; ) CJK COMPATIBILITY IDEOGRAPH-F961 F962;7570;7570;7570;7570; # (異; 異; 異; 異; 異; ) CJK COMPATIBILITY IDEOGRAPH-F962 F963;5317;5317;5317;5317; # (北; 北; 北; 北; 北; ) CJK COMPATIBILITY IDEOGRAPH-F963 F964;78FB;78FB;78FB;78FB; # (磻; 磻; 磻; 磻; 磻; ) CJK COMPATIBILITY IDEOGRAPH-F964 F965;4FBF;4FBF;4FBF;4FBF; # (便; 便; 便; 便; 便; ) CJK COMPATIBILITY IDEOGRAPH-F965 F966;5FA9;5FA9;5FA9;5FA9; # (復; 復; 復; 復; 復; ) CJK COMPATIBILITY IDEOGRAPH-F966 F967;4E0D;4E0D;4E0D;4E0D; # (不; 不; 不; 不; 不; ) CJK COMPATIBILITY IDEOGRAPH-F967 F968;6CCC;6CCC;6CCC;6CCC; # (泌; 泌; 泌; 泌; 泌; ) CJK COMPATIBILITY IDEOGRAPH-F968 F969;6578;6578;6578;6578; # (數; 數; 數; 數; 數; ) CJK COMPATIBILITY IDEOGRAPH-F969 F96A;7D22;7D22;7D22;7D22; # (索; 索; 索; 索; 索; ) CJK COMPATIBILITY IDEOGRAPH-F96A F96B;53C3;53C3;53C3;53C3; # (參; 參; 參; 參; 參; ) CJK COMPATIBILITY IDEOGRAPH-F96B F96C;585E;585E;585E;585E; # (塞; 塞; 塞; 塞; 塞; ) CJK COMPATIBILITY IDEOGRAPH-F96C F96D;7701;7701;7701;7701; # (省; 省; 省; 省; 省; ) CJK COMPATIBILITY IDEOGRAPH-F96D F96E;8449;8449;8449;8449; # (葉; 葉; 葉; 葉; 葉; ) CJK COMPATIBILITY IDEOGRAPH-F96E F96F;8AAA;8AAA;8AAA;8AAA; # (說; 說; 說; 說; 說; ) CJK COMPATIBILITY IDEOGRAPH-F96F F970;6BBA;6BBA;6BBA;6BBA; # (殺; 殺; 殺; 殺; 殺; ) CJK COMPATIBILITY IDEOGRAPH-F970 F971;8FB0;8FB0;8FB0;8FB0; # (辰; 辰; 辰; 辰; 辰; ) CJK COMPATIBILITY IDEOGRAPH-F971 F972;6C88;6C88;6C88;6C88; # (沈; 沈; 沈; 沈; 沈; ) CJK COMPATIBILITY IDEOGRAPH-F972 F973;62FE;62FE;62FE;62FE; # (拾; 拾; 拾; 拾; 拾; ) CJK COMPATIBILITY IDEOGRAPH-F973 F974;82E5;82E5;82E5;82E5; # (若; 若; 若; 若; 若; ) CJK COMPATIBILITY IDEOGRAPH-F974 F975;63A0;63A0;63A0;63A0; # (掠; 掠; 掠; 掠; 掠; ) CJK COMPATIBILITY IDEOGRAPH-F975 F976;7565;7565;7565;7565; # (略; 略; 略; 略; 略; ) CJK COMPATIBILITY IDEOGRAPH-F976 F977;4EAE;4EAE;4EAE;4EAE; # (亮; 亮; 亮; 亮; 亮; ) CJK COMPATIBILITY IDEOGRAPH-F977 F978;5169;5169;5169;5169; # (兩; 兩; 兩; 兩; 兩; ) CJK COMPATIBILITY IDEOGRAPH-F978 F979;51C9;51C9;51C9;51C9; # (凉; 凉; 凉; 凉; 凉; ) CJK COMPATIBILITY IDEOGRAPH-F979 F97A;6881;6881;6881;6881; # (梁; 梁; 梁; 梁; 梁; ) CJK COMPATIBILITY IDEOGRAPH-F97A F97B;7CE7;7CE7;7CE7;7CE7; # (糧; 糧; 糧; 糧; 糧; ) CJK COMPATIBILITY IDEOGRAPH-F97B F97C;826F;826F;826F;826F; # (良; 良; 良; 良; 良; ) CJK COMPATIBILITY IDEOGRAPH-F97C F97D;8AD2;8AD2;8AD2;8AD2; # (諒; 諒; 諒; 諒; 諒; ) CJK COMPATIBILITY IDEOGRAPH-F97D F97E;91CF;91CF;91CF;91CF; # (量; 量; 量; 量; 量; ) CJK COMPATIBILITY IDEOGRAPH-F97E F97F;52F5;52F5;52F5;52F5; # (勵; 勵; 勵; 勵; 勵; ) CJK COMPATIBILITY IDEOGRAPH-F97F F980;5442;5442;5442;5442; # (呂; 呂; 呂; 呂; 呂; ) CJK COMPATIBILITY IDEOGRAPH-F980 F981;5973;5973;5973;5973; # (女; 女; 女; 女; 女; ) CJK COMPATIBILITY IDEOGRAPH-F981 F982;5EEC;5EEC;5EEC;5EEC; # (廬; 廬; 廬; 廬; 廬; ) CJK COMPATIBILITY IDEOGRAPH-F982 F983;65C5;65C5;65C5;65C5; # (旅; 旅; 旅; 旅; 旅; ) CJK COMPATIBILITY IDEOGRAPH-F983 F984;6FFE;6FFE;6FFE;6FFE; # (濾; 濾; 濾; 濾; 濾; ) CJK COMPATIBILITY IDEOGRAPH-F984 F985;792A;792A;792A;792A; # (礪; 礪; 礪; 礪; 礪; ) CJK COMPATIBILITY IDEOGRAPH-F985 F986;95AD;95AD;95AD;95AD; # (閭; 閭; 閭; 閭; 閭; ) CJK COMPATIBILITY IDEOGRAPH-F986 F987;9A6A;9A6A;9A6A;9A6A; # (驪; 驪; 驪; 驪; 驪; ) CJK COMPATIBILITY IDEOGRAPH-F987 F988;9E97;9E97;9E97;9E97; # (麗; 麗; 麗; 麗; 麗; ) CJK COMPATIBILITY IDEOGRAPH-F988 F989;9ECE;9ECE;9ECE;9ECE; # (黎; 黎; 黎; 黎; 黎; ) CJK COMPATIBILITY IDEOGRAPH-F989 F98A;529B;529B;529B;529B; # (力; 力; 力; 力; 力; ) CJK COMPATIBILITY IDEOGRAPH-F98A F98B;66C6;66C6;66C6;66C6; # (曆; 曆; 曆; 曆; 曆; ) CJK COMPATIBILITY IDEOGRAPH-F98B F98C;6B77;6B77;6B77;6B77; # (歷; 歷; 歷; 歷; 歷; ) CJK COMPATIBILITY IDEOGRAPH-F98C F98D;8F62;8F62;8F62;8F62; # (轢; 轢; 轢; 轢; 轢; ) CJK COMPATIBILITY IDEOGRAPH-F98D F98E;5E74;5E74;5E74;5E74; # (年; 年; 年; 年; 年; ) CJK COMPATIBILITY IDEOGRAPH-F98E F98F;6190;6190;6190;6190; # (憐; 憐; 憐; 憐; 憐; ) CJK COMPATIBILITY IDEOGRAPH-F98F F990;6200;6200;6200;6200; # (戀; 戀; 戀; 戀; 戀; ) CJK COMPATIBILITY IDEOGRAPH-F990 F991;649A;649A;649A;649A; # (撚; 撚; 撚; 撚; 撚; ) CJK COMPATIBILITY IDEOGRAPH-F991 F992;6F23;6F23;6F23;6F23; # (漣; 漣; 漣; 漣; 漣; ) CJK COMPATIBILITY IDEOGRAPH-F992 F993;7149;7149;7149;7149; # (煉; 煉; 煉; 煉; 煉; ) CJK COMPATIBILITY IDEOGRAPH-F993 F994;7489;7489;7489;7489; # (璉; 璉; 璉; 璉; 璉; ) CJK COMPATIBILITY IDEOGRAPH-F994 F995;79CA;79CA;79CA;79CA; # (秊; 秊; 秊; 秊; 秊; ) CJK COMPATIBILITY IDEOGRAPH-F995 F996;7DF4;7DF4;7DF4;7DF4; # (練; 練; 練; 練; 練; ) CJK COMPATIBILITY IDEOGRAPH-F996 F997;806F;806F;806F;806F; # (聯; 聯; 聯; 聯; 聯; ) CJK COMPATIBILITY IDEOGRAPH-F997 F998;8F26;8F26;8F26;8F26; # (輦; 輦; 輦; 輦; 輦; ) CJK COMPATIBILITY IDEOGRAPH-F998 F999;84EE;84EE;84EE;84EE; # (蓮; 蓮; 蓮; 蓮; 蓮; ) CJK COMPATIBILITY IDEOGRAPH-F999 F99A;9023;9023;9023;9023; # (連; 連; 連; 連; 連; ) CJK COMPATIBILITY IDEOGRAPH-F99A F99B;934A;934A;934A;934A; # (鍊; 鍊; 鍊; 鍊; 鍊; ) CJK COMPATIBILITY IDEOGRAPH-F99B F99C;5217;5217;5217;5217; # (列; 列; 列; 列; 列; ) CJK COMPATIBILITY IDEOGRAPH-F99C F99D;52A3;52A3;52A3;52A3; # (劣; 劣; 劣; 劣; 劣; ) CJK COMPATIBILITY IDEOGRAPH-F99D F99E;54BD;54BD;54BD;54BD; # (咽; 咽; 咽; 咽; 咽; ) CJK COMPATIBILITY IDEOGRAPH-F99E F99F;70C8;70C8;70C8;70C8; # (烈; 烈; 烈; 烈; 烈; ) CJK COMPATIBILITY IDEOGRAPH-F99F F9A0;88C2;88C2;88C2;88C2; # (裂; 裂; 裂; 裂; 裂; ) CJK COMPATIBILITY IDEOGRAPH-F9A0 F9A1;8AAA;8AAA;8AAA;8AAA; # (說; 說; 說; 說; 說; ) CJK COMPATIBILITY IDEOGRAPH-F9A1 F9A2;5EC9;5EC9;5EC9;5EC9; # (廉; 廉; 廉; 廉; 廉; ) CJK COMPATIBILITY IDEOGRAPH-F9A2 F9A3;5FF5;5FF5;5FF5;5FF5; # (念; 念; 念; 念; 念; ) CJK COMPATIBILITY IDEOGRAPH-F9A3 F9A4;637B;637B;637B;637B; # (捻; 捻; 捻; 捻; 捻; ) CJK COMPATIBILITY IDEOGRAPH-F9A4 F9A5;6BAE;6BAE;6BAE;6BAE; # (殮; 殮; 殮; 殮; 殮; ) CJK COMPATIBILITY IDEOGRAPH-F9A5 F9A6;7C3E;7C3E;7C3E;7C3E; # (簾; 簾; 簾; 簾; 簾; ) CJK COMPATIBILITY IDEOGRAPH-F9A6 F9A7;7375;7375;7375;7375; # (獵; 獵; 獵; 獵; 獵; ) CJK COMPATIBILITY IDEOGRAPH-F9A7 F9A8;4EE4;4EE4;4EE4;4EE4; # (令; 令; 令; 令; 令; ) CJK COMPATIBILITY IDEOGRAPH-F9A8 F9A9;56F9;56F9;56F9;56F9; # (囹; 囹; 囹; 囹; 囹; ) CJK COMPATIBILITY IDEOGRAPH-F9A9 F9AA;5BE7;5BE7;5BE7;5BE7; # (寧; 寧; 寧; 寧; 寧; ) CJK COMPATIBILITY IDEOGRAPH-F9AA F9AB;5DBA;5DBA;5DBA;5DBA; # (嶺; 嶺; 嶺; 嶺; 嶺; ) CJK COMPATIBILITY IDEOGRAPH-F9AB F9AC;601C;601C;601C;601C; # (怜; 怜; 怜; 怜; 怜; ) CJK COMPATIBILITY IDEOGRAPH-F9AC F9AD;73B2;73B2;73B2;73B2; # (玲; 玲; 玲; 玲; 玲; ) CJK COMPATIBILITY IDEOGRAPH-F9AD F9AE;7469;7469;7469;7469; # (瑩; 瑩; 瑩; 瑩; 瑩; ) CJK COMPATIBILITY IDEOGRAPH-F9AE F9AF;7F9A;7F9A;7F9A;7F9A; # (羚; 羚; 羚; 羚; 羚; ) CJK COMPATIBILITY IDEOGRAPH-F9AF F9B0;8046;8046;8046;8046; # (聆; 聆; 聆; 聆; 聆; ) CJK COMPATIBILITY IDEOGRAPH-F9B0 F9B1;9234;9234;9234;9234; # (鈴; 鈴; 鈴; 鈴; 鈴; ) CJK COMPATIBILITY IDEOGRAPH-F9B1 F9B2;96F6;96F6;96F6;96F6; # (零; 零; 零; 零; 零; ) CJK COMPATIBILITY IDEOGRAPH-F9B2 F9B3;9748;9748;9748;9748; # (靈; 靈; 靈; 靈; 靈; ) CJK COMPATIBILITY IDEOGRAPH-F9B3 F9B4;9818;9818;9818;9818; # (領; 領; 領; 領; 領; ) CJK COMPATIBILITY IDEOGRAPH-F9B4 F9B5;4F8B;4F8B;4F8B;4F8B; # (例; 例; 例; 例; 例; ) CJK COMPATIBILITY IDEOGRAPH-F9B5 F9B6;79AE;79AE;79AE;79AE; # (禮; 禮; 禮; 禮; 禮; ) CJK COMPATIBILITY IDEOGRAPH-F9B6 F9B7;91B4;91B4;91B4;91B4; # (醴; 醴; 醴; 醴; 醴; ) CJK COMPATIBILITY IDEOGRAPH-F9B7 F9B8;96B8;96B8;96B8;96B8; # (隸; 隸; 隸; 隸; 隸; ) CJK COMPATIBILITY IDEOGRAPH-F9B8 F9B9;60E1;60E1;60E1;60E1; # (惡; 惡; 惡; 惡; 惡; ) CJK COMPATIBILITY IDEOGRAPH-F9B9 F9BA;4E86;4E86;4E86;4E86; # (了; 了; 了; 了; 了; ) CJK COMPATIBILITY IDEOGRAPH-F9BA F9BB;50DA;50DA;50DA;50DA; # (僚; 僚; 僚; 僚; 僚; ) CJK COMPATIBILITY IDEOGRAPH-F9BB F9BC;5BEE;5BEE;5BEE;5BEE; # (寮; 寮; 寮; 寮; 寮; ) CJK COMPATIBILITY IDEOGRAPH-F9BC F9BD;5C3F;5C3F;5C3F;5C3F; # (尿; 尿; 尿; 尿; 尿; ) CJK COMPATIBILITY IDEOGRAPH-F9BD F9BE;6599;6599;6599;6599; # (料; 料; 料; 料; 料; ) CJK COMPATIBILITY IDEOGRAPH-F9BE F9BF;6A02;6A02;6A02;6A02; # (樂; 樂; 樂; 樂; 樂; ) CJK COMPATIBILITY IDEOGRAPH-F9BF F9C0;71CE;71CE;71CE;71CE; # (燎; 燎; 燎; 燎; 燎; ) CJK COMPATIBILITY IDEOGRAPH-F9C0 F9C1;7642;7642;7642;7642; # (療; 療; 療; 療; 療; ) CJK COMPATIBILITY IDEOGRAPH-F9C1 F9C2;84FC;84FC;84FC;84FC; # (蓼; 蓼; 蓼; 蓼; 蓼; ) CJK COMPATIBILITY IDEOGRAPH-F9C2 F9C3;907C;907C;907C;907C; # (遼; 遼; 遼; 遼; 遼; ) CJK COMPATIBILITY IDEOGRAPH-F9C3 F9C4;9F8D;9F8D;9F8D;9F8D; # (龍; 龍; 龍; 龍; 龍; ) CJK COMPATIBILITY IDEOGRAPH-F9C4 F9C5;6688;6688;6688;6688; # (暈; 暈; 暈; 暈; 暈; ) CJK COMPATIBILITY IDEOGRAPH-F9C5 F9C6;962E;962E;962E;962E; # (阮; 阮; 阮; 阮; 阮; ) CJK COMPATIBILITY IDEOGRAPH-F9C6 F9C7;5289;5289;5289;5289; # (劉; 劉; 劉; 劉; 劉; ) CJK COMPATIBILITY IDEOGRAPH-F9C7 F9C8;677B;677B;677B;677B; # (杻; 杻; 杻; 杻; 杻; ) CJK COMPATIBILITY IDEOGRAPH-F9C8 F9C9;67F3;67F3;67F3;67F3; # (柳; 柳; 柳; 柳; 柳; ) CJK COMPATIBILITY IDEOGRAPH-F9C9 F9CA;6D41;6D41;6D41;6D41; # (流; 流; 流; 流; 流; ) CJK COMPATIBILITY IDEOGRAPH-F9CA F9CB;6E9C;6E9C;6E9C;6E9C; # (溜; 溜; 溜; 溜; 溜; ) CJK COMPATIBILITY IDEOGRAPH-F9CB F9CC;7409;7409;7409;7409; # (琉; 琉; 琉; 琉; 琉; ) CJK COMPATIBILITY IDEOGRAPH-F9CC F9CD;7559;7559;7559;7559; # (留; 留; 留; 留; 留; ) CJK COMPATIBILITY IDEOGRAPH-F9CD F9CE;786B;786B;786B;786B; # (硫; 硫; 硫; 硫; 硫; ) CJK COMPATIBILITY IDEOGRAPH-F9CE F9CF;7D10;7D10;7D10;7D10; # (紐; 紐; 紐; 紐; 紐; ) CJK COMPATIBILITY IDEOGRAPH-F9CF F9D0;985E;985E;985E;985E; # (類; 類; 類; 類; 類; ) CJK COMPATIBILITY IDEOGRAPH-F9D0 F9D1;516D;516D;516D;516D; # (六; 六; 六; 六; 六; ) CJK COMPATIBILITY IDEOGRAPH-F9D1 F9D2;622E;622E;622E;622E; # (戮; 戮; 戮; 戮; 戮; ) CJK COMPATIBILITY IDEOGRAPH-F9D2 F9D3;9678;9678;9678;9678; # (陸; 陸; 陸; 陸; 陸; ) CJK COMPATIBILITY IDEOGRAPH-F9D3 F9D4;502B;502B;502B;502B; # (倫; 倫; 倫; 倫; 倫; ) CJK COMPATIBILITY IDEOGRAPH-F9D4 F9D5;5D19;5D19;5D19;5D19; # (崙; 崙; 崙; 崙; 崙; ) CJK COMPATIBILITY IDEOGRAPH-F9D5 F9D6;6DEA;6DEA;6DEA;6DEA; # (淪; 淪; 淪; 淪; 淪; ) CJK COMPATIBILITY IDEOGRAPH-F9D6 F9D7;8F2A;8F2A;8F2A;8F2A; # (輪; 輪; 輪; 輪; 輪; ) CJK COMPATIBILITY IDEOGRAPH-F9D7 F9D8;5F8B;5F8B;5F8B;5F8B; # (律; 律; 律; 律; 律; ) CJK COMPATIBILITY IDEOGRAPH-F9D8 F9D9;6144;6144;6144;6144; # (慄; 慄; 慄; 慄; 慄; ) CJK COMPATIBILITY IDEOGRAPH-F9D9 F9DA;6817;6817;6817;6817; # (栗; 栗; 栗; 栗; 栗; ) CJK COMPATIBILITY IDEOGRAPH-F9DA F9DB;7387;7387;7387;7387; # (率; 率; 率; 率; 率; ) CJK COMPATIBILITY IDEOGRAPH-F9DB F9DC;9686;9686;9686;9686; # (隆; 隆; 隆; 隆; 隆; ) CJK COMPATIBILITY IDEOGRAPH-F9DC F9DD;5229;5229;5229;5229; # (利; 利; 利; 利; 利; ) CJK COMPATIBILITY IDEOGRAPH-F9DD F9DE;540F;540F;540F;540F; # (吏; 吏; 吏; 吏; 吏; ) CJK COMPATIBILITY IDEOGRAPH-F9DE F9DF;5C65;5C65;5C65;5C65; # (履; 履; 履; 履; 履; ) CJK COMPATIBILITY IDEOGRAPH-F9DF F9E0;6613;6613;6613;6613; # (易; 易; 易; 易; 易; ) CJK COMPATIBILITY IDEOGRAPH-F9E0 F9E1;674E;674E;674E;674E; # (李; 李; 李; 李; 李; ) CJK COMPATIBILITY IDEOGRAPH-F9E1 F9E2;68A8;68A8;68A8;68A8; # (梨; 梨; 梨; 梨; 梨; ) CJK COMPATIBILITY IDEOGRAPH-F9E2 F9E3;6CE5;6CE5;6CE5;6CE5; # (泥; 泥; 泥; 泥; 泥; ) CJK COMPATIBILITY IDEOGRAPH-F9E3 F9E4;7406;7406;7406;7406; # (理; 理; 理; 理; 理; ) CJK COMPATIBILITY IDEOGRAPH-F9E4 F9E5;75E2;75E2;75E2;75E2; # (痢; 痢; 痢; 痢; 痢; ) CJK COMPATIBILITY IDEOGRAPH-F9E5 F9E6;7F79;7F79;7F79;7F79; # (罹; 罹; 罹; 罹; 罹; ) CJK COMPATIBILITY IDEOGRAPH-F9E6 F9E7;88CF;88CF;88CF;88CF; # (裏; 裏; 裏; 裏; 裏; ) CJK COMPATIBILITY IDEOGRAPH-F9E7 F9E8;88E1;88E1;88E1;88E1; # (裡; 裡; 裡; 裡; 裡; ) CJK COMPATIBILITY IDEOGRAPH-F9E8 F9E9;91CC;91CC;91CC;91CC; # (里; 里; 里; 里; 里; ) CJK COMPATIBILITY IDEOGRAPH-F9E9 F9EA;96E2;96E2;96E2;96E2; # (離; 離; 離; 離; 離; ) CJK COMPATIBILITY IDEOGRAPH-F9EA F9EB;533F;533F;533F;533F; # (匿; 匿; 匿; 匿; 匿; ) CJK COMPATIBILITY IDEOGRAPH-F9EB F9EC;6EBA;6EBA;6EBA;6EBA; # (溺; 溺; 溺; 溺; 溺; ) CJK COMPATIBILITY IDEOGRAPH-F9EC F9ED;541D;541D;541D;541D; # (吝; 吝; 吝; 吝; 吝; ) CJK COMPATIBILITY IDEOGRAPH-F9ED F9EE;71D0;71D0;71D0;71D0; # (燐; 燐; 燐; 燐; 燐; ) CJK COMPATIBILITY IDEOGRAPH-F9EE F9EF;7498;7498;7498;7498; # (璘; 璘; 璘; 璘; 璘; ) CJK COMPATIBILITY IDEOGRAPH-F9EF F9F0;85FA;85FA;85FA;85FA; # (藺; 藺; 藺; 藺; 藺; ) CJK COMPATIBILITY IDEOGRAPH-F9F0 F9F1;96A3;96A3;96A3;96A3; # (隣; 隣; 隣; 隣; 隣; ) CJK COMPATIBILITY IDEOGRAPH-F9F1 F9F2;9C57;9C57;9C57;9C57; # (鱗; 鱗; 鱗; 鱗; 鱗; ) CJK COMPATIBILITY IDEOGRAPH-F9F2 F9F3;9E9F;9E9F;9E9F;9E9F; # (麟; 麟; 麟; 麟; 麟; ) CJK COMPATIBILITY IDEOGRAPH-F9F3 F9F4;6797;6797;6797;6797; # (林; 林; 林; 林; 林; ) CJK COMPATIBILITY IDEOGRAPH-F9F4 F9F5;6DCB;6DCB;6DCB;6DCB; # (淋; 淋; 淋; 淋; 淋; ) CJK COMPATIBILITY IDEOGRAPH-F9F5 F9F6;81E8;81E8;81E8;81E8; # (臨; 臨; 臨; 臨; 臨; ) CJK COMPATIBILITY IDEOGRAPH-F9F6 F9F7;7ACB;7ACB;7ACB;7ACB; # (立; 立; 立; 立; 立; ) CJK COMPATIBILITY IDEOGRAPH-F9F7 F9F8;7B20;7B20;7B20;7B20; # (笠; 笠; 笠; 笠; 笠; ) CJK COMPATIBILITY IDEOGRAPH-F9F8 F9F9;7C92;7C92;7C92;7C92; # (粒; 粒; 粒; 粒; 粒; ) CJK COMPATIBILITY IDEOGRAPH-F9F9 F9FA;72C0;72C0;72C0;72C0; # (狀; 狀; 狀; 狀; 狀; ) CJK COMPATIBILITY IDEOGRAPH-F9FA F9FB;7099;7099;7099;7099; # (炙; 炙; 炙; 炙; 炙; ) CJK COMPATIBILITY IDEOGRAPH-F9FB F9FC;8B58;8B58;8B58;8B58; # (識; 識; 識; 識; 識; ) CJK COMPATIBILITY IDEOGRAPH-F9FC F9FD;4EC0;4EC0;4EC0;4EC0; # (什; 什; 什; 什; 什; ) CJK COMPATIBILITY IDEOGRAPH-F9FD F9FE;8336;8336;8336;8336; # (茶; 茶; 茶; 茶; 茶; ) CJK COMPATIBILITY IDEOGRAPH-F9FE F9FF;523A;523A;523A;523A; # (刺; 刺; 刺; 刺; 刺; ) CJK COMPATIBILITY IDEOGRAPH-F9FF FA00;5207;5207;5207;5207; # (切; 切; 切; 切; 切; ) CJK COMPATIBILITY IDEOGRAPH-FA00 FA01;5EA6;5EA6;5EA6;5EA6; # (度; 度; 度; 度; 度; ) CJK COMPATIBILITY IDEOGRAPH-FA01 FA02;62D3;62D3;62D3;62D3; # (拓; 拓; 拓; 拓; 拓; ) CJK COMPATIBILITY IDEOGRAPH-FA02 FA03;7CD6;7CD6;7CD6;7CD6; # (糖; 糖; 糖; 糖; 糖; ) CJK COMPATIBILITY IDEOGRAPH-FA03 FA04;5B85;5B85;5B85;5B85; # (宅; 宅; 宅; 宅; 宅; ) CJK COMPATIBILITY IDEOGRAPH-FA04 FA05;6D1E;6D1E;6D1E;6D1E; # (洞; 洞; 洞; 洞; 洞; ) CJK COMPATIBILITY IDEOGRAPH-FA05 FA06;66B4;66B4;66B4;66B4; # (暴; 暴; 暴; 暴; 暴; ) CJK COMPATIBILITY IDEOGRAPH-FA06 FA07;8F3B;8F3B;8F3B;8F3B; # (輻; 輻; 輻; 輻; 輻; ) CJK COMPATIBILITY IDEOGRAPH-FA07 FA08;884C;884C;884C;884C; # (行; 行; 行; 行; 行; ) CJK COMPATIBILITY IDEOGRAPH-FA08 FA09;964D;964D;964D;964D; # (降; 降; 降; 降; 降; ) CJK COMPATIBILITY IDEOGRAPH-FA09 FA0A;898B;898B;898B;898B; # (見; 見; 見; 見; 見; ) CJK COMPATIBILITY IDEOGRAPH-FA0A FA0B;5ED3;5ED3;5ED3;5ED3; # (廓; 廓; 廓; 廓; 廓; ) CJK COMPATIBILITY IDEOGRAPH-FA0B FA0C;5140;5140;5140;5140; # (兀; 兀; 兀; 兀; 兀; ) CJK COMPATIBILITY IDEOGRAPH-FA0C FA0D;55C0;55C0;55C0;55C0; # (嗀; 嗀; 嗀; 嗀; 嗀; ) CJK COMPATIBILITY IDEOGRAPH-FA0D FA10;585A;585A;585A;585A; # (塚; 塚; 塚; 塚; 塚; ) CJK COMPATIBILITY IDEOGRAPH-FA10 FA12;6674;6674;6674;6674; # (晴; 晴; 晴; 晴; 晴; ) CJK COMPATIBILITY IDEOGRAPH-FA12 FA15;51DE;51DE;51DE;51DE; # (凞; 凞; 凞; 凞; 凞; ) CJK COMPATIBILITY IDEOGRAPH-FA15 FA16;732A;732A;732A;732A; # (猪; 猪; 猪; 猪; 猪; ) CJK COMPATIBILITY IDEOGRAPH-FA16 FA17;76CA;76CA;76CA;76CA; # (益; 益; 益; 益; 益; ) CJK COMPATIBILITY IDEOGRAPH-FA17 FA18;793C;793C;793C;793C; # (礼; 礼; 礼; 礼; 礼; ) CJK COMPATIBILITY IDEOGRAPH-FA18 FA19;795E;795E;795E;795E; # (神; 神; 神; 神; 神; ) CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A;7965;7965;7965;7965; # (祥; 祥; 祥; 祥; 祥; ) CJK COMPATIBILITY IDEOGRAPH-FA1A FA1B;798F;798F;798F;798F; # (福; 福; 福; 福; 福; ) CJK COMPATIBILITY IDEOGRAPH-FA1B FA1C;9756;9756;9756;9756; # (靖; 靖; 靖; 靖; 靖; ) CJK COMPATIBILITY IDEOGRAPH-FA1C FA1D;7CBE;7CBE;7CBE;7CBE; # (精; 精; 精; 精; 精; ) CJK COMPATIBILITY IDEOGRAPH-FA1D FA1E;7FBD;7FBD;7FBD;7FBD; # (羽; 羽; 羽; 羽; 羽; ) CJK COMPATIBILITY IDEOGRAPH-FA1E FA20;8612;8612;8612;8612; # (蘒; 蘒; 蘒; 蘒; 蘒; ) CJK COMPATIBILITY IDEOGRAPH-FA20 FA22;8AF8;8AF8;8AF8;8AF8; # (諸; 諸; 諸; 諸; 諸; ) CJK COMPATIBILITY IDEOGRAPH-FA22 FA25;9038;9038;9038;9038; # (逸; 逸; 逸; 逸; 逸; ) CJK COMPATIBILITY IDEOGRAPH-FA25 FA26;90FD;90FD;90FD;90FD; # (都; 都; 都; 都; 都; ) CJK COMPATIBILITY IDEOGRAPH-FA26 FA2A;98EF;98EF;98EF;98EF; # (飯; 飯; 飯; 飯; 飯; ) CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B;98FC;98FC;98FC;98FC; # (飼; 飼; 飼; 飼; 飼; ) CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C;9928;9928;9928;9928; # (館; 館; 館; 館; 館; ) CJK COMPATIBILITY IDEOGRAPH-FA2C FA2D;9DB4;9DB4;9DB4;9DB4; # (鶴; 鶴; 鶴; 鶴; 鶴; ) CJK COMPATIBILITY IDEOGRAPH-FA2D FA2E;90DE;90DE;90DE;90DE; # (郞; 郞; 郞; 郞; 郞; ) CJK COMPATIBILITY IDEOGRAPH-FA2E FA2F;96B7;96B7;96B7;96B7; # (隷; 隷; 隷; 隷; 隷; ) CJK COMPATIBILITY IDEOGRAPH-FA2F FA30;4FAE;4FAE;4FAE;4FAE; # (侮; 侮; 侮; 侮; 侮; ) CJK COMPATIBILITY IDEOGRAPH-FA30 FA31;50E7;50E7;50E7;50E7; # (僧; 僧; 僧; 僧; 僧; ) CJK COMPATIBILITY IDEOGRAPH-FA31 FA32;514D;514D;514D;514D; # (免; 免; 免; 免; 免; ) CJK COMPATIBILITY IDEOGRAPH-FA32 FA33;52C9;52C9;52C9;52C9; # (勉; 勉; 勉; 勉; 勉; ) CJK COMPATIBILITY IDEOGRAPH-FA33 FA34;52E4;52E4;52E4;52E4; # (勤; 勤; 勤; 勤; 勤; ) CJK COMPATIBILITY IDEOGRAPH-FA34 FA35;5351;5351;5351;5351; # (卑; 卑; 卑; 卑; 卑; ) CJK COMPATIBILITY IDEOGRAPH-FA35 FA36;559D;559D;559D;559D; # (喝; 喝; 喝; 喝; 喝; ) CJK COMPATIBILITY IDEOGRAPH-FA36 FA37;5606;5606;5606;5606; # (嘆; 嘆; 嘆; 嘆; 嘆; ) CJK COMPATIBILITY IDEOGRAPH-FA37 FA38;5668;5668;5668;5668; # (器; 器; 器; 器; 器; ) CJK COMPATIBILITY IDEOGRAPH-FA38 FA39;5840;5840;5840;5840; # (塀; 塀; 塀; 塀; 塀; ) CJK COMPATIBILITY IDEOGRAPH-FA39 FA3A;58A8;58A8;58A8;58A8; # (墨; 墨; 墨; 墨; 墨; ) CJK COMPATIBILITY IDEOGRAPH-FA3A FA3B;5C64;5C64;5C64;5C64; # (層; 層; 層; 層; 層; ) CJK COMPATIBILITY IDEOGRAPH-FA3B FA3C;5C6E;5C6E;5C6E;5C6E; # (屮; 屮; 屮; 屮; 屮; ) CJK COMPATIBILITY IDEOGRAPH-FA3C FA3D;6094;6094;6094;6094; # (悔; 悔; 悔; 悔; 悔; ) CJK COMPATIBILITY IDEOGRAPH-FA3D FA3E;6168;6168;6168;6168; # (慨; 慨; 慨; 慨; 慨; ) CJK COMPATIBILITY IDEOGRAPH-FA3E FA3F;618E;618E;618E;618E; # (憎; 憎; 憎; 憎; 憎; ) CJK COMPATIBILITY IDEOGRAPH-FA3F FA40;61F2;61F2;61F2;61F2; # (懲; 懲; 懲; 懲; 懲; ) CJK COMPATIBILITY IDEOGRAPH-FA40 FA41;654F;654F;654F;654F; # (敏; 敏; 敏; 敏; 敏; ) CJK COMPATIBILITY IDEOGRAPH-FA41 FA42;65E2;65E2;65E2;65E2; # (既; 既; 既; 既; 既; ) CJK COMPATIBILITY IDEOGRAPH-FA42 FA43;6691;6691;6691;6691; # (暑; 暑; 暑; 暑; 暑; ) CJK COMPATIBILITY IDEOGRAPH-FA43 FA44;6885;6885;6885;6885; # (梅; 梅; 梅; 梅; 梅; ) CJK COMPATIBILITY IDEOGRAPH-FA44 FA45;6D77;6D77;6D77;6D77; # (海; 海; 海; 海; 海; ) CJK COMPATIBILITY IDEOGRAPH-FA45 FA46;6E1A;6E1A;6E1A;6E1A; # (渚; 渚; 渚; 渚; 渚; ) CJK COMPATIBILITY IDEOGRAPH-FA46 FA47;6F22;6F22;6F22;6F22; # (漢; 漢; 漢; 漢; 漢; ) CJK COMPATIBILITY IDEOGRAPH-FA47 FA48;716E;716E;716E;716E; # (煮; 煮; 煮; 煮; 煮; ) CJK COMPATIBILITY IDEOGRAPH-FA48 FA49;722B;722B;722B;722B; # (爫; 爫; 爫; 爫; 爫; ) CJK COMPATIBILITY IDEOGRAPH-FA49 FA4A;7422;7422;7422;7422; # (琢; 琢; 琢; 琢; 琢; ) CJK COMPATIBILITY IDEOGRAPH-FA4A FA4B;7891;7891;7891;7891; # (碑; 碑; 碑; 碑; 碑; ) CJK COMPATIBILITY IDEOGRAPH-FA4B FA4C;793E;793E;793E;793E; # (社; 社; 社; 社; 社; ) CJK COMPATIBILITY IDEOGRAPH-FA4C FA4D;7949;7949;7949;7949; # (祉; 祉; 祉; 祉; 祉; ) CJK COMPATIBILITY IDEOGRAPH-FA4D FA4E;7948;7948;7948;7948; # (祈; 祈; 祈; 祈; 祈; ) CJK COMPATIBILITY IDEOGRAPH-FA4E FA4F;7950;7950;7950;7950; # (祐; 祐; 祐; 祐; 祐; ) CJK COMPATIBILITY IDEOGRAPH-FA4F FA50;7956;7956;7956;7956; # (祖; 祖; 祖; 祖; 祖; ) CJK COMPATIBILITY IDEOGRAPH-FA50 FA51;795D;795D;795D;795D; # (祝; 祝; 祝; 祝; 祝; ) CJK COMPATIBILITY IDEOGRAPH-FA51 FA52;798D;798D;798D;798D; # (禍; 禍; 禍; 禍; 禍; ) CJK COMPATIBILITY IDEOGRAPH-FA52 FA53;798E;798E;798E;798E; # (禎; 禎; 禎; 禎; 禎; ) CJK COMPATIBILITY IDEOGRAPH-FA53 FA54;7A40;7A40;7A40;7A40; # (穀; 穀; 穀; 穀; 穀; ) CJK COMPATIBILITY IDEOGRAPH-FA54 FA55;7A81;7A81;7A81;7A81; # (突; 突; 突; 突; 突; ) CJK COMPATIBILITY IDEOGRAPH-FA55 FA56;7BC0;7BC0;7BC0;7BC0; # (節; 節; 節; 節; 節; ) CJK COMPATIBILITY IDEOGRAPH-FA56 FA57;7DF4;7DF4;7DF4;7DF4; # (練; 練; 練; 練; 練; ) CJK COMPATIBILITY IDEOGRAPH-FA57 FA58;7E09;7E09;7E09;7E09; # (縉; 縉; 縉; 縉; 縉; ) CJK COMPATIBILITY IDEOGRAPH-FA58 FA59;7E41;7E41;7E41;7E41; # (繁; 繁; 繁; 繁; 繁; ) CJK COMPATIBILITY IDEOGRAPH-FA59 FA5A;7F72;7F72;7F72;7F72; # (署; 署; 署; 署; 署; ) CJK COMPATIBILITY IDEOGRAPH-FA5A FA5B;8005;8005;8005;8005; # (者; 者; 者; 者; 者; ) CJK COMPATIBILITY IDEOGRAPH-FA5B FA5C;81ED;81ED;81ED;81ED; # (臭; 臭; 臭; 臭; 臭; ) CJK COMPATIBILITY IDEOGRAPH-FA5C FA5D;8279;8279;8279;8279; # (艹; 艹; 艹; 艹; 艹; ) CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E;8279;8279;8279;8279; # (艹; 艹; 艹; 艹; 艹; ) CJK COMPATIBILITY IDEOGRAPH-FA5E FA5F;8457;8457;8457;8457; # (著; 著; 著; 著; 著; ) CJK COMPATIBILITY IDEOGRAPH-FA5F FA60;8910;8910;8910;8910; # (褐; 褐; 褐; 褐; 褐; ) CJK COMPATIBILITY IDEOGRAPH-FA60 FA61;8996;8996;8996;8996; # (視; 視; 視; 視; 視; ) CJK COMPATIBILITY IDEOGRAPH-FA61 FA62;8B01;8B01;8B01;8B01; # (謁; 謁; 謁; 謁; 謁; ) CJK COMPATIBILITY IDEOGRAPH-FA62 FA63;8B39;8B39;8B39;8B39; # (謹; 謹; 謹; 謹; 謹; ) CJK COMPATIBILITY IDEOGRAPH-FA63 FA64;8CD3;8CD3;8CD3;8CD3; # (賓; 賓; 賓; 賓; 賓; ) CJK COMPATIBILITY IDEOGRAPH-FA64 FA65;8D08;8D08;8D08;8D08; # (贈; 贈; 贈; 贈; 贈; ) CJK COMPATIBILITY IDEOGRAPH-FA65 FA66;8FB6;8FB6;8FB6;8FB6; # (辶; 辶; 辶; 辶; 辶; ) CJK COMPATIBILITY IDEOGRAPH-FA66 FA67;9038;9038;9038;9038; # (逸; 逸; 逸; 逸; 逸; ) CJK COMPATIBILITY IDEOGRAPH-FA67 FA68;96E3;96E3;96E3;96E3; # (難; 難; 難; 難; 難; ) CJK COMPATIBILITY IDEOGRAPH-FA68 FA69;97FF;97FF;97FF;97FF; # (響; 響; 響; 響; 響; ) CJK COMPATIBILITY IDEOGRAPH-FA69 FA6A;983B;983B;983B;983B; # (頻; 頻; 頻; 頻; 頻; ) CJK COMPATIBILITY IDEOGRAPH-FA6A FA6B;6075;6075;6075;6075; # (恵; 恵; 恵; 恵; 恵; ) CJK COMPATIBILITY IDEOGRAPH-FA6B FA6C;242EE;242EE;242EE;242EE; # (𤋮; 𤋮; 𤋮; 𤋮; 𤋮; ) CJK COMPATIBILITY IDEOGRAPH-FA6C FA6D;8218;8218;8218;8218; # (舘; 舘; 舘; 舘; 舘; ) CJK COMPATIBILITY IDEOGRAPH-FA6D FA70;4E26;4E26;4E26;4E26; # (並; 並; 並; 並; 並; ) CJK COMPATIBILITY IDEOGRAPH-FA70 FA71;51B5;51B5;51B5;51B5; # (况; 况; 况; 况; 况; ) CJK COMPATIBILITY IDEOGRAPH-FA71 FA72;5168;5168;5168;5168; # (全; 全; 全; 全; 全; ) CJK COMPATIBILITY IDEOGRAPH-FA72 FA73;4F80;4F80;4F80;4F80; # (侀; 侀; 侀; 侀; 侀; ) CJK COMPATIBILITY IDEOGRAPH-FA73 FA74;5145;5145;5145;5145; # (充; 充; 充; 充; 充; ) CJK COMPATIBILITY IDEOGRAPH-FA74 FA75;5180;5180;5180;5180; # (冀; 冀; 冀; 冀; 冀; ) CJK COMPATIBILITY IDEOGRAPH-FA75 FA76;52C7;52C7;52C7;52C7; # (勇; 勇; 勇; 勇; 勇; ) CJK COMPATIBILITY IDEOGRAPH-FA76 FA77;52FA;52FA;52FA;52FA; # (勺; 勺; 勺; 勺; 勺; ) CJK COMPATIBILITY IDEOGRAPH-FA77 FA78;559D;559D;559D;559D; # (喝; 喝; 喝; 喝; 喝; ) CJK COMPATIBILITY IDEOGRAPH-FA78 FA79;5555;5555;5555;5555; # (啕; 啕; 啕; 啕; 啕; ) CJK COMPATIBILITY IDEOGRAPH-FA79 FA7A;5599;5599;5599;5599; # (喙; 喙; 喙; 喙; 喙; ) CJK COMPATIBILITY IDEOGRAPH-FA7A FA7B;55E2;55E2;55E2;55E2; # (嗢; 嗢; 嗢; 嗢; 嗢; ) CJK COMPATIBILITY IDEOGRAPH-FA7B FA7C;585A;585A;585A;585A; # (塚; 塚; 塚; 塚; 塚; ) CJK COMPATIBILITY IDEOGRAPH-FA7C FA7D;58B3;58B3;58B3;58B3; # (墳; 墳; 墳; 墳; 墳; ) CJK COMPATIBILITY IDEOGRAPH-FA7D FA7E;5944;5944;5944;5944; # (奄; 奄; 奄; 奄; 奄; ) CJK COMPATIBILITY IDEOGRAPH-FA7E FA7F;5954;5954;5954;5954; # (奔; 奔; 奔; 奔; 奔; ) CJK COMPATIBILITY IDEOGRAPH-FA7F FA80;5A62;5A62;5A62;5A62; # (婢; 婢; 婢; 婢; 婢; ) CJK COMPATIBILITY IDEOGRAPH-FA80 FA81;5B28;5B28;5B28;5B28; # (嬨; 嬨; 嬨; 嬨; 嬨; ) CJK COMPATIBILITY IDEOGRAPH-FA81 FA82;5ED2;5ED2;5ED2;5ED2; # (廒; 廒; 廒; 廒; 廒; ) CJK COMPATIBILITY IDEOGRAPH-FA82 FA83;5ED9;5ED9;5ED9;5ED9; # (廙; 廙; 廙; 廙; 廙; ) CJK COMPATIBILITY IDEOGRAPH-FA83 FA84;5F69;5F69;5F69;5F69; # (彩; 彩; 彩; 彩; 彩; ) CJK COMPATIBILITY IDEOGRAPH-FA84 FA85;5FAD;5FAD;5FAD;5FAD; # (徭; 徭; 徭; 徭; 徭; ) CJK COMPATIBILITY IDEOGRAPH-FA85 FA86;60D8;60D8;60D8;60D8; # (惘; 惘; 惘; 惘; 惘; ) CJK COMPATIBILITY IDEOGRAPH-FA86 FA87;614E;614E;614E;614E; # (慎; 慎; 慎; 慎; 慎; ) CJK COMPATIBILITY IDEOGRAPH-FA87 FA88;6108;6108;6108;6108; # (愈; 愈; 愈; 愈; 愈; ) CJK COMPATIBILITY IDEOGRAPH-FA88 FA89;618E;618E;618E;618E; # (憎; 憎; 憎; 憎; 憎; ) CJK COMPATIBILITY IDEOGRAPH-FA89 FA8A;6160;6160;6160;6160; # (慠; 慠; 慠; 慠; 慠; ) CJK COMPATIBILITY IDEOGRAPH-FA8A FA8B;61F2;61F2;61F2;61F2; # (懲; 懲; 懲; 懲; 懲; ) CJK COMPATIBILITY IDEOGRAPH-FA8B FA8C;6234;6234;6234;6234; # (戴; 戴; 戴; 戴; 戴; ) CJK COMPATIBILITY IDEOGRAPH-FA8C FA8D;63C4;63C4;63C4;63C4; # (揄; 揄; 揄; 揄; 揄; ) CJK COMPATIBILITY IDEOGRAPH-FA8D FA8E;641C;641C;641C;641C; # (搜; 搜; 搜; 搜; 搜; ) CJK COMPATIBILITY IDEOGRAPH-FA8E FA8F;6452;6452;6452;6452; # (摒; 摒; 摒; 摒; 摒; ) CJK COMPATIBILITY IDEOGRAPH-FA8F FA90;6556;6556;6556;6556; # (敖; 敖; 敖; 敖; 敖; ) CJK COMPATIBILITY IDEOGRAPH-FA90 FA91;6674;6674;6674;6674; # (晴; 晴; 晴; 晴; 晴; ) CJK COMPATIBILITY IDEOGRAPH-FA91 FA92;6717;6717;6717;6717; # (朗; 朗; 朗; 朗; 朗; ) CJK COMPATIBILITY IDEOGRAPH-FA92 FA93;671B;671B;671B;671B; # (望; 望; 望; 望; 望; ) CJK COMPATIBILITY IDEOGRAPH-FA93 FA94;6756;6756;6756;6756; # (杖; 杖; 杖; 杖; 杖; ) CJK COMPATIBILITY IDEOGRAPH-FA94 FA95;6B79;6B79;6B79;6B79; # (歹; 歹; 歹; 歹; 歹; ) CJK COMPATIBILITY IDEOGRAPH-FA95 FA96;6BBA;6BBA;6BBA;6BBA; # (殺; 殺; 殺; 殺; 殺; ) CJK COMPATIBILITY IDEOGRAPH-FA96 FA97;6D41;6D41;6D41;6D41; # (流; 流; 流; 流; 流; ) CJK COMPATIBILITY IDEOGRAPH-FA97 FA98;6EDB;6EDB;6EDB;6EDB; # (滛; 滛; 滛; 滛; 滛; ) CJK COMPATIBILITY IDEOGRAPH-FA98 FA99;6ECB;6ECB;6ECB;6ECB; # (滋; 滋; 滋; 滋; 滋; ) CJK COMPATIBILITY IDEOGRAPH-FA99 FA9A;6F22;6F22;6F22;6F22; # (漢; 漢; 漢; 漢; 漢; ) CJK COMPATIBILITY IDEOGRAPH-FA9A FA9B;701E;701E;701E;701E; # (瀞; 瀞; 瀞; 瀞; 瀞; ) CJK COMPATIBILITY IDEOGRAPH-FA9B FA9C;716E;716E;716E;716E; # (煮; 煮; 煮; 煮; 煮; ) CJK COMPATIBILITY IDEOGRAPH-FA9C FA9D;77A7;77A7;77A7;77A7; # (瞧; 瞧; 瞧; 瞧; 瞧; ) CJK COMPATIBILITY IDEOGRAPH-FA9D FA9E;7235;7235;7235;7235; # (爵; 爵; 爵; 爵; 爵; ) CJK COMPATIBILITY IDEOGRAPH-FA9E FA9F;72AF;72AF;72AF;72AF; # (犯; 犯; 犯; 犯; 犯; ) CJK COMPATIBILITY IDEOGRAPH-FA9F FAA0;732A;732A;732A;732A; # (猪; 猪; 猪; 猪; 猪; ) CJK COMPATIBILITY IDEOGRAPH-FAA0 FAA1;7471;7471;7471;7471; # (瑱; 瑱; 瑱; 瑱; 瑱; ) CJK COMPATIBILITY IDEOGRAPH-FAA1 FAA2;7506;7506;7506;7506; # (甆; 甆; 甆; 甆; 甆; ) CJK COMPATIBILITY IDEOGRAPH-FAA2 FAA3;753B;753B;753B;753B; # (画; 画; 画; 画; 画; ) CJK COMPATIBILITY IDEOGRAPH-FAA3 FAA4;761D;761D;761D;761D; # (瘝; 瘝; 瘝; 瘝; 瘝; ) CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5;761F;761F;761F;761F; # (瘟; 瘟; 瘟; 瘟; 瘟; ) CJK COMPATIBILITY IDEOGRAPH-FAA5 FAA6;76CA;76CA;76CA;76CA; # (益; 益; 益; 益; 益; ) CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7;76DB;76DB;76DB;76DB; # (盛; 盛; 盛; 盛; 盛; ) CJK COMPATIBILITY IDEOGRAPH-FAA7 FAA8;76F4;76F4;76F4;76F4; # (直; 直; 直; 直; 直; ) CJK COMPATIBILITY IDEOGRAPH-FAA8 FAA9;774A;774A;774A;774A; # (睊; 睊; 睊; 睊; 睊; ) CJK COMPATIBILITY IDEOGRAPH-FAA9 FAAA;7740;7740;7740;7740; # (着; 着; 着; 着; 着; ) CJK COMPATIBILITY IDEOGRAPH-FAAA FAAB;78CC;78CC;78CC;78CC; # (磌; 磌; 磌; 磌; 磌; ) CJK COMPATIBILITY IDEOGRAPH-FAAB FAAC;7AB1;7AB1;7AB1;7AB1; # (窱; 窱; 窱; 窱; 窱; ) CJK COMPATIBILITY IDEOGRAPH-FAAC FAAD;7BC0;7BC0;7BC0;7BC0; # (節; 節; 節; 節; 節; ) CJK COMPATIBILITY IDEOGRAPH-FAAD FAAE;7C7B;7C7B;7C7B;7C7B; # (类; 类; 类; 类; 类; ) CJK COMPATIBILITY IDEOGRAPH-FAAE FAAF;7D5B;7D5B;7D5B;7D5B; # (絛; 絛; 絛; 絛; 絛; ) CJK COMPATIBILITY IDEOGRAPH-FAAF FAB0;7DF4;7DF4;7DF4;7DF4; # (練; 練; 練; 練; 練; ) CJK COMPATIBILITY IDEOGRAPH-FAB0 FAB1;7F3E;7F3E;7F3E;7F3E; # (缾; 缾; 缾; 缾; 缾; ) CJK COMPATIBILITY IDEOGRAPH-FAB1 FAB2;8005;8005;8005;8005; # (者; 者; 者; 者; 者; ) CJK COMPATIBILITY IDEOGRAPH-FAB2 FAB3;8352;8352;8352;8352; # (荒; 荒; 荒; 荒; 荒; ) CJK COMPATIBILITY IDEOGRAPH-FAB3 FAB4;83EF;83EF;83EF;83EF; # (華; 華; 華; 華; 華; ) CJK COMPATIBILITY IDEOGRAPH-FAB4 FAB5;8779;8779;8779;8779; # (蝹; 蝹; 蝹; 蝹; 蝹; ) CJK COMPATIBILITY IDEOGRAPH-FAB5 FAB6;8941;8941;8941;8941; # (襁; 襁; 襁; 襁; 襁; ) CJK COMPATIBILITY IDEOGRAPH-FAB6 FAB7;8986;8986;8986;8986; # (覆; 覆; 覆; 覆; 覆; ) CJK COMPATIBILITY IDEOGRAPH-FAB7 FAB8;8996;8996;8996;8996; # (視; 視; 視; 視; 視; ) CJK COMPATIBILITY IDEOGRAPH-FAB8 FAB9;8ABF;8ABF;8ABF;8ABF; # (調; 調; 調; 調; 調; ) CJK COMPATIBILITY IDEOGRAPH-FAB9 FABA;8AF8;8AF8;8AF8;8AF8; # (諸; 諸; 諸; 諸; 諸; ) CJK COMPATIBILITY IDEOGRAPH-FABA FABB;8ACB;8ACB;8ACB;8ACB; # (請; 請; 請; 請; 請; ) CJK COMPATIBILITY IDEOGRAPH-FABB FABC;8B01;8B01;8B01;8B01; # (謁; 謁; 謁; 謁; 謁; ) CJK COMPATIBILITY IDEOGRAPH-FABC FABD;8AFE;8AFE;8AFE;8AFE; # (諾; 諾; 諾; 諾; 諾; ) CJK COMPATIBILITY IDEOGRAPH-FABD FABE;8AED;8AED;8AED;8AED; # (諭; 諭; 諭; 諭; 諭; ) CJK COMPATIBILITY IDEOGRAPH-FABE FABF;8B39;8B39;8B39;8B39; # (謹; 謹; 謹; 謹; 謹; ) CJK COMPATIBILITY IDEOGRAPH-FABF FAC0;8B8A;8B8A;8B8A;8B8A; # (變; 變; 變; 變; 變; ) CJK COMPATIBILITY IDEOGRAPH-FAC0 FAC1;8D08;8D08;8D08;8D08; # (贈; 贈; 贈; 贈; 贈; ) CJK COMPATIBILITY IDEOGRAPH-FAC1 FAC2;8F38;8F38;8F38;8F38; # (輸; 輸; 輸; 輸; 輸; ) CJK COMPATIBILITY IDEOGRAPH-FAC2 FAC3;9072;9072;9072;9072; # (遲; 遲; 遲; 遲; 遲; ) CJK COMPATIBILITY IDEOGRAPH-FAC3 FAC4;9199;9199;9199;9199; # (醙; 醙; 醙; 醙; 醙; ) CJK COMPATIBILITY IDEOGRAPH-FAC4 FAC5;9276;9276;9276;9276; # (鉶; 鉶; 鉶; 鉶; 鉶; ) CJK COMPATIBILITY IDEOGRAPH-FAC5 FAC6;967C;967C;967C;967C; # (陼; 陼; 陼; 陼; 陼; ) CJK COMPATIBILITY IDEOGRAPH-FAC6 FAC7;96E3;96E3;96E3;96E3; # (難; 難; 難; 難; 難; ) CJK COMPATIBILITY IDEOGRAPH-FAC7 FAC8;9756;9756;9756;9756; # (靖; 靖; 靖; 靖; 靖; ) CJK COMPATIBILITY IDEOGRAPH-FAC8 FAC9;97DB;97DB;97DB;97DB; # (韛; 韛; 韛; 韛; 韛; ) CJK COMPATIBILITY IDEOGRAPH-FAC9 FACA;97FF;97FF;97FF;97FF; # (響; 響; 響; 響; 響; ) CJK COMPATIBILITY IDEOGRAPH-FACA FACB;980B;980B;980B;980B; # (頋; 頋; 頋; 頋; 頋; ) CJK COMPATIBILITY IDEOGRAPH-FACB FACC;983B;983B;983B;983B; # (頻; 頻; 頻; 頻; 頻; ) CJK COMPATIBILITY IDEOGRAPH-FACC FACD;9B12;9B12;9B12;9B12; # (鬒; 鬒; 鬒; 鬒; 鬒; ) CJK COMPATIBILITY IDEOGRAPH-FACD FACE;9F9C;9F9C;9F9C;9F9C; # (龜; 龜; 龜; 龜; 龜; ) CJK COMPATIBILITY IDEOGRAPH-FACE FACF;2284A;2284A;2284A;2284A; # (𢡊; 𢡊; 𢡊; 𢡊; 𢡊; ) CJK COMPATIBILITY IDEOGRAPH-FACF FAD0;22844;22844;22844;22844; # (𢡄; 𢡄; 𢡄; 𢡄; 𢡄; ) CJK COMPATIBILITY IDEOGRAPH-FAD0 FAD1;233D5;233D5;233D5;233D5; # (𣏕; 𣏕; 𣏕; 𣏕; 𣏕; ) CJK COMPATIBILITY IDEOGRAPH-FAD1 FAD2;3B9D;3B9D;3B9D;3B9D; # (㮝; 㮝; 㮝; 㮝; 㮝; ) CJK COMPATIBILITY IDEOGRAPH-FAD2 FAD3;4018;4018;4018;4018; # (䀘; 䀘; 䀘; 䀘; 䀘; ) CJK COMPATIBILITY IDEOGRAPH-FAD3 FAD4;4039;4039;4039;4039; # (䀹; 䀹; 䀹; 䀹; 䀹; ) CJK COMPATIBILITY IDEOGRAPH-FAD4 FAD5;25249;25249;25249;25249; # (𥉉; 𥉉; 𥉉; 𥉉; 𥉉; ) CJK COMPATIBILITY IDEOGRAPH-FAD5 FAD6;25CD0;25CD0;25CD0;25CD0; # (𥳐; 𥳐; 𥳐; 𥳐; 𥳐; ) CJK COMPATIBILITY IDEOGRAPH-FAD6 FAD7;27ED3;27ED3;27ED3;27ED3; # (𧻓; 𧻓; 𧻓; 𧻓; 𧻓; ) CJK COMPATIBILITY IDEOGRAPH-FAD7 FAD8;9F43;9F43;9F43;9F43; # (齃; 齃; 齃; 齃; 齃; ) CJK COMPATIBILITY IDEOGRAPH-FAD8 FAD9;9F8E;9F8E;9F8E;9F8E; # (龎; 龎; 龎; 龎; 龎; ) CJK COMPATIBILITY IDEOGRAPH-FAD9 FB00;FB00;FB00;0066 0066;0066 0066; # (ff; ff; ff; ff; ff; ) LATIN SMALL LIGATURE FF FB01;FB01;FB01;0066 0069;0066 0069; # (fi; fi; fi; fi; fi; ) LATIN SMALL LIGATURE FI FB02;FB02;FB02;0066 006C;0066 006C; # (fl; fl; fl; fl; fl; ) LATIN SMALL LIGATURE FL FB03;FB03;FB03;0066 0066 0069;0066 0066 0069; # (ffi; ffi; ffi; ffi; ffi; ) LATIN SMALL LIGATURE FFI FB04;FB04;FB04;0066 0066 006C;0066 0066 006C; # (ffl; ffl; ffl; ffl; ffl; ) LATIN SMALL LIGATURE FFL FB05;FB05;FB05;0073 0074;0073 0074; # (ſt; ſt; ſt; st; st; ) LATIN SMALL LIGATURE LONG S T FB06;FB06;FB06;0073 0074;0073 0074; # (st; st; st; st; st; ) LATIN SMALL LIGATURE ST FB13;FB13;FB13;0574 0576;0574 0576; # (ﬓ; ﬓ; ﬓ; մն; մն; ) ARMENIAN SMALL LIGATURE MEN NOW FB14;FB14;FB14;0574 0565;0574 0565; # (ﬔ; ﬔ; ﬔ; մե; մե; ) ARMENIAN SMALL LIGATURE MEN ECH FB15;FB15;FB15;0574 056B;0574 056B; # (ﬕ; ﬕ; ﬕ; մի; մի; ) ARMENIAN SMALL LIGATURE MEN INI FB16;FB16;FB16;057E 0576;057E 0576; # (ﬖ; ﬖ; ﬖ; վն; վն; ) ARMENIAN SMALL LIGATURE VEW NOW FB17;FB17;FB17;0574 056D;0574 056D; # (ﬗ; ﬗ; ﬗ; մխ; մխ; ) ARMENIAN SMALL LIGATURE MEN XEH FB1D;05D9 05B4;05D9 05B4;05D9 05B4;05D9 05B4; # (יִ; י◌ִ; י◌ִ; י◌ִ; י◌ִ; ) HEBREW LETTER YOD WITH HIRIQ FB1F;05F2 05B7;05F2 05B7;05F2 05B7;05F2 05B7; # (ײַ; ײ◌ַ; ײ◌ַ; ײ◌ַ; ײ◌ַ; ) HEBREW LIGATURE YIDDISH YOD YOD PATAH FB20;FB20;FB20;05E2;05E2; # (ﬠ; ﬠ; ﬠ; ע; ע; ) HEBREW LETTER ALTERNATIVE AYIN FB21;FB21;FB21;05D0;05D0; # (ﬡ; ﬡ; ﬡ; א; א; ) HEBREW LETTER WIDE ALEF FB22;FB22;FB22;05D3;05D3; # (ﬢ; ﬢ; ﬢ; ד; ד; ) HEBREW LETTER WIDE DALET FB23;FB23;FB23;05D4;05D4; # (ﬣ; ﬣ; ﬣ; ה; ה; ) HEBREW LETTER WIDE HE FB24;FB24;FB24;05DB;05DB; # (ﬤ; ﬤ; ﬤ; כ; כ; ) HEBREW LETTER WIDE KAF FB25;FB25;FB25;05DC;05DC; # (ﬥ; ﬥ; ﬥ; ל; ל; ) HEBREW LETTER WIDE LAMED FB26;FB26;FB26;05DD;05DD; # (ﬦ; ﬦ; ﬦ; ם; ם; ) HEBREW LETTER WIDE FINAL MEM FB27;FB27;FB27;05E8;05E8; # (ﬧ; ﬧ; ﬧ; ר; ר; ) HEBREW LETTER WIDE RESH FB28;FB28;FB28;05EA;05EA; # (ﬨ; ﬨ; ﬨ; ת; ת; ) HEBREW LETTER WIDE TAV FB29;FB29;FB29;002B;002B; # (﬩; ﬩; ﬩; +; +; ) HEBREW LETTER ALTERNATIVE PLUS SIGN FB2A;05E9 05C1;05E9 05C1;05E9 05C1;05E9 05C1; # (שׁ; ש◌ׁ; ש◌ׁ; ש◌ׁ; ש◌ׁ; ) HEBREW LETTER SHIN WITH SHIN DOT FB2B;05E9 05C2;05E9 05C2;05E9 05C2;05E9 05C2; # (שׂ; ש◌ׂ; ש◌ׂ; ש◌ׂ; ש◌ׂ; ) HEBREW LETTER SHIN WITH SIN DOT FB2C;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; # (שּׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ש◌ּ◌ׁ; ) HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT FB2D;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; # (שּׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ש◌ּ◌ׂ; ) HEBREW LETTER SHIN WITH DAGESH AND SIN DOT FB2E;05D0 05B7;05D0 05B7;05D0 05B7;05D0 05B7; # (אַ; א◌ַ; א◌ַ; א◌ַ; א◌ַ; ) HEBREW LETTER ALEF WITH PATAH FB2F;05D0 05B8;05D0 05B8;05D0 05B8;05D0 05B8; # (אָ; א◌ָ; א◌ָ; א◌ָ; א◌ָ; ) HEBREW LETTER ALEF WITH QAMATS FB30;05D0 05BC;05D0 05BC;05D0 05BC;05D0 05BC; # (אּ; א◌ּ; א◌ּ; א◌ּ; א◌ּ; ) HEBREW LETTER ALEF WITH MAPIQ FB31;05D1 05BC;05D1 05BC;05D1 05BC;05D1 05BC; # (בּ; ב◌ּ; ב◌ּ; ב◌ּ; ב◌ּ; ) HEBREW LETTER BET WITH DAGESH FB32;05D2 05BC;05D2 05BC;05D2 05BC;05D2 05BC; # (גּ; ג◌ּ; ג◌ּ; ג◌ּ; ג◌ּ; ) HEBREW LETTER GIMEL WITH DAGESH FB33;05D3 05BC;05D3 05BC;05D3 05BC;05D3 05BC; # (דּ; ד◌ּ; ד◌ּ; ד◌ּ; ד◌ּ; ) HEBREW LETTER DALET WITH DAGESH FB34;05D4 05BC;05D4 05BC;05D4 05BC;05D4 05BC; # (הּ; ה◌ּ; ה◌ּ; ה◌ּ; ה◌ּ; ) HEBREW LETTER HE WITH MAPIQ FB35;05D5 05BC;05D5 05BC;05D5 05BC;05D5 05BC; # (וּ; ו◌ּ; ו◌ּ; ו◌ּ; ו◌ּ; ) HEBREW LETTER VAV WITH DAGESH FB36;05D6 05BC;05D6 05BC;05D6 05BC;05D6 05BC; # (זּ; ז◌ּ; ז◌ּ; ז◌ּ; ז◌ּ; ) HEBREW LETTER ZAYIN WITH DAGESH FB38;05D8 05BC;05D8 05BC;05D8 05BC;05D8 05BC; # (טּ; ט◌ּ; ט◌ּ; ט◌ּ; ט◌ּ; ) HEBREW LETTER TET WITH DAGESH FB39;05D9 05BC;05D9 05BC;05D9 05BC;05D9 05BC; # (יּ; י◌ּ; י◌ּ; י◌ּ; י◌ּ; ) HEBREW LETTER YOD WITH DAGESH FB3A;05DA 05BC;05DA 05BC;05DA 05BC;05DA 05BC; # (ךּ; ך◌ּ; ך◌ּ; ך◌ּ; ך◌ּ; ) HEBREW LETTER FINAL KAF WITH DAGESH FB3B;05DB 05BC;05DB 05BC;05DB 05BC;05DB 05BC; # (כּ; כ◌ּ; כ◌ּ; כ◌ּ; כ◌ּ; ) HEBREW LETTER KAF WITH DAGESH FB3C;05DC 05BC;05DC 05BC;05DC 05BC;05DC 05BC; # (לּ; ל◌ּ; ל◌ּ; ל◌ּ; ל◌ּ; ) HEBREW LETTER LAMED WITH DAGESH FB3E;05DE 05BC;05DE 05BC;05DE 05BC;05DE 05BC; # (מּ; מ◌ּ; מ◌ּ; מ◌ּ; מ◌ּ; ) HEBREW LETTER MEM WITH DAGESH FB40;05E0 05BC;05E0 05BC;05E0 05BC;05E0 05BC; # (נּ; נ◌ּ; נ◌ּ; נ◌ּ; נ◌ּ; ) HEBREW LETTER NUN WITH DAGESH FB41;05E1 05BC;05E1 05BC;05E1 05BC;05E1 05BC; # (סּ; ס◌ּ; ס◌ּ; ס◌ּ; ס◌ּ; ) HEBREW LETTER SAMEKH WITH DAGESH FB43;05E3 05BC;05E3 05BC;05E3 05BC;05E3 05BC; # (ףּ; ף◌ּ; ף◌ּ; ף◌ּ; ף◌ּ; ) HEBREW LETTER FINAL PE WITH DAGESH FB44;05E4 05BC;05E4 05BC;05E4 05BC;05E4 05BC; # (פּ; פ◌ּ; פ◌ּ; פ◌ּ; פ◌ּ; ) HEBREW LETTER PE WITH DAGESH FB46;05E6 05BC;05E6 05BC;05E6 05BC;05E6 05BC; # (צּ; צ◌ּ; צ◌ּ; צ◌ּ; צ◌ּ; ) HEBREW LETTER TSADI WITH DAGESH FB47;05E7 05BC;05E7 05BC;05E7 05BC;05E7 05BC; # (קּ; ק◌ּ; ק◌ּ; ק◌ּ; ק◌ּ; ) HEBREW LETTER QOF WITH DAGESH FB48;05E8 05BC;05E8 05BC;05E8 05BC;05E8 05BC; # (רּ; ר◌ּ; ר◌ּ; ר◌ּ; ר◌ּ; ) HEBREW LETTER RESH WITH DAGESH FB49;05E9 05BC;05E9 05BC;05E9 05BC;05E9 05BC; # (שּ; ש◌ּ; ש◌ּ; ש◌ּ; ש◌ּ; ) HEBREW LETTER SHIN WITH DAGESH FB4A;05EA 05BC;05EA 05BC;05EA 05BC;05EA 05BC; # (תּ; ת◌ּ; ת◌ּ; ת◌ּ; ת◌ּ; ) HEBREW LETTER TAV WITH DAGESH FB4B;05D5 05B9;05D5 05B9;05D5 05B9;05D5 05B9; # (וֹ; ו◌ֹ; ו◌ֹ; ו◌ֹ; ו◌ֹ; ) HEBREW LETTER VAV WITH HOLAM FB4C;05D1 05BF;05D1 05BF;05D1 05BF;05D1 05BF; # (בֿ; ב◌ֿ; ב◌ֿ; ב◌ֿ; ב◌ֿ; ) HEBREW LETTER BET WITH RAFE FB4D;05DB 05BF;05DB 05BF;05DB 05BF;05DB 05BF; # (כֿ; כ◌ֿ; כ◌ֿ; כ◌ֿ; כ◌ֿ; ) HEBREW LETTER KAF WITH RAFE FB4E;05E4 05BF;05E4 05BF;05E4 05BF;05E4 05BF; # (פֿ; פ◌ֿ; פ◌ֿ; פ◌ֿ; פ◌ֿ; ) HEBREW LETTER PE WITH RAFE FB4F;FB4F;FB4F;05D0 05DC;05D0 05DC; # (ﭏ; ﭏ; ﭏ; אל; אל; ) HEBREW LIGATURE ALEF LAMED FB50;FB50;FB50;0671;0671; # (ﭐ; ﭐ; ﭐ; ٱ; ٱ; ) ARABIC LETTER ALEF WASLA ISOLATED FORM FB51;FB51;FB51;0671;0671; # (ﭑ; ﭑ; ﭑ; ٱ; ٱ; ) ARABIC LETTER ALEF WASLA FINAL FORM FB52;FB52;FB52;067B;067B; # (ﭒ; ﭒ; ﭒ; ٻ; ٻ; ) ARABIC LETTER BEEH ISOLATED FORM FB53;FB53;FB53;067B;067B; # (ﭓ; ﭓ; ﭓ; ٻ; ٻ; ) ARABIC LETTER BEEH FINAL FORM FB54;FB54;FB54;067B;067B; # (ﭔ; ﭔ; ﭔ; ٻ; ٻ; ) ARABIC LETTER BEEH INITIAL FORM FB55;FB55;FB55;067B;067B; # (ﭕ; ﭕ; ﭕ; ٻ; ٻ; ) ARABIC LETTER BEEH MEDIAL FORM FB56;FB56;FB56;067E;067E; # (ﭖ; ﭖ; ﭖ; پ; پ; ) ARABIC LETTER PEH ISOLATED FORM FB57;FB57;FB57;067E;067E; # (ﭗ; ﭗ; ﭗ; پ; پ; ) ARABIC LETTER PEH FINAL FORM FB58;FB58;FB58;067E;067E; # (ﭘ; ﭘ; ﭘ; پ; پ; ) ARABIC LETTER PEH INITIAL FORM FB59;FB59;FB59;067E;067E; # (ﭙ; ﭙ; ﭙ; پ; پ; ) ARABIC LETTER PEH MEDIAL FORM FB5A;FB5A;FB5A;0680;0680; # (ﭚ; ﭚ; ﭚ; ڀ; ڀ; ) ARABIC LETTER BEHEH ISOLATED FORM FB5B;FB5B;FB5B;0680;0680; # (ﭛ; ﭛ; ﭛ; ڀ; ڀ; ) ARABIC LETTER BEHEH FINAL FORM FB5C;FB5C;FB5C;0680;0680; # (ﭜ; ﭜ; ﭜ; ڀ; ڀ; ) ARABIC LETTER BEHEH INITIAL FORM FB5D;FB5D;FB5D;0680;0680; # (ﭝ; ﭝ; ﭝ; ڀ; ڀ; ) ARABIC LETTER BEHEH MEDIAL FORM FB5E;FB5E;FB5E;067A;067A; # (ﭞ; ﭞ; ﭞ; ٺ; ٺ; ) ARABIC LETTER TTEHEH ISOLATED FORM FB5F;FB5F;FB5F;067A;067A; # (ﭟ; ﭟ; ﭟ; ٺ; ٺ; ) ARABIC LETTER TTEHEH FINAL FORM FB60;FB60;FB60;067A;067A; # (ﭠ; ﭠ; ﭠ; ٺ; ٺ; ) ARABIC LETTER TTEHEH INITIAL FORM FB61;FB61;FB61;067A;067A; # (ﭡ; ﭡ; ﭡ; ٺ; ٺ; ) ARABIC LETTER TTEHEH MEDIAL FORM FB62;FB62;FB62;067F;067F; # (ﭢ; ﭢ; ﭢ; ٿ; ٿ; ) ARABIC LETTER TEHEH ISOLATED FORM FB63;FB63;FB63;067F;067F; # (ﭣ; ﭣ; ﭣ; ٿ; ٿ; ) ARABIC LETTER TEHEH FINAL FORM FB64;FB64;FB64;067F;067F; # (ﭤ; ﭤ; ﭤ; ٿ; ٿ; ) ARABIC LETTER TEHEH INITIAL FORM FB65;FB65;FB65;067F;067F; # (ﭥ; ﭥ; ﭥ; ٿ; ٿ; ) ARABIC LETTER TEHEH MEDIAL FORM FB66;FB66;FB66;0679;0679; # (ﭦ; ﭦ; ﭦ; ٹ; ٹ; ) ARABIC LETTER TTEH ISOLATED FORM FB67;FB67;FB67;0679;0679; # (ﭧ; ﭧ; ﭧ; ٹ; ٹ; ) ARABIC LETTER TTEH FINAL FORM FB68;FB68;FB68;0679;0679; # (ﭨ; ﭨ; ﭨ; ٹ; ٹ; ) ARABIC LETTER TTEH INITIAL FORM FB69;FB69;FB69;0679;0679; # (ﭩ; ﭩ; ﭩ; ٹ; ٹ; ) ARABIC LETTER TTEH MEDIAL FORM FB6A;FB6A;FB6A;06A4;06A4; # (ﭪ; ﭪ; ﭪ; ڤ; ڤ; ) ARABIC LETTER VEH ISOLATED FORM FB6B;FB6B;FB6B;06A4;06A4; # (ﭫ; ﭫ; ﭫ; ڤ; ڤ; ) ARABIC LETTER VEH FINAL FORM FB6C;FB6C;FB6C;06A4;06A4; # (ﭬ; ﭬ; ﭬ; ڤ; ڤ; ) ARABIC LETTER VEH INITIAL FORM FB6D;FB6D;FB6D;06A4;06A4; # (ﭭ; ﭭ; ﭭ; ڤ; ڤ; ) ARABIC LETTER VEH MEDIAL FORM FB6E;FB6E;FB6E;06A6;06A6; # (ﭮ; ﭮ; ﭮ; ڦ; ڦ; ) ARABIC LETTER PEHEH ISOLATED FORM FB6F;FB6F;FB6F;06A6;06A6; # (ﭯ; ﭯ; ﭯ; ڦ; ڦ; ) ARABIC LETTER PEHEH FINAL FORM FB70;FB70;FB70;06A6;06A6; # (ﭰ; ﭰ; ﭰ; ڦ; ڦ; ) ARABIC LETTER PEHEH INITIAL FORM FB71;FB71;FB71;06A6;06A6; # (ﭱ; ﭱ; ﭱ; ڦ; ڦ; ) ARABIC LETTER PEHEH MEDIAL FORM FB72;FB72;FB72;0684;0684; # (ﭲ; ﭲ; ﭲ; ڄ; ڄ; ) ARABIC LETTER DYEH ISOLATED FORM FB73;FB73;FB73;0684;0684; # (ﭳ; ﭳ; ﭳ; ڄ; ڄ; ) ARABIC LETTER DYEH FINAL FORM FB74;FB74;FB74;0684;0684; # (ﭴ; ﭴ; ﭴ; ڄ; ڄ; ) ARABIC LETTER DYEH INITIAL FORM FB75;FB75;FB75;0684;0684; # (ﭵ; ﭵ; ﭵ; ڄ; ڄ; ) ARABIC LETTER DYEH MEDIAL FORM FB76;FB76;FB76;0683;0683; # (ﭶ; ﭶ; ﭶ; ڃ; ڃ; ) ARABIC LETTER NYEH ISOLATED FORM FB77;FB77;FB77;0683;0683; # (ﭷ; ﭷ; ﭷ; ڃ; ڃ; ) ARABIC LETTER NYEH FINAL FORM FB78;FB78;FB78;0683;0683; # (ﭸ; ﭸ; ﭸ; ڃ; ڃ; ) ARABIC LETTER NYEH INITIAL FORM FB79;FB79;FB79;0683;0683; # (ﭹ; ﭹ; ﭹ; ڃ; ڃ; ) ARABIC LETTER NYEH MEDIAL FORM FB7A;FB7A;FB7A;0686;0686; # (ﭺ; ﭺ; ﭺ; چ; چ; ) ARABIC LETTER TCHEH ISOLATED FORM FB7B;FB7B;FB7B;0686;0686; # (ﭻ; ﭻ; ﭻ; چ; چ; ) ARABIC LETTER TCHEH FINAL FORM FB7C;FB7C;FB7C;0686;0686; # (ﭼ; ﭼ; ﭼ; چ; چ; ) ARABIC LETTER TCHEH INITIAL FORM FB7D;FB7D;FB7D;0686;0686; # (ﭽ; ﭽ; ﭽ; چ; چ; ) ARABIC LETTER TCHEH MEDIAL FORM FB7E;FB7E;FB7E;0687;0687; # (ﭾ; ﭾ; ﭾ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH ISOLATED FORM FB7F;FB7F;FB7F;0687;0687; # (ﭿ; ﭿ; ﭿ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH FINAL FORM FB80;FB80;FB80;0687;0687; # (ﮀ; ﮀ; ﮀ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH INITIAL FORM FB81;FB81;FB81;0687;0687; # (ﮁ; ﮁ; ﮁ; ڇ; ڇ; ) ARABIC LETTER TCHEHEH MEDIAL FORM FB82;FB82;FB82;068D;068D; # (ﮂ; ﮂ; ﮂ; ڍ; ڍ; ) ARABIC LETTER DDAHAL ISOLATED FORM FB83;FB83;FB83;068D;068D; # (ﮃ; ﮃ; ﮃ; ڍ; ڍ; ) ARABIC LETTER DDAHAL FINAL FORM FB84;FB84;FB84;068C;068C; # (ﮄ; ﮄ; ﮄ; ڌ; ڌ; ) ARABIC LETTER DAHAL ISOLATED FORM FB85;FB85;FB85;068C;068C; # (ﮅ; ﮅ; ﮅ; ڌ; ڌ; ) ARABIC LETTER DAHAL FINAL FORM FB86;FB86;FB86;068E;068E; # (ﮆ; ﮆ; ﮆ; ڎ; ڎ; ) ARABIC LETTER DUL ISOLATED FORM FB87;FB87;FB87;068E;068E; # (ﮇ; ﮇ; ﮇ; ڎ; ڎ; ) ARABIC LETTER DUL FINAL FORM FB88;FB88;FB88;0688;0688; # (ﮈ; ﮈ; ﮈ; ڈ; ڈ; ) ARABIC LETTER DDAL ISOLATED FORM FB89;FB89;FB89;0688;0688; # (ﮉ; ﮉ; ﮉ; ڈ; ڈ; ) ARABIC LETTER DDAL FINAL FORM FB8A;FB8A;FB8A;0698;0698; # (ﮊ; ﮊ; ﮊ; ژ; ژ; ) ARABIC LETTER JEH ISOLATED FORM FB8B;FB8B;FB8B;0698;0698; # (ﮋ; ﮋ; ﮋ; ژ; ژ; ) ARABIC LETTER JEH FINAL FORM FB8C;FB8C;FB8C;0691;0691; # (ﮌ; ﮌ; ﮌ; ڑ; ڑ; ) ARABIC LETTER RREH ISOLATED FORM FB8D;FB8D;FB8D;0691;0691; # (ﮍ; ﮍ; ﮍ; ڑ; ڑ; ) ARABIC LETTER RREH FINAL FORM FB8E;FB8E;FB8E;06A9;06A9; # (ﮎ; ﮎ; ﮎ; ک; ک; ) ARABIC LETTER KEHEH ISOLATED FORM FB8F;FB8F;FB8F;06A9;06A9; # (ﮏ; ﮏ; ﮏ; ک; ک; ) ARABIC LETTER KEHEH FINAL FORM FB90;FB90;FB90;06A9;06A9; # (ﮐ; ﮐ; ﮐ; ک; ک; ) ARABIC LETTER KEHEH INITIAL FORM FB91;FB91;FB91;06A9;06A9; # (ﮑ; ﮑ; ﮑ; ک; ک; ) ARABIC LETTER KEHEH MEDIAL FORM FB92;FB92;FB92;06AF;06AF; # (ﮒ; ﮒ; ﮒ; گ; گ; ) ARABIC LETTER GAF ISOLATED FORM FB93;FB93;FB93;06AF;06AF; # (ﮓ; ﮓ; ﮓ; گ; گ; ) ARABIC LETTER GAF FINAL FORM FB94;FB94;FB94;06AF;06AF; # (ﮔ; ﮔ; ﮔ; گ; گ; ) ARABIC LETTER GAF INITIAL FORM FB95;FB95;FB95;06AF;06AF; # (ﮕ; ﮕ; ﮕ; گ; گ; ) ARABIC LETTER GAF MEDIAL FORM FB96;FB96;FB96;06B3;06B3; # (ﮖ; ﮖ; ﮖ; ڳ; ڳ; ) ARABIC LETTER GUEH ISOLATED FORM FB97;FB97;FB97;06B3;06B3; # (ﮗ; ﮗ; ﮗ; ڳ; ڳ; ) ARABIC LETTER GUEH FINAL FORM FB98;FB98;FB98;06B3;06B3; # (ﮘ; ﮘ; ﮘ; ڳ; ڳ; ) ARABIC LETTER GUEH INITIAL FORM FB99;FB99;FB99;06B3;06B3; # (ﮙ; ﮙ; ﮙ; ڳ; ڳ; ) ARABIC LETTER GUEH MEDIAL FORM FB9A;FB9A;FB9A;06B1;06B1; # (ﮚ; ﮚ; ﮚ; ڱ; ڱ; ) ARABIC LETTER NGOEH ISOLATED FORM FB9B;FB9B;FB9B;06B1;06B1; # (ﮛ; ﮛ; ﮛ; ڱ; ڱ; ) ARABIC LETTER NGOEH FINAL FORM FB9C;FB9C;FB9C;06B1;06B1; # (ﮜ; ﮜ; ﮜ; ڱ; ڱ; ) ARABIC LETTER NGOEH INITIAL FORM FB9D;FB9D;FB9D;06B1;06B1; # (ﮝ; ﮝ; ﮝ; ڱ; ڱ; ) ARABIC LETTER NGOEH MEDIAL FORM FB9E;FB9E;FB9E;06BA;06BA; # (ﮞ; ﮞ; ﮞ; ں; ں; ) ARABIC LETTER NOON GHUNNA ISOLATED FORM FB9F;FB9F;FB9F;06BA;06BA; # (ﮟ; ﮟ; ﮟ; ں; ں; ) ARABIC LETTER NOON GHUNNA FINAL FORM FBA0;FBA0;FBA0;06BB;06BB; # (ﮠ; ﮠ; ﮠ; ڻ; ڻ; ) ARABIC LETTER RNOON ISOLATED FORM FBA1;FBA1;FBA1;06BB;06BB; # (ﮡ; ﮡ; ﮡ; ڻ; ڻ; ) ARABIC LETTER RNOON FINAL FORM FBA2;FBA2;FBA2;06BB;06BB; # (ﮢ; ﮢ; ﮢ; ڻ; ڻ; ) ARABIC LETTER RNOON INITIAL FORM FBA3;FBA3;FBA3;06BB;06BB; # (ﮣ; ﮣ; ﮣ; ڻ; ڻ; ) ARABIC LETTER RNOON MEDIAL FORM FBA4;FBA4;FBA4;06C0;06D5 0654; # (ﮤ; ﮤ; ﮤ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM FBA5;FBA5;FBA5;06C0;06D5 0654; # (ﮥ; ﮥ; ﮥ; ۀ; ە◌ٔ; ) ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM FBA6;FBA6;FBA6;06C1;06C1; # (ﮦ; ﮦ; ﮦ; ہ; ہ; ) ARABIC LETTER HEH GOAL ISOLATED FORM FBA7;FBA7;FBA7;06C1;06C1; # (ﮧ; ﮧ; ﮧ; ہ; ہ; ) ARABIC LETTER HEH GOAL FINAL FORM FBA8;FBA8;FBA8;06C1;06C1; # (ﮨ; ﮨ; ﮨ; ہ; ہ; ) ARABIC LETTER HEH GOAL INITIAL FORM FBA9;FBA9;FBA9;06C1;06C1; # (ﮩ; ﮩ; ﮩ; ہ; ہ; ) ARABIC LETTER HEH GOAL MEDIAL FORM FBAA;FBAA;FBAA;06BE;06BE; # (ﮪ; ﮪ; ﮪ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM FBAB;FBAB;FBAB;06BE;06BE; # (ﮫ; ﮫ; ﮫ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE FINAL FORM FBAC;FBAC;FBAC;06BE;06BE; # (ﮬ; ﮬ; ﮬ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE INITIAL FORM FBAD;FBAD;FBAD;06BE;06BE; # (ﮭ; ﮭ; ﮭ; ھ; ھ; ) ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM FBAE;FBAE;FBAE;06D2;06D2; # (ﮮ; ﮮ; ﮮ; ے; ے; ) ARABIC LETTER YEH BARREE ISOLATED FORM FBAF;FBAF;FBAF;06D2;06D2; # (ﮯ; ﮯ; ﮯ; ے; ے; ) ARABIC LETTER YEH BARREE FINAL FORM FBB0;FBB0;FBB0;06D3;06D2 0654; # (ﮰ; ﮰ; ﮰ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM FBB1;FBB1;FBB1;06D3;06D2 0654; # (ﮱ; ﮱ; ﮱ; ۓ; ے◌ٔ; ) ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBD3;FBD3;FBD3;06AD;06AD; # (ﯓ; ﯓ; ﯓ; ڭ; ڭ; ) ARABIC LETTER NG ISOLATED FORM FBD4;FBD4;FBD4;06AD;06AD; # (ﯔ; ﯔ; ﯔ; ڭ; ڭ; ) ARABIC LETTER NG FINAL FORM FBD5;FBD5;FBD5;06AD;06AD; # (ﯕ; ﯕ; ﯕ; ڭ; ڭ; ) ARABIC LETTER NG INITIAL FORM FBD6;FBD6;FBD6;06AD;06AD; # (ﯖ; ﯖ; ﯖ; ڭ; ڭ; ) ARABIC LETTER NG MEDIAL FORM FBD7;FBD7;FBD7;06C7;06C7; # (ﯗ; ﯗ; ﯗ; ۇ; ۇ; ) ARABIC LETTER U ISOLATED FORM FBD8;FBD8;FBD8;06C7;06C7; # (ﯘ; ﯘ; ﯘ; ۇ; ۇ; ) ARABIC LETTER U FINAL FORM FBD9;FBD9;FBD9;06C6;06C6; # (ﯙ; ﯙ; ﯙ; ۆ; ۆ; ) ARABIC LETTER OE ISOLATED FORM FBDA;FBDA;FBDA;06C6;06C6; # (ﯚ; ﯚ; ﯚ; ۆ; ۆ; ) ARABIC LETTER OE FINAL FORM FBDB;FBDB;FBDB;06C8;06C8; # (ﯛ; ﯛ; ﯛ; ۈ; ۈ; ) ARABIC LETTER YU ISOLATED FORM FBDC;FBDC;FBDC;06C8;06C8; # (ﯜ; ﯜ; ﯜ; ۈ; ۈ; ) ARABIC LETTER YU FINAL FORM FBDD;FBDD;FBDD;06C7 0674;06C7 0674; # (ﯝ; ﯝ; ﯝ; ۇٴ; ۇٴ; ) ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM FBDE;FBDE;FBDE;06CB;06CB; # (ﯞ; ﯞ; ﯞ; ۋ; ۋ; ) ARABIC LETTER VE ISOLATED FORM FBDF;FBDF;FBDF;06CB;06CB; # (ﯟ; ﯟ; ﯟ; ۋ; ۋ; ) ARABIC LETTER VE FINAL FORM FBE0;FBE0;FBE0;06C5;06C5; # (ﯠ; ﯠ; ﯠ; ۅ; ۅ; ) ARABIC LETTER KIRGHIZ OE ISOLATED FORM FBE1;FBE1;FBE1;06C5;06C5; # (ﯡ; ﯡ; ﯡ; ۅ; ۅ; ) ARABIC LETTER KIRGHIZ OE FINAL FORM FBE2;FBE2;FBE2;06C9;06C9; # (ﯢ; ﯢ; ﯢ; ۉ; ۉ; ) ARABIC LETTER KIRGHIZ YU ISOLATED FORM FBE3;FBE3;FBE3;06C9;06C9; # (ﯣ; ﯣ; ﯣ; ۉ; ۉ; ) ARABIC LETTER KIRGHIZ YU FINAL FORM FBE4;FBE4;FBE4;06D0;06D0; # (ﯤ; ﯤ; ﯤ; ې; ې; ) ARABIC LETTER E ISOLATED FORM FBE5;FBE5;FBE5;06D0;06D0; # (ﯥ; ﯥ; ﯥ; ې; ې; ) ARABIC LETTER E FINAL FORM FBE6;FBE6;FBE6;06D0;06D0; # (ﯦ; ﯦ; ﯦ; ې; ې; ) ARABIC LETTER E INITIAL FORM FBE7;FBE7;FBE7;06D0;06D0; # (ﯧ; ﯧ; ﯧ; ې; ې; ) ARABIC LETTER E MEDIAL FORM FBE8;FBE8;FBE8;0649;0649; # (ﯨ; ﯨ; ﯨ; ى; ى; ) ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM FBE9;FBE9;FBE9;0649;0649; # (ﯩ; ﯩ; ﯩ; ى; ى; ) ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM FBEA;FBEA;FBEA;0626 0627;064A 0654 0627; # (ﯪ; ﯪ; ﯪ; ئا; ي◌ٔا; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM FBEB;FBEB;FBEB;0626 0627;064A 0654 0627; # (ﯫ; ﯫ; ﯫ; ئا; ي◌ٔا; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM FBEC;FBEC;FBEC;0626 06D5;064A 0654 06D5; # (ﯬ; ﯬ; ﯬ; ئە; ي◌ٔە; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM FBED;FBED;FBED;0626 06D5;064A 0654 06D5; # (ﯭ; ﯭ; ﯭ; ئە; ي◌ٔە; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM FBEE;FBEE;FBEE;0626 0648;064A 0654 0648; # (ﯮ; ﯮ; ﯮ; ئو; ي◌ٔو; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM FBEF;FBEF;FBEF;0626 0648;064A 0654 0648; # (ﯯ; ﯯ; ﯯ; ئو; ي◌ٔو; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM FBF0;FBF0;FBF0;0626 06C7;064A 0654 06C7; # (ﯰ; ﯰ; ﯰ; ئۇ; ي◌ٔۇ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM FBF1;FBF1;FBF1;0626 06C7;064A 0654 06C7; # (ﯱ; ﯱ; ﯱ; ئۇ; ي◌ٔۇ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM FBF2;FBF2;FBF2;0626 06C6;064A 0654 06C6; # (ﯲ; ﯲ; ﯲ; ئۆ; ي◌ٔۆ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM FBF3;FBF3;FBF3;0626 06C6;064A 0654 06C6; # (ﯳ; ﯳ; ﯳ; ئۆ; ي◌ٔۆ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM FBF4;FBF4;FBF4;0626 06C8;064A 0654 06C8; # (ﯴ; ﯴ; ﯴ; ئۈ; ي◌ٔۈ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM FBF5;FBF5;FBF5;0626 06C8;064A 0654 06C8; # (ﯵ; ﯵ; ﯵ; ئۈ; ي◌ٔۈ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM FBF6;FBF6;FBF6;0626 06D0;064A 0654 06D0; # (ﯶ; ﯶ; ﯶ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM FBF7;FBF7;FBF7;0626 06D0;064A 0654 06D0; # (ﯷ; ﯷ; ﯷ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM FBF8;FBF8;FBF8;0626 06D0;064A 0654 06D0; # (ﯸ; ﯸ; ﯸ; ئې; ي◌ٔې; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM FBF9;FBF9;FBF9;0626 0649;064A 0654 0649; # (ﯹ; ﯹ; ﯹ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM FBFA;FBFA;FBFA;0626 0649;064A 0654 0649; # (ﯺ; ﯺ; ﯺ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM FBFB;FBFB;FBFB;0626 0649;064A 0654 0649; # (ﯻ; ﯻ; ﯻ; ئى; ي◌ٔى; ) ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM FBFC;FBFC;FBFC;06CC;06CC; # (ﯼ; ﯼ; ﯼ; ی; ی; ) ARABIC LETTER FARSI YEH ISOLATED FORM FBFD;FBFD;FBFD;06CC;06CC; # (ﯽ; ﯽ; ﯽ; ی; ی; ) ARABIC LETTER FARSI YEH FINAL FORM FBFE;FBFE;FBFE;06CC;06CC; # (ﯾ; ﯾ; ﯾ; ی; ی; ) ARABIC LETTER FARSI YEH INITIAL FORM FBFF;FBFF;FBFF;06CC;06CC; # (ﯿ; ﯿ; ﯿ; ی; ی; ) ARABIC LETTER FARSI YEH MEDIAL FORM FC00;FC00;FC00;0626 062C;064A 0654 062C; # (ﰀ; ﰀ; ﰀ; ئج; ي◌ٔج; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM FC01;FC01;FC01;0626 062D;064A 0654 062D; # (ﰁ; ﰁ; ﰁ; ئح; ي◌ٔح; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM FC02;FC02;FC02;0626 0645;064A 0654 0645; # (ﰂ; ﰂ; ﰂ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM FC03;FC03;FC03;0626 0649;064A 0654 0649; # (ﰃ; ﰃ; ﰃ; ئى; ي◌ٔى; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM FC04;FC04;FC04;0626 064A;064A 0654 064A; # (ﰄ; ﰄ; ﰄ; ئي; ي◌ٔي; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM FC05;FC05;FC05;0628 062C;0628 062C; # (ﰅ; ﰅ; ﰅ; بج; بج; ) ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM FC06;FC06;FC06;0628 062D;0628 062D; # (ﰆ; ﰆ; ﰆ; بح; بح; ) ARABIC LIGATURE BEH WITH HAH ISOLATED FORM FC07;FC07;FC07;0628 062E;0628 062E; # (ﰇ; ﰇ; ﰇ; بخ; بخ; ) ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM FC08;FC08;FC08;0628 0645;0628 0645; # (ﰈ; ﰈ; ﰈ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM FC09;FC09;FC09;0628 0649;0628 0649; # (ﰉ; ﰉ; ﰉ; بى; بى; ) ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM FC0A;FC0A;FC0A;0628 064A;0628 064A; # (ﰊ; ﰊ; ﰊ; بي; بي; ) ARABIC LIGATURE BEH WITH YEH ISOLATED FORM FC0B;FC0B;FC0B;062A 062C;062A 062C; # (ﰋ; ﰋ; ﰋ; تج; تج; ) ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM FC0C;FC0C;FC0C;062A 062D;062A 062D; # (ﰌ; ﰌ; ﰌ; تح; تح; ) ARABIC LIGATURE TEH WITH HAH ISOLATED FORM FC0D;FC0D;FC0D;062A 062E;062A 062E; # (ﰍ; ﰍ; ﰍ; تخ; تخ; ) ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM FC0E;FC0E;FC0E;062A 0645;062A 0645; # (ﰎ; ﰎ; ﰎ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM FC0F;FC0F;FC0F;062A 0649;062A 0649; # (ﰏ; ﰏ; ﰏ; تى; تى; ) ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM FC10;FC10;FC10;062A 064A;062A 064A; # (ﰐ; ﰐ; ﰐ; تي; تي; ) ARABIC LIGATURE TEH WITH YEH ISOLATED FORM FC11;FC11;FC11;062B 062C;062B 062C; # (ﰑ; ﰑ; ﰑ; ثج; ثج; ) ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM FC12;FC12;FC12;062B 0645;062B 0645; # (ﰒ; ﰒ; ﰒ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM FC13;FC13;FC13;062B 0649;062B 0649; # (ﰓ; ﰓ; ﰓ; ثى; ثى; ) ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM FC14;FC14;FC14;062B 064A;062B 064A; # (ﰔ; ﰔ; ﰔ; ثي; ثي; ) ARABIC LIGATURE THEH WITH YEH ISOLATED FORM FC15;FC15;FC15;062C 062D;062C 062D; # (ﰕ; ﰕ; ﰕ; جح; جح; ) ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM FC16;FC16;FC16;062C 0645;062C 0645; # (ﰖ; ﰖ; ﰖ; جم; جم; ) ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM FC17;FC17;FC17;062D 062C;062D 062C; # (ﰗ; ﰗ; ﰗ; حج; حج; ) ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM FC18;FC18;FC18;062D 0645;062D 0645; # (ﰘ; ﰘ; ﰘ; حم; حم; ) ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM FC19;FC19;FC19;062E 062C;062E 062C; # (ﰙ; ﰙ; ﰙ; خج; خج; ) ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM FC1A;FC1A;FC1A;062E 062D;062E 062D; # (ﰚ; ﰚ; ﰚ; خح; خح; ) ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM FC1B;FC1B;FC1B;062E 0645;062E 0645; # (ﰛ; ﰛ; ﰛ; خم; خم; ) ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM FC1C;FC1C;FC1C;0633 062C;0633 062C; # (ﰜ; ﰜ; ﰜ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM FC1D;FC1D;FC1D;0633 062D;0633 062D; # (ﰝ; ﰝ; ﰝ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM FC1E;FC1E;FC1E;0633 062E;0633 062E; # (ﰞ; ﰞ; ﰞ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM FC1F;FC1F;FC1F;0633 0645;0633 0645; # (ﰟ; ﰟ; ﰟ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM FC20;FC20;FC20;0635 062D;0635 062D; # (ﰠ; ﰠ; ﰠ; صح; صح; ) ARABIC LIGATURE SAD WITH HAH ISOLATED FORM FC21;FC21;FC21;0635 0645;0635 0645; # (ﰡ; ﰡ; ﰡ; صم; صم; ) ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM FC22;FC22;FC22;0636 062C;0636 062C; # (ﰢ; ﰢ; ﰢ; ضج; ضج; ) ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM FC23;FC23;FC23;0636 062D;0636 062D; # (ﰣ; ﰣ; ﰣ; ضح; ضح; ) ARABIC LIGATURE DAD WITH HAH ISOLATED FORM FC24;FC24;FC24;0636 062E;0636 062E; # (ﰤ; ﰤ; ﰤ; ضخ; ضخ; ) ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM FC25;FC25;FC25;0636 0645;0636 0645; # (ﰥ; ﰥ; ﰥ; ضم; ضم; ) ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM FC26;FC26;FC26;0637 062D;0637 062D; # (ﰦ; ﰦ; ﰦ; طح; طح; ) ARABIC LIGATURE TAH WITH HAH ISOLATED FORM FC27;FC27;FC27;0637 0645;0637 0645; # (ﰧ; ﰧ; ﰧ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM FC28;FC28;FC28;0638 0645;0638 0645; # (ﰨ; ﰨ; ﰨ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM FC29;FC29;FC29;0639 062C;0639 062C; # (ﰩ; ﰩ; ﰩ; عج; عج; ) ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM FC2A;FC2A;FC2A;0639 0645;0639 0645; # (ﰪ; ﰪ; ﰪ; عم; عم; ) ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM FC2B;FC2B;FC2B;063A 062C;063A 062C; # (ﰫ; ﰫ; ﰫ; غج; غج; ) ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM FC2C;FC2C;FC2C;063A 0645;063A 0645; # (ﰬ; ﰬ; ﰬ; غم; غم; ) ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM FC2D;FC2D;FC2D;0641 062C;0641 062C; # (ﰭ; ﰭ; ﰭ; فج; فج; ) ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM FC2E;FC2E;FC2E;0641 062D;0641 062D; # (ﰮ; ﰮ; ﰮ; فح; فح; ) ARABIC LIGATURE FEH WITH HAH ISOLATED FORM FC2F;FC2F;FC2F;0641 062E;0641 062E; # (ﰯ; ﰯ; ﰯ; فخ; فخ; ) ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM FC30;FC30;FC30;0641 0645;0641 0645; # (ﰰ; ﰰ; ﰰ; فم; فم; ) ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM FC31;FC31;FC31;0641 0649;0641 0649; # (ﰱ; ﰱ; ﰱ; فى; فى; ) ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM FC32;FC32;FC32;0641 064A;0641 064A; # (ﰲ; ﰲ; ﰲ; في; في; ) ARABIC LIGATURE FEH WITH YEH ISOLATED FORM FC33;FC33;FC33;0642 062D;0642 062D; # (ﰳ; ﰳ; ﰳ; قح; قح; ) ARABIC LIGATURE QAF WITH HAH ISOLATED FORM FC34;FC34;FC34;0642 0645;0642 0645; # (ﰴ; ﰴ; ﰴ; قم; قم; ) ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM FC35;FC35;FC35;0642 0649;0642 0649; # (ﰵ; ﰵ; ﰵ; قى; قى; ) ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM FC36;FC36;FC36;0642 064A;0642 064A; # (ﰶ; ﰶ; ﰶ; قي; قي; ) ARABIC LIGATURE QAF WITH YEH ISOLATED FORM FC37;FC37;FC37;0643 0627;0643 0627; # (ﰷ; ﰷ; ﰷ; كا; كا; ) ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM FC38;FC38;FC38;0643 062C;0643 062C; # (ﰸ; ﰸ; ﰸ; كج; كج; ) ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM FC39;FC39;FC39;0643 062D;0643 062D; # (ﰹ; ﰹ; ﰹ; كح; كح; ) ARABIC LIGATURE KAF WITH HAH ISOLATED FORM FC3A;FC3A;FC3A;0643 062E;0643 062E; # (ﰺ; ﰺ; ﰺ; كخ; كخ; ) ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM FC3B;FC3B;FC3B;0643 0644;0643 0644; # (ﰻ; ﰻ; ﰻ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM ISOLATED FORM FC3C;FC3C;FC3C;0643 0645;0643 0645; # (ﰼ; ﰼ; ﰼ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM FC3D;FC3D;FC3D;0643 0649;0643 0649; # (ﰽ; ﰽ; ﰽ; كى; كى; ) ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM FC3E;FC3E;FC3E;0643 064A;0643 064A; # (ﰾ; ﰾ; ﰾ; كي; كي; ) ARABIC LIGATURE KAF WITH YEH ISOLATED FORM FC3F;FC3F;FC3F;0644 062C;0644 062C; # (ﰿ; ﰿ; ﰿ; لج; لج; ) ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM FC40;FC40;FC40;0644 062D;0644 062D; # (ﱀ; ﱀ; ﱀ; لح; لح; ) ARABIC LIGATURE LAM WITH HAH ISOLATED FORM FC41;FC41;FC41;0644 062E;0644 062E; # (ﱁ; ﱁ; ﱁ; لخ; لخ; ) ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM FC42;FC42;FC42;0644 0645;0644 0645; # (ﱂ; ﱂ; ﱂ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM FC43;FC43;FC43;0644 0649;0644 0649; # (ﱃ; ﱃ; ﱃ; لى; لى; ) ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM FC44;FC44;FC44;0644 064A;0644 064A; # (ﱄ; ﱄ; ﱄ; لي; لي; ) ARABIC LIGATURE LAM WITH YEH ISOLATED FORM FC45;FC45;FC45;0645 062C;0645 062C; # (ﱅ; ﱅ; ﱅ; مج; مج; ) ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM FC46;FC46;FC46;0645 062D;0645 062D; # (ﱆ; ﱆ; ﱆ; مح; مح; ) ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM FC47;FC47;FC47;0645 062E;0645 062E; # (ﱇ; ﱇ; ﱇ; مخ; مخ; ) ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM FC48;FC48;FC48;0645 0645;0645 0645; # (ﱈ; ﱈ; ﱈ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM FC49;FC49;FC49;0645 0649;0645 0649; # (ﱉ; ﱉ; ﱉ; مى; مى; ) ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM FC4A;FC4A;FC4A;0645 064A;0645 064A; # (ﱊ; ﱊ; ﱊ; مي; مي; ) ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM FC4B;FC4B;FC4B;0646 062C;0646 062C; # (ﱋ; ﱋ; ﱋ; نج; نج; ) ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM FC4C;FC4C;FC4C;0646 062D;0646 062D; # (ﱌ; ﱌ; ﱌ; نح; نح; ) ARABIC LIGATURE NOON WITH HAH ISOLATED FORM FC4D;FC4D;FC4D;0646 062E;0646 062E; # (ﱍ; ﱍ; ﱍ; نخ; نخ; ) ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM FC4E;FC4E;FC4E;0646 0645;0646 0645; # (ﱎ; ﱎ; ﱎ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM FC4F;FC4F;FC4F;0646 0649;0646 0649; # (ﱏ; ﱏ; ﱏ; نى; نى; ) ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM FC50;FC50;FC50;0646 064A;0646 064A; # (ﱐ; ﱐ; ﱐ; ني; ني; ) ARABIC LIGATURE NOON WITH YEH ISOLATED FORM FC51;FC51;FC51;0647 062C;0647 062C; # (ﱑ; ﱑ; ﱑ; هج; هج; ) ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM FC52;FC52;FC52;0647 0645;0647 0645; # (ﱒ; ﱒ; ﱒ; هم; هم; ) ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM FC53;FC53;FC53;0647 0649;0647 0649; # (ﱓ; ﱓ; ﱓ; هى; هى; ) ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM FC54;FC54;FC54;0647 064A;0647 064A; # (ﱔ; ﱔ; ﱔ; هي; هي; ) ARABIC LIGATURE HEH WITH YEH ISOLATED FORM FC55;FC55;FC55;064A 062C;064A 062C; # (ﱕ; ﱕ; ﱕ; يج; يج; ) ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM FC56;FC56;FC56;064A 062D;064A 062D; # (ﱖ; ﱖ; ﱖ; يح; يح; ) ARABIC LIGATURE YEH WITH HAH ISOLATED FORM FC57;FC57;FC57;064A 062E;064A 062E; # (ﱗ; ﱗ; ﱗ; يخ; يخ; ) ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM FC58;FC58;FC58;064A 0645;064A 0645; # (ﱘ; ﱘ; ﱘ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM FC59;FC59;FC59;064A 0649;064A 0649; # (ﱙ; ﱙ; ﱙ; يى; يى; ) ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM FC5A;FC5A;FC5A;064A 064A;064A 064A; # (ﱚ; ﱚ; ﱚ; يي; يي; ) ARABIC LIGATURE YEH WITH YEH ISOLATED FORM FC5B;FC5B;FC5B;0630 0670;0630 0670; # (ﱛ; ﱛ; ﱛ; ذ◌ٰ; ذ◌ٰ; ) ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM FC5C;FC5C;FC5C;0631 0670;0631 0670; # (ﱜ; ﱜ; ﱜ; ر◌ٰ; ر◌ٰ; ) ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM FC5D;FC5D;FC5D;0649 0670;0649 0670; # (ﱝ; ﱝ; ﱝ; ى◌ٰ; ى◌ٰ; ) ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM FC5E;FC5E;FC5E;0020 064C 0651;0020 064C 0651; # (ﱞ; ﱞ; ﱞ; ◌ٌ◌ّ; ◌ٌ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM FC5F;FC5F;FC5F;0020 064D 0651;0020 064D 0651; # (ﱟ; ﱟ; ﱟ; ◌ٍ◌ّ; ◌ٍ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM FC60;FC60;FC60;0020 064E 0651;0020 064E 0651; # (ﱠ; ﱠ; ﱠ; ◌َ◌ّ; ◌َ◌ّ; ) ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM FC61;FC61;FC61;0020 064F 0651;0020 064F 0651; # (ﱡ; ﱡ; ﱡ; ◌ُ◌ّ; ◌ُ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM FC62;FC62;FC62;0020 0650 0651;0020 0650 0651; # (ﱢ; ﱢ; ﱢ; ◌ِ◌ّ; ◌ِ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM FC63;FC63;FC63;0020 0651 0670;0020 0651 0670; # (ﱣ; ﱣ; ﱣ; ◌ّ◌ٰ; ◌ّ◌ٰ; ) ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM FC64;FC64;FC64;0626 0631;064A 0654 0631; # (ﱤ; ﱤ; ﱤ; ئر; ي◌ٔر; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM FC65;FC65;FC65;0626 0632;064A 0654 0632; # (ﱥ; ﱥ; ﱥ; ئز; ي◌ٔز; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM FC66;FC66;FC66;0626 0645;064A 0654 0645; # (ﱦ; ﱦ; ﱦ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM FC67;FC67;FC67;0626 0646;064A 0654 0646; # (ﱧ; ﱧ; ﱧ; ئن; ي◌ٔن; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM FC68;FC68;FC68;0626 0649;064A 0654 0649; # (ﱨ; ﱨ; ﱨ; ئى; ي◌ٔى; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM FC69;FC69;FC69;0626 064A;064A 0654 064A; # (ﱩ; ﱩ; ﱩ; ئي; ي◌ٔي; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM FC6A;FC6A;FC6A;0628 0631;0628 0631; # (ﱪ; ﱪ; ﱪ; بر; بر; ) ARABIC LIGATURE BEH WITH REH FINAL FORM FC6B;FC6B;FC6B;0628 0632;0628 0632; # (ﱫ; ﱫ; ﱫ; بز; بز; ) ARABIC LIGATURE BEH WITH ZAIN FINAL FORM FC6C;FC6C;FC6C;0628 0645;0628 0645; # (ﱬ; ﱬ; ﱬ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM FINAL FORM FC6D;FC6D;FC6D;0628 0646;0628 0646; # (ﱭ; ﱭ; ﱭ; بن; بن; ) ARABIC LIGATURE BEH WITH NOON FINAL FORM FC6E;FC6E;FC6E;0628 0649;0628 0649; # (ﱮ; ﱮ; ﱮ; بى; بى; ) ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM FC6F;FC6F;FC6F;0628 064A;0628 064A; # (ﱯ; ﱯ; ﱯ; بي; بي; ) ARABIC LIGATURE BEH WITH YEH FINAL FORM FC70;FC70;FC70;062A 0631;062A 0631; # (ﱰ; ﱰ; ﱰ; تر; تر; ) ARABIC LIGATURE TEH WITH REH FINAL FORM FC71;FC71;FC71;062A 0632;062A 0632; # (ﱱ; ﱱ; ﱱ; تز; تز; ) ARABIC LIGATURE TEH WITH ZAIN FINAL FORM FC72;FC72;FC72;062A 0645;062A 0645; # (ﱲ; ﱲ; ﱲ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM FINAL FORM FC73;FC73;FC73;062A 0646;062A 0646; # (ﱳ; ﱳ; ﱳ; تن; تن; ) ARABIC LIGATURE TEH WITH NOON FINAL FORM FC74;FC74;FC74;062A 0649;062A 0649; # (ﱴ; ﱴ; ﱴ; تى; تى; ) ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM FC75;FC75;FC75;062A 064A;062A 064A; # (ﱵ; ﱵ; ﱵ; تي; تي; ) ARABIC LIGATURE TEH WITH YEH FINAL FORM FC76;FC76;FC76;062B 0631;062B 0631; # (ﱶ; ﱶ; ﱶ; ثر; ثر; ) ARABIC LIGATURE THEH WITH REH FINAL FORM FC77;FC77;FC77;062B 0632;062B 0632; # (ﱷ; ﱷ; ﱷ; ثز; ثز; ) ARABIC LIGATURE THEH WITH ZAIN FINAL FORM FC78;FC78;FC78;062B 0645;062B 0645; # (ﱸ; ﱸ; ﱸ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM FINAL FORM FC79;FC79;FC79;062B 0646;062B 0646; # (ﱹ; ﱹ; ﱹ; ثن; ثن; ) ARABIC LIGATURE THEH WITH NOON FINAL FORM FC7A;FC7A;FC7A;062B 0649;062B 0649; # (ﱺ; ﱺ; ﱺ; ثى; ثى; ) ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM FC7B;FC7B;FC7B;062B 064A;062B 064A; # (ﱻ; ﱻ; ﱻ; ثي; ثي; ) ARABIC LIGATURE THEH WITH YEH FINAL FORM FC7C;FC7C;FC7C;0641 0649;0641 0649; # (ﱼ; ﱼ; ﱼ; فى; فى; ) ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM FC7D;FC7D;FC7D;0641 064A;0641 064A; # (ﱽ; ﱽ; ﱽ; في; في; ) ARABIC LIGATURE FEH WITH YEH FINAL FORM FC7E;FC7E;FC7E;0642 0649;0642 0649; # (ﱾ; ﱾ; ﱾ; قى; قى; ) ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM FC7F;FC7F;FC7F;0642 064A;0642 064A; # (ﱿ; ﱿ; ﱿ; قي; قي; ) ARABIC LIGATURE QAF WITH YEH FINAL FORM FC80;FC80;FC80;0643 0627;0643 0627; # (ﲀ; ﲀ; ﲀ; كا; كا; ) ARABIC LIGATURE KAF WITH ALEF FINAL FORM FC81;FC81;FC81;0643 0644;0643 0644; # (ﲁ; ﲁ; ﲁ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM FINAL FORM FC82;FC82;FC82;0643 0645;0643 0645; # (ﲂ; ﲂ; ﲂ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM FINAL FORM FC83;FC83;FC83;0643 0649;0643 0649; # (ﲃ; ﲃ; ﲃ; كى; كى; ) ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM FC84;FC84;FC84;0643 064A;0643 064A; # (ﲄ; ﲄ; ﲄ; كي; كي; ) ARABIC LIGATURE KAF WITH YEH FINAL FORM FC85;FC85;FC85;0644 0645;0644 0645; # (ﲅ; ﲅ; ﲅ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM FINAL FORM FC86;FC86;FC86;0644 0649;0644 0649; # (ﲆ; ﲆ; ﲆ; لى; لى; ) ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM FC87;FC87;FC87;0644 064A;0644 064A; # (ﲇ; ﲇ; ﲇ; لي; لي; ) ARABIC LIGATURE LAM WITH YEH FINAL FORM FC88;FC88;FC88;0645 0627;0645 0627; # (ﲈ; ﲈ; ﲈ; ما; ما; ) ARABIC LIGATURE MEEM WITH ALEF FINAL FORM FC89;FC89;FC89;0645 0645;0645 0645; # (ﲉ; ﲉ; ﲉ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM FINAL FORM FC8A;FC8A;FC8A;0646 0631;0646 0631; # (ﲊ; ﲊ; ﲊ; نر; نر; ) ARABIC LIGATURE NOON WITH REH FINAL FORM FC8B;FC8B;FC8B;0646 0632;0646 0632; # (ﲋ; ﲋ; ﲋ; نز; نز; ) ARABIC LIGATURE NOON WITH ZAIN FINAL FORM FC8C;FC8C;FC8C;0646 0645;0646 0645; # (ﲌ; ﲌ; ﲌ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM FINAL FORM FC8D;FC8D;FC8D;0646 0646;0646 0646; # (ﲍ; ﲍ; ﲍ; نن; نن; ) ARABIC LIGATURE NOON WITH NOON FINAL FORM FC8E;FC8E;FC8E;0646 0649;0646 0649; # (ﲎ; ﲎ; ﲎ; نى; نى; ) ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM FC8F;FC8F;FC8F;0646 064A;0646 064A; # (ﲏ; ﲏ; ﲏ; ني; ني; ) ARABIC LIGATURE NOON WITH YEH FINAL FORM FC90;FC90;FC90;0649 0670;0649 0670; # (ﲐ; ﲐ; ﲐ; ى◌ٰ; ى◌ٰ; ) ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM FC91;FC91;FC91;064A 0631;064A 0631; # (ﲑ; ﲑ; ﲑ; ير; ير; ) ARABIC LIGATURE YEH WITH REH FINAL FORM FC92;FC92;FC92;064A 0632;064A 0632; # (ﲒ; ﲒ; ﲒ; يز; يز; ) ARABIC LIGATURE YEH WITH ZAIN FINAL FORM FC93;FC93;FC93;064A 0645;064A 0645; # (ﲓ; ﲓ; ﲓ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM FINAL FORM FC94;FC94;FC94;064A 0646;064A 0646; # (ﲔ; ﲔ; ﲔ; ين; ين; ) ARABIC LIGATURE YEH WITH NOON FINAL FORM FC95;FC95;FC95;064A 0649;064A 0649; # (ﲕ; ﲕ; ﲕ; يى; يى; ) ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM FC96;FC96;FC96;064A 064A;064A 064A; # (ﲖ; ﲖ; ﲖ; يي; يي; ) ARABIC LIGATURE YEH WITH YEH FINAL FORM FC97;FC97;FC97;0626 062C;064A 0654 062C; # (ﲗ; ﲗ; ﲗ; ئج; ي◌ٔج; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM FC98;FC98;FC98;0626 062D;064A 0654 062D; # (ﲘ; ﲘ; ﲘ; ئح; ي◌ٔح; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM FC99;FC99;FC99;0626 062E;064A 0654 062E; # (ﲙ; ﲙ; ﲙ; ئخ; ي◌ٔخ; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM FC9A;FC9A;FC9A;0626 0645;064A 0654 0645; # (ﲚ; ﲚ; ﲚ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM FC9B;FC9B;FC9B;0626 0647;064A 0654 0647; # (ﲛ; ﲛ; ﲛ; ئه; ي◌ٔه; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM FC9C;FC9C;FC9C;0628 062C;0628 062C; # (ﲜ; ﲜ; ﲜ; بج; بج; ) ARABIC LIGATURE BEH WITH JEEM INITIAL FORM FC9D;FC9D;FC9D;0628 062D;0628 062D; # (ﲝ; ﲝ; ﲝ; بح; بح; ) ARABIC LIGATURE BEH WITH HAH INITIAL FORM FC9E;FC9E;FC9E;0628 062E;0628 062E; # (ﲞ; ﲞ; ﲞ; بخ; بخ; ) ARABIC LIGATURE BEH WITH KHAH INITIAL FORM FC9F;FC9F;FC9F;0628 0645;0628 0645; # (ﲟ; ﲟ; ﲟ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM INITIAL FORM FCA0;FCA0;FCA0;0628 0647;0628 0647; # (ﲠ; ﲠ; ﲠ; به; به; ) ARABIC LIGATURE BEH WITH HEH INITIAL FORM FCA1;FCA1;FCA1;062A 062C;062A 062C; # (ﲡ; ﲡ; ﲡ; تج; تج; ) ARABIC LIGATURE TEH WITH JEEM INITIAL FORM FCA2;FCA2;FCA2;062A 062D;062A 062D; # (ﲢ; ﲢ; ﲢ; تح; تح; ) ARABIC LIGATURE TEH WITH HAH INITIAL FORM FCA3;FCA3;FCA3;062A 062E;062A 062E; # (ﲣ; ﲣ; ﲣ; تخ; تخ; ) ARABIC LIGATURE TEH WITH KHAH INITIAL FORM FCA4;FCA4;FCA4;062A 0645;062A 0645; # (ﲤ; ﲤ; ﲤ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM INITIAL FORM FCA5;FCA5;FCA5;062A 0647;062A 0647; # (ﲥ; ﲥ; ﲥ; ته; ته; ) ARABIC LIGATURE TEH WITH HEH INITIAL FORM FCA6;FCA6;FCA6;062B 0645;062B 0645; # (ﲦ; ﲦ; ﲦ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM INITIAL FORM FCA7;FCA7;FCA7;062C 062D;062C 062D; # (ﲧ; ﲧ; ﲧ; جح; جح; ) ARABIC LIGATURE JEEM WITH HAH INITIAL FORM FCA8;FCA8;FCA8;062C 0645;062C 0645; # (ﲨ; ﲨ; ﲨ; جم; جم; ) ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM FCA9;FCA9;FCA9;062D 062C;062D 062C; # (ﲩ; ﲩ; ﲩ; حج; حج; ) ARABIC LIGATURE HAH WITH JEEM INITIAL FORM FCAA;FCAA;FCAA;062D 0645;062D 0645; # (ﲪ; ﲪ; ﲪ; حم; حم; ) ARABIC LIGATURE HAH WITH MEEM INITIAL FORM FCAB;FCAB;FCAB;062E 062C;062E 062C; # (ﲫ; ﲫ; ﲫ; خج; خج; ) ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM FCAC;FCAC;FCAC;062E 0645;062E 0645; # (ﲬ; ﲬ; ﲬ; خم; خم; ) ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM FCAD;FCAD;FCAD;0633 062C;0633 062C; # (ﲭ; ﲭ; ﲭ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM FCAE;FCAE;FCAE;0633 062D;0633 062D; # (ﲮ; ﲮ; ﲮ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH INITIAL FORM FCAF;FCAF;FCAF;0633 062E;0633 062E; # (ﲯ; ﲯ; ﲯ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM FCB0;FCB0;FCB0;0633 0645;0633 0645; # (ﲰ; ﲰ; ﲰ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM FCB1;FCB1;FCB1;0635 062D;0635 062D; # (ﲱ; ﲱ; ﲱ; صح; صح; ) ARABIC LIGATURE SAD WITH HAH INITIAL FORM FCB2;FCB2;FCB2;0635 062E;0635 062E; # (ﲲ; ﲲ; ﲲ; صخ; صخ; ) ARABIC LIGATURE SAD WITH KHAH INITIAL FORM FCB3;FCB3;FCB3;0635 0645;0635 0645; # (ﲳ; ﲳ; ﲳ; صم; صم; ) ARABIC LIGATURE SAD WITH MEEM INITIAL FORM FCB4;FCB4;FCB4;0636 062C;0636 062C; # (ﲴ; ﲴ; ﲴ; ضج; ضج; ) ARABIC LIGATURE DAD WITH JEEM INITIAL FORM FCB5;FCB5;FCB5;0636 062D;0636 062D; # (ﲵ; ﲵ; ﲵ; ضح; ضح; ) ARABIC LIGATURE DAD WITH HAH INITIAL FORM FCB6;FCB6;FCB6;0636 062E;0636 062E; # (ﲶ; ﲶ; ﲶ; ضخ; ضخ; ) ARABIC LIGATURE DAD WITH KHAH INITIAL FORM FCB7;FCB7;FCB7;0636 0645;0636 0645; # (ﲷ; ﲷ; ﲷ; ضم; ضم; ) ARABIC LIGATURE DAD WITH MEEM INITIAL FORM FCB8;FCB8;FCB8;0637 062D;0637 062D; # (ﲸ; ﲸ; ﲸ; طح; طح; ) ARABIC LIGATURE TAH WITH HAH INITIAL FORM FCB9;FCB9;FCB9;0638 0645;0638 0645; # (ﲹ; ﲹ; ﲹ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM FCBA;FCBA;FCBA;0639 062C;0639 062C; # (ﲺ; ﲺ; ﲺ; عج; عج; ) ARABIC LIGATURE AIN WITH JEEM INITIAL FORM FCBB;FCBB;FCBB;0639 0645;0639 0645; # (ﲻ; ﲻ; ﲻ; عم; عم; ) ARABIC LIGATURE AIN WITH MEEM INITIAL FORM FCBC;FCBC;FCBC;063A 062C;063A 062C; # (ﲼ; ﲼ; ﲼ; غج; غج; ) ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM FCBD;FCBD;FCBD;063A 0645;063A 0645; # (ﲽ; ﲽ; ﲽ; غم; غم; ) ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM FCBE;FCBE;FCBE;0641 062C;0641 062C; # (ﲾ; ﲾ; ﲾ; فج; فج; ) ARABIC LIGATURE FEH WITH JEEM INITIAL FORM FCBF;FCBF;FCBF;0641 062D;0641 062D; # (ﲿ; ﲿ; ﲿ; فح; فح; ) ARABIC LIGATURE FEH WITH HAH INITIAL FORM FCC0;FCC0;FCC0;0641 062E;0641 062E; # (ﳀ; ﳀ; ﳀ; فخ; فخ; ) ARABIC LIGATURE FEH WITH KHAH INITIAL FORM FCC1;FCC1;FCC1;0641 0645;0641 0645; # (ﳁ; ﳁ; ﳁ; فم; فم; ) ARABIC LIGATURE FEH WITH MEEM INITIAL FORM FCC2;FCC2;FCC2;0642 062D;0642 062D; # (ﳂ; ﳂ; ﳂ; قح; قح; ) ARABIC LIGATURE QAF WITH HAH INITIAL FORM FCC3;FCC3;FCC3;0642 0645;0642 0645; # (ﳃ; ﳃ; ﳃ; قم; قم; ) ARABIC LIGATURE QAF WITH MEEM INITIAL FORM FCC4;FCC4;FCC4;0643 062C;0643 062C; # (ﳄ; ﳄ; ﳄ; كج; كج; ) ARABIC LIGATURE KAF WITH JEEM INITIAL FORM FCC5;FCC5;FCC5;0643 062D;0643 062D; # (ﳅ; ﳅ; ﳅ; كح; كح; ) ARABIC LIGATURE KAF WITH HAH INITIAL FORM FCC6;FCC6;FCC6;0643 062E;0643 062E; # (ﳆ; ﳆ; ﳆ; كخ; كخ; ) ARABIC LIGATURE KAF WITH KHAH INITIAL FORM FCC7;FCC7;FCC7;0643 0644;0643 0644; # (ﳇ; ﳇ; ﳇ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM INITIAL FORM FCC8;FCC8;FCC8;0643 0645;0643 0645; # (ﳈ; ﳈ; ﳈ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM INITIAL FORM FCC9;FCC9;FCC9;0644 062C;0644 062C; # (ﳉ; ﳉ; ﳉ; لج; لج; ) ARABIC LIGATURE LAM WITH JEEM INITIAL FORM FCCA;FCCA;FCCA;0644 062D;0644 062D; # (ﳊ; ﳊ; ﳊ; لح; لح; ) ARABIC LIGATURE LAM WITH HAH INITIAL FORM FCCB;FCCB;FCCB;0644 062E;0644 062E; # (ﳋ; ﳋ; ﳋ; لخ; لخ; ) ARABIC LIGATURE LAM WITH KHAH INITIAL FORM FCCC;FCCC;FCCC;0644 0645;0644 0645; # (ﳌ; ﳌ; ﳌ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM INITIAL FORM FCCD;FCCD;FCCD;0644 0647;0644 0647; # (ﳍ; ﳍ; ﳍ; له; له; ) ARABIC LIGATURE LAM WITH HEH INITIAL FORM FCCE;FCCE;FCCE;0645 062C;0645 062C; # (ﳎ; ﳎ; ﳎ; مج; مج; ) ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM FCCF;FCCF;FCCF;0645 062D;0645 062D; # (ﳏ; ﳏ; ﳏ; مح; مح; ) ARABIC LIGATURE MEEM WITH HAH INITIAL FORM FCD0;FCD0;FCD0;0645 062E;0645 062E; # (ﳐ; ﳐ; ﳐ; مخ; مخ; ) ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM FCD1;FCD1;FCD1;0645 0645;0645 0645; # (ﳑ; ﳑ; ﳑ; مم; مم; ) ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM FCD2;FCD2;FCD2;0646 062C;0646 062C; # (ﳒ; ﳒ; ﳒ; نج; نج; ) ARABIC LIGATURE NOON WITH JEEM INITIAL FORM FCD3;FCD3;FCD3;0646 062D;0646 062D; # (ﳓ; ﳓ; ﳓ; نح; نح; ) ARABIC LIGATURE NOON WITH HAH INITIAL FORM FCD4;FCD4;FCD4;0646 062E;0646 062E; # (ﳔ; ﳔ; ﳔ; نخ; نخ; ) ARABIC LIGATURE NOON WITH KHAH INITIAL FORM FCD5;FCD5;FCD5;0646 0645;0646 0645; # (ﳕ; ﳕ; ﳕ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM INITIAL FORM FCD6;FCD6;FCD6;0646 0647;0646 0647; # (ﳖ; ﳖ; ﳖ; نه; نه; ) ARABIC LIGATURE NOON WITH HEH INITIAL FORM FCD7;FCD7;FCD7;0647 062C;0647 062C; # (ﳗ; ﳗ; ﳗ; هج; هج; ) ARABIC LIGATURE HEH WITH JEEM INITIAL FORM FCD8;FCD8;FCD8;0647 0645;0647 0645; # (ﳘ; ﳘ; ﳘ; هم; هم; ) ARABIC LIGATURE HEH WITH MEEM INITIAL FORM FCD9;FCD9;FCD9;0647 0670;0647 0670; # (ﳙ; ﳙ; ﳙ; ه◌ٰ; ه◌ٰ; ) ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM FCDA;FCDA;FCDA;064A 062C;064A 062C; # (ﳚ; ﳚ; ﳚ; يج; يج; ) ARABIC LIGATURE YEH WITH JEEM INITIAL FORM FCDB;FCDB;FCDB;064A 062D;064A 062D; # (ﳛ; ﳛ; ﳛ; يح; يح; ) ARABIC LIGATURE YEH WITH HAH INITIAL FORM FCDC;FCDC;FCDC;064A 062E;064A 062E; # (ﳜ; ﳜ; ﳜ; يخ; يخ; ) ARABIC LIGATURE YEH WITH KHAH INITIAL FORM FCDD;FCDD;FCDD;064A 0645;064A 0645; # (ﳝ; ﳝ; ﳝ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM INITIAL FORM FCDE;FCDE;FCDE;064A 0647;064A 0647; # (ﳞ; ﳞ; ﳞ; يه; يه; ) ARABIC LIGATURE YEH WITH HEH INITIAL FORM FCDF;FCDF;FCDF;0626 0645;064A 0654 0645; # (ﳟ; ﳟ; ﳟ; ئم; ي◌ٔم; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM FCE0;FCE0;FCE0;0626 0647;064A 0654 0647; # (ﳠ; ﳠ; ﳠ; ئه; ي◌ٔه; ) ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM FCE1;FCE1;FCE1;0628 0645;0628 0645; # (ﳡ; ﳡ; ﳡ; بم; بم; ) ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM FCE2;FCE2;FCE2;0628 0647;0628 0647; # (ﳢ; ﳢ; ﳢ; به; به; ) ARABIC LIGATURE BEH WITH HEH MEDIAL FORM FCE3;FCE3;FCE3;062A 0645;062A 0645; # (ﳣ; ﳣ; ﳣ; تم; تم; ) ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM FCE4;FCE4;FCE4;062A 0647;062A 0647; # (ﳤ; ﳤ; ﳤ; ته; ته; ) ARABIC LIGATURE TEH WITH HEH MEDIAL FORM FCE5;FCE5;FCE5;062B 0645;062B 0645; # (ﳥ; ﳥ; ﳥ; ثم; ثم; ) ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM FCE6;FCE6;FCE6;062B 0647;062B 0647; # (ﳦ; ﳦ; ﳦ; ثه; ثه; ) ARABIC LIGATURE THEH WITH HEH MEDIAL FORM FCE7;FCE7;FCE7;0633 0645;0633 0645; # (ﳧ; ﳧ; ﳧ; سم; سم; ) ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM FCE8;FCE8;FCE8;0633 0647;0633 0647; # (ﳨ; ﳨ; ﳨ; سه; سه; ) ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM FCE9;FCE9;FCE9;0634 0645;0634 0645; # (ﳩ; ﳩ; ﳩ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM FCEA;FCEA;FCEA;0634 0647;0634 0647; # (ﳪ; ﳪ; ﳪ; شه; شه; ) ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM FCEB;FCEB;FCEB;0643 0644;0643 0644; # (ﳫ; ﳫ; ﳫ; كل; كل; ) ARABIC LIGATURE KAF WITH LAM MEDIAL FORM FCEC;FCEC;FCEC;0643 0645;0643 0645; # (ﳬ; ﳬ; ﳬ; كم; كم; ) ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM FCED;FCED;FCED;0644 0645;0644 0645; # (ﳭ; ﳭ; ﳭ; لم; لم; ) ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM FCEE;FCEE;FCEE;0646 0645;0646 0645; # (ﳮ; ﳮ; ﳮ; نم; نم; ) ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM FCEF;FCEF;FCEF;0646 0647;0646 0647; # (ﳯ; ﳯ; ﳯ; نه; نه; ) ARABIC LIGATURE NOON WITH HEH MEDIAL FORM FCF0;FCF0;FCF0;064A 0645;064A 0645; # (ﳰ; ﳰ; ﳰ; يم; يم; ) ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM FCF1;FCF1;FCF1;064A 0647;064A 0647; # (ﳱ; ﳱ; ﳱ; يه; يه; ) ARABIC LIGATURE YEH WITH HEH MEDIAL FORM FCF2;FCF2;FCF2;0640 064E 0651;0640 064E 0651; # (ﳲ; ﳲ; ﳲ; ـ◌َ◌ّ; ـ◌َ◌ّ; ) ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM FCF3;FCF3;FCF3;0640 064F 0651;0640 064F 0651; # (ﳳ; ﳳ; ﳳ; ـ◌ُ◌ّ; ـ◌ُ◌ّ; ) ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM FCF4;FCF4;FCF4;0640 0650 0651;0640 0650 0651; # (ﳴ; ﳴ; ﳴ; ـ◌ِ◌ّ; ـ◌ِ◌ّ; ) ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM FCF5;FCF5;FCF5;0637 0649;0637 0649; # (ﳵ; ﳵ; ﳵ; طى; طى; ) ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM FCF6;FCF6;FCF6;0637 064A;0637 064A; # (ﳶ; ﳶ; ﳶ; طي; طي; ) ARABIC LIGATURE TAH WITH YEH ISOLATED FORM FCF7;FCF7;FCF7;0639 0649;0639 0649; # (ﳷ; ﳷ; ﳷ; عى; عى; ) ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM FCF8;FCF8;FCF8;0639 064A;0639 064A; # (ﳸ; ﳸ; ﳸ; عي; عي; ) ARABIC LIGATURE AIN WITH YEH ISOLATED FORM FCF9;FCF9;FCF9;063A 0649;063A 0649; # (ﳹ; ﳹ; ﳹ; غى; غى; ) ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM FCFA;FCFA;FCFA;063A 064A;063A 064A; # (ﳺ; ﳺ; ﳺ; غي; غي; ) ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM FCFB;FCFB;FCFB;0633 0649;0633 0649; # (ﳻ; ﳻ; ﳻ; سى; سى; ) ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM FCFC;FCFC;FCFC;0633 064A;0633 064A; # (ﳼ; ﳼ; ﳼ; سي; سي; ) ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM FCFD;FCFD;FCFD;0634 0649;0634 0649; # (ﳽ; ﳽ; ﳽ; شى; شى; ) ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM FCFE;FCFE;FCFE;0634 064A;0634 064A; # (ﳾ; ﳾ; ﳾ; شي; شي; ) ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM FCFF;FCFF;FCFF;062D 0649;062D 0649; # (ﳿ; ﳿ; ﳿ; حى; حى; ) ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM FD00;FD00;FD00;062D 064A;062D 064A; # (ﴀ; ﴀ; ﴀ; حي; حي; ) ARABIC LIGATURE HAH WITH YEH ISOLATED FORM FD01;FD01;FD01;062C 0649;062C 0649; # (ﴁ; ﴁ; ﴁ; جى; جى; ) ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM FD02;FD02;FD02;062C 064A;062C 064A; # (ﴂ; ﴂ; ﴂ; جي; جي; ) ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM FD03;FD03;FD03;062E 0649;062E 0649; # (ﴃ; ﴃ; ﴃ; خى; خى; ) ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM FD04;FD04;FD04;062E 064A;062E 064A; # (ﴄ; ﴄ; ﴄ; خي; خي; ) ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM FD05;FD05;FD05;0635 0649;0635 0649; # (ﴅ; ﴅ; ﴅ; صى; صى; ) ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM FD06;FD06;FD06;0635 064A;0635 064A; # (ﴆ; ﴆ; ﴆ; صي; صي; ) ARABIC LIGATURE SAD WITH YEH ISOLATED FORM FD07;FD07;FD07;0636 0649;0636 0649; # (ﴇ; ﴇ; ﴇ; ضى; ضى; ) ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM FD08;FD08;FD08;0636 064A;0636 064A; # (ﴈ; ﴈ; ﴈ; ضي; ضي; ) ARABIC LIGATURE DAD WITH YEH ISOLATED FORM FD09;FD09;FD09;0634 062C;0634 062C; # (ﴉ; ﴉ; ﴉ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM FD0A;FD0A;FD0A;0634 062D;0634 062D; # (ﴊ; ﴊ; ﴊ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM FD0B;FD0B;FD0B;0634 062E;0634 062E; # (ﴋ; ﴋ; ﴋ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM FD0C;FD0C;FD0C;0634 0645;0634 0645; # (ﴌ; ﴌ; ﴌ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM FD0D;FD0D;FD0D;0634 0631;0634 0631; # (ﴍ; ﴍ; ﴍ; شر; شر; ) ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM FD0E;FD0E;FD0E;0633 0631;0633 0631; # (ﴎ; ﴎ; ﴎ; سر; سر; ) ARABIC LIGATURE SEEN WITH REH ISOLATED FORM FD0F;FD0F;FD0F;0635 0631;0635 0631; # (ﴏ; ﴏ; ﴏ; صر; صر; ) ARABIC LIGATURE SAD WITH REH ISOLATED FORM FD10;FD10;FD10;0636 0631;0636 0631; # (ﴐ; ﴐ; ﴐ; ضر; ضر; ) ARABIC LIGATURE DAD WITH REH ISOLATED FORM FD11;FD11;FD11;0637 0649;0637 0649; # (ﴑ; ﴑ; ﴑ; طى; طى; ) ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM FD12;FD12;FD12;0637 064A;0637 064A; # (ﴒ; ﴒ; ﴒ; طي; طي; ) ARABIC LIGATURE TAH WITH YEH FINAL FORM FD13;FD13;FD13;0639 0649;0639 0649; # (ﴓ; ﴓ; ﴓ; عى; عى; ) ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM FD14;FD14;FD14;0639 064A;0639 064A; # (ﴔ; ﴔ; ﴔ; عي; عي; ) ARABIC LIGATURE AIN WITH YEH FINAL FORM FD15;FD15;FD15;063A 0649;063A 0649; # (ﴕ; ﴕ; ﴕ; غى; غى; ) ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM FD16;FD16;FD16;063A 064A;063A 064A; # (ﴖ; ﴖ; ﴖ; غي; غي; ) ARABIC LIGATURE GHAIN WITH YEH FINAL FORM FD17;FD17;FD17;0633 0649;0633 0649; # (ﴗ; ﴗ; ﴗ; سى; سى; ) ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM FD18;FD18;FD18;0633 064A;0633 064A; # (ﴘ; ﴘ; ﴘ; سي; سي; ) ARABIC LIGATURE SEEN WITH YEH FINAL FORM FD19;FD19;FD19;0634 0649;0634 0649; # (ﴙ; ﴙ; ﴙ; شى; شى; ) ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM FD1A;FD1A;FD1A;0634 064A;0634 064A; # (ﴚ; ﴚ; ﴚ; شي; شي; ) ARABIC LIGATURE SHEEN WITH YEH FINAL FORM FD1B;FD1B;FD1B;062D 0649;062D 0649; # (ﴛ; ﴛ; ﴛ; حى; حى; ) ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM FD1C;FD1C;FD1C;062D 064A;062D 064A; # (ﴜ; ﴜ; ﴜ; حي; حي; ) ARABIC LIGATURE HAH WITH YEH FINAL FORM FD1D;FD1D;FD1D;062C 0649;062C 0649; # (ﴝ; ﴝ; ﴝ; جى; جى; ) ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM FD1E;FD1E;FD1E;062C 064A;062C 064A; # (ﴞ; ﴞ; ﴞ; جي; جي; ) ARABIC LIGATURE JEEM WITH YEH FINAL FORM FD1F;FD1F;FD1F;062E 0649;062E 0649; # (ﴟ; ﴟ; ﴟ; خى; خى; ) ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM FD20;FD20;FD20;062E 064A;062E 064A; # (ﴠ; ﴠ; ﴠ; خي; خي; ) ARABIC LIGATURE KHAH WITH YEH FINAL FORM FD21;FD21;FD21;0635 0649;0635 0649; # (ﴡ; ﴡ; ﴡ; صى; صى; ) ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM FD22;FD22;FD22;0635 064A;0635 064A; # (ﴢ; ﴢ; ﴢ; صي; صي; ) ARABIC LIGATURE SAD WITH YEH FINAL FORM FD23;FD23;FD23;0636 0649;0636 0649; # (ﴣ; ﴣ; ﴣ; ضى; ضى; ) ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM FD24;FD24;FD24;0636 064A;0636 064A; # (ﴤ; ﴤ; ﴤ; ضي; ضي; ) ARABIC LIGATURE DAD WITH YEH FINAL FORM FD25;FD25;FD25;0634 062C;0634 062C; # (ﴥ; ﴥ; ﴥ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM FD26;FD26;FD26;0634 062D;0634 062D; # (ﴦ; ﴦ; ﴦ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH FINAL FORM FD27;FD27;FD27;0634 062E;0634 062E; # (ﴧ; ﴧ; ﴧ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM FD28;FD28;FD28;0634 0645;0634 0645; # (ﴨ; ﴨ; ﴨ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM FD29;FD29;FD29;0634 0631;0634 0631; # (ﴩ; ﴩ; ﴩ; شر; شر; ) ARABIC LIGATURE SHEEN WITH REH FINAL FORM FD2A;FD2A;FD2A;0633 0631;0633 0631; # (ﴪ; ﴪ; ﴪ; سر; سر; ) ARABIC LIGATURE SEEN WITH REH FINAL FORM FD2B;FD2B;FD2B;0635 0631;0635 0631; # (ﴫ; ﴫ; ﴫ; صر; صر; ) ARABIC LIGATURE SAD WITH REH FINAL FORM FD2C;FD2C;FD2C;0636 0631;0636 0631; # (ﴬ; ﴬ; ﴬ; ضر; ضر; ) ARABIC LIGATURE DAD WITH REH FINAL FORM FD2D;FD2D;FD2D;0634 062C;0634 062C; # (ﴭ; ﴭ; ﴭ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM FD2E;FD2E;FD2E;0634 062D;0634 062D; # (ﴮ; ﴮ; ﴮ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM FD2F;FD2F;FD2F;0634 062E;0634 062E; # (ﴯ; ﴯ; ﴯ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM FD30;FD30;FD30;0634 0645;0634 0645; # (ﴰ; ﴰ; ﴰ; شم; شم; ) ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM FD31;FD31;FD31;0633 0647;0633 0647; # (ﴱ; ﴱ; ﴱ; سه; سه; ) ARABIC LIGATURE SEEN WITH HEH INITIAL FORM FD32;FD32;FD32;0634 0647;0634 0647; # (ﴲ; ﴲ; ﴲ; شه; شه; ) ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM FD33;FD33;FD33;0637 0645;0637 0645; # (ﴳ; ﴳ; ﴳ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM INITIAL FORM FD34;FD34;FD34;0633 062C;0633 062C; # (ﴴ; ﴴ; ﴴ; سج; سج; ) ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM FD35;FD35;FD35;0633 062D;0633 062D; # (ﴵ; ﴵ; ﴵ; سح; سح; ) ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM FD36;FD36;FD36;0633 062E;0633 062E; # (ﴶ; ﴶ; ﴶ; سخ; سخ; ) ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM FD37;FD37;FD37;0634 062C;0634 062C; # (ﴷ; ﴷ; ﴷ; شج; شج; ) ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM FD38;FD38;FD38;0634 062D;0634 062D; # (ﴸ; ﴸ; ﴸ; شح; شح; ) ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM FD39;FD39;FD39;0634 062E;0634 062E; # (ﴹ; ﴹ; ﴹ; شخ; شخ; ) ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM FD3A;FD3A;FD3A;0637 0645;0637 0645; # (ﴺ; ﴺ; ﴺ; طم; طم; ) ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM FD3B;FD3B;FD3B;0638 0645;0638 0645; # (ﴻ; ﴻ; ﴻ; ظم; ظم; ) ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM FD3C;FD3C;FD3C;0627 064B;0627 064B; # (ﴼ; ﴼ; ﴼ; ا◌ً; ا◌ً; ) ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM FD3D;FD3D;FD3D;0627 064B;0627 064B; # (ﴽ; ﴽ; ﴽ; ا◌ً; ا◌ً; ) ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD50;FD50;FD50;062A 062C 0645;062A 062C 0645; # (ﵐ; ﵐ; ﵐ; تجم; تجم; ) ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM FD51;FD51;FD51;062A 062D 062C;062A 062D 062C; # (ﵑ; ﵑ; ﵑ; تحج; تحج; ) ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM FD52;FD52;FD52;062A 062D 062C;062A 062D 062C; # (ﵒ; ﵒ; ﵒ; تحج; تحج; ) ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM FD53;FD53;FD53;062A 062D 0645;062A 062D 0645; # (ﵓ; ﵓ; ﵓ; تحم; تحم; ) ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM FD54;FD54;FD54;062A 062E 0645;062A 062E 0645; # (ﵔ; ﵔ; ﵔ; تخم; تخم; ) ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM FD55;FD55;FD55;062A 0645 062C;062A 0645 062C; # (ﵕ; ﵕ; ﵕ; تمج; تمج; ) ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM FD56;FD56;FD56;062A 0645 062D;062A 0645 062D; # (ﵖ; ﵖ; ﵖ; تمح; تمح; ) ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM FD57;FD57;FD57;062A 0645 062E;062A 0645 062E; # (ﵗ; ﵗ; ﵗ; تمخ; تمخ; ) ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM FD58;FD58;FD58;062C 0645 062D;062C 0645 062D; # (ﵘ; ﵘ; ﵘ; جمح; جمح; ) ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM FD59;FD59;FD59;062C 0645 062D;062C 0645 062D; # (ﵙ; ﵙ; ﵙ; جمح; جمح; ) ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM FD5A;FD5A;FD5A;062D 0645 064A;062D 0645 064A; # (ﵚ; ﵚ; ﵚ; حمي; حمي; ) ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM FD5B;FD5B;FD5B;062D 0645 0649;062D 0645 0649; # (ﵛ; ﵛ; ﵛ; حمى; حمى; ) ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM FD5C;FD5C;FD5C;0633 062D 062C;0633 062D 062C; # (ﵜ; ﵜ; ﵜ; سحج; سحج; ) ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM FD5D;FD5D;FD5D;0633 062C 062D;0633 062C 062D; # (ﵝ; ﵝ; ﵝ; سجح; سجح; ) ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM FD5E;FD5E;FD5E;0633 062C 0649;0633 062C 0649; # (ﵞ; ﵞ; ﵞ; سجى; سجى; ) ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM FD5F;FD5F;FD5F;0633 0645 062D;0633 0645 062D; # (ﵟ; ﵟ; ﵟ; سمح; سمح; ) ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM FD60;FD60;FD60;0633 0645 062D;0633 0645 062D; # (ﵠ; ﵠ; ﵠ; سمح; سمح; ) ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM FD61;FD61;FD61;0633 0645 062C;0633 0645 062C; # (ﵡ; ﵡ; ﵡ; سمج; سمج; ) ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM FD62;FD62;FD62;0633 0645 0645;0633 0645 0645; # (ﵢ; ﵢ; ﵢ; سمم; سمم; ) ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM FD63;FD63;FD63;0633 0645 0645;0633 0645 0645; # (ﵣ; ﵣ; ﵣ; سمم; سمم; ) ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM FD64;FD64;FD64;0635 062D 062D;0635 062D 062D; # (ﵤ; ﵤ; ﵤ; صحح; صحح; ) ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM FD65;FD65;FD65;0635 062D 062D;0635 062D 062D; # (ﵥ; ﵥ; ﵥ; صحح; صحح; ) ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM FD66;FD66;FD66;0635 0645 0645;0635 0645 0645; # (ﵦ; ﵦ; ﵦ; صمم; صمم; ) ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM FD67;FD67;FD67;0634 062D 0645;0634 062D 0645; # (ﵧ; ﵧ; ﵧ; شحم; شحم; ) ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM FD68;FD68;FD68;0634 062D 0645;0634 062D 0645; # (ﵨ; ﵨ; ﵨ; شحم; شحم; ) ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM FD69;FD69;FD69;0634 062C 064A;0634 062C 064A; # (ﵩ; ﵩ; ﵩ; شجي; شجي; ) ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM FD6A;FD6A;FD6A;0634 0645 062E;0634 0645 062E; # (ﵪ; ﵪ; ﵪ; شمخ; شمخ; ) ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM FD6B;FD6B;FD6B;0634 0645 062E;0634 0645 062E; # (ﵫ; ﵫ; ﵫ; شمخ; شمخ; ) ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM FD6C;FD6C;FD6C;0634 0645 0645;0634 0645 0645; # (ﵬ; ﵬ; ﵬ; شمم; شمم; ) ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM FD6D;FD6D;FD6D;0634 0645 0645;0634 0645 0645; # (ﵭ; ﵭ; ﵭ; شمم; شمم; ) ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM FD6E;FD6E;FD6E;0636 062D 0649;0636 062D 0649; # (ﵮ; ﵮ; ﵮ; ضحى; ضحى; ) ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM FD6F;FD6F;FD6F;0636 062E 0645;0636 062E 0645; # (ﵯ; ﵯ; ﵯ; ضخم; ضخم; ) ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM FD70;FD70;FD70;0636 062E 0645;0636 062E 0645; # (ﵰ; ﵰ; ﵰ; ضخم; ضخم; ) ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM FD71;FD71;FD71;0637 0645 062D;0637 0645 062D; # (ﵱ; ﵱ; ﵱ; طمح; طمح; ) ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM FD72;FD72;FD72;0637 0645 062D;0637 0645 062D; # (ﵲ; ﵲ; ﵲ; طمح; طمح; ) ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM FD73;FD73;FD73;0637 0645 0645;0637 0645 0645; # (ﵳ; ﵳ; ﵳ; طمم; طمم; ) ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM FD74;FD74;FD74;0637 0645 064A;0637 0645 064A; # (ﵴ; ﵴ; ﵴ; طمي; طمي; ) ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM FD75;FD75;FD75;0639 062C 0645;0639 062C 0645; # (ﵵ; ﵵ; ﵵ; عجم; عجم; ) ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM FD76;FD76;FD76;0639 0645 0645;0639 0645 0645; # (ﵶ; ﵶ; ﵶ; عمم; عمم; ) ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM FD77;FD77;FD77;0639 0645 0645;0639 0645 0645; # (ﵷ; ﵷ; ﵷ; عمم; عمم; ) ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM FD78;FD78;FD78;0639 0645 0649;0639 0645 0649; # (ﵸ; ﵸ; ﵸ; عمى; عمى; ) ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM FD79;FD79;FD79;063A 0645 0645;063A 0645 0645; # (ﵹ; ﵹ; ﵹ; غمم; غمم; ) ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM FD7A;FD7A;FD7A;063A 0645 064A;063A 0645 064A; # (ﵺ; ﵺ; ﵺ; غمي; غمي; ) ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM FD7B;FD7B;FD7B;063A 0645 0649;063A 0645 0649; # (ﵻ; ﵻ; ﵻ; غمى; غمى; ) ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM FD7C;FD7C;FD7C;0641 062E 0645;0641 062E 0645; # (ﵼ; ﵼ; ﵼ; فخم; فخم; ) ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM FD7D;FD7D;FD7D;0641 062E 0645;0641 062E 0645; # (ﵽ; ﵽ; ﵽ; فخم; فخم; ) ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM FD7E;FD7E;FD7E;0642 0645 062D;0642 0645 062D; # (ﵾ; ﵾ; ﵾ; قمح; قمح; ) ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM FD7F;FD7F;FD7F;0642 0645 0645;0642 0645 0645; # (ﵿ; ﵿ; ﵿ; قمم; قمم; ) ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM FD80;FD80;FD80;0644 062D 0645;0644 062D 0645; # (ﶀ; ﶀ; ﶀ; لحم; لحم; ) ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM FD81;FD81;FD81;0644 062D 064A;0644 062D 064A; # (ﶁ; ﶁ; ﶁ; لحي; لحي; ) ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM FD82;FD82;FD82;0644 062D 0649;0644 062D 0649; # (ﶂ; ﶂ; ﶂ; لحى; لحى; ) ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM FD83;FD83;FD83;0644 062C 062C;0644 062C 062C; # (ﶃ; ﶃ; ﶃ; لجج; لجج; ) ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM FD84;FD84;FD84;0644 062C 062C;0644 062C 062C; # (ﶄ; ﶄ; ﶄ; لجج; لجج; ) ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM FD85;FD85;FD85;0644 062E 0645;0644 062E 0645; # (ﶅ; ﶅ; ﶅ; لخم; لخم; ) ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM FD86;FD86;FD86;0644 062E 0645;0644 062E 0645; # (ﶆ; ﶆ; ﶆ; لخم; لخم; ) ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM FD87;FD87;FD87;0644 0645 062D;0644 0645 062D; # (ﶇ; ﶇ; ﶇ; لمح; لمح; ) ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM FD88;FD88;FD88;0644 0645 062D;0644 0645 062D; # (ﶈ; ﶈ; ﶈ; لمح; لمح; ) ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM FD89;FD89;FD89;0645 062D 062C;0645 062D 062C; # (ﶉ; ﶉ; ﶉ; محج; محج; ) ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM FD8A;FD8A;FD8A;0645 062D 0645;0645 062D 0645; # (ﶊ; ﶊ; ﶊ; محم; محم; ) ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM FD8B;FD8B;FD8B;0645 062D 064A;0645 062D 064A; # (ﶋ; ﶋ; ﶋ; محي; محي; ) ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM FD8C;FD8C;FD8C;0645 062C 062D;0645 062C 062D; # (ﶌ; ﶌ; ﶌ; مجح; مجح; ) ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM FD8D;FD8D;FD8D;0645 062C 0645;0645 062C 0645; # (ﶍ; ﶍ; ﶍ; مجم; مجم; ) ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM FD8E;FD8E;FD8E;0645 062E 062C;0645 062E 062C; # (ﶎ; ﶎ; ﶎ; مخج; مخج; ) ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM FD8F;FD8F;FD8F;0645 062E 0645;0645 062E 0645; # (ﶏ; ﶏ; ﶏ; مخم; مخم; ) ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92;FD92;FD92;0645 062C 062E;0645 062C 062E; # (ﶒ; ﶒ; ﶒ; مجخ; مجخ; ) ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM FD93;FD93;FD93;0647 0645 062C;0647 0645 062C; # (ﶓ; ﶓ; ﶓ; همج; همج; ) ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM FD94;FD94;FD94;0647 0645 0645;0647 0645 0645; # (ﶔ; ﶔ; ﶔ; همم; همم; ) ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM FD95;FD95;FD95;0646 062D 0645;0646 062D 0645; # (ﶕ; ﶕ; ﶕ; نحم; نحم; ) ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM FD96;FD96;FD96;0646 062D 0649;0646 062D 0649; # (ﶖ; ﶖ; ﶖ; نحى; نحى; ) ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM FD97;FD97;FD97;0646 062C 0645;0646 062C 0645; # (ﶗ; ﶗ; ﶗ; نجم; نجم; ) ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM FD98;FD98;FD98;0646 062C 0645;0646 062C 0645; # (ﶘ; ﶘ; ﶘ; نجم; نجم; ) ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM FD99;FD99;FD99;0646 062C 0649;0646 062C 0649; # (ﶙ; ﶙ; ﶙ; نجى; نجى; ) ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM FD9A;FD9A;FD9A;0646 0645 064A;0646 0645 064A; # (ﶚ; ﶚ; ﶚ; نمي; نمي; ) ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM FD9B;FD9B;FD9B;0646 0645 0649;0646 0645 0649; # (ﶛ; ﶛ; ﶛ; نمى; نمى; ) ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM FD9C;FD9C;FD9C;064A 0645 0645;064A 0645 0645; # (ﶜ; ﶜ; ﶜ; يمم; يمم; ) ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM FD9D;FD9D;FD9D;064A 0645 0645;064A 0645 0645; # (ﶝ; ﶝ; ﶝ; يمم; يمم; ) ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM FD9E;FD9E;FD9E;0628 062E 064A;0628 062E 064A; # (ﶞ; ﶞ; ﶞ; بخي; بخي; ) ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM FD9F;FD9F;FD9F;062A 062C 064A;062A 062C 064A; # (ﶟ; ﶟ; ﶟ; تجي; تجي; ) ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM FDA0;FDA0;FDA0;062A 062C 0649;062A 062C 0649; # (ﶠ; ﶠ; ﶠ; تجى; تجى; ) ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM FDA1;FDA1;FDA1;062A 062E 064A;062A 062E 064A; # (ﶡ; ﶡ; ﶡ; تخي; تخي; ) ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM FDA2;FDA2;FDA2;062A 062E 0649;062A 062E 0649; # (ﶢ; ﶢ; ﶢ; تخى; تخى; ) ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM FDA3;FDA3;FDA3;062A 0645 064A;062A 0645 064A; # (ﶣ; ﶣ; ﶣ; تمي; تمي; ) ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM FDA4;FDA4;FDA4;062A 0645 0649;062A 0645 0649; # (ﶤ; ﶤ; ﶤ; تمى; تمى; ) ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM FDA5;FDA5;FDA5;062C 0645 064A;062C 0645 064A; # (ﶥ; ﶥ; ﶥ; جمي; جمي; ) ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM FDA6;FDA6;FDA6;062C 062D 0649;062C 062D 0649; # (ﶦ; ﶦ; ﶦ; جحى; جحى; ) ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM FDA7;FDA7;FDA7;062C 0645 0649;062C 0645 0649; # (ﶧ; ﶧ; ﶧ; جمى; جمى; ) ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM FDA8;FDA8;FDA8;0633 062E 0649;0633 062E 0649; # (ﶨ; ﶨ; ﶨ; سخى; سخى; ) ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM FDA9;FDA9;FDA9;0635 062D 064A;0635 062D 064A; # (ﶩ; ﶩ; ﶩ; صحي; صحي; ) ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM FDAA;FDAA;FDAA;0634 062D 064A;0634 062D 064A; # (ﶪ; ﶪ; ﶪ; شحي; شحي; ) ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM FDAB;FDAB;FDAB;0636 062D 064A;0636 062D 064A; # (ﶫ; ﶫ; ﶫ; ضحي; ضحي; ) ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM FDAC;FDAC;FDAC;0644 062C 064A;0644 062C 064A; # (ﶬ; ﶬ; ﶬ; لجي; لجي; ) ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM FDAD;FDAD;FDAD;0644 0645 064A;0644 0645 064A; # (ﶭ; ﶭ; ﶭ; لمي; لمي; ) ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM FDAE;FDAE;FDAE;064A 062D 064A;064A 062D 064A; # (ﶮ; ﶮ; ﶮ; يحي; يحي; ) ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM FDAF;FDAF;FDAF;064A 062C 064A;064A 062C 064A; # (ﶯ; ﶯ; ﶯ; يجي; يجي; ) ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM FDB0;FDB0;FDB0;064A 0645 064A;064A 0645 064A; # (ﶰ; ﶰ; ﶰ; يمي; يمي; ) ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM FDB1;FDB1;FDB1;0645 0645 064A;0645 0645 064A; # (ﶱ; ﶱ; ﶱ; ممي; ممي; ) ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM FDB2;FDB2;FDB2;0642 0645 064A;0642 0645 064A; # (ﶲ; ﶲ; ﶲ; قمي; قمي; ) ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM FDB3;FDB3;FDB3;0646 062D 064A;0646 062D 064A; # (ﶳ; ﶳ; ﶳ; نحي; نحي; ) ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM FDB4;FDB4;FDB4;0642 0645 062D;0642 0645 062D; # (ﶴ; ﶴ; ﶴ; قمح; قمح; ) ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM FDB5;FDB5;FDB5;0644 062D 0645;0644 062D 0645; # (ﶵ; ﶵ; ﶵ; لحم; لحم; ) ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM FDB6;FDB6;FDB6;0639 0645 064A;0639 0645 064A; # (ﶶ; ﶶ; ﶶ; عمي; عمي; ) ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM FDB7;FDB7;FDB7;0643 0645 064A;0643 0645 064A; # (ﶷ; ﶷ; ﶷ; كمي; كمي; ) ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM FDB8;FDB8;FDB8;0646 062C 062D;0646 062C 062D; # (ﶸ; ﶸ; ﶸ; نجح; نجح; ) ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM FDB9;FDB9;FDB9;0645 062E 064A;0645 062E 064A; # (ﶹ; ﶹ; ﶹ; مخي; مخي; ) ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM FDBA;FDBA;FDBA;0644 062C 0645;0644 062C 0645; # (ﶺ; ﶺ; ﶺ; لجم; لجم; ) ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM FDBB;FDBB;FDBB;0643 0645 0645;0643 0645 0645; # (ﶻ; ﶻ; ﶻ; كمم; كمم; ) ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM FDBC;FDBC;FDBC;0644 062C 0645;0644 062C 0645; # (ﶼ; ﶼ; ﶼ; لجم; لجم; ) ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM FDBD;FDBD;FDBD;0646 062C 062D;0646 062C 062D; # (ﶽ; ﶽ; ﶽ; نجح; نجح; ) ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM FDBE;FDBE;FDBE;062C 062D 064A;062C 062D 064A; # (ﶾ; ﶾ; ﶾ; جحي; جحي; ) ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM FDBF;FDBF;FDBF;062D 062C 064A;062D 062C 064A; # (ﶿ; ﶿ; ﶿ; حجي; حجي; ) ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM FDC0;FDC0;FDC0;0645 062C 064A;0645 062C 064A; # (ﷀ; ﷀ; ﷀ; مجي; مجي; ) ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM FDC1;FDC1;FDC1;0641 0645 064A;0641 0645 064A; # (ﷁ; ﷁ; ﷁ; فمي; فمي; ) ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM FDC2;FDC2;FDC2;0628 062D 064A;0628 062D 064A; # (ﷂ; ﷂ; ﷂ; بحي; بحي; ) ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM FDC3;FDC3;FDC3;0643 0645 0645;0643 0645 0645; # (ﷃ; ﷃ; ﷃ; كمم; كمم; ) ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM FDC4;FDC4;FDC4;0639 062C 0645;0639 062C 0645; # (ﷄ; ﷄ; ﷄ; عجم; عجم; ) ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM FDC5;FDC5;FDC5;0635 0645 0645;0635 0645 0645; # (ﷅ; ﷅ; ﷅ; صمم; صمم; ) ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM FDC6;FDC6;FDC6;0633 062E 064A;0633 062E 064A; # (ﷆ; ﷆ; ﷆ; سخي; سخي; ) ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM FDC7;FDC7;FDC7;0646 062C 064A;0646 062C 064A; # (ﷇ; ﷇ; ﷇ; نجي; نجي; ) ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM FDF0;FDF0;FDF0;0635 0644 06D2;0635 0644 06D2; # (ﷰ; ﷰ; ﷰ; صلے; صلے; ) ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM FDF1;FDF1;FDF1;0642 0644 06D2;0642 0644 06D2; # (ﷱ; ﷱ; ﷱ; قلے; قلے; ) ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM FDF2;FDF2;FDF2;0627 0644 0644 0647;0627 0644 0644 0647; # (ﷲ; ﷲ; ﷲ; الله; الله; ) ARABIC LIGATURE ALLAH ISOLATED FORM FDF3;FDF3;FDF3;0627 0643 0628 0631;0627 0643 0628 0631; # (ﷳ; ﷳ; ﷳ; اكبر; اكبر; ) ARABIC LIGATURE AKBAR ISOLATED FORM FDF4;FDF4;FDF4;0645 062D 0645 062F;0645 062D 0645 062F; # (ﷴ; ﷴ; ﷴ; محمد; محمد; ) ARABIC LIGATURE MOHAMMAD ISOLATED FORM FDF5;FDF5;FDF5;0635 0644 0639 0645;0635 0644 0639 0645; # (ﷵ; ﷵ; ﷵ; صلعم; صلعم; ) ARABIC LIGATURE SALAM ISOLATED FORM FDF6;FDF6;FDF6;0631 0633 0648 0644;0631 0633 0648 0644; # (ﷶ; ﷶ; ﷶ; رسول; رسول; ) ARABIC LIGATURE RASOUL ISOLATED FORM FDF7;FDF7;FDF7;0639 0644 064A 0647;0639 0644 064A 0647; # (ﷷ; ﷷ; ﷷ; عليه; عليه; ) ARABIC LIGATURE ALAYHE ISOLATED FORM FDF8;FDF8;FDF8;0648 0633 0644 0645;0648 0633 0644 0645; # (ﷸ; ﷸ; ﷸ; وسلم; وسلم; ) ARABIC LIGATURE WASALLAM ISOLATED FORM FDF9;FDF9;FDF9;0635 0644 0649;0635 0644 0649; # (ﷹ; ﷹ; ﷹ; صلى; صلى; ) ARABIC LIGATURE SALLA ISOLATED FORM FDFA;FDFA;FDFA;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645; # (ﷺ; ﷺ; ﷺ; صلى الله عليه وسلم; صلى الله عليه وسلم; ) ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM FDFB;FDFB;FDFB;062C 0644 0020 062C 0644 0627 0644 0647;062C 0644 0020 062C 0644 0627 0644 0647; # (ﷻ; ﷻ; ﷻ; جل جلاله; جل جلاله; ) ARABIC LIGATURE JALLAJALALOUHOU FDFC;FDFC;FDFC;0631 06CC 0627 0644;0631 06CC 0627 0644; # (﷼; ﷼; ﷼; ریال; ریال; ) RIAL SIGN FE10;FE10;FE10;002C;002C; # (︐; ︐; ︐; ,; ,; ) PRESENTATION FORM FOR VERTICAL COMMA FE11;FE11;FE11;3001;3001; # (︑; ︑; ︑; 、; 、; ) PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA FE12;FE12;FE12;3002;3002; # (︒; ︒; ︒; 。; 。; ) PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP FE13;FE13;FE13;003A;003A; # (︓; ︓; ︓; :; :; ) PRESENTATION FORM FOR VERTICAL COLON FE14;FE14;FE14;003B;003B; # (︔; ︔; ︔; ;; ;; ) PRESENTATION FORM FOR VERTICAL SEMICOLON FE15;FE15;FE15;0021;0021; # (︕; ︕; ︕; !; !; ) PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK FE16;FE16;FE16;003F;003F; # (︖; ︖; ︖; ?; ?; ) PRESENTATION FORM FOR VERTICAL QUESTION MARK FE17;FE17;FE17;3016;3016; # (︗; ︗; ︗; 〖; 〖; ) PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET FE18;FE18;FE18;3017;3017; # (︘; ︘; ︘; 〗; 〗; ) PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET FE19;FE19;FE19;002E 002E 002E;002E 002E 002E; # (︙; ︙; ︙; ...; ...; ) PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS FE30;FE30;FE30;002E 002E;002E 002E; # (︰; ︰; ︰; ..; ..; ) PRESENTATION FORM FOR VERTICAL TWO DOT LEADER FE31;FE31;FE31;2014;2014; # (︱; ︱; ︱; —; —; ) PRESENTATION FORM FOR VERTICAL EM DASH FE32;FE32;FE32;2013;2013; # (︲; ︲; ︲; –; –; ) PRESENTATION FORM FOR VERTICAL EN DASH FE33;FE33;FE33;005F;005F; # (︳; ︳; ︳; _; _; ) PRESENTATION FORM FOR VERTICAL LOW LINE FE34;FE34;FE34;005F;005F; # (︴; ︴; ︴; _; _; ) PRESENTATION FORM FOR VERTICAL WAVY LOW LINE FE35;FE35;FE35;0028;0028; # (︵; ︵; ︵; (; (; ) PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS FE36;FE36;FE36;0029;0029; # (︶; ︶; ︶; ); ); ) PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS FE37;FE37;FE37;007B;007B; # (︷; ︷; ︷; {; {; ) PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET FE38;FE38;FE38;007D;007D; # (︸; ︸; ︸; }; }; ) PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET FE39;FE39;FE39;3014;3014; # (︹; ︹; ︹; 〔; 〔; ) PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET FE3A;FE3A;FE3A;3015;3015; # (︺; ︺; ︺; 〕; 〕; ) PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET FE3B;FE3B;FE3B;3010;3010; # (︻; ︻; ︻; 【; 【; ) PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET FE3C;FE3C;FE3C;3011;3011; # (︼; ︼; ︼; 】; 】; ) PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET FE3D;FE3D;FE3D;300A;300A; # (︽; ︽; ︽; 《; 《; ) PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET FE3E;FE3E;FE3E;300B;300B; # (︾; ︾; ︾; 》; 》; ) PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET FE3F;FE3F;FE3F;3008;3008; # (︿; ︿; ︿; 〈; 〈; ) PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET FE40;FE40;FE40;3009;3009; # (﹀; ﹀; ﹀; 〉; 〉; ) PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET FE41;FE41;FE41;300C;300C; # (﹁; ﹁; ﹁; 「; 「; ) PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET FE42;FE42;FE42;300D;300D; # (﹂; ﹂; ﹂; 」; 」; ) PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET FE43;FE43;FE43;300E;300E; # (﹃; ﹃; ﹃; 『; 『; ) PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET FE44;FE44;FE44;300F;300F; # (﹄; ﹄; ﹄; 』; 』; ) PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET FE47;FE47;FE47;005B;005B; # (﹇; ﹇; ﹇; [; [; ) PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET FE48;FE48;FE48;005D;005D; # (﹈; ﹈; ﹈; ]; ]; ) PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET FE49;FE49;FE49;0020 0305;0020 0305; # (﹉; ﹉; ﹉; ◌̅; ◌̅; ) DASHED OVERLINE FE4A;FE4A;FE4A;0020 0305;0020 0305; # (﹊; ﹊; ﹊; ◌̅; ◌̅; ) CENTRELINE OVERLINE FE4B;FE4B;FE4B;0020 0305;0020 0305; # (﹋; ﹋; ﹋; ◌̅; ◌̅; ) WAVY OVERLINE FE4C;FE4C;FE4C;0020 0305;0020 0305; # (﹌; ﹌; ﹌; ◌̅; ◌̅; ) DOUBLE WAVY OVERLINE FE4D;FE4D;FE4D;005F;005F; # (﹍; ﹍; ﹍; _; _; ) DASHED LOW LINE FE4E;FE4E;FE4E;005F;005F; # (﹎; ﹎; ﹎; _; _; ) CENTRELINE LOW LINE FE4F;FE4F;FE4F;005F;005F; # (﹏; ﹏; ﹏; _; _; ) WAVY LOW LINE FE50;FE50;FE50;002C;002C; # (﹐; ﹐; ﹐; ,; ,; ) SMALL COMMA FE51;FE51;FE51;3001;3001; # (﹑; ﹑; ﹑; 、; 、; ) SMALL IDEOGRAPHIC COMMA FE52;FE52;FE52;002E;002E; # (﹒; ﹒; ﹒; .; .; ) SMALL FULL STOP FE54;FE54;FE54;003B;003B; # (﹔; ﹔; ﹔; ;; ;; ) SMALL SEMICOLON FE55;FE55;FE55;003A;003A; # (﹕; ﹕; ﹕; :; :; ) SMALL COLON FE56;FE56;FE56;003F;003F; # (﹖; ﹖; ﹖; ?; ?; ) SMALL QUESTION MARK FE57;FE57;FE57;0021;0021; # (﹗; ﹗; ﹗; !; !; ) SMALL EXCLAMATION MARK FE58;FE58;FE58;2014;2014; # (﹘; ﹘; ﹘; —; —; ) SMALL EM DASH FE59;FE59;FE59;0028;0028; # (﹙; ﹙; ﹙; (; (; ) SMALL LEFT PARENTHESIS FE5A;FE5A;FE5A;0029;0029; # (﹚; ﹚; ﹚; ); ); ) SMALL RIGHT PARENTHESIS FE5B;FE5B;FE5B;007B;007B; # (﹛; ﹛; ﹛; {; {; ) SMALL LEFT CURLY BRACKET FE5C;FE5C;FE5C;007D;007D; # (﹜; ﹜; ﹜; }; }; ) SMALL RIGHT CURLY BRACKET FE5D;FE5D;FE5D;3014;3014; # (﹝; ﹝; ﹝; 〔; 〔; ) SMALL LEFT TORTOISE SHELL BRACKET FE5E;FE5E;FE5E;3015;3015; # (﹞; ﹞; ﹞; 〕; 〕; ) SMALL RIGHT TORTOISE SHELL BRACKET FE5F;FE5F;FE5F;0023;0023; # (﹟; ﹟; ﹟; #; #; ) SMALL NUMBER SIGN FE60;FE60;FE60;0026;0026; # (﹠; ﹠; ﹠; &; &; ) SMALL AMPERSAND FE61;FE61;FE61;002A;002A; # (﹡; ﹡; ﹡; *; *; ) SMALL ASTERISK FE62;FE62;FE62;002B;002B; # (﹢; ﹢; ﹢; +; +; ) SMALL PLUS SIGN FE63;FE63;FE63;002D;002D; # (﹣; ﹣; ﹣; -; -; ) SMALL HYPHEN-MINUS FE64;FE64;FE64;003C;003C; # (﹤; ﹤; ﹤; <; <; ) SMALL LESS-THAN SIGN FE65;FE65;FE65;003E;003E; # (﹥; ﹥; ﹥; >; >; ) SMALL GREATER-THAN SIGN FE66;FE66;FE66;003D;003D; # (﹦; ﹦; ﹦; =; =; ) SMALL EQUALS SIGN FE68;FE68;FE68;005C;005C; # (﹨; ﹨; ﹨; \; \; ) SMALL REVERSE SOLIDUS FE69;FE69;FE69;0024;0024; # (﹩; ﹩; ﹩; $; $; ) SMALL DOLLAR SIGN FE6A;FE6A;FE6A;0025;0025; # (﹪; ﹪; ﹪; %; %; ) SMALL PERCENT SIGN FE6B;FE6B;FE6B;0040;0040; # (﹫; ﹫; ﹫; @; @; ) SMALL COMMERCIAL AT FE70;FE70;FE70;0020 064B;0020 064B; # (ﹰ; ﹰ; ﹰ; ◌ً; ◌ً; ) ARABIC FATHATAN ISOLATED FORM FE71;FE71;FE71;0640 064B;0640 064B; # (ﹱ; ﹱ; ﹱ; ـ◌ً; ـ◌ً; ) ARABIC TATWEEL WITH FATHATAN ABOVE FE72;FE72;FE72;0020 064C;0020 064C; # (ﹲ; ﹲ; ﹲ; ◌ٌ; ◌ٌ; ) ARABIC DAMMATAN ISOLATED FORM FE74;FE74;FE74;0020 064D;0020 064D; # (ﹴ; ﹴ; ﹴ; ◌ٍ; ◌ٍ; ) ARABIC KASRATAN ISOLATED FORM FE76;FE76;FE76;0020 064E;0020 064E; # (ﹶ; ﹶ; ﹶ; ◌َ; ◌َ; ) ARABIC FATHA ISOLATED FORM FE77;FE77;FE77;0640 064E;0640 064E; # (ﹷ; ﹷ; ﹷ; ـ◌َ; ـ◌َ; ) ARABIC FATHA MEDIAL FORM FE78;FE78;FE78;0020 064F;0020 064F; # (ﹸ; ﹸ; ﹸ; ◌ُ; ◌ُ; ) ARABIC DAMMA ISOLATED FORM FE79;FE79;FE79;0640 064F;0640 064F; # (ﹹ; ﹹ; ﹹ; ـ◌ُ; ـ◌ُ; ) ARABIC DAMMA MEDIAL FORM FE7A;FE7A;FE7A;0020 0650;0020 0650; # (ﹺ; ﹺ; ﹺ; ◌ِ; ◌ِ; ) ARABIC KASRA ISOLATED FORM FE7B;FE7B;FE7B;0640 0650;0640 0650; # (ﹻ; ﹻ; ﹻ; ـ◌ِ; ـ◌ِ; ) ARABIC KASRA MEDIAL FORM FE7C;FE7C;FE7C;0020 0651;0020 0651; # (ﹼ; ﹼ; ﹼ; ◌ّ; ◌ّ; ) ARABIC SHADDA ISOLATED FORM FE7D;FE7D;FE7D;0640 0651;0640 0651; # (ﹽ; ﹽ; ﹽ; ـ◌ّ; ـ◌ّ; ) ARABIC SHADDA MEDIAL FORM FE7E;FE7E;FE7E;0020 0652;0020 0652; # (ﹾ; ﹾ; ﹾ; ◌ْ; ◌ْ; ) ARABIC SUKUN ISOLATED FORM FE7F;FE7F;FE7F;0640 0652;0640 0652; # (ﹿ; ﹿ; ﹿ; ـ◌ْ; ـ◌ْ; ) ARABIC SUKUN MEDIAL FORM FE80;FE80;FE80;0621;0621; # (ﺀ; ﺀ; ﺀ; ء; ء; ) ARABIC LETTER HAMZA ISOLATED FORM FE81;FE81;FE81;0622;0627 0653; # (ﺁ; ﺁ; ﺁ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM FE82;FE82;FE82;0622;0627 0653; # (ﺂ; ﺂ; ﺂ; آ; ا◌ٓ; ) ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM FE83;FE83;FE83;0623;0627 0654; # (ﺃ; ﺃ; ﺃ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM FE84;FE84;FE84;0623;0627 0654; # (ﺄ; ﺄ; ﺄ; أ; ا◌ٔ; ) ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM FE85;FE85;FE85;0624;0648 0654; # (ﺅ; ﺅ; ﺅ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM FE86;FE86;FE86;0624;0648 0654; # (ﺆ; ﺆ; ﺆ; ؤ; و◌ٔ; ) ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM FE87;FE87;FE87;0625;0627 0655; # (ﺇ; ﺇ; ﺇ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM FE88;FE88;FE88;0625;0627 0655; # (ﺈ; ﺈ; ﺈ; إ; ا◌ٕ; ) ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM FE89;FE89;FE89;0626;064A 0654; # (ﺉ; ﺉ; ﺉ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM FE8A;FE8A;FE8A;0626;064A 0654; # (ﺊ; ﺊ; ﺊ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM FE8B;FE8B;FE8B;0626;064A 0654; # (ﺋ; ﺋ; ﺋ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM FE8C;FE8C;FE8C;0626;064A 0654; # (ﺌ; ﺌ; ﺌ; ئ; ي◌ٔ; ) ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM FE8D;FE8D;FE8D;0627;0627; # (ﺍ; ﺍ; ﺍ; ا; ا; ) ARABIC LETTER ALEF ISOLATED FORM FE8E;FE8E;FE8E;0627;0627; # (ﺎ; ﺎ; ﺎ; ا; ا; ) ARABIC LETTER ALEF FINAL FORM FE8F;FE8F;FE8F;0628;0628; # (ﺏ; ﺏ; ﺏ; ب; ب; ) ARABIC LETTER BEH ISOLATED FORM FE90;FE90;FE90;0628;0628; # (ﺐ; ﺐ; ﺐ; ب; ب; ) ARABIC LETTER BEH FINAL FORM FE91;FE91;FE91;0628;0628; # (ﺑ; ﺑ; ﺑ; ب; ب; ) ARABIC LETTER BEH INITIAL FORM FE92;FE92;FE92;0628;0628; # (ﺒ; ﺒ; ﺒ; ب; ب; ) ARABIC LETTER BEH MEDIAL FORM FE93;FE93;FE93;0629;0629; # (ﺓ; ﺓ; ﺓ; ة; ة; ) ARABIC LETTER TEH MARBUTA ISOLATED FORM FE94;FE94;FE94;0629;0629; # (ﺔ; ﺔ; ﺔ; ة; ة; ) ARABIC LETTER TEH MARBUTA FINAL FORM FE95;FE95;FE95;062A;062A; # (ﺕ; ﺕ; ﺕ; ت; ت; ) ARABIC LETTER TEH ISOLATED FORM FE96;FE96;FE96;062A;062A; # (ﺖ; ﺖ; ﺖ; ت; ت; ) ARABIC LETTER TEH FINAL FORM FE97;FE97;FE97;062A;062A; # (ﺗ; ﺗ; ﺗ; ت; ت; ) ARABIC LETTER TEH INITIAL FORM FE98;FE98;FE98;062A;062A; # (ﺘ; ﺘ; ﺘ; ت; ت; ) ARABIC LETTER TEH MEDIAL FORM FE99;FE99;FE99;062B;062B; # (ﺙ; ﺙ; ﺙ; ث; ث; ) ARABIC LETTER THEH ISOLATED FORM FE9A;FE9A;FE9A;062B;062B; # (ﺚ; ﺚ; ﺚ; ث; ث; ) ARABIC LETTER THEH FINAL FORM FE9B;FE9B;FE9B;062B;062B; # (ﺛ; ﺛ; ﺛ; ث; ث; ) ARABIC LETTER THEH INITIAL FORM FE9C;FE9C;FE9C;062B;062B; # (ﺜ; ﺜ; ﺜ; ث; ث; ) ARABIC LETTER THEH MEDIAL FORM FE9D;FE9D;FE9D;062C;062C; # (ﺝ; ﺝ; ﺝ; ج; ج; ) ARABIC LETTER JEEM ISOLATED FORM FE9E;FE9E;FE9E;062C;062C; # (ﺞ; ﺞ; ﺞ; ج; ج; ) ARABIC LETTER JEEM FINAL FORM FE9F;FE9F;FE9F;062C;062C; # (ﺟ; ﺟ; ﺟ; ج; ج; ) ARABIC LETTER JEEM INITIAL FORM FEA0;FEA0;FEA0;062C;062C; # (ﺠ; ﺠ; ﺠ; ج; ج; ) ARABIC LETTER JEEM MEDIAL FORM FEA1;FEA1;FEA1;062D;062D; # (ﺡ; ﺡ; ﺡ; ح; ح; ) ARABIC LETTER HAH ISOLATED FORM FEA2;FEA2;FEA2;062D;062D; # (ﺢ; ﺢ; ﺢ; ح; ح; ) ARABIC LETTER HAH FINAL FORM FEA3;FEA3;FEA3;062D;062D; # (ﺣ; ﺣ; ﺣ; ح; ح; ) ARABIC LETTER HAH INITIAL FORM FEA4;FEA4;FEA4;062D;062D; # (ﺤ; ﺤ; ﺤ; ح; ح; ) ARABIC LETTER HAH MEDIAL FORM FEA5;FEA5;FEA5;062E;062E; # (ﺥ; ﺥ; ﺥ; خ; خ; ) ARABIC LETTER KHAH ISOLATED FORM FEA6;FEA6;FEA6;062E;062E; # (ﺦ; ﺦ; ﺦ; خ; خ; ) ARABIC LETTER KHAH FINAL FORM FEA7;FEA7;FEA7;062E;062E; # (ﺧ; ﺧ; ﺧ; خ; خ; ) ARABIC LETTER KHAH INITIAL FORM FEA8;FEA8;FEA8;062E;062E; # (ﺨ; ﺨ; ﺨ; خ; خ; ) ARABIC LETTER KHAH MEDIAL FORM FEA9;FEA9;FEA9;062F;062F; # (ﺩ; ﺩ; ﺩ; د; د; ) ARABIC LETTER DAL ISOLATED FORM FEAA;FEAA;FEAA;062F;062F; # (ﺪ; ﺪ; ﺪ; د; د; ) ARABIC LETTER DAL FINAL FORM FEAB;FEAB;FEAB;0630;0630; # (ﺫ; ﺫ; ﺫ; ذ; ذ; ) ARABIC LETTER THAL ISOLATED FORM FEAC;FEAC;FEAC;0630;0630; # (ﺬ; ﺬ; ﺬ; ذ; ذ; ) ARABIC LETTER THAL FINAL FORM FEAD;FEAD;FEAD;0631;0631; # (ﺭ; ﺭ; ﺭ; ر; ر; ) ARABIC LETTER REH ISOLATED FORM FEAE;FEAE;FEAE;0631;0631; # (ﺮ; ﺮ; ﺮ; ر; ر; ) ARABIC LETTER REH FINAL FORM FEAF;FEAF;FEAF;0632;0632; # (ﺯ; ﺯ; ﺯ; ز; ز; ) ARABIC LETTER ZAIN ISOLATED FORM FEB0;FEB0;FEB0;0632;0632; # (ﺰ; ﺰ; ﺰ; ز; ز; ) ARABIC LETTER ZAIN FINAL FORM FEB1;FEB1;FEB1;0633;0633; # (ﺱ; ﺱ; ﺱ; س; س; ) ARABIC LETTER SEEN ISOLATED FORM FEB2;FEB2;FEB2;0633;0633; # (ﺲ; ﺲ; ﺲ; س; س; ) ARABIC LETTER SEEN FINAL FORM FEB3;FEB3;FEB3;0633;0633; # (ﺳ; ﺳ; ﺳ; س; س; ) ARABIC LETTER SEEN INITIAL FORM FEB4;FEB4;FEB4;0633;0633; # (ﺴ; ﺴ; ﺴ; س; س; ) ARABIC LETTER SEEN MEDIAL FORM FEB5;FEB5;FEB5;0634;0634; # (ﺵ; ﺵ; ﺵ; ش; ش; ) ARABIC LETTER SHEEN ISOLATED FORM FEB6;FEB6;FEB6;0634;0634; # (ﺶ; ﺶ; ﺶ; ش; ش; ) ARABIC LETTER SHEEN FINAL FORM FEB7;FEB7;FEB7;0634;0634; # (ﺷ; ﺷ; ﺷ; ش; ش; ) ARABIC LETTER SHEEN INITIAL FORM FEB8;FEB8;FEB8;0634;0634; # (ﺸ; ﺸ; ﺸ; ش; ش; ) ARABIC LETTER SHEEN MEDIAL FORM FEB9;FEB9;FEB9;0635;0635; # (ﺹ; ﺹ; ﺹ; ص; ص; ) ARABIC LETTER SAD ISOLATED FORM FEBA;FEBA;FEBA;0635;0635; # (ﺺ; ﺺ; ﺺ; ص; ص; ) ARABIC LETTER SAD FINAL FORM FEBB;FEBB;FEBB;0635;0635; # (ﺻ; ﺻ; ﺻ; ص; ص; ) ARABIC LETTER SAD INITIAL FORM FEBC;FEBC;FEBC;0635;0635; # (ﺼ; ﺼ; ﺼ; ص; ص; ) ARABIC LETTER SAD MEDIAL FORM FEBD;FEBD;FEBD;0636;0636; # (ﺽ; ﺽ; ﺽ; ض; ض; ) ARABIC LETTER DAD ISOLATED FORM FEBE;FEBE;FEBE;0636;0636; # (ﺾ; ﺾ; ﺾ; ض; ض; ) ARABIC LETTER DAD FINAL FORM FEBF;FEBF;FEBF;0636;0636; # (ﺿ; ﺿ; ﺿ; ض; ض; ) ARABIC LETTER DAD INITIAL FORM FEC0;FEC0;FEC0;0636;0636; # (ﻀ; ﻀ; ﻀ; ض; ض; ) ARABIC LETTER DAD MEDIAL FORM FEC1;FEC1;FEC1;0637;0637; # (ﻁ; ﻁ; ﻁ; ط; ط; ) ARABIC LETTER TAH ISOLATED FORM FEC2;FEC2;FEC2;0637;0637; # (ﻂ; ﻂ; ﻂ; ط; ط; ) ARABIC LETTER TAH FINAL FORM FEC3;FEC3;FEC3;0637;0637; # (ﻃ; ﻃ; ﻃ; ط; ط; ) ARABIC LETTER TAH INITIAL FORM FEC4;FEC4;FEC4;0637;0637; # (ﻄ; ﻄ; ﻄ; ط; ط; ) ARABIC LETTER TAH MEDIAL FORM FEC5;FEC5;FEC5;0638;0638; # (ﻅ; ﻅ; ﻅ; ظ; ظ; ) ARABIC LETTER ZAH ISOLATED FORM FEC6;FEC6;FEC6;0638;0638; # (ﻆ; ﻆ; ﻆ; ظ; ظ; ) ARABIC LETTER ZAH FINAL FORM FEC7;FEC7;FEC7;0638;0638; # (ﻇ; ﻇ; ﻇ; ظ; ظ; ) ARABIC LETTER ZAH INITIAL FORM FEC8;FEC8;FEC8;0638;0638; # (ﻈ; ﻈ; ﻈ; ظ; ظ; ) ARABIC LETTER ZAH MEDIAL FORM FEC9;FEC9;FEC9;0639;0639; # (ﻉ; ﻉ; ﻉ; ع; ع; ) ARABIC LETTER AIN ISOLATED FORM FECA;FECA;FECA;0639;0639; # (ﻊ; ﻊ; ﻊ; ع; ع; ) ARABIC LETTER AIN FINAL FORM FECB;FECB;FECB;0639;0639; # (ﻋ; ﻋ; ﻋ; ع; ع; ) ARABIC LETTER AIN INITIAL FORM FECC;FECC;FECC;0639;0639; # (ﻌ; ﻌ; ﻌ; ع; ع; ) ARABIC LETTER AIN MEDIAL FORM FECD;FECD;FECD;063A;063A; # (ﻍ; ﻍ; ﻍ; غ; غ; ) ARABIC LETTER GHAIN ISOLATED FORM FECE;FECE;FECE;063A;063A; # (ﻎ; ﻎ; ﻎ; غ; غ; ) ARABIC LETTER GHAIN FINAL FORM FECF;FECF;FECF;063A;063A; # (ﻏ; ﻏ; ﻏ; غ; غ; ) ARABIC LETTER GHAIN INITIAL FORM FED0;FED0;FED0;063A;063A; # (ﻐ; ﻐ; ﻐ; غ; غ; ) ARABIC LETTER GHAIN MEDIAL FORM FED1;FED1;FED1;0641;0641; # (ﻑ; ﻑ; ﻑ; ف; ف; ) ARABIC LETTER FEH ISOLATED FORM FED2;FED2;FED2;0641;0641; # (ﻒ; ﻒ; ﻒ; ف; ف; ) ARABIC LETTER FEH FINAL FORM FED3;FED3;FED3;0641;0641; # (ﻓ; ﻓ; ﻓ; ف; ف; ) ARABIC LETTER FEH INITIAL FORM FED4;FED4;FED4;0641;0641; # (ﻔ; ﻔ; ﻔ; ف; ف; ) ARABIC LETTER FEH MEDIAL FORM FED5;FED5;FED5;0642;0642; # (ﻕ; ﻕ; ﻕ; ق; ق; ) ARABIC LETTER QAF ISOLATED FORM FED6;FED6;FED6;0642;0642; # (ﻖ; ﻖ; ﻖ; ق; ق; ) ARABIC LETTER QAF FINAL FORM FED7;FED7;FED7;0642;0642; # (ﻗ; ﻗ; ﻗ; ق; ق; ) ARABIC LETTER QAF INITIAL FORM FED8;FED8;FED8;0642;0642; # (ﻘ; ﻘ; ﻘ; ق; ق; ) ARABIC LETTER QAF MEDIAL FORM FED9;FED9;FED9;0643;0643; # (ﻙ; ﻙ; ﻙ; ك; ك; ) ARABIC LETTER KAF ISOLATED FORM FEDA;FEDA;FEDA;0643;0643; # (ﻚ; ﻚ; ﻚ; ك; ك; ) ARABIC LETTER KAF FINAL FORM FEDB;FEDB;FEDB;0643;0643; # (ﻛ; ﻛ; ﻛ; ك; ك; ) ARABIC LETTER KAF INITIAL FORM FEDC;FEDC;FEDC;0643;0643; # (ﻜ; ﻜ; ﻜ; ك; ك; ) ARABIC LETTER KAF MEDIAL FORM FEDD;FEDD;FEDD;0644;0644; # (ﻝ; ﻝ; ﻝ; ل; ل; ) ARABIC LETTER LAM ISOLATED FORM FEDE;FEDE;FEDE;0644;0644; # (ﻞ; ﻞ; ﻞ; ل; ل; ) ARABIC LETTER LAM FINAL FORM FEDF;FEDF;FEDF;0644;0644; # (ﻟ; ﻟ; ﻟ; ل; ل; ) ARABIC LETTER LAM INITIAL FORM FEE0;FEE0;FEE0;0644;0644; # (ﻠ; ﻠ; ﻠ; ل; ل; ) ARABIC LETTER LAM MEDIAL FORM FEE1;FEE1;FEE1;0645;0645; # (ﻡ; ﻡ; ﻡ; م; م; ) ARABIC LETTER MEEM ISOLATED FORM FEE2;FEE2;FEE2;0645;0645; # (ﻢ; ﻢ; ﻢ; م; م; ) ARABIC LETTER MEEM FINAL FORM FEE3;FEE3;FEE3;0645;0645; # (ﻣ; ﻣ; ﻣ; م; م; ) ARABIC LETTER MEEM INITIAL FORM FEE4;FEE4;FEE4;0645;0645; # (ﻤ; ﻤ; ﻤ; م; م; ) ARABIC LETTER MEEM MEDIAL FORM FEE5;FEE5;FEE5;0646;0646; # (ﻥ; ﻥ; ﻥ; ن; ن; ) ARABIC LETTER NOON ISOLATED FORM FEE6;FEE6;FEE6;0646;0646; # (ﻦ; ﻦ; ﻦ; ن; ن; ) ARABIC LETTER NOON FINAL FORM FEE7;FEE7;FEE7;0646;0646; # (ﻧ; ﻧ; ﻧ; ن; ن; ) ARABIC LETTER NOON INITIAL FORM FEE8;FEE8;FEE8;0646;0646; # (ﻨ; ﻨ; ﻨ; ن; ن; ) ARABIC LETTER NOON MEDIAL FORM FEE9;FEE9;FEE9;0647;0647; # (ﻩ; ﻩ; ﻩ; ه; ه; ) ARABIC LETTER HEH ISOLATED FORM FEEA;FEEA;FEEA;0647;0647; # (ﻪ; ﻪ; ﻪ; ه; ه; ) ARABIC LETTER HEH FINAL FORM FEEB;FEEB;FEEB;0647;0647; # (ﻫ; ﻫ; ﻫ; ه; ه; ) ARABIC LETTER HEH INITIAL FORM FEEC;FEEC;FEEC;0647;0647; # (ﻬ; ﻬ; ﻬ; ه; ه; ) ARABIC LETTER HEH MEDIAL FORM FEED;FEED;FEED;0648;0648; # (ﻭ; ﻭ; ﻭ; و; و; ) ARABIC LETTER WAW ISOLATED FORM FEEE;FEEE;FEEE;0648;0648; # (ﻮ; ﻮ; ﻮ; و; و; ) ARABIC LETTER WAW FINAL FORM FEEF;FEEF;FEEF;0649;0649; # (ﻯ; ﻯ; ﻯ; ى; ى; ) ARABIC LETTER ALEF MAKSURA ISOLATED FORM FEF0;FEF0;FEF0;0649;0649; # (ﻰ; ﻰ; ﻰ; ى; ى; ) ARABIC LETTER ALEF MAKSURA FINAL FORM FEF1;FEF1;FEF1;064A;064A; # (ﻱ; ﻱ; ﻱ; ي; ي; ) ARABIC LETTER YEH ISOLATED FORM FEF2;FEF2;FEF2;064A;064A; # (ﻲ; ﻲ; ﻲ; ي; ي; ) ARABIC LETTER YEH FINAL FORM FEF3;FEF3;FEF3;064A;064A; # (ﻳ; ﻳ; ﻳ; ي; ي; ) ARABIC LETTER YEH INITIAL FORM FEF4;FEF4;FEF4;064A;064A; # (ﻴ; ﻴ; ﻴ; ي; ي; ) ARABIC LETTER YEH MEDIAL FORM FEF5;FEF5;FEF5;0644 0622;0644 0627 0653; # (ﻵ; ﻵ; ﻵ; لآ; لا◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM FEF6;FEF6;FEF6;0644 0622;0644 0627 0653; # (ﻶ; ﻶ; ﻶ; لآ; لا◌ٓ; ) ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM FEF7;FEF7;FEF7;0644 0623;0644 0627 0654; # (ﻷ; ﻷ; ﻷ; لأ; لا◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM FEF8;FEF8;FEF8;0644 0623;0644 0627 0654; # (ﻸ; ﻸ; ﻸ; لأ; لا◌ٔ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM FEF9;FEF9;FEF9;0644 0625;0644 0627 0655; # (ﻹ; ﻹ; ﻹ; لإ; لا◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM FEFA;FEFA;FEFA;0644 0625;0644 0627 0655; # (ﻺ; ﻺ; ﻺ; لإ; لا◌ٕ; ) ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM FEFB;FEFB;FEFB;0644 0627;0644 0627; # (ﻻ; ﻻ; ﻻ; لا; لا; ) ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM FEFC;FEFC;FEFC;0644 0627;0644 0627; # (ﻼ; ﻼ; ﻼ; لا; لا; ) ARABIC LIGATURE LAM WITH ALEF FINAL FORM FF01;FF01;FF01;0021;0021; # (!; !; !; !; !; ) FULLWIDTH EXCLAMATION MARK FF02;FF02;FF02;0022;0022; # ("; "; "; "; "; ) FULLWIDTH QUOTATION MARK FF03;FF03;FF03;0023;0023; # (#; #; #; #; #; ) FULLWIDTH NUMBER SIGN FF04;FF04;FF04;0024;0024; # ($; $; $; $; $; ) FULLWIDTH DOLLAR SIGN FF05;FF05;FF05;0025;0025; # (%; %; %; %; %; ) FULLWIDTH PERCENT SIGN FF06;FF06;FF06;0026;0026; # (&; &; &; &; &; ) FULLWIDTH AMPERSAND FF07;FF07;FF07;0027;0027; # ('; '; '; '; '; ) FULLWIDTH APOSTROPHE FF08;FF08;FF08;0028;0028; # ((; (; (; (; (; ) FULLWIDTH LEFT PARENTHESIS FF09;FF09;FF09;0029;0029; # (); ); ); ); ); ) FULLWIDTH RIGHT PARENTHESIS FF0A;FF0A;FF0A;002A;002A; # (*; *; *; *; *; ) FULLWIDTH ASTERISK FF0B;FF0B;FF0B;002B;002B; # (+; +; +; +; +; ) FULLWIDTH PLUS SIGN FF0C;FF0C;FF0C;002C;002C; # (,; ,; ,; ,; ,; ) FULLWIDTH COMMA FF0D;FF0D;FF0D;002D;002D; # (-; -; -; -; -; ) FULLWIDTH HYPHEN-MINUS FF0E;FF0E;FF0E;002E;002E; # (.; .; .; .; .; ) FULLWIDTH FULL STOP FF0F;FF0F;FF0F;002F;002F; # (/; /; /; /; /; ) FULLWIDTH SOLIDUS FF10;FF10;FF10;0030;0030; # (0; 0; 0; 0; 0; ) FULLWIDTH DIGIT ZERO FF11;FF11;FF11;0031;0031; # (1; 1; 1; 1; 1; ) FULLWIDTH DIGIT ONE FF12;FF12;FF12;0032;0032; # (2; 2; 2; 2; 2; ) FULLWIDTH DIGIT TWO FF13;FF13;FF13;0033;0033; # (3; 3; 3; 3; 3; ) FULLWIDTH DIGIT THREE FF14;FF14;FF14;0034;0034; # (4; 4; 4; 4; 4; ) FULLWIDTH DIGIT FOUR FF15;FF15;FF15;0035;0035; # (5; 5; 5; 5; 5; ) FULLWIDTH DIGIT FIVE FF16;FF16;FF16;0036;0036; # (6; 6; 6; 6; 6; ) FULLWIDTH DIGIT SIX FF17;FF17;FF17;0037;0037; # (7; 7; 7; 7; 7; ) FULLWIDTH DIGIT SEVEN FF18;FF18;FF18;0038;0038; # (8; 8; 8; 8; 8; ) FULLWIDTH DIGIT EIGHT FF19;FF19;FF19;0039;0039; # (9; 9; 9; 9; 9; ) FULLWIDTH DIGIT NINE FF1A;FF1A;FF1A;003A;003A; # (:; :; :; :; :; ) FULLWIDTH COLON FF1B;FF1B;FF1B;003B;003B; # (;; ;; ;; ;; ;; ) FULLWIDTH SEMICOLON FF1C;FF1C;FF1C;003C;003C; # (<; <; <; <; <; ) FULLWIDTH LESS-THAN SIGN FF1D;FF1D;FF1D;003D;003D; # (=; =; =; =; =; ) FULLWIDTH EQUALS SIGN FF1E;FF1E;FF1E;003E;003E; # (>; >; >; >; >; ) FULLWIDTH GREATER-THAN SIGN FF1F;FF1F;FF1F;003F;003F; # (?; ?; ?; ?; ?; ) FULLWIDTH QUESTION MARK FF20;FF20;FF20;0040;0040; # (@; @; @; @; @; ) FULLWIDTH COMMERCIAL AT FF21;FF21;FF21;0041;0041; # (A; A; A; A; A; ) FULLWIDTH LATIN CAPITAL LETTER A FF22;FF22;FF22;0042;0042; # (B; B; B; B; B; ) FULLWIDTH LATIN CAPITAL LETTER B FF23;FF23;FF23;0043;0043; # (C; C; C; C; C; ) FULLWIDTH LATIN CAPITAL LETTER C FF24;FF24;FF24;0044;0044; # (D; D; D; D; D; ) FULLWIDTH LATIN CAPITAL LETTER D FF25;FF25;FF25;0045;0045; # (E; E; E; E; E; ) FULLWIDTH LATIN CAPITAL LETTER E FF26;FF26;FF26;0046;0046; # (F; F; F; F; F; ) FULLWIDTH LATIN CAPITAL LETTER F FF27;FF27;FF27;0047;0047; # (G; G; G; G; G; ) FULLWIDTH LATIN CAPITAL LETTER G FF28;FF28;FF28;0048;0048; # (H; H; H; H; H; ) FULLWIDTH LATIN CAPITAL LETTER H FF29;FF29;FF29;0049;0049; # (I; I; I; I; I; ) FULLWIDTH LATIN CAPITAL LETTER I FF2A;FF2A;FF2A;004A;004A; # (J; J; J; J; J; ) FULLWIDTH LATIN CAPITAL LETTER J FF2B;FF2B;FF2B;004B;004B; # (K; K; K; K; K; ) FULLWIDTH LATIN CAPITAL LETTER K FF2C;FF2C;FF2C;004C;004C; # (L; L; L; L; L; ) FULLWIDTH LATIN CAPITAL LETTER L FF2D;FF2D;FF2D;004D;004D; # (M; M; M; M; M; ) FULLWIDTH LATIN CAPITAL LETTER M FF2E;FF2E;FF2E;004E;004E; # (N; N; N; N; N; ) FULLWIDTH LATIN CAPITAL LETTER N FF2F;FF2F;FF2F;004F;004F; # (O; O; O; O; O; ) FULLWIDTH LATIN CAPITAL LETTER O FF30;FF30;FF30;0050;0050; # (P; P; P; P; P; ) FULLWIDTH LATIN CAPITAL LETTER P FF31;FF31;FF31;0051;0051; # (Q; Q; Q; Q; Q; ) FULLWIDTH LATIN CAPITAL LETTER Q FF32;FF32;FF32;0052;0052; # (R; R; R; R; R; ) FULLWIDTH LATIN CAPITAL LETTER R FF33;FF33;FF33;0053;0053; # (S; S; S; S; S; ) FULLWIDTH LATIN CAPITAL LETTER S FF34;FF34;FF34;0054;0054; # (T; T; T; T; T; ) FULLWIDTH LATIN CAPITAL LETTER T FF35;FF35;FF35;0055;0055; # (U; U; U; U; U; ) FULLWIDTH LATIN CAPITAL LETTER U FF36;FF36;FF36;0056;0056; # (V; V; V; V; V; ) FULLWIDTH LATIN CAPITAL LETTER V FF37;FF37;FF37;0057;0057; # (W; W; W; W; W; ) FULLWIDTH LATIN CAPITAL LETTER W FF38;FF38;FF38;0058;0058; # (X; X; X; X; X; ) FULLWIDTH LATIN CAPITAL LETTER X FF39;FF39;FF39;0059;0059; # (Y; Y; Y; Y; Y; ) FULLWIDTH LATIN CAPITAL LETTER Y FF3A;FF3A;FF3A;005A;005A; # (Z; Z; Z; Z; Z; ) FULLWIDTH LATIN CAPITAL LETTER Z FF3B;FF3B;FF3B;005B;005B; # ([; [; [; [; [; ) FULLWIDTH LEFT SQUARE BRACKET FF3C;FF3C;FF3C;005C;005C; # (\; \; \; \; \; ) FULLWIDTH REVERSE SOLIDUS FF3D;FF3D;FF3D;005D;005D; # (]; ]; ]; ]; ]; ) FULLWIDTH RIGHT SQUARE BRACKET FF3E;FF3E;FF3E;005E;005E; # (^; ^; ^; ^; ^; ) FULLWIDTH CIRCUMFLEX ACCENT FF3F;FF3F;FF3F;005F;005F; # (_; _; _; _; _; ) FULLWIDTH LOW LINE FF40;FF40;FF40;0060;0060; # (`; `; `; `; `; ) FULLWIDTH GRAVE ACCENT FF41;FF41;FF41;0061;0061; # (a; a; a; a; a; ) FULLWIDTH LATIN SMALL LETTER A FF42;FF42;FF42;0062;0062; # (b; b; b; b; b; ) FULLWIDTH LATIN SMALL LETTER B FF43;FF43;FF43;0063;0063; # (c; c; c; c; c; ) FULLWIDTH LATIN SMALL LETTER C FF44;FF44;FF44;0064;0064; # (d; d; d; d; d; ) FULLWIDTH LATIN SMALL LETTER D FF45;FF45;FF45;0065;0065; # (e; e; e; e; e; ) FULLWIDTH LATIN SMALL LETTER E FF46;FF46;FF46;0066;0066; # (f; f; f; f; f; ) FULLWIDTH LATIN SMALL LETTER F FF47;FF47;FF47;0067;0067; # (g; g; g; g; g; ) FULLWIDTH LATIN SMALL LETTER G FF48;FF48;FF48;0068;0068; # (h; h; h; h; h; ) FULLWIDTH LATIN SMALL LETTER H FF49;FF49;FF49;0069;0069; # (i; i; i; i; i; ) FULLWIDTH LATIN SMALL LETTER I FF4A;FF4A;FF4A;006A;006A; # (j; j; j; j; j; ) FULLWIDTH LATIN SMALL LETTER J FF4B;FF4B;FF4B;006B;006B; # (k; k; k; k; k; ) FULLWIDTH LATIN SMALL LETTER K FF4C;FF4C;FF4C;006C;006C; # (l; l; l; l; l; ) FULLWIDTH LATIN SMALL LETTER L FF4D;FF4D;FF4D;006D;006D; # (m; m; m; m; m; ) FULLWIDTH LATIN SMALL LETTER M FF4E;FF4E;FF4E;006E;006E; # (n; n; n; n; n; ) FULLWIDTH LATIN SMALL LETTER N FF4F;FF4F;FF4F;006F;006F; # (o; o; o; o; o; ) FULLWIDTH LATIN SMALL LETTER O FF50;FF50;FF50;0070;0070; # (p; p; p; p; p; ) FULLWIDTH LATIN SMALL LETTER P FF51;FF51;FF51;0071;0071; # (q; q; q; q; q; ) FULLWIDTH LATIN SMALL LETTER Q FF52;FF52;FF52;0072;0072; # (r; r; r; r; r; ) FULLWIDTH LATIN SMALL LETTER R FF53;FF53;FF53;0073;0073; # (s; s; s; s; s; ) FULLWIDTH LATIN SMALL LETTER S FF54;FF54;FF54;0074;0074; # (t; t; t; t; t; ) FULLWIDTH LATIN SMALL LETTER T FF55;FF55;FF55;0075;0075; # (u; u; u; u; u; ) FULLWIDTH LATIN SMALL LETTER U FF56;FF56;FF56;0076;0076; # (v; v; v; v; v; ) FULLWIDTH LATIN SMALL LETTER V FF57;FF57;FF57;0077;0077; # (w; w; w; w; w; ) FULLWIDTH LATIN SMALL LETTER W FF58;FF58;FF58;0078;0078; # (x; x; x; x; x; ) FULLWIDTH LATIN SMALL LETTER X FF59;FF59;FF59;0079;0079; # (y; y; y; y; y; ) FULLWIDTH LATIN SMALL LETTER Y FF5A;FF5A;FF5A;007A;007A; # (z; z; z; z; z; ) FULLWIDTH LATIN SMALL LETTER Z FF5B;FF5B;FF5B;007B;007B; # ({; {; {; {; {; ) FULLWIDTH LEFT CURLY BRACKET FF5C;FF5C;FF5C;007C;007C; # (|; |; |; |; |; ) FULLWIDTH VERTICAL LINE FF5D;FF5D;FF5D;007D;007D; # (}; }; }; }; }; ) FULLWIDTH RIGHT CURLY BRACKET FF5E;FF5E;FF5E;007E;007E; # (~; ~; ~; ~; ~; ) FULLWIDTH TILDE FF5F;FF5F;FF5F;2985;2985; # (⦅; ⦅; ⦅; ⦅; ⦅; ) FULLWIDTH LEFT WHITE PARENTHESIS FF60;FF60;FF60;2986;2986; # (⦆; ⦆; ⦆; ⦆; ⦆; ) FULLWIDTH RIGHT WHITE PARENTHESIS FF61;FF61;FF61;3002;3002; # (。; 。; 。; 。; 。; ) HALFWIDTH IDEOGRAPHIC FULL STOP FF62;FF62;FF62;300C;300C; # (「; 「; 「; 「; 「; ) HALFWIDTH LEFT CORNER BRACKET FF63;FF63;FF63;300D;300D; # (」; 」; 」; 」; 」; ) HALFWIDTH RIGHT CORNER BRACKET FF64;FF64;FF64;3001;3001; # (、; 、; 、; 、; 、; ) HALFWIDTH IDEOGRAPHIC COMMA FF65;FF65;FF65;30FB;30FB; # (・; ・; ・; ・; ・; ) HALFWIDTH KATAKANA MIDDLE DOT FF66;FF66;FF66;30F2;30F2; # (ヲ; ヲ; ヲ; ヲ; ヲ; ) HALFWIDTH KATAKANA LETTER WO FF67;FF67;FF67;30A1;30A1; # (ァ; ァ; ァ; ァ; ァ; ) HALFWIDTH KATAKANA LETTER SMALL A FF68;FF68;FF68;30A3;30A3; # (ィ; ィ; ィ; ィ; ィ; ) HALFWIDTH KATAKANA LETTER SMALL I FF69;FF69;FF69;30A5;30A5; # (ゥ; ゥ; ゥ; ゥ; ゥ; ) HALFWIDTH KATAKANA LETTER SMALL U FF6A;FF6A;FF6A;30A7;30A7; # (ェ; ェ; ェ; ェ; ェ; ) HALFWIDTH KATAKANA LETTER SMALL E FF6B;FF6B;FF6B;30A9;30A9; # (ォ; ォ; ォ; ォ; ォ; ) HALFWIDTH KATAKANA LETTER SMALL O FF6C;FF6C;FF6C;30E3;30E3; # (ャ; ャ; ャ; ャ; ャ; ) HALFWIDTH KATAKANA LETTER SMALL YA FF6D;FF6D;FF6D;30E5;30E5; # (ュ; ュ; ュ; ュ; ュ; ) HALFWIDTH KATAKANA LETTER SMALL YU FF6E;FF6E;FF6E;30E7;30E7; # (ョ; ョ; ョ; ョ; ョ; ) HALFWIDTH KATAKANA LETTER SMALL YO FF6F;FF6F;FF6F;30C3;30C3; # (ッ; ッ; ッ; ッ; ッ; ) HALFWIDTH KATAKANA LETTER SMALL TU FF70;FF70;FF70;30FC;30FC; # (ー; ー; ー; ー; ー; ) HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF71;FF71;FF71;30A2;30A2; # (ア; ア; ア; ア; ア; ) HALFWIDTH KATAKANA LETTER A FF72;FF72;FF72;30A4;30A4; # (イ; イ; イ; イ; イ; ) HALFWIDTH KATAKANA LETTER I FF73;FF73;FF73;30A6;30A6; # (ウ; ウ; ウ; ウ; ウ; ) HALFWIDTH KATAKANA LETTER U FF74;FF74;FF74;30A8;30A8; # (エ; エ; エ; エ; エ; ) HALFWIDTH KATAKANA LETTER E FF75;FF75;FF75;30AA;30AA; # (オ; オ; オ; オ; オ; ) HALFWIDTH KATAKANA LETTER O FF76;FF76;FF76;30AB;30AB; # (カ; カ; カ; カ; カ; ) HALFWIDTH KATAKANA LETTER KA FF77;FF77;FF77;30AD;30AD; # (キ; キ; キ; キ; キ; ) HALFWIDTH KATAKANA LETTER KI FF78;FF78;FF78;30AF;30AF; # (ク; ク; ク; ク; ク; ) HALFWIDTH KATAKANA LETTER KU FF79;FF79;FF79;30B1;30B1; # (ケ; ケ; ケ; ケ; ケ; ) HALFWIDTH KATAKANA LETTER KE FF7A;FF7A;FF7A;30B3;30B3; # (コ; コ; コ; コ; コ; ) HALFWIDTH KATAKANA LETTER KO FF7B;FF7B;FF7B;30B5;30B5; # (サ; サ; サ; サ; サ; ) HALFWIDTH KATAKANA LETTER SA FF7C;FF7C;FF7C;30B7;30B7; # (シ; シ; シ; シ; シ; ) HALFWIDTH KATAKANA LETTER SI FF7D;FF7D;FF7D;30B9;30B9; # (ス; ス; ス; ス; ス; ) HALFWIDTH KATAKANA LETTER SU FF7E;FF7E;FF7E;30BB;30BB; # (セ; セ; セ; セ; セ; ) HALFWIDTH KATAKANA LETTER SE FF7F;FF7F;FF7F;30BD;30BD; # (ソ; ソ; ソ; ソ; ソ; ) HALFWIDTH KATAKANA LETTER SO FF80;FF80;FF80;30BF;30BF; # (タ; タ; タ; タ; タ; ) HALFWIDTH KATAKANA LETTER TA FF81;FF81;FF81;30C1;30C1; # (チ; チ; チ; チ; チ; ) HALFWIDTH KATAKANA LETTER TI FF82;FF82;FF82;30C4;30C4; # (ツ; ツ; ツ; ツ; ツ; ) HALFWIDTH KATAKANA LETTER TU FF83;FF83;FF83;30C6;30C6; # (テ; テ; テ; テ; テ; ) HALFWIDTH KATAKANA LETTER TE FF84;FF84;FF84;30C8;30C8; # (ト; ト; ト; ト; ト; ) HALFWIDTH KATAKANA LETTER TO FF85;FF85;FF85;30CA;30CA; # (ナ; ナ; ナ; ナ; ナ; ) HALFWIDTH KATAKANA LETTER NA FF86;FF86;FF86;30CB;30CB; # (ニ; ニ; ニ; ニ; ニ; ) HALFWIDTH KATAKANA LETTER NI FF87;FF87;FF87;30CC;30CC; # (ヌ; ヌ; ヌ; ヌ; ヌ; ) HALFWIDTH KATAKANA LETTER NU FF88;FF88;FF88;30CD;30CD; # (ネ; ネ; ネ; ネ; ネ; ) HALFWIDTH KATAKANA LETTER NE FF89;FF89;FF89;30CE;30CE; # (ノ; ノ; ノ; ノ; ノ; ) HALFWIDTH KATAKANA LETTER NO FF8A;FF8A;FF8A;30CF;30CF; # (ハ; ハ; ハ; ハ; ハ; ) HALFWIDTH KATAKANA LETTER HA FF8B;FF8B;FF8B;30D2;30D2; # (ヒ; ヒ; ヒ; ヒ; ヒ; ) HALFWIDTH KATAKANA LETTER HI FF8C;FF8C;FF8C;30D5;30D5; # (フ; フ; フ; フ; フ; ) HALFWIDTH KATAKANA LETTER HU FF8D;FF8D;FF8D;30D8;30D8; # (ヘ; ヘ; ヘ; ヘ; ヘ; ) HALFWIDTH KATAKANA LETTER HE FF8E;FF8E;FF8E;30DB;30DB; # (ホ; ホ; ホ; ホ; ホ; ) HALFWIDTH KATAKANA LETTER HO FF8F;FF8F;FF8F;30DE;30DE; # (マ; マ; マ; マ; マ; ) HALFWIDTH KATAKANA LETTER MA FF90;FF90;FF90;30DF;30DF; # (ミ; ミ; ミ; ミ; ミ; ) HALFWIDTH KATAKANA LETTER MI FF91;FF91;FF91;30E0;30E0; # (ム; ム; ム; ム; ム; ) HALFWIDTH KATAKANA LETTER MU FF92;FF92;FF92;30E1;30E1; # (メ; メ; メ; メ; メ; ) HALFWIDTH KATAKANA LETTER ME FF93;FF93;FF93;30E2;30E2; # (モ; モ; モ; モ; モ; ) HALFWIDTH KATAKANA LETTER MO FF94;FF94;FF94;30E4;30E4; # (ヤ; ヤ; ヤ; ヤ; ヤ; ) HALFWIDTH KATAKANA LETTER YA FF95;FF95;FF95;30E6;30E6; # (ユ; ユ; ユ; ユ; ユ; ) HALFWIDTH KATAKANA LETTER YU FF96;FF96;FF96;30E8;30E8; # (ヨ; ヨ; ヨ; ヨ; ヨ; ) HALFWIDTH KATAKANA LETTER YO FF97;FF97;FF97;30E9;30E9; # (ラ; ラ; ラ; ラ; ラ; ) HALFWIDTH KATAKANA LETTER RA FF98;FF98;FF98;30EA;30EA; # (リ; リ; リ; リ; リ; ) HALFWIDTH KATAKANA LETTER RI FF99;FF99;FF99;30EB;30EB; # (ル; ル; ル; ル; ル; ) HALFWIDTH KATAKANA LETTER RU FF9A;FF9A;FF9A;30EC;30EC; # (レ; レ; レ; レ; レ; ) HALFWIDTH KATAKANA LETTER RE FF9B;FF9B;FF9B;30ED;30ED; # (ロ; ロ; ロ; ロ; ロ; ) HALFWIDTH KATAKANA LETTER RO FF9C;FF9C;FF9C;30EF;30EF; # (ワ; ワ; ワ; ワ; ワ; ) HALFWIDTH KATAKANA LETTER WA FF9D;FF9D;FF9D;30F3;30F3; # (ン; ン; ン; ン; ン; ) HALFWIDTH KATAKANA LETTER N FF9E;FF9E;FF9E;3099;3099; # (゙; ゙; ゙; ◌゙; ◌゙; ) HALFWIDTH KATAKANA VOICED SOUND MARK FF9F;FF9F;FF9F;309A;309A; # (゚; ゚; ゚; ◌゚; ◌゚; ) HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK FFA0;FFA0;FFA0;1160;1160; # (ᅠ; ᅠ; ᅠ; ᅠ; ᅠ; ) HALFWIDTH HANGUL FILLER FFA1;FFA1;FFA1;1100;1100; # (ᄀ; ᄀ; ᄀ; ᄀ; ᄀ; ) HALFWIDTH HANGUL LETTER KIYEOK FFA2;FFA2;FFA2;1101;1101; # (ᄁ; ᄁ; ᄁ; ᄁ; ᄁ; ) HALFWIDTH HANGUL LETTER SSANGKIYEOK FFA3;FFA3;FFA3;11AA;11AA; # (ᆪ; ᆪ; ᆪ; ᆪ; ᆪ; ) HALFWIDTH HANGUL LETTER KIYEOK-SIOS FFA4;FFA4;FFA4;1102;1102; # (ᄂ; ᄂ; ᄂ; ᄂ; ᄂ; ) HALFWIDTH HANGUL LETTER NIEUN FFA5;FFA5;FFA5;11AC;11AC; # (ᆬ; ᆬ; ᆬ; ᆬ; ᆬ; ) HALFWIDTH HANGUL LETTER NIEUN-CIEUC FFA6;FFA6;FFA6;11AD;11AD; # (ᆭ; ᆭ; ᆭ; ᆭ; ᆭ; ) HALFWIDTH HANGUL LETTER NIEUN-HIEUH FFA7;FFA7;FFA7;1103;1103; # (ᄃ; ᄃ; ᄃ; ᄃ; ᄃ; ) HALFWIDTH HANGUL LETTER TIKEUT FFA8;FFA8;FFA8;1104;1104; # (ᄄ; ᄄ; ᄄ; ᄄ; ᄄ; ) HALFWIDTH HANGUL LETTER SSANGTIKEUT FFA9;FFA9;FFA9;1105;1105; # (ᄅ; ᄅ; ᄅ; ᄅ; ᄅ; ) HALFWIDTH HANGUL LETTER RIEUL FFAA;FFAA;FFAA;11B0;11B0; # (ᆰ; ᆰ; ᆰ; ᆰ; ᆰ; ) HALFWIDTH HANGUL LETTER RIEUL-KIYEOK FFAB;FFAB;FFAB;11B1;11B1; # (ᆱ; ᆱ; ᆱ; ᆱ; ᆱ; ) HALFWIDTH HANGUL LETTER RIEUL-MIEUM FFAC;FFAC;FFAC;11B2;11B2; # (ᆲ; ᆲ; ᆲ; ᆲ; ᆲ; ) HALFWIDTH HANGUL LETTER RIEUL-PIEUP FFAD;FFAD;FFAD;11B3;11B3; # (ᆳ; ᆳ; ᆳ; ᆳ; ᆳ; ) HALFWIDTH HANGUL LETTER RIEUL-SIOS FFAE;FFAE;FFAE;11B4;11B4; # (ᆴ; ᆴ; ᆴ; ᆴ; ᆴ; ) HALFWIDTH HANGUL LETTER RIEUL-THIEUTH FFAF;FFAF;FFAF;11B5;11B5; # (ᆵ; ᆵ; ᆵ; ᆵ; ᆵ; ) HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH FFB0;FFB0;FFB0;111A;111A; # (ᄚ; ᄚ; ᄚ; ᄚ; ᄚ; ) HALFWIDTH HANGUL LETTER RIEUL-HIEUH FFB1;FFB1;FFB1;1106;1106; # (ᄆ; ᄆ; ᄆ; ᄆ; ᄆ; ) HALFWIDTH HANGUL LETTER MIEUM FFB2;FFB2;FFB2;1107;1107; # (ᄇ; ᄇ; ᄇ; ᄇ; ᄇ; ) HALFWIDTH HANGUL LETTER PIEUP FFB3;FFB3;FFB3;1108;1108; # (ᄈ; ᄈ; ᄈ; ᄈ; ᄈ; ) HALFWIDTH HANGUL LETTER SSANGPIEUP FFB4;FFB4;FFB4;1121;1121; # (ᄡ; ᄡ; ᄡ; ᄡ; ᄡ; ) HALFWIDTH HANGUL LETTER PIEUP-SIOS FFB5;FFB5;FFB5;1109;1109; # (ᄉ; ᄉ; ᄉ; ᄉ; ᄉ; ) HALFWIDTH HANGUL LETTER SIOS FFB6;FFB6;FFB6;110A;110A; # (ᄊ; ᄊ; ᄊ; ᄊ; ᄊ; ) HALFWIDTH HANGUL LETTER SSANGSIOS FFB7;FFB7;FFB7;110B;110B; # (ᄋ; ᄋ; ᄋ; ᄋ; ᄋ; ) HALFWIDTH HANGUL LETTER IEUNG FFB8;FFB8;FFB8;110C;110C; # (ᄌ; ᄌ; ᄌ; ᄌ; ᄌ; ) HALFWIDTH HANGUL LETTER CIEUC FFB9;FFB9;FFB9;110D;110D; # (ᄍ; ᄍ; ᄍ; ᄍ; ᄍ; ) HALFWIDTH HANGUL LETTER SSANGCIEUC FFBA;FFBA;FFBA;110E;110E; # (ᄎ; ᄎ; ᄎ; ᄎ; ᄎ; ) HALFWIDTH HANGUL LETTER CHIEUCH FFBB;FFBB;FFBB;110F;110F; # (ᄏ; ᄏ; ᄏ; ᄏ; ᄏ; ) HALFWIDTH HANGUL LETTER KHIEUKH FFBC;FFBC;FFBC;1110;1110; # (ᄐ; ᄐ; ᄐ; ᄐ; ᄐ; ) HALFWIDTH HANGUL LETTER THIEUTH FFBD;FFBD;FFBD;1111;1111; # (ᄑ; ᄑ; ᄑ; ᄑ; ᄑ; ) HALFWIDTH HANGUL LETTER PHIEUPH FFBE;FFBE;FFBE;1112;1112; # (ᄒ; ᄒ; ᄒ; ᄒ; ᄒ; ) HALFWIDTH HANGUL LETTER HIEUH FFC2;FFC2;FFC2;1161;1161; # (ᅡ; ᅡ; ᅡ; ᅡ; ᅡ; ) HALFWIDTH HANGUL LETTER A FFC3;FFC3;FFC3;1162;1162; # (ᅢ; ᅢ; ᅢ; ᅢ; ᅢ; ) HALFWIDTH HANGUL LETTER AE FFC4;FFC4;FFC4;1163;1163; # (ᅣ; ᅣ; ᅣ; ᅣ; ᅣ; ) HALFWIDTH HANGUL LETTER YA FFC5;FFC5;FFC5;1164;1164; # (ᅤ; ᅤ; ᅤ; ᅤ; ᅤ; ) HALFWIDTH HANGUL LETTER YAE FFC6;FFC6;FFC6;1165;1165; # (ᅥ; ᅥ; ᅥ; ᅥ; ᅥ; ) HALFWIDTH HANGUL LETTER EO FFC7;FFC7;FFC7;1166;1166; # (ᅦ; ᅦ; ᅦ; ᅦ; ᅦ; ) HALFWIDTH HANGUL LETTER E FFCA;FFCA;FFCA;1167;1167; # (ᅧ; ᅧ; ᅧ; ᅧ; ᅧ; ) HALFWIDTH HANGUL LETTER YEO FFCB;FFCB;FFCB;1168;1168; # (ᅨ; ᅨ; ᅨ; ᅨ; ᅨ; ) HALFWIDTH HANGUL LETTER YE FFCC;FFCC;FFCC;1169;1169; # (ᅩ; ᅩ; ᅩ; ᅩ; ᅩ; ) HALFWIDTH HANGUL LETTER O FFCD;FFCD;FFCD;116A;116A; # (ᅪ; ᅪ; ᅪ; ᅪ; ᅪ; ) HALFWIDTH HANGUL LETTER WA FFCE;FFCE;FFCE;116B;116B; # (ᅫ; ᅫ; ᅫ; ᅫ; ᅫ; ) HALFWIDTH HANGUL LETTER WAE FFCF;FFCF;FFCF;116C;116C; # (ᅬ; ᅬ; ᅬ; ᅬ; ᅬ; ) HALFWIDTH HANGUL LETTER OE FFD2;FFD2;FFD2;116D;116D; # (ᅭ; ᅭ; ᅭ; ᅭ; ᅭ; ) HALFWIDTH HANGUL LETTER YO FFD3;FFD3;FFD3;116E;116E; # (ᅮ; ᅮ; ᅮ; ᅮ; ᅮ; ) HALFWIDTH HANGUL LETTER U FFD4;FFD4;FFD4;116F;116F; # (ᅯ; ᅯ; ᅯ; ᅯ; ᅯ; ) HALFWIDTH HANGUL LETTER WEO FFD5;FFD5;FFD5;1170;1170; # (ᅰ; ᅰ; ᅰ; ᅰ; ᅰ; ) HALFWIDTH HANGUL LETTER WE FFD6;FFD6;FFD6;1171;1171; # (ᅱ; ᅱ; ᅱ; ᅱ; ᅱ; ) HALFWIDTH HANGUL LETTER WI FFD7;FFD7;FFD7;1172;1172; # (ᅲ; ᅲ; ᅲ; ᅲ; ᅲ; ) HALFWIDTH HANGUL LETTER YU FFDA;FFDA;FFDA;1173;1173; # (ᅳ; ᅳ; ᅳ; ᅳ; ᅳ; ) HALFWIDTH HANGUL LETTER EU FFDB;FFDB;FFDB;1174;1174; # (ᅴ; ᅴ; ᅴ; ᅴ; ᅴ; ) HALFWIDTH HANGUL LETTER YI FFDC;FFDC;FFDC;1175;1175; # (ᅵ; ᅵ; ᅵ; ᅵ; ᅵ; ) HALFWIDTH HANGUL LETTER I FFE0;FFE0;FFE0;00A2;00A2; # (¢; ¢; ¢; ¢; ¢; ) FULLWIDTH CENT SIGN FFE1;FFE1;FFE1;00A3;00A3; # (£; £; £; £; £; ) FULLWIDTH POUND SIGN FFE2;FFE2;FFE2;00AC;00AC; # (¬; ¬; ¬; ¬; ¬; ) FULLWIDTH NOT SIGN FFE3;FFE3;FFE3;0020 0304;0020 0304; # ( ̄;  ̄;  ̄; ◌̄; ◌̄; ) FULLWIDTH MACRON FFE4;FFE4;FFE4;00A6;00A6; # (¦; ¦; ¦; ¦; ¦; ) FULLWIDTH BROKEN BAR FFE5;FFE5;FFE5;00A5;00A5; # (¥; ¥; ¥; ¥; ¥; ) FULLWIDTH YEN SIGN FFE6;FFE6;FFE6;20A9;20A9; # (₩; ₩; ₩; ₩; ₩; ) FULLWIDTH WON SIGN FFE8;FFE8;FFE8;2502;2502; # (│; │; │; │; │; ) HALFWIDTH FORMS LIGHT VERTICAL FFE9;FFE9;FFE9;2190;2190; # (←; ←; ←; ←; ←; ) HALFWIDTH LEFTWARDS ARROW FFEA;FFEA;FFEA;2191;2191; # (↑; ↑; ↑; ↑; ↑; ) HALFWIDTH UPWARDS ARROW FFEB;FFEB;FFEB;2192;2192; # (→; →; →; →; →; ) HALFWIDTH RIGHTWARDS ARROW FFEC;FFEC;FFEC;2193;2193; # (↓; ↓; ↓; ↓; ↓; ) HALFWIDTH DOWNWARDS ARROW FFED;FFED;FFED;25A0;25A0; # (■; ■; ■; ■; ■; ) HALFWIDTH BLACK SQUARE FFEE;FFEE;FFEE;25CB;25CB; # (○; ○; ○; ○; ○; ) HALFWIDTH WHITE CIRCLE 1109A;1109A;11099 110BA;1109A;11099 110BA; # (𑂚; 𑂚; 𑂙◌𑂺; 𑂚; 𑂙◌𑂺; ) KAITHI LETTER DDDHA 1109C;1109C;1109B 110BA;1109C;1109B 110BA; # (𑂜; 𑂜; 𑂛◌𑂺; 𑂜; 𑂛◌𑂺; ) KAITHI LETTER RHA 110AB;110AB;110A5 110BA;110AB;110A5 110BA; # (𑂫; 𑂫; 𑂥◌𑂺; 𑂫; 𑂥◌𑂺; ) KAITHI LETTER VA 1112E;1112E;11131 11127;1112E;11131 11127; # (◌𑄮; ◌𑄮; ◌𑄱◌𑄧; ◌𑄮; ◌𑄱◌𑄧; ) CHAKMA VOWEL SIGN O 1112F;1112F;11132 11127;1112F;11132 11127; # (◌𑄯; ◌𑄯; ◌𑄲◌𑄧; ◌𑄯; ◌𑄲◌𑄧; ) CHAKMA VOWEL SIGN AU 1134B;1134B;11347 1133E;1134B;11347 1133E; # (𑍋; 𑍋; 𑍋; 𑍋; 𑍋; ) GRANTHA VOWEL SIGN OO 1134C;1134C;11347 11357;1134C;11347 11357; # (𑍌; 𑍌; 𑍌; 𑍌; 𑍌; ) GRANTHA VOWEL SIGN AU 114BB;114BB;114B9 114BA;114BB;114B9 114BA; # (𑒻; 𑒻; 𑒹◌𑒺; 𑒻; 𑒹◌𑒺; ) TIRHUTA VOWEL SIGN AI 114BC;114BC;114B9 114B0;114BC;114B9 114B0; # (𑒼; 𑒼; 𑒼; 𑒼; 𑒼; ) TIRHUTA VOWEL SIGN O 114BE;114BE;114B9 114BD;114BE;114B9 114BD; # (𑒾; 𑒾; 𑒾; 𑒾; 𑒾; ) TIRHUTA VOWEL SIGN AU 115BA;115BA;115B8 115AF;115BA;115B8 115AF; # (𑖺; 𑖺; 𑖺; 𑖺; 𑖺; ) SIDDHAM VOWEL SIGN O 115BB;115BB;115B9 115AF;115BB;115B9 115AF; # (𑖻; 𑖻; 𑖻; 𑖻; 𑖻; ) SIDDHAM VOWEL SIGN AU 1D15E;1D157 1D165;1D157 1D165;1D157 1D165;1D157 1D165; # (𝅗𝅥; 𝅗𝅥; 𝅗𝅥; 𝅗𝅥; 𝅗𝅥; ) MUSICAL SYMBOL HALF NOTE 1D15F;1D158 1D165;1D158 1D165;1D158 1D165;1D158 1D165; # (𝅘𝅥; 𝅘𝅥; 𝅘𝅥; 𝅘𝅥; 𝅘𝅥; ) MUSICAL SYMBOL QUARTER NOTE 1D160;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E; # (𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; 𝅘𝅥𝅮; ) MUSICAL SYMBOL EIGHTH NOTE 1D161;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F; # (𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; 𝅘𝅥𝅯; ) MUSICAL SYMBOL SIXTEENTH NOTE 1D162;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170; # (𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; 𝅘𝅥𝅰; ) MUSICAL SYMBOL THIRTY-SECOND NOTE 1D163;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171; # (𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; 𝅘𝅥𝅱; ) MUSICAL SYMBOL SIXTY-FOURTH NOTE 1D164;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172; # (𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; 𝅘𝅥𝅲; ) MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE 1D1BB;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165; # (𝆹𝅥; 𝆹𝅥; 𝆹𝅥; 𝆹𝅥; 𝆹𝅥; ) MUSICAL SYMBOL MINIMA 1D1BC;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165; # (𝆺𝅥; 𝆺𝅥; 𝆺𝅥; 𝆺𝅥; 𝆺𝅥; ) MUSICAL SYMBOL MINIMA BLACK 1D1BD;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E; # (𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; 𝆹𝅥𝅮; ) MUSICAL SYMBOL SEMIMINIMA WHITE 1D1BE;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E; # (𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; 𝆺𝅥𝅮; ) MUSICAL SYMBOL SEMIMINIMA BLACK 1D1BF;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F; # (𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; 𝆹𝅥𝅯; ) MUSICAL SYMBOL FUSA WHITE 1D1C0;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F; # (𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; 𝆺𝅥𝅯; ) MUSICAL SYMBOL FUSA BLACK 1D400;1D400;1D400;0041;0041; # (𝐀; 𝐀; 𝐀; A; A; ) MATHEMATICAL BOLD CAPITAL A 1D401;1D401;1D401;0042;0042; # (𝐁; 𝐁; 𝐁; B; B; ) MATHEMATICAL BOLD CAPITAL B 1D402;1D402;1D402;0043;0043; # (𝐂; 𝐂; 𝐂; C; C; ) MATHEMATICAL BOLD CAPITAL C 1D403;1D403;1D403;0044;0044; # (𝐃; 𝐃; 𝐃; D; D; ) MATHEMATICAL BOLD CAPITAL D 1D404;1D404;1D404;0045;0045; # (𝐄; 𝐄; 𝐄; E; E; ) MATHEMATICAL BOLD CAPITAL E 1D405;1D405;1D405;0046;0046; # (𝐅; 𝐅; 𝐅; F; F; ) MATHEMATICAL BOLD CAPITAL F 1D406;1D406;1D406;0047;0047; # (𝐆; 𝐆; 𝐆; G; G; ) MATHEMATICAL BOLD CAPITAL G 1D407;1D407;1D407;0048;0048; # (𝐇; 𝐇; 𝐇; H; H; ) MATHEMATICAL BOLD CAPITAL H 1D408;1D408;1D408;0049;0049; # (𝐈; 𝐈; 𝐈; I; I; ) MATHEMATICAL BOLD CAPITAL I 1D409;1D409;1D409;004A;004A; # (𝐉; 𝐉; 𝐉; J; J; ) MATHEMATICAL BOLD CAPITAL J 1D40A;1D40A;1D40A;004B;004B; # (𝐊; 𝐊; 𝐊; K; K; ) MATHEMATICAL BOLD CAPITAL K 1D40B;1D40B;1D40B;004C;004C; # (𝐋; 𝐋; 𝐋; L; L; ) MATHEMATICAL BOLD CAPITAL L 1D40C;1D40C;1D40C;004D;004D; # (𝐌; 𝐌; 𝐌; M; M; ) MATHEMATICAL BOLD CAPITAL M 1D40D;1D40D;1D40D;004E;004E; # (𝐍; 𝐍; 𝐍; N; N; ) MATHEMATICAL BOLD CAPITAL N 1D40E;1D40E;1D40E;004F;004F; # (𝐎; 𝐎; 𝐎; O; O; ) MATHEMATICAL BOLD CAPITAL O 1D40F;1D40F;1D40F;0050;0050; # (𝐏; 𝐏; 𝐏; P; P; ) MATHEMATICAL BOLD CAPITAL P 1D410;1D410;1D410;0051;0051; # (𝐐; 𝐐; 𝐐; Q; Q; ) MATHEMATICAL BOLD CAPITAL Q 1D411;1D411;1D411;0052;0052; # (𝐑; 𝐑; 𝐑; R; R; ) MATHEMATICAL BOLD CAPITAL R 1D412;1D412;1D412;0053;0053; # (𝐒; 𝐒; 𝐒; S; S; ) MATHEMATICAL BOLD CAPITAL S 1D413;1D413;1D413;0054;0054; # (𝐓; 𝐓; 𝐓; T; T; ) MATHEMATICAL BOLD CAPITAL T 1D414;1D414;1D414;0055;0055; # (𝐔; 𝐔; 𝐔; U; U; ) MATHEMATICAL BOLD CAPITAL U 1D415;1D415;1D415;0056;0056; # (𝐕; 𝐕; 𝐕; V; V; ) MATHEMATICAL BOLD CAPITAL V 1D416;1D416;1D416;0057;0057; # (𝐖; 𝐖; 𝐖; W; W; ) MATHEMATICAL BOLD CAPITAL W 1D417;1D417;1D417;0058;0058; # (𝐗; 𝐗; 𝐗; X; X; ) MATHEMATICAL BOLD CAPITAL X 1D418;1D418;1D418;0059;0059; # (𝐘; 𝐘; 𝐘; Y; Y; ) MATHEMATICAL BOLD CAPITAL Y 1D419;1D419;1D419;005A;005A; # (𝐙; 𝐙; 𝐙; Z; Z; ) MATHEMATICAL BOLD CAPITAL Z 1D41A;1D41A;1D41A;0061;0061; # (𝐚; 𝐚; 𝐚; a; a; ) MATHEMATICAL BOLD SMALL A 1D41B;1D41B;1D41B;0062;0062; # (𝐛; 𝐛; 𝐛; b; b; ) MATHEMATICAL BOLD SMALL B 1D41C;1D41C;1D41C;0063;0063; # (𝐜; 𝐜; 𝐜; c; c; ) MATHEMATICAL BOLD SMALL C 1D41D;1D41D;1D41D;0064;0064; # (𝐝; 𝐝; 𝐝; d; d; ) MATHEMATICAL BOLD SMALL D 1D41E;1D41E;1D41E;0065;0065; # (𝐞; 𝐞; 𝐞; e; e; ) MATHEMATICAL BOLD SMALL E 1D41F;1D41F;1D41F;0066;0066; # (𝐟; 𝐟; 𝐟; f; f; ) MATHEMATICAL BOLD SMALL F 1D420;1D420;1D420;0067;0067; # (𝐠; 𝐠; 𝐠; g; g; ) MATHEMATICAL BOLD SMALL G 1D421;1D421;1D421;0068;0068; # (𝐡; 𝐡; 𝐡; h; h; ) MATHEMATICAL BOLD SMALL H 1D422;1D422;1D422;0069;0069; # (𝐢; 𝐢; 𝐢; i; i; ) MATHEMATICAL BOLD SMALL I 1D423;1D423;1D423;006A;006A; # (𝐣; 𝐣; 𝐣; j; j; ) MATHEMATICAL BOLD SMALL J 1D424;1D424;1D424;006B;006B; # (𝐤; 𝐤; 𝐤; k; k; ) MATHEMATICAL BOLD SMALL K 1D425;1D425;1D425;006C;006C; # (𝐥; 𝐥; 𝐥; l; l; ) MATHEMATICAL BOLD SMALL L 1D426;1D426;1D426;006D;006D; # (𝐦; 𝐦; 𝐦; m; m; ) MATHEMATICAL BOLD SMALL M 1D427;1D427;1D427;006E;006E; # (𝐧; 𝐧; 𝐧; n; n; ) MATHEMATICAL BOLD SMALL N 1D428;1D428;1D428;006F;006F; # (𝐨; 𝐨; 𝐨; o; o; ) MATHEMATICAL BOLD SMALL O 1D429;1D429;1D429;0070;0070; # (𝐩; 𝐩; 𝐩; p; p; ) MATHEMATICAL BOLD SMALL P 1D42A;1D42A;1D42A;0071;0071; # (𝐪; 𝐪; 𝐪; q; q; ) MATHEMATICAL BOLD SMALL Q 1D42B;1D42B;1D42B;0072;0072; # (𝐫; 𝐫; 𝐫; r; r; ) MATHEMATICAL BOLD SMALL R 1D42C;1D42C;1D42C;0073;0073; # (𝐬; 𝐬; 𝐬; s; s; ) MATHEMATICAL BOLD SMALL S 1D42D;1D42D;1D42D;0074;0074; # (𝐭; 𝐭; 𝐭; t; t; ) MATHEMATICAL BOLD SMALL T 1D42E;1D42E;1D42E;0075;0075; # (𝐮; 𝐮; 𝐮; u; u; ) MATHEMATICAL BOLD SMALL U 1D42F;1D42F;1D42F;0076;0076; # (𝐯; 𝐯; 𝐯; v; v; ) MATHEMATICAL BOLD SMALL V 1D430;1D430;1D430;0077;0077; # (𝐰; 𝐰; 𝐰; w; w; ) MATHEMATICAL BOLD SMALL W 1D431;1D431;1D431;0078;0078; # (𝐱; 𝐱; 𝐱; x; x; ) MATHEMATICAL BOLD SMALL X 1D432;1D432;1D432;0079;0079; # (𝐲; 𝐲; 𝐲; y; y; ) MATHEMATICAL BOLD SMALL Y 1D433;1D433;1D433;007A;007A; # (𝐳; 𝐳; 𝐳; z; z; ) MATHEMATICAL BOLD SMALL Z 1D434;1D434;1D434;0041;0041; # (𝐴; 𝐴; 𝐴; A; A; ) MATHEMATICAL ITALIC CAPITAL A 1D435;1D435;1D435;0042;0042; # (𝐵; 𝐵; 𝐵; B; B; ) MATHEMATICAL ITALIC CAPITAL B 1D436;1D436;1D436;0043;0043; # (𝐶; 𝐶; 𝐶; C; C; ) MATHEMATICAL ITALIC CAPITAL C 1D437;1D437;1D437;0044;0044; # (𝐷; 𝐷; 𝐷; D; D; ) MATHEMATICAL ITALIC CAPITAL D 1D438;1D438;1D438;0045;0045; # (𝐸; 𝐸; 𝐸; E; E; ) MATHEMATICAL ITALIC CAPITAL E 1D439;1D439;1D439;0046;0046; # (𝐹; 𝐹; 𝐹; F; F; ) MATHEMATICAL ITALIC CAPITAL F 1D43A;1D43A;1D43A;0047;0047; # (𝐺; 𝐺; 𝐺; G; G; ) MATHEMATICAL ITALIC CAPITAL G 1D43B;1D43B;1D43B;0048;0048; # (𝐻; 𝐻; 𝐻; H; H; ) MATHEMATICAL ITALIC CAPITAL H 1D43C;1D43C;1D43C;0049;0049; # (𝐼; 𝐼; 𝐼; I; I; ) MATHEMATICAL ITALIC CAPITAL I 1D43D;1D43D;1D43D;004A;004A; # (𝐽; 𝐽; 𝐽; J; J; ) MATHEMATICAL ITALIC CAPITAL J 1D43E;1D43E;1D43E;004B;004B; # (𝐾; 𝐾; 𝐾; K; K; ) MATHEMATICAL ITALIC CAPITAL K 1D43F;1D43F;1D43F;004C;004C; # (𝐿; 𝐿; 𝐿; L; L; ) MATHEMATICAL ITALIC CAPITAL L 1D440;1D440;1D440;004D;004D; # (𝑀; 𝑀; 𝑀; M; M; ) MATHEMATICAL ITALIC CAPITAL M 1D441;1D441;1D441;004E;004E; # (𝑁; 𝑁; 𝑁; N; N; ) MATHEMATICAL ITALIC CAPITAL N 1D442;1D442;1D442;004F;004F; # (𝑂; 𝑂; 𝑂; O; O; ) MATHEMATICAL ITALIC CAPITAL O 1D443;1D443;1D443;0050;0050; # (𝑃; 𝑃; 𝑃; P; P; ) MATHEMATICAL ITALIC CAPITAL P 1D444;1D444;1D444;0051;0051; # (𝑄; 𝑄; 𝑄; Q; Q; ) MATHEMATICAL ITALIC CAPITAL Q 1D445;1D445;1D445;0052;0052; # (𝑅; 𝑅; 𝑅; R; R; ) MATHEMATICAL ITALIC CAPITAL R 1D446;1D446;1D446;0053;0053; # (𝑆; 𝑆; 𝑆; S; S; ) MATHEMATICAL ITALIC CAPITAL S 1D447;1D447;1D447;0054;0054; # (𝑇; 𝑇; 𝑇; T; T; ) MATHEMATICAL ITALIC CAPITAL T 1D448;1D448;1D448;0055;0055; # (𝑈; 𝑈; 𝑈; U; U; ) MATHEMATICAL ITALIC CAPITAL U 1D449;1D449;1D449;0056;0056; # (𝑉; 𝑉; 𝑉; V; V; ) MATHEMATICAL ITALIC CAPITAL V 1D44A;1D44A;1D44A;0057;0057; # (𝑊; 𝑊; 𝑊; W; W; ) MATHEMATICAL ITALIC CAPITAL W 1D44B;1D44B;1D44B;0058;0058; # (𝑋; 𝑋; 𝑋; X; X; ) MATHEMATICAL ITALIC CAPITAL X 1D44C;1D44C;1D44C;0059;0059; # (𝑌; 𝑌; 𝑌; Y; Y; ) MATHEMATICAL ITALIC CAPITAL Y 1D44D;1D44D;1D44D;005A;005A; # (𝑍; 𝑍; 𝑍; Z; Z; ) MATHEMATICAL ITALIC CAPITAL Z 1D44E;1D44E;1D44E;0061;0061; # (𝑎; 𝑎; 𝑎; a; a; ) MATHEMATICAL ITALIC SMALL A 1D44F;1D44F;1D44F;0062;0062; # (𝑏; 𝑏; 𝑏; b; b; ) MATHEMATICAL ITALIC SMALL B 1D450;1D450;1D450;0063;0063; # (𝑐; 𝑐; 𝑐; c; c; ) MATHEMATICAL ITALIC SMALL C 1D451;1D451;1D451;0064;0064; # (𝑑; 𝑑; 𝑑; d; d; ) MATHEMATICAL ITALIC SMALL D 1D452;1D452;1D452;0065;0065; # (𝑒; 𝑒; 𝑒; e; e; ) MATHEMATICAL ITALIC SMALL E 1D453;1D453;1D453;0066;0066; # (𝑓; 𝑓; 𝑓; f; f; ) MATHEMATICAL ITALIC SMALL F 1D454;1D454;1D454;0067;0067; # (𝑔; 𝑔; 𝑔; g; g; ) MATHEMATICAL ITALIC SMALL G 1D456;1D456;1D456;0069;0069; # (𝑖; 𝑖; 𝑖; i; i; ) MATHEMATICAL ITALIC SMALL I 1D457;1D457;1D457;006A;006A; # (𝑗; 𝑗; 𝑗; j; j; ) MATHEMATICAL ITALIC SMALL J 1D458;1D458;1D458;006B;006B; # (𝑘; 𝑘; 𝑘; k; k; ) MATHEMATICAL ITALIC SMALL K 1D459;1D459;1D459;006C;006C; # (𝑙; 𝑙; 𝑙; l; l; ) MATHEMATICAL ITALIC SMALL L 1D45A;1D45A;1D45A;006D;006D; # (𝑚; 𝑚; 𝑚; m; m; ) MATHEMATICAL ITALIC SMALL M 1D45B;1D45B;1D45B;006E;006E; # (𝑛; 𝑛; 𝑛; n; n; ) MATHEMATICAL ITALIC SMALL N 1D45C;1D45C;1D45C;006F;006F; # (𝑜; 𝑜; 𝑜; o; o; ) MATHEMATICAL ITALIC SMALL O 1D45D;1D45D;1D45D;0070;0070; # (𝑝; 𝑝; 𝑝; p; p; ) MATHEMATICAL ITALIC SMALL P 1D45E;1D45E;1D45E;0071;0071; # (𝑞; 𝑞; 𝑞; q; q; ) MATHEMATICAL ITALIC SMALL Q 1D45F;1D45F;1D45F;0072;0072; # (𝑟; 𝑟; 𝑟; r; r; ) MATHEMATICAL ITALIC SMALL R 1D460;1D460;1D460;0073;0073; # (𝑠; 𝑠; 𝑠; s; s; ) MATHEMATICAL ITALIC SMALL S 1D461;1D461;1D461;0074;0074; # (𝑡; 𝑡; 𝑡; t; t; ) MATHEMATICAL ITALIC SMALL T 1D462;1D462;1D462;0075;0075; # (𝑢; 𝑢; 𝑢; u; u; ) MATHEMATICAL ITALIC SMALL U 1D463;1D463;1D463;0076;0076; # (𝑣; 𝑣; 𝑣; v; v; ) MATHEMATICAL ITALIC SMALL V 1D464;1D464;1D464;0077;0077; # (𝑤; 𝑤; 𝑤; w; w; ) MATHEMATICAL ITALIC SMALL W 1D465;1D465;1D465;0078;0078; # (𝑥; 𝑥; 𝑥; x; x; ) MATHEMATICAL ITALIC SMALL X 1D466;1D466;1D466;0079;0079; # (𝑦; 𝑦; 𝑦; y; y; ) MATHEMATICAL ITALIC SMALL Y 1D467;1D467;1D467;007A;007A; # (𝑧; 𝑧; 𝑧; z; z; ) MATHEMATICAL ITALIC SMALL Z 1D468;1D468;1D468;0041;0041; # (𝑨; 𝑨; 𝑨; A; A; ) MATHEMATICAL BOLD ITALIC CAPITAL A 1D469;1D469;1D469;0042;0042; # (𝑩; 𝑩; 𝑩; B; B; ) MATHEMATICAL BOLD ITALIC CAPITAL B 1D46A;1D46A;1D46A;0043;0043; # (𝑪; 𝑪; 𝑪; C; C; ) MATHEMATICAL BOLD ITALIC CAPITAL C 1D46B;1D46B;1D46B;0044;0044; # (𝑫; 𝑫; 𝑫; D; D; ) MATHEMATICAL BOLD ITALIC CAPITAL D 1D46C;1D46C;1D46C;0045;0045; # (𝑬; 𝑬; 𝑬; E; E; ) MATHEMATICAL BOLD ITALIC CAPITAL E 1D46D;1D46D;1D46D;0046;0046; # (𝑭; 𝑭; 𝑭; F; F; ) MATHEMATICAL BOLD ITALIC CAPITAL F 1D46E;1D46E;1D46E;0047;0047; # (𝑮; 𝑮; 𝑮; G; G; ) MATHEMATICAL BOLD ITALIC CAPITAL G 1D46F;1D46F;1D46F;0048;0048; # (𝑯; 𝑯; 𝑯; H; H; ) MATHEMATICAL BOLD ITALIC CAPITAL H 1D470;1D470;1D470;0049;0049; # (𝑰; 𝑰; 𝑰; I; I; ) MATHEMATICAL BOLD ITALIC CAPITAL I 1D471;1D471;1D471;004A;004A; # (𝑱; 𝑱; 𝑱; J; J; ) MATHEMATICAL BOLD ITALIC CAPITAL J 1D472;1D472;1D472;004B;004B; # (𝑲; 𝑲; 𝑲; K; K; ) MATHEMATICAL BOLD ITALIC CAPITAL K 1D473;1D473;1D473;004C;004C; # (𝑳; 𝑳; 𝑳; L; L; ) MATHEMATICAL BOLD ITALIC CAPITAL L 1D474;1D474;1D474;004D;004D; # (𝑴; 𝑴; 𝑴; M; M; ) MATHEMATICAL BOLD ITALIC CAPITAL M 1D475;1D475;1D475;004E;004E; # (𝑵; 𝑵; 𝑵; N; N; ) MATHEMATICAL BOLD ITALIC CAPITAL N 1D476;1D476;1D476;004F;004F; # (𝑶; 𝑶; 𝑶; O; O; ) MATHEMATICAL BOLD ITALIC CAPITAL O 1D477;1D477;1D477;0050;0050; # (𝑷; 𝑷; 𝑷; P; P; ) MATHEMATICAL BOLD ITALIC CAPITAL P 1D478;1D478;1D478;0051;0051; # (𝑸; 𝑸; 𝑸; Q; Q; ) MATHEMATICAL BOLD ITALIC CAPITAL Q 1D479;1D479;1D479;0052;0052; # (𝑹; 𝑹; 𝑹; R; R; ) MATHEMATICAL BOLD ITALIC CAPITAL R 1D47A;1D47A;1D47A;0053;0053; # (𝑺; 𝑺; 𝑺; S; S; ) MATHEMATICAL BOLD ITALIC CAPITAL S 1D47B;1D47B;1D47B;0054;0054; # (𝑻; 𝑻; 𝑻; T; T; ) MATHEMATICAL BOLD ITALIC CAPITAL T 1D47C;1D47C;1D47C;0055;0055; # (𝑼; 𝑼; 𝑼; U; U; ) MATHEMATICAL BOLD ITALIC CAPITAL U 1D47D;1D47D;1D47D;0056;0056; # (𝑽; 𝑽; 𝑽; V; V; ) MATHEMATICAL BOLD ITALIC CAPITAL V 1D47E;1D47E;1D47E;0057;0057; # (𝑾; 𝑾; 𝑾; W; W; ) MATHEMATICAL BOLD ITALIC CAPITAL W 1D47F;1D47F;1D47F;0058;0058; # (𝑿; 𝑿; 𝑿; X; X; ) MATHEMATICAL BOLD ITALIC CAPITAL X 1D480;1D480;1D480;0059;0059; # (𝒀; 𝒀; 𝒀; Y; Y; ) MATHEMATICAL BOLD ITALIC CAPITAL Y 1D481;1D481;1D481;005A;005A; # (𝒁; 𝒁; 𝒁; Z; Z; ) MATHEMATICAL BOLD ITALIC CAPITAL Z 1D482;1D482;1D482;0061;0061; # (𝒂; 𝒂; 𝒂; a; a; ) MATHEMATICAL BOLD ITALIC SMALL A 1D483;1D483;1D483;0062;0062; # (𝒃; 𝒃; 𝒃; b; b; ) MATHEMATICAL BOLD ITALIC SMALL B 1D484;1D484;1D484;0063;0063; # (𝒄; 𝒄; 𝒄; c; c; ) MATHEMATICAL BOLD ITALIC SMALL C 1D485;1D485;1D485;0064;0064; # (𝒅; 𝒅; 𝒅; d; d; ) MATHEMATICAL BOLD ITALIC SMALL D 1D486;1D486;1D486;0065;0065; # (𝒆; 𝒆; 𝒆; e; e; ) MATHEMATICAL BOLD ITALIC SMALL E 1D487;1D487;1D487;0066;0066; # (𝒇; 𝒇; 𝒇; f; f; ) MATHEMATICAL BOLD ITALIC SMALL F 1D488;1D488;1D488;0067;0067; # (𝒈; 𝒈; 𝒈; g; g; ) MATHEMATICAL BOLD ITALIC SMALL G 1D489;1D489;1D489;0068;0068; # (𝒉; 𝒉; 𝒉; h; h; ) MATHEMATICAL BOLD ITALIC SMALL H 1D48A;1D48A;1D48A;0069;0069; # (𝒊; 𝒊; 𝒊; i; i; ) MATHEMATICAL BOLD ITALIC SMALL I 1D48B;1D48B;1D48B;006A;006A; # (𝒋; 𝒋; 𝒋; j; j; ) MATHEMATICAL BOLD ITALIC SMALL J 1D48C;1D48C;1D48C;006B;006B; # (𝒌; 𝒌; 𝒌; k; k; ) MATHEMATICAL BOLD ITALIC SMALL K 1D48D;1D48D;1D48D;006C;006C; # (𝒍; 𝒍; 𝒍; l; l; ) MATHEMATICAL BOLD ITALIC SMALL L 1D48E;1D48E;1D48E;006D;006D; # (𝒎; 𝒎; 𝒎; m; m; ) MATHEMATICAL BOLD ITALIC SMALL M 1D48F;1D48F;1D48F;006E;006E; # (𝒏; 𝒏; 𝒏; n; n; ) MATHEMATICAL BOLD ITALIC SMALL N 1D490;1D490;1D490;006F;006F; # (𝒐; 𝒐; 𝒐; o; o; ) MATHEMATICAL BOLD ITALIC SMALL O 1D491;1D491;1D491;0070;0070; # (𝒑; 𝒑; 𝒑; p; p; ) MATHEMATICAL BOLD ITALIC SMALL P 1D492;1D492;1D492;0071;0071; # (𝒒; 𝒒; 𝒒; q; q; ) MATHEMATICAL BOLD ITALIC SMALL Q 1D493;1D493;1D493;0072;0072; # (𝒓; 𝒓; 𝒓; r; r; ) MATHEMATICAL BOLD ITALIC SMALL R 1D494;1D494;1D494;0073;0073; # (𝒔; 𝒔; 𝒔; s; s; ) MATHEMATICAL BOLD ITALIC SMALL S 1D495;1D495;1D495;0074;0074; # (𝒕; 𝒕; 𝒕; t; t; ) MATHEMATICAL BOLD ITALIC SMALL T 1D496;1D496;1D496;0075;0075; # (𝒖; 𝒖; 𝒖; u; u; ) MATHEMATICAL BOLD ITALIC SMALL U 1D497;1D497;1D497;0076;0076; # (𝒗; 𝒗; 𝒗; v; v; ) MATHEMATICAL BOLD ITALIC SMALL V 1D498;1D498;1D498;0077;0077; # (𝒘; 𝒘; 𝒘; w; w; ) MATHEMATICAL BOLD ITALIC SMALL W 1D499;1D499;1D499;0078;0078; # (𝒙; 𝒙; 𝒙; x; x; ) MATHEMATICAL BOLD ITALIC SMALL X 1D49A;1D49A;1D49A;0079;0079; # (𝒚; 𝒚; 𝒚; y; y; ) MATHEMATICAL BOLD ITALIC SMALL Y 1D49B;1D49B;1D49B;007A;007A; # (𝒛; 𝒛; 𝒛; z; z; ) MATHEMATICAL BOLD ITALIC SMALL Z 1D49C;1D49C;1D49C;0041;0041; # (𝒜; 𝒜; 𝒜; A; A; ) MATHEMATICAL SCRIPT CAPITAL A 1D49E;1D49E;1D49E;0043;0043; # (𝒞; 𝒞; 𝒞; C; C; ) MATHEMATICAL SCRIPT CAPITAL C 1D49F;1D49F;1D49F;0044;0044; # (𝒟; 𝒟; 𝒟; D; D; ) MATHEMATICAL SCRIPT CAPITAL D 1D4A2;1D4A2;1D4A2;0047;0047; # (𝒢; 𝒢; 𝒢; G; G; ) MATHEMATICAL SCRIPT CAPITAL G 1D4A5;1D4A5;1D4A5;004A;004A; # (𝒥; 𝒥; 𝒥; J; J; ) MATHEMATICAL SCRIPT CAPITAL J 1D4A6;1D4A6;1D4A6;004B;004B; # (𝒦; 𝒦; 𝒦; K; K; ) MATHEMATICAL SCRIPT CAPITAL K 1D4A9;1D4A9;1D4A9;004E;004E; # (𝒩; 𝒩; 𝒩; N; N; ) MATHEMATICAL SCRIPT CAPITAL N 1D4AA;1D4AA;1D4AA;004F;004F; # (𝒪; 𝒪; 𝒪; O; O; ) MATHEMATICAL SCRIPT CAPITAL O 1D4AB;1D4AB;1D4AB;0050;0050; # (𝒫; 𝒫; 𝒫; P; P; ) MATHEMATICAL SCRIPT CAPITAL P 1D4AC;1D4AC;1D4AC;0051;0051; # (𝒬; 𝒬; 𝒬; Q; Q; ) MATHEMATICAL SCRIPT CAPITAL Q 1D4AE;1D4AE;1D4AE;0053;0053; # (𝒮; 𝒮; 𝒮; S; S; ) MATHEMATICAL SCRIPT CAPITAL S 1D4AF;1D4AF;1D4AF;0054;0054; # (𝒯; 𝒯; 𝒯; T; T; ) MATHEMATICAL SCRIPT CAPITAL T 1D4B0;1D4B0;1D4B0;0055;0055; # (𝒰; 𝒰; 𝒰; U; U; ) MATHEMATICAL SCRIPT CAPITAL U 1D4B1;1D4B1;1D4B1;0056;0056; # (𝒱; 𝒱; 𝒱; V; V; ) MATHEMATICAL SCRIPT CAPITAL V 1D4B2;1D4B2;1D4B2;0057;0057; # (𝒲; 𝒲; 𝒲; W; W; ) MATHEMATICAL SCRIPT CAPITAL W 1D4B3;1D4B3;1D4B3;0058;0058; # (𝒳; 𝒳; 𝒳; X; X; ) MATHEMATICAL SCRIPT CAPITAL X 1D4B4;1D4B4;1D4B4;0059;0059; # (𝒴; 𝒴; 𝒴; Y; Y; ) MATHEMATICAL SCRIPT CAPITAL Y 1D4B5;1D4B5;1D4B5;005A;005A; # (𝒵; 𝒵; 𝒵; Z; Z; ) MATHEMATICAL SCRIPT CAPITAL Z 1D4B6;1D4B6;1D4B6;0061;0061; # (𝒶; 𝒶; 𝒶; a; a; ) MATHEMATICAL SCRIPT SMALL A 1D4B7;1D4B7;1D4B7;0062;0062; # (𝒷; 𝒷; 𝒷; b; b; ) MATHEMATICAL SCRIPT SMALL B 1D4B8;1D4B8;1D4B8;0063;0063; # (𝒸; 𝒸; 𝒸; c; c; ) MATHEMATICAL SCRIPT SMALL C 1D4B9;1D4B9;1D4B9;0064;0064; # (𝒹; 𝒹; 𝒹; d; d; ) MATHEMATICAL SCRIPT SMALL D 1D4BB;1D4BB;1D4BB;0066;0066; # (𝒻; 𝒻; 𝒻; f; f; ) MATHEMATICAL SCRIPT SMALL F 1D4BD;1D4BD;1D4BD;0068;0068; # (𝒽; 𝒽; 𝒽; h; h; ) MATHEMATICAL SCRIPT SMALL H 1D4BE;1D4BE;1D4BE;0069;0069; # (𝒾; 𝒾; 𝒾; i; i; ) MATHEMATICAL SCRIPT SMALL I 1D4BF;1D4BF;1D4BF;006A;006A; # (𝒿; 𝒿; 𝒿; j; j; ) MATHEMATICAL SCRIPT SMALL J 1D4C0;1D4C0;1D4C0;006B;006B; # (𝓀; 𝓀; 𝓀; k; k; ) MATHEMATICAL SCRIPT SMALL K 1D4C1;1D4C1;1D4C1;006C;006C; # (𝓁; 𝓁; 𝓁; l; l; ) MATHEMATICAL SCRIPT SMALL L 1D4C2;1D4C2;1D4C2;006D;006D; # (𝓂; 𝓂; 𝓂; m; m; ) MATHEMATICAL SCRIPT SMALL M 1D4C3;1D4C3;1D4C3;006E;006E; # (𝓃; 𝓃; 𝓃; n; n; ) MATHEMATICAL SCRIPT SMALL N 1D4C5;1D4C5;1D4C5;0070;0070; # (𝓅; 𝓅; 𝓅; p; p; ) MATHEMATICAL SCRIPT SMALL P 1D4C6;1D4C6;1D4C6;0071;0071; # (𝓆; 𝓆; 𝓆; q; q; ) MATHEMATICAL SCRIPT SMALL Q 1D4C7;1D4C7;1D4C7;0072;0072; # (𝓇; 𝓇; 𝓇; r; r; ) MATHEMATICAL SCRIPT SMALL R 1D4C8;1D4C8;1D4C8;0073;0073; # (𝓈; 𝓈; 𝓈; s; s; ) MATHEMATICAL SCRIPT SMALL S 1D4C9;1D4C9;1D4C9;0074;0074; # (𝓉; 𝓉; 𝓉; t; t; ) MATHEMATICAL SCRIPT SMALL T 1D4CA;1D4CA;1D4CA;0075;0075; # (𝓊; 𝓊; 𝓊; u; u; ) MATHEMATICAL SCRIPT SMALL U 1D4CB;1D4CB;1D4CB;0076;0076; # (𝓋; 𝓋; 𝓋; v; v; ) MATHEMATICAL SCRIPT SMALL V 1D4CC;1D4CC;1D4CC;0077;0077; # (𝓌; 𝓌; 𝓌; w; w; ) MATHEMATICAL SCRIPT SMALL W 1D4CD;1D4CD;1D4CD;0078;0078; # (𝓍; 𝓍; 𝓍; x; x; ) MATHEMATICAL SCRIPT SMALL X 1D4CE;1D4CE;1D4CE;0079;0079; # (𝓎; 𝓎; 𝓎; y; y; ) MATHEMATICAL SCRIPT SMALL Y 1D4CF;1D4CF;1D4CF;007A;007A; # (𝓏; 𝓏; 𝓏; z; z; ) MATHEMATICAL SCRIPT SMALL Z 1D4D0;1D4D0;1D4D0;0041;0041; # (𝓐; 𝓐; 𝓐; A; A; ) MATHEMATICAL BOLD SCRIPT CAPITAL A 1D4D1;1D4D1;1D4D1;0042;0042; # (𝓑; 𝓑; 𝓑; B; B; ) MATHEMATICAL BOLD SCRIPT CAPITAL B 1D4D2;1D4D2;1D4D2;0043;0043; # (𝓒; 𝓒; 𝓒; C; C; ) MATHEMATICAL BOLD SCRIPT CAPITAL C 1D4D3;1D4D3;1D4D3;0044;0044; # (𝓓; 𝓓; 𝓓; D; D; ) MATHEMATICAL BOLD SCRIPT CAPITAL D 1D4D4;1D4D4;1D4D4;0045;0045; # (𝓔; 𝓔; 𝓔; E; E; ) MATHEMATICAL BOLD SCRIPT CAPITAL E 1D4D5;1D4D5;1D4D5;0046;0046; # (𝓕; 𝓕; 𝓕; F; F; ) MATHEMATICAL BOLD SCRIPT CAPITAL F 1D4D6;1D4D6;1D4D6;0047;0047; # (𝓖; 𝓖; 𝓖; G; G; ) MATHEMATICAL BOLD SCRIPT CAPITAL G 1D4D7;1D4D7;1D4D7;0048;0048; # (𝓗; 𝓗; 𝓗; H; H; ) MATHEMATICAL BOLD SCRIPT CAPITAL H 1D4D8;1D4D8;1D4D8;0049;0049; # (𝓘; 𝓘; 𝓘; I; I; ) MATHEMATICAL BOLD SCRIPT CAPITAL I 1D4D9;1D4D9;1D4D9;004A;004A; # (𝓙; 𝓙; 𝓙; J; J; ) MATHEMATICAL BOLD SCRIPT CAPITAL J 1D4DA;1D4DA;1D4DA;004B;004B; # (𝓚; 𝓚; 𝓚; K; K; ) MATHEMATICAL BOLD SCRIPT CAPITAL K 1D4DB;1D4DB;1D4DB;004C;004C; # (𝓛; 𝓛; 𝓛; L; L; ) MATHEMATICAL BOLD SCRIPT CAPITAL L 1D4DC;1D4DC;1D4DC;004D;004D; # (𝓜; 𝓜; 𝓜; M; M; ) MATHEMATICAL BOLD SCRIPT CAPITAL M 1D4DD;1D4DD;1D4DD;004E;004E; # (𝓝; 𝓝; 𝓝; N; N; ) MATHEMATICAL BOLD SCRIPT CAPITAL N 1D4DE;1D4DE;1D4DE;004F;004F; # (𝓞; 𝓞; 𝓞; O; O; ) MATHEMATICAL BOLD SCRIPT CAPITAL O 1D4DF;1D4DF;1D4DF;0050;0050; # (𝓟; 𝓟; 𝓟; P; P; ) MATHEMATICAL BOLD SCRIPT CAPITAL P 1D4E0;1D4E0;1D4E0;0051;0051; # (𝓠; 𝓠; 𝓠; Q; Q; ) MATHEMATICAL BOLD SCRIPT CAPITAL Q 1D4E1;1D4E1;1D4E1;0052;0052; # (𝓡; 𝓡; 𝓡; R; R; ) MATHEMATICAL BOLD SCRIPT CAPITAL R 1D4E2;1D4E2;1D4E2;0053;0053; # (𝓢; 𝓢; 𝓢; S; S; ) MATHEMATICAL BOLD SCRIPT CAPITAL S 1D4E3;1D4E3;1D4E3;0054;0054; # (𝓣; 𝓣; 𝓣; T; T; ) MATHEMATICAL BOLD SCRIPT CAPITAL T 1D4E4;1D4E4;1D4E4;0055;0055; # (𝓤; 𝓤; 𝓤; U; U; ) MATHEMATICAL BOLD SCRIPT CAPITAL U 1D4E5;1D4E5;1D4E5;0056;0056; # (𝓥; 𝓥; 𝓥; V; V; ) MATHEMATICAL BOLD SCRIPT CAPITAL V 1D4E6;1D4E6;1D4E6;0057;0057; # (𝓦; 𝓦; 𝓦; W; W; ) MATHEMATICAL BOLD SCRIPT CAPITAL W 1D4E7;1D4E7;1D4E7;0058;0058; # (𝓧; 𝓧; 𝓧; X; X; ) MATHEMATICAL BOLD SCRIPT CAPITAL X 1D4E8;1D4E8;1D4E8;0059;0059; # (𝓨; 𝓨; 𝓨; Y; Y; ) MATHEMATICAL BOLD SCRIPT CAPITAL Y 1D4E9;1D4E9;1D4E9;005A;005A; # (𝓩; 𝓩; 𝓩; Z; Z; ) MATHEMATICAL BOLD SCRIPT CAPITAL Z 1D4EA;1D4EA;1D4EA;0061;0061; # (𝓪; 𝓪; 𝓪; a; a; ) MATHEMATICAL BOLD SCRIPT SMALL A 1D4EB;1D4EB;1D4EB;0062;0062; # (𝓫; 𝓫; 𝓫; b; b; ) MATHEMATICAL BOLD SCRIPT SMALL B 1D4EC;1D4EC;1D4EC;0063;0063; # (𝓬; 𝓬; 𝓬; c; c; ) MATHEMATICAL BOLD SCRIPT SMALL C 1D4ED;1D4ED;1D4ED;0064;0064; # (𝓭; 𝓭; 𝓭; d; d; ) MATHEMATICAL BOLD SCRIPT SMALL D 1D4EE;1D4EE;1D4EE;0065;0065; # (𝓮; 𝓮; 𝓮; e; e; ) MATHEMATICAL BOLD SCRIPT SMALL E 1D4EF;1D4EF;1D4EF;0066;0066; # (𝓯; 𝓯; 𝓯; f; f; ) MATHEMATICAL BOLD SCRIPT SMALL F 1D4F0;1D4F0;1D4F0;0067;0067; # (𝓰; 𝓰; 𝓰; g; g; ) MATHEMATICAL BOLD SCRIPT SMALL G 1D4F1;1D4F1;1D4F1;0068;0068; # (𝓱; 𝓱; 𝓱; h; h; ) MATHEMATICAL BOLD SCRIPT SMALL H 1D4F2;1D4F2;1D4F2;0069;0069; # (𝓲; 𝓲; 𝓲; i; i; ) MATHEMATICAL BOLD SCRIPT SMALL I 1D4F3;1D4F3;1D4F3;006A;006A; # (𝓳; 𝓳; 𝓳; j; j; ) MATHEMATICAL BOLD SCRIPT SMALL J 1D4F4;1D4F4;1D4F4;006B;006B; # (𝓴; 𝓴; 𝓴; k; k; ) MATHEMATICAL BOLD SCRIPT SMALL K 1D4F5;1D4F5;1D4F5;006C;006C; # (𝓵; 𝓵; 𝓵; l; l; ) MATHEMATICAL BOLD SCRIPT SMALL L 1D4F6;1D4F6;1D4F6;006D;006D; # (𝓶; 𝓶; 𝓶; m; m; ) MATHEMATICAL BOLD SCRIPT SMALL M 1D4F7;1D4F7;1D4F7;006E;006E; # (𝓷; 𝓷; 𝓷; n; n; ) MATHEMATICAL BOLD SCRIPT SMALL N 1D4F8;1D4F8;1D4F8;006F;006F; # (𝓸; 𝓸; 𝓸; o; o; ) MATHEMATICAL BOLD SCRIPT SMALL O 1D4F9;1D4F9;1D4F9;0070;0070; # (𝓹; 𝓹; 𝓹; p; p; ) MATHEMATICAL BOLD SCRIPT SMALL P 1D4FA;1D4FA;1D4FA;0071;0071; # (𝓺; 𝓺; 𝓺; q; q; ) MATHEMATICAL BOLD SCRIPT SMALL Q 1D4FB;1D4FB;1D4FB;0072;0072; # (𝓻; 𝓻; 𝓻; r; r; ) MATHEMATICAL BOLD SCRIPT SMALL R 1D4FC;1D4FC;1D4FC;0073;0073; # (𝓼; 𝓼; 𝓼; s; s; ) MATHEMATICAL BOLD SCRIPT SMALL S 1D4FD;1D4FD;1D4FD;0074;0074; # (𝓽; 𝓽; 𝓽; t; t; ) MATHEMATICAL BOLD SCRIPT SMALL T 1D4FE;1D4FE;1D4FE;0075;0075; # (𝓾; 𝓾; 𝓾; u; u; ) MATHEMATICAL BOLD SCRIPT SMALL U 1D4FF;1D4FF;1D4FF;0076;0076; # (𝓿; 𝓿; 𝓿; v; v; ) MATHEMATICAL BOLD SCRIPT SMALL V 1D500;1D500;1D500;0077;0077; # (𝔀; 𝔀; 𝔀; w; w; ) MATHEMATICAL BOLD SCRIPT SMALL W 1D501;1D501;1D501;0078;0078; # (𝔁; 𝔁; 𝔁; x; x; ) MATHEMATICAL BOLD SCRIPT SMALL X 1D502;1D502;1D502;0079;0079; # (𝔂; 𝔂; 𝔂; y; y; ) MATHEMATICAL BOLD SCRIPT SMALL Y 1D503;1D503;1D503;007A;007A; # (𝔃; 𝔃; 𝔃; z; z; ) MATHEMATICAL BOLD SCRIPT SMALL Z 1D504;1D504;1D504;0041;0041; # (𝔄; 𝔄; 𝔄; A; A; ) MATHEMATICAL FRAKTUR CAPITAL A 1D505;1D505;1D505;0042;0042; # (𝔅; 𝔅; 𝔅; B; B; ) MATHEMATICAL FRAKTUR CAPITAL B 1D507;1D507;1D507;0044;0044; # (𝔇; 𝔇; 𝔇; D; D; ) MATHEMATICAL FRAKTUR CAPITAL D 1D508;1D508;1D508;0045;0045; # (𝔈; 𝔈; 𝔈; E; E; ) MATHEMATICAL FRAKTUR CAPITAL E 1D509;1D509;1D509;0046;0046; # (𝔉; 𝔉; 𝔉; F; F; ) MATHEMATICAL FRAKTUR CAPITAL F 1D50A;1D50A;1D50A;0047;0047; # (𝔊; 𝔊; 𝔊; G; G; ) MATHEMATICAL FRAKTUR CAPITAL G 1D50D;1D50D;1D50D;004A;004A; # (𝔍; 𝔍; 𝔍; J; J; ) MATHEMATICAL FRAKTUR CAPITAL J 1D50E;1D50E;1D50E;004B;004B; # (𝔎; 𝔎; 𝔎; K; K; ) MATHEMATICAL FRAKTUR CAPITAL K 1D50F;1D50F;1D50F;004C;004C; # (𝔏; 𝔏; 𝔏; L; L; ) MATHEMATICAL FRAKTUR CAPITAL L 1D510;1D510;1D510;004D;004D; # (𝔐; 𝔐; 𝔐; M; M; ) MATHEMATICAL FRAKTUR CAPITAL M 1D511;1D511;1D511;004E;004E; # (𝔑; 𝔑; 𝔑; N; N; ) MATHEMATICAL FRAKTUR CAPITAL N 1D512;1D512;1D512;004F;004F; # (𝔒; 𝔒; 𝔒; O; O; ) MATHEMATICAL FRAKTUR CAPITAL O 1D513;1D513;1D513;0050;0050; # (𝔓; 𝔓; 𝔓; P; P; ) MATHEMATICAL FRAKTUR CAPITAL P 1D514;1D514;1D514;0051;0051; # (𝔔; 𝔔; 𝔔; Q; Q; ) MATHEMATICAL FRAKTUR CAPITAL Q 1D516;1D516;1D516;0053;0053; # (𝔖; 𝔖; 𝔖; S; S; ) MATHEMATICAL FRAKTUR CAPITAL S 1D517;1D517;1D517;0054;0054; # (𝔗; 𝔗; 𝔗; T; T; ) MATHEMATICAL FRAKTUR CAPITAL T 1D518;1D518;1D518;0055;0055; # (𝔘; 𝔘; 𝔘; U; U; ) MATHEMATICAL FRAKTUR CAPITAL U 1D519;1D519;1D519;0056;0056; # (𝔙; 𝔙; 𝔙; V; V; ) MATHEMATICAL FRAKTUR CAPITAL V 1D51A;1D51A;1D51A;0057;0057; # (𝔚; 𝔚; 𝔚; W; W; ) MATHEMATICAL FRAKTUR CAPITAL W 1D51B;1D51B;1D51B;0058;0058; # (𝔛; 𝔛; 𝔛; X; X; ) MATHEMATICAL FRAKTUR CAPITAL X 1D51C;1D51C;1D51C;0059;0059; # (𝔜; 𝔜; 𝔜; Y; Y; ) MATHEMATICAL FRAKTUR CAPITAL Y 1D51E;1D51E;1D51E;0061;0061; # (𝔞; 𝔞; 𝔞; a; a; ) MATHEMATICAL FRAKTUR SMALL A 1D51F;1D51F;1D51F;0062;0062; # (𝔟; 𝔟; 𝔟; b; b; ) MATHEMATICAL FRAKTUR SMALL B 1D520;1D520;1D520;0063;0063; # (𝔠; 𝔠; 𝔠; c; c; ) MATHEMATICAL FRAKTUR SMALL C 1D521;1D521;1D521;0064;0064; # (𝔡; 𝔡; 𝔡; d; d; ) MATHEMATICAL FRAKTUR SMALL D 1D522;1D522;1D522;0065;0065; # (𝔢; 𝔢; 𝔢; e; e; ) MATHEMATICAL FRAKTUR SMALL E 1D523;1D523;1D523;0066;0066; # (𝔣; 𝔣; 𝔣; f; f; ) MATHEMATICAL FRAKTUR SMALL F 1D524;1D524;1D524;0067;0067; # (𝔤; 𝔤; 𝔤; g; g; ) MATHEMATICAL FRAKTUR SMALL G 1D525;1D525;1D525;0068;0068; # (𝔥; 𝔥; 𝔥; h; h; ) MATHEMATICAL FRAKTUR SMALL H 1D526;1D526;1D526;0069;0069; # (𝔦; 𝔦; 𝔦; i; i; ) MATHEMATICAL FRAKTUR SMALL I 1D527;1D527;1D527;006A;006A; # (𝔧; 𝔧; 𝔧; j; j; ) MATHEMATICAL FRAKTUR SMALL J 1D528;1D528;1D528;006B;006B; # (𝔨; 𝔨; 𝔨; k; k; ) MATHEMATICAL FRAKTUR SMALL K 1D529;1D529;1D529;006C;006C; # (𝔩; 𝔩; 𝔩; l; l; ) MATHEMATICAL FRAKTUR SMALL L 1D52A;1D52A;1D52A;006D;006D; # (𝔪; 𝔪; 𝔪; m; m; ) MATHEMATICAL FRAKTUR SMALL M 1D52B;1D52B;1D52B;006E;006E; # (𝔫; 𝔫; 𝔫; n; n; ) MATHEMATICAL FRAKTUR SMALL N 1D52C;1D52C;1D52C;006F;006F; # (𝔬; 𝔬; 𝔬; o; o; ) MATHEMATICAL FRAKTUR SMALL O 1D52D;1D52D;1D52D;0070;0070; # (𝔭; 𝔭; 𝔭; p; p; ) MATHEMATICAL FRAKTUR SMALL P 1D52E;1D52E;1D52E;0071;0071; # (𝔮; 𝔮; 𝔮; q; q; ) MATHEMATICAL FRAKTUR SMALL Q 1D52F;1D52F;1D52F;0072;0072; # (𝔯; 𝔯; 𝔯; r; r; ) MATHEMATICAL FRAKTUR SMALL R 1D530;1D530;1D530;0073;0073; # (𝔰; 𝔰; 𝔰; s; s; ) MATHEMATICAL FRAKTUR SMALL S 1D531;1D531;1D531;0074;0074; # (𝔱; 𝔱; 𝔱; t; t; ) MATHEMATICAL FRAKTUR SMALL T 1D532;1D532;1D532;0075;0075; # (𝔲; 𝔲; 𝔲; u; u; ) MATHEMATICAL FRAKTUR SMALL U 1D533;1D533;1D533;0076;0076; # (𝔳; 𝔳; 𝔳; v; v; ) MATHEMATICAL FRAKTUR SMALL V 1D534;1D534;1D534;0077;0077; # (𝔴; 𝔴; 𝔴; w; w; ) MATHEMATICAL FRAKTUR SMALL W 1D535;1D535;1D535;0078;0078; # (𝔵; 𝔵; 𝔵; x; x; ) MATHEMATICAL FRAKTUR SMALL X 1D536;1D536;1D536;0079;0079; # (𝔶; 𝔶; 𝔶; y; y; ) MATHEMATICAL FRAKTUR SMALL Y 1D537;1D537;1D537;007A;007A; # (𝔷; 𝔷; 𝔷; z; z; ) MATHEMATICAL FRAKTUR SMALL Z 1D538;1D538;1D538;0041;0041; # (𝔸; 𝔸; 𝔸; A; A; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL A 1D539;1D539;1D539;0042;0042; # (𝔹; 𝔹; 𝔹; B; B; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL B 1D53B;1D53B;1D53B;0044;0044; # (𝔻; 𝔻; 𝔻; D; D; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL D 1D53C;1D53C;1D53C;0045;0045; # (𝔼; 𝔼; 𝔼; E; E; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL E 1D53D;1D53D;1D53D;0046;0046; # (𝔽; 𝔽; 𝔽; F; F; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL F 1D53E;1D53E;1D53E;0047;0047; # (𝔾; 𝔾; 𝔾; G; G; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL G 1D540;1D540;1D540;0049;0049; # (𝕀; 𝕀; 𝕀; I; I; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL I 1D541;1D541;1D541;004A;004A; # (𝕁; 𝕁; 𝕁; J; J; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL J 1D542;1D542;1D542;004B;004B; # (𝕂; 𝕂; 𝕂; K; K; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL K 1D543;1D543;1D543;004C;004C; # (𝕃; 𝕃; 𝕃; L; L; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL L 1D544;1D544;1D544;004D;004D; # (𝕄; 𝕄; 𝕄; M; M; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1D546;1D546;1D546;004F;004F; # (𝕆; 𝕆; 𝕆; O; O; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D54A;1D54A;1D54A;0053;0053; # (𝕊; 𝕊; 𝕊; S; S; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL S 1D54B;1D54B;1D54B;0054;0054; # (𝕋; 𝕋; 𝕋; T; T; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL T 1D54C;1D54C;1D54C;0055;0055; # (𝕌; 𝕌; 𝕌; U; U; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL U 1D54D;1D54D;1D54D;0056;0056; # (𝕍; 𝕍; 𝕍; V; V; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL V 1D54E;1D54E;1D54E;0057;0057; # (𝕎; 𝕎; 𝕎; W; W; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL W 1D54F;1D54F;1D54F;0058;0058; # (𝕏; 𝕏; 𝕏; X; X; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL X 1D550;1D550;1D550;0059;0059; # (𝕐; 𝕐; 𝕐; Y; Y; ) MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1D552;1D552;1D552;0061;0061; # (𝕒; 𝕒; 𝕒; a; a; ) MATHEMATICAL DOUBLE-STRUCK SMALL A 1D553;1D553;1D553;0062;0062; # (𝕓; 𝕓; 𝕓; b; b; ) MATHEMATICAL DOUBLE-STRUCK SMALL B 1D554;1D554;1D554;0063;0063; # (𝕔; 𝕔; 𝕔; c; c; ) MATHEMATICAL DOUBLE-STRUCK SMALL C 1D555;1D555;1D555;0064;0064; # (𝕕; 𝕕; 𝕕; d; d; ) MATHEMATICAL DOUBLE-STRUCK SMALL D 1D556;1D556;1D556;0065;0065; # (𝕖; 𝕖; 𝕖; e; e; ) MATHEMATICAL DOUBLE-STRUCK SMALL E 1D557;1D557;1D557;0066;0066; # (𝕗; 𝕗; 𝕗; f; f; ) MATHEMATICAL DOUBLE-STRUCK SMALL F 1D558;1D558;1D558;0067;0067; # (𝕘; 𝕘; 𝕘; g; g; ) MATHEMATICAL DOUBLE-STRUCK SMALL G 1D559;1D559;1D559;0068;0068; # (𝕙; 𝕙; 𝕙; h; h; ) MATHEMATICAL DOUBLE-STRUCK SMALL H 1D55A;1D55A;1D55A;0069;0069; # (𝕚; 𝕚; 𝕚; i; i; ) MATHEMATICAL DOUBLE-STRUCK SMALL I 1D55B;1D55B;1D55B;006A;006A; # (𝕛; 𝕛; 𝕛; j; j; ) MATHEMATICAL DOUBLE-STRUCK SMALL J 1D55C;1D55C;1D55C;006B;006B; # (𝕜; 𝕜; 𝕜; k; k; ) MATHEMATICAL DOUBLE-STRUCK SMALL K 1D55D;1D55D;1D55D;006C;006C; # (𝕝; 𝕝; 𝕝; l; l; ) MATHEMATICAL DOUBLE-STRUCK SMALL L 1D55E;1D55E;1D55E;006D;006D; # (𝕞; 𝕞; 𝕞; m; m; ) MATHEMATICAL DOUBLE-STRUCK SMALL M 1D55F;1D55F;1D55F;006E;006E; # (𝕟; 𝕟; 𝕟; n; n; ) MATHEMATICAL DOUBLE-STRUCK SMALL N 1D560;1D560;1D560;006F;006F; # (𝕠; 𝕠; 𝕠; o; o; ) MATHEMATICAL DOUBLE-STRUCK SMALL O 1D561;1D561;1D561;0070;0070; # (𝕡; 𝕡; 𝕡; p; p; ) MATHEMATICAL DOUBLE-STRUCK SMALL P 1D562;1D562;1D562;0071;0071; # (𝕢; 𝕢; 𝕢; q; q; ) MATHEMATICAL DOUBLE-STRUCK SMALL Q 1D563;1D563;1D563;0072;0072; # (𝕣; 𝕣; 𝕣; r; r; ) MATHEMATICAL DOUBLE-STRUCK SMALL R 1D564;1D564;1D564;0073;0073; # (𝕤; 𝕤; 𝕤; s; s; ) MATHEMATICAL DOUBLE-STRUCK SMALL S 1D565;1D565;1D565;0074;0074; # (𝕥; 𝕥; 𝕥; t; t; ) MATHEMATICAL DOUBLE-STRUCK SMALL T 1D566;1D566;1D566;0075;0075; # (𝕦; 𝕦; 𝕦; u; u; ) MATHEMATICAL DOUBLE-STRUCK SMALL U 1D567;1D567;1D567;0076;0076; # (𝕧; 𝕧; 𝕧; v; v; ) MATHEMATICAL DOUBLE-STRUCK SMALL V 1D568;1D568;1D568;0077;0077; # (𝕨; 𝕨; 𝕨; w; w; ) MATHEMATICAL DOUBLE-STRUCK SMALL W 1D569;1D569;1D569;0078;0078; # (𝕩; 𝕩; 𝕩; x; x; ) MATHEMATICAL DOUBLE-STRUCK SMALL X 1D56A;1D56A;1D56A;0079;0079; # (𝕪; 𝕪; 𝕪; y; y; ) MATHEMATICAL DOUBLE-STRUCK SMALL Y 1D56B;1D56B;1D56B;007A;007A; # (𝕫; 𝕫; 𝕫; z; z; ) MATHEMATICAL DOUBLE-STRUCK SMALL Z 1D56C;1D56C;1D56C;0041;0041; # (𝕬; 𝕬; 𝕬; A; A; ) MATHEMATICAL BOLD FRAKTUR CAPITAL A 1D56D;1D56D;1D56D;0042;0042; # (𝕭; 𝕭; 𝕭; B; B; ) MATHEMATICAL BOLD FRAKTUR CAPITAL B 1D56E;1D56E;1D56E;0043;0043; # (𝕮; 𝕮; 𝕮; C; C; ) MATHEMATICAL BOLD FRAKTUR CAPITAL C 1D56F;1D56F;1D56F;0044;0044; # (𝕯; 𝕯; 𝕯; D; D; ) MATHEMATICAL BOLD FRAKTUR CAPITAL D 1D570;1D570;1D570;0045;0045; # (𝕰; 𝕰; 𝕰; E; E; ) MATHEMATICAL BOLD FRAKTUR CAPITAL E 1D571;1D571;1D571;0046;0046; # (𝕱; 𝕱; 𝕱; F; F; ) MATHEMATICAL BOLD FRAKTUR CAPITAL F 1D572;1D572;1D572;0047;0047; # (𝕲; 𝕲; 𝕲; G; G; ) MATHEMATICAL BOLD FRAKTUR CAPITAL G 1D573;1D573;1D573;0048;0048; # (𝕳; 𝕳; 𝕳; H; H; ) MATHEMATICAL BOLD FRAKTUR CAPITAL H 1D574;1D574;1D574;0049;0049; # (𝕴; 𝕴; 𝕴; I; I; ) MATHEMATICAL BOLD FRAKTUR CAPITAL I 1D575;1D575;1D575;004A;004A; # (𝕵; 𝕵; 𝕵; J; J; ) MATHEMATICAL BOLD FRAKTUR CAPITAL J 1D576;1D576;1D576;004B;004B; # (𝕶; 𝕶; 𝕶; K; K; ) MATHEMATICAL BOLD FRAKTUR CAPITAL K 1D577;1D577;1D577;004C;004C; # (𝕷; 𝕷; 𝕷; L; L; ) MATHEMATICAL BOLD FRAKTUR CAPITAL L 1D578;1D578;1D578;004D;004D; # (𝕸; 𝕸; 𝕸; M; M; ) MATHEMATICAL BOLD FRAKTUR CAPITAL M 1D579;1D579;1D579;004E;004E; # (𝕹; 𝕹; 𝕹; N; N; ) MATHEMATICAL BOLD FRAKTUR CAPITAL N 1D57A;1D57A;1D57A;004F;004F; # (𝕺; 𝕺; 𝕺; O; O; ) MATHEMATICAL BOLD FRAKTUR CAPITAL O 1D57B;1D57B;1D57B;0050;0050; # (𝕻; 𝕻; 𝕻; P; P; ) MATHEMATICAL BOLD FRAKTUR CAPITAL P 1D57C;1D57C;1D57C;0051;0051; # (𝕼; 𝕼; 𝕼; Q; Q; ) MATHEMATICAL BOLD FRAKTUR CAPITAL Q 1D57D;1D57D;1D57D;0052;0052; # (𝕽; 𝕽; 𝕽; R; R; ) MATHEMATICAL BOLD FRAKTUR CAPITAL R 1D57E;1D57E;1D57E;0053;0053; # (𝕾; 𝕾; 𝕾; S; S; ) MATHEMATICAL BOLD FRAKTUR CAPITAL S 1D57F;1D57F;1D57F;0054;0054; # (𝕿; 𝕿; 𝕿; T; T; ) MATHEMATICAL BOLD FRAKTUR CAPITAL T 1D580;1D580;1D580;0055;0055; # (𝖀; 𝖀; 𝖀; U; U; ) MATHEMATICAL BOLD FRAKTUR CAPITAL U 1D581;1D581;1D581;0056;0056; # (𝖁; 𝖁; 𝖁; V; V; ) MATHEMATICAL BOLD FRAKTUR CAPITAL V 1D582;1D582;1D582;0057;0057; # (𝖂; 𝖂; 𝖂; W; W; ) MATHEMATICAL BOLD FRAKTUR CAPITAL W 1D583;1D583;1D583;0058;0058; # (𝖃; 𝖃; 𝖃; X; X; ) MATHEMATICAL BOLD FRAKTUR CAPITAL X 1D584;1D584;1D584;0059;0059; # (𝖄; 𝖄; 𝖄; Y; Y; ) MATHEMATICAL BOLD FRAKTUR CAPITAL Y 1D585;1D585;1D585;005A;005A; # (𝖅; 𝖅; 𝖅; Z; Z; ) MATHEMATICAL BOLD FRAKTUR CAPITAL Z 1D586;1D586;1D586;0061;0061; # (𝖆; 𝖆; 𝖆; a; a; ) MATHEMATICAL BOLD FRAKTUR SMALL A 1D587;1D587;1D587;0062;0062; # (𝖇; 𝖇; 𝖇; b; b; ) MATHEMATICAL BOLD FRAKTUR SMALL B 1D588;1D588;1D588;0063;0063; # (𝖈; 𝖈; 𝖈; c; c; ) MATHEMATICAL BOLD FRAKTUR SMALL C 1D589;1D589;1D589;0064;0064; # (𝖉; 𝖉; 𝖉; d; d; ) MATHEMATICAL BOLD FRAKTUR SMALL D 1D58A;1D58A;1D58A;0065;0065; # (𝖊; 𝖊; 𝖊; e; e; ) MATHEMATICAL BOLD FRAKTUR SMALL E 1D58B;1D58B;1D58B;0066;0066; # (𝖋; 𝖋; 𝖋; f; f; ) MATHEMATICAL BOLD FRAKTUR SMALL F 1D58C;1D58C;1D58C;0067;0067; # (𝖌; 𝖌; 𝖌; g; g; ) MATHEMATICAL BOLD FRAKTUR SMALL G 1D58D;1D58D;1D58D;0068;0068; # (𝖍; 𝖍; 𝖍; h; h; ) MATHEMATICAL BOLD FRAKTUR SMALL H 1D58E;1D58E;1D58E;0069;0069; # (𝖎; 𝖎; 𝖎; i; i; ) MATHEMATICAL BOLD FRAKTUR SMALL I 1D58F;1D58F;1D58F;006A;006A; # (𝖏; 𝖏; 𝖏; j; j; ) MATHEMATICAL BOLD FRAKTUR SMALL J 1D590;1D590;1D590;006B;006B; # (𝖐; 𝖐; 𝖐; k; k; ) MATHEMATICAL BOLD FRAKTUR SMALL K 1D591;1D591;1D591;006C;006C; # (𝖑; 𝖑; 𝖑; l; l; ) MATHEMATICAL BOLD FRAKTUR SMALL L 1D592;1D592;1D592;006D;006D; # (𝖒; 𝖒; 𝖒; m; m; ) MATHEMATICAL BOLD FRAKTUR SMALL M 1D593;1D593;1D593;006E;006E; # (𝖓; 𝖓; 𝖓; n; n; ) MATHEMATICAL BOLD FRAKTUR SMALL N 1D594;1D594;1D594;006F;006F; # (𝖔; 𝖔; 𝖔; o; o; ) MATHEMATICAL BOLD FRAKTUR SMALL O 1D595;1D595;1D595;0070;0070; # (𝖕; 𝖕; 𝖕; p; p; ) MATHEMATICAL BOLD FRAKTUR SMALL P 1D596;1D596;1D596;0071;0071; # (𝖖; 𝖖; 𝖖; q; q; ) MATHEMATICAL BOLD FRAKTUR SMALL Q 1D597;1D597;1D597;0072;0072; # (𝖗; 𝖗; 𝖗; r; r; ) MATHEMATICAL BOLD FRAKTUR SMALL R 1D598;1D598;1D598;0073;0073; # (𝖘; 𝖘; 𝖘; s; s; ) MATHEMATICAL BOLD FRAKTUR SMALL S 1D599;1D599;1D599;0074;0074; # (𝖙; 𝖙; 𝖙; t; t; ) MATHEMATICAL BOLD FRAKTUR SMALL T 1D59A;1D59A;1D59A;0075;0075; # (𝖚; 𝖚; 𝖚; u; u; ) MATHEMATICAL BOLD FRAKTUR SMALL U 1D59B;1D59B;1D59B;0076;0076; # (𝖛; 𝖛; 𝖛; v; v; ) MATHEMATICAL BOLD FRAKTUR SMALL V 1D59C;1D59C;1D59C;0077;0077; # (𝖜; 𝖜; 𝖜; w; w; ) MATHEMATICAL BOLD FRAKTUR SMALL W 1D59D;1D59D;1D59D;0078;0078; # (𝖝; 𝖝; 𝖝; x; x; ) MATHEMATICAL BOLD FRAKTUR SMALL X 1D59E;1D59E;1D59E;0079;0079; # (𝖞; 𝖞; 𝖞; y; y; ) MATHEMATICAL BOLD FRAKTUR SMALL Y 1D59F;1D59F;1D59F;007A;007A; # (𝖟; 𝖟; 𝖟; z; z; ) MATHEMATICAL BOLD FRAKTUR SMALL Z 1D5A0;1D5A0;1D5A0;0041;0041; # (𝖠; 𝖠; 𝖠; A; A; ) MATHEMATICAL SANS-SERIF CAPITAL A 1D5A1;1D5A1;1D5A1;0042;0042; # (𝖡; 𝖡; 𝖡; B; B; ) MATHEMATICAL SANS-SERIF CAPITAL B 1D5A2;1D5A2;1D5A2;0043;0043; # (𝖢; 𝖢; 𝖢; C; C; ) MATHEMATICAL SANS-SERIF CAPITAL C 1D5A3;1D5A3;1D5A3;0044;0044; # (𝖣; 𝖣; 𝖣; D; D; ) MATHEMATICAL SANS-SERIF CAPITAL D 1D5A4;1D5A4;1D5A4;0045;0045; # (𝖤; 𝖤; 𝖤; E; E; ) MATHEMATICAL SANS-SERIF CAPITAL E 1D5A5;1D5A5;1D5A5;0046;0046; # (𝖥; 𝖥; 𝖥; F; F; ) MATHEMATICAL SANS-SERIF CAPITAL F 1D5A6;1D5A6;1D5A6;0047;0047; # (𝖦; 𝖦; 𝖦; G; G; ) MATHEMATICAL SANS-SERIF CAPITAL G 1D5A7;1D5A7;1D5A7;0048;0048; # (𝖧; 𝖧; 𝖧; H; H; ) MATHEMATICAL SANS-SERIF CAPITAL H 1D5A8;1D5A8;1D5A8;0049;0049; # (𝖨; 𝖨; 𝖨; I; I; ) MATHEMATICAL SANS-SERIF CAPITAL I 1D5A9;1D5A9;1D5A9;004A;004A; # (𝖩; 𝖩; 𝖩; J; J; ) MATHEMATICAL SANS-SERIF CAPITAL J 1D5AA;1D5AA;1D5AA;004B;004B; # (𝖪; 𝖪; 𝖪; K; K; ) MATHEMATICAL SANS-SERIF CAPITAL K 1D5AB;1D5AB;1D5AB;004C;004C; # (𝖫; 𝖫; 𝖫; L; L; ) MATHEMATICAL SANS-SERIF CAPITAL L 1D5AC;1D5AC;1D5AC;004D;004D; # (𝖬; 𝖬; 𝖬; M; M; ) MATHEMATICAL SANS-SERIF CAPITAL M 1D5AD;1D5AD;1D5AD;004E;004E; # (𝖭; 𝖭; 𝖭; N; N; ) MATHEMATICAL SANS-SERIF CAPITAL N 1D5AE;1D5AE;1D5AE;004F;004F; # (𝖮; 𝖮; 𝖮; O; O; ) MATHEMATICAL SANS-SERIF CAPITAL O 1D5AF;1D5AF;1D5AF;0050;0050; # (𝖯; 𝖯; 𝖯; P; P; ) MATHEMATICAL SANS-SERIF CAPITAL P 1D5B0;1D5B0;1D5B0;0051;0051; # (𝖰; 𝖰; 𝖰; Q; Q; ) MATHEMATICAL SANS-SERIF CAPITAL Q 1D5B1;1D5B1;1D5B1;0052;0052; # (𝖱; 𝖱; 𝖱; R; R; ) MATHEMATICAL SANS-SERIF CAPITAL R 1D5B2;1D5B2;1D5B2;0053;0053; # (𝖲; 𝖲; 𝖲; S; S; ) MATHEMATICAL SANS-SERIF CAPITAL S 1D5B3;1D5B3;1D5B3;0054;0054; # (𝖳; 𝖳; 𝖳; T; T; ) MATHEMATICAL SANS-SERIF CAPITAL T 1D5B4;1D5B4;1D5B4;0055;0055; # (𝖴; 𝖴; 𝖴; U; U; ) MATHEMATICAL SANS-SERIF CAPITAL U 1D5B5;1D5B5;1D5B5;0056;0056; # (𝖵; 𝖵; 𝖵; V; V; ) MATHEMATICAL SANS-SERIF CAPITAL V 1D5B6;1D5B6;1D5B6;0057;0057; # (𝖶; 𝖶; 𝖶; W; W; ) MATHEMATICAL SANS-SERIF CAPITAL W 1D5B7;1D5B7;1D5B7;0058;0058; # (𝖷; 𝖷; 𝖷; X; X; ) MATHEMATICAL SANS-SERIF CAPITAL X 1D5B8;1D5B8;1D5B8;0059;0059; # (𝖸; 𝖸; 𝖸; Y; Y; ) MATHEMATICAL SANS-SERIF CAPITAL Y 1D5B9;1D5B9;1D5B9;005A;005A; # (𝖹; 𝖹; 𝖹; Z; Z; ) MATHEMATICAL SANS-SERIF CAPITAL Z 1D5BA;1D5BA;1D5BA;0061;0061; # (𝖺; 𝖺; 𝖺; a; a; ) MATHEMATICAL SANS-SERIF SMALL A 1D5BB;1D5BB;1D5BB;0062;0062; # (𝖻; 𝖻; 𝖻; b; b; ) MATHEMATICAL SANS-SERIF SMALL B 1D5BC;1D5BC;1D5BC;0063;0063; # (𝖼; 𝖼; 𝖼; c; c; ) MATHEMATICAL SANS-SERIF SMALL C 1D5BD;1D5BD;1D5BD;0064;0064; # (𝖽; 𝖽; 𝖽; d; d; ) MATHEMATICAL SANS-SERIF SMALL D 1D5BE;1D5BE;1D5BE;0065;0065; # (𝖾; 𝖾; 𝖾; e; e; ) MATHEMATICAL SANS-SERIF SMALL E 1D5BF;1D5BF;1D5BF;0066;0066; # (𝖿; 𝖿; 𝖿; f; f; ) MATHEMATICAL SANS-SERIF SMALL F 1D5C0;1D5C0;1D5C0;0067;0067; # (𝗀; 𝗀; 𝗀; g; g; ) MATHEMATICAL SANS-SERIF SMALL G 1D5C1;1D5C1;1D5C1;0068;0068; # (𝗁; 𝗁; 𝗁; h; h; ) MATHEMATICAL SANS-SERIF SMALL H 1D5C2;1D5C2;1D5C2;0069;0069; # (𝗂; 𝗂; 𝗂; i; i; ) MATHEMATICAL SANS-SERIF SMALL I 1D5C3;1D5C3;1D5C3;006A;006A; # (𝗃; 𝗃; 𝗃; j; j; ) MATHEMATICAL SANS-SERIF SMALL J 1D5C4;1D5C4;1D5C4;006B;006B; # (𝗄; 𝗄; 𝗄; k; k; ) MATHEMATICAL SANS-SERIF SMALL K 1D5C5;1D5C5;1D5C5;006C;006C; # (𝗅; 𝗅; 𝗅; l; l; ) MATHEMATICAL SANS-SERIF SMALL L 1D5C6;1D5C6;1D5C6;006D;006D; # (𝗆; 𝗆; 𝗆; m; m; ) MATHEMATICAL SANS-SERIF SMALL M 1D5C7;1D5C7;1D5C7;006E;006E; # (𝗇; 𝗇; 𝗇; n; n; ) MATHEMATICAL SANS-SERIF SMALL N 1D5C8;1D5C8;1D5C8;006F;006F; # (𝗈; 𝗈; 𝗈; o; o; ) MATHEMATICAL SANS-SERIF SMALL O 1D5C9;1D5C9;1D5C9;0070;0070; # (𝗉; 𝗉; 𝗉; p; p; ) MATHEMATICAL SANS-SERIF SMALL P 1D5CA;1D5CA;1D5CA;0071;0071; # (𝗊; 𝗊; 𝗊; q; q; ) MATHEMATICAL SANS-SERIF SMALL Q 1D5CB;1D5CB;1D5CB;0072;0072; # (𝗋; 𝗋; 𝗋; r; r; ) MATHEMATICAL SANS-SERIF SMALL R 1D5CC;1D5CC;1D5CC;0073;0073; # (𝗌; 𝗌; 𝗌; s; s; ) MATHEMATICAL SANS-SERIF SMALL S 1D5CD;1D5CD;1D5CD;0074;0074; # (𝗍; 𝗍; 𝗍; t; t; ) MATHEMATICAL SANS-SERIF SMALL T 1D5CE;1D5CE;1D5CE;0075;0075; # (𝗎; 𝗎; 𝗎; u; u; ) MATHEMATICAL SANS-SERIF SMALL U 1D5CF;1D5CF;1D5CF;0076;0076; # (𝗏; 𝗏; 𝗏; v; v; ) MATHEMATICAL SANS-SERIF SMALL V 1D5D0;1D5D0;1D5D0;0077;0077; # (𝗐; 𝗐; 𝗐; w; w; ) MATHEMATICAL SANS-SERIF SMALL W 1D5D1;1D5D1;1D5D1;0078;0078; # (𝗑; 𝗑; 𝗑; x; x; ) MATHEMATICAL SANS-SERIF SMALL X 1D5D2;1D5D2;1D5D2;0079;0079; # (𝗒; 𝗒; 𝗒; y; y; ) MATHEMATICAL SANS-SERIF SMALL Y 1D5D3;1D5D3;1D5D3;007A;007A; # (𝗓; 𝗓; 𝗓; z; z; ) MATHEMATICAL SANS-SERIF SMALL Z 1D5D4;1D5D4;1D5D4;0041;0041; # (𝗔; 𝗔; 𝗔; A; A; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL A 1D5D5;1D5D5;1D5D5;0042;0042; # (𝗕; 𝗕; 𝗕; B; B; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL B 1D5D6;1D5D6;1D5D6;0043;0043; # (𝗖; 𝗖; 𝗖; C; C; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL C 1D5D7;1D5D7;1D5D7;0044;0044; # (𝗗; 𝗗; 𝗗; D; D; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL D 1D5D8;1D5D8;1D5D8;0045;0045; # (𝗘; 𝗘; 𝗘; E; E; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL E 1D5D9;1D5D9;1D5D9;0046;0046; # (𝗙; 𝗙; 𝗙; F; F; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL F 1D5DA;1D5DA;1D5DA;0047;0047; # (𝗚; 𝗚; 𝗚; G; G; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL G 1D5DB;1D5DB;1D5DB;0048;0048; # (𝗛; 𝗛; 𝗛; H; H; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL H 1D5DC;1D5DC;1D5DC;0049;0049; # (𝗜; 𝗜; 𝗜; I; I; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL I 1D5DD;1D5DD;1D5DD;004A;004A; # (𝗝; 𝗝; 𝗝; J; J; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL J 1D5DE;1D5DE;1D5DE;004B;004B; # (𝗞; 𝗞; 𝗞; K; K; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL K 1D5DF;1D5DF;1D5DF;004C;004C; # (𝗟; 𝗟; 𝗟; L; L; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL L 1D5E0;1D5E0;1D5E0;004D;004D; # (𝗠; 𝗠; 𝗠; M; M; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL M 1D5E1;1D5E1;1D5E1;004E;004E; # (𝗡; 𝗡; 𝗡; N; N; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL N 1D5E2;1D5E2;1D5E2;004F;004F; # (𝗢; 𝗢; 𝗢; O; O; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL O 1D5E3;1D5E3;1D5E3;0050;0050; # (𝗣; 𝗣; 𝗣; P; P; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL P 1D5E4;1D5E4;1D5E4;0051;0051; # (𝗤; 𝗤; 𝗤; Q; Q; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL Q 1D5E5;1D5E5;1D5E5;0052;0052; # (𝗥; 𝗥; 𝗥; R; R; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL R 1D5E6;1D5E6;1D5E6;0053;0053; # (𝗦; 𝗦; 𝗦; S; S; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL S 1D5E7;1D5E7;1D5E7;0054;0054; # (𝗧; 𝗧; 𝗧; T; T; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL T 1D5E8;1D5E8;1D5E8;0055;0055; # (𝗨; 𝗨; 𝗨; U; U; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL U 1D5E9;1D5E9;1D5E9;0056;0056; # (𝗩; 𝗩; 𝗩; V; V; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL V 1D5EA;1D5EA;1D5EA;0057;0057; # (𝗪; 𝗪; 𝗪; W; W; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL W 1D5EB;1D5EB;1D5EB;0058;0058; # (𝗫; 𝗫; 𝗫; X; X; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL X 1D5EC;1D5EC;1D5EC;0059;0059; # (𝗬; 𝗬; 𝗬; Y; Y; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL Y 1D5ED;1D5ED;1D5ED;005A;005A; # (𝗭; 𝗭; 𝗭; Z; Z; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL Z 1D5EE;1D5EE;1D5EE;0061;0061; # (𝗮; 𝗮; 𝗮; a; a; ) MATHEMATICAL SANS-SERIF BOLD SMALL A 1D5EF;1D5EF;1D5EF;0062;0062; # (𝗯; 𝗯; 𝗯; b; b; ) MATHEMATICAL SANS-SERIF BOLD SMALL B 1D5F0;1D5F0;1D5F0;0063;0063; # (𝗰; 𝗰; 𝗰; c; c; ) MATHEMATICAL SANS-SERIF BOLD SMALL C 1D5F1;1D5F1;1D5F1;0064;0064; # (𝗱; 𝗱; 𝗱; d; d; ) MATHEMATICAL SANS-SERIF BOLD SMALL D 1D5F2;1D5F2;1D5F2;0065;0065; # (𝗲; 𝗲; 𝗲; e; e; ) MATHEMATICAL SANS-SERIF BOLD SMALL E 1D5F3;1D5F3;1D5F3;0066;0066; # (𝗳; 𝗳; 𝗳; f; f; ) MATHEMATICAL SANS-SERIF BOLD SMALL F 1D5F4;1D5F4;1D5F4;0067;0067; # (𝗴; 𝗴; 𝗴; g; g; ) MATHEMATICAL SANS-SERIF BOLD SMALL G 1D5F5;1D5F5;1D5F5;0068;0068; # (𝗵; 𝗵; 𝗵; h; h; ) MATHEMATICAL SANS-SERIF BOLD SMALL H 1D5F6;1D5F6;1D5F6;0069;0069; # (𝗶; 𝗶; 𝗶; i; i; ) MATHEMATICAL SANS-SERIF BOLD SMALL I 1D5F7;1D5F7;1D5F7;006A;006A; # (𝗷; 𝗷; 𝗷; j; j; ) MATHEMATICAL SANS-SERIF BOLD SMALL J 1D5F8;1D5F8;1D5F8;006B;006B; # (𝗸; 𝗸; 𝗸; k; k; ) MATHEMATICAL SANS-SERIF BOLD SMALL K 1D5F9;1D5F9;1D5F9;006C;006C; # (𝗹; 𝗹; 𝗹; l; l; ) MATHEMATICAL SANS-SERIF BOLD SMALL L 1D5FA;1D5FA;1D5FA;006D;006D; # (𝗺; 𝗺; 𝗺; m; m; ) MATHEMATICAL SANS-SERIF BOLD SMALL M 1D5FB;1D5FB;1D5FB;006E;006E; # (𝗻; 𝗻; 𝗻; n; n; ) MATHEMATICAL SANS-SERIF BOLD SMALL N 1D5FC;1D5FC;1D5FC;006F;006F; # (𝗼; 𝗼; 𝗼; o; o; ) MATHEMATICAL SANS-SERIF BOLD SMALL O 1D5FD;1D5FD;1D5FD;0070;0070; # (𝗽; 𝗽; 𝗽; p; p; ) MATHEMATICAL SANS-SERIF BOLD SMALL P 1D5FE;1D5FE;1D5FE;0071;0071; # (𝗾; 𝗾; 𝗾; q; q; ) MATHEMATICAL SANS-SERIF BOLD SMALL Q 1D5FF;1D5FF;1D5FF;0072;0072; # (𝗿; 𝗿; 𝗿; r; r; ) MATHEMATICAL SANS-SERIF BOLD SMALL R 1D600;1D600;1D600;0073;0073; # (𝘀; 𝘀; 𝘀; s; s; ) MATHEMATICAL SANS-SERIF BOLD SMALL S 1D601;1D601;1D601;0074;0074; # (𝘁; 𝘁; 𝘁; t; t; ) MATHEMATICAL SANS-SERIF BOLD SMALL T 1D602;1D602;1D602;0075;0075; # (𝘂; 𝘂; 𝘂; u; u; ) MATHEMATICAL SANS-SERIF BOLD SMALL U 1D603;1D603;1D603;0076;0076; # (𝘃; 𝘃; 𝘃; v; v; ) MATHEMATICAL SANS-SERIF BOLD SMALL V 1D604;1D604;1D604;0077;0077; # (𝘄; 𝘄; 𝘄; w; w; ) MATHEMATICAL SANS-SERIF BOLD SMALL W 1D605;1D605;1D605;0078;0078; # (𝘅; 𝘅; 𝘅; x; x; ) MATHEMATICAL SANS-SERIF BOLD SMALL X 1D606;1D606;1D606;0079;0079; # (𝘆; 𝘆; 𝘆; y; y; ) MATHEMATICAL SANS-SERIF BOLD SMALL Y 1D607;1D607;1D607;007A;007A; # (𝘇; 𝘇; 𝘇; z; z; ) MATHEMATICAL SANS-SERIF BOLD SMALL Z 1D608;1D608;1D608;0041;0041; # (𝘈; 𝘈; 𝘈; A; A; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL A 1D609;1D609;1D609;0042;0042; # (𝘉; 𝘉; 𝘉; B; B; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL B 1D60A;1D60A;1D60A;0043;0043; # (𝘊; 𝘊; 𝘊; C; C; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL C 1D60B;1D60B;1D60B;0044;0044; # (𝘋; 𝘋; 𝘋; D; D; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL D 1D60C;1D60C;1D60C;0045;0045; # (𝘌; 𝘌; 𝘌; E; E; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL E 1D60D;1D60D;1D60D;0046;0046; # (𝘍; 𝘍; 𝘍; F; F; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL F 1D60E;1D60E;1D60E;0047;0047; # (𝘎; 𝘎; 𝘎; G; G; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL G 1D60F;1D60F;1D60F;0048;0048; # (𝘏; 𝘏; 𝘏; H; H; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL H 1D610;1D610;1D610;0049;0049; # (𝘐; 𝘐; 𝘐; I; I; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL I 1D611;1D611;1D611;004A;004A; # (𝘑; 𝘑; 𝘑; J; J; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL J 1D612;1D612;1D612;004B;004B; # (𝘒; 𝘒; 𝘒; K; K; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL K 1D613;1D613;1D613;004C;004C; # (𝘓; 𝘓; 𝘓; L; L; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL L 1D614;1D614;1D614;004D;004D; # (𝘔; 𝘔; 𝘔; M; M; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL M 1D615;1D615;1D615;004E;004E; # (𝘕; 𝘕; 𝘕; N; N; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL N 1D616;1D616;1D616;004F;004F; # (𝘖; 𝘖; 𝘖; O; O; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL O 1D617;1D617;1D617;0050;0050; # (𝘗; 𝘗; 𝘗; P; P; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL P 1D618;1D618;1D618;0051;0051; # (𝘘; 𝘘; 𝘘; Q; Q; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q 1D619;1D619;1D619;0052;0052; # (𝘙; 𝘙; 𝘙; R; R; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL R 1D61A;1D61A;1D61A;0053;0053; # (𝘚; 𝘚; 𝘚; S; S; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL S 1D61B;1D61B;1D61B;0054;0054; # (𝘛; 𝘛; 𝘛; T; T; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL T 1D61C;1D61C;1D61C;0055;0055; # (𝘜; 𝘜; 𝘜; U; U; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL U 1D61D;1D61D;1D61D;0056;0056; # (𝘝; 𝘝; 𝘝; V; V; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL V 1D61E;1D61E;1D61E;0057;0057; # (𝘞; 𝘞; 𝘞; W; W; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL W 1D61F;1D61F;1D61F;0058;0058; # (𝘟; 𝘟; 𝘟; X; X; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL X 1D620;1D620;1D620;0059;0059; # (𝘠; 𝘠; 𝘠; Y; Y; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y 1D621;1D621;1D621;005A;005A; # (𝘡; 𝘡; 𝘡; Z; Z; ) MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z 1D622;1D622;1D622;0061;0061; # (𝘢; 𝘢; 𝘢; a; a; ) MATHEMATICAL SANS-SERIF ITALIC SMALL A 1D623;1D623;1D623;0062;0062; # (𝘣; 𝘣; 𝘣; b; b; ) MATHEMATICAL SANS-SERIF ITALIC SMALL B 1D624;1D624;1D624;0063;0063; # (𝘤; 𝘤; 𝘤; c; c; ) MATHEMATICAL SANS-SERIF ITALIC SMALL C 1D625;1D625;1D625;0064;0064; # (𝘥; 𝘥; 𝘥; d; d; ) MATHEMATICAL SANS-SERIF ITALIC SMALL D 1D626;1D626;1D626;0065;0065; # (𝘦; 𝘦; 𝘦; e; e; ) MATHEMATICAL SANS-SERIF ITALIC SMALL E 1D627;1D627;1D627;0066;0066; # (𝘧; 𝘧; 𝘧; f; f; ) MATHEMATICAL SANS-SERIF ITALIC SMALL F 1D628;1D628;1D628;0067;0067; # (𝘨; 𝘨; 𝘨; g; g; ) MATHEMATICAL SANS-SERIF ITALIC SMALL G 1D629;1D629;1D629;0068;0068; # (𝘩; 𝘩; 𝘩; h; h; ) MATHEMATICAL SANS-SERIF ITALIC SMALL H 1D62A;1D62A;1D62A;0069;0069; # (𝘪; 𝘪; 𝘪; i; i; ) MATHEMATICAL SANS-SERIF ITALIC SMALL I 1D62B;1D62B;1D62B;006A;006A; # (𝘫; 𝘫; 𝘫; j; j; ) MATHEMATICAL SANS-SERIF ITALIC SMALL J 1D62C;1D62C;1D62C;006B;006B; # (𝘬; 𝘬; 𝘬; k; k; ) MATHEMATICAL SANS-SERIF ITALIC SMALL K 1D62D;1D62D;1D62D;006C;006C; # (𝘭; 𝘭; 𝘭; l; l; ) MATHEMATICAL SANS-SERIF ITALIC SMALL L 1D62E;1D62E;1D62E;006D;006D; # (𝘮; 𝘮; 𝘮; m; m; ) MATHEMATICAL SANS-SERIF ITALIC SMALL M 1D62F;1D62F;1D62F;006E;006E; # (𝘯; 𝘯; 𝘯; n; n; ) MATHEMATICAL SANS-SERIF ITALIC SMALL N 1D630;1D630;1D630;006F;006F; # (𝘰; 𝘰; 𝘰; o; o; ) MATHEMATICAL SANS-SERIF ITALIC SMALL O 1D631;1D631;1D631;0070;0070; # (𝘱; 𝘱; 𝘱; p; p; ) MATHEMATICAL SANS-SERIF ITALIC SMALL P 1D632;1D632;1D632;0071;0071; # (𝘲; 𝘲; 𝘲; q; q; ) MATHEMATICAL SANS-SERIF ITALIC SMALL Q 1D633;1D633;1D633;0072;0072; # (𝘳; 𝘳; 𝘳; r; r; ) MATHEMATICAL SANS-SERIF ITALIC SMALL R 1D634;1D634;1D634;0073;0073; # (𝘴; 𝘴; 𝘴; s; s; ) MATHEMATICAL SANS-SERIF ITALIC SMALL S 1D635;1D635;1D635;0074;0074; # (𝘵; 𝘵; 𝘵; t; t; ) MATHEMATICAL SANS-SERIF ITALIC SMALL T 1D636;1D636;1D636;0075;0075; # (𝘶; 𝘶; 𝘶; u; u; ) MATHEMATICAL SANS-SERIF ITALIC SMALL U 1D637;1D637;1D637;0076;0076; # (𝘷; 𝘷; 𝘷; v; v; ) MATHEMATICAL SANS-SERIF ITALIC SMALL V 1D638;1D638;1D638;0077;0077; # (𝘸; 𝘸; 𝘸; w; w; ) MATHEMATICAL SANS-SERIF ITALIC SMALL W 1D639;1D639;1D639;0078;0078; # (𝘹; 𝘹; 𝘹; x; x; ) MATHEMATICAL SANS-SERIF ITALIC SMALL X 1D63A;1D63A;1D63A;0079;0079; # (𝘺; 𝘺; 𝘺; y; y; ) MATHEMATICAL SANS-SERIF ITALIC SMALL Y 1D63B;1D63B;1D63B;007A;007A; # (𝘻; 𝘻; 𝘻; z; z; ) MATHEMATICAL SANS-SERIF ITALIC SMALL Z 1D63C;1D63C;1D63C;0041;0041; # (𝘼; 𝘼; 𝘼; A; A; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A 1D63D;1D63D;1D63D;0042;0042; # (𝘽; 𝘽; 𝘽; B; B; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B 1D63E;1D63E;1D63E;0043;0043; # (𝘾; 𝘾; 𝘾; C; C; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C 1D63F;1D63F;1D63F;0044;0044; # (𝘿; 𝘿; 𝘿; D; D; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D 1D640;1D640;1D640;0045;0045; # (𝙀; 𝙀; 𝙀; E; E; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E 1D641;1D641;1D641;0046;0046; # (𝙁; 𝙁; 𝙁; F; F; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F 1D642;1D642;1D642;0047;0047; # (𝙂; 𝙂; 𝙂; G; G; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G 1D643;1D643;1D643;0048;0048; # (𝙃; 𝙃; 𝙃; H; H; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H 1D644;1D644;1D644;0049;0049; # (𝙄; 𝙄; 𝙄; I; I; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I 1D645;1D645;1D645;004A;004A; # (𝙅; 𝙅; 𝙅; J; J; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J 1D646;1D646;1D646;004B;004B; # (𝙆; 𝙆; 𝙆; K; K; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K 1D647;1D647;1D647;004C;004C; # (𝙇; 𝙇; 𝙇; L; L; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L 1D648;1D648;1D648;004D;004D; # (𝙈; 𝙈; 𝙈; M; M; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M 1D649;1D649;1D649;004E;004E; # (𝙉; 𝙉; 𝙉; N; N; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N 1D64A;1D64A;1D64A;004F;004F; # (𝙊; 𝙊; 𝙊; O; O; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O 1D64B;1D64B;1D64B;0050;0050; # (𝙋; 𝙋; 𝙋; P; P; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P 1D64C;1D64C;1D64C;0051;0051; # (𝙌; 𝙌; 𝙌; Q; Q; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q 1D64D;1D64D;1D64D;0052;0052; # (𝙍; 𝙍; 𝙍; R; R; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R 1D64E;1D64E;1D64E;0053;0053; # (𝙎; 𝙎; 𝙎; S; S; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S 1D64F;1D64F;1D64F;0054;0054; # (𝙏; 𝙏; 𝙏; T; T; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T 1D650;1D650;1D650;0055;0055; # (𝙐; 𝙐; 𝙐; U; U; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U 1D651;1D651;1D651;0056;0056; # (𝙑; 𝙑; 𝙑; V; V; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V 1D652;1D652;1D652;0057;0057; # (𝙒; 𝙒; 𝙒; W; W; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W 1D653;1D653;1D653;0058;0058; # (𝙓; 𝙓; 𝙓; X; X; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X 1D654;1D654;1D654;0059;0059; # (𝙔; 𝙔; 𝙔; Y; Y; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y 1D655;1D655;1D655;005A;005A; # (𝙕; 𝙕; 𝙕; Z; Z; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z 1D656;1D656;1D656;0061;0061; # (𝙖; 𝙖; 𝙖; a; a; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A 1D657;1D657;1D657;0062;0062; # (𝙗; 𝙗; 𝙗; b; b; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B 1D658;1D658;1D658;0063;0063; # (𝙘; 𝙘; 𝙘; c; c; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C 1D659;1D659;1D659;0064;0064; # (𝙙; 𝙙; 𝙙; d; d; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D 1D65A;1D65A;1D65A;0065;0065; # (𝙚; 𝙚; 𝙚; e; e; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E 1D65B;1D65B;1D65B;0066;0066; # (𝙛; 𝙛; 𝙛; f; f; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F 1D65C;1D65C;1D65C;0067;0067; # (𝙜; 𝙜; 𝙜; g; g; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G 1D65D;1D65D;1D65D;0068;0068; # (𝙝; 𝙝; 𝙝; h; h; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H 1D65E;1D65E;1D65E;0069;0069; # (𝙞; 𝙞; 𝙞; i; i; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I 1D65F;1D65F;1D65F;006A;006A; # (𝙟; 𝙟; 𝙟; j; j; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J 1D660;1D660;1D660;006B;006B; # (𝙠; 𝙠; 𝙠; k; k; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K 1D661;1D661;1D661;006C;006C; # (𝙡; 𝙡; 𝙡; l; l; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L 1D662;1D662;1D662;006D;006D; # (𝙢; 𝙢; 𝙢; m; m; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M 1D663;1D663;1D663;006E;006E; # (𝙣; 𝙣; 𝙣; n; n; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N 1D664;1D664;1D664;006F;006F; # (𝙤; 𝙤; 𝙤; o; o; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O 1D665;1D665;1D665;0070;0070; # (𝙥; 𝙥; 𝙥; p; p; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P 1D666;1D666;1D666;0071;0071; # (𝙦; 𝙦; 𝙦; q; q; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q 1D667;1D667;1D667;0072;0072; # (𝙧; 𝙧; 𝙧; r; r; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R 1D668;1D668;1D668;0073;0073; # (𝙨; 𝙨; 𝙨; s; s; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S 1D669;1D669;1D669;0074;0074; # (𝙩; 𝙩; 𝙩; t; t; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T 1D66A;1D66A;1D66A;0075;0075; # (𝙪; 𝙪; 𝙪; u; u; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U 1D66B;1D66B;1D66B;0076;0076; # (𝙫; 𝙫; 𝙫; v; v; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V 1D66C;1D66C;1D66C;0077;0077; # (𝙬; 𝙬; 𝙬; w; w; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W 1D66D;1D66D;1D66D;0078;0078; # (𝙭; 𝙭; 𝙭; x; x; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X 1D66E;1D66E;1D66E;0079;0079; # (𝙮; 𝙮; 𝙮; y; y; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y 1D66F;1D66F;1D66F;007A;007A; # (𝙯; 𝙯; 𝙯; z; z; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z 1D670;1D670;1D670;0041;0041; # (𝙰; 𝙰; 𝙰; A; A; ) MATHEMATICAL MONOSPACE CAPITAL A 1D671;1D671;1D671;0042;0042; # (𝙱; 𝙱; 𝙱; B; B; ) MATHEMATICAL MONOSPACE CAPITAL B 1D672;1D672;1D672;0043;0043; # (𝙲; 𝙲; 𝙲; C; C; ) MATHEMATICAL MONOSPACE CAPITAL C 1D673;1D673;1D673;0044;0044; # (𝙳; 𝙳; 𝙳; D; D; ) MATHEMATICAL MONOSPACE CAPITAL D 1D674;1D674;1D674;0045;0045; # (𝙴; 𝙴; 𝙴; E; E; ) MATHEMATICAL MONOSPACE CAPITAL E 1D675;1D675;1D675;0046;0046; # (𝙵; 𝙵; 𝙵; F; F; ) MATHEMATICAL MONOSPACE CAPITAL F 1D676;1D676;1D676;0047;0047; # (𝙶; 𝙶; 𝙶; G; G; ) MATHEMATICAL MONOSPACE CAPITAL G 1D677;1D677;1D677;0048;0048; # (𝙷; 𝙷; 𝙷; H; H; ) MATHEMATICAL MONOSPACE CAPITAL H 1D678;1D678;1D678;0049;0049; # (𝙸; 𝙸; 𝙸; I; I; ) MATHEMATICAL MONOSPACE CAPITAL I 1D679;1D679;1D679;004A;004A; # (𝙹; 𝙹; 𝙹; J; J; ) MATHEMATICAL MONOSPACE CAPITAL J 1D67A;1D67A;1D67A;004B;004B; # (𝙺; 𝙺; 𝙺; K; K; ) MATHEMATICAL MONOSPACE CAPITAL K 1D67B;1D67B;1D67B;004C;004C; # (𝙻; 𝙻; 𝙻; L; L; ) MATHEMATICAL MONOSPACE CAPITAL L 1D67C;1D67C;1D67C;004D;004D; # (𝙼; 𝙼; 𝙼; M; M; ) MATHEMATICAL MONOSPACE CAPITAL M 1D67D;1D67D;1D67D;004E;004E; # (𝙽; 𝙽; 𝙽; N; N; ) MATHEMATICAL MONOSPACE CAPITAL N 1D67E;1D67E;1D67E;004F;004F; # (𝙾; 𝙾; 𝙾; O; O; ) MATHEMATICAL MONOSPACE CAPITAL O 1D67F;1D67F;1D67F;0050;0050; # (𝙿; 𝙿; 𝙿; P; P; ) MATHEMATICAL MONOSPACE CAPITAL P 1D680;1D680;1D680;0051;0051; # (𝚀; 𝚀; 𝚀; Q; Q; ) MATHEMATICAL MONOSPACE CAPITAL Q 1D681;1D681;1D681;0052;0052; # (𝚁; 𝚁; 𝚁; R; R; ) MATHEMATICAL MONOSPACE CAPITAL R 1D682;1D682;1D682;0053;0053; # (𝚂; 𝚂; 𝚂; S; S; ) MATHEMATICAL MONOSPACE CAPITAL S 1D683;1D683;1D683;0054;0054; # (𝚃; 𝚃; 𝚃; T; T; ) MATHEMATICAL MONOSPACE CAPITAL T 1D684;1D684;1D684;0055;0055; # (𝚄; 𝚄; 𝚄; U; U; ) MATHEMATICAL MONOSPACE CAPITAL U 1D685;1D685;1D685;0056;0056; # (𝚅; 𝚅; 𝚅; V; V; ) MATHEMATICAL MONOSPACE CAPITAL V 1D686;1D686;1D686;0057;0057; # (𝚆; 𝚆; 𝚆; W; W; ) MATHEMATICAL MONOSPACE CAPITAL W 1D687;1D687;1D687;0058;0058; # (𝚇; 𝚇; 𝚇; X; X; ) MATHEMATICAL MONOSPACE CAPITAL X 1D688;1D688;1D688;0059;0059; # (𝚈; 𝚈; 𝚈; Y; Y; ) MATHEMATICAL MONOSPACE CAPITAL Y 1D689;1D689;1D689;005A;005A; # (𝚉; 𝚉; 𝚉; Z; Z; ) MATHEMATICAL MONOSPACE CAPITAL Z 1D68A;1D68A;1D68A;0061;0061; # (𝚊; 𝚊; 𝚊; a; a; ) MATHEMATICAL MONOSPACE SMALL A 1D68B;1D68B;1D68B;0062;0062; # (𝚋; 𝚋; 𝚋; b; b; ) MATHEMATICAL MONOSPACE SMALL B 1D68C;1D68C;1D68C;0063;0063; # (𝚌; 𝚌; 𝚌; c; c; ) MATHEMATICAL MONOSPACE SMALL C 1D68D;1D68D;1D68D;0064;0064; # (𝚍; 𝚍; 𝚍; d; d; ) MATHEMATICAL MONOSPACE SMALL D 1D68E;1D68E;1D68E;0065;0065; # (𝚎; 𝚎; 𝚎; e; e; ) MATHEMATICAL MONOSPACE SMALL E 1D68F;1D68F;1D68F;0066;0066; # (𝚏; 𝚏; 𝚏; f; f; ) MATHEMATICAL MONOSPACE SMALL F 1D690;1D690;1D690;0067;0067; # (𝚐; 𝚐; 𝚐; g; g; ) MATHEMATICAL MONOSPACE SMALL G 1D691;1D691;1D691;0068;0068; # (𝚑; 𝚑; 𝚑; h; h; ) MATHEMATICAL MONOSPACE SMALL H 1D692;1D692;1D692;0069;0069; # (𝚒; 𝚒; 𝚒; i; i; ) MATHEMATICAL MONOSPACE SMALL I 1D693;1D693;1D693;006A;006A; # (𝚓; 𝚓; 𝚓; j; j; ) MATHEMATICAL MONOSPACE SMALL J 1D694;1D694;1D694;006B;006B; # (𝚔; 𝚔; 𝚔; k; k; ) MATHEMATICAL MONOSPACE SMALL K 1D695;1D695;1D695;006C;006C; # (𝚕; 𝚕; 𝚕; l; l; ) MATHEMATICAL MONOSPACE SMALL L 1D696;1D696;1D696;006D;006D; # (𝚖; 𝚖; 𝚖; m; m; ) MATHEMATICAL MONOSPACE SMALL M 1D697;1D697;1D697;006E;006E; # (𝚗; 𝚗; 𝚗; n; n; ) MATHEMATICAL MONOSPACE SMALL N 1D698;1D698;1D698;006F;006F; # (𝚘; 𝚘; 𝚘; o; o; ) MATHEMATICAL MONOSPACE SMALL O 1D699;1D699;1D699;0070;0070; # (𝚙; 𝚙; 𝚙; p; p; ) MATHEMATICAL MONOSPACE SMALL P 1D69A;1D69A;1D69A;0071;0071; # (𝚚; 𝚚; 𝚚; q; q; ) MATHEMATICAL MONOSPACE SMALL Q 1D69B;1D69B;1D69B;0072;0072; # (𝚛; 𝚛; 𝚛; r; r; ) MATHEMATICAL MONOSPACE SMALL R 1D69C;1D69C;1D69C;0073;0073; # (𝚜; 𝚜; 𝚜; s; s; ) MATHEMATICAL MONOSPACE SMALL S 1D69D;1D69D;1D69D;0074;0074; # (𝚝; 𝚝; 𝚝; t; t; ) MATHEMATICAL MONOSPACE SMALL T 1D69E;1D69E;1D69E;0075;0075; # (𝚞; 𝚞; 𝚞; u; u; ) MATHEMATICAL MONOSPACE SMALL U 1D69F;1D69F;1D69F;0076;0076; # (𝚟; 𝚟; 𝚟; v; v; ) MATHEMATICAL MONOSPACE SMALL V 1D6A0;1D6A0;1D6A0;0077;0077; # (𝚠; 𝚠; 𝚠; w; w; ) MATHEMATICAL MONOSPACE SMALL W 1D6A1;1D6A1;1D6A1;0078;0078; # (𝚡; 𝚡; 𝚡; x; x; ) MATHEMATICAL MONOSPACE SMALL X 1D6A2;1D6A2;1D6A2;0079;0079; # (𝚢; 𝚢; 𝚢; y; y; ) MATHEMATICAL MONOSPACE SMALL Y 1D6A3;1D6A3;1D6A3;007A;007A; # (𝚣; 𝚣; 𝚣; z; z; ) MATHEMATICAL MONOSPACE SMALL Z 1D6A4;1D6A4;1D6A4;0131;0131; # (𝚤; 𝚤; 𝚤; ı; ı; ) MATHEMATICAL ITALIC SMALL DOTLESS I 1D6A5;1D6A5;1D6A5;0237;0237; # (𝚥; 𝚥; 𝚥; ȷ; ȷ; ) MATHEMATICAL ITALIC SMALL DOTLESS J 1D6A8;1D6A8;1D6A8;0391;0391; # (𝚨; 𝚨; 𝚨; Α; Α; ) MATHEMATICAL BOLD CAPITAL ALPHA 1D6A9;1D6A9;1D6A9;0392;0392; # (𝚩; 𝚩; 𝚩; Β; Β; ) MATHEMATICAL BOLD CAPITAL BETA 1D6AA;1D6AA;1D6AA;0393;0393; # (𝚪; 𝚪; 𝚪; Γ; Γ; ) MATHEMATICAL BOLD CAPITAL GAMMA 1D6AB;1D6AB;1D6AB;0394;0394; # (𝚫; 𝚫; 𝚫; Δ; Δ; ) MATHEMATICAL BOLD CAPITAL DELTA 1D6AC;1D6AC;1D6AC;0395;0395; # (𝚬; 𝚬; 𝚬; Ε; Ε; ) MATHEMATICAL BOLD CAPITAL EPSILON 1D6AD;1D6AD;1D6AD;0396;0396; # (𝚭; 𝚭; 𝚭; Ζ; Ζ; ) MATHEMATICAL BOLD CAPITAL ZETA 1D6AE;1D6AE;1D6AE;0397;0397; # (𝚮; 𝚮; 𝚮; Η; Η; ) MATHEMATICAL BOLD CAPITAL ETA 1D6AF;1D6AF;1D6AF;0398;0398; # (𝚯; 𝚯; 𝚯; Θ; Θ; ) MATHEMATICAL BOLD CAPITAL THETA 1D6B0;1D6B0;1D6B0;0399;0399; # (𝚰; 𝚰; 𝚰; Ι; Ι; ) MATHEMATICAL BOLD CAPITAL IOTA 1D6B1;1D6B1;1D6B1;039A;039A; # (𝚱; 𝚱; 𝚱; Κ; Κ; ) MATHEMATICAL BOLD CAPITAL KAPPA 1D6B2;1D6B2;1D6B2;039B;039B; # (𝚲; 𝚲; 𝚲; Λ; Λ; ) MATHEMATICAL BOLD CAPITAL LAMDA 1D6B3;1D6B3;1D6B3;039C;039C; # (𝚳; 𝚳; 𝚳; Μ; Μ; ) MATHEMATICAL BOLD CAPITAL MU 1D6B4;1D6B4;1D6B4;039D;039D; # (𝚴; 𝚴; 𝚴; Ν; Ν; ) MATHEMATICAL BOLD CAPITAL NU 1D6B5;1D6B5;1D6B5;039E;039E; # (𝚵; 𝚵; 𝚵; Ξ; Ξ; ) MATHEMATICAL BOLD CAPITAL XI 1D6B6;1D6B6;1D6B6;039F;039F; # (𝚶; 𝚶; 𝚶; Ο; Ο; ) MATHEMATICAL BOLD CAPITAL OMICRON 1D6B7;1D6B7;1D6B7;03A0;03A0; # (𝚷; 𝚷; 𝚷; Π; Π; ) MATHEMATICAL BOLD CAPITAL PI 1D6B8;1D6B8;1D6B8;03A1;03A1; # (𝚸; 𝚸; 𝚸; Ρ; Ρ; ) MATHEMATICAL BOLD CAPITAL RHO 1D6B9;1D6B9;1D6B9;0398;0398; # (𝚹; 𝚹; 𝚹; Θ; Θ; ) MATHEMATICAL BOLD CAPITAL THETA SYMBOL 1D6BA;1D6BA;1D6BA;03A3;03A3; # (𝚺; 𝚺; 𝚺; Σ; Σ; ) MATHEMATICAL BOLD CAPITAL SIGMA 1D6BB;1D6BB;1D6BB;03A4;03A4; # (𝚻; 𝚻; 𝚻; Τ; Τ; ) MATHEMATICAL BOLD CAPITAL TAU 1D6BC;1D6BC;1D6BC;03A5;03A5; # (𝚼; 𝚼; 𝚼; Υ; Υ; ) MATHEMATICAL BOLD CAPITAL UPSILON 1D6BD;1D6BD;1D6BD;03A6;03A6; # (𝚽; 𝚽; 𝚽; Φ; Φ; ) MATHEMATICAL BOLD CAPITAL PHI 1D6BE;1D6BE;1D6BE;03A7;03A7; # (𝚾; 𝚾; 𝚾; Χ; Χ; ) MATHEMATICAL BOLD CAPITAL CHI 1D6BF;1D6BF;1D6BF;03A8;03A8; # (𝚿; 𝚿; 𝚿; Ψ; Ψ; ) MATHEMATICAL BOLD CAPITAL PSI 1D6C0;1D6C0;1D6C0;03A9;03A9; # (𝛀; 𝛀; 𝛀; Ω; Ω; ) MATHEMATICAL BOLD CAPITAL OMEGA 1D6C1;1D6C1;1D6C1;2207;2207; # (𝛁; 𝛁; 𝛁; ∇; ∇; ) MATHEMATICAL BOLD NABLA 1D6C2;1D6C2;1D6C2;03B1;03B1; # (𝛂; 𝛂; 𝛂; α; α; ) MATHEMATICAL BOLD SMALL ALPHA 1D6C3;1D6C3;1D6C3;03B2;03B2; # (𝛃; 𝛃; 𝛃; β; β; ) MATHEMATICAL BOLD SMALL BETA 1D6C4;1D6C4;1D6C4;03B3;03B3; # (𝛄; 𝛄; 𝛄; γ; γ; ) MATHEMATICAL BOLD SMALL GAMMA 1D6C5;1D6C5;1D6C5;03B4;03B4; # (𝛅; 𝛅; 𝛅; δ; δ; ) MATHEMATICAL BOLD SMALL DELTA 1D6C6;1D6C6;1D6C6;03B5;03B5; # (𝛆; 𝛆; 𝛆; ε; ε; ) MATHEMATICAL BOLD SMALL EPSILON 1D6C7;1D6C7;1D6C7;03B6;03B6; # (𝛇; 𝛇; 𝛇; ζ; ζ; ) MATHEMATICAL BOLD SMALL ZETA 1D6C8;1D6C8;1D6C8;03B7;03B7; # (𝛈; 𝛈; 𝛈; η; η; ) MATHEMATICAL BOLD SMALL ETA 1D6C9;1D6C9;1D6C9;03B8;03B8; # (𝛉; 𝛉; 𝛉; θ; θ; ) MATHEMATICAL BOLD SMALL THETA 1D6CA;1D6CA;1D6CA;03B9;03B9; # (𝛊; 𝛊; 𝛊; ι; ι; ) MATHEMATICAL BOLD SMALL IOTA 1D6CB;1D6CB;1D6CB;03BA;03BA; # (𝛋; 𝛋; 𝛋; κ; κ; ) MATHEMATICAL BOLD SMALL KAPPA 1D6CC;1D6CC;1D6CC;03BB;03BB; # (𝛌; 𝛌; 𝛌; λ; λ; ) MATHEMATICAL BOLD SMALL LAMDA 1D6CD;1D6CD;1D6CD;03BC;03BC; # (𝛍; 𝛍; 𝛍; μ; μ; ) MATHEMATICAL BOLD SMALL MU 1D6CE;1D6CE;1D6CE;03BD;03BD; # (𝛎; 𝛎; 𝛎; ν; ν; ) MATHEMATICAL BOLD SMALL NU 1D6CF;1D6CF;1D6CF;03BE;03BE; # (𝛏; 𝛏; 𝛏; ξ; ξ; ) MATHEMATICAL BOLD SMALL XI 1D6D0;1D6D0;1D6D0;03BF;03BF; # (𝛐; 𝛐; 𝛐; ο; ο; ) MATHEMATICAL BOLD SMALL OMICRON 1D6D1;1D6D1;1D6D1;03C0;03C0; # (𝛑; 𝛑; 𝛑; π; π; ) MATHEMATICAL BOLD SMALL PI 1D6D2;1D6D2;1D6D2;03C1;03C1; # (𝛒; 𝛒; 𝛒; ρ; ρ; ) MATHEMATICAL BOLD SMALL RHO 1D6D3;1D6D3;1D6D3;03C2;03C2; # (𝛓; 𝛓; 𝛓; ς; ς; ) MATHEMATICAL BOLD SMALL FINAL SIGMA 1D6D4;1D6D4;1D6D4;03C3;03C3; # (𝛔; 𝛔; 𝛔; σ; σ; ) MATHEMATICAL BOLD SMALL SIGMA 1D6D5;1D6D5;1D6D5;03C4;03C4; # (𝛕; 𝛕; 𝛕; τ; τ; ) MATHEMATICAL BOLD SMALL TAU 1D6D6;1D6D6;1D6D6;03C5;03C5; # (𝛖; 𝛖; 𝛖; υ; υ; ) MATHEMATICAL BOLD SMALL UPSILON 1D6D7;1D6D7;1D6D7;03C6;03C6; # (𝛗; 𝛗; 𝛗; φ; φ; ) MATHEMATICAL BOLD SMALL PHI 1D6D8;1D6D8;1D6D8;03C7;03C7; # (𝛘; 𝛘; 𝛘; χ; χ; ) MATHEMATICAL BOLD SMALL CHI 1D6D9;1D6D9;1D6D9;03C8;03C8; # (𝛙; 𝛙; 𝛙; ψ; ψ; ) MATHEMATICAL BOLD SMALL PSI 1D6DA;1D6DA;1D6DA;03C9;03C9; # (𝛚; 𝛚; 𝛚; ω; ω; ) MATHEMATICAL BOLD SMALL OMEGA 1D6DB;1D6DB;1D6DB;2202;2202; # (𝛛; 𝛛; 𝛛; ∂; ∂; ) MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6DC;1D6DC;1D6DC;03B5;03B5; # (𝛜; 𝛜; 𝛜; ε; ε; ) MATHEMATICAL BOLD EPSILON SYMBOL 1D6DD;1D6DD;1D6DD;03B8;03B8; # (𝛝; 𝛝; 𝛝; θ; θ; ) MATHEMATICAL BOLD THETA SYMBOL 1D6DE;1D6DE;1D6DE;03BA;03BA; # (𝛞; 𝛞; 𝛞; κ; κ; ) MATHEMATICAL BOLD KAPPA SYMBOL 1D6DF;1D6DF;1D6DF;03C6;03C6; # (𝛟; 𝛟; 𝛟; φ; φ; ) MATHEMATICAL BOLD PHI SYMBOL 1D6E0;1D6E0;1D6E0;03C1;03C1; # (𝛠; 𝛠; 𝛠; ρ; ρ; ) MATHEMATICAL BOLD RHO SYMBOL 1D6E1;1D6E1;1D6E1;03C0;03C0; # (𝛡; 𝛡; 𝛡; π; π; ) MATHEMATICAL BOLD PI SYMBOL 1D6E2;1D6E2;1D6E2;0391;0391; # (𝛢; 𝛢; 𝛢; Α; Α; ) MATHEMATICAL ITALIC CAPITAL ALPHA 1D6E3;1D6E3;1D6E3;0392;0392; # (𝛣; 𝛣; 𝛣; Β; Β; ) MATHEMATICAL ITALIC CAPITAL BETA 1D6E4;1D6E4;1D6E4;0393;0393; # (𝛤; 𝛤; 𝛤; Γ; Γ; ) MATHEMATICAL ITALIC CAPITAL GAMMA 1D6E5;1D6E5;1D6E5;0394;0394; # (𝛥; 𝛥; 𝛥; Δ; Δ; ) MATHEMATICAL ITALIC CAPITAL DELTA 1D6E6;1D6E6;1D6E6;0395;0395; # (𝛦; 𝛦; 𝛦; Ε; Ε; ) MATHEMATICAL ITALIC CAPITAL EPSILON 1D6E7;1D6E7;1D6E7;0396;0396; # (𝛧; 𝛧; 𝛧; Ζ; Ζ; ) MATHEMATICAL ITALIC CAPITAL ZETA 1D6E8;1D6E8;1D6E8;0397;0397; # (𝛨; 𝛨; 𝛨; Η; Η; ) MATHEMATICAL ITALIC CAPITAL ETA 1D6E9;1D6E9;1D6E9;0398;0398; # (𝛩; 𝛩; 𝛩; Θ; Θ; ) MATHEMATICAL ITALIC CAPITAL THETA 1D6EA;1D6EA;1D6EA;0399;0399; # (𝛪; 𝛪; 𝛪; Ι; Ι; ) MATHEMATICAL ITALIC CAPITAL IOTA 1D6EB;1D6EB;1D6EB;039A;039A; # (𝛫; 𝛫; 𝛫; Κ; Κ; ) MATHEMATICAL ITALIC CAPITAL KAPPA 1D6EC;1D6EC;1D6EC;039B;039B; # (𝛬; 𝛬; 𝛬; Λ; Λ; ) MATHEMATICAL ITALIC CAPITAL LAMDA 1D6ED;1D6ED;1D6ED;039C;039C; # (𝛭; 𝛭; 𝛭; Μ; Μ; ) MATHEMATICAL ITALIC CAPITAL MU 1D6EE;1D6EE;1D6EE;039D;039D; # (𝛮; 𝛮; 𝛮; Ν; Ν; ) MATHEMATICAL ITALIC CAPITAL NU 1D6EF;1D6EF;1D6EF;039E;039E; # (𝛯; 𝛯; 𝛯; Ξ; Ξ; ) MATHEMATICAL ITALIC CAPITAL XI 1D6F0;1D6F0;1D6F0;039F;039F; # (𝛰; 𝛰; 𝛰; Ο; Ο; ) MATHEMATICAL ITALIC CAPITAL OMICRON 1D6F1;1D6F1;1D6F1;03A0;03A0; # (𝛱; 𝛱; 𝛱; Π; Π; ) MATHEMATICAL ITALIC CAPITAL PI 1D6F2;1D6F2;1D6F2;03A1;03A1; # (𝛲; 𝛲; 𝛲; Ρ; Ρ; ) MATHEMATICAL ITALIC CAPITAL RHO 1D6F3;1D6F3;1D6F3;0398;0398; # (𝛳; 𝛳; 𝛳; Θ; Θ; ) MATHEMATICAL ITALIC CAPITAL THETA SYMBOL 1D6F4;1D6F4;1D6F4;03A3;03A3; # (𝛴; 𝛴; 𝛴; Σ; Σ; ) MATHEMATICAL ITALIC CAPITAL SIGMA 1D6F5;1D6F5;1D6F5;03A4;03A4; # (𝛵; 𝛵; 𝛵; Τ; Τ; ) MATHEMATICAL ITALIC CAPITAL TAU 1D6F6;1D6F6;1D6F6;03A5;03A5; # (𝛶; 𝛶; 𝛶; Υ; Υ; ) MATHEMATICAL ITALIC CAPITAL UPSILON 1D6F7;1D6F7;1D6F7;03A6;03A6; # (𝛷; 𝛷; 𝛷; Φ; Φ; ) MATHEMATICAL ITALIC CAPITAL PHI 1D6F8;1D6F8;1D6F8;03A7;03A7; # (𝛸; 𝛸; 𝛸; Χ; Χ; ) MATHEMATICAL ITALIC CAPITAL CHI 1D6F9;1D6F9;1D6F9;03A8;03A8; # (𝛹; 𝛹; 𝛹; Ψ; Ψ; ) MATHEMATICAL ITALIC CAPITAL PSI 1D6FA;1D6FA;1D6FA;03A9;03A9; # (𝛺; 𝛺; 𝛺; Ω; Ω; ) MATHEMATICAL ITALIC CAPITAL OMEGA 1D6FB;1D6FB;1D6FB;2207;2207; # (𝛻; 𝛻; 𝛻; ∇; ∇; ) MATHEMATICAL ITALIC NABLA 1D6FC;1D6FC;1D6FC;03B1;03B1; # (𝛼; 𝛼; 𝛼; α; α; ) MATHEMATICAL ITALIC SMALL ALPHA 1D6FD;1D6FD;1D6FD;03B2;03B2; # (𝛽; 𝛽; 𝛽; β; β; ) MATHEMATICAL ITALIC SMALL BETA 1D6FE;1D6FE;1D6FE;03B3;03B3; # (𝛾; 𝛾; 𝛾; γ; γ; ) MATHEMATICAL ITALIC SMALL GAMMA 1D6FF;1D6FF;1D6FF;03B4;03B4; # (𝛿; 𝛿; 𝛿; δ; δ; ) MATHEMATICAL ITALIC SMALL DELTA 1D700;1D700;1D700;03B5;03B5; # (𝜀; 𝜀; 𝜀; ε; ε; ) MATHEMATICAL ITALIC SMALL EPSILON 1D701;1D701;1D701;03B6;03B6; # (𝜁; 𝜁; 𝜁; ζ; ζ; ) MATHEMATICAL ITALIC SMALL ZETA 1D702;1D702;1D702;03B7;03B7; # (𝜂; 𝜂; 𝜂; η; η; ) MATHEMATICAL ITALIC SMALL ETA 1D703;1D703;1D703;03B8;03B8; # (𝜃; 𝜃; 𝜃; θ; θ; ) MATHEMATICAL ITALIC SMALL THETA 1D704;1D704;1D704;03B9;03B9; # (𝜄; 𝜄; 𝜄; ι; ι; ) MATHEMATICAL ITALIC SMALL IOTA 1D705;1D705;1D705;03BA;03BA; # (𝜅; 𝜅; 𝜅; κ; κ; ) MATHEMATICAL ITALIC SMALL KAPPA 1D706;1D706;1D706;03BB;03BB; # (𝜆; 𝜆; 𝜆; λ; λ; ) MATHEMATICAL ITALIC SMALL LAMDA 1D707;1D707;1D707;03BC;03BC; # (𝜇; 𝜇; 𝜇; μ; μ; ) MATHEMATICAL ITALIC SMALL MU 1D708;1D708;1D708;03BD;03BD; # (𝜈; 𝜈; 𝜈; ν; ν; ) MATHEMATICAL ITALIC SMALL NU 1D709;1D709;1D709;03BE;03BE; # (𝜉; 𝜉; 𝜉; ξ; ξ; ) MATHEMATICAL ITALIC SMALL XI 1D70A;1D70A;1D70A;03BF;03BF; # (𝜊; 𝜊; 𝜊; ο; ο; ) MATHEMATICAL ITALIC SMALL OMICRON 1D70B;1D70B;1D70B;03C0;03C0; # (𝜋; 𝜋; 𝜋; π; π; ) MATHEMATICAL ITALIC SMALL PI 1D70C;1D70C;1D70C;03C1;03C1; # (𝜌; 𝜌; 𝜌; ρ; ρ; ) MATHEMATICAL ITALIC SMALL RHO 1D70D;1D70D;1D70D;03C2;03C2; # (𝜍; 𝜍; 𝜍; ς; ς; ) MATHEMATICAL ITALIC SMALL FINAL SIGMA 1D70E;1D70E;1D70E;03C3;03C3; # (𝜎; 𝜎; 𝜎; σ; σ; ) MATHEMATICAL ITALIC SMALL SIGMA 1D70F;1D70F;1D70F;03C4;03C4; # (𝜏; 𝜏; 𝜏; τ; τ; ) MATHEMATICAL ITALIC SMALL TAU 1D710;1D710;1D710;03C5;03C5; # (𝜐; 𝜐; 𝜐; υ; υ; ) MATHEMATICAL ITALIC SMALL UPSILON 1D711;1D711;1D711;03C6;03C6; # (𝜑; 𝜑; 𝜑; φ; φ; ) MATHEMATICAL ITALIC SMALL PHI 1D712;1D712;1D712;03C7;03C7; # (𝜒; 𝜒; 𝜒; χ; χ; ) MATHEMATICAL ITALIC SMALL CHI 1D713;1D713;1D713;03C8;03C8; # (𝜓; 𝜓; 𝜓; ψ; ψ; ) MATHEMATICAL ITALIC SMALL PSI 1D714;1D714;1D714;03C9;03C9; # (𝜔; 𝜔; 𝜔; ω; ω; ) MATHEMATICAL ITALIC SMALL OMEGA 1D715;1D715;1D715;2202;2202; # (𝜕; 𝜕; 𝜕; ∂; ∂; ) MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL 1D716;1D716;1D716;03B5;03B5; # (𝜖; 𝜖; 𝜖; ε; ε; ) MATHEMATICAL ITALIC EPSILON SYMBOL 1D717;1D717;1D717;03B8;03B8; # (𝜗; 𝜗; 𝜗; θ; θ; ) MATHEMATICAL ITALIC THETA SYMBOL 1D718;1D718;1D718;03BA;03BA; # (𝜘; 𝜘; 𝜘; κ; κ; ) MATHEMATICAL ITALIC KAPPA SYMBOL 1D719;1D719;1D719;03C6;03C6; # (𝜙; 𝜙; 𝜙; φ; φ; ) MATHEMATICAL ITALIC PHI SYMBOL 1D71A;1D71A;1D71A;03C1;03C1; # (𝜚; 𝜚; 𝜚; ρ; ρ; ) MATHEMATICAL ITALIC RHO SYMBOL 1D71B;1D71B;1D71B;03C0;03C0; # (𝜛; 𝜛; 𝜛; π; π; ) MATHEMATICAL ITALIC PI SYMBOL 1D71C;1D71C;1D71C;0391;0391; # (𝜜; 𝜜; 𝜜; Α; Α; ) MATHEMATICAL BOLD ITALIC CAPITAL ALPHA 1D71D;1D71D;1D71D;0392;0392; # (𝜝; 𝜝; 𝜝; Β; Β; ) MATHEMATICAL BOLD ITALIC CAPITAL BETA 1D71E;1D71E;1D71E;0393;0393; # (𝜞; 𝜞; 𝜞; Γ; Γ; ) MATHEMATICAL BOLD ITALIC CAPITAL GAMMA 1D71F;1D71F;1D71F;0394;0394; # (𝜟; 𝜟; 𝜟; Δ; Δ; ) MATHEMATICAL BOLD ITALIC CAPITAL DELTA 1D720;1D720;1D720;0395;0395; # (𝜠; 𝜠; 𝜠; Ε; Ε; ) MATHEMATICAL BOLD ITALIC CAPITAL EPSILON 1D721;1D721;1D721;0396;0396; # (𝜡; 𝜡; 𝜡; Ζ; Ζ; ) MATHEMATICAL BOLD ITALIC CAPITAL ZETA 1D722;1D722;1D722;0397;0397; # (𝜢; 𝜢; 𝜢; Η; Η; ) MATHEMATICAL BOLD ITALIC CAPITAL ETA 1D723;1D723;1D723;0398;0398; # (𝜣; 𝜣; 𝜣; Θ; Θ; ) MATHEMATICAL BOLD ITALIC CAPITAL THETA 1D724;1D724;1D724;0399;0399; # (𝜤; 𝜤; 𝜤; Ι; Ι; ) MATHEMATICAL BOLD ITALIC CAPITAL IOTA 1D725;1D725;1D725;039A;039A; # (𝜥; 𝜥; 𝜥; Κ; Κ; ) MATHEMATICAL BOLD ITALIC CAPITAL KAPPA 1D726;1D726;1D726;039B;039B; # (𝜦; 𝜦; 𝜦; Λ; Λ; ) MATHEMATICAL BOLD ITALIC CAPITAL LAMDA 1D727;1D727;1D727;039C;039C; # (𝜧; 𝜧; 𝜧; Μ; Μ; ) MATHEMATICAL BOLD ITALIC CAPITAL MU 1D728;1D728;1D728;039D;039D; # (𝜨; 𝜨; 𝜨; Ν; Ν; ) MATHEMATICAL BOLD ITALIC CAPITAL NU 1D729;1D729;1D729;039E;039E; # (𝜩; 𝜩; 𝜩; Ξ; Ξ; ) MATHEMATICAL BOLD ITALIC CAPITAL XI 1D72A;1D72A;1D72A;039F;039F; # (𝜪; 𝜪; 𝜪; Ο; Ο; ) MATHEMATICAL BOLD ITALIC CAPITAL OMICRON 1D72B;1D72B;1D72B;03A0;03A0; # (𝜫; 𝜫; 𝜫; Π; Π; ) MATHEMATICAL BOLD ITALIC CAPITAL PI 1D72C;1D72C;1D72C;03A1;03A1; # (𝜬; 𝜬; 𝜬; Ρ; Ρ; ) MATHEMATICAL BOLD ITALIC CAPITAL RHO 1D72D;1D72D;1D72D;0398;0398; # (𝜭; 𝜭; 𝜭; Θ; Θ; ) MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL 1D72E;1D72E;1D72E;03A3;03A3; # (𝜮; 𝜮; 𝜮; Σ; Σ; ) MATHEMATICAL BOLD ITALIC CAPITAL SIGMA 1D72F;1D72F;1D72F;03A4;03A4; # (𝜯; 𝜯; 𝜯; Τ; Τ; ) MATHEMATICAL BOLD ITALIC CAPITAL TAU 1D730;1D730;1D730;03A5;03A5; # (𝜰; 𝜰; 𝜰; Υ; Υ; ) MATHEMATICAL BOLD ITALIC CAPITAL UPSILON 1D731;1D731;1D731;03A6;03A6; # (𝜱; 𝜱; 𝜱; Φ; Φ; ) MATHEMATICAL BOLD ITALIC CAPITAL PHI 1D732;1D732;1D732;03A7;03A7; # (𝜲; 𝜲; 𝜲; Χ; Χ; ) MATHEMATICAL BOLD ITALIC CAPITAL CHI 1D733;1D733;1D733;03A8;03A8; # (𝜳; 𝜳; 𝜳; Ψ; Ψ; ) MATHEMATICAL BOLD ITALIC CAPITAL PSI 1D734;1D734;1D734;03A9;03A9; # (𝜴; 𝜴; 𝜴; Ω; Ω; ) MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1D735;1D735;1D735;2207;2207; # (𝜵; 𝜵; 𝜵; ∇; ∇; ) MATHEMATICAL BOLD ITALIC NABLA 1D736;1D736;1D736;03B1;03B1; # (𝜶; 𝜶; 𝜶; α; α; ) MATHEMATICAL BOLD ITALIC SMALL ALPHA 1D737;1D737;1D737;03B2;03B2; # (𝜷; 𝜷; 𝜷; β; β; ) MATHEMATICAL BOLD ITALIC SMALL BETA 1D738;1D738;1D738;03B3;03B3; # (𝜸; 𝜸; 𝜸; γ; γ; ) MATHEMATICAL BOLD ITALIC SMALL GAMMA 1D739;1D739;1D739;03B4;03B4; # (𝜹; 𝜹; 𝜹; δ; δ; ) MATHEMATICAL BOLD ITALIC SMALL DELTA 1D73A;1D73A;1D73A;03B5;03B5; # (𝜺; 𝜺; 𝜺; ε; ε; ) MATHEMATICAL BOLD ITALIC SMALL EPSILON 1D73B;1D73B;1D73B;03B6;03B6; # (𝜻; 𝜻; 𝜻; ζ; ζ; ) MATHEMATICAL BOLD ITALIC SMALL ZETA 1D73C;1D73C;1D73C;03B7;03B7; # (𝜼; 𝜼; 𝜼; η; η; ) MATHEMATICAL BOLD ITALIC SMALL ETA 1D73D;1D73D;1D73D;03B8;03B8; # (𝜽; 𝜽; 𝜽; θ; θ; ) MATHEMATICAL BOLD ITALIC SMALL THETA 1D73E;1D73E;1D73E;03B9;03B9; # (𝜾; 𝜾; 𝜾; ι; ι; ) MATHEMATICAL BOLD ITALIC SMALL IOTA 1D73F;1D73F;1D73F;03BA;03BA; # (𝜿; 𝜿; 𝜿; κ; κ; ) MATHEMATICAL BOLD ITALIC SMALL KAPPA 1D740;1D740;1D740;03BB;03BB; # (𝝀; 𝝀; 𝝀; λ; λ; ) MATHEMATICAL BOLD ITALIC SMALL LAMDA 1D741;1D741;1D741;03BC;03BC; # (𝝁; 𝝁; 𝝁; μ; μ; ) MATHEMATICAL BOLD ITALIC SMALL MU 1D742;1D742;1D742;03BD;03BD; # (𝝂; 𝝂; 𝝂; ν; ν; ) MATHEMATICAL BOLD ITALIC SMALL NU 1D743;1D743;1D743;03BE;03BE; # (𝝃; 𝝃; 𝝃; ξ; ξ; ) MATHEMATICAL BOLD ITALIC SMALL XI 1D744;1D744;1D744;03BF;03BF; # (𝝄; 𝝄; 𝝄; ο; ο; ) MATHEMATICAL BOLD ITALIC SMALL OMICRON 1D745;1D745;1D745;03C0;03C0; # (𝝅; 𝝅; 𝝅; π; π; ) MATHEMATICAL BOLD ITALIC SMALL PI 1D746;1D746;1D746;03C1;03C1; # (𝝆; 𝝆; 𝝆; ρ; ρ; ) MATHEMATICAL BOLD ITALIC SMALL RHO 1D747;1D747;1D747;03C2;03C2; # (𝝇; 𝝇; 𝝇; ς; ς; ) MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA 1D748;1D748;1D748;03C3;03C3; # (𝝈; 𝝈; 𝝈; σ; σ; ) MATHEMATICAL BOLD ITALIC SMALL SIGMA 1D749;1D749;1D749;03C4;03C4; # (𝝉; 𝝉; 𝝉; τ; τ; ) MATHEMATICAL BOLD ITALIC SMALL TAU 1D74A;1D74A;1D74A;03C5;03C5; # (𝝊; 𝝊; 𝝊; υ; υ; ) MATHEMATICAL BOLD ITALIC SMALL UPSILON 1D74B;1D74B;1D74B;03C6;03C6; # (𝝋; 𝝋; 𝝋; φ; φ; ) MATHEMATICAL BOLD ITALIC SMALL PHI 1D74C;1D74C;1D74C;03C7;03C7; # (𝝌; 𝝌; 𝝌; χ; χ; ) MATHEMATICAL BOLD ITALIC SMALL CHI 1D74D;1D74D;1D74D;03C8;03C8; # (𝝍; 𝝍; 𝝍; ψ; ψ; ) MATHEMATICAL BOLD ITALIC SMALL PSI 1D74E;1D74E;1D74E;03C9;03C9; # (𝝎; 𝝎; 𝝎; ω; ω; ) MATHEMATICAL BOLD ITALIC SMALL OMEGA 1D74F;1D74F;1D74F;2202;2202; # (𝝏; 𝝏; 𝝏; ∂; ∂; ) MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL 1D750;1D750;1D750;03B5;03B5; # (𝝐; 𝝐; 𝝐; ε; ε; ) MATHEMATICAL BOLD ITALIC EPSILON SYMBOL 1D751;1D751;1D751;03B8;03B8; # (𝝑; 𝝑; 𝝑; θ; θ; ) MATHEMATICAL BOLD ITALIC THETA SYMBOL 1D752;1D752;1D752;03BA;03BA; # (𝝒; 𝝒; 𝝒; κ; κ; ) MATHEMATICAL BOLD ITALIC KAPPA SYMBOL 1D753;1D753;1D753;03C6;03C6; # (𝝓; 𝝓; 𝝓; φ; φ; ) MATHEMATICAL BOLD ITALIC PHI SYMBOL 1D754;1D754;1D754;03C1;03C1; # (𝝔; 𝝔; 𝝔; ρ; ρ; ) MATHEMATICAL BOLD ITALIC RHO SYMBOL 1D755;1D755;1D755;03C0;03C0; # (𝝕; 𝝕; 𝝕; π; π; ) MATHEMATICAL BOLD ITALIC PI SYMBOL 1D756;1D756;1D756;0391;0391; # (𝝖; 𝝖; 𝝖; Α; Α; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA 1D757;1D757;1D757;0392;0392; # (𝝗; 𝝗; 𝝗; Β; Β; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA 1D758;1D758;1D758;0393;0393; # (𝝘; 𝝘; 𝝘; Γ; Γ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA 1D759;1D759;1D759;0394;0394; # (𝝙; 𝝙; 𝝙; Δ; Δ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA 1D75A;1D75A;1D75A;0395;0395; # (𝝚; 𝝚; 𝝚; Ε; Ε; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON 1D75B;1D75B;1D75B;0396;0396; # (𝝛; 𝝛; 𝝛; Ζ; Ζ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA 1D75C;1D75C;1D75C;0397;0397; # (𝝜; 𝝜; 𝝜; Η; Η; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA 1D75D;1D75D;1D75D;0398;0398; # (𝝝; 𝝝; 𝝝; Θ; Θ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA 1D75E;1D75E;1D75E;0399;0399; # (𝝞; 𝝞; 𝝞; Ι; Ι; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA 1D75F;1D75F;1D75F;039A;039A; # (𝝟; 𝝟; 𝝟; Κ; Κ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA 1D760;1D760;1D760;039B;039B; # (𝝠; 𝝠; 𝝠; Λ; Λ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA 1D761;1D761;1D761;039C;039C; # (𝝡; 𝝡; 𝝡; Μ; Μ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL MU 1D762;1D762;1D762;039D;039D; # (𝝢; 𝝢; 𝝢; Ν; Ν; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL NU 1D763;1D763;1D763;039E;039E; # (𝝣; 𝝣; 𝝣; Ξ; Ξ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL XI 1D764;1D764;1D764;039F;039F; # (𝝤; 𝝤; 𝝤; Ο; Ο; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON 1D765;1D765;1D765;03A0;03A0; # (𝝥; 𝝥; 𝝥; Π; Π; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL PI 1D766;1D766;1D766;03A1;03A1; # (𝝦; 𝝦; 𝝦; Ρ; Ρ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO 1D767;1D767;1D767;0398;0398; # (𝝧; 𝝧; 𝝧; Θ; Θ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL 1D768;1D768;1D768;03A3;03A3; # (𝝨; 𝝨; 𝝨; Σ; Σ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA 1D769;1D769;1D769;03A4;03A4; # (𝝩; 𝝩; 𝝩; Τ; Τ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU 1D76A;1D76A;1D76A;03A5;03A5; # (𝝪; 𝝪; 𝝪; Υ; Υ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON 1D76B;1D76B;1D76B;03A6;03A6; # (𝝫; 𝝫; 𝝫; Φ; Φ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI 1D76C;1D76C;1D76C;03A7;03A7; # (𝝬; 𝝬; 𝝬; Χ; Χ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI 1D76D;1D76D;1D76D;03A8;03A8; # (𝝭; 𝝭; 𝝭; Ψ; Ψ; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI 1D76E;1D76E;1D76E;03A9;03A9; # (𝝮; 𝝮; 𝝮; Ω; Ω; ) MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 1D76F;1D76F;1D76F;2207;2207; # (𝝯; 𝝯; 𝝯; ∇; ∇; ) MATHEMATICAL SANS-SERIF BOLD NABLA 1D770;1D770;1D770;03B1;03B1; # (𝝰; 𝝰; 𝝰; α; α; ) MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA 1D771;1D771;1D771;03B2;03B2; # (𝝱; 𝝱; 𝝱; β; β; ) MATHEMATICAL SANS-SERIF BOLD SMALL BETA 1D772;1D772;1D772;03B3;03B3; # (𝝲; 𝝲; 𝝲; γ; γ; ) MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA 1D773;1D773;1D773;03B4;03B4; # (𝝳; 𝝳; 𝝳; δ; δ; ) MATHEMATICAL SANS-SERIF BOLD SMALL DELTA 1D774;1D774;1D774;03B5;03B5; # (𝝴; 𝝴; 𝝴; ε; ε; ) MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON 1D775;1D775;1D775;03B6;03B6; # (𝝵; 𝝵; 𝝵; ζ; ζ; ) MATHEMATICAL SANS-SERIF BOLD SMALL ZETA 1D776;1D776;1D776;03B7;03B7; # (𝝶; 𝝶; 𝝶; η; η; ) MATHEMATICAL SANS-SERIF BOLD SMALL ETA 1D777;1D777;1D777;03B8;03B8; # (𝝷; 𝝷; 𝝷; θ; θ; ) MATHEMATICAL SANS-SERIF BOLD SMALL THETA 1D778;1D778;1D778;03B9;03B9; # (𝝸; 𝝸; 𝝸; ι; ι; ) MATHEMATICAL SANS-SERIF BOLD SMALL IOTA 1D779;1D779;1D779;03BA;03BA; # (𝝹; 𝝹; 𝝹; κ; κ; ) MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA 1D77A;1D77A;1D77A;03BB;03BB; # (𝝺; 𝝺; 𝝺; λ; λ; ) MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA 1D77B;1D77B;1D77B;03BC;03BC; # (𝝻; 𝝻; 𝝻; μ; μ; ) MATHEMATICAL SANS-SERIF BOLD SMALL MU 1D77C;1D77C;1D77C;03BD;03BD; # (𝝼; 𝝼; 𝝼; ν; ν; ) MATHEMATICAL SANS-SERIF BOLD SMALL NU 1D77D;1D77D;1D77D;03BE;03BE; # (𝝽; 𝝽; 𝝽; ξ; ξ; ) MATHEMATICAL SANS-SERIF BOLD SMALL XI 1D77E;1D77E;1D77E;03BF;03BF; # (𝝾; 𝝾; 𝝾; ο; ο; ) MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON 1D77F;1D77F;1D77F;03C0;03C0; # (𝝿; 𝝿; 𝝿; π; π; ) MATHEMATICAL SANS-SERIF BOLD SMALL PI 1D780;1D780;1D780;03C1;03C1; # (𝞀; 𝞀; 𝞀; ρ; ρ; ) MATHEMATICAL SANS-SERIF BOLD SMALL RHO 1D781;1D781;1D781;03C2;03C2; # (𝞁; 𝞁; 𝞁; ς; ς; ) MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA 1D782;1D782;1D782;03C3;03C3; # (𝞂; 𝞂; 𝞂; σ; σ; ) MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA 1D783;1D783;1D783;03C4;03C4; # (𝞃; 𝞃; 𝞃; τ; τ; ) MATHEMATICAL SANS-SERIF BOLD SMALL TAU 1D784;1D784;1D784;03C5;03C5; # (𝞄; 𝞄; 𝞄; υ; υ; ) MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON 1D785;1D785;1D785;03C6;03C6; # (𝞅; 𝞅; 𝞅; φ; φ; ) MATHEMATICAL SANS-SERIF BOLD SMALL PHI 1D786;1D786;1D786;03C7;03C7; # (𝞆; 𝞆; 𝞆; χ; χ; ) MATHEMATICAL SANS-SERIF BOLD SMALL CHI 1D787;1D787;1D787;03C8;03C8; # (𝞇; 𝞇; 𝞇; ψ; ψ; ) MATHEMATICAL SANS-SERIF BOLD SMALL PSI 1D788;1D788;1D788;03C9;03C9; # (𝞈; 𝞈; 𝞈; ω; ω; ) MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 1D789;1D789;1D789;2202;2202; # (𝞉; 𝞉; 𝞉; ∂; ∂; ) MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL 1D78A;1D78A;1D78A;03B5;03B5; # (𝞊; 𝞊; 𝞊; ε; ε; ) MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL 1D78B;1D78B;1D78B;03B8;03B8; # (𝞋; 𝞋; 𝞋; θ; θ; ) MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL 1D78C;1D78C;1D78C;03BA;03BA; # (𝞌; 𝞌; 𝞌; κ; κ; ) MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL 1D78D;1D78D;1D78D;03C6;03C6; # (𝞍; 𝞍; 𝞍; φ; φ; ) MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL 1D78E;1D78E;1D78E;03C1;03C1; # (𝞎; 𝞎; 𝞎; ρ; ρ; ) MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL 1D78F;1D78F;1D78F;03C0;03C0; # (𝞏; 𝞏; 𝞏; π; π; ) MATHEMATICAL SANS-SERIF BOLD PI SYMBOL 1D790;1D790;1D790;0391;0391; # (𝞐; 𝞐; 𝞐; Α; Α; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA 1D791;1D791;1D791;0392;0392; # (𝞑; 𝞑; 𝞑; Β; Β; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA 1D792;1D792;1D792;0393;0393; # (𝞒; 𝞒; 𝞒; Γ; Γ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA 1D793;1D793;1D793;0394;0394; # (𝞓; 𝞓; 𝞓; Δ; Δ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA 1D794;1D794;1D794;0395;0395; # (𝞔; 𝞔; 𝞔; Ε; Ε; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON 1D795;1D795;1D795;0396;0396; # (𝞕; 𝞕; 𝞕; Ζ; Ζ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA 1D796;1D796;1D796;0397;0397; # (𝞖; 𝞖; 𝞖; Η; Η; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA 1D797;1D797;1D797;0398;0398; # (𝞗; 𝞗; 𝞗; Θ; Θ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA 1D798;1D798;1D798;0399;0399; # (𝞘; 𝞘; 𝞘; Ι; Ι; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA 1D799;1D799;1D799;039A;039A; # (𝞙; 𝞙; 𝞙; Κ; Κ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA 1D79A;1D79A;1D79A;039B;039B; # (𝞚; 𝞚; 𝞚; Λ; Λ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA 1D79B;1D79B;1D79B;039C;039C; # (𝞛; 𝞛; 𝞛; Μ; Μ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU 1D79C;1D79C;1D79C;039D;039D; # (𝞜; 𝞜; 𝞜; Ν; Ν; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU 1D79D;1D79D;1D79D;039E;039E; # (𝞝; 𝞝; 𝞝; Ξ; Ξ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI 1D79E;1D79E;1D79E;039F;039F; # (𝞞; 𝞞; 𝞞; Ο; Ο; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON 1D79F;1D79F;1D79F;03A0;03A0; # (𝞟; 𝞟; 𝞟; Π; Π; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI 1D7A0;1D7A0;1D7A0;03A1;03A1; # (𝞠; 𝞠; 𝞠; Ρ; Ρ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO 1D7A1;1D7A1;1D7A1;0398;0398; # (𝞡; 𝞡; 𝞡; Θ; Θ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL 1D7A2;1D7A2;1D7A2;03A3;03A3; # (𝞢; 𝞢; 𝞢; Σ; Σ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA 1D7A3;1D7A3;1D7A3;03A4;03A4; # (𝞣; 𝞣; 𝞣; Τ; Τ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU 1D7A4;1D7A4;1D7A4;03A5;03A5; # (𝞤; 𝞤; 𝞤; Υ; Υ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON 1D7A5;1D7A5;1D7A5;03A6;03A6; # (𝞥; 𝞥; 𝞥; Φ; Φ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI 1D7A6;1D7A6;1D7A6;03A7;03A7; # (𝞦; 𝞦; 𝞦; Χ; Χ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI 1D7A7;1D7A7;1D7A7;03A8;03A8; # (𝞧; 𝞧; 𝞧; Ψ; Ψ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI 1D7A8;1D7A8;1D7A8;03A9;03A9; # (𝞨; 𝞨; 𝞨; Ω; Ω; ) MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7A9;1D7A9;1D7A9;2207;2207; # (𝞩; 𝞩; 𝞩; ∇; ∇; ) MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7AA;1D7AA;1D7AA;03B1;03B1; # (𝞪; 𝞪; 𝞪; α; α; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA 1D7AB;1D7AB;1D7AB;03B2;03B2; # (𝞫; 𝞫; 𝞫; β; β; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA 1D7AC;1D7AC;1D7AC;03B3;03B3; # (𝞬; 𝞬; 𝞬; γ; γ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA 1D7AD;1D7AD;1D7AD;03B4;03B4; # (𝞭; 𝞭; 𝞭; δ; δ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA 1D7AE;1D7AE;1D7AE;03B5;03B5; # (𝞮; 𝞮; 𝞮; ε; ε; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON 1D7AF;1D7AF;1D7AF;03B6;03B6; # (𝞯; 𝞯; 𝞯; ζ; ζ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA 1D7B0;1D7B0;1D7B0;03B7;03B7; # (𝞰; 𝞰; 𝞰; η; η; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA 1D7B1;1D7B1;1D7B1;03B8;03B8; # (𝞱; 𝞱; 𝞱; θ; θ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA 1D7B2;1D7B2;1D7B2;03B9;03B9; # (𝞲; 𝞲; 𝞲; ι; ι; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA 1D7B3;1D7B3;1D7B3;03BA;03BA; # (𝞳; 𝞳; 𝞳; κ; κ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA 1D7B4;1D7B4;1D7B4;03BB;03BB; # (𝞴; 𝞴; 𝞴; λ; λ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA 1D7B5;1D7B5;1D7B5;03BC;03BC; # (𝞵; 𝞵; 𝞵; μ; μ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU 1D7B6;1D7B6;1D7B6;03BD;03BD; # (𝞶; 𝞶; 𝞶; ν; ν; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU 1D7B7;1D7B7;1D7B7;03BE;03BE; # (𝞷; 𝞷; 𝞷; ξ; ξ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI 1D7B8;1D7B8;1D7B8;03BF;03BF; # (𝞸; 𝞸; 𝞸; ο; ο; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON 1D7B9;1D7B9;1D7B9;03C0;03C0; # (𝞹; 𝞹; 𝞹; π; π; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI 1D7BA;1D7BA;1D7BA;03C1;03C1; # (𝞺; 𝞺; 𝞺; ρ; ρ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO 1D7BB;1D7BB;1D7BB;03C2;03C2; # (𝞻; 𝞻; 𝞻; ς; ς; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA 1D7BC;1D7BC;1D7BC;03C3;03C3; # (𝞼; 𝞼; 𝞼; σ; σ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA 1D7BD;1D7BD;1D7BD;03C4;03C4; # (𝞽; 𝞽; 𝞽; τ; τ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU 1D7BE;1D7BE;1D7BE;03C5;03C5; # (𝞾; 𝞾; 𝞾; υ; υ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON 1D7BF;1D7BF;1D7BF;03C6;03C6; # (𝞿; 𝞿; 𝞿; φ; φ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI 1D7C0;1D7C0;1D7C0;03C7;03C7; # (𝟀; 𝟀; 𝟀; χ; χ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI 1D7C1;1D7C1;1D7C1;03C8;03C8; # (𝟁; 𝟁; 𝟁; ψ; ψ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI 1D7C2;1D7C2;1D7C2;03C9;03C9; # (𝟂; 𝟂; 𝟂; ω; ω; ) MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C3;1D7C3;1D7C3;2202;2202; # (𝟃; 𝟃; 𝟃; ∂; ∂; ) MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1D7C4;1D7C4;1D7C4;03B5;03B5; # (𝟄; 𝟄; 𝟄; ε; ε; ) MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL 1D7C5;1D7C5;1D7C5;03B8;03B8; # (𝟅; 𝟅; 𝟅; θ; θ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL 1D7C6;1D7C6;1D7C6;03BA;03BA; # (𝟆; 𝟆; 𝟆; κ; κ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL 1D7C7;1D7C7;1D7C7;03C6;03C6; # (𝟇; 𝟇; 𝟇; φ; φ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL 1D7C8;1D7C8;1D7C8;03C1;03C1; # (𝟈; 𝟈; 𝟈; ρ; ρ; ) MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL 1D7C9;1D7C9;1D7C9;03C0;03C0; # (𝟉; 𝟉; 𝟉; π; π; ) MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 1D7CA;1D7CA;1D7CA;03DC;03DC; # (𝟊; 𝟊; 𝟊; Ϝ; Ϝ; ) MATHEMATICAL BOLD CAPITAL DIGAMMA 1D7CB;1D7CB;1D7CB;03DD;03DD; # (𝟋; 𝟋; 𝟋; ϝ; ϝ; ) MATHEMATICAL BOLD SMALL DIGAMMA 1D7CE;1D7CE;1D7CE;0030;0030; # (𝟎; 𝟎; 𝟎; 0; 0; ) MATHEMATICAL BOLD DIGIT ZERO 1D7CF;1D7CF;1D7CF;0031;0031; # (𝟏; 𝟏; 𝟏; 1; 1; ) MATHEMATICAL BOLD DIGIT ONE 1D7D0;1D7D0;1D7D0;0032;0032; # (𝟐; 𝟐; 𝟐; 2; 2; ) MATHEMATICAL BOLD DIGIT TWO 1D7D1;1D7D1;1D7D1;0033;0033; # (𝟑; 𝟑; 𝟑; 3; 3; ) MATHEMATICAL BOLD DIGIT THREE 1D7D2;1D7D2;1D7D2;0034;0034; # (𝟒; 𝟒; 𝟒; 4; 4; ) MATHEMATICAL BOLD DIGIT FOUR 1D7D3;1D7D3;1D7D3;0035;0035; # (𝟓; 𝟓; 𝟓; 5; 5; ) MATHEMATICAL BOLD DIGIT FIVE 1D7D4;1D7D4;1D7D4;0036;0036; # (𝟔; 𝟔; 𝟔; 6; 6; ) MATHEMATICAL BOLD DIGIT SIX 1D7D5;1D7D5;1D7D5;0037;0037; # (𝟕; 𝟕; 𝟕; 7; 7; ) MATHEMATICAL BOLD DIGIT SEVEN 1D7D6;1D7D6;1D7D6;0038;0038; # (𝟖; 𝟖; 𝟖; 8; 8; ) MATHEMATICAL BOLD DIGIT EIGHT 1D7D7;1D7D7;1D7D7;0039;0039; # (𝟗; 𝟗; 𝟗; 9; 9; ) MATHEMATICAL BOLD DIGIT NINE 1D7D8;1D7D8;1D7D8;0030;0030; # (𝟘; 𝟘; 𝟘; 0; 0; ) MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO 1D7D9;1D7D9;1D7D9;0031;0031; # (𝟙; 𝟙; 𝟙; 1; 1; ) MATHEMATICAL DOUBLE-STRUCK DIGIT ONE 1D7DA;1D7DA;1D7DA;0032;0032; # (𝟚; 𝟚; 𝟚; 2; 2; ) MATHEMATICAL DOUBLE-STRUCK DIGIT TWO 1D7DB;1D7DB;1D7DB;0033;0033; # (𝟛; 𝟛; 𝟛; 3; 3; ) MATHEMATICAL DOUBLE-STRUCK DIGIT THREE 1D7DC;1D7DC;1D7DC;0034;0034; # (𝟜; 𝟜; 𝟜; 4; 4; ) MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR 1D7DD;1D7DD;1D7DD;0035;0035; # (𝟝; 𝟝; 𝟝; 5; 5; ) MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE 1D7DE;1D7DE;1D7DE;0036;0036; # (𝟞; 𝟞; 𝟞; 6; 6; ) MATHEMATICAL DOUBLE-STRUCK DIGIT SIX 1D7DF;1D7DF;1D7DF;0037;0037; # (𝟟; 𝟟; 𝟟; 7; 7; ) MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN 1D7E0;1D7E0;1D7E0;0038;0038; # (𝟠; 𝟠; 𝟠; 8; 8; ) MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT 1D7E1;1D7E1;1D7E1;0039;0039; # (𝟡; 𝟡; 𝟡; 9; 9; ) MATHEMATICAL DOUBLE-STRUCK DIGIT NINE 1D7E2;1D7E2;1D7E2;0030;0030; # (𝟢; 𝟢; 𝟢; 0; 0; ) MATHEMATICAL SANS-SERIF DIGIT ZERO 1D7E3;1D7E3;1D7E3;0031;0031; # (𝟣; 𝟣; 𝟣; 1; 1; ) MATHEMATICAL SANS-SERIF DIGIT ONE 1D7E4;1D7E4;1D7E4;0032;0032; # (𝟤; 𝟤; 𝟤; 2; 2; ) MATHEMATICAL SANS-SERIF DIGIT TWO 1D7E5;1D7E5;1D7E5;0033;0033; # (𝟥; 𝟥; 𝟥; 3; 3; ) MATHEMATICAL SANS-SERIF DIGIT THREE 1D7E6;1D7E6;1D7E6;0034;0034; # (𝟦; 𝟦; 𝟦; 4; 4; ) MATHEMATICAL SANS-SERIF DIGIT FOUR 1D7E7;1D7E7;1D7E7;0035;0035; # (𝟧; 𝟧; 𝟧; 5; 5; ) MATHEMATICAL SANS-SERIF DIGIT FIVE 1D7E8;1D7E8;1D7E8;0036;0036; # (𝟨; 𝟨; 𝟨; 6; 6; ) MATHEMATICAL SANS-SERIF DIGIT SIX 1D7E9;1D7E9;1D7E9;0037;0037; # (𝟩; 𝟩; 𝟩; 7; 7; ) MATHEMATICAL SANS-SERIF DIGIT SEVEN 1D7EA;1D7EA;1D7EA;0038;0038; # (𝟪; 𝟪; 𝟪; 8; 8; ) MATHEMATICAL SANS-SERIF DIGIT EIGHT 1D7EB;1D7EB;1D7EB;0039;0039; # (𝟫; 𝟫; 𝟫; 9; 9; ) MATHEMATICAL SANS-SERIF DIGIT NINE 1D7EC;1D7EC;1D7EC;0030;0030; # (𝟬; 𝟬; 𝟬; 0; 0; ) MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO 1D7ED;1D7ED;1D7ED;0031;0031; # (𝟭; 𝟭; 𝟭; 1; 1; ) MATHEMATICAL SANS-SERIF BOLD DIGIT ONE 1D7EE;1D7EE;1D7EE;0032;0032; # (𝟮; 𝟮; 𝟮; 2; 2; ) MATHEMATICAL SANS-SERIF BOLD DIGIT TWO 1D7EF;1D7EF;1D7EF;0033;0033; # (𝟯; 𝟯; 𝟯; 3; 3; ) MATHEMATICAL SANS-SERIF BOLD DIGIT THREE 1D7F0;1D7F0;1D7F0;0034;0034; # (𝟰; 𝟰; 𝟰; 4; 4; ) MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR 1D7F1;1D7F1;1D7F1;0035;0035; # (𝟱; 𝟱; 𝟱; 5; 5; ) MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE 1D7F2;1D7F2;1D7F2;0036;0036; # (𝟲; 𝟲; 𝟲; 6; 6; ) MATHEMATICAL SANS-SERIF BOLD DIGIT SIX 1D7F3;1D7F3;1D7F3;0037;0037; # (𝟳; 𝟳; 𝟳; 7; 7; ) MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN 1D7F4;1D7F4;1D7F4;0038;0038; # (𝟴; 𝟴; 𝟴; 8; 8; ) MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT 1D7F5;1D7F5;1D7F5;0039;0039; # (𝟵; 𝟵; 𝟵; 9; 9; ) MATHEMATICAL SANS-SERIF BOLD DIGIT NINE 1D7F6;1D7F6;1D7F6;0030;0030; # (𝟶; 𝟶; 𝟶; 0; 0; ) MATHEMATICAL MONOSPACE DIGIT ZERO 1D7F7;1D7F7;1D7F7;0031;0031; # (𝟷; 𝟷; 𝟷; 1; 1; ) MATHEMATICAL MONOSPACE DIGIT ONE 1D7F8;1D7F8;1D7F8;0032;0032; # (𝟸; 𝟸; 𝟸; 2; 2; ) MATHEMATICAL MONOSPACE DIGIT TWO 1D7F9;1D7F9;1D7F9;0033;0033; # (𝟹; 𝟹; 𝟹; 3; 3; ) MATHEMATICAL MONOSPACE DIGIT THREE 1D7FA;1D7FA;1D7FA;0034;0034; # (𝟺; 𝟺; 𝟺; 4; 4; ) MATHEMATICAL MONOSPACE DIGIT FOUR 1D7FB;1D7FB;1D7FB;0035;0035; # (𝟻; 𝟻; 𝟻; 5; 5; ) MATHEMATICAL MONOSPACE DIGIT FIVE 1D7FC;1D7FC;1D7FC;0036;0036; # (𝟼; 𝟼; 𝟼; 6; 6; ) MATHEMATICAL MONOSPACE DIGIT SIX 1D7FD;1D7FD;1D7FD;0037;0037; # (𝟽; 𝟽; 𝟽; 7; 7; ) MATHEMATICAL MONOSPACE DIGIT SEVEN 1D7FE;1D7FE;1D7FE;0038;0038; # (𝟾; 𝟾; 𝟾; 8; 8; ) MATHEMATICAL MONOSPACE DIGIT EIGHT 1D7FF;1D7FF;1D7FF;0039;0039; # (𝟿; 𝟿; 𝟿; 9; 9; ) MATHEMATICAL MONOSPACE DIGIT NINE 1EE00;1EE00;1EE00;0627;0627; # (𞸀; 𞸀; 𞸀; ا; ا; ) ARABIC MATHEMATICAL ALEF 1EE01;1EE01;1EE01;0628;0628; # (𞸁; 𞸁; 𞸁; ب; ب; ) ARABIC MATHEMATICAL BEH 1EE02;1EE02;1EE02;062C;062C; # (𞸂; 𞸂; 𞸂; ج; ج; ) ARABIC MATHEMATICAL JEEM 1EE03;1EE03;1EE03;062F;062F; # (𞸃; 𞸃; 𞸃; د; د; ) ARABIC MATHEMATICAL DAL 1EE05;1EE05;1EE05;0648;0648; # (𞸅; 𞸅; 𞸅; و; و; ) ARABIC MATHEMATICAL WAW 1EE06;1EE06;1EE06;0632;0632; # (𞸆; 𞸆; 𞸆; ز; ز; ) ARABIC MATHEMATICAL ZAIN 1EE07;1EE07;1EE07;062D;062D; # (𞸇; 𞸇; 𞸇; ح; ح; ) ARABIC MATHEMATICAL HAH 1EE08;1EE08;1EE08;0637;0637; # (𞸈; 𞸈; 𞸈; ط; ط; ) ARABIC MATHEMATICAL TAH 1EE09;1EE09;1EE09;064A;064A; # (𞸉; 𞸉; 𞸉; ي; ي; ) ARABIC MATHEMATICAL YEH 1EE0A;1EE0A;1EE0A;0643;0643; # (𞸊; 𞸊; 𞸊; ك; ك; ) ARABIC MATHEMATICAL KAF 1EE0B;1EE0B;1EE0B;0644;0644; # (𞸋; 𞸋; 𞸋; ل; ل; ) ARABIC MATHEMATICAL LAM 1EE0C;1EE0C;1EE0C;0645;0645; # (𞸌; 𞸌; 𞸌; م; م; ) ARABIC MATHEMATICAL MEEM 1EE0D;1EE0D;1EE0D;0646;0646; # (𞸍; 𞸍; 𞸍; ن; ن; ) ARABIC MATHEMATICAL NOON 1EE0E;1EE0E;1EE0E;0633;0633; # (𞸎; 𞸎; 𞸎; س; س; ) ARABIC MATHEMATICAL SEEN 1EE0F;1EE0F;1EE0F;0639;0639; # (𞸏; 𞸏; 𞸏; ع; ع; ) ARABIC MATHEMATICAL AIN 1EE10;1EE10;1EE10;0641;0641; # (𞸐; 𞸐; 𞸐; ف; ف; ) ARABIC MATHEMATICAL FEH 1EE11;1EE11;1EE11;0635;0635; # (𞸑; 𞸑; 𞸑; ص; ص; ) ARABIC MATHEMATICAL SAD 1EE12;1EE12;1EE12;0642;0642; # (𞸒; 𞸒; 𞸒; ق; ق; ) ARABIC MATHEMATICAL QAF 1EE13;1EE13;1EE13;0631;0631; # (𞸓; 𞸓; 𞸓; ر; ر; ) ARABIC MATHEMATICAL REH 1EE14;1EE14;1EE14;0634;0634; # (𞸔; 𞸔; 𞸔; ش; ش; ) ARABIC MATHEMATICAL SHEEN 1EE15;1EE15;1EE15;062A;062A; # (𞸕; 𞸕; 𞸕; ت; ت; ) ARABIC MATHEMATICAL TEH 1EE16;1EE16;1EE16;062B;062B; # (𞸖; 𞸖; 𞸖; ث; ث; ) ARABIC MATHEMATICAL THEH 1EE17;1EE17;1EE17;062E;062E; # (𞸗; 𞸗; 𞸗; خ; خ; ) ARABIC MATHEMATICAL KHAH 1EE18;1EE18;1EE18;0630;0630; # (𞸘; 𞸘; 𞸘; ذ; ذ; ) ARABIC MATHEMATICAL THAL 1EE19;1EE19;1EE19;0636;0636; # (𞸙; 𞸙; 𞸙; ض; ض; ) ARABIC MATHEMATICAL DAD 1EE1A;1EE1A;1EE1A;0638;0638; # (𞸚; 𞸚; 𞸚; ظ; ظ; ) ARABIC MATHEMATICAL ZAH 1EE1B;1EE1B;1EE1B;063A;063A; # (𞸛; 𞸛; 𞸛; غ; غ; ) ARABIC MATHEMATICAL GHAIN 1EE1C;1EE1C;1EE1C;066E;066E; # (𞸜; 𞸜; 𞸜; ٮ; ٮ; ) ARABIC MATHEMATICAL DOTLESS BEH 1EE1D;1EE1D;1EE1D;06BA;06BA; # (𞸝; 𞸝; 𞸝; ں; ں; ) ARABIC MATHEMATICAL DOTLESS NOON 1EE1E;1EE1E;1EE1E;06A1;06A1; # (𞸞; 𞸞; 𞸞; ڡ; ڡ; ) ARABIC MATHEMATICAL DOTLESS FEH 1EE1F;1EE1F;1EE1F;066F;066F; # (𞸟; 𞸟; 𞸟; ٯ; ٯ; ) ARABIC MATHEMATICAL DOTLESS QAF 1EE21;1EE21;1EE21;0628;0628; # (𞸡; 𞸡; 𞸡; ب; ب; ) ARABIC MATHEMATICAL INITIAL BEH 1EE22;1EE22;1EE22;062C;062C; # (𞸢; 𞸢; 𞸢; ج; ج; ) ARABIC MATHEMATICAL INITIAL JEEM 1EE24;1EE24;1EE24;0647;0647; # (𞸤; 𞸤; 𞸤; ه; ه; ) ARABIC MATHEMATICAL INITIAL HEH 1EE27;1EE27;1EE27;062D;062D; # (𞸧; 𞸧; 𞸧; ح; ح; ) ARABIC MATHEMATICAL INITIAL HAH 1EE29;1EE29;1EE29;064A;064A; # (𞸩; 𞸩; 𞸩; ي; ي; ) ARABIC MATHEMATICAL INITIAL YEH 1EE2A;1EE2A;1EE2A;0643;0643; # (𞸪; 𞸪; 𞸪; ك; ك; ) ARABIC MATHEMATICAL INITIAL KAF 1EE2B;1EE2B;1EE2B;0644;0644; # (𞸫; 𞸫; 𞸫; ل; ل; ) ARABIC MATHEMATICAL INITIAL LAM 1EE2C;1EE2C;1EE2C;0645;0645; # (𞸬; 𞸬; 𞸬; م; م; ) ARABIC MATHEMATICAL INITIAL MEEM 1EE2D;1EE2D;1EE2D;0646;0646; # (𞸭; 𞸭; 𞸭; ن; ن; ) ARABIC MATHEMATICAL INITIAL NOON 1EE2E;1EE2E;1EE2E;0633;0633; # (𞸮; 𞸮; 𞸮; س; س; ) ARABIC MATHEMATICAL INITIAL SEEN 1EE2F;1EE2F;1EE2F;0639;0639; # (𞸯; 𞸯; 𞸯; ع; ع; ) ARABIC MATHEMATICAL INITIAL AIN 1EE30;1EE30;1EE30;0641;0641; # (𞸰; 𞸰; 𞸰; ف; ف; ) ARABIC MATHEMATICAL INITIAL FEH 1EE31;1EE31;1EE31;0635;0635; # (𞸱; 𞸱; 𞸱; ص; ص; ) ARABIC MATHEMATICAL INITIAL SAD 1EE32;1EE32;1EE32;0642;0642; # (𞸲; 𞸲; 𞸲; ق; ق; ) ARABIC MATHEMATICAL INITIAL QAF 1EE34;1EE34;1EE34;0634;0634; # (𞸴; 𞸴; 𞸴; ش; ش; ) ARABIC MATHEMATICAL INITIAL SHEEN 1EE35;1EE35;1EE35;062A;062A; # (𞸵; 𞸵; 𞸵; ت; ت; ) ARABIC MATHEMATICAL INITIAL TEH 1EE36;1EE36;1EE36;062B;062B; # (𞸶; 𞸶; 𞸶; ث; ث; ) ARABIC MATHEMATICAL INITIAL THEH 1EE37;1EE37;1EE37;062E;062E; # (𞸷; 𞸷; 𞸷; خ; خ; ) ARABIC MATHEMATICAL INITIAL KHAH 1EE39;1EE39;1EE39;0636;0636; # (𞸹; 𞸹; 𞸹; ض; ض; ) ARABIC MATHEMATICAL INITIAL DAD 1EE3B;1EE3B;1EE3B;063A;063A; # (𞸻; 𞸻; 𞸻; غ; غ; ) ARABIC MATHEMATICAL INITIAL GHAIN 1EE42;1EE42;1EE42;062C;062C; # (𞹂; 𞹂; 𞹂; ج; ج; ) ARABIC MATHEMATICAL TAILED JEEM 1EE47;1EE47;1EE47;062D;062D; # (𞹇; 𞹇; 𞹇; ح; ح; ) ARABIC MATHEMATICAL TAILED HAH 1EE49;1EE49;1EE49;064A;064A; # (𞹉; 𞹉; 𞹉; ي; ي; ) ARABIC MATHEMATICAL TAILED YEH 1EE4B;1EE4B;1EE4B;0644;0644; # (𞹋; 𞹋; 𞹋; ل; ل; ) ARABIC MATHEMATICAL TAILED LAM 1EE4D;1EE4D;1EE4D;0646;0646; # (𞹍; 𞹍; 𞹍; ن; ن; ) ARABIC MATHEMATICAL TAILED NOON 1EE4E;1EE4E;1EE4E;0633;0633; # (𞹎; 𞹎; 𞹎; س; س; ) ARABIC MATHEMATICAL TAILED SEEN 1EE4F;1EE4F;1EE4F;0639;0639; # (𞹏; 𞹏; 𞹏; ع; ع; ) ARABIC MATHEMATICAL TAILED AIN 1EE51;1EE51;1EE51;0635;0635; # (𞹑; 𞹑; 𞹑; ص; ص; ) ARABIC MATHEMATICAL TAILED SAD 1EE52;1EE52;1EE52;0642;0642; # (𞹒; 𞹒; 𞹒; ق; ق; ) ARABIC MATHEMATICAL TAILED QAF 1EE54;1EE54;1EE54;0634;0634; # (𞹔; 𞹔; 𞹔; ش; ش; ) ARABIC MATHEMATICAL TAILED SHEEN 1EE57;1EE57;1EE57;062E;062E; # (𞹗; 𞹗; 𞹗; خ; خ; ) ARABIC MATHEMATICAL TAILED KHAH 1EE59;1EE59;1EE59;0636;0636; # (𞹙; 𞹙; 𞹙; ض; ض; ) ARABIC MATHEMATICAL TAILED DAD 1EE5B;1EE5B;1EE5B;063A;063A; # (𞹛; 𞹛; 𞹛; غ; غ; ) ARABIC MATHEMATICAL TAILED GHAIN 1EE5D;1EE5D;1EE5D;06BA;06BA; # (𞹝; 𞹝; 𞹝; ں; ں; ) ARABIC MATHEMATICAL TAILED DOTLESS NOON 1EE5F;1EE5F;1EE5F;066F;066F; # (𞹟; 𞹟; 𞹟; ٯ; ٯ; ) ARABIC MATHEMATICAL TAILED DOTLESS QAF 1EE61;1EE61;1EE61;0628;0628; # (𞹡; 𞹡; 𞹡; ب; ب; ) ARABIC MATHEMATICAL STRETCHED BEH 1EE62;1EE62;1EE62;062C;062C; # (𞹢; 𞹢; 𞹢; ج; ج; ) ARABIC MATHEMATICAL STRETCHED JEEM 1EE64;1EE64;1EE64;0647;0647; # (𞹤; 𞹤; 𞹤; ه; ه; ) ARABIC MATHEMATICAL STRETCHED HEH 1EE67;1EE67;1EE67;062D;062D; # (𞹧; 𞹧; 𞹧; ح; ح; ) ARABIC MATHEMATICAL STRETCHED HAH 1EE68;1EE68;1EE68;0637;0637; # (𞹨; 𞹨; 𞹨; ط; ط; ) ARABIC MATHEMATICAL STRETCHED TAH 1EE69;1EE69;1EE69;064A;064A; # (𞹩; 𞹩; 𞹩; ي; ي; ) ARABIC MATHEMATICAL STRETCHED YEH 1EE6A;1EE6A;1EE6A;0643;0643; # (𞹪; 𞹪; 𞹪; ك; ك; ) ARABIC MATHEMATICAL STRETCHED KAF 1EE6C;1EE6C;1EE6C;0645;0645; # (𞹬; 𞹬; 𞹬; م; م; ) ARABIC MATHEMATICAL STRETCHED MEEM 1EE6D;1EE6D;1EE6D;0646;0646; # (𞹭; 𞹭; 𞹭; ن; ن; ) ARABIC MATHEMATICAL STRETCHED NOON 1EE6E;1EE6E;1EE6E;0633;0633; # (𞹮; 𞹮; 𞹮; س; س; ) ARABIC MATHEMATICAL STRETCHED SEEN 1EE6F;1EE6F;1EE6F;0639;0639; # (𞹯; 𞹯; 𞹯; ع; ع; ) ARABIC MATHEMATICAL STRETCHED AIN 1EE70;1EE70;1EE70;0641;0641; # (𞹰; 𞹰; 𞹰; ف; ف; ) ARABIC MATHEMATICAL STRETCHED FEH 1EE71;1EE71;1EE71;0635;0635; # (𞹱; 𞹱; 𞹱; ص; ص; ) ARABIC MATHEMATICAL STRETCHED SAD 1EE72;1EE72;1EE72;0642;0642; # (𞹲; 𞹲; 𞹲; ق; ق; ) ARABIC MATHEMATICAL STRETCHED QAF 1EE74;1EE74;1EE74;0634;0634; # (𞹴; 𞹴; 𞹴; ش; ش; ) ARABIC MATHEMATICAL STRETCHED SHEEN 1EE75;1EE75;1EE75;062A;062A; # (𞹵; 𞹵; 𞹵; ت; ت; ) ARABIC MATHEMATICAL STRETCHED TEH 1EE76;1EE76;1EE76;062B;062B; # (𞹶; 𞹶; 𞹶; ث; ث; ) ARABIC MATHEMATICAL STRETCHED THEH 1EE77;1EE77;1EE77;062E;062E; # (𞹷; 𞹷; 𞹷; خ; خ; ) ARABIC MATHEMATICAL STRETCHED KHAH 1EE79;1EE79;1EE79;0636;0636; # (𞹹; 𞹹; 𞹹; ض; ض; ) ARABIC MATHEMATICAL STRETCHED DAD 1EE7A;1EE7A;1EE7A;0638;0638; # (𞹺; 𞹺; 𞹺; ظ; ظ; ) ARABIC MATHEMATICAL STRETCHED ZAH 1EE7B;1EE7B;1EE7B;063A;063A; # (𞹻; 𞹻; 𞹻; غ; غ; ) ARABIC MATHEMATICAL STRETCHED GHAIN 1EE7C;1EE7C;1EE7C;066E;066E; # (𞹼; 𞹼; 𞹼; ٮ; ٮ; ) ARABIC MATHEMATICAL STRETCHED DOTLESS BEH 1EE7E;1EE7E;1EE7E;06A1;06A1; # (𞹾; 𞹾; 𞹾; ڡ; ڡ; ) ARABIC MATHEMATICAL STRETCHED DOTLESS FEH 1EE80;1EE80;1EE80;0627;0627; # (𞺀; 𞺀; 𞺀; ا; ا; ) ARABIC MATHEMATICAL LOOPED ALEF 1EE81;1EE81;1EE81;0628;0628; # (𞺁; 𞺁; 𞺁; ب; ب; ) ARABIC MATHEMATICAL LOOPED BEH 1EE82;1EE82;1EE82;062C;062C; # (𞺂; 𞺂; 𞺂; ج; ج; ) ARABIC MATHEMATICAL LOOPED JEEM 1EE83;1EE83;1EE83;062F;062F; # (𞺃; 𞺃; 𞺃; د; د; ) ARABIC MATHEMATICAL LOOPED DAL 1EE84;1EE84;1EE84;0647;0647; # (𞺄; 𞺄; 𞺄; ه; ه; ) ARABIC MATHEMATICAL LOOPED HEH 1EE85;1EE85;1EE85;0648;0648; # (𞺅; 𞺅; 𞺅; و; و; ) ARABIC MATHEMATICAL LOOPED WAW 1EE86;1EE86;1EE86;0632;0632; # (𞺆; 𞺆; 𞺆; ز; ز; ) ARABIC MATHEMATICAL LOOPED ZAIN 1EE87;1EE87;1EE87;062D;062D; # (𞺇; 𞺇; 𞺇; ح; ح; ) ARABIC MATHEMATICAL LOOPED HAH 1EE88;1EE88;1EE88;0637;0637; # (𞺈; 𞺈; 𞺈; ط; ط; ) ARABIC MATHEMATICAL LOOPED TAH 1EE89;1EE89;1EE89;064A;064A; # (𞺉; 𞺉; 𞺉; ي; ي; ) ARABIC MATHEMATICAL LOOPED YEH 1EE8B;1EE8B;1EE8B;0644;0644; # (𞺋; 𞺋; 𞺋; ل; ل; ) ARABIC MATHEMATICAL LOOPED LAM 1EE8C;1EE8C;1EE8C;0645;0645; # (𞺌; 𞺌; 𞺌; م; م; ) ARABIC MATHEMATICAL LOOPED MEEM 1EE8D;1EE8D;1EE8D;0646;0646; # (𞺍; 𞺍; 𞺍; ن; ن; ) ARABIC MATHEMATICAL LOOPED NOON 1EE8E;1EE8E;1EE8E;0633;0633; # (𞺎; 𞺎; 𞺎; س; س; ) ARABIC MATHEMATICAL LOOPED SEEN 1EE8F;1EE8F;1EE8F;0639;0639; # (𞺏; 𞺏; 𞺏; ع; ع; ) ARABIC MATHEMATICAL LOOPED AIN 1EE90;1EE90;1EE90;0641;0641; # (𞺐; 𞺐; 𞺐; ف; ف; ) ARABIC MATHEMATICAL LOOPED FEH 1EE91;1EE91;1EE91;0635;0635; # (𞺑; 𞺑; 𞺑; ص; ص; ) ARABIC MATHEMATICAL LOOPED SAD 1EE92;1EE92;1EE92;0642;0642; # (𞺒; 𞺒; 𞺒; ق; ق; ) ARABIC MATHEMATICAL LOOPED QAF 1EE93;1EE93;1EE93;0631;0631; # (𞺓; 𞺓; 𞺓; ر; ر; ) ARABIC MATHEMATICAL LOOPED REH 1EE94;1EE94;1EE94;0634;0634; # (𞺔; 𞺔; 𞺔; ش; ش; ) ARABIC MATHEMATICAL LOOPED SHEEN 1EE95;1EE95;1EE95;062A;062A; # (𞺕; 𞺕; 𞺕; ت; ت; ) ARABIC MATHEMATICAL LOOPED TEH 1EE96;1EE96;1EE96;062B;062B; # (𞺖; 𞺖; 𞺖; ث; ث; ) ARABIC MATHEMATICAL LOOPED THEH 1EE97;1EE97;1EE97;062E;062E; # (𞺗; 𞺗; 𞺗; خ; خ; ) ARABIC MATHEMATICAL LOOPED KHAH 1EE98;1EE98;1EE98;0630;0630; # (𞺘; 𞺘; 𞺘; ذ; ذ; ) ARABIC MATHEMATICAL LOOPED THAL 1EE99;1EE99;1EE99;0636;0636; # (𞺙; 𞺙; 𞺙; ض; ض; ) ARABIC MATHEMATICAL LOOPED DAD 1EE9A;1EE9A;1EE9A;0638;0638; # (𞺚; 𞺚; 𞺚; ظ; ظ; ) ARABIC MATHEMATICAL LOOPED ZAH 1EE9B;1EE9B;1EE9B;063A;063A; # (𞺛; 𞺛; 𞺛; غ; غ; ) ARABIC MATHEMATICAL LOOPED GHAIN 1EEA1;1EEA1;1EEA1;0628;0628; # (𞺡; 𞺡; 𞺡; ب; ب; ) ARABIC MATHEMATICAL DOUBLE-STRUCK BEH 1EEA2;1EEA2;1EEA2;062C;062C; # (𞺢; 𞺢; 𞺢; ج; ج; ) ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM 1EEA3;1EEA3;1EEA3;062F;062F; # (𞺣; 𞺣; 𞺣; د; د; ) ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 1EEA5;1EEA5;1EEA5;0648;0648; # (𞺥; 𞺥; 𞺥; و; و; ) ARABIC MATHEMATICAL DOUBLE-STRUCK WAW 1EEA6;1EEA6;1EEA6;0632;0632; # (𞺦; 𞺦; 𞺦; ز; ز; ) ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN 1EEA7;1EEA7;1EEA7;062D;062D; # (𞺧; 𞺧; 𞺧; ح; ح; ) ARABIC MATHEMATICAL DOUBLE-STRUCK HAH 1EEA8;1EEA8;1EEA8;0637;0637; # (𞺨; 𞺨; 𞺨; ط; ط; ) ARABIC MATHEMATICAL DOUBLE-STRUCK TAH 1EEA9;1EEA9;1EEA9;064A;064A; # (𞺩; 𞺩; 𞺩; ي; ي; ) ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB;1EEAB;1EEAB;0644;0644; # (𞺫; 𞺫; 𞺫; ل; ل; ) ARABIC MATHEMATICAL DOUBLE-STRUCK LAM 1EEAC;1EEAC;1EEAC;0645;0645; # (𞺬; 𞺬; 𞺬; م; م; ) ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM 1EEAD;1EEAD;1EEAD;0646;0646; # (𞺭; 𞺭; 𞺭; ن; ن; ) ARABIC MATHEMATICAL DOUBLE-STRUCK NOON 1EEAE;1EEAE;1EEAE;0633;0633; # (𞺮; 𞺮; 𞺮; س; س; ) ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN 1EEAF;1EEAF;1EEAF;0639;0639; # (𞺯; 𞺯; 𞺯; ع; ع; ) ARABIC MATHEMATICAL DOUBLE-STRUCK AIN 1EEB0;1EEB0;1EEB0;0641;0641; # (𞺰; 𞺰; 𞺰; ف; ف; ) ARABIC MATHEMATICAL DOUBLE-STRUCK FEH 1EEB1;1EEB1;1EEB1;0635;0635; # (𞺱; 𞺱; 𞺱; ص; ص; ) ARABIC MATHEMATICAL DOUBLE-STRUCK SAD 1EEB2;1EEB2;1EEB2;0642;0642; # (𞺲; 𞺲; 𞺲; ق; ق; ) ARABIC MATHEMATICAL DOUBLE-STRUCK QAF 1EEB3;1EEB3;1EEB3;0631;0631; # (𞺳; 𞺳; 𞺳; ر; ر; ) ARABIC MATHEMATICAL DOUBLE-STRUCK REH 1EEB4;1EEB4;1EEB4;0634;0634; # (𞺴; 𞺴; 𞺴; ش; ش; ) ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN 1EEB5;1EEB5;1EEB5;062A;062A; # (𞺵; 𞺵; 𞺵; ت; ت; ) ARABIC MATHEMATICAL DOUBLE-STRUCK TEH 1EEB6;1EEB6;1EEB6;062B;062B; # (𞺶; 𞺶; 𞺶; ث; ث; ) ARABIC MATHEMATICAL DOUBLE-STRUCK THEH 1EEB7;1EEB7;1EEB7;062E;062E; # (𞺷; 𞺷; 𞺷; خ; خ; ) ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH 1EEB8;1EEB8;1EEB8;0630;0630; # (𞺸; 𞺸; 𞺸; ذ; ذ; ) ARABIC MATHEMATICAL DOUBLE-STRUCK THAL 1EEB9;1EEB9;1EEB9;0636;0636; # (𞺹; 𞺹; 𞺹; ض; ض; ) ARABIC MATHEMATICAL DOUBLE-STRUCK DAD 1EEBA;1EEBA;1EEBA;0638;0638; # (𞺺; 𞺺; 𞺺; ظ; ظ; ) ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH 1EEBB;1EEBB;1EEBB;063A;063A; # (𞺻; 𞺻; 𞺻; غ; غ; ) ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1F100;1F100;1F100;0030 002E;0030 002E; # (🄀; 🄀; 🄀; 0.; 0.; ) DIGIT ZERO FULL STOP 1F101;1F101;1F101;0030 002C;0030 002C; # (🄁; 🄁; 🄁; 0,; 0,; ) DIGIT ZERO COMMA 1F102;1F102;1F102;0031 002C;0031 002C; # (🄂; 🄂; 🄂; 1,; 1,; ) DIGIT ONE COMMA 1F103;1F103;1F103;0032 002C;0032 002C; # (🄃; 🄃; 🄃; 2,; 2,; ) DIGIT TWO COMMA 1F104;1F104;1F104;0033 002C;0033 002C; # (🄄; 🄄; 🄄; 3,; 3,; ) DIGIT THREE COMMA 1F105;1F105;1F105;0034 002C;0034 002C; # (🄅; 🄅; 🄅; 4,; 4,; ) DIGIT FOUR COMMA 1F106;1F106;1F106;0035 002C;0035 002C; # (🄆; 🄆; 🄆; 5,; 5,; ) DIGIT FIVE COMMA 1F107;1F107;1F107;0036 002C;0036 002C; # (🄇; 🄇; 🄇; 6,; 6,; ) DIGIT SIX COMMA 1F108;1F108;1F108;0037 002C;0037 002C; # (🄈; 🄈; 🄈; 7,; 7,; ) DIGIT SEVEN COMMA 1F109;1F109;1F109;0038 002C;0038 002C; # (🄉; 🄉; 🄉; 8,; 8,; ) DIGIT EIGHT COMMA 1F10A;1F10A;1F10A;0039 002C;0039 002C; # (🄊; 🄊; 🄊; 9,; 9,; ) DIGIT NINE COMMA 1F110;1F110;1F110;0028 0041 0029;0028 0041 0029; # (🄐; 🄐; 🄐; (A); (A); ) PARENTHESIZED LATIN CAPITAL LETTER A 1F111;1F111;1F111;0028 0042 0029;0028 0042 0029; # (🄑; 🄑; 🄑; (B); (B); ) PARENTHESIZED LATIN CAPITAL LETTER B 1F112;1F112;1F112;0028 0043 0029;0028 0043 0029; # (🄒; 🄒; 🄒; (C); (C); ) PARENTHESIZED LATIN CAPITAL LETTER C 1F113;1F113;1F113;0028 0044 0029;0028 0044 0029; # (🄓; 🄓; 🄓; (D); (D); ) PARENTHESIZED LATIN CAPITAL LETTER D 1F114;1F114;1F114;0028 0045 0029;0028 0045 0029; # (🄔; 🄔; 🄔; (E); (E); ) PARENTHESIZED LATIN CAPITAL LETTER E 1F115;1F115;1F115;0028 0046 0029;0028 0046 0029; # (🄕; 🄕; 🄕; (F); (F); ) PARENTHESIZED LATIN CAPITAL LETTER F 1F116;1F116;1F116;0028 0047 0029;0028 0047 0029; # (🄖; 🄖; 🄖; (G); (G); ) PARENTHESIZED LATIN CAPITAL LETTER G 1F117;1F117;1F117;0028 0048 0029;0028 0048 0029; # (🄗; 🄗; 🄗; (H); (H); ) PARENTHESIZED LATIN CAPITAL LETTER H 1F118;1F118;1F118;0028 0049 0029;0028 0049 0029; # (🄘; 🄘; 🄘; (I); (I); ) PARENTHESIZED LATIN CAPITAL LETTER I 1F119;1F119;1F119;0028 004A 0029;0028 004A 0029; # (🄙; 🄙; 🄙; (J); (J); ) PARENTHESIZED LATIN CAPITAL LETTER J 1F11A;1F11A;1F11A;0028 004B 0029;0028 004B 0029; # (🄚; 🄚; 🄚; (K); (K); ) PARENTHESIZED LATIN CAPITAL LETTER K 1F11B;1F11B;1F11B;0028 004C 0029;0028 004C 0029; # (🄛; 🄛; 🄛; (L); (L); ) PARENTHESIZED LATIN CAPITAL LETTER L 1F11C;1F11C;1F11C;0028 004D 0029;0028 004D 0029; # (🄜; 🄜; 🄜; (M); (M); ) PARENTHESIZED LATIN CAPITAL LETTER M 1F11D;1F11D;1F11D;0028 004E 0029;0028 004E 0029; # (🄝; 🄝; 🄝; (N); (N); ) PARENTHESIZED LATIN CAPITAL LETTER N 1F11E;1F11E;1F11E;0028 004F 0029;0028 004F 0029; # (🄞; 🄞; 🄞; (O); (O); ) PARENTHESIZED LATIN CAPITAL LETTER O 1F11F;1F11F;1F11F;0028 0050 0029;0028 0050 0029; # (🄟; 🄟; 🄟; (P); (P); ) PARENTHESIZED LATIN CAPITAL LETTER P 1F120;1F120;1F120;0028 0051 0029;0028 0051 0029; # (🄠; 🄠; 🄠; (Q); (Q); ) PARENTHESIZED LATIN CAPITAL LETTER Q 1F121;1F121;1F121;0028 0052 0029;0028 0052 0029; # (🄡; 🄡; 🄡; (R); (R); ) PARENTHESIZED LATIN CAPITAL LETTER R 1F122;1F122;1F122;0028 0053 0029;0028 0053 0029; # (🄢; 🄢; 🄢; (S); (S); ) PARENTHESIZED LATIN CAPITAL LETTER S 1F123;1F123;1F123;0028 0054 0029;0028 0054 0029; # (🄣; 🄣; 🄣; (T); (T); ) PARENTHESIZED LATIN CAPITAL LETTER T 1F124;1F124;1F124;0028 0055 0029;0028 0055 0029; # (🄤; 🄤; 🄤; (U); (U); ) PARENTHESIZED LATIN CAPITAL LETTER U 1F125;1F125;1F125;0028 0056 0029;0028 0056 0029; # (🄥; 🄥; 🄥; (V); (V); ) PARENTHESIZED LATIN CAPITAL LETTER V 1F126;1F126;1F126;0028 0057 0029;0028 0057 0029; # (🄦; 🄦; 🄦; (W); (W); ) PARENTHESIZED LATIN CAPITAL LETTER W 1F127;1F127;1F127;0028 0058 0029;0028 0058 0029; # (🄧; 🄧; 🄧; (X); (X); ) PARENTHESIZED LATIN CAPITAL LETTER X 1F128;1F128;1F128;0028 0059 0029;0028 0059 0029; # (🄨; 🄨; 🄨; (Y); (Y); ) PARENTHESIZED LATIN CAPITAL LETTER Y 1F129;1F129;1F129;0028 005A 0029;0028 005A 0029; # (🄩; 🄩; 🄩; (Z); (Z); ) PARENTHESIZED LATIN CAPITAL LETTER Z 1F12A;1F12A;1F12A;3014 0053 3015;3014 0053 3015; # (🄪; 🄪; 🄪; 〔S〕; 〔S〕; ) TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S 1F12B;1F12B;1F12B;0043;0043; # (🄫; 🄫; 🄫; C; C; ) CIRCLED ITALIC LATIN CAPITAL LETTER C 1F12C;1F12C;1F12C;0052;0052; # (🄬; 🄬; 🄬; R; R; ) CIRCLED ITALIC LATIN CAPITAL LETTER R 1F12D;1F12D;1F12D;0043 0044;0043 0044; # (🄭; 🄭; 🄭; CD; CD; ) CIRCLED CD 1F12E;1F12E;1F12E;0057 005A;0057 005A; # (🄮; 🄮; 🄮; WZ; WZ; ) CIRCLED WZ 1F130;1F130;1F130;0041;0041; # (🄰; 🄰; 🄰; A; A; ) SQUARED LATIN CAPITAL LETTER A 1F131;1F131;1F131;0042;0042; # (🄱; 🄱; 🄱; B; B; ) SQUARED LATIN CAPITAL LETTER B 1F132;1F132;1F132;0043;0043; # (🄲; 🄲; 🄲; C; C; ) SQUARED LATIN CAPITAL LETTER C 1F133;1F133;1F133;0044;0044; # (🄳; 🄳; 🄳; D; D; ) SQUARED LATIN CAPITAL LETTER D 1F134;1F134;1F134;0045;0045; # (🄴; 🄴; 🄴; E; E; ) SQUARED LATIN CAPITAL LETTER E 1F135;1F135;1F135;0046;0046; # (🄵; 🄵; 🄵; F; F; ) SQUARED LATIN CAPITAL LETTER F 1F136;1F136;1F136;0047;0047; # (🄶; 🄶; 🄶; G; G; ) SQUARED LATIN CAPITAL LETTER G 1F137;1F137;1F137;0048;0048; # (🄷; 🄷; 🄷; H; H; ) SQUARED LATIN CAPITAL LETTER H 1F138;1F138;1F138;0049;0049; # (🄸; 🄸; 🄸; I; I; ) SQUARED LATIN CAPITAL LETTER I 1F139;1F139;1F139;004A;004A; # (🄹; 🄹; 🄹; J; J; ) SQUARED LATIN CAPITAL LETTER J 1F13A;1F13A;1F13A;004B;004B; # (🄺; 🄺; 🄺; K; K; ) SQUARED LATIN CAPITAL LETTER K 1F13B;1F13B;1F13B;004C;004C; # (🄻; 🄻; 🄻; L; L; ) SQUARED LATIN CAPITAL LETTER L 1F13C;1F13C;1F13C;004D;004D; # (🄼; 🄼; 🄼; M; M; ) SQUARED LATIN CAPITAL LETTER M 1F13D;1F13D;1F13D;004E;004E; # (🄽; 🄽; 🄽; N; N; ) SQUARED LATIN CAPITAL LETTER N 1F13E;1F13E;1F13E;004F;004F; # (🄾; 🄾; 🄾; O; O; ) SQUARED LATIN CAPITAL LETTER O 1F13F;1F13F;1F13F;0050;0050; # (🄿; 🄿; 🄿; P; P; ) SQUARED LATIN CAPITAL LETTER P 1F140;1F140;1F140;0051;0051; # (🅀; 🅀; 🅀; Q; Q; ) SQUARED LATIN CAPITAL LETTER Q 1F141;1F141;1F141;0052;0052; # (🅁; 🅁; 🅁; R; R; ) SQUARED LATIN CAPITAL LETTER R 1F142;1F142;1F142;0053;0053; # (🅂; 🅂; 🅂; S; S; ) SQUARED LATIN CAPITAL LETTER S 1F143;1F143;1F143;0054;0054; # (🅃; 🅃; 🅃; T; T; ) SQUARED LATIN CAPITAL LETTER T 1F144;1F144;1F144;0055;0055; # (🅄; 🅄; 🅄; U; U; ) SQUARED LATIN CAPITAL LETTER U 1F145;1F145;1F145;0056;0056; # (🅅; 🅅; 🅅; V; V; ) SQUARED LATIN CAPITAL LETTER V 1F146;1F146;1F146;0057;0057; # (🅆; 🅆; 🅆; W; W; ) SQUARED LATIN CAPITAL LETTER W 1F147;1F147;1F147;0058;0058; # (🅇; 🅇; 🅇; X; X; ) SQUARED LATIN CAPITAL LETTER X 1F148;1F148;1F148;0059;0059; # (🅈; 🅈; 🅈; Y; Y; ) SQUARED LATIN CAPITAL LETTER Y 1F149;1F149;1F149;005A;005A; # (🅉; 🅉; 🅉; Z; Z; ) SQUARED LATIN CAPITAL LETTER Z 1F14A;1F14A;1F14A;0048 0056;0048 0056; # (🅊; 🅊; 🅊; HV; HV; ) SQUARED HV 1F14B;1F14B;1F14B;004D 0056;004D 0056; # (🅋; 🅋; 🅋; MV; MV; ) SQUARED MV 1F14C;1F14C;1F14C;0053 0044;0053 0044; # (🅌; 🅌; 🅌; SD; SD; ) SQUARED SD 1F14D;1F14D;1F14D;0053 0053;0053 0053; # (🅍; 🅍; 🅍; SS; SS; ) SQUARED SS 1F14E;1F14E;1F14E;0050 0050 0056;0050 0050 0056; # (🅎; 🅎; 🅎; PPV; PPV; ) SQUARED PPV 1F14F;1F14F;1F14F;0057 0043;0057 0043; # (🅏; 🅏; 🅏; WC; WC; ) SQUARED WC 1F16A;1F16A;1F16A;004D 0043;004D 0043; # (🅪; 🅪; 🅪; MC; MC; ) RAISED MC SIGN 1F16B;1F16B;1F16B;004D 0044;004D 0044; # (🅫; 🅫; 🅫; MD; MD; ) RAISED MD SIGN 1F190;1F190;1F190;0044 004A;0044 004A; # (🆐; 🆐; 🆐; DJ; DJ; ) SQUARE DJ 1F200;1F200;1F200;307B 304B;307B 304B; # (🈀; 🈀; 🈀; ほか; ほか; ) SQUARE HIRAGANA HOKA 1F201;1F201;1F201;30B3 30B3;30B3 30B3; # (🈁; 🈁; 🈁; ココ; ココ; ) SQUARED KATAKANA KOKO 1F202;1F202;1F202;30B5;30B5; # (🈂; 🈂; 🈂; サ; サ; ) SQUARED KATAKANA SA 1F210;1F210;1F210;624B;624B; # (🈐; 🈐; 🈐; 手; 手; ) SQUARED CJK UNIFIED IDEOGRAPH-624B 1F211;1F211;1F211;5B57;5B57; # (🈑; 🈑; 🈑; 字; 字; ) SQUARED CJK UNIFIED IDEOGRAPH-5B57 1F212;1F212;1F212;53CC;53CC; # (🈒; 🈒; 🈒; 双; 双; ) SQUARED CJK UNIFIED IDEOGRAPH-53CC 1F213;1F213;1F213;30C7;30C6 3099; # (🈓; 🈓; 🈓; デ; テ◌゙; ) SQUARED KATAKANA DE 1F214;1F214;1F214;4E8C;4E8C; # (🈔; 🈔; 🈔; 二; 二; ) SQUARED CJK UNIFIED IDEOGRAPH-4E8C 1F215;1F215;1F215;591A;591A; # (🈕; 🈕; 🈕; 多; 多; ) SQUARED CJK UNIFIED IDEOGRAPH-591A 1F216;1F216;1F216;89E3;89E3; # (🈖; 🈖; 🈖; 解; 解; ) SQUARED CJK UNIFIED IDEOGRAPH-89E3 1F217;1F217;1F217;5929;5929; # (🈗; 🈗; 🈗; 天; 天; ) SQUARED CJK UNIFIED IDEOGRAPH-5929 1F218;1F218;1F218;4EA4;4EA4; # (🈘; 🈘; 🈘; 交; 交; ) SQUARED CJK UNIFIED IDEOGRAPH-4EA4 1F219;1F219;1F219;6620;6620; # (🈙; 🈙; 🈙; 映; 映; ) SQUARED CJK UNIFIED IDEOGRAPH-6620 1F21A;1F21A;1F21A;7121;7121; # (🈚; 🈚; 🈚; 無; 無; ) SQUARED CJK UNIFIED IDEOGRAPH-7121 1F21B;1F21B;1F21B;6599;6599; # (🈛; 🈛; 🈛; 料; 料; ) SQUARED CJK UNIFIED IDEOGRAPH-6599 1F21C;1F21C;1F21C;524D;524D; # (🈜; 🈜; 🈜; 前; 前; ) SQUARED CJK UNIFIED IDEOGRAPH-524D 1F21D;1F21D;1F21D;5F8C;5F8C; # (🈝; 🈝; 🈝; 後; 後; ) SQUARED CJK UNIFIED IDEOGRAPH-5F8C 1F21E;1F21E;1F21E;518D;518D; # (🈞; 🈞; 🈞; 再; 再; ) SQUARED CJK UNIFIED IDEOGRAPH-518D 1F21F;1F21F;1F21F;65B0;65B0; # (🈟; 🈟; 🈟; 新; 新; ) SQUARED CJK UNIFIED IDEOGRAPH-65B0 1F220;1F220;1F220;521D;521D; # (🈠; 🈠; 🈠; 初; 初; ) SQUARED CJK UNIFIED IDEOGRAPH-521D 1F221;1F221;1F221;7D42;7D42; # (🈡; 🈡; 🈡; 終; 終; ) SQUARED CJK UNIFIED IDEOGRAPH-7D42 1F222;1F222;1F222;751F;751F; # (🈢; 🈢; 🈢; 生; 生; ) SQUARED CJK UNIFIED IDEOGRAPH-751F 1F223;1F223;1F223;8CA9;8CA9; # (🈣; 🈣; 🈣; 販; 販; ) SQUARED CJK UNIFIED IDEOGRAPH-8CA9 1F224;1F224;1F224;58F0;58F0; # (🈤; 🈤; 🈤; 声; 声; ) SQUARED CJK UNIFIED IDEOGRAPH-58F0 1F225;1F225;1F225;5439;5439; # (🈥; 🈥; 🈥; 吹; 吹; ) SQUARED CJK UNIFIED IDEOGRAPH-5439 1F226;1F226;1F226;6F14;6F14; # (🈦; 🈦; 🈦; 演; 演; ) SQUARED CJK UNIFIED IDEOGRAPH-6F14 1F227;1F227;1F227;6295;6295; # (🈧; 🈧; 🈧; 投; 投; ) SQUARED CJK UNIFIED IDEOGRAPH-6295 1F228;1F228;1F228;6355;6355; # (🈨; 🈨; 🈨; 捕; 捕; ) SQUARED CJK UNIFIED IDEOGRAPH-6355 1F229;1F229;1F229;4E00;4E00; # (🈩; 🈩; 🈩; 一; 一; ) SQUARED CJK UNIFIED IDEOGRAPH-4E00 1F22A;1F22A;1F22A;4E09;4E09; # (🈪; 🈪; 🈪; 三; 三; ) SQUARED CJK UNIFIED IDEOGRAPH-4E09 1F22B;1F22B;1F22B;904A;904A; # (🈫; 🈫; 🈫; 遊; 遊; ) SQUARED CJK UNIFIED IDEOGRAPH-904A 1F22C;1F22C;1F22C;5DE6;5DE6; # (🈬; 🈬; 🈬; 左; 左; ) SQUARED CJK UNIFIED IDEOGRAPH-5DE6 1F22D;1F22D;1F22D;4E2D;4E2D; # (🈭; 🈭; 🈭; 中; 中; ) SQUARED CJK UNIFIED IDEOGRAPH-4E2D 1F22E;1F22E;1F22E;53F3;53F3; # (🈮; 🈮; 🈮; 右; 右; ) SQUARED CJK UNIFIED IDEOGRAPH-53F3 1F22F;1F22F;1F22F;6307;6307; # (🈯; 🈯; 🈯; 指; 指; ) SQUARED CJK UNIFIED IDEOGRAPH-6307 1F230;1F230;1F230;8D70;8D70; # (🈰; 🈰; 🈰; 走; 走; ) SQUARED CJK UNIFIED IDEOGRAPH-8D70 1F231;1F231;1F231;6253;6253; # (🈱; 🈱; 🈱; 打; 打; ) SQUARED CJK UNIFIED IDEOGRAPH-6253 1F232;1F232;1F232;7981;7981; # (🈲; 🈲; 🈲; 禁; 禁; ) SQUARED CJK UNIFIED IDEOGRAPH-7981 1F233;1F233;1F233;7A7A;7A7A; # (🈳; 🈳; 🈳; 空; 空; ) SQUARED CJK UNIFIED IDEOGRAPH-7A7A 1F234;1F234;1F234;5408;5408; # (🈴; 🈴; 🈴; 合; 合; ) SQUARED CJK UNIFIED IDEOGRAPH-5408 1F235;1F235;1F235;6E80;6E80; # (🈵; 🈵; 🈵; 満; 満; ) SQUARED CJK UNIFIED IDEOGRAPH-6E80 1F236;1F236;1F236;6709;6709; # (🈶; 🈶; 🈶; 有; 有; ) SQUARED CJK UNIFIED IDEOGRAPH-6709 1F237;1F237;1F237;6708;6708; # (🈷; 🈷; 🈷; 月; 月; ) SQUARED CJK UNIFIED IDEOGRAPH-6708 1F238;1F238;1F238;7533;7533; # (🈸; 🈸; 🈸; 申; 申; ) SQUARED CJK UNIFIED IDEOGRAPH-7533 1F239;1F239;1F239;5272;5272; # (🈹; 🈹; 🈹; 割; 割; ) SQUARED CJK UNIFIED IDEOGRAPH-5272 1F23A;1F23A;1F23A;55B6;55B6; # (🈺; 🈺; 🈺; 営; 営; ) SQUARED CJK UNIFIED IDEOGRAPH-55B6 1F23B;1F23B;1F23B;914D;914D; # (🈻; 🈻; 🈻; 配; 配; ) SQUARED CJK UNIFIED IDEOGRAPH-914D 1F240;1F240;1F240;3014 672C 3015;3014 672C 3015; # (🉀; 🉀; 🉀; 〔本〕; 〔本〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C 1F241;1F241;1F241;3014 4E09 3015;3014 4E09 3015; # (🉁; 🉁; 🉁; 〔三〕; 〔三〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 1F242;1F242;1F242;3014 4E8C 3015;3014 4E8C 3015; # (🉂; 🉂; 🉂; 〔二〕; 〔二〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 1F243;1F243;1F243;3014 5B89 3015;3014 5B89 3015; # (🉃; 🉃; 🉃; 〔安〕; 〔安〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 1F244;1F244;1F244;3014 70B9 3015;3014 70B9 3015; # (🉄; 🉄; 🉄; 〔点〕; 〔点〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 1F245;1F245;1F245;3014 6253 3015;3014 6253 3015; # (🉅; 🉅; 🉅; 〔打〕; 〔打〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F246;1F246;1F246;3014 76D7 3015;3014 76D7 3015; # (🉆; 🉆; 🉆; 〔盗〕; 〔盗〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 1F247;1F247;1F247;3014 52DD 3015;3014 52DD 3015; # (🉇; 🉇; 🉇; 〔勝〕; 〔勝〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD 1F248;1F248;1F248;3014 6557 3015;3014 6557 3015; # (🉈; 🉈; 🉈; 〔敗〕; 〔敗〕; ) TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F250;1F250;1F250;5F97;5F97; # (🉐; 🉐; 🉐; 得; 得; ) CIRCLED IDEOGRAPH ADVANTAGE 1F251;1F251;1F251;53EF;53EF; # (🉑; 🉑; 🉑; 可; 可; ) CIRCLED IDEOGRAPH ACCEPT 2F800;4E3D;4E3D;4E3D;4E3D; # (丽; 丽; 丽; 丽; 丽; ) CJK COMPATIBILITY IDEOGRAPH-2F800 2F801;4E38;4E38;4E38;4E38; # (丸; 丸; 丸; 丸; 丸; ) CJK COMPATIBILITY IDEOGRAPH-2F801 2F802;4E41;4E41;4E41;4E41; # (乁; 乁; 乁; 乁; 乁; ) CJK COMPATIBILITY IDEOGRAPH-2F802 2F803;20122;20122;20122;20122; # (𠄢; 𠄢; 𠄢; 𠄢; 𠄢; ) CJK COMPATIBILITY IDEOGRAPH-2F803 2F804;4F60;4F60;4F60;4F60; # (你; 你; 你; 你; 你; ) CJK COMPATIBILITY IDEOGRAPH-2F804 2F805;4FAE;4FAE;4FAE;4FAE; # (侮; 侮; 侮; 侮; 侮; ) CJK COMPATIBILITY IDEOGRAPH-2F805 2F806;4FBB;4FBB;4FBB;4FBB; # (侻; 侻; 侻; 侻; 侻; ) CJK COMPATIBILITY IDEOGRAPH-2F806 2F807;5002;5002;5002;5002; # (倂; 倂; 倂; 倂; 倂; ) CJK COMPATIBILITY IDEOGRAPH-2F807 2F808;507A;507A;507A;507A; # (偺; 偺; 偺; 偺; 偺; ) CJK COMPATIBILITY IDEOGRAPH-2F808 2F809;5099;5099;5099;5099; # (備; 備; 備; 備; 備; ) CJK COMPATIBILITY IDEOGRAPH-2F809 2F80A;50E7;50E7;50E7;50E7; # (僧; 僧; 僧; 僧; 僧; ) CJK COMPATIBILITY IDEOGRAPH-2F80A 2F80B;50CF;50CF;50CF;50CF; # (像; 像; 像; 像; 像; ) CJK COMPATIBILITY IDEOGRAPH-2F80B 2F80C;349E;349E;349E;349E; # (㒞; 㒞; 㒞; 㒞; 㒞; ) CJK COMPATIBILITY IDEOGRAPH-2F80C 2F80D;2063A;2063A;2063A;2063A; # (𠘺; 𠘺; 𠘺; 𠘺; 𠘺; ) CJK COMPATIBILITY IDEOGRAPH-2F80D 2F80E;514D;514D;514D;514D; # (免; 免; 免; 免; 免; ) CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F;5154;5154;5154;5154; # (兔; 兔; 兔; 兔; 兔; ) CJK COMPATIBILITY IDEOGRAPH-2F80F 2F810;5164;5164;5164;5164; # (兤; 兤; 兤; 兤; 兤; ) CJK COMPATIBILITY IDEOGRAPH-2F810 2F811;5177;5177;5177;5177; # (具; 具; 具; 具; 具; ) CJK COMPATIBILITY IDEOGRAPH-2F811 2F812;2051C;2051C;2051C;2051C; # (𠔜; 𠔜; 𠔜; 𠔜; 𠔜; ) CJK COMPATIBILITY IDEOGRAPH-2F812 2F813;34B9;34B9;34B9;34B9; # (㒹; 㒹; 㒹; 㒹; 㒹; ) CJK COMPATIBILITY IDEOGRAPH-2F813 2F814;5167;5167;5167;5167; # (內; 內; 內; 內; 內; ) CJK COMPATIBILITY IDEOGRAPH-2F814 2F815;518D;518D;518D;518D; # (再; 再; 再; 再; 再; ) CJK COMPATIBILITY IDEOGRAPH-2F815 2F816;2054B;2054B;2054B;2054B; # (𠕋; 𠕋; 𠕋; 𠕋; 𠕋; ) CJK COMPATIBILITY IDEOGRAPH-2F816 2F817;5197;5197;5197;5197; # (冗; 冗; 冗; 冗; 冗; ) CJK COMPATIBILITY IDEOGRAPH-2F817 2F818;51A4;51A4;51A4;51A4; # (冤; 冤; 冤; 冤; 冤; ) CJK COMPATIBILITY IDEOGRAPH-2F818 2F819;4ECC;4ECC;4ECC;4ECC; # (仌; 仌; 仌; 仌; 仌; ) CJK COMPATIBILITY IDEOGRAPH-2F819 2F81A;51AC;51AC;51AC;51AC; # (冬; 冬; 冬; 冬; 冬; ) CJK COMPATIBILITY IDEOGRAPH-2F81A 2F81B;51B5;51B5;51B5;51B5; # (况; 况; 况; 况; 况; ) CJK COMPATIBILITY IDEOGRAPH-2F81B 2F81C;291DF;291DF;291DF;291DF; # (𩇟; 𩇟; 𩇟; 𩇟; 𩇟; ) CJK COMPATIBILITY IDEOGRAPH-2F81C 2F81D;51F5;51F5;51F5;51F5; # (凵; 凵; 凵; 凵; 凵; ) CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E;5203;5203;5203;5203; # (刃; 刃; 刃; 刃; 刃; ) CJK COMPATIBILITY IDEOGRAPH-2F81E 2F81F;34DF;34DF;34DF;34DF; # (㓟; 㓟; 㓟; 㓟; 㓟; ) CJK COMPATIBILITY IDEOGRAPH-2F81F 2F820;523B;523B;523B;523B; # (刻; 刻; 刻; 刻; 刻; ) CJK COMPATIBILITY IDEOGRAPH-2F820 2F821;5246;5246;5246;5246; # (剆; 剆; 剆; 剆; 剆; ) CJK COMPATIBILITY IDEOGRAPH-2F821 2F822;5272;5272;5272;5272; # (割; 割; 割; 割; 割; ) CJK COMPATIBILITY IDEOGRAPH-2F822 2F823;5277;5277;5277;5277; # (剷; 剷; 剷; 剷; 剷; ) CJK COMPATIBILITY IDEOGRAPH-2F823 2F824;3515;3515;3515;3515; # (㔕; 㔕; 㔕; 㔕; 㔕; ) CJK COMPATIBILITY IDEOGRAPH-2F824 2F825;52C7;52C7;52C7;52C7; # (勇; 勇; 勇; 勇; 勇; ) CJK COMPATIBILITY IDEOGRAPH-2F825 2F826;52C9;52C9;52C9;52C9; # (勉; 勉; 勉; 勉; 勉; ) CJK COMPATIBILITY IDEOGRAPH-2F826 2F827;52E4;52E4;52E4;52E4; # (勤; 勤; 勤; 勤; 勤; ) CJK COMPATIBILITY IDEOGRAPH-2F827 2F828;52FA;52FA;52FA;52FA; # (勺; 勺; 勺; 勺; 勺; ) CJK COMPATIBILITY IDEOGRAPH-2F828 2F829;5305;5305;5305;5305; # (包; 包; 包; 包; 包; ) CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A;5306;5306;5306;5306; # (匆; 匆; 匆; 匆; 匆; ) CJK COMPATIBILITY IDEOGRAPH-2F82A 2F82B;5317;5317;5317;5317; # (北; 北; 北; 北; 北; ) CJK COMPATIBILITY IDEOGRAPH-2F82B 2F82C;5349;5349;5349;5349; # (卉; 卉; 卉; 卉; 卉; ) CJK COMPATIBILITY IDEOGRAPH-2F82C 2F82D;5351;5351;5351;5351; # (卑; 卑; 卑; 卑; 卑; ) CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E;535A;535A;535A;535A; # (博; 博; 博; 博; 博; ) CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F;5373;5373;5373;5373; # (即; 即; 即; 即; 即; ) CJK COMPATIBILITY IDEOGRAPH-2F82F 2F830;537D;537D;537D;537D; # (卽; 卽; 卽; 卽; 卽; ) CJK COMPATIBILITY IDEOGRAPH-2F830 2F831;537F;537F;537F;537F; # (卿; 卿; 卿; 卿; 卿; ) CJK COMPATIBILITY IDEOGRAPH-2F831 2F832;537F;537F;537F;537F; # (卿; 卿; 卿; 卿; 卿; ) CJK COMPATIBILITY IDEOGRAPH-2F832 2F833;537F;537F;537F;537F; # (卿; 卿; 卿; 卿; 卿; ) CJK COMPATIBILITY IDEOGRAPH-2F833 2F834;20A2C;20A2C;20A2C;20A2C; # (𠨬; 𠨬; 𠨬; 𠨬; 𠨬; ) CJK COMPATIBILITY IDEOGRAPH-2F834 2F835;7070;7070;7070;7070; # (灰; 灰; 灰; 灰; 灰; ) CJK COMPATIBILITY IDEOGRAPH-2F835 2F836;53CA;53CA;53CA;53CA; # (及; 及; 及; 及; 及; ) CJK COMPATIBILITY IDEOGRAPH-2F836 2F837;53DF;53DF;53DF;53DF; # (叟; 叟; 叟; 叟; 叟; ) CJK COMPATIBILITY IDEOGRAPH-2F837 2F838;20B63;20B63;20B63;20B63; # (𠭣; 𠭣; 𠭣; 𠭣; 𠭣; ) CJK COMPATIBILITY IDEOGRAPH-2F838 2F839;53EB;53EB;53EB;53EB; # (叫; 叫; 叫; 叫; 叫; ) CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A;53F1;53F1;53F1;53F1; # (叱; 叱; 叱; 叱; 叱; ) CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B;5406;5406;5406;5406; # (吆; 吆; 吆; 吆; 吆; ) CJK COMPATIBILITY IDEOGRAPH-2F83B 2F83C;549E;549E;549E;549E; # (咞; 咞; 咞; 咞; 咞; ) CJK COMPATIBILITY IDEOGRAPH-2F83C 2F83D;5438;5438;5438;5438; # (吸; 吸; 吸; 吸; 吸; ) CJK COMPATIBILITY IDEOGRAPH-2F83D 2F83E;5448;5448;5448;5448; # (呈; 呈; 呈; 呈; 呈; ) CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F;5468;5468;5468;5468; # (周; 周; 周; 周; 周; ) CJK COMPATIBILITY IDEOGRAPH-2F83F 2F840;54A2;54A2;54A2;54A2; # (咢; 咢; 咢; 咢; 咢; ) CJK COMPATIBILITY IDEOGRAPH-2F840 2F841;54F6;54F6;54F6;54F6; # (哶; 哶; 哶; 哶; 哶; ) CJK COMPATIBILITY IDEOGRAPH-2F841 2F842;5510;5510;5510;5510; # (唐; 唐; 唐; 唐; 唐; ) CJK COMPATIBILITY IDEOGRAPH-2F842 2F843;5553;5553;5553;5553; # (啓; 啓; 啓; 啓; 啓; ) CJK COMPATIBILITY IDEOGRAPH-2F843 2F844;5563;5563;5563;5563; # (啣; 啣; 啣; 啣; 啣; ) CJK COMPATIBILITY IDEOGRAPH-2F844 2F845;5584;5584;5584;5584; # (善; 善; 善; 善; 善; ) CJK COMPATIBILITY IDEOGRAPH-2F845 2F846;5584;5584;5584;5584; # (善; 善; 善; 善; 善; ) CJK COMPATIBILITY IDEOGRAPH-2F846 2F847;5599;5599;5599;5599; # (喙; 喙; 喙; 喙; 喙; ) CJK COMPATIBILITY IDEOGRAPH-2F847 2F848;55AB;55AB;55AB;55AB; # (喫; 喫; 喫; 喫; 喫; ) CJK COMPATIBILITY IDEOGRAPH-2F848 2F849;55B3;55B3;55B3;55B3; # (喳; 喳; 喳; 喳; 喳; ) CJK COMPATIBILITY IDEOGRAPH-2F849 2F84A;55C2;55C2;55C2;55C2; # (嗂; 嗂; 嗂; 嗂; 嗂; ) CJK COMPATIBILITY IDEOGRAPH-2F84A 2F84B;5716;5716;5716;5716; # (圖; 圖; 圖; 圖; 圖; ) CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84C;5606;5606;5606;5606; # (嘆; 嘆; 嘆; 嘆; 嘆; ) CJK COMPATIBILITY IDEOGRAPH-2F84C 2F84D;5717;5717;5717;5717; # (圗; 圗; 圗; 圗; 圗; ) CJK COMPATIBILITY IDEOGRAPH-2F84D 2F84E;5651;5651;5651;5651; # (噑; 噑; 噑; 噑; 噑; ) CJK COMPATIBILITY IDEOGRAPH-2F84E 2F84F;5674;5674;5674;5674; # (噴; 噴; 噴; 噴; 噴; ) CJK COMPATIBILITY IDEOGRAPH-2F84F 2F850;5207;5207;5207;5207; # (切; 切; 切; 切; 切; ) CJK COMPATIBILITY IDEOGRAPH-2F850 2F851;58EE;58EE;58EE;58EE; # (壮; 壮; 壮; 壮; 壮; ) CJK COMPATIBILITY IDEOGRAPH-2F851 2F852;57CE;57CE;57CE;57CE; # (城; 城; 城; 城; 城; ) CJK COMPATIBILITY IDEOGRAPH-2F852 2F853;57F4;57F4;57F4;57F4; # (埴; 埴; 埴; 埴; 埴; ) CJK COMPATIBILITY IDEOGRAPH-2F853 2F854;580D;580D;580D;580D; # (堍; 堍; 堍; 堍; 堍; ) CJK COMPATIBILITY IDEOGRAPH-2F854 2F855;578B;578B;578B;578B; # (型; 型; 型; 型; 型; ) CJK COMPATIBILITY IDEOGRAPH-2F855 2F856;5832;5832;5832;5832; # (堲; 堲; 堲; 堲; 堲; ) CJK COMPATIBILITY IDEOGRAPH-2F856 2F857;5831;5831;5831;5831; # (報; 報; 報; 報; 報; ) CJK COMPATIBILITY IDEOGRAPH-2F857 2F858;58AC;58AC;58AC;58AC; # (墬; 墬; 墬; 墬; 墬; ) CJK COMPATIBILITY IDEOGRAPH-2F858 2F859;214E4;214E4;214E4;214E4; # (𡓤; 𡓤; 𡓤; 𡓤; 𡓤; ) CJK COMPATIBILITY IDEOGRAPH-2F859 2F85A;58F2;58F2;58F2;58F2; # (売; 売; 売; 売; 売; ) CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B;58F7;58F7;58F7;58F7; # (壷; 壷; 壷; 壷; 壷; ) CJK COMPATIBILITY IDEOGRAPH-2F85B 2F85C;5906;5906;5906;5906; # (夆; 夆; 夆; 夆; 夆; ) CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D;591A;591A;591A;591A; # (多; 多; 多; 多; 多; ) CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E;5922;5922;5922;5922; # (夢; 夢; 夢; 夢; 夢; ) CJK COMPATIBILITY IDEOGRAPH-2F85E 2F85F;5962;5962;5962;5962; # (奢; 奢; 奢; 奢; 奢; ) CJK COMPATIBILITY IDEOGRAPH-2F85F 2F860;216A8;216A8;216A8;216A8; # (𡚨; 𡚨; 𡚨; 𡚨; 𡚨; ) CJK COMPATIBILITY IDEOGRAPH-2F860 2F861;216EA;216EA;216EA;216EA; # (𡛪; 𡛪; 𡛪; 𡛪; 𡛪; ) CJK COMPATIBILITY IDEOGRAPH-2F861 2F862;59EC;59EC;59EC;59EC; # (姬; 姬; 姬; 姬; 姬; ) CJK COMPATIBILITY IDEOGRAPH-2F862 2F863;5A1B;5A1B;5A1B;5A1B; # (娛; 娛; 娛; 娛; 娛; ) CJK COMPATIBILITY IDEOGRAPH-2F863 2F864;5A27;5A27;5A27;5A27; # (娧; 娧; 娧; 娧; 娧; ) CJK COMPATIBILITY IDEOGRAPH-2F864 2F865;59D8;59D8;59D8;59D8; # (姘; 姘; 姘; 姘; 姘; ) CJK COMPATIBILITY IDEOGRAPH-2F865 2F866;5A66;5A66;5A66;5A66; # (婦; 婦; 婦; 婦; 婦; ) CJK COMPATIBILITY IDEOGRAPH-2F866 2F867;36EE;36EE;36EE;36EE; # (㛮; 㛮; 㛮; 㛮; 㛮; ) CJK COMPATIBILITY IDEOGRAPH-2F867 2F868;36FC;36FC;36FC;36FC; # (㛼; 㛼; 㛼; 㛼; 㛼; ) CJK COMPATIBILITY IDEOGRAPH-2F868 2F869;5B08;5B08;5B08;5B08; # (嬈; 嬈; 嬈; 嬈; 嬈; ) CJK COMPATIBILITY IDEOGRAPH-2F869 2F86A;5B3E;5B3E;5B3E;5B3E; # (嬾; 嬾; 嬾; 嬾; 嬾; ) CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B;5B3E;5B3E;5B3E;5B3E; # (嬾; 嬾; 嬾; 嬾; 嬾; ) CJK COMPATIBILITY IDEOGRAPH-2F86B 2F86C;219C8;219C8;219C8;219C8; # (𡧈; 𡧈; 𡧈; 𡧈; 𡧈; ) CJK COMPATIBILITY IDEOGRAPH-2F86C 2F86D;5BC3;5BC3;5BC3;5BC3; # (寃; 寃; 寃; 寃; 寃; ) CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E;5BD8;5BD8;5BD8;5BD8; # (寘; 寘; 寘; 寘; 寘; ) CJK COMPATIBILITY IDEOGRAPH-2F86E 2F86F;5BE7;5BE7;5BE7;5BE7; # (寧; 寧; 寧; 寧; 寧; ) CJK COMPATIBILITY IDEOGRAPH-2F86F 2F870;5BF3;5BF3;5BF3;5BF3; # (寳; 寳; 寳; 寳; 寳; ) CJK COMPATIBILITY IDEOGRAPH-2F870 2F871;21B18;21B18;21B18;21B18; # (𡬘; 𡬘; 𡬘; 𡬘; 𡬘; ) CJK COMPATIBILITY IDEOGRAPH-2F871 2F872;5BFF;5BFF;5BFF;5BFF; # (寿; 寿; 寿; 寿; 寿; ) CJK COMPATIBILITY IDEOGRAPH-2F872 2F873;5C06;5C06;5C06;5C06; # (将; 将; 将; 将; 将; ) CJK COMPATIBILITY IDEOGRAPH-2F873 2F874;5F53;5F53;5F53;5F53; # (当; 当; 当; 当; 当; ) CJK COMPATIBILITY IDEOGRAPH-2F874 2F875;5C22;5C22;5C22;5C22; # (尢; 尢; 尢; 尢; 尢; ) CJK COMPATIBILITY IDEOGRAPH-2F875 2F876;3781;3781;3781;3781; # (㞁; 㞁; 㞁; 㞁; 㞁; ) CJK COMPATIBILITY IDEOGRAPH-2F876 2F877;5C60;5C60;5C60;5C60; # (屠; 屠; 屠; 屠; 屠; ) CJK COMPATIBILITY IDEOGRAPH-2F877 2F878;5C6E;5C6E;5C6E;5C6E; # (屮; 屮; 屮; 屮; 屮; ) CJK COMPATIBILITY IDEOGRAPH-2F878 2F879;5CC0;5CC0;5CC0;5CC0; # (峀; 峀; 峀; 峀; 峀; ) CJK COMPATIBILITY IDEOGRAPH-2F879 2F87A;5C8D;5C8D;5C8D;5C8D; # (岍; 岍; 岍; 岍; 岍; ) CJK COMPATIBILITY IDEOGRAPH-2F87A 2F87B;21DE4;21DE4;21DE4;21DE4; # (𡷤; 𡷤; 𡷤; 𡷤; 𡷤; ) CJK COMPATIBILITY IDEOGRAPH-2F87B 2F87C;5D43;5D43;5D43;5D43; # (嵃; 嵃; 嵃; 嵃; 嵃; ) CJK COMPATIBILITY IDEOGRAPH-2F87C 2F87D;21DE6;21DE6;21DE6;21DE6; # (𡷦; 𡷦; 𡷦; 𡷦; 𡷦; ) CJK COMPATIBILITY IDEOGRAPH-2F87D 2F87E;5D6E;5D6E;5D6E;5D6E; # (嵮; 嵮; 嵮; 嵮; 嵮; ) CJK COMPATIBILITY IDEOGRAPH-2F87E 2F87F;5D6B;5D6B;5D6B;5D6B; # (嵫; 嵫; 嵫; 嵫; 嵫; ) CJK COMPATIBILITY IDEOGRAPH-2F87F 2F880;5D7C;5D7C;5D7C;5D7C; # (嵼; 嵼; 嵼; 嵼; 嵼; ) CJK COMPATIBILITY IDEOGRAPH-2F880 2F881;5DE1;5DE1;5DE1;5DE1; # (巡; 巡; 巡; 巡; 巡; ) CJK COMPATIBILITY IDEOGRAPH-2F881 2F882;5DE2;5DE2;5DE2;5DE2; # (巢; 巢; 巢; 巢; 巢; ) CJK COMPATIBILITY IDEOGRAPH-2F882 2F883;382F;382F;382F;382F; # (㠯; 㠯; 㠯; 㠯; 㠯; ) CJK COMPATIBILITY IDEOGRAPH-2F883 2F884;5DFD;5DFD;5DFD;5DFD; # (巽; 巽; 巽; 巽; 巽; ) CJK COMPATIBILITY IDEOGRAPH-2F884 2F885;5E28;5E28;5E28;5E28; # (帨; 帨; 帨; 帨; 帨; ) CJK COMPATIBILITY IDEOGRAPH-2F885 2F886;5E3D;5E3D;5E3D;5E3D; # (帽; 帽; 帽; 帽; 帽; ) CJK COMPATIBILITY IDEOGRAPH-2F886 2F887;5E69;5E69;5E69;5E69; # (幩; 幩; 幩; 幩; 幩; ) CJK COMPATIBILITY IDEOGRAPH-2F887 2F888;3862;3862;3862;3862; # (㡢; 㡢; 㡢; 㡢; 㡢; ) CJK COMPATIBILITY IDEOGRAPH-2F888 2F889;22183;22183;22183;22183; # (𢆃; 𢆃; 𢆃; 𢆃; 𢆃; ) CJK COMPATIBILITY IDEOGRAPH-2F889 2F88A;387C;387C;387C;387C; # (㡼; 㡼; 㡼; 㡼; 㡼; ) CJK COMPATIBILITY IDEOGRAPH-2F88A 2F88B;5EB0;5EB0;5EB0;5EB0; # (庰; 庰; 庰; 庰; 庰; ) CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C;5EB3;5EB3;5EB3;5EB3; # (庳; 庳; 庳; 庳; 庳; ) CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D;5EB6;5EB6;5EB6;5EB6; # (庶; 庶; 庶; 庶; 庶; ) CJK COMPATIBILITY IDEOGRAPH-2F88D 2F88E;5ECA;5ECA;5ECA;5ECA; # (廊; 廊; 廊; 廊; 廊; ) CJK COMPATIBILITY IDEOGRAPH-2F88E 2F88F;2A392;2A392;2A392;2A392; # (𪎒; 𪎒; 𪎒; 𪎒; 𪎒; ) CJK COMPATIBILITY IDEOGRAPH-2F88F 2F890;5EFE;5EFE;5EFE;5EFE; # (廾; 廾; 廾; 廾; 廾; ) CJK COMPATIBILITY IDEOGRAPH-2F890 2F891;22331;22331;22331;22331; # (𢌱; 𢌱; 𢌱; 𢌱; 𢌱; ) CJK COMPATIBILITY IDEOGRAPH-2F891 2F892;22331;22331;22331;22331; # (𢌱; 𢌱; 𢌱; 𢌱; 𢌱; ) CJK COMPATIBILITY IDEOGRAPH-2F892 2F893;8201;8201;8201;8201; # (舁; 舁; 舁; 舁; 舁; ) CJK COMPATIBILITY IDEOGRAPH-2F893 2F894;5F22;5F22;5F22;5F22; # (弢; 弢; 弢; 弢; 弢; ) CJK COMPATIBILITY IDEOGRAPH-2F894 2F895;5F22;5F22;5F22;5F22; # (弢; 弢; 弢; 弢; 弢; ) CJK COMPATIBILITY IDEOGRAPH-2F895 2F896;38C7;38C7;38C7;38C7; # (㣇; 㣇; 㣇; 㣇; 㣇; ) CJK COMPATIBILITY IDEOGRAPH-2F896 2F897;232B8;232B8;232B8;232B8; # (𣊸; 𣊸; 𣊸; 𣊸; 𣊸; ) CJK COMPATIBILITY IDEOGRAPH-2F897 2F898;261DA;261DA;261DA;261DA; # (𦇚; 𦇚; 𦇚; 𦇚; 𦇚; ) CJK COMPATIBILITY IDEOGRAPH-2F898 2F899;5F62;5F62;5F62;5F62; # (形; 形; 形; 形; 形; ) CJK COMPATIBILITY IDEOGRAPH-2F899 2F89A;5F6B;5F6B;5F6B;5F6B; # (彫; 彫; 彫; 彫; 彫; ) CJK COMPATIBILITY IDEOGRAPH-2F89A 2F89B;38E3;38E3;38E3;38E3; # (㣣; 㣣; 㣣; 㣣; 㣣; ) CJK COMPATIBILITY IDEOGRAPH-2F89B 2F89C;5F9A;5F9A;5F9A;5F9A; # (徚; 徚; 徚; 徚; 徚; ) CJK COMPATIBILITY IDEOGRAPH-2F89C 2F89D;5FCD;5FCD;5FCD;5FCD; # (忍; 忍; 忍; 忍; 忍; ) CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E;5FD7;5FD7;5FD7;5FD7; # (志; 志; 志; 志; 志; ) CJK COMPATIBILITY IDEOGRAPH-2F89E 2F89F;5FF9;5FF9;5FF9;5FF9; # (忹; 忹; 忹; 忹; 忹; ) CJK COMPATIBILITY IDEOGRAPH-2F89F 2F8A0;6081;6081;6081;6081; # (悁; 悁; 悁; 悁; 悁; ) CJK COMPATIBILITY IDEOGRAPH-2F8A0 2F8A1;393A;393A;393A;393A; # (㤺; 㤺; 㤺; 㤺; 㤺; ) CJK COMPATIBILITY IDEOGRAPH-2F8A1 2F8A2;391C;391C;391C;391C; # (㤜; 㤜; 㤜; 㤜; 㤜; ) CJK COMPATIBILITY IDEOGRAPH-2F8A2 2F8A3;6094;6094;6094;6094; # (悔; 悔; 悔; 悔; 悔; ) CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A4;226D4;226D4;226D4;226D4; # (𢛔; 𢛔; 𢛔; 𢛔; 𢛔; ) CJK COMPATIBILITY IDEOGRAPH-2F8A4 2F8A5;60C7;60C7;60C7;60C7; # (惇; 惇; 惇; 惇; 惇; ) CJK COMPATIBILITY IDEOGRAPH-2F8A5 2F8A6;6148;6148;6148;6148; # (慈; 慈; 慈; 慈; 慈; ) CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7;614C;614C;614C;614C; # (慌; 慌; 慌; 慌; 慌; ) CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A8;614E;614E;614E;614E; # (慎; 慎; 慎; 慎; 慎; ) CJK COMPATIBILITY IDEOGRAPH-2F8A8 2F8A9;614C;614C;614C;614C; # (慌; 慌; 慌; 慌; 慌; ) CJK COMPATIBILITY IDEOGRAPH-2F8A9 2F8AA;617A;617A;617A;617A; # (慺; 慺; 慺; 慺; 慺; ) CJK COMPATIBILITY IDEOGRAPH-2F8AA 2F8AB;618E;618E;618E;618E; # (憎; 憎; 憎; 憎; 憎; ) CJK COMPATIBILITY IDEOGRAPH-2F8AB 2F8AC;61B2;61B2;61B2;61B2; # (憲; 憲; 憲; 憲; 憲; ) CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AD;61A4;61A4;61A4;61A4; # (憤; 憤; 憤; 憤; 憤; ) CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE;61AF;61AF;61AF;61AF; # (憯; 憯; 憯; 憯; 憯; ) CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AF;61DE;61DE;61DE;61DE; # (懞; 懞; 懞; 懞; 懞; ) CJK COMPATIBILITY IDEOGRAPH-2F8AF 2F8B0;61F2;61F2;61F2;61F2; # (懲; 懲; 懲; 懲; 懲; ) CJK COMPATIBILITY IDEOGRAPH-2F8B0 2F8B1;61F6;61F6;61F6;61F6; # (懶; 懶; 懶; 懶; 懶; ) CJK COMPATIBILITY IDEOGRAPH-2F8B1 2F8B2;6210;6210;6210;6210; # (成; 成; 成; 成; 成; ) CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3;621B;621B;621B;621B; # (戛; 戛; 戛; 戛; 戛; ) CJK COMPATIBILITY IDEOGRAPH-2F8B3 2F8B4;625D;625D;625D;625D; # (扝; 扝; 扝; 扝; 扝; ) CJK COMPATIBILITY IDEOGRAPH-2F8B4 2F8B5;62B1;62B1;62B1;62B1; # (抱; 抱; 抱; 抱; 抱; ) CJK COMPATIBILITY IDEOGRAPH-2F8B5 2F8B6;62D4;62D4;62D4;62D4; # (拔; 拔; 拔; 拔; 拔; ) CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8B7;6350;6350;6350;6350; # (捐; 捐; 捐; 捐; 捐; ) CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8B8;22B0C;22B0C;22B0C;22B0C; # (𢬌; 𢬌; 𢬌; 𢬌; 𢬌; ) CJK COMPATIBILITY IDEOGRAPH-2F8B8 2F8B9;633D;633D;633D;633D; # (挽; 挽; 挽; 挽; 挽; ) CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8BA;62FC;62FC;62FC;62FC; # (拼; 拼; 拼; 拼; 拼; ) CJK COMPATIBILITY IDEOGRAPH-2F8BA 2F8BB;6368;6368;6368;6368; # (捨; 捨; 捨; 捨; 捨; ) CJK COMPATIBILITY IDEOGRAPH-2F8BB 2F8BC;6383;6383;6383;6383; # (掃; 掃; 掃; 掃; 掃; ) CJK COMPATIBILITY IDEOGRAPH-2F8BC 2F8BD;63E4;63E4;63E4;63E4; # (揤; 揤; 揤; 揤; 揤; ) CJK COMPATIBILITY IDEOGRAPH-2F8BD 2F8BE;22BF1;22BF1;22BF1;22BF1; # (𢯱; 𢯱; 𢯱; 𢯱; 𢯱; ) CJK COMPATIBILITY IDEOGRAPH-2F8BE 2F8BF;6422;6422;6422;6422; # (搢; 搢; 搢; 搢; 搢; ) CJK COMPATIBILITY IDEOGRAPH-2F8BF 2F8C0;63C5;63C5;63C5;63C5; # (揅; 揅; 揅; 揅; 揅; ) CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8C1;63A9;63A9;63A9;63A9; # (掩; 掩; 掩; 掩; 掩; ) CJK COMPATIBILITY IDEOGRAPH-2F8C1 2F8C2;3A2E;3A2E;3A2E;3A2E; # (㨮; 㨮; 㨮; 㨮; 㨮; ) CJK COMPATIBILITY IDEOGRAPH-2F8C2 2F8C3;6469;6469;6469;6469; # (摩; 摩; 摩; 摩; 摩; ) CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C4;647E;647E;647E;647E; # (摾; 摾; 摾; 摾; 摾; ) CJK COMPATIBILITY IDEOGRAPH-2F8C4 2F8C5;649D;649D;649D;649D; # (撝; 撝; 撝; 撝; 撝; ) CJK COMPATIBILITY IDEOGRAPH-2F8C5 2F8C6;6477;6477;6477;6477; # (摷; 摷; 摷; 摷; 摷; ) CJK COMPATIBILITY IDEOGRAPH-2F8C6 2F8C7;3A6C;3A6C;3A6C;3A6C; # (㩬; 㩬; 㩬; 㩬; 㩬; ) CJK COMPATIBILITY IDEOGRAPH-2F8C7 2F8C8;654F;654F;654F;654F; # (敏; 敏; 敏; 敏; 敏; ) CJK COMPATIBILITY IDEOGRAPH-2F8C8 2F8C9;656C;656C;656C;656C; # (敬; 敬; 敬; 敬; 敬; ) CJK COMPATIBILITY IDEOGRAPH-2F8C9 2F8CA;2300A;2300A;2300A;2300A; # (𣀊; 𣀊; 𣀊; 𣀊; 𣀊; ) CJK COMPATIBILITY IDEOGRAPH-2F8CA 2F8CB;65E3;65E3;65E3;65E3; # (旣; 旣; 旣; 旣; 旣; ) CJK COMPATIBILITY IDEOGRAPH-2F8CB 2F8CC;66F8;66F8;66F8;66F8; # (書; 書; 書; 書; 書; ) CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8CD;6649;6649;6649;6649; # (晉; 晉; 晉; 晉; 晉; ) CJK COMPATIBILITY IDEOGRAPH-2F8CD 2F8CE;3B19;3B19;3B19;3B19; # (㬙; 㬙; 㬙; 㬙; 㬙; ) CJK COMPATIBILITY IDEOGRAPH-2F8CE 2F8CF;6691;6691;6691;6691; # (暑; 暑; 暑; 暑; 暑; ) CJK COMPATIBILITY IDEOGRAPH-2F8CF 2F8D0;3B08;3B08;3B08;3B08; # (㬈; 㬈; 㬈; 㬈; 㬈; ) CJK COMPATIBILITY IDEOGRAPH-2F8D0 2F8D1;3AE4;3AE4;3AE4;3AE4; # (㫤; 㫤; 㫤; 㫤; 㫤; ) CJK COMPATIBILITY IDEOGRAPH-2F8D1 2F8D2;5192;5192;5192;5192; # (冒; 冒; 冒; 冒; 冒; ) CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3;5195;5195;5195;5195; # (冕; 冕; 冕; 冕; 冕; ) CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F8D4;6700;6700;6700;6700; # (最; 最; 最; 最; 最; ) CJK COMPATIBILITY IDEOGRAPH-2F8D4 2F8D5;669C;669C;669C;669C; # (暜; 暜; 暜; 暜; 暜; ) CJK COMPATIBILITY IDEOGRAPH-2F8D5 2F8D6;80AD;80AD;80AD;80AD; # (肭; 肭; 肭; 肭; 肭; ) CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F8D7;43D9;43D9;43D9;43D9; # (䏙; 䏙; 䏙; 䏙; 䏙; ) CJK COMPATIBILITY IDEOGRAPH-2F8D7 2F8D8;6717;6717;6717;6717; # (朗; 朗; 朗; 朗; 朗; ) CJK COMPATIBILITY IDEOGRAPH-2F8D8 2F8D9;671B;671B;671B;671B; # (望; 望; 望; 望; 望; ) CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA;6721;6721;6721;6721; # (朡; 朡; 朡; 朡; 朡; ) CJK COMPATIBILITY IDEOGRAPH-2F8DA 2F8DB;675E;675E;675E;675E; # (杞; 杞; 杞; 杞; 杞; ) CJK COMPATIBILITY IDEOGRAPH-2F8DB 2F8DC;6753;6753;6753;6753; # (杓; 杓; 杓; 杓; 杓; ) CJK COMPATIBILITY IDEOGRAPH-2F8DC 2F8DD;233C3;233C3;233C3;233C3; # (𣏃; 𣏃; 𣏃; 𣏃; 𣏃; ) CJK COMPATIBILITY IDEOGRAPH-2F8DD 2F8DE;3B49;3B49;3B49;3B49; # (㭉; 㭉; 㭉; 㭉; 㭉; ) CJK COMPATIBILITY IDEOGRAPH-2F8DE 2F8DF;67FA;67FA;67FA;67FA; # (柺; 柺; 柺; 柺; 柺; ) CJK COMPATIBILITY IDEOGRAPH-2F8DF 2F8E0;6785;6785;6785;6785; # (枅; 枅; 枅; 枅; 枅; ) CJK COMPATIBILITY IDEOGRAPH-2F8E0 2F8E1;6852;6852;6852;6852; # (桒; 桒; 桒; 桒; 桒; ) CJK COMPATIBILITY IDEOGRAPH-2F8E1 2F8E2;6885;6885;6885;6885; # (梅; 梅; 梅; 梅; 梅; ) CJK COMPATIBILITY IDEOGRAPH-2F8E2 2F8E3;2346D;2346D;2346D;2346D; # (𣑭; 𣑭; 𣑭; 𣑭; 𣑭; ) CJK COMPATIBILITY IDEOGRAPH-2F8E3 2F8E4;688E;688E;688E;688E; # (梎; 梎; 梎; 梎; 梎; ) CJK COMPATIBILITY IDEOGRAPH-2F8E4 2F8E5;681F;681F;681F;681F; # (栟; 栟; 栟; 栟; 栟; ) CJK COMPATIBILITY IDEOGRAPH-2F8E5 2F8E6;6914;6914;6914;6914; # (椔; 椔; 椔; 椔; 椔; ) CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E7;3B9D;3B9D;3B9D;3B9D; # (㮝; 㮝; 㮝; 㮝; 㮝; ) CJK COMPATIBILITY IDEOGRAPH-2F8E7 2F8E8;6942;6942;6942;6942; # (楂; 楂; 楂; 楂; 楂; ) CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9;69A3;69A3;69A3;69A3; # (榣; 榣; 榣; 榣; 榣; ) CJK COMPATIBILITY IDEOGRAPH-2F8E9 2F8EA;69EA;69EA;69EA;69EA; # (槪; 槪; 槪; 槪; 槪; ) CJK COMPATIBILITY IDEOGRAPH-2F8EA 2F8EB;6AA8;6AA8;6AA8;6AA8; # (檨; 檨; 檨; 檨; 檨; ) CJK COMPATIBILITY IDEOGRAPH-2F8EB 2F8EC;236A3;236A3;236A3;236A3; # (𣚣; 𣚣; 𣚣; 𣚣; 𣚣; ) CJK COMPATIBILITY IDEOGRAPH-2F8EC 2F8ED;6ADB;6ADB;6ADB;6ADB; # (櫛; 櫛; 櫛; 櫛; 櫛; ) CJK COMPATIBILITY IDEOGRAPH-2F8ED 2F8EE;3C18;3C18;3C18;3C18; # (㰘; 㰘; 㰘; 㰘; 㰘; ) CJK COMPATIBILITY IDEOGRAPH-2F8EE 2F8EF;6B21;6B21;6B21;6B21; # (次; 次; 次; 次; 次; ) CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F0;238A7;238A7;238A7;238A7; # (𣢧; 𣢧; 𣢧; 𣢧; 𣢧; ) CJK COMPATIBILITY IDEOGRAPH-2F8F0 2F8F1;6B54;6B54;6B54;6B54; # (歔; 歔; 歔; 歔; 歔; ) CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F2;3C4E;3C4E;3C4E;3C4E; # (㱎; 㱎; 㱎; 㱎; 㱎; ) CJK COMPATIBILITY IDEOGRAPH-2F8F2 2F8F3;6B72;6B72;6B72;6B72; # (歲; 歲; 歲; 歲; 歲; ) CJK COMPATIBILITY IDEOGRAPH-2F8F3 2F8F4;6B9F;6B9F;6B9F;6B9F; # (殟; 殟; 殟; 殟; 殟; ) CJK COMPATIBILITY IDEOGRAPH-2F8F4 2F8F5;6BBA;6BBA;6BBA;6BBA; # (殺; 殺; 殺; 殺; 殺; ) CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6;6BBB;6BBB;6BBB;6BBB; # (殻; 殻; 殻; 殻; 殻; ) CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F8F7;23A8D;23A8D;23A8D;23A8D; # (𣪍; 𣪍; 𣪍; 𣪍; 𣪍; ) CJK COMPATIBILITY IDEOGRAPH-2F8F7 2F8F8;21D0B;21D0B;21D0B;21D0B; # (𡴋; 𡴋; 𡴋; 𡴋; 𡴋; ) CJK COMPATIBILITY IDEOGRAPH-2F8F8 2F8F9;23AFA;23AFA;23AFA;23AFA; # (𣫺; 𣫺; 𣫺; 𣫺; 𣫺; ) CJK COMPATIBILITY IDEOGRAPH-2F8F9 2F8FA;6C4E;6C4E;6C4E;6C4E; # (汎; 汎; 汎; 汎; 汎; ) CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FB;23CBC;23CBC;23CBC;23CBC; # (𣲼; 𣲼; 𣲼; 𣲼; 𣲼; ) CJK COMPATIBILITY IDEOGRAPH-2F8FB 2F8FC;6CBF;6CBF;6CBF;6CBF; # (沿; 沿; 沿; 沿; 沿; ) CJK COMPATIBILITY IDEOGRAPH-2F8FC 2F8FD;6CCD;6CCD;6CCD;6CCD; # (泍; 泍; 泍; 泍; 泍; ) CJK COMPATIBILITY IDEOGRAPH-2F8FD 2F8FE;6C67;6C67;6C67;6C67; # (汧; 汧; 汧; 汧; 汧; ) CJK COMPATIBILITY IDEOGRAPH-2F8FE 2F8FF;6D16;6D16;6D16;6D16; # (洖; 洖; 洖; 洖; 洖; ) CJK COMPATIBILITY IDEOGRAPH-2F8FF 2F900;6D3E;6D3E;6D3E;6D3E; # (派; 派; 派; 派; 派; ) CJK COMPATIBILITY IDEOGRAPH-2F900 2F901;6D77;6D77;6D77;6D77; # (海; 海; 海; 海; 海; ) CJK COMPATIBILITY IDEOGRAPH-2F901 2F902;6D41;6D41;6D41;6D41; # (流; 流; 流; 流; 流; ) CJK COMPATIBILITY IDEOGRAPH-2F902 2F903;6D69;6D69;6D69;6D69; # (浩; 浩; 浩; 浩; 浩; ) CJK COMPATIBILITY IDEOGRAPH-2F903 2F904;6D78;6D78;6D78;6D78; # (浸; 浸; 浸; 浸; 浸; ) CJK COMPATIBILITY IDEOGRAPH-2F904 2F905;6D85;6D85;6D85;6D85; # (涅; 涅; 涅; 涅; 涅; ) CJK COMPATIBILITY IDEOGRAPH-2F905 2F906;23D1E;23D1E;23D1E;23D1E; # (𣴞; 𣴞; 𣴞; 𣴞; 𣴞; ) CJK COMPATIBILITY IDEOGRAPH-2F906 2F907;6D34;6D34;6D34;6D34; # (洴; 洴; 洴; 洴; 洴; ) CJK COMPATIBILITY IDEOGRAPH-2F907 2F908;6E2F;6E2F;6E2F;6E2F; # (港; 港; 港; 港; 港; ) CJK COMPATIBILITY IDEOGRAPH-2F908 2F909;6E6E;6E6E;6E6E;6E6E; # (湮; 湮; 湮; 湮; 湮; ) CJK COMPATIBILITY IDEOGRAPH-2F909 2F90A;3D33;3D33;3D33;3D33; # (㴳; 㴳; 㴳; 㴳; 㴳; ) CJK COMPATIBILITY IDEOGRAPH-2F90A 2F90B;6ECB;6ECB;6ECB;6ECB; # (滋; 滋; 滋; 滋; 滋; ) CJK COMPATIBILITY IDEOGRAPH-2F90B 2F90C;6EC7;6EC7;6EC7;6EC7; # (滇; 滇; 滇; 滇; 滇; ) CJK COMPATIBILITY IDEOGRAPH-2F90C 2F90D;23ED1;23ED1;23ED1;23ED1; # (𣻑; 𣻑; 𣻑; 𣻑; 𣻑; ) CJK COMPATIBILITY IDEOGRAPH-2F90D 2F90E;6DF9;6DF9;6DF9;6DF9; # (淹; 淹; 淹; 淹; 淹; ) CJK COMPATIBILITY IDEOGRAPH-2F90E 2F90F;6F6E;6F6E;6F6E;6F6E; # (潮; 潮; 潮; 潮; 潮; ) CJK COMPATIBILITY IDEOGRAPH-2F90F 2F910;23F5E;23F5E;23F5E;23F5E; # (𣽞; 𣽞; 𣽞; 𣽞; 𣽞; ) CJK COMPATIBILITY IDEOGRAPH-2F910 2F911;23F8E;23F8E;23F8E;23F8E; # (𣾎; 𣾎; 𣾎; 𣾎; 𣾎; ) CJK COMPATIBILITY IDEOGRAPH-2F911 2F912;6FC6;6FC6;6FC6;6FC6; # (濆; 濆; 濆; 濆; 濆; ) CJK COMPATIBILITY IDEOGRAPH-2F912 2F913;7039;7039;7039;7039; # (瀹; 瀹; 瀹; 瀹; 瀹; ) CJK COMPATIBILITY IDEOGRAPH-2F913 2F914;701E;701E;701E;701E; # (瀞; 瀞; 瀞; 瀞; 瀞; ) CJK COMPATIBILITY IDEOGRAPH-2F914 2F915;701B;701B;701B;701B; # (瀛; 瀛; 瀛; 瀛; 瀛; ) CJK COMPATIBILITY IDEOGRAPH-2F915 2F916;3D96;3D96;3D96;3D96; # (㶖; 㶖; 㶖; 㶖; 㶖; ) CJK COMPATIBILITY IDEOGRAPH-2F916 2F917;704A;704A;704A;704A; # (灊; 灊; 灊; 灊; 灊; ) CJK COMPATIBILITY IDEOGRAPH-2F917 2F918;707D;707D;707D;707D; # (災; 災; 災; 災; 災; ) CJK COMPATIBILITY IDEOGRAPH-2F918 2F919;7077;7077;7077;7077; # (灷; 灷; 灷; 灷; 灷; ) CJK COMPATIBILITY IDEOGRAPH-2F919 2F91A;70AD;70AD;70AD;70AD; # (炭; 炭; 炭; 炭; 炭; ) CJK COMPATIBILITY IDEOGRAPH-2F91A 2F91B;20525;20525;20525;20525; # (𠔥; 𠔥; 𠔥; 𠔥; 𠔥; ) CJK COMPATIBILITY IDEOGRAPH-2F91B 2F91C;7145;7145;7145;7145; # (煅; 煅; 煅; 煅; 煅; ) CJK COMPATIBILITY IDEOGRAPH-2F91C 2F91D;24263;24263;24263;24263; # (𤉣; 𤉣; 𤉣; 𤉣; 𤉣; ) CJK COMPATIBILITY IDEOGRAPH-2F91D 2F91E;719C;719C;719C;719C; # (熜; 熜; 熜; 熜; 熜; ) CJK COMPATIBILITY IDEOGRAPH-2F91E 2F91F;243AB;243AB;243AB;243AB; # (𤎫; 𤎫; 𤎫; 𤎫; 𤎫; ) CJK COMPATIBILITY IDEOGRAPH-2F91F 2F920;7228;7228;7228;7228; # (爨; 爨; 爨; 爨; 爨; ) CJK COMPATIBILITY IDEOGRAPH-2F920 2F921;7235;7235;7235;7235; # (爵; 爵; 爵; 爵; 爵; ) CJK COMPATIBILITY IDEOGRAPH-2F921 2F922;7250;7250;7250;7250; # (牐; 牐; 牐; 牐; 牐; ) CJK COMPATIBILITY IDEOGRAPH-2F922 2F923;24608;24608;24608;24608; # (𤘈; 𤘈; 𤘈; 𤘈; 𤘈; ) CJK COMPATIBILITY IDEOGRAPH-2F923 2F924;7280;7280;7280;7280; # (犀; 犀; 犀; 犀; 犀; ) CJK COMPATIBILITY IDEOGRAPH-2F924 2F925;7295;7295;7295;7295; # (犕; 犕; 犕; 犕; 犕; ) CJK COMPATIBILITY IDEOGRAPH-2F925 2F926;24735;24735;24735;24735; # (𤜵; 𤜵; 𤜵; 𤜵; 𤜵; ) CJK COMPATIBILITY IDEOGRAPH-2F926 2F927;24814;24814;24814;24814; # (𤠔; 𤠔; 𤠔; 𤠔; 𤠔; ) CJK COMPATIBILITY IDEOGRAPH-2F927 2F928;737A;737A;737A;737A; # (獺; 獺; 獺; 獺; 獺; ) CJK COMPATIBILITY IDEOGRAPH-2F928 2F929;738B;738B;738B;738B; # (王; 王; 王; 王; 王; ) CJK COMPATIBILITY IDEOGRAPH-2F929 2F92A;3EAC;3EAC;3EAC;3EAC; # (㺬; 㺬; 㺬; 㺬; 㺬; ) CJK COMPATIBILITY IDEOGRAPH-2F92A 2F92B;73A5;73A5;73A5;73A5; # (玥; 玥; 玥; 玥; 玥; ) CJK COMPATIBILITY IDEOGRAPH-2F92B 2F92C;3EB8;3EB8;3EB8;3EB8; # (㺸; 㺸; 㺸; 㺸; 㺸; ) CJK COMPATIBILITY IDEOGRAPH-2F92C 2F92D;3EB8;3EB8;3EB8;3EB8; # (㺸; 㺸; 㺸; 㺸; 㺸; ) CJK COMPATIBILITY IDEOGRAPH-2F92D 2F92E;7447;7447;7447;7447; # (瑇; 瑇; 瑇; 瑇; 瑇; ) CJK COMPATIBILITY IDEOGRAPH-2F92E 2F92F;745C;745C;745C;745C; # (瑜; 瑜; 瑜; 瑜; 瑜; ) CJK COMPATIBILITY IDEOGRAPH-2F92F 2F930;7471;7471;7471;7471; # (瑱; 瑱; 瑱; 瑱; 瑱; ) CJK COMPATIBILITY IDEOGRAPH-2F930 2F931;7485;7485;7485;7485; # (璅; 璅; 璅; 璅; 璅; ) CJK COMPATIBILITY IDEOGRAPH-2F931 2F932;74CA;74CA;74CA;74CA; # (瓊; 瓊; 瓊; 瓊; 瓊; ) CJK COMPATIBILITY IDEOGRAPH-2F932 2F933;3F1B;3F1B;3F1B;3F1B; # (㼛; 㼛; 㼛; 㼛; 㼛; ) CJK COMPATIBILITY IDEOGRAPH-2F933 2F934;7524;7524;7524;7524; # (甤; 甤; 甤; 甤; 甤; ) CJK COMPATIBILITY IDEOGRAPH-2F934 2F935;24C36;24C36;24C36;24C36; # (𤰶; 𤰶; 𤰶; 𤰶; 𤰶; ) CJK COMPATIBILITY IDEOGRAPH-2F935 2F936;753E;753E;753E;753E; # (甾; 甾; 甾; 甾; 甾; ) CJK COMPATIBILITY IDEOGRAPH-2F936 2F937;24C92;24C92;24C92;24C92; # (𤲒; 𤲒; 𤲒; 𤲒; 𤲒; ) CJK COMPATIBILITY IDEOGRAPH-2F937 2F938;7570;7570;7570;7570; # (異; 異; 異; 異; 異; ) CJK COMPATIBILITY IDEOGRAPH-2F938 2F939;2219F;2219F;2219F;2219F; # (𢆟; 𢆟; 𢆟; 𢆟; 𢆟; ) CJK COMPATIBILITY IDEOGRAPH-2F939 2F93A;7610;7610;7610;7610; # (瘐; 瘐; 瘐; 瘐; 瘐; ) CJK COMPATIBILITY IDEOGRAPH-2F93A 2F93B;24FA1;24FA1;24FA1;24FA1; # (𤾡; 𤾡; 𤾡; 𤾡; 𤾡; ) CJK COMPATIBILITY IDEOGRAPH-2F93B 2F93C;24FB8;24FB8;24FB8;24FB8; # (𤾸; 𤾸; 𤾸; 𤾸; 𤾸; ) CJK COMPATIBILITY IDEOGRAPH-2F93C 2F93D;25044;25044;25044;25044; # (𥁄; 𥁄; 𥁄; 𥁄; 𥁄; ) CJK COMPATIBILITY IDEOGRAPH-2F93D 2F93E;3FFC;3FFC;3FFC;3FFC; # (㿼; 㿼; 㿼; 㿼; 㿼; ) CJK COMPATIBILITY IDEOGRAPH-2F93E 2F93F;4008;4008;4008;4008; # (䀈; 䀈; 䀈; 䀈; 䀈; ) CJK COMPATIBILITY IDEOGRAPH-2F93F 2F940;76F4;76F4;76F4;76F4; # (直; 直; 直; 直; 直; ) CJK COMPATIBILITY IDEOGRAPH-2F940 2F941;250F3;250F3;250F3;250F3; # (𥃳; 𥃳; 𥃳; 𥃳; 𥃳; ) CJK COMPATIBILITY IDEOGRAPH-2F941 2F942;250F2;250F2;250F2;250F2; # (𥃲; 𥃲; 𥃲; 𥃲; 𥃲; ) CJK COMPATIBILITY IDEOGRAPH-2F942 2F943;25119;25119;25119;25119; # (𥄙; 𥄙; 𥄙; 𥄙; 𥄙; ) CJK COMPATIBILITY IDEOGRAPH-2F943 2F944;25133;25133;25133;25133; # (𥄳; 𥄳; 𥄳; 𥄳; 𥄳; ) CJK COMPATIBILITY IDEOGRAPH-2F944 2F945;771E;771E;771E;771E; # (眞; 眞; 眞; 眞; 眞; ) CJK COMPATIBILITY IDEOGRAPH-2F945 2F946;771F;771F;771F;771F; # (真; 真; 真; 真; 真; ) CJK COMPATIBILITY IDEOGRAPH-2F946 2F947;771F;771F;771F;771F; # (真; 真; 真; 真; 真; ) CJK COMPATIBILITY IDEOGRAPH-2F947 2F948;774A;774A;774A;774A; # (睊; 睊; 睊; 睊; 睊; ) CJK COMPATIBILITY IDEOGRAPH-2F948 2F949;4039;4039;4039;4039; # (䀹; 䀹; 䀹; 䀹; 䀹; ) CJK COMPATIBILITY IDEOGRAPH-2F949 2F94A;778B;778B;778B;778B; # (瞋; 瞋; 瞋; 瞋; 瞋; ) CJK COMPATIBILITY IDEOGRAPH-2F94A 2F94B;4046;4046;4046;4046; # (䁆; 䁆; 䁆; 䁆; 䁆; ) CJK COMPATIBILITY IDEOGRAPH-2F94B 2F94C;4096;4096;4096;4096; # (䂖; 䂖; 䂖; 䂖; 䂖; ) CJK COMPATIBILITY IDEOGRAPH-2F94C 2F94D;2541D;2541D;2541D;2541D; # (𥐝; 𥐝; 𥐝; 𥐝; 𥐝; ) CJK COMPATIBILITY IDEOGRAPH-2F94D 2F94E;784E;784E;784E;784E; # (硎; 硎; 硎; 硎; 硎; ) CJK COMPATIBILITY IDEOGRAPH-2F94E 2F94F;788C;788C;788C;788C; # (碌; 碌; 碌; 碌; 碌; ) CJK COMPATIBILITY IDEOGRAPH-2F94F 2F950;78CC;78CC;78CC;78CC; # (磌; 磌; 磌; 磌; 磌; ) CJK COMPATIBILITY IDEOGRAPH-2F950 2F951;40E3;40E3;40E3;40E3; # (䃣; 䃣; 䃣; 䃣; 䃣; ) CJK COMPATIBILITY IDEOGRAPH-2F951 2F952;25626;25626;25626;25626; # (𥘦; 𥘦; 𥘦; 𥘦; 𥘦; ) CJK COMPATIBILITY IDEOGRAPH-2F952 2F953;7956;7956;7956;7956; # (祖; 祖; 祖; 祖; 祖; ) CJK COMPATIBILITY IDEOGRAPH-2F953 2F954;2569A;2569A;2569A;2569A; # (𥚚; 𥚚; 𥚚; 𥚚; 𥚚; ) CJK COMPATIBILITY IDEOGRAPH-2F954 2F955;256C5;256C5;256C5;256C5; # (𥛅; 𥛅; 𥛅; 𥛅; 𥛅; ) CJK COMPATIBILITY IDEOGRAPH-2F955 2F956;798F;798F;798F;798F; # (福; 福; 福; 福; 福; ) CJK COMPATIBILITY IDEOGRAPH-2F956 2F957;79EB;79EB;79EB;79EB; # (秫; 秫; 秫; 秫; 秫; ) CJK COMPATIBILITY IDEOGRAPH-2F957 2F958;412F;412F;412F;412F; # (䄯; 䄯; 䄯; 䄯; 䄯; ) CJK COMPATIBILITY IDEOGRAPH-2F958 2F959;7A40;7A40;7A40;7A40; # (穀; 穀; 穀; 穀; 穀; ) CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A;7A4A;7A4A;7A4A;7A4A; # (穊; 穊; 穊; 穊; 穊; ) CJK COMPATIBILITY IDEOGRAPH-2F95A 2F95B;7A4F;7A4F;7A4F;7A4F; # (穏; 穏; 穏; 穏; 穏; ) CJK COMPATIBILITY IDEOGRAPH-2F95B 2F95C;2597C;2597C;2597C;2597C; # (𥥼; 𥥼; 𥥼; 𥥼; 𥥼; ) CJK COMPATIBILITY IDEOGRAPH-2F95C 2F95D;25AA7;25AA7;25AA7;25AA7; # (𥪧; 𥪧; 𥪧; 𥪧; 𥪧; ) CJK COMPATIBILITY IDEOGRAPH-2F95D 2F95E;25AA7;25AA7;25AA7;25AA7; # (𥪧; 𥪧; 𥪧; 𥪧; 𥪧; ) CJK COMPATIBILITY IDEOGRAPH-2F95E 2F95F;7AEE;7AEE;7AEE;7AEE; # (竮; 竮; 竮; 竮; 竮; ) CJK COMPATIBILITY IDEOGRAPH-2F95F 2F960;4202;4202;4202;4202; # (䈂; 䈂; 䈂; 䈂; 䈂; ) CJK COMPATIBILITY IDEOGRAPH-2F960 2F961;25BAB;25BAB;25BAB;25BAB; # (𥮫; 𥮫; 𥮫; 𥮫; 𥮫; ) CJK COMPATIBILITY IDEOGRAPH-2F961 2F962;7BC6;7BC6;7BC6;7BC6; # (篆; 篆; 篆; 篆; 篆; ) CJK COMPATIBILITY IDEOGRAPH-2F962 2F963;7BC9;7BC9;7BC9;7BC9; # (築; 築; 築; 築; 築; ) CJK COMPATIBILITY IDEOGRAPH-2F963 2F964;4227;4227;4227;4227; # (䈧; 䈧; 䈧; 䈧; 䈧; ) CJK COMPATIBILITY IDEOGRAPH-2F964 2F965;25C80;25C80;25C80;25C80; # (𥲀; 𥲀; 𥲀; 𥲀; 𥲀; ) CJK COMPATIBILITY IDEOGRAPH-2F965 2F966;7CD2;7CD2;7CD2;7CD2; # (糒; 糒; 糒; 糒; 糒; ) CJK COMPATIBILITY IDEOGRAPH-2F966 2F967;42A0;42A0;42A0;42A0; # (䊠; 䊠; 䊠; 䊠; 䊠; ) CJK COMPATIBILITY IDEOGRAPH-2F967 2F968;7CE8;7CE8;7CE8;7CE8; # (糨; 糨; 糨; 糨; 糨; ) CJK COMPATIBILITY IDEOGRAPH-2F968 2F969;7CE3;7CE3;7CE3;7CE3; # (糣; 糣; 糣; 糣; 糣; ) CJK COMPATIBILITY IDEOGRAPH-2F969 2F96A;7D00;7D00;7D00;7D00; # (紀; 紀; 紀; 紀; 紀; ) CJK COMPATIBILITY IDEOGRAPH-2F96A 2F96B;25F86;25F86;25F86;25F86; # (𥾆; 𥾆; 𥾆; 𥾆; 𥾆; ) CJK COMPATIBILITY IDEOGRAPH-2F96B 2F96C;7D63;7D63;7D63;7D63; # (絣; 絣; 絣; 絣; 絣; ) CJK COMPATIBILITY IDEOGRAPH-2F96C 2F96D;4301;4301;4301;4301; # (䌁; 䌁; 䌁; 䌁; 䌁; ) CJK COMPATIBILITY IDEOGRAPH-2F96D 2F96E;7DC7;7DC7;7DC7;7DC7; # (緇; 緇; 緇; 緇; 緇; ) CJK COMPATIBILITY IDEOGRAPH-2F96E 2F96F;7E02;7E02;7E02;7E02; # (縂; 縂; 縂; 縂; 縂; ) CJK COMPATIBILITY IDEOGRAPH-2F96F 2F970;7E45;7E45;7E45;7E45; # (繅; 繅; 繅; 繅; 繅; ) CJK COMPATIBILITY IDEOGRAPH-2F970 2F971;4334;4334;4334;4334; # (䌴; 䌴; 䌴; 䌴; 䌴; ) CJK COMPATIBILITY IDEOGRAPH-2F971 2F972;26228;26228;26228;26228; # (𦈨; 𦈨; 𦈨; 𦈨; 𦈨; ) CJK COMPATIBILITY IDEOGRAPH-2F972 2F973;26247;26247;26247;26247; # (𦉇; 𦉇; 𦉇; 𦉇; 𦉇; ) CJK COMPATIBILITY IDEOGRAPH-2F973 2F974;4359;4359;4359;4359; # (䍙; 䍙; 䍙; 䍙; 䍙; ) CJK COMPATIBILITY IDEOGRAPH-2F974 2F975;262D9;262D9;262D9;262D9; # (𦋙; 𦋙; 𦋙; 𦋙; 𦋙; ) CJK COMPATIBILITY IDEOGRAPH-2F975 2F976;7F7A;7F7A;7F7A;7F7A; # (罺; 罺; 罺; 罺; 罺; ) CJK COMPATIBILITY IDEOGRAPH-2F976 2F977;2633E;2633E;2633E;2633E; # (𦌾; 𦌾; 𦌾; 𦌾; 𦌾; ) CJK COMPATIBILITY IDEOGRAPH-2F977 2F978;7F95;7F95;7F95;7F95; # (羕; 羕; 羕; 羕; 羕; ) CJK COMPATIBILITY IDEOGRAPH-2F978 2F979;7FFA;7FFA;7FFA;7FFA; # (翺; 翺; 翺; 翺; 翺; ) CJK COMPATIBILITY IDEOGRAPH-2F979 2F97A;8005;8005;8005;8005; # (者; 者; 者; 者; 者; ) CJK COMPATIBILITY IDEOGRAPH-2F97A 2F97B;264DA;264DA;264DA;264DA; # (𦓚; 𦓚; 𦓚; 𦓚; 𦓚; ) CJK COMPATIBILITY IDEOGRAPH-2F97B 2F97C;26523;26523;26523;26523; # (𦔣; 𦔣; 𦔣; 𦔣; 𦔣; ) CJK COMPATIBILITY IDEOGRAPH-2F97C 2F97D;8060;8060;8060;8060; # (聠; 聠; 聠; 聠; 聠; ) CJK COMPATIBILITY IDEOGRAPH-2F97D 2F97E;265A8;265A8;265A8;265A8; # (𦖨; 𦖨; 𦖨; 𦖨; 𦖨; ) CJK COMPATIBILITY IDEOGRAPH-2F97E 2F97F;8070;8070;8070;8070; # (聰; 聰; 聰; 聰; 聰; ) CJK COMPATIBILITY IDEOGRAPH-2F97F 2F980;2335F;2335F;2335F;2335F; # (𣍟; 𣍟; 𣍟; 𣍟; 𣍟; ) CJK COMPATIBILITY IDEOGRAPH-2F980 2F981;43D5;43D5;43D5;43D5; # (䏕; 䏕; 䏕; 䏕; 䏕; ) CJK COMPATIBILITY IDEOGRAPH-2F981 2F982;80B2;80B2;80B2;80B2; # (育; 育; 育; 育; 育; ) CJK COMPATIBILITY IDEOGRAPH-2F982 2F983;8103;8103;8103;8103; # (脃; 脃; 脃; 脃; 脃; ) CJK COMPATIBILITY IDEOGRAPH-2F983 2F984;440B;440B;440B;440B; # (䐋; 䐋; 䐋; 䐋; 䐋; ) CJK COMPATIBILITY IDEOGRAPH-2F984 2F985;813E;813E;813E;813E; # (脾; 脾; 脾; 脾; 脾; ) CJK COMPATIBILITY IDEOGRAPH-2F985 2F986;5AB5;5AB5;5AB5;5AB5; # (媵; 媵; 媵; 媵; 媵; ) CJK COMPATIBILITY IDEOGRAPH-2F986 2F987;267A7;267A7;267A7;267A7; # (𦞧; 𦞧; 𦞧; 𦞧; 𦞧; ) CJK COMPATIBILITY IDEOGRAPH-2F987 2F988;267B5;267B5;267B5;267B5; # (𦞵; 𦞵; 𦞵; 𦞵; 𦞵; ) CJK COMPATIBILITY IDEOGRAPH-2F988 2F989;23393;23393;23393;23393; # (𣎓; 𣎓; 𣎓; 𣎓; 𣎓; ) CJK COMPATIBILITY IDEOGRAPH-2F989 2F98A;2339C;2339C;2339C;2339C; # (𣎜; 𣎜; 𣎜; 𣎜; 𣎜; ) CJK COMPATIBILITY IDEOGRAPH-2F98A 2F98B;8201;8201;8201;8201; # (舁; 舁; 舁; 舁; 舁; ) CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C;8204;8204;8204;8204; # (舄; 舄; 舄; 舄; 舄; ) CJK COMPATIBILITY IDEOGRAPH-2F98C 2F98D;8F9E;8F9E;8F9E;8F9E; # (辞; 辞; 辞; 辞; 辞; ) CJK COMPATIBILITY IDEOGRAPH-2F98D 2F98E;446B;446B;446B;446B; # (䑫; 䑫; 䑫; 䑫; 䑫; ) CJK COMPATIBILITY IDEOGRAPH-2F98E 2F98F;8291;8291;8291;8291; # (芑; 芑; 芑; 芑; 芑; ) CJK COMPATIBILITY IDEOGRAPH-2F98F 2F990;828B;828B;828B;828B; # (芋; 芋; 芋; 芋; 芋; ) CJK COMPATIBILITY IDEOGRAPH-2F990 2F991;829D;829D;829D;829D; # (芝; 芝; 芝; 芝; 芝; ) CJK COMPATIBILITY IDEOGRAPH-2F991 2F992;52B3;52B3;52B3;52B3; # (劳; 劳; 劳; 劳; 劳; ) CJK COMPATIBILITY IDEOGRAPH-2F992 2F993;82B1;82B1;82B1;82B1; # (花; 花; 花; 花; 花; ) CJK COMPATIBILITY IDEOGRAPH-2F993 2F994;82B3;82B3;82B3;82B3; # (芳; 芳; 芳; 芳; 芳; ) CJK COMPATIBILITY IDEOGRAPH-2F994 2F995;82BD;82BD;82BD;82BD; # (芽; 芽; 芽; 芽; 芽; ) CJK COMPATIBILITY IDEOGRAPH-2F995 2F996;82E6;82E6;82E6;82E6; # (苦; 苦; 苦; 苦; 苦; ) CJK COMPATIBILITY IDEOGRAPH-2F996 2F997;26B3C;26B3C;26B3C;26B3C; # (𦬼; 𦬼; 𦬼; 𦬼; 𦬼; ) CJK COMPATIBILITY IDEOGRAPH-2F997 2F998;82E5;82E5;82E5;82E5; # (若; 若; 若; 若; 若; ) CJK COMPATIBILITY IDEOGRAPH-2F998 2F999;831D;831D;831D;831D; # (茝; 茝; 茝; 茝; 茝; ) CJK COMPATIBILITY IDEOGRAPH-2F999 2F99A;8363;8363;8363;8363; # (荣; 荣; 荣; 荣; 荣; ) CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99B;83AD;83AD;83AD;83AD; # (莭; 莭; 莭; 莭; 莭; ) CJK COMPATIBILITY IDEOGRAPH-2F99B 2F99C;8323;8323;8323;8323; # (茣; 茣; 茣; 茣; 茣; ) CJK COMPATIBILITY IDEOGRAPH-2F99C 2F99D;83BD;83BD;83BD;83BD; # (莽; 莽; 莽; 莽; 莽; ) CJK COMPATIBILITY IDEOGRAPH-2F99D 2F99E;83E7;83E7;83E7;83E7; # (菧; 菧; 菧; 菧; 菧; ) CJK COMPATIBILITY IDEOGRAPH-2F99E 2F99F;8457;8457;8457;8457; # (著; 著; 著; 著; 著; ) CJK COMPATIBILITY IDEOGRAPH-2F99F 2F9A0;8353;8353;8353;8353; # (荓; 荓; 荓; 荓; 荓; ) CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F9A1;83CA;83CA;83CA;83CA; # (菊; 菊; 菊; 菊; 菊; ) CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2;83CC;83CC;83CC;83CC; # (菌; 菌; 菌; 菌; 菌; ) CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3;83DC;83DC;83DC;83DC; # (菜; 菜; 菜; 菜; 菜; ) CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F9A4;26C36;26C36;26C36;26C36; # (𦰶; 𦰶; 𦰶; 𦰶; 𦰶; ) CJK COMPATIBILITY IDEOGRAPH-2F9A4 2F9A5;26D6B;26D6B;26D6B;26D6B; # (𦵫; 𦵫; 𦵫; 𦵫; 𦵫; ) CJK COMPATIBILITY IDEOGRAPH-2F9A5 2F9A6;26CD5;26CD5;26CD5;26CD5; # (𦳕; 𦳕; 𦳕; 𦳕; 𦳕; ) CJK COMPATIBILITY IDEOGRAPH-2F9A6 2F9A7;452B;452B;452B;452B; # (䔫; 䔫; 䔫; 䔫; 䔫; ) CJK COMPATIBILITY IDEOGRAPH-2F9A7 2F9A8;84F1;84F1;84F1;84F1; # (蓱; 蓱; 蓱; 蓱; 蓱; ) CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9;84F3;84F3;84F3;84F3; # (蓳; 蓳; 蓳; 蓳; 蓳; ) CJK COMPATIBILITY IDEOGRAPH-2F9A9 2F9AA;8516;8516;8516;8516; # (蔖; 蔖; 蔖; 蔖; 蔖; ) CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AB;273CA;273CA;273CA;273CA; # (𧏊; 𧏊; 𧏊; 𧏊; 𧏊; ) CJK COMPATIBILITY IDEOGRAPH-2F9AB 2F9AC;8564;8564;8564;8564; # (蕤; 蕤; 蕤; 蕤; 蕤; ) CJK COMPATIBILITY IDEOGRAPH-2F9AC 2F9AD;26F2C;26F2C;26F2C;26F2C; # (𦼬; 𦼬; 𦼬; 𦼬; 𦼬; ) CJK COMPATIBILITY IDEOGRAPH-2F9AD 2F9AE;455D;455D;455D;455D; # (䕝; 䕝; 䕝; 䕝; 䕝; ) CJK COMPATIBILITY IDEOGRAPH-2F9AE 2F9AF;4561;4561;4561;4561; # (䕡; 䕡; 䕡; 䕡; 䕡; ) CJK COMPATIBILITY IDEOGRAPH-2F9AF 2F9B0;26FB1;26FB1;26FB1;26FB1; # (𦾱; 𦾱; 𦾱; 𦾱; 𦾱; ) CJK COMPATIBILITY IDEOGRAPH-2F9B0 2F9B1;270D2;270D2;270D2;270D2; # (𧃒; 𧃒; 𧃒; 𧃒; 𧃒; ) CJK COMPATIBILITY IDEOGRAPH-2F9B1 2F9B2;456B;456B;456B;456B; # (䕫; 䕫; 䕫; 䕫; 䕫; ) CJK COMPATIBILITY IDEOGRAPH-2F9B2 2F9B3;8650;8650;8650;8650; # (虐; 虐; 虐; 虐; 虐; ) CJK COMPATIBILITY IDEOGRAPH-2F9B3 2F9B4;865C;865C;865C;865C; # (虜; 虜; 虜; 虜; 虜; ) CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5;8667;8667;8667;8667; # (虧; 虧; 虧; 虧; 虧; ) CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6;8669;8669;8669;8669; # (虩; 虩; 虩; 虩; 虩; ) CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F9B7;86A9;86A9;86A9;86A9; # (蚩; 蚩; 蚩; 蚩; 蚩; ) CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9B8;8688;8688;8688;8688; # (蚈; 蚈; 蚈; 蚈; 蚈; ) CJK COMPATIBILITY IDEOGRAPH-2F9B8 2F9B9;870E;870E;870E;870E; # (蜎; 蜎; 蜎; 蜎; 蜎; ) CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BA;86E2;86E2;86E2;86E2; # (蛢; 蛢; 蛢; 蛢; 蛢; ) CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9BB;8779;8779;8779;8779; # (蝹; 蝹; 蝹; 蝹; 蝹; ) CJK COMPATIBILITY IDEOGRAPH-2F9BB 2F9BC;8728;8728;8728;8728; # (蜨; 蜨; 蜨; 蜨; 蜨; ) CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD;876B;876B;876B;876B; # (蝫; 蝫; 蝫; 蝫; 蝫; ) CJK COMPATIBILITY IDEOGRAPH-2F9BD 2F9BE;8786;8786;8786;8786; # (螆; 螆; 螆; 螆; 螆; ) CJK COMPATIBILITY IDEOGRAPH-2F9BE 2F9BF;45D7;45D7;45D7;45D7; # (䗗; 䗗; 䗗; 䗗; 䗗; ) CJK COMPATIBILITY IDEOGRAPH-2F9BF 2F9C0;87E1;87E1;87E1;87E1; # (蟡; 蟡; 蟡; 蟡; 蟡; ) CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1;8801;8801;8801;8801; # (蠁; 蠁; 蠁; 蠁; 蠁; ) CJK COMPATIBILITY IDEOGRAPH-2F9C1 2F9C2;45F9;45F9;45F9;45F9; # (䗹; 䗹; 䗹; 䗹; 䗹; ) CJK COMPATIBILITY IDEOGRAPH-2F9C2 2F9C3;8860;8860;8860;8860; # (衠; 衠; 衠; 衠; 衠; ) CJK COMPATIBILITY IDEOGRAPH-2F9C3 2F9C4;8863;8863;8863;8863; # (衣; 衣; 衣; 衣; 衣; ) CJK COMPATIBILITY IDEOGRAPH-2F9C4 2F9C5;27667;27667;27667;27667; # (𧙧; 𧙧; 𧙧; 𧙧; 𧙧; ) CJK COMPATIBILITY IDEOGRAPH-2F9C5 2F9C6;88D7;88D7;88D7;88D7; # (裗; 裗; 裗; 裗; 裗; ) CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7;88DE;88DE;88DE;88DE; # (裞; 裞; 裞; 裞; 裞; ) CJK COMPATIBILITY IDEOGRAPH-2F9C7 2F9C8;4635;4635;4635;4635; # (䘵; 䘵; 䘵; 䘵; 䘵; ) CJK COMPATIBILITY IDEOGRAPH-2F9C8 2F9C9;88FA;88FA;88FA;88FA; # (裺; 裺; 裺; 裺; 裺; ) CJK COMPATIBILITY IDEOGRAPH-2F9C9 2F9CA;34BB;34BB;34BB;34BB; # (㒻; 㒻; 㒻; 㒻; 㒻; ) CJK COMPATIBILITY IDEOGRAPH-2F9CA 2F9CB;278AE;278AE;278AE;278AE; # (𧢮; 𧢮; 𧢮; 𧢮; 𧢮; ) CJK COMPATIBILITY IDEOGRAPH-2F9CB 2F9CC;27966;27966;27966;27966; # (𧥦; 𧥦; 𧥦; 𧥦; 𧥦; ) CJK COMPATIBILITY IDEOGRAPH-2F9CC 2F9CD;46BE;46BE;46BE;46BE; # (䚾; 䚾; 䚾; 䚾; 䚾; ) CJK COMPATIBILITY IDEOGRAPH-2F9CD 2F9CE;46C7;46C7;46C7;46C7; # (䛇; 䛇; 䛇; 䛇; 䛇; ) CJK COMPATIBILITY IDEOGRAPH-2F9CE 2F9CF;8AA0;8AA0;8AA0;8AA0; # (誠; 誠; 誠; 誠; 誠; ) CJK COMPATIBILITY IDEOGRAPH-2F9CF 2F9D0;8AED;8AED;8AED;8AED; # (諭; 諭; 諭; 諭; 諭; ) CJK COMPATIBILITY IDEOGRAPH-2F9D0 2F9D1;8B8A;8B8A;8B8A;8B8A; # (變; 變; 變; 變; 變; ) CJK COMPATIBILITY IDEOGRAPH-2F9D1 2F9D2;8C55;8C55;8C55;8C55; # (豕; 豕; 豕; 豕; 豕; ) CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D3;27CA8;27CA8;27CA8;27CA8; # (𧲨; 𧲨; 𧲨; 𧲨; 𧲨; ) CJK COMPATIBILITY IDEOGRAPH-2F9D3 2F9D4;8CAB;8CAB;8CAB;8CAB; # (貫; 貫; 貫; 貫; 貫; ) CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5;8CC1;8CC1;8CC1;8CC1; # (賁; 賁; 賁; 賁; 賁; ) CJK COMPATIBILITY IDEOGRAPH-2F9D5 2F9D6;8D1B;8D1B;8D1B;8D1B; # (贛; 贛; 贛; 贛; 贛; ) CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7;8D77;8D77;8D77;8D77; # (起; 起; 起; 起; 起; ) CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9D8;27F2F;27F2F;27F2F;27F2F; # (𧼯; 𧼯; 𧼯; 𧼯; 𧼯; ) CJK COMPATIBILITY IDEOGRAPH-2F9D8 2F9D9;20804;20804;20804;20804; # (𠠄; 𠠄; 𠠄; 𠠄; 𠠄; ) CJK COMPATIBILITY IDEOGRAPH-2F9D9 2F9DA;8DCB;8DCB;8DCB;8DCB; # (跋; 跋; 跋; 跋; 跋; ) CJK COMPATIBILITY IDEOGRAPH-2F9DA 2F9DB;8DBC;8DBC;8DBC;8DBC; # (趼; 趼; 趼; 趼; 趼; ) CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DC;8DF0;8DF0;8DF0;8DF0; # (跰; 跰; 跰; 跰; 跰; ) CJK COMPATIBILITY IDEOGRAPH-2F9DC 2F9DD;208DE;208DE;208DE;208DE; # (𠣞; 𠣞; 𠣞; 𠣞; 𠣞; ) CJK COMPATIBILITY IDEOGRAPH-2F9DD 2F9DE;8ED4;8ED4;8ED4;8ED4; # (軔; 軔; 軔; 軔; 軔; ) CJK COMPATIBILITY IDEOGRAPH-2F9DE 2F9DF;8F38;8F38;8F38;8F38; # (輸; 輸; 輸; 輸; 輸; ) CJK COMPATIBILITY IDEOGRAPH-2F9DF 2F9E0;285D2;285D2;285D2;285D2; # (𨗒; 𨗒; 𨗒; 𨗒; 𨗒; ) CJK COMPATIBILITY IDEOGRAPH-2F9E0 2F9E1;285ED;285ED;285ED;285ED; # (𨗭; 𨗭; 𨗭; 𨗭; 𨗭; ) CJK COMPATIBILITY IDEOGRAPH-2F9E1 2F9E2;9094;9094;9094;9094; # (邔; 邔; 邔; 邔; 邔; ) CJK COMPATIBILITY IDEOGRAPH-2F9E2 2F9E3;90F1;90F1;90F1;90F1; # (郱; 郱; 郱; 郱; 郱; ) CJK COMPATIBILITY IDEOGRAPH-2F9E3 2F9E4;9111;9111;9111;9111; # (鄑; 鄑; 鄑; 鄑; 鄑; ) CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E5;2872E;2872E;2872E;2872E; # (𨜮; 𨜮; 𨜮; 𨜮; 𨜮; ) CJK COMPATIBILITY IDEOGRAPH-2F9E5 2F9E6;911B;911B;911B;911B; # (鄛; 鄛; 鄛; 鄛; 鄛; ) CJK COMPATIBILITY IDEOGRAPH-2F9E6 2F9E7;9238;9238;9238;9238; # (鈸; 鈸; 鈸; 鈸; 鈸; ) CJK COMPATIBILITY IDEOGRAPH-2F9E7 2F9E8;92D7;92D7;92D7;92D7; # (鋗; 鋗; 鋗; 鋗; 鋗; ) CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9;92D8;92D8;92D8;92D8; # (鋘; 鋘; 鋘; 鋘; 鋘; ) CJK COMPATIBILITY IDEOGRAPH-2F9E9 2F9EA;927C;927C;927C;927C; # (鉼; 鉼; 鉼; 鉼; 鉼; ) CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9EB;93F9;93F9;93F9;93F9; # (鏹; 鏹; 鏹; 鏹; 鏹; ) CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC;9415;9415;9415;9415; # (鐕; 鐕; 鐕; 鐕; 鐕; ) CJK COMPATIBILITY IDEOGRAPH-2F9EC 2F9ED;28BFA;28BFA;28BFA;28BFA; # (𨯺; 𨯺; 𨯺; 𨯺; 𨯺; ) CJK COMPATIBILITY IDEOGRAPH-2F9ED 2F9EE;958B;958B;958B;958B; # (開; 開; 開; 開; 開; ) CJK COMPATIBILITY IDEOGRAPH-2F9EE 2F9EF;4995;4995;4995;4995; # (䦕; 䦕; 䦕; 䦕; 䦕; ) CJK COMPATIBILITY IDEOGRAPH-2F9EF 2F9F0;95B7;95B7;95B7;95B7; # (閷; 閷; 閷; 閷; 閷; ) CJK COMPATIBILITY IDEOGRAPH-2F9F0 2F9F1;28D77;28D77;28D77;28D77; # (𨵷; 𨵷; 𨵷; 𨵷; 𨵷; ) CJK COMPATIBILITY IDEOGRAPH-2F9F1 2F9F2;49E6;49E6;49E6;49E6; # (䧦; 䧦; 䧦; 䧦; 䧦; ) CJK COMPATIBILITY IDEOGRAPH-2F9F2 2F9F3;96C3;96C3;96C3;96C3; # (雃; 雃; 雃; 雃; 雃; ) CJK COMPATIBILITY IDEOGRAPH-2F9F3 2F9F4;5DB2;5DB2;5DB2;5DB2; # (嶲; 嶲; 嶲; 嶲; 嶲; ) CJK COMPATIBILITY IDEOGRAPH-2F9F4 2F9F5;9723;9723;9723;9723; # (霣; 霣; 霣; 霣; 霣; ) CJK COMPATIBILITY IDEOGRAPH-2F9F5 2F9F6;29145;29145;29145;29145; # (𩅅; 𩅅; 𩅅; 𩅅; 𩅅; ) CJK COMPATIBILITY IDEOGRAPH-2F9F6 2F9F7;2921A;2921A;2921A;2921A; # (𩈚; 𩈚; 𩈚; 𩈚; 𩈚; ) CJK COMPATIBILITY IDEOGRAPH-2F9F7 2F9F8;4A6E;4A6E;4A6E;4A6E; # (䩮; 䩮; 䩮; 䩮; 䩮; ) CJK COMPATIBILITY IDEOGRAPH-2F9F8 2F9F9;4A76;4A76;4A76;4A76; # (䩶; 䩶; 䩶; 䩶; 䩶; ) CJK COMPATIBILITY IDEOGRAPH-2F9F9 2F9FA;97E0;97E0;97E0;97E0; # (韠; 韠; 韠; 韠; 韠; ) CJK COMPATIBILITY IDEOGRAPH-2F9FA 2F9FB;2940A;2940A;2940A;2940A; # (𩐊; 𩐊; 𩐊; 𩐊; 𩐊; ) CJK COMPATIBILITY IDEOGRAPH-2F9FB 2F9FC;4AB2;4AB2;4AB2;4AB2; # (䪲; 䪲; 䪲; 䪲; 䪲; ) CJK COMPATIBILITY IDEOGRAPH-2F9FC 2F9FD;29496;29496;29496;29496; # (𩒖; 𩒖; 𩒖; 𩒖; 𩒖; ) CJK COMPATIBILITY IDEOGRAPH-2F9FD 2F9FE;980B;980B;980B;980B; # (頋; 頋; 頋; 頋; 頋; ) CJK COMPATIBILITY IDEOGRAPH-2F9FE 2F9FF;980B;980B;980B;980B; # (頋; 頋; 頋; 頋; 頋; ) CJK COMPATIBILITY IDEOGRAPH-2F9FF 2FA00;9829;9829;9829;9829; # (頩; 頩; 頩; 頩; 頩; ) CJK COMPATIBILITY IDEOGRAPH-2FA00 2FA01;295B6;295B6;295B6;295B6; # (𩖶; 𩖶; 𩖶; 𩖶; 𩖶; ) CJK COMPATIBILITY IDEOGRAPH-2FA01 2FA02;98E2;98E2;98E2;98E2; # (飢; 飢; 飢; 飢; 飢; ) CJK COMPATIBILITY IDEOGRAPH-2FA02 2FA03;4B33;4B33;4B33;4B33; # (䬳; 䬳; 䬳; 䬳; 䬳; ) CJK COMPATIBILITY IDEOGRAPH-2FA03 2FA04;9929;9929;9929;9929; # (餩; 餩; 餩; 餩; 餩; ) CJK COMPATIBILITY IDEOGRAPH-2FA04 2FA05;99A7;99A7;99A7;99A7; # (馧; 馧; 馧; 馧; 馧; ) CJK COMPATIBILITY IDEOGRAPH-2FA05 2FA06;99C2;99C2;99C2;99C2; # (駂; 駂; 駂; 駂; 駂; ) CJK COMPATIBILITY IDEOGRAPH-2FA06 2FA07;99FE;99FE;99FE;99FE; # (駾; 駾; 駾; 駾; 駾; ) CJK COMPATIBILITY IDEOGRAPH-2FA07 2FA08;4BCE;4BCE;4BCE;4BCE; # (䯎; 䯎; 䯎; 䯎; 䯎; ) CJK COMPATIBILITY IDEOGRAPH-2FA08 2FA09;29B30;29B30;29B30;29B30; # (𩬰; 𩬰; 𩬰; 𩬰; 𩬰; ) CJK COMPATIBILITY IDEOGRAPH-2FA09 2FA0A;9B12;9B12;9B12;9B12; # (鬒; 鬒; 鬒; 鬒; 鬒; ) CJK COMPATIBILITY IDEOGRAPH-2FA0A 2FA0B;9C40;9C40;9C40;9C40; # (鱀; 鱀; 鱀; 鱀; 鱀; ) CJK COMPATIBILITY IDEOGRAPH-2FA0B 2FA0C;9CFD;9CFD;9CFD;9CFD; # (鳽; 鳽; 鳽; 鳽; 鳽; ) CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0D;4CCE;4CCE;4CCE;4CCE; # (䳎; 䳎; 䳎; 䳎; 䳎; ) CJK COMPATIBILITY IDEOGRAPH-2FA0D 2FA0E;4CED;4CED;4CED;4CED; # (䳭; 䳭; 䳭; 䳭; 䳭; ) CJK COMPATIBILITY IDEOGRAPH-2FA0E 2FA0F;9D67;9D67;9D67;9D67; # (鵧; 鵧; 鵧; 鵧; 鵧; ) CJK COMPATIBILITY IDEOGRAPH-2FA0F 2FA10;2A0CE;2A0CE;2A0CE;2A0CE; # (𪃎; 𪃎; 𪃎; 𪃎; 𪃎; ) CJK COMPATIBILITY IDEOGRAPH-2FA10 2FA11;4CF8;4CF8;4CF8;4CF8; # (䳸; 䳸; 䳸; 䳸; 䳸; ) CJK COMPATIBILITY IDEOGRAPH-2FA11 2FA12;2A105;2A105;2A105;2A105; # (𪄅; 𪄅; 𪄅; 𪄅; 𪄅; ) CJK COMPATIBILITY IDEOGRAPH-2FA12 2FA13;2A20E;2A20E;2A20E;2A20E; # (𪈎; 𪈎; 𪈎; 𪈎; 𪈎; ) CJK COMPATIBILITY IDEOGRAPH-2FA13 2FA14;2A291;2A291;2A291;2A291; # (𪊑; 𪊑; 𪊑; 𪊑; 𪊑; ) CJK COMPATIBILITY IDEOGRAPH-2FA14 2FA15;9EBB;9EBB;9EBB;9EBB; # (麻; 麻; 麻; 麻; 麻; ) CJK COMPATIBILITY IDEOGRAPH-2FA15 2FA16;4D56;4D56;4D56;4D56; # (䵖; 䵖; 䵖; 䵖; 䵖; ) CJK COMPATIBILITY IDEOGRAPH-2FA16 2FA17;9EF9;9EF9;9EF9;9EF9; # (黹; 黹; 黹; 黹; 黹; ) CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA18;9EFE;9EFE;9EFE;9EFE; # (黾; 黾; 黾; 黾; 黾; ) CJK COMPATIBILITY IDEOGRAPH-2FA18 2FA19;9F05;9F05;9F05;9F05; # (鼅; 鼅; 鼅; 鼅; 鼅; ) CJK COMPATIBILITY IDEOGRAPH-2FA19 2FA1A;9F0F;9F0F;9F0F;9F0F; # (鼏; 鼏; 鼏; 鼏; 鼏; ) CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FA1B;9F16;9F16;9F16;9F16; # (鼖; 鼖; 鼖; 鼖; 鼖; ) CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FA1C;9F3B;9F3B;9F3B;9F3B; # (鼻; 鼻; 鼻; 鼻; 鼻; ) CJK COMPATIBILITY IDEOGRAPH-2FA1C 2FA1D;2A600;2A600;2A600;2A600; # (𪘀; 𪘀; 𪘀; 𪘀; 𪘀; ) CJK COMPATIBILITY IDEOGRAPH-2FA1D # @Part2 # Canonical Order Test # 0061 0315 0300 05AE 0300 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̕◌̀◌֮◌̀b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B 0061 0300 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̀◌̕◌̀◌֮b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0301 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; # (a◌̕◌̀◌֮◌́b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE ACCENT, LATIN SMALL LETTER B 0061 0301 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; # (a◌́◌̕◌̀◌֮b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0302 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062; # (a◌̕◌̀◌֮◌̂b; à◌֮◌̂◌̕b; a◌֮◌̀◌̂◌̕b; à◌֮◌̂◌̕b; a◌֮◌̀◌̂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CIRCUMFLEX ACCENT, LATIN SMALL LETTER B 0061 0302 0315 0300 05AE 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062; # (a◌̂◌̕◌̀◌֮b; ầ◌֮◌̕b; a◌֮◌̂◌̀◌̕b; ầ◌֮◌̕b; a◌֮◌̂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CIRCUMFLEX ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0303 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062; # (a◌̕◌̀◌֮◌̃b; à◌֮◌̃◌̕b; a◌֮◌̀◌̃◌̕b; à◌֮◌̃◌̕b; a◌֮◌̀◌̃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING TILDE, LATIN SMALL LETTER B 0061 0303 0315 0300 05AE 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062; # (a◌̃◌̕◌̀◌֮b; ã◌֮◌̀◌̕b; a◌֮◌̃◌̀◌̕b; ã◌֮◌̀◌̕b; a◌֮◌̃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING TILDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0304 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062; # (a◌̕◌̀◌֮◌̄b; à◌֮◌̄◌̕b; a◌֮◌̀◌̄◌̕b; à◌֮◌̄◌̕b; a◌֮◌̀◌̄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON, LATIN SMALL LETTER B 0061 0304 0315 0300 05AE 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062; # (a◌̄◌̕◌̀◌֮b; ā◌֮◌̀◌̕b; a◌֮◌̄◌̀◌̕b; ā◌֮◌̀◌̕b; a◌֮◌̄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0305 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062; # (a◌̕◌̀◌֮◌̅b; à◌֮◌̅◌̕b; a◌֮◌̀◌̅◌̕b; à◌֮◌̅◌̕b; a◌֮◌̀◌̅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OVERLINE, LATIN SMALL LETTER B 0061 0305 0315 0300 05AE 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062; # (a◌̅◌̕◌̀◌֮b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; a◌֮◌̅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OVERLINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0306 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062; # (a◌̕◌̀◌֮◌̆b; à◌֮◌̆◌̕b; a◌֮◌̀◌̆◌̕b; à◌֮◌̆◌̕b; a◌֮◌̀◌̆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING BREVE, LATIN SMALL LETTER B 0061 0306 0315 0300 05AE 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062; # (a◌̆◌̕◌̀◌֮b; ằ◌֮◌̕b; a◌֮◌̆◌̀◌̕b; ằ◌֮◌̕b; a◌֮◌̆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING BREVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0307 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062; # (a◌̕◌̀◌֮◌̇b; à◌֮◌̇◌̕b; a◌֮◌̀◌̇◌̕b; à◌֮◌̇◌̕b; a◌֮◌̀◌̇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOT ABOVE, LATIN SMALL LETTER B 0061 0307 0315 0300 05AE 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062; # (a◌̇◌̕◌̀◌֮b; ȧ◌֮◌̀◌̕b; a◌֮◌̇◌̀◌̕b; ȧ◌֮◌̀◌̕b; a◌֮◌̇◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0308 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062; # (a◌̕◌̀◌֮◌̈b; à◌֮◌̈◌̕b; a◌֮◌̀◌̈◌̕b; à◌֮◌̈◌̕b; a◌֮◌̀◌̈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DIAERESIS, LATIN SMALL LETTER B 0061 0308 0315 0300 05AE 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062; # (a◌̈◌̕◌̀◌֮b; ä◌֮◌̀◌̕b; a◌֮◌̈◌̀◌̕b; ä◌֮◌̀◌̕b; a◌֮◌̈◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0309 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062; # (a◌̕◌̀◌֮◌̉b; à◌֮◌̉◌̕b; a◌֮◌̀◌̉◌̕b; à◌֮◌̉◌̕b; a◌֮◌̀◌̉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING HOOK ABOVE, LATIN SMALL LETTER B 0061 0309 0315 0300 05AE 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062; # (a◌̉◌̕◌̀◌֮b; ả◌֮◌̀◌̕b; a◌֮◌̉◌̀◌̕b; ả◌֮◌̀◌̕b; a◌֮◌̉◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING HOOK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030A 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062; # (a◌̕◌̀◌֮◌̊b; à◌֮◌̊◌̕b; a◌֮◌̀◌̊◌̕b; à◌֮◌̊◌̕b; a◌֮◌̀◌̊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RING ABOVE, LATIN SMALL LETTER B 0061 030A 0315 0300 05AE 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062; # (a◌̊◌̕◌̀◌֮b; å◌֮◌̀◌̕b; a◌֮◌̊◌̀◌̕b; å◌֮◌̀◌̕b; a◌֮◌̊◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030B 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062; # (a◌̕◌̀◌֮◌̋b; à◌֮◌̋◌̕b; a◌֮◌̀◌̋◌̕b; à◌֮◌̋◌̕b; a◌֮◌̀◌̋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE ACUTE ACCENT, LATIN SMALL LETTER B 0061 030B 0315 0300 05AE 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062; # (a◌̋◌̕◌̀◌֮b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; a◌֮◌̋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030C 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062; # (a◌̕◌̀◌֮◌̌b; à◌֮◌̌◌̕b; a◌֮◌̀◌̌◌̕b; à◌֮◌̌◌̕b; a◌֮◌̀◌̌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CARON, LATIN SMALL LETTER B 0061 030C 0315 0300 05AE 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062; # (a◌̌◌̕◌̀◌֮b; ǎ◌֮◌̀◌̕b; a◌֮◌̌◌̀◌̕b; ǎ◌֮◌̀◌̕b; a◌֮◌̌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CARON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030D 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062; # (a◌̕◌̀◌֮◌̍b; à◌֮◌̍◌̕b; a◌֮◌̀◌̍◌̕b; à◌֮◌̍◌̕b; a◌֮◌̀◌̍◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING VERTICAL LINE ABOVE, LATIN SMALL LETTER B 0061 030D 0315 0300 05AE 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062; # (a◌̍◌̕◌̀◌֮b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; a◌֮◌̍◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030E 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062; # (a◌̕◌̀◌֮◌̎b; à◌֮◌̎◌̕b; a◌֮◌̀◌̎◌̕b; à◌֮◌̎◌̕b; a◌֮◌̀◌̎◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE VERTICAL LINE ABOVE, LATIN SMALL LETTER B 0061 030E 0315 0300 05AE 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062; # (a◌̎◌̕◌̀◌֮b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; a◌֮◌̎◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 030F 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062; # (a◌̕◌̀◌֮◌̏b; à◌֮◌̏◌̕b; a◌֮◌̀◌̏◌̕b; à◌֮◌̏◌̕b; a◌֮◌̀◌̏◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE GRAVE ACCENT, LATIN SMALL LETTER B 0061 030F 0315 0300 05AE 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062; # (a◌̏◌̕◌̀◌֮b; ȁ◌֮◌̀◌̕b; a◌֮◌̏◌̀◌̕b; ȁ◌֮◌̀◌̕b; a◌֮◌̏◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0310 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062; # (a◌̕◌̀◌֮◌̐b; à◌֮◌̐◌̕b; a◌֮◌̀◌̐◌̕b; à◌֮◌̐◌̕b; a◌֮◌̀◌̐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CANDRABINDU, LATIN SMALL LETTER B 0061 0310 0315 0300 05AE 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062; # (a◌̐◌̕◌̀◌֮b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; a◌֮◌̐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CANDRABINDU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0311 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062; # (a◌̕◌̀◌֮◌̑b; à◌֮◌̑◌̕b; a◌֮◌̀◌̑◌̕b; à◌֮◌̑◌̕b; a◌֮◌̀◌̑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING INVERTED BREVE, LATIN SMALL LETTER B 0061 0311 0315 0300 05AE 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062; # (a◌̑◌̕◌̀◌֮b; ȃ◌֮◌̀◌̕b; a◌֮◌̑◌̀◌̕b; ȃ◌֮◌̀◌̕b; a◌֮◌̑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING INVERTED BREVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0312 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062; # (a◌̕◌̀◌֮◌̒b; à◌֮◌̒◌̕b; a◌֮◌̀◌̒◌̕b; à◌֮◌̒◌̕b; a◌֮◌̀◌̒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING TURNED COMMA ABOVE, LATIN SMALL LETTER B 0061 0312 0315 0300 05AE 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062; # (a◌̒◌̕◌̀◌֮b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; a◌֮◌̒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING TURNED COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0313 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; # (a◌̕◌̀◌֮◌̓b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING COMMA ABOVE, LATIN SMALL LETTER B 0061 0313 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; # (a◌̓◌̕◌̀◌֮b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0314 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062; # (a◌̕◌̀◌֮◌̔b; à◌֮◌̔◌̕b; a◌֮◌̀◌̔◌̕b; à◌֮◌̔◌̕b; a◌֮◌̀◌̔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING REVERSED COMMA ABOVE, LATIN SMALL LETTER B 0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062; # (a◌̔◌̕◌̀◌֮b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; a◌֮◌̔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING REVERSED COMMA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 035C 0315 0300 0315 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; # (a◌͜◌̕◌̀◌̕b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B 0061 0315 035C 0315 0300 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; # (a◌̕◌͜◌̕◌̀b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; à◌̕◌̕◌͜b; a◌̀◌̕◌̕◌͜b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B 0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # (a◌֚◌̖◌〪◌̖b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B 0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; # (a◌̖◌֚◌̖◌〪b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; a◌〪◌̖◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062; # (a◌֚◌̖◌〪◌̗b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; a◌〪◌̖◌̗◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING ACUTE ACCENT BELOW, LATIN SMALL LETTER B 0061 0317 059A 0316 302A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062; # (a◌̗◌֚◌̖◌〪b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; a◌〪◌̗◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING ACUTE ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0318 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062; # (a◌֚◌̖◌〪◌̘b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; a◌〪◌̖◌̘◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT TACK BELOW, LATIN SMALL LETTER B 0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062; # (a◌̘◌֚◌̖◌〪b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; a◌〪◌̘◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062; # (a◌֚◌̖◌〪◌̙b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; a◌〪◌̖◌̙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT TACK BELOW, LATIN SMALL LETTER B 0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062; # (a◌̙◌֚◌̖◌〪b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; a◌〪◌̙◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 035C 0315 0300 031A 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062; # (a◌͜◌̕◌̀◌̚b; à◌̕◌̚◌͜b; a◌̀◌̕◌̚◌͜b; à◌̕◌̚◌͜b; a◌̀◌̕◌̚◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING LEFT ANGLE ABOVE, LATIN SMALL LETTER B 0061 031A 035C 0315 0300 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062; # (a◌̚◌͜◌̕◌̀b; à◌̚◌̕◌͜b; a◌̀◌̚◌̕◌͜b; à◌̚◌̕◌͜b; a◌̀◌̚◌̕◌͜b; ) LATIN SMALL LETTER A, COMBINING LEFT ANGLE ABOVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B 0061 302A 031B 1DCE 031B 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; # (a◌〪◌̛◌᷎◌̛b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, COMBINING HORN, LATIN SMALL LETTER B 0061 031B 302A 031B 1DCE 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; # (a◌̛◌〪◌̛◌᷎b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; a◌᷎◌̛◌̛◌〪b; ) LATIN SMALL LETTER A, COMBINING HORN, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062; # (a◌֚◌̖◌〪◌̜b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; a◌〪◌̖◌̜◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT HALF RING BELOW, LATIN SMALL LETTER B 0061 031C 059A 0316 302A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062; # (a◌̜◌֚◌̖◌〪b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; a◌〪◌̜◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 031D 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062; # (a◌֚◌̖◌〪◌̝b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; a◌〪◌̖◌̝◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING UP TACK BELOW, LATIN SMALL LETTER B 0061 031D 059A 0316 302A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062; # (a◌̝◌֚◌̖◌〪b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; a◌〪◌̝◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING UP TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 031E 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062; # (a◌֚◌̖◌〪◌̞b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; a◌〪◌̖◌̞◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOWN TACK BELOW, LATIN SMALL LETTER B 0061 031E 059A 0316 302A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062; # (a◌̞◌֚◌̖◌〪b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; a◌〪◌̞◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOWN TACK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 031F 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062; # (a◌֚◌̖◌〪◌̟b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; a◌〪◌̖◌̟◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING PLUS SIGN BELOW, LATIN SMALL LETTER B 0061 031F 059A 0316 302A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062; # (a◌̟◌֚◌̖◌〪b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; a◌〪◌̟◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING PLUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0320 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062; # (a◌֚◌̖◌〪◌̠b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; a◌〪◌̖◌̠◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MINUS SIGN BELOW, LATIN SMALL LETTER B 0061 0320 059A 0316 302A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062; # (a◌̠◌֚◌̖◌〪b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; a◌〪◌̠◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MINUS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 1DCE 0321 0F74 0321 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; # (a◌᷎◌̡◌ུ◌̡b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B 0061 0321 1DCE 0321 0F74 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; # (a◌̡◌᷎◌̡◌ུb; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; a◌ུ◌̡◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING PALATALIZED HOOK BELOW, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 1DCE 0321 0F74 0322 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062; # (a◌᷎◌̡◌ུ◌̢b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; a◌ུ◌̡◌̢◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING RETROFLEX HOOK BELOW, LATIN SMALL LETTER B 0061 0322 1DCE 0321 0F74 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062; # (a◌̢◌᷎◌̡◌ུb; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; a◌ུ◌̢◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING RETROFLEX HOOK BELOW, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 059A 0316 302A 0323 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062; # (a◌֚◌̖◌〪◌̣b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; a◌〪◌̖◌̣◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOT BELOW, LATIN SMALL LETTER B 0061 0323 059A 0316 302A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062; # (a◌̣◌֚◌̖◌〪b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ạ◌〪◌̖◌֚b; a◌〪◌̣◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0324 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062; # (a◌֚◌̖◌〪◌̤b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; a◌〪◌̖◌̤◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DIAERESIS BELOW, LATIN SMALL LETTER B 0061 0324 059A 0316 302A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062; # (a◌̤◌֚◌̖◌〪b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; a◌〪◌̤◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0325 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062; # (a◌֚◌̖◌〪◌̥b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; a◌〪◌̖◌̥◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RING BELOW, LATIN SMALL LETTER B 0061 0325 059A 0316 302A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062; # (a◌̥◌֚◌̖◌〪b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ḁ◌〪◌̖◌֚b; a◌〪◌̥◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0326 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062; # (a◌֚◌̖◌〪◌̦b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; a◌〪◌̖◌̦◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING COMMA BELOW, LATIN SMALL LETTER B 0061 0326 059A 0316 302A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062; # (a◌̦◌֚◌̖◌〪b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; a◌〪◌̦◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING COMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 1DCE 0321 0F74 0327 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062; # (a◌᷎◌̡◌ུ◌̧b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; a◌ུ◌̡◌̧◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING CEDILLA, LATIN SMALL LETTER B 0061 0327 1DCE 0321 0F74 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062; # (a◌̧◌᷎◌̡◌ུb; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; a◌ུ◌̧◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING CEDILLA, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 1DCE 0321 0F74 0328 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062; # (a◌᷎◌̡◌ུ◌̨b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; a◌ུ◌̡◌̨◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING OGONEK, LATIN SMALL LETTER B 0061 0328 1DCE 0321 0F74 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062; # (a◌̨◌᷎◌̡◌ུb; ą◌ུ◌̡◌᷎b; a◌ུ◌̨◌̡◌᷎b; ą◌ུ◌̡◌᷎b; a◌ུ◌̨◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 059A 0316 302A 0329 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062; # (a◌֚◌̖◌〪◌̩b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; a◌〪◌̖◌̩◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING VERTICAL LINE BELOW, LATIN SMALL LETTER B 0061 0329 059A 0316 302A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062; # (a◌̩◌֚◌̖◌〪b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; a◌〪◌̩◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062; # (a◌֚◌̖◌〪◌̪b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; a◌〪◌̖◌̪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING BRIDGE BELOW, LATIN SMALL LETTER B 0061 032A 059A 0316 302A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062; # (a◌̪◌֚◌̖◌〪b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; a◌〪◌̪◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032B 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062; # (a◌֚◌̖◌〪◌̫b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; a◌〪◌̖◌̫◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED DOUBLE ARCH BELOW, LATIN SMALL LETTER B 0061 032B 059A 0316 302A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062; # (a◌̫◌֚◌̖◌〪b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; a◌〪◌̫◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED DOUBLE ARCH BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032C 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062; # (a◌֚◌̖◌〪◌̬b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; a◌〪◌̖◌̬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING CARON BELOW, LATIN SMALL LETTER B 0061 032C 059A 0316 302A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062; # (a◌̬◌֚◌̖◌〪b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; a◌〪◌̬◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING CARON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032D 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062; # (a◌֚◌̖◌〪◌̭b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; a◌〪◌̖◌̭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING CIRCUMFLEX ACCENT BELOW, LATIN SMALL LETTER B 0061 032D 059A 0316 302A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062; # (a◌̭◌֚◌̖◌〪b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; a◌〪◌̭◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING CIRCUMFLEX ACCENT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032E 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062; # (a◌֚◌̖◌〪◌̮b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; a◌〪◌̖◌̮◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING BREVE BELOW, LATIN SMALL LETTER B 0061 032E 059A 0316 302A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062; # (a◌̮◌֚◌̖◌〪b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; a◌〪◌̮◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 032F 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062; # (a◌֚◌̖◌〪◌̯b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; a◌〪◌̖◌̯◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED BREVE BELOW, LATIN SMALL LETTER B 0061 032F 059A 0316 302A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062; # (a◌̯◌֚◌̖◌〪b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; a◌〪◌̯◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED BREVE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0330 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062; # (a◌֚◌̖◌〪◌̰b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; a◌〪◌̖◌̰◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING TILDE BELOW, LATIN SMALL LETTER B 0061 0330 059A 0316 302A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062; # (a◌̰◌֚◌̖◌〪b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; a◌〪◌̰◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING TILDE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0331 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062; # (a◌֚◌̖◌〪◌̱b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; a◌〪◌̖◌̱◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MACRON BELOW, LATIN SMALL LETTER B 0061 0331 059A 0316 302A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062; # (a◌̱◌֚◌̖◌〪b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; a◌〪◌̱◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0332 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062; # (a◌֚◌̖◌〪◌̲b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; a◌〪◌̖◌̲◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LOW LINE, LATIN SMALL LETTER B 0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062; # (a◌̲◌֚◌̖◌〪b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; a◌〪◌̲◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062; # (a◌֚◌̖◌〪◌̳b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; a◌〪◌̖◌̳◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE LOW LINE, LATIN SMALL LETTER B 0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062; # (a◌̳◌֚◌̖◌〪b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; a◌〪◌̳◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE LOW LINE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 093C 0334 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; # (a◌़◌̴◌̴b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0334 093C 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; # (a◌̴◌़◌̴b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; a◌̴◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING TILDE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 0335 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062; # (a◌़◌̴◌̵b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; a◌̴◌̵◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT STROKE OVERLAY, LATIN SMALL LETTER B 0061 0335 093C 0334 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062; # (a◌̵◌़◌̴b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; a◌̵◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT STROKE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 0336 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062; # (a◌़◌̴◌̶b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; a◌̴◌̶◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG STROKE OVERLAY, LATIN SMALL LETTER B 0061 0336 093C 0334 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062; # (a◌̶◌़◌̴b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; a◌̶◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG STROKE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 0337 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062; # (a◌़◌̴◌̷b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; a◌̴◌̷◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT SOLIDUS OVERLAY, LATIN SMALL LETTER B 0061 0337 093C 0334 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062; # (a◌̷◌़◌̴b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; a◌̷◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 0338 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062; # (a◌़◌̴◌̸b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; a◌̴◌̸◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG SOLIDUS OVERLAY, LATIN SMALL LETTER B 0061 0338 093C 0334 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062; # (a◌̸◌़◌̴b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; a◌̸◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062; # (a◌֚◌̖◌〪◌̹b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; a◌〪◌̖◌̹◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT HALF RING BELOW, LATIN SMALL LETTER B 0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062; # (a◌̹◌֚◌̖◌〪b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; a◌〪◌̹◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT HALF RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062; # (a◌֚◌̖◌〪◌̺b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; a◌〪◌̖◌̺◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING INVERTED BRIDGE BELOW, LATIN SMALL LETTER B 0061 033A 059A 0316 302A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062; # (a◌̺◌֚◌̖◌〪b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; a◌〪◌̺◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING INVERTED BRIDGE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 033B 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062; # (a◌֚◌̖◌〪◌̻b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; a◌〪◌̖◌̻◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING SQUARE BELOW, LATIN SMALL LETTER B 0061 033B 059A 0316 302A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062; # (a◌̻◌֚◌̖◌〪b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; a◌〪◌̻◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING SQUARE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 033C 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062; # (a◌֚◌̖◌〪◌̼b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; a◌〪◌̖◌̼◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING SEAGULL BELOW, LATIN SMALL LETTER B 0061 033C 059A 0316 302A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062; # (a◌̼◌֚◌̖◌〪b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; a◌〪◌̼◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING SEAGULL BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 033D 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062; # (a◌̕◌̀◌֮◌̽b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; à◌֮◌̽◌̕b; a◌֮◌̀◌̽◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING X ABOVE, LATIN SMALL LETTER B 0061 033D 0315 0300 05AE 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062; # (a◌̽◌̕◌̀◌֮b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; a◌֮◌̽◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING X ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 033E 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062; # (a◌̕◌̀◌֮◌̾b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; à◌֮◌̾◌̕b; a◌֮◌̀◌̾◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING VERTICAL TILDE, LATIN SMALL LETTER B 0061 033E 0315 0300 05AE 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062; # (a◌̾◌̕◌̀◌֮b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; a◌֮◌̾◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING VERTICAL TILDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 033F 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062; # (a◌̕◌̀◌֮◌̿b; à◌֮◌̿◌̕b; a◌֮◌̀◌̿◌̕b; à◌֮◌̿◌̕b; a◌֮◌̀◌̿◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE OVERLINE, LATIN SMALL LETTER B 0061 033F 0315 0300 05AE 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062; # (a◌̿◌̕◌̀◌֮b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; a◌֮◌̿◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE OVERLINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0340 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̕◌̀◌֮◌̀b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE TONE MARK, LATIN SMALL LETTER B 0061 0340 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; # (a◌̀◌̕◌̀◌֮b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; à◌֮◌̀◌̕b; a◌֮◌̀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE TONE MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0341 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; # (a◌̕◌̀◌֮◌́b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; à◌֮◌́◌̕b; a◌֮◌̀◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE TONE MARK, LATIN SMALL LETTER B 0061 0341 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; # (a◌́◌̕◌̀◌֮b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; á◌֮◌̀◌̕b; a◌֮◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE TONE MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0342 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062; # (a◌̕◌̀◌֮◌͂b; à◌֮◌͂◌̕b; a◌֮◌̀◌͂◌̕b; à◌֮◌͂◌̕b; a◌֮◌̀◌͂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK PERISPOMENI, LATIN SMALL LETTER B 0061 0342 0315 0300 05AE 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062; # (a◌͂◌̕◌̀◌֮b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; a◌֮◌͂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK PERISPOMENI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0343 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; # (a◌̕◌̀◌֮◌̓b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; à◌֮◌̓◌̕b; a◌֮◌̀◌̓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK KORONIS, LATIN SMALL LETTER B 0061 0343 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; # (a◌̓◌̕◌̀◌֮b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; a◌֮◌̓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK KORONIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0344 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062; # (a◌̕◌̀◌֮◌̈́b; à◌֮◌̈◌́◌̕b; a◌֮◌̀◌̈◌́◌̕b; à◌֮◌̈◌́◌̕b; a◌֮◌̀◌̈◌́◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK DIALYTIKA TONOS, LATIN SMALL LETTER B 0061 0344 0315 0300 05AE 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062; # (a◌̈́◌̕◌̀◌֮b; ä◌֮◌́◌̀◌̕b; a◌֮◌̈◌́◌̀◌̕b; ä◌֮◌́◌̀◌̕b; a◌֮◌̈◌́◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK DIALYTIKA TONOS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0345 035D 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062; # (a◌ͅ◌͝◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING GREEK YPOGEGRAMMENI, LATIN SMALL LETTER B 0061 0345 0345 035D 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062; # (a◌ͅ◌ͅ◌͝b; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; a◌͝◌ͅ◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, LATIN SMALL LETTER B 0061 0315 0300 05AE 0346 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062; # (a◌̕◌̀◌֮◌͆b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; à◌֮◌͆◌̕b; a◌֮◌̀◌͆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING BRIDGE ABOVE, LATIN SMALL LETTER B 0061 0346 0315 0300 05AE 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062; # (a◌͆◌̕◌̀◌֮b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; a◌֮◌͆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0347 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062; # (a◌֚◌̖◌〪◌͇b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; a◌〪◌̖◌͇◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING EQUALS SIGN BELOW, LATIN SMALL LETTER B 0061 0347 059A 0316 302A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062; # (a◌͇◌֚◌̖◌〪b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; a◌〪◌͇◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING EQUALS SIGN BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0348 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062; # (a◌֚◌̖◌〪◌͈b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; a◌〪◌̖◌͈◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE VERTICAL LINE BELOW, LATIN SMALL LETTER B 0061 0348 059A 0316 302A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062; # (a◌͈◌֚◌̖◌〪b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; a◌〪◌͈◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0349 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062; # (a◌֚◌̖◌〪◌͉b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; a◌〪◌̖◌͉◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT ANGLE BELOW, LATIN SMALL LETTER B 0061 0349 059A 0316 302A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062; # (a◌͉◌֚◌̖◌〪b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; a◌〪◌͉◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT ANGLE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 034A 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062; # (a◌̕◌̀◌֮◌͊b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; à◌֮◌͊◌̕b; a◌֮◌̀◌͊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING NOT TILDE ABOVE, LATIN SMALL LETTER B 0061 034A 0315 0300 05AE 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062; # (a◌͊◌̕◌̀◌֮b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; a◌֮◌͊◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING NOT TILDE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 034B 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062; # (a◌̕◌̀◌֮◌͋b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; à◌֮◌͋◌̕b; a◌֮◌̀◌͋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING HOMOTHETIC ABOVE, LATIN SMALL LETTER B 0061 034B 0315 0300 05AE 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062; # (a◌͋◌̕◌̀◌֮b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; a◌֮◌͋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING HOMOTHETIC ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 034C 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062; # (a◌̕◌̀◌֮◌͌b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; à◌֮◌͌◌̕b; a◌֮◌̀◌͌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ALMOST EQUAL TO ABOVE, LATIN SMALL LETTER B 0061 034C 0315 0300 05AE 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062; # (a◌͌◌̕◌̀◌֮b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; a◌֮◌͌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ALMOST EQUAL TO ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 034D 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062; # (a◌֚◌̖◌〪◌͍b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; a◌〪◌̖◌͍◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT RIGHT ARROW BELOW, LATIN SMALL LETTER B 0061 034D 059A 0316 302A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062; # (a◌͍◌֚◌̖◌〪b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; a◌〪◌͍◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 034E 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062; # (a◌֚◌̖◌〪◌͎b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; a◌〪◌̖◌͎◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING UPWARDS ARROW BELOW, LATIN SMALL LETTER B 0061 034E 059A 0316 302A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062; # (a◌͎◌֚◌̖◌〪b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; a◌〪◌͎◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING UPWARDS ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0350 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062; # (a◌̕◌̀◌֮◌͐b; à◌֮◌͐◌̕b; a◌֮◌̀◌͐◌̕b; à◌֮◌͐◌̕b; a◌֮◌̀◌͐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B 0061 0350 0315 0300 05AE 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062; # (a◌͐◌̕◌̀◌֮b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; a◌֮◌͐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0351 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062; # (a◌̕◌̀◌֮◌͑b; à◌֮◌͑◌̕b; a◌֮◌̀◌͑◌̕b; à◌֮◌͑◌̕b; a◌֮◌̀◌͑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT HALF RING ABOVE, LATIN SMALL LETTER B 0061 0351 0315 0300 05AE 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062; # (a◌͑◌̕◌̀◌֮b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; a◌֮◌͑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT HALF RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0352 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062; # (a◌̕◌̀◌֮◌͒b; à◌֮◌͒◌̕b; a◌֮◌̀◌͒◌̕b; à◌֮◌͒◌̕b; a◌֮◌̀◌͒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING FERMATA, LATIN SMALL LETTER B 0061 0352 0315 0300 05AE 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062; # (a◌͒◌̕◌̀◌֮b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; a◌֮◌͒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING FERMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0353 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062; # (a◌֚◌̖◌〪◌͓b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; a◌〪◌̖◌͓◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING X BELOW, LATIN SMALL LETTER B 0061 0353 059A 0316 302A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062; # (a◌͓◌֚◌̖◌〪b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; a◌〪◌͓◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0354 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062; # (a◌֚◌̖◌〪◌͔b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; a◌〪◌̖◌͔◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 0354 059A 0316 302A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062; # (a◌͔◌֚◌̖◌〪b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; a◌〪◌͔◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0355 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062; # (a◌֚◌̖◌〪◌͕b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; a◌〪◌̖◌͕◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 0355 059A 0316 302A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062; # (a◌͕◌֚◌̖◌〪b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; a◌〪◌͕◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0356 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062; # (a◌֚◌̖◌〪◌͖b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; a◌〪◌̖◌͖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 0356 059A 0316 302A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062; # (a◌͖◌֚◌̖◌〪b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; a◌〪◌͖◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0357 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062; # (a◌̕◌̀◌֮◌͗b; à◌֮◌͗◌̕b; a◌֮◌̀◌͗◌̕b; à◌֮◌͗◌̕b; a◌֮◌̀◌͗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT HALF RING ABOVE, LATIN SMALL LETTER B 0061 0357 0315 0300 05AE 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062; # (a◌͗◌̕◌̀◌֮b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; a◌֮◌͗◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT HALF RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 035C 0315 0300 0358 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062; # (a◌͜◌̕◌̀◌͘b; à◌̕◌͘◌͜b; a◌̀◌̕◌͘◌͜b; à◌̕◌͘◌͜b; a◌̀◌̕◌͘◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, COMBINING DOT ABOVE RIGHT, LATIN SMALL LETTER B 0061 0358 035C 0315 0300 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062; # (a◌͘◌͜◌̕◌̀b; à◌͘◌̕◌͜b; a◌̀◌͘◌̕◌͜b; à◌͘◌̕◌͜b; a◌̀◌͘◌̕◌͜b; ) LATIN SMALL LETTER A, COMBINING DOT ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B 0061 059A 0316 302A 0359 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062; # (a◌֚◌̖◌〪◌͙b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; a◌〪◌̖◌͙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING ASTERISK BELOW, LATIN SMALL LETTER B 0061 0359 059A 0316 302A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062; # (a◌͙◌֚◌̖◌〪b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; a◌〪◌͙◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING ASTERISK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 035A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062; # (a◌֚◌̖◌〪◌͚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; a◌〪◌̖◌͚◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE RING BELOW, LATIN SMALL LETTER B 0061 035A 059A 0316 302A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062; # (a◌͚◌֚◌̖◌〪b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; a◌〪◌͚◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 035B 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062; # (a◌̕◌̀◌֮◌͛b; à◌֮◌͛◌̕b; a◌֮◌̀◌͛◌̕b; à◌֮◌͛◌̕b; a◌֮◌̀◌͛◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ZIGZAG ABOVE, LATIN SMALL LETTER B 0061 035B 0315 0300 05AE 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062; # (a◌͛◌̕◌̀◌֮b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; a◌֮◌͛◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ZIGZAG ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 035D 035C 0315 035C 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; # (a◌͝◌͜◌̕◌͜b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 035C 035D 035C 0315 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; # (a◌͜◌͝◌͜◌̕b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; a◌̕◌͜◌͜◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B 0061 0345 035D 035C 035D 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; # (a◌ͅ◌͝◌͜◌͝b; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE BREVE, LATIN SMALL LETTER B 0061 035D 0345 035D 035C 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; # (a◌͝◌ͅ◌͝◌͜b; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; a◌͜◌͝◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 0345 035D 035C 035E 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062; # (a◌ͅ◌͝◌͜◌͞b; a◌͜◌͝◌͞◌ͅb; a◌͜◌͝◌͞◌ͅb; a◌͜◌͝◌͞◌ͅb; a◌͜◌͝◌͞◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE MACRON, LATIN SMALL LETTER B 0061 035E 0345 035D 035C 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062; # (a◌͞◌ͅ◌͝◌͜b; a◌͜◌͞◌͝◌ͅb; a◌͜◌͞◌͝◌ͅb; a◌͜◌͞◌͝◌ͅb; a◌͜◌͞◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE MACRON, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 035D 035C 0315 035F 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062; # (a◌͝◌͜◌̕◌͟b; a◌̕◌͜◌͟◌͝b; a◌̕◌͜◌͟◌͝b; a◌̕◌͜◌͟◌͝b; a◌̕◌͜◌͟◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE MACRON BELOW, LATIN SMALL LETTER B 0061 035F 035D 035C 0315 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062; # (a◌͟◌͝◌͜◌̕b; a◌̕◌͟◌͜◌͝b; a◌̕◌͟◌͜◌͝b; a◌̕◌͟◌͜◌͝b; a◌̕◌͟◌͜◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE MACRON BELOW, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B 0061 0345 035D 035C 0360 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062; # (a◌ͅ◌͝◌͜◌͠b; a◌͜◌͝◌͠◌ͅb; a◌͜◌͝◌͠◌ͅb; a◌͜◌͝◌͠◌ͅb; a◌͜◌͝◌͠◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE TILDE, LATIN SMALL LETTER B 0061 0360 0345 035D 035C 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062; # (a◌͠◌ͅ◌͝◌͜b; a◌͜◌͠◌͝◌ͅb; a◌͜◌͠◌͝◌ͅb; a◌͜◌͠◌͝◌ͅb; a◌͜◌͠◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 0345 035D 035C 0361 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062; # (a◌ͅ◌͝◌͜◌͡b; a◌͜◌͝◌͡◌ͅb; a◌͜◌͝◌͡◌ͅb; a◌͜◌͝◌͡◌ͅb; a◌͜◌͝◌͡◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE INVERTED BREVE, LATIN SMALL LETTER B 0061 0361 0345 035D 035C 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062; # (a◌͡◌ͅ◌͝◌͜b; a◌͜◌͡◌͝◌ͅb; a◌͜◌͡◌͝◌ͅb; a◌͜◌͡◌͝◌ͅb; a◌͜◌͡◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE INVERTED BREVE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 035D 035C 0315 0362 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062; # (a◌͝◌͜◌̕◌͢b; a◌̕◌͜◌͢◌͝b; a◌̕◌͜◌͢◌͝b; a◌̕◌͜◌͢◌͝b; a◌̕◌͜◌͢◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, LATIN SMALL LETTER B 0061 0362 035D 035C 0315 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062; # (a◌͢◌͝◌͜◌̕b; a◌̕◌͢◌͜◌͝b; a◌̕◌͢◌͜◌͝b; a◌̕◌͢◌͜◌͝b; a◌̕◌͢◌͜◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE RIGHTWARDS ARROW BELOW, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B 0061 0315 0300 05AE 0363 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062; # (a◌̕◌̀◌֮◌ͣb; à◌֮◌ͣ◌̕b; a◌֮◌̀◌ͣ◌̕b; à◌֮◌ͣ◌̕b; a◌֮◌̀◌ͣ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER A, LATIN SMALL LETTER B 0061 0363 0315 0300 05AE 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062; # (a◌ͣ◌̕◌̀◌֮b; a◌֮◌ͣ◌̀◌̕b; a◌֮◌ͣ◌̀◌̕b; a◌֮◌ͣ◌̀◌̕b; a◌֮◌ͣ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0364 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062; # (a◌̕◌̀◌֮◌ͤb; à◌֮◌ͤ◌̕b; a◌֮◌̀◌ͤ◌̕b; à◌֮◌ͤ◌̕b; a◌֮◌̀◌ͤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER E, LATIN SMALL LETTER B 0061 0364 0315 0300 05AE 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062; # (a◌ͤ◌̕◌̀◌֮b; a◌֮◌ͤ◌̀◌̕b; a◌֮◌ͤ◌̀◌̕b; a◌֮◌ͤ◌̀◌̕b; a◌֮◌ͤ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER E, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0365 0062;00E0 05AE 0365 0315 0062;0061 05AE 0300 0365 0315 0062;00E0 05AE 0365 0315 0062;0061 05AE 0300 0365 0315 0062; # (a◌̕◌̀◌֮◌ͥb; à◌֮◌ͥ◌̕b; a◌֮◌̀◌ͥ◌̕b; à◌֮◌ͥ◌̕b; a◌֮◌̀◌ͥ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER I, LATIN SMALL LETTER B 0061 0365 0315 0300 05AE 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062; # (a◌ͥ◌̕◌̀◌֮b; a◌֮◌ͥ◌̀◌̕b; a◌֮◌ͥ◌̀◌̕b; a◌֮◌ͥ◌̀◌̕b; a◌֮◌ͥ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0366 0062;00E0 05AE 0366 0315 0062;0061 05AE 0300 0366 0315 0062;00E0 05AE 0366 0315 0062;0061 05AE 0300 0366 0315 0062; # (a◌̕◌̀◌֮◌ͦb; à◌֮◌ͦ◌̕b; a◌֮◌̀◌ͦ◌̕b; à◌֮◌ͦ◌̕b; a◌֮◌̀◌ͦ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER O, LATIN SMALL LETTER B 0061 0366 0315 0300 05AE 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062; # (a◌ͦ◌̕◌̀◌֮b; a◌֮◌ͦ◌̀◌̕b; a◌֮◌ͦ◌̀◌̕b; a◌֮◌ͦ◌̀◌̕b; a◌֮◌ͦ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER O, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0367 0062;00E0 05AE 0367 0315 0062;0061 05AE 0300 0367 0315 0062;00E0 05AE 0367 0315 0062;0061 05AE 0300 0367 0315 0062; # (a◌̕◌̀◌֮◌ͧb; à◌֮◌ͧ◌̕b; a◌֮◌̀◌ͧ◌̕b; à◌֮◌ͧ◌̕b; a◌֮◌̀◌ͧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER U, LATIN SMALL LETTER B 0061 0367 0315 0300 05AE 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062; # (a◌ͧ◌̕◌̀◌֮b; a◌֮◌ͧ◌̀◌̕b; a◌֮◌ͧ◌̀◌̕b; a◌֮◌ͧ◌̀◌̕b; a◌֮◌ͧ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER U, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0368 0062;00E0 05AE 0368 0315 0062;0061 05AE 0300 0368 0315 0062;00E0 05AE 0368 0315 0062;0061 05AE 0300 0368 0315 0062; # (a◌̕◌̀◌֮◌ͨb; à◌֮◌ͨ◌̕b; a◌֮◌̀◌ͨ◌̕b; à◌֮◌ͨ◌̕b; a◌֮◌̀◌ͨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER C, LATIN SMALL LETTER B 0061 0368 0315 0300 05AE 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062; # (a◌ͨ◌̕◌̀◌֮b; a◌֮◌ͨ◌̀◌̕b; a◌֮◌ͨ◌̀◌̕b; a◌֮◌ͨ◌̀◌̕b; a◌֮◌ͨ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER C, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0369 0062;00E0 05AE 0369 0315 0062;0061 05AE 0300 0369 0315 0062;00E0 05AE 0369 0315 0062;0061 05AE 0300 0369 0315 0062; # (a◌̕◌̀◌֮◌ͩb; à◌֮◌ͩ◌̕b; a◌֮◌̀◌ͩ◌̕b; à◌֮◌ͩ◌̕b; a◌֮◌̀◌ͩ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER D, LATIN SMALL LETTER B 0061 0369 0315 0300 05AE 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062; # (a◌ͩ◌̕◌̀◌֮b; a◌֮◌ͩ◌̀◌̕b; a◌֮◌ͩ◌̀◌̕b; a◌֮◌ͩ◌̀◌̕b; a◌֮◌ͩ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER D, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036A 0062;00E0 05AE 036A 0315 0062;0061 05AE 0300 036A 0315 0062;00E0 05AE 036A 0315 0062;0061 05AE 0300 036A 0315 0062; # (a◌̕◌̀◌֮◌ͪb; à◌֮◌ͪ◌̕b; a◌֮◌̀◌ͪ◌̕b; à◌֮◌ͪ◌̕b; a◌֮◌̀◌ͪ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER H, LATIN SMALL LETTER B 0061 036A 0315 0300 05AE 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062; # (a◌ͪ◌̕◌̀◌֮b; a◌֮◌ͪ◌̀◌̕b; a◌֮◌ͪ◌̀◌̕b; a◌֮◌ͪ◌̀◌̕b; a◌֮◌ͪ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER H, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036B 0062;00E0 05AE 036B 0315 0062;0061 05AE 0300 036B 0315 0062;00E0 05AE 036B 0315 0062;0061 05AE 0300 036B 0315 0062; # (a◌̕◌̀◌֮◌ͫb; à◌֮◌ͫ◌̕b; a◌֮◌̀◌ͫ◌̕b; à◌֮◌ͫ◌̕b; a◌֮◌̀◌ͫ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER M, LATIN SMALL LETTER B 0061 036B 0315 0300 05AE 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062; # (a◌ͫ◌̕◌̀◌֮b; a◌֮◌ͫ◌̀◌̕b; a◌֮◌ͫ◌̀◌̕b; a◌֮◌ͫ◌̀◌̕b; a◌֮◌ͫ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER M, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036C 0062;00E0 05AE 036C 0315 0062;0061 05AE 0300 036C 0315 0062;00E0 05AE 036C 0315 0062;0061 05AE 0300 036C 0315 0062; # (a◌̕◌̀◌֮◌ͬb; à◌֮◌ͬ◌̕b; a◌֮◌̀◌ͬ◌̕b; à◌֮◌ͬ◌̕b; a◌֮◌̀◌ͬ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER R, LATIN SMALL LETTER B 0061 036C 0315 0300 05AE 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062; # (a◌ͬ◌̕◌̀◌֮b; a◌֮◌ͬ◌̀◌̕b; a◌֮◌ͬ◌̀◌̕b; a◌֮◌ͬ◌̀◌̕b; a◌֮◌ͬ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER R, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036D 0062;00E0 05AE 036D 0315 0062;0061 05AE 0300 036D 0315 0062;00E0 05AE 036D 0315 0062;0061 05AE 0300 036D 0315 0062; # (a◌̕◌̀◌֮◌ͭb; à◌֮◌ͭ◌̕b; a◌֮◌̀◌ͭ◌̕b; à◌֮◌ͭ◌̕b; a◌֮◌̀◌ͭ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER T, LATIN SMALL LETTER B 0061 036D 0315 0300 05AE 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062; # (a◌ͭ◌̕◌̀◌֮b; a◌֮◌ͭ◌̀◌̕b; a◌֮◌ͭ◌̀◌̕b; a◌֮◌ͭ◌̀◌̕b; a◌֮◌ͭ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER T, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036E 0062;00E0 05AE 036E 0315 0062;0061 05AE 0300 036E 0315 0062;00E0 05AE 036E 0315 0062;0061 05AE 0300 036E 0315 0062; # (a◌̕◌̀◌֮◌ͮb; à◌֮◌ͮ◌̕b; a◌֮◌̀◌ͮ◌̕b; à◌֮◌ͮ◌̕b; a◌֮◌̀◌ͮ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER V, LATIN SMALL LETTER B 0061 036E 0315 0300 05AE 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062; # (a◌ͮ◌̕◌̀◌֮b; a◌֮◌ͮ◌̀◌̕b; a◌֮◌ͮ◌̀◌̕b; a◌֮◌ͮ◌̀◌̕b; a◌֮◌ͮ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER V, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 036F 0062;00E0 05AE 036F 0315 0062;0061 05AE 0300 036F 0315 0062;00E0 05AE 036F 0315 0062;0061 05AE 0300 036F 0315 0062; # (a◌̕◌̀◌֮◌ͯb; à◌֮◌ͯ◌̕b; a◌֮◌̀◌ͯ◌̕b; à◌֮◌ͯ◌̕b; a◌֮◌̀◌ͯ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER X, LATIN SMALL LETTER B 0061 036F 0315 0300 05AE 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062; # (a◌ͯ◌̕◌̀◌֮b; a◌֮◌ͯ◌̀◌̕b; a◌֮◌ͯ◌̀◌̕b; a◌֮◌ͯ◌̀◌̕b; a◌֮◌ͯ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER X, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0483 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062; # (a◌̕◌̀◌֮◌҃b; à◌֮◌҃◌̕b; a◌֮◌̀◌҃◌̕b; à◌֮◌҃◌̕b; a◌֮◌̀◌҃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC TITLO, LATIN SMALL LETTER B 0061 0483 0315 0300 05AE 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062; # (a◌҃◌̕◌̀◌֮b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; a◌֮◌҃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC TITLO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0484 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062; # (a◌̕◌̀◌֮◌҄b; à◌֮◌҄◌̕b; a◌֮◌̀◌҄◌̕b; à◌֮◌҄◌̕b; a◌֮◌̀◌҄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC PALATALIZATION, LATIN SMALL LETTER B 0061 0484 0315 0300 05AE 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062; # (a◌҄◌̕◌̀◌֮b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; a◌֮◌҄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC PALATALIZATION, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0485 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062; # (a◌̕◌̀◌֮◌҅b; à◌֮◌҅◌̕b; a◌֮◌̀◌҅◌̕b; à◌֮◌҅◌̕b; a◌֮◌̀◌҅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC DASIA PNEUMATA, LATIN SMALL LETTER B 0061 0485 0315 0300 05AE 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062; # (a◌҅◌̕◌̀◌֮b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; a◌֮◌҅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC DASIA PNEUMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0486 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062; # (a◌̕◌̀◌֮◌҆b; à◌֮◌҆◌̕b; a◌֮◌̀◌҆◌̕b; à◌֮◌҆◌̕b; a◌֮◌̀◌҆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC PSILI PNEUMATA, LATIN SMALL LETTER B 0061 0486 0315 0300 05AE 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062; # (a◌҆◌̕◌̀◌֮b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; a◌֮◌҆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC PSILI PNEUMATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0487 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062; # (a◌̕◌̀◌֮◌҇b; à◌֮◌҇◌̕b; a◌֮◌̀◌҇◌̕b; à◌֮◌҇◌̕b; a◌֮◌̀◌҇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC POKRYTIE, LATIN SMALL LETTER B 0061 0487 0315 0300 05AE 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062; # (a◌҇◌̕◌̀◌֮b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; a◌֮◌҇◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC POKRYTIE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0591 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062; # (a◌֚◌̖◌〪◌֑b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; a◌〪◌̖◌֑◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT ETNAHTA, LATIN SMALL LETTER B 0061 0591 059A 0316 302A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062; # (a◌֑◌֚◌̖◌〪b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; a◌〪◌֑◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT ETNAHTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0592 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062; # (a◌̕◌̀◌֮◌֒b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; à◌֮◌֒◌̕b; a◌֮◌̀◌֒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT SEGOL, LATIN SMALL LETTER B 0061 0592 0315 0300 05AE 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062; # (a◌֒◌̕◌̀◌֮b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; a◌֮◌֒◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT SEGOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0593 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062; # (a◌̕◌̀◌֮◌֓b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; à◌֮◌֓◌̕b; a◌֮◌̀◌֓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT SHALSHELET, LATIN SMALL LETTER B 0061 0593 0315 0300 05AE 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062; # (a◌֓◌̕◌̀◌֮b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; a◌֮◌֓◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT SHALSHELET, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0594 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062; # (a◌̕◌̀◌֮◌֔b; à◌֮◌֔◌̕b; a◌֮◌̀◌֔◌̕b; à◌֮◌֔◌̕b; a◌֮◌̀◌֔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZAQEF QATAN, LATIN SMALL LETTER B 0061 0594 0315 0300 05AE 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062; # (a◌֔◌̕◌̀◌֮b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; a◌֮◌֔◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZAQEF QATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0595 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062; # (a◌̕◌̀◌֮◌֕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; à◌֮◌֕◌̕b; a◌֮◌̀◌֕◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZAQEF GADOL, LATIN SMALL LETTER B 0061 0595 0315 0300 05AE 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062; # (a◌֕◌̕◌̀◌֮b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; a◌֮◌֕◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZAQEF GADOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0596 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062; # (a◌֚◌̖◌〪◌֖b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; a◌〪◌̖◌֖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT TIPEHA, LATIN SMALL LETTER B 0061 0596 059A 0316 302A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062; # (a◌֖◌֚◌̖◌〪b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; a◌〪◌֖◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT TIPEHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0597 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062; # (a◌̕◌̀◌֮◌֗b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; à◌֮◌֗◌̕b; a◌֮◌̀◌֗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT REVIA, LATIN SMALL LETTER B 0061 0597 0315 0300 05AE 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062; # (a◌֗◌̕◌̀◌֮b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; a◌֮◌֗◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT REVIA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0598 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062; # (a◌̕◌̀◌֮◌֘b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; à◌֮◌֘◌̕b; a◌֮◌̀◌֘◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ZARQA, LATIN SMALL LETTER B 0061 0598 0315 0300 05AE 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062; # (a◌֘◌̕◌̀◌֮b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; a◌֮◌֘◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZARQA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0599 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062; # (a◌̕◌̀◌֮◌֙b; à◌֮◌֙◌̕b; a◌֮◌̀◌֙◌̕b; à◌֮◌֙◌̕b; a◌֮◌̀◌֙◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT PASHTA, LATIN SMALL LETTER B 0061 0599 0315 0300 05AE 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062; # (a◌֙◌̕◌̀◌֮b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; a◌֮◌֙◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT PASHTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 302E 059A 0316 059A 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # (a〮◌֚◌̖◌֚b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT YETIV, LATIN SMALL LETTER B 0061 059A 302E 059A 0316 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; # (a◌֚〮◌֚◌̖b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; a◌̖◌֚◌֚〮b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B 0061 059A 0316 302A 059B 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062; # (a◌֚◌̖◌〪◌֛b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; a◌〪◌̖◌֛◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT TEVIR, LATIN SMALL LETTER B 0061 059B 059A 0316 302A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062; # (a◌֛◌֚◌̖◌〪b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; a◌〪◌֛◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT TEVIR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 059C 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062; # (a◌̕◌̀◌֮◌֜b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; à◌֮◌֜◌̕b; a◌֮◌̀◌֜◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERESH, LATIN SMALL LETTER B 0061 059C 0315 0300 05AE 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062; # (a◌֜◌̕◌̀◌֮b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; a◌֮◌֜◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERESH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 059D 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062; # (a◌̕◌̀◌֮◌֝b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; à◌֮◌֝◌̕b; a◌֮◌̀◌֝◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERESH MUQDAM, LATIN SMALL LETTER B 0061 059D 0315 0300 05AE 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062; # (a◌֝◌̕◌̀◌֮b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; a◌֮◌֝◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERESH MUQDAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 059E 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062; # (a◌̕◌̀◌֮◌֞b; à◌֮◌֞◌̕b; a◌֮◌̀◌֞◌̕b; à◌֮◌֞◌̕b; a◌֮◌̀◌֞◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT GERSHAYIM, LATIN SMALL LETTER B 0061 059E 0315 0300 05AE 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062; # (a◌֞◌̕◌̀◌֮b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; a◌֮◌֞◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT GERSHAYIM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 059F 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062; # (a◌̕◌̀◌֮◌֟b; à◌֮◌֟◌̕b; a◌֮◌̀◌֟◌̕b; à◌֮◌֟◌̕b; a◌֮◌̀◌֟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT QARNEY PARA, LATIN SMALL LETTER B 0061 059F 0315 0300 05AE 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062; # (a◌֟◌̕◌̀◌֮b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; a◌֮◌֟◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT QARNEY PARA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 05A0 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062; # (a◌̕◌̀◌֮◌֠b; à◌֮◌֠◌̕b; a◌֮◌̀◌֠◌̕b; à◌֮◌֠◌̕b; a◌֮◌̀◌֠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT TELISHA GEDOLA, LATIN SMALL LETTER B 0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062; # (a◌֠◌̕◌̀◌֮b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; a◌֮◌֠◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT TELISHA GEDOLA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062; # (a◌̕◌̀◌֮◌֡b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; à◌֮◌֡◌̕b; a◌֮◌̀◌֡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT PAZER, LATIN SMALL LETTER B 0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062; # (a◌֡◌̕◌̀◌֮b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; a◌֮◌֡◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT PAZER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 05A2 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062; # (a◌֚◌̖◌〪◌֢b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; a◌〪◌̖◌֢◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT ATNAH HAFUKH, LATIN SMALL LETTER B 0061 05A2 059A 0316 302A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062; # (a◌֢◌֚◌̖◌〪b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; a◌〪◌֢◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT ATNAH HAFUKH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062; # (a◌֚◌̖◌〪◌֣b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; a◌〪◌̖◌֣◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MUNAH, LATIN SMALL LETTER B 0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062; # (a◌֣◌֚◌̖◌〪b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; a◌〪◌֣◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MUNAH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062; # (a◌֚◌̖◌〪◌֤b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; a◌〪◌̖◌֤◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MAHAPAKH, LATIN SMALL LETTER B 0061 05A4 059A 0316 302A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062; # (a◌֤◌֚◌̖◌〪b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; a◌〪◌֤◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MAHAPAKH, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 05A5 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062; # (a◌֚◌̖◌〪◌֥b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; a◌〪◌̖◌֥◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MERKHA, LATIN SMALL LETTER B 0061 05A5 059A 0316 302A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062; # (a◌֥◌֚◌̖◌〪b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; a◌〪◌֥◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MERKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 05A6 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062; # (a◌֚◌̖◌〪◌֦b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; a◌〪◌̖◌֦◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT MERKHA KEFULA, LATIN SMALL LETTER B 0061 05A6 059A 0316 302A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062; # (a◌֦◌֚◌̖◌〪b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; a◌〪◌֦◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT MERKHA KEFULA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 05A7 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062; # (a◌֚◌̖◌〪◌֧b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; a◌〪◌̖◌֧◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT DARGA, LATIN SMALL LETTER B 0061 05A7 059A 0316 302A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062; # (a◌֧◌֚◌̖◌〪b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; a◌〪◌֧◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT DARGA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 05A8 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062; # (a◌̕◌̀◌֮◌֨b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; à◌֮◌֨◌̕b; a◌֮◌̀◌֨◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT QADMA, LATIN SMALL LETTER B 0061 05A8 0315 0300 05AE 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062; # (a◌֨◌̕◌̀◌֮b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; a◌֮◌֨◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT QADMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 05A9 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062; # (a◌̕◌̀◌֮◌֩b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; à◌֮◌֩◌̕b; a◌֮◌̀◌֩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT TELISHA QETANA, LATIN SMALL LETTER B 0061 05A9 0315 0300 05AE 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062; # (a◌֩◌̕◌̀◌֮b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; a◌֮◌֩◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT TELISHA QETANA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 05AA 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062; # (a◌֚◌̖◌〪◌֪b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; a◌〪◌̖◌֪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW ACCENT YERAH BEN YOMO, LATIN SMALL LETTER B 0061 05AA 059A 0316 302A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062; # (a◌֪◌֚◌̖◌〪b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; a◌〪◌֪◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YERAH BEN YOMO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 05AB 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062; # (a◌̕◌̀◌֮◌֫b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; à◌֮◌֫◌̕b; a◌֮◌̀◌֫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT OLE, LATIN SMALL LETTER B 0061 05AB 0315 0300 05AE 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062; # (a◌֫◌̕◌̀◌֮b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; a◌֮◌֫◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT OLE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 05AC 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062; # (a◌̕◌̀◌֮◌֬b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; à◌֮◌֬◌̕b; a◌֮◌̀◌֬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW ACCENT ILUY, LATIN SMALL LETTER B 0061 05AC 0315 0300 05AE 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062; # (a◌֬◌̕◌̀◌֮b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; a◌֮◌֬◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW ACCENT ILUY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 302E 059A 0316 05AD 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062; # (a〮◌֚◌̖◌֭b; a◌̖◌֚◌֭〮b; a◌̖◌֚◌֭〮b; a◌̖◌֚◌֭〮b; a◌̖◌֚◌֭〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, HEBREW ACCENT DEHI, LATIN SMALL LETTER B 0061 05AD 302E 059A 0316 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062; # (a◌֭〮◌֚◌̖b; a◌̖◌֭◌֚〮b; a◌̖◌֭◌֚〮b; a◌̖◌֭◌֚〮b; a◌̖◌֭◌֚〮b; ) LATIN SMALL LETTER A, HEBREW ACCENT DEHI, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B 0061 0300 05AE 1D16D 05AE 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062; # (a◌̀◌𝅭֮◌֮b; à𝅭◌֮◌֮b; a𝅭◌֮◌֮◌̀b; à𝅭◌֮◌֮b; a𝅭◌֮◌֮◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05AE 0300 05AE 1D16D 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062; # (a◌֮◌̀◌𝅭֮b; à𝅭◌֮◌֮b; a𝅭◌֮◌֮◌̀b; à𝅭◌֮◌֮b; a𝅭◌֮◌֮◌̀b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZINOR, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B 0061 0315 0300 05AE 05AF 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062; # (a◌̕◌̀◌֮◌֯b; à◌֮◌֯◌̕b; a◌֮◌̀◌֯◌̕b; à◌֮◌֯◌̕b; a◌֮◌̀◌֯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW MARK MASORA CIRCLE, LATIN SMALL LETTER B 0061 05AF 0315 0300 05AE 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062; # (a◌֯◌̕◌̀◌֮b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; a◌֮◌֯◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW MARK MASORA CIRCLE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B1 05B0 094D 05B0 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; # (a◌ֱ◌ְ◌्◌ְb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, HEBREW POINT SHEVA, LATIN SMALL LETTER B 0061 05B0 05B1 05B0 094D 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; # (a◌ְ◌ֱ◌ְ◌्b; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; a◌्◌ְ◌ְ◌ֱb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, LATIN SMALL LETTER B 0061 05B2 05B1 05B0 05B1 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; # (a◌ֲ◌ֱ◌ְ◌ֱb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, HEBREW POINT HATAF SEGOL, LATIN SMALL LETTER B 0061 05B1 05B2 05B1 05B0 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; # (a◌ֱ◌ֲ◌ֱ◌ְb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; a◌ְ◌ֱ◌ֱ◌ֲb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF SEGOL, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT SHEVA, LATIN SMALL LETTER B 0061 05B3 05B2 05B1 05B2 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; # (a◌ֳ◌ֲ◌ֱ◌ֲb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, HEBREW POINT HATAF PATAH, LATIN SMALL LETTER B 0061 05B2 05B3 05B2 05B1 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; # (a◌ֲ◌ֳ◌ֲ◌ֱb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; a◌ֱ◌ֲ◌ֲ◌ֳb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF SEGOL, LATIN SMALL LETTER B 0061 05B4 05B3 05B2 05B3 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; # (a◌ִ◌ֳ◌ֲ◌ֳb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; ) LATIN SMALL LETTER A, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, HEBREW POINT HATAF QAMATS, LATIN SMALL LETTER B 0061 05B3 05B4 05B3 05B2 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; # (a◌ֳ◌ִ◌ֳ◌ֲb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; a◌ֲ◌ֳ◌ֳ◌ִb; ) LATIN SMALL LETTER A, HEBREW POINT HATAF QAMATS, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HATAF PATAH, LATIN SMALL LETTER B 0061 05B5 05B4 05B3 05B4 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; # (a◌ֵ◌ִ◌ֳ◌ִb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; ) LATIN SMALL LETTER A, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, HEBREW POINT HIRIQ, LATIN SMALL LETTER B 0061 05B4 05B5 05B4 05B3 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; # (a◌ִ◌ֵ◌ִ◌ֳb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; a◌ֳ◌ִ◌ִ◌ֵb; ) LATIN SMALL LETTER A, HEBREW POINT HIRIQ, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT HATAF QAMATS, LATIN SMALL LETTER B 0061 05B6 05B5 05B4 05B5 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; # (a◌ֶ◌ֵ◌ִ◌ֵb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; ) LATIN SMALL LETTER A, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT HIRIQ, HEBREW POINT TSERE, LATIN SMALL LETTER B 0061 05B5 05B6 05B5 05B4 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; # (a◌ֵ◌ֶ◌ֵ◌ִb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; a◌ִ◌ֵ◌ֵ◌ֶb; ) LATIN SMALL LETTER A, HEBREW POINT TSERE, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT HIRIQ, LATIN SMALL LETTER B 0061 05B7 05B6 05B5 05B6 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; # (a◌ַ◌ֶ◌ֵ◌ֶb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; ) LATIN SMALL LETTER A, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT TSERE, HEBREW POINT SEGOL, LATIN SMALL LETTER B 0061 05B6 05B7 05B6 05B5 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; # (a◌ֶ◌ַ◌ֶ◌ֵb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; a◌ֵ◌ֶ◌ֶ◌ַb; ) LATIN SMALL LETTER A, HEBREW POINT SEGOL, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT TSERE, LATIN SMALL LETTER B 0061 05B8 05B7 05B6 05B7 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; # (a◌ָ◌ַ◌ֶ◌ַb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; ) LATIN SMALL LETTER A, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT SEGOL, HEBREW POINT PATAH, LATIN SMALL LETTER B 0061 05B7 05B8 05B7 05B6 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; # (a◌ַ◌ָ◌ַ◌ֶb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; a◌ֶ◌ַ◌ַ◌ָb; ) LATIN SMALL LETTER A, HEBREW POINT PATAH, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT SEGOL, LATIN SMALL LETTER B 0061 05B9 05B8 05B7 05B8 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; # (a◌ֹ◌ָ◌ַ◌ָb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT QAMATS, LATIN SMALL LETTER B 0061 05B8 05B9 05B8 05B7 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; # (a◌ָ◌ֹ◌ָ◌ַb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; a◌ַ◌ָ◌ָ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT QAMATS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, LATIN SMALL LETTER B 0061 05BB 05B9 05B8 05B9 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; # (a◌ֻ◌ֹ◌ָ◌ֹb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT HOLAM, LATIN SMALL LETTER B 0061 05B9 05BB 05B9 05B8 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; # (a◌ֹ◌ֻ◌ֹ◌ָb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; a◌ָ◌ֹ◌ֹ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, LATIN SMALL LETTER B 0061 05BB 05B9 05B8 05BA 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062; # (a◌ֻ◌ֹ◌ָ◌ֺb; a◌ָ◌ֹ◌ֺ◌ֻb; a◌ָ◌ֹ◌ֺ◌ֻb; a◌ָ◌ֹ◌ֺ◌ֻb; a◌ָ◌ֹ◌ֺ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT HOLAM HASER FOR VAV, LATIN SMALL LETTER B 0061 05BA 05BB 05B9 05B8 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062; # (a◌ֺ◌ֻ◌ֹ◌ָb; a◌ָ◌ֺ◌ֹ◌ֻb; a◌ָ◌ֺ◌ֹ◌ֻb; a◌ָ◌ֺ◌ֹ◌ֻb; a◌ָ◌ֺ◌ֹ◌ֻb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM HASER FOR VAV, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QAMATS, LATIN SMALL LETTER B 0061 05BC 05BB 05B9 05BB 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; # (a◌ּ◌ֻ◌ֹ◌ֻb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; ) LATIN SMALL LETTER A, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, HEBREW POINT QUBUTS, LATIN SMALL LETTER B 0061 05BB 05BC 05BB 05B9 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; # (a◌ֻ◌ּ◌ֻ◌ֹb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; a◌ֹ◌ֻ◌ֻ◌ּb; ) LATIN SMALL LETTER A, HEBREW POINT QUBUTS, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT HOLAM, LATIN SMALL LETTER B 0061 05BD 05BC 05BB 05BC 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; # (a◌ֽ◌ּ◌ֻ◌ּb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; ) LATIN SMALL LETTER A, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, HEBREW POINT DAGESH OR MAPIQ, LATIN SMALL LETTER B 0061 05BC 05BD 05BC 05BB 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; # (a◌ּ◌ֽ◌ּ◌ֻb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; a◌ֻ◌ּ◌ּ◌ֽb; ) LATIN SMALL LETTER A, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT QUBUTS, LATIN SMALL LETTER B 0061 05BF 05BD 05BC 05BD 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; # (a◌ֿ◌ֽ◌ּ◌ֽb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; ) LATIN SMALL LETTER A, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, HEBREW POINT METEG, LATIN SMALL LETTER B 0061 05BD 05BF 05BD 05BC 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; # (a◌ֽ◌ֿ◌ֽ◌ּb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; a◌ּ◌ֽ◌ֽ◌ֿb; ) LATIN SMALL LETTER A, HEBREW POINT METEG, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT DAGESH OR MAPIQ, LATIN SMALL LETTER B 0061 05C1 05BF 05BD 05BF 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; # (a◌ׁ◌ֿ◌ֽ◌ֿb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; ) LATIN SMALL LETTER A, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT METEG, HEBREW POINT RAFE, LATIN SMALL LETTER B 0061 05BF 05C1 05BF 05BD 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; # (a◌ֿ◌ׁ◌ֿ◌ֽb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; a◌ֽ◌ֿ◌ֿ◌ׁb; ) LATIN SMALL LETTER A, HEBREW POINT RAFE, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT METEG, LATIN SMALL LETTER B 0061 05C2 05C1 05BF 05C1 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; # (a◌ׂ◌ׁ◌ֿ◌ׁb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; ) LATIN SMALL LETTER A, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, HEBREW POINT SHIN DOT, LATIN SMALL LETTER B 0061 05C1 05C2 05C1 05BF 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; # (a◌ׁ◌ׂ◌ׁ◌ֿb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; a◌ֿ◌ׁ◌ׁ◌ׂb; ) LATIN SMALL LETTER A, HEBREW POINT SHIN DOT, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT RAFE, LATIN SMALL LETTER B 0061 FB1E 05C2 05C1 05C2 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; # (a◌ﬞ◌ׂ◌ׁ◌ׂb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; ) LATIN SMALL LETTER A, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, HEBREW POINT SIN DOT, LATIN SMALL LETTER B 0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; # (a◌ׂ◌ﬞ◌ׂ◌ׁb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; a◌ׁ◌ׂ◌ׂ◌ﬞb; ) LATIN SMALL LETTER A, HEBREW POINT SIN DOT, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT SHIN DOT, LATIN SMALL LETTER B 0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062; # (a◌̕◌̀◌֮◌ׄb; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; à◌֮◌ׄ◌̕b; a◌֮◌̀◌ׄ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, HEBREW MARK UPPER DOT, LATIN SMALL LETTER B 0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062; # (a◌ׄ◌̕◌̀◌֮b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; a◌֮◌ׄ◌̀◌̕b; ) LATIN SMALL LETTER A, HEBREW MARK UPPER DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 05C5 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062; # (a◌֚◌̖◌〪◌ׅb; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; a◌〪◌̖◌ׅ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, HEBREW MARK LOWER DOT, LATIN SMALL LETTER B 0061 05C5 059A 0316 302A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062; # (a◌ׅ◌֚◌̖◌〪b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; a◌〪◌ׅ◌̖◌֚b; ) LATIN SMALL LETTER A, HEBREW MARK LOWER DOT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 05B9 05B8 05B7 05C7 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062; # (a◌ֹ◌ָ◌ַ◌ׇb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; a◌ַ◌ָ◌ׇ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, HEBREW POINT QAMATS QATAN, LATIN SMALL LETTER B 0061 05C7 05B9 05B8 05B7 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062; # (a◌ׇ◌ֹ◌ָ◌ַb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; a◌ַ◌ׇ◌ָ◌ֹb; ) LATIN SMALL LETTER A, HEBREW POINT QAMATS QATAN, HEBREW POINT HOLAM, HEBREW POINT QAMATS, HEBREW POINT PATAH, LATIN SMALL LETTER B 0061 0315 0300 05AE 0610 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062; # (a◌̕◌̀◌֮◌ؐb; à◌֮◌ؐ◌̕b; a◌֮◌̀◌ؐ◌̕b; à◌֮◌ؐ◌̕b; a◌֮◌̀◌ؐ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM, LATIN SMALL LETTER B 0061 0610 0315 0300 05AE 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062; # (a◌ؐ◌̕◌̀◌֮b; a◌֮◌ؐ◌̀◌̕b; a◌֮◌ؐ◌̀◌̕b; a◌֮◌ؐ◌̀◌̕b; a◌֮◌ؐ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0611 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062; # (a◌̕◌̀◌֮◌ؑb; à◌֮◌ؑ◌̕b; a◌֮◌̀◌ؑ◌̕b; à◌֮◌ؑ◌̕b; a◌֮◌̀◌ؑ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SIGN ALAYHE ASSALLAM, LATIN SMALL LETTER B 0061 0611 0315 0300 05AE 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062; # (a◌ؑ◌̕◌̀◌֮b; a◌֮◌ؑ◌̀◌̕b; a◌֮◌ؑ◌̀◌̕b; a◌֮◌ؑ◌̀◌̕b; a◌֮◌ؑ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SIGN ALAYHE ASSALLAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0612 0062;00E0 05AE 0612 0315 0062;0061 05AE 0300 0612 0315 0062;00E0 05AE 0612 0315 0062;0061 05AE 0300 0612 0315 0062; # (a◌̕◌̀◌֮◌ؒb; à◌֮◌ؒ◌̕b; a◌֮◌̀◌ؒ◌̕b; à◌֮◌ؒ◌̕b; a◌֮◌̀◌ؒ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SIGN RAHMATULLAH ALAYHE, LATIN SMALL LETTER B 0061 0612 0315 0300 05AE 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062; # (a◌ؒ◌̕◌̀◌֮b; a◌֮◌ؒ◌̀◌̕b; a◌֮◌ؒ◌̀◌̕b; a◌֮◌ؒ◌̀◌̕b; a◌֮◌ؒ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SIGN RAHMATULLAH ALAYHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0613 0062;00E0 05AE 0613 0315 0062;0061 05AE 0300 0613 0315 0062;00E0 05AE 0613 0315 0062;0061 05AE 0300 0613 0315 0062; # (a◌̕◌̀◌֮◌ؓb; à◌֮◌ؓ◌̕b; a◌֮◌̀◌ؓ◌̕b; à◌֮◌ؓ◌̕b; a◌֮◌̀◌ؓ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SIGN RADI ALLAHOU ANHU, LATIN SMALL LETTER B 0061 0613 0315 0300 05AE 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062; # (a◌ؓ◌̕◌̀◌֮b; a◌֮◌ؓ◌̀◌̕b; a◌֮◌ؓ◌̀◌̕b; a◌֮◌ؓ◌̀◌̕b; a◌֮◌ؓ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SIGN RADI ALLAHOU ANHU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0614 0062;00E0 05AE 0614 0315 0062;0061 05AE 0300 0614 0315 0062;00E0 05AE 0614 0315 0062;0061 05AE 0300 0614 0315 0062; # (a◌̕◌̀◌֮◌ؔb; à◌֮◌ؔ◌̕b; a◌֮◌̀◌ؔ◌̕b; à◌֮◌ؔ◌̕b; a◌֮◌̀◌ؔ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SIGN TAKHALLUS, LATIN SMALL LETTER B 0061 0614 0315 0300 05AE 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062; # (a◌ؔ◌̕◌̀◌֮b; a◌֮◌ؔ◌̀◌̕b; a◌֮◌ؔ◌̀◌̕b; a◌֮◌ؔ◌̀◌̕b; a◌֮◌ؔ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SIGN TAKHALLUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0615 0062;00E0 05AE 0615 0315 0062;0061 05AE 0300 0615 0315 0062;00E0 05AE 0615 0315 0062;0061 05AE 0300 0615 0315 0062; # (a◌̕◌̀◌֮◌ؕb; à◌֮◌ؕ◌̕b; a◌֮◌̀◌ؕ◌̕b; à◌֮◌ؕ◌̕b; a◌֮◌̀◌ؕ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH TAH, LATIN SMALL LETTER B 0061 0615 0315 0300 05AE 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062; # (a◌ؕ◌̕◌̀◌֮b; a◌֮◌ؕ◌̀◌̕b; a◌֮◌ؕ◌̀◌̕b; a◌֮◌ؕ◌̀◌̕b; a◌֮◌ؕ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH TAH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0616 0062;00E0 05AE 0616 0315 0062;0061 05AE 0300 0616 0315 0062;00E0 05AE 0616 0315 0062;0061 05AE 0300 0616 0315 0062; # (a◌̕◌̀◌֮◌ؖb; à◌֮◌ؖ◌̕b; a◌֮◌̀◌ؖ◌̕b; à◌֮◌ؖ◌̕b; a◌֮◌̀◌ؖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH, LATIN SMALL LETTER B 0061 0616 0315 0300 05AE 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062; # (a◌ؖ◌̕◌̀◌֮b; a◌֮◌ؖ◌̀◌̕b; a◌֮◌ؖ◌̀◌̕b; a◌֮◌ؖ◌̀◌̕b; a◌֮◌ؖ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0617 0062;00E0 05AE 0617 0315 0062;0061 05AE 0300 0617 0315 0062;00E0 05AE 0617 0315 0062;0061 05AE 0300 0617 0315 0062; # (a◌̕◌̀◌֮◌ؗb; à◌֮◌ؗ◌̕b; a◌֮◌̀◌ؗ◌̕b; à◌֮◌ؗ◌̕b; a◌֮◌̀◌ؗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH ZAIN, LATIN SMALL LETTER B 0061 0617 0315 0300 05AE 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062; # (a◌ؗ◌̕◌̀◌֮b; a◌֮◌ؗ◌̀◌̕b; a◌֮◌ؗ◌̀◌̕b; a◌֮◌ؗ◌̀◌̕b; a◌֮◌ؗ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH ZAIN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0619 0618 064D 0618 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062; # (a◌ؙ◌ؘ◌ٍ◌ؘb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; ) LATIN SMALL LETTER A, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC SMALL FATHA, LATIN SMALL LETTER B 0061 0618 0619 0618 064D 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062; # (a◌ؘ◌ؙ◌ؘ◌ٍb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; a◌ٍ◌ؘ◌ؘ◌ؙb; ) LATIN SMALL LETTER A, ARABIC SMALL FATHA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC KASRATAN, LATIN SMALL LETTER B 0061 061A 0619 0618 0619 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062; # (a◌ؚ◌ؙ◌ؘ◌ؙb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; ) LATIN SMALL LETTER A, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC SMALL DAMMA, LATIN SMALL LETTER B 0061 0619 061A 0619 0618 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062; # (a◌ؙ◌ؚ◌ؙ◌ؘb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; a◌ؘ◌ؙ◌ؙ◌ؚb; ) LATIN SMALL LETTER A, ARABIC SMALL DAMMA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, LATIN SMALL LETTER B 0061 0651 061A 0619 061A 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062; # (a◌ّ◌ؚ◌ؙ◌ؚb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; ) LATIN SMALL LETTER A, ARABIC SHADDA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC SMALL KASRA, LATIN SMALL LETTER B 0061 061A 0651 061A 0619 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062; # (a◌ؚ◌ّ◌ؚ◌ؙb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; a◌ؙ◌ؚ◌ؚ◌ّb; ) LATIN SMALL LETTER A, ARABIC SMALL KASRA, ARABIC SHADDA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, LATIN SMALL LETTER B 0061 064C 064B FB1E 064B 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; # (a◌ٌ◌ً◌ﬞ◌ًb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; ) LATIN SMALL LETTER A, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, ARABIC FATHATAN, LATIN SMALL LETTER B 0061 064B 064C 064B FB1E 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; # (a◌ً◌ٌ◌ً◌ﬞb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; a◌ﬞ◌ً◌ً◌ٌb; ) LATIN SMALL LETTER A, ARABIC FATHATAN, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B 0061 064D 064C 064B 064C 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; # (a◌ٍ◌ٌ◌ً◌ٌb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; ) LATIN SMALL LETTER A, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, ARABIC DAMMATAN, LATIN SMALL LETTER B 0061 064C 064D 064C 064B 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; # (a◌ٌ◌ٍ◌ٌ◌ًb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; a◌ً◌ٌ◌ٌ◌ٍb; ) LATIN SMALL LETTER A, ARABIC DAMMATAN, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, LATIN SMALL LETTER B 0061 0618 064D 064C 064D 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062; # (a◌ؘ◌ٍ◌ٌ◌ٍb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; ) LATIN SMALL LETTER A, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC KASRATAN, LATIN SMALL LETTER B 0061 064D 0618 064D 064C 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062; # (a◌ٍ◌ؘ◌ٍ◌ٌb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; a◌ٌ◌ٍ◌ٍ◌ؘb; ) LATIN SMALL LETTER A, ARABIC KASRATAN, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, LATIN SMALL LETTER B 0061 0619 0618 064D 064E 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062; # (a◌ؙ◌ؘ◌ٍ◌َb; a◌ٍ◌ؘ◌َ◌ؙb; a◌ٍ◌ؘ◌َ◌ؙb; a◌ٍ◌ؘ◌َ◌ؙb; a◌ٍ◌ؘ◌َ◌ؙb; ) LATIN SMALL LETTER A, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC FATHA, LATIN SMALL LETTER B 0061 064E 0619 0618 064D 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062; # (a◌َ◌ؙ◌ؘ◌ٍb; a◌ٍ◌َ◌ؘ◌ؙb; a◌ٍ◌َ◌ؘ◌ؙb; a◌ٍ◌َ◌ؘ◌ؙb; a◌ٍ◌َ◌ؘ◌ؙb; ) LATIN SMALL LETTER A, ARABIC FATHA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC KASRATAN, LATIN SMALL LETTER B 0061 061A 0619 0618 064F 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062; # (a◌ؚ◌ؙ◌ؘ◌ُb; a◌ؘ◌ؙ◌ُ◌ؚb; a◌ؘ◌ؙ◌ُ◌ؚb; a◌ؘ◌ؙ◌ُ◌ؚb; a◌ؘ◌ؙ◌ُ◌ؚb; ) LATIN SMALL LETTER A, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, ARABIC DAMMA, LATIN SMALL LETTER B 0061 064F 061A 0619 0618 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062; # (a◌ُ◌ؚ◌ؙ◌ؘb; a◌ؘ◌ُ◌ؙ◌ؚb; a◌ؘ◌ُ◌ؙ◌ؚb; a◌ؘ◌ُ◌ؙ◌ؚb; a◌ؘ◌ُ◌ؙ◌ؚb; ) LATIN SMALL LETTER A, ARABIC DAMMA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC SMALL FATHA, LATIN SMALL LETTER B 0061 0651 061A 0619 0650 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062; # (a◌ّ◌ؚ◌ؙ◌ِb; a◌ؙ◌ؚ◌ِ◌ّb; a◌ؙ◌ؚ◌ِ◌ّb; a◌ؙ◌ؚ◌ِ◌ّb; a◌ؙ◌ؚ◌ِ◌ّb; ) LATIN SMALL LETTER A, ARABIC SHADDA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, ARABIC KASRA, LATIN SMALL LETTER B 0061 0650 0651 061A 0619 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062; # (a◌ِ◌ّ◌ؚ◌ؙb; a◌ؙ◌ِ◌ؚ◌ّb; a◌ؙ◌ِ◌ؚ◌ّb; a◌ؙ◌ِ◌ؚ◌ّb; a◌ؙ◌ِ◌ؚ◌ّb; ) LATIN SMALL LETTER A, ARABIC KASRA, ARABIC SHADDA, ARABIC SMALL KASRA, ARABIC SMALL DAMMA, LATIN SMALL LETTER B 0061 0652 0651 061A 0651 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062; # (a◌ْ◌ّ◌ؚ◌ّb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; ) LATIN SMALL LETTER A, ARABIC SUKUN, ARABIC SHADDA, ARABIC SMALL KASRA, ARABIC SHADDA, LATIN SMALL LETTER B 0061 0651 0652 0651 061A 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062; # (a◌ّ◌ْ◌ّ◌ؚb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; a◌ؚ◌ّ◌ّ◌ْb; ) LATIN SMALL LETTER A, ARABIC SHADDA, ARABIC SUKUN, ARABIC SHADDA, ARABIC SMALL KASRA, LATIN SMALL LETTER B 0061 0670 0652 0651 0652 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; # (a◌ٰ◌ْ◌ّ◌ْb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; ) LATIN SMALL LETTER A, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC SHADDA, ARABIC SUKUN, LATIN SMALL LETTER B 0061 0652 0670 0652 0651 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; # (a◌ْ◌ٰ◌ْ◌ّb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; a◌ّ◌ْ◌ْ◌ٰb; ) LATIN SMALL LETTER A, ARABIC SUKUN, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC SHADDA, LATIN SMALL LETTER B 0061 0315 0300 05AE 0653 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062; # (a◌̕◌̀◌֮◌ٓb; à◌֮◌ٓ◌̕b; a◌֮◌̀◌ٓ◌̕b; à◌֮◌ٓ◌̕b; a◌֮◌̀◌ٓ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC MADDAH ABOVE, LATIN SMALL LETTER B 0061 0653 0315 0300 05AE 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062; # (a◌ٓ◌̕◌̀◌֮b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; a◌֮◌ٓ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC MADDAH ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0654 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062; # (a◌̕◌̀◌֮◌ٔb; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; à◌֮◌ٔ◌̕b; a◌֮◌̀◌ٔ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC HAMZA ABOVE, LATIN SMALL LETTER B 0061 0654 0315 0300 05AE 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062; # (a◌ٔ◌̕◌̀◌֮b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; a◌֮◌ٔ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC HAMZA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0655 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062; # (a◌֚◌̖◌〪◌ٕb; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; a◌〪◌̖◌ٕ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC HAMZA BELOW, LATIN SMALL LETTER B 0061 0655 059A 0316 302A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062; # (a◌ٕ◌֚◌̖◌〪b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; a◌〪◌ٕ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0656 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062; # (a◌֚◌̖◌〪◌ٖb; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; a◌〪◌̖◌ٖ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC SUBSCRIPT ALEF, LATIN SMALL LETTER B 0061 0656 059A 0316 302A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062; # (a◌ٖ◌֚◌̖◌〪b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; a◌〪◌ٖ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SUBSCRIPT ALEF, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0657 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062; # (a◌̕◌̀◌֮◌ٗb; à◌֮◌ٗ◌̕b; a◌֮◌̀◌ٗ◌̕b; à◌֮◌ٗ◌̕b; a◌֮◌̀◌ٗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC INVERTED DAMMA, LATIN SMALL LETTER B 0061 0657 0315 0300 05AE 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062; # (a◌ٗ◌̕◌̀◌֮b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; a◌֮◌ٗ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC INVERTED DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0658 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062; # (a◌̕◌̀◌֮◌٘b; à◌֮◌٘◌̕b; a◌֮◌̀◌٘◌̕b; à◌֮◌٘◌̕b; a◌֮◌̀◌٘◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC MARK NOON GHUNNA, LATIN SMALL LETTER B 0061 0658 0315 0300 05AE 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062; # (a◌٘◌̕◌̀◌֮b; a◌֮◌٘◌̀◌̕b; a◌֮◌٘◌̀◌̕b; a◌֮◌٘◌̀◌̕b; a◌֮◌٘◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC MARK NOON GHUNNA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0659 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062; # (a◌̕◌̀◌֮◌ٙb; à◌֮◌ٙ◌̕b; a◌֮◌̀◌ٙ◌̕b; à◌֮◌ٙ◌̕b; a◌֮◌̀◌ٙ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC ZWARAKAY, LATIN SMALL LETTER B 0061 0659 0315 0300 05AE 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062; # (a◌ٙ◌̕◌̀◌֮b; a◌֮◌ٙ◌̀◌̕b; a◌֮◌ٙ◌̀◌̕b; a◌֮◌ٙ◌̀◌̕b; a◌֮◌ٙ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC ZWARAKAY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 065A 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062; # (a◌̕◌̀◌֮◌ٚb; à◌֮◌ٚ◌̕b; a◌֮◌̀◌ٚ◌̕b; à◌֮◌ٚ◌̕b; a◌֮◌̀◌ٚ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC VOWEL SIGN SMALL V ABOVE, LATIN SMALL LETTER B 0061 065A 0315 0300 05AE 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062; # (a◌ٚ◌̕◌̀◌֮b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; a◌֮◌ٚ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC VOWEL SIGN SMALL V ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 065B 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062; # (a◌̕◌̀◌֮◌ٛb; à◌֮◌ٛ◌̕b; a◌֮◌̀◌ٛ◌̕b; à◌֮◌ٛ◌̕b; a◌֮◌̀◌ٛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC VOWEL SIGN INVERTED SMALL V ABOVE, LATIN SMALL LETTER B 0061 065B 0315 0300 05AE 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062; # (a◌ٛ◌̕◌̀◌֮b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; a◌֮◌ٛ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC VOWEL SIGN INVERTED SMALL V ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 065C 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062; # (a◌֚◌̖◌〪◌ٜb; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; a◌〪◌̖◌ٜ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC VOWEL SIGN DOT BELOW, LATIN SMALL LETTER B 0061 065C 059A 0316 302A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062; # (a◌ٜ◌֚◌̖◌〪b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; a◌〪◌ٜ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC VOWEL SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 065D 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062; # (a◌̕◌̀◌֮◌ٝb; à◌֮◌ٝ◌̕b; a◌֮◌̀◌ٝ◌̕b; à◌֮◌ٝ◌̕b; a◌֮◌̀◌ٝ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC REVERSED DAMMA, LATIN SMALL LETTER B 0061 065D 0315 0300 05AE 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062; # (a◌ٝ◌̕◌̀◌֮b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; a◌֮◌ٝ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC REVERSED DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 065E 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062; # (a◌̕◌̀◌֮◌ٞb; à◌֮◌ٞ◌̕b; a◌֮◌̀◌ٞ◌̕b; à◌֮◌ٞ◌̕b; a◌֮◌̀◌ٞ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC FATHA WITH TWO DOTS, LATIN SMALL LETTER B 0061 065E 0315 0300 05AE 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062; # (a◌ٞ◌̕◌̀◌֮b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; a◌֮◌ٞ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC FATHA WITH TWO DOTS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 065F 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062; # (a◌֚◌̖◌〪◌ٟb; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; a◌〪◌̖◌ٟ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC WAVY HAMZA BELOW, LATIN SMALL LETTER B 0061 065F 059A 0316 302A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062; # (a◌ٟ◌֚◌̖◌〪b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; a◌〪◌ٟ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC WAVY HAMZA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # (a◌ܑ◌ٰ◌ْ◌ٰb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B 0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; # (a◌ٰ◌ܑ◌ٰ◌ْb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; a◌ْ◌ٰ◌ٰ◌ܑb; ) LATIN SMALL LETTER A, ARABIC LETTER SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, ARABIC SUKUN, LATIN SMALL LETTER B 0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062; # (a◌̕◌̀◌֮◌ۖb; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; à◌֮◌ۖ◌̕b; a◌֮◌̀◌ۖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA, LATIN SMALL LETTER B 0061 06D6 0315 0300 05AE 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062; # (a◌ۖ◌̕◌̀◌֮b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; a◌֮◌ۖ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06D7 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062; # (a◌̕◌̀◌֮◌ۗb; à◌֮◌ۗ◌̕b; a◌֮◌̀◌ۗ◌̕b; à◌֮◌ۗ◌̕b; a◌֮◌̀◌ۗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA, LATIN SMALL LETTER B 0061 06D7 0315 0300 05AE 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062; # (a◌ۗ◌̕◌̀◌֮b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; a◌֮◌ۗ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06D8 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062; # (a◌̕◌̀◌֮◌ۘb; à◌֮◌ۘ◌̕b; a◌֮◌̀◌ۘ◌̕b; à◌֮◌ۘ◌̕b; a◌֮◌̀◌ۘ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MEEM INITIAL FORM, LATIN SMALL LETTER B 0061 06D8 0315 0300 05AE 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062; # (a◌ۘ◌̕◌̀◌֮b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; a◌֮◌ۘ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MEEM INITIAL FORM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06D9 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062; # (a◌̕◌̀◌֮◌ۙb; à◌֮◌ۙ◌̕b; a◌֮◌̀◌ۙ◌̕b; à◌֮◌ۙ◌̕b; a◌֮◌̀◌ۙ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH LAM ALEF, LATIN SMALL LETTER B 0061 06D9 0315 0300 05AE 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062; # (a◌ۙ◌̕◌̀◌֮b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; a◌֮◌ۙ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH LAM ALEF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06DA 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062; # (a◌̕◌̀◌֮◌ۚb; à◌֮◌ۚ◌̕b; a◌֮◌̀◌ۚ◌̕b; à◌֮◌ۚ◌̕b; a◌֮◌̀◌ۚ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH JEEM, LATIN SMALL LETTER B 0061 06DA 0315 0300 05AE 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062; # (a◌ۚ◌̕◌̀◌֮b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; a◌֮◌ۚ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH JEEM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06DB 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062; # (a◌̕◌̀◌֮◌ۛb; à◌֮◌ۛ◌̕b; a◌֮◌̀◌ۛ◌̕b; à◌֮◌ۛ◌̕b; a◌֮◌̀◌ۛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH THREE DOTS, LATIN SMALL LETTER B 0061 06DB 0315 0300 05AE 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062; # (a◌ۛ◌̕◌̀◌֮b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; a◌֮◌ۛ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH THREE DOTS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06DC 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062; # (a◌̕◌̀◌֮◌ۜb; à◌֮◌ۜ◌̕b; a◌֮◌̀◌ۜ◌̕b; à◌֮◌ۜ◌̕b; a◌֮◌̀◌ۜ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH SEEN, LATIN SMALL LETTER B 0061 06DC 0315 0300 05AE 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062; # (a◌ۜ◌̕◌̀◌֮b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; a◌֮◌ۜ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH SEEN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06DF 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062; # (a◌̕◌̀◌֮◌۟b; à◌֮◌۟◌̕b; a◌֮◌̀◌۟◌̕b; à◌֮◌۟◌̕b; a◌֮◌̀◌۟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH ROUNDED ZERO, LATIN SMALL LETTER B 0061 06DF 0315 0300 05AE 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062; # (a◌۟◌̕◌̀◌֮b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; a◌֮◌۟◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH ROUNDED ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E0 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062; # (a◌̕◌̀◌֮◌۠b; à◌֮◌۠◌̕b; a◌֮◌̀◌۠◌̕b; à◌֮◌۠◌̕b; a◌֮◌̀◌۠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO, LATIN SMALL LETTER B 0061 06E0 0315 0300 05AE 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062; # (a◌۠◌̕◌̀◌֮b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; a◌֮◌۠◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E1 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062; # (a◌̕◌̀◌֮◌ۡb; à◌֮◌ۡ◌̕b; a◌֮◌̀◌ۡ◌̕b; à◌֮◌ۡ◌̕b; a◌֮◌̀◌ۡ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH DOTLESS HEAD OF KHAH, LATIN SMALL LETTER B 0061 06E1 0315 0300 05AE 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062; # (a◌ۡ◌̕◌̀◌֮b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; a◌֮◌ۡ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH DOTLESS HEAD OF KHAH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E2 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062; # (a◌̕◌̀◌֮◌ۢb; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; à◌֮◌ۢ◌̕b; a◌֮◌̀◌ۢ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MEEM ISOLATED FORM, LATIN SMALL LETTER B 0061 06E2 0315 0300 05AE 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062; # (a◌ۢ◌̕◌̀◌֮b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; a◌֮◌ۢ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MEEM ISOLATED FORM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 06E3 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062; # (a◌֚◌̖◌〪◌ۣb; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; a◌〪◌̖◌ۣ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC SMALL LOW SEEN, LATIN SMALL LETTER B 0061 06E3 059A 0316 302A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062; # (a◌ۣ◌֚◌̖◌〪b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; a◌〪◌ۣ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW SEEN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E4 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062; # (a◌̕◌̀◌֮◌ۤb; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; à◌֮◌ۤ◌̕b; a◌֮◌̀◌ۤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH MADDA, LATIN SMALL LETTER B 0061 06E4 0315 0300 05AE 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062; # (a◌ۤ◌̕◌̀◌֮b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; a◌֮◌ۤ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH MADDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E7 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062; # (a◌̕◌̀◌֮◌ۧb; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; à◌֮◌ۧ◌̕b; a◌֮◌̀◌ۧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH YEH, LATIN SMALL LETTER B 0061 06E7 0315 0300 05AE 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062; # (a◌ۧ◌̕◌̀◌֮b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; a◌֮◌ۧ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH YEH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06E8 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062; # (a◌̕◌̀◌֮◌ۨb; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; à◌֮◌ۨ◌̕b; a◌֮◌̀◌ۨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH NOON, LATIN SMALL LETTER B 0061 06E8 0315 0300 05AE 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062; # (a◌ۨ◌̕◌̀◌֮b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; a◌֮◌ۨ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH NOON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 06EA 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062; # (a◌֚◌̖◌〪◌۪b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; a◌〪◌̖◌۪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC EMPTY CENTRE LOW STOP, LATIN SMALL LETTER B 0061 06EA 059A 0316 302A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062; # (a◌۪◌֚◌̖◌〪b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; a◌〪◌۪◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC EMPTY CENTRE LOW STOP, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 06EB 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062; # (a◌̕◌̀◌֮◌۫b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; à◌֮◌۫◌̕b; a◌֮◌̀◌۫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC EMPTY CENTRE HIGH STOP, LATIN SMALL LETTER B 0061 06EB 0315 0300 05AE 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062; # (a◌۫◌̕◌̀◌֮b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; a◌֮◌۫◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC EMPTY CENTRE HIGH STOP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 06EC 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062; # (a◌̕◌̀◌֮◌۬b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; à◌֮◌۬◌̕b; a◌֮◌̀◌۬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, LATIN SMALL LETTER B 0061 06EC 0315 0300 05AE 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062; # (a◌۬◌̕◌̀◌֮b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; a◌֮◌۬◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 06ED 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062; # (a◌֚◌̖◌〪◌ۭb; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; a◌〪◌̖◌ۭ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC SMALL LOW MEEM, LATIN SMALL LETTER B 0061 06ED 059A 0316 302A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062; # (a◌ۭ◌֚◌̖◌〪b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; a◌〪◌ۭ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW MEEM, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0C55 0711 0670 0711 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # (a◌ౕ◌ܑ◌ٰ◌ܑb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL LETTER A, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, SYRIAC LETTER SUPERSCRIPT ALAPH, LATIN SMALL LETTER B 0061 0711 0C55 0711 0670 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; # (a◌ܑ◌ౕ◌ܑ◌ٰb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; a◌ٰ◌ܑ◌ܑ◌ౕb; ) LATIN SMALL LETTER A, SYRIAC LETTER SUPERSCRIPT ALAPH, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, ARABIC LETTER SUPERSCRIPT ALEF, LATIN SMALL LETTER B 0061 0315 0300 05AE 0730 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062; # (a◌̕◌̀◌֮◌ܰb; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; à◌֮◌ܰ◌̕b; a◌֮◌̀◌ܰ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC PTHAHA ABOVE, LATIN SMALL LETTER B 0061 0730 0315 0300 05AE 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062; # (a◌ܰ◌̕◌̀◌֮b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; a◌֮◌ܰ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0731 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062; # (a◌֚◌̖◌〪◌ܱb; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; a◌〪◌̖◌ܱ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC PTHAHA BELOW, LATIN SMALL LETTER B 0061 0731 059A 0316 302A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062; # (a◌ܱ◌֚◌̖◌〪b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; a◌〪◌ܱ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0732 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062; # (a◌̕◌̀◌֮◌ܲb; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; à◌֮◌ܲ◌̕b; a◌֮◌̀◌ܲ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC PTHAHA DOTTED, LATIN SMALL LETTER B 0061 0732 0315 0300 05AE 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062; # (a◌ܲ◌̕◌̀◌֮b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; a◌֮◌ܲ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC PTHAHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0733 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062; # (a◌̕◌̀◌֮◌ܳb; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; à◌֮◌ܳ◌̕b; a◌֮◌̀◌ܳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ZQAPHA ABOVE, LATIN SMALL LETTER B 0061 0733 0315 0300 05AE 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062; # (a◌ܳ◌̕◌̀◌֮b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; a◌֮◌ܳ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0734 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062; # (a◌֚◌̖◌〪◌ܴb; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; a◌〪◌̖◌ܴ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC ZQAPHA BELOW, LATIN SMALL LETTER B 0061 0734 059A 0316 302A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062; # (a◌ܴ◌֚◌̖◌〪b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; a◌〪◌ܴ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0735 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062; # (a◌̕◌̀◌֮◌ܵb; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; à◌֮◌ܵ◌̕b; a◌֮◌̀◌ܵ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ZQAPHA DOTTED, LATIN SMALL LETTER B 0061 0735 0315 0300 05AE 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062; # (a◌ܵ◌̕◌̀◌֮b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; a◌֮◌ܵ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ZQAPHA DOTTED, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0736 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062; # (a◌̕◌̀◌֮◌ܶb; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; à◌֮◌ܶ◌̕b; a◌֮◌̀◌ܶ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC RBASA ABOVE, LATIN SMALL LETTER B 0061 0736 0315 0300 05AE 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062; # (a◌ܶ◌̕◌̀◌֮b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; a◌֮◌ܶ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC RBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0737 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062; # (a◌֚◌̖◌〪◌ܷb; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; a◌〪◌̖◌ܷ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC RBASA BELOW, LATIN SMALL LETTER B 0061 0737 059A 0316 302A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062; # (a◌ܷ◌֚◌̖◌〪b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; a◌〪◌ܷ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC RBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0738 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062; # (a◌֚◌̖◌〪◌ܸb; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; a◌〪◌̖◌ܸ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC DOTTED ZLAMA HORIZONTAL, LATIN SMALL LETTER B 0061 0738 059A 0316 302A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062; # (a◌ܸ◌֚◌̖◌〪b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; a◌〪◌ܸ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC DOTTED ZLAMA HORIZONTAL, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0739 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062; # (a◌֚◌̖◌〪◌ܹb; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; a◌〪◌̖◌ܹ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC DOTTED ZLAMA ANGULAR, LATIN SMALL LETTER B 0061 0739 059A 0316 302A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062; # (a◌ܹ◌֚◌̖◌〪b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; a◌〪◌ܹ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC DOTTED ZLAMA ANGULAR, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 073A 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062; # (a◌̕◌̀◌֮◌ܺb; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; à◌֮◌ܺ◌̕b; a◌֮◌̀◌ܺ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC HBASA ABOVE, LATIN SMALL LETTER B 0061 073A 0315 0300 05AE 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062; # (a◌ܺ◌̕◌̀◌֮b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; a◌֮◌ܺ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC HBASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 073B 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062; # (a◌֚◌̖◌〪◌ܻb; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; a◌〪◌̖◌ܻ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC HBASA BELOW, LATIN SMALL LETTER B 0061 073B 059A 0316 302A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062; # (a◌ܻ◌֚◌̖◌〪b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; a◌〪◌ܻ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC HBASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 073C 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062; # (a◌֚◌̖◌〪◌ܼb; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; a◌〪◌̖◌ܼ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC HBASA-ESASA DOTTED, LATIN SMALL LETTER B 0061 073C 059A 0316 302A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062; # (a◌ܼ◌֚◌̖◌〪b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; a◌〪◌ܼ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC HBASA-ESASA DOTTED, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 073D 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062; # (a◌̕◌̀◌֮◌ܽb; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; à◌֮◌ܽ◌̕b; a◌֮◌̀◌ܽ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC ESASA ABOVE, LATIN SMALL LETTER B 0061 073D 0315 0300 05AE 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062; # (a◌ܽ◌̕◌̀◌֮b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; a◌֮◌ܽ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC ESASA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 073E 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062; # (a◌֚◌̖◌〪◌ܾb; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; a◌〪◌̖◌ܾ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC ESASA BELOW, LATIN SMALL LETTER B 0061 073E 059A 0316 302A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062; # (a◌ܾ◌֚◌̖◌〪b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; a◌〪◌ܾ◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC ESASA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 073F 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062; # (a◌̕◌̀◌֮◌ܿb; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; à◌֮◌ܿ◌̕b; a◌֮◌̀◌ܿ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC RWAHA, LATIN SMALL LETTER B 0061 073F 0315 0300 05AE 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062; # (a◌ܿ◌̕◌̀◌֮b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; a◌֮◌ܿ◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC RWAHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0740 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062; # (a◌̕◌̀◌֮◌݀b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; à◌֮◌݀◌̕b; a◌֮◌̀◌݀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC FEMININE DOT, LATIN SMALL LETTER B 0061 0740 0315 0300 05AE 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062; # (a◌݀◌̕◌̀◌֮b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; a◌֮◌݀◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC FEMININE DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0741 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062; # (a◌̕◌̀◌֮◌݁b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; à◌֮◌݁◌̕b; a◌֮◌̀◌݁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC QUSHSHAYA, LATIN SMALL LETTER B 0061 0741 0315 0300 05AE 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062; # (a◌݁◌̕◌̀◌֮b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; a◌֮◌݁◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC QUSHSHAYA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0742 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062; # (a◌֚◌̖◌〪◌݂b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; a◌〪◌̖◌݂◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC RUKKAKHA, LATIN SMALL LETTER B 0061 0742 059A 0316 302A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062; # (a◌݂◌֚◌̖◌〪b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; a◌〪◌݂◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC RUKKAKHA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062; # (a◌̕◌̀◌֮◌݃b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; à◌֮◌݃◌̕b; a◌֮◌̀◌݃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC TWO VERTICAL DOTS ABOVE, LATIN SMALL LETTER B 0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062; # (a◌݃◌̕◌̀◌֮b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; a◌֮◌݃◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062; # (a◌֚◌̖◌〪◌݄b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; a◌〪◌̖◌݄◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC TWO VERTICAL DOTS BELOW, LATIN SMALL LETTER B 0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062; # (a◌݄◌֚◌̖◌〪b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; a◌〪◌݄◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC TWO VERTICAL DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062; # (a◌̕◌̀◌֮◌݅b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; à◌֮◌݅◌̕b; a◌֮◌̀◌݅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC THREE DOTS ABOVE, LATIN SMALL LETTER B 0061 0745 0315 0300 05AE 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062; # (a◌݅◌̕◌̀◌֮b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; a◌֮◌݅◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC THREE DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0746 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062; # (a◌֚◌̖◌〪◌݆b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; a◌〪◌̖◌݆◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC THREE DOTS BELOW, LATIN SMALL LETTER B 0061 0746 059A 0316 302A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062; # (a◌݆◌֚◌̖◌〪b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; a◌〪◌݆◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0747 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062; # (a◌̕◌̀◌֮◌݇b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; à◌֮◌݇◌̕b; a◌֮◌̀◌݇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC OBLIQUE LINE ABOVE, LATIN SMALL LETTER B 0061 0747 0315 0300 05AE 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062; # (a◌݇◌̕◌̀◌֮b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; a◌֮◌݇◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC OBLIQUE LINE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0748 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062; # (a◌֚◌̖◌〪◌݈b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; a◌〪◌̖◌݈◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, SYRIAC OBLIQUE LINE BELOW, LATIN SMALL LETTER B 0061 0748 059A 0316 302A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062; # (a◌݈◌֚◌̖◌〪b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; a◌〪◌݈◌̖◌֚b; ) LATIN SMALL LETTER A, SYRIAC OBLIQUE LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0749 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062; # (a◌̕◌̀◌֮◌݉b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; à◌֮◌݉◌̕b; a◌֮◌̀◌݉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC MUSIC, LATIN SMALL LETTER B 0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062; # (a◌݉◌̕◌̀◌֮b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; a◌֮◌݉◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC MUSIC, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062; # (a◌̕◌̀◌֮◌݊b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; à◌֮◌݊◌̕b; a◌֮◌̀◌݊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SYRIAC BARREKH, LATIN SMALL LETTER B 0061 074A 0315 0300 05AE 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062; # (a◌݊◌̕◌̀◌֮b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; a◌֮◌݊◌̀◌̕b; ) LATIN SMALL LETTER A, SYRIAC BARREKH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07EB 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062; # (a◌̕◌̀◌֮◌߫b; à◌֮◌߫◌̕b; a◌֮◌̀◌߫◌̕b; à◌֮◌߫◌̕b; a◌֮◌̀◌߫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING SHORT HIGH TONE, LATIN SMALL LETTER B 0061 07EB 0315 0300 05AE 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062; # (a◌߫◌̕◌̀◌֮b; a◌֮◌߫◌̀◌̕b; a◌֮◌߫◌̀◌̕b; a◌֮◌߫◌̀◌̕b; a◌֮◌߫◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING SHORT HIGH TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07EC 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062; # (a◌̕◌̀◌֮◌߬b; à◌֮◌߬◌̕b; a◌֮◌̀◌߬◌̕b; à◌֮◌߬◌̕b; a◌֮◌̀◌߬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING SHORT LOW TONE, LATIN SMALL LETTER B 0061 07EC 0315 0300 05AE 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062; # (a◌߬◌̕◌̀◌֮b; a◌֮◌߬◌̀◌̕b; a◌֮◌߬◌̀◌̕b; a◌֮◌߬◌̀◌̕b; a◌֮◌߬◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING SHORT LOW TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07ED 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062; # (a◌̕◌̀◌֮◌߭b; à◌֮◌߭◌̕b; a◌֮◌̀◌߭◌̕b; à◌֮◌߭◌̕b; a◌֮◌̀◌߭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING SHORT RISING TONE, LATIN SMALL LETTER B 0061 07ED 0315 0300 05AE 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062; # (a◌߭◌̕◌̀◌֮b; a◌֮◌߭◌̀◌̕b; a◌֮◌߭◌̀◌̕b; a◌֮◌߭◌̀◌̕b; a◌֮◌߭◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING SHORT RISING TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07EE 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062; # (a◌̕◌̀◌֮◌߮b; à◌֮◌߮◌̕b; a◌֮◌̀◌߮◌̕b; à◌֮◌߮◌̕b; a◌֮◌̀◌߮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING LONG DESCENDING TONE, LATIN SMALL LETTER B 0061 07EE 0315 0300 05AE 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062; # (a◌߮◌̕◌̀◌֮b; a◌֮◌߮◌̀◌̕b; a◌֮◌߮◌̀◌̕b; a◌֮◌߮◌̀◌̕b; a◌֮◌߮◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING LONG DESCENDING TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07EF 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062; # (a◌̕◌̀◌֮◌߯b; à◌֮◌߯◌̕b; a◌֮◌̀◌߯◌̕b; à◌֮◌߯◌̕b; a◌֮◌̀◌߯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING LONG HIGH TONE, LATIN SMALL LETTER B 0061 07EF 0315 0300 05AE 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062; # (a◌߯◌̕◌̀◌֮b; a◌֮◌߯◌̀◌̕b; a◌֮◌߯◌̀◌̕b; a◌֮◌߯◌̀◌̕b; a◌֮◌߯◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING LONG HIGH TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07F0 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062; # (a◌̕◌̀◌֮◌߰b; à◌֮◌߰◌̕b; a◌֮◌̀◌߰◌̕b; à◌֮◌߰◌̕b; a◌֮◌̀◌߰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING LONG LOW TONE, LATIN SMALL LETTER B 0061 07F0 0315 0300 05AE 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062; # (a◌߰◌̕◌̀◌֮b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; a◌֮◌߰◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING LONG LOW TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 07F1 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062; # (a◌̕◌̀◌֮◌߱b; à◌֮◌߱◌̕b; a◌֮◌̀◌߱◌̕b; à◌֮◌߱◌̕b; a◌֮◌̀◌߱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING LONG RISING TONE, LATIN SMALL LETTER B 0061 07F1 0315 0300 05AE 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062; # (a◌߱◌̕◌̀◌֮b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; a◌֮◌߱◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING LONG RISING TONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 07F2 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062; # (a◌֚◌̖◌〪◌߲b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; a◌〪◌̖◌߲◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, NKO COMBINING NASALIZATION MARK, LATIN SMALL LETTER B 0061 07F2 059A 0316 302A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062; # (a◌߲◌֚◌̖◌〪b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; a◌〪◌߲◌̖◌֚b; ) LATIN SMALL LETTER A, NKO COMBINING NASALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 07F3 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062; # (a◌̕◌̀◌֮◌߳b; à◌֮◌߳◌̕b; a◌֮◌̀◌߳◌̕b; à◌֮◌߳◌̕b; a◌֮◌̀◌߳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, NKO COMBINING DOUBLE DOT ABOVE, LATIN SMALL LETTER B 0061 07F3 0315 0300 05AE 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062; # (a◌߳◌̕◌̀◌֮b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; a◌֮◌߳◌̀◌̕b; ) LATIN SMALL LETTER A, NKO COMBINING DOUBLE DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0816 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 0315 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 0315 0062; # (a◌̕◌̀◌֮◌ࠖb; à◌֮◌ࠖ◌̕b; a◌֮◌̀◌ࠖ◌̕b; à◌֮◌ࠖ◌̕b; a◌֮◌̀◌ࠖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK IN, LATIN SMALL LETTER B 0061 0816 0315 0300 05AE 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062; # (a◌ࠖ◌̕◌̀◌֮b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; a◌֮◌ࠖ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK IN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0817 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 0315 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 0315 0062; # (a◌̕◌̀◌֮◌ࠗb; à◌֮◌ࠗ◌̕b; a◌֮◌̀◌ࠗ◌̕b; à◌֮◌ࠗ◌̕b; a◌֮◌̀◌ࠗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK IN-ALAF, LATIN SMALL LETTER B 0061 0817 0315 0300 05AE 0062;0061 05AE 0817 0300 0315 0062;0061 05AE 0817 0300 0315 0062;0061 05AE 0817 0300 0315 0062;0061 05AE 0817 0300 0315 0062; # (a◌ࠗ◌̕◌̀◌֮b; a◌֮◌ࠗ◌̀◌̕b; a◌֮◌ࠗ◌̀◌̕b; a◌֮◌ࠗ◌̀◌̕b; a◌֮◌ࠗ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK IN-ALAF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0818 0062;00E0 05AE 0818 0315 0062;0061 05AE 0300 0818 0315 0062;00E0 05AE 0818 0315 0062;0061 05AE 0300 0818 0315 0062; # (a◌̕◌̀◌֮◌࠘b; à◌֮◌࠘◌̕b; a◌֮◌̀◌࠘◌̕b; à◌֮◌࠘◌̕b; a◌֮◌̀◌࠘◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK OCCLUSION, LATIN SMALL LETTER B 0061 0818 0315 0300 05AE 0062;0061 05AE 0818 0300 0315 0062;0061 05AE 0818 0300 0315 0062;0061 05AE 0818 0300 0315 0062;0061 05AE 0818 0300 0315 0062; # (a◌࠘◌̕◌̀◌֮b; a◌֮◌࠘◌̀◌̕b; a◌֮◌࠘◌̀◌̕b; a◌֮◌࠘◌̀◌̕b; a◌֮◌࠘◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK OCCLUSION, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0819 0062;00E0 05AE 0819 0315 0062;0061 05AE 0300 0819 0315 0062;00E0 05AE 0819 0315 0062;0061 05AE 0300 0819 0315 0062; # (a◌̕◌̀◌֮◌࠙b; à◌֮◌࠙◌̕b; a◌֮◌̀◌࠙◌̕b; à◌֮◌࠙◌̕b; a◌֮◌̀◌࠙◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK DAGESH, LATIN SMALL LETTER B 0061 0819 0315 0300 05AE 0062;0061 05AE 0819 0300 0315 0062;0061 05AE 0819 0300 0315 0062;0061 05AE 0819 0300 0315 0062;0061 05AE 0819 0300 0315 0062; # (a◌࠙◌̕◌̀◌֮b; a◌֮◌࠙◌̀◌̕b; a◌֮◌࠙◌̀◌̕b; a◌֮◌࠙◌̀◌̕b; a◌֮◌࠙◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK DAGESH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 081B 0062;00E0 05AE 081B 0315 0062;0061 05AE 0300 081B 0315 0062;00E0 05AE 081B 0315 0062;0061 05AE 0300 081B 0315 0062; # (a◌̕◌̀◌֮◌ࠛb; à◌֮◌ࠛ◌̕b; a◌֮◌̀◌ࠛ◌̕b; à◌֮◌ࠛ◌̕b; a◌֮◌̀◌ࠛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK EPENTHETIC YUT, LATIN SMALL LETTER B 0061 081B 0315 0300 05AE 0062;0061 05AE 081B 0300 0315 0062;0061 05AE 081B 0300 0315 0062;0061 05AE 081B 0300 0315 0062;0061 05AE 081B 0300 0315 0062; # (a◌ࠛ◌̕◌̀◌֮b; a◌֮◌ࠛ◌̀◌̕b; a◌֮◌ࠛ◌̀◌̕b; a◌֮◌ࠛ◌̀◌̕b; a◌֮◌ࠛ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK EPENTHETIC YUT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 081C 0062;00E0 05AE 081C 0315 0062;0061 05AE 0300 081C 0315 0062;00E0 05AE 081C 0315 0062;0061 05AE 0300 081C 0315 0062; # (a◌̕◌̀◌֮◌ࠜb; à◌֮◌ࠜ◌̕b; a◌֮◌̀◌ࠜ◌̕b; à◌֮◌ࠜ◌̕b; a◌֮◌̀◌ࠜ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN LONG E, LATIN SMALL LETTER B 0061 081C 0315 0300 05AE 0062;0061 05AE 081C 0300 0315 0062;0061 05AE 081C 0300 0315 0062;0061 05AE 081C 0300 0315 0062;0061 05AE 081C 0300 0315 0062; # (a◌ࠜ◌̕◌̀◌֮b; a◌֮◌ࠜ◌̀◌̕b; a◌֮◌ࠜ◌̀◌̕b; a◌֮◌ࠜ◌̀◌̕b; a◌֮◌ࠜ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN LONG E, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 081D 0062;00E0 05AE 081D 0315 0062;0061 05AE 0300 081D 0315 0062;00E0 05AE 081D 0315 0062;0061 05AE 0300 081D 0315 0062; # (a◌̕◌̀◌֮◌ࠝb; à◌֮◌ࠝ◌̕b; a◌֮◌̀◌ࠝ◌̕b; à◌֮◌ࠝ◌̕b; a◌֮◌̀◌ࠝ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN E, LATIN SMALL LETTER B 0061 081D 0315 0300 05AE 0062;0061 05AE 081D 0300 0315 0062;0061 05AE 081D 0300 0315 0062;0061 05AE 081D 0300 0315 0062;0061 05AE 081D 0300 0315 0062; # (a◌ࠝ◌̕◌̀◌֮b; a◌֮◌ࠝ◌̀◌̕b; a◌֮◌ࠝ◌̀◌̕b; a◌֮◌ࠝ◌̀◌̕b; a◌֮◌ࠝ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN E, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 081E 0062;00E0 05AE 081E 0315 0062;0061 05AE 0300 081E 0315 0062;00E0 05AE 081E 0315 0062;0061 05AE 0300 081E 0315 0062; # (a◌̕◌̀◌֮◌ࠞb; à◌֮◌ࠞ◌̕b; a◌֮◌̀◌ࠞ◌̕b; à◌֮◌ࠞ◌̕b; a◌֮◌̀◌ࠞ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN OVERLONG AA, LATIN SMALL LETTER B 0061 081E 0315 0300 05AE 0062;0061 05AE 081E 0300 0315 0062;0061 05AE 081E 0300 0315 0062;0061 05AE 081E 0300 0315 0062;0061 05AE 081E 0300 0315 0062; # (a◌ࠞ◌̕◌̀◌֮b; a◌֮◌ࠞ◌̀◌̕b; a◌֮◌ࠞ◌̀◌̕b; a◌֮◌ࠞ◌̀◌̕b; a◌֮◌ࠞ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN OVERLONG AA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 081F 0062;00E0 05AE 081F 0315 0062;0061 05AE 0300 081F 0315 0062;00E0 05AE 081F 0315 0062;0061 05AE 0300 081F 0315 0062; # (a◌̕◌̀◌֮◌ࠟb; à◌֮◌ࠟ◌̕b; a◌֮◌̀◌ࠟ◌̕b; à◌֮◌ࠟ◌̕b; a◌֮◌̀◌ࠟ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN LONG AA, LATIN SMALL LETTER B 0061 081F 0315 0300 05AE 0062;0061 05AE 081F 0300 0315 0062;0061 05AE 081F 0300 0315 0062;0061 05AE 081F 0300 0315 0062;0061 05AE 081F 0300 0315 0062; # (a◌ࠟ◌̕◌̀◌֮b; a◌֮◌ࠟ◌̀◌̕b; a◌֮◌ࠟ◌̀◌̕b; a◌֮◌ࠟ◌̀◌̕b; a◌֮◌ࠟ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN LONG AA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0820 0062;00E0 05AE 0820 0315 0062;0061 05AE 0300 0820 0315 0062;00E0 05AE 0820 0315 0062;0061 05AE 0300 0820 0315 0062; # (a◌̕◌̀◌֮◌ࠠb; à◌֮◌ࠠ◌̕b; a◌֮◌̀◌ࠠ◌̕b; à◌֮◌ࠠ◌̕b; a◌֮◌̀◌ࠠ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0820 0315 0300 05AE 0062;0061 05AE 0820 0300 0315 0062;0061 05AE 0820 0300 0315 0062;0061 05AE 0820 0300 0315 0062;0061 05AE 0820 0300 0315 0062; # (a◌ࠠ◌̕◌̀◌֮b; a◌֮◌ࠠ◌̀◌̕b; a◌֮◌ࠠ◌̀◌̕b; a◌֮◌ࠠ◌̀◌̕b; a◌֮◌ࠠ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN AA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0821 0062;00E0 05AE 0821 0315 0062;0061 05AE 0300 0821 0315 0062;00E0 05AE 0821 0315 0062;0061 05AE 0300 0821 0315 0062; # (a◌̕◌̀◌֮◌ࠡb; à◌֮◌ࠡ◌̕b; a◌֮◌̀◌ࠡ◌̕b; à◌֮◌ࠡ◌̕b; a◌֮◌̀◌ࠡ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN OVERLONG A, LATIN SMALL LETTER B 0061 0821 0315 0300 05AE 0062;0061 05AE 0821 0300 0315 0062;0061 05AE 0821 0300 0315 0062;0061 05AE 0821 0300 0315 0062;0061 05AE 0821 0300 0315 0062; # (a◌ࠡ◌̕◌̀◌֮b; a◌֮◌ࠡ◌̀◌̕b; a◌֮◌ࠡ◌̀◌̕b; a◌֮◌ࠡ◌̀◌̕b; a◌֮◌ࠡ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN OVERLONG A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0822 0062;00E0 05AE 0822 0315 0062;0061 05AE 0300 0822 0315 0062;00E0 05AE 0822 0315 0062;0061 05AE 0300 0822 0315 0062; # (a◌̕◌̀◌֮◌ࠢb; à◌֮◌ࠢ◌̕b; a◌֮◌̀◌ࠢ◌̕b; à◌֮◌ࠢ◌̕b; a◌֮◌̀◌ࠢ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN LONG A, LATIN SMALL LETTER B 0061 0822 0315 0300 05AE 0062;0061 05AE 0822 0300 0315 0062;0061 05AE 0822 0300 0315 0062;0061 05AE 0822 0300 0315 0062;0061 05AE 0822 0300 0315 0062; # (a◌ࠢ◌̕◌̀◌֮b; a◌֮◌ࠢ◌̀◌̕b; a◌֮◌ࠢ◌̀◌̕b; a◌֮◌ࠢ◌̀◌̕b; a◌֮◌ࠢ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN LONG A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0823 0062;00E0 05AE 0823 0315 0062;0061 05AE 0300 0823 0315 0062;00E0 05AE 0823 0315 0062;0061 05AE 0300 0823 0315 0062; # (a◌̕◌̀◌֮◌ࠣb; à◌֮◌ࠣ◌̕b; a◌֮◌̀◌ࠣ◌̕b; à◌֮◌ࠣ◌̕b; a◌֮◌̀◌ࠣ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN A, LATIN SMALL LETTER B 0061 0823 0315 0300 05AE 0062;0061 05AE 0823 0300 0315 0062;0061 05AE 0823 0300 0315 0062;0061 05AE 0823 0300 0315 0062;0061 05AE 0823 0300 0315 0062; # (a◌ࠣ◌̕◌̀◌֮b; a◌֮◌ࠣ◌̀◌̕b; a◌֮◌ࠣ◌̀◌̕b; a◌֮◌ࠣ◌̀◌̕b; a◌֮◌ࠣ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0825 0062;00E0 05AE 0825 0315 0062;0061 05AE 0300 0825 0315 0062;00E0 05AE 0825 0315 0062;0061 05AE 0300 0825 0315 0062; # (a◌̕◌̀◌֮◌ࠥb; à◌֮◌ࠥ◌̕b; a◌֮◌̀◌ࠥ◌̕b; à◌֮◌ࠥ◌̕b; a◌֮◌̀◌ࠥ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN SHORT A, LATIN SMALL LETTER B 0061 0825 0315 0300 05AE 0062;0061 05AE 0825 0300 0315 0062;0061 05AE 0825 0300 0315 0062;0061 05AE 0825 0300 0315 0062;0061 05AE 0825 0300 0315 0062; # (a◌ࠥ◌̕◌̀◌֮b; a◌֮◌ࠥ◌̀◌̕b; a◌֮◌ࠥ◌̀◌̕b; a◌֮◌ࠥ◌̀◌̕b; a◌֮◌ࠥ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN SHORT A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0826 0062;00E0 05AE 0826 0315 0062;0061 05AE 0300 0826 0315 0062;00E0 05AE 0826 0315 0062;0061 05AE 0300 0826 0315 0062; # (a◌̕◌̀◌֮◌ࠦb; à◌֮◌ࠦ◌̕b; a◌֮◌̀◌ࠦ◌̕b; à◌֮◌ࠦ◌̕b; a◌֮◌̀◌ࠦ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN LONG U, LATIN SMALL LETTER B 0061 0826 0315 0300 05AE 0062;0061 05AE 0826 0300 0315 0062;0061 05AE 0826 0300 0315 0062;0061 05AE 0826 0300 0315 0062;0061 05AE 0826 0300 0315 0062; # (a◌ࠦ◌̕◌̀◌֮b; a◌֮◌ࠦ◌̀◌̕b; a◌֮◌ࠦ◌̀◌̕b; a◌֮◌ࠦ◌̀◌̕b; a◌֮◌ࠦ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN LONG U, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0827 0062;00E0 05AE 0827 0315 0062;0061 05AE 0300 0827 0315 0062;00E0 05AE 0827 0315 0062;0061 05AE 0300 0827 0315 0062; # (a◌̕◌̀◌֮◌ࠧb; à◌֮◌ࠧ◌̕b; a◌֮◌̀◌ࠧ◌̕b; à◌֮◌ࠧ◌̕b; a◌֮◌̀◌ࠧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 0827 0315 0300 05AE 0062;0061 05AE 0827 0300 0315 0062;0061 05AE 0827 0300 0315 0062;0061 05AE 0827 0300 0315 0062;0061 05AE 0827 0300 0315 0062; # (a◌ࠧ◌̕◌̀◌֮b; a◌֮◌ࠧ◌̀◌̕b; a◌֮◌ࠧ◌̀◌̕b; a◌֮◌ࠧ◌̀◌̕b; a◌֮◌ࠧ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN U, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0829 0062;00E0 05AE 0829 0315 0062;0061 05AE 0300 0829 0315 0062;00E0 05AE 0829 0315 0062;0061 05AE 0300 0829 0315 0062; # (a◌̕◌̀◌֮◌ࠩb; à◌֮◌ࠩ◌̕b; a◌֮◌̀◌ࠩ◌̕b; à◌֮◌ࠩ◌̕b; a◌֮◌̀◌ࠩ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN LONG I, LATIN SMALL LETTER B 0061 0829 0315 0300 05AE 0062;0061 05AE 0829 0300 0315 0062;0061 05AE 0829 0300 0315 0062;0061 05AE 0829 0300 0315 0062;0061 05AE 0829 0300 0315 0062; # (a◌ࠩ◌̕◌̀◌֮b; a◌֮◌ࠩ◌̀◌̕b; a◌֮◌ࠩ◌̀◌̕b; a◌֮◌ࠩ◌̀◌̕b; a◌֮◌ࠩ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN LONG I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 082A 0062;00E0 05AE 082A 0315 0062;0061 05AE 0300 082A 0315 0062;00E0 05AE 082A 0315 0062;0061 05AE 0300 082A 0315 0062; # (a◌̕◌̀◌֮◌ࠪb; à◌֮◌ࠪ◌̕b; a◌֮◌̀◌ࠪ◌̕b; à◌֮◌ࠪ◌̕b; a◌֮◌̀◌ࠪ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN I, LATIN SMALL LETTER B 0061 082A 0315 0300 05AE 0062;0061 05AE 082A 0300 0315 0062;0061 05AE 082A 0300 0315 0062;0061 05AE 082A 0300 0315 0062;0061 05AE 082A 0300 0315 0062; # (a◌ࠪ◌̕◌̀◌֮b; a◌֮◌ࠪ◌̀◌̕b; a◌֮◌ࠪ◌̀◌̕b; a◌֮◌ࠪ◌̀◌̕b; a◌֮◌ࠪ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 082B 0062;00E0 05AE 082B 0315 0062;0061 05AE 0300 082B 0315 0062;00E0 05AE 082B 0315 0062;0061 05AE 0300 082B 0315 0062; # (a◌̕◌̀◌֮◌ࠫb; à◌֮◌ࠫ◌̕b; a◌֮◌̀◌ࠫ◌̕b; à◌֮◌ࠫ◌̕b; a◌֮◌̀◌ࠫ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN O, LATIN SMALL LETTER B 0061 082B 0315 0300 05AE 0062;0061 05AE 082B 0300 0315 0062;0061 05AE 082B 0300 0315 0062;0061 05AE 082B 0300 0315 0062;0061 05AE 082B 0300 0315 0062; # (a◌ࠫ◌̕◌̀◌֮b; a◌֮◌ࠫ◌̀◌̕b; a◌֮◌ࠫ◌̀◌̕b; a◌֮◌ࠫ◌̀◌̕b; a◌֮◌ࠫ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN O, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 082C 0062;00E0 05AE 082C 0315 0062;0061 05AE 0300 082C 0315 0062;00E0 05AE 082C 0315 0062;0061 05AE 0300 082C 0315 0062; # (a◌̕◌̀◌֮◌ࠬb; à◌֮◌ࠬ◌̕b; a◌֮◌̀◌ࠬ◌̕b; à◌֮◌ࠬ◌̕b; a◌֮◌̀◌ࠬ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN VOWEL SIGN SUKUN, LATIN SMALL LETTER B 0061 082C 0315 0300 05AE 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062; # (a◌ࠬ◌̕◌̀◌֮b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; a◌֮◌ࠬ◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN VOWEL SIGN SUKUN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 082D 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 0315 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 0315 0062; # (a◌̕◌̀◌֮◌࠭b; à◌֮◌࠭◌̕b; a◌֮◌̀◌࠭◌̕b; à◌֮◌࠭◌̕b; a◌֮◌̀◌࠭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, SAMARITAN MARK NEQUDAA, LATIN SMALL LETTER B 0061 082D 0315 0300 05AE 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062; # (a◌࠭◌̕◌̀◌֮b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; a◌֮◌࠭◌̀◌̕b; ) LATIN SMALL LETTER A, SAMARITAN MARK NEQUDAA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0859 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062; # (a◌֚◌̖◌〪◌࡙b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; a◌〪◌̖◌࡙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MANDAIC AFFRICATION MARK, LATIN SMALL LETTER B 0061 0859 059A 0316 302A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062; # (a◌࡙◌֚◌̖◌〪b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; a◌〪◌࡙◌̖◌֚b; ) LATIN SMALL LETTER A, MANDAIC AFFRICATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 085A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062; # (a◌֚◌̖◌〪◌࡚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; a◌〪◌̖◌࡚◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MANDAIC VOCALIZATION MARK, LATIN SMALL LETTER B 0061 085A 059A 0316 302A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062; # (a◌࡚◌֚◌̖◌〪b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; a◌〪◌࡚◌̖◌֚b; ) LATIN SMALL LETTER A, MANDAIC VOCALIZATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 085B 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062; # (a◌֚◌̖◌〪◌࡛b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; a◌〪◌̖◌࡛◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MANDAIC GEMINATION MARK, LATIN SMALL LETTER B 0061 085B 059A 0316 302A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062; # (a◌࡛◌֚◌̖◌〪b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; a◌〪◌࡛◌̖◌֚b; ) LATIN SMALL LETTER A, MANDAIC GEMINATION MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D4 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 0315 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 0315 0062; # (a◌̕◌̀◌֮◌ࣔb; à◌֮◌ࣔ◌̕b; a◌֮◌̀◌ࣔ◌̕b; à◌֮◌ࣔ◌̕b; a◌֮◌̀◌ࣔ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD AR-RUB, LATIN SMALL LETTER B 0061 08D4 0315 0300 05AE 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062; # (a◌ࣔ◌̕◌̀◌֮b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; a◌֮◌ࣔ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD AR-RUB, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D5 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 0315 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 0315 0062; # (a◌̕◌̀◌֮◌ࣕb; à◌֮◌ࣕ◌̕b; a◌֮◌̀◌ࣕ◌̕b; à◌֮◌ࣕ◌̕b; a◌֮◌̀◌ࣕ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH SAD, LATIN SMALL LETTER B 0061 08D5 0315 0300 05AE 0062;0061 05AE 08D5 0300 0315 0062;0061 05AE 08D5 0300 0315 0062;0061 05AE 08D5 0300 0315 0062;0061 05AE 08D5 0300 0315 0062; # (a◌ࣕ◌̕◌̀◌֮b; a◌֮◌ࣕ◌̀◌̕b; a◌֮◌ࣕ◌̀◌̕b; a◌֮◌ࣕ◌̀◌̕b; a◌֮◌ࣕ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH SAD, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D6 0062;00E0 05AE 08D6 0315 0062;0061 05AE 0300 08D6 0315 0062;00E0 05AE 08D6 0315 0062;0061 05AE 0300 08D6 0315 0062; # (a◌̕◌̀◌֮◌ࣖb; à◌֮◌ࣖ◌̕b; a◌֮◌̀◌ࣖ◌̕b; à◌֮◌ࣖ◌̕b; a◌֮◌̀◌ࣖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH AIN, LATIN SMALL LETTER B 0061 08D6 0315 0300 05AE 0062;0061 05AE 08D6 0300 0315 0062;0061 05AE 08D6 0300 0315 0062;0061 05AE 08D6 0300 0315 0062;0061 05AE 08D6 0300 0315 0062; # (a◌ࣖ◌̕◌̀◌֮b; a◌֮◌ࣖ◌̀◌̕b; a◌֮◌ࣖ◌̀◌̕b; a◌֮◌ࣖ◌̀◌̕b; a◌֮◌ࣖ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH AIN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D7 0062;00E0 05AE 08D7 0315 0062;0061 05AE 0300 08D7 0315 0062;00E0 05AE 08D7 0315 0062;0061 05AE 0300 08D7 0315 0062; # (a◌̕◌̀◌֮◌ࣗb; à◌֮◌ࣗ◌̕b; a◌֮◌̀◌ࣗ◌̕b; à◌֮◌ࣗ◌̕b; a◌֮◌̀◌ࣗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH QAF, LATIN SMALL LETTER B 0061 08D7 0315 0300 05AE 0062;0061 05AE 08D7 0300 0315 0062;0061 05AE 08D7 0300 0315 0062;0061 05AE 08D7 0300 0315 0062;0061 05AE 08D7 0300 0315 0062; # (a◌ࣗ◌̕◌̀◌֮b; a◌֮◌ࣗ◌̀◌̕b; a◌֮◌ࣗ◌̀◌̕b; a◌֮◌ࣗ◌̀◌̕b; a◌֮◌ࣗ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH QAF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D8 0062;00E0 05AE 08D8 0315 0062;0061 05AE 0300 08D8 0315 0062;00E0 05AE 08D8 0315 0062;0061 05AE 0300 08D8 0315 0062; # (a◌̕◌̀◌֮◌ࣘb; à◌֮◌ࣘ◌̕b; a◌֮◌̀◌ࣘ◌̕b; à◌֮◌ࣘ◌̕b; a◌֮◌̀◌ࣘ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH NOON WITH KASRA, LATIN SMALL LETTER B 0061 08D8 0315 0300 05AE 0062;0061 05AE 08D8 0300 0315 0062;0061 05AE 08D8 0300 0315 0062;0061 05AE 08D8 0300 0315 0062;0061 05AE 08D8 0300 0315 0062; # (a◌ࣘ◌̕◌̀◌֮b; a◌֮◌ࣘ◌̀◌̕b; a◌֮◌ࣘ◌̀◌̕b; a◌֮◌ࣘ◌̀◌̕b; a◌֮◌ࣘ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH NOON WITH KASRA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08D9 0062;00E0 05AE 08D9 0315 0062;0061 05AE 0300 08D9 0315 0062;00E0 05AE 08D9 0315 0062;0061 05AE 0300 08D9 0315 0062; # (a◌̕◌̀◌֮◌ࣙb; à◌֮◌ࣙ◌̕b; a◌֮◌̀◌ࣙ◌̕b; à◌֮◌ࣙ◌̕b; a◌֮◌̀◌ࣙ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL LOW NOON WITH KASRA, LATIN SMALL LETTER B 0061 08D9 0315 0300 05AE 0062;0061 05AE 08D9 0300 0315 0062;0061 05AE 08D9 0300 0315 0062;0061 05AE 08D9 0300 0315 0062;0061 05AE 08D9 0300 0315 0062; # (a◌ࣙ◌̕◌̀◌֮b; a◌֮◌ࣙ◌̀◌̕b; a◌֮◌ࣙ◌̀◌̕b; a◌֮◌ࣙ◌̀◌̕b; a◌֮◌ࣙ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL LOW NOON WITH KASRA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DA 0062;00E0 05AE 08DA 0315 0062;0061 05AE 0300 08DA 0315 0062;00E0 05AE 08DA 0315 0062;0061 05AE 0300 08DA 0315 0062; # (a◌̕◌̀◌֮◌ࣚb; à◌֮◌ࣚ◌̕b; a◌֮◌̀◌ࣚ◌̕b; à◌֮◌ࣚ◌̕b; a◌֮◌̀◌ࣚ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD ATH-THALATHA, LATIN SMALL LETTER B 0061 08DA 0315 0300 05AE 0062;0061 05AE 08DA 0300 0315 0062;0061 05AE 08DA 0300 0315 0062;0061 05AE 08DA 0300 0315 0062;0061 05AE 08DA 0300 0315 0062; # (a◌ࣚ◌̕◌̀◌֮b; a◌֮◌ࣚ◌̀◌̕b; a◌֮◌ࣚ◌̀◌̕b; a◌֮◌ࣚ◌̀◌̕b; a◌֮◌ࣚ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD ATH-THALATHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DB 0062;00E0 05AE 08DB 0315 0062;0061 05AE 0300 08DB 0315 0062;00E0 05AE 08DB 0315 0062;0061 05AE 0300 08DB 0315 0062; # (a◌̕◌̀◌֮◌ࣛb; à◌֮◌ࣛ◌̕b; a◌֮◌̀◌ࣛ◌̕b; à◌֮◌ࣛ◌̕b; a◌֮◌̀◌ࣛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD AS-SAJDA, LATIN SMALL LETTER B 0061 08DB 0315 0300 05AE 0062;0061 05AE 08DB 0300 0315 0062;0061 05AE 08DB 0300 0315 0062;0061 05AE 08DB 0300 0315 0062;0061 05AE 08DB 0300 0315 0062; # (a◌ࣛ◌̕◌̀◌֮b; a◌֮◌ࣛ◌̀◌̕b; a◌֮◌ࣛ◌̀◌̕b; a◌֮◌ࣛ◌̀◌̕b; a◌֮◌ࣛ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD AS-SAJDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DC 0062;00E0 05AE 08DC 0315 0062;0061 05AE 0300 08DC 0315 0062;00E0 05AE 08DC 0315 0062;0061 05AE 0300 08DC 0315 0062; # (a◌̕◌̀◌֮◌ࣜb; à◌֮◌ࣜ◌̕b; a◌֮◌̀◌ࣜ◌̕b; à◌֮◌ࣜ◌̕b; a◌֮◌̀◌ࣜ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD AN-NISF, LATIN SMALL LETTER B 0061 08DC 0315 0300 05AE 0062;0061 05AE 08DC 0300 0315 0062;0061 05AE 08DC 0300 0315 0062;0061 05AE 08DC 0300 0315 0062;0061 05AE 08DC 0300 0315 0062; # (a◌ࣜ◌̕◌̀◌֮b; a◌֮◌ࣜ◌̀◌̕b; a◌֮◌ࣜ◌̀◌̕b; a◌֮◌ࣜ◌̀◌̕b; a◌֮◌ࣜ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD AN-NISF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DD 0062;00E0 05AE 08DD 0315 0062;0061 05AE 0300 08DD 0315 0062;00E0 05AE 08DD 0315 0062;0061 05AE 0300 08DD 0315 0062; # (a◌̕◌̀◌֮◌ࣝb; à◌֮◌ࣝ◌̕b; a◌֮◌̀◌ࣝ◌̕b; à◌֮◌ࣝ◌̕b; a◌֮◌̀◌ࣝ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD SAKTA, LATIN SMALL LETTER B 0061 08DD 0315 0300 05AE 0062;0061 05AE 08DD 0300 0315 0062;0061 05AE 08DD 0300 0315 0062;0061 05AE 08DD 0300 0315 0062;0061 05AE 08DD 0300 0315 0062; # (a◌ࣝ◌̕◌̀◌֮b; a◌֮◌ࣝ◌̀◌̕b; a◌֮◌ࣝ◌̀◌̕b; a◌֮◌ࣝ◌̀◌̕b; a◌֮◌ࣝ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD SAKTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DE 0062;00E0 05AE 08DE 0315 0062;0061 05AE 0300 08DE 0315 0062;00E0 05AE 08DE 0315 0062;0061 05AE 0300 08DE 0315 0062; # (a◌̕◌̀◌֮◌ࣞb; à◌֮◌ࣞ◌̕b; a◌֮◌̀◌ࣞ◌̕b; à◌֮◌ࣞ◌̕b; a◌֮◌̀◌ࣞ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD QIF, LATIN SMALL LETTER B 0061 08DE 0315 0300 05AE 0062;0061 05AE 08DE 0300 0315 0062;0061 05AE 08DE 0300 0315 0062;0061 05AE 08DE 0300 0315 0062;0061 05AE 08DE 0300 0315 0062; # (a◌ࣞ◌̕◌̀◌֮b; a◌֮◌ࣞ◌̀◌̕b; a◌֮◌ࣞ◌̀◌̕b; a◌֮◌ࣞ◌̀◌̕b; a◌֮◌ࣞ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD QIF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08DF 0062;00E0 05AE 08DF 0315 0062;0061 05AE 0300 08DF 0315 0062;00E0 05AE 08DF 0315 0062;0061 05AE 0300 08DF 0315 0062; # (a◌̕◌̀◌֮◌ࣟb; à◌֮◌ࣟ◌̕b; a◌֮◌̀◌ࣟ◌̕b; à◌֮◌ࣟ◌̕b; a◌֮◌̀◌ࣟ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WORD WAQFA, LATIN SMALL LETTER B 0061 08DF 0315 0300 05AE 0062;0061 05AE 08DF 0300 0315 0062;0061 05AE 08DF 0300 0315 0062;0061 05AE 08DF 0300 0315 0062;0061 05AE 08DF 0300 0315 0062; # (a◌ࣟ◌̕◌̀◌֮b; a◌֮◌ࣟ◌̀◌̕b; a◌֮◌ࣟ◌̀◌̕b; a◌֮◌ࣟ◌̀◌̕b; a◌֮◌ࣟ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WORD WAQFA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E0 0062;00E0 05AE 08E0 0315 0062;0061 05AE 0300 08E0 0315 0062;00E0 05AE 08E0 0315 0062;0061 05AE 0300 08E0 0315 0062; # (a◌̕◌̀◌֮◌࣠b; à◌֮◌࣠◌̕b; a◌֮◌̀◌࣠◌̕b; à◌֮◌࣠◌̕b; a◌֮◌̀◌࣠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH FOOTNOTE MARKER, LATIN SMALL LETTER B 0061 08E0 0315 0300 05AE 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062; # (a◌࣠◌̕◌̀◌֮b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; a◌֮◌࣠◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH FOOTNOTE MARKER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E1 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 0315 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 0315 0062; # (a◌̕◌̀◌֮◌࣡b; à◌֮◌࣡◌̕b; a◌֮◌̀◌࣡◌̕b; à◌֮◌࣡◌̕b; a◌֮◌̀◌࣡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH SIGN SAFHA, LATIN SMALL LETTER B 0061 08E1 0315 0300 05AE 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062; # (a◌࣡◌̕◌̀◌֮b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; a◌֮◌࣡◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH SIGN SAFHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08E3 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062; # (a◌֚◌̖◌〪◌ࣣb; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; a◌〪◌̖◌ࣣ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC TURNED DAMMA BELOW, LATIN SMALL LETTER B 0061 08E3 059A 0316 302A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062; # (a◌ࣣ◌֚◌̖◌〪b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; a◌〪◌ࣣ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC TURNED DAMMA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E4 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 0315 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 0315 0062; # (a◌̕◌̀◌֮◌ࣤb; à◌֮◌ࣤ◌̕b; a◌֮◌̀◌ࣤ◌̕b; à◌֮◌ࣤ◌̕b; a◌֮◌̀◌ࣤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC CURLY FATHA, LATIN SMALL LETTER B 0061 08E4 0315 0300 05AE 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062; # (a◌ࣤ◌̕◌̀◌֮b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; a◌֮◌ࣤ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC CURLY FATHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E5 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 0315 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 0315 0062; # (a◌̕◌̀◌֮◌ࣥb; à◌֮◌ࣥ◌̕b; a◌֮◌̀◌ࣥ◌̕b; à◌֮◌ࣥ◌̕b; a◌֮◌̀◌ࣥ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC CURLY DAMMA, LATIN SMALL LETTER B 0061 08E5 0315 0300 05AE 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062; # (a◌ࣥ◌̕◌̀◌֮b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; a◌֮◌ࣥ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC CURLY DAMMA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08E6 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062; # (a◌֚◌̖◌〪◌ࣦb; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; a◌〪◌̖◌ࣦ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC CURLY KASRA, LATIN SMALL LETTER B 0061 08E6 059A 0316 302A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062; # (a◌ࣦ◌֚◌̖◌〪b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; a◌〪◌ࣦ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC CURLY KASRA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E7 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 0315 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 0315 0062; # (a◌̕◌̀◌֮◌ࣧb; à◌֮◌ࣧ◌̕b; a◌֮◌̀◌ࣧ◌̕b; à◌֮◌ࣧ◌̕b; a◌֮◌̀◌ࣧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC CURLY FATHATAN, LATIN SMALL LETTER B 0061 08E7 0315 0300 05AE 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062; # (a◌ࣧ◌̕◌̀◌֮b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; a◌֮◌ࣧ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC CURLY FATHATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08E8 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 0315 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 0315 0062; # (a◌̕◌̀◌֮◌ࣨb; à◌֮◌ࣨ◌̕b; a◌֮◌̀◌ࣨ◌̕b; à◌֮◌ࣨ◌̕b; a◌֮◌̀◌ࣨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC CURLY DAMMATAN, LATIN SMALL LETTER B 0061 08E8 0315 0300 05AE 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062; # (a◌ࣨ◌̕◌̀◌֮b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; a◌֮◌ࣨ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC CURLY DAMMATAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08E9 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062; # (a◌֚◌̖◌〪◌ࣩb; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; a◌〪◌̖◌ࣩ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC CURLY KASRATAN, LATIN SMALL LETTER B 0061 08E9 059A 0316 302A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062; # (a◌ࣩ◌֚◌̖◌〪b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; a◌〪◌ࣩ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC CURLY KASRATAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08EA 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 0315 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 0315 0062; # (a◌̕◌̀◌֮◌࣪b; à◌֮◌࣪◌̕b; a◌֮◌̀◌࣪◌̕b; à◌֮◌࣪◌̕b; a◌֮◌̀◌࣪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC TONE ONE DOT ABOVE, LATIN SMALL LETTER B 0061 08EA 0315 0300 05AE 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062; # (a◌࣪◌̕◌̀◌֮b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; a◌֮◌࣪◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC TONE ONE DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08EB 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 0315 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 0315 0062; # (a◌̕◌̀◌֮◌࣫b; à◌֮◌࣫◌̕b; a◌֮◌̀◌࣫◌̕b; à◌֮◌࣫◌̕b; a◌֮◌̀◌࣫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC TONE TWO DOTS ABOVE, LATIN SMALL LETTER B 0061 08EB 0315 0300 05AE 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062; # (a◌࣫◌̕◌̀◌֮b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; a◌֮◌࣫◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC TONE TWO DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08EC 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 0315 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 0315 0062; # (a◌̕◌̀◌֮◌࣬b; à◌֮◌࣬◌̕b; a◌֮◌̀◌࣬◌̕b; à◌֮◌࣬◌̕b; a◌֮◌̀◌࣬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC TONE LOOP ABOVE, LATIN SMALL LETTER B 0061 08EC 0315 0300 05AE 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062; # (a◌࣬◌̕◌̀◌֮b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; a◌֮◌࣬◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC TONE LOOP ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08ED 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062; # (a◌֚◌̖◌〪◌࣭b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; a◌〪◌̖◌࣭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC TONE ONE DOT BELOW, LATIN SMALL LETTER B 0061 08ED 059A 0316 302A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062; # (a◌࣭◌֚◌̖◌〪b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; a◌〪◌࣭◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC TONE ONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 08EE 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062; # (a◌֚◌̖◌〪◌࣮b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; a◌〪◌̖◌࣮◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B 0061 08EE 059A 0316 302A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062; # (a◌࣮◌֚◌̖◌〪b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; a◌〪◌࣮◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 08EF 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062; # (a◌֚◌̖◌〪◌࣯b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; a◌〪◌̖◌࣯◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC TONE LOOP BELOW, LATIN SMALL LETTER B 0061 08EF 059A 0316 302A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062; # (a◌࣯◌֚◌̖◌〪b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; a◌〪◌࣯◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC TONE LOOP BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 064C 064B FB1E 08F0 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062; # (a◌ٌ◌ً◌ﬞ◌ࣰb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; a◌ﬞ◌ً◌ࣰ◌ٌb; ) LATIN SMALL LETTER A, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, ARABIC OPEN FATHATAN, LATIN SMALL LETTER B 0061 08F0 064C 064B FB1E 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062; # (a◌ࣰ◌ٌ◌ً◌ﬞb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; a◌ﬞ◌ࣰ◌ً◌ٌb; ) LATIN SMALL LETTER A, ARABIC OPEN FATHATAN, ARABIC DAMMATAN, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B 0061 064D 064C 064B 08F1 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062; # (a◌ٍ◌ٌ◌ً◌ࣱb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; a◌ً◌ٌ◌ࣱ◌ٍb; ) LATIN SMALL LETTER A, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, ARABIC OPEN DAMMATAN, LATIN SMALL LETTER B 0061 08F1 064D 064C 064B 0062;0061 064B 08F1 064C 064D 0062;0061 064B 08F1 064C 064D 0062;0061 064B 08F1 064C 064D 0062;0061 064B 08F1 064C 064D 0062; # (a◌ࣱ◌ٍ◌ٌ◌ًb; a◌ً◌ࣱ◌ٌ◌ٍb; a◌ً◌ࣱ◌ٌ◌ٍb; a◌ً◌ࣱ◌ٌ◌ٍb; a◌ً◌ࣱ◌ٌ◌ٍb; ) LATIN SMALL LETTER A, ARABIC OPEN DAMMATAN, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC FATHATAN, LATIN SMALL LETTER B 0061 0618 064D 064C 08F2 0062;0061 064C 064D 08F2 0618 0062;0061 064C 064D 08F2 0618 0062;0061 064C 064D 08F2 0618 0062;0061 064C 064D 08F2 0618 0062; # (a◌ؘ◌ٍ◌ٌ◌ࣲb; a◌ٌ◌ٍ◌ࣲ◌ؘb; a◌ٌ◌ٍ◌ࣲ◌ؘb; a◌ٌ◌ٍ◌ࣲ◌ؘb; a◌ٌ◌ٍ◌ࣲ◌ؘb; ) LATIN SMALL LETTER A, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, ARABIC OPEN KASRATAN, LATIN SMALL LETTER B 0061 08F2 0618 064D 064C 0062;0061 064C 08F2 064D 0618 0062;0061 064C 08F2 064D 0618 0062;0061 064C 08F2 064D 0618 0062;0061 064C 08F2 064D 0618 0062; # (a◌ࣲ◌ؘ◌ٍ◌ٌb; a◌ٌ◌ࣲ◌ٍ◌ؘb; a◌ٌ◌ࣲ◌ٍ◌ؘb; a◌ٌ◌ࣲ◌ٍ◌ؘb; a◌ٌ◌ࣲ◌ٍ◌ؘb; ) LATIN SMALL LETTER A, ARABIC OPEN KASRATAN, ARABIC SMALL FATHA, ARABIC KASRATAN, ARABIC DAMMATAN, LATIN SMALL LETTER B 0061 0315 0300 05AE 08F3 0062;00E0 05AE 08F3 0315 0062;0061 05AE 0300 08F3 0315 0062;00E0 05AE 08F3 0315 0062;0061 05AE 0300 08F3 0315 0062; # (a◌̕◌̀◌֮◌ࣳb; à◌֮◌ࣳ◌̕b; a◌֮◌̀◌ࣳ◌̕b; à◌֮◌ࣳ◌̕b; a◌֮◌̀◌ࣳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC SMALL HIGH WAW, LATIN SMALL LETTER B 0061 08F3 0315 0300 05AE 0062;0061 05AE 08F3 0300 0315 0062;0061 05AE 08F3 0300 0315 0062;0061 05AE 08F3 0300 0315 0062;0061 05AE 08F3 0300 0315 0062; # (a◌ࣳ◌̕◌̀◌֮b; a◌֮◌ࣳ◌̀◌̕b; a◌֮◌ࣳ◌̀◌̕b; a◌֮◌ࣳ◌̀◌̕b; a◌֮◌ࣳ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC SMALL HIGH WAW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08F4 0062;00E0 05AE 08F4 0315 0062;0061 05AE 0300 08F4 0315 0062;00E0 05AE 08F4 0315 0062;0061 05AE 0300 08F4 0315 0062; # (a◌̕◌̀◌֮◌ࣴb; à◌֮◌ࣴ◌̕b; a◌֮◌̀◌ࣴ◌̕b; à◌֮◌ࣴ◌̕b; a◌֮◌̀◌ࣴ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC FATHA WITH RING, LATIN SMALL LETTER B 0061 08F4 0315 0300 05AE 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062; # (a◌ࣴ◌̕◌̀◌֮b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; a◌֮◌ࣴ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC FATHA WITH RING, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08F5 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 0315 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 0315 0062; # (a◌̕◌̀◌֮◌ࣵb; à◌֮◌ࣵ◌̕b; a◌֮◌̀◌ࣵ◌̕b; à◌֮◌ࣵ◌̕b; a◌֮◌̀◌ࣵ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC FATHA WITH DOT ABOVE, LATIN SMALL LETTER B 0061 08F5 0315 0300 05AE 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062; # (a◌ࣵ◌̕◌̀◌֮b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; a◌֮◌ࣵ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC FATHA WITH DOT ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08F6 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062; # (a◌֚◌̖◌〪◌ࣶb; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; a◌〪◌̖◌ࣶ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC KASRA WITH DOT BELOW, LATIN SMALL LETTER B 0061 08F6 059A 0316 302A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062; # (a◌ࣶ◌֚◌̖◌〪b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; a◌〪◌ࣶ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC KASRA WITH DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08F7 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 0315 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 0315 0062; # (a◌̕◌̀◌֮◌ࣷb; à◌֮◌ࣷ◌̕b; a◌֮◌̀◌ࣷ◌̕b; à◌֮◌ࣷ◌̕b; a◌֮◌̀◌ࣷ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC LEFT ARROWHEAD ABOVE, LATIN SMALL LETTER B 0061 08F7 0315 0300 05AE 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062; # (a◌ࣷ◌̕◌̀◌֮b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; a◌֮◌ࣷ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC LEFT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08F8 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 0315 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 0315 0062; # (a◌̕◌̀◌֮◌ࣸb; à◌֮◌ࣸ◌̕b; a◌֮◌̀◌ࣸ◌̕b; à◌֮◌ࣸ◌̕b; a◌֮◌̀◌ࣸ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B 0061 08F8 0315 0300 05AE 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062; # (a◌ࣸ◌̕◌̀◌֮b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; a◌֮◌ࣸ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 08F9 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062; # (a◌֚◌̖◌〪◌ࣹb; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; a◌〪◌̖◌ࣹ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC LEFT ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 08F9 059A 0316 302A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062; # (a◌ࣹ◌֚◌̖◌〪b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; a◌〪◌ࣹ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC LEFT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 08FA 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062; # (a◌֚◌̖◌〪◌ࣺb; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; a◌〪◌̖◌ࣺ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, ARABIC RIGHT ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 08FA 059A 0316 302A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062; # (a◌ࣺ◌֚◌̖◌〪b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; a◌〪◌ࣺ◌̖◌֚b; ) LATIN SMALL LETTER A, ARABIC RIGHT ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 08FB 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 0315 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 0315 0062; # (a◌̕◌̀◌֮◌ࣻb; à◌֮◌ࣻ◌̕b; a◌֮◌̀◌ࣻ◌̕b; à◌֮◌ࣻ◌̕b; a◌֮◌̀◌ࣻ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC DOUBLE RIGHT ARROWHEAD ABOVE, LATIN SMALL LETTER B 0061 08FB 0315 0300 05AE 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062; # (a◌ࣻ◌̕◌̀◌֮b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; a◌֮◌ࣻ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC DOUBLE RIGHT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08FC 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 0315 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 0315 0062; # (a◌̕◌̀◌֮◌ࣼb; à◌֮◌ࣼ◌̕b; a◌֮◌̀◌ࣼ◌̕b; à◌֮◌ࣼ◌̕b; a◌֮◌̀◌ࣼ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT, LATIN SMALL LETTER B 0061 08FC 0315 0300 05AE 0062;0061 05AE 08FC 0300 0315 0062;0061 05AE 08FC 0300 0315 0062;0061 05AE 08FC 0300 0315 0062;0061 05AE 08FC 0300 0315 0062; # (a◌ࣼ◌̕◌̀◌֮b; a◌֮◌ࣼ◌̀◌̕b; a◌֮◌ࣼ◌̀◌̕b; a◌֮◌ࣼ◌̀◌̕b; a◌֮◌ࣼ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08FD 0062;00E0 05AE 08FD 0315 0062;0061 05AE 0300 08FD 0315 0062;00E0 05AE 08FD 0315 0062;0061 05AE 0300 08FD 0315 0062; # (a◌̕◌̀◌֮◌ࣽb; à◌֮◌ࣽ◌̕b; a◌֮◌̀◌ࣽ◌̕b; à◌֮◌ࣽ◌̕b; a◌֮◌̀◌ࣽ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC RIGHT ARROWHEAD ABOVE WITH DOT, LATIN SMALL LETTER B 0061 08FD 0315 0300 05AE 0062;0061 05AE 08FD 0300 0315 0062;0061 05AE 08FD 0300 0315 0062;0061 05AE 08FD 0300 0315 0062;0061 05AE 08FD 0300 0315 0062; # (a◌ࣽ◌̕◌̀◌֮b; a◌֮◌ࣽ◌̀◌̕b; a◌֮◌ࣽ◌̀◌̕b; a◌֮◌ࣽ◌̀◌̕b; a◌֮◌ࣽ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC RIGHT ARROWHEAD ABOVE WITH DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08FE 0062;00E0 05AE 08FE 0315 0062;0061 05AE 0300 08FE 0315 0062;00E0 05AE 08FE 0315 0062;0061 05AE 0300 08FE 0315 0062; # (a◌̕◌̀◌֮◌ࣾb; à◌֮◌ࣾ◌̕b; a◌֮◌̀◌ࣾ◌̕b; à◌֮◌ࣾ◌̕b; a◌֮◌̀◌ࣾ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC DAMMA WITH DOT, LATIN SMALL LETTER B 0061 08FE 0315 0300 05AE 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062; # (a◌ࣾ◌̕◌̀◌֮b; a◌֮◌ࣾ◌̀◌̕b; a◌֮◌ࣾ◌̀◌̕b; a◌֮◌ࣾ◌̀◌̕b; a◌֮◌ࣾ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC DAMMA WITH DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 08FF 0062;00E0 05AE 08FF 0315 0062;0061 05AE 0300 08FF 0315 0062;00E0 05AE 08FF 0315 0062;0061 05AE 0300 08FF 0315 0062; # (a◌̕◌̀◌֮◌ࣿb; à◌֮◌ࣿ◌̕b; a◌֮◌̀◌ࣿ◌̕b; à◌֮◌ࣿ◌̕b; a◌֮◌̀◌ࣿ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ARABIC MARK SIDEWAYS NOON GHUNNA, LATIN SMALL LETTER B 0061 08FF 0315 0300 05AE 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062; # (a◌ࣿ◌̕◌̀◌֮b; a◌֮◌ࣿ◌̀◌̕b; a◌֮◌ࣿ◌̀◌̕b; a◌֮◌ࣿ◌̀◌̕b; a◌֮◌ࣿ◌̀◌̕b; ) LATIN SMALL LETTER A, ARABIC MARK SIDEWAYS NOON GHUNNA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 3099 093C 0334 093C 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; # (a◌゙◌़◌̴◌़b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B 0061 093C 3099 093C 0334 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; # (a◌़◌゙◌़◌̴b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; a◌̴◌़◌़◌゙b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 094D 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; # (a◌ְ◌्◌゙◌्b; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, LATIN SMALL LETTER B 0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; # (a◌्◌ְ◌्◌゙b; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; a◌゙◌्◌्◌ְb; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062; # (a◌̕◌̀◌֮◌॑b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; à◌֮◌॑◌̕b; a◌֮◌̀◌॑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI STRESS SIGN UDATTA, LATIN SMALL LETTER B 0061 0951 0315 0300 05AE 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062; # (a◌॑◌̕◌̀◌֮b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; a◌֮◌॑◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI STRESS SIGN UDATTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0952 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062; # (a◌֚◌̖◌〪◌॒b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; a◌〪◌̖◌॒◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, DEVANAGARI STRESS SIGN ANUDATTA, LATIN SMALL LETTER B 0061 0952 059A 0316 302A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062; # (a◌॒◌֚◌̖◌〪b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; a◌〪◌॒◌̖◌֚b; ) LATIN SMALL LETTER A, DEVANAGARI STRESS SIGN ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0953 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062; # (a◌̕◌̀◌֮◌॓b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; à◌֮◌॓◌̕b; a◌֮◌̀◌॓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI GRAVE ACCENT, LATIN SMALL LETTER B 0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062; # (a◌॓◌̕◌̀◌֮b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; a◌֮◌॓◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062; # (a◌̕◌̀◌֮◌॔b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; à◌֮◌॔◌̕b; a◌֮◌̀◌॔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, DEVANAGARI ACUTE ACCENT, LATIN SMALL LETTER B 0061 0954 0315 0300 05AE 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062; # (a◌॔◌̕◌̀◌֮b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; a◌֮◌॔◌̀◌̕b; ) LATIN SMALL LETTER A, DEVANAGARI ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 3099 093C 0334 09BC 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062; # (a◌゙◌़◌̴◌়b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; a◌̴◌़◌়◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BENGALI SIGN NUKTA, LATIN SMALL LETTER B 0061 09BC 3099 093C 0334 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062; # (a◌়◌゙◌़◌̴b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; a◌̴◌়◌़◌゙b; ) LATIN SMALL LETTER A, BENGALI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 09CD 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062; # (a◌ְ◌्◌゙◌্b; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; a◌゙◌्◌্◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BENGALI SIGN VIRAMA, LATIN SMALL LETTER B 0061 09CD 05B0 094D 3099 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062; # (a◌্◌ְ◌्◌゙b; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; a◌゙◌্◌्◌ְb; ) LATIN SMALL LETTER A, BENGALI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 0A3C 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062; # (a◌゙◌़◌̴◌਼b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; a◌̴◌़◌਼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, GURMUKHI SIGN NUKTA, LATIN SMALL LETTER B 0061 0A3C 3099 093C 0334 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062; # (a◌਼◌゙◌़◌̴b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; a◌̴◌਼◌़◌゙b; ) LATIN SMALL LETTER A, GURMUKHI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 0A4D 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062; # (a◌ְ◌्◌゙◌੍b; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; a◌゙◌्◌੍◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GURMUKHI SIGN VIRAMA, LATIN SMALL LETTER B 0061 0A4D 05B0 094D 3099 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062; # (a◌੍◌ְ◌्◌゙b; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; a◌゙◌੍◌्◌ְb; ) LATIN SMALL LETTER A, GURMUKHI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 0ABC 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062; # (a◌゙◌़◌̴◌઼b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; a◌̴◌़◌઼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, GUJARATI SIGN NUKTA, LATIN SMALL LETTER B 0061 0ABC 3099 093C 0334 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062; # (a◌઼◌゙◌़◌̴b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; a◌̴◌઼◌़◌゙b; ) LATIN SMALL LETTER A, GUJARATI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 0ACD 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062; # (a◌ְ◌्◌゙◌્b; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; a◌゙◌्◌્◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GUJARATI SIGN VIRAMA, LATIN SMALL LETTER B 0061 0ACD 05B0 094D 3099 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062; # (a◌્◌ְ◌्◌゙b; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; a◌゙◌્◌्◌ְb; ) LATIN SMALL LETTER A, GUJARATI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 0B3C 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062; # (a◌゙◌़◌̴◌଼b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; a◌̴◌़◌଼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, ORIYA SIGN NUKTA, LATIN SMALL LETTER B 0061 0B3C 3099 093C 0334 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062; # (a◌଼◌゙◌़◌̴b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; a◌̴◌଼◌़◌゙b; ) LATIN SMALL LETTER A, ORIYA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 0B4D 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062; # (a◌ְ◌्◌゙◌୍b; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; a◌゙◌्◌୍◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, ORIYA SIGN VIRAMA, LATIN SMALL LETTER B 0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062; # (a◌୍◌ְ◌्◌゙b; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; a◌゙◌୍◌्◌ְb; ) LATIN SMALL LETTER A, ORIYA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062; # (a◌ְ◌्◌゙◌்b; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; a◌゙◌्◌்◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TAMIL SIGN VIRAMA, LATIN SMALL LETTER B 0061 0BCD 05B0 094D 3099 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062; # (a◌்◌ְ◌्◌゙b; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; a◌゙◌்◌्◌ְb; ) LATIN SMALL LETTER A, TAMIL SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 0C4D 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062; # (a◌ְ◌्◌゙◌్b; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; a◌゙◌्◌్◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TELUGU SIGN VIRAMA, LATIN SMALL LETTER B 0061 0C4D 05B0 094D 3099 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062; # (a◌్◌ְ◌्◌゙b; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; a◌゙◌్◌्◌ְb; ) LATIN SMALL LETTER A, TELUGU SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0C56 0C55 0711 0C55 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; # (a◌ౖ◌ౕ◌ܑ◌ౕb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; ) LATIN SMALL LETTER A, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, TELUGU LENGTH MARK, LATIN SMALL LETTER B 0061 0C55 0C56 0C55 0711 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; # (a◌ౕ◌ౖ◌ౕ◌ܑb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; a◌ܑ◌ౕ◌ౕ◌ౖb; ) LATIN SMALL LETTER A, TELUGU LENGTH MARK, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, SYRIAC LETTER SUPERSCRIPT ALAPH, LATIN SMALL LETTER B 0061 0E38 0C56 0C55 0C56 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; # (a◌ุ◌ౖ◌ౕ◌ౖb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; ) LATIN SMALL LETTER A, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B 0061 0C56 0E38 0C56 0C55 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; # (a◌ౖ◌ุ◌ౖ◌ౕb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; a◌ౕ◌ౖ◌ౖ◌ุb; ) LATIN SMALL LETTER A, TELUGU AI LENGTH MARK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, TELUGU LENGTH MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 0CBC 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062; # (a◌゙◌़◌̴◌಼b; a◌̴◌़◌಼◌゙b; a◌̴◌़◌಼◌゙b; a◌̴◌़◌಼◌゙b; a◌̴◌़◌಼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, KANNADA SIGN NUKTA, LATIN SMALL LETTER B 0061 0CBC 3099 093C 0334 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062; # (a◌಼◌゙◌़◌̴b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; a◌̴◌಼◌़◌゙b; ) LATIN SMALL LETTER A, KANNADA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 0CCD 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062; # (a◌ְ◌्◌゙◌್b; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; a◌゙◌्◌್◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KANNADA SIGN VIRAMA, LATIN SMALL LETTER B 0061 0CCD 05B0 094D 3099 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062; # (a◌್◌ְ◌्◌゙b; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; a◌゙◌್◌्◌ְb; ) LATIN SMALL LETTER A, KANNADA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 0D4D 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062; # (a◌ְ◌्◌゙◌്b; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; a◌゙◌्◌്◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MALAYALAM SIGN VIRAMA, LATIN SMALL LETTER B 0061 0D4D 05B0 094D 3099 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062; # (a◌്◌ְ◌्◌゙b; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; a◌゙◌്◌्◌ְb; ) LATIN SMALL LETTER A, MALAYALAM SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 0DCA 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062; # (a◌ְ◌्◌゙◌්b; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; a◌゙◌्◌්◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SINHALA SIGN AL-LAKUNA, LATIN SMALL LETTER B 0061 0DCA 05B0 094D 3099 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062; # (a◌්◌ְ◌्◌゙b; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; a◌゙◌්◌्◌ְb; ) LATIN SMALL LETTER A, SINHALA SIGN AL-LAKUNA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0E48 0E38 0C56 0E38 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; # (a◌่◌ุ◌ౖ◌ุb; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, THAI CHARACTER SARA U, LATIN SMALL LETTER B 0061 0E38 0E48 0E38 0C56 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; # (a◌ุ◌่◌ุ◌ౖb; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; a◌ౖ◌ุ◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER SARA U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B 0061 0E48 0E38 0C56 0E39 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062; # (a◌่◌ุ◌ౖ◌ูb; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; a◌ౖ◌ุ◌ู◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, THAI CHARACTER SARA UU, LATIN SMALL LETTER B 0061 0E39 0E48 0E38 0C56 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062; # (a◌ู◌่◌ุ◌ౖb; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; a◌ౖ◌ู◌ุ◌่b; ) LATIN SMALL LETTER A, THAI CHARACTER SARA UU, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, TELUGU AI LENGTH MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 0E3A 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062; # (a◌ְ◌्◌゙◌ฺb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; a◌゙◌्◌ฺ◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, THAI CHARACTER PHINTHU, LATIN SMALL LETTER B 0061 0E3A 05B0 094D 3099 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062; # (a◌ฺ◌ְ◌्◌゙b; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; a◌゙◌ฺ◌्◌ְb; ) LATIN SMALL LETTER A, THAI CHARACTER PHINTHU, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0EB8 0E48 0E38 0E48 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; # (a◌ຸ◌่◌ุ◌่b; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B 0061 0E48 0EB8 0E48 0E38 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; # (a◌่◌ຸ◌่◌ุb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; a◌ุ◌่◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B 0061 0EB8 0E48 0E38 0E49 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062; # (a◌ຸ◌่◌ุ◌้b; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; a◌ุ◌่◌้◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI THO, LATIN SMALL LETTER B 0061 0E49 0EB8 0E48 0E38 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062; # (a◌้◌ຸ◌่◌ุb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; a◌ุ◌้◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI THO, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B 0061 0EB8 0E48 0E38 0E4A 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062; # (a◌ຸ◌่◌ุ◌๊b; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; a◌ุ◌่◌๊◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI TRI, LATIN SMALL LETTER B 0061 0E4A 0EB8 0E48 0E38 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062; # (a◌๊◌ຸ◌่◌ุb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; a◌ุ◌๊◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI TRI, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B 0061 0EB8 0E48 0E38 0E4B 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062; # (a◌ຸ◌่◌ุ◌๋b; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; a◌ุ◌่◌๋◌ຸb; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, THAI CHARACTER MAI CHATTAWA, LATIN SMALL LETTER B 0061 0E4B 0EB8 0E48 0E38 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062; # (a◌๋◌ຸ◌่◌ุb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; a◌ุ◌๋◌่◌ຸb; ) LATIN SMALL LETTER A, THAI CHARACTER MAI CHATTAWA, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, THAI CHARACTER SARA U, LATIN SMALL LETTER B 0061 0EC8 0EB8 0E48 0EB8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; # (a◌່◌ຸ◌่◌ຸb; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 0EB8 0EC8 0EB8 0E48 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; # (a◌ຸ◌່◌ຸ◌่b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; a◌่◌ຸ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN U, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B 0061 0EC8 0EB8 0E48 0EB9 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062; # (a◌່◌ຸ◌่◌ູb; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; a◌่◌ຸ◌ູ◌່b; ) LATIN SMALL LETTER A, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LAO VOWEL SIGN UU, LATIN SMALL LETTER B 0061 0EB9 0EC8 0EB8 0E48 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062; # (a◌ູ◌່◌ຸ◌่b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; a◌่◌ູ◌ຸ◌່b; ) LATIN SMALL LETTER A, LAO VOWEL SIGN UU, LAO TONE MAI EK, LAO VOWEL SIGN U, THAI CHARACTER MAI EK, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0EC8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌ཱ◌່◌ຸ◌່b; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI EK, LATIN SMALL LETTER B 0061 0EC8 0F71 0EC8 0EB8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; # (a◌່◌ཱ◌່◌ຸb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; a◌ຸ◌່◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI EK, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0EC9 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062; # (a◌ཱ◌່◌ຸ◌້b; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; a◌ຸ◌່◌້◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI THO, LATIN SMALL LETTER B 0061 0EC9 0F71 0EC8 0EB8 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062; # (a◌້◌ཱ◌່◌ຸb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; a◌ຸ◌້◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI THO, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0ECA 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062; # (a◌ཱ◌່◌ຸ◌໊b; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; a◌ຸ◌່◌໊◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI TI, LATIN SMALL LETTER B 0061 0ECA 0F71 0EC8 0EB8 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062; # (a◌໊◌ཱ◌່◌ຸb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; a◌ຸ◌໊◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI TI, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 0F71 0EC8 0EB8 0ECB 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062; # (a◌ཱ◌່◌ຸ◌໋b; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; a◌ຸ◌່◌໋◌ཱb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LAO TONE MAI CATAWA, LATIN SMALL LETTER B 0061 0ECB 0F71 0EC8 0EB8 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062; # (a◌໋◌ཱ◌່◌ຸb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; a◌ຸ◌໋◌່◌ཱb; ) LATIN SMALL LETTER A, LAO TONE MAI CATAWA, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LAO VOWEL SIGN U, LATIN SMALL LETTER B 0061 059A 0316 302A 0F18 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062; # (a◌֚◌̖◌〪◌༘b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; a◌〪◌̖◌༘◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, LATIN SMALL LETTER B 0061 0F18 059A 0316 302A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062; # (a◌༘◌֚◌̖◌〪b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; a◌〪◌༘◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN ASTROLOGICAL SIGN -KHYUD PA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0F19 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062; # (a◌֚◌̖◌〪◌༙b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; a◌〪◌̖◌༙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, LATIN SMALL LETTER B 0061 0F19 059A 0316 302A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062; # (a◌༙◌֚◌̖◌〪b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; a◌〪◌༙◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0F35 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062; # (a◌֚◌̖◌〪◌༵b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; a◌〪◌̖◌༵◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN MARK NGAS BZUNG NYI ZLA, LATIN SMALL LETTER B 0061 0F35 059A 0316 302A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062; # (a◌༵◌֚◌̖◌〪b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; a◌〪◌༵◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN MARK NGAS BZUNG NYI ZLA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 0F37 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062; # (a◌֚◌̖◌〪◌༷b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; a◌〪◌̖◌༷◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN MARK NGAS BZUNG SGOR RTAGS, LATIN SMALL LETTER B 0061 0F37 059A 0316 302A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062; # (a◌༷◌֚◌̖◌〪b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; a◌〪◌༷◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN MARK NGAS BZUNG SGOR RTAGS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 302A 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062; # (a◌〪◌̛◌᷎◌༹b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; a◌᷎◌̛◌༹◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, TIBETAN MARK TSA -PHRU, LATIN SMALL LETTER B 0061 0F39 302A 031B 1DCE 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062; # (a◌༹◌〪◌̛◌᷎b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; a◌᷎◌༹◌̛◌〪b; ) LATIN SMALL LETTER A, TIBETAN MARK TSA -PHRU, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 0F72 0F71 0EC8 0F71 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # (a◌ི◌ཱ◌່◌ཱb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0F71 0F72 0F71 0EC8 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; # (a◌ཱ◌ི◌ཱ◌່b; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; a◌່◌ཱ◌ཱ◌ིb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LAO TONE MAI EK, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F72 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; # (a◌ུ◌ི◌ཱ◌ིb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN I, LATIN SMALL LETTER B 0061 0F72 0F74 0F72 0F71 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; # (a◌ི◌ུ◌ི◌ཱb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; a◌ཱ◌ི◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0321 0F74 0F72 0F74 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; # (a◌̡◌ུ◌ི◌ུb; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; ) LATIN SMALL LETTER A, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 0F74 0321 0F74 0F72 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; # (a◌ུ◌̡◌ུ◌ིb; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; a◌ི◌ུ◌ུ◌̡b; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F7A 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062; # (a◌ུ◌ི◌ཱ◌ེb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; a◌ཱ◌ི◌ེ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN E, LATIN SMALL LETTER B 0061 0F7A 0F74 0F72 0F71 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062; # (a◌ེ◌ུ◌ི◌ཱb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; a◌ཱ◌ེ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN E, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F7B 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062; # (a◌ུ◌ི◌ཱ◌ཻb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; a◌ཱ◌ི◌ཻ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN EE, LATIN SMALL LETTER B 0061 0F7B 0F74 0F72 0F71 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062; # (a◌ཻ◌ུ◌ི◌ཱb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; a◌ཱ◌ཻ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN EE, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F7C 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062; # (a◌ུ◌ི◌ཱ◌ོb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; a◌ཱ◌ི◌ོ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN O, LATIN SMALL LETTER B 0061 0F7C 0F74 0F72 0F71 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062; # (a◌ོ◌ུ◌ི◌ཱb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; a◌ཱ◌ོ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN O, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F7D 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062; # (a◌ུ◌ི◌ཱ◌ཽb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; a◌ཱ◌ི◌ཽ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN OO, LATIN SMALL LETTER B 0061 0F7D 0F74 0F72 0F71 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062; # (a◌ཽ◌ུ◌ི◌ཱb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; a◌ཱ◌ཽ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN OO, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0F74 0F72 0F71 0F80 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062; # (a◌ུ◌ི◌ཱ◌ྀb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; a◌ཱ◌ི◌ྀ◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, TIBETAN VOWEL SIGN REVERSED I, LATIN SMALL LETTER B 0061 0F80 0F74 0F72 0F71 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062; # (a◌ྀ◌ུ◌ི◌ཱb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; a◌ཱ◌ྀ◌ི◌ུb; ) LATIN SMALL LETTER A, TIBETAN VOWEL SIGN REVERSED I, TIBETAN VOWEL SIGN U, TIBETAN VOWEL SIGN I, TIBETAN VOWEL SIGN AA, LATIN SMALL LETTER B 0061 0315 0300 05AE 0F82 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062; # (a◌̕◌̀◌֮◌ྂb; à◌֮◌ྂ◌̕b; a◌֮◌̀◌ྂ◌̕b; à◌֮◌ྂ◌̕b; a◌֮◌̀◌ྂ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN NYI ZLA NAA DA, LATIN SMALL LETTER B 0061 0F82 0315 0300 05AE 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062; # (a◌ྂ◌̕◌̀◌֮b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; a◌֮◌ྂ◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN NYI ZLA NAA DA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0F83 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062; # (a◌̕◌̀◌֮◌ྃb; à◌֮◌ྃ◌̕b; a◌֮◌̀◌ྃ◌̕b; à◌֮◌ྃ◌̕b; a◌֮◌̀◌ྃ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN SNA LDAN, LATIN SMALL LETTER B 0061 0F83 0315 0300 05AE 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062; # (a◌ྃ◌̕◌̀◌֮b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; a◌֮◌ྃ◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN SNA LDAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 0F84 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062; # (a◌ְ◌्◌゙◌྄b; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; a◌゙◌्◌྄◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TIBETAN MARK HALANTA, LATIN SMALL LETTER B 0061 0F84 05B0 094D 3099 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062; # (a◌྄◌ְ◌्◌゙b; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; a◌゙◌྄◌्◌ְb; ) LATIN SMALL LETTER A, TIBETAN MARK HALANTA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 0F86 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062; # (a◌̕◌̀◌֮◌྆b; à◌֮◌྆◌̕b; a◌֮◌̀◌྆◌̕b; à◌֮◌྆◌̕b; a◌֮◌̀◌྆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN LCI RTAGS, LATIN SMALL LETTER B 0061 0F86 0315 0300 05AE 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062; # (a◌྆◌̕◌̀◌֮b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; a◌֮◌྆◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN LCI RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 0F87 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062; # (a◌̕◌̀◌֮◌྇b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; à◌֮◌྇◌̕b; a◌֮◌̀◌྇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TIBETAN SIGN YANG RTAGS, LATIN SMALL LETTER B 0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062; # (a◌྇◌̕◌̀◌֮b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; a◌֮◌྇◌̀◌̕b; ) LATIN SMALL LETTER A, TIBETAN SIGN YANG RTAGS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062; # (a◌֚◌̖◌〪◌࿆b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; a◌〪◌̖◌࿆◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TIBETAN SYMBOL PADMA GDAN, LATIN SMALL LETTER B 0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062; # (a◌࿆◌֚◌̖◌〪b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; a◌〪◌࿆◌̖◌֚b; ) LATIN SMALL LETTER A, TIBETAN SYMBOL PADMA GDAN, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1037 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062; # (a◌゙◌़◌̴◌့b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; a◌̴◌़◌့◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MYANMAR SIGN DOT BELOW, LATIN SMALL LETTER B 0061 1037 3099 093C 0334 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062; # (a◌့◌゙◌़◌̴b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; a◌̴◌့◌़◌゙b; ) LATIN SMALL LETTER A, MYANMAR SIGN DOT BELOW, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062; # (a◌ְ◌्◌゙◌္b; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; a◌゙◌्◌္◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MYANMAR SIGN VIRAMA, LATIN SMALL LETTER B 0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062; # (a◌္◌ְ◌्◌゙b; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; a◌゙◌္◌्◌ְb; ) LATIN SMALL LETTER A, MYANMAR SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 103A 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062; # (a◌ְ◌्◌゙◌်b; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; a◌゙◌्◌်◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MYANMAR SIGN ASAT, LATIN SMALL LETTER B 0061 103A 05B0 094D 3099 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062; # (a◌်◌ְ◌्◌゙b; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; a◌゙◌်◌्◌ְb; ) LATIN SMALL LETTER A, MYANMAR SIGN ASAT, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 108D 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062; # (a◌֚◌̖◌〪◌ႍb; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; a◌〪◌̖◌ႍ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, LATIN SMALL LETTER B 0061 108D 059A 0316 302A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062; # (a◌ႍ◌֚◌̖◌〪b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; a◌〪◌ႍ◌̖◌֚b; ) LATIN SMALL LETTER A, MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 135D 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 0315 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 0315 0062; # (a◌̕◌̀◌֮◌፝b; à◌֮◌፝◌̕b; a◌֮◌̀◌፝◌̕b; à◌֮◌፝◌̕b; a◌֮◌̀◌፝◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK, LATIN SMALL LETTER B 0061 135D 0315 0300 05AE 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062; # (a◌፝◌̕◌̀◌֮b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; a◌֮◌፝◌̀◌̕b; ) LATIN SMALL LETTER A, ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 135E 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 0315 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 0315 0062; # (a◌̕◌̀◌֮◌፞b; à◌֮◌፞◌̕b; a◌֮◌̀◌፞◌̕b; à◌֮◌፞◌̕b; a◌֮◌̀◌፞◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ETHIOPIC COMBINING VOWEL LENGTH MARK, LATIN SMALL LETTER B 0061 135E 0315 0300 05AE 0062;0061 05AE 135E 0300 0315 0062;0061 05AE 135E 0300 0315 0062;0061 05AE 135E 0300 0315 0062;0061 05AE 135E 0300 0315 0062; # (a◌፞◌̕◌̀◌֮b; a◌֮◌፞◌̀◌̕b; a◌֮◌፞◌̀◌̕b; a◌֮◌፞◌̀◌̕b; a◌֮◌፞◌̀◌̕b; ) LATIN SMALL LETTER A, ETHIOPIC COMBINING VOWEL LENGTH MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 135F 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062; # (a◌̕◌̀◌֮◌፟b; à◌֮◌፟◌̕b; a◌֮◌̀◌፟◌̕b; à◌֮◌፟◌̕b; a◌֮◌̀◌፟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ETHIOPIC COMBINING GEMINATION MARK, LATIN SMALL LETTER B 0061 135F 0315 0300 05AE 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062; # (a◌፟◌̕◌̀◌֮b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; a◌֮◌፟◌̀◌̕b; ) LATIN SMALL LETTER A, ETHIOPIC COMBINING GEMINATION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 1714 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062; # (a◌ְ◌्◌゙◌᜔b; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; a◌゙◌्◌᜔◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TAGALOG SIGN VIRAMA, LATIN SMALL LETTER B 0061 1714 05B0 094D 3099 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062; # (a◌᜔◌ְ◌्◌゙b; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; a◌゙◌᜔◌्◌ְb; ) LATIN SMALL LETTER A, TAGALOG SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062; # (a◌ְ◌्◌゙◌᜴b; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; a◌゙◌्◌᜴◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HANUNOO SIGN PAMUDPOD, LATIN SMALL LETTER B 0061 1734 05B0 094D 3099 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062; # (a◌᜴◌ְ◌्◌゙b; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; a◌゙◌᜴◌्◌ְb; ) LATIN SMALL LETTER A, HANUNOO SIGN PAMUDPOD, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 17D2 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062; # (a◌ְ◌्◌゙◌្b; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; a◌゙◌्◌្◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KHMER SIGN COENG, LATIN SMALL LETTER B 0061 17D2 05B0 094D 3099 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062; # (a◌្◌ְ◌्◌゙b; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; a◌゙◌្◌्◌ְb; ) LATIN SMALL LETTER A, KHMER SIGN COENG, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 17DD 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 0315 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 0315 0062; # (a◌̕◌̀◌֮◌៝b; à◌֮◌៝◌̕b; a◌֮◌̀◌៝◌̕b; à◌֮◌៝◌̕b; a◌֮◌̀◌៝◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, KHMER SIGN ATTHACAN, LATIN SMALL LETTER B 0061 17DD 0315 0300 05AE 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062; # (a◌៝◌̕◌̀◌֮b; a◌֮◌៝◌̀◌̕b; a◌֮◌៝◌̀◌̕b; a◌֮◌៝◌̀◌̕b; a◌֮◌៝◌̀◌̕b; ) LATIN SMALL LETTER A, KHMER SIGN ATTHACAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0300 05AE 1D16D 18A9 0062;00E0 1D16D 05AE 18A9 0062;0061 1D16D 05AE 18A9 0300 0062;00E0 1D16D 05AE 18A9 0062;0061 1D16D 05AE 18A9 0300 0062; # (a◌̀◌𝅭֮◌ᢩb; à𝅭◌֮◌ᢩb; a𝅭◌֮◌ᢩ◌̀b; à𝅭◌֮◌ᢩb; a𝅭◌֮◌ᢩ◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, MONGOLIAN LETTER ALI GALI DAGALGA, LATIN SMALL LETTER B 0061 18A9 0300 05AE 1D16D 0062;00E0 1D16D 18A9 05AE 0062;0061 1D16D 18A9 05AE 0300 0062;00E0 1D16D 18A9 05AE 0062;0061 1D16D 18A9 05AE 0300 0062; # (a◌ᢩ◌̀◌𝅭֮b; à𝅭◌ᢩ◌֮b; a𝅭◌ᢩ◌֮◌̀b; à𝅭◌ᢩ◌֮b; a𝅭◌ᢩ◌֮◌̀b; ) LATIN SMALL LETTER A, MONGOLIAN LETTER ALI GALI DAGALGA, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B 0061 302E 059A 0316 1939 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062; # (a〮◌֚◌̖◌᤹b; a◌̖◌֚◌᤹〮b; a◌̖◌֚◌᤹〮b; a◌̖◌֚◌᤹〮b; a◌̖◌֚◌᤹〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LIMBU SIGN MUKPHRENG, LATIN SMALL LETTER B 0061 1939 302E 059A 0316 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062; # (a◌᤹〮◌֚◌̖b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; a◌̖◌᤹◌֚〮b; ) LATIN SMALL LETTER A, LIMBU SIGN MUKPHRENG, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B 0061 0315 0300 05AE 193A 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062; # (a◌̕◌̀◌֮◌᤺b; à◌֮◌᤺◌̕b; a◌֮◌̀◌᤺◌̕b; à◌֮◌᤺◌̕b; a◌֮◌̀◌᤺◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LIMBU SIGN KEMPHRENG, LATIN SMALL LETTER B 0061 193A 0315 0300 05AE 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062; # (a◌᤺◌̕◌̀◌֮b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; a◌֮◌᤺◌̀◌̕b; ) LATIN SMALL LETTER A, LIMBU SIGN KEMPHRENG, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 193B 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062; # (a◌֚◌̖◌〪◌᤻b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; a◌〪◌̖◌᤻◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LIMBU SIGN SA-I, LATIN SMALL LETTER B 0061 193B 059A 0316 302A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062; # (a◌᤻◌֚◌̖◌〪b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; a◌〪◌᤻◌̖◌֚b; ) LATIN SMALL LETTER A, LIMBU SIGN SA-I, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A17 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062; # (a◌̕◌̀◌֮◌ᨗb; à◌֮◌ᨗ◌̕b; a◌֮◌̀◌ᨗ◌̕b; à◌֮◌ᨗ◌̕b; a◌֮◌̀◌ᨗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BUGINESE VOWEL SIGN I, LATIN SMALL LETTER B 0061 1A17 0315 0300 05AE 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062; # (a◌ᨗ◌̕◌̀◌֮b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; a◌֮◌ᨗ◌̀◌̕b; ) LATIN SMALL LETTER A, BUGINESE VOWEL SIGN I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1A18 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062; # (a◌֚◌̖◌〪◌ᨘb; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; a◌〪◌̖◌ᨘ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, BUGINESE VOWEL SIGN U, LATIN SMALL LETTER B 0061 1A18 059A 0316 302A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062; # (a◌ᨘ◌֚◌̖◌〪b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; a◌〪◌ᨘ◌̖◌֚b; ) LATIN SMALL LETTER A, BUGINESE VOWEL SIGN U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 1A60 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062; # (a◌ְ◌्◌゙◌᩠b; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; a◌゙◌्◌᩠◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TAI THAM SIGN SAKOT, LATIN SMALL LETTER B 0061 1A60 05B0 094D 3099 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062; # (a◌᩠◌ְ◌्◌゙b; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; a◌゙◌᩠◌्◌ְb; ) LATIN SMALL LETTER A, TAI THAM SIGN SAKOT, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A75 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 0315 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 0315 0062; # (a◌̕◌̀◌֮◌᩵b; à◌֮◌᩵◌̕b; a◌֮◌̀◌᩵◌̕b; à◌֮◌᩵◌̕b; a◌֮◌̀◌᩵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN TONE-1, LATIN SMALL LETTER B 0061 1A75 0315 0300 05AE 0062;0061 05AE 1A75 0300 0315 0062;0061 05AE 1A75 0300 0315 0062;0061 05AE 1A75 0300 0315 0062;0061 05AE 1A75 0300 0315 0062; # (a◌᩵◌̕◌̀◌֮b; a◌֮◌᩵◌̀◌̕b; a◌֮◌᩵◌̀◌̕b; a◌֮◌᩵◌̀◌̕b; a◌֮◌᩵◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN TONE-1, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A76 0062;00E0 05AE 1A76 0315 0062;0061 05AE 0300 1A76 0315 0062;00E0 05AE 1A76 0315 0062;0061 05AE 0300 1A76 0315 0062; # (a◌̕◌̀◌֮◌᩶b; à◌֮◌᩶◌̕b; a◌֮◌̀◌᩶◌̕b; à◌֮◌᩶◌̕b; a◌֮◌̀◌᩶◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN TONE-2, LATIN SMALL LETTER B 0061 1A76 0315 0300 05AE 0062;0061 05AE 1A76 0300 0315 0062;0061 05AE 1A76 0300 0315 0062;0061 05AE 1A76 0300 0315 0062;0061 05AE 1A76 0300 0315 0062; # (a◌᩶◌̕◌̀◌֮b; a◌֮◌᩶◌̀◌̕b; a◌֮◌᩶◌̀◌̕b; a◌֮◌᩶◌̀◌̕b; a◌֮◌᩶◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN TONE-2, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A77 0062;00E0 05AE 1A77 0315 0062;0061 05AE 0300 1A77 0315 0062;00E0 05AE 1A77 0315 0062;0061 05AE 0300 1A77 0315 0062; # (a◌̕◌̀◌֮◌᩷b; à◌֮◌᩷◌̕b; a◌֮◌̀◌᩷◌̕b; à◌֮◌᩷◌̕b; a◌֮◌̀◌᩷◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN KHUEN TONE-3, LATIN SMALL LETTER B 0061 1A77 0315 0300 05AE 0062;0061 05AE 1A77 0300 0315 0062;0061 05AE 1A77 0300 0315 0062;0061 05AE 1A77 0300 0315 0062;0061 05AE 1A77 0300 0315 0062; # (a◌᩷◌̕◌̀◌֮b; a◌֮◌᩷◌̀◌̕b; a◌֮◌᩷◌̀◌̕b; a◌֮◌᩷◌̀◌̕b; a◌֮◌᩷◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN KHUEN TONE-3, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A78 0062;00E0 05AE 1A78 0315 0062;0061 05AE 0300 1A78 0315 0062;00E0 05AE 1A78 0315 0062;0061 05AE 0300 1A78 0315 0062; # (a◌̕◌̀◌֮◌᩸b; à◌֮◌᩸◌̕b; a◌֮◌̀◌᩸◌̕b; à◌֮◌᩸◌̕b; a◌֮◌̀◌᩸◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN KHUEN TONE-4, LATIN SMALL LETTER B 0061 1A78 0315 0300 05AE 0062;0061 05AE 1A78 0300 0315 0062;0061 05AE 1A78 0300 0315 0062;0061 05AE 1A78 0300 0315 0062;0061 05AE 1A78 0300 0315 0062; # (a◌᩸◌̕◌̀◌֮b; a◌֮◌᩸◌̀◌̕b; a◌֮◌᩸◌̀◌̕b; a◌֮◌᩸◌̀◌̕b; a◌֮◌᩸◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN KHUEN TONE-4, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A79 0062;00E0 05AE 1A79 0315 0062;0061 05AE 0300 1A79 0315 0062;00E0 05AE 1A79 0315 0062;0061 05AE 0300 1A79 0315 0062; # (a◌̕◌̀◌֮◌᩹b; à◌֮◌᩹◌̕b; a◌֮◌̀◌᩹◌̕b; à◌֮◌᩹◌̕b; a◌֮◌̀◌᩹◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN KHUEN TONE-5, LATIN SMALL LETTER B 0061 1A79 0315 0300 05AE 0062;0061 05AE 1A79 0300 0315 0062;0061 05AE 1A79 0300 0315 0062;0061 05AE 1A79 0300 0315 0062;0061 05AE 1A79 0300 0315 0062; # (a◌᩹◌̕◌̀◌֮b; a◌֮◌᩹◌̀◌̕b; a◌֮◌᩹◌̀◌̕b; a◌֮◌᩹◌̀◌̕b; a◌֮◌᩹◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN KHUEN TONE-5, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A7A 0062;00E0 05AE 1A7A 0315 0062;0061 05AE 0300 1A7A 0315 0062;00E0 05AE 1A7A 0315 0062;0061 05AE 0300 1A7A 0315 0062; # (a◌̕◌̀◌֮◌᩺b; à◌֮◌᩺◌̕b; a◌֮◌̀◌᩺◌̕b; à◌֮◌᩺◌̕b; a◌֮◌̀◌᩺◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN RA HAAM, LATIN SMALL LETTER B 0061 1A7A 0315 0300 05AE 0062;0061 05AE 1A7A 0300 0315 0062;0061 05AE 1A7A 0300 0315 0062;0061 05AE 1A7A 0300 0315 0062;0061 05AE 1A7A 0300 0315 0062; # (a◌᩺◌̕◌̀◌֮b; a◌֮◌᩺◌̀◌̕b; a◌֮◌᩺◌̀◌̕b; a◌֮◌᩺◌̀◌̕b; a◌֮◌᩺◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN RA HAAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A7B 0062;00E0 05AE 1A7B 0315 0062;0061 05AE 0300 1A7B 0315 0062;00E0 05AE 1A7B 0315 0062;0061 05AE 0300 1A7B 0315 0062; # (a◌̕◌̀◌֮◌᩻b; à◌֮◌᩻◌̕b; a◌֮◌̀◌᩻◌̕b; à◌֮◌᩻◌̕b; a◌֮◌̀◌᩻◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN MAI SAM, LATIN SMALL LETTER B 0061 1A7B 0315 0300 05AE 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062; # (a◌᩻◌̕◌̀◌֮b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; a◌֮◌᩻◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN MAI SAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1A7C 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 0315 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 0315 0062; # (a◌̕◌̀◌֮◌᩼b; à◌֮◌᩼◌̕b; a◌֮◌̀◌᩼◌̕b; à◌֮◌᩼◌̕b; a◌֮◌̀◌᩼◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI THAM SIGN KHUEN-LUE KARAN, LATIN SMALL LETTER B 0061 1A7C 0315 0300 05AE 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062; # (a◌᩼◌̕◌̀◌֮b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; a◌֮◌᩼◌̀◌̕b; ) LATIN SMALL LETTER A, TAI THAM SIGN KHUEN-LUE KARAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1A7F 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062; # (a◌֚◌̖◌〪◌᩿b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; a◌〪◌̖◌᩿◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TAI THAM COMBINING CRYPTOGRAMMIC DOT, LATIN SMALL LETTER B 0061 1A7F 059A 0316 302A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062; # (a◌᩿◌֚◌̖◌〪b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; a◌〪◌᩿◌̖◌֚b; ) LATIN SMALL LETTER A, TAI THAM COMBINING CRYPTOGRAMMIC DOT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1AB0 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 0315 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 0315 0062; # (a◌̕◌̀◌֮◌᪰b; à◌֮◌᪰◌̕b; a◌֮◌̀◌᪰◌̕b; à◌֮◌᪰◌̕b; a◌֮◌̀◌᪰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLED CIRCUMFLEX ACCENT, LATIN SMALL LETTER B 0061 1AB0 0315 0300 05AE 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062; # (a◌᪰◌̕◌̀◌֮b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; a◌֮◌᪰◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLED CIRCUMFLEX ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1AB1 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 0315 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 0315 0062; # (a◌̕◌̀◌֮◌᪱b; à◌֮◌᪱◌̕b; a◌֮◌̀◌᪱◌̕b; à◌֮◌᪱◌̕b; a◌֮◌̀◌᪱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DIAERESIS-RING, LATIN SMALL LETTER B 0061 1AB1 0315 0300 05AE 0062;0061 05AE 1AB1 0300 0315 0062;0061 05AE 1AB1 0300 0315 0062;0061 05AE 1AB1 0300 0315 0062;0061 05AE 1AB1 0300 0315 0062; # (a◌᪱◌̕◌̀◌֮b; a◌֮◌᪱◌̀◌̕b; a◌֮◌᪱◌̀◌̕b; a◌֮◌᪱◌̀◌̕b; a◌֮◌᪱◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DIAERESIS-RING, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1AB2 0062;00E0 05AE 1AB2 0315 0062;0061 05AE 0300 1AB2 0315 0062;00E0 05AE 1AB2 0315 0062;0061 05AE 0300 1AB2 0315 0062; # (a◌̕◌̀◌֮◌᪲b; à◌֮◌᪲◌̕b; a◌֮◌̀◌᪲◌̕b; à◌֮◌᪲◌̕b; a◌֮◌̀◌᪲◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING INFINITY, LATIN SMALL LETTER B 0061 1AB2 0315 0300 05AE 0062;0061 05AE 1AB2 0300 0315 0062;0061 05AE 1AB2 0300 0315 0062;0061 05AE 1AB2 0300 0315 0062;0061 05AE 1AB2 0300 0315 0062; # (a◌᪲◌̕◌̀◌֮b; a◌֮◌᪲◌̀◌̕b; a◌֮◌᪲◌̀◌̕b; a◌֮◌᪲◌̀◌̕b; a◌֮◌᪲◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING INFINITY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1AB3 0062;00E0 05AE 1AB3 0315 0062;0061 05AE 0300 1AB3 0315 0062;00E0 05AE 1AB3 0315 0062;0061 05AE 0300 1AB3 0315 0062; # (a◌̕◌̀◌֮◌᪳b; à◌֮◌᪳◌̕b; a◌֮◌̀◌᪳◌̕b; à◌֮◌᪳◌̕b; a◌֮◌̀◌᪳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOWNWARDS ARROW, LATIN SMALL LETTER B 0061 1AB3 0315 0300 05AE 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062; # (a◌᪳◌̕◌̀◌֮b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; a◌֮◌᪳◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOWNWARDS ARROW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1AB4 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 0315 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 0315 0062; # (a◌̕◌̀◌֮◌᪴b; à◌֮◌᪴◌̕b; a◌֮◌̀◌᪴◌̕b; à◌֮◌᪴◌̕b; a◌֮◌̀◌᪴◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING TRIPLE DOT, LATIN SMALL LETTER B 0061 1AB4 0315 0300 05AE 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062; # (a◌᪴◌̕◌̀◌֮b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; a◌֮◌᪴◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING TRIPLE DOT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1AB5 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062; # (a◌֚◌̖◌〪◌᪵b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; a◌〪◌̖◌᪵◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING X-X BELOW, LATIN SMALL LETTER B 0061 1AB5 059A 0316 302A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062; # (a◌᪵◌֚◌̖◌〪b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; a◌〪◌᪵◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING X-X BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1AB6 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062; # (a◌֚◌̖◌〪◌᪶b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; a◌〪◌̖◌᪶◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING WIGGLY LINE BELOW, LATIN SMALL LETTER B 0061 1AB6 059A 0316 302A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062; # (a◌᪶◌֚◌̖◌〪b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; a◌〪◌᪶◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING WIGGLY LINE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1AB7 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062; # (a◌֚◌̖◌〪◌᪷b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; a◌〪◌̖◌᪷◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING OPEN MARK BELOW, LATIN SMALL LETTER B 0061 1AB7 059A 0316 302A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062; # (a◌᪷◌֚◌̖◌〪b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; a◌〪◌᪷◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1AB8 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062; # (a◌֚◌̖◌〪◌᪸b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; a◌〪◌̖◌᪸◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING DOUBLE OPEN MARK BELOW, LATIN SMALL LETTER B 0061 1AB8 059A 0316 302A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062; # (a◌᪸◌֚◌̖◌〪b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; a◌〪◌᪸◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING DOUBLE OPEN MARK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1AB9 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062; # (a◌֚◌̖◌〪◌᪹b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; a◌〪◌̖◌᪹◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LIGHT CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B 0061 1AB9 059A 0316 302A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062; # (a◌᪹◌֚◌̖◌〪b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; a◌〪◌᪹◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LIGHT CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1ABA 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062; # (a◌֚◌̖◌〪◌᪺b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; a◌〪◌̖◌᪺◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING STRONG CENTRALIZATION STROKE BELOW, LATIN SMALL LETTER B 0061 1ABA 059A 0316 302A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062; # (a◌᪺◌֚◌̖◌〪b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; a◌〪◌᪺◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING STRONG CENTRALIZATION STROKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1ABB 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 0315 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 0315 0062; # (a◌̕◌̀◌֮◌᪻b; à◌֮◌᪻◌̕b; a◌֮◌̀◌᪻◌̕b; à◌֮◌᪻◌̕b; a◌֮◌̀◌᪻◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING PARENTHESES ABOVE, LATIN SMALL LETTER B 0061 1ABB 0315 0300 05AE 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062; # (a◌᪻◌̕◌̀◌֮b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; a◌֮◌᪻◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING PARENTHESES ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1ABC 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 0315 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 0315 0062; # (a◌̕◌̀◌֮◌᪼b; à◌֮◌᪼◌̕b; a◌֮◌̀◌᪼◌̕b; à◌֮◌᪼◌̕b; a◌֮◌̀◌᪼◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE PARENTHESES ABOVE, LATIN SMALL LETTER B 0061 1ABC 0315 0300 05AE 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062; # (a◌᪼◌̕◌̀◌֮b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; a◌֮◌᪼◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE PARENTHESES ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1ABD 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062; # (a◌֚◌̖◌〪◌᪽b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; a◌〪◌̖◌᪽◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING PARENTHESES BELOW, LATIN SMALL LETTER B 0061 1ABD 059A 0316 302A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062; # (a◌᪽◌֚◌̖◌〪b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; a◌〪◌᪽◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING PARENTHESES BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1B34 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062; # (a◌゙◌़◌̴◌᬴b; a◌̴◌़◌᬴◌゙b; a◌̴◌़◌᬴◌゙b; a◌̴◌़◌᬴◌゙b; a◌̴◌़◌᬴◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BALINESE SIGN REREKAN, LATIN SMALL LETTER B 0061 1B34 3099 093C 0334 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062; # (a◌᬴◌゙◌़◌̴b; a◌̴◌᬴◌़◌゙b; a◌̴◌᬴◌़◌゙b; a◌̴◌᬴◌़◌゙b; a◌̴◌᬴◌़◌゙b; ) LATIN SMALL LETTER A, BALINESE SIGN REREKAN, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062; # (a◌ְ◌्◌゙᭄b; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; a◌゙◌्᭄◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BALINESE ADEG ADEG, LATIN SMALL LETTER B 0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062; # (a᭄◌ְ◌्◌゙b; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; a◌゙᭄◌्◌ְb; ) LATIN SMALL LETTER A, BALINESE ADEG ADEG, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062; # (a◌̕◌̀◌֮◌᭫b; à◌֮◌᭫◌̕b; a◌֮◌̀◌᭫◌̕b; à◌֮◌᭫◌̕b; a◌֮◌̀◌᭫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING TEGEH, LATIN SMALL LETTER B 0061 1B6B 0315 0300 05AE 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062; # (a◌᭫◌̕◌̀◌֮b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; a◌֮◌᭫◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING TEGEH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1B6C 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062; # (a◌֚◌̖◌〪◌᭬b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; a◌〪◌̖◌᭬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, BALINESE MUSICAL SYMBOL COMBINING ENDEP, LATIN SMALL LETTER B 0061 1B6C 059A 0316 302A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062; # (a◌᭬◌֚◌̖◌〪b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; a◌〪◌᭬◌̖◌֚b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING ENDEP, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B6D 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062; # (a◌̕◌̀◌֮◌᭭b; à◌֮◌᭭◌̕b; a◌֮◌̀◌᭭◌̕b; à◌֮◌᭭◌̕b; a◌֮◌̀◌᭭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING KEMPUL, LATIN SMALL LETTER B 0061 1B6D 0315 0300 05AE 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062; # (a◌᭭◌̕◌̀◌֮b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; a◌֮◌᭭◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING KEMPUL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B6E 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062; # (a◌̕◌̀◌֮◌᭮b; à◌֮◌᭮◌̕b; a◌֮◌̀◌᭮◌̕b; à◌֮◌᭮◌̕b; a◌֮◌̀◌᭮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING KEMPLI, LATIN SMALL LETTER B 0061 1B6E 0315 0300 05AE 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062; # (a◌᭮◌̕◌̀◌֮b; a◌֮◌᭮◌̀◌̕b; a◌֮◌᭮◌̀◌̕b; a◌֮◌᭮◌̀◌̕b; a◌֮◌᭮◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING KEMPLI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B6F 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062; # (a◌̕◌̀◌֮◌᭯b; à◌֮◌᭯◌̕b; a◌֮◌̀◌᭯◌̕b; à◌֮◌᭯◌̕b; a◌֮◌̀◌᭯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING JEGOGAN, LATIN SMALL LETTER B 0061 1B6F 0315 0300 05AE 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062; # (a◌᭯◌̕◌̀◌֮b; a◌֮◌᭯◌̀◌̕b; a◌֮◌᭯◌̀◌̕b; a◌֮◌᭯◌̀◌̕b; a◌֮◌᭯◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING JEGOGAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B70 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062; # (a◌̕◌̀◌֮◌᭰b; à◌֮◌᭰◌̕b; a◌֮◌̀◌᭰◌̕b; à◌֮◌᭰◌̕b; a◌֮◌̀◌᭰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN, LATIN SMALL LETTER B 0061 1B70 0315 0300 05AE 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062; # (a◌᭰◌̕◌̀◌֮b; a◌֮◌᭰◌̀◌̕b; a◌֮◌᭰◌̀◌̕b; a◌֮◌᭰◌̀◌̕b; a◌֮◌᭰◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B71 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062; # (a◌̕◌̀◌֮◌᭱b; à◌֮◌᭱◌̕b; a◌֮◌̀◌᭱◌̕b; à◌֮◌᭱◌̕b; a◌֮◌̀◌᭱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN, LATIN SMALL LETTER B 0061 1B71 0315 0300 05AE 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062; # (a◌᭱◌̕◌̀◌֮b; a◌֮◌᭱◌̀◌̕b; a◌֮◌᭱◌̀◌̕b; a◌֮◌᭱◌̀◌̕b; a◌֮◌᭱◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B72 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062; # (a◌̕◌̀◌֮◌᭲b; à◌֮◌᭲◌̕b; a◌֮◌̀◌᭲◌̕b; à◌֮◌᭲◌̕b; a◌֮◌̀◌᭲◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING BENDE, LATIN SMALL LETTER B 0061 1B72 0315 0300 05AE 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062; # (a◌᭲◌̕◌̀◌֮b; a◌֮◌᭲◌̀◌̕b; a◌֮◌᭲◌̀◌̕b; a◌֮◌᭲◌̀◌̕b; a◌֮◌᭲◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING BENDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1B73 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062; # (a◌̕◌̀◌֮◌᭳b; à◌֮◌᭳◌̕b; a◌֮◌̀◌᭳◌̕b; à◌֮◌᭳◌̕b; a◌֮◌̀◌᭳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BALINESE MUSICAL SYMBOL COMBINING GONG, LATIN SMALL LETTER B 0061 1B73 0315 0300 05AE 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062; # (a◌᭳◌̕◌̀◌֮b; a◌֮◌᭳◌̀◌̕b; a◌֮◌᭳◌̀◌̕b; a◌֮◌᭳◌̀◌̕b; a◌֮◌᭳◌̀◌̕b; ) LATIN SMALL LETTER A, BALINESE MUSICAL SYMBOL COMBINING GONG, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 1BAA 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062; # (a◌ְ◌्◌゙᮪b; a◌゙◌्᮪◌ְb; a◌゙◌्᮪◌ְb; a◌゙◌्᮪◌ְb; a◌゙◌्᮪◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SUNDANESE SIGN PAMAAEH, LATIN SMALL LETTER B 0061 1BAA 05B0 094D 3099 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062; # (a᮪◌ְ◌्◌゙b; a◌゙᮪◌्◌ְb; a◌゙᮪◌्◌ְb; a◌゙᮪◌्◌ְb; a◌゙᮪◌्◌ְb; ) LATIN SMALL LETTER A, SUNDANESE SIGN PAMAAEH, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 1BAB 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062; # (a◌ְ◌्◌゙◌᮫b; a◌゙◌्◌᮫◌ְb; a◌゙◌्◌᮫◌ְb; a◌゙◌्◌᮫◌ְb; a◌゙◌्◌᮫◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SUNDANESE SIGN VIRAMA, LATIN SMALL LETTER B 0061 1BAB 05B0 094D 3099 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062; # (a◌᮫◌ְ◌्◌゙b; a◌゙◌᮫◌्◌ְb; a◌゙◌᮫◌्◌ְb; a◌゙◌᮫◌्◌ְb; a◌゙◌᮫◌्◌ְb; ) LATIN SMALL LETTER A, SUNDANESE SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1BE6 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062; # (a◌゙◌़◌̴◌᯦b; a◌̴◌़◌᯦◌゙b; a◌̴◌़◌᯦◌゙b; a◌̴◌़◌᯦◌゙b; a◌̴◌़◌᯦◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BATAK SIGN TOMPI, LATIN SMALL LETTER B 0061 1BE6 3099 093C 0334 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062; # (a◌᯦◌゙◌़◌̴b; a◌̴◌᯦◌़◌゙b; a◌̴◌᯦◌़◌゙b; a◌̴◌᯦◌़◌゙b; a◌̴◌᯦◌़◌゙b; ) LATIN SMALL LETTER A, BATAK SIGN TOMPI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1BF2 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062; # (a◌ְ◌्◌゙᯲b; a◌゙◌्᯲◌ְb; a◌゙◌्᯲◌ְb; a◌゙◌्᯲◌ְb; a◌゙◌्᯲◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BATAK PANGOLAT, LATIN SMALL LETTER B 0061 1BF2 05B0 094D 3099 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062; # (a᯲◌ְ◌्◌゙b; a◌゙᯲◌्◌ְb; a◌゙᯲◌्◌ְb; a◌゙᯲◌्◌ְb; a◌゙᯲◌्◌ְb; ) LATIN SMALL LETTER A, BATAK PANGOLAT, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 1BF3 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062; # (a◌ְ◌्◌゙᯳b; a◌゙◌्᯳◌ְb; a◌゙◌्᯳◌ְb; a◌゙◌्᯳◌ְb; a◌゙◌्᯳◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BATAK PANONGONAN, LATIN SMALL LETTER B 0061 1BF3 05B0 094D 3099 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062; # (a᯳◌ְ◌्◌゙b; a◌゙᯳◌्◌ְb; a◌゙᯳◌्◌ְb; a◌゙᯳◌्◌ְb; a◌゙᯳◌्◌ְb; ) LATIN SMALL LETTER A, BATAK PANONGONAN, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1C37 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062; # (a◌゙◌़◌̴◌᰷b; a◌̴◌़◌᰷◌゙b; a◌̴◌़◌᰷◌゙b; a◌̴◌़◌᰷◌゙b; a◌̴◌़◌᰷◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LEPCHA SIGN NUKTA, LATIN SMALL LETTER B 0061 1C37 3099 093C 0334 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062; # (a◌᰷◌゙◌़◌̴b; a◌̴◌᰷◌़◌゙b; a◌̴◌᰷◌़◌゙b; a◌̴◌᰷◌़◌゙b; a◌̴◌᰷◌़◌゙b; ) LATIN SMALL LETTER A, LEPCHA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CD0 0062;00E0 05AE 1CD0 0315 0062;0061 05AE 0300 1CD0 0315 0062;00E0 05AE 1CD0 0315 0062;0061 05AE 0300 1CD0 0315 0062; # (a◌̕◌̀◌֮◌᳐b; à◌֮◌᳐◌̕b; a◌֮◌̀◌᳐◌̕b; à◌֮◌᳐◌̕b; a◌֮◌̀◌᳐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE KARSHANA, LATIN SMALL LETTER B 0061 1CD0 0315 0300 05AE 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062; # (a◌᳐◌̕◌̀◌֮b; a◌֮◌᳐◌̀◌̕b; a◌֮◌᳐◌̀◌̕b; a◌֮◌᳐◌̀◌̕b; a◌֮◌᳐◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE KARSHANA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CD1 0062;00E0 05AE 1CD1 0315 0062;0061 05AE 0300 1CD1 0315 0062;00E0 05AE 1CD1 0315 0062;0061 05AE 0300 1CD1 0315 0062; # (a◌̕◌̀◌֮◌᳑b; à◌֮◌᳑◌̕b; a◌֮◌̀◌᳑◌̕b; à◌֮◌᳑◌̕b; a◌֮◌̀◌᳑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE SHARA, LATIN SMALL LETTER B 0061 1CD1 0315 0300 05AE 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062; # (a◌᳑◌̕◌̀◌֮b; a◌֮◌᳑◌̀◌̕b; a◌֮◌᳑◌̀◌̕b; a◌֮◌᳑◌̀◌̕b; a◌֮◌᳑◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE SHARA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CD2 0062;00E0 05AE 1CD2 0315 0062;0061 05AE 0300 1CD2 0315 0062;00E0 05AE 1CD2 0315 0062;0061 05AE 0300 1CD2 0315 0062; # (a◌̕◌̀◌֮◌᳒b; à◌֮◌᳒◌̕b; a◌֮◌̀◌᳒◌̕b; à◌֮◌᳒◌̕b; a◌֮◌̀◌᳒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE PRENKHA, LATIN SMALL LETTER B 0061 1CD2 0315 0300 05AE 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062; # (a◌᳒◌̕◌̀◌֮b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; a◌֮◌᳒◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE PRENKHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 1CD4 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062; # (a◌़◌̴◌᳔b; a◌̴◌᳔◌़b; a◌̴◌᳔◌़b; a◌̴◌᳔◌़b; a◌̴◌᳔◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN YAJURVEDIC MIDLINE SVARITA, LATIN SMALL LETTER B 0061 1CD4 093C 0334 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062; # (a◌᳔◌़◌̴b; a◌᳔◌̴◌़b; a◌᳔◌̴◌़b; a◌᳔◌̴◌़b; a◌᳔◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN YAJURVEDIC MIDLINE SVARITA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 059A 0316 302A 1CD5 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062; # (a◌֚◌̖◌〪◌᳕b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; a◌〪◌̖◌᳕◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, LATIN SMALL LETTER B 0061 1CD5 059A 0316 302A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062; # (a◌᳕◌֚◌̖◌〪b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; a◌〪◌᳕◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CD6 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062; # (a◌֚◌̖◌〪◌᳖b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; a◌〪◌̖◌᳖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, LATIN SMALL LETTER B 0061 1CD6 059A 0316 302A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062; # (a◌᳖◌֚◌̖◌〪b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; a◌〪◌᳖◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CD7 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062; # (a◌֚◌̖◌〪◌᳗b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; a◌〪◌̖◌᳗◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, LATIN SMALL LETTER B 0061 1CD7 059A 0316 302A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062; # (a◌᳗◌֚◌̖◌〪b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; a◌〪◌᳗◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CD8 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062; # (a◌֚◌̖◌〪◌᳘b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; a◌〪◌̖◌᳘◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE CANDRA BELOW, LATIN SMALL LETTER B 0061 1CD8 059A 0316 302A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062; # (a◌᳘◌֚◌̖◌〪b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; a◌〪◌᳘◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE CANDRA BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CD9 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062; # (a◌֚◌̖◌〪◌᳙b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; a◌〪◌̖◌᳙◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, LATIN SMALL LETTER B 0061 1CD9 059A 0316 302A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062; # (a◌᳙◌֚◌̖◌〪b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; a◌〪◌᳙◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CDA 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 0315 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 0315 0062; # (a◌̕◌̀◌֮◌᳚b; à◌֮◌᳚◌̕b; a◌֮◌̀◌᳚◌̕b; à◌֮◌᳚◌̕b; a◌֮◌̀◌᳚◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE DOUBLE SVARITA, LATIN SMALL LETTER B 0061 1CDA 0315 0300 05AE 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062; # (a◌᳚◌̕◌̀◌֮b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; a◌֮◌᳚◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE DOUBLE SVARITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CDB 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 0315 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 0315 0062; # (a◌̕◌̀◌֮◌᳛b; à◌֮◌᳛◌̕b; a◌֮◌̀◌᳛◌̕b; à◌֮◌᳛◌̕b; a◌֮◌̀◌᳛◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE TRIPLE SVARITA, LATIN SMALL LETTER B 0061 1CDB 0315 0300 05AE 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062; # (a◌᳛◌̕◌̀◌֮b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; a◌֮◌᳛◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE TRIPLE SVARITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1CDC 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062; # (a◌֚◌̖◌〪◌᳜b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; a◌〪◌̖◌᳜◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE KATHAKA ANUDATTA, LATIN SMALL LETTER B 0061 1CDC 059A 0316 302A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062; # (a◌᳜◌֚◌̖◌〪b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; a◌〪◌᳜◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE KATHAKA ANUDATTA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CDD 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062; # (a◌֚◌̖◌〪◌᳝b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; a◌〪◌̖◌᳝◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE DOT BELOW, LATIN SMALL LETTER B 0061 1CDD 059A 0316 302A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062; # (a◌᳝◌֚◌̖◌〪b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; a◌〪◌᳝◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CDE 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062; # (a◌֚◌̖◌〪◌᳞b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; a◌〪◌̖◌᳞◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE TWO DOTS BELOW, LATIN SMALL LETTER B 0061 1CDE 059A 0316 302A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062; # (a◌᳞◌֚◌̖◌〪b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; a◌〪◌᳞◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE TWO DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1CDF 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062; # (a◌֚◌̖◌〪◌᳟b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; a◌〪◌̖◌᳟◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC TONE THREE DOTS BELOW, LATIN SMALL LETTER B 0061 1CDF 059A 0316 302A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062; # (a◌᳟◌֚◌̖◌〪b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; a◌〪◌᳟◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC TONE THREE DOTS BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CE0 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062; # (a◌̕◌̀◌֮◌᳠b; à◌֮◌᳠◌̕b; a◌֮◌̀◌᳠◌̕b; à◌֮◌᳠◌̕b; a◌֮◌̀◌᳠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA, LATIN SMALL LETTER B 0061 1CE0 0315 0300 05AE 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062; # (a◌᳠◌̕◌̀◌֮b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; a◌֮◌᳠◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 1CE2 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062; # (a◌़◌̴◌᳢b; a◌̴◌᳢◌़b; a◌̴◌᳢◌़b; a◌̴◌᳢◌़b; a◌̴◌᳢◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA SVARITA, LATIN SMALL LETTER B 0061 1CE2 093C 0334 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062; # (a◌᳢◌़◌̴b; a◌᳢◌̴◌़b; a◌᳢◌̴◌़b; a◌᳢◌̴◌़b; a◌᳢◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA SVARITA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE3 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062; # (a◌़◌̴◌᳣b; a◌̴◌᳣◌़b; a◌̴◌᳣◌़b; a◌̴◌᳣◌़b; a◌̴◌᳣◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA UDATTA, LATIN SMALL LETTER B 0061 1CE3 093C 0334 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062; # (a◌᳣◌़◌̴b; a◌᳣◌̴◌़b; a◌᳣◌̴◌़b; a◌᳣◌̴◌़b; a◌᳣◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA UDATTA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE4 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062; # (a◌़◌̴◌᳤b; a◌̴◌᳤◌़b; a◌̴◌᳤◌़b; a◌̴◌᳤◌़b; a◌̴◌᳤◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN REVERSED VISARGA UDATTA, LATIN SMALL LETTER B 0061 1CE4 093C 0334 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062; # (a◌᳤◌़◌̴b; a◌᳤◌̴◌़b; a◌᳤◌̴◌़b; a◌᳤◌̴◌़b; a◌᳤◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN REVERSED VISARGA UDATTA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE5 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062; # (a◌़◌̴◌᳥b; a◌̴◌᳥◌़b; a◌̴◌᳥◌़b; a◌̴◌᳥◌़b; a◌̴◌᳥◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA ANUDATTA, LATIN SMALL LETTER B 0061 1CE5 093C 0334 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062; # (a◌᳥◌़◌̴b; a◌᳥◌̴◌़b; a◌᳥◌̴◌़b; a◌᳥◌̴◌़b; a◌᳥◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA ANUDATTA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE6 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062; # (a◌़◌̴◌᳦b; a◌̴◌᳦◌़b; a◌̴◌᳦◌़b; a◌̴◌᳦◌़b; a◌̴◌᳦◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN REVERSED VISARGA ANUDATTA, LATIN SMALL LETTER B 0061 1CE6 093C 0334 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062; # (a◌᳦◌़◌̴b; a◌᳦◌̴◌़b; a◌᳦◌̴◌़b; a◌᳦◌̴◌़b; a◌᳦◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN REVERSED VISARGA ANUDATTA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE7 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062; # (a◌़◌̴◌᳧b; a◌̴◌᳧◌़b; a◌̴◌᳧◌़b; a◌̴◌᳧◌़b; a◌̴◌᳧◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA UDATTA WITH TAIL, LATIN SMALL LETTER B 0061 1CE7 093C 0334 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062; # (a◌᳧◌़◌̴b; a◌᳧◌̴◌़b; a◌᳧◌̴◌़b; a◌᳧◌̴◌़b; a◌᳧◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA UDATTA WITH TAIL, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1CE8 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062; # (a◌़◌̴◌᳨b; a◌̴◌᳨◌़b; a◌̴◌᳨◌़b; a◌̴◌᳨◌़b; a◌̴◌᳨◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, VEDIC SIGN VISARGA ANUDATTA WITH TAIL, LATIN SMALL LETTER B 0061 1CE8 093C 0334 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062; # (a◌᳨◌़◌̴b; a◌᳨◌̴◌़b; a◌᳨◌̴◌़b; a◌᳨◌̴◌़b; a◌᳨◌̴◌़b; ) LATIN SMALL LETTER A, VEDIC SIGN VISARGA ANUDATTA WITH TAIL, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 059A 0316 302A 1CED 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062; # (a◌֚◌̖◌〪◌᳭b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; a◌〪◌̖◌᳭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, VEDIC SIGN TIRYAK, LATIN SMALL LETTER B 0061 1CED 059A 0316 302A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062; # (a◌᳭◌֚◌̖◌〪b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; a◌〪◌᳭◌̖◌֚b; ) LATIN SMALL LETTER A, VEDIC SIGN TIRYAK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CF4 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062; # (a◌̕◌̀◌֮◌᳴b; à◌֮◌᳴◌̕b; a◌֮◌̀◌᳴◌̕b; à◌֮◌᳴◌̕b; a◌֮◌̀◌᳴◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE CANDRA ABOVE, LATIN SMALL LETTER B 0061 1CF4 0315 0300 05AE 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062; # (a◌᳴◌̕◌̀◌֮b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; a◌֮◌᳴◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE CANDRA ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CF8 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 0315 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 0315 0062; # (a◌̕◌̀◌֮◌᳸b; à◌֮◌᳸◌̕b; a◌֮◌̀◌᳸◌̕b; à◌֮◌᳸◌̕b; a◌֮◌̀◌᳸◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE RING ABOVE, LATIN SMALL LETTER B 0061 1CF8 0315 0300 05AE 0062;0061 05AE 1CF8 0300 0315 0062;0061 05AE 1CF8 0300 0315 0062;0061 05AE 1CF8 0300 0315 0062;0061 05AE 1CF8 0300 0315 0062; # (a◌᳸◌̕◌̀◌֮b; a◌֮◌᳸◌̀◌̕b; a◌֮◌᳸◌̀◌̕b; a◌֮◌᳸◌̀◌̕b; a◌֮◌᳸◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1CF9 0062;00E0 05AE 1CF9 0315 0062;0061 05AE 0300 1CF9 0315 0062;00E0 05AE 1CF9 0315 0062;0061 05AE 0300 1CF9 0315 0062; # (a◌̕◌̀◌֮◌᳹b; à◌֮◌᳹◌̕b; a◌֮◌̀◌᳹◌̕b; à◌֮◌᳹◌̕b; a◌֮◌̀◌᳹◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, VEDIC TONE DOUBLE RING ABOVE, LATIN SMALL LETTER B 0061 1CF9 0315 0300 05AE 0062;0061 05AE 1CF9 0300 0315 0062;0061 05AE 1CF9 0300 0315 0062;0061 05AE 1CF9 0300 0315 0062;0061 05AE 1CF9 0300 0315 0062; # (a◌᳹◌̕◌̀◌֮b; a◌֮◌᳹◌̀◌̕b; a◌֮◌᳹◌̀◌̕b; a◌֮◌᳹◌̀◌̕b; a◌֮◌᳹◌̀◌̕b; ) LATIN SMALL LETTER A, VEDIC TONE DOUBLE RING ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC0 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062; # (a◌̕◌̀◌֮◌᷀b; à◌֮◌᷀◌̕b; a◌֮◌̀◌᷀◌̕b; à◌֮◌᷀◌̕b; a◌֮◌̀◌᷀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOTTED GRAVE ACCENT, LATIN SMALL LETTER B 0061 1DC0 0315 0300 05AE 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062; # (a◌᷀◌̕◌̀◌֮b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; a◌֮◌᷀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOTTED GRAVE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC1 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062; # (a◌̕◌̀◌֮◌᷁b; à◌֮◌᷁◌̕b; a◌֮◌̀◌᷁◌̕b; à◌֮◌᷁◌̕b; a◌֮◌̀◌᷁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOTTED ACUTE ACCENT, LATIN SMALL LETTER B 0061 1DC1 0315 0300 05AE 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062; # (a◌᷁◌̕◌̀◌֮b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; a◌֮◌᷁◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOTTED ACUTE ACCENT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1DC2 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062; # (a◌֚◌̖◌〪◌᷂b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; a◌〪◌̖◌᷂◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING SNAKE BELOW, LATIN SMALL LETTER B 0061 1DC2 059A 0316 302A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062; # (a◌᷂◌֚◌̖◌〪b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; a◌〪◌᷂◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING SNAKE BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC3 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062; # (a◌̕◌̀◌֮◌᷃b; à◌֮◌᷃◌̕b; a◌֮◌̀◌᷃◌̕b; à◌֮◌᷃◌̕b; a◌֮◌̀◌᷃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING SUSPENSION MARK, LATIN SMALL LETTER B 0061 1DC3 0315 0300 05AE 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062; # (a◌᷃◌̕◌̀◌֮b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; a◌֮◌᷃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING SUSPENSION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC4 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062; # (a◌̕◌̀◌֮◌᷄b; à◌֮◌᷄◌̕b; a◌֮◌̀◌᷄◌̕b; à◌֮◌᷄◌̕b; a◌֮◌̀◌᷄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON-ACUTE, LATIN SMALL LETTER B 0061 1DC4 0315 0300 05AE 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062; # (a◌᷄◌̕◌̀◌֮b; a◌֮◌᷄◌̀◌̕b; a◌֮◌᷄◌̀◌̕b; a◌֮◌᷄◌̀◌̕b; a◌֮◌᷄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON-ACUTE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC5 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062; # (a◌̕◌̀◌֮◌᷅b; à◌֮◌᷅◌̕b; a◌֮◌̀◌᷅◌̕b; à◌֮◌᷅◌̕b; a◌֮◌̀◌᷅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE-MACRON, LATIN SMALL LETTER B 0061 1DC5 0315 0300 05AE 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062; # (a◌᷅◌̕◌̀◌֮b; a◌֮◌᷅◌̀◌̕b; a◌֮◌᷅◌̀◌̕b; a◌֮◌᷅◌̀◌̕b; a◌֮◌᷅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE-MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC6 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062; # (a◌̕◌̀◌֮◌᷆b; à◌֮◌᷆◌̕b; a◌֮◌̀◌᷆◌̕b; à◌֮◌᷆◌̕b; a◌֮◌̀◌᷆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON-GRAVE, LATIN SMALL LETTER B 0061 1DC6 0315 0300 05AE 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062; # (a◌᷆◌̕◌̀◌֮b; a◌֮◌᷆◌̀◌̕b; a◌֮◌᷆◌̀◌̕b; a◌֮◌᷆◌̀◌̕b; a◌֮◌᷆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC7 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062; # (a◌̕◌̀◌֮◌᷇b; à◌֮◌᷇◌̕b; a◌֮◌̀◌᷇◌̕b; à◌֮◌᷇◌̕b; a◌֮◌̀◌᷇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE-MACRON, LATIN SMALL LETTER B 0061 1DC7 0315 0300 05AE 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062; # (a◌᷇◌̕◌̀◌֮b; a◌֮◌᷇◌̀◌̕b; a◌֮◌᷇◌̀◌̕b; a◌֮◌᷇◌̀◌̕b; a◌֮◌᷇◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE-MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC8 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062; # (a◌̕◌̀◌֮◌᷈b; à◌֮◌᷈◌̕b; a◌֮◌̀◌᷈◌̕b; à◌֮◌᷈◌̕b; a◌֮◌̀◌᷈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRAVE-ACUTE-GRAVE, LATIN SMALL LETTER B 0061 1DC8 0315 0300 05AE 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062; # (a◌᷈◌̕◌̀◌֮b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; a◌֮◌᷈◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRAVE-ACUTE-GRAVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DC9 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062; # (a◌̕◌̀◌֮◌᷉b; à◌֮◌᷉◌̕b; a◌֮◌̀◌᷉◌̕b; à◌֮◌᷉◌̕b; a◌֮◌̀◌᷉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ACUTE-GRAVE-ACUTE, LATIN SMALL LETTER B 0061 1DC9 0315 0300 05AE 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062; # (a◌᷉◌̕◌̀◌֮b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; a◌֮◌᷉◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ACUTE-GRAVE-ACUTE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1DCA 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062; # (a◌֚◌̖◌〪◌᷊b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; a◌〪◌̖◌᷊◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LATIN SMALL LETTER R BELOW, LATIN SMALL LETTER B 0061 1DCA 059A 0316 302A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062; # (a◌᷊◌֚◌̖◌〪b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; a◌〪◌᷊◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER R BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DCB 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062; # (a◌̕◌̀◌֮◌᷋b; à◌֮◌᷋◌̕b; a◌֮◌̀◌᷋◌̕b; à◌֮◌᷋◌̕b; a◌֮◌̀◌᷋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING BREVE-MACRON, LATIN SMALL LETTER B 0061 1DCB 0315 0300 05AE 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062; # (a◌᷋◌̕◌̀◌֮b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; a◌֮◌᷋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING BREVE-MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DCC 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062; # (a◌̕◌̀◌֮◌᷌b; à◌֮◌᷌◌̕b; a◌֮◌̀◌᷌◌̕b; à◌֮◌᷌◌̕b; a◌֮◌̀◌᷌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON-BREVE, LATIN SMALL LETTER B 0061 1DCC 0315 0300 05AE 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062; # (a◌᷌◌̕◌̀◌֮b; a◌֮◌᷌◌̀◌̕b; a◌֮◌᷌◌̀◌̕b; a◌֮◌᷌◌̀◌̕b; a◌֮◌᷌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON-BREVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0345 035D 035C 1DCD 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062; # (a◌ͅ◌͝◌͜◌᷍b; a◌͜◌͝◌᷍◌ͅb; a◌͜◌͝◌᷍◌ͅb; a◌͜◌͝◌᷍◌ͅb; a◌͜◌͝◌᷍◌ͅb; ) LATIN SMALL LETTER A, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING DOUBLE CIRCUMFLEX ABOVE, LATIN SMALL LETTER B 0061 1DCD 0345 035D 035C 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062; # (a◌᷍◌ͅ◌͝◌͜b; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; a◌͜◌᷍◌͝◌ͅb; ) LATIN SMALL LETTER A, COMBINING DOUBLE CIRCUMFLEX ABOVE, COMBINING GREEK YPOGEGRAMMENI, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, LATIN SMALL LETTER B 0061 031B 1DCE 0321 1DCE 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; # (a◌̛◌᷎◌̡◌᷎b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; ) LATIN SMALL LETTER A, COMBINING HORN, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 1DCE 031B 1DCE 0321 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; # (a◌᷎◌̛◌᷎◌̡b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; a◌̡◌᷎◌᷎◌̛b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING HORN, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, LATIN SMALL LETTER B 0061 059A 0316 302A 1DCF 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062; # (a◌֚◌̖◌〪◌᷏b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; a◌〪◌̖◌᷏◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING ZIGZAG BELOW, LATIN SMALL LETTER B 0061 1DCF 059A 0316 302A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062; # (a◌᷏◌֚◌̖◌〪b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; a◌〪◌᷏◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING ZIGZAG BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 1DCE 0321 0F74 1DD0 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062; # (a◌᷎◌̡◌ུ◌᷐b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; a◌ུ◌̡◌᷐◌᷎b; ) LATIN SMALL LETTER A, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, COMBINING IS BELOW, LATIN SMALL LETTER B 0061 1DD0 1DCE 0321 0F74 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062; # (a◌᷐◌᷎◌̡◌ུb; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; a◌ུ◌᷐◌̡◌᷎b; ) LATIN SMALL LETTER A, COMBINING IS BELOW, COMBINING OGONEK ABOVE, COMBINING PALATALIZED HOOK BELOW, TIBETAN VOWEL SIGN U, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD1 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062; # (a◌̕◌̀◌֮◌᷑b; à◌֮◌᷑◌̕b; a◌֮◌̀◌᷑◌̕b; à◌֮◌᷑◌̕b; a◌֮◌̀◌᷑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING UR ABOVE, LATIN SMALL LETTER B 0061 1DD1 0315 0300 05AE 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062; # (a◌᷑◌̕◌̀◌֮b; a◌֮◌᷑◌̀◌̕b; a◌֮◌᷑◌̀◌̕b; a◌֮◌᷑◌̀◌̕b; a◌֮◌᷑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING UR ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD2 0062;00E0 05AE 1DD2 0315 0062;0061 05AE 0300 1DD2 0315 0062;00E0 05AE 1DD2 0315 0062;0061 05AE 0300 1DD2 0315 0062; # (a◌̕◌̀◌֮◌᷒b; à◌֮◌᷒◌̕b; a◌֮◌̀◌᷒◌̕b; à◌֮◌᷒◌̕b; a◌֮◌̀◌᷒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING US ABOVE, LATIN SMALL LETTER B 0061 1DD2 0315 0300 05AE 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062; # (a◌᷒◌̕◌̀◌֮b; a◌֮◌᷒◌̀◌̕b; a◌֮◌᷒◌̀◌̕b; a◌֮◌᷒◌̀◌̕b; a◌֮◌᷒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING US ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD3 0062;00E0 05AE 1DD3 0315 0062;0061 05AE 0300 1DD3 0315 0062;00E0 05AE 1DD3 0315 0062;0061 05AE 0300 1DD3 0315 0062; # (a◌̕◌̀◌֮◌ᷓb; à◌֮◌ᷓ◌̕b; a◌֮◌̀◌ᷓ◌̕b; à◌֮◌ᷓ◌̕b; a◌֮◌̀◌ᷓ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE, LATIN SMALL LETTER B 0061 1DD3 0315 0300 05AE 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062; # (a◌ᷓ◌̕◌̀◌֮b; a◌֮◌ᷓ◌̀◌̕b; a◌֮◌ᷓ◌̀◌̕b; a◌֮◌ᷓ◌̀◌̕b; a◌֮◌ᷓ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD4 0062;00E0 05AE 1DD4 0315 0062;0061 05AE 0300 1DD4 0315 0062;00E0 05AE 1DD4 0315 0062;0061 05AE 0300 1DD4 0315 0062; # (a◌̕◌̀◌֮◌ᷔb; à◌֮◌ᷔ◌̕b; a◌֮◌̀◌ᷔ◌̕b; à◌֮◌ᷔ◌̕b; a◌֮◌̀◌ᷔ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER AE, LATIN SMALL LETTER B 0061 1DD4 0315 0300 05AE 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062; # (a◌ᷔ◌̕◌̀◌֮b; a◌֮◌ᷔ◌̀◌̕b; a◌֮◌ᷔ◌̀◌̕b; a◌֮◌ᷔ◌̀◌̕b; a◌֮◌ᷔ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER AE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD5 0062;00E0 05AE 1DD5 0315 0062;0061 05AE 0300 1DD5 0315 0062;00E0 05AE 1DD5 0315 0062;0061 05AE 0300 1DD5 0315 0062; # (a◌̕◌̀◌֮◌ᷕb; à◌֮◌ᷕ◌̕b; a◌֮◌̀◌ᷕ◌̕b; à◌֮◌ᷕ◌̕b; a◌֮◌̀◌ᷕ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER AO, LATIN SMALL LETTER B 0061 1DD5 0315 0300 05AE 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062; # (a◌ᷕ◌̕◌̀◌֮b; a◌֮◌ᷕ◌̀◌̕b; a◌֮◌ᷕ◌̀◌̕b; a◌֮◌ᷕ◌̀◌̕b; a◌֮◌ᷕ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER AO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD6 0062;00E0 05AE 1DD6 0315 0062;0061 05AE 0300 1DD6 0315 0062;00E0 05AE 1DD6 0315 0062;0061 05AE 0300 1DD6 0315 0062; # (a◌̕◌̀◌֮◌ᷖb; à◌֮◌ᷖ◌̕b; a◌֮◌̀◌ᷖ◌̕b; à◌֮◌ᷖ◌̕b; a◌֮◌̀◌ᷖ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER AV, LATIN SMALL LETTER B 0061 1DD6 0315 0300 05AE 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062; # (a◌ᷖ◌̕◌̀◌֮b; a◌֮◌ᷖ◌̀◌̕b; a◌֮◌ᷖ◌̀◌̕b; a◌֮◌ᷖ◌̀◌̕b; a◌֮◌ᷖ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER AV, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD7 0062;00E0 05AE 1DD7 0315 0062;0061 05AE 0300 1DD7 0315 0062;00E0 05AE 1DD7 0315 0062;0061 05AE 0300 1DD7 0315 0062; # (a◌̕◌̀◌֮◌ᷗb; à◌֮◌ᷗ◌̕b; a◌֮◌̀◌ᷗ◌̕b; à◌֮◌ᷗ◌̕b; a◌֮◌̀◌ᷗ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER C CEDILLA, LATIN SMALL LETTER B 0061 1DD7 0315 0300 05AE 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062; # (a◌ᷗ◌̕◌̀◌֮b; a◌֮◌ᷗ◌̀◌̕b; a◌֮◌ᷗ◌̀◌̕b; a◌֮◌ᷗ◌̀◌̕b; a◌֮◌ᷗ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER C CEDILLA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD8 0062;00E0 05AE 1DD8 0315 0062;0061 05AE 0300 1DD8 0315 0062;00E0 05AE 1DD8 0315 0062;0061 05AE 0300 1DD8 0315 0062; # (a◌̕◌̀◌֮◌ᷘb; à◌֮◌ᷘ◌̕b; a◌֮◌̀◌ᷘ◌̕b; à◌֮◌ᷘ◌̕b; a◌֮◌̀◌ᷘ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER INSULAR D, LATIN SMALL LETTER B 0061 1DD8 0315 0300 05AE 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062; # (a◌ᷘ◌̕◌̀◌֮b; a◌֮◌ᷘ◌̀◌̕b; a◌֮◌ᷘ◌̀◌̕b; a◌֮◌ᷘ◌̀◌̕b; a◌֮◌ᷘ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER INSULAR D, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DD9 0062;00E0 05AE 1DD9 0315 0062;0061 05AE 0300 1DD9 0315 0062;00E0 05AE 1DD9 0315 0062;0061 05AE 0300 1DD9 0315 0062; # (a◌̕◌̀◌֮◌ᷙb; à◌֮◌ᷙ◌̕b; a◌֮◌̀◌ᷙ◌̕b; à◌֮◌ᷙ◌̕b; a◌֮◌̀◌ᷙ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER ETH, LATIN SMALL LETTER B 0061 1DD9 0315 0300 05AE 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062; # (a◌ᷙ◌̕◌̀◌֮b; a◌֮◌ᷙ◌̀◌̕b; a◌֮◌ᷙ◌̀◌̕b; a◌֮◌ᷙ◌̀◌̕b; a◌֮◌ᷙ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER ETH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDA 0062;00E0 05AE 1DDA 0315 0062;0061 05AE 0300 1DDA 0315 0062;00E0 05AE 1DDA 0315 0062;0061 05AE 0300 1DDA 0315 0062; # (a◌̕◌̀◌֮◌ᷚb; à◌֮◌ᷚ◌̕b; a◌֮◌̀◌ᷚ◌̕b; à◌֮◌ᷚ◌̕b; a◌֮◌̀◌ᷚ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER G, LATIN SMALL LETTER B 0061 1DDA 0315 0300 05AE 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062; # (a◌ᷚ◌̕◌̀◌֮b; a◌֮◌ᷚ◌̀◌̕b; a◌֮◌ᷚ◌̀◌̕b; a◌֮◌ᷚ◌̀◌̕b; a◌֮◌ᷚ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER G, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDB 0062;00E0 05AE 1DDB 0315 0062;0061 05AE 0300 1DDB 0315 0062;00E0 05AE 1DDB 0315 0062;0061 05AE 0300 1DDB 0315 0062; # (a◌̕◌̀◌֮◌ᷛb; à◌֮◌ᷛ◌̕b; a◌֮◌̀◌ᷛ◌̕b; à◌֮◌ᷛ◌̕b; a◌֮◌̀◌ᷛ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN LETTER SMALL CAPITAL G, LATIN SMALL LETTER B 0061 1DDB 0315 0300 05AE 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062; # (a◌ᷛ◌̕◌̀◌֮b; a◌֮◌ᷛ◌̀◌̕b; a◌֮◌ᷛ◌̀◌̕b; a◌֮◌ᷛ◌̀◌̕b; a◌֮◌ᷛ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN LETTER SMALL CAPITAL G, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDC 0062;00E0 05AE 1DDC 0315 0062;0061 05AE 0300 1DDC 0315 0062;00E0 05AE 1DDC 0315 0062;0061 05AE 0300 1DDC 0315 0062; # (a◌̕◌̀◌֮◌ᷜb; à◌֮◌ᷜ◌̕b; a◌֮◌̀◌ᷜ◌̕b; à◌֮◌ᷜ◌̕b; a◌֮◌̀◌ᷜ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER K, LATIN SMALL LETTER B 0061 1DDC 0315 0300 05AE 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062; # (a◌ᷜ◌̕◌̀◌֮b; a◌֮◌ᷜ◌̀◌̕b; a◌֮◌ᷜ◌̀◌̕b; a◌֮◌ᷜ◌̀◌̕b; a◌֮◌ᷜ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER K, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDD 0062;00E0 05AE 1DDD 0315 0062;0061 05AE 0300 1DDD 0315 0062;00E0 05AE 1DDD 0315 0062;0061 05AE 0300 1DDD 0315 0062; # (a◌̕◌̀◌֮◌ᷝb; à◌֮◌ᷝ◌̕b; a◌֮◌̀◌ᷝ◌̕b; à◌֮◌ᷝ◌̕b; a◌֮◌̀◌ᷝ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER L, LATIN SMALL LETTER B 0061 1DDD 0315 0300 05AE 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062; # (a◌ᷝ◌̕◌̀◌֮b; a◌֮◌ᷝ◌̀◌̕b; a◌֮◌ᷝ◌̀◌̕b; a◌֮◌ᷝ◌̀◌̕b; a◌֮◌ᷝ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER L, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDE 0062;00E0 05AE 1DDE 0315 0062;0061 05AE 0300 1DDE 0315 0062;00E0 05AE 1DDE 0315 0062;0061 05AE 0300 1DDE 0315 0062; # (a◌̕◌̀◌֮◌ᷞb; à◌֮◌ᷞ◌̕b; a◌֮◌̀◌ᷞ◌̕b; à◌֮◌ᷞ◌̕b; a◌֮◌̀◌ᷞ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN LETTER SMALL CAPITAL L, LATIN SMALL LETTER B 0061 1DDE 0315 0300 05AE 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062; # (a◌ᷞ◌̕◌̀◌֮b; a◌֮◌ᷞ◌̀◌̕b; a◌֮◌ᷞ◌̀◌̕b; a◌֮◌ᷞ◌̀◌̕b; a◌֮◌ᷞ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN LETTER SMALL CAPITAL L, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DDF 0062;00E0 05AE 1DDF 0315 0062;0061 05AE 0300 1DDF 0315 0062;00E0 05AE 1DDF 0315 0062;0061 05AE 0300 1DDF 0315 0062; # (a◌̕◌̀◌֮◌ᷟb; à◌֮◌ᷟ◌̕b; a◌֮◌̀◌ᷟ◌̕b; à◌֮◌ᷟ◌̕b; a◌֮◌̀◌ᷟ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN LETTER SMALL CAPITAL M, LATIN SMALL LETTER B 0061 1DDF 0315 0300 05AE 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062; # (a◌ᷟ◌̕◌̀◌֮b; a◌֮◌ᷟ◌̀◌̕b; a◌֮◌ᷟ◌̀◌̕b; a◌֮◌ᷟ◌̀◌̕b; a◌֮◌ᷟ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN LETTER SMALL CAPITAL M, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE0 0062;00E0 05AE 1DE0 0315 0062;0061 05AE 0300 1DE0 0315 0062;00E0 05AE 1DE0 0315 0062;0061 05AE 0300 1DE0 0315 0062; # (a◌̕◌̀◌֮◌ᷠb; à◌֮◌ᷠ◌̕b; a◌֮◌̀◌ᷠ◌̕b; à◌֮◌ᷠ◌̕b; a◌֮◌̀◌ᷠ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER N, LATIN SMALL LETTER B 0061 1DE0 0315 0300 05AE 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062; # (a◌ᷠ◌̕◌̀◌֮b; a◌֮◌ᷠ◌̀◌̕b; a◌֮◌ᷠ◌̀◌̕b; a◌֮◌ᷠ◌̀◌̕b; a◌֮◌ᷠ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER N, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE1 0062;00E0 05AE 1DE1 0315 0062;0061 05AE 0300 1DE1 0315 0062;00E0 05AE 1DE1 0315 0062;0061 05AE 0300 1DE1 0315 0062; # (a◌̕◌̀◌֮◌ᷡb; à◌֮◌ᷡ◌̕b; a◌֮◌̀◌ᷡ◌̕b; à◌֮◌ᷡ◌̕b; a◌֮◌̀◌ᷡ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN LETTER SMALL CAPITAL N, LATIN SMALL LETTER B 0061 1DE1 0315 0300 05AE 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062; # (a◌ᷡ◌̕◌̀◌֮b; a◌֮◌ᷡ◌̀◌̕b; a◌֮◌ᷡ◌̀◌̕b; a◌֮◌ᷡ◌̀◌̕b; a◌֮◌ᷡ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN LETTER SMALL CAPITAL N, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE2 0062;00E0 05AE 1DE2 0315 0062;0061 05AE 0300 1DE2 0315 0062;00E0 05AE 1DE2 0315 0062;0061 05AE 0300 1DE2 0315 0062; # (a◌̕◌̀◌֮◌ᷢb; à◌֮◌ᷢ◌̕b; a◌֮◌̀◌ᷢ◌̕b; à◌֮◌ᷢ◌̕b; a◌֮◌̀◌ᷢ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN LETTER SMALL CAPITAL R, LATIN SMALL LETTER B 0061 1DE2 0315 0300 05AE 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062; # (a◌ᷢ◌̕◌̀◌֮b; a◌֮◌ᷢ◌̀◌̕b; a◌֮◌ᷢ◌̀◌̕b; a◌֮◌ᷢ◌̀◌̕b; a◌֮◌ᷢ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN LETTER SMALL CAPITAL R, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE3 0062;00E0 05AE 1DE3 0315 0062;0061 05AE 0300 1DE3 0315 0062;00E0 05AE 1DE3 0315 0062;0061 05AE 0300 1DE3 0315 0062; # (a◌̕◌̀◌֮◌ᷣb; à◌֮◌ᷣ◌̕b; a◌֮◌̀◌ᷣ◌̕b; à◌֮◌ᷣ◌̕b; a◌֮◌̀◌ᷣ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER R ROTUNDA, LATIN SMALL LETTER B 0061 1DE3 0315 0300 05AE 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062; # (a◌ᷣ◌̕◌̀◌֮b; a◌֮◌ᷣ◌̀◌̕b; a◌֮◌ᷣ◌̀◌̕b; a◌֮◌ᷣ◌̀◌̕b; a◌֮◌ᷣ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER R ROTUNDA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE4 0062;00E0 05AE 1DE4 0315 0062;0061 05AE 0300 1DE4 0315 0062;00E0 05AE 1DE4 0315 0062;0061 05AE 0300 1DE4 0315 0062; # (a◌̕◌̀◌֮◌ᷤb; à◌֮◌ᷤ◌̕b; a◌֮◌̀◌ᷤ◌̕b; à◌֮◌ᷤ◌̕b; a◌֮◌̀◌ᷤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER S, LATIN SMALL LETTER B 0061 1DE4 0315 0300 05AE 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062; # (a◌ᷤ◌̕◌̀◌֮b; a◌֮◌ᷤ◌̀◌̕b; a◌֮◌ᷤ◌̀◌̕b; a◌֮◌ᷤ◌̀◌̕b; a◌֮◌ᷤ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER S, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE5 0062;00E0 05AE 1DE5 0315 0062;0061 05AE 0300 1DE5 0315 0062;00E0 05AE 1DE5 0315 0062;0061 05AE 0300 1DE5 0315 0062; # (a◌̕◌̀◌֮◌ᷥb; à◌֮◌ᷥ◌̕b; a◌֮◌̀◌ᷥ◌̕b; à◌֮◌ᷥ◌̕b; a◌֮◌̀◌ᷥ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER LONG S, LATIN SMALL LETTER B 0061 1DE5 0315 0300 05AE 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062; # (a◌ᷥ◌̕◌̀◌֮b; a◌֮◌ᷥ◌̀◌̕b; a◌֮◌ᷥ◌̀◌̕b; a◌֮◌ᷥ◌̀◌̕b; a◌֮◌ᷥ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER LONG S, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE6 0062;00E0 05AE 1DE6 0315 0062;0061 05AE 0300 1DE6 0315 0062;00E0 05AE 1DE6 0315 0062;0061 05AE 0300 1DE6 0315 0062; # (a◌̕◌̀◌֮◌ᷦb; à◌֮◌ᷦ◌̕b; a◌֮◌̀◌ᷦ◌̕b; à◌֮◌ᷦ◌̕b; a◌֮◌̀◌ᷦ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER Z, LATIN SMALL LETTER B 0061 1DE6 0315 0300 05AE 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062; # (a◌ᷦ◌̕◌̀◌֮b; a◌֮◌ᷦ◌̀◌̕b; a◌֮◌ᷦ◌̀◌̕b; a◌֮◌ᷦ◌̀◌̕b; a◌֮◌ᷦ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER Z, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE7 0062;00E0 05AE 1DE7 0315 0062;0061 05AE 0300 1DE7 0315 0062;00E0 05AE 1DE7 0315 0062;0061 05AE 0300 1DE7 0315 0062; # (a◌̕◌̀◌֮◌ᷧb; à◌֮◌ᷧ◌̕b; a◌֮◌̀◌ᷧ◌̕b; à◌֮◌ᷧ◌̕b; a◌֮◌̀◌ᷧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER ALPHA, LATIN SMALL LETTER B 0061 1DE7 0315 0300 05AE 0062;0061 05AE 1DE7 0300 0315 0062;0061 05AE 1DE7 0300 0315 0062;0061 05AE 1DE7 0300 0315 0062;0061 05AE 1DE7 0300 0315 0062; # (a◌ᷧ◌̕◌̀◌֮b; a◌֮◌ᷧ◌̀◌̕b; a◌֮◌ᷧ◌̀◌̕b; a◌֮◌ᷧ◌̀◌̕b; a◌֮◌ᷧ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER ALPHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE8 0062;00E0 05AE 1DE8 0315 0062;0061 05AE 0300 1DE8 0315 0062;00E0 05AE 1DE8 0315 0062;0061 05AE 0300 1DE8 0315 0062; # (a◌̕◌̀◌֮◌ᷨb; à◌֮◌ᷨ◌̕b; a◌֮◌̀◌ᷨ◌̕b; à◌֮◌ᷨ◌̕b; a◌֮◌̀◌ᷨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER B, LATIN SMALL LETTER B 0061 1DE8 0315 0300 05AE 0062;0061 05AE 1DE8 0300 0315 0062;0061 05AE 1DE8 0300 0315 0062;0061 05AE 1DE8 0300 0315 0062;0061 05AE 1DE8 0300 0315 0062; # (a◌ᷨ◌̕◌̀◌֮b; a◌֮◌ᷨ◌̀◌̕b; a◌֮◌ᷨ◌̀◌̕b; a◌֮◌ᷨ◌̀◌̕b; a◌֮◌ᷨ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER B, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DE9 0062;00E0 05AE 1DE9 0315 0062;0061 05AE 0300 1DE9 0315 0062;00E0 05AE 1DE9 0315 0062;0061 05AE 0300 1DE9 0315 0062; # (a◌̕◌̀◌֮◌ᷩb; à◌֮◌ᷩ◌̕b; a◌֮◌̀◌ᷩ◌̕b; à◌֮◌ᷩ◌̕b; a◌֮◌̀◌ᷩ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER BETA, LATIN SMALL LETTER B 0061 1DE9 0315 0300 05AE 0062;0061 05AE 1DE9 0300 0315 0062;0061 05AE 1DE9 0300 0315 0062;0061 05AE 1DE9 0300 0315 0062;0061 05AE 1DE9 0300 0315 0062; # (a◌ᷩ◌̕◌̀◌֮b; a◌֮◌ᷩ◌̀◌̕b; a◌֮◌ᷩ◌̀◌̕b; a◌֮◌ᷩ◌̀◌̕b; a◌֮◌ᷩ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER BETA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DEA 0062;00E0 05AE 1DEA 0315 0062;0061 05AE 0300 1DEA 0315 0062;00E0 05AE 1DEA 0315 0062;0061 05AE 0300 1DEA 0315 0062; # (a◌̕◌̀◌֮◌ᷪb; à◌֮◌ᷪ◌̕b; a◌֮◌̀◌ᷪ◌̕b; à◌֮◌ᷪ◌̕b; a◌֮◌̀◌ᷪ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER SCHWA, LATIN SMALL LETTER B 0061 1DEA 0315 0300 05AE 0062;0061 05AE 1DEA 0300 0315 0062;0061 05AE 1DEA 0300 0315 0062;0061 05AE 1DEA 0300 0315 0062;0061 05AE 1DEA 0300 0315 0062; # (a◌ᷪ◌̕◌̀◌֮b; a◌֮◌ᷪ◌̀◌̕b; a◌֮◌ᷪ◌̀◌̕b; a◌֮◌ᷪ◌̀◌̕b; a◌֮◌ᷪ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER SCHWA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DEB 0062;00E0 05AE 1DEB 0315 0062;0061 05AE 0300 1DEB 0315 0062;00E0 05AE 1DEB 0315 0062;0061 05AE 0300 1DEB 0315 0062; # (a◌̕◌̀◌֮◌ᷫb; à◌֮◌ᷫ◌̕b; a◌֮◌̀◌ᷫ◌̕b; à◌֮◌ᷫ◌̕b; a◌֮◌̀◌ᷫ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER F, LATIN SMALL LETTER B 0061 1DEB 0315 0300 05AE 0062;0061 05AE 1DEB 0300 0315 0062;0061 05AE 1DEB 0300 0315 0062;0061 05AE 1DEB 0300 0315 0062;0061 05AE 1DEB 0300 0315 0062; # (a◌ᷫ◌̕◌̀◌֮b; a◌֮◌ᷫ◌̀◌̕b; a◌֮◌ᷫ◌̀◌̕b; a◌֮◌ᷫ◌̀◌̕b; a◌֮◌ᷫ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER F, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DEC 0062;00E0 05AE 1DEC 0315 0062;0061 05AE 0300 1DEC 0315 0062;00E0 05AE 1DEC 0315 0062;0061 05AE 0300 1DEC 0315 0062; # (a◌̕◌̀◌֮◌ᷬb; à◌֮◌ᷬ◌̕b; a◌֮◌̀◌ᷬ◌̕b; à◌֮◌ᷬ◌̕b; a◌֮◌̀◌ᷬ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE, LATIN SMALL LETTER B 0061 1DEC 0315 0300 05AE 0062;0061 05AE 1DEC 0300 0315 0062;0061 05AE 1DEC 0300 0315 0062;0061 05AE 1DEC 0300 0315 0062;0061 05AE 1DEC 0300 0315 0062; # (a◌ᷬ◌̕◌̀◌֮b; a◌֮◌ᷬ◌̀◌̕b; a◌֮◌ᷬ◌̀◌̕b; a◌֮◌ᷬ◌̀◌̕b; a◌֮◌ᷬ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DED 0062;00E0 05AE 1DED 0315 0062;0061 05AE 0300 1DED 0315 0062;00E0 05AE 1DED 0315 0062;0061 05AE 0300 1DED 0315 0062; # (a◌̕◌̀◌֮◌ᷭb; à◌֮◌ᷭ◌̕b; a◌֮◌̀◌ᷭ◌̕b; à◌֮◌ᷭ◌̕b; a◌֮◌̀◌ᷭ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE, LATIN SMALL LETTER B 0061 1DED 0315 0300 05AE 0062;0061 05AE 1DED 0300 0315 0062;0061 05AE 1DED 0300 0315 0062;0061 05AE 1DED 0300 0315 0062;0061 05AE 1DED 0300 0315 0062; # (a◌ᷭ◌̕◌̀◌֮b; a◌֮◌ᷭ◌̀◌̕b; a◌֮◌ᷭ◌̀◌̕b; a◌֮◌ᷭ◌̀◌̕b; a◌֮◌ᷭ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DEE 0062;00E0 05AE 1DEE 0315 0062;0061 05AE 0300 1DEE 0315 0062;00E0 05AE 1DEE 0315 0062;0061 05AE 0300 1DEE 0315 0062; # (a◌̕◌̀◌֮◌ᷮb; à◌֮◌ᷮ◌̕b; a◌֮◌̀◌ᷮ◌̕b; à◌֮◌ᷮ◌̕b; a◌֮◌̀◌ᷮ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER P, LATIN SMALL LETTER B 0061 1DEE 0315 0300 05AE 0062;0061 05AE 1DEE 0300 0315 0062;0061 05AE 1DEE 0300 0315 0062;0061 05AE 1DEE 0300 0315 0062;0061 05AE 1DEE 0300 0315 0062; # (a◌ᷮ◌̕◌̀◌֮b; a◌֮◌ᷮ◌̀◌̕b; a◌֮◌ᷮ◌̀◌̕b; a◌֮◌ᷮ◌̀◌̕b; a◌֮◌ᷮ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER P, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DEF 0062;00E0 05AE 1DEF 0315 0062;0061 05AE 0300 1DEF 0315 0062;00E0 05AE 1DEF 0315 0062;0061 05AE 0300 1DEF 0315 0062; # (a◌̕◌̀◌֮◌ᷯb; à◌֮◌ᷯ◌̕b; a◌֮◌̀◌ᷯ◌̕b; à◌֮◌ᷯ◌̕b; a◌֮◌̀◌ᷯ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER ESH, LATIN SMALL LETTER B 0061 1DEF 0315 0300 05AE 0062;0061 05AE 1DEF 0300 0315 0062;0061 05AE 1DEF 0300 0315 0062;0061 05AE 1DEF 0300 0315 0062;0061 05AE 1DEF 0300 0315 0062; # (a◌ᷯ◌̕◌̀◌֮b; a◌֮◌ᷯ◌̀◌̕b; a◌֮◌ᷯ◌̀◌̕b; a◌֮◌ᷯ◌̀◌̕b; a◌֮◌ᷯ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER ESH, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF0 0062;00E0 05AE 1DF0 0315 0062;0061 05AE 0300 1DF0 0315 0062;00E0 05AE 1DF0 0315 0062;0061 05AE 0300 1DF0 0315 0062; # (a◌̕◌̀◌֮◌ᷰb; à◌֮◌ᷰ◌̕b; a◌֮◌̀◌ᷰ◌̕b; à◌֮◌ᷰ◌̕b; a◌֮◌̀◌ᷰ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE, LATIN SMALL LETTER B 0061 1DF0 0315 0300 05AE 0062;0061 05AE 1DF0 0300 0315 0062;0061 05AE 1DF0 0300 0315 0062;0061 05AE 1DF0 0300 0315 0062;0061 05AE 1DF0 0300 0315 0062; # (a◌ᷰ◌̕◌̀◌֮b; a◌֮◌ᷰ◌̀◌̕b; a◌֮◌ᷰ◌̀◌̕b; a◌֮◌ᷰ◌̀◌̕b; a◌֮◌ᷰ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF1 0062;00E0 05AE 1DF1 0315 0062;0061 05AE 0300 1DF1 0315 0062;00E0 05AE 1DF1 0315 0062;0061 05AE 0300 1DF1 0315 0062; # (a◌̕◌̀◌֮◌ᷱb; à◌֮◌ᷱ◌̕b; a◌֮◌̀◌ᷱ◌̕b; à◌֮◌ᷱ◌̕b; a◌֮◌̀◌ᷱ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER W, LATIN SMALL LETTER B 0061 1DF1 0315 0300 05AE 0062;0061 05AE 1DF1 0300 0315 0062;0061 05AE 1DF1 0300 0315 0062;0061 05AE 1DF1 0300 0315 0062;0061 05AE 1DF1 0300 0315 0062; # (a◌ᷱ◌̕◌̀◌֮b; a◌֮◌ᷱ◌̀◌̕b; a◌֮◌ᷱ◌̀◌̕b; a◌֮◌ᷱ◌̀◌̕b; a◌֮◌ᷱ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER W, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF2 0062;00E0 05AE 1DF2 0315 0062;0061 05AE 0300 1DF2 0315 0062;00E0 05AE 1DF2 0315 0062;0061 05AE 0300 1DF2 0315 0062; # (a◌̕◌̀◌֮◌ᷲb; à◌֮◌ᷲ◌̕b; a◌֮◌̀◌ᷲ◌̕b; à◌֮◌ᷲ◌̕b; a◌֮◌̀◌ᷲ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER B 0061 1DF2 0315 0300 05AE 0062;0061 05AE 1DF2 0300 0315 0062;0061 05AE 1DF2 0300 0315 0062;0061 05AE 1DF2 0300 0315 0062;0061 05AE 1DF2 0300 0315 0062; # (a◌ᷲ◌̕◌̀◌֮b; a◌֮◌ᷲ◌̀◌̕b; a◌֮◌ᷲ◌̀◌̕b; a◌֮◌ᷲ◌̀◌̕b; a◌֮◌ᷲ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER A WITH DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF3 0062;00E0 05AE 1DF3 0315 0062;0061 05AE 0300 1DF3 0315 0062;00E0 05AE 1DF3 0315 0062;0061 05AE 0300 1DF3 0315 0062; # (a◌̕◌̀◌֮◌ᷳb; à◌֮◌ᷳ◌̕b; a◌֮◌̀◌ᷳ◌̕b; à◌֮◌ᷳ◌̕b; a◌֮◌̀◌ᷳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER B 0061 1DF3 0315 0300 05AE 0062;0061 05AE 1DF3 0300 0315 0062;0061 05AE 1DF3 0300 0315 0062;0061 05AE 1DF3 0300 0315 0062;0061 05AE 1DF3 0300 0315 0062; # (a◌ᷳ◌̕◌̀◌֮b; a◌֮◌ᷳ◌̀◌̕b; a◌֮◌ᷳ◌̀◌̕b; a◌֮◌ᷳ◌̀◌̕b; a◌֮◌ᷳ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER O WITH DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF4 0062;00E0 05AE 1DF4 0315 0062;0061 05AE 0300 1DF4 0315 0062;00E0 05AE 1DF4 0315 0062;0061 05AE 0300 1DF4 0315 0062; # (a◌̕◌̀◌֮◌ᷴb; à◌֮◌ᷴ◌̕b; a◌֮◌̀◌ᷴ◌̕b; à◌֮◌ᷴ◌̕b; a◌֮◌̀◌ᷴ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER B 0061 1DF4 0315 0300 05AE 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062;0061 05AE 1DF4 0300 0315 0062; # (a◌ᷴ◌̕◌̀◌֮b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; a◌֮◌ᷴ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LATIN SMALL LETTER U WITH DIAERESIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DF5 0062;00E0 05AE 1DF5 0315 0062;0061 05AE 0300 1DF5 0315 0062;00E0 05AE 1DF5 0315 0062;0061 05AE 0300 1DF5 0315 0062; # (a◌̕◌̀◌֮◌᷵b; à◌֮◌᷵◌̕b; a◌֮◌̀◌᷵◌̕b; à◌֮◌᷵◌̕b; a◌֮◌̀◌᷵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING UP TACK ABOVE, LATIN SMALL LETTER B 0061 1DF5 0315 0300 05AE 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062;0061 05AE 1DF5 0300 0315 0062; # (a◌᷵◌̕◌̀◌֮b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; a◌֮◌᷵◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING UP TACK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DFB 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062; # (a◌̕◌̀◌֮◌᷻b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; à◌֮◌᷻◌̕b; a◌֮◌̀◌᷻◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DELETION MARK, LATIN SMALL LETTER B 0061 1DFB 0315 0300 05AE 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062; # (a◌᷻◌̕◌̀◌֮b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; a◌֮◌᷻◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DELETION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 035D 035C 0315 1DFC 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062; # (a◌͝◌͜◌̕◌᷼b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; a◌̕◌͜◌᷼◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING DOUBLE INVERTED BREVE BELOW, LATIN SMALL LETTER B 0061 1DFC 035D 035C 0315 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062; # (a◌᷼◌͝◌͜◌̕b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; a◌̕◌᷼◌͜◌͝b; ) LATIN SMALL LETTER A, COMBINING DOUBLE INVERTED BREVE BELOW, COMBINING DOUBLE BREVE, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, LATIN SMALL LETTER B 0061 059A 0316 302A 1DFD 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062; # (a◌֚◌̖◌〪◌᷽b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; a◌〪◌̖◌᷽◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING ALMOST EQUAL TO BELOW, LATIN SMALL LETTER B 0061 1DFD 059A 0316 302A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062; # (a◌᷽◌֚◌̖◌〪b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; a◌〪◌᷽◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING ALMOST EQUAL TO BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1DFE 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062; # (a◌̕◌̀◌֮◌᷾b; à◌֮◌᷾◌̕b; a◌֮◌̀◌᷾◌̕b; à◌֮◌᷾◌̕b; a◌֮◌̀◌᷾◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT ARROWHEAD ABOVE, LATIN SMALL LETTER B 0061 1DFE 0315 0300 05AE 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062; # (a◌᷾◌̕◌̀◌֮b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; a◌֮◌᷾◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT ARROWHEAD ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1DFF 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062; # (a◌֚◌̖◌〪◌᷿b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; a◌〪◌̖◌᷿◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, LATIN SMALL LETTER B 0061 1DFF 059A 0316 302A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062; # (a◌᷿◌֚◌̖◌〪b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; a◌〪◌᷿◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062; # (a◌̕◌̀◌֮◌⃐b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; à◌֮◌⃐◌̕b; a◌֮◌̀◌⃐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT HARPOON ABOVE, LATIN SMALL LETTER B 0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062; # (a◌⃐◌̕◌̀◌֮b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; a◌֮◌⃐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT HARPOON ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062; # (a◌̕◌̀◌֮◌⃑b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; à◌֮◌⃑◌̕b; a◌֮◌̀◌⃑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT HARPOON ABOVE, LATIN SMALL LETTER B 0061 20D1 0315 0300 05AE 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062; # (a◌⃑◌̕◌̀◌֮b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; a◌֮◌⃑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT HARPOON ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 20D2 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062; # (a◌़◌̴◌⃒b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; a◌̴◌⃒◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG VERTICAL LINE OVERLAY, LATIN SMALL LETTER B 0061 20D2 093C 0334 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062; # (a◌⃒◌़◌̴b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; a◌⃒◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG VERTICAL LINE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 20D3 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062; # (a◌़◌̴◌⃓b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; a◌̴◌⃓◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING SHORT VERTICAL LINE OVERLAY, LATIN SMALL LETTER B 0061 20D3 093C 0334 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062; # (a◌⃓◌़◌̴b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; a◌⃓◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING SHORT VERTICAL LINE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D4 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062; # (a◌̕◌̀◌֮◌⃔b; à◌֮◌⃔◌̕b; a◌֮◌̀◌⃔◌̕b; à◌֮◌⃔◌̕b; a◌֮◌̀◌⃔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ANTICLOCKWISE ARROW ABOVE, LATIN SMALL LETTER B 0061 20D4 0315 0300 05AE 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062; # (a◌⃔◌̕◌̀◌֮b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; a◌֮◌⃔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ANTICLOCKWISE ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D5 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062; # (a◌̕◌̀◌֮◌⃕b; à◌֮◌⃕◌̕b; a◌֮◌̀◌⃕◌̕b; à◌֮◌⃕◌̕b; a◌֮◌̀◌⃕◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CLOCKWISE ARROW ABOVE, LATIN SMALL LETTER B 0061 20D5 0315 0300 05AE 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062; # (a◌⃕◌̕◌̀◌֮b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; a◌֮◌⃕◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CLOCKWISE ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D6 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062; # (a◌̕◌̀◌֮◌⃖b; à◌֮◌⃖◌̕b; a◌֮◌̀◌⃖◌̕b; à◌֮◌⃖◌̕b; a◌֮◌̀◌⃖◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT ARROW ABOVE, LATIN SMALL LETTER B 0061 20D6 0315 0300 05AE 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062; # (a◌⃖◌̕◌̀◌֮b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; a◌֮◌⃖◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20D7 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062; # (a◌̕◌̀◌֮◌⃗b; à◌֮◌⃗◌̕b; a◌֮◌̀◌⃗◌̕b; à◌֮◌⃗◌̕b; a◌֮◌̀◌⃗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING RIGHT ARROW ABOVE, LATIN SMALL LETTER B 0061 20D7 0315 0300 05AE 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062; # (a◌⃗◌̕◌̀◌֮b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; a◌֮◌⃗◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 20D8 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062; # (a◌़◌̴◌⃘b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; a◌̴◌⃘◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING RING OVERLAY, LATIN SMALL LETTER B 0061 20D8 093C 0334 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062; # (a◌⃘◌़◌̴b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; a◌⃘◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 20D9 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062; # (a◌़◌̴◌⃙b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; a◌̴◌⃙◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING CLOCKWISE RING OVERLAY, LATIN SMALL LETTER B 0061 20D9 093C 0334 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062; # (a◌⃙◌़◌̴b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; a◌⃙◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING CLOCKWISE RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 20DA 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062; # (a◌़◌̴◌⃚b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; a◌̴◌⃚◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING ANTICLOCKWISE RING OVERLAY, LATIN SMALL LETTER B 0061 20DA 093C 0334 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062; # (a◌⃚◌़◌̴b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; a◌⃚◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING ANTICLOCKWISE RING OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 20DB 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062; # (a◌̕◌̀◌֮◌⃛b; à◌֮◌⃛◌̕b; a◌֮◌̀◌⃛◌̕b; à◌֮◌⃛◌̕b; a◌֮◌̀◌⃛◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING THREE DOTS ABOVE, LATIN SMALL LETTER B 0061 20DB 0315 0300 05AE 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062; # (a◌⃛◌̕◌̀◌֮b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; a◌֮◌⃛◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING THREE DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20DC 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062; # (a◌̕◌̀◌֮◌⃜b; à◌֮◌⃜◌̕b; a◌֮◌̀◌⃜◌̕b; à◌֮◌⃜◌̕b; a◌֮◌̀◌⃜◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING FOUR DOTS ABOVE, LATIN SMALL LETTER B 0061 20DC 0315 0300 05AE 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062; # (a◌⃜◌̕◌̀◌֮b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; a◌֮◌⃜◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING FOUR DOTS ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 20E1 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062; # (a◌̕◌̀◌֮◌⃡b; à◌֮◌⃡◌̕b; a◌֮◌̀◌⃡◌̕b; à◌֮◌⃡◌̕b; a◌֮◌̀◌⃡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LEFT RIGHT ARROW ABOVE, LATIN SMALL LETTER B 0061 20E1 0315 0300 05AE 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062; # (a◌⃡◌̕◌̀◌֮b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; a◌֮◌⃡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LEFT RIGHT ARROW ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 20E5 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062; # (a◌़◌̴◌⃥b; a◌̴◌⃥◌़b; a◌̴◌⃥◌़b; a◌̴◌⃥◌़b; a◌̴◌⃥◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING REVERSE SOLIDUS OVERLAY, LATIN SMALL LETTER B 0061 20E5 093C 0334 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062; # (a◌⃥◌़◌̴b; a◌⃥◌̴◌़b; a◌⃥◌̴◌़b; a◌⃥◌̴◌़b; a◌⃥◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING REVERSE SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 20E6 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062; # (a◌़◌̴◌⃦b; a◌̴◌⃦◌़b; a◌̴◌⃦◌़b; a◌̴◌⃦◌़b; a◌̴◌⃦◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING DOUBLE VERTICAL STROKE OVERLAY, LATIN SMALL LETTER B 0061 20E6 093C 0334 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062; # (a◌⃦◌़◌̴b; a◌⃦◌̴◌़b; a◌⃦◌̴◌़b; a◌⃦◌̴◌़b; a◌⃦◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING DOUBLE VERTICAL STROKE OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 20E7 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062; # (a◌̕◌̀◌֮◌⃧b; à◌֮◌⃧◌̕b; a◌֮◌̀◌⃧◌̕b; à◌֮◌⃧◌̕b; a◌֮◌̀◌⃧◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ANNUITY SYMBOL, LATIN SMALL LETTER B 0061 20E7 0315 0300 05AE 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062; # (a◌⃧◌̕◌̀◌֮b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; a◌֮◌⃧◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ANNUITY SYMBOL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 20E8 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062; # (a◌֚◌̖◌〪◌⃨b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; a◌〪◌̖◌⃨◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING TRIPLE UNDERDOT, LATIN SMALL LETTER B 0061 20E8 059A 0316 302A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062; # (a◌⃨◌֚◌̖◌〪b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; a◌〪◌⃨◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING TRIPLE UNDERDOT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 20E9 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062; # (a◌̕◌̀◌֮◌⃩b; à◌֮◌⃩◌̕b; a◌֮◌̀◌⃩◌̕b; à◌֮◌⃩◌̕b; a◌֮◌̀◌⃩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING WIDE BRIDGE ABOVE, LATIN SMALL LETTER B 0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062; # (a◌⃩◌̕◌̀◌֮b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; a◌֮◌⃩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING WIDE BRIDGE ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 20EA 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062; # (a◌़◌̴◌⃪b; a◌̴◌⃪◌़b; a◌̴◌⃪◌़b; a◌̴◌⃪◌़b; a◌̴◌⃪◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LEFTWARDS ARROW OVERLAY, LATIN SMALL LETTER B 0061 20EA 093C 0334 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062; # (a◌⃪◌़◌̴b; a◌⃪◌̴◌़b; a◌⃪◌̴◌़b; a◌⃪◌̴◌़b; a◌⃪◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LEFTWARDS ARROW OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 20EB 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062; # (a◌़◌̴◌⃫b; a◌̴◌⃫◌़b; a◌̴◌⃫◌़b; a◌̴◌⃫◌़b; a◌̴◌⃫◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, COMBINING LONG DOUBLE SOLIDUS OVERLAY, LATIN SMALL LETTER B 0061 20EB 093C 0334 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062; # (a◌⃫◌़◌̴b; a◌⃫◌̴◌़b; a◌⃫◌̴◌़b; a◌⃫◌̴◌़b; a◌⃫◌̴◌़b; ) LATIN SMALL LETTER A, COMBINING LONG DOUBLE SOLIDUS OVERLAY, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062; # (a◌֚◌̖◌〪◌⃬b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; a◌〪◌̖◌⃬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL LETTER B 0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062; # (a◌⃬◌֚◌̖◌〪b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; a◌〪◌⃬◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062; # (a◌֚◌̖◌〪◌⃭b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; a◌〪◌̖◌⃭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, LATIN SMALL LETTER B 0061 20ED 059A 0316 302A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062; # (a◌⃭◌֚◌̖◌〪b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; a◌〪◌⃭◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 20EE 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062; # (a◌֚◌̖◌〪◌⃮b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; a◌〪◌̖◌⃮◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LEFT ARROW BELOW, LATIN SMALL LETTER B 0061 20EE 059A 0316 302A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062; # (a◌⃮◌֚◌̖◌〪b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; a◌〪◌⃮◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LEFT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 20EF 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062; # (a◌֚◌̖◌〪◌⃯b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; a◌〪◌̖◌⃯◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING RIGHT ARROW BELOW, LATIN SMALL LETTER B 0061 20EF 059A 0316 302A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062; # (a◌⃯◌֚◌̖◌〪b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; a◌〪◌⃯◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING RIGHT ARROW BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 20F0 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062; # (a◌̕◌̀◌֮◌⃰b; à◌֮◌⃰◌̕b; a◌֮◌̀◌⃰◌̕b; à◌֮◌⃰◌̕b; a◌֮◌̀◌⃰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING ASTERISK ABOVE, LATIN SMALL LETTER B 0061 20F0 0315 0300 05AE 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062; # (a◌⃰◌̕◌̀◌֮b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; a◌֮◌⃰◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING ASTERISK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2CEF 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 0315 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 0315 0062; # (a◌̕◌̀◌֮◌⳯b; à◌֮◌⳯◌̕b; a◌֮◌̀◌⳯◌̕b; à◌֮◌⳯◌̕b; a◌֮◌̀◌⳯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COPTIC COMBINING NI ABOVE, LATIN SMALL LETTER B 0061 2CEF 0315 0300 05AE 0062;0061 05AE 2CEF 0300 0315 0062;0061 05AE 2CEF 0300 0315 0062;0061 05AE 2CEF 0300 0315 0062;0061 05AE 2CEF 0300 0315 0062; # (a◌⳯◌̕◌̀◌֮b; a◌֮◌⳯◌̀◌̕b; a◌֮◌⳯◌̀◌̕b; a◌֮◌⳯◌̀◌̕b; a◌֮◌⳯◌̀◌̕b; ) LATIN SMALL LETTER A, COPTIC COMBINING NI ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2CF0 0062;00E0 05AE 2CF0 0315 0062;0061 05AE 0300 2CF0 0315 0062;00E0 05AE 2CF0 0315 0062;0061 05AE 0300 2CF0 0315 0062; # (a◌̕◌̀◌֮◌⳰b; à◌֮◌⳰◌̕b; a◌֮◌̀◌⳰◌̕b; à◌֮◌⳰◌̕b; a◌֮◌̀◌⳰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COPTIC COMBINING SPIRITUS ASPER, LATIN SMALL LETTER B 0061 2CF0 0315 0300 05AE 0062;0061 05AE 2CF0 0300 0315 0062;0061 05AE 2CF0 0300 0315 0062;0061 05AE 2CF0 0300 0315 0062;0061 05AE 2CF0 0300 0315 0062; # (a◌⳰◌̕◌̀◌֮b; a◌֮◌⳰◌̀◌̕b; a◌֮◌⳰◌̀◌̕b; a◌֮◌⳰◌̀◌̕b; a◌֮◌⳰◌̀◌̕b; ) LATIN SMALL LETTER A, COPTIC COMBINING SPIRITUS ASPER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2CF1 0062;00E0 05AE 2CF1 0315 0062;0061 05AE 0300 2CF1 0315 0062;00E0 05AE 2CF1 0315 0062;0061 05AE 0300 2CF1 0315 0062; # (a◌̕◌̀◌֮◌⳱b; à◌֮◌⳱◌̕b; a◌֮◌̀◌⳱◌̕b; à◌֮◌⳱◌̕b; a◌֮◌̀◌⳱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COPTIC COMBINING SPIRITUS LENIS, LATIN SMALL LETTER B 0061 2CF1 0315 0300 05AE 0062;0061 05AE 2CF1 0300 0315 0062;0061 05AE 2CF1 0300 0315 0062;0061 05AE 2CF1 0300 0315 0062;0061 05AE 2CF1 0300 0315 0062; # (a◌⳱◌̕◌̀◌֮b; a◌֮◌⳱◌̀◌̕b; a◌֮◌⳱◌̀◌̕b; a◌֮◌⳱◌̀◌̕b; a◌֮◌⳱◌̀◌̕b; ) LATIN SMALL LETTER A, COPTIC COMBINING SPIRITUS LENIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 2D7F 0062;0061 3099 094D 2D7F 05B0 0062;0061 3099 094D 2D7F 05B0 0062;0061 3099 094D 2D7F 05B0 0062;0061 3099 094D 2D7F 05B0 0062; # (a◌ְ◌्◌゙◌⵿b; a◌゙◌्◌⵿◌ְb; a◌゙◌्◌⵿◌ְb; a◌゙◌्◌⵿◌ְb; a◌゙◌्◌⵿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TIFINAGH CONSONANT JOINER, LATIN SMALL LETTER B 0061 2D7F 05B0 094D 3099 0062;0061 3099 2D7F 094D 05B0 0062;0061 3099 2D7F 094D 05B0 0062;0061 3099 2D7F 094D 05B0 0062;0061 3099 2D7F 094D 05B0 0062; # (a◌⵿◌ְ◌्◌゙b; a◌゙◌⵿◌्◌ְb; a◌゙◌⵿◌्◌ְb; a◌゙◌⵿◌्◌ְb; a◌゙◌⵿◌्◌ְb; ) LATIN SMALL LETTER A, TIFINAGH CONSONANT JOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE0 0062;00E0 05AE 2DE0 0315 0062;0061 05AE 0300 2DE0 0315 0062;00E0 05AE 2DE0 0315 0062;0061 05AE 0300 2DE0 0315 0062; # (a◌̕◌̀◌֮◌ⷠb; à◌֮◌ⷠ◌̕b; a◌֮◌̀◌ⷠ◌̕b; à◌֮◌ⷠ◌̕b; a◌֮◌̀◌ⷠ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER BE, LATIN SMALL LETTER B 0061 2DE0 0315 0300 05AE 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062; # (a◌ⷠ◌̕◌̀◌֮b; a◌֮◌ⷠ◌̀◌̕b; a◌֮◌ⷠ◌̀◌̕b; a◌֮◌ⷠ◌̀◌̕b; a◌֮◌ⷠ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER BE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE1 0062;00E0 05AE 2DE1 0315 0062;0061 05AE 0300 2DE1 0315 0062;00E0 05AE 2DE1 0315 0062;0061 05AE 0300 2DE1 0315 0062; # (a◌̕◌̀◌֮◌ⷡb; à◌֮◌ⷡ◌̕b; a◌֮◌̀◌ⷡ◌̕b; à◌֮◌ⷡ◌̕b; a◌֮◌̀◌ⷡ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER VE, LATIN SMALL LETTER B 0061 2DE1 0315 0300 05AE 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062; # (a◌ⷡ◌̕◌̀◌֮b; a◌֮◌ⷡ◌̀◌̕b; a◌֮◌ⷡ◌̀◌̕b; a◌֮◌ⷡ◌̀◌̕b; a◌֮◌ⷡ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER VE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE2 0062;00E0 05AE 2DE2 0315 0062;0061 05AE 0300 2DE2 0315 0062;00E0 05AE 2DE2 0315 0062;0061 05AE 0300 2DE2 0315 0062; # (a◌̕◌̀◌֮◌ⷢb; à◌֮◌ⷢ◌̕b; a◌֮◌̀◌ⷢ◌̕b; à◌֮◌ⷢ◌̕b; a◌֮◌̀◌ⷢ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER GHE, LATIN SMALL LETTER B 0061 2DE2 0315 0300 05AE 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062; # (a◌ⷢ◌̕◌̀◌֮b; a◌֮◌ⷢ◌̀◌̕b; a◌֮◌ⷢ◌̀◌̕b; a◌֮◌ⷢ◌̀◌̕b; a◌֮◌ⷢ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER GHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE3 0062;00E0 05AE 2DE3 0315 0062;0061 05AE 0300 2DE3 0315 0062;00E0 05AE 2DE3 0315 0062;0061 05AE 0300 2DE3 0315 0062; # (a◌̕◌̀◌֮◌ⷣb; à◌֮◌ⷣ◌̕b; a◌֮◌̀◌ⷣ◌̕b; à◌֮◌ⷣ◌̕b; a◌֮◌̀◌ⷣ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER DE, LATIN SMALL LETTER B 0061 2DE3 0315 0300 05AE 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062; # (a◌ⷣ◌̕◌̀◌֮b; a◌֮◌ⷣ◌̀◌̕b; a◌֮◌ⷣ◌̀◌̕b; a◌֮◌ⷣ◌̀◌̕b; a◌֮◌ⷣ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER DE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE4 0062;00E0 05AE 2DE4 0315 0062;0061 05AE 0300 2DE4 0315 0062;00E0 05AE 2DE4 0315 0062;0061 05AE 0300 2DE4 0315 0062; # (a◌̕◌̀◌֮◌ⷤb; à◌֮◌ⷤ◌̕b; a◌֮◌̀◌ⷤ◌̕b; à◌֮◌ⷤ◌̕b; a◌֮◌̀◌ⷤ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER ZHE, LATIN SMALL LETTER B 0061 2DE4 0315 0300 05AE 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062; # (a◌ⷤ◌̕◌̀◌֮b; a◌֮◌ⷤ◌̀◌̕b; a◌֮◌ⷤ◌̀◌̕b; a◌֮◌ⷤ◌̀◌̕b; a◌֮◌ⷤ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER ZHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE5 0062;00E0 05AE 2DE5 0315 0062;0061 05AE 0300 2DE5 0315 0062;00E0 05AE 2DE5 0315 0062;0061 05AE 0300 2DE5 0315 0062; # (a◌̕◌̀◌֮◌ⷥb; à◌֮◌ⷥ◌̕b; a◌֮◌̀◌ⷥ◌̕b; à◌֮◌ⷥ◌̕b; a◌֮◌̀◌ⷥ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER ZE, LATIN SMALL LETTER B 0061 2DE5 0315 0300 05AE 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062; # (a◌ⷥ◌̕◌̀◌֮b; a◌֮◌ⷥ◌̀◌̕b; a◌֮◌ⷥ◌̀◌̕b; a◌֮◌ⷥ◌̀◌̕b; a◌֮◌ⷥ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER ZE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE6 0062;00E0 05AE 2DE6 0315 0062;0061 05AE 0300 2DE6 0315 0062;00E0 05AE 2DE6 0315 0062;0061 05AE 0300 2DE6 0315 0062; # (a◌̕◌̀◌֮◌ⷦb; à◌֮◌ⷦ◌̕b; a◌֮◌̀◌ⷦ◌̕b; à◌֮◌ⷦ◌̕b; a◌֮◌̀◌ⷦ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER KA, LATIN SMALL LETTER B 0061 2DE6 0315 0300 05AE 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062; # (a◌ⷦ◌̕◌̀◌֮b; a◌֮◌ⷦ◌̀◌̕b; a◌֮◌ⷦ◌̀◌̕b; a◌֮◌ⷦ◌̀◌̕b; a◌֮◌ⷦ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER KA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE7 0062;00E0 05AE 2DE7 0315 0062;0061 05AE 0300 2DE7 0315 0062;00E0 05AE 2DE7 0315 0062;0061 05AE 0300 2DE7 0315 0062; # (a◌̕◌̀◌֮◌ⷧb; à◌֮◌ⷧ◌̕b; a◌֮◌̀◌ⷧ◌̕b; à◌֮◌ⷧ◌̕b; a◌֮◌̀◌ⷧ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER EL, LATIN SMALL LETTER B 0061 2DE7 0315 0300 05AE 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062; # (a◌ⷧ◌̕◌̀◌֮b; a◌֮◌ⷧ◌̀◌̕b; a◌֮◌ⷧ◌̀◌̕b; a◌֮◌ⷧ◌̀◌̕b; a◌֮◌ⷧ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER EL, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE8 0062;00E0 05AE 2DE8 0315 0062;0061 05AE 0300 2DE8 0315 0062;00E0 05AE 2DE8 0315 0062;0061 05AE 0300 2DE8 0315 0062; # (a◌̕◌̀◌֮◌ⷨb; à◌֮◌ⷨ◌̕b; a◌֮◌̀◌ⷨ◌̕b; à◌֮◌ⷨ◌̕b; a◌֮◌̀◌ⷨ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER EM, LATIN SMALL LETTER B 0061 2DE8 0315 0300 05AE 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062; # (a◌ⷨ◌̕◌̀◌֮b; a◌֮◌ⷨ◌̀◌̕b; a◌֮◌ⷨ◌̀◌̕b; a◌֮◌ⷨ◌̀◌̕b; a◌֮◌ⷨ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER EM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DE9 0062;00E0 05AE 2DE9 0315 0062;0061 05AE 0300 2DE9 0315 0062;00E0 05AE 2DE9 0315 0062;0061 05AE 0300 2DE9 0315 0062; # (a◌̕◌̀◌֮◌ⷩb; à◌֮◌ⷩ◌̕b; a◌֮◌̀◌ⷩ◌̕b; à◌֮◌ⷩ◌̕b; a◌֮◌̀◌ⷩ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER EN, LATIN SMALL LETTER B 0061 2DE9 0315 0300 05AE 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062; # (a◌ⷩ◌̕◌̀◌֮b; a◌֮◌ⷩ◌̀◌̕b; a◌֮◌ⷩ◌̀◌̕b; a◌֮◌ⷩ◌̀◌̕b; a◌֮◌ⷩ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER EN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DEA 0062;00E0 05AE 2DEA 0315 0062;0061 05AE 0300 2DEA 0315 0062;00E0 05AE 2DEA 0315 0062;0061 05AE 0300 2DEA 0315 0062; # (a◌̕◌̀◌֮◌ⷪb; à◌֮◌ⷪ◌̕b; a◌֮◌̀◌ⷪ◌̕b; à◌֮◌ⷪ◌̕b; a◌֮◌̀◌ⷪ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER O, LATIN SMALL LETTER B 0061 2DEA 0315 0300 05AE 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062; # (a◌ⷪ◌̕◌̀◌֮b; a◌֮◌ⷪ◌̀◌̕b; a◌֮◌ⷪ◌̀◌̕b; a◌֮◌ⷪ◌̀◌̕b; a◌֮◌ⷪ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER O, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DEB 0062;00E0 05AE 2DEB 0315 0062;0061 05AE 0300 2DEB 0315 0062;00E0 05AE 2DEB 0315 0062;0061 05AE 0300 2DEB 0315 0062; # (a◌̕◌̀◌֮◌ⷫb; à◌֮◌ⷫ◌̕b; a◌֮◌̀◌ⷫ◌̕b; à◌֮◌ⷫ◌̕b; a◌֮◌̀◌ⷫ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER PE, LATIN SMALL LETTER B 0061 2DEB 0315 0300 05AE 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062; # (a◌ⷫ◌̕◌̀◌֮b; a◌֮◌ⷫ◌̀◌̕b; a◌֮◌ⷫ◌̀◌̕b; a◌֮◌ⷫ◌̀◌̕b; a◌֮◌ⷫ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER PE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DEC 0062;00E0 05AE 2DEC 0315 0062;0061 05AE 0300 2DEC 0315 0062;00E0 05AE 2DEC 0315 0062;0061 05AE 0300 2DEC 0315 0062; # (a◌̕◌̀◌֮◌ⷬb; à◌֮◌ⷬ◌̕b; a◌֮◌̀◌ⷬ◌̕b; à◌֮◌ⷬ◌̕b; a◌֮◌̀◌ⷬ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER ER, LATIN SMALL LETTER B 0061 2DEC 0315 0300 05AE 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062; # (a◌ⷬ◌̕◌̀◌֮b; a◌֮◌ⷬ◌̀◌̕b; a◌֮◌ⷬ◌̀◌̕b; a◌֮◌ⷬ◌̀◌̕b; a◌֮◌ⷬ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER ER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DED 0062;00E0 05AE 2DED 0315 0062;0061 05AE 0300 2DED 0315 0062;00E0 05AE 2DED 0315 0062;0061 05AE 0300 2DED 0315 0062; # (a◌̕◌̀◌֮◌ⷭb; à◌֮◌ⷭ◌̕b; a◌֮◌̀◌ⷭ◌̕b; à◌֮◌ⷭ◌̕b; a◌֮◌̀◌ⷭ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER ES, LATIN SMALL LETTER B 0061 2DED 0315 0300 05AE 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062; # (a◌ⷭ◌̕◌̀◌֮b; a◌֮◌ⷭ◌̀◌̕b; a◌֮◌ⷭ◌̀◌̕b; a◌֮◌ⷭ◌̀◌̕b; a◌֮◌ⷭ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER ES, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DEE 0062;00E0 05AE 2DEE 0315 0062;0061 05AE 0300 2DEE 0315 0062;00E0 05AE 2DEE 0315 0062;0061 05AE 0300 2DEE 0315 0062; # (a◌̕◌̀◌֮◌ⷮb; à◌֮◌ⷮ◌̕b; a◌֮◌̀◌ⷮ◌̕b; à◌֮◌ⷮ◌̕b; a◌֮◌̀◌ⷮ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER TE, LATIN SMALL LETTER B 0061 2DEE 0315 0300 05AE 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062; # (a◌ⷮ◌̕◌̀◌֮b; a◌֮◌ⷮ◌̀◌̕b; a◌֮◌ⷮ◌̀◌̕b; a◌֮◌ⷮ◌̀◌̕b; a◌֮◌ⷮ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER TE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DEF 0062;00E0 05AE 2DEF 0315 0062;0061 05AE 0300 2DEF 0315 0062;00E0 05AE 2DEF 0315 0062;0061 05AE 0300 2DEF 0315 0062; # (a◌̕◌̀◌֮◌ⷯb; à◌֮◌ⷯ◌̕b; a◌֮◌̀◌ⷯ◌̕b; à◌֮◌ⷯ◌̕b; a◌֮◌̀◌ⷯ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER HA, LATIN SMALL LETTER B 0061 2DEF 0315 0300 05AE 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062; # (a◌ⷯ◌̕◌̀◌֮b; a◌֮◌ⷯ◌̀◌̕b; a◌֮◌ⷯ◌̀◌̕b; a◌֮◌ⷯ◌̀◌̕b; a◌֮◌ⷯ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER HA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF0 0062;00E0 05AE 2DF0 0315 0062;0061 05AE 0300 2DF0 0315 0062;00E0 05AE 2DF0 0315 0062;0061 05AE 0300 2DF0 0315 0062; # (a◌̕◌̀◌֮◌ⷰb; à◌֮◌ⷰ◌̕b; a◌֮◌̀◌ⷰ◌̕b; à◌֮◌ⷰ◌̕b; a◌֮◌̀◌ⷰ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER TSE, LATIN SMALL LETTER B 0061 2DF0 0315 0300 05AE 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062; # (a◌ⷰ◌̕◌̀◌֮b; a◌֮◌ⷰ◌̀◌̕b; a◌֮◌ⷰ◌̀◌̕b; a◌֮◌ⷰ◌̀◌̕b; a◌֮◌ⷰ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER TSE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF1 0062;00E0 05AE 2DF1 0315 0062;0061 05AE 0300 2DF1 0315 0062;00E0 05AE 2DF1 0315 0062;0061 05AE 0300 2DF1 0315 0062; # (a◌̕◌̀◌֮◌ⷱb; à◌֮◌ⷱ◌̕b; a◌֮◌̀◌ⷱ◌̕b; à◌֮◌ⷱ◌̕b; a◌֮◌̀◌ⷱ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER CHE, LATIN SMALL LETTER B 0061 2DF1 0315 0300 05AE 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062; # (a◌ⷱ◌̕◌̀◌֮b; a◌֮◌ⷱ◌̀◌̕b; a◌֮◌ⷱ◌̀◌̕b; a◌֮◌ⷱ◌̀◌̕b; a◌֮◌ⷱ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER CHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF2 0062;00E0 05AE 2DF2 0315 0062;0061 05AE 0300 2DF2 0315 0062;00E0 05AE 2DF2 0315 0062;0061 05AE 0300 2DF2 0315 0062; # (a◌̕◌̀◌֮◌ⷲb; à◌֮◌ⷲ◌̕b; a◌֮◌̀◌ⷲ◌̕b; à◌֮◌ⷲ◌̕b; a◌֮◌̀◌ⷲ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER SHA, LATIN SMALL LETTER B 0061 2DF2 0315 0300 05AE 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062; # (a◌ⷲ◌̕◌̀◌֮b; a◌֮◌ⷲ◌̀◌̕b; a◌֮◌ⷲ◌̀◌̕b; a◌֮◌ⷲ◌̀◌̕b; a◌֮◌ⷲ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER SHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF3 0062;00E0 05AE 2DF3 0315 0062;0061 05AE 0300 2DF3 0315 0062;00E0 05AE 2DF3 0315 0062;0061 05AE 0300 2DF3 0315 0062; # (a◌̕◌̀◌֮◌ⷳb; à◌֮◌ⷳ◌̕b; a◌֮◌̀◌ⷳ◌̕b; à◌֮◌ⷳ◌̕b; a◌֮◌̀◌ⷳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER SHCHA, LATIN SMALL LETTER B 0061 2DF3 0315 0300 05AE 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062; # (a◌ⷳ◌̕◌̀◌֮b; a◌֮◌ⷳ◌̀◌̕b; a◌֮◌ⷳ◌̀◌̕b; a◌֮◌ⷳ◌̀◌̕b; a◌֮◌ⷳ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER SHCHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF4 0062;00E0 05AE 2DF4 0315 0062;0061 05AE 0300 2DF4 0315 0062;00E0 05AE 2DF4 0315 0062;0061 05AE 0300 2DF4 0315 0062; # (a◌̕◌̀◌֮◌ⷴb; à◌֮◌ⷴ◌̕b; a◌֮◌̀◌ⷴ◌̕b; à◌֮◌ⷴ◌̕b; a◌֮◌̀◌ⷴ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER FITA, LATIN SMALL LETTER B 0061 2DF4 0315 0300 05AE 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062; # (a◌ⷴ◌̕◌̀◌֮b; a◌֮◌ⷴ◌̀◌̕b; a◌֮◌ⷴ◌̀◌̕b; a◌֮◌ⷴ◌̀◌̕b; a◌֮◌ⷴ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER FITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF5 0062;00E0 05AE 2DF5 0315 0062;0061 05AE 0300 2DF5 0315 0062;00E0 05AE 2DF5 0315 0062;0061 05AE 0300 2DF5 0315 0062; # (a◌̕◌̀◌֮◌ⷵb; à◌֮◌ⷵ◌̕b; a◌֮◌̀◌ⷵ◌̕b; à◌֮◌ⷵ◌̕b; a◌֮◌̀◌ⷵ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER ES-TE, LATIN SMALL LETTER B 0061 2DF5 0315 0300 05AE 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062; # (a◌ⷵ◌̕◌̀◌֮b; a◌֮◌ⷵ◌̀◌̕b; a◌֮◌ⷵ◌̀◌̕b; a◌֮◌ⷵ◌̀◌̕b; a◌֮◌ⷵ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER ES-TE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF6 0062;00E0 05AE 2DF6 0315 0062;0061 05AE 0300 2DF6 0315 0062;00E0 05AE 2DF6 0315 0062;0061 05AE 0300 2DF6 0315 0062; # (a◌̕◌̀◌֮◌ⷶb; à◌֮◌ⷶ◌̕b; a◌֮◌̀◌ⷶ◌̕b; à◌֮◌ⷶ◌̕b; a◌֮◌̀◌ⷶ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER A, LATIN SMALL LETTER B 0061 2DF6 0315 0300 05AE 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062; # (a◌ⷶ◌̕◌̀◌֮b; a◌֮◌ⷶ◌̀◌̕b; a◌֮◌ⷶ◌̀◌̕b; a◌֮◌ⷶ◌̀◌̕b; a◌֮◌ⷶ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF7 0062;00E0 05AE 2DF7 0315 0062;0061 05AE 0300 2DF7 0315 0062;00E0 05AE 2DF7 0315 0062;0061 05AE 0300 2DF7 0315 0062; # (a◌̕◌̀◌֮◌ⷷb; à◌֮◌ⷷ◌̕b; a◌֮◌̀◌ⷷ◌̕b; à◌֮◌ⷷ◌̕b; a◌֮◌̀◌ⷷ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER IE, LATIN SMALL LETTER B 0061 2DF7 0315 0300 05AE 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062; # (a◌ⷷ◌̕◌̀◌֮b; a◌֮◌ⷷ◌̀◌̕b; a◌֮◌ⷷ◌̀◌̕b; a◌֮◌ⷷ◌̀◌̕b; a◌֮◌ⷷ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER IE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF8 0062;00E0 05AE 2DF8 0315 0062;0061 05AE 0300 2DF8 0315 0062;00E0 05AE 2DF8 0315 0062;0061 05AE 0300 2DF8 0315 0062; # (a◌̕◌̀◌֮◌ⷸb; à◌֮◌ⷸ◌̕b; a◌֮◌̀◌ⷸ◌̕b; à◌֮◌ⷸ◌̕b; a◌֮◌̀◌ⷸ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER DJERV, LATIN SMALL LETTER B 0061 2DF8 0315 0300 05AE 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062; # (a◌ⷸ◌̕◌̀◌֮b; a◌֮◌ⷸ◌̀◌̕b; a◌֮◌ⷸ◌̀◌̕b; a◌֮◌ⷸ◌̀◌̕b; a◌֮◌ⷸ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER DJERV, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DF9 0062;00E0 05AE 2DF9 0315 0062;0061 05AE 0300 2DF9 0315 0062;00E0 05AE 2DF9 0315 0062;0061 05AE 0300 2DF9 0315 0062; # (a◌̕◌̀◌֮◌ⷹb; à◌֮◌ⷹ◌̕b; a◌֮◌̀◌ⷹ◌̕b; à◌֮◌ⷹ◌̕b; a◌֮◌̀◌ⷹ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER MONOGRAPH UK, LATIN SMALL LETTER B 0061 2DF9 0315 0300 05AE 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062; # (a◌ⷹ◌̕◌̀◌֮b; a◌֮◌ⷹ◌̀◌̕b; a◌֮◌ⷹ◌̀◌̕b; a◌֮◌ⷹ◌̀◌̕b; a◌֮◌ⷹ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER MONOGRAPH UK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFA 0062;00E0 05AE 2DFA 0315 0062;0061 05AE 0300 2DFA 0315 0062;00E0 05AE 2DFA 0315 0062;0061 05AE 0300 2DFA 0315 0062; # (a◌̕◌̀◌֮◌ⷺb; à◌֮◌ⷺ◌̕b; a◌֮◌̀◌ⷺ◌̕b; à◌֮◌ⷺ◌̕b; a◌֮◌̀◌ⷺ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER YAT, LATIN SMALL LETTER B 0061 2DFA 0315 0300 05AE 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062; # (a◌ⷺ◌̕◌̀◌֮b; a◌֮◌ⷺ◌̀◌̕b; a◌֮◌ⷺ◌̀◌̕b; a◌֮◌ⷺ◌̀◌̕b; a◌֮◌ⷺ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER YAT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFB 0062;00E0 05AE 2DFB 0315 0062;0061 05AE 0300 2DFB 0315 0062;00E0 05AE 2DFB 0315 0062;0061 05AE 0300 2DFB 0315 0062; # (a◌̕◌̀◌֮◌ⷻb; à◌֮◌ⷻ◌̕b; a◌֮◌̀◌ⷻ◌̕b; à◌֮◌ⷻ◌̕b; a◌֮◌̀◌ⷻ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER YU, LATIN SMALL LETTER B 0061 2DFB 0315 0300 05AE 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062; # (a◌ⷻ◌̕◌̀◌֮b; a◌֮◌ⷻ◌̀◌̕b; a◌֮◌ⷻ◌̀◌̕b; a◌֮◌ⷻ◌̀◌̕b; a◌֮◌ⷻ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER YU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFC 0062;00E0 05AE 2DFC 0315 0062;0061 05AE 0300 2DFC 0315 0062;00E0 05AE 2DFC 0315 0062;0061 05AE 0300 2DFC 0315 0062; # (a◌̕◌̀◌֮◌ⷼb; à◌֮◌ⷼ◌̕b; a◌֮◌̀◌ⷼ◌̕b; à◌֮◌ⷼ◌̕b; a◌֮◌̀◌ⷼ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER IOTIFIED A, LATIN SMALL LETTER B 0061 2DFC 0315 0300 05AE 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062; # (a◌ⷼ◌̕◌̀◌֮b; a◌֮◌ⷼ◌̀◌̕b; a◌֮◌ⷼ◌̀◌̕b; a◌֮◌ⷼ◌̀◌̕b; a◌֮◌ⷼ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER IOTIFIED A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFD 0062;00E0 05AE 2DFD 0315 0062;0061 05AE 0300 2DFD 0315 0062;00E0 05AE 2DFD 0315 0062;0061 05AE 0300 2DFD 0315 0062; # (a◌̕◌̀◌֮◌ⷽb; à◌֮◌ⷽ◌̕b; a◌֮◌̀◌ⷽ◌̕b; à◌֮◌ⷽ◌̕b; a◌֮◌̀◌ⷽ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER LITTLE YUS, LATIN SMALL LETTER B 0061 2DFD 0315 0300 05AE 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062; # (a◌ⷽ◌̕◌̀◌֮b; a◌֮◌ⷽ◌̀◌̕b; a◌֮◌ⷽ◌̀◌̕b; a◌֮◌ⷽ◌̀◌̕b; a◌֮◌ⷽ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER LITTLE YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFE 0062;00E0 05AE 2DFE 0315 0062;0061 05AE 0300 2DFE 0315 0062;00E0 05AE 2DFE 0315 0062;0061 05AE 0300 2DFE 0315 0062; # (a◌̕◌̀◌֮◌ⷾb; à◌֮◌ⷾ◌̕b; a◌֮◌̀◌ⷾ◌̕b; à◌֮◌ⷾ◌̕b; a◌֮◌̀◌ⷾ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER BIG YUS, LATIN SMALL LETTER B 0061 2DFE 0315 0300 05AE 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062; # (a◌ⷾ◌̕◌̀◌֮b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; a◌֮◌ⷾ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 2DFF 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062; # (a◌̕◌̀◌֮◌ⷿb; à◌֮◌ⷿ◌̕b; a◌֮◌̀◌ⷿ◌̕b; à◌֮◌ⷿ◌̕b; a◌֮◌̀◌ⷿ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER IOTIFIED BIG YUS, LATIN SMALL LETTER B 0061 2DFF 0315 0300 05AE 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062; # (a◌ⷿ◌̕◌̀◌֮b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; a◌֮◌ⷿ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER IOTIFIED BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # (a◌̖◌〪◌̛◌〪b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; # (a◌〪◌̖◌〪◌̛b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; a◌̛◌〪◌〪◌̖b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, LATIN SMALL LETTER B 0061 0300 05AE 1D16D 302B 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062; # (a◌̀◌𝅭֮◌〫b; à𝅭◌֮◌〫b; a𝅭◌֮◌〫◌̀b; à𝅭◌֮◌〫b; a𝅭◌֮◌〫◌̀b; ) LATIN SMALL LETTER A, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, IDEOGRAPHIC RISING TONE MARK, LATIN SMALL LETTER B 0061 302B 0300 05AE 1D16D 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062; # (a◌〫◌̀◌𝅭֮b; à𝅭◌〫◌֮b; a𝅭◌〫◌֮◌̀b; à𝅭◌〫◌֮b; a𝅭◌〫◌֮◌̀b; ) LATIN SMALL LETTER A, IDEOGRAPHIC RISING TONE MARK, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B 0061 035C 0315 0300 302C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062; # (a◌͜◌̕◌̀◌〬b; à◌̕◌〬◌͜b; a◌̀◌̕◌〬◌͜b; à◌̕◌〬◌͜b; a◌̀◌̕◌〬◌͜b; ) LATIN SMALL LETTER A, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, IDEOGRAPHIC DEPARTING TONE MARK, LATIN SMALL LETTER B 0061 302C 035C 0315 0300 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062; # (a◌〬◌͜◌̕◌̀b; à◌〬◌̕◌͜b; a◌̀◌〬◌̕◌͜b; à◌〬◌̕◌͜b; a◌̀◌〬◌̕◌͜b; ) LATIN SMALL LETTER A, IDEOGRAPHIC DEPARTING TONE MARK, COMBINING DOUBLE BREVE BELOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, LATIN SMALL LETTER B 0061 302E 059A 0316 302D 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062; # (a〮◌֚◌̖◌〭b; a◌̖◌֚◌〭〮b; a◌̖◌֚◌〭〮b; a◌̖◌֚◌〭〮b; a◌̖◌֚◌〭〮b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC ENTERING TONE MARK, LATIN SMALL LETTER B 0061 302D 302E 059A 0316 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062; # (a◌〭〮◌֚◌̖b; a◌̖◌〭◌֚〮b; a◌̖◌〭◌֚〮b; a◌̖◌〭◌֚〮b; a◌̖◌〭◌֚〮b; ) LATIN SMALL LETTER A, IDEOGRAPHIC ENTERING TONE MARK, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, LATIN SMALL LETTER B 0061 1D16D 302E 059A 302E 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062; # (a〮𝅭◌֚〮b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B 0061 302E 1D16D 302E 059A 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062; # (a〮〮𝅭◌֚b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; a◌֚〮〮𝅭b; ) LATIN SMALL LETTER A, HANGUL SINGLE DOT TONE MARK, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, LATIN SMALL LETTER B 0061 1D16D 302E 059A 302F 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062; # (a〮𝅭◌֚〯b; a◌֚〮〯𝅭b; a◌֚〮〯𝅭b; a◌֚〮〯𝅭b; a◌֚〮〯𝅭b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, HANGUL DOUBLE DOT TONE MARK, LATIN SMALL LETTER B 0061 302F 1D16D 302E 059A 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062; # (a〯〮𝅭◌֚b; a◌֚〯〮𝅭b; a◌֚〯〮𝅭b; a◌֚〯〮𝅭b; a◌֚〯〮𝅭b; ) LATIN SMALL LETTER A, HANGUL DOUBLE DOT TONE MARK, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, HEBREW ACCENT YETIV, LATIN SMALL LETTER B 0061 094D 3099 093C 3099 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; # (a◌्◌゙◌़◌゙b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 094D 3099 093C 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; # (a◌゙◌्◌゙◌़b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; a◌़◌゙◌゙◌्b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B 0061 094D 3099 093C 309A 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062; # (a◌्◌゙◌़◌゚b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; a◌़◌゙◌゚◌्b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, LATIN SMALL LETTER B 0061 309A 094D 3099 093C 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062; # (a◌゚◌्◌゙◌़b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; a◌़◌゚◌゙◌्b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, LATIN SMALL LETTER B 0061 0315 0300 05AE A66F 0062;00E0 05AE A66F 0315 0062;0061 05AE 0300 A66F 0315 0062;00E0 05AE A66F 0315 0062;0061 05AE 0300 A66F 0315 0062; # (a◌̕◌̀◌֮◌꙯b; à◌֮◌꙯◌̕b; a◌֮◌̀◌꙯◌̕b; à◌֮◌꙯◌̕b; a◌֮◌̀◌꙯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC VZMET, LATIN SMALL LETTER B 0061 A66F 0315 0300 05AE 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062; # (a◌꙯◌̕◌̀◌֮b; a◌֮◌꙯◌̀◌̕b; a◌֮◌꙯◌̀◌̕b; a◌֮◌꙯◌̀◌̕b; a◌֮◌꙯◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC VZMET, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A674 0062;00E0 05AE A674 0315 0062;0061 05AE 0300 A674 0315 0062;00E0 05AE A674 0315 0062;0061 05AE 0300 A674 0315 0062; # (a◌̕◌̀◌֮◌ꙴb; à◌֮◌ꙴ◌̕b; a◌֮◌̀◌ꙴ◌̕b; à◌֮◌ꙴ◌̕b; a◌֮◌̀◌ꙴ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER UKRAINIAN IE, LATIN SMALL LETTER B 0061 A674 0315 0300 05AE 0062;0061 05AE A674 0300 0315 0062;0061 05AE A674 0300 0315 0062;0061 05AE A674 0300 0315 0062;0061 05AE A674 0300 0315 0062; # (a◌ꙴ◌̕◌̀◌֮b; a◌֮◌ꙴ◌̀◌̕b; a◌֮◌ꙴ◌̀◌̕b; a◌֮◌ꙴ◌̀◌̕b; a◌֮◌ꙴ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER UKRAINIAN IE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A675 0062;00E0 05AE A675 0315 0062;0061 05AE 0300 A675 0315 0062;00E0 05AE A675 0315 0062;0061 05AE 0300 A675 0315 0062; # (a◌̕◌̀◌֮◌ꙵb; à◌֮◌ꙵ◌̕b; a◌֮◌̀◌ꙵ◌̕b; à◌֮◌ꙵ◌̕b; a◌֮◌̀◌ꙵ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER I, LATIN SMALL LETTER B 0061 A675 0315 0300 05AE 0062;0061 05AE A675 0300 0315 0062;0061 05AE A675 0300 0315 0062;0061 05AE A675 0300 0315 0062;0061 05AE A675 0300 0315 0062; # (a◌ꙵ◌̕◌̀◌֮b; a◌֮◌ꙵ◌̀◌̕b; a◌֮◌ꙵ◌̀◌̕b; a◌֮◌ꙵ◌̀◌̕b; a◌֮◌ꙵ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A676 0062;00E0 05AE A676 0315 0062;0061 05AE 0300 A676 0315 0062;00E0 05AE A676 0315 0062;0061 05AE 0300 A676 0315 0062; # (a◌̕◌̀◌֮◌ꙶb; à◌֮◌ꙶ◌̕b; a◌֮◌̀◌ꙶ◌̕b; à◌֮◌ꙶ◌̕b; a◌֮◌̀◌ꙶ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER YI, LATIN SMALL LETTER B 0061 A676 0315 0300 05AE 0062;0061 05AE A676 0300 0315 0062;0061 05AE A676 0300 0315 0062;0061 05AE A676 0300 0315 0062;0061 05AE A676 0300 0315 0062; # (a◌ꙶ◌̕◌̀◌֮b; a◌֮◌ꙶ◌̀◌̕b; a◌֮◌ꙶ◌̀◌̕b; a◌֮◌ꙶ◌̀◌̕b; a◌֮◌ꙶ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER YI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A677 0062;00E0 05AE A677 0315 0062;0061 05AE 0300 A677 0315 0062;00E0 05AE A677 0315 0062;0061 05AE 0300 A677 0315 0062; # (a◌̕◌̀◌֮◌ꙷb; à◌֮◌ꙷ◌̕b; a◌֮◌̀◌ꙷ◌̕b; à◌֮◌ꙷ◌̕b; a◌֮◌̀◌ꙷ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER U, LATIN SMALL LETTER B 0061 A677 0315 0300 05AE 0062;0061 05AE A677 0300 0315 0062;0061 05AE A677 0300 0315 0062;0061 05AE A677 0300 0315 0062;0061 05AE A677 0300 0315 0062; # (a◌ꙷ◌̕◌̀◌֮b; a◌֮◌ꙷ◌̀◌̕b; a◌֮◌ꙷ◌̀◌̕b; a◌֮◌ꙷ◌̀◌̕b; a◌֮◌ꙷ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER U, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A678 0062;00E0 05AE A678 0315 0062;0061 05AE 0300 A678 0315 0062;00E0 05AE A678 0315 0062;0061 05AE 0300 A678 0315 0062; # (a◌̕◌̀◌֮◌ꙸb; à◌֮◌ꙸ◌̕b; a◌֮◌̀◌ꙸ◌̕b; à◌֮◌ꙸ◌̕b; a◌֮◌̀◌ꙸ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER HARD SIGN, LATIN SMALL LETTER B 0061 A678 0315 0300 05AE 0062;0061 05AE A678 0300 0315 0062;0061 05AE A678 0300 0315 0062;0061 05AE A678 0300 0315 0062;0061 05AE A678 0300 0315 0062; # (a◌ꙸ◌̕◌̀◌֮b; a◌֮◌ꙸ◌̀◌̕b; a◌֮◌ꙸ◌̀◌̕b; a◌֮◌ꙸ◌̀◌̕b; a◌֮◌ꙸ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER HARD SIGN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A679 0062;00E0 05AE A679 0315 0062;0061 05AE 0300 A679 0315 0062;00E0 05AE A679 0315 0062;0061 05AE 0300 A679 0315 0062; # (a◌̕◌̀◌֮◌ꙹb; à◌֮◌ꙹ◌̕b; a◌֮◌̀◌ꙹ◌̕b; à◌֮◌ꙹ◌̕b; a◌֮◌̀◌ꙹ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER YERU, LATIN SMALL LETTER B 0061 A679 0315 0300 05AE 0062;0061 05AE A679 0300 0315 0062;0061 05AE A679 0300 0315 0062;0061 05AE A679 0300 0315 0062;0061 05AE A679 0300 0315 0062; # (a◌ꙹ◌̕◌̀◌֮b; a◌֮◌ꙹ◌̀◌̕b; a◌֮◌ꙹ◌̀◌̕b; a◌֮◌ꙹ◌̀◌̕b; a◌֮◌ꙹ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER YERU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A67A 0062;00E0 05AE A67A 0315 0062;0061 05AE 0300 A67A 0315 0062;00E0 05AE A67A 0315 0062;0061 05AE 0300 A67A 0315 0062; # (a◌̕◌̀◌֮◌ꙺb; à◌֮◌ꙺ◌̕b; a◌֮◌̀◌ꙺ◌̕b; à◌֮◌ꙺ◌̕b; a◌֮◌̀◌ꙺ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER SOFT SIGN, LATIN SMALL LETTER B 0061 A67A 0315 0300 05AE 0062;0061 05AE A67A 0300 0315 0062;0061 05AE A67A 0300 0315 0062;0061 05AE A67A 0300 0315 0062;0061 05AE A67A 0300 0315 0062; # (a◌ꙺ◌̕◌̀◌֮b; a◌֮◌ꙺ◌̀◌̕b; a◌֮◌ꙺ◌̀◌̕b; a◌֮◌ꙺ◌̀◌̕b; a◌֮◌ꙺ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER SOFT SIGN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A67B 0062;00E0 05AE A67B 0315 0062;0061 05AE 0300 A67B 0315 0062;00E0 05AE A67B 0315 0062;0061 05AE 0300 A67B 0315 0062; # (a◌̕◌̀◌֮◌ꙻb; à◌֮◌ꙻ◌̕b; a◌֮◌̀◌ꙻ◌̕b; à◌֮◌ꙻ◌̕b; a◌֮◌̀◌ꙻ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER OMEGA, LATIN SMALL LETTER B 0061 A67B 0315 0300 05AE 0062;0061 05AE A67B 0300 0315 0062;0061 05AE A67B 0300 0315 0062;0061 05AE A67B 0300 0315 0062;0061 05AE A67B 0300 0315 0062; # (a◌ꙻ◌̕◌̀◌֮b; a◌֮◌ꙻ◌̀◌̕b; a◌֮◌ꙻ◌̀◌̕b; a◌֮◌ꙻ◌̀◌̕b; a◌֮◌ꙻ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER OMEGA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A67C 0062;00E0 05AE A67C 0315 0062;0061 05AE 0300 A67C 0315 0062;00E0 05AE A67C 0315 0062;0061 05AE 0300 A67C 0315 0062; # (a◌̕◌̀◌֮◌꙼b; à◌֮◌꙼◌̕b; a◌֮◌̀◌꙼◌̕b; à◌֮◌꙼◌̕b; a◌֮◌̀◌꙼◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC KAVYKA, LATIN SMALL LETTER B 0061 A67C 0315 0300 05AE 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062; # (a◌꙼◌̕◌̀◌֮b; a◌֮◌꙼◌̀◌̕b; a◌֮◌꙼◌̀◌̕b; a◌֮◌꙼◌̀◌̕b; a◌֮◌꙼◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC KAVYKA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A67D 0062;00E0 05AE A67D 0315 0062;0061 05AE 0300 A67D 0315 0062;00E0 05AE A67D 0315 0062;0061 05AE 0300 A67D 0315 0062; # (a◌̕◌̀◌֮◌꙽b; à◌֮◌꙽◌̕b; a◌֮◌̀◌꙽◌̕b; à◌֮◌꙽◌̕b; a◌֮◌̀◌꙽◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC PAYEROK, LATIN SMALL LETTER B 0061 A67D 0315 0300 05AE 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062; # (a◌꙽◌̕◌̀◌֮b; a◌֮◌꙽◌̀◌̕b; a◌֮◌꙽◌̀◌̕b; a◌֮◌꙽◌̀◌̕b; a◌֮◌꙽◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC PAYEROK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A69E 0062;00E0 05AE A69E 0315 0062;0061 05AE 0300 A69E 0315 0062;00E0 05AE A69E 0315 0062;0061 05AE 0300 A69E 0315 0062; # (a◌̕◌̀◌֮◌ꚞb; à◌֮◌ꚞ◌̕b; a◌֮◌̀◌ꚞ◌̕b; à◌֮◌ꚞ◌̕b; a◌֮◌̀◌ꚞ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER EF, LATIN SMALL LETTER B 0061 A69E 0315 0300 05AE 0062;0061 05AE A69E 0300 0315 0062;0061 05AE A69E 0300 0315 0062;0061 05AE A69E 0300 0315 0062;0061 05AE A69E 0300 0315 0062; # (a◌ꚞ◌̕◌̀◌֮b; a◌֮◌ꚞ◌̀◌̕b; a◌֮◌ꚞ◌̀◌̕b; a◌֮◌ꚞ◌̀◌̕b; a◌֮◌ꚞ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER EF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A69F 0062;00E0 05AE A69F 0315 0062;0061 05AE 0300 A69F 0315 0062;00E0 05AE A69F 0315 0062;0061 05AE 0300 A69F 0315 0062; # (a◌̕◌̀◌֮◌ꚟb; à◌֮◌ꚟ◌̕b; a◌֮◌̀◌ꚟ◌̕b; à◌֮◌ꚟ◌̕b; a◌֮◌̀◌ꚟ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC LETTER IOTIFIED E, LATIN SMALL LETTER B 0061 A69F 0315 0300 05AE 0062;0061 05AE A69F 0300 0315 0062;0061 05AE A69F 0300 0315 0062;0061 05AE A69F 0300 0315 0062;0061 05AE A69F 0300 0315 0062; # (a◌ꚟ◌̕◌̀◌֮b; a◌֮◌ꚟ◌̀◌̕b; a◌֮◌ꚟ◌̀◌̕b; a◌֮◌ꚟ◌̀◌̕b; a◌֮◌ꚟ◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC LETTER IOTIFIED E, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A6F0 0062;00E0 05AE A6F0 0315 0062;0061 05AE 0300 A6F0 0315 0062;00E0 05AE A6F0 0315 0062;0061 05AE 0300 A6F0 0315 0062; # (a◌̕◌̀◌֮◌꛰b; à◌֮◌꛰◌̕b; a◌֮◌̀◌꛰◌̕b; à◌֮◌꛰◌̕b; a◌֮◌̀◌꛰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BAMUM COMBINING MARK KOQNDON, LATIN SMALL LETTER B 0061 A6F0 0315 0300 05AE 0062;0061 05AE A6F0 0300 0315 0062;0061 05AE A6F0 0300 0315 0062;0061 05AE A6F0 0300 0315 0062;0061 05AE A6F0 0300 0315 0062; # (a◌꛰◌̕◌̀◌֮b; a◌֮◌꛰◌̀◌̕b; a◌֮◌꛰◌̀◌̕b; a◌֮◌꛰◌̀◌̕b; a◌֮◌꛰◌̀◌̕b; ) LATIN SMALL LETTER A, BAMUM COMBINING MARK KOQNDON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A6F1 0062;00E0 05AE A6F1 0315 0062;0061 05AE 0300 A6F1 0315 0062;00E0 05AE A6F1 0315 0062;0061 05AE 0300 A6F1 0315 0062; # (a◌̕◌̀◌֮◌꛱b; à◌֮◌꛱◌̕b; a◌֮◌̀◌꛱◌̕b; à◌֮◌꛱◌̕b; a◌֮◌̀◌꛱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, BAMUM COMBINING MARK TUKWENTIS, LATIN SMALL LETTER B 0061 A6F1 0315 0300 05AE 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062; # (a◌꛱◌̕◌̀◌֮b; a◌֮◌꛱◌̀◌̕b; a◌֮◌꛱◌̀◌̕b; a◌֮◌꛱◌̀◌̕b; a◌֮◌꛱◌̀◌̕b; ) LATIN SMALL LETTER A, BAMUM COMBINING MARK TUKWENTIS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 A806 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062; # (a◌ְ◌्◌゙◌꠆b; a◌゙◌्◌꠆◌ְb; a◌゙◌्◌꠆◌ְb; a◌゙◌्◌꠆◌ְb; a◌゙◌्◌꠆◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SYLOTI NAGRI SIGN HASANTA, LATIN SMALL LETTER B 0061 A806 05B0 094D 3099 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062; # (a◌꠆◌ְ◌्◌゙b; a◌゙◌꠆◌्◌ְb; a◌゙◌꠆◌्◌ְb; a◌゙◌꠆◌्◌ְb; a◌゙◌꠆◌्◌ְb; ) LATIN SMALL LETTER A, SYLOTI NAGRI SIGN HASANTA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 A8C4 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062; # (a◌ְ◌्◌゙◌꣄b; a◌゙◌्◌꣄◌ְb; a◌゙◌्◌꣄◌ְb; a◌゙◌्◌꣄◌ְb; a◌゙◌्◌꣄◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SAURASHTRA SIGN VIRAMA, LATIN SMALL LETTER B 0061 A8C4 05B0 094D 3099 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062; # (a◌꣄◌ְ◌्◌゙b; a◌゙◌꣄◌्◌ְb; a◌゙◌꣄◌्◌ְb; a◌゙◌꣄◌्◌ְb; a◌゙◌꣄◌्◌ְb; ) LATIN SMALL LETTER A, SAURASHTRA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E0 0062;00E0 05AE A8E0 0315 0062;0061 05AE 0300 A8E0 0315 0062;00E0 05AE A8E0 0315 0062;0061 05AE 0300 A8E0 0315 0062; # (a◌̕◌̀◌֮◌꣠b; à◌֮◌꣠◌̕b; a◌֮◌̀◌꣠◌̕b; à◌֮◌꣠◌̕b; a◌֮◌̀◌꣠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT ZERO, LATIN SMALL LETTER B 0061 A8E0 0315 0300 05AE 0062;0061 05AE A8E0 0300 0315 0062;0061 05AE A8E0 0300 0315 0062;0061 05AE A8E0 0300 0315 0062;0061 05AE A8E0 0300 0315 0062; # (a◌꣠◌̕◌̀◌֮b; a◌֮◌꣠◌̀◌̕b; a◌֮◌꣠◌̀◌̕b; a◌֮◌꣠◌̀◌̕b; a◌֮◌꣠◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E1 0062;00E0 05AE A8E1 0315 0062;0061 05AE 0300 A8E1 0315 0062;00E0 05AE A8E1 0315 0062;0061 05AE 0300 A8E1 0315 0062; # (a◌̕◌̀◌֮◌꣡b; à◌֮◌꣡◌̕b; a◌֮◌̀◌꣡◌̕b; à◌֮◌꣡◌̕b; a◌֮◌̀◌꣡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT ONE, LATIN SMALL LETTER B 0061 A8E1 0315 0300 05AE 0062;0061 05AE A8E1 0300 0315 0062;0061 05AE A8E1 0300 0315 0062;0061 05AE A8E1 0300 0315 0062;0061 05AE A8E1 0300 0315 0062; # (a◌꣡◌̕◌̀◌֮b; a◌֮◌꣡◌̀◌̕b; a◌֮◌꣡◌̀◌̕b; a◌֮◌꣡◌̀◌̕b; a◌֮◌꣡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT ONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E2 0062;00E0 05AE A8E2 0315 0062;0061 05AE 0300 A8E2 0315 0062;00E0 05AE A8E2 0315 0062;0061 05AE 0300 A8E2 0315 0062; # (a◌̕◌̀◌֮◌꣢b; à◌֮◌꣢◌̕b; a◌֮◌̀◌꣢◌̕b; à◌֮◌꣢◌̕b; a◌֮◌̀◌꣢◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT TWO, LATIN SMALL LETTER B 0061 A8E2 0315 0300 05AE 0062;0061 05AE A8E2 0300 0315 0062;0061 05AE A8E2 0300 0315 0062;0061 05AE A8E2 0300 0315 0062;0061 05AE A8E2 0300 0315 0062; # (a◌꣢◌̕◌̀◌֮b; a◌֮◌꣢◌̀◌̕b; a◌֮◌꣢◌̀◌̕b; a◌֮◌꣢◌̀◌̕b; a◌֮◌꣢◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT TWO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E3 0062;00E0 05AE A8E3 0315 0062;0061 05AE 0300 A8E3 0315 0062;00E0 05AE A8E3 0315 0062;0061 05AE 0300 A8E3 0315 0062; # (a◌̕◌̀◌֮◌꣣b; à◌֮◌꣣◌̕b; a◌֮◌̀◌꣣◌̕b; à◌֮◌꣣◌̕b; a◌֮◌̀◌꣣◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT THREE, LATIN SMALL LETTER B 0061 A8E3 0315 0300 05AE 0062;0061 05AE A8E3 0300 0315 0062;0061 05AE A8E3 0300 0315 0062;0061 05AE A8E3 0300 0315 0062;0061 05AE A8E3 0300 0315 0062; # (a◌꣣◌̕◌̀◌֮b; a◌֮◌꣣◌̀◌̕b; a◌֮◌꣣◌̀◌̕b; a◌֮◌꣣◌̀◌̕b; a◌֮◌꣣◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT THREE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E4 0062;00E0 05AE A8E4 0315 0062;0061 05AE 0300 A8E4 0315 0062;00E0 05AE A8E4 0315 0062;0061 05AE 0300 A8E4 0315 0062; # (a◌̕◌̀◌֮◌꣤b; à◌֮◌꣤◌̕b; a◌֮◌̀◌꣤◌̕b; à◌֮◌꣤◌̕b; a◌֮◌̀◌꣤◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT FOUR, LATIN SMALL LETTER B 0061 A8E4 0315 0300 05AE 0062;0061 05AE A8E4 0300 0315 0062;0061 05AE A8E4 0300 0315 0062;0061 05AE A8E4 0300 0315 0062;0061 05AE A8E4 0300 0315 0062; # (a◌꣤◌̕◌̀◌֮b; a◌֮◌꣤◌̀◌̕b; a◌֮◌꣤◌̀◌̕b; a◌֮◌꣤◌̀◌̕b; a◌֮◌꣤◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT FOUR, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E5 0062;00E0 05AE A8E5 0315 0062;0061 05AE 0300 A8E5 0315 0062;00E0 05AE A8E5 0315 0062;0061 05AE 0300 A8E5 0315 0062; # (a◌̕◌̀◌֮◌꣥b; à◌֮◌꣥◌̕b; a◌֮◌̀◌꣥◌̕b; à◌֮◌꣥◌̕b; a◌֮◌̀◌꣥◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT FIVE, LATIN SMALL LETTER B 0061 A8E5 0315 0300 05AE 0062;0061 05AE A8E5 0300 0315 0062;0061 05AE A8E5 0300 0315 0062;0061 05AE A8E5 0300 0315 0062;0061 05AE A8E5 0300 0315 0062; # (a◌꣥◌̕◌̀◌֮b; a◌֮◌꣥◌̀◌̕b; a◌֮◌꣥◌̀◌̕b; a◌֮◌꣥◌̀◌̕b; a◌֮◌꣥◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT FIVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E6 0062;00E0 05AE A8E6 0315 0062;0061 05AE 0300 A8E6 0315 0062;00E0 05AE A8E6 0315 0062;0061 05AE 0300 A8E6 0315 0062; # (a◌̕◌̀◌֮◌꣦b; à◌֮◌꣦◌̕b; a◌֮◌̀◌꣦◌̕b; à◌֮◌꣦◌̕b; a◌֮◌̀◌꣦◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT SIX, LATIN SMALL LETTER B 0061 A8E6 0315 0300 05AE 0062;0061 05AE A8E6 0300 0315 0062;0061 05AE A8E6 0300 0315 0062;0061 05AE A8E6 0300 0315 0062;0061 05AE A8E6 0300 0315 0062; # (a◌꣦◌̕◌̀◌֮b; a◌֮◌꣦◌̀◌̕b; a◌֮◌꣦◌̀◌̕b; a◌֮◌꣦◌̀◌̕b; a◌֮◌꣦◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT SIX, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E7 0062;00E0 05AE A8E7 0315 0062;0061 05AE 0300 A8E7 0315 0062;00E0 05AE A8E7 0315 0062;0061 05AE 0300 A8E7 0315 0062; # (a◌̕◌̀◌֮◌꣧b; à◌֮◌꣧◌̕b; a◌֮◌̀◌꣧◌̕b; à◌֮◌꣧◌̕b; a◌֮◌̀◌꣧◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT SEVEN, LATIN SMALL LETTER B 0061 A8E7 0315 0300 05AE 0062;0061 05AE A8E7 0300 0315 0062;0061 05AE A8E7 0300 0315 0062;0061 05AE A8E7 0300 0315 0062;0061 05AE A8E7 0300 0315 0062; # (a◌꣧◌̕◌̀◌֮b; a◌֮◌꣧◌̀◌̕b; a◌֮◌꣧◌̀◌̕b; a◌֮◌꣧◌̀◌̕b; a◌֮◌꣧◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT SEVEN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E8 0062;00E0 05AE A8E8 0315 0062;0061 05AE 0300 A8E8 0315 0062;00E0 05AE A8E8 0315 0062;0061 05AE 0300 A8E8 0315 0062; # (a◌̕◌̀◌֮◌꣨b; à◌֮◌꣨◌̕b; a◌֮◌̀◌꣨◌̕b; à◌֮◌꣨◌̕b; a◌֮◌̀◌꣨◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT EIGHT, LATIN SMALL LETTER B 0061 A8E8 0315 0300 05AE 0062;0061 05AE A8E8 0300 0315 0062;0061 05AE A8E8 0300 0315 0062;0061 05AE A8E8 0300 0315 0062;0061 05AE A8E8 0300 0315 0062; # (a◌꣨◌̕◌̀◌֮b; a◌֮◌꣨◌̀◌̕b; a◌֮◌꣨◌̀◌̕b; a◌֮◌꣨◌̀◌̕b; a◌֮◌꣨◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT EIGHT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8E9 0062;00E0 05AE A8E9 0315 0062;0061 05AE 0300 A8E9 0315 0062;00E0 05AE A8E9 0315 0062;0061 05AE 0300 A8E9 0315 0062; # (a◌̕◌̀◌֮◌꣩b; à◌֮◌꣩◌̕b; a◌֮◌̀◌꣩◌̕b; à◌֮◌꣩◌̕b; a◌֮◌̀◌꣩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI DIGIT NINE, LATIN SMALL LETTER B 0061 A8E9 0315 0300 05AE 0062;0061 05AE A8E9 0300 0315 0062;0061 05AE A8E9 0300 0315 0062;0061 05AE A8E9 0300 0315 0062;0061 05AE A8E9 0300 0315 0062; # (a◌꣩◌̕◌̀◌֮b; a◌֮◌꣩◌̀◌̕b; a◌֮◌꣩◌̀◌̕b; a◌֮◌꣩◌̀◌̕b; a◌֮◌꣩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI DIGIT NINE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8EA 0062;00E0 05AE A8EA 0315 0062;0061 05AE 0300 A8EA 0315 0062;00E0 05AE A8EA 0315 0062;0061 05AE 0300 A8EA 0315 0062; # (a◌̕◌̀◌֮◌꣪b; à◌֮◌꣪◌̕b; a◌֮◌̀◌꣪◌̕b; à◌֮◌꣪◌̕b; a◌֮◌̀◌꣪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER A, LATIN SMALL LETTER B 0061 A8EA 0315 0300 05AE 0062;0061 05AE A8EA 0300 0315 0062;0061 05AE A8EA 0300 0315 0062;0061 05AE A8EA 0300 0315 0062;0061 05AE A8EA 0300 0315 0062; # (a◌꣪◌̕◌̀◌֮b; a◌֮◌꣪◌̀◌̕b; a◌֮◌꣪◌̀◌̕b; a◌֮◌꣪◌̀◌̕b; a◌֮◌꣪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8EB 0062;00E0 05AE A8EB 0315 0062;0061 05AE 0300 A8EB 0315 0062;00E0 05AE A8EB 0315 0062;0061 05AE 0300 A8EB 0315 0062; # (a◌̕◌̀◌֮◌꣫b; à◌֮◌꣫◌̕b; a◌֮◌̀◌꣫◌̕b; à◌֮◌꣫◌̕b; a◌֮◌̀◌꣫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER U, LATIN SMALL LETTER B 0061 A8EB 0315 0300 05AE 0062;0061 05AE A8EB 0300 0315 0062;0061 05AE A8EB 0300 0315 0062;0061 05AE A8EB 0300 0315 0062;0061 05AE A8EB 0300 0315 0062; # (a◌꣫◌̕◌̀◌֮b; a◌֮◌꣫◌̀◌̕b; a◌֮◌꣫◌̀◌̕b; a◌֮◌꣫◌̀◌̕b; a◌֮◌꣫◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER U, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8EC 0062;00E0 05AE A8EC 0315 0062;0061 05AE 0300 A8EC 0315 0062;00E0 05AE A8EC 0315 0062;0061 05AE 0300 A8EC 0315 0062; # (a◌̕◌̀◌֮◌꣬b; à◌֮◌꣬◌̕b; a◌֮◌̀◌꣬◌̕b; à◌֮◌꣬◌̕b; a◌֮◌̀◌꣬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER KA, LATIN SMALL LETTER B 0061 A8EC 0315 0300 05AE 0062;0061 05AE A8EC 0300 0315 0062;0061 05AE A8EC 0300 0315 0062;0061 05AE A8EC 0300 0315 0062;0061 05AE A8EC 0300 0315 0062; # (a◌꣬◌̕◌̀◌֮b; a◌֮◌꣬◌̀◌̕b; a◌֮◌꣬◌̀◌̕b; a◌֮◌꣬◌̀◌̕b; a◌֮◌꣬◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER KA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8ED 0062;00E0 05AE A8ED 0315 0062;0061 05AE 0300 A8ED 0315 0062;00E0 05AE A8ED 0315 0062;0061 05AE 0300 A8ED 0315 0062; # (a◌̕◌̀◌֮◌꣭b; à◌֮◌꣭◌̕b; a◌֮◌̀◌꣭◌̕b; à◌֮◌꣭◌̕b; a◌֮◌̀◌꣭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER NA, LATIN SMALL LETTER B 0061 A8ED 0315 0300 05AE 0062;0061 05AE A8ED 0300 0315 0062;0061 05AE A8ED 0300 0315 0062;0061 05AE A8ED 0300 0315 0062;0061 05AE A8ED 0300 0315 0062; # (a◌꣭◌̕◌̀◌֮b; a◌֮◌꣭◌̀◌̕b; a◌֮◌꣭◌̀◌̕b; a◌֮◌꣭◌̀◌̕b; a◌֮◌꣭◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER NA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8EE 0062;00E0 05AE A8EE 0315 0062;0061 05AE 0300 A8EE 0315 0062;00E0 05AE A8EE 0315 0062;0061 05AE 0300 A8EE 0315 0062; # (a◌̕◌̀◌֮◌꣮b; à◌֮◌꣮◌̕b; a◌֮◌̀◌꣮◌̕b; à◌֮◌꣮◌̕b; a◌֮◌̀◌꣮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER PA, LATIN SMALL LETTER B 0061 A8EE 0315 0300 05AE 0062;0061 05AE A8EE 0300 0315 0062;0061 05AE A8EE 0300 0315 0062;0061 05AE A8EE 0300 0315 0062;0061 05AE A8EE 0300 0315 0062; # (a◌꣮◌̕◌̀◌֮b; a◌֮◌꣮◌̀◌̕b; a◌֮◌꣮◌̀◌̕b; a◌֮◌꣮◌̀◌̕b; a◌֮◌꣮◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER PA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8EF 0062;00E0 05AE A8EF 0315 0062;0061 05AE 0300 A8EF 0315 0062;00E0 05AE A8EF 0315 0062;0061 05AE 0300 A8EF 0315 0062; # (a◌̕◌̀◌֮◌꣯b; à◌֮◌꣯◌̕b; a◌֮◌̀◌꣯◌̕b; à◌֮◌꣯◌̕b; a◌֮◌̀◌꣯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER RA, LATIN SMALL LETTER B 0061 A8EF 0315 0300 05AE 0062;0061 05AE A8EF 0300 0315 0062;0061 05AE A8EF 0300 0315 0062;0061 05AE A8EF 0300 0315 0062;0061 05AE A8EF 0300 0315 0062; # (a◌꣯◌̕◌̀◌֮b; a◌֮◌꣯◌̀◌̕b; a◌֮◌꣯◌̀◌̕b; a◌֮◌꣯◌̀◌̕b; a◌֮◌꣯◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER RA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8F0 0062;00E0 05AE A8F0 0315 0062;0061 05AE 0300 A8F0 0315 0062;00E0 05AE A8F0 0315 0062;0061 05AE 0300 A8F0 0315 0062; # (a◌̕◌̀◌֮◌꣰b; à◌֮◌꣰◌̕b; a◌֮◌̀◌꣰◌̕b; à◌֮◌꣰◌̕b; a◌֮◌̀◌꣰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI LETTER VI, LATIN SMALL LETTER B 0061 A8F0 0315 0300 05AE 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062; # (a◌꣰◌̕◌̀◌֮b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; a◌֮◌꣰◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI LETTER VI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE A8F1 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 0315 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 0315 0062; # (a◌̕◌̀◌֮◌꣱b; à◌֮◌꣱◌̕b; a◌֮◌̀◌꣱◌̕b; à◌֮◌꣱◌̕b; a◌֮◌̀◌꣱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DEVANAGARI SIGN AVAGRAHA, LATIN SMALL LETTER B 0061 A8F1 0315 0300 05AE 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062; # (a◌꣱◌̕◌̀◌֮b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; a◌֮◌꣱◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DEVANAGARI SIGN AVAGRAHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A A92B 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062; # (a◌֚◌̖◌〪◌꤫b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; a◌〪◌̖◌꤫◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, KAYAH LI TONE PLOPHU, LATIN SMALL LETTER B 0061 A92B 059A 0316 302A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062; # (a◌꤫◌֚◌̖◌〪b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; a◌〪◌꤫◌̖◌֚b; ) LATIN SMALL LETTER A, KAYAH LI TONE PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A A92C 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062; # (a◌֚◌̖◌〪◌꤬b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; a◌〪◌̖◌꤬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, KAYAH LI TONE CALYA, LATIN SMALL LETTER B 0061 A92C 059A 0316 302A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062; # (a◌꤬◌֚◌̖◌〪b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; a◌〪◌꤬◌̖◌֚b; ) LATIN SMALL LETTER A, KAYAH LI TONE CALYA, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A A92D 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062; # (a◌֚◌̖◌〪◌꤭b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; a◌〪◌̖◌꤭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, KAYAH LI TONE CALYA PLOPHU, LATIN SMALL LETTER B 0061 A92D 059A 0316 302A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062; # (a◌꤭◌֚◌̖◌〪b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; a◌〪◌꤭◌̖◌֚b; ) LATIN SMALL LETTER A, KAYAH LI TONE CALYA PLOPHU, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 A953 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062; # (a◌ְ◌्◌゙꥓b; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; a◌゙◌्꥓◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, REJANG VIRAMA, LATIN SMALL LETTER B 0061 A953 05B0 094D 3099 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062; # (a꥓◌ְ◌्◌゙b; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; a◌゙꥓◌्◌ְb; ) LATIN SMALL LETTER A, REJANG VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 A9B3 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062; # (a◌゙◌़◌̴◌꦳b; a◌̴◌़◌꦳◌゙b; a◌̴◌़◌꦳◌゙b; a◌̴◌़◌꦳◌゙b; a◌̴◌़◌꦳◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, JAVANESE SIGN CECAK TELU, LATIN SMALL LETTER B 0061 A9B3 3099 093C 0334 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062; # (a◌꦳◌゙◌़◌̴b; a◌̴◌꦳◌़◌゙b; a◌̴◌꦳◌़◌゙b; a◌̴◌꦳◌़◌゙b; a◌̴◌꦳◌़◌゙b; ) LATIN SMALL LETTER A, JAVANESE SIGN CECAK TELU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 A9C0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062; # (a◌ְ◌्◌゙꧀b; a◌゙◌्꧀◌ְb; a◌゙◌्꧀◌ְb; a◌゙◌्꧀◌ְb; a◌゙◌्꧀◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, JAVANESE PANGKON, LATIN SMALL LETTER B 0061 A9C0 05B0 094D 3099 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062; # (a꧀◌ְ◌्◌゙b; a◌゙꧀◌्◌ְb; a◌゙꧀◌्◌ְb; a◌゙꧀◌्◌ְb; a◌゙꧀◌्◌ְb; ) LATIN SMALL LETTER A, JAVANESE PANGKON, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE AAB0 0062;00E0 05AE AAB0 0315 0062;0061 05AE 0300 AAB0 0315 0062;00E0 05AE AAB0 0315 0062;0061 05AE 0300 AAB0 0315 0062; # (a◌̕◌̀◌֮◌ꪰb; à◌֮◌ꪰ◌̕b; a◌֮◌̀◌ꪰ◌̕b; à◌֮◌ꪰ◌̕b; a◌֮◌̀◌ꪰ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET MAI KANG, LATIN SMALL LETTER B 0061 AAB0 0315 0300 05AE 0062;0061 05AE AAB0 0300 0315 0062;0061 05AE AAB0 0300 0315 0062;0061 05AE AAB0 0300 0315 0062;0061 05AE AAB0 0300 0315 0062; # (a◌ꪰ◌̕◌̀◌֮b; a◌֮◌ꪰ◌̀◌̕b; a◌֮◌ꪰ◌̀◌̕b; a◌֮◌ꪰ◌̀◌̕b; a◌֮◌ꪰ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET MAI KANG, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AAB2 0062;00E0 05AE AAB2 0315 0062;0061 05AE 0300 AAB2 0315 0062;00E0 05AE AAB2 0315 0062;0061 05AE 0300 AAB2 0315 0062; # (a◌̕◌̀◌֮◌ꪲb; à◌֮◌ꪲ◌̕b; a◌֮◌̀◌ꪲ◌̕b; à◌֮◌ꪲ◌̕b; a◌֮◌̀◌ꪲ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET VOWEL I, LATIN SMALL LETTER B 0061 AAB2 0315 0300 05AE 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062; # (a◌ꪲ◌̕◌̀◌֮b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; a◌֮◌ꪲ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET VOWEL I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AAB3 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 0315 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 0315 0062; # (a◌̕◌̀◌֮◌ꪳb; à◌֮◌ꪳ◌̕b; a◌֮◌̀◌ꪳ◌̕b; à◌֮◌ꪳ◌̕b; a◌֮◌̀◌ꪳ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET VOWEL UE, LATIN SMALL LETTER B 0061 AAB3 0315 0300 05AE 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062; # (a◌ꪳ◌̕◌̀◌֮b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; a◌֮◌ꪳ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET VOWEL UE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A AAB4 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062; # (a◌֚◌̖◌〪◌ꪴb; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; a◌〪◌̖◌ꪴ◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, TAI VIET VOWEL U, LATIN SMALL LETTER B 0061 AAB4 059A 0316 302A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062; # (a◌ꪴ◌֚◌̖◌〪b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; a◌〪◌ꪴ◌̖◌֚b; ) LATIN SMALL LETTER A, TAI VIET VOWEL U, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE AAB7 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 0315 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 0315 0062; # (a◌̕◌̀◌֮◌ꪷb; à◌֮◌ꪷ◌̕b; a◌֮◌̀◌ꪷ◌̕b; à◌֮◌ꪷ◌̕b; a◌֮◌̀◌ꪷ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET MAI KHIT, LATIN SMALL LETTER B 0061 AAB7 0315 0300 05AE 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062; # (a◌ꪷ◌̕◌̀◌֮b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; a◌֮◌ꪷ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET MAI KHIT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AAB8 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 0315 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 0315 0062; # (a◌̕◌̀◌֮◌ꪸb; à◌֮◌ꪸ◌̕b; a◌֮◌̀◌ꪸ◌̕b; à◌֮◌ꪸ◌̕b; a◌֮◌̀◌ꪸ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET VOWEL IA, LATIN SMALL LETTER B 0061 AAB8 0315 0300 05AE 0062;0061 05AE AAB8 0300 0315 0062;0061 05AE AAB8 0300 0315 0062;0061 05AE AAB8 0300 0315 0062;0061 05AE AAB8 0300 0315 0062; # (a◌ꪸ◌̕◌̀◌֮b; a◌֮◌ꪸ◌̀◌̕b; a◌֮◌ꪸ◌̀◌̕b; a◌֮◌ꪸ◌̀◌̕b; a◌֮◌ꪸ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET VOWEL IA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AABE 0062;00E0 05AE AABE 0315 0062;0061 05AE 0300 AABE 0315 0062;00E0 05AE AABE 0315 0062;0061 05AE 0300 AABE 0315 0062; # (a◌̕◌̀◌֮◌ꪾb; à◌֮◌ꪾ◌̕b; a◌֮◌̀◌ꪾ◌̕b; à◌֮◌ꪾ◌̕b; a◌֮◌̀◌ꪾ◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET VOWEL AM, LATIN SMALL LETTER B 0061 AABE 0315 0300 05AE 0062;0061 05AE AABE 0300 0315 0062;0061 05AE AABE 0300 0315 0062;0061 05AE AABE 0300 0315 0062;0061 05AE AABE 0300 0315 0062; # (a◌ꪾ◌̕◌̀◌֮b; a◌֮◌ꪾ◌̀◌̕b; a◌֮◌ꪾ◌̀◌̕b; a◌֮◌ꪾ◌̀◌̕b; a◌֮◌ꪾ◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET VOWEL AM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AABF 0062;00E0 05AE AABF 0315 0062;0061 05AE 0300 AABF 0315 0062;00E0 05AE AABF 0315 0062;0061 05AE 0300 AABF 0315 0062; # (a◌̕◌̀◌֮◌꪿b; à◌֮◌꪿◌̕b; a◌֮◌̀◌꪿◌̕b; à◌֮◌꪿◌̕b; a◌֮◌̀◌꪿◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET TONE MAI EK, LATIN SMALL LETTER B 0061 AABF 0315 0300 05AE 0062;0061 05AE AABF 0300 0315 0062;0061 05AE AABF 0300 0315 0062;0061 05AE AABF 0300 0315 0062;0061 05AE AABF 0300 0315 0062; # (a◌꪿◌̕◌̀◌֮b; a◌֮◌꪿◌̀◌̕b; a◌֮◌꪿◌̀◌̕b; a◌֮◌꪿◌̀◌̕b; a◌֮◌꪿◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET TONE MAI EK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE AAC1 0062;00E0 05AE AAC1 0315 0062;0061 05AE 0300 AAC1 0315 0062;00E0 05AE AAC1 0315 0062;0061 05AE 0300 AAC1 0315 0062; # (a◌̕◌̀◌֮◌꫁b; à◌֮◌꫁◌̕b; a◌֮◌̀◌꫁◌̕b; à◌֮◌꫁◌̕b; a◌֮◌̀◌꫁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, TAI VIET TONE MAI THO, LATIN SMALL LETTER B 0061 AAC1 0315 0300 05AE 0062;0061 05AE AAC1 0300 0315 0062;0061 05AE AAC1 0300 0315 0062;0061 05AE AAC1 0300 0315 0062;0061 05AE AAC1 0300 0315 0062; # (a◌꫁◌̕◌̀◌֮b; a◌֮◌꫁◌̀◌̕b; a◌֮◌꫁◌̀◌̕b; a◌֮◌꫁◌̀◌̕b; a◌֮◌꫁◌̀◌̕b; ) LATIN SMALL LETTER A, TAI VIET TONE MAI THO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 AAF6 0062;0061 3099 094D AAF6 05B0 0062;0061 3099 094D AAF6 05B0 0062;0061 3099 094D AAF6 05B0 0062;0061 3099 094D AAF6 05B0 0062; # (a◌ְ◌्◌゙◌꫶b; a◌゙◌्◌꫶◌ְb; a◌゙◌्◌꫶◌ְb; a◌゙◌्◌꫶◌ְb; a◌゙◌्◌꫶◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MEETEI MAYEK VIRAMA, LATIN SMALL LETTER B 0061 AAF6 05B0 094D 3099 0062;0061 3099 AAF6 094D 05B0 0062;0061 3099 AAF6 094D 05B0 0062;0061 3099 AAF6 094D 05B0 0062;0061 3099 AAF6 094D 05B0 0062; # (a◌꫶◌ְ◌्◌゙b; a◌゙◌꫶◌्◌ְb; a◌゙◌꫶◌्◌ְb; a◌゙◌꫶◌्◌ְb; a◌゙◌꫶◌्◌ְb; ) LATIN SMALL LETTER A, MEETEI MAYEK VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 ABED 0062;0061 3099 094D ABED 05B0 0062;0061 3099 094D ABED 05B0 0062;0061 3099 094D ABED 05B0 0062;0061 3099 094D ABED 05B0 0062; # (a◌ְ◌्◌゙◌꯭b; a◌゙◌्◌꯭◌ְb; a◌゙◌्◌꯭◌ְb; a◌゙◌्◌꯭◌ְb; a◌゙◌्◌꯭◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MEETEI MAYEK APUN IYEK, LATIN SMALL LETTER B 0061 ABED 05B0 094D 3099 0062;0061 3099 ABED 094D 05B0 0062;0061 3099 ABED 094D 05B0 0062;0061 3099 ABED 094D 05B0 0062;0061 3099 ABED 094D 05B0 0062; # (a◌꯭◌ְ◌्◌゙b; a◌゙◌꯭◌्◌ְb; a◌゙◌꯭◌्◌ְb; a◌゙◌꯭◌्◌ְb; a◌゙◌꯭◌्◌ְb; ) LATIN SMALL LETTER A, MEETEI MAYEK APUN IYEK, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 064B FB1E 05C2 FB1E 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; # (a◌ً◌ﬞ◌ׂ◌ﬞb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; ) LATIN SMALL LETTER A, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, HEBREW POINT JUDEO-SPANISH VARIKA, LATIN SMALL LETTER B 0061 FB1E 064B FB1E 05C2 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; # (a◌ﬞ◌ً◌ﬞ◌ׂb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; a◌ׂ◌ﬞ◌ﬞ◌ًb; ) LATIN SMALL LETTER A, HEBREW POINT JUDEO-SPANISH VARIKA, ARABIC FATHATAN, HEBREW POINT JUDEO-SPANISH VARIKA, HEBREW POINT SIN DOT, LATIN SMALL LETTER B 0061 0315 0300 05AE FE20 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062; # (a◌̕◌̀◌֮◌︠b; à◌֮◌︠◌̕b; a◌֮◌̀◌︠◌̕b; à◌֮◌︠◌̕b; a◌֮◌̀◌︠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LIGATURE LEFT HALF, LATIN SMALL LETTER B 0061 FE20 0315 0300 05AE 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062; # (a◌︠◌̕◌̀◌֮b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; a◌֮◌︠◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LIGATURE LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE21 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062; # (a◌̕◌̀◌֮◌︡b; à◌֮◌︡◌̕b; a◌֮◌̀◌︡◌̕b; à◌֮◌︡◌̕b; a◌֮◌̀◌︡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING LIGATURE RIGHT HALF, LATIN SMALL LETTER B 0061 FE21 0315 0300 05AE 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062; # (a◌︡◌̕◌̀◌֮b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; a◌֮◌︡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING LIGATURE RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE22 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062; # (a◌̕◌̀◌֮◌︢b; à◌֮◌︢◌̕b; a◌֮◌̀◌︢◌̕b; à◌֮◌︢◌̕b; a◌֮◌̀◌︢◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE TILDE LEFT HALF, LATIN SMALL LETTER B 0061 FE22 0315 0300 05AE 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062; # (a◌︢◌̕◌̀◌֮b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; a◌֮◌︢◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE23 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062; # (a◌̕◌̀◌֮◌︣b; à◌֮◌︣◌̕b; a◌֮◌̀◌︣◌̕b; à◌֮◌︣◌̕b; a◌֮◌̀◌︣◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING DOUBLE TILDE RIGHT HALF, LATIN SMALL LETTER B 0061 FE23 0315 0300 05AE 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062; # (a◌︣◌̕◌̀◌֮b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; a◌֮◌︣◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING DOUBLE TILDE RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE24 0062;00E0 05AE FE24 0315 0062;0061 05AE 0300 FE24 0315 0062;00E0 05AE FE24 0315 0062;0061 05AE 0300 FE24 0315 0062; # (a◌̕◌̀◌֮◌︤b; à◌֮◌︤◌̕b; a◌֮◌̀◌︤◌̕b; à◌֮◌︤◌̕b; a◌֮◌̀◌︤◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON LEFT HALF, LATIN SMALL LETTER B 0061 FE24 0315 0300 05AE 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062; # (a◌︤◌̕◌̀◌֮b; a◌֮◌︤◌̀◌̕b; a◌֮◌︤◌̀◌̕b; a◌֮◌︤◌̀◌̕b; a◌֮◌︤◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE25 0062;00E0 05AE FE25 0315 0062;0061 05AE 0300 FE25 0315 0062;00E0 05AE FE25 0315 0062;0061 05AE 0300 FE25 0315 0062; # (a◌̕◌̀◌֮◌︥b; à◌֮◌︥◌̕b; a◌֮◌̀◌︥◌̕b; à◌֮◌︥◌̕b; a◌֮◌̀◌︥◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING MACRON RIGHT HALF, LATIN SMALL LETTER B 0061 FE25 0315 0300 05AE 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062; # (a◌︥◌̕◌̀◌֮b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; a◌֮◌︥◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING MACRON RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE26 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062; # (a◌̕◌̀◌֮◌︦b; à◌֮◌︦◌̕b; a◌֮◌̀◌︦◌̕b; à◌֮◌︦◌̕b; a◌֮◌̀◌︦◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CONJOINING MACRON, LATIN SMALL LETTER B 0061 FE26 0315 0300 05AE 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062; # (a◌︦◌̕◌̀◌֮b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; a◌֮◌︦◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CONJOINING MACRON, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A FE27 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062; # (a◌֚◌̖◌〪◌︧b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; a◌〪◌̖◌︧◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LIGATURE LEFT HALF BELOW, LATIN SMALL LETTER B 0061 FE27 059A 0316 302A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062; # (a◌︧◌֚◌̖◌〪b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; a◌〪◌︧◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LIGATURE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE28 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062; # (a◌֚◌̖◌〪◌︨b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; a◌〪◌̖◌︨◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING LIGATURE RIGHT HALF BELOW, LATIN SMALL LETTER B 0061 FE28 059A 0316 302A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062; # (a◌︨◌֚◌̖◌〪b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; a◌〪◌︨◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING LIGATURE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE29 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062; # (a◌֚◌̖◌〪◌︩b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; a◌〪◌̖◌︩◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING TILDE LEFT HALF BELOW, LATIN SMALL LETTER B 0061 FE29 059A 0316 302A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062; # (a◌︩◌֚◌̖◌〪b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; a◌〪◌︩◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING TILDE LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE2A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062; # (a◌֚◌̖◌〪◌︪b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; a◌〪◌̖◌︪◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING TILDE RIGHT HALF BELOW, LATIN SMALL LETTER B 0061 FE2A 059A 0316 302A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062; # (a◌︪◌֚◌̖◌〪b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; a◌〪◌︪◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING TILDE RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE2B 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062; # (a◌֚◌̖◌〪◌︫b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; a◌〪◌̖◌︫◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MACRON LEFT HALF BELOW, LATIN SMALL LETTER B 0061 FE2B 059A 0316 302A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062; # (a◌︫◌֚◌̖◌〪b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; a◌〪◌︫◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MACRON LEFT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE2C 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062; # (a◌֚◌̖◌〪◌︬b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; a◌〪◌̖◌︬◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING MACRON RIGHT HALF BELOW, LATIN SMALL LETTER B 0061 FE2C 059A 0316 302A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062; # (a◌︬◌֚◌̖◌〪b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; a◌〪◌︬◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING MACRON RIGHT HALF BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A FE2D 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062; # (a◌֚◌̖◌〪◌︭b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; a◌〪◌̖◌︭◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COMBINING CONJOINING MACRON BELOW, LATIN SMALL LETTER B 0061 FE2D 059A 0316 302A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062; # (a◌︭◌֚◌̖◌〪b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; a◌〪◌︭◌̖◌֚b; ) LATIN SMALL LETTER A, COMBINING CONJOINING MACRON BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE FE2E 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 0315 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 0315 0062; # (a◌̕◌̀◌֮◌︮b; à◌֮◌︮◌̕b; a◌֮◌̀◌︮◌̕b; à◌֮◌︮◌̕b; a◌֮◌̀◌︮◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC TITLO LEFT HALF, LATIN SMALL LETTER B 0061 FE2E 0315 0300 05AE 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062; # (a◌︮◌̕◌̀◌֮b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; a◌֮◌︮◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC TITLO LEFT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE FE2F 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 0315 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 0315 0062; # (a◌̕◌̀◌֮◌︯b; à◌֮◌︯◌̕b; a◌֮◌̀◌︯◌̕b; à◌֮◌︯◌̕b; a◌֮◌̀◌︯◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING CYRILLIC TITLO RIGHT HALF, LATIN SMALL LETTER B 0061 FE2F 0315 0300 05AE 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062; # (a◌︯◌̕◌̀◌֮b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; a◌֮◌︯◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING CYRILLIC TITLO RIGHT HALF, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 101FD 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062; # (a◌֚◌̖◌〪◌𐇽b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; a◌〪◌̖◌𐇽◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, LATIN SMALL LETTER B 0061 101FD 059A 0316 302A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062; # (a◌𐇽◌֚◌̖◌〪b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; a◌〪◌𐇽◌̖◌֚b; ) LATIN SMALL LETTER A, PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 102E0 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062; # (a◌֚◌̖◌〪◌𐋠b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; a◌〪◌̖◌𐋠◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, COPTIC EPACT THOUSANDS MARK, LATIN SMALL LETTER B 0061 102E0 059A 0316 302A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062; # (a◌𐋠◌֚◌̖◌〪b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; a◌〪◌𐋠◌̖◌֚b; ) LATIN SMALL LETTER A, COPTIC EPACT THOUSANDS MARK, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 10376 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 0315 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 0315 0062; # (a◌̕◌̀◌֮◌𐍶b; à◌֮◌𐍶◌̕b; a◌֮◌̀◌𐍶◌̕b; à◌֮◌𐍶◌̕b; a◌֮◌̀◌𐍶◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OLD PERMIC LETTER AN, LATIN SMALL LETTER B 0061 10376 0315 0300 05AE 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062; # (a◌𐍶◌̕◌̀◌֮b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; a◌֮◌𐍶◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OLD PERMIC LETTER AN, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 10377 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 0315 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 0315 0062; # (a◌̕◌̀◌֮◌𐍷b; à◌֮◌𐍷◌̕b; a◌֮◌̀◌𐍷◌̕b; à◌֮◌𐍷◌̕b; a◌֮◌̀◌𐍷◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OLD PERMIC LETTER DOI, LATIN SMALL LETTER B 0061 10377 0315 0300 05AE 0062;0061 05AE 10377 0300 0315 0062;0061 05AE 10377 0300 0315 0062;0061 05AE 10377 0300 0315 0062;0061 05AE 10377 0300 0315 0062; # (a◌𐍷◌̕◌̀◌֮b; a◌֮◌𐍷◌̀◌̕b; a◌֮◌𐍷◌̀◌̕b; a◌֮◌𐍷◌̀◌̕b; a◌֮◌𐍷◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OLD PERMIC LETTER DOI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 10378 0062;00E0 05AE 10378 0315 0062;0061 05AE 0300 10378 0315 0062;00E0 05AE 10378 0315 0062;0061 05AE 0300 10378 0315 0062; # (a◌̕◌̀◌֮◌𐍸b; à◌֮◌𐍸◌̕b; a◌֮◌̀◌𐍸◌̕b; à◌֮◌𐍸◌̕b; a◌֮◌̀◌𐍸◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OLD PERMIC LETTER ZATA, LATIN SMALL LETTER B 0061 10378 0315 0300 05AE 0062;0061 05AE 10378 0300 0315 0062;0061 05AE 10378 0300 0315 0062;0061 05AE 10378 0300 0315 0062;0061 05AE 10378 0300 0315 0062; # (a◌𐍸◌̕◌̀◌֮b; a◌֮◌𐍸◌̀◌̕b; a◌֮◌𐍸◌̀◌̕b; a◌֮◌𐍸◌̀◌̕b; a◌֮◌𐍸◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OLD PERMIC LETTER ZATA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 10379 0062;00E0 05AE 10379 0315 0062;0061 05AE 0300 10379 0315 0062;00E0 05AE 10379 0315 0062;0061 05AE 0300 10379 0315 0062; # (a◌̕◌̀◌֮◌𐍹b; à◌֮◌𐍹◌̕b; a◌֮◌̀◌𐍹◌̕b; à◌֮◌𐍹◌̕b; a◌֮◌̀◌𐍹◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OLD PERMIC LETTER NENOE, LATIN SMALL LETTER B 0061 10379 0315 0300 05AE 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062; # (a◌𐍹◌̕◌̀◌֮b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; a◌֮◌𐍹◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OLD PERMIC LETTER NENOE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1037A 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 0315 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 0315 0062; # (a◌̕◌̀◌֮◌𐍺b; à◌֮◌𐍺◌̕b; a◌֮◌̀◌𐍺◌̕b; à◌֮◌𐍺◌̕b; a◌֮◌̀◌𐍺◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING OLD PERMIC LETTER SII, LATIN SMALL LETTER B 0061 1037A 0315 0300 05AE 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062; # (a◌𐍺◌̕◌̀◌֮b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; a◌֮◌𐍺◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING OLD PERMIC LETTER SII, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 10A0D 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062; # (a◌֚◌̖◌〪◌𐨍b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; a◌〪◌̖◌𐨍◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, KHAROSHTHI SIGN DOUBLE RING BELOW, LATIN SMALL LETTER B 0061 10A0D 059A 0316 302A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062; # (a◌𐨍◌֚◌̖◌〪b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; a◌〪◌𐨍◌̖◌֚b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN DOUBLE RING BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 10A0F 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062; # (a◌̕◌̀◌֮◌𐨏b; à◌֮◌𐨏◌̕b; a◌֮◌̀◌𐨏◌̕b; à◌֮◌𐨏◌̕b; a◌֮◌̀◌𐨏◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, KHAROSHTHI SIGN VISARGA, LATIN SMALL LETTER B 0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062; # (a◌𐨏◌̕◌̀◌֮b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; a◌֮◌𐨏◌̀◌̕b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN VISARGA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062; # (a◌̕◌̀◌֮◌𐨸b; à◌֮◌𐨸◌̕b; a◌֮◌̀◌𐨸◌̕b; à◌֮◌𐨸◌̕b; a◌֮◌̀◌𐨸◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, KHAROSHTHI SIGN BAR ABOVE, LATIN SMALL LETTER B 0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062; # (a◌𐨸◌̕◌̀◌֮b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; a◌֮◌𐨸◌̀◌̕b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN BAR ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 10A39 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062; # (a◌़◌̴◌𐨹b; a◌̴◌𐨹◌़b; a◌̴◌𐨹◌़b; a◌̴◌𐨹◌़b; a◌̴◌𐨹◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, KHAROSHTHI SIGN CAUDA, LATIN SMALL LETTER B 0061 10A39 093C 0334 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062; # (a◌𐨹◌़◌̴b; a◌𐨹◌̴◌़b; a◌𐨹◌̴◌़b; a◌𐨹◌̴◌़b; a◌𐨹◌̴◌़b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN CAUDA, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062; # (a◌֚◌̖◌〪◌𐨺b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; a◌〪◌̖◌𐨺◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, KHAROSHTHI SIGN DOT BELOW, LATIN SMALL LETTER B 0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062; # (a◌𐨺◌֚◌̖◌〪b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; a◌〪◌𐨺◌̖◌֚b; ) LATIN SMALL LETTER A, KHAROSHTHI SIGN DOT BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062; # (a◌ְ◌्◌゙◌𐨿b; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; a◌゙◌्◌𐨿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KHAROSHTHI VIRAMA, LATIN SMALL LETTER B 0061 10A3F 05B0 094D 3099 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062; # (a◌𐨿◌ְ◌्◌゙b; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; a◌゙◌𐨿◌्◌ְb; ) LATIN SMALL LETTER A, KHAROSHTHI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 10AE5 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 0315 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 0315 0062; # (a◌̕◌̀◌֮◌𐫥b; à◌֮◌𐫥◌̕b; a◌֮◌̀◌𐫥◌̕b; à◌֮◌𐫥◌̕b; a◌֮◌̀◌𐫥◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MANICHAEAN ABBREVIATION MARK ABOVE, LATIN SMALL LETTER B 0061 10AE5 0315 0300 05AE 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062; # (a◌𐫥◌̕◌̀◌֮b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; a◌֮◌𐫥◌̀◌̕b; ) LATIN SMALL LETTER A, MANICHAEAN ABBREVIATION MARK ABOVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 10AE6 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062; # (a◌֚◌̖◌〪◌𐫦b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; a◌〪◌̖◌𐫦◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MANICHAEAN ABBREVIATION MARK BELOW, LATIN SMALL LETTER B 0061 10AE6 059A 0316 302A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062; # (a◌𐫦◌֚◌̖◌〪b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; a◌〪◌𐫦◌̖◌֚b; ) LATIN SMALL LETTER A, MANICHAEAN ABBREVIATION MARK BELOW, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 11046 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062; # (a◌ְ◌्◌゙◌𑁆b; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; a◌゙◌्◌𑁆◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BRAHMI VIRAMA, LATIN SMALL LETTER B 0061 11046 05B0 094D 3099 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062; # (a◌𑁆◌ְ◌्◌゙b; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; a◌゙◌𑁆◌्◌ְb; ) LATIN SMALL LETTER A, BRAHMI VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 1107F 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062; # (a◌ְ◌्◌゙◌𑁿b; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; a◌゙◌्◌𑁿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BRAHMI NUMBER JOINER, LATIN SMALL LETTER B 0061 1107F 05B0 094D 3099 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062; # (a◌𑁿◌ְ◌्◌゙b; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; a◌゙◌𑁿◌्◌ְb; ) LATIN SMALL LETTER A, BRAHMI NUMBER JOINER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 110B9 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062; # (a◌ְ◌्◌゙◌𑂹b; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; a◌゙◌्◌𑂹◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KAITHI SIGN VIRAMA, LATIN SMALL LETTER B 0061 110B9 05B0 094D 3099 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062; # (a◌𑂹◌ְ◌्◌゙b; a◌゙◌𑂹◌्◌ְb; a◌゙◌𑂹◌्◌ְb; a◌゙◌𑂹◌्◌ְb; a◌゙◌𑂹◌्◌ְb; ) LATIN SMALL LETTER A, KAITHI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 110BA 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062; # (a◌゙◌़◌̴◌𑂺b; a◌̴◌़◌𑂺◌゙b; a◌̴◌़◌𑂺◌゙b; a◌̴◌़◌𑂺◌゙b; a◌̴◌़◌𑂺◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, KAITHI SIGN NUKTA, LATIN SMALL LETTER B 0061 110BA 3099 093C 0334 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062; # (a◌𑂺◌゙◌़◌̴b; a◌̴◌𑂺◌़◌゙b; a◌̴◌𑂺◌़◌゙b; a◌̴◌𑂺◌़◌゙b; a◌̴◌𑂺◌़◌゙b; ) LATIN SMALL LETTER A, KAITHI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 11100 0062;00E0 05AE 11100 0315 0062;0061 05AE 0300 11100 0315 0062;00E0 05AE 11100 0315 0062;0061 05AE 0300 11100 0315 0062; # (a◌̕◌̀◌֮◌𑄀b; à◌֮◌𑄀◌̕b; a◌֮◌̀◌𑄀◌̕b; à◌֮◌𑄀◌̕b; a◌֮◌̀◌𑄀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, CHAKMA SIGN CANDRABINDU, LATIN SMALL LETTER B 0061 11100 0315 0300 05AE 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062; # (a◌𑄀◌̕◌̀◌֮b; a◌֮◌𑄀◌̀◌̕b; a◌֮◌𑄀◌̀◌̕b; a◌֮◌𑄀◌̀◌̕b; a◌֮◌𑄀◌̀◌̕b; ) LATIN SMALL LETTER A, CHAKMA SIGN CANDRABINDU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11101 0062;00E0 05AE 11101 0315 0062;0061 05AE 0300 11101 0315 0062;00E0 05AE 11101 0315 0062;0061 05AE 0300 11101 0315 0062; # (a◌̕◌̀◌֮◌𑄁b; à◌֮◌𑄁◌̕b; a◌֮◌̀◌𑄁◌̕b; à◌֮◌𑄁◌̕b; a◌֮◌̀◌𑄁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, CHAKMA SIGN ANUSVARA, LATIN SMALL LETTER B 0061 11101 0315 0300 05AE 0062;0061 05AE 11101 0300 0315 0062;0061 05AE 11101 0300 0315 0062;0061 05AE 11101 0300 0315 0062;0061 05AE 11101 0300 0315 0062; # (a◌𑄁◌̕◌̀◌֮b; a◌֮◌𑄁◌̀◌̕b; a◌֮◌𑄁◌̀◌̕b; a◌֮◌𑄁◌̀◌̕b; a◌֮◌𑄁◌̀◌̕b; ) LATIN SMALL LETTER A, CHAKMA SIGN ANUSVARA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11102 0062;00E0 05AE 11102 0315 0062;0061 05AE 0300 11102 0315 0062;00E0 05AE 11102 0315 0062;0061 05AE 0300 11102 0315 0062; # (a◌̕◌̀◌֮◌𑄂b; à◌֮◌𑄂◌̕b; a◌֮◌̀◌𑄂◌̕b; à◌֮◌𑄂◌̕b; a◌֮◌̀◌𑄂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, CHAKMA SIGN VISARGA, LATIN SMALL LETTER B 0061 11102 0315 0300 05AE 0062;0061 05AE 11102 0300 0315 0062;0061 05AE 11102 0300 0315 0062;0061 05AE 11102 0300 0315 0062;0061 05AE 11102 0300 0315 0062; # (a◌𑄂◌̕◌̀◌֮b; a◌֮◌𑄂◌̀◌̕b; a◌֮◌𑄂◌̀◌̕b; a◌֮◌𑄂◌̀◌̕b; a◌֮◌𑄂◌̀◌̕b; ) LATIN SMALL LETTER A, CHAKMA SIGN VISARGA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 11133 0062;0061 3099 094D 11133 05B0 0062;0061 3099 094D 11133 05B0 0062;0061 3099 094D 11133 05B0 0062;0061 3099 094D 11133 05B0 0062; # (a◌ְ◌्◌゙◌𑄳b; a◌゙◌्◌𑄳◌ְb; a◌゙◌्◌𑄳◌ְb; a◌゙◌्◌𑄳◌ְb; a◌゙◌्◌𑄳◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, CHAKMA VIRAMA, LATIN SMALL LETTER B 0061 11133 05B0 094D 3099 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062; # (a◌𑄳◌ְ◌्◌゙b; a◌゙◌𑄳◌्◌ְb; a◌゙◌𑄳◌्◌ְb; a◌゙◌𑄳◌्◌ְb; a◌゙◌𑄳◌्◌ְb; ) LATIN SMALL LETTER A, CHAKMA VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 11134 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062; # (a◌ְ◌्◌゙◌𑄴b; a◌゙◌्◌𑄴◌ְb; a◌゙◌्◌𑄴◌ְb; a◌゙◌्◌𑄴◌ְb; a◌゙◌्◌𑄴◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, CHAKMA MAAYYAA, LATIN SMALL LETTER B 0061 11134 05B0 094D 3099 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062; # (a◌𑄴◌ְ◌्◌゙b; a◌゙◌𑄴◌्◌ְb; a◌゙◌𑄴◌्◌ְb; a◌゙◌𑄴◌्◌ְb; a◌゙◌𑄴◌्◌ְb; ) LATIN SMALL LETTER A, CHAKMA MAAYYAA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 11173 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062; # (a◌゙◌़◌̴◌𑅳b; a◌̴◌़◌𑅳◌゙b; a◌̴◌़◌𑅳◌゙b; a◌̴◌़◌𑅳◌゙b; a◌̴◌़◌𑅳◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MAHAJANI SIGN NUKTA, LATIN SMALL LETTER B 0061 11173 3099 093C 0334 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062; # (a◌𑅳◌゙◌़◌̴b; a◌̴◌𑅳◌़◌゙b; a◌̴◌𑅳◌़◌゙b; a◌̴◌𑅳◌़◌゙b; a◌̴◌𑅳◌़◌゙b; ) LATIN SMALL LETTER A, MAHAJANI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 111C0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062; # (a◌ְ◌्◌゙𑇀b; a◌゙◌्𑇀◌ְb; a◌゙◌्𑇀◌ְb; a◌゙◌्𑇀◌ְb; a◌゙◌्𑇀◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SHARADA SIGN VIRAMA, LATIN SMALL LETTER B 0061 111C0 05B0 094D 3099 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062; # (a𑇀◌ְ◌्◌゙b; a◌゙𑇀◌्◌ְb; a◌゙𑇀◌्◌ְb; a◌゙𑇀◌्◌ְb; a◌゙𑇀◌्◌ְb; ) LATIN SMALL LETTER A, SHARADA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 111CA 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062; # (a◌゙◌़◌̴◌𑇊b; a◌̴◌़◌𑇊◌゙b; a◌̴◌़◌𑇊◌゙b; a◌̴◌़◌𑇊◌゙b; a◌̴◌़◌𑇊◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, SHARADA SIGN NUKTA, LATIN SMALL LETTER B 0061 111CA 3099 093C 0334 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062; # (a◌𑇊◌゙◌़◌̴b; a◌̴◌𑇊◌़◌゙b; a◌̴◌𑇊◌़◌゙b; a◌̴◌𑇊◌़◌゙b; a◌̴◌𑇊◌़◌゙b; ) LATIN SMALL LETTER A, SHARADA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 11235 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062; # (a◌ְ◌्◌゙𑈵b; a◌゙◌्𑈵◌ְb; a◌゙◌्𑈵◌ְb; a◌゙◌्𑈵◌ְb; a◌゙◌्𑈵◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KHOJKI SIGN VIRAMA, LATIN SMALL LETTER B 0061 11235 05B0 094D 3099 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062; # (a𑈵◌ְ◌्◌゙b; a◌゙𑈵◌्◌ְb; a◌゙𑈵◌्◌ְb; a◌゙𑈵◌्◌ְb; a◌゙𑈵◌्◌ְb; ) LATIN SMALL LETTER A, KHOJKI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 11236 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062; # (a◌゙◌़◌̴◌𑈶b; a◌̴◌़◌𑈶◌゙b; a◌̴◌़◌𑈶◌゙b; a◌̴◌़◌𑈶◌゙b; a◌̴◌़◌𑈶◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, KHOJKI SIGN NUKTA, LATIN SMALL LETTER B 0061 11236 3099 093C 0334 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062; # (a◌𑈶◌゙◌़◌̴b; a◌̴◌𑈶◌़◌゙b; a◌̴◌𑈶◌़◌゙b; a◌̴◌𑈶◌़◌゙b; a◌̴◌𑈶◌़◌゙b; ) LATIN SMALL LETTER A, KHOJKI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 3099 093C 0334 112E9 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062; # (a◌゙◌़◌̴◌𑋩b; a◌̴◌़◌𑋩◌゙b; a◌̴◌़◌𑋩◌゙b; a◌̴◌़◌𑋩◌゙b; a◌̴◌़◌𑋩◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, KHUDAWADI SIGN NUKTA, LATIN SMALL LETTER B 0061 112E9 3099 093C 0334 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062; # (a◌𑋩◌゙◌़◌̴b; a◌̴◌𑋩◌़◌゙b; a◌̴◌𑋩◌़◌゙b; a◌̴◌𑋩◌़◌゙b; a◌̴◌𑋩◌़◌゙b; ) LATIN SMALL LETTER A, KHUDAWADI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 112EA 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062; # (a◌ְ◌्◌゙◌𑋪b; a◌゙◌्◌𑋪◌ְb; a◌゙◌्◌𑋪◌ְb; a◌゙◌्◌𑋪◌ְb; a◌゙◌्◌𑋪◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KHUDAWADI SIGN VIRAMA, LATIN SMALL LETTER B 0061 112EA 05B0 094D 3099 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062; # (a◌𑋪◌ְ◌्◌゙b; a◌゙◌𑋪◌्◌ְb; a◌゙◌𑋪◌्◌ְb; a◌゙◌𑋪◌्◌ְb; a◌゙◌𑋪◌्◌ְb; ) LATIN SMALL LETTER A, KHUDAWADI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 1133C 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062; # (a◌゙◌़◌̴◌𑌼b; a◌̴◌़◌𑌼◌゙b; a◌̴◌़◌𑌼◌゙b; a◌̴◌़◌𑌼◌゙b; a◌̴◌़◌𑌼◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, GRANTHA SIGN NUKTA, LATIN SMALL LETTER B 0061 1133C 3099 093C 0334 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062; # (a◌𑌼◌゙◌़◌̴b; a◌̴◌𑌼◌़◌゙b; a◌̴◌𑌼◌़◌゙b; a◌̴◌𑌼◌़◌゙b; a◌̴◌𑌼◌़◌゙b; ) LATIN SMALL LETTER A, GRANTHA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1134D 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062; # (a◌ְ◌्◌゙𑍍b; a◌゙◌्𑍍◌ְb; a◌゙◌्𑍍◌ְb; a◌゙◌्𑍍◌ְb; a◌゙◌्𑍍◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, GRANTHA SIGN VIRAMA, LATIN SMALL LETTER B 0061 1134D 05B0 094D 3099 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062; # (a𑍍◌ְ◌्◌゙b; a◌゙𑍍◌्◌ְb; a◌゙𑍍◌्◌ְb; a◌゙𑍍◌्◌ְb; a◌゙𑍍◌्◌ְb; ) LATIN SMALL LETTER A, GRANTHA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 11366 0062;00E0 05AE 11366 0315 0062;0061 05AE 0300 11366 0315 0062;00E0 05AE 11366 0315 0062;0061 05AE 0300 11366 0315 0062; # (a◌̕◌̀◌֮◌𑍦b; à◌֮◌𑍦◌̕b; a◌֮◌̀◌𑍦◌̕b; à◌֮◌𑍦◌̕b; a◌֮◌̀◌𑍦◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT ZERO, LATIN SMALL LETTER B 0061 11366 0315 0300 05AE 0062;0061 05AE 11366 0300 0315 0062;0061 05AE 11366 0300 0315 0062;0061 05AE 11366 0300 0315 0062;0061 05AE 11366 0300 0315 0062; # (a◌𑍦◌̕◌̀◌֮b; a◌֮◌𑍦◌̀◌̕b; a◌֮◌𑍦◌̀◌̕b; a◌֮◌𑍦◌̀◌̕b; a◌֮◌𑍦◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT ZERO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11367 0062;00E0 05AE 11367 0315 0062;0061 05AE 0300 11367 0315 0062;00E0 05AE 11367 0315 0062;0061 05AE 0300 11367 0315 0062; # (a◌̕◌̀◌֮◌𑍧b; à◌֮◌𑍧◌̕b; a◌֮◌̀◌𑍧◌̕b; à◌֮◌𑍧◌̕b; a◌֮◌̀◌𑍧◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT ONE, LATIN SMALL LETTER B 0061 11367 0315 0300 05AE 0062;0061 05AE 11367 0300 0315 0062;0061 05AE 11367 0300 0315 0062;0061 05AE 11367 0300 0315 0062;0061 05AE 11367 0300 0315 0062; # (a◌𑍧◌̕◌̀◌֮b; a◌֮◌𑍧◌̀◌̕b; a◌֮◌𑍧◌̀◌̕b; a◌֮◌𑍧◌̀◌̕b; a◌֮◌𑍧◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT ONE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11368 0062;00E0 05AE 11368 0315 0062;0061 05AE 0300 11368 0315 0062;00E0 05AE 11368 0315 0062;0061 05AE 0300 11368 0315 0062; # (a◌̕◌̀◌֮◌𑍨b; à◌֮◌𑍨◌̕b; a◌֮◌̀◌𑍨◌̕b; à◌֮◌𑍨◌̕b; a◌֮◌̀◌𑍨◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT TWO, LATIN SMALL LETTER B 0061 11368 0315 0300 05AE 0062;0061 05AE 11368 0300 0315 0062;0061 05AE 11368 0300 0315 0062;0061 05AE 11368 0300 0315 0062;0061 05AE 11368 0300 0315 0062; # (a◌𑍨◌̕◌̀◌֮b; a◌֮◌𑍨◌̀◌̕b; a◌֮◌𑍨◌̀◌̕b; a◌֮◌𑍨◌̀◌̕b; a◌֮◌𑍨◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT TWO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11369 0062;00E0 05AE 11369 0315 0062;0061 05AE 0300 11369 0315 0062;00E0 05AE 11369 0315 0062;0061 05AE 0300 11369 0315 0062; # (a◌̕◌̀◌֮◌𑍩b; à◌֮◌𑍩◌̕b; a◌֮◌̀◌𑍩◌̕b; à◌֮◌𑍩◌̕b; a◌֮◌̀◌𑍩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT THREE, LATIN SMALL LETTER B 0061 11369 0315 0300 05AE 0062;0061 05AE 11369 0300 0315 0062;0061 05AE 11369 0300 0315 0062;0061 05AE 11369 0300 0315 0062;0061 05AE 11369 0300 0315 0062; # (a◌𑍩◌̕◌̀◌֮b; a◌֮◌𑍩◌̀◌̕b; a◌֮◌𑍩◌̀◌̕b; a◌֮◌𑍩◌̀◌̕b; a◌֮◌𑍩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT THREE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1136A 0062;00E0 05AE 1136A 0315 0062;0061 05AE 0300 1136A 0315 0062;00E0 05AE 1136A 0315 0062;0061 05AE 0300 1136A 0315 0062; # (a◌̕◌̀◌֮◌𑍪b; à◌֮◌𑍪◌̕b; a◌֮◌̀◌𑍪◌̕b; à◌֮◌𑍪◌̕b; a◌֮◌̀◌𑍪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT FOUR, LATIN SMALL LETTER B 0061 1136A 0315 0300 05AE 0062;0061 05AE 1136A 0300 0315 0062;0061 05AE 1136A 0300 0315 0062;0061 05AE 1136A 0300 0315 0062;0061 05AE 1136A 0300 0315 0062; # (a◌𑍪◌̕◌̀◌֮b; a◌֮◌𑍪◌̀◌̕b; a◌֮◌𑍪◌̀◌̕b; a◌֮◌𑍪◌̀◌̕b; a◌֮◌𑍪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT FOUR, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1136B 0062;00E0 05AE 1136B 0315 0062;0061 05AE 0300 1136B 0315 0062;00E0 05AE 1136B 0315 0062;0061 05AE 0300 1136B 0315 0062; # (a◌̕◌̀◌֮◌𑍫b; à◌֮◌𑍫◌̕b; a◌֮◌̀◌𑍫◌̕b; à◌֮◌𑍫◌̕b; a◌֮◌̀◌𑍫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT FIVE, LATIN SMALL LETTER B 0061 1136B 0315 0300 05AE 0062;0061 05AE 1136B 0300 0315 0062;0061 05AE 1136B 0300 0315 0062;0061 05AE 1136B 0300 0315 0062;0061 05AE 1136B 0300 0315 0062; # (a◌𑍫◌̕◌̀◌֮b; a◌֮◌𑍫◌̀◌̕b; a◌֮◌𑍫◌̀◌̕b; a◌֮◌𑍫◌̀◌̕b; a◌֮◌𑍫◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT FIVE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1136C 0062;00E0 05AE 1136C 0315 0062;0061 05AE 0300 1136C 0315 0062;00E0 05AE 1136C 0315 0062;0061 05AE 0300 1136C 0315 0062; # (a◌̕◌̀◌֮◌𑍬b; à◌֮◌𑍬◌̕b; a◌֮◌̀◌𑍬◌̕b; à◌֮◌𑍬◌̕b; a◌֮◌̀◌𑍬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA DIGIT SIX, LATIN SMALL LETTER B 0061 1136C 0315 0300 05AE 0062;0061 05AE 1136C 0300 0315 0062;0061 05AE 1136C 0300 0315 0062;0061 05AE 1136C 0300 0315 0062;0061 05AE 1136C 0300 0315 0062; # (a◌𑍬◌̕◌̀◌֮b; a◌֮◌𑍬◌̀◌̕b; a◌֮◌𑍬◌̀◌̕b; a◌֮◌𑍬◌̀◌̕b; a◌֮◌𑍬◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA DIGIT SIX, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11370 0062;00E0 05AE 11370 0315 0062;0061 05AE 0300 11370 0315 0062;00E0 05AE 11370 0315 0062;0061 05AE 0300 11370 0315 0062; # (a◌̕◌̀◌֮◌𑍰b; à◌֮◌𑍰◌̕b; a◌֮◌̀◌𑍰◌̕b; à◌֮◌𑍰◌̕b; a◌֮◌̀◌𑍰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA LETTER A, LATIN SMALL LETTER B 0061 11370 0315 0300 05AE 0062;0061 05AE 11370 0300 0315 0062;0061 05AE 11370 0300 0315 0062;0061 05AE 11370 0300 0315 0062;0061 05AE 11370 0300 0315 0062; # (a◌𑍰◌̕◌̀◌֮b; a◌֮◌𑍰◌̀◌̕b; a◌֮◌𑍰◌̀◌̕b; a◌֮◌𑍰◌̀◌̕b; a◌֮◌𑍰◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11371 0062;00E0 05AE 11371 0315 0062;0061 05AE 0300 11371 0315 0062;00E0 05AE 11371 0315 0062;0061 05AE 0300 11371 0315 0062; # (a◌̕◌̀◌֮◌𑍱b; à◌֮◌𑍱◌̕b; a◌֮◌̀◌𑍱◌̕b; à◌֮◌𑍱◌̕b; a◌֮◌̀◌𑍱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA LETTER KA, LATIN SMALL LETTER B 0061 11371 0315 0300 05AE 0062;0061 05AE 11371 0300 0315 0062;0061 05AE 11371 0300 0315 0062;0061 05AE 11371 0300 0315 0062;0061 05AE 11371 0300 0315 0062; # (a◌𑍱◌̕◌̀◌֮b; a◌֮◌𑍱◌̀◌̕b; a◌֮◌𑍱◌̀◌̕b; a◌֮◌𑍱◌̀◌̕b; a◌֮◌𑍱◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA LETTER KA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11372 0062;00E0 05AE 11372 0315 0062;0061 05AE 0300 11372 0315 0062;00E0 05AE 11372 0315 0062;0061 05AE 0300 11372 0315 0062; # (a◌̕◌̀◌֮◌𑍲b; à◌֮◌𑍲◌̕b; a◌֮◌̀◌𑍲◌̕b; à◌֮◌𑍲◌̕b; a◌֮◌̀◌𑍲◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA LETTER NA, LATIN SMALL LETTER B 0061 11372 0315 0300 05AE 0062;0061 05AE 11372 0300 0315 0062;0061 05AE 11372 0300 0315 0062;0061 05AE 11372 0300 0315 0062;0061 05AE 11372 0300 0315 0062; # (a◌𑍲◌̕◌̀◌֮b; a◌֮◌𑍲◌̀◌̕b; a◌֮◌𑍲◌̀◌̕b; a◌֮◌𑍲◌̀◌̕b; a◌֮◌𑍲◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA LETTER NA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11373 0062;00E0 05AE 11373 0315 0062;0061 05AE 0300 11373 0315 0062;00E0 05AE 11373 0315 0062;0061 05AE 0300 11373 0315 0062; # (a◌̕◌̀◌֮◌𑍳b; à◌֮◌𑍳◌̕b; a◌֮◌̀◌𑍳◌̕b; à◌֮◌𑍳◌̕b; a◌֮◌̀◌𑍳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA LETTER VI, LATIN SMALL LETTER B 0061 11373 0315 0300 05AE 0062;0061 05AE 11373 0300 0315 0062;0061 05AE 11373 0300 0315 0062;0061 05AE 11373 0300 0315 0062;0061 05AE 11373 0300 0315 0062; # (a◌𑍳◌̕◌̀◌֮b; a◌֮◌𑍳◌̀◌̕b; a◌֮◌𑍳◌̀◌̕b; a◌֮◌𑍳◌̀◌̕b; a◌֮◌𑍳◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA LETTER VI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 11374 0062;00E0 05AE 11374 0315 0062;0061 05AE 0300 11374 0315 0062;00E0 05AE 11374 0315 0062;0061 05AE 0300 11374 0315 0062; # (a◌̕◌̀◌֮◌𑍴b; à◌֮◌𑍴◌̕b; a◌֮◌̀◌𑍴◌̕b; à◌֮◌𑍴◌̕b; a◌֮◌̀◌𑍴◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GRANTHA LETTER PA, LATIN SMALL LETTER B 0061 11374 0315 0300 05AE 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062; # (a◌𑍴◌̕◌̀◌֮b; a◌֮◌𑍴◌̀◌̕b; a◌֮◌𑍴◌̀◌̕b; a◌֮◌𑍴◌̀◌̕b; a◌֮◌𑍴◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GRANTHA LETTER PA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 05B0 094D 3099 11442 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062; # (a◌ְ◌्◌゙◌𑑂b; a◌゙◌्◌𑑂◌ְb; a◌゙◌्◌𑑂◌ְb; a◌゙◌्◌𑑂◌ְb; a◌゙◌्◌𑑂◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, NEWA SIGN VIRAMA, LATIN SMALL LETTER B 0061 11442 05B0 094D 3099 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062; # (a◌𑑂◌ְ◌्◌゙b; a◌゙◌𑑂◌्◌ְb; a◌゙◌𑑂◌्◌ְb; a◌゙◌𑑂◌्◌ְb; a◌゙◌𑑂◌्◌ְb; ) LATIN SMALL LETTER A, NEWA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 11446 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062; # (a◌゙◌़◌̴◌𑑆b; a◌̴◌़◌𑑆◌゙b; a◌̴◌़◌𑑆◌゙b; a◌̴◌़◌𑑆◌゙b; a◌̴◌़◌𑑆◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, NEWA SIGN NUKTA, LATIN SMALL LETTER B 0061 11446 3099 093C 0334 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062; # (a◌𑑆◌゙◌़◌̴b; a◌̴◌𑑆◌़◌゙b; a◌̴◌𑑆◌़◌゙b; a◌̴◌𑑆◌़◌゙b; a◌̴◌𑑆◌़◌゙b; ) LATIN SMALL LETTER A, NEWA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 114C2 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062; # (a◌ְ◌्◌゙◌𑓂b; a◌゙◌्◌𑓂◌ְb; a◌゙◌्◌𑓂◌ְb; a◌゙◌्◌𑓂◌ְb; a◌゙◌्◌𑓂◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TIRHUTA SIGN VIRAMA, LATIN SMALL LETTER B 0061 114C2 05B0 094D 3099 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062; # (a◌𑓂◌ְ◌्◌゙b; a◌゙◌𑓂◌्◌ְb; a◌゙◌𑓂◌्◌ְb; a◌゙◌𑓂◌्◌ְb; a◌゙◌𑓂◌्◌ְb; ) LATIN SMALL LETTER A, TIRHUTA SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 114C3 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062; # (a◌゙◌़◌̴◌𑓃b; a◌̴◌़◌𑓃◌゙b; a◌̴◌़◌𑓃◌゙b; a◌̴◌़◌𑓃◌゙b; a◌̴◌़◌𑓃◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, TIRHUTA SIGN NUKTA, LATIN SMALL LETTER B 0061 114C3 3099 093C 0334 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062; # (a◌𑓃◌゙◌़◌̴b; a◌̴◌𑓃◌़◌゙b; a◌̴◌𑓃◌़◌゙b; a◌̴◌𑓃◌़◌゙b; a◌̴◌𑓃◌़◌゙b; ) LATIN SMALL LETTER A, TIRHUTA SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 115BF 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062; # (a◌ְ◌्◌゙◌𑖿b; a◌゙◌्◌𑖿◌ְb; a◌゙◌्◌𑖿◌ְb; a◌゙◌्◌𑖿◌ְb; a◌゙◌्◌𑖿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, SIDDHAM SIGN VIRAMA, LATIN SMALL LETTER B 0061 115BF 05B0 094D 3099 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062; # (a◌𑖿◌ְ◌्◌゙b; a◌゙◌𑖿◌्◌ְb; a◌゙◌𑖿◌्◌ְb; a◌゙◌𑖿◌्◌ְb; a◌゙◌𑖿◌्◌ְb; ) LATIN SMALL LETTER A, SIDDHAM SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 115C0 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062; # (a◌゙◌़◌̴◌𑗀b; a◌̴◌़◌𑗀◌゙b; a◌̴◌़◌𑗀◌゙b; a◌̴◌़◌𑗀◌゙b; a◌̴◌़◌𑗀◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, SIDDHAM SIGN NUKTA, LATIN SMALL LETTER B 0061 115C0 3099 093C 0334 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062; # (a◌𑗀◌゙◌़◌̴b; a◌̴◌𑗀◌़◌゙b; a◌̴◌𑗀◌़◌゙b; a◌̴◌𑗀◌़◌゙b; a◌̴◌𑗀◌़◌゙b; ) LATIN SMALL LETTER A, SIDDHAM SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1163F 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062; # (a◌ְ◌्◌゙◌𑘿b; a◌゙◌्◌𑘿◌ְb; a◌゙◌्◌𑘿◌ְb; a◌゙◌्◌𑘿◌ְb; a◌゙◌्◌𑘿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, MODI SIGN VIRAMA, LATIN SMALL LETTER B 0061 1163F 05B0 094D 3099 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062; # (a◌𑘿◌ְ◌्◌゙b; a◌゙◌𑘿◌्◌ְb; a◌゙◌𑘿◌्◌ְb; a◌゙◌𑘿◌्◌ְb; a◌゙◌𑘿◌्◌ְb; ) LATIN SMALL LETTER A, MODI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 116B6 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062; # (a◌ְ◌्◌゙𑚶b; a◌゙◌्𑚶◌ְb; a◌゙◌्𑚶◌ְb; a◌゙◌्𑚶◌ְb; a◌゙◌्𑚶◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, TAKRI SIGN VIRAMA, LATIN SMALL LETTER B 0061 116B6 05B0 094D 3099 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062; # (a𑚶◌ְ◌्◌゙b; a◌゙𑚶◌्◌ְb; a◌゙𑚶◌्◌ְb; a◌゙𑚶◌्◌ְb; a◌゙𑚶◌्◌ְb; ) LATIN SMALL LETTER A, TAKRI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 3099 093C 0334 116B7 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062; # (a◌゙◌़◌̴◌𑚷b; a◌̴◌़◌𑚷◌゙b; a◌̴◌़◌𑚷◌゙b; a◌̴◌़◌𑚷◌゙b; a◌̴◌़◌𑚷◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, TAKRI SIGN NUKTA, LATIN SMALL LETTER B 0061 116B7 3099 093C 0334 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062; # (a◌𑚷◌゙◌़◌̴b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; a◌̴◌𑚷◌़◌゙b; ) LATIN SMALL LETTER A, TAKRI SIGN NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05B0 094D 3099 1172B 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062; # (a◌ְ◌्◌゙◌𑜫b; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; a◌゙◌्◌𑜫◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, AHOM SIGN KILLER, LATIN SMALL LETTER B 0061 1172B 05B0 094D 3099 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062; # (a◌𑜫◌ְ◌्◌゙b; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; a◌゙◌𑜫◌्◌ְb; ) LATIN SMALL LETTER A, AHOM SIGN KILLER, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 05B0 094D 3099 11C3F 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062; # (a◌ְ◌्◌゙◌𑰿b; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; a◌゙◌्◌𑰿◌ְb; ) LATIN SMALL LETTER A, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, BHAIKSUKI SIGN VIRAMA, LATIN SMALL LETTER B 0061 11C3F 05B0 094D 3099 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062; # (a◌𑰿◌ְ◌्◌゙b; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; a◌゙◌𑰿◌्◌ְb; ) LATIN SMALL LETTER A, BHAIKSUKI SIGN VIRAMA, HEBREW POINT SHEVA, DEVANAGARI SIGN VIRAMA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, LATIN SMALL LETTER B 0061 093C 0334 16AF0 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062; # (a◌़◌̴◌𖫰b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; a◌̴◌𖫰◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING HIGH TONE, LATIN SMALL LETTER B 0061 16AF0 093C 0334 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062; # (a◌𖫰◌़◌̴b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; a◌𖫰◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING HIGH TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 16AF1 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062; # (a◌़◌̴◌𖫱b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; a◌̴◌𖫱◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING LOW TONE, LATIN SMALL LETTER B 0061 16AF1 093C 0334 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062; # (a◌𖫱◌़◌̴b; a◌𖫱◌̴◌़b; a◌𖫱◌̴◌़b; a◌𖫱◌̴◌़b; a◌𖫱◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING LOW TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 16AF2 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062; # (a◌़◌̴◌𖫲b; a◌̴◌𖫲◌़b; a◌̴◌𖫲◌़b; a◌̴◌𖫲◌़b; a◌̴◌𖫲◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING MID TONE, LATIN SMALL LETTER B 0061 16AF2 093C 0334 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062; # (a◌𖫲◌़◌̴b; a◌𖫲◌̴◌़b; a◌𖫲◌̴◌़b; a◌𖫲◌̴◌़b; a◌𖫲◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING MID TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 16AF3 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062; # (a◌़◌̴◌𖫳b; a◌̴◌𖫳◌़b; a◌̴◌𖫳◌़b; a◌̴◌𖫳◌़b; a◌̴◌𖫳◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING LOW-MID TONE, LATIN SMALL LETTER B 0061 16AF3 093C 0334 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062; # (a◌𖫳◌़◌̴b; a◌𖫳◌̴◌़b; a◌𖫳◌̴◌़b; a◌𖫳◌̴◌़b; a◌𖫳◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING LOW-MID TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 16AF4 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062; # (a◌़◌̴◌𖫴b; a◌̴◌𖫴◌़b; a◌̴◌𖫴◌़b; a◌̴◌𖫴◌़b; a◌̴◌𖫴◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, BASSA VAH COMBINING HIGH-LOW TONE, LATIN SMALL LETTER B 0061 16AF4 093C 0334 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062; # (a◌𖫴◌़◌̴b; a◌𖫴◌̴◌़b; a◌𖫴◌̴◌़b; a◌𖫴◌̴◌़b; a◌𖫴◌̴◌़b; ) LATIN SMALL LETTER A, BASSA VAH COMBINING HIGH-LOW TONE, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B30 0062;00E0 05AE 16B30 0315 0062;0061 05AE 0300 16B30 0315 0062;00E0 05AE 16B30 0315 0062;0061 05AE 0300 16B30 0315 0062; # (a◌̕◌̀◌֮◌𖬰b; à◌֮◌𖬰◌̕b; a◌֮◌̀◌𖬰◌̕b; à◌֮◌𖬰◌̕b; a◌֮◌̀◌𖬰◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM TUB, LATIN SMALL LETTER B 0061 16B30 0315 0300 05AE 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062; # (a◌𖬰◌̕◌̀◌֮b; a◌֮◌𖬰◌̀◌̕b; a◌֮◌𖬰◌̀◌̕b; a◌֮◌𖬰◌̀◌̕b; a◌֮◌𖬰◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM TUB, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B31 0062;00E0 05AE 16B31 0315 0062;0061 05AE 0300 16B31 0315 0062;00E0 05AE 16B31 0315 0062;0061 05AE 0300 16B31 0315 0062; # (a◌̕◌̀◌֮◌𖬱b; à◌֮◌𖬱◌̕b; a◌֮◌̀◌𖬱◌̕b; à◌֮◌𖬱◌̕b; a◌֮◌̀◌𖬱◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM SO, LATIN SMALL LETTER B 0061 16B31 0315 0300 05AE 0062;0061 05AE 16B31 0300 0315 0062;0061 05AE 16B31 0300 0315 0062;0061 05AE 16B31 0300 0315 0062;0061 05AE 16B31 0300 0315 0062; # (a◌𖬱◌̕◌̀◌֮b; a◌֮◌𖬱◌̀◌̕b; a◌֮◌𖬱◌̀◌̕b; a◌֮◌𖬱◌̀◌̕b; a◌֮◌𖬱◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM SO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B32 0062;00E0 05AE 16B32 0315 0062;0061 05AE 0300 16B32 0315 0062;00E0 05AE 16B32 0315 0062;0061 05AE 0300 16B32 0315 0062; # (a◌̕◌̀◌֮◌𖬲b; à◌֮◌𖬲◌̕b; a◌֮◌̀◌𖬲◌̕b; à◌֮◌𖬲◌̕b; a◌֮◌̀◌𖬲◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM KES, LATIN SMALL LETTER B 0061 16B32 0315 0300 05AE 0062;0061 05AE 16B32 0300 0315 0062;0061 05AE 16B32 0300 0315 0062;0061 05AE 16B32 0300 0315 0062;0061 05AE 16B32 0300 0315 0062; # (a◌𖬲◌̕◌̀◌֮b; a◌֮◌𖬲◌̀◌̕b; a◌֮◌𖬲◌̀◌̕b; a◌֮◌𖬲◌̀◌̕b; a◌֮◌𖬲◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM KES, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B33 0062;00E0 05AE 16B33 0315 0062;0061 05AE 0300 16B33 0315 0062;00E0 05AE 16B33 0315 0062;0061 05AE 0300 16B33 0315 0062; # (a◌̕◌̀◌֮◌𖬳b; à◌֮◌𖬳◌̕b; a◌֮◌̀◌𖬳◌̕b; à◌֮◌𖬳◌̕b; a◌֮◌̀◌𖬳◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM KHAV, LATIN SMALL LETTER B 0061 16B33 0315 0300 05AE 0062;0061 05AE 16B33 0300 0315 0062;0061 05AE 16B33 0300 0315 0062;0061 05AE 16B33 0300 0315 0062;0061 05AE 16B33 0300 0315 0062; # (a◌𖬳◌̕◌̀◌֮b; a◌֮◌𖬳◌̀◌̕b; a◌֮◌𖬳◌̀◌̕b; a◌֮◌𖬳◌̀◌̕b; a◌֮◌𖬳◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM KHAV, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B34 0062;00E0 05AE 16B34 0315 0062;0061 05AE 0300 16B34 0315 0062;00E0 05AE 16B34 0315 0062;0061 05AE 0300 16B34 0315 0062; # (a◌̕◌̀◌֮◌𖬴b; à◌֮◌𖬴◌̕b; a◌֮◌̀◌𖬴◌̕b; à◌֮◌𖬴◌̕b; a◌֮◌̀◌𖬴◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM SUAM, LATIN SMALL LETTER B 0061 16B34 0315 0300 05AE 0062;0061 05AE 16B34 0300 0315 0062;0061 05AE 16B34 0300 0315 0062;0061 05AE 16B34 0300 0315 0062;0061 05AE 16B34 0300 0315 0062; # (a◌𖬴◌̕◌̀◌֮b; a◌֮◌𖬴◌̀◌̕b; a◌֮◌𖬴◌̀◌̕b; a◌֮◌𖬴◌̀◌̕b; a◌֮◌𖬴◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM SUAM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B35 0062;00E0 05AE 16B35 0315 0062;0061 05AE 0300 16B35 0315 0062;00E0 05AE 16B35 0315 0062;0061 05AE 0300 16B35 0315 0062; # (a◌̕◌̀◌֮◌𖬵b; à◌֮◌𖬵◌̕b; a◌֮◌̀◌𖬵◌̕b; à◌֮◌𖬵◌̕b; a◌֮◌̀◌𖬵◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM HOM, LATIN SMALL LETTER B 0061 16B35 0315 0300 05AE 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062; # (a◌𖬵◌̕◌̀◌֮b; a◌֮◌𖬵◌̀◌̕b; a◌֮◌𖬵◌̀◌̕b; a◌֮◌𖬵◌̀◌̕b; a◌֮◌𖬵◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM HOM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 16B36 0062;00E0 05AE 16B36 0315 0062;0061 05AE 0300 16B36 0315 0062;00E0 05AE 16B36 0315 0062;0061 05AE 0300 16B36 0315 0062; # (a◌̕◌̀◌֮◌𖬶b; à◌֮◌𖬶◌̕b; a◌֮◌̀◌𖬶◌̕b; à◌֮◌𖬶◌̕b; a◌֮◌̀◌𖬶◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, PAHAWH HMONG MARK CIM TAUM, LATIN SMALL LETTER B 0061 16B36 0315 0300 05AE 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062; # (a◌𖬶◌̕◌̀◌֮b; a◌֮◌𖬶◌̀◌̕b; a◌֮◌𖬶◌̀◌̕b; a◌֮◌𖬶◌̀◌̕b; a◌֮◌𖬶◌̀◌̕b; ) LATIN SMALL LETTER A, PAHAWH HMONG MARK CIM TAUM, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 093C 0334 1BC9E 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062; # (a◌़◌̴◌𛲞b; a◌̴◌𛲞◌़b; a◌̴◌𛲞◌़b; a◌̴◌𛲞◌़b; a◌̴◌𛲞◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, DUPLOYAN DOUBLE MARK, LATIN SMALL LETTER B 0061 1BC9E 093C 0334 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062; # (a◌𛲞◌़◌̴b; a◌𛲞◌̴◌़b; a◌𛲞◌̴◌़b; a◌𛲞◌̴◌़b; a◌𛲞◌̴◌़b; ) LATIN SMALL LETTER A, DUPLOYAN DOUBLE MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062; # (a◌〪◌̛◌᷎𝅥b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; a◌᷎◌̛𝅥◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING STEM, LATIN SMALL LETTER B 0061 1D165 302A 031B 1DCE 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062; # (a𝅥◌〪◌̛◌᷎b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; a◌᷎𝅥◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING STEM, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062; # (a◌〪◌̛◌᷎𝅦b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; a◌᷎◌̛𝅦◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING SPRECHGESANG STEM, LATIN SMALL LETTER B 0061 1D166 302A 031B 1DCE 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062; # (a𝅦◌〪◌̛◌᷎b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; a◌᷎𝅦◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING SPRECHGESANG STEM, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 093C 0334 1D167 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062; # (a◌़◌̴◌𝅧b; a◌̴◌𝅧◌़b; a◌̴◌𝅧◌़b; a◌̴◌𝅧◌़b; a◌̴◌𝅧◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MUSICAL SYMBOL COMBINING TREMOLO-1, LATIN SMALL LETTER B 0061 1D167 093C 0334 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062; # (a◌𝅧◌़◌̴b; a◌𝅧◌̴◌़b; a◌𝅧◌̴◌़b; a◌𝅧◌̴◌़b; a◌𝅧◌̴◌़b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING TREMOLO-1, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1D168 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062; # (a◌़◌̴◌𝅨b; a◌̴◌𝅨◌़b; a◌̴◌𝅨◌़b; a◌̴◌𝅨◌़b; a◌̴◌𝅨◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MUSICAL SYMBOL COMBINING TREMOLO-2, LATIN SMALL LETTER B 0061 1D168 093C 0334 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062; # (a◌𝅨◌़◌̴b; a◌𝅨◌̴◌़b; a◌𝅨◌̴◌़b; a◌𝅨◌̴◌़b; a◌𝅨◌̴◌़b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING TREMOLO-2, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 093C 0334 1D169 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062; # (a◌़◌̴◌𝅩b; a◌̴◌𝅩◌़b; a◌̴◌𝅩◌़b; a◌̴◌𝅩◌़b; a◌̴◌𝅩◌़b; ) LATIN SMALL LETTER A, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, MUSICAL SYMBOL COMBINING TREMOLO-3, LATIN SMALL LETTER B 0061 1D169 093C 0334 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062; # (a◌𝅩◌़◌̴b; a◌𝅩◌̴◌़b; a◌𝅩◌̴◌़b; a◌𝅩◌̴◌़b; a◌𝅩◌̴◌़b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING TREMOLO-3, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B 0061 05AE 1D16D 302E 1D16D 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062; # (a◌〮𝅭𝅭֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; ) LATIN SMALL LETTER A, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, LATIN SMALL LETTER B 0061 1D16D 05AE 1D16D 302E 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062; # (a𝅭◌〮𝅭֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; a〮𝅭𝅭◌֮b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING AUGMENTATION DOT, HANGUL SINGLE DOT TONE MARK, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062; # (a◌〪◌̛◌᷎𝅮b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; a◌᷎◌̛𝅮◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING FLAG-1, LATIN SMALL LETTER B 0061 1D16E 302A 031B 1DCE 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062; # (a𝅮◌〪◌̛◌᷎b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; a◌᷎𝅮◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLAG-1, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062; # (a◌〪◌̛◌᷎𝅯b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; a◌᷎◌̛𝅯◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING FLAG-2, LATIN SMALL LETTER B 0061 1D16F 302A 031B 1DCE 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062; # (a𝅯◌〪◌̛◌᷎b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; a◌᷎𝅯◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLAG-2, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062; # (a◌〪◌̛◌᷎𝅰b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; a◌᷎◌̛𝅰◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING FLAG-3, LATIN SMALL LETTER B 0061 1D170 302A 031B 1DCE 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062; # (a𝅰◌〪◌̛◌᷎b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; a◌᷎𝅰◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLAG-3, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062; # (a◌〪◌̛◌᷎𝅱b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; a◌᷎◌̛𝅱◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING FLAG-4, LATIN SMALL LETTER B 0061 1D171 302A 031B 1DCE 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062; # (a𝅱◌〪◌̛◌᷎b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; a◌᷎𝅱◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLAG-4, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 302A 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062; # (a◌〪◌̛◌᷎𝅲b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; a◌᷎◌̛𝅲◌〪b; ) LATIN SMALL LETTER A, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, MUSICAL SYMBOL COMBINING FLAG-5, LATIN SMALL LETTER B 0061 1D172 302A 031B 1DCE 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062; # (a𝅲◌〪◌̛◌᷎b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; a◌᷎𝅲◌̛◌〪b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLAG-5, IDEOGRAPHIC LEVEL TONE MARK, COMBINING HORN, COMBINING OGONEK ABOVE, LATIN SMALL LETTER B 0061 059A 0316 302A 1D17B 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062; # (a◌֚◌̖◌〪◌𝅻b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; a◌〪◌̖◌𝅻◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING ACCENT, LATIN SMALL LETTER B 0061 1D17B 059A 0316 302A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062; # (a◌𝅻◌֚◌̖◌〪b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; a◌〪◌𝅻◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING ACCENT, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D17C 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062; # (a◌֚◌̖◌〪◌𝅼b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; a◌〪◌̖◌𝅼◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING STACCATO, LATIN SMALL LETTER B 0061 1D17C 059A 0316 302A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062; # (a◌𝅼◌֚◌̖◌〪b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; a◌〪◌𝅼◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING STACCATO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D17D 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062; # (a◌֚◌̖◌〪◌𝅽b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; a◌〪◌̖◌𝅽◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING TENUTO, LATIN SMALL LETTER B 0061 1D17D 059A 0316 302A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062; # (a◌𝅽◌֚◌̖◌〪b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; a◌〪◌𝅽◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING TENUTO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D17E 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062; # (a◌֚◌̖◌〪◌𝅾b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; a◌〪◌̖◌𝅾◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING STACCATISSIMO, LATIN SMALL LETTER B 0061 1D17E 059A 0316 302A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062; # (a◌𝅾◌֚◌̖◌〪b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; a◌〪◌𝅾◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING STACCATISSIMO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D17F 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062; # (a◌֚◌̖◌〪◌𝅿b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; a◌〪◌̖◌𝅿◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING MARCATO, LATIN SMALL LETTER B 0061 1D17F 059A 0316 302A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062; # (a◌𝅿◌֚◌̖◌〪b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; a◌〪◌𝅿◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING MARCATO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D180 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062; # (a◌֚◌̖◌〪◌𝆀b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; a◌〪◌̖◌𝆀◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, LATIN SMALL LETTER B 0061 1D180 059A 0316 302A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062; # (a◌𝆀◌֚◌̖◌〪b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; a◌〪◌𝆀◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING MARCATO-STACCATO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D181 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062; # (a◌֚◌̖◌〪◌𝆁b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; a◌〪◌̖◌𝆁◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, LATIN SMALL LETTER B 0061 1D181 059A 0316 302A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062; # (a◌𝆁◌֚◌̖◌〪b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; a◌〪◌𝆁◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING ACCENT-STACCATO, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D182 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062; # (a◌֚◌̖◌〪◌𝆂b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; a◌〪◌̖◌𝆂◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING LOURE, LATIN SMALL LETTER B 0061 1D182 059A 0316 302A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062; # (a◌𝆂◌֚◌̖◌〪b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; a◌〪◌𝆂◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING LOURE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D185 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062; # (a◌̕◌̀◌֮◌𝆅b; à◌֮◌𝆅◌̕b; a◌֮◌̀◌𝆅◌̕b; à◌֮◌𝆅◌̕b; a◌֮◌̀◌𝆅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING DOIT, LATIN SMALL LETTER B 0061 1D185 0315 0300 05AE 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062; # (a◌𝆅◌̕◌̀◌֮b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; a◌֮◌𝆅◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING DOIT, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D186 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062; # (a◌̕◌̀◌֮◌𝆆b; à◌֮◌𝆆◌̕b; a◌֮◌̀◌𝆆◌̕b; à◌֮◌𝆆◌̕b; a◌֮◌̀◌𝆆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING RIP, LATIN SMALL LETTER B 0061 1D186 0315 0300 05AE 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062; # (a◌𝆆◌̕◌̀◌֮b; a◌֮◌𝆆◌̀◌̕b; a◌֮◌𝆆◌̀◌̕b; a◌֮◌𝆆◌̀◌̕b; a◌֮◌𝆆◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING RIP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D187 0062;00E0 05AE 1D187 0315 0062;0061 05AE 0300 1D187 0315 0062;00E0 05AE 1D187 0315 0062;0061 05AE 0300 1D187 0315 0062; # (a◌̕◌̀◌֮◌𝆇b; à◌֮◌𝆇◌̕b; a◌֮◌̀◌𝆇◌̕b; à◌֮◌𝆇◌̕b; a◌֮◌̀◌𝆇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING FLIP, LATIN SMALL LETTER B 0061 1D187 0315 0300 05AE 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062; # (a◌𝆇◌̕◌̀◌֮b; a◌֮◌𝆇◌̀◌̕b; a◌֮◌𝆇◌̀◌̕b; a◌֮◌𝆇◌̀◌̕b; a◌֮◌𝆇◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING FLIP, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D188 0062;00E0 05AE 1D188 0315 0062;0061 05AE 0300 1D188 0315 0062;00E0 05AE 1D188 0315 0062;0061 05AE 0300 1D188 0315 0062; # (a◌̕◌̀◌֮◌𝆈b; à◌֮◌𝆈◌̕b; a◌֮◌̀◌𝆈◌̕b; à◌֮◌𝆈◌̕b; a◌֮◌̀◌𝆈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING SMEAR, LATIN SMALL LETTER B 0061 1D188 0315 0300 05AE 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062; # (a◌𝆈◌̕◌̀◌֮b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; a◌֮◌𝆈◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING SMEAR, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D189 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062; # (a◌̕◌̀◌֮◌𝆉b; à◌֮◌𝆉◌̕b; a◌֮◌̀◌𝆉◌̕b; à◌֮◌𝆉◌̕b; a◌֮◌̀◌𝆉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING BEND, LATIN SMALL LETTER B 0061 1D189 0315 0300 05AE 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062; # (a◌𝆉◌̕◌̀◌֮b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; a◌֮◌𝆉◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING BEND, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1D18A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062; # (a◌֚◌̖◌〪◌𝆊b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; a◌〪◌̖◌𝆊◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, LATIN SMALL LETTER B 0061 1D18A 059A 0316 302A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062; # (a◌𝆊◌֚◌̖◌〪b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; a◌〪◌𝆊◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING DOUBLE TONGUE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1D18B 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062; # (a◌֚◌̖◌〪◌𝆋b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; a◌〪◌̖◌𝆋◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, LATIN SMALL LETTER B 0061 1D18B 059A 0316 302A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062; # (a◌𝆋◌֚◌̖◌〪b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; a◌〪◌𝆋◌̖◌֚b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING TRIPLE TONGUE, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D1AA 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062; # (a◌̕◌̀◌֮◌𝆪b; à◌֮◌𝆪◌̕b; a◌֮◌̀◌𝆪◌̕b; à◌֮◌𝆪◌̕b; a◌֮◌̀◌𝆪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING DOWN BOW, LATIN SMALL LETTER B 0061 1D1AA 0315 0300 05AE 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062; # (a◌𝆪◌̕◌̀◌֮b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; a◌֮◌𝆪◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING DOWN BOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D1AB 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062; # (a◌̕◌̀◌֮◌𝆫b; à◌֮◌𝆫◌̕b; a◌֮◌̀◌𝆫◌̕b; à◌֮◌𝆫◌̕b; a◌֮◌̀◌𝆫◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING UP BOW, LATIN SMALL LETTER B 0061 1D1AB 0315 0300 05AE 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062; # (a◌𝆫◌̕◌̀◌֮b; a◌֮◌𝆫◌̀◌̕b; a◌֮◌𝆫◌̀◌̕b; a◌֮◌𝆫◌̀◌̕b; a◌֮◌𝆫◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING UP BOW, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D1AC 0062;00E0 05AE 1D1AC 0315 0062;0061 05AE 0300 1D1AC 0315 0062;00E0 05AE 1D1AC 0315 0062;0061 05AE 0300 1D1AC 0315 0062; # (a◌̕◌̀◌֮◌𝆬b; à◌֮◌𝆬◌̕b; a◌֮◌̀◌𝆬◌̕b; à◌֮◌𝆬◌̕b; a◌֮◌̀◌𝆬◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING HARMONIC, LATIN SMALL LETTER B 0061 1D1AC 0315 0300 05AE 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062; # (a◌𝆬◌̕◌̀◌֮b; a◌֮◌𝆬◌̀◌̕b; a◌֮◌𝆬◌̀◌̕b; a◌֮◌𝆬◌̀◌̕b; a◌֮◌𝆬◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING HARMONIC, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D1AD 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062; # (a◌̕◌̀◌֮◌𝆭b; à◌֮◌𝆭◌̕b; a◌֮◌̀◌𝆭◌̕b; à◌֮◌𝆭◌̕b; a◌֮◌̀◌𝆭◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, MUSICAL SYMBOL COMBINING SNAP PIZZICATO, LATIN SMALL LETTER B 0061 1D1AD 0315 0300 05AE 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062; # (a◌𝆭◌̕◌̀◌֮b; a◌֮◌𝆭◌̀◌̕b; a◌֮◌𝆭◌̀◌̕b; a◌֮◌𝆭◌̀◌̕b; a◌֮◌𝆭◌̀◌̕b; ) LATIN SMALL LETTER A, MUSICAL SYMBOL COMBINING SNAP PIZZICATO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D242 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062; # (a◌̕◌̀◌֮◌𝉂b; à◌֮◌𝉂◌̕b; a◌֮◌̀◌𝉂◌̕b; à◌֮◌𝉂◌̕b; a◌֮◌̀◌𝉂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK MUSICAL TRISEME, LATIN SMALL LETTER B 0061 1D242 0315 0300 05AE 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062; # (a◌𝉂◌̕◌̀◌֮b; a◌֮◌𝉂◌̀◌̕b; a◌֮◌𝉂◌̀◌̕b; a◌֮◌𝉂◌̀◌̕b; a◌֮◌𝉂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK MUSICAL TRISEME, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D243 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062; # (a◌̕◌̀◌֮◌𝉃b; à◌֮◌𝉃◌̕b; a◌֮◌̀◌𝉃◌̕b; à◌֮◌𝉃◌̕b; a◌֮◌̀◌𝉃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK MUSICAL TETRASEME, LATIN SMALL LETTER B 0061 1D243 0315 0300 05AE 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062; # (a◌𝉃◌̕◌̀◌֮b; a◌֮◌𝉃◌̀◌̕b; a◌֮◌𝉃◌̀◌̕b; a◌֮◌𝉃◌̀◌̕b; a◌֮◌𝉃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK MUSICAL TETRASEME, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1D244 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062; # (a◌̕◌̀◌֮◌𝉄b; à◌֮◌𝉄◌̕b; a◌֮◌̀◌𝉄◌̕b; à◌֮◌𝉄◌̕b; a◌֮◌̀◌𝉄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GREEK MUSICAL PENTASEME, LATIN SMALL LETTER B 0061 1D244 0315 0300 05AE 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062; # (a◌𝉄◌̕◌̀◌֮b; a◌֮◌𝉄◌̀◌̕b; a◌֮◌𝉄◌̀◌̕b; a◌֮◌𝉄◌̀◌̕b; a◌֮◌𝉄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GREEK MUSICAL PENTASEME, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E000 0062;00E0 05AE 1E000 0315 0062;0061 05AE 0300 1E000 0315 0062;00E0 05AE 1E000 0315 0062;0061 05AE 0300 1E000 0315 0062; # (a◌̕◌̀◌֮◌𞀀b; à◌֮◌𞀀◌̕b; a◌֮◌̀◌𞀀◌̕b; à◌֮◌𞀀◌̕b; a◌֮◌̀◌𞀀◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER AZU, LATIN SMALL LETTER B 0061 1E000 0315 0300 05AE 0062;0061 05AE 1E000 0300 0315 0062;0061 05AE 1E000 0300 0315 0062;0061 05AE 1E000 0300 0315 0062;0061 05AE 1E000 0300 0315 0062; # (a◌𞀀◌̕◌̀◌֮b; a◌֮◌𞀀◌̀◌̕b; a◌֮◌𞀀◌̀◌̕b; a◌֮◌𞀀◌̀◌̕b; a◌֮◌𞀀◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER AZU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E001 0062;00E0 05AE 1E001 0315 0062;0061 05AE 0300 1E001 0315 0062;00E0 05AE 1E001 0315 0062;0061 05AE 0300 1E001 0315 0062; # (a◌̕◌̀◌֮◌𞀁b; à◌֮◌𞀁◌̕b; a◌֮◌̀◌𞀁◌̕b; à◌֮◌𞀁◌̕b; a◌֮◌̀◌𞀁◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER BUKY, LATIN SMALL LETTER B 0061 1E001 0315 0300 05AE 0062;0061 05AE 1E001 0300 0315 0062;0061 05AE 1E001 0300 0315 0062;0061 05AE 1E001 0300 0315 0062;0061 05AE 1E001 0300 0315 0062; # (a◌𞀁◌̕◌̀◌֮b; a◌֮◌𞀁◌̀◌̕b; a◌֮◌𞀁◌̀◌̕b; a◌֮◌𞀁◌̀◌̕b; a◌֮◌𞀁◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER BUKY, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E002 0062;00E0 05AE 1E002 0315 0062;0061 05AE 0300 1E002 0315 0062;00E0 05AE 1E002 0315 0062;0061 05AE 0300 1E002 0315 0062; # (a◌̕◌̀◌֮◌𞀂b; à◌֮◌𞀂◌̕b; a◌֮◌̀◌𞀂◌̕b; à◌֮◌𞀂◌̕b; a◌֮◌̀◌𞀂◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER VEDE, LATIN SMALL LETTER B 0061 1E002 0315 0300 05AE 0062;0061 05AE 1E002 0300 0315 0062;0061 05AE 1E002 0300 0315 0062;0061 05AE 1E002 0300 0315 0062;0061 05AE 1E002 0300 0315 0062; # (a◌𞀂◌̕◌̀◌֮b; a◌֮◌𞀂◌̀◌̕b; a◌֮◌𞀂◌̀◌̕b; a◌֮◌𞀂◌̀◌̕b; a◌֮◌𞀂◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER VEDE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E003 0062;00E0 05AE 1E003 0315 0062;0061 05AE 0300 1E003 0315 0062;00E0 05AE 1E003 0315 0062;0061 05AE 0300 1E003 0315 0062; # (a◌̕◌̀◌֮◌𞀃b; à◌֮◌𞀃◌̕b; a◌֮◌̀◌𞀃◌̕b; à◌֮◌𞀃◌̕b; a◌֮◌̀◌𞀃◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER GLAGOLI, LATIN SMALL LETTER B 0061 1E003 0315 0300 05AE 0062;0061 05AE 1E003 0300 0315 0062;0061 05AE 1E003 0300 0315 0062;0061 05AE 1E003 0300 0315 0062;0061 05AE 1E003 0300 0315 0062; # (a◌𞀃◌̕◌̀◌֮b; a◌֮◌𞀃◌̀◌̕b; a◌֮◌𞀃◌̀◌̕b; a◌֮◌𞀃◌̀◌̕b; a◌֮◌𞀃◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER GLAGOLI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E004 0062;00E0 05AE 1E004 0315 0062;0061 05AE 0300 1E004 0315 0062;00E0 05AE 1E004 0315 0062;0061 05AE 0300 1E004 0315 0062; # (a◌̕◌̀◌֮◌𞀄b; à◌֮◌𞀄◌̕b; a◌֮◌̀◌𞀄◌̕b; à◌֮◌𞀄◌̕b; a◌֮◌̀◌𞀄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER DOBRO, LATIN SMALL LETTER B 0061 1E004 0315 0300 05AE 0062;0061 05AE 1E004 0300 0315 0062;0061 05AE 1E004 0300 0315 0062;0061 05AE 1E004 0300 0315 0062;0061 05AE 1E004 0300 0315 0062; # (a◌𞀄◌̕◌̀◌֮b; a◌֮◌𞀄◌̀◌̕b; a◌֮◌𞀄◌̀◌̕b; a◌֮◌𞀄◌̀◌̕b; a◌֮◌𞀄◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER DOBRO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E005 0062;00E0 05AE 1E005 0315 0062;0061 05AE 0300 1E005 0315 0062;00E0 05AE 1E005 0315 0062;0061 05AE 0300 1E005 0315 0062; # (a◌̕◌̀◌֮◌𞀅b; à◌֮◌𞀅◌̕b; a◌֮◌̀◌𞀅◌̕b; à◌֮◌𞀅◌̕b; a◌֮◌̀◌𞀅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YESTU, LATIN SMALL LETTER B 0061 1E005 0315 0300 05AE 0062;0061 05AE 1E005 0300 0315 0062;0061 05AE 1E005 0300 0315 0062;0061 05AE 1E005 0300 0315 0062;0061 05AE 1E005 0300 0315 0062; # (a◌𞀅◌̕◌̀◌֮b; a◌֮◌𞀅◌̀◌̕b; a◌֮◌𞀅◌̀◌̕b; a◌֮◌𞀅◌̀◌̕b; a◌֮◌𞀅◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YESTU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E006 0062;00E0 05AE 1E006 0315 0062;0061 05AE 0300 1E006 0315 0062;00E0 05AE 1E006 0315 0062;0061 05AE 0300 1E006 0315 0062; # (a◌̕◌̀◌֮◌𞀆b; à◌֮◌𞀆◌̕b; a◌֮◌̀◌𞀆◌̕b; à◌֮◌𞀆◌̕b; a◌֮◌̀◌𞀆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER ZHIVETE, LATIN SMALL LETTER B 0061 1E006 0315 0300 05AE 0062;0061 05AE 1E006 0300 0315 0062;0061 05AE 1E006 0300 0315 0062;0061 05AE 1E006 0300 0315 0062;0061 05AE 1E006 0300 0315 0062; # (a◌𞀆◌̕◌̀◌֮b; a◌֮◌𞀆◌̀◌̕b; a◌֮◌𞀆◌̀◌̕b; a◌֮◌𞀆◌̀◌̕b; a◌֮◌𞀆◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER ZHIVETE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E008 0062;00E0 05AE 1E008 0315 0062;0061 05AE 0300 1E008 0315 0062;00E0 05AE 1E008 0315 0062;0061 05AE 0300 1E008 0315 0062; # (a◌̕◌̀◌֮◌𞀈b; à◌֮◌𞀈◌̕b; a◌֮◌̀◌𞀈◌̕b; à◌֮◌𞀈◌̕b; a◌֮◌̀◌𞀈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER ZEMLJA, LATIN SMALL LETTER B 0061 1E008 0315 0300 05AE 0062;0061 05AE 1E008 0300 0315 0062;0061 05AE 1E008 0300 0315 0062;0061 05AE 1E008 0300 0315 0062;0061 05AE 1E008 0300 0315 0062; # (a◌𞀈◌̕◌̀◌֮b; a◌֮◌𞀈◌̀◌̕b; a◌֮◌𞀈◌̀◌̕b; a◌֮◌𞀈◌̀◌̕b; a◌֮◌𞀈◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER ZEMLJA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E009 0062;00E0 05AE 1E009 0315 0062;0061 05AE 0300 1E009 0315 0062;00E0 05AE 1E009 0315 0062;0061 05AE 0300 1E009 0315 0062; # (a◌̕◌̀◌֮◌𞀉b; à◌֮◌𞀉◌̕b; a◌֮◌̀◌𞀉◌̕b; à◌֮◌𞀉◌̕b; a◌֮◌̀◌𞀉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER IZHE, LATIN SMALL LETTER B 0061 1E009 0315 0300 05AE 0062;0061 05AE 1E009 0300 0315 0062;0061 05AE 1E009 0300 0315 0062;0061 05AE 1E009 0300 0315 0062;0061 05AE 1E009 0300 0315 0062; # (a◌𞀉◌̕◌̀◌֮b; a◌֮◌𞀉◌̀◌̕b; a◌֮◌𞀉◌̀◌̕b; a◌֮◌𞀉◌̀◌̕b; a◌֮◌𞀉◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER IZHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00A 0062;00E0 05AE 1E00A 0315 0062;0061 05AE 0300 1E00A 0315 0062;00E0 05AE 1E00A 0315 0062;0061 05AE 0300 1E00A 0315 0062; # (a◌̕◌̀◌֮◌𞀊b; à◌֮◌𞀊◌̕b; a◌֮◌̀◌𞀊◌̕b; à◌֮◌𞀊◌̕b; a◌֮◌̀◌𞀊◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER INITIAL IZHE, LATIN SMALL LETTER B 0061 1E00A 0315 0300 05AE 0062;0061 05AE 1E00A 0300 0315 0062;0061 05AE 1E00A 0300 0315 0062;0061 05AE 1E00A 0300 0315 0062;0061 05AE 1E00A 0300 0315 0062; # (a◌𞀊◌̕◌̀◌֮b; a◌֮◌𞀊◌̀◌̕b; a◌֮◌𞀊◌̀◌̕b; a◌֮◌𞀊◌̀◌̕b; a◌֮◌𞀊◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER INITIAL IZHE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00B 0062;00E0 05AE 1E00B 0315 0062;0061 05AE 0300 1E00B 0315 0062;00E0 05AE 1E00B 0315 0062;0061 05AE 0300 1E00B 0315 0062; # (a◌̕◌̀◌֮◌𞀋b; à◌֮◌𞀋◌̕b; a◌֮◌̀◌𞀋◌̕b; à◌֮◌𞀋◌̕b; a◌֮◌̀◌𞀋◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER I, LATIN SMALL LETTER B 0061 1E00B 0315 0300 05AE 0062;0061 05AE 1E00B 0300 0315 0062;0061 05AE 1E00B 0300 0315 0062;0061 05AE 1E00B 0300 0315 0062;0061 05AE 1E00B 0300 0315 0062; # (a◌𞀋◌̕◌̀◌֮b; a◌֮◌𞀋◌̀◌̕b; a◌֮◌𞀋◌̀◌̕b; a◌֮◌𞀋◌̀◌̕b; a◌֮◌𞀋◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER I, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00C 0062;00E0 05AE 1E00C 0315 0062;0061 05AE 0300 1E00C 0315 0062;00E0 05AE 1E00C 0315 0062;0061 05AE 0300 1E00C 0315 0062; # (a◌̕◌̀◌֮◌𞀌b; à◌֮◌𞀌◌̕b; a◌֮◌̀◌𞀌◌̕b; à◌֮◌𞀌◌̕b; a◌֮◌̀◌𞀌◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER DJERVI, LATIN SMALL LETTER B 0061 1E00C 0315 0300 05AE 0062;0061 05AE 1E00C 0300 0315 0062;0061 05AE 1E00C 0300 0315 0062;0061 05AE 1E00C 0300 0315 0062;0061 05AE 1E00C 0300 0315 0062; # (a◌𞀌◌̕◌̀◌֮b; a◌֮◌𞀌◌̀◌̕b; a◌֮◌𞀌◌̀◌̕b; a◌֮◌𞀌◌̀◌̕b; a◌֮◌𞀌◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER DJERVI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00D 0062;00E0 05AE 1E00D 0315 0062;0061 05AE 0300 1E00D 0315 0062;00E0 05AE 1E00D 0315 0062;0061 05AE 0300 1E00D 0315 0062; # (a◌̕◌̀◌֮◌𞀍b; à◌֮◌𞀍◌̕b; a◌֮◌̀◌𞀍◌̕b; à◌֮◌𞀍◌̕b; a◌֮◌̀◌𞀍◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER KAKO, LATIN SMALL LETTER B 0061 1E00D 0315 0300 05AE 0062;0061 05AE 1E00D 0300 0315 0062;0061 05AE 1E00D 0300 0315 0062;0061 05AE 1E00D 0300 0315 0062;0061 05AE 1E00D 0300 0315 0062; # (a◌𞀍◌̕◌̀◌֮b; a◌֮◌𞀍◌̀◌̕b; a◌֮◌𞀍◌̀◌̕b; a◌֮◌𞀍◌̀◌̕b; a◌֮◌𞀍◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER KAKO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00E 0062;00E0 05AE 1E00E 0315 0062;0061 05AE 0300 1E00E 0315 0062;00E0 05AE 1E00E 0315 0062;0061 05AE 0300 1E00E 0315 0062; # (a◌̕◌̀◌֮◌𞀎b; à◌֮◌𞀎◌̕b; a◌֮◌̀◌𞀎◌̕b; à◌֮◌𞀎◌̕b; a◌֮◌̀◌𞀎◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER LJUDIJE, LATIN SMALL LETTER B 0061 1E00E 0315 0300 05AE 0062;0061 05AE 1E00E 0300 0315 0062;0061 05AE 1E00E 0300 0315 0062;0061 05AE 1E00E 0300 0315 0062;0061 05AE 1E00E 0300 0315 0062; # (a◌𞀎◌̕◌̀◌֮b; a◌֮◌𞀎◌̀◌̕b; a◌֮◌𞀎◌̀◌̕b; a◌֮◌𞀎◌̀◌̕b; a◌֮◌𞀎◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER LJUDIJE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E00F 0062;00E0 05AE 1E00F 0315 0062;0061 05AE 0300 1E00F 0315 0062;00E0 05AE 1E00F 0315 0062;0061 05AE 0300 1E00F 0315 0062; # (a◌̕◌̀◌֮◌𞀏b; à◌֮◌𞀏◌̕b; a◌֮◌̀◌𞀏◌̕b; à◌֮◌𞀏◌̕b; a◌֮◌̀◌𞀏◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER MYSLITE, LATIN SMALL LETTER B 0061 1E00F 0315 0300 05AE 0062;0061 05AE 1E00F 0300 0315 0062;0061 05AE 1E00F 0300 0315 0062;0061 05AE 1E00F 0300 0315 0062;0061 05AE 1E00F 0300 0315 0062; # (a◌𞀏◌̕◌̀◌֮b; a◌֮◌𞀏◌̀◌̕b; a◌֮◌𞀏◌̀◌̕b; a◌֮◌𞀏◌̀◌̕b; a◌֮◌𞀏◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER MYSLITE, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E010 0062;00E0 05AE 1E010 0315 0062;0061 05AE 0300 1E010 0315 0062;00E0 05AE 1E010 0315 0062;0061 05AE 0300 1E010 0315 0062; # (a◌̕◌̀◌֮◌𞀐b; à◌֮◌𞀐◌̕b; a◌֮◌̀◌𞀐◌̕b; à◌֮◌𞀐◌̕b; a◌֮◌̀◌𞀐◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER NASHI, LATIN SMALL LETTER B 0061 1E010 0315 0300 05AE 0062;0061 05AE 1E010 0300 0315 0062;0061 05AE 1E010 0300 0315 0062;0061 05AE 1E010 0300 0315 0062;0061 05AE 1E010 0300 0315 0062; # (a◌𞀐◌̕◌̀◌֮b; a◌֮◌𞀐◌̀◌̕b; a◌֮◌𞀐◌̀◌̕b; a◌֮◌𞀐◌̀◌̕b; a◌֮◌𞀐◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER NASHI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E011 0062;00E0 05AE 1E011 0315 0062;0061 05AE 0300 1E011 0315 0062;00E0 05AE 1E011 0315 0062;0061 05AE 0300 1E011 0315 0062; # (a◌̕◌̀◌֮◌𞀑b; à◌֮◌𞀑◌̕b; a◌֮◌̀◌𞀑◌̕b; à◌֮◌𞀑◌̕b; a◌֮◌̀◌𞀑◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER ONU, LATIN SMALL LETTER B 0061 1E011 0315 0300 05AE 0062;0061 05AE 1E011 0300 0315 0062;0061 05AE 1E011 0300 0315 0062;0061 05AE 1E011 0300 0315 0062;0061 05AE 1E011 0300 0315 0062; # (a◌𞀑◌̕◌̀◌֮b; a◌֮◌𞀑◌̀◌̕b; a◌֮◌𞀑◌̀◌̕b; a◌֮◌𞀑◌̀◌̕b; a◌֮◌𞀑◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER ONU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E012 0062;00E0 05AE 1E012 0315 0062;0061 05AE 0300 1E012 0315 0062;00E0 05AE 1E012 0315 0062;0061 05AE 0300 1E012 0315 0062; # (a◌̕◌̀◌֮◌𞀒b; à◌֮◌𞀒◌̕b; a◌֮◌̀◌𞀒◌̕b; à◌֮◌𞀒◌̕b; a◌֮◌̀◌𞀒◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER POKOJI, LATIN SMALL LETTER B 0061 1E012 0315 0300 05AE 0062;0061 05AE 1E012 0300 0315 0062;0061 05AE 1E012 0300 0315 0062;0061 05AE 1E012 0300 0315 0062;0061 05AE 1E012 0300 0315 0062; # (a◌𞀒◌̕◌̀◌֮b; a◌֮◌𞀒◌̀◌̕b; a◌֮◌𞀒◌̀◌̕b; a◌֮◌𞀒◌̀◌̕b; a◌֮◌𞀒◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER POKOJI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E013 0062;00E0 05AE 1E013 0315 0062;0061 05AE 0300 1E013 0315 0062;00E0 05AE 1E013 0315 0062;0061 05AE 0300 1E013 0315 0062; # (a◌̕◌̀◌֮◌𞀓b; à◌֮◌𞀓◌̕b; a◌֮◌̀◌𞀓◌̕b; à◌֮◌𞀓◌̕b; a◌֮◌̀◌𞀓◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER RITSI, LATIN SMALL LETTER B 0061 1E013 0315 0300 05AE 0062;0061 05AE 1E013 0300 0315 0062;0061 05AE 1E013 0300 0315 0062;0061 05AE 1E013 0300 0315 0062;0061 05AE 1E013 0300 0315 0062; # (a◌𞀓◌̕◌̀◌֮b; a◌֮◌𞀓◌̀◌̕b; a◌֮◌𞀓◌̀◌̕b; a◌֮◌𞀓◌̀◌̕b; a◌֮◌𞀓◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER RITSI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E014 0062;00E0 05AE 1E014 0315 0062;0061 05AE 0300 1E014 0315 0062;00E0 05AE 1E014 0315 0062;0061 05AE 0300 1E014 0315 0062; # (a◌̕◌̀◌֮◌𞀔b; à◌֮◌𞀔◌̕b; a◌֮◌̀◌𞀔◌̕b; à◌֮◌𞀔◌̕b; a◌֮◌̀◌𞀔◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER SLOVO, LATIN SMALL LETTER B 0061 1E014 0315 0300 05AE 0062;0061 05AE 1E014 0300 0315 0062;0061 05AE 1E014 0300 0315 0062;0061 05AE 1E014 0300 0315 0062;0061 05AE 1E014 0300 0315 0062; # (a◌𞀔◌̕◌̀◌֮b; a◌֮◌𞀔◌̀◌̕b; a◌֮◌𞀔◌̀◌̕b; a◌֮◌𞀔◌̀◌̕b; a◌֮◌𞀔◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER SLOVO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E015 0062;00E0 05AE 1E015 0315 0062;0061 05AE 0300 1E015 0315 0062;00E0 05AE 1E015 0315 0062;0061 05AE 0300 1E015 0315 0062; # (a◌̕◌̀◌֮◌𞀕b; à◌֮◌𞀕◌̕b; a◌֮◌̀◌𞀕◌̕b; à◌֮◌𞀕◌̕b; a◌֮◌̀◌𞀕◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER TVRIDO, LATIN SMALL LETTER B 0061 1E015 0315 0300 05AE 0062;0061 05AE 1E015 0300 0315 0062;0061 05AE 1E015 0300 0315 0062;0061 05AE 1E015 0300 0315 0062;0061 05AE 1E015 0300 0315 0062; # (a◌𞀕◌̕◌̀◌֮b; a◌֮◌𞀕◌̀◌̕b; a◌֮◌𞀕◌̀◌̕b; a◌֮◌𞀕◌̀◌̕b; a◌֮◌𞀕◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER TVRIDO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E016 0062;00E0 05AE 1E016 0315 0062;0061 05AE 0300 1E016 0315 0062;00E0 05AE 1E016 0315 0062;0061 05AE 0300 1E016 0315 0062; # (a◌̕◌̀◌֮◌𞀖b; à◌֮◌𞀖◌̕b; a◌֮◌̀◌𞀖◌̕b; à◌֮◌𞀖◌̕b; a◌֮◌̀◌𞀖◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER UKU, LATIN SMALL LETTER B 0061 1E016 0315 0300 05AE 0062;0061 05AE 1E016 0300 0315 0062;0061 05AE 1E016 0300 0315 0062;0061 05AE 1E016 0300 0315 0062;0061 05AE 1E016 0300 0315 0062; # (a◌𞀖◌̕◌̀◌֮b; a◌֮◌𞀖◌̀◌̕b; a◌֮◌𞀖◌̀◌̕b; a◌֮◌𞀖◌̀◌̕b; a◌֮◌𞀖◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER UKU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E017 0062;00E0 05AE 1E017 0315 0062;0061 05AE 0300 1E017 0315 0062;00E0 05AE 1E017 0315 0062;0061 05AE 0300 1E017 0315 0062; # (a◌̕◌̀◌֮◌𞀗b; à◌֮◌𞀗◌̕b; a◌֮◌̀◌𞀗◌̕b; à◌֮◌𞀗◌̕b; a◌֮◌̀◌𞀗◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER FRITU, LATIN SMALL LETTER B 0061 1E017 0315 0300 05AE 0062;0061 05AE 1E017 0300 0315 0062;0061 05AE 1E017 0300 0315 0062;0061 05AE 1E017 0300 0315 0062;0061 05AE 1E017 0300 0315 0062; # (a◌𞀗◌̕◌̀◌֮b; a◌֮◌𞀗◌̀◌̕b; a◌֮◌𞀗◌̀◌̕b; a◌֮◌𞀗◌̀◌̕b; a◌֮◌𞀗◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER FRITU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E018 0062;00E0 05AE 1E018 0315 0062;0061 05AE 0300 1E018 0315 0062;00E0 05AE 1E018 0315 0062;0061 05AE 0300 1E018 0315 0062; # (a◌̕◌̀◌֮◌𞀘b; à◌֮◌𞀘◌̕b; a◌֮◌̀◌𞀘◌̕b; à◌֮◌𞀘◌̕b; a◌֮◌̀◌𞀘◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER HERU, LATIN SMALL LETTER B 0061 1E018 0315 0300 05AE 0062;0061 05AE 1E018 0300 0315 0062;0061 05AE 1E018 0300 0315 0062;0061 05AE 1E018 0300 0315 0062;0061 05AE 1E018 0300 0315 0062; # (a◌𞀘◌̕◌̀◌֮b; a◌֮◌𞀘◌̀◌̕b; a◌֮◌𞀘◌̀◌̕b; a◌֮◌𞀘◌̀◌̕b; a◌֮◌𞀘◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER HERU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E01B 0062;00E0 05AE 1E01B 0315 0062;0061 05AE 0300 1E01B 0315 0062;00E0 05AE 1E01B 0315 0062;0061 05AE 0300 1E01B 0315 0062; # (a◌̕◌̀◌֮◌𞀛b; à◌֮◌𞀛◌̕b; a◌֮◌̀◌𞀛◌̕b; à◌֮◌𞀛◌̕b; a◌֮◌̀◌𞀛◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER SHTA, LATIN SMALL LETTER B 0061 1E01B 0315 0300 05AE 0062;0061 05AE 1E01B 0300 0315 0062;0061 05AE 1E01B 0300 0315 0062;0061 05AE 1E01B 0300 0315 0062;0061 05AE 1E01B 0300 0315 0062; # (a◌𞀛◌̕◌̀◌֮b; a◌֮◌𞀛◌̀◌̕b; a◌֮◌𞀛◌̀◌̕b; a◌֮◌𞀛◌̀◌̕b; a◌֮◌𞀛◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER SHTA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E01C 0062;00E0 05AE 1E01C 0315 0062;0061 05AE 0300 1E01C 0315 0062;00E0 05AE 1E01C 0315 0062;0061 05AE 0300 1E01C 0315 0062; # (a◌̕◌̀◌֮◌𞀜b; à◌֮◌𞀜◌̕b; a◌֮◌̀◌𞀜◌̕b; à◌֮◌𞀜◌̕b; a◌֮◌̀◌𞀜◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER TSI, LATIN SMALL LETTER B 0061 1E01C 0315 0300 05AE 0062;0061 05AE 1E01C 0300 0315 0062;0061 05AE 1E01C 0300 0315 0062;0061 05AE 1E01C 0300 0315 0062;0061 05AE 1E01C 0300 0315 0062; # (a◌𞀜◌̕◌̀◌֮b; a◌֮◌𞀜◌̀◌̕b; a◌֮◌𞀜◌̀◌̕b; a◌֮◌𞀜◌̀◌̕b; a◌֮◌𞀜◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER TSI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E01D 0062;00E0 05AE 1E01D 0315 0062;0061 05AE 0300 1E01D 0315 0062;00E0 05AE 1E01D 0315 0062;0061 05AE 0300 1E01D 0315 0062; # (a◌̕◌̀◌֮◌𞀝b; à◌֮◌𞀝◌̕b; a◌֮◌̀◌𞀝◌̕b; à◌֮◌𞀝◌̕b; a◌֮◌̀◌𞀝◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER CHRIVI, LATIN SMALL LETTER B 0061 1E01D 0315 0300 05AE 0062;0061 05AE 1E01D 0300 0315 0062;0061 05AE 1E01D 0300 0315 0062;0061 05AE 1E01D 0300 0315 0062;0061 05AE 1E01D 0300 0315 0062; # (a◌𞀝◌̕◌̀◌֮b; a◌֮◌𞀝◌̀◌̕b; a◌֮◌𞀝◌̀◌̕b; a◌֮◌𞀝◌̀◌̕b; a◌֮◌𞀝◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER CHRIVI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E01E 0062;00E0 05AE 1E01E 0315 0062;0061 05AE 0300 1E01E 0315 0062;00E0 05AE 1E01E 0315 0062;0061 05AE 0300 1E01E 0315 0062; # (a◌̕◌̀◌֮◌𞀞b; à◌֮◌𞀞◌̕b; a◌֮◌̀◌𞀞◌̕b; à◌֮◌𞀞◌̕b; a◌֮◌̀◌𞀞◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER SHA, LATIN SMALL LETTER B 0061 1E01E 0315 0300 05AE 0062;0061 05AE 1E01E 0300 0315 0062;0061 05AE 1E01E 0300 0315 0062;0061 05AE 1E01E 0300 0315 0062;0061 05AE 1E01E 0300 0315 0062; # (a◌𞀞◌̕◌̀◌֮b; a◌֮◌𞀞◌̀◌̕b; a◌֮◌𞀞◌̀◌̕b; a◌֮◌𞀞◌̀◌̕b; a◌֮◌𞀞◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER SHA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E01F 0062;00E0 05AE 1E01F 0315 0062;0061 05AE 0300 1E01F 0315 0062;00E0 05AE 1E01F 0315 0062;0061 05AE 0300 1E01F 0315 0062; # (a◌̕◌̀◌֮◌𞀟b; à◌֮◌𞀟◌̕b; a◌֮◌̀◌𞀟◌̕b; à◌֮◌𞀟◌̕b; a◌֮◌̀◌𞀟◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YERU, LATIN SMALL LETTER B 0061 1E01F 0315 0300 05AE 0062;0061 05AE 1E01F 0300 0315 0062;0061 05AE 1E01F 0300 0315 0062;0061 05AE 1E01F 0300 0315 0062;0061 05AE 1E01F 0300 0315 0062; # (a◌𞀟◌̕◌̀◌֮b; a◌֮◌𞀟◌̀◌̕b; a◌֮◌𞀟◌̀◌̕b; a◌֮◌𞀟◌̀◌̕b; a◌֮◌𞀟◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YERU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E020 0062;00E0 05AE 1E020 0315 0062;0061 05AE 0300 1E020 0315 0062;00E0 05AE 1E020 0315 0062;0061 05AE 0300 1E020 0315 0062; # (a◌̕◌̀◌֮◌𞀠b; à◌֮◌𞀠◌̕b; a◌֮◌̀◌𞀠◌̕b; à◌֮◌𞀠◌̕b; a◌֮◌̀◌𞀠◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YERI, LATIN SMALL LETTER B 0061 1E020 0315 0300 05AE 0062;0061 05AE 1E020 0300 0315 0062;0061 05AE 1E020 0300 0315 0062;0061 05AE 1E020 0300 0315 0062;0061 05AE 1E020 0300 0315 0062; # (a◌𞀠◌̕◌̀◌֮b; a◌֮◌𞀠◌̀◌̕b; a◌֮◌𞀠◌̀◌̕b; a◌֮◌𞀠◌̀◌̕b; a◌֮◌𞀠◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YERI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E021 0062;00E0 05AE 1E021 0315 0062;0061 05AE 0300 1E021 0315 0062;00E0 05AE 1E021 0315 0062;0061 05AE 0300 1E021 0315 0062; # (a◌̕◌̀◌֮◌𞀡b; à◌֮◌𞀡◌̕b; a◌֮◌̀◌𞀡◌̕b; à◌֮◌𞀡◌̕b; a◌֮◌̀◌𞀡◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YATI, LATIN SMALL LETTER B 0061 1E021 0315 0300 05AE 0062;0061 05AE 1E021 0300 0315 0062;0061 05AE 1E021 0300 0315 0062;0061 05AE 1E021 0300 0315 0062;0061 05AE 1E021 0300 0315 0062; # (a◌𞀡◌̕◌̀◌֮b; a◌֮◌𞀡◌̀◌̕b; a◌֮◌𞀡◌̀◌̕b; a◌֮◌𞀡◌̀◌̕b; a◌֮◌𞀡◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YATI, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E023 0062;00E0 05AE 1E023 0315 0062;0061 05AE 0300 1E023 0315 0062;00E0 05AE 1E023 0315 0062;0061 05AE 0300 1E023 0315 0062; # (a◌̕◌̀◌֮◌𞀣b; à◌֮◌𞀣◌̕b; a◌֮◌̀◌𞀣◌̕b; à◌֮◌𞀣◌̕b; a◌֮◌̀◌𞀣◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YU, LATIN SMALL LETTER B 0061 1E023 0315 0300 05AE 0062;0061 05AE 1E023 0300 0315 0062;0061 05AE 1E023 0300 0315 0062;0061 05AE 1E023 0300 0315 0062;0061 05AE 1E023 0300 0315 0062; # (a◌𞀣◌̕◌̀◌֮b; a◌֮◌𞀣◌̀◌̕b; a◌֮◌𞀣◌̀◌̕b; a◌֮◌𞀣◌̀◌̕b; a◌֮◌𞀣◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YU, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E024 0062;00E0 05AE 1E024 0315 0062;0061 05AE 0300 1E024 0315 0062;00E0 05AE 1E024 0315 0062;0061 05AE 0300 1E024 0315 0062; # (a◌̕◌̀◌֮◌𞀤b; à◌֮◌𞀤◌̕b; a◌֮◌̀◌𞀤◌̕b; à◌֮◌𞀤◌̕b; a◌֮◌̀◌𞀤◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER SMALL YUS, LATIN SMALL LETTER B 0061 1E024 0315 0300 05AE 0062;0061 05AE 1E024 0300 0315 0062;0061 05AE 1E024 0300 0315 0062;0061 05AE 1E024 0300 0315 0062;0061 05AE 1E024 0300 0315 0062; # (a◌𞀤◌̕◌̀◌֮b; a◌֮◌𞀤◌̀◌̕b; a◌֮◌𞀤◌̀◌̕b; a◌֮◌𞀤◌̀◌̕b; a◌֮◌𞀤◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER SMALL YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E026 0062;00E0 05AE 1E026 0315 0062;0061 05AE 0300 1E026 0315 0062;00E0 05AE 1E026 0315 0062;0061 05AE 0300 1E026 0315 0062; # (a◌̕◌̀◌֮◌𞀦b; à◌֮◌𞀦◌̕b; a◌֮◌̀◌𞀦◌̕b; à◌֮◌𞀦◌̕b; a◌֮◌̀◌𞀦◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER YO, LATIN SMALL LETTER B 0061 1E026 0315 0300 05AE 0062;0061 05AE 1E026 0300 0315 0062;0061 05AE 1E026 0300 0315 0062;0061 05AE 1E026 0300 0315 0062;0061 05AE 1E026 0300 0315 0062; # (a◌𞀦◌̕◌̀◌֮b; a◌֮◌𞀦◌̀◌̕b; a◌֮◌𞀦◌̀◌̕b; a◌֮◌𞀦◌̀◌̕b; a◌֮◌𞀦◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER YO, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E027 0062;00E0 05AE 1E027 0315 0062;0061 05AE 0300 1E027 0315 0062;00E0 05AE 1E027 0315 0062;0061 05AE 0300 1E027 0315 0062; # (a◌̕◌̀◌֮◌𞀧b; à◌֮◌𞀧◌̕b; a◌֮◌̀◌𞀧◌̕b; à◌֮◌𞀧◌̕b; a◌֮◌̀◌𞀧◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS, LATIN SMALL LETTER B 0061 1E027 0315 0300 05AE 0062;0061 05AE 1E027 0300 0315 0062;0061 05AE 1E027 0300 0315 0062;0061 05AE 1E027 0300 0315 0062;0061 05AE 1E027 0300 0315 0062; # (a◌𞀧◌̕◌̀◌֮b; a◌֮◌𞀧◌̀◌̕b; a◌֮◌𞀧◌̀◌̕b; a◌֮◌𞀧◌̀◌̕b; a◌֮◌𞀧◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E028 0062;00E0 05AE 1E028 0315 0062;0061 05AE 0300 1E028 0315 0062;00E0 05AE 1E028 0315 0062;0061 05AE 0300 1E028 0315 0062; # (a◌̕◌̀◌֮◌𞀨b; à◌֮◌𞀨◌̕b; a◌֮◌̀◌𞀨◌̕b; à◌֮◌𞀨◌̕b; a◌֮◌̀◌𞀨◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER BIG YUS, LATIN SMALL LETTER B 0061 1E028 0315 0300 05AE 0062;0061 05AE 1E028 0300 0315 0062;0061 05AE 1E028 0300 0315 0062;0061 05AE 1E028 0300 0315 0062;0061 05AE 1E028 0300 0315 0062; # (a◌𞀨◌̕◌̀◌֮b; a◌֮◌𞀨◌̀◌̕b; a◌֮◌𞀨◌̀◌̕b; a◌֮◌𞀨◌̀◌̕b; a◌֮◌𞀨◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E029 0062;00E0 05AE 1E029 0315 0062;0061 05AE 0300 1E029 0315 0062;00E0 05AE 1E029 0315 0062;0061 05AE 0300 1E029 0315 0062; # (a◌̕◌̀◌֮◌𞀩b; à◌֮◌𞀩◌̕b; a◌֮◌̀◌𞀩◌̕b; à◌֮◌𞀩◌̕b; a◌֮◌̀◌𞀩◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER IOTATED BIG YUS, LATIN SMALL LETTER B 0061 1E029 0315 0300 05AE 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062;0061 05AE 1E029 0300 0315 0062; # (a◌𞀩◌̕◌̀◌֮b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; a◌֮◌𞀩◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER IOTATED BIG YUS, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E02A 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062;00E0 05AE 1E02A 0315 0062;0061 05AE 0300 1E02A 0315 0062; # (a◌̕◌̀◌֮◌𞀪b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; à◌֮◌𞀪◌̕b; a◌֮◌̀◌𞀪◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, COMBINING GLAGOLITIC LETTER FITA, LATIN SMALL LETTER B 0061 1E02A 0315 0300 05AE 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062;0061 05AE 1E02A 0300 0315 0062; # (a◌𞀪◌̕◌̀◌֮b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; a◌֮◌𞀪◌̀◌̕b; ) LATIN SMALL LETTER A, COMBINING GLAGOLITIC LETTER FITA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D0 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062; # (a◌֚◌̖◌〪◌𞣐b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; a◌〪◌̖◌𞣐◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER TEENS, LATIN SMALL LETTER B 0061 1E8D0 059A 0316 302A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062; # (a◌𞣐◌֚◌̖◌〪b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; a◌〪◌𞣐◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER TEENS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D1 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062; # (a◌֚◌̖◌〪◌𞣑b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; a◌〪◌̖◌𞣑◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER TENS, LATIN SMALL LETTER B 0061 1E8D1 059A 0316 302A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062; # (a◌𞣑◌֚◌̖◌〪b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; a◌〪◌𞣑◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER TENS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D2 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062; # (a◌֚◌̖◌〪◌𞣒b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; a◌〪◌̖◌𞣒◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, LATIN SMALL LETTER B 0061 1E8D2 059A 0316 302A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062; # (a◌𞣒◌֚◌̖◌〪b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; a◌〪◌𞣒◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDREDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D3 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062; # (a◌֚◌̖◌〪◌𞣓b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; a◌〪◌̖◌𞣓◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, LATIN SMALL LETTER B 0061 1E8D3 059A 0316 302A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062; # (a◌𞣓◌֚◌̖◌〪b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; a◌〪◌𞣓◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER THOUSANDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D4 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062; # (a◌֚◌̖◌〪◌𞣔b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; a◌〪◌̖◌𞣔◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, LATIN SMALL LETTER B 0061 1E8D4 059A 0316 302A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062; # (a◌𞣔◌֚◌̖◌〪b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; a◌〪◌𞣔◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D5 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062; # (a◌֚◌̖◌〪◌𞣕b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; a◌〪◌̖◌𞣕◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, LATIN SMALL LETTER B 0061 1E8D5 059A 0316 302A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062; # (a◌𞣕◌֚◌̖◌〪b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; a◌〪◌𞣕◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 059A 0316 302A 1E8D6 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062; # (a◌֚◌̖◌〪◌𞣖b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; a◌〪◌̖◌𞣖◌֚b; ) LATIN SMALL LETTER A, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, MENDE KIKAKUI COMBINING NUMBER MILLIONS, LATIN SMALL LETTER B 0061 1E8D6 059A 0316 302A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062; # (a◌𞣖◌֚◌̖◌〪b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; a◌〪◌𞣖◌̖◌֚b; ) LATIN SMALL LETTER A, MENDE KIKAKUI COMBINING NUMBER MILLIONS, HEBREW ACCENT YETIV, COMBINING GRAVE ACCENT BELOW, IDEOGRAPHIC LEVEL TONE MARK, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E944 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 0315 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 0315 0062; # (a◌̕◌̀◌֮◌𞥄b; à◌֮◌𞥄◌̕b; a◌֮◌̀◌𞥄◌̕b; à◌֮◌𞥄◌̕b; a◌֮◌̀◌𞥄◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM ALIF LENGTHENER, LATIN SMALL LETTER B 0061 1E944 0315 0300 05AE 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062; # (a◌𞥄◌̕◌̀◌֮b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; a◌֮◌𞥄◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM ALIF LENGTHENER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E945 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 0315 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 0315 0062; # (a◌̕◌̀◌֮◌𞥅b; à◌֮◌𞥅◌̕b; a◌֮◌̀◌𞥅◌̕b; à◌֮◌𞥅◌̕b; a◌֮◌̀◌𞥅◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM VOWEL LENGTHENER, LATIN SMALL LETTER B 0061 1E945 0315 0300 05AE 0062;0061 05AE 1E945 0300 0315 0062;0061 05AE 1E945 0300 0315 0062;0061 05AE 1E945 0300 0315 0062;0061 05AE 1E945 0300 0315 0062; # (a◌𞥅◌̕◌̀◌֮b; a◌֮◌𞥅◌̀◌̕b; a◌֮◌𞥅◌̀◌̕b; a◌֮◌𞥅◌̀◌̕b; a◌֮◌𞥅◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM VOWEL LENGTHENER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E946 0062;00E0 05AE 1E946 0315 0062;0061 05AE 0300 1E946 0315 0062;00E0 05AE 1E946 0315 0062;0061 05AE 0300 1E946 0315 0062; # (a◌̕◌̀◌֮◌𞥆b; à◌֮◌𞥆◌̕b; a◌֮◌̀◌𞥆◌̕b; à◌֮◌𞥆◌̕b; a◌֮◌̀◌𞥆◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM GEMINATION MARK, LATIN SMALL LETTER B 0061 1E946 0315 0300 05AE 0062;0061 05AE 1E946 0300 0315 0062;0061 05AE 1E946 0300 0315 0062;0061 05AE 1E946 0300 0315 0062;0061 05AE 1E946 0300 0315 0062; # (a◌𞥆◌̕◌̀◌֮b; a◌֮◌𞥆◌̀◌̕b; a◌֮◌𞥆◌̀◌̕b; a◌֮◌𞥆◌̀◌̕b; a◌֮◌𞥆◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM GEMINATION MARK, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E947 0062;00E0 05AE 1E947 0315 0062;0061 05AE 0300 1E947 0315 0062;00E0 05AE 1E947 0315 0062;0061 05AE 0300 1E947 0315 0062; # (a◌̕◌̀◌֮◌𞥇b; à◌֮◌𞥇◌̕b; a◌֮◌̀◌𞥇◌̕b; à◌֮◌𞥇◌̕b; a◌֮◌̀◌𞥇◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM HAMZA, LATIN SMALL LETTER B 0061 1E947 0315 0300 05AE 0062;0061 05AE 1E947 0300 0315 0062;0061 05AE 1E947 0300 0315 0062;0061 05AE 1E947 0300 0315 0062;0061 05AE 1E947 0300 0315 0062; # (a◌𞥇◌̕◌̀◌֮b; a◌֮◌𞥇◌̀◌̕b; a◌֮◌𞥇◌̀◌̕b; a◌֮◌𞥇◌̀◌̕b; a◌֮◌𞥇◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM HAMZA, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E948 0062;00E0 05AE 1E948 0315 0062;0061 05AE 0300 1E948 0315 0062;00E0 05AE 1E948 0315 0062;0061 05AE 0300 1E948 0315 0062; # (a◌̕◌̀◌֮◌𞥈b; à◌֮◌𞥈◌̕b; a◌֮◌̀◌𞥈◌̕b; à◌֮◌𞥈◌̕b; a◌֮◌̀◌𞥈◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM CONSONANT MODIFIER, LATIN SMALL LETTER B 0061 1E948 0315 0300 05AE 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062; # (a◌𞥈◌̕◌̀◌֮b; a◌֮◌𞥈◌̀◌̕b; a◌֮◌𞥈◌̀◌̕b; a◌֮◌𞥈◌̀◌̕b; a◌֮◌𞥈◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM CONSONANT MODIFIER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 0315 0300 05AE 1E949 0062;00E0 05AE 1E949 0315 0062;0061 05AE 0300 1E949 0315 0062;00E0 05AE 1E949 0315 0062;0061 05AE 0300 1E949 0315 0062; # (a◌̕◌̀◌֮◌𞥉b; à◌֮◌𞥉◌̕b; a◌֮◌̀◌𞥉◌̕b; à◌֮◌𞥉◌̕b; a◌֮◌̀◌𞥉◌̕b; ) LATIN SMALL LETTER A, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, ADLAM GEMINATE CONSONANT MODIFIER, LATIN SMALL LETTER B 0061 1E949 0315 0300 05AE 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062; # (a◌𞥉◌̕◌̀◌֮b; a◌֮◌𞥉◌̀◌̕b; a◌֮◌𞥉◌̀◌̕b; a◌֮◌𞥉◌̀◌̕b; a◌֮◌𞥉◌̀◌̕b; ) LATIN SMALL LETTER A, ADLAM GEMINATE CONSONANT MODIFIER, COMBINING COMMA ABOVE RIGHT, COMBINING GRAVE ACCENT, HEBREW ACCENT ZINOR, LATIN SMALL LETTER B 0061 3099 093C 0334 1E94A 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062; # (a◌゙◌़◌̴◌𞥊b; a◌̴◌़◌𞥊◌゙b; a◌̴◌़◌𞥊◌゙b; a◌̴◌़◌𞥊◌゙b; a◌̴◌़◌𞥊◌゙b; ) LATIN SMALL LETTER A, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, ADLAM NUKTA, LATIN SMALL LETTER B 0061 1E94A 3099 093C 0334 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062; # (a◌𞥊◌゙◌़◌̴b; a◌̴◌𞥊◌़◌゙b; a◌̴◌𞥊◌़◌゙b; a◌̴◌𞥊◌़◌゙b; a◌̴◌𞥊◌़◌゙b; ) LATIN SMALL LETTER A, ADLAM NUKTA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, DEVANAGARI SIGN NUKTA, COMBINING TILDE OVERLAY, LATIN SMALL LETTER B # @Part3 # PRI #29 Test # 09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE; # (ে◌̴া; ে◌̴া; ে◌̴া; ে◌̴া; ে◌̴া; ) BENGALI VOWEL SIGN E, COMBINING TILDE OVERLAY, BENGALI VOWEL SIGN AA 09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7; # (ে◌̴ৗ; ে◌̴ৗ; ে◌̴ৗ; ে◌̴ৗ; ে◌̴ৗ; ) BENGALI VOWEL SIGN E, COMBINING TILDE OVERLAY, BENGALI AU LENGTH MARK 0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E; # (େ◌̴ା; େ◌̴ା; େ◌̴ା; େ◌̴ା; େ◌̴ା; ) ORIYA VOWEL SIGN E, COMBINING TILDE OVERLAY, ORIYA VOWEL SIGN AA 0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56; # (େ◌̴◌ୖ; େ◌̴◌ୖ; େ◌̴◌ୖ; େ◌̴◌ୖ; େ◌̴◌ୖ; ) ORIYA VOWEL SIGN E, COMBINING TILDE OVERLAY, ORIYA AI LENGTH MARK 0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57; # (େ◌̴ୗ; େ◌̴ୗ; େ◌̴ୗ; େ◌̴ୗ; େ◌̴ୗ; ) ORIYA VOWEL SIGN E, COMBINING TILDE OVERLAY, ORIYA AU LENGTH MARK 0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7; # (ஒ◌̴ௗ; ஒ◌̴ௗ; ஒ◌̴ௗ; ஒ◌̴ௗ; ஒ◌̴ௗ; ) TAMIL LETTER O, COMBINING TILDE OVERLAY, TAMIL AU LENGTH MARK 0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE; # (ெ◌̴ா; ெ◌̴ா; ெ◌̴ா; ெ◌̴ா; ெ◌̴ா; ) TAMIL VOWEL SIGN E, COMBINING TILDE OVERLAY, TAMIL VOWEL SIGN AA 0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7; # (ெ◌̴ௗ; ெ◌̴ௗ; ெ◌̴ௗ; ெ◌̴ௗ; ெ◌̴ௗ; ) TAMIL VOWEL SIGN E, COMBINING TILDE OVERLAY, TAMIL AU LENGTH MARK 0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE; # (ே◌̴ா; ே◌̴ா; ே◌̴ா; ே◌̴ா; ே◌̴ா; ) TAMIL VOWEL SIGN EE, COMBINING TILDE OVERLAY, TAMIL VOWEL SIGN AA 0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5; # (◌ಿ◌̴ೕ; ◌ಿ◌̴ೕ; ◌ಿ◌̴ೕ; ◌ಿ◌̴ೕ; ◌ಿ◌̴ೕ; ) KANNADA VOWEL SIGN I, COMBINING TILDE OVERLAY, KANNADA LENGTH MARK 0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2; # (◌ೆ◌̴ೂ; ◌ೆ◌̴ೂ; ◌ೆ◌̴ೂ; ◌ೆ◌̴ೂ; ◌ೆ◌̴ೂ; ) KANNADA VOWEL SIGN E, COMBINING TILDE OVERLAY, KANNADA VOWEL SIGN UU 0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5; # (◌ೆ◌̴ೕ; ◌ೆ◌̴ೕ; ◌ೆ◌̴ೕ; ◌ೆ◌̴ೕ; ◌ೆ◌̴ೕ; ) KANNADA VOWEL SIGN E, COMBINING TILDE OVERLAY, KANNADA LENGTH MARK 0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6; # (◌ೆ◌̴ೖ; ◌ೆ◌̴ೖ; ◌ೆ◌̴ೖ; ◌ೆ◌̴ೖ; ◌ೆ◌̴ೖ; ) KANNADA VOWEL SIGN E, COMBINING TILDE OVERLAY, KANNADA AI LENGTH MARK 0CCA 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5; # (ೊ◌̴ೕ; ೊ◌̴ೕ; ◌ೊ◌̴ೕ; ೊ◌̴ೕ; ◌ೊ◌̴ೕ; ) KANNADA VOWEL SIGN O, COMBINING TILDE OVERLAY, KANNADA LENGTH MARK 0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E; # (െ◌̴ാ; െ◌̴ാ; െ◌̴ാ; െ◌̴ാ; െ◌̴ാ; ) MALAYALAM VOWEL SIGN E, COMBINING TILDE OVERLAY, MALAYALAM VOWEL SIGN AA 0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57; # (െ◌̴ൗ; െ◌̴ൗ; െ◌̴ൗ; െ◌̴ൗ; െ◌̴ൗ; ) MALAYALAM VOWEL SIGN E, COMBINING TILDE OVERLAY, MALAYALAM AU LENGTH MARK 0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E; # (േ◌̴ാ; േ◌̴ാ; േ◌̴ാ; േ◌̴ാ; േ◌̴ാ; ) MALAYALAM VOWEL SIGN EE, COMBINING TILDE OVERLAY, MALAYALAM VOWEL SIGN AA 0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF; # (ෙ◌̴ා; ෙ◌̴ා; ෙ◌̴ා; ෙ◌̴ා; ෙ◌̴ා; ) SINHALA VOWEL SIGN KOMBUVA, COMBINING TILDE OVERLAY, SINHALA VOWEL SIGN AELA-PILLA 0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF; # (ෙ◌̴ෟ; ෙ◌̴ෟ; ෙ◌̴ෟ; ෙ◌̴ෟ; ෙ◌̴ෟ; ) SINHALA VOWEL SIGN KOMBUVA, COMBINING TILDE OVERLAY, SINHALA VOWEL SIGN GAYANUKITTA 0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5; # (ཀ◌̴◌ྵ; ཀ◌̴◌ྵ; ཀ◌̴◌ྵ; ཀ◌̴◌ྵ; ཀ◌̴◌ྵ; ) TIBETAN LETTER KA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER SSA 0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7; # (ག◌̴◌ྷ; ག◌̴◌ྷ; ག◌̴◌ྷ; ག◌̴◌ྷ; ག◌̴◌ྷ; ) TIBETAN LETTER GA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7; # (ཌ◌̴◌ྷ; ཌ◌̴◌ྷ; ཌ◌̴◌ྷ; ཌ◌̴◌ྷ; ཌ◌̴◌ྷ; ) TIBETAN LETTER DDA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7; # (ད◌̴◌ྷ; ད◌̴◌ྷ; ད◌̴◌ྷ; ད◌̴◌ྷ; ད◌̴◌ྷ; ) TIBETAN LETTER DA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7; # (བ◌̴◌ྷ; བ◌̴◌ྷ; བ◌̴◌ྷ; བ◌̴◌ྷ; བ◌̴◌ྷ; ) TIBETAN LETTER BA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7; # (ཛ◌̴◌ྷ; ཛ◌̴◌ྷ; ཛ◌̴◌ྷ; ཛ◌̴◌ྷ; ཛ◌̴◌ྷ; ) TIBETAN LETTER DZA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5; # (◌ྐ◌̴◌ྵ; ◌ྐ◌̴◌ྵ; ◌ྐ◌̴◌ྵ; ◌ྐ◌̴◌ྵ; ◌ྐ◌̴◌ྵ; ) TIBETAN SUBJOINED LETTER KA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER SSA 0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7; # (◌ྒ◌̴◌ྷ; ◌ྒ◌̴◌ྷ; ◌ྒ◌̴◌ྷ; ◌ྒ◌̴◌ྷ; ◌ྒ◌̴◌ྷ; ) TIBETAN SUBJOINED LETTER GA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7; # (◌ྜ◌̴◌ྷ; ◌ྜ◌̴◌ྷ; ◌ྜ◌̴◌ྷ; ◌ྜ◌̴◌ྷ; ◌ྜ◌̴◌ྷ; ) TIBETAN SUBJOINED LETTER DDA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7; # (◌ྡ◌̴◌ྷ; ◌ྡ◌̴◌ྷ; ◌ྡ◌̴◌ྷ; ◌ྡ◌̴◌ྷ; ◌ྡ◌̴◌ྷ; ) TIBETAN SUBJOINED LETTER DA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7; # (◌ྦ◌̴◌ྷ; ◌ྦ◌̴◌ྷ; ◌ྦ◌̴◌ྷ; ◌ྦ◌̴◌ྷ; ◌ྦ◌̴◌ྷ; ) TIBETAN SUBJOINED LETTER BA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7; # (◌ྫ◌̴◌ྷ; ◌ྫ◌̴◌ྷ; ◌ྫ◌̴◌ྷ; ◌ྫ◌̴◌ྷ; ◌ྫ◌̴◌ྷ; ) TIBETAN SUBJOINED LETTER DZA, COMBINING TILDE OVERLAY, TIBETAN SUBJOINED LETTER HA 1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E; # (ဥ◌̴◌ီ; ဥ◌̴◌ီ; ဥ◌̴◌ီ; ဥ◌̴◌ီ; ဥ◌̴◌ီ; ) MYANMAR LETTER U, COMBINING TILDE OVERLAY, MYANMAR VOWEL SIGN II 1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161; # (ᄀ◌̴ᅡ; ᄀ◌̴ᅡ; ᄀ◌̴ᅡ; ᄀ◌̴ᅡ; ᄀ◌̴ᅡ; ) HANGUL CHOSEONG KIYEOK, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG A 1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E; # (ᄀ◌̴ᅮ; ᄀ◌̴ᅮ; ᄀ◌̴ᅮ; ᄀ◌̴ᅮ; ᄀ◌̴ᅮ; ) HANGUL CHOSEONG KIYEOK, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG U 1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166; # (ᄁ◌̴ᅦ; ᄁ◌̴ᅦ; ᄁ◌̴ᅦ; ᄁ◌̴ᅦ; ᄁ◌̴ᅦ; ) HANGUL CHOSEONG SSANGKIYEOK, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG E 1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173; # (ᄁ◌̴ᅳ; ᄁ◌̴ᅳ; ᄁ◌̴ᅳ; ᄁ◌̴ᅳ; ᄁ◌̴ᅳ; ) HANGUL CHOSEONG SSANGKIYEOK, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG EU 1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B; # (ᄂ◌̴ᅫ; ᄂ◌̴ᅫ; ᄂ◌̴ᅫ; ᄂ◌̴ᅫ; ᄂ◌̴ᅫ; ) HANGUL CHOSEONG NIEUN, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WAE 1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163; # (ᄃ◌̴ᅣ; ᄃ◌̴ᅣ; ᄃ◌̴ᅣ; ᄃ◌̴ᅣ; ᄃ◌̴ᅣ; ) HANGUL CHOSEONG TIKEUT, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YA 1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170; # (ᄃ◌̴ᅰ; ᄃ◌̴ᅰ; ᄃ◌̴ᅰ; ᄃ◌̴ᅰ; ᄃ◌̴ᅰ; ) HANGUL CHOSEONG TIKEUT, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WE 1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168; # (ᄄ◌̴ᅨ; ᄄ◌̴ᅨ; ᄄ◌̴ᅨ; ᄄ◌̴ᅨ; ᄄ◌̴ᅨ; ) HANGUL CHOSEONG SSANGTIKEUT, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YE 1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175; # (ᄄ◌̴ᅵ; ᄄ◌̴ᅵ; ᄄ◌̴ᅵ; ᄄ◌̴ᅵ; ᄄ◌̴ᅵ; ) HANGUL CHOSEONG SSANGTIKEUT, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG I 1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D; # (ᄅ◌̴ᅭ; ᄅ◌̴ᅭ; ᄅ◌̴ᅭ; ᄅ◌̴ᅭ; ᄅ◌̴ᅭ; ) HANGUL CHOSEONG RIEUL, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YO 1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165; # (ᄆ◌̴ᅥ; ᄆ◌̴ᅥ; ᄆ◌̴ᅥ; ᄆ◌̴ᅥ; ᄆ◌̴ᅥ; ) HANGUL CHOSEONG MIEUM, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG EO 1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172; # (ᄆ◌̴ᅲ; ᄆ◌̴ᅲ; ᄆ◌̴ᅲ; ᄆ◌̴ᅲ; ᄆ◌̴ᅲ; ) HANGUL CHOSEONG MIEUM, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YU 1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A; # (ᄇ◌̴ᅪ; ᄇ◌̴ᅪ; ᄇ◌̴ᅪ; ᄇ◌̴ᅪ; ᄇ◌̴ᅪ; ) HANGUL CHOSEONG PIEUP, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WA 1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162; # (ᄈ◌̴ᅢ; ᄈ◌̴ᅢ; ᄈ◌̴ᅢ; ᄈ◌̴ᅢ; ᄈ◌̴ᅢ; ) HANGUL CHOSEONG SSANGPIEUP, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG AE 1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F; # (ᄈ◌̴ᅯ; ᄈ◌̴ᅯ; ᄈ◌̴ᅯ; ᄈ◌̴ᅯ; ᄈ◌̴ᅯ; ) HANGUL CHOSEONG SSANGPIEUP, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WEO 1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167; # (ᄉ◌̴ᅧ; ᄉ◌̴ᅧ; ᄉ◌̴ᅧ; ᄉ◌̴ᅧ; ᄉ◌̴ᅧ; ) HANGUL CHOSEONG SIOS, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YEO 1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174; # (ᄉ◌̴ᅴ; ᄉ◌̴ᅴ; ᄉ◌̴ᅴ; ᄉ◌̴ᅴ; ᄉ◌̴ᅴ; ) HANGUL CHOSEONG SIOS, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YI 110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C; # (ᄊ◌̴ᅬ; ᄊ◌̴ᅬ; ᄊ◌̴ᅬ; ᄊ◌̴ᅬ; ᄊ◌̴ᅬ; ) HANGUL CHOSEONG SSANGSIOS, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG OE 110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164; # (ᄋ◌̴ᅤ; ᄋ◌̴ᅤ; ᄋ◌̴ᅤ; ᄋ◌̴ᅤ; ᄋ◌̴ᅤ; ) HANGUL CHOSEONG IEUNG, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YAE 110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171; # (ᄋ◌̴ᅱ; ᄋ◌̴ᅱ; ᄋ◌̴ᅱ; ᄋ◌̴ᅱ; ᄋ◌̴ᅱ; ) HANGUL CHOSEONG IEUNG, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WI 110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169; # (ᄌ◌̴ᅩ; ᄌ◌̴ᅩ; ᄌ◌̴ᅩ; ᄌ◌̴ᅩ; ᄌ◌̴ᅩ; ) HANGUL CHOSEONG CIEUC, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG O 110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161; # (ᄍ◌̴ᅡ; ᄍ◌̴ᅡ; ᄍ◌̴ᅡ; ᄍ◌̴ᅡ; ᄍ◌̴ᅡ; ) HANGUL CHOSEONG SSANGCIEUC, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG A 110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E; # (ᄍ◌̴ᅮ; ᄍ◌̴ᅮ; ᄍ◌̴ᅮ; ᄍ◌̴ᅮ; ᄍ◌̴ᅮ; ) HANGUL CHOSEONG SSANGCIEUC, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG U 110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166; # (ᄎ◌̴ᅦ; ᄎ◌̴ᅦ; ᄎ◌̴ᅦ; ᄎ◌̴ᅦ; ᄎ◌̴ᅦ; ) HANGUL CHOSEONG CHIEUCH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG E 110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173; # (ᄎ◌̴ᅳ; ᄎ◌̴ᅳ; ᄎ◌̴ᅳ; ᄎ◌̴ᅳ; ᄎ◌̴ᅳ; ) HANGUL CHOSEONG CHIEUCH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG EU 110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B; # (ᄏ◌̴ᅫ; ᄏ◌̴ᅫ; ᄏ◌̴ᅫ; ᄏ◌̴ᅫ; ᄏ◌̴ᅫ; ) HANGUL CHOSEONG KHIEUKH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WAE 1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163; # (ᄐ◌̴ᅣ; ᄐ◌̴ᅣ; ᄐ◌̴ᅣ; ᄐ◌̴ᅣ; ᄐ◌̴ᅣ; ) HANGUL CHOSEONG THIEUTH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YA 1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170; # (ᄐ◌̴ᅰ; ᄐ◌̴ᅰ; ᄐ◌̴ᅰ; ᄐ◌̴ᅰ; ᄐ◌̴ᅰ; ) HANGUL CHOSEONG THIEUTH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG WE 1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168; # (ᄑ◌̴ᅨ; ᄑ◌̴ᅨ; ᄑ◌̴ᅨ; ᄑ◌̴ᅨ; ᄑ◌̴ᅨ; ) HANGUL CHOSEONG PHIEUPH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YE 1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175; # (ᄑ◌̴ᅵ; ᄑ◌̴ᅵ; ᄑ◌̴ᅵ; ᄑ◌̴ᅵ; ᄑ◌̴ᅵ; ) HANGUL CHOSEONG PHIEUPH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG I 1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D; # (ᄒ◌̴ᅭ; ᄒ◌̴ᅭ; ᄒ◌̴ᅭ; ᄒ◌̴ᅭ; ᄒ◌̴ᅭ; ) HANGUL CHOSEONG HIEUH, COMBINING TILDE OVERLAY, HANGUL JUNGSEONG YO 1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35; # (ᬅ◌̴ᬵ; ᬅ◌̴ᬵ; ᬅ◌̴ᬵ; ᬅ◌̴ᬵ; ᬅ◌̴ᬵ; ) BALINESE LETTER AKARA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35; # (ᬇ◌̴ᬵ; ᬇ◌̴ᬵ; ᬇ◌̴ᬵ; ᬇ◌̴ᬵ; ᬇ◌̴ᬵ; ) BALINESE LETTER IKARA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35; # (ᬉ◌̴ᬵ; ᬉ◌̴ᬵ; ᬉ◌̴ᬵ; ᬉ◌̴ᬵ; ᬉ◌̴ᬵ; ) BALINESE LETTER UKARA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35; # (ᬋ◌̴ᬵ; ᬋ◌̴ᬵ; ᬋ◌̴ᬵ; ᬋ◌̴ᬵ; ᬋ◌̴ᬵ; ) BALINESE LETTER RA REPA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35; # (ᬍ◌̴ᬵ; ᬍ◌̴ᬵ; ᬍ◌̴ᬵ; ᬍ◌̴ᬵ; ᬍ◌̴ᬵ; ) BALINESE LETTER LA LENGA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35; # (ᬑ◌̴ᬵ; ᬑ◌̴ᬵ; ᬑ◌̴ᬵ; ᬑ◌̴ᬵ; ᬑ◌̴ᬵ; ) BALINESE LETTER OKARA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35; # (◌ᬺ◌̴ᬵ; ◌ᬺ◌̴ᬵ; ◌ᬺ◌̴ᬵ; ◌ᬺ◌̴ᬵ; ◌ᬺ◌̴ᬵ; ) BALINESE VOWEL SIGN RA REPA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35; # (◌ᬼ◌̴ᬵ; ◌ᬼ◌̴ᬵ; ◌ᬼ◌̴ᬵ; ◌ᬼ◌̴ᬵ; ◌ᬼ◌̴ᬵ; ) BALINESE VOWEL SIGN LA LENGA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35; # (ᬾ◌̴ᬵ; ᬾ◌̴ᬵ; ᬾ◌̴ᬵ; ᬾ◌̴ᬵ; ᬾ◌̴ᬵ; ) BALINESE VOWEL SIGN TALING, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35; # (ᬿ◌̴ᬵ; ᬿ◌̴ᬵ; ᬿ◌̴ᬵ; ᬿ◌̴ᬵ; ᬿ◌̴ᬵ; ) BALINESE VOWEL SIGN TALING REPA, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG 1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35; # (◌ᭂ◌̴ᬵ; ◌ᭂ◌̴ᬵ; ◌ᭂ◌̴ᬵ; ◌ᭂ◌̴ᬵ; ◌ᭂ◌̴ᬵ; ) BALINESE VOWEL SIGN PEPET, COMBINING TILDE OVERLAY, BALINESE VOWEL SIGN TEDUNG AC54 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE; # (걔◌̴ᆮ; 걔◌̴ᆮ; 걔◌̴ᆮ; 걔◌̴ᆮ; 걔◌̴ᆮ; ) HANGUL SYLLABLE GYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT ACA8 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5; # (겨◌̴ᆵ; 겨◌̴ᆵ; 겨◌̴ᆵ; 겨◌̴ᆵ; 겨◌̴ᆵ; ) HANGUL SYLLABLE GYEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH ACFC 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC; # (과◌̴ᆼ; 과◌̴ᆼ; 과◌̴ᆼ; 과◌̴ᆼ; 과◌̴ᆼ; ) HANGUL SYLLABLE GWA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG ADC0 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE; # (귀◌̴ᆮ; 귀◌̴ᆮ; 귀◌̴ᆮ; 귀◌̴ᆮ; 귀◌̴ᆮ; ) HANGUL SYLLABLE GWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT AE14 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5; # (긔◌̴ᆵ; 긔◌̴ᆵ; 긔◌̴ᆵ; 긔◌̴ᆵ; 긔◌̴ᆵ; ) HANGUL SYLLABLE GYI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH AE68 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC; # (깨◌̴ᆼ; 깨◌̴ᆼ; 깨◌̴ᆼ; 깨◌̴ᆼ; 깨◌̴ᆼ; ) HANGUL SYLLABLE GGAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG AF2C 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE; # (꼬◌̴ᆮ; 꼬◌̴ᆮ; 꼬◌̴ᆮ; 꼬◌̴ᆮ; 꼬◌̴ᆮ; ) HANGUL SYLLABLE GGO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT AF80 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5; # (꾀◌̴ᆵ; 꾀◌̴ᆵ; 꾀◌̴ᆵ; 꾀◌̴ᆵ; 꾀◌̴ᆵ; ) HANGUL SYLLABLE GGOE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH AFD4 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC; # (꿔◌̴ᆼ; 꿔◌̴ᆼ; 꿔◌̴ᆼ; 꿔◌̴ᆼ; 꿔◌̴ᆼ; ) HANGUL SYLLABLE GGWEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B098 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE; # (나◌̴ᆮ; 나◌̴ᆮ; 나◌̴ᆮ; 나◌̴ᆮ; 나◌̴ᆮ; ) HANGUL SYLLABLE NA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B0EC 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5; # (냬◌̴ᆵ; 냬◌̴ᆵ; 냬◌̴ᆵ; 냬◌̴ᆵ; 냬◌̴ᆵ; ) HANGUL SYLLABLE NYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B140 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC; # (녀◌̴ᆼ; 녀◌̴ᆼ; 녀◌̴ᆼ; 녀◌̴ᆼ; 녀◌̴ᆼ; ) HANGUL SYLLABLE NYEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B204 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE; # (누◌̴ᆮ; 누◌̴ᆮ; 누◌̴ᆮ; 누◌̴ᆮ; 누◌̴ᆮ; ) HANGUL SYLLABLE NU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B258 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5; # (뉘◌̴ᆵ; 뉘◌̴ᆵ; 뉘◌̴ᆵ; 뉘◌̴ᆵ; 뉘◌̴ᆵ; ) HANGUL SYLLABLE NWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B2AC 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC; # (늬◌̴ᆼ; 늬◌̴ᆼ; 늬◌̴ᆼ; 늬◌̴ᆼ; 늬◌̴ᆼ; ) HANGUL SYLLABLE NYI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B370 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE; # (데◌̴ᆮ; 데◌̴ᆮ; 데◌̴ᆮ; 데◌̴ᆮ; 데◌̴ᆮ; ) HANGUL SYLLABLE DE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B3C4 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5; # (도◌̴ᆵ; 도◌̴ᆵ; 도◌̴ᆵ; 도◌̴ᆵ; 도◌̴ᆵ; ) HANGUL SYLLABLE DO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B418 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC; # (되◌̴ᆼ; 되◌̴ᆼ; 되◌̴ᆼ; 되◌̴ᆼ; 되◌̴ᆼ; ) HANGUL SYLLABLE DOE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B4DC 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE; # (드◌̴ᆮ; 드◌̴ᆮ; 드◌̴ᆮ; 드◌̴ᆮ; 드◌̴ᆮ; ) HANGUL SYLLABLE DEU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B530 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5; # (따◌̴ᆵ; 따◌̴ᆵ; 따◌̴ᆵ; 따◌̴ᆵ; 따◌̴ᆵ; ) HANGUL SYLLABLE DDA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B584 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC; # (떄◌̴ᆼ; 떄◌̴ᆼ; 떄◌̴ᆼ; 떄◌̴ᆼ; 떄◌̴ᆼ; ) HANGUL SYLLABLE DDYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B648 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE; # (뙈◌̴ᆮ; 뙈◌̴ᆮ; 뙈◌̴ᆮ; 뙈◌̴ᆮ; 뙈◌̴ᆮ; ) HANGUL SYLLABLE DDWAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B69C 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5; # (뚜◌̴ᆵ; 뚜◌̴ᆵ; 뚜◌̴ᆵ; 뚜◌̴ᆵ; 뚜◌̴ᆵ; ) HANGUL SYLLABLE DDU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B6F0 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC; # (뛰◌̴ᆼ; 뛰◌̴ᆼ; 뛰◌̴ᆼ; 뛰◌̴ᆼ; 뛰◌̴ᆼ; ) HANGUL SYLLABLE DDWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B7B4 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE; # (랴◌̴ᆮ; 랴◌̴ᆮ; 랴◌̴ᆮ; 랴◌̴ᆮ; 랴◌̴ᆮ; ) HANGUL SYLLABLE RYA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B808 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5; # (레◌̴ᆵ; 레◌̴ᆵ; 레◌̴ᆵ; 레◌̴ᆵ; 레◌̴ᆵ; ) HANGUL SYLLABLE RE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B85C 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC; # (로◌̴ᆼ; 로◌̴ᆼ; 로◌̴ᆼ; 로◌̴ᆼ; 로◌̴ᆼ; ) HANGUL SYLLABLE RO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG B920 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE; # (뤠◌̴ᆮ; 뤠◌̴ᆮ; 뤠◌̴ᆮ; 뤠◌̴ᆮ; 뤠◌̴ᆮ; ) HANGUL SYLLABLE RWE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT B974 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5; # (르◌̴ᆵ; 르◌̴ᆵ; 르◌̴ᆵ; 르◌̴ᆵ; 르◌̴ᆵ; ) HANGUL SYLLABLE REU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH B9C8 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC; # (마◌̴ᆼ; 마◌̴ᆼ; 마◌̴ᆼ; 마◌̴ᆼ; 마◌̴ᆼ; ) HANGUL SYLLABLE MA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG BA8C 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE; # (몌◌̴ᆮ; 몌◌̴ᆮ; 몌◌̴ᆮ; 몌◌̴ᆮ; 몌◌̴ᆮ; ) HANGUL SYLLABLE MYE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT BAE0 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5; # (뫠◌̴ᆵ; 뫠◌̴ᆵ; 뫠◌̴ᆵ; 뫠◌̴ᆵ; 뫠◌̴ᆵ; ) HANGUL SYLLABLE MWAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH BB34 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC; # (무◌̴ᆼ; 무◌̴ᆼ; 무◌̴ᆼ; 무◌̴ᆼ; 무◌̴ᆼ; ) HANGUL SYLLABLE MU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG BBF8 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE; # (미◌̴ᆮ; 미◌̴ᆮ; 미◌̴ᆮ; 미◌̴ᆮ; 미◌̴ᆮ; ) HANGUL SYLLABLE MI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT BC4C 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5; # (뱌◌̴ᆵ; 뱌◌̴ᆵ; 뱌◌̴ᆵ; 뱌◌̴ᆵ; 뱌◌̴ᆵ; ) HANGUL SYLLABLE BYA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH BCA0 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC; # (베◌̴ᆼ; 베◌̴ᆼ; 베◌̴ᆼ; 베◌̴ᆼ; 베◌̴ᆼ; ) HANGUL SYLLABLE BE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG BD64 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE; # (뵤◌̴ᆮ; 뵤◌̴ᆮ; 뵤◌̴ᆮ; 뵤◌̴ᆮ; 뵤◌̴ᆮ; ) HANGUL SYLLABLE BYO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT BDB8 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5; # (붸◌̴ᆵ; 붸◌̴ᆵ; 붸◌̴ᆵ; 붸◌̴ᆵ; 붸◌̴ᆵ; ) HANGUL SYLLABLE BWE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH BE0C 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC; # (브◌̴ᆼ; 브◌̴ᆼ; 브◌̴ᆼ; 브◌̴ᆼ; 브◌̴ᆼ; ) HANGUL SYLLABLE BEU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG BED0 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE; # (뻐◌̴ᆮ; 뻐◌̴ᆮ; 뻐◌̴ᆮ; 뻐◌̴ᆮ; 뻐◌̴ᆮ; ) HANGUL SYLLABLE BBEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT BF24 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5; # (뼤◌̴ᆵ; 뼤◌̴ᆵ; 뼤◌̴ᆵ; 뼤◌̴ᆵ; 뼤◌̴ᆵ; ) HANGUL SYLLABLE BBYE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH BF78 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC; # (뽸◌̴ᆼ; 뽸◌̴ᆼ; 뽸◌̴ᆼ; 뽸◌̴ᆼ; 뽸◌̴ᆼ; ) HANGUL SYLLABLE BBWAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C03C 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE; # (쀼◌̴ᆮ; 쀼◌̴ᆮ; 쀼◌̴ᆮ; 쀼◌̴ᆮ; 쀼◌̴ᆮ; ) HANGUL SYLLABLE BBYU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C090 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5; # (삐◌̴ᆵ; 삐◌̴ᆵ; 삐◌̴ᆵ; 삐◌̴ᆵ; 삐◌̴ᆵ; ) HANGUL SYLLABLE BBI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C0E4 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC; # (샤◌̴ᆼ; 샤◌̴ᆼ; 샤◌̴ᆼ; 샤◌̴ᆼ; 샤◌̴ᆼ; ) HANGUL SYLLABLE SYA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C1A8 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE; # (솨◌̴ᆮ; 솨◌̴ᆮ; 솨◌̴ᆮ; 솨◌̴ᆮ; 솨◌̴ᆮ; ) HANGUL SYLLABLE SWA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C1FC 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5; # (쇼◌̴ᆵ; 쇼◌̴ᆵ; 쇼◌̴ᆵ; 쇼◌̴ᆵ; 쇼◌̴ᆵ; ) HANGUL SYLLABLE SYO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C250 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC; # (쉐◌̴ᆼ; 쉐◌̴ᆼ; 쉐◌̴ᆼ; 쉐◌̴ᆼ; 쉐◌̴ᆼ; ) HANGUL SYLLABLE SWE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C314 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE; # (쌔◌̴ᆮ; 쌔◌̴ᆮ; 쌔◌̴ᆮ; 쌔◌̴ᆮ; 쌔◌̴ᆮ; ) HANGUL SYLLABLE SSAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C368 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5; # (써◌̴ᆵ; 써◌̴ᆵ; 써◌̴ᆵ; 써◌̴ᆵ; 써◌̴ᆵ; ) HANGUL SYLLABLE SSEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C3BC 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC; # (쎼◌̴ᆼ; 쎼◌̴ᆼ; 쎼◌̴ᆼ; 쎼◌̴ᆼ; 쎼◌̴ᆼ; ) HANGUL SYLLABLE SSYE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C480 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE; # (쒀◌̴ᆮ; 쒀◌̴ᆮ; 쒀◌̴ᆮ; 쒀◌̴ᆮ; 쒀◌̴ᆮ; ) HANGUL SYLLABLE SSWEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C4D4 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5; # (쓔◌̴ᆵ; 쓔◌̴ᆵ; 쓔◌̴ᆵ; 쓔◌̴ᆵ; 쓔◌̴ᆵ; ) HANGUL SYLLABLE SSYU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C528 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC; # (씨◌̴ᆼ; 씨◌̴ᆼ; 씨◌̴ᆼ; 씨◌̴ᆼ; 씨◌̴ᆼ; ) HANGUL SYLLABLE SSI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C5EC 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE; # (여◌̴ᆮ; 여◌̴ᆮ; 여◌̴ᆮ; 여◌̴ᆮ; 여◌̴ᆮ; ) HANGUL SYLLABLE YEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C640 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5; # (와◌̴ᆵ; 와◌̴ᆵ; 와◌̴ᆵ; 와◌̴ᆵ; 와◌̴ᆵ; ) HANGUL SYLLABLE WA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C694 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC; # (요◌̴ᆼ; 요◌̴ᆼ; 요◌̴ᆼ; 요◌̴ᆼ; 요◌̴ᆼ; ) HANGUL SYLLABLE YO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C758 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE; # (의◌̴ᆮ; 의◌̴ᆮ; 의◌̴ᆮ; 의◌̴ᆮ; 의◌̴ᆮ; ) HANGUL SYLLABLE YI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C7AC 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5; # (재◌̴ᆵ; 재◌̴ᆵ; 재◌̴ᆵ; 재◌̴ᆵ; 재◌̴ᆵ; ) HANGUL SYLLABLE JAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C800 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC; # (저◌̴ᆼ; 저◌̴ᆼ; 저◌̴ᆼ; 저◌̴ᆼ; 저◌̴ᆼ; ) HANGUL SYLLABLE JEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG C8C4 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE; # (죄◌̴ᆮ; 죄◌̴ᆮ; 죄◌̴ᆮ; 죄◌̴ᆮ; 죄◌̴ᆮ; ) HANGUL SYLLABLE JOE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT C918 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5; # (줘◌̴ᆵ; 줘◌̴ᆵ; 줘◌̴ᆵ; 줘◌̴ᆵ; 줘◌̴ᆵ; ) HANGUL SYLLABLE JWEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH C96C 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC; # (쥬◌̴ᆼ; 쥬◌̴ᆼ; 쥬◌̴ᆼ; 쥬◌̴ᆼ; 쥬◌̴ᆼ; ) HANGUL SYLLABLE JYU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG CA30 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE; # (쨰◌̴ᆮ; 쨰◌̴ᆮ; 쨰◌̴ᆮ; 쨰◌̴ᆮ; 쨰◌̴ᆮ; ) HANGUL SYLLABLE JJYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT CA84 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5; # (쪄◌̴ᆵ; 쪄◌̴ᆵ; 쪄◌̴ᆵ; 쪄◌̴ᆵ; 쪄◌̴ᆵ; ) HANGUL SYLLABLE JJYEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH CAD8 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC; # (쫘◌̴ᆼ; 쫘◌̴ᆼ; 쫘◌̴ᆼ; 쫘◌̴ᆼ; 쫘◌̴ᆼ; ) HANGUL SYLLABLE JJWA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG CB9C 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE; # (쮜◌̴ᆮ; 쮜◌̴ᆮ; 쮜◌̴ᆮ; 쮜◌̴ᆮ; 쮜◌̴ᆮ; ) HANGUL SYLLABLE JJWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT CBF0 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5; # (쯰◌̴ᆵ; 쯰◌̴ᆵ; 쯰◌̴ᆵ; 쯰◌̴ᆵ; 쯰◌̴ᆵ; ) HANGUL SYLLABLE JJYI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH CC44 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC; # (채◌̴ᆼ; 채◌̴ᆼ; 채◌̴ᆼ; 채◌̴ᆼ; 채◌̴ᆼ; ) HANGUL SYLLABLE CAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG CD08 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE; # (초◌̴ᆮ; 초◌̴ᆮ; 초◌̴ᆮ; 초◌̴ᆮ; 초◌̴ᆮ; ) HANGUL SYLLABLE CO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT CD5C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5; # (최◌̴ᆵ; 최◌̴ᆵ; 최◌̴ᆵ; 최◌̴ᆵ; 최◌̴ᆵ; ) HANGUL SYLLABLE COE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH CDB0 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC; # (춰◌̴ᆼ; 춰◌̴ᆼ; 춰◌̴ᆼ; 춰◌̴ᆼ; 춰◌̴ᆼ; ) HANGUL SYLLABLE CWEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG CE74 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE; # (카◌̴ᆮ; 카◌̴ᆮ; 카◌̴ᆮ; 카◌̴ᆮ; 카◌̴ᆮ; ) HANGUL SYLLABLE KA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT CEC8 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5; # (컈◌̴ᆵ; 컈◌̴ᆵ; 컈◌̴ᆵ; 컈◌̴ᆵ; 컈◌̴ᆵ; ) HANGUL SYLLABLE KYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH CF1C 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC; # (켜◌̴ᆼ; 켜◌̴ᆼ; 켜◌̴ᆼ; 켜◌̴ᆼ; 켜◌̴ᆼ; ) HANGUL SYLLABLE KYEO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG CFE0 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE; # (쿠◌̴ᆮ; 쿠◌̴ᆮ; 쿠◌̴ᆮ; 쿠◌̴ᆮ; 쿠◌̴ᆮ; ) HANGUL SYLLABLE KU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D034 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5; # (퀴◌̴ᆵ; 퀴◌̴ᆵ; 퀴◌̴ᆵ; 퀴◌̴ᆵ; 퀴◌̴ᆵ; ) HANGUL SYLLABLE KWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH D088 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC; # (킈◌̴ᆼ; 킈◌̴ᆼ; 킈◌̴ᆼ; 킈◌̴ᆼ; 킈◌̴ᆼ; ) HANGUL SYLLABLE KYI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG D14C 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE; # (테◌̴ᆮ; 테◌̴ᆮ; 테◌̴ᆮ; 테◌̴ᆮ; 테◌̴ᆮ; ) HANGUL SYLLABLE TE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D1A0 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5; # (토◌̴ᆵ; 토◌̴ᆵ; 토◌̴ᆵ; 토◌̴ᆵ; 토◌̴ᆵ; ) HANGUL SYLLABLE TO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH D1F4 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC; # (퇴◌̴ᆼ; 퇴◌̴ᆼ; 퇴◌̴ᆼ; 퇴◌̴ᆼ; 퇴◌̴ᆼ; ) HANGUL SYLLABLE TOE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG D2B8 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE; # (트◌̴ᆮ; 트◌̴ᆮ; 트◌̴ᆮ; 트◌̴ᆮ; 트◌̴ᆮ; ) HANGUL SYLLABLE TEU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D30C 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5; # (파◌̴ᆵ; 파◌̴ᆵ; 파◌̴ᆵ; 파◌̴ᆵ; 파◌̴ᆵ; ) HANGUL SYLLABLE PA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH D360 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC; # (퍠◌̴ᆼ; 퍠◌̴ᆼ; 퍠◌̴ᆼ; 퍠◌̴ᆼ; 퍠◌̴ᆼ; ) HANGUL SYLLABLE PYAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG D424 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE; # (퐤◌̴ᆮ; 퐤◌̴ᆮ; 퐤◌̴ᆮ; 퐤◌̴ᆮ; 퐤◌̴ᆮ; ) HANGUL SYLLABLE PWAE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D478 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5; # (푸◌̴ᆵ; 푸◌̴ᆵ; 푸◌̴ᆵ; 푸◌̴ᆵ; 푸◌̴ᆵ; ) HANGUL SYLLABLE PU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH D4CC 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC; # (퓌◌̴ᆼ; 퓌◌̴ᆼ; 퓌◌̴ᆼ; 퓌◌̴ᆼ; 퓌◌̴ᆼ; ) HANGUL SYLLABLE PWI, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG D590 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE; # (햐◌̴ᆮ; 햐◌̴ᆮ; 햐◌̴ᆮ; 햐◌̴ᆮ; 햐◌̴ᆮ; ) HANGUL SYLLABLE HYA, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D5E4 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5; # (헤◌̴ᆵ; 헤◌̴ᆵ; 헤◌̴ᆵ; 헤◌̴ᆵ; 헤◌̴ᆵ; ) HANGUL SYLLABLE HE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH D638 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC; # (호◌̴ᆼ; 호◌̴ᆼ; 호◌̴ᆼ; 호◌̴ᆼ; 호◌̴ᆼ; ) HANGUL SYLLABLE HO, COMBINING TILDE OVERLAY, HANGUL JONGSEONG IEUNG D6FC 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE; # (훼◌̴ᆮ; 훼◌̴ᆮ; 훼◌̴ᆮ; 훼◌̴ᆮ; 훼◌̴ᆮ; ) HANGUL SYLLABLE HWE, COMBINING TILDE OVERLAY, HANGUL JONGSEONG TIKEUT D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5; # (흐◌̴ᆵ; 흐◌̴ᆵ; 흐◌̴ᆵ; 흐◌̴ᆵ; 흐◌̴ᆵ; ) HANGUL SYLLABLE HEU, COMBINING TILDE OVERLAY, HANGUL JONGSEONG RIEUL-PHIEUPH 11131 0334 11127;11131 0334 11127;11131 0334 11127;11131 0334 11127;11131 0334 11127; # (◌𑄱◌̴◌𑄧; ◌𑄱◌̴◌𑄧; ◌𑄱◌̴◌𑄧; ◌𑄱◌̴◌𑄧; ◌𑄱◌̴◌𑄧; ) CHAKMA O MARK, COMBINING TILDE OVERLAY, CHAKMA VOWEL SIGN A 11132 0334 11127;11132 0334 11127;11132 0334 11127;11132 0334 11127;11132 0334 11127; # (◌𑄲◌̴◌𑄧; ◌𑄲◌̴◌𑄧; ◌𑄲◌̴◌𑄧; ◌𑄲◌̴◌𑄧; ◌𑄲◌̴◌𑄧; ) CHAKMA AU MARK, COMBINING TILDE OVERLAY, CHAKMA VOWEL SIGN A 11347 0334 1133E;11347 0334 1133E;11347 0334 1133E;11347 0334 1133E;11347 0334 1133E; # (𑍇◌̴𑌾; 𑍇◌̴𑌾; 𑍇◌̴𑌾; 𑍇◌̴𑌾; 𑍇◌̴𑌾; ) GRANTHA VOWEL SIGN EE, COMBINING TILDE OVERLAY, GRANTHA VOWEL SIGN AA 11347 0334 11357;11347 0334 11357;11347 0334 11357;11347 0334 11357;11347 0334 11357; # (𑍇◌̴𑍗; 𑍇◌̴𑍗; 𑍇◌̴𑍗; 𑍇◌̴𑍗; 𑍇◌̴𑍗; ) GRANTHA VOWEL SIGN EE, COMBINING TILDE OVERLAY, GRANTHA AU LENGTH MARK 114B9 0334 114B0;114B9 0334 114B0;114B9 0334 114B0;114B9 0334 114B0;114B9 0334 114B0; # (𑒹◌̴𑒰; 𑒹◌̴𑒰; 𑒹◌̴𑒰; 𑒹◌̴𑒰; 𑒹◌̴𑒰; ) TIRHUTA VOWEL SIGN E, COMBINING TILDE OVERLAY, TIRHUTA VOWEL SIGN AA 114B9 0334 114BA;114B9 0334 114BA;114B9 0334 114BA;114B9 0334 114BA;114B9 0334 114BA; # (𑒹◌̴◌𑒺; 𑒹◌̴◌𑒺; 𑒹◌̴◌𑒺; 𑒹◌̴◌𑒺; 𑒹◌̴◌𑒺; ) TIRHUTA VOWEL SIGN E, COMBINING TILDE OVERLAY, TIRHUTA VOWEL SIGN SHORT E 114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD; # (𑒹◌̴𑒽; 𑒹◌̴𑒽; 𑒹◌̴𑒽; 𑒹◌̴𑒽; 𑒹◌̴𑒽; ) TIRHUTA VOWEL SIGN E, COMBINING TILDE OVERLAY, TIRHUTA VOWEL SIGN SHORT O 115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF; # (𑖸◌̴𑖯; 𑖸◌̴𑖯; 𑖸◌̴𑖯; 𑖸◌̴𑖯; 𑖸◌̴𑖯; ) SIDDHAM VOWEL SIGN E, COMBINING TILDE OVERLAY, SIDDHAM VOWEL SIGN AA 115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF; # (𑖹◌̴𑖯; 𑖹◌̴𑖯; 𑖹◌̴𑖯; 𑖹◌̴𑖯; 𑖹◌̴𑖯; ) SIDDHAM VOWEL SIGN AI, COMBINING TILDE OVERLAY, SIDDHAM VOWEL SIGN AA # # EOF �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-canonical-decomposition.c��������������������������������0000664�0000000�0000000�00000010242�14110572173�0025051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" int main () { ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int ret; /* SPACE */ ret = uc_canonical_decomposition (0x0020, decomposed); ASSERT (ret == -1); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ ret = uc_canonical_decomposition (0x00C4, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x0041); ASSERT (decomposed[1] == 0x0308); /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ ret = uc_canonical_decomposition (0x01DE, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x00C4); ASSERT (decomposed[1] == 0x0304); /* GREEK DIALYTIKA AND PERISPOMENI */ ret = uc_canonical_decomposition (0x1FC1, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x00A8); ASSERT (decomposed[1] == 0x0342); /* SCRIPT SMALL L */ ret = uc_canonical_decomposition (0x2113, decomposed); ASSERT (ret == -1); /* NO-BREAK SPACE */ ret = uc_canonical_decomposition (0x00A0, decomposed); ASSERT (ret == -1); /* ARABIC LETTER VEH INITIAL FORM */ ret = uc_canonical_decomposition (0xFB6C, decomposed); ASSERT (ret == -1); /* ARABIC LETTER VEH MEDIAL FORM */ ret = uc_canonical_decomposition (0xFB6D, decomposed); ASSERT (ret == -1); /* ARABIC LETTER VEH FINAL FORM */ ret = uc_canonical_decomposition (0xFB6B, decomposed); ASSERT (ret == -1); /* ARABIC LETTER VEH ISOLATED FORM */ ret = uc_canonical_decomposition (0xFB6A, decomposed); ASSERT (ret == -1); /* CIRCLED NUMBER FIFTEEN */ ret = uc_canonical_decomposition (0x246E, decomposed); ASSERT (ret == -1); /* TRADE MARK SIGN */ ret = uc_canonical_decomposition (0x2122, decomposed); ASSERT (ret == -1); /* LATIN SUBSCRIPT SMALL LETTER I */ ret = uc_canonical_decomposition (0x1D62, decomposed); ASSERT (ret == -1); /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ ret = uc_canonical_decomposition (0xFE35, decomposed); ASSERT (ret == -1); /* FULLWIDTH LATIN CAPITAL LETTER A */ ret = uc_canonical_decomposition (0xFF21, decomposed); ASSERT (ret == -1); /* HALFWIDTH IDEOGRAPHIC COMMA */ ret = uc_canonical_decomposition (0xFF64, decomposed); ASSERT (ret == -1); /* SMALL IDEOGRAPHIC COMMA */ ret = uc_canonical_decomposition (0xFE51, decomposed); ASSERT (ret == -1); /* SQUARE MHZ */ ret = uc_canonical_decomposition (0x3392, decomposed); ASSERT (ret == -1); /* VULGAR FRACTION THREE EIGHTHS */ ret = uc_canonical_decomposition (0x215C, decomposed); ASSERT (ret == -1); /* MICRO SIGN */ ret = uc_canonical_decomposition (0x00B5, decomposed); ASSERT (ret == -1); /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ ret = uc_canonical_decomposition (0xFDFA, decomposed); ASSERT (ret == -1); /* HANGUL SYLLABLE GEUL */ ret = uc_canonical_decomposition (0xAE00, decomposed); /* See the clarification at <https://www.unicode.org/versions/Unicode5.1.0/>, section "Clarification of Hangul Jamo Handling". */ #if 1 ASSERT (ret == 2); ASSERT (decomposed[0] == 0xADF8); ASSERT (decomposed[1] == 0x11AF); #else ASSERT (ret == 3); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); ASSERT (decomposed[2] == 0x11AF); #endif /* HANGUL SYLLABLE GEU */ ret = uc_canonical_decomposition (0xADF8, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-compat-decomposition.c�����������������������������������0000664�0000000�0000000�00000013041�14110572173�0024405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm/decompose-internal.h" #include "uninorm.h" #include "macros.h" int main () { ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int ret; /* SPACE */ ret = uc_compat_decomposition (0x0020, decomposed); ASSERT (ret == -1); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ ret = uc_compat_decomposition (0x00C4, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x0041); ASSERT (decomposed[1] == 0x0308); /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ ret = uc_compat_decomposition (0x01DE, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x00C4); ASSERT (decomposed[1] == 0x0304); /* GREEK DIALYTIKA AND PERISPOMENI */ ret = uc_compat_decomposition (0x1FC1, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x00A8); ASSERT (decomposed[1] == 0x0342); /* SCRIPT SMALL L */ ret = uc_compat_decomposition (0x2113, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x006C); /* NO-BREAK SPACE */ ret = uc_compat_decomposition (0x00A0, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x0020); /* ARABIC LETTER VEH INITIAL FORM */ ret = uc_compat_decomposition (0xFB6C, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH MEDIAL FORM */ ret = uc_compat_decomposition (0xFB6D, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH FINAL FORM */ ret = uc_compat_decomposition (0xFB6B, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH ISOLATED FORM */ ret = uc_compat_decomposition (0xFB6A, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x06A4); /* CIRCLED NUMBER FIFTEEN */ ret = uc_compat_decomposition (0x246E, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x0031); ASSERT (decomposed[1] == 0x0035); /* TRADE MARK SIGN */ ret = uc_compat_decomposition (0x2122, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x0054); ASSERT (decomposed[1] == 0x004D); /* LATIN SUBSCRIPT SMALL LETTER I */ ret = uc_compat_decomposition (0x1D62, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x0069); /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ ret = uc_compat_decomposition (0xFE35, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x0028); /* FULLWIDTH LATIN CAPITAL LETTER A */ ret = uc_compat_decomposition (0xFF21, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x0041); /* HALFWIDTH IDEOGRAPHIC COMMA */ ret = uc_compat_decomposition (0xFF64, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x3001); /* SMALL IDEOGRAPHIC COMMA */ ret = uc_compat_decomposition (0xFE51, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x3001); /* SQUARE MHZ */ ret = uc_compat_decomposition (0x3392, decomposed); ASSERT (ret == 3); ASSERT (decomposed[0] == 0x004D); ASSERT (decomposed[1] == 0x0048); ASSERT (decomposed[2] == 0x007A); /* VULGAR FRACTION THREE EIGHTHS */ ret = uc_compat_decomposition (0x215C, decomposed); ASSERT (ret == 3); ASSERT (decomposed[0] == 0x0033); ASSERT (decomposed[1] == 0x2044); ASSERT (decomposed[2] == 0x0038); /* MICRO SIGN */ ret = uc_compat_decomposition (0x00B5, decomposed); ASSERT (ret == 1); ASSERT (decomposed[0] == 0x03BC); /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ ret = uc_compat_decomposition (0xFDFA, decomposed); ASSERT (ret == 18); ASSERT (decomposed[0] == 0x0635); ASSERT (decomposed[1] == 0x0644); ASSERT (decomposed[2] == 0x0649); ASSERT (decomposed[3] == 0x0020); ASSERT (decomposed[4] == 0x0627); ASSERT (decomposed[5] == 0x0644); ASSERT (decomposed[6] == 0x0644); ASSERT (decomposed[7] == 0x0647); ASSERT (decomposed[8] == 0x0020); ASSERT (decomposed[9] == 0x0639); ASSERT (decomposed[10] == 0x0644); ASSERT (decomposed[11] == 0x064A); ASSERT (decomposed[12] == 0x0647); ASSERT (decomposed[13] == 0x0020); ASSERT (decomposed[14] == 0x0648); ASSERT (decomposed[15] == 0x0633); ASSERT (decomposed[16] == 0x0644); ASSERT (decomposed[17] == 0x0645); /* HANGUL SYLLABLE GEUL */ ret = uc_compat_decomposition (0xAE00, decomposed); /* See the clarification at <https://www.unicode.org/versions/Unicode5.1.0/>, section "Clarification of Hangul Jamo Handling". */ #if 1 ASSERT (ret == 2); ASSERT (decomposed[0] == 0xADF8); ASSERT (decomposed[1] == 0x11AF); #else ASSERT (ret == 3); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); ASSERT (decomposed[2] == 0x11AF); #endif /* HANGUL SYLLABLE GEU */ ret = uc_compat_decomposition (0xADF8, decomposed); ASSERT (ret == 2); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-composition.c��������������������������������������������0000664�0000000�0000000�00000003154�14110572173�0022617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical composition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" int main () { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ ASSERT (uc_composition (0x0041, 0x0308) == 0x00C4); /* LATIN CAPITAL LETTER A WITH RING ABOVE */ ASSERT (uc_composition (0x0041, 0x030A) == 0x00C5); /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ ASSERT (uc_composition (0x00C4, 0x0304) == 0x01DE); /* GREEK DIALYTIKA AND PERISPOMENI */ ASSERT (uc_composition (0x00A8, 0x0342) == 0x1FC1); /* CIRCLED NUMBER FIFTEEN */ ASSERT (uc_composition (0x0031, 0x0035) == 0); /* TRADE MARK SIGN */ ASSERT (uc_composition (0x0054, 0x004D) == 0); /* HANGUL SYLLABLE GEU */ ASSERT (uc_composition (0x1100, 0x1173) == 0xADF8); /* HANGUL SYLLABLE GEUL */ ASSERT (uc_composition (0xADF8, 0x11AF) == 0xAE00); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-decomposing-form.c���������������������������������������0000664�0000000�0000000�00000002235�14110572173�0023523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of decomposing variant of a normalization form. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" int main () { ASSERT (uninorm_decomposing_form (UNINORM_NFC) == UNINORM_NFD); ASSERT (uninorm_decomposing_form (UNINORM_NFD) == UNINORM_NFD); ASSERT (uninorm_decomposing_form (UNINORM_NFKC) == UNINORM_NFKD); ASSERT (uninorm_decomposing_form (UNINORM_NFKD) == UNINORM_NFKD); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-decomposition.c������������������������������������������0000664�0000000�0000000�00000014455�14110572173�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of decomposition of Unicode characters. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" int main () { ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; int tag; int ret; /* SPACE */ ret = uc_decomposition (0x0020, &tag, decomposed); ASSERT (ret == -1); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ ret = uc_decomposition (0x00C4, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0x0041); ASSERT (decomposed[1] == 0x0308); /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ ret = uc_decomposition (0x01DE, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0x00C4); ASSERT (decomposed[1] == 0x0304); /* GREEK DIALYTIKA AND PERISPOMENI */ ret = uc_decomposition (0x1FC1, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0x00A8); ASSERT (decomposed[1] == 0x0342); /* SCRIPT SMALL L */ ret = uc_decomposition (0x2113, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_FONT); ASSERT (decomposed[0] == 0x006C); /* NO-BREAK SPACE */ ret = uc_decomposition (0x00A0, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_NOBREAK); ASSERT (decomposed[0] == 0x0020); /* ARABIC LETTER VEH INITIAL FORM */ ret = uc_decomposition (0xFB6C, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_INITIAL); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH MEDIAL FORM */ ret = uc_decomposition (0xFB6D, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_MEDIAL); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH FINAL FORM */ ret = uc_decomposition (0xFB6B, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_FINAL); ASSERT (decomposed[0] == 0x06A4); /* ARABIC LETTER VEH ISOLATED FORM */ ret = uc_decomposition (0xFB6A, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_ISOLATED); ASSERT (decomposed[0] == 0x06A4); /* CIRCLED NUMBER FIFTEEN */ ret = uc_decomposition (0x246E, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CIRCLE); ASSERT (decomposed[0] == 0x0031); ASSERT (decomposed[1] == 0x0035); /* TRADE MARK SIGN */ ret = uc_decomposition (0x2122, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_SUPER); ASSERT (decomposed[0] == 0x0054); ASSERT (decomposed[1] == 0x004D); /* LATIN SUBSCRIPT SMALL LETTER I */ ret = uc_decomposition (0x1D62, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_SUB); ASSERT (decomposed[0] == 0x0069); /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ ret = uc_decomposition (0xFE35, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_VERTICAL); ASSERT (decomposed[0] == 0x0028); /* FULLWIDTH LATIN CAPITAL LETTER A */ ret = uc_decomposition (0xFF21, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_WIDE); ASSERT (decomposed[0] == 0x0041); /* HALFWIDTH IDEOGRAPHIC COMMA */ ret = uc_decomposition (0xFF64, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_NARROW); ASSERT (decomposed[0] == 0x3001); /* SMALL IDEOGRAPHIC COMMA */ ret = uc_decomposition (0xFE51, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_SMALL); ASSERT (decomposed[0] == 0x3001); /* SQUARE MHZ */ ret = uc_decomposition (0x3392, &tag, decomposed); ASSERT (ret == 3); ASSERT (tag == UC_DECOMP_SQUARE); ASSERT (decomposed[0] == 0x004D); ASSERT (decomposed[1] == 0x0048); ASSERT (decomposed[2] == 0x007A); /* VULGAR FRACTION THREE EIGHTHS */ ret = uc_decomposition (0x215C, &tag, decomposed); ASSERT (ret == 3); ASSERT (tag == UC_DECOMP_FRACTION); ASSERT (decomposed[0] == 0x0033); ASSERT (decomposed[1] == 0x2044); ASSERT (decomposed[2] == 0x0038); /* MICRO SIGN */ ret = uc_decomposition (0x00B5, &tag, decomposed); ASSERT (ret == 1); ASSERT (tag == UC_DECOMP_COMPAT); ASSERT (decomposed[0] == 0x03BC); /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ ret = uc_decomposition (0xFDFA, &tag, decomposed); ASSERT (ret == 18); ASSERT (tag == UC_DECOMP_ISOLATED); ASSERT (decomposed[0] == 0x0635); ASSERT (decomposed[1] == 0x0644); ASSERT (decomposed[2] == 0x0649); ASSERT (decomposed[3] == 0x0020); ASSERT (decomposed[4] == 0x0627); ASSERT (decomposed[5] == 0x0644); ASSERT (decomposed[6] == 0x0644); ASSERT (decomposed[7] == 0x0647); ASSERT (decomposed[8] == 0x0020); ASSERT (decomposed[9] == 0x0639); ASSERT (decomposed[10] == 0x0644); ASSERT (decomposed[11] == 0x064A); ASSERT (decomposed[12] == 0x0647); ASSERT (decomposed[13] == 0x0020); ASSERT (decomposed[14] == 0x0648); ASSERT (decomposed[15] == 0x0633); ASSERT (decomposed[16] == 0x0644); ASSERT (decomposed[17] == 0x0645); /* HANGUL SYLLABLE GEUL */ ret = uc_decomposition (0xAE00, &tag, decomposed); /* See the clarification at <https://www.unicode.org/versions/Unicode5.1.0/>, section "Clarification of Hangul Jamo Handling". */ #if 1 ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0xADF8); ASSERT (decomposed[1] == 0x11AF); #else ASSERT (ret == 3); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); ASSERT (decomposed[2] == 0x11AF); #endif /* HANGUL SYLLABLE GEU */ ret = uc_decomposition (0xADF8, &tag, decomposed); ASSERT (ret == 2); ASSERT (tag == UC_DECOMP_CANONICAL); ASSERT (decomposed[0] == 0x1100); ASSERT (decomposed[1] == 0x1173); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-nfc.c����������������������������������������������������0000664�0000000�0000000�00000002502�14110572173�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) /* Check that UNINORM_NFC is defined and links. */ uninorm_t n = UNINORM_NFC; #endif extern void test_u8_nfc (void); extern void test_u16_nfc (void); extern void test_u32_nfc (void); int main () { /* Check that UNINORM_NFC is defined and links. */ volatile uninorm_t nf = UNINORM_NFC; (void) nf; test_u32_nfc (); test_u16_nfc (); test_u8_nfc (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-nfd.c����������������������������������������������������0000664�0000000�0000000�00000002502�14110572173�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) /* Check that UNINORM_NFD is defined and links. */ uninorm_t n = UNINORM_NFD; #endif extern void test_u8_nfd (void); extern void test_u16_nfd (void); extern void test_u32_nfd (void); int main () { /* Check that UNINORM_NFD is defined and links. */ volatile uninorm_t nf = UNINORM_NFD; (void) nf; test_u32_nfd (); test_u16_nfd (); test_u8_nfd (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-nfkc.c���������������������������������������������������0000664�0000000�0000000�00000002520�14110572173�0021171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) /* Check that UNINORM_NFKC is defined and links. */ uninorm_t n = UNINORM_NFKC; #endif extern void test_u8_nfkc (void); extern void test_u16_nfkc (void); extern void test_u32_nfkc (void); int main () { /* Check that UNINORM_NFKC is defined and links. */ volatile uninorm_t nf = UNINORM_NFKC; (void) nf; test_u32_nfkc (); test_u16_nfkc (); test_u8_nfkc (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-nfkd.c���������������������������������������������������0000664�0000000�0000000�00000002520�14110572173�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of Unicode strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) /* Check that UNINORM_NFKD is defined and links. */ uninorm_t n = UNINORM_NFKD; #endif extern void test_u8_nfkd (void); extern void test_u16_nfkd (void); extern void test_u32_nfkd (void); int main () { /* Check that UNINORM_NFKD is defined and links. */ volatile uninorm_t nf = UNINORM_NFKD; (void) nf; test_u32_nfkd (); test_u16_nfkd (); test_u8_nfkd (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-nfc.c������������������������������������������������0000664�0000000�0000000�00000025307�14110572173�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U16_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_normalize (UNINORM_NFC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u16_nfc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint16_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input[] = { 0x00C4 }; static const uint16_t decomposed[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input[] = { 0x01DE }; static const uint16_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint16_t input[] = { 0x212B }; static const uint16_t decomposed[] = { 0x0041, 0x030A }; static const uint16_t expected[] = { 0x00C5 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input[] = { 0x1FC1 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SCRIPT SMALL L */ static const uint16_t input[] = { 0x2113 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint16_t input[] = { 0x00A0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint16_t input[] = { 0xFB6C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint16_t input[] = { 0xFB6D }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint16_t input[] = { 0xFB6B }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint16_t input[] = { 0xFB6A }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint16_t input[] = { 0x246E }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint16_t input[] = { 0x2122 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint16_t input[] = { 0x1D62 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint16_t input[] = { 0xFE35 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint16_t input[] = { 0xFF21 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFF64 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFE51 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint16_t input[] = { 0x3392 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint16_t input[] = { 0x215C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint16_t input[] = { 0x00B5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint16_t input[] = { 0xFDFA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input[] = { 0xAE00 }; static const uint16_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input[] = { 0xADF8 }; static const uint16_t decomposed[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t decomposed[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); if (input != NULL) { uint16_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint16_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x00C0; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2 - 1; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) { ASSERT (check (input, m, expected, m - 1) == 0); ASSERT (check (expected, m - 1, expected, m - 1) == 0); } free (input); } } } } #else void test_u16_nfc (void) { } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-nfd.c������������������������������������������������0000664�0000000�0000000�00000023337�14110572173�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U16_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_normalize (UNINORM_NFD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u16_nfd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint16_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input[] = { 0x00C4 }; static const uint16_t expected[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input[] = { 0x01DE }; static const uint16_t expected[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input[] = { 0x1FC1 }; static const uint16_t expected[] = { 0x00A8, 0x0342 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint16_t input[] = { 0x2113 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint16_t input[] = { 0x00A0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint16_t input[] = { 0xFB6C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint16_t input[] = { 0xFB6D }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint16_t input[] = { 0xFB6B }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint16_t input[] = { 0xFB6A }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint16_t input[] = { 0x246E }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint16_t input[] = { 0x2122 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint16_t input[] = { 0x1D62 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint16_t input[] = { 0xFE35 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint16_t input[] = { 0xFF21 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFF64 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFE51 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint16_t input[] = { 0x3392 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint16_t input[] = { 0x215C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint16_t input[] = { 0x00B5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint16_t input[] = { 0xFDFA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input[] = { 0xAE00 }; static const uint16_t expected[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input[] = { 0xADF8 }; static const uint16_t expected[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t expected[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); if (input != NULL) { uint16_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint16_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x0041; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) ASSERT (check (input, m, expected, m) == 0); free (input); } } } } #else void test_u16_nfd (void) { } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-nfkc.c�����������������������������������������������0000664�0000000�0000000�00000034600�14110572173�0021606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U16_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_normalize (UNINORM_NFKC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u16_nfkc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint16_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input[] = { 0x00C4 }; static const uint16_t decomposed[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input[] = { 0x01DE }; static const uint16_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint16_t input[] = { 0x212B }; static const uint16_t decomposed[] = { 0x0041, 0x030A }; static const uint16_t expected[] = { 0x00C5 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input[] = { 0x1FC1 }; static const uint16_t decomposed[] = { 0x0020, 0x0308, 0x0342 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SCRIPT SMALL L */ static const uint16_t input[] = { 0x2113 }; static const uint16_t decomposed[] = { 0x006C }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* NO-BREAK SPACE */ static const uint16_t input[] = { 0x00A0 }; static const uint16_t decomposed[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint16_t input[] = { 0xFB6C }; static const uint16_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint16_t input[] = { 0xFB6D }; static const uint16_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint16_t input[] = { 0xFB6B }; static const uint16_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint16_t input[] = { 0xFB6A }; static const uint16_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint16_t input[] = { 0x246E }; static const uint16_t decomposed[] = { 0x0031, 0x0035 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* TRADE MARK SIGN */ static const uint16_t input[] = { 0x2122 }; static const uint16_t decomposed[] = { 0x0054, 0x004D }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint16_t input[] = { 0x1D62 }; static const uint16_t decomposed[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint16_t input[] = { 0xFE35 }; static const uint16_t decomposed[] = { 0x0028 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint16_t input[] = { 0xFF21 }; static const uint16_t decomposed[] = { 0x0041 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFF64 }; static const uint16_t decomposed[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFE51 }; static const uint16_t decomposed[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SQUARE MHZ */ static const uint16_t input[] = { 0x3392 }; static const uint16_t decomposed[] = { 0x004D, 0x0048, 0x007A }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint16_t input[] = { 0x215C }; static const uint16_t decomposed[] = { 0x0033, 0x2044, 0x0038 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* MICRO SIGN */ static const uint16_t input[] = { 0x00B5 }; static const uint16_t decomposed[] = { 0x03BC }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint16_t input[] = { 0xFDFA }; static const uint16_t decomposed[] = { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input[] = { 0xAE00 }; static const uint16_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input[] = { 0xADF8 }; static const uint16_t decomposed[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t decomposed[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; static const uint16_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); if (input != NULL) { uint16_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint16_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x00C0; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2 - 1; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) { ASSERT (check (input, m, expected, m - 1) == 0); ASSERT (check (expected, m - 1, expected, m - 1) == 0); } free (input); } } } } #else void test_u16_nfkc (void) { } #endif ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-nfkd.c�����������������������������������������������0000664�0000000�0000000�00000025605�14110572173�0021614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U16_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_normalize (UNINORM_NFKD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u16_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u16_nfkd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint16_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input[] = { 0x00C4 }; static const uint16_t expected[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input[] = { 0x01DE }; static const uint16_t expected[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input[] = { 0x1FC1 }; static const uint16_t expected[] = { 0x0020, 0x0308, 0x0342 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint16_t input[] = { 0x2113 }; static const uint16_t expected[] = { 0x006C }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* NO-BREAK SPACE */ static const uint16_t input[] = { 0x00A0 }; static const uint16_t expected[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint16_t input[] = { 0xFB6C }; static const uint16_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint16_t input[] = { 0xFB6D }; static const uint16_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint16_t input[] = { 0xFB6B }; static const uint16_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint16_t input[] = { 0xFB6A }; static const uint16_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint16_t input[] = { 0x246E }; static const uint16_t expected[] = { 0x0031, 0x0035 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* TRADE MARK SIGN */ static const uint16_t input[] = { 0x2122 }; static const uint16_t expected[] = { 0x0054, 0x004D }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint16_t input[] = { 0x1D62 }; static const uint16_t expected[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint16_t input[] = { 0xFE35 }; static const uint16_t expected[] = { 0x0028 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint16_t input[] = { 0xFF21 }; static const uint16_t expected[] = { 0x0041 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFF64 }; static const uint16_t expected[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint16_t input[] = { 0xFE51 }; static const uint16_t expected[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SQUARE MHZ */ static const uint16_t input[] = { 0x3392 }; static const uint16_t expected[] = { 0x004D, 0x0048, 0x007A }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint16_t input[] = { 0x215C }; static const uint16_t expected[] = { 0x0033, 0x2044, 0x0038 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* MICRO SIGN */ static const uint16_t input[] = { 0x00B5 }; static const uint16_t expected[] = { 0x03BC }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint16_t input[] = { 0xFDFA }; static const uint16_t expected[] = { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input[] = { 0xAE00 }; static const uint16_t expected[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input[] = { 0xADF8 }; static const uint16_t expected[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t expected[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); if (input != NULL) { uint16_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint16_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x0041; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) ASSERT (check (input, m, expected, m) == 0); free (input); } } } } #else void test_u16_nfkd (void) { } #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-normcmp.c��������������������������������������������0000664�0000000�0000000�00000010145�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u16-normcmp.h" static void test_nonascii (int (*my_normcmp) (const uint16_t *, size_t, const uint16_t *, size_t, uninorm_t, int *)) { /* Normalization effects. */ { static const uint16_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; static const uint16_t input2[] = { 'H', 'o', 0x0308, 'h', 'l', 'e' }; static const uint16_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; static const uint16_t input4[] = { 'H', 'o', 0x0308, 'h', 'l', 'e', 'n' }; static const uint16_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint16_t input1[] = { 0x00C4 }; static const uint16_t input2[] = { 0x0041, 0x0308 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint16_t input1[] = { 0x01DE }; static const uint16_t input2[] = { 0x0041, 0x0308, 0x0304 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint16_t input1[] = { 0x1FC1 }; static const uint16_t input2[] = { 0x00A8, 0x0342 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint16_t input1[] = { 0xAE00 }; static const uint16_t input2[] = { 0xADF8, 0x11AF }; static const uint16_t input3[] = { 0x1100, 0x1173, 0x11AF }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint16_t input1[] = { 0xADF8 }; static const uint16_t input2[] = { 0x1100, 0x1173 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u16_normcmp, UNINORM_NFD); test_nonascii (u16_normcmp); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-normcmp.h��������������������������������������������0000664�0000000�0000000�00000004500�14110572173�0022341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_normcmp) (const uint16_t *, size_t, const uint16_t *, size_t, uninorm_t, int *), uninorm_t nf) { /* Empty string. */ { int cmp; ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 0); } { static const uint16_t input[] = { 'x', 'y' }; int cmp; ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == 0); } /* Normal lexicographic order. */ { static const uint16_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; static const uint16_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } /* Shorter and longer strings. */ { static const uint16_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; static const uint16_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u16-normcoll.c�������������������������������������������0000664�0000000�0000000�00000002205�14110572173�0022506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u16-normcmp.h" int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll on ASCII strings should behave like strcmp as well. */ test_ascii (u16_normcoll, UNINORM_NFC); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfc-big.c��������������������������������������������0000664�0000000�0000000�00000006012�14110572173�0022164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of canonical normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <stdlib.h> #include "unistr.h" #include "test-u32-normalize-big.h" static int check (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length) { /* Check c2 == NFC(c1) == NFC(c2) == NFC(c3) c4 == NFC(c4) == NFC(c5) */ { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFC, c1, c1_length, NULL, &length); if (!(result != NULL && length == c2_length && u32_cmp (result, c2, c2_length) == 0)) return 1; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFC, c2, c2_length, NULL, &length); if (!(result != NULL && length == c2_length && u32_cmp (result, c2, c2_length) == 0)) return 2; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFC, c3, c3_length, NULL, &length); if (!(result != NULL && length == c2_length && u32_cmp (result, c2, c2_length) == 0)) return 3; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFC, c4, c4_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 4; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFC, c5, c5_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 5; free (result); } return 0; } int main (int argc, char *argv[]) { struct normalization_test_file file; read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFC); free_normalization_test_file (&file); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfc-big.sh�������������������������������������������0000775�0000000�0000000�00000000136�14110572173�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-u32-nfc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfc.c������������������������������������������������0000664�0000000�0000000�00000025307�14110572173�0021435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_normalize (UNINORM_NFC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u32_nfc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint32_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input[] = { 0x00C4 }; static const uint32_t decomposed[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input[] = { 0x01DE }; static const uint32_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint32_t input[] = { 0x212B }; static const uint32_t decomposed[] = { 0x0041, 0x030A }; static const uint32_t expected[] = { 0x00C5 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input[] = { 0x1FC1 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SCRIPT SMALL L */ static const uint32_t input[] = { 0x2113 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint32_t input[] = { 0x00A0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint32_t input[] = { 0xFB6C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint32_t input[] = { 0xFB6D }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint32_t input[] = { 0xFB6B }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint32_t input[] = { 0xFB6A }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint32_t input[] = { 0x246E }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint32_t input[] = { 0x2122 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint32_t input[] = { 0x1D62 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint32_t input[] = { 0xFE35 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint32_t input[] = { 0xFF21 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFF64 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFE51 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint32_t input[] = { 0x3392 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint32_t input[] = { 0x215C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint32_t input[] = { 0x00B5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint32_t input[] = { 0xFDFA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input[] = { 0xAE00 }; static const uint32_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input[] = { 0xADF8 }; static const uint32_t decomposed[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t decomposed[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); if (input != NULL) { uint32_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint32_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x00C0; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2 - 1; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) { ASSERT (check (input, m, expected, m - 1) == 0); ASSERT (check (expected, m - 1, expected, m - 1) == 0); } free (input); } } } } #else void test_u32_nfc (void) { } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfd-big.c��������������������������������������������0000664�0000000�0000000�00000006012�14110572173�0022165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of canonical decomposition of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <stdlib.h> #include "unistr.h" #include "test-u32-normalize-big.h" static int check (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length) { /* Check c3 == NFD(c1) == NFD(c2) == NFD(c3) c5 == NFD(c4) == NFD(c5) */ { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFD, c1, c1_length, NULL, &length); if (!(result != NULL && length == c3_length && u32_cmp (result, c3, c3_length) == 0)) return 1; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFD, c2, c2_length, NULL, &length); if (!(result != NULL && length == c3_length && u32_cmp (result, c3, c3_length) == 0)) return 2; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFD, c3, c3_length, NULL, &length); if (!(result != NULL && length == c3_length && u32_cmp (result, c3, c3_length) == 0)) return 3; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFD, c4, c4_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 4; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFD, c5, c5_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 5; free (result); } return 0; } int main (int argc, char *argv[]) { struct normalization_test_file file; read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFD); free_normalization_test_file (&file); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfd-big.sh�������������������������������������������0000775�0000000�0000000�00000000136�14110572173�0022361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-u32-nfd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfd.c������������������������������������������������0000664�0000000�0000000�00000023337�14110572173�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_normalize (UNINORM_NFD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u32_nfd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint32_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input[] = { 0x00C4 }; static const uint32_t expected[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input[] = { 0x01DE }; static const uint32_t expected[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input[] = { 0x1FC1 }; static const uint32_t expected[] = { 0x00A8, 0x0342 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint32_t input[] = { 0x2113 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint32_t input[] = { 0x00A0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint32_t input[] = { 0xFB6C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint32_t input[] = { 0xFB6D }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint32_t input[] = { 0xFB6B }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint32_t input[] = { 0xFB6A }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint32_t input[] = { 0x246E }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint32_t input[] = { 0x2122 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint32_t input[] = { 0x1D62 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint32_t input[] = { 0xFE35 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint32_t input[] = { 0xFF21 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFF64 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFE51 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint32_t input[] = { 0x3392 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint32_t input[] = { 0x215C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint32_t input[] = { 0x00B5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint32_t input[] = { 0xFDFA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input[] = { 0xAE00 }; static const uint32_t expected[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input[] = { 0xADF8 }; static const uint32_t expected[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t expected[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); if (input != NULL) { uint32_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint32_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x0041; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) ASSERT (check (input, m, expected, m) == 0); free (input); } } } } #else void test_u32_nfd (void) { } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkc-big.c�������������������������������������������0000664�0000000�0000000�00000006002�14110572173�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of compatibility normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <stdlib.h> #include "unistr.h" #include "test-u32-normalize-big.h" static int check (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length) { /* Check c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5). */ { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKC, c1, c1_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 1; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKC, c2, c2_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 2; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKC, c3, c3_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 3; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKC, c4, c4_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 4; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKC, c5, c5_length, NULL, &length); if (!(result != NULL && length == c4_length && u32_cmp (result, c4, c4_length) == 0)) return 5; free (result); } return 0; } int main (int argc, char *argv[]) { struct normalization_test_file file; read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFKC); free_normalization_test_file (&file); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkc-big.sh������������������������������������������0000775�0000000�0000000�00000000137�14110572173�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-u32-nfkc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkc.c�����������������������������������������������0000664�0000000�0000000�00000034600�14110572173�0021604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_normalize (UNINORM_NFKC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u32_nfkc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint32_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input[] = { 0x00C4 }; static const uint32_t decomposed[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input[] = { 0x01DE }; static const uint32_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint32_t input[] = { 0x212B }; static const uint32_t decomposed[] = { 0x0041, 0x030A }; static const uint32_t expected[] = { 0x00C5 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input[] = { 0x1FC1 }; static const uint32_t decomposed[] = { 0x0020, 0x0308, 0x0342 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SCRIPT SMALL L */ static const uint32_t input[] = { 0x2113 }; static const uint32_t decomposed[] = { 0x006C }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* NO-BREAK SPACE */ static const uint32_t input[] = { 0x00A0 }; static const uint32_t decomposed[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint32_t input[] = { 0xFB6C }; static const uint32_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint32_t input[] = { 0xFB6D }; static const uint32_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint32_t input[] = { 0xFB6B }; static const uint32_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint32_t input[] = { 0xFB6A }; static const uint32_t decomposed[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint32_t input[] = { 0x246E }; static const uint32_t decomposed[] = { 0x0031, 0x0035 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* TRADE MARK SIGN */ static const uint32_t input[] = { 0x2122 }; static const uint32_t decomposed[] = { 0x0054, 0x004D }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint32_t input[] = { 0x1D62 }; static const uint32_t decomposed[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint32_t input[] = { 0xFE35 }; static const uint32_t decomposed[] = { 0x0028 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint32_t input[] = { 0xFF21 }; static const uint32_t decomposed[] = { 0x0041 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFF64 }; static const uint32_t decomposed[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFE51 }; static const uint32_t decomposed[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SQUARE MHZ */ static const uint32_t input[] = { 0x3392 }; static const uint32_t decomposed[] = { 0x004D, 0x0048, 0x007A }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint32_t input[] = { 0x215C }; static const uint32_t decomposed[] = { 0x0033, 0x2044, 0x0038 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* MICRO SIGN */ static const uint32_t input[] = { 0x00B5 }; static const uint32_t decomposed[] = { 0x03BC }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint32_t input[] = { 0xFDFA }; static const uint32_t decomposed[] = { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input[] = { 0xAE00 }; static const uint32_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input[] = { 0xADF8 }; static const uint32_t decomposed[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t decomposed[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; static const uint32_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); if (input != NULL) { uint32_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint32_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x00C0; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2 - 1; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) { ASSERT (check (input, m, expected, m - 1) == 0); ASSERT (check (expected, m - 1, expected, m - 1) == 0); } free (input); } } } } #else void test_u32_nfkc (void) { } #endif ��������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkd-big.c�������������������������������������������0000664�0000000�0000000�00000006002�14110572173�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of compatibility decomposition of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <stdlib.h> #include "unistr.h" #include "test-u32-normalize-big.h" static int check (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length) { /* Check c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5). */ { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKD, c1, c1_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 1; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKD, c2, c2_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 2; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKD, c3, c3_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 3; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKD, c4, c4_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 4; free (result); } { size_t length; uint32_t *result; result = u32_normalize (UNINORM_NFKD, c5, c5_length, NULL, &length); if (!(result != NULL && length == c5_length && u32_cmp (result, c5, c5_length) == 0)) return 5; free (result); } return 0; } int main (int argc, char *argv[]) { struct normalization_test_file file; read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFKD); free_normalization_test_file (&file); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkd-big.sh������������������������������������������0000775�0000000�0000000�00000000137�14110572173�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-u32-nfkd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-nfkd.c�����������������������������������������������0000664�0000000�0000000�00000025605�14110572173�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_normalize (UNINORM_NFKD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u32_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u32_nfkd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint32_t input[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input[] = { 0x00C4 }; static const uint32_t expected[] = { 0x0041, 0x0308 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input[] = { 0x01DE }; static const uint32_t expected[] = { 0x0041, 0x0308, 0x0304 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input[] = { 0x1FC1 }; static const uint32_t expected[] = { 0x0020, 0x0308, 0x0342 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint32_t input[] = { 0x2113 }; static const uint32_t expected[] = { 0x006C }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* NO-BREAK SPACE */ static const uint32_t input[] = { 0x00A0 }; static const uint32_t expected[] = { 0x0020 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint32_t input[] = { 0xFB6C }; static const uint32_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint32_t input[] = { 0xFB6D }; static const uint32_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint32_t input[] = { 0xFB6B }; static const uint32_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint32_t input[] = { 0xFB6A }; static const uint32_t expected[] = { 0x06A4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint32_t input[] = { 0x246E }; static const uint32_t expected[] = { 0x0031, 0x0035 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* TRADE MARK SIGN */ static const uint32_t input[] = { 0x2122 }; static const uint32_t expected[] = { 0x0054, 0x004D }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint32_t input[] = { 0x1D62 }; static const uint32_t expected[] = { 0x0069 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint32_t input[] = { 0xFE35 }; static const uint32_t expected[] = { 0x0028 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint32_t input[] = { 0xFF21 }; static const uint32_t expected[] = { 0x0041 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFF64 }; static const uint32_t expected[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint32_t input[] = { 0xFE51 }; static const uint32_t expected[] = { 0x3001 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SQUARE MHZ */ static const uint32_t input[] = { 0x3392 }; static const uint32_t expected[] = { 0x004D, 0x0048, 0x007A }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint32_t input[] = { 0x215C }; static const uint32_t expected[] = { 0x0033, 0x2044, 0x0038 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* MICRO SIGN */ static const uint32_t input[] = { 0x00B5 }; static const uint32_t expected[] = { 0x03BC }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint32_t input[] = { 0xFDFA }; static const uint32_t expected[] = { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input[] = { 0xAE00 }; static const uint32_t expected[] = { 0x1100, 0x1173, 0x11AF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input[] = { 0xADF8 }; static const uint32_t expected[] = { 0x1100, 0x1173 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t expected[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); if (input != NULL) { uint32_t *expected = input + m; size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint32_t *p; size_t i; input[0] = 0x0041; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; break; case 1: for (i = 0; i < m2; i++) *p++ = 0x0300; for (i = 0; i < m1; i++) *p++ = 0x0319; break; case 2: for (i = 0; i < m2; i++) { *p++ = 0x0319; *p++ = 0x0300; } for (; i < m1; i++) *p++ = 0x0319; break; default: abort (); } expected[0] = 0x0041; p = expected + 1; for (i = 0; i < m1; i++) *p++ = 0x0319; for (i = 0; i < m2; i++) *p++ = 0x0300; for (; repeat > 0; repeat--) ASSERT (check (input, m, expected, m) == 0); free (input); } } } } #else void test_u32_nfkd (void) { } #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-normalize-big.c��������������������������������������0000664�0000000�0000000�00000023364�14110572173�0023427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> /* Specification. */ #include "test-u32-normalize-big.h" #if GNULIB_TEST_UNINORM_U32_NORMALIZE #include <stdio.h> #include <stdlib.h> #include "xalloc.h" #include "unistr.h" #include "macros.h" #define ASSERT_WITH_LINE(expr, file, line) \ do \ { \ if (!(expr)) \ { \ fprintf (stderr, "%s:%d: assertion failed for %s:%u\n", \ __FILE__, __LINE__, file, line); \ fflush (stderr); \ abort (); \ } \ } \ while (0) static int cmp_ucs4_t (const void *a, const void *b) { ucs4_t a_value = *(const ucs4_t *)a; ucs4_t b_value = *(const ucs4_t *)b; return (a_value < b_value ? -1 : a_value > b_value ? 1 : 0); } void read_normalization_test_file (const char *filename, struct normalization_test_file *file) { FILE *stream; unsigned int lineno; int part_index; struct normalization_test_line *lines; size_t lines_length; size_t lines_allocated; stream = fopen (filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", filename); exit (1); } for (part_index = 0; part_index < 4; part_index++) { file->parts[part_index].lines = NULL; file->parts[part_index].lines_length = 0; } lineno = 0; part_index = -1; lines = NULL; lines_length = 0; lines_allocated = 0; for (;;) { char buf[1000+1]; char *ptr; int c; struct normalization_test_line line; size_t sequence_index; lineno++; /* Read a line. */ ptr = buf; do { c = getc (stream); if (c == EOF || c == '\n') break; *ptr++ = c; } while (ptr < buf + 1000); *ptr = '\0'; if (c == EOF) break; /* Ignore empty lines and comment lines. */ if (buf[0] == '\0' || buf[0] == '#') continue; /* Handle lines that introduce a new part. */ if (buf[0] == '@') { /* Switch to the next part. */ if (part_index >= 0) { lines = (struct normalization_test_line *) xreallocarray (lines, lines_length, sizeof *lines); file->parts[part_index].lines = lines; file->parts[part_index].lines_length = lines_length; } part_index++; lines = NULL; lines_length = 0; lines_allocated = 0; continue; } /* It's a line containing 5 sequences of Unicode characters. Parse it and append it to the current part. */ if (!(part_index >= 0 && part_index < 4)) { fprintf (stderr, "unexpected structure of '%s'\n", filename); exit (1); } ptr = buf; line.lineno = lineno; for (sequence_index = 0; sequence_index < 5; sequence_index++) line.sequences[sequence_index] = NULL; for (sequence_index = 0; sequence_index < 5; sequence_index++) { uint32_t *sequence = XNMALLOC (1, uint32_t); size_t sequence_length = 0; for (;;) { char *endptr; unsigned int uc; uc = strtoul (ptr, &endptr, 16); if (endptr == ptr) break; ptr = endptr; /* Append uc to the sequence. */ sequence = (uint32_t *) xreallocarray (sequence, sequence_length + 2, sizeof *sequence); sequence[sequence_length] = uc; sequence_length++; if (*ptr == ' ') ptr++; } if (sequence_length == 0) { fprintf (stderr, "empty character sequence in '%s'\n", filename); exit (1); } sequence[sequence_length] = 0; /* terminator */ line.sequences[sequence_index] = sequence; if (*ptr != ';') { fprintf (stderr, "error parsing '%s'\n", filename); exit (1); } ptr++; } /* Append the line to the current part. */ if (lines_length == lines_allocated) { lines_allocated = 2 * lines_allocated; if (lines_allocated < 7) lines_allocated = 7; lines = (struct normalization_test_line *) xreallocarray (lines, lines_allocated, sizeof *lines); } lines[lines_length] = line; lines_length++; } if (part_index >= 0) { lines = (struct normalization_test_line *) xreallocarray (lines, lines_length, sizeof *lines); file->parts[part_index].lines = lines; file->parts[part_index].lines_length = lines_length; } { /* Collect all c1 values from the part 1 in an array. */ const struct normalization_test_part *p = &file->parts[1]; ucs4_t *c1_array = XNMALLOC (p->lines_length + 1, ucs4_t); size_t line_index; for (line_index = 0; line_index < p->lines_length; line_index++) { const uint32_t *sequence = p->lines[line_index].sequences[0]; /* In part 1, every sequences[0] consists of a single character. */ if (!(sequence[0] != 0 && sequence[1] == 0)) abort (); c1_array[line_index] = sequence[0]; } /* Sort this array. */ qsort (c1_array, p->lines_length, sizeof (ucs4_t), cmp_ucs4_t); /* Add the sentinel at the end. */ c1_array[p->lines_length] = 0x110000; file->part1_c1_sorted = c1_array; } file->filename = xstrdup (filename); if (ferror (stream) || fclose (stream)) { fprintf (stderr, "error reading from '%s'\n", filename); exit (1); } } void test_specific (const struct normalization_test_file *file, int (*check) (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length)) { size_t part_index; for (part_index = 0; part_index < 4; part_index++) { const struct normalization_test_part *p = &file->parts[part_index]; size_t line_index; for (line_index = 0; line_index < p->lines_length; line_index++) { const struct normalization_test_line *l = &p->lines[line_index]; ASSERT_WITH_LINE (check (l->sequences[0], u32_strlen (l->sequences[0]), l->sequences[1], u32_strlen (l->sequences[1]), l->sequences[2], u32_strlen (l->sequences[2]), l->sequences[3], u32_strlen (l->sequences[3]), l->sequences[4], u32_strlen (l->sequences[4])) == 0, file->filename, l->lineno); } } } void test_other (const struct normalization_test_file *file, uninorm_t nf) { /* Check that for every character not listed in part 1 of the NormalizationTest.txt file, the character maps to itself in each of the four normalization forms. */ const ucs4_t *p = file->part1_c1_sorted; ucs4_t uc; for (uc = 0; uc < 0x110000; uc++) { if (uc >= 0xD800 && uc < 0xE000) { /* A surrogate, not a character. Skip uc. */ } else if (uc == *p) { /* Skip uc. */ p++; } else { uint32_t input[1]; size_t length; uint32_t *result; input[0] = uc; result = u32_normalize (nf, input, 1, NULL, &length); ASSERT (result != NULL && length == 1 && result[0] == uc); free (result); } } } void free_normalization_test_file (struct normalization_test_file *file) { size_t part_index; for (part_index = 0; part_index < 4; part_index++) { const struct normalization_test_part *p = &file->parts[part_index]; size_t line_index; for (line_index = 0; line_index < p->lines_length; line_index++) { const struct normalization_test_line *l = &p->lines[line_index]; size_t sequence_index; for (sequence_index = 0; sequence_index < 5; sequence_index++) free (l->sequences[sequence_index]); } free (p->lines); } free (file->part1_c1_sorted); free (file->filename); } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-normalize-big.h��������������������������������������0000664�0000000�0000000�00000005532�14110572173�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of normalization of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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 <stddef.h> #include "unitypes.h" #include "uninorm.h" /* The NormalizationTest.txt is from www.unicode.org, with stripped comments: sed -e 's| *#.*||' < .../ucd/NormalizationTest.txt \ > tests/uninorm/NormalizationTest.txt It is only used to verify the compliance of this implementation of the Unicode normalization forms. It is not used by the library code, only by the unit tests. */ /* Representation of a line in the NormalizationTest.txt file. */ struct normalization_test_line { unsigned int lineno; uint32_t *sequences[5]; }; /* Representation of a delimited part of the NormalizationTest.txt file. */ struct normalization_test_part { struct normalization_test_line *lines; size_t lines_length; }; /* Representation of the entire NormalizationTest.txt file. */ struct normalization_test_file { struct normalization_test_part parts[4]; /* The set of c1 values from part 1, sorted in ascending order, with a sentinel value of 0x110000 at the end. */ ucs4_t *part1_c1_sorted; /* The filename of the NormalizationTest.txt file. */ char *filename; }; /* Read the NormalizationTest.txt file and return its contents. */ extern void read_normalization_test_file (const char *filename, struct normalization_test_file *file); /* Perform the first compliance test. */ extern void test_specific (const struct normalization_test_file *file, int (*check) (const uint32_t *c1, size_t c1_length, const uint32_t *c2, size_t c2_length, const uint32_t *c3, size_t c3_length, const uint32_t *c4, size_t c4_length, const uint32_t *c5, size_t c5_length)); /* Perform the second compliance test. */ extern void test_other (const struct normalization_test_file *file, uninorm_t nf); /* Free the representation of the NormalizationTest.txt file. */ extern void free_normalization_test_file (struct normalization_test_file *file); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-normcmp.c��������������������������������������������0000664�0000000�0000000�00000010145�14110572173�0022334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u32-normcmp.h" static void test_nonascii (int (*my_normcmp) (const uint32_t *, size_t, const uint32_t *, size_t, uninorm_t, int *)) { /* Normalization effects. */ { static const uint32_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; static const uint32_t input2[] = { 'H', 'o', 0x0308, 'h', 'l', 'e' }; static const uint32_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; static const uint32_t input4[] = { 'H', 'o', 0x0308, 'h', 'l', 'e', 'n' }; static const uint32_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint32_t input1[] = { 0x00C4 }; static const uint32_t input2[] = { 0x0041, 0x0308 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint32_t input1[] = { 0x01DE }; static const uint32_t input2[] = { 0x0041, 0x0308, 0x0304 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint32_t input1[] = { 0x1FC1 }; static const uint32_t input2[] = { 0x00A8, 0x0342 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint32_t input1[] = { 0xAE00 }; static const uint32_t input2[] = { 0xADF8, 0x11AF }; static const uint32_t input3[] = { 0x1100, 0x1173, 0x11AF }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint32_t input1[] = { 0xADF8 }; static const uint32_t input2[] = { 0x1100, 0x1173 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u32_normcmp, UNINORM_NFD); test_nonascii (u32_normcmp); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-normcmp.h��������������������������������������������0000664�0000000�0000000�00000004500�14110572173�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_normcmp) (const uint32_t *, size_t, const uint32_t *, size_t, uninorm_t, int *), uninorm_t nf) { /* Empty string. */ { int cmp; ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 0); } { static const uint32_t input[] = { 'x', 'y' }; int cmp; ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == 0); } /* Normal lexicographic order. */ { static const uint32_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; static const uint32_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } /* Shorter and longer strings. */ { static const uint32_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; static const uint32_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u32-normcoll.c�������������������������������������������0000664�0000000�0000000�00000002205�14110572173�0022504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u32-normcmp.h" int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll on ASCII strings should behave like strcmp as well. */ test_ascii (u32_normcoll, UNINORM_NFC); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-nfc.c�������������������������������������������������0000664�0000000�0000000�00000027544�14110572173�0021365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U8_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_normalize (UNINORM_NFC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u8_nfc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint8_t input[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input[] = { 0xC3, 0x84 }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input[] = { 0xC7, 0x9E }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xAB }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x8A }; static const uint8_t expected[] = { 0xC3, 0x85 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SCRIPT SMALL L */ static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint8_t input[] = { 0xC2, 0xA0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint8_t input[] = { 0xC2, 0xB5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t decomposed[] = { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); if (input != NULL) { uint8_t *expected = input + (2 * m - 1); size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint8_t *p; size_t i; input[0] = 0x41; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } break; case 1: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; case 2: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x99; *p++ = 0xCC; *p++ = 0x80; } for (; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; default: abort (); } expected[0] = 0xC3; expected[1] = 0x80; p = expected + 2; for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2 - 1; i++) { *p++ = 0xCC; *p++ = 0x80; } for (; repeat > 0; repeat--) { ASSERT (check (input, 2 * m - 1, expected, 2 * m - 2) == 0); ASSERT (check (expected, 2 * m - 2, expected, 2 * m - 2) == 0); } free (input); } } } } #else void test_u8_nfc (void) { } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-nfd.c�������������������������������������������������0000664�0000000�0000000�00000025526�14110572173�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U8_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_normalize (UNINORM_NFD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u8_nfd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint8_t input[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input[] = { 0xC3, 0x84 }; static const uint8_t expected[] = { 0x41, 0xCC, 0x88 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input[] = { 0xC7, 0x9E }; static const uint8_t expected[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; static const uint8_t expected[] = { 0xC2, 0xA8, 0xCD, 0x82 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* NO-BREAK SPACE */ static const uint8_t input[] = { 0xC2, 0xA0 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* TRADE MARK SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* SQUARE MHZ */ static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* MICRO SIGN */ static const uint8_t input[] = { 0xC2, 0xB5 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t expected[] = { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); if (input != NULL) { uint8_t *expected = input + (2 * m - 1); size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint8_t *p; size_t i; input[0] = 0x41; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } break; case 1: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; case 2: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x99; *p++ = 0xCC; *p++ = 0x80; } for (; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; default: abort (); } expected[0] = 0x41; p = expected + 1; for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (; repeat > 0; repeat--) ASSERT (check (input, 2 * m - 1, expected, 2 * m - 1) == 0); free (input); } } } } #else void test_u8_nfd (void) { } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-nfkc.c������������������������������������������������0000664�0000000�0000000�00000037366�14110572173�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U8_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_normalize (UNINORM_NFKC, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u8_nfkc (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint8_t input[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input[] = { 0xC3, 0x84 }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input[] = { 0xC7, 0x9E }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* ANGSTROM SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xAB }; static const uint8_t decomposed[] = { 0x41, 0xCC, 0x8A }; static const uint8_t expected[] = { 0xC3, 0x85 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; static const uint8_t decomposed[] = { 0x20, 0xCC, 0x88, 0xCD, 0x82 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SCRIPT SMALL L */ static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; static const uint8_t decomposed[] = { 0x6C }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* NO-BREAK SPACE */ static const uint8_t input[] = { 0xC2, 0xA0 }; static const uint8_t decomposed[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; static const uint8_t decomposed[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; static const uint8_t decomposed[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; static const uint8_t decomposed[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; static const uint8_t decomposed[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; static const uint8_t decomposed[] = { 0x31, 0x35 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* TRADE MARK SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; static const uint8_t decomposed[] = { 0x54, 0x4D }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; static const uint8_t decomposed[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; static const uint8_t decomposed[] = { 0x28 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; static const uint8_t decomposed[] = { 0x41 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; static const uint8_t decomposed[] = { 0xE3, 0x80, 0x81 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; static const uint8_t decomposed[] = { 0xE3, 0x80, 0x81 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* SQUARE MHZ */ static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; static const uint8_t decomposed[] = { 0x4D, 0x48, 0x7A }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; static const uint8_t decomposed[] = { 0x33, 0xE2, 0x81, 0x84, 0x38 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* MICRO SIGN */ static const uint8_t input[] = { 0xC2, 0xB5 }; static const uint8_t decomposed[] = { 0xCE, 0xBC }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; static const uint8_t decomposed[] = { 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85 }; ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t decomposed[] = { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' }; static const uint8_t expected[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); if (input != NULL) { uint8_t *expected = input + (2 * m - 1); size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint8_t *p; size_t i; input[0] = 0x41; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } break; case 1: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; case 2: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x99; *p++ = 0xCC; *p++ = 0x80; } for (; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; default: abort (); } expected[0] = 0xC3; expected[1] = 0x80; p = expected + 2; for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2 - 1; i++) { *p++ = 0xCC; *p++ = 0x80; } for (; repeat > 0; repeat--) { ASSERT (check (input, 2 * m - 1, expected, 2 * m - 2) == 0); ASSERT (check (expected, 2 * m - 2, expected, 2 * m - 2) == 0); } free (input); } } } } #else void test_u8_nfkc (void) { } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-nfkd.c������������������������������������������������0000664�0000000�0000000�00000030067�14110572173�0021533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #if GNULIB_TEST_UNINORM_U8_NORMALIZE #include "uninorm.h" #include <signal.h> #include <stdlib.h> #include <unistd.h> #include "unistr.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_normalize (UNINORM_NFKD, input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u8_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } void test_u8_nfkd (void) { { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); } { /* SPACE */ static const uint8_t input[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input[] = { 0xC3, 0x84 }; static const uint8_t expected[] = { 0x41, 0xCC, 0x88 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input[] = { 0xC7, 0x9E }; static const uint8_t expected[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; static const uint8_t expected[] = { 0x20, 0xCC, 0x88, 0xCD, 0x82 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SCRIPT SMALL L */ static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; static const uint8_t expected[] = { 0x6C }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* NO-BREAK SPACE */ static const uint8_t input[] = { 0xC2, 0xA0 }; static const uint8_t expected[] = { 0x20 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH INITIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; static const uint8_t expected[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH MEDIAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; static const uint8_t expected[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH FINAL FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; static const uint8_t expected[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LETTER VEH ISOLATED FORM */ static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; static const uint8_t expected[] = { 0xDA, 0xA4 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* CIRCLED NUMBER FIFTEEN */ static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; static const uint8_t expected[] = { 0x31, 0x35 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* TRADE MARK SIGN */ static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; static const uint8_t expected[] = { 0x54, 0x4D }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* LATIN SUBSCRIPT SMALL LETTER I */ static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; static const uint8_t expected[] = { 0x69 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; static const uint8_t expected[] = { 0x28 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* FULLWIDTH LATIN CAPITAL LETTER A */ static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; static const uint8_t expected[] = { 0x41 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HALFWIDTH IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; static const uint8_t expected[] = { 0xE3, 0x80, 0x81 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SMALL IDEOGRAPHIC COMMA */ static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; static const uint8_t expected[] = { 0xE3, 0x80, 0x81 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* SQUARE MHZ */ static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; static const uint8_t expected[] = { 0x4D, 0x48, 0x7A }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* VULGAR FRACTION THREE EIGHTHS */ static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; static const uint8_t expected[] = { 0x33, 0xE2, 0x81, 0x84, 0x38 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* MICRO SIGN */ static const uint8_t input[] = { 0xC2, 0xB5 }; static const uint8_t expected[] = { 0xCE, 0xBC }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; static const uint8_t expected[] = { 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint8_t expected[] = { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (50); #endif /* Check that the sorting is not O(n²) but O(n log n). */ { int pass; for (pass = 0; pass < 3; pass++) { size_t repeat = 1; size_t m = 100000; uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); if (input != NULL) { uint8_t *expected = input + (2 * m - 1); size_t m1 = m / 2; size_t m2 = (m - 1) / 2; /* NB: m1 + m2 == m - 1. */ uint8_t *p; size_t i; input[0] = 0x41; p = input + 1; switch (pass) { case 0: for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } break; case 1: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; case 2: for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x99; *p++ = 0xCC; *p++ = 0x80; } for (; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } break; default: abort (); } expected[0] = 0x41; p = expected + 1; for (i = 0; i < m1; i++) { *p++ = 0xCC; *p++ = 0x99; } for (i = 0; i < m2; i++) { *p++ = 0xCC; *p++ = 0x80; } for (; repeat > 0; repeat--) ASSERT (check (input, 2 * m - 1, expected, 2 * m - 1) == 0); free (input); } } } } #else void test_u8_nfkd (void) { } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-normcmp.c���������������������������������������������0000664�0000000�0000000�00000010333�14110572173�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u8-normcmp.h" static void test_nonascii (int (*my_normcmp) (const uint8_t *, size_t, const uint8_t *, size_t, uninorm_t, int *)) { /* Normalization effects. */ { static const uint8_t input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; static const uint8_t input2[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e' }; static const uint8_t input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; static const uint8_t input4[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e', 'n' }; static const uint8_t input5[] = { 'H', 'u', 'r', 'z' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == -1); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ static const uint8_t input1[] = { 0xC3, 0x84 }; static const uint8_t input2[] = { 0x41, 0xCC, 0x88 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ static const uint8_t input1[] = { 0xC7, 0x9E }; static const uint8_t input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* GREEK DIALYTIKA AND PERISPOMENI */ static const uint8_t input1[] = { 0xE1, 0xBF, 0x81 }; static const uint8_t input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEUL */ static const uint8_t input1[] = { 0xEA, 0xB8, 0x80 }; static const uint8_t input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; static const uint8_t input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } { /* HANGUL SYLLABLE GEU */ static const uint8_t input1[] = { 0xEA, 0xB7, 0xB8 }; static const uint8_t input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); ASSERT (cmp == 0); } } int main () { test_ascii (u8_normcmp, UNINORM_NFD); test_nonascii (u8_normcmp); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-normcmp.h���������������������������������������������0000664�0000000�0000000�00000004470�14110572173�0022270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ static void test_ascii (int (*my_normcmp) (const uint8_t *, size_t, const uint8_t *, size_t, uninorm_t, int *), uninorm_t nf) { /* Empty string. */ { int cmp; ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 0); } { static const uint8_t input[] = { 'x', 'y' }; int cmp; ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); ASSERT (cmp == 1); ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); ASSERT (cmp == 0); } /* Normal lexicographic order. */ { static const uint8_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; static const uint8_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } /* Shorter and longer strings. */ { static const uint8_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; static const uint8_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; int cmp; ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); ASSERT (cmp == -1); ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); ASSERT (cmp == 1); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-u8-normcoll.c��������������������������������������������0000664�0000000�0000000�00000002202�14110572173�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include "macros.h" #include "test-u8-normcmp.h" int main () { /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll on ASCII strings should behave like strcmp as well. */ test_ascii (u8_normcoll, UNINORM_NFC); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uninorm/test-uninorm-filter-nfc.c�������������������������������������0000664�0000000�0000000�00000006636�14110572173�0024002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of streams. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uninorm.h" #include <stdlib.h> #include "unistr.h" #include "macros.h" /* A stream of Unicode characters that simply accumulates the contents. */ struct accumulator { uint32_t *result; size_t length; size_t allocated; }; static int write_to_accumulator (void *stream_data, ucs4_t uc) { struct accumulator *accu = (struct accumulator *) stream_data; if (accu->length == accu->allocated) { accu->allocated = 2 * accu->allocated + 1; accu->result = (uint32_t *) realloc (accu->result, accu->allocated * sizeof (uint32_t)); } accu->result[accu->length] = uc; accu->length++; return 0; } static int check (const uint32_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { struct accumulator accu; struct uninorm_filter *filter; size_t i; accu.result = NULL; accu.length = 0; accu.allocated = 0; filter = uninorm_filter_create (UNINORM_NFC, write_to_accumulator, &accu); ASSERT (filter != NULL); for (i = 0; i < input_length; i++) ASSERT (uninorm_filter_write (filter, input[i]) == 0); ASSERT (uninorm_filter_free (filter) == 0); if (!(accu.result != NULL)) return 1; if (!(accu.length == expected_length)) return 2; if (!(u32_cmp (accu.result, expected, expected_length) == 0)) return 3; free (accu.result); return 0; } int main () { { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t decomposed[] = { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); } return 0; } ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017277�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-asnprintf1.c����������������������������������������0000664�0000000�0000000�00000002233�14110572173�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_asnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u16-asnprintf1.h" static void test_asnprintf () { test_function (u16_asnprintf); } int main (int argc, char *argv[]) { test_asnprintf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-asnprintf1.h����������������������������������������0000664�0000000�0000000�00000003733�14110572173�0023131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_[v]asnprintf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) { uint16_t buf[8]; int size; /* Test return value convention. */ for (size = 0; size <= 8; size++) { size_t length = size; uint16_t *result = my_asnprintf (NULL, &length, "%d", 12345); static const uint16_t expected[] = { '1', '2', '3', '4', '5', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { static const uint16_t initializer[] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F', 0 }; static const uint16_t expected[] = { '1', '2', '3', '4', '5', 0 }; size_t length; uint16_t *result; u16_cpy (buf, initializer, 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (u16_cmp (buf + size, initializer + size, 8 - size) == 0); if (result != buf) free (result); } } �������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-printf1.h�������������������������������������������0000664�0000000�0000000�00000076504�14110572173�0022435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_v[a]s[n]printf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) { /* Test support of size specifiers as in C99. */ { uint16_t *result = my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { uint16_t *result = my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '2', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { uint16_t *result = my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { uint16_t *result = my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); static const uint16_t expected[] = { '1', '.', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Hello"; { uint16_t *result = my_xasprintf ("%U %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%10U %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%010U %d", 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); } } { static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint16_t *result = my_xasprintf ("%lU %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%10lU %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%010lU %d", 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); } } { static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint16_t *result = my_xasprintf ("%llU %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%10llU %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%010llU %d", 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); } } /* Test the support of the 's' conversion specifier for strings. */ { uint16_t *result = my_xasprintf ("Mr. %s %d", "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); } { /* Width. */ uint16_t *result = my_xasprintf ("Mr. %20s %d", "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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("Mr. %020s %d", "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); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ uint16_t *result = my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); static const uint16_t expected1[] = { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '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); } { /* Width. */ uint16_t *result = my_xasprintf ("%10a %d", 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); static const uint16_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* Large precision. */ uint16_t *result = my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); static const uint16_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* A positive number. */ uint16_t *result = my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); static const uint16_t expected1[] = { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '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); } { /* Width. */ uint16_t *result = my_xasprintf ("%10La %d", 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); static const uint16_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* Large precision. */ uint16_t *result = my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); static const uint16_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint16_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint16_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } /* Test the support of the %f format directive. */ { /* A positive number. */ uint16_t *result = my_xasprintf ("%f %d", 12.75, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%10f %d", 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); static const uint16_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint16_t *result = my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%10Lf %d", 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); static const uint16_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ uint16_t *result = my_xasprintf ("%F %d", 12.75, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '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); static const uint16_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint16_t *result = my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '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); static const uint16_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ uint16_t *result = my_xasprintf ("%e %d", 12.75, 33, 44, 55); static const uint16_t expected1[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '1', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '0', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected1) == 0 || u16_strcmp (result, expected2) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%15e %d", 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); static const uint16_t expected1[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected1) == 0 || u16_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint16_t *result = my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); static const uint16_t expected[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%15Le %d", 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); static const uint16_t expected[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ uint16_t *result = my_xasprintf ("%g %d", 12.75, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%10g %d", 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); static const uint16_t expected1[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; static const uint16_t expected2[] = { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected1) == 0 || u16_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint16_t *result = my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint16_t *result = my_xasprintf ("%10Lg %d", 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); static const uint16_t expected[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the %n format directive. */ { int count = -1; uint16_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); static const uint16_t expected[] = { '1', '2', '3', ' ', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { uint16_t *result = my_xasprintf ("%2$d %1$d", 33, 55); static const uint16_t expected[] = { '5', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); free (result); } /* Test the support of the grouping flag. */ { uint16_t *result = my_xasprintf ("%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[u16_strlen (result) - 1] == '9'); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ { uint16_t *result = my_xasprintf ("%U %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%20U %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%020U %d", 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); } } { static const uint16_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint16_t *result = my_xasprintf ("%lU %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%20lU %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%020lU %d", 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); } } { static const uint32_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint16_t *result = my_xasprintf ("%llU %d", 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); } { /* Width. */ uint16_t *result = my_xasprintf ("%20llU %d", 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); 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_ZERO: no effect. */ uint16_t *result = my_xasprintf ("%020llU %d", 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); } } /* Test non-ASCII characters in the format string. */ { uint16_t *result = my_xasprintf ("\304rger", 33, 44, 55); ASSERT (result == NULL && errno == EINVAL); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vasnprintf1.c���������������������������������������0000664�0000000�0000000�00000003364�14110572173�0023312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u16-asnprintf1.h" #include "test-u16-printf1.h" static uint16_t * my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint16_t *ret; va_start (args, format); ret = u16_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static uint16_t * my_xasprintf (const char *format, ...) { va_list args; size_t length; uint16_t *ret; va_start (args, format); ret = u16_vasnprintf (NULL, &length, format, args); va_end (args); if (ret != NULL) ASSERT (length == u16_strlen (ret)); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vasnprintf2.c���������������������������������������0000664�0000000�0000000�00000006642�14110572173�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function in an ISO-8859-1 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\304rger"; /* Ärger */ { size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* Width. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } } } static uint16_t * my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint16_t *ret; va_start (args, format); ret = u16_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vasnprintf2.sh��������������������������������������0000775�0000000�0000000�00000000756�14110572173�0023510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a traditional french locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then testlocale=$LOCALE_FR else 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=$testlocale \ ${CHECKER} ./test-u16-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u16-vasnprintf2${EXEEXT} ������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vasnprintf3.c���������������������������������������0000664�0000000�0000000�00000006641�14110572173�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function in an UTF-8 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\303\204rger"; /* Ärger */ { size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* Width. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint16_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint16_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u16_strcmp (result, expected) == 0); ASSERT (length == u16_strlen (result)); free (result); } } } static uint16_t * my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint16_t *ret; va_start (args, format); ret = u16_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vasnprintf3.sh��������������������������������������0000775�0000000�0000000�00000000767�14110572173�0023513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a french Unicode locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then testlocale=$LOCALE_FR_UTF8 else 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=$testlocale \ ${CHECKER} ./test-u16-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u16-vasnprintf3${EXEEXT} ���������gnulib-20210822~d383792/tests/unistdio/test-u16-vasprintf1.c����������������������������������������0000664�0000000�0000000�00000002666�14110572173�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u16-printf1.h" static uint16_t * my_xasprintf (const char *format, ...) { va_list args; uint16_t *result; int retval; va_start (args, format); retval = u16_vasprintf (&result, format, args); va_end (args); if (retval < 0) return NULL; ASSERT (result != NULL); return result; } static void test_vasprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasprintf (); return 0; } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vsnprintf1.c����������������������������������������0000664�0000000�0000000�00000003157�14110572173�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u16-printf1.h" static uint16_t * my_xasprintf (const char *format, ...) { va_list args; uint16_t buf[1000]; int retval; size_t length; uint16_t *result; va_start (args, format); retval = u16_vsnprintf (buf, sizeof (buf), format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u16_strlen (buf); result = XNMALLOC (length + 1, uint16_t); u16_cpy (result, buf, length + 1); return result; } static void test_vsnprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsnprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u16-vsprintf1.c�����������������������������������������0000664�0000000�0000000�00000003135�14110572173�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vsprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u16-printf1.h" static uint16_t * my_xasprintf (const char *format, ...) { va_list args; uint16_t buf[1000]; int retval; size_t length; uint16_t *result; va_start (args, format); retval = u16_vsprintf (buf, format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u16_strlen (buf); result = XNMALLOC (length + 1, uint16_t); u16_cpy (result, buf, length + 1); return result; } static void test_vsprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-asnprintf1.c����������������������������������������0000664�0000000�0000000�00000002233�14110572173�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_asnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u32-asnprintf1.h" static void test_asnprintf () { test_function (u32_asnprintf); } int main (int argc, char *argv[]) { test_asnprintf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-asnprintf1.h����������������������������������������0000664�0000000�0000000�00000003733�14110572173�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_[v]asnprintf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) { uint32_t buf[8]; int size; /* Test return value convention. */ for (size = 0; size <= 8; size++) { size_t length = size; uint32_t *result = my_asnprintf (NULL, &length, "%d", 12345); static const uint32_t expected[] = { '1', '2', '3', '4', '5', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { static const uint32_t initializer[] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F', 0 }; static const uint32_t expected[] = { '1', '2', '3', '4', '5', 0 }; size_t length; uint32_t *result; u32_cpy (buf, initializer, 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (u32_cmp (buf + size, initializer + size, 8 - size) == 0); if (result != buf) free (result); } } �������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-printf1.h�������������������������������������������0000664�0000000�0000000�00000076504�14110572173�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_v[a]s[n]printf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) { /* Test support of size specifiers as in C99. */ { uint32_t *result = my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { uint32_t *result = my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '2', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { uint32_t *result = my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '3', '4', '5', '6', '7', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { uint32_t *result = my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); static const uint32_t expected[] = { '1', '.', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Hello"; { uint32_t *result = my_xasprintf ("%U %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%10U %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%010U %d", 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); } } { static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint32_t *result = my_xasprintf ("%lU %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%10lU %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%010lU %d", 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); } } { static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint32_t *result = my_xasprintf ("%llU %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%10llU %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%010llU %d", 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); } } /* Test the support of the 's' conversion specifier for strings. */ { uint32_t *result = my_xasprintf ("Mr. %s %d", "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); } { /* Width. */ uint32_t *result = my_xasprintf ("Mr. %20s %d", "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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("Mr. %020s %d", "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); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ uint32_t *result = my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); static const uint32_t expected1[] = { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '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); } { /* Width. */ uint32_t *result = my_xasprintf ("%10a %d", 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); static const uint32_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* Large precision. */ uint32_t *result = my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); static const uint32_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* A positive number. */ uint32_t *result = my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); static const uint32_t expected1[] = { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '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); } { /* Width. */ uint32_t *result = my_xasprintf ("%10La %d", 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); static const uint32_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } { /* Large precision. */ uint32_t *result = my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); static const uint32_t expected1[] = { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', 0 }; static const uint32_t expected3[] = { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', 0 }; static const uint32_t expected4[] = { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '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); } /* Test the support of the %f format directive. */ { /* A positive number. */ uint32_t *result = my_xasprintf ("%f %d", 12.75, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%10f %d", 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); static const uint32_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint32_t *result = my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%10Lf %d", 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); static const uint32_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ uint32_t *result = my_xasprintf ("%F %d", 12.75, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '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); static const uint32_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint32_t *result = my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '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); static const uint32_t expected[] = { '1', '2', '3', '4', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ uint32_t *result = my_xasprintf ("%e %d", 12.75, 33, 44, 55); static const uint32_t expected1[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '1', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '0', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected1) == 0 || u32_strcmp (result, expected2) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%15e %d", 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); static const uint32_t expected1[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected1) == 0 || u32_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint32_t *result = my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); static const uint32_t expected[] = { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', '0', '1', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%15Le %d", 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); static const uint32_t expected[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ uint32_t *result = my_xasprintf ("%g %d", 12.75, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%10g %d", 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); static const uint32_t expected1[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; static const uint32_t expected2[] = { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected1) == 0 || u32_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint32_t *result = my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint32_t *result = my_xasprintf ("%10Lg %d", 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); static const uint32_t expected[] = { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the %n format directive. */ { int count = -1; uint32_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); static const uint32_t expected[] = { '1', '2', '3', ' ', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { uint32_t *result = my_xasprintf ("%2$d %1$d", 33, 55); static const uint32_t expected[] = { '5', '5', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); free (result); } /* Test the support of the grouping flag. */ { uint32_t *result = my_xasprintf ("%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[u32_strlen (result) - 1] == '9'); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ { uint32_t *result = my_xasprintf ("%U %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%20U %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%020U %d", 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); } } { static const uint16_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint32_t *result = my_xasprintf ("%lU %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%20lU %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%020lU %d", 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); } } { static const uint32_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint32_t *result = my_xasprintf ("%llU %d", 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); } { /* Width. */ uint32_t *result = my_xasprintf ("%20llU %d", 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); 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_ZERO: no effect. */ uint32_t *result = my_xasprintf ("%020llU %d", 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); } } /* Test non-ASCII characters in the format string. */ { uint32_t *result = my_xasprintf ("\304rger", 33, 44, 55); ASSERT (result == NULL && errno == EINVAL); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vasnprintf1.c���������������������������������������0000664�0000000�0000000�00000003364�14110572173�0023310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u32-asnprintf1.h" #include "test-u32-printf1.h" static uint32_t * my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint32_t *ret; va_start (args, format); ret = u32_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static uint32_t * my_xasprintf (const char *format, ...) { va_list args; size_t length; uint32_t *ret; va_start (args, format); ret = u32_vasnprintf (NULL, &length, format, args); va_end (args); if (ret != NULL) ASSERT (length == u32_strlen (ret)); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vasnprintf2.c���������������������������������������0000664�0000000�0000000�00000006642�14110572173�0023313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function in an ISO-8859-1 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\304rger"; /* Ärger */ { size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* Width. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } } } static uint32_t * my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint32_t *ret; va_start (args, format); ret = u32_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vasnprintf2.sh��������������������������������������0000775�0000000�0000000�00000000756�14110572173�0023506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a traditional french locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then testlocale=$LOCALE_FR else 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=$testlocale \ ${CHECKER} ./test-u32-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u32-vasnprintf2${EXEEXT} ������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vasnprintf3.c���������������������������������������0000664�0000000�0000000�00000006641�14110572173�0023313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function in an UTF-8 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\303\204rger"; /* Ärger */ { size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* Width. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint32_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint32_t expected[] = { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; ASSERT (result != NULL); ASSERT (u32_strcmp (result, expected) == 0); ASSERT (length == u32_strlen (result)); free (result); } } } static uint32_t * my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint32_t *ret; va_start (args, format); ret = u32_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } �����������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vasnprintf3.sh��������������������������������������0000775�0000000�0000000�00000000767�14110572173�0023511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a french Unicode locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then testlocale=$LOCALE_FR_UTF8 else 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=$testlocale \ ${CHECKER} ./test-u32-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u32-vasnprintf3${EXEEXT} ���������gnulib-20210822~d383792/tests/unistdio/test-u32-vasprintf1.c����������������������������������������0000664�0000000�0000000�00000002666�14110572173�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u32-printf1.h" static uint32_t * my_xasprintf (const char *format, ...) { va_list args; uint32_t *result; int retval; va_start (args, format); retval = u32_vasprintf (&result, format, args); va_end (args); if (retval < 0) return NULL; ASSERT (result != NULL); return result; } static void test_vasprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasprintf (); return 0; } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vsnprintf1.c����������������������������������������0000664�0000000�0000000�00000003157�14110572173�0023147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u32-printf1.h" static uint32_t * my_xasprintf (const char *format, ...) { va_list args; uint32_t buf[1000]; int retval; size_t length; uint32_t *result; va_start (args, format); retval = u32_vsnprintf (buf, sizeof (buf), format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u32_strlen (buf); result = XNMALLOC (length + 1, uint32_t); u32_cpy (result, buf, length + 1); return result; } static void test_vsnprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsnprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u32-vsprintf1.c�����������������������������������������0000664�0000000�0000000�00000003135�14110572173�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vsprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u32-printf1.h" static uint32_t * my_xasprintf (const char *format, ...) { va_list args; uint32_t buf[1000]; int retval; size_t length; uint32_t *result; va_start (args, format); retval = u32_vsprintf (buf, format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u32_strlen (buf); result = XNMALLOC (length + 1, uint32_t); u32_cpy (result, buf, length + 1); return result; } static void test_vsprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-asnprintf1.c�����������������������������������������0000664�0000000�0000000�00000002230�14110572173�0023034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_asnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u8-asnprintf1.h" static void test_asnprintf () { test_function (u8_asnprintf); } int main (int argc, char *argv[]) { test_asnprintf (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-asnprintf1.h�����������������������������������������0000664�0000000�0000000�00000003545�14110572173�0023053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_[v]asnprintf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) { uint8_t buf[8]; int size; /* Test return value convention. */ for (size = 0; size <= 8; size++) { size_t length = size; uint8_t *result = my_asnprintf (NULL, &length, "%d", 12345); static const uint8_t expected[] = "12345"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { static const uint8_t initializer[] = "DEADBEEF"; static const uint8_t expected[] = "12345"; size_t length; uint8_t *result; u8_cpy (buf, initializer, 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (u8_cmp (buf + size, initializer + size, 8 - size) == 0); if (result != buf) free (result); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-printf1.h��������������������������������������������0000664�0000000�0000000�00000055035�14110572173�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_v[a]s[n]printf() function. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) { /* Test support of size specifiers as in C99. */ { uint8_t *result = my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); static const uint8_t expected[] = "12345671 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { uint8_t *result = my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); static const uint8_t expected[] = "12345672 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { uint8_t *result = my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); static const uint8_t expected[] = "12345673 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { uint8_t *result = my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); static const uint8_t expected[] = "1.5 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Hello"; { uint8_t *result = my_xasprintf ("%U %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10U %d", 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); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = " Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } } { static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint8_t *result = my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10lU %d", 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); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = " Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } } { static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { uint8_t *result = my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10llU %d", 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); static const uint8_t expected[] = "Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); static const uint8_t expected[] = " Hello 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } } /* Test the support of the 's' conversion specifier for strings. */ { uint8_t *result = my_xasprintf ("Mr. %s %d", "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); } { /* Width. */ uint8_t *result = my_xasprintf ("Mr. %20s %d", "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); static const uint8_t expected[] = "Mr. Ronald Reagan 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("Mr. %020s %d", "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); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ uint8_t *result = my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); static const uint8_t expected1[] = "0x1.922p+1 33"; static const uint8_t expected2[] = "0x3.244p+0 33"; static const uint8_t expected3[] = "0x6.488p-1 33"; static const uint8_t expected4[] = "0xc.91p-2 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); } { /* Width. */ uint8_t *result = my_xasprintf ("%10a %d", 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); static const uint8_t expected1[] = "0x1.c000000000p+0 33"; static const uint8_t expected2[] = "0x3.8000000000p-1 33"; static const uint8_t expected3[] = "0x7.0000000000p-2 33"; static const uint8_t expected4[] = "0xe.0000000000p-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); } { /* Large precision. */ uint8_t *result = my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); static const uint8_t expected1[] = "0x1.c0000000000000000000000000000000000000000000000000p+0 33"; static const uint8_t expected2[] = "0x3.80000000000000000000000000000000000000000000000000p-1 33"; static const uint8_t expected3[] = "0x7.00000000000000000000000000000000000000000000000000p-2 33"; static const uint8_t expected4[] = "0xe.00000000000000000000000000000000000000000000000000p-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); } { /* A positive number. */ uint8_t *result = my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); static const uint8_t expected1[] = "0x1.922p+1 33"; static const uint8_t expected2[] = "0x3.244p+0 33"; static const uint8_t expected3[] = "0x6.488p-1 33"; static const uint8_t expected4[] = "0xc.91p-2 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); } { /* Width. */ uint8_t *result = my_xasprintf ("%10La %d", 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); static const uint8_t expected1[] = "0x1.c000000000p+0 33"; static const uint8_t expected2[] = "0x3.8000000000p-1 33"; static const uint8_t expected3[] = "0x7.0000000000p-2 33"; static const uint8_t expected4[] = "0xe.0000000000p-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); } { /* Large precision. */ uint8_t *result = my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); static const uint8_t expected1[] = "0x1.c0000000000000000000000000000000000000000000000000p+0 33"; static const uint8_t expected2[] = "0x3.80000000000000000000000000000000000000000000000000p-1 33"; static const uint8_t expected3[] = "0x7.00000000000000000000000000000000000000000000000000p-2 33"; static const uint8_t expected4[] = "0xe.00000000000000000000000000000000000000000000000000p-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); } /* Test the support of the %f format directive. */ { /* A positive number. */ uint8_t *result = my_xasprintf ("%f %d", 12.75, 33, 44, 55); static const uint8_t expected[] = "12.750000 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10f %d", 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); static const uint8_t expected[] = "1234 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint8_t *result = my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); static const uint8_t expected[] = "12.750000 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10Lf %d", 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); static const uint8_t expected[] = "1234 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ uint8_t *result = my_xasprintf ("%F %d", 12.75, 33, 44, 55); static const uint8_t expected[] = "12.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); static const uint8_t expected[] = "1234 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* A positive number. */ uint8_t *result = my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); static const uint8_t expected[] = "12.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); static const uint8_t expected[] = "1234 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ uint8_t *result = my_xasprintf ("%e %d", 12.75, 33, 44, 55); static const uint8_t expected1[] = "1.275000e+01 33"; static const uint8_t expected2[] = "1.275000e+001 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected1) == 0 || u8_strcmp (result, expected2) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%15e %d", 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); static const uint8_t expected1[] = "1e+03 33"; static const uint8_t expected2[] = "1e+003 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected1) == 0 || u8_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint8_t *result = my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); static const uint8_t expected[] = "1.275000e+01 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%15Le %d", 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); static const uint8_t expected[] = "1e+03 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ uint8_t *result = my_xasprintf ("%g %d", 12.75, 33, 44, 55); static const uint8_t expected[] = "12.75 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10g %d", 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); static const uint8_t expected1[] = "1e+03 33"; static const uint8_t expected2[] = "1e+003 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected1) == 0 || u8_strcmp (result, expected2) == 0); free (result); } { /* A positive number. */ uint8_t *result = my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); static const uint8_t expected[] = "12.75 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* Width. */ uint8_t *result = my_xasprintf ("%10Lg %d", 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); static const uint8_t expected[] = "1e+03 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the %n format directive. */ { int count = -1; uint8_t *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); static const uint8_t expected[] = "123 "; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { uint8_t *result = my_xasprintf ("%2$d %1$d", 33, 55); static const uint8_t expected[] = "55 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } /* Test the support of the grouping flag. */ { uint8_t *result = my_xasprintf ("%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[u8_strlen (result) - 1] == '9'); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ { uint8_t *result = my_xasprintf ("%U %d", 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); } { /* Width. */ uint8_t *result = my_xasprintf ("%20U %d", 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); static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%020U %d", 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); } } { static const uint16_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint8_t *result = my_xasprintf ("%lU %d", 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); } { /* Width. */ uint8_t *result = my_xasprintf ("%20lU %d", 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); static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%020lU %d", 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); } } { static const uint32_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { uint8_t *result = my_xasprintf ("%llU %d", 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); } { /* Width. */ uint8_t *result = my_xasprintf ("%20llU %d", 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); static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); free (result); } { /* FLAG_ZERO: no effect. */ uint8_t *result = my_xasprintf ("%020llU %d", 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); } } /* Test non-ASCII characters in the format string. */ { uint8_t *result = my_xasprintf ("\304rger", 33, 44, 55); ASSERT (result == NULL && errno == EINVAL); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vasnprintf1.c����������������������������������������0000664�0000000�0000000�00000003351�14110572173�0023227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u8-asnprintf1.h" #include "test-u8-printf1.h" static uint8_t * my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint8_t *ret; va_start (args, format); ret = u8_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static uint8_t * my_xasprintf (const char *format, ...) { va_list args; size_t length; uint8_t *ret; va_start (args, format); ret = u8_vasnprintf (NULL, &length, format, args); va_end (args); if (ret != NULL) ASSERT (length == u8_strlen (ret)); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vasnprintf2.c����������������������������������������0000664�0000000�0000000�00000006175�14110572173�0023237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function in an ISO-8859-1 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\304rger"; /* Ärger */ { size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = "\303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* Width. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = " \303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = "\303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = " \303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } } } static uint8_t * my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint8_t *ret; va_start (args, format); ret = u8_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vasnprintf2.sh���������������������������������������0000775�0000000�0000000�00000000754�14110572173�0023427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a traditional french locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then testlocale=$LOCALE_FR else 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=$testlocale \ ${CHECKER} ./test-u8-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u8-vasnprintf2${EXEEXT} ��������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vasnprintf3.c����������������������������������������0000664�0000000�0000000�00000006174�14110572173�0023237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function in an UTF-8 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" static void test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) { /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\303\204rger"; /* Ärger */ { size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = "\303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* Width. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = " \303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = "\303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; uint8_t *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); static const uint8_t expected[] = " \303\204rger 33"; ASSERT (result != NULL); ASSERT (u8_strcmp (result, expected) == 0); ASSERT (length == u8_strlen (result)); free (result); } } } static uint8_t * my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; uint8_t *ret; va_start (args, format); ret = u8_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vasnprintf3.sh���������������������������������������0000775�0000000�0000000�00000000765�14110572173�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a french Unicode locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then testlocale=$LOCALE_FR_UTF8 else 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=$testlocale \ ${CHECKER} ./test-u8-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-u8-vasnprintf3${EXEEXT} �����������gnulib-20210822~d383792/tests/unistdio/test-u8-vasprintf1.c�����������������������������������������0000664�0000000�0000000�00000002661�14110572173�0023054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "macros.h" #include "test-u8-printf1.h" static uint8_t * my_xasprintf (const char *format, ...) { va_list args; uint8_t *result; int retval; va_start (args, format); retval = u8_vasprintf (&result, format, args); va_end (args); if (retval < 0) return NULL; ASSERT (result != NULL); return result; } static void test_vasprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasprintf (); return 0; } �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vsnprintf1.c�����������������������������������������0000664�0000000�0000000�00000003146�14110572173�0023070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u8-printf1.h" static uint8_t * my_xasprintf (const char *format, ...) { va_list args; uint8_t buf[1000]; int retval; size_t length; uint8_t *result; va_start (args, format); retval = u8_vsnprintf (buf, sizeof (buf), format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u8_strlen (buf); result = XNMALLOC (length + 1, uint8_t); u8_cpy (result, buf, length + 1); return result; } static void test_vsnprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsnprintf (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-u8-vsprintf1.c������������������������������������������0000664�0000000�0000000�00000003124�14110572173�0022706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vsprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <errno.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "unistr.h" #include "xalloc.h" #include "macros.h" #include "test-u8-printf1.h" static uint8_t * my_xasprintf (const char *format, ...) { va_list args; uint8_t buf[1000]; int retval; size_t length; uint8_t *result; va_start (args, format); retval = u8_vsprintf (buf, format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (buf)) return NULL; length = u8_strlen (buf); result = XNMALLOC (length + 1, uint8_t); u8_cpy (result, buf, length + 1); return result; } static void test_vsprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsprintf (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-asnprintf1.c����������������������������������������0000664�0000000�0000000�00000002164�14110572173�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_asnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-ulc-asnprintf1.h" static void test_asnprintf () { test_function (ulc_asnprintf); } int main (int argc, char *argv[]) { test_asnprintf (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-asnprintf1.h����������������������������������������0000664�0000000�0000000�00000003265�14110572173�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_[v]asnprintf() functions. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { char buf[8]; int size; /* Test return value convention. */ for (size = 0; size <= 8; size++) { size_t length = size; char *result = my_asnprintf (NULL, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-printf1.h�������������������������������������������0000664�0000000�0000000�00000034235�14110572173�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_v[a]s[n]printf() functions. Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc. This 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. */ static void test_xfunction (char * (*my_xasprintf) (const char *, ...)) { /* Test support of size specifiers as in C99. */ { char *result = my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345671 33") == 0); free (result); } { char *result = my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345672 33") == 0); free (result); } { char *result = my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12345673 33") == 0); free (result); } { char *result = my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.5 33") == 0); free (result); } /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Hello"; { char *result = my_xasprintf ("%U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10U %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* FLAG_ZERO: no effect. */ char *result = my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Hello 33") == 0); free (result); } } { static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { char *result = my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10lU %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* FLAG_ZERO: no effect. */ char *result = my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Hello 33") == 0); free (result); } } { static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; { char *result = my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10llU %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "Hello 33") == 0); free (result); } { /* FLAG_ZERO: no effect. */ char *result = my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Hello 33") == 0); free (result); } } /* Test the support of the 's' conversion specifier for strings. */ { char *result = my_xasprintf ("Mr. %s %d", "Ronald Reagan", 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("Mr. %20s %d", "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); ASSERT (result != NULL); ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); free (result); } { /* FLAG_ZERO: no effect. */ char *result = my_xasprintf ("Mr. %020s %d", "Ronald Reagan", 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); free (result); } /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal output of floating-point numbers. */ { /* A positive number. */ char *result = my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10a %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); free (result); } { /* Large precision. */ char *result = my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); free (result); } { /* A positive number. */ char *result = my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.922p+1 33") == 0 || strcmp (result, "0x3.244p+0 33") == 0 || strcmp (result, "0x6.488p-1 33") == 0 || strcmp (result, "0xc.91p-2 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10La %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 || strcmp (result, "0x3.8000000000p-1 33") == 0 || strcmp (result, "0x7.0000000000p-2 33") == 0 || strcmp (result, "0xe.0000000000p-3 33") == 0); free (result); } { /* Large precision. */ char *result = my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); free (result); } /* Test the support of the %f format directive. */ { /* A positive number. */ char *result = my_xasprintf ("%f %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10f %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); free (result); } { /* A positive number. */ char *result = my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10Lf %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); free (result); } /* Test the support of the %F format directive. */ { /* A positive number. */ char *result = my_xasprintf ("%F %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); free (result); } { /* Precision. */ char *result = my_xasprintf ("%.F %d", 1234.0, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); free (result); } { /* A positive number. */ char *result = my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.750000 33") == 0); free (result); } { /* Precision. */ char *result = my_xasprintf ("%.LF %d", 1234.0L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1234 33") == 0); free (result); } /* Test the support of the %e format directive. */ { /* A positive number. */ char *result = my_xasprintf ("%e %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0 || strcmp (result, "1.275000e+001 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%15e %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); free (result); } { /* A positive number. */ char *result = my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "1.275000e+01 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%15Le %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0); free (result); } /* Test the support of the %g format directive. */ { /* A positive number. */ char *result = my_xasprintf ("%g %d", 12.75, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10g %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0 || strcmp (result, "1e+003 33") == 0); free (result); } { /* A positive number. */ char *result = my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "12.75 33") == 0); free (result); } { /* Width. */ char *result = my_xasprintf ("%10Lg %d", 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); ASSERT (result != NULL); ASSERT (strcmp (result, "1e+03 33") == 0); free (result); } /* Test the support of the %n format directive. */ { int count = -1; char *result = my_xasprintf ("%d %n", 123, &count, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "123 ") == 0); ASSERT (count == 4); free (result); } /* Test the support of the POSIX/XSI format strings with positions. */ { char *result = my_xasprintf ("%2$d %1$d", 33, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "55 33") == 0); free (result); } /* Test the support of the grouping flag. */ { char *result = my_xasprintf ("%'d %d", 1234567, 99); ASSERT (result != NULL); ASSERT (result[strlen (result) - 1] == '9'); free (result); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasnprintf1.c���������������������������������������0000664�0000000�0000000�00000003265�14110572173�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-ulc-asnprintf1.h" #include "test-ulc-printf1.h" static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = ulc_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static char * my_xasprintf (const char *format, ...) { va_list args; size_t length; char *ret; va_start (args, format); ret = ulc_vasnprintf (NULL, &length, format, args); va_end (args); if (ret != NULL) ASSERT (length == strlen (ret)); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasnprintf2.c���������������������������������������0000664�0000000�0000000�00000017343�14110572173�0023465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function in an ISO-8859-1 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ { size_t length; char *result = my_asnprintf (NULL, &length, "%U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } { static const uint16_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { size_t length; char *result = my_asnprintf (NULL, &length, "%lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } { static const uint32_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { size_t length; char *result = my_asnprintf (NULL, &length, "%llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 || strcmp (result, "Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 || strcmp (result, " Rafal Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\304rger"; /* Ärger */ { size_t length; char *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "\304rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " \304rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "\304rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " \304rger 33") == 0); ASSERT (length == strlen (result)); free (result); } } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = ulc_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasnprintf2.sh��������������������������������������0000775�0000000�0000000�00000000756�14110572173�0023660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a traditional french locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then testlocale=$LOCALE_FR else 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=$testlocale \ ${CHECKER} ./test-ulc-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-ulc-vasnprintf2${EXEEXT} ������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasnprintf3.c���������������������������������������0000664�0000000�0000000�00000016106�14110572173�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function in an UTF-8 locale. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <locale.h> #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { /* Test the support of the 'U' conversion specifier for Unicode strings. */ { static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ { size_t length; char *result = my_asnprintf (NULL, &length, "%U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020U %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } { static const uint16_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { size_t length; char *result = my_asnprintf (NULL, &length, "%lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020lU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } { static const uint32_t unicode_string[] = /* Rafał Maszkowski */ { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', 0 }; { size_t length; char *result = my_asnprintf (NULL, &length, "%llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%20llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-20llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%020llU %d", unicode_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); ASSERT (length == strlen (result)); free (result); } } /* Test the support of the 's' conversion specifier for strings. */ { const char *locale_string = "\303\204rger"; /* Ärger */ { size_t length; char *result = my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "\303\204rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* Width. */ size_t length; char *result = my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " \303\204rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_LEFT. */ size_t length; char *result = my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, "\303\204rger 33") == 0); ASSERT (length == strlen (result)); free (result); } { /* FLAG_ZERO: no effect. */ size_t length; char *result = my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); ASSERT (result != NULL); ASSERT (strcmp (result, " \303\204rger 33") == 0); ASSERT (length == strlen (result)); free (result); } } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = ulc_vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } int main (int argc, char *argv[]) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; test_vasnprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasnprintf3.sh��������������������������������������0000775�0000000�0000000�00000000767�14110572173�0023663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a french Unicode locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then testlocale=$LOCALE_FR_UTF8 else 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=$testlocale \ ${CHECKER} ./test-ulc-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ${CHECKER} ./test-ulc-vasnprintf3${EXEEXT} ���������gnulib-20210822~d383792/tests/unistdio/test-ulc-vasprintf1.c����������������������������������������0000664�0000000�0000000�00000002607�14110572173�0023303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "macros.h" #include "test-ulc-printf1.h" static char * my_xasprintf (const char *format, ...) { va_list args; char *result; int retval; va_start (args, format); retval = ulc_vasprintf (&result, format, args); va_end (args); if (retval < 0) return NULL; ASSERT (result != NULL); return result; } static void test_vasprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vasprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vsnprintf1.c����������������������������������������0000664�0000000�0000000�00000002703�14110572173�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vsnprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" #include "macros.h" #include "test-ulc-printf1.h" static char * my_xasprintf (const char *format, ...) { va_list args; char result[1000]; int retval; va_start (args, format); retval = ulc_vsnprintf (result, sizeof (result), format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (result)) return NULL; return xstrdup (result); } static void test_vsnprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsnprintf (); return 0; } �������������������������������������������������������������gnulib-20210822~d383792/tests/unistdio/test-ulc-vsprintf1.c�����������������������������������������0000664�0000000�0000000�00000002656�14110572173�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vsprintf() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "unistdio.h" #include <stdarg.h> #include <stddef.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" #include "macros.h" #include "test-ulc-printf1.h" static char * my_xasprintf (const char *format, ...) { va_list args; char result[1000]; int retval; va_start (args, format); retval = ulc_vsprintf (result, format, args); va_end (args); if (retval < 0 || retval >= (int) sizeof (result)) return NULL; return xstrdup (result); } static void test_vsprintf () { test_xfunction (my_xasprintf); } int main (int argc, char *argv[]) { test_vsprintf (); return 0; } ����������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0016765�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-chr.h�����������������������������������������������������0000664�0000000�0000000�00000007523�14110572173�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_chr() functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Eric Blake and Bruno Haible <bruno@clisp.org>, 2010. */ 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)); ASSERT (input32); input32[0] = 'a'; input32[1] = 'b'; u32_set (input32 + 2, 'c', 1024); for (i = 1026; i < size - 2; i += 63) { size_t last = i + 63 < size - 2 ? i + 63 : size - 2; ucs4_t uc = 'd' | (i - 1026); if (uc >= 0xd800 && uc <= 0xdfff) uc |= 0x100000; u32_set (input32 + i, uc, last - i); } input32[size - 2] = 'e'; input32[size - 1] = 'a'; input = U32_TO_U (input32, size, NULL, &length); ASSERT (input); /* Basic behavior tests. */ 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); ASSERT (U_CHR (input, length, 'b') == input + 1); ASSERT (U_CHR (input, length, 'c') == input + 2); ASSERT (U_CHR (input, length, 'd') == input + 1026); { UNIT *exp = input + 1026; UNIT *prev = input + 1; for (i = 1026; i < size - 2; i += 63) { UNIT c[6]; size_t n; ucs4_t uc = 'd' | (i - 1026); if (uc >= 0xd800 && uc <= 0xdfff) uc |= 0x100000; n = U_UCTOMB (c, uc, 6); ASSERT (exp < input + length - 1); ASSERT (U_CHR (prev, (length - 1) - (prev - input), uc) == exp); ASSERT (memcmp (exp, c, n * sizeof (UNIT)) == 0); prev = exp; exp += n * 63; } } ASSERT (U_CHR (input + 1, length - 1, 'a') == input + length - 1); ASSERT (U_CHR (input + 1, length - 1, 'e') == input + length - 2); ASSERT (U_CHR (input, length, 'f') == NULL); ASSERT (U_CHR (input, length, '\0') == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (U_CHR (input, length, 'c') == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 128; j++) input[i + j] = j; for (j = 0; j < 128; j++) { ASSERT (U_CHR (input + i, 128, j) == input + i + j); } } } /* Check that uN_chr() does not read past the first occurrence of the byte being searched. */ { char *page_boundary = (char *) 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)); U_SET (mem, 'X', n); ASSERT (U_CHR (mem, n, 'U') == NULL); { size_t i; for (i = 0; i < n; i++) { mem[i] = 'U'; ASSERT (U_CHR (mem, 4000, 'U') == mem + i); mem[i] = 'X'; } } } } } free (input); if (sizeof (UNIT) != sizeof (uint32_t)) free (input32); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-cmp.h�����������������������������������������������������0000664�0000000�0000000�00000006414�14110572173�0020677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cmp() functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson and Bruno Haible <bruno@clisp.org>, 2010. */ static void test_cmp (void) { /* Test equal / not equal distinction. */ void *page_boundary1 = zerosize_ptr (); void *page_boundary2 = zerosize_ptr (); if (page_boundary1 && page_boundary2) ASSERT (U_CMP (page_boundary1, page_boundary2, 0) == 0); { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 'b', 'a', 'r', 0 }; ASSERT (U_CMP (input1, input2, 2) == 0); ASSERT (U_CMP (input1, input2, 3) == 0); ASSERT (U_CMP (input1, input2, 4) != 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'b', 'a', 'r', 0 }; ASSERT (U_CMP (input1, input2, 1) != 0); ASSERT (U_CMP (input1, input2, 3) != 0); } /* Test less / equal / greater distinction. */ { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'm', 'o', 'o', 0 }; ASSERT (U_CMP (input1, input2, 4) < 0); ASSERT (U_CMP (input2, input1, 4) > 0); } { static const UNIT input1[] = { 'o', 'o', 'm', 'p', 'h', 0 }; static const UNIT input2[] = { 'o', 'o', 'p', 's', 0 }; ASSERT (U_CMP (input1, input2, 3) < 0); ASSERT (U_CMP (input2, input1, 3) > 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 'b', 'a', 'r', 0 }; ASSERT (U_CMP (input1, input2, 4) < 0); ASSERT (U_CMP (input2, input1, 4) > 0); } /* Some old versions of memcmp were not 8-bit clean. */ { static const UNIT input1[] = { 0x40 }; static const UNIT input2[] = { 0xC2 }; ASSERT (U_CMP (input1, input2, 1) < 0); ASSERT (U_CMP (input2, input1, 1) > 0); } { static const UNIT input1[] = { 0xC2 }; static const UNIT input2[] = { 0xC3 }; ASSERT (U_CMP (input1, input2, 1) < 0); ASSERT (U_CMP (input2, input1, 1) > 0); } /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { UNIT foo[21]; UNIT bar[21]; int i; for (i = 0; i < 4; i++) { UNIT *a = foo + i; UNIT *b = bar + i; int j; for (j = 0; j < 8; j++) a[j] = '-'; a[8] = '0'; for (j = 9; j < 16; j++) a[j] = '1'; for (j = 0; j < 8; j++) b[j] = '-'; b[8] = '1'; for (j = 9; j < 16; j++) b[j] = '0'; ASSERT (U_CMP (a, b, 16) < 0); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-cmp2.h����������������������������������������������������0000664�0000000�0000000�00000004037�14110572173�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cmp2() functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Simon Josefsson and Bruno Haible <bruno@clisp.org>, 2010. */ int main () { { static const UNIT input1[] = { 'a' }; static const UNIT input2[] = { 'b' }; ASSERT (U_CMP2 (input1, 0, input2, 0) == 0); ASSERT (U_CMP2 (input1, 1, input2, 0) > 0); ASSERT (U_CMP2 (input1, 0, input2, 1) < 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 'b', 'a', 'r', 0 }; ASSERT (U_CMP2 (input1, 3, input2, 3) == 0); ASSERT (U_CMP2 (input1, 4, input2, 3) > 0); ASSERT (U_CMP2 (input2, 3, input1, 4) < 0); ASSERT (U_CMP2 (input1, 3, input2, 4) < 0); ASSERT (U_CMP2 (input2, 4, input1, 3) > 0); ASSERT (U_CMP2 (input1, 4, input2, 4) < 0); ASSERT (U_CMP2 (input2, 4, input1, 4) > 0); ASSERT (U_CMP2 (input1, 3, input2, 7) < 0); ASSERT (U_CMP2 (input2, 7, input1, 3) > 0); } { static const UNIT input1[] = { 'f', 'o', 'o' }; static const UNIT input2[] = { 'm', 'o', 'o' }; ASSERT (U_CMP2 (input1, 3, input2, 3) < 0); ASSERT (U_CMP2 (input2, 3, input1, 3) > 0); } { static const UNIT input1[] = { 'o', 'o', 'm', 'p', 'h' }; static const UNIT input2[] = { 'o', 'o', 'p', 's' }; ASSERT (U_CMP2 (input1, 5, input2, 4) < 0); ASSERT (U_CMP2 (input2, 4, input1, 5) > 0); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-cpy-alloc.h�����������������������������������������������0000664�0000000�0000000�00000002273�14110572173�0022002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cpy_alloc() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ 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 *result = U_CPY_ALLOC (src, n); size_t i; ASSERT (result != NULL); for (i = 0; i < n; i++) ASSERT (result[i] == src[i]); free (result); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-cpy.h�����������������������������������������������������0000664�0000000�0000000�00000002557�14110572173�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cpy() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ 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_CPY (dest + 1, src, n); ASSERT (ret == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == src[i]); ASSERT (dest[1 + n] == MAGIC); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-move.h����������������������������������������������������0000664�0000000�0000000�00000011511�14110572173�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_move() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { /* Test copying operations with disjoint source and destination. */ { 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_MOVE (dest + 1, src, n); ASSERT (ret == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == src[i]); ASSERT (dest[1 + n] == MAGIC); } } /* Test copying operations with overlap, in-place. */ { 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]; UNIT *ret; size_t i; dest[0] = MAGIC; for (i = 0; i < n; i++) dest[1 + i] = src[i]; dest[1 + n] = MAGIC; ret = U_MOVE (dest + 1, dest + 1, n); ASSERT (ret == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == src[i]); ASSERT (dest[1 + n] == MAGIC); } } /* Test copying operations with overlap, moving downward. */ { static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e' }; static const UNIT src2[] = { 'C', 'L', 'I', 'M', 'A', 'T', 'E' }; size_t d; ASSERT (SIZEOF (src) == SIZEOF (src2)); for (d = 0; d <= SIZEOF (src); d++) { size_t n; for (n = 0; n <= SIZEOF (src); n++) { UNIT dest[1 + 2 * SIZEOF (src) + 1]; UNIT *ret; size_t i; dest[0] = MAGIC; for (i = 0; i < SIZEOF (src2); i++) dest[1 + i] = src2[i]; for (i = 0; i < SIZEOF (src); i++) dest[1 + SIZEOF (src) + i] = src[i]; dest[1 + 2 * SIZEOF (src)] = MAGIC; ret = U_MOVE (dest + 1 + SIZEOF (src) - d, dest + 1 + SIZEOF (src), n); ASSERT (ret == dest + 1 + SIZEOF (src) - d); ASSERT (dest[0] == MAGIC); for (i = 0; i < SIZEOF (src) - d; i++) ASSERT (dest[1 + i] == src2[i]); for (i = 0; i < n; i++) ASSERT (dest[1 + SIZEOF (src) - d + i] == src[i]); for (i = SIZEOF (src) - d + n; i < SIZEOF (src2); i++) ASSERT (dest[1 + i] == src2[i]); for (i = (n >= d ? n - d : 0); i < SIZEOF (src); i++) ASSERT (dest[1 + SIZEOF (src) + i] == src[i]); ASSERT (dest[1 + 2 * SIZEOF (src)] == MAGIC); } } } /* Test copying operations with overlap, moving upward. */ { static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e' }; static const UNIT src2[] = { 'C', 'L', 'I', 'M', 'A', 'T', 'E' }; size_t d; ASSERT (SIZEOF (src) == SIZEOF (src2)); for (d = 0; d <= SIZEOF (src); d++) { size_t n; for (n = 0; n <= SIZEOF (src); n++) { UNIT dest[1 + 2 * SIZEOF (src) + 1]; UNIT *ret; size_t i; dest[0] = MAGIC; for (i = 0; i < SIZEOF (src); i++) dest[1 + i] = src[i]; for (i = 0; i < SIZEOF (src2); i++) dest[1 + SIZEOF (src) + i] = src2[i]; dest[1 + 2 * SIZEOF (src)] = MAGIC; ret = U_MOVE (dest + 1 + d, dest + 1, n); ASSERT (ret == dest + 1 + d); ASSERT (dest[0] == MAGIC); for (i = 0; i < d; i++) ASSERT (dest[1 + i] == src[i]); for (i = 0; i < n; i++) ASSERT (dest[1 + d + i] == src[i]); for (i = d + n; i < SIZEOF (src); i++) ASSERT (dest[1 + i] == src[i]); for (i = (d + n >= SIZEOF (src) ? d + n - SIZEOF (src) : 0); i < SIZEOF (src2); i++) ASSERT (dest[1 + SIZEOF (src) + i] == src2[i]); ASSERT (dest[1 + 2 * SIZEOF (src)] == MAGIC); } } } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-set.h�����������������������������������������������������0000664�0000000�0000000�00000002416�14110572173�0020711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_set() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { { #define NMAX 7 size_t n; for (n = 0; n <= NMAX; n++) { UNIT dest[1 + NMAX + 1] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; UNIT *ret; size_t i; ret = U_SET (dest + 1, VALUE, n); ASSERT (ret == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == VALUE); ASSERT (dest[1 + n] == MAGIC); } #undef NMAX } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-stpcpy.h��������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_stpcpy() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { /* Test small copying operations. */ { static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e', 0 }; size_t n; for (n = 1; n <= SIZEOF (src); n++) { UNIT dest[1 + SIZEOF (src) + 1] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; UNIT *result; size_t i; result = U_STPCPY (dest + 1, src + SIZEOF (src) - n); ASSERT (result == dest + n); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == src[SIZEOF (src) - n + i]); ASSERT (dest[1 + n] == MAGIC); } } return 0; } ��������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-stpncpy.h�������������������������������������������������0000664�0000000�0000000�00000004311�14110572173�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_stpncpy() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void check_single (const UNIT *input, size_t length, size_t n) { UNIT *dest; UNIT *result; size_t i; dest = (UNIT *) malloc ((1 + n + 1) * sizeof (UNIT)); ASSERT (dest != NULL); for (i = 0; i < 1 + n + 1; i++) dest[i] = MAGIC; result = U_STPNCPY (dest + 1, input, n); ASSERT (result == dest + 1 + (n <= length ? n : length)); ASSERT (dest[0] == MAGIC); for (i = 0; i < (n <= length ? n : length + 1); i++) ASSERT (dest[1 + i] == input[i]); for (; i < n; i++) ASSERT (dest[1 + i] == 0); ASSERT (dest[1 + n] == MAGIC); free (dest); } static void check (const UNIT *input, size_t input_length) { size_t length; size_t n; ASSERT (input_length > 0); ASSERT (input[input_length - 1] == 0); length = input_length - 1; /* = U_STRLEN (input) */ for (n = 0; n <= 2 * length + 2; n++) check_single (input, length, n); /* Check that U_STPNCPY (D, S, N) does not look at more than MIN (U_STRLEN (S) + 1, N) units. */ { char *page_boundary = (char *) zerosize_ptr (); if (page_boundary != NULL) { for (n = 0; n <= 2 * length + 2; n++) { size_t n_to_copy = (n <= length ? n : length + 1); UNIT *copy; size_t i; copy = (UNIT *) page_boundary - n_to_copy; for (i = 0; i < n_to_copy; i++) copy[i] = input[i]; check_single (copy, length, n); } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strcat.h��������������������������������������������������0000664�0000000�0000000�00000003552�14110572173�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcat() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { /* Test small copying operations. */ { static const UNIT base[] = { 'C', 'h', 'a', 'n', 'g', 'i', 'n', 'g', 0 }; static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e', 0 }; size_t m; size_t n; for (m = 0; m < SIZEOF (base); m++) for (n = 1; n <= SIZEOF (src); n++) { UNIT dest[1 + (SIZEOF (base) - 1) + SIZEOF (src) + 1] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; UNIT *result; size_t i; for (i = 0; i < m; i++) dest[1 + i] = base[i]; dest[1 + m] = 0; result = U_STRCAT (dest + 1, src + SIZEOF (src) - n); ASSERT (result == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < m; i++) ASSERT (dest[1 + i] == base[i]); for (i = 0; i < n; i++) ASSERT (dest[1 + m + i] == src[SIZEOF (src) - n + i]); ASSERT (dest[1 + m + n] == MAGIC); } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strchr.h��������������������������������������������������0000664�0000000�0000000�00000011154�14110572173�0021422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strchr() functions. Copyright (C) 2008-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini <bonzini@gnu.org>, 2010. Based on test-chr.h, by Eric Blake and Bruno Haible. */ static void 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); input32[0] = 'a'; input32[1] = 'b'; u32_set (input32 + 2, 'c', 1024); for (i = 1026; i < size - 2; i += 63) { size_t last = i + 63 < size - 2 ? i + 63 : size - 2; ucs4_t uc = 'd' | (i - 1026); if (uc >= 0xd800 && uc <= 0xdfff) uc |= 0x100000; u32_set (input32 + i, uc, last - i); } input32[size - 2] = 'e'; input32[size - 1] = 'a'; input32[size] = 0; input = U32_TO_U (input32, size + 1, NULL, &length); ASSERT (input); /* Basic behavior tests. */ ASSERT (U_STRCHR (input, 'a') == input); ASSERT (U_STRCHR (input, 'b') == input + 1); ASSERT (U_STRCHR (input, 'c') == input + 2); { UNIT *exp = input + 1026; UNIT *prev = input + 2; for (i = 1026; i < size - 2; i += 63) { UNIT c[6]; size_t n; ucs4_t uc = 'd' | (i - 1026); if (uc >= 0xd800 && uc <= 0xdfff) uc |= 0x100000; n = U_UCTOMB (c, uc, 6); ASSERT (exp < input + length - 2); ASSERT (U_STRCHR (prev, uc) == exp); ASSERT (memcmp (exp, c, n * sizeof (UNIT)) == 0); prev = exp; exp += n * 63; } } ASSERT (U_STRCHR (input + 1, 'a') == input + length - 2); ASSERT (U_STRCHR (input + 1, 'e') == input + length - 3); ASSERT (U_STRCHR (input, 'f') == NULL); ASSERT (U_STRCHR (input, '\0') == input + length - 1); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (U_STRCHR (input, 'c') == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 127; j++) input[i + j] = j + 1; input[i + 128] = 0; for (j = 0; j < 127; j++) { ASSERT (U_STRCHR (input + i, j + 1) == input + i + j); } } } /* Check that uN_strchr() does not read past the end of the string. */ { char *page_boundary = (char *) zerosize_ptr (); size_t n; if (page_boundary != NULL) { for (n = 2; n <= 500 / sizeof (UNIT); n++) { UNIT *mem = (UNIT *) (page_boundary - n * sizeof (UNIT)); U_SET (mem, 'X', n - 2); mem[n - 2] = 0; ASSERT (U_STRCHR (mem, 'U') == NULL); mem[n - 2] = 'X'; mem[n - 1] = 0; ASSERT (U_STRCHR (mem, 'U') == NULL); } } } #if 0 /* This check is disabled, because uN_strchr() is allowed to read past the first occurrence of the byte being searched. In fact, u8_strchr() does so, on i586 glibc systems: u8_strchr calls strchr, which in glibc/sysdeps/i386/i586/strchr.S loads the second word before the handling of the first word has been completed. */ /* Check that uN_strchr() does not read past the first occurrence of the byte being searched. */ { char *page_boundary = (char *) zerosize_ptr (); size_t n; if (page_boundary != NULL) { for (n = 2; n <= 500 / sizeof (UNIT); n++) { UNIT *mem = (UNIT *) (page_boundary - n * sizeof (UNIT)); U_SET (mem, 'X', n - 1); mem[n - 1] = 0; ASSERT (U_STRCHR (mem, 'U') == NULL); { size_t i; for (i = 0; i < n; i++) { mem[i] = 'U'; ASSERT (U_STRCHR (mem, 'U') == mem + i); mem[i] = 'X'; } } } } } #endif free (input); if (sizeof (UNIT) != sizeof (uint32_t)) free (input32); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strcmp.h��������������������������������������������������0000664�0000000�0000000�00000003701�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcmp() and uN_strcoll() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void test_strcmp (void) { { static const UNIT input1[] = { 0 }; static const UNIT input2[] = { 0 }; ASSERT (U_STRCMP (input1, input2) == 0); } { static const UNIT input1[] = { 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 0 }; ASSERT (U_STRCMP (input1, input2) == 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'b', 'a', 'r', 0 }; ASSERT (U_STRCMP (input1, input2) > 0); ASSERT (U_STRCMP (input2, input1) < 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 'b', 'a', 'r', 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } { static const UNIT input1[] = { 'o', 'o', 'm', 'p', 'h', 0 }; static const UNIT input2[] = { 'o', 'o', 'p', 's', 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } } ���������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strcpy.h��������������������������������������������������0000664�0000000�0000000�00000002702�14110572173�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcpy() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { /* Test small copying operations. */ { static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e', 0 }; size_t n; for (n = 1; n <= SIZEOF (src); n++) { UNIT dest[1 + SIZEOF (src) + 1] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; UNIT *result; size_t i; result = U_STRCPY (dest + 1, src + SIZEOF (src) - n); ASSERT (result == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < n; i++) ASSERT (dest[1 + i] == src[SIZEOF (src) - n + i]); ASSERT (dest[1 + n] == MAGIC); } } return 0; } ��������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strdup.h��������������������������������������������������0000664�0000000�0000000�00000002333�14110572173�0021435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strdup() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ int main () { /* Test small copying operations. */ { static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e', 0 }; size_t n; for (n = 1; n <= SIZEOF (src); n++) { UNIT *result = U_STRDUP (src + SIZEOF (src) - n); size_t i; ASSERT (result != NULL); for (i = 0; i < n; i++) ASSERT (result[i] == src[SIZEOF (src) - n + i]); free (result); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strncat.h�������������������������������������������������0000664�0000000�0000000�00000005042�14110572173�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncat() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void check_single (const UNIT *input, size_t length, size_t n) { static const UNIT base[] = { 'C', 'h', 'a', 'n', 'g', 'i', 'n', 'g', 0 }; size_t m; for (m = 0; m < SIZEOF (base); m++) { UNIT *dest; UNIT *result; size_t i; dest = (UNIT *) malloc ((1 + m + n + 2) * sizeof (UNIT)); ASSERT (dest != NULL); dest[0] = MAGIC; for (i = 0; i < m; i++) dest[1 + i] = base[i]; dest[1 + m] = 0; for (i = 1; i < n + 2; i++) dest[1 + m + i] = MAGIC; result = U_STRNCAT (dest + 1, input, n); ASSERT (result == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < m; i++) ASSERT (dest[1 + i] == base[i]); for (i = 0; i < (n <= length ? n : length); i++) ASSERT (dest[1 + m + i] == input[i]); ASSERT (dest[1 + m + i] == 0); ASSERT (dest[1 + m + i + 1] == MAGIC); free (dest); } } static void check (const UNIT *input, size_t input_length) { size_t length; size_t n; ASSERT (input_length > 0); ASSERT (input[input_length - 1] == 0); length = input_length - 1; /* = U_STRLEN (input) */ for (n = 0; n <= 2 * length + 2; n++) check_single (input, length, n); /* Check that U_STRNCAT (D, S, N) does not look at more than MIN (U_STRLEN (S) + 1, N) units. */ { char *page_boundary = (char *) zerosize_ptr (); if (page_boundary != NULL) { for (n = 0; n <= 2 * length + 2; n++) { size_t n_to_copy = (n <= length ? n : length + 1); UNIT *copy; size_t i; copy = (UNIT *) page_boundary - n_to_copy; for (i = 0; i < n_to_copy; i++) copy[i] = input[i]; check_single (copy, length, n); } } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strncmp.h�������������������������������������������������0000664�0000000�0000000�00000007346�14110572173�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncmp() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void test_strncmp (void) { { static const UNIT input1[] = { 0 }; static const UNIT input2[] = { 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) == 0); ASSERT (U_STRNCMP (input1, input2, 1000000) == 0); } { static const UNIT input1[] = { 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) < 0); ASSERT (U_STRNCMP (input2, input1, 1) > 0); ASSERT (U_STRNCMP (input1, input2, 3) < 0); ASSERT (U_STRNCMP (input2, input1, 3) > 0); ASSERT (U_STRNCMP (input1, input2, 4) < 0); ASSERT (U_STRNCMP (input2, input1, 4) > 0); ASSERT (U_STRNCMP (input1, input2, 1000000) < 0); ASSERT (U_STRNCMP (input2, input1, 1000000) > 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) == 0); ASSERT (U_STRNCMP (input1, input2, 2) == 0); ASSERT (U_STRNCMP (input1, input2, 3) == 0); ASSERT (U_STRNCMP (input1, input2, 4) == 0); ASSERT (U_STRNCMP (input1, input2, 1000000) == 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'b', 'a', 'r', 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) > 0); ASSERT (U_STRNCMP (input2, input1, 1) < 0); ASSERT (U_STRNCMP (input1, input2, 2) > 0); ASSERT (U_STRNCMP (input2, input1, 2) < 0); ASSERT (U_STRNCMP (input1, input2, 1000000) > 0); ASSERT (U_STRNCMP (input2, input1, 1000000) < 0); } { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 'f', 'o', 'o', 'b', 'a', 'r', 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) == 0); ASSERT (U_STRNCMP (input1, input2, 2) == 0); ASSERT (U_STRNCMP (input1, input2, 3) == 0); ASSERT (U_STRNCMP (input1, input2, 4) < 0); ASSERT (U_STRNCMP (input2, input1, 4) > 0); ASSERT (U_STRNCMP (input1, input2, 1000000) < 0); ASSERT (U_STRNCMP (input2, input1, 1000000) > 0); } { static const UNIT input1[] = { 'o', 'o', 'm', 'p', 'h', 0 }; static const UNIT input2[] = { 'o', 'o', 'p', 's', 0 }; ASSERT (U_STRNCMP (input1, input2, 0) == 0); ASSERT (U_STRNCMP (input1, input2, 1) == 0); ASSERT (U_STRNCMP (input1, input2, 2) == 0); ASSERT (U_STRNCMP (input1, input2, 3) < 0); ASSERT (U_STRNCMP (input2, input1, 3) > 0); ASSERT (U_STRNCMP (input1, input2, 4) < 0); ASSERT (U_STRNCMP (input2, input1, 4) > 0); ASSERT (U_STRNCMP (input1, input2, 5) < 0); ASSERT (U_STRNCMP (input2, input1, 5) > 0); ASSERT (U_STRNCMP (input1, input2, 6) < 0); ASSERT (U_STRNCMP (input2, input1, 6) > 0); ASSERT (U_STRNCMP (input1, input2, 1000000) < 0); ASSERT (U_STRNCMP (input2, input1, 1000000) > 0); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strncpy.h�������������������������������������������������0000664�0000000�0000000�00000004254�14110572173�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncpy() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void check_single (const UNIT *input, size_t length, size_t n) { UNIT *dest; UNIT *result; size_t i; dest = (UNIT *) malloc ((1 + n + 1) * sizeof (UNIT)); ASSERT (dest != NULL); for (i = 0; i < 1 + n + 1; i++) dest[i] = MAGIC; result = U_STRNCPY (dest + 1, input, n); ASSERT (result == dest + 1); ASSERT (dest[0] == MAGIC); for (i = 0; i < (n <= length ? n : length + 1); i++) ASSERT (dest[1 + i] == input[i]); for (; i < n; i++) ASSERT (dest[1 + i] == 0); ASSERT (dest[1 + n] == MAGIC); free (dest); } static void check (const UNIT *input, size_t input_length) { size_t length; size_t n; ASSERT (input_length > 0); ASSERT (input[input_length - 1] == 0); length = input_length - 1; /* = U_STRLEN (input) */ for (n = 0; n <= 2 * length + 2; n++) check_single (input, length, n); /* Check that U_STRNCPY (D, S, N) does not look at more than MIN (U_STRLEN (S) + 1, N) units. */ { char *page_boundary = (char *) zerosize_ptr (); if (page_boundary != NULL) { for (n = 0; n <= 2 * length + 2; n++) { size_t n_to_copy = (n <= length ? n : length + 1); UNIT *copy; size_t i; copy = (UNIT *) page_boundary - n_to_copy; for (i = 0; i < n_to_copy; i++) copy[i] = input[i]; check_single (copy, length, n); } } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-strnlen.h�������������������������������������������������0000664�0000000�0000000�00000003443�14110572173�0021604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strnlen() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void check_single (const UNIT *input, size_t length, size_t n) { size_t result = U_STRNLEN (input, n); ASSERT (result == (n <= length ? n : length)); } static void check (const UNIT *input, size_t input_length) { size_t length; size_t n; ASSERT (input_length > 0); ASSERT (input[input_length - 1] == 0); length = input_length - 1; /* = U_STRLEN (input) */ for (n = 0; n <= 2 * length + 2; n++) check_single (input, length, n); /* Check that U_STRNLEN (S, N) does not look at more than MIN (U_STRLEN (S) + 1, N) units. */ { char *page_boundary = (char *) zerosize_ptr (); if (page_boundary != NULL) { for (n = 0; n <= 2 * length + 2; n++) { size_t n_to_copy = (n <= length ? n : length + 1); UNIT *copy; size_t i; copy = (UNIT *) page_boundary - n_to_copy; for (i = 0; i < n_to_copy; i++) copy[i] = input[i]; check_single (copy, length, n); } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u-strstr.h������������������������������������������������0000664�0000000�0000000�00000017345�14110572173�0021730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strstr() functions. Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc. This 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/>. */ static void test_u_strstr (void) { { const UNIT input[] = { 'f', 'o', 'o', 0 }; const UNIT needle[] = { 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == input); } { const UNIT input[] = { 'f', 'o', 'o', 0 }; const UNIT needle[] = { 'o', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == input + 1); } { const UNIT input[] = { 'A', 'B', 'C', ' ', 'A', 'B', 'C', 'D', 'A', 'B', ' ', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0 }; const UNIT needle[] = { 'A', 'B', 'C', 'D', 'A', 'B', 'D', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == input + 15); } { const UNIT input[] = { 'A', 'B', 'C', ' ', 'A', 'B', 'C', 'D', 'A', 'B', ' ', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0 }; const UNIT needle[] = { 'A', 'B', 'C', 'D', 'A', 'B', 'E', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == NULL); } { const UNIT input[] = { 'A', 'B', 'C', ' ', 'A', 'B', 'C', 'D', 'A', 'B', ' ', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0 }; const UNIT needle[] = { 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == input + 11); } /* Check that a long periodic needle does not cause false positives. */ { const UNIT input[] = { 'F', '_', 'B', 'D', '_', 'C', 'E', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'C', '3', '_', '8', '8', '_', '2', '0', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'C', '3', '_', 'A', '7', '_', '2', '0', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', 0 }; const UNIT needle[] = { '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == NULL); } { const UNIT input[] = { 'F', '_', 'B', 'D', '_', 'C', 'E', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'C', '3', '_', '8', '8', '_', '2', '0', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'C', '3', '_', 'A', '7', '_', '2', '0', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'D', 'A', '_', 'B', '5', '_', 'C', '2', '_', 'A', '6', '_', '2', '0', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', 0 }; const UNIT needle[] = { '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', '_', 'E', 'F', '_', 'B', 'F', '_', 'B', 'D', 0 }; const UNIT *result = U_STRSTR (input, needle); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const UNIT needle[] = { 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 0 }; UNIT *haystack = (UNIT *) malloc ((m + 1) * sizeof (UNIT)); if (haystack != NULL) { size_t i; haystack[0] = 'B'; for (i = 1; i < m; i++) haystack[i] = 'A'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (U_STRSTR (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const UNIT haystack[] = { 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 0 }; UNIT *needle = (UNIT *) malloc ((m + 1) * sizeof (UNIT)); if (needle != NULL) { size_t i; for (i = 0; i < m; i++) needle[i] = 'A'; needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (U_STRSTR (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; UNIT *haystack = (UNIT *) malloc ((2 * m + 2) * sizeof (UNIT)); UNIT *needle = (UNIT *) malloc ((m + 2) * sizeof (UNIT)); if (haystack != NULL && needle != NULL) { size_t i; const UNIT *result; for (i = 0; i < 2 * m; i++) haystack[i] = 'A'; haystack[2 * m] = 'B'; haystack[2 * m + 1] = 0; for (i = 0; i < m; i++) needle[i] = 'A'; needle[m] = 'B'; needle[m + 1] = 0; result = U_STRSTR (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u-strtok.h������������������������������������������������0000664�0000000�0000000�00000005554�14110572173�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strtok() functions. Copyright (C) 2015-2021 Free Software Foundation, Inc. This 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/>. */ static void test_u_strtok (void) { { UNIT input[] = { 'f', 'o', 'o', 0 }; const UNIT delim[] = { 0 }; UNIT *state; const UNIT *result = U_STRTOK (input, delim, &state); ASSERT (result == input); } { UNIT input[] = { 'A', 'B', 'C', ' ', 'A', 'B', 'C', 'D', 'A', 'B', ' ', '\t', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0 }; const UNIT delim[] = { ' ', '\t', 0 }; UNIT *state; const UNIT *result; result = U_STRTOK (input, delim, &state); ASSERT (result == input); result = U_STRTOK (NULL, delim, &state); ASSERT (result == input + 4); result = U_STRTOK (NULL, delim, &state); ASSERT (result == input + 12); result = U_STRTOK (NULL, delim, &state); ASSERT (result == NULL); } /* Check for multibyte delimiters. */ { ucs4_t u_input[] = { 'A', 'B', 'C', 0x3000, 'A', 'B', 'C', 'D', 'A', 'B', 0x3000, 0x3001, '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); UNIT *state; const UNIT *result; UNIT *ptr, *first_ptr, *second_ptr; size_t i; for (i = 0, ptr = input; i < SIZEOF (u_input) && u_input[i] != 0; i++) { int ret = U_UCTOMB (ptr, u_input[i], input_len - (ptr - input)); if (i == 4) first_ptr = ptr; if (i == 12) second_ptr = ptr; ptr += ret; } *ptr = 0; for (i = 0, ptr = delim; i < SIZEOF (u_delim) && u_delim[i] != 0; i++) { int ret = U_UCTOMB (ptr, u_delim[i], delim_len - (ptr - delim)); ptr += ret; } *ptr = 0; result = U_STRTOK (input, delim, &state); ASSERT (result == input); result = U_STRTOK (NULL, delim, &state); ASSERT (result == first_ptr); result = U_STRTOK (NULL, delim, &state); ASSERT (result == second_ptr); result = U_STRTOK (NULL, delim, &state); ASSERT (result == NULL); free (input); free (delim); } } ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-check.c�����������������������������������������������0000664�0000000�0000000�00000004027�14110572173�0021577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_check() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Test empty string. */ { static const uint16_t input[] = { 0 }; ASSERT (u16_check (input, 0) == NULL); } /* Test valid non-empty string. */ { static const uint16_t input[] = /* "Данило Шеган" */ { 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, 0x0020, 0x0428, 0x0435, 0x0433, 0x0430, 0x043D }; ASSERT (u16_check (input, SIZEOF (input)) == NULL); } /* Test out-of-range character with 2 units: U+110000. */ { static const uint16_t input[] = { 0x0414, 0x0430, 0xDBFF, 0xE000 }; ASSERT (u16_check (input, SIZEOF (input)) == input + 2); } /* Test surrogate codepoints. */ { static const uint16_t input[] = { 0x0414, 0x0430, 0xDBFF, 0xDFFF }; ASSERT (u16_check (input, SIZEOF (input)) == NULL); } { static const uint16_t input[] = { 0x0414, 0x0430, 0xDBFF }; ASSERT (u16_check (input, SIZEOF (input)) == input + 2); } { static const uint16_t input[] = { 0x0414, 0x0430, 0xDFFF }; ASSERT (u16_check (input, SIZEOF (input)) == input + 2); } { static const uint16_t input[] = { 0x0414, 0x0430, 0xDFFF, 0xDBFF }; ASSERT (u16_check (input, SIZEOF (input)) == input + 2); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-chr.c�������������������������������������������������0000664�0000000�0000000�00000002055�14110572173�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_chr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_UCTOMB u16_uctomb #define U32_TO_U u32_to_u16 #define U_CHR u16_chr #define U_SET u16_set #include "test-chr.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-cmp.c�������������������������������������������������0000664�0000000�0000000�00000002544�14110572173�0021303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_CMP u16_cmp #define MAGIC 0xBADE #include "test-cmp.h" int main () { test_cmp (); /* Test comparison with non-BMP characters, split into surrogates. */ { static const UNIT input1[] = { 0xD835, 0xDD1E }; static const UNIT input2[] = { 0xFEFF, 0xFFE5 }; ASSERT (U_CMP (input1, input2, 2) > 0); ASSERT (U_CMP (input2, input1, 2) < 0); ASSERT (U_CMP (input1, input2, 1) > 0); ASSERT (U_CMP (input2, input1, 1) < 0); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-cmp2.c������������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0021370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cmp2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_CMP2 u16_cmp2 #define MAGIC 0xBADE #include "test-cmp2.h" ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-cpy-alloc.c�������������������������������������������0000664�0000000�0000000�00000001711�14110572173�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cpy_alloc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "macros.h" #define UNIT uint16_t #define U_CPY_ALLOC u16_cpy_alloc #include "test-cpy-alloc.h" �������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-cpy.c�������������������������������������������������0000664�0000000�0000000�00000001661�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_CPY u16_cpy #define MAGIC 0xBADE #include "test-cpy.h" �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mblen.c�����������������������������������������������0000664�0000000�0000000�00000003646�14110572173�0021625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test zero-length input. */ { static const uint16_t input[] = { 0 }; ret = u16_mblen (input, 0); ASSERT (ret == -1); } /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; ret = u16_mblen (input, 1); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[1]; for (c = 1; c < 0x80; c++) { buf[0] = c; ret = u16_mblen (buf, 1); ASSERT (ret == 1); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC }; ret = u16_mblen (input, 1); ASSERT (ret == 1); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F }; ret = u16_mblen (input, 2); ASSERT (ret == 2); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835 }; ret = u16_mblen (input, 1); ASSERT (ret == -1); } { static const uint16_t input[] = { 0xDD1F }; ret = u16_mblen (input, 1); ASSERT (ret == -1); } return 0; } ������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mbsnlen.c���������������������������������������������0000664�0000000�0000000�00000004135�14110572173�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbsnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; size_t n; for (n = 0; n <= SIZEOF (input); n++) { size_t len = u16_mbsnlen (input, n); ASSERT (len == n); } } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E }; static const size_t expected[SIZEOF (input) + 1] = { 0, 1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 8, 9, 10, 10 }; size_t n; for (n = 0; n <= SIZEOF (input); n++) { size_t len = u16_mbsnlen (input, n); ASSERT (len == expected[n]); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mbtouc-unsafe.c���������������������������������������0000664�0000000�0000000�00000001704�14110572173�0023271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc_unsafe() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u16-mbtouc.h" int main () { test_function (u16_mbtouc_unsafe); return 0; } ������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mbtouc.c����������������������������������������������0000664�0000000�0000000�00000001666�14110572173�0022021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u16-mbtouc.h" int main () { test_function (u16_mbtouc); return 0; } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mbtouc.h����������������������������������������������0000664�0000000�0000000�00000004227�14110572173�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc() and u16_mbtouc_unsafe() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void test_function (int (*my_u16_mbtouc) (ucs4_t *, const uint16_t *, size_t)) { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC }; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F }; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835 }; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, input, 1); ASSERT (ret == 1 || ret == 2); ASSERT (uc == 0xFFFD); } { static const uint16_t input[] = { 0xDD1F }; uc = 0xBADFACE; ret = my_u16_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-mbtoucr.c���������������������������������������������0000664�0000000�0000000�00000004153�14110572173�0022175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtoucr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC }; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F }; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835 }; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, input, 1); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint16_t input[] = { 0xDD1F }; uc = 0xBADFACE; ret = u16_mbtoucr (&uc, input, 1); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-move.c������������������������������������������������0000664�0000000�0000000�00000001665�14110572173�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_move() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_MOVE u16_move #define MAGIC 0xBADE #include "test-move.h" ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-next.c������������������������������������������������0000664�0000000�0000000�00000004215�14110572173�0021477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_next() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; const uint16_t *ret; /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; uc = 0xBADFACE; ret = u16_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u16_next (&uc, buf); ASSERT (ret == buf + 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC, 0 }; uc = 0xBADFACE; ret = u16_next (&uc, input); ASSERT (ret == input + 1); ASSERT (uc == 0x20AC); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F, 0 }; uc = 0xBADFACE; ret = u16_next (&uc, input); ASSERT (ret == input + 2); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835, 0 }; uc = 0xBADFACE; ret = u16_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint16_t input[] = { 0xDD1F, 0 }; uc = 0xBADFACE; ret = u16_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-prev.c������������������������������������������������0000664�0000000�0000000�00000007374�14110572173�0021506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_prev() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" static int check (const uint16_t *input, size_t input_length, ucs4_t *puc) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ if (u16_prev (&uc, input + input_length, input) != input) return 1; /* Test recognition when preceded by a 1-unit character. */ { uint16_t buf[100]; uint16_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0x2102; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u16_prev (&uc1, ptr + input_length, buf) != ptr) return 2; if (uc1 != uc) return 3; } /* Test recognition when preceded by a 2-unit character. */ { uint16_t buf[100]; uint16_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0xD835; *ptr++ = 0xDD1E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u16_prev (&uc1, ptr + input_length, buf) != ptr) return 4; if (uc1 != uc) return 5; } *puc = uc; return 0; } static int check_invalid (const uint16_t *input, size_t input_length) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ uc = 0xBADFACE; if (u16_prev (&uc, input + input_length, input) != NULL) return 1; if (uc != 0xBADFACE) return 2; /* Test recognition when preceded by a 1-unit character. */ { uint16_t buf[100]; uint16_t *ptr; size_t i; ptr = buf; *ptr++ = 0x2102; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u16_prev (&uc, ptr + input_length, buf) != NULL) return 3; if (uc != 0xBADFACE) return 4; } /* Test recognition when preceded by a 2-unit character. */ { uint16_t buf[100]; uint16_t *ptr; size_t i; ptr = buf; *ptr++ = 0xD835; *ptr++ = 0xDD1E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u16_prev (&uc, ptr + input_length, buf) != NULL) return 5; if (uc != 0xBADFACE) return 6; } return 0; } int main () { ucs4_t uc; /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ASSERT (check (buf, 1, &uc) == 0); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x20AC); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint16_t input[] = { 0xDD1F }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-set.c�������������������������������������������������0000664�0000000�0000000�00000001706�14110572173�0021316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_set() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_SET u16_set #define MAGIC 0xBADE #define VALUE 0x2102 #include "test-set.h" ����������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-stpcpy.c����������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_stpcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STPCPY u16_stpcpy #define MAGIC 0xBADE #include "test-stpcpy.h" �������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-stpncpy.c���������������������������������������������0000664�0000000�0000000�00000003604�14110572173�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_stpncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include <stdlib.h> #include "zerosize-ptr.h" #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STPNCPY u16_stpncpy #define MAGIC 0xBADE #include "test-stpncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E, 0 }; check (input, SIZEOF (input)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strcat.c����������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STRCAT u16_strcat #define MAGIC 0xBADE #include "test-strcat.h" �������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strchr.c����������������������������������������������0000664�0000000�0000000�00000002156�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strchr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini <bonzini@gnu.org>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_UCTOMB u16_uctomb #define U32_TO_U u32_to_u16 #define U_STRCHR u16_strchr #define U_SET u16_set #include "test-strchr.h" int main (void) { test_strchr (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strcmp.c����������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u16_strcmp #include "test-u16-strcmp.h" int main () { test_u16_strcmp (); return 0; } ������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strcmp.h����������������������������������������������0000664�0000000�0000000�00000002665�14110572173�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcmp() and u16_strcoll() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define UNIT uint16_t #include "test-strcmp.h" static void test_u16_strcmp (void) { test_strcmp (); /* Test comparison between ASCII and non-ASCII characters. */ { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 0x2022, 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } /* Test comparison with non-BMP characters, split into surrogates. */ { static const UNIT input1[] = { 0xD835, 0xDD1E, 0 }; static const UNIT input2[] = { 0xFEFF, 0 }; ASSERT (U_STRCMP (input1, input2) > 0); ASSERT (U_STRCMP (input2, input1) < 0); } } ���������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strcoll.c���������������������������������������������0000664�0000000�0000000�00000002511�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcoll() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u16_strcoll #include "test-u16-strcmp.h" int main () { /* This test relies on three facts: - setlocale is not being called, therefore the locale is the "C" locale. - In the "C" locale, strcoll is equivalent to strcmp. - In the u16_strcoll implementation, Unicode strings that are not convertible to the locale encoding are sorted higher than convertible strings and compared according to u16_strcmp. */ test_u16_strcmp (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strcpy.c����������������������������������������������0000664�0000000�0000000�00000001675�14110572173�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STRCPY u16_strcpy #define MAGIC 0xBADE #include "test-strcpy.h" �������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strdup.c����������������������������������������������0000664�0000000�0000000�00000001650�14110572173�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strdup() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STRDUP u16_strdup #include "test-strdup.h" ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strlen.c����������������������������������������������0000664�0000000�0000000�00000003611�14110572173�0022027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Empty string. */ { static const uint16_t input[] = { 0 }; ASSERT (u16_strlen (input) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; ASSERT (u16_strlen (input) == SIZEOF (input) - 1); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E, 0 }; ASSERT (u16_strlen (input) == SIZEOF (input) - 1); } return 0; } �����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strmblen.c��������������������������������������������0000664�0000000�0000000�00000003474�14110572173�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strmblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; ret = u16_strmblen (input); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; ret = u16_strmblen (buf); ASSERT (ret == 1); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC, 0 }; ret = u16_strmblen (input); ASSERT (ret == 1); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F, 0 }; ret = u16_strmblen (input); ASSERT (ret == 2); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835, 0 }; ret = u16_strmblen (input); ASSERT (ret == -1); } { static const uint16_t input[] = { 0xDD1F, 0 }; ret = u16_strmblen (input); ASSERT (ret == -1); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strmbtouc.c�������������������������������������������0000664�0000000�0000000�00000004215�14110572173�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strmbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint16_t input[] = { 0 }; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, input); ASSERT (ret == 0); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint16_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, buf); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint16_t input[] = { 0x20AC, 0 }; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, input); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test 2-units character input. */ { static const uint16_t input[] = { 0xD835, 0xDD1F, 0 }; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, input); ASSERT (ret == 2); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint16_t input[] = { 0xD835, 0 }; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint16_t input[] = { 0xDD1F, 0 }; uc = 0xBADFACE; ret = u16_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strncat.c���������������������������������������������0000664�0000000�0000000�00000003604�14110572173�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_STRNCAT u16_strncat #define MAGIC 0xBADE #include "test-strncat.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E, 0 }; check (input, SIZEOF (input)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strncmp.c���������������������������������������������0000664�0000000�0000000�00000002703�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint16_t #define U_STRNCMP u16_strncmp #include "test-strncmp.h" int main () { test_strncmp (); /* Test comparison with non-BMP characters, split into surrogates. */ { static const UNIT input1[] = { 0xD835, 0xDD1E, 0 }; static const UNIT input2[] = { 0xFEFF, 0 }; ASSERT (U_STRNCMP (input1, input2, 1) > 0); ASSERT (U_STRNCMP (input2, input1, 1) < 0); ASSERT (U_STRNCMP (input1, input2, 2) > 0); ASSERT (U_STRNCMP (input2, input1, 2) < 0); ASSERT (U_STRNCMP (input1, input2, 1000000) > 0); ASSERT (U_STRNCMP (input2, input1, 1000000) < 0); } return 0; } �������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strncpy.c���������������������������������������������0000664�0000000�0000000�00000003604�14110572173�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_STRNCPY u16_strncpy #define MAGIC 0xBADE #include "test-strncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E, 0 }; check (input, SIZEOF (input)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strnlen.c���������������������������������������������0000664�0000000�0000000�00000003532�14110572173�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint16_t #define U_STRNLEN u16_strnlen #include "test-strnlen.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E, 0 }; check (input, SIZEOF (input)); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strstr.c����������������������������������������������0000664�0000000�0000000�00000002400�14110572173�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strstr() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Pádraig Brady <P@draigBrady.com>, 2011. */ #include <config.h> #include "unistr.h" #include <stdint.h> #include <stdlib.h> #include <signal.h> /* For signal. */ #include <unistd.h> /* For alarm. */ #include "macros.h" #define UNIT uint16_t #define U_STRSTR u16_strstr #include "test-u-strstr.h" int main (void) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (10); #endif test_u_strstr (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-strtok.c����������������������������������������������0000664�0000000�0000000�00000001754�14110572173�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strtok() function. Copyright (C) 2015-2021 Free Software Foundation, Inc. This 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 "unistr.h" #include <stdint.h> #include <stdlib.h> #include "macros.h" #define UNIT uint16_t #define U_STRTOK u16_strtok #define U_UCTOMB u16_uctomb #include "test-u-strtok.h" int main (void) { test_u_strtok (); return 0; } ��������������������gnulib-20210822~d383792/tests/unistr/test-u16-to-u32.c����������������������������������������������0000664�0000000�0000000�00000012106�14110572173�0021550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_to_u32() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_to_u32 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u16_to_u32 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u16_to_u32 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint32_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E }; static const uint32_t expected[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint16_t input[] = { 'x', 0xDD1E, 0xD835, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint32_t expected[] = { 'x', 0xFFFD, 0xFFFD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint32_t *result; uint32_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u16_to_u32 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u16_to_u32 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u16_to_u32 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-to-u8.c�����������������������������������������������0000664�0000000�0000000�00000012443�14110572173�0021477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_to_u8() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint16_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u16_to_u8 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u16_to_u8 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u16_to_u8 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint16_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint8_t expected[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint16_t input[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E }; static const uint8_t expected[] = { '-', '(', 0xF0, 0x9D, 0x94, 0x9E, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9F, ')', '=', 0xF0, 0x9D, 0x94, 0x9F, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint16_t input[] = { 'x', 0xDD1E, 0xD835, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint8_t expected[] = { 'x', 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint8_t *result; uint8_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u16_to_u8 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u16_to_u8 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u16_to_u8 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u16-uctomb.c����������������������������������������������0000664�0000000�0000000�00000005160�14110572173�0022012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_uctomb() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define MAGIC 0xBADE int main () { /* Test ISO 646 character, in particular the NUL character. */ { ucs4_t uc; for (uc = 0; uc < 0x80; uc++) { uint16_t buf[3] = { MAGIC, MAGIC, MAGIC }; int ret; ret = u16_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u16_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } } /* Test BMP character. */ { ucs4_t uc = 0x20AC; uint16_t buf[3] = { MAGIC, MAGIC, MAGIC }; int ret; ret = u16_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u16_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } /* Test non-BMP character. */ { ucs4_t uc = 0x10FFFD; uint16_t buf[3] = { MAGIC, MAGIC, MAGIC }; int ret; ret = u16_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u16_uctomb (buf, uc, 1); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u16_uctomb (buf, uc, 2); ASSERT (ret == 2); ASSERT (buf[0] == 0xDBFF); ASSERT (buf[1] == 0xDFFD); ASSERT (buf[2] == MAGIC); } /* Test invalid characters. */ { ucs4_t invalid[] = { 0x110000, 0xD800, 0xDBFF, 0xDC00, 0xDFFF }; uint16_t buf[3] = { MAGIC, MAGIC, MAGIC }; size_t i; for (i = 0; i < SIZEOF (invalid); i++) { ucs4_t uc = invalid[i]; int n; for (n = 0; n <= 2; n++) { int ret = u16_uctomb (buf, uc, n); ASSERT (ret == -1); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); ASSERT (buf[2] == MAGIC); } } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-check.c�����������������������������������������������0000664�0000000�0000000�00000004025�14110572173�0021573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_check() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Test empty string. */ { static const uint32_t input[] = { 0 }; ASSERT (u32_check (input, 0) == NULL); } /* Test valid non-empty string. */ { static const uint32_t input[] = /* "Данило Шеган" */ { 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, 0x0020, 0x0428, 0x0435, 0x0433, 0x0430, 0x043D }; ASSERT (u32_check (input, SIZEOF (input)) == NULL); } /* Test out-of-range character with 1 unit: U+110000. */ { static const uint32_t input[] = { 0x0414, 0x0430, 0x110000 }; ASSERT (u32_check (input, SIZEOF (input)) == input + 2); } /* Test surrogate codepoints. */ { static const uint32_t input[] = { 0x0414, 0x0430, 0xDBFF, 0xDFFF }; ASSERT (u32_check (input, SIZEOF (input)) == input + 2); } { static const uint32_t input[] = { 0x0414, 0x0430, 0xDBFF }; ASSERT (u32_check (input, SIZEOF (input)) == input + 2); } { static const uint32_t input[] = { 0x0414, 0x0430, 0xDFFF }; ASSERT (u32_check (input, SIZEOF (input)) == input + 2); } { static const uint32_t input[] = { 0x0414, 0x0430, 0xDFFF, 0xDBFF }; ASSERT (u32_check (input, SIZEOF (input)) == input + 2); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-chr.c�������������������������������������������������0000664�0000000�0000000�00000002137�14110572173�0021274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_chr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_UCTOMB(s, uc, n) (*(s) = (uc), 1) #define U32_TO_U(s, n, result, length) (*(length) = (n), (s)) #define U_CHR u32_chr #define U_SET u32_set #include "test-chr.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-cmp.c�������������������������������������������������0000664�0000000�0000000�00000002351�14110572173�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_CMP u32_cmp #define MAGIC 0xBADFACE #include "test-cmp.h" int main () { test_cmp (); /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0x1D51F }; static const UNIT input2[] = { 0xFEFF }; ASSERT (U_CMP (input1, input2, 1) > 0); ASSERT (U_CMP (input2, input1, 1) < 0); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-cmp2.c������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0021362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cmp2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_CMP2 u32_cmp2 #define MAGIC 0xBADFACE #include "test-cmp2.h" ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-cpy-alloc.c�������������������������������������������0000664�0000000�0000000�00000001711�14110572173�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cpy_alloc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "macros.h" #define UNIT uint32_t #define U_CPY_ALLOC u32_cpy_alloc #include "test-cpy-alloc.h" �������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-cpy.c�������������������������������������������������0000664�0000000�0000000�00000001664�14110572173�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_CPY u32_cpy #define MAGIC 0xBADFACE #include "test-cpy.h" ����������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mblen.c�����������������������������������������������0000664�0000000�0000000�00000003454�14110572173�0021620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test zero-length input. */ { static const uint32_t input[] = { 0 }; ret = u32_mblen (input, 0); ASSERT (ret == -1); } /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; ret = u32_mblen (input, 1); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[1]; for (c = 1; c < 0x80; c++) { buf[0] = c; ret = u32_mblen (buf, 1); ASSERT (ret == 1); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC }; ret = u32_mblen (input, 1); ASSERT (ret == 1); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F }; ret = u32_mblen (input, 1); ASSERT (ret == 1); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000 }; ret = u32_mblen (input, 1); ASSERT (ret == -1); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mbsnlen.c���������������������������������������������0000664�0000000�0000000�00000003661�14110572173�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbsnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; size_t n; for (n = 0; n <= SIZEOF (input); n++) { size_t len = u32_mbsnlen (input, n); ASSERT (len == n); } } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E }; size_t n; for (n = 0; n <= SIZEOF (input); n++) { size_t len = u32_mbsnlen (input, n); ASSERT (len == n); } } return 0; } �������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mbtouc-unsafe.c���������������������������������������0000664�0000000�0000000�00000001704�14110572173�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc_unsafe() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u32-mbtouc.h" int main () { test_function (u32_mbtouc_unsafe); return 0; } ������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mbtouc.c����������������������������������������������0000664�0000000�0000000�00000001666�14110572173�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u32-mbtouc.h" int main () { test_function (u32_mbtouc); return 0; } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mbtouc.h����������������������������������������������0000664�0000000�0000000�00000003732�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc() and u32_mbtouc_unsafe() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void test_function (int (*my_u32_mbtouc) (ucs4_t *, const uint32_t *, size_t)) { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; uc = 0xBADFACE; ret = my_u32_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = my_u32_mbtouc (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC }; uc = 0xBADFACE; ret = my_u32_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F }; uc = 0xBADFACE; ret = my_u32_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000 }; uc = 0xBADFACE; ret = my_u32_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } } ��������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-mbtoucr.c���������������������������������������������0000664�0000000�0000000�00000003673�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtoucr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; uc = 0xBADFACE; ret = u32_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = u32_mbtoucr (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC }; uc = 0xBADFACE; ret = u32_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F }; uc = 0xBADFACE; ret = u32_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000 }; uc = 0xBADFACE; ret = u32_mbtoucr (&uc, input, 1); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } return 0; } ���������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-move.c������������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0021467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_move() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_MOVE u32_move #define MAGIC 0xBADFACE #include "test-move.h" ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-next.c������������������������������������������������0000664�0000000�0000000�00000003736�14110572173�0021504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_next() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; const uint32_t *ret; /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; uc = 0xBADFACE; ret = u32_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u32_next (&uc, buf); ASSERT (ret == buf + 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC, 0 }; uc = 0xBADFACE; ret = u32_next (&uc, input); ASSERT (ret == input + 1); ASSERT (uc == 0x20AC); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F, 0 }; uc = 0xBADFACE; ret = u32_next (&uc, input); ASSERT (ret == input + 1); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000, 0 }; uc = 0xBADFACE; ret = u32_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } return 0; } ����������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-prev.c������������������������������������������������0000664�0000000�0000000�00000005613�14110572173�0021476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_prev() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" static int check (const uint32_t *input, size_t input_length, ucs4_t *puc) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ if (u32_prev (&uc, input + input_length, input) != input) return 1; /* Test recognition when preceded by a 1-unit character. */ { uint32_t buf[100]; uint32_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0x1D51E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u32_prev (&uc1, ptr + input_length, buf) != ptr) return 2; if (uc1 != uc) return 3; } *puc = uc; return 0; } static int check_invalid (const uint32_t *input, size_t input_length) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ uc = 0xBADFACE; if (u32_prev (&uc, input + input_length, input) != NULL) return 1; if (uc != 0xBADFACE) return 2; /* Test recognition when preceded by a 1-unit character. */ { uint32_t buf[100]; uint32_t *ptr; size_t i; ptr = buf; *ptr++ = 0x1D51E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u32_prev (&uc, ptr + input_length, buf) != NULL) return 3; if (uc != 0xBADFACE) return 4; } return 0; } int main () { ucs4_t uc; /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ASSERT (check (buf, 1, &uc) == 0); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x20AC); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } return 0; } ���������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-set.c�������������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0021311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_set() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_SET u32_set #define MAGIC 0xBADFACE #define VALUE 0x1D51E #include "test-set.h" ������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-stpcpy.c����������������������������������������������0000664�0000000�0000000�00000001700�14110572173�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_stpcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_STPCPY u32_stpcpy #define MAGIC 0xBADFACE #include "test-stpcpy.h" ����������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-stpncpy.c���������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_stpncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_STPNCPY u32_stpncpy #define MAGIC 0xBADFACE #include "test-stpncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E, 0 }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strcat.c����������������������������������������������0000664�0000000�0000000�00000001700�14110572173�0022013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_STRCAT u32_strcat #define MAGIC 0xBADFACE #include "test-strcat.h" ����������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strchr.c����������������������������������������������0000664�0000000�0000000�00000002240�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strchr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini <bonzini@gnu.org>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_UCTOMB(s, uc, n) (*(s) = (uc), 1) #define U32_TO_U(s, n, result, length) (*(length) = (n), (s)) #define U_STRCHR u32_strchr #define U_SET u32_set #include "test-strchr.h" int main (void) { test_strchr (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strcmp.c����������������������������������������������0000664�0000000�0000000�00000001712�14110572173�0022026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u32_strcmp #include "test-u32-strcmp.h" int main () { test_u32_strcmp (); return 0; } ������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strcmp.h����������������������������������������������0000664�0000000�0000000�00000002627�14110572173�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcmp() and u32_strcoll() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define UNIT uint32_t #include "test-strcmp.h" static void test_u32_strcmp (void) { test_strcmp (); /* Test comparison between ASCII and non-ASCII characters. */ { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 0x2022, 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0x1D51F, 0 }; static const UNIT input2[] = { 0xFEFF, 0 }; ASSERT (U_STRCMP (input1, input2) > 0); ASSERT (U_STRCMP (input2, input1) < 0); } } ���������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strcoll.c���������������������������������������������0000664�0000000�0000000�00000002511�14110572173�0022176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcoll() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u32_strcoll #include "test-u32-strcmp.h" int main () { /* This test relies on three facts: - setlocale is not being called, therefore the locale is the "C" locale. - In the "C" locale, strcoll is equivalent to strcmp. - In the u32_strcoll implementation, Unicode strings that are not convertible to the locale encoding are sorted higher than convertible strings and compared according to u32_strcmp. */ test_u32_strcmp (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strcpy.c����������������������������������������������0000664�0000000�0000000�00000001700�14110572173�0022037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_STRCPY u32_strcpy #define MAGIC 0xBADFACE #include "test-strcpy.h" ����������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strdup.c����������������������������������������������0000664�0000000�0000000�00000001650�14110572173�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strdup() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_STRDUP u32_strdup #include "test-strdup.h" ����������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strlen.c����������������������������������������������0000664�0000000�0000000�00000003555�14110572173�0022034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Empty string. */ { static const uint32_t input[] = { 0 }; ASSERT (u32_strlen (input) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; ASSERT (u32_strlen (input) == SIZEOF (input) - 1); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E, 0 }; ASSERT (u32_strlen (input) == SIZEOF (input) - 1); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strmblen.c��������������������������������������������0000664�0000000�0000000�00000003277�14110572173�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strmblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; ret = u32_strmblen (input); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; ret = u32_strmblen (buf); ASSERT (ret == 1); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC, 0 }; ret = u32_strmblen (input); ASSERT (ret == 1); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F, 0 }; ret = u32_strmblen (input); ASSERT (ret == 1); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000, 0 }; ret = u32_strmblen (input); ASSERT (ret == -1); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strmbtouc.c�������������������������������������������0000664�0000000�0000000�00000003730�14110572173�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strmbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint32_t input[] = { 0 }; uc = 0xBADFACE; ret = u32_strmbtouc (&uc, input); ASSERT (ret == 0); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint32_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u32_strmbtouc (&uc, buf); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test BMP unit input. */ { static const uint32_t input[] = { 0x20AC, 0 }; uc = 0xBADFACE; ret = u32_strmbtouc (&uc, input); ASSERT (ret == 1); ASSERT (uc == 0x20AC); } /* Test non-BMP unit input. */ { static const uint32_t input[] = { 0x1D51F, 0 }; uc = 0xBADFACE; ret = u32_strmbtouc (&uc, input); ASSERT (ret == 1); ASSERT (uc == 0x1D51F); } /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000, 0 }; uc = 0xBADFACE; ret = u32_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } return 0; } ����������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strncat.c���������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_STRNCAT u32_strncat #define MAGIC 0xBADFACE #include "test-strncat.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E, 0 }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strncmp.c���������������������������������������������0000664�0000000�0000000�00000002645�14110572173�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint32_t #define U_STRNCMP u32_strncmp #include "test-strncmp.h" int main () { test_strncmp (); /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0x1D51F, 0 }; static const UNIT input2[] = { 0xFEFF, 0 }; ASSERT (U_STRNCMP (input1, input2, 1) > 0); ASSERT (U_STRNCMP (input2, input1, 1) < 0); ASSERT (U_STRNCMP (input1, input2, 2) > 0); ASSERT (U_STRNCMP (input2, input1, 2) < 0); ASSERT (U_STRNCMP (input1, input2, 1000000) > 0); ASSERT (U_STRNCMP (input2, input1, 1000000) < 0); } return 0; } �������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strncpy.c���������������������������������������������0000664�0000000�0000000�00000003553�14110572173�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_STRNCPY u32_strncpy #define MAGIC 0xBADFACE #include "test-strncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E, 0 }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strnlen.c���������������������������������������������0000664�0000000�0000000�00000003476�14110572173�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint32_t #define U_STRNLEN u32_strnlen #include "test-strnlen.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, 0 }; check (input, SIZEOF (input)); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E, 0 }; check (input, SIZEOF (input)); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strstr.c����������������������������������������������0000664�0000000�0000000�00000002400�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strstr() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Pádraig Brady <P@draigBrady.com>, 2011. */ #include <config.h> #include "unistr.h" #include <stdint.h> #include <stdlib.h> #include <signal.h> /* For signal. */ #include <unistd.h> /* For alarm. */ #include "macros.h" #define UNIT uint32_t #define U_STRSTR u32_strstr #include "test-u-strstr.h" int main (void) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ signal (SIGALRM, SIG_DFL); alarm (10); #endif test_u_strstr (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-strtok.c����������������������������������������������0000664�0000000�0000000�00000001754�14110572173�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strtok() function. Copyright (C) 2015-2021 Free Software Foundation, Inc. This 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 "unistr.h" #include <stdint.h> #include <stdlib.h> #include "macros.h" #define UNIT uint32_t #define U_STRTOK u32_strtok #define U_UCTOMB u32_uctomb #include "test-u-strtok.h" int main (void) { test_u_strtok (); return 0; } ��������������������gnulib-20210822~d383792/tests/unistr/test-u32-to-u16.c����������������������������������������������0000664�0000000�0000000�00000012114�14110572173�0021547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_to_u16() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_to_u16 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u32_to_u16 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u32_to_u16 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint16_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E }; static const uint16_t expected[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint32_t input[] = { 'x', 0x340000, 0x50000000, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint16_t expected[] = { 'x', 0xFFFD, 0xFFFD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint16_t *result; uint16_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u32_to_u16 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u32_to_u16 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u32_to_u16 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-to-u8.c�����������������������������������������������0000664�0000000�0000000�00000012415�14110572173�0021474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_to_u8() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint32_t *input, size_t input_length, const uint8_t *expected, size_t expected_length) { size_t length; uint8_t *result; /* Test return conventions with resultbuf == NULL. */ result = u32_to_u8 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u8_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint8_t *preallocated; length = expected_length - 1; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u32_to_u8 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u8_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint8_t *preallocated; length = expected_length; preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); result = u32_to_u8 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u8_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint32_t input[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; static const uint8_t expected[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint32_t input[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E }; static const uint8_t expected[] = { '-', '(', 0xF0, 0x9D, 0x94, 0x9E, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9F, ')', '=', 0xF0, 0x9D, 0x94, 0x9F, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint32_t input[] = { 'x', 0x340000, 0x50000000, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint8_t expected[] = { 'x', 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint8_t *result; uint8_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u32_to_u8 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u32_to_u8 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u32_to_u8 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u32-uctomb.c����������������������������������������������0000664�0000000�0000000�00000004664�14110572173�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_uctomb() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define MAGIC 0xBADFACE int main () { /* Test ISO 646 character, in particular the NUL character. */ { ucs4_t uc; for (uc = 0; uc < 0x80; uc++) { uint32_t buf[2] = { MAGIC, MAGIC }; int ret; ret = u32_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u32_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } } /* Test BMP character. */ { ucs4_t uc = 0x20AC; uint32_t buf[2] = { MAGIC, MAGIC }; int ret; ret = u32_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u32_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } /* Test non-BMP character. */ { ucs4_t uc = 0x10FFFD; uint32_t buf[2] = { MAGIC, MAGIC }; int ret; ret = u32_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u32_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } /* Test invalid characters. */ { ucs4_t invalid[] = { 0x110000, 0xD800, 0xDBFF, 0xDC00, 0xDFFF }; uint32_t buf[2] = { MAGIC, MAGIC }; size_t i; for (i = 0; i < SIZEOF (invalid); i++) { ucs4_t uc = invalid[i]; int n; for (n = 0; n <= 2; n++) { int ret = u32_uctomb (buf, uc, n); ASSERT (ret == -1); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); } } } return 0; } ����������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-check.c������������������������������������������������0000664�0000000�0000000�00000013717�14110572173�0021526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_check() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Test empty string. */ { static const uint8_t input[] = ""; ASSERT (u8_check (input, 0) == NULL); } /* Test valid non-empty string. */ { static const uint8_t input[] = /* "Данило Шеган" */ "\320\224\320\260\320\275\320\270\320\273\320\276 \320\250\320\265\320\263\320\260\320\275"; ASSERT (u8_check (input, sizeof (input) - 1) == NULL); } /* Test out-of-range character with 4 bytes: U+110000. */ { static const uint8_t input[] = "\320\224\320\260\364\220\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test out-of-range character with 5 bytes: U+200000. */ { static const uint8_t input[] = "\320\224\320\260\370\210\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test out-of-range character with 6 bytes: U+4000000. */ { static const uint8_t input[] = "\320\224\320\260\374\204\200\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test invalid lead byte. */ { static const uint8_t input[] = "\320\224\320\260\376\200\200\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\377\200\200\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test overlong 2-byte character. */ { static const uint8_t input[] = "\320\224\320\260\301\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test overlong 3-byte character. */ { static const uint8_t input[] = "\320\224\320\260\340\200\277"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test overlong 4-byte character. */ { static const uint8_t input[] = "\320\224\320\260\360\200\277\277"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test invalid bytes in 2-byte character. */ { static const uint8_t input[] = "\320\224\320\260\302\200"; ASSERT (u8_check (input, sizeof (input) - 1) == NULL); } { static const uint8_t input[] = "\320\224\320\260\302\100"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\302\300"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test invalid bytes in 3-byte character. */ { static const uint8_t input[] = "\320\224\320\260\342\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == NULL); } { static const uint8_t input[] = "\320\224\320\260\342\100\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\342\300\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\342\200\100"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\342\200\300"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test invalid bytes in 4-byte character. */ { static const uint8_t input[] = "\320\224\320\260\362\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == NULL); } { static const uint8_t input[] = "\320\224\320\260\362\100\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\362\300\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\362\200\100\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\362\200\300\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\362\200\200\100"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\362\200\200\300"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test truncated/incomplete 2-byte character. */ { static const uint8_t input[] = "\320\224\320\260\302"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test truncated/incomplete 3-byte character. */ { static const uint8_t input[] = "\320\224\320\260\342\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test truncated/incomplete 4-byte character. */ { static const uint8_t input[] = "\320\224\320\260\362\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test missing lead byte. */ { static const uint8_t input[] = "\320\224\320\260\200\200\200\200\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } /* Test surrogate codepoints. */ { static const uint8_t input[] = "\320\224\320\260\355\240\200\355\260\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } { static const uint8_t input[] = "\320\224\320\260\355\260\200"; ASSERT (u8_check (input, sizeof (input) - 1) == input + 4); } return 0; } �������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-chr.c��������������������������������������������������0000664�0000000�0000000�00000002047�14110572173�0021217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_chr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_UCTOMB u8_uctomb #define U32_TO_U u32_to_u8 #define U_CHR u8_chr #define U_SET u8_set #include "test-chr.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-cmp.c��������������������������������������������������0000664�0000000�0000000�00000002400�14110572173�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_CMP u8_cmp #define MAGIC 0xBA #include "test-cmp.h" int main () { test_cmp (); /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0xF0, 0x9D, 0x94, 0x9E }; static const UNIT input2[] = { 0xEF, 0xBB, 0xBF, 0x00 }; ASSERT (U_CMP (input1, input2, 4) > 0); ASSERT (U_CMP (input2, input1, 4) < 0); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-cmp2.c�������������������������������������������������0000664�0000000�0000000�00000001660�14110572173�0021304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cmp2() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_CMP2 u8_cmp2 #define MAGIC 0xBA #include "test-cmp2.h" ��������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-cpy-alloc.c��������������������������������������������0000664�0000000�0000000�00000001706�14110572173�0022327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cpy_alloc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "macros.h" #define UNIT uint8_t #define U_CPY_ALLOC u8_cpy_alloc #include "test-cpy-alloc.h" ����������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-cpy.c��������������������������������������������������0000664�0000000�0000000�00000001654�14110572173�0021241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_CPY u8_cpy #define MAGIC 0xBA #include "test-cpy.h" ������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-mblen.c������������������������������������������������0000664�0000000�0000000�00000006766�14110572173�0021554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test zero-length input. */ { static const uint8_t input[] = ""; ret = u8_mblen (input, 0); ASSERT (ret == -1); } /* Test NUL unit input. */ { static const uint8_t input[] = ""; ret = u8_mblen (input, 1); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[1]; for (c = 1; c < 0x80; c++) { buf[0] = c; ret = u8_mblen (buf, 1); ASSERT (ret == 1); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97 }; ret = u8_mblen (input, 2); ASSERT (ret == 2); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC }; ret = u8_mblen (input, 3); ASSERT (ret == 3); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD }; ret = u8_mblen (input, 4); ASSERT (ret == 4); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1 }; ret = u8_mblen (input, 1); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xC3 }; ret = u8_mblen (input, 1); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2 }; ret = u8_mblen (input, 1); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF4 }; ret = u8_mblen (input, 1); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xFE }; ret = u8_mblen (input, 1); ASSERT (ret == -1); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2, 0x82 }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2, 0xD0 }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF0, 0x8F }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0x8F }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0xD0 }; ret = u8_mblen (input, 2); ASSERT (ret == -1); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF }; ret = u8_mblen (input, 3); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF }; ret = u8_mblen (input, 3); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0 }; ret = u8_mblen (input, 3); ASSERT (ret == -1); } return 0; } ����������gnulib-20210822~d383792/tests/unistr/test-u8-mbsnlen.c����������������������������������������������0000664�0000000�0000000�00000010167�14110572173�0022103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbsnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const size_t expected[SIZEOF (input) + 1] = { 0, 1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31, 32, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 56, 56, 56, 57, 57, 57, 58, 59, 59, 59, 60, 60, 60, 61 }; size_t n; for (n = 0; n <= SIZEOF (input); n++) { size_t len = u8_mbsnlen (input, n); ASSERT (len == expected[n]); } } /* Test behaviour required by ISO 10646-1, sections R.7 and 2.3c, namely, that a "malformed sequence" is interpreted in the same way as "a character that is outside the adopted subset". Reference: 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> */ /* 3.1. Test that each unexpected continuation byte is signalled as a malformed sequence of its own. */ { static const uint8_t input[] = { '"', 0x80, 0xBF, 0x80, 0xBF, '"' }; ASSERT (u8_mbsnlen (input, 6) == 6); } /* 3.2. Lonely start characters. */ { ucs4_t c; uint8_t input[2]; for (c = 0xC0; c <= 0xFF; c++) { input[0] = c; input[1] = ' '; ASSERT (u8_mbsnlen (input, 2) == 2); } } /* 3.3. Sequences with last continuation byte missing. */ /* 3.3.1. 2-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xC0, '"' }; ASSERT (u8_mbsnlen (input, 3) == 3); } /* 3.3.6. 2-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xDF, '"' }; ASSERT (u8_mbsnlen (input, 3) == 3); } /* 3.3.2. 3-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; ASSERT (u8_mbsnlen (input, 4) == 3); } /* 3.3.7. 3-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xEF, 0xBF, '"' }; ASSERT (u8_mbsnlen (input, 4) == 3); } /* 3.3.3. 4-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; ASSERT (u8_mbsnlen (input, 5) == 3); } /* 3.3.8. 4-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; ASSERT (u8_mbsnlen (input, 5) == 3); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-mbtouc-unsafe.c����������������������������������������0000664�0000000�0000000�00000001701�14110572173�0023207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc_unsafe() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u8-mbtouc.h" int main () { test_function (u8_mbtouc_unsafe); return 0; } ���������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-mbtouc.c�����������������������������������������������0000664�0000000�0000000�00000012636�14110572173�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #include "test-u8-mbtouc.h" static void test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) { ucs4_t uc; int ret; /* Test behaviour required by ISO 10646-1, sections R.7 and 2.3c, namely, that a "malformed sequence" is interpreted in the same way as "a character that is outside the adopted subset". Reference: 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> */ /* 3.1. Test that each unexpected continuation byte is signalled as a malformed sequence of its own. */ { static const uint8_t input[] = { '"', 0x80, 0xBF, 0x80, 0xBF, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 6); ASSERT (ret == 1); ASSERT (uc == 0x0022); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 1, 5); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 2, 4); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 3, 3); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 4, 2); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 5, 1); ASSERT (ret == 1); ASSERT (uc == 0x0022); } /* 3.2. Lonely start characters. */ { ucs4_t c; uint8_t input[2]; for (c = 0xC0; c <= 0xFF; c++) { input[0] = c; input[1] = ' '; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } } /* 3.3. Sequences with last continuation byte missing. */ /* 3.3.1. 2-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xC0, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 1); ASSERT (uc == 0x0022); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 1, 2); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 2, 1); ASSERT (ret == 1); ASSERT (uc == 0x0022); } /* 3.3.6. 2-byte sequence with last byte missing. */ { static const uint8_t input[] = { '"', 0xDF, '"' }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 1); ASSERT (uc == 0x0022); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 1, 2); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 2, 1); ASSERT (ret == 1); ASSERT (uc == 0x0022); } /* 3.3.2. 3-byte sequence with last byte missing. */ { 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 == 2); 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, '"' }; 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 == 2); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 3, 1); ASSERT (ret == 1); ASSERT (uc == 0x0022); } /* 3.3.3. 4-byte sequence with last byte missing. */ { 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 == 3); 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, '"' }; 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 == 3); ASSERT (uc == 0xFFFD); uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input + 4, 1); ASSERT (ret == 1); ASSERT (uc == 0x0022); } } int main () { test_function (u8_mbtouc); test_safe_function (u8_mbtouc); return 0; } ��������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-mbtouc.h�����������������������������������������������0000664�0000000�0000000�00000010732�14110572173�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc() and u8_mbtouc_unsafe() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ static void test_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t)) { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint8_t input[] = ""; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0x00D7); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 3); ASSERT (uc == 0x20AC); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 4); ASSERT (ret == 4); ASSERT (uc == 0x10FFFD); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xC3 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF4 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xFE }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 1 || ret == 2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0x82 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0xD0 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 1 || ret == 2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF0, 0x8F }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 1 || ret == 2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 2); ASSERT (ret == 1 || ret == 2); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 3); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0 }; uc = 0xBADFACE; ret = my_u8_mbtouc (&uc, input, 3); ASSERT (ret == 2); ASSERT (uc == 0xFFFD); } } ��������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-mbtoucr.c����������������������������������������������0000664�0000000�0000000�00000010577�14110572173�0022125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtoucr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint8_t input[] = ""; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == 1); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, buf, 1); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == 2); ASSERT (uc == 0x00D7); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 3); ASSERT (ret == 3); ASSERT (uc == 0x20AC); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 4); ASSERT (ret == 4); ASSERT (uc == 0x10FFFD); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xC3 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF4 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xFE }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 1); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0x82 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0xD0 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF0, 0x8F }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 2); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 3); ASSERT (ret == -2); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 3); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0 }; uc = 0xBADFACE; ret = u8_mbtoucr (&uc, input, 3); ASSERT (ret == -1); ASSERT (uc == 0xFFFD); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-move.c�������������������������������������������������0000664�0000000�0000000�00000001660�14110572173�0021411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_move() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_MOVE u8_move #define MAGIC 0xBA #include "test-move.h" ��������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-next.c�������������������������������������������������0000664�0000000�0000000�00000010631�14110572173�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_next() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; const uint8_t *ret; /* Test NUL unit input. */ { static const uint8_t input[] = ""; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u8_next (&uc, buf); ASSERT (ret == buf + 1); ASSERT (uc == c); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == input + 2); ASSERT (uc == 0x00D7); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == input + 3); ASSERT (uc == 0x20AC); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == input + 4); ASSERT (uc == 0x10FFFD); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xC3, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF4, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xFE, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0x82, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xE2, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF0, 0x8F, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_next (&uc, input); ASSERT (ret == NULL); ASSERT (uc == 0xFFFD); } return 0; } �������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-prev.c�������������������������������������������������0000664�0000000�0000000�00000015714�14110572173�0021424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_prev() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" static int check (const uint8_t *input, size_t input_length, ucs4_t *puc) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ if (u8_prev (&uc, input + input_length, input) != input) return 1; /* Test recognition when preceded by a 1-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 'x'; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u8_prev (&uc1, ptr + input_length, buf) != ptr) return 2; if (uc1 != uc) return 3; } /* Test recognition when preceded by a 2-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0xC3; *ptr++ = 0x97; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u8_prev (&uc1, ptr + input_length, buf) != ptr) return 4; if (uc1 != uc) return 5; } /* Test recognition when preceded by a 3-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0xE2; *ptr++ = 0x84; *ptr++ = 0x82; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u8_prev (&uc1, ptr + input_length, buf) != ptr) return 6; if (uc1 != uc) return 7; } /* Test recognition when preceded by a 4-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ucs4_t uc1; ptr = buf; *ptr++ = 0xF0; *ptr++ = 0x9D; *ptr++ = 0x94; *ptr++ = 0x9E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; if (u8_prev (&uc1, ptr + input_length, buf) != ptr) return 8; if (uc1 != uc) return 9; } *puc = uc; return 0; } static int check_invalid (const uint8_t *input, size_t input_length) { ucs4_t uc; /* Test recognition when at the beginning of the string. */ uc = 0xBADFACE; if (u8_prev (&uc, input + input_length, input) != NULL) return 1; if (uc != 0xBADFACE) return 2; /* Test recognition when preceded by a 1-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ptr = buf; *ptr++ = 'x'; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u8_prev (&uc, ptr + input_length, buf) != NULL) return 3; if (uc != 0xBADFACE) return 4; } /* Test recognition when preceded by a 2-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ptr = buf; *ptr++ = 0xC3; *ptr++ = 0x97; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u8_prev (&uc, ptr + input_length, buf) != NULL) return 5; if (uc != 0xBADFACE) return 6; } /* Test recognition when preceded by a 3-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ptr = buf; *ptr++ = 0xE2; *ptr++ = 0x84; *ptr++ = 0x82; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u8_prev (&uc, ptr + input_length, buf) != NULL) return 7; if (uc != 0xBADFACE) return 8; } /* Test recognition when preceded by a 4-unit character. */ { uint8_t buf[100]; uint8_t *ptr; size_t i; ptr = buf; *ptr++ = 0xF0; *ptr++ = 0x9D; *ptr++ = 0x94; *ptr++ = 0x9E; for (i = 0; i < input_length; i++) ptr[i] = input[i]; uc = 0xBADFACE; if (u8_prev (&uc, ptr + input_length, buf) != NULL) return 9; if (uc != 0xBADFACE) return 10; } return 0; } int main () { ucs4_t uc; /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[1]; for (c = 0; c < 0x80; c++) { buf[0] = c; uc = 0xBADFACE; ASSERT (check (buf, 1, &uc) == 0); ASSERT (uc == c); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97 }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x00D7); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x20AC); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD }; uc = 0xBADFACE; ASSERT (check (input, SIZEOF (input), &uc) == 0); ASSERT (uc == 0x10FFFD); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xC3 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xE2 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF4 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xFE }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xE2, 0x82 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xE2, 0xD0 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF0, 0x8F }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF3, 0x8F }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF3, 0xD0 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF3, 0xE4, 0xBF }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0 }; ASSERT (check_invalid (input, SIZEOF (input)) == 0); } return 0; } ����������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-set.c��������������������������������������������������0000664�0000000�0000000�00000001676�14110572173�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_set() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_SET u8_set #define MAGIC 0xBA #define VALUE 'x' #include "test-set.h" ������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-stpcpy.c�����������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0021766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_stpcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_STPCPY u8_stpcpy #define MAGIC 0xBA #include "test-stpcpy.h" ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-stpncpy.c����������������������������������������������0000664�0000000�0000000�00000003427�14110572173�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_stpncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_STPNCPY u8_stpncpy #define MAGIC 0xBA #include "test-stpncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\0' }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strcat.c�����������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_STRCAT u8_strcat #define MAGIC 0xBA #include "test-strcat.h" ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strchr.c�����������������������������������������������0000664�0000000�0000000�00000012013�14110572173�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strchr() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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 Paolo Bonzini <bonzini@gnu.org>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include <string.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_UCTOMB u8_uctomb #define U32_TO_U u32_to_u8 #define U_STRCHR u8_strchr #define U_SET u8_set #include "test-strchr.h" int main (void) { test_strchr (); /* Check that u8_strchr() does not read past the end of the string. */ { char *page_boundary = (char *) zerosize_ptr (); if (page_boundary != NULL) { UNIT *mem; mem = (UNIT *) (page_boundary - 1 * sizeof (UNIT)); mem[0] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 2 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 3 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0x50; mem[2] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 3 * sizeof (UNIT)); mem[0] = 0xC4; mem[1] = 0xA0; /* U+0120 */ mem[2] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 3 * sizeof (UNIT)); mem[0] = 0xC5; mem[1] = 0xA3; /* U+0163 */ mem[2] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 4 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0x50; mem[2] = 0x50; mem[3] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 4 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0xC5; mem[2] = 0xA3; /* U+0163 */ mem[3] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); ASSERT (u8_strchr (mem, 0x163) == mem + 1); mem = (UNIT *) (page_boundary - 4 * sizeof (UNIT)); mem[0] = 0xE3; mem[1] = 0x91; mem[2] = 0x00; /* U+3450 */ mem[3] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 4 * sizeof (UNIT)); mem[0] = 0xE3; mem[1] = 0x92; mem[2] = 0x96; /* U+3496 */ mem[3] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 5 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0x50; mem[2] = 0x50; mem[3] = 0x50; mem[4] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); mem = (UNIT *) (page_boundary - 5 * sizeof (UNIT)); mem[0] = 0x50; mem[1] = 0xE3; mem[2] = 0x92; mem[3] = 0x96; /* U+3496 */ mem[4] = 0; ASSERT (u8_strchr (mem, 0x55) == NULL); ASSERT (u8_strchr (mem, 0x123) == NULL); ASSERT (u8_strchr (mem, 0x3456) == NULL); ASSERT (u8_strchr (mem, 0x23456) == NULL); ASSERT (u8_strchr (mem, 0x3496) == mem + 1); } } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strcmp.c�����������������������������������������������0000664�0000000�0000000�00000001706�14110572173�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u8_strcmp #include "test-u8-strcmp.h" int main () { test_u8_strcmp (); return 0; } ����������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strcmp.h�����������������������������������������������0000664�0000000�0000000�00000002666�14110572173�0021767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcmp() and u8_strcoll() functions. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #define UNIT uint8_t #include "test-strcmp.h" static void test_u8_strcmp (void) { test_strcmp (); /* Test comparison between ASCII and non-ASCII characters. */ { static const UNIT input1[] = { 'f', 'o', 'o', 0 }; static const UNIT input2[] = { 0xE2, 0x80, 0xA2, 0 }; ASSERT (U_STRCMP (input1, input2) < 0); ASSERT (U_STRCMP (input2, input1) > 0); } /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0xF0, 0x9D, 0x94, 0x9E, 0 }; static const UNIT input2[] = { 0xEF, 0xBB, 0xBF, 0 }; ASSERT (U_STRCMP (input1, input2) > 0); ASSERT (U_STRCMP (input2, input1) < 0); } } ��������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strcoll.c����������������������������������������������0000664�0000000�0000000�00000002503�14110572173�0022122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcoll() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define U_STRCMP u8_strcoll #include "test-u8-strcmp.h" int main () { /* This test relies on three facts: - setlocale is not being called, therefore the locale is the "C" locale. - In the "C" locale, strcoll is equivalent to strcmp. - In the u8_strcoll implementation, Unicode strings that are not convertible to the locale encoding are sorted higher than convertible strings and compared according to u8_strcmp. */ test_u8_strcmp (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strcpy.c�����������������������������������������������0000664�0000000�0000000�00000001670�14110572173�0021770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_STRCPY u8_strcpy #define MAGIC 0xBA #include "test-strcpy.h" ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strdup.c�����������������������������������������������0000664�0000000�0000000�00000001645�14110572173�0021767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strdup() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_STRDUP u8_strdup #include "test-strdup.h" �������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strlen.c�����������������������������������������������0000664�0000000�0000000�00000003411�14110572173�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { /* Empty string. */ { static const uint8_t input[] = { 0 }; ASSERT (u8_strlen (input) == 0); } /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\0' }; ASSERT (u8_strlen (input) == SIZEOF (input) - 1); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strmblen.c���������������������������������������������0000664�0000000�0000000�00000006670�14110572173�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strmblen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { int ret; /* Test NUL unit input. */ { static const uint8_t input[] = ""; ret = u8_strmblen (input); ASSERT (ret == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; ret = u8_strmblen (buf); ASSERT (ret == 1); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97, 0 }; ret = u8_strmblen (input); ASSERT (ret == 2); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC, 0 }; ret = u8_strmblen (input); ASSERT (ret == 3); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD, 0 }; ret = u8_strmblen (input); ASSERT (ret == 4); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xC3, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF4, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xFE, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2, 0x82, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xE2, 0xD0, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF0, 0x8F, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0x8F, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0xD0, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0, 0 }; ret = u8_strmblen (input); ASSERT (ret == -1); } return 0; } ������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strmbtouc.c��������������������������������������������0000664�0000000�0000000�00000010737�14110572173�0022472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strmbtouc() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" int main () { ucs4_t uc; int ret; /* Test NUL unit input. */ { static const uint8_t input[] = ""; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == 0); ASSERT (uc == 0); } /* Test ISO 646 unit input. */ { ucs4_t c; uint8_t buf[2]; for (c = 1; c < 0x80; c++) { buf[0] = c; buf[1] = 0; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, buf); ASSERT (ret == 1); ASSERT (uc == c); } } /* Test 2-byte character input. */ { static const uint8_t input[] = { 0xC3, 0x97, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == 2); ASSERT (uc == 0x00D7); } /* Test 3-byte character input. */ { static const uint8_t input[] = { 0xE2, 0x82, 0xAC, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == 3); ASSERT (uc == 0x20AC); } /* Test 4-byte character input. */ { static const uint8_t input[] = { 0xF4, 0x8F, 0xBF, 0xBD, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == 4); ASSERT (uc == 0x10FFFD); } /* Test incomplete/invalid 1-byte input. */ { static const uint8_t input[] = { 0xC1, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xC3, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xE2, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF4, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xFE, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } /* Test incomplete/invalid 2-byte input. */ { static const uint8_t input[] = { 0xE0, 0x9F, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xE2, 0x82, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xE2, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF0, 0x8F, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF3, 0x8F, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF3, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } /* Test incomplete/invalid 3-byte input. */ { static const uint8_t input[] = { 0xF3, 0x8F, 0xBF, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF3, 0xD0, 0xBF, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } { static const uint8_t input[] = { 0xF3, 0x8F, 0xD0, 0 }; uc = 0xBADFACE; ret = u8_strmbtouc (&uc, input); ASSERT (ret == -1); ASSERT (uc == 0xBADFACE); } return 0; } ���������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strncat.c����������������������������������������������0000664�0000000�0000000�00000003427�14110572173�0022124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncat() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_STRNCAT u8_strncat #define MAGIC 0xBA #include "test-strncat.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\0' }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strncmp.c����������������������������������������������0000664�0000000�0000000�00000003333�14110572173�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncmp() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define UNIT uint8_t #define U_STRNCMP u8_strncmp #include "test-strncmp.h" int main () { test_strncmp (); /* Test comparison with non-BMP characters. */ { static const UNIT input1[] = { 0xF0, 0x9D, 0x94, 0x9E, 0 }; static const UNIT input2[] = { 0xEF, 0xBB, 0xBF, 0 }; ASSERT (U_STRNCMP (input1, input2, 1) > 0); ASSERT (U_STRNCMP (input2, input1, 1) < 0); ASSERT (U_STRNCMP (input1, input2, 2) > 0); ASSERT (U_STRNCMP (input2, input1, 2) < 0); ASSERT (U_STRNCMP (input1, input2, 3) > 0); ASSERT (U_STRNCMP (input2, input1, 3) < 0); ASSERT (U_STRNCMP (input1, input2, 4) > 0); ASSERT (U_STRNCMP (input2, input1, 4) < 0); ASSERT (U_STRNCMP (input1, input2, 5) > 0); ASSERT (U_STRNCMP (input2, input1, 5) < 0); ASSERT (U_STRNCMP (input1, input2, 1000000) > 0); ASSERT (U_STRNCMP (input2, input1, 1000000) < 0); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strncpy.c����������������������������������������������0000664�0000000�0000000�00000003427�14110572173�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncpy() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_STRNCPY u8_strncpy #define MAGIC 0xBA #include "test-strncpy.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\0' }; check (input, SIZEOF (input)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strnlen.c����������������������������������������������0000664�0000000�0000000�00000003357�14110572173�0022135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strnlen() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "zerosize-ptr.h" #include "macros.h" #define UNIT uint8_t #define U_STRNLEN u8_strnlen #include "test-strnlen.h" int main () { /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\0' }; check (input, SIZEOF (input)); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strstr.c�����������������������������������������������0000664�0000000�0000000�00000002704�14110572173�0022004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strstr() function. Copyright (C) 2011-2021 Free Software Foundation, Inc. This 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 Pádraig Brady <P@draigBrady.com>, 2011. */ #include <config.h> #include "unistr.h" #include <stdint.h> #include <stdlib.h> #include <signal.h> /* For signal. */ #include <unistd.h> /* For alarm. */ #include "macros.h" #define UNIT uint8_t #define U_STRSTR u8_strstr #include "test-u-strstr.h" int main (void) { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. Note since we defer to strstr() in this case, we're assuming that we're running this test on the same system that we did the check to ensure it has linear performance characteristics. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif test_u_strstr (); return 0; } ������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-strtok.c�����������������������������������������������0000664�0000000�0000000�00000001750�14110572173�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strtok() function. Copyright (C) 2015-2021 Free Software Foundation, Inc. This 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 "unistr.h" #include <stdint.h> #include <stdlib.h> #include "macros.h" #define UNIT uint8_t #define U_STRTOK u8_strtok #define U_UCTOMB u8_uctomb #include "test-u-strtok.h" int main (void) { test_u_strtok (); return 0; } ������������������������gnulib-20210822~d383792/tests/unistr/test-u8-to-u16.c�����������������������������������������������0000664�0000000�0000000�00000012421�14110572173�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_to_u16() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint16_t *expected, size_t expected_length) { size_t length; uint16_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_to_u16 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u16_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint16_t *preallocated; length = expected_length - 1; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u8_to_u16 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u16_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint16_t *preallocated; length = expected_length; preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); result = u8_to_u16 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u16_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint16_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint8_t input[] = { '-', '(', 0xF0, 0x9D, 0x94, 0x9E, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9F, ')', '=', 0xF0, 0x9D, 0x94, 0x9F, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9E }; static const uint16_t expected[] = { '-', '(', 0xD835, 0xDD1E, 0x00D7, 0xD835, 0xDD1F, ')', '=', 0xD835, 0xDD1F, 0x00D7, 0xD835, 0xDD1E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint8_t input[] = { 'x', 0xC2, 0xC3, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint16_t expected[] = { 'x', 0xFFFD, 0xFFFD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint16_t *result; uint16_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u8_to_u16 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u8_to_u16 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u8_to_u16 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-to-u32.c�����������������������������������������������0000664�0000000�0000000�00000012365�14110572173�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_to_u32() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include <errno.h> #include "macros.h" static int check (const uint8_t *input, size_t input_length, const uint32_t *expected, size_t expected_length) { size_t length; uint32_t *result; /* Test return conventions with resultbuf == NULL. */ result = u8_to_u32 (input, input_length, NULL, &length); if (!(result != NULL)) return 1; if (!(length == expected_length)) return 2; if (!(u32_cmp (result, expected, expected_length) == 0)) return 3; free (result); /* Test return conventions with resultbuf too small. */ if (expected_length > 0) { uint32_t *preallocated; length = expected_length - 1; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u8_to_u32 (input, input_length, preallocated, &length); if (!(result != NULL)) return 4; if (!(result != preallocated)) return 5; if (!(length == expected_length)) return 6; if (!(u32_cmp (result, expected, expected_length) == 0)) return 7; free (result); free (preallocated); } /* Test return conventions with resultbuf large enough. */ { uint32_t *preallocated; length = expected_length; preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); result = u8_to_u32 (input, input_length, preallocated, &length); if (!(result != NULL)) return 8; if (!(preallocated == NULL || result == preallocated)) return 9; if (!(length == expected_length)) return 10; if (!(u32_cmp (result, expected, expected_length) == 0)) return 11; free (preallocated); } return 0; } int main () { /* Empty string. */ ASSERT (check (NULL, 0, NULL, 0) == 0); /* Simple string. */ { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ static const uint8_t input[] = { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' }; static const uint32_t expected[] = { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* String with characters outside the BMP. */ { static const uint8_t input[] = { '-', '(', 0xF0, 0x9D, 0x94, 0x9E, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9F, ')', '=', 0xF0, 0x9D, 0x94, 0x9F, 0xC3, 0x97, 0xF0, 0x9D, 0x94, 0x9E }; static const uint32_t expected[] = { '-', '(', 0x1D51E, 0x00D7, 0x1D51F, ')', '=', 0x1D51F, 0x00D7, 0x1D51E }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); } /* Invalid input. */ { static const uint8_t input[] = { 'x', 0xC2, 0xC3, 'y' }; #if 0 /* Currently invalid input is rejected, not accommodated. */ static const uint32_t expected[] = { 'x', 0xFFFD, 0xFFFD, 'y' }; ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); #else size_t length; uint32_t *result; uint32_t preallocated[10]; /* Test return conventions with resultbuf == NULL. */ result = u8_to_u32 (input, SIZEOF (input), NULL, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf too small. */ length = 1; result = u8_to_u32 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); /* Test return conventions with resultbuf large enough. */ length = SIZEOF (preallocated); result = u8_to_u32 (input, SIZEOF (input), preallocated, &length); ASSERT (result == NULL); ASSERT (errno == EILSEQ); #endif } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/unistr/test-u8-uctomb.c�����������������������������������������������0000664�0000000�0000000�00000007403�14110572173�0021735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_uctomb() function. Copyright (C) 2010-2021 Free Software Foundation, Inc. This 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>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" #define MAGIC 0xBA int main () { /* Test ISO 646 character, in particular the NUL character. */ { ucs4_t uc; for (uc = 0; uc < 0x80; uc++) { uint8_t buf[5] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; int ret; ret = u8_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 1); ASSERT (ret == 1); ASSERT (buf[0] == uc); ASSERT (buf[1] == MAGIC); } } /* Test 2-byte character. */ { ucs4_t uc = 0x00D7; uint8_t buf[5] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; int ret; ret = u8_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 1); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 2); ASSERT (ret == 2); ASSERT (buf[0] == 0xC3); ASSERT (buf[1] == 0x97); ASSERT (buf[2] == MAGIC); } /* Test 3-byte character. */ { ucs4_t uc = 0x20AC; uint8_t buf[5] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; int ret; ret = u8_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 1); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 2); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); ret = u8_uctomb (buf, uc, 3); ASSERT (ret == 3); ASSERT (buf[0] == 0xE2); ASSERT (buf[1] == 0x82); ASSERT (buf[2] == 0xAC); ASSERT (buf[3] == MAGIC); } /* Test 4-byte character. */ { ucs4_t uc = 0x10FFFD; uint8_t buf[5] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; int ret; ret = u8_uctomb (buf, uc, 0); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 1); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ret = u8_uctomb (buf, uc, 2); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); ret = u8_uctomb (buf, uc, 3); ASSERT (ret == -2); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); ASSERT (buf[2] == MAGIC); ret = u8_uctomb (buf, uc, 4); ASSERT (ret == 4); ASSERT (buf[0] == 0xF4); ASSERT (buf[1] == 0x8F); ASSERT (buf[2] == 0xBF); ASSERT (buf[3] == 0xBD); ASSERT (buf[4] == MAGIC); } /* Test invalid characters. */ { ucs4_t invalid[] = { 0x110000, 0xD800, 0xDBFF, 0xDC00, 0xDFFF }; uint8_t buf[5] = { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; size_t i; for (i = 0; i < SIZEOF (invalid); i++) { ucs4_t uc = invalid[i]; int n; for (n = 0; n <= 4; n++) { int ret = u8_uctomb (buf, uc, n); ASSERT (ret == -1); ASSERT (buf[0] == MAGIC); ASSERT (buf[1] == MAGIC); ASSERT (buf[2] == MAGIC); ASSERT (buf[3] == MAGIC); ASSERT (buf[4] == MAGIC); } } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017122�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/WordBreakTest.txt���������������������������������������������0000664�0000000�0000000�00001217712�14110572173�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# WordBreakTest-9.0.0.txt # Date: 2016-06-02, 18:28:31 GMT # © 2016 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 http://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see http://www.unicode.org/reports/tr44/ # # Default Word Break Test # # Format: # <string> (# <comment>)? # <string> contains hex Unicode code points, with # ÷ wherever there is a break opportunity, and # × wherever there is not. # <comment> the format can change, but currently it shows: # - the sample character name # - (x) the Word_Break property value for the sample character # - [x] the rule that determines whether there is a break or not # # These samples may be extended or changed in the future. # ÷ 0001 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0001 × 0308 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0001 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0001 × 0308 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0001 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0001 × 0308 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0001 ÷ 000B ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0001 × 0308 ÷ 000B ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0001 ÷ 3031 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0001 × 0308 ÷ 3031 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0001 ÷ 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0001 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 ÷ 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0001 × 0308 ÷ 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0001 ÷ 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0001 × 0308 ÷ 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0001 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0001 × 0308 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0001 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0001 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0001 × 0308 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0001 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0001 × 0308 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0001 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 × 0308 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0001 × 0308 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0001 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0001 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0001 ÷ 2764 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0001 × 0308 ÷ 2764 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0001 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0001 × 0308 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0001 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0001 × 0308 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0001 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0001 × 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0001 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0001 × 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0001 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 000D ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000D × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000D ÷ 000B ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000D ÷ 3031 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000D ÷ 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000D ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000D ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000D ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000D ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000D ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000D ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000D ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000D ÷ 2764 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000D ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] BOY (EBG) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 000D ÷ 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000D ÷ 0308 × 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000D ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 000A ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000A ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000A ÷ 000B ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000A ÷ 3031 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000A ÷ 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000A ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000A ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000A ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000A ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000A ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000A ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000A ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000A ÷ 2764 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000A ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] BOY (EBG) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 000A ÷ 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000A ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000A ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0001 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 000B ÷ 000D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 000B ÷ 000A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 000B ÷ 000B ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 000B ÷ 3031 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 000B ÷ 0041 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 000B ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 002E ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000B ÷ 0030 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000B ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000B ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 000B ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 000B ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 000B ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 261D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 000B ÷ 1F3FB ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 000B ÷ 2764 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 2764 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 000B ÷ 1F466 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] BOY (EBG) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 000B ÷ 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000B ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000B ÷ 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000B ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 000B ÷ 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000B ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 000B ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 ÷ 0001 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 3031 × 0308 ÷ 0001 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 3031 ÷ 000D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 3031 × 0308 ÷ 000D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 3031 ÷ 000A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 3031 × 0308 ÷ 000A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 3031 ÷ 000B ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 3031 × 0308 ÷ 000B ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 3031 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 3031 × 0308 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 3031 ÷ 0041 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 0041 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 3031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 3031 × 0308 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 3031 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 3031 × 0308 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 3031 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 3031 × 0308 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 3031 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 3031 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 3031 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 3031 × 0308 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 3031 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 3031 × 0308 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 3031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 × 0308 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 ÷ 261D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 3031 × 0308 ÷ 261D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 3031 ÷ 1F3FB ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 3031 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 3031 ÷ 2764 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 3031 × 0308 ÷ 2764 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 3031 ÷ 1F466 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 3031 × 0308 ÷ 1F466 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 3031 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 3031 × 0308 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 3031 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 3031 × 0308 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 3031 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 3031 × 0308 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 3031 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 ÷ 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0041 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0041 ÷ 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0041 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0041 ÷ 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0041 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0041 ÷ 000B ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0041 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0041 ÷ 3031 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0041 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0041 × 0308 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0041 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0041 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0041 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0041 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0041 × 0308 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0041 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0041 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0041 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0041 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0041 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0041 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0041 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 ÷ 261D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0041 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0041 ÷ 1F3FB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0041 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0041 ÷ 2764 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0041 × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0041 ÷ 1F466 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0041 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0041 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0041 × 0308 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0041 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0041 × 0308 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0041 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0041 × 0308 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0041 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A ÷ 0001 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 003A ÷ 000D ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 003A ÷ 000A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 003A ÷ 000B ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 003A ÷ 3031 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 003A ÷ 0041 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 003A × 0308 ÷ 0041 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 003A ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 003A ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 003A ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 003A ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 003A ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 003A ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A ÷ 261D ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 003A ÷ 2764 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 003A × 0308 ÷ 2764 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 003A ÷ 1F466 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 003A × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 003A × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 003A × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C ÷ 0001 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 002C ÷ 000D ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 002C ÷ 000A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 002C ÷ 000B ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 002C ÷ 3031 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 002C ÷ 0041 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 002C ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 002C ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002C ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 002C ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 002C ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C ÷ 261D ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 002C ÷ 2764 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 002C × 0308 ÷ 2764 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 002C ÷ 1F466 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 002C × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002C × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 002C × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 002E × 0308 ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 002E ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 002E × 0308 ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 002E ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 002E × 0308 ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 002E ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 002E × 0308 ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 002E ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 002E × 0308 ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 002E ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 002E × 0308 ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 002E ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E × 0308 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E × 0308 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 002E × 0308 ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 002E ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002E × 0308 ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002E ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002E × 0308 ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002E ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 002E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 002E ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 002E × 0308 ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 002E ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 002E × 0308 ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 002E ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E × 0308 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E ÷ 261D ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 002E × 0308 ÷ 261D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 002E ÷ 1F3FB ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 002E × 0308 ÷ 1F3FB ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 002E ÷ 2764 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 002E × 0308 ÷ 2764 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 002E ÷ 1F466 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 002E × 0308 ÷ 1F466 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 002E × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002E × 0308 × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002E × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 002E × 0308 × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 002E × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 002E × 0308 × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 002E ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002E ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002E ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002E ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002E × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0030 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0030 ÷ 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0030 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0030 ÷ 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0030 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0030 ÷ 000B ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0030 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0030 ÷ 3031 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0030 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0030 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0030 × 0308 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0030 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0030 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0030 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0030 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0030 × 0308 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0030 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0030 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0030 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0030 × 0308 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0030 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0030 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0030 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 ÷ 261D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0030 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0030 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0030 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0030 ÷ 2764 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0030 × 0308 ÷ 2764 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0030 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0030 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0030 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0030 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0030 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0030 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0030 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0030 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0030 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F ÷ 0001 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 005F × 0308 ÷ 0001 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 005F ÷ 000D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 005F × 0308 ÷ 000D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 005F ÷ 000A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 005F × 0308 ÷ 000A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 005F ÷ 000B ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 005F × 0308 ÷ 000B ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 005F × 3031 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 005F × 0308 × 3031 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 005F × 0041 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 005F × 0308 × 0041 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 005F ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0308 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 005F × 0308 ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 005F × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 005F × 0308 × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 005F × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 005F × 0308 × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 005F ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 005F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 005F × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 005F × 0308 × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 005F ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 005F × 0308 ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 005F ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0308 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F ÷ 261D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 005F × 0308 ÷ 261D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 005F ÷ 1F3FB ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 005F × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 005F ÷ 2764 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 005F × 0308 ÷ 2764 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 005F ÷ 1F466 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 005F × 0308 ÷ 1F466 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 005F × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 005F × 0308 × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 005F × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 005F × 0308 × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 005F × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 005F × 0308 × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 005F × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F1E6 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F1E6 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F1E6 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F1E6 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F1E6 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F1E6 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F1E6 × 0308 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F1E6 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F1E6 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F1E6 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F1E6 ÷ 2764 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 2764 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F1E6 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F1E6 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 05D0 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 05D0 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 05D0 × 0308 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 05D0 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 05D0 × 0308 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 05D0 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 05D0 × 0308 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 05D0 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 05D0 × 0308 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 05D0 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 05D0 × 0308 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 05D0 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 × 0308 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 × 0308 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 05D0 × 0308 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 05D0 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 05D0 × 0308 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 05D0 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 05D0 × 0308 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 05D0 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 05D0 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 05D0 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 05D0 × 0308 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 05D0 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 05D0 × 0308 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0308 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 ÷ 261D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 05D0 × 0308 ÷ 261D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 05D0 ÷ 1F3FB ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 05D0 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 05D0 ÷ 2764 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 05D0 × 0308 ÷ 2764 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 05D0 ÷ 1F466 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 05D0 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 05D0 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 05D0 × 0308 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 05D0 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 05D0 × 0308 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 05D0 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 05D0 × 0308 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 05D0 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 05D0 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 05D0 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 05D0 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0022 × 0308 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0022 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0022 × 0308 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0022 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0022 × 0308 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0022 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0022 × 0308 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0022 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0022 × 0308 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0022 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0022 × 0308 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0022 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 × 0308 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 × 0308 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0022 × 0308 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0022 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0022 × 0308 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0022 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0022 × 0308 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0022 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0022 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0022 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0022 × 0308 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0022 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0022 × 0308 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0022 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 × 0308 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 ÷ 261D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0022 × 0308 ÷ 261D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0022 ÷ 1F3FB ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0022 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0022 ÷ 2764 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0022 × 0308 ÷ 2764 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0022 ÷ 1F466 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0022 × 0308 ÷ 1F466 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0022 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0022 × 0308 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0022 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0022 × 0308 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0022 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0022 × 0308 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0022 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0022 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0022 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0022 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0022 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0027 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0027 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0027 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0027 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0027 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0027 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0027 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 ÷ 261D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0027 ÷ 2764 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0027 × 0308 ÷ 2764 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0027 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0027 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0027 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 261D × 0308 ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 261D ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 261D × 0308 ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 261D ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 261D × 0308 ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 261D ÷ 000B ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 261D × 0308 ÷ 000B ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 261D ÷ 3031 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 261D × 0308 ÷ 3031 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 261D ÷ 0041 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 261D × 0308 ÷ 0041 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 261D ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D × 0308 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D × 0308 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D ÷ 002E ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 261D × 0308 ÷ 002E ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 261D ÷ 0030 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 261D × 0308 ÷ 0030 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 261D ÷ 005F ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 261D × 0308 ÷ 005F ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 261D ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 261D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 261D ÷ 05D0 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 261D × 0308 ÷ 05D0 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 261D ÷ 0022 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 261D × 0308 ÷ 0022 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 261D ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D × 0308 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 261D × 0308 ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 261D × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 261D × 0308 × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 261D ÷ 2764 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 261D × 0308 ÷ 2764 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 261D ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 261D × 0308 ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 261D × 00AD ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 261D × 0308 × 00AD ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 261D × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 261D × 0308 × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 261D × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 261D × 0308 × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 261D ÷ 0061 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 261D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 261D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 261D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 261D × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F3FB ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F3FB ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F3FB ÷ 000B ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 000B ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F3FB ÷ 3031 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 3031 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F3FB ÷ 0041 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0041 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F3FB ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB ÷ 002E ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 002E ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F3FB ÷ 0030 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0030 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F3FB ÷ 005F ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 005F ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F3FB ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F3FB ÷ 05D0 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 05D0 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F3FB ÷ 0022 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0022 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F3FB ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F3FB ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F3FB ÷ 2764 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 2764 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F3FB ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F3FB × 00AD ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F3FB × 0308 × 00AD ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F3FB × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F3FB × 0308 × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F3FB × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F3FB × 0308 × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F3FB ÷ 0061 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB ÷ 0061 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB ÷ 0061 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB ÷ 0031 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F3FB ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F3FB ÷ 0031 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F3FB ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F3FB × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 ÷ 0001 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 2764 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 2764 ÷ 000D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 2764 × 0308 ÷ 000D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 2764 ÷ 000A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 2764 × 0308 ÷ 000A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 2764 ÷ 000B ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 2764 × 0308 ÷ 000B ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 2764 ÷ 3031 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 2764 × 0308 ÷ 3031 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 2764 ÷ 0041 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 2764 × 0308 ÷ 0041 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 2764 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 × 0308 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 × 0308 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 ÷ 002E ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 2764 × 0308 ÷ 002E ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 2764 ÷ 0030 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 2764 × 0308 ÷ 0030 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 2764 ÷ 005F ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 2764 × 0308 ÷ 005F ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 2764 ÷ 1F1E6 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 2764 ÷ 05D0 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 2764 × 0308 ÷ 05D0 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 2764 ÷ 0022 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 2764 × 0308 ÷ 0022 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 2764 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 × 0308 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 ÷ 261D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 2764 × 0308 ÷ 261D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 2764 ÷ 1F3FB ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 2764 ÷ 2764 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 2764 × 0308 ÷ 2764 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 2764 ÷ 1F466 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 2764 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 2764 × 00AD ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 2764 × 0308 × 00AD ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 2764 × 0300 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 2764 × 0308 × 0300 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 2764 × 200D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 2764 × 0308 × 200D ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 2764 ÷ 0061 × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 2764 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 2764 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 2764 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2764 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEAVY BLACK HEART (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 1F466 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F466 × 0308 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 1F466 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F466 × 0308 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 1F466 ÷ 000B ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F466 × 0308 ÷ 000B ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 1F466 ÷ 3031 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F466 × 0308 ÷ 3031 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 1F466 ÷ 0041 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0041 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F466 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 × 0308 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 × 0308 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 ÷ 002E ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F466 × 0308 ÷ 002E ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F466 ÷ 0030 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0030 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F466 ÷ 005F ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F466 × 0308 ÷ 005F ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F466 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 1F466 ÷ 05D0 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F466 × 0308 ÷ 05D0 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 1F466 ÷ 0022 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0022 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 1F466 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 0308 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F466 × 0308 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 1F466 ÷ 2764 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F466 × 0308 ÷ 2764 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F466 × 0308 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 1F466 × 00AD ÷ # ÷ [0.2] BOY (EBG) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F466 × 0308 × 00AD ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F466 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F466 × 0308 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 1F466 × 200D ÷ # ÷ [0.2] BOY (EBG) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F466 × 0308 × 200D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 1F466 ÷ 0061 × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F466 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F466 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F466 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F466 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 00AD × 0308 ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 00AD ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 00AD × 0308 ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 00AD ÷ 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 00AD × 0308 ÷ 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 00AD ÷ 000B ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 00AD × 0308 ÷ 000B ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 00AD ÷ 3031 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 00AD × 0308 ÷ 3031 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 00AD ÷ 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 00AD ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 00AD × 0308 ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 00AD ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 00AD × 0308 ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 00AD ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 00AD × 0308 ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 00AD ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 00AD × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 00AD ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 00AD × 0308 ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 00AD ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 00AD × 0308 ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 00AD ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD × 0308 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD ÷ 261D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 00AD × 0308 ÷ 261D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 00AD ÷ 1F3FB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 00AD × 0308 ÷ 1F3FB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 00AD ÷ 2764 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 00AD × 0308 ÷ 2764 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 00AD ÷ 1F466 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 00AD × 0308 ÷ 1F466 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 00AD × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 00AD × 0308 × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 00AD × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 00AD × 0308 × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 00AD × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 00AD × 0308 × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 00AD ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0300 ÷ 000B ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0300 × 0308 ÷ 000B ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0300 ÷ 3031 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0300 × 0308 ÷ 3031 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0300 ÷ 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0300 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0300 × 0308 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0300 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0300 × 0308 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0300 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0300 × 0308 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0300 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0300 × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0300 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0300 × 0308 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0300 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 × 0308 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0300 × 0308 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0300 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0300 ÷ 2764 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0300 × 0308 ÷ 2764 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0300 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0300 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0300 × 0308 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0300 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 200D ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 200D × 0308 ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 200D ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 200D × 0308 ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 200D ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 200D × 0308 ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 200D ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D × 0308 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D × 0308 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 200D × 0308 ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 200D ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 200D × 0308 ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 200D ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 200D × 0308 ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 200D ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 200D × 0308 ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 200D ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 200D × 0308 ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 200D ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D × 0308 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 200D × 0308 ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 200D ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 0308 ÷ 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) ÷ [0.3] ÷ 200D × 0308 ÷ 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 200D × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 200D × 0308 × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 200D ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 200D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 200D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 200D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 200D × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 × 2060 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 × 2060 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 × 2060 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 × 2060 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 × 2060 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 × 003A × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 × 003A × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 × 003A × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 003A × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 × 003A × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 × 0027 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 × 0027 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 0027 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 0027 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 0027 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 0027 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 2764 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 ÷ 002C × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 003A × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 × 0027 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 × 0027 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 0027 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 0027 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 0027 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 0027 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 0027 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 0027 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 0027 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 0027 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 × 0027 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 002C × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 2764 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [0.3] ÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3] ÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [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 (Other) ÷ [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] ÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 05D0 × 0022 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.2] QUOTATION MARK (Double_Quote) × [7.3] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] ÷ 0041 × 0030 × 0030 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 0030 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0030 ÷ 002C ÷ 002C ÷ 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 3031 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] ÷ 0041 × 005F × 0030 × 005F × 3031 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0041 × 005F × 005F × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 200D × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 261D × 1F3FB ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3] ÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 1F466 × 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3] ÷ 200D × 2764 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] HEAVY BLACK HEART (Glue_After_Zwj) ÷ [0.3] ÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) ÷ [0.3] ÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3] ÷ 0061 × 0308 × 200D × 0308 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0031 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [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] ÷ 0031 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [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] ÷ 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [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] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 003A ÷ 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] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [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] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 002E ÷ 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] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [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] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [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] DIGIT ONE (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] ÷ 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: 2057 # # EOF ������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-u16-wordbreaks.c�����������������������������������������0000664�0000000�0000000�00000006351�14110572173�0023024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-16 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uniwbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u16_wordbreaks (NULL, 0, NULL); { static const uint16_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 61; i++) { ASSERT (p[i] == ((i >= 4 && i <= 5) || (i >= 9 && i <= 11) || (i >= 23 && i <= 31) || (i >= 35 && i <= 39) || (i >= 42 && i <= 46) || (i >= 48 && i <= 58) || i == 60 ? 1 : 0)); } free (p); } { /* Same input string, decomposed. */ static const uint16_t input[67] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u16_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 67; i++) { ASSERT (p[i] == ((i >= 5 && i <= 6) || (i >= 10 && i <= 12) || (i >= 25 && i <= 33) || (i >= 37 && i <= 41) || (i >= 44 && i <= 48) || (i >= 50 && i <= 60) || i == 66 ? 1 : 0)); } free (p); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-u32-wordbreaks.c�����������������������������������������0000664�0000000�0000000�00000006351�14110572173�0023022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-32 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uniwbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u32_wordbreaks (NULL, 0, NULL); { static const uint32_t input[61] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0439, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 61; i++) { ASSERT (p[i] == ((i >= 4 && i <= 5) || (i >= 9 && i <= 11) || (i >= 23 && i <= 31) || (i >= 35 && i <= 39) || (i >= 42 && i <= 46) || (i >= 48 && i <= 58) || i == 60 ? 1 : 0)); } free (p); } { /* Same input string, decomposed. */ static const uint32_t input[67] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' }; char *p = (char *) malloc (SIZEOF (input)); size_t i; u32_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 67; i++) { ASSERT (p[i] == ((i >= 5 && i <= 6) || (i >= 10 && i <= 12) || (i >= 25 && i <= 33) || (i >= 37 && i <= 41) || (i >= 44 && i <= 48) || (i >= 50 && i <= 60) || i == 66 ? 1 : 0)); } free (p); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-u8-wordbreaks.c������������������������������������������0000664�0000000�0000000�00000006330�14110572173�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-8 strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uniwbrk.h" #include <stdlib.h> #include "macros.h" int main () { /* Test case n = 0. */ u8_wordbreaks (NULL, 0, NULL); { static const uint8_t input[91] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 91; i++) { ASSERT (p[i] == ((i >= 6 && i <= 7) || (i >= 11 && i <= 13) || (i >= 37 && i <= 44) || i == 46 || (i >= 50 && i <= 52) || (i >= 54 && i <= 55) || (i >= 58 && i <= 62) || (i >= 64 && i <= 67) || i == 70 || i == 73 || i == 76 || i == 77 || i == 80 || i == 83 || i == 84 || i == 90 ? 1 : 0)); } free (p); } { /* Same input string, decomposed. */ static const uint8_t input[106] = /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ "Gru\314\210\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\270\314\206\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\341\204\222\341\205\241\341\206\253\341\204\200\341\205\263\341\206\257\n"; char *p = (char *) malloc (SIZEOF (input)); size_t i; u8_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 106; i++) { ASSERT (p[i] == ((i >= 7 && i <= 8) || (i >= 12 && i <= 14) || (i >= 40 && i <= 47) || i == 49 || (i >= 53 && i <= 55) || (i >= 57 && i <= 58) || (i >= 61 && i <= 65) || (i >= 67 && i <= 70) || i == 73 || i == 76 || i == 79 || i == 80 || i == 83 || i == 86 || i == 87 || i == 105 ? 1 : 0)); } free (p); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-uc-wordbreaks.c������������������������������������������0000664�0000000�0000000�00000011572�14110572173�0023021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break function test, using test data from UCD. Copyright (C) 2010-2021 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 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/>. */ /* Written by Daiki Ueno <ueno@gnu.org>, 2014. Largely based on unigbrk/test-uc-is-grapheme-break.c, written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */ #include <config.h> /* Specification. */ #include <uniwbrk.h> #include <stdio.h> #include <stdlib.h> #include <string.h> const char * wordbreakproperty_to_string (int wbp) { switch (wbp) { #define CASE(VALUE) case WBP_##VALUE: return #VALUE; CASE(OTHER) CASE(CR) CASE(LF) CASE(NEWLINE) CASE(EXTEND) CASE(FORMAT) CASE(KATAKANA) CASE(ALETTER) CASE(MIDNUMLET) CASE(MIDLETTER) CASE(MIDNUM) CASE(NUMERIC) CASE(EXTENDNUMLET) CASE(RI) CASE(DQ) CASE(SQ) CASE(HL) CASE(ZWJ) CASE(EB) CASE(EM) CASE(GAZ) CASE(EBG) } abort (); } int main (int argc, char *argv[]) { const char *filename; char line[4096]; int exit_code; FILE *stream; int lineno; if (argc != 2) { fprintf (stderr, "usage: %s FILENAME\n" "where FILENAME is the location of the WordBreakTest.txt\n" "test file.\n", argv[0]); exit (1); } filename = argv[1]; stream = fopen (filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", filename); exit (1); } exit_code = 0; lineno = 0; while (fgets (line, sizeof line, stream)) { char *comment; const char *p; uint32_t input[100]; char breaks[101]; char breaks_expected[101]; int i; lineno++; memset (breaks, 0, sizeof (breaks)); memset (breaks_expected, 0, sizeof (breaks_expected)); comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; i = 0; p = line; do { p += strspn (p, " \t\r\n"); if (!strncmp (p, "\303\267" /* ÷ */, 2)) { breaks_expected[i] = 1; p += 2; } else if (!strncmp (p, "\303\227" /* × */, 2)) { breaks_expected[i] = 0; p += 2; } else { fprintf (stderr, "%s:%d.%d: syntax error expecting '÷' or '×'\n", filename, lineno, (int) (p - line + 1)); exit (1); } p += strspn (p, " \t\r\n"); if (*p != '\0') { unsigned int next_int; int n; if (sscanf (p, "%x%n", &next_int, &n) != 1) { fprintf (stderr, "%s:%d.%d: syntax error at '%s' " "expecting hexadecimal Unicode code point number\n", filename, lineno, (int) (p - line + 1), p); exit (1); } p += n; input[i] = next_int; } p += strspn (p, " \t\r\n"); i++; } while (*p != '\0'); u32_wordbreaks (input, i - 1, breaks); /* u32_wordbreaks always set BREAKS[0] to 0. */ breaks[0] = breaks_expected[0] = 1; if (memcmp (breaks, breaks_expected, i - 1) != 0) { int j; fprintf (stderr, "%s:%d: expected: ", filename, lineno); for (j = 0; j < i - 1; j++) { int input_wbp = uc_wordbreak_property (input[j]); fprintf (stderr, "%s U+%04X (%s) ", breaks_expected[j] == 1 ? "\303\267" : "\303\227", input[j], wordbreakproperty_to_string (input_wbp)); } fprintf (stderr, "\n"); fprintf (stderr, "%s:%d: actual: ", filename, lineno); for (j = 0; j < i - 1; j++) { int input_wbp = uc_wordbreak_property (input[j]); fprintf (stderr, "%s U+%04X (%s) ", breaks[j] == 1 ? "\303\267" : "\303\227", input[j], wordbreakproperty_to_string (input_wbp)); } fprintf (stderr, "\n"); exit_code = 1; } } return exit_code; } ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-uc-wordbreaks.sh�����������������������������������������0000775�0000000�0000000�00000000132�14110572173�0023202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ${CHECKER} ./test-uc-wordbreaks${EXEEXT} "${srcdir}/uniwbrk/WordBreakTest.txt" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-ulc-wordbreaks.c�����������������������������������������0000664�0000000�0000000�00000003322�14110572173�0023167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in strings. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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>, 2009. */ #include <config.h> #include "uniwbrk.h" #include <locale.h> #include <stdlib.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test case n = 0. */ ulc_wordbreaks (NULL, 0, NULL); #if HAVE_ICONV { static const char input[36] = /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; char *p = (char *) malloc (SIZEOF (input)); size_t i; ulc_wordbreaks (input, SIZEOF (input), p); for (i = 0; i < 36; i++) { ASSERT (p[i] == ((i >= 4 && i <= 5) || (i >= 9 && i <= 17) || (i >= 21 && i <= 25) || (i >= 28 && i <= 32) || (i >= 34 && i <= 35) ? 1 : 0)); } free (p); } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwbrk/test-ulc-wordbreaks.sh����������������������������������������0000775�0000000�0000000�00000000565�14110572173�0023370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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-ulc-wordbreaks${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0017274�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u16-strwidth.c������������������������������������������0000664�0000000�0000000�00000003406�14110572173�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strwidth() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { { static const uint16_t input[] = /* "Danilo Šegan" */ { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', 0 }; ASSERT (u16_strwidth (input, "UTF-8") == 12); } { static const uint16_t input[] = /* "Danilo Šegan" decomposed */ { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', 0 }; ASSERT (u16_strwidth (input, "UTF-8") == 12); } { static const uint16_t input[] = /* "Данило Шеган" */ { 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, 0 }; ASSERT (u16_strwidth (input, "UTF-8") == 12); ASSERT (u16_strwidth (input, "EUC-JP") == 23); } { static const uint16_t input[] = /* 刘军民 */ { 0x5218, 0x519B, 0x6C11, 0 }; ASSERT (u16_strwidth (input, "UTF-8") == 6); ASSERT (u16_strwidth (input, "GB2312") == 6); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u16-width.c���������������������������������������������0000664�0000000�0000000�00000004024�14110572173�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_width() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { static const uint16_t input[] = { #define INPUT1_OFFSET 0 #define INPUT1_LENGTH 12 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', #define INPUT2_OFFSET 12 #define INPUT2_LENGTH 13 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', #define INPUT3_OFFSET 25 #define INPUT3_LENGTH 12 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, #define INPUT4_OFFSET 37 #define INPUT4_LENGTH 3 0x5218, 0x519B, 0x6C11 }; { /* "Danilo Šegan" */ ASSERT (u16_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); } { /* "Danilo Šegan" decomposed */ ASSERT (u16_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); } { /* "Данило Шеган" */ ASSERT (u16_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); ASSERT (u16_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); } { /* 刘军民 */ ASSERT (u16_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); ASSERT (u16_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u32-strwidth.c������������������������������������������0000664�0000000�0000000�00000003406�14110572173�0022677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strwidth() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { { static const uint32_t input[] = /* "Danilo Šegan" */ { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', 0 }; ASSERT (u32_strwidth (input, "UTF-8") == 12); } { static const uint32_t input[] = /* "Danilo Šegan" decomposed */ { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', 0 }; ASSERT (u32_strwidth (input, "UTF-8") == 12); } { static const uint32_t input[] = /* "Данило Шеган" */ { 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, 0 }; ASSERT (u32_strwidth (input, "UTF-8") == 12); ASSERT (u32_strwidth (input, "EUC-JP") == 23); } { static const uint32_t input[] = /* 刘军民 */ { 0x5218, 0x519B, 0x6C11, 0 }; ASSERT (u32_strwidth (input, "UTF-8") == 6); ASSERT (u32_strwidth (input, "GB2312") == 6); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u32-width.c���������������������������������������������0000664�0000000�0000000�00000004024�14110572173�0022143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_width() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { static const uint32_t input[] = { #define INPUT1_OFFSET 0 #define INPUT1_LENGTH 12 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', #define INPUT2_OFFSET 12 #define INPUT2_LENGTH 13 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', #define INPUT3_OFFSET 25 #define INPUT3_LENGTH 12 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, #define INPUT4_OFFSET 37 #define INPUT4_LENGTH 3 0x5218, 0x519B, 0x6C11 }; { /* "Danilo Šegan" */ ASSERT (u32_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); } { /* "Danilo Šegan" decomposed */ ASSERT (u32_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); } { /* "Данило Шеган" */ ASSERT (u32_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); ASSERT (u32_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); } { /* 刘军民 */ ASSERT (u32_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); ASSERT (u32_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u8-strwidth.c�������������������������������������������0000664�0000000�0000000�00000003171�14110572173�0022621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strwidth() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { { static const uint8_t input[] = "Danilo \305\240egan"; /* "Danilo Šegan" */ ASSERT (u8_strwidth (input, "UTF-8") == 12); } { static const uint8_t input[] = "Danilo S\314\214egan"; /* "Danilo Šegan" decomposed */ ASSERT (u8_strwidth (input, "UTF-8") == 12); } { static const uint8_t input[] = /* "Данило Шеган" */ "\320\224\320\260\320\275\320\270\320\273\320\276 \320\250\320\265\320\263\320\260\320\275"; ASSERT (u8_strwidth (input, "UTF-8") == 12); ASSERT (u8_strwidth (input, "EUC-JP") == 23); } { static const uint8_t input[] = /* 刘军民 */ "\345\210\230\345\206\233\346\260\221"; ASSERT (u8_strwidth (input, "UTF-8") == 6); ASSERT (u8_strwidth (input, "GB2312") == 6); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-u8-width.c����������������������������������������������0000664�0000000�0000000�00000003640�14110572173�0022071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_width() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { static const uint8_t input[] = #define INPUT1_OFFSET 0 #define INPUT1_LENGTH 13 "Danilo \305\240egan" #define INPUT2_OFFSET 13 #define INPUT2_LENGTH 14 "Danilo S\314\214egan" #define INPUT3_OFFSET 27 #define INPUT3_LENGTH 23 "\320\224\320\260\320\275\320\270\320\273\320\276 \320\250\320\265\320\263\320\260\320\275" #define INPUT4_OFFSET 50 #define INPUT4_LENGTH 9 "\345\210\230\345\206\233\346\260\221" ; { /* "Danilo Šegan" */ ASSERT (u8_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); } { /* "Danilo Šegan" decomposed */ ASSERT (u8_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); } { /* "Данило Шеган" */ ASSERT (u8_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); ASSERT (u8_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); } { /* 刘军民 */ ASSERT (u8_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); ASSERT (u8_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); } return 0; } ������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-uc_width.c����������������������������������������������0000664�0000000�0000000�00000003425�14110572173�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include "macros.h" int main () { ucs4_t uc; /* Test width of ASCII characters. */ for (uc = 0x0020; uc < 0x007F; uc++) ASSERT (uc_width (uc, "ISO-8859-2") == 1); /* Test width of some non-spacing characters. */ ASSERT (uc_width (0x0301, "UTF-8") == 0); ASSERT (uc_width (0x05B0, "UTF-8") == 0); /* Test width of some format control characters. */ ASSERT (uc_width (0x200E, "UTF-8") == 0); ASSERT (uc_width (0x2060, "UTF-8") == 0); ASSERT (uc_width (0xE0001, "UTF-8") == 0); ASSERT (uc_width (0xE0044, "UTF-8") == 0); /* Test width of some zero width characters. */ ASSERT (uc_width (0x200B, "UTF-8") == 0); ASSERT (uc_width (0xFEFF, "UTF-8") == 0); /* Test width of some CJK characters. */ ASSERT (uc_width (0x3000, "UTF-8") == 2); ASSERT (uc_width (0xB250, "UTF-8") == 2); ASSERT (uc_width (0xFF1A, "UTF-8") == 2); ASSERT (uc_width (0x20369, "UTF-8") == 2); ASSERT (uc_width (0x2F876, "UTF-8") == 2); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-uc_width2.c���������������������������������������������0000664�0000000�0000000�00000004220�14110572173�0022303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. Copyright (C) 2007-2021 Free Software Foundation, Inc. This 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 "uniwidth.h" #include <stdio.h> #include "macros.h" /* One of 0, '0', '1', 'A', '2'. */ static char current_width; /* The interval for which the current_width holds. */ static ucs4_t current_start; static ucs4_t current_end; static void finish_interval (void) { if (current_width != 0) { if (current_start == current_end) printf ("%04X\t\t%c\n", (unsigned) current_start, current_width); else printf ("%04X..%04X\t%c\n", (unsigned) current_start, (unsigned) current_end, current_width); current_width = 0; } } static void add_to_interval (ucs4_t uc, char width) { if (current_width == width && uc == current_end + 1) current_end = uc; else { finish_interval (); current_width = width; current_start = current_end = uc; } } int main () { ucs4_t uc; for (uc = 0; uc < 0x110000; uc++) { int w1 = uc_width (uc, "UTF-8"); int w2 = uc_width (uc, "GBK"); char width = (w1 == 0 && w2 == 0 ? '0' : w1 == 1 && w2 == 1 ? '1' : w1 == 1 && w2 == 2 ? 'A' : w1 == 2 && w2 == 2 ? '2' : 0); if (width == 0) { /* uc must be a control character. */ ASSERT (w1 < 0 && w2 < 0); } else add_to_interval (uc, width); } finish_interval (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/uniwidth/test-uc_width2.sh��������������������������������������������0000775�0000000�0000000�00000017164�14110572173�0022511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles uc_width.out" ${CHECKER} ./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out tmpfiles="$tmpfiles uc_width.ok" cat > uc_width.ok <<\EOF 0000 0 0020..007E 1 00A0 1 00A1..00AC A 00AD 0 00AE..02FF A 0300..036F 0 0370..0482 A 0483..0489 0 048A..0590 A 0591..05BD 0 05BE A 05BF 0 05C0 A 05C1..05C2 0 05C3 A 05C4..05C5 0 05C6 A 05C7 0 05C8..05FF A 0600..0605 0 0606..060F A 0610..061A 0 061B A 061C 0 061D..064A A 064B..065F 0 0660..066F A 0670 0 0671..06D5 A 06D6..06DD 0 06DE A 06DF..06E4 0 06E5..06E6 A 06E7..06E8 0 06E9 A 06EA..06ED 0 06EE..070E A 070F 0 0710 A 0711 0 0712..072F A 0730..074A 0 074B..07A5 A 07A6..07B0 0 07B1..07EA A 07EB..07F3 0 07F4..0815 A 0816..0819 0 081A A 081B..0823 0 0824 A 0825..0827 0 0828 A 0829..082D 0 082E..0858 A 0859..085B 0 085C..08D3 A 08D4..0902 0 0903..0939 A 093A 0 093B A 093C 0 093D..0940 A 0941..0948 0 0949..094C A 094D 0 094E..0950 A 0951..0957 0 0958..0961 A 0962..0963 0 0964..0980 A 0981 0 0982..09BB A 09BC 0 09BD..09C0 A 09C1..09C4 0 09C5..09CC A 09CD 0 09CE..09E1 A 09E2..09E3 0 09E4..0A00 A 0A01..0A02 0 0A03..0A3B A 0A3C 0 0A3D..0A40 A 0A41..0A42 0 0A43..0A46 A 0A47..0A48 0 0A49..0A4A A 0A4B..0A4D 0 0A4E..0A50 A 0A51 0 0A52..0A6F A 0A70..0A71 0 0A72..0A74 A 0A75 0 0A76..0A80 A 0A81..0A82 0 0A83..0ABB A 0ABC 0 0ABD..0AC0 A 0AC1..0AC5 0 0AC6 A 0AC7..0AC8 0 0AC9..0ACC A 0ACD 0 0ACE..0AE1 A 0AE2..0AE3 0 0AE4..0B00 A 0B01 0 0B02..0B3B A 0B3C 0 0B3D..0B3E A 0B3F 0 0B40 A 0B41..0B44 0 0B45..0B4C A 0B4D 0 0B4E..0B55 A 0B56 0 0B57..0B61 A 0B62..0B63 0 0B64..0B81 A 0B82 0 0B83..0BBF A 0BC0 0 0BC1..0BCC A 0BCD 0 0BCE..0BFF A 0C00 0 0C01..0C3D A 0C3E..0C40 0 0C41..0C45 A 0C46..0C48 0 0C49 A 0C4A..0C4D 0 0C4E..0C54 A 0C55..0C56 0 0C57..0C61 A 0C62..0C63 0 0C64..0C80 A 0C81 0 0C82..0CBB A 0CBC 0 0CBD..0CCB A 0CCC..0CCD 0 0CCE..0CE1 A 0CE2..0CE3 0 0CE4..0D00 A 0D01 0 0D02..0D40 A 0D41..0D44 0 0D45..0D4C A 0D4D 0 0D4E..0D61 A 0D62..0D63 0 0D64..0DC9 A 0DCA 0 0DCB..0DD1 A 0DD2..0DD4 0 0DD5 A 0DD6 0 0DD7..0E30 A 0E31 0 0E32..0E33 A 0E34..0E3A 0 0E3B..0E46 A 0E47..0E4E 0 0E4F..0EB0 A 0EB1 0 0EB2..0EB3 A 0EB4..0EB9 0 0EBA A 0EBB..0EBC 0 0EBD..0EC7 A 0EC8..0ECD 0 0ECE..0F17 A 0F18..0F19 0 0F1A..0F34 A 0F35 0 0F36 A 0F37 0 0F38 A 0F39 0 0F3A..0F70 A 0F71..0F7E 0 0F7F A 0F80..0F84 0 0F85 A 0F86..0F87 0 0F88..0F8C A 0F8D..0F97 0 0F98 A 0F99..0FBC 0 0FBD..0FC5 A 0FC6 0 0FC7..102C A 102D..1030 0 1031 A 1032..1037 0 1038 A 1039..103A 0 103B..103C A 103D..103E 0 103F..1057 A 1058..1059 0 105A..105D A 105E..1060 0 1061..1070 A 1071..1074 0 1075..1081 A 1082 0 1083..1084 A 1085..1086 0 1087..108C A 108D 0 108E..109C A 109D 0 109E..10FF A 1100..115F 2 1160..135C A 135D..135F 0 1360..1711 A 1712..1714 0 1715..1731 A 1732..1734 0 1735..1751 A 1752..1753 0 1754..1771 A 1772..1773 0 1774..17B3 A 17B4..17B5 0 17B6 A 17B7..17BD 0 17BE..17C5 A 17C6 0 17C7..17C8 A 17C9..17D3 0 17D4..17DC A 17DD 0 17DE..180A A 180B..180E 0 180F..1884 A 1885..1886 0 1887..18A8 A 18A9 0 18AA..191F A 1920..1922 0 1923..1926 A 1927..1928 0 1929..1931 A 1932 0 1933..1938 A 1939..193B 0 193C..1A16 A 1A17..1A18 0 1A19..1A1A A 1A1B 0 1A1C..1A55 A 1A56 0 1A57 A 1A58..1A5E 0 1A5F A 1A60 0 1A61 A 1A62 0 1A63..1A64 A 1A65..1A6C 0 1A6D..1A72 A 1A73..1A7C 0 1A7D..1A7E A 1A7F 0 1A80..1AAF A 1AB0..1ABE 0 1ABF..1AFF A 1B00..1B03 0 1B04..1B33 A 1B34 0 1B35 A 1B36..1B3A 0 1B3B A 1B3C 0 1B3D..1B41 A 1B42 0 1B43..1B6A A 1B6B..1B73 0 1B74..1B7F A 1B80..1B81 0 1B82..1BA1 A 1BA2..1BA5 0 1BA6..1BA7 A 1BA8..1BA9 0 1BAA A 1BAB..1BAD 0 1BAE..1BE5 A 1BE6 0 1BE7 A 1BE8..1BE9 0 1BEA..1BEC A 1BED 0 1BEE A 1BEF..1BF1 0 1BF2..1C2B A 1C2C..1C33 0 1C34..1C35 A 1C36..1C37 0 1C38..1CCF A 1CD0..1CD2 0 1CD3 A 1CD4..1CE0 0 1CE1 A 1CE2..1CE8 0 1CE9..1CEC A 1CED 0 1CEE..1CF3 A 1CF4 0 1CF5..1CF7 A 1CF8..1CF9 0 1CFA..1DBF A 1DC0..1DF5 0 1DF6..1DFA A 1DFB..1DFF 0 1E00..200A A 200B..200F 0 2010..2029 A 202A..202E 0 202F..205F A 2060..2064 0 2065 A 2066..206F 0 2070..20A8 A 20A9 1 20AA..20CF A 20D0..20F0 0 20F1..2328 A 2329..232A 2 232B..2CEE A 2CEF..2CF1 0 2CF2..2D7E A 2D7F 0 2D80..2DDF A 2DE0..2DFF 0 2E00..2E7F A 2E80..3029 2 302A..302D 0 302E..303E 2 303F A 3040..3098 2 3099..309A 0 309B..4DBF 2 4DC0..4DFF A 4E00..A4CF 2 A4D0..A66E A A66F..A672 0 A673 A A674..A67D 0 A67E..A69D A A69E..A69F 0 A6A0..A6EF A A6F0..A6F1 0 A6F2..A801 A A802 0 A803..A805 A A806 0 A807..A80A A A80B 0 A80C..A824 A A825..A826 0 A827..A8C3 A A8C4..A8C5 0 A8C6..A8DF A A8E0..A8F1 0 A8F2..A925 A A926..A92D 0 A92E..A946 A A947..A951 0 A952..A97F A A980..A982 0 A983..A9B2 A A9B3 0 A9B4..A9B5 A A9B6..A9B9 0 A9BA..A9BB A A9BC 0 A9BD..A9E4 A A9E5 0 A9E6..AA28 A AA29..AA2E 0 AA2F..AA30 A AA31..AA32 0 AA33..AA34 A AA35..AA36 0 AA37..AA42 A AA43 0 AA44..AA4B A AA4C 0 AA4D..AA7B A AA7C 0 AA7D..AAAF A AAB0 0 AAB1 A AAB2..AAB4 0 AAB5..AAB6 A AAB7..AAB8 0 AAB9..AABD A AABE..AABF 0 AAC0 A AAC1 0 AAC2..AAEB A AAEC..AAED 0 AAEE..AAF5 A AAF6 0 AAF7..ABE4 A ABE5 0 ABE6..ABE7 A ABE8 0 ABE9..ABEC A ABED 0 ABEE..ABFF A AC00..D7A3 2 D7A4..F8FF A F900..FAFF 2 FB00..FB1D A FB1E 0 FB1F..FDFF A FE00..FE0F 0 FE10..FE1F 2 FE20..FE2F 0 FE30..FE6F 2 FE70..FEFE A FEFF 0 FF00..FF60 2 FF61..FFDF 1 FFE0..FFE6 2 FFE7..FFF8 1 FFF9..FFFB 0 FFFC..101FC 1 101FD 0 101FE..102DF 1 102E0 0 102E1..10375 1 10376..1037A 0 1037B..10A00 1 10A01..10A03 0 10A04 1 10A05..10A06 0 10A07..10A0B 1 10A0C..10A0F 0 10A10..10A37 1 10A38..10A3A 0 10A3B..10A3E 1 10A3F 0 10A40..10AE4 1 10AE5..10AE6 0 10AE7..11000 1 11001 0 11002..11037 1 11038..11046 0 11047..1107E 1 1107F..11081 0 11082..110B2 1 110B3..110B6 0 110B7..110B8 1 110B9..110BA 0 110BB..110BC 1 110BD 0 110BE..110FF 1 11100..11102 0 11103..11126 1 11127..1112B 0 1112C 1 1112D..11134 0 11135..11172 1 11173 0 11174..1117F 1 11180..11181 0 11182..111B5 1 111B6..111BE 0 111BF..111C9 1 111CA..111CC 0 111CD..1122E 1 1122F..11231 0 11232..11233 1 11234 0 11235 1 11236..11237 0 11238..1123D 1 1123E 0 1123F..112DE 1 112DF 0 112E0..112E2 1 112E3..112EA 0 112EB..112FF 1 11300..11301 0 11302..1133B 1 1133C 0 1133D..1133F 1 11340 0 11341..11365 1 11366..1136C 0 1136D..1136F 1 11370..11374 0 11375..11437 1 11438..1143F 0 11440..11441 1 11442..11444 0 11445 1 11446 0 11447..114B2 1 114B3..114B8 0 114B9 1 114BA 0 114BB..114BE 1 114BF..114C0 0 114C1 1 114C2..114C3 0 114C4..115B1 1 115B2..115B5 0 115B6..115BB 1 115BC..115BD 0 115BE 1 115BF..115C0 0 115C1..115DB 1 115DC..115DD 0 115DE..11632 1 11633..1163A 0 1163B..1163C 1 1163D 0 1163E 1 1163F..11640 0 11641..116AA 1 116AB 0 116AC 1 116AD 0 116AE..116AF 1 116B0..116B5 0 116B6 1 116B7 0 116B8..1171C 1 1171D..1171F 0 11720..11721 1 11722..11725 0 11726 1 11727..1172B 0 1172C..11C2F 1 11C30..11C36 0 11C37 1 11C38..11C3D 0 11C3E..11C91 1 11C92..11CA7 0 11CA8..11CA9 1 11CAA..11CB0 0 11CB1 1 11CB2..11CB3 0 11CB4 1 11CB5..11CB6 0 11CB7..16AEF 1 16AF0..16AF4 0 16AF5..16B2F 1 16B30..16B36 0 16B37..16F8E 1 16F8F..16F92 0 16F93..1BC9C 1 1BC9D..1BC9E 0 1BC9F 1 1BCA0..1BCA3 0 1BCA4..1D166 1 1D167..1D169 0 1D16A..1D172 1 1D173..1D182 0 1D183..1D184 1 1D185..1D18B 0 1D18C..1D1A9 1 1D1AA..1D1AD 0 1D1AE..1D241 1 1D242..1D244 0 1D245..1D9FF 1 1DA00..1DA36 0 1DA37..1DA3A 1 1DA3B..1DA6C 0 1DA6D..1DA74 1 1DA75 0 1DA76..1DA83 1 1DA84 0 1DA85..1DA9A 1 1DA9B..1DA9F 0 1DAA0 1 1DAA1..1DAAF 0 1DAB0..1DFFF 1 1E000..1E006 0 1E007 1 1E008..1E018 0 1E019..1E01A 1 1E01B..1E021 0 1E022 1 1E023..1E024 0 1E025 1 1E026..1E02A 0 1E02B..1E8CF 1 1E8D0..1E8D6 0 1E8D7..1E943 1 1E944..1E94A 0 1E94B..1FFFF 1 20000..3FFFF 2 40000..E0000 1 E0001 0 E0002..E001F 1 E0020..E007F 0 E0080..E00FF 1 E0100..E01EF 0 E01F0..10FFFF 1 EOF : ${DIFF=diff} ${DIFF} uc_width.ok uc_width.out result=$? rm -fr $tmpfiles exit $result ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/tests/zerosize-ptr.h��������������������������������������������������������0000664�0000000�0000000�00000006104�14110572173�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a pointer to a zero-size object in memory. Copyright (C) 2009-2021 Free Software Foundation, Inc. This 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/>. */ /* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL argument. Therefore this file produces a non-NULL pointer which cannot be dereferenced, if possible. */ /* On Android, when targeting Android 4.4 or older with a GCC toolchain, prevent a compilation error "error: call to 'mmap' declared with attribute error: mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21. Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang." The files that we access in this compilation unit are less than 2 GB large. */ #if defined __ANDROID__ # undef _FILE_OFFSET_BITS # undef __USE_FILE_OFFSET64 #endif #include <stdlib.h> /* Test whether mmap() and mprotect() are available. We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an mprotect() function in libgcc.a. And OS/2 kLIBC has <sys/mman.h> and mprotect(), but not mmap(). */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __KLIBC__ # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> /* Define MAP_FILE when it isn't otherwise. */ # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif /* Return a pointer to a zero-size object in memory (that is, actually, a pointer to a page boundary where the previous page is readable and writable and the next page is neither readable not writable), if possible. Return NULL otherwise. */ static void * zerosize_ptr (void) { /* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is not defined on HP-UX 11 (since it does not support MAP_FIXED). */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __KLIBC__ # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) return two_pages + pagesize; } #endif return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/top/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14110572173�0015101�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/top/GNUmakefile�������������������������������������������������������������0000664�0000000�0000000�00000010741�14110572173�0017156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Having a separate GNUmakefile lets me 'include' the dynamically # generated rules created via cfg.mk (package-local configuration) # as well as maint.mk (generic maintainer rules). # This makefile is used only if you run GNU Make. # It is necessary if you want to build targets usually of interest # only to the maintainer. # Copyright (C) 2001, 2003, 2006-2021 Free Software Foundation, Inc. # This 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/>. # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _gl-Makefile := $(wildcard [M]akefile) ifneq ($(_gl-Makefile),) # Make tar archive easier to reproduce. export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner # Allow the user to add to this in the Makefile. ALL_RECURSIVE_TARGETS = include Makefile # Some projects override e.g., _autoreconf here. -include $(srcdir)/cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include $(srcdir)/maint.mk # Ensure that $(VERSION) is up to date for dist-related targets, but not # for others: rerunning autoreconf and recompiling everything isn't cheap. _have-git-version-gen := \ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) _is-dist-target ?= $(filter-out %clean, \ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) ifneq (,$(_is-dist-target)$(_is-install-target)) _curr-ver := $(shell cd $(srcdir) \ && $(_build-aux)/git-version-gen \ .tarball-version \ $(git-version-gen-tag-sed-script)) ifneq ($(_curr-ver),$(VERSION)) ifeq ($(_curr-ver),UNKNOWN) $(info WARNING: unable to verify if $(VERSION) is the correct version) else ifneq (,$(_is-install-target)) # GNU Coding Standards state that 'make install' should not cause # recompilation after 'make all'. But as long as changing the version # string alters config.h, the cost of having 'make all' always have an # up-to-date version is prohibitive. So, as a compromise, we merely # warn when installing a version string that is out of date; the user # should run 'autoreconf' (or something like 'make distcheck') to # fix the version, 'make all' to propagate it, then 'make install'. $(info WARNING: version string $(VERSION) is out of date;) $(info run '$(MAKE) _version' to fix it) else $(info INFO: running autoreconf for new version string: $(_curr-ver)) GNUmakefile: _version touch GNUmakefile endif endif endif endif endif .PHONY: _version _version: cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) $(MAKE) $(AM_MAKEFLAGS) Makefile else .DEFAULT_GOAL := abort-due-to-no-makefile srcdir = . # The package can override .DEFAULT_GOAL to run actions like autoreconf. -include ./cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include ./maint.mk ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) $(MAKECMDGOALS): abort-due-to-no-makefile endif abort-due-to-no-makefile: @echo There seems to be no Makefile in this directory. 1>&2 @echo "You must run ./configure before running '$(MAKE)'." 1>&2 @exit 1 endif # Tell version 3.79 and up of GNU make to not build goals in this # directory in parallel, in case someone tries to build multiple # targets, and one of them can cause a recursive target to be invoked. # Only set this if Automake doesn't provide it. AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ dist distcheck tags ctags ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) ifneq ($(word 2, $(MAKECMDGOALS)), ) ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) .NOTPARALLEL: endif endif �������������������������������gnulib-20210822~d383792/top/README-release����������������������������������������������������������0000664�0000000�0000000�00000006012�14110572173�0017376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Here are most of the steps we (maintainers) follow when making a release. * Start from a clean, up-to-date git directory on "master": make -k maintainer-clean || { ./configure && make maintainer-clean; } git checkout master git pull origin master * Ensure that the latest stable versions of autoconf, automake, etc. are in your PATH. See the buildreq list in bootstrap.conf for the complete list of tools. * Ensure that you have no uncommitted diffs. This should produce no output: git diff * Ensure that you've pushed all changes that belong in the release: git push origin master * Check that the NixOS/Hydra autobuilder is reporting all is well: https://hydra.nixos.org/project/gnu/@PACKAGE@-master * Run the following command to download any new translations: ./bootstrap && ./configure * Pre-release testing: ensure that the following commands succeed: c=check ve=check-very-expensive; git grep -q "^$ve:\$" && c=$ve make $c syntax-check distcheck * To (i) set the date, version number, and release TYPE on line 3 of NEWS, (ii) commit that, and (iii) tag the release, run # "TYPE" must be stable, beta or alpha make release-commit RELEASE='X.Y TYPE' * Run the following to create release tarballs. Your choice selects the corresponding upload-to destination in the emitted gnupload command. The different destinations are specified in cfg.mk. See the definitions of gnu_ftp_host-{alpha,beta,stable}. make release RELEASE='X.Y TYPE' * Test the tarball. Copy it to a few odd-ball systems and ensure that it builds and passes all tests. * While that's happening, write the release announcement that you will soon post. Start with the template, $HOME/announce-@PACKAGE@-X.Y that was just created by that "make" command. Once all the builds and tests have passed, * Run the gnupload command that was suggested by your "make release" run above, or run make upload RELEASE='X.Y TYPE' * Wait a few minutes (maybe up to 30?) and then use the release URLs to download all tarball/signature pairs and use gpg --verify to ensure that they're all valid. * Push the NEWS-updating changes and the new tag: v=$(cat .prev-version) git push origin master tag v$v * Announce it on Savannah first, so you can include the savannah.org announcement link in the email message. Go to the news-submission form: https://savannah.gnu.org/news/submit.php?group=@PACKAGE@ If it does not work, then enable "News" for the project via this link: https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=@PACKAGE@ Write something like the following: Subject: @PACKAGE@-X.Y released [stable] +verbatim+ ...paste the announcement here... -verbatim- Then go here to approve it: https://savannah.gnu.org/news/approve.php?group=@PACKAGE@ * Send the announcement email message. * After each non-alpha release, run make web-manual-update to update the on-line manual accessible at https://www.gnu.org/software/@PACKAGE@/manual/ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/top/gitsub.sh���������������������������������������������������������������0000775�0000000�0000000�00000041020�14110572173�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Copyright (C) 2019-2021 Free Software Foundation, Inc. # Written by Bruno Haible <bruno@clisp.org>, 2019. # # This 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/>. # Program that manages the subdirectories of a git checkout of a package # that come from other packages (called "dependency packages"). # # This program is similar in spirit to 'git submodule', with three # essential differences: # # 1) Its options are easy to remember, and do not require knowledge of # 'git submodule'. # # 2) The developer may choose to work on a different checkout for each # dependency package. This is important when the developer is # preparing simultaneous changes to the package and the dependency # package, or is using the dependency package in several packages. # # The developer indicates this different checkout by setting the # environment variable <SUBDIR>_SRCDIR (e.g. GNULIB_SRCDIR) to point to it. # # 3) The package maintainer may choose to use or not use git submodules. # # The advantages of management through a git submodule are: # - Changes to the dependency package cannot suddenly break your package. # In other words, when there is an incompatible change that will cause # a breakage, you can fix things at your pace; you are not forced to # cope with such breakages in an emergency. # - When you need to make a change as a response to a change in the # dependency package, your co-developers cannot accidentally mix things # up (for example, use a combination of your newest change with an # older version of the dependency package). # # The advantages of management without a git submodule (just as a plain # subdirectory, let's call it a "subcheckout") are: # - The simplicity: you are conceptually always using the newest revision # of the dependency package. # - You don't have to remember to periodially upgrade the dependency. # Upgrading the dependency is an implicit operation. # This program is meant to be copied to the top-level directory of the package, # together with a configuration file. The configuration is supposed to be # named '.gitmodules' and to define: # * The git submodules, as described in "man 5 gitmodules" or # <https://git-scm.com/docs/gitmodules>. For example: # # [submodule "gnulib"] # url = https://git.savannah.gnu.org/git/gnulib.git # path = gnulib # # You don't add this piece of configuration to .gitmodules manually. Instead, # you would invoke # $ git submodule add --name "gnulib" -- https://git.savannah.gnu.org/git/gnulib.git gnulib # # * The subdirectories that are not git submodules, in a similar syntax. For # example: # # [subcheckout "gnulib"] # url = https://git.savannah.gnu.org/git/gnulib.git # path = gnulib # # Here the URL is the one used for anonymous checkouts of the dependency # package. If the developer needs a checkout with write access, they can # either set the GNULIB_SRCDIR environment variable to point to that checkout # or modify the gnulib/.git/config file to enter a different URL. scriptname="$0" scriptversion='2019-04-01' nl=' ' IFS=" "" $nl" # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: gitsub.sh pull [SUBDIR] gitsub.sh upgrade [SUBDIR] gitsub.sh checkout SUBDIR REVISION Operations: gitsub.sh pull [GIT_OPTIONS] [SUBDIR] You should perform this operation after 'git clone ...' and after every 'git pull'. It brings your checkout in sync with what the other developers of your package have committed and pushed. If an environment variable <SUBDIR>_SRCDIR is set, with a non-empty value, nothing is done for this SUBDIR. Supported GIT_OPTIONS (for expert git users) are: --reference <repository> --depth <depth> --recursive If no SUBDIR is specified, the operation applies to all dependencies. gitsub.sh upgrade [SUBDIR] You should perform this operation periodically, to ensure currency of the dependency package revisions that you use. This operation pulls and checks out the changes that the developers of the dependency package have committed and pushed. If an environment variable <SUBDIR>_SRCDIR is set, with a non-empty value, nothing is done for this SUBDIR. If no SUBDIR is specified, the operation applies to all dependencies. gitsub.sh checkout SUBDIR REVISION Checks out a specific revision for a dependency package. If an environment variable <SUBDIR>_SRCDIR is set, with a non-empty value, this operation fails. This script requires the git program in the PATH and an internet connection. " } # func_version # outputs to stdout the --version message. func_version () { year=`echo "$scriptversion" | sed -e 's/^\(....\)-.*/\1/'` echo "\ gitsub.sh (GNU gnulib) $scriptversion Copyright (C) 2019-$year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. " printf "Written by %s.\n" "Bruno Haible" } # func_fatal_error message # outputs to stderr a fatal error message, and terminates the program. # Input: # - scriptname name of this program func_fatal_error () { echo "$scriptname: *** $1" 1>&2 echo "$scriptname: *** Stop." 1>&2 exit 1 } # func_warning message # Outputs to stderr a warning message, func_warning () { echo "gitsub.sh: warning: $1" 1>&2 } # func_note message # Outputs to stdout a note message, func_note () { echo "gitsub.sh: note: $1" } # Unset CDPATH. Otherwise, output from 'cd dir' can surprise callers. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Command-line option processing. mode= while test $# -gt 0; do case "$1" in --help | --hel | --he | --h ) func_usage exit $? ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version exit $? ;; -- ) # Stop option processing shift break ;; -* ) echo "gitsub.sh: unknown option $1" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 ;; * ) break ;; esac done if test $# = 0; then echo "gitsub.sh: missing operation argument" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 fi case "$1" in pull | upgrade | checkout ) mode="$1" shift ;; *) echo "gitsub.sh: unknown operation '$1'" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 ;; esac if { test $mode = upgrade && test $# -gt 1; } \ || { test $mode = checkout && test $# -gt 2; }; then echo "gitsub.sh: too many arguments in '$mode' mode" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 fi if test $# = 0 && test $mode = checkout; then echo "gitsub.sh: too few arguments in '$mode' mode" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 fi # Read the configuration. # Output: # - subcheckout_names space-separated list of subcheckout names # - submodule_names space-separated list of submodule names if test -f .gitmodules; then subcheckout_names=`git config --file .gitmodules --get-regexp --name-only 'subcheckout\..*\.url' | sed -e 's/^subcheckout\.//' -e 's/\.url$//' | tr -d '\r' | tr '\n' ' '` submodule_names=`git config --file .gitmodules --get-regexp --name-only 'submodule\..*\.url' | sed -e 's/^submodule\.//' -e 's/\.url$//' | tr -d '\r' | tr '\n' ' '` else subcheckout_names= submodule_names= fi # func_validate SUBDIR # Verifies that the state on the file system is in sync with the declarations # in the configuration file. # Input: # - subcheckout_names space-separated list of subcheckout names # - submodule_names space-separated list of submodule names # Output: # - srcdirvar Environment that the user can set # - srcdir Value of the environment variable # - path if $srcdir = "": relative path of the subdirectory # - needs_init if $srcdir = "" and $path is not yet initialized: # true # - url if $srcdir = "" and $path is not yet initialized: # the repository URL func_validate () { srcdirvar=`echo "$1" | LC_ALL=C sed -e 's/[^a-zA-Z0-9]/_/g' | LC_ALL=C tr '[a-z]' '[A-Z]'`"_SRCDIR" eval 'srcdir=$'"$srcdirvar" path= url= if test -n "$srcdir"; then func_note "Ignoring '$1' because $srcdirvar is set." else found=false needs_init= case " $subcheckout_names " in *" $1 "*) found=true # It ought to be a subcheckout. path=`git config --file .gitmodules "subcheckout.$1.path"` if test -z "$path"; then path="$1" fi if test -d "$path"; then if test -d "$path/.git"; then # It's a plain checkout. : else if test -f "$path/.git"; then # It's a submodule. func_fatal_error "Subdirectory '$path' is supposed to be a plain checkout, but it is a submodule." else func_warning "Ignoring '$path' because it exists but is not a git checkout." fi fi else # The subdir does not yet exist. needs_init=true url=`git config --file .gitmodules "subcheckout.$1.url"` if test -z "$url"; then func_fatal_error "Property subcheckout.$1.url is not defined in .gitmodules" fi fi ;; esac case " $submodule_names " in *" $1 "*) found=true # It ought to be a submodule. path=`git config --file .gitmodules "submodule.$1.path"` if test -z "$path"; then path="$1" fi if test -d "$path"; then if test -d "$path/.git" || test -f "$path/.git"; then # It's likely a submodule. : else path_if_empty=`find "$path" -prune -empty 2>/dev/null` if test -n "$path_if_empty"; then # The subdir is empty. needs_init=true else # The subdir is not empty. # It is important to report an error, because we don't want to erase # the user's files and 'git submodule update gnulib' sometimes reports # "fatal: destination path '$path' already exists and is not an empty directory." # but sometimes does not. func_fatal_error "Subdir '$path' exists but is not a git checkout." fi fi else # The subdir does not yet exist. needs_init=true fi # Another way to determine needs_init could be: # if git submodule status "$path" | grep '^-' > /dev/null; then # needs_init=true # fi if test -n "$needs_init"; then url=`git config --file .gitmodules "submodule.$1.url"` if test -z "$url"; then func_fatal_error "Property submodule.$1.url is not defined in .gitmodules" fi fi ;; esac if ! $found; then func_fatal_error "Subdir '$1' is not configured as a subcheckout or a submodule in .gitmodules" fi fi } # func_cleanup_current_git_clone # Cleans up the current 'git clone' operation. # Input: # - path func_cleanup_current_git_clone () { rm -rf "$path" func_fatal_error "git clone failed" } # func_pull SUBDIR GIT_OPTIONS # Implements the 'pull' operation. func_pull () { func_validate "$1" if test -z "$srcdir"; then case " $subcheckout_names " in *" $1 "*) # It's a subcheckout. if test -d "$path"; then if test -d "$path/.git"; then (cd "$path" && git pull) || func_fatal_error "git operation failed" fi else # The subdir does not yet exist. Create a plain checkout. trap func_cleanup_current_git_clone 1 2 13 15 git clone $2 "$url" "$path" || func_cleanup_current_git_clone trap - 1 2 13 15 fi ;; esac case " $submodule_names " in *" $1 "*) # It's a submodule. if test -n "$needs_init"; then # Create a submodule checkout. git submodule init -- "$path" && git submodule update $2 -- "$path" || func_fatal_error "git operation failed" else # See https://stackoverflow.com/questions/1030169/easy-way-to-pull-latest-of-all-git-submodules # https://stackoverflow.com/questions/4611512/is-there-a-way-to-make-git-pull-automatically-update-submodules git submodule update "$path" || func_fatal_error "git operation failed" fi ;; esac fi } # func_upgrade SUBDIR # Implements the 'upgrade' operation. func_upgrade () { func_validate "$1" if test -z "$srcdir"; then if test -d "$path"; then case " $subcheckout_names " in *" $1 "*) # It's a subcheckout. if test -d "$path/.git"; then (cd "$path" && git pull) || func_fatal_error "git operation failed" fi ;; esac case " $submodule_names " in *" $1 "*) # It's a submodule. if test -z "$needs_init"; then (cd "$path" && git fetch && git merge origin/master) || func_fatal_error "git operation failed" fi ;; esac else # The subdir does not yet exist. func_fatal_error "Subdirectory '$path' does not exist yet. Use 'gitsub.sh pull' to create it." fi fi } # func_checkout SUBDIR REVISION # Implements the 'checkout' operation. func_checkout () { func_validate "$1" if test -z "$srcdir"; then if test -d "$path"; then case " $subcheckout_names " in *" $1 "*) # It's a subcheckout. if test -d "$path/.git"; then (cd "$path" && git checkout "$2") || func_fatal_error "git operation failed" fi ;; esac case " $submodule_names " in *" $1 "*) # It's a submodule. if test -z "$needs_init"; then (cd "$path" && git checkout "$2") || func_fatal_error "git operation failed" fi ;; esac else # The subdir does not yet exist. func_fatal_error "Subdirectory '$path' does not exist yet. Use 'gitsub.sh pull' to create it." fi fi } case "$mode" in pull ) git_options="" while test $# -gt 0; do case "$1" in --reference=* | --depth=* | --recursive) git_options="$git_options $1" shift ;; --reference | --depth) git_options="$git_options $1 $2" shift; shift ;; *) break ;; esac done if test $# -gt 1; then echo "gitsub.sh: too many arguments in '$mode' mode" 1>&2 echo "Try 'gitsub.sh --help' for more information." 1>&2 exit 1 fi if test $# = 0; then for sub in $subcheckout_names $submodule_names; do func_pull "$sub" "$git_options" done else valid=false for sub in $subcheckout_names $submodule_names; do if test "$sub" = "$1"; then valid=true fi done if $valid; then func_pull "$1" "$git_options" else func_fatal_error "Subdir '$1' is not configured as a subcheckout or a submodule in .gitmodules" fi fi ;; upgrade ) if test $# = 0; then for sub in $subcheckout_names $submodule_names; do func_upgrade "$sub" done else valid=false for sub in $subcheckout_names $submodule_names; do if test "$sub" = "$1"; then valid=true fi done if $valid; then func_upgrade "$1" else func_fatal_error "Subdir '$1' is not configured as a subcheckout or a submodule in .gitmodules" fi fi ;; checkout ) valid=false for sub in $subcheckout_names $submodule_names; do if test "$sub" = "$1"; then valid=true fi done if $valid; then func_checkout "$1" "$2" else func_fatal_error "Subdir '$1' is not configured as a subcheckout or a submodule in .gitmodules" fi ;; esac ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/top/maint.mk����������������������������������������������������������������0000664�0000000�0000000�00000201612�14110572173�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*-Makefile-*- # This Makefile fragment tries to be general-purpose enough to be # used by many projects via the gnulib maintainer-makefile module. ## Copyright (C) 2001-2021 Free Software Foundation, Inc. ## ## This 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/>. # This is reported not to work with make-3.79.1 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) ME := maint.mk # These variables ought to be defined through the configure.ac section # of the module description. But some packages import this file directly, # ignoring the module description. AWK ?= awk GREP ?= grep SED ?= sed # Helper variables. _empty = _sp = $(_empty) $(_empty) # _equal,S1,S2 # ------------ # If S1 == S2, return S1, otherwise the empty string. _equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # member-check,VARIABLE,VALID-VALUES # ---------------------------------- # Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and # return it. Die otherwise. member-check = \ $(strip \ $(if $($(1)), \ $(if $(findstring $(_sp),$($(1))), \ $(error invalid $(1): '$($(1))', expected $(2)), \ $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ $(error invalid $(1): '$($(1))', expected $(2)))), \ $(error $(1) undefined))) # Do not save the original name or timestamp in the .tar.gz file. # Use --rsyncable if available. gzip_rsyncable := \ $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \ && printf %s --rsyncable) GZIP_ENV = '--no-name --best $(gzip_rsyncable)' GIT = git VC = $(GIT) VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) # You can override this variable in cfg.mk if your gnulib submodule lives # in a different location. gnulib_dir ?= $(shell if test -d $(srcdir)/gnulib; then \ echo $(srcdir)/gnulib; \ else \ echo ${GNULIB_SRCDIR}; \ fi) # You can override this variable in cfg.mk to set your own regexp # matching files to ignore. VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ # This is to preprocess robustly the output of $(VC_LIST), so that even # when $(srcdir) is a pathological name like "....", the leading sed command # removes only the intended prefix. _dot_escaped_srcdir = $(subst .,\.,$(srcdir)) # Post-process $(VC_LIST) output, prepending $(srcdir)/, but only # when $(srcdir) is not ".". ifeq ($(srcdir),.) _prepend_srcdir_prefix = else _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|' endif # In order to be able to consistently filter "."-relative names, # (i.e., with no $(srcdir) prefix), this definition is careful to # remove any $(srcdir) prefix, and to restore what it removes. _sc_excl = \ $(or $(exclude_file_name_regexp--$@),^$$) VC_LIST_EXCEPT = \ $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | if test -f $(srcdir)/.x-$@; then $(GREP) -vEf $(srcdir)/.x-$@; \ else $(GREP) -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ | $(GREP) -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ $(_prepend_srcdir_prefix) ifeq ($(origin prev_version_file), undefined) prev_version_file = $(srcdir)/.prev-version endif PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) VERSION_REGEXP = $(subst .,\.,$(VERSION)) PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) ifeq ($(VC),$(GIT)) this-vc-tag = v$(VERSION) this-vc-tag-regexp = v$(VERSION_REGEXP) else tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') tag-this-version = $(subst .,_,$(VERSION)) this-vc-tag = $(tag-package)-$(tag-this-version) this-vc-tag-regexp = $(this-vc-tag) endif my_distdir = $(PACKAGE)-$(VERSION) # Old releases are stored here. release_archive_dir ?= ../release # If RELEASE_TYPE is undefined, but RELEASE is, use its second word. # But overwrite VERSION. ifdef RELEASE VERSION := $(word 1, $(RELEASE)) RELEASE_TYPE ?= $(word 2, $(RELEASE)) endif # Validate and return $(RELEASE_TYPE), or die. RELEASE_TYPES = alpha beta stable release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) # Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. # Use alpha.gnu.org for alpha and beta releases. # Use ftp.gnu.org for stable releases. gnu_ftp_host-alpha = alpha.gnu.org gnu_ftp_host-beta = alpha.gnu.org gnu_ftp_host-stable = ftp.gnu.org gnu_rel_host ?= $(gnu_ftp_host-$(release-type)) url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ https://ftpmirror.gnu.org/$(PACKAGE), \ https://$(gnu_rel_host)/gnu/$(PACKAGE)) # Override this in cfg.mk if you are using a different format in your # NEWS file. today = $(shell date +%Y-%m-%d) # Select which lines of NEWS are searched for $(news-check-regexp). # This is a sed line number spec. The default says that we search # lines 1..10 of NEWS for $(news-check-regexp). # If you want to search only line 3 or only lines 20-22, use "3" or "20,22". news-check-lines-spec ?= 1,10 news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' # Prevent programs like 'sort' from considering distinct strings to be equal. # Doing it here saves us from having to set LC_ALL elsewhere in this file. export LC_ALL = C ## --------------- ## ## Sanity checks. ## ## --------------- ## ifneq ($(_gl-Makefile),) _cfg_mk := $(wildcard $(srcdir)/cfg.mk) # Collect the names of rules starting with 'sc_'. syntax-check-rules := $(sort $(shell env LC_ALL=C $(SED) -n \ 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk))) .PHONY: $(syntax-check-rules) ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) local-checks-available += $(syntax-check-rules) else local-checks-available += no-vc-detected no-vc-detected: @echo "No version control files detected; skipping syntax check" endif .PHONY: $(local-checks-available) # Arrange to print the name of each syntax-checking rule just before running it. $(syntax-check-rules): %: %.m sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) .PHONY: $(sc_m_rules_) $(sc_m_rules_): @echo $(patsubst sc_%.m, %, $@) @date +%s.%N > .sc-start-$(basename $@) # Compute and print the elapsed time for each syntax-check rule. sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) .PHONY: $(sc_z_rules_) $(sc_z_rules_): %.z: % @end=$$(date +%s.%N); \ start=$$(cat .sc-start-$*); \ rm -f .sc-start-$*; \ $(AWK) -v s=$$start -v e=$$end \ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null # The patsubst here is to replace each sc_% rule with its sc_%.z wrapper # that computes and prints elapsed time. local-check := \ $(patsubst sc_%, sc_%.z, \ $(filter-out $(local-checks-to-skip), $(local-checks-available))) syntax-check: $(local-check) endif # _sc_search_regexp # # This macro searches for a given construct in the selected files and # then takes some action. # # Parameters (shell variables): # # prohibit | require # # Regular expression (ERE) denoting either a forbidden construct # or a required construct. Those arguments are exclusive. # # exclude # # Regular expression (ERE) denoting lines to ignore that matched # a prohibit construct. For example, this can be used to exclude # comments that mention why the nearby code uses an alternative # construct instead of the simpler prohibited construct. # # in_vc_files | in_files # # grep-E-style regexp selecting the files to check. For in_vc_files, # the regexp is used to select matching files from the list of all # version-controlled files; for in_files, it's from the names printed # by "find $(srcdir)". When neither is specified, use all files that # are under version control. # # containing | non_containing # # Select the files (non) containing strings matching this regexp. # If both arguments are specified then CONTAINING takes # precedence. # # with_grep_options # # Extra options for grep. # # ignore_case # # Ignore case. # # halt # # Message to display before to halting execution. # # Finally, you may exempt files based on an ERE matching file names. # For example, to exempt from the sc_space_tab check all files with the # .diff suffix, set this Make variable: # # exclude_file_name_regexp--sc_space_tab = \.diff$ # # Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, # when filtering by name via in_files, we explicitly filter out matching # names here as well. # Initialize each, so that envvar settings cannot interfere. export require = export prohibit = export exclude = export in_vc_files = export in_files = export containing = export non_containing = export halt = export with_grep_options = # By default, _sc_search_regexp does not ignore case. export ignore_case = _ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) define _sc_say_and_exit dummy=; : so we do not need a semicolon before each use; \ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; endef define _sc_search_regexp dummy=; : so we do not need a semicolon before each use; \ \ : Check arguments; \ test -n "$$prohibit" && test -n "$$require" \ && { msg='Cannot specify both prohibit and require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -z "$$require" \ && { msg='Should specify either prohibit or require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -n "$$exclude" \ && { msg='Use of exclude requires a prohibit pattern' \ $(_sc_say_and_exit) } || :; \ test -n "$$in_vc_files" && test -n "$$in_files" \ && { msg='Cannot specify both in_vc_files and in_files' \ $(_sc_say_and_exit) } || :; \ test "x$$halt" != x \ || { msg='halt not defined' $(_sc_say_and_exit) }; \ \ : Filter by file name; \ if test -n "$$in_files"; then \ files=$$(find $(srcdir) | $(GREP) -E "$$in_files" \ | $(GREP) -Ev '$(_sc_excl)'); \ else \ files=$$($(VC_LIST_EXCEPT)); \ if test -n "$$in_vc_files"; then \ files=$$(echo "$$files" | $(GREP) -E "$$in_vc_files"); \ fi; \ fi; \ \ : Filter by content; \ test -n "$$files" \ && test -n "$$containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); } \ || :; \ test -n "$$files" \ && test -n "$$non_containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \ || :; \ \ : Check for the construct; \ if test -n "$$files"; then \ if test -n "$$prohibit"; then \ echo "$$files" \ | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE \ "$$prohibit" /dev/null \ | $(GREP) -vE "$${exclude:-^$$}" \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ else \ echo "$$files" \ | xargs \ $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \ | $(GREP) . \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ fi \ else :; \ fi || :; endef sc_avoid_if_before_free: @$(VC_LIST_EXCEPT) \ | $(GREP) -v useless-if-before-free \ | xargs \ $(srcdir)/$(_build-aux)/useless-if-before-free \ $(useless_free_options) \ && { printf '$(ME): found useless "if"' \ ' before "free" above\n' 1>&2; \ exit 1; } \ || : sc_cast_of_argument_to_free: @prohibit='\<free *\( *\(' halt="don't cast free argument" \ $(_sc_search_regexp) sc_cast_of_x_alloc_return_value: @prohibit='\*\) *x(m|c|re)alloc\>' \ halt="don't cast x*alloc return value" \ $(_sc_search_regexp) sc_cast_of_alloca_return_value: @prohibit='\*\) *alloca\>' \ halt="don't cast alloca return value" \ $(_sc_search_regexp) sc_space_tab: @prohibit='[ ] ' \ halt='found SPACE-TAB sequence; remove the SPACE' \ $(_sc_search_regexp) # Don't use *scanf or the old ato* functions in "real" code. # They provide no error checking mechanism. # Instead, use strto* functions. sc_prohibit_atoi_atof: @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\(' \ halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \ $(_sc_search_regexp) # Use STREQ rather than comparing strcmp == 0, or != 0. sp_ = strcmp *\(.+\) sc_prohibit_strcmp: @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \ exclude='# *define STRN?EQ\(' \ halt='replace strcmp calls above with STREQ/STRNEQ' \ $(_sc_search_regexp) # Really. You don't want to use this function. # It may fail to NUL-terminate the destination, # and always NUL-pads out to the specified length. sc_prohibit_strncpy: @prohibit='\<strncpy *\(' \ halt='do not use strncpy, period' \ $(_sc_search_regexp) # Pass EXIT_*, not number, to usage, exit, and error (when exiting) # Convert all uses automatically, via these two commands: # git grep -l '\<exit *(1)' \ # | grep -vEf .x-sc_prohibit_magic_number_exit \ # | xargs --no-run-if-empty \ # perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/' # git grep -l '\<exit *(0)' \ # | grep -vEf .x-sc_prohibit_magic_number_exit \ # | xargs --no-run-if-empty \ # perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/' sc_prohibit_magic_number_exit: @prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]' \ exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \ halt='use EXIT_* values rather than magic number' \ $(_sc_search_regexp) # Check that we don't use $< in non-implicit Makefile rules. # # To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would # miss the Makefiles that are not under VC control (e.g., symlinks # installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems # too delicate. # # Use GNU Make's --print-data-base to normalize the rules into some # easy to parse format: they are separated by two \n. Look for the # "section" about non-pattern rules (marked with "# Files") inside # which there are still the POSIX Make like implicit rules (".c.o"). sc_prohibit_gnu_make_extensions_awk_ = \ BEGIN { \ RS = "\n\n"; \ in_rules = 0; \ } \ /^\# Files/ { \ in_rules = 1; \ } \ /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \ print "Error: " file ": $$< in a non implicit rule\n" $$0; \ status = 1; \ } \ END { \ exit status; \ } sc_prohibit_gnu_make_extensions: @if $(AWK) --version | grep GNU >/dev/null 2>&1; then \ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \ tr ' ' '\n' | \ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \ while read m; do \ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \ $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \ done; \ fi # Using EXIT_SUCCESS as the first argument to error is misleading, # since when that parameter is 0, error does not exit. Use '0' instead. sc_error_exit_success: @prohibit='error *\(EXIT_SUCCESS,' \ in_vc_files='\.[chly]$$' \ halt='found error (EXIT_SUCCESS' \ $(_sc_search_regexp) # "FATAL:" should be fully upper-cased in error messages # "WARNING:" should be fully upper-cased, or fully lower-cased sc_error_message_warn_fatal: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"Warning|"Fatal|"fatal' \ && { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \ exit 1; } \ || : # Error messages should not start with a capital letter sc_error_message_uppercase: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"[A-Z]' \ | $(GREP) -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' \ && { echo '$(ME): found capitalized error message' 1>&2; \ exit 1; } \ || : # Error messages should not end with a period sc_error_message_period: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '[^."]\."' \ && { echo '$(ME): found error message ending in period' 1>&2; \ exit 1; } \ || : sc_file_system: @prohibit=file''system \ exclude='/proc/filesystems' \ ignore_case=1 \ halt='found use of "file''system"; spell it "file system"' \ $(_sc_search_regexp) # Don't use cpp tests of this symbol. All code assumes config.h is included. sc_prohibit_have_config_h: @prohibit='^# *if.*HAVE''_CONFIG_H' \ halt='found use of HAVE''_CONFIG_H; remove' \ $(_sc_search_regexp) # Nearly all .c files must include <config.h>. However, we also permit this # via inclusion of a package-specific header, if cfg.mk specified one. # config_h_header must be suitable for grep -E. config_h_header ?= <config\.h> sc_require_config_h: @require='^# *include $(config_h_header)' \ in_vc_files='\.c$$' \ halt='the above files do not include <config.h>' \ $(_sc_search_regexp) # Print each file name for which the first #include does not match # $(config_h_header). Like grep -m 1, this only looks at the first match. perl_config_h_first_ = \ -e 'BEGIN {$$ret = 0}' \ -e 'if (/^\# *include\b/) {' \ -e ' if (not m{^\# *include $(config_h_header)}) {' \ -e ' print "$$ARGV\n";' \ -e ' $$ret = 1;' \ -e ' }' \ -e ' \# Move on to next file after first include' \ -e ' close ARGV;' \ -e '}' \ -e 'END {exit $$ret}' # You must include <config.h> before including any other header file. # This can possibly be via a package-specific header, if given by cfg.mk. sc_require_config_h_first: @if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') && \ perl -n $(perl_config_h_first_) $$files || \ { echo '$(ME): the above files include some other header' \ 'before <config.h>' 1>&2; exit 1; } || :; \ else :; \ fi sc_prohibit_HAVE_MBRTOWC: @prohibit='\bHAVE_MBRTOWC\b' \ halt="do not use $$prohibit; it is always defined" \ $(_sc_search_regexp) # To use this "command" macro, you must first define two shell variables: # h: the header name, with no enclosing <> or "" # re: a regular expression that matches IFF something provided by $h is used. define _sc_header_without_use dummy=; : so we do not need a semicolon before each use; \ h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \ if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(GREP) -l '^# *include '"$$h_esc" \ $$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$')) && \ $(GREP) -LE "$$re" $$files | $(GREP) . && \ { echo "$(ME): the above files include $$h but don't use it" \ 1>&2; exit 1; } || :; \ else :; \ fi endef # Prohibit the inclusion of assert.h without an actual use of assert. sc_prohibit_assert_without_use: @h='assert.h' re='\<assert *\(' $(_sc_header_without_use) # Prohibit the inclusion of close-stream.h without an actual use. sc_prohibit_close_stream_without_use: @h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use) # Prohibit the inclusion of getopt.h without an actual use. sc_prohibit_getopt_without_use: @h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use) # Don't include quotearg.h unless you use one of its functions. sc_prohibit_quotearg_without_use: @h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use) # Don't include quote.h unless you use one of its functions. sc_prohibit_quote_without_use: @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_long_options_without_use: @h='long-options.h' re='\<parse_(long_options|gnu_standard_options_only) *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_inttostr_without_use: @h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_ignore_value_without_use: @h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_error_without_use: @h='error.h' \ re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\ $(_sc_header_without_use) # Don't include xalloc.h unless you use one of its functions. # Consider these symbols: # perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__'; # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h # Divide into two sets on case, and filter each through this: # | sort | perl -MRegexp::Assemble -le \ # 'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g' # Note this was produced by the above: # _xa1 = \ #x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) # But we can do better, in at least two ways: # 1) take advantage of two "dup"-suffixed strings: # x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) # 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable # "char|[cmz]" # x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa2 = X([CZ]|N?M)ALLOC sc_prohibit_xalloc_without_use: @h='xalloc.h' \ re='\<($(_xa1)|$(_xa2)) *\('\ $(_sc_header_without_use) # Extract function names: # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h _hash_re = \ clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning _hash_fn = \<($(_hash_re)) *\( _hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> sc_prohibit_hash_without_use: @h='hash.h' \ re='$(_hash_fn)|$(_hash_struct)'\ $(_sc_header_without_use) sc_prohibit_cloexec_without_use: @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ $(_sc_header_without_use) sc_prohibit_posixver_without_use: @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use) sc_prohibit_same_without_use: @h='same.h' re='\<same_name(at)? *\(' $(_sc_header_without_use) sc_prohibit_hash_pjw_without_use: @h='hash-pjw.h' \ re='\<hash_pjw\>' \ $(_sc_header_without_use) sc_prohibit_safe_read_without_use: @h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \ $(_sc_header_without_use) sc_prohibit_argmatch_without_use: @h='argmatch.h' \ re='(\<(ARGMATCH_DEFINE_GROUP|ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \ $(_sc_header_without_use) sc_prohibit_canonicalize_without_use: @h='canonicalize.h' \ re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \ $(_sc_header_without_use) sc_prohibit_root_dev_ino_without_use: @h='root-dev-ino.h' \ re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \ $(_sc_header_without_use) sc_prohibit_openat_without_use: @h='openat.h' \ re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \ $(_sc_header_without_use) # Prohibit the inclusion of c-ctype.h without an actual use. ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\ |isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper sc_prohibit_c_ctype_without_use: @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \ $(_sc_header_without_use) # The following list was generated by running: # man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \ # | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt _sig_functions = \ bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \ sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \ siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \ sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo _sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions))) # The following were extracted from "man signal.h" manually. _sig_types_and_consts = \ MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK \ SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL \ SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE \ SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \ sigstack sigval stack_t ucontext_t # generated via this: # perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70 _sig_names = \ SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT \ SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL \ SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \ SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR \ SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS \ SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 \ SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW \ SIGXCPU SIGXFSZ _sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts))) # Prohibit the inclusion of signal.h without an actual use. sc_prohibit_signal_without_use: @h='signal.h' \ re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>' \ $(_sc_header_without_use) # Don't include stdio--.h unless you use one of its functions. sc_prohibit_stdio--_without_use: @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \ $(_sc_header_without_use) # Don't include stdio-safer.h unless you use one of its functions. sc_prohibit_stdio-safer_without_use: @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \ $(_sc_header_without_use) # Prohibit the inclusion of strings.h without a sensible use. # Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible. sc_prohibit_strings_without_use: @h='strings.h' \ re='\<(strn?casecmp|ffs(ll)?)\>' \ $(_sc_header_without_use) # Extract the raw list of symbol names with this: gl_extract_define_simple = \ /^\# *define ([A-Z]\w+)\(/ and print $$1 # Filter out duplicates and convert to a space-separated list: _intprops_names = \ $(shell f=$(gnulib_dir)/lib/intprops.h; \ perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ') # Remove trailing space and convert to a regular expression: _intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names))) # Prohibit the inclusion of intprops.h without an actual use. sc_prohibit_intprops_without_use: @h='intprops.h' \ re='\<($(_intprops_syms_re)) *\(' \ $(_sc_header_without_use) _stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t # Prohibit the inclusion of stddef.h without an actual use. sc_prohibit_stddef_without_use: @h='stddef.h' \ re='\<($(_stddef_syms_re))\>' \ $(_sc_header_without_use) _de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)? _de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)? _de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen _dirent_syms_re = $(_de1)|$(_de2)|$(_de3) # Prohibit the inclusion of dirent.h without an actual use. sc_prohibit_dirent_without_use: @h='dirent.h' \ re='\<($(_dirent_syms_re))\>' \ $(_sc_header_without_use) # Prohibit the inclusion of verify.h without an actual use. sc_prohibit_verify_without_use: @h='verify.h' \ re='\<(verify(true|expr)?|assume|static_assert) *\(' \ $(_sc_header_without_use) # Don't include xfreopen.h unless you use one of its functions. sc_prohibit_xfreopen_without_use: @h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use) sc_obsolete_symbols: @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ $(_sc_search_regexp) # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ # Each nonempty ChangeLog line must start with a year number, or a TAB. sc_changelog: @prohibit='^[^12 ]' \ in_vc_files='^ChangeLog$$' \ halt='found unexpected prefix in a ChangeLog' \ $(_sc_search_regexp) # Ensure that each .c file containing a "main" function also # calls bindtextdomain. sc_bindtextdomain: @require='bindtextdomain *\(' \ in_vc_files='\.c$$' \ containing='\<main *(' \ halt='the above files do not call bindtextdomain' \ $(_sc_search_regexp) # Require that the final line of each test-lib.sh-using test be this one: # Exit $fail # Note: this test requires GNU grep's --label= option. Exit_witness_file ?= tests/test-lib.sh Exit_base := $(notdir $(Exit_witness_file)) sc_require_test_exit_idiom: @if test -f $(srcdir)/$(Exit_witness_file); then \ die=0; \ for i in $$($(GREP) -l -F 'srcdir/$(Exit_base)' \ $$($(VC_LIST) tests)); do \ tail -n1 $$i | $(GREP) '^Exit .' > /dev/null \ && : || { die=1; echo $$i; } \ done; \ test $$die = 1 && \ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ echo 1>&2 'Exit something'; \ exit 1; } || :; \ fi sc_trailing_blank: @prohibit='[ ]$$' \ halt='found trailing blank(s)' \ exclude='^Binary file .* matches$$' \ $(_sc_search_regexp) # Match lines like the following, but where there is only one space # between the options and the description: # -D, --all-repeated[=delimit-method] print all duplicate lines\n longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? sc_two_space_separator_in_usage: @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ halt='help2man requires at least two spaces between an option and its description'\ $(_sc_search_regexp) # A regexp matching function names like "error" that may be used # to emit translatable messages. _gl_translatable_diag_func_re ?= error # Look for diagnostics that aren't marked for translation. # This won't find any for which error's format string is on a separate line. sc_unmarked_diagnostics: @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ exclude='(_|ngettext ?)\(' \ halt='found unmarked diagnostic(s)' \ $(_sc_search_regexp) # Avoid useless parentheses like those in this example: # #if defined (SYMBOL) || defined (SYM2) sc_useless_cpp_parens: @prohibit='^# *if .*defined *\(' \ halt='found useless parentheses in cpp directive' \ $(_sc_search_regexp) # List headers for which HAVE_HEADER_H is always true, assuming you are # using the appropriate gnulib module. CAUTION: for each "unnecessary" # #if HAVE_HEADER_H that you remove, be sure that your project explicitly # requires the gnulib module that guarantees the usability of that header. gl_assured_headers_ = \ cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g' # Convert the list of names to upper case, and replace each space with "|". az_ = abcdefghijklmnopqrstuvwxyz AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ gl_header_upper_case_or_ = \ $$($(gl_assured_headers_) \ | tr $(az_)/.- $(AZ_)___ \ | tr -s ' ' '|' \ ) sc_prohibit_always_true_header_tests: @or=$(gl_header_upper_case_or_); \ re="HAVE_($$or)_H"; \ prohibit='\<'"$$re"'\>' \ halt=$$(printf '%s\n' \ 'do not test the above HAVE_<header>_H symbol(s);' \ ' with the corresponding gnulib module, they are always true') \ $(_sc_search_regexp) sc_prohibit_defined_have_decl_tests: @prohibit='(#[ ]*ifn?def|\<defined)\>[ (]+HAVE_DECL_' \ halt='HAVE_DECL macros are always defined' \ $(_sc_search_regexp) # ================================================================== gl_other_headers_ ?= \ intprops.h \ openat.h \ stat-macros.h # Perl -lne code to extract "significant" cpp-defined symbols from a # gnulib header file, eliminating a few common false-positives. # The exempted names below are defined only conditionally in gnulib, # and hence sometimes must/may be defined in application code. gl_extract_significant_defines_ = \ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ && $$2 !~ /(?:rpl_|_used_without_)/\ && $$1 !~ /^(?:NSIG|ENODATA)$$/\ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ and print $$1 # Create a list of regular expressions matching the names # of macros that are guaranteed to be defined by parts of gnulib. define def_sym_regex gen_h=$(gl_generated_headers_); \ (cd $(gnulib_dir)/lib; \ for f in *.in.h $(gl_other_headers_); do \ test -f $$f \ && perl -lne '$(gl_extract_significant_defines_)' $$f; \ done; \ ) | sort -u \ | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/' endef # Don't define macros that we already get from gnulib header files. sc_prohibit_always-defined_macros: @if test -d $(gnulib_dir); then \ case $$(echo all: | $(GREP) -l -f - Makefile) in Makefile);; *) \ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ esac; \ regex=$$($(def_sym_regex)); export regex; \ $(VC_LIST_EXCEPT) \ | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"' \ dummy /dev/null \ && { printf '$(ME): define the above' \ ' via some gnulib .h file\n' 1>&2; \ exit 1; } \ || :; \ fi # ================================================================== # Prohibit checked in backup files. sc_prohibit_backup_files: @$(VC_LIST) | $(GREP) '~$$' && \ { echo '$(ME): found version controlled backup file' 1>&2; \ exit 1; } || : # Require the latest GPL. sc_GPL_version: @prohibit='either ''version [^3]' \ halt='GPL vN, N!=3' \ $(_sc_search_regexp) # Require the latest GFDL. Two regexp, since some .texi files end up # line wrapping between 'Free Documentation License,' and 'Version'. _GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) sc_GFDL_version: @prohibit='$(_GFDL_regexp)' \ halt='GFDL vN, N!=3' \ $(_sc_search_regexp) # Don't use Texinfo's @acronym{}. # https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ sc_texinfo_acronym: @prohibit='@acronym\{' \ in_vc_files='$(texinfo_suffix_re_)' \ halt='found use of Texinfo @acronym{}' \ $(_sc_search_regexp) cvs_keywords = \ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State sc_prohibit_cvs_keyword: @prohibit='\$$($(cvs_keywords))\$$' \ halt='do not use CVS keyword expansion' \ $(_sc_search_regexp) # This Perl code is slightly obfuscated. Not only is each "$" doubled # because it's in a Makefile, but the $$c's are comments; we cannot # use "#" due to the way the script ends up concatenated onto one line. # It would be much more concise, and would produce better output (including # counts) if written as: # perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... # but that would be far less efficient, reading the entire contents # of each file, rather than just the last two bytes of each. # In addition, while the code below detects both blank lines and a missing # newline at EOF, the above detects only the former. # # This is a perl script that is expected to be the single-quoted argument # to a command-line "-le". The remaining arguments are file names. # Print the name of each file that does not end in exactly one newline byte. # I.e., warn if there are blank lines (2 or more newlines), or if the # last byte is not a newline. However, currently we don't complain # about any file that contains exactly one byte. # Exit nonzero if at least one such file is found, otherwise, exit 0. # Warn about, but otherwise ignore open failure. Ignore seek/read failure. # # Use this if you want to remove trailing empty lines from selected files: # perl -pi -0777 -e 's/\n\n+$/\n/' files... # require_exactly_one_NL_at_EOF_ = \ foreach my $$f (@ARGV) \ { \ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ my $$p = sysseek (F, -2, 2); \ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ my $$last_two_bytes; \ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ close F; \ $$c = "ignore read failure"; \ $$p && ($$last_two_bytes eq "\n\n" \ || substr ($$last_two_bytes,1) ne "\n") \ and (print $$f), $$fail=1; \ } \ END { exit defined $$fail } sc_prohibit_empty_lines_at_EOF: @$(VC_LIST_EXCEPT) \ | xargs perl -le '$(require_exactly_one_NL_at_EOF_)' \ || { echo '$(ME): empty line(s) or no newline at EOF' 1>&2; \ exit 1; } \ || : # Make sure we don't use st_blocks. Use ST_NBLOCKS instead. # This is a bit of a kludge, since it prevents use of the string # even in comments, but for now it does the job with no false positives. sc_prohibit_stat_st_blocks: @prohibit='[.>]st_blocks' \ halt='do not use st_blocks; use ST_NBLOCKS' \ $(_sc_search_regexp) # Make sure we don't define any S_IS* macros in src/*.c files. # They're already defined via gnulib's sys/stat.h replacement. sc_prohibit_S_IS_definition: @prohibit='^ *# *define *S_IS' \ halt='do not define S_IS* macros; include <sys/stat.h>' \ $(_sc_search_regexp) # Perl block to convert a match to FILE_NAME:LINENO:TEST, # that is shared by two definitions below. perl_filename_lineno_text_ = \ -e ' {' \ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ -e ' print "$$ARGV:$$n:$$v\n";' \ -e ' }' prohibit_doubled_words_ = \ the then in an on if is it but for or at and do to # expand the regex before running the check to avoid using expensive captures prohibit_doubled_word_expanded_ = \ $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_))) prohibit_doubled_word_RE_ ?= \ /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims prohibit_doubled_word_ = \ -e 'while ($(prohibit_doubled_word_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_doubled_word_match_RE_ ?= ^$$ sc_prohibit_doubled_word: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_doubled_word_) \ | $(GREP) -vE '$(ignore_doubled_word_match_RE_)' \ | $(GREP) . \ && { echo '$(ME): doubled words' 1>&2; exit 1; } \ || : # A regular expression matching undesirable combinations of words like # "can not"; this matches them even when the two words appear on different # lines, but not when there is an intervening delimiter like "#" or "*". # Similarly undesirable, "See @xref{...}", since an @xref should start # a sentence. Explicitly prohibit any prefix of "see" or "also". # Also prohibit a prefix matching "\w+ +". # @pxref gets the same see/also treatment and should be parenthesized; # presume it must *not* start a sentence. # POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too. bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ prohibit_undesirable_word_seq_RE_ ?= \ /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims prohibit_undesirable_word_seq_ = \ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_undesirable_word_sequence_RE_ ?= ^$$ sc_prohibit_undesirable_word_seq: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_undesirable_word_seq_) \ | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)' \ | $(GREP) . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } \ || : # Except for shell files and for loops, double semicolon is probably a mistake sc_prohibit_double_semicolon: @prohibit='; *;[ {} \]*(/[/*]|$$)' \ in_vc_files='\.[chly]$$' \ exclude='\bfor *\(.*\)' \ halt="Double semicolon detected" \ $(_sc_search_regexp) _ptm1 = use "test C1 && test C2", not "test C1 -''a C2" _ptm2 = use "test C1 || test C2", not "test C1 -''o C2" # Using test's -a and -o operators is not portable. # We prefer test over [, since the latter is spelled [[ in configure.ac. sc_prohibit_test_minus_ao: @prohibit='(\<test| \[+) .+ -[ao] ' \ halt='$(_ptm1); $(_ptm2)' \ $(_sc_search_regexp) # Avoid a test bashism. sc_prohibit_test_double_equal: @prohibit='(\<test| \[+) .+ == ' \ containing='#! */bin/[a-z]*sh' \ halt='use "test x = x", not "test x =''= x"' \ $(_sc_search_regexp) # Each program that uses proper_name_utf8 must link with one of the # ICONV libraries. Otherwise, some ICONV library must appear in LDADD. # The perl -0777 invocation below extracts the possibly-multi-line # definition of LDADD from the appropriate Makefile.am and exits 0 # when it contains "ICONV". sc_proper_name_utf8_requires_ICONV: @progs=$$($(VC_LIST_EXCEPT) \ | xargs $(GREP) -l 'proper_name_utf8 ''("'); \ if test "x$$progs" != x; then \ fail=0; \ for p in $$progs; do \ dir=$$(dirname "$$p"); \ perl -0777 \ -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)' \ $$dir/Makefile.am && continue; \ base=$$(basename "$$p" .c); \ $(GREP) "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ done; \ test $$fail = 1 && \ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ exit 1; } || :; \ fi # Warn about "c0nst struct Foo const foo[]", # but not about "char const *const foo" or "#define const const". sc_redundant_const: @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ halt='redundant "const" in declarations' \ $(_sc_search_regexp) sc_const_long_option: @prohibit='^ *static.*struct option ' \ exclude='const struct option|struct option const' \ halt='add "const" to the above declarations' \ $(_sc_search_regexp) NEWS_hash = \ $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ $(srcdir)/NEWS \ | perl -0777 -pe \ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ | md5sum - \ | $(SED) 's/ .*//') # Ensure that we don't accidentally insert an entry into an old NEWS block. sc_immutable_NEWS: @if test -f $(srcdir)/NEWS; then \ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ fi # Update the hash stored above. Do this after each release and # for any corrections to old entries. update-NEWS-hash: NEWS perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ $(srcdir)/cfg.mk # Ensure that we use only the standard $(VAR) notation, # not @...@ in Makefile.am, now that we can rely on automake # to emit a definition for each substituted variable. # However, there is still one case in which @VAR@ use is not just # legitimate, but actually required: when augmenting an automake-defined # variable with a prefix. For example, gettext uses this: # MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ # otherwise, makeinfo would put German or French (current locale) # navigation hints in the otherwise-English documentation. # # Allow the package to add exceptions via a hook in cfg.mk; # for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by # setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. _makefile_at_at_check_exceptions ?= sc_makefile_at_at_check: @perl -ne '/\@\w+\@/' \ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ -e ''$(_makefile_at_at_check_exceptions) \ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ $$($(VC_LIST_EXCEPT) | $(GREP) -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : news-check: NEWS $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ | $(GREP) -E $(news-check-regexp) >/dev/null; then \ :; \ else \ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ exit 1; \ fi sc_makefile_TAB_only_indentation: @prohibit='^ [ ]{8}' \ in_vc_files='akefile|\.mk$$' \ halt='found TAB-8-space indentation' \ $(_sc_search_regexp) sc_m4_quote_check: @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ in_vc_files='(^configure\.ac|\.m4)$$' \ halt='quote the first arg to AC_DEF*' \ $(_sc_search_regexp) fix_po_file_diag = \ 'you have changed the set of files with translatable diagnostics;\n\ apply the above patch\n' # Generate a list of files in which to search for translatable strings. perl_translatable_files_list_ = \ -e 'foreach $$file (@ARGV) {' \ -e ' \# Consider only file extensions with one or two letters' \ -e ' $$file =~ /\...?$$/ or next;' \ -e ' \# Ignore m4 and mk files' \ -e ' $$file =~ /\.m[4k]$$/ and next;' \ -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \ -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \ -e ' and next;' \ -e ' \# Skip unreadable files' \ -e ' -r $$file or next;' \ -e ' print "$$file ";' \ -e '}' # Verify that all source files using _() (more specifically, files that # match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] _gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) sc_po_check: @if test -f $(po_file); then \ $(GREP) -E -v '^(#|$$)' $(po_file) \ | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \ { $(VC_LIST_EXCEPT); echo $(generated_files); } \ | xargs perl $(perl_translatable_files_list_) \ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | sort -u > $@-2; \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ rm -f $@-1 $@-2; \ fi # Sometimes it is useful to change the PATH environment variable # in Makefiles. When doing so, it's better not to use the Unix-centric # path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead' sc_makefile_path_separator_check: @prohibit='PATH[=].*:' \ in_vc_files='akefile|\.mk$$' \ halt=$(msg) \ $(_sc_search_regexp) # Check that 'make alpha' will not fail at the end of the process, # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # and is read-only. writable-files: $(AM_V_GEN)if test -d $(release_archive_dir); then \ for file in $(DIST_ARCHIVES); do \ for p in ./ $(release_archive_dir)/; do \ test -e $$p$$file || continue; \ test -w $$p$$file \ || { echo ERROR: $$p$$file is not writable; fail=1; }; \ done; \ done; \ test "$$fail" && exit 1 || : ; \ else :; \ fi v_etc_file = $(gnulib_dir)/lib/version-etc.c sample-test = tests/sample-test texi = doc/$(PACKAGE).texi # Make sure that the copyright date in $(v_etc_file) is up to date. # Do the same for the $(sample-test) and the main doc/.texi file. sc_copyright_check: @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ in_files=$(v_etc_file) \ halt='out of date copyright in $(v_etc_file); update it' \ $(_sc_search_regexp) @require='# Copyright \(C\) '$$(date +%Y)' Free' \ in_vc_files=$(sample-test) \ halt='out of date copyright in $(sample-test); update it' \ $(_sc_search_regexp) @require='Copyright @copyright\{\} .*'$$(date +%Y) \ in_vc_files=$(texi) \ halt='out of date copyright in $(texi); update it' \ $(_sc_search_regexp) # If tests/help-version exists and seems to be new enough, assume that its # use of init.sh and path_prepend_ is correct, and ensure that every other # use of init.sh is identical. # This is useful because help-version cross-checks prog --version # with $(VERSION), which verifies that its path_prepend_ invocation # sets PATH correctly. This is an inexpensive way to ensure that # the other init.sh-using tests also get it right. _hv_file ?= $(srcdir)/tests/help-version _hv_regex_weak ?= ^ *\. .*/init\.sh" # Fix syntax-highlighters " _hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" sc_cross_check_PATH_usage_in_tests: @if test -f $(_hv_file); then \ $(GREP) -l 'VERSION mismatch' $(_hv_file) >/dev/null \ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ exit 0; }; \ $(GREP) -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ exit 1; }; \ good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file)); \ $(VC_LIST_EXCEPT) \ | xargs $(GREP) -lE '$(_hv_regex_weak)' \ | xargs $(GREP) -LFx "$$good" \ | $(GREP) . \ && { printf "$(ME): the above files use" \ " path_prepend_ inconsistently\n" 1>&2; \ exit 1; } \ || :; \ fi # BRE regex of file contents to identify a test script. _test_script_regex ?= \<init\.sh\> # In tests, use "compare expected actual", not the reverse. sc_prohibit_reversed_compare_failure: @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \ containing='$(_test_script_regex)' \ halt='reversed compare arguments' \ $(_sc_search_regexp) # #if HAVE_... will evaluate to false for any non numeric string. # That would be flagged by using -Wundef, however gnulib currently # tests many undefined macros, and so we can't enable that option. # So at least preclude common boolean strings as macro values. sc_Wundef_boolean: @prohibit='^#define.*(yes|no|true|false)$$' \ in_files='$(CONFIG_INCLUDE)' \ halt='Use 0 or 1 for macro values' \ $(_sc_search_regexp) # Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might # not be constant, or might overflow a stack. In general, use PATH_MAX as # a limit, not an array or alloca size. sc_prohibit_path_max_allocation: @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \ halt='Avoid stack allocations of size PATH_MAX' \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2009-4029: @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make dist*" rules, and upgrade to fixed automake' \ ' see https://bugzilla.redhat.com/show_bug.cgi?id=542609 for details') \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2012-3386: @prohibit='chmod a\+w \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make distcheck", and upgrade to fixed automake' \ ' see https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3386 for details') \ $(_sc_search_regexp) vc-diff-check: $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : $(AM_V_at)if test -s vc-diffs; then \ cat vc-diffs; \ echo "Some files are locally modified:" 1>&2; \ exit 1; \ else \ rm vc-diffs; \ fi rel-files = $(DIST_ARCHIVES) gnulib-version = $$(cd $(gnulib_dir) \ && { git describe || git rev-parse --short=10 HEAD; } ) bootstrap-tools ?= autoconf,automake,gnulib gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) # If it's not already specified, derive the GPG key ID from # the signed tag we've just applied to mark this release. gpg_key_ID ?= \ $$(cd $(srcdir) \ && git cat-file tag v$(VERSION) \ | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_stable = \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) announcement_Cc_alpha = $(translation_project_) announcement_mail_headers_alpha = \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) announcement_mail_headers_beta = $(announcement_mail_headers_alpha) announcement_Cc_ ?= $(announcement_Cc_$(release-type)) announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) announcement: NEWS ChangeLog $(rel-files) # Not $(AM_V_GEN) since the output of this command serves as # announcement message: it would start with " GEN announcement". $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \ --mail-headers='$(announcement_mail_headers_)' \ --release-type=$(release-type) \ --package=$(PACKAGE) \ --prev=$(PREV_VERSION) \ --curr=$(VERSION) \ --gpg-key-id=$(gpg_key_ID) \ --srcdir=$(srcdir) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ echo --gnulib-version=$(gnulib-version);; esac) \ $(addprefix --url-dir=, $(url_dir_list)) .PHONY: release-commit release-commit: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/do-release-commit-and-tag \ -C $(abs_builddir) $(RELEASE) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = https://ftp.gnu.org/gnu www-gnu = https://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) upload_command = \ $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ --to $(gnu_rel_host):$(upload_dest_dir_) \ $(rel-files) emit_upload_commands: @echo ===================================== @echo ===================================== @echo '$(upload_command)' @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== .PHONY: upload upload: $(AM_V_GEN)$(upload_command) define emit-commit-log printf '%s\n' 'maint: post-release administrivia' '' \ '* NEWS: Add header line for next release.' \ '* .prev-version: Record previous version.' \ '* cfg.mk (old_NEWS_hash): Auto-update.' endef .PHONY: no-submodule-changes no-submodule-changes: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ diff=$$(cd $(srcdir) && git submodule -q foreach \ git diff-index --name-only HEAD) \ || exit 1; \ case $$diff in '') ;; \ *) echo '$(ME): submodule files are locally modified:'; \ echo "$$diff"; exit 1;; esac; \ else \ : ; \ fi submodule-checks ?= no-submodule-changes public-submodule-commit # Ensure that each sub-module commit we're using is public. # Without this, it is too easy to tag and release code that # cannot be built from a fresh clone. .PHONY: public-submodule-commit public-submodule-commit: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ cd $(srcdir) && \ git submodule --quiet foreach \ 'test "$$(git rev-parse "$$sha1")" \ = "$$(git merge-base origin "$$sha1")"' \ || { echo '$(ME): found non-public submodule commit' >&2; \ exit 1; }; \ else \ : ; \ fi # This rule has a high enough utility/cost ratio that it should be a # dependent of "check" by default. However, some of us do occasionally # commit a temporary change that deliberately points to a non-public # submodule commit, and want to be able to use rules like "make check". # In that case, run e.g., "make check gl_public_submodule_commit=" # to disable this test. gl_public_submodule_commit ?= public-submodule-commit check: $(gl_public_submodule_commit) .PHONY: alpha beta stable release ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) $(AM_V_GEN)test $@ = stable \ && { echo $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(AM_V_at)$(MAKE) vc-diff-check $(AM_V_at)$(MAKE) news-check $(AM_V_at)$(MAKE) distcheck $(AM_V_at)$(MAKE) dist $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ release: $(AM_V_GEN)$(MAKE) _version $(AM_V_GEN)$(MAKE) $(release-type) # Override this in cfg.mk if you follow different procedures. release-prep-hook ?= release-prep gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] .PHONY: release-prep release-prep: $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ > ~/announce-$(my_distdir) $(AM_V_at)if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi $(AM_V_at)echo $(VERSION) > $(prev_version_file) $(AM_V_at)$(MAKE) update-NEWS-hash $(AM_V_at)perl -pi \ -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ $(srcdir)/NEWS $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ cd $(srcdir) && $(VC) commit -m "$$msg" -a # Override this with e.g., -s $(srcdir)/some_other_name.texi # if the default $(PACKAGE)-derived name doesn't apply. gendocs_options_ ?= .PHONY: web-manual web-manual: $(AM_V_GEN)test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : $(AM_V_at)cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." .PHONY: web-manual-update web-manual-update: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) # Code Coverage init-coverage: $(MAKE) $(AM_MAKEFLAGS) clean lcov --directory . --zerocounters COVERAGE_CCOPTS ?= "-g --coverage" COVERAGE_OUT ?= doc/coverage build-coverage: $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check mkdir -p $(COVERAGE_OUT) lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ --capture gen-coverage: genhtml --output-directory $(COVERAGE_OUT) \ $(COVERAGE_OUT)/$(PACKAGE).info \ --highlight --frames --legend \ --title "$(PACKAGE_NAME)" coverage: $(MAKE) init-coverage $(MAKE) build-coverage $(MAKE) gen-coverage # Some projects carry local adjustments for gnulib modules via patches in # a gnulib patch directory whose default name is gl/ (defined in bootstrap # via local_gl_dir=gl). Those patches become stale as the originals evolve # in gnulib. Use this rule to refresh any stale patches. It applies each # patch to the original in $(gnulib_dir) and uses the temporary result to # generate a fuzz-free .diff file. If you customize the name of your local # gnulib patch directory via bootstrap.conf, this rule detects that name. # Run this from a non-VPATH (i.e., srcdir) build directory. .PHONY: refresh-gnulib-patches refresh-gnulib-patches: gl=gl; \ if test -f bootstrap.conf; then \ t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ -e 'END{defined $$d and print $$d}' bootstrap.conf); \ test -n "$$t" && gl=$$t; \ fi; \ for diff in $$(cd $$gl; git ls-files | $(GREP) '\.diff$$'); do \ b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ VERSION_CONTROL=none \ patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ ( cd $(gnulib_dir) || exit 1; \ git diff "$$b" > "../$$gl/$$diff"; \ git checkout $$b ) || exit 1; \ done # Update gettext files. PACKAGE ?= $(shell basename $(PWD)) PO_DOMAIN ?= $(PACKAGE) POURL = https://translationproject.org/latest/$(PO_DOMAIN)/ PODIR ?= po refresh-po: rm -f $(PODIR)/*.po && \ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ echo 'en@boldquot' > $(PODIR)/LINGUAS && \ echo 'en@quot' >> $(PODIR)/LINGUAS && \ ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \ sort >> $(PODIR)/LINGUAS # Running indent once is not idempotent, but running it twice is. INDENT_SOURCES ?= $(C_SOURCES) .PHONY: indent indent: indent $(INDENT_SOURCES) indent $(INDENT_SOURCES) # If you want to set UPDATE_COPYRIGHT_* environment variables, # put the assignments in this variable. update-copyright-env ?= # Run this rule once per year (usually early in January) # to update all FSF copyright year lists in your project. # If you have an additional project-specific rule, # add it in cfg.mk along with a line 'update-copyright: prereq'. # By default, exclude all variants of COPYING; you can also # add exemptions (such as ChangeLog..* for rotated change logs) # in the file .x-update-copyright. .PHONY: update-copyright update-copyright: $(AM_V_GEN)$(GREP) -l -w Copyright \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ # This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not # overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. # NOTE: to override any _gl_TS_* default value, you must # define the variable(s) using "export" in cfg.mk. _gl_TS_dir ?= src ALL_RECURSIVE_TARGETS += sc_tight_scope sc_tight_scope: tight-scope.mk @fail=0; \ if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ > /dev/null \ && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ > /dev/null 2>&1; then \ echo '$(ME): skipping $@'; \ else \ $(MAKE) -s -C $(_gl_TS_dir) \ -f Makefile \ -f $(abs_top_srcdir)/cfg.mk \ -f $(abs_top_builddir)/$< \ _gl_tight_scope \ || fail=1; \ fi; \ rm -f $<; \ exit $$fail tight-scope.mk: $(ME) @rm -f $@ $@-t @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t @chmod a=r $@-t && mv $@-t $@ ifeq (a,b) # TS-start # Most functions should have static scope. # Any that don't must be marked with 'extern', but 'main' # and 'usage' are exceptions: they're always extern, but # do not need to be marked. Symbols matching '__.*' are # reserved by the compiler, so are automatically excluded below. _gl_TS_unmarked_extern_functions ?= main usage _gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/ # If your project uses a macro like "XTERN", then put # the following in cfg.mk to override this default: # export _gl_TS_extern = extern|XTERN _gl_TS_extern ?= extern # The second nm|grep checks for file-scope variables with 'extern' scope. # Without gnulib's progname module, you might put program_name here. # Symbols matching '__.*' are reserved by the compiler, # so are automatically excluded below. _gl_TS_unmarked_extern_vars ?= # NOTE: the _match variables are perl expressions -- not mere regular # expressions -- so that you can extend them to match other patterns # and easily extract matched variable names. # For example, if your project declares some global variables via # a macro like this: GLOBAL(type, var_name, initializer), then you # can override this definition to automatically extract those names: # export _gl_TS_var_match = \ # /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ _gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ # The names of object files in (or relative to) $(_gl_TS_dir). _gl_TS_obj_files ?= *.$(OBJEXT) # Files in which to search for the one-line style extern declarations. # $(_gl_TS_dir)-relative. _gl_TS_headers ?= $(noinst_HEADERS) _gl_TS_other_headers ?= *.h .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) sed_wrap='s/^/^_?/;s/$$/$$/'; \ t=exceptions-$$$$; \ trap 's=$$?; rm -f $$t; exit $$s' 0; \ for sig in 1 2 3 13 15; do \ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ done; \ src=`for f in $(SOURCES); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ hdr=`for f in $(_gl_TS_headers); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ $(GREP) -h -A1 '^extern .*[^;]$$' $$src \ | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \ perl -lne \ '$(_gl_TS_function_match) and print $$1' $$hdr; \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|$(GREP) -Ev -f $$t \ && { echo the above functions should have static scope >&2; \ exit 1; } || : ; \ ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print $$1' \ $$hdr $(_gl_TS_other_headers) \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ | sort -u | $(GREP) -Ev -f $$t \ && { echo the above variables should have static scope >&2; \ exit 1; } || : # TS-end endif ����������������������������������������������������������������������������������������������������������������������gnulib-20210822~d383792/users.txt�������������������������������������������������������������������0000664�0000000�0000000�00000017404�14110572173�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The following packages appear to be using gnulib and gnulib-tool: acct https://svn.savannah.gnu.org/viewvc/trunk/?root=acct anubis https://git.savannah.gnu.org/gitweb/?p=anubis.git;a=tree augeas https://github.com/hercules-team/augeas autobuild https://git.savannah.nongnu.org/gitweb/?p=autobuild.git;a=tree barcode https://git.savannah.gnu.org/gitweb/?p=barcode.git;a=tree bison https://git.savannah.gnu.org/gitweb/?p=bison.git;a=tree clisp https://gitlab.com/gnu-clisp/clisp coreutils https://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=tree cmogstored https://yhbt.net/cmogstored/ cpio https://git.savannah.gnu.org/gitweb/?p=cpio.git;a=tree CSSC https://git.savannah.gnu.org/gitweb/?p=cssc.git;a=tree cvs https://cvs.savannah.gnu.org/viewcvs/cvs/ccvs/ cvsps https://sourceforge.net/projects/cvsps/ datamash https://git.savannah.gnu.org/gitweb/?p=datamash.git;a=tree diffutils https://git.savannah.gnu.org/gitweb/?p=diffutils.git;a=tree emacs https://git.savannah.gnu.org/gitweb/?p=emacs.git;a=tree febootstrap https://fedorapeople.org/cgit/rjones/public_git/febootstrap.git/ findutils https://git.savannah.gnu.org/gitweb/?p=findutils.git;a=tree freedink https://git.savannah.gnu.org/gitweb/?p=freedink.git;a=tree gcal https://git.savannah.gnu.org/gitweb/?p=gcal.git;a=tree gdb https://sourceware.org/git/?p=gdb.git;a=tree gettext https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=tree gengetopt https://git.savannah.gnu.org/gitweb/?p=gengetopt.git;a=tree gmediaserver https://cvs.savannah.gnu.org/viewvc/gmediaserver/gmediaserver/ gnuit https://www.gnu.org/software/gnuit/ https://git.savannah.gnu.org/gitweb/?p=gnuit.git;a=tree gnutls https://www.gnutls.org/ https://gitlab.com/gnutls/gnutls.git gpg https://gnupg.org/ https://git.gnupg.org/ groff https://git.savannah.gnu.org/gitweb/?p=groff.git;a=tree grub https://git.savannah.gnu.org/gitweb/?p=grub.git;a=tree gsasl https://git.savannah.gnu.org/gitweb/?p=gsasl.git;a=tree gss https://git.savannah.gnu.org/gitweb/?p=gss.git;a=tree gtkreindeer https://git.savannah.gnu.org/gitweb/?p=gtkreindeer.git;a=tree gtk-vnc https://gitlab.gnome.org/GNOME/gtk-vnc/tree/master/ grep https://git.savannah.gnu.org/gitweb/?p=grep.git;a=tree guile https://git.savannah.gnu.org/gitweb/?p=guile.git;a=tree gzip https://git.savannah.gnu.org/gitweb/?p=gzip.git;a=tree hello https://git.savannah.gnu.org/gitweb/?p=hello.git;a=tree hivex https://github.com/libguestfs/hivex icoutils https://git.savannah.nongnu.org/gitweb/?p=icoutils.git;a=tree inetutils https://git.savannah.gnu.org/gitweb/?p=inetutils.git;a=tree iwhd https://github.com/markmc/iwhd jugtail https://cvs.savannah.gnu.org/viewvc/jugtail/jugtail/ jwhois https://git.savannah.gnu.org/gitweb/?p=jwhois.git;a=tree libdap https://github.com/OPENDAP/libdap libffcall https://git.savannah.gnu.org/gitweb/?p=libffcall.git;a=tree libgnupdf https://bzr.savannah.gnu.org/lh/pdf/libgnupdf/trunk/files libguestfs https://github.com/libguestfs/libguestfs libiconv https://git.savannah.gnu.org/gitweb/?p=libiconv.git;a=tree libidn https://git.savannah.gnu.org/gitweb/?p=libidn.git;a=tree libidn2 https://gitlab.com/libidn/libidn2 libksba https://www.gnupg.org/related_software/libksba/index.html libntlm https://git.savannah.nongnu.org/gitweb/?p=libntlm.git;a=tree libprelude https://www.prelude-siem.org/projects/libprelude/repository libpreludedb https://www.prelude-siem.org/projects/libpreludedb/repository libtasn1 https://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=tree libunistring https://git.savannah.gnu.org/gitweb/?p=libunistring.git;a=tree libvirt https://libvirt.org/ https://libvirt.org/git/?p=libvirt.git;a=tree m4 https://git.savannah.gnu.org/gitweb/?p=m4.git;a=tree mailfromd http://git.gnu.org.ua/cgit/mailfromd.git/tree/ mailutils https://git.savannah.gnu.org/gitweb/?p=mailutils.git;a=tree man-db https://bazaar.launchpad.net/~cjwatson/man-db/master/files miktex https://miktex.org/ https://github.com/MiKTeX/miktex mini-httpd https://git.savannah.gnu.org/gitweb/?p=mini-httpd.git;a=tree msmtp https://git.marlam.de/gitweb/?p=msmtp.git;a=tree myserver https://git.savannah.gnu.org/gitweb/?p=myserver.git;a=summary nagios-plugins https://github.com/nagios-plugins/nagios-plugins nano https://git.savannah.gnu.org/gitweb/?p=nano.git;a=tree Net::CDP http://cpansearch.perl.org/src/MCHAPMAN/Net-CDP-0.09/libcdp/ netcf https://pagure.io/netcf/tree/master OATH Toolkit https://gitlab.com/oath-toolkit/oath-toolkit/ octave https://hg.savannah.gnu.org/hgweb/octave/file/ OPeNDAP https://scm.opendap.org/svn/trunk/ parted https://git.savannah.gnu.org/gitweb/?p=parted.git;a=tree patch https://git.savannah.gnu.org/gitweb/?p=patch.git;a=tree poke https://git.savannah.gnu.org/gitweb/?p=poke.git;a=tree prelude-lml https://www.prelude-siem.org/projects/prelude-lml/repository prelude-manager https://www.prelude-siem.org/projects/prelude-manager/repository pspp https://git.savannah.gnu.org/gitweb/?p=pspp.git;a=tree radius https://git.savannah.gnu.org/gitweb/?p=radius.git;a=tree recutils https://git.savannah.gnu.org/gitweb/?p=recutils.git;a=tree reindeer https://git.savannah.gnu.org/gitweb/?p=reindeer.git;a=tree rcs https://git.savannah.gnu.org/gitweb/?p=rcs.git;a=tree sed https://git.savannah.gnu.org/gitweb/?p=sed.git;a=tree sharutils https://git.savannah.gnu.org/gitweb/?p=sharutils.git;a=tree shishi https://git.savannah.gnu.org/gitweb/?p=shishi.git;a=tree tar https://git.savannah.gnu.org/gitweb/?p=tar.git;a=tree texinfo https://git.savannah.gnu.org/gitweb/?p=texinfo.git;a=tree time https://git.savannah.gnu.org/gitweb/?p=time.git;a=tree tmpwatch https://pagure.io/tmpwatch/tree/master vc-dwim https://git.savannah.gnu.org/gitweb/?p=vc-dwim.git;a=tree wdiff https://bzr.savannah.gnu.org/lh/wdiff/trunk/files wget https://git.savannah.gnu.org/gitweb/?p=wget.git;a=tree wget2 https://git.savannah.gnu.org/gitweb/?p=wget/wget2.git;a=tree wydawca http://git.gnu.org.ua/cgit/wydawca.git/tree/ wyslij-po http://svn.gnu.org.ua/viewvc/wyslij-po/trunk/ zile https://git.savannah.gnu.org/gitweb/?p=zile.git;a=tree The following packages are using gnulib without gnulib-tool: gawk https://git.savannah.gnu.org/gitweb/?p=gawk.git;a=tree libtool https://git.savannah.gnu.org/gitweb/?p=libtool.git;a=tree libgcrypt https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=tree Articles: "Using Gnulib to improve software portability", by Diego 'Flameeyes' Pettenò on December 28, 2005, https://www.linux.com/news/using-gnulib-improve-software-portability ----- Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. ----- Hey Emacs! Local Variables: coding: utf-8 indent-tabs-mode: nil whitespace-check-buffer-indent: nil End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������